[SCM] eclipse - Powerful IDE written in java - Debian package. branch, upstream, updated. 0c6dea33e33cbba78091790077572cfae5bc1bc9

Niels Thykier nthykier at alioth.debian.org
Mon Aug 8 21:10:53 UTC 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "eclipse - Powerful IDE written in java - Debian package.".

The branch, upstream has been updated
       via  0c6dea33e33cbba78091790077572cfae5bc1bc9 (commit)
      from  ce3e1314de425cf4385647df754276f00acd834d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 .project                                           |   11 +
 ChangeLog                                          |   56 +
 bootstrap/configuration/config.ini                 |    2 +
 build.properties                                   |   10 +-
 build.xml                                          |  149 +-
 buildEclipseBuildSource.sh                         |    4 +-
 buildSDKSource.sh                                  |   23 +-
 dependencies.properties                            |   18 +-
 .../META-INF/MANIFEST.MF                           | 4238 -----------
 .../META-INF/MANIFEST.MF                           |   28 +
 .../META-INF/MANIFEST.MF                           |  360 -
 .../META-INF/MANIFEST.MF                           |  173 -
 .../META-INF/MANIFEST.MF                           |   13 +
 .../META-INF/MANIFEST.MF                           |  209 -
 .../META-INF/MANIFEST.MF                           |   11 +
 .../META-INF/MANIFEST.MF                           |  119 -
 .../META-INF/MANIFEST.MF                           |   13 +
 .../META-INF/MANIFEST.MF                           |   86 -
 .../META-INF/MANIFEST.MF                           |   11 +
 .../META-INF/MANIFEST.MF                           |  111 -
 .../META-INF/MANIFEST.MF                           |  462 ++
 .../META-INF/MANIFEST.MF                           | 2348 +++++++
 .../META-INF/MANIFEST.MF                           |  916 ---
 .../META-INF/MANIFEST.MF                           |  520 --
 .../META-INF/MANIFEST.MF                           |  519 ++
 .../META-INF/MANIFEST.MF                           |  544 --
 .../META-INF/MANIFEST.MF                           |   30 +
 .../META-INF/MANIFEST.MF                           |  304 -
 .../META-INF/MANIFEST.MF                           |   25 +
 eclipse-build-additionalArchs.tar.bz2              |  Bin 96235 -> 96412 bytes
 eclipse-build-config/.project                      |   11 +
 eclipse-build-config/ChangeLog                     |    4 +
 eclipse-build-config/build.properties.in           |    1 -
 .../productFiles/platform.sdk/platform.product     |    8 +-
 .../productFiles/platform/platform.product         |    2 +-
 .../productFiles/rcp.sdk/rcp.product               |    8 +-
 eclipse-build-config/productFiles/rcp/rcp.product  |   10 +-
 .../productFiles/rcpConfig/buildConfiguration.xml  |    3 +-
 .../productFiles/rcpConfig/feature.xml             |    2 +-
 eclipse-build-config/productFiles/sdk/p2.inf       |    8 +-
 eclipse-build-config/productFiles/sdk/sdk.product  |    8 +-
 eclipse-build-feature/.project                     |   11 +
 eclipse-build-generatedScripts.tar.bz2             |  Bin 21498 -> 22113 bytes
 eclipse/directory.txt                              |  937 ++--
 eclipse/featureVersions.properties                 |   81 +-
 eclipse/features/com.ibm.icu.base/.project         |   11 +
 eclipse/features/com.ibm.icu.base/feature.xml      |    2 +-
 eclipse/features/master-ecf/build.properties       |    2 +-
 .../features/master-equinox-p2/build.properties    |    2 +-
 eclipse/features/master-equinox-p2/feature.xml     |    4 +-
 .../master-equinox-weaving/build.properties        |    2 +-
 .../features/master-equinox-weaving/feature.xml    |    2 +-
 eclipse/features/master-equinox/build.properties   |    2 +-
 eclipse/features/master-equinox/feature.xml        |   44 +-
 eclipse/features/master-jetty/feature.xml          |    4 +-
 eclipse/features/master/feature.xml                |   22 +-
 .../org.eclipse.core.runtime.feature/.project      |   17 +
 .../build.properties                               |    2 +
 .../feature.properties                             |   33 +
 .../org.eclipse.core.runtime.feature/feature.xml   |   61 +
 eclipse/features/org.eclipse.cvs/build.properties  |    4 +-
 eclipse/features/org.eclipse.cvs/epl-v10.html      |  328 -
 .../features/org.eclipse.cvs/feature.properties    |  145 +-
 eclipse/features/org.eclipse.cvs/feature.xml       |   14 +-
 eclipse/features/org.eclipse.cvs/license.html      |  107 -
 .../features/org.eclipse.cvs/rootfiles/notice.html |  161 +-
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  138 +-
 .../sourceTemplateFeature/license.html             |  107 -
 .../sourceTemplatePlugin/about.properties          |    4 +-
 .../build.properties                               |    5 +-
 .../epl-v10.html                                   |  328 -
 .../feature.properties                             |  135 +-
 .../org.eclipse.equinox.compendium.sdk/feature.xml |   20 +-
 .../license.html                                   |  107 -
 .../org.eclipse.equinox.core.feature/.project      |   17 +
 .../build.properties                               |   14 +
 .../feature.properties                             |   33 +
 .../org.eclipse.equinox.core.feature/feature.xml   |   80 +
 .../org.eclipse.equinox.core.sdk/build.properties  |    5 +-
 .../org.eclipse.equinox.core.sdk/epl-v10.html      |  328 -
 .../feature.properties                             |  135 +-
 .../org.eclipse.equinox.core.sdk/feature.xml       |   27 +-
 .../org.eclipse.equinox.core.sdk/license.html      |  107 -
 .../org.eclipse.equinox.executable/.cproject       |  111 +-
 .../org.eclipse.equinox.executable/.project        |    8 +-
 .../.settings/org.eclipse.cdt.core.prefs           |  275 +-
 .../macosx/ppc/Eclipse.app/Contents/Info.plist     |    6 +-
 .../macosx/x86/Eclipse.app/Contents/Info.plist     |    6 +-
 .../macosx/ppc/Eclipse.app/Contents/Info.plist     |    6 +-
 .../macosx/x86/Eclipse.app/Contents/Info.plist     |    6 +-
 .../macosx/x86_64/Eclipse.app/Contents/Info.plist  |    6 +-
 .../build.properties                               |    4 +-
 .../org.eclipse.equinox.executable/epl-v10.html    |  328 -
 .../feature.properties                             |  133 +-
 .../org.eclipse.equinox.executable/feature.xml     |   47 +-
 .../library/carbon/build.sh                        |    2 +-
 .../library/carbon/eclipseCarbon.c                 |    2 +-
 .../library/carbon/eclipseCarbonCommon.c           |    2 +-
 .../library/carbon/eclipseCarbonMain.c             |    2 +-
 .../library/carbon/eclipseMain.c                   |    2 +-
 .../library/carbon/make_carbon.mak                 |    2 +-
 .../library/eclipse.c                              |  102 +-
 .../library/eclipseCommon.c                        |    6 +-
 .../library/eclipseConfig.c                        |   25 +-
 .../library/eclipseConfig.h                        |   15 +-
 .../library/eclipseMain.c                          |   27 +-
 .../library/eclipseMozilla.c                       |   88 +-
 .../library/eclipseMozilla.h                       |    2 +-
 .../library/eclipseNix.c                           |    2 +-
 .../library/eclipseOS.h                            |    2 +-
 .../library/eclipseShm.c                           |    2 +-
 .../library/eclipseShm.h                           |    2 +-
 .../library/eclipseUnicode.h                       |    2 +-
 .../library/eclipseUtil.c                          |   45 +-
 .../library/eclipseUtil.h                          |    9 +-
 .../library/gtk/build.sh                           |   25 +-
 .../library/gtk/eclipse.ini                        |    4 -
 .../library/gtk/eclipseGtk.c                       |   43 +-
 .../library/gtk/eclipseGtk.h                       |    6 +-
 .../library/gtk/eclipseGtkCommon.c                 |    2 +-
 .../library/gtk/eclipseGtkInit.c                   |   20 +-
 .../library/gtk/make_aix.mak                       |   16 +-
 .../library/gtk/make_hpux.mak                      |   99 +
 .../library/gtk/make_linux.mak                     |    2 +-
 .../library/gtk/make_solaris.mak                   |    2 +-
 .../library/make_version.mak                       |    4 +-
 .../library/motif/NgCommon.c                       |    2 +-
 .../library/motif/NgCommon.h                       |    2 +-
 .../library/motif/NgImage.c                        |    2 +-
 .../library/motif/NgImage.h                        |    2 +-
 .../library/motif/NgImageData.c                    |    2 +-
 .../library/motif/NgImageData.h                    |    2 +-
 .../library/motif/NgWinBMPFileFormat.c             |    2 +-
 .../library/motif/NgWinBMPFileFormat.h             |    2 +-
 .../library/motif/build.sh                         |    2 +-
 .../library/motif/eclipseMotif.c                   |    2 +-
 .../library/motif/eclipseMotifInit.c               |    8 +-
 .../library/motif/make_hpux_PA_RISC.mak            |    2 +-
 .../library/motif/make_hpux_ia64_32.mak            |    2 +-
 .../library/motif/make_linux.mak                   |    2 +-
 .../library/motif/make_solaris.mak                 |    2 +-
 .../library/photon/build.sh                        |    2 +-
 .../library/photon/eclipsePhoton.c                 |    2 +-
 .../library/photon/make_qnx.mak                    |    2 +-
 .../library/win32/build.bat                        |    2 +-
 .../library/win32/build.sh                         |    2 +-
 .../library/win32/eclipse.rc                       |    2 +-
 .../library/win32/eclipseWin.c                     |    2 +-
 .../library/win32/eclipseWinCommon.c               |    2 +-
 .../library/win32/make_mingw.mak                   |    2 +-
 .../library/wpf/build.bat                          |    2 +-
 .../library/wpf/eclipse.rc                         |    2 +-
 .../library/wpf/eclipseWpf.cpp                     |    2 +-
 .../library/wpf/eclipseWpfCommon.cpp               |    2 +-
 .../library/wpf/make_wpf.mak                       |    2 +-
 .../org.eclipse.equinox.executable/license.html    |  107 -
 .../target.build.properties                        |    2 +
 .../target.build.xml                               |   21 +-
 .../org.eclipse.equinox.incubator.feature/.project |   11 +
 .../build.properties                               |   20 +
 .../eclipse_update_120.jpg                         |  Bin 21695 -> 21695 bytes
 .../feature.properties                             |   23 +
 .../feature.xml                                    |   77 +
 .../build.properties                               |    2 +-
 .../feature.xml                                    |    8 +-
 .../sourceTemplateFeature/build.properties         |   14 +
 .../sourceTemplateFeature}/eclipse_update_120.jpg  |  Bin 21695 -> 21695 bytes
 .../sourceTemplateFeature/feature.properties       |   38 +
 .../build.properties                               |   10 +
 .../feature.xml                                    |    6 +-
 .../sourceTemplateFeature/build.properties         |   15 +
 .../sourceTemplateFeature}/eclipse_update_120.jpg  |  Bin 21695 -> 21695 bytes
 .../sourceTemplateFeature/feature.properties       |   38 +
 .../build.properties                               |    2 +-
 .../feature.xml                                    |    8 +-
 .../sourceTemplateFeature/build.properties         |   14 +
 .../sourceTemplateFeature}/eclipse_update_120.jpg  |  Bin 21695 -> 21695 bytes
 .../sourceTemplateFeature/feature.properties       |   38 +
 .../org.eclipse.equinox.p2.core.feature/.project   |   17 +
 .../build.properties                               |   15 +
 .../eclipse_update_120.jpg                         |  Bin 21695 -> 21695 bytes
 .../feature.properties                             |   35 +
 .../feature.xml                                    |  286 +
 .../org.eclipse.equinox.p2.core.feature/pom.xml    |   14 +
 .../sourceTemplateFeature/build.properties         |   13 +
 .../sourceTemplateFeature/feature.properties       |   38 +
 .../build.properties                               |    4 +-
 .../epl-v10.html                                   |  328 -
 .../feature.properties                             |  137 +-
 .../feature.xml                                    |    6 +-
 .../license.html                                   |  107 -
 .../pom.xml                                        |   14 +
 .../sourceTemplateFeature/build.properties         |    2 +-
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  109 +-
 .../sourceTemplateFeature/license.html             |   79 -
 .../org.eclipse.equinox.p2.extras.feature/.project |   17 +
 .../build.properties                               |   15 +
 .../eclipse_update_120.jpg                         |  Bin 21695 -> 21695 bytes
 .../feature.properties                             |   35 +
 .../feature.xml                                    |   75 +
 .../org.eclipse.equinox.p2.extras.feature/pom.xml  |   14 +
 .../sourceTemplateFeature/build.properties         |   12 +
 .../sourceTemplateFeature/feature.properties       |   38 +
 .../org.eclipse.equinox.p2.rcp.feature/.project    |   17 +
 .../build.properties                               |   15 +
 .../eclipse_update_120.jpg                         |  Bin 21695 -> 21695 bytes
 .../feature.properties                             |   35 +
 .../org.eclipse.equinox.p2.rcp.feature/feature.xml |   62 +
 .../sourceTemplateFeature/build.properties         |   12 +
 .../sourceTemplateFeature/feature.properties       |   38 +
 .../org.eclipse.equinox.p2.sdk/build.properties    |    7 +-
 .../org.eclipse.equinox.p2.sdk/epl-v10.html        |  328 -
 .../org.eclipse.equinox.p2.sdk/feature.properties  |  137 +-
 .../org.eclipse.equinox.p2.sdk/feature.xml         |   57 +-
 .../org.eclipse.equinox.p2.sdk/license.html        |  113 -
 .../features/org.eclipse.equinox.p2.sdk/pom.xml    |   14 +
 .../build.properties                               |    7 +-
 .../org.eclipse.equinox.p2.user.ui/epl-v10.html    |  328 -
 .../feature.properties                             |  149 +-
 .../org.eclipse.equinox.p2.user.ui/feature.xml     |  317 +-
 .../org.eclipse.equinox.p2.user.ui/license.html    |  113 -
 .../sourceTemplateFeature/build.properties         |   10 +-
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  136 +-
 .../sourceTemplateFeature/license.html             |  113 -
 .../org.eclipse.equinox.sdk/build.properties       |    4 +-
 .../features/org.eclipse.equinox.sdk/epl-v10.html  |  328 -
 .../org.eclipse.equinox.sdk/feature.properties     |  138 +-
 .../features/org.eclipse.equinox.sdk/feature.xml   |   29 +-
 .../features/org.eclipse.equinox.sdk/license.html  |  107 -
 .../build.properties                               |   13 +-
 .../feature.properties                             |  135 +-
 .../org.eclipse.equinox.server.core/feature.xml    |    8 +-
 .../org.eclipse.equinox.server.core/license.html   |  107 -
 .../build.properties                               |   13 +-
 .../feature.properties                             |  135 +-
 .../org.eclipse.equinox.server.jetty/feature.xml   |    7 +-
 .../org.eclipse.equinox.server.jetty/license.html  |  107 -
 .../org.eclipse.equinox.server.p2/build.properties |   22 +-
 .../feature.properties                             |  135 +-
 .../org.eclipse.equinox.server.p2/feature.xml      |   13 +-
 .../org.eclipse.equinox.server.p2/license.html     |  107 -
 .../build.properties                               |   11 +-
 .../feature.properties                             |  135 +-
 .../feature.xml                                    |    6 +-
 .../license.html                                   |  107 -
 .../build.properties                               |   13 +-
 .../feature.properties                             |  135 +-
 .../org.eclipse.equinox.server.simple/feature.xml  |    8 +-
 .../org.eclipse.equinox.server.simple/license.html |  107 -
 .../build.properties                               |    4 +-
 .../epl-v10.html                                   |  328 -
 .../feature.properties                             |  135 +-
 .../org.eclipse.equinox.serverside.sdk/feature.xml |    8 +-
 .../license.html                                   |  107 -
 .../.project                                       |   17 +
 .../build.properties                               |   14 +
 .../feature.properties                             |   33 +
 .../feature.xml                                    |   30 +
 .../product/EclipseRTOSGiStarterKit.product        |  174 +
 .../product/p2.inf                                 |   17 +
 .../rt.icns                                        |  Bin 0 -> 118560 bytes
 .../rt.ico                                         |  Bin 0 -> 22486 bytes
 .../build.properties                               |   14 +-
 .../org.eclipse.equinox.weaving.sdk/epl-v10.html   |  328 -
 .../feature.properties                             |  133 +-
 .../org.eclipse.equinox.weaving.sdk/feature.xml    |    8 +-
 .../org.eclipse.equinox.weaving.sdk/license.html   |  107 -
 eclipse/features/org.eclipse.help/build.properties |    2 -
 .../features/org.eclipse.help/feature.properties   |  136 +-
 eclipse/features/org.eclipse.help/feature.xml      |   26 +-
 eclipse/features/org.eclipse.help/license.html     |  107 -
 .../sourceTemplateFeature/build.properties         |   17 -
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  138 +-
 .../sourceTemplateFeature/license.html             |  107 -
 eclipse/features/org.eclipse.jdt/build.properties  |    6 +-
 eclipse/features/org.eclipse.jdt/epl-v10.html      |  328 -
 .../features/org.eclipse.jdt/feature.properties    |  142 +-
 eclipse/features/org.eclipse.jdt/feature.xml       |   10 +-
 eclipse/features/org.eclipse.jdt/license.html      |  107 -
 .../features/org.eclipse.jdt/rootfiles/notice.html |  161 +-
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  140 +-
 .../sourceTemplateFeature/license.html             |  107 -
 .../sourceTemplatePlugin/about.properties          |    4 +-
 eclipse/features/org.eclipse.license/.project      |   11 +
 .../features/org.eclipse.license/build.properties  |   11 +
 eclipse/features/org.eclipse.license/epl-v10.html  |  261 +
 .../org.eclipse.license/feature.properties         |  159 +
 eclipse/features/org.eclipse.license/feature.xml   |   19 +
 eclipse/features/org.eclipse.license/license.html  |  108 +
 .../build.properties                               |    4 +-
 .../feature.properties                             |  131 -
 .../feature.xml                                    |    6 +-
 .../license.html                                   |  107 -
 .../org.eclipse.pde.api.tools.ee.fragments/p2.inf  |  189 +-
 .../org.eclipse.pde.build.product.feature/.project |   17 +
 .../build.properties                               |    2 +
 .../feature.properties                             |   33 +
 .../feature.xml                                    |   28 +
 .../product/p2.inf                                 |   17 +
 .../product/pdebuild.product                       |   34 +
 .../org.eclipse.pde.junit.runtime.addon/.project   |   17 +
 .../build.properties                               |    2 +
 .../feature.properties                             |   31 +
 .../feature.xml                                    |   30 +
 .../org.eclipse.pde.junit.runtime.addon/pom.xml    |   29 +
 .../.project                                       |   17 +
 .../build.properties                               |    2 +
 .../feature.properties                             |   31 +
 .../feature.xml                                    |   38 +
 .../pom.xml                                        |   29 +
 eclipse/features/org.eclipse.pde/build.properties  |    2 +-
 eclipse/features/org.eclipse.pde/epl-v10.html      |  328 -
 .../features/org.eclipse.pde/feature.properties    |  136 +-
 eclipse/features/org.eclipse.pde/feature.xml       |    6 +-
 eclipse/features/org.eclipse.pde/license.html      |  107 -
 .../sourceTemplateFeature/build.properties         |   16 -
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  140 +-
 .../sourceTemplateFeature/license.html             |  107 -
 .../{linux.gtk.ppc => linux.gtk.ppc64}/about.html  |    0
 .../about_files/IJG_README                         |    0
 .../about_files/about_cairo.html                   |    0
 .../about_files/lgpl-v21.txt                       |    0
 .../about_files/mpl-v11.txt                        |    0
 .../about_files/pixman-licenses.txt                |    0
 .../about_files/linux.motif.x86/about.html         |  265 -
 .../about_files/about_open_motif.html              |   38 -
 .../linux.motif.x86/about_files/mlpl-v10.html      |  401 --
 .../features/org.eclipse.platform/build.properties |   13 +-
 eclipse/features/org.eclipse.platform/epl-v10.html |  328 -
 .../org.eclipse.platform/feature.properties        |  146 +-
 eclipse/features/org.eclipse.platform/feature.xml  |   54 +-
 eclipse/features/org.eclipse.platform/license.html |  107 -
 .../org.eclipse.platform/rootfiles/.eclipseproduct |    2 +-
 .../org.eclipse.platform/rootfiles/notice.html     |  161 +-
 .../rootfiles/readme/readme_eclipse.html           | 2630 +-------
 .../sourceTemplateFeature/build.properties         |   26 +-
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  141 +-
 .../sourceTemplateFeature/license.html             |  107 -
 .../sourceTemplatePlugin/about.properties          |    4 +-
 eclipse/features/org.eclipse.rcp/build.properties  |    2 +-
 eclipse/features/org.eclipse.rcp/epl-v10.html      |  328 -
 .../features/org.eclipse.rcp/feature.properties    |  133 +-
 eclipse/features/org.eclipse.rcp/feature.xml       |  200 +-
 eclipse/features/org.eclipse.rcp/license.html      |  107 -
 .../sourceTemplateFeature/build.properties         |    5 +-
 .../sourceTemplateFeature/epl-v10.html             |  328 -
 .../sourceTemplateFeature/feature.properties       |  138 +-
 .../sourceTemplateFeature/license.html             |  107 -
 .../sourceTemplateFragment/about.html              |   33 -
 .../sourceTemplatePlugin/about.properties          |    4 +-
 .../org.eclipse.releng.tools/feature.properties    |  138 +-
 .../features/org.eclipse.releng.tools/feature.xml  |   16 +-
 eclipse/features/org.eclipse.sdk/build.properties  |   16 +-
 eclipse/features/org.eclipse.sdk/epl-v10.html      |  328 -
 .../features/org.eclipse.sdk/feature.properties    |  139 +-
 eclipse/features/org.eclipse.sdk/feature.xml       |   20 +-
 eclipse/features/org.eclipse.sdk/license.html      |  107 -
 eclipse/label.properties                           |    6 +-
 eclipse/maps/org.eclipse.releng/maps/ant.map       |   14 +-
 eclipse/maps/org.eclipse.releng/maps/compare.map   |   12 +-
 eclipse/maps/org.eclipse.releng/maps/core-hpux.map |    2 +-
 .../maps/org.eclipse.releng/maps/core-macosx.map   |    2 +-
 .../org.eclipse.releng/maps/core-variables.map     |    2 +-
 eclipse/maps/org.eclipse.releng/maps/core.map      |  189 +-
 eclipse/maps/org.eclipse.releng/maps/doc.map       |   10 +-
 .../org.eclipse.releng/maps/equinox-incubator.map  |   20 +-
 eclipse/maps/org.eclipse.releng/maps/feature.map   |   48 +-
 eclipse/maps/org.eclipse.releng/maps/jdtapt.map    |   14 +-
 eclipse/maps/org.eclipse.releng/maps/jdtcore.map   |   16 +-
 eclipse/maps/org.eclipse.releng/maps/jdtdebug.map  |   24 +-
 eclipse/maps/org.eclipse.releng/maps/jdtui.map     |   30 +-
 eclipse/maps/org.eclipse.releng/maps/orbit.map     |  114 +-
 eclipse/maps/org.eclipse.releng/maps/p2.map        |  134 +-
 eclipse/maps/org.eclipse.releng/maps/pde.map       |   52 +-
 eclipse/maps/org.eclipse.releng/maps/rcp.map       |    4 +-
 eclipse/maps/org.eclipse.releng/maps/releng.map    |   20 +-
 eclipse/maps/org.eclipse.releng/maps/swt.map       |   60 +-
 eclipse/maps/org.eclipse.releng/maps/team.map      |   38 +-
 .../maps/org.eclipse.releng/maps/testframework.map |    8 +-
 eclipse/maps/org.eclipse.releng/maps/text.map      |   24 +-
 eclipse/maps/org.eclipse.releng/maps/ui.map        |   60 +-
 eclipse/maps/org.eclipse.releng/maps/update.map    |    4 +-
 .../maps/org.eclipse.releng/maps/userassist.map    |   26 +-
 eclipse/pluginVersions.properties                  |  538 +-
 .../META-INF/ECLIPSEF.RSA                          |  Bin 5639 -> 0 bytes
 .../META-INF/ECLIPSEF.SF                           |  179 -
 .../META-INF/MANIFEST.MF                           |  234 -
 .../org.apache.ant_1.7.1.v20100518-1145/about.html |   62 -
 .../about_files/LICENSE.dom.html                   |   82 -
 .../about_files/LICENSE.sax.txt                    |   20 -
 .../about_files/NOTICE                             |   26 -
 .../org.apache.ant_1.7.1.v20100518-1145/bin/ant    |  326 -
 .../bin/ant.bat                                    |  226 -
 .../bin/ant.cmd                                    |   93 -
 .../org.apache.ant_1.7.1.v20100518-1145/bin/antRun |   24 -
 .../bin/antRun.bat                                 |   50 -
 .../bin/antRun.pl                                  |   66 -
 .../bin/antenv.cmd                                 |   98 -
 .../bin/complete-ant-cmd.pl                        |  114 -
 .../bin/envset.cmd                                 |  131 -
 .../bin/lcp.bat                                    |   31 -
 .../bin/runant.pl                                  |  153 -
 .../bin/runant.py                                  |  102 -
 .../bin/runrc.cmd                                  |   60 -
 .../etc/changelog.xsl                              |  148 -
 .../etc/checkstyle/checkstyle-frames.xsl           |  299 -
 .../etc/checkstyle/checkstyle-text.xsl             |   34 -
 .../etc/checkstyle/checkstyle-xdoc.xsl             |  130 -
 .../etc/coverage-frames.xsl                        |  489 --
 .../etc/jdepend-frames.xsl                         |  487 --
 .../etc/jdepend.xsl                                |  276 -
 .../etc/junit-frames-xalan1.xsl                    |  719 --
 .../etc/junit-frames.xsl                           |  877 ---
 .../etc/junit-noframes.xsl                         |  467 --
 .../etc/log.xsl                                    |  203 -
 .../etc/maudit-frames.xsl                          |  503 --
 .../etc/mmetrics-frames.xsl                        | 1026 ---
 .../etc/tagdiff.xsl                                |  179 -
 .../plugin.properties                              |   12 -
 .../META-INF/ECLIPSEF.RSA                          |  Bin 0 -> 5638 bytes
 .../META-INF/ECLIPSEF.SF                           |  143 +
 .../META-INF/MANIFEST.MF                           |  196 +
 .../META-INF/eclipse.inf                           |    0
 .../OSGI-INF/l10n/bundle.properties                |   12 +
 .../org.apache.ant_1.8.2.v20110505-1300/about.html |   74 +
 .../about_files/ASL-LICENSE-2.0.txt}               |    0
 .../about_files/DOM-LICENSE.html                   |  111 +
 .../about_files/LICENSE                            |  272 +
 .../about_files/NOTICE                             |    6 +
 .../about_files/SAX-LICENSE.html                   |   81 +
 .../etc/changelog.xsl                              |  148 +
 .../etc/checkstyle/checkstyle-frames.xsl           |  299 +
 .../etc/checkstyle/checkstyle-text.xsl             |   34 +
 .../etc/checkstyle/checkstyle-xdoc.xsl             |  130 +
 .../etc/coverage-frames.xsl                        |  489 ++
 .../etc/jdepend-frames.xsl                         |  487 ++
 .../etc/jdepend.xsl                                |  276 +
 .../etc/junit-frames-xalan1.xsl                    |  733 ++
 .../etc/junit-frames.xsl                           |  902 +++
 .../etc/junit-noframes.xsl                         |  478 ++
 .../etc/log.xsl                                    |  203 +
 .../etc/maudit-frames.xsl                          |  503 ++
 .../etc/mmetrics-frames.xsl                        | 1026 +++
 .../etc/tagdiff.xsl                                |  179 +
 .../plugin.properties                              |   12 +
 eclipse/plugins/org.apache.lucene/.classpath       |    7 +
 .../.gitignore => org.apache.lucene/.cvsignore}    |    0
 eclipse/plugins/org.apache.lucene/.project         |   28 +
 .../org.apache.lucene/.settings/CVS/Entries        |    3 +
 .../org.apache.lucene/.settings/CVS/Repository     |    1 +
 .../plugins/org.apache.lucene/.settings/CVS/Root   |    1 +
 .../plugins/org.apache.lucene/.settings/CVS/Tag    |    1 +
 .../.settings/org.eclipse.core.resources.prefs     |    3 +
 .../.settings/org.eclipse.pde.core.prefs           |    4 +
 .../.settings/org.eclipse.pde.prefs                |   25 +
 eclipse/plugins/org.apache.lucene/CVS/Entries      |   12 +
 eclipse/plugins/org.apache.lucene/CVS/Repository   |    1 +
 eclipse/plugins/org.apache.lucene/CVS/Root         |    1 +
 eclipse/plugins/org.apache.lucene/CVS/Tag          |    1 +
 .../plugins/org.apache.lucene/META-INF/CVS/Entries |    1 +
 .../org.apache.lucene/META-INF/CVS/Repository      |    1 +
 .../plugins/org.apache.lucene/META-INF/CVS/Root    |    1 +
 eclipse/plugins/org.apache.lucene/META-INF/CVS/Tag |    1 +
 .../plugins/org.apache.lucene/META-INF/MANIFEST.MF |   31 +
 eclipse/plugins/org.apache.lucene/about.html       |   48 +
 .../org.apache.lucene/about_files/CHANGES.txt      | 3858 ++++++++++
 .../org.apache.lucene/about_files/CVS/Entries      |    4 +
 .../org.apache.lucene/about_files/CVS/Repository   |    1 +
 .../plugins/org.apache.lucene/about_files/CVS/Root |    1 +
 .../plugins/org.apache.lucene/about_files/CVS/Tag  |    1 +
 .../org.apache.lucene/about_files/LICENSE.txt      |  240 +
 .../org.apache.lucene/about_files/NOTICE.txt       |   30 +
 .../org.apache.lucene/about_files/README.txt       |   46 +
 eclipse/plugins/org.apache.lucene/build.properties |   15 +
 .../plugins/org.apache.lucene/plugin.properties    |   12 +
 .../plugins/org.apache.lucene/readme-bundles.txt   |   42 +
 .../org.apache.lucene/source-bundle/CVS/Entries    |    7 +
 .../org.apache.lucene/source-bundle/CVS/Repository |    1 +
 .../org.apache.lucene/source-bundle/CVS/Root       |    1 +
 .../org.apache.lucene/source-bundle/CVS/Tag        |    1 +
 .../source-bundle/META-INF/CVS/Entries             |    1 +
 .../source-bundle/META-INF/CVS/Repository          |    1 +
 .../source-bundle/META-INF/CVS/Root                |    1 +
 .../source-bundle/META-INF/CVS/Tag                 |    1 +
 .../source-bundle/META-INF/MANIFEST.MF             |    9 +
 .../org.apache.lucene/source-bundle/about.html     |   48 +
 .../source-bundle/about_files/CHANGES.txt          | 2803 ++++++++
 .../source-bundle/about_files/CVS/Entries          |    4 +
 .../source-bundle/about_files/CVS/Repository       |    1 +
 .../source-bundle/about_files/CVS/Root             |    1 +
 .../source-bundle/about_files/CVS/Tag              |    1 +
 .../source-bundle/about_files/LICENSE.txt          |  240 +
 .../source-bundle/about_files/NOTICE.txt           |   11 +
 .../source-bundle/about_files/README.txt           |   46 +
 .../source-bundle/build.properties                 |   14 +
 .../source-bundle/plugin.properties                |   12 +
 .../.settings/org.eclipse.jdt.core.prefs           |   40 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.ant.core/META-INF/MANIFEST.MF      |    2 +-
 .../buildfiles/buildExtraJAR.xml                   |    5 +-
 .../buildnotes_platform-ant.html                   |   20 -
 .../r2_0_buildnotes_platform-ant.html              |  552 --
 .../r2_1_buildnotes_platform-ant.html              |  706 --
 .../r3_0_buildnotes_platform-ant.html              |  956 ---
 .../r3_1_buildnotes_platform-ant.html              |  825 ---
 .../r3_2_buildnotes_platform-ant.html              |  186 -
 .../r3_3_buildnotes_platform-ant.html              |  104 -
 .../r3_4_buildnotes_platform-ant.html              |   70 -
 .../r3_5_buildnotes_platform-ant.html              |   95 -
 .../org.eclipse.ant.core/schema/antTasks.exsd      |   14 +-
 .../org/eclipse/ant/core/AntCorePreferences.java   |  103 +-
 .../src/org/eclipse/ant/core/AntRunner.java        |    4 +-
 .../ant/core/IAntPropertyValueProvider.java        |    2 +-
 .../src/org/eclipse/ant/core/ProjectInfo.java      |    8 +-
 .../src/org/eclipse/ant/core/TargetInfo.java       |    6 +-
 .../ant/internal/core/AntClasspathEntry.java       |    6 +-
 .../org/eclipse/ant/internal/core/AntCoreUtil.java |    8 +-
 .../org/eclipse/ant/internal/core/AntObject.java   |    4 +-
 .../ant/internal/core/IAntCoreConstants.java       |   83 +-
 .../internal/core/contentDescriber/AntHandler.java |    8 +-
 .../ant/internal/core/ant/InternalAntRunner.java   |   11 +-
 .../internal/core/ant/ProgressBuildListener.java   |   18 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   65 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.ant.launching/META-INF/MANIFEST.MF |    2 +-
 .../internal/launching/debug/AntDebugState.java    |   92 +-
 .../runtime/logger/AntProcessBuildLogger.java      |    5 +-
 .../runtime/logger/AntProcessDebugBuildLogger.java |   45 +-
 .../launching/remote/InternalAntRunner.java        |   21 +-
 .../remote/logger/RemoteAntBuildLogger.java        |    7 +-
 .../remote/logger/RemoteAntDebugBuildLogger.java   |   24 +-
 .../ant/internal/launching/AntLaunchingUtil.java   |    5 +-
 .../launching/debug/IAntDebugController.java       |  138 +-
 .../launching/debug/model/AntDebugTarget.java      |   95 +-
 .../internal/launching/debug/model/AntThread.java  |   14 +-
 .../debug/model/RemoteAntDebugBuildListener.java   |   31 +-
 .../launchConfigurations/AntLaunchDelegate.java    |    9 +-
 .../ContributedClasspathEntriesEntry.java          |    5 +-
 .../RemoteAntBuildListener.java                    |  143 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   31 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../TaskXMLFileMerger.java                         |    2 +-
 .../eclipse/ant/internal/ui/dtd/schema/Atom.java   |    4 +-
 .../eclipse/ant/internal/ui/dtd/schema/Model.java  |    6 +-
 .../ant/internal/ui/dtd/schema/NfmParser.java      |    2 +-
 .../ant/internal/ui/dtd/schema/SchemaFactory.java  |    2 +-
 .../ant/internal/ui/dtd/util/SortedMap.java        |    2 +-
 .../internal/ui/editor/AntCompletionProposal.java  |    5 +-
 .../eclipse/ant/internal/ui/editor/AntEditor.java  |   69 +-
 .../ui/editor/AntEditorCompletionProcessor.java    |  114 +-
 .../editor/AntEditorSourceViewerConfiguration.java |    5 +-
 .../ui/editor/TaskDescriptionProvider.java         |  380 +-
 .../editor/actions/ToggleLineBreakpointAction.java |   28 +-
 .../ant/internal/ui/editor/anttasks_1.6.0.xml      |    5 +-
 .../ui/editor/formatter/FormattingPreferences.java |    5 +-
 .../ui/editor/formatter/XmlDocumentFormatter.java  |    5 +-
 .../internal/ui/editor/formatter/XmlFormatter.java |    8 +-
 .../outline/AntEditorContentOutlinePage.java       |    2 +-
 .../ui/editor/outline/AntEditorMarkerUpdater.java  |    5 +-
 .../internal/ui/editor/templates/AntContext.java   |   61 +-
 .../templates/AntTemplatePreferencePage.java       |    5 +-
 .../ui/editor/text/AntEditorDocumentProvider.java  |    2 +-
 .../editor/text/AntFoldingStructureProvider.java   |   21 +-
 .../ant/internal/ui/editor/text/XMLTextHover.java  |   18 +-
 .../internal/ui/editor/utils/ProjectHelper.java    |   41 +-
 .../antsupport/inputhandler/AntInputHandler.java   |    5 +-
 .../org/eclipse/ant/internal/ui/AntUIPlugin.java   |    7 +-
 .../internal/ui/AntUIPreferenceInitializer.java    |    3 +-
 .../org/eclipse/ant/internal/ui/AntUtil.java       |    7 +-
 .../org/eclipse/ant/internal/ui/ColumnSorter.java  |    7 +-
 .../ant/internal/ui/IAntUIPreferenceConstants.java |    9 +-
 .../ui/datatransfer/AntNewJavaProjectPage.java     |   11 +-
 .../ant/internal/ui/datatransfer/AppletUtil.java   |    5 +-
 .../internal/ui/datatransfer/BuildFileCreator.java | 2662 ++++----
 .../internal/ui/datatransfer/EclipseClasspath.java |    9 +-
 .../ant/internal/ui/datatransfer/ExportUtil.java   |    8 +-
 .../ui/datatransfer/JavacTableLabelProvider.java   |    5 +-
 .../ui/debug/model/AntDebugModelPresentation.java  |    5 +-
 .../launchConfigurations/AntBuilderTargetsTab.java |    5 +-
 .../ui/launchConfigurations/AntJRETab.java         |   28 +-
 .../AntJavaLaunchDelegate.java                     |    5 +-
 .../ui/launchConfigurations/AntLaunchShortcut.java |    5 +-
 .../ui/launchConfigurations/AntMainTab.java        |   13 +-
 .../ui/launchConfigurations/SetTargetsDialog.java  |    5 +-
 .../TargetTableLabelProvider.java                  |    5 +-
 .../ui/launchConfigurations/TaskLinkManager.java   |    5 +-
 .../eclipse/ant/internal/ui/model/AntAntNode.java  |    5 +-
 .../ant/internal/ui/model/AntDefiningTaskNode.java |    7 +-
 .../ant/internal/ui/model/AntElementNode.java      |   31 +-
 .../ant/internal/ui/model/AntImportNode.java       |    7 +-
 .../eclipse/ant/internal/ui/model/AntModel.java    |  122 +-
 .../ant/internal/ui/model/AntModelProject.java     |  170 +-
 .../ant/internal/ui/model/AntProjectNode.java      |    9 +-
 .../ant/internal/ui/model/AntPropertyNode.java     |   17 +-
 .../eclipse/ant/internal/ui/model/AntRefTable.java |   63 +
 .../ant/internal/ui/model/AntTargetNode.java       |    9 +-
 .../eclipse/ant/internal/ui/model/IAntModel.java   |   12 +-
 .../ant/internal/ui/model/IAntModelConstants.java  |   13 +-
 .../AbstractAntEditorPreferencePage.java           |   29 +-
 .../internal/ui/preferences/AddCustomDialog.java   |    9 +-
 .../internal/ui/preferences/AntClasspathBlock.java |    9 +-
 .../preferences/AntCodeAssistPreferencePage.java   |    8 +-
 .../ui/preferences/AntEditorPreferencePage.java    |   49 +-
 .../ui/preferences/AntObjectLabelProvider.java     |    5 +-
 .../internal/ui/preferences/AntPreferencePage.java |   48 +-
 .../ui/preferences/AntPreferencesMessages.java     |    4 +-
 .../preferences/AntPreferencesMessages.properties  |    7 +-
 .../ui/preferences/AntPropertiesBlock.java         |    7 +-
 .../internal/ui/preferences/ClasspathEntry.java    |    5 +-
 .../ui/preferences/FileSelectionDialog.java        |    9 +-
 .../ant/internal/ui/preferences/MessageLine.java   |    5 +-
 .../LaunchConfigurationBuildfileChange.java        |    7 +-
 .../org/eclipse/ant/internal/ui/views/AntView.java |    5 +-
 .../ant/internal/ui/views/AntViewDropAdapter.java  |   18 +-
 .../views/actions/SearchForBuildFilesDialog.java   |    8 +-
 .../org.eclipse.ant.ui/META-INF/MANIFEST.MF        |    6 +-
 .../buildfiles/buildExtraJAR.xml                   |    5 +-
 .../buildfiles/buildRemoteExtraJAR.xml             |    5 +-
 .../plugins/org.eclipse.ant.ui/plugin.properties   |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.compare.core/META-INF/MANIFEST.MF  |    2 +-
 .../src/org/eclipse/compare/internal/core/LCS.java |    7 +-
 .../eclipse/compare/internal/core/patch/Hunk.java  |    8 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.compare.win32/META-INF/MANIFEST.MF |    2 +-
 .../plugins/org.eclipse.compare.win32/plugin.xml   |   14 +-
 .../compare/internal/win32/WordComparison.java     |   82 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    3 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.compare/META-INF/MANIFEST.MF       |    2 +-
 .../org/eclipse/compare/CompareEditorInput.java    |  240 +-
 .../compare/CompareViewerSwitchingPane.java        |    9 +
 .../eclipse/compare/EditionSelectionDialog.java    |   47 +-
 .../contentmergeviewer/ContentMergeViewer.java     |  173 +-
 .../contentmergeviewer/TextMergeViewer.java        |   33 +-
 .../internal/AddFromHistoryAction.properties       |    4 +-
 .../eclipse/compare/internal/CompareEditor.java    |   12 +-
 .../compare/internal/CompareMessages.properties    |    2 +-
 .../compare/internal/ComparePreferencePage.java    |   31 +-
 .../eclipse/compare/internal/CompareUIPlugin.java  |    2 +-
 .../org/eclipse/compare/internal/IFlushable2.java  |   28 +
 .../eclipse/compare/internal/ISavingSaveable.java  |   23 +
 .../compare/internal/ResourceCompareInput.java     |    4 +-
 .../compare/internal/ShowWhitespaceAction.java     |   96 +-
 .../org/eclipse/compare/internal/Utilities.java    |   79 +-
 .../compare/internal/merge/DocumentMerger.java     |   43 +-
 .../compare/internal/patch/InputPatchPage.java     |   56 +-
 .../compare/internal/patch/PatchTargetPage.java    |   35 +-
 eclipse/plugins/org.eclipse.compare/component.xml  |   11 +
 .../plugins/org.eclipse.compare/plugin.properties  |    2 +-
 eclipse/plugins/org.eclipse.compare/plugin.xml     |   11 +
 .../schema/structureMergeViewers.exsd              |    4 +-
 .../org.eclipse.compare/scripts/exportplugin.xml   |   10 +
 .../core/commands/ParameterizedCommand.java        |   46 +-
 .../operations/DefaultOperationHistory.java        |    6 +-
 .../org.eclipse.core.contenttype/.classpath        |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   20 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../core/runtime/content/XMLContentDescriber.java  |   10 +-
 .../beans/BeanListPropertyDecorator.java           |   13 +-
 .../beans/BeanMapPropertyDecorator.java            |   13 +-
 .../databinding/beans/BeanPropertyHelper.java      |    5 +
 .../beans/BeanSetPropertyDecorator.java            |   13 +-
 .../beans/BeanValuePropertyDecorator.java          |   25 +-
 .../beans/PojoListPropertyDecorator.java           |   13 +-
 .../beans/PojoMapPropertyDecorator.java            |   13 +-
 .../beans/PojoSetPropertyDecorator.java            |   13 +-
 .../beans/PojoValuePropertyDecorator.java          |   25 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../observable/DecoratingObservableCollection.java |    7 +-
 .../databinding/observable/list/WritableList.java  |   34 +-
 .../observable/map/DecoratingObservableMap.java    |    7 +-
 .../masterdetail/MasterDetailObservables.java      |  121 +-
 .../ListDetailValueObservableList.java             |  351 +
 .../masterdetail/MapDetailValueObservableMap.java  |  405 ++
 .../masterdetail/SetDetailValueObservableMap.java  |  178 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../databinding/property/list/ListProperty.java    |   19 +-
 .../core/databinding/property/map/MapProperty.java |   19 +-
 .../core/databinding/property/set/SetProperty.java |   19 +-
 .../databinding/property/value/ValueProperty.java  |   46 +-
 .../property/map/SimplePropertyObservableMap.java  |   16 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../core/databinding/BindingProperties.java        |   23 +
 .../databinding/ConverterValueProperty.java        |   68 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../schema/expressionLanguage.exsd                 |   36 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   67 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../externaltools/internal/ExternalToolsCore.java  |    6 +-
 .../internal/IExternalToolConstants.java           |   10 +-
 .../ExternalToolsCoreUtil.java                     |    4 +-
 .../ProgramLaunchDelegate.java                     |    4 +-
 .../internal/model/BuilderCoreUtils.java           |   65 +-
 .../internal/model/ExternalToolBuilder.java        |   29 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../org/eclipse/core/filebuffers/FileBuffers.java  |   18 +-
 .../org/eclipse/core/filebuffers/IFileBuffer.java  |   16 +-
 .../core/filebuffers/IFileBufferListener.java      |   18 +-
 .../core/filebuffers/IFileBufferManager.java       |   19 +-
 .../filebuffers/FileStoreTextFileBuffer.java       |   20 +-
 .../internal/filebuffers/ResourceFileBuffer.java   |   18 +-
 .../filebuffers/ResourceTextFileBufferManager.java |    4 +-
 .../filebuffers/SynchronizableDocument.java        |    7 +-
 .../org.eclipse.core.filesystem.linux.ppc/.project |   22 -
 .../META-INF/MANIFEST.MF                           |    9 -
 .../build.properties                               |   16 -
 .../fragment.properties                            |   12 -
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../plugins/org.eclipse.core.filesystem/.classpath |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   12 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../natives/win32/localfile.c                      |  131 +-
 .../core/filesystem/provider/FileStore.java        |    9 +-
 .../core/internal/filesystem/FileCache.java        |   45 +-
 .../filesystem/local/unix/UnixFileNatives.java     |    6 +-
 .../org.eclipse.core.jobs/META-INF/MANIFEST.MF     |    6 +-
 .../core/internal/jobs/DeadlockDetector.java       |   16 +-
 .../org/eclipse/core/internal/jobs/JobManager.java |   27 +-
 .../eclipse/core/internal/jobs/LockManager.java    |    2 +
 .../org/eclipse/core/internal/jobs/ThreadJob.java  |   23 +-
 .../org/eclipse/core/internal/jobs/WorkerPool.java |   23 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 eclipse/plugins/org.eclipse.core.net/plugin.xml    |   11 +
 .../core/internal/net/AbstractProxyProvider.java   |   27 +-
 .../org/eclipse/core/internal/net/Activator.java   |   10 +-
 .../core/internal/net/PreferenceInitializer.java   |   36 +-
 .../core/internal/net/PreferenceManager.java       |  379 +
 .../internal/net/PreferenceModifyListener.java     |    7 +-
 .../eclipse/core/internal/net/ProxyManager.java    |  176 +-
 .../org/eclipse/core/internal/net/ProxyType.java   |   98 +-
 .../core/internal/net/WindowsProxyProvider.java    |   16 +-
 .../internal/net/proxy/unix/UnixProxyProvider.java |   88 +-
 .../net/proxy/win32/winhttp/ProxyBypass.java       |   11 +-
 .../org.eclipse.core.resources.jmx/.classpath      |    7 -
 .../org.eclipse.core.resources.jmx/.project        |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  309 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../META-INF/MANIFEST.MF                           |   23 -
 .../org.eclipse.core.resources.jmx/about.html      |   28 -
 .../build.properties                               |   20 -
 .../org.eclipse.core.resources.jmx/icons/file.gif  |  Bin 354 -> 0 bytes
 .../icons/folder.gif                               |  Bin 216 -> 0 bytes
 .../icons/project.gif                              |  Bin 351 -> 0 bytes
 .../icons/resources.gif                            |  Bin 145 -> 0 bytes
 .../org.eclipse.core.resources.jmx/plugin.xml      |    9 -
 .../core/internal/resources/jmx/Activator.java     |   71 -
 .../resources/jmx/ContainerContribution.java       |   46 -
 .../internal/resources/jmx/FileContribution.java   |   47 -
 .../internal/resources/jmx/FolderContribution.java |   37 -
 .../core/internal/resources/jmx/Messages.java      |   34 -
 .../resources/jmx/ProjectContribution.java         |   37 -
 .../resources/jmx/ResourceContribution.java        |  148 -
 .../jmx/ResourceContributionProvider.java          |  143 -
 .../internal/resources/jmx/messages.properties     |   14 -
 .../plugins/org.eclipse.core.resources/.classpath  |    4 +-
 .../.settings/.api_filters                         |    9 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   26 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../META-INF/MANIFEST.MF                           |    8 +-
 .../org.eclipse.core.resources/build.properties    |    4 +-
 .../schema/builders.exsd                           |   21 +-
 .../schema/filterMatchers.exsd                     |    4 +-
 .../schema/modelProviders.exsd                     |   30 +-
 .../eclipse/core/internal/events/AutoBuildJob.java |    7 +-
 .../eclipse/core/internal/events/BuildCommand.java |  124 +-
 .../eclipse/core/internal/events/BuildContext.java |  123 +
 .../eclipse/core/internal/events/BuildManager.java |  325 +-
 .../internal/events/BuilderPersistentInfo.java     |   23 +-
 .../core/internal/events/InternalBuilder.java      |   81 +-
 .../core/internal/events/LifecycleEvent.java       |    4 +-
 .../core/internal/events/NotificationManager.java  |   10 +-
 .../core/internal/events/ResourceChangeEvent.java  |   14 +-
 .../core/internal/events/ResourceDelta.java        |   19 +-
 .../core/internal/events/ResourceDeltaFactory.java |    5 +-
 .../core/internal/events/ResourceDeltaInfo.java    |   13 +-
 .../core/internal/localstore/BlobStore.java        |    9 +-
 .../eclipse/core/internal/localstore/Bucket.java   |   25 +-
 .../core/internal/localstore/BucketTree.java       |   17 +-
 .../localstore/CollectSyncStatusVisitor.java       |    8 +-
 .../core/internal/localstore/CopyVisitor.java      |    4 +-
 .../core/internal/localstore/DeleteVisitor.java    |   16 +-
 .../core/internal/localstore/FileStoreRoot.java    |   22 +-
 .../localstore/FileSystemResourceManager.java      |  228 +-
 .../core/internal/localstore/HistoryBucket.java    |   17 +-
 .../core/internal/localstore/HistoryStore2.java    |   24 +-
 .../core/internal/localstore/IHistoryStore.java    |    4 +-
 .../internal/localstore/IsSynchronizedVisitor.java |   29 +-
 .../localstore/SafeChunkyOutputStream.java         |    7 +-
 .../internal/localstore/SafeFileOutputStream.java  |    4 +-
 .../core/internal/localstore/UnifiedTree.java      |   36 +-
 .../core/internal/localstore/UnifiedTreeNode.java  |    6 +-
 .../core/internal/properties/IPropertyManager.java |    4 +-
 .../core/internal/properties/PropertyBucket.java   |   18 +-
 .../core/internal/properties/PropertyManager2.java |   14 +-
 .../internal/propertytester/StringMatcher.java     |    6 +-
 .../core/internal/refresh/MonitorManager.java      |   60 +-
 .../core/internal/refresh/PollingMonitor.java      |   13 +-
 .../eclipse/core/internal/refresh/RefreshJob.java  |   19 +-
 .../core/internal/refresh/RefreshManager.java      |    8 +-
 .../core/internal/resources/AliasManager.java      |   87 +-
 .../internal/resources/BuildConfiguration.java     |  133 +
 .../core/internal/resources/CharsetDeltaJob.java   |    9 +-
 .../core/internal/resources/CharsetManager.java    |   41 +-
 .../internal/resources/ComputeProjectOrder.java    |  233 +-
 .../eclipse/core/internal/resources/Container.java |   25 +-
 .../resources/ContentDescriptionManager.java       |   43 +-
 .../internal/resources/DelayedSnapshotJob.java     |   11 +-
 .../org/eclipse/core/internal/resources/File.java  |   26 +-
 .../eclipse/core/internal/resources/FileState.java |   18 +-
 .../eclipse/core/internal/resources/Filter.java    |   17 +-
 .../core/internal/resources/FilterDescription.java |   14 +-
 .../core/internal/resources/FilterTypeManager.java |    9 +-
 .../core/internal/resources/ICoreConstants.java    |    2 +
 .../core/internal/resources/LinkDescription.java   |    8 +-
 .../core/internal/resources/LocalMetaArea.java     |   98 +-
 .../core/internal/resources/LocationValidator.java |    8 +-
 .../eclipse/core/internal/resources/Marker.java    |    7 +-
 .../internal/resources/MarkerAttributeMap.java     |   61 +-
 .../core/internal/resources/MarkerDelta.java       |   15 +-
 .../internal/resources/MarkerDeltaManager.java     |   21 +-
 .../core/internal/resources/MarkerInfo.java        |   23 +-
 .../core/internal/resources/MarkerManager.java     |   29 +-
 .../core/internal/resources/MarkerReader_1.java    |   17 +-
 .../core/internal/resources/MarkerReader_2.java    |   17 +-
 .../core/internal/resources/MarkerReader_3.java    |   17 +-
 .../eclipse/core/internal/resources/MarkerSet.java |    5 +-
 .../internal/resources/MarkerSnapshotReader_1.java |   13 +-
 .../internal/resources/MarkerSnapshotReader_2.java |   13 +-
 .../resources/MarkerTypeDefinitionCache.java       |   35 +-
 .../core/internal/resources/MarkerWriter.java      |   17 +-
 .../core/internal/resources/ModelObjectWriter.java |   41 +-
 .../core/internal/resources/NatureManager.java     |   88 +-
 .../internal/resources/PathVariableManager.java    |   33 +-
 .../core/internal/resources/PathVariableUtil.java  |   15 +-
 .../internal/resources/PreferenceInitializer.java  |    7 +-
 .../eclipse/core/internal/resources/Project.java   |  185 +-
 .../internal/resources/ProjectContentTypes.java    |   19 +-
 .../internal/resources/ProjectDescription.java     |  426 +-
 .../resources/ProjectDescriptionReader.java        |   78 +-
 .../core/internal/resources/ProjectInfo.java       |   20 +-
 .../resources/ProjectNatureDescriptor.java         |   19 +-
 .../resources/ProjectPathVariableManager.java      |   25 +-
 .../internal/resources/ProjectPreferences.java     |  146 +-
 .../resources/ProjectVariableProviderManager.java  |    9 +-
 .../eclipse/core/internal/resources/Resource.java  |  105 +-
 .../core/internal/resources/ResourceInfo.java      |   42 +-
 .../org/eclipse/core/internal/resources/Rules.java |   13 +-
 .../core/internal/resources/SafeFileTable.java     |   11 +-
 .../core/internal/resources/SaveManager.java       |  378 +-
 .../core/internal/resources/SyncInfoReader.java    |    5 +-
 .../core/internal/resources/SyncInfoReader_2.java  |   11 +-
 .../core/internal/resources/SyncInfoReader_3.java  |   11 +-
 .../internal/resources/SyncInfoSnapReader_3.java   |    9 +-
 .../core/internal/resources/SyncInfoWriter.java    |   25 +-
 .../core/internal/resources/Synchronizer.java      |   13 +-
 .../internal/resources/VariableDescription.java    |    8 +-
 .../core/internal/resources/WorkManager.java       |    5 +-
 .../eclipse/core/internal/resources/Workspace.java |  599 ++-
 .../resources/WorkspaceDescriptionReader.java      |    7 +-
 .../internal/resources/WorkspacePreferences.java   |    7 +-
 .../core/internal/resources/WorkspaceRoot.java     |    9 +-
 .../internal/resources/WorkspaceTreeReader_1.java  |   27 +-
 .../internal/resources/WorkspaceTreeReader_2.java  |  140 +-
 .../eclipse/core/internal/resources/XMLWriter.java |   19 +-
 .../resources/mapping/ChangeDescription.java       |   25 +-
 .../resources/mapping/ModelProviderDescriptor.java |   15 +-
 .../resources/mapping/ModelProviderManager.java    |   11 +-
 .../resources/mapping/ProposedResourceDelta.java   |   21 +-
 .../resources/mapping/ResourceModelProvider.java   |   10 +-
 .../resources/refresh/win32/Win32Monitor.java      |   49 +-
 .../eclipse/core/internal/utils/ArrayIterator.java |   13 +-
 .../org/eclipse/core/internal/utils/FileUtil.java  |   57 +-
 .../org/eclipse/core/internal/utils/Messages.java  |    1 -
 .../org/eclipse/core/internal/utils/ObjectMap.java |   53 +-
 .../src/org/eclipse/core/internal/utils/Queue.java |   39 +-
 .../eclipse/core/internal/utils/StringPool.java    |    5 +-
 .../eclipse/core/internal/utils/StringPoolJob.java |   12 +-
 .../core/internal/utils/messages.properties        |    3 +-
 .../eclipse/core/internal/watson/ElementTree.java  |    7 +-
 .../core/internal/watson/ElementTreeWriter.java    |   15 +-
 .../core/resources/IBuildConfiguration.java        |   82 +
 .../org/eclipse/core/resources/IBuildContext.java  |   63 +
 .../src/org/eclipse/core/resources/ICommand.java   |   29 +-
 .../src/org/eclipse/core/resources/IContainer.java |   80 +-
 .../src/org/eclipse/core/resources/IFile.java      |   23 +-
 .../src/org/eclipse/core/resources/IMarker.java    |    6 +-
 .../org/eclipse/core/resources/IMarkerDelta.java   |    4 +-
 .../src/org/eclipse/core/resources/IProject.java   |  162 +-
 .../core/resources/IProjectDescription.java        |   99 +-
 .../src/org/eclipse/core/resources/IResource.java  |    6 +-
 .../eclipse/core/resources/IResourceStatus.java    |    9 +-
 .../src/org/eclipse/core/resources/IWorkspace.java |   95 +-
 .../org/eclipse/core/resources/IWorkspaceRoot.java |   34 +-
 .../core/resources/IncrementalProjectBuilder.java  |   65 +-
 .../eclipse/core/resources/ResourceAttributes.java |   17 +-
 .../eclipse/core/resources/ResourcesPlugin.java    |   66 +-
 .../mapping/CompositeResourceMapping.java          |   11 +-
 .../core/resources/mapping/ModelProvider.java      |   15 +-
 .../resources/mapping/ResourceChangeValidator.java |   13 +-
 .../core/resources/mapping/ResourceMapping.java    |    7 +-
 .../core/resources/mapping/ResourceTraversal.java  |    9 +-
 .../core/resources/team/ResourceRuleFactory.java   |    9 +-
 .../org/eclipse/core/resources/ant/Policy.java     |    4 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../core/internal/runtime/auth/Activator.java      |    4 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |    6 +-
 .../customBuildCallbacks.xml                       |  167 +
 .../src/org/eclipse/core/runtime/IExtension.java   |    2 +-
 .../org.eclipse.core.runtime/META-INF/MANIFEST.MF  |    8 +-
 .../preferences/legacy/PreferenceForwarder.java    |    4 +-
 .../core/internal/runtime/InternalPlatform.java    |   34 +-
 .../src/org/eclipse/core/internal/runtime/Log.java |   49 +-
 .../runtime/PerformanceStatsProcessor.java         |   11 +-
 .../core/internal/runtime/PlatformLogWriter.java   |   62 -
 .../src/org/eclipse/core/runtime/ILog.java         |    4 +-
 .../src/org/eclipse/core/runtime/Plugin.java       |    9 +-
 .../src/org/eclipse/core/runtime/Preferences.java  |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   25 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../schema/valueVariables.exsd                     |    4 +-
 .../internal/variables/StringVariableManager.java  |    8 +-
 .../org/eclipse/core/variables/IValueVariable.java |    4 +-
 .../plugins/org.eclipse.cvs/META-INF/MANIFEST.MF   |    4 +-
 eclipse/plugins/org.eclipse.cvs/about.properties   |    4 +-
 eclipse/plugins/org.eclipse.cvs/notice.html        |  191 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   19 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    4 +-
 .../org.eclipse.debug.core/META-INF/MANIFEST.MF    |    2 +-
 .../buildnotes_platform-debug.html                 |   96 -
 .../core/org/eclipse/debug/core/DebugPlugin.java   |   56 +-
 .../eclipse/debug/core/ILaunchConfiguration.java   |    4 +-
 .../org/eclipse/debug/core/model/IDebugTarget.java |    4 +-
 .../debug/internal/core/BreakpointManager.java     |   62 +-
 .../internal/core/DebugPreferenceInitializer.java  |    2 +-
 .../debug/internal/core/ExpressionManager.java     |  195 +-
 .../debug/internal/core/LaunchConfiguration.java   |    7 +-
 .../eclipse/debug/internal/core/LaunchManager.java |   11 +-
 .../eclipse/debug/internal/core/Preferences.java   |  832 ++--
 .../debug/internal/core/WatchExpression.java       |   10 +-
 .../eclipse/debug/internal/core/XMLMemento.java    |   10 +-
 .../r2_0_buildnotes_platform-debug.html            | 1102 ---
 .../r2_1_buildnotes_platform-debug.html            |  410 --
 .../r3_0_buildnotes_platform-debug.html            |  994 ---
 .../org.eclipse.debug.core/r3_0_changes.html       |  260 -
 .../r3_1_buildnotes_platform-debug.html            |  975 ---
 .../org.eclipse.debug.core/r3_1_changes.html       |  183 -
 .../r3_2_ buildnotes_platform-debug.html           |  601 --
 .../r3_3_buildnotes_platform-debug.html            |  747 --
 .../r3_4_buildnotes_platform-debug.html            |  395 --
 .../r3_5_buildnotes_platform-debug.html            |  354 -
 .../org.eclipse.debug.core/schema/launchers.exsd   |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  208 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.debug.ui/META-INF/MANIFEST.MF      |    4 +-
 eclipse/plugins/org.eclipse.debug.ui/plugin.xml    |   22 +-
 .../schema/launchShortcuts.exsd                    |   78 +-
 .../schema/stringVariablePresentations.exsd        |   16 +-
 .../schema/toggleBreakpointsTargetFactories.exsd   |    4 +-
 .../eclipse/debug/internal/ui/DebugUIPlugin.java   |   25 +-
 .../debug/internal/ui/actions/ActionMessages.java  |    9 +-
 .../internal/ui/actions/ActionMessages.properties  |    6 +-
 .../internal/ui/actions/LaunchShortcutAction.java  |    6 +-
 .../ui/actions/ToggleBreakpointsTargetManager.java |   22 +-
 .../BreakpointGroupMessages.properties             |    6 +-
 .../breakpoints/OpenBreakpointMarkerAction.java    |    5 +-
 .../breakpoints/RemoveAllBreakpointsAction.java    |   64 +-
 .../breakpoints/RemoveBreakpointAction.java        |   36 +-
 .../breakpoints/ShowTargetBreakpointsAction.java   |  126 +-
 .../EditWatchExpressinInPlaceAction.java           |   85 +
 .../ui/actions/variables/ShowTypesAction.java      |    4 +-
 .../provisional/IBreakpointUIConstants.java        |    2 +-
 .../contextlaunching/LaunchingResourceManager.java |   48 +-
 .../internal/ui/contexts/DebugContextManager.java  |   98 +-
 .../ui/contexts/DebugWindowContextService.java     |  214 +-
 .../adapters/DefaultBreakpointsViewInput.java      |  148 +-
 .../adapters/DefaultViewerInputProvider.java       |    2 +-
 .../adapters/StackFrameSourceDisplayAdapter.java   |    4 +-
 .../LaunchConfigurationEditDialog.java             |   20 +-
 .../LaunchConfigurationFilteredTree.java           |   16 +-
 .../LaunchConfigurationManager.java                |    7 +-
 .../LaunchConfigurationsDialog.java                |   96 +-
 .../LaunchConfigurationsMessages.java              |    6 +-
 .../LaunchConfigurationsMessages.properties        |    8 +-
 .../launchConfigurations/PerspectiveManager.java   |  208 +-
 .../internal/ui/memory/RenderingBindings.java      |    5 +-
 .../provisional/AbstractAsyncTableRendering.java   |    6 +-
 .../elements/BreakpointManagerContentProvider.java |   15 +-
 .../DebugPreferencesMessages.properties            |   10 +-
 .../LaunchConfigurationsPreferencePage.java        |   11 +-
 .../ui/sourcelookup/SourceLookupManager.java       |   10 +-
 .../ui/sourcelookup/SourceLookupService.java       |    5 +-
 .../ui/stringsubstitution/PromptingResolver.java   |    2 +-
 .../StringSubstitutionMessages.java                |    1 +
 .../StringSubstitutionMessages.properties          |    1 +
 .../viewers/AsynchronousSchedulingRuleFactory.java |    6 +-
 .../viewers/breadcrumb/BreadcrumbItemDropDown.java |   81 +-
 .../ui/viewers/breadcrumb/BreadcrumbViewer.java    |    2 +-
 .../ui/viewers/breadcrumb/TreeViewerDropDown.java  |    9 +-
 .../ui/viewers/model/ElementCompareRequest.java    |    6 +-
 .../viewers/model/ITreeModelContentProvider.java   |   15 +-
 .../ui/viewers/model/InternalTreeModelViewer.java  |   88 +-
 .../model/InternalVirtualTreeModelViewer.java      |    9 +-
 .../internal/ui/viewers/model/LabelUpdate.java     |   10 +-
 .../ui/viewers/model/ModelContentProvider.java     |  145 +-
 .../ui/viewers/model/SubTreeModelViewer.java       |    4 +
 .../internal/ui/viewers/model/TreeCursor.java      | 1211 ++--
 .../ui/viewers/model/TreeModelContentProvider.java |  142 +-
 .../ui/viewers/model/TreeModelLabelProvider.java   |   96 +-
 .../internal/ui/viewers/model/VirtualItem.java     |    2 +-
 .../internal/ui/viewers/model/VirtualTree.java     |    2 +-
 .../model/provisional/IColumnPresentation2.java    |   35 +
 .../model/provisional/PresentationContext.java     |    7 +-
 .../viewers/model/provisional/TreeModelViewer.java |    2 +-
 .../model/provisional/VirtualTreeModelViewer.java  |    5 +-
 .../provisional/AbstractColumnPresentation.java    |   13 +-
 .../ui/viewers/update/BreakpointManagerProxy.java  |  364 +-
 .../ui/viewers/update/DefaultSelectionPolicy.java  |   19 +-
 .../internal/ui/views/ViewContextManager.java      |    3 +-
 .../internal/ui/views/ViewContextService.java      |   53 +-
 .../ui/views/breakpoints/BreakpointContainer.java  |    2 +-
 .../ui/views/breakpoints/BreakpointsView.java      |   81 +-
 .../ui/views/expression/ExpressionDropAdapter.java |   11 +-
 .../ui/views/expression/ExpressionView.java        |   25 +-
 .../debug/internal/ui/views/launch/LaunchView.java |   14 +-
 .../LaunchViewCopyToClipboardActionDelegate.java   |    8 +-
 .../ui/views/memory/AbstractMemoryViewPane.java    |    9 +-
 .../ui/views/memory/AddMemoryBlockAction.java      |   14 +-
 .../ui/views/memory/AddMemoryRenderingDialog.java  |    4 +-
 .../ui/views/memory/MemoryBlocksTreeViewPane.java  |   10 +-
 .../debug/internal/ui/views/memory/MemoryView.java |    4 +-
 .../ui/views/memory/RenderingViewPane.java         |    2 +-
 .../views/memory/RetargetAddMemoryBlockAction.java |    4 +-
 .../ui/views/memory/SwitchMemoryBlockAction.java   |   15 +-
 .../views/memory/renderings/GoToAddressAction.java |    9 +-
 .../renderings/TableRenderingContentProvider.java  |    6 +-
 .../views/modules/ModulesViewMessages.properties   |    2 +-
 .../internal/ui/views/registers/RegistersView.java |    2 +-
 .../registers/RegistersViewMessages.properties     |    2 +-
 .../internal/ui/views/variables/VariablesView.java |  168 +-
 .../views/variables/details/DetailPaneManager.java |    7 +-
 .../debug/ui/AbstractLaunchConfigurationTab.java   |   32 +-
 .../ui/org/eclipse/debug/ui/CommonTab.java         |   59 +-
 .../ui/org/eclipse/debug/ui/DebugPopup.java        |    4 +-
 .../ui/org/eclipse/debug/ui/DebugUITools.java      |  261 +-
 .../ui/org/eclipse/debug/ui/EnvironmentTab.java    |   15 +-
 .../ui/org/eclipse/debug/ui/IDetailPane3.java      |    4 +-
 .../debug/ui/StringVariableSelectionDialog.java    |   51 +-
 .../ui/actions/AbstractLaunchHistoryAction.java    |    2 +-
 .../debug/ui/actions/ContextualLaunchAction.java   |    5 +-
 .../debug/ui/actions/DebugCommandAction.java       |    3 +-
 .../org/eclipse/debug/ui/actions/ILaunchable.java  |   31 +-
 .../debug/ui/actions/LaunchShortcutsAction.java    |    5 +-
 .../debug/ui/contexts/IDebugContextProvider2.java  |   44 +
 .../debug/ui/contexts/IDebugContextService.java    |   59 +-
 .../debug/ui/memory/AbstractTableRendering.java    |    2 +-
 .../memory/IMemoryRenderingBindingsProvider.java   |    6 +-
 .../debug/ui/sourcelookup/SourceLookupTab.java     |   15 +-
 .../org.eclipse.ecf.identity/plugin.properties     |    2 +-
 eclipse/plugins/org.eclipse.ecf/javadoc.xml        |   11 +-
 .../core/provider/BaseContainerInstantiator.java   |    3 +-
 .../org.eclipse.equinox.app/META-INF/MANIFEST.MF   |    2 +-
 .../src/org/eclipse/equinox/app/IApplication.java  |    4 +-
 .../eclipse/equinox/internal/app/AppCommands.java  |  114 +-
 .../org/eclipse/equinox/internal/app/Messages.java |   15 +-
 .../equinox/internal/app/messages.properties       |   17 +-
 .../application/ApplicationAdminPermission.java    |   70 +-
 .../service/application/ApplicationDescriptor.java |  229 +-
 .../service/application/ApplicationException.java  |   24 +-
 .../service/application/ApplicationHandle.java     |   63 +-
 .../service/application/ScheduledApplication.java  |    8 +-
 .../org.eclipse.equinox.cm/META-INF/MANIFEST.MF    |    4 +-
 .../equinox/internal/cm/SerializedTaskQueue.java   |    2 +-
 .../META-INF/MANIFEST.MF                           |    6 +-
 .../eclipse/core/internal/runtime/Activator.java   |   22 +-
 .../core/internal/runtime/PlatformLogWriter.java   |  152 +
 .../eclipse/core/internal/runtime/RuntimeLog.java  |  112 +-
 .../org/eclipse/core/runtime/CoreException.java    |    2 +-
 .../src/org/eclipse/core/runtime/ListenerList.java |   26 +-
 .../eclipse/core/runtime/NullProgressMonitor.java  |    2 +-
 .../org/eclipse/core/runtime/PlatformObject.java   |    4 +-
 .../src/org/eclipse/core/runtime/URIUtil.java      |    6 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../plugin.properties                              |    2 +-
 .../org.eclipse.equinox.coordinator/.classpath     |    7 +
 .../org.eclipse.equinox.coordinator/.project       |   39 +
 .../.settings/.api_filters                         |   11 +
 .../.settings/org.eclipse.core.resources.prefs     |    3 +
 .../.settings/org.eclipse.jdt.core.prefs           |  331 +
 .../.settings/org.eclipse.pde.api.tools.prefs      |   94 +
 .../.settings/org.eclipse.pde.core.prefs           |    5 +
 .../META-INF/MANIFEST.MF                           |   20 +
 .../OSGI-INF/component.xml                         |    7 +
 .../about.html                                     |    0
 .../about_files/LICENSE-2.0.txt                    |    0
 .../build.properties                               |   27 +
 .../plugin.properties                              |   12 +
 .../org/eclipse/equinox/coordinator/Activator.java |   47 +
 .../equinox/coordinator/CoordinationImpl.java      |  387 +
 .../equinox/coordinator/CoordinationTimerTask.java |   37 +
 .../equinox/coordinator/CoordinatorComponent.java  |   64 +
 .../equinox/coordinator/CoordinatorImpl.java       |  292 +
 .../coordinator/CoordinatorServiceFactory.java     |   42 +
 .../equinox/coordinator/LogMessages.properties     |   17 +
 .../eclipse/equinox/coordinator/LogTracker.java    |  175 +
 .../eclipse/equinox/coordinator/LogTrackerMsg.java |   28 +
 .../org/eclipse/equinox/coordinator/Messages.java  |   47 +
 .../equinox/coordinator/messages.properties        |   31 +
 .../org/osgi/service/coordinator/Coordination.java |  398 ++
 .../service/coordinator/CoordinationException.java |  159 +
 .../coordinator/CoordinationPermission.java        |  808 +++
 .../org/osgi/service/coordinator/Coordinator.java  |  257 +
 .../org/osgi/service/coordinator/Participant.java  |   87 +
 .../META-INF/MANIFEST.MF                           |    5 +-
 .../org.eclipse.equinox.device/plugin.properties   |    1 -
 .../org.eclipse.equinox.ds/.settings/.api_filters  |   26 +
 .../org.eclipse.equinox.ds/META-INF/MANIFEST.MF    |   10 +-
 eclipse/plugins/org.eclipse.equinox.ds/about.html  |    2 +-
 .../src/org/apache/felix/scr/Component.java        |   28 +-
 .../src/org/apache/felix/scr/Reference.java        |   13 +
 .../src/org/apache/felix/scr/ScrService.java       |   17 +
 .../org/eclipse/equinox/internal/ds/Activator.java |    2 +-
 .../equinox/internal/ds/CircularityException.java  |    2 +-
 .../equinox/internal/ds/ComponentStorage.java      |   39 +-
 .../equinox/internal/ds/InstanceProcess.java       |    2 +-
 .../org/eclipse/equinox/internal/ds/Messages.java  |    2 +-
 .../org/eclipse/equinox/internal/ds/Reference.java |   14 +-
 .../org/eclipse/equinox/internal/ds/Resolver.java  |    2 +-
 .../equinox/internal/ds/SCRCommandProvider.java    |  200 +-
 .../eclipse/equinox/internal/ds/SCRManager.java    |   37 +-
 .../org/eclipse/equinox/internal/ds/SCRUtil.java   |    2 +-
 .../equinox/internal/ds/SCRmessages.properties     |    2 +-
 .../equinox/internal/ds/ScrServiceImpl.java        |    9 +-
 .../eclipse/equinox/internal/ds/ServiceReg.java    |    2 +-
 .../eclipse/equinox/internal/ds/WorkPerformer.java |    2 +-
 .../eclipse/equinox/internal/ds/WorkThread.java    |    2 +-
 .../internal/ds/impl/ComponentContextImpl.java     |    7 +-
 .../internal/ds/impl/ComponentFactoryImpl.java     |    4 +-
 .../internal/ds/impl/ComponentInstanceImpl.java    |    2 +-
 .../internal/ds/impl/ReadOnlyDictionary.java       |  139 +
 .../internal/ds/model/ComponentReference.java      |   21 +-
 .../internal/ds/model/DeclarationParser.java       |  181 +-
 .../internal/ds/model/ServiceComponent.java        |   40 +-
 .../internal/ds/model/ServiceComponentProp.java    |   15 +-
 .../internal/ds/storage/file/FileStorage.java      |    2 +-
 .../equinox/internal/util/io/Externalizable.java   |    2 +-
 .../internal/util/io/ExternalizableDictionary.java |    2 +-
 .../equinox/internal/util/io/PDataStream.java      |    2 +-
 .../equinox/internal/util/string/CharBuffer.java   |    2 +-
 .../equinox/internal/util/xml/ExTagListener.java   |    2 +-
 .../org/eclipse/equinox/internal/util/xml/Tag.java |    2 +-
 .../equinox/internal/util/xml/TagClass.java        |    2 +-
 .../equinox/internal/util/xml/TagListener.java     |    2 +-
 .../equinox/internal/util/xml/XMLParser.java       |    2 +-
 .../equinox/internal/util/xml/XMLReader.java       |    2 +-
 .../eclipse/equinox/internal/util/xml/XMLUtil.java |    2 +-
 .../equinox/internal/util/xml/XmlSerializer.java   |    2 +-
 .../equinox/internal/util/xml/impl/TagImpl.java    |    2 +-
 .../internal/util/xml/impl/XMLParserImpl.java      |    2 +-
 .../plugins/org.eclipse.equinox.event/.classpath   |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  600 +-
 .../.settings/org.eclipse.pde.api.tools.prefs      |   94 +
 .../org.eclipse.equinox.event/META-INF/MANIFEST.MF |   17 +-
 .../org.eclipse.equinox.event/build.properties     |   15 +
 .../org.eclipse.equinox.event/plugin.properties    |    1 -
 .../eclipse/equinox/internal/event/Activator.java  |    8 +-
 .../equinox/internal/event/EventAdminImpl.java     |   50 +-
 .../equinox/internal/event/EventAdminMsg.java      |    3 +-
 .../internal/event/EventHandlerTracker.java        |   69 +-
 .../internal/event/EventHandlerWrapper.java        |   32 +-
 .../internal/event/ExternalMessages.properties     |    5 +-
 .../eclipse/equinox/internal/event/LogTracker.java |   43 +-
 .../internal/event/mapper/BundleEventAdapter.java  |   12 +-
 .../internal/event/mapper/EventAdapter.java        |   14 +-
 .../internal/event/mapper/EventRedeliverer.java    |    8 +-
 .../event/mapper/FrameworkEventAdapter.java        |   12 +-
 .../internal/event/mapper/ServiceEventAdapter.java |   14 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../pom.xml                                        |    2 +-
 .../equinox/EclipseLauncherParser.java             |    9 +-
 .../equinox/EquinoxFwConfigFileParser.java         |    9 +-
 .../frameworkadmin/equinox/ParserUtils.java        |    7 +-
 .../META-INF/MANIFEST.MF                           |    2 -
 .../frameworkadmin/utils/SimpleBundlesState.java   |    2 +-
 .../internal/frameworkadmin/utils/Utils.java       |    2 +-
 .../ConfiguratorManipulator.java                   |    2 +-
 .../ConfiguratorManipulatorFactory.java            |    2 +-
 .../provisional/frameworkadmin/BundlesState.java   |    2 +-
 .../provisional/frameworkadmin/ConfigData.java     |    2 +-
 .../provisional/frameworkadmin/FrameworkAdmin.java |    2 +-
 .../provisional/frameworkadmin/LauncherData.java   |    2 +-
 .../provisional/frameworkadmin/Manipulator.java    |    2 +-
 .../http/jetty/internal/HttpServerManager.java     |    3 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../OSGI-INF/metatype/config.xml                   |   42 +-
 .../plugin.properties                              |   42 +-
 .../equinox/http/jetty/JettyConfigurator.java      |    2 +-
 .../http/jetty/internal/HttpServerManager.java     |    3 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../plugin.properties                              |    2 +-
 .../internal/DefaultRegistryHttpContext.java       |    2 +-
 .../http/registry/internal/FilterManager.java      |    2 +-
 .../registry/internal/HttpRegistryManager.java     |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../equinox/http/servlet/ExtendedHttpService.java  |   10 +
 .../equinox/http/servlet/internal/Activator.java   |    3 +-
 .../http/servlet/internal/FilterChainImpl.java     |   10 +
 .../http/servlet/internal/FilterRegistration.java  |   10 +
 .../http/servlet/internal/HttpServiceFactory.java  |    2 +-
 .../http/servlet/internal/ProxyContext.java        |   22 +-
 .../http/servlet/internal/ProxyServlet.java        |    2 +-
 .../http/servlet/internal/Registration.java        |    2 +-
 .../http/servlet/internal/ResourceServlet.java     |    2 +-
 .../http/servlet/internal/ServletRegistration.java |    2 +-
 .../org.eclipse.equinox.http/META-INF/MANIFEST.MF  |    5 +-
 .../org.eclipse.equinox.http/plugin.properties     |    1 -
 .../org.eclipse.equinox.io/META-INF/MANIFEST.MF    |    4 +-
 .../src/javax/microedition/io/Connection.java      |    2 +-
 .../io/ConnectionNotFoundException.java            |    2 +-
 .../src/javax/microedition/io/Connector.java       |    2 +-
 .../javax/microedition/io/ContentConnection.java   |    2 +-
 .../src/javax/microedition/io/Datagram.java        |    2 +-
 .../javax/microedition/io/DatagramConnection.java  |    2 +-
 .../src/javax/microedition/io/HttpConnection.java  |    2 +-
 .../src/javax/microedition/io/InputConnection.java |    2 +-
 .../javax/microedition/io/OutputConnection.java    |    2 +-
 .../javax/microedition/io/StreamConnection.java    |    2 +-
 .../microedition/io/StreamConnectionNotifier.java  |    2 +-
 .../equinox/internal/io/ConnectionListener.java    |    2 +-
 .../equinox/internal/io/ConnectionNotifier.java    |    2 +-
 .../internal/io/RandomAccessConnection.java        |    2 +-
 .../equinox/internal/io/impl/Activator.java        |    2 +-
 .../io/impl/ConnectionFactoryListener.java         |    2 +-
 .../internal/io/impl/ConnectionNotifierImpl.java   |    2 +-
 .../internal/io/impl/ConnectorServiceImpl.java     |    2 +-
 .../equinox/internal/io/impl/PrivilegedRunner.java |    4 +-
 .../internal/io/impl/TracerConfigConnector.java    |    2 +-
 .../io/util/AbstractConnectionNotifier.java        |    2 +-
 .../equinox/internal/io/util/AbstractDatagram.java |    2 +-
 .../org/eclipse/equinox/internal/io/util/URI.java  |    2 +-
 .../org.eclipse.equinox.ip/META-INF/MANIFEST.MF    |    4 +-
 .../internal/ip/ProvisioningInfoProvider.java      |    2 +-
 .../equinox/internal/ip/ProvisioningStorage.java   |    2 +-
 .../internal/ip/dscagent/DiscoveryAgent.java       |    2 +-
 .../org/eclipse/equinox/internal/ip/impl/Log.java  |    2 +-
 .../internal/ip/impl/ProvisioningAgent.java        |    2 +-
 .../equinox/internal/ip/impl/ProvisioningData.java |    2 +-
 .../equinox/internal/ip/provider/BaseProvider.java |    2 +-
 .../ip/provider/env/EnvironmentInfoProvider.java   |    2 +-
 .../internal/ip/provider/file/FileProvider.java    |    2 +-
 .../equinox/internal/ip/provider/http/Context.java |    2 +-
 .../internal/ip/provider/http/HttpProvider.java    |    2 +-
 .../equinox/internal/ip/storage/cm/CMStorage.java  |    2 +-
 .../internal/ip/storage/file/FileStorage.java      |    2 +-
 .../org.eclipse.equinox.jmx.client.rmi/.classpath  |    7 -
 .../org.eclipse.equinox.jmx.client.rmi/.project    |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  308 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    8 -
 .../META-INF/MANIFEST.MF                           |   12 -
 .../org.eclipse.equinox.jmx.client.rmi/about.html  |   28 -
 .../build.properties                               |   19 -
 .../org.eclipse.equinox.jmx.client.rmi/plugin.xml  |   11 -
 .../jmx/client/rmi/RMIConnectorProvider.java       |   34 -
 .../.classpath                                     |    7 -
 .../org.eclipse.equinox.jmx.client.xmlrpc/.project |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  309 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../META-INF/MANIFEST.MF                           |   18 -
 .../about.html                                     |   28 -
 .../build.properties                               |   19 -
 .../plugin.xml                                     |   11 -
 .../internal/xmlrpc/ClientTransportProvider.java   |   42 -
 .../xmlrpc/WebServerTransportProvider.java         |   41 -
 .../client/internal/xmlrpc/XMLRPCJMXConnector.java |   93 -
 .../xmlrpc/XMLRPCJMXConnectorProvider.java         |   38 -
 .../xmlrpc/XMLRPCMBeanServerConnection.java        |  265 -
 .../org.eclipse.equinox.jmx.client/.classpath      |    7 -
 .../org.eclipse.equinox.jmx.client/.project        |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  309 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../JMX Client.launch                              |   33 -
 .../META-INF/MANIFEST.MF                           |   28 -
 .../org.eclipse.equinox.jmx.client/about.html      |   28 -
 .../build.properties                               |   21 -
 .../icons/contribution_desc_view.gif               |  Bin 586 -> 0 bytes
 .../icons/contributions_view.gif                   |  Bin 219 -> 0 bytes
 .../icons/perspective.gif                          |  Bin 362 -> 0 bytes
 .../plugin.properties                              |   18 -
 .../org.eclipse.equinox.jmx.client/plugin.xml      |   67 -
 .../schema/transport.exsd                          |  112 -
 .../equinox/jmx/client/IJMXConnectorProvider.java  |   19 -
 .../jmx/client/remote/RemoteMBeanConnection.java   |   18 -
 .../client/remote/RemoteNotificationHandler.java   |  143 -
 .../equinox/jmx/internal/client/Activator.java     |  165 -
 .../jmx/internal/client/MBeanServerProxy.java      |   97 -
 .../client/ui/ClientPerspectiveFactory.java        |   31 -
 .../equinox/jmx/internal/client/ui/ClientUI.java   |   32 -
 .../internal/client/ui/actions/ActionMessages.java |   47 -
 .../client/ui/actions/ActionMessages.properties    |   28 -
 .../ui/actions/ConnectionSelectionDialog.java      |  149 -
 .../client/ui/actions/NewConnectionAction.java     |  199 -
 .../BundleStatusLabelDecorator.java                |   86 -
 .../ContributionContentProvider.java               |  227 -
 .../ContributionLabelProvider.java                 |  129 -
 .../ContributionViewMessages.java                  |   31 -
 .../ContributionViewMessages.properties            |   12 -
 .../contributionsview/ContributionsViewPart.java   |  101 -
 .../client/ui/invocationView/InvocationView.java   |  217 -
 .../ui/mbeaninfoview/MBeanInfoViewMessages.java    |   45 -
 .../mbeaninfoview/MBeanInfoViewMessages.properties |   27 -
 .../client/ui/mbeaninfoview/MBeanInfoViewPart.java |  261 -
 .../client/ui/mbeaninfoview/MBeanOpTable.java      |  230 -
 .../internal/client/ui/util/ByteImageRegistry.java |   60 -
 .../ui/viewsupport/BundleImageDescriptor.java      |   80 -
 .../ui/viewsupport/ImageImageDescriptor.java       |   53 -
 .../client/ui/viewsupport/ImageRegistry.java       |  102 -
 .../client/ui/viewsupport/JMXPluginImages.java     |   67 -
 .../internal/client/ui/viewsupport/ViewUtil.java   |   69 -
 .../org.eclipse.equinox.jmx.common/.classpath      |    7 -
 .../org.eclipse.equinox.jmx.common/.project        |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  320 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../.settings/org.eclipse.pde.prefs                |   13 -
 .../META-INF/MANIFEST.MF                           |   28 -
 .../org.eclipse.equinox.jmx.common/about.html      |   28 -
 .../build.properties                               |   18 -
 .../jmx/common/ContributionNotificationEvent.java  |   28 -
 .../equinox/jmx/common/ContributionProxy.java      |  180 -
 .../equinox/jmx/common/ContributionProxyMBean.java |   51 -
 .../common/IContributionStateChangeListener.java   |   15 -
 .../IContributionStateChangedDispatcher.java       |   15 -
 .../eclipse/equinox/jmx/common/JMXConstants.java   |   19 -
 .../equinox/jmx/common/NamedNotification.java      |   52 -
 .../equinox/jmx/common/RootContribution.java       |  105 -
 .../equinox/jmx/common/RootContributionMBean.java  |   26 -
 .../equinox/jmx/common/util/ByteArrayHolder.java   |   42 -
 .../equinox/jmx/common/util/MBeanInfoWrapper.java  |   54 -
 .../equinox/jmx/common/util/MBeanUtils.java        |   78 -
 .../equinox/jmx/common/util/RingBuffer.java        |   60 -
 .../eclipse/equinox/jmx/common/util/TextUtils.java |   70 -
 .../equinox/jmx/internal/common/Activator.java     |  160 -
 .../jmx/internal/common/CommonMessages.java        |   28 -
 .../jmx/internal/common/CommonMessages.properties  |   13 -
 .../org.eclipse.equinox.jmx.server.rmi/.classpath  |    7 -
 .../org.eclipse.equinox.jmx.server.rmi/.project    |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  309 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../META-INF/MANIFEST.MF                           |   17 -
 .../org.eclipse.equinox.jmx.server.rmi/about.html  |   28 -
 .../build.properties                               |   20 -
 .../org.eclipse.equinox.jmx.server.rmi/plugin.xml  |   11 -
 .../server.policy                                  |    1 -
 .../equinox/jmx/internal/rmi/Activator.java        |   37 -
 .../equinox/jmx/internal/rmi/RMIServer.java        |   54 -
 .../.classpath                                     |    7 -
 .../org.eclipse.equinox.jmx.server.xmlrpc/.project |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  311 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../META-INF/MANIFEST.MF                           |   24 -
 .../about.html                                     |   28 -
 .../build.properties                               |   19 -
 .../plugin.xml                                     |   11 -
 .../internal/xmlrpc/XMLRPCJMXConnectorServer.java  |   66 -
 .../internal/xmlrpc/XMLRPCMBeanServerAdapter.java  |  538 --
 .../jmx/server/internal/xmlrpc/XMLRPCServer.java   |   36 -
 .../org.eclipse.equinox.jmx.server/.classpath      |    7 -
 .../org.eclipse.equinox.jmx.server/.project        |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  313 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../JMX Server n Client.launch                     |  261 -
 .../JMX Server.launch                              |  266 -
 .../META-INF/MANIFEST.MF                           |   33 -
 .../org.eclipse.equinox.jmx.server/about.html      |   28 -
 .../build.properties                               |   21 -
 .../org.eclipse.equinox.jmx.server/plugin.xml      |   24 -
 .../org.eclipse.equinox.jmx.server/readme.txt      |    9 -
 .../schema/contribution.exsd                       |  133 -
 .../schema/provider.exsd                           |  112 -
 .../server-1.4.product                             |   60 -
 .../server-1.5.product                             |   59 -
 .../server-ppro.product                            |   61 -
 .../equinox/jmx/internal/server/Activator.java     |  268 -
 .../equinox/jmx/internal/server/Application.java   |   30 -
 .../jmx/internal/server/ContributionMessages.java  |   37 -
 .../server/ContributionMessages.properties         |   18 -
 .../equinox/jmx/internal/server/IJMXServer.java    |   52 -
 .../jmx/internal/server/JMXServerFactory.java      |  119 -
 .../internal/server/ServerExtensionManager.java    |  139 -
 .../jmx/internal/server/ServerMessages.java        |   36 -
 .../jmx/internal/server/ServerMessages.properties  |   18 -
 .../equinox/jmx/internal/server/UIStarter.java     |   39 -
 .../eclipse/equinox/jmx/server/Contribution.java   |  387 -
 .../equinox/jmx/server/ContributionProvider.java   |  131 -
 .../jmx/server/IJMXConnectorServerProvider.java    |   19 -
 .../plugins/org.eclipse.equinox.jmx.vm/.classpath  |    7 -
 .../plugins/org.eclipse.equinox.jmx.vm/.project    |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  311 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    8 -
 .../META-INF/MANIFEST.MF                           |   18 -
 .../plugins/org.eclipse.equinox.jmx.vm/about.html  |   28 -
 .../org.eclipse.equinox.jmx.vm/build.properties    |   20 -
 .../icons/classloading.gif                         |  Bin 260 -> 0 bytes
 .../icons/compilation.gif                          |  Bin 115 -> 0 bytes
 .../org.eclipse.equinox.jmx.vm/icons/memory.gif    |  Bin 325 -> 0 bytes
 .../org.eclipse.equinox.jmx.vm/icons/os.gif        |  Bin 259 -> 0 bytes
 .../org.eclipse.equinox.jmx.vm/icons/runtime.gif   |  Bin 122 -> 0 bytes
 .../org.eclipse.equinox.jmx.vm/icons/vmstats.gif   |  Bin 582 -> 0 bytes
 .../plugins/org.eclipse.equinox.jmx.vm/plugin.xml  |   11 -
 .../eclipse/equinox/jmx/internal/vm/Activator.java |   41 -
 .../jmx/internal/vm/ClassLoadingContribution.java  |  105 -
 .../jmx/internal/vm/CompilationContribution.java   |  104 -
 .../jmx/internal/vm/MemoryContribution.java        |  165 -
 .../internal/vm/OperatingSystemContribution.java   |  106 -
 .../jmx/internal/vm/RuntimeContribution.java       |  111 -
 .../equinox/jmx/internal/vm/VMStatsMessages.java   |   67 -
 .../jmx/internal/vm/VMStatsMessages.properties     |   51 -
 .../equinox/jmx/internal/vm/VMStatsProvider.java   |  140 -
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../internal/jsp/jasper/JspClassLoader.java        |    2 +-
 .../org/eclipse/equinox/jsp/jasper/JspServlet.java |   43 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.carbon.macosx.properties              |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.cocoa.macosx.x86_64.properties        |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.cocoa.macosx.properties               |    2 +-
 .../.project                                       |   22 +
 .../.settings/org.eclipse.pde.core.prefs           |    4 +
 .../META-INF/MANIFEST.MF                           |   10 +
 .../about.html                                     |    0
 .../build.properties                               |   17 +
 .../customBuildCallbacks.xml                       |    0
 .../launcher.gtk.aix.ppc.properties                |   12 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../.project                                       |   22 +
 .../.settings/org.eclipse.pde.core.prefs           |    4 +
 .../META-INF/MANIFEST.MF                           |   10 +
 .../about.html                                     |    0
 .../build.properties                               |   17 +
 .../customBuildCallbacks.xml                       |    0
 .../launcher.gtk.hpux.ia64_32.properties           |   12 +
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.ppc.properties              |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.ppc64.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.s390.properties             |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.s390x.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.x86.properties              |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.x86_64.properties           |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.solaris.sparc.properties          |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.solaris.x86.properties            |    2 +-
 .../.project                                       |   22 -
 .../.settings/org.eclipse.pde.core.prefs           |    4 -
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |    8 -
 .../launcher.motif.aix.ppc.properties              |   12 -
 .../.project                                       |   22 -
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |    7 -
 .../launcher.motif.hpux.ia64_32.properties         |   12 -
 .../.project                                       |   22 -
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |    7 -
 .../launcher.motif.linux.x86.properties            |   12 -
 .../.project                                       |   22 -
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |    7 -
 .../launcher.motif.solaris.sparc.properties        |   12 -
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.win32.win32.x86.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.win32.win32.x86_64.properties         |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.equinox.launcher/build.properties  |   10 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.s390.properties             |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.s390x.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.solaris.x86.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.carbon.macosx.properties              |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.cocoa.macosx.x86_64.properties        |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.cocoa.macosx.properties               |    2 +-
 .../.project                                       |   22 +
 .../.settings/org.eclipse.pde.core.prefs           |    4 +
 .../META-INF/MANIFEST.MF                           |   10 +
 .../about.html                                     |    0
 .../build.properties                               |   17 +
 .../customBuildCallbacks.xml                       |    0
 .../launcher.gtk.aix.ppc.properties                |   12 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../.project                                       |   22 +
 .../.settings/org.eclipse.pde.core.prefs           |    4 +
 .../META-INF/MANIFEST.MF                           |   10 +
 .../about.html                                     |    0
 .../build.properties                               |   17 +
 .../customBuildCallbacks.xml                       |    0
 .../launcher.gtk.hpux.ia64_32.properties           |   12 +
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.ppc.properties              |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.ppc64.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.x86.properties              |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.linux.x86_64.properties           |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.gtk.solaris.sparc.properties          |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.motif.aix.ppc.properties              |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.motif.hpux.ia64_32.properties         |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.motif.linux.x86.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.motif.solaris.sparc.properties        |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.win32.win32.ia64.properties           |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.win32.win32.x86.properties            |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.win32.win32.x86_64.properties         |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../launcher.wpf.win32.x86.properties              |    2 +-
 .../launcher.properties                            |    2 +-
 .../src/org/eclipse/core/launcher/Main.java        |    2 +-
 .../src/org/eclipse/equinox/launcher/Main.java     |    7 +
 .../org/eclipse/equinox/launcher/WebStartMain.java |    2 +-
 .../org.eclipse.equinox.log/.settings/.api_filters |   13 +
 .../org.eclipse.equinox.log/META-INF/MANIFEST.MF   |   11 +-
 .../equinox/log/LogPermissionCollection.java       |    2 +-
 .../equinox/log/SynchronousLogListener.java        |    2 +-
 .../eclipse/equinox/log/internal/Activator.java    |   11 +-
 .../equinox/log/internal/BasicReadWriteLock.java   |    2 +-
 .../equinox/log/internal/ExtendedLogEntryImpl.java |    2 +-
 .../internal/ExtendedLogReaderServiceFactory.java  |    2 +-
 .../log/internal/ExtendedLogReaderServiceImpl.java |    2 +-
 .../log/internal/ExtendedLogServiceFactory.java    |    2 +-
 .../log/internal/ExtendedLogServiceImpl.java       |    2 +-
 .../eclipse/equinox/log/internal/LoggerImpl.java   |    2 +-
 .../equinox/log/internal/SerializedTaskQueue.java  |    2 +-
 .../org.eclipse.equinox.metatype/.classpath        |    2 +-
 .../.settings/.api_filters                         |   11 +
 .../.settings/org.eclipse.jdt.core.prefs           |  596 +-
 .../.settings/org.eclipse.pde.api.tools.prefs      |   94 +
 .../META-INF/MANIFEST.MF                           |   23 +-
 .../org.eclipse.equinox.metatype/build.properties  |    7 +-
 .../org.eclipse.equinox.metatype/plugin.properties |    1 -
 .../org/eclipse/equinox/metatype/Activator.java    |  259 +-
 .../equinox/metatype/AttributeDefinitionImpl.java  |  276 +-
 .../org/eclipse/equinox/metatype/DataParser.java   |  276 +-
 .../org/eclipse/equinox/metatype/Designate.java    |  104 +
 .../equinox/metatype/ExternalMessages.properties   |   10 +-
 .../eclipse/equinox/metatype/FragmentUtils.java    |   79 +-
 .../equinox/metatype/LocalizationElement.java      |    4 +-
 .../equinox/metatype/LogMessages.properties        |   17 +
 .../org/eclipse/equinox/metatype/LogTracker.java   |  177 +
 .../eclipse/equinox/metatype/LogTrackerMsg.java    |   28 +
 .../src/org/eclipse/equinox/metatype/Logging.java  |   73 -
 .../equinox/metatype/MetaTypeInformationImpl.java  |   15 +-
 .../org/eclipse/equinox/metatype/MetaTypeMsg.java  |   10 +-
 .../equinox/metatype/MetaTypeProviderImpl.java     |  140 +-
 .../equinox/metatype/MetaTypeProviderTracker.java  |  138 +-
 .../equinox/metatype/MetaTypeServiceImpl.java      |   31 +-
 .../metatype/ObjectClassDefinitionImpl.java        |   60 +-
 .../eclipse/equinox/metatype/ValueTokenizer.java   |  272 +-
 .../META-INF/MANIFEST.MF                           |   10 +-
 .../build.properties                               |   10 +
 .../pom.xml                                        |    2 +-
 .../p2/artifact/processing/messages.properties     |    4 +-
 .../p2/artifact/processors/md5/MD5Verifier.java    |    5 +-
 .../p2/artifact/processors/md5/Messages.java       |    2 +-
 .../p2/artifact/processors/md5/messages.properties |    2 +-
 .../processors/pack200/Pack200ProcessorStep.java   |    2 +-
 .../internal/p2/artifact/repository/Activator.java |   76 +-
 .../repository/ArtifactRepositoryComponent.java    |    2 +-
 .../repository/ArtifactRepositoryManager.java      |    7 +-
 .../p2/artifact/repository/ArtifactRequest.java    |    7 +-
 .../repository/CompositeArtifactRepository.java    |   88 +-
 .../CompositeArtifactRepositoryFactory.java        |    9 +-
 .../internal/p2/artifact/repository/Messages.java  |    4 +-
 .../p2/artifact/repository/MirrorRequest.java      |   24 +-
 .../p2/artifact/repository/MirrorSelector.java     |    8 +-
 .../p2/artifact/repository/RawMirrorRequest.java   |    8 +-
 .../p2/artifact/repository/SignatureVerifier.java  |    2 +-
 .../p2/artifact/repository/messages.properties     |    5 +-
 .../p2/artifact/repository/simple/BlobStore.java   |    2 +-
 .../p2/artifact/repository/simple/DownloadJob.java |    2 +-
 .../p2/artifact/repository/simple/Mapper.java      |    2 +-
 .../simple/SimpleArtifactDescriptor.java           |    2 +-
 .../simple/SimpleArtifactRepository.java           |  590 ++-
 .../simple/SimpleArtifactRepositoryFactory.java    |   13 +-
 .../simple/SimpleArtifactRepositoryIO.java         |   85 +-
 .../repository/processing/ProcessingStep.java      |    2 +-
 .../processing/ProcessingStepHandler.java          |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    5 +-
 .../META-INF/MANIFEST.MF                           |    7 +-
 .../build.properties                               |    2 +-
 .../plugins/org.eclipse.equinox.p2.console/pom.xml |    2 +-
 .../equinox/internal/p2/console/Activator.java     |   18 +-
 .../equinox/internal/p2/console/Messages.java      |   51 +
 .../internal/p2/console/ProvCommandProvider.java   |  227 +-
 .../internal/p2/console/ProvisioningHelper.java    |    6 +-
 .../internal/p2/console/messages.properties        |   35 +
 .../plugins/org.eclipse.equinox.p2.core/.options   |    5 +-
 .../META-INF/MANIFEST.MF                           |   15 +-
 .../org.eclipse.equinox.p2.core/build.properties   |    2 +-
 .../plugins/org.eclipse.equinox.p2.core/pom.xml    |    2 +-
 .../equinox/internal/p2/core/Activator.java        |   18 +-
 .../equinox/internal/p2/core/AgentLocation.java    |    2 +-
 .../internal/p2/core/DefaultAgentProvider.java     |    4 +-
 .../internal/p2/core/ProvisioningAgent.java        |   33 +-
 .../internal/p2/core/ProvisioningEventBus.java     |   16 +-
 .../internal/p2/core/helpers/FileUtils.java        |    2 +-
 .../p2/core/helpers/OrderedProperties.java         |    2 +-
 .../internal/p2/core/helpers/ServiceHelper.java    |   43 +-
 .../internal/p2/core/helpers/StringHelper.java     |    2 +-
 .../equinox/internal/p2/core/helpers/TarFile.java  |    2 +-
 .../equinox/internal/p2/core/helpers/Tracing.java  |    6 +-
 .../p2/core/eventbus/IProvisioningEventBus.java    |    4 +-
 .../eclipse/equinox/p2/core/IAgentLocation.java    |    2 +-
 .../src/org/eclipse/equinox/p2/core/IPool.java     |   36 +
 .../p2/core/IProvisioningAgentProvider.java        |    2 +-
 .../equinox/p2/core/ProvisionException.java        |   11 +-
 .../org/eclipse/equinox/p2/core/StrongPool.java    |   44 +
 .../org/eclipse/equinox/p2/core/UIServices.java    |    2 +-
 .../src/org/eclipse/equinox/p2/core/WeakPool.java  |   47 +
 .../equinox/p2/core/spi/IAgentServiceFactory.java  |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    7 +-
 .../META-INF/MANIFEST.MF                           |    7 +-
 .../build.properties                               |    2 +-
 .../org.eclipse.equinox.p2.director.app/plugin.xml |    5 -
 .../org.eclipse.equinox.p2.director.app/pom.xml    |    2 +-
 .../internal/p2/director/app/Application.java      |  660 --
 .../p2/director/app/DirectorApplication.java       |  313 +-
 .../equinox/internal/p2/director/app/ILog.java     |   10 +
 .../equinox/internal/p2/director/app/Messages.java |   13 +-
 .../internal/p2/director/app/PrettyQuery.java      |   43 +
 .../internal/p2/director/app/messages.properties   |   12 +-
 .../META-INF/MANIFEST.MF                           |   24 +-
 .../build.properties                               |    2 +-
 .../org.eclipse.equinox.p2.director/pom.xml        |    2 +-
 .../internal/p2/director/ApplicablePatchQuery.java |    2 +-
 .../internal/p2/director/AttachmentHelper.java     |    2 +-
 .../equinox/internal/p2/director/Explanation.java  |    2 +-
 .../equinox/internal/p2/director/Messages.java     |    2 +-
 .../internal/p2/director/OperationGenerator.java   |    2 +-
 .../internal/p2/director/PermissiveSlicer.java     |    2 +-
 .../internal/p2/director/PlannerComponent.java     |    2 +-
 .../internal/p2/director/ProfileChangeRequest.java |  279 +
 .../equinox/internal/p2/director/Projector.java    |   42 +-
 .../internal/p2/director/QueryableArray.java       |    2 +-
 .../internal/p2/director/SimpleDirector.java       |   11 +-
 .../internal/p2/director/SimplePlanner.java        |   73 +-
 .../internal/p2/director/messages.properties       |    2 +-
 .../equinox/internal/p2/rollback/FormerState.java  |    7 +-
 .../provisional/p2/director/IDirector.java         |    5 +-
 .../p2/director/PlanExecutionHelper.java           |    2 +-
 .../provisional/p2/director/PlanVerifier.java      |   25 -
 .../provisional/p2/director/PlannerStatus.java     |   10 +
 .../p2/director/ProfileChangeRequest.java          |  281 -
 .../provisional/p2/director/RequestStatus.java     |    2 +-
 .../equinox/p2/planner/ProfileInclusionRules.java  |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |    2 +-
 .../pom.xml                                        |    2 +-
 .../provisional/p2/directorywatcher/Activator.java |    2 +-
 .../CachingArtifactRepository.java                 |  153 +-
 .../p2/directorywatcher/DirectoryWatcher.java      |    2 +-
 .../p2/directorywatcher/EntryAdvice.java           |    2 +-
 .../p2/directorywatcher/RepositoryListener.java    |   28 +-
 .../META-INF/MANIFEST.MF                           |    3 +-
 .../build.properties                               |    2 +-
 .../plugin.properties                              |    2 +-
 .../pom.xml                                        |    2 +-
 .../p2/discovery/compatibility/Activator.java      |    4 +-
 .../compatibility/BundleDiscoverySource.java       |    2 +-
 .../compatibility/BundleDiscoveryStrategy.java     |    2 +-
 .../ConnectorDiscoveryExtensionReader.java         |    2 +-
 .../p2/discovery/compatibility/Directory.java      |    2 +-
 .../discovery/compatibility/DirectoryParser.java   |    2 +-
 .../compatibility/DiscoveryRegistryStrategy.java   |    2 +-
 .../compatibility/JarDiscoverySource.java          |    2 +-
 .../p2/discovery/compatibility/Messages.java       |    2 +-
 .../RemoteBundleDiscoveryStrategy.java             |    2 +-
 .../p2/discovery/compatibility/SiteVerifier.java   |   12 +-
 .../p2/discovery/compatibility/messages.properties |    2 +-
 .../discovery/compatibility/util/CacheManager.java |   10 +-
 .../compatibility/util/DefaultSaxErrorHandler.java |    2 +-
 .../compatibility/util/IOWithCauseException.java   |    2 +-
 .../compatibility/util/TransportUtil.java          |    4 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |    2 +-
 .../plugin.properties                              |    2 +-
 .../org.eclipse.equinox.p2.discovery/pom.xml       |    2 +-
 .../p2/discovery/AbstractDiscoveryStrategy.java    |    2 +-
 .../equinox/internal/p2/discovery/Catalog.java     |    4 +-
 .../internal/p2/discovery/DiscoveryCore.java       |    2 +-
 .../equinox/internal/p2/discovery/Messages.java    |    2 +-
 .../equinox/internal/p2/discovery/Policy.java      |    2 +-
 .../internal/p2/discovery/messages.properties      |    2 +-
 .../p2/discovery/model/CatalogCategory.java        |    2 +-
 .../internal/p2/discovery/model/CatalogItem.java   |    2 +-
 .../internal/p2/discovery/model/Certification.java |    2 +-
 .../internal/p2/discovery/model/FeatureFilter.java |    2 +-
 .../equinox/internal/p2/discovery/model/Group.java |    2 +-
 .../equinox/internal/p2/discovery/model/Icon.java  |    2 +-
 .../internal/p2/discovery/model/Messages.java      |    2 +-
 .../internal/p2/discovery/model/Overview.java      |    2 +-
 .../p2/discovery/model/ValidationException.java    |    2 +-
 .../p2/discovery/model/messages.properties         |    2 +-
 .../discovery/util/CatalogCategoryComparator.java  |    2 +-
 .../p2/discovery/util/CatalogItemComparator.java   |    2 +-
 .../META-INF/MANIFEST.MF                           |   21 +-
 .../org.eclipse.equinox.p2.engine/build.properties |    2 +-
 .../plugins/org.eclipse.equinox.p2.engine/pom.xml  |    2 +-
 .../equinox/internal/p2/engine/ActionManager.java  |    2 +-
 .../internal/p2/engine/BeginOperationEvent.java    |    2 +-
 .../internal/p2/engine/CommitOperationEvent.java   |    2 +-
 .../equinox/internal/p2/engine/DebugHelper.java    |    2 +-
 .../eclipse/equinox/internal/p2/engine/Engine.java |    2 +
 .../internal/p2/engine/EngineActivator.java        |    2 +-
 .../equinox/internal/p2/engine/EngineSession.java  |    2 +-
 .../p2/engine/ISurrogateProfileHandler.java        |    2 +-
 .../internal/p2/engine/InstallableUnitEvent.java   |    2 +-
 .../internal/p2/engine/InstallableUnitOperand.java |    2 +-
 .../internal/p2/engine/InstallableUnitPhase.java   |    2 +-
 .../p2/engine/InstallableUnitPropertyOperand.java  |    2 +-
 .../internal/p2/engine/InstructionParser.java      |    2 +-
 .../equinox/internal/p2/engine/Messages.java       |    5 +-
 .../p2/engine/MissingActionsException.java         |    2 +-
 .../equinox/internal/p2/engine/Operand.java        |    2 +-
 .../p2/engine/ParameterizedProvisioningAction.java |    2 +-
 .../eclipse/equinox/internal/p2/engine/Phase.java  |    2 +-
 .../equinox/internal/p2/engine/PhaseSet.java       |    2 +-
 .../p2/engine/ProfileMetadataRepository.java       |    7 +-
 .../engine/ProfileMetadataRepositoryFactory.java   |    2 +-
 .../equinox/internal/p2/engine/ProfileParser.java  |    2 +-
 .../internal/p2/engine/ProfilePreferences.java     |   16 +-
 .../p2/engine/ProfileRegistryComponent.java        |    2 +-
 .../equinox/internal/p2/engine/ProfileWriter.java  |    2 +-
 .../internal/p2/engine/ProfileXMLConstants.java    |    2 +-
 .../internal/p2/engine/PropertyOperand.java        |    2 +-
 .../internal/p2/engine/ProvisioningPlan.java       |    2 +-
 .../internal/p2/engine/RollbackOperationEvent.java |    2 +-
 .../internal/p2/engine/SimpleProfileRegistry.java  |  317 +-
 .../internal/p2/engine/TouchpointManager.java      |    2 +-
 .../internal/p2/engine/TransactionEvent.java       |    2 +-
 .../equinox/internal/p2/engine/messages.properties |    5 +-
 .../p2/engine/phases/CertificateChecker.java       |    6 +-
 .../internal/p2/engine/phases/CheckTrust.java      |    2 +-
 .../equinox/internal/p2/engine/phases/Collect.java |    2 +-
 .../internal/p2/engine/phases/Configure.java       |    2 +-
 .../equinox/internal/p2/engine/phases/Install.java |    2 +-
 .../internal/p2/engine/phases/Property.java        |    2 +-
 .../equinox/internal/p2/engine/phases/Sizing.java  |    2 +-
 .../internal/p2/engine/phases/Unconfigure.java     |    2 +-
 .../internal/p2/engine/phases/Uninstall.java       |    2 +-
 .../src/org/eclipse/equinox/p2/engine/IEngine.java |    2 +-
 .../org/eclipse/equinox/p2/engine/IPhaseSet.java   |    2 +-
 .../org/eclipse/equinox/p2/engine/IProfile.java    |   19 +-
 .../equinox/p2/engine/IProfileRegistry.java        |   86 +-
 .../eclipse/equinox/p2/engine/PhaseSetFactory.java |    2 +-
 .../equinox/p2/engine/ProvisioningContext.java     |   20 +-
 .../org/eclipse/equinox/p2/engine/spi/Memento.java |    3 +-
 .../equinox/p2/engine/spi/ProvisioningAction.java  |    2 +-
 .../eclipse/equinox/p2/engine/spi/Touchpoint.java  |   14 +-
 .../META-INF/MANIFEST.MF                           |    7 +-
 .../build.properties                               |    2 +-
 .../plugin.properties                              |    2 +-
 .../pom.xml                                        |    2 +-
 .../internal/p2/extensionlocation/Activator.java   |    6 +-
 .../BundlePoolFilteredListener.java                |    2 +-
 .../ExtensionLocationArtifactRepository.java       |   72 +-
 ...ExtensionLocationArtifactRepositoryFactory.java |    2 +-
 .../ExtensionLocationMetadataRepository.java       |   29 +-
 ...ExtensionLocationMetadataRepositoryFactory.java |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../build.properties                               |   10 +
 .../plugin.properties                              |    2 +-
 .../pom.xml                                        |    2 +-
 .../internal/p2/garbagecollector/Application.java  |    4 +-
 .../internal/p2/garbagecollector/GCActivator.java  |   10 +-
 .../p2/garbagecollector/GarbageCollector.java      |    2 +-
 .../internal/p2/garbagecollector/MarkSet.java      |    2 +-
 .../p2/garbagecollector/MarkSetProvider.java       |    2 +-
 .../META-INF/MANIFEST.MF                           |    7 +-
 .../build.properties                               |    2 +-
 .../installer.product                              |   31 +-
 .../installer.properties                           |   10 +
 .../org.eclipse.equinox.p2.installer/pom.xml       |    2 +-
 .../internal/p2/installer/InstallApplication.java  |    2 +-
 .../p2/installer/InstallDescriptionParser.java     |    6 +-
 .../installer/InstallUpdateProductOperation.java   |    9 +-
 .../equinox/internal/p2/installer/Messages.java    |    2 +-
 .../internal/p2/installer/messages.properties      |    2 +-
 .../internal/p2/installer/ui/InstallDialog.java    |    2 +-
 .../internal/p2/installer/ui/ProxiesDialog.java    |    2 +-
 .../p2/installer/InstallDescription.java           |    2 +-
 .../equinox/internal/p2/jarprocessor/PackStep.java |    2 +-
 .../equinox/internal/p2/jarprocessor/Utils.java    |    2 +-
 .../p2/jarprocessor/verifier/Verifier.java         |    2 +-
 .../p2/jarprocessor/verifier/VerifyStep.java       |    2 +-
 .../equinox/p2/jarprocessor/JarProcessor.java      |    2 +-
 .../p2/jarprocessor/ant/JarProcessorTask.java      |    2 +-
 .../.classpath                                     |    8 -
 .../Build Metadata Generator Ant Tasks.launch      |   20 -
 .../.project                                       |   44 -
 .../.settings/org.eclipse.jdt.core.prefs           |  353 -
 .../.settings/org.eclipse.jdt.ui.prefs             |   60 -
 .../CDC-1.0_Foundation-1.0.profile                 |   24 -
 .../CDC-1.1_Foundation-1.1.profile                 |   30 -
 .../J2SE-1.2.profile                               |   47 -
 .../J2SE-1.3.profile                               |   68 -
 .../J2SE-1.4.profile                               |  129 -
 .../J2SE-1.5.profile                               |  157 -
 .../JRE-1.1.profile                                |   22 -
 .../JavaSE-1.6.profile                             |  194 -
 .../META-INF/MANIFEST.MF                           |   44 -
 .../Metadata Generator Plugins and Features.launch |   22 -
 .../Metadata Generator SDK.launch                  |   24 -
 .../Metadata Generator Update Site.launch          |   23 -
 .../OSGi_Minimum-1.0.profile                       |   22 -
 .../OSGi_Minimum-1.1.profile                       |   23 -
 .../OSGi_Minimum-1.2.profile                       |   24 -
 .../build.properties                               |   33 -
 .../config.ini                                     |   57 -
 .../generator.product                              |   30 -
 .../p2-izer update site.launch                     |   23 -
 .../plugin.properties                              |   12 -
 .../plugin.xml                                     |   24 -
 .../pom.xml                                        |   14 -
 .../scripts/buildExtraJAR.xml                      |   36 -
 .../internal/p2/metadata/generator/Activator.java  |   32 -
 .../generator/EclipseGeneratorApplication.java     |  422 --
 .../p2/metadata/generator/LocalizationHelper.java  |  200 -
 .../internal/p2/metadata/generator/Messages.java   |   34 -
 .../p2/metadata/generator/ProductQuery.java        |  133 -
 .../generator/features/DefaultSiteParser.java      |  731 --
 .../metadata/generator/features/FeatureParser.java |  363 -
 .../p2/metadata/generator/features/Messages.java   |   41 -
 .../metadata/generator/features/ProductFile.java   |  514 --
 .../metadata/generator/features/SiteCategory.java  |  146 -
 .../metadata/generator/features/SiteFeature.java   |  245 -
 .../p2/metadata/generator/features/SiteModel.java  |  197 -
 .../generator/features/messages.properties         |   28 -
 .../p2/metadata/generator/messages.properties      |   22 -
 .../generator/BundleDescriptionFactory.java        |  180 -
 .../EclipseInstallGeneratorInfoProvider.java       |  538 --
 .../provisional/p2/metadata/generator/Feature.java |  278 -
 .../p2/metadata/generator/FeatureEntry.java        |  179 -
 .../p2/metadata/generator/Generator.java           | 1402 ----
 .../p2/metadata/generator/GeneratorBundleInfo.java |  142 -
 .../p2/metadata/generator/IGeneratorInfo.java      |  117 -
 .../metadata/generator/IncrementalGenerator.java   |   50 -
 .../generator/MetadataGeneratorHelper.java         | 1434 ----
 .../p2/metadata/generator/URLEntry.java            |   41 -
 .../p2/metadata/generator/ant/GeneratorTask.java   |  223 -
 .../p2/metadata/generator/ant/TaskMessages.java    |   24 -
 .../p2/metadata/generator/ant/messages.properties  |   12 -
 .../.externalToolBuilders/New_Builder (1).launch   |   12 +
 .../.project                                       |    2 +-
 .../META-INF/MANIFEST.MF                           |   10 +-
 .../build.properties                               |    2 +-
 .../pom.xml                                        |    2 +-
 .../internal/p2/metadata/repository/Activator.java |    2 +-
 .../repository/CompositeMetadataRepository.java    |   81 +-
 .../CompositeMetadataRepositoryFactory.java        |   12 +-
 .../repository/LocalMetadataRepository.java        |   47 +-
 .../repository/MetadataRepositoryComponent.java    |    2 +-
 .../metadata/repository/MetadataRepositoryIO.java  |   10 +-
 .../repository/MetadataRepositoryManager.java      |    4 +-
 .../SimpleMetadataRepositoryFactory.java           |    2 +-
 .../metadata/repository/URLMetadataRepository.java |    2 +-
 .../p2/metadata/repository/io/MetadataWriter.java  |   10 +-
 .../p2/metadata/repository/io/XMLConstants.java    |    2 +-
 .../p2/metadata/repository/messages.properties     |    2 +-
 .../equinox/p2/metadata/io/IUDeserializer.java     |  137 +
 .../equinox/p2/metadata/io/IUSerializer.java       |   45 +
 .../p2/metadata/repository/ant/AddChildTask.java   |    2 +-
 .../ant/CreateCompositeMetadataRepositoryTask.java |   13 +-
 .../metadata/repository/ant/RemoveChildTask.java   |    2 +-
 .../META-INF/MANIFEST.MF                           |   14 +-
 .../build.properties                               |    2 +-
 .../org.eclipse.equinox.p2.metadata/pom.xml        |    2 +-
 .../equinox/internal/p2/metadata/ArtifactKey.java  |    2 +-
 .../equinox/internal/p2/metadata/BasicVersion.java |    2 +-
 .../internal/p2/metadata/EnumDefinition.java       |  303 +
 .../internal/p2/metadata/IRequiredCapability.java  |    2 +-
 .../equinox/internal/p2/metadata/IUMap.java        |   31 +-
 .../internal/p2/metadata/InstallableUnit.java      |    2 +-
 .../p2/metadata/InstallableUnitFragment.java       |    2 +-
 .../internal/p2/metadata/InstallableUnitPatch.java |    2 +-
 .../equinox/internal/p2/metadata/License.java      |    2 +-
 .../equinox/internal/p2/metadata/Messages.java     |   13 +-
 .../internal/p2/metadata/MetadataActivator.java    |    2 +-
 .../equinox/internal/p2/metadata/OSGiVersion.java  |    2 +-
 .../equinox/internal/p2/metadata/OmniVersion.java  |    2 +-
 .../internal/p2/metadata/ProvidedCapability.java   |    8 +-
 .../internal/p2/metadata/RequiredCapability.java   |    2 +-
 .../internal/p2/metadata/RequirementChange.java    |    2 +-
 .../p2/metadata/ResolvedInstallableUnit.java       |   45 +-
 .../internal/p2/metadata/TouchpointData.java       |    2 +-
 .../p2/metadata/TouchpointInstruction.java         |    2 +-
 .../internal/p2/metadata/TouchpointType.java       |    2 +-
 .../internal/p2/metadata/UpdateDescriptor.java     |    2 +-
 .../internal/p2/metadata/VersionFormat.java        |    6 +-
 .../internal/p2/metadata/VersionFormatParser.java  |  226 +-
 .../internal/p2/metadata/VersionParser.java        |   53 +-
 .../internal/p2/metadata/VersionVector.java        |   11 +-
 .../internal/p2/metadata/expression/All.java       |    2 +-
 .../internal/p2/metadata/expression/Array.java     |    2 +-
 .../p2/metadata/expression/Assignment.java         |    2 +-
 .../internal/p2/metadata/expression/At.java        |    2 +-
 .../internal/p2/metadata/expression/Collect.java   |    2 +-
 .../p2/metadata/expression/CollectionFilter.java   |    2 +-
 .../internal/p2/metadata/expression/Condition.java |    2 +-
 .../p2/metadata/expression/ContextExpression.java  |    2 +-
 .../expression/CurryedLambdaExpression.java        |    2 +-
 .../internal/p2/metadata/expression/Equals.java    |    2 +-
 .../p2/metadata/expression/EvaluationContext.java  |    2 +-
 .../p2/metadata/expression/Everything.java         |    2 +-
 .../internal/p2/metadata/expression/Exists.java    |    2 +-
 .../p2/metadata/expression/Expression.java         |    2 +-
 .../p2/metadata/expression/ExpressionFactory.java  |   10 +
 .../p2/metadata/expression/FilterFunction.java     |    2 +-
 .../internal/p2/metadata/expression/First.java     |    2 +-
 .../internal/p2/metadata/expression/Flatten.java   |    2 +-
 .../internal/p2/metadata/expression/Function.java  |    2 +-
 .../metadata/expression/IExpressionConstants.java  |    2 +-
 .../metadata/expression/IRepeatableIterator.java   |    2 +-
 .../internal/p2/metadata/expression/Intersect.java |    2 +-
 .../p2/metadata/expression/LDAPFilter.java         |   17 +-
 .../p2/metadata/expression/LambdaExpression.java   |    2 +-
 .../internal/p2/metadata/expression/Latest.java    |    2 +-
 .../internal/p2/metadata/expression/Limit.java     |    2 +-
 .../internal/p2/metadata/expression/Literal.java   |    2 +-
 .../p2/metadata/expression/MatchExpression.java    |    2 +-
 .../internal/p2/metadata/expression/Matches.java   |    9 +-
 .../internal/p2/metadata/expression/Member.java    |    2 +-
 .../p2/metadata/expression/MemberProvider.java     |   16 +-
 .../internal/p2/metadata/expression/Not.java       |    2 +-
 .../internal/p2/metadata/expression/Or.java        |    2 +-
 .../internal/p2/metadata/expression/Parameter.java |    2 +-
 .../internal/p2/metadata/expression/Pipe.java      |    2 +-
 .../p2/metadata/expression/RangeFunction.java      |    2 +-
 .../p2/metadata/expression/RepeatableIterator.java |    2 +-
 .../internal/p2/metadata/expression/Select.java    |    2 +-
 .../p2/metadata/expression/SetFunction.java        |    2 +-
 .../internal/p2/metadata/expression/Traverse.java  |    2 +-
 .../internal/p2/metadata/expression/Unary.java     |    2 +-
 .../metadata/expression/UnaryCollectionFilter.java |    2 +-
 .../internal/p2/metadata/expression/Union.java     |    2 +-
 .../internal/p2/metadata/expression/Unique.java    |    2 +-
 .../internal/p2/metadata/expression/Variable.java  |    2 +-
 .../p2/metadata/expression/VersionFunction.java    |    2 +-
 .../p2/metadata/expression/parser/QLParser.java    |    2 +-
 .../internal/p2/metadata/index/IndexProvider.java  |   11 +
 .../internal/p2/metadata/messages.properties       |    8 +-
 .../internal/p2/metadata/query/UpdateQuery.java    |    2 +-
 .../p2/metadata/IInstallableUnitFragment.java      |    2 +-
 .../equinox/p2/metadata/IInstallableUnitPatch.java |    2 +-
 .../org/eclipse/equinox/p2/metadata/ILicense.java  |    2 +-
 .../equinox/p2/metadata/IProvidedCapability.java   |    2 +-
 .../equinox/p2/metadata/IRequirementChange.java    |    2 +-
 .../equinox/p2/metadata/ITouchpointData.java       |    2 +-
 .../p2/metadata/ITouchpointInstruction.java        |    2 +-
 .../equinox/p2/metadata/ITouchpointType.java       |    2 +-
 .../equinox/p2/metadata/IUpdateDescriptor.java     |    2 +-
 .../equinox/p2/metadata/IVersionFormat.java        |    2 +-
 .../eclipse/equinox/p2/metadata/IVersionedId.java  |    2 +-
 .../equinox/p2/metadata/MetadataFactory.java       |    8 +
 .../org/eclipse/equinox/p2/metadata/Version.java   |    2 +-
 .../p2/metadata/VersionFormatException.java        |    2 +-
 .../eclipse/equinox/p2/metadata/VersionRange.java  |    2 +-
 .../p2/metadata/expression/IContextExpression.java |    2 +-
 .../org/eclipse/equinox/p2/query/IQueryResult.java |    2 +-
 .../.settings/.api_filters                         |   11 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |    2 +-
 .../plugin.properties                              |    4 +-
 .../org.eclipse.equinox.p2.operations/pom.xml      |    2 +-
 .../equinox/internal/p2/operations/Activator.java  |    2 +-
 .../internal/p2/operations/IStatusCodes.java       |    2 +-
 .../equinox/internal/p2/operations/Messages.java   |    5 +-
 .../internal/p2/operations/PlanAnalyzer.java       |    5 +-
 .../p2/operations/PlannerResolutionJob.java        |    4 +-
 .../internal/p2/operations/ResolutionResult.java   |    2 +-
 .../operations/SearchForUpdatesResolutionJob.java  |    2 +-
 .../internal/p2/operations/messages.properties     |    5 +-
 .../equinox/p2/operations/IProfileChangeJob.java   |    2 +-
 .../equinox/p2/operations/InstallOperation.java    |   14 +-
 .../equinox/p2/operations/OperationFactory.java    |  181 +
 .../p2/operations/ProfileChangeOperation.java      |   15 +-
 .../p2/operations/ProfileModificationJob.java      |   20 +-
 .../equinox/p2/operations/ProvisioningJob.java     |    2 +-
 .../equinox/p2/operations/RepositoryTracker.java   |   24 +-
 .../p2/operations/SynchronizeOperation.java        |   72 +
 .../equinox/p2/operations/UninstallOperation.java  |    5 +-
 .../org/eclipse/equinox/p2/operations/Update.java  |    2 +-
 .../equinox/p2/operations/UpdateOperation.java     |    5 +-
 .../.classpath                                     |    0
 .../.externalToolBuilders/Ant tasks.launch         |   12 +
 .../.project                                       |   38 +
 .../.settings/org.eclipse.jdt.core.prefs           |  364 +
 .../.settings/org.eclipse.jdt.ui.prefs             |   62 +
 .../.settings/org.eclipse.pde.core.prefs           |    0
 .../META-INF/MANIFEST.MF                           |   60 +
 .../about.html                                     |    0
 .../build.properties                               |   26 +
 .../plugin.properties                              |   13 +
 .../plugin.xml                                     |   47 +
 .../pom.xml                                        |   17 +
 .../scripts/buildExtraJAR.xml                      |   36 +
 .../compatibility/GeneratorApplication.java        |  137 +
 .../compatibility/IGeneratorConstants.java         |   54 +
 .../p2/publisher/eclipse/BrandingIron.java         |  656 ++
 .../internal/p2/publisher/eclipse/DataLoader.java  |  130 +
 .../publisher/eclipse/ExecutablesDescriptor.java   |  265 +
 .../publisher/eclipse/FeatureManifestParser.java   |  292 +
 .../p2/publisher/eclipse/FeatureParser.java        |  125 +
 .../p2/publisher/eclipse/GeneratorBundleInfo.java  |   73 +
 .../p2/publisher/eclipse/IProductDescriptor.java   |  136 +
 .../internal/p2/publisher/eclipse/ProductFile.java |  885 +++
 .../eclipse/AccumulateConfigDataAction.java        |   45 +
 .../eclipse/ApplicationLauncherAction.java         |  147 +
 .../p2/publisher/eclipse/BundleShapeAdvice.java    |   39 +
 .../p2/publisher/eclipse/BundlesAction.java        |  824 +++
 .../equinox/p2/publisher/eclipse/ConfigAdvice.java |   40 +
 .../p2/publisher/eclipse/ConfigCUsAction.java      |  398 ++
 .../p2/publisher/eclipse/DefaultCUsAction.java     |   70 +
 .../p2/publisher/eclipse/EclipseInstallAction.java |  219 +
 .../publisher/eclipse/EclipsePublisherHelper.java  |   48 +
 .../publisher/eclipse/EquinoxExecutableAction.java |  261 +
 .../publisher/eclipse/EquinoxLauncherCUAction.java |  100 +
 .../equinox/p2/publisher/eclipse/Feature.java      |  362 +
 .../equinox/p2/publisher/eclipse/FeatureEntry.java |  224 +
 .../p2/publisher/eclipse/FeaturesAction.java       |  663 ++
 .../FeaturesAndBundlesPublisherApplication.java    |   82 +
 .../p2/publisher/eclipse/IBrandingAdvice.java      |   40 +
 .../p2/publisher/eclipse/IBundleShapeAdvice.java   |   19 +
 .../p2/publisher/eclipse/IConfigAdvice.java        |   21 +
 .../p2/publisher/eclipse/IExecutableAdvice.java    |   40 +
 .../p2/publisher/eclipse/IPlatformEntry.java       |   22 +
 .../eclipse/InstallPublisherApplication.java       |  101 +
 .../p2/publisher/eclipse/LaunchingAdvice.java      |   43 +
 .../p2/publisher/eclipse/ProductAction.java        |  186 +
 .../p2/publisher/eclipse/ProductFileAdvice.java    |  315 +
 .../eclipse/ProductPublisherApplication.java       |   71 +
 .../equinox/p2/publisher/eclipse/URLEntry.java     |   42 +
 .../build/publisher/BuildPublisherApplication.java |   38 +
 .../build/publisher/FeatureRootAdvice.java         |  127 +
 .../build/publisher/GatherBundleAction.java        |   84 +
 .../build/publisher/GatherFeatureAction.java       |  122 +
 .../build/publisher/GatheringComputer.java         |   69 +
 .../eclipse/pde/internal/publishing/Activator.java |   31 +
 .../eclipse/pde/internal/publishing/Constants.java |   22 +
 .../eclipse/pde/internal/publishing/Messages.java  |   32 +
 .../org/eclipse/pde/internal/publishing/Utils.java |  108 +
 .../pde/internal/publishing/messages.properties    |   22 +
 .../eclipse/pde/internal/swt/tools/IconExe.java    | 3351 +++++++++
 .../p2/publisher/ant/AbstractPublishTask.java      |  214 +
 .../ant/FeaturesAndBundlesPublisherTask.java       |   85 +
 .../p2/publisher/ant/ProductPublisherTask.java     |  138 +
 .../internal/p2/publisher/ant/PublisherTask.java   |  182 +
 .../internal/p2/publisher/ant/TaskMessages.java    |   26 +
 .../internal/p2/publisher/ant/messages.properties  |   14 +
 .../org.eclipse.equinox.p2.publisher/.classpath    |    1 -
 .../Build Metadata Generator Ant Tasks.launch      |   20 -
 .../Build Publisher Ant Tasks.launch               |   20 -
 .../org.eclipse.equinox.p2.publisher/.project      |   10 -
 .../META-INF/MANIFEST.MF                           |   39 +-
 .../build.properties                               |    8 +-
 .../plugin.properties                              |    2 +-
 .../org.eclipse.equinox.p2.publisher/plugin.xml    |   47 -
 .../org.eclipse.equinox.p2.publisher/pom.xml       |    2 +-
 .../scripts/buildExtraJAR.xml                      |   36 -
 .../equinox/internal/p2/publisher/Activator.java   |    4 +-
 .../internal/p2/publisher/FileSetDescriptor.java   |    2 +-
 .../equinox/internal/p2/publisher/Messages.java    |    5 +-
 .../internal/p2/publisher/QuotedTokenizer.java     |    2 +-
 .../compatibility/GeneratorApplication.java        |  137 -
 .../compatibility/IGeneratorConstants.java         |   54 -
 .../p2/publisher/eclipse/BrandingIron.java         |  544 --
 .../internal/p2/publisher/eclipse/DataLoader.java  |  130 -
 .../publisher/eclipse/ExecutablesDescriptor.java   |  265 -
 .../publisher/eclipse/FeatureManifestParser.java   |  269 -
 .../p2/publisher/eclipse/FeatureParser.java        |   98 -
 .../p2/publisher/eclipse/GeneratorBundleInfo.java  |   73 -
 .../p2/publisher/eclipse/IProductDescriptor.java   |  131 -
 .../internal/p2/publisher/eclipse/ProductFile.java |  760 --
 .../internal/p2/publisher/messages.properties      |    7 +-
 .../equinox/internal/p2/swt/tools/IconExe.java     | 3339 ---------
 .../equinox/p2/publisher/AbstractAdvice.java       |    2 +-
 .../p2/publisher/AbstractPublisherAction.java      |   23 +-
 .../p2/publisher/AbstractPublisherApplication.java |   28 +-
 .../equinox/p2/publisher/AdviceFileAdvice.java     |  183 +
 .../equinox/p2/publisher/AdviceFileParser.java     |  592 ++
 .../equinox/p2/publisher/IPublisherAdvice.java     |    2 +-
 .../equinox/p2/publisher/IPublisherInfo.java       |    2 +-
 .../equinox/p2/publisher/IPublisherResult.java     |    2 +-
 .../equinox/p2/publisher/PublisherInfo.java        |    2 +-
 .../actions/IAdditionalInstallableUnitAdvice.java  |    2 +-
 .../p2/publisher/actions/ICapabilityAdvice.java    |    2 +-
 .../p2/publisher/actions/IFilterAdvice.java        |    2 +-
 .../p2/publisher/actions/ILicenseAdvice.java       |    2 +-
 .../p2/publisher/actions/IPropertyAdvice.java      |    2 +-
 .../p2/publisher/actions/IRootIUAdvice.java        |    2 +-
 .../p2/publisher/actions/ITouchpointAdvice.java    |    2 +-
 .../publisher/actions/IUpdateDescriptorAdvice.java |   23 +
 .../p2/publisher/actions/IVersionAdvice.java       |    2 +-
 .../equinox/p2/publisher/actions/JREAction.java    |    4 +-
 .../p2/publisher/actions/MergeResultsAction.java   |    2 +-
 .../publisher/actions/QueryableFilterAdvice.java   |    2 +-
 .../p2/publisher/actions/RootFilesAction.java      |    4 +-
 .../equinox/p2/publisher/actions/RootIUAction.java |    7 +-
 .../equinox/p2/publisher/actions/RootIUAdvice.java |    2 +-
 .../actions/RootIUResultFilterAdvice.java          |    2 +-
 .../p2/publisher/actions/VersionAdvice.java        |    2 +-
 .../eclipse/AccumulateConfigDataAction.java        |   45 -
 .../p2/publisher/eclipse/AdviceFileAdvice.java     |  179 -
 .../p2/publisher/eclipse/AdviceFileParser.java     |  557 --
 .../eclipse/ApplicationLauncherAction.java         |  149 -
 .../p2/publisher/eclipse/BundleShapeAdvice.java    |   39 -
 .../p2/publisher/eclipse/BundlesAction.java        |  818 ---
 .../equinox/p2/publisher/eclipse/ConfigAdvice.java |   40 -
 .../p2/publisher/eclipse/ConfigCUsAction.java      |  398 --
 .../p2/publisher/eclipse/DefaultCUsAction.java     |   70 -
 .../p2/publisher/eclipse/EclipseInstallAction.java |  219 -
 .../publisher/eclipse/EquinoxExecutableAction.java |  258 -
 .../publisher/eclipse/EquinoxLauncherCUAction.java |  100 -
 .../equinox/p2/publisher/eclipse/Feature.java      |  326 -
 .../equinox/p2/publisher/eclipse/FeatureEntry.java |  189 -
 .../p2/publisher/eclipse/FeaturesAction.java       |  654 --
 .../FeaturesAndBundlesPublisherApplication.java    |   82 -
 .../p2/publisher/eclipse/IBrandingAdvice.java      |   40 -
 .../p2/publisher/eclipse/IBundleShapeAdvice.java   |   19 -
 .../p2/publisher/eclipse/IConfigAdvice.java        |   21 -
 .../p2/publisher/eclipse/IExecutableAdvice.java    |   40 -
 .../eclipse/InstallPublisherApplication.java       |  101 -
 .../p2/publisher/eclipse/LaunchingAdvice.java      |   43 -
 .../p2/publisher/eclipse/ProductAction.java        |  187 -
 .../p2/publisher/eclipse/ProductFileAdvice.java    |  315 -
 .../eclipse/ProductPublisherApplication.java       |   70 -
 .../equinox/p2/publisher/eclipse/URLEntry.java     |   42 -
 .../spi/p2/publisher/LocalizationHelper.java       |    2 +-
 .../equinox/spi/p2/publisher/PublisherHelper.java  |   37 +-
 .../p2/publisher/ant/AbstractPublishTask.java      |  215 -
 .../ant/FeaturesAndBundlesPublisherTask.java       |   85 -
 .../p2/publisher/ant/ProductPublisherTask.java     |  138 -
 .../internal/p2/publisher/ant/PublisherTask.java   |  182 -
 .../internal/p2/publisher/ant/TaskMessages.java    |   26 -
 .../internal/p2/publisher/ant/messages.properties  |   14 -
 .../org.eclipse.equinox.p2.ql/META-INF/MANIFEST.MF |    2 +-
 .../org.eclipse.equinox.p2.ql/build.properties     |   12 +-
 .../org.eclipse.equinox.p2.ql/plugin.properties    |   14 +-
 eclipse/plugins/org.eclipse.equinox.p2.ql/pom.xml  |    2 +-
 .../org/eclipse/equinox/p2/ql/IQLExpression.java   |    2 +-
 .../src/org/eclipse/equinox/p2/ql/IQLFactory.java  |    2 +-
 .../Bootstrap.product                              |    1 +
 .../META-INF/MANIFEST.MF                           |    6 +-
 .../build.properties                               |    2 +-
 .../plugin.properties                              |    2 +-
 .../pom.xml                                        |    2 +-
 .../internal/p2/reconciler/dropins/Activator.java  |  116 +-
 .../dropins/DropinsRepositoryListener.java         |   51 +-
 .../p2/reconciler/dropins/ProfileSynchronizer.java |  192 +-
 .../META-INF/MANIFEST.MF                           |    3 +-
 .../build.properties                               |    2 +-
 .../plugin.properties                              |    2 +-
 .../pom.xml                                        |    2 +-
 .../repository/comparator/JarComparator.java       |  155 +-
 .../comparator/MD5ArtifactComparator.java          |    2 +-
 .../repository/comparator/java/Annotation.java     |    2 +-
 .../comparator/java/AnnotationComponent.java       |    2 +-
 .../comparator/java/AnnotationComponentValue.java  |    2 +-
 .../java/AnnotationDefaultAttribute.java           |    2 +-
 .../comparator/java/AttributeNamesConstants.java   |    2 +-
 .../repository/comparator/java/CharOperation.java  |    2 +-
 .../comparator/java/ClassFileAttribute.java        |    2 +-
 .../comparator/java/ClassFileReader.java           |    5 +-
 .../comparator/java/ClassFileStruct.java           |    2 +-
 .../comparator/java/ClassFormatException.java      |    2 +-
 .../repository/comparator/java/CodeAttribute.java  |    2 +-
 .../repository/comparator/java/ConstantPool.java   |    2 +-
 .../comparator/java/ConstantPoolConstant.java      |    2 +-
 .../comparator/java/ConstantPoolEntry.java         |    2 +-
 .../comparator/java/ConstantValueAttribute.java    |    2 +-
 .../comparator/java/DefaultBytecodeVisitor.java    |    2 +-
 .../repository/comparator/java/Disassembler.java   |    2 +-
 .../comparator/java/EnclosingMethodAttribute.java  |    2 +-
 .../comparator/java/ExceptionAttribute.java        |    2 +-
 .../comparator/java/ExceptionTableEntry.java       |    2 +-
 .../repository/comparator/java/FieldInfo.java      |    2 +-
 .../comparator/java/IModifierConstants.java        |    2 +-
 .../comparator/java/IOpcodeMnemonics.java          |    2 +-
 .../comparator/java/InnerClassesAttribute.java     |    2 +-
 .../java/InnerClassesAttributeEntry.java           |    2 +-
 .../repository/comparator/java/Messages.java       |    2 +-
 .../repository/comparator/java/MethodInfo.java     |    2 +-
 .../comparator/java/OpcodeStringValues.java        |    2 +-
 .../comparator/java/ParameterAnnotation.java       |    2 +-
 .../java/RuntimeInvisibleAnnotationsAttribute.java |    2 +-
 ...timeInvisibleParameterAnnotationsAttribute.java |    2 +-
 .../java/RuntimeVisibleAnnotationsAttribute.java   |    2 +-
 ...untimeVisibleParameterAnnotationsAttribute.java |    2 +-
 .../repository/comparator/java/Signature.java      |   15 +-
 .../comparator/java/SignatureAttribute.java        |    2 +-
 .../comparator/java/SourceFileAttribute.java       |    2 +-
 .../repository/comparator/java/TypeConstants.java  |    2 +-
 .../repository/comparator/java/Utility.java        |    2 +-
 .../repository/comparator/java/messages.properties |    2 +-
 .../repository/mirroring/FileMirrorLog.java        |    2 +-
 .../repository/mirroring/IArtifactMirrorLog.java   |    2 +-
 .../internal/repository/mirroring/Mirroring.java   |   11 +-
 .../repository/mirroring/XMLMirrorLog.java         |    2 +-
 .../repository/tools/AbstractApplication.java      |    8 +-
 .../p2/internal/repository/tools/Activator.java    |    2 +-
 .../tools/ArtifactRepositoryValidator.java         |   10 +
 .../tools/CompositeRepositoryApplication.java      |    7 +-
 .../p2/internal/repository/tools/Messages.java     |    2 +-
 .../repository/tools/MirrorApplication.java        |   29 +-
 .../tools/RecreateRepositoryApplication.java       |    6 +-
 .../repository/tools/RepositoryDescriptor.java     |   11 +-
 .../internal/repository/tools/SlicingOptions.java  |   12 +-
 .../tools/analyzer/HostCheckAnalyzer.java          |    5 +-
 .../repository/tools/analyzer/IUCounting.java      |    2 +-
 .../repository/tools/analyzer/LicenseAnalyzer.java |    2 +-
 .../tools/analyzer/UniqueIUAnalyzer.java           |    2 +-
 .../tools/analyzer/UnzipFeatureJarAnalyzer.java    |    2 +-
 .../repository/tools/analyzer/VersionAnalyzer.java |    2 +-
 .../internal/repository/tools/messages.properties  |    2 +-
 .../p2/repository/tools/analyzer/IIUAnalyzer.java  |    2 +-
 .../repository/tools/tasks/AntMirrorLog.java       |    2 +-
 .../tools/tasks/ArtifactDescription.java           |   10 +
 .../tools/tasks/CompositeRepositoryTask.java       |   31 +-
 .../CreateCompositeArtifactRepositoryTask.java     |   13 +-
 .../tools/tasks/DestinationRepository.java         |    4 +
 .../repository/tools/tasks/IUDescription.java      |    2 +-
 .../tools/tasks/MirrorArtifactsTask.java           |    2 +-
 .../repository/tools/tasks/MirrorMetadataTask.java |    2 +-
 .../repository/tools/tasks/MirrorTask.java         |    2 +-
 .../repository/tools/tasks/ProcessRepoTask.java    |    2 +-
 .../repository/tools/tasks/Repo2RunnableTask.java  |    2 +-
 .../repository/tools/tasks/RepositoryFileSet.java  |    2 +-
 .../repository/tools/tasks/RepositoryList.java     |    2 +-
 .../repository/tools/tasks/SlicingOption.java      |    8 +-
 .../repository/tools/tasks/TaskHelper.java         |    2 +-
 .../META-INF/MANIFEST.MF                           |   26 +-
 .../build.properties                               |   10 +
 .../org.eclipse.equinox.p2.repository/pom.xml      |    2 +-
 .../internal/p2/persistence/CompositeParser.java   |   10 +-
 .../p2/persistence/CompositeRepositoryIO.java      |    6 +-
 .../p2/persistence/CompositeRepositoryState.java   |    2 +-
 .../internal/p2/persistence/CompositeWriter.java   |    2 +-
 .../internal/p2/persistence/XMLConstants.java      |    2 +-
 .../equinox/internal/p2/persistence/XMLParser.java |   13 +-
 .../equinox/internal/p2/persistence/XMLWriter.java |    2 +-
 .../equinox/internal/p2/repository/Activator.java  |  137 +-
 .../internal/p2/repository/CacheManager.java       |   32 +-
 .../p2/repository/CacheManagerComponent.java       |    2 +-
 .../internal/p2/repository/Credentials.java        |   34 +-
 .../internal/p2/repository/FileInfoReader.java     |  242 -
 .../equinox/internal/p2/repository/FileReader.java |  502 --
 .../equinox/internal/p2/repository/Messages.java   |    3 +-
 .../internal/p2/repository/ProgressStatistics.java |   15 +-
 .../internal/p2/repository/RepositoryStatus.java   |  154 -
 .../p2/repository/RepositoryStatusHelper.java      |  323 -
 .../p2/repository/RepositoryTransport.java         |  250 -
 .../equinox/internal/p2/repository/Transport.java  |   63 +-
 .../helpers/AbstractRepositoryManager.java         |   33 +-
 .../p2/repository/helpers/DebugHelper.java         |    2 +-
 .../p2/repository/helpers/RepositoryHelper.java    |    2 +-
 .../internal/p2/repository/messages.properties     |    3 +-
 .../eclipse/equinox/p2/repository/IRepository.java |   17 +-
 .../equinox/p2/repository/IRepositoryManager.java  |    4 +-
 .../p2/repository/IRunnableWithProgress.java       |   10 +
 .../repository/artifact/IArtifactDescriptor.java   |    2 +-
 .../repository/artifact/IArtifactRepository.java   |   92 +-
 .../artifact/IArtifactRepositoryManager.java       |    2 +-
 .../artifact/spi/AbstractArtifactRepository.java   |   91 +-
 .../artifact/spi/ArtifactDescriptor.java           |    2 +-
 .../artifact/spi/ArtifactRepositoryFactory.java    |    2 +-
 .../artifact/spi/ProcessingStepDescriptor.java     |    2 +-
 .../repository/metadata/IMetadataRepository.java   |   16 +-
 .../metadata/IMetadataRepositoryManager.java       |    2 +-
 .../metadata/spi/AbstractMetadataRepository.java   |   13 +-
 .../metadata/spi/MetadataRepositoryFactory.java    |    2 +-
 .../p2/repository/spi/AbstractRepository.java      |   15 +-
 .../META-INF/MANIFEST.MF                           |    5 +-
 .../build.properties                               |    2 +-
 .../plugin.xml                                     |   30 +
 .../pom.xml                                        |    2 +-
 .../eclipse/AggregatedBundleRepository.java        |    2 +-
 .../p2/touchpoint/eclipse/DirectorUtil.java        |    8 +-
 .../p2/touchpoint/eclipse/EclipseTouchpoint.java   |    2 +-
 .../p2/touchpoint/eclipse/LazyManipulator.java     |    8 +-
 .../p2/touchpoint/eclipse/PublisherUtil.java       |    3 +-
 .../p2/touchpoint/eclipse/WhatIsRunning.java       |    2 +-
 .../eclipse/actions/ActionConstants.java           |    3 +-
 .../eclipse/actions/AddJVMArgumentAction.java      |    2 +-
 .../eclipse/actions/AddProgramArgumentAction.java  |    2 +-
 .../eclipse/actions/AddProgramPropertyAction.java  |   90 +
 .../eclipse/actions/AddSourceBundleAction.java     |    2 +-
 .../eclipse/actions/CheckTrustAction.java          |    2 +-
 .../p2/touchpoint/eclipse/actions/ChmodAction.java |    2 +-
 .../touchpoint/eclipse/actions/CollectAction.java  |    2 +-
 .../eclipse/actions/InstallFeatureAction.java      |    2 +-
 .../p2/touchpoint/eclipse/actions/LinkAction.java  |    2 +-
 .../eclipse/actions/RemoveJVMArgumentAction.java   |    2 +-
 .../actions/RemoveProgramArgumentAction.java       |    2 +-
 .../actions/RemoveProgramPropertyAction.java       |   73 +
 .../eclipse/actions/RemoveSourceBundleAction.java  |    2 +-
 .../touchpoint/eclipse/actions/SetJvmAction.java   |   61 +
 .../eclipse/actions/SetLauncherNameAction.java     |    2 +-
 .../eclipse/actions/SetProgramPropertyAction.java  |    2 +-
 .../eclipse/actions/UninstallFeatureAction.java    |    2 +-
 .../equinox/internal/p2/update/Configuration.java  |    2 +-
 .../internal/p2/update/ConfigurationCache.java     |    2 +-
 .../internal/p2/update/ConfigurationIO.java        |    2 +-
 .../eclipse/equinox/internal/p2/update/Site.java   |   11 +
 .../equinox/internal/p2/update/XMLWriter.java      |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |    2 +-
 .../pom.xml                                        |    2 +-
 .../p2/touchpoint/natives/BackupStore.java         |   68 +-
 .../p2/touchpoint/natives/NativeTouchpoint.java    |    6 +-
 .../internal/p2/touchpoint/natives/Util.java       |    2 +-
 .../natives/actions/ActionConstants.java           |    2 +-
 .../p2/touchpoint/natives/actions/ChmodAction.java |    2 +-
 .../natives/actions/CleanupcopyAction.java         |    2 +-
 .../natives/actions/CleanupzipAction.java          |    6 +-
 .../touchpoint/natives/actions/CollectAction.java  |    2 +-
 .../p2/touchpoint/natives/actions/CopyAction.java  |    2 +-
 .../p2/touchpoint/natives/actions/LinkAction.java  |    2 +-
 .../p2/touchpoint/natives/actions/MkdirAction.java |    2 +-
 .../touchpoint/natives/actions/RemoveAction.java   |    2 +-
 .../p2/touchpoint/natives/actions/UnzipAction.java |    2 +-
 .../.classpath                                     |    7 +
 .../org.eclipse.equinox.p2.transport.ecf/.project  |   33 +
 .../.settings/org.eclipse.jdt.core.prefs           |    8 +
 .../.settings/org.eclipse.pde.core.prefs           |    4 +
 .../META-INF/MANIFEST.MF                           |   21 +
 .../OSGI-INF/ecfTransport.xml                      |    8 +
 .../about.html                                     |    0
 .../build.properties                               |   19 +
 .../plugin.properties                              |   12 +
 .../org.eclipse.equinox.p2.transport.ecf/pom.xml   |   14 +
 .../internal/p2/transport/ecf/Activator.java       |  169 +
 .../p2/transport/ecf/ECFTransportComponent.java    |   22 +
 .../internal/p2/transport/ecf/FileInfoReader.java  |  247 +
 .../internal/p2/transport/ecf/FileReader.java      |  509 ++
 .../internal/p2/transport/ecf/Messages.java        |   95 +
 .../p2/transport/ecf/RepositoryStatus.java         |  155 +
 .../p2/transport/ecf/RepositoryStatusHelper.java   |  320 +
 .../p2/transport/ecf/RepositoryTransport.java      |  278 +
 .../internal/p2/transport/ecf/messages.properties  |   76 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.equinox.p2.ui.admin.rcp/config.ini |   49 -
 .../plugin.properties                              |    4 +-
 .../org.eclipse.equinox.p2.ui.admin.rcp/pom.xml    |    2 +-
 .../rcp.product                                    |    2 +
 .../ui/admin/rcp/ApplicationActionBarAdvisor.java  |   11 +-
 .../ui/admin/rcp/ApplicationWorkbenchAdvisor.java  |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |    2 +-
 .../org.eclipse.equinox.p2.ui.admin/pom.xml        |    2 +-
 .../internal/p2/ui/admin/AddProfileJob.java        |    2 +-
 .../p2/ui/admin/ArtifactRepositoriesView.java      |    2 +-
 .../p2/ui/admin/ArtifactRepositoryTracker.java     |    7 +-
 .../internal/p2/ui/admin/InstallAction.java        |  121 +
 .../internal/p2/ui/admin/InstallIUDropAdapter.java |  212 +
 .../p2/ui/admin/MetadataRepositoriesView.java      |    5 +-
 .../p2/ui/admin/MetadataRepositoryTracker.java     |    7 +-
 .../internal/p2/ui/admin/ProfileFactory.java       |    2 +-
 .../equinox/internal/p2/ui/admin/ProfilesView.java |   13 +-
 .../internal/p2/ui/admin/ProvAdminUIActivator.java |    8 +-
 .../internal/p2/ui/admin/ProvAdminUIMessages.java  |    3 +-
 .../equinox/internal/p2/ui/admin/ProvView.java     |   10 +-
 .../internal/p2/ui/admin/RemoveProfilesJob.java    |    2 +-
 .../internal/p2/ui/admin/RepositoriesView.java     |    8 +-
 .../admin/dialogs/AddArtifactRepositoryDialog.java |    2 +-
 .../admin/dialogs/AddMetadataRepositoryDialog.java |    2 +-
 .../p2/ui/admin/dialogs/AddProfileDialog.java      |    2 +-
 .../internal/p2/ui/admin/dialogs/IUGroup.java      |    2 +-
 .../p2/ui/admin/dialogs/IUImplementationGroup.java |    2 +-
 .../dialogs/IUImplementationPropertyPage.java      |    2 +-
 .../ui/admin/dialogs/IUProfilePropertiesGroup.java |    2 +-
 .../p2/ui/admin/dialogs/IUPropertiesGroup.java     |    2 +-
 .../ui/admin/dialogs/InstalledIUPropertyPage.java  |    2 +-
 .../internal/p2/ui/admin/dialogs/ProfileGroup.java |    5 +-
 .../p2/ui/admin/dialogs/ProfilePropertyPage.java   |    2 +-
 .../RepositoryImplementationPropertyPage.java      |    2 +-
 .../internal/p2/ui/admin/messages.properties       |    3 +-
 .../build.properties                               |    2 +-
 .../plugin.properties                              |    2 +-
 .../internal/p2/ui/discovery/DiscoveryImages.java  |    2 +-
 .../internal/p2/ui/discovery/DiscoveryUi.java      |    2 +-
 .../p2/ui/discovery/commands/Messages.java         |    2 +-
 .../p2/ui/discovery/commands/messages.properties   |   10 +
 .../operations/DiscoveryInstallOperation.java      |    2 +-
 .../p2/ui/discovery/util/CommonColors.java         |    2 +-
 .../p2/ui/discovery/util/ControlListItem.java      |    2 +-
 .../p2/ui/discovery/util/ControlListViewer.java    |    2 +-
 .../p2/ui/discovery/util/FilteredViewer.java       |   10 +-
 .../p2/ui/discovery/util/GradientToolTip.java      |    2 +-
 .../internal/p2/ui/discovery/util/Messages.java    |    2 +-
 .../p2/ui/discovery/util/PatternFilter.java        |    2 +-
 .../discovery/util/SelectionProviderAdapter.java   |    2 +-
 .../p2/ui/discovery/util/WorkbenchUtil.java        |    2 +-
 .../p2/ui/discovery/util/messages.properties       |    2 +-
 .../p2/ui/discovery/wizards/CatalogPage.java       |    2 +-
 .../p2/ui/discovery/wizards/CatalogViewer.java     |    2 +-
 .../p2/ui/discovery/wizards/DiscoveryWizard.java   |    2 +-
 .../internal/p2/ui/discovery/wizards/Messages.java |    2 +-
 .../p2/ui/discovery/wizards/OverviewToolTip.java   |    2 +-
 .../p2/ui/discovery/wizards/messages.properties    |    2 +-
 .../.classpath                                     |    0
 .../.project                                       |   39 +
 .../.settings/org.eclipse.jdt.core.prefs           |    0
 .../.settings/org.eclipse.jdt.ui.prefs             |    0
 .../.settings/org.eclipse.pde.core.prefs           |    0
 .../META-INF/MANIFEST.MF                           |   39 +
 .../OSGI-INF/importexport.xml                      |    8 +
 .../P2 Replication.launch                          |  429 ++
 .../about.html                                     |    0
 .../build.properties                               |   21 +
 .../icons}/install_wiz.gif                         |  Bin 3550 -> 3550 bytes
 .../plugin.properties                              |   19 +
 .../plugin.xml                                     |   49 +
 .../org.eclipse.equinox.p2.ui.importexport/pom.xml |   14 +
 .../equinox/internal/p2/importexport/IUDetail.java |   57 +
 .../internal/p2/importexport/P2ImportExport.java   |   32 +
 .../importexport/VersionIncompatibleException.java |   24 +
 .../p2/importexport/internal/Constants.java        |   15 +
 .../p2/importexport/internal/ImportExportImpl.java |  139 +
 .../p2/importexport/internal/Messages.java         |   68 +
 .../p2/importexport/internal/messages.properties   |   59 +
 .../internal/wizard/AbstractImportPage.java        |  124 +
 .../importexport/internal/wizard/AbstractPage.java |  486 ++
 .../internal/wizard/AbstractWizard.java            |   44 +
 .../importexport/internal/wizard/ExportPage.java   |  147 +
 .../importexport/internal/wizard/ExportWizard.java |   51 +
 .../wizard/ImportFromInstallationPage.java         |  355 +
 .../wizard/ImportFromInstallationWizard.java       |   56 +
 .../importexport/internal/wizard/ImportPage.java   |  348 +
 .../importexport/internal/wizard/ImportWizard.java |  124 +
 .../internal/wizard/StyledErrorDialog.java         |  173 +
 .../p2/importexport/persistence/P2FConstants.java  |   27 +
 .../p2/importexport/persistence/P2FParser.java     |  240 +
 .../p2/importexport/persistence/P2FWriter.java     |   62 +
 .../META-INF/MANIFEST.MF                           |    5 +-
 .../build.properties                               |    2 +-
 .../pom.xml                                        |    2 +-
 .../p2/ui/sdk/scheduler/AutomaticUpdatePlugin.java |    4 +-
 .../p2/ui/sdk/scheduler/AutomaticUpdater.java      |    2 +-
 .../p2/ui/sdk/scheduler/AutomaticUpdatesPopup.java |   20 +-
 .../scheduler/AutomaticUpdatesPreferencePage.java  |    9 +-
 .../p2/ui/sdk/scheduler/PreferenceConstants.java   |    6 +-
 .../p2/ui/sdk/scheduler/PreferenceInitializer.java |   34 +-
 .../.settings/.api_filters                         |    8 +
 .../META-INF/MANIFEST.MF                           |    6 +-
 .../org.eclipse.equinox.p2.ui.sdk/META-INF/p2.inf  |    4 +
 .../org.eclipse.equinox.p2.ui.sdk/build.properties |    2 +-
 .../plugin.properties                              |    2 +-
 .../org.eclipse.equinox.p2.ui.sdk/plugin.xml       |    2 +-
 .../plugins/org.eclipse.equinox.p2.ui.sdk/pom.xml  |   26 +-
 .../internal/p2/ui/sdk/ProvSDKMessages.java        |    1 +
 .../internal/p2/ui/sdk/ProvSDKUIActivator.java     |    4 +-
 .../ui/sdk/RevertProfilePageExtensionFactory.java  |   31 +
 .../equinox/internal/p2/ui/sdk/messages.properties |    1 +
 .../p2/ui/sdk/prefs/PreferenceInitializer.java     |    2 +-
 .../ui/sdk/prefs/ProvisioningPreferencePage.java   |   13 +-
 .../org.eclipse.equinox.p2.ui/META-INF/MANIFEST.MF |   18 +-
 .../OSGI-INF/repositoryTracker_component.xml       |    5 +-
 .../org.eclipse.equinox.p2.ui/build.properties     |    2 +-
 .../icons/obj/iu_disabled_patch_obj.gif            |  Bin 0 -> 1615 bytes
 .../icons/obj/iu_patch_obj.gif}                    |  Bin 609 -> 609 bytes
 .../org.eclipse.equinox.p2.ui/plugin.properties    |    2 +-
 eclipse/plugins/org.eclipse.equinox.p2.ui/pom.xml  |    2 +-
 .../internal/p2/ui/ColocatedRepositoryTracker.java |   21 +-
 .../internal/p2/ui/ElementQueryDescriptor.java     |    2 +-
 .../equinox/internal/p2/ui/ElementWrapper.java     |    2 +-
 .../internal/p2/ui/IProvHelpContextIds.java        |    2 +-
 .../org/eclipse/equinox/internal/p2/ui/ProvUI.java |   27 +-
 .../equinox/internal/p2/ui/ProvUIActivator.java    |   27 +-
 .../internal/p2/ui/ProvUIAdapterFactory.java       |    2 +-
 .../equinox/internal/p2/ui/ProvUIImages.java       |    4 +-
 .../equinox/internal/p2/ui/ProvUIMessages.java     |    7 +-
 .../internal/p2/ui/ProvUIProvisioningListener.java |   11 +-
 .../p2/ui/ProvisioningOperationRunner.java         |    5 +-
 .../equinox/internal/p2/ui/QueryProvider.java      |   42 +-
 .../p2/ui/QueryableArtifactRepositoryManager.java  |    2 +-
 .../p2/ui/QueryableMetadataRepositoryManager.java  |    2 +-
 .../internal/p2/ui/QueryableRepositoryManager.java |    2 +-
 .../internal/p2/ui/RepositoryLocationQuery.java    |    2 +-
 .../p2/ui/RepositoryOperationBeginningEvent.java   |    2 +-
 .../p2/ui/RepositoryOperationEndingEvent.java      |    2 +-
 .../internal/p2/ui/RepositoryTrackerComponent.java |   30 +
 .../internal/p2/ui/UpdateManagerCompatibility.java |    2 +-
 .../internal/p2/ui/ValidationDialogServiceUI.java  |    2 +-
 .../p2/ui/actions/ColocatedRepositoryAction.java   |    2 +-
 .../p2/ui/actions/ExistingIUInProfileAction.java   |    2 +-
 .../internal/p2/ui/actions/InstallAction.java      |   70 -
 .../p2/ui/actions/ProfileModificationAction.java   |   17 +-
 .../p2/ui/actions/PropertyDialogAction.java        |    2 +-
 .../internal/p2/ui/actions/ProvisioningAction.java |    2 +-
 .../internal/p2/ui/actions/RefreshAction.java      |    2 +-
 .../actions/RemoveColocatedRepositoryAction.java   |    2 +-
 .../p2/ui/dialogs/AddRepositoryDialog.java         |    2 +-
 .../p2/ui/dialogs/ApplyProfileChangesDialog.java   |    2 +-
 .../internal/p2/ui/dialogs/AvailableIUGroup.java   |   11 +-
 .../p2/ui/dialogs/AvailableIUPatternFilter.java    |    2 +-
 .../internal/p2/ui/dialogs/AvailableIUsPage.java   |   26 +-
 .../p2/ui/dialogs/ComboAutoCompleteField.java      |    2 +-
 .../p2/ui/dialogs/ContainerCheckedTreeViewer.java  |    2 +-
 .../internal/p2/ui/dialogs/CopyHandler.java        |    2 +-
 .../equinox/internal/p2/ui/dialogs/CopyPopup.java  |    2 +-
 .../equinox/internal/p2/ui/dialogs/CopyUtils.java  |    2 +-
 .../p2/ui/dialogs/DelayedFilterCheckboxTree.java   |    2 +-
 .../ui/dialogs/IRepositorySelectionListener.java   |    2 +-
 .../ui/dialogs/IResolutionErrorReportingPage.java  |    2 +-
 .../internal/p2/ui/dialogs/IUDetailsGroup.java     |    2 +-
 .../p2/ui/dialogs/IUGeneralInfoPropertyPage.java   |    2 +-
 .../p2/ui/dialogs/IULicensePropertyPage.java       |    2 +-
 .../internal/p2/ui/dialogs/IUPropertyPage.java     |    2 +-
 .../internal/p2/ui/dialogs/InstallWizardPage.java  |    2 +-
 .../internal/p2/ui/dialogs/InstalledIUGroup.java   |   12 +-
 .../p2/ui/dialogs/PreselectedIUInstallWizard.java  |    3 +-
 .../p2/ui/dialogs/ProvisioningOperationWizard.java |    8 +-
 .../p2/ui/dialogs/ProvisioningWizardDialog.java    |    2 +-
 .../p2/ui/dialogs/ProvisioningWizardPage.java      |    2 +-
 .../dialogs/RepositoryManipulatorDropTarget.java   |    2 +-
 .../dialogs/RepositoryNameAndLocationDialog.java   |    2 +-
 .../p2/ui/dialogs/RepositorySelectionGroup.java    |   15 +-
 .../p2/ui/dialogs/ResolutionResultsWizardPage.java |   49 +-
 .../p2/ui/dialogs/ResolutionStatusPage.java        |   38 +-
 .../internal/p2/ui/dialogs/SelectableIUsPage.java  |   42 +-
 .../p2/ui/dialogs/SizeComputingWizardPage.java     |    2 +-
 .../internal/p2/ui/dialogs/StructuredIUGroup.java  |   12 +-
 .../internal/p2/ui/dialogs/UninstallWizard.java    |    2 +-
 .../p2/ui/dialogs/UninstallWizardPage.java         |    2 +-
 .../internal/p2/ui/dialogs/UpdateSingleIUPage.java |   15 +
 .../internal/p2/ui/dialogs/UpdateWizard.java       |   27 +-
 .../internal/p2/ui/dialogs/UpdateWizardPage.java   |    2 +-
 .../p2/ui/dialogs/UserValidationDialog.java        |    2 +-
 .../internal/p2/ui/dialogs/WizardWithLicenses.java |    2 +-
 .../equinox/internal/p2/ui/messages.properties     |   11 +-
 .../internal/p2/ui/model/ArtifactElement.java      |    2 +-
 .../internal/p2/ui/model/ArtifactRepositories.java |    2 +-
 .../p2/ui/model/ArtifactRepositoryElement.java     |   11 +-
 .../internal/p2/ui/model/AvailableIUElement.java   |   26 +-
 .../p2/ui/model/AvailableUpdateElement.java        |   40 +-
 .../internal/p2/ui/model/CategoryElement.java      |    2 +-
 .../equinox/internal/p2/ui/model/ElementUtils.java |   14 +-
 .../equinox/internal/p2/ui/model/IIUElement.java   |    2 +-
 .../internal/p2/ui/model/IRepositoryElement.java   |    2 +-
 .../internal/p2/ui/model/IUElementListRoot.java    |    2 +-
 .../internal/p2/ui/model/InstalledIUElement.java   |   10 +-
 .../internal/p2/ui/model/MetadataRepositories.java |    2 +-
 .../p2/ui/model/MetadataRepositoryElement.java     |   25 +-
 .../internal/p2/ui/model/ProfileElement.java       |    2 +-
 .../internal/p2/ui/model/ProfileSnapshots.java     |   56 +-
 .../equinox/internal/p2/ui/model/Profiles.java     |    2 +-
 .../equinox/internal/p2/ui/model/ProvElement.java  |    2 +-
 .../internal/p2/ui/model/QueriedElement.java       |   21 +-
 .../p2/ui/model/QueriedElementWrapper.java         |    5 +-
 .../internal/p2/ui/model/RemoteQueriedElement.java |    2 +-
 .../p2/ui/model/RollbackProfileElement.java        |   20 +-
 .../equinox/internal/p2/ui/model/RootElement.java  |    2 +-
 .../equinox/internal/p2/ui/model/Updates.java      |    2 +-
 .../internal/p2/ui/query/ArtifactKeyWrapper.java   |    2 +-
 .../ui/query/ArtifactRepositoryElementWrapper.java |   16 +-
 .../internal/p2/ui/query/AvailableIUWrapper.java   |   16 +-
 .../p2/ui/query/CategoryElementWrapper.java        |    2 +-
 .../internal/p2/ui/query/IUViewQueryContext.java   |   12 +-
 .../p2/ui/query/InstalledIUElementWrapper.java     |    2 +-
 .../ui/query/MetadataRepositoryElementWrapper.java |   17 +-
 .../p2/ui/query/ProfileElementWrapper.java         |    2 +-
 .../p2/ui/query/QueryableProfileRegistry.java      |    2 +-
 .../internal/p2/ui/query/QueryableUpdates.java     |    2 +-
 .../ui/viewers/DeferredQueryContentProvider.java   |    2 +-
 .../internal/p2/ui/viewers/IUColumnConfig.java     |    7 +-
 .../internal/p2/ui/viewers/IUComparator.java       |    2 +-
 .../p2/ui/viewers/IUDetailsLabelProvider.java      |    5 +-
 .../internal/p2/ui/viewers/IUDragAdapter.java      |    2 +-
 .../p2/ui/viewers/InstallIUDropAdapter.java        |  216 -
 .../p2/ui/viewers/ProvElementComparer.java         |    2 +-
 .../p2/ui/viewers/ProvElementContentProvider.java  |    9 +-
 .../p2/ui/viewers/ProvElementLabelProvider.java    |   15 +-
 .../p2/ui/viewers/RepositoryContentProvider.java   |    2 +-
 .../ui/viewers/RepositoryDetailsLabelProvider.java |    2 +-
 .../StructuredViewerProvisioningListener.java      |    7 +-
 .../equinox/p2/ui/AcceptLicensesWizardPage.java    |   15 +-
 .../src/org/eclipse/equinox/p2/ui/ICopyable.java   |    2 +-
 .../equinox/p2/ui/InstalledSoftwarePage.java       |   33 +-
 .../org/eclipse/equinox/p2/ui/LicenseManager.java  |    2 +-
 .../equinox/p2/ui/LoadMetadataRepositoryJob.java   |   10 +-
 .../src/org/eclipse/equinox/p2/ui/Policy.java      |  119 +-
 .../org/eclipse/equinox/p2/ui/ProvisioningUI.java  |   18 +-
 .../equinox/p2/ui/RepositoryManipulationPage.java  |   12 +-
 .../eclipse/equinox/p2/ui/RevertProfilePage.java   |   95 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../org.eclipse.equinox.p2.updatechecker/pom.xml   |    2 +-
 .../p2/updatechecker/IUpdateChecker.java           |    2 +-
 .../provisional/p2/updatechecker/UpdateEvent.java  |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../plugin.properties                              |    2 +-
 .../org.eclipse.equinox.p2.updatesite/pom.xml      |    2 +-
 .../updatesite/CategoryPublisherApplication.java   |    2 +-
 .../internal/p2/updatesite/CategoryXMLAction.java  |    8 +-
 .../internal/p2/updatesite/DefaultSiteParser.java  |   10 +-
 .../internal/p2/updatesite/DigestParser.java       |    2 +-
 .../p2/updatesite/LocalUpdateSiteAction.java       |    2 +-
 .../equinox/internal/p2/updatesite/Messages.java   |    2 +-
 .../p2/updatesite/RemoteFeaturesAction.java        |    8 +-
 .../p2/updatesite/RemoteUpdateSiteAction.java      |    2 +-
 .../internal/p2/updatesite/SiteCategory.java       |    2 +-
 .../internal/p2/updatesite/SiteFeature.java        |    2 +-
 .../equinox/internal/p2/updatesite/SiteModel.java  |    3 +-
 .../internal/p2/updatesite/SiteXMLAction.java      |   16 +-
 .../equinox/internal/p2/updatesite/UpdateSite.java |   40 +-
 .../updatesite/UpdateSitePublisherApplication.java |    3 +-
 .../artifact/UpdateSiteArtifactRepository.java     |   54 +-
 .../UpdateSiteArtifactRepositoryFactory.java       |    6 +-
 .../internal/p2/updatesite/messages.properties     |    2 +-
 .../metadata/UpdateSiteMetadataRepository.java     |   17 +-
 .../UpdateSiteMetadataRepositoryFactory.java       |    6 +-
 .../org.eclipse.equinox.preferences.jmx/.classpath |    7 -
 .../org.eclipse.equinox.preferences.jmx/.project   |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  309 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../META-INF/MANIFEST.MF                           |   24 -
 .../org.eclipse.equinox.preferences.jmx/about.html |   28 -
 .../build.properties                               |   20 -
 .../icons/kvp.gif                                  |  Bin 617 -> 0 bytes
 .../icons/node.gif                                 |  Bin 216 -> 0 bytes
 .../icons/preferences.gif                          |  Bin 617 -> 0 bytes
 .../org.eclipse.equinox.preferences.jmx/plugin.xml |   16 -
 .../internal/preferences/jmx/Activator.java        |   83 -
 .../equinox/internal/preferences/jmx/KVP.java      |   56 -
 .../preferences/jmx/KVPContributionProvider.java   |  126 -
 .../preferences/jmx/KeyValuePairContribution.java  |  143 -
 .../equinox/internal/preferences/jmx/Messages.java |   40 -
 .../preferences/jmx/PreferenceContribution.java    |  235 -
 .../jmx/PreferenceContributionProvider.java        |  151 -
 .../internal/preferences/jmx/messages.properties   |   21 -
 .../.settings/.api_filters                         |   17 +
 .../META-INF/MANIFEST.MF                           |    5 +-
 .../core/internal/preferences/Activator.java       |    7 +-
 .../preferences/ConfigurationPreferences.java      |    2 +-
 .../internal/preferences/EclipsePreferences.java   |    5 +-
 .../core/internal/preferences/ImmutableMap.java    |    8 +-
 .../internal/preferences/InstancePreferences.java  |    2 +-
 .../preferences/OSGiPreferencesServiceImpl.java    |   37 +-
 .../preferences/OSGiPreferencesServiceManager.java |   14 +-
 .../PreferenceServiceRegistryHelper.java           |    2 +-
 .../internal/preferences/PreferencesService.java   |   28 +-
 .../runtime/preferences/BundleDefaultsScope.java   |   11 +-
 .../runtime/preferences/ConfigurationScope.java    |   11 +-
 .../core/runtime/preferences/DefaultScope.java     |   11 +-
 .../runtime/preferences/IPreferencesService.java   |    2 +-
 .../core/runtime/preferences/InstanceScope.java    |   11 +-
 .../runtime/preferences/PreferenceFilterEntry.java |    2 +-
 .../osgi/service/prefs/BackingStoreException.java  |   14 +-
 .../src/org/osgi/service/prefs/Preferences.java    |  438 +-
 .../org/osgi/service/prefs/PreferencesService.java |    8 +-
 .../plugins/org.eclipse.equinox.region/.classpath  |    7 +
 .../plugins/org.eclipse.equinox.region/.project    |   28 +
 .../.settings/org.eclipse.core.resources.prefs     |    0
 .../.settings/org.eclipse.jdt.core.prefs           |  329 +
 .../.settings/org.eclipse.jdt.ui.prefs             |   61 +
 .../.settings/org.eclipse.pde.core.prefs           |    4 +
 .../META-INF/MANIFEST.MF                           |   17 +
 .../OSGI-INF/l10n/bundle.properties                |   12 +
 .../about.html                                     |    0
 .../org.eclipse.equinox.region/build.properties    |   17 +
 .../internal/region/BundleIdBasedRegion.java       |  260 +
 .../internal/region/EquinoxStateHelper.java        |   73 +
 .../internal/region/RegionLifecycleListener.java   |   42 +
 .../equinox/internal/region/RegionManager.java     |  155 +
 .../internal/region/StandardRegionDigraph.java     |  449 ++
 .../region/StandardRegionDigraphPersistence.java   |  197 +
 .../internal/region/StandardRegionFilter.java      |  149 +
 .../region/StandardRegionFilterBuilder.java        |   83 +
 .../equinox/internal/region/SubgraphTraverser.java |   61 +
 .../region/hook/RegionBundleEventHook.java         |  106 +
 .../internal/region/hook/RegionBundleFindHook.java |   90 +
 .../region/hook/RegionDigraphVisitorBase.java      |  170 +
 .../internal/region/hook/RegionResolverHook.java   |  170 +
 .../region/hook/RegionResolverHookFactory.java     |   43 +
 .../region/hook/RegionServiceEventHook.java        |   61 +
 .../region/hook/RegionServiceFindHook.java         |   85 +
 .../region/management/RegionObjectNameCreator.java |   47 +
 .../management/StandardManageableRegion.java       |   80 +
 .../StandardManageableRegionDigraph.java           |  191 +
 .../src/org/eclipse/equinox/region/Region.java     |  186 +
 .../org/eclipse/equinox/region/RegionDigraph.java  |  219 +
 .../equinox/region/RegionDigraphPersistence.java   |   55 +
 .../equinox/region/RegionDigraphVisitor.java       |   48 +
 .../org/eclipse/equinox/region/RegionFilter.java   |  115 +
 .../equinox/region/RegionFilterBuilder.java        |   49 +
 .../region/management/ManageableRegion.java        |   49 +
 .../region/management/ManageableRegionDigraph.java |   43 +
 .../org.eclipse.equinox.registry.jmx/.classpath    |    7 -
 .../org.eclipse.equinox.registry.jmx/.project      |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  259 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    8 -
 .../META-INF/MANIFEST.MF                           |   16 -
 .../org.eclipse.equinox.registry.jmx/about.html    |   28 -
 .../build.properties                               |   20 -
 .../icons/ext_point.gif                            |  Bin 225 -> 0 bytes
 .../icons/extension.gif                            |  Bin 205 -> 0 bytes
 .../icons/plugin_registry.gif                      |  Bin 597 -> 0 bytes
 .../org.eclipse.equinox.registry.jmx/plugin.xml    |   22 -
 .../equinox/internal/registry/jmx/Activator.java   |   80 -
 .../registry/jmx/ExtensionContribution.java        |  126 -
 .../jmx/ExtensionContributionProvider.java         |  123 -
 .../registry/jmx/ExtensionPointContribution.java   |  114 -
 .../jmx/ExtensionPointContributionProvider.java    |  123 -
 .../jmx/ExtensionRegistryContribution.java         |  111 -
 .../jmx/ExtensionRegistryContributionProvider.java |  123 -
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.equinox.registry/about.html        |    2 +-
 .../core/internal/registry/ExtensionRegistry.java  |    3 +-
 .../core/internal/registry/ReferenceMap.java       |    5 +-
 .../registry/osgi/EclipseBundleListener.java       |   80 +-
 .../registry/osgi/RegistryCommandProvider.java     |   50 +-
 .../spi/ConfigurationElementAttribute.java         |    2 +-
 .../org/eclipse/core/runtime/RegistryFactory.java  |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../security/ui/storage/view/NewNodeDialog.java    |    6 +-
 .../.classpath                                     |    0
 .../.project                                       |   34 +
 .../.settings/org.eclipse.jdt.core.prefs           |    0
 .../META-INF/MANIFEST.MF                           |   11 +
 .../about.html                                     |    0
 .../build.properties                               |   21 +
 .../cpp/ReadMe.txt                                 |   33 +
 .../cpp/jnicrypt.cpp                               |   81 +
 .../cpp/jnicrypt.h                                 |   28 +
 .../cpp/jnicrypt.vcproj                            |  463 ++
 .../fragment.properties                            |   14 +
 .../fragment.xml                                   |   18 +
 .../equinox/internal/security/win32/WinCrypto.java |  128 +
 .../security/win32/nls/WinCryptoMessages.java      |   32 +
 .../security/win32/nls/messages.properties         |   15 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../schema/secureStorage.exsd                      |    2 +-
 .../security/auth/nls/SecAuthMessages.java         |    2 +-
 .../internal/security/auth/nls/messages.properties |    2 +-
 .../security/storage/PasswordProviderSelector.java |    4 +-
 .../security/storage/SecurePreferencesRoot.java    |    2 +-
 .../equinox/security/auth/LoginContextFactory.java |    3 +-
 .../auth/credentials/CredentialsFactory.java       |    3 +-
 .../security/auth/module/ExtensionLoginModule.java |    3 +-
 .../equinox/security/storage/EncodingUtils.java    |    3 +-
 .../security/storage/SecurePreferencesFactory.java |    3 +-
 .../equinox/security/storage/StorageException.java |    3 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |    2 +-
 .../equinox/servletbridge/BridgeServlet.java       |    2 +-
 .../equinox/servletbridge/FrameworkLauncher.java   |    2 +-
 .../build.properties                               |   10 +
 .../SimpleConfiguratorManipulatorImpl.java         |    2 +-
 .../SimpleConfiguratorManipulatorUtils.java        |    2 +-
 ...ple configurator into metadata generator.launch |   30 -
 .../.project                                       |   10 -
 .../provisional/configurator/Configurator.java     |    2 +-
 .../simpleconfigurator/SimpleConfiguratorImpl.java |    2 +-
 .../simpleconfigurator/console/ApplyCommand.java   |    2 +-
 .../console/ConfiguratorCommandProvider.java       |   46 +-
 .../org.eclipse.equinox.supplement/.classpath      |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   16 +-
 .../META-INF/MANIFEST.MF                           |   14 +-
 .../build.properties                               |    9 +-
 .../runtime/internal/adaptor/BasicLocation.java    |    6 +
 .../adaptor/EclipseAdaptorMessages.properties      |    9 +-
 .../internal/adaptor/EclipseAdaptorMsg.java        |   10 +-
 .../runtime/internal/adaptor/LocationHelper.java   |    3 +-
 .../org/eclipse/equinox/log/ExtendedLogEntry.java  |   69 +
 .../equinox/log/ExtendedLogReaderService.java      |   40 +
 .../eclipse/equinox/log/ExtendedLogService.java    |   40 +
 .../src/org/eclipse/equinox/log/LogFilter.java     |   30 +
 .../src/org/eclipse/equinox/log/LogPermission.java |   65 +
 .../equinox/log/LogPermissionCollection.java       |   59 +
 .../src/org/eclipse/equinox/log/Logger.java        |   83 +
 .../equinox/log/SynchronousLogListener.java        |   19 +
 .../org/eclipse/osgi/framework/debug/Debug.java    |   21 +-
 .../osgi/framework/debug/EclipseDebugTrace.java    |    4 +-
 .../framework/debug/FrameworkDebugOptions.java     |   63 +-
 .../framework/eventmgr/CopyOnWriteIdentityMap.java |  652 ++
 .../osgi/framework/eventmgr/EventDispatcher.java   |   49 +
 .../osgi/framework/eventmgr/EventListeners.java    |   90 +
 .../osgi/framework/eventmgr/EventManager.java      |  419 ++
 .../osgi/framework/eventmgr/ListenerQueue.java     |  151 +
 .../eclipse/osgi/framework/eventmgr/package.html   |    0
 .../internal/core/ExternalMessages.properties      |   15 +-
 .../internal/core/FrameworkProperties.java         |   10 +-
 .../eclipse/osgi/framework/internal/core/Msg.java  |   16 +-
 .../osgi/framework/internal/core/Tokenizer.java    |   47 +-
 .../internal/reliablefile/ReliableFile.java        |   20 +-
 .../reliablefile/ReliableFileInputStream.java      |    3 +-
 .../eclipse/osgi/framework/log/FrameworkLog.java   |    4 +-
 .../osgi/framework/log/FrameworkLogEntry.java      |   52 +-
 .../eclipse/osgi/framework/util/SecureAction.java  |  117 +-
 .../eclipse/osgi/service/debug/DebugOptions.java   |    6 +-
 .../service/localization/BundleLocalization.java   |   13 +-
 .../osgi/storagemanager/StorageManager.java        |   15 +-
 .../src/org/eclipse/osgi/util/ManifestElement.java |  104 +-
 .../src/org/eclipse/osgi/util/NLS.java             |   39 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../internal/transforms/TransformedBundleFile.java |   10 +-
 .../META-INF/MANIFEST.MF                           |    6 +-
 .../plugin.properties                              |    1 -
 .../org.eclipse.equinox.util/META-INF/MANIFEST.MF  |    2 +-
 .../eclipse/equinox/internal/util/TracerMap.java   |    2 +-
 .../equinox/internal/util/UtilActivator.java       |    2 +-
 .../equinox/internal/util/event/EventThread.java   |    2 +-
 .../eclipse/equinox/internal/util/event/Queue.java |    2 +-
 .../internal/util/event/SystemListener.java        |    2 +-
 .../equinox/internal/util/hash/HashIntObjNS.java   |    2 +-
 .../equinox/internal/util/hash/HashIntObjS.java    |    2 +-
 .../equinox/internal/util/hash/HashLongObjNS.java  |    2 +-
 .../equinox/internal/util/hash/HashLongObjS.java   |    2 +-
 .../equinox/internal/util/hash/HashObjIntNS.java   |    2 +-
 .../equinox/internal/util/hash/HashObjIntS.java    |    2 +-
 .../equinox/internal/util/hash/HashObjLongNS.java  |    2 +-
 .../equinox/internal/util/hash/HashObjLongS.java   |    2 +-
 .../internal/util/impl/tpt/ServiceFactoryImpl.java |    2 +-
 .../util/impl/tpt/threadpool/Executor.java         |    2 +-
 .../internal/util/impl/tpt/threadpool/Job.java     |    2 +-
 .../impl/tpt/threadpool/ThreadPoolFactoryImpl.java |    2 +-
 .../impl/tpt/threadpool/ThreadPoolManagerImpl.java |    2 +-
 .../internal/util/impl/tpt/timer/TimerFactory.java |    2 +-
 .../internal/util/impl/tpt/timer/TimerImpl.java    |    2 +-
 .../internal/util/impl/tpt/timer/TimerQueue.java   |    2 +-
 .../util/impl/tpt/timer/TimerQueueNode.java        |    2 +-
 .../equinox/internal/util/pool/ObjectCreator.java  |    2 +-
 .../equinox/internal/util/pool/ObjectPool.java     |    2 +-
 .../org/eclipse/equinox/internal/util/ref/Log.java |    2 +-
 .../equinox/internal/util/ref/LogInterface.java    |    2 +-
 .../equinox/internal/util/ref/TimerRef.java        |    2 +-
 .../internal/util/security/PrivilegedAction.java   |    2 +-
 .../internal/util/security/PrivilegedRunner.java   |    4 +-
 .../internal/util/threadpool/ThreadContext.java    |    2 +-
 .../util/threadpool/ThreadPoolFactory.java         |    2 +-
 .../util/threadpool/ThreadPoolManager.java         |    2 +-
 .../eclipse/equinox/internal/util/timer/Timer.java |    2 +-
 .../equinox/internal/util/timer/TimerListener.java |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../weaving/aspectj/AspectJWeavingService.java     |    2 +-
 .../aspectj/AspectJWeavingServiceFactory.java      |    2 +-
 .../weaving/aspectj/AspectJWeavingStarter.java     |    7 +-
 .../aspectj/loadtime/OSGiWeavingAdaptor.java       |    2 +-
 .../aspectj/loadtime/OSGiWeavingContext.java       |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../internal/caching/j9/CachingService.java        |    2 +-
 .../internal/caching/j9/CachingServicePlugin.java  |    4 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../weaving/internal/caching/Activator.java        |    6 +-
 .../internal/caching/CachingServiceFactory.java    |    2 +-
 .../weaving/internal/caching/IBundleConstants.java |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../build.properties                               |   10 +
 .../hookconfigurators.properties                   |   10 +
 .../equinox/service/weaving/CacheEntry.java        |    2 +-
 .../equinox/service/weaving/ICachingService.java   |    2 +-
 .../service/weaving/ICachingServiceFactory.java    |    2 +-
 .../equinox/service/weaving/IWeavingService.java   |    2 +-
 .../service/weaving/IWeavingServiceFactory.java    |    2 +-
 .../eclipse/equinox/weaving/adaptors/Debug.java    |    2 +-
 .../equinox/weaving/adaptors/IWeavingAdaptor.java  |    2 +-
 .../weaving/adaptors/WeavingAdaptorFactory.java    |    2 +-
 .../equinox/weaving/hooks/AbstractWeavingHook.java |    2 +-
 .../weaving/hooks/BaseWeavingBundleFile.java       |    2 +-
 .../weaving/hooks/BundleAdaptorProvider.java       |   10 +
 .../equinox/weaving/hooks/IAdaptorProvider.java    |   10 +
 .../equinox/weaving/hooks/WeavingBundleFile.java   |    2 +-
 .../eclipse/equinox/weaving/hooks/WeavingHook.java |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../equinox/internal/wireadmin/Activator.java      |    2 +-
 .../internal/wireadmin/EventDispatcher.java        |    2 +-
 .../internal/wireadmin/NotificationEvent.java      |    2 +-
 .../equinox/internal/wireadmin/TracerMap.java      |    2 +-
 .../equinox/internal/wireadmin/WireAdminImpl.java  |    2 +-
 .../equinox/internal/wireadmin/WireImpl.java       |   81 +-
 .../equinox/internal/wireadmin/WireProperties.java |    2 +-
 .../org.eclipse.help.base/.settings/.api_filters   |  263 +
 .../.settings/org.eclipse.pde.api.tools.prefs      |   97 +
 .../org.eclipse.help.base/META-INF/MANIFEST.MF     |    8 +-
 .../plugins/org.eclipse.help.base/about.properties |    4 +-
 .../org.eclipse.help.base/plugin.properties        |    6 +-
 eclipse/plugins/org.eclipse.help.base/plugin.xml   |    2 +
 .../plugins/org.eclipse.help.base/preferences.ini  |   11 +-
 .../org.eclipse.help.base/schema/display.exsd      |  113 +
 .../org.eclipse.help.base/schema/scope.exsd        |   35 +-
 .../schema/searchProcessor.exsd                    |  123 +
 .../org/eclipse/help/base/AbstractHelpDisplay.java |   45 +
 .../org/eclipse/help/base/AbstractHelpScope.java   |    2 +-
 .../org/eclipse/help/base/IHelpScopeProducer.java  |   35 +
 .../src/org/eclipse/help/base/IScopeHandle.java    |   35 +
 .../src/org/eclipse/help/base/package.html         |   16 +
 .../help/internal/base/BookmarkManager.java        |    4 +-
 .../help/internal/base/HelpApplication.java        |   11 +-
 .../eclipse/help/internal/base/HelpDisplay.java    |   94 +-
 .../help/internal/base/IHelpBaseConstants.java     |    4 +-
 .../base/remote/RemoteHelpInputStream.java         |   75 +
 .../help/internal/base/remote/RemoteIC.java        |    2 +-
 .../internal/base/remote/RemoteSearchManager.java  |    6 +-
 .../internal/base/remote/RemoteStatusData.java     |  123 +-
 .../help/internal/base/scope/ScopeHandle.java      |    3 +-
 .../help/internal/base/scope/ScopeRegistry.java    |   21 +-
 .../help/internal/base/scope/ScopeUtils.java       |    5 +-
 .../help/internal/base/scope/WorkingSetScope.java  |   41 +-
 .../internal/base/util/TestConnectionUtility.java  |  102 +
 .../help/internal/protocols/HelpURLConnection.java |    7 +-
 .../internal/protocols/HelpURLStreamHandler.java   |    2 +-
 .../eclipse/help/internal/search/Analyzer_en.java  |   19 +-
 .../help/internal/search/LocalSearchManager.java   |   23 +-
 .../help/internal/search/LuceneSearchDocument.java |    6 +-
 .../eclipse/help/internal/search/PluginIndex.java  |   12 +-
 .../eclipse/help/internal/search/QueryBuilder.java |   13 +-
 .../eclipse/help/internal/search/SearchIndex.java  |   79 +-
 .../help/internal/search/SearchManager.java        |  164 +-
 .../eclipse/help/internal/search/SearchResult.java |  116 +
 .../help/internal/search/SearchResults.java        |   22 +-
 .../internal/search/XHTMLSearchParticipant.java    |    3 +
 .../help/internal/search/federated/LocalHelp.java  |   58 +-
 .../help/internal/server/JettyHelpServer.java      |   25 +-
 .../help/internal/standalone/StandaloneHelp.java   |   21 +
 .../help/search/AbstractSearchProcessor.java       |   51 +
 .../src/org/eclipse/help/search/ISearchResult.java |   94 +
 .../help/search/LuceneSearchParticipant.java       |    6 +-
 .../eclipse/help/search/SearchProcessorInfo.java   |   67 +
 .../org/apache/lucene/demo/html/HTMLParser.java    |    5 +-
 .../org.eclipse.help.ui/META-INF/MANIFEST.MF       |    2 +-
 .../src/org/eclipse/help/ui/RootScopePage.java     |  114 +-
 .../help/ui/internal/ContextHelpDialog.java        |    5 +-
 .../eclipse/help/ui/internal/DefaultHelpUI.java    |    4 +-
 .../help/ui/internal/ExecuteCommandAction.java     |    4 +-
 .../eclipse/help/ui/internal/IHelpUIConstants.java |    5 +-
 .../src/org/eclipse/help/ui/internal/Messages.java |    9 +-
 .../eclipse/help/ui/internal/Messages.properties   |   20 +-
 .../internal/browser/embedded/EmbeddedBrowser.java |    6 +
 .../browser/embedded/EmbeddedBrowserAdapter.java   |    7 +-
 .../ui/internal/preferences/HelpContentBlock.java  |    1 +
 .../preferences/HelpContentPreferencePage.java     |    2 +-
 .../internal/preferences/HelpPreferencePage.java   |    8 +-
 .../preferences/TestConnectionUtility.java         |   76 -
 .../ui/internal/preferences/ViewICPropsDialog.java |    4 +-
 .../help/ui/internal/search/LocalHelpPage.java     |   19 +-
 .../eclipse/help/ui/internal/util/EscapeUtils.java |    5 +-
 .../help/ui/internal/views/AllTopicsPart.java      |    6 +-
 .../help/ui/internal/views/BookmarkHeaderPart.java |   87 +
 .../help/ui/internal/views/ContextHelpPart.java    |   29 +-
 .../help/ui/internal/views/ContextHelpSorter.java  |   34 +-
 .../ui/internal/views/EngineTypeDescriptor.java    |    9 +-
 .../eclipse/help/ui/internal/views/HelpTray.java   |    7 +-
 .../eclipse/help/ui/internal/views/HelpView.java   |   17 +-
 .../help/ui/internal/views/HistoryScopeSet.java    |   25 +-
 .../help/ui/internal/views/HyperlinkTreePart.java  |   80 +-
 .../eclipse/help/ui/internal/views/IndexPart.java  |    6 +-
 .../help/ui/internal/views/IndexTypeinPart.java    |    2 +-
 .../help/ui/internal/views/LocalScopeDialog.java   |   69 +
 .../help/ui/internal/views/RenameDialog.java       |   27 +-
 .../help/ui/internal/views/ReusableHelpPart.java   |   43 +-
 .../help/ui/internal/views/ScopeSelectPart.java    |  168 +
 .../eclipse/help/ui/internal/views/ScopeSet.java   |   36 +-
 .../help/ui/internal/views/ScopeSetDialog.java     |  239 +-
 .../help/ui/internal/views/ScopeSetManager.java    |   27 +-
 .../eclipse/help/ui/internal/views/ScopeState.java |   44 +
 .../eclipse/help/ui/internal/views/SearchPart.java |  122 +-
 .../help/ui/internal/views/SearchResultsPart.java  |   35 +-
 .../help/ui/internal/views/SeeAlsoPart.java        |   83 +-
 .../org.eclipse.help.webapp/META-INF/MANIFEST.MF   |    4 +-
 .../org.eclipse.help.webapp/advanced/advanced.jsp  |    6 +-
 .../org.eclipse.help.webapp/advanced/helptree.js   |    5 +-
 .../org.eclipse.help.webapp/advanced/highlight.js  |   44 +-
 .../org.eclipse.help.webapp/advanced/indexView.css |   10 +-
 .../org.eclipse.help.webapp/advanced/indexView.js  |    4 +
 .../org.eclipse.help.webapp/advanced/indexView.jsp |   18 +
 .../org.eclipse.help.webapp/advanced/nav.jsp       |    4 +
 .../advanced/quickSearch.jsp                       |    4 +-
 .../advanced/searchList.css                        |   10 +-
 .../advanced/searchScoped.jsp                      |   38 +-
 .../advanced/searchSimple.jsp                      |    6 +-
 .../advanced/searchView.jsp                        |   64 +-
 .../org.eclipse.help.webapp/advanced/tabs.jsp      |    6 +-
 .../org.eclipse.help.webapp/advanced/tocTree.css   |    6 +
 .../org.eclipse.help.webapp/advanced/tocView.jsp   |   13 +
 .../org.eclipse.help.webapp/advanced/toolbar.jsp   |   12 +-
 .../org.eclipse.help.webapp/advanced/view.js       |   26 +
 .../org.eclipse.help.webapp/advanced/views.jsp     |    4 +-
 .../advanced/workingSet.jsp                        |    8 +-
 .../advanced/workingSetManager.jsp                 |    8 +-
 .../advancedstate/scopeState.jsp                   |   37 +
 .../advancedstate/workingSetState.jsp              |   37 +
 .../org.eclipse.help.webapp/basic/advanced.inc     |    6 +-
 .../org.eclipse.help.webapp/build.properties       |    5 +-
 .../plugins/org.eclipse.help.webapp/buildJSPs.xml  |    3 +-
 eclipse/plugins/org.eclipse.help.webapp/index.jsp  |    6 +-
 eclipse/plugins/org.eclipse.help.webapp/plugin.xml |  122 +-
 .../schema/validatedServlet.exsd                   |  120 +
 .../org.eclipse.help.webapp/schema/view.exsd       |    2 +-
 .../help/internal/webapp/StatusProducer.java       |    3 +-
 .../internal/webapp/WebappResources.properties     |   15 +-
 .../help/internal/webapp/data/LayoutData.java      |    2 +-
 .../help/internal/webapp/data/PrintData.java       |   10 +-
 .../help/internal/webapp/data/RequestScope.java    |   45 +-
 .../webapp/data/ScopeSavingSearchData.java         |   29 +
 .../help/internal/webapp/data/SearchData.java      |  162 +-
 .../internal/webapp/data/ServletResources.java     |   22 +-
 .../eclipse/help/internal/webapp/data/UrlUtil.java |   50 +-
 .../help/internal/webapp/parser/ContextParser.java |   85 +
 .../internal/webapp/parser/ExtensionParser.java    |   77 +
 .../webapp/parser/IndexFragmentParser.java         |   55 +
 .../help/internal/webapp/parser/IndexParser.java   |   60 +
 .../help/internal/webapp/parser/ParseElement.java  |  130 +
 .../help/internal/webapp/parser/ResultParser.java  |  103 +
 .../help/internal/webapp/parser/SearchParser.java  |   84 +
 .../internal/webapp/parser/TocFragmentParser.java  |  107 +
 .../help/internal/webapp/parser/TocParser.java     |   58 +
 .../help/internal/webapp/service/AboutService.java |   42 +
 .../webapp/service/AdvancedSearchService.java      |  135 +
 .../internal/webapp/service/ContentService.java    |   89 +
 .../internal/webapp/service/ContextService.java    |  109 +
 .../internal/webapp/service/ControlService.java    |   35 +
 .../internal/webapp/service/ExtensionService.java  |   97 +
 .../webapp/service/IndexFragmentService.java       |  112 +
 .../help/internal/webapp/service/IndexService.java |   99 +
 .../internal/webapp/service/LiveHelpService.java   |   34 +
 .../help/internal/webapp/service/NavService.java   |   68 +
 .../internal/webapp/service/SearchService.java     |  102 +
 .../webapp/service/SearchStateService.java         |  118 +
 .../webapp/service/TocFragmentService.java         |  117 +
 .../help/internal/webapp/service/TocService.java   |   98 +
 .../internal/webapp/servlet/ContextServlet.java    |   53 +-
 .../internal/webapp/servlet/ControlServlet.java    |    9 +-
 .../help/internal/webapp/servlet/CookieUtil.java   |   48 +-
 .../internal/webapp/servlet/EclipseConnector.java  |   35 +-
 .../internal/webapp/servlet/ExtensionServlet.java  |   12 +-
 .../webapp/servlet/IndexFragmentServlet.java       |   13 +-
 .../help/internal/webapp/servlet/IndexServlet.java |   13 +-
 .../internal/webapp/servlet/InjectionFilter.java   |   16 +-
 .../help/internal/webapp/servlet/NavServlet.java   |    7 +-
 .../internal/webapp/servlet/SearchServlet.java     |   79 +-
 .../webapp/servlet/ServletPrintWriter.java         |   81 +
 .../webapp/servlet/TocFragmentServlet.java         |   15 +-
 .../help/internal/webapp/servlet/TocServlet.java   |   26 +-
 .../internal/webapp/servlet/ValidatorServlet.java  |  274 +
 .../help/internal/webapp/utils/JSonHelper.java     |   57 +
 .../internal/webapp/utils/SearchXMLGenerator.java  |  117 +
 .../eclipse/help/internal/webapp/utils/Utils.java  |   95 +
 .../help/internal/webapp/utils/XMLHelper.java      |   42 +
 .../src/org/eclipse/help/webapp/TocSystem.java     |   32 +
 .../web-archive/help/WEB-INF/web.xml               |    3 +-
 .../plugins/org.eclipse.help/META-INF/MANIFEST.MF  |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF  |    4 +-
 .../org.eclipse.jdt.apt.core/build_notes.html      |   11 +-
 .../jdt/apt/core/internal/APTDispatchRunnable.java |    3 +-
 .../util/AptCorePreferenceInitializer.java         |    4 +-
 .../org/eclipse/jdt/apt/core/util/AptConfig.java   |   26 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../pluggable/core/dispatch/IdeMessagerImpl.java   |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../preferences/AptConfigurationBlock.java         |   27 +-
 .../preferences/BaseConfigurationBlock.java        |   17 +-
 .../preferences/FactoryPathConfigurationBlock.java |   63 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../customBuildCallbacks.xml                       |   10 +-
 .../apt/dispatch/BaseProcessingEnvImpl.java        |   22 +-
 .../compiler/apt/dispatch/BatchFilerImpl.java      |    8 +-
 .../compiler/apt/dispatch/RoundEnvImpl.java        |   19 +-
 .../compiler/apt/model/AnnotationMirrorImpl.java   |    8 +-
 .../internal/compiler/apt/model/ArrayTypeImpl.java |    9 +-
 .../compiler/apt/model/DeclaredTypeImpl.java       |   15 +-
 .../internal/compiler/apt/model/ElementsImpl.java  |   35 +-
 .../compiler/apt/model/ErrorTypeElement.java       |   24 +-
 .../internal/compiler/apt/model/ErrorTypeImpl.java |   39 +-
 .../compiler/apt/model/ExecutableTypeImpl.java     |    4 +-
 .../jdt/internal/compiler/apt/model/Factory.java   |   57 +-
 .../compiler/apt/model/TypeElementImpl.java        |   26 +-
 .../apt/model/TypeParameterElementImpl.java        |   16 +-
 .../compiler/apt/model/TypeVariableImpl.java       |   17 +-
 .../jdt/internal/compiler/apt/model/TypesImpl.java |   59 +-
 .../compiler/apt/model/WildcardTypeImpl.java       |    9 +-
 .../compiler/apt/util/ArchiveFileObject.java       |    4 +-
 .../compiler/apt/util/EclipseFileManager.java      |    6 +-
 .../compiler/apt/util/EclipseFileObject.java       |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../customBuildCallbacks.xml                       |   12 +-
 .../internal/compiler/tool/ArchiveFileObject.java  |    4 +-
 .../compiler/tool/EclipseCompilerImpl.java         |   84 +-
 .../internal/compiler/tool/EclipseFileManager.java |    6 +-
 .../internal/compiler/tool/EclipseFileObject.java  |    4 +-
 .../jdt/internal/compiler/tool/Options.java        |    1 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../participants/IRefactoringProcessorIds.java     |   45 +
 .../.settings/org.eclipse.jdt.core.prefs           |    3 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.jdt.core/META-INF/MANIFEST.MF      |   14 +-
 .../org/eclipse/jdt/core/JDTCompilerAdapter.java   |   16 +-
 .../jdt/core/compiler/batch/BatchCompiler.java     |    4 +-
 .../compiler/batch/ClasspathDirectory.java         |   10 +
 .../jdt/internal/compiler/batch/ClasspathJar.java  |    5 +-
 .../internal/compiler/batch/ClasspathLocation.java |   35 +-
 .../compiler/batch/ClasspathSourceJar.java         |    5 +-
 .../jdt/internal/compiler/batch/FileSystem.java    |   35 +-
 .../eclipse/jdt/internal/compiler/batch/Main.java  |  125 +-
 .../internal/compiler/batch/messages.properties    |   11 +-
 .../plugins/org.eclipse.jdt.core/build.properties  |    1 +
 .../org.eclipse.jdt.core/buildnotes_jdt-core.html  | 3230 ++++------
 .../jdt/internal/codeassist/CompletionEngine.java  |  421 +-
 .../codeassist/InternalCompletionProposal.java     |   93 +-
 .../InternalExtendedCompletionContext.java         |   63 +-
 .../internal/codeassist/RelevanceConstants.java    |    3 +-
 .../jdt/internal/codeassist/SelectionEngine.java   |  198 +-
 .../complete/CompletionOnPackageReference.java     |    4 +-
 .../codeassist/complete/CompletionParser.java      |  211 +-
 .../jdt/internal/codeassist/impl/AssistParser.java |   12 +-
 .../codeassist/select/SelectionJavadoc.java        |   14 +-
 .../codeassist/select/SelectionJavadocParser.java  |   15 +-
 .../select/SelectionOnPackageReference.java        |    4 +-
 .../codeassist/select/SelectionParser.java         |   76 +-
 .../eclipse/jdt/core/compiler/CharOperation.java   |   75 +-
 .../org/eclipse/jdt/core/compiler/IProblem.java    |   10 +-
 .../eclipse/jdt/internal/compiler/ClassFile.java   | 7373 ++++++--------------
 .../jdt/internal/compiler/CompilationResult.java   |   31 +-
 .../eclipse/jdt/internal/compiler/Compiler.java    |   42 +-
 .../internal/compiler/ast/AND_AND_Expression.java  |   11 +-
 .../eclipse/jdt/internal/compiler/ast/ASTNode.java |   36 +-
 .../compiler/ast/AbstractMethodDeclaration.java    |   74 +-
 .../compiler/ast/AllocationExpression.java         |   18 +-
 .../jdt/internal/compiler/ast/Annotation.java      |   26 +-
 .../compiler/ast/AnnotationMethodDeclaration.java  |    6 +-
 .../jdt/internal/compiler/ast/Argument.java        |    8 +-
 .../compiler/ast/ArrayAllocationExpression.java    |    6 +-
 .../compiler/ast/ArrayQualifiedTypeReference.java  |    7 +-
 .../jdt/internal/compiler/ast/AssertStatement.java |   18 +-
 .../jdt/internal/compiler/ast/Assignment.java      |   35 +-
 .../jdt/internal/compiler/ast/BreakStatement.java  |    6 +-
 .../jdt/internal/compiler/ast/CaseStatement.java   |    8 +-
 .../jdt/internal/compiler/ast/CastExpression.java  |   84 +-
 .../internal/compiler/ast/ClassLiteralAccess.java  |   17 +-
 .../eclipse/jdt/internal/compiler/ast/Clinit.java  |  107 +-
 .../compiler/ast/CompilationUnitDeclaration.java   |    6 +-
 .../internal/compiler/ast/CompoundAssignment.java  |   15 +-
 .../compiler/ast/ConditionalExpression.java        |   96 +-
 .../compiler/ast/ConstructorDeclaration.java       |   94 +-
 .../jdt/internal/compiler/ast/DoStatement.java     |   13 +-
 .../jdt/internal/compiler/ast/EqualExpression.java |    3 +
 .../compiler/ast/ExplicitConstructorCall.java      |   10 +-
 .../jdt/internal/compiler/ast/Expression.java      |  118 +-
 .../internal/compiler/ast/FieldDeclaration.java    |    9 +-
 .../jdt/internal/compiler/ast/FieldReference.java  |   32 +-
 .../jdt/internal/compiler/ast/ForStatement.java    |    8 +-
 .../internal/compiler/ast/ForeachStatement.java    |    6 +-
 .../jdt/internal/compiler/ast/IfStatement.java     |   22 +-
 .../jdt/internal/compiler/ast/ImportReference.java |    4 +-
 .../compiler/ast/InstanceOfExpression.java         |    3 +
 .../jdt/internal/compiler/ast/IntLiteral.java      |   23 +-
 .../eclipse/jdt/internal/compiler/ast/Javadoc.java |   53 +-
 .../compiler/ast/JavadocArgumentExpression.java    |    5 +-
 .../compiler/ast/JavadocFieldReference.java        |   18 +-
 .../internal/compiler/ast/LocalDeclaration.java    |   46 +-
 .../jdt/internal/compiler/ast/MessageSend.java     |   18 +-
 .../internal/compiler/ast/MethodDeclaration.java   |   46 +-
 .../internal/compiler/ast/OR_OR_Expression.java    |   11 +-
 .../ast/ParameterizedQualifiedTypeReference.java   |   20 +-
 .../ast/ParameterizedSingleTypeReference.java      |   52 +-
 .../ast/QualifiedAllocationExpression.java         |   17 +-
 .../compiler/ast/QualifiedNameReference.java       |   31 +-
 .../jdt/internal/compiler/ast/Reference.java       |   74 +-
 .../jdt/internal/compiler/ast/ReturnStatement.java |    6 +-
 .../internal/compiler/ast/SingleNameReference.java |  128 +-
 .../jdt/internal/compiler/ast/Statement.java       |    9 +-
 .../jdt/internal/compiler/ast/SuperReference.java  |    9 +-
 .../jdt/internal/compiler/ast/SwitchStatement.java |    4 +
 .../compiler/ast/SynchronizedStatement.java        |    4 +-
 .../jdt/internal/compiler/ast/ThisReference.java   |   11 +-
 .../jdt/internal/compiler/ast/TryStatement.java    |   14 +-
 .../jdt/internal/compiler/ast/TypeDeclaration.java |   43 +-
 .../jdt/internal/compiler/ast/WhileStatement.java  |   17 +-
 .../MethodInfoWithParameterAnnotations.java        |   19 +-
 .../jdt/internal/compiler/codegen/CodeStream.java  |   31 +-
 .../compiler/codegen/StackMapFrameCodeStream.java  |    6 +-
 .../compiler/flow/ConditionalFlowInfo.java         |   24 +-
 .../flow/ExceptionHandlingFlowContext.java         |    6 +-
 .../internal/compiler/flow/FinallyFlowContext.java |   18 +-
 .../jdt/internal/compiler/flow/FlowContext.java    |   12 +-
 .../jdt/internal/compiler/flow/FlowInfo.java       |  129 +-
 .../compiler/flow/InsideSubRoutineFlowContext.java |    4 +-
 .../internal/compiler/flow/LoopingFlowContext.java |  106 +-
 .../internal/compiler/flow/NullInfoRegistry.java   |  160 +-
 .../internal/compiler/flow/SwitchFlowContext.java  |    4 +-
 .../compiler/flow/UnconditionalFlowInfo.java       |  320 +-
 .../internal/compiler/impl/BooleanConstant.java    |    4 +-
 .../internal/compiler/impl/CompilerOptions.java    |  150 +-
 .../jdt/internal/compiler/impl/Constant.java       |    3 +-
 .../jdt/internal/compiler/impl/IrritantSet.java    |   10 +-
 .../compiler/lookup/BinaryTypeBinding.java         |  124 +-
 .../jdt/internal/compiler/lookup/Binding.java      |    8 +-
 .../jdt/internal/compiler/lookup/BlockScope.java   |   52 +-
 .../jdt/internal/compiler/lookup/ClassScope.java   |   46 +-
 .../compiler/lookup/CompilationUnitScope.java      |   17 +-
 .../compiler/lookup/ExtraCompilerModifiers.java    |    8 +-
 .../jdt/internal/compiler/lookup/FieldBinding.java |   17 +-
 .../internal/compiler/lookup/LocalTypeBinding.java |    6 +-
 .../compiler/lookup/LocalVariableBinding.java      |    9 +-
 .../compiler/lookup/LookupEnvironment.java         |   33 +-
 .../internal/compiler/lookup/MethodBinding.java    |    8 +-
 .../jdt/internal/compiler/lookup/MethodScope.java  |   16 +-
 .../internal/compiler/lookup/MethodVerifier.java   |   35 +-
 .../internal/compiler/lookup/MethodVerifier15.java |  140 +-
 .../compiler/lookup/ParameterizedTypeBinding.java  |   51 +-
 .../internal/compiler/lookup/RawTypeBinding.java   |    4 +-
 .../internal/compiler/lookup/ReferenceBinding.java |   10 +-
 .../jdt/internal/compiler/lookup/Scope.java        |   85 +-
 .../internal/compiler/lookup/SignatureWrapper.java |   35 +-
 .../compiler/lookup/SourceTypeBinding.java         |  114 +-
 .../compiler/lookup/SyntheticMethodBinding.java    |   40 +-
 .../jdt/internal/compiler/lookup/TagBits.java      |    8 +-
 .../jdt/internal/compiler/lookup/TypeBinding.java  |   52 +-
 .../internal/compiler/lookup/TypeConstants.java    |    3 +-
 .../jdt/internal/compiler/lookup/TypeIds.java      |    2 +-
 .../compiler/lookup/TypeVariableBinding.java       |    6 +-
 .../compiler/parser/AbstractCommentParser.java     |    4 +-
 .../internal/compiler/parser/JavadocParser.java    |   19 +-
 .../jdt/internal/compiler/parser/Parser.java       | 1134 ++--
 .../compiler/parser/ParserBasicInformation.java    |   26 +-
 .../internal/compiler/parser/TerminalTokens.java   |   10 +-
 .../jdt/internal/compiler/parser/parser1.rsc       |  Bin 25854 -> 25580 bytes
 .../jdt/internal/compiler/parser/parser10.rsc      |  Bin 268 -> 272 bytes
 .../jdt/internal/compiler/parser/parser11.rsc      |  Bin 268 -> 272 bytes
 .../jdt/internal/compiler/parser/parser12.rsc      |  Bin 268 -> 272 bytes
 .../jdt/internal/compiler/parser/parser13.rsc      |  Bin 268 -> 272 bytes
 .../jdt/internal/compiler/parser/parser14.rsc      |  Bin 1224 -> 1224 bytes
 .../jdt/internal/compiler/parser/parser15.rsc      |  Bin 946 -> 950 bytes
 .../jdt/internal/compiler/parser/parser16.rsc      |  Bin 1942 -> 1948 bytes
 .../jdt/internal/compiler/parser/parser17.rsc      |  Bin 704 -> 709 bytes
 .../jdt/internal/compiler/parser/parser18.rsc      |  Bin 8111 -> 8050 bytes
 .../jdt/internal/compiler/parser/parser19.rsc      |    4 +-
 .../jdt/internal/compiler/parser/parser2.rsc       |  Bin 24446 -> 24162 bytes
 .../jdt/internal/compiler/parser/parser20.rsc      |  Bin 13232 -> 13312 bytes
 .../jdt/internal/compiler/parser/parser21.rsc      |  Bin 5632 -> 5672 bytes
 .../jdt/internal/compiler/parser/parser22.rsc      |  Bin 628 -> 632 bytes
 .../jdt/internal/compiler/parser/parser23.rsc      |  Bin 68 -> 74 bytes
 .../jdt/internal/compiler/parser/parser24.rsc      |  Bin 628 -> 632 bytes
 .../jdt/internal/compiler/parser/parser3.rsc       |  Bin 1942 -> 1948 bytes
 .../jdt/internal/compiler/parser/parser4.rsc       |  Bin 3416 -> 3416 bytes
 .../jdt/internal/compiler/parser/parser5.rsc       |  Bin 1942 -> 1948 bytes
 .../jdt/internal/compiler/parser/parser6.rsc       |  Bin 986 -> 1000 bytes
 .../jdt/internal/compiler/parser/parser7.rsc       |  Bin 222 -> 222 bytes
 .../jdt/internal/compiler/parser/parser8.rsc       |  Bin 628 -> 632 bytes
 .../jdt/internal/compiler/parser/parser9.rsc       |  Bin 16146 -> 15978 bytes
 .../compiler/parser/readableNames.properties       |   12 +-
 .../internal/compiler/problem/DefaultProblem.java  |    7 +-
 .../internal/compiler/problem/ProblemReporter.java |  190 +-
 .../internal/compiler/problem/messages.properties  |   20 +-
 .../eclipse/jdt/internal/compiler/util/Util.java   |  586 ++-
 .../org.eclipse.jdt.core/customBuildCallbacks.xml  |   38 +-
 .../dom/org/eclipse/jdt/core/dom/AST.java          |    1 +
 .../dom/org/eclipse/jdt/core/dom/ASTConverter.java |  184 +-
 .../dom/org/eclipse/jdt/core/dom/ASTMatcher.java   |    8 +-
 .../dom/org/eclipse/jdt/core/dom/ASTNode.java      |   26 +-
 .../jdt/core/dom/AbstractTypeDeclaration.java      |   32 +-
 .../dom/org/eclipse/jdt/core/dom/Annotation.java   |    8 +-
 .../eclipse/jdt/core/dom/AnnotationBinding.java    |   19 +-
 .../jdt/core/dom/AnnotationTypeDeclaration.java    |   10 +-
 .../core/dom/AnnotationTypeMemberDeclaration.java  |   12 +-
 .../jdt/core/dom/AnonymousClassDeclaration.java    |    8 +-
 .../dom/org/eclipse/jdt/core/dom/ArrayAccess.java  |    6 +-
 .../org/eclipse/jdt/core/dom/ArrayCreation.java    |   12 +-
 .../org/eclipse/jdt/core/dom/ArrayInitializer.java |    8 +-
 .../dom/org/eclipse/jdt/core/dom/ArrayType.java    |    4 +-
 .../org/eclipse/jdt/core/dom/AssertStatement.java  |    6 +-
 .../dom/org/eclipse/jdt/core/dom/Assignment.java   |    8 +-
 .../dom/org/eclipse/jdt/core/dom/Block.java        |    8 +-
 .../org/eclipse/jdt/core/dom/BodyDeclaration.java  |   22 +-
 .../org/eclipse/jdt/core/dom/BooleanLiteral.java   |    4 +-
 .../org/eclipse/jdt/core/dom/BreakStatement.java   |    4 +-
 .../org/eclipse/jdt/core/dom/CastExpression.java   |    6 +-
 .../dom/org/eclipse/jdt/core/dom/CatchClause.java  |    4 +-
 .../org/eclipse/jdt/core/dom/CharacterLiteral.java |    4 +-
 .../jdt/core/dom/ClassInstanceCreation.java        |   24 +-
 .../org/eclipse/jdt/core/dom/CompilationUnit.java  |   16 +-
 .../jdt/core/dom/CompilationUnitResolver.java      |   10 +-
 .../jdt/core/dom/ConditionalExpression.java        |    8 +-
 .../jdt/core/dom/ConstructorInvocation.java        |   14 +-
 .../eclipse/jdt/core/dom/ContinueStatement.java    |    4 +-
 .../eclipse/jdt/core/dom/DefaultASTVisitor.java    |    8 +-
 .../jdt/core/dom/DefaultBindingResolver.java       |   44 +-
 .../eclipse/jdt/core/dom/DefaultCommentMapper.java |    6 +-
 .../jdt/core/dom/DefaultValuePairBinding.java      |    9 +-
 .../dom/org/eclipse/jdt/core/dom/DoStatement.java  |    6 +-
 .../eclipse/jdt/core/dom/EnhancedForStatement.java |    6 +-
 .../jdt/core/dom/EnumConstantDeclaration.java      |   16 +-
 .../org/eclipse/jdt/core/dom/EnumDeclaration.java  |   20 +-
 .../dom/org/eclipse/jdt/core/dom/Expression.java   |   52 +-
 .../eclipse/jdt/core/dom/ExpressionStatement.java  |    4 +-
 .../dom/org/eclipse/jdt/core/dom/FieldAccess.java  |    6 +-
 .../org/eclipse/jdt/core/dom/FieldDeclaration.java |   14 +-
 .../dom/org/eclipse/jdt/core/dom/ForStatement.java |   18 +-
 .../dom/org/eclipse/jdt/core/dom/ITypeBinding.java |   17 +-
 .../dom/org/eclipse/jdt/core/dom/IfStatement.java  |    8 +-
 .../eclipse/jdt/core/dom/ImportDeclaration.java    |    8 +-
 .../org/eclipse/jdt/core/dom/InfixExpression.java  |   14 +-
 .../dom/org/eclipse/jdt/core/dom/Initializer.java  |   10 +-
 .../eclipse/jdt/core/dom/InstanceofExpression.java |    6 +-
 .../dom/org/eclipse/jdt/core/dom/Javadoc.java      |   10 +-
 .../org/eclipse/jdt/core/dom/LabeledStatement.java |    6 +-
 .../org/eclipse/jdt/core/dom/MarkerAnnotation.java |    4 +-
 .../dom/org/eclipse/jdt/core/dom/MemberRef.java    |    6 +-
 .../org/eclipse/jdt/core/dom/MemberValuePair.java  |    6 +-
 .../jdt/core/dom/MemberValuePairBinding.java       |   45 +-
 .../eclipse/jdt/core/dom/MethodDeclaration.java    |   36 +-
 .../org/eclipse/jdt/core/dom/MethodInvocation.java |   18 +-
 .../dom/org/eclipse/jdt/core/dom/MethodRef.java    |   12 +-
 .../eclipse/jdt/core/dom/MethodRefParameter.java   |    8 +-
 .../dom/org/eclipse/jdt/core/dom/Modifier.java     |    4 +-
 .../jdt/core/dom/NameEnviromentWithProgress.java   |   56 -
 .../jdt/core/dom/NameEnvironmentWithProgress.java  |   56 +
 .../org/eclipse/jdt/core/dom/NormalAnnotation.java |    8 +-
 .../org/eclipse/jdt/core/dom/NumberLiteral.java    |    4 +-
 .../eclipse/jdt/core/dom/PackageDeclaration.java   |   12 +-
 .../eclipse/jdt/core/dom/ParameterizedType.java    |   10 +-
 .../jdt/core/dom/ParenthesizedExpression.java      |    4 +-
 .../eclipse/jdt/core/dom/PostfixExpression.java    |    6 +-
 .../org/eclipse/jdt/core/dom/PrefixExpression.java |    6 +-
 .../org/eclipse/jdt/core/dom/PrimitiveType.java    |    4 +-
 .../org/eclipse/jdt/core/dom/QualifiedName.java    |    6 +-
 .../org/eclipse/jdt/core/dom/QualifiedType.java    |    8 +-
 .../eclipse/jdt/core/dom/RecoveredTypeBinding.java |    6 +-
 .../org/eclipse/jdt/core/dom/ReturnStatement.java  |    4 +-
 .../dom/org/eclipse/jdt/core/dom/SimpleName.java   |    4 +-
 .../dom/org/eclipse/jdt/core/dom/SimpleType.java   |    4 +-
 .../jdt/core/dom/SingleMemberAnnotation.java       |    6 +-
 .../jdt/core/dom/SingleVariableDeclaration.java    |   20 +-
 .../dom/org/eclipse/jdt/core/dom/Statement.java    |   66 +-
 .../org/eclipse/jdt/core/dom/StringLiteral.java    |    2 +-
 .../jdt/core/dom/SuperConstructorInvocation.java   |   16 +-
 .../org/eclipse/jdt/core/dom/SuperFieldAccess.java |    6 +-
 .../jdt/core/dom/SuperMethodInvocation.java        |   18 +-
 .../dom/org/eclipse/jdt/core/dom/SwitchCase.java   |    4 +-
 .../org/eclipse/jdt/core/dom/SwitchStatement.java  |   10 +-
 .../jdt/core/dom/SynchronizedStatement.java        |    6 +-
 .../dom/org/eclipse/jdt/core/dom/TagElement.java   |   10 +-
 .../dom/org/eclipse/jdt/core/dom/TextElement.java  |    4 +-
 .../org/eclipse/jdt/core/dom/ThisExpression.java   |    4 +-
 .../org/eclipse/jdt/core/dom/ThrowStatement.java   |    4 +-
 .../dom/org/eclipse/jdt/core/dom/TryStatement.java |   12 +-
 .../dom/org/eclipse/jdt/core/dom/TypeBinding.java  |    7 +-
 .../org/eclipse/jdt/core/dom/TypeDeclaration.java  |   36 +-
 .../jdt/core/dom/TypeDeclarationStatement.java     |    6 +-
 .../dom/org/eclipse/jdt/core/dom/TypeLiteral.java  |    4 +-
 .../org/eclipse/jdt/core/dom/TypeParameter.java    |   10 +-
 .../org/eclipse/jdt/core/dom/VariableBinding.java  |   36 +-
 .../eclipse/jdt/core/dom/VariableDeclaration.java  |   14 +-
 .../core/dom/VariableDeclarationExpression.java    |   16 +-
 .../jdt/core/dom/VariableDeclarationFragment.java  |    8 +-
 .../jdt/core/dom/VariableDeclarationStatement.java |   16 +-
 .../org/eclipse/jdt/core/dom/WhileStatement.java   |    6 +-
 .../dom/org/eclipse/jdt/core/dom/WildcardType.java |    6 +-
 .../eclipse/jdt/core/dom/rewrite/ASTRewrite.java   |  133 +-
 .../core/dom/rewrite/ASTRewriteAnalyzer.java       |   72 +-
 .../jdt/internal/eval/CodeSnippetEvaluator.java    |    6 +-
 .../internal/eval/CodeSnippetFieldReference.java   |    7 +-
 .../jdt/internal/eval/CodeSnippetMessageSend.java  |    4 +-
 .../eval/CodeSnippetQualifiedNameReference.java    |    7 +-
 .../eval/CodeSnippetSingleNameReference.java       |   53 +-
 .../jdt/internal/eval/CodeSnippetToCuMapper.java   |   23 +-
 .../jdt/internal/eval/EvaluationContext.java       |   12 +-
 .../core/formatter/CodeFormatterApplication.java   |   50 +-
 .../formatter/DefaultCodeFormatterConstants.java   |  168 +-
 .../eclipse/jdt/core/formatter/messages.properties |    7 +-
 .../internal/formatter/CodeFormatterVisitor.java   |  553 +-
 .../internal/formatter/DefaultCodeFormatter.java   |    3 +
 .../formatter/DefaultCodeFormatterOptions.java     |  100 +-
 .../jdt/internal/formatter/FormatJavadocBlock.java |   12 +-
 .../formatter/ICodeFormatterConstants.java         |   19 +-
 .../internal/formatter/OptimizedReplaceEdit.java   |    4 +-
 .../org/eclipse/jdt/internal/formatter/Scribe.java |  884 ++-
 .../jdt/internal/formatter/align/Alignment.java    |    7 +-
 .../plugins/org.eclipse.jdt.core/grammar/java.g    |   19 +-
 .../model/org/eclipse/jdt/core/IAnnotation.java    |   15 +-
 .../eclipse/jdt/core/IElementChangedListener.java  |    4 +-
 .../org/eclipse/jdt/core/IImportDeclaration.java   |    3 +-
 .../org/eclipse/jdt/core/IJavaElementDelta.java    |    4 +-
 .../model/org/eclipse/jdt/core/IJavaModel.java     |    5 +-
 .../jdt/core/IJavaModelStatusConstants.java        |   10 +-
 .../model/org/eclipse/jdt/core/IJavaProject.java   |   45 +-
 .../model/org/eclipse/jdt/core/ILocalVariable.java |   44 +-
 .../model/org/eclipse/jdt/core/IMember.java        |   14 -
 .../model/org/eclipse/jdt/core/IMethod.java        |   17 +-
 .../org/eclipse/jdt/core/IPackageDeclaration.java  |    2 +-
 .../org/eclipse/jdt/core/ISourceReference.java     |   40 +-
 .../model/org/eclipse/jdt/core/IType.java          |   12 +-
 .../model/org/eclipse/jdt/core/ITypeParameter.java |   16 +-
 .../model/org/eclipse/jdt/core/JavaCore.java       |  107 +-
 .../model/org/eclipse/jdt/core/Signature.java      |   80 +-
 .../internal/compiler/DocumentElementParser.java   |   54 +-
 .../internal/compiler/ISourceElementRequestor.java |   19 +-
 .../internal/compiler/SourceElementNotifier.java   |   37 +-
 .../jdt/internal/compiler/SourceElementParser.java |   15 +-
 .../compiler/SourceElementRequestorAdapter.java    |    6 +-
 .../compiler/parser/SourceTypeConverter.java       |   58 +-
 .../internal/compiler/parser/TypeConverter.java    |   67 +-
 .../eclipse/jdt/internal/core/AnnotatableInfo.java |    7 +-
 .../eclipse/jdt/internal/core/BinaryMember.java    |   10 +-
 .../eclipse/jdt/internal/core/BinaryMethod.java    |  119 +-
 .../org/eclipse/jdt/internal/core/BinaryType.java  |    8 +-
 .../jdt/internal/core/BinaryTypeConverter.java     |    4 +-
 .../internal/core/CancelableNameEnvironment.java   |    2 +-
 .../org/eclipse/jdt/internal/core/ClassFile.java   |    5 +-
 .../eclipse/jdt/internal/core/ClassFileInfo.java   |   89 +-
 .../eclipse/jdt/internal/core/ClasspathChange.java |   25 +-
 .../eclipse/jdt/internal/core/ClasspathEntry.java  |  105 +-
 .../eclipse/jdt/internal/core/CompilationUnit.java |    3 +
 .../core/CompilationUnitProblemFinder.java         |   37 +-
 .../core/CompilationUnitStructureRequestor.java    |   64 +-
 .../eclipse/jdt/internal/core/DeltaProcessor.java  |  185 +-
 .../jdt/internal/core/ExternalFolderChange.java    |    5 +-
 .../jdt/internal/core/ExternalFoldersManager.java  |   74 +-
 .../internal/core/INameEnviromentWithProgress.java |   36 -
 .../core/INameEnvironmentWithProgress.java         |   36 +
 .../eclipse/jdt/internal/core/ImportContainer.java |    5 +-
 .../jdt/internal/core/ImportDeclaration.java       |    6 +-
 .../core/ImportDeclarationElementInfo.java         |   35 +-
 .../jdt/internal/core/JarPackageFragmentRoot.java  |    3 +-
 .../core/JavaCorePreferenceInitializer.java        |   30 +-
 .../org/eclipse/jdt/internal/core/JavaElement.java |   28 +-
 .../jdt/internal/core/JavaModelManager.java        |  395 +-
 .../eclipse/jdt/internal/core/JavaModelStatus.java |   16 +-
 .../org/eclipse/jdt/internal/core/JavaProject.java |  152 +-
 .../eclipse/jdt/internal/core/JavadocContents.java |   29 +-
 .../eclipse/jdt/internal/core/LocalVariable.java   |  119 +-
 .../org/eclipse/jdt/internal/core/Member.java      |    8 +-
 .../org/eclipse/jdt/internal/core/NameLookup.java  |   12 +-
 .../jdt/internal/core/PackageDeclaration.java      |   10 +-
 .../jdt/internal/core/SearchableEnvironment.java   |   13 +-
 .../jdt/internal/core/SelectionRequestor.java      |   33 +-
 .../eclipse/jdt/internal/core/SourceMapper.java    |  145 +-
 .../eclipse/jdt/internal/core/SourceMethod.java    |    9 +-
 .../jdt/internal/core/SourceMethodElementInfo.java |    4 +-
 .../eclipse/jdt/internal/core/TypeParameter.java   |   10 +-
 .../org/eclipse/jdt/internal/core/UserLibrary.java |   37 +-
 .../jdt/internal/core/UserLibraryManager.java      |   10 +-
 .../core/builder/IncrementalImageBuilder.java      |   12 +-
 .../jdt/internal/core/builder/JavaBuilder.java     |    4 +-
 .../eclipse/jdt/internal/core/builder/State.java   |    2 +-
 .../internal/core/hierarchy/HierarchyBuilder.java  |    6 +-
 .../jdt/internal/core/hierarchy/TypeHierarchy.java |    6 +-
 .../jdt/internal/core/jdom/SimpleDOMBuilder.java   |    4 +-
 .../jdt/internal/core/util/BindingKeyParser.java   |   10 +-
 .../jdt/internal/core/util/Disassembler.java       |   35 +-
 .../jdt/internal/core/util/HandleFactory.java      |    3 +-
 .../jdt/internal/core/util/KeyToSignature.java     |   13 +-
 .../jdt/internal/core/util/MementoTokenizer.java   |   32 +-
 .../eclipse/jdt/internal/core/util/Messages.java   |    5 +-
 .../org/eclipse/jdt/internal/core/util/Util.java   |  503 +--
 .../jdt/internal/core/util/messages.properties     |    7 +-
 .../notes/R36_buildnotes_jdt-core.html             | 2283 ++++++
 .../scripts/antadapter/META-INF/MANIFEST.MF        |   14 +
 .../scripts/antadapter/plugin.properties           |   13 +
 .../scripts/antadapter/plugin.xml                  |   20 +
 .../scripts/binary/META-INF/MANIFEST.MF            |    2 +-
 .../plugins/org.eclipse.jdt.core/scripts/build.xml |    5 +-
 .../org.eclipse.jdt.core/scripts/build_ecj.xml     |    5 +-
 .../org.eclipse.jdt.core/scripts/export-ecj.xml    |    6 +-
 .../org.eclipse.jdt.core/scripts/exportplugin.xml  |  106 +-
 .../scripts/source/META-INF/MANIFEST.MF            |    4 +-
 .../org/eclipse/jdt/core/search/SearchEngine.java  |   52 +-
 .../eclipse/jdt/core/search/SearchParticipant.java |    4 +-
 .../eclipse/jdt/internal/core/index/DiskIndex.java |    2 -
 .../jdt/internal/core/search/StringOperation.java  |    4 +-
 .../core/search/indexing/BinaryIndexer.java        |    4 +-
 .../core/search/indexing/IndexManager.java         |    4 +-
 .../search/indexing/SourceIndexerRequestor.java    |    6 +-
 .../internal/core/search/matching/AndLocator.java  |   11 +-
 .../search/matching/ClassFileMatchLocator.java     |   10 +-
 .../core/search/matching/FieldLocator.java         |    5 +-
 .../core/search/matching/MatchLocator.java         |   15 +-
 .../core/search/matching/MatchLocatorParser.java   |   37 +-
 .../core/search/matching/MethodLocator.java        |   36 +-
 .../internal/core/search/matching/OrLocator.java   |   11 +-
 .../core/search/matching/PatternLocator.java       |   14 +
 .../search/matching/SuperTypeReferenceLocator.java |    3 +-
 .../core/search/processing/JobManager.java         |    5 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  208 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF  |    6 +-
 .../icons/full/elcl16/var_cntnt_prvdr.gif          |  Bin 209 -> 209 bytes
 .../icons/full/etool16/new_sbook.gif               |  Bin 589 -> 589 bytes
 .../org.eclipse.jdt.debug.ui/plugin.properties     |   12 +-
 .../plugins/org.eclipse.jdt.debug.ui/plugin.xml    |   42 +-
 .../scripts/buildExtraJAR.xml                      |    5 +-
 .../breakpoints/JavaBreakpointConditionEditor.java |  528 ++-
 .../internal/debug/ui/BreakpointMarkerUpdater.java |    6 +-
 .../jdt/internal/debug/ui/DebugUIMessages.java     |   13 +-
 .../internal/debug/ui/DebugUIMessages.properties   |    6 +-
 .../debug/ui/IJDIPreferencesConstants.java         |   25 +-
 .../debug/ui/JDIDebugUIPreferenceInitializer.java  |   10 +-
 .../internal/debug/ui/JavaDebugOptionsManager.java | 1591 +++---
 .../internal/debug/ui/JavaDebugPreferencePage.java |   38 +-
 .../debug/ui/JavaStepFilterPreferencePage.java     |   15 +
 .../internal/debug/ui/actions/ActionMessages.java  |   10 +-
 .../debug/ui/actions/ActionMessages.properties     |    9 +-
 .../debug/ui/actions/OpenFromClipboardAction.java  |  693 ++
 .../debug/ui/actions/ToggleBreakpointAdapter.java  |  130 +-
 .../debug/ui/breakpoints/AbstractDetailPane.java   |   32 +-
 .../ui/breakpoints/LineBreakpointDetailPane.java   |    4 +-
 .../ui/breakpoints/MethodBreakpointDetailPane.java |    4 +-
 .../jdt/internal/debug/ui/jres/EEVMPage.java       |    3 +-
 .../internal/debug/ui/jres/InstalledJREsBlock.java |    2 +-
 .../internal/debug/ui/jres/JREMessages.properties  |    4 +-
 .../jdt/internal/debug/ui/jres/MacVMSearch.java    |   89 +-
 .../jdt/internal/debug/ui/jres/StandardVMPage.java |   10 +-
 .../ui/launcher/ExecutionEnvironmentSelector.java  |   45 +
 .../debug/ui/launcher/JreResolutionGenerator.java  |    7 +-
 .../debug/ui/launcher/LauncherMessages.java        |    9 +-
 .../debug/ui/launcher/LauncherMessages.properties  |    6 +-
 .../launcher/ProjectClasspathArgumentSelector.java |   55 +
 .../debug/ui/propertypages/JavaBreakpointPage.java |   22 +-
 .../ui/propertypages/PropertyPageMessages.java     |    4 +-
 .../propertypages/PropertyPageMessages.properties  |    4 +-
 eclipse/plugins/org.eclipse.jdt.debug/.options     |    6 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  209 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.jdt.debug/META-INF/MANIFEST.MF     |    2 +-
 .../buildnotes_jdt-debug.html                      |   38 -
 .../debug/eval/ast/engine/ASTEvaluationEngine.java |   96 +-
 .../debug/eval/ast/engine/ArrayRuntimeContext.java |    4 +-
 .../ast/engine/SourceBasedSourceGenerator.java     |   92 +-
 .../jdi/org/eclipse/jdi/internal/MirrorImpl.java   |   20 +-
 .../eclipse/jdt/debug/core/IJavaDebugTarget.java   |   39 +-
 .../jdt/internal/debug/core/EventDispatcher.java   |    2 -
 .../internal/debug/core/HeapWalkingManager.java    |    7 +-
 .../jdt/internal/debug/core/JDIDebugOptions.java   |   17 +-
 .../debug/core/hcr/JavaHotCodeReplaceManager.java  |    6 +-
 .../internal/debug/core/model/JDIDebugTarget.java  |   40 +-
 .../jdt/internal/debug/core/model/JDIMethod.java   |  119 +
 .../debug/core/model/JDIReferenceListVariable.java |   10 +-
 .../jdt/internal/debug/core/model/JDIThread.java   |  232 +-
 .../r2_0_buildnotes_jdt-debug.html                 | 1846 -----
 .../r2_1_buildnotes_jdt-debug.html                 |  806 ---
 .../r3_0_buildnotes_jdt-debug.html                 |  978 ---
 .../org.eclipse.jdt.debug/r3_0_changes.html        |   29 -
 .../r3_1_buildnotes_jdt-debug.html                 |  774 --
 .../org.eclipse.jdt.debug/r3_1_changes.html        |   25 -
 .../r3_2_buildnotes_jdt-debug.html                 |  461 --
 .../r3_3_buildnotes_jdt-debug.html                 |  438 --
 .../r3_4_buildnotes_jdt-debug.html                 |  376 -
 .../r3_5_buildnotes_jdt-debug.html                 |  156 -
 .../org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF   |    2 +-
 .../aaa-how-to-add-things.txt                      |    1 -
 eclipse/plugins/org.eclipse.jdt.doc.isv/about.html |    5 +-
 .../org.eclipse.jdt.doc.isv/about.properties       |    4 +-
 eclipse/plugins/org.eclipse.jdt.doc.isv/book.css   |   22 +
 .../plugins/org.eclipse.jdt.doc.isv/buildDoc.xml   |   33 -
 .../guide/CopyrightTabPage.html                    |  433 +-
 .../guide/jdt_api_classpath.htm                    |  488 +-
 .../guide/jdt_api_codeassist.htm                   |  299 +-
 .../guide/jdt_api_codeformatter.htm                |  677 ++-
 .../guide/jdt_api_compile.htm                      | 1046 +---
 .../guide/jdt_api_contributing_a_cleanup.htm       |  240 +-
 .../guide/jdt_api_manip.htm                        |  773 ++-
 .../guide/jdt_api_open_editor.htm                  |   33 +-
 .../guide/jdt_api_options.htm                      | 5194 +++++++++-----
 .../guide/jdt_api_prompter.htm                     |   37 +-
 .../guide/jdt_api_render.htm                       |  182 +-
 .../org.eclipse.jdt.doc.isv/guide/jdt_api_run.htm  |   68 +-
 .../guide/jdt_api_search.htm                       |  365 +-
 .../guide/jdt_api_wizards.htm                      |  191 +-
 .../guide/jdt_api_write_jar_file.htm               |   55 +-
 .../guide/jdt_apt_building_with_apt.htm            |   14 +-
 .../guide/jdt_apt_getting_started.htm              |   18 +-
 .../guide/jdt_int_model.htm                        |  427 +-
 .../plugins/org.eclipse.jdt.doc.isv/jdtOptions.txt |   55 +-
 .../org.eclipse.jdt.doc.isv/jdtaptOptions.txt      |  112 -
 .../plugins/org.eclipse.jdt.doc.isv/notices.html   |    4 +-
 .../porting/3.2/recommended.html                   |    5 +-
 .../porting/3.3/recommended.html                   |    5 +-
 .../org.eclipse.jdt.doc.isv/porting/3.7/faq.html   |   42 +
 .../porting/3.7/incompatibilities.html             |   29 +
 .../porting/3.7/recommended.html                   |   34 +
 .../porting/eclipse_3_7_porting_guide.html         |   39 +
 .../org.eclipse.jdt.doc.isv/questions/index.html   |   73 +-
 .../reference/extension-points/index.html          |    9 +-
 .../reference/misc/api-usage-rules.html            |    4 +-
 .../reference/misc/index.html                      |   11 +-
 eclipse/plugins/org.eclipse.jdt.doc.isv/toc.xml    |    2 +-
 .../org.eclipse.jdt.doc.isv/topics_Porting.xml     |    6 +
 .../org.eclipse.jdt.doc.isv/topics_Reference.xml   |   20 +-
 .../org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF  |    2 +-
 .../plugins/org.eclipse.jdt.doc.user/about.html    |    5 +-
 .../org.eclipse.jdt.doc.user/about.properties      |    4 +-
 eclipse/plugins/org.eclipse.jdt.doc.user/book.css  |    4 +
 .../concept-access-rules-combine-rules.htm         |   48 +
 .../concepts/concept-access-rules.htm              |   82 +-
 .../concepts/concept-build-classpath.htm           |   61 +-
 .../concepts/concept-classpath-variables.htm       |   75 +-
 .../concepts/concept-editor-templates.htm          |  103 +-
 .../concept-inclusion-exclusion-patterns.htm       |   85 +-
 .../concepts/concept-java-builder.htm              |   96 +-
 .../concepts/concept-java-editor.htm               |  142 +-
 .../concepts/concept-java-perspective.htm          |  196 +-
 .../concepts/concept-java-project.htm              |   81 +-
 .../concepts/concept-java-search.htm               |  170 +-
 .../concepts/concept-java-views-decorators.htm     |   99 +-
 .../concepts/concept-java-views-filtering.htm      |  147 +-
 .../concepts/concept-java-views-presentation.htm   |  149 +-
 .../concepts/concept-java-views-sorting.htm        |   76 +-
 .../concepts/concept-java-views.htm                |  328 +-
 .../concepts/concept-jdt.htm                       |   80 +-
 .../concepts/concept-quickfix-assist.htm           |    4 +-
 .../concepts/concept-refactoring.htm               |  114 +-
 .../concepts/concept-string-externalization.htm    |  133 +-
 .../concepts/concept-template-variables.htm        |    4 +-
 .../org.eclipse.jdt.doc.user/contexts_Debugger.xml |   14 +-
 .../org.eclipse.jdt.doc.user/contexts_JDT.xml      |   56 +-
 .../contexts_JDT_Debugger.xml                      |    5 +-
 .../images/editor_mytestcase_moved.png             |  Bin 11044 -> 23890 bytes
 .../images/editor_vectortest_quickoutline.png      |  Bin 14172 -> 16168 bytes
 .../images/extract_method_dialog.png               |  Bin 7465 -> 20900 bytes
 .../j2se50/wiz_new_java_project_myproject.png      |  Bin 11718 -> 25938 bytes
 .../gettingStarted/images/pref_editor.png          |  Bin 5285 -> 2613 bytes
 .../images/qs-DetectingExistingLayout2.png         |  Bin 11654 -> 25566 bytes
 .../images/qs-DetectingExistingLayout4.png         |  Bin 27863 -> 4891 bytes
 .../gettingStarted/images/qs-OrganizeSources6.png  |  Bin 29693 -> 6788 bytes
 .../images/qs-WorkingWithExistingLayout11.png      |  Bin 11793 -> 25700 bytes
 .../images/qs-WorkingWithExistingLayout15.png      |  Bin 30888 -> 8764 bytes
 .../images/qs-WorkingWithExistingLayout21.png      |  Bin 11793 -> 25700 bytes
 .../images/qs-WorkingWithExistingLayout29.png      |  Bin 30882 -> 8541 bytes
 .../images/qs-WorkingWithExistingLayout31.png      |  Bin 11793 -> 25700 bytes
 .../images/qs-WorkingWithExistingLayout36.png      |  Bin 29893 -> 6942 bytes
 .../images/qs-WorkingWithExistingLayout41.png      |  Bin 11793 -> 25700 bytes
 .../images/qs-WorkingWithExistingLayout49.png      |  Bin 35001 -> 12213 bytes
 .../images/qs-WorkingWithExistingLayout51.png      |  Bin 11682 -> 25689 bytes
 .../images/qs-WorkingWithExistingLayout61.png      |  Bin 12046 -> 26030 bytes
 .../images/qs-WorkingWithExistingLayout63.png      |  Bin 11914 -> 26016 bytes
 .../gettingStarted/images/quickoutline_menu.png    |  Bin 9852 -> 9851 bytes
 .../images/quickoutline_submethods.png             |  Bin 9214 -> 5870 bytes
 .../gettingStarted/images/view_junit_red.png       |  Bin 5257 -> 10573 bytes
 .../images/view_package_explorer_junit.png         |  Bin 7853 -> 7799 bytes
 .../images/view_package_explorer_junit_exp.png     |  Bin 15101 -> 18914 bytes
 .../view_package_explorer_vectortest_error.png     |  Bin 9818 -> 9909 bytes
 .../gettingStarted/images/view_problems_goto.png   |  Bin 19236 -> 9734 bytes
 .../gettingStarted/images/wiz_new_project.png      |  Bin 34373 -> 27069 bytes
 .../gettingStarted/intro/overview.htm              |   58 +-
 .../gettingStarted/qs-12.htm                       |  299 +-
 .../gettingStarted/qs-13.htm                       |    8 +-
 .../gettingStarted/qs-14.htm                       |    8 +-
 .../gettingStarted/qs-15.htm                       |   10 +-
 .../gettingStarted/qs-AddMethod.htm                |  150 +-
 .../gettingStarted/qs-ContentAssist.htm            |    4 +-
 .../gettingStarted/qs-DetectingExistingLayout.htm  |   47 +-
 .../gettingStarted/qs-EditorTemplates.htm          |    2 +-
 .../gettingStarted/qs-ExtractMethod.htm            |    6 +-
 .../gettingStarted/qs-LocalHistory.htm             |    6 +-
 .../gettingStarted/qs-Navigate.htm                 |  147 +-
 .../gettingStarted/qs-OpenJavaEditor.htm           |    4 +-
 .../gettingStarted/qs-OrganizeImports.htm          |   92 +-
 .../gettingStarted/qs-OrganizingSources.htm        |  219 +-
 .../gettingStarted/qs-ProjectConfiguration.htm     |    2 +-
 .../gettingStarted/qs-Quickviews.htm               |    3 +-
 .../qs-WorkingWithExistingLayout1.htm              |  216 +-
 .../qs-WorkingWithExistingLayout2.htm              |  303 +-
 .../qs-WorkingWithExistingLayout3.htm              |  227 +-
 .../qs-WorkingWithExistingLayout4.htm              |  341 +-
 .../qs-WorkingWithExistingLayout5.htm              |  316 +-
 .../qs-WorkingWithExistingLayout6.htm              |  428 +-
 .../gettingStarted/qs-junit.htm                    |  303 +-
 .../org.eclipse.jdt.ui/elcl16/external_browser.png |  Bin 0 -> 654 bytes
 .../elcl16/pin_view.png}                           |  Bin 1003 -> 1003 bytes
 .../plugins/org.eclipse.jdt.doc.user/notices.html  |    4 +-
 .../plugins/org.eclipse.jdt.doc.user/plugin.xml    |    2 +
 .../breakpoints/images/ref-breakpoint_caught.PNG   |  Bin 17310 -> 6511 bytes
 .../images/ref-breakpoint_condition.PNG            |  Bin 20847 -> 5721 bytes
 .../breakpoints/images/ref-breakpoint_enabled.PNG  |  Bin 20729 -> 5719 bytes
 .../breakpoints/images/ref-breakpoint_entry.PNG    |  Bin 20531 -> 5624 bytes
 .../breakpoints/images/ref-breakpoint_exit.PNG     |  Bin 20477 -> 5601 bytes
 .../breakpoints/images/ref-breakpoint_hitcount.PNG |  Bin 20719 -> 5708 bytes
 .../images/ref-breakpoint_suspendpolicy.PNG        |  Bin 20771 -> 5716 bytes
 .../images/ref-breakpoint_suspendsubclass.PNG      |  Bin 17342 -> 6548 bytes
 .../breakpoints/images/ref-breakpoint_uncaught.PNG |  Bin 17356 -> 6570 bytes
 .../images/ref-watchpoint_access_option.PNG        |  Bin 15260 -> 5374 bytes
 .../breakpoints/images/ref-watchpoint_mod.PNG      |  Bin 15269 -> 5495 bytes
 .../appearance/ref-preferences-type-filters.htm    |   45 +-
 .../compiler/ref-preferences-errors-warnings.htm   |   52 +-
 .../java/compiler/ref-preferences-javadoc.htm      |   29 +-
 .../java/compiler/ref-preferences-task-tags.htm    |    2 -
 .../reference/preferences/java/debug/ref-debug.htm |  396 +-
 .../java/debug/ref-detail_formatters.htm           |  289 +-
 .../java/debug/ref-execution_environments.htm      |  204 +-
 .../preferences/java/debug/ref-heap_walking.htm    |  198 +-
 .../preferences/java/debug/ref-installed_jres.htm  |  258 +-
 .../java/debug/ref-logical_structures.htm          |  248 +-
 .../java/debug/ref-primitive_display_options.htm   |  212 +-
 .../preferences/java/debug/ref-step_filtering.htm  |  421 +-
 .../java/editor/ref-preferences-content-assist.htm |  104 +-
 .../java/editor/ref-preferences-typing.htm         |   18 +-
 .../java/ref-preferences-appearance.htm            |   19 +-
 .../preferences/java/ref-preferences-junit.htm     |   10 +-
 .../run-debug/images/ref-default_launchers.PNG     |  Bin 36302 -> 16046 bytes
 .../run-debug/images/ref-ext_string_subbed.PNG     |  Bin 50144 -> 23997 bytes
 .../run-debug/images/ref-lcd_string_subbed.PNG     |  Bin 48873 -> 21185 bytes
 .../run-debug/images/ref-string_sub.PNG            |  Bin 30974 -> 11612 bytes
 .../preferences/run-debug/ref-console.htm          |  375 +-
 .../run-debug/ref-default_launchers.htm            |  131 +-
 .../run-debug/ref-launch_configurations.htm        |  281 +-
 .../preferences/run-debug/ref-perspectives.htm     |  246 +-
 .../run-debug/ref-string_substitution.htm          |  188 +-
 .../preferences/run-debug/ref-view_management.htm  |  211 +-
 .../propertypages/images/rundebug-proppage.PNG     |  Bin 32729 -> 12554 bytes
 .../reference/ref-apt-factoryPath.htm              |    6 +-
 .../reference/ref-dialog-tostring.htm              |    4 +-
 .../reference/ref-icons.htm                        |   32 +-
 .../reference/ref-java-editor-breadcrumb.htm       |  101 +-
 .../reference/ref-java-editor-formatter.htm        |  125 +-
 .../reference/ref-java-editor-quickassist.htm      | 1496 +++--
 .../reference/ref-java-editor-quickfix.htm         |  524 +-
 .../reference/ref-jdt-faq.htm                      |  255 +-
 .../reference/ref-keybindings.htm                  |   12 +-
 .../reference/ref-menu-file.htm                    |    4 +-
 .../reference/ref-menu-navigate.htm                |   37 +-
 .../reference/ref-refactoring-extract-method.htm   |    3 +-
 .../reference/ref-toolbar-run.htm                  |    4 +-
 .../reference/ref-wizard-java-project.htm          |    4 +-
 .../reference/ref-wizard-refactorings.htm          |    6 +-
 .../images/ref-views_breakpoint_details.PNG        |  Bin 12490 -> 7498 bytes
 .../ref-views_breakpoint_properties_dialog.PNG     |  Bin 28147 -> 5546 bytes
 .../views/breakpoints/ref-breakpoints_view.htm     |    6 +-
 .../reference/views/console/ref-clear_action.htm   |    4 +-
 .../reference/views/console/ref-console_view.htm   |    4 +-
 .../reference/views/console/ref-prefs_action.htm   |    4 +-
 .../views/debug/images/ref-configdialog.PNG        |  Bin 31981 -> 15296 bytes
 .../views/debug/images/ref-properties_dialog.PNG   |  Bin 27648 -> 12240 bytes
 .../views/debug/images/ref-properties_dialog2.PNG  |  Bin 35462 -> 19025 bytes
 .../reference/views/debug/ref-breadcrumb.htm       |    4 +-
 .../reference/views/debug/ref-properties.htm       |    8 +-
 .../views/expressions/ref-expressions_view.htm     |    4 +-
 .../reference/views/ref-call-hierarchy.htm         |   79 +-
 .../reference/views/ref-type-hierarchy.htm         |   63 +-
 .../reference/views/ref-view-javadoc.htm           |  134 +
 .../reference/views/ref-view-junit.htm             |  312 +
 .../reference/views/ref-view-outline.htm           |   73 +-
 .../reference/views/ref-view-package-explorer.htm  |   52 +-
 .../reference/views/ref-view-scrapbook.htm         |   96 +-
 .../reference/views/ref-viewsandeditors.htm        |    7 +-
 .../views/shared/images/ref-viewlayoutmenu.PNG     |  Bin 14609 -> 17156 bytes
 .../reference/views/shared/ref-allinstances.htm    |    4 +-
 .../reference/views/shared/ref-contentassist.htm   |    4 +-
 .../reference/views/shared/ref-display.htm         |    6 +-
 .../reference/views/shared/ref-execute.htm         |    4 +-
 .../reference/views/shared/ref-findreplace.htm     |    6 +-
 .../reference/views/shared/ref-forcereturn.htm     |    4 +-
 .../reference/views/shared/ref-horizview.htm       |    8 +-
 .../reference/views/shared/ref-inspect.htm         |    6 +-
 .../reference/views/shared/ref-vertview.htm        |    8 +-
 .../views/shared/ref-viewlayoutcommands.htm        |    6 +-
 .../reference/views/shared/ref-viewonly.htm        |    5 +-
 .../views/variables/ref-variables_view.htm         |    4 +-
 .../reference/wizards/ref-export_breakpoints.htm   |    4 +-
 .../wizards/ref-export_launch_configs.htm          |    4 +-
 .../reference/wizards/ref-import_breakpoints.htm   |    4 +-
 .../wizards/ref-import_launch_configs.htm          |    4 +-
 .../tasks/task-ant_javac_adapter.htm               |   88 +
 .../tasks/task-launching_java_applet.htm           |    4 +-
 .../tasks/task-launching_java_program.htm          |    4 +-
 .../tasks/task-suppress_warnings.htm               |   56 +
 .../tasks/task-using_batch_compiler.htm            |  851 +++
 .../org.eclipse.jdt.doc.user/tasks/tasks-230.htm   |    4 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-231.htm   |  151 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-232.htm   |   70 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-32.htm    |   36 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-62.htm    |   61 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-63.htm    |   87 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-63a.htm   |   82 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-64.htm    |   65 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-72.htm    |   19 -
 .../org.eclipse.jdt.doc.user/tasks/tasks-73.htm    |   69 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-74.htm    |   77 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-75.htm    |   85 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-76.htm    |   88 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-77.htm    |   54 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-9.htm     |  177 +-
 .../org.eclipse.jdt.doc.user/tasks/tasks-JREs.htm  |  106 +-
 .../tasks/tasks-consoleAppearance.htm              |  102 +-
 .../tasks/tasks-debug-launch.htm                   |  110 +-
 .../tasks/tasks-executionArgs.htm                  |  107 +-
 .../tasks/tasks-java-local-configuration.htm       |  222 +-
 .../tips/images/assign-to-casted-quickfix.png      |  Bin 1889 -> 2501 bytes
 .../tips/images/focus-ovr.png                      |  Bin 0 -> 161 bytes
 .../tips/images/quick-outline-inherited.png        |  Bin 5671 -> 11291 bytes
 .../org.eclipse.jdt.doc.user/tips/jdt_tips.html    |   56 +-
 eclipse/plugins/org.eclipse.jdt.doc.user/toc.xml   |    8 +-
 .../org.eclipse.jdt.doc.user/topics_Concepts.xml   |    4 +-
 .../topics_GettingStarted.xml                      |    4 +-
 .../org.eclipse.jdt.doc.user/topics_Reference.xml  |   26 +-
 .../org.eclipse.jdt.doc.user/topics_Tasks.xml      |    9 +-
 .../org.eclipse.jdt.doc.user/topics_Tips.xml       |   14 +
 .../org.eclipse.jdt.doc.user/topics_WhatsNew.xml   |   13 +
 .../whatsNew/images/abstract-class-hl.png          |  Bin 0 -> 9977 bytes
 .../images/add-missing-case-statements.png         |  Bin 0 -> 5667 bytes
 .../whatsNew/images/annotations-in-javadoc.png     |  Bin 10352 -> 0 bytes
 .../whatsNew/images/assert-null-analysis.png       |  Bin 0 -> 9315 bytes
 .../background-computation-of-type-hierarchy.png   |  Bin 20643 -> 0 bytes
 .../whatsNew/images/bp-details.png                 |  Bin 25393 -> 0 bytes
 .../whatsNew/images/browser-preferences.png        |  Bin 11332 -> 0 bytes
 .../whatsNew/images/build-path-error-decorator.png |  Bin 6940 -> 0 bytes
 .../whatsNew/images/build-path-problems.png        |  Bin 9783 -> 0 bytes
 ...rmatter-preserve-space-line-comment-example.png |  Bin 0 -> 2560 bytes
 .../code-formatter-preserve-space-line-comment.png |  Bin 0 -> 6062 bytes
 .../whatsNew/images/code-select-inheritDoc.png     |  Bin 0 -> 5344 bytes
 .../whatsNew/images/condition-history.png          |  Bin 0 -> 6267 bytes
 .../whatsNew/images/edit-test-method.png           |  Bin 8199 -> 0 bytes
 .../images/enter-key-indent-preference.png         |  Bin 0 -> 5637 bytes
 .../whatsNew/images/escape-backslashes.png         |  Bin 0 -> 2601 bytes
 .../whatsNew/images/exchange-operands.png          |  Bin 0 -> 5333 bytes
 .../whatsNew/images/export-all-profiles.png        |  Bin 4900 -> 0 bytes
 .../whatsNew/images/extract-method-continue.png    |  Bin 1875 -> 0 bytes
 .../extract-method-multiple-return-values.png      |  Bin 8749 -> 0 bytes
 .../whatsNew/images/filter-getters-and-setters.png |  Bin 0 -> 29779 bytes
 .../images/find-externalized-strings-constants.png |  Bin 7229 -> 0 bytes
 .../whatsNew/images/focus-ovr.png                  |  Bin 0 -> 161 bytes
 ...matter-align-annotation-arguments-formatted.png |  Bin 1137 -> 0 bytes
 ...atter-align-annotation-arguments-preference.png |  Bin 2502 -> 0 bytes
 ...ormatter-align-method-declaration-formatted.png |  Bin 1741 -> 0 bytes
 ...rmatter-align-method-declaration-preference.png |  Bin 2105 -> 0 bytes
 ...ter-condense-multi-lines-comments-formatted.png |  Bin 1134 -> 0 bytes
 ...er-condense-multi-lines-comments-preference.png |  Bin 2478 -> 0 bytes
 ...formatter-disabling-enabling-tags-formatted.png |  Bin 7427 -> 0 bytes
 ...ormatter-disabling-enabling-tags-preference.png |  Bin 12725 -> 0 bytes
 .../formatter-new-line-after-label-formatted.png   |  Bin 903 -> 0 bytes
 .../formatter-new-line-after-label-preference.png  |  Bin 2577 -> 0 bytes
 .../formatter-newline-annotation-formatted.png     |  Bin 0 -> 7817 bytes
 .../formatter-newline-annotation-preference.png    |  Bin 0 -> 12659 bytes
 ...prefer-wrapping-outer-expressions-formatted.png |  Bin 1731 -> 0 bytes
 ...refer-wrapping-outer-expressions-preference.png |  Bin 3691 -> 0 bytes
 ...matter-skip-first-column-comments-formatted.png |  Bin 1376 -> 0 bytes
 ...atter-skip-first-column-comments-preference.png |  Bin 3654 -> 0 bytes
 .../whatsNew/images/instance-counts.png            |  Bin 10770 -> 0 bytes
 .../images/introduce-new-local-with-cast-type.png  |  Bin 0 -> 4561 bytes
 .../images/javadoc-untagged-type-params.png        |  Bin 0 -> 7621 bytes
 .../whatsNew/images/join-variable-declaration.png  |  Bin 0 -> 6933 bytes
 .../whatsNew/images/junit-4-suite-wizard.png       |  Bin 0 -> 20145 bytes
 .../whatsNew/images/junit-import-url.png           |  Bin 11123 -> 0 bytes
 .../whatsNew/images/junit-show-new-launches.png    |  Bin 0 -> 2772 bytes
 .../whatsNew/images/local-variable-unused.png      |  Bin 0 -> 3439 bytes
 .../whatsNew/images/method-can-be-static.png       |  Bin 0 -> 5499 bytes
 .../images/move-type-to-new-file-refactoring.png   |  Bin 10598 -> 0 bytes
 .../whatsNew/images/multifix-problem-hover.png     |  Bin 4522 -> 0 bytes
 .../whatsNew/images/open-declared-type.png         |  Bin 0 -> 2528 bytes
 .../images/open-implementation-command.png         |  Bin 2855 -> 0 bytes
 .../whatsNew/images/open-return-type.png           |  Bin 0 -> 3234 bytes
 .../whatsNew/images/open-super-implementation.png  |  Bin 0 -> 4817 bytes
 .../whatsNew/images/override.png                   |  Bin 6236 -> 0 bytes
 .../whatsNew/images/package-abbreviations-off.png  |  Bin 6743 -> 0 bytes
 .../whatsNew/images/package-abbreviations-on.png   |  Bin 6613 -> 0 bytes
 .../whatsNew/images/pin-call-hierarchy-view.png    |  Bin 0 -> 10745 bytes
 .../whatsNew/images/preference-filter.png          |  Bin 0 -> 9073 bytes
 .../images/preference-transfer-appearance.png      |  Bin 9942 -> 0 bytes
 .../whatsNew/images/preference-transfer-code.png   |  Bin 10022 -> 0 bytes
 .../images/preference-transfer-compiler.png        |  Bin 10118 -> 0 bytes
 .../whatsNew/images/prompt-on-deletion.png         |  Bin 0 -> 5742 bytes
 .../images/properties-file-editor-hover.png        |  Bin 0 -> 3919 bytes
 .../images/put-expression-in-parentheses.png       |  Bin 0 -> 5663 bytes
 .../images/put-expressions-in-parentheses.png      |  Bin 0 -> 7480 bytes
 .../images/quick-outline-inherited-for-nested.png  |  Bin 0 -> 19072 bytes
 .../whatsNew/images/refresh-element-action.png     |  Bin 5626 -> 0 bytes
 .../whatsNew/images/remove-from-view-action.png    |  Bin 11248 -> 0 bytes
 .../whatsNew/images/search-in-options.png          |  Bin 0 -> 11351 bytes
 .../source-attachments-in-referenced-JARs.png      |  Bin 17017 -> 0 bytes
 .../whatsNew/images/suppress-optional-errors.png   |  Bin 6549 -> 0 bytes
 .../whatsNew/images/suppresswarnings-javadoc.png   |  Bin 0 -> 5414 bytes
 .../unavoidable-generic-type-problems-example.png  |  Bin 0 -> 7691 bytes
 .../images/unavoidable-generic-type-problems.png   |  Bin 0 -> 7314 bytes
 .../whatsNew/images/unescape-backslashes.png       |  Bin 0 -> 2604 bytes
 .../whatsNew/images/unused-object-allocation.png   |  Bin 6302 -> 0 bytes
 .../whatsNew/images/value-in-javadoc.png           |  Bin 7031 -> 0 bytes
 .../whatsNew/jdt_whatsnew.html                     |  943 ++--
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../jdt/internal/junit/JUnitCorePlugin.java        |    8 +-
 .../internal/junit/JUnitPreferencesConstants.java  |    8 +-
 .../internal/junit/JunitPreferenceInitializer.java |   27 +-
 .../internal/junit/buildpath/BuildPathSupport.java |   94 +-
 .../junit/buildpath/JUnitContainerInitializer.java |    6 +-
 .../jdt/internal/junit/model/JUnitModel.java       |   21 +-
 .../jdt/internal/junit/model/ModelMessages.java    |    5 +-
 .../internal/junit/model/ModelMessages.properties  |    6 +-
 .../junit/model/RemoteTestRunnerClient.java        |   83 +-
 .../jdt/internal/junit/model/TestRunHandler.java   |   25 +-
 .../jdt/internal/junit/model/TestRunSession.java   |   16 +-
 .../src/org/eclipse/jdt/junit/JUnitCore.java       |   83 +
 .../eclipse/jdt/junit/model/ITestSuiteElement.java |    9 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../junit/runner/junit3/JUnit3TestLoader.java      |    4 +-
 eclipse/plugins/org.eclipse.jdt.junit/.classpath   |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   25 +-
 .../org.eclipse.jdt.junit/META-INF/MANIFEST.MF     |    7 +-
 .../plugins/org.eclipse.jdt.junit/build.properties |    4 +-
 .../junit/launcher/TestSelectionDialog.java        |    5 +
 .../junit/buildpath/JUnitContainerWizardPage.java  |   19 +-
 .../internal/junit/launcher/AssertionVMArg.java    |    4 +-
 .../jdt/internal/junit/launcher/JUnitTabGroup.java |    3 +-
 .../junit/refactoring/JUnitRenameParticipant.java  |   25 +-
 .../junit/refactoring/LaunchConfigChange.java      |    6 +-
 .../refactoring/LaunchConfigRenameChange.java      |    6 +-
 .../LaunchConfigSetAttributeChange.java            |    6 +-
 .../refactoring/ProjectRenameParticipant.java      |    4 +-
 .../junit/refactoring/TypeRenameParticipant.java   |    2 +
 .../jdt/internal/junit/ui/CompareResultDialog.java |   32 +-
 .../internal/junit/ui/CompareResultsAction.java    |    3 +-
 .../internal/junit/ui/CopyFailureListAction.java   |    6 +-
 .../internal/junit/ui/EnableStackFilterAction.java |    3 +-
 .../junit/ui/GotoReferencedTestAction.java         |   14 +-
 .../internal/junit/ui/JUnitAddLibraryProposal.java |    6 +-
 .../junit/ui/JUnitClasspathFixProcessor.java       |   16 +-
 .../jdt/internal/junit/ui/JUnitCopyAction.java     |    3 +-
 .../jdt/internal/junit/ui/JUnitMessages.java       |   10 +-
 .../jdt/internal/junit/ui/JUnitMessages.properties |    4 +
 .../eclipse/jdt/internal/junit/ui/JUnitPlugin.java |   22 +-
 .../jdt/internal/junit/ui/JUnitPreferencePage.java |   82 +-
 .../jdt/internal/junit/ui/JUnitProgressBar.java    |    4 +-
 .../internal/junit/ui/JUnitQuickFixProcessor.java  |   27 +-
 .../junit/ui/JUnitUIPreferencesConstants.java      |   48 +
 .../jdt/internal/junit/ui/OpenEditorAction.java    |   17 +-
 .../internal/junit/ui/OpenEditorAtLineAction.java  |    4 +-
 .../jdt/internal/junit/ui/OpenTestAction.java      |   22 +-
 .../eclipse/jdt/internal/junit/ui/RerunAction.java |    3 +-
 .../jdt/internal/junit/ui/ScrollLockAction.java    |    3 +-
 .../internal/junit/ui/ShowNextFailureAction.java   |    3 +-
 .../junit/ui/ShowPreviousFailureAction.java        |    3 +-
 .../junit/ui/TestMethodSelectionDialog.java        |   22 +-
 .../jdt/internal/junit/ui/TestRunnerViewPart.java  |  197 +-
 .../junit/ui/TestSessionLabelProvider.java         |    4 +-
 .../junit/ui/TestSessionTableContentProvider.java  |    9 +-
 .../eclipse/jdt/internal/junit/ui/TestViewer.java  |   63 +-
 .../jdt/internal/junit/ui/UITestRunListener.java   |    3 +-
 .../junit/util/CheckedTableSelectionDialog.java    |   21 +-
 .../jdt/internal/junit/util/JUnitStubUtility.java  |    7 +-
 .../eclipse/jdt/internal/junit/util/Resources.java |   26 +-
 .../jdt/internal/junit/util/TestSearchEngine.java  |    4 +-
 .../jdt/internal/junit/wizards/JUnitWizard.java    |    3 +-
 .../junit/wizards/NewTestCaseCreationWizard.java   |   14 +-
 .../junit/wizards/NewTestSuiteCreationWizard.java  |    5 +-
 .../junit/wizards/SuiteClassesContentProvider.java |   50 +-
 .../internal/junit/wizards/UpdateTestSuite.java    |  199 +-
 .../jdt/internal/junit/wizards/WizardMessages.java |    6 +
 .../junit/wizards/WizardMessages.properties        |    6 +
 .../launcher/JUnitLaunchConfigurationTab.java      |   42 +-
 .../jdt/junit/launcher/JUnitLaunchShortcut.java    |   23 +-
 .../junit/wizards/NewTestCaseWizardPageOne.java    |  243 +-
 .../junit/wizards/NewTestCaseWizardPageTwo.java    |   23 +-
 .../jdt/junit/wizards/NewTestSuiteWizardPage.java  |  263 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../internal/junit4/runner/JUnit4TestLoader.java   |   36 +-
 .../junit4/runner/JUnit4TestMethodReference.java   |    9 +-
 .../junit4/runner/JUnit4TestReference.java         |    5 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  176 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../macosx/MacOSXLauncherMessages.properties       |    4 +-
 .../launching/macosx/MacOSXVMInstallType.java      |   75 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   67 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../internal/ui/macbundler/BundleWizardPage3.java  |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  208 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.jdt.launching/META-INF/MANIFEST.MF |    2 +-
 .../launching/DefaultProjectClasspathEntry.java    |   10 +-
 .../launching/EECompilationParticipant.java        |   16 +-
 .../launching/JREPreferenceModifyListener.java     |    5 +-
 .../jdt/internal/launching/LaunchingMessages.java  |    6 +-
 .../launching/LaunchingMessages.properties         |    5 +-
 .../jdt/internal/launching/LaunchingPlugin.java    |  210 +-
 .../launching/LaunchingPreferenceInitializer.java  |    7 +-
 .../jdt/internal/launching/MacInstalledJREs.java   |  190 +
 .../jdt/internal/launching/PListParser.java        |  237 +
 .../ProjectClasspathVariableResolver.java          |  100 +
 .../jdt/internal/launching/StandardVMDebugger.java |   32 +-
 .../jdt/internal/launching/StandardVMType.java     |  234 +-
 .../internal/launching/VMDefinitionsContainer.java |  105 +-
 .../environments/EnvironmentMessages.java          |    5 +-
 .../environments/EnvironmentMessages.properties    |    5 +-
 .../environments/EnvironmentsManager.java          |   39 +-
 .../environments/ExecutionEnvironment.java         |   32 +-
 .../ExecutionEnvironmentVariableResolver.java      |   52 +
 .../eclipse/jdt/launching/AbstractVMInstall.java   |   13 +-
 .../org/eclipse/jdt/launching/JavaRuntime.java     |  174 +-
 .../org.eclipse.jdt.launching/plugin.properties    |    5 +-
 .../plugins/org.eclipse.jdt.launching/plugin.xml   |   13 +
 .../org.eclipse.jdt.launching/r3_0_changes.html    |   57 -
 .../scripts/buildLaunchingSupportJAR.xml           |    5 +-
 .../launching/support/LibraryDetector.java         |   19 +-
 eclipse/plugins/org.eclipse.jdt.ui/.classpath      |    2 +-
 .../Build Jar in Jar Loader.launch                 |    2 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   48 +-
 .../.settings/org.eclipse.jdt.ui.prefs             |    4 +-
 .../org.eclipse.jdt.ui/META-INF/MANIFEST.MF        |   16 +-
 .../plugins/org.eclipse.jdt.ui/build.properties    |    5 +-
 .../internal/corext/buildpath/BuildpathDelta.java  |   26 +-
 .../internal/corext/buildpath/CPJavaProject.java   |   22 +-
 .../corext/buildpath/ClasspathModifier.java        |  140 +-
 .../corext/callhierarchy/CallHierarchy.java        |   28 +-
 .../corext/callhierarchy/CallLocation.java         |    5 +-
 .../callhierarchy/CallSearchResultCollector.java   |   12 +-
 .../callhierarchy/CalleeAnalyzerVisitor.java       |   37 +-
 .../corext/callhierarchy/CalleeMethodWrapper.java  |   28 +-
 .../corext/callhierarchy/CallerMethodWrapper.java  |   14 +-
 .../corext/callhierarchy/IImplementorFinder.java   |    6 +-
 .../corext/callhierarchy/Implementors.java         |   18 +-
 .../callhierarchy/JavaImplementorFinder.java       |   10 +-
 .../internal/corext/callhierarchy/MethodCall.java  |   12 +-
 .../MethodReferencesSearchRequestor.java           |    7 +-
 .../corext/callhierarchy/MethodWrapper.java        |   45 +-
 .../internal/corext/callhierarchy/RealCallers.java |    4 +-
 .../AddDelegateMethodsOperation.java               |    4 +-
 .../codemanipulation/AddGetterSetterOperation.java |    8 +-
 .../codemanipulation/AddImportsOperation.java      |   10 +-
 .../AddUnimplementedConstructorsOperation.java     |    8 +-
 .../AddUnimplementedMethodsOperation.java          |    8 +-
 .../ContextSensitiveImportRewriteContext.java      |   14 +-
 .../GenerateHashCodeEqualsOperation.java           |   24 +-
 .../corext/codemanipulation/GetterSetterUtil.java  |   15 +-
 .../ImportReferencesCollector.java                 |   57 +-
 .../codemanipulation/OrganizeImportsOperation.java |   82 +-
 .../codemanipulation/SortMembersOperation.java     |   21 +-
 .../corext/codemanipulation/StubUtility.java       |   74 +-
 .../corext/codemanipulation/StubUtility2.java      |  180 +-
 .../AbstractToStringGenerator.java                 |   18 +-
 .../tostringgeneration/CustomBuilderGenerator.java |   30 +-
 .../GenerateToStringOperation.java                 |   22 +-
 .../StringBuilderChainGenerator.java               |    5 +-
 .../tostringgeneration/StringBuilderGenerator.java |    6 +-
 .../StringConcatenationGenerator.java              |    7 +-
 .../tostringgeneration/StringFormatGenerator.java  |   13 +-
 .../ToStringGenerationContext.java                 |    2 +-
 .../ToStringGenerationSettings.java                |    2 +-
 .../tostringgeneration/ToStringTemplateParser.java |   22 +-
 .../jdt/internal/corext/dom/ASTBatchParser.java    |   27 +-
 .../jdt/internal/corext/dom/ASTFlattener.java      |  268 +-
 .../jdt/internal/corext/dom/ASTNodeFactory.java    |   25 +-
 .../eclipse/jdt/internal/corext/dom/ASTNodes.java  |  133 +-
 .../eclipse/jdt/internal/corext/dom/Bindings.java  |   82 +-
 .../corext/dom/BodyDeclarationRewrite.java         |    4 +-
 .../jdt/internal/corext/dom/CodeScopeBuilder.java  |   55 +-
 .../jdt/internal/corext/dom/GenericVisitor.java    |  168 +-
 .../corext/dom/HierarchicalASTVisitor.java         |  179 +-
 .../jdt/internal/corext/dom/JdtASTMatcher.java     |    3 +-
 .../jdt/internal/corext/dom/LinkedNodeFinder.java  |   28 +-
 .../internal/corext/dom/LocalVariableIndex.java    |    4 +-
 .../jdt/internal/corext/dom/ModifierRewrite.java   |   61 +-
 .../corext/dom/NecessaryParenthesesChecker.java    |  302 +
 .../jdt/internal/corext/dom/ScopeAnalyzer.java     |   67 +-
 .../eclipse/jdt/internal/corext/dom/Selection.java |    3 +-
 .../jdt/internal/corext/dom/SelectionAnalyzer.java |   25 +-
 .../jdt/internal/corext/dom/StatementRewrite.java  |    3 +-
 .../eclipse/jdt/internal/corext/dom/TypeRules.java |  103 +-
 .../corext/dom/VariableDeclarationRewrite.java     |  128 +-
 .../corext/dom/fragments/ASTFragmentFactory.java   |    7 +-
 .../dom/fragments/ASTMatchingFragmentFinder.java   |    8 +-
 .../AssociativeInfixExpressionFragment.java        |   88 +-
 .../corext/dom/fragments/SimpleFragment.java       |    5 +-
 .../jdt/internal/corext/fix/AbstractFix.java       |    6 +-
 .../corext/fix/AbstractSerialVersionOperation.java |    3 +-
 .../fix/AddUnimplementedMethodsOperation.java      |    4 +-
 .../jdt/internal/corext/fix/CleanUpConstants.java  |    8 +-
 .../corext/fix/CleanUpPostSaveListener.java        |   68 +-
 .../internal/corext/fix/CleanUpPreferenceUtil.java |   75 +-
 .../internal/corext/fix/CleanUpRefactoring.java    |  152 +-
 .../jdt/internal/corext/fix/CleanUpRegistry.java   |   35 +-
 .../jdt/internal/corext/fix/CodeFormatFix.java     |    8 +-
 .../jdt/internal/corext/fix/CodeStyleFix.java      |   54 +-
 .../fix/CompilationUnitRewriteOperationsFix.java   |    4 +-
 .../internal/corext/fix/ControlStatementsFix.java  |   29 +-
 .../corext/fix/ConvertForLoopOperation.java        |   31 +-
 .../corext/fix/ConvertIterableLoopOperation.java   |   54 +-
 .../jdt/internal/corext/fix/ConvertLoopFix.java    |   21 +-
 .../internal/corext/fix/ConvertLoopOperation.java  |   10 +-
 .../jdt/internal/corext/fix/ExpressionsFix.java    |  229 +-
 .../jdt/internal/corext/fix/FixMessages.java       |   10 +-
 .../jdt/internal/corext/fix/FixMessages.properties |   12 +-
 .../eclipse/jdt/internal/corext/fix/Java50Fix.java |   84 +-
 .../internal/corext/fix/LinkedProposalModel.java   |   14 +-
 .../corext/fix/LinkedProposalPositionGroup.java    |   97 +-
 .../fix/PotentialProgrammingProblemsFix.java       |   32 +-
 .../corext/fix/SerialVersionDefaultOperation.java  |    4 +-
 .../eclipse/jdt/internal/corext/fix/StringFix.java |   12 +-
 .../internal/corext/fix/UnimplementedCodeFix.java  |    8 +-
 .../jdt/internal/corext/fix/UnusedCodeFix.java     |  103 +-
 .../corext/fix/VariableDeclarationFix.java         |  103 +-
 .../corext/javadoc/JavaDocCommentReader.java       |    5 +-
 .../internal/corext/javadoc/JavaDocLocations.java  |   33 +-
 .../template/java/AbstractJavaContextType.java     |   25 +-
 .../template/java/AbstractVariableResolver.java    |   16 +-
 .../corext/template/java/CodeTemplateContext.java  |    8 +-
 .../template/java/CodeTemplateContextType.java     |   11 +-
 .../template/java/CompilationUnitCompletion.java   |   69 +-
 .../template/java/CompilationUnitContextType.java  |   41 +-
 .../corext/template/java/ElementTypeResolver.java  |    7 +-
 .../java/ExceptionVariableNameResolver.java        |    3 +-
 .../corext/template/java/FieldResolver.java        |    3 +-
 .../corext/template/java/ImportsResolver.java      |   10 +-
 .../internal/corext/template/java/JavaContext.java |   36 +-
 .../corext/template/java/JavaContextType.java      |    3 +-
 .../corext/template/java/JavaDocContext.java       |    7 +-
 .../corext/template/java/JavaDocContextType.java   |   37 +-
 .../corext/template/java/JavaFormatter.java        |   38 +-
 .../corext/template/java/JavaTemplateMessages.java |    4 +-
 .../template/java/JavaTemplateMessages.properties  |    4 +-
 .../corext/template/java/JavaVariable.java         |    3 +-
 .../corext/template/java/LinkResolver.java         |   10 +-
 .../corext/template/java/LocalVarResolver.java     |    3 +-
 .../corext/template/java/NameResolver.java         |    9 +-
 .../corext/template/java/SWTContextType.java       |    3 +-
 .../corext/template/java/StaticImportResolver.java |   10 +-
 .../internal/corext/template/java/TemplateSet.java |   24 +-
 .../corext/template/java/TypeResolver.java         |    7 +-
 .../corext/template/java/TypeVariableResolver.java |    9 +-
 .../internal/corext/template/java/VarResolver.java |    3 +-
 .../internal/corext/util/CodeFormatterUtil.java    |   50 +-
 .../jdt/internal/corext/util/CollectionsUtil.java  |   37 +
 .../corext/util/DelegateEntryComparator.java       |   14 +-
 .../eclipse/jdt/internal/corext/util/History.java  |   27 +-
 .../corext/util/JavaElementResourceMapping.java    |   48 +-
 .../jdt/internal/corext/util/JavaModelUtil.java    |   62 +-
 .../eclipse/jdt/internal/corext/util/LRUMap.java   |   25 +-
 .../internal/corext/util/MethodOverrideTester.java |   82 +-
 .../util/MethodsSourcePositionComparator.java      |   13 +-
 .../jdt/internal/corext/util/OpenTypeHistory.java  |   31 +-
 .../corext/util/QualifiedTypeNameHistory.java      |    5 +-
 .../jdt/internal/corext/util/Resources.java        |   24 +-
 .../corext/util/SuperTypeHierarchyCache.java       |   27 +-
 .../corext/util/TypeNameMatchCollector.java        |   22 +-
 .../AbstractJavaElementRenameChange.java           |    5 +-
 .../jdt/internal/corext/refactoring/Checks.java    |   28 +-
 .../refactoring/CollectingSearchRequestor.java     |    9 +-
 .../refactoring/CuCollectingSearchRequestor.java   |    4 +-
 .../internal/corext/refactoring/ExceptionInfo.java |    3 +-
 .../JDTRefactoringDescriptorComment.java           |   11 +-
 .../refactoring/JavaRefactoringArguments.java      |    9 +-
 .../internal/corext/refactoring/ParameterInfo.java |    3 +-
 .../refactoring/RefactoringAvailabilityTester.java |   73 +-
 .../refactoring/RefactoringCoreMessages.java       |    4 +-
 .../refactoring/RefactoringExecutionStarter.java   |    6 +-
 .../refactoring/RefactoringScopeFactory.java       |   34 +-
 .../refactoring/RefactoringSearchEngine.java       |   45 +-
 .../refactoring/RefactoringSearchEngine2.java      |  110 +-
 .../corext/refactoring/ReturnTypeInfo.java         |    3 +-
 .../corext/refactoring/SearchResultGroup.java      |   15 +-
 .../corext/refactoring/TypeContextChecker.java     |  101 +-
 .../internal/corext/refactoring/TypedSource.java   |   35 +-
 .../corext/refactoring/base/JavaStatusContext.java |   21 +-
 .../refactoring/base/JavaStringStatusContext.java  |    3 +-
 .../base/ReferencesInBinaryContext.java            |    8 +-
 .../binary/AbstractCodeCreationOperation.java      |   10 +-
 .../binary/SourceCreationOperation.java            |    7 +-
 .../refactoring/binary/StubCreationOperation.java  |    9 +-
 .../corext/refactoring/binary/StubCreator.java     |   60 +-
 .../refactoring/changes/AbstractDeleteChange.java  |    3 +-
 .../refactoring/changes/ClasspathChange.java       |   10 +-
 .../changes/CompilationUnitReorgChange.java        |    5 +-
 .../changes/CopyCompilationUnitChange.java         |    4 +-
 .../refactoring/changes/CopyPackageChange.java     |    4 +-
 .../changes/CopyPackageFragmentRootChange.java     |    4 +-
 .../refactoring/changes/CopyResourceChange.java    |    5 +-
 .../changes/CreateCompilationUnitChange.java       |    3 +-
 .../refactoring/changes/CreatePackageChange.java   |    7 +-
 .../changes/DeletePackageFragmentRootChange.java   |   16 +-
 .../changes/DeleteSourceManipulationChange.java    |    6 +-
 .../DynamicValidationRefactoringChange.java        |    3 +-
 .../changes/DynamicValidationStateChange.java      |    7 +-
 .../changes/MoveCompilationUnitChange.java         |    8 +-
 .../refactoring/changes/MovePackageChange.java     |    4 +-
 .../changes/MovePackageFragmentRootChange.java     |    4 +-
 .../changes/MultiStateCompilationUnitChange.java   |    4 +-
 .../changes/PackageFragmentRootReorgChange.java    |    5 +-
 .../refactoring/changes/PackageReorgChange.java    |    5 +-
 .../changes/RenameCompilationUnitChange.java       |    6 +-
 .../changes/RenameJavaProjectChange.java           |    6 +-
 .../refactoring/changes/RenamePackageChange.java   |   25 +-
 .../changes/RenameSourceFolderChange.java          |    7 +-
 .../changes/UndoDeleteResourceChange.java          |    8 +-
 .../changes/UndoablePackageDeleteChange.java       |   11 +-
 .../refactoring/code/AstMatchingNodeFinder.java    |   93 +-
 .../corext/refactoring/code/CallContext.java       |    6 +-
 .../corext/refactoring/code/CallInliner.java       |  154 +-
 .../corext/refactoring/code/ConstantChecks.java    |   14 +-
 .../code/ConvertAnonymousToNestedRefactoring.java  |  140 +-
 .../corext/refactoring/code/ExceptionAnalyzer.java |   10 +-
 .../code/ExtractConstantRefactoring.java           |   82 +-
 .../refactoring/code/ExtractMethodAnalyzer.java    |   55 +-
 .../refactoring/code/ExtractMethodRefactoring.java |  160 +-
 .../refactoring/code/ExtractTempRefactoring.java   |   53 +-
 .../code/InlineConstantRefactoring.java            |   66 +-
 .../refactoring/code/InlineMethodRefactoring.java  |   22 +-
 .../refactoring/code/InlineTempRefactoring.java    |   19 +-
 .../code/IntroduceFactoryRefactoring.java          |   53 +-
 .../code/IntroduceIndirectionRefactoring.java      |   80 +-
 .../code/IntroduceParameterRefactoring.java        |   43 +-
 .../corext/refactoring/code/Invocations.java       |   97 +-
 .../corext/refactoring/code/LocalTypeAnalyzer.java |   16 +-
 .../corext/refactoring/code/NameCollector.java     |   12 +-
 .../refactoring/code/OperatorPrecedence.java       |   10 +-
 .../corext/refactoring/code/ParameterData.java     |   12 +-
 .../code/PromoteTempToFieldRefactoring.java        |   70 +-
 .../code/ReplaceInvocationsRefactoring.java        |   33 +-
 .../corext/refactoring/code/SnippetFinder.java     |   38 +-
 .../corext/refactoring/code/SourceAnalyzer.java    |  120 +-
 .../corext/refactoring/code/SourceProvider.java    |  183 +-
 .../corext/refactoring/code/TargetProvider.java    |   87 +-
 .../refactoring/code/TempAssignmentFinder.java     |    5 +-
 .../refactoring/code/flow/BranchFlowInfo.java      |    4 +-
 .../corext/refactoring/code/flow/FlowAnalyzer.java |  128 +-
 .../corext/refactoring/code/flow/FlowContext.java  |   16 +-
 .../corext/refactoring/code/flow/FlowInfo.java     |   36 +-
 .../refactoring/code/flow/InOutFlowAnalyzer.java   |   21 +-
 .../refactoring/code/flow/InputFlowAnalyzer.java   |   20 +-
 .../refactoring/delegates/DelegateCreator.java     |    4 +-
 .../delegates/DelegateFieldCreator.java            |   10 +-
 .../delegates/DelegateMethodCreator.java           |   22 +-
 .../generics/ElementStructureEnvironment.java      |    8 +-
 .../InferTypeArgumentsConstraintCreator.java       |   75 +-
 .../InferTypeArgumentsConstraintsSolver.java       |  103 +-
 .../generics/InferTypeArgumentsRefactoring.java    |  111 +-
 .../generics/InferTypeArgumentsTCModel.java        |  100 +-
 .../generics/InferTypeArgumentsUpdate.java         |   14 +-
 .../generics/ParametricStructureComputer.java      |   49 +-
 .../refactoring/nls/AccessorClassCreator.java      |   16 +-
 .../refactoring/nls/AccessorClassModifier.java     |   36 +-
 .../refactoring/nls/AccessorClassReference.java    |    8 +-
 .../nls/NLSAccessorFieldRenameParticipant.java     |    7 +-
 .../corext/refactoring/nls/NLSElement.java         |    3 +-
 .../internal/corext/refactoring/nls/NLSHint.java   |   17 +-
 .../corext/refactoring/nls/NLSHintHelper.java      |   23 +-
 .../internal/corext/refactoring/nls/NLSLine.java   |   13 +-
 .../refactoring/nls/NLSPropertyFileModifier.java   |   42 +-
 .../corext/refactoring/nls/NLSRefactoring.java     |   10 +-
 .../corext/refactoring/nls/NLSScanner.java         |   16 +-
 .../corext/refactoring/nls/NLSSourceModifier.java  |   11 +-
 .../internal/corext/refactoring/nls/NLSUtil.java   |   12 +-
 .../refactoring/nls/PropertyFileDocumentModel.java |  106 +-
 .../refactoring/nls/changes/CreateFileChange.java  |    6 +-
 .../refactoring/participants/JavaProcessors.java   |    6 +-
 .../participants/RefactoringProcessors.java        |    6 +-
 .../participants/ResourceModifications.java        |   70 +-
 .../participants/ResourceProcessors.java           |   16 +-
 .../corext/refactoring/refactoring.properties      |    3 +-
 .../refactoring/rename/JavaRenameProcessor.java    |    4 +-
 .../rename/MethodOccurenceCollector.java           |    3 +-
 .../refactoring/rename/RefactoringAnalyzeUtil.java |   18 +-
 .../rename/RefactoringHandleTransplanter.java      |   16 +-
 .../refactoring/rename/RefactoringScanner.java     |   19 +-
 .../refactoring/rename/RenameAnalyzeUtil.java      |   49 +-
 .../rename/RenameCompilationUnitProcessor.java     |   15 +-
 .../rename/RenameEnumConstProcessor.java           |    9 +-
 .../refactoring/rename/RenameFieldProcessor.java   |   18 +-
 .../rename/RenameJavaProjectProcessor.java         |   13 +-
 .../rename/RenameLocalVariableProcessor.java       |   15 +-
 .../refactoring/rename/RenameMethodProcessor.java  |  102 +-
 .../refactoring/rename/RenameModifications.java    |   35 +-
 .../rename/RenameNonVirtualMethodProcessor.java    |    5 +-
 .../refactoring/rename/RenamePackageProcessor.java |  123 +-
 .../rename/RenameSourceFolderProcessor.java        |   13 +-
 .../rename/RenameTypeParameterProcessor.java       |   15 +-
 .../refactoring/rename/RenameTypeProcessor.java    |  148 +-
 .../rename/RenameVirtualMethodProcessor.java       |   25 +-
 .../refactoring/rename/RenamingNameSuggestor.java  |    6 +-
 .../refactoring/rename/RippleMethodFinder2.java    |  149 +-
 .../refactoring/rename/TempDeclarationFinder.java  |    4 +-
 .../refactoring/rename/TempOccurrenceAnalyzer.java |   25 +-
 .../refactoring/rename/TextMatchUpdater.java       |   24 +-
 .../rename/TypeOccurrenceCollector.java            |    3 +-
 .../refactoring/reorg/ASTNodeDeleteUtil.java       |   19 +-
 .../refactoring/reorg/ArrayTypeConverter.java      |   22 +-
 .../refactoring/reorg/CopyModifications.java       |   22 +-
 .../reorg/CreateCopyOfCompilationUnitChange.java   |    5 +-
 .../reorg/CreateTargetExecutionLog.java            |    4 +-
 .../refactoring/reorg/DeleteChangeCreator.java     |   20 +-
 .../refactoring/reorg/DeleteModifications.java     |   30 +-
 .../refactoring/reorg/JavaCopyProcessor.java       |   20 +-
 .../refactoring/reorg/JavaDeleteProcessor.java     |  139 +-
 .../refactoring/reorg/JavaElementTransfer.java     |    6 +-
 .../refactoring/reorg/JavaMoveProcessor.java       |   20 +-
 .../reorg/LoggedCreateTargetChange.java            |    6 +-
 .../reorg/LoggedCreateTargetQueries.java           |    6 +-
 .../refactoring/reorg/MoveCuUpdateCreator.java     |   25 +-
 .../refactoring/reorg/MoveModifications.java       |   31 +-
 .../corext/refactoring/reorg/OverwriteHelper.java  |   22 +-
 .../corext/refactoring/reorg/ParentChecker.java    |   14 +-
 .../reorg/RefactoringModifications.java            |    8 +-
 .../refactoring/reorg/ReorgPolicyFactory.java      |  253 +-
 .../corext/refactoring/reorg/ReorgUtils.java       |  124 +-
 .../refactoring/reorg/SourceReferenceUtil.java     |   34 +-
 ...angeMethodSignatureRefactoringContribution.java |    5 +-
 .../ChangeTypeRefactoringContribution.java         |    5 +-
 .../ConvertAnonymousRefactoringContribution.java   |    5 +-
 .../scripting/CopyRefactoringContribution.java     |    5 +-
 .../scripting/DeleteRefactoringContribution.java   |    5 +-
 .../scripting/ExtractClassContribution.java        |    5 +-
 .../ExtractConstantRefactoringContribution.java    |    5 +-
 .../ExtractInterfaceRefactoringContribution.java   |    5 +-
 .../ExtractMethodRefactoringContribution.java      |    5 +-
 .../ExtractSupertypeRefactoringContribution.java   |    5 +-
 .../ExtractTempRefactoringContribution.java        |    5 +-
 .../InferTypeArgumentsRefactoringContribution.java |    5 +-
 .../InlineConstantRefactoringContribution.java     |    5 +-
 .../InlineMethodRefactoringContribution.java       |   15 +-
 .../InlineTempRefactoringContribution.java         |    5 +-
 .../IntroduceFactoryRefactoringContribution.java   |    5 +-
 ...ntroduceIndirectionRefactoringContribution.java |    5 +-
 .../IntroduceParameterObjectContribution.java      |    5 +-
 .../IntroduceParameterRefactoringContribution.java |    5 +-
 .../MoveMemberTypeRefactoringContribution.java     |    5 +-
 .../MoveMethodRefactoringContribution.java         |    5 +-
 .../scripting/MoveRefactoringContribution.java     |    5 +-
 .../MoveStaticMembersRefactoringContribution.java  |    5 +-
 .../PromoteTempToFieldRefactoringContribution.java |    5 +-
 .../scripting/PullUpRefactoringContribution.java   |    5 +-
 .../scripting/PushDownRefactoringContribution.java |    5 +-
 ...nameCompilationUnitRefactoringContribution.java |    5 +-
 .../RenameEnumConstRefactoringContribution.java    |    5 +-
 .../RenameFieldRefactoringContribution.java        |    5 +-
 .../RenameJavaProjectRefactoringContribution.java  |    5 +-
 ...RenameLocalVariableRefactoringContribution.java |    5 +-
 .../RenameMethodRefactoringContribution.java       |    5 +-
 .../RenamePackageRefactoringContribution.java      |    5 +-
 .../RenameSourceFolderRefactoringContribution.java |    5 +-
 ...RenameTypeParameterRefactoringContribution.java |    5 +-
 .../RenameTypeRefactoringContribution.java         |    5 +-
 .../SelfEncapsulateRefactoringContribution.java    |    5 +-
 .../UseSupertypeRefactoringContribution.java       |    5 +-
 .../corext/refactoring/sef/AccessAnalyzer.java     |   24 +-
 .../sef/SelfEncapsulateFieldRefactoring.java       |   67 +-
 .../refactoring/structure/ASTNodeSearchUtil.java   |   12 +-
 .../structure/ChangeSignatureProcessor.java        |  479 +-
 .../structure/ChangeTypeRefactoring.java           |  185 +-
 .../structure/CompilationUnitRewrite.java          |   17 +-
 .../structure/ConstructorReferenceFinder.java      |   42 +-
 .../structure/ExtractClassRefactoring.java         |   85 +-
 .../ExtractInterfaceConstraintsSolver.java         |    3 +-
 .../structure/ExtractInterfaceProcessor.java       |   65 +-
 .../structure/ExtractSupertypeProcessor.java       |  116 +-
 .../refactoring/structure/HierarchyProcessor.java  |   46 +-
 .../structure/IDefaultValueAdvisor.java            |    4 +-
 .../refactoring/structure/ImportRemover.java       |   61 +-
 .../refactoring/structure/ImportRewriteUtil.java   |   34 +-
 .../IntroduceParameterObjectProcessor.java         |  137 +-
 .../refactoring/structure/MemberCheckUtil.java     |    6 +-
 .../structure/MemberVisibilityAdjustor.java        |   90 +-
 .../structure/MoveInnerToTopRefactoring.java       |  155 +-
 .../structure/MoveInstanceMethodProcessor.java     |  228 +-
 .../structure/MoveStaticMemberAnalyzer.java        |    6 +-
 .../structure/MoveStaticMembersProcessor.java      |   86 +-
 .../refactoring/structure/MovedMemberAnalyzer.java |    8 +-
 .../structure/ParameterObjectFactory.java          |   69 +-
 .../structure/PullUpRefactoringProcessor.java      |  322 +-
 .../structure/PushDownRefactoringProcessor.java    |  128 +-
 .../refactoring/structure/ReferenceAnalyzer.java   |   14 +-
 .../refactoring/structure/ReferenceFinderUtil.java |   66 +-
 .../refactoring/structure/TypeVariableMaplet.java  |    4 +-
 .../refactoring/structure/TypeVariableUtil.java    |   22 +-
 .../structure/UseSuperTypeProcessor.java           |   30 +-
 .../constraints/ConditionalTypeConstraint.java     |    5 +-
 .../constraints/CovariantTypeConstraint.java       |    5 +-
 .../constraints/SuperTypeConstraintsCreator.java   |   92 +-
 .../constraints/SuperTypeConstraintsModel.java     |   94 +-
 .../constraints/SuperTypeConstraintsSolver.java    |   78 +-
 .../constraints/SuperTypeRefactoringProcessor.java |  178 +-
 .../structure/constraints/SuperTypeSet.java        |    6 +-
 .../refactoring/surround/ExceptionAnalyzer.java    |   30 +-
 .../surround/LocalDeclarationAnalyzer.java         |    9 +-
 .../refactoring/surround/SurroundWithAnalyzer.java |   12 +-
 .../surround/SurroundWithTryCatchAnalyzer.java     |    3 +-
 .../surround/SurroundWithTryCatchRefactoring.java  |   47 +-
 .../refactoring/typeconstraints/ASTCreator.java    |    7 +-
 .../typeconstraints/CompilationUnitRange.java      |    5 +-
 .../typeconstraints/CompositeOrTypeConstraint.java |   11 +-
 .../typeconstraints/ConstraintCollector.java       |   73 +-
 .../typeconstraints/ConstraintCreator.java         |  250 +-
 .../typeconstraints/ConstraintOperator.java        |    7 +-
 .../typeconstraints/ConstraintVariable.java        |    3 +-
 .../typeconstraints/ConstraintVariableFactory.java |   44 +-
 .../typeconstraints/DeclaringTypeVariable.java     |    3 +-
 .../typeconstraints/ExpressionVariable.java        |    3 +-
 .../typeconstraints/FullConstraintCreator.java     |  181 +-
 .../typeconstraints/ParameterTypeVariable.java     |    3 +-
 .../typeconstraints/ReturnTypeVariable.java        |    3 +-
 .../typeconstraints/SimpleTypeConstraint.java      |    3 +-
 .../typeconstraints/TypeConstraintFactory.java     |   26 +-
 .../refactoring/typeconstraints/TypeVariable.java  |    3 +-
 .../types/AbstractTypeVariable.java                |    7 +-
 .../typeconstraints/types/ArrayType.java           |   12 +-
 .../typeconstraints/types/CaptureType.java         |    8 +-
 .../typeconstraints/types/ExtendsWildcardType.java |   10 +-
 .../typeconstraints/types/GenericType.java         |   12 +-
 .../typeconstraints/types/HierarchyType.java       |    8 +-
 .../typeconstraints/types/NullType.java            |    9 +-
 .../typeconstraints/types/ParameterizedType.java   |   14 +-
 .../typeconstraints/types/PrimitiveType.java       |    8 +-
 .../refactoring/typeconstraints/types/RawType.java |   12 +-
 .../typeconstraints/types/StandardType.java        |   11 +-
 .../typeconstraints/types/SuperWildcardType.java   |    9 +-
 .../refactoring/typeconstraints/types/TType.java   |   24 +-
 .../typeconstraints/types/TypeEnvironment.java     |  117 +-
 .../typeconstraints/types/TypeTuple.java           |    4 +-
 .../typeconstraints/types/TypeVariable.java        |    9 +-
 .../typeconstraints/types/UnboundWildcardType.java |    9 +-
 .../typeconstraints/types/VoidType.java            |    9 +-
 .../typeconstraints/types/WildcardType.java        |    6 +-
 .../typesets/ArraySuperTypeSet.java                |   28 +-
 .../typeconstraints/typesets/ArrayTypeSet.java     |   39 +-
 .../typeconstraints/typesets/EmptyTypeSet.java     |   27 +-
 .../typesets/EnumeratedTypeSet.java                |  105 +-
 .../typeconstraints/typesets/SingletonTypeSet.java |   27 +-
 .../typesets/SubTypesOfSingleton.java              |   32 +-
 .../typeconstraints/typesets/SubTypesSet.java      |   46 +-
 .../typesets/SuperTypesOfSingleton.java            |   32 +-
 .../typeconstraints/typesets/SuperTypesSet.java    |   46 +-
 .../typeconstraints/typesets/TypeSet.java          |    6 +-
 .../typesets/TypeSetEnvironment.java               |   20 +-
 .../typesets/TypeSetIntersection.java              |   33 +-
 .../typeconstraints/typesets/TypeSetUnion.java     |   22 +-
 .../typeconstraints/typesets/TypeUniverseSet.java  |    7 +-
 .../typeconstraints2/ArrayElementVariable2.java    |    4 +-
 .../CollectionElementVariable2.java                |    5 +-
 .../typeconstraints2/ConstraintVariable2.java      |    3 +-
 .../typeconstraints2/ImmutableTypeVariable2.java   |    5 +-
 .../typeconstraints2/ParameterTypeVariable2.java   |    5 +-
 .../ParameterizedTypeVariable2.java                |    3 +-
 .../typeconstraints2/ReturnTypeVariable2.java      |    4 +-
 .../typeconstraints2/SubTypeConstraint2.java       |    5 +-
 .../refactoring/typeconstraints2/TTypes.java       |   26 +-
 .../typeconstraints2/TypeEquivalenceSet.java       |   13 +-
 .../typeconstraints2/TypeVariable2.java            |    5 +-
 .../typeconstraints2/VariableVariable2.java        |    4 +-
 .../util/AbstractExceptionAnalyzer.java            |   46 +-
 .../internal/corext/refactoring/util/Changes.java  |    8 +-
 .../corext/refactoring/util/CodeAnalyzer.java      |    3 +-
 .../corext/refactoring/util/JavaElementUtil.java   |   28 +-
 .../corext/refactoring/util/JavadocUtil.java       |   14 +-
 .../util/NoCommentSourceRangeComputer.java         |    3 +-
 .../refactoring/util/QualifiedNameFinder.java      |   10 +-
 .../util/QualifiedNameSearchResult.java            |   22 +-
 .../refactoring/util/RefactoringASTParser.java     |   20 +-
 .../corext/refactoring/util/ResourceUtil.java      |    6 +-
 .../util/SelectionAwareSourceRangeComputer.java    |   15 +-
 .../corext/refactoring/util/StatementAnalyzer.java |   47 +-
 .../corext/refactoring/util/TextChangeManager.java |   24 +-
 .../util/TextEditBasedChangeManager.java           |   24 +-
 .../refactoring/util/TightSourceRangeComputer.java |   17 +-
 .../org.eclipse.jdt.ui/customBuildCallbacks.xml    |  176 +
 .../dictionaries/en_GB.dictionary                  |   40 +
 .../dictionaries/en_US.dictionary                  |   41 +
 .../icons/full/dlcl16/pin_view.gif                 |  Bin 223 -> 223 bytes
 .../full/dlcl16/{refresh_nav.gif => refresh.gif}   |  Bin 211 -> 211 bytes
 .../icons/full/elcl16/pin_view.gif                 |  Bin 358 -> 358 bytes
 .../icons/full/elcl16/refresh.gif                  |  Bin 327 -> 327 bytes
 .../icons/full/elcl16/refresh_nav.gif              |  Bin 327 -> 0 bytes
 .../icons/full/ovr16/default_tsk.gif               |  Bin 0 -> 851 bytes
 .../eclipse/jdt/internal/corext/SourceRange.java   |   15 +-
 .../jdt/internal/corext/dom/NodeFinder.java        |    3 +-
 .../jdt/internal/ui/dialogs/TypeInfoViewer.java    |   20 +-
 .../ui/dialogs/TypeSelectionComponent.java         |    8 +-
 .../internal/ui/dialogs/TypeSelectionDialog2.java  |    9 +-
 .../ui/refactoring/RefactoringSaveHelper.java      |    6 +-
 .../plugins/org.eclipse.jdt.ui/plugin.properties   |    9 +-
 eclipse/plugins/org.eclipse.jdt.ui/plugin.xml      |   29 +-
 .../scripts/build_jar-in-jar-loader.xml            |    2 +-
 .../templates/default-templates.xml                |    4 +-
 .../ui/refactoring/ChangeExceptionHandler.java     |    6 +-
 .../ui/refactoring/ChangeExceptionsControl.java    |   29 +-
 .../ui/refactoring/ChangeParametersControl.java    |   53 +-
 .../ui/refactoring/ChangeSignatureWizard.java      |   10 +-
 .../ui/refactoring/ChangeTypeContentProvider.java  |   20 +-
 .../internal/ui/refactoring/ChangeTypeWizard.java  |   63 +-
 .../ui/refactoring/ComboSelectionDialog.java       |    4 +-
 .../ui/refactoring/CompilationUnitChangeNode.java  |   28 +-
 .../ConvertAnonymousToNestedWizard.java            |  104 +-
 .../CreateTextFileChangePreviewViewer.java         |    3 +-
 .../internal/ui/refactoring/DelegateUIHelper.java  |    4 +-
 .../ui/refactoring/ExtractClassWizard.java         |   17 +-
 .../ui/refactoring/ExtractConstantWizard.java      |   10 +-
 .../ui/refactoring/ExtractInterfaceWizard.java     |   20 +-
 .../ui/refactoring/ExtractSupertypeMemberPage.java |   37 +-
 .../ui/refactoring/ExtractSupertypeMethodPage.java |    4 +-
 .../ui/refactoring/ExtractSupertypeWizard.java     |    3 +-
 .../internal/ui/refactoring/ExtractTempWizard.java |    8 +-
 .../ui/refactoring/InferTypeArgumentsWizard.java   |    5 +-
 .../ui/refactoring/InlineConstantWizard.java       |    6 +-
 .../internal/ui/refactoring/InlineTempWizard.java  |    6 +-
 .../ui/refactoring/IntroduceFactoryInputPage.java  |    4 +-
 .../ui/refactoring/IntroduceFactoryWizard.java     |    3 +-
 .../refactoring/IntroduceIndirectionInputPage.java |   10 +-
 .../ui/refactoring/IntroduceIndirectionWizard.java |    3 +-
 .../IntroduceParameterObjectWizard.java            |   49 +-
 .../ui/refactoring/IntroduceParameterWizard.java   |    8 +-
 .../ui/refactoring/JavaStatusContextViewer.java    |    4 +-
 .../ui/refactoring/MoveInnerToTopWizard.java       |    8 +-
 .../ui/refactoring/MoveInstanceMethodWizard.java   |    6 +-
 .../internal/ui/refactoring/MoveMembersWizard.java |   14 +-
 .../ui/refactoring/ParameterEditDialog.java        |    5 +-
 .../internal/ui/refactoring/PromoteTempWizard.java |    7 +-
 .../refactoring/PullPushCheckboxTableViewer.java   |    5 +-
 .../internal/ui/refactoring/PullUpMemberPage.java  |   58 +-
 .../internal/ui/refactoring/PullUpMethodPage.java  |   59 +-
 .../jdt/internal/ui/refactoring/PullUpWizard.java  |    3 +-
 .../internal/ui/refactoring/PushDownWizard.java    |   39 +-
 .../ui/refactoring/QualifiedNameComponent.java     |    3 +-
 .../ui/refactoring/RefactoringAdapterFactory.java  |    4 +-
 .../ReferencesInBinaryStatusContextViewer.java     |   31 +-
 .../ui/refactoring/TextInputWizardPage.java        |    4 +-
 .../ui/refactoring/UseSupertypeWizard.java         |   29 +-
 .../ui/refactoring/UserInterfaceManager.java       |   22 +-
 .../ui/refactoring/VisibilityControlUtil.java      |    9 +-
 .../refactoring/actions/InlineConstantAction.java  |    7 +-
 .../ui/refactoring/actions/InlineMethodAction.java |    7 +-
 .../actions/MoveInstanceMethodAction.java          |    7 +-
 .../actions/MoveStaticMembersAction.java           |   18 +-
 .../actions/RenameJavaElementAction.java           |   15 +-
 .../refactoring/actions/RenameResourceAction.java  |    4 +-
 .../binary/BinaryRefactoringHistoryWizard.java     |   34 +-
 .../refactoring/code/ExtractMethodInputPage.java   |   16 +-
 .../ui/refactoring/code/ExtractMethodWizard.java   |    3 +-
 .../ui/refactoring/code/InlineMethodInputPage.java |    5 +-
 .../ui/refactoring/code/InlineMethodWizard.java    |    3 +-
 .../code/ReplaceInvocationsInputPage.java          |    5 +-
 .../refactoring/code/ReplaceInvocationsWizard.java |    3 +-
 .../CUPositionCompletionProcessor.java             |   10 +-
 .../contentassist/FieldNameProcessor.java          |    6 +-
 .../JavaPackageCompletionProcessor.java            |    6 +-
 ...JavaPackageFragmentRootCompletionProcessor.java |    6 +-
 ...urcePackageFragmentRootCompletionProcessor.java |    6 +-
 .../contentassist/JavaTypeCompletionProcessor.java |    6 +-
 .../contentassist/VariableNamesProcessor.java      |    8 +-
 .../ui/refactoring/nls/AccessorDescription.java    |    4 +-
 .../ui/refactoring/nls/ExternalizeWizard.java      |    4 +-
 .../ui/refactoring/nls/ExternalizeWizardPage.java  |  143 +-
 .../ui/refactoring/nls/MultiStateCellEditor.java   |    7 +-
 .../nls/NLSAccessorConfigurationDialog.java        |    7 +-
 .../internal/ui/refactoring/nls/NLSUIMessages.java |    3 +-
 .../ui/refactoring/nls/NLSUIMessages.properties    |    2 +-
 .../ui/refactoring/nls/PackageBrowseAdapter.java   |   14 +-
 .../ui/refactoring/nls/RenameKeysDialog.java       |   14 +-
 .../ui/refactoring/nls/SourceContainerDialog.java  |    4 +-
 .../SourceFirstPackageSelectionDialogField.java    |    6 +-
 .../ui/refactoring/nls/search/FileEntry.java       |    3 +-
 .../nls/search/NLSSearchEditorOpener.java          |    3 +-
 .../nls/search/NLSSearchMessages.properties        |    2 +-
 .../ui/refactoring/nls/search/NLSSearchResult.java |   32 +-
 .../nls/search/NLSSearchResultLabelProvider2.java  |    5 +-
 .../nls/search/NLSSearchResultPage.java            |    8 +-
 .../nls/search/NLSSearchResultRequestor.java       |   18 +-
 .../ui/refactoring/nls/search/Properties.java      |    9 +-
 .../refactoring/reorg/CopyToClipboardAction.java   |   31 +-
 .../internal/ui/refactoring/reorg/CutAction.java   |    8 +-
 .../ui/refactoring/reorg/DeleteAction.java         |   11 +-
 .../ui/refactoring/reorg/DeleteWizard.java         |   10 +-
 .../reorg/DestinationContentProvider.java          |   10 +-
 .../ui/refactoring/reorg/NewNameQueries.java       |    3 +-
 .../internal/ui/refactoring/reorg/PasteAction.java |  124 +-
 .../ui/refactoring/reorg/RenameCuWizard.java       |    7 +-
 .../refactoring/reorg/RenameEnumConstWizard.java   |    4 +-
 .../ui/refactoring/reorg/RenameFieldWizard.java    |    8 +-
 .../refactoring/reorg/RenameInformationPopup.java  |   13 +-
 .../refactoring/reorg/RenameInputWizardPage.java   |   10 +-
 .../ui/refactoring/reorg/RenameLinkedMode.java     |   11 +-
 .../reorg/RenameMethodUserInterfaceStarter.java    |    3 +-
 .../ui/refactoring/reorg/RenamePackageWizard.java  |    7 +-
 .../refactoring/reorg/RenameRefactoringWizard.java |    4 +-
 .../ui/refactoring/reorg/RenameSelectionState.java |   12 +-
 .../ui/refactoring/reorg/RenameTypeWizard.java     |    5 +-
 .../reorg/RenameTypeWizardInputPage.java           |    9 +-
 ...nameTypeWizardSimilarElementsOptionsDialog.java |    5 +-
 .../reorg/RenameTypeWizardSimilarElementsPage.java |   77 +-
 .../reorg/RenameUserInterfaceStarter.java          |    3 +-
 .../ui/refactoring/reorg/ReorgCopyAction.java      |    8 +-
 .../ui/refactoring/reorg/ReorgCopyWizard.java      |    8 +-
 .../ui/refactoring/reorg/ReorgMoveAction.java      |   10 +-
 .../ui/refactoring/reorg/ReorgMoveWizard.java      |   15 +-
 .../ui/refactoring/reorg/ReorgQueries.java         |    5 +-
 .../ui/refactoring/reorg/TypedSourceTransfer.java  |    6 +-
 .../sef/SelfEncapsulateFieldInputPage.java         |   16 +-
 .../sef/SelfEncapsulateFieldWizard.java            |    3 +-
 .../ui/AbstractJavaElementLabelDecorator.java      |   10 +-
 .../ui/BuildpathIndicatorLabelDecorator.java       |    6 +-
 .../internal/ui/CompatibilityTemplateStore.java    |    9 +-
 .../jdt/internal/ui/EditorInputAdapterFactory.java |    4 +-
 .../jdt/internal/ui/IJavaHelpContextIds.java       |   87 +-
 .../jdt/internal/ui/InitializeAfterLoadJob.java    |    5 +-
 .../ui/InterfaceIndicatorLabelDecorator.java       |  118 +-
 .../internal/ui/JarEntryEditorInputFactory.java    |    8 +-
 .../jdt/internal/ui/JavaElementAdapterFactory.java |   47 +-
 .../ui/org/eclipse/jdt/internal/ui/JavaPlugin.java |   77 +-
 .../eclipse/jdt/internal/ui/JavaPluginImages.java  |   17 +-
 .../jdt/internal/ui/JavaProjectAdapterFactory.java |    4 +-
 .../eclipse/jdt/internal/ui/JavaUIMessages.java    |    2 -
 .../jdt/internal/ui/JavaUIMessages.properties      |    2 -
 .../internal/ui/JavaUIPreferenceInitializer.java   |    3 +-
 .../internal/ui/LogicalPackageAdapterFactory.java  |    4 +-
 .../jdt/internal/ui/MarkerAdapterFactory.java      |    4 +-
 .../jdt/internal/ui/ResourceAdapterFactory.java    |    4 +-
 .../ui/actions/AbstractToggleLinkingAction.java    |    3 +-
 .../jdt/internal/ui/actions/ActionMessages.java    |    7 +-
 .../internal/ui/actions/ActionMessages.properties  |   11 +-
 .../jdt/internal/ui/actions/ActionUtil.java        |    4 +-
 .../internal/ui/actions/AddBlockCommentAction.java |   12 +-
 .../jdt/internal/ui/actions/AddTaskAction.java     |    4 +-
 .../jdt/internal/ui/actions/AllCleanUpsAction.java |   17 +-
 .../internal/ui/actions/BlockCommentAction.java    |   11 +-
 .../ui/actions/CategoryFilterActionGroup.java      |   82 +-
 .../jdt/internal/ui/actions/CleanUpAction.java     |   16 +-
 .../jdt/internal/ui/actions/CollapseAllAction.java |    3 +-
 .../internal/ui/actions/CompositeActionGroup.java  |    7 +-
 .../ui/actions/CopyQualifiedNameAction.java        |   66 +-
 .../ui/actions/ExtractSuperClassAction.java        |   18 +-
 .../ui/actions/FindBrokenNLSKeysAction.java        |   24 +-
 .../internal/ui/actions/FoldingActionGroup.java    |    8 +-
 ...erateConstructorUsingFieldsContentProvider.java |   36 +-
 ...erateConstructorUsingFieldsSelectionDialog.java |   19 +-
 .../GenerateConstructorUsingFieldsValidator.java   |    8 +-
 .../jdt/internal/ui/actions/IndentAction.java      |   12 +-
 .../ui/actions/IntroduceParameterObjectAction.java |   15 +-
 .../internal/ui/actions/JDTQuickMenuCreator.java   |    3 +-
 .../internal/ui/actions/JarImportWizardAction.java |    3 +-
 .../internal/ui/actions/LexicalSortingAction.java  |    3 +-
 .../jdt/internal/ui/actions/MultiActionGroup.java  |    5 +-
 .../jdt/internal/ui/actions/MultiFormatAction.java |    6 +-
 .../ui/actions/MultiOrganizeImportAction.java      |    6 +-
 .../ui/actions/MultiSortMembersAction.java         |   10 +-
 .../internal/ui/actions/NewWizardsActionGroup.java |    7 +-
 .../ui/actions/OccurrencesSearchMenuAction.java    |   13 +-
 .../jdt/internal/ui/actions/OpenBrowserUtil.java   |    5 +-
 .../jdt/internal/ui/actions/OpenTypeAction.java    |    4 +-
 .../ui/actions/OpenTypeInHierarchyAction.java      |    3 +-
 .../ui/actions/RemoveBlockCommentAction.java       |    6 +-
 .../jdt/internal/ui/actions/SelectAllAction.java   |    9 +-
 .../internal/ui/actions/SelectionConverter.java    |    4 +-
 .../ui/actions/SurroundWithActionGroup.java        |    4 +-
 .../ui/actions/SurroundWithTemplateMenuAction.java |   12 +-
 .../ui/actions/WorkbenchRunnableAdapter.java       |    4 +-
 .../internal/ui/browsing/IPackagesViewViewer.java  |    4 +-
 .../ui/browsing/JavaBrowsingContentProvider.java   |   28 +-
 .../jdt/internal/ui/browsing/JavaBrowsingPart.java |   33 +-
 .../ui/browsing/JavaElementTypeComparator.java     |   25 +-
 .../jdt/internal/ui/browsing/LogicalPackage.java   |   14 +-
 .../ui/browsing/LogicalPackagesProvider.java       |   17 +-
 .../jdt/internal/ui/browsing/MembersView.java      |   19 +-
 .../internal/ui/browsing/PackageViewerWrapper.java |   57 +-
 .../jdt/internal/ui/browsing/PackagesView.java     |   85 +-
 .../browsing/PackagesViewFlatContentProvider.java  |   13 +-
 .../PackagesViewHierarchicalContentProvider.java   |   58 +-
 .../ui/browsing/PackagesViewLabelProvider.java     |    5 +-
 .../ui/browsing/PackagesViewTableViewer.java       |   15 +-
 .../ui/browsing/PackagesViewTreeViewer.java        |   15 +-
 .../ui/browsing/PatchedOpenInNewWindowAction.java  |    3 +-
 .../ProjectAndSourceFolderContentProvider.java     |   13 +-
 .../jdt/internal/ui/browsing/ProjectsView.java     |   20 +-
 .../internal/ui/browsing/ToggleLinkingAction.java  |    3 +-
 .../TopLevelTypeProblemsLabelDecorator.java        |    3 +-
 .../jdt/internal/ui/browsing/TypesView.java        |   18 +-
 .../CallHierarchyFiltersActionGroup.java           |   14 +-
 .../CallHierarchyImageDescriptor.java              |   14 +-
 .../callhierarchy/CallHierarchyLabelProvider.java  |    8 +-
 .../ui/callhierarchy/CallHierarchyMessages.java    |   10 +-
 .../callhierarchy/CallHierarchyMessages.properties |   16 +-
 .../CallHierarchyTransferDropAdapter.java          |   62 +-
 .../internal/ui/callhierarchy/CallHierarchyUI.java |  110 +-
 .../ui/callhierarchy/CallHierarchyViewPart.java    |  373 +-
 .../ui/callhierarchy/CallHierarchyViewer.java      |   89 +-
 .../ui/callhierarchy/CancelSearchAction.java       |    3 +-
 .../ui/callhierarchy/CopyCallHierarchyAction.java  |    3 +-
 .../ui/callhierarchy/DeferredMethodWrapper.java    |    9 +-
 .../ExpandWithConstructorsAction.java              |    8 +-
 .../ExpandWithConstructorsConfigurationBlock.java  |   51 +-
 .../ExpandWithConstructorsDialog.java              |    6 +-
 .../internal/ui/callhierarchy/FiltersDialog.java   |   34 +-
 .../ui/callhierarchy/FocusOnSelectionAction.java   |    3 +-
 .../internal/ui/callhierarchy/HistoryAction.java   |   40 +-
 .../ui/callhierarchy/HistoryDropDownAction.java    |   17 +-
 .../ui/callhierarchy/HistoryListAction.java        |   39 +-
 .../ui/callhierarchy/LocationCopyAction.java       |    5 +-
 .../ui/callhierarchy/LocationLabelProvider.java    |    8 +-
 .../internal/ui/callhierarchy/LocationViewer.java  |    6 +-
 .../MethodWrapperWorkbenchAdapter.java             |    8 +-
 .../ui/callhierarchy/OpenCallHierarchyAction.java  |   14 +-
 .../ui/callhierarchy/OpenDeclarationAction.java    |    8 +-
 .../ui/callhierarchy/OpenLocationAction.java       |   12 +-
 .../callhierarchy/PinCallHierarchyViewAction.java  |   50 +
 .../ui/callhierarchy/RefreshElementAction.java     |   39 +-
 .../ui/callhierarchy/RefreshViewAction.java        |    7 +-
 .../ui/callhierarchy/RemoveFromViewAction.java     |   50 +-
 .../internal/ui/callhierarchy/SearchInDialog.java  |  253 +
 .../ui/callhierarchy/SearchScopeAction.java        |   26 +-
 .../ui/callhierarchy/SearchScopeActionGroup.java   |   51 +-
 .../callhierarchy/SearchScopeHierarchyAction.java  |   80 -
 .../ui/callhierarchy/SearchScopeProjectAction.java |   24 +-
 .../callhierarchy/SearchScopeWorkingSetAction.java |   16 +-
 .../callhierarchy/SearchScopeWorkspaceAction.java  |   19 +-
 .../jdt/internal/ui/callhierarchy/SearchUtil.java  |   10 +-
 .../ui/callhierarchy/SelectFieldModeAction.java    |    5 +-
 .../ui/callhierarchy/SelectWorkingSetAction.java   |    3 +-
 .../ui/callhierarchy/ShowSearchInDialogAction.java |   61 +
 .../ui/callhierarchy/ToggleCallModeAction.java     |    5 +-
 .../ui/callhierarchy/ToggleOrientationAction.java  |    5 +-
 .../jdt/internal/ui/callhierarchy/TreeRoot.java    |   22 +-
 .../ui/commands/JavaElementReferenceConverter.java |    4 +-
 .../jdt/internal/ui/compare/CompareDialog.java     |    7 +-
 .../ui/compare/JavaAddElementFromHistory.java      |    3 +-
 .../ui/compare/JavaAddElementFromHistoryImpl.java  |   11 +-
 .../internal/ui/compare/JavaCompareUtilities.java  |    6 +-
 .../ui/compare/JavaCompareWithEditionAction.java   |    3 +-
 .../compare/JavaCompareWithEditionActionImpl.java  |    3 +-
 .../ui/compare/JavaElementHistoryPageSource.java   |    3 +-
 .../jdt/internal/ui/compare/JavaHistoryAction.java |    3 +-
 .../internal/ui/compare/JavaHistoryActionImpl.java |    8 +-
 .../jdt/internal/ui/compare/JavaMergeViewer.java   |   69 +-
 .../eclipse/jdt/internal/ui/compare/JavaNode.java  |    3 +-
 .../internal/ui/compare/JavaParseTreeBuilder.java  |   77 +-
 .../ui/compare/JavaReplaceWithEditionAction.java   |    3 +-
 .../compare/JavaReplaceWithEditionActionImpl.java  |    6 +-
 .../JavaReplaceWithPreviousEditionAction.java      |    3 +-
 .../internal/ui/compare/JavaStructureCreator.java  |   44 +-
 .../ui/compare/JavaStructureDiffViewer.java        |   20 +-
 .../jdt/internal/ui/compare/JavaTextViewer.java    |    8 +-
 .../ui/compare/LocalHistoryActionGroup.java        |    3 +-
 .../ui/compare/PropertiesFileMergeViewer.java      |   13 +-
 .../internal/ui/compare/PropertiesFileViewer.java  |    8 +-
 .../ui/compare/PropertiesStructureCreator.java     |    7 +-
 .../jdt/internal/ui/compare/ResizableDialog.java   |    6 +-
 .../ui/dialogs/FilteredTypesSelectionDialog.java   |   85 +-
 .../ui/dialogs/GenerateHashCodeEqualsDialog.java   |    7 +-
 .../ui/dialogs/GenerateToStringDialog.java         |  135 +-
 .../ui/dialogs/MainTypeSelectionDialog.java        |    6 +-
 .../dialogs/MultiElementListSelectionDialog.java   |   22 +-
 .../ui/dialogs/MultiMainTypeSelectionDialog.java   |    4 +-
 .../ui/dialogs/OpenTypeSelectionDialog.java        |    4 +-
 .../internal/ui/dialogs/OptionalMessageDialog.java |    4 +-
 .../internal/ui/dialogs/OverrideMethodDialog.java  |   28 +-
 .../ui/dialogs/PackageSelectionDialog.java         |   15 +-
 .../ui/dialogs/SortMembersMessageDialog.java       |    8 +-
 .../internal/ui/dialogs/SourceActionDialog.java    |   31 +-
 .../jdt/internal/ui/dialogs/StatusInfo.java        |    3 +-
 .../internal/ui/dialogs/TableTextCellEditor.java   |   69 +-
 .../ui/dialogs/TextFieldNavigationHandler.java     |   41 +-
 .../ui/dnd/BasicSelectionTransferDragAdapter.java  |    5 +-
 .../ui/dnd/EditorInputTransferDragAdapter.java     |   11 +-
 .../jdt/internal/ui/dnd/JdtViewerDragAdapter.java  |    3 +-
 .../jdt/internal/ui/dnd/JdtViewerDropAdapter.java  |   17 +-
 .../ui/dnd/ResourceTransferDragAdapter.java        |   21 +-
 .../internal/ui/dnd/ViewerInputDropAdapter.java    |    6 +-
 .../jdt/internal/ui/filters/AnnotationFilter.java  |    3 +-
 .../jdt/internal/ui/filters/ClassFilter.java       |    3 +-
 .../internal/ui/filters/ClosedProjectFilter.java   |    3 +-
 .../ui/filters/ContainedLibraryFilter.java         |    3 +-
 .../internal/ui/filters/CustomFiltersDialog.java   |   43 +-
 .../ui/filters/EmptyInnerPackageFilter.java        |    3 +-
 .../ui/filters/EmptyLibraryContainerFilter.java    |    3 +-
 .../internal/ui/filters/EmptyPackageFilter.java    |    3 +-
 .../jdt/internal/ui/filters/EnumFilter.java        |    3 +-
 .../jdt/internal/ui/filters/FilterDescriptor.java  |   25 +-
 .../ui/filters/ImportDeclarationFilter.java        |    3 +-
 .../internal/ui/filters/InnerClassFilesFilter.java |    3 +-
 .../jdt/internal/ui/filters/InterfaceFilter.java   |    3 +-
 .../jdt/internal/ui/filters/JavaFileFilter.java    |    3 +-
 .../jdt/internal/ui/filters/LibraryFilter.java     |    3 +-
 .../jdt/internal/ui/filters/NamePatternFilter.java |    3 +-
 .../filters/NoPackageContainingFoldersFilter.java  |    3 +-
 .../internal/ui/filters/NonJavaElementFilter.java  |    3 +-
 .../internal/ui/filters/NonJavaProjectsFilter.java |    3 +-
 .../internal/ui/filters/NonPublicTypeFilter.java   |    3 +-
 .../ui/filters/NonSharedProjectFilter.java         |   29 +-
 .../internal/ui/filters/OutputFolderFilter.java    |    3 +-
 .../ui/filters/PackageDeclarationFilter.java       |    3 +-
 .../ui/filters/SyntheticMembersFilter.java         |    3 +-
 .../jdt/internal/ui/fix/AbstractCleanUp.java       |    4 +-
 .../jdt/internal/ui/fix/AbstractMultiFix.java      |   13 +-
 .../internal/ui/fix/CleanUpRefactoringWizard.java  |   74 +-
 ...anUpSaveParticipantPreferenceConfiguration.java |   32 +-
 .../internal/ui/fix/CleanUpSelectionDialog.java    |   21 +-
 .../jdt/internal/ui/fix/CodeFormatCleanUp.java     |   12 +-
 .../jdt/internal/ui/fix/CodeStyleCleanUp.java      |   20 +-
 .../internal/ui/fix/ControlStatementsCleanUp.java  |   12 +-
 .../jdt/internal/ui/fix/ConvertLoopCleanUp.java    |   12 +-
 .../jdt/internal/ui/fix/ExpressionsCleanUp.java    |   12 +-
 .../jdt/internal/ui/fix/ImportsCleanUp.java        |   20 +-
 .../eclipse/jdt/internal/ui/fix/Java50CleanUp.java |   20 +-
 .../jdt/internal/ui/fix/MapCleanUpOptions.java     |   16 +-
 .../internal/ui/fix/MultiFixMessages.properties    |    4 +-
 .../fix/PotentialProgrammingProblemsCleanUp.java   |   22 +-
 .../internal/ui/fix/SaveActionSelectionDialog.java |   11 +-
 .../jdt/internal/ui/fix/SortMembersCleanUp.java    |   17 +-
 .../eclipse/jdt/internal/ui/fix/StringCleanUp.java |   20 +-
 .../internal/ui/fix/UnimplementedCodeCleanUp.java  |   12 +-
 .../internal/ui/fix/UnnecessaryCodeCleanUp.java    |   20 +-
 .../jdt/internal/ui/fix/UnusedCodeCleanUp.java     |   20 +-
 .../ui/fix/VariableDeclarationCleanUp.java         |   12 +-
 .../internal/ui/infoviews/AbstractInfoView.java    |    5 +-
 .../ui/infoviews/CopyToClipboardAction.java        |    4 +-
 .../jdt/internal/ui/infoviews/GotoInputAction.java |    3 +-
 .../jdt/internal/ui/infoviews/JavadocView.java     |   45 +-
 .../jdt/internal/ui/infoviews/SourceView.java      |   21 +-
 .../jdt/internal/ui/jarimport/JarImportWizard.java |   14 +-
 .../internal/ui/jarimport/JarImportWizardPage.java |   15 +-
 .../ui/jarimport/RefactoringLocationControl.java   |    7 +-
 .../AbstractJarDestinationWizardPage.java          |   14 +-
 .../ui/jarpackager/CheckboxTreeAndListGroup.java   |   60 +-
 .../internal/ui/jarpackager/ContainerFilter.java   |    3 +-
 .../ui/jarpackager/CreateJarActionDelegate.java    |    6 +-
 .../ui/jarpackager/JarFileExportOperation.java     |   58 +-
 .../ui/jarpackager/JarManifestWizardPage.java      |   34 +-
 .../internal/ui/jarpackager/JarOptionsPage.java    |    6 +-
 .../ui/jarpackager/JarPackageActionDelegate.java   |    4 +-
 .../internal/ui/jarpackager/JarPackageReader.java  |   27 +-
 .../internal/ui/jarpackager/JarPackageWizard.java  |   16 +-
 .../ui/jarpackager/JarPackageWizardPage.java       |   58 +-
 .../internal/ui/jarpackager/JarPackagerUtil.java   |   16 +-
 .../ui/jarpackager/JarRefactoringDialog.java       |   12 +-
 .../internal/ui/jarpackager/PlainJarBuilder.java   |    3 +-
 .../ui/jarpackager/SealPackagesFilter.java         |    8 +-
 .../ui/jarpackagerfat/FatJarAntExporter.java       |    6 +-
 .../internal/ui/jarpackagerfat/FatJarBuilder.java  |    3 +-
 .../ui/jarpackagerfat/FatJarManifestProvider.java  |   28 +-
 .../ui/jarpackagerfat/FatJarPackageWizard.java     |   10 +-
 .../ui/jarpackagerfat/FatJarPackageWizardPage.java |   75 +-
 .../jarpackagerfat/FatJarRsrcUrlAntExporter.java   |    3 +-
 .../ui/jarpackagerfat/FatJarRsrcUrlBuilder.java    |   10 +-
 .../FatJarRsrcUrlManifestProvider.java             |   11 +-
 .../ui/jarpackagerfat/UnpackFatJarAntExporter.java |    3 +-
 .../ui/jarpackagerfat/UnpackFatJarBuilder.java     |    9 +-
 .../ui/jarpackagerfat/UnpackJarAntExporter.java    |    3 +-
 .../ui/jarpackagerfat/UnpackJarBuilder.java        |   16 +-
 .../ContributedJavadocWizardPage.java              |   28 +-
 .../javadocexport/JavadocConsoleLineTracker.java   |    7 +-
 .../JavadocLinkDialogLabelProvider.java            |    4 +-
 .../internal/ui/javadocexport/JavadocLinkRef.java  |    8 +-
 .../ui/javadocexport/JavadocOptionsManager.java    |   54 +-
 .../JavadocProjectContentProvider.java             |    6 +-
 .../javadocexport/JavadocSpecificsWizardPage.java  |    7 +-
 .../javadocexport/JavadocStandardWizardPage.java   |   58 +-
 .../ui/javadocexport/JavadocTreeWizardPage.java    |   43 +-
 .../internal/ui/javadocexport/JavadocWizard.java   |   52 +-
 .../ui/javadocexport/JavadocWizardPage.java        |    4 +-
 .../internal/ui/javadocexport/JavadocWriter.java   |   18 +-
 .../ui/javadocexport/RecentSettingsStore.java      |   22 +-
 .../jdt/internal/ui/javaeditor/ASTProvider.java    |   21 +-
 .../ui/javaeditor/AddClassFileMarkerAction.java    |    6 +-
 .../ui/javaeditor/AddImportOnSelectionAction.java  |   10 +-
 ...asicCompilationUnitEditorActionContributor.java |   16 +-
 .../BasicJavaEditorActionContributor.java          |   17 +-
 .../ui/javaeditor/ClassFileDocumentProvider.java   |   16 +-
 .../internal/ui/javaeditor/ClassFileEditor.java    |   47 +-
 .../javaeditor/ClassFileMarkerAnnotationModel.java |    7 +-
 .../ui/javaeditor/ClassFileMarkerRulerAction.java  |    6 +-
 .../ui/javaeditor/ClipboardOperationAction.java    |  104 +-
 .../CompilationUnitAnnotationModelEvent.java       |   16 +-
 .../CompilationUnitDocumentProvider.java           |   97 +-
 .../ui/javaeditor/CompilationUnitEditor.java       |   59 +-
 .../CompilationUnitEditorActionContributor.java    |    4 +-
 .../ConstructedJavaEditorMessages.properties       |   20 +-
 .../internal/ui/javaeditor/DocumentAdapter.java    |   12 +-
 .../jdt/internal/ui/javaeditor/EditorUtility.java  |   36 +-
 .../javaeditor/ExternalClassFileEditorInput.java   |    3 +-
 .../ui/javaeditor/GotoMatchingBracketAction.java   |    3 +-
 .../internal/ui/javaeditor/IJavaAnnotation.java    |    4 +-
 .../javaeditor/InternalClassFileEditorInput.java   |    4 +-
 .../ui/javaeditor/JarEntryEditorInput.java         |    4 +-
 .../ui/javaeditor/JavaAnnotationIterator.java      |   12 +-
 .../jdt/internal/ui/javaeditor/JavaEditor.java     |  182 +-
 .../ui/javaeditor/JavaEditorBreadcrumb.java        |   47 +-
 .../JavaEditorBreadcrumbActionGroup.java           |   14 +-
 .../internal/ui/javaeditor/JavaEditorMessages.java |   15 +-
 .../ui/javaeditor/JavaEditorMessages.properties    |   15 +-
 .../JavaElementDeclaredTypeHyperlink.java          |  157 +
 .../ui/javaeditor/JavaElementHyperlink.java        |   17 +-
 .../JavaElementHyperlinkDeclaredTypeDetector.java  |   68 +
 .../javaeditor/JavaElementHyperlinkDetector.java   |   93 +-
 ...JavaElementHyperlinkImplementationDetector.java |   31 +-
 .../JavaElementHyperlinkReturnTypeDetector.java    |   49 +
 ...lementHyperlinkSuperImplementationDetector.java |   62 +
 .../JavaElementImplementationHyperlink.java        |   45 +-
 .../javaeditor/JavaElementReturnTypeHyperlink.java |  147 +
 .../JavaElementSuperImplementationHyperlink.java   |  118 +
 .../ui/javaeditor/JavaMarkerAnnotation.java        |    4 +-
 .../ui/javaeditor/JavaMoveLinesAction.java         |    5 +-
 .../internal/ui/javaeditor/JavaOutlinePage.java    |  232 +-
 .../JavaSelectAnnotationRulerAction.java           |    9 +-
 .../javaeditor/JavaSelectMarkerRulerAction2.java   |    3 +-
 .../ui/javaeditor/JavaSelectRulerAction.java       |    3 +-
 .../internal/ui/javaeditor/JavaSourceViewer.java   |   55 +-
 .../internal/ui/javaeditor/JavaTemplatesPage.java  |   13 +-
 .../internal/ui/javaeditor/JavaTextSelection.java  |   41 +-
 .../internal/ui/javaeditor/NLSKeyHyperlink.java    |    4 +-
 .../ui/javaeditor/OverrideIndicatorManager.java    |   14 +-
 .../ui/javaeditor/RemoveOccurrenceAnnotations.java |    3 +-
 .../ui/javaeditor/SemanticHighlightingManager.java |   12 +-
 .../javaeditor/SemanticHighlightingPresenter.java  |   40 +-
 .../javaeditor/SemanticHighlightingReconciler.java |   22 +-
 .../ui/javaeditor/SemanticHighlightings.java       |  266 +-
 .../ui/javaeditor/ShowInBreadcrumbAction.java      |    7 +-
 .../ui/javaeditor/SpecificContentAssistAction.java |    3 +-
 .../javaeditor/SpecificContentAssistExecutor.java  |   12 +-
 .../ui/javaeditor/ToggleBreadcrumbAction.java      |   28 +-
 .../ui/javaeditor/ToggleCommentAction.java         |   13 +-
 .../ui/javaeditor/ToggleMarkOccurrencesAction.java |    5 +-
 .../ui/javaeditor/TogglePresentationAction.java    |    5 +-
 .../ui/javaeditor/ToggleTextHoverAction.java       |    5 +-
 .../internal/ui/javaeditor/WorkingCopyManager.java |    8 +-
 .../ui/javaeditor/breadcrumb/BreadcrumbItem.java   |    5 +-
 .../breadcrumb/BreadcrumbItemDetails.java          |    5 +-
 .../breadcrumb/BreadcrumbItemDropDown.java         |   94 +-
 .../ui/javaeditor/breadcrumb/BreadcrumbViewer.java |   74 +-
 .../javaeditor/breadcrumb/BreadcrumbViewerRow.java |   21 +-
 ...ractSaveParticipantPreferenceConfiguration.java |   10 +-
 .../saveparticipant/SaveParticipantDescriptor.java |    4 +-
 .../saveparticipant/SaveParticipantRegistry.java   |   25 +-
 .../GoToNextPreviousMemberAction.java              |   11 +-
 .../selectionactions/SelectionHistory.java         |    8 +-
 .../StructureSelectEnclosingAction.java            |    3 +-
 .../StructureSelectHistoryAction.java              |    3 +-
 .../StructureSelectNextAction.java                 |    4 +-
 .../StructureSelectPreviousAction.java             |    4 +-
 .../selectionactions/StructureSelectionAction.java |    7 +-
 .../ui/model/JavaModelContentProvider.java         |    6 +-
 .../internal/ui/model/JavaModelLabelProvider.java  |    5 +-
 .../jdt/internal/ui/model/JavaModelMerger.java     |    7 +-
 .../jdt/internal/ui/model/JavaModelProvider.java   |    3 +-
 .../JavaRefactoringDescriptorResourceMapping.java  |    3 +-
 .../JavaRefactoringHistoryResourceMapping.java     |    3 +-
 .../jdt/internal/ui/model/JavaResourceMapping.java |    6 +-
 .../model/JavaSynchronizationCompareAdapter.java   |    7 +-
 .../model/JavaSynchronizationContentProvider.java  |   68 +-
 .../ui/model/JavaSynchronizationLabelProvider.java |   11 +-
 .../ui/navigator/CommonLayoutActionGroup.java      |    4 +-
 .../ui/navigator/JavaDropAdapterAssistant.java     |    7 +-
 .../ui/navigator/JavaNavigatorActionProvider.java  |    7 +-
 .../ui/navigator/JavaNavigatorContentProvider.java |   32 +-
 .../ui/navigator/JavaNavigatorLabelProvider.java   |    5 +-
 .../JavaNavigatorRefactorActionProvider.java       |    7 +-
 .../navigator/JavaNavigatorViewActionProvider.java |    8 +-
 .../ui/navigator/NonEssentialElementsFilter.java   |    3 +-
 .../jdt/internal/ui/navigator/OpenAndExpand.java   |   52 +-
 .../PackageExplorerOpenActionProvider.java         |    7 +-
 .../ui/packageview/ClassPathContainer.java         |   12 +-
 .../internal/ui/packageview/CustomHashtable.java   |  403 --
 .../ui/packageview/FileTransferDragAdapter.java    |   45 +-
 .../ui/packageview/FileTransferDropAdapter.java    |    5 +-
 .../internal/ui/packageview/GotoPackageAction.java |    3 +-
 .../ui/packageview/GotoRequiredProjectAction.java  |    3 +-
 .../ui/packageview/GotoResourceAction.java         |    6 +-
 .../internal/ui/packageview/GotoTypeAction.java    |    3 +-
 .../packageview/HierarchicalDecorationContext.java |    6 +-
 .../internal/ui/packageview/LayoutActionGroup.java |    5 +-
 .../internal/ui/packageview/LibraryContainer.java  |   12 +-
 .../ui/packageview/PackageExplorerActionGroup.java |    5 +-
 .../PackageExplorerContentProvider.java            |   65 +-
 .../packageview/PackageExplorerLabelProvider.java  |   16 +-
 .../ui/packageview/PackageExplorerPart.java        |   61 +-
 .../PackageExplorerProblemsDecorator.java          |   17 +-
 .../ui/packageview/PackagesFrameSource.java        |    3 +-
 .../packageview/SelectionTransferDropAdapter.java  |   14 +-
 .../ui/packageview/ToggleLinkingAction.java        |    3 +-
 .../WorkingSetAwareContentProvider.java            |   43 +-
 .../WorkingSetAwareJavaElementSorter.java          |    3 +-
 .../ui/packageview/WorkingSetDropAdapter.java      |   70 +-
 .../ui/preferences/AbstractConfigurationBlock.java |   43 +-
 ...onfigurationBlockPreferenceAndPropertyPage.java |    8 +-
 .../AbstractConfigurationBlockPreferencePage.java  |    9 +-
 .../ui/preferences/AppearancePreferencePage.java   |   13 +-
 .../ui/preferences/BuildPathsPropertyPage.java     |   10 +-
 .../internal/ui/preferences/BulletListBlock.java   |    4 +-
 .../ClasspathContainerPreferencePage.java          |    5 +-
 .../ClasspathVariablesPreferencePage.java          |   14 +-
 .../ui/preferences/CleanUpPreferencePage.java      |    6 +-
 .../CodeAssistAdvancedConfigurationBlock.java      |   78 +-
 .../CodeAssistAdvancedPreferencePage.java          |   11 +-
 .../preferences/CodeAssistConfigurationBlock.java  |   62 +-
 .../CodeAssistFavoritesConfigurationBlock.java     |   55 +-
 .../CodeAssistFavoritesPreferencePage.java         |   11 +-
 .../ui/preferences/CodeAssistPreferencePage.java   |   11 +-
 .../preferences/CodeFormatterPreferencePage.java   |    6 +-
 .../ui/preferences/CodeStylePreferencePage.java    |   12 +-
 .../internal/ui/preferences/CodeTemplateBlock.java |   56 +-
 .../ui/preferences/CodeTemplatePreferencePage.java |   15 +-
 .../CodeTemplateSourceViewerConfiguration.java     |    8 +-
 .../ui/preferences/ColorSettingPreviewCode.txt     |    1 +
 .../preferences/ComplianceConfigurationBlock.java  |   88 +-
 .../ui/preferences/CompliancePreferencePage.java   |   15 +-
 .../ui/preferences/EditTemplateDialog.java         |   60 +-
 .../internal/ui/preferences/FilterTextControl.java |  275 +
 .../ui/preferences/FoldingConfigurationBlock.java  |   39 +-
 .../ui/preferences/FoldingPreferencePage.java      |    7 +-
 .../ImportOrganizeConfigurationBlock.java          |   56 +-
 .../ui/preferences/ImportOrganizeInputDialog.java  |   14 +-
 .../preferences/ImportOrganizePreferencePage.java  |   13 +-
 .../ui/preferences/JavaBasePreferencePage.java     |   32 +-
 .../preferences/JavaBuildConfigurationBlock.java   |    6 +-
 .../ui/preferences/JavaBuildPreferencePage.java    |   13 +-
 .../ui/preferences/JavaCategoryPropertyPage.java   |  118 -
 .../JavaEditorAppearanceConfigurationBlock.java    |   18 +-
 .../JavaEditorColoringConfigurationBlock.java      |   67 +-
 .../JavaEditorColoringPreferencePage.java          |    7 +-
 .../JavaEditorHoverConfigurationBlock.java         |   29 +-
 .../preferences/JavaEditorHoverPreferencePage.java |    7 +-
 .../ui/preferences/JavaEditorPreferencePage.java   |    7 +-
 .../ui/preferences/JavaEditorPropertyPage.java     |    4 +-
 .../ui/preferences/JavaTemplatePreferencePage.java |   13 +-
 .../ui/preferences/JavadocConfigurationBlock.java  |   14 +-
 .../JavadocConfigurationPropertyPage.java          |   45 +-
 .../JavadocProblemsConfigurationBlock.java         |   24 +-
 .../preferences/JavadocProblemsPreferencePage.java |   17 +-
 .../MarkOccurrencesConfigurationBlock.java         |   37 +-
 .../preferences/MarkOccurrencesPreferencePage.java |    7 +-
 .../ui/preferences/MembersOrderPreferencePage.java |   40 +-
 .../NameConventionConfigurationBlock.java          |   33 +-
 .../NativeLibrariesConfigurationBlock.java         |    4 +-
 .../preferences/NativeLibrariesPropertyPage.java   |   65 +-
 .../preferences/NewJavaProjectPreferencePage.java  |   40 +-
 .../ui/preferences/OccurrencesPreferencePage.java  |    6 +-
 .../ui/preferences/OptionsConfigurationBlock.java  |  601 ++-
 .../internal/ui/preferences/PreferencesAccess.java |   10 +-
 .../ui/preferences/PreferencesMessages.java        |   52 +-
 .../ui/preferences/PreferencesMessages.properties  |  111 +-
 .../ProblemSeveritiesConfigurationBlock.java       |  268 +-
 .../ProblemSeveritiesPreferencePage.java           |   26 +-
 .../ui/preferences/ProfilePreferencePage.java      |   11 +-
 .../ui/preferences/ProjectSelectionDialog.java     |   10 +-
 .../PropertiesFileEditorPreferencePage.java        |   59 +-
 .../ui/preferences/PropertyAndPreferencePage.java  |   21 +-
 .../SaveParticipantConfigurationBlock.java         |   14 +-
 .../preferences/SaveParticipantPreferencePage.java |    7 +-
 .../preferences/SmartTypingConfigurationBlock.java |   49 +-
 .../ui/preferences/SmartTypingPreferencePage.java  |   12 +-
 .../preferences/SourceAttachmentPropertyPage.java  |   42 +-
 .../ui/preferences/SpellingConfigurationBlock.java |   37 +-
 .../ui/preferences/TodoTaskConfigurationBlock.java |   39 +-
 .../ui/preferences/TodoTaskInputDialog.java        |   12 +-
 .../ui/preferences/TodoTaskPreferencePage.java     |   12 +-
 .../ui/preferences/TypeFilterInputDialog.java      |    8 +-
 .../ui/preferences/TypeFilterPreferencePage.java   |  109 +-
 .../ui/preferences/UserLibraryPreferencePage.java  |  176 +-
 .../preferences/WorkInProgressPreferencePage.java  |  168 -
 .../cleanup/AbstractCleanUpTabPage.java            |    9 +-
 .../cleanup/CleanUpConfigurationBlock.java         |   40 +-
 .../preferences/cleanup/CleanUpModifyDialog.java   |    9 +-
 .../ui/preferences/cleanup/CleanUpPreview.java     |    6 +-
 .../preferences/cleanup/CleanUpProfileManager.java |   12 +-
 .../cleanup/CleanUpProfileVersioner.java           |   18 +-
 .../ui/preferences/cleanup/CleanUpTabPage.java     |   10 +-
 .../preferences/cleanup/CodeFormatingTabPage.java  |   12 +-
 .../ui/preferences/cleanup/CodeStyleTabPage.java   |    8 +-
 .../cleanup/ContributedCleanUpTabPage.java         |    9 +-
 .../preferences/cleanup/MemberAccessesTabPage.java |    8 +-
 .../ui/preferences/cleanup/MissingCodeTabPage.java |    6 +-
 .../cleanup/UnnecessaryCodeTabPage.java            |    8 +-
 .../preferences/formatter/AlreadyExistsDialog.java |    5 +-
 .../preferences/formatter/BlankLinesTabPage.java   |   12 +-
 .../ui/preferences/formatter/BracesTabPage.java    |   10 +-
 .../formatter/CodeFormatterConfigurationBlock.java |   11 +-
 .../ui/preferences/formatter/CommentsTabPage.java  |   65 +-
 .../formatter/CompilationUnitPreview.java          |    7 +-
 .../formatter/ControlStatementsTabPage.java        |   12 +-
 .../preferences/formatter/CreateProfileDialog.java |    9 +-
 .../preferences/formatter/FormatterMessages.java   |    9 +-
 .../formatter/FormatterMessages.properties         |   13 +-
 .../formatter/FormatterModifyDialog.java           |    6 +-
 .../formatter/FormatterProfileManager.java         |   30 +-
 .../formatter/FormatterProfileStore.java           |   29 +-
 .../ui/preferences/formatter/FormatterTabPage.java |    7 +-
 .../formatter/IModifyDialogTabPage.java            |    4 +-
 .../preferences/formatter/IndentationTabPage.java  |   18 +-
 .../ui/preferences/formatter/JavaPreview.java      |   14 +-
 .../preferences/formatter/LineWrappingTabPage.java |  131 +-
 .../ui/preferences/formatter/ModifyDialog.java     |   38 +-
 .../preferences/formatter/ModifyDialogTabPage.java |   57 +-
 .../ui/preferences/formatter/NewLinesTabPage.java  |   24 +-
 .../ui/preferences/formatter/OffOnTagsTabPage.java |    9 +-
 .../formatter/ProfileConfigurationBlock.java       |   22 +-
 .../ui/preferences/formatter/ProfileManager.java   |  148 +-
 .../ui/preferences/formatter/ProfileStore.java     |   40 +-
 .../ui/preferences/formatter/ProfileVersioner.java |   96 +-
 .../ui/preferences/formatter/SnippetPreview.java   |   17 +-
 .../preferences/formatter/WhiteSpaceOptions.java   |  221 +-
 .../preferences/formatter/WhiteSpaceTabPage.java   |   69 +-
 .../ui/propertiesfileeditor/ArgumentRule.java      |    4 +-
 .../EscapeBackslashCompletionProposal.java         |   83 +
 .../LeadingWhitespacePredicateRule.java            |    3 +-
 .../ui/propertiesfileeditor/OpenAction.java        |   15 +-
 .../PropertiesCorrectionAssistant.java             |   48 +
 .../PropertiesCorrectionProcessor.java             |  192 +
 .../PropertiesFileAutoEditStrategy.java            |  144 +
 .../PropertiesFileDocumentProvider.java            |   42 +-
 .../propertiesfileeditor/PropertiesFileEditor.java |   50 +-
 .../PropertiesFileEditorActionContributor.java     |    6 +-
 .../PropertiesFileEditorMessages.java              |    7 +-
 .../PropertiesFileEditorMessages.properties        |    6 +-
 .../PropertiesFileEscapes.java                     |  336 +
 .../propertiesfileeditor/PropertiesFileHover.java  |  175 +
 .../PropertiesFilePartitionScanner.java            |    4 +-
 .../PropertiesFileSourceViewerConfiguration.java   |   80 +-
 .../propertiesfileeditor/PropertyKeyHyperlink.java |  125 +-
 .../PropertyKeyHyperlinkDetector.java              |   33 +-
 .../propertiesfileeditor/PropertyValueScanner.java |   33 +-
 .../ui/search/AbstractJavaSearchResult.java        |   12 +-
 .../ui/search/BreakContinueTargetFinder.java       |   24 +-
 .../ui/search/ExceptionOccurrencesFinder.java      |   21 +-
 .../jdt/internal/ui/search/GroupAction.java        |    3 +-
 .../jdt/internal/ui/search/IOccurrencesFinder.java |    3 +-
 .../ui/search/ImplementOccurrencesFinder.java      |   11 +-
 .../jdt/internal/ui/search/JavaElementLine.java    |    6 +-
 .../jdt/internal/ui/search/JavaMatchFilter.java    |   95 +-
 .../jdt/internal/ui/search/JavaSearchPage.java     |   46 +-
 .../jdt/internal/ui/search/JavaSearchQuery.java    |    4 +-
 .../jdt/internal/ui/search/JavaSearchResult.java   |   12 +-
 .../internal/ui/search/JavaSearchResultPage.java   |   33 +-
 .../internal/ui/search/JavaSearchScopeFactory.java |   32 +-
 .../ui/search/JavaSearchTableContentProvider.java  |   16 +-
 .../jdt/internal/ui/search/LRUWorkingSetsList.java |   26 +-
 .../ui/search/LevelTreeContentProvider.java        |   40 +-
 .../jdt/internal/ui/search/MatchLocations.java     |   25 +-
 .../jdt/internal/ui/search/MethodExitsFinder.java  |   42 +-
 .../ui/search/NewSearchResultCollector.java        |   13 +-
 .../jdt/internal/ui/search/OccurrenceMatch.java    |    4 +-
 .../jdt/internal/ui/search/OccurrencesFinder.java  |   23 +-
 .../ui/search/OccurrencesSearchLabelProvider.java  |    4 +-
 .../internal/ui/search/OccurrencesSearchQuery.java |   12 +-
 .../ui/search/OccurrencesSearchResult.java         |    4 +-
 .../ui/search/OccurrencesSearchResultPage.java     |   13 +-
 .../internal/ui/search/PostfixLabelProvider.java   |    6 +-
 .../internal/ui/search/SearchLabelProvider.java    |   27 +-
 .../internal/ui/search/SearchMessages.properties   |    4 +-
 .../search/SearchParticipantsExtensionPoint.java   |   20 +-
 .../internal/ui/search/SearchResultUpdater.java    |   18 +-
 .../eclipse/jdt/internal/ui/search/SearchUtil.java |   19 +-
 .../eclipse/jdt/internal/ui/search/SortAction.java |    3 +-
 .../internal/ui/search/SortingLabelProvider.java   |    5 +-
 .../ui/search/TextSearchTableContentProvider.java  |    6 +-
 .../internal/ui/search/WorkingSetsComparator.java  |   23 +-
 .../ui/text/AbstractInformationControl.java        |   25 +-
 .../jdt/internal/ui/text/AbstractJavaScanner.java  |   13 +-
 .../ui/text/ChangeHoverInformationControl.java     |    6 +-
 .../jdt/internal/ui/text/CombinedWordRule.java     |   13 +-
 .../ui/text/DocumentCharacterIterator.java         |    3 +-
 .../jdt/internal/ui/text/HTMLAnnotationHover.java  |    6 +-
 .../jdt/internal/ui/text/JavaBreakIterator.java    |   23 +-
 .../jdt/internal/ui/text/JavaChangeHover.java      |    7 +-
 .../jdt/internal/ui/text/JavaCodeReader.java       |    4 +-
 .../jdt/internal/ui/text/JavaColorManager.java     |   20 +-
 .../jdt/internal/ui/text/JavaCommentScanner.java   |   27 +-
 .../ui/text/JavaCompositeReconcilingStrategy.java  |    5 +-
 .../jdt/internal/ui/text/JavaElementProvider.java  |   10 +-
 .../jdt/internal/ui/text/JavaHeuristicScanner.java |   53 +-
 .../eclipse/jdt/internal/ui/text/JavaIndenter.java |  358 +-
 .../ui/text/JavaOutlineInformationControl.java     |   54 +-
 .../jdt/internal/ui/text/JavaPairMatcher.java      |    3 +-
 .../jdt/internal/ui/text/JavaPartitionScanner.java |    4 +-
 .../jdt/internal/ui/text/JavaReconciler.java       |   10 +-
 .../internal/ui/text/JavaWhitespaceDetector.java   |    8 +-
 .../jdt/internal/ui/text/JavaWordFinder.java       |   18 +-
 .../jdt/internal/ui/text/JavaWordIterator.java     |   13 +-
 .../jdt/internal/ui/text/LineComparator.java       |   14 +-
 .../ui/text/SequenceCharacterIterator.java         |    3 +-
 .../text/SimpleJavaSourceViewerConfiguration.java  |   14 +-
 .../internal/ui/text/SingleTokenJavaScanner.java   |    8 +-
 .../internal/ui/text/SmartBackspaceManager.java    |   17 +-
 .../org/eclipse/jdt/internal/ui/text/Symbols.java  |    6 +-
 .../eclipse/jdt/internal/ui/text/TypingRun.java    |   15 +-
 .../jdt/internal/ui/text/TypingRunDetector.java    |   17 +-
 .../internal/ui/text/correction/ASTResolving.java  |   43 +-
 .../correction/AdvancedQuickAssistProcessor.java   |  528 +-
 .../ClasspathFixProcessorDescriptor.java           |   26 +-
 .../correction/ContributedProcessorDescriptor.java |   10 +-
 .../text/correction/CorrectionCommandHandler.java  |   11 +-
 .../correction/CorrectionCommandInstaller.java     |   12 +-
 .../CorrectionMarkerResolutionGenerator.java       |   59 +-
 .../ui/text/correction/CorrectionMessages.java     |    8 +-
 .../text/correction/CorrectionMessages.properties  |   10 +-
 .../correction/DefaultClasspathFixProcessor.java   |   22 +-
 .../GetterSetterCorrectionSubProcessor.java        |   10 +-
 .../text/correction/JavaCorrectionAssistant.java   |   24 +-
 .../text/correction/JavaCorrectionProcessor.java   |   53 +-
 .../text/correction/JavadocTagsSubProcessor.java   |  131 +-
 .../correction/LocalCorrectionsSubProcessor.java   |  366 +-
 .../correction/ModifierCorrectionSubProcessor.java |   77 +-
 .../ui/text/correction/ProblemLocation.java        |    3 +-
 .../correction/QuickAssistLightBulbUpdater.java    |    6 +-
 .../ui/text/correction/QuickAssistProcessor.java   |  302 +-
 .../ui/text/correction/QuickFixProcessor.java      |   24 +-
 .../ui/text/correction/QuickTemplateProcessor.java |   17 +-
 .../correction/ReorgCorrectionsSubProcessor.java   |   40 +-
 .../ui/text/correction/ReturnTypeSubProcessor.java |   21 +-
 .../correction/SerialVersionHashOperation.java     |   22 +-
 .../text/correction/SerialVersionSubProcessor.java |    7 +-
 .../ui/text/correction/SimilarElement.java         |    4 +-
 .../text/correction/SimilarElementsRequestor.java  |   11 +-
 .../correction/SuppressWarningsSubProcessor.java   |   25 +-
 .../internal/ui/text/correction/SurroundWith.java  |   84 +-
 .../TypeArgumentMismatchSubProcessor.java          |    4 +-
 .../text/correction/TypeMismatchSubProcessor.java  |   42 +-
 .../correction/UnresolvedElementsSubProcessor.java |  102 +-
 .../proposals/ASTRewriteCorrectionProposal.java    |    3 +-
 .../AbstractMethodCorrectionProposal.java          |   30 +-
 .../proposals/AddArgumentCorrectionProposal.java   |    7 +-
 .../proposals/AddImportCorrectionProposal.java     |    3 +-
 .../proposals/AddTypeParameterProposal.java        |    9 +-
 .../proposals/AssignToVariableAssistProposal.java  |   29 +-
 .../correction/proposals/CUCorrectionProposal.java |   17 +-
 .../proposals/CastCorrectionProposal.java          |    3 +-
 .../proposals/ChangeMethodSignatureProposal.java   |   51 +-
 .../ConstructorFromSuperclassProposal.java         |   18 +-
 .../proposals/CorrectMainTypeNameProposal.java     |    9 +-
 .../CorrectPackageDeclarationProposal.java         |    4 +-
 .../proposals/FixCorrectionProposal.java           |    6 +-
 .../proposals/ImplementInterfaceProposal.java      |    3 +-
 .../proposals/LinkedNamesAssistProposal.java       |   12 +-
 .../MissingAnnotationAttributesProposal.java       |   11 +-
 .../MissingReturnTypeCorrectionProposal.java       |    9 +-
 .../ModifierChangeCorrectionProposal.java          |   25 +-
 .../proposals/NewAnnotationMemberProposal.java     |    8 +-
 .../proposals/NewCUUsingWizardProposal.java        |    6 +-
 .../proposals/NewDefiningMethodProposal.java       |   33 +-
 .../proposals/NewMethodCorrectionProposal.java     |   47 +-
 .../proposals/NewVariableCorrectionProposal.java   |   25 +-
 .../RemoveDeclarationCorrectionProposal.java       |   18 +-
 .../proposals/RenameNodeCorrectionProposal.java    |    3 +-
 .../proposals/ReplaceCorrectionProposal.java       |    3 +-
 .../correction/proposals/TaskMarkerProposal.java   |    3 +-
 .../proposals/TypeChangeCorrectionProposal.java    |   61 +-
 .../folding/DefaultJavaFoldingPreferenceBlock.java |   16 +-
 .../JavaFoldingStructureProviderRegistry.java      |   10 +-
 .../text/java/AbstractJavaCompletionProposal.java  |    3 +-
 ...AbstractTemplateCompletionProposalComputer.java |   19 +-
 .../internal/ui/text/java/AlphabeticSorter.java    |    3 +-
 .../java/AnnotationAtttributeProposalInfo.java     |    3 +-
 .../text/java/AnonymousTypeCompletionProposal.java |   51 +-
 .../ui/text/java/AnonymousTypeProposalInfo.java    |    3 +-
 .../ui/text/java/CompletionProposalCategory.java   |   49 +-
 .../java/CompletionProposalComputerDescriptor.java |   40 +-
 .../java/CompletionProposalComputerRegistry.java   |  101 +-
 .../text/java/ContentAssistComputerParameter.java  |   12 +-
 .../ui/text/java/ContentAssistHistory.java         |   80 +-
 .../ui/text/java/ContentAssistProcessor.java       |  100 +-
 .../internal/ui/text/java/FieldProposalInfo.java   |    3 +-
 ...llArgumentNamesCompletionProposalCollector.java |    3 +-
 .../java/FilledArgumentNamesMethodProposal.java    |    6 +-
 .../text/java/GetterSetterCompletionProposal.java  |    7 +-
 .../ui/text/java/HippieProposalComputer.java       |    9 +-
 .../ui/text/java/ImportCompletionProposal.java     |    4 +-
 .../java/JavaAllCompletionProposalComputer.java    |    4 +-
 .../ui/text/java/JavaAutoIndentStrategy.java       |   27 +-
 .../jdt/internal/ui/text/java/JavaCodeScanner.java |   21 +-
 .../ui/text/java/JavaCompletionProcessor.java      |   10 +-
 .../ui/text/java/JavaCompletionProposal.java       |    4 +-
 .../text/java/JavaCompletionProposalComputer.java  |   32 +-
 .../ui/text/java/JavaDoubleClickSelector.java      |    4 +-
 ...aFieldWithCastedReceiverCompletionProposal.java |    3 +-
 .../ui/text/java/JavaFormattingContext.java        |    5 +-
 .../ui/text/java/JavaFormattingStrategy.java       |   20 +-
 .../ui/text/java/JavaMethodCompletionProposal.java |   22 +-
 .../java/JavaNoTypeCompletionProposalComputer.java |    4 +-
 .../ui/text/java/JavaParameterListValidator.java   |    6 +-
 .../ui/text/java/JavaStringAutoIndentStrategy.java |    7 +-
 .../ui/text/java/JavaTypeCompletionProposal.java   |    5 +-
 .../java/JavaTypeCompletionProposalComputer.java   |   20 +-
 .../ui/text/java/JavadocDoubleClickStrategy.java   |    3 +-
 .../ui/text/java/LazyGenericTypeProposal.java      |   21 +-
 .../ui/text/java/LazyJavaCompletionProposal.java   |   59 +-
 .../text/java/LazyJavaTypeCompletionProposal.java  |   11 +-
 .../internal/ui/text/java/MemberProposalInfo.java  |    3 +-
 .../java/MethodDeclarationCompletionProposal.java  |    7 +-
 .../internal/ui/text/java/MethodProposalInfo.java  |   31 +-
 .../ui/text/java/OverrideCompletionProposal.java   |   14 +-
 .../internal/ui/text/java/ParameterGuesser.java    |   61 +-
 .../ui/text/java/ParameterGuessingProposal.java    |   17 +-
 .../ui/text/java/PartitionDoubleClickSelector.java |    3 +-
 .../ui/text/java/ProposalContextInformation.java   |    4 +-
 .../jdt/internal/ui/text/java/ProposalInfo.java    |    5 +-
 .../ui/text/java/ProposalSorterHandle.java         |    6 +-
 .../ui/text/java/ProposalSorterRegistry.java       |   18 +-
 .../jdt/internal/ui/text/java/RelevanceSorter.java |    5 +-
 .../SWTTemplateCompletionProposalComputer.java     |    3 +-
 .../java/TemplateCompletionProposalComputer.java   |    3 +-
 .../internal/ui/text/java/TypeProposalInfo.java    |    3 +-
 .../text/java/hover/AbstractAnnotationHover.java   |   28 +-
 .../java/hover/AbstractJavaEditorTextHover.java    |   30 +-
 .../ui/text/java/hover/AnnotationExpandHover.java  |   28 +-
 .../java/hover/AnnotationExpansionControl.java     |   26 +-
 .../ui/text/java/hover/BestMatchHover.java         |   25 +-
 .../java/hover/JavaEditorTextHoverDescriptor.java  |   16 +-
 .../text/java/hover/JavaEditorTextHoverProxy.java  |    7 +-
 .../ui/text/java/hover/JavaExpandHover.java        |   18 +-
 .../ui/text/java/hover/JavaHoverMessages.java      |    3 +-
 .../text/java/hover/JavaHoverMessages.properties   |    3 +-
 .../ui/text/java/hover/JavaSourceHover.java        |    6 +-
 .../JavadocBrowserInformationControlInput.java     |    6 +-
 .../internal/ui/text/java/hover/JavadocHover.java  |   36 +-
 .../ui/text/java/hover/NLSStringHover.java         |   79 +-
 .../internal/ui/text/java/hover/ProblemHover.java  |   19 +-
 .../javadoc/HTMLTagCompletionProposalComputer.java |   18 +-
 .../ui/text/javadoc/JavaDoc2HTMLTextReader.java    |   39 +-
 .../ui/text/javadoc/JavaDocAutoIndentStrategy.java |    5 +-
 .../internal/ui/text/javadoc/JavaDocScanner.java   |   22 +-
 .../text/javadoc/JavadocCompletionProcessor.java   |    5 +-
 .../javadoc/JavadocCompletionProposalComputer.java |    3 +-
 .../ui/text/javadoc/JavadocContentAccess2.java     |  218 +-
 .../JavadocContentAssistInvocationContext.java     |    4 +-
 .../JavadocInlineTagCompletionProposal.java        |    4 +-
 .../javadoc/JavadocLinkTypeCompletionProposal.java |    4 +-
 .../LegacyJavadocCompletionProposalComputer.java   |   15 +-
 .../ui/text/spelling/ChangeCaseProposal.java       |    3 +-
 .../ui/text/spelling/CoreSpellingProblem.java      |    4 +-
 .../ui/text/spelling/DefaultSpellingEngine.java    |    6 +-
 .../ui/text/spelling/HtmlTagDictionary.java        |    6 +-
 .../ui/text/spelling/JavaDocTagDictionary.java     |    6 +-
 .../ui/text/spelling/JavaSpellingEngine.java       |    3 +-
 .../ui/text/spelling/JavaSpellingProblem.java      |   13 +-
 .../spelling/JavaSpellingReconcileStrategy.java    |    7 +-
 .../spelling/PropertiesFileSpellCheckIterator.java |    5 +-
 .../spelling/PropertiesFileSpellingEngine.java     |    7 +-
 .../ui/text/spelling/SpellCheckEngine.java         |   83 +-
 .../ui/text/spelling/SpellCheckIterator.java       |    8 +-
 .../ui/text/spelling/TaskTagDictionary.java        |   24 +-
 .../ui/text/spelling/TextSpellingEngine.java       |    3 +-
 .../spelling/WordCompletionProposalComputer.java   |   21 +-
 .../ui/text/spelling/WordQuickFixProcessor.java    |    8 +-
 .../spelling/engine/AbstractSpellDictionary.java   |   49 +-
 .../text/spelling/engine/DefaultSpellChecker.java  |   48 +-
 .../text/spelling/engine/ISpellCheckIterator.java  |    4 +-
 .../ui/text/spelling/engine/ISpellChecker.java     |    4 +-
 .../ui/text/spelling/engine/ISpellDictionary.java  |    4 +-
 .../ui/text/spelling/engine/ISpellEvent.java       |    4 +-
 .../engine/LocaleSensitiveSpellDictionary.java     |    4 +-
 .../spelling/engine/PersistentSpellDictionary.java |    5 +-
 .../text/spelling/engine/RankedWordProposal.java   |    9 +-
 .../ui/text/spelling/engine/SpellEvent.java        |    4 +-
 .../text/template/contentassist/MultiVariable.java |   11 +-
 .../template/contentassist/MultiVariableGuess.java |   23 +-
 .../SurroundWithTemplateProposal.java              |   15 +-
 .../template/contentassist/TemplateEngine.java     |   16 +-
 .../template/contentassist/VariablePosition.java   |    5 +-
 .../preferences/TemplateVariableProcessor.java     |   17 +-
 .../AbstractHierarchyViewerSorter.java             |    4 +-
 .../ui/typehierarchy/EnableMemberFilterAction.java |    3 +-
 .../ui/typehierarchy/FocusOnSelectionAction.java   |    3 +-
 .../ui/typehierarchy/FocusOnTypeAction.java        |    3 +-
 .../typehierarchy/HierarchyInformationControl.java |   25 +-
 .../ui/typehierarchy/HierarchyLabelProvider.java   |   74 +-
 .../ui/typehierarchy/HierarchyViewerSorter.java    |    6 +-
 .../internal/ui/typehierarchy/HistoryAction.java   |   65 +-
 .../ui/typehierarchy/HistoryDropDownAction.java    |   26 +-
 .../ui/typehierarchy/HistoryListAction.java        |   85 +-
 .../ui/typehierarchy/MethodsContentProvider.java   |    6 +-
 .../ui/typehierarchy/MethodsLabelProvider.java     |    8 +-
 .../internal/ui/typehierarchy/MethodsViewer.java   |   10 +-
 .../typehierarchy/ShowInheritedMembersAction.java  |    3 +-
 .../ShowQualifiedTypeNamesAction.java              |    3 +-
 .../ui/typehierarchy/SortByDefiningTypeAction.java |    3 +-
 .../ui/typehierarchy/SubTypeHierarchyViewer.java   |    7 +-
 .../ui/typehierarchy/SuperTypeHierarchyViewer.java |    7 +-
 .../ui/typehierarchy/ToggleLinkingAction.java      |    3 +-
 .../ui/typehierarchy/ToggleOrientationAction.java  |    3 +-
 .../ui/typehierarchy/ToggleViewAction.java         |    3 +-
 .../typehierarchy/TraditionalHierarchyViewer.java  |   10 +-
 .../TypeHierarchyContentProvider.java              |   72 +-
 .../ui/typehierarchy/TypeHierarchyLifeCycle.java   |  116 +-
 .../ui/typehierarchy/TypeHierarchyMessages.java    |   11 +-
 .../typehierarchy/TypeHierarchyMessages.properties |   15 +-
 .../TypeHierarchyTransferDropAdapter.java          |    4 +-
 .../ui/typehierarchy/TypeHierarchyViewPart.java    |  316 +-
 .../ui/typehierarchy/TypeHierarchyViewer.java      |    3 +-
 .../ui/util/BusyIndicatorRunnableContext.java      |    3 +-
 .../eclipse/jdt/internal/ui/util/CoreUtility.java  |    4 +-
 .../jdt/internal/ui/util/ElementValidator.java     |    6 +-
 .../eclipse/jdt/internal/ui/util/JavaUIHelp.java   |    4 +-
 .../jdt/internal/ui/util/JavadocHelpContext.java   |    6 +-
 .../internal/ui/util/MainMethodSearchEngine.java   |   11 +-
 .../internal/ui/util/OpenTypeHierarchyUtil.java    |   41 +-
 .../org/eclipse/jdt/internal/ui/util/SWTUtil.java  |   23 +-
 .../jdt/internal/ui/util/SelectionUtil.java        |   10 +-
 .../jdt/internal/ui/util/StringMatcher.java        |    4 +-
 .../jdt/internal/ui/util/TableLayoutComposite.java |   15 +-
 .../ui/util/TypeNameMatchLabelProvider.java        |    4 +-
 .../viewsupport/AppearanceAwareLabelProvider.java  |   11 +-
 .../ui/viewsupport/BindingLabelProvider.java       |   18 +-
 .../ui/viewsupport/ColoredViewersManager.java      |   10 +-
 .../ui/viewsupport/ColoringLabelProvider.java      |    5 +-
 .../FilteredElementTreeSelectionDialog.java        |   13 +-
 .../internal/ui/viewsupport/FocusDescriptor.java   |   59 +
 .../ui/viewsupport/HistoryDropDownAction.java      |   25 +-
 .../internal/ui/viewsupport/HistoryListAction.java |   45 +-
 .../ui/viewsupport/ImageDescriptorRegistry.java    |   27 +-
 .../ui/viewsupport/ImageImageDescriptor.java       |    5 +-
 .../ui/viewsupport/ImagesOnFileSystemRegistry.java |    8 +-
 .../ui/viewsupport/JavaElementImageProvider.java   |   75 +-
 .../ui/viewsupport/JavaElementLabelComposer.java   |   55 +-
 .../internal/ui/viewsupport/JavaElementLinks.java  |   20 +-
 .../ui/viewsupport/JavaUILabelProvider.java        |   16 +-
 .../internal/ui/viewsupport/JavaViewerFilter.java  |    3 +-
 .../jdt/internal/ui/viewsupport/LibraryFilter.java |    3 +-
 .../viewsupport/LinkedProposalModelPresenter.java  |   12 +-
 .../jdt/internal/ui/viewsupport/MemberFilter.java  |    3 +-
 .../ui/viewsupport/MemberFilterAction.java         |    3 +-
 .../ui/viewsupport/ProblemMarkerManager.java       |   25 +-
 .../ui/viewsupport/ProblemTableViewer.java         |   19 +-
 .../internal/ui/viewsupport/ProblemTreeViewer.java |   20 +-
 .../ui/viewsupport/ProjectTemplateStore.java       |    6 +-
 .../ui/viewsupport/ResourceToItemsMapper.java      |   35 +-
 .../SelectionListenerWithASTManager.java           |   11 +-
 .../ui/viewsupport/SourcePositionComparator.java   |    3 +-
 .../ui/viewsupport/StorageLabelProvider.java       |   15 +-
 .../TreeHierarchyLayoutProblemsDecorator.java      |    3 +-
 .../jdt/internal/ui/viewsupport/ViewHistory.java   |   20 +-
 .../jdt/internal/ui/wizards/ClassPathDetector.java |   74 +-
 .../jdt/internal/ui/wizards/JavaProjectWizard.java |    8 +-
 .../ui/wizards/NewAnnotationCreationWizard.java    |    7 +-
 .../ui/wizards/NewClassCreationWizard.java         |    7 +-
 .../jdt/internal/ui/wizards/NewElementWizard.java  |    3 +-
 .../internal/ui/wizards/NewEnumCreationWizard.java |    7 +-
 .../ui/wizards/NewInterfaceCreationWizard.java     |    7 +-
 .../ui/wizards/NewJavaWorkingSetWizard.java        |    4 +-
 .../ui/wizards/NewPackageCreationWizard.java       |    6 +-
 .../ui/wizards/NewSourceFolderCreationWizard.java  |    6 +-
 .../ui/wizards/NewSourceFolderWizardPage.java      |   28 +-
 .../internal/ui/wizards/NewTypeDropDownAction.java |    8 +-
 .../jdt/internal/ui/wizards/NewWizardMessages.java |   11 +-
 .../ui/wizards/NewWizardMessages.properties        |   13 +-
 .../ui/wizards/SuperInterfaceSelectionDialog.java  |   16 +-
 .../ui/wizards/TypedElementSelectionValidator.java |    8 +-
 .../jdt/internal/ui/wizards/TypedViewerFilter.java |    5 +-
 .../wizards/buildpaths/AccessRuleEntryDialog.java  |    5 +-
 .../ui/wizards/buildpaths/AccessRulesDialog.java   |   54 +-
 .../wizards/buildpaths/AddSourceFolderWizard.java  |   16 +-
 .../buildpaths/AddSourceFolderWizardPage.java      |   58 +-
 .../ui/wizards/buildpaths/ArchiveFileFilter.java   |    7 +-
 .../ui/wizards/buildpaths/BuildPathBasePage.java   |   16 +-
 .../ui/wizards/buildpaths/BuildPathSupport.java    |   28 +-
 .../ui/wizards/buildpaths/BuildPathWizard.java     |   22 +-
 .../ui/wizards/buildpaths/BuildPathsBlock.java     |   67 +-
 .../ui/wizards/buildpaths/CPListElement.java       |   50 +-
 .../wizards/buildpaths/CPListElementAttribute.java |   13 +-
 .../ui/wizards/buildpaths/CPListElementSorter.java |    4 +-
 .../ui/wizards/buildpaths/CPListLabelProvider.java |    4 +-
 .../wizards/buildpaths/CPUserLibraryElement.java   |   34 +-
 .../ui/wizards/buildpaths/CPVariableElement.java   |    4 +-
 .../buildpaths/CPVariableElementLabelProvider.java |    7 +-
 ...ClasspathAttributeConfigurationDescriptors.java |   12 +-
 .../buildpaths/ClasspathContainerDefaultPage.java  |    6 +-
 .../buildpaths/ClasspathContainerDescriptor.java   |    6 +-
 .../ClasspathContainerSelectionPage.java           |    8 +-
 .../buildpaths/ClasspathContainerWizard.java       |    7 +-
 .../buildpaths/ClasspathFixSelectionDialog.java    |    9 +-
 .../buildpaths/ClasspathOrderingWorkbookPage.java  |   18 +-
 .../CreateMultipleSourceFoldersDialog.java         |   71 +-
 .../ui/wizards/buildpaths/EditFilterWizard.java    |    5 +-
 .../buildpaths/EditVariableEntryDialog.java        |    9 +-
 .../buildpaths/ExclusionInclusionDialog.java       |   53 +-
 .../buildpaths/ExclusionInclusionEntryDialog.java  |   10 +-
 .../wizards/buildpaths/FolderSelectionDialog.java  |    4 +-
 .../wizards/buildpaths/JARFileSelectionDialog.java |    6 +-
 .../buildpaths/JavadocAttributeConfiguration.java  |    9 +-
 .../wizards/buildpaths/JavadocLocationDialog.java  |    5 +-
 .../wizards/buildpaths/LibrariesWorkbookPage.java  |  146 +-
 .../buildpaths/MultipleFolderSelectionDialog.java  |   21 +-
 .../NativeLibAttributeConfiguration.java           |    9 +-
 .../wizards/buildpaths/NativeLibrariesDialog.java  |    4 +-
 .../ui/wizards/buildpaths/NewContainerDialog.java  |    4 +-
 .../wizards/buildpaths/NewSourceFolderDialog.java  |    8 +-
 .../wizards/buildpaths/NewVariableEntryDialog.java |   43 +-
 .../wizards/buildpaths/OutputLocationDialog.java   |   10 +-
 .../wizards/buildpaths/ProjectsWorkbookPage.java   |   78 +-
 .../ui/wizards/buildpaths/SetFilterWizardPage.java |   65 +-
 .../wizards/buildpaths/SourceAttachmentBlock.java  |    4 +-
 .../wizards/buildpaths/SourceAttachmentDialog.java |    5 +-
 .../buildpaths/SourceContainerWorkbookPage.java    |  128 +-
 .../UserLibraryMarkerResolutionGenerator.java      |   15 +-
 .../wizards/buildpaths/UserLibraryWizardPage.java  |   87 +-
 .../ui/wizards/buildpaths/VariableBlock.java       |   67 +-
 .../wizards/buildpaths/VariableCreationDialog.java |   10 +-
 .../buildpaths/VariablePathDialogField.java        |   15 +-
 .../newsourcepage/AddArchiveToBuildpathAction.java |   15 +-
 .../newsourcepage/AddFolderToBuildpathAction.java  |   25 +-
 .../newsourcepage/AddLibraryToBuildpathAction.java |   14 +-
 .../AddSelectedLibraryToBuildpathAction.java       |   21 +-
 .../newsourcepage/BuildpathModifierAction.java     |   22 +-
 .../ClasspathModifierDropDownAction.java           |   28 +-
 .../newsourcepage/ClasspathModifierQueries.java    |  102 +-
 .../newsourcepage/ConfigureBuildPathAction.java    |    7 +-
 .../CreateLinkedSourceFolderAction.java            |   11 +-
 .../CreateLinkedSourceFolderAction2.java           |    3 +-
 .../newsourcepage/CreateSourceFolderAction.java    |   11 +-
 .../newsourcepage/CreateSourceFolderAction2.java   |    3 +-
 .../newsourcepage/DialogPackageExplorer.java       |   33 +-
 .../DialogPackageExplorerActionGroup.java          |   54 +-
 .../buildpaths/newsourcepage/EditFilterAction.java |    9 +-
 .../newsourcepage/EditOutputFolderAction.java      |   11 +-
 .../newsourcepage/ExcludeFromBuildpathAction.java  |   17 +-
 .../GenerateBuildPathActionGroup.java              |   27 +-
 .../buildpaths/newsourcepage/HelpAction.java       |    5 +-
 .../buildpaths/newsourcepage/HintTextGroup.java    |   31 +-
 .../newsourcepage/IncludeToBuildpathAction.java    |   17 +-
 .../buildpaths/newsourcepage/LinkFolderDialog.java |  532 --
 .../NewSourceContainerWorkbookPage.java            |   48 +-
 .../newsourcepage/RemoveFromBuildpathAction.java   |   25 +-
 .../newsourcepage/RemoveLinkedFolderDialog.java    |    4 +-
 .../buildpaths/newsourcepage/ResetAction.java      |   19 +-
 .../buildpaths/newsourcepage/ResetAllAction.java   |   19 +-
 .../newsourcepage/ResetAllOutputFoldersAction.java |   17 +-
 .../dialogfields/CheckedListDialogField.java       |   46 +-
 .../ui/wizards/dialogfields/ComboDialogField.java  |    7 +-
 .../ui/wizards/dialogfields/IListAdapter.java      |   21 +-
 .../ui/wizards/dialogfields/ITreeListAdapter.java  |   20 +-
 .../ui/wizards/dialogfields/ListDialogField.java   |   89 +-
 .../dialogfields/SelectionButtonDialogField.java   |    7 +-
 .../SelectionButtonDialogFieldGroup.java           |    6 +-
 .../ui/wizards/dialogfields/Separator.java         |    4 +-
 .../dialogfields/StringButtonDialogField.java      |    5 +-
 .../StringButtonStatusDialogField.java             |    6 +-
 .../ui/wizards/dialogfields/StringDialogField.java |    7 +-
 .../wizards/dialogfields/TextBoxDialogField.java   |    3 +-
 .../wizards/dialogfields/TreeListDialogField.java  |  107 +-
 .../workingsets/AbstractWorkingSetWizardPage.java  |   21 +-
 .../ui/workingsets/ClearWorkingSetAction.java      |    3 +-
 .../ui/workingsets/ConfigureWorkingSetAction.java  |   10 +-
 .../ConfigureWorkingSetAssignementAction.java      |   98 +-
 .../ui/workingsets/EditWorkingSetAction.java       |    3 +-
 .../workingsets/JavaWorkingSetElementAdapter.java  |    6 +-
 .../ui/workingsets/JavaWorkingSetPage.java         |   11 +-
 .../JavaWorkingSetPageContentProvider.java         |    5 +-
 .../ui/workingsets/JavaWorkingSetUpdater.java      |   24 +-
 .../ui/workingsets/OthersWorkingSetUpdater.java    |   21 +-
 .../workingsets/RemoveWorkingSetElementAction.java |   16 +-
 .../ui/workingsets/SelectWorkingSetAction.java     |    3 +-
 .../jdt/internal/ui/workingsets/ViewAction.java    |    3 +-
 .../internal/ui/workingsets/ViewActionGroup.java   |    5 +-
 .../ui/workingsets/WorkingSetComparator.java       |   32 +-
 .../workingsets/WorkingSetConfigurationDialog.java |  152 +-
 .../internal/ui/workingsets/WorkingSetFilter.java  |    5 +-
 .../workingsets/WorkingSetFilterActionGroup.java   |   10 +-
 .../WorkingSetMenuContributionItem.java            |    6 +-
 .../ui/workingsets/WorkingSetMessages.properties   |   10 +-
 .../internal/ui/workingsets/WorkingSetModel.java   |  292 +-
 .../ui/workingsets/WorkingSetShowActionGroup.java  |    9 +-
 .../ui/org/eclipse/jdt/ui/CodeGeneration.java      |    4 +-
 .../org/eclipse/jdt/ui/JavaElementComparator.java  |    4 +-
 .../eclipse/jdt/ui/JavaElementContentProvider.java |    4 +-
 .../eclipse/jdt/ui/JavaElementImageDescriptor.java |   32 +-
 .../eclipse/jdt/ui/JavaElementLabelProvider.java   |    5 +-
 .../ui/org/eclipse/jdt/ui/JavaElementLabels.java   |    6 +-
 .../ui/org/eclipse/jdt/ui/JavaElementSorter.java   |    5 +-
 .../ui/org/eclipse/jdt/ui/JavaUI.java              |   12 +-
 .../ui/org/eclipse/jdt/ui/PreferenceConstants.java |   44 +-
 .../org/eclipse/jdt/ui/ProblemsLabelDecorator.java |   20 +-
 .../ui/org/eclipse/jdt/ui/SharedASTProvider.java   |   12 +-
 .../jdt/ui/StandardJavaElementContentProvider.java |    6 +-
 .../jdt/ui/actions/AbstractOpenWizardAction.java   |    3 +-
 .../jdt/ui/actions/AddDelegateMethodsAction.java   |   33 +-
 .../jdt/ui/actions/AddGetterSetterAction.java      |   93 +-
 .../jdt/ui/actions/AddJavaDocStubAction.java       |    8 +-
 .../jdt/ui/actions/AddToClasspathAction.java       |   12 +-
 .../AddUnimplementedConstructorsAction.java        |   22 +-
 .../eclipse/jdt/ui/actions/BuildActionGroup.java   |    6 +-
 .../org/eclipse/jdt/ui/actions/CCPActionGroup.java |   73 +-
 .../eclipse/jdt/ui/actions/ChangeTypeAction.java   |    7 +-
 .../ui/actions/ConvertAnonymousToNestedAction.java |    7 +-
 .../jdt/ui/actions/ConvertLocalToFieldAction.java  |    5 +-
 .../jdt/ui/actions/ConvertNestedToTopAction.java   |   11 +-
 .../ui/actions/ConvertingSelectionProvider.java    |    6 +-
 .../jdt/ui/actions/CustomFiltersActionGroup.java   |  104 +-
 .../jdt/ui/actions/DeclarationsSearchGroup.java    |    9 +-
 .../jdt/ui/actions/ExternalizeStringsAction.java   |   48 +-
 .../eclipse/jdt/ui/actions/ExtractClassAction.java |   11 +-
 .../jdt/ui/actions/ExtractConstantAction.java      |    5 +-
 .../jdt/ui/actions/ExtractInterfaceAction.java     |   11 +-
 .../jdt/ui/actions/ExtractMethodAction.java        |    5 +-
 .../eclipse/jdt/ui/actions/ExtractTempAction.java  |    5 +-
 .../ui/org/eclipse/jdt/ui/actions/FindAction.java  |   10 +-
 .../FindBreakContinueTargetOccurrencesAction.java  |    6 +-
 .../jdt/ui/actions/FindDeclarationsAction.java     |    7 +-
 .../actions/FindDeclarationsInHierarchyAction.java |    7 +-
 .../actions/FindDeclarationsInProjectAction.java   |    4 +-
 .../FindDeclarationsInWorkingSetAction.java        |    4 +-
 .../ui/actions/FindExceptionOccurrencesAction.java |    6 +-
 .../ui/actions/FindImplementOccurrencesAction.java |    6 +-
 .../jdt/ui/actions/FindImplementorsAction.java     |    9 +-
 .../actions/FindImplementorsInProjectAction.java   |    4 +-
 .../FindImplementorsInWorkingSetAction.java        |    4 +-
 .../actions/FindMethodExitOccurrencesAction.java   |    6 +-
 .../ui/actions/FindOccurrencesInFileAction.java    |    7 +-
 .../jdt/ui/actions/FindReadReferencesAction.java   |    8 +-
 .../FindReadReferencesInHierarchyAction.java       |    8 +-
 .../actions/FindReadReferencesInProjectAction.java |    4 +-
 .../FindReadReferencesInWorkingSetAction.java      |    8 +-
 .../jdt/ui/actions/FindReferencesAction.java       |    9 +-
 .../actions/FindReferencesInHierarchyAction.java   |    7 +-
 .../ui/actions/FindReferencesInProjectAction.java  |    7 +-
 .../actions/FindReferencesInWorkingSetAction.java  |    4 +-
 .../ui/actions/FindStringsToExternalizeAction.java |   38 +-
 .../jdt/ui/actions/FindWriteReferencesAction.java  |    8 +-
 .../FindWriteReferencesInHierarchyAction.java      |    8 +-
 .../FindWriteReferencesInProjectAction.java        |    4 +-
 .../FindWriteReferencesInWorkingSetAction.java     |    8 +-
 .../eclipse/jdt/ui/actions/FormatAllAction.java    |    6 +-
 .../jdt/ui/actions/GenerateActionGroup.java        |   15 +-
 .../ui/actions/GenerateHashCodeEqualsAction.java   |   32 +-
 .../ui/actions/GenerateMethodAbstractAction.java   |   10 +-
 .../GenerateNewConstructorUsingFieldsAction.java   |   24 +-
 .../jdt/ui/actions/GenerateToStringAction.java     |   61 +-
 .../ui/actions/IJavaEditorActionDefinitionIds.java |   14 +-
 .../jdt/ui/actions/ImplementorsSearchGroup.java    |    9 +-
 .../eclipse/jdt/ui/actions/ImportActionGroup.java  |    4 +-
 .../jdt/ui/actions/InferTypeArgumentsAction.java   |    9 +-
 .../org/eclipse/jdt/ui/actions/InlineAction.java   |    5 +-
 .../eclipse/jdt/ui/actions/InlineTempAction.java   |    7 +-
 .../jdt/ui/actions/IntroduceFactoryAction.java     |    7 +-
 .../jdt/ui/actions/IntroduceIndirectionAction.java |   19 +-
 .../jdt/ui/actions/IntroduceParameterAction.java   |    5 +-
 .../jdt/ui/actions/JavaSearchActionGroup.java      |    6 +-
 .../jdt/ui/actions/MemberFilterActionGroup.java    |    8 +-
 .../jdt/ui/actions/ModifyParametersAction.java     |    7 +-
 .../ui/org/eclipse/jdt/ui/actions/MoveAction.java  |   13 +-
 .../jdt/ui/actions/NavigateActionGroup.java        |    7 +-
 .../jdt/ui/actions/OccurrencesSearchGroup.java     |    6 +-
 .../ui/org/eclipse/jdt/ui/actions/OpenAction.java  |   58 +-
 .../jdt/ui/actions/OpenAttachedJavadocAction.java  |    7 +-
 .../jdt/ui/actions/OpenEditorActionGroup.java      |    5 +-
 .../jdt/ui/actions/OpenExternalJavadocAction.java  |    4 +-
 .../jdt/ui/actions/OpenImplementationAction.java   |   28 +-
 .../actions/OpenJavaBrowsingPerspectiveAction.java |    3 +-
 .../jdt/ui/actions/OpenJavaPerspectiveAction.java  |    3 +-
 .../ui/actions/OpenNewAnnotationWizardAction.java  |    3 +-
 .../jdt/ui/actions/OpenNewClassWizardAction.java   |    3 +-
 .../jdt/ui/actions/OpenNewEnumWizardAction.java    |    3 +-
 .../ui/actions/OpenNewInterfaceWizardAction.java   |    3 +-
 .../ui/actions/OpenNewJavaProjectWizardAction.java |    4 +-
 .../jdt/ui/actions/OpenNewPackageWizardAction.java |    3 +-
 .../actions/OpenNewSourceFolderWizardAction.java   |    3 +-
 .../eclipse/jdt/ui/actions/OpenProjectAction.java  |   20 +-
 .../ui/actions/OpenSuperImplementationAction.java  |    6 +-
 .../jdt/ui/actions/OpenTypeHierarchyAction.java    |  235 +-
 .../jdt/ui/actions/OpenViewActionGroup.java        |    5 +-
 .../jdt/ui/actions/OrganizeImportsAction.java      |   13 +-
 .../jdt/ui/actions/OverrideMethodsAction.java      |   12 +-
 .../eclipse/jdt/ui/actions/ProjectActionGroup.java |   11 +-
 .../org/eclipse/jdt/ui/actions/PullUpAction.java   |   13 +-
 .../org/eclipse/jdt/ui/actions/PushDownAction.java |   13 +-
 .../jdt/ui/actions/ReadReferencesSearchGroup.java  |    9 +-
 .../jdt/ui/actions/RefactorActionGroup.java        |   33 +-
 .../jdt/ui/actions/ReferencesSearchGroup.java      |    9 +-
 .../org/eclipse/jdt/ui/actions/RefreshAction.java  |   43 +-
 .../jdt/ui/actions/RemoveFromClasspathAction.java  |   12 +-
 .../org/eclipse/jdt/ui/actions/RenameAction.java   |   11 +-
 .../jdt/ui/actions/ReplaceInvocationsAction.java   |    7 +-
 .../jdt/ui/actions/SelectionDispatchAction.java    |    3 +-
 .../jdt/ui/actions/SelfEncapsulateFieldAction.java |   17 +-
 .../eclipse/jdt/ui/actions/ShowActionGroup.java    |    5 +-
 .../jdt/ui/actions/ShowInNavigatorViewAction.java  |    6 +-
 .../jdt/ui/actions/ShowInPackageViewAction.java    |    6 +-
 .../eclipse/jdt/ui/actions/SortMembersAction.java  |   11 +-
 .../jdt/ui/actions/SurroundWithTryCatchAction.java |    6 +-
 .../eclipse/jdt/ui/actions/UseSupertypeAction.java |   11 +-
 .../jdt/ui/actions/WorkingSetFindAction.java       |   10 +-
 .../jdt/ui/actions/WriteReferencesSearchGroup.java |    9 +-
 .../org/eclipse/jdt/ui/cleanup/CleanUpContext.java |    4 +-
 .../org/eclipse/jdt/ui/cleanup/CleanUpOptions.java |   12 +-
 .../jdt/ui/cleanup/CleanUpRequirements.java        |    8 +-
 .../org/eclipse/jdt/ui/jarpackager/JarWriter.java  |    8 +-
 .../org/eclipse/jdt/ui/jarpackager/JarWriter2.java |    8 +-
 .../org/eclipse/jdt/ui/jarpackager/JarWriter3.java |   20 +-
 .../ui/refactoring/IRefactoringProcessorIds.java   |    4 +-
 .../jdt/ui/refactoring/RefactoringSaveHelper.java  |    6 +-
 .../eclipse/jdt/ui/refactoring/RenameSupport.java  |    3 +-
 .../jdt/ui/text/JavaSourceViewerConfiguration.java |   35 +-
 .../DefaultJavaFoldingStructureProvider.java       |   95 +-
 .../jdt/ui/text/java/AbstractProposalSorter.java   |   26 +-
 .../ui/text/java/CompletionProposalCollector.java  |   19 +-
 .../ui/text/java/CompletionProposalComparator.java |   14 +-
 .../text/java/CompletionProposalLabelProvider.java |    5 +-
 .../text/java/ContentAssistInvocationContext.java  |    4 +-
 .../text/java/IJavaCompletionProposalComputer.java |    6 +-
 .../jdt/ui/wizards/BuildPathDialogAccess.java      |   14 +-
 .../wizards/JavaCapabilityConfigurationPage.java   |    5 +-
 .../jdt/ui/wizards/JavadocExportWizardPage.java    |    4 +-
 .../jdt/ui/wizards/NewAnnotationWizardPage.java    |    4 +-
 .../eclipse/jdt/ui/wizards/NewClassWizardPage.java |    5 +-
 .../jdt/ui/wizards/NewContainerWizardPage.java     |    6 +-
 .../jdt/ui/wizards/NewElementWizardPage.java       |    3 +-
 .../eclipse/jdt/ui/wizards/NewEnumWizardPage.java  |    4 +-
 .../jdt/ui/wizards/NewInterfaceWizardPage.java     |    4 +-
 .../jdt/ui/wizards/NewJavaProjectWizardPage.java   |    6 +-
 .../ui/wizards/NewJavaProjectWizardPageOne.java    |   42 +-
 .../ui/wizards/NewJavaProjectWizardPageTwo.java    |   16 +-
 .../jdt/ui/wizards/NewPackageWizardPage.java       |    4 +-
 .../eclipse/jdt/ui/wizards/NewTypeWizardPage.java  |   92 +-
 .../plugins/org.eclipse.jdt/META-INF/MANIFEST.MF   |    2 +-
 eclipse/plugins/org.eclipse.jdt/about.properties   |    4 +-
 .../org.eclipse.jdt/cheatsheets/HelloWorldSWT.xml  |   27 +-
 eclipse/plugins/org.eclipse.jdt/notice.html        |  191 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../jface/databinding/swt/SWTObservables.java      |   55 +-
 .../jface/databinding/swt/WidgetProperties.java    |   28 +-
 .../viewers/ObservableListContentProvider.java     |   17 +-
 .../viewers/ObservableListTreeContentProvider.java |   12 +
 .../viewers/ObservableSetContentProvider.java      |   17 +-
 .../viewers/ObservableSetTreeContentProvider.java  |   12 +
 .../swt/CTabItemTooltipTextProperty.java           |    2 +-
 .../databinding/swt/MenuEnabledProperty.java       |   31 +
 .../databinding/swt/MenuItemEnabledProperty.java   |   31 +
 .../databinding/swt/MenuItemSelectionProperty.java |   39 +
 .../databinding/swt/ScrollBarEnabledProperty.java  |   31 +
 .../databinding/swt/SliderMaximumProperty.java     |   31 +
 .../databinding/swt/SliderMinimumProperty.java     |   31 +
 .../databinding/swt/SliderSelectionProperty.java   |   39 +
 .../swt/TabItemTooltipTextProperty.java            |    2 +-
 .../swt/TableColumnTooltipTextProperty.java        |    2 +-
 .../databinding/swt/ToolItemEnabledProperty.java   |   31 +
 .../swt/ToolItemTooltipTextProperty.java           |    2 +-
 .../swt/TrayItemTooltipTextProperty.java           |    2 +-
 .../swt/TreeColumnTooltipTextProperty.java         |    2 +-
 .../databinding/swt/WidgetEnabledProperty.java     |   66 +
 .../databinding/swt/WidgetMaximumProperty.java     |    8 +
 .../databinding/swt/WidgetMinimumProperty.java     |    8 +
 .../databinding/swt/WidgetSelectionProperty.java   |   14 +
 .../databinding/viewers/TreeViewerUpdater.java     |    3 +-
 .../org.eclipse.jface.text/META-INF/MANIFEST.MF    |    2 +-
 .../text/source/projection/ProjectionSummary.java  |   58 +-
 .../text/source/projection/ProjectionViewer.java   |    2 +-
 .../jface/internal/text/SelectionProcessor.java    |    2 +-
 .../jface/internal/text/html/HTMLPrinter.java      |   57 +
 .../contentassist/CompletionProposalPopup2.java    |   85 +-
 .../text/link/contentassist/ContentAssistant2.java |   21 +-
 .../jface/text/AbstractInformationControl.java     |    3 +-
 .../text/AbstractInformationControlManager.java    |   13 +-
 .../jface/text/DefaultTextDoubleClickStrategy.java |   94 +-
 .../eclipse/jface/text/IInformationControl.java    |    6 +-
 .../jface/text/JFaceTextMessages.properties        |    4 +-
 .../org/eclipse/jface/text/TextPresentation.java   |   18 +-
 .../src/org/eclipse/jface/text/TextViewer.java     |   56 +-
 .../jface/text/WhitespaceCharacterPainter.java     |  241 +-
 .../contentassist/CompletionProposalPopup.java     |   62 +-
 .../ContentAssistSubjectControlAdapter.java        |    4 +-
 .../jface/text/contentassist/ContentAssistant.java |   14 +-
 .../text/hyperlink/DefaultHyperlinkPresenter.java  |    5 +-
 .../jface/text/hyperlink/HyperlinkManager.java     |   79 +-
 .../jface/text/hyperlink/IHyperlinkPresenter.java  |    7 +-
 .../hyperlink/IHyperlinkPresenterExtension2.java   |   36 +
 .../text/hyperlink/MultipleHyperlinkPresenter.java |  136 +-
 .../jface/text/hyperlink/URLHyperlinkDetector.java |   19 +-
 .../text/information/InformationPresenter.java     |    8 +-
 .../text/quickassist/QuickAssistAssistant.java     |   28 +-
 .../jface/text/reconciler/AbstractReconciler.java  |    4 +-
 .../text/source/AnnotationBarHoverManager.java     |   18 +
 .../jface/text/source/AnnotationPainter.java       |   41 +-
 .../jface/text/source/ChangeRulerColumn.java       |    2 +-
 .../jface/text/source/DefaultAnnotationHover.java  |    4 +-
 .../eclipse/jface/text/source/OverviewRuler.java   |  408 +-
 .../eclipse/jface/text/source/SourceViewer.java    |   11 +-
 .../jface/text/source/VisualAnnotationModel.java   |  144 -
 .../jface/text/templates/ContextTypeRegistry.java  |    4 +-
 eclipse/plugins/org.eclipse.jface/.options         |    7 +-
 .../org.eclipse.jface/.settings/.api_filters       |   10 +
 .../plugins/org.eclipse.jface/META-INF/MANIFEST.MF |    2 +-
 .../src/org/eclipse/jface/action/MenuManager.java  |   18 +-
 .../src/org/eclipse/jface/action/StatusLine.java   |   50 +-
 .../org/eclipse/jface/dialogs/DialogSettings.java  |   23 +-
 .../src/org/eclipse/jface/dialogs/ErrorDialog.java |    4 +
 .../jface/dialogs/ErrorSupportProvider.java        |   15 +
 .../eclipse/jface/dialogs/IDialogConstants.java    |  149 +-
 .../eclipse/jface/dialogs/IDialogLabelKeys.java    |  209 +
 .../org/eclipse/jface/dialogs/IDialogSettings.java |    8 +-
 .../src/org/eclipse/jface/dialogs/PopupDialog.java |   37 +-
 .../src/org/eclipse/jface/dialogs/TrayDialog.java  |   95 +-
 .../jface/fieldassist/ControlDecoration.java       |    9 +-
 .../org/eclipse/jface/internal/InternalPolicy.java |    9 +-
 .../eclipse/jface/preference/ColorSelector.java    |   14 +-
 .../eclipse/jface/preference/IPreferenceStore.java |   92 +-
 .../eclipse/jface/preference/PreferencePage.java   |   17 +-
 .../jface/resource/CompositeImageDescriptor.java   |   25 +-
 .../eclipse/jface/resource/ResourceRegistry.java   |    9 +-
 .../jface/resource/jfacefonts_windows7.properties  |   22 +
 .../resource/jfacefonts_windowsvista.properties    |   22 +
 .../src/org/eclipse/jface/util/OpenStrategy.java   |   18 +-
 .../eclipse/jface/viewers/AbstractTreeViewer.java  |   49 +-
 .../src/org/eclipse/jface/viewers/CellEditor.java  |   18 +-
 .../eclipse/jface/viewers/CheckboxTableViewer.java |   88 +-
 .../eclipse/jface/viewers/ColumnViewerEditor.java  |    5 +-
 .../jface/viewers/ComboBoxViewerCellEditor.java    |   14 +-
 .../org/eclipse/jface/viewers/ContentViewer.java   |    6 +
 .../eclipse/jface/viewers/IBaseLabelProvider.java  |   20 +-
 .../jface/viewers/IPostSelectionProvider.java      |    8 +-
 .../eclipse/jface/viewers/ISelectionProvider.java  |    4 +-
 .../eclipse/jface/viewers/SWTFocusCellManager.java |    5 +-
 .../eclipse/jface/viewers/StructuredViewer.java    |   34 +-
 .../jface/viewers/StyledCellLabelProvider.java     |   46 +-
 .../src/org/eclipse/jface/viewers/Viewer.java      |   16 +-
 .../eclipse/jface/viewers/ViewerDropAdapter.java   |   12 +-
 .../jface/viewers/deferred/ChangeQueue.java        |    8 +-
 .../src/org/eclipse/jface/wizard/IWizard.java      |   30 +-
 .../src/org/eclipse/jface/wizard/Wizard.java       |   43 +-
 .../src/org/eclipse/jface/wizard/WizardDialog.java |   65 +-
 .../org.eclipse.jsch.core/META-INF/MANIFEST.MF     |    2 +-
 eclipse/plugins/org.eclipse.jsch.core/plugin.xml   |   11 +
 .../org/eclipse/jsch/internal/core/IConstants.java |    6 +-
 .../jsch/internal/core/PreferenceInitializer.java  |   74 +-
 .../src/org/eclipse/jsch/internal/core/Utils.java  |    2 +-
 eclipse/plugins/org.eclipse.jsch.ui/plugin.xml     |   11 +
 .../src/org/eclipse/jsch/internal/ui/Messages.java |    2 +-
 .../internal/ui/preference/PreferencePage.java     |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../participants/ProcessorBasedRefactoring.java    |    6 +-
 .../participants/RefactoringProcessor.java         |    8 +-
 .../resource/MoveResourcesDescriptor.java          |    4 +-
 .../internal/core/refactoring/UndoManager2.java    |   48 +-
 .../history/RefactoringHistoryManager.java         |   21 +-
 .../resource/RenameResourceProcessor.java          |    8 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../ui/refactoring/AbstractChangeNode.java         |    6 +-
 .../ui/refactoring/RefactoringStatusViewer.java    |   16 +-
 .../ui/refactoring/RefactoringWizardDialog2.java   |    7 +-
 .../history/RefactoringHistoryControl.java         |   38 +-
 .../ltk/internal/ui/refactoring/util/SWTUtil.java  |   24 +-
 .../ltk/ui/refactoring/RefactoringWizard.java      |   44 +-
 .../RefactoringWizardOpenOperation.java            |    3 +-
 eclipse/plugins/org.eclipse.osgi.jmx/.classpath    |    7 -
 eclipse/plugins/org.eclipse.osgi.jmx/.project      |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  309 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../org.eclipse.osgi.jmx/META-INF/MANIFEST.MF      |   23 -
 eclipse/plugins/org.eclipse.osgi.jmx/about.html    |   28 -
 .../plugins/org.eclipse.osgi.jmx/build.properties  |   20 -
 .../org.eclipse.osgi.jmx/icons/bundles/bundle.gif  |  Bin 335 -> 0 bytes
 .../icons/bundles/bundle_provider.gif              |  Bin 344 -> 0 bytes
 .../icons/bundles/bundle_service.gif               |  Bin 581 -> 0 bytes
 .../icons/bundles/component.gif                    |  Bin 197 -> 0 bytes
 .../icons/bundles/mbean_operation.gif              |  Bin 111 -> 0 bytes
 .../icons/bundles/mbean_operation_none.gif         |  Bin 954 -> 0 bytes
 .../icons/bundles/mbean_operations.gif             |  Bin 923 -> 0 bytes
 .../icons/bundles/ovr_bundle_active.gif            |  Bin 122 -> 0 bytes
 .../icons/bundles/ovr_bundle_resolved.gif          |  Bin 119 -> 0 bytes
 .../icons/bundles/ovr_bundle_stopped.gif           |  Bin 168 -> 0 bytes
 .../icons/services/bundle_reg_service.gif          |  Bin 225 -> 0 bytes
 .../icons/services/bundle_reg_service.png          |  Bin 423 -> 0 bytes
 .../icons/services/bundle_use_reg_service.gif      |  Bin 238 -> 0 bytes
 .../icons/services/bundle_use_reg_service.png      |  Bin 392 -> 0 bytes
 .../icons/services/bundle_use_service.gif          |  Bin 225 -> 0 bytes
 .../icons/services/bundle_use_service.png          |  Bin 452 -> 0 bytes
 .../icons/services/service.gif                     |  Bin 197 -> 0 bytes
 .../icons/services/service_provider.gif            |  Bin 364 -> 0 bytes
 eclipse/plugins/org.eclipse.osgi.jmx/plugin.xml    |   28 -
 .../org/eclipse/osgi/jmx/internal/Activator.java   |   87 -
 .../osgi/jmx/internal/BundleContribution.java      |  475 --
 .../jmx/internal/BundleContributionMessages.java   |   37 -
 .../internal/BundleContributionMessages.properties |   19 -
 .../jmx/internal/BundleContributionProvider.java   |  221 -
 .../eclipse/osgi/jmx/internal/BundleMessages.java  |   27 -
 .../osgi/jmx/internal/BundleMessages.properties    |   13 -
 .../osgi/jmx/internal/BundlePackagesProvider.java  |  221 -
 .../osgi/jmx/internal/BundleRequiresProvider.java  |  152 -
 .../org/eclipse/osgi/jmx/internal/BundleUtils.java |  176 -
 .../osgi/jmx/internal/ServiceContribution.java     |  241 -
 .../jmx/internal/ServiceContributionMessages.java  |   32 -
 .../ServiceContributionMessages.properties         |   14 -
 .../jmx/internal/ServiceContributionProvider.java  |  170 -
 .../org.eclipse.osgi.services/META-INF/MANIFEST.MF |   18 +-
 .../org.eclipse.osgi.services/META-INF/p2.inf      |   14 +
 .../org.eclipse.osgi.services/plugin.properties    |    1 -
 .../src/org/osgi/service/cm/Configuration.java     |  113 +-
 .../org/osgi/service/cm/ConfigurationAdmin.java    |  188 +-
 .../org/osgi/service/cm/ConfigurationEvent.java    |   46 +-
 .../osgi/service/cm/ConfigurationException.java    |   18 +-
 .../org/osgi/service/cm/ConfigurationListener.java |   24 +-
 .../osgi/service/cm/ConfigurationPermission.java   |   52 +-
 .../org/osgi/service/cm/ConfigurationPlugin.java   |   52 +-
 .../src/org/osgi/service/cm/ManagedService.java    |   46 +-
 .../org/osgi/service/cm/ManagedServiceFactory.java |   30 +-
 .../src/org/osgi/service/cm/package-info.java      |   38 +
 .../src/org/osgi/service/cm/package.html           |   11 -
 .../src/org/osgi/service/cm/packageinfo            |    2 +-
 .../osgi/service/component/ComponentConstants.java |   23 +-
 .../osgi/service/component/ComponentContext.java   |   81 +-
 .../osgi/service/component/ComponentException.java |   12 +-
 .../osgi/service/component/ComponentFactory.java   |   15 +-
 .../osgi/service/component/ComponentInstance.java  |    7 +-
 .../org/osgi/service/component/package-info.java   |   38 +
 .../src/org/osgi/service/component/package.html    |   11 -
 .../src/org/osgi/service/device/Constants.java     |   15 +-
 .../src/org/osgi/service/device/Device.java        |   14 +-
 .../src/org/osgi/service/device/Driver.java        |   30 +-
 .../src/org/osgi/service/device/DriverLocator.java |   24 +-
 .../org/osgi/service/device/DriverSelector.java    |   16 +-
 .../src/org/osgi/service/device/Match.java         |   11 +-
 .../src/org/osgi/service/device/package-info.java  |   38 +
 .../src/org/osgi/service/device/package.html       |   10 -
 .../src/org/osgi/service/event/Event.java          |  225 +-
 .../src/org/osgi/service/event/EventAdmin.java     |   14 +-
 .../src/org/osgi/service/event/EventConstants.java |  117 +-
 .../src/org/osgi/service/event/EventHandler.java   |   22 +-
 .../org/osgi/service/event/EventProperties.java    |  262 +
 .../org/osgi/service/event/TopicPermission.java    |  128 +-
 .../src/org/osgi/service/event/package-info.java   |   38 +
 .../src/org/osgi/service/event/package.html        |   10 -
 .../src/org/osgi/service/event/packageinfo         |    2 +-
 .../src/org/osgi/service/http/HttpContext.java     |   72 +-
 .../src/org/osgi/service/http/HttpService.java     |   75 +-
 .../org/osgi/service/http/NamespaceException.java  |   16 +-
 .../src/org/osgi/service/http/package-info.java    |   38 +
 .../src/org/osgi/service/http/package.html         |   10 -
 .../src/org/osgi/service/io/ConnectionFactory.java |   30 +-
 .../src/org/osgi/service/io/ConnectorService.java  |   50 +-
 .../src/org/osgi/service/io/package-info.java      |   38 +
 .../src/org/osgi/service/io/package.html           |   10 -
 .../src/org/osgi/service/log/LogEntry.java         |   55 +-
 .../src/org/osgi/service/log/LogListener.java      |   18 +-
 .../src/org/osgi/service/log/LogReaderService.java |   52 +-
 .../src/org/osgi/service/log/LogService.java       |   43 +-
 .../src/org/osgi/service/log/package-info.java     |   38 +
 .../src/org/osgi/service/log/package.html          |   11 -
 .../osgi/service/metatype/AttributeDefinition.java |  214 +-
 .../osgi/service/metatype/MetaTypeInformation.java |    5 +-
 .../osgi/service/metatype/MetaTypeProvider.java    |   53 +-
 .../org/osgi/service/metatype/MetaTypeService.java |   15 +-
 .../service/metatype/ObjectClassDefinition.java    |   32 +-
 .../org/osgi/service/metatype/package-info.java    |   38 +
 .../src/org/osgi/service/metatype/package.html     |   11 -
 .../src/org/osgi/service/metatype/packageinfo      |    2 +-
 .../service/provisioning/ProvisioningService.java  |  103 +-
 .../osgi/service/provisioning/package-info.java    |   38 +
 .../src/org/osgi/service/provisioning/package.html |   10 -
 .../src/org/osgi/service/upnp/UPnPAction.java      |   42 +-
 .../src/org/osgi/service/upnp/UPnPDevice.java      |   74 +-
 .../org/osgi/service/upnp/UPnPEventListener.java   |   26 +-
 .../src/org/osgi/service/upnp/UPnPException.java   |    4 +-
 .../src/org/osgi/service/upnp/UPnPIcon.java        |   22 +-
 .../osgi/service/upnp/UPnPLocalStateVariable.java  |    6 +-
 .../src/org/osgi/service/upnp/UPnPService.java     |   58 +-
 .../org/osgi/service/upnp/UPnPStateVariable.java   |   74 +-
 .../src/org/osgi/service/upnp/package-info.java    |   38 +
 .../src/org/osgi/service/upnp/package.html         |   10 -
 .../org/osgi/service/useradmin/Authorization.java  |   45 +-
 .../src/org/osgi/service/useradmin/Group.java      |   87 +-
 .../src/org/osgi/service/useradmin/Role.java       |   59 +-
 .../src/org/osgi/service/useradmin/User.java       |   69 +-
 .../src/org/osgi/service/useradmin/UserAdmin.java  |   95 +-
 .../org/osgi/service/useradmin/UserAdminEvent.java |   40 +-
 .../osgi/service/useradmin/UserAdminListener.java  |   18 +-
 .../service/useradmin/UserAdminPermission.java     |  104 +-
 .../org/osgi/service/useradmin/package-info.java   |   38 +
 .../src/org/osgi/service/useradmin/package.html    |   10 -
 .../org/osgi/service/wireadmin/BasicEnvelope.java  |   14 +-
 .../src/org/osgi/service/wireadmin/Consumer.java   |   46 +-
 .../src/org/osgi/service/wireadmin/Envelope.java   |   38 +-
 .../src/org/osgi/service/wireadmin/Producer.java   |   70 +-
 .../src/org/osgi/service/wireadmin/Wire.java       |  177 +-
 .../src/org/osgi/service/wireadmin/WireAdmin.java  |  121 +-
 .../org/osgi/service/wireadmin/WireAdminEvent.java |  104 +-
 .../osgi/service/wireadmin/WireAdminListener.java  |   34 +-
 .../org/osgi/service/wireadmin/WireConstants.java  |  113 +-
 .../org/osgi/service/wireadmin/WirePermission.java |   72 +-
 .../org/osgi/service/wireadmin/package-info.java   |   38 +
 .../src/org/osgi/service/wireadmin/package.html    |   11 -
 .../org.eclipse.osgi.util/META-INF/MANIFEST.MF     |    3 +-
 .../org.eclipse.osgi.util/plugin.properties        |    1 -
 .../src/org/osgi/util/measurement/Measurement.java |  176 +-
 .../src/org/osgi/util/measurement/State.java       |   34 +-
 .../src/org/osgi/util/measurement/Unit.java        |  142 +-
 .../org/osgi/util/measurement/package-info.java    |   32 +
 .../src/org/osgi/util/measurement/package.html     |   10 -
 .../src/org/osgi/util/position/Position.java       |   40 +-
 .../src/org/osgi/util/position/package-info.java   |   32 +
 .../src/org/osgi/util/position/package.html        |   10 -
 .../src/org/osgi/util/xml/XMLParserActivator.java  |   78 +-
 .../src/org/osgi/util/xml/package-info.java        |   32 +
 .../src/org/osgi/util/xml/package.html             |   10 -
 eclipse/plugins/org.eclipse.osgi/.classpath        |    4 +-
 .../plugins/org.eclipse.osgi/.classpath.osgisource |   21 +
 .../org.eclipse.osgi/.settings/.api_filters        | 1201 +++-
 .../.settings/org.eclipse.jdt.core.prefs           |   26 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 -
 .../.settings/org.eclipse.pde.api.tools.prefs      |    4 +-
 .../CDC-1.0_Foundation-1.0.profile                 |    3 +
 .../CDC-1.1_Foundation-1.1.profile                 |    3 +
 eclipse/plugins/org.eclipse.osgi/J2SE-1.2.profile  |    4 +-
 eclipse/plugins/org.eclipse.osgi/J2SE-1.3.profile  |    5 +-
 eclipse/plugins/org.eclipse.osgi/J2SE-1.4.profile  |    5 +-
 eclipse/plugins/org.eclipse.osgi/J2SE-1.5.profile  |    5 +-
 .../plugins/org.eclipse.osgi/JavaSE-1.6.profile    |    5 +-
 .../plugins/org.eclipse.osgi/JavaSE-1.7.profile    |    6 +-
 .../plugins/org.eclipse.osgi/META-INF/MANIFEST.MF  |   25 +-
 .../org.eclipse.osgi/OSGi_Minimum-1.0.profile      |    2 +
 .../org.eclipse.osgi/OSGi_Minimum-1.1.profile      |    2 +
 .../org.eclipse.osgi/OSGi_Minimum-1.2.profile      |    2 +
 eclipse/plugins/org.eclipse.osgi/bnd.bnd           |   35 +
 eclipse/plugins/org.eclipse.osgi/build.properties  |   20 +-
 .../framework/internal/core/ConsoleManager.java    |   91 +-
 .../internal/core/ConsoleMessages.properties       |    7 +-
 .../osgi/framework/internal/core/ConsoleMsg.java   |    5 +-
 .../internal/core/FrameworkCommandInterpreter.java |  164 +-
 .../internal/core/FrameworkCommandProvider.java    |  261 +-
 .../framework/internal/core/FrameworkConsole.java  |   15 +-
 .../osgi/framework/adaptor/BundleClassLoader.java  |   58 +-
 .../eclipse/osgi/framework/adaptor/BundleData.java |   15 +-
 .../framework/adaptor/ClassLoaderDelegate.java     |   28 +-
 .../framework/adaptor/ClassLoaderDelegateHook.java |    8 +-
 .../eclipse/osgi/framework/adaptor/FilePath.java   |    4 +-
 .../osgi/framework/adaptor/FrameworkAdaptor.java   |   22 +-
 .../org/eclipse/osgi/framework/util/Headers.java   |   93 +-
 .../eclipse/osgi/framework/util/KeyedHashSet.java  |    8 +-
 .../eclipse/osgi/framework/util/ObjectPool.java    |    8 +-
 .../osgi/service/resolver/BaseDescription.java     |   32 +-
 .../eclipse/osgi/service/resolver/BundleDelta.java |    7 +-
 .../osgi/service/resolver/BundleDescription.java   |   44 +-
 .../service/resolver/ExportPackageDescription.java |    6 +-
 .../osgi/service/resolver/GenericDescription.java  |   31 +-
 .../resolver/ImportPackageSpecification.java       |    6 +-
 .../service/resolver/NativeCodeDescription.java    |    7 +-
 .../osgi/service/resolver/PlatformAdmin.java       |    5 +-
 .../eclipse/osgi/service/resolver/Resolver.java    |    8 +-
 .../osgi/service/resolver/ResolverError.java       |   22 +-
 .../service/resolver/ResolverHookException.java    |   29 +
 .../org/eclipse/osgi/service/resolver/State.java   |  112 +-
 .../eclipse/osgi/service/resolver/StateDelta.java  |    9 +-
 .../osgi/service/resolver/StateObjectFactory.java  |   30 +-
 .../eclipse/osgi/service/resolver/StateWire.java   |   81 +
 .../osgi/service/resolver/VersionConstraint.java   |   14 +-
 .../osgi/internal/composite/CompositeBase.java     |    4 +-
 .../internal/composite/CompositeClassLoader.java   |   17 +-
 .../osgi/internal/composite/CompositeHelper.java   |   16 +-
 .../osgi/internal/composite/CompositeImpl.java     |   20 +-
 .../osgi/framework/console/CommandInterpreter.java |    2 +-
 .../osgi/framework/console/ConsoleSession.java     |   10 +-
 .../framework/eventmgr/CopyOnWriteIdentityMap.java |  439 --
 .../osgi/framework/eventmgr/EventDispatcher.java   |   49 -
 .../osgi/framework/eventmgr/EventListeners.java    |   89 -
 .../osgi/framework/eventmgr/EventManager.java      |  416 --
 .../osgi/framework/eventmgr/ListenerQueue.java     |  152 -
 .../framework/internal/core/AbstractBundle.java    |  374 +-
 .../osgi/framework/internal/core/AliasMapper.java  |  109 +-
 .../framework/internal/core/BundleContextImpl.java |  189 +-
 .../framework/internal/core/BundleFragment.java    |   22 +-
 .../osgi/framework/internal/core/BundleHost.java   |  124 +-
 .../framework/internal/core/BundleRepository.java  |   20 +-
 .../osgi/framework/internal/core/BundleSource.java |    8 +-
 .../osgi/framework/internal/core/Constants.java    |   25 +-
 .../internal/core/CoreResolverHookFactory.java     |  198 +
 .../framework/internal/core/EquinoxLauncher.java   |   92 +-
 .../internal/core/ExportedPackageImpl.java         |   13 +-
 .../osgi/framework/internal/core/FilterImpl.java   |  598 +-
 .../osgi/framework/internal/core/Framework.java    |  649 ++-
 .../internal/core/InternalSystemBundle.java        |   96 +-
 .../internal/core/ManifestLocalization.java        |  172 +-
 .../framework/internal/core/PackageAdminImpl.java  |  227 +-
 .../framework/internal/core/StartLevelEvent.java   |   20 +-
 .../framework/internal/core/StartLevelManager.java |  104 +-
 .../internal/core/SystemBundleActivator.java       |   44 +-
 .../internal/core/UniversalUniqueIdentifier.java   |  266 +
 .../eclipse/osgi/framework/internal/core/Util.java |    7 +-
 .../osgi/framework/internal/core/osname.aliases    |    4 +-
 .../internal/protocol/ContentHandlerFactory.java   |   19 +-
 .../internal/protocol/ContentHandlerProxy.java     |   28 +-
 .../internal/protocol/MultiplexingFactory.java     |   51 +-
 .../protocol/MultiplexingURLStreamHandler.java     |   26 +-
 .../internal/protocol/StreamHandlerFactory.java    |   39 +-
 .../URLStreamHandlerFactoryProxyFor15.java         |    3 +-
 .../internal/protocol/URLStreamHandlerProxy.java   |   33 +-
 .../eclipse/osgi/internal/loader/BundleLoader.java |  283 +-
 .../osgi/internal/loader/BundleLoaderProxy.java    |   29 +-
 .../internal/loader/FilteredSourcePackage.java     |   22 +-
 .../osgi/internal/loader/MultiSourcePackage.java   |   25 +-
 .../osgi/internal/loader/NullPackageSource.java    |   14 +-
 .../osgi/internal/loader/PackageSource.java        |    9 +-
 .../osgi/internal/loader/SingleSourcePackage.java  |   14 +-
 .../osgi/internal/loader/SystemBundleLoader.java   |   67 +-
 .../internal/loader/buddy/DependentPolicy.java     |   20 +-
 .../osgi/internal/loader/buddy/GlobalPolicy.java   |    8 +-
 .../osgi/internal/loader/buddy/IBuddyPolicy.java   |    6 +-
 .../osgi/internal/loader/buddy/PolicyHandler.java  |   36 +-
 .../internal/loader/buddy/RegisteredPolicy.java    |   22 +-
 .../osgi/internal/loader/buddy/SystemPolicy.java   |    8 +-
 .../osgi/internal/permadmin/BundlePermissions.java |    8 +-
 .../internal/permadmin/EquinoxSecurityManager.java |   43 +-
 .../internal/permadmin/PermissionAdminTable.java   |   11 +-
 .../permadmin/PermissionInfoCollection.java        |   29 +-
 .../osgi/internal/permadmin/PermissionsHash.java   |   12 +-
 .../permadmin/SecurePermissionStorage.java         |   26 +-
 .../osgi/internal/permadmin/SecurityAdmin.java     |   86 +-
 .../osgi/internal/permadmin/SecurityRow.java       |   30 +-
 .../osgi/internal/permadmin/SecurityTable.java     |    4 +-
 .../internal/permadmin/SecurityTableUpdate.java    |    9 +-
 .../osgi/internal/permadmin/implied.permissions    |    6 +-
 .../internal/profile/DefaultProfileLogger.java     |   22 +-
 .../org/eclipse/osgi/internal/profile/Profile.java |    4 +-
 .../serviceregistry/FilteredServiceListener.java   |   10 +-
 .../osgi/internal/serviceregistry/HookContext.java |   49 +
 .../serviceregistry/ModifiedServiceEvent.java      |    4 +-
 .../serviceregistry/ServiceProperties.java         |   28 +-
 .../serviceregistry/ServiceReferenceImpl.java      |   16 +-
 .../serviceregistry/ServiceRegistrationImpl.java   |   95 +-
 .../internal/serviceregistry/ServiceRegistry.java  |  666 +-
 .../osgi/internal/serviceregistry/ServiceUse.java  |   74 +-
 .../serviceregistry/ShrinkableCollection.java      |  154 +-
 .../ShrinkableEntrySetValueCollection.java         |   65 +
 .../ShrinkableValueCollectionMap.java              |  191 +
 .../framework/org/eclipse/osgi/launch/Equinox.java |   67 +-
 .../eclipse/osgi/launch/EquinoxFWClassLoader.java  |    6 +-
 .../org/eclipse/osgi/launch/EquinoxFactory.java    |    4 +-
 .../org.eclipse.osgi/customBuildCallbacks.xml      |  164 +
 .../org/eclipse/osgi/baseadaptor/BaseAdaptor.java  |  229 +-
 .../src/org/eclipse/osgi/baseadaptor/BaseData.java |   62 +-
 .../org/eclipse/osgi/baseadaptor/HookRegistry.java |   24 +-
 .../osgi/baseadaptor/bundlefile/BundleEntry.java   |    4 +-
 .../osgi/baseadaptor/bundlefile/BundleFile.java    |   13 +-
 .../bundlefile/BundleFileWrapperChain.java         |    7 +-
 .../osgi/baseadaptor/bundlefile/DirBundleFile.java |   41 +-
 .../baseadaptor/bundlefile/DirZipBundleEntry.java  |    7 +-
 .../baseadaptor/bundlefile/FileBundleEntry.java    |    3 +-
 .../baseadaptor/bundlefile/MRUBundleFileList.java  |   16 +-
 .../bundlefile/NestedDirBundleFile.java            |   49 +-
 .../baseadaptor/bundlefile/ZipBundleEntry.java     |    4 +-
 .../osgi/baseadaptor/bundlefile/ZipBundleFile.java |   33 +-
 .../osgi/baseadaptor/hooks/ClassLoadingHook.java   |    4 +-
 .../baseadaptor/hooks/ClassLoadingStatsHook.java   |    6 +-
 .../osgi/baseadaptor/hooks/StorageHook.java        |    6 +-
 .../osgi/baseadaptor/loader/BaseClassLoader.java   |    6 +-
 .../osgi/baseadaptor/loader/ClasspathManager.java  |  193 +-
 .../internal/core/BundleResourceHandler.java       |    4 +-
 .../internal/protocol/reference/Handler.java       |    7 +-
 .../protocol/reference/ReferenceURLConnection.java |    3 +-
 .../osgi/internal/baseadaptor/AdaptorMsg.java      |    6 +-
 .../osgi/internal/baseadaptor/AdaptorUtil.java     |   25 +-
 .../osgi/internal/baseadaptor/ArrayMap.java        |  160 +
 .../internal/baseadaptor/BaseClassLoadingHook.java |   10 +-
 .../baseadaptor/BasePermissionStorage.java         |   28 +-
 .../osgi/internal/baseadaptor/BaseStorage.java     |  200 +-
 .../osgi/internal/baseadaptor/BaseStorageHook.java |   53 +-
 .../osgi/internal/baseadaptor/BundleInstall.java   |   13 +-
 .../osgi/internal/baseadaptor/BundleUninstall.java |   10 +-
 .../osgi/internal/baseadaptor/BundleUpdate.java    |   12 +-
 .../internal/baseadaptor/DefaultClassLoader.java   |   53 +-
 .../internal/baseadaptor/DevClassLoadingHook.java  |    8 +-
 .../internal/baseadaptor/DevClassPathHelper.java   |   99 +-
 .../baseadaptor/ExternalMessages.properties        |    6 +-
 .../osgi/internal/baseadaptor/StateManager.java    |   60 +-
 .../internal/baseadaptor/SystemBundleData.java     |   65 +-
 .../baseadaptor/weaving/DynamicImportList.java     |   83 +
 .../weaving/WeavingHookConfigurator.java           |  129 +
 .../baseadaptor/weaving/WovenClassImpl.java        |  198 +
 .../eclipse/core/runtime/adaptor/EclipseLog.java   |  690 --
 .../core/runtime/adaptor/EclipseStarter.java       |  151 +-
 .../core/runtime/adaptor/LocationManager.java      |    8 +-
 .../runtime/internal/adaptor/CachedManifest.java   |   24 +-
 .../runtime/internal/adaptor/ContextFinder.java    |   59 +-
 .../internal/adaptor/DefaultStartupMonitor.java    |    4 +-
 .../internal/adaptor/EclipseAdaptorHook.java       |   33 +-
 .../internal/adaptor/EclipseAppLauncher.java       |   10 +-
 .../internal/adaptor/EclipseClassLoadingHook.java  |   22 +-
 .../internal/adaptor/EclipseCommandProvider.java   |   87 +-
 .../internal/adaptor/EclipseEnvironmentInfo.java   |   16 +-
 .../internal/adaptor/EclipseErrorHandler.java      |   15 +-
 .../internal/adaptor/EclipseLazyStarter.java       |   36 +-
 .../internal/adaptor/EclipseLogFactory.java        |  107 +
 .../runtime/internal/adaptor/EclipseLogHook.java   |  127 +-
 .../runtime/internal/adaptor/EclipseLogWriter.java |  719 ++
 .../internal/adaptor/EclipseStorageHook.java       |   77 +-
 .../core/runtime/internal/adaptor/IPluginInfo.java |    8 +-
 .../runtime/internal/adaptor/MessageHelper.java    |    2 +-
 .../internal/adaptor/PluginConverterImpl.java      |  153 +-
 .../runtime/internal/adaptor/PluginParser.java     |   98 +-
 .../core/runtime/internal/stats/BundleStats.java   |    7 +-
 .../core/runtime/internal/stats/ClassStats.java    |    7 +-
 .../runtime/internal/stats/ClassloaderStats.java   |   49 +-
 .../internal/stats/ResourceBundleStats.java        |    8 +-
 .../core/runtime/internal/stats/StatsManager.java  |   37 +-
 .../equinox/log/internal/BasicReadWriteLock.java   |   50 +
 .../equinox/log/internal/EventAdminAdapter.java    |  117 +
 .../log/internal/EventAdminLogListener.java        |  153 +
 .../equinox/log/internal/ExtendedLogEntryImpl.java |  120 +
 .../internal/ExtendedLogReaderServiceFactory.java  |  225 +
 .../log/internal/ExtendedLogReaderServiceImpl.java |   66 +
 .../log/internal/ExtendedLogServiceFactory.java    |   73 +
 .../log/internal/ExtendedLogServiceImpl.java       |   93 +
 .../equinox/log/internal/LogServiceManager.java    |  316 +
 .../eclipse/equinox/log/internal/LoggerImpl.java   |   56 +
 .../equinox/log/internal/SerializedTaskQueue.java  |   58 +
 .../service/pluginconversion/PluginConverter.java  |    8 +-
 .../org.eclipse.osgi/hookconfigurators.properties  |    5 +-
 .../src/org/osgi/framework/AdaptPermission.java    |  635 ++
 .../src/org/osgi/framework/AdminPermission.java    |  290 +-
 .../src/org/osgi/framework/AllServiceListener.java |   38 +-
 .../osgi/src/org/osgi/framework/Bundle.java        |  904 ++--
 .../src/org/osgi/framework/BundleActivator.java    |   34 +-
 .../osgi/src/org/osgi/framework/BundleContext.java |  804 ++-
 .../osgi/src/org/osgi/framework/BundleEvent.java   |   61 +-
 .../src/org/osgi/framework/BundleException.java    |   58 +-
 .../src/org/osgi/framework/BundleListener.java     |   20 +-
 .../src/org/osgi/framework/BundlePermission.java   |  127 +-
 .../src/org/osgi/framework/BundleReference.java    |   13 +-
 .../org/osgi/framework/CapabilityPermission.java   |  807 +++
 .../osgi/src/org/osgi/framework/Configurable.java  |   10 +-
 .../osgi/src/org/osgi/framework/Constants.java     |  930 ++-
 .../osgi/src/org/osgi/framework/Filter.java        |  113 +-
 .../src/org/osgi/framework/FrameworkEvent.java     |   34 +-
 .../src/org/osgi/framework/FrameworkListener.java  |   24 +-
 .../osgi/src/org/osgi/framework/FrameworkUtil.java |  679 +-
 .../org/osgi/framework/InvalidSyntaxException.java |   20 +-
 .../src/org/osgi/framework/PackagePermission.java  |  197 +-
 .../osgi/src/org/osgi/framework/ServiceEvent.java  |   20 +-
 .../src/org/osgi/framework/ServiceException.java   |   27 +-
 .../src/org/osgi/framework/ServiceFactory.java     |   93 +-
 .../src/org/osgi/framework/ServiceListener.java    |   32 +-
 .../src/org/osgi/framework/ServicePermission.java  |  276 +-
 .../src/org/osgi/framework/ServiceReference.java   |  116 +-
 .../org/osgi/framework/ServiceRegistration.java    |   44 +-
 .../src/org/osgi/framework/SignerProperty.java     |   33 +-
 .../osgi/framework/SynchronousBundleListener.java  |   53 +-
 .../osgi/src/org/osgi/framework/Version.java       |  104 +-
 .../org/osgi/framework/hooks/bundle/EventHook.java |   60 +
 .../org/osgi/framework/hooks/bundle/FindHook.java  |   66 +
 .../framework/hooks/resolver/ResolverHook.java     |  198 +
 .../hooks/resolver/ResolverHookFactory.java        |   94 +
 .../osgi/framework/hooks/service/EventHook.java    |   28 +-
 .../framework/hooks/service/EventListenerHook.java |   61 +
 .../org/osgi/framework/hooks/service/FindHook.java |   33 +-
 .../osgi/framework/hooks/service/ListenerHook.java |   57 +-
 .../framework/hooks/weaving/WeavingException.java  |   51 +
 .../osgi/framework/hooks/weaving/WeavingHook.java  |   63 +
 .../osgi/framework/hooks/weaving/WovenClass.java   |  157 +
 .../src/org/osgi/framework/launch/Framework.java   |  125 +-
 .../osgi/framework/launch/FrameworkFactory.java    |   13 +-
 .../framework/startlevel/BundleStartLevel.java     |  106 +
 .../framework/startlevel/FrameworkStartLevel.java  |  161 +
 .../osgi/framework/wiring/BundleCapability.java    |   61 +
 .../osgi/framework/wiring/BundleRequirement.java   |   73 +
 .../org/osgi/framework/wiring/BundleRevision.java  |  255 +
 .../org/osgi/framework/wiring/BundleRevisions.java |   67 +
 .../src/org/osgi/framework/wiring/BundleWire.java  |   72 +
 .../org/osgi/framework/wiring/BundleWiring.java    |  344 +
 .../org/osgi/framework/wiring/FrameworkWiring.java |  176 +
 .../condpermadmin/BundleLocationCondition.java     |   12 +-
 .../condpermadmin/BundleSignerCondition.java       |   18 +-
 .../org/osgi/service/condpermadmin/Condition.java  |   43 +-
 .../osgi/service/condpermadmin/ConditionInfo.java  |   88 +-
 .../condpermadmin/ConditionalPermissionAdmin.java  |   65 +-
 .../condpermadmin/ConditionalPermissionInfo.java   |   49 +-
 .../condpermadmin/ConditionalPermissionUpdate.java |   21 +-
 .../osgi/service/framework/CompositeBundle.java    |   10 +-
 .../service/framework/CompositeBundleFactory.java  |   19 +-
 .../osgi/service/framework/SurrogateBundle.java    |   11 +-
 .../osgi/src/org/osgi/service/log/LogEntry.java    |  109 +
 .../osgi/src/org/osgi/service/log/LogListener.java |   50 +
 .../src/org/osgi/service/log/LogReaderService.java |   97 +
 .../osgi/src/org/osgi/service/log/LogService.java  |  156 +
 .../src/org/osgi/service/log/package-info.java     |   38 +
 .../osgi}/src/org/osgi/service/log/packageinfo     |    0
 .../osgi/service/packageadmin/ExportedPackage.java |   41 +-
 .../osgi/service/packageadmin/PackageAdmin.java    |  105 +-
 .../osgi/service/packageadmin/RequiredBundle.java  |   43 +-
 .../service/permissionadmin/PermissionAdmin.java   |   33 +-
 .../service/permissionadmin/PermissionInfo.java    |   86 +-
 .../org/osgi/service/startlevel/StartLevel.java    |   49 +-
 .../url/AbstractURLStreamHandlerService.java       |   42 +-
 .../src/org/osgi/service/url/URLConstants.java     |    9 +-
 .../osgi/service/url/URLStreamHandlerService.java  |   28 +-
 .../osgi/service/url/URLStreamHandlerSetter.java   |   16 +-
 .../src/org/osgi/util/tracker/AbstractTracked.java |   92 +-
 .../src/org/osgi/util/tracker/BundleTracker.java   |  260 +-
 .../osgi/util/tracker/BundleTrackerCustomizer.java |   75 +-
 .../src/org/osgi/util/tracker/ServiceTracker.java  |  608 +-
 .../util/tracker/ServiceTrackerCustomizer.java     |   70 +-
 .../plugins/org.eclipse.osgi/osgi/src2/empty.txt   |    1 +
 .../osgi/internal/module/GenericCapability.java    |   23 +-
 .../osgi/internal/module/GenericConstraint.java    |   51 +-
 .../osgi/internal/module/GroupingChecker.java      |  154 +-
 .../eclipse/osgi/internal/module/MappedList.java   |   64 +-
 .../osgi/internal/module/PermissionChecker.java    |   33 +-
 .../osgi/internal/module/ResolverBundle.java       |  304 +-
 .../osgi/internal/module/ResolverConstraint.java   |   12 +-
 .../osgi/internal/module/ResolverExport.java       |    4 +-
 .../eclipse/osgi/internal/module/ResolverImpl.java | 1407 +++--
 .../osgi/internal/module/VersionHashMap.java       |   84 +-
 .../osgi/internal/module/VersionSupplier.java      |   15 +-
 .../internal/resolver/BaseDescriptionImpl.java     |  118 +-
 .../osgi/internal/resolver/BundleDeltaImpl.java    |    6 +-
 .../internal/resolver/BundleDescriptionImpl.java   |  578 ++-
 .../internal/resolver/BundleSpecificationImpl.java |   83 +-
 .../osgi/internal/resolver/ComputeNodeOrder.java   |   78 +-
 .../resolver/ExportPackageDescriptionImpl.java     |  104 +-
 .../internal/resolver/GenericDescriptionImpl.java  |  106 +-
 .../resolver/GenericSpecificationImpl.java         |   56 +-
 .../internal/resolver/HostSpecificationImpl.java   |   81 +-
 .../resolver/ImportPackageSpecificationImpl.java   |   64 +-
 .../resolver/NativeCodeDescriptionImpl.java        |   21 +-
 .../resolver/NativeCodeSpecificationImpl.java      |   27 +-
 .../osgi/internal/resolver/ReadOnlyState.java      |   38 +-
 .../osgi/internal/resolver/ResolverErrorImpl.java  |    4 +-
 .../osgi/internal/resolver/StateBuilder.java       |  362 +-
 .../osgi/internal/resolver/StateDeltaImpl.java     |   23 +-
 .../osgi/internal/resolver/StateHelperImpl.java    |  261 +-
 .../eclipse/osgi/internal/resolver/StateImpl.java  |  461 +-
 .../internal/resolver/StateMessages.properties     |    3 +-
 .../eclipse/osgi/internal/resolver/StateMsg.java   |    3 +-
 .../internal/resolver/StateObjectFactoryImpl.java  |   78 +-
 .../osgi/internal/resolver/StateReader.java        |  192 +-
 .../osgi/internal/resolver/StateWriter.java        |  303 +-
 .../osgi/internal/resolver/SystemState.java        |   27 +-
 .../eclipse/osgi/internal/resolver/UserState.java  |    7 +-
 .../internal/resolver/VersionConstraintImpl.java   |  142 +-
 .../service/security/AuthorizationEngine.java      |   24 +-
 .../service/security/KeyStoreTrustEngine.java      |   15 +-
 .../signedcontent/LegacyVerifierFactory.java       |    7 +-
 .../internal/signedcontent/PKCS7DateParser.java    |   14 +-
 .../internal/signedcontent/PKCS7Processor.java     |   34 +-
 .../signedcontent/SignatureBlockProcessor.java     |   49 +-
 .../internal/signedcontent/SignedBundleFile.java   |    4 +-
 .../internal/signedcontent/SignedBundleHook.java   |   41 +-
 .../internal/signedcontent/SignedContentFile.java  |   12 +-
 .../internal/signedcontent/SignedContentImpl.java  |   28 +-
 .../internal/signedcontent/SignedStorageHook.java  |   35 +-
 .../signedcontent/TrustEngineListener.java         |   31 +-
 .../plugins/org.eclipse.osgi/supplement/.classpath |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   16 +-
 .../supplement/META-INF/MANIFEST.MF                |   14 +-
 .../org.eclipse.osgi/supplement/build.properties   |    9 +-
 .../runtime/internal/adaptor/BasicLocation.java    |    6 +
 .../adaptor/EclipseAdaptorMessages.properties      |    9 +-
 .../internal/adaptor/EclipseAdaptorMsg.java        |   10 +-
 .../runtime/internal/adaptor/LocationHelper.java   |    3 +-
 .../org/eclipse/equinox/log/ExtendedLogEntry.java  |   69 +
 .../equinox/log/ExtendedLogReaderService.java      |   40 +
 .../eclipse/equinox/log/ExtendedLogService.java    |   40 +
 .../src/org/eclipse/equinox/log/LogFilter.java     |   30 +
 .../src/org/eclipse/equinox/log/LogPermission.java |   65 +
 .../equinox/log/LogPermissionCollection.java       |   59 +
 .../src/org/eclipse/equinox/log/Logger.java        |   83 +
 .../equinox/log/SynchronousLogListener.java        |   19 +
 .../org/eclipse/osgi/framework/debug/Debug.java    |   21 +-
 .../osgi/framework/debug/EclipseDebugTrace.java    |    4 +-
 .../framework/debug/FrameworkDebugOptions.java     |   63 +-
 .../framework/eventmgr/CopyOnWriteIdentityMap.java |  652 ++
 .../osgi/framework/eventmgr/EventDispatcher.java   |   49 +
 .../osgi/framework/eventmgr/EventListeners.java    |   90 +
 .../osgi/framework/eventmgr/EventManager.java      |  419 ++
 .../osgi/framework/eventmgr/ListenerQueue.java     |  151 +
 .../eclipse/osgi/framework/eventmgr/package.html   |    0
 .../internal/core/ExternalMessages.properties      |   15 +-
 .../internal/core/FrameworkProperties.java         |   10 +-
 .../eclipse/osgi/framework/internal/core/Msg.java  |   16 +-
 .../osgi/framework/internal/core/Tokenizer.java    |   47 +-
 .../internal/reliablefile/ReliableFile.java        |   20 +-
 .../reliablefile/ReliableFileInputStream.java      |    3 +-
 .../eclipse/osgi/framework/log/FrameworkLog.java   |    4 +-
 .../osgi/framework/log/FrameworkLogEntry.java      |   52 +-
 .../eclipse/osgi/framework/util/SecureAction.java  |  117 +-
 .../eclipse/osgi/service/debug/DebugOptions.java   |    6 +-
 .../service/localization/BundleLocalization.java   |   13 +-
 .../osgi/storagemanager/StorageManager.java        |   15 +-
 .../src/org/eclipse/osgi/util/ManifestElement.java |  104 +-
 .../supplement/src/org/eclipse/osgi/util/NLS.java  |   39 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../.settings/org.eclipse.jdt.ui.prefs             |   56 +
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../icons/full/ovr16/warning_ovr.gif               |  Bin 173 -> 173 bytes
 .../org.eclipse.pde.api.tools.ui/plugin.properties |   14 +-
 .../org.eclipse.pde.api.tools.ui/plugin.xml        |   20 +
 .../ui/internal/ActionFilterAdapterFactory.java    |    4 +-
 .../pde/api/tools/ui/internal/ApiUIPlugin.java     |   28 +-
 .../api/tools/ui/internal/IApiToolsConstants.java  |    4 +-
 .../tools/ui/internal/IApiToolsHelpContextIds.java |   15 +-
 .../pde/api/tools/ui/internal/StringMatcher.java   |  384 -
 .../tools/ui/internal/actions/ActionMessages.java  |    5 +-
 .../tools/ui/internal/actions/DeltaSession.java    |   33 +-
 .../tools/ui/internal/actions/ExportDialog.java    |    6 +-
 .../ui/internal/actions/actionmessages.properties  |    7 +-
 .../ApiBaselinesConfigurationBlock.java            |    8 +-
 .../ApiErrorsWarningsConfigurationBlock.java       |  780 ++-
 .../ApiErrorsWarningsPreferencePage.java           |   47 +-
 .../preferences/ApiUseScanConfigurationBlock.java  |  442 ++
 .../preferences/ApiUseScanPreferencePage.java      |  489 ++
 .../internal/preferences/PreferenceMessages.java   |   22 +-
 .../preferences/preferencemessages.properties      |   24 +-
 .../properties/ApiErrorsWarningsPropertyPage.java  |    4 +-
 .../ui/internal/use/ApiUseLaunchDelegate.java      |    9 +
 .../tools/ui/internal/use/ApiUsePatternTab.java    |   17 +-
 .../api/tools/ui/internal/use/ApiUseScanJob.java   |   63 +-
 .../api/tools/ui/internal/use/ApiUseScanTab.java   |   82 +-
 .../pde/api/tools/ui/internal/use/Messages.java    |    4 +
 .../api/tools/ui/internal/use/messages.properties  |   38 +-
 .../tools/ui/internal/views/APIToolingView.java    |    4 +-
 .../ui/internal/wizards/ApiBaselineWizardPage.java |   91 +-
 .../wizards/ApiToolingSetupRefactoring.java        |    4 +-
 .../wizards/ApiToolingSetupWizardPage.java         |    7 +-
 .../ui/internal/wizards/wizardmessages.properties  |    8 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../.settings/org.eclipse.jdt.ui.prefs             |   56 +
 .../org.eclipse.pde.api.tools/META-INF/MANIFEST.MF |    6 +-
 .../R10100_buildnotes_api_tools.html               |  473 --
 .../R10_buildnotes_api_tools.html                  |  376 -
 .../org.eclipse.pde.api.tools/build.properties     |    3 +-
 .../buildnotes_api_tools.html                      |   53 -
 .../org.eclipse.pde.api.tools/plugin.properties    |    3 +-
 .../plugins/org.eclipse.pde.api.tools/plugin.xml   |   28 +-
 .../scripts/api-tasks.properties                   |    6 +-
 .../scripts/api-tasks.xml                          |    5 +-
 .../pde/api/tools/internal/ApiBaselineManager.java |    8 +-
 .../pde/api/tools/internal/ApiDescription.java     |    2 +-
 .../pde/api/tools/internal/ApiFilterStore.java     |    6 +-
 .../internal/ApiPluginPreferenceInitializer.java   |   11 +-
 .../pde/api/tools/internal/IApiCoreConstants.java  |   13 +-
 .../pde/api/tools/internal/IApiXmlConstants.java   |   34 +-
 .../tools/internal/NonApiProjectDescription.java   |    4 +-
 .../tools/internal/WorkspaceDeltaProcessor.java    |   49 +-
 .../internal/builder/AbstractProblemDetector.java  |   76 +-
 .../tools/internal/builder/ApiAnalysisBuilder.java |  297 +-
 .../tools/internal/builder/BaseApiAnalyzer.java    |  214 +-
 .../pde/api/tools/internal/builder/BuildState.java |  178 +-
 .../tools/internal/builder/BuilderMessages.java    |    5 +-
 .../pde/api/tools/internal/builder/Reference.java  |   29 +-
 .../tools/internal/builder/ReferenceAnalyzer.java  |    8 +-
 .../tools/internal/builder/ReferenceExtractor.java |   26 +-
 .../tools/internal/builder/SystemApiDetector.java  |    3 +-
 .../internal/builder/buildermessages.properties    |    5 +-
 .../internal/comparator/ClassFileComparator.java   |   20 +-
 .../pde/api/tools/internal/comparator/Delta.java   |   32 +-
 .../tools/internal/comparator/DeltaXmlVisitor.java |    4 +-
 .../api/tools/internal/comparator/Messages.java    |    6 +-
 .../api/tools/internal/model/ApiModelFactory.java  |  102 +-
 .../api/tools/internal/model/BundleComponent.java  |    9 +-
 .../pde/api/tools/internal/model/Component.java    |   20 +-
 .../pde/api/tools/internal/model/Messages.java     |    3 +
 .../api/tools/internal/model/Messages.properties   |    3 +
 .../api/tools/internal/model/ProjectComponent.java |  193 +-
 .../internal/natures/ApiToolProjectNature.java     |    6 +-
 .../api/tools/internal/problems/ApiProblem.java    |   36 +-
 .../tools/internal/problems/ApiProblemFactory.java |   37 +
 .../internal/problems/problemmessages.properties   |    8 +
 .../api/tools/internal/provisional/ApiPlugin.java  |   50 +-
 .../internal/provisional/IApiMarkerConstants.java  |   31 +-
 .../api/tools/internal/provisional/ISession.java   |    4 +-
 .../provisional/comparator/ApiComparator.java      |   37 +-
 .../comparator/CompareApiScopeVisitor.java         |   31 +-
 .../provisional/comparator/DeltaProcessor.java     |   41 +-
 .../internal/provisional/comparator/IDelta.java    |   25 +-
 .../internal/provisional/model/IApiComponent.java  |    7 +
 .../internal/provisional/model/IApiElement.java    |    4 +-
 .../internal/provisional/problems/IApiProblem.java |   36 +-
 .../provisional/problems/IApiProblemTypes.java     |   21 +-
 .../provisional/search/ApiSearchEngine.java        |    3 +-
 .../provisional/search/IApiSearchReporter.java     |    8 +-
 .../internal/search/ConsumerReportConvertor.java   |  718 ++
 .../internal/search/IReferenceCollection.java      |   54 +
 .../tools/internal/search/MissingRefMetadata.java  |  231 +
 .../tools/internal/search/MissingRefParser.java    |  141 +
 .../internal/search/MissingRefReportConverter.java |  584 ++
 .../internal/search/ReferenceLookupVisitor.java    |   35 +-
 .../api/tools/internal/search/SearchMessages.java  |   51 +-
 .../tools/internal/search/UseReportConverter.java  |  213 +-
 .../api/tools/internal/search/UseScanManager.java  |  395 ++
 .../api/tools/internal/search/UseScanParser.java   |  171 +-
 .../internal/search/UseScanReferenceVisitor.java   |   94 +
 .../tools/internal/search/UseScanReferences.java   |  100 +
 .../api/tools/internal/search/UseScanVisitor.java  |    4 +-
 .../search/XmlReferenceDescriptorWriter.java       |   13 +-
 .../tools/internal/search/XmlSearchReporter.java   |   88 +-
 .../internal/search/searchmessages.properties      |   55 +-
 .../api/tools/internal/util/ExcludedElements.java  |   99 -
 .../api/tools/internal/util/FilteredElements.java  |  103 +
 .../eclipse/pde/api/tools/internal/util/Util.java  |  105 +-
 .../tasks/APIDeprecationReportConversionTask.java  |    2 +-
 .../tools/internal/tasks/APIDeprecationTask.java   |   55 +-
 .../tasks/APIFreezeReportConversionTask.java       |   70 +-
 .../api/tools/internal/tasks/APIFreezeTask.java    |  117 +-
 .../tools/internal/tasks/APIToolsAnalysisTask.java |  153 +-
 .../tasks/AnalysisReportConversionTask.java        |   61 +-
 .../tasks/ApiConsumerUseReportConversionTask.java  |  128 +
 .../internal/tasks/ApiFileGenerationTask.java      |   18 +-
 .../api/tools/internal/tasks/ApiMigrationTask.java |   87 +-
 .../internal/tasks/ApiUseReportConversionTask.java |    2 +-
 .../pde/api/tools/internal/tasks/ApiUseTask.java   |  128 +-
 .../api/tools/internal/tasks/CommonUtilsTask.java  |  131 +-
 .../pde/api/tools/internal/tasks/CompareTask.java  |   53 +-
 .../internal/tasks/ExcludeListDeltaVisitor.java    |  268 -
 .../internal/tasks/FilterListDeltaVisitor.java     |  284 +
 .../pde/api/tools/internal/tasks/Messages.java     |   16 +-
 .../MissingRefProblemsReportConversionTask.java    |   92 +
 .../internal/tasks/MissingRefProblemsTask.java     |  641 ++
 .../api/tools/internal/tasks/messages.properties   |   25 +-
 .../org.eclipse.pde.api.tools/xslt/notsearched.xsl |    5 +-
 .../org.eclipse.pde.build/META-INF/MANIFEST.MF     |   12 +-
 .../buildnotes_pde-build.html                      |  484 --
 .../org.eclipse.pde.build/feature/build.properties |    2 +-
 .../feature/rootfiles/cpl-v10.html                 |  125 -
 eclipse/plugins/org.eclipse.pde.build/plugin.xml   |    5 +
 .../scripts/genericTargets.xml                     |    4 +
 .../internal/build/AbstractScriptGenerator.java    |   14 +-
 .../build/AssembleConfigScriptGenerator.java       |    9 +-
 .../internal/build/AssembleScriptGenerator.java    |    2 +-
 .../pde/internal/build/AssemblyInformation.java    |   12 +-
 .../pde/internal/build/BuildScriptGenerator.java   |   94 +-
 .../eclipse/pde/internal/build/BundleHelper.java   |   23 +-
 .../pde/internal/build/FeatureGenerator.java       |   31 +-
 .../eclipse/pde/internal/build/FeatureWriter.java  |    8 +-
 .../pde/internal/build/FetchScriptGenerator.java   |   37 +-
 .../internal/build/FetchTaskFactoriesRegistry.java |   44 +-
 .../internal/build/IBuildPropertiesConstants.java  |   21 +-
 .../pde/internal/build/IPDEBuildConstants.java     |   17 +-
 .../eclipse/pde/internal/build/IXMLConstants.java  |    4 +-
 .../org/eclipse/pde/internal/build/Messages.java   |    8 +-
 .../internal/build/P2ConfigScriptGenerator.java    |   34 +-
 .../eclipse/pde/internal/build/ProductFile.java    |    4 +-
 .../pde/internal/build/ProductGenerator.java       |   43 +-
 .../eclipse/pde/internal/build/ShapeAdvisor.java   |    4 +-
 .../pde/internal/build/SourceFeatureWriter.java    |    6 +-
 .../src/org/eclipse/pde/internal/build/Utils.java  |   70 +-
 .../eclipse/pde/internal/build/ant/AntScript.java  |   24 +-
 .../eclipse/pde/internal/build/ant/ZipFileSet.java |   28 +-
 .../builder/AbstractBuildScriptGenerator.java      |    4 +-
 .../pde/internal/build/builder/BuildDirector.java  |   34 +-
 .../build/builder/ClasspathComputer3_0.java        |  145 +-
 .../build/builder/FeatureBuildScriptGenerator.java |   75 +-
 .../build/builder/ModelBuildScriptGenerator.java   |   95 +-
 .../internal/build/builder/SourceGenerator.java    |    6 +-
 .../build/fetch/COPYFetchTasksFactory.java         |    2 +-
 .../eclipse/pde/internal/build/messages.properties |    9 +-
 .../internal/build/packager/ElementCollector.java  |    8 +-
 .../build/publisher/BuildPublisherApplication.java |   38 -
 .../build/publisher/FeatureRootAdvice.java         |  126 -
 .../build/publisher/GatherBundleAction.java        |   82 -
 .../build/publisher/GatherFeatureAction.java       |  116 -
 .../build/publisher/GatheringComputer.java         |   70 -
 .../pde/internal/build/site/BuildTimeFeature.java  |    6 +-
 .../build/site/BuildTimeFeatureParser.java         |   21 +-
 .../pde/internal/build/site/BuildTimeSite.java     |   12 +-
 .../eclipse/pde/internal/build/site/PDEState.java  |   34 +-
 .../pde/internal/build/site/ReachablePlugin.java   |    4 +-
 .../internal/build/site/compatibility/Feature.java |  291 -
 .../build/site/compatibility/FeatureEntry.java     |  181 -
 .../build/site/compatibility/FeatureParser.java    |  251 -
 .../build/site/compatibility/FeatureReference.java |    5 +-
 .../build/site/compatibility/IPlatformEntry.java   |   22 -
 .../build/site/compatibility/SiteManager.java      |    3 +-
 .../build/site/compatibility/URLEntry.java         |   43 -
 .../eclipse/pde/internal/swt/tools/IconExe.java    | 3339 ---------
 .../build/publisher/AbstractPublisherTask.java     |    3 +-
 .../build/publisher/GatherFeatureTask.java         |   58 +-
 .../internal/build/tasks/BuildManifestTask.java    |    4 +-
 .../build/tasks/BuildScriptGeneratorTask.java      |   22 +-
 .../pde/internal/build/tasks/FetchTask.java        |    6 +-
 .../internal/build/tasks/LicenseReplaceTask.java   |  366 +
 .../pde/internal/build/tasks/TaskMessages.java     |    3 +
 .../eclipse/pde/internal/build/tasks/Version.java  |    3 +-
 .../pde/internal/build/tasks/messages.properties   |    6 +-
 .../templates/headless-build/build.properties      |   40 +-
 .../templates/headless-build/customAssembly.xml    |    2 +-
 .../templates/headless-build/customTargets.xml     |    2 +-
 .../templates/packager/packager.properties         |   10 +
 .../templates/packager/packaging.properties        |    2 +-
 eclipse/plugins/org.eclipse.pde.core/.options      |    3 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    4 +-
 .../org.eclipse.pde.core/META-INF/MANIFEST.MF      |   23 +-
 .../org.eclipse.pde.core/META-INF/eclipse.inf      |    1 +
 .../plugins/org.eclipse.pde.core/plugin.properties |    5 +-
 eclipse/plugins/org.eclipse.pde.core/plugin.xml    |   13 +-
 .../schema/bundleImporters.exsd                    |  156 -
 .../eclipse/pde/core/plugin/IPluginModelBase.java  |   10 +-
 .../eclipse/pde/core/plugin/PluginRegistry.java    |   29 +
 .../core/project/IBundleProjectDescription.java    |   26 +-
 .../core/BundleManifestSourceLocationManager.java  |    6 +-
 .../internal/core/BundleValidationOperation.java   |   11 +-
 .../eclipse/pde/internal/core/ClasspathHelper.java |    5 +-
 .../pde/internal/core/ClasspathUtilCore.java       |   14 +-
 .../pde/internal/core/ExternalModelManager.java    |  201 +-
 .../eclipse/pde/internal/core/ICoreConstants.java  |    9 +-
 .../src/org/eclipse/pde/internal/core/P2Utils.java |   28 +-
 .../pde/internal/core/PDEAuxiliaryState.java       |   11 +
 .../pde/internal/core/PDEClasspathContainer.java   |    9 +-
 .../src/org/eclipse/pde/internal/core/PDECore.java |   41 +-
 .../pde/internal/core/PDEPreferencesManager.java   |   84 +-
 .../pde/internal/core/PDERegistryStrategy.java     |   18 +-
 .../org/eclipse/pde/internal/core/PDEState.java    |   76 +-
 .../pde/internal/core/PluginModelManager.java      |   48 +-
 .../core/RequiredPluginsClasspathContainer.java    |   28 +-
 .../internal/core/RequiredPluginsInitializer.java  |   35 +-
 .../pde/internal/core/TargetPlatformHelper.java    |   14 +-
 .../internal/core/WorkspacePluginModelManager.java |   23 +-
 .../internal/core/builders/BuildErrorReporter.java |  113 +-
 .../core/builders/BundleErrorReporter.java         |   61 +-
 .../pde/internal/core/builders/ErrorReporter.java  |   22 +-
 .../core/builders/FeatureErrorReporter.java        |    2 +-
 .../core/builders/ManifestConsistencyChecker.java  |    6 +-
 .../core/builders/ManifestErrorReporter.java       |   11 +-
 .../core/builders/SchemaErrorReporter.java         |    9 +-
 .../internal/core/builders/SchemaTransformer.java  |    4 +-
 .../core/builders/SourceEntryErrorReporter.java    |   18 +-
 .../pde/internal/core/bundle/BundleFragment.java   |    7 +-
 .../core/exports/FeatureExportOperation.java       |    3 +-
 .../eclipse/pde/internal/core/feature/Feature.java |   46 +-
 .../pde/internal/core/ifeature/IFeature.java       |   21 +-
 .../pde/internal/core/ifeature/IFeatureInfo.java   |    5 +-
 .../core/importing/BundleImporterExtension.java    |   92 -
 .../core/importing/CvsBundleImportDescription.java |   66 -
 .../core/importing/CvsBundleImporterDelegate.java  |  200 -
 .../internal/core/importing/IBundleImporter.java   |   49 -
 .../provisional/BundleImportDescription.java       |  113 -
 .../provisional/IBundleImporterDelegate.java       |   66 -
 .../core/importing/provisional/package.html        |   23 -
 .../core/iproduct/IConfigurationProperty.java      |   50 +
 .../pde/internal/core/iproduct/IProduct.java       |   25 +-
 .../core/iproduct/IProductModelFactory.java        |    4 +-
 .../core/iproduct/IPropertyConfiguration.java      |   28 -
 .../pde/internal/core/pderesources.properties      |    4 +-
 .../internal/core/plugin/PluginExtensionPoint.java |  242 +-
 .../core/plugin/WorkspacePluginModelBase.java      |   10 +-
 .../core/product/ConfigurationProperty.java        |   83 +
 .../eclipse/pde/internal/core/product/Product.java |   62 +-
 .../internal/core/product/ProductModelFactory.java |   11 +-
 .../core/project/BundleProjectDescription.java     |    9 +-
 .../core/project/BundleProjectService.java         |   41 +-
 .../core/target/AbstractBundleContainer.java       |   55 +-
 .../internal/core/target/AbstractTargetHandle.java |  107 +-
 .../internal/core/target/IUBundleContainer.java    |  908 +--
 .../internal/core/target/LocalTargetHandle.java    |    4 +-
 .../eclipse/pde/internal/core/target/Messages.java |   11 +
 .../pde/internal/core/target/Messages.properties   |   13 +-
 .../pde/internal/core/target/P2TargetUtils.java    | 1393 ++++
 .../pde/internal/core/target/TargetDefinition.java |  267 +-
 .../target/TargetDefinitionPersistenceHelper.java  |    5 +
 .../core/target/TargetPersistence35Helper.java     |   14 +-
 .../core/target/TargetPersistence36Helper.java     |   40 +-
 .../core/target/TargetPlatformService.java         |   76 +-
 .../pde/internal/core/target/UpdateTargetJob.java  |  114 +
 .../core/target/WorkspaceFileTargetHandle.java     |    4 +-
 .../target/provisional/ITargetPlatformService.java |   11 +-
 .../provisional/LoadTargetDefinitionJob.java       |    2 +-
 .../target/provisional/NameVersionDescriptor.java  |   15 +-
 .../pde/internal/core/util/CoreUtility.java        |    2 -
 .../pde/internal/core/ant/BaseExportTask.java      |   16 +-
 .../pde/internal/core/ant/ConvertSchemaToHTML.java |    2 +-
 .../pde/internal/core/ant/FeatureExportTask.java   |    4 +-
 .../pde/internal/core/ant/PluginExportTask.java    |    4 +-
 .../internal/core/text/AbstractEditingModel.java   |    4 +-
 .../core/text/bundle/ImportPackageObject.java      |   10 +-
 .../internal/core/text/bundle/PackageObject.java   |    4 +-
 .../core/text/plugin/PluginDocumentHandler.java    |    6 +-
 .../internal/core/text/plugin/PluginModelBase.java |   46 +-
 .../org.eclipse.pde.doc.user/META-INF/MANIFEST.MF  |    2 +-
 .../plugins/org.eclipse.pde.doc.user/about.html    |    6 +-
 .../org.eclipse.pde.doc.user/about.properties      |    4 +-
 .../org.eclipse.pde.doc.user/apache_style.css      |    4 +
 .../org.eclipse.pde.doc.user/api_contexts.xml      |   39 +-
 .../org.eclipse.pde.doc.user/build.properties      |    3 +-
 .../org.eclipse.pde.doc.user/contexts_PDE.xml      |   26 +-
 .../images/export_wizards/export_wizard_select.png |  Bin 3448 -> 2516 bytes
 .../guide/images/export_wizards/target.png         |  Bin 0 -> 8057 bytes
 .../images/plugin_editor/extension_points.png      |  Bin 8286 -> 7328 bytes
 .../images/preferences/compilers_features.png      |  Bin 14141 -> 3132 bytes
 .../guide/images/preferences/compilers_plugin.png  |  Bin 16163 -> 7975 bytes
 .../guide/images/preferences/compilers_schemas.png |  Bin 17434 -> 3867 bytes
 .../guide/images/preferences/outline.png           |  Bin 2331 -> 1543 bytes
 .../images/preferences/plugin_development.png      |  Bin 94913 -> 11216 bytes
 .../images/preferences/target_preferences.png      |  Bin 14488 -> 10530 bytes
 .../guide/intro/pde_overview.htm                   |   12 +-
 .../editors/ctx_help_editor/ctx_help_editor.htm    |   10 +-
 .../editors/feature_editor/included_features.htm   |    3 +-
 .../tools/editors/manifest_editor/access_rules.htm |  411 +-
 .../manifest_editor/automated_management.htm       |   13 -
 .../tools/editors/manifest_editor/testing.htm      |   18 -
 .../schema_editor/page_schema_definition.htm       |   36 +-
 .../editors/schema_editor/page_schema_overview.htm |    4 +-
 .../guide/tools/editors/site_editor/archives.htm   |   22 +
 .../guide/tools/export_wizards/export_features.htm |    3 +-
 .../guide/tools/export_wizards/export_plugins.htm  |    4 +-
 .../guide/tools/export_wizards/export_product.htm  |    7 +-
 .../guide/tools/export_wizards/export_target.htm   |   36 +
 .../guide/tools/export_wizards/export_wizards.htm  |    3 +-
 .../guide/tools/file_wizards/new_ctx_help.htm      |  106 +-
 .../guide/tools/file_wizards/new_toc.htm           |  106 +-
 .../launchers/eclipse_application_launcher.htm     |    4 +-
 .../guide/tools/launchers/junit_test.htm           |    4 +-
 .../guide/tools/preference_pages/compilers.htm     |    6 +-
 .../guide/tools/preference_pages/editors.htm       |    7 +-
 .../tools/preference_pages/feature_compiler.htm    |    8 +-
 .../tools/preference_pages/osgi_frameworks.htm     |    6 +-
 .../tools/preference_pages/plug_in_development.htm |   48 +-
 .../tools/preference_pages/plugin_compiler.htm     |  148 +-
 .../guide/tools/preference_pages/preferences.htm   |    3 +-
 .../runtime_classpath_properties.htm               |   20 +
 .../tools/preference_pages/schema_compiler.htm     |    7 +-
 .../guide/tools/views/plugin_registry.htm          |    4 +-
 .../guide/tools/views/plugins.htm                  |    4 +-
 .../plugins/org.eclipse.pde.doc.user/notices.html  |    4 +-
 .../org.eclipse.pde.doc.user/pdeOptions.txt        |    5 +-
 .../org.eclipse.pde.doc.user/plugin.properties     |    2 +-
 .../plugins/org.eclipse.pde.doc.user/plugin.xml    |    7 +-
 .../reference/actions/ref-pdetools.htm             |    4 +-
 .../actions/ref-apitooling-setup-action.htm        |   10 +-
 .../api-tooling/ant-tasks/analysis-ant-task.htm    |  119 +-
 .../analysis-reportconversion-ant-task.htm         |  243 +-
 .../apiconsumeruse-reportconversion-ant-task.htm   |  234 +
 .../api-tooling/ant-tasks/apifreeze-ant-task.htm   |  110 +-
 .../apifreeze-reportconversion-ant-task.htm        |  240 +-
 .../ant-tasks/apimigration-ant-task.htm            |  482 +-
 .../apimigration-reportconversion-ant-task.htm     |  351 +-
 .../api-tooling/ant-tasks/apiuse-ant-task.htm      |  195 +-
 .../ant-tasks/apiuse-reportconversion-ant-task.htm |  348 +-
 .../ant-tasks/apiusescan-problems-ant-task.htm     |  186 +
 ...iusescan-problems-reportconversion-ant-task.htm |  174 +
 .../api-tooling/ant-tasks/compare-ant-task.htm     |  203 +
 .../api-tooling/ant-tasks/deprecation-ant-task.htm |  455 +-
 .../deprecation-reportconversion-ant-task.htm      |  234 +-
 .../ant-tasks/filegeneration-ant-task.htm          |  400 +-
 .../reference/api-tooling/api_javadoc_tags.htm     |    6 +-
 .../reference/api-tooling/api_since_tags.htm       |    2 +-
 .../api-tooling/images/api_options_analysis.png    |  Bin 20526 -> 5012 bytes
 .../images/api_options_compatibility.png           |  Bin 17109 -> 9910 bytes
 .../api-tooling/images/api_options_usage.png       |  Bin 25397 -> 12421 bytes
 .../api-tooling/images/api_options_usescans.png    |  Bin 0 -> 4890 bytes
 .../api-tooling/images/api_options_version.png     |  Bin 20968 -> 8578 bytes
 .../reference/api-tooling/images/use-ui.png        |  Bin 49223 -> 14397 bytes
 .../api-tooling/images/usescans-pref-page.png      |  Bin 0 -> 8107 bytes
 .../api-tooling/preferences/ref-baselines.htm      |   13 +-
 .../api-tooling/preferences/ref-errorswarnings.htm |   39 +-
 .../api-tooling/preferences/ref-usescans.htm       |   63 +
 .../api-tooling/propertypages/ref-filters-prop.htm |    2 +-
 .../quickfixes/ref-api-api-filter-qf.htm           |   26 +-
 .../quickfixes/ref-api-missing-baseline-qf.htm     |   26 +-
 .../quickfixes/ref-api-remove-api-filter-qf.htm    |   24 +-
 .../api-tooling/quickfixes/ref-api-sincetag-qf.htm |   26 +-
 .../api-tooling/quickfixes/ref-api-version-qf.htm  |   26 +-
 .../api-tooling/views/ref-api-tooling-view.htm     |   16 +-
 .../api-tooling/wizards/ref-api-compare-wizard.htm |    4 +-
 .../api-tooling/wizards/ref-api-setup-wizard.htm   |   22 +-
 .../api-tooling/wizards/ref-api-use-dialog.htm     |   57 +-
 .../wizards/ref-apiuse-patterns-wizard.htm         |    6 +-
 .../reference/extension-points/index.html          |    2 -
 .../reference/misc/api-usage-rules.html            |    4 +-
 .../reference/pde_feature_generating_build.htm     |    5 +-
 .../tasks/api_tooling_baseline.htm                 |    6 +-
 .../tasks/api_tooling_compare_to_baseline.htm      |    8 +-
 .../tasks/api_tooling_create_filters.htm           |   16 +-
 .../tasks/api_tooling_options.htm                  |    6 +-
 .../tasks/api_tooling_remove_filters.htm           |    6 +-
 .../tasks/api_tooling_setup.htm                    |   16 +-
 .../tasks/pde_compilation_env.htm                  |    9 +-
 .../tasks/pde_custom_callbacks.htm                 |    5 +-
 .../pde_feature_generating_antcommandline.htm      |    5 +-
 .../tasks/pde_p2_buildtasks.htm                    |  603 ++-
 .../tasks/pde_p2_featurebuilds.htm                 |   10 +-
 .../tasks/pde_p2_integration.htm                   |    6 +-
 .../tasks/pde_p2_productbuilds.htm                 |   21 +-
 .../tasks/pde_packager.htm                         |  763 ++-
 .../tasks/pde_product_build.htm                    |    6 +-
 .../tasks/pde_version_qualifiers.htm               |    3 +-
 eclipse/plugins/org.eclipse.pde.doc.user/toc.xml   |   11 +-
 .../org.eclipse.pde.doc.user/topics_Reference.xml  |   46 +-
 .../org.eclipse.pde.doc.user/topics_Tasks.xml      |    8 +-
 .../org.eclipse.pde.doc.user/topics_WhatsNew.xml   |   23 +
 .../whatsNew/images/add-plugins.png                |  Bin 4916 -> 0 bytes
 .../whatsNew/images/add-to-target.png              |  Bin 15745 -> 0 bytes
 .../whatsNew/images/api-deprecation.png            |  Bin 11963 -> 0 bytes
 .../images/api-errors-warning-api-use-scan.png     |  Bin 0 -> 17677 bytes
 .../whatsNew/images/api-filters.png                |  Bin 16482 -> 0 bytes
 .../whatsNew/images/api-scan.png                   |  Bin 21483 -> 0 bytes
 .../images/api-use-scan-preference-page.png        |  Bin 0 -> 12010 bytes
 .../whatsNew/images/application.png                |  Bin 0 -> 2793 bytes
 .../whatsNew/images/archive-wizard.png             |  Bin 17881 -> 0 bytes
 .../whatsNew/images/archive.png                    |  Bin 7853 -> 0 bytes
 .../whatsNew/images/avail.png                      |  Bin 10614 -> 0 bytes
 .../whatsNew/images/build-severities.png           |  Bin 21561 -> 0 bytes
 .../whatsNew/images/buildproperties.png            |  Bin 5153 -> 0 bytes
 .../whatsNew/images/console-menu.png               |  Bin 4114 -> 0 bytes
 .../whatsNew/images/consolelog.png                 |  Bin 5485 -> 0 bytes
 .../whatsNew/images/consumer_configuration.png     |  Bin 0 -> 23213 bytes
 .../images/default-workspace-preference.png        |  Bin 0 -> 3488 bytes
 .../whatsNew/images/description.png                |  Bin 8140 -> 0 bytes
 .../whatsNew/images/edit-default-workspace.png     |  Bin 0 -> 5050 bytes
 .../whatsNew/images/export-target.png              |  Bin 17687 -> 0 bytes
 .../whatsNew/images/feature-launch.png             |  Bin 28203 -> 0 bytes
 .../whatsNew/images/from-repo.png                  |  Bin 3586 -> 0 bytes
 .../whatsNew/images/head-version.png               |  Bin 4072 -> 0 bytes
 .../whatsNew/images/hover-quick-fix.png            |  Bin 13409 -> 0 bytes
 .../whatsNew/images/pattern-wizard.png             |  Bin 21736 -> 0 bytes
 .../whatsNew/images/patterns.png                   |  Bin 7425 -> 0 bytes
 .../whatsNew/images/product-properties.png         |  Bin 0 -> 5747 bytes
 .../whatsNew/images/scandetails.png                |  Bin 16094 -> 0 bytes
 .../whatsNew/images/shared-license.png             |  Bin 0 -> 6503 bytes
 .../whatsNew/images/soft-install.png               |  Bin 2334 -> 0 bytes
 .../whatsNew/images/spell-check.png                |  Bin 6612 -> 0 bytes
 .../whatsNew/images/src-builds.png                 |  Bin 12009 -> 0 bytes
 .../whatsNew/images/synch-settings.png             |  Bin 2496 -> 0 bytes
 .../whatsNew/images/synch-warnings.png             |  Bin 3789 -> 0 bytes
 .../whatsNew/images/target-features.png            |  Bin 43702 -> 0 bytes
 .../whatsNew/images/target-resolution.png          |  Bin 0 -> 8120 bytes
 .../whatsNew/images/target-search.png              |  Bin 3083 -> 0 bytes
 .../whatsNew/images/target_source.png              |  Bin 0 -> 32235 bytes
 .../whatsNew/images/target_update.png              |  Bin 0 -> 31741 bytes
 .../whatsNew/images/teamcvs.png                    |  Bin 0 -> 3198 bytes
 .../whatsNew/images/xml-errors.png                 |  Bin 4184 -> 0 bytes
 .../whatsNew/pde_whatsnew.htm                      |  949 ++--
 .../icons/wizban/defcon_wiz.png                    |  Bin 6820 -> 6820 bytes
 .../org/eclipse/pde/internal/ds/ui/Messages.java   |    6 +-
 .../pde/internal/ds/ui/editor/DSLabelProvider.java |    2 +-
 .../pde/internal/ds/ui/editor/DSSourcePage.java    |   14 +-
 .../ds/ui/editor/DSSourceViewerConfiguration.java  |    2 +-
 .../ds/ui/editor/dialogs/DSEditPropertyDialog.java |    2 +-
 .../ds/ui/editor/dialogs/DSEditProvideDialog.java  |    2 +-
 .../ds/ui/editor/sections/DSComponentSection.java  |   43 +-
 .../ds/ui/editor/sections/DSOptionsSection.java    |   22 +-
 .../ds/ui/editor/sections/DSPropertiesSection.java |   43 +-
 .../eclipse/pde/internal/ds/ui/messages.properties |    6 +-
 .../ds/ui/wizards/DSCreationOperation.java         |   27 +-
 .../internal/ds/ui/wizards/DSFileWizardPage.java   |   51 +-
 .../org.eclipse.pde.junit.runtime/plugin.xml       |    1 +
 .../junit/runtime/NonUIThreadTestApplication.java  |  120 +-
 .../junit/runtime/PlatformUITestHarness.java       |   77 +
 .../internal/junit/runtime/UITestApplication.java  |  109 +-
 .../launching/ILaunchingPreferenceConstants.java   |    6 +-
 .../internal/launching/PreferenceInitializer.java  |   10 +-
 .../launching/launcher/BundleLauncherHelper.java   |   75 +-
 .../launching/launcher/LaunchArgumentsHelper.java  |   20 +-
 .../launcher/LaunchConfigurationHelper.java        |   22 +-
 .../launching/launcher/LaunchListener.java         |   14 +-
 .../internal/launching/launcher/LauncherUtils.java |   19 +-
 .../launching/AbstractPDELaunchConfiguration.java  |    1 +
 .../EclipseApplicationLaunchConfiguration.java     |    4 +-
 .../pde/launching/IPDELauncherConstants.java       |    3 +
 .../JUnitLaunchConfigurationDelegate.java          |    7 +-
 .../icons/obj16/frgmt_obj.gif                      |  Bin 313 -> 313 bytes
 .../icons/obj16/plugins_obj.gif                    |  Bin 214 -> 214 bytes
 .../registry/model/LocalRegistryBackend.java       |    4 +-
 .../runtime/registry/model/ModelObject.java        |    5 +-
 .../runtime/registry/model/ServiceName.java        |  141 +-
 .../registry/model/ServiceRegistration.java        |    5 +-
 .../runtime/spy/dialogs/MenuSpyDialog.java         |    2 +-
 .../org.eclipse.pde.ua.core/build.properties       |   10 +
 .../org.eclipse.pde.ua.core/plugin.properties      |   10 +
 .../core/cheatsheet/simple/ISimpleCSConstants.java |    2 +-
 .../core/cheatsheet/simple/text/SimpleCSIntro.java |    2 +-
 .../plugins/org.eclipse.pde.ua.ui/build.properties |   10 +
 .../icons/etool16/new_cheatsheet_wiz.gif           |  Bin 587 -> 587 bytes
 .../icons/obj16/cheatsheet_composite_obj.gif       |  Bin 366 -> 366 bytes
 .../icons/obj16/cheatsheet_conclusion_obj.gif      |  Bin 351 -> 351 bytes
 .../icons/obj16/cheatsheet_intro_obj.gif           |  Bin 354 -> 354 bytes
 .../icons/obj16/cheatsheet_item_obj.gif            |  Bin 337 -> 337 bytes
 .../icons/obj16/cheatsheet_obj.gif                 |  Bin 361 -> 361 bytes
 .../icons/obj16/cheatsheet_simple_obj.gif          |  Bin 218 -> 218 bytes
 .../icons/obj16/cheatsheet_subitem_obj.gif         |  Bin 581 -> 581 bytes
 .../icons/obj16/cheatsheet_taskgroup_obj.gif       |  Bin 363 -> 363 bytes
 .../icons/obj16/cheatsheet_unsupported_obj.gif     |  Bin 348 -> 348 bytes
 .../icons/obj16/toc_anchor_obj.gif                 |  Bin 197 -> 197 bytes
 .../icons/obj16/toc_leaftopic_obj.gif              |  Bin 354 -> 354 bytes
 .../icons/obj16/toc_link_obj.gif                   |  Bin 585 -> 585 bytes
 .../org.eclipse.pde.ua.ui/icons/obj16/toc_obj.gif  |  Bin 583 -> 583 bytes
 .../icons/obj16/toc_topic_obj.gif                  |  Bin 562 -> 562 bytes
 .../org.eclipse.pde.ua.ui/plugin.properties        |   10 +
 .../ua/ui/editor/cheatsheet/comp/CompCSPage.java   |    2 +-
 .../cheatsheet/comp/actions/messages.properties    |   10 +
 .../cheatsheet/comp/details/messages.properties    |   10 +
 .../ui/editor/cheatsheet/comp/messages.properties  |   10 +
 .../ua/ui/editor/cheatsheet/messages.properties    |   10 +
 .../cheatsheet/simple/NewCommandKeyEvent.java      |    2 +-
 .../cheatsheet/simple/actions/messages.properties  |   10 +
 .../cheatsheet/simple/details/messages.properties  |   10 +
 .../editor/cheatsheet/simple/messages.properties   |   10 +
 .../ui/editor/ctxhelp/details/messages.properties  |   10 +
 .../ua/ui/editor/ctxhelp/messages.properties       |   10 +
 .../ui/editor/toc/TocFoldingStructureProvider.java |    2 +-
 .../ua/ui/editor/toc/actions/messages.properties   |   10 +
 .../ua/ui/editor/toc/details/messages.properties   |   10 +
 .../internal/ua/ui/editor/toc/messages.properties  |   10 +
 .../wizards/cheatsheet/CSCategoryTrackerUtil.java  |    2 +-
 .../ua/ui/wizards/cheatsheet/CSFileWizardPage.java |    2 +-
 .../ua/ui/wizards/cheatsheet/IRegisterCSData.java  |    2 +-
 .../ua/ui/wizards/cheatsheet/messages.properties   |   10 +
 .../ui/wizards/ctxhelp/NewCtxHelpWizardPage.java   |    9 +-
 .../ua/ui/wizards/ctxhelp/messages.properties      |   10 +
 .../ua/ui/wizards/toc/IRegisterTOCData.java        |    2 +-
 .../internal/ua/ui/wizards/toc/messages.properties |   10 +
 .../META-INF/MANIFEST.MF                           |    5 +-
 .../osgi/HelloServiceComponentTemplate.java        |    2 +-
 .../templates_3.0/mail/bin/icons/mail.ico          |  Bin 26694 -> 0 bytes
 .../templates_3.0/mail/bin/icons/sample.gif        |  Bin 983 -> 0 bytes
 .../templates_3.0/mail/bin/icons/sample.icns       |  Bin 35301 -> 0 bytes
 .../templates_3.0/mail/bin/icons/sample2.gif       |  Bin 318 -> 0 bytes
 .../templates_3.0/mail/bin/icons/sample3.gif       |  Bin 173 -> 0 bytes
 .../templates_3.0/mail/bin/product_lg.gif          |  Bin 9559 -> 0 bytes
 .../mail/java/$applicationClass$.java              |   27 -
 .../mail/java/ApplicationWorkbenchAdvisor.java     |  116 -
 .../templates_3.0/mail/java/ICommandIds.java       |   15 -
 .../mail/java/MessagePopupAction.java              |   25 -
 .../templates_3.0/mail/java/NavigationView.java    |  151 -
 .../templates_3.0/mail/java/OpenViewAction.java    |   36 -
 .../templates_3.0/mail/java/Perspective.java       |   20 -
 .../templates_3.0/mail/java/View.java              |   72 -
 .../perspective/java/$perspectiveClassName$.java   |   10 -
 .../templates_3.1/mail/java/View.java              |   12 +-
 .../templates_3.3/mail/java/View.java              |   12 +-
 .../.settings/org.eclipse.jdt.core.prefs           |    4 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.pde.ui/META-INF/MANIFEST.MF        |   12 +-
 .../plugins/org.eclipse.pde.ui/plugin.properties   |    2 +-
 eclipse/plugins/org.eclipse.pde.ui/plugin.xml      |   20 +-
 .../schema/bundleImportPages.exsd                  |  147 -
 .../eclipse/pde/internal/ui/IHelpContextIds.java   |    1 +
 .../eclipse/pde/internal/ui/IPDEUIConstants.java   |    8 +-
 .../eclipse/pde/internal/ui/PDEPerspective.java    |    6 +-
 .../src/org/eclipse/pde/internal/ui/PDEPlugin.java |   35 +-
 .../eclipse/pde/internal/ui/PDEPluginImages.java   |    3 +-
 .../org/eclipse/pde/internal/ui/PDEUIMessages.java |   75 +-
 .../ui/compare/PluginContentMergeViewer.java       |   22 +-
 .../ui/correction/AddBuildEntryResolution.java     |    6 +
 .../ui/correction/ResolutionGenerator.java         |   13 +
 .../ui/correction/java/JavaResolutionFactory.java  |   11 +-
 .../ui/correction/java/QuickFixProcessor.java      |   29 +-
 .../ui/editor/ILauncherFormPageHelper.java         |    4 +-
 .../ui/editor/PDEFormTextEditorContributor.java    |    6 +-
 .../ui/editor/StructuredViewerSection.java         |   12 +-
 .../ui/editor/actions/OpenSchemaAction.java        |   29 +-
 .../build/BuildSourceViewerConfiguration.java      |   19 +-
 .../ManifestContentAssistProcessor.java            |    8 +-
 .../ui/editor/context/XMLInputContext.java         |   20 +-
 .../internal/ui/editor/feature/InfoSection.java    |   61 +-
 .../ui/editor/feature/LicenseFeatureSection.java   |  323 +
 .../ui/editor/feature/RequiresSection.java         |   18 +-
 .../ui/editor/plugin/ExtensionPointDetails.java    |  758 ++-
 .../ui/editor/plugin/ExtensionPointsSection.java   |   18 +-
 .../ui/editor/plugin/ImportPackageSection.java     |   61 +-
 .../internal/ui/editor/plugin/ManifestEditor.java  |    4 +
 .../editor/plugin/ManifestEditorContributor.java   |    2 +-
 .../ui/editor/plugin/ManifestSourcePage.java       |    7 +-
 .../ui/editor/plugin/PluginUndoManager.java        |   42 +-
 .../internal/ui/editor/plugin/RequiresSection.java |   37 +-
 .../ui/editor/plugin/rows/ClassAttributeRow.java   |    5 +-
 .../ui/editor/product/ConfigurationPage.java       |   18 +-
 .../ui/editor/product/GeneralInfoSection.java      |   16 +-
 .../editor/product/PluginConfigurationSection.java |    4 +-
 .../ui/editor/product/PropertiesSection.java       |  375 +
 .../ui/editor/schema/SchemaInputContext.java       |   11 +-
 .../ui/editor/targetdefinition/TargetEditor.java   |  282 +-
 .../text/ChangeAwareSourceViewerConfiguration.java |   20 +-
 .../ui/editor/text/ManifestConfiguration.java      |   16 +-
 .../ui/editor/text/PDEQuickAssistAssistant.java    |   22 +-
 .../internal/ui/editor/text/XMLConfiguration.java  |   18 +-
 .../internal/ui/launcher/AbstractPluginBlock.java  |  119 +-
 .../pde/internal/ui/launcher/BaseBlock.java        |   16 +-
 .../pde/internal/ui/launcher/BlockAdapter.java     |   29 +-
 .../ui/launcher/ConfigurationAreaBlock.java        |   39 +-
 .../pde/internal/ui/launcher/FeatureBlock.java     |   12 +-
 .../pde/internal/ui/launcher/LaunchAction.java     |   25 +-
 .../launcher/LaunchTerminationStatusHandler.java   |  177 +-
 .../ui/launcher/LauncherUtilsStatusHandler.java    |   79 +-
 .../pde/internal/ui/launcher/OSGiBundleBlock.java  |   29 +-
 .../pde/internal/ui/launcher/PluginBlock.java      |   24 +-
 .../internal/ui/launcher/PluginStatusDialog.java   |   19 +-
 .../pde/internal/ui/launcher/TracingBlock.java     |   53 +-
 .../internal/ui/launcher/WorkspaceDataBlock.java   |   91 +-
 .../internal/ui/nls/InternationalizeWizard.java    |   14 +-
 .../pde/internal/ui/nls/ModelChangeTable.java      |    4 +-
 .../internal/ui/parts/SharedPartWithButtons.java   |   12 +-
 .../internal/ui/parts/WizardCheckboxTablePart.java |   51 +-
 .../pde/internal/ui/pderesources.properties        |  107 +-
 .../ui/preferences/CompilersPreferencePage.java    |   22 +-
 .../ui/preferences/EditorPreferencePage.java       |    8 +-
 .../ui/preferences/MainPreferencePage.java         |  201 +-
 .../preferences/TargetPlatformPreferencePage.java  |   26 +-
 .../ui/provisional/IBundeImportWizardPage.java     |   58 -
 .../pde/internal/ui/search/PluginSearchPage.java   |   12 +-
 .../internal/ui/search/ShowDescriptionAction.java  |    4 +-
 .../search/dialogs/FilteredIUSelectionDialog.java  |   16 +-
 .../dialogs/TargetRepositorySearchHandler.java     |    8 +-
 .../ui/shared/CachedCheckboxTreeViewer.java        |   22 +-
 .../target/AddBundleContainerSelectionPage.java    |   16 +-
 .../ui/shared/target/AddFeatureContainersPage.java |    3 +-
 .../shared/target/EditBundleContainerWizard.java   |   10 +-
 .../ui/shared/target/EditIUContainerPage.java      |   94 +-
 .../ui/shared/target/EditProfileContainerPage.java |    3 +-
 .../pde/internal/ui/shared/target/Messages.java    |    4 +-
 .../ui/shared/target/TargetContentsGroup.java      |   40 +-
 .../ui/shared/target/TargetLocationsGroup.java     |   87 +-
 .../internal/ui/shared/target/messages.properties  |   14 +-
 .../pde/internal/ui/util/PDEJavaHelperUI.java      |   17 +-
 .../ui/views/dependencies/DependenciesView.java    |   10 +-
 .../views/dependencies/DependenciesViewPage.java   |    5 +-
 .../ui/views/plugins/ImportActionGroup.java        |   10 +-
 .../internal/ui/views/target/StateViewPage.java    |    4 +-
 .../ui/wizards/exports/ExportActiveTargetJob.java  |  161 -
 .../ui/wizards/exports/ExportTargetJob.java        |  235 +
 .../ui/wizards/exports/ExportTargetMetadata.java   |   85 -
 .../exports/TargetDefinitionExportWizard.java      |   55 +-
 .../exports/TargetDefinitionExportWizardPage.java  |  103 +-
 .../ui/wizards/feature/PluginListPage.java         |   27 +-
 .../imports/BaseImportWizardSecondPage.java        |    8 +-
 .../ui/wizards/imports/CVSBundleImportPage.java    |  227 -
 .../ui/wizards/imports/PluginImportOperation.java  |  131 +-
 .../ui/wizards/imports/PluginImportWizard.java     |    7 +-
 .../imports/PluginImportWizardDetailedPage.java    |    1 -
 .../imports/PluginImportWizardExpressPage.java     |   14 +-
 .../imports/PluginImportWizardFirstPage.java       |  107 +-
 .../ui/wizards/imports/RepositoryImportWizard.java |   59 +-
 .../plugin/NewLibraryPluginCreationPage.java       |    4 +-
 .../plugin/NewProjectCreationOperation.java        |   22 +-
 .../ui/wizards/plugin/NewProjectCreationPage.java  |    6 +-
 .../ui/wizards/plugin/PluginContentPage.java       |    4 +-
 .../ui/wizards/plugin/PluginFieldData.java         |    8 +-
 .../target/TargetDefinitionContentPage.java        |    7 +-
 .../ui/launcher/JUnitWorkbenchLaunchShortcut.java  |   19 +-
 .../src/org/eclipse/pde/ui/launcher/MainTab.java   |   19 +-
 .../pde/ui/launcher/PluginJUnitMainTab.java        |   31 +-
 .../plugins/org.eclipse.pde/META-INF/MANIFEST.MF   |    2 +-
 eclipse/plugins/org.eclipse.pde/about.properties   |    4 +-
 .../setup-apitools-existing-projects.xml           |   18 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.platform.doc.isv/about.html        |    4 +-
 .../org.eclipse.platform.doc.isv/build.properties  |    3 +-
 .../org.eclipse.platform.doc.isv/guide/cnf.htm     |    4 +-
 .../guide/cnf_config.htm                           |    6 +-
 .../guide/cnf_operation.htm                        |    4 +-
 .../guide/cnf_steps.htm                            |    8 +-
 .../guide/cnf_steps_content.htm                    |    6 +-
 .../guide/cnf_steps_general.htm                    |    4 +-
 .../guide/cnf_steps_rn_migration.htm               |    8 +-
 .../guide/cnf_troubleshooting.htm                  |    4 +-
 ...ialogs_FilteredItemsSelectionDialog_example.htm |    5 +-
 ...lteredItemsSelectionDialog_example_advanced.htm |    5 +-
 .../guide/dialogs_wizards_exportWizards.htm        |    6 +-
 .../guide/dialogs_wizards_extensions.htm           |    6 +-
 .../guide/dialogs_wizards_importWizards.htm        |    6 +-
 .../guide/dialogs_wizards_newWizards.htm           |    6 +-
 .../guide/editors_actions.htm                      |    5 +-
 .../guide/editors_annotations.htm                  |   15 +-
 .../guide/editors_utilities.htm                    |    8 +-
 .../guide/firstplugin_create.htm                   |    6 +-
 .../guide/firstplugin_run.htm                      |    8 +-
 .../guide/images/prbfil.png                        |  Bin 0 -> 12836 bytes
 .../guide/images/prob.png                          |  Bin 0 -> 7091 bytes
 .../guide/images/problemsview_groups.png           |  Bin 10267 -> 7200 bytes
 .../guide/images/quickfix.png                      |  Bin 15558 -> 10149 bytes
 .../guide/images/readmeviewcommand.png             |  Bin 2956 -> 2956 bytes
 .../guide/java_web_start.htm                       |    6 +-
 .../guide/jface_resources.htm                      |    4 +-
 .../guide/p2_actions_touchpoints.html              |   96 +-
 .../guide/p2_category_generation.htm               |    4 +-
 .../guide/p2_director.html                         |   13 +-
 .../guide/p2_metadata.html                         |    6 +-
 .../guide/p2_metadata_generator.html               |  213 -
 .../guide/p2_overview.htm                          |   10 +-
 .../guide/p2_publisher.html                        |    5 +-
 .../guide/p2_repositorytasks.htm                   | 1272 +++-
 .../guide/p2_startup.htm                           |    6 +-
 .../org.eclipse.platform.doc.isv/guide/p2_ui.htm   |    6 +-
 .../guide/p2_uipolicy.htm                          |  499 +-
 .../guide/p2_uireuse.htm                           |   16 +-
 .../guide/preferences_prefs_contribute.htm         |    6 +-
 .../guide/product_configproduct.htm                |    6 +-
 .../guide/product_extension.htm                    |    4 +-
 .../guide/rcp_browser.htm                          |    6 +-
 .../org.eclipse.platform.doc.isv/guide/resAdv.htm  |    8 +-
 .../guide/resAdv_buildconfigs.htm                  |  153 +
 .../guide/resAdv_builders.htm                      |  100 +-
 .../guide/runtime_app_model.htm                    |    4 +-
 .../guide/runtime_model_bundles.htm                |   24 +-
 .../guide/secure_storage_architecture.htm          |   10 +-
 .../guide/secure_storage_dev.htm                   |    4 +-
 .../guide/secure_storage_providers.htm             |    4 +-
 .../guide/swt_widgets_events.htm                   |   10 +
 .../guide/team_howto.htm                           |    6 +-
 .../team_synchronize_localhistory_example.htm      |    4 +-
 .../org.eclipse.platform.doc.isv/guide/ua.htm      |    4 +-
 .../guide/ua_cheatsheet.htm                        |    4 +-
 .../guide/ua_cheatsheet_composite.htm              |  334 +-
 .../guide/ua_cheatsheet_composite_content.htm      |   78 +-
 .../guide/ua_cheatsheet_guidelines.htm             |    4 +-
 .../guide/ua_cheatsheet_simple.htm                 |    8 +-
 .../guide/ua_dynamic.htm                           |    2 +-
 .../guide/ua_dynamic_extensions.htm                |  260 +-
 .../guide/ua_dynamic_filters.htm                   |    4 +-
 .../guide/ua_dynamic_includes.htm                  |  137 +-
 .../org.eclipse.platform.doc.isv/guide/ua_help.htm |    4 +-
 .../guide/ua_help_abstract_scope.htm               |  141 +-
 .../guide/ua_help_content.htm                      |    4 +-
 .../guide/ua_help_content_active.htm               |    6 +-
 .../guide/ua_help_content_active_action.htm        |    4 +-
 .../guide/ua_help_content_active_debug.htm         |    4 +-
 .../guide/ua_help_content_active_invoke.htm        |    4 +-
 .../guide/ua_help_content_child_links.htm          |   70 +-
 .../guide/ua_help_content_command.htm              |   26 +-
 .../guide/ua_help_content_command_authoring.htm    |    4 +-
 .../guide/ua_help_content_criteria.htm             |    8 +-
 .../guide/ua_help_content_files.htm                |    4 +-
 .../guide/ua_help_content_manifest.htm             |    4 +-
 .../guide/ua_help_content_nested.htm               |    4 +-
 .../guide/ua_help_content_process.htm              |    4 +-
 .../guide/ua_help_content_remote.htm               |    4 +-
 .../guide/ua_help_content_toc.htm                  |    4 +-
 .../guide/ua_help_content_xhtml.htm                |    4 +-
 .../guide/ua_help_context.htm                      |    4 +-
 .../guide/ua_help_context_dynamic.htm              |    4 +-
 .../guide/ua_help_context_id.htm                   |    4 +-
 .../guide/ua_help_context_infopops.htm             |    4 +-
 .../guide/ua_help_context_xml.htm                  |    4 +-
 .../guide/ua_help_infocenter_preferences.htm       |   12 +-
 .../guide/ua_help_menu.htm                         |    7 +-
 .../guide/ua_help_search.htm                       |    2 +-
 .../guide/ua_help_search_types.htm                 |    4 +-
 .../guide/ua_help_setup.htm                        |    4 +-
 .../guide/ua_help_setup_about.htm                  |   14 +-
 .../guide/ua_help_setup_help_data.htm              |  337 +-
 .../guide/ua_help_setup_infocenter.htm             |   27 +-
 .../guide/ua_help_setup_preferences.htm            |   26 +-
 .../guide/ua_help_setup_preindex.htm               |    4 +-
 .../guide/ua_help_setup_rcp.htm                    |    4 +-
 .../guide/ua_help_setup_standalone.htm             |    4 +-
 .../guide/ua_help_war.htm                          |    4 +-
 .../guide/ua_intro.htm                             |    4 +-
 .../guide/ua_intro_cust_intro_part.htm             |    4 +-
 .../guide/ua_intro_cust_static.htm                 |    4 +-
 .../guide/ua_intro_define_content.htm              |    4 +-
 .../guide/ua_intro_defining.htm                    |    4 +-
 .../guide/ua_intro_defining_config.htm             |    4 +-
 .../guide/ua_intro_ext_custom_url.htm              |    4 +-
 .../guide/ua_intro_ext_standbypart.htm             |    4 +-
 .../guide/ua_intro_ext_theme.htm                   |    6 +-
 .../guide/ua_intro_extending.htm                   |    4 +-
 .../guide/ua_intro_extending_content.htm           |    4 +-
 .../guide/ua_intro_hello_world.htm                 |    4 +-
 .../guide/ua_intro_minimal.htm                     |    4 +-
 .../guide/ua_intro_swt_properties.htm              |  179 +
 .../guide/ua_intro_universal.htm                   |    4 +-
 .../guide/ua_intro_universal_contributing.htm      |    4 +-
 .../guide/ua_intro_universal_defaults.htm          |    4 +-
 .../guide/ua_intro_universal_extending.htm         |    4 +-
 .../guide/ua_intro_universal_links.htm             |    4 +-
 .../guide/ua_intro_universal_preference.htm        |    4 +-
 .../guide/ua_intro_xhtml.htm                       |   41 +-
 .../guide/ua_statushandling.htm                    |    4 +-
 .../guide/ua_statushandling_defining.htm           |    4 +-
 .../guide/ua_statushandling_sample.htm             |    4 +-
 .../guide/workbench_advext_activities.htm          |   18 +-
 .../workbench_advext_perspectiveExtension.htm      |    6 +-
 ...orkbench_basicext_actionSetPartAssociations.htm |    6 +-
 .../guide/workbench_basicext_actionSets.htm        |    6 +-
 .../guide/workbench_basicext_views.htm             |    6 +-
 .../guide/workbench_cmd.htm                        |    6 +-
 .../guide/workbench_cmd_expressions.htm            |    4 +-
 .../guide/workbench_cmd_menus.htm                  |   18 +-
 .../guide/workbench_perspectives.htm               |    6 +-
 .../guide/workbench_statushandling.htm             |    4 +-
 .../guide/workbench_statushandling_defining.htm    |    5 +-
 .../guide/wrkAdv_efs_resources.htm                 |    4 +-
 .../guide/wrkAdv_encoding.htm                      |    6 +-
 .../guide/wrkAdv_keyBindings_accelConfig.htm       |    6 +-
 .../guide/wrkAdv_marker_support.htm                |   16 +-
 .../guide/wrkAdv_markerresolution.htm              |    4 +-
 .../guide/wrkAdv_workingsets.htm                   |    4 +-
 .../org.eclipse.platform.doc.isv/notices.html      |    4 +-
 .../platformOptions.txt                            |   40 +-
 .../org.eclipse.platform.doc.isv/plugin.xml        |    5 +-
 .../porting/3.4/recommended.html                   |    2 +-
 .../porting/3.5/incompatibilities.html             |    6 +-
 .../porting/3.6/incompatibilities.html             |   20 +-
 .../porting/3.6/recommended.html                   |    8 +-
 .../porting/3.7/faq.html                           |   30 +
 .../porting/3.7/incompatibilities.html             |   88 +
 .../porting/3.7/recommended.html                   |   40 +
 .../porting/eclipse_3_7_porting_guide.html         |   35 +
 .../porting/removals.html                          |   35 +-
 .../questions/index.html                           |   16 +-
 .../reference/extension-points/index.html          | 1195 +++-
 .../reference/misc/api-usage-rules.html            |    4 +-
 .../reference/misc/bundle_manifest.html            |   61 +-
 .../reference/misc/feature_manifest.html           |    4 +-
 .../reference/misc/gcj.html                        |    4 +-
 .../reference/misc/launcher.html                   |    4 +-
 .../reference/misc/launcher_ini.html               |    4 +-
 .../reference/misc/message_bundles.html            |    4 +-
 .../reference/misc/naming.html                     |    4 +-
 .../reference/misc/p2_dropins_format.html          |    6 +-
 .../reference/misc/plugin_dtd.html                 |    4 +-
 .../reference/misc/plugin_dtd_30.html              |    4 +-
 .../reference/misc/plugin_manifest.html            |    4 +-
 .../reference/misc/plugin_manifest_30.html         |   15 +-
 .../reference/misc/runtime-options.html            |   34 +-
 .../reference/misc/update_platform_xml.html        |   47 +-
 .../samples/samples.html                           |    6 +-
 .../plugins/org.eclipse.platform.doc.isv/toc.xml   |    6 +-
 .../org.eclipse.platform.doc.isv/topics_Guide.xml  |    7 +-
 .../topics_Porting.xml                             |    6 +
 .../topics_Reference.xml                           |   31 +-
 .../topics_WhatsNew.xml                            |   10 +
 .../whatsNew/images/AppMenuBar.png                 |  Bin 0 -> 101487 bytes
 .../whatsNew/images/NativeToolBar.png              |  Bin 0 -> 21064 bytes
 .../whatsNew/images/browserclose.png               |  Bin 53626 -> 0 bytes
 .../whatsNew/images/cocoadatetime.png              |  Bin 0 -> 13746 bytes
 .../whatsNew/images/cocoartl.PNG                   |  Bin 14883 -> 0 bytes
 .../whatsNew/images/cocoatool.png                  |  Bin 0 -> 59619 bytes
 .../whatsNew/images/duplex-printing-ll.png         |  Bin 0 -> 31778 bytes
 .../whatsNew/images/duplex-printing-ls.png         |  Bin 0 -> 32209 bytes
 .../whatsNew/images/duplex-printing-pl.png         |  Bin 0 -> 32899 bytes
 .../whatsNew/images/duplex-printing-ps.png         |  Bin 0 -> 33370 bytes
 .../whatsNew/images/footer.png                     |  Bin 93716 -> 0 bytes
 .../whatsNew/images/gesture.png                    |  Bin 0 -> 245521 bytes
 .../whatsNew/images/gtk-datetime.png               |  Bin 0 -> 25408 bytes
 .../whatsNew/images/install-history-tag.png        |  Bin 0 -> 51380 bytes
 .../whatsNew/images/menu-mac.png                   |  Bin 174924 -> 0 bytes
 .../whatsNew/images/menu-win32.png                 |  Bin 150303 -> 0 bytes
 .../whatsNew/images/newctab.png                    |  Bin 4691 -> 0 bytes
 .../whatsNew/images/newscope.png                   |  Bin 15719 -> 0 bytes
 .../whatsNew/images/overlayimage.png               |  Bin 27617 -> 0 bytes
 .../whatsNew/images/overlaytext.png                |  Bin 45477 -> 0 bytes
 .../whatsNew/images/progress.png                   |  Bin 31260 -> 0 bytes
 .../whatsNew/images/rss.png                        |  Bin 47547 -> 0 bytes
 .../whatsNew/images/searchprocessorNN.png          |  Bin 0 -> 14269 bytes
 .../whatsNew/images/see.png                        |  Bin 6759 -> 0 bytes
 .../whatsNew/images/segments-chars.png             |  Bin 9242 -> 0 bytes
 .../whatsNew/images/sttabs.png                     |  Bin 22943 -> 0 bytes
 .../whatsNew/images/system-menu.png                |  Bin 0 -> 93624 bytes
 .../whatsNew/images/tablednd.png                   |  Bin 20407 -> 0 bytes
 .../whatsNew/images/text_search.png                |  Bin 7817 -> 0 bytes
 .../whatsNew/images/variable-tab-stops.png         |  Bin 13069 -> 0 bytes
 .../whatsNew/images/webappextn.png                 |  Bin 81421 -> 0 bytes
 .../whatsNew/images/webkitWindows.png              |  Bin 0 -> 52435 bytes
 .../whatsNew/images/webkitgtk.png                  |  Bin 54756 -> 0 bytes
 .../whatsNew/images/wrap-indent.png                |  Bin 20434 -> 0 bytes
 .../whatsNew/images/wrap.png                       |  Bin 0 -> 51652 bytes
 .../whatsNew/platform_isv_whatsnew.html            |  934 ++--
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.platform.doc.user/about.html       |    4 +-
 .../plugins/org.eclipse.platform.doc.user/book.css |    2 +-
 .../concepts/accessibility/accessmain.htm          |    6 +-
 .../concepts/accessibility/colordialog.htm         |  122 +-
 .../concepts/accessibility/fontsandcolors.htm      |   34 +-
 .../concepts/accessibility/keyboardshortcuts.htm   |    8 +-
 .../concepts/accessibility/navigation.htm          |   26 +-
 .../concepts/accessibility/text_editor.htm         |   78 +-
 .../concepts/cdecorations.htm                      |    6 +-
 .../concepts/cnav.htm                              |    6 +-
 .../concepts/concepts-11.htm                       |   10 +-
 .../concepts/concepts-13.htm                       |    6 +-
 .../concepts/concepts-18.htm                       |    8 +-
 .../concepts/concepts-21.htm                       |   12 +-
 .../concepts/concepts-21a.htm                      |    6 +-
 .../concepts/concepts-22.htm                       |   12 +-
 .../concepts/concepts-4.htm                        |   14 +-
 .../concepts/concepts-5.htm                        |   10 +-
 .../concepts/concepts-6.htm                        |   16 +-
 .../concepts/concepts-6a.htm                       |   10 +-
 .../concepts/concepts-antexttools.htm              |    8 +-
 .../concepts/concepts-antsupport.htm               |    6 +-
 .../concepts/concepts-exttools.htm                 |    8 +-
 .../concepts/coutline.htm                          |    6 +-
 .../concepts/cpathvars.htm                         |    8 +-
 .../concepts/cprbview.htm                          |   10 +-
 .../concepts/cpropview.htm                         |    6 +-
 .../concepts/ctskview.htm                          |    6 +-
 .../concepts/cworkset.htm                          |   33 +-
 .../concepts/help.htm                              |    8 +-
 .../concepts/help_view.htm                         |    4 +-
 .../concepts/resourcefilters.htm                   |    4 +-
 .../concepts/virtualfolders.htm                    |    4 +-
 .../concepts/welcome.htm                           |    4 +-
 .../contexts_AntUI.xml                             |    1 +
 .../contexts_ExternalTools.xml                     |    5 +-
 .../contexts_Team.xml                              |    2 +-
 .../contexts_Team_CVS.xml                          |   19 +-
 .../contexts_UserAssistance.xml                    |    4 +
 .../contexts_Workbench.xml                         |    9 +
 .../gettingStarted/intro/overview.htm              |    4 +-
 .../gettingStarted/qs-02a.htm                      |    8 +-
 .../gettingStarted/qs-02d.xhtml                    |    4 +-
 .../gettingStarted/qs-02e.htm                      |    6 +-
 .../gettingStarted/qs-07b.htm                      |    5 +-
 .../gettingStarted/qs-07d.htm                      |    8 +-
 .../gettingStarted/qs-10b.htm                      |    6 +-
 .../gettingStarted/qs-12b.htm                      |    6 +-
 .../gettingStarted/qs-24a.xhtml                    |    8 +-
 .../gettingStarted/qs-31a.htm                      |    6 +-
 .../gettingStarted/qs-34a.xhtml                    |    4 +-
 .../gettingStarted/qs-34b.xhtml                    |    4 +-
 .../gettingStarted/qs-34c.xhtml                    |    6 +-
 .../gettingStarted/qs-35b.htm                      |    6 +-
 .../gettingStarted/qs-36a.htm                      |    6 +-
 .../gettingStarted/qs-36b.htm                      |    6 +-
 .../gettingStarted/qs-37-3e.htm                    |    4 +-
 .../gettingStarted/qs-37-3f.htm                    |    6 +-
 .../gettingStarted/qs-39c.htm                      |   30 +-
 .../gettingStarted/qs-39g.htm                      |    6 +-
 .../gettingStarted/qs-43.htm                       |   16 +-
 .../gettingStarted/qs-43e.htm                      |    7 +-
 .../gettingStarted/qs-52.htm                       |    5 +-
 .../gettingStarted/qs-60_team.htm                  |   11 +-
 .../gettingStarted/qs-83_edit.htm                  |    6 +-
 .../gettingStarted/qs-92_project_builders.htm      |    3 +-
 .../gettingStarted/qs-93_project_builder.htm       |   17 +-
 .../qs-93a_project_builder_targets.htm             |   77 +
 .../gettingStarted/qs-94_run_pj.htm                |    3 +-
 .../gettingStarted/qs-96_non_ant_pjs.htm           |    9 +-
 .../gettingStarted/qs-97_standalone_ets.htm        |    6 +-
 .../images/Image1.png                              |  Bin 23166 -> 25754 bytes
 .../images/Image11_new_wizard.png                  |  Bin 22393 -> 8225 bytes
 .../images/Image209_workspace.png                  |  Bin 28040 -> 30213 bytes
 .../images/Image216_history_view.png               |  Bin 12174 -> 11700 bytes
 .../images/Image219_pref_cv2.png                   |  Bin 49993 -> 49591 bytes
 .../images/Image223_pref_persp.png                 |  Bin 33474 -> 31651 bytes
 .../images/Image247_projsel_wiz.png                |  Bin 11876 -> 0 bytes
 .../images/Image265_team_project.png               |  Bin 21037 -> 17895 bytes
 .../images/Image274_fonts_preference.png           |  Bin 29548 -> 11491 bytes
 .../images/Image274_fonts_preference2.png          |  Bin 21150 -> 14571 bytes
 .../images/Image2_active_editor.png                |  Bin 27175 -> 23231 bytes
 .../images/Image2_active_view.png                  |  Bin 27737 -> 23286 bytes
 .../images/Image4_showview.png                     |  Bin 30743 -> 32602 bytes
 .../images/Image55_reset.png                       |  Bin 31373 -> 33374 bytes
 .../images/Image5_text_editor.png                  |  Bin 35190 -> 33389 bytes
 .../images/Image610_et_targets_tab.png             |  Bin 34478 -> 0 bytes
 .../images/Image611_et_main_tab.png                |  Bin 31933 -> 0 bytes
 .../images/Image612_et_refresh_tab.png             |  Bin 29081 -> 0 bytes
 .../images/Image613_project_properties.png         |  Bin 19291 -> 0 bytes
 .../images/Image614_et_type_dialog.png             |  Bin 11924 -> 0 bytes
 .../images/Image615_program_builder.png            |  Bin 29215 -> 0 bytes
 .../images/Image617_jar_inspector.png              |  Bin 34451 -> 0 bytes
 .../images/Image83_jane-history.png                |  Bin 11088 -> 10683 bytes
 .../images/Image83_jane3_conflict.png              |  Bin 48472 -> 46455 bytes
 .../images/Image84_replace3.png                    |  Bin 11672 -> 11245 bytes
 .../images/Image91_ant_prefs_1.png                 |  Bin 23545 -> 0 bytes
 .../images/Image91_ant_prefs_2.png                 |  Bin 31527 -> 0 bytes
 .../images/Image91_ant_prefs_3.png                 |  Bin 22209 -> 0 bytes
 .../images/ant_builder_main_tab.png                |  Bin 0 -> 19119 bytes
 .../images/ant_builder_refresh_tab.png             |  Bin 0 -> 18948 bytes
 .../images/ant_builder_targets_tab.png             |  Bin 0 -> 20749 bytes
 .../images/ant_classpath_tab.png                   |  Bin 0 -> 19690 bytes
 .../images/ant_code_assist.png                     |  Bin 20870 -> 0 bytes
 .../images/ant_content_assist.png                  |  Bin 0 -> 12366 bytes
 .../images/ant_editor_appearance.png               |  Bin 23663 -> 12980 bytes
 .../images/ant_editor_folding.png                  |  Bin 24430 -> 14084 bytes
 .../images/ant_editor_problems.png                 |  Bin 28427 -> 19833 bytes
 .../images/ant_editor_syntax.png                   |  Bin 28077 -> 19707 bytes
 .../images/ant_formatter.png                       |  Bin 24956 -> 16836 bytes
 .../images/ant_prefs.png                           |  Bin 26680 -> 27235 bytes
 .../images/ant_run_dialog.png                      |  Bin 30787 -> 18312 bytes
 .../images/ant_runtime_classpath.png               |  Bin 0 -> 17171 bytes
 .../images/ant_runtime_properties.png              |  Bin 35165 -> 24528 bytes
 .../images/ant_runtime_tasks.png                   |  Bin 0 -> 36481 bytes
 .../images/ant_runtime_types.png                   |  Bin 0 -> 18358 bytes
 .../images/ant_tar_assist.png                      |  Bin 0 -> 11446 bytes
 .../images/ant_templates.png                       |  Bin 34201 -> 27319 bytes
 .../images/builder_property_page.png               |  Bin 0 -> 9299 bytes
 .../images/cvs_filter_res_history.png              |  Bin 8840 -> 9696 bytes
 .../images/detachview2.png                         |  Bin 8716 -> 19706 bytes
 .../images/et_builder_main_tab.png                 |  Bin 0 -> 16118 bytes
 .../images/et_dialog.png                           |  Bin 41729 -> 20896 bytes
 .../images/et_dropdown.png                         |  Bin 5226 -> 6515 bytes
 .../images/et_run_dropdown.png                     |  Bin 0 -> 8139 bytes
 .../images/et_standalone.png                       |  Bin 0 -> 17476 bytes
 .../images/external_tools_prefs.png                |  Bin 21074 -> 12728 bytes
 .../images/first_anteditor.png                     |  Bin 33644 -> 10416 bytes
 .../images/help_view_bookmarks.png                 |  Bin 6246 -> 7845 bytes
 .../images/help_view_context.png                   |  Bin 10712 -> 10484 bytes
 .../images/help_view_index.png                     |  Bin 13610 -> 14307 bytes
 .../images/help_view_search.png                    |  Bin 22220 -> 23356 bytes
 .../images/help_view_toc.png                       |  Bin 18308 -> 18975 bytes
 .../images/help_window_external.png                |  Bin 39024 -> 40496 bytes
 .../images/newprj_wiz.gif                          |  Bin 0 -> 574 bytes
 .../images/newprj_wiz.png                          |  Bin 479 -> 0 bytes
 .../images/prb_quickfix.png                        |  Bin 25754 -> 9595 bytes
 .../images/prbfil.png                              |  Bin 22280 -> 12836 bytes
 .../org.eclipse.platform.doc.user/images/prob.png  |  Bin 9592 -> 7091 bytes
 .../images}/quickfix_error_obj.gif                 |  Bin 348 -> 348 bytes
 .../images}/quickfix_warning_obj.gif               |  Bin 559 -> 559 bytes
 .../images/ref-texteditorpref.png                  |  Bin 44596 -> 15101 bytes
 .../org.eclipse.platform.doc.user/notices.html     |    4 +-
 .../org.eclipse.platform.doc.user/plugin.xml       |    9 +-
 .../reference/help_preferences.htm                 |   12 +-
 .../reference/help_preferences_content.htm         |   14 +-
 .../reference/ref-10.htm                           |   15 +-
 .../reference/ref-11.htm                           |   27 +-
 .../reference/ref-12.htm                           |    8 +-
 .../reference/ref-13.htm                           |    6 +-
 .../reference/ref-14.htm                           |    6 +-
 .../reference/ref-14b.htm                          |    6 +-
 .../reference/ref-15.htm                           |    8 +-
 .../reference/ref-16.htm                           |    8 +-
 .../reference/ref-17.htm                           |    8 +-
 .../reference/ref-19.htm                           |    7 +-
 .../reference/ref-19cvs-annotate.htm               |    8 +-
 .../reference/ref-19cvs-commenttemplates.htm       |    8 +-
 .../reference/ref-19cvs-console.htm                |    8 +-
 .../reference/ref-19cvs-decorations.htm            |   10 +-
 .../reference/ref-19cvs-ext.htm                    |    8 +-
 .../reference/ref-19cvs-sync.htm                   |   21 +-
 .../reference/ref-19cvs-updatemerge.htm            |    7 +-
 .../reference/ref-19cvs-watch-edit.htm             |    8 +-
 .../reference/ref-19cvs.htm                        |    8 +-
 .../reference/ref-20-fileContent.htm               |    6 +-
 .../reference/ref-20.htm                           |    7 +-
 .../reference/ref-20team-models.htm                |    6 +-
 .../reference/ref-21.htm                           |    8 +-
 .../reference/ref-22.htm                           |  189 +-
 .../reference/ref-23.htm                           |  648 ++-
 .../reference/ref-24.htm                           |    6 +-
 .../reference/ref-25.htm                           |   24 +-
 .../reference/ref-27.htm                           |    6 +-
 .../reference/ref-28.htm                           |    8 +-
 .../reference/ref-29.htm                           |    6 +-
 .../reference/ref-3.htm                            |    6 +-
 .../reference/ref-30.htm                           |    6 +-
 .../reference/ref-31.htm                           |    6 +-
 .../reference/ref-31a.htm                          |   22 +-
 .../reference/ref-32a.htm                          |    7 +-
 .../reference/ref-33.htm                           |   33 +-
 .../reference/ref-35.htm                           |  279 +-
 .../reference/ref-36.htm                           |  482 +-
 .../reference/ref-37.htm                           |   82 +-
 .../reference/ref-3a.htm                           |    4 +-
 .../reference/ref-42.htm                           |   13 +-
 .../reference/ref-48a.htm                          |   10 +-
 .../reference/ref-5.htm                            |    6 +-
 .../reference/ref-58.htm                           |    7 +-
 .../reference/ref-6.htm                            |    6 +-
 .../reference/ref-65.htm                           |    4 +-
 .../reference/ref-66.htm                           |  157 +-
 .../reference/ref-67.htm                           |    6 +-
 .../reference/ref-68.htm                           |    4 +-
 .../reference/ref-7.htm                            |   16 +-
 .../reference/ref-70.htm                           |   24 +-
 .../reference/ref-71.htm                           |   12 +-
 .../reference/ref-72.htm                           |   24 +-
 .../reference/ref-73.htm                           |    6 +-
 .../reference/ref-8.htm                            |    4 +-
 .../reference/ref-9.htm                            |   78 +-
 .../reference/ref-antcodeassist.htm                |   81 -
 .../reference/ref-antcontentassist.htm             |   76 +
 .../reference/ref-anteditor.htm                    |    3 +-
 .../reference/ref-anteditorprefs.htm               |    6 +-
 .../reference/ref-antformatter.htm                 |    6 +-
 .../reference/ref-antprefs.htm                     |   13 +-
 .../reference/ref-antruntimeprefs.htm              |   12 +-
 .../reference/ref-anttemplates.htm                 |    8 +-
 .../reference/ref-antview.htm                      |    6 +-
 .../reference/ref-capabilitiespref.htm             |    6 +-
 .../reference/ref-cheatsheets.htm                  |    6 +-
 .../reference/ref-composite-cheatsheets.htm        |    6 +-
 .../reference/ref-content-type.htm                 |    8 +-
 .../reference/ref-decorations.htm                  |    6 +-
 .../reference/ref-exttoolsprefs.htm                |    6 +-
 .../reference/ref-fonts.htm                        |    6 +-
 .../reference/ref-keybindings.htm                  |  140 +-
 .../reference/ref-net-preferences.htm              |    8 +-
 .../reference/ref-p2-autoupdate.htm                |    7 +-
 .../reference/ref-p2-installupdate.htm             |    8 +-
 .../reference/ref-p2-siteprefs.htm                 |    7 +-
 .../reference/ref-regex-find-replace.htm           |  229 +-
 .../reference/ref-search.htm                       |    6 +-
 .../reference/ref-securestorage-options.htm        |    8 +-
 .../reference/ref-securestorage-passwd.htm         |   10 +-
 .../reference/ref-securestorage-prefs.htm          |    6 +-
 .../reference/ref-securestorage-recovery.htm       |    6 +-
 .../reference/ref-securestorage-start.htm          |    8 +-
 .../reference/ref-securestorage-works.htm          |   10 +-
 .../reference/ref-ssh2-preferences.htm             |    8 +-
 .../reference/ref-startup-workspaces.htm           |   18 +-
 .../reference/ref-startup.htm                      |   12 +-
 .../reference/ref-templates-view.htm               |    5 +-
 .../reference/ref-texteditorprefs.htm              |  453 +-
 .../reference/ref-workspaceswitch.htm              |   83 +-
 .../reference/welcome_preferences.htm              |    9 +-
 .../org.eclipse.platform.doc.user/tasks/help.xhtml |    6 +-
 .../tasks/help_accessibility.htm                   |    6 +-
 .../tasks/help_context.htm                         |    4 +-
 .../tasks/help_navigate.htm                        |    4 +-
 .../tasks/help_scope.htm                           |    6 +-
 .../tasks/help_search.htm                          |   10 +-
 .../tasks/help_settings.htm                        |    6 +-
 .../tasks/running_eclipse.htm                      |   46 +-
 .../tasks/task-team-cmdlineclient.htm              |    6 +-
 .../tasks/tasks-1.htm                              |    4 +-
 .../tasks/tasks-100d.htm                           |    6 +-
 .../tasks/tasks-100d1.htm                          |    6 +-
 .../tasks/tasks-100d1b.htm                         |    6 +-
 .../tasks/tasks-105.htm                            |    8 +-
 .../tasks/tasks-105b.htm                           |    8 +-
 .../tasks/tasks-107b.htm                           |   14 +-
 .../tasks/tasks-110.htm                            |   12 +-
 .../tasks/tasks-113.htm                            |    4 +-
 .../tasks/tasks-115.htm                            |    6 +-
 .../tasks/tasks-118.htm                            |    8 +-
 .../tasks/tasks-119.htm                            |    4 +-
 .../tasks/tasks-120.htm                            |    8 +-
 .../tasks/tasks-122.htm                            |   14 +-
 .../tasks/tasks-123.htm                            |    6 +-
 .../tasks/tasks-124.htm                            |    6 +-
 .../tasks/tasks-125.htm                            |    6 +-
 .../tasks/tasks-126.htm                            |    6 +-
 .../tasks/tasks-127.htm                            |    6 +-
 .../tasks/tasks-128.htm                            |    6 +-
 .../tasks/tasks-130.htm                            |    6 +-
 .../tasks/tasks-131.htm                            |    4 +-
 .../tasks/tasks-132.htm                            |    4 +-
 .../tasks/tasks-133.htm                            |    4 +-
 .../tasks/tasks-134.htm                            |    6 +-
 .../tasks/tasks-14.htm                             |    6 +-
 .../tasks/tasks-16.htm                             |    6 +-
 .../tasks/tasks-17.htm                             |    6 +-
 .../tasks/tasks-1b.htm                             |  102 +-
 .../tasks/tasks-1c.htm                             |   86 +-
 .../tasks/tasks-1e.htm                             |  110 +-
 .../tasks/tasks-1h.htm                             |   74 +-
 .../tasks/tasks-20.htm                             |   12 +-
 .../tasks/tasks-24.htm                             |   10 +-
 .../tasks/tasks-3.htm                              |    6 +-
 .../tasks/tasks-31.htm                             |    8 +-
 .../tasks/tasks-32.htm                             |    4 +-
 .../tasks/tasks-33.htm                             |    8 +-
 .../tasks/tasks-34.htm                             |    6 +-
 .../tasks/tasks-35.htm                             |    6 +-
 .../tasks/tasks-36.htm                             |    6 +-
 .../tasks/tasks-37.htm                             |   10 +-
 .../tasks/tasks-37a.htm                            |   15 +-
 .../tasks/tasks-38.htm                             |    6 +-
 .../tasks/tasks-3e.htm                             |  287 +-
 .../tasks/tasks-42.htm                             |    4 +-
 .../tasks/tasks-43.htm                             |    6 +-
 .../tasks/tasks-44.htm                             |    6 +-
 .../tasks/tasks-45.htm                             |   12 +-
 .../tasks/tasks-45a.htm                            |    6 +-
 .../tasks/tasks-46ag.htm                           |    8 +-
 .../tasks/tasks-48b.htm                            |    4 +-
 .../tasks/tasks-49.htm                             |    6 +-
 .../tasks/tasks-51.xhtml                           |    8 +-
 .../tasks/tasks-52.htm                             |   12 +-
 .../tasks/tasks-53.xhtml                           |    8 +-
 .../tasks/tasks-55.htm                             |    8 +-
 .../tasks/tasks-55bg.htm                           |    8 +-
 .../tasks/tasks-57.xhtml                           |    8 +-
 .../tasks/tasks-59.htm                             |    8 +-
 .../tasks/tasks-59ag.htm                           |    8 +-
 .../tasks/tasks-68.htm                             |    8 +-
 .../tasks/tasks-68b.htm                            |   18 +-
 .../tasks/tasks-68bg.htm                           |    4 +-
 .../tasks/tasks-81.htm                             |    6 +-
 .../tasks/tasks-81b.htm                            |    6 +-
 .../tasks/tasks-82.htm                             |    6 +-
 .../tasks/tasks-84.htm                             |    8 +-
 .../tasks/tasks-84b.htm                            |    8 +-
 .../tasks/tasks-87.htm                             |    6 +-
 .../tasks/tasks-87b.htm                            |    6 +-
 .../tasks/tasks-88.htm                             |    6 +-
 .../tasks/tasks-9.htm                              |    6 +-
 .../tasks/tasks-92.htm                             |   10 +-
 .../tasks/tasks-94.htm                             |    8 +-
 .../tasks/tasks-95.htm                             |    6 +-
 .../tasks/tasks-95a.htm                            |   10 +-
 .../tasks/tasks-96.htm                             |   10 +-
 .../tasks/tasks-96a.htm                            |    8 +-
 .../tasks/tasks-96b.htm                            |    4 +-
 .../tasks/tasks-97.htm                             |    6 +-
 .../tasks/tasks-9c.htm                             |    7 +-
 .../tasks/tasks-9d.htm                             |    6 +-
 .../tasks/tasks-9f.htm                             |    6 +-
 .../tasks/tasks-9i.htm                             |    6 +-
 .../tasks/tasks-9j.htm                             |    6 +-
 .../tasks/tasks-9k.htm                             |    6 +-
 .../tasks/tasks-9m.htm                             |    6 +-
 .../tasks/tasks-9n.htm                             |    6 +-
 .../tasks/tasks-ant-addtasksandtypes.htm           |    6 +-
 .../tasks/tasks-ant-classpath.htm                  |   18 +-
 .../tasks/tasks-ant-running.htm                    |    6 +-
 .../tasks/tasks-ant-version.htm                    |    8 +-
 .../tasks/tasks-cvs-16.htm                         |    6 +-
 .../tasks/tasks-cvs-passwords.htm                  |    6 +-
 .../tasks/tasks-cvs-project-set.htm                |    8 +-
 .../tasks/tasks-cvs-quickdiff.htm                  |    6 +-
 .../tasks/tasks-cvs-ssh2.htm                       |    8 +-
 .../tasks/tasks-cvs-watch.htm                      |    8 +-
 .../tasks/tasks-exttools-running.htm               |    8 +-
 .../tasks/tasks-importproject.htm                  |    8 +-
 .../tasks/tasks-team-1.htm                         |    6 +-
 .../tasks/timpandexp.htm                           |    8 +-
 .../tasks/tkeybindings.htm                         |    9 +-
 .../tasks/topenmode.htm                            |    8 +-
 .../tasks/ttoolbars.htm                            |    5 +-
 .../tasks/welcome.htm                              |    4 +-
 .../tips/images/separate_derived_encodings.png     |  Bin 0 -> 3675 bytes
 .../tips/platform_tips.html                        |   90 +-
 .../plugins/org.eclipse.platform.doc.user/toc.xml  |    8 +-
 .../topics_GettingStarted.xml                      |    8 +-
 .../topics_Reference.xml                           |    6 +-
 .../org.eclipse.platform.doc.user/topics_Tasks.xml |    4 +-
 .../org.eclipse.platform.doc.user/topics_Tips.xml  |   12 +
 .../topics_WhatsNew.xml                            |   12 +
 .../whatsNew/images/AIX.png                        |  Bin 0 -> 34286 bytes
 .../images/apply-patch-in-sync-view-preference.png |  Bin 18629 -> 0 bytes
 .../whatsNew/images/apply-patch-ws.png             |  Bin 20191 -> 0 bytes
 .../whatsNew/images/author.png                     |  Bin 0 -> 5780 bytes
 .../whatsNew/images/branch-column.png              |  Bin 0 -> 17634 bytes
 .../whatsNew/images/breakpoint-details.png         |  Bin 22941 -> 0 bytes
 .../whatsNew/images/commitWizardLogicalModels.png  |  Bin 23923 -> 0 bytes
 .../whatsNew/images/configure-branches.png         |  Bin 33587 -> 0 bytes
 .../whatsNew/images/default-ssh-dir.png            |  Bin 0 -> 10979 bytes
 .../whatsNew/images/default_style.css              |   21 +
 .../whatsNew/images/disableCapping.png             |  Bin 0 -> 8866 bytes
 .../whatsNew/images/dynamicPathVariables.png       |  Bin 33475 -> 0 bytes
 .../whatsNew/images/edit-button-in-property.png    |  Bin 14076 -> 0 bytes
 .../whatsNew/images/export-plugins.png             |  Bin 0 -> 126357 bytes
 .../whatsNew/images/expressions-columns.png        |  Bin 12470 -> 0 bytes
 .../whatsNew/images/file-attributes-ui.png         |  Bin 6307 -> 0 bytes
 .../whatsNew/images/file-system-import.png         |  Bin 43899 -> 0 bytes
 .../whatsNew/images/hide-fvb.png                   |  Bin 22580 -> 0 bytes
 .../whatsNew/images/hpux.png                       |  Bin 0 -> 27046 bytes
 .../whatsNew/images/import-plugins.png             |  Bin 0 -> 141215 bytes
 .../whatsNew/images/import-type-dialog.png         |  Bin 23236 -> 0 bytes
 .../whatsNew/images/import-zip.png                 |  Bin 18994 -> 0 bytes
 .../whatsNew/images/inaccessible-projects-page.png |  Bin 23233 -> 0 bytes
 .../whatsNew/images/install-history.png            |  Bin 0 -> 38657 bytes
 .../whatsNew/images/installhistory.png             |  Bin 18574 -> 0 bytes
 .../whatsNew/images/lightweight-refresh.png        |  Bin 0 -> 9104 bytes
 .../whatsNew/images/linkedResourcesPropPage.png    |  Bin 28183 -> 0 bytes
 .../whatsNew/images/localHistoryLimitSize.png      |  Bin 19024 -> 0 bytes
 .../whatsNew/images/mac-proxy-icon.png             |  Bin 0 -> 24372 bytes
 .../whatsNew/images/mac-window-menu.png            |  Bin 0 -> 55651 bytes
 .../images/matching-might-not-be-optimal.png       |  Bin 10552 -> 0 bytes
 .../whatsNew/images/open-hyperlink-menu-item.png   |  Bin 0 -> 2822 bytes
 .../whatsNew/images/open-hyperlink-popup.png       |  Bin 0 -> 4396 bytes
 .../whatsNew/images/open-in-compare-editor.png     |  Bin 26432 -> 0 bytes
 .../whatsNew/images/open-resource-boosting.png     |  Bin 16517 -> 0 bytes
 .../images/open-resource-path-relative.png         |  Bin 22075 -> 0 bytes
 .../whatsNew/images/open-resource-path.png         |  Bin 10423 -> 0 bytes
 .../whatsNew/images/open-with-context-menu.png     |  Bin 0 -> 6637 bytes
 .../whatsNew/images/p2-license.png                 |  Bin 118086 -> 0 bytes
 .../whatsNew/images/patch-options-in-sync-view.png |  Bin 18127 -> 0 bytes
 .../whatsNew/images/problems-view-icon.png         |  Bin 0 -> 6969 bytes
 .../whatsNew/images/quickaccess-bindings.png       |  Bin 5430 -> 0 bytes
 .../whatsNew/images/resize-popups-gtk.png          |  Bin 19306 -> 0 bytes
 .../whatsNew/images/resourceFilters.png            |  Bin 31550 -> 0 bytes
 .../whatsNew/images/save-dialog.png                |  Bin 5702 -> 0 bytes
 .../whatsNew/images/searchprocessorNN.png          |  Bin 0 -> 14269 bytes
 .../whatsNew/images/separate-derived-encodings.png |  Bin 0 -> 13681 bytes
 .../images/show-ruler-annotation-tooltip.png       |  Bin 4150 -> 0 bytes
 .../whatsNew/images/show-whitespace-characters.png |  Bin 0 -> 5982 bytes
 .../whatsNew/images/syncViewLinkWithEditor.png     |  Bin 10082 -> 0 bytes
 .../whatsNew/images/taskbarprogress.png            |  Bin 37451 -> 0 bytes
 .../whatsNew/images/taskitem-progress-overlay.png  |  Bin 0 -> 63374 bytes
 .../whatsNew/images/virtual-folder-properties.png  |  Bin 9541 -> 0 bytes
 .../whatsNew/images/virtual-folder.png             |  Bin 26743 -> 0 bytes
 .../whatsNew/images/visible-folded-annotations.png |  Bin 1503 -> 0 bytes
 .../whatsNew/images/webkitgtk.png                  |  Bin 54756 -> 0 bytes
 .../whatsNew/images/wizardstop.png                 |  Bin 16597 -> 0 bytes
 .../whatsNew/platform_whatsnew.html                |  608 +-
 .../EclipseSplash37_Indigo.psd                     |  Bin 0 -> 11169019 bytes
 .../org.eclipse.platform/META-INF/MANIFEST.MF      |    2 +-
 .../intro/whatsnewExtensionContent3.xml            |    4 +-
 .../plugins/org.eclipse.platform/plugin.properties |    4 +-
 eclipse/plugins/org.eclipse.platform/splash.bmp    |  Bin 403614 -> 403616 bytes
 .../plugins/org.eclipse.rcp/META-INF/MANIFEST.MF   |    2 +-
 eclipse/plugins/org.eclipse.rcp/about.properties   |    4 +-
 eclipse/plugins/org.eclipse.rcp/notice.html        |  191 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   67 +-
 .../org.eclipse.releng.tools/META-INF/MANIFEST.MF  |    2 +-
 .../plugins/org.eclipse.releng.tools/plugin.xml    |   45 +-
 .../releng/tools/AdvancedFixCopyrightAction.java   |   53 +-
 .../src/org/eclipse/releng/tools/BatFile.java      |    9 +-
 .../src/org/eclipse/releng/tools/BlockComment.java |    5 +-
 .../src/org/eclipse/releng/tools/CFile.java        |    7 +-
 .../eclipse/releng/tools/CVSCopyrightAdapter.java  |    4 +
 .../src/org/eclipse/releng/tools/CVSTagHelper.java |   32 +-
 .../eclipse/releng/tools/CompareLocalToMap.java    |   77 +-
 .../org/eclipse/releng/tools/CopyrightComment.java |    7 +-
 .../eclipse/releng/tools/FixCopyrightAction.java   |  427 --
 .../eclipse/releng/tools/IBMCopyrightComment.java  |   13 +-
 .../src/org/eclipse/releng/tools/JavaFile.java     |    7 +-
 .../org/eclipse/releng/tools/JavaScriptFile.java   |    7 +-
 .../src/org/eclipse/releng/tools/LoadMap.java      |   28 +-
 .../eclipse/releng/tools/MapContentDocument.java   |   20 +-
 .../src/org/eclipse/releng/tools/MapFile.java      |   59 +-
 .../src/org/eclipse/releng/tools/MapProject.java   |   50 +-
 .../releng/tools/MapProjectSelectionPage.java      |  122 +-
 .../src/org/eclipse/releng/tools/OrderedMap.java   |   15 +-
 .../eclipse/releng/tools/ProjectComparePage.java   |   49 +-
 .../eclipse/releng/tools/ProjectSelectionPage.java |   64 +-
 .../org/eclipse/releng/tools/PropertiesFile.java   |    7 +-
 .../src/org/eclipse/releng/tools/RelEngPlugin.java |   35 +-
 .../org/eclipse/releng/tools/ReleaseWizard.java    |   27 +-
 .../eclipse/releng/tools/ReplaceLocalFromMap.java  |   41 +-
 .../org/eclipse/releng/tools/ShellMakeFile.java    |    9 +-
 .../src/org/eclipse/releng/tools/SourceFile.java   |   32 +-
 .../src/org/eclipse/releng/tools/TagMap.java       |   30 +-
 .../src/org/eclipse/releng/tools/TagPage.java      |    4 +-
 .../src/org/eclipse/releng/tools/XmlFile.java      |    8 +-
 .../org/eclipse/releng/tools/messages.properties   |    4 +-
 .../tools/preferences/CopyrightPreferencePage.java |   31 +-
 .../preferences/MapProjectPreferencePage.java      |  103 +-
 .../preferences/RelEngPreferenceInitializer.java   |   10 +-
 .../plugins/org.eclipse.sdk/META-INF/MANIFEST.MF   |    2 +-
 eclipse/plugins/org.eclipse.sdk/about.properties   |    4 +-
 eclipse/plugins/org.eclipse.sdk/book.css           |    4 +-
 eclipse/plugins/org.eclipse.sdk/plugin.properties  |    2 +-
 .../org.eclipse.search/META-INF/MANIFEST.MF        |    3 +-
 .../icons/full/dlcl16/refresh.gif}                 |  Bin 211 -> 211 bytes
 .../icons/full/elcl16/refresh.gif                  |  Bin 327 -> 327 bytes
 .../eclipse/search/ui/ISearchPageContainer.java    |   21 +-
 .../org/eclipse/search/ui/ISearchQuery.java        |   18 +-
 .../search/ui/text/AbstractTextSearchViewPage.java |    4 +-
 .../search/ui/text/FileTextSearchScope.java        |   14 +-
 .../search/ui/text/TextSearchQueryProvider.java    |    2 +-
 .../internal/ui/OpenSearchPreferencesAction.java   |    8 +-
 .../search2/internal/ui/SearchAgainAction.java     |    5 +-
 .../eclipse/search2/internal/ui/SearchView.java    |   24 +-
 .../ui/text2/TextSearchQueryProviderRegistry.java  |    7 +-
 .../plugins/org.eclipse.search/plugin.properties   |    7 +-
 eclipse/plugins/org.eclipse.search/plugin.xml      |   12 +
 .../core/text/FileNamePatternSearchScope.java      |   15 +-
 .../internal/ui/RemovePotentialMatchesAction.java  |    6 +-
 .../search/internal/ui/RemoveResultAction.java     |    4 +-
 .../org/eclipse/search/internal/ui/ScopePart.java  |   18 +-
 .../eclipse/search/internal/ui/SearchDialog.java   |   62 +-
 .../search/internal/ui/SearchPageDescriptor.java   |    3 +-
 .../eclipse/search/internal/ui/SearchPlugin.java   |    4 +-
 .../search/internal/ui/SearchPluginImages.java     |    5 +-
 .../ui/text/DecoratingFileSearchLabelProvider.java |    7 +-
 .../search/internal/ui/text/FileSearchPage.java    |    6 +-
 .../search/internal/ui/text/ReplaceAction.java     |    9 +-
 .../internal/ui/text/ReplaceRefactoring.java       |  117 +-
 .../search/internal/ui/text/TextSearchPage.java    |   14 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.carbon.macosx/build.xml        |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../org.eclipse.swt.cocoa.macosx.x86_64/build.xml  |    2 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../plugins/org.eclipse.swt.cocoa.macosx/build.xml |    2 +-
 .../plugins/org.eclipse.swt.gtk.aix.ppc/.project   |   11 +
 .../META-INF/MANIFEST.MF                           |   19 +
 .../org.eclipse.swt.gtk.aix.ppc}/about.html        |    0
 .../about_files/IJG_README                         |    0
 .../about_files/about_cairo.html                   |    0
 .../about_files/lgpl-v21.txt                       |    0
 .../about_files/mpl-v11.txt                        |    0
 .../about_files/pixman-licenses.txt                |    0
 .../about_files/webkit-bsd.txt                     |    0
 .../build.properties                               |    0
 .../plugins/org.eclipse.swt.gtk.aix.ppc/build.xml  |   12 +
 .../fragment.properties                            |    0
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.aix.ppc64/build.xml        |    2 +-
 .../org.eclipse.swt.gtk.hpux.ia64_32/.project      |   17 +
 .../META-INF/MANIFEST.MF                           |   19 +
 .../org.eclipse.swt.gtk.hpux.ia64_32/about.html    |  262 +
 .../about_files/IJG_README                         |    0
 .../about_files/lgpl-v21.txt                       |    0
 .../about_files/mpl-v11.txt                        |    0
 .../about_files/pixman-licenses.txt                |    0
 .../build.properties                               |   11 +
 .../org.eclipse.swt.gtk.hpux.ia64_32/build.xml     |   12 +
 .../fragment.properties                            |   12 +
 .../plugins/org.eclipse.swt.gtk.linux.ppc/.project |   28 -
 .../META-INF/MANIFEST.MF                           |   19 -
 .../org.eclipse.swt.gtk.linux.ppc/about.html       |  261 -
 .../about_files/about_cairo.html                   |   48 -
 .../org.eclipse.swt.gtk.linux.ppc/build.xml        |   12 -
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.linux.ppc64/build.xml      |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.linux.s390/build.xml       |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.linux.s390x/build.xml      |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.linux.x86/build.xml        |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.linux.x86_64/build.xml     |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.solaris.sparc/build.xml    |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.gtk.solaris.x86/build.xml      |    2 +-
 eclipse/plugins/org.eclipse.swt.jmx/.classpath     |    7 -
 eclipse/plugins/org.eclipse.swt.jmx/.options       |    2 -
 eclipse/plugins/org.eclipse.swt.jmx/.project       |   28 -
 .../.settings/org.eclipse.jdt.core.prefs           |  309 -
 .../.settings/org.eclipse.jdt.ui.prefs             |    9 -
 .../org.eclipse.swt.jmx/META-INF/MANIFEST.MF       |   20 -
 eclipse/plugins/org.eclipse.swt.jmx/about.html     |   28 -
 .../plugins/org.eclipse.swt.jmx/build.properties   |   20 -
 .../plugins/org.eclipse.swt.jmx/icons/sleak.png    |  Bin 466 -> 0 bytes
 eclipse/plugins/org.eclipse.swt.jmx/plugin.xml     |   11 -
 .../org/eclipse/swt/jmx/internal/Activator.java    |   37 -
 .../jmx/internal/SleakContributionProvider.java    |  281 -
 .../eclipse/swt/jmx/internal/SleakMessages.java    |   37 -
 .../swt/jmx/internal/SleakMessages.properties      |   21 -
 .../plugins/org.eclipse.swt.motif.aix.ppc/.project |   28 -
 .../META-INF/MANIFEST.MF                           |   19 -
 .../org.eclipse.swt.motif.aix.ppc/about.html       |  152 -
 .../about_files/IJG_README                         |  385 -
 .../org.eclipse.swt.motif.aix.ppc/build.properties |   11 -
 .../org.eclipse.swt.motif.aix.ppc/build.xml        |   12 -
 .../fragment.properties                            |   12 -
 .../org.eclipse.swt.motif.hpux.ia64_32/.project    |   28 -
 .../META-INF/MANIFEST.MF                           |   18 -
 .../org.eclipse.swt.motif.hpux.ia64_32/about.html  |  139 -
 .../about_files/IJG_README                         |  385 -
 .../build.properties                               |   11 -
 .../org.eclipse.swt.motif.hpux.ia64_32/build.xml   |   12 -
 .../fragment.properties                            |   12 -
 .../org.eclipse.swt.motif.linux.x86/.classpath     |    8 -
 .../org.eclipse.swt.motif.linux.x86/.project       |   34 -
 .../META-INF/MANIFEST.MF                           |   19 -
 .../org.eclipse.swt.motif.linux.x86/about.html     |  265 -
 .../about_files/IJG_README                         |  385 -
 .../about_files/about_cairo.html                   |   48 -
 .../about_files/about_open_motif.html              |   38 -
 .../about_files/lgpl-v21.txt                       |  506 --
 .../about_files/mlpl-v10.html                      |  401 --
 .../about_files/mpl-v11.txt                        |  470 --
 .../about_files/pixman-licenses.txt                |   92 -
 .../build.properties                               |   11 -
 .../org.eclipse.swt.motif.linux.x86/build.xml      |   12 -
 .../fragment.properties                            |   12 -
 .../org.eclipse.swt.motif.solaris.sparc/.project   |   28 -
 .../META-INF/MANIFEST.MF                           |   19 -
 .../org.eclipse.swt.motif.solaris.sparc/about.html |  152 -
 .../about_files/IJG_README                         |  385 -
 .../build.properties                               |   11 -
 .../org.eclipse.swt.motif.solaris.sparc/build.xml  |   12 -
 .../fragment.properties                            |   12 -
 .../org.eclipse.swt.photon.qnx.x86/.project        |   28 -
 .../META-INF/MANIFEST.MF                           |   13 -
 .../org.eclipse.swt.photon.qnx.x86/about.html      |  152 -
 .../about_files/IJG_README                         |  385 -
 .../build.properties                               |   11 -
 .../org.eclipse.swt.photon.qnx.x86/build.xml       |   12 -
 .../fragment.properties                            |   12 -
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.win32.wce_ppc.arm/build.xml    |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.win32.win32.x86/build.xml      |    2 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.swt.win32.win32.x86_64/build.xml   |    2 +-
 eclipse/plugins/org.eclipse.swt/.classpath_carbon  |    1 +
 eclipse/plugins/org.eclipse.swt/.classpath_cocoa   |    1 +
 eclipse/plugins/org.eclipse.swt/.classpath_gtk     |    1 +
 eclipse/plugins/org.eclipse.swt/.classpath_motif   |    1 +
 eclipse/plugins/org.eclipse.swt/.classpath_win32   |    1 +
 .../plugins/org.eclipse.swt/.settings/.api_filters | 2058 ++----
 .../.settings/org.eclipse.jdt.core.prefs           |    1 +
 .../.settings/org.eclipse.pde.api.tools.prefs      |    9 +-
 .../cocoa/org/eclipse/swt/awt/SWT_AWT.java         |  436 +-
 .../org/eclipse/swt/accessibility/Accessible.java  |  107 +-
 .../org/eclipse/swt/accessibility/Accessible.java  |  196 +-
 .../swt/accessibility/AccessibleActionEvent.java   |    2 +-
 .../accessibility/AccessibleAttributeAdapter.java  |    6 +-
 .../accessibility/AccessibleAttributeEvent.java    |    2 +-
 .../accessibility/AccessibleAttributeListener.java |    6 +-
 .../AccessibleEditableTextAdapter.java             |  107 +
 .../accessibility/AccessibleEditableTextEvent.java |   90 +
 .../AccessibleEditableTextListener.java            |  110 +
 .../accessibility/AccessibleHyperlinkEvent.java    |    2 +-
 .../accessibility/AccessibleTableCellEvent.java    |    2 +-
 .../swt/accessibility/AccessibleTableEvent.java    |    2 +-
 .../AccessibleTextAttributeEvent.java              |   64 +-
 .../AccessibleTextExtendedListener.java            |    4 +-
 .../swt/accessibility/AccessibleValueEvent.java    |    2 +-
 .../org/eclipse/swt/accessibility/Accessible.java  |  100 +-
 .../org/eclipse/swt/accessibility/Accessible.java  |  107 +-
 .../swt/accessibility/AccessibleFactory.java       |   55 +-
 .../swt/accessibility/AccessibleObject.java        |  341 +
 .../org/eclipse/swt/accessibility/Accessible.java  |  530 +-
 .../org/eclipse/swt/browser/BrowserFactory.java    |   24 +
 .../carbon/org/eclipse/swt/browser/Safari.java     | 2204 ------
 .../org/eclipse/swt/browser/BrowserFactory.java    |   24 +
 .../cocoa/org/eclipse/swt/browser/Safari.java      | 1786 -----
 .../common/org/eclipse/swt/browser/Browser.java    |   56 +-
 .../org/eclipse/swt/browser/BrowserFunction.java   |   19 +-
 .../common/org/eclipse/swt/browser/WebBrowser.java |   16 +-
 .../org/eclipse/swt/browser/BrowserFactory.java    |   22 +
 .../forms/org/eclipse/swt/browser/IE.java          |    4 +-
 .../org/eclipse/swt/browser/BrowserFactory.java    |   41 +
 .../org/eclipse/swt/browser/BrowserFactory.java    |   20 +
 .../org/eclipse/swt/browser/BrowserFactory.java    |   22 +
 .../photon/org/eclipse/swt/browser/Voyager.java    |    4 +-
 .../qt/org/eclipse/swt/browser/QtWebkit.java       |  201 +
 .../org/eclipse/swt/browser/BrowserFactory.java    |   45 +
 .../win32/org/eclipse/swt/browser/IE.java          |  101 +-
 .../win32/org/eclipse/swt/browser/WebSite.java     |   53 +-
 .../org/eclipse/swt/browser/BrowserFactory.java    |   22 +
 .../wpf/org/eclipse/swt/browser/IE.java            |    4 +-
 .../common/org/eclipse/swt/custom/CBanner.java     |    5 +-
 .../common/org/eclipse/swt/custom/CCombo.java      |   51 +-
 .../common/org/eclipse/swt/custom/CTabFolder.java  |   35 +-
 .../org/eclipse/swt/custom/CTabFolderRenderer.java |   69 +-
 .../common/org/eclipse/swt/custom/PopupList.java   |    7 +-
 .../common/org/eclipse/swt/custom/SashForm.java    |   22 +-
 .../common/org/eclipse/swt/custom/StyledText.java  |  143 +-
 .../org/eclipse/swt/custom/StyledTextRenderer.java |    3 +-
 .../common/org/eclipse/swt/custom/TableEditor.java |    9 +-
 .../carbon/org/eclipse/swt/dnd/DragSource.java     |    3 +-
 .../carbon/org/eclipse/swt/dnd/DropTarget.java     |    2 +-
 .../carbon/org/eclipse/swt/dnd/HTMLTransfer.java   |    2 +-
 .../carbon/org/eclipse/swt/dnd/TextTransfer.java   |    2 +-
 .../cocoa/org/eclipse/swt/dnd/DropTarget.java      |   27 +-
 .../org/eclipse/swt/dnd/TableDropTargetEffect.java |   17 +-
 .../org/eclipse/swt/dnd/TreeDropTargetEffect.java  |   17 +-
 .../emulated/org/eclipse/swt/dnd/Clipboard.java    |   78 +-
 .../gtk/org/eclipse/swt/dnd/Clipboard.java         |   30 +-
 .../gtk/org/eclipse/swt/dnd/ClipboardProxy.java    |   24 +-
 .../qt/org/eclipse/swt/dnd/ByteArrayTransfer.java  |  201 +
 .../org/eclipse/swt/dnd/Clipboard.java             |    0
 .../qt/org/eclipse/swt/dnd/DragSource.java         |  593 ++
 .../qt/org/eclipse/swt/dnd/DropTarget.java         |  638 ++
 .../qt/org/eclipse/swt/dnd/FileTransfer.java       |  145 +
 .../org/eclipse/swt/dnd/HTMLTransfer.java          |    0
 .../org/eclipse/swt/dnd/ImageTransfer.java         |    0
 .../org/eclipse/swt/dnd/RTFTransfer.java           |    0
 .../org/eclipse/swt/dnd/TableDragSourceEffect.java |    0
 .../org/eclipse/swt/dnd/TableDropTargetEffect.java |    0
 .../qt/org/eclipse/swt/dnd/TextTransfer.java       |  106 +
 .../qt/org/eclipse/swt/dnd/Transfer.java           |  163 +
 .../qt/org/eclipse/swt/dnd/TransferData.java       |   87 +
 .../org/eclipse/swt/dnd/TreeDragSourceEffect.java  |    0
 .../org/eclipse/swt/dnd/TreeDropTargetEffect.java  |  129 +
 .../org/eclipse/swt/dnd/URLTransfer.java           |    0
 .../org/eclipse/swt/browser/MozillaDelegate.java   |    4 +-
 .../org/eclipse/swt/browser/MozillaDelegate.java   |    4 +-
 .../common/library/xpcom_custom.cpp                |    2 +-
 .../common/library/xpcom_custom.h                  |    2 +-
 .../common/library/xpcominit.cpp                   |   24 +-
 .../common/library/xpcominit_stats.cpp             |    7 +-
 .../common/library/xpcominit_stats.h               |    3 +-
 .../common/library/xpcominit_structs.cpp           |   36 +-
 .../common/library/xpcominit_structs.h             |   14 +-
 .../common/org/eclipse/swt/browser/External.java   |   44 +-
 .../common/org/eclipse/swt/browser/Mozilla.java    |  450 +-
 .../org/eclipse/swt/internal/mozilla/XPCOM.java    |    2 +-
 .../swt/internal/mozilla/init/GREProperty.java     |   37 +
 .../swt/internal/mozilla/init/GREVersionRange.java |   35 +-
 .../swt/internal/mozilla/init/XPCOMInit.java       |    9 +-
 .../internal/mozilla/nsDynamicFunctionLoad.java    |   35 +-
 .../org/eclipse/swt/internal/mozilla/nsID.java     |   21 +-
 .../org/eclipse/swt/browser/MozillaDelegate.java   |    4 +-
 .../org/eclipse/swt/browser/MozillaDelegate.java   |    4 +-
 .../org/eclipse/swt/browser/MozillaDelegate.java   |    4 +-
 .../org/eclipse/swt/ole/win32/OleAutomation.java   |    5 +-
 .../win32/org/eclipse/swt/ole/win32/OleFrame.java  |    2 +-
 .../win32/org/eclipse/swt/ole/win32/Variant.java   |   16 +-
 .../Eclipse SWT PI/cairo/library/cairo.c           |    2 +-
 .../Eclipse SWT PI/cairo/library/cairo.h           |    2 +-
 .../Eclipse SWT PI/cairo/library/cairo_custom.h    |    2 +-
 .../Eclipse SWT PI/cairo/library/cairo_stats.c     |    2 +-
 .../Eclipse SWT PI/cairo/library/cairo_stats.h     |    2 +-
 .../Eclipse SWT PI/cairo/library/cairo_structs.c   |    2 +-
 .../Eclipse SWT PI/cairo/library/cairo_structs.h   |    2 +-
 .../Eclipse SWT PI/carbon/library/build.sh         |    4 +-
 .../Eclipse SWT PI/carbon/library/cocoa_custom.c   |   32 +-
 .../Eclipse SWT PI/carbon/library/make_macosx.mak  |    2 +-
 .../Eclipse SWT PI/carbon/library/os.c             |   34 +-
 .../Eclipse SWT PI/carbon/library/os.h             |    7 +-
 .../Eclipse SWT PI/carbon/library/os_custom.h      |    3 +-
 .../Eclipse SWT PI/carbon/library/os_stats.c       |    8 +-
 .../Eclipse SWT PI/carbon/library/os_stats.h       |    4 +-
 .../carbon/org/eclipse/swt/internal/carbon/OS.java |   14 +-
 .../org/eclipse/swt/internal/cocoa/Cocoa.java      |    4 +-
 .../Eclipse SWT PI/cocoa/library/make_macosx.mak   |    6 +-
 .../Eclipse SWT PI/cocoa/library/os.c              | 1006 +++-
 .../Eclipse SWT PI/cocoa/library/os.h              |    9 +-
 .../Eclipse SWT PI/cocoa/library/os_custom.c       |   29 +-
 .../Eclipse SWT PI/cocoa/library/os_custom.h       |   17 +-
 .../Eclipse SWT PI/cocoa/library/os_stats.c        |   92 +-
 .../Eclipse SWT PI/cocoa/library/os_stats.h        |   88 +-
 .../Eclipse SWT PI/cocoa/library/os_structs.c      |   36 +-
 .../Eclipse SWT PI/cocoa/library/os_structs.h      |   14 +-
 .../internal/cocoa/AppKitFull.bridgesupport.extras |  360 +-
 .../cocoa/CoreGraphicsFull.bridgesupport.extras    |   59 +-
 .../cocoa/FoundationFull.bridgesupport.extras      |   34 +
 .../eclipse/swt/internal/cocoa/NSApplication.java  |   18 +
 .../swt/internal/cocoa/NSAttributedString.java     |    8 +-
 .../org/eclipse/swt/internal/cocoa/NSBundle.java   |    7 +-
 .../eclipse/swt/internal/cocoa/NSButtonCell.java   |   12 +-
 .../org/eclipse/swt/internal/cocoa/NSCell.java     |   10 +-
 .../org/eclipse/swt/internal/cocoa/NSColor.java    |   13 +-
 .../eclipse/swt/internal/cocoa/NSColorPanel.java   |    6 +-
 .../eclipse/swt/internal/cocoa/NSColorSpace.java   |   10 +-
 .../eclipse/swt/internal/cocoa/NSDatePicker.java   |   10 +-
 .../org/eclipse/swt/internal/cocoa/NSEvent.java    |   15 +-
 .../eclipse/swt/internal/cocoa/NSFontPanel.java    |    6 +-
 .../org/eclipse/swt/internal/cocoa/NSImage.java    |   11 +-
 .../org/eclipse/swt/internal/cocoa/NSIndexSet.java |   12 +-
 .../org/eclipse/swt/internal/cocoa/NSLocale.java   |   37 +
 .../org/eclipse/swt/internal/cocoa/NSMenu.java     |    7 +-
 .../org/eclipse/swt/internal/cocoa/NSMenuItem.java |   23 +-
 .../swt/internal/cocoa/NSMutableIndexSet.java      |   11 +-
 .../org/eclipse/swt/internal/cocoa/NSObject.java   |   20 +
 .../eclipse/swt/internal/cocoa/NSOpenPanel.java    |    6 +-
 .../org/eclipse/swt/internal/cocoa/NSPanel.java    |   14 +-
 .../eclipse/swt/internal/cocoa/NSPrintInfo.java    |   27 +-
 .../eclipse/swt/internal/cocoa/NSResponder.java    |   51 +-
 .../eclipse/swt/internal/cocoa/NSSavePanel.java    |    6 +-
 .../eclipse/swt/internal/cocoa/NSScrollView.java   |    6 +-
 .../org/eclipse/swt/internal/cocoa/NSSet.java      |    7 +-
 .../eclipse/swt/internal/cocoa/NSTableView.java    |    6 +-
 .../org/eclipse/swt/internal/cocoa/NSToolbar.java  |   10 +-
 .../eclipse/swt/internal/cocoa/NSToolbarItem.java  |    6 +-
 .../org/eclipse/swt/internal/cocoa/NSTouch.java    |   52 +
 .../org/eclipse/swt/internal/cocoa/NSView.java     |   26 +-
 .../org/eclipse/swt/internal/cocoa/NSWindow.java   |   30 +-
 .../cocoa/org/eclipse/swt/internal/cocoa/OS.java   |  398 +-
 .../eclipse/swt/internal/cocoa/PMResolution.java   |   16 +
 .../swt/internal/cocoa/SFCertificatePanel.java     |    4 +
 .../internal/cocoa/SFCertificateTrustPanel.java    |    4 +
 .../org/eclipse/swt/internal/cocoa/SWTPanel.java   |   15 +
 .../cocoa/org/eclipse/swt/internal/cocoa/id.java   |   10 +-
 .../common/org/eclipse/swt/internal/LONG.java      |    4 +-
 .../org/eclipse/swt/internal/Library.java          |    4 +-
 .../org/eclipse/swt/internal/Library.java          |   38 +-
 .../Eclipse SWT PI/gtk/library/atk.c               |   66 +
 .../Eclipse SWT PI/gtk/library/atk_stats.c         |   16 +-
 .../Eclipse SWT PI/gtk/library/atk_stats.h         |   12 +
 .../Eclipse SWT PI/gtk/library/atk_structs.c       |   49 +
 .../Eclipse SWT PI/gtk/library/atk_structs.h       |   12 +
 .../Eclipse SWT PI/gtk/library/build.sh            |   18 +-
 .../Eclipse SWT PI/gtk/library/make_aix.mak        |    2 +-
 .../Eclipse SWT PI/gtk/library/make_hpux.mak       |  200 +
 .../Eclipse SWT PI/gtk/library/make_linux.mak      |    6 +-
 .../Eclipse SWT PI/gtk/library/make_solaris.mak    |    6 +-
 .../Eclipse SWT PI/gtk/library/os.c                |  362 +-
 .../Eclipse SWT PI/gtk/library/os_custom.c         |   71 +-
 .../Eclipse SWT PI/gtk/library/os_custom.h         |   20 +-
 .../Eclipse SWT PI/gtk/library/os_stats.c          |   39 +-
 .../Eclipse SWT PI/gtk/library/os_stats.h          |   35 +-
 .../gtk/org/eclipse/swt/internal/Lock.java         |    2 +-
 .../swt/internal/accessibility/gtk/ATK.java        |   13 +
 .../accessibility/gtk/AtkEditableTextIface.java    |   32 +
 .../gtk/org/eclipse/swt/internal/gtk/OS.java       |  252 +-
 .../motif/library/make_hpux_ia64_32.mak            |    2 +-
 .../motif/org/eclipse/swt/internal/motif/OS.java   |    1 +
 .../Eclipse SWT PI/win32/library/com.c             |  304 +-
 .../Eclipse SWT PI/win32/library/com.h             |    9 +-
 .../Eclipse SWT PI/win32/library/com_stats.c       |   62 +-
 .../Eclipse SWT PI/win32/library/com_stats.h       |   58 +-
 .../Eclipse SWT PI/win32/library/com_structs.c     |    2 +-
 .../Eclipse SWT PI/win32/library/com_structs.h     |    2 +-
 .../Eclipse SWT PI/win32/library/gdip_custom.cpp   |   24 +-
 .../Eclipse SWT PI/win32/library/make_win32.mak    |   41 +-
 .../Eclipse SWT PI/win32/library/os.c              | 1086 +++-
 .../Eclipse SWT PI/win32/library/os.h              |  165 +-
 .../Eclipse SWT PI/win32/library/os_custom.h       |   12 +-
 .../Eclipse SWT PI/win32/library/os_stats.c        |  124 +-
 .../Eclipse SWT PI/win32/library/os_stats.h        |  120 +-
 .../Eclipse SWT PI/win32/library/os_structs.c      |  633 ++-
 .../Eclipse SWT PI/win32/library/os_structs.h      |  158 +-
 .../Eclipse SWT PI/win32/library/swt.rc            |    4 +-
 .../Eclipse SWT PI/win32/library/swt_gdip.rc       |    4 +-
 .../org/eclipse/swt/internal/ole/win32/COM.java    |   26 +-
 .../org/eclipse/swt/internal/ole/win32/GUID.java   |   22 +-
 .../swt/internal/ole/win32/IPropertyBag.java       |   24 +
 .../eclipse/swt/internal/win32/CERT_CONTEXT.java   |   25 +
 .../org/eclipse/swt/internal/win32/CERT_INFO.java  |   30 +
 .../eclipse/swt/internal/win32/CERT_NAME_BLOB.java |   20 +
 .../swt/internal/win32/CERT_PUBLIC_KEY_INFO.java   |   19 +
 .../internal/win32/CRYPT_ALGORITHM_IDENTIFIER.java |   20 +
 .../eclipse/swt/internal/win32/CRYPT_BIT_BLOB.java |   21 +
 .../swt/internal/win32/CRYPT_INTEGER_BLOB.java     |   20 +
 .../swt/internal/win32/CRYPT_OBJID_BLOB.java       |   20 +
 .../org/eclipse/swt/internal/win32/FLICK_DATA.java |   26 +
 .../eclipse/swt/internal/win32/FLICK_POINT.java    |   17 +
 .../eclipse/swt/internal/win32/GESTURECONFIG.java  |   18 +
 .../eclipse/swt/internal/win32/GESTUREINFO.java    |   29 +
 .../win32/org/eclipse/swt/internal/win32/OS.java   |  276 +-
 .../org/eclipse/swt/internal/win32/TOUCHINPUT.java |   26 +
 .../org/eclipse/swt/printing/PrintDialog.java      |    3 +-
 .../carbon/org/eclipse/swt/printing/Printer.java   |    4 +-
 .../org/eclipse/swt/printing/PrintDialog.java      |   32 +-
 .../cocoa/org/eclipse/swt/printing/Printer.java    |   48 +-
 .../org/eclipse/swt/printing/PrinterData.java      |   66 +-
 .../org/eclipse/swt/printing/PrintDialog.java      |    3 +-
 .../emulated/org/eclipse/swt/printing/Printer.java |    4 +-
 .../gtk/org/eclipse/swt/printing/PrintDialog.java  |   76 +-
 .../gtk/org/eclipse/swt/printing/Printer.java      |  203 +-
 .../org/eclipse/swt/printing/PrintDialog.java      |    3 +-
 .../motif/org/eclipse/swt/printing/Printer.java    |    4 +-
 .../org/eclipse/swt/printing/PrintDialog.java      |    3 +-
 .../photon/org/eclipse/swt/printing/Printer.java   |    4 +-
 .../org/eclipse/swt/printing/PrintDialog.java      |  109 +-
 .../win32/org/eclipse/swt/printing/Printer.java    |   21 +-
 .../wpf/org/eclipse/swt/printing/PrintDialog.java  |    3 +-
 .../wpf/org/eclipse/swt/printing/Printer.java      |    4 +-
 .../cocoa/org/eclipse/swt/program/Program.java     |   15 +-
 .../Eclipse SWT Program/gnome/library/gnome.h      |    2 +-
 .../gtk/org/eclipse/swt/program/Program.java       |   67 +-
 .../eclipse/swt/internal/theme/ButtonDrawData.java |   12 +-
 .../eclipse/swt/internal/theme/ComboDrawData.java  |   13 +-
 .../gtk/org/eclipse/swt/internal/theme/Theme.java  |   10 +-
 .../carbon/org/eclipse/swt/browser/WebKit.java     | 2205 ++++++
 .../cocoa/org/eclipse/swt/browser/WebKit.java      | 1803 +++++
 .../Eclipse SWT WebKit/gtk/library/webkitgtk.h     |    7 +-
 .../gtk/org/eclipse/swt/browser/WebKit.java        |  265 +-
 .../org/eclipse/swt/internal/webkit/WebKitGTK.java |    3 +-
 .../Eclipse SWT WebKit/win32/library/swt_webkit.rc |   45 +
 .../win32/library/webkit_win32.cpp                 |  794 +++
 .../win32/library/webkit_win32.h                   |   26 +
 .../win32/library/webkit_win32_custom.cpp          |  103 +
 .../win32/library/webkit_win32_custom.h            |   16 +
 .../win32/library/webkit_win32_stats.cpp           |  107 +
 .../win32/library/webkit_win32_stats.h             |   93 +
 .../win32/library/webkit_win32_structs.cpp         |   97 +
 .../win32/library/webkit_win32_structs.h           |   29 +
 .../eclipse/swt/browser/WebDownloadDelegate.java   |  249 +
 .../eclipse/swt/browser/WebFrameLoadDelegate.java  |  751 ++
 .../win32/org/eclipse/swt/browser/WebKit.java      | 1310 ++++
 .../org/eclipse/swt/browser/WebPolicyDelegate.java |  207 +
 .../swt/browser/WebResourceLoadDelegate.java       |  369 +
 .../org/eclipse/swt/browser/WebUIDelegate.java     |  657 ++
 .../swt/internal/webkit/IWebCookieManager.java     |   26 +
 .../swt/internal/webkit/IWebDataSource.java        |   38 +
 .../webkit/IWebDocumentRepresentation.java         |   26 +
 .../eclipse/swt/internal/webkit/IWebDownload.java  |   34 +
 .../org/eclipse/swt/internal/webkit/IWebError.java |   46 +
 .../swt/internal/webkit/IWebErrorPrivate.java      |   26 +
 .../org/eclipse/swt/internal/webkit/IWebFrame.java |   38 +
 .../swt/internal/webkit/IWebFramePrivate.java      |   34 +
 .../eclipse/swt/internal/webkit/IWebIBActions.java |   38 +
 .../swt/internal/webkit/IWebMutableURLRequest.java |   46 +
 .../webkit/IWebMutableURLRequestPrivate.java       |   30 +
 .../webkit/IWebOpenPanelResultListener.java        |   29 +
 .../webkit/IWebPolicyDecisionListener.java         |   34 +
 .../swt/internal/webkit/IWebPreferences.java       |   46 +
 .../webkit/IWebURLAuthenticationChallenge.java     |   38 +
 .../IWebURLAuthenticationChallengeSender.java      |   30 +
 .../swt/internal/webkit/IWebURLCredential.java     |   38 +
 .../internal/webkit/IWebURLProtectionSpace.java    |   34 +
 .../swt/internal/webkit/IWebURLRequest.java        |   38 +
 .../swt/internal/webkit/IWebURLResponse.java       |   30 +
 .../org/eclipse/swt/internal/webkit/IWebView.java  |   87 +
 .../swt/internal/webkit/IWebViewPrivate.java       |   34 +
 .../swt/internal/webkit/JSClassDefinition.java     |   51 +
 .../eclipse/swt/internal/webkit/WebKit_win32.java  |  366 +
 .../carbon/org/eclipse/swt/graphics/FontData.java  |    2 +-
 .../carbon/org/eclipse/swt/widgets/Button.java     |    5 +-
 .../carbon/org/eclipse/swt/widgets/Caret.java      |    3 +-
 .../org/eclipse/swt/widgets/ColorDialog.java       |    3 +-
 .../carbon/org/eclipse/swt/widgets/Combo.java      |    4 +-
 .../carbon/org/eclipse/swt/widgets/Composite.java  |   12 +-
 .../carbon/org/eclipse/swt/widgets/Control.java    |  213 +-
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |    5 +-
 .../carbon/org/eclipse/swt/widgets/Display.java    |  106 +-
 .../carbon/org/eclipse/swt/widgets/FileDialog.java |    3 +-
 .../carbon/org/eclipse/swt/widgets/FontDialog.java |    3 +-
 .../carbon/org/eclipse/swt/widgets/Label.java      |    3 +-
 .../carbon/org/eclipse/swt/widgets/Menu.java       |   40 +-
 .../carbon/org/eclipse/swt/widgets/MenuItem.java   |   42 +-
 .../carbon/org/eclipse/swt/widgets/MessageBox.java |   25 +-
 .../org/eclipse/swt/widgets/ProgressBar.java       |    3 +-
 .../carbon/org/eclipse/swt/widgets/Sash.java       |    3 +-
 .../carbon/org/eclipse/swt/widgets/Scale.java      |    3 +-
 .../carbon/org/eclipse/swt/widgets/Scrollable.java |   25 +-
 .../carbon/org/eclipse/swt/widgets/Shell.java      |   36 +-
 .../carbon/org/eclipse/swt/widgets/Table.java      |   15 +-
 .../carbon/org/eclipse/swt/widgets/Text.java       |  112 +-
 .../carbon/org/eclipse/swt/widgets/ToolItem.java   |   11 +-
 .../carbon/org/eclipse/swt/widgets/ToolTip.java    |    3 +-
 .../carbon/org/eclipse/swt/widgets/Tracker.java    |    2 +-
 .../carbon/org/eclipse/swt/widgets/TrayItem.java   |    9 +-
 .../carbon/org/eclipse/swt/widgets/Tree.java       |   15 +-
 .../carbon/org/eclipse/swt/widgets/Widget.java     |   14 +-
 .../cocoa/org/eclipse/swt/graphics/Cursor.java     |    4 +-
 .../cocoa/org/eclipse/swt/graphics/Font.java       |    9 +-
 .../cocoa/org/eclipse/swt/graphics/FontData.java   |    2 +-
 .../org/eclipse/swt/graphics/FontMetrics.java      |   19 +-
 .../cocoa/org/eclipse/swt/graphics/GC.java         |   45 +-
 .../cocoa/org/eclipse/swt/graphics/Image.java      |    2 +-
 .../cocoa/org/eclipse/swt/graphics/Path.java       |   26 +-
 .../cocoa/org/eclipse/swt/graphics/Pattern.java    |    2 +-
 .../cocoa/org/eclipse/swt/graphics/TextLayout.java |  123 +-
 .../cocoa/org/eclipse/swt/widgets/Button.java      |  183 +-
 .../cocoa/org/eclipse/swt/widgets/Canvas.java      |  113 +-
 .../cocoa/org/eclipse/swt/widgets/Caret.java       |    3 +-
 .../cocoa/org/eclipse/swt/widgets/ColorDialog.java |   13 +-
 .../cocoa/org/eclipse/swt/widgets/Combo.java       |    8 +-
 .../cocoa/org/eclipse/swt/widgets/Composite.java   |   89 +-
 .../cocoa/org/eclipse/swt/widgets/Control.java     |  605 ++-
 .../cocoa/org/eclipse/swt/widgets/DateTime.java    |  230 +-
 .../cocoa/org/eclipse/swt/widgets/Decorations.java |    9 +-
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |   15 +-
 .../cocoa/org/eclipse/swt/widgets/Display.java     |  977 ++-
 .../cocoa/org/eclipse/swt/widgets/FileDialog.java  |    9 +-
 .../cocoa/org/eclipse/swt/widgets/FontDialog.java  |   12 +-
 .../cocoa/org/eclipse/swt/widgets/Group.java       |    4 +-
 .../cocoa/org/eclipse/swt/widgets/IME.java         |   22 +-
 .../cocoa/org/eclipse/swt/widgets/Label.java       |    9 +-
 .../cocoa/org/eclipse/swt/widgets/Link.java        |   50 +-
 .../cocoa/org/eclipse/swt/widgets/List.java        |   69 +-
 .../cocoa/org/eclipse/swt/widgets/Menu.java        |  195 +-
 .../cocoa/org/eclipse/swt/widgets/MenuItem.java    |   60 +-
 .../cocoa/org/eclipse/swt/widgets/MessageBox.java  |    3 +-
 .../cocoa/org/eclipse/swt/widgets/ProgressBar.java |    3 +-
 .../cocoa/org/eclipse/swt/widgets/Sash.java        |    3 +-
 .../cocoa/org/eclipse/swt/widgets/Scale.java       |    3 +-
 .../cocoa/org/eclipse/swt/widgets/ScrollBar.java   |    4 +-
 .../cocoa/org/eclipse/swt/widgets/Scrollable.java  |    2 +-
 .../cocoa/org/eclipse/swt/widgets/Shell.java       |  296 +-
 .../cocoa/org/eclipse/swt/widgets/Spinner.java     |    4 +-
 .../cocoa/org/eclipse/swt/widgets/Table.java       |  300 +-
 .../cocoa/org/eclipse/swt/widgets/TableItem.java   |    5 +-
 .../cocoa/org/eclipse/swt/widgets/TaskItem.java    |    2 +-
 .../cocoa/org/eclipse/swt/widgets/Text.java        |  227 +-
 .../cocoa/org/eclipse/swt/widgets/ToolBar.java     |  251 +-
 .../cocoa/org/eclipse/swt/widgets/ToolItem.java    |  243 +-
 .../cocoa/org/eclipse/swt/widgets/Tracker.java     |    2 +-
 .../cocoa/org/eclipse/swt/widgets/Tree.java        |  278 +-
 .../cocoa/org/eclipse/swt/widgets/TreeItem.java    |    3 +-
 .../cocoa/org/eclipse/swt/widgets/Widget.java      |  243 +-
 .../Eclipse SWT/common/library/callback.c          |   16 -
 .../Eclipse SWT/common/library/make_common.mak     |    6 +-
 .../Eclipse SWT/common/library/swt.h               |    2 +-
 .../Eclipse SWT/common/org/eclipse/swt/SWT.java    |  203 +-
 .../org/eclipse/swt/events/GestureEvent.java       |  158 +
 .../org/eclipse/swt/events/GestureListener.java    |   42 +
 .../common/org/eclipse/swt/events/TouchEvent.java  |   93 +
 .../org/eclipse/swt/events/TouchListener.java      |   41 +
 .../org/eclipse/swt/graphics/LineAttributes.java   |   59 +-
 .../common/org/eclipse/swt/graphics/TextStyle.java |    8 +-
 .../eclipse/swt/internal/image/JPEGDecoder.java    |   18 +-
 .../common/org/eclipse/swt/layout/GridData.java    |    2 +-
 .../common/org/eclipse/swt/layout/GridLayout.java  |    5 +-
 .../common/org/eclipse/swt/layout/package.html     |    2 +-
 .../common/org/eclipse/swt/widgets/Event.java      |   41 +-
 .../org/eclipse/swt/widgets/Synchronizer.java      |    5 +-
 .../common/org/eclipse/swt/widgets/Touch.java      |  100 +
 .../org/eclipse/swt/widgets/TouchSource.java       |   89 +
 .../org/eclipse/swt/widgets/TypedListener.java     |   12 +-
 .../org.eclipse.swt/Eclipse SWT/common/version.txt |    2 +-
 .../eclipse/swt/internal/SWTMessages.properties    |   17 +-
 .../swt/internal/SWTMessages_ar._properties        |    9 +-
 .../swt/internal/SWTMessages_bg._properties        |    2 +
 .../swt/internal/SWTMessages_cs._properties        |    9 +-
 .../swt/internal/SWTMessages_da._properties        |    9 +-
 .../swt/internal/SWTMessages_de._properties        |   11 +-
 .../swt/internal/SWTMessages_el._properties        |    9 +-
 .../swt/internal/SWTMessages_es._properties        |    8 +
 .../swt/internal/SWTMessages_et._properties        |    3 +
 .../swt/internal/SWTMessages_fa._properties        |   54 +
 .../swt/internal/SWTMessages_fi._properties        |    9 +-
 .../swt/internal/SWTMessages_fr._properties        |   11 +-
 .../swt/internal/SWTMessages_hi._properties        |    2 +
 .../swt/internal/SWTMessages_hu._properties        |    9 +-
 .../swt/internal/SWTMessages_it._properties        |    9 +-
 .../swt/internal/SWTMessages_iw._properties        |   11 +-
 .../swt/internal/SWTMessages_ja._properties        |   11 +-
 .../swt/internal/SWTMessages_ko._properties        |   11 +-
 .../swt/internal/SWTMessages_mn._properties        |    3 +-
 .../swt/internal/SWTMessages_nl._properties        |    9 +-
 .../swt/internal/SWTMessages_no._properties        |    9 +-
 .../swt/internal/SWTMessages_pl._properties        |    9 +-
 .../swt/internal/SWTMessages_pt._properties        |    9 +-
 .../swt/internal/SWTMessages_pt_BR._properties     |    9 +-
 .../swt/internal/SWTMessages_ro._properties        |    7 +-
 .../swt/internal/SWTMessages_ru._properties        |    8 +
 .../swt/internal/SWTMessages_sl._properties        |   65 +
 .../swt/internal/SWTMessages_sv._properties        |    9 +-
 .../swt/internal/SWTMessages_tr._properties        |    7 +
 .../swt/internal/SWTMessages_uk._properties        |    3 +
 .../swt/internal/SWTMessages_zh._properties        |    9 +
 .../swt/internal/SWTMessages_zh_TW._properties     |   11 +-
 .../coolbar/org/eclipse/swt/widgets/CoolBar.java   |   15 +-
 .../tooltip/org/eclipse/swt/widgets/ToolTip.java   |    3 +-
 .../org/eclipse/swt/widgets/TableItem.java         |    8 +-
 .../org/eclipse/swt/widgets/TreeItem.java          |    6 +-
 .../gtk/org/eclipse/swt/graphics/Device.java       |   23 +-
 .../gtk/org/eclipse/swt/graphics/Font.java         |   12 +-
 .../gtk/org/eclipse/swt/graphics/FontData.java     |    2 +-
 .../gtk/org/eclipse/swt/graphics/GC.java           |    7 +-
 .../gtk/org/eclipse/swt/graphics/Image.java        |    2 +-
 .../gtk/org/eclipse/swt/graphics/TextLayout.java   |  102 +-
 .../gtk/org/eclipse/swt/widgets/Button.java        |  177 +-
 .../gtk/org/eclipse/swt/widgets/Caret.java         |    3 +-
 .../gtk/org/eclipse/swt/widgets/ColorDialog.java   |   12 +-
 .../gtk/org/eclipse/swt/widgets/Combo.java         |  111 +-
 .../gtk/org/eclipse/swt/widgets/Composite.java     |   29 +-
 .../gtk/org/eclipse/swt/widgets/Control.java       |  268 +-
 .../gtk/org/eclipse/swt/widgets/DateTime.java      |  885 ++-
 .../gtk/org/eclipse/swt/widgets/Decorations.java   |    7 +
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |   20 +-
 .../gtk/org/eclipse/swt/widgets/Display.java       |   92 +-
 .../gtk/org/eclipse/swt/widgets/ExpandBar.java     |   11 +-
 .../gtk/org/eclipse/swt/widgets/ExpandItem.java    |   15 +-
 .../gtk/org/eclipse/swt/widgets/FileDialog.java    |   20 +-
 .../gtk/org/eclipse/swt/widgets/FontDialog.java    |   12 +-
 .../gtk/org/eclipse/swt/widgets/Group.java         |   11 +-
 .../gtk/org/eclipse/swt/widgets/IME.java           |    6 +-
 .../gtk/org/eclipse/swt/widgets/Label.java         |   14 +-
 .../gtk/org/eclipse/swt/widgets/Link.java          |    9 +-
 .../gtk/org/eclipse/swt/widgets/List.java          |   25 +-
 .../gtk/org/eclipse/swt/widgets/Menu.java          |   96 +-
 .../gtk/org/eclipse/swt/widgets/MenuItem.java      |   55 +-
 .../gtk/org/eclipse/swt/widgets/MessageBox.java    |   12 +-
 .../gtk/org/eclipse/swt/widgets/ProgressBar.java   |    3 +-
 .../gtk/org/eclipse/swt/widgets/Sash.java          |    3 +-
 .../gtk/org/eclipse/swt/widgets/Scale.java         |    3 +-
 .../gtk/org/eclipse/swt/widgets/ScrollBar.java     |   13 +-
 .../gtk/org/eclipse/swt/widgets/Scrollable.java    |   15 +-
 .../gtk/org/eclipse/swt/widgets/Shell.java         |   79 +-
 .../gtk/org/eclipse/swt/widgets/Slider.java        |   10 +-
 .../gtk/org/eclipse/swt/widgets/Spinner.java       |   20 +-
 .../gtk/org/eclipse/swt/widgets/TabFolder.java     |   11 +-
 .../gtk/org/eclipse/swt/widgets/TabItem.java       |   17 +-
 .../gtk/org/eclipse/swt/widgets/Table.java         |   39 +-
 .../gtk/org/eclipse/swt/widgets/TableColumn.java   |   13 +-
 .../gtk/org/eclipse/swt/widgets/Text.java          |  233 +-
 .../gtk/org/eclipse/swt/widgets/ToolBar.java       |   10 +-
 .../gtk/org/eclipse/swt/widgets/ToolItem.java      |   32 +-
 .../gtk/org/eclipse/swt/widgets/ToolTip.java       |    3 +-
 .../gtk/org/eclipse/swt/widgets/TrayItem.java      |   10 +-
 .../gtk/org/eclipse/swt/widgets/Tree.java          |   57 +-
 .../gtk/org/eclipse/swt/widgets/TreeColumn.java    |   13 +-
 .../gtk/org/eclipse/swt/widgets/Widget.java        |   10 +-
 .../motif/org/eclipse/swt/graphics/TextLayout.java |    6 +-
 .../motif/org/eclipse/swt/widgets/Button.java      |  127 +-
 .../motif/org/eclipse/swt/widgets/Caret.java       |    3 +-
 .../motif/org/eclipse/swt/widgets/ColorDialog.java |    3 +-
 .../motif/org/eclipse/swt/widgets/Composite.java   |   12 +-
 .../motif/org/eclipse/swt/widgets/Control.java     |  208 +-
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |    3 +-
 .../motif/org/eclipse/swt/widgets/Display.java     |   58 +-
 .../motif/org/eclipse/swt/widgets/FileDialog.java  |    3 +-
 .../motif/org/eclipse/swt/widgets/FontDialog.java  |    3 +-
 .../motif/org/eclipse/swt/widgets/Label.java       |    3 +-
 .../motif/org/eclipse/swt/widgets/Menu.java        |   40 +-
 .../motif/org/eclipse/swt/widgets/MenuItem.java    |   38 +-
 .../motif/org/eclipse/swt/widgets/MessageBox.java  |    3 +-
 .../motif/org/eclipse/swt/widgets/ProgressBar.java |    3 +-
 .../motif/org/eclipse/swt/widgets/Sash.java        |    3 +-
 .../motif/org/eclipse/swt/widgets/Scale.java       |    3 +-
 .../motif/org/eclipse/swt/widgets/Shell.java       |   34 +-
 .../motif/org/eclipse/swt/widgets/Text.java        |  109 +-
 .../motif/org/eclipse/swt/widgets/ToolItem.java    |   11 +-
 .../photon/org/eclipse/swt/graphics/FontData.java  |    2 +-
 .../photon/org/eclipse/swt/widgets/Button.java     |    3 +-
 .../photon/org/eclipse/swt/widgets/Caret.java      |    3 +-
 .../org/eclipse/swt/widgets/ColorDialog.java       |    3 +-
 .../photon/org/eclipse/swt/widgets/Composite.java  |   12 +-
 .../photon/org/eclipse/swt/widgets/Control.java    |  209 +-
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |    3 +-
 .../photon/org/eclipse/swt/widgets/Display.java    |   59 +-
 .../photon/org/eclipse/swt/widgets/FileDialog.java |    3 +-
 .../photon/org/eclipse/swt/widgets/FontDialog.java |    3 +-
 .../photon/org/eclipse/swt/widgets/Label.java      |    3 +-
 .../photon/org/eclipse/swt/widgets/Menu.java       |   38 +-
 .../photon/org/eclipse/swt/widgets/MenuItem.java   |   40 +-
 .../photon/org/eclipse/swt/widgets/MessageBox.java |    3 +-
 .../org/eclipse/swt/widgets/ProgressBar.java       |    3 +-
 .../photon/org/eclipse/swt/widgets/Sash.java       |    3 +-
 .../photon/org/eclipse/swt/widgets/Scale.java      |    3 +-
 .../photon/org/eclipse/swt/widgets/Shell.java      |   32 +-
 .../photon/org/eclipse/swt/widgets/Text.java       |   47 +-
 .../photon/org/eclipse/swt/widgets/ToolItem.java   |   11 +-
 .../qt/org/eclipse/swt/graphics/Color.java         |  364 +
 .../qt/org/eclipse/swt/graphics/Cursor.java        |  445 ++
 .../qt/org/eclipse/swt/graphics/Device.java        |  920 +++
 .../qt/org/eclipse/swt/graphics/DeviceData.java    |   23 +
 .../qt/org/eclipse/swt/graphics/Font.java          |  379 +
 .../qt/org/eclipse/swt/graphics/FontData.java      |  722 ++
 .../qt/org/eclipse/swt/graphics/FontMetrics.java   |  165 +
 .../qt/org/eclipse/swt/graphics/GC.java            | 3555 ++++++++++
 .../qt/org/eclipse/swt/graphics/GCData.java        |   53 +
 .../qt/org/eclipse/swt/graphics/Image.java         |  978 +++
 .../qt/org/eclipse/swt/graphics/Region.java        |  776 ++
 .../eclipse/swt/internal/qt/DragNDropListener.java |   28 +
 .../org/eclipse/swt/internal/qt/FontConverter.java |  107 +
 .../qt/org/eclipse/swt/internal/qt/KeyUtil.java    |  120 +
 .../eclipse/swt/internal/qt/QtSWTConverter.java    |  110 +
 .../swt/internal/qt/QtSupplementaryFontData.java   |   28 +
 .../qt/org/eclipse/swt/internal/qt/SWQT.java       |   51 +
 .../eclipse/swt/internal/qt/SignalConnector.java   |   74 +
 .../swt/internal/qt/StylableScrollArea.java        |   60 +
 .../qt/org/eclipse/swt/internal/qt/ToString.java   |   99 +
 .../qt/org/eclipse/swt/widgets/Button.java         |  801 +++
 .../qt/org/eclipse/swt/widgets/Canvas.java         |  355 +
 .../qt/org/eclipse/swt/widgets/Caret.java          |  590 ++
 .../qt/org/eclipse/swt/widgets/ColorDialog.java    |  164 +
 .../qt/org/eclipse/swt/widgets/Combo.java          | 1398 ++++
 .../qt/org/eclipse/swt/widgets/Composite.java      | 1303 ++++
 .../qt/org/eclipse/swt/widgets/Control.java        | 4361 ++++++++++++
 .../qt/org/eclipse/swt/widgets/DateTime.java       |  806 +++
 .../qt/org/eclipse/swt/widgets/Decorations.java    | 1218 ++++
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |  202 +
 .../qt/org/eclipse/swt/widgets/Display.java        | 3246 +++++++++
 .../qt/org/eclipse/swt/widgets/FileDialog.java     |  443 ++
 .../qt/org/eclipse/swt/widgets/FontDialog.java     |  246 +
 .../qt/org/eclipse/swt/widgets/Group.java          |  293 +
 .../qt/org/eclipse/swt/widgets/Label.java          |  456 ++
 .../qt/org/eclipse/swt/widgets/Link.java           |  552 ++
 .../qt/org/eclipse/swt/widgets/List.java           | 1380 ++++
 .../qt/org/eclipse/swt/widgets/Menu.java           | 1423 ++++
 .../qt/org/eclipse/swt/widgets/MenuItem.java       | 1045 +++
 .../qt/org/eclipse/swt/widgets/MessageBox.java     |  312 +
 .../qt/org/eclipse/swt/widgets/ProgressBar.java    |  318 +
 .../qt/org/eclipse/swt/widgets/Sash.java           |  387 +
 .../qt/org/eclipse/swt/widgets/Scale.java          |  494 ++
 .../qt/org/eclipse/swt/widgets/ScrollBar.java      |  876 +++
 .../qt/org/eclipse/swt/widgets/Scrollable.java     |  430 ++
 .../qt/org/eclipse/swt/widgets/Shell.java          | 1510 ++++
 .../qt/org/eclipse/swt/widgets/Slider.java         |  632 ++
 .../qt/org/eclipse/swt/widgets/Spinner.java        |  948 +++
 .../qt/org/eclipse/swt/widgets/TabFolder.java      |  755 ++
 .../qt/org/eclipse/swt/widgets/TabItem.java        |  389 ++
 .../qt/org/eclipse/swt/widgets/Table.java          | 2561 +++++++
 .../qt/org/eclipse/swt/widgets/TableColumn.java    |  664 ++
 .../qt/org/eclipse/swt/widgets/TableItem.java      | 1441 ++++
 .../qt/org/eclipse/swt/widgets/Text.java           | 1875 +++++
 .../qt/org/eclipse/swt/widgets/ToolBar.java        |  530 ++
 .../qt/org/eclipse/swt/widgets/ToolItem.java       |  981 +++
 .../qt/org/eclipse/swt/widgets/ToolTip.java        |  512 ++
 .../qt/org/eclipse/swt/widgets/Tracker.java        |  859 +++
 .../qt/org/eclipse/swt/widgets/TrayItem.java       |  536 ++
 .../qt/org/eclipse/swt/widgets/Tree.java           | 1913 +++++
 .../qt/org/eclipse/swt/widgets/TreeColumn.java     |  714 ++
 .../qt/org/eclipse/swt/widgets/TreeItem.java       | 1573 +++++
 .../qt/org/eclipse/swt/widgets/Widget.java         | 1358 ++++
 .../win32/org/eclipse/swt/graphics/Cursor.java     |    2 +-
 .../win32/org/eclipse/swt/graphics/FontData.java   |    4 +-
 .../win32/org/eclipse/swt/graphics/TextLayout.java |  193 +-
 .../win32/org/eclipse/swt/internal/BidiUtil.java   |    4 +-
 .../win32/org/eclipse/swt/internal/ImageList.java  |    8 +-
 .../win32/org/eclipse/swt/widgets/Button.java      |   83 +-
 .../win32/org/eclipse/swt/widgets/Caret.java       |    5 +-
 .../win32/org/eclipse/swt/widgets/ColorDialog.java |    5 +-
 .../win32/org/eclipse/swt/widgets/Combo.java       |  153 +-
 .../win32/org/eclipse/swt/widgets/Composite.java   |   45 +-
 .../win32/org/eclipse/swt/widgets/Control.java     |  526 ++-
 .../win32/org/eclipse/swt/widgets/DateTime.java    |  260 +-
 .../win32/org/eclipse/swt/widgets/Decorations.java |   14 +-
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |    5 +-
 .../win32/org/eclipse/swt/widgets/Display.java     |  156 +-
 .../win32/org/eclipse/swt/widgets/FileDialog.java  |    5 +-
 .../win32/org/eclipse/swt/widgets/FontDialog.java  |    5 +-
 .../win32/org/eclipse/swt/widgets/IME.java         |    4 +-
 .../win32/org/eclipse/swt/widgets/Label.java       |    5 +-
 .../win32/org/eclipse/swt/widgets/Menu.java        |   53 +-
 .../win32/org/eclipse/swt/widgets/MenuItem.java    |   52 +-
 .../win32/org/eclipse/swt/widgets/MessageBox.java  |    5 +-
 .../win32/org/eclipse/swt/widgets/ProgressBar.java |    5 +-
 .../win32/org/eclipse/swt/widgets/Sash.java        |    5 +-
 .../win32/org/eclipse/swt/widgets/Scale.java       |   30 +-
 .../win32/org/eclipse/swt/widgets/Shell.java       |   33 +-
 .../win32/org/eclipse/swt/widgets/Spinner.java     |   23 +-
 .../win32/org/eclipse/swt/widgets/TabFolder.java   |   73 +-
 .../win32/org/eclipse/swt/widgets/Table.java       |  159 +-
 .../win32/org/eclipse/swt/widgets/TaskBar.java     |   89 +-
 .../win32/org/eclipse/swt/widgets/Text.java        |  122 +-
 .../win32/org/eclipse/swt/widgets/ToolBar.java     |   48 +-
 .../win32/org/eclipse/swt/widgets/ToolItem.java    |   11 +-
 .../win32/org/eclipse/swt/widgets/ToolTip.java     |    5 +-
 .../win32/org/eclipse/swt/widgets/Tree.java        |  196 +-
 .../win32/org/eclipse/swt/widgets/TreeColumn.java  |    7 +-
 .../win32/org/eclipse/swt/widgets/Widget.java      |    3 +-
 .../wpf/org/eclipse/swt/graphics/FontData.java     |    2 +-
 .../wpf/org/eclipse/swt/widgets/Button.java        |    3 +-
 .../wpf/org/eclipse/swt/widgets/Caret.java         |    3 +-
 .../wpf/org/eclipse/swt/widgets/ColorDialog.java   |    3 +-
 .../wpf/org/eclipse/swt/widgets/Composite.java     |   46 +-
 .../wpf/org/eclipse/swt/widgets/Control.java       |  209 +-
 .../org/eclipse/swt/widgets/DirectoryDialog.java   |    3 +-
 .../wpf/org/eclipse/swt/widgets/Display.java       |  101 +-
 .../wpf/org/eclipse/swt/widgets/FileDialog.java    |    3 +-
 .../wpf/org/eclipse/swt/widgets/FontDialog.java    |    3 +-
 .../wpf/org/eclipse/swt/widgets/Label.java         |    3 +-
 .../wpf/org/eclipse/swt/widgets/Menu.java          |   38 +-
 .../wpf/org/eclipse/swt/widgets/MenuItem.java      |   39 +-
 .../wpf/org/eclipse/swt/widgets/MessageBox.java    |    3 +-
 .../wpf/org/eclipse/swt/widgets/ProgressBar.java   |    3 +-
 .../wpf/org/eclipse/swt/widgets/Sash.java          |    3 +-
 .../wpf/org/eclipse/swt/widgets/Scale.java         |    3 +-
 .../wpf/org/eclipse/swt/widgets/Shell.java         |   32 +-
 .../wpf/org/eclipse/swt/widgets/Text.java          |   48 +-
 .../wpf/org/eclipse/swt/widgets/ToolItem.java      |   11 +-
 .../plugins/org.eclipse.swt/META-INF/MANIFEST.MF   |    4 +-
 eclipse/plugins/org.eclipse.swt/build.xml          |    2 +-
 eclipse/plugins/org.eclipse.swt/buildFragment.xml  |   22 +-
 .../plugins/org.eclipse.swt/buildnotes_swt.html    |  322 +-
 .../org.eclipse.swt/components/external.idl        |   15 +-
 eclipse/plugins/org.eclipse.swt/readme_swt.html    |  145 -
 eclipse/plugins/org.eclipse.swt/tasks/build.xml    |  395 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.team.core/META-INF/MANIFEST.MF     |    6 +-
 .../org.eclipse.team.core/buildnotes_team.html     |  299 +-
 .../plugins/org.eclipse.team.core/component.xml    |   11 +
 .../org.eclipse.team.core/plugin.properties        |    3 +-
 eclipse/plugins/org.eclipse.team.core/plugin.xml   |   14 +-
 .../schema/bundleImporters.exsd                    |  156 +
 .../schema/defaultFileModificationValidator.exsd   |    4 +-
 .../src/org/eclipse/team/core/ITeamStatus.java     |    4 +-
 .../eclipse/team/core/ProjectSetCapability.java    |   50 +-
 .../eclipse/team/core/ScmUrlImportDescription.java |   99 +
 .../src/org/eclipse/team/core/Team.java            |   95 +-
 .../eclipse/team/core/history/IFileRevision.java   |   12 +-
 .../team/core/history/provider/FileRevision.java   |   13 +-
 .../provisional/BundleImporterDelegate.java        |  105 +
 .../importing/provisional/IBundleImporter.java     |   55 +
 .../provisional/IBundleImporterDelegate.java       |   83 +
 .../team/core/importing/provisional/package.html   |   23 +
 .../src/org/eclipse/team/core/mapping/package.html |    2 +-
 .../team/core/mapping/provider/package.html        |    2 +-
 .../eclipse/team/core/subscribers/Subscriber.java  |    6 +-
 .../eclipse/team/core/synchronize/SyncInfo.java    |   20 +-
 .../variants/ResourceVariantTreeSubscriber.java    |    2 +-
 .../team/core/variants/ThreeWaySynchronizer.java   |    4 +-
 .../org/eclipse/team/internal/core/Messages.java   |    3 +-
 .../eclipse/team/internal/core/StringMatcher.java  |    4 +-
 .../org/eclipse/team/internal/core/TeamPlugin.java |    7 +-
 .../core/importing/BundleImporterExtension.java    |   94 +
 .../core/mapping/AbstractResourceMappingScope.java |    5 +-
 .../eclipse/team/internal/core/messages.properties |    4 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.team.cvs.core/META-INF/MANIFEST.MF |    4 +-
 .../org.eclipse.team.cvs.core/plugin.properties    |    3 +-
 .../plugins/org.eclipse.team.cvs.core/plugin.xml   |   20 +-
 .../internal/ccvs/core/CVSCompareSubscriber.java   |    4 +-
 .../team/internal/ccvs/core/CVSMergeSyncInfo.java  |    4 +-
 .../team/internal/ccvs/core/CVSMessages.java       |    6 +-
 .../ccvs/core/CVSProjectSetCapability.java         |    7 +
 .../team/internal/ccvs/core/CVSSyncInfo.java       |   72 +-
 .../eclipse/team/internal/ccvs/core/CVSTag.java    |   29 +-
 .../ccvs/core/CvsBundleImporterDelegate.java       |   58 +
 .../eclipse/team/internal/ccvs/core/ILogEntry.java |    8 +-
 .../ccvs/core/client/CommandOutputListener.java    |    8 +-
 .../team/internal/ccvs/core/client/RTag.java       |   11 +-
 .../team/internal/ccvs/core/client/Request.java    |   16 +-
 .../ccvs/core/client/listeners/DiffListener.java   |    8 +-
 .../core/client/listeners/IMessagePatterns.java    |    4 +-
 .../ccvs/core/client/listeners/LogEntry.java       |   33 +-
 .../ccvs/core/client/listeners/LogListener.java    |   76 +-
 .../ccvs/core/client/listeners/StatusListener.java |    4 +-
 .../core/filehistory/CVSFileHistoryProvider.java   |    5 +-
 .../ccvs/core/filehistory/CVSFileRevision.java     |    7 +-
 .../team/internal/ccvs/core/filesystem/CVSURI.java |   97 +-
 .../team/internal/ccvs/core/messages.properties    |    8 +-
 .../internal/ccvs/core/resources/EclipseFile.java  |    6 +-
 .../ccvs/core/resources/EclipseSynchronizer.java   |   18 +-
 .../ccvs/core/syncinfo/ResourceSyncInfo.java       |   80 +-
 .../internal/ccvs/core/util/KnownRepositories.java |   15 +-
 .../eclipse/team/internal/ccvs/core/util/Util.java |   16 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.team.cvs.ssh2/META-INF/MANIFEST.MF |    2 +-
 .../plugins/org.eclipse.team.cvs.ssh2/plugin.xml   |   11 +
 .../.settings/org.eclipse.jdt.core.prefs           |   15 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF   |    2 +-
 eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml |   24 +
 .../team/internal/ccvs/ui/CVSHistoryFilter.java    |   25 +-
 .../internal/ccvs/ui/CVSHistoryFilterDialog.java   |   18 +-
 .../team/internal/ccvs/ui/CVSHistoryPage.java      |  129 +-
 .../internal/ccvs/ui/CVSHistorySearchFilter.java   |   19 +-
 .../internal/ccvs/ui/CVSHistoryTableProvider.java  |  119 +-
 .../internal/ccvs/ui/CVSProjectPropertiesPage.java |   10 +-
 .../team/internal/ccvs/ui/CVSUIMessages.java       |   15 +-
 .../ccvs/ui/CommentTemplatesPreferencePage.java    |   20 +-
 .../team/internal/ccvs/ui/CommitCommentArea.java   |   32 +-
 .../internal/ccvs/ui/ComparePreferencePage.java    |   13 +-
 .../eclipse/team/internal/ccvs/ui/EditorsView.java |   30 +-
 .../internal/ccvs/ui/HistoryTableProvider.java     |   64 +-
 .../team/internal/ccvs/ui/IHelpContextIds.java     |    5 +-
 .../org/eclipse/team/internal/ccvs/ui/Policy.java  |    8 +-
 .../actions/ReplaceWithLatestRevisionAction.java   |    9 +-
 .../ui/actions/ReplaceWithSelectableTagAction.java |   11 +-
 .../ccvs/ui/actions/ReplaceWithTagAction.java      |   26 +-
 .../ui/actions/RestoreFromRepositoryAction.java    |   46 +-
 .../internal/ccvs/ui/actions/WorkspaceAction.java  |   44 +-
 .../ccvs/ui/actions/WorkspaceTraversalAction.java  |   10 +-
 .../internal/ccvs/ui/actions/actions.properties    |   10 +-
 .../ccvs/ui/mappings/ChangeSetActionProvider.java  |   31 +-
 .../team/internal/ccvs/ui/messages.properties      |   35 +-
 .../internal/ccvs/ui/operations/CVSOperation.java  |    9 +-
 .../internal/ccvs/ui/operations/DiffOperation.java |   24 +-
 .../ui/operations/ProjectMetaFileOperation.java    |    4 +-
 .../ccvs/ui/operations/ReplaceOperation.java       |   21 +-
 .../ccvs/ui/operations/ShareProjectOperation.java  |   10 +-
 .../ui/operations/TagInRepositoryOperation.java    |    8 +-
 .../ui/operations/UpdateOnlyMergableOperation.java |    8 +-
 .../ccvs/ui/repo/CVSRepositoryPropertiesPage.java  |    3 +-
 .../ccvs/ui/repo/PasteConnectionStringAction.java  |    2 +-
 .../ccvs/ui/tags/TagSelectionWizardPage.java       |    8 +-
 .../ccvs/ui/wizards/CVSScmUrlImportWizardPage.java |  255 +
 .../ccvs/ui/wizards/GenerateDiffFileWizard.java    |    8 +-
 .../team/internal/ccvs/ui/wizards/MergeWizard.java |    2 +-
 .../internal/ccvs/ui/wizards/MergeWizardPage.java  |   25 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.team.ui/META-INF/MANIFEST.MF       |    4 +-
 .../plugins/org.eclipse.team.ui/plugin.properties  |    3 +-
 eclipse/plugins/org.eclipse.team.ui/plugin.xml     |   21 +-
 .../schema/scmUrlImportPages.exsd                  |  137 +
 .../team/internal/ui/ProjectSetImporter.java       |   87 +-
 .../eclipse/team/internal/ui/TeamUIMessages.java   |    9 +-
 .../org/eclipse/team/internal/ui/TeamUIPlugin.java |   20 +-
 .../src/org/eclipse/team/internal/ui/Utils.java    |   33 +-
 .../team/internal/ui/actions/CompareAction.java    |    2 +-
 .../ui/actions/ImportProjectSetAction.java         |   28 +-
 .../team/internal/ui/actions/actions.properties    |    2 +-
 .../ui/history/CompareFileRevisionEditorInput.java |   30 +-
 .../team/internal/ui/history/LocalHistoryPage.java |   32 +-
 .../ui/mapping/DiffTreeChangesSection.java         |   12 +-
 .../team/internal/ui/mapping/LineComparator.java   |    7 +-
 .../internal/ui/mapping/RemoveFromViewAction.java  |    3 +-
 .../ResourceCompareInputChangeNotifier.java        |   39 +-
 .../ui/mapping/ResourceDiffCompareInput.java       |   53 +-
 .../team/internal/ui/mapping/TeamViewerSorter.java |    7 +-
 .../eclipse/team/internal/ui/messages.properties   |   19 +-
 .../ui/preferences/IgnorePreferencePage.java       |    4 +-
 .../ui/synchronize/ChangeSetModelSorter.java       |    4 +-
 .../internal/ui/synchronize/ChangesSection.java    |   11 +-
 .../ui/synchronize/ForwardingChangesSection.java   |    6 +-
 .../LocalResourceSaveableComparison.java           |   59 +-
 .../ui/synchronize/LocalResourceTypedElement.java  |   50 +
 .../ui/synchronize/NavigationActionGroup.java      |    9 +-
 .../synchronize/SaveablesCompareEditorInput.java   |   72 +-
 .../ui/synchronize/StructuredViewerAdvisor.java    |   30 +-
 .../ui/synchronize/SyncInfoSetChangesSection.java  |   13 +-
 .../synchronize/SynchronizeModelElementSorter.java |   13 +-
 .../internal/ui/synchronize/SynchronizeView.java   |   16 +-
 .../synchronize/actions/ChangeSetActionGroup.java  |   48 +-
 .../synchronize/actions/OpenWithActionGroup.java   |  114 +-
 .../synchronize/actions/RemoveFromViewAction.java  |   12 +-
 .../actions/StatusLineContributionGroup.java       |    2 +-
 .../actions/SynchronizeAndRefreshAction.java       |   65 +
 .../actions/SynchronizePageDropDownAction.java     |    2 +-
 .../ui/wizards/ExportProjectSetLocationPage.java   |    6 +-
 .../ui/wizards/ImportProjectSetMainPage.java       |  190 +-
 .../ui/wizards/ImportProjectSetOperation.java      |   57 +-
 .../ui/wizards/ProjectSetExportWizard.java         |    4 +-
 .../ui/wizards/ProjectSetImportWizard.java         |   21 +-
 .../team/internal/ui/wizards/PsfFilenameStore.java |   99 +-
 .../eclipse/team/internal/ui/wizards/PsfStore.java |   95 +
 .../team/internal/ui/wizards/PsfUrlStore.java      |   47 +
 .../eclipse/team/ui/IScmUrlImportWizardPage.java   |   79 +
 .../src/org/eclipse/team/ui/TeamUI.java            |   72 +-
 .../src/org/eclipse/team/ui/history/package.html   |    2 +-
 .../ui/mapping/SynchronizationContentProvider.java |    4 +-
 .../src/org/eclipse/team/ui/mapping/package.html   |    2 +-
 .../ui/synchronize/SaveableCompareEditorInput.java |    7 +-
 .../plugins/org.eclipse.text/META-INF/MANIFEST.MF  |    2 +-
 .../jface/text/projection/ProjectionMapping.java   |    4 +-
 .../eclipse/jface/text/DefaultPositionUpdater.java |   51 +-
 .../src/org/eclipse/jface/text/Document.java       |   10 +-
 .../eclipse/jface/text/IDocumentExtension2.java    |    4 +-
 .../jface/text/IRepairableDocumentExtension.java   |   16 +-
 .../eclipse/jface/text/ISlaveDocumentManager.java  |   15 +-
 .../src/org/eclipse/jface/text/TextUtilities.java  |    8 +-
 .../org/eclipse/jface/text/TreeLineTracker.java    |   10 +-
 .../jface/text/templates/TemplateContextType.java  |    6 +-
 .../jface/text/templates/TemplateTranslator.java   |   16 +-
 .../org.eclipse.ui.browser/META-INF/MANIFEST.MF    |    2 +-
 eclipse/plugins/org.eclipse.ui.browser/plugin.xml  |    4 +-
 .../browser/BrowserDescriptorWorkingCopy.java      |    3 +-
 .../ui/internal/browser/BrowserLauncher.java       |    6 +-
 .../ui/internal/browser/BrowserManager.java        |    5 +-
 .../ui/internal/browser/DefaultBrowserSupport.java |    2 +-
 .../internal/browser/ExternalBrowserInstance.java  |   17 +-
 .../browser/InternalBrowserViewInstance.java       |   11 +-
 .../ui/internal/browser/SystemBrowserInstance.java |   19 +-
 .../internal/browser/WebBrowserPreferencePage.java |   10 +-
 .../ui/internal/browser/WebBrowserView.java        |   10 +-
 .../internal/browser/browsers/MozillaBrowser.java  |   13 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../ui/internal/cheatsheets/CommandRunner.java     |    7 +-
 .../.settings/org.eclipse.jdt.core.prefs           |  270 +-
 .../.settings/org.eclipse.jdt.ui.prefs             |   57 +
 .../org.eclipse.ui.cocoa/META-INF/MANIFEST.MF      |    2 +-
 .../org.eclipse.ui.cocoa/fragment-cocoa.properties |   11 +-
 eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml  |   45 +-
 .../ui/internal/cocoa/AbstractWindowHandler.java   |   36 +
 .../ui/internal/cocoa/ArrangeWindowsHandler.java   |   48 +
 .../ui/internal/cocoa/CloseDialogHandler.java      |    7 +-
 .../ui/internal/cocoa/CocoaTitlePathUpdater.java   |   34 +
 .../eclipse/ui/internal/cocoa/CocoaUIEnhancer.java |  721 +--
 .../org/eclipse/ui/internal/cocoa/CocoaUtil.java   |  143 +
 .../ui/internal/cocoa/MinimizeWindowHandler.java   |   35 +
 .../ui/internal/cocoa/ZoomWindowHandler.java       |   35 +
 .../.settings/org.eclipse.jdt.core.prefs           |   20 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../org.eclipse.ui.console/META-INF/MANIFEST.MF    |    2 +-
 .../eclipse/ui/internal/console/ConsoleView.java   |    4 +-
 .../org.eclipse.ui.editors/META-INF/MANIFEST.MF    |    9 +-
 .../org.eclipse.ui.editors/plugin.properties       |   18 +-
 eclipse/plugins/org.eclipse.ui.editors/plugin.xml  |    2 +-
 .../text/ConstructedTextEditorMessages.properties  |   20 +-
 .../ui/editors/text/DefaultEncodingSupport.java    |    9 +-
 .../ui/editors/text/FileDocumentProvider.java      |    4 +-
 .../ui/editors/text/TextEditorMessages.java        |    3 +-
 .../ui/editors/text/TextEditorMessages.properties  |    3 +-
 .../ui/editors/text/TextFileDocumentProvider.java  |    8 +-
 .../text/TextSourceViewerConfiguration.java        |    3 +-
 .../text/AnnotationsConfigurationBlock.java        |   11 +-
 .../ui/internal/editors/text/EditorsPlugin.java    |   19 +-
 .../text/RemoveTrailingWhitespaceHandler.java      |   25 +-
 .../editors/text/SelectResourcesBlock.java         |    8 +-
 .../text/TextEditorDefaultsPreferencePage.java     |  418 ++-
 .../internal/editors/text/TextEditorMessages.java  |   17 +-
 .../editors/text/TextEditorMessages.properties     |   28 +-
 .../ui/texteditor/AbstractDecoratedTextEditor.java |  151 +-
 ...ractDecoratedTextEditorPreferenceConstants.java |  179 +-
 .../org/eclipse/ui/texteditor/AddMarkerAction.java |    5 +-
 .../ui/texteditor/MarkerAnnotationPreferences.java |    9 +-
 .../eclipse/ui/texteditor/MarkerRulerAction.java   |    8 +-
 .../eclipse/ui/texteditor/TextEditorMessages.java  |    8 +-
 .../ui/texteditor/TextEditorMessages.properties    |    9 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   38 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 .../ExternalToolsBuilderTab.java                   |    4 +-
 .../launchConfigurations/ExternalToolsMainTab.java |   24 +-
 .../internal/model/ExternalToolsPlugin.java        |    8 +-
 .../internal/ui/BuilderPropertyPage.java           |    4 +-
 .../org.eclipse.ui.forms/META-INF/MANIFEST.MF      |    2 +-
 .../org/eclipse/ui/forms/widgets/ColumnLayout.java |   15 +-
 .../ui/forms/widgets/ExpandableComposite.java      |   29 +-
 .../src/org/eclipse/ui/forms/widgets/FormText.java |   17 +-
 .../org/eclipse/ui/forms/widgets/FormToolkit.java  |   64 +-
 .../eclipse/ui/forms/widgets/ImageHyperlink.java   |    4 +-
 .../src/org/eclipse/ui/forms/widgets/Section.java  |    5 -
 .../ui/forms/widgets/SharedScrolledComposite.java  |    2 +-
 .../org/eclipse/ui/forms/widgets/SizeCache.java    |    5 +-
 .../eclipse/ui/forms/widgets/TableWrapData.java    |   10 +-
 .../eclipse/ui/forms/widgets/TableWrapLayout.java  |   23 +-
 .../forms/widgets/AggregateHyperlinkSegment.java   |   15 +-
 .../internal/forms/widgets/ColumnLayoutUtils.java  |   58 +
 .../ui/internal/forms/widgets/Paragraph.java       |    6 +-
 .../ui/internal/forms/widgets/TextSegment.java     |   44 +-
 .../ui/internal/forms/widgets/TitleRegion.java     |    7 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../icons/full/elcl16/configs.gif                  |  Bin 368 -> 368 bytes
 .../icons/full/elcl16/usearch_obj.gif              |  Bin 586 -> 586 bytes
 .../internal/ide/application/IDEApplication.java   |   45 +-
 .../ide/application/IDEWorkbenchAdvisor.java       |   66 +-
 .../ide/application/IDEWorkbenchWindowAdvisor.java |   53 +-
 .../org.eclipse.ui.ide/META-INF/MANIFEST.MF        |    5 +-
 .../org/eclipse/ui/actions/AddBookmarkAction.java  |   57 +-
 .../org/eclipse/ui/actions/BuildAction.java        |  223 +-
 .../eclipse/ui/actions/DeleteResourceAction.java   |   11 +-
 .../org/eclipse/ui/actions/GlobalBuildAction.java  |    2 +
 .../org/eclipse/ui/actions/NewWizardMenu.java      |   36 +-
 .../org/eclipse/ui/actions/OpenResourceAction.java |   12 +-
 .../org/eclipse/ui/actions/WorkspaceAction.java    |    4 +
 .../dialogs/FilteredResourcesSelectionDialog.java  |   16 +-
 .../org/eclipse/ui/dialogs/WizardExportPage.java   |    5 +-
 .../ui/dialogs/WizardNewProjectReferencePage.java  |    6 +-
 .../icons/full/dtool16/newprj_wiz.gif              |  Bin 222 -> 344 bytes
 .../icons/full/etool16/newprj_wiz.gif              |  Bin 348 -> 574 bytes
 .../icons/full/eview16/problems_view_error.gif     |  Bin 0 -> 1026 bytes
 .../icons/full/eview16/problems_view_warning.gif   |  Bin 0 -> 1037 bytes
 .../icons/full/obj16/quickfix_error_obj.gif        |  Bin 348 -> 348 bytes
 .../icons/full/obj16/quickfix_warning_obj.gif      |  Bin 559 -> 559 bytes
 .../plugins/org.eclipse.ui.ide/plugin.properties   |   11 +-
 eclipse/plugins/org.eclipse.ui.ide/plugin.xml      |   98 +-
 .../org.eclipse.ui.ide/schema/markerSupport.exsd   |   11 +-
 .../ide/dialogs/ResourceEncodingFieldEditor.java   |  110 +-
 .../ui/ide/undo/AbstractMarkersOperation.java      |   21 +-
 .../org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java |   65 +-
 .../internal/ide/IDEInternalWorkbenchImages.java   |   13 +-
 .../ui/internal/ide/IDEWorkbenchMessages.java      |   12 +-
 .../ui/internal/ide/IDEWorkbenchPlugin.java        |   61 +-
 .../ui/internal/ide/LineDelimiterEditor.java       |   35 +-
 .../ui/internal/ide/ResourceWorkingSetUpdater.java |    7 +-
 .../ui/internal/ide/WorkbenchActionBuilder.java    |   63 +-
 .../internal/ide/actions/OpenWorkspaceAction.java  |  185 +-
 .../commands/CopyBuildIdToClipboardHandler.java    |    2 +-
 .../ui/internal/ide/dialogs/CleanDialog.java       |   36 +-
 .../ui/internal/ide/dialogs/FileStatesPage.java    |   31 +-
 .../ide/dialogs/IDEWorkspacePreferencePage.java    |   44 +-
 .../internal/ide/dialogs/LinkedResourceEditor.java |   96 +-
 .../internal/ide/dialogs/OpenResourceDialog.java   |   23 +-
 .../ide/dialogs/ProjectContentsLocationArea.java   |    7 +-
 .../ui/internal/ide/dialogs/ResourceInfoPage.java  |   77 +-
 .../ide/dialogs/ResourceTreeAndListGroup.java      |   10 +-
 .../ui/internal/ide/filesystem/messages.properties |    4 +-
 .../eclipse/ui/internal/ide/messages.properties    |   23 +-
 .../ide/model/WorkbenchAdapterFactory.java         |   15 +-
 .../ui/internal/views/markers/AllMarkersView.java  |   20 +-
 .../ui/internal/views/markers/BookmarksView.java   |   28 +-
 .../views/markers/ConfigureColumnsHandler.java     |    3 +-
 .../ui/internal/views/markers/DeleteHandler.java   |   44 +-
 .../views/markers/ExtendedMarkersView.java         |  283 +-
 .../views/markers/FiltersConfigurationDialog.java  |  924 ++--
 .../views/markers/FiltersContribution.java         |   18 +-
 .../internal/views/markers/GroupsContribution.java |    7 +-
 .../ui/internal/views/markers/MarkerCategory.java  |    9 +-
 .../views/markers/MarkerContentGenerator.java      |  206 +-
 .../views/markers/MarkerFieldFilterGroup.java      |   43 +-
 .../views/markers/MarkerLocationField.java         |    4 +-
 .../views/markers/MarkerPreferencesDialog.java     |  483 --
 .../views/markers/MarkerPreferencesHandler.java    |   38 -
 .../markers/MarkerSupportInternalUtilities.java    |   62 +-
 .../views/markers/MarkerViewerContentProvider.java |   25 +-
 .../eclipse/ui/internal/views/markers/Markers.java |  102 +-
 .../views/markers/MarkersContribution.java         |    6 +-
 .../views/markers/MarkersPropertyPage.java         |    7 +-
 .../views/markers/MarkersViewColumnsDialog.java    |  296 +
 .../ui/internal/views/markers/ProblemsView.java    |   47 +-
 .../ui/internal/views/markers/QuickFixHandler.java |   86 +-
 .../ui/internal/views/markers/QuickFixPage.java    |  105 +-
 .../ui/internal/views/markers/QuickFixWizard.java  |   13 +-
 .../views/markers/SortFieldContribution.java       |    7 +-
 .../ui/internal/views/markers/TasksView.java       |   28 +-
 .../views/markers/TypesConfigurationArea.java      |    4 +-
 .../views/markers/ViewerColumnsDialog.java         |  994 +++
 .../markers/ViewerSettingsAndStatusDialog.java     |  300 +
 .../datatransfer/ArchiveFileExportOperation.java   |   34 +-
 .../wizards/datatransfer/DataTransferMessages.java |    3 +-
 .../WizardFileSystemResourceImportPage1.java       |    4 +-
 .../datatransfer/WizardProjectsImportPage.java     |   34 +-
 .../wizards/datatransfer/messages.properties       |    3 +-
 .../org/eclipse/ui/views/markers/MarkerField.java  |   23 +-
 .../ui/views/markers/MarkerViewHandler.java        |    4 +-
 .../markers/internal/DialogMarkerProperties.java   |    6 +-
 .../markers/internal/DialogProblemProperties.java  |    7 +-
 .../ui/views/markers/internal/MarkerMessages.java  |   29 +-
 .../markers/internal/MarkerSupportRegistry.java    |    6 +
 .../ui/views/markers/internal/messages.properties  |   51 +-
 .../ui/views/navigator/MainActionGroup.java        |    4 +-
 .../ui/views/navigator/NavigatorDropAdapter.java   |   34 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../themes/circles/html/rtl.css                    |    5 +-
 .../themes/purpleMesh/html/rtl.css                 |    5 +-
 .../themes/slate/html/rtl.css                      |   10 +-
 .../org.eclipse.ui.intro/META-INF/MANIFEST.MF      |    2 +-
 .../intro/impl/model/AbstractIntroElement.java     |   14 +-
 .../ui/internal/intro/impl/model/History.java      |    5 +-
 .../ui/internal/intro/impl/model/url/IntroURL.java |    4 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../org.eclipse.ui.navigator.resources/plugin.xml  |    2 +-
 .../resources/ResourceDropAdapterAssistant.java    |   35 +-
 .../org.eclipse.ui.navigator/META-INF/MANIFEST.MF  |    2 +-
 .../schema/navigatorContent.exsd                   |    4 +-
 .../NavigatorContentServiceContentProvider.java    |   12 +-
 .../ui/navigator/INavigatorContentService.java     |   11 +-
 .../.settings/org.eclipse.jdt.core.prefs           |   13 +-
 .../.settings/org.eclipse.jdt.launching.prefs      |    3 +
 eclipse/plugins/org.eclipse.ui.net/plugin.xml      |   11 +
 .../ui/internal/net/NonProxyHostsComposite.java    |   53 +-
 .../ui/internal/net/ProxyEntriesComposite.java     |   39 +-
 .../ui/internal/net/ProxyPreferencePage.java       |    7 +
 .../org.eclipse.ui.views.log/META-INF/MANIFEST.MF  |    2 +-
 .../ui/internal/views/log/EventDetailsDialog.java  |   44 +-
 .../views/log/EventDetailsDialogAction.java        |   18 +-
 .../ui/internal/views/log/FilterDialog.java        |    9 +-
 .../eclipse/ui/internal/views/log/LogReader.java   |   24 +-
 .../org/eclipse/ui/internal/views/log/LogView.java |   57 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../view/OverridableTabListContentProvider.java    |    6 +-
 .../properties/tabbed/view/TabDescriptor.java      |   22 +-
 .../tabbed/view/TabbedPropertyRegistry.java        |   29 +-
 .../tabbed/view/TabbedPropertyRegistryFactory.java |    3 +-
 .../org.eclipse.ui.views/META-INF/MANIFEST.MF      |    2 +-
 .../internal/views/properties/messages.properties  |    4 +-
 .../views/contentoutline/ContentOutlinePage.java   |   19 +-
 .../eclipse/ui/views/properties/PropertySheet.java |   10 +-
 .../META-INF/MANIFEST.MF                           |    4 +-
 .../plugin.properties                              |    4 +-
 .../org.eclipse.ui.workbench.texteditor/plugin.xml |    6 +
 .../schema/spellingEngine.exsd                     |   17 +-
 .../texteditor/HippieCompletionEngine.java         |    8 +-
 .../eclipse/ui/texteditor/AbstractTextEditor.java  |  184 +-
 .../ConstructedEditorMessages.properties           |    7 +-
 .../ui/texteditor/EditorMessages.properties        |    4 +-
 .../eclipse/ui/texteditor/FindReplaceDialog.java   |  118 +-
 .../IAbstractTextEditorHelpContextIds.java         |   11 +-
 .../eclipse/ui/texteditor/IDocumentProvider.java   |   10 +-
 .../ui/texteditor/ITextEditorActionConstants.java  |   11 +-
 .../texteditor/ITextEditorActionDefinitionIds.java |    8 +
 .../src/org/eclipse/ui/texteditor/InfoForm.java    |   26 +-
 .../texteditor/ShowWhitespaceCharactersAction.java |   51 +-
 .../eclipse/ui/texteditor/StatusTextEditor.java    |   22 +-
 .../eclipse/ui/texteditor/TextOperationAction.java |    5 +-
 .../ui/texteditor/templates/MessageLine.java       |   82 -
 .../templates/TemplatePreferencePage.java          |   15 +-
 .../ui/texteditor/templates/TemplatesView.java     |    4 +-
 .../.settings/org.eclipse.jdt.ui.prefs             |    2 +-
 .../Eclipse UI/org/eclipse/ui/IEditorRegistry.java |    4 +-
 .../Eclipse UI/org/eclipse/ui/IMemento.java        |   32 +-
 .../Eclipse UI/org/eclipse/ui/IPageService.java    |   28 +-
 .../Eclipse UI/org/eclipse/ui/IPartListener2.java  |   18 +-
 .../Eclipse UI/org/eclipse/ui/IPartService.java    |    6 +-
 .../Eclipse UI/org/eclipse/ui/ISaveablePart2.java  |    4 +-
 .../org/eclipse/ui/IWorkbenchCommandConstants.java |   18 +-
 .../Eclipse UI/org/eclipse/ui/IWorkbenchPart.java  |    4 +-
 .../org/eclipse/ui/IWorkbenchPartReference.java    |    2 +-
 .../eclipse/ui/IWorkbenchPreferenceConstants.java  |   15 +-
 .../org/eclipse/ui/IWorkbenchPropertyPage.java     |    7 +-
 .../eclipse/ui/IWorkbenchPropertyPageMulti.java    |   34 +
 .../org/eclipse/ui/IWorkingSetManager.java         |   19 +-
 .../Eclipse UI/org/eclipse/ui/XMLMemento.java      |  200 +-
 .../org/eclipse/ui/actions/ActionFactory.java      |  169 +-
 .../ui/application/IWorkbenchWindowConfigurer.java |  100 +-
 .../ui/application/WorkbenchWindowAdvisor.java     |   32 +
 .../org/eclipse/ui/contexts/IContextService.java   |    9 +-
 .../eclipse/ui/dialogs/EditorSelectionDialog.java  |   52 +-
 .../ui/dialogs/FilteredItemsSelectionDialog.java   |   27 +-
 .../eclipse/ui/dialogs/PropertyDialogAction.java   |   25 +-
 .../org/eclipse/ui/dialogs/PropertyPage.java       |   10 +-
 .../eclipse/ui/dialogs/TypeFilteringDialog.java    |    6 +-
 .../org/eclipse/ui/handlers/HandlerUtil.java       |   40 +-
 .../org/eclipse/ui/handlers/ShowViewHandler.java   |   26 +-
 .../ui/internal/AbstractWorkingSetManager.java     |   70 +-
 .../eclipse/ui/internal/ActiveEditorAction.java    |  206 -
 .../org/eclipse/ui/internal/AnimationEngine.java   |    5 +-
 .../ui/internal/ApplicationMenuManager.java        |   83 +
 .../org/eclipse/ui/internal/BaseSaveAction.java    |  235 -
 .../org/eclipse/ui/internal/CycleBaseHandler.java  |   26 +-
 .../org/eclipse/ui/internal/EditorManager.java     |   90 +-
 .../org/eclipse/ui/internal/EditorReference.java   |   12 +-
 .../org/eclipse/ui/internal/EditorStack.java       |    2 +-
 .../org/eclipse/ui/internal/ErrorEditorPart.java   |   18 +-
 .../org/eclipse/ui/internal/ErrorViewPart.java     |   15 +-
 .../eclipse/ui/internal/ExtensionEventHandler.java |    8 +-
 .../org/eclipse/ui/internal/FastViewBar.java       |   21 +-
 .../eclipse/ui/internal/FastViewDnDHandler.java    |    4 +-
 .../org/eclipse/ui/internal/HeapStatus.java        |   65 +-
 .../eclipse/ui/internal/IPreferenceConstants.java  |   15 +-
 .../org/eclipse/ui/internal/IntroAction.java       |  110 -
 .../org/eclipse/ui/internal/JFaceUtil.java         |    5 +-
 .../org/eclipse/ui/internal/LockToolBarAction.java |   78 -
 .../eclipse/ui/internal/OpenPreferencesAction.java |   75 -
 .../org/eclipse/ui/internal/PageLayout.java        |   17 +-
 .../org/eclipse/ui/internal/PartStack.java         |   17 +-
 .../org/eclipse/ui/internal/PerspectiveHelper.java |   25 +-
 .../eclipse/ui/internal/PerspectiveSwitcher.java   |   56 +-
 .../eclipse/ui/internal/RectangleAnimation.java    |    5 -
 .../ui/internal/ResetPerspectiveAction.java        |   63 -
 .../org/eclipse/ui/internal/SaveAction.java        |  116 -
 .../org/eclipse/ui/internal/SaveAllAction.java     |  194 -
 .../org/eclipse/ui/internal/SaveAsAction.java      |   86 -
 .../eclipse/ui/internal/SavePerspectiveAction.java |  107 -
 .../org/eclipse/ui/internal/SaveablesList.java     |   21 +-
 .../org/eclipse/ui/internal/ShowViewMenu.java      |  108 +-
 .../org/eclipse/ui/internal/ViewPane.java          |   33 +-
 .../org/eclipse/ui/internal/WWinPartService.java   |    2 +-
 .../org/eclipse/ui/internal/Workbench.java         |  113 +-
 .../org/eclipse/ui/internal/WorkbenchMessages.java |    6 +
 .../org/eclipse/ui/internal/WorkbenchPage.java     |  112 +-
 .../ui/internal/WorkbenchPartReference.java        |    6 +-
 .../org/eclipse/ui/internal/WorkbenchPlugin.java   |   56 +-
 .../org/eclipse/ui/internal/WorkbenchWindow.java   |  123 +-
 .../org/eclipse/ui/internal/WorkingSetManager.java |   21 +-
 .../ui/internal/actions/DynamicHelpAction.java     |  106 -
 .../ui/internal/actions/HelpContentsAction.java    |   96 -
 .../ui/internal/actions/HelpSearchAction.java      |   96 -
 .../activities/ExtensionActivityRegistry.java      |   87 +-
 .../activities/MutableActivityManager.java         |   54 +-
 .../internal/commands/WorkbenchCommandSupport.java |   30 +-
 .../internal/contexts/WorkbenchContextSupport.java |   22 +-
 .../internal/decorators/DecorationScheduler.java   |    9 +-
 .../eclipse/ui/internal/dialogs/AboutDialog.java   |  167 +-
 .../dialogs/CustomizePerspectiveDialog.java        |    7 +-
 .../ui/internal/dialogs/EditorsPreferencePage.java |    8 +-
 .../dialogs/FileEditorsPreferencePage.java         |   70 +-
 .../internal/dialogs/FilteredPreferenceDialog.java |    4 +-
 .../ui/internal/dialogs/NewWizardNewPage.java      |   10 +
 .../dialogs/PerspectivesPreferencePage.java        |   19 +-
 .../ui/internal/dialogs/PropertyDialog.java        |   34 +-
 .../dialogs/PropertyPageContributorManager.java    |   58 +-
 .../ui/internal/dialogs/PropertyPageNode.java      |    6 +-
 .../internal/dialogs/RegistryPageContributor.java  |  167 +-
 .../ui/internal/dialogs/StartupPreferencePage.java |   26 +-
 .../ui/internal/dialogs/WizardActivityFilter.java  |    7 +-
 .../internal/dialogs/WorkbenchEditorsDialog.java   |   78 +-
 .../dialogs/WorkbenchPreferenceDialog.java         |    8 +-
 .../internal/dialogs/WorkbenchWizardElement.java   |    7 +-
 .../dialogs/WorkingSetSelectionDialog.java         |   10 +-
 .../org/eclipse/ui/internal/dnd/SwtUtil.java       |   64 +-
 .../ui/internal/handlers/AbstractSaveHandler.java  |   86 +
 .../ui/internal/handlers/CloseAllSavedHandler.java |  136 +
 .../ui/internal/handlers/DirtyStateTracker.java    |  166 +
 .../ui/internal/handlers/DynamicHelpHandler.java   |   35 +
 .../ui/internal/handlers/HelpContentsHandler.java  |   35 +
 .../ui/internal/handlers/HelpSearchHandler.java    |   35 +
 .../eclipse/ui/internal/handlers/IntroHandler.java |   75 +
 .../ui/internal/handlers/LockToolBarHandler.java   |   50 +
 .../internal/handlers/ResetPerspectiveHandler.java |   93 +
 .../ui/internal/handlers/SaveAllHandler.java       |   88 +
 .../ui/internal/handlers/SaveAsHandler.java        |   67 +
 .../eclipse/ui/internal/handlers/SaveHandler.java  |   96 +
 .../internal/handlers/SavePerspectiveHandler.java  |  113 +
 .../ui/internal/handlers/WizardHandler.java        |   18 +-
 .../ui/internal/help/WorkbenchHelpSystem.java      |    3 +
 .../ui/internal/keys/BindingPersistence.java       |    5 +-
 .../eclipse/ui/internal/keys/BindingService.java   |   55 +-
 .../internal/keys/KeysPreferenceFiltersDialog.java |   19 +
 .../internal/keys/NewKeysPreferenceMessages.java   |    1 +
 .../ui/internal/keys/NewKeysPreferencePage.java    |   14 +-
 .../internal/keys/NewKeysPreferencePage.properties |    5 +-
 .../ui/internal/keys/model/ContextModel.java       |   30 +-
 .../ui/internal/keys/model/KeyController.java      |    9 +-
 .../eclipse/ui/internal/layout/IWindowTrim.java    |    8 +-
 .../menus/DynamicMenuContributionItem.java         |   72 +
 .../menus/DynamicToolBarContributionItem.java      |   72 +
 .../org/eclipse/ui/internal/messages.properties    |   19 +-
 .../org/eclipse/ui/internal/misc/Policy.java       |    5 +-
 .../org/eclipse/ui/internal/part/StatusPart.java   |   14 +-
 .../AbstractTableInformationControl.java           |   21 +-
 .../ui/internal/presentations/SystemMenuMove.java  |    3 +
 .../defaultpresentation/DefaultPartList.java       |    4 +-
 .../eclipse/ui/internal/progress/FinishedJobs.java |   51 +-
 .../org/eclipse/ui/internal/progress/JobInfo.java  |   15 +
 .../internal/progress/ProgressAnimationItem.java   |   26 +-
 .../progress/ProgressMonitorFocusJobDialog.java    |   26 +-
 .../internal/progress/TaskBarProgressManager.java  |   60 +
 .../internal/quickaccess/PerspectiveProvider.java  |   15 +-
 .../internal/quickaccess/PreferenceProvider.java   |   16 +-
 .../ui/internal/quickaccess/QuickAccessDialog.java |   55 +-
 .../internal/quickaccess/QuickAccessMessages.java  |    3 +-
 .../ui/internal/quickaccess/ViewElement.java       |   82 +-
 .../ui/internal/quickaccess/ViewProvider.java      |   75 +-
 .../ui/internal/quickaccess/WizardProvider.java    |   13 +-
 .../ui/internal/quickaccess/messages.properties    |    3 +-
 .../ui/internal/registry/EditorRegistry.java       |   46 +-
 .../registry/PropertyPagesRegistryReader.java      |   17 +-
 .../eclipse/ui/internal/registry/ViewRegistry.java |   26 +-
 .../internal/services/WorkbenchSourceProvider.java |    7 +-
 .../statushandlers/DefaultDetailsArea.java         |   36 +-
 .../eclipse/ui/internal/themes/CascadingTheme.java |    7 +-
 .../themes/ColorsAndFontsPreferencePage.java       |  434 +-
 .../themes/ColorsAndFontsPreferencePage.properties |    4 +-
 .../eclipse/ui/internal/themes/ThemeRegistry.java  |   20 +-
 .../internal/tweaklets/DummyTitlePathUpdater.java  |   26 +
 .../ui/internal/tweaklets/TabBehaviourMRU.java     |   13 +-
 .../ui/internal/tweaklets/TitlePathUpdater.java    |   35 +
 .../org/eclipse/ui/internal/util/PrefUtil.java     |   18 +-
 .../wizards/preferences/WizardPreferencesPage.java |   14 +-
 .../org/eclipse/ui/intro/IIntroPart.java           |    4 +-
 .../org/eclipse/ui/keys/SWTKeySupport.java         |    5 +-
 .../eclipse/ui/menus/CommandContributionItem.java  |   48 +-
 .../Eclipse UI/org/eclipse/ui/menus/MenuUtil.java  |    9 +
 .../org/eclipse/ui/model/IWorkbenchAdapter3.java   |   37 +
 .../org/eclipse/ui/model/WorkbenchAdapter.java     |   21 +-
 .../eclipse/ui/model/WorkbenchLabelProvider.java   |   67 +-
 .../org/eclipse/ui/part/MultiPageEditorSite.java   |    7 +-
 .../Eclipse UI/org/eclipse/ui/part/PageBook.java   |   32 +-
 .../org/eclipse/ui/part/PageBookView.java          |    2 +-
 .../statushandlers/AbstractStatusAreaProvider.java |   28 +-
 .../org.eclipse.ui.workbench/META-INF/MANIFEST.MF  |    6 +-
 eclipse/plugins/org.eclipse.ui/.options            |    8 +-
 .../plugins/org.eclipse.ui/.settings/.api_filters  |   19 +
 .../plugins/org.eclipse.ui/META-INF/MANIFEST.MF    |    2 +-
 .../org.eclipse.ui/buildnotes_workbench.html       |  597 ++-
 eclipse/plugins/org.eclipse.ui/plugin.properties   |    9 +-
 eclipse/plugins/org.eclipse.ui/plugin.xml          |  106 +-
 .../plugins/org.eclipse.ui/schema/actionSets.exsd  |    4 +-
 .../plugins/org.eclipse.ui/schema/commands.exsd    |    4 +-
 .../plugins/org.eclipse.ui/schema/popupMenus.exsd  |    2 +-
 .../org.eclipse.ui/schema/propertiesView.exsd      |    4 +-
 .../org.eclipse.ui/schema/propertyPages.exsd       |   85 +-
 .../org.eclipse.ui/schema/statusHandlers.exsd      |    4 +-
 eclipse/plugins/org.eclipse.ui/schema/themes.exsd  |    4 +-
 .../plugins/org.eclipse.ui/schema/viewActions.exsd |    4 +-
 .../ui/internal/UIPreferenceInitializer.java       |    4 +-
 .../org.eclipse.update.core/META-INF/MANIFEST.MF   |    7 +-
 .../org.eclipse.update.core/Scrapbook.jpage        |  431 --
 .../org.eclipse.update.core/plugin.properties      |    2 +-
 .../eclipse/update/internal/core/UpdateCore.java   |    4 +-
 .../internal/operations/OperationValidator.java    |  711 ++-
 .../update/internal/verifier/PlanVerifier.java     |   30 -
 .../META-INF/ECLIPSEF.RSA                          |  Bin 5639 -> 5639 bytes
 .../META-INF/ECLIPSEF.SF                           |   10 +-
 .../META-INF/MANIFEST.MF                           |    2 +-
 .../META-INF/ECLIPSEF.RSA                          |  Bin 5639 -> 0 bytes
 .../META-INF/ECLIPSEF.SF                           |   20 -
 .../META-INF/MANIFEST.MF                           |   46 -
 .../about.html                                     |   90 -
 .../about_files/cpl-v10.html                       |  125 -
 .../plugin.properties                              |   13 -
 .../META-INF/ECLIPSEF.RSA                          |  Bin 0 -> 5639 bytes
 .../META-INF/ECLIPSEF.SF                           |   20 +
 .../META-INF/MANIFEST.MF                           |   48 +
 .../META-INF/eclipse.inf                           |    0
 .../about.html                                     |   90 +
 .../about_files}/cpl-v10.html                      |    0
 .../plugin.properties                              |   12 +
 eclipse/sourceReferences.properties                |  538 +-
 efj.sh                                             |    5 +
 generateAdditionalPlatforms.xml                    |    4 +-
 .../plugins/org.apache.lucene/build.xml            |  197 +
 .../plugins/org.eclipse.ant.core/build.xml         |  437 ++
 .../plugins/org.eclipse.core.contenttype/build.xml |  334 +
 .../plugins/org.eclipse.core.expressions/build.xml |  354 +
 .../plugins/org.eclipse.core.jobs/build.xml        |  296 +
 .../plugins/org.eclipse.core.net/build.xml         |  330 +
 .../build.xml                                      |  295 +
 .../build.xml                                      |  376 +
 .../plugins/org.eclipse.core.runtime/build.xml     |  333 +
 .../plugins/org.eclipse.core.variables/build.xml   |  326 +
 .../plugins/org.eclipse.ecf.filetransfer/build.xml |  337 +
 .../plugins/org.eclipse.ecf.identity/build.xml     |  321 +
 .../build.xml                                      |  393 ++
 .../build.xml                                      |  388 +
 .../build.xml                                      |  362 +
 .../build.xml                                      |  377 +
 .../plugins/org.eclipse.ecf.ssl/build.xml          |  314 +
 generatedScripts/plugins/org.eclipse.ecf/build.xml |  334 +
 .../plugins/org.eclipse.equinox.app/build.xml      |  327 +
 .../plugins/org.eclipse.equinox.common/build.xml   |  291 +
 .../org.eclipse.equinox.concurrent/build.xml       |  297 +
 .../build.xml                                      |  300 +
 .../org.eclipse.equinox.frameworkadmin/build.xml   |  295 +
 .../org.eclipse.equinox.http.jetty_2.0.0/build.xml |  320 +
 .../org.eclipse.equinox.http.servlet/build.xml     |  296 +
 .../plugins/org.eclipse.equinox.launcher/build.xml |  266 +
 .../build.xml                                      |  337 +
 .../org.eclipse.equinox.p2.console/build.xml       |  348 +
 .../plugins/org.eclipse.equinox.p2.core/build.xml  |  285 +
 .../org.eclipse.equinox.p2.director.app/build.xml  |  503 ++
 .../org.eclipse.equinox.p2.director/build.xml      |  345 +
 .../org.eclipse.equinox.p2.engine/build.xml        |  338 +
 .../build.xml                                      |  350 +
 .../org.eclipse.equinox.p2.jarprocessor/build.xml  |  387 +
 .../build.xml                                      |  442 ++
 .../org.eclipse.equinox.p2.metadata/build.xml      |  290 +
 .../build.xml                                      |  516 ++
 .../org.eclipse.equinox.p2.publisher/build.xml     |  353 +
 .../build.xml                                      |  527 ++
 .../org.eclipse.equinox.p2.repository/build.xml    |  327 +
 .../build.xml                                      |  390 ++
 .../build.xml                                      |  339 +
 .../org.eclipse.equinox.p2.updatesite/build.xml    |  376 +
 .../org.eclipse.equinox.preferences/build.xml      |  314 +
 .../plugins/org.eclipse.equinox.registry/build.xml |  324 +
 .../plugins/org.eclipse.equinox.security/build.xml |  308 +
 .../build.xml                                      |  308 +
 .../build.xml                                      |  291 +
 .../plugins/org.eclipse.help.base/build.xml        |  552 ++
 .../plugins/org.eclipse.help/build.xml             |  360 +
 .../plugins/org.eclipse.osgi.services/build.xml    |  374 +
 .../plugins/org.eclipse.osgi/build.xml             |  370 +
 .../plugins/org.eclipse.pde.build/build.xml        |  597 ++
 .../org.eclipse.update.configurator/build.xml      |  306 +
 .../plugins/org.eclipse.update.core/build.xml      |  463 ++
 jdtnonosgidependencies.properties                  |    2 +-
 nonosgidependencies.properties                     |   40 +-
 patches/bz318912.patch                             |   20 -
 patches/bz319476-compile-jar-in-jar-loader.patch   |  197 -
 patches/donotstorebuildlogsinfiles.patch           |   11 +-
 patches/eclipse-add-archs-executable.patch         |    7 +-
 patches/eclipse-add-archs-filesystem.patch         |   23 +-
 patches/eclipse-add-archs-swt.patch                |   64 +-
 patches/eclipse-add-ppc64-sparc64-s390-s390x.patch |    6 +-
 patches/eclipse-addArchesAnd64bitSWT.patch         |    2 +-
 patches/eclipse-buildswtnatives.patch              |    2 +-
 ...clipse-core-resources-compilation-profile.patch |   10 +
 patches/eclipse-equinox-util.patch                 |    9 +
 patches/eclipse-fix-osgi-compiler-settings.patch   |   13 +
 patches/eclipse-no-jetty5.patch                    |    2 +-
 .../eclipse-nosourcebundlesfordependencies.patch   |   54 +-
 patches/eclipse-swt-buildagainstxulrunner.patch    |    2 +-
 patches/eclipse-swt-compile-xpt.patch              |   31 -
 patches/eclipse-use-newer-commons-codec.patch      |   27 -
 patches/eclipse-xpcom-h.patch                      |   14 +
 patches/java-home.patch                            |   15 -
 patches/junit4-nochecksum.patch                    |   22 -
 patches/no-gnome-vfs.patch                         |   18 +-
 patches/remove-old-ant-plugins.patch               |   14 +
 patches/tests-noequinoxregiontests.patch           |   16 +
 patches/tests-org.eclipse.ant.tests.core.patch     |   20 +-
 patches/tests-org.eclipse.ant.tests.ui.patch       |   21 +-
 patches/webkitgtk.patch                            |   11 -
 pdebuild.properties                                |    6 +-
 pdebuild.xml                                       |    9 +-
 pdebuild/eclipse-copy-platform.sh                  |    4 +-
 pdebuild/eclipse-pdebuild.sh                       |    6 +-
 regenerateBootstrapFiles.sh                        |    6 +-
 runtests.sh                                        |    3 +
 sdkdependencies.properties                         |    2 +-
 .../eclipsebuild/SymlinkInstalledOSGiJars.java     |    2 +-
 .../eclipsebuild/SymlinkNonOSGiJars.java           |    2 +-
 .../linuxtools/eclipsebuild/SymlinkOSGiJars.java   |    2 +-
 9251 files changed, 344650 insertions(+), 210064 deletions(-)

diff --git a/.project b/.project
new file mode 100644
index 0000000..13c5398
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>eclipse-build</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/ChangeLog b/ChangeLog
index 1e78614..99301c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,59 @@
+2011-08-05  Niels Thykier  <niels at thykier.net>
+
+	* build.xml: Re-enabled four patches for adding extra architectures to eclipse.
+	* patches/donotstorebuildlogsinfiles.patch: Refreshed to apply cleanly.
+	* patches/eclipse-add-archs-executable.patch: Ditto
+	* patches/eclipse-add-archs-filesystem.patch: Ditto
+	* patches/eclipse-add-archs-swt.patch: Ditto
+	* patches/eclipse-add-ppc64-sparc64-s390-s390x.patch: Ditto
+	* patches/eclipse-addArchesAnd64bitSWT.patch: Ditto
+	* patches/eclipse-buildswtnatives.patch: Ditto
+	* patches/eclipse-no-jetty5.patch: Ditto
+	* patches/eclipse-swt-buildagainstxulrunner.patch: Ditto, though this patch
+	was not re-enabled.
+
+2011-08-02  Sami Wagiaalla  <swagiaal at redhat.com>
+
+	* build.xml: Check if eclipse-build-config and eclipse-build-feature are present
+	before creating symlinks.
+
+2011-07-22  Sami Wagiaalla  <swagiaal at redhat.com>
+
+	* build.xml: Automatically create symbolic links in the build directory
+	to  eclipse-build-config eclipse-build-feature
+
+2011-07-18  Sami Wagiaalla  <swagiaal at redhat.com>
+
+	* task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkInstalledOSGiJars.java (execute):
+	Trim file names before constructing file objects.
+	* task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkOSGiJars.java (execute): Ditto.
+	* task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkNonOSGiJars.java (execute): Ditto.
+
+2011-04-08  Alexander Kurtakov  <akurtako at redhat.com>
+
+	* patches/no-gnome-vfs.patch: Fix Program.launch(executable) when libswt-gnome is missing.
+
+2011-04-06  Chris Aniszczyk <zx at redhat.com>
+
+        * patches/eclipse-relax-sat4j-deps.patch: New file.
+        * build.xml: Apply patch to relax sat4j deps.
+
+2011-04-06  Alexander Kurtakov  <akurtako at redhat.com>
+
+	* buildEclipseBuildSource.sh: Make the tarball use xz compression.
+    * patches/remove-old-ant-plugins.patch: New file.
+	* build.xml: Apply patch to remove old ant plugins from ant bundle manifest.
+
+2011-04-05  Alexander Kurtakov  <akurtako at redhat.com>
+	Fix for webkit crash. Thanks to Sami Wagiaalla (bz#341640).
+	* patches/webkit-missing-hearder.patch: New file.
+	* build.xml: Apply new patch to fix webkit crash.
+
+2011-04-04  Alexander Kurtakov  <akurtako at redhat.com>
+
+	* dependencies.properties: Use jsp-api from tomcat6.
+	* nonosgidependencies.properties: Drop ant-trax and ant-nodeps - they are gone since Ant 1.8.2.
+
 2011-03-28  Alexander Kurtakov  <akurtako at redhat.com>
 
 	* patches/webkitgtk.patch: Change patch to use pkg-config instead of hardcoding options.
diff --git a/bootstrap/configuration/config.ini b/bootstrap/configuration/config.ini
index 134afb1..8164013 100644
--- a/bootstrap/configuration/config.ini
+++ b/bootstrap/configuration/config.ini
@@ -27,6 +27,7 @@ osgi.bundles=com.ibm.icu,\
              org.eclipse.equinox.p2.metadata,\
              org.eclipse.equinox.p2.metadata.repository,\
              org.eclipse.equinox.p2.publisher,\
+             org.eclipse.equinox.p2.publisher.eclipse,\
              org.eclipse.equinox.p2.updatesite, \
              org.eclipse.equinox.preferences,\
              org.eclipse.equinox.registry,\
@@ -51,6 +52,7 @@ osgi.bundles=com.ibm.icu,\
              org.eclipse.equinox.http.jetty,\
              org.eclipse.core.expressions,\
              org.eclipse.help,\
+             org.apache.lucene.core,\
              org.apache.lucene.analysis,\
              org.apache.lucene,\
              org.mortbay.jetty.util,\
diff --git a/build.properties b/build.properties
index 96844d8..32143b7 100644
--- a/build.properties
+++ b/build.properties
@@ -1,10 +1,10 @@
 #baseLocation=${basedir}/bootstrap
 # Note:  this is also in pdebuild.properties
-buildId=M20110210-1200
-buildTag=vI20100603-1500
-label=3.6.2
-testsBuildLabel=3.6.2
-testframework=org.eclipse.test_3.3.0
+buildId=I20110613-1736
+buildTag=I20110613-1736
+label=3.7.0
+testsBuildLabel=3.7.0
+testframework=org.eclipse.test_3.3.100
 p2.director.version=${testsBuildLabel}
 testsBuildId=v20100211
 featureToBuild=eclipse-build-feature
diff --git a/build.xml b/build.xml
index cf3d05d..fe87f7c 100644
--- a/build.xml
+++ b/build.xml
@@ -140,15 +140,15 @@
 	</target>
 
 	<target name="fetch" unless="sdkSourceTarballPresent">
-		<fail message="SDK source tarball is not present.  Please either download a file such as eclipse-3.6.1-src.tar.bz2 from http://www.eclipse.org/downloads/download.php?file=/technology/linuxtools/eclipse-build or generate one by running ./buildSDKSource.sh." />
+		<fail message="SDK source tarball is not present.  Please either download a file such as eclipse-3.6.1-src.tar.bz2 from http://download.eclipse.org/technology/linuxtools/eclipse-build/ or generate one by running ./buildSDKSource.sh." />
 	</target>
 
 	<target name="fetchTestSources" unless="testsSourcePresent">
-		<fail message="SDK tests source tarball is not present.  Please either download a file such as eclipse-sdktests-3.6.1-sources.tar.bz2 from http://www.eclipse.org/downloads/download.php?file=/technology/linuxtools/eclipse-build or generate one by running ./buildSDKSource.sh." />
+		<fail message="SDK tests source tarball is not present.  Please either download a file such as eclipse-sdktests-3.6.1-sources.tar.bz2 from http://download.eclipse.org/technology/linuxtools/eclipse-build/ or generate one by running ./buildSDKSource.sh." />
 	</target>
 
 	<target name="fetchTestScripts" unless="testsScriptsPresent">
-		<fail message="Scripts for the SDK tests tarball is not present.  Please either download a file such as eclipse-sdktests-3.6.1-scripts.tar.bz2 from http://www.eclipse.org/downloads/download.php?file=/technology/linuxtools/eclipse-build or generate one by running ./buildSDKSource.sh." />
+		<fail message="Scripts for the SDK tests tarball is not present.  Please either download a file such as eclipse-sdktests-3.6.1-scripts.tar.bz2 from http://download.eclipse.org/technology/linuxtools/eclipse-build/ or generate one by running ./buildSDKSource.sh." />
 	</target>
 
 	<target name="extractBuildXmls" if="scriptsPresent">
@@ -173,7 +173,19 @@
 		</exec>
 	</target>
 
-	<target name="unpack" depends="fetch,setLibDir" unless="unpack.complete">
+	<available file="${basedir}/eclipse-build-feature" property="buildFeaturePresent" value="true" />
+	<target name="symlinkBuildFeature" unless="buildFeaturePresent">
+	  <echo message="creating link to feature dir (../eclipse-build-feature)" />
+	  <symlink link="${basedir}/eclipse-build-feature" resource="${basedir}/../eclipse-build-feature"/>
+	</target>
+
+	<available file="${basedir}/eclipse-build-config" property="buildConfigPresent" value="true" />
+	<target name="symlinkBuildConfig" unless="buildConfigPresent">
+	  <echo message="creating link to config dir (../eclipse-build-config)" />
+	  <symlink link="${basedir}/eclipse-build-config" resource="${basedir}/../eclipse-build-config"/>
+	</target>
+
+	<target name="unpack" depends="fetch,setLibDir,symlinkBuildFeature,symlinkBuildConfig" unless="unpack.complete">
 		<delete dir="${topBuildDir}" />
 		<mkdir dir="${topBuildDir}" />
 
@@ -198,6 +210,7 @@
 		<copy todir="${buildConfigs}/eclipse-build-config">
 			<fileset dir="eclipse-build-config" />
 		</copy>
+
 		<echo message="Copying eclipse-build builder" />
 		<copy todir="${buildDirectory}/features/eclipse-build-feature">
 			<fileset dir="eclipse-build-feature" />
@@ -292,7 +305,9 @@
 	<target name="applyPatches" depends="insertBuildId" unless="patch.complete">
 		<!-- eclipse-build-only patches -->
 		<patch patchfile="${basedir}/patches/eclipse-buildswtnatives.patch" dir="${buildDirectory}" strip="1" />
+		<!--
 		<patch patchfile="${basedir}/patches/eclipse-swt-buildagainstxulrunner.patch" dir="${buildDirectory}" strip="1" />
+		-->
 		<patch patchfile="${basedir}/patches/eclipse-addArchesAnd64bitSWT.patch" dir="${buildDirectory}" strip="1" />
 		<patch patchfile="${basedir}/patches/eclipse-add-archs-filesystem.patch" dir="${buildDirectory}" strip="1" />
 		<patch patchfile="${basedir}/patches/eclipse-add-archs-swt.patch" dir="${buildDirectory}" strip="1" />
@@ -304,28 +319,22 @@
 		<patch patchfile="${basedir}/patches/gnomeproxy-makefile.patch" dir="${buildDirectory}" strip="1" />
 		<patch patchfile="${basedir}/patches/eclipse-no-jetty5.patch" dir="${buildDirectory}" strip="1" />
 		<patch patchfile="${basedir}/patches/eclipse-nosourcebundlesfordependencies.patch" dir="${buildDirectory}" strip="1" />
-		<patch patchfile="${basedir}/patches/eclipse-use-newer-commons-codec.patch" dir="${buildDirectory}" strip="1" />
-		<patch patchfile="${basedir}/patches/junit4-nochecksum.patch" dir="${buildDirectory}" strip="0" />
-		<patch patchfile="${basedir}/patches/bz318912.patch" dir="${buildDirectory}" strip="0" />
 		<patch patchfile="${basedir}/patches/osgi-util.patch" dir="${buildDirectory}" strip="1" />
-		<patch patchfile="${basedir}/patches/eclipse-swt-compile-xpt.patch" dir="${buildDirectory}" strip="1" />
-		<patch patchfile="${basedir}/patches/no-gnome-vfs.patch" dir="${buildDirectory}" strip="0" />
+		<patch patchfile="${basedir}/patches/eclipse-xpcom-h.patch" dir="${buildDirectory}/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library"/>
 		<replace file="${buildDirectory}/plugins/org.eclipse.pde.build/templates/package-build/build.properties" token="/usr/share/eclipse" value="/usr/${libDir}/eclipse" />
 		<chmod dir="${buildDirectory}/plugins/org.eclipse.pde.build/templates/package-build" includes="*.sh" perm="a+x" />
 		<!-- end eclipse-build-only patches -->
-		<!-- back-ported patches -->
-		<patch patchfile="${basedir}/patches/bz319476-compile-jar-in-jar-loader.patch" dir="${buildDirectory}/plugins/org.eclipse.jdt.ui" strip="0" />
-		<!-- end back-ported patches -->
 		<!-- Only build for one target (bug #293952) -->
 		<copy file="${buildConfigs}/eclipse-build-config/build.properties.in" tofile="${buildConfigs}/eclipse-build-config/build.properties" />
 		<replace file="${buildConfigs}/eclipse-build-config/build.properties" token="@build_arch@" value="${buildArch}" />
-		<patch patchfile="${basedir}/patches/java-home.patch" dir="${buildDirectory}" strip="2" />
-		<patch patchfile="${basedir}/patches/webkitgtk.patch" dir="${buildDirectory}" strip="0" />
+		<patch patchfile="${basedir}/patches/eclipse-core-resources-compilation-profile.patch" dir="${buildDirectory}" strip="0" />
+		<patch patchfile="${basedir}/patches/eclipse-equinox-util.patch" dir="${buildDirectory}" strip="0" />
 		<echo file="patch-stamp" />
 	</target>
 
 	<target name="applyTestPatches" depends="unpackTests" unless="testspatch.complete">
 		<patch patchfile="${basedir}/patches/tests-noapttests.patch" dir="${testsBuildDirectory}/features/org.eclipse.sdk.tests" strip="0" />
+		<patch patchfile="${basedir}/patches/tests-noequinoxregiontests.patch" dir="${testsBuildDirectory}/features/org.eclipse.sdk.tests" strip="0" />
 		<patch patchfile="${basedir}/patches/tests-BZ295666.patch" dir="${testsBuildDirectory}" strip="0" />
 		<patch patchfile="${basedir}/patches/tests-org.eclipse.pde.ui.tests-LocalTargetDefinitionTests.patch" dir="${testsBuildDirectory}/plugins/org.eclipse.pde.ui.tests" strip="0" />
 		<patch patchfile="${basedir}/patches/tests-nop2discoverytests.patch" dir="${testsBuildDirectory}/features/org.eclipse.sdk.tests" strip="0" />
@@ -351,19 +360,27 @@
 		<symlinkOSGiJars dependencies="${basedir}/jdtdependencies.properties" topLevelDir="${buildDirectory}/plugins" manifests="${basedir}/dependencyManifests" />
 		<symlinkNonOSGiJars dependencies="${basedir}/jdtnonosgidependencies.properties" topLevelDir="${buildDirectory}/plugins" />
 		<symlinkOSGiJars dependencies="${basedir}/sdkdependencies.properties" topLevelDir="${buildDirectory}/plugins" manifests="${basedir}/dependencyManifests" />
-		<replaceregexp file="${buildDirectory}/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/MANIFEST.MF" flags="m,g,s">
+		<replaceregexp file="${buildDirectory}/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/MANIFEST.MF" flags="m,g,s">
+			<regexp pattern="^Name.*" />
+			<substitution expression="" />
+		</replaceregexp>
+		<replaceregexp file="${buildDirectory}/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/MANIFEST.MF" flags="m,g,s">
+			<regexp pattern="^SHA1-Digest.*" />
+			<substitution expression="" />
+		</replaceregexp>
+		<replaceregexp file="${buildDirectory}/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF" flags="m,g,s">
 			<regexp pattern="^Name.*" />
 			<substitution expression="" />
 		</replaceregexp>
-		<replaceregexp file="${buildDirectory}/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/MANIFEST.MF" flags="m,g,s">
+		<replaceregexp file="${buildDirectory}/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF" flags="m,g,s">
 			<regexp pattern="^SHA1-Digest.*" />
 			<substitution expression="" />
 		</replaceregexp>
-		<replaceregexp file="${buildDirectory}/plugins/org.junit_3.8.2.v20090203-1005/META-INF/MANIFEST.MF" flags="m,g,s">
+		<replaceregexp file="${buildDirectory}/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/MANIFEST.MF" flags="m,g,s">
 			<regexp pattern="^Name.*" />
 			<substitution expression="" />
 		</replaceregexp>
-		<replaceregexp file="${buildDirectory}/plugins/org.junit_3.8.2.v20090203-1005/META-INF/MANIFEST.MF" flags="m,g,s">
+		<replaceregexp file="${buildDirectory}/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/MANIFEST.MF" flags="m,g,s">
 			<regexp pattern="^SHA1-Digest.*" />
 			<substitution expression="" />
 		</replaceregexp>
@@ -602,6 +619,7 @@
 			<arg line="-Dbasedir=${productFiles}/rcpConfig" />
 			<arg line="-DbuildId=${buildId} " />
 			<arg line="-DbaseBuildPath=${buildDirectory} " />
+			<arg line="-DbaseLocation=${buildDirectory} " />
 			<arg line="-Declipse.pdebuild.scripts=${eclipse.pdebuild.scripts} " />
 			<arg line="-consolelog " />
 			<jvmarg value="-Xmx512M" />
@@ -682,7 +700,7 @@
 	<target name="provision.cvs" depends="p2prep" unless="provision.cvs.complete">
 		<echo message="Installing into:  ${provisionDir}" />
 		<antcall target="provision">
-			<param name="p2.director.installIU" value="org.eclipse.platform.ide,org.eclipse.cvs.feature.group" />
+			<param name="p2.director.installIU" value="org.eclipse.platform.ide,org.eclipse.cvs.feature.group,org.eclipse.equinox.initializer" />
 			<param name="profileName" value="PlatformProfile" />
 		</antcall>
 
@@ -730,12 +748,6 @@
 			<param name="p2.arch" value="${buildArch}" />
 			<param name="p2.repo" value="${reposource}" />
 		</antcall>
-
-		<copy todir="${provisionDir}/plugins">
-			<fileset dir="${buildDirectory}/plugins/org.eclipse.equinox.initializer">
-				<include name="org.eclipse.equinox.initializer*.jar" />
-			</fileset>
-		</copy>
 	</target>
 
 	<target name="provision.installed" depends="p2prep">
@@ -752,12 +764,6 @@
 			<param name="p2.arch" value="${buildArch}" />
 			<param name="p2.repo" value="${reposource}" />
 		</antcall>
-
-		<copy todir="${provisionDir}/plugins">
-			<fileset dir="${buildDirectory}/plugins/org.eclipse.equinox.initializer">
-				<include name="org.eclipse.equinox.initializer*.jar" />
-			</fileset>
-		</copy>
 	</target>
 
 	<target name="checkDebugAndVerbose">
@@ -912,12 +918,38 @@
 			<arg line="-application org.eclipse.equinox.p2.director " />
 			<arg line="-flavor ${p2.flavor}" />
 			<arg line="-installIU ${p2.director.installIU}" />
+			<arg line="-profile ${p2.director.profile}" />
+			<arg line="-destination ${p2.director.install.path}" />
+			<arg line="-p2.os ${p2.os}" />
+			<arg line="-p2.ws ${p2.ws}" />
+			<arg line="-p2.arch ${p2.arch}" />
 			<arg line="${p2.director.extraArgs}" />
 			<arg line="-metadatarepository file:${p2.repo}" />
 			<arg line="-artifactrepository file:${p2.repo}" />
 		</exec>
 	</target>
 
+	<target name="run.installed.director.uninstall">
+                <chmod perm="ugo+rx" file="${directorToRun}" />
+                <exec executable="${directorToRun}">
+                        <arg line="-nosplash " />
+                        <arg line="-consoleLog" />
+                        <arg line="-data ${buildworkspace} " />
+                        <arg line="-application org.eclipse.equinox.p2.director " />
+                        <arg line="-flavor ${p2.flavor}" />
+                        <arg line="-uninstallIU ${p2.director.uninstallIU}" />
+                        <arg line="-profile ${p2.director.profile}" />
+                       	<arg line="-destination ${p2.director.install.path}" />
+                        <arg line="-p2.os ${p2.os}" />
+                        <arg line="-p2.ws ${p2.ws}" />
+                        <arg line="-p2.arch ${p2.arch}" />
+                        <arg line="${p2.director.extraArgs}" />
+                        <arg line="-metadatarepository file:${p2.repo}" />
+                        <arg line="-artifactrepository file:${p2.repo}" />
+                </exec>
+        </target>
+
+
 	<target name="install" depends="provision.sdk">
 		<antcall target="installIntoDestDir">
 			<param name="profile" value="SDKProfile" />
@@ -932,15 +964,23 @@
 
 	<target name="installIntoDestDir">
 		<mkdir dir="${installationDir}" />
-		<exec executable="cp" failonerror="true">
-			<arg value="-rd" />
-			<arg value="--no-target-directory" />
-			<arg value="${provisionDir}" />
-			<arg value="${installationDir}" />
-		</exec>
+                <exec executable="rsync" failonerror="true">
+                       <arg value="-vrpl" />
+                       <arg value="--exclude=dropins" />
+                       <arg value="${provisionDir}/" />
+                       <arg value="${installationDir}/" />
+                </exec>
 
 		<!-- install desktop file -->
 		<copy file="eclipse.desktop" todir="${destDir}${prefix}/share/applications" />
+		<!-- install Eclipse Java code formatter launcher -->
+		<property name="efj" value="${destDir}${prefix}/bin/efj"/>
+		<copy file="efj.sh" todir="${efj}" />
+	    <fileset id="equinoxLauncher" dir="${installationDir}/plugins">
+	      <include name="org.eclipse.equinox.launcher_*.jar" />
+	    </fileset>
+	    <property name="launcherJar" refid="equinoxLauncher"/>
+		<replace file="${efj}/efj.sh" token="@LAUNCHER@" value="${launcherJar}"/>
 		<!-- install icons -->
 		<copy file="${buildDirectory}/plugins/org.eclipse.platform/eclipse.png" tofile="${destDir}${prefix}/share/icons/hicolor/16x16/apps/eclipse.png" />
 		<copy file="${buildDirectory}/plugins/org.eclipse.platform/eclipse32.png" tofile="${destDir}${prefix}/share/icons/hicolor/32x32/apps/eclipse.png" />
@@ -952,11 +992,6 @@
 		<!-- eclipse binary -->
 		<mkdir dir="${destDir}${prefix}/bin" />
 		<symlink link="${destDir}${prefix}/bin/eclipse" resource="../${libDir}/eclipse/eclipse" overwrite="true"/>
-		<!-- FIXME:  we really shouldn't need this anymore but at least pdebuild.sh will need to be updated -->
-		<!-- Create the "startup.jar" symlink -->
-		<fileset dir="${installationDir}/plugins" includes="org.eclipse.equinox.launcher_*" id="startupjar" />
-		<property name="startupjarpath" refid="startupjar" />
-		<symlink link="${installationDir}/startup.jar" resource="plugins/${startupjarpath}" overwrite="true"/>
 		<!-- Create the "swt.jar" and friends symlinks  -->
 		<fileset dir="${installationDir}/plugins" includes="org.eclipse.swt.gtk.linux.${buildArch}_*" id="swtjar" />
 		<property name="swtjarpath" refid="swtjar" />
@@ -988,6 +1023,26 @@
 			<jvmarg value="-Dosgi.sharedConfiguration.area=${installationDir}/configuration" />
 		</java>
 
+		<!-- remove the initializer -->
+		<property name="directorToRun" value="${installationDir}/eclipse" />
+                <antcall target="run.installed.director.uninstall">
+                        <param name="p2.director.uninstallIU" value="org.eclipse.equinox.initializer" />
+                        <param name="p2.director.profile" value="PlatformProfile" />
+                        <param name="p2.director.install.path" value="${installationDir}" />
+                        <param name="p2.director.extraArgs" value="-purgeHistory" />
+			<param name="p2.os" value="linux" />
+                        <param name="p2.ws" value="gtk" />
+                        <param name="p2.arch" value="${buildArch}" />
+                        <param name="p2.repo" value="${installationDir}" />
+                </antcall>
+
+		<!-- copy PDE and JDT to dropins -->
+                <exec executable="rsync" failonerror="true">
+                       <arg value="-vrpl" />
+                       <arg value="${provisionDir}/dropins/" />
+                       <arg value="${installationDir}/dropins/" />
+                </exec>
+
 		<!-- Remove unnecessary configuration data -->
 		<delete dir="${installationDir}/configuration/org.eclipse.core.runtime" />
 		<delete dir="${installationDir}/configuration/org.eclipse.equinox.app" />
@@ -1175,11 +1230,11 @@
 
 	<target name="moveNewStuffToDropins">
 		<property name="dropinsDirectory" value="${orig}/dropins/${dropinsDir}" />		
-		<move todir="${dropinsDirectory}/features" includeemptydirs="true">
-			<fileset dir="${new}/features" id="newFeatures.fileset">
-				<present present="srconly" targetdir="${orig}/features"/>
-			</fileset>
-		</move>
+                <move todir="${dropinsDirectory}/features" includeemptydirs="true">
+                        <fileset dir="${new}/features" id="newFeatures.fileset">
+                                <present present="srconly" targetdir="${orig}/features"/>
+                        </fileset>
+                </move>
 		<move todir="${dropinsDirectory}/plugins" includeemptydirs="true">
 			<fileset dir="${new}/plugins" id="newPlugins.fileset">
 				<present present="srconly" targetdir="${orig}/plugins"/>
diff --git a/buildEclipseBuildSource.sh b/buildEclipseBuildSource.sh
old mode 100644
new mode 100755
index da0fc02..e8b37c8
--- a/buildEclipseBuildSource.sh
+++ b/buildEclipseBuildSource.sh
@@ -45,7 +45,7 @@ rm -fr eclipse-build-${eclipsebuildTag}
 cd ..
 
 
-tar caf eclipse-build-${eclipsebuildTag}.tar.bz2 eclipse-build-${eclipsebuildTag}
+tar caf eclipse-build-${eclipsebuildTag}.tar.xz eclipse-build-${eclipsebuildTag}
 cd "${baseDir}"
 
-echo "Built ${workDirectory}/eclipse-build-${eclipsebuildTag}.tar.bz2"
+echo "Built ${workDirectory}/eclipse-build-${eclipsebuildTag}.tar.xz"
diff --git a/buildSDKSource.sh b/buildSDKSource.sh
old mode 100644
new mode 100755
index 677846c..9f86ca0
--- a/buildSDKSource.sh
+++ b/buildSDKSource.sh
@@ -6,12 +6,11 @@ workDirectory=
 baseBuilder=
 eclipseBuilder=
 
-buildID="R3_6_2"
-baseBuilderTag="R3_6_1"
-eclipseBuilderTag="R3_6_1"
-label="3.6.2"
+buildID="R3_7"
+baseBuilderTag="R3_7"
+eclipseBuilderTag="R3_7"
+label="3.7.0"
 fetchTests="yes"
-ecfTag="R-Release_3_3-sdk_feature-22-2010_09_13"
 
 usage="usage:  <build ID> [-workdir <working directory>] [-baseBuilder <path to org.eclipse.releng.basebuilder checkout>] [-eclipseBuilder <path to org.eclipse.releng.eclipsebuilder checkout>] [-baseBuilderTag <org.eclipse.releng.basebuilder tag to check out>] [-noTests]"
 
@@ -124,17 +123,19 @@ cd "${fetchDirectory}"
 # Extract osgi.util src for rebuilding
 pushd plugins/org.eclipse.osgi.util
   unzip -q -d src src.zip
+  # Remove pre-compiled class files and the source.zip
+  rm -r org/ src.zip
 popd
 
 git clone git://git.eclipse.org/gitroot/ecf/org.eclipse.ecf.git
 cd org.eclipse.ecf
-git archive --format=tar --prefix=ecf-3.4.0/ R-Release_3_4-sdk_feature-8_2010-10-29_09-13-51 | gzip >ecf-3.4.0.tar.gz
-cp ecf-3.4.0.tar.gz ../
+git archive --format=tar --prefix=ecf-3.5.0/ R-Release_HEAD-sdk_feature-19_2011-03-13_18-40-16 | gzip >ecf-3.5.0.tar.gz
+cp ecf-3.5.0.tar.gz ../
 cd ..
 rm -fr org.eclipse.ecf
-tar -xf ecf-3.4.0.tar.gz
-rm -fr ecf-3.4.0.tar.gz
-cd ecf-3.4.0
+tar -xf ecf-3.5.0.tar.gz
+rm -fr ecf-3.5.0.tar.gz
+cd ecf-3.5.0
 
 # Source for ECF bthat aren't part of SDK map files
 for f in \
@@ -155,7 +156,7 @@ for f in \
 mv  providers/bundles/$f ../plugins;
 done
 cd ..
-rm -fr ecf-3.4.0
+rm -fr ecf-3.5.0
 
 cd "${fetchDirectory}"
 # We don't want to re-ship these as those bundles inside will already be
diff --git a/dependencies.properties b/dependencies.properties
index 7b91808..fdd463f 100644
--- a/dependencies.properties
+++ b/dependencies.properties
@@ -1,15 +1,15 @@
-com.ibm.icu_4.2.1.v20100412.jar=/usr/lib/eclipse/plugins/com.ibm.icu_4.2.1.v20100412.jar:/usr/lib64/eclipse/plugins/com.ibm.icu_4.2.1.v20100412.jar:/usr/share/java/com.ibm.icu-4.2.jar:/usr/share/java/com.ibm.icu.jar
+com.ibm.icu_4.4.2.v20110208.jar=/usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar:/usr/lib64/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar:/usr/share/java/com.ibm.icu-4.4.jar:/usr/share/java/com.ibm.icu.jar
 com.jcraft.jsch_0.1.41.v200903070017.jar=/usr/share/java/jsch.jar
-javax.servlet_2.5.0.v200910301333.jar=/usr/share/java/tomcat6-servlet-2.5-api.jar:/usr/share/java/servlet-api-2.5.jar
-javax.servlet.jsp_2.0.0.v200806031607.jar=/usr/share/java/tomcat5-jsp-2.0-api.jar:/usr/share/java/jsp-api-2.0.jar
-org.apache.commons.codec_1.3.0.v20080530-1600.jar=/usr/share/java/commons-codec.jar
+javax.servlet_2.5.0.v201103041518.jar=/usr/share/java/tomcat6-servlet-2.5-api.jar:/usr/share/java/servlet-api-2.5.jar
+javax.servlet.jsp_2.0.0.v201101211617.jar=/usr/share/java/tomcat6-jsp-2.1-api.jar:/usr/share/java/jsp-api-2.0.jar
+org.apache.commons.codec_1.3.0.v201101211617.jar=/usr/share/java/commons-codec.jar
 org.apache.commons.el_1.0.0.v200806031608.jar=/usr/share/java/commons-el.jar
 org.apache.commons.httpclient_3.1.0.v201005080502.jar=/usr/share/java/commons-httpclient.jar
-org.apache.commons.logging_1.0.4.v201005080501.jar=/usr/share/java/commons-logging.jar
+org.apache.commons.logging_1.0.4.v201101211617.jar=/usr/share/java/commons-logging.jar
 org.apache.jasper_5.5.17.v200903231320.jar=/usr/share/eclipse/plugins/org.apache.jasper_5.5.17.v200706111724.jar:/usr/share/java/jasper-5.5.26.jar
-org.apache.lucene_1.9.1.v20100518-1140.jar=/usr/share/java/lucene.jar:/usr/share/java/lucene-core.jar
-org.apache.lucene.analysis_1.9.1.v20100518-1140.jar=/usr/share/java/lucene-contrib/lucene-analyzers.jar:/usr/share/java/lucene-analyzers.jar
+org.apache.lucene.core_2.9.1.v201101211721.jar=/usr/share/java/lucene.jar:/usr/share/java/lucene-core.jar
+org.apache.lucene.analysis_2.9.1.v201101211721.jar=/usr/share/java/lucene-contrib/lucene-analyzers.jar:/usr/share/java/lucene-analyzers.jar
 org.mortbay.jetty.util_6.1.23.v201004211559.jar=/usr/share/java/jetty/jetty-util.jar:/usr/share/java/jetty-util.jar
 org.mortbay.jetty.server_6.1.23.v201004211559.jar=/usr/share/java/jetty/jetty.jar:/usr/share/java/jetty.jar
-org.sat4j.core_2.2.0.v20100429.jar=/usr/share/java/org.sat4j.core.jar:/usr/share/sat4j/org.sat4j.core.jar
-org.sat4j.pb_2.2.0.v20100429.jar=/usr/share/java/org.sat4j.pb.jar:/usr/share/sat4j/org.sat4j.pb.jar
+org.sat4j.core_2.3.0.v20110329.jar=/usr/share/java/org.sat4j.core.jar:/usr/share/sat4j/org.sat4j.core.jar
+org.sat4j.pb_2.3.0.v20110329.jar=/usr/share/java/org.sat4j.pb.jar:/usr/share/sat4j/org.sat4j.pb.jar
diff --git a/dependencyManifests/com.ibm.icu_4.2.1.v20100412.jar/META-INF/MANIFEST.MF b/dependencyManifests/com.ibm.icu_4.2.1.v20100412.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index daeb971..0000000
--- a/dependencyManifests/com.ibm.icu_4.2.1.v20100412.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,4238 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
-Bundle-SymbolicName: com.ibm.icu; singleton:=true
-Eclipse-LazyStart: true
-Bundle-Version: 4.2.1.v20100412
-Export-Package: com.ibm.icu.lang;base=true;full=true;version="4.2.1.1"
- ,com.ibm.icu.math;base=true;full=true;version="4.2.1.1",com.ibm.icu.t
- ext;base=true;full=true;version="4.2.1.1",com.ibm.icu.util;base=true;
- full=true;version="4.2.1.1",com.ibm.icu.impl;x-internal:=true,com.ibm
- .icu.impl.data;x-internal:=true,com.ibm.icu.impl.data.icudt42b;x-inte
- rnal:=true,com.ibm.icu.impl.data.icudt42b.brkitr;x-internal:=true,com
- .ibm.icu.impl.data.icudt42b.coll;x-internal:=true,com.ibm.icu.impl.da
- ta.icudt42b.rbnf;x-internal:=true,com.ibm.icu.impl.data.icudt42b.tran
- slit;x-internal:=true
-Bundle-ClassPath: icu-jse4.jar,icu-data.jar,.
-Bundle-Vendor: %providerName
-Bundle-Name: %pluginName
-Eclipse-ExtensibleAPI: true
-Bundle-Copyright: Licensed Materials - Property of IBM (C) Copyright I
- BM Corp. 2000, 2010. All Rights Reserved. IBM is a registered tradema
- rk of IBM Corp.
-Bundle-ManifestVersion: 2
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/is.res
-SHA1-Digest: j2CvJA3Cm/aqqU6CYhr47wtC2L8=
-
-Name: com/ibm/icu/text/EscapeTransliterator.class
-SHA1-Digest: YXPxHZn0uCu6crcG4IqVG3oVBnU=
-
-Name: com/ibm/icu/impl/data/icudt42b/hu.res
-SHA1-Digest: 3JfUzYiRweroYW/plfnvsLDQb1I=
-
-Name: com/ibm/icu/text/NumberFormat$SimpleNumberFormatFactory.class
-SHA1-Digest: E6rM+nNhOSNMheNR4AiKxfCrgSo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar.res
-SHA1-Digest: PwC+9Pf6YSgK3V57C+Sjfqnpr3I=
-
-Name: com/ibm/icu/impl/duration/impl/Utils$ChineseDigits.class
-SHA1-Digest: xbghwuZOvqj0GdC1C/PXv1XcH0I=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/zh.res
-SHA1-Digest: kwZeMD+wckT1m/ZkisNoWScHlHQ=
-
-Name: com/ibm/icu/impl/IllegalIcuArgumentException.class
-SHA1-Digest: 0yNJLTuTzmaf61MWdRlz8OCXFiY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/nb.res
-SHA1-Digest: XcezM2Ezj9IKqt2x1dUw8UTqXB8=
-
-Name: com/ibm/icu/text/UnicodeCompressor.class
-SHA1-Digest: MamRaHWdqY/NzE+Pr/pRuFcw/k4=
-
-Name: com/ibm/icu/util/TimeZoneTransition.class
-SHA1-Digest: nsjOT2dDaZctakgY5wlp1Cn+ixY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_IQ.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/locale/InternalLocaleBuilder.class
-SHA1-Digest: V7c6Go6aFXvHqvjIGGnfMXDzSp0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de_.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/kn_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/impl/UCharacterName$AlgorithmName.class
-SHA1-Digest: PYl6PNBKDsuWCPtMTBAej3qiWEs=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_fr_FR.class
-SHA1-Digest: kukMBLawmMI5NEK5Rr8YN8hdz1g=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/af_ZA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/mk.res
-SHA1-Digest: +16iURHtlT11MXFHeQ5YdVWG9XU=
-
-Name: com/ibm/icu/impl/duration/impl/Utils.class
-SHA1-Digest: gf7gRgQu1u5OgPdlHnExgWFX9Bc=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_de.class
-SHA1-Digest: TeJeBzkTwkAFHb/iKE80Zc0XicI=
-
-Name: com/ibm/icu/text/AbsoluteValueSubstitution.class
-SHA1-Digest: ZolTHiOYyGLQwXWY00LnhUJsdME=
-
-Name: com/ibm/icu/text/RBBIDataWrapper$TrieFoldingFunc.class
-SHA1-Digest: Qf62ZKq9AjB9w31sh/QS1De+vpI=
-
-Name: com/ibm/icu/text/Normalizer$NFDMode.class
-SHA1-Digest: xg6Q8tYy7KxwlfYm+Grf+3XV3fM=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/fo.res
-SHA1-Digest: bL+GlmE1Y5OoN/A/uUVVOCpXTKA=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceInt.class
-SHA1-Digest: PK/s8z+DVKB6V/yZ7axygXLKwrs=
-
-Name: com/ibm/icu/util/CopticCalendar.class
-SHA1-Digest: oRNvFtdVo3HZ2IOcg2AjOGhm9I8=
-
-Name: com/ibm/icu/text/RuleBasedBreakIterator.class
-SHA1-Digest: ge0GS1yzlXkRSC/RdBcTRZNf3og=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Cyrl_RS.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_ZW.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CharsetRecog_2022.class
-SHA1-Digest: F0nf0CFBMOFv2vrd0mvZ7OY43mY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_BH.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sh.res
-SHA1-Digest: 5xIT4uaABWOSZbAPadn5pBVATSA=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EUnitVariant.class
-SHA1-Digest: F2a3jCGNTvPEMDmL8BeOOTEQ1iI=
-
-Name: com/ibm/icu/lang/UCharacter$StringContextIterator.class
-SHA1-Digest: lNpq2qWpIAGB742B0mS87r+hpsQ=
-
-Name: com/ibm/icu/text/NumeratorSubstitution.class
-SHA1-Digest: 7GMpPOT/EuYAKhFUqfg3TQ7pAYA=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_CN.res
-SHA1-Digest: OqOcERNgY90GdftreFDuBO3TG1M=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pa_Arab_PK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/DecimalFormat.class
-SHA1-Digest: U33/Ve3RZCN03mBl06HVLRmJtnU=
-
-Name: com/ibm/icu/text/RuleBasedTransliterator.class
-SHA1-Digest: RIDjkJ3ien3vG4tB1vgS4iuRFP8=
-
-Name: com/ibm/icu/text/DigitList.class
-SHA1-Digest: DbK/2LnHbTcnTDiY4krPxVDuMKw=
-
-Name: com/ibm/icu/util/Holiday.class
-SHA1-Digest: lI3HeWyJdOjBOZRCfPDxmf+FDF4=
-
-Name: com/ibm/icu/impl/data/icudt42b/nl.res
-SHA1-Digest: xy35sFvnPSYIBCf0u3kc01UzIHc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ko_KR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/he_IL.res
-SHA1-Digest: xx8x6c6TfbSBUuCgTOFqYfTB9Vs=
-
-Name: com/ibm/icu/lang/UCharacter$EastAsianWidth.class
-SHA1-Digest: BsCL841cISRA8tJI4hy44L/8/XI=
-
-Name: com/ibm/icu/impl/duration/OneOrTwoUnitBuilder.class
-SHA1-Digest: 6vDwEr9CWsHzaKmMdGNTAsFihLM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/kn.res
-SHA1-Digest: m20WWXMhMf9Jguc91WRlhm7fov0=
-
-Name: com/ibm/icu/text/Bidi.class
-SHA1-Digest: AgMeGBZRm0TYecerF6aysJ7PT9k=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Latn.res
-SHA1-Digest: njORFhp1f/q+5Iunh8RUfI1YhXs=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr.res
-SHA1-Digest: uLgs0BZfEG5SKg4oCnu7DjddatA=
-
-Name: com/ibm/icu/util/CurrencyServiceShim$CFService.class
-SHA1-Digest: rBBK+/s+rspq0n4MHaBKyH6qgeY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/it_IT.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/BreakIterator.class
-SHA1-Digest: 1McPZer5dsYHVvftuxv1mulZJCQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de.res
-SHA1-Digest: udXs6mDgaFlXCDLufyFIaPqL0mA=
-
-Name: com/ibm/icu/impl/data/icudt42b/om.res
-SHA1-Digest: kXlJcOU2EYYVZHUnQgPRoNED2jA=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr.res
-SHA1-Digest: tGIJx/BHQmB3/P21GhxRf0tHIck=
-
-Name: com/ibm/icu/impl/data/icudt42b/haw_US.res
-SHA1-Digest: qXwLlsGY/3vEgZHppDA+hTle9kE=
-
-Name: com/ibm/icu/text/BreakCTDictionary$CompactTrieNodeFlags.class
-SHA1-Digest: NHSMsJK1/XaK+qxiN89ct8gnfeM=
-
-Name: com/ibm/icu/impl/TextTrieMap$ResultHandler.class
-SHA1-Digest: NfDOnUJ6MEMaHwTl+N0ovE9ddws=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pt.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/TransliteratorParser$ParseData.class
-SHA1-Digest: qzjqmwgM41enjJzYKlm1GmSsxVo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_TN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/lv.res
-SHA1-Digest: FNsqY1pX+nP5Q5tA0F/KTsIeKQs=
-
-Name: com/ibm/icu/text/BidiRun.class
-SHA1-Digest: NVDG2+p7aEOg0Y7eJMKRrGzcIBM=
-
-Name: com/ibm/icu/impl/data/icudt42b/az_Latn.res
-SHA1-Digest: GuGMZSWyJJqxdmm9EzD7CnSl2IU=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_UY.res
-SHA1-Digest: ctg1v3Q44rmRhqm49FQHKrrmIMA=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/sent.brk
-SHA1-Digest: 5QkJZyN+UYeCLr8NqkrhshFfAcQ=
-
-Name: com/ibm/icu/lang/UScript.class
-SHA1-Digest: 5uNMnkZHEDId9P+L36R63jpUhyI=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/en_US_POSIX.res
-SHA1-Digest: beFWtWkxc9Yvx9alkk9FkhNbb+0=
-
-Name: com/ibm/icu/impl/duration/impl/ResourceBasedPeriodFormatterDataS
- ervice.class
-SHA1-Digest: JqOOr2sq7TcizCQJs9oL4g6So4I=
-
-Name: com/ibm/icu/text/CharsetRecog_2022$CharsetRecog_2022CN.class
-SHA1-Digest: DbHd1CyG/Msa9UPMr2wH2DF7trc=
-
-Name: com/ibm/icu/impl/PropsVectors$DefaultGetFoldedValue.class
-SHA1-Digest: Lwmpr2KCuPKMqaGtEnlFLz/wuqo=
-
-Name: com/ibm/icu/text/UppercaseTransliterator$1.class
-SHA1-Digest: G0JYUB6wT8GAYj5owWpsz9/Ftw8=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$ETimeLimit.class
-SHA1-Digest: 4ZMtPxvIotXIqFOqbPO7ya0XlMY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_DZ.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CharsetDetector.class
-SHA1-Digest: gYZx7hbJUm5FKRv7KdQ97H4GweY=
-
-Name: com/ibm/icu/impl/URLHandler.class
-SHA1-Digest: vvqGkYkIa4xQWAeWynhhHrqpw10=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr_MC.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/CharsetRecog_UTF8.class
-SHA1-Digest: e0rv0rA2OtgVcjPnmTwV8XCoHvY=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/el.res
-SHA1-Digest: U0c1hk1kb+krIvZR8cJGcxzSWOY=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_sv.class
-SHA1-Digest: E4MDrKpNuLO4thhe8eWFznL4mmk=
-
-Name: com/ibm/icu/lang/UCharacterNameIterator.class
-SHA1-Digest: UOMCEcLCGIcaMeDNVQfP5K8B03k=
-
-Name: com/ibm/icu/text/BreakCTDictionary$CompactTrieVerticalNode.class
-SHA1-Digest: FlLd/KEtCwedIf/Im9rWvJ8pkmE=
-
-Name: com/ibm/icu/text/BidiClassifier.class
-SHA1-Digest: jNruu2s6m5HmirvSejWNh5tTzPg=
-
-Name: com/ibm/icu/impl/ICULocaleService.class
-SHA1-Digest: wgOreXadv+Y6G64zD6iDwr3d/MY=
-
-Name: com/ibm/icu/util/DateRule.class
-SHA1-Digest: 9ppWbONa89XFnzd2NUTKAtIj7gs=
-
-Name: com/ibm/icu/text/RemoveTransliterator.class
-SHA1-Digest: otKJ/1nx4yCw6WLjSuLHwvCL2bc=
-
-Name: com/ibm/icu/impl/data/icudt42b/zoneinfo.res
-SHA1-Digest: lyR8PCY1r2O2fwcPzFCmV+03kek=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de_DE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/no_NO.res
-SHA1-Digest: AgYfyOH+DuzgYK7m3vioTfRNJGM=
-
-Name: com/ibm/icu/text/BreakTransliterator.class
-SHA1-Digest: 5j+5ezoVKgpv+cDfcyQp8CkSXHM=
-
-Name: com/ibm/icu/impl/UtilityExtensions.class
-SHA1-Digest: QHfN5QTMSujGJ608wEP4hPhWEF0=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_VI.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/lang/UCharacterEnums$ECharacterDirection.class
-SHA1-Digest: H8qH9/fT9hc7M4JiYaHxEZrAaKY=
-
-Name: com/ibm/icu/impl/ICUData.class
-SHA1-Digest: 3erV0Mc2+xO14bQ2k81EbRknNRw=
-
-Name: com/ibm/icu/impl/data/icudt42b/kw_GB.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/af_NA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/numberingSystems.res
-SHA1-Digest: CwVj0WaVMbqB1Mpxp0Kqbk2gWKc=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_SV.res
-SHA1-Digest: DqUgxafBny6RSK/5q4mvOxc7iio=
-
-Name: com/ibm/icu/text/DateIntervalFormat$BestMatchInfo.class
-SHA1-Digest: sV0Mx7TGY10SraT/jykvrPl7Q5U=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr_BE.res
-SHA1-Digest: t5kA5x031c55chPP3IyBYNE2tHA=
-
-Name: com/ibm/icu/text/Normalizer$IsNextBoundary.class
-SHA1-Digest: CKZMxdzbwLro2Z+QmdJ/ciVY2PA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_SD.res
-SHA1-Digest: 8jPOUtil+92lPKtgn16fuUJT/xs=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_CR.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/fa.res
-SHA1-Digest: 5Bs2cr+U6j+dypoDNaMPSbsUf0I=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fr_FR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/NormalizerImpl$CmpEquivLevel.class
-SHA1-Digest: dQTjAcpSF2DECctfvlbSo0KO1aU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/km.res
-SHA1-Digest: +iJyrhf9PCl28WxihRkDq1Ef6Lw=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/or.res
-SHA1-Digest: InVjaf5clp2rxTeqI9/0JIYSNB8=
-
-Name: com/ibm/icu/text/NameUnicodeTransliterator$1.class
-SHA1-Digest: DpWM8KnhkmbxGZXZFeHCngsH69o=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc3920node.spp
-SHA1-Digest: 4IYXUODtnB6gfa7RDUKiacm7TG8=
-
-Name: com/ibm/icu/util/Measure.class
-SHA1-Digest: 9mL4N0Vyl9+I6qKvkwVl14lMQkc=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$ETimeDirection.class
-SHA1-Digest: N9UUzovPmIuRsQk9R1s/tDmtyIs=
-
-Name: com/ibm/icu/impl/Grego.class
-SHA1-Digest: ByHxVGjXDj6wtd4aKgZcIkKZqQk=
-
-Name: com/ibm/icu/impl/duration/PeriodBuilder.class
-SHA1-Digest: dV/Szp96Rd+0gIGLoutRicRFViU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fa_AF.res
-SHA1-Digest: GxFG7kSjMBkfuBfHcrlK9JEMIUk=
-
-Name: com/ibm/icu/impl/UCharacterNameChoice.class
-SHA1-Digest: mMAuTd72u2gcqx8i1UYo0FKAc9w=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/kk_KZ.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/RangeDateRule.class
-SHA1-Digest: msIx2SRP5ec64ZXKKDuwMKIaJuY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/cs.res
-SHA1-Digest: 6ewJaKyRixh1EaHQDrPSPclAH1s=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_PR.res
-SHA1-Digest: XbM/LpRizF51mvHs+PUyZEXY/hQ=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_2_hu.class
-SHA1-Digest: pBbf8rLCbWkUdL2JrvCE8OAp+BQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_CA.res
-SHA1-Digest: Q8VylXqubeMUQ0gbkGBmmW5FoW8=
-
-Name: com/ibm/icu/text/SimpleDateFormat$PatternItem.class
-SHA1-Digest: YAu3YeIk7pw3PNa524tZW2WuBIE=
-
-Name: com/ibm/icu/text/CollationRuleParser$IndirectBoundaries.class
-SHA1-Digest: 0AbZRXsqPif5tIO0chF3JJ4YPDo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/th.res
-SHA1-Digest: h7X9C37HwUru0u4cVd+B3afa9HA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_HK.res
-SHA1-Digest: speOMn/V2KXsedph/5CkSZvBY08=
-
-Name: com/ibm/icu/impl/UCaseProps.class
-SHA1-Digest: uOAVyXrL6DlQ5Sw5t2fW7uXhxDg=
-
-Name: com/ibm/icu/impl/NormalizerImpl$DecomposeArgs.class
-SHA1-Digest: hDKbUGlZBenhxVha4ofAGKYcZvk=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_en.class
-SHA1-Digest: wLcQHijwQPcw+2QLT5p2j7vrFmU=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EGender.class
-SHA1-Digest: J/zw3EDVDp2DIUnLU7Ns1Auk8+s=
-
-Name: com/ibm/icu/text/EscapeTransliterator$1.class
-SHA1-Digest: BmF+vui9JoLsiiWA4fkM9uw0XGw=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pa_Arab.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/sq.res
-SHA1-Digest: YGEaYRH54BnepCoO05Xr1A89Cjk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hi.res
-SHA1-Digest: YESl1anaFaTG/Cg+h8qp06YkSWc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ps.res
-SHA1-Digest: jcSG2XNQ01J2cSZYHsb3WmuoqpY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/vi_VN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha_Latn_NG.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/RelativeDateFormat$URelativeString.class
-SHA1-Digest: 4JcRrl0CkaM/+e6/P6hm+woduY0=
-
-Name: com/ibm/icu/util/TaiwanCalendar.class
-SHA1-Digest: seXD8m1jm3Pi1ii97cHCx0DVb5g=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_5.class
-SHA1-Digest: knuUFp80QD6HqAgIaUwvSZ4e2XI=
-
-Name: com/ibm/icu/impl/data/icudt42b/kw.res
-SHA1-Digest: XhDdKpjngOgIwwhY9wzLH08YYF0=
-
-Name: com/ibm/icu/text/NFSubstitution.class
-SHA1-Digest: Tf3idfc3xXqihVo1OfmhIdhv45U=
-
-Name: com/ibm/icu/util/ChineseCalendar.class
-SHA1-Digest: pJlfi7MLmf32IriffIOhnZKxFqg=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM420_ar_rtl.cl
- ass
-SHA1-Digest: Pv7T9lB2nfQWV7y6z+DzAU9ztnw=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$Horizon.class
-SHA1-Digest: tqn4oqVKoLNURBeQA94T77HmV80=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_QA.res
-SHA1-Digest: f4UrB2kdWt/+ODJfpHLPtXUcdas=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/om_KE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pa_Guru.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/ICUService$CacheEntry.class
-SHA1-Digest: lZ0Rre/AW1WALU0phN0pn/Cb1BI=
-
-Name: com/ibm/icu/impl/data/icudt42b/tr.res
-SHA1-Digest: 76WaJA6WKs5PIRKZtCsS4o72LX0=
-
-Name: com/ibm/icu/impl/data/icudt42b/az_Cyrl_AZ.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/util/Calendar.class
-SHA1-Digest: thvM7e735GDNg3hS2lLIuJRMBV4=
-
-Name: com/ibm/icu/impl/ResourceBundleWrapper.class
-SHA1-Digest: rIKZx1wCuiXfe5QkMHVctB9728E=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sh_BA.res
-SHA1-Digest: vYOnYIQEmwDnRfySDiGCAZETvgI=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/el.res
-SHA1-Digest: AGQ9gc90hsqcnPV6yQmFHA/1osQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Latn.res
-SHA1-Digest: uO1DdkPQdwIhPSDZ+yzcrPCwz88=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_windows_1251.cla
- ss
-SHA1-Digest: SXkn/Uww9Gzw7b/Un5t7GkFakCE=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_AE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_iw_IL.class
-SHA1-Digest: YUizshYwzLdXoy05Q8wxj4mQut0=
-
-Name: com/ibm/icu/impl/data/icudt42b/bn_IN.res
-SHA1-Digest: bv0pDsctpdozqqzI1wej2hasy9c=
-
-Name: com/ibm/icu/impl/NormalizerImpl$PrevArgs.class
-SHA1-Digest: cOomgZl+/yp6SYjdUoYbL7JbQk8=
-
-Name: com/ibm/icu/text/CharsetRecog_2022$CharsetRecog_2022JP.class
-SHA1-Digest: w2BjrE208VvJdVSAPaTr1kLTqvA=
-
-Name: com/ibm/icu/lang/UScriptRun$ParenStackEntry.class
-SHA1-Digest: hjJuPZ/fOXQd2FMPfdIN4fRyuUI=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/ja.res
-SHA1-Digest: JvSF9gjOLJGjbnDwtW+adnCvW0E=
-
-Name: com/ibm/icu/text/FractionalPartSubstitution.class
-SHA1-Digest: Ynmu31KNNJxNN6NJpdaL6yBfREo=
-
-Name: com/ibm/icu/impl/data/icudt42b/hu_HU.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_es.class
-SHA1-Digest: 3SErfzPsT82mvGwkW2uM2+Y+V3g=
-
-Name: com/ibm/icu/impl/data/icudt42b/id.res
-SHA1-Digest: /v6DtD31JMnx4TFGPb1tAs3bJ58=
-
-Name: com/ibm/icu/impl/data/icudt42b/translit/root.res
-SHA1-Digest: W9W31JFWrx9S4rOkkKDBHLnYrmI=
-
-Name: com/ibm/icu/impl/data/icudt42b/el_GR.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/NumberFormatServiceShim.class
-SHA1-Digest: 5g5rFy1SGHdAii8w/LXUSFEhh2s=
-
-Name: com/ibm/icu/text/EscapeTransliterator$6.class
-SHA1-Digest: PFEkFXg8eBaBKVeFY55vhS2mLAM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ru.res
-SHA1-Digest: VXbAmZCJZJeWtwmyerLwaGhkQqk=
-
-Name: com/ibm/icu/text/RuleBasedCollator$UCAConstants.class
-SHA1-Digest: s5CcIsUVxym6jbrYS095b8nqJmI=
-
-Name: com/ibm/icu/impl/data/icudt42b/ru_UA.res
-SHA1-Digest: IXZDpxA+m9jyEDvaDLUtuycklI4=
-
-Name: com/ibm/icu/impl/ICUNotifier.class
-SHA1-Digest: lglpVgoxE78xm+dGjGgI1+vH8Go=
-
-Name: com/ibm/icu/text/TransliteratorRegistry$AliasEntry.class
-SHA1-Digest: VVsoRHCiofSdXgz5txKcKInbG98=
-
-Name: com/ibm/icu/impl/data/icudt42b/eo.res
-SHA1-Digest: kBkTnKWiCx/5QFeXkXT2AXgknWE=
-
-Name: com/ibm/icu/text/UnicodeSet$VersionFilter.class
-SHA1-Digest: a9gj5vKVl+/+AHgbAB0gZ7dN8l8=
-
-Name: com/ibm/icu/impl/data/icudt42b/it.res
-SHA1-Digest: WsShTh/aQbQ/ZhxRGg7Ag7CBx7g=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Latn_YU.res
-SHA1-Digest: 63xXzYBbV2uVP5NlLgeUyp8SVsg=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hans_HK.res
-SHA1-Digest: wQNfmmf0h/hyQoWk7DLPyxuDo2U=
-
-Name: com/ibm/icu/text/UnescapeTransliterator$3.class
-SHA1-Digest: 0k60My0lEzUBHKhLLnROQxfwBNQ=
-
-Name: com/ibm/icu/impl/LocaleUtility.class
-SHA1-Digest: BX7DKr4qa3fDsh7bKxjRqrIdN1k=
-
-Name: com/ibm/icu/text/BreakIteratorFactory$1$RBBreakIteratorFactory.c
- lass
-SHA1-Digest: +2C+74R/GkAukYK6BWok4d5+X18=
-
-Name: com/ibm/icu/util/UResourceBundleIterator.class
-SHA1-Digest: IrH/7eAb+2WBO5XParE13Y5/z+k=
-
-Name: com/ibm/icu/impl/data/icudt42b/sk_SK.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/az.res
-SHA1-Digest: ZMWs0VOdiKvJNL4AFWqFkUJSFhs=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc4013.spp
-SHA1-Digest: kRrkLaCSp2+yZ8BOpLlwwoi02PI=
-
-Name: com/ibm/icu/impl/data/icudt42b/ga_IE.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/text/RBBIRuleScanner$RBBIRuleChar.class
-SHA1-Digest: J0Y4X3G8nAQ2u1NdqdAgiryBeGs=
-
-Name: com/ibm/icu/text/CollatorServiceShim.class
-SHA1-Digest: hAgfcsXlTzaL/w4/gL0N9iCOUYo=
-
-Name: com/ibm/icu/impl/data/HolidayBundle.class
-SHA1-Digest: eped8S2PIpsw0xNnRZ5/97cXdR4=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_PA.res
-SHA1-Digest: nBhqgNbBYXfEOuIJnwG/Q4teyVM=
-
-Name: com/ibm/icu/impl/data/icudt42b/ro.res
-SHA1-Digest: FOBd+W6c9Uszw+S2FdiRgo7ISJo=
-
-Name: com/ibm/icu/util/Calendar$FormatConfiguration.class
-SHA1-Digest: HMfqjsjj92/mRd+LB6GWlX9Rz8A=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM424_he_rtl.cl
- ass
-SHA1-Digest: J+B9CfPJsTC9wgQE4/ZkMBES4nY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/kl.res
-SHA1-Digest: 0jsw6UtoVk4zt3ILXicpfV7biTk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sv.res
-SHA1-Digest: egUhPtCoHrry2yDZn92p5O6n5N8=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/sent_el.brk
-SHA1-Digest: 8i9iN5U7DqUoIo4MK4oyQZS9P3g=
-
-Name: com/ibm/icu/impl/data/icudt42b/ne_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_BW.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/TransliteratorRegistry.class
-SHA1-Digest: A/P7G4aaYuPu5xXL/ZkBbE18hwI=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/nb_NO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/duration/impl/XMLRecordWriter.class
-SHA1-Digest: PWYSZ4u8g1IfpbLoDoF3ftIAb4Q=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_it.class
-SHA1-Digest: cDFTSttIyUcOXqLd9D2T6tp/HZk=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$ECountVariant.class
-SHA1-Digest: aJHVQ300aVD+BmC2P8llIq3pg9c=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/et_EE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/CurrencyAmount.class
-SHA1-Digest: PNIjQXIaQ2oYJyUT0ItTyTqEkoU=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_windows_1256.cla
- ss
-SHA1-Digest: DrTHr4sUWIbklSdEgWU28WoUbhA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ti_ET.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/util/VTimeZone.class
-SHA1-Digest: 1TPDKEs1DSITvWxMUvckjGndB4Q=
-
-Name: com/ibm/icu/impl/DateNumberFormat.class
-SHA1-Digest: cjx+PVDKOUW7D4ujcB6HlUvHvGs=
-
-Name: com/ibm/icu/text/NumberFormatServiceShim$NFService.class
-SHA1-Digest: tbq28jH7lu6i82zGqfz3TzCU2zw=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_PY.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/cy.res
-SHA1-Digest: 19rDUBcwJVut4iH/bVmNX3Q7FOI=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_9_tr.class
-SHA1-Digest: L3qSOBh58ZoDcsPpSVwC2ZJVA70=
-
-Name: com/ibm/icu/impl/data/icudt42b/ga.res
-SHA1-Digest: +eLSqa91+kUpqOvCWHDTWpeia+0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fi_FI.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ru_RU.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CollationRuleParser$OptionSet.class
-SHA1-Digest: NQEcyavf02KCzAUy8eUxp2bm0ik=
-
-Name: com/ibm/icu/impl/data/icudt42b/sh_YU.res
-SHA1-Digest: 63xXzYBbV2uVP5NlLgeUyp8SVsg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_LB.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CurrencyFormat.class
-SHA1-Digest: BIYocngM/7NiKCWXni1oy8dw6UE=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_no.class
-SHA1-Digest: xv4d+++Lz/qnbkyyhqENFT7eu0k=
-
-Name: com/ibm/icu/lang/UCharacter$HangulSyllableType.class
-SHA1-Digest: FX4QLFcLemKiu2KiOmBPbxuoTgA=
-
-Name: com/ibm/icu/impl/NormalizerImpl$RecomposeArgs.class
-SHA1-Digest: JcTG/vr+4vL+lvoLih+JchLOwys=
-
-Name: com/ibm/icu/impl/duration/BasicDurationFormatter.class
-SHA1-Digest: zh16hEdh2ONzmmsS1JDrmJiNlRk=
-
-Name: com/ibm/icu/impl/PropsVectors.class
-SHA1-Digest: wI4264ILYDdbtojBjMmkuDjmmUY=
-
-Name: com/ibm/icu/impl/data/icudt42b/ja_JP.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_EC.res
-SHA1-Digest: m0kpaMOPvIMFxZxiXL7bN0HH7wk=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/lt.res
-SHA1-Digest: rb4HPjXWqwrgfjBmwldQmaCBJ9c=
-
-Name: com/ibm/icu/text/TransliteratorIDParser$SingleID.class
-SHA1-Digest: Ufnlmb9l7qkXF0nQiTQKfC0SUN4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_PH.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CollatorReader$2.class
-SHA1-Digest: VstzQGGxGrBfAGwLsKAmINjoHdE=
-
-Name: com/ibm/icu/impl/data/icudt42b/ta.res
-SHA1-Digest: UIyNBGqa1phd6lRvgnG2rxHojNI=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_6_ar.class
-SHA1-Digest: xn1RXUAMmznOTgrhrUQpwv5QlOQ=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs.class
-SHA1-Digest: QqTdh0CH4Vf7dqv8SgIqkDzUFSU=
-
-Name: com/ibm/icu/impl/data/BreakIteratorRules.class
-SHA1-Digest: gCMOKah34u1kPKbKDFFkZ7q4Yns=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/uk_UA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/SimpleCache.class
-SHA1-Digest: gkYKNngE0GE4oKeUP2E1tXk1jM8=
-
-Name: com/ibm/icu/text/UnicodeNameTransliterator$1.class
-SHA1-Digest: KaMVjn1QaHf34mD7oxjgwJ5ahIQ=
-
-Name: com/ibm/icu/impl/ZoneMeta.class
-SHA1-Digest: r0glyuuqmD6LFhOLNsnp1xng+pU=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_ES.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/ComposedCharIter.class
-SHA1-Digest: rChNG7UYDnRxDj7UbX1y0qWs5dk=
-
-Name: com/ibm/icu/impl/CollectionUtilities$MultiComparator.class
-SHA1-Digest: w+RtoKXIAzU2JSHL2lRzb/vNpkk=
-
-Name: com/ibm/icu/impl/data/icudt42b/pl.res
-SHA1-Digest: ycc7jjxh5sAJ1hGkiVLYLBbGIL4=
-
-Name: com/ibm/icu/impl/ICUBinary.class
-SHA1-Digest: sSY3Nr1xFNDxtMCJmvvgUU8AbJk=
-
-Name: com/ibm/icu/impl/JavaTimeZone.class
-SHA1-Digest: RGmGX6YF1kdSgSbPkP1pPUkdprM=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_Cyrl.res
-SHA1-Digest: ofu0p2h5HG++q/Yi5O9ZawldKoI=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EHalfPlacement.class
-SHA1-Digest: hXh33TmrbYTnw55gCgxA0u+L1aU=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/af.res
-SHA1-Digest: 6ZZdsbmX402QmyeJfRkOd0UDHiQ=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_ko.xml
-SHA1-Digest: eOSUSyUSndb5fF2lk9BJK2jpGXo=
-
-Name: com/ibm/icu/text/PluralRules$BinaryConstraint.class
-SHA1-Digest: 1JkBPbgxMsMN5YV/Rcxbgs+kVXU=
-
-Name: com/ibm/icu/impl/data/icudt42b/hr.res
-SHA1-Digest: WMsS49dfMXa65cAp+IQNie57DAU=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$CEGenerator.class
-SHA1-Digest: /DJVLxMf9OcAzOZjQCcQi63elb8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/et.res
-SHA1-Digest: gY9889U6aBhiQd1g82sqQbwkwU4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/vi.res
-SHA1-Digest: fPZhu1BtbXnuJ3eUSAXmbnsSKPk=
-
-Name: com/ibm/icu/text/PluralFormat.class
-SHA1-Digest: rO5A57/apGQ9E2S9YwO746MktFQ=
-
-Name: com/ibm/icu/util/CaseInsensitiveString.class
-SHA1-Digest: rQq82lJnOBEXasFGvZ877r9VDQ4=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_BO.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ja.res
-SHA1-Digest: JU096ryb1j2ZPt0LeW9mREJ8Pkg=
-
-Name: com/ibm/icu/impl/data/icudt42b/az_AZ.res
-SHA1-Digest: /aK65NhD+NN4VpffHy3dVw5HOJA=
-
-Name: com/ibm/icu/impl/data/icudt42b/mr_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/impl/duration/impl/XMLRecordReader.class
-SHA1-Digest: QJMPA09yTVHzesG3SnsuYOZF1gI=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_MT.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/pa_Arab.res
-SHA1-Digest: V6CBcJq6TVrLkip5q/d1wIChIZA=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_iw.class
-SHA1-Digest: ToeHtdFUCxUdmrVnWpfyfJZK4PI=
-
-Name: com/ibm/icu/impl/data/icudt42b/ur.res
-SHA1-Digest: pxo8RnCdTUGMw6cWnSY8rLlTodw=
-
-Name: com/ibm/icu/util/TimeZone.class
-SHA1-Digest: Hm32xTzR86BFdisNVSy85b+qs8c=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/no.res
-SHA1-Digest: QKT2L/mn+LtpRofMA4whD6vFbe0=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$BasicContractionTabl
- e.class
-SHA1-Digest: jWsjLfFERZXorGeHalRwZJi4O5I=
-
-Name: com/ibm/icu/impl/data/icudt42b/ur_IN.res
-SHA1-Digest: 79kksnJjwoXz04PonmMn5+6V9E4=
-
-Name: com/ibm/icu/impl/data/icudt42b/de_LU.res
-SHA1-Digest: pmLIFVklW+f3qKAzKg4pvCbRRMw=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_SG.res
-SHA1-Digest: 99MTdXPuizTQKIDtoLc37T5PHW0=
-
-Name: com/ibm/icu/impl/locale/BaseLocale.class
-SHA1-Digest: o6PyMobTa1XPoMEYCtn9erCRJfg=
-
-Name: com/ibm/icu/impl/data/icudt42b/pa_PK.res
-SHA1-Digest: k8xeatwjEZzFAMf4h66cJnIKCRc=
-
-Name: com/ibm/icu/lang/UCharacter$SentenceBreak.class
-SHA1-Digest: v60WgOObH7LMxSp6BLkx12kbK2o=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/bg.res
-SHA1-Digest: FAjQiRZGQsGv60+ineKz2cfWHhA=
-
-Name: com/ibm/icu/text/UnicodeSet$Filter.class
-SHA1-Digest: NBMNANpxG2nLvO2DvN1HxX60dOA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_AU.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_zh_Hans_SG.xml
-SHA1-Digest: TJYCrJvOY2vR1NyyLtm2gdpw0fs=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Latn_ME.res
-SHA1-Digest: cYLkZ9Z18u/K8BYFefs2WDDNvII=
-
-Name: com/ibm/icu/impl/data/icudt42b/en.res
-SHA1-Digest: qVsjlL/wvdmhN0kYI0qz0fpJpVQ=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_da.class
-SHA1-Digest: jzjS6XsqunKSZ7YAmPaebKHAeQo=
-
-Name: com/ibm/icu/impl/data/icudt42b/is.res
-SHA1-Digest: 5Ryn6dHXd2TJjS6IoT03GIT+kJ8=
-
-Name: com/ibm/icu/util/IllformedLocaleException.class
-SHA1-Digest: CQ4rkK3nOjNNdiw7Fep5cCnsdNA=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh.res
-SHA1-Digest: wBR2aHtqcWVBRNX06qSePIeEmzw=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_en_GB.class
-SHA1-Digest: HXDh6JDRFbipCxMfi/8pXpp5d1k=
-
-Name: com/ibm/icu/impl/data/icudt42b/sw_KE.res
-SHA1-Digest: LVqZFqGyXHp7aC7dpmH9EzAcg5g=
-
-Name: com/ibm/icu/impl/data/icudt42b/bn_BD.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_JO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/pa_Guru.res
-SHA1-Digest: X24m6J85tpyg/p+Y9+fILCxpvbs=
-
-Name: com/ibm/icu/impl/data/icudt42b/pt_PT.res
-SHA1-Digest: g32vD04+VGf7M8VvrjDhUXPsgbQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/sl.res
-SHA1-Digest: f5g+aVg5/3/Hq5zwLSZLz0A6zfM=
-
-Name: com/ibm/icu/text/CollationElementIterator.class
-SHA1-Digest: xIVrdY7/w63ttuNlWyMX4Jc3dRo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ca.res
-SHA1-Digest: /znnLEtvYR7zUSGs2gi6rwMM40s=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_BA.res
-SHA1-Digest: 6q0h04Ey+gEIoBcrzyHzzX1kkzA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/kk.res
-SHA1-Digest: wjaQf987WfInc+RWdb82wWwvJt0=
-
-Name: com/ibm/icu/text/Normalizer.class
-SHA1-Digest: NjfW4+6zne8UcJXRJ/pLy5XfkA4=
-
-Name: com/ibm/icu/impl/data/icudt42b/metazoneInfo.res
-SHA1-Digest: WrI+gjlkpqmXT7L8kiIFL/2lFfc=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_OM.res
-SHA1-Digest: 8jPOUtil+92lPKtgn16fuUJT/xs=
-
-Name: com/ibm/icu/impl/ICUService$Factory.class
-SHA1-Digest: JjbkqvP4n+0KVYf1xulU5Z4eAl4=
-
-Name: com/ibm/icu/impl/CalendarUtil.class
-SHA1-Digest: mXCxBGek45OV2AToojzS6lWPWwk=
-
-Name: com/ibm/icu/impl/data/icudt42b/sv_SE.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/fo.res
-SHA1-Digest: Gx/55iuk1yQeF8uV3HC9lx8Fawg=
-
-Name: com/ibm/icu/impl/data/icudt42b/om_ET.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pa.res
-SHA1-Digest: m20WWXMhMf9Jguc91WRlhm7fov0=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/fr_CH.res
-SHA1-Digest: w8kmzHDlCJGcUPey8IvdVJrfvQg=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$InverseUCA.class
-SHA1-Digest: rsj7nP8njlED4xOwiB6ZnMbOh1I=
-
-Name: com/ibm/icu/util/ULocale.class
-SHA1-Digest: yFjDW+f2stg60ntA5KZ4Gd7EU70=
-
-Name: com/ibm/icu/text/DecompData.class
-SHA1-Digest: /NZFm0m+Y3ZTpmzhS3cecFVYHhg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_HN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/lang/UCharacter$GraphemeClusterBreak.class
-SHA1-Digest: Bp5r7WDyc/oPgoQ4mDo35RSePh4=
-
-Name: com/ibm/icu/text/UForwardCharacterIterator.class
-SHA1-Digest: GWke+hdTckf+I7Ox5eLwBIW2PDk=
-
-Name: com/ibm/icu/impl/data/icudt42b/so.res
-SHA1-Digest: 1d0UHZi+M76i5kcQHo+keHSdnPc=
-
-Name: com/ibm/icu/impl/ICULocaleService$SimpleLocaleKeyFactory.class
-SHA1-Digest: 5JDiO36tIyr7uFW1suvdDYu9k8U=
-
-Name: com/ibm/icu/text/RuleBasedTransliterator$Data.class
-SHA1-Digest: INjgv979MVyDLH/Ok0DXmTUNICo=
-
-Name: com/ibm/icu/text/CollatorReader.class
-SHA1-Digest: hqzCgrVAzf5eo0v1BfYjejlBWvE=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha_Latn_NE.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pa_Guru_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Cyrl_ME.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/CECalendar.class
-SHA1-Digest: xHdrfhO2lA5NqpJm9kYkfHRoBIY=
-
-Name: com/ibm/icu/lang/UCharacter$NumericType.class
-SHA1-Digest: wwSYkQeTFo9hTCY2UOHS67woY5Y=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_MO.res
-SHA1-Digest: K0sKinko64INKTDfbkgnrEzo0W4=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_TT.res
-SHA1-Digest: Gft7qBQnQOHLgK9veVL4VPW1bLI=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_2_cs.class
-SHA1-Digest: rN+qbASYhwZSvUlobMZ66ntMB8w=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_LY.res
-SHA1-Digest: PlPVnMH+m0uWLvQE+P1Ghs8d0QU=
-
-Name: com/ibm/icu/impl/ICUData$2.class
-SHA1-Digest: dK5G1/f28l6pLwsD3POwMCuv4gg=
-
-Name: com/ibm/icu/impl/TimeZoneAdapter.class
-SHA1-Digest: 8G41pZZL4p+FC/QCOYTOkk8CMJ8=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha.res
-SHA1-Digest: iXuHivvaoOD4e+oDCXA6ydCmtnI=
-
-Name: com/ibm/icu/impl/CharTrie$FriendAgent.class
-SHA1-Digest: RUX1V8Xjj+l9ekbRAoT+rlLyDgU=
-
-Name: com/ibm/icu/impl/ICUService.class
-SHA1-Digest: aUc+r0p341fLp6N8wsDJkzwlSlU=
-
-Name: com/ibm/icu/text/RBBIDataWrapper.class
-SHA1-Digest: Rz1+//cPD5Auu7G0zvWKasM4qkY=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hans_SG.res
-SHA1-Digest: sVTnOyfR0DUfh+/LCStQmRG02Eg=
-
-Name: com/ibm/icu/impl/data/icudt42b/pt_BR.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/Normalizer$QuickCheckResult.class
-SHA1-Digest: 4afP7XvgOX4RQMmvMVq4EjWPFhY=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/mt.res
-SHA1-Digest: 2zzk4SVdV+RHOrFH6uqySBZ4kAs=
-
-Name: com/ibm/icu/impl/duration/TimeUnitConstants.class
-SHA1-Digest: 1ialH7qT9mVU7EXDscwlOkAGYEk=
-
-Name: com/ibm/icu/impl/data/icudt42b/lv.res
-SHA1-Digest: MtixZySEwlk+bBmUgDrZeJ6hJFs=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es.res
-SHA1-Digest: xm9Nb0xqt7ETfugH1AdIsKD0su0=
-
-Name: com/ibm/icu/text/NormalizationTransliterator$3.class
-SHA1-Digest: KXjxH+Pbhe/oQsKli3FOja0GFZM=
-
-Name: com/ibm/icu/lang/UCharacterEnums.class
-SHA1-Digest: UcwiRTq/PVmX4Q9pROsYy7tIAtA=
-
-Name: com/ibm/icu/impl/TrieIterator.class
-SHA1-Digest: ZF8qBmw9SWQ4xLPigq+ttP0HH5s=
-
-Name: com/ibm/icu/text/SimpleDateFormat.class
-SHA1-Digest: YL3ZxvKdmixMzA5GJ1JYmnyXnH8=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_YU.res
-SHA1-Digest: 2ii6FCYOQG4t2sunNcYMfTFp8rA=
-
-Name: com/ibm/icu/util/BuddhistCalendar.class
-SHA1-Digest: tpxOhBNizv5BVRDFxPSV1yBYa08=
-
-Name: com/ibm/icu/text/DateTimePatternGenerator.class
-SHA1-Digest: SynHDhMaw6OQEXkI/GQyOn4Ry0s=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_UZ.res
-SHA1-Digest: I6JdX5ppPd/ts7HMPlhQYE6F6dg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/bg_BG.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/nn.res
-SHA1-Digest: XcezM2Ezj9IKqt2x1dUw8UTqXB8=
-
-Name: com/ibm/icu/impl/data/icudt42b/ms_BN.res
-SHA1-Digest: 9OEKuI9x6WgXToTg+xw0rxotDZA=
-
-Name: com/ibm/icu/text/TransliteratorRegistry$Spec.class
-SHA1-Digest: Vy2f3Bml0rf/oH9/y62TnIos89M=
-
-Name: com/ibm/icu/text/LowercaseTransliterator$1.class
-SHA1-Digest: WrihvGS3ytjsiLTN9AGLdG5T98c=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/kl_GL.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/da_DK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/RBBIRuleParseTable.class
-SHA1-Digest: xdkPFmEyodQyRifzCGIsIJUHB6A=
-
-Name: com/ibm/icu/text/DateTimePatternGenerator$DateTimeMatcher.class
-SHA1-Digest: D/0YiLLDTmGNsL98lPRd2ySDzi0=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$3.class
-SHA1-Digest: qnlQ060pQEA1KSYweMl7L+WyYWw=
-
-Name: com/ibm/icu/impl/TrieBuilder$DataManipulate.class
-SHA1-Digest: OCqpw+WLzXMwly6HCsEkd99Kwnc=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_de_AT.class
-SHA1-Digest: mZlLi8ZXE09fTN+C/W91y/Kb70M=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_fr_CA.class
-SHA1-Digest: TFDs6Ohrc//BJh5oVarP/HomTS4=
-
-Name: com/ibm/icu/impl/NormalizerImpl$NextCCArgs.class
-SHA1-Digest: JVR0BDY6pHtaCtJ+yJdL31rn+pQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/gu_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_BE.res
-SHA1-Digest: d6p6QyamvvXx+48Iwc7Atit9vNg=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_SA.res
-SHA1-Digest: JlgFRnI4nJlpLF9wvg2ugwSyEA0=
-
-Name: com/ibm/icu/text/UnicodeSet$IntPropertyFilter.class
-SHA1-Digest: nxEUGXEzCiRAnu8lisd33Fq3DoU=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$ESeparatorVariant.clas
- s
-SHA1-Digest: 7pGgIgI/YrwXlt9D6TxW9wM4nf8=
-
-Name: com/ibm/icu/impl/data/icudt42b/bo_CN.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_CO.res
-SHA1-Digest: JnYWZQ6ke5cRCVbjf8xGaBkF4xQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ka.res
-SHA1-Digest: h6UURuYopfcAy8xyXw2FL3eUQRU=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_GT.res
-SHA1-Digest: ce9Gf1FyWcMT9DFQTVm8ACnzw+c=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc4011.spp
-SHA1-Digest: +ydyHT5jXvaoMiFf+YNzgsQYXno=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/sk.res
-SHA1-Digest: cIy+1Q8Sk7iWZHnwFFLM5ijFS2s=
-
-Name: com/ibm/icu/impl/data/icudt42b/unorm.icu
-SHA1-Digest: EiYFJ1deC4G7h7B8izp/B42f6tU=
-
-Name: com/ibm/icu/text/PluralRules$Rule.class
-SHA1-Digest: lnr5ZZiLWyfabx3PfQFUQ4kRXag=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_en.class
-SHA1-Digest: sdmnpOeq6vHUauAbQhnicxzCi1M=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/gu.res
-SHA1-Digest: L++AewHZn8F7ttXBFwV5flJChn4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Cyrl.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/te.res
-SHA1-Digest: 36kvibmsQgAZv0iYQqoLhwXD1K0=
-
-Name: com/ibm/icu/impl/data/icudt42b/ti_ER.res
-SHA1-Digest: KLcLOArdZ8CRPN8SrJMVRiSU8U0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_SY.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_TW.res
-SHA1-Digest: FI8SXUxAHIZ4WAdjGjq/j705WQs=
-
-Name: com/ibm/icu/text/RBBISetBuilder$RangeDescriptor.class
-SHA1-Digest: IYaOR5Li53wz+/ew5LMCgHCEOK8=
-
-Name: com/ibm/icu/text/Bidi$Point.class
-SHA1-Digest: WrjHFUDw+BfBg0zVo+hiO51s+rk=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hans_MO.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/text/CharsetMatch.class
-SHA1-Digest: ON88NxwVmEi9K6MOVo5BKhXlBeE=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de__PHONEBOOK.res
-SHA1-Digest: IwSg0o/LpBjuSIHpx4oTw6trYHc=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_KW.res
-SHA1-Digest: 8jPOUtil+92lPKtgn16fuUJT/xs=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_el.class
-SHA1-Digest: FXpaa3HqUKNZXl0Ip10yyAIvKJE=
-
-Name: com/ibm/icu/util/CalendarServiceShim.class
-SHA1-Digest: Ba0xioCD4rnLV4TjtjW/mDMtZoY=
-
-Name: com/ibm/icu/text/NumberingSystem.class
-SHA1-Digest: LHwENSoYEPnE0QgQuTRPQTYT3ZU=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_euc$CharsetRecog
- _euc_kr.class
-SHA1-Digest: oJ0ItqPy76y7oJBc0o8ujS8uesY=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha_NG.res
-SHA1-Digest: /Pw+JNU9+Ymdp0EpFOGKcUwuK4o=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/da.res
-SHA1-Digest: lTZX0wyZxIXjbMXSAs28sY5Mkaw=
-
-Name: com/ibm/icu/impl/data/icudt42b/pa_Arab_PK.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/id_ID.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/cy_GB.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/NumberFormat$NumberFormatFactory.class
-SHA1-Digest: sdLRJildSf87YuWQG6Z+Zu5THvw=
-
-Name: com/ibm/icu/util/HebrewCalendar.class
-SHA1-Digest: ZLiKbjSyHovxTVdRTu827rxk9E8=
-
-Name: com/ibm/icu/text/ChineseDateFormatSymbols.class
-SHA1-Digest: 1ALrkiOxWoANjLRxcz45HYxFRK4=
-
-Name: com/ibm/icu/text/DurationFormat.class
-SHA1-Digest: 4/LajaAa+l1ghTwrDguApZUPRRA=
-
-Name: com/ibm/icu/util/LocaleData.class
-SHA1-Digest: iZPzvsWVCXF02iLV3wufQnrAlXg=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EDecimalHandling.class
-SHA1-Digest: 2SOoR+mng47ZN9oI3av7Xv9KiWY=
-
-Name: com/ibm/icu/impl/UCharacterNameReader.class
-SHA1-Digest: 5p7BvE7VGf5aCt90xzrSojTkzwQ=
-
-Name: com/ibm/icu/text/CaseFoldTransliterator$1.class
-SHA1-Digest: my4KH6UvZH61LmQJ9by169BpIsQ=
-
-Name: com/ibm/icu/text/PluralRules$OrConstraint.class
-SHA1-Digest: pK3u/wijq+F9xqRcXY3lqHdSTCM=
-
-Name: com/ibm/icu/impl/data/BreakIteratorRules_th.class
-SHA1-Digest: nwliB5sJL3Z30p35rPoMRZFxgpY=
-
-Name: com/ibm/icu/impl/data/icudt42b/as_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/text/FunctionReplacer.class
-SHA1-Digest: Y59QnXwARkfmXDY5Kx9F88nCa34=
-
-Name: com/ibm/icu/impl/data/icudt42b/az_Cyrl.res
-SHA1-Digest: ZzI6/TgVFKDdc1kW6Ys5cDDLMUU=
-
-Name: com/ibm/icu/text/PluralRules$2.class
-SHA1-Digest: dyLZMC0oL6LAsBLMZtBpQremE4Q=
-
-Name: com/ibm/icu/text/Transliterator$Factory.class
-SHA1-Digest: HlRT/XtlhZKVGY1Pkx98liTP3Es=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM420_ar_ltr.cl
- ass
-SHA1-Digest: Zvm4Bvw3w6cly319y6Cb0g8QW/c=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_Hans_CN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ps_AF.res
-SHA1-Digest: Ft7S6n/o3/L7Am77oNmqkNnADP0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ml.res
-SHA1-Digest: FOVr1j2HVkMtmdpGcqpE6FG3ioQ=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_2_pl.class
-SHA1-Digest: xzeBYxtH9Oi6Ympb/AoJpA+r8Xg=
-
-Name: com/ibm/icu/impl/data/icudt42b/de_CH.res
-SHA1-Digest: iWggUFP9iWQM6vz4u4uvosBlSTw=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_MA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_7_el.class
-SHA1-Digest: lwusdP/j7kumOfUmZXcKVWR9ZuY=
-
-Name: com/ibm/icu/impl/URLHandler$FileURLHandler.class
-SHA1-Digest: Nk3C/NyoD1irVs/E83xe3usluFU=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ms.res
-SHA1-Digest: zyhWSB/F90DTVxyce1M1kcFjT3w=
-
-Name: com/ibm/icu/util/IslamicCalendar.class
-SHA1-Digest: HPQc24WncyidJMQA7tU0ltnWnCE=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/iw.res
-SHA1-Digest: WZP9bAErSkXNMGcS7Cigt2GwNKw=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_IE.res
-SHA1-Digest: 5T6abhg/OLVnv8VFyHI/P09LHHg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_EG.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/ZoneStringFormat$ZoneStrings.class
-SHA1-Digest: X35OcO7tw/xR4NaU9TTPyAXDMH0=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_es.class
-SHA1-Digest: J8bXijecxdlToXRrGS1GjZlmxzI=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_ME.res
-SHA1-Digest: dcZDvDDLm120rqoRa2rrkl/voxA=
-
-Name: com/ibm/icu/text/StringPrepParseException.class
-SHA1-Digest: 7hwrnIatfmyZ81dOSQRxXm/WgQA=
-
-Name: com/ibm/icu/impl/data/icudt42b/uprops.icu
-SHA1-Digest: 8vLNyqXGunE4QYH2blIKAhRC1JA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/it_CH.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/AnyTransliterator$ScriptRunIterator.class
-SHA1-Digest: J7xT4P19qEBaVUL8ReOU7m5Wmhc=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_th.xml
-SHA1-Digest: NP0IwbGJwQJTVPp+VdZ6leVSYjU=
-
-Name: com/ibm/icu/impl/ZoneStringFormat.class
-SHA1-Digest: n3jJDl78ykXRjY9ytbsnH+fUwDA=
-
-Name: com/ibm/icu/text/EscapeTransliterator$4.class
-SHA1-Digest: NOPq/bUbsneMkFbx2hOqAYvNdiw=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/be.res
-SHA1-Digest: EU4hzpM72nJWgBnQtxdAF/Sqvrs=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_hi.xml
-SHA1-Digest: x48QdYWUXtpPWcdQKeU/uQwWBkg=
-
-Name: com/ibm/icu/impl/locale/LocaleExtensions.class
-SHA1-Digest: YEytk8PbUUmLkD5IxZtRfgy8ua8=
-
-Name: com/ibm/icu/impl/data/icudt42b/el.res
-SHA1-Digest: Qfral1uhzYOA18MgSYiOUVffZgI=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/bn.res
-SHA1-Digest: cxctNEMzXGKFExa+BKr81cP6bTk=
-
-Name: com/ibm/icu/impl/NormalizerImpl$FCDTrieImpl.class
-SHA1-Digest: mnwJsoHXLlYPybUU9/TYlZBsois=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Latn_BA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_8.class
-SHA1-Digest: 5kkX0Pb1WfSU60ydJwyKCr5ko8c=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/fr_BE.res
-SHA1-Digest: PGu/zJ5BoapgXVlTTdEaIZ32IRc=
-
-Name: com/ibm/icu/text/UnescapeTransliterator$1.class
-SHA1-Digest: Vf971NEaFuoVyyRUPsqjQ9QqHts=
-
-Name: com/ibm/icu/text/TitlecaseTransliterator$1.class
-SHA1-Digest: ekTC9gWzv3dYRBtoQqNHqbKkuCc=
-
-Name: com/ibm/icu/impl/data/icudt42b/so_KE.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs.class
-SHA1-Digest: zb96ltRlnZu1B4er1dwcZW9Eeno=
-
-Name: com/ibm/icu/impl/data/icudt42b/so_SO.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_fr.class
-SHA1-Digest: 9O29pqbYd82G8WZDF65YDtjKYYU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pl_PL.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/hi_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM424_he_ltr.cl
- ass
-SHA1-Digest: tVJXdjtBCoXEFZOxSH6FEtwZ3gY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_RS.res
-SHA1-Digest: 2ii6FCYOQG4t2sunNcYMfTFp8rA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/cs_CZ.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/TransliterationRule.class
-SHA1-Digest: utxfpe1JXSDmAHVABKr61kRepHo=
-
-Name: com/ibm/icu/impl/data/icudt42b/sq_AL.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/word_POSIX.brk
-SHA1-Digest: H+ArIep4Jx2N4RbYEuTJCwNYzYs=
-
-Name: com/ibm/icu/impl/ICULocaleService$ICUResourceBundleFactory.class
-SHA1-Digest: tQphcQBErAwyMomKnr3pUKqj+Zc=
-
-Name: com/ibm/icu/text/UnicodeReplacer.class
-SHA1-Digest: Y0PfDc+j6xXLIk74hykjzB1JKC4=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_GB.res
-SHA1-Digest: ZIcHjRFXCXCsVODe36+7mgA4Vbk=
-
-Name: com/ibm/icu/impl/data/icudt42b/no_NO_NY.res
-SHA1-Digest: 2NYID4Vq+YppdI5emYl/jXROPPs=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/line.brk
-SHA1-Digest: ZVQKdnj8YFefqEk0OYpqSafj4NY=
-
-Name: com/ibm/icu/text/TransliteratorParser$RuleHalf.class
-SHA1-Digest: uSw9Oxx+Uh9GJR8BTp4E/cqeF5A=
-
-Name: com/ibm/icu/text/LowercaseTransliterator.class
-SHA1-Digest: u+1+BuvXsLbtGmHL1x9ql9YS2eA=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM424_he.class
-SHA1-Digest: DxswcWySGwwfX1xRpMeBtysMgms=
-
-Name: com/ibm/icu/impl/locale/LanguageTag.class
-SHA1-Digest: n1pLB+RCZsWN6sqpa1jkFKt3xVU=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_DO.res
-SHA1-Digest: DqUgxafBny6RSK/5q4mvOxc7iio=
-
-Name: com/ibm/icu/impl/data/icudt42b/mt_MT.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/text/TransliteratorIDParser$Specs.class
-SHA1-Digest: z/LW93onXArAMvnRSrRW2DAb8FQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/he.res
-SHA1-Digest: m20WWXMhMf9Jguc91WRlhm7fov0=
-
-Name: com/ibm/icu/util/SimpleDateRule.class
-SHA1-Digest: myCDNTkS4hL2rfFvE1xyost/B2c=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$Equatorial.class
-SHA1-Digest: 5Vz1H3GN/CL7MoCyC4MwaiglnEM=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_ru.xml
-SHA1-Digest: +MhXs1pUJCowfzBjMIxV5Y7SOd0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hu.res
-SHA1-Digest: 1CzulnzZCBDXuQhyvA3QUmTBzKU=
-
-Name: com/ibm/icu/text/StringTransform.class
-SHA1-Digest: 87UqNV3vGCvS/7/a4HFvPbzqBx0=
-
-Name: com/ibm/icu/text/CollatorServiceShim$1$CollatorFactory.class
-SHA1-Digest: G9MKwe3Z6MWx5EgeoOjvxQzJzsA=
-
-Name: com/ibm/icu/impl/ZoneMeta$OlsonToMetaMappingEntry.class
-SHA1-Digest: hTd2gMHlAkWuHlqds37sqFpn75s=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/iw_IL.res
-SHA1-Digest: Ndcrw5xpVXzCNkJpNiv+lI2hixc=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_en_CA.class
-SHA1-Digest: JDt2Epln27M6w0EISNH/fPRsNUA=
-
-Name: com/ibm/icu/util/EasterHoliday.class
-SHA1-Digest: gU3zJqbUJQ0nepfR/f0MSnuGU5Y=
-
-Name: com/ibm/icu/text/CollationRuleParser.class
-SHA1-Digest: QOwn/ESmdLXciNhbTTbM9Z9oyUo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_HK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/cy.res
-SHA1-Digest: IjwvDB8dPSFSrF+1EmdSfxUkbQw=
-
-Name: com/ibm/icu/text/CompoundTransliterator.class
-SHA1-Digest: 5OVDmXwjxdOHAtd2CYFA+uBa9B4=
-
-Name: com/ibm/icu/text/UnescapeTransliterator$6.class
-SHA1-Digest: i9ZJrC+QqcKPKdQWsfHcPqq+Vig=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_gb_18030.class
-SHA1-Digest: iC854J7dr3cHe4KoWoNTPy9TBe8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fr_LU.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/IndianCalendar.class
-SHA1-Digest: 3XPNa9IES+iIV8QeLY7IhVDwa94=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_VE.res
-SHA1-Digest: 4VOwBf/mE6cdbFyqhsrKCRr/XOo=
-
-Name: com/ibm/icu/impl/duration/SingleUnitBuilder.class
-SHA1-Digest: 7Lbd45pTs05yTZT6LHsAVLwrDUk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/mk.res
-SHA1-Digest: NK/D6puvIc4L5KgtFCBg8xnqYgU=
-
-Name: com/ibm/icu/text/NumberFormatServiceShim$1$RBNumberFormatFactory
- .class
-SHA1-Digest: KWv7WM8vztOPnESv5qbk99bAZIU=
-
-Name: com/ibm/icu/text/PluralRules$RuleChain.class
-SHA1-Digest: xY33n67OiMo6cmfx7GzC+Nxam70=
-
-Name: com/ibm/icu/impl/data/icudt42b/lt.res
-SHA1-Digest: RCVCO7vMMVR7mU3BXzP2jYRCrcg=
-
-Name: com/ibm/icu/impl/duration/BasicPeriodBuilderFactory.class
-SHA1-Digest: N8R3x3V8zFVPD8VcvNKR+AaxYfE=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Cyrl.res
-SHA1-Digest: ofu0p2h5HG++q/Yi5O9ZawldKoI=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceTable.class
-SHA1-Digest: I6khLCo2DaxntrU0S6DIrA+yfWg=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$CombinClassTable.cla
- ss
-SHA1-Digest: 62or7OA9Pd50cK/U9LRAwN+8qfc=
-
-Name: com/ibm/icu/util/BasicTimeZone.class
-SHA1-Digest: IZl/327nYe0DJhVM90gOKrGT8Js=
-
-Name: com/ibm/icu/impl/ICULocaleService$LocaleKeyFactory.class
-SHA1-Digest: TGAXraAIjv/MY/Qk5GpoVe6jtYw=
-
-Name: com/ibm/icu/lang/UCharacter.class
-SHA1-Digest: yl1/93oXbkl3h1CO6QPdj6BsQB4=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_US.res
-SHA1-Digest: qXwLlsGY/3vEgZHppDA+hTle9kE=
-
-Name: com/ibm/icu/impl/ImplicitCEGenerator.class
-SHA1-Digest: mDdS1NF/0Pa0Skz4/d5y0u6v/W0=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/res_index.res
-SHA1-Digest: bL+dIdb2KUnRa93fXxewvMLJI2I=
-
-Name: com/ibm/icu/text/RBBISymbolTable$RBBISymbolTableEntry.class
-SHA1-Digest: h641TWqk5EPYgd6C7RW3Gr+tqdg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/in_ID.res
-SHA1-Digest: 8zlBXCvSDwjZG5pjJeRB/oOjkYQ=
-
-Name: com/ibm/icu/util/JapaneseCalendar.class
-SHA1-Digest: DoUUa2voWgbgoPWcSB/MgDkeYMU=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs$iteratedChar.class
-SHA1-Digest: nsKXKdueSf7brr92FCIhz1Qsm3I=
-
-Name: com/ibm/icu/text/CollationRuleParser$ParsedToken.class
-SHA1-Digest: 7qAThOKZIWiUm2sHRH0bGr5atnY=
-
-Name: com/ibm/icu/impl/data/icudt42b/ro_RO.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sl_SI.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_ZA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/nl.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/duration/MultiUnitBuilder.class
-SHA1-Digest: pjtW/QoFrwOxa/rvRgfkavI1GTQ=
-
-Name: com/ibm/icu/impl/ICUNotifier$NotifyThread.class
-SHA1-Digest: 0r/5F6NJvmNs1rsa4kEJrpfpDd8=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_da.class
-SHA1-Digest: 1AUxaJOgwtqynl88sHyX8dyqaMI=
-
-Name: com/ibm/icu/impl/data/icudt42b/si_LK.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/thaidict.ctd
-SHA1-Digest: HlyfpuQK4BpjbhSyj4gjqbruK+s=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/fi.res
-SHA1-Digest: npbQkpd8AZHPoLRmfuzowEfTFzc=
-
-Name: com/ibm/icu/impl/locale/AsciiUtil.class
-SHA1-Digest: 3b1TgQKu1k/RPxuKUd3w6/zig7A=
-
-Name: com/ibm/icu/impl/data/icudt42b/af.res
-SHA1-Digest: 52DLxOkAYfg0y4pBFgFNe3IQyxg=
-
-Name: com/ibm/icu/impl/data/icudt42b/el_CY.res
-SHA1-Digest: 8jQYdbnXrngEdw2KPXMdGZG6DyA=
-
-Name: com/ibm/icu/util/GregorianCalendar.class
-SHA1-Digest: hZTv4c+Oq9tB7TFdrSEav8ryhNQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fr.res
-SHA1-Digest: oJNZ0c5MEQBKMUWuJvOmIDoeLmI=
-
-Name: com/ibm/icu/util/TimeUnitAmount.class
-SHA1-Digest: pu+pMpTaGhmoBMq6unPA0qA2BA0=
-
-Name: com/ibm/icu/impl/ICURWLock.class
-SHA1-Digest: rfmo0U2aNAWxwkb5eqhh/tH4YIo=
-
-Name: com/ibm/icu/impl/UPropertyAliases$Builder.class
-SHA1-Digest: k9NaPB5XdTlDku/+HPGL7fC6Gm4=
-
-Name: com/ibm/icu/impl/ICUService$SimpleFactory.class
-SHA1-Digest: 40JBDsy4Y4/ocfF1VsvWDCiXbeA=
-
-Name: com/ibm/icu/impl/data/icudt42b/eu_ES.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/ja.res
-SHA1-Digest: Cbc5IhZH1+duwYviZZEpgIFYZoE=
-
-Name: com/ibm/icu/impl/data/icudt42b/lt_LT.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/util/TimeZoneRule.class
-SHA1-Digest: CVj+0zrNL5CgUOnjhErAPxD+Qew=
-
-Name: com/ibm/icu/impl/data/icudt42b/zu.res
-SHA1-Digest: W4VI0r+O7mZMeiYpDq0vxwobosM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/om.res
-SHA1-Digest: fajgkySjDcJyt/T3YaC1+UuLCTI=
-
-Name: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_16_BE.cla
- ss
-SHA1-Digest: I9kxMzXZX9R/Bv0nFXJfzDaoVNQ=
-
-Name: com/ibm/icu/impl/ICUResourceBundle$2.class
-SHA1-Digest: ZIsBMVavHvGZF9ZX1DYO/P56qpU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr.res
-SHA1-Digest: NK/D6puvIc4L5KgtFCBg8xnqYgU=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_NZ.res
-SHA1-Digest: jCgI1jet1172J3Hh2GIFozz94S4=
-
-Name: com/ibm/icu/util/InitialTimeZoneRule.class
-SHA1-Digest: mp5EGBn+TXpMfmVdHm8bpsRyC/Y=
-
-Name: com/ibm/icu/text/TimeUnitFormat.class
-SHA1-Digest: ViP9oKJVDmPPCKcmLxc6ZeyoGl4=
-
-Name: com/ibm/icu/impl/duration/DurationFormatter.class
-SHA1-Digest: 7rl/7uxutvms1EpNIkEwbDLA8dk=
-
-Name: com/ibm/icu/impl/PropsVectors$DefaultGetFoldingOffset.class
-SHA1-Digest: 86s/fZUL0lJFgEsOlUHS5f95Uv8=
-
-Name: com/ibm/icu/text/DateIntervalFormat$SkeletonAndItsBestMatch.clas
- s
-SHA1-Digest: 6wwt+Vn3RzhR7U9CnMWVzVP9DLQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_PE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/CharacterIteratorWrapper.class
-SHA1-Digest: quQ/R+xXqDAhzjuDqhIFhHv2obo=
-
-Name: com/ibm/icu/impl/data/icudt42b/bg.res
-SHA1-Digest: tNkdCAZjNp729CWY3Sryb1QYBtY=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ko.res
-SHA1-Digest: evbr5I+KAhPVScEH+fkA3JSA8/I=
-
-Name: com/ibm/icu/impl/data/icudt42b/de_AT.res
-SHA1-Digest: 5pyTTAp1eNGel5widQkojp7s/BU=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr_CA.res
-SHA1-Digest: c+Rn5vM/x0zcQS45Lxndnn6EitQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/te_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/util/UResourceBundle$ResourceCacheKey.class
-SHA1-Digest: GqXyodIg+d1ra8syzVxhyeATfP8=
-
-Name: com/ibm/icu/impl/ByteBuffer.class
-SHA1-Digest: DSdhbgYfq3wv3eGhF781djGuoNQ=
-
-Name: com/ibm/icu/impl/ICUResourceBundleReader.class
-SHA1-Digest: hcTMaVt1ZwyR3u8r5PKnJGdAA1E=
-
-Name: com/ibm/icu/text/NullTransliterator.class
-SHA1-Digest: vK7McK9EiV3VXgWmey860vIG26U=
-
-Name: com/ibm/icu/impl/ICUService$LocaleRef.class
-SHA1-Digest: D8+zmtHUjnAaTkgfBK27ykkjH+E=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha_NE.res
-SHA1-Digest: 4952wbbl9STSZr19VAGXk33hPag=
-
-Name: com/ibm/icu/impl/data/icudt42b/sl.res
-SHA1-Digest: XnoEYlBTMvQ2fq/7rNoqSzA+ops=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$MoonAge.class
-SHA1-Digest: vqyfPuE8UInzHXP7zsDHkL/+0jY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/invuca.icu
-SHA1-Digest: nV2nXv49GlRcOAAkPjQ+2jd2Pyg=
-
-Name: com/ibm/icu/impl/data/icudt42b/de_BE.res
-SHA1-Digest: csz++MM2eyh0NxqWiki+7CJowF4=
-
-Name: com/ibm/icu/impl/duration/Period.class
-SHA1-Digest: ru7kTkDzjLIia6nozhpZsvwQYmE=
-
-Name: com/ibm/icu/text/Normalizer$NFKCMode.class
-SHA1-Digest: TWOmWft4uNIwIw/VnhPk2RWCIeg=
-
-Name: com/ibm/icu/impl/data/icudt42b/ne_NP.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_pt.class
-SHA1-Digest: O1Ekqzlef6BbkYYhHKYFTuXZaZI=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_Arab.res
-SHA1-Digest: KmaUQEJGKBgyBCSQZqT0GbCojcc=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_US.res
-SHA1-Digest: NbniVg0+hlwZgs9vL21zvZKZ8ZY=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc4518ci.spp
-SHA1-Digest: jwS5uyK3B8J+UxFK0NWKcqWhWuQ=
-
-Name: com/ibm/icu/text/BreakCTDictionary$CompactTrieNodes.class
-SHA1-Digest: WxDBuCTnfcAYbQPXgF1zvrAkLyU=
-
-Name: com/ibm/icu/impl/data/icudt42b/be_BY.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/ICUResourceBundle.class
-SHA1-Digest: z9RbTjSpZ57D2J3yOMhnscmHC/0=
-
-Name: com/ibm/icu/impl/CalendarData.class
-SHA1-Digest: oKetVzyIxB1uqfYeKJcCRe00iCo=
-
-Name: com/ibm/icu/math/BigDecimal.class
-SHA1-Digest: bmlV5Au0e6B9r/dnfVMTXXrdnKE=
-
-Name: com/ibm/icu/text/DateTimePatternGenerator$VariableField.class
-SHA1-Digest: 7NVd830iC3dxssfuPtPgddVNpsw=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EPluralization.class
-SHA1-Digest: QAZDpJnhDQNiCMJAw3YezWa1OFU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_US_POSIX.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/uk.res
-SHA1-Digest: m1LMujAxbn500RtZ2EOHgHrtZFE=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_8_he.class
-SHA1-Digest: NrYU4M6ztrXzPGifXzmNojF6CwE=
-
-Name: com/ibm/icu/util/AnnualTimeZoneRule.class
-SHA1-Digest: KS0yZPziZiVKPTAtBKFClJu/iiU=
-
-Name: com/ibm/icu/impl/data/icudt42b/mk_MK.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/util/UniversalTimeScale$TimeScaleData.class
-SHA1-Digest: Go0JjviIig8ojaJuujyCC7l68A0=
-
-Name: com/ibm/icu/text/RBNFPostProcessor.class
-SHA1-Digest: q/ZhdtLQ26/YmVXQIltghNEEnR0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ur_PK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/locale/LocaleObjectCache.class
-SHA1-Digest: Rs3T4xei1iQRxNEvWL2gpUbSR64=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_Latn_UZ.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/nl_NL.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/tr_TR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/nl_BE.res
-SHA1-Digest: e3Jm+rsG7JODkDrlMvj2AKGDp0U=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_AR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ms_MY.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$WeightRange.class
-SHA1-Digest: 7IwnBaT3SvD2aSO6KJcD8ska5Vo=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_el_GR.class
-SHA1-Digest: 6Du4+mKi2hTN7hFK2dVFi+jEGhs=
-
-Name: com/ibm/icu/text/RuleBasedCollator$contContext.class
-SHA1-Digest: DiHfrfKH4NQKbzm6WgPo0oG+3VA=
-
-Name: com/ibm/icu/text/RuleBasedCollator$ContractionInfo.class
-SHA1-Digest: c9vy2P2kVLvYjvx+whU6+tmThIM=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Cyrl_YU.res
-SHA1-Digest: 2ii6FCYOQG4t2sunNcYMfTFp8rA=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_MH.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/text/NormalizationTransliterator$1.class
-SHA1-Digest: cZMNujQoi0deKyrTfzaAbqu4xBM=
-
-Name: com/ibm/icu/text/CollatorServiceShim$1$CFactory.class
-SHA1-Digest: gBfd+RD2EyDVs8x+UvpPSNkqlHs=
-
-Name: com/ibm/icu/impl/data/icudt42b/res_index.res
-SHA1-Digest: j/Y5C0w9IN1smPiYvtAALi7EP1I=
-
-Name: com/ibm/icu/impl/CollectionUtilities.class
-SHA1-Digest: bnviw1N7SbN1CA9YpbdHFo0i34c=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ar.res
-SHA1-Digest: mxn+DOdoFnY8cE6VINsu1sWF6k8=
-
-Name: com/ibm/icu/text/StringSearch.class
-SHA1-Digest: 2/qKN8gDomjJplfZWowovT9UiWc=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/nb.res
-SHA1-Digest: pC1VnSBS4uAHkkfeBfRT14btvFc=
-
-Name: com/ibm/icu/util/Currency.class
-SHA1-Digest: Vd+sQ7K38RWwBzmQDfPjZymtDgM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fa.res
-SHA1-Digest: lP6J92JPZzTjZeQqTriXh3t7pwc=
-
-Name: com/ibm/icu/text/UTF16.class
-SHA1-Digest: Q4h4K07luaFe7fKxRKOTAJkrdGI=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fo_FO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/TextTrieMap$LongestMatchHandler.class
-SHA1-Digest: X2PVGUt63YZq67tVXXkc1NhcBOE=
-
-Name: com/ibm/icu/impl/data/icudt42b/mt.res
-SHA1-Digest: f6x9Y8U63J6N4ZfylHTnFiUrpt4=
-
-Name: com/ibm/icu/util/SimpleHoliday.class
-SHA1-Digest: fnGw7XmpwBT8phMTJdA9jyQHhD4=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$1.class
-SHA1-Digest: a5usj8Vu8lcl6yCFt3nQYfGh6Is=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$MaxExpansionTable.cl
- ass
-SHA1-Digest: LG8DbaGsK2TfOuSxhSzlNE8uGNA=
-
-Name: com/ibm/icu/impl/duration/PeriodBuilderFactory.class
-SHA1-Digest: enn/L+fRJf2sKmAFxTbtz3YDP1A=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Latn_RS.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc3530csci.spp
-SHA1-Digest: hT8tQfqBYuaf33sYa1GreAYgtv0=
-
-Name: com/ibm/icu/impl/UCharacterPropertyReader.class
-SHA1-Digest: LVkg/Qc9VbHmjBZ1icn4Ig+BrrQ=
-
-Name: com/ibm/icu/impl/PropsVectors$1.class
-SHA1-Digest: 5FqEUvWVuM7lLyDsjCUgEe9FjZo=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_CL.res
-SHA1-Digest: obu9OW7kMF1Nx3L0IM98PGbHXeo=
-
-Name: com/ibm/icu/impl/data/icudt42b/ne.res
-SHA1-Digest: duMJizZp8RorX2N+3+Zjso72SfI=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/pt_PT.res
-SHA1-Digest: kCSqbmr0loDY9alATTUHZXexntk=
-
-Name: com/ibm/icu/impl/data/icudt42b/th_TH.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/ucase.icu
-SHA1-Digest: NbsONvF25QGxx3Uj+0gDMZjJwUs=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sq.res
-SHA1-Digest: ZciRWcJ84VGX656FvAxiXm1eMRM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sv_FI.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/nn_NO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/duration/impl/PeriodFormatterData.class
-SHA1-Digest: QHSkfrspxJbAlPznfeeS/ZL3KY4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_SG.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/fa_IR.res
-SHA1-Digest: Ft7S6n/o3/L7Am77oNmqkNnADP0=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_BZ.res
-SHA1-Digest: gNiSAh8b/u1Z0rqHV3hhBfBfN3g=
-
-Name: com/ibm/icu/impl/data/icudt42b/ca_ES.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: about_files/license.html
-SHA1-Digest: qgmm4hdKqgmltFsQdToOx+7jQq4=
-
-Name: com/ibm/icu/impl/data/icudt42b/pa_IN.res
-SHA1-Digest: aABsNcBcPMaMcFhBGb0doQYhb68=
-
-Name: com/ibm/icu/text/AnyTransliterator.class
-SHA1-Digest: vtTVdzD2QPGEGb0k2+llmPwTDoM=
-
-Name: com/ibm/icu/text/UnicodeMatcher.class
-SHA1-Digest: FT3g8JBh7zBjeL0/HM+DZ5NKiS8=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$BuildTable.class
-SHA1-Digest: j0lpHNvFTFZ5kI2HSuuOmOUaLnI=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/th.res
-SHA1-Digest: PrgXwx6kvPd60L7cLcZM/Q2JxO0=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_es.xml
-SHA1-Digest: MwvLXsR3TbSMZUVdFeyCStptuqE=
-
-Name: com/ibm/icu/text/CollationRuleParser$TokenListHeader.class
-SHA1-Digest: zmfkMc1gnmRjkVm1DPXnpDrjaFc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ta_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fr_CH.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ka.res
-SHA1-Digest: IkWJQAKvj+7KlPqpDS7It99krKk=
-
-Name: com/ibm/icu/text/ArabicShapingException.class
-SHA1-Digest: aXkH6QCASAmw0W1Yryw5kjrwtmY=
-
-Name: com/ibm/icu/text/MultiplierSubstitution.class
-SHA1-Digest: m2h61dS2htdkYl1Vz01v6HsmrWU=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_sjis.class
-SHA1-Digest: n60qSSB7U+3PM5pNZ4wiPRV2y/k=
-
-Name: com/ibm/icu/impl/data/icudt42b/sk.res
-SHA1-Digest: 8VrUr5n/mwDmSvfsNJT3z93GLG0=
-
-Name: com/ibm/icu/impl/NormalizerDataReader.class
-SHA1-Digest: P3mxrBlY1iY4G5WbZubfkQTbcjg=
-
-Name: com/ibm/icu/text/DateIntervalInfo.class
-SHA1-Digest: qfnul6lLpgX/VCWKk/J7uy85KM8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/tr.res
-SHA1-Digest: GfEOcunXuaSfRHU0te0gfJt0pkI=
-
-Name: com/ibm/icu/util/GlobalizationPreferences.class
-SHA1-Digest: LWxbbuIZxeJxmE+lpITnkWw4LMQ=
-
-Name: com/ibm/icu/impl/duration/impl/RecordWriter.class
-SHA1-Digest: v/lue5U+YnhX5R+ax7Lkrub9gbs=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/de.res
-SHA1-Digest: 0x3/6f5+CvSAa9mRWPvA62HPxKY=
-
-Name: com/ibm/icu/text/PluralRules.class
-SHA1-Digest: hHCiObLK9UFKzwKst1WWs3zt/QA=
-
-Name: com/ibm/icu/impl/data/icudt42b/so_DJ.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/impl/UBiDiProps$IsAcceptable.class
-SHA1-Digest: 1ur4xU6L4zqknyOmC8MbBZC6ljk=
-
-Name: com/ibm/icu/impl/data/icudt42b/gl.res
-SHA1-Digest: cD6A+WwrV1sCc9Q66vd6zzqw5DE=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/pt.res
-SHA1-Digest: ZUY8ahQ/8zCngGEBaPCKQdmtBb0=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1.class
-SHA1-Digest: Jrl1xlYN8m4PHJ0Rg3ZRATbFmGw=
-
-Name: com/ibm/icu/text/PluralRules$Constraint.class
-SHA1-Digest: rJu0vOah/TG2QnsK0fyVM3oMlQc=
-
-Name: com/ibm/icu/impl/UCaseProps$IsAcceptable.class
-SHA1-Digest: XLBgMJUK+hW8gwWAPk6GJb5ZEac=
-
-Name: com/ibm/icu/text/UnicodeNameTransliterator.class
-SHA1-Digest: eqMuvZwA/4Wp1OxCC8BiAZ64Wqc=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_PK.res
-SHA1-Digest: 4TV69vD1W7j1+XOtCT7MJ3bMN4k=
-
-Name: com/ibm/icu/impl/NormalizerImpl.class
-SHA1-Digest: rNltEt8QQ+yHyIbAJdq/ikmt5fI=
-
-Name: com/ibm/icu/text/MessageFormat.class
-SHA1-Digest: Xiw7CkMW5rwz2Yio5gZnLrxNK4w=
-
-Name: com/ibm/icu/impl/NormalizerImpl$NextCombiningArgs.class
-SHA1-Digest: YXiOb8g3mw7ovg7aVwC2WPly75U=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_Hant_HK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/SimpleTimeZone.class
-SHA1-Digest: i6ayoQBb7deeWACvzugp6qhZ8tM=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/title.brk
-SHA1-Digest: 3DcL4WBfEzn6DVCGWNU8f+H7wD4=
-
-Name: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_16_LE.cla
- ss
-SHA1-Digest: ii9bW2z/WhsUtyQfhc5yIR27ZXI=
-
-Name: com/ibm/icu/impl/duration/BasicPeriodFormatterFactory$Customizat
- ions.class
-SHA1-Digest: uwx71FwrVlYiNlMCHBsf/Pcfb2U=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_YE.res
-SHA1-Digest: JlgFRnI4nJlpLF9wvg2ugwSyEA0=
-
-Name: com/ibm/icu/text/BreakCTDictionary.class
-SHA1-Digest: pn7slJgjKRKLtEMgior12sDz1ak=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_MX.res
-SHA1-Digest: av934CdFdzvgow13hWU6wmuLg1w=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/id.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/hr_HR.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/lv_LV.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/is_IS.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/ZoneStringFormat$ZoneStringInfo.class
-SHA1-Digest: pbsSMUYtHO4Id/0apErFc7LK2xs=
-
-Name: com/ibm/icu/impl/ICUConfig.class
-SHA1-Digest: i6brhWFD1e9foqBetYHQjtW99Fg=
-
-Name: com/ibm/icu/lang/UCharacterEnums$ECharacterCategory.class
-SHA1-Digest: kq95RgOd7C81QGqvQ9TDGG7vGus=
-
-Name: com/ibm/icu/impl/Trie.class
-SHA1-Digest: faI/WsgoUlZyHaMpB9pbgiXR8jQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/ka_GE.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/text/Normalizer$FCDMode.class
-SHA1-Digest: cxxYxkX9o5W0IvoRzvKlbNaztGk=
-
-Name: com/ibm/icu/text/BreakDictionary.class
-SHA1-Digest: UP8ASYdqL29Glsr8/OQKevINEb4=
-
-Name: com/ibm/icu/impl/data/icudt42b/pa_Guru_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$Elements.class
-SHA1-Digest: f4elhHsP3zglY0Jy2yfnI9kTrSs=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_NI.res
-SHA1-Digest: DqUgxafBny6RSK/5q4mvOxc7iio=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$ContractionTable.cla
- ss
-SHA1-Digest: 8fuUD6JzPWZqtbTsPDfOVKtHiws=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Cyrl_ME.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/eo.res
-SHA1-Digest: +oVARzO29K91tHbe3FnahinyelY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/it.res
-SHA1-Digest: Y1cpTHeoNVfdEXGVZ93BmxkHEHM=
-
-Name: com/ibm/icu/text/DictionaryBasedBreakIterator.class
-SHA1-Digest: KeNnKYC6BsmOvho5Y6DchAtPgCA=
-
-Name: com/ibm/icu/text/Transliterator$Position.class
-SHA1-Digest: Jkv3rNTZsJ+xkVJJUBpOaTT76s8=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha_Latn_GH.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/DecimalFormatSymbols.class
-SHA1-Digest: 0mxMIxZUhCv/Q2ygAhwk0UEP9a8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_IQ.res
-SHA1-Digest: PlPVnMH+m0uWLvQE+P1Ghs8d0QU=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/en_US.res
-SHA1-Digest: +/LVRKi4A8LFr24NwK7dKO0oWpw=
-
-Name: com/ibm/icu/util/CompactByteArray.class
-SHA1-Digest: cc6CYflTyn7tNMxUw4ASBITqJMY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/az.res
-SHA1-Digest: H2uhvCqKkzlwlK8rnknx1A78Q/E=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_KOI8_R.class
-SHA1-Digest: riRX0XvAPQb+UDxa7TzhQ5BTOhA=
-
-Name: com/ibm/icu/util/Calendar$PatternData.class
-SHA1-Digest: QvNuOomKswixg40xWPLtLjJ7Tx4=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_es_MX.class
-SHA1-Digest: aJj0AuIV6cPRpCUHraAMoiitYAE=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ro.res
-SHA1-Digest: l9Mio86mPE7IXVIwDYesBpvvuaY=
-
-Name: com/ibm/icu/text/EscapeTransliterator$2.class
-SHA1-Digest: 7pXr2tZ5BIPS54TSTMYnCxzJ9ds=
-
-Name: com/ibm/icu/impl/data/icudt42b/af_ZA.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EFractionHandling.clas
- s
-SHA1-Digest: w8RJoRmgHZR1YWbZyKBeT/G8z2I=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/kn_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/DecimalFormat$AffixForCurrency.class
-SHA1-Digest: YM0iVPOvosSdWPkdTjvpaFgBaG8=
-
-Name: com/ibm/icu/text/TransliteratorParser$RuleArray.class
-SHA1-Digest: 9+5ONRBkEMeDc+pM08gGAlFKUPM=
-
-Name: com/ibm/icu/impl/duration/BasicDurationFormat.class
-SHA1-Digest: udccTJD6aKauWEMAQrpFdBqZbE8=
-
-Name: com/ibm/icu/impl/data/icudt42b/in.res
-SHA1-Digest: 4yHeO3OZURAGnQ+2Akh1AsFcJ6M=
-
-Name: com/ibm/icu/text/UnescapeTransliterator.class
-SHA1-Digest: HSvMH1HFNAHlDiIhMPqbMqRlkc0=
-
-Name: com/ibm/icu/impl/data/icudt42b/ms.res
-SHA1-Digest: gDIEZDP6L8ZZEta2qRcYp4hWuOk=
-
-Name: com/ibm/icu/text/StringReplacer.class
-SHA1-Digest: 7NR3/R3qL7pu/FLsNhafHAXzpRE=
-
-Name: com/ibm/icu/text/CollationRuleParser$Token.class
-SHA1-Digest: 2pGTO1X0k52exJqKxvbIByhLPzQ=
-
-Name: com/ibm/icu/util/UResourceBundle.class
-SHA1-Digest: GZeE/aPMAyoTiFXvkI4KS+TWO7M=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_6.class
-SHA1-Digest: 7DtfuirDtGTVCrV0L0bnydon7G4=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_ZW.res
-SHA1-Digest: FgBSoPD44rFUuOLPQRCrOHAc3tk=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_fr.class
-SHA1-Digest: q3zdWAt/DWCYaQCMAZ1T2gEJAK0=
-
-Name: com/ibm/icu/impl/PropsVectors$CompactHandler.class
-SHA1-Digest: ggK2FbvQCDVeXFFIwoX/ew6A1+E=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_BH.res
-SHA1-Digest: PlPVnMH+m0uWLvQE+P1Ghs8d0QU=
-
-Name: com/ibm/icu/impl/duration/impl/RecordReader.class
-SHA1-Digest: otdlfBIBwfQJI/LpPGORqmfxHAY=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$ScopeData.class
-SHA1-Digest: CUN2vXzRoglrcSJRSshk6n63o0s=
-
-Name: com/ibm/icu/impl/data/icudt42b/hy_AM.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/BreakIteratorFactory.class
-SHA1-Digest: C9b/3h/+ymneQJsc7NRtmTZidrE=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ga.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_CN.res
-SHA1-Digest: OqOcERNgY90GdftreFDuBO3TG1M=
-
-Name: com/ibm/icu/util/DateTimeRule.class
-SHA1-Digest: 6Y2wXwNKzW42QtQFndLjZ5eA2Vs=
-
-Name: com/ibm/icu/text/BreakCTDictionary$CompactTrieHeader.class
-SHA1-Digest: Lvk8zfGOkbWKdXgHfCdB/5w8qhg=
-
-Name: com/ibm/icu/lang/UCharacterDirection.class
-SHA1-Digest: mzsqJB3oC2e9hT9G3B+QQ8lNOvo=
-
-Name: com/ibm/icu/impl/data/icudt42b/ko_KR.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$SolarLongitude.class
-SHA1-Digest: C+U0AZa67vUwMns4qF4TRna4Qw0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/root.res
-SHA1-Digest: AckNe2H2q3g8FCoDvSBSbO+kme4=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc3722.spp
-SHA1-Digest: O+oXDpXLu3SpyBxRnC5bJn+JZKc=
-
-Name: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_32_BE.cla
- ss
-SHA1-Digest: TwM3Y0RU/24b0vY2ND6aAzh5IOU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/he_IL.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/be.res
-SHA1-Digest: 52+8V1switFgz1JwlTRd9TU5AY0=
-
-Name: com/ibm/icu/impl/data/icudt42b/zu_ZA.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/TransliteratorIDParser.class
-SHA1-Digest: gIkT1ALBXArAjCoC5O6xiugzImo=
-
-Name: com/ibm/icu/text/BreakIterator$BreakIteratorCache.class
-SHA1-Digest: phLZKKu4L32+t3q5BhoPs59gUSM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ta.res
-SHA1-Digest: m20WWXMhMf9Jguc91WRlhm7fov0=
-
-Name: com/ibm/icu/impl/locale/LanguageTag$Extension.class
-SHA1-Digest: hP1cjTyvX4J0MRjxpyyrEDzCJQ4=
-
-Name: com/ibm/icu/impl/OlsonTimeZone.class
-SHA1-Digest: 79gXZSUmqX9nyoCpNAVgO+DWdZE=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/cs.res
-SHA1-Digest: uSebe78HXFnRtd479ROo8v36RzU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ucadata.icu
-SHA1-Digest: Q0NSXQYbhwdZrWPlvg7mwKfQqzM=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/th.res
-SHA1-Digest: E5WgEa5K8Jv2uSWGq8c6bmuy7RA=
-
-Name: com/ibm/icu/impl/RelativeDateFormat.class
-SHA1-Digest: oMXqzEz0mVQhGcIkNs9yjZBB+rc=
-
-Name: com/ibm/icu/impl/duration/BasicPeriodFormatter.class
-SHA1-Digest: YQxVtZg5JGrmmU+2ORW4dsAnhhY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pl.res
-SHA1-Digest: M0bmX8ggP1RA4n9g+mfeuf4w2vI=
-
-Name: com/ibm/icu/impl/data/icudt42b/it_IT.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/UPropertyAliases$NameToEnum.class
-SHA1-Digest: 1UWDuuszFPV1T89n2Vlmt+eGCmc=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder.class
-SHA1-Digest: SybX4sTXAEHaYJdYogcpBmeDHFE=
-
-Name: com/ibm/icu/impl/duration/PeriodFormatterFactory.class
-SHA1-Digest: Gz2jDCMozbAi0EtSygOfpwiDEaU=
-
-Name: com/ibm/icu/impl/data/icudt42b/ml_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/text/EscapeTransliterator$7.class
-SHA1-Digest: Z7n+wBbeA8TUZHsmYBlqk13sMzY=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_TN.res
-SHA1-Digest: 9ITuE03Z0uIKcoax3BwbvIc/tT0=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/hi.res
-SHA1-Digest: zbX53lArZJM2PBtNDPSPxrjs/Y0=
-
-Name: com/ibm/icu/lang/UScriptRun.class
-SHA1-Digest: w95JD/6qCUnxRZfmQTKPmPKrvWM=
-
-Name: com/ibm/icu/util/MeasureUnit.class
-SHA1-Digest: Lm2xF6VH+OjPTxITaAOlgBpG12k=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hr.res
-SHA1-Digest: XuzR5SbWs2nW9osDEAfha6cGa2M=
-
-Name: com/ibm/icu/text/RuleBasedCollator$shiftValues.class
-SHA1-Digest: iqFJFznuvJ8QiNSRh8boK5ca34c=
-
-Name: com/ibm/icu/util/ULocale$Builder.class
-SHA1-Digest: aCQyYl7o/IWttOB6d9NmA+DJhQA=
-
-Name: com/ibm/icu/impl/data/icudt42b/unames.icu
-SHA1-Digest: E/oDzXc4m34RIDn+MkqvTruEPkM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_UY.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/hy.res
-SHA1-Digest: VIG9x5xgEQ9Whs1CREdMyHneEdc=
-
-Name: com/ibm/icu/text/CharsetRecog_2022$CharsetRecog_2022KR.class
-SHA1-Digest: uIlFjt23o0muOFs/AzAwDT/30n8=
-
-Name: com/ibm/icu/text/UnescapeTransliterator$4.class
-SHA1-Digest: VbbBBBlf7X8KBWgLvQAzkycRwTM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ur.res
-SHA1-Digest: M3vpShSeTW+pZKWO1dTIOU1PiQM=
-
-Name: com/ibm/icu/text/Collator.class
-SHA1-Digest: LRS6CYoxVdosNtHhOcqxwUunut0=
-
-Name: com/ibm/icu/text/CurrencyPluralInfo.class
-SHA1-Digest: mI9XG4Gzqdj+U1kyn6hVFIT1GmI=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_DZ.res
-SHA1-Digest: IDE7op9Yf3rbmNaFIehSXw7XkZ4=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Latn_CS.res
-SHA1-Digest: 63xXzYBbV2uVP5NlLgeUyp8SVsg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/az_Latn_AZ.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc3920res.spp
-SHA1-Digest: FOk27XPxxzqY/o7PdaVE9NkudcM=
-
-Name: com/ibm/icu/text/UnicodeFilter.class
-SHA1-Digest: my9i+rgEySYx94ptWNTO7DEK0CI=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_euc.class
-SHA1-Digest: JyXQVNCIPLJ3ETcNa/dGzQw07Jg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en.res
-SHA1-Digest: Y1cpTHeoNVfdEXGVZ93BmxkHEHM=
-
-Name: com/ibm/icu/impl/UCharacterName.class
-SHA1-Digest: juBrLaL8p8sCuOOVHQ1TnJMsUlY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/is.res
-SHA1-Digest: 6hK47oZwKTuGT9iPhseedM8jlF8=
-
-Name: com/ibm/icu/text/ReplaceableContextIterator.class
-SHA1-Digest: uh1kGQxSFFvCdOfvwtMV/RFp+eM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh.res
-SHA1-Digest: 6jCCDw85GO2YKFjyVbmJrz3CiPA=
-
-Name: com/ibm/icu/impl/PatternTokenizer.class
-SHA1-Digest: gs1cCTRtoRWvrb+oFfectqAAqKM=
-
-Name: com/ibm/icu/text/UnicodeDecompressor.class
-SHA1-Digest: P0CxO6PopQd9eYsRcbgFjhhJAAo=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord.class
-SHA1-Digest: yQwxbsPMAMJZtW92px2Azs09o+k=
-
-Name: com/ibm/icu/util/DateInterval.class
-SHA1-Digest: +yUQ3agmmyHDT5HONUXlJWwUCug=
-
-Name: com/ibm/icu/impl/data/icudt42b/de_DE.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/no_NO.res
-SHA1-Digest: AgYfyOH+DuzgYK7m3vioTfRNJGM=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hans_CN.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/UCharacterUtility.class
-SHA1-Digest: RYgGg5aVfygChVLyTQtG7xXr5wE=
-
-Name: com/ibm/icu/text/RemoveTransliterator$1.class
-SHA1-Digest: adHlF+kCdJ8Wpc4GRnP5ZOoybWY=
-
-Name: com/ibm/icu/lang/UCharacter$WordBreak.class
-SHA1-Digest: zJGbZhxPqMpVRK0/corQLR+o4dY=
-
-Name: com/ibm/icu/text/RuleBasedCollator$Attribute.class
-SHA1-Digest: 8sK3ftAAk+yvM8ElgkX7lH50YuU=
-
-Name: com/ibm/icu/impl/data/icudt42b/root.res
-SHA1-Digest: /jAvBLb66EQZJz5i6Gq4tq6HSvI=
-
-Name: com/ibm/icu/impl/data/icudt42b/translit/en.res
-SHA1-Digest: lOD2KZjZY+4pQnEyWvgj0DI4RDk=
-
-Name: com/ibm/icu/util/CurrencyServiceShim$1$CurrencyFactory.class
-SHA1-Digest: BKDqfNuidFYkbVc2arHWlh4IrPg=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ru.res
-SHA1-Digest: iRI+TvON4CitbxJC2tml5Gwbm24=
-
-Name: com/ibm/icu/impl/data/icudt42b/mr.res
-SHA1-Digest: UHvxkZBfSMdipoSIt5zozq5bjl0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fo.res
-SHA1-Digest: vbVaz1xXlVn5yEQRlonKgJvyGWM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_VI.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/af_NA.res
-SHA1-Digest: ZJhpBjdCUjCGufR3nIYX3msnGzU=
-
-Name: com/ibm/icu/text/RuleBasedCollator$DataManipulate.class
-SHA1-Digest: hn7tPwffVpqHMlzCJTK0MvHPNu4=
-
-Name: com/ibm/icu/text/DateTimePatternGenerator$FormatParser.class
-SHA1-Digest: vMY8S4QsTo3/NkiuMAfJlS/FmHY=
-
-Name: com/ibm/icu/text/RawCollationKey.class
-SHA1-Digest: 3p8QSf4RMy7FWuzJxVK0vTyzxm8=
-
-Name: com/ibm/icu/impl/data/icudt42b/ja_JP_TRADITIONAL.res
-SHA1-Digest: DCIG4K+9A5S+ggUNe8mClIrukoo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_SV.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/as.res
-SHA1-Digest: kNF0lmyepvyJY1OATWVPOyN5cuQ=
-
-Name: com/ibm/icu/impl/StringPrepDataReader.class
-SHA1-Digest: 5+x+D/q2Tfss85/OnRNjggZLa+8=
-
-Name: com/ibm/icu/text/PluralRules$AndConstraint.class
-SHA1-Digest: 7JpT5jTip4AmnvLsoq0vkCgsH2U=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fr_BE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/ULocale$Type.class
-SHA1-Digest: NsX83h5T3oxdnE9NRCaf11wzYAw=
-
-Name: com/ibm/icu/impl/data/icudt42b/sh_CS.res
-SHA1-Digest: 63xXzYBbV2uVP5NlLgeUyp8SVsg=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr_FR.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/duration/BasicPeriodFormatterFactory.class
-SHA1-Digest: 93Ha1HovBfFi0sXu/RlW024g4qQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_SD.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_CR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/kl.res
-SHA1-Digest: +XCe59JTx811cO0BnIbor0pY4oU=
-
-Name: com/ibm/icu/impl/data/icudt42b/fa_AF.res
-SHA1-Digest: MCUzt2dbZquysJJ9Wyftv1v2Aw0=
-
-Name: com/ibm/icu/impl/data/icudt42b/fi.res
-SHA1-Digest: egnljVIZU7/PrmmGTn7xPIB5vYQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/sv.res
-SHA1-Digest: 1GxvJ+dugNpfnkBvZhyhTVjIhz8=
-
-Name: com/ibm/icu/impl/PVecToTrieCompactHandler.class
-SHA1-Digest: jagBKk3dAK8PALAgc9WB+CemdWU=
-
-Name: com/ibm/icu/impl/data/icudt42b/kk_KZ.res
-SHA1-Digest: Pv1X4jlPvVlxVZcgVveM6ghr16s=
-
-Name: com/ibm/icu/text/RuleBasedCollator.class
-SHA1-Digest: 2HzBICFjeZ8/8lk1GXdwZU41tlU=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_ar_EG.xml.escaped
-SHA1-Digest: 89IJ4u72v6STQ+GkOaiPXvgvl4s=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_HK.res
-SHA1-Digest: speOMn/V2KXsedph/5CkSZvBY08=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Latn_BA.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_PR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/TransliteratorRegistry$IDEnumeration.class
-SHA1-Digest: 74amdxMNJNhmTUp/bulLHwa6i2c=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_CA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/si.res
-SHA1-Digest: 6M3GODokvo4JZ45IPc4pyGHIYEY=
-
-Name: com/ibm/icu/text/BidiLine.class
-SHA1-Digest: jKOX3AurU/M65CYpHs3YvYETEek=
-
-Name: com/ibm/icu/impl/StringUCharacterIterator.class
-SHA1-Digest: ekMX227GRJphyERiR/umNms9kM4=
-
-Name: com/ibm/icu/impl/data/icudt42b/sw_TZ.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/util/ValueIterator$Element.class
-SHA1-Digest: Z/T9wKiHNB+APS2ppz/rMGcZNDM=
-
-Name: com/ibm/icu/impl/data/icudt42b/vi_VN.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/ICUDebug.class
-SHA1-Digest: SspfDg59S2oDuGoH8+SkpBx8s90=
-
-Name: com/ibm/icu/impl/ZoneStringFormat$ZoneStringSearchResultHandler.
- class
-SHA1-Digest: BYPDhs+w8cmo9wAbabRKm1NFmC0=
-
-Name: com/ibm/icu/util/ULocale$1.class
-SHA1-Digest: L5DCd7IW6ovpmPR11P7CCnuArHo=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_5_ru.class
-SHA1-Digest: a/FsoaP2fh5J5wU2qkxQBUWJb/4=
-
-Name: com/ibm/icu/impl/data/icudt42b/ko.res
-SHA1-Digest: tOu85iYUlfDaTDxuuVMYkyJYoHk=
-
-Name: com/ibm/icu/impl/CalendarCache.class
-SHA1-Digest: 978G+98m5Rh9L1p42o178Ly9eKs=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/lv.res
-SHA1-Digest: 4SzArVsgHZrdCIIUzut2PY4nrj8=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceTable32.class
-SHA1-Digest: WPNlKMDc2Tuy/gugJ/bvNQR8L0w=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_fr.xml
-SHA1-Digest: q6GC/B2UeKvgMaDcH227hHVFGZY=
-
-Name: com/ibm/icu/text/DateIntervalInfo$PatternInfo.class
-SHA1-Digest: 4/oklHbdHf13PMYRQkAzk38U1tk=
-
-Name: com/ibm/icu/impl/data/icudt42b/om_KE.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/text/RBBIRuleBuilder.class
-SHA1-Digest: lg7MPOym9rNtMJUUA8ulzJGlDS8=
-
-Name: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_32_LE.cla
- ss
-SHA1-Digest: X95uQTiQ2wmoXpevIRmZTrG3YRQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_QA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/TransliteratorParser$RuleBody.class
-SHA1-Digest: Xong52pzaxRFJy7oUm3qakdrrWU=
-
-Name: com/ibm/icu/impl/data/icudt42b/sh_BA.res
-SHA1-Digest: vYOnYIQEmwDnRfySDiGCAZETvgI=
-
-Name: com/ibm/icu/util/CompactCharArray.class
-SHA1-Digest: HTvkUkdGiggb8cA8jgTTErrJDKY=
-
-Name: com/ibm/icu/lang/UCharacter$JoiningGroup.class
-SHA1-Digest: RFbRF6cgexKGY8nzvWunz1c+lRs=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_ja_JP.class
-SHA1-Digest: 94Q//J7nEmgNgIHchnp3upyZK80=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Cyrl_BA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc3530cs.spp
-SHA1-Digest: X/hcRTFL9xucSczvJdQ5nhEtyjY=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_AE.res
-SHA1-Digest: xB4LS1AXeLApkNRYIagiSn8fWm8=
-
-Name: com/ibm/icu/text/TransformTransliterator.class
-SHA1-Digest: Bp5EzBliTjSPluXDEnQ2DTLVlSY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_Hant_MO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/et.res
-SHA1-Digest: 5sefqgiyK6TsRUJsBZNq6rdoSFo=
-
-Name: com/ibm/icu/text/PluralRules$ConstrainedRule.class
-SHA1-Digest: mwS5RQX34YK/F18R/1DjGO5s3yk=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/vi.res
-SHA1-Digest: SKKBSmXiXjkfCso9m0wB8fcRO0k=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/bn_IN.res
-SHA1-Digest: cxctNEMzXGKFExa+BKr81cP6bTk=
-
-Name: com/ibm/icu/text/IntegralPartSubstitution.class
-SHA1-Digest: TpSmcVNsIPtTQutvMY/1h5r0QF8=
-
-Name: com/ibm/icu/impl/data/icudt42b/uk.res
-SHA1-Digest: t0VnKz31Xa+/q0TbAqWqkzNO0ek=
-
-Name: com/ibm/icu/text/RBBIRuleScanner.class
-SHA1-Digest: OE2CMGT9R6AY2Vy88H38N3iSw38=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hu_HU.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/RBBIRuleScanner$RBBISetTableEl.class
-SHA1-Digest: rEFw4whXXbI9r6JfLgXUytOyvv4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/el_GR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/translit/res_index.txt
-SHA1-Digest: ccDO61RRoZeVanV00Bh3R8N3sAM=
-
-Name: com/ibm/icu/impl/UCharArrayIterator.class
-SHA1-Digest: fD55q09R46pQmMVkSx1qnl6ZwK4=
-
-Name: com/ibm/icu/impl/Punycode.class
-SHA1-Digest: 33Cw/TgF+Vpe0qFLg9EfQzF/TqE=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ru_UA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/kk_Cyrl.res
-SHA1-Digest: ofu0p2h5HG++q/Yi5O9ZawldKoI=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/zh_Hant.res
-SHA1-Digest: BUFDOhxml2zt0sarXan2QbEgDVI=
-
-Name: com/ibm/icu/text/TitlecaseTransliterator.class
-SHA1-Digest: tXpjeR9ROFwNlV9dZ/7tyGMxxzE=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_8_I_he.clas
- s
-SHA1-Digest: HwGee4XXYIs8h31ApYcJg+M2AGg=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/char.brk
-SHA1-Digest: 24ckRQ8bFjANmi7CJB+e3SdfxOo=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl.class
-SHA1-Digest: eY4eVJw+5MgftU/m31xLoSUdVEo=
-
-Name: com/ibm/icu/impl/UPropertyAliases$ContiguousEnumToShort.class
-SHA1-Digest: sJi+BMHZTNNTiJrR7+adqFkrbK4=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_en_US.class
-SHA1-Digest: mfCx2hYc8gNROIoHOAWQvReUKBk=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar.res
-SHA1-Digest: kdMpoz4d3X5Q0VX7vpBMTpahZHo=
-
-Name: com/ibm/icu/impl/locale/BaseLocale$BaseLocaleKey.class
-SHA1-Digest: y3N56aqGeOurXb25ANv5Lpv+JZM=
-
-Name: com/ibm/icu/impl/data/icudt42b/nb.res
-SHA1-Digest: P1WTbgYJCRRiiqBeiKzVSgyfN+M=
-
-Name: com/ibm/icu/util/RuleBasedTimeZone.class
-SHA1-Digest: Hz3GJvEjL+DaZg4d7cV1ykMvJCU=
-
-Name: com/ibm/icu/text/BreakCTDictionary$CompactTrieHorizontalNode.cla
- ss
-SHA1-Digest: 8ubK2FFiCZ8rL211dzKm7vhqZw4=
-
-Name: com/ibm/icu/impl/duration/PeriodFormatter.class
-SHA1-Digest: fgmgm7tQREqM8kA9uECAJQvWXcA=
-
-Name: com/ibm/icu/impl/ICUData$3.class
-SHA1-Digest: SNoX0DZtpC0NoTAfFC8Skxnk19c=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sk_SK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/TransliteratorRegistry$CompoundRBTEntry.class
-SHA1-Digest: EPnpi9TAxVaO3NeV1adWIdFgrYk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ga_IE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_PA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ca.res
-SHA1-Digest: NttIT6YBvTg34r7iqmE6HXsLm2Y=
-
-Name: com/ibm/icu/impl/ICUBinary$Authenticate.class
-SHA1-Digest: L3EQHZn7xcd114K4mUWT1FJmgiM=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_BW.res
-SHA1-Digest: yPOqHpP+lfKjwqoLwMj9q+MFsh4=
-
-Name: com/ibm/icu/impl/data/icudt42b/nb_NO.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/InvalidFormatException.class
-SHA1-Digest: KQj97EUEqC/UjllyMtFzgCozy9s=
-
-Name: about_files/ucdterms.txt
-SHA1-Digest: VSl7MUMAroQl6WS17r4Mov82WGE=
-
-Name: com/ibm/icu/impl/data/icudt42b/et_EE.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/SCSU.class
-SHA1-Digest: gtL+Jw2NeLaYqamDE4o+5Mj8fwI=
-
-Name: com/ibm/icu/text/NormalizationTransliterator$4.class
-SHA1-Digest: zxwhI6zKlhVTIwG+EoxHm5GuwsI=
-
-Name: com/ibm/icu/impl/duration/TimeUnit.class
-SHA1-Digest: +J6ylhxAa9t5D3hJsleaDIcefRo=
-
-Name: com/ibm/icu/impl/UCharacterProperty.class
-SHA1-Digest: wkAjE+pktFKGcDpWVWaZJkrTEaA=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_zh_Hant.xml
-SHA1-Digest: oqiUHHJv27k8wMntxWNJWm5cuyU=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_PY.res
-SHA1-Digest: 2ELEXjaQo8G5C0a6Hy/Hkz7rMSU=
-
-Name: com/ibm/icu/impl/data/icudt42b/sh.res
-SHA1-Digest: 5xIT4uaABWOSZbAPadn5pBVATSA=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceArray.class
-SHA1-Digest: n20Yw5n5uQ+BIumrifw1rJ+ib4Y=
-
-Name: com/ibm/icu/util/OverlayBundle.class
-SHA1-Digest: VA09j//ouBzZfRljhs43EWH1UWg=
-
-Name: com/ibm/icu/impl/UPropertyAliases$EnumToShort.class
-SHA1-Digest: qCCoaX1zSCkCReWgxReTup/2G44=
-
-Name: com/ibm/icu/impl/data/icudt42b/ru_RU.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/fi_FI.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/res_index.txt
-SHA1-Digest: zMIWnk6WM/vR2hqXFYMQNXNgZOA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_LB.res
-SHA1-Digest: y01P6EzYLLwoVlSjXJeuBgiLjCM=
-
-Name: com/ibm/icu/util/Range.class
-SHA1-Digest: Gdt1lwgw36pXsWkU5+00HqS3QIg=
-
-Name: com/ibm/icu/impl/data/icudt42b/gl_ES.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sh_YU.res
-SHA1-Digest: 63xXzYBbV2uVP5NlLgeUyp8SVsg=
-
-Name: com/ibm/icu/impl/data/icudt42b/kn.res
-SHA1-Digest: SVYFAxtKC+g1SO17ypdtiXirQ+U=
-
-Name: com/ibm/icu/text/CollationParsedRuleBuilder$MaxJamoExpansionTabl
- e.class
-SHA1-Digest: Eok++JuBprd94P5XKo5qwmWXWrU=
-
-Name: com/ibm/icu/impl/duration/DateFormatter.class
-SHA1-Digest: oJjB/+u4BmY6gz/1nLFC/kPqZwk=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_PH.res
-SHA1-Digest: 6BW6lipgAJqQsAKKGoMdtSasfBY=
-
-Name: com/ibm/icu/text/Normalizer$NFCMode.class
-SHA1-Digest: WfCJwh7saeRB031INtF1nyrY/eA=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_CS.res
-SHA1-Digest: aduEqkdKeplfC5eiWemPKHmW34A=
-
-Name: com/ibm/icu/text/TransliteratorParser.class
-SHA1-Digest: uTVZldbPwZNIfoTa/80LFyt47jg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ja_JP.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_EC.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/IntTrie.class
-SHA1-Digest: Emz1DpkrwDLpkWJrLwen4ogwy38=
-
-Name: com/ibm/icu/impl/data/icudt42b/uk_UA.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$4.class
-SHA1-Digest: TWFpivaDmTZyNPWR0TZvAtsI/nQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_Hant_TW.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc3530mixp.spp
-SHA1-Digest: k7n909A1REAMmV/8LzfjYnuVV9E=
-
-Name: com/ibm/icu/util/LocaleData$MeasurementSystem.class
-SHA1-Digest: dTfJgF/KG451ruH4/XBUID8h6vI=
-
-Name: com/ibm/icu/impl/data/icudt42b/ro_MD.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/UppercaseTransliterator.class
-SHA1-Digest: K65rOhkHFPPJvTXVS2GDDskDrTw=
-
-Name: com/ibm/icu/lang/UCharacter$LineBreak.class
-SHA1-Digest: WedFMmAGGCS+5uNafKaQHQNgmb4=
-
-Name: com/ibm/icu/impl/data/icudt42b/ti.res
-SHA1-Digest: WLeTLbxjrlBE8fDMGACkk1zylsk=
-
-Name: com/ibm/icu/util/TimeUnit.class
-SHA1-Digest: YYv+j0u/3WBB/3MsB5Up+pODuoU=
-
-Name: about.html
-SHA1-Digest: rVxS5BfocAAiJOoDz/y0EGBqWJQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_ES.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/th_TH_TRADITIONAL.res
-SHA1-Digest: dm/VvqW10ZR3pUBSFUpvtHbOtyM=
-
-Name: com/ibm/icu/impl/data/icudt42b/de.res
-SHA1-Digest: r2YFTqYDh43kuN8P+52svTSa2QM=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha_GH.res
-SHA1-Digest: UpQPUoCUtlF8gu6zJzaxTmrcrd4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/el.res
-SHA1-Digest: m20WWXMhMf9Jguc91WRlhm7fov0=
-
-Name: com/ibm/icu/impl/data/icudt42b/pt.res
-SHA1-Digest: PIlKrQuWNHvwerC93IMwogMB2w8=
-
-Name: com/ibm/icu/util/TimeArrayTimeZoneRule.class
-SHA1-Digest: JrMCVEvM6EXDzfMLF4hLxx/UTu8=
-
-Name: com/ibm/icu/impl/BOCU.class
-SHA1-Digest: 5zGkejToe99lZmFfgN60Aw1CGLg=
-
-Name: com/ibm/icu/util/RangeValueIterator.class
-SHA1-Digest: C7gsvse8Hi7kFuiOsp6IH6N6LZs=
-
-Name: com/ibm/icu/impl/duration/impl/YMDDateFormatter.class
-SHA1-Digest: 04ea5xJyxIHWp8noFNHjcF8WY/M=
-
-Name: com/ibm/icu/text/TransliteratorRegistry$ResourceEntry.class
-SHA1-Digest: enFBOMFozjzH7zQDyyzk5JQMSyI=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/es.res
-SHA1-Digest: 2+qJ2wsZOqcH8UavAC/5OT+BWN0=
-
-Name: com/ibm/icu/impl/data/icudt42b/ubidi.icu
-SHA1-Digest: 8PG8LlE9FD31PSbCFlqH8ikBN/E=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_MT.res
-SHA1-Digest: Pcke7lFGpfc23L9mplirDz06oEU=
-
-Name: com/ibm/icu/impl/NormalizerImpl$NormTrieImpl.class
-SHA1-Digest: GBex0A5HCO3NbnOqR1hsq7uCKdM=
-
-Name: com/ibm/icu/text/PluralRules$RangeConstraint.class
-SHA1-Digest: q40jS31nQeUuwXHCU/LJExfrtBQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_BO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/mr_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CaseFoldTransliterator.class
-SHA1-Digest: SZ9RH9iVqmQKyXe+4EodLH2yFJE=
-
-Name: com/ibm/icu/text/NFRuleSet.class
-SHA1-Digest: YOae4QHYvx66WmYCpkPIjpXAgSE=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_SG.res
-SHA1-Digest: 99MTdXPuizTQKIDtoLc37T5PHW0=
-
-Name: com/ibm/icu/impl/ICUBinaryStream.class
-SHA1-Digest: hwmYmhWRwl1SLll0fs1fViSKoKk=
-
-Name: com/ibm/icu/impl/data/icudt42b/translit/el.res
-SHA1-Digest: 8pcLhZA5frBXKUIf3AD59p6DT2o=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/nn.res
-SHA1-Digest: 3MUK/nZAIdYhsFmqdH72FN13NGo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de_LU.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ur_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_AU.res
-SHA1-Digest: RyQf0wElkKbRCCBLJXA8u2TsY50=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz.res
-SHA1-Digest: N3L5iQmIl1raILWLrrGf95ussYk=
-
-Name: com/ibm/icu/lang/UCharacterCategory.class
-SHA1-Digest: DKoDFXBwKD0rTGW0gmri0Gv1V1M=
-
-Name: com/ibm/icu/text/Transliterator.class
-SHA1-Digest: qEg4h7YGt0qhMDM74Imk2Wxc7ik=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_JO.res
-SHA1-Digest: NNqZL3oR7R1bDqOqiHpw7PObhUw=
-
-Name: com/ibm/icu/impl/Assert.class
-SHA1-Digest: 7EflTLK1aav09w+8J9byWrzxwJ8=
-
-Name: com/ibm/icu/impl/data/icudt42b/supplementalData.res
-SHA1-Digest: iHFo2qpbPrI0GGNg8gDE+iognNA=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EHalfSupport.class
-SHA1-Digest: xaZ+Li5POYKVmpZR06xzhQbgAYA=
-
-Name: com/ibm/icu/text/SearchIterator.class
-SHA1-Digest: eSteDarFySmrnoW7QrhHbfS2eiU=
-
-Name: com/ibm/icu/impl/duration/DurationFormatterFactory.class
-SHA1-Digest: e6pCRwBCGl1NmEZzElE0lt+Tf5Q=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_US_POSIX.res
-SHA1-Digest: uhAY7D8tk/T13H2LeMxceizSn2M=
-
-Name: com/ibm/icu/text/NameUnicodeTransliterator.class
-SHA1-Digest: xKXUkrHKrAt4N+ALLEuv/LRumKw=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_ar_EG.xml
-SHA1-Digest: oIUIfYHf6QfubBGuBMOOiC8BhKo=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_zh_Hant_HK.xml
-SHA1-Digest: CC3kTS07LVUlBxSGdrmbKrxeHT4=
-
-Name: com/ibm/icu/impl/TextTrieMap.class
-SHA1-Digest: i01hKmZ+v9n2opn7bBp8Ekh4DmI=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_BA.res
-SHA1-Digest: 6q0h04Ey+gEIoBcrzyHzzX1kkzA=
-
-Name: com/ibm/icu/impl/data/ResourceReader.class
-SHA1-Digest: KvaIhFKr51gH4b5+O0z6jeVOxKQ=
-
-Name: com/ibm/icu/lang/UProperty.class
-SHA1-Digest: twc3qgeSyXtpY7eshpN6PrAr9Eo=
-
-Name: com/ibm/icu/text/Bidi$LevState.class
-SHA1-Digest: 0UyGHDenyloCdjPmWuzEhGzlGaY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pt_PT.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$Ecliptic.class
-SHA1-Digest: fpxm9HdwYfU8XsM2YRX/Ez8LqHU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_OM.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/plurals.res
-SHA1-Digest: AMk9el/59ihFhiQR5IwA4pDu4YA=
-
-Name: com/ibm/icu/impl/duration/PeriodFormatterService.class
-SHA1-Digest: AMUsoC/LowGM8ijioxYAKxEAi7c=
-
-Name: com/ibm/icu/impl/NormalizerImpl$ComposePartArgs.class
-SHA1-Digest: JECwXa9jCR5hR94sygRyPH+MfiY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sv_SE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/Freezable.class
-SHA1-Digest: Nett7+AkkXCiNnrJnxflPvqpmL8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/om_ET.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_it.xml
-SHA1-Digest: 7xCHchUQRlpLbS/+eVSne7fiYyA=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Latn_RS.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_HN.res
-SHA1-Digest: hbFcqJVXRt+6y3H4Ur0GA+QDhkA=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_zh_Hans.xml
-SHA1-Digest: BIlCGllGabqtfsLAKABjzjniGb0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/cy.res
-SHA1-Digest: cxctNEMzXGKFExa+BKr81cP6bTk=
-
-Name: com/ibm/icu/impl/URLHandler$JarURLHandler.class
-SHA1-Digest: 0VxcRVI+Vxl9YOEnZcJsyz8HxkM=
-
-Name: com/ibm/icu/text/BreakTransliterator$ReplaceableCharacterIterato
- r.class
-SHA1-Digest: cwcoXguflrDaGjAiatJfM62U/So=
-
-Name: com/ibm/icu/text/Normalizer$IsNextNFDSafe.class
-SHA1-Digest: HjqQUnj1PZDJ6LWbo4bH4Dy/Nmc=
-
-Name: com/ibm/icu/text/StringPrep.class
-SHA1-Digest: r2/v9NTIfI7t6heL+JGrJrnGlX8=
-
-Name: com/ibm/icu/text/SameValueSubstitution.class
-SHA1-Digest: I0Yb/iaWoL/Q9SmDdVKSI2PDow8=
-
-Name: com/ibm/icu/text/BidiWriter.class
-SHA1-Digest: A55m2XvTflUUWjb06MWmUIQZ/r4=
-
-Name: com/ibm/icu/util/CalendarServiceShim$1$RBCalendarFactory.class
-SHA1-Digest: 2YX6s5iEVSM09fEEo9af6TIxI8w=
-
-Name: com/ibm/icu/text/NumberFormat.class
-SHA1-Digest: r4oRPG04+89iIchE/IRijGjG3Hg=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_Cyrl_UZ.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/text/Replaceable.class
-SHA1-Digest: P9D/42FBm3mI1gq3AcY65zHa1Z0=
-
-Name: com/ibm/icu/text/NullSubstitution.class
-SHA1-Digest: GYmVmxF/d4gycD7IaPPH3ue7oW8=
-
-Name: com/ibm/icu/text/EscapeTransliterator$5.class
-SHA1-Digest: hgNOnYM6NClu2fcKurTQsExqArw=
-
-Name: com/ibm/icu/impl/RuleCharacterIterator.class
-SHA1-Digest: sBDGFbddtrFMZ+nuE/bOogHcYGo=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/da.res
-SHA1-Digest: SQhrgOFBLruGpF1nEAx0nghlEPE=
-
-Name: com/ibm/icu/impl/data/icudt42b/kk_Cyrl_KZ.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/util/CurrencyServiceShim.class
-SHA1-Digest: Ryy1dcxGmbqQSMzOmlzsIwBwo8Q=
-
-Name: com/ibm/icu/impl/data/icudt42b/km.res
-SHA1-Digest: scC5i45GluFETfMFwK1q6dVLqJA=
-
-Name: com/ibm/icu/impl/ICUResourceBundle$AvailEntry.class
-SHA1-Digest: tceD5Z5nfKTPImhuz0s3aCBQlRM=
-
-Name: com/ibm/icu/impl/data/icudt42b/or.res
-SHA1-Digest: NZx4uyUBm4F3N8JBtgqNShVHVwA=
-
-Name: com/ibm/icu/impl/data/icudt42b/sw.res
-SHA1-Digest: bCl8PqEwPU6p4brWqdea4WicFAI=
-
-Name: com/ibm/icu/impl/TrieBuilder.class
-SHA1-Digest: swpyE6nI4Sr7KpJbd42Y0cERBzs=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/lt.res
-SHA1-Digest: U6Kwjj5lfZ28Tt7BX0tmcXZ4E+s=
-
-Name: com/ibm/icu/impl/data/icudt42b/gsw.res
-SHA1-Digest: GL/X7TK/JJbVmM9jS3+u2HYHpjU=
-
-Name: com/ibm/icu/impl/locale/InternalLocaleBuilder$FieldHandler.class
-SHA1-Digest: ssy5lCqgMOaIKIYOIYrXDrURwNU=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_MO.res
-SHA1-Digest: K0sKinko64INKTDfbkgnrEzo0W4=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_9.class
-SHA1-Digest: qoKPPirLpeq2ZK0FxFiMzSfPAxE=
-
-Name: com/ibm/icu/impl/data/icudt42b/likelySubtags.res
-SHA1-Digest: 9YPzb4vut3wWJCZNsmHTdNra3IM=
-
-Name: com/ibm/icu/impl/data/icudt42b/cs.res
-SHA1-Digest: 1JJ0+mG6GvYpDOZx8HrpvRXc9Lo=
-
-Name: com/ibm/icu/impl/data/icudt42b/bo_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/text/RBBINode.class
-SHA1-Digest: oR1BJYBbEC9i1uC84s7oLN237ZU=
-
-Name: com/ibm/icu/text/UnescapeTransliterator$2.class
-SHA1-Digest: bo4DZ9p24LQ5XQYJVaZxkWr/JJ0=
-
-Name: com/ibm/icu/impl/data/icudt42b/th.res
-SHA1-Digest: MTUh6AsBSzgZqIBn4ktBHyNSRSc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_LY.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/haw.res
-SHA1-Digest: NP6/LJllJv4b3gO3iY93kXOjiTo=
-
-Name: com/ibm/icu/text/CollationRuleParser$TokenOption.class
-SHA1-Digest: X5GQBJR2uKMv0v6z9Ni79EHUiZ0=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_2_ro.class
-SHA1-Digest: 5qkdYEq4AOVDGPc5TWqPRUyNw8g=
-
-Name: com/ibm/icu/lang/UProperty$NameChoice.class
-SHA1-Digest: yFtZ9Irist4OxZVIo2vlmVFMR+o=
-
-Name: com/ibm/icu/impl/data/icudt42b/hi.res
-SHA1-Digest: X4CpJX4+Li9pyDS8x9tzZmCPCLg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/af.res
-SHA1-Digest: oR99rVvv+PeTWvs0iCiGEd0dFV0=
-
-Name: com/ibm/icu/impl/data/icudt42b/ps.res
-SHA1-Digest: 2/K9VtxxLDzS0u3szgd5VtFR7Dc=
-
-Name: com/ibm/icu/impl/data/icudt42b/ii_CN.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pt_BR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/TokenIterator.class
-SHA1-Digest: aVl9NEiavWU3YjMYXsmRqECSMcA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/res_index.res
-SHA1-Digest: uHnJT3lzNstJ+buwWlS+sOdWFSA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Cyrl_RS.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/am.res
-SHA1-Digest: kfAb0g/do/S4zkVbGOq95YiBdAc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/res_index.res
-SHA1-Digest: 1qlBKagoG9eeh1jKNQ+iO9OTzgM=
-
-Name: com/ibm/icu/impl/data/icudt42b/hy.res
-SHA1-Digest: NOel2U/i+2WvxpGEd3vzPQlspgY=
-
-Name: com/ibm/icu/text/CanonicalIterator.class
-SHA1-Digest: xnw2H+5eqcNRKWtbdizobk+l3cw=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hant_HK.res
-SHA1-Digest: tDBSVpaxCAkm5VCMjAMGx7lKjsQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ja.res
-SHA1-Digest: nYn3Ybdhw+lhVbLhXx5qDlUiCj4=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_IN.res
-SHA1-Digest: ypWKEdk5Rt3Nr8XEnGYHLR8Yjlo=
-
-Name: com/ibm/icu/impl/data/icudt42b/bg_BG.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/IntTrieBuilder.class
-SHA1-Digest: ZR3vLaX/II6ocmZnF1dab3EX7jo=
-
-Name: com/ibm/icu/impl/data/icudt42b/kl_GL.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/text/CharsetRecognizer.class
-SHA1-Digest: ULmVva2M/Asi4KaInjapEMNfMvg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/bg.res
-SHA1-Digest: NK/D6puvIc4L5KgtFCBg8xnqYgU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ms_BN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/RBBITableBuilder$RBBIStateDescriptor.class
-SHA1-Digest: 5CbyXkVPOCRgvm43RVB1fSE8vdk=
-
-Name: com/ibm/icu/text/Normalizer$NFKDMode.class
-SHA1-Digest: hGcahPb4PoOii4Nm7MUVXKgV3Pg=
-
-Name: com/ibm/icu/impl/data/icudt42b/da_DK.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/BreakIteratorFactory$BFService.class
-SHA1-Digest: trG7yIeZRtCmuuC+oW1rJ3ILKi8=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/word_ja.brk
-SHA1-Digest: tceghqHRl7z9Gx4ul5FP7AtQCys=
-
-Name: com/ibm/icu/impl/duration/BasicPeriodFormatterService.class
-SHA1-Digest: /IhFZk0vqWB/qEymixjz0UUB6XU=
-
-Name: com/ibm/icu/text/TransliterationRuleSet.class
-SHA1-Digest: z9OCJccykmEAzuzoAQwJy/ZwmTE=
-
-Name: com/ibm/icu/util/Calendar$CalendarFactory.class
-SHA1-Digest: hAO3/qAyMaCOjNMsf/1xDvyDlxw=
-
-Name: com/ibm/icu/text/CollatorReader$1.class
-SHA1-Digest: XfneLo+da605Z0T7kr87N0IzpzM=
-
-Name: com/ibm/icu/ICUConfig.properties
-SHA1-Digest: SCRFZaOrbKPIS/W7+VFVzS5d3nQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_Hant.res
-SHA1-Digest: Vzijs9UOpZ0iyXvC+RIPDtTey2E=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$ENumberSystem.class
-SHA1-Digest: fnqsq9Lfsiorohk0u/wBJwmRCVM=
-
-Name: com/ibm/icu/impl/data/icudt42b/eu.res
-SHA1-Digest: yE58IZubFCmb2mUi71FPTddERCo=
-
-Name: com/ibm/icu/impl/data/icudt42b/gu_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_BE.res
-SHA1-Digest: zof7Bj2xRNFP0GiZuuIlf4V020s=
-
-Name: com/ibm/icu/text/CollationElementIterator$Backup.class
-SHA1-Digest: QTiFlEWotNTTMe1M31LxBytjQ8s=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sl.res
-SHA1-Digest: xWu0zgcmdp3t9avBdcWj8WpO0VA=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_Arab_AF.res
-SHA1-Digest: Ft7S6n/o3/L7Am77oNmqkNnADP0=
-
-Name: com/ibm/icu/text/UnescapeTransliterator$7.class
-SHA1-Digest: 1COLbKa0Athi2T/UgjA7hFrBhfs=
-
-Name: com/ibm/icu/text/DateTimePatternGenerator$DistanceInfo.class
-SHA1-Digest: wjoYmQEQ09veIvhZYWHApPNDtNA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_SA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_CO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_GT.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/RBBISetBuilder$RBBIDataManipulate.class
-SHA1-Digest: Po1bvO+0klNcFrP5dy8s3h307p8=
-
-Name: com/ibm/icu/impl/TextTrieMap$CharacterNode.class
-SHA1-Digest: s1XpJZR+JPGA7ecglSnL42531qo=
-
-Name: com/ibm/icu/impl/duration/FixedUnitBuilder.class
-SHA1-Digest: HSbqvtuBILCgbZTCDtUgG5WDFeg=
-
-Name: com/ibm/icu/impl/data/icudt42b/ru.res
-SHA1-Digest: 2tpiQqm9vibO03vrWglGYayiVfs=
-
-Name: com/ibm/icu/text/Collator$ServiceShim.class
-SHA1-Digest: VBfc7pG0uiVRhlFmGqm+C7kR4eQ=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_big5.class
-SHA1-Digest: z/Onqges6+n2jM8mPFe65NmKmU8=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_en.xml
-SHA1-Digest: yhRPJdLgfaPae0/Oq7Pnf/JEu+4=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_TW.res
-SHA1-Digest: FI8SXUxAHIZ4WAdjGjq/j705WQs=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_SY.res
-SHA1-Digest: 84JDwhg4qOWQWIAPO46GEkV0i64=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es__TRADITIONAL.res
-SHA1-Digest: FmpAb3TmF+UYaintHRcBMM2MgOc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_KW.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/id_ID.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/kok_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/impl/UPropertyAliases$NonContiguousEnumToShort.class
-SHA1-Digest: syk6fjKZM2e9hx/QajWdR9zWcbk=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/he.res
-SHA1-Digest: 5g/JP/rIqxKTtDBuAn7T9oKOJBQ=
-
-Name: com/ibm/icu/util/Currency$ServiceShim.class
-SHA1-Digest: ZLvnyC+Wx1tf5IkKTyW6cTGag9U=
-
-Name: com/ibm/icu/impl/data/icudt42b/kl.res
-SHA1-Digest: qEj3QAIRkho3t0RhL0CPP1RJY74=
-
-Name: com/ibm/icu/impl/data/icudt42b/kok.res
-SHA1-Digest: 0Cq49xx+kBa1hTzjtrV5Ml3qEhA=
-
-Name: com/ibm/icu/util/Currency$CurrencyNameResultHandler.class
-SHA1-Digest: P+l9cS7yf4SjldSpTgQrZbqIk5c=
-
-Name: com/ibm/icu/impl/data/icudt42b/sv.res
-SHA1-Digest: t7f2hjU7Bu0g5ZvKa/TDCURG4Ts=
-
-Name: com/ibm/icu/text/ModulusSubstitution.class
-SHA1-Digest: ejqkE7UO4iF3YILImA3/n3UKwPY=
-
-Name: com/ibm/icu/text/DateIntervalFormat.class
-SHA1-Digest: hQsyM1rFuioogc6Dr9YOB7rELdc=
-
-Name: com/ibm/icu/text/UnicodeSet$GeneralCategoryMaskFilter.class
-SHA1-Digest: csLBiNOv8bCRCxNEY4c82QWb3Bs=
-
-Name: com/ibm/icu/impl/RelativeDateFormat$1.class
-SHA1-Digest: c6NqvKh9OBRUelKlq4M5mpxy/co=
-
-Name: com/ibm/icu/text/DateFormatSymbols.class
-SHA1-Digest: To1yZxWJc+Z4aax1Nj00KjMZUq0=
-
-Name: com/ibm/icu/impl/locale/InternalLocaleBuilder$FieldType.class
-SHA1-Digest: aefyDKK0a/KKJ+zqgrAGcH//F0E=
-
-Name: com/ibm/icu/text/NumberFormat$NumberFormatShim.class
-SHA1-Digest: k/tLYkRBt9Uh0ohxoe1VGXZR6XU=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/hu.res
-SHA1-Digest: o2xBye9kIqHcld2KlMZVqRy1Nko=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/as_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/Trie$DataManipulate.class
-SHA1-Digest: NjCImLHFdiP4sIuw4t+T3gauSsY=
-
-Name: com/ibm/icu/impl/ReplaceableUCharacterIterator.class
-SHA1-Digest: SCfl0/ZO54BfqdOBp++1QT4rfpI=
-
-Name: com/ibm/icu/util/CalendarServiceShim$CalFactory.class
-SHA1-Digest: BLNj+HZvoR2oJ1GngEFz2M+5/dc=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_MA.res
-SHA1-Digest: MFQlFcLk5eSGKWIWSDw3N8mg35Q=
-
-Name: com/ibm/icu/impl/UPropertyAliases$ValueMap.class
-SHA1-Digest: i9yakyznF+uxdpcjA324oR7y9tQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ps_AF.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/mk.res
-SHA1-Digest: FAjQiRZGQsGv60+ineKz2cfWHhA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de_CH.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/cnvalias.icu
-SHA1-Digest: MQcDdLr4J2MXhjRPlVmJxHtaqNg=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_TW_STROKE.res
-SHA1-Digest: nTng09tRvciGRT5csduFwNCuFMw=
-
-Name: com/ibm/icu/util/Calendar$CalendarShim.class
-SHA1-Digest: fnvc55VsYKwsxpqvv6JBeX6/cVo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/mt.res
-SHA1-Digest: FtyaJu5NPuKD6jpdEs08AbHnvgI=
-
-Name: com/ibm/icu/impl/duration/PeriodBuilderImpl.class
-SHA1-Digest: AqUSShdrzMMa6z7Un+uub3tI4R0=
-
-Name: com/ibm/icu/util/Currency$CurrencyStringInfo.class
-SHA1-Digest: g9WFvoeBrb7FGiGOdzUItwknUMU=
-
-Name: com/ibm/icu/text/RBBISetBuilder.class
-SHA1-Digest: hOwxqGfQ9WZ+C+1viKYFlquVJ6Y=
-
-Name: com/ibm/icu/impl/data/icudt42b/ar_EG.res
-SHA1-Digest: CGs2xVIS8J7/2gE7N9P/54X0p7A=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM420_ar.class
-SHA1-Digest: AOyK/U3m5/aFbRqi1LDp2saonus=
-
-Name: com/ibm/icu/impl/UCaseProps$ContextIterator.class
-SHA1-Digest: +nY8j0+ipna4v+xfK1dGRgOkPps=
-
-Name: com/ibm/icu/impl/URLHandler$URLVisitor.class
-SHA1-Digest: M6++xkYESTi5/TwYg71K8EXraas=
-
-Name: com/ibm/icu/util/EthiopicCalendar.class
-SHA1-Digest: cZlXcHpU7yDDQrivFoycnC++BFo=
-
-Name: com/ibm/icu/text/ReplaceableString.class
-SHA1-Digest: UxYu+CpdztHGbYqnZGrVLnZl12Y=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_IE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceBinary.class
-SHA1-Digest: f3nrmF+ItqGshFfYle9KMXxQVsU=
-
-Name: com/ibm/icu/util/LocaleData$PaperSize.class
-SHA1-Digest: EEQ1lZiV9UtR4+v4CHhD4oSr6uE=
-
-Name: com/ibm/icu/impl/UCharacterProperty$BinaryProperties.class
-SHA1-Digest: 88MTxoOMUU86d/+Rc+zp/hlpn90=
-
-Name: com/ibm/icu/impl/data/icudt42b/it_CH.res
-SHA1-Digest: VZ5J7mHHX7dBZ/OyTYm/qSJ4rfQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_ME.res
-SHA1-Digest: oXaqBhMExiV5rKnE2flXWVVHyzM=
-
-Name: com/ibm/icu/text/Normalizer$IsPrevNFDSafe.class
-SHA1-Digest: FEvTne7AOYLR7yBDdbToaG5OzNs=
-
-Name: com/ibm/icu/impl/duration/impl/PeriodFormatterDataService.class
-SHA1-Digest: NlLuVww7FdYnMgZsWlql28eWh+E=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceString.class
-SHA1-Digest: NyTmwv3AMT6t/Sdgv0HU1yhA47g=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/nl.res
-SHA1-Digest: kF6Z/y1F/oCaBRK2OFjLSCKoce0=
-
-Name: com/ibm/icu/impl/data/icudt42b/ii.res
-SHA1-Digest: UBcD2E0maByd3NeIqAsFZSv6EIY=
-
-Name: com/ibm/icu/text/ChineseDateFormat.class
-SHA1-Digest: yAfgPqcBendEMrN5CAkQhg+5Mbg=
-
-Name: com/ibm/icu/impl/data/icudt42b/az_Latn_AZ.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_RH.res
-SHA1-Digest: hX7gbcKf4kxMliOSk1FTXIZlq6o=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_Hans.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/fr.res
-SHA1-Digest: MGwC1Tjcpsv7MdNJwx1cF5yqU+g=
-
-Name: com/ibm/icu/text/NFRule.class
-SHA1-Digest: Rx9mug/qARQn0CQx6EgEv3p9sXY=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_de.class
-SHA1-Digest: ygZcTpEeS+fUbX2LmGkujQog71U=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: 6mDW8kS/T9pK7w1by/wcxy21Z20=
-
-Name: com/ibm/icu/impl/data/icudt42b/et.res
-SHA1-Digest: N67CbxU4QoG5hjGVdgzrhPwDM2U=
-
-Name: com/ibm/icu/text/StringMatcher.class
-SHA1-Digest: xITSJP51+Xr6DNo/i7rkfcjYb5M=
-
-Name: com/ibm/icu/impl/data/icudt42b/vi.res
-SHA1-Digest: IvGtt5n71/Q5+lcboUp9t20/jg4=
-
-Name: com/ibm/icu/text/CharsetRecog_Unicode.class
-SHA1-Digest: TEkDt3CyBmLK35HAONcI0Z4Oq0M=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$CoordFunc.class
-SHA1-Digest: sDrz6H27/DjBw7a5xhBZ5SnIung=
-
-Name: com/ibm/icu/impl/UCharacterIteratorWrapper.class
-SHA1-Digest: BHZVRNGt4elX2sQxXvP4T0j31Sk=
-
-Name: com/ibm/icu/impl/ICUData$1.class
-SHA1-Digest: PvBDMlt+QLDywoMQsAuPVV2o0OU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sk.res
-SHA1-Digest: kipbhMMMAsrPAg578s6fieZ/kT4=
-
-Name: com/ibm/icu/impl/data/icudt42b/pl_PL.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_RS.res
-SHA1-Digest: 2ii6FCYOQG4t2sunNcYMfTFp8rA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/haw.res
-SHA1-Digest: bzZfFLhZ0XFaoPpbkBhyr5xxIr8=
-
-Name: com/ibm/icu/text/UCharacterIterator.class
-SHA1-Digest: 7eshEISwTUGWA0M1JbdxsxvKOjg=
-
-Name: com/ibm/icu/impl/duration/impl/data/index.txt
-SHA1-Digest: MNpQEGeqnTio7sP8urAKSdbCCDA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hi_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/cs_CZ.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/sr.res
-SHA1-Digest: 5q4QgJkmNbD3r8nJxAw9e2fb5iY=
-
-Name: com/ibm/icu/impl/data/icudt42b/no.res
-SHA1-Digest: QKT2L/mn+LtpRofMA4whD6vFbe0=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/fa_AF.res
-SHA1-Digest: egzqOqtIj9Z4IANVn7nmOPmrOTA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/root.res
-SHA1-Digest: usraVU9nl82Tjj7gaVTZGlt2WiM=
-
-Name: com/ibm/icu/text/Bidi$InsertPoints.class
-SHA1-Digest: U4tvL3b5yD6lGG7VqbG9pdd4YlY=
-
-Name: com/ibm/icu/impl/SortedSetRelation.class
-SHA1-Digest: hJ7h15Rga71Xh6ytr9ebvNoujrc=
-
-Name: com/ibm/icu/text/MeasureFormat.class
-SHA1-Digest: G+oN8QPH7T64tfQ/PzVyNIkuMI0=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr_SN.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sq_AL.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/NormalizationTransliterator$2.class
-SHA1-Digest: QZdmY3bzdbLEBYzqdo7YflZk3D4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_GB.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceIntVector.class
-SHA1-Digest: 0rFrR7ZGQyhwiGAo8HUbmBl8sEg=
-
-Name: com/ibm/icu/impl/ICUCache.class
-SHA1-Digest: jro2JA35cDczsxETdBk2XDQbGs8=
-
-Name: com/ibm/icu/text/CollationKey.class
-SHA1-Digest: wkX8AB6BlSkkeVbdYd2rqCecDQw=
-
-Name: com/ibm/icu/impl/data/icudt42b/pnames.icu
-SHA1-Digest: gyIxR5pJTCsfhNix+jeZk17v24M=
-
-Name: com/ibm/icu/text/StringPrep$Values.class
-SHA1-Digest: VoXm2UjTrNPtQCTomlkmDgo4c/8=
-
-Name: plugin.properties
-SHA1-Digest: TOPBr3CgISdwU5nKSIJc674x0oY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_DO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/RBBIDataWrapper$RBBIDataHeader.class
-SHA1-Digest: s2SFgLptUnyHVB4j6qLUvpCVLHQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/mt_MT.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/ca.res
-SHA1-Digest: Y1b8+7d7xRxE0/4BvMsJ0ROnlVw=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Cyrl_CS.res
-SHA1-Digest: 2ii6FCYOQG4t2sunNcYMfTFp8rA=
-
-Name: com/ibm/icu/impl/data/icudt42b/kk.res
-SHA1-Digest: ZeMQZ0ZpJ9wpELJbCXgVCkxeKT4=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/word.brk
-SHA1-Digest: 4Qm9wAWKejtKem4xRAJwpzpim+o=
-
-Name: com/ibm/icu/text/SymbolTable.class
-SHA1-Digest: 0PXEovA8ijSuu464CTlOg2PiB9E=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hant.res
-SHA1-Digest: 4a6oYxgReRIfuwClplCK/M3LeY8=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$2.class
-SHA1-Digest: oEcFAH9NQgt9Z7aF8UWcLS4MS20=
-
-Name: com/ibm/icu/impl/data/icudt42b/iw_IL.res
-SHA1-Digest: Ndcrw5xpVXzCNkJpNiv+lI2hixc=
-
-Name: com/ibm/icu/impl/data/icudt42b/gv.res
-SHA1-Digest: 2rOn4o47ACz+j6XYLqt0C+MXTFM=
-
-Name: com/ibm/icu/impl/data/icudt42b/pa.res
-SHA1-Digest: x7pO0zURQuIhsuA/yVI4yuI3Q9A=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_HK.res
-SHA1-Digest: tmRVbpRLOdnIjYsMrH4S9Ez8IQI=
-
-Name: com/ibm/icu/lang/UCharacterTypeIterator.class
-SHA1-Digest: F3yCHVIRgN27D/vKNqVvRmrf+qY=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr_LU.res
-SHA1-Digest: 73jNcohlNN3z53Gm4lMn64LoR8k=
-
-Name: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_euc$CharsetRecog
- _euc_jp.class
-SHA1-Digest: nuKNP2brqweBc9DnIoDug0H4sYs=
-
-Name: com/ibm/icu/impl/CharTrie.class
-SHA1-Digest: o1fM6Qeko2xGz/44ni7MO/fjnsI=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_VE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/util/HebrewHoliday.class
-SHA1-Digest: 9plTcLM/MHJX1jTdVZ+N2JNniRs=
-
-Name: com/ibm/icu/text/UnicodeSet.class
-SHA1-Digest: /I6RzJ+st33nq/itiDGvBbi3QKc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/in.res
-SHA1-Digest: 4yHeO3OZURAGnQ+2Akh1AsFcJ6M=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ms.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc4518.spp
-SHA1-Digest: bqdXrbNNNrdbz/hbrFTh9vv0QmY=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_da_DK.class
-SHA1-Digest: Z8EQ9WVNleLLPUzQl8VVuq7qWZw=
-
-Name: com/ibm/icu/impl/ICURWLock$Stats.class
-SHA1-Digest: ex/PVbI1KYmkp/ut40s2yE7A/gI=
-
-Name: com/ibm/icu/util/VersionInfo.class
-SHA1-Digest: 1AZUnfjAsd39Pm7SfAkIh8nphUs=
-
-Name: com/ibm/icu/text/UnicodeSetIterator.class
-SHA1-Digest: 6Yk5bfw7+mwdkskhZOJpZ63pebo=
-
-Name: com/ibm/icu/impl/duration/BasicDurationFormatterFactory.class
-SHA1-Digest: D9izOXoz72xnd0nFgm6gR68YR5Y=
-
-Name: com/ibm/icu/impl/data/icudt42b/in_ID.res
-SHA1-Digest: 8zlBXCvSDwjZG5pjJeRB/oOjkYQ=
-
-Name: com/ibm/icu/lang/UCharacter$UnicodeBlock.class
-SHA1-Digest: PckbIWeAkjlzTlI1d7wfxFOrbpY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_US.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/BreakIterator$BreakIteratorServiceShim.class
-SHA1-Digest: 5eN/bw4J8zmQ8FofuCoTNWqhqwY=
-
-Name: com/ibm/icu/impl/CalendarAstronomer$AngleFunc.class
-SHA1-Digest: rVdjYM+4RcFjXlXZUO1mGuF27OQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/char_th.brk
-SHA1-Digest: F33yOBJlUAalrd9ZWRXhvmhdgsU=
-
-Name: com/ibm/icu/impl/data/icudt42b/sl_SI.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_ZA.res
-SHA1-Digest: layRKBnE4SCKRdgDL9oXO0wk8SQ=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EMilliSupport.class
-SHA1-Digest: tHYpjRBpYkW31F2S300nGvCtDPs=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ro_RO.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/fa.res
-SHA1-Digest: eaVRU4NKYc2t26hjrI20QFR+HCg=
-
-Name: com/ibm/icu/text/Normalizer$IsNextTrueStarter.class
-SHA1-Digest: JJyfbs5ohjCnNyKqCGbQmeau1ZI=
-
-Name: com/ibm/icu/text/Collator$CollatorFactory.class
-SHA1-Digest: rZ0lb5hRMGSFoEX1r4A+7i0xDrk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/be.res
-SHA1-Digest: NK/D6puvIc4L5KgtFCBg8xnqYgU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/kok.res
-SHA1-Digest: cxctNEMzXGKFExa+BKr81cP6bTk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/si_LK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hi__DIRECT.res
-SHA1-Digest: MSzM/HDeF/P11vq8UxQLYalDeoo=
-
-Name: com/ibm/icu/text/ThaiBreakIterator$PossibleWord.class
-SHA1-Digest: wRfuI08KGbivEoAkKDjOwaAyXsI=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_2.class
-SHA1-Digest: ewwtpG9RmVUT4ermxD6Lr54k/os=
-
-Name: com/ibm/icu/impl/ICULocaleService$LocaleKey.class
-SHA1-Digest: rtnL7+tkntl4p4b+lMDlqJ1bzL8=
-
-Name: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_32.class
-SHA1-Digest: ZDq8dtsVIcaonxiUBRmdxF4B7jc=
-
-Name: com/ibm/icu/text/UnicodeSet$NumericValueFilter.class
-SHA1-Digest: m+azrsC1VjWHpLoit1Rl0xcF7oE=
-
-Name: com/ibm/icu/util/STZInfo.class
-SHA1-Digest: XsJezh5Etql7hjL6GCfZwp0r1hc=
-
-Name: com/ibm/icu/impl/locale/LocaleObjectCache$WeakValueRef.class
-SHA1-Digest: LasoYp/1je+O3xMGvD9QiraiAJY=
-
-Name: com/ibm/icu/impl/data/icudt42b/sr_Cyrl_BA.res
-SHA1-Digest: gfZbK6gGbnv2WGwmT9G5nQ0kvR4=
-
-Name: com/ibm/icu/impl/data/icudt42b/es.res
-SHA1-Digest: hjABJWCM10eYZ22psOFsL0XZG0U=
-
-Name: com/ibm/icu/util/ULocale$1$ULocaleAcceptLanguageQ.class
-SHA1-Digest: 319gxxl65USHkgzy55fh+IyQNOc=
-
-Name: com/ibm/icu/text/Quantifier.class
-SHA1-Digest: AUgzA371mdcIosAD/wJDlI0QPmM=
-
-Name: com/ibm/icu/text/PluralRules$1.class
-SHA1-Digest: CZKMS2w946JZMZvLui0l7aHObIE=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hant_MO.res
-SHA1-Digest: Ad5HFg6bkw7I9xN38HtDOY3lZes=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_JM.res
-SHA1-Digest: KfuFrcCWLYbRLAnUqTrJRbq6tXM=
-
-Name: com/ibm/icu/util/UniversalTimeScale.class
-SHA1-Digest: MGfU9oOVqd37uvK6hN3Z+jIBLqM=
-
-Name: com/ibm/icu/text/UTF16$StringComparator.class
-SHA1-Digest: gJ11UGOVR5t9/WQJPS9XJei+NM4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/lt_LT.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/NormalizationTransliterator.class
-SHA1-Digest: ffPUES6DbpwiMALn5Cs1HUgIXQk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/en_NZ.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/root.res
-SHA1-Digest: paZntOH7lwqnm4ngkmma5eBXYqs=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/sq.res
-SHA1-Digest: 5rzM45UdCmsolf7m4jjmMZPruh8=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_PE.res
-SHA1-Digest: cWoAMJRdJUPrsVkh6oOUl2Vn4/w=
-
-Name: com/ibm/icu/impl/data/icudt42b/nn.res
-SHA1-Digest: J/5BC/ijGvdPFXzC02frRPSuFwc=
-
-Name: com/ibm/icu/impl/duration/impl/DataRecord$EZeroHandling.class
-SHA1-Digest: KA1jBtQJdKV5Lx+5fOCRDAjIVSg=
-
-Name: com/ibm/icu/text/RBBIRuleParseTable$RBBIRuleTableElement.class
-SHA1-Digest: uy3Kqj72GGl03zzgGLDnj4+75Nw=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/sr_Latn.res
-SHA1-Digest: Vpk/OA4qSNayFgrZpomjWEZymAg=
-
-Name: com/ibm/icu/impl/PluralRulesLoader.class
-SHA1-Digest: ceOZDqspRg5TuJ18WiU7VCsiRwc=
-
-Name: com/ibm/icu/util/EasterRule.class
-SHA1-Digest: ekwooe0stj5lYCyIKQSfFnDc9ms=
-
-Name: com/ibm/icu/impl/data/icudt42b/bo.res
-SHA1-Digest: hfuL5b5bB3UDf65XjgurbrhPWsE=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fr_CA.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de_AT.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/te_IN.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/Normalizer$Mode.class
-SHA1-Digest: dY9mIdzi0rOgMGZeH459HuJvVrQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc3491.spp
-SHA1-Digest: tqFgaA9mZKzEeyVBJHP3C3fLH5w=
-
-Name: com/ibm/icu/impl/UBiDiProps.class
-SHA1-Digest: /G+eUk2x84zjN580BezPQmrQWIA=
-
-Name: com/ibm/icu/text/EscapeTransliterator$3.class
-SHA1-Digest: jK9CaWfYl+SP8pxqsfoOhg4zVlc=
-
-Name: com/ibm/icu/impl/ICUService$Key.class
-SHA1-Digest: U0MKQCZGOZoIrEzDrP4hJ8+iNtk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/de_BE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/StringSearch$Pattern.class
-SHA1-Digest: HSW2Lzu4JdDg9c2c8JMprLBkFis=
-
-Name: com/ibm/icu/impl/CalendarAstronomer.class
-SHA1-Digest: FblwZDonS/4z+RAlvXI72Y7ppAM=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/tr.res
-SHA1-Digest: p0GdQBs8tCYpyEPEMfpEarAxfAg=
-
-Name: com/ibm/icu/text/CollatorServiceShim$CService.class
-SHA1-Digest: Ra7UApcf6HkIRW2eQjAkdvYL+kY=
-
-Name: com/ibm/icu/impl/locale/LocaleSyntaxException.class
-SHA1-Digest: ON+fieCZRXGgMeeQo+eaoS2hWzg=
-
-Name: com/ibm/icu/impl/NormalizerImpl$AuxTrieImpl.class
-SHA1-Digest: LBKL8Eh9I/jq5YmSou5JFNUu+PU=
-
-Name: com/ibm/icu/util/UResourceTypeMismatchException.class
-SHA1-Digest: xOMv05bQxowTViXu5xAHut1jm8Q=
-
-Name: com/ibm/icu/util/Calendar$WeekData.class
-SHA1-Digest: BQEs7Sf+cjEPvf/VnjyCHik1Kw8=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_he_IL.xml
-SHA1-Digest: zELCMUyNNl4RO9SlMdqwBaDlUZQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hans.res
-SHA1-Digest: R8wwL8X3XtJKhsKArcmfuZsjt4U=
-
-Name: com/ibm/icu/util/StringTokenizer.class
-SHA1-Digest: UPYT3yD30H3/E28l/qTiVVS06lg=
-
-Name: com/ibm/icu/lang/UCharacter$DecompositionType.class
-SHA1-Digest: euqzd0lb9CphqzkruwZwZuFLra8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_US.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_7.class
-SHA1-Digest: G/9IaxKk9myd90vftVBa6QfX12U=
-
-Name: com/ibm/icu/impl/data/icudt42b/gu.res
-SHA1-Digest: MidOcLpsKiTWmzxP0lyKQqZtqEk=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/be_BY.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/te.res
-SHA1-Digest: ul4UuJ0VZj6SHZeVet3JTN2pTJQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/km_KH.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/ur_PK.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/tr_TR.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/nl_NL.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/mk_MK.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/es_AR.res
-SHA1-Digest: rMqZU2Hdymr8o4Uys7XNvdwq0/8=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/id.res
-SHA1-Digest: c8WvrfkePrOoWwGwNSrTz97NqGU=
-
-Name: com/ibm/icu/impl/data/icudt42b/da.res
-SHA1-Digest: XjFoTQRV7RGgYA439j7U7tXbVlU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/nl_BE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/mr.res
-SHA1-Digest: m20WWXMhMf9Jguc91WRlhm7fov0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ms_MY.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_Latn.res
-SHA1-Digest: aQm/BzP4r1t4WUuWQd832zW1CAI=
-
-Name: com/ibm/icu/text/PluralRules$RuleList.class
-SHA1-Digest: macoH+mfZLvQ9L4VCb1xPOWT75c=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/sr_Latn_ME.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/brkitr/en.res
-SHA1-Digest: +/LVRKi4A8LFr24NwK7dKO0oWpw=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/eo.res
-SHA1-Digest: eo5kYmGw83lHMVAq9bnVf+k51C8=
-
-Name: com/ibm/icu/impl/data/icudt42b/so_ET.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/it.res
-SHA1-Digest: iTRdh/vkBMgOPp2DXDXSDZW9oRY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/as.res
-SHA1-Digest: 9NRwXg3YwS7RznQrHB4Ev20w3ZU=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$NGramParser.class
-SHA1-Digest: Jvlt1Yg4aigxvvrUN+VLovmImfY=
-
-Name: com/ibm/icu/impl/data/icudt42b/zh_Hant_TW.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/ResourceBundleWrapper$1.class
-SHA1-Digest: kCsDjJuZOKWBBdcjq1EL7cRJ6TQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh__PINYIN.res
-SHA1-Digest: UxTeb9sqoN5EU+1Sec5WMwnCfNA=
-
-Name: com/ibm/icu/impl/data/icudt42b/de_LI.res
-SHA1-Digest: f5YAC+BLQHRMdRQW9Z41LfU46nE=
-
-Name: com/ibm/icu/impl/data/icudt42b/uz_AF.res
-SHA1-Digest: 3kSYT3BSkfVCuxqLdPwlECtg5XA=
-
-Name: com/ibm/icu/impl/data/icudt42b/fo_FO.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/data/icudt42b/gsw_CH.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/RuleBasedCollator$AttributeValue.class
-SHA1-Digest: p/R33glIBQNiZM4jz/a2dwFPdxk=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/az.res
-SHA1-Digest: ZXg9H4iW+xC+iLzF4uLY7bNY/qM=
-
-Name: com/ibm/icu/lang/UCharacter$JoiningType.class
-SHA1-Digest: j4VycQg9ZS1LiXpE9k5QyO67S8s=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hi_.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/UPropertyAliases.class
-SHA1-Digest: Kar/z1VDskzA6mFIGaJLR3CPe3c=
-
-Name: com/ibm/icu/impl/data/icudt42b/or_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/text/UFormat.class
-SHA1-Digest: zBnM/5aT4hYiJW62XsmCv2f4f+U=
-
-Name: com/ibm/icu/text/RBBITableBuilder.class
-SHA1-Digest: JLRKP3X5o6AhLZ3hKTpisqonWTI=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ro.res
-SHA1-Digest: 3HwDNE8cqTvVBlwJk03kNJOZ/eg=
-
-Name: com/ibm/icu/impl/data/icudt42b/ml.res
-SHA1-Digest: OC5hDnqlCQJyZq9SkmhhfpJIbm0=
-
-Name: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1_nl.class
-SHA1-Digest: 784pJZ3/LPRarW7umQ2WmURh6+0=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fi.res
-SHA1-Digest: JjSueyJ2R6YL3OPfZ3gjbiCmsSQ=
-
-Name: com/ibm/icu/text/ThaiBreakIterator.class
-SHA1-Digest: 4uoicVPzfT9RZueI6JhB2wtnPX0=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_NA.res
-SHA1-Digest: GjW9A44EB13F1Q3P5nlS02U5AEY=
-
-Name: com/ibm/icu/util/ValueIterator.class
-SHA1-Digest: Szw1uZNxy/0e7SH/zkTJofhQrFo=
-
-Name: com/ibm/icu/text/RuleBasedNumberFormat.class
-SHA1-Digest: RPWy9pa6wgfdPiotqqYrCumgiYI=
-
-Name: com/ibm/icu/text/IDNA.class
-SHA1-Digest: p+yyMwf8VbEuiBTiIYmS2507xNI=
-
-Name: com/ibm/icu/impl/data/icudt42b/am.res
-SHA1-Digest: CsWaIrKfED9xWRbpmw3hksrKjoo=
-
-Name: com/ibm/icu/text/UnicodeSet$XSymbolTable.class
-SHA1-Digest: zADve81mpe9lI1D/iMHpggNB54k=
-
-Name: com/ibm/icu/impl/data/icudt42b/iw.res
-SHA1-Digest: WZP9bAErSkXNMGcS7Cigt2GwNKw=
-
-Name: com/ibm/icu/impl/data/icudt42b/ha_Latn.res
-SHA1-Digest: GuGMZSWyJJqxdmm9EzD7CnSl2IU=
-
-Name: com/ibm/icu/text/DateTimePatternGenerator$PatternInfo.class
-SHA1-Digest: nASsxWb5tR5jQDzIry/ep3HPvf0=
-
-Name: com/ibm/icu/math/MathContext.class
-SHA1-Digest: h8rJ4mm+Brut7OkxEQd1s364ks8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/az_Latn.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/si.res
-SHA1-Digest: mt7l6JWbY0adEfwsfBz1tGz/qB4=
-
-Name: com/ibm/icu/text/UnescapeTransliterator$5.class
-SHA1-Digest: 8623ohgLqGOBZAm9/nGxM2W4dWI=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_CL.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/sv_FI.res
-SHA1-Digest: EI2GVWEnzehzEvkpFlQJ+eJdN3w=
-
-Name: com/ibm/icu/impl/data/icudt42b/nn_NO.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ga.res
-SHA1-Digest: yxKFFNoEoM6o+wZMx7ZpFw8ERxU=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_it_IT.class
-SHA1-Digest: YEn8aLHR6KvomlHHNjAtWP3vtwA=
-
-Name: com/ibm/icu/impl/data/icudt42b/am_ET.res
-SHA1-Digest: vLe6xnVtFOY1XQsLbWAyg++v4R8=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/th_TH.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/TransliteratorRegistry$LocaleEntry.class
-SHA1-Digest: 3f73aUODZzYwa/TNAVoZMf5oQkg=
-
-Name: com/ibm/icu/util/RangeValueIterator$Element.class
-SHA1-Digest: 0mSf5xDlhcy2OMrOuhwQYFSuhMI=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ko.res
-SHA1-Digest: S8mHQ8DFrNEUyRtewLid8Yn89xQ=
-
-Name: com/ibm/icu/impl/data/icudt42b/hy_AM_REVISED.res
-SHA1-Digest: lm7DmdHMLEkr9zC2PWR1fkLDaJ4=
-
-Name: com/ibm/icu/impl/data/icudt42b/en_SG.res
-SHA1-Digest: ZAwUZU8vXFPu1hfLcvD7Y3YautA=
-
-Name: com/ibm/icu/impl/data/icudt42b/gv_GB.res
-SHA1-Digest: vqZaev/jL0MbnAu0zgdP7py0gng=
-
-Name: com/ibm/icu/text/RBNFChinesePostProcessor.class
-SHA1-Digest: WgnI0I67l+vetDYBGLSTp5umIBc=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/fa_IR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ca_ES.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/bn.res
-SHA1-Digest: sWgBOeggQMgNfyEhTT4wVx57d50=
-
-Name: com/ibm/icu/text/CollationKey$BoundMode.class
-SHA1-Digest: dHIdMHMrCLK+OKR3yTl5uq7EQYI=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/ta.res
-SHA1-Digest: Wu0FVc6oWUdNse9LmU5JYc6gHTQ=
-
-Name: com/ibm/icu/text/RBBISymbolTable.class
-SHA1-Digest: petb00eGDCm6DASsXqEnEwQdXeo=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/pa_IN.res
-SHA1-Digest: aABsNcBcPMaMcFhBGb0doQYhb68=
-
-Name: com/ibm/icu/impl/data/icudt42b/ta_IN.res
-SHA1-Digest: CrX+t/3l7qQ+Iu1abDKV2D7/ZDk=
-
-Name: com/ibm/icu/impl/data/icudt42b/fr_CH.res
-SHA1-Digest: IldwcfKtl7UR9+npadXkIc9MS/c=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_it.class
-SHA1-Digest: qg5xRQpUKRpo+/D+hBCn72ZllJ4=
-
-Name: com/ibm/icu/impl/duration/impl/data/pfd_ja.xml
-SHA1-Digest: qh+Yqa1vTI+OXIkNGUpSsPd0gPI=
-
-Name: com/ibm/icu/impl/Trie$DefaultGetFoldingOffset.class
-SHA1-Digest: Vsf8DJGMroq9xMLyeGulHzkntoU=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/res_index.txt
-SHA1-Digest: 0TAI7vdTd1uyMm6olP7g9gLNlsg=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/pl.res
-SHA1-Digest: Ad/7wwraaDLUa78yiU1lUPzLkkc=
-
-Name: com/ibm/icu/text/Normalizer$IsPrevTrueStarter.class
-SHA1-Digest: DTUl+dkJai1Yq1ApIspI756Oaz0=
-
-Name: com/ibm/icu/util/CalendarServiceShim$CalService.class
-SHA1-Digest: 6oWTNuffqEEvVsd3WO+sreuPZQs=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/res_index.txt
-SHA1-Digest: wkQnar8Thb5Bt07mzBSVvEE2OqY=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/zh_Hans_SG.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/text/ArabicShaping.class
-SHA1-Digest: XZ637UBwbDJxDqnmrFiEZWHzXXM=
-
-Name: com/ibm/icu/impl/data/icudt42b/rfc4505.spp
-SHA1-Digest: lced9aQC6CKcBNAOUdswjJV5a3o=
-
-Name: com/ibm/icu/util/ByteArrayWrapper.class
-SHA1-Digest: ZVPa0b5L3JXdi2ciMfStGq8GxCE=
-
-Name: com/ibm/icu/impl/duration/BasicPeriodBuilderFactory$Settings.cla
- ss
-SHA1-Digest: wFb1STxQpexvv9kY98DOJ6pLcas=
-
-Name: com/ibm/icu/text/Bidi$ImpTabPair.class
-SHA1-Digest: JtJVWt+BIGkanGetL2Gy3tBYpIc=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/hr.res
-SHA1-Digest: zqFkwdSPOIWYVmNwaGrje8EPrEw=
-
-Name: com/ibm/icu/text/NumberFormatServiceShim$NFFactory.class
-SHA1-Digest: 5AuziSUiCTjGZgz2iYJ2kxS67RE=
-
-Name: com/ibm/icu/impl/ZoneMeta$MetaToOlsonMappingEntry.class
-SHA1-Digest: uuyCy9JX3+tbs+0dxZoqB9LlyRM=
-
-Name: com/ibm/icu/impl/Utility.class
-SHA1-Digest: lIuCLUW7/AO3EOWjrcN/5/jsoA8=
-
-Name: com/ibm/icu/impl/USerializedSet.class
-SHA1-Digest: YVXfT+4kECAxhhBblpeLPbs7r/E=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/uk.res
-SHA1-Digest: 4bMeR4aqC2oC52qXHLjKto3XRcU=
-
-Name: com/ibm/icu/util/ULocale$IDParser.class
-SHA1-Digest: mHlXMwt76mZ0TRLLKNgk8DhPzdc=
-
-Name: com/ibm/icu/text/StringCharacterIterator.class
-SHA1-Digest: FX1SK52aDgBrcnluC7wnMDSpmPo=
-
-Name: com/ibm/icu/text/Normalizer$IsPrevBoundary.class
-SHA1-Digest: sNtIavcqXEl7v91qG5y1zkLKI2s=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/ar_YE.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_MX.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/is_IS.res
-SHA1-Digest: WJudThz/FQIC6MeClH53YjyURrM=
-
-Name: com/ibm/icu/impl/ICUResourceBundle$1.class
-SHA1-Digest: u9NgLyd+lX4ZbAXONIfOE+S34/U=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/hr_HR.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/HolidayBundle_de_DE.class
-SHA1-Digest: VWQHfSEyMLKcSvN5ziecgQLn7U4=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/lv_LV.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/he.res
-SHA1-Digest: aaZFRs5PYKUa91qL/ii/KXbrSYY=
-
-Name: com/ibm/icu/text/DateFormat.class
-SHA1-Digest: xbpnpqFm/gb1+B3C+NVJc6sHjVo=
-
-Name: com/ibm/icu/impl/ICUService$ServiceListener.class
-SHA1-Digest: 4WpmZStQ2bjgfg3tSpEaxW2muNU=
-
-Name: com/ibm/icu/impl/data/icudt42b/coll/es_NI.res
-SHA1-Digest: sToAZL21NCHxRINlvBFxo19BefA=
-
-Name: com/ibm/icu/impl/data/icudt42b/rbnf/en.res
-SHA1-Digest: Qnn0ucolCR9FEek9/220U2OiUHg=
-
diff --git a/dependencyManifests/com.ibm.icu_4.4.2.v20110208.jar/META-INF/MANIFEST.MF b/dependencyManifests/com.ibm.icu_4.4.2.v20110208.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..75a21b8
--- /dev/null
+++ b/dependencyManifests/com.ibm.icu_4.4.2.v20110208.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Export-Package: com.ibm.icu.lang;base=true;full=true;version="4.4.2.1"
+ ,com.ibm.icu.math;base=true;full=true;version="4.4.2.1",com.ibm.icu.t
+ ext;base=true;full=true;version="4.4.2.1",com.ibm.icu.util;base=true;
+ full=true;version="4.4.2.1",com.ibm.icu.impl;x-internal:=true,com.ibm
+ .icu.impl.data;x-internal:=true,com.ibm.icu.impl.data.icudt44b;x-inte
+ rnal:=true,com.ibm.icu.impl.data.icudt44b.brkitr;x-internal:=true,com
+ .ibm.icu.impl.data.icudt44b.coll;x-internal:=true,com.ibm.icu.impl.da
+ ta.icudt44b.curr;x-internal:=true,com.ibm.icu.impl.data.icudt44b.lang
+ ;x-internal:=true,com.ibm.icu.impl.data.icudt44b.rbnf;x-internal:=tru
+ e,com.ibm.icu.impl.data.icudt44b.region;x-internal:=true,com.ibm.icu.
+ impl.data.icudt44b.translit;x-internal:=true,com.ibm.icu.impl.data.ic
+ udt44b.zone;x-internal:=true,com.ibm.icu.impl.duration;x-internal:=tr
+ ue,com.ibm.icu.impl.locale;x-internal:=true
+Bundle-ClassPath: icu-data.jar,.
+Bundle-Name: %pluginName
+Bundle-Localization: plugin
+Bundle-Copyright: Licensed Materials - Property of IBM (C) Copyright I
+ BM Corp. 2000, 2011. All Rights Reserved. IBM is a registered tradema
+ rk of IBM Corp.
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: %providerName
+Eclipse-LazyStart: true
+Bundle-Version: 4.4.2.v20110208
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: com.ibm.icu; singleton:=true
+Eclipse-ExtensibleAPI: true
+
diff --git a/dependencyManifests/com.jcraft.jsch_0.1.41.v200903070017.jar/META-INF/MANIFEST.MF b/dependencyManifests/com.jcraft.jsch_0.1.41.v200903070017.jar/META-INF/MANIFEST.MF
index 246591c..77d7be5 100644
--- a/dependencyManifests/com.jcraft.jsch_0.1.41.v200903070017.jar/META-INF/MANIFEST.MF
+++ b/dependencyManifests/com.jcraft.jsch_0.1.41.v200903070017.jar/META-INF/MANIFEST.MF
@@ -13,363 +13,3 @@ Export-Package: com.jcraft.jsch;version="0.1.41",com.jcraft.jsch.jce;v
 Bundle-Version: 0.1.41.v200903070017
 Bundle-ManifestVersion: 2
 
-Name: com/jcraft/jsch/jce/ARCFOUR128.class
-SHA1-Digest: 7QDIqzgSoTLENRdhCIgMovwM5Uk=
-
-Name: com/jcraft/jsch/Request.class
-SHA1-Digest: dsey0oAyJGStClcHM98rcleu8Po=
-
-Name: com/jcraft/jsch/Channel$1.class
-SHA1-Digest: 7GRGfX0nS59j5XHL5VqPoWfkqro=
-
-Name: com/jcraft/jsch/SignatureRSA.class
-SHA1-Digest: jzulmFABJqCW6NuSBHyHOKVslFE=
-
-Name: com/jcraft/jsch/DHGEX.class
-SHA1-Digest: 4JBGUS5bYrf8PAQY5GyOwab3AKo=
-
-Name: com/jcraft/jsch/HostKey.class
-SHA1-Digest: 4nxVUli7ioyVcgkb+mvIIx1Fgh8=
-
-Name: com/jcraft/jsch/RequestSignal.class
-SHA1-Digest: 2IXgG0/Fd9iQzjUF3rVRcEWECIo=
-
-Name: com/jcraft/jsch/SocketFactory.class
-SHA1-Digest: +z3wkl/BLCfqXZDXHi5XYcSzBCw=
-
-Name: com/jcraft/jsch/RequestPtyReq.class
-SHA1-Digest: as3YclrKYiVS3r5vz1acvs+gJI4=
-
-Name: com/jcraft/jsch/ChannelSftp$LsEntry.class
-SHA1-Digest: 1DEldnXw3zPmQ6qJqiqjMDHFpIQ=
-
-Name: com/jcraft/jsch/HASH.class
-SHA1-Digest: i61Ai7qZVztXBZg2MLYT25u7yXc=
-
-Name: com/jcraft/jsch/jce/AES256CTR.class
-SHA1-Digest: DvxpZ2u7w3pLluGHjtVe8GXcTV0=
-
-Name: com/jcraft/jsch/JSchException.class
-SHA1-Digest: wxSNQgjaHdWr0+Ba5CfFpU/bCPs=
-
-Name: com/jcraft/jsch/UserAuthKeyboardInteractive.class
-SHA1-Digest: HO6CWlZNNNuBYgrHPM0jkvVfAzw=
-
-Name: com/jcraft/jsch/jce/ARCFOUR256.class
-SHA1-Digest: 0KzxcxWdMglU7SIn9RNsDW0xsi8=
-
-Name: com/jcraft/jsch/Channel$MyPipedInputStream.class
-SHA1-Digest: fwndgndebZATg5glTRp1JHxaHUA=
-
-Name: com/jcraft/jsch/Proxy.class
-SHA1-Digest: 5zZjb/Vj3uhhI1Mg1fvmoYAdtpU=
-
-Name: com/jcraft/jsch/Util.class
-SHA1-Digest: Gb0ar38XuwpeQdUtk7z6HlMfGlQ=
-
-Name: com/jcraft/jsch/jce/HMACMD596.class
-SHA1-Digest: 817MeHbki4pxUrVY4bAYGzDPX3o=
-
-Name: com/jcraft/jsch/jce/KeyPairGenDSA.class
-SHA1-Digest: OOPlQecN4IEpvNCllU6kTRGZCtg=
-
-Name: com/jcraft/jsch/jce/AES128CBC.class
-SHA1-Digest: NUEs091bkLCjtAOEE9GZAToDGNc=
-
-Name: com/jcraft/jsch/jce/HMACSHA1.class
-SHA1-Digest: d+gj7YXiXf62Ur/PhDeiT9Yix7I=
-
-Name: com/jcraft/jsch/UserAuthGSSAPIWithMIC.class
-SHA1-Digest: aGEyIxgeSOXGOb3IZmi1+YZhH9s=
-
-Name: com/jcraft/jsch/jce/TripleDESCTR.class
-SHA1-Digest: pKRuDrxlKhJVfBZzpdn4XtKUM5w=
-
-Name: com/jcraft/jsch/RequestAgentForwarding.class
-SHA1-Digest: 0b/7WOMiIhCnunqKpJ9xBAm7FC8=
-
-Name: com/jcraft/jsch/jcraft/HMAC.class
-SHA1-Digest: ohhf0p2s2knWmi58jiSwKIE4BOg=
-
-Name: com/jcraft/jsch/SftpException.class
-SHA1-Digest: ijrr386qYQPamYMobTl+xtOdeQQ=
-
-Name: com/jcraft/jsch/jcraft/HMACSHA196.class
-SHA1-Digest: 69tgvy3stTxzld9HxUw8H2paR94=
-
-Name: com/jcraft/jsch/jce/AES192CTR.class
-SHA1-Digest: 1tjAFhrE3M5Ezfb3/6hGzt5yCpE=
-
-Name: com/jcraft/jsch/jce/KeyPairGenRSA.class
-SHA1-Digest: QGGx3Ekb2rGgMNRGujeg8hhvfs0=
-
-Name: com/jcraft/jsch/JSch$1.class
-SHA1-Digest: i+dHlov1IBMbZ60GVIofyt4Hsbg=
-
-Name: com/jcraft/jsch/ChannelAgentForwarding.class
-SHA1-Digest: hkOxvzXM8idMJ+7zbTc5xXgkht4=
-
-Name: com/jcraft/jsch/RequestSubsystem.class
-SHA1-Digest: 5yVL86Q0JcV4WCwCoSPXtz5eMGA=
-
-Name: com/jcraft/jsch/jce/HMACMD5.class
-SHA1-Digest: C6YAyxg7TYLabiGIiqRRiTNCeNI=
-
-Name: com/jcraft/jsch/ForwardedTCPIPDaemon.class
-SHA1-Digest: CpRSIKlX7hhyt6HFZhWUdhgdWKY=
-
-Name: com/jcraft/jsch/ServerSocketFactory.class
-SHA1-Digest: PuY/1pkahCL2E+jMBKGgz0ggh+I=
-
-Name: com/jcraft/jsch/UserAuthNone.class
-SHA1-Digest: H5hKs2T7jG8/vbBG2/TEL8a2WnA=
-
-Name: com/jcraft/jsch/jce/HMACSHA196.class
-SHA1-Digest: LshAuQFNb7KYwnFPjOqQOMzUNrU=
-
-Name: com/jcraft/jsch/ChannelSubsystem.class
-SHA1-Digest: QMGf7zaaEjMn96JDKCwzLGPJ2MM=
-
-Name: com/jcraft/jsch/KnownHosts$HashedHostKey.class
-SHA1-Digest: WU+oH+xQb/ryvvkaLlvjKQFYiKE=
-
-Name: com/jcraft/jsch/DHG1.class
-SHA1-Digest: QnxLk7cfSdVLHDbVetfuXjIcVoA=
-
-Name: com/jcraft/jsch/UserAuthPublicKey.class
-SHA1-Digest: HGO/EfMu1eK5KosBpgNTvg9pPkU=
-
-Name: com/jcraft/jsch/UIKeyboardInteractive.class
-SHA1-Digest: +1tYanrpdqGs0Ra6y43Wlr3K+qE=
-
-Name: com/jcraft/jsch/Buffer.class
-SHA1-Digest: TWCnm5ry0Ox4YyqNCkEtvlAKNfo=
-
-Name: com/jcraft/jsch/RequestWindowChange.class
-SHA1-Digest: /W3B/ImikQdWKYdqw9WxFVUEp+E=
-
-Name: com/jcraft/jsch/ProxySOCKS4.class
-SHA1-Digest: 9XQ3e3yAmzUu/1xMMab4sLBSbjQ=
-
-Name: com/jcraft/jsch/jgss/GSSContextKrb5.class
-SHA1-Digest: tB7kq1Z5RE7s2jDWniR49A04kE4=
-
-Name: com/jcraft/jsch/KnownHosts.class
-SHA1-Digest: 9oZo76NlGar0O7yC8/WrQM3B0q4=
-
-Name: about.html
-SHA1-Digest: N87hfpEXgq5TZuvNcFpP7GhEJr8=
-
-Name: com/jcraft/jsch/JSch.class
-SHA1-Digest: c0g4EvvwHdAEY0KT6oeMWK05pvQ=
-
-Name: com/jcraft/jsch/KeyPairGenDSA.class
-SHA1-Digest: O1lE5dThmh443TE83guKL+JmU4Q=
-
-Name: com/jcraft/jsch/PortWatcher.class
-SHA1-Digest: VjxtxVYDUN/exU9dotQnzFU2Zv8=
-
-Name: com/jcraft/jsch/RequestSftp.class
-SHA1-Digest: oTyAjtlVMMH+5GNGK8+U2L2S7/A=
-
-Name: com/jcraft/jsch/JSchAuthCancelException.class
-SHA1-Digest: jXId8e203lTBX/GhY7sLta0jGHU=
-
-Name: com/jcraft/jsch/UserAuth.class
-SHA1-Digest: oSasKRbMm6tK2rA0MJfHC6R8gxo=
-
-Name: com/jcraft/jsch/RequestExec.class
-SHA1-Digest: 6uk5Kno7PEZEvb8cfWbESb5jRto=
-
-Name: com/jcraft/jsch/Channel.class
-SHA1-Digest: qejgVhGhaeao4iIGapa9H/2vt7A=
-
-Name: com/jcraft/jsch/KeyPairDSA.class
-SHA1-Digest: v8EIhwQAKCthbVVR9cu0fkOJCiA=
-
-Name: com/jcraft/jsch/IdentityFile.class
-SHA1-Digest: l9Z1QdEnsYhrutQFzvNzcFa5ta4=
-
-Name: com/jcraft/jsch/ChannelDirectTCPIP.class
-SHA1-Digest: fSIU5oRHLbZL0WmnKzPOkmL0W8c=
-
-Name: com/jcraft/jsch/KeyPairGenRSA.class
-SHA1-Digest: wXEOurCPw9RRxZnp20GRRCCQNwE=
-
-Name: com/jcraft/jsch/RequestEnv.class
-SHA1-Digest: Wo39kFyPc4l8/JsRu20Yt3JC5Hg=
-
-Name: com/jcraft/jsch/DH.class
-SHA1-Digest: l2Jc5QHNzyBQeGJ4BUFCYey0RJg=
-
-Name: com/jcraft/jsch/jce/Random.class
-SHA1-Digest: iYm+frfAfcP7yePHEgQvfT5k2yo=
-
-Name: com/jcraft/jsch/KeyPairRSA.class
-SHA1-Digest: brWaCOzlj27mCk+w910wOngyFME=
-
-Name: com/jcraft/jsch/jce/SHA1.class
-SHA1-Digest: 2cygYVVn0r2gC34Nrkvs2KxXlNA=
-
-Name: com/jcraft/jsch/jce/AES256CBC.class
-SHA1-Digest: EVC1/HasmKohoXgiLVXWv8+CsEY=
-
-Name: com/jcraft/jsch/SftpProgressMonitor.class
-SHA1-Digest: XFAjku26gqI2GHC7qSMZL+jqCIQ=
-
-Name: com/jcraft/jsch/JSchPartialAuthException.class
-SHA1-Digest: 5bvwzz1hRFD7IN708Ngd1lg1f8M=
-
-Name: com/jcraft/jsch/Session$1.class
-SHA1-Digest: g1edNkFyanvFykmZ1hYx8uL/law=
-
-Name: com/jcraft/jsch/jcraft/HMACSHA1.class
-SHA1-Digest: rvIKrl6Izjr8LrmwhD0zpLqSMYU=
-
-Name: com/jcraft/jsch/Compression.class
-SHA1-Digest: 4zZ9LYvlnSU0/vemnL8Zt8r48Dw=
-
-Name: com/jcraft/jsch/jce/SignatureDSA.class
-SHA1-Digest: UX89S4bsSjsaQ+/2IroesigKptI=
-
-Name: com/jcraft/jsch/jcraft/HMACMD5.class
-SHA1-Digest: XK0DD0fPrt62xBCJNfVbuWKAn+E=
-
-Name: com/jcraft/jsch/Random.class
-SHA1-Digest: c57POxL1e9hQnXqzKqFpOzmAeqg=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: com/jcraft/jsch/IO.class
-SHA1-Digest: 6vfKQ8gdz/xQrxSJh7MHF6qajMs=
-
-Name: com/jcraft/jsch/Packet.class
-SHA1-Digest: aXPfOTpybgkcRd85Ag5ELo/EAaU=
-
-Name: com/jcraft/jsch/ProxySOCKS5.class
-SHA1-Digest: LaottFiSRfcLlmdBeBW2/6YzKmQ=
-
-Name: com/jcraft/jsch/jce/ARCFOUR.class
-SHA1-Digest: XmWkgmd7edUhI0xJJo3DeW0X1jg=
-
-Name: com/jcraft/jsch/ProxyHTTP.class
-SHA1-Digest: kV3NyT9sh5oXN08R6123lsWmHYI=
-
-Name: com/jcraft/jsch/jce/AES128CTR.class
-SHA1-Digest: 1A57gyL5rWyryLhNuai52AeAKXA=
-
-Name: com/jcraft/jsch/jce/SignatureRSA.class
-SHA1-Digest: Xe6OAPt33IY3u941TyJ8sNid8eI=
-
-Name: com/jcraft/jsch/jce/BlowfishCBC.class
-SHA1-Digest: 9h8fbPDaEg1KNqGLJypyGe+yGfk=
-
-Name: com/jcraft/jsch/Logger.class
-SHA1-Digest: gZVksblwQezTfyTV1HXlFdd5tRM=
-
-Name: com/jcraft/jsch/jce/TripleDESCBC.class
-SHA1-Digest: zApPhxtBaUntV9s77LrH2uwlT2s=
-
-Name: com/jcraft/jsch/ChannelSftp$1.class
-SHA1-Digest: VsOa+YEtZY9Q7V0J1kzwTcwj34w=
-
-Name: com/jcraft/jsch/HostKeyRepository.class
-SHA1-Digest: W9fhHievhKPIBCtEehgYFpNI+jM=
-
-Name: com/jcraft/jsch/jce/AES192CBC.class
-SHA1-Digest: 9DGFK+dWsvlg+FbrTY2Zz3GJhVI=
-
-Name: com/jcraft/jsch/ChannelSftp$Header.class
-SHA1-Digest: gmNq5wWrasX0kB4m49htRLczB8U=
-
-Name: com/jcraft/jsch/RequestShell.class
-SHA1-Digest: EZ+wo7IUKLx+qJQGMqN3FiCXwJU=
-
-Name: com/jcraft/jsch/CipherNone.class
-SHA1-Digest: wSopA/3woBNifNGoDsTVBl+pDOw=
-
-Name: com/jcraft/jsch/MAC.class
-SHA1-Digest: wprEI0Ov+Pjt7f/OMRwUxcau68o=
-
-Name: com/jcraft/jsch/Channel$PassiveInputStream.class
-SHA1-Digest: 2VU5L64rpIEH73bdlDUdrTESuo0=
-
-Name: com/jcraft/jsch/SftpATTRS.class
-SHA1-Digest: MzX0kMcwvhydhXV1LQtlbGIJwh8=
-
-Name: com/jcraft/jsch/GSSContext.class
-SHA1-Digest: WAZpgz4zrxXyS8UG/pNP+Wwy8Oo=
-
-Name: com/jcraft/jsch/Session.class
-SHA1-Digest: 4R56ThRguuRVnikCTsO8MNjkHiE=
-
-Name: com/jcraft/jsch/KeyPair.class
-SHA1-Digest: MF/UhYtDvwP1z15OIbJ4p2dcTiM=
-
-Name: com/jcraft/jsch/ChannelShell.class
-SHA1-Digest: sQk1yVlZESgJfCRadDnVUD9Ldf0=
-
-Name: plugin.properties
-SHA1-Digest: lQpUwKiiN/9XBoeo1tfG5Qy4ijM=
-
-Name: com/jcraft/jsch/jce/MD5.class
-SHA1-Digest: iegJNROBI8bUcxzjL67Bz5THeHM=
-
-Name: com/jcraft/jsch/KeyExchange.class
-SHA1-Digest: wCyVABtSMzFogOFNsXIdG/Tz4XA=
-
-Name: com/jcraft/jsch/ChannelForwardedTCPIP.class
-SHA1-Digest: c2GiL5URd23FAR1cd8iaZWKwV/M=
-
-Name: com/jcraft/jsch/Channel$PassiveOutputStream.class
-SHA1-Digest: /XGaINStNZ9n6ilhJdELI/ecVxU=
-
-Name: com/jcraft/jsch/Identity.class
-SHA1-Digest: Rjux+JV7g7FB5Y/usX1EmkLRKcU=
-
-Name: com/jcraft/jsch/ChannelSftp.class
-SHA1-Digest: 5plUhN+ZMSgzzu4dW0XCMd0Xagk=
-
-Name: com/jcraft/jsch/jce/DH.class
-SHA1-Digest: N6KI/KxRYKS2/6lFox3taXMWJQY=
-
-Name: com/jcraft/jsch/ChannelExec.class
-SHA1-Digest: ylRj62Ir4J6qWPI6qK2VXs91oiY=
-
-Name: com/jcraft/jsch/RequestX11.class
-SHA1-Digest: NUwJOAuP0h4B6SUSwk7ZKp06ZEc=
-
-Name: com/jcraft/jsch/Cipher.class
-SHA1-Digest: 48peEfWeG3i/Y7cSsRt0atkr6y4=
-
-Name: com/jcraft/jsch/Session$GlobalRequestReply.class
-SHA1-Digest: bLcqszVP5pcbjalpgf15xlDoXz4=
-
-Name: com/jcraft/jsch/jcraft/Compression.class
-SHA1-Digest: pea8wIclLfcRgIdp7CsRFN1DT/c=
-
-Name: com/jcraft/jsch/UserAuthPassword.class
-SHA1-Digest: 3rn3oMhCjrds4FOOQGO4TCtgCUs=
-
-Name: com/jcraft/jsch/Util$1.class
-SHA1-Digest: uCDlLQFurjRo7O9DEuZ5+0Wq9Vw=
-
-Name: com/jcraft/jsch/ChannelSession.class
-SHA1-Digest: 1likx84O0wggJdJCLnsstfxQFfI=
-
-Name: com/jcraft/jsch/ChannelSftp$2.class
-SHA1-Digest: XvR883TJnVChKejEede8zEesOLk=
-
-Name: com/jcraft/jsch/ChannelX11.class
-SHA1-Digest: FpswTJpqUjqPmg5kl+ChL2+B78o=
-
-Name: com/jcraft/jsch/UserInfo.class
-SHA1-Digest: P23BxkmU7R6rKju+g2EaKJufdTc=
-
-Name: com/jcraft/jsch/SignatureDSA.class
-SHA1-Digest: pQ4p8Ylw9vurPgvxRzTlrPRIIdU=
-
-Name: com/jcraft/jsch/jcraft/HMACMD596.class
-SHA1-Digest: Ts6zdQ7O2YB2RgvQYZECQxmIOC0=
-
diff --git a/dependencyManifests/javax.servlet.jsp_2.0.0.v200806031607.jar/META-INF/MANIFEST.MF b/dependencyManifests/javax.servlet.jsp_2.0.0.v200806031607.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 796cd50..0000000
--- a/dependencyManifests/javax.servlet.jsp_2.0.0.v200806031607.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,173 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Vendor: %bundleProvider
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
-Bundle-Name: %bundleName
-Bundle-SymbolicName: javax.servlet.jsp
-Export-Package: javax.servlet.jsp; version=2.0,javax.servlet.jsp.el; v
- ersion=2.0,javax.servlet.jsp.resources; version=2.0,javax.servlet.jsp
- .tagext; version=2.0
-Bundle-Version: 2.0.0.v200806031607
-Bundle-ManifestVersion: 2
-Import-Package: javax.servlet; version=2.4,javax.servlet.http; version
- =2.4,javax.servlet.resources; version=2.4
-
-Name: javax/servlet/jsp/el/FunctionMapper.class
-SHA1-Digest: tHKaOXUSuKM255d1Jq7afeOP7zU=
-
-Name: javax/servlet/jsp/tagext/DynamicAttributes.class
-SHA1-Digest: rN33r15KA1rLSORnBU0p2xo9uPk=
-
-Name: javax/servlet/jsp/resources/web-jsptaglibrary_1_1.dtd
-SHA1-Digest: RiEZu4pl582v/Eb6heYlqooyznw=
-
-Name: javax/servlet/jsp/tagext/BodyContent.class
-SHA1-Digest: MS38esQNJC87evOaSuxIq8eEiwM=
-
-Name: javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd
-SHA1-Digest: BbqrVlnQuegg+9J2y+mTUTEyUWs=
-
-Name: javax/servlet/jsp/tagext/TagExtraInfo.class
-SHA1-Digest: WKSJl906ZUldWekhtuk+jGc+vxs=
-
-Name: META-INF/LICENSE.txt
-SHA1-Digest: BL3F38sZ375Y3kbjIoGPp//9FWI=
-
-Name: javax/servlet/jsp/tagext/SimpleTagSupport.class
-SHA1-Digest: 9uCHzpC1h2TIbmHoOwc1LXbxVUU=
-
-Name: javax/servlet/jsp/resources/jsp_2_0.xsd
-SHA1-Digest: gjhhIJg1PHUuQyGIZ6LYu35sKJw=
-
-Name: javax/servlet/jsp/JspPage.class
-SHA1-Digest: rzYtnFXHBqN/eoGudWIkOcVMODk=
-
-Name: javax/servlet/jsp/tagext/SimpleTag.class
-SHA1-Digest: KhrP+sS4xnkR7cm+bwkj0UsRYcg=
-
-Name: javax/servlet/jsp/tagext/TagAttributeInfo.class
-SHA1-Digest: 2/t1e1opXFrAbYrfKxMGIlG21r4=
-
-Name: javax/servlet/jsp/tagext/TagLibraryValidator.class
-SHA1-Digest: KH3C/dDlMY4hDAM7eDiIuT9qIgs=
-
-Name: javax/servlet/jsp/el/Expression.class
-SHA1-Digest: vDEu/T7gI/P6fMH7t+YilsNC/XM=
-
-Name: javax/servlet/jsp/resources/jspxml.xsd
-SHA1-Digest: 3QpNYRv/y1YSk4Nw6mSWIUQIOwY=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: javax/servlet/jsp/resources/jspxml.dtd
-SHA1-Digest: OPBfViTXEtifFsvEavfHNBzYOig=
-
-Name: javax/servlet/jsp/tagext/TryCatchFinally.class
-SHA1-Digest: UXWUVgv3t2LsMNoA9M7lN+QX8yk=
-
-Name: javax/servlet/jsp/ErrorData.class
-SHA1-Digest: n9tlN5/1mMcw+e3A+CFJrEwTASc=
-
-Name: javax/servlet/jsp/tagext/TagData.class
-SHA1-Digest: tA9rT9usGJMLFms/W/GtX2ot6dU=
-
-Name: javax/servlet/jsp/el/ELException.class
-SHA1-Digest: htEW4LIzF9N6IE3Nx6EScde5dvk=
-
-Name: javax/servlet/jsp/tagext/TagInfo.class
-SHA1-Digest: WrO8SquYx4FaOB0WaW8sVKae2gU=
-
-Name: javax/servlet/jsp/tagext/TagLibraryInfo.class
-SHA1-Digest: Tt6a5S3kqgazw1gcvtyCZBlBe5Y=
-
-Name: javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd
-SHA1-Digest: vVLZQqoqY/QBxg9m/mJLSFO2Nn4=
-
-Name: javax/servlet/jsp/JspContext.class
-SHA1-Digest: UOzuth+AROsExCfyQUn7iYaO7Os=
-
-Name: javax/servlet/jsp/tagext/BodyTagSupport.class
-SHA1-Digest: mHHJ4WxpuF9SsHPrI+kaOOUlppA=
-
-Name: javax/servlet/jsp/PageContext.class
-SHA1-Digest: cqJW8sUfYL8MjEx3idc/P2Hnn2o=
-
-Name: javax/servlet/jsp/tagext/PageData.class
-SHA1-Digest: /JhtW3HLJdtFI4UrZ0GXVUWcJV0=
-
-Name: javax/servlet/jsp/tagext/JspFragment.class
-SHA1-Digest: L5TUrwJQDI9NbCwHdoabTQzMyRk=
-
-Name: javax/servlet/jsp/el/ELParseException.class
-SHA1-Digest: yMq3u5fd04SrVNPOTNj1eoH26F4=
-
-Name: javax/servlet/jsp/tagext/FunctionInfo.class
-SHA1-Digest: pZA7QooEMI/sNABR3fyIokpmpOU=
-
-Name: plugin.properties
-SHA1-Digest: SaiCrNlOfavzz16ICeW7pew2bZ8=
-
-Name: javax/servlet/jsp/tagext/TagFileInfo.class
-SHA1-Digest: CqekVZM9F9K3p7UL1Ey7m84i6gE=
-
-Name: javax/servlet/jsp/tagext/TagVariableInfo.class
-SHA1-Digest: 06isMUB7L+QcrnOSLgNwBAe+Q+w=
-
-Name: javax/servlet/jsp/JspEngineInfo.class
-SHA1-Digest: Dya4oUwKuQe/9/uQbdcIK6e2rGs=
-
-Name: javax/servlet/jsp/JspFactory.class
-SHA1-Digest: zTeo63ZROM8FTPlWS6R8LXwDZ2E=
-
-Name: about_files/LICENSE.txt
-SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
-
-Name: javax/servlet/jsp/tagext/ValidationMessage.class
-SHA1-Digest: W8lMSnkNy94HHvD/JWqsYnCrzEg=
-
-Name: javax/servlet/jsp/JspTagException.class
-SHA1-Digest: MtedXdWqQZEOROk5dhQK2ZN3ohc=
-
-Name: javax/servlet/jsp/JspException.class
-SHA1-Digest: 9SNsR2LiQn2+Z7oBa7P9EnAa9SY=
-
-Name: javax/servlet/jsp/SkipPageException.class
-SHA1-Digest: H3oSbH7DU3tGy1PkWi9OLZ4FJX4=
-
-Name: javax/servlet/jsp/el/ExpressionEvaluator.class
-SHA1-Digest: df77Zowy7fqSbj839PhLNXGRXO4=
-
-Name: javax/servlet/jsp/tagext/IterationTag.class
-SHA1-Digest: tq+UrJ1wfY1xQTc1xfdM4wbMIpQ=
-
-Name: javax/servlet/jsp/tagext/BodyTag.class
-SHA1-Digest: Aun4t2IwiXhe3h7ozAesB4WrRg8=
-
-Name: javax/servlet/jsp/tagext/Tag.class
-SHA1-Digest: pbya+FWrBbRY4Jw36mpk5XGlWdk=
-
-Name: javax/servlet/jsp/el/VariableResolver.class
-SHA1-Digest: bc+eGYmiWNs5w9KW6HvKySzxURI=
-
-Name: about.html
-SHA1-Digest: kevvjujybBSJ3dBq5jXTAem0V/c=
-
-Name: javax/servlet/jsp/HttpJspPage.class
-SHA1-Digest: BPQOvyLrO7DiBuUWK12sN+G+EAA=
-
-Name: javax/servlet/jsp/tagext/VariableInfo.class
-SHA1-Digest: V6ql0peh++/jrPu9+tEXiUO9ftM=
-
-Name: javax/servlet/jsp/JspWriter.class
-SHA1-Digest: ni5t3CGJ/DGC0Pp/2o0qbYDnPXc=
-
-Name: javax/servlet/jsp/tagext/JspTag.class
-SHA1-Digest: j5Y2diXQrVO1Qqp62pAn4pbW8EA=
-
-Name: javax/servlet/jsp/tagext/TagAdapter.class
-SHA1-Digest: 0C6XvKMZWwbZOgbH/KPVaysdzx8=
-
-Name: javax/servlet/jsp/tagext/TagSupport.class
-SHA1-Digest: jZ3/LXUvgpyJisi9jaSbFZKfQD8=
-
diff --git a/dependencyManifests/javax.servlet.jsp_2.0.0.v201101211617.jar/META-INF/MANIFEST.MF b/dependencyManifests/javax.servlet.jsp_2.0.0.v201101211617.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d5ecf7e
--- /dev/null
+++ b/dependencyManifests/javax.servlet.jsp_2.0.0.v201101211617.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %bundleProvider
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
+Bundle-Name: %bundleName
+Bundle-SymbolicName: javax.servlet.jsp
+Export-Package: javax.servlet.jsp; version=2.0,javax.servlet.jsp.el; v
+ ersion=2.0,javax.servlet.jsp.resources; version=2.0,javax.servlet.jsp
+ .tagext; version=2.0
+Bundle-Version: 2.0.0.v200806031607
+Bundle-ManifestVersion: 2
+Import-Package: javax.servlet; version=2.4,javax.servlet.http; version
+ =2.4,javax.servlet.resources; version=2.4
diff --git a/dependencyManifests/javax.servlet_2.5.0.v200910301333.jar/META-INF/MANIFEST.MF b/dependencyManifests/javax.servlet_2.5.0.v200910301333.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 3a2a76a..0000000
--- a/dependencyManifests/javax.servlet_2.5.0.v200910301333.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,209 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Vendor: %bundleProvider
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,J2SE-1.4
-Bundle-Name: %bundleName
-Bundle-SymbolicName: javax.servlet
-Export-Package: javax.servlet;version="2.5",javax.servlet.http;version
- ="2.5",javax.servlet.resources;version="2.5"
-Bundle-Version: 2.5.0.v200910301333
-Bundle-ManifestVersion: 2
-
-Name: javax/servlet/http/HttpServletRequest.class
-SHA1-Digest: cZEqv/EjAPpg1GIqtRM4yyXo24c=
-
-Name: javax/servlet/resources/web-jsptaglibrary_2_0.xsd
-SHA1-Digest: OPBaWTFgVdgYhf/G/Ihgm8bbqjU=
-
-Name: javax/servlet/resources/xml.xsd
-SHA1-Digest: 67xOpsC5yFOUU4W1NU08KubpNkw=
-
-Name: javax/servlet/Filter.class
-SHA1-Digest: PscRB6zod5A5KQvErg2zFbjV6ys=
-
-Name: javax/servlet/LocalStrings.properties
-SHA1-Digest: lJgZQAtOACfwT0+fdtYj115M8UQ=
-
-Name: javax/servlet/http/HttpServletRequestWrapper.class
-SHA1-Digest: XP2MXG+OiQW7Is05dQqtRSOdMos=
-
-Name: javax/servlet/http/HttpSessionListener.class
-SHA1-Digest: hvG5fYCqYV6bUuWZcGObyxtNpRE=
-
-Name: javax/servlet/ServletContextListener.class
-SHA1-Digest: hlbWgriGorzKKV/6N+P9HJOZ1HI=
-
-Name: javax/servlet/ServletResponse.class
-SHA1-Digest: 4O6Jr097CpG3QgWbytJq6q605kE=
-
-Name: javax/servlet/http/HttpUtils.class
-SHA1-Digest: 631+g1izaxXD5RXqAwT2CsGLIp0=
-
-Name: javax/servlet/http/LocalStrings_es.properties
-SHA1-Digest: pVaN8pbLEEEn0cTQGOlztbq6x/k=
-
-Name: javax/servlet/ServletRequestWrapper.class
-SHA1-Digest: KNqRnt2oqkkRyBo1nLsN3llAYL0=
-
-Name: javax/servlet/ServletRequestEvent.class
-SHA1-Digest: vK64h8xobSZTJYdNjiSgaKhCe2o=
-
-Name: javax/servlet/ServletRequest.class
-SHA1-Digest: vNuxheE5jLqSw4XpmtS0P5yo2Zk=
-
-Name: javax/servlet/http/HttpSessionBindingListener.class
-SHA1-Digest: q/L8u16/BwGgjEZUnPizyWXd7fM=
-
-Name: javax/servlet/http/HttpSessionEvent.class
-SHA1-Digest: wd8x2VwBGYg2faQtsa+MVKE9LHc=
-
-Name: javax/servlet/http/HttpServlet.class
-SHA1-Digest: RQhdmVq8CCOBGOi5rVnsK2a79Is=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: javax/servlet/http/LocalStrings.properties
-SHA1-Digest: aGOtTdQmrTuCfVrU6UDSktcCKPA=
-
-Name: javax/servlet/FilterConfig.class
-SHA1-Digest: 3q3TV3p6e56g88k6my7HATU3fdo=
-
-Name: javax/servlet/http/HttpSessionBindingEvent.class
-SHA1-Digest: 8s6euhxgb6XbT27OD9hEuXf4KPU=
-
-Name: javax/servlet/ServletOutputStream.class
-SHA1-Digest: C04Rw7AFY/HSEAQTyNth7l2HrU8=
-
-Name: javax/servlet/LocalStrings_fr.properties
-SHA1-Digest: 8gKJTnm8gx2uvTCh5KChJmoqnJU=
-
-Name: javax/servlet/resources/XMLSchema.dtd
-SHA1-Digest: 9RaoC7SKJ0yiTvz0jmFl+EhFKEY=
-
-Name: javax/servlet/http/LocalStrings_fr.properties
-SHA1-Digest: t7YF68xQ6ow8Zpp3h7LuZaKo7lc=
-
-Name: javax/servlet/resources/j2ee_web_services_1_1.xsd
-SHA1-Digest: IzKI/p9spq2Wldjs7QIhm0+omA0=
-
-Name: javax/servlet/http/NoBodyResponse.class
-SHA1-Digest: GQ7qm3xR+yDst0jZqM+SAbX0Zb8=
-
-Name: javax/servlet/ServletInputStream.class
-SHA1-Digest: ua3sPNmcO20TTkNlXjBDhl7hYcY=
-
-Name: javax/servlet/http/Cookie.class
-SHA1-Digest: 814NxBOAi6tFirMlovn4iyo5v8A=
-
-Name: javax/servlet/http/HttpSession.class
-SHA1-Digest: SjKVkHc0ykZO/HLzQ87otNRm9wE=
-
-Name: javax/servlet/resources/j2ee_1_4.xsd
-SHA1-Digest: c8kzVWpPNCgLHRWyPv1i4NELaXI=
-
-Name: javax/servlet/ServletContext.class
-SHA1-Digest: JQhgC8zgRchLxCPmLZLEn/i2LHk=
-
-Name: javax/servlet/RequestDispatcher.class
-SHA1-Digest: VtTooRyxQcLz6OibT+6V2TXSKdQ=
-
-Name: javax/servlet/resources/web-app_2_4.xsd
-SHA1-Digest: sptEiMDlwibb6o6ALbYzFxH+p3I=
-
-Name: javax/servlet/SingleThreadModel.class
-SHA1-Digest: nGe2xtSCDI5nOuQGQcgVL5h7tQg=
-
-Name: javax/servlet/http/HttpSessionActivationListener.class
-SHA1-Digest: bNruhJ6ZbTPgDO0tM/4nXw7aBR4=
-
-Name: javax/servlet/resources/web-app_2_5.xsd
-SHA1-Digest: gReNDd6zWih2Z4/n8tI7UdaKzvE=
-
-Name: javax/servlet/http/HttpServletResponseWrapper.class
-SHA1-Digest: GqvyqkJxdmAdjdw1CJsLLJcWSBI=
-
-Name: javax/servlet/http/HttpServletResponse.class
-SHA1-Digest: gkD7wj625s1DIMvChaV3zSEbJ8A=
-
-Name: javax/servlet/resources/web-app_2_2.dtd
-SHA1-Digest: CsTOp3Fqc11szliK2GRigMk9kaA=
-
-Name: javax/servlet/resources/web-app_2_3.dtd
-SHA1-Digest: PSOL4NYWvQiqx/Z4dd50wweluIk=
-
-Name: javax/servlet/resources/datatypes.dtd
-SHA1-Digest: negXBG4KrEM4DWsA6UixiG75o+4=
-
-Name: javax/servlet/ServletContextAttributeListener.class
-SHA1-Digest: u95pwjMLiOsuv2G/NLarwR8JLTc=
-
-Name: plugin.properties
-SHA1-Digest: JtGYoCHNOhBEWT6RKg2GmaW/WHQ=
-
-Name: javax/servlet/ServletConfig.class
-SHA1-Digest: AM1umCP9IBTU0wsUYicpsId8tDI=
-
-Name: javax/servlet/FilterChain.class
-SHA1-Digest: 1XdxRcxMp8mUi8Tp2pM128cIiHE=
-
-Name: javax/servlet/http/NoBodyOutputStream.class
-SHA1-Digest: 80hWgv50daD9O4JPxZLiBumvEOU=
-
-Name: javax/servlet/ServletRequestAttributeEvent.class
-SHA1-Digest: YTeP3O+o1o/24K/bDclWimcMzuA=
-
-Name: javax/servlet/resources/j2ee_web_services_client_1_1.xsd
-SHA1-Digest: tjC+1adG43GwDqyo+1Rui04RxpA=
-
-Name: javax/servlet/ServletException.class
-SHA1-Digest: OdGKjU8KYnKyBSC6gp84VnGnVSA=
-
-Name: javax/servlet/resources/jspxml.xsd
-SHA1-Digest: 8RLiUK0701Mes80qw1V0d2zjlOo=
-
-Name: javax/servlet/resources/jsp_2_0.xsd
-SHA1-Digest: 3AmjZ0u0APIuuAB0cez9iK53QdI=
-
-Name: about_files/LICENSE.txt
-SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
-
-Name: javax/servlet/ServletResponseWrapper.class
-SHA1-Digest: /nW0NAMS27Gp9B1fSCu4TxbqPtY=
-
-Name: javax/servlet/LocalStrings_ja.properties
-SHA1-Digest: fWcC0+8BY/is7Mz+ifqv+xn3YWk=
-
-Name: javax/servlet/http/LocalStrings_ja.properties
-SHA1-Digest: CkWj6ZiL0tmjIdivjxbZXbw1kwE=
-
-Name: javax/servlet/ServletRequestListener.class
-SHA1-Digest: Kl7zeOGhl4GL9mVLC6Nf+H8jndY=
-
-Name: about.html
-SHA1-Digest: DOXgjdJkCfshjNaMxgtw+S1kFxQ=
-
-Name: javax/servlet/Servlet.class
-SHA1-Digest: S596bI4xC+N2r87RPWKe202ztJQ=
-
-Name: javax/servlet/UnavailableException.class
-SHA1-Digest: O+Wm6u4FMTD2mod58+6vvI4GFLY=
-
-Name: javax/servlet/ServletRequestAttributeListener.class
-SHA1-Digest: VVGi6p/vaccOjQHVmKUF4eTBWZk=
-
-Name: javax/servlet/http/HttpSessionContext.class
-SHA1-Digest: tSXw8uG5shVb9ms8rgkvZleYKbQ=
-
-Name: javax/servlet/http/HttpSessionAttributeListener.class
-SHA1-Digest: ePuZtdVoakXZflRHli3dWYFqjbU=
-
-Name: javax/servlet/ServletContextAttributeEvent.class
-SHA1-Digest: I1VRvE2SczWAzUq4id+dC+h/XjI=
-
-Name: javax/servlet/ServletContextEvent.class
-SHA1-Digest: aZJ4fTxTddNe3L2OWUCBW12q5LQ=
-
-Name: javax/servlet/GenericServlet.class
-SHA1-Digest: e0c6/5OOiebOSXd/d8x1hPgqi9c=
-
diff --git a/dependencyManifests/javax.servlet_2.5.0.v201103041518.jar/META-INF/MANIFEST.MF b/dependencyManifests/javax.servlet_2.5.0.v201103041518.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2fc0d0c
--- /dev/null
+++ b/dependencyManifests/javax.servlet_2.5.0.v201103041518.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,J2SE-1.4
+Bundle-SymbolicName: javax.servlet
+Bundle-ManifestVersion: 2
+Bundle-Name: %bundleName
+Bundle-Localization: plugin
+Bundle-Version: 2.5.0.v200806031605
+Bundle-Vendor: %bundleProvider
+Export-Package: javax.servlet;version="2.5",javax.servlet.http;version
+ ="2.5",javax.servlet.resources;version="2.5"
+
diff --git a/dependencyManifests/org.apache.commons.codec_1.3.0.v20080530-1600.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.commons.codec_1.3.0.v20080530-1600.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 739fa0f..0000000
--- a/dependencyManifests/org.apache.commons.codec_1.3.0.v20080530-1600.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,119 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Vendor: %bundleProvider
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
-Bundle-Name: %bundleName
-Bundle-SymbolicName: org.apache.commons.codec
-Export-Package: org.apache.commons.codec;version="1.3.0",org.apache.co
- mmons.codec.binary;version="1.3.0",org.apache.commons.codec.digest;ve
- rsion="1.3.0",org.apache.commons.codec.language;version="1.3.0",org.a
- pache.commons.codec.net;version="1.3.0"
-Bundle-Version: 1.3.0.v20100518-1140
-Bundle-ManifestVersion: 2
-
-Name: org/apache/commons/codec/language/DoubleMetaphone.class
-SHA1-Digest: bjBTI/BDV1z8+z3hEVApJvwkVM8=
-
-Name: org/apache/commons/codec/digest/DigestUtils.class
-SHA1-Digest: wq18yMHHBd1moTQ8AtyCMsGj95k=
-
-Name: org/apache/commons/codec/net/BCodec.class
-SHA1-Digest: ZJMl6QGO7uOd9kINQd85uxh0eTM=
-
-Name: org/apache/commons/codec/StringDecoder.class
-SHA1-Digest: RVPBToocCwWd/DUTajCAJgVGE30=
-
-Name: org/apache/commons/codec/binary/BinaryCodec.class
-SHA1-Digest: X+G48+0rT74WoI2DlI/Xq7F7PVw=
-
-Name: org/apache/commons/codec/net/QuotedPrintableCodec.class
-SHA1-Digest: pmfEzso5XtCeWq0S7qtZ9FY7oXY=
-
-Name: org/apache/commons/codec/binary/package.html
-SHA1-Digest: 5QhuWhHiab81vS0aJeia/Z8M1Mc=
-
-Name: org/apache/commons/codec/language/Soundex.class
-SHA1-Digest: 2oHgbHLMUtt0mwiCIkBWVv4Ww+o=
-
-Name: org/apache/commons/codec/binary/Hex.class
-SHA1-Digest: 3HCzfhHisCVj80SpQp9ocGLzQo0=
-
-Name: plugin.properties
-SHA1-Digest: 5MZzEYQvuEeJGsdwKs9rkvRxvis=
-
-Name: org/apache/commons/codec/net/StringEncodings.class
-SHA1-Digest: qf4vuSsKwlYm8Pp74YiPdoYk3Yc=
-
-Name: org/apache/commons/codec/language/Metaphone.class
-SHA1-Digest: fqhTV44h+rFjtb4CZkhnGQTgIBc=
-
-Name: org/apache/commons/codec/EncoderException.class
-SHA1-Digest: 6noEPjvRMiZV64IvGDHX6rBE0wQ=
-
-Name: org/apache/commons/codec/language/package.html
-SHA1-Digest: NkP/cavbTwKhLLejSUFP7DxqVAU=
-
-Name: org/apache/commons/codec/StringEncoderComparator.class
-SHA1-Digest: IRFEQ/kBsYm/i70e2RJJ8QHpVgo=
-
-Name: org/apache/commons/codec/language/RefinedSoundex.class
-SHA1-Digest: 3zKeZeLMAzK9BXSEvumfEuwXsdI=
-
-Name: org/apache/commons/codec/net/QCodec.class
-SHA1-Digest: Qd4NFXllW2C1jmXCa0LRFG7iYis=
-
-Name: org/apache/commons/codec/BinaryDecoder.class
-SHA1-Digest: qzHigNqM9xLBAccuCZ5d7FSUgNI=
-
-Name: org/apache/commons/codec/Decoder.class
-SHA1-Digest: VZVllcafY4XPvWeVcKdNa3j9kB0=
-
-Name: org/apache/commons/codec/net/URLCodec.class
-SHA1-Digest: D5bYH0ZSxv78UFtvjj9Kf07WWDA=
-
-Name: about_files/LICENSE.txt
-SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
-
-Name: org/apache/commons/codec/net/package.html
-SHA1-Digest: VPMJgkNKnhh/cdySG2xI+oBE8aY=
-
-Name: org/apache/commons/codec/StringEncoder.class
-SHA1-Digest: LH1NpQjcaYBGa1mUBbq8SNdPVGQ=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: org/apache/commons/codec/digest/package.html
-SHA1-Digest: e9kZxTv+uxZfkn+xNcwp6XvJ+xA=
-
-Name: org/apache/commons/codec/package.html
-SHA1-Digest: IM3/K5MCXeG4gEjw3nDQyCI6Lic=
-
-Name: org/apache/commons/codec/overview.html
-SHA1-Digest: QIM760pmca/cNoXqOCkv3BESON4=
-
-Name: org/apache/commons/codec/DecoderException.class
-SHA1-Digest: XmTXvmZg0gnoiV5/nWkQrPG1Z6E=
-
-Name: about.html
-SHA1-Digest: +9ps3k00taYIS03ey1LoHmjQtUE=
-
-Name: org/apache/commons/codec/BinaryEncoder.class
-SHA1-Digest: GXKY4EGy4ZV/R0yj0BIuWDZUepo=
-
-Name: org/apache/commons/codec/Encoder.class
-SHA1-Digest: kAKKHUbN9ODIY2/yPFQL2X5sYZY=
-
-Name: org/apache/commons/codec/binary/Base64.class
-SHA1-Digest: UvrnxMTHeDSMHkjKqEWMD25OiDM=
-
-Name: org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphon
- eResult.class
-SHA1-Digest: 2+fCLSjosqyBEQq/lRPCGAbQvZc=
-
-Name: org/apache/commons/codec/net/RFC1522Codec.class
-SHA1-Digest: ENgYuGeeCM+X1163jrpijwtBb6w=
-
-Name: org/apache/commons/codec/language/SoundexUtils.class
-SHA1-Digest: 1Yk9BLhjHuXvhtjAY/gtm5zGKKI=
-
diff --git a/dependencyManifests/org.apache.commons.codec_1.3.0.v201101211617.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.commons.codec_1.3.0.v201101211617.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e9f2c7d
--- /dev/null
+++ b/dependencyManifests/org.apache.commons.codec_1.3.0.v201101211617.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %bundleProvider
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
+Bundle-Name: %bundleName
+Bundle-SymbolicName: org.apache.commons.codec
+Bundle-Version: 1.3.0.v201101211617
+Export-Package: org.apache.commons.codec;version="1.3.0",org.apache.co
+ mmons.codec.binary;version="1.3.0",org.apache.commons.codec.digest;ve
+ rsion="1.3.0",org.apache.commons.codec.language;version="1.3.0",org.a
+ pache.commons.codec.net;version="1.3.0"
+Bundle-ManifestVersion: 2
+
diff --git a/dependencyManifests/org.apache.commons.logging_1.0.4.v201005080501.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.commons.logging_1.0.4.v201005080501.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 4f4290f..0000000
--- a/dependencyManifests/org.apache.commons.logging_1.0.4.v201005080501.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,86 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Vendor: %bundleProvider
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
-Bundle-Name: %bundleName
-Bundle-SymbolicName: org.apache.commons.logging
-Export-Package: org.apache.commons.logging;version="1.0.4",org.apache.
- commons.logging.impl;version="1.0.4"
-Bundle-Version: 1.0.4.v201005080501
-Bundle-ManifestVersion: 2
-
-Name: org/apache/commons/logging/package.html
-SHA1-Digest: jsD27d4EQN9p+MEqH9rxe+TqY6k=
-
-Name: org/apache/commons/logging/LogFactory$1.class
-SHA1-Digest: whsbEKcn7vZ+LwmHJKw87HJFY0Y=
-
-Name: org/apache/commons/logging/impl/NoOpLog.class
-SHA1-Digest: 7muE+A0Hp5h9Ldjb3A17zUL+DcI=
-
-Name: org/apache/commons/logging/LogFactory$2.class
-SHA1-Digest: XhxoQexG77inagakRQpY47nf2Hw=
-
-Name: org/apache/commons/logging/LogFactory$3.class
-SHA1-Digest: cP92Yy4h/3//T+eQKhYs4o+/kxA=
-
-Name: org/apache/commons/logging/impl/LogKitLogger.class
-SHA1-Digest: JgEBM/Zjn++pJ3QCDczXs8t1uCM=
-
-Name: plugin.properties
-SHA1-Digest: MvpejpigNq4m1El2Z+t2IL06PUk=
-
-Name: org/apache/commons/logging/impl/LogFactoryImpl.class
-SHA1-Digest: L9ELLQHx5ta6lwQNphKvXoMlDHE=
-
-Name: org/apache/commons/logging/impl/package.html
-SHA1-Digest: ETgtEWz0bVC946lreSXMDxD/W/M=
-
-Name: org/apache/commons/logging/impl/Log4JCategoryLog.class
-SHA1-Digest: dyjRTsIYBaFNOMWnkoM9H1vtbXI=
-
-Name: about_files/LICENSE.txt
-SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
-
-Name: org/apache/commons/logging/impl/SimpleLog.class
-SHA1-Digest: zJhWPvXEZO1vevxyXNhCOy6cz8A=
-
-Name: org/apache/commons/logging/impl/AvalonLogger.class
-SHA1-Digest: nKHbAlItxYHJfrTWYkuuygYlrBs=
-
-Name: org/apache/commons/logging/LogSource.class
-SHA1-Digest: Z9b0alPnXvv2DwtG48Rf5+WEwA8=
-
-Name: org/apache/commons/logging/impl/Log4jFactory.class
-SHA1-Digest: yy8M0J5SMcx9NBTEzXk+aftfq3M=
-
-Name: org/apache/commons/logging/impl/LogFactoryImpl$1.class
-SHA1-Digest: FFwXrpZdN6g84E23AGrHbw7ZG7g=
-
-Name: org/apache/commons/logging/Log.class
-SHA1-Digest: nrLaPNgvcs4drS/+jOOCSUhxDYw=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: about_files/NOTICE.txt
-SHA1-Digest: BZ6V8A2KQoLkbfaPI0+XTqMx4MM=
-
-Name: org/apache/commons/logging/impl/SimpleLog$1.class
-SHA1-Digest: ObQShIwqwR5yN6YOSoB1mHZ/yQE=
-
-Name: org/apache/commons/logging/impl/Jdk14Logger.class
-SHA1-Digest: YJYHNRBcu9a9Yn34fN7zno3JKfc=
-
-Name: about.html
-SHA1-Digest: t52DM/J1zwDrpXQH8P8uu5iW66c=
-
-Name: org/apache/commons/logging/impl/Log4JLogger.class
-SHA1-Digest: byCy5cx2pB4Q5vIPEs3vyhx/W/w=
-
-Name: org/apache/commons/logging/LogConfigurationException.class
-SHA1-Digest: zFgkyDpbQCooU2Hk4XaYIe9gdSo=
-
-Name: org/apache/commons/logging/LogFactory.class
-SHA1-Digest: 9VDDUlKvp2ogMQxPqj/IuTZxuyA=
-
diff --git a/dependencyManifests/org.apache.commons.logging_1.0.4.v201101211617.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.commons.logging_1.0.4.v201101211617.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7ec0e4b
--- /dev/null
+++ b/dependencyManifests/org.apache.commons.logging_1.0.4.v201101211617.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %bundleProvider
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
+Bundle-Name: %bundleName
+Bundle-SymbolicName: org.apache.commons.logging
+Bundle-Version: 1.0.4.v201101211617
+Export-Package: org.apache.commons.logging;version="1.0.4",org.apache.
+ commons.logging.impl;version="1.0.4"
+Bundle-ManifestVersion: 2
+
diff --git a/dependencyManifests/org.apache.lucene.analysis_1.9.1.v20100518-1140.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.lucene.analysis_1.9.1.v20100518-1140.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 5257126..0000000
--- a/dependencyManifests/org.apache.lucene.analysis_1.9.1.v20100518-1140.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,111 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.apache.lucene.analysis
-Require-Bundle: org.apache.lucene;bundle-version="[1.9.1,2.0.0)";visib
- ility:=reexport
-Export-Package: org.apache.lucene.analysis.br,org.apache.lucene.analys
- is.cjk,org.apache.lucene.analysis.cn,org.apache.lucene.analysis.cz,or
- g.apache.lucene.analysis.de,org.apache.lucene.analysis.el,org.apache.
- lucene.analysis.fr,org.apache.lucene.analysis.nl,org.apache.lucene.an
- alysis.ru
-Bundle-Version: 1.9.1.v20100518-1140
-Bundle-ManifestVersion: 2
-
-Name: org/apache/lucene/analysis/de/GermanStemmer.class
-SHA1-Digest: ptBFhWqh4Jodi0WL7cvcHf+gqg0=
-
-Name: org/apache/lucene/analysis/fr/FrenchStemFilter.class
-SHA1-Digest: oJgrpubIKl6KO78NKNmR2Uxn/Tw=
-
-Name: org/apache/lucene/analysis/cjk/CJKAnalyzer.class
-SHA1-Digest: cZLarbfuVj5fFLiVIFJ5/zEnrHc=
-
-Name: plugin.properties
-SHA1-Digest: CAra4G4ycNGtrROzydO/KFuDwEo=
-
-Name: org/apache/lucene/analysis/ru/RussianStemFilter.class
-SHA1-Digest: XH17jc0ZSkA7sGsQ4fkCEfjWcEY=
-
-Name: org/apache/lucene/analysis/fr/FrenchAnalyzer.class
-SHA1-Digest: lh3UVyTKYGQXRQYg2et8QYJCwl8=
-
-Name: org/apache/lucene/analysis/ru/RussianAnalyzer.class
-SHA1-Digest: ENqDGbUqFOGnyiWtRbo/qZdx3I8=
-
-Name: org/apache/lucene/analysis/ru/RussianCharsets.class
-SHA1-Digest: d6+ABztO/n24mFIvpQj5rhFCNXE=
-
-Name: org/apache/lucene/analysis/br/BrazilianStemmer.class
-SHA1-Digest: dnN9Z2ziWywplrbDAiWLnTM7bFA=
-
-Name: org/apache/lucene/analysis/cn/ChineseAnalyzer.class
-SHA1-Digest: HXr1adnRJCVPIUBqY4/8qyMZ3BE=
-
-Name: org/apache/lucene/analysis/ru/RussianLetterTokenizer.class
-SHA1-Digest: /jA513fmbCxx0ZJ+bgOrTuJ1pQc=
-
-Name: about_files/asl-v20.txt
-SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
-
-Name: org/apache/lucene/analysis/nl/WordlistLoader.class
-SHA1-Digest: JJlnPmIXmcCGlubr3x30DRAVVUM=
-
-Name: org/apache/lucene/analysis/cn/ChineseTokenizer.class
-SHA1-Digest: 3BZaKVGa4mY4fVTzkEdcRFxFkZE=
-
-Name: org/apache/lucene/analysis/nl/DutchStemFilter.class
-SHA1-Digest: 2R8MjLYtGSRIZvArk+DRnZyiKog=
-
-Name: org/apache/lucene/analysis/de/GermanStemFilter.class
-SHA1-Digest: 31FkswsN6rEUF8UdnfTJ1f2yLKI=
-
-Name: org/apache/lucene/analysis/nl/DutchAnalyzer.class
-SHA1-Digest: QoYJvdmTFCaVhK1TOpOtlzEyQB4=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: org/apache/lucene/analysis/cjk/CJKTokenizer.class
-SHA1-Digest: 3hykOUinkCYzhl6qAvrriUdHp6k=
-
-Name: org/apache/lucene/analysis/el/GreekAnalyzer.class
-SHA1-Digest: J/5GtD7Iw9xW1ehdZath/nPdq+M=
-
-Name: org/apache/lucene/analysis/el/GreekCharsets.class
-SHA1-Digest: 27NfiUKlK8EG53cXiX8dXDoayvI=
-
-Name: org/apache/lucene/analysis/cz/CzechAnalyzer.class
-SHA1-Digest: xQEEXYR6PzPb4/EU0uNj/7tcgvA=
-
-Name: org/apache/lucene/analysis/cn/ChineseFilter.class
-SHA1-Digest: EN1IENyubAQsCv/lqFWSRxJEm2k=
-
-Name: org/apache/lucene/analysis/de/GermanAnalyzer.class
-SHA1-Digest: PgbAbqwnxNURMLJFk9eFiqXzYXM=
-
-Name: org/apache/lucene/analysis/nl/DutchStemmer.class
-SHA1-Digest: kzgHYabhNmHxYCcBtVXP24Che3Y=
-
-Name: about.html
-SHA1-Digest: Fq88jcaAsG48Z06Ru60Co9116aM=
-
-Name: org/apache/lucene/analysis/ru/RussianLowerCaseFilter.class
-SHA1-Digest: D1g5fHlksdj+sl+TeVsYOJ2fvwg=
-
-Name: org/apache/lucene/analysis/br/BrazilianStemFilter.class
-SHA1-Digest: ZbW+hV1dQ6owqowfCKOMJfU9oSM=
-
-Name: org/apache/lucene/analysis/br/BrazilianAnalyzer.class
-SHA1-Digest: 8Uwcd7gNQuNT8l3aIWPCRxhzbjQ=
-
-Name: org/apache/lucene/analysis/ru/RussianStemmer.class
-SHA1-Digest: RTaA5IcFEgMR/QJ3OGkWW58SjNE=
-
-Name: org/apache/lucene/analysis/fr/FrenchStemmer.class
-SHA1-Digest: zn2DJflYMf2jhP3i7+F2uN26i8A=
-
-Name: org/apache/lucene/analysis/el/GreekLowerCaseFilter.class
-SHA1-Digest: wQMLA/syAU5Q4LVMPkJFLvmCQvY=
-
diff --git a/dependencyManifests/org.apache.lucene.analysis_2.9.1.v201101211721.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.lucene.analysis_2.9.1.v201101211721.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..af15e25
--- /dev/null
+++ b/dependencyManifests/org.apache.lucene.analysis_2.9.1.v201101211721.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,462 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.apache.lucene.analysis
+Require-Bundle: org.apache.lucene.core;bundle-version="[2.9.1,3.0.0)"
+Bundle-Version: 2.9.1.v201101211721
+Export-Package: org.apache.lucene.analysis.ar;version="2.9.1",org.apac
+ he.lucene.analysis.br;version="2.9.1",org.apache.lucene.analysis.cjk;
+ version="2.9.1",org.apache.lucene.analysis.cn;version="2.9.1",org.apa
+ che.lucene.analysis.compound;version="2.9.1",org.apache.lucene.analys
+ is.compound.hyphenation;version="2.9.1",org.apache.lucene.analysis.cz
+ ;version="2.9.1",org.apache.lucene.analysis.de;version="2.9.1",org.ap
+ ache.lucene.analysis.el;version="2.9.1",org.apache.lucene.analysis.fa
+ ;version="2.9.1",org.apache.lucene.analysis.fr;version="2.9.1",org.ap
+ ache.lucene.analysis.miscellaneous;version="2.9.1",org.apache.lucene.
+ analysis.ngram;version="2.9.1",org.apache.lucene.analysis.nl;version=
+ "2.9.1",org.apache.lucene.analysis.payloads;version="2.9.1",org.apach
+ e.lucene.analysis.position;version="2.9.1",org.apache.lucene.analysis
+ .query;version="2.9.1",org.apache.lucene.analysis.reverse;version="2.
+ 9.1",org.apache.lucene.analysis.ru;version="2.9.1",org.apache.lucene.
+ analysis.shingle;version="2.9.1",org.apache.lucene.analysis.sinks;ver
+ sion="2.9.1",org.apache.lucene.analysis.th;version="2.9.1"
+Bundle-ManifestVersion: 2
+
+Name: org/apache/lucene/analysis/sinks/TokenRangeSinkFilter.class
+SHA1-Digest: IYSkXIoY7RqtDtYwhYejJMA0ldw=
+
+Name: org/apache/lucene/analysis/br/BrazilianAnalyzer$1.class
+SHA1-Digest: ZCE9jyHJdetmn6rWv5DQkGeSn/M=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$TwoDimens
+ ionalNonWeightedSynonymTokenSettingsCodec.class
+SHA1-Digest: QkciOjnjWf1mbzPQQZ4bVYcgUig=
+
+Name: org/apache/lucene/analysis/reverse/ReverseStringFilter.class
+SHA1-Digest: DH5TCSkJ+WBQ3WrpSVeB6Rc2Ie4=
+
+Name: org/apache/lucene/analysis/cjk/CJKAnalyzer.class
+SHA1-Digest: hPJVLUqol3n2ZK+kDH7qK/CBtO8=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$Matrix$Co
+ lumn$Row.class
+SHA1-Digest: ZMxlC8iHE2lEEBkxRbL7OBIzO9M=
+
+Name: org/apache/lucene/analysis/compound/CompoundWordTokenFilterBase.
+ class
+SHA1-Digest: v3DL9TODz/8SUdM3hV11KXlXJfI=
+
+Name: org/apache/lucene/analysis/ru/RussianCharsets.class
+SHA1-Digest: JrjbD9uKcNmfKU2ePN0nqlcHMcg=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/HyphenationTree.
+ class
+SHA1-Digest: fZ1UlL3uU0MhSbTPLuVldYnXoLU=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/HyphenationDTDGe
+ nerator.class
+SHA1-Digest: xpI6VdJ5cQm8xr12iTirGnhvKMs=
+
+Name: org/apache/lucene/analysis/cjk/CJKAnalyzer$1.class
+SHA1-Digest: ELe7faKQtE+1A0J3TlYImzEo1HU=
+
+Name: org/apache/lucene/analysis/payloads/IdentityEncoder.class
+SHA1-Digest: 7XfC/VT65eHFTOFNACgsOsEREBg=
+
+Name: org/apache/lucene/analysis/nl/DutchStemFilter.class
+SHA1-Digest: Mah+5WkEZRPB0xjv1tpCpeDt6Sw=
+
+Name: org/apache/lucene/analysis/sinks/TokenRangeSinkTokenizer.class
+SHA1-Digest: dWCqf6pNvv/IUDLeFAJbvJdxAAQ=
+
+Name: org/apache/lucene/analysis/el/GreekAnalyzer$SavedStreams.class
+SHA1-Digest: Jk41r3LRD6naJ8Zd6Whfo1WzgTI=
+
+Name: org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapper$1.clas
+ s
+SHA1-Digest: x8SfHrhLleJ0+sxeDfbqKiC7uyM=
+
+Name: org/apache/lucene/analysis/nl/DutchAnalyzer.class
+SHA1-Digest: T2t8EmS9ieIVMDtpxiGOVJiyvmI=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/PatternParser.cl
+ ass
+SHA1-Digest: c3/hKEGIcCqEBXfOwDsQlYQW9ec=
+
+Name: org/apache/lucene/analysis/el/GreekCharsets.class
+SHA1-Digest: olzjpRQ0+vUrdfdBO5R7JI/cTJc=
+
+Name: org/apache/lucene/analysis/cz/CzechAnalyzer.class
+SHA1-Digest: WFVEsFkdHyK3xjGimTW9Mge9xzQ=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/ByteVector.class
+SHA1-Digest: Txh72kt0IICr/kNva2xu6sokP00=
+
+Name: org/apache/lucene/analysis/el/GreekAnalyzer$1.class
+SHA1-Digest: YXmR2Zf8ISy3uyFf58uLH58pPWc=
+
+Name: org/apache/lucene/analysis/ngram/EdgeNGramTokenFilter$Side.class
+SHA1-Digest: nAXETQAuK7/dOEpOgtT92UmHLZs=
+
+Name: org/apache/lucene/analysis/payloads/AbstractEncoder.class
+SHA1-Digest: 83eOWbG2sVroAYSNGqAlajVUMUE=
+
+Name: org/apache/lucene/analysis/payloads/IntegerEncoder.class
+SHA1-Digest: 2iOuv/C6TNL5r4QKO/4NrSULmTw=
+
+Name: org/apache/lucene/analysis/ar/ArabicNormalizer.class
+SHA1-Digest: T0FKq6wo1I4HlVxuw9fwGU3EJWw=
+
+Name: org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzer$1.cla
+ ss
+SHA1-Digest: c0uwz7WlAD57r/SwMwuBWTXBKYs=
+
+Name: org/apache/lucene/analysis/nl/DutchAnalyzer$SavedStreams.class
+SHA1-Digest: 91dTXXetrCmexcI/3/OS8JgvRw0=
+
+Name: org/apache/lucene/analysis/de/GermanStemmer.class
+SHA1-Digest: OgRnkpGtKBm7W40F9PODI86hkog=
+
+Name: org/apache/lucene/analysis/miscellaneous/PrefixAndSuffixAwareTok
+ enFilter$1.class
+SHA1-Digest: /6CGnicPo85s7bhQMvy7vaKH0zY=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter.class
+SHA1-Digest: jOHs3Rm2Muk4c2Qyt/JVl6Z3H18=
+
+Name: org/apache/lucene/analysis/miscellaneous/PrefixAwareTokenFilter.
+ class
+SHA1-Digest: tUfKpgCxzenLGA7aGKjHt8sMI8I=
+
+Name: org/apache/lucene/analysis/miscellaneous/SingleTokenTokenStream.
+ class
+SHA1-Digest: /s7ZQ1NYGxQaNVwRN2yNT7Di/jI=
+
+Name: org/apache/lucene/analysis/fr/FrenchAnalyzer.class
+SHA1-Digest: DIk4cprwmHwjsXMWRCiafMd1frA=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/TernaryTree$Iter
+ ator$Item.class
+SHA1-Digest: KYXK6tUGspYQh2GaZqtV9jgBn9M=
+
+Name: org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapper.class
+SHA1-Digest: GGPPur1aepME7VKr/HJXnJGVjuc=
+
+Name: org/apache/lucene/analysis/fa/PersianNormalizationFilter.class
+SHA1-Digest: Hgk9JkUk+kwmqbo3hzDRTBFW7xg=
+
+Name: org/apache/lucene/analysis/payloads/DelimitedPayloadTokenFilter.
+ class
+SHA1-Digest: NQ61hQTVn2j2A2RNhRzIe/YVwIk=
+
+Name: org/apache/lucene/analysis/payloads/FloatEncoder.class
+SHA1-Digest: sBDFxwzxbNJvagtYuDNWPAO+1Ec=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/Hyphenation.clas
+ s
+SHA1-Digest: WN6itUN7eYkyBuj41Q10Or9NZFw=
+
+Name: org/apache/lucene/analysis/fr/FrenchAnalyzer$1.class
+SHA1-Digest: ACKWhhpKSBsgNEFrDlOfgwdSn7Q=
+
+Name: org/apache/lucene/analysis/ru/RussianAnalyzer$1.class
+SHA1-Digest: Fr5RQD5JaBS9xNjRzHH/RhmbWM4=
+
+Name: org/apache/lucene/analysis/de/GermanStemFilter.class
+SHA1-Digest: 1nxH9T4IjNfAs2s7uQuFqJ5UDAs=
+
+Name: org/apache/lucene/analysis/cn/ChineseFilter.class
+SHA1-Digest: DNJgaPL3HL749Mn+z6w8hCo7skA=
+
+Name: org/apache/lucene/analysis/nl/DutchStemmer.class
+SHA1-Digest: 5s5JnVm8Pg4AukJufk7VS9YhdaU=
+
+Name: org/apache/lucene/analysis/compound/HyphenationCompoundWordToken
+ Filter.class
+SHA1-Digest: T7Bb2WPP5jCKGG7D6K3CG2klhyI=
+
+Name: org/apache/lucene/analysis/ar/ArabicAnalyzer$1.class
+SHA1-Digest: VK94y6lLWuu1yeT/TfIqIe9AkFE=
+
+Name: about.html
+SHA1-Digest: OmsDvddzBqB/aRJ4557xqfUKSt4=
+
+Name: org/apache/lucene/analysis/br/BrazilianAnalyzer$SavedStreams.cla
+ ss
+SHA1-Digest: X1BAYKEaeHl6TBuIuTpgXzLDZFU=
+
+Name: org/apache/lucene/analysis/br/BrazilianStemFilter.class
+SHA1-Digest: K6qZY3Yh3wFWXxxUfeYIaWYgGmg=
+
+Name: org/apache/lucene/analysis/miscellaneous/PrefixAndSuffixAwareTok
+ enFilter.class
+SHA1-Digest: 4jD7Sbl0lTU5aNPo11FjeMcwwGo=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/CharVector.class
+SHA1-Digest: VMkZ6DjGE7Ewknhed1fzjcZzNc0=
+
+Name: org/apache/lucene/analysis/br/BrazilianAnalyzer.class
+SHA1-Digest: G6bRxqwiWGGXkN/4IY08Oe6VdXY=
+
+Name: org/apache/lucene/analysis/th/ThaiAnalyzer$1.class
+SHA1-Digest: 0inCcNf8E3Wie7Vc9OBa5ARDc2U=
+
+Name: org/apache/lucene/analysis/payloads/PayloadHelper.class
+SHA1-Digest: b+3cHsQZ+THsMMI/kpO6xzPf6PE=
+
+Name: org/apache/lucene/analysis/th/ThaiAnalyzer$SavedStreams.class
+SHA1-Digest: oRZYLkylr1jiPV5C5U2sjQb8Q4I=
+
+Name: org/apache/lucene/analysis/fr/FrenchStemmer.class
+SHA1-Digest: RK8/beJfAA+ANX2lcoAgmQAuJKI=
+
+Name: org/apache/lucene/analysis/ngram/NGramTokenFilter.class
+SHA1-Digest: XWIarBCEvBL8BCiEfzHvIhiLimo=
+
+Name: org/apache/lucene/analysis/ngram/NGramTokenizer.class
+SHA1-Digest: 8NQ0zBnoCCRjhxIGK7XkHoDpzkU=
+
+Name: org/apache/lucene/analysis/miscellaneous/PrefixAndSuffixAwareTok
+ enFilter$2.class
+SHA1-Digest: /pkFY6I5h/R7jsCP29LmGiKEzYY=
+
+Name: org/apache/lucene/analysis/payloads/TypeAsPayloadTokenFilter.cla
+ ss
+SHA1-Digest: 6nOZbl9Aq5Ze0mrzydLzYwuNoSs=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/HyphenationExcep
+ tion.class
+SHA1-Digest: JhBqCL/EKWMTdS5eWat8CZquk4M=
+
+Name: org/apache/lucene/analysis/ar/ArabicStemmer.class
+SHA1-Digest: YMf7Vxs74NtXenMlNS/aNUOftqQ=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$TokenSett
+ ingsCodec.class
+SHA1-Digest: HYWP1Cq6lfUwcpn+wgMtsqtzHok=
+
+Name: org/apache/lucene/analysis/ru/RussianAnalyzer$SavedStreams.class
+SHA1-Digest: 7gqUIYq4xaJX95Si6yj58LA6GVw=
+
+Name: org/apache/lucene/analysis/ar/ArabicNormalizationFilter.class
+SHA1-Digest: tGtq4dfrbSJuSp4WgfJnsE+fBlg=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$SimpleThr
+ eeDimensionalTokenSettingsCodec.class
+SHA1-Digest: belbSLkLQEKtppgr8vQ1xhQz/v4=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$OneDimens
+ ionalNonWeightedTokenSettingsCodec.class
+SHA1-Digest: UmlGMpsArjtjX1Bf9BpFHFjApAE=
+
+Name: org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzer$Saved
+ Streams.class
+SHA1-Digest: /R7KqmDgF03fTBOSaUBFCAm+zP4=
+
+Name: org/apache/lucene/analysis/br/BrazilianStemmer.class
+SHA1-Digest: B1R7/h4XiszneHz04ZtNo4QzKEI=
+
+Name: org/apache/lucene/analysis/cjk/CJKAnalyzer$SavedStreams.class
+SHA1-Digest: QSC2Bzg7JeivSvyzi6K825YiIkU=
+
+Name: org/apache/lucene/analysis/fa/PersianAnalyzer.class
+SHA1-Digest: qz0ZNSd3Cv3NFRyjrhMlFVmnwEE=
+
+Name: about_files/asl-v20.txt
+SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
+
+Name: org/apache/lucene/analysis/ngram/EdgeNGramTokenFilter.class
+SHA1-Digest: Jq1mMhgXOxepjcc8Y7LlUwmqswM=
+
+Name: org/apache/lucene/analysis/ar/ArabicAnalyzer.class
+SHA1-Digest: VDR2nmQRgzI9FPfcDQ4BCcxWiew=
+
+Name: org/apache/lucene/analysis/shingle/ShingleFilter.class
+SHA1-Digest: 2QAVAuw3+6HmYOPcbfGBFmtw0mg=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
+
+Name: org/apache/lucene/analysis/cjk/CJKTokenizer.class
+SHA1-Digest: 1Y4wJ7K/1TyMUL+k3cP/8V8ObWk=
+
+Name: org/apache/lucene/analysis/sinks/TokenTypeSinkTokenizer.class
+SHA1-Digest: QrRT5SSc3DN5cX6uBx7GSJz5X5w=
+
+Name: org/apache/lucene/analysis/ar/ArabicAnalyzer$SavedStreams.class
+SHA1-Digest: OLAiMM6daX7EwRDCJZ0c0zJuojE=
+
+Name: org/apache/lucene/analysis/th/ThaiWordFilter.class
+SHA1-Digest: JGxzIFLeT0WSsogoWOvErtpnlFY=
+
+Name: org/apache/lucene/analysis/ar/stopwords.txt
+SHA1-Digest: 3aAgsrbzdtxNWmYmnrNiE/+KllA=
+
+Name: org/apache/lucene/analysis/de/GermanAnalyzer.class
+SHA1-Digest: 8pK6yBj2b6NGQWJnAi3ZOtT2Qk4=
+
+Name: org/apache/lucene/analysis/ar/ArabicLetterTokenizer.class
+SHA1-Digest: EaeKbQgc0VKa8uZo92uJfm1EP6Q=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$TokenPosi
+ tioner.class
+SHA1-Digest: hXIXojkuz5AbYnKjBuFcAC6mhLE=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/Hyphen.class
+SHA1-Digest: WRVgdB51p6aNpZMkuH3MfnW2iAs=
+
+Name: org/apache/lucene/analysis/ngram/EdgeNGramTokenizer$Side.class
+SHA1-Digest: arLwy7hiIF77nKQtdZ+6RdE6e1M=
+
+Name: org/apache/lucene/analysis/nl/DutchAnalyzer$1.class
+SHA1-Digest: o/32PCe9xnvmCE/VgaRgKI0/kUM=
+
+Name: org/apache/lucene/analysis/sinks/DateRecognizerSinkTokenizer.cla
+ ss
+SHA1-Digest: wXTxUAAnxuspQ5aFQN9qzFCrjdI=
+
+Name: org/apache/lucene/analysis/fa/stopwords.txt
+SHA1-Digest: Of9BFZTvbIdzO+d4+9CyAsvh2xE=
+
+Name: org/apache/lucene/analysis/sinks/DateRecognizerSinkFilter.class
+SHA1-Digest: Vtp+IutLdFwkxuE44LfEQrYreYs=
+
+Name: org/apache/lucene/analysis/fr/ElisionFilter.class
+SHA1-Digest: 5DZ5sPt3HXF3wdhy/+krcoTrLTw=
+
+Name: org/apache/lucene/analysis/cz/CzechAnalyzer$1.class
+SHA1-Digest: 6X8bXvCWO5naDJsNkU01QLCrDTw=
+
+Name: org/apache/lucene/analysis/fa/PersianNormalizer.class
+SHA1-Digest: 8JvERHY98oR4MzmDlSuYg0dvuHk=
+
+Name: org/apache/lucene/analysis/ru/RussianStemmer.class
+SHA1-Digest: qyMwGzaWIqaLh89c1awUCuaRgY4=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/PatternConsumer.
+ class
+SHA1-Digest: UqzmH17oepqIPI3aUyskZEXIqj8=
+
+Name: org/apache/lucene/analysis/cz/CzechAnalyzer$SavedStreams.class
+SHA1-Digest: nCGiEWUYUwcAx9v3tsK4AvUW9KY=
+
+Name: org/apache/lucene/analysis/el/GreekLowerCaseFilter.class
+SHA1-Digest: /6Ze8iiaTA+yYM5SYuyI6LfulFo=
+
+Name: org/apache/lucene/analysis/payloads/TokenOffsetPayloadTokenFilte
+ r.class
+SHA1-Digest: rSDJh1JmZGVlVWOFGFTl3BCFFQ4=
+
+Name: org/apache/lucene/analysis/fr/FrenchStemFilter.class
+SHA1-Digest: GVKuAMqe4ROFrS/+AaDonRpQWwE=
+
+Name: plugin.properties
+SHA1-Digest: he49LYXfrPXWS2rjzfaroeTNG0U=
+
+Name: org/apache/lucene/analysis/ru/RussianStemFilter.class
+SHA1-Digest: WPTS7x+rJgzxz0KwWUBowkmVrNE=
+
+Name: org/apache/lucene/analysis/cn/ChineseAnalyzer$SavedStreams.class
+SHA1-Digest: hSpi4JsdNBq9aFXJJwxh+udJjSg=
+
+Name: org/apache/lucene/analysis/ru/RussianAnalyzer.class
+SHA1-Digest: 9btkA8tyXV89eCTybHLeno/Y50k=
+
+Name: org/apache/lucene/analysis/fr/FrenchAnalyzer$SavedStreams.class
+SHA1-Digest: BW0tQxwxXjkg+TreSnM1fHlqx90=
+
+Name: org/apache/lucene/analysis/miscellaneous/EmptyTokenStream.class
+SHA1-Digest: 9a2RP9+NfvVyhkkLut0jC3SPWRI=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$Matrix.cl
+ ass
+SHA1-Digest: Q8woa+V1+PcNQBFk7boJcV8GNb0=
+
+Name: org/apache/lucene/analysis/cn/ChineseAnalyzer.class
+SHA1-Digest: 2mdwKzHBw2FQorCvhwQgjU+FY4U=
+
+Name: org/apache/lucene/analysis/ru/RussianLetterTokenizer.class
+SHA1-Digest: q5XQYHr4RwTNGcHLh1EJHM7FZEQ=
+
+Name: org/apache/lucene/analysis/ar/ArabicStemFilter.class
+SHA1-Digest: QQqF4dGIVHfcLt2+orrRWIy4Oso=
+
+Name: org/apache/lucene/analysis/nl/WordlistLoader.class
+SHA1-Digest: SpmNPaUd8O8IvXjsmZ1rOmh3jc0=
+
+Name: org/apache/lucene/analysis/de/GermanAnalyzer$SavedStreams.class
+SHA1-Digest: XIboLCF3DWL/sf6X3Dbj+jnx7Uw=
+
+Name: org/apache/lucene/analysis/cn/ChineseTokenizer.class
+SHA1-Digest: PB8JaO61Zt/ObmuYEWjtMXdib8Q=
+
+Name: org/apache/lucene/analysis/miscellaneous/SingleTokenTokenStream$
+ 1.class
+SHA1-Digest: NuPvnpsgrSQry7GzVn6k6wC0S9U=
+
+Name: org/apache/lucene/analysis/sinks/TokenTypeSinkFilter.class
+SHA1-Digest: D6tHjWhRHVuixfAZ+6Qi/g0zoPE=
+
+Name: org/apache/lucene/analysis/ngram/EdgeNGramTokenizer.class
+SHA1-Digest: aIRq20difhY7zIUR1WJt/W5jCsw=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$Matrix$1.
+ class
+SHA1-Digest: Ma9F48hryo4BFY60ywxoXPboPGk=
+
+Name: org/apache/lucene/analysis/cn/ChineseAnalyzer$1.class
+SHA1-Digest: PQFNt/Qr/ykIUMUEmmZNxOhgoBs=
+
+Name: org/apache/lucene/analysis/el/GreekAnalyzer.class
+SHA1-Digest: O0rg1AGFUN4X+bQRUaCEsppTBEs=
+
+Name: org/apache/lucene/analysis/fa/PersianAnalyzer$1.class
+SHA1-Digest: znNuCwhYzjWKMQRlq6VDMs529O4=
+
+Name: org/apache/lucene/analysis/payloads/PayloadEncoder.class
+SHA1-Digest: HKgu6Xrq+my3W0gGfH5Eph9t0X8=
+
+Name: org/apache/lucene/analysis/compound/DictionaryCompoundWordTokenF
+ ilter.class
+SHA1-Digest: ofS8Rzy/ltf2vidGPB1yiMTMfaY=
+
+Name: org/apache/lucene/analysis/th/ThaiAnalyzer.class
+SHA1-Digest: 0sv8+9b2xC1D813Uj4I0dZUSyRE=
+
+Name: org/apache/lucene/analysis/fa/PersianAnalyzer$SavedStreams.class
+SHA1-Digest: TZrtG+Ri1Ua19bCaxkW0l5ultSw=
+
+Name: org/apache/lucene/analysis/payloads/NumericPayloadTokenFilter.cl
+ ass
+SHA1-Digest: DHAq3eGgOQZJwsGUWOfO88vhBTY=
+
+Name: org/apache/lucene/analysis/shingle/ShingleAnalyzerWrapper$SavedS
+ treams.class
+SHA1-Digest: WF9L6IiYgCnMZw9WvAe6JRYJVHY=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/TernaryTree.clas
+ s
+SHA1-Digest: IlSP+bUtWddkj25ETWx7oCLOvnE=
+
+Name: org/apache/lucene/analysis/ru/RussianLowerCaseFilter.class
+SHA1-Digest: XBQd1wMqVbT+R3pdVvje51sQs0Y=
+
+Name: org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzer.class
+SHA1-Digest: acqakXcSghDl38hUI+K3DB+yfVE=
+
+Name: org/apache/lucene/analysis/de/GermanAnalyzer$1.class
+SHA1-Digest: DTtscFZ7bhW7/xWbmYPfe9l/Uao=
+
+Name: org/apache/lucene/analysis/position/PositionFilter.class
+SHA1-Digest: gXKOe+vAuNOw/5fEMzSLedsTzY0=
+
+Name: org/apache/lucene/analysis/compound/hyphenation/TernaryTree$Iter
+ ator.class
+SHA1-Digest: h3ns4YBmn5AT8rbL8/VSLO7XCr0=
+
+Name: org/apache/lucene/analysis/shingle/ShingleMatrixFilter$Matrix$Co
+ lumn.class
+SHA1-Digest: bcp6sdeQc8hLrYRaNtSHpH8gukI=
+
diff --git a/dependencyManifests/org.apache.lucene.core_2.9.1.v201101211721.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.lucene.core_2.9.1.v201101211721.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..48305f0
--- /dev/null
+++ b/dependencyManifests/org.apache.lucene.core_2.9.1.v201101211721.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,2348 @@
+Manifest-Version: 1.0
+Bundle-Vendor: %provider.name
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-Name: %bundle.name
+Bundle-SymbolicName: org.apache.lucene.core
+Bundle-Version: 2.9.1.v201101211721
+Export-Package: org.apache.lucene;core=split;version="2.9.1";mandatory
+ :=core,org.apache.lucene.analysis;core=split;version="2.9.1";mandator
+ y:=core,org.apache.lucene.analysis.standard;core=split;version="2.9.1
+ ";mandatory:=core,org.apache.lucene.analysis.tokenattributes;version=
+ "2.9.1";mandatory:=core,org.apache.lucene.document;core=split;version
+ ="2.9.1";mandatory:=core,org.apache.lucene.index;core=split;version="
+ 2.9.1";mandatory:=core,org.apache.lucene.messages;version="2.9.1";man
+ datory:=core,org.apache.lucene.queryParser;core=split;version="2.9.1"
+ ;mandatory:=core,org.apache.lucene.search;core=split;version="2.9.1";
+ mandatory:=core,org.apache.lucene.search.function;core=split;version=
+ "2.9.1";mandatory:=core,org.apache.lucene.search.payloads;core=split;
+ version="2.9.1";mandatory:=core,org.apache.lucene.search.spans;core=s
+ plit;version="2.9.1";mandatory:=core,org.apache.lucene.store;core=spl
+ it;version="2.9.1";mandatory:=core,org.apache.lucene.util;core=split;
+ version="2.9.1";mandatory:=core,org.apache.lucene.util.cache;core=spl
+ it;version="2.9.1";mandatory:=core
+Bundle-ManifestVersion: 2
+
+Name: org/apache/lucene/index/CorruptIndexException.class
+SHA1-Digest: /iaLQYVv5BXorRKcprwXnJSRl6I=
+
+Name: org/apache/lucene/analysis/CharArraySet$CharArraySetIterator.cla
+ ss
+SHA1-Digest: 1YBwei985C5LHmEfYsZLfQvMZlU=
+
+Name: org/apache/lucene/util/PriorityQueue.class
+SHA1-Digest: euBXS1po24JWJeUass84gfbi7Ks=
+
+Name: org/apache/lucene/document/Document.class
+SHA1-Digest: 9jIcOX/u6f8/ToIvV9kK+ybu8m0=
+
+Name: org/apache/lucene/util/ReaderUtil.class
+SHA1-Digest: Trdlq7BaFe6LdhjVeCLPTMzHSh4=
+
+Name: org/apache/lucene/search/function/OrdFieldSource.class
+SHA1-Digest: 9dqr5eyWydXVd6msybzIGP6u16I=
+
+Name: org/apache/lucene/index/CompoundFileWriter$1.class
+SHA1-Digest: /LT+jHUDDY1dj38fOrFbelj2ZrU=
+
+Name: org/apache/lucene/search/TopFieldCollector$OneComparatorScoringM
+ axScoreCollector.class
+SHA1-Digest: phRu2mGEs2MTq0OzfjPYrsZRQxg=
+
+Name: org/apache/lucene/index/ReadOnlySegmentReader.class
+SHA1-Digest: nLudgKwmJF1/KE2LU5eFFtPbK74=
+
+Name: org/apache/lucene/search/spans/SpanNotQuery$1.class
+SHA1-Digest: 6ntX1PmirCzV5z6sWHV+nVyiwT4=
+
+Name: org/apache/lucene/analysis/LowerCaseTokenizer.class
+SHA1-Digest: KWxOscV1PLdzLvI/FOx2tKYyCQQ=
+
+Name: org/apache/lucene/analysis/standard/StandardTokenizer.class
+SHA1-Digest: gPlMuHG82Ldd22YFTOvq6daQIh4=
+
+Name: org/apache/lucene/index/TermVectorMapper.class
+SHA1-Digest: pZu/lb/TtnJGx315bMOuMBzuWL8=
+
+Name: org/apache/lucene/search/spans/SpanOrQuery$SpanQueue.class
+SHA1-Digest: 6PAf/5DsQFUCXzl+GqTGdDg9vb8=
+
+Name: org/apache/lucene/search/function/OrdFieldSource$1.class
+SHA1-Digest: GdmNWeWbNe/qNQKV2N9IfXFUzT8=
+
+Name: org/apache/lucene/search/TopFieldCollector$MultiComparatorNonSco
+ ringCollector.class
+SHA1-Digest: TqAKl9oXNjR4si6bI3lr/H1Ye8U=
+
+Name: org/apache/lucene/search/BooleanScorer2$2.class
+SHA1-Digest: dEId+wRdcFxBeW0vyUrtl06R/Yc=
+
+Name: org/apache/lucene/analysis/tokenattributes/PayloadAttributeImpl.
+ class
+SHA1-Digest: BuTvh8IRCMrxbCc/3kCnxirv96Y=
+
+Name: org/apache/lucene/util/SortedVIntList.class
+SHA1-Digest: kYwxtRQ+D22frp+BWBFF2wKQYr0=
+
+Name: org/apache/lucene/document/SetBasedFieldSelector.class
+SHA1-Digest: rkTiiAC8rHRXcVXn9T49NHI2wIM=
+
+Name: org/apache/lucene/store/FSDirectory$FSIndexInput.class
+SHA1-Digest: OAZMlVrsEh3l14DBkD/HUWdrW7o=
+
+Name: org/apache/lucene/index/IndexFileNames.class
+SHA1-Digest: 0jfTQBSgbkEceOltK2PWT3etBPk=
+
+Name: org/apache/lucene/search/SpanFilterResult.class
+SHA1-Digest: FbUE1bbTkZPG53jYjSOL1hHVHT4=
+
+Name: org/apache/lucene/index/MultiLevelSkipListWriter.class
+SHA1-Digest: b6p60wPgG40epiJV8b5R/JDwsnk=
+
+Name: org/apache/lucene/index/SegmentReader$1.class
+SHA1-Digest: tgnflaN+f3pHryL5j7seo08cHHE=
+
+Name: org/apache/lucene/index/TermVectorEntry.class
+SHA1-Digest: pOR9q8D4LDopWqxWCnTGwGL17Ik=
+
+Name: org/apache/lucene/index/LogByteSizeMergePolicy.class
+SHA1-Digest: hU9Lx3bBNJxLF3c7SVWQ0F0j0Kc=
+
+Name: org/apache/lucene/util/OpenBitSet.class
+SHA1-Digest: cjQWcuZGvV+Il1IMgZTDXa5ovqk=
+
+Name: org/apache/lucene/util/SimpleStringInterner.class
+SHA1-Digest: i+32adobkUm1pHzRzEj5c4LanM4=
+
+Name: org/apache/lucene/search/FieldCacheImpl.class
+SHA1-Digest: RfjvCY6jT0VPT/sonXGaNrkeda8=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$8.class
+SHA1-Digest: CJVPCd3uqJTjmjecwmZuy2xL+g4=
+
+Name: org/apache/lucene/store/RAMOutputStream.class
+SHA1-Digest: ijccT1peMrd9LVDBVvg3dA6ra08=
+
+Name: org/apache/lucene/search/function/FloatFieldSource.class
+SHA1-Digest: IJ85u0ltw5BO8NKLbJb3B1nEscc=
+
+Name: org/apache/lucene/index/SortedTermVectorMapper.class
+SHA1-Digest: FE1fTbTc4hTl18wTHZSZK4Z+1CU=
+
+Name: org/apache/lucene/search/FilteredDocIdSet$1.class
+SHA1-Digest: nLVwxC8uxsacNZl30rjrl+Cte1k=
+
+Name: org/apache/lucene/index/TermVectorOffsetInfo.class
+SHA1-Digest: L5S4I7LLefoLr4anRF1TMLDCt8I=
+
+Name: org/apache/lucene/search/RangeFilter.class
+SHA1-Digest: RVUw9CjmQn0DzIl/XP/bkqvy8o4=
+
+Name: org/apache/lucene/index/DocumentsWriter$DocState.class
+SHA1-Digest: s/1heH2yBuMdx2lXLQZTSpDqFIU=
+
+Name: org/apache/lucene/search/FieldCache$CreationPlaceholder.class
+SHA1-Digest: h6GPiWaCnsJ8OF54vanwg5FNOtk=
+
+Name: org/apache/lucene/search/Explanation.class
+SHA1-Digest: YXHmC6jR95jNFRQkTKwh3p6h98E=
+
+Name: org/apache/lucene/search/ReqExclScorer.class
+SHA1-Digest: ge5EJLL67cFLxsUoQprGGrBK4Go=
+
+Name: org/apache/lucene/analysis/CharFilter.class
+SHA1-Digest: HIm3AqD2iuHzZON1381+mwqgEuI=
+
+Name: org/apache/lucene/search/FieldCacheImpl$StringIndexCache.class
+SHA1-Digest: wtEc49gNHW42RodT0TeB7XFGwxg=
+
+Name: org/apache/lucene/index/IndexFileDeleter.class
+SHA1-Digest: pktI1f8pM+hw8zBsztszoFsvc0s=
+
+Name: org/apache/lucene/LucenePackage.class
+SHA1-Digest: 4cn1tkbP9448M7LA8WQpBc4a1JI=
+
+Name: org/apache/lucene/search/ConjunctionScorer$1.class
+SHA1-Digest: wQmehoog4bnan3zubtKlOSZX+NY=
+
+Name: org/apache/lucene/search/BooleanScorer$BucketScorer.class
+SHA1-Digest: CQQPMF9p3Szz3s/BirslYjs/39o=
+
+Name: org/apache/lucene/search/TopFieldCollector.class
+SHA1-Digest: My3eSec/6FjjJlMvQqbY5GwhCMA=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$3$1.class
+SHA1-Digest: xatZI02pJOB82woO76wqbg7nKb4=
+
+Name: org/apache/lucene/search/function/IntFieldSource$1.class
+SHA1-Digest: vVIc6O5f/xO/UnI1pEXoFR/Cwew=
+
+Name: org/apache/lucene/search/TermQuery$TermWeight.class
+SHA1-Digest: +/nm06hsAFbWtmFZREay+b7AVyU=
+
+Name: org/apache/lucene/search/TopScoreDocCollector$OutOfOrderTopScore
+ DocCollector.class
+SHA1-Digest: JxGH7cqVySvcGbsybB4u2sFMxY4=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$7$1.class
+SHA1-Digest: XzoI1T/aO0hjNMgmjVf8rFcPS4I=
+
+Name: org/apache/lucene/index/CheckIndex.class
+SHA1-Digest: /h/XQBJ8jbLDHg4w90TEzsj8kJk=
+
+Name: org/apache/lucene/search/SortComparatorSource.class
+SHA1-Digest: Nrgn929sX6CPt36nDW/LDOShl4k=
+
+Name: org/apache/lucene/analysis/WhitespaceAnalyzer.class
+SHA1-Digest: niQ+6xEtNtN9g5HJQ6wYNx6ceMs=
+
+Name: org/apache/lucene/index/TermInfosReader$ThreadResources.class
+SHA1-Digest: F/VpunJmD9mzF2pGM/TjI/MCn6M=
+
+Name: org/apache/lucene/index/FilterIndexReader$FilterTermEnum.class
+SHA1-Digest: Y7vUP4+DDgnUQmQ+gv+h5JX+Dkk=
+
+Name: org/apache/lucene/search/FieldComparator$StringValComparator.cla
+ ss
+SHA1-Digest: G6xjvksipqhWwhZyum/p5Pe0rCU=
+
+Name: org/apache/lucene/index/TermVectorsWriter.class
+SHA1-Digest: DhLUwL6rYiBwzV/R8i3mN92OW9Q=
+
+Name: org/apache/lucene/index/FormatPostingsPositionsConsumer.class
+SHA1-Digest: ZR2aqi53nLPfPJf7psBa6RhiQfM=
+
+Name: org/apache/lucene/analysis/standard/StandardTokenizerImpl.class
+SHA1-Digest: 7TtKn2UBLKXFnnCcqEqbyaBRJIc=
+
+Name: org/apache/lucene/search/FieldComparator$StringComparatorLocale.
+ class
+SHA1-Digest: EtqH0Qs+lqBRe8Wq5Ug2GSjxeys=
+
+Name: org/apache/lucene/analysis/TeeSinkTokenFilter.class
+SHA1-Digest: 15yRrMrh6gIng3xlbjjhTPAqDks=
+
+Name: org/apache/lucene/analysis/TeeSinkTokenFilter$SinkTokenStream.cl
+ ass
+SHA1-Digest: KhYvgtD3bPXfHeZ4rbmP7KFImDE=
+
+Name: org/apache/lucene/search/FuzzyQuery$ScoreTermQueue.class
+SHA1-Digest: 6dsoLlJ5NLnwAYE7EPncRfe09Xg=
+
+Name: org/apache/lucene/util/IndexableBinaryStringTools$CodingCase.cla
+ ss
+SHA1-Digest: Ape2BBx0ggPe7ajyCT1KWkS7FDo=
+
+Name: org/apache/lucene/search/FieldComparator$RelevanceComparator.cla
+ ss
+SHA1-Digest: Z8GEygz7pkbNqKGPJ0fXeeDLskg=
+
+Name: org/apache/lucene/index/FilterIndexReader$FilterTermPositions.cl
+ ass
+SHA1-Digest: R8u02M1oo93BEJ4UfOQOOCD/zDI=
+
+Name: org/apache/lucene/index/CompoundFileReader$1.class
+SHA1-Digest: M2By0aR15OV2q1PCiIIkzkF+v9Y=
+
+Name: org/apache/lucene/index/MultipleTermPositions$IntQueue.class
+SHA1-Digest: e855MfMQjDFOj0r51U2FIuANkQI=
+
+Name: org/apache/lucene/search/Sort.class
+SHA1-Digest: NtnpB55jjSsEmdi9OqjsqqYowaw=
+
+Name: org/apache/lucene/analysis/CachingTokenFilter.class
+SHA1-Digest: MISnUgkwHBuZDnxUtB9JViyUHKU=
+
+Name: org/apache/lucene/analysis/tokenattributes/OffsetAttributeImpl.c
+ lass
+SHA1-Digest: +jNWvY7Xw8Hw2LGgbmi3+6jZKhE=
+
+Name: org/apache/lucene/store/RAMInputStream.class
+SHA1-Digest: v+lVx3tvcpcMgdn5hZSfmWPqjg0=
+
+Name: org/apache/lucene/index/IndexWriter$ReaderPool.class
+SHA1-Digest: G8Uob+wiCXIjblXAtqzPuTdM04M=
+
+Name: org/apache/lucene/util/IndexableBinaryStringTools.class
+SHA1-Digest: pZvm5ZMnFD2NAcwcWbEz+JLJExU=
+
+Name: org/apache/lucene/search/BooleanScorer2$SingleMatchScorer.class
+SHA1-Digest: b2///rMUC3KvWXPz4xMVND3EbP4=
+
+Name: org/apache/lucene/index/FieldInvertState.class
+SHA1-Digest: Hwa2saOwBnaCVstw+wqznMOr6qw=
+
+Name: org/apache/lucene/index/TermVectorsTermsWriter$PerDoc.class
+SHA1-Digest: mdJgtFnZeSpc1Avd6GmWk4LbXjo=
+
+Name: org/apache/lucene/search/PhraseQuery$PhraseWeight.class
+SHA1-Digest: HEKeVg1Dl1YolIyQUakLwdqbhMo=
+
+Name: org/apache/lucene/util/SortedVIntList$1.class
+SHA1-Digest: w77Q96vfgdPqLPazoOO9Ji3zGEM=
+
+Name: org/apache/lucene/index/DirectoryReader$MultiTermDocs.class
+SHA1-Digest: O3XnLJhqJ+mtwSsaMgl8X70yxRc=
+
+Name: org/apache/lucene/analysis/standard/StandardAnalyzer.class
+SHA1-Digest: KhNlWD4j2FOEzAiXYEJiCc+awrQ=
+
+Name: org/apache/lucene/index/MultiLevelSkipListReader.class
+SHA1-Digest: DbAlo9fNchEs58wBG+MBjbJSBnc=
+
+Name: org/apache/lucene/store/ChecksumIndexInput.class
+SHA1-Digest: UzmbZAgBbtVxV18SmrHEOjFhz1o=
+
+Name: org/apache/lucene/document/DateTools$Resolution.class
+SHA1-Digest: VXA9L5bLCbT2dATeTyCjJ5ZOCrU=
+
+Name: org/apache/lucene/search/spans/SpanOrQuery.class
+SHA1-Digest: d++kXo+8VVV2XBfH6+sbxA7yJSk=
+
+Name: org/apache/lucene/search/FieldValueHitQueue.class
+SHA1-Digest: 1gfco0exXS2Fb3fAEr+gk1+Mlqc=
+
+Name: org/apache/lucene/search/BooleanQuery$TooManyClauses.class
+SHA1-Digest: CwgNsun1Wf5BjlmyPNRDG2ZHphc=
+
+Name: org/apache/lucene/search/FieldCache$4.class
+SHA1-Digest: Pqs+iPymeU/BnLZKtnKUYsI3BXo=
+
+Name: org/apache/lucene/messages/NLS.class
+SHA1-Digest: E4FRU4agFVHMX/hP6g+tIFrufPg=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$3.class
+SHA1-Digest: 7DZTXkniTse0ksQ8fTKMW0x2tGk=
+
+Name: org/apache/lucene/index/TermPositionVector.class
+SHA1-Digest: PtDf5XWR/rEqvEE7wKI1qcTftkg=
+
+Name: org/apache/lucene/search/SpanFilterResult$StartEnd.class
+SHA1-Digest: an0U1CsKKrmZWoIHAqDn2lavgbQ=
+
+Name: org/apache/lucene/search/Hits.class
+SHA1-Digest: T6W0GfrIr258wWk0VuUlFbSoex8=
+
+Name: org/apache/lucene/index/DocumentsWriterThreadState.class
+SHA1-Digest: DQemnfx3sU3Rxb1nkAm7oUloUPo=
+
+Name: org/apache/lucene/index/FieldsReader$FieldForMerge.class
+SHA1-Digest: xZiTYbVs7BdXu3PI5yoRu+bRVjs=
+
+Name: org/apache/lucene/search/BooleanScorer$Bucket.class
+SHA1-Digest: pFjWH4G9GA5Fv5FvG3qywsy9bP4=
+
+Name: org/apache/lucene/search/PositiveScoresOnlyCollector.class
+SHA1-Digest: Yxum75Ud/vdziv2rVkJFJ0mwmPM=
+
+Name: org/apache/lucene/index/TermsHashConsumer.class
+SHA1-Digest: lMuPqsf3+wnFhsFS/MuqaMHsZqo=
+
+Name: org/apache/lucene/search/FieldValueHitQueue$MultiComparatorsFiel
+ dValueHitQueue.class
+SHA1-Digest: xxV6IHbCgVSsqkVMIjf8Imy91os=
+
+Name: org/apache/lucene/search/FieldCacheTermsFilter$FieldCacheTermsFi
+ lterDocIdSet$FieldCacheTermsFilterDocIdSetIterator.class
+SHA1-Digest: U4rT8PmVXyHVHD7iA9dMOgEQZOQ=
+
+Name: org/apache/lucene/index/MergePolicy$MergeSpecification.class
+SHA1-Digest: UJA9deBV6CRpmj/7bJWqjF7dFHQ=
+
+Name: org/apache/lucene/queryParser/QueryParser$JJCalls.class
+SHA1-Digest: 2hiSu2SFivb1uIARyBJTRmqltmI=
+
+Name: org/apache/lucene/index/Payload.class
+SHA1-Digest: T61OU4oXGNgI3V+NiVqbdlgSKCM=
+
+Name: org/apache/lucene/index/TermVectorEntryFreqSortedComparator.clas
+ s
+SHA1-Digest: /tgSvFDxxx0q1krGZE1kg5qD874=
+
+Name: org/apache/lucene/search/BooleanScorer2.class
+SHA1-Digest: ZwdhCqlIP/EFv96oxV6wjYQOp5E=
+
+Name: org/apache/lucene/index/DocumentsWriter$DocWriter.class
+SHA1-Digest: 3sF5kLIkZLf5xOGfRGXf7ns46lI=
+
+Name: org/apache/lucene/index/DocInverterPerThread.class
+SHA1-Digest: 35VEIntxlQk8DAb2uKwtJs++W48=
+
+Name: org/apache/lucene/util/DocIdBitSet$DocIdBitSetIterator.class
+SHA1-Digest: wBdZ0RbGupHc9WflIi5OEL3/mcE=
+
+Name: org/apache/lucene/queryParser/TokenMgrError.class
+SHA1-Digest: q+jeR1ly9yLjiX2W2sp1+UTd/s8=
+
+Name: org/apache/lucene/search/spans/FieldMaskingSpanQuery.class
+SHA1-Digest: 2aioOjab3FY9hoJo2rp6HjQf84c=
+
+Name: org/apache/lucene/util/AttributeSource$1.class
+SHA1-Digest: A5MyeVoPVUUl0S3qI5da10axpPY=
+
+Name: org/apache/lucene/search/FieldDoc.class
+SHA1-Digest: nml5oEl9VQDazQHGuuDFR+fQY28=
+
+Name: org/apache/lucene/index/DocumentsWriter$WaitQueue.class
+SHA1-Digest: a7Z6BKeiskCmxLclwq5DycVe/7Y=
+
+Name: org/apache/lucene/search/spans/NearSpansUnordered$SpansCell.clas
+ s
+SHA1-Digest: mc83nxsfPTC2yKY0tZqyKeNsOx4=
+
+Name: org/apache/lucene/analysis/tokenattributes/PositionIncrementAttr
+ ibuteImpl.class
+SHA1-Digest: KMEOQPnVsQvNrljcW5uEpyLUnQQ=
+
+Name: org/apache/lucene/search/CachingSpanFilter.class
+SHA1-Digest: TKXkSlbs4YJj2M5KIzO3d2S1tTE=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$2.class
+SHA1-Digest: Wg5jkei9JyqCITGpvgDpqgkkrU4=
+
+Name: org/apache/lucene/index/FieldSortedTermVectorMapper.class
+SHA1-Digest: d1OnLXtCPCBZseN/1/oF12h4nes=
+
+Name: org/apache/lucene/index/TermVectorsReader.class
+SHA1-Digest: E+HecRuUJ4pxBDd+herFYC5hyRY=
+
+Name: org/apache/lucene/search/FieldCache$StringIndex.class
+SHA1-Digest: PY90nqywIgE1bw/oT+G0/LZAPEg=
+
+Name: org/apache/lucene/search/ScoreCachingWrappingScorer.class
+SHA1-Digest: v3EBUk0N9FIrf/hZbl3GGTVd5NU=
+
+Name: org/apache/lucene/store/SimpleFSLockFactory.class
+SHA1-Digest: iXdTSxt6vNWkKGBGHqSm7VUpjAE=
+
+Name: org/apache/lucene/search/CachingWrapperFilter.class
+SHA1-Digest: Fkm6GjDJVVhAtIP3wB88MYVfh7Q=
+
+Name: org/apache/lucene/index/IndexFileNameFilter.class
+SHA1-Digest: /qxM91vqcLgwwmNK03nGRYdqv9Q=
+
+Name: org/apache/lucene/search/FieldCacheImpl$StopFillCacheException.c
+ lass
+SHA1-Digest: ggimzsxy4vX7eUtRgMh44LRKtGA=
+
+Name: org/apache/lucene/search/spans/SpanScorer.class
+SHA1-Digest: qYfEe1xdXGytM4IFmFBqx6SzDO4=
+
+Name: org/apache/lucene/index/FormatPostingsTermsConsumer.class
+SHA1-Digest: oXZ8UPnbffYmf7bAXCj5644NSyk=
+
+Name: org/apache/lucene/search/spans/NearSpansOrdered.class
+SHA1-Digest: Qms023w0Qb/ZOzjTQi9v2fw3UaY=
+
+Name: org/apache/lucene/search/function/CustomScoreQuery$CustomScorer.
+ class
+SHA1-Digest: ags85Bqrb/QL9tLN/JBsA0+bwUA=
+
+Name: org/apache/lucene/search/PhraseQueue.class
+SHA1-Digest: 19uJxCu3jmUjRv2cSEJumMI0AOA=
+
+Name: org/apache/lucene/search/DisjunctionMaxQuery$DisjunctionMaxWeigh
+ t.class
+SHA1-Digest: QuyBZp2fcn5y4+Nk8EufCSiBv5E=
+
+Name: org/apache/lucene/store/VerifyingLockFactory$CheckedLock.class
+SHA1-Digest: nE6sUuEfzhZprHijx0nm6NV9B2E=
+
+Name: org/apache/lucene/search/function/MultiValueSource$MultiDocValue
+ s.class
+SHA1-Digest: 25mPmVz4+I8qtJcnB5OgshCP02A=
+
+Name: org/apache/lucene/search/BooleanQuery$BooleanWeight.class
+SHA1-Digest: /p9G7C6qG7uR9iACoWUtmxZrU1A=
+
+Name: org/apache/lucene/search/function/IntFieldSource.class
+SHA1-Digest: IdMXyK/q38hhEJEk3cXvx7LFKCo=
+
+Name: org/apache/lucene/search/TopDocsCollector.class
+SHA1-Digest: bQ2yOVMNqHL30BLrUJcHm8MLAqk=
+
+Name: org/apache/lucene/index/DirectoryReader$MultiTermPositions.class
+SHA1-Digest: EhEjSGhOBCWr85RUt1+OBX5dOf8=
+
+Name: org/apache/lucene/search/FieldCache$9.class
+SHA1-Digest: M+SGyYo2cpypCHN9g/fgbBNjj9Y=
+
+Name: org/apache/lucene/index/CompoundFileWriter.class
+SHA1-Digest: W6t8KLq/AUU/mQz093UBgTzsVXU=
+
+Name: org/apache/lucene/search/TopFieldCollector$OutOfOrderMultiCompar
+ atorNonScoringCollector.class
+SHA1-Digest: pMveuaRbo0f8bgKIaX374uBQTUU=
+
+Name: org/apache/lucene/index/SegmentMerger$CheckAbort.class
+SHA1-Digest: Mtt7g2PQW45e+0mYi9pn5OFt4A8=
+
+Name: org/apache/lucene/analysis/SimpleAnalyzer.class
+SHA1-Digest: xdIs/v230GXpA0CwuZD9DmuW0j8=
+
+Name: org/apache/lucene/search/function/FieldScoreQuery$Type.class
+SHA1-Digest: n8QItH2w+2eRpjZgy7VJBdgqJS8=
+
+Name: org/apache/lucene/index/SegmentMergeQueue.class
+SHA1-Digest: 7jVpNP8CFKIu+cgS8lCxkZQXMS0=
+
+Name: org/apache/lucene/document/FieldSelectorResult.class
+SHA1-Digest: qb3T5f+wG+NQCdyL866jNIbk+fc=
+
+Name: org/apache/lucene/analysis/LengthFilter.class
+SHA1-Digest: jiZ8xzhPrOwaPVeaufl2o0DPoqo=
+
+Name: org/apache/lucene/search/MultiTermQueryWrapperFilter$TermGenerat
+ or.class
+SHA1-Digest: eq4VAsXteAFRA0fYrYE6U/Qj/BM=
+
+Name: org/apache/lucene/index/FreqProxFieldMergeState.class
+SHA1-Digest: jcbPltx6XjCV7H5bz+N8nAvWbKM=
+
+Name: org/apache/lucene/search/TopFieldCollector$OneComparatorScoringN
+ oMaxScoreCollector.class
+SHA1-Digest: lARAlvrf+qZVRKaE/kjOddhV7Is=
+
+Name: org/apache/lucene/index/InvertedDocEndConsumerPerField.class
+SHA1-Digest: sn1pvyex0CVfpshVOjq//NUkHSc=
+
+Name: org/apache/lucene/search/TopScoreDocCollector.class
+SHA1-Digest: nP1eLTIfTgIqwre77mxzBxJoKlo=
+
+Name: org/apache/lucene/index/IndexFileDeleter$CommitPoint.class
+SHA1-Digest: fxkIYTvPFVFiyou8vcJuVZyLT5o=
+
+Name: org/apache/lucene/index/DocInverterPerField.class
+SHA1-Digest: BpYGGT+F26d1UK4FVheC7O0pxnA=
+
+Name: org/apache/lucene/document/Document$1.class
+SHA1-Digest: tpJNJQ/B2bVFeUKB3t6CAEAzLkE=
+
+Name: org/apache/lucene/search/spans/TermSpans.class
+SHA1-Digest: ZpRUTkEJWybjFwVY4JDab8j+JXA=
+
+Name: org/apache/lucene/analysis/tokenattributes/TypeAttribute.class
+SHA1-Digest: IlQijCNowR/VGjEuFa31SFdRJTA=
+
+Name: org/apache/lucene/search/BooleanScorer2$1.class
+SHA1-Digest: lwpIPisqvxWk/ExcuD8YVwdeGVU=
+
+Name: org/apache/lucene/analysis/NumericTokenStream.class
+SHA1-Digest: ce44+3r/3vRAOhLUfjPohmkEbro=
+
+Name: org/apache/lucene/search/TimeLimitingCollector.class
+SHA1-Digest: IpE2jpMryVl/cMuxiNw44tURBgg=
+
+Name: org/apache/lucene/document/NumericField.class
+SHA1-Digest: I97COQx/qxR/1K7oe5nfOOcjZ8w=
+
+Name: about_files/APACHE-LICENSE-2.0.txt
+SHA1-Digest: D82944NkT7+XDZGL4X9K5EbJ6/g=
+
+Name: org/apache/lucene/index/RawPostingList.class
+SHA1-Digest: 2WlDwepN2Ww1FiO5nbJjxKwuMek=
+
+Name: org/apache/lucene/search/function/ShortFieldSource$1.class
+SHA1-Digest: IUcoCEbq0K4IVxRqpyiPwmN+6fI=
+
+Name: org/apache/lucene/store/NoSuchDirectoryException.class
+SHA1-Digest: TQDXTkCLEsJzL81KJ+E/VBS/FJY=
+
+Name: org/apache/lucene/search/FieldValueHitQueue$Entry.class
+SHA1-Digest: z8nupF18Eil12mRSLjpT2Svsodg=
+
+Name: org/apache/lucene/store/NativeFSLock.class
+SHA1-Digest: Qxgr8z7PCTPWAC/FgGd41iu+6nk=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$7.class
+SHA1-Digest: d6LidfJ5w33+0wdasE8dmz2jwE0=
+
+Name: org/apache/lucene/search/function/MultiValueSource.class
+SHA1-Digest: biCDQgSHklFR2Irxa6Ke6tpQva0=
+
+Name: org/apache/lucene/search/TimeLimitedCollector$TimerThread.class
+SHA1-Digest: ggI5BvHMmjHgKUR/X8MGvw5j000=
+
+Name: org/apache/lucene/util/FieldCacheSanityChecker$ReaderField.class
+SHA1-Digest: keAngHRRX7Cr0hSCyVsnad8gPOQ=
+
+Name: org/apache/lucene/util/AttributeSource$AttributeFactory$DefaultA
+ ttributeFactory.class
+SHA1-Digest: LJiCJVjvcoTCbM+e/Bg6UTwF3Gs=
+
+Name: org/apache/lucene/analysis/WhitespaceTokenizer.class
+SHA1-Digest: BeaXm4dQME3lgNdYT/6zzbfxShg=
+
+Name: org/apache/lucene/search/DocIdSet.class
+SHA1-Digest: oJSN2UuFNPfeXJWBy3+pCZzNvS8=
+
+Name: org/apache/lucene/search/payloads/BoostingTermQuery.class
+SHA1-Digest: 5cj/EKX94mUb0rn39h+oegzNPn4=
+
+Name: org/apache/lucene/util/SimpleStringInterner$1.class
+SHA1-Digest: uK8FYTMPQ9QswrXCJ/7aKnYvk0g=
+
+Name: org/apache/lucene/search/ReqOptSumScorer.class
+SHA1-Digest: lmtdE4Z7J2JzDHqxmNVyCbTv9Zw=
+
+Name: org/apache/lucene/analysis/standard/StandardAnalyzer$1.class
+SHA1-Digest: epwbno5/y1OlmRhZYeMY4A7eN+w=
+
+Name: org/apache/lucene/search/BooleanScorer2$Coordinator.class
+SHA1-Digest: 1jJMkP7xdK2WQbzxTnvwwDl7srY=
+
+Name: org/apache/lucene/search/NumericRangeQuery$NumericRangeTermEnum$
+ 2.class
+SHA1-Digest: jHfU0AZzhIyYUda+3zprYeYjAWI=
+
+Name: org/apache/lucene/index/DocFieldConsumers.class
+SHA1-Digest: 97u3LMtmU3r+BHk3ZFklOQ6MU/Q=
+
+Name: org/apache/lucene/index/SegmentMergeInfo.class
+SHA1-Digest: a3NlZTTF6oUeSEO/YBV5ISHMS9I=
+
+Name: org/apache/lucene/search/FieldCache$LongParser.class
+SHA1-Digest: cgmqh25tYfcoJ2qJ5lwDM5uXnlk=
+
+Name: org/apache/lucene/search/FuzzyQuery$ScoreTerm.class
+SHA1-Digest: 3EiTOYciWCwhQIPrpQxAoTdKAKY=
+
+Name: org/apache/lucene/util/UnicodeUtil$UTF16Result.class
+SHA1-Digest: Cayq8KCkJHjnKNrAmMwBRZtDCgM=
+
+Name: org/apache/lucene/store/NIOFSDirectory.class
+SHA1-Digest: aHHyJg4zjEC55h4/X/f8nKk8tlA=
+
+Name: org/apache/lucene/search/QueryWrapperFilter.class
+SHA1-Digest: thS2ZR5SonXP9775LgPzaHirp9Q=
+
+Name: org/apache/lucene/search/TimeLimitingCollector$TimeExceededExcep
+ tion.class
+SHA1-Digest: UxcKVzSkbXc/AsDv3pWXZef4kuo=
+
+Name: org/apache/lucene/search/FilteredTermEnum.class
+SHA1-Digest: p5BujsZzWr9Tl4CTSOIBb5VgDBY=
+
+Name: org/apache/lucene/search/BooleanScorer$SubScorer.class
+SHA1-Digest: 4TIU5BfetKZCxUkFm37dyB+6U/s=
+
+Name: org/apache/lucene/index/BufferedDeletes.class
+SHA1-Digest: 1RmMCVMRl2TI7+nVfjiBgtxF9gM=
+
+Name: org/apache/lucene/messages/NLS$1.class
+SHA1-Digest: Pw6RufPRSBCskQnlgKs2nmaUBks=
+
+Name: org/apache/lucene/search/spans/SpanWeight.class
+SHA1-Digest: EKi0kveJnwT6RXzTpiTF2y/jMWw=
+
+Name: org/apache/lucene/search/NumericRangeFilter.class
+SHA1-Digest: awK38skC7mWhKLdCsozPgrazfww=
+
+Name: org/apache/lucene/index/DirectoryOwningReader.class
+SHA1-Digest: wx/iEL5m2gz85cY2bUJNUWCBSkk=
+
+Name: org/apache/lucene/search/DisjunctionSumScorer.class
+SHA1-Digest: 65T7OHfGDwBCOvDL8Tq90nnWSMM=
+
+Name: org/apache/lucene/store/VerifyingLockFactory.class
+SHA1-Digest: VBbt/c8Ekiu1T3lWlIgVs/Dl11U=
+
+Name: org/apache/lucene/store/LockReleaseFailedException.class
+SHA1-Digest: Z3hp+t3u2qb498L0hv6sIRd1OjQ=
+
+Name: org/apache/lucene/store/BufferedIndexInput.class
+SHA1-Digest: uNWJN80SlkFgMaEvNG+RR/Ya6nk=
+
+Name: org/apache/lucene/store/FSDirectory$FSIndexOutput.class
+SHA1-Digest: z2RL3qFDc0RleJVjD5wJofsmeyM=
+
+Name: org/apache/lucene/search/TimeLimitedCollector$1.class
+SHA1-Digest: FrghtodvW5ikWutBYzaELZfVnkM=
+
+Name: org/apache/lucene/index/CompoundFileReader.class
+SHA1-Digest: Qvff8irbnjvWs7gW1z3FWjjfW5w=
+
+Name: org/apache/lucene/search/function/CustomScoreQuery$CustomWeight.
+ class
+SHA1-Digest: Xp2UFJn5DRh1lU6tFy6V0u1dTts=
+
+Name: org/apache/lucene/search/spans/SpanNearQuery.class
+SHA1-Digest: 0pXfU/LpWUwQEn3HmMU8H0e6Y4I=
+
+Name: org/apache/lucene/search/FilteredQuery.class
+SHA1-Digest: oSnr3pDxjlRQMYL+najzWLtYhPM=
+
+Name: org/apache/lucene/index/FreqProxTermsWriter.class
+SHA1-Digest: kYP+GTciHeN/JjBzmLYzQ6cZw5Y=
+
+Name: org/apache/lucene/search/ExtendedFieldCache$DoubleParser.class
+SHA1-Digest: LKewhBhkhWPqk9IYsOZJgvMTAOE=
+
+Name: org/apache/lucene/search/payloads/BoostingTermQuery$BoostingTerm
+ Weight.class
+SHA1-Digest: /wp8KaBL0pRj5XqKtiyzrms7Cn0=
+
+Name: org/apache/lucene/search/TopFieldCollector$1.class
+SHA1-Digest: 7AkCmZm1YMnxy4mL9Uw42d5g+to=
+
+Name: org/apache/lucene/search/SpanQueryFilter.class
+SHA1-Digest: 1m5TglO+qy8PZ9NJ3352/ZBVARU=
+
+Name: org/apache/lucene/index/PositionBasedTermVectorMapper.class
+SHA1-Digest: DnMTk8BrgWaSonY3k2z9GZkF89w=
+
+Name: org/apache/lucene/search/payloads/PayloadTermQuery.class
+SHA1-Digest: 6RrLFhZ0JTBOray8Q8OC5qZauIY=
+
+Name: org/apache/lucene/analysis/SinkTokenizer.class
+SHA1-Digest: +8Fw6ysi9hQRZD0zIzoynwyv9Zs=
+
+Name: org/apache/lucene/analysis/tokenattributes/OffsetAttribute.class
+SHA1-Digest: FVKit2bZgo1phiF19asKdVTB9fk=
+
+Name: org/apache/lucene/search/SortComparator$1.class
+SHA1-Digest: rYwXG0gJVO38O1ZTacUSfHbTjJ0=
+
+Name: org/apache/lucene/search/FieldCacheImpl$ShortCache.class
+SHA1-Digest: CSXWY6/1s+0qw9UDvnfnLWdGz5I=
+
+Name: org/apache/lucene/search/function/ByteFieldSource$1.class
+SHA1-Digest: 6I6u3knG6H7NeAX1zD5Vaj9tEtU=
+
+Name: org/apache/lucene/analysis/tokenattributes/TermAttributeImpl.cla
+ ss
+SHA1-Digest: xtz+8tz7DZZ4ht+O/dYOpWlGaUk=
+
+Name: org/apache/lucene/search/TermRangeFilter.class
+SHA1-Digest: wUk85Rc6Ak8lRrl+rSrHwKZlevc=
+
+Name: org/apache/lucene/search/NumericRangeQuery$NumericRangeTermEnum.
+ class
+SHA1-Digest: gu5OJB+0mMxIf02H/oY/RF8Dn94=
+
+Name: org/apache/lucene/store/SingleInstanceLockFactory.class
+SHA1-Digest: rlVcikfh1PSrjfY8gr4S7vE7s5E=
+
+Name: org/apache/lucene/index/TermsHashPerField.class
+SHA1-Digest: b3AmWfRJXRB3cMTKVphg8AeLJcE=
+
+Name: org/apache/lucene/search/ConstantScoreQuery$ConstantScorer.class
+SHA1-Digest: 4Xhvaa99OKK7aq6wT7QP8DQJ4sM=
+
+Name: org/apache/lucene/analysis/MappingCharFilter.class
+SHA1-Digest: 3Oh5XyDWkuU5sEz+gAaJ5CGG5HA=
+
+Name: org/apache/lucene/search/MatchAllDocsQuery.class
+SHA1-Digest: RfEXapa10Q0fpPPyyi7Imot1NjU=
+
+Name: org/apache/lucene/util/OpenBitSetIterator.class
+SHA1-Digest: Tx2D5OwXf/06Yt+UaFpi635qdr4=
+
+Name: org/apache/lucene/search/FieldCache$3.class
+SHA1-Digest: ViambF8fQyGyViMKOM1FjOLch7A=
+
+Name: org/apache/lucene/store/Directory.class
+SHA1-Digest: VTrgqMhO/42DWYGxkM8bXvr0OYo=
+
+Name: org/apache/lucene/search/TopFieldDocCollector.class
+SHA1-Digest: 7rb/7s7zrpmWTt1xJdKHrsgoNys=
+
+Name: org/apache/lucene/search/FieldComparator$DocComparator.class
+SHA1-Digest: 3Dq/f5HtySUIUpgJ/8zJLynrv8g=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$2.class
+SHA1-Digest: eiRy4oQNuMqiCb0ocCifqCEAfUI=
+
+Name: org/apache/lucene/index/DocFieldProcessorPerThread.class
+SHA1-Digest: j5QBNcsZ8H6WoqxJQw+0TDyhfLQ=
+
+Name: org/apache/lucene/index/SegmentInfo.class
+SHA1-Digest: yyNcIRdB7/hgmsJbQLEOKJ/VrFo=
+
+Name: org/apache/lucene/index/SegmentReader$FieldsReaderLocal.class
+SHA1-Digest: 5X4hqLWlfMwVG16oLvaRLsb40Q8=
+
+Name: org/apache/lucene/util/MapOfSets.class
+SHA1-Digest: 7o5iFlkvvpYA6IJQ3HXl9abXF24=
+
+Name: org/apache/lucene/search/TermRangeTermEnum.class
+SHA1-Digest: QWbwypbCrpHVuP6IdyORpYb/t1Y=
+
+Name: org/apache/lucene/search/FieldCacheImpl$ByteCache.class
+SHA1-Digest: NOSaO2//aQ5lLP8ypT5OcTNcwKQ=
+
+Name: org/apache/lucene/analysis/tokenattributes/FlagsAttributeImpl.cl
+ ass
+SHA1-Digest: dhk+Af/6eS/Vttw6CE78f4NEPGE=
+
+Name: org/apache/lucene/search/HitIterator.class
+SHA1-Digest: BkIn+GspL+1Q5eky8hJeYq1uVKA=
+
+Name: org/apache/lucene/search/ExtendedFieldCache.class
+SHA1-Digest: +ytIihTwDDCRfOqyXkRrZEkm98A=
+
+Name: org/apache/lucene/index/SegmentInfos$FindSegmentsFile.class
+SHA1-Digest: DuA7qM7ihC+K4p3hy1wGUYfkyg0=
+
+Name: org/apache/lucene/index/FieldInfo.class
+SHA1-Digest: qOYDDdk96TOP+XaHC1uVL65Tx0g=
+
+Name: org/apache/lucene/analysis/CharReader.class
+SHA1-Digest: FfxYWGf9FoxnqoKRwSRC1d4qMlg=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$2$1.class
+SHA1-Digest: NYEbIfxlHUT606+i8gsazzFnoq4=
+
+Name: org/apache/lucene/search/BooleanScorer.class
+SHA1-Digest: RVoSP0Czw3VHCKu3cNzVsL4jDo8=
+
+Name: org/apache/lucene/index/IndexCommitPoint.class
+SHA1-Digest: IyCX56xmu4UhjEsQ+mYLY8cuzj8=
+
+Name: org/apache/lucene/search/MultiTermQuery$RewriteMethod.class
+SHA1-Digest: aK67uWAddBxToEf9hc+x9ePEkJo=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$6$1.class
+SHA1-Digest: QmIXGkMqkKTtfensA9oWdzfmC0w=
+
+Name: org/apache/lucene/store/NIOFSDirectory$NIOFSIndexInput.class
+SHA1-Digest: 2Cr7MruRBGZu52kPO1UV4eixxJQ=
+
+Name: org/apache/lucene/index/TermVectorsTermsWriter.class
+SHA1-Digest: /PN0eMDap69lVv2uM3075+aHt5U=
+
+Name: org/apache/lucene/search/FieldComparator$DoubleComparator.class
+SHA1-Digest: UMfA/JzwMwjJWG4OrEq7YF96Mio=
+
+Name: org/apache/lucene/search/FilterManager$FilterCleaner$1.class
+SHA1-Digest: SKImf/c3WpbyeJ5XWyt3vm9ffyk=
+
+Name: org/apache/lucene/index/SegmentTermEnum.class
+SHA1-Digest: MQSEzgv8bYloCpUTVx8lQmbnKhI=
+
+Name: org/apache/lucene/index/SegmentTermVector.class
+SHA1-Digest: eRCJjKIdINnTpRMABNRE0GErZnU=
+
+Name: org/apache/lucene/search/Scorer.class
+SHA1-Digest: dfPBlK2O22EozriTCZDiPDcjjQw=
+
+Name: org/apache/lucene/search/BooleanScorer$BooleanScorerCollector.cl
+ ass
+SHA1-Digest: WCD6VHQOHLGma62YHx+sM27dm+4=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$1.class
+SHA1-Digest: jC5jUNzkjdddFW/kxPCpi5TZ+Vg=
+
+Name: org/apache/lucene/index/DocFieldProcessorPerThread$PerDoc.class
+SHA1-Digest: kWX7nrEQRZQUC/ExhMQmOLBwfdo=
+
+Name: org/apache/lucene/util/cache/SimpleMapCache$SynchronizedSimpleMa
+ pCache.class
+SHA1-Digest: tTiZMjdUjjTyejmLrquJOFKojTg=
+
+Name: org/apache/lucene/index/IndexCommit.class
+SHA1-Digest: 37Y6YdzFR4aplt8lAysMSHENidU=
+
+Name: org/apache/lucene/analysis/TokenFilter.class
+SHA1-Digest: 4FVy/9pIcbFqKhv0bLFrXtNAKck=
+
+Name: org/apache/lucene/analysis/CharacterCache.class
+SHA1-Digest: 5NxEeAKU98EWJmPaT6CcMrtuetM=
+
+Name: org/apache/lucene/analysis/tokenattributes/TermAttribute.class
+SHA1-Digest: bnsZqTeCMrLinUTUAW2TF1hDRlU=
+
+Name: org/apache/lucene/search/TimeLimitingCollector$1.class
+SHA1-Digest: OTd6592QDtVOB1GZQBf/BTDFkJA=
+
+Name: org/apache/lucene/search/FieldCacheImpl$Cache.class
+SHA1-Digest: UDYen/847iBn/1Eq8Uo7oG7wM5I=
+
+Name: org/apache/lucene/store/NoLockFactory.class
+SHA1-Digest: 02/Zw0DKIgEN5KpnNtQI52oXQr4=
+
+Name: org/apache/lucene/search/function/ReverseOrdFieldSource$1.class
+SHA1-Digest: 6vM+dDg33ZbVyBnpmUVPF40/NDs=
+
+Name: org/apache/lucene/search/WildcardQuery.class
+SHA1-Digest: nD9bL9t+Yr8ZR+KNeuD0B1Xb76k=
+
+Name: org/apache/lucene/util/cache/Cache.class
+SHA1-Digest: TOIRZxt5qhZH9VHxNyd+eX3iEkk=
+
+Name: about.html
+SHA1-Digest: GwK0vDvqOaXjK8MPJXjQ8rkuhTQ=
+
+Name: org/apache/lucene/queryParser/QueryParser.class
+SHA1-Digest: YNJZrJVlQZHwjea8DofEmkGHNtE=
+
+Name: org/apache/lucene/util/UnicodeUtil$UTF8Result.class
+SHA1-Digest: fRRAbTaplprTWNR1FNc2NIQes0k=
+
+Name: org/apache/lucene/util/FieldCacheSanityChecker.class
+SHA1-Digest: /vlkp3cJsAauvVnP+HDv5nAT4sE=
+
+Name: org/apache/lucene/search/spans/NearSpansUnordered.class
+SHA1-Digest: 2S9mTKF5hE3goxwsq3O/ccRCWUw=
+
+Name: org/apache/lucene/index/IndexReader$FieldOption.class
+SHA1-Digest: JoofrjBDaJOOwqxcX9GHsymsX74=
+
+Name: org/apache/lucene/search/FieldCache$11.class
+SHA1-Digest: PFJJs53TClwn7E8ag56inxytlgE=
+
+Name: org/apache/lucene/search/FieldCache$8.class
+SHA1-Digest: bbXJ0HqQ+nGkuMP81h9P96GffLI=
+
+Name: org/apache/lucene/search/FieldComparator$ShortComparator.class
+SHA1-Digest: pM8hNAgdusHRGp7i2feGuaj5oBk=
+
+Name: org/apache/lucene/document/DateField.class
+SHA1-Digest: MRK+8357yEPkd5F47XYUPD31gGM=
+
+Name: org/apache/lucene/search/function/ValueSourceQuery$1.class
+SHA1-Digest: yi+M3NJxXSCVlBv9nxZFXPWnn3U=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$7.class
+SHA1-Digest: wJIIQiXrDOyp+2Me8nYFy382I6E=
+
+Name: org/apache/lucene/index/NormsWriterPerThread.class
+SHA1-Digest: fJoI83YtAIiSbiZhlXBnFZ7RuCs=
+
+Name: org/apache/lucene/search/MultiTermQuery.class
+SHA1-Digest: 7Iy5Mf7v/CPkfFaiSSCau6vViLw=
+
+Name: org/apache/lucene/search/FieldCache$ByteParser.class
+SHA1-Digest: NrdMGYjzEdde+Wl+8LhCx5a7Tv8=
+
+Name: org/apache/lucene/search/ConstantScoreQuery$ConstantWeight.class
+SHA1-Digest: IZYwyCZln3mKxkRty70PvSG9zYE=
+
+Name: org/apache/lucene/search/ParallelMultiSearcher.class
+SHA1-Digest: W3IG3bYgeV1y8ptpjP+8z2UB+/w=
+
+Name: org/apache/lucene/util/AverageGuessMemoryModel.class
+SHA1-Digest: UeowZ4qflUCk/Z82UUkGihkRHMQ=
+
+Name: org/apache/lucene/store/FileSwitchDirectory.class
+SHA1-Digest: w7v21s4N7thVA8nXkJXAnTq93EI=
+
+Name: org/apache/lucene/util/NumericUtils.class
+SHA1-Digest: VjE+bb67JhAR9BAX9M86kTfmeTo=
+
+Name: org/apache/lucene/search/TopDocCollector.class
+SHA1-Digest: TfX050BFavXAiotNgImbjJZ0Xhg=
+
+Name: org/apache/lucene/index/ParallelReader$ParallelTermEnum.class
+SHA1-Digest: Bk/uNbIFUa3auUeGSx64lcnoPKs=
+
+Name: org/apache/lucene/search/FieldCache$CacheEntry.class
+SHA1-Digest: TnGdMAcMEFYfAvHirKWXqnwMfkc=
+
+Name: org/apache/lucene/analysis/Token.class
+SHA1-Digest: f/kGXqmR9xlDSSwF6b3HKAXqML8=
+
+Name: org/apache/lucene/search/BooleanQuery$1.class
+SHA1-Digest: KnxB77fdmw8Qro/s+dNpEbBaxmE=
+
+Name: org/apache/lucene/index/SegmentReader$Norm.class
+SHA1-Digest: tmyKCV6a8YtR+TfCeJ+4LOqRRok=
+
+Name: org/apache/lucene/index/Term.class
+SHA1-Digest: lWT5KTNodaEeJmv1BSUQIsMJ/II=
+
+Name: org/apache/lucene/store/SimpleFSDirectory$SimpleFSIndexInput$Des
+ criptor.class
+SHA1-Digest: V1gV5Y/FYx06xBY0rBewAdWbCSY=
+
+Name: org/apache/lucene/search/FieldComparator$ByteComparator.class
+SHA1-Digest: ZR5g+PQwD6lUYR61V/Ew7EBoylY=
+
+Name: org/apache/lucene/index/LogDocMergePolicy.class
+SHA1-Digest: +IX4wdshMTpRKOHuerQqcdpVs04=
+
+Name: org/apache/lucene/search/FieldCache$IntParser.class
+SHA1-Digest: CXIB62dOSRU2819uNLzY1SZXuNk=
+
+Name: org/apache/lucene/index/DocumentsWriter$IndexingChain.class
+SHA1-Digest: 5f9yfshJrul3p50g+gBXxUedjk0=
+
+Name: org/apache/lucene/analysis/ASCIIFoldingFilter.class
+SHA1-Digest: 7BYFpJVtDcK0CLaJtmK3DdTLd1o=
+
+Name: org/apache/lucene/search/FieldCacheImpl$StringCache.class
+SHA1-Digest: vpR11TrRQVbeBpiXro+v/4pv3LM=
+
+Name: org/apache/lucene/index/TermVectorsTermsWriter$PostingList.class
+SHA1-Digest: frItS2cmIyA0vazMYHFwnbVqyV0=
+
+Name: org/apache/lucene/queryParser/QueryParserConstants.class
+SHA1-Digest: IxWIZpRVRM/7x3FfEyER3zA+j2Q=
+
+Name: org/apache/lucene/search/SloppyPhraseScorer.class
+SHA1-Digest: XcmmIf3zP3TggYHFGrTwdWXKI7g=
+
+Name: org/apache/lucene/index/ConcurrentMergeScheduler.class
+SHA1-Digest: BvimNTbfGbj+5ucOgIWwnTjJ0co=
+
+Name: org/apache/lucene/util/ScorerDocQueue.class
+SHA1-Digest: n6nndvJo0SKQBAci690UrGPAn5o=
+
+Name: org/apache/lucene/search/FieldCache$ShortParser.class
+SHA1-Digest: iPbyEsyVVMJzM5FN1uVSlfdsZv8=
+
+Name: org/apache/lucene/document/DateTools.class
+SHA1-Digest: cSu+jAxfTRszaDM1VU1LV1Ba8Zo=
+
+Name: org/apache/lucene/index/TermsHashConsumerPerThread.class
+SHA1-Digest: 1ksopnNvdQeEIGzUDfXpvps4vV8=
+
+Name: org/apache/lucene/search/MatchAllDocsQuery$MatchAllDocsWeight.cl
+ ass
+SHA1-Digest: Dlb7AeJ9dpoNYL0pTp88/R9kQ0c=
+
+Name: org/apache/lucene/analysis/TeeSinkTokenFilter$1.class
+SHA1-Digest: 0Zjou0zm55q+ohnRdVHay1ZGakE=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$6.class
+SHA1-Digest: 1INI20nhyFELUD0K7Lf/pI+wn+o=
+
+Name: org/apache/lucene/search/TopScoreDocCollector$InOrderTopScoreDoc
+ Collector.class
+SHA1-Digest: 7PZODNIsknhN2bZtT6lcOiMl1fc=
+
+Name: org/apache/lucene/util/BitVector.class
+SHA1-Digest: lCe38XgE5YYTDY9SHeDLr+G4mIY=
+
+Name: org/apache/lucene/search/payloads/PayloadSpanUtil.class
+SHA1-Digest: XOmDJVVcChN+6vCqF0MRESCQNhQ=
+
+Name: org/apache/lucene/index/FieldsWriter.class
+SHA1-Digest: +3QoWPjOxlSUrO2Kju4a6NWPuMA=
+
+Name: org/apache/lucene/search/Similarity$4.class
+SHA1-Digest: wYytHximLepHxMgh1TLMYmt3Nzo=
+
+Name: org/apache/lucene/search/TopFieldCollector$OutOfOrderOneComparat
+ orNonScoringCollector.class
+SHA1-Digest: Eo+NxNixwFHXkQ7+swWtoBcaBrw=
+
+Name: org/apache/lucene/search/PrefixQuery.class
+SHA1-Digest: y52nBKcjVE7Mkk+FwNMJh2/EUBQ=
+
+Name: org/apache/lucene/search/NumericRangeQuery$NumericRangeTermEnum$
+ 1.class
+SHA1-Digest: H61/3CxhOfh90ss1Pkr1R/FexuI=
+
+Name: org/apache/lucene/analysis/PorterStemmer.class
+SHA1-Digest: bAqUO+//9EfVqug/ePlN31jFrnE=
+
+Name: org/apache/lucene/search/Weight.class
+SHA1-Digest: i0XlVk5b4AabUHfONQPYxpGqcTI=
+
+Name: org/apache/lucene/index/IntBlockPool.class
+SHA1-Digest: YyZFhVOqa4uTJQZ4fUhOeRSb24o=
+
+Name: org/apache/lucene/index/SegmentReader$CoreReaders.class
+SHA1-Digest: o9wqtBvWuIf24UGbbSN3X0wy3xQ=
+
+Name: org/apache/lucene/search/TopFieldDocs.class
+SHA1-Digest: gcU/uHhb05ZPT8ufiuZ7AEGW/0k=
+
+Name: org/apache/lucene/util/AttributeSource$AttributeFactory.class
+SHA1-Digest: qw/YCDy5kJave/w0DTQ5BrXvkaE=
+
+Name: org/apache/lucene/search/function/DocValues.class
+SHA1-Digest: aXD1EzRdVcRW7HasgZKxMNW5Wa4=
+
+Name: org/apache/lucene/index/NormsWriterPerField.class
+SHA1-Digest: i9AWz8peT7VnQoJfyrr2Q+UjbX4=
+
+Name: org/apache/lucene/index/TermsHashConsumerPerField.class
+SHA1-Digest: 5+r2sdv736UC3k1u7afR/+wCenA=
+
+Name: org/apache/lucene/search/TopFieldCollector$OutOfOrderOneComparat
+ orScoringNoMaxScoreCollector.class
+SHA1-Digest: zuPfvpFpoWLTf9CUcFOYTYvYszA=
+
+Name: org/apache/lucene/index/BufferedDeletes$Num.class
+SHA1-Digest: XC6JReH+4ESxmP6fdkfFkFMciW8=
+
+Name: org/apache/lucene/util/ScorerDocQueue$HeapedScorerDoc.class
+SHA1-Digest: KiksksWaYCe6iQohgOp/XMwRqlc=
+
+Name: org/apache/lucene/search/ComplexExplanation.class
+SHA1-Digest: VJC2SNmdy0VA4v5x5eeKCqm3aOY=
+
+Name: org/apache/lucene/index/ReadOnlyDirectoryReader.class
+SHA1-Digest: buZRt74PFpxYWYix7A9tt1Ncpeo=
+
+Name: org/apache/lucene/store/LockObtainFailedException.class
+SHA1-Digest: a3ihgQ6J3iGcDWtmg/eMEj3lNig=
+
+Name: org/apache/lucene/index/CharBlockPool.class
+SHA1-Digest: dN3FVp+GB+AOF+kwteNzTvb4d5A=
+
+Name: org/apache/lucene/search/PhrasePositions.class
+SHA1-Digest: MCxYxp8GUu/82CWAyLY5L1iuwvo=
+
+Name: org/apache/lucene/index/SegmentReader.class
+SHA1-Digest: kDptZz151kr5bOGL4PYhspBMX+c=
+
+Name: org/apache/lucene/search/Searcher.class
+SHA1-Digest: VkWSMuHOYaYVRRw01+hUC8PepnA=
+
+Name: org/apache/lucene/index/MergePolicy$MergeException.class
+SHA1-Digest: /eqf7b1txf+dlGd+TLl8urKJmgk=
+
+Name: org/apache/lucene/search/FieldCacheImpl$DoubleCache.class
+SHA1-Digest: vTlD+302mVjf+fPUCSEQF8s1TcE=
+
+Name: org/apache/lucene/util/AttributeImpl.class
+SHA1-Digest: gBd2ND9MUnGeThxUr6zcXB3nACs=
+
+Name: org/apache/lucene/util/RamUsageEstimator.class
+SHA1-Digest: TyuQkIAcaYUF0fiD9uXzApRy4iE=
+
+Name: org/apache/lucene/index/StaleReaderException.class
+SHA1-Digest: GznFFuZyGYGIQjnfhevjrmTyruA=
+
+Name: org/apache/lucene/index/MultiReader.class
+SHA1-Digest: xliUOa4jgHsiRNXpJftvLpHYWQM=
+
+Name: org/apache/lucene/search/ConstantScoreQuery.class
+SHA1-Digest: 7iA3xZVBXq9DZ/Ufd55Zc/6cvp4=
+
+Name: org/apache/lucene/search/SortField.class
+SHA1-Digest: 4bQe/PneNnE4AvGMrMgPBbM/5aY=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$FieldCacheDocIdSe
+ t$2.class
+SHA1-Digest: 1ATnQxa1NRJSF6Y7sEbHBWIOXFI=
+
+Name: org/apache/lucene/index/ByteBlockPool.class
+SHA1-Digest: hlyhp0ElMq3CvPttiY2vVadElCc=
+
+Name: org/apache/lucene/search/MultiTermQuery$ScoringBooleanQueryRewri
+ te.class
+SHA1-Digest: ojT/CvtsUEWPtOfgMU5dcfTEve0=
+
+Name: org/apache/lucene/util/ToStringUtils.class
+SHA1-Digest: puL7RlFWPFQ1pCmYnPleRX5f6Iw=
+
+Name: org/apache/lucene/store/BufferedIndexOutput.class
+SHA1-Digest: wX+mVzc4y5POw2cUqzESe96KJuo=
+
+Name: org/apache/lucene/search/FieldValueHitQueue$OneComparatorFieldVa
+ lueHitQueue.class
+SHA1-Digest: t1Ygkb5tsjdxaQAR1zILICTuXk0=
+
+Name: org/apache/lucene/util/Parameter.class
+SHA1-Digest: pU7pRxPS51V6P4nb+ao19uYNhJ0=
+
+Name: org/apache/lucene/search/spans/Spans.class
+SHA1-Digest: JyYbwMB3kWCsw3VPrS5vZqzrts8=
+
+Name: org/apache/lucene/search/Similarity.class
+SHA1-Digest: 1j+trFEXW5X7zj4tlBkANXZ2dTA=
+
+Name: org/apache/lucene/index/IndexWriter$IndexReaderWarmer.class
+SHA1-Digest: VktjXTwm7qIysCtxpojD76/1kTs=
+
+Name: org/apache/lucene/search/DefaultSimilarity.class
+SHA1-Digest: awTuyRK6vnk/5As/mxIF6c3AyXw=
+
+Name: org/apache/lucene/search/FieldCache.class
+SHA1-Digest: 3Za8uEEVzA8kPpYd2j5WPUvrMbs=
+
+Name: org/apache/lucene/store/SimpleFSDirectory$SimpleFSIndexOutput.cl
+ ass
+SHA1-Digest: DTa8Rk9fp//9VtA7FIhSHLaLvok=
+
+Name: org/apache/lucene/index/DefaultSkipListWriter.class
+SHA1-Digest: yNwIKvzsxaJ1h8mtQCkS3FQKovI=
+
+Name: org/apache/lucene/index/TermBuffer.class
+SHA1-Digest: cX/sLcMiNxEUMUHR2TIf5u1tw34=
+
+Name: org/apache/lucene/search/FieldComparator$IntComparator.class
+SHA1-Digest: ixlIvcXRyN9mklWuK/m982tQgJw=
+
+Name: org/apache/lucene/index/TermEnum.class
+SHA1-Digest: PWslx726TRtzfG5tAS/qjmw1m20=
+
+Name: org/apache/lucene/index/TermsHash.class
+SHA1-Digest: l3QElCFJISnWor2vrRA8oJwJIac=
+
+Name: org/apache/lucene/index/MultiLevelSkipListReader$SkipBuffer.clas
+ s
+SHA1-Digest: 6OQ7ETcIRDEa+Al0Bi+xhRLVOvI=
+
+Name: org/apache/lucene/analysis/CharTokenizer.class
+SHA1-Digest: Z72FsDpatfLSliVnqejhPh28sDA=
+
+Name: org/apache/lucene/search/FieldCache$2.class
+SHA1-Digest: k4QWV4tVMwDUtX881WJ1ZyHPRJE=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$1.class
+SHA1-Digest: d4b2nLm9QozdPDhX1el3EXql5pI=
+
+Name: org/apache/lucene/util/FieldCacheSanityChecker$Insanity.class
+SHA1-Digest: rDUC1a2o67drJonJExGMByMSsgg=
+
+Name: org/apache/lucene/store/SimpleFSLock.class
+SHA1-Digest: 48CNg9s9on4bp/+TF2pHV+lNKdc=
+
+Name: org/apache/lucene/search/SimilarityDelegator.class
+SHA1-Digest: Q92NISKZp0ZHmiaWSmZkGQTLaL8=
+
+Name: org/apache/lucene/index/FieldsReader.class
+SHA1-Digest: v2WW4lHOZl09M0ib16cq4i5q45g=
+
+Name: org/apache/lucene/search/spans/SpanOrQuery$1.class
+SHA1-Digest: 4HlLRkb+CLBu3Da0ChkVBP/o7oY=
+
+Name: org/apache/lucene/search/FieldValueHitQueue$1.class
+SHA1-Digest: ReAKB3mQgZTqm8VqEOmrtbg2EJc=
+
+Name: org/apache/lucene/search/TimeLimitingCollector$TimerThread.class
+SHA1-Digest: m34Djg1XSgG0t3cX070Rzk1pDwQ=
+
+Name: org/apache/lucene/search/ScoreDoc.class
+SHA1-Digest: xeUn/D7fsMqHuuiJQHh20ttlPbE=
+
+Name: org/apache/lucene/store/MMapDirectory.class
+SHA1-Digest: lBi7pxqpjWO3awMgguu8PXBcNvY=
+
+Name: org/apache/lucene/store/Lock$With.class
+SHA1-Digest: OSWDEQaHMsspQmBhFmgNpOiXBQI=
+
+Name: org/apache/lucene/search/ScoreDocComparator$2.class
+SHA1-Digest: CjVc4xpH6eMeM0jUkT9D/zIW7zg=
+
+Name: org/apache/lucene/index/FilterIndexReader$FilterTermDocs.class
+SHA1-Digest: BljNC0AZrvt/KHomdkmKbarCUUo=
+
+Name: org/apache/lucene/util/SorterTemplate.class
+SHA1-Digest: piJzx64iBcjtKRd7LLwYU353Bmc=
+
+Name: org/apache/lucene/store/FSDirectory.class
+SHA1-Digest: 60yClJ3rRW3bigaC5VggXTQKbWg=
+
+Name: org/apache/lucene/queryParser/QueryParserTokenManager.class
+SHA1-Digest: bBveVoVjSeH5upTVZBQux3R8lGw=
+
+Name: org/apache/lucene/index/IndexDeletionPolicy.class
+SHA1-Digest: 0j8umXQ3mGZnVKHLhI3GLGTdnHc=
+
+Name: org/apache/lucene/search/function/ShortFieldSource.class
+SHA1-Digest: ztb6e6mM0aQiS2v6gv2jr33QV8k=
+
+Name: org/apache/lucene/search/TopDocs.class
+SHA1-Digest: VjnlvZEuAe2mUMEL8Q4B/sCOK6g=
+
+Name: org/apache/lucene/util/AttributeSource.class
+SHA1-Digest: 8HCHJBagsyW/wKGpsv19lA8Dkec=
+
+Name: org/apache/lucene/index/InvertedDocConsumerPerThread.class
+SHA1-Digest: WcVYEnx8XyiQqJc4a5TlTaSaS0k=
+
+Name: org/apache/lucene/analysis/StopAnalyzer.class
+SHA1-Digest: qMBKegvGcx5bZ3iTZedd816TO3Q=
+
+Name: org/apache/lucene/store/FSDirectory$1.class
+SHA1-Digest: T+wYcMFOlx5TlpSXjETLj0Wt03U=
+
+Name: org/apache/lucene/index/SegmentMerger$3.class
+SHA1-Digest: gp1SXi1H+l6DRhx9/a6/bOyczGU=
+
+Name: org/apache/lucene/search/TopFieldCollector$OutOfOrderMultiCompar
+ atorScoringNoMaxScoreCollector.class
+SHA1-Digest: mKMAA20p4sEVDtVCNQ6KQEqGewg=
+
+Name: org/apache/lucene/index/DirectoryReader$2.class
+SHA1-Digest: MgyXvQw5QbgkgBHA4jQFXbCoD40=
+
+Name: org/apache/lucene/search/payloads/PayloadFunction.class
+SHA1-Digest: ZJmlrdFsrvnPuO9mWZoZsMwh+IU=
+
+Name: org/apache/lucene/index/IndexWriter$MaxFieldLength.class
+SHA1-Digest: CXPmeapbXg0JZ9NWUSipIZSKjQk=
+
+Name: about_files/LUCENE-NOTICE.txt
+SHA1-Digest: E3YznOp1ECpwzjYiqu+zPJZoG1E=
+
+Name: org/apache/lucene/search/HitDoc.class
+SHA1-Digest: UVFs+i+Evk5fUuK3UHFUUVW5zoc=
+
+Name: org/apache/lucene/analysis/LetterTokenizer.class
+SHA1-Digest: c+h9inRDE4rfygPaXXCNSs5jmy4=
+
+Name: org/apache/lucene/store/NativeFSLockFactory.class
+SHA1-Digest: ltZ/YQcNYCUUeWEkm+7glgkwsXg=
+
+Name: org/apache/lucene/analysis/TokenWrapper.class
+SHA1-Digest: 0UtkEiCsSBvwLwTLs33WVmet9UI=
+
+Name: org/apache/lucene/search/DisjunctionMaxQuery.class
+SHA1-Digest: AcArSjPgV8aChrpf89NooeKcd7E=
+
+Name: org/apache/lucene/index/SegmentTermPositionVector.class
+SHA1-Digest: gybluoLe4ERo1MxVv5sJkqrZ288=
+
+Name: org/apache/lucene/index/DocFieldConsumers$PerDoc.class
+SHA1-Digest: KlLSDD93oEyCng8nJBYcUKwNOdA=
+
+Name: org/apache/lucene/analysis/Tokenizer.class
+SHA1-Digest: /tlHeYgSZ5owq6UzdOLudOJG7G0=
+
+Name: org/apache/lucene/index/TermVectorsTermsWriterPerThread.class
+SHA1-Digest: IcUZyR9wD+cU8xPxPEEohYL9LOA=
+
+Name: org/apache/lucene/index/FormatPostingsTermsWriter.class
+SHA1-Digest: AM45NdU1pneOrNspTYtNGq60YhE=
+
+Name: org/apache/lucene/index/DirectoryReader$ReaderCommit.class
+SHA1-Digest: 2scM8ITOos7586UR2g53yRkg1do=
+
+Name: org/apache/lucene/search/Hit.class
+SHA1-Digest: 2TSH811DuctiGWIGbioykLSoTwY=
+
+Name: org/apache/lucene/index/MergeDocIDRemapper.class
+SHA1-Digest: BfQvCj6uPK9BNj5Yjj+XUzbuBhU=
+
+Name: org/apache/lucene/index/DocFieldConsumersPerField.class
+SHA1-Digest: aoTDhLPb1MS7FwUBJf92tIYV2eU=
+
+Name: org/apache/lucene/search/FilterManager.class
+SHA1-Digest: Vm49ya9+LwjT4oKberoI8oBURyc=
+
+Name: org/apache/lucene/search/FieldCacheImpl$CustomCache.class
+SHA1-Digest: 8K0A/Jn0y4GR20NvGqOO2OYLyS4=
+
+Name: org/apache/lucene/search/FieldCacheImpl$AutoCache.class
+SHA1-Digest: lwo0OuoSPaVe/7W1iHFuOA15CqQ=
+
+Name: org/apache/lucene/store/SimpleFSDirectory.class
+SHA1-Digest: 7Nr9X/kkScyEWGoxVxQc1agkhxk=
+
+Name: org/apache/lucene/index/ByteSliceWriter.class
+SHA1-Digest: hkobQ/11lWmf0uSTk0Yz20KZkB8=
+
+Name: org/apache/lucene/util/SmallFloat.class
+SHA1-Digest: /7Cccwm+8EfFFYii+0w/EbEV8+M=
+
+Name: org/apache/lucene/search/FieldCache$10.class
+SHA1-Digest: 5o6Pbf0MASfIABtKLP5UtuF6PIs=
+
+Name: org/apache/lucene/search/FieldCache$7.class
+SHA1-Digest: d6PaiqWG9DKZ0Xhn4EsobefarVY=
+
+Name: org/apache/lucene/index/DefaultSkipListReader.class
+SHA1-Digest: mi5rmrP6N6GubgOECxCJmyTJO7o=
+
+Name: org/apache/lucene/search/PrefixTermEnum.class
+SHA1-Digest: 69AsrQ0Kx0tTnEFJQn+cM501C1E=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$6.class
+SHA1-Digest: aDsYxILJE/FTgaafMw+gDwmYK8I=
+
+Name: org/apache/lucene/search/BooleanClause$Occur.class
+SHA1-Digest: KSQCGmD4bc/nHiH5lEWQ74Qpzk8=
+
+Name: org/apache/lucene/search/TimeLimitedCollector.class
+SHA1-Digest: 999JGTLNjfueCiXV5GeXePerefM=
+
+Name: org/apache/lucene/index/SegmentWriteState.class
+SHA1-Digest: BS31LKmYuI2N2uauQGrnB3H8MFw=
+
+Name: org/apache/lucene/analysis/CharStream.class
+SHA1-Digest: hB38UAM+HNY3w6+UHi+lJVWcDA8=
+
+Name: org/apache/lucene/queryParser/CharStream.class
+SHA1-Digest: lz7SB3wtE0rAVwTZ9Tcl9YSarlA=
+
+Name: org/apache/lucene/queryParser/QueryParser$1.class
+SHA1-Digest: jEBkXmXluLYTqApsLdanR/jeZ9M=
+
+Name: org/apache/lucene/document/Field$TermVector.class
+SHA1-Digest: 29JeI4ExweLtnhZcx7f0buzz968=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$1$1.class
+SHA1-Digest: a8Majz3RQeDiDiIf4QdkV3jvhOE=
+
+Name: org/apache/lucene/index/MergeScheduler.class
+SHA1-Digest: bQyK/AhyQ+WzfsuSPZKNHk9Q0SQ=
+
+Name: org/apache/lucene/index/DocConsumer.class
+SHA1-Digest: O+oVWqrlL0DCh2C8jEfVIJ2HXuk=
+
+Name: org/apache/lucene/index/LogMergePolicy.class
+SHA1-Digest: QSv4IYtUrv6sBHqjxP5si2mCBfo=
+
+Name: org/apache/lucene/search/FieldComparatorSource.class
+SHA1-Digest: ucz3lg57jH7sB8yD1s+Ahc5lyrQ=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$5$1.class
+SHA1-Digest: uH4HlM8KnTgsDabFoSyeaJurcZc=
+
+Name: org/apache/lucene/search/spans/SpanTermQuery.class
+SHA1-Digest: 5cRdgca/6iuzlfUCsW4EXlV0zVM=
+
+Name: org/apache/lucene/search/FilterManager$FilterCleaner.class
+SHA1-Digest: 3p3Sw4J69pfuDxyFgJTSDdAjVso=
+
+Name: org/apache/lucene/search/FieldComparator.class
+SHA1-Digest: YZQn2bUd2ZkJnlBVTuxfWG4i14s=
+
+Name: org/apache/lucene/index/FreqProxTermsWriterPerField.class
+SHA1-Digest: tvV9ZD/7HpNrZNn6dyaeA7iHLvQ=
+
+Name: org/apache/lucene/index/CompoundFileWriter$FileEntry.class
+SHA1-Digest: lYkX4i5tcYkpmA/ZS/CsWykixDM=
+
+Name: org/apache/lucene/search/QueryWrapperFilter$2.class
+SHA1-Digest: a8bOl8Y20CiuUecobSvjsLXN0n8=
+
+Name: org/apache/lucene/util/Version.class
+SHA1-Digest: cLPza1z69gWlJru5ku6uAK8zKtE=
+
+Name: org/apache/lucene/util/AverageGuessMemoryModel$1.class
+SHA1-Digest: X1kUzn3IaVQZ88ietYYr8I2YgIk=
+
+Name: org/apache/lucene/util/SimpleStringInterner$Entry.class
+SHA1-Digest: nS8VS/I3GkYKd9YGoAyfBvC3fD0=
+
+Name: org/apache/lucene/search/FieldCacheImpl$Entry.class
+SHA1-Digest: zH5yd0DkxIcdWe4QvbTMyA+9dmI=
+
+Name: org/apache/lucene/search/spans/SpanQuery.class
+SHA1-Digest: pSROJYgAfJoJu8HX25AIYdvyPFo=
+
+Name: org/apache/lucene/search/FieldCacheTermsFilter$FieldCacheTermsFi
+ lterDocIdSet.class
+SHA1-Digest: jreOQbg5jW8cfUGZydwkVo19uHI=
+
+Name: org/apache/lucene/index/FilterIndexReader.class
+SHA1-Digest: XRYdBzPBuhqugJVR5Wli6Zo4/UA=
+
+Name: org/apache/lucene/analysis/tokenattributes/PayloadAttribute.clas
+ s
+SHA1-Digest: xkgLRTcOp8Zfh6FJcLnxlpHXDzI=
+
+Name: org/apache/lucene/search/MultiSearcher$1.class
+SHA1-Digest: EWh2miHc5yJc/T2RNeK84eO9xmU=
+
+Name: org/apache/lucene/document/Field$Index.class
+SHA1-Digest: 5ZhEQnEFLB7KimfK6cgsIjWx7t4=
+
+Name: org/apache/lucene/search/FieldCache$Parser.class
+SHA1-Digest: 86GIz8OIHRvWduMv19k9D76u/UA=
+
+Name: org/apache/lucene/index/CheckIndex$Status$TermIndexStatus.class
+SHA1-Digest: hcal9yUFrL5NdkuhrzaJqSNLYGQ=
+
+Name: org/apache/lucene/index/FormatPostingsDocsConsumer.class
+SHA1-Digest: kdmxscCKx1kC/gSZz6seHWAJLAM=
+
+Name: org/apache/lucene/util/AttributeSource$State.class
+SHA1-Digest: yTSBAg1oTezYBzl6LK1/udpWa7o=
+
+Name: org/apache/lucene/search/function/ReverseOrdFieldSource.class
+SHA1-Digest: yM9oLnmhYlEKiuL4lX/uYIZwuqw=
+
+Name: org/apache/lucene/analysis/TokenStream$TokenWrapperAttributeFact
+ ory.class
+SHA1-Digest: E4Jn2wWrICxxrHcs05IUIktr3a8=
+
+Name: org/apache/lucene/store/RAMDirectory.class
+SHA1-Digest: RjOZjA4yNta6RqN4heQ3bYvOfxs=
+
+Name: org/apache/lucene/document/NumberTools.class
+SHA1-Digest: P7Zsxj9rxEKFYJ51gGRBwczDzak=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$5.class
+SHA1-Digest: OP89aXKnqio+gmsjFS8Zp7Pt5ko=
+
+Name: org/apache/lucene/search/PrefixFilter.class
+SHA1-Digest: EchwT/OFRgg7hBiojfbio/9FS1U=
+
+Name: org/apache/lucene/index/CheckIndex$Status$FieldNormStatus.class
+SHA1-Digest: +HS8rPyE0HFIZIJzXHWW+po2gyc=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter.class
+SHA1-Digest: ziLrsSXJSdC+LskXPuU2W13nw+w=
+
+Name: org/apache/lucene/index/SnapshotDeletionPolicy$MyCommitPoint.cla
+ ss
+SHA1-Digest: aUZZ8RqDGwNSZx9RZb8YiUIRl4g=
+
+Name: org/apache/lucene/search/Similarity$3.class
+SHA1-Digest: BLU6cToCH2LsNsuQWElBmsV0ExY=
+
+Name: org/apache/lucene/util/CloseableThreadLocal.class
+SHA1-Digest: 34M4UKg+VnFkHR3pXt/wYgL7rVA=
+
+Name: org/apache/lucene/search/function/ValueSource.class
+SHA1-Digest: dkkcunFrxf8nZL6iudgA45/Dx70=
+
+Name: org/apache/lucene/util/cache/SimpleLRUCache.class
+SHA1-Digest: i/HwlOiegRoECTtkwijiKIwsJIo=
+
+Name: org/apache/lucene/search/FieldComparator$StringOrdValComparator.
+ class
+SHA1-Digest: dGSpZga5EvrLiruHIxxBAjpm6fE=
+
+Name: org/apache/lucene/analysis/standard/StandardFilter.class
+SHA1-Digest: tm3xZruZBhf+6cFTzb5KFEVvdM0=
+
+Name: org/apache/lucene/index/CheckIndex$Status$TermVectorStatus.class
+SHA1-Digest: EcbVM+jsi6DOtoQzBqTjbaPyhX8=
+
+Name: org/apache/lucene/index/IndexReader$1.class
+SHA1-Digest: MPjvR+ne+zhMlgGaabakzEyuTXg=
+
+Name: org/apache/lucene/document/CompressionTools.class
+SHA1-Digest: LKD98xXfBqZmtirDuUFypEFIL90=
+
+Name: org/apache/lucene/store/RAMFile.class
+SHA1-Digest: rFttuBBFw5N78WfIHbLRMER4Jgc=
+
+Name: org/apache/lucene/store/MMapDirectory$MultiMMapIndexInput.class
+SHA1-Digest: QhgEydWhes9PDvhwUo1eyXQl/MQ=
+
+Name: org/apache/lucene/search/spans/SpanNotQuery.class
+SHA1-Digest: pNCfkazmz7S8V4VZCXmrj6HGJPU=
+
+Name: org/apache/lucene/index/DocumentsWriter.class
+SHA1-Digest: BhvGQdhgV0nGivMxhWbSpPScFsQ=
+
+Name: org/apache/lucene/search/spans/SpanFirstQuery.class
+SHA1-Digest: wJc9hFFY33vgEaWhpnyXb+51IV8=
+
+Name: org/apache/lucene/search/BooleanScorer$BucketTable.class
+SHA1-Digest: qOeuZmdUIEr8mWTkW5XNqnyaRW0=
+
+Name: org/apache/lucene/index/ByteSliceReader.class
+SHA1-Digest: wRKvBS/yG3EmUYdgVSHR51FHBHo=
+
+Name: org/apache/lucene/search/RangeQuery.class
+SHA1-Digest: GpygrDB2VBIhENQONVtLbhCXhN4=
+
+Name: org/apache/lucene/messages/Message.class
+SHA1-Digest: FoP1SoeelKS9AayTeDpSmB6qyEk=
+
+Name: org/apache/lucene/index/DocFieldProcessor.class
+SHA1-Digest: JAcgdMMucT9XqHr9K/Ts1eiXs/8=
+
+Name: org/apache/lucene/index/MergePolicy$OneMerge.class
+SHA1-Digest: 8TOYUkyXSikpa5WvoNlEiI+Crq8=
+
+Name: org/apache/lucene/queryParser/QueryParser$Operator.class
+SHA1-Digest: RwUsVy/B2YemeWG2TTiSv/nWvOg=
+
+Name: org/apache/lucene/index/FormatPostingsPositionsWriter.class
+SHA1-Digest: a9E9ZO6HQVPBFzZ4Y3XecpVjHM0=
+
+Name: org/apache/lucene/index/InvertedDocEndConsumer.class
+SHA1-Digest: RvLeRN8KBy6ViZj39IiWe+LQAvg=
+
+Name: org/apache/lucene/search/ParallelMultiSearcher$1.class
+SHA1-Digest: F5VNuT4MMm37QSpMcTZXLcNSpbs=
+
+Name: org/apache/lucene/index/FreqProxTermsWriterPerThread.class
+SHA1-Digest: y/MWit7PE8keBLsLvy4NdMlVcc0=
+
+Name: org/apache/lucene/util/Attribute.class
+SHA1-Digest: UX/nKw9ByWHPrw2fOQslFMcpQEE=
+
+Name: org/apache/lucene/store/MMapDirectory$1.class
+SHA1-Digest: Q3V5o6b1NaxNGpTekgC6gscCQZM=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$FieldCacheDocIdSe
+ t$1.class
+SHA1-Digest: 0K/37/4MP8FldHcU55kZkzsKPww=
+
+Name: org/apache/lucene/index/CompoundFileReader$FileEntry.class
+SHA1-Digest: Bfjfz+kXwNfQKEzK82ztRytzPbY=
+
+Name: org/apache/lucene/index/FieldsReader$LazyField.class
+SHA1-Digest: CeXFGbm/pn/CoEBYDgkcD+yBMhI=
+
+Name: org/apache/lucene/search/DisjunctionMaxScorer.class
+SHA1-Digest: 6N5UbZOnpfm6ArxUTU53/B7BJnk=
+
+Name: org/apache/lucene/index/ByteBlockPool$Allocator.class
+SHA1-Digest: C7Z6hMJO2uF3pZ2s7QD598EuGCY=
+
+Name: org/apache/lucene/analysis/TeeTokenFilter.class
+SHA1-Digest: OCUdJ3ccDb5OdOPwKVejK1XswXA=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
+
+Name: org/apache/lucene/util/cache/SimpleMapCache.class
+SHA1-Digest: ODiZkHFeF1nBKzdKenBgPoyRQVM=
+
+Name: org/apache/lucene/queryParser/ParseException.class
+SHA1-Digest: dtxSc6APDq9h769wjN9CID/uOMw=
+
+Name: org/apache/lucene/index/DirectoryReader$MultiTermEnum.class
+SHA1-Digest: fkhDPS90YKhz5nRYmrl8/o1gimk=
+
+Name: org/apache/lucene/search/MultiTermQuery$ConstantScoreAutoRewrite
+ .class
+SHA1-Digest: XOt6rYn/h2k01A2Ck9ZgZ0B/lDE=
+
+Name: org/apache/lucene/util/ArrayUtil.class
+SHA1-Digest: /K5d5RXL+i+m9qNDqSAq1grMX9U=
+
+Name: org/apache/lucene/search/FieldCache$1.class
+SHA1-Digest: /QTrT+h5GS357MldUdSBc6zhtBI=
+
+Name: org/apache/lucene/index/SegmentInfos.class
+SHA1-Digest: PparlxU/GRufM2opWj9Nku4H+ig=
+
+Name: org/apache/lucene/messages/NLSException.class
+SHA1-Digest: ggBRY8iwTV9QfGthWEVIfO38d6s=
+
+Name: org/apache/lucene/search/Filter.class
+SHA1-Digest: x8ZUpEL4BAZtiiV2imKn6Z0ycPA=
+
+Name: org/apache/lucene/search/PhraseScorer.class
+SHA1-Digest: uf7uk7zr5LwaVN9hbBpj1q3o08c=
+
+Name: org/apache/lucene/search/BooleanQuery.class
+SHA1-Digest: MbXmx+y5+PAUnVMw2UHCn7HeRcE=
+
+Name: org/apache/lucene/search/Searchable.class
+SHA1-Digest: bZr5aWUPv5vuLQUFOEJSLk4L1so=
+
+Name: org/apache/lucene/analysis/PerFieldAnalyzerWrapper.class
+SHA1-Digest: WCj3im4zyY0zpMQQSL2HnQE/L98=
+
+Name: org/apache/lucene/util/StringHelper.class
+SHA1-Digest: rlhvwvdLHf3Uh/XTS/FGc4fAtOw=
+
+Name: org/apache/lucene/search/TopFieldCollector$OutOfOrderOneComparat
+ orScoringMaxScoreCollector.class
+SHA1-Digest: Yl67PtFXlQklgFzl3140fEErE8w=
+
+Name: org/apache/lucene/search/MultiTermQuery$ConstantScoreFilterRewri
+ te.class
+SHA1-Digest: gNfoz/Ox/in3K6xK0/H5ixLb0CE=
+
+Name: org/apache/lucene/index/PositionBasedTermVectorMapper$TVPosition
+ Info.class
+SHA1-Digest: ritGIS0TbSxvt8bzdAN5VsOLg2g=
+
+Name: org/apache/lucene/index/CheckIndex$Status.class
+SHA1-Digest: ewAcEiDK9Um4dEV4EPFYAHZivbU=
+
+Name: org/apache/lucene/index/TermInfosWriter.class
+SHA1-Digest: 9I9H+HDdfCmHQxRofYTlI8aLDWQ=
+
+Name: org/apache/lucene/search/ScoreDocComparator$1.class
+SHA1-Digest: I9bkHCkKL/XSGkE0W2TO/K28qtE=
+
+Name: org/apache/lucene/index/DocFieldProcessorPerField.class
+SHA1-Digest: tvZEjaFBKGOIaBjyQToY5xvMRd0=
+
+Name: org/apache/lucene/search/TopFieldCollector$OneComparatorNonScori
+ ngCollector.class
+SHA1-Digest: giBQMAzPRWADb+irnUm7hLtA3Hc=
+
+Name: org/apache/lucene/analysis/CharArraySet.class
+SHA1-Digest: QRtpY/0zLl0rxQTJJDxZIVbgZeg=
+
+Name: org/apache/lucene/search/FieldCacheImpl$IntCache.class
+SHA1-Digest: /ECVjhl1Q5BQixcZ8aUwwVYyaQE=
+
+Name: org/apache/lucene/index/SegmentTermPositions.class
+SHA1-Digest: iP3Ri5HYkaD9VQY4g/w9rwU/yQU=
+
+Name: plugin.properties
+SHA1-Digest: kub9Xshua34cYFPiPXfcJPEfIGQ=
+
+Name: org/apache/lucene/search/MultiSearcher$CachedDfSource.class
+SHA1-Digest: fE7XClmFBV79L2wnRGKiuuGLSOQ=
+
+Name: org/apache/lucene/index/SegmentMerger$2.class
+SHA1-Digest: ISI/KH/x11BuiEvyvXzniIxyMxw=
+
+Name: org/apache/lucene/util/FieldCacheSanityChecker$InsanityType.clas
+ s
+SHA1-Digest: QHHLyo6RpKUdMmpg4bSyF68i7L0=
+
+Name: org/apache/lucene/analysis/CharArraySet$1.class
+SHA1-Digest: iKtMnMGcZZjR/SyewfWrpgPcPqQ=
+
+Name: org/apache/lucene/index/DirectoryReader$1.class
+SHA1-Digest: DjcUp620EJ0eD9kfzIoKDktFkYg=
+
+Name: org/apache/lucene/index/FormatPostingsDocsWriter.class
+SHA1-Digest: g5zhhxHHkWEFdWwzF4PT/Gvp+/o=
+
+Name: org/apache/lucene/index/DocFieldConsumer.class
+SHA1-Digest: SqW0jSpy9jq/2h7c71BjB9VYx+w=
+
+Name: org/apache/lucene/document/LoadFirstFieldSelector.class
+SHA1-Digest: KDJB31slBSsvm2bqqbe114TEPnE=
+
+Name: org/apache/lucene/analysis/tokenattributes/PositionIncrementAttr
+ ibute.class
+SHA1-Digest: MVmglekKu8kXz7uzvlFkL8aAEW8=
+
+Name: org/apache/lucene/util/DocIdBitSet.class
+SHA1-Digest: SaDlF4n6l70X14pkzu1XcmyiGJc=
+
+Name: org/apache/lucene/search/TopFieldCollector$MultiComparatorScorin
+ gNoMaxScoreCollector.class
+SHA1-Digest: GSbbXktiJKGbgnIa5+RfVysibIQ=
+
+Name: org/apache/lucene/search/TopFieldCollector$MultiComparatorScorin
+ gMaxScoreCollector.class
+SHA1-Digest: RN4w/JZu6TiWIFszznwV9KzIvSY=
+
+Name: org/apache/lucene/analysis/NormalizeCharMap.class
+SHA1-Digest: BP5/h2WF7FgSboS1vTVSzdxpmO0=
+
+Name: org/apache/lucene/search/FilteredDocIdSet.class
+SHA1-Digest: OpF8A3MWNvAkK18WEfh9sbSMZRc=
+
+Name: org/apache/lucene/analysis/StopFilter.class
+SHA1-Digest: j37j1cC8ni+MK7nsvFyx6ZXP1rQ=
+
+Name: org/apache/lucene/search/IndexSearcher.class
+SHA1-Digest: b5MP15PXiRRhEvgefNgu2/zdu/g=
+
+Name: org/apache/lucene/analysis/WordlistLoader.class
+SHA1-Digest: jTAF8yCcGdHOehRlkiM9sc14408=
+
+Name: org/apache/lucene/document/Fieldable.class
+SHA1-Digest: sZ5IlhYUX0V0BMwQIApf4h9co5s=
+
+Name: org/apache/lucene/util/BitUtil.class
+SHA1-Digest: WSJNmK4qU6HAsQ4RV169afPev+Y=
+
+Name: org/apache/lucene/search/function/CustomScoreQuery$1.class
+SHA1-Digest: dsIkGeQYDCcbjBERb0x+m4bvBMM=
+
+Name: org/apache/lucene/search/FilteredQuery$1$1.class
+SHA1-Digest: yj6PqAyMiKQFexFIJ5EIWI9jEQI=
+
+Name: org/apache/lucene/index/DocFieldConsumerPerThread.class
+SHA1-Digest: tCwjl0W7XcwU43nIuEPC++niPs8=
+
+Name: org/apache/lucene/search/MatchAllDocsQuery$MatchAllScorer.class
+SHA1-Digest: VsmqNELkitS33ZrT0Wx3yyrIP8o=
+
+Name: org/apache/lucene/search/FilteredDocIdSetIterator.class
+SHA1-Digest: AuQnmk8mPcpL4FXxgWu7aVm3fTE=
+
+Name: org/apache/lucene/search/ConjunctionScorer.class
+SHA1-Digest: CITNnTEk5ecWLGnD2vjAb1AdLcY=
+
+Name: org/apache/lucene/queryParser/MultiFieldQueryParser.class
+SHA1-Digest: S5fIToD7p+jCyyRN8x3ftXD08y8=
+
+Name: org/apache/lucene/search/Explanation$IDFExplanation.class
+SHA1-Digest: yuhxKPt0hiPfdRwN1n07tcUtioA=
+
+Name: org/apache/lucene/analysis/TokenStream$1.class
+SHA1-Digest: fMBMaA3OEJw1pvI5eqJZfEhivz0=
+
+Name: org/apache/lucene/search/FieldCache$6.class
+SHA1-Digest: gTKVqmRVtHwy/m34/fF8Vdk/Or4=
+
+Name: org/apache/lucene/store/ChecksumIndexOutput.class
+SHA1-Digest: idx11vU02e5nxKFxNJ+Dt2FyRFk=
+
+Name: org/apache/lucene/search/ScoreDocComparator.class
+SHA1-Digest: XILwIkBDa/r6PWq4QlwHMmtqZ/U=
+
+Name: org/apache/lucene/search/function/FloatFieldSource$1.class
+SHA1-Digest: EXmZpucD3yZeBpaq6MmMnBcIJ4s=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$5.class
+SHA1-Digest: BRUQNNe0bz2RVN3Lsh6qH7lz11s=
+
+Name: org/apache/lucene/search/spans/NearSpansOrdered$1.class
+SHA1-Digest: PsAOZeWHj19MlrWOQfGKwtJG6mg=
+
+Name: org/apache/lucene/util/OpenBitSetDISI.class
+SHA1-Digest: UIVFOU94xgoeJtcJAnBeHp2kFuk=
+
+Name: org/apache/lucene/analysis/tokenattributes/FlagsAttribute.class
+SHA1-Digest: LrbvWDMUAFWSkpMhoVdcR4zRduM=
+
+Name: org/apache/lucene/store/NoLock.class
+SHA1-Digest: FvLbeQZXlkZvo9Sw8ZVtKbNOqsE=
+
+Name: org/apache/lucene/index/KeepOnlyLastCommitDeletionPolicy.class
+SHA1-Digest: XPJ7snM/wbR1zvaXWFSp8t8MkFc=
+
+Name: org/apache/lucene/index/IndexFileDeleter$RefCount.class
+SHA1-Digest: zYF3v7npbM6QOdDVksP5C02RBOk=
+
+Name: org/apache/lucene/search/spans/NearSpansUnordered$CellQueue.clas
+ s
+SHA1-Digest: O/c9RM3FYSTHNrGS+YXplBkXHV4=
+
+Name: org/apache/lucene/index/AllTermDocs.class
+SHA1-Digest: z4Pt7WaQXbkdvnXth8vOGSesP7g=
+
+Name: org/apache/lucene/search/payloads/PayloadTermQuery$PayloadTermWe
+ ight.class
+SHA1-Digest: YOffotQG+slcfoMZGoaDN7S9Yc8=
+
+Name: org/apache/lucene/search/FieldComparator$LongComparator.class
+SHA1-Digest: N70eHSD+C4PFkV3bA6nmTHPsacE=
+
+Name: org/apache/lucene/analysis/standard/StandardAnalyzer$SavedStream
+ s.class
+SHA1-Digest: pXshWXMocVCOozT5jonupwn7MFw=
+
+Name: org/apache/lucene/search/MultiTermQueryWrapperFilter.class
+SHA1-Digest: 8aCiYAQnf3+JWNOEDYFJuj7vLFc=
+
+Name: org/apache/lucene/util/Constants.class
+SHA1-Digest: fbDRPVLu6rsh92wAAy/pyZeObDs=
+
+Name: org/apache/lucene/index/SegmentMerger.class
+SHA1-Digest: DpLQfJv3UC+LkB/Fog9C4HPjQic=
+
+Name: org/apache/lucene/document/AbstractField.class
+SHA1-Digest: q45H3zKu0KbzIYLpO/5fpZmKl8M=
+
+Name: org/apache/lucene/index/DirectoryReader.class
+SHA1-Digest: 6qgc5BMPooG6cFnKSVSPFmPX2Ng=
+
+Name: org/apache/lucene/store/IndexInput.class
+SHA1-Digest: f7bn07ouYB80gHkK8GgQlaLxoy4=
+
+Name: org/apache/lucene/search/Similarity$MethodSupport.class
+SHA1-Digest: KlcvfGiHJ9JETWTDlg3F2/dP2IA=
+
+Name: org/apache/lucene/index/MultipleTermPositions$TermPositionsQueue
+ .class
+SHA1-Digest: qo9hepry4fHeFmLuiYubvc3AX14=
+
+Name: org/apache/lucene/search/MultiSearcher.class
+SHA1-Digest: 3HacSTr9NuhxRwLyv/mddQzH4E0=
+
+Name: org/apache/lucene/search/QueryWrapperFilter$1.class
+SHA1-Digest: dCW/hKoMYJIMtjP4LxXx2MRmG+s=
+
+Name: org/apache/lucene/index/InvertedDocConsumerPerField.class
+SHA1-Digest: 2aLvWx9ak1bNYNO0G4ib2NJDkGk=
+
+Name: org/apache/lucene/search/MultiTermQueryWrapperFilter$2.class
+SHA1-Digest: evS7CJtWJEhar3O02qupZrceP/0=
+
+Name: org/apache/lucene/index/FieldReaderException.class
+SHA1-Digest: jYGOpTNv1IG4fNTiDb4KcV64CQM=
+
+Name: org/apache/lucene/index/SegmentTermDocs.class
+SHA1-Digest: ++hcIOjICuxae0z4wfh2QRmPBqM=
+
+Name: org/apache/lucene/search/TermRangeQuery.class
+SHA1-Digest: O1rPogQXrD3hPkJ7ztmX4856Rd4=
+
+Name: org/apache/lucene/analysis/TokenStream$MethodSupport.class
+SHA1-Digest: SvWwYTkr3qVf7bYLjUnQ8e+uPXc=
+
+Name: org/apache/lucene/index/TermInfosReader.class
+SHA1-Digest: mLyl5EAuMsdZsAJmjvyT017Sqg0=
+
+Name: org/apache/lucene/search/HitCollectorWrapper.class
+SHA1-Digest: anBdH4TeAyLFoY1eLlhPm4ty1cA=
+
+Name: org/apache/lucene/search/FieldDocSortedHitQueue.class
+SHA1-Digest: RIpjAoBpKxvdxgMHkfm+MqmgBek=
+
+Name: org/apache/lucene/index/DocFieldConsumerPerField.class
+SHA1-Digest: Z6+QqpcIwXZFirtO5VW9qBC/YyY=
+
+Name: org/apache/lucene/search/function/ValueSourceQuery$ValueSourceSc
+ orer.class
+SHA1-Digest: 7TF0+dfuulTqz5jDMh/o6eYFxDc=
+
+Name: org/apache/lucene/search/payloads/MinPayloadFunction.class
+SHA1-Digest: 9AgsBwR28i1sL9a1TEny3vkj6f4=
+
+Name: org/apache/lucene/search/TopScoreDocCollector$1.class
+SHA1-Digest: Z7HB8v6QzBz+h9VoXhLXlm9USGc=
+
+Name: org/apache/lucene/util/MemoryModel.class
+SHA1-Digest: OtRwh3dWSxQpu+5m3f+GUKaif54=
+
+Name: org/apache/lucene/store/MMapDirectory$MMapIndexInput.class
+SHA1-Digest: 0rAs3FQbHu6fsOXieKTOI6cSy9Q=
+
+Name: org/apache/lucene/search/SpanFilter.class
+SHA1-Digest: kLX83Dew/3+rkt2uPxN7nyOZxOg=
+
+Name: org/apache/lucene/index/DocumentsWriter$ByteBlockAllocator.class
+SHA1-Digest: upAyw3hl5DYyPRyOqryPdHlCuFU=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$4.class
+SHA1-Digest: hdz9WqunoW6IMfa31sRPirOAl1I=
+
+Name: org/apache/lucene/document/Field$Store.class
+SHA1-Digest: NX3QlQ0awn+CEqCAp6IoZ3odTuw=
+
+Name: org/apache/lucene/index/MultipleTermPositions.class
+SHA1-Digest: t0PeDgLZD+Z+VvIE2RJSeHnitqg=
+
+Name: org/apache/lucene/search/TimeLimitedCollector$TimeExceededExcept
+ ion.class
+SHA1-Digest: dXWbZJRCaQJE4ffyIKGJsSA/rh0=
+
+Name: org/apache/lucene/analysis/BaseCharFilter.class
+SHA1-Digest: rQqjUhRkOPiYTWZFo82WyqeFCDk=
+
+Name: org/apache/lucene/index/CheckIndex$Status$StoredFieldStatus.clas
+ s
+SHA1-Digest: mGmn+MXT4HJTPriPKrkWii5SgYA=
+
+Name: org/apache/lucene/search/PhraseQuery.class
+SHA1-Digest: KPfLZHnEuORSv4AVfszLDPOC46I=
+
+Name: org/apache/lucene/index/DocFieldConsumersPerThread.class
+SHA1-Digest: la1rV71MTQ+r63bKH7E0HRnmeZ4=
+
+Name: org/apache/lucene/search/Similarity$2.class
+SHA1-Digest: CuQypQGhdb3si5Ea1tIEs/LxsiE=
+
+Name: org/apache/lucene/util/NumericUtils$IntRangeBuilder.class
+SHA1-Digest: oa7Jxl55bIr7z+8rqgnyRPW9R4U=
+
+Name: org/apache/lucene/search/payloads/AveragePayloadFunction.class
+SHA1-Digest: SJoFySEKIpLaW+c6IILLNtQtnv0=
+
+Name: org/apache/lucene/search/MultiSearcherThread.class
+SHA1-Digest: bDzhONzF46ZDWgJdqN1toM7hR2o=
+
+Name: org/apache/lucene/util/cache/Cache$SynchronizedCache.class
+SHA1-Digest: aulm1p7kgu/GvlvBE16l4ML3cHY=
+
+Name: org/apache/lucene/analysis/PorterStemFilter.class
+SHA1-Digest: SKZyZ2OcRcyvP2X7ywioDZ/mMHI=
+
+Name: org/apache/lucene/analysis/StopAnalyzer$SavedStreams.class
+SHA1-Digest: 5AdwA/YOs1Ofaq5Tf4RCesiHQO8=
+
+Name: org/apache/lucene/index/DocConsumerPerThread.class
+SHA1-Digest: Yri1t5wxJjWWW8APMAT45s9jDYw=
+
+Name: org/apache/lucene/analysis/LowerCaseFilter.class
+SHA1-Digest: O5HkON5HPrvJX+JFv0/n7kr3u7Q=
+
+Name: org/apache/lucene/search/QueryFilter.class
+SHA1-Digest: 2AMwinGBdrpLQkYpCPCGIDc9DZs=
+
+Name: org/apache/lucene/queryParser/FastCharStream.class
+SHA1-Digest: ljbm+P3Gbewj1DvzYKX9AxRmjHk=
+
+Name: org/apache/lucene/search/FieldCacheImpl$FloatCache.class
+SHA1-Digest: YmQLpjzM0moaqSA68VkzT2C+/Yo=
+
+Name: org/apache/lucene/index/ParallelReader$ParallelTermDocs.class
+SHA1-Digest: Qc61WI50vbrYuGbgCxtnqKdMCLo=
+
+Name: org/apache/lucene/index/SegmentInfos$2.class
+SHA1-Digest: p/XP2r66jyShLZwmTfS2hXkexxM=
+
+Name: org/apache/lucene/util/cache/SimpleLRUCache$1.class
+SHA1-Digest: n6nmBM2K4vGsjvd9rTKUE1RRsV8=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$4$1.class
+SHA1-Digest: TjzlvyIOGZRq0XCc0eu6Va5++Ao=
+
+Name: org/apache/lucene/search/FieldCacheImpl$LongCache.class
+SHA1-Digest: AJpGop8S3rXQoYstcD67DSUwnVs=
+
+Name: org/apache/lucene/index/TermFreqVector.class
+SHA1-Digest: 1zzNq6ebHY3/8Vfu0QChVc5Ohpc=
+
+Name: org/apache/lucene/messages/MessageImpl.class
+SHA1-Digest: PhKtujcvc35GyjEInkSpXlqcx/4=
+
+Name: org/apache/lucene/search/payloads/MaxPayloadFunction.class
+SHA1-Digest: DRayGWwEACcVsOSRIflX//3rTBk=
+
+Name: org/apache/lucene/document/FieldSelector.class
+SHA1-Digest: nN1PDY9vPCojvqqiU0UFre0Zo/I=
+
+Name: org/apache/lucene/queryParser/QueryParser$LookaheadSuccess.class
+SHA1-Digest: vLFdXoigR220WFtoRWQ/6zFhfPM=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$FieldCacheDocIdSe
+ t.class
+SHA1-Digest: YKaErRBxeN/jzftrfB9VYo5d7/g=
+
+Name: org/apache/lucene/index/ParallelReader.class
+SHA1-Digest: s0hdOkrDEwXXj23zqRcS46Yi0EU=
+
+Name: org/apache/lucene/search/SortComparator.class
+SHA1-Digest: Mi8FYYqvN0dPNhRyr00ngPW1F1E=
+
+Name: org/apache/lucene/search/spans/SpanFirstQuery$1.class
+SHA1-Digest: slu4cDV14M11qzvsEm2B1YYEnJU=
+
+Name: org/apache/lucene/search/MultiPhraseQuery.class
+SHA1-Digest: 3saSdff5J10u5w339YoSoev+dqY=
+
+Name: org/apache/lucene/search/QueryTermVector.class
+SHA1-Digest: yeElYZ/FWbL1RviMygBfFf3TEVc=
+
+Name: org/apache/lucene/search/FuzzyTermEnum.class
+SHA1-Digest: Fn5Px5I7nJ7WE8JNOj13OK9oiDY=
+
+Name: org/apache/lucene/search/BooleanClause.class
+SHA1-Digest: ib/oHCr4hGKauiExOiq53u2KoV0=
+
+Name: org/apache/lucene/search/NumericRangeQuery.class
+SHA1-Digest: k1HfiCPahsG+IcW8mfL0KLuJI9A=
+
+Name: org/apache/lucene/index/FormatPostingsFieldsWriter.class
+SHA1-Digest: Wm8t2Ac5CIYs+pzLHImMe3ewdeM=
+
+Name: org/apache/lucene/index/CheckIndex$MySegmentTermDocs.class
+SHA1-Digest: Le2qj+wbXjsbKSGXnbH2v6hC5es=
+
+Name: org/apache/lucene/index/TermPositions.class
+SHA1-Digest: 1f0YdpeiSmiBikZyJeQQ2nKIOn4=
+
+Name: org/apache/lucene/index/FormatPostingsFieldsConsumer.class
+SHA1-Digest: qOm9HJ8zTGyDDrJLEu51hKIB5Gw=
+
+Name: org/apache/lucene/index/SerialMergeScheduler.class
+SHA1-Digest: R5Rm4hzltMCCFqIZODOoee80KKg=
+
+Name: org/apache/lucene/index/DocInverterPerThread$SingleTokenTokenStr
+ eam.class
+SHA1-Digest: 7C1oDXJU9UC6wdchSXtP3h/RqpY=
+
+Name: org/apache/lucene/search/FieldComparator$FloatComparator.class
+SHA1-Digest: nKJKd2J4Cjqf/8yr78SNCJIQYBI=
+
+Name: org/apache/lucene/index/ParallelReader$ParallelTermPositions.cla
+ ss
+SHA1-Digest: qu80cL1g3E3W9C4nvWfYg7wmSIY=
+
+Name: org/apache/lucene/index/SegmentReader$Ref.class
+SHA1-Digest: HFNaxppQgeqbAfq0UVo/efnylCE=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$9.class
+SHA1-Digest: CyolvFm0DQ5P1++PgzVZLM9ojLI=
+
+Name: org/apache/lucene/document/MapFieldSelector.class
+SHA1-Digest: KTp/imUXN+GlmpXhGgdHTsO+8Ss=
+
+Name: org/apache/lucene/analysis/TokenStream.class
+SHA1-Digest: MqWeS1efE0fyCQtFNDvaZWXXBh8=
+
+Name: org/apache/lucene/analysis/Analyzer.class
+SHA1-Digest: CzYcwzOCDxPTS4aEn3SlEL1i2MA=
+
+Name: org/apache/lucene/search/function/ValueSourceQuery.class
+SHA1-Digest: HxtgUakRXVYPGAgW908YjgHxpLk=
+
+Name: org/apache/lucene/search/function/ValueSourceQuery$ValueSourceWe
+ ight.class
+SHA1-Digest: qhkVhlJBdGN5+K/o+e7V/TiGwd0=
+
+Name: org/apache/lucene/index/TermsHashPerThread.class
+SHA1-Digest: /cg4jO2t3DzMIs1O+za6s5e2DB0=
+
+Name: org/apache/lucene/index/MultipleTermPositions$1.class
+SHA1-Digest: y3nf3/nCRu8yi+EgkI5Ho/LGB0A=
+
+Name: org/apache/lucene/search/FilterManager$FilterItem.class
+SHA1-Digest: ihQGV9f321FBp9YZKpCqnk4nE+k=
+
+Name: org/apache/lucene/search/MultiTermQuery$ConstantScoreBooleanQuer
+ yRewrite.class
+SHA1-Digest: cNLwJ9y7PpFaGJQm1kJRu4+nmK0=
+
+Name: org/apache/lucene/search/FieldCache$FloatParser.class
+SHA1-Digest: 0QkJN3lzwFvlNgcYaBbvSIcZbUk=
+
+Name: org/apache/lucene/index/IndexModifier.class
+SHA1-Digest: 4Tf8E6amotBLEH5pXEDCyDk8e9o=
+
+Name: org/apache/lucene/search/payloads/PayloadTermQuery$PayloadTermWe
+ ight$PayloadTermSpanScorer.class
+SHA1-Digest: LsUz8dRTk0gRlKk56UA2G+gOK/0=
+
+Name: org/apache/lucene/index/MergePolicy.class
+SHA1-Digest: icfPewqZGtKkjxphc6IlGqBWIKo=
+
+Name: org/apache/lucene/index/NormsWriter.class
+SHA1-Digest: FB8FpCvF5xIqQguCP61w1SqqPdQ=
+
+Name: org/apache/lucene/search/WildcardTermEnum.class
+SHA1-Digest: FXWtE+sSs5PAx7nlqgnlmCi+xJg=
+
+Name: org/apache/lucene/search/FieldCacheImpl$CacheEntryImpl.class
+SHA1-Digest: AYVPCvAwR0CES1yWKOLndLvxkyQ=
+
+Name: org/apache/lucene/document/Field.class
+SHA1-Digest: nq7g/zzyqLaj+2o9mrmzgULXs+s=
+
+Name: org/apache/lucene/index/FieldInfos.class
+SHA1-Digest: DQZWCRmt0ghLWhCajJuVibmEmEw=
+
+Name: org/apache/lucene/index/DocumentsWriter$SkipDocWriter.class
+SHA1-Digest: dstudjO3oCT+Rp/ESz8xB5oHqNY=
+
+Name: org/apache/lucene/search/MultiTermQuery$1.class
+SHA1-Digest: L6OvK/Ed88a4qz5fdmqG58vxez8=
+
+Name: org/apache/lucene/index/DocumentsWriter$1.class
+SHA1-Digest: 0NgSxzJ0uGO/0wNLkuVR8SNjnik=
+
+Name: org/apache/lucene/index/SegmentMerger$1.class
+SHA1-Digest: I6n/VurgEoj76yaFjEeWibFIwCA=
+
+Name: org/apache/lucene/index/DocInverter.class
+SHA1-Digest: HcrcmG3L6p5ATSOLW9yBHuJ32/o=
+
+Name: org/apache/lucene/index/CheckIndex$Status$SegmentInfoStatus.clas
+ s
+SHA1-Digest: ih2p7WV4w7bGh1g2yYgXPTo0sm4=
+
+Name: org/apache/lucene/analysis/tokenattributes/TypeAttributeImpl.cla
+ ss
+SHA1-Digest: QMAdK/l2FRywI8vgIJviOBPmI6M=
+
+Name: org/apache/lucene/index/TermVectorsTermsWriterPerField.class
+SHA1-Digest: rMPAZbF9mvUsC4raZulu9UkeOjU=
+
+Name: org/apache/lucene/search/payloads/PayloadNearQuery$PayloadNearSp
+ anScorer.class
+SHA1-Digest: wvxBeggp5KWWMJR1rmZgU5xNiWw=
+
+Name: org/apache/lucene/search/ConstantScoreRangeQuery.class
+SHA1-Digest: a0rSEYyzl/QPA4mf98rRveU4h9o=
+
+Name: org/apache/lucene/search/TermQuery.class
+SHA1-Digest: Ll3UafO93rPu6VjOEuOsozB0zVY=
+
+Name: org/apache/lucene/search/function/CustomScoreQuery.class
+SHA1-Digest: 9SrN5AJr3RfDvemwvEgYzkoacZI=
+
+Name: org/apache/lucene/search/FuzzyQuery.class
+SHA1-Digest: h25Z/RRz3ics4plVwyXM0BhHiQU=
+
+Name: org/apache/lucene/search/FilteredQuery$1.class
+SHA1-Digest: BocAAQoT1RN/1CMj/MaBMW6AiVs=
+
+Name: org/apache/lucene/index/CompoundFileReader$CSIndexInput.class
+SHA1-Digest: xVUzdnJ1Ho3Pa/MmiSFea0XRqIQ=
+
+Name: org/apache/lucene/index/ParallelArrayTermVectorMapper.class
+SHA1-Digest: 9FVPSs//q9wpvPQTC6Sq7meoqy0=
+
+Name: org/apache/lucene/store/Lock.class
+SHA1-Digest: 9OHFVRu0ciNqkNyETx1hiW+qT3Q=
+
+Name: org/apache/lucene/index/IndexWriter.class
+SHA1-Digest: tcEicLIT//b9P8Nenc9OWDWJbIc=
+
+Name: org/apache/lucene/index/ReusableStringReader.class
+SHA1-Digest: IyYaDxxQ3BVMijnbefnMIifYbLk=
+
+Name: org/apache/lucene/store/LockStressTest.class
+SHA1-Digest: 6t2tlh170cItsk63vaAsGB3POKY=
+
+Name: org/apache/lucene/search/Query.class
+SHA1-Digest: Yh2NDhB6NW4D5zUuDYa+MUoRQUY=
+
+Name: org/apache/lucene/index/SnapshotDeletionPolicy.class
+SHA1-Digest: rigQHVDBPffjpmmS/uupT2NF6Js=
+
+Name: org/apache/lucene/queryParser/Token.class
+SHA1-Digest: 24/jqNshPjBoUevnXMh2tkM4PoA=
+
+Name: org/apache/lucene/index/TermDocs.class
+SHA1-Digest: I96Q4NkmiSHu9usQUa5XOFODAMc=
+
+Name: org/apache/lucene/search/Collector.class
+SHA1-Digest: 4ylYA7sSevqoWbxkbRRtDmu+HYI=
+
+Name: org/apache/lucene/index/StoredFieldsWriter.class
+SHA1-Digest: BUh5DDMQGD2iqxiYHzDwND5vAZw=
+
+Name: org/apache/lucene/store/FSDirectory$FSIndexInput$Descriptor.clas
+ s
+SHA1-Digest: AzPxlMOYeI3uRwYbf5dx+3pZA54=
+
+Name: org/apache/lucene/analysis/CharArraySet$UnmodifiableCharArraySet
+ .class
+SHA1-Digest: YVHHiQ8yjzYCsrryyd2xj2WBMWM=
+
+Name: org/apache/lucene/search/FieldCacheTermsFilter.class
+SHA1-Digest: DsFBTJNERPQX2IHHWAtDGlXfaYA=
+
+Name: org/apache/lucene/search/ExactPhraseScorer.class
+SHA1-Digest: nL7Mt0M3n0tAZFQCCvBJJMB6KgA=
+
+Name: org/apache/lucene/util/UnicodeUtil.class
+SHA1-Digest: HjjrkJlaX+cv6RGzsCljP4fflfc=
+
+Name: org/apache/lucene/search/FieldCache$5.class
+SHA1-Digest: fKuZ8sezmie5hozfkEak9KXdHmA=
+
+Name: org/apache/lucene/index/ConcurrentMergeScheduler$MergeThread.cla
+ ss
+SHA1-Digest: DQu64IDbI216/ecNwPAiSvfhX+M=
+
+Name: org/apache/lucene/store/SingleInstanceLock.class
+SHA1-Digest: +2Ej80JEe26Vywn25/tvrDg2L8Y=
+
+Name: org/apache/lucene/search/FieldCacheRangeFilter$4.class
+SHA1-Digest: dVmzLBhB/hWiCxNb+OzYE1oTTGs=
+
+Name: org/apache/lucene/store/SimpleFSDirectory$SimpleFSIndexInput.cla
+ ss
+SHA1-Digest: AYbW3PL2jni7iKJBwJzCY2xIjRs=
+
+Name: org/apache/lucene/analysis/KeywordAnalyzer.class
+SHA1-Digest: 6bbBdp1ZTKOvzLbUBPpFavTC4c8=
+
+Name: org/apache/lucene/analysis/BaseCharFilter$OffCorrectMap.class
+SHA1-Digest: 5lh1BbOXEn5G9H8YI+/9AuBFS9M=
+
+Name: org/apache/lucene/search/DocIdSet$1$1.class
+SHA1-Digest: 18PcLAcm3ei7H1zCBN5xNdJuTy8=
+
+Name: org/apache/lucene/search/FieldCache$DoubleParser.class
+SHA1-Digest: 89QGQIzXg3CpzQUmxQ9SILNPgq4=
+
+Name: org/apache/lucene/index/FreqProxTermsWriter$PostingList.class
+SHA1-Digest: PRp7CKHICaPRJmgMfpXroy6MEi4=
+
+Name: org/apache/lucene/util/NumericUtils$LongRangeBuilder.class
+SHA1-Digest: 1DvaNmHyEscanhdHJWLzT6ewS1w=
+
+Name: org/apache/lucene/search/MultiTermQueryWrapperFilter$1.class
+SHA1-Digest: 1ZQVxJK/3vAKjP4OUFicY88zPlI=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue.class
+SHA1-Digest: F99sysCPoyYm3gjGANr0n+yvfXo=
+
+Name: org/apache/lucene/index/InvertedDocConsumer.class
+SHA1-Digest: n7eVuNGbmMe8UgqKiVSv+qC76EU=
+
+Name: org/apache/lucene/util/StringInterner.class
+SHA1-Digest: wOt2q2EKip0vh2Upoao4LeE9S1Q=
+
+Name: org/apache/lucene/search/function/ByteFieldSource.class
+SHA1-Digest: K5IBFkMbOcdTR9X188tmairl7II=
+
+Name: org/apache/lucene/search/function/FieldCacheSource.class
+SHA1-Digest: xmPJzm1yfJX3rIIYQVL/Ch7m3jU=
+
+Name: org/apache/lucene/search/TopFieldCollector$OutOfOrderMultiCompar
+ atorScoringMaxScoreCollector.class
+SHA1-Digest: +MgWdJkLfrYYadVWqO2cfoFoXKs=
+
+Name: org/apache/lucene/index/MergePolicy$MergeAbortedException.class
+SHA1-Digest: 4oYUivySm1fLeXTIF9X3c4AYl08=
+
+Name: org/apache/lucene/store/LockVerifyServer.class
+SHA1-Digest: Q/lwjhWC6e+NJbatu6010JXgQ4w=
+
+Name: org/apache/lucene/search/payloads/PayloadNearQuery.class
+SHA1-Digest: j/0JxXqV8jfACzsg9RLUswalKfk=
+
+Name: org/apache/lucene/search/SpanFilterResult$PositionInfo.class
+SHA1-Digest: Q9v55N8cuABAQxL6rvEM7aSFc78=
+
+Name: org/apache/lucene/util/SortedVIntList$SortedVIntListBuilder.clas
+ s
+SHA1-Digest: HWiY1+bV7nBF0e1N1MTmUVlAD3w=
+
+Name: org/apache/lucene/index/TermInfo.class
+SHA1-Digest: pIvz5GUFlcgcCXVR7pNQBCwMc2w=
+
+Name: org/apache/lucene/analysis/StopAnalyzer$1.class
+SHA1-Digest: tm7ycbXIGfKNP+kR8jlCQ2ZZDJM=
+
+Name: org/apache/lucene/search/FieldSortedHitQueue$3.class
+SHA1-Digest: 7V7gu/UXBuf29s+phXhJ2MQunvY=
+
+Name: org/apache/lucene/index/TermInfosReader$1.class
+SHA1-Digest: TB4lWKB5DLmt877m00/FTHtAUek=
+
+Name: org/apache/lucene/analysis/ISOLatin1AccentFilter.class
+SHA1-Digest: bhpIWaowaPbiwWXJTw2jR/nAwE8=
+
+Name: org/apache/lucene/store/LockFactory.class
+SHA1-Digest: gOCh0eJz92DlR4qYgrugumHRsq8=
+
+Name: org/apache/lucene/search/TermScorer.class
+SHA1-Digest: StS2msY+NewT1jRIKLE5Kq9mdPY=
+
+Name: org/apache/lucene/index/StoredFieldsWriter$PerDoc.class
+SHA1-Digest: AfR/SnEHccGY+geMONhq8eG/Z7w=
+
+Name: org/apache/lucene/search/payloads/PayloadNearQuery$PayloadNearSp
+ anWeight.class
+SHA1-Digest: UUQq0pidrpgnjW6zYtdofY2Cg+k=
+
+Name: org/apache/lucene/search/Similarity$1.class
+SHA1-Digest: 9h5aKKP2IQiogP4S3aLiE38X6ao=
+
+Name: org/apache/lucene/index/IndexReader.class
+SHA1-Digest: yJ+DFdZ/0m+Iit2Di16jvwtAlNY=
+
+Name: org/apache/lucene/index/StoredFieldsWriterPerThread.class
+SHA1-Digest: 0muvRldVE2dUc7IT7aDsoJo+3TM=
+
+Name: org/apache/lucene/index/InvertedDocEndConsumerPerThread.class
+SHA1-Digest: AZSwNuf26ktbpzhs3oIvNekkBPI=
+
+Name: org/apache/lucene/search/function/FieldScoreQuery.class
+SHA1-Digest: qUqmAw/v0P6uaKiOOLwRQ4XzDmc=
+
+Name: org/apache/lucene/analysis/TeeSinkTokenFilter$SinkFilter.class
+SHA1-Digest: 9SF0Z9VZ3eCLWrUGZrxdn3Q44aU=
+
+Name: org/apache/lucene/search/HitCollector.class
+SHA1-Digest: gUHl9KpiDJY8zkVgJkeJMpV7sBg=
+
+Name: org/apache/lucene/analysis/KeywordTokenizer.class
+SHA1-Digest: 9CChOF0pFjNtycivA4UFzub1TfY=
+
+Name: org/apache/lucene/search/MultiPhraseQuery$MultiPhraseWeight.clas
+ s
+SHA1-Digest: 3rJVwX0Wkon88Y/JGruQu/kkoXM=
+
+Name: org/apache/lucene/search/DocIdSet$1.class
+SHA1-Digest: +HhEpb/usnrUbsNCAmehFF1GHNY=
+
+Name: org/apache/lucene/store/FSLockFactory.class
+SHA1-Digest: tiLGepNDYqsYS5s9qZee5kf/Rkk=
+
+Name: org/apache/lucene/search/DocIdSetIterator.class
+SHA1-Digest: 92YvH1HLJHVv/7tHew5IUQt9GbI=
+
+Name: org/apache/lucene/store/IndexOutput.class
+SHA1-Digest: JQMUUHdyb/udUbcimyNfGIGJP0w=
+
+Name: org/apache/lucene/search/HitQueue.class
+SHA1-Digest: pc6gLLx/VWnzqKrFJTVKL0g1dw4=
+
+Name: org/apache/lucene/search/ExtendedFieldCache$LongParser.class
+SHA1-Digest: kHVdyvKwc4Q7dNEsfDqR10PRET4=
+
+Name: org/apache/lucene/store/AlreadyClosedException.class
+SHA1-Digest: 26zeKgyS39BsgsCKZq7vv+5VKv4=
+
+Name: org/apache/lucene/index/SegmentInfos$1.class
+SHA1-Digest: 8pnlgx0Wu0d4eNFaFERlzGWOBM8=
+
diff --git a/dependencyManifests/org.apache.lucene_1.9.1.v20100518-1140.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.apache.lucene_1.9.1.v20100518-1140.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 72bfd15..0000000
--- a/dependencyManifests/org.apache.lucene_1.9.1.v20100518-1140.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,916 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.apache.lucene
-Export-Package: org.apache.lucene,org.apache.lucene.analysis,org.apach
- e.lucene.analysis.de,org.apache.lucene.analysis.standard,org.apache.l
- ucene.document,org.apache.lucene.index,org.apache.lucene.queryParser,
- org.apache.lucene.search,org.apache.lucene.search.spans,org.apache.lu
- cene.store,org.apache.lucene.util
-Bundle-Version: 1.9.1.v20100518-1140
-Bundle-ManifestVersion: 2
-
-Name: org/apache/lucene/search/ScoreDoc.class
-SHA1-Digest: 7bjm4VNJWLvCbvZrL09UCN6Vwkc=
-
-Name: org/apache/lucene/util/PriorityQueue.class
-SHA1-Digest: 6vsZ0ARE/duPH/LymakfXS0Hndc=
-
-Name: org/apache/lucene/document/Document.class
-SHA1-Digest: tgvlVvkhU3giFGk9aoe3uXO7E48=
-
-Name: org/apache/lucene/store/MMapDirectory.class
-SHA1-Digest: j+ABTcgB/j3xfXw8x3CRMvxY5Eo=
-
-Name: org/apache/lucene/index/MultiTermPositions.class
-SHA1-Digest: gVLesn6633CjgqAUiGQYKvBOCTI=
-
-Name: org/apache/lucene/store/Lock$With.class
-SHA1-Digest: fomd1EnFYlJBXNg8BBUOtcLUauY=
-
-Name: org/apache/lucene/search/ScoreDocComparator$2.class
-SHA1-Digest: +0g0LFX6KKJHzLTKm/MCu0yI7Uc=
-
-Name: org/apache/lucene/search/PhrasePrefixQuery$PhrasePrefixWeight.cl
- ass
-SHA1-Digest: sbmUoBqziG78KDK85MfAfPY2eMA=
-
-Name: org/apache/lucene/search/NonMatchingScorer.class
-SHA1-Digest: +boEsB5arDElY0qA8IpgVdJkh6E=
-
-Name: org/apache/lucene/index/FilterIndexReader$FilterTermDocs.class
-SHA1-Digest: mTbOob59dhq9knpcc5/5ysYvM9M=
-
-Name: org/apache/lucene/store/FSDirectory.class
-SHA1-Digest: JFiUh85BntOHvy3KC775KN8503c=
-
-Name: org/apache/lucene/index/CompoundFileWriter$1.class
-SHA1-Digest: /LT+jHUDDY1dj38fOrFbelj2ZrU=
-
-Name: org/apache/lucene/queryParser/QueryParserTokenManager.class
-SHA1-Digest: vs1zA825hUIJLbM5GgyUXLxVo7k=
-
-Name: org/apache/lucene/search/QueryFilter$1.class
-SHA1-Digest: J44IDJigW5BQX1PypLEj3i/1a84=
-
-Name: org/apache/lucene/search/TopDocs.class
-SHA1-Digest: 8+5aAvFKqcZZxiMDbbHvv3JhWog=
-
-Name: org/apache/lucene/store/FSIndexOutput.class
-SHA1-Digest: UdVO3XUTc/qY2MDtT+84vAJsmmI=
-
-Name: org/apache/lucene/search/spans/SpanNotQuery$1.class
-SHA1-Digest: pVEdQSGMM06s64ffOXMD4Ku3Pwc=
-
-Name: org/apache/lucene/index/DocumentWriter.class
-SHA1-Digest: bQSVc3xILw6ssVMbW4Gp26UE70Y=
-
-Name: org/apache/lucene/analysis/LowerCaseTokenizer.class
-SHA1-Digest: zFZaJEMmSMN4ji7E9NOg+cEz5Vo=
-
-Name: org/apache/lucene/analysis/StopAnalyzer.class
-SHA1-Digest: rTqcULxqdedHcmpx9h+3Yuf04/I=
-
-Name: org/apache/lucene/analysis/standard/StandardTokenizer.class
-SHA1-Digest: b4c/4uzm2X796kFbsg4Q/YEtiwc=
-
-Name: org/apache/lucene/store/FSDirectory$1.class
-SHA1-Digest: XdSPoigqCXSX879hC6POxb2oldA=
-
-Name: org/apache/lucene/search/spans/SpanOrQuery$SpanQueue.class
-SHA1-Digest: S94pciGFqnBZwriMK3qr2DTETLs=
-
-Name: org/apache/lucene/analysis/standard/FastCharStream.class
-SHA1-Digest: Qn/pKkP7YJgN/g4dqFxfqnZlYrU=
-
-Name: org/apache/lucene/search/BooleanScorer2$2.class
-SHA1-Digest: Sh7yOdYUdXhr6CI/zzcwbz+2eV0=
-
-Name: org/apache/lucene/search/spans/SpanTermQuery$1.class
-SHA1-Digest: wSmVtbqucCtxKo/cx9HJx/57tuU=
-
-Name: org/apache/lucene/index/IndexFileNames.class
-SHA1-Digest: 4NRpZaMCqpWrmqoprs/2Zdd4AME=
-
-Name: org/apache/lucene/index/TermVectorsWriter$TVTerm.class
-SHA1-Digest: bIs4kRqrR4gViDU1pdlPolKKZu0=
-
-Name: org/apache/lucene/analysis/LetterTokenizer.class
-SHA1-Digest: f8KO9plk6lagj90PQzV0Ca5yDAk=
-
-Name: org/apache/lucene/search/HitDoc.class
-SHA1-Digest: 4E2DntT+KZVs5lM/dag7SLlLEj8=
-
-Name: org/apache/lucene/search/DisjunctionMaxQuery.class
-SHA1-Digest: bt3YPEc+6SebTWxudmvFZji5/nk=
-
-Name: org/apache/lucene/index/SegmentTermPositionVector.class
-SHA1-Digest: BVMa//BO27JUehpxojUHZ25CsG0=
-
-Name: org/apache/lucene/search/FieldCacheImpl.class
-SHA1-Digest: dJsZRDF03VZoHmO8q45j7YHXTXs=
-
-Name: org/apache/lucene/store/RAMOutputStream.class
-SHA1-Digest: 0QLV7pj+w3AjhCX8CkiRVRGiwiw=
-
-Name: org/apache/lucene/analysis/Tokenizer.class
-SHA1-Digest: AJ1A/ijWWP1PS4RRSKkT+204lTU=
-
-Name: org/apache/lucene/index/IndexWriter$1.class
-SHA1-Digest: LGSFbntDpUpWTU2zU/XKVj94REI=
-
-Name: org/apache/lucene/store/RAMDirectory$1.class
-SHA1-Digest: NIoE1aOvfe0s8i7NOeluZQxfGi8=
-
-Name: org/apache/lucene/search/Hit.class
-SHA1-Digest: qBpyJ9VyA0cvIg8zIwHp3Z4rREQ=
-
-Name: org/apache/lucene/index/TermVectorOffsetInfo.class
-SHA1-Digest: D+Z+rsrjxvJ9JjsRcsQd1CnR7MA=
-
-Name: org/apache/lucene/store/InputStream.class
-SHA1-Digest: iGfX9U4+f9xq1opv2qFzPBNvW90=
-
-Name: org/apache/lucene/search/RangeFilter.class
-SHA1-Digest: zMTAiV5wWEPxvsWSAnVHpk/hbVU=
-
-Name: org/apache/lucene/search/FieldCacheImpl$2.class
-SHA1-Digest: 3CGCPkvgeMAl1os3ZTG9g9A2LZ8=
-
-Name: org/apache/lucene/search/Explanation.class
-SHA1-Digest: VwdwwLPI/BIwqnlMpaeGuundFAg=
-
-Name: org/apache/lucene/search/ReqExclScorer.class
-SHA1-Digest: sPnuooK9oRbtPEg0gPC99b+KJhc=
-
-Name: org/apache/lucene/util/SmallFloat.class
-SHA1-Digest: 2D3SgpzTa7+mpX8fQM5oAP/5h/s=
-
-Name: org/apache/lucene/LucenePackage.class
-SHA1-Digest: Pm6fOCuDLIce6EedPm217ldPpk4=
-
-Name: org/apache/lucene/search/BooleanClause$Occur.class
-SHA1-Digest: kXVwnrBYYUtKFO6oYT8QNOP3ZdI=
-
-Name: org/apache/lucene/search/spans/NearSpans$SpansCell.class
-SHA1-Digest: H5uaQQMGbpUOnvNfncbRA1W57hs=
-
-Name: org/apache/lucene/search/ConjunctionScorer$1.class
-SHA1-Digest: +2al0t+x14aNAweSAI3AAlDpNcY=
-
-Name: org/apache/lucene/queryParser/CharStream.class
-SHA1-Digest: lz7SB3wtE0rAVwTZ9Tcl9YSarlA=
-
-Name: org/apache/lucene/queryParser/QueryParser$1.class
-SHA1-Digest: jEBkXmXluLYTqApsLdanR/jeZ9M=
-
-Name: org/apache/lucene/document/Field$TermVector.class
-SHA1-Digest: bYHWZsTnDi1/rMIzLx2IuPTP0/w=
-
-Name: org/apache/lucene/search/spans/SpanTermQuery.class
-SHA1-Digest: lh9Z9CegLslPfAHlAHcZ9T8Y584=
-
-Name: org/apache/lucene/search/TermQuery$TermWeight.class
-SHA1-Digest: S+jllXFFRxVOSCexUuac1eoCbdI=
-
-Name: org/apache/lucene/search/SortComparatorSource.class
-SHA1-Digest: skCXBc8OhjnzkD5b5bQc5CpvE88=
-
-Name: org/apache/lucene/analysis/WhitespaceAnalyzer.class
-SHA1-Digest: 1rEcnJTNPmB93sjT+V4DnC6KpUw=
-
-Name: org/apache/lucene/index/FilterIndexReader$FilterTermEnum.class
-SHA1-Digest: KE9LJk4J8WrUe3Jr5uxVyz0dNj8=
-
-Name: org/apache/lucene/index/CompoundFileWriter$FileEntry.class
-SHA1-Digest: XO8itXR2+2ENqsHpnxHKhiSOL1M=
-
-Name: org/apache/lucene/index/TermVectorsWriter.class
-SHA1-Digest: idqpzhQYfvIDRjEkSIempnIXS4o=
-
-Name: org/apache/lucene/search/FieldCacheImpl$Entry.class
-SHA1-Digest: kcwGvC8UzQcMLLCe/xnEEZv52SI=
-
-Name: org/apache/lucene/search/spans/SpanQuery.class
-SHA1-Digest: 4HZ3md/wniUYvyajd6Ytiagx1Yo=
-
-Name: org/apache/lucene/index/FilterIndexReader.class
-SHA1-Digest: MyJtTPiKpc2WDbjvTNqIn2oFKbA=
-
-Name: org/apache/lucene/search/FuzzyQuery$ScoreTermQueue.class
-SHA1-Digest: mm274kcfdYBJE11Yw3yIQit5Rhg=
-
-Name: org/apache/lucene/search/MultiSearcher$1.class
-SHA1-Digest: ESsXZ/hkh6BNZE99tbB5wzuORls=
-
-Name: org/apache/lucene/index/FilterIndexReader$FilterTermPositions.cl
- ass
-SHA1-Digest: PAE0/Miiyao6eSnJyKo2pi4/htI=
-
-Name: org/apache/lucene/document/Field$Index.class
-SHA1-Digest: bZChQDVVOF6Yb53oFIR6MbQRUDs=
-
-Name: org/apache/lucene/index/CompoundFileReader$1.class
-SHA1-Digest: M2By0aR15OV2q1PCiIIkzkF+v9Y=
-
-Name: org/apache/lucene/index/MultipleTermPositions$IntQueue.class
-SHA1-Digest: e855MfMQjDFOj0r51U2FIuANkQI=
-
-Name: org/apache/lucene/search/Sort.class
-SHA1-Digest: vjRLnlmU4D9hQPyZqgLYrggV7pM=
-
-Name: org/apache/lucene/index/TermVectorsWriter$1.class
-SHA1-Digest: i1o6lw8i3tRrrIOzt9xOS5Flg7U=
-
-Name: org/apache/lucene/store/RAMInputStream.class
-SHA1-Digest: 53bFE4r8ECQeFWilFa2GOrgQwBI=
-
-Name: org/apache/lucene/search/BooleanScorer2$SingleMatchScorer.class
-SHA1-Digest: vkZ68S4+ljAeWk28fUSZmq7iF5M=
-
-Name: org/apache/lucene/store/RAMDirectory.class
-SHA1-Digest: h6qwDTDUR7w9+b/NpVDdT+RJmiA=
-
-Name: org/apache/lucene/document/NumberTools.class
-SHA1-Digest: gC9SkiuUrduXA+vGYhgLSMV0BX8=
-
-Name: org/apache/lucene/search/PhraseQuery$PhraseWeight.class
-SHA1-Digest: xJagdTugwuVYfMefjy5Glfcxt44=
-
-Name: org/apache/lucene/analysis/standard/StandardAnalyzer.class
-SHA1-Digest: oMN21CsCs3hMEodLIa83EIr5ZYo=
-
-Name: org/apache/lucene/document/DateTools$Resolution.class
-SHA1-Digest: txT1oKhHlLH8DXI04FteBkwum8w=
-
-Name: org/apache/lucene/search/spans/SpanOrQuery.class
-SHA1-Digest: PLfPR/VaBiw2C1fVv/W6A6GmqPI=
-
-Name: org/apache/lucene/search/BooleanQuery$TooManyClauses.class
-SHA1-Digest: Xs5D1syy8OgXG4gBoR8BqyFZ8KI=
-
-Name: org/apache/lucene/analysis/standard/StandardFilter.class
-SHA1-Digest: L0iwHdbDD13AG9ql5KwZ4+4gwdE=
-
-Name: org/apache/lucene/analysis/standard/StandardTokenizerConstants.c
- lass
-SHA1-Digest: ozuDrFUpLHSugS9/BlvgtSHdPr4=
-
-Name: org/apache/lucene/index/TermPositionVector.class
-SHA1-Digest: PtDf5XWR/rEqvEE7wKI1qcTftkg=
-
-Name: org/apache/lucene/index/IndexReader$1.class
-SHA1-Digest: uQiqmGeM7ZgsFT9gNL/H+6Xo8Qs=
-
-Name: org/apache/lucene/search/Hits.class
-SHA1-Digest: A1atDsYCshkJTyJx1hl+Lxg26pM=
-
-Name: org/apache/lucene/store/RAMFile.class
-SHA1-Digest: bret0GXLoSol5zLIl592a2m3vW4=
-
-Name: org/apache/lucene/store/MMapDirectory$MultiMMapIndexInput.class
-SHA1-Digest: YtCjntYTMVQIcv2JIes/w97VAcs=
-
-Name: org/apache/lucene/search/spans/SpanNotQuery.class
-SHA1-Digest: 8aOUI9j106cEChqKe+ra/k5IkeY=
-
-Name: org/apache/lucene/search/BooleanScorer$Bucket.class
-SHA1-Digest: MhFPaxsu4wyeQ7KVnFw+nAqrhyc=
-
-Name: org/apache/lucene/search/spans/SpanFirstQuery.class
-SHA1-Digest: KyvVZEIC6s/6XBW34kZXXDdCI78=
-
-Name: org/apache/lucene/search/BooleanScorer$BucketTable.class
-SHA1-Digest: JsuQ4igWMAqOV6kCYpwcgonMlwE=
-
-Name: org/apache/lucene/queryParser/QueryParser$JJCalls.class
-SHA1-Digest: JL4zdB/YvPnLDPAVMxYntYh/k5Q=
-
-Name: org/apache/lucene/search/BooleanScorer2.class
-SHA1-Digest: Xv3AD/UNtYOLwoJW7rLqWYvRmzQ=
-
-Name: org/apache/lucene/search/RangeQuery.class
-SHA1-Digest: 3PsYUDXgYtWtKqgP3+UZimq2LuM=
-
-Name: org/apache/lucene/queryParser/QueryParser$Operator.class
-SHA1-Digest: +kCmT4LTjdwb9fHIitW5+wBk888=
-
-Name: org/apache/lucene/search/ParallelMultiSearcher$1.class
-SHA1-Digest: eOwFuFxDruAIep/yurXl89swzPk=
-
-Name: org/apache/lucene/store/MMapDirectory$1.class
-SHA1-Digest: OBVJSjdshz6Oc21VYroUlSCZXq0=
-
-Name: org/apache/lucene/store/FSIndexInput.class
-SHA1-Digest: VWrQ/o024wUxu2uTnvr8vpaTKRY=
-
-Name: org/apache/lucene/queryParser/TokenMgrError.class
-SHA1-Digest: yxieSsykzV1IsDCyPo8U4gjn8Fs=
-
-Name: org/apache/lucene/analysis/standard/CharStream.class
-SHA1-Digest: y7ehNZnDj+kCKgq16R8JSXXdSnA=
-
-Name: org/apache/lucene/search/FieldDoc.class
-SHA1-Digest: pqYK6pQZqf8DpOptlLMgCTjZVfc=
-
-Name: about_files/asl-v20.txt
-SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
-
-Name: org/apache/lucene/index/CompoundFileReader$FileEntry.class
-SHA1-Digest: ICger7P3Izjw+cAKbKneg5cwwwY=
-
-Name: org/apache/lucene/search/DisjunctionMaxScorer.class
-SHA1-Digest: PREHEN1EkFOby5RjdlkTsYRUZ64=
-
-Name: org/apache/lucene/index/TermVectorsReader.class
-SHA1-Digest: 4x8xkUM29KBpQTfT91WJtxYWQzE=
-
-Name: org/apache/lucene/search/FieldSortedHitQueue$2.class
-SHA1-Digest: qogFhiWGQzLxb7MuzWTtkX+DNFQ=
-
-Name: org/apache/lucene/search/FieldCache$StringIndex.class
-SHA1-Digest: SVoWi3HpbKmcWP9XQBEpbeLeBQI=
-
-Name: org/apache/lucene/search/spans/NearSpans$CellQueue.class
-SHA1-Digest: tEWVgFZ968LeU6llcVZIfVFbfC0=
-
-Name: org/apache/lucene/analysis/standard/StandardTokenizerTokenManage
- r.class
-SHA1-Digest: H1bggRgSC9xJik0chExrc89DfLo=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: org/apache/lucene/queryParser/ParseException.class
-SHA1-Digest: g87EmK0qh0zShyjUJ+g1nIC9238=
-
-Name: org/apache/lucene/search/CachingWrapperFilter.class
-SHA1-Digest: G+U+21bQx7btxYG6zX2dgKy1dnc=
-
-Name: org/apache/lucene/index/IndexFileNameFilter.class
-SHA1-Digest: 1BqCQlzqw5IjoTAaL8l29PmB+mM=
-
-Name: org/apache/lucene/search/spans/SpanScorer.class
-SHA1-Digest: bEOZVy/lAcTdiz/IOcdoZDa+/E8=
-
-Name: org/apache/lucene/index/IndexWriter$3.class
-SHA1-Digest: ogNFaUsO6ivuM9t4JBEGyRW4xms=
-
-Name: org/apache/lucene/index/SegmentInfos.class
-SHA1-Digest: 70tQadpo7YL9Y+iqy23VcP2xvn0=
-
-Name: org/apache/lucene/search/PhraseQueue.class
-SHA1-Digest: scERKFV3aS8mVt7mi1oMMghToO8=
-
-Name: org/apache/lucene/search/DisjunctionMaxQuery$DisjunctionMaxWeigh
- t.class
-SHA1-Digest: khZrJ0/Fetp49FMbZ/EfGMheRRs=
-
-Name: org/apache/lucene/search/Filter.class
-SHA1-Digest: uNWfIXyl4o1431ng9+wwbdwJaPM=
-
-Name: org/apache/lucene/search/PhraseScorer.class
-SHA1-Digest: mIkctuGCQyJPmzloUWfq3nrP2mc=
-
-Name: org/apache/lucene/search/BooleanQuery$BooleanWeight.class
-SHA1-Digest: qAjQwsVP1UPVFXxHb5HYAkqZtxU=
-
-Name: org/apache/lucene/index/CompoundFileWriter.class
-SHA1-Digest: 2AGpw7osJFG4t3fmFLbCnn4Gwrg=
-
-Name: org/apache/lucene/search/BooleanQuery.class
-SHA1-Digest: ranzU1V20FYqb6/wdgvmZC/ugto=
-
-Name: org/apache/lucene/search/Searchable.class
-SHA1-Digest: JnV6/nA6ZBJDfbzJjllmnHENJ9I=
-
-Name: org/apache/lucene/analysis/SimpleAnalyzer.class
-SHA1-Digest: GdqItnsh5NoLErzppmoaQXiNcwE=
-
-Name: org/apache/lucene/analysis/PerFieldAnalyzerWrapper.class
-SHA1-Digest: SEgp4hoYw/y+QxrEQxXPkHcpmc4=
-
-Name: org/apache/lucene/util/StringHelper.class
-SHA1-Digest: 13ySjur+fIHrGE7iqYhD/JIIYnw=
-
-Name: org/apache/lucene/index/SegmentMergeQueue.class
-SHA1-Digest: WbD0w6gV+VX3Z9cSGLmeCFyBsG8=
-
-Name: org/apache/lucene/index/TermInfosWriter.class
-SHA1-Digest: 0pDHlY08nLgElNNJQI/THFIluHU=
-
-Name: org/apache/lucene/search/ScoreDocComparator$1.class
-SHA1-Digest: rlMWOPxjSLdI0w6eKzzw+JObEJ0=
-
-Name: org/apache/lucene/analysis/LengthFilter.class
-SHA1-Digest: nsKnR8/NQ1Sdq4mntmUVYMGzhJ8=
-
-Name: org/apache/lucene/index/SegmentTermPositions.class
-SHA1-Digest: t8axf0mk+fK5+ZfaFjzfKCbTQL8=
-
-Name: plugin.properties
-SHA1-Digest: VoyAYH13PaywpT3tZ+7AJ5ooMJE=
-
-Name: org/apache/lucene/search/MultiSearcher$CachedDfSource.class
-SHA1-Digest: Y/ym3JF0j/clrbwFgy2tz3PogLY=
-
-Name: org/apache/lucene/store/OutputStream.class
-SHA1-Digest: LnDNd6jVIuMRsSTf2qCDMYKM+Sg=
-
-Name: org/apache/lucene/search/BooleanScorer2$1.class
-SHA1-Digest: cKLngQ4SgTleNCGXXCHzrPkP/PA=
-
-Name: org/apache/lucene/search/FilteredQuery$2.class
-SHA1-Digest: dIOT1PEANvqvwq5Jed6aTti6hYg=
-
-Name: org/apache/lucene/analysis/standard/TokenMgrError.class
-SHA1-Digest: lhAtuEa7itUKeyQ3Ib27HSPWrFg=
-
-Name: org/apache/lucene/analysis/StopFilter.class
-SHA1-Digest: 3YOOoIWnEuFgcBSu+aneBpbBGV4=
-
-Name: org/apache/lucene/search/IndexSearcher.class
-SHA1-Digest: C1dsbrNFl0zOqJ+z4gZ4PFIIgSw=
-
-Name: org/apache/lucene/analysis/WordlistLoader.class
-SHA1-Digest: HNaZI1vqval6rG1wJYsT/Sq00nA=
-
-Name: org/apache/lucene/analysis/WhitespaceTokenizer.class
-SHA1-Digest: jU/mPCZkGwRrJ6iD5m7lrJbDilA=
-
-Name: org/apache/lucene/search/MatchAllDocsQuery$MatchAllScorer.class
-SHA1-Digest: UXu+tSR7JhDJ7TOa/zDwiLQRIT8=
-
-Name: org/apache/lucene/analysis/standard/Token.class
-SHA1-Digest: QdP79CrXXW6I2TdCrRIRKfxJYOw=
-
-Name: org/apache/lucene/search/FieldCacheImpl$1.class
-SHA1-Digest: 2VKcEOnGdKP/xTL7cCP4cF/Xy5E=
-
-Name: org/apache/lucene/search/ReqOptSumScorer.class
-SHA1-Digest: jDzScmevd6Asd2HG7kvyHsmmayU=
-
-Name: org/apache/lucene/search/BooleanScorer2$Coordinator.class
-SHA1-Digest: JA57kPSLU8jYgqqVeY26gayWR+o=
-
-Name: org/apache/lucene/search/ConjunctionScorer.class
-SHA1-Digest: f1Lia/6jOhoQP6ijpiFAVh11oww=
-
-Name: org/apache/lucene/index/SegmentMergeInfo.class
-SHA1-Digest: sbghx5OWT3jnYSjtIbCjoBSIQaw=
-
-Name: org/apache/lucene/queryParser/MultiFieldQueryParser.class
-SHA1-Digest: 5azzTZVzpPnR7Qav86xJPWNXrU4=
-
-Name: org/apache/lucene/search/FuzzyQuery$ScoreTerm.class
-SHA1-Digest: USxS1rn4llcVzkjCmgCfzbsInJg=
-
-Name: org/apache/lucene/search/ScoreDocComparator.class
-SHA1-Digest: SAx98JZat5kjVM7990y7uvASCXU=
-
-Name: org/apache/lucene/search/BooleanScorer$SubScorer.class
-SHA1-Digest: e0Hlkp1oUYNN4PuAZpLUSeZI0+I=
-
-Name: org/apache/lucene/search/FilteredTermEnum.class
-SHA1-Digest: 3Wvgct4AsyyhBQhfU3aqadO+qZI=
-
-Name: org/apache/lucene/search/spans/SpanWeight.class
-SHA1-Digest: rdYmpJkaACMJ90rcvLJWyJkgnFg=
-
-Name: org/apache/lucene/util/Constants.class
-SHA1-Digest: toyjFl2zAETPRuaoYTfNtKgbyAc=
-
-Name: org/apache/lucene/index/SegmentMerger.class
-SHA1-Digest: qcAzO3oXDziqeOjixmvGkyXjbIY=
-
-Name: org/apache/lucene/search/DisjunctionSumScorer.class
-SHA1-Digest: AR2XhIDtamQ/Ge8OVwbn8tlOJ0w=
-
-Name: org/apache/lucene/store/BufferedIndexInput.class
-SHA1-Digest: AfAKxHfbH5P1fzPSwh+q9aKbFPM=
-
-Name: org/apache/lucene/store/IndexInput.class
-SHA1-Digest: YjURuZvuYKTKBt+iNr76nXQzy3o=
-
-Name: org/apache/lucene/index/MultipleTermPositions$TermPositionsQueue
- .class
-SHA1-Digest: y+TEHuOHPpYE64CA5CHqFSquLOI=
-
-Name: org/apache/lucene/search/MultiSearcher.class
-SHA1-Digest: fnXxP7qoTrx6CObO9RjBxJNTiPo=
-
-Name: org/apache/lucene/index/CompoundFileReader.class
-SHA1-Digest: jwdII6XcQY519s0eG21yYTvJp5E=
-
-Name: org/apache/lucene/search/spans/SpanNearQuery.class
-SHA1-Digest: +vEdaaydjlLBe9oLmxC6T0fSXqY=
-
-Name: org/apache/lucene/search/FilteredQuery.class
-SHA1-Digest: chVxELhQBlktjWYk1XJW24ylybs=
-
-Name: org/apache/lucene/index/SegmentTermDocs.class
-SHA1-Digest: ofBe6PXg60uUXwGk4YcKLp9Psjg=
-
-Name: org/apache/lucene/index/TermInfosReader.class
-SHA1-Digest: 6lbor7Wx14baiIaYVacxP+mD5KA=
-
-Name: org/apache/lucene/search/FieldDocSortedHitQueue.class
-SHA1-Digest: lJhzxTVREqox1YQ6Utmz7ydgygU=
-
-Name: org/apache/lucene/search/SortComparator$1.class
-SHA1-Digest: Vex+Tar/46QFcvFAE6hN8/Ja5/8=
-
-Name: org/apache/lucene/store/MMapDirectory$MMapIndexInput.class
-SHA1-Digest: JBDHhkl/gR+dmjFd6ps8c6Ouzww=
-
-Name: org/apache/lucene/search/FieldSortedHitQueue$4.class
-SHA1-Digest: g7ycmhwAmqzOhNKa8DDlPPU22OY=
-
-Name: org/apache/lucene/search/RemoteSearchable.class
-SHA1-Digest: HOEvnB3ba5QGgFFuYUVIuUKDj8s=
-
-Name: org/apache/lucene/index/MultipleTermPositions.class
-SHA1-Digest: i/JY8fyn49afHz1AlHccZOd2cFI=
-
-Name: org/apache/lucene/document/Field$Store.class
-SHA1-Digest: 0x2pDQRArQcmaOwSDCgCM3qm2rk=
-
-Name: org/apache/lucene/search/ConstantScoreQuery$ConstantScorer.class
-SHA1-Digest: sS32g1J4R3nrQssLp6gJhlhy/+M=
-
-Name: org/apache/lucene/search/PhraseQuery.class
-SHA1-Digest: fxvZzMO9D7cffiQJUisL7ETCHbI=
-
-Name: org/apache/lucene/search/MatchAllDocsQuery.class
-SHA1-Digest: 0/c1OD1DPdAk0Xj9s84vufa5i8U=
-
-Name: org/apache/lucene/index/IndexWriter$5.class
-SHA1-Digest: ipKgCbCPFGbn5yFsmkLFwJXp3PY=
-
-Name: org/apache/lucene/store/Directory.class
-SHA1-Digest: HVSs9ie8a8nbYDGyBiiLnazG4K0=
-
-Name: org/apache/lucene/search/MultiSearcherThread.class
-SHA1-Digest: f3DlEPXeACHcXW0kapAGs7iBlI4=
-
-Name: org/apache/lucene/search/TopFieldDocCollector.class
-SHA1-Digest: J7rWN7FRp0M1ljrr6r473IctaHk=
-
-Name: org/apache/lucene/analysis/PorterStemFilter.class
-SHA1-Digest: r2MK9sN8xaQCMUhIY5YnAu3yrQQ=
-
-Name: org/apache/lucene/index/SegmentInfo.class
-SHA1-Digest: tAG2BkY3Ig1EXAMGoxrWh4370Zg=
-
-Name: org/apache/lucene/analysis/LowerCaseFilter.class
-SHA1-Digest: 1iwO3GIiTW/5OrvG92PhnULzMDM=
-
-Name: org/apache/lucene/index/Posting.class
-SHA1-Digest: j46POb21t/1Q2k46OA3ZvzFZAIs=
-
-Name: org/apache/lucene/search/QueryFilter.class
-SHA1-Digest: LCL705rmBVhZ7xv96tBzD/Cb/Qg=
-
-Name: org/apache/lucene/queryParser/FastCharStream.class
-SHA1-Digest: oshmewtnf253/FFnPxtEv/ZHBps=
-
-Name: org/apache/lucene/search/HitIterator.class
-SHA1-Digest: Fxux1HUPYjQAPQSqxOdxCPSCs+A=
-
-Name: org/apache/lucene/index/ParallelReader$ParallelTermDocs.class
-SHA1-Digest: cIgEzpTlwqr7ARmacT0RSaBYKjY=
-
-Name: org/apache/lucene/index/FieldInfo.class
-SHA1-Digest: sc1s/aAuqTzV+1CpGyGnA3e2Gsc=
-
-Name: org/apache/lucene/index/TermVectorsWriter$TVField.class
-SHA1-Digest: uNeiCgblbVKtN8HWGmX4S+r0aFQ=
-
-Name: org/apache/lucene/search/BooleanScorer.class
-SHA1-Digest: TB2NGTsUQXVyi+xFqw6XlezqOHc=
-
-Name: org/apache/lucene/index/TermFreqVector.class
-SHA1-Digest: 1zzNq6ebHY3/8Vfu0QChVc5Ohpc=
-
-Name: org/apache/lucene/queryParser/QueryParser$LookaheadSuccess.class
-SHA1-Digest: mT10lpxNHoMFPkZAuvTQSd2TjmI=
-
-Name: org/apache/lucene/index/ParallelReader.class
-SHA1-Digest: hJHZ05ZbT6m4y67xBvw7N2w3krw=
-
-Name: org/apache/lucene/search/BooleanScorer$Collector.class
-SHA1-Digest: n+4ZcIzEq3Ba6AqwuEdHvheSN0I=
-
-Name: org/apache/lucene/search/SortComparator.class
-SHA1-Digest: Hd6FFtq0Caq+MCLc0JATXW/p/po=
-
-Name: org/apache/lucene/search/spans/SpanFirstQuery$1.class
-SHA1-Digest: /e1MMaY/OwmkpYjyA7nFkst6aBU=
-
-Name: org/apache/lucene/search/MultiPhraseQuery.class
-SHA1-Digest: s1Xvbq53ZauPagC+fKWIbUSqThk=
-
-Name: org/apache/lucene/search/QueryTermVector.class
-SHA1-Digest: b9g8vNoS8Dg/ocVrCSdOrey0guE=
-
-Name: org/apache/lucene/search/BooleanClause.class
-SHA1-Digest: M2rcK4Luy9wP0TXgLHkE4BIp1rE=
-
-Name: org/apache/lucene/search/FuzzyTermEnum.class
-SHA1-Digest: gnpLsDH3B+4F60oia8+Kt79sxoA=
-
-Name: org/apache/lucene/index/TermPositions.class
-SHA1-Digest: iS9aGBlZ1qT4LwAHcl5VfSwm48E=
-
-Name: org/apache/lucene/index/SegmentTermEnum.class
-SHA1-Digest: jcXaOop8d48s1QHn0TCFGu/BvbM=
-
-Name: org/apache/lucene/index/SegmentTermVector.class
-SHA1-Digest: eRCJjKIdINnTpRMABNRE0GErZnU=
-
-Name: org/apache/lucene/search/Scorer.class
-SHA1-Digest: GTAMkGqqDzRhBGqZEZJoux9vAUI=
-
-Name: org/apache/lucene/index/ParallelReader$ParallelTermPositions.cla
- ss
-SHA1-Digest: vdAScaxuqoVRmrVWcA0b/NoBXug=
-
-Name: org/apache/lucene/search/FieldSortedHitQueue$1.class
-SHA1-Digest: UwslrcQlrvZKbVuShEdTZoAfWL8=
-
-Name: org/apache/lucene/analysis/TokenFilter.class
-SHA1-Digest: ESIbMh6L7xPrGj7lLw336heiHnA=
-
-Name: org/apache/lucene/analysis/TokenStream.class
-SHA1-Digest: LMWJrhxbRSGa+IKyX/rZohlqbGw=
-
-Name: org/apache/lucene/search/WildcardQuery.class
-SHA1-Digest: +4d02dtzyy6nKCvxOGe1GxpRAFQ=
-
-Name: org/apache/lucene/index/IndexWriter$2.class
-SHA1-Digest: hBVSj62Zsa4nSRYEx8xfJLkkq8A=
-
-Name: about.html
-SHA1-Digest: 606g8JTFVKK8SEHTGMPs4ku0x6k=
-
-Name: org/apache/lucene/analysis/Analyzer.class
-SHA1-Digest: tIVSoruMcHEtdEwiKw3HeFcbyhc=
-
-Name: org/apache/lucene/index/MultipleTermPositions$1.class
-SHA1-Digest: y3nf3/nCRu8yi+EgkI5Ho/LGB0A=
-
-Name: org/apache/lucene/queryParser/QueryParser.class
-SHA1-Digest: LICirs71lFzDvZXUiaIFZYim14E=
-
-Name: org/apache/lucene/index/IndexReader$FieldOption.class
-SHA1-Digest: yGIf+w/OLNGjB3WNLwqrC3OOhII=
-
-Name: org/apache/lucene/document/DateField.class
-SHA1-Digest: phSAs9B8lwprci5xC+GyZvyGu2w=
-
-Name: org/apache/lucene/search/FieldCache$FloatParser.class
-SHA1-Digest: 2F7UlZScmx/hM9HWF/NoqvbNRNk=
-
-Name: org/apache/lucene/analysis/standard/ParseException.class
-SHA1-Digest: TeRVPbyW9zux/QRYn1VqeRUmVk0=
-
-Name: org/apache/lucene/search/MultiTermQuery.class
-SHA1-Digest: mKqxjRg5FQEhwLtqfm8ajDnMTH8=
-
-Name: org/apache/lucene/index/IndexModifier.class
-SHA1-Digest: 3SArf/KaTO8e20H0fVmPj9cxOVg=
-
-Name: org/apache/lucene/search/ConstantScoreQuery$ConstantWeight.class
-SHA1-Digest: v5YDwklGJLs3LGiTZ9lqe1/Ho9s=
-
-Name: org/apache/lucene/search/DateFilter.class
-SHA1-Digest: l6GtJ6iptkd2+lZjC9SrhCLN0RQ=
-
-Name: org/apache/lucene/search/WildcardTermEnum.class
-SHA1-Digest: WJwXGhkrjTo1UbvvfK2KEUgLzpM=
-
-Name: org/apache/lucene/search/ParallelMultiSearcher.class
-SHA1-Digest: SoSh0ZCO3UEsNi4gS8WGkipm6u4=
-
-Name: org/apache/lucene/search/TopDocCollector.class
-SHA1-Digest: PR06RpviepTTbs2V0zdYdcyrxV4=
-
-Name: org/apache/lucene/index/ParallelReader$ParallelTermEnum.class
-SHA1-Digest: 4xNGgTE8OYxr20Gm2VKHi9GutVE=
-
-Name: org/apache/lucene/analysis/Token.class
-SHA1-Digest: DHuG6qSS5C5KUU27bOigrciRa3Q=
-
-Name: org/apache/lucene/document/Field.class
-SHA1-Digest: KGl8aNZy1wdVFGed8qXkVSGZFKE=
-
-Name: org/apache/lucene/search/BooleanQuery$1.class
-SHA1-Digest: K9ZrK/LrTyFGVPTvoCXF2BTG5Fs=
-
-Name: org/apache/lucene/index/SegmentReader$Norm.class
-SHA1-Digest: Ce/jz/SalZI24Xl4Hl6/EVGekgw=
-
-Name: org/apache/lucene/index/FieldInfos.class
-SHA1-Digest: mrLs8m4oawZYdKYKHGMch5CC0uo=
-
-Name: org/apache/lucene/index/Term.class
-SHA1-Digest: 8IB+s6V0CzwIB17/WtrBTYkWp5c=
-
-Name: org/apache/lucene/search/FieldCache$IntParser.class
-SHA1-Digest: GfjQbl6zZjc+iILIQNWZ+Speg2k=
-
-Name: org/apache/lucene/search/BooleanQuery$BooleanWeight2.class
-SHA1-Digest: RRSVtFpqdJAFBP/KGvpS9UQMuFk=
-
-Name: org/apache/lucene/queryParser/QueryParserConstants.class
-SHA1-Digest: gzGcN/Ibxuq8DA/KuSELgoQnwy8=
-
-Name: org/apache/lucene/search/ConstantScoreRangeQuery.class
-SHA1-Digest: pdwLNi84IobYY+X/87uMIa4gTiA=
-
-Name: org/apache/lucene/search/spans/NearSpans.class
-SHA1-Digest: 5nfVQ+u60qpG7K3iq6zri8gQCxI=
-
-Name: org/apache/lucene/search/TermQuery.class
-SHA1-Digest: nAw3TNqihv8kIP3sKzbecCPy3IY=
-
-Name: org/apache/lucene/search/SloppyPhraseScorer.class
-SHA1-Digest: kpGn3kP+YJbtX2wTfLV9h5f1ZQQ=
-
-Name: org/apache/lucene/index/MultiTermDocs.class
-SHA1-Digest: 3Qcbf6bRm+SkmmBLadOBlcbOIko=
-
-Name: org/apache/lucene/index/CompoundFileReader$CSIndexInput.class
-SHA1-Digest: fOKy1TxyhGOsw6u/tb2RUy+31W0=
-
-Name: org/apache/lucene/search/FilteredQuery$1.class
-SHA1-Digest: Atgl8mgT3pIROumJ/yNMxpNvQZU=
-
-Name: org/apache/lucene/search/FuzzyQuery.class
-SHA1-Digest: jQRvApB9SOEIl6BbFOeRmV07u/k=
-
-Name: org/apache/lucene/store/Lock.class
-SHA1-Digest: oAE7Ns57cFrSfLvn2nIb7Mh91/g=
-
-Name: org/apache/lucene/document/DateTools.class
-SHA1-Digest: vwjjGyyQ7yXIOz8Lhzsha+LeP9A=
-
-Name: org/apache/lucene/index/IndexWriter.class
-SHA1-Digest: 2aTyrINyFDG1ADA5vKB9jDuDKjw=
-
-Name: org/apache/lucene/search/MatchAllDocsQuery$MatchAllDocsWeight.cl
- ass
-SHA1-Digest: HMPBRLg5Pxg4Y4YbC8Q5QCH56ks=
-
-Name: org/apache/lucene/search/Query.class
-SHA1-Digest: BYTC3fRKGi0ok3dgbRE8WOQ1pZw=
-
-Name: org/apache/lucene/util/BitVector.class
-SHA1-Digest: K+ea69DGgqnUE5N0hKlMi1tWdvw=
-
-Name: org/apache/lucene/queryParser/Token.class
-SHA1-Digest: C4DtErVRaqgbN6mG0iPi0wdtd9U=
-
-Name: org/apache/lucene/index/TermDocs.class
-SHA1-Digest: I96Q4NkmiSHu9usQUa5XOFODAMc=
-
-Name: org/apache/lucene/index/FieldsWriter.class
-SHA1-Digest: MBSjN1OLGMcH14zcNMrVi6yZd1g=
-
-Name: org/apache/lucene/search/PrefixQuery.class
-SHA1-Digest: 4rCkMusGaylOwMK5LwseQ7lhRns=
-
-Name: org/apache/lucene/analysis/PorterStemmer.class
-SHA1-Digest: Gm0tuF2GCaV2+3jPL7USzrLJwfw=
-
-Name: org/apache/lucene/search/Weight.class
-SHA1-Digest: ITlpv6Zqbh48FPnQMhChk3gLZ80=
-
-Name: org/apache/lucene/search/ExactPhraseScorer.class
-SHA1-Digest: vIkDqUkj1hWXqlreMnsSgqwJAEs=
-
-Name: org/apache/lucene/store/FSIndexInput$Descriptor.class
-SHA1-Digest: 8Ef8hMdgX0dP2CBYOa5Dl3PtvWQ=
-
-Name: org/apache/lucene/index/IndexReader$2.class
-SHA1-Digest: 79Hy+bova28+FloyX7FoVuHZVsM=
-
-Name: org/apache/lucene/search/TopFieldDocs.class
-SHA1-Digest: QINP25DEswgAibI3aSJw9l+uqSI=
-
-Name: org/apache/lucene/analysis/KeywordAnalyzer.class
-SHA1-Digest: cD86XBElctG4hQ1kiAyBH3wJnMc=
-
-Name: org/apache/lucene/search/PhrasePositions.class
-SHA1-Digest: IcC3zPhnRml39EwGfqbhkbrzeS8=
-
-Name: org/apache/lucene/index/SegmentReader.class
-SHA1-Digest: FTp9gqXZV7RzHjItSrh+bEkBmo4=
-
-Name: org/apache/lucene/search/Searcher.class
-SHA1-Digest: HzbGl9c9rFsDQl4kwFxLINA7dGY=
-
-Name: org/apache/lucene/search/FieldSortedHitQueue.class
-SHA1-Digest: I7dxT7TQ+6Q/V1Kba7KXMDl2CXY=
-
-Name: org/apache/lucene/search/DisjunctionSumScorer$ScorerQueue.class
-SHA1-Digest: TW1wrW1IcuTp1VwJzUwUh+al/9k=
-
-Name: org/apache/lucene/index/MultiReader.class
-SHA1-Digest: qk0zrFgwtPCxxZKxWup2TtnMHGg=
-
-Name: org/apache/lucene/search/ConstantScoreQuery.class
-SHA1-Digest: K+ZOSrHlrqjtioTN0151CM81pNk=
-
-Name: org/apache/lucene/search/SortField.class
-SHA1-Digest: TV1JnRtjD54nvyJN7fS3smRpQyw=
-
-Name: org/apache/lucene/index/TermInfo.class
-SHA1-Digest: NDr62CWz3Qkeiul5NcXKOSHji3s=
-
-Name: org/apache/lucene/util/ToStringUtils.class
-SHA1-Digest: RY0n2Q8+mfBEXc9cr5jls4JL5R8=
-
-Name: org/apache/lucene/store/BufferedIndexOutput.class
-SHA1-Digest: Yp3lKLOh3uDQ50v/XRtb+esGtho=
-
-Name: org/apache/lucene/index/MultiTermEnum.class
-SHA1-Digest: xPB3GDvVlUMt7aedaMi9mCOzmeg=
-
-Name: org/apache/lucene/util/Parameter.class
-SHA1-Digest: u3OayJFhJs0ZnTGxbEiTtohOLK4=
-
-Name: org/apache/lucene/search/spans/Spans.class
-SHA1-Digest: kkUVybRufgN7xCfpwojrQh8Jfcg=
-
-Name: org/apache/lucene/search/Similarity.class
-SHA1-Digest: 7/o86tOa7hK8D0aHx5Tv0Qxp0vQ=
-
-Name: org/apache/lucene/search/DefaultSimilarity.class
-SHA1-Digest: bSPAmStF3Ool73ndxYwAbqPl1KU=
-
-Name: org/apache/lucene/search/FieldSortedHitQueue$3.class
-SHA1-Digest: bRlP5iPxfItHEOILQyD6QA1eCso=
-
-Name: org/apache/lucene/search/RemoteSearchable_Stub.class
-SHA1-Digest: Yl+Sy0YYl+WTOx2NSBTImfyrjzw=
-
-Name: org/apache/lucene/analysis/ISOLatin1AccentFilter.class
-SHA1-Digest: YJEG5hBJeBIwgyOI+07B1AiVkWk=
-
-Name: org/apache/lucene/search/FieldCache.class
-SHA1-Digest: 6iTTSM6XO59WuPUz3W7BuBMwxk8=
-
-Name: org/apache/lucene/search/TermScorer.class
-SHA1-Digest: PZu/+PWxQSmvV3rssETvLmpyM6I=
-
-Name: org/apache/lucene/index/TermBuffer.class
-SHA1-Digest: +BBKwYMnqSy7wMSTjJPMeQWx1Pk=
-
-Name: org/apache/lucene/index/IndexWriter$4.class
-SHA1-Digest: nJtK7WGxH+/Culs3gdu1P8HmnT8=
-
-Name: org/apache/lucene/index/IndexReader.class
-SHA1-Digest: acC7pOi02iSBiSpK+2Z+shC/ips=
-
-Name: org/apache/lucene/index/TermEnum.class
-SHA1-Digest: sIvf0kyRY/G1FUuQdWLo2tqrGqc=
-
-Name: org/apache/lucene/search/IndexSearcher$1.class
-SHA1-Digest: CbPX0Tt4EBdyyVArS1rJc9Vo50M=
-
-Name: org/apache/lucene/analysis/CharTokenizer.class
-SHA1-Digest: 5kbj4/Jwt4yMG4NJMwkme+m90OY=
-
-Name: org/apache/lucene/analysis/KeywordTokenizer.class
-SHA1-Digest: DI9MFEDKK/h2bKsKZ8QnOynbsfM=
-
-Name: org/apache/lucene/search/HitCollector.class
-SHA1-Digest: RwQeC1/koC3njYW0/Q8Tg2oYgwM=
-
-Name: org/apache/lucene/search/MultiPhraseQuery$MultiPhraseWeight.clas
- s
-SHA1-Digest: +nAeivQU/DOjqS9tBDhu28j8UBs=
-
-Name: org/apache/lucene/search/PhrasePrefixQuery.class
-SHA1-Digest: t6B7eGTge6q1nySqzjeshB5Fb00=
-
-Name: org/apache/lucene/analysis/de/WordlistLoader.class
-SHA1-Digest: dMKX2ZhElTV3Re9Wv5WG4TeBK3Q=
-
-Name: org/apache/lucene/store/IndexOutput.class
-SHA1-Digest: SE0gulpmKIFsRZ2nIPPSkCKWm2Q=
-
-Name: org/apache/lucene/search/HitQueue.class
-SHA1-Digest: 1Mldeg5/JXq6nleDgsMIVrb9y+U=
-
-Name: org/apache/lucene/search/SimilarityDelegator.class
-SHA1-Digest: iDfU1uAoa6zU3XdvZ/rAZrSfUj4=
-
-Name: org/apache/lucene/index/FieldsReader.class
-SHA1-Digest: yLZMOlUTwvlQAErCVBeZZKnJXLc=
-
-Name: org/apache/lucene/search/spans/SpanOrQuery$1.class
-SHA1-Digest: fe8g4PeuM6gIzKFFtE5ZhZbgGxU=
-
diff --git a/dependencyManifests/org.objectweb.asm_3.2.0.v200909071300.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.objectweb.asm_3.2.0.v200909071300.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 5fdcedc..0000000
--- a/dependencyManifests/org.objectweb.asm_3.2.0.v200909071300.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,520 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.3
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.objectweb.asm
-Export-Package: org.objectweb.asm;version="3.2.0",org.objectweb.asm.co
- mmons;version="3.2.0",org.objectweb.asm.signature;version="3.2.0",org
- .objectweb.asm.tree;version="3.2.0",org.objectweb.asm.tree.analysis;v
- ersion="3.2.0",org.objectweb.asm.util;version="3.2.0",org.objectweb.a
- sm.xml;version="3.2.0"
-Bundle-Version: 3.2.0.v200909071300
-Bundle-ManifestVersion: 2
-
-Name: org/objectweb/asm/xml/Processor$SubdocumentHandlerFactory.class
-SHA1-Digest: IRLJnMucw00HQe5leaIn7CmT8GQ=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$OpcodesRule.class
-SHA1-Digest: 6nAEhtBEso+8+Zf49xjgbyFrF34=
-
-Name: org/objectweb/asm/util/AbstractVisitor.class
-SHA1-Digest: tVMZs8Aq7KyTNJOs+OoYy1f72TM=
-
-Name: org/objectweb/asm/util/CheckMethodAdapter.class
-SHA1-Digest: eL7V8t4lH53vZvYVs9h33U/haFc=
-
-Name: org/objectweb/asm/signature/SignatureWriter.class
-SHA1-Digest: HPJAV23RIOlAzGwMoVui33DnuN4=
-
-Name: org/objectweb/asm/tree/AbstractInsnNode.class
-SHA1-Digest: 3ud3mL3b8p9ltWAKZZ7oBptQhrQ=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$RuleSet.class
-SHA1-Digest: P7YJzHvEC2OH8yUDz2wZjgNeFGA=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$OuterClassRule.class
-SHA1-Digest: D8JrQR9Z5b9r5J/SF81LGucKxI0=
-
-Name: org/objectweb/asm/ByteVector.class
-SHA1-Digest: h4ZyM8B9dY7thBKmXUzu0x13Y5s=
-
-Name: org/objectweb/asm/tree/analysis/SourceInterpreter.class
-SHA1-Digest: 2WPgesQkgGp8/RXySfAGnuTSUcs=
-
-Name: org/objectweb/asm/AnnotationVisitor.class
-SHA1-Digest: UQnecRexGB31Cr2kvGgwghcuRoU=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$LabelRule.class
-SHA1-Digest: /QFTnyt5V8mrN+fNORET+Bf5mrA=
-
-Name: org/objectweb/asm/tree/JumpInsnNode.class
-SHA1-Digest: ZT5Fsmfm2TcjySaNJ2yU3EPt18k=
-
-Name: org/objectweb/asm/commons/JSRInlinerAdapter$Subroutine.class
-SHA1-Digest: oAdEhdePVGjucFwgvPf0/QZIn8o=
-
-Name: org/objectweb/asm/xml/SAXFieldAdapter.class
-SHA1-Digest: b6+QKfUnSgXiKGyZlMkhRpjfduk=
-
-Name: org/objectweb/asm/ClassAdapter.class
-SHA1-Digest: sG+h9Nx43aJ24SAFAmhX5JyEoWY=
-
-Name: org/objectweb/asm/ClassWriter.class
-SHA1-Digest: lxlh7golUn1zGQXvuB1yA18BL14=
-
-Name: org/objectweb/asm/tree/analysis/Frame.class
-SHA1-Digest: 6otWk0F5/4TnMpZlXOFXk8k7YtI=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$LookupSwitchRule.class
-SHA1-Digest: xTR9SXki1Tbeq4ERivaeNWfGZPA=
-
-Name: org/objectweb/asm/MethodVisitor.class
-SHA1-Digest: XWyF4JSLXzdQ3blTUyqFeK71K1o=
-
-Name: org/objectweb/asm/tree/MemberNode.class
-SHA1-Digest: r7nOTK/tk+JWO98Yl0xidvQ0ifc=
-
-Name: org/objectweb/asm/tree/TypeInsnNode.class
-SHA1-Digest: lEEY4vKQs/wrYuOMQR+WB5O0kNg=
-
-Name: org/objectweb/asm/tree/analysis/SmallSet.class
-SHA1-Digest: anfshk1bBQr/rWNOLAdHdIYBr0Y=
-
-Name: org/objectweb/asm/tree/analysis/Value.class
-SHA1-Digest: umvNo9wKI0Z5t2GzuxWN8jPdh4k=
-
-Name: org/objectweb/asm/commons/LocalVariablesSorter.class
-SHA1-Digest: vP0IeoabCJaR3zdNmSREfBXShLs=
-
-Name: org/objectweb/asm/tree/LineNumberNode.class
-SHA1-Digest: 4aGbm34h4RkQSsSt40aDb9ud8ug=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$FrameTypeRule.class
-SHA1-Digest: MVTrxjurBweukkcvEOg8A/LUYXs=
-
-Name: org/objectweb/asm/util/TraceAbstractVisitor.class
-SHA1-Digest: U4GTihzkPOqGnwoIefu2FtgLO3U=
-
-Name: org/objectweb/asm/AnnotationWriter.class
-SHA1-Digest: FmuG+CTjzZcypuTUnTnO7FB50BY=
-
-Name: org/objectweb/asm/commons/GeneratorAdapter.class
-SHA1-Digest: fpgaUrvu85Gnfi/sgXm/y9DrJ+Y=
-
-Name: org/objectweb/asm/xml/Processor$OutputSlicingHandler.class
-SHA1-Digest: eiwNlDsKD3EE2D/WVvPBdQmHQSQ=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$ExceptionRule.class
-SHA1-Digest: 7xMDX6KfTVQ8sIKxjAZxMtKxDQg=
-
-Name: org/objectweb/asm/tree/InsnList$1.class
-SHA1-Digest: jxdwoUhxl+cSuk/Vad29up9hkKs=
-
-Name: org/objectweb/asm/tree/FieldInsnNode.class
-SHA1-Digest: DG5wGiblh5xDqpHF45xDBPoXVFM=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationDefaultRule.cl
- ass
-SHA1-Digest: sXhgnQD6ytDsV7YC8B/tWXbkD3w=
-
-Name: org/objectweb/asm/signature/SignatureVisitor.class
-SHA1-Digest: DenxenpQSJ8ZkbIrDLDnIORqIeg=
-
-Name: org/objectweb/asm/util/ASMifierFieldVisitor.class
-SHA1-Digest: u57BDY+jeu2N+FLz4pnSm+wHCoU=
-
-Name: org/objectweb/asm/tree/LookupSwitchInsnNode.class
-SHA1-Digest: VtdlA51X8LelF/FXyederEOaL+M=
-
-Name: org/objectweb/asm/xml/SAXCodeAdapter.class
-SHA1-Digest: G7mAHjX8WYnGsDuLk08NTdL1s8I=
-
-Name: org/objectweb/asm/util/ASMifierAnnotationVisitor.class
-SHA1-Digest: Moha0L4npqm6bIh5n4/9IKG1ca4=
-
-Name: org/objectweb/asm/xml/Processor$1.class
-SHA1-Digest: VY02tzcvGflUxFJtl9DTesplcFk=
-
-Name: about_files/README.txt
-SHA1-Digest: g+hfjp6RL2xeop0L2gLHmlqdZkM=
-
-Name: org/objectweb/asm/commons/RemappingSignatureAdapter.class
-SHA1-Digest: xJNzU4FusNhuyFzRIqsl4QWK6Q0=
-
-Name: org/objectweb/asm/Frame.class
-SHA1-Digest: 8/3CB7SL0A11IjVxcwA9YBByXd0=
-
-Name: org/objectweb/asm/MethodAdapter.class
-SHA1-Digest: CBaMBHTAVqdtcyccqACLya21N5U=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$Opcode.class
-SHA1-Digest: phl1rJ4ZcRaC+4w4ssWXULQEmPg=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$MaxRule.class
-SHA1-Digest: I317BA+By0H1RMYsRuXHrRLiWg8=
-
-Name: org/objectweb/asm/tree/InsnNode.class
-SHA1-Digest: vC+88k/JTevh3L73VNg4stN/0bA=
-
-Name: org/objectweb/asm/tree/analysis/SourceValue.class
-SHA1-Digest: nqxOTo/7dSXuRgLxMtXj8N/Ok98=
-
-Name: org/objectweb/asm/tree/InnerClassNode.class
-SHA1-Digest: pEOWq01oj7BmhKWosLBtXOXE6Q8=
-
-Name: org/objectweb/asm/tree/LabelNode.class
-SHA1-Digest: PdzjM3fjKYjvGt56p3jMwHI6zYU=
-
-Name: org/objectweb/asm/tree/analysis/Subroutine.class
-SHA1-Digest: VEH4EsYcgrbYaCZBHREGdKxN5hE=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$FrameRule.class
-SHA1-Digest: ltmo3xrXYpULi7Wj1K+lXue1FOU=
-
-Name: org/objectweb/asm/commons/Method.class
-SHA1-Digest: XWef2eUPLlfEHe0u0jhuFu27Cas=
-
-Name: org/objectweb/asm/commons/InstructionAdapter.class
-SHA1-Digest: N/njcXj5ROpW19md2jKB5GSj8kA=
-
-Name: org/objectweb/asm/util/TraceFieldVisitor.class
-SHA1-Digest: jvDDCoH5PH4mUaaWa0kxPx7myw4=
-
-Name: org/objectweb/asm/util/CheckMethodAdapter$1.class
-SHA1-Digest: QaEcobQ1/7qZfizGWppVIO58OFA=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$OpcodeGroup.class
-SHA1-Digest: obho4UaPGv7y2hnzjtVY6GgwlaE=
-
-Name: org/objectweb/asm/signature/SignatureReader.class
-SHA1-Digest: vk56OWDIbFd5xWa4FyNBl+Rc+Kk=
-
-Name: org/objectweb/asm/MethodWriter.class
-SHA1-Digest: 1VcoZgt+3jK9m694wYBd9p3nKM0=
-
-Name: about_files/LICENSE.txt
-SHA1-Digest: j2BeL98mo7ztDyqaEc5IJfnL2Q4=
-
-Name: org/objectweb/asm/xml/SAXClassAdapter.class
-SHA1-Digest: DXfn9mg3ag9r+FYHr6bCsdsSFIM=
-
-Name: org/objectweb/asm/xml/Processor$SAXWriterFactory.class
-SHA1-Digest: hcIU5AlK6Rg6p4OFBZUQVyCzQjE=
-
-Name: org/objectweb/asm/Type.class
-SHA1-Digest: +Q5udvHkBDr1MeGVdQtq0EXXl0s=
-
-Name: org/objectweb/asm/commons/Remapper.class
-SHA1-Digest: uL1tIWzAaPTviLE0Rus2iybo1YM=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueRule.clas
- s
-SHA1-Digest: /tmOGK+Uh9n3NIchYUJ5Kw1k/oY=
-
-Name: org/objectweb/asm/tree/LdcInsnNode.class
-SHA1-Digest: xrVsKJm2iQgaUF9Ngszl3bzRhVs=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$LookupSwitchLabelRule.cl
- ass
-SHA1-Digest: YV7f8lqABKILqNF88Tb0Hu8C/uI=
-
-Name: org/objectweb/asm/tree/IntInsnNode.class
-SHA1-Digest: ldzNDWzyE8eFAC3Hb/K64NgHWLU=
-
-Name: org/objectweb/asm/tree/analysis/BasicValue.class
-SHA1-Digest: u+ajv9i+fPQu35JqSIx3VZFB5fU=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$InterfacesRule.class
-SHA1-Digest: Jlaz19FDzjkW8wLgzbAd0mj7RFw=
-
-Name: org/objectweb/asm/commons/JSRInlinerAdapter.class
-SHA1-Digest: Vh1W3a7SabgnnOTgAhQKx1lXTOw=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$SourceRule.class
-SHA1-Digest: 7QzD7amb7F9H6z7u8uJo6FLL1XA=
-
-Name: org/objectweb/asm/commons/CodeSizeEvaluator.class
-SHA1-Digest: JLljG0VtqfiHbHyK0g0ssoXQiTo=
-
-Name: org/objectweb/asm/commons/SerialVersionUIDAdder.class
-SHA1-Digest: hySS/J//j/qRD8eE5b1hIvMVHU0=
-
-Name: org/objectweb/asm/ClassReader.class
-SHA1-Digest: q9zMQ2joqNDyB3v9/lhj9ykJWeg=
-
-Name: about.html
-SHA1-Digest: Pb3bKmCEKrJSO6koFKmxLZ5w78U=
-
-Name: org/objectweb/asm/util/ASMifierClassVisitor.class
-SHA1-Digest: J+jE/eN8ovotfqqkpwHWNNvd4ec=
-
-Name: org/objectweb/asm/util/CheckFieldAdapter.class
-SHA1-Digest: 9TsvqSjZ1ShfcnjhVNRlF8TUz90=
-
-Name: org/objectweb/asm/tree/AnnotationNode.class
-SHA1-Digest: yWBnFAyxolE1o3AZSm5DltsN8xA=
-
-Name: org/objectweb/asm/util/CheckSignatureAdapter.class
-SHA1-Digest: fOlTXO7sisxUUoU2GAoS5xAUv+E=
-
-Name: org/objectweb/asm/util/CheckAnnotationAdapter.class
-SHA1-Digest: msNK6I+i+m40dvLSnzQLJWbULMg=
-
-Name: org/objectweb/asm/commons/JSRInlinerAdapter$1.class
-SHA1-Digest: 8sBeJr95ErmH2gAv0r9i6bEf9Yw=
-
-Name: org/objectweb/asm/Item.class
-SHA1-Digest: u2HwR+Leq4I0TAxbXj+uS7QlWvw=
-
-Name: org/objectweb/asm/util/TraceAnnotationVisitor.class
-SHA1-Digest: zFw28cbyz3V6NpHvYadyqT/8Y1E=
-
-Name: org/objectweb/asm/tree/analysis/AnalyzerException.class
-SHA1-Digest: SH8CzSiMmHxMd/bnWkB+FeZDGGw=
-
-Name: org/objectweb/asm/tree/IincInsnNode.class
-SHA1-Digest: 7bZTrS9yacS4Vg6cd08tKDCsJsE=
-
-Name: org/objectweb/asm/tree/FrameNode.class
-SHA1-Digest: sqSthxQKJfeMqluOEpwYFhi8ejc=
-
-Name: org/objectweb/asm/xml/ASMContentHandler.class
-SHA1-Digest: M6PXpbjoHoWdAqecbBF6J3rQ4wM=
-
-Name: org/objectweb/asm/Label.class
-SHA1-Digest: 5oU9OGYiW2Pn4hjoN26dLqf+Z8k=
-
-Name: org/objectweb/asm/tree/MethodInsnNode.class
-SHA1-Digest: aWfe0NHpqTp5Ft3eMc1f+gTsMVk=
-
-Name: org/objectweb/asm/tree/MultiANewArrayInsnNode.class
-SHA1-Digest: bQR874E6oSxJ5rXxtpHoiY67EU0=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueArrayRule
- .class
-SHA1-Digest: niN72cpSZGnRhjlouGPAYLWGMq8=
-
-Name: org/objectweb/asm/util/TraceMethodVisitor.class
-SHA1-Digest: K4rcGUcUW24+N+eGk4ZD0Y1NBn8=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$LocalVarRule.class
-SHA1-Digest: Rgua1UYDJGEfzrFsUISyy3zR7m8=
-
-Name: org/objectweb/asm/xml/Processor$InputSlicingHandler.class
-SHA1-Digest: G+Ax5kcWIEh+7GdwSIlzhQSiWKQ=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$TryCatchRule.class
-SHA1-Digest: DKoP68Q/SBrj5WT2f6xez8JifOI=
-
-Name: org/objectweb/asm/commons/RemappingAnnotationAdapter.class
-SHA1-Digest: vZfz8aOYPqTNVM6Fu9V5TbUGOC0=
-
-Name: org/objectweb/asm/util/TraceClassVisitor.class
-SHA1-Digest: QRkAjGy7g+HlbvX4Hea2Kqb6Qhg=
-
-Name: org/objectweb/asm/xml/Processor$ZipEntryElement.class
-SHA1-Digest: V+gN98rxE4ZT31622nKyi/TZXys=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$1.class
-SHA1-Digest: UsgmbbpFXDnf4mekRkUGs7qO6ac=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$ExceptionsRule.class
-SHA1-Digest: +q3LAcxsdgDck3xw44vby0BlZWI=
-
-Name: org/objectweb/asm/tree/analysis/BasicVerifier.class
-SHA1-Digest: W+zQ+de/KfqSflNq+pkYY1A13CM=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$ClassRule.class
-SHA1-Digest: N9OTGu9X5iQ6pU4uGrabNoEaa98=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$InterfaceRule.class
-SHA1-Digest: PlXOJT3jubWutfWOS4L5+yaP6es=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$FieldRule.class
-SHA1-Digest: tw2TrKcqdR5yOct57lZ9e9+Qsss=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationParameterRule.
- class
-SHA1-Digest: 1+AtncmccYk+UNlBnbsjRQucDFo=
-
-Name: org/objectweb/asm/Handler.class
-SHA1-Digest: 7slFCwpzMai2GjSAMIoYDyjjkNM=
-
-Name: org/objectweb/asm/tree/LocalVariableNode.class
-SHA1-Digest: cdUfT0n1g0uiJ5KnpGfe/V3faj0=
-
-Name: org/objectweb/asm/tree/VarInsnNode.class
-SHA1-Digest: iONkO5hz0yyMfIESLEXJuuQSCu4=
-
-Name: org/objectweb/asm/commons/RemappingMethodAdapter.class
-SHA1-Digest: FQ6mgaNFT6lBrP8Tpgr9tlZu17Y=
-
-Name: org/objectweb/asm/FieldWriter.class
-SHA1-Digest: AVLwL6LPOTjaRJYzkwOVktJR0Dc=
-
-Name: org/objectweb/asm/xml/SAXAdapter.class
-SHA1-Digest: Rq0XGG1YBhNZ/s/0wS4GnqjKkeU=
-
-Name: org/objectweb/asm/xml/Processor$ContentHandlerFactory.class
-SHA1-Digest: Iql3AcTuk/Zv7KT1J682FAagE6o=
-
-Name: org/objectweb/asm/Edge.class
-SHA1-Digest: zPhU4kuh2C3K2hX7JxP3HRTWciQ=
-
-Name: org/objectweb/asm/commons/StaticInitMerger.class
-SHA1-Digest: CEb0IMAmNTzKt9hH9q7DFJXwr6o=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
-
-Name: org/objectweb/asm/util/ASMifierAbstractVisitor.class
-SHA1-Digest: iwAhqNDyL1BHfSFnZfrd6RIMFq8=
-
-Name: org/objectweb/asm/tree/MethodNode.class
-SHA1-Digest: ARt9uAC8EXHdxhpyIGa/Bvcmf8Q=
-
-Name: org/objectweb/asm/xml/Processor$ProtectedInputStream.class
-SHA1-Digest: vBANXwaSsHj+RhBWagXgXxqkYS8=
-
-Name: org/objectweb/asm/tree/analysis/Interpreter.class
-SHA1-Digest: TGyQTdIapOWWZCMxzp2qP24URLg=
-
-Name: org/objectweb/asm/util/ASMifiable.class
-SHA1-Digest: gc/zNMznah6L9OMNiYH1VJ9u3Fo=
-
-Name: org/objectweb/asm/xml/Processor.class
-SHA1-Digest: hpFDjSzpzfci6PLqgu7+Xf4dXx8=
-
-Name: org/objectweb/asm/tree/analysis/Analyzer.class
-SHA1-Digest: Ii+3w7PXpEfUp5F0qRU/218t9Uc=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$LineNumberRule.class
-SHA1-Digest: 9et/hOWpBROIuG+/k+xkJK+MTRs=
-
-Name: org/objectweb/asm/Attribute.class
-SHA1-Digest: vSTLCi1osXUWM/PbcGSBbi3YEuk=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueAnnotatio
- nRule.class
-SHA1-Digest: agaZ0tlyW10p+fYfQU8LgdJ2ddQ=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$Rule.class
-SHA1-Digest: n9CeqYim0bgtoyHcECMF8svTcZc=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$MethodRule.class
-SHA1-Digest: rnJXYV8UK9InZWOOQ8srNnBwd3c=
-
-Name: org/objectweb/asm/commons/SimpleRemapper.class
-SHA1-Digest: zv/T3hyl6UOT5r4B6pkE/OIcU2s=
-
-Name: org/objectweb/asm/tree/MethodNode$1.class
-SHA1-Digest: WtSvtR/B+yqOfEIoRnTyc9ghUHo=
-
-Name: org/objectweb/asm/util/CheckClassAdapter.class
-SHA1-Digest: Nms3O04QL5NpaG0H14CaduKSBU4=
-
-Name: org/objectweb/asm/FieldVisitor.class
-SHA1-Digest: RsQ0nH9tT2R9G0QyTkzysSutYuc=
-
-Name: org/objectweb/asm/commons/RemappingFieldAdapter.class
-SHA1-Digest: WgkGC80DuWf5goaTo6apndXfr4U=
-
-Name: org/objectweb/asm/commons/TableSwitchGenerator.class
-SHA1-Digest: XwcnM4llF8WZlI/6bzZS+t4vcWU=
-
-Name: org/objectweb/asm/xml/Processor$TransformerHandlerFactory.class
-SHA1-Digest: T63icHvIwoDqm5rkuigZo/Ihtso=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueEnumRule.
- class
-SHA1-Digest: 5v7E7TumkN2CrUnGlKRG0JfcJJ8=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$TableSwitchLabelRule.cla
- ss
-SHA1-Digest: hshWVfWz+nGCeCZCPnkdtMSlxxo=
-
-Name: org/objectweb/asm/tree/TryCatchBlockNode.class
-SHA1-Digest: nxjxIm42S5nwsdFxwP0yRaOiMTU=
-
-Name: org/objectweb/asm/tree/InsnList$InsnListIterator.class
-SHA1-Digest: 3eWhjGGpTCIbXnkwE8fcYmZ7WtU=
-
-Name: org/objectweb/asm/util/ASMifierMethodVisitor.class
-SHA1-Digest: bgim3+SBylSeWcHpVejW6peu0qc=
-
-Name: org/objectweb/asm/xml/Processor$ASMContentHandlerFactory.class
-SHA1-Digest: aIIdIIZh6DHrAMLYI3nMY/uhWac=
-
-Name: org/objectweb/asm/commons/EmptyVisitor.class
-SHA1-Digest: ghmu5cSBwOS1Rak+5iLvUhtAPjs=
-
-Name: org/objectweb/asm/tree/ClassNode.class
-SHA1-Digest: zqBnODeb+oeCViRL1aiCYXMZB+4=
-
-Name: plugin.properties
-SHA1-Digest: broAt0N2NCO6dmEOZSReP9HHaVc=
-
-Name: org/objectweb/asm/tree/FieldNode.class
-SHA1-Digest: gIE6CQON87o29iqIhjzRcyzXXc8=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$InnerClassRule.class
-SHA1-Digest: ETHmGw4G8zrRcXRlmRPZdxI1zsU=
-
-Name: org/objectweb/asm/util/TraceSignatureVisitor.class
-SHA1-Digest: tLGOLzBjyFpysmpUNzZ576OmHrg=
-
-Name: org/objectweb/asm/tree/TableSwitchInsnNode.class
-SHA1-Digest: DdbiGEY+a5ySYT32U8IHKSXOziA=
-
-Name: org/objectweb/asm/xml/Processor$SingleDocElement.class
-SHA1-Digest: ygtbYlpFZeaixpnllKygxLwEXMI=
-
-Name: org/objectweb/asm/tree/InsnList.class
-SHA1-Digest: +MYIPQxeKoYUwWZJmCNV9h/g128=
-
-Name: org/objectweb/asm/commons/AdviceAdapter.class
-SHA1-Digest: PwFMoK8/T+Gm7t33cVp7pBsIB2w=
-
-Name: org/objectweb/asm/xml/Processor$SAXWriter.class
-SHA1-Digest: Q0fQrePnZOGod+OaXW6f6+QgUDc=
-
-Name: org/objectweb/asm/tree/analysis/SimpleVerifier.class
-SHA1-Digest: cWtugHusbNXtBlmSnH5iDgM56rs=
-
-Name: org/objectweb/asm/xml/SAXAnnotationAdapter.class
-SHA1-Digest: r3BQAFpY7/Q2nTxEiyHtIlxBDAQ=
-
-Name: org/objectweb/asm/tree/analysis/BasicInterpreter.class
-SHA1-Digest: Qqynj1ZI6tDZcHqo0K67hrQB+9E=
-
-Name: org/objectweb/asm/commons/JSRInlinerAdapter$Instantiation.class
-SHA1-Digest: QFmfvsSjrQ9FcqYsMH442tTZfrY=
-
-Name: org/objectweb/asm/commons/AnalyzerAdapter.class
-SHA1-Digest: 4enpDz2sTNEtcF6/nlLP3rm90ck=
-
-Name: org/objectweb/asm/util/Traceable.class
-SHA1-Digest: HqsPJ6VdYlqA2zfcbaEFZHi5JlY=
-
-Name: org/objectweb/asm/Opcodes.class
-SHA1-Digest: kZovfm82Efc7mxvoDryLJq42IWA=
-
-Name: org/objectweb/asm/xml/Processor$EntryElement.class
-SHA1-Digest: wSv5vSSIZmVGc6X96zR4zgeyOaw=
-
-Name: org/objectweb/asm/ClassVisitor.class
-SHA1-Digest: rHZ01JJcZ/yuuHU2MWVSh+gkdmA=
-
-Name: org/objectweb/asm/commons/RemappingClassAdapter.class
-SHA1-Digest: OSJ2ySTT/e+q1LPqe++Gfptwa40=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationRule.class
-SHA1-Digest: 5uAmOEdZEg8jqv/pHMM544PclNY=
-
-Name: org/objectweb/asm/xml/ASMContentHandler$TableSwitchRule.class
-SHA1-Digest: WKbzAXrPew2jURpwEnv8Wz71LxA=
-
-Name: org/objectweb/asm/commons/SerialVersionUIDAdder$Item.class
-SHA1-Digest: gnwpyOJGWyLNa36ns62ubxr8gPI=
-
diff --git a/dependencyManifests/org.objectweb.asm_3.3.1.v201101071600.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.objectweb.asm_3.3.1.v201101071600.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..dcab626
--- /dev/null
+++ b/dependencyManifests/org.objectweb.asm_3.3.1.v201101071600.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,519 @@
+Manifest-Version: 1.0
+Bundle-DocURL: http://asm.objectweb.org
+Implementation-Vendor: France Telecom R&D
+Bundle-RequiredExecutionEnvironment: J2SE-1.3
+Bundle-SymbolicName: org.objectweb.asm
+Export-Package: org.objectweb.asm;version=3.3.1,org.objectweb.asm.sign
+ ature;version=3.3.1,org.objectweb.asm.commons;version=3.3.1,org.objec
+ tweb.asm.tree;version=3.3.1,org.objectweb.asm.tree.analysis;version=3
+ .3.1,org.objectweb.asm.util;version=3.3.1,org.objectweb.asm.xml;versi
+ on=3.3.1
+Bundle-Version: 3.3.1.v201101071600
+Ant-Version: Apache Ant 1.7.1
+Bundle-Vendor: %providerName
+Bundle-Name: %pluginName
+Created-By: 14.3-b01 (Sun Microsystems Inc.)
+Implementation-Version: 3.3.1
+Implementation-Title: ASM all classes
+Bundle-ManifestVersion: 2
+
+Name: org/objectweb/asm/xml/Processor$SubdocumentHandlerFactory.class
+SHA1-Digest: jNBg9c+W6ZKPQTdrp0o3rKZAZzw=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$OpcodesRule.class
+SHA1-Digest: iI0LSCexIQVgoLeYIJC51R65w+I=
+
+Name: org/objectweb/asm/util/AbstractVisitor.class
+SHA1-Digest: tVMZs8Aq7KyTNJOs+OoYy1f72TM=
+
+Name: org/objectweb/asm/util/CheckMethodAdapter.class
+SHA1-Digest: SC7rXqulwjrBnV4XDzhV9BFPOMo=
+
+Name: org/objectweb/asm/signature/SignatureWriter.class
+SHA1-Digest: HPJAV23RIOlAzGwMoVui33DnuN4=
+
+Name: org/objectweb/asm/tree/AbstractInsnNode.class
+SHA1-Digest: 3ud3mL3b8p9ltWAKZZ7oBptQhrQ=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$RuleSet.class
+SHA1-Digest: JIvii9wW5KyQp+F3/VJ/RXKgtgg=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$OuterClassRule.class
+SHA1-Digest: XdQixzjYv6+IojTV6G1FBxPaF0Y=
+
+Name: org/objectweb/asm/ByteVector.class
+SHA1-Digest: h4ZyM8B9dY7thBKmXUzu0x13Y5s=
+
+Name: org/objectweb/asm/tree/analysis/SourceInterpreter.class
+SHA1-Digest: 2WPgesQkgGp8/RXySfAGnuTSUcs=
+
+Name: org/objectweb/asm/AnnotationVisitor.class
+SHA1-Digest: UQnecRexGB31Cr2kvGgwghcuRoU=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$LabelRule.class
+SHA1-Digest: Kgc5zN9QkHafH3c+XY8wZO2mg7c=
+
+Name: org/objectweb/asm/tree/JumpInsnNode.class
+SHA1-Digest: ZT5Fsmfm2TcjySaNJ2yU3EPt18k=
+
+Name: org/objectweb/asm/commons/JSRInlinerAdapter$Subroutine.class
+SHA1-Digest: oAdEhdePVGjucFwgvPf0/QZIn8o=
+
+Name: org/objectweb/asm/xml/SAXFieldAdapter.class
+SHA1-Digest: b6+QKfUnSgXiKGyZlMkhRpjfduk=
+
+Name: org/objectweb/asm/ClassAdapter.class
+SHA1-Digest: sG+h9Nx43aJ24SAFAmhX5JyEoWY=
+
+Name: org/objectweb/asm/ClassWriter.class
+SHA1-Digest: YK6yGl1oVXTVuS3QbBjAVsr1Tvk=
+
+Name: org/objectweb/asm/tree/analysis/Frame.class
+SHA1-Digest: WbZDuwDtToCi49Hk49w7nQLBNXE=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$LookupSwitchRule.class
+SHA1-Digest: xGGDjQm3IWvMNOmuKr5rTs/Eg8I=
+
+Name: org/objectweb/asm/MethodVisitor.class
+SHA1-Digest: XWyF4JSLXzdQ3blTUyqFeK71K1o=
+
+Name: org/objectweb/asm/tree/MemberNode.class
+SHA1-Digest: r7nOTK/tk+JWO98Yl0xidvQ0ifc=
+
+Name: org/objectweb/asm/tree/TypeInsnNode.class
+SHA1-Digest: lEEY4vKQs/wrYuOMQR+WB5O0kNg=
+
+Name: org/objectweb/asm/tree/analysis/SmallSet.class
+SHA1-Digest: anfshk1bBQr/rWNOLAdHdIYBr0Y=
+
+Name: org/objectweb/asm/tree/analysis/Value.class
+SHA1-Digest: umvNo9wKI0Z5t2GzuxWN8jPdh4k=
+
+Name: org/objectweb/asm/commons/LocalVariablesSorter.class
+SHA1-Digest: 0E2NkLgZ6wU55NxJR6oJZRPdBSI=
+
+Name: org/objectweb/asm/tree/LineNumberNode.class
+SHA1-Digest: 4aGbm34h4RkQSsSt40aDb9ud8ug=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$FrameTypeRule.class
+SHA1-Digest: 3Vz5juoFUvZ1hBysIwW/MNhdspw=
+
+Name: org/objectweb/asm/util/TraceAbstractVisitor.class
+SHA1-Digest: U4GTihzkPOqGnwoIefu2FtgLO3U=
+
+Name: org/objectweb/asm/AnnotationWriter.class
+SHA1-Digest: FmuG+CTjzZcypuTUnTnO7FB50BY=
+
+Name: org/objectweb/asm/commons/GeneratorAdapter.class
+SHA1-Digest: fpgaUrvu85Gnfi/sgXm/y9DrJ+Y=
+
+Name: org/objectweb/asm/xml/Processor$OutputSlicingHandler.class
+SHA1-Digest: r+G0vffEj1p2Foi6iN/2YHtXtz8=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$ExceptionRule.class
+SHA1-Digest: 0SnYqt5ryKMP1d9mTr6riFdhqQg=
+
+Name: org/objectweb/asm/tree/FieldInsnNode.class
+SHA1-Digest: DG5wGiblh5xDqpHF45xDBPoXVFM=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationDefaultRule.cl
+ ass
+SHA1-Digest: F9P4R7eVghM5s2NqGn8zt+tXoqY=
+
+Name: org/objectweb/asm/signature/SignatureVisitor.class
+SHA1-Digest: DenxenpQSJ8ZkbIrDLDnIORqIeg=
+
+Name: org/objectweb/asm/util/ASMifierFieldVisitor.class
+SHA1-Digest: u57BDY+jeu2N+FLz4pnSm+wHCoU=
+
+Name: org/objectweb/asm/tree/LookupSwitchInsnNode.class
+SHA1-Digest: VtdlA51X8LelF/FXyederEOaL+M=
+
+Name: org/objectweb/asm/xml/SAXCodeAdapter.class
+SHA1-Digest: G7mAHjX8WYnGsDuLk08NTdL1s8I=
+
+Name: org/objectweb/asm/util/ASMifierAnnotationVisitor.class
+SHA1-Digest: Moha0L4npqm6bIh5n4/9IKG1ca4=
+
+Name: about_files/README.txt
+SHA1-Digest: g+hfjp6RL2xeop0L2gLHmlqdZkM=
+
+Name: org/objectweb/asm/commons/RemappingSignatureAdapter.class
+SHA1-Digest: xJNzU4FusNhuyFzRIqsl4QWK6Q0=
+
+Name: org/objectweb/asm/Frame.class
+SHA1-Digest: 8/3CB7SL0A11IjVxcwA9YBByXd0=
+
+Name: org/objectweb/asm/MethodAdapter.class
+SHA1-Digest: CBaMBHTAVqdtcyccqACLya21N5U=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$Opcode.class
+SHA1-Digest: PDx4NZ9mYKiC7H28FGIrS4ygIi0=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$MaxRule.class
+SHA1-Digest: /1YtfA1VhbgQSD1npTZKQ/rdl3c=
+
+Name: org/objectweb/asm/tree/InsnNode.class
+SHA1-Digest: vC+88k/JTevh3L73VNg4stN/0bA=
+
+Name: org/objectweb/asm/tree/analysis/SourceValue.class
+SHA1-Digest: nqxOTo/7dSXuRgLxMtXj8N/Ok98=
+
+Name: org/objectweb/asm/tree/InnerClassNode.class
+SHA1-Digest: pEOWq01oj7BmhKWosLBtXOXE6Q8=
+
+Name: org/objectweb/asm/tree/LabelNode.class
+SHA1-Digest: PdzjM3fjKYjvGt56p3jMwHI6zYU=
+
+Name: org/objectweb/asm/tree/analysis/Subroutine.class
+SHA1-Digest: VEH4EsYcgrbYaCZBHREGdKxN5hE=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$FrameRule.class
+SHA1-Digest: sylJPV/xra1L9MJt8xtEpPcBYyU=
+
+Name: org/objectweb/asm/commons/Method.class
+SHA1-Digest: XWef2eUPLlfEHe0u0jhuFu27Cas=
+
+Name: org/objectweb/asm/commons/InstructionAdapter.class
+SHA1-Digest: N/njcXj5ROpW19md2jKB5GSj8kA=
+
+Name: org/objectweb/asm/util/TraceFieldVisitor.class
+SHA1-Digest: jvDDCoH5PH4mUaaWa0kxPx7myw4=
+
+Name: org/objectweb/asm/util/CheckMethodAdapter$1.class
+SHA1-Digest: GkWLqvZRGD6eoXgvKUATmi4wg6I=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$OpcodeGroup.class
+SHA1-Digest: obho4UaPGv7y2hnzjtVY6GgwlaE=
+
+Name: org/objectweb/asm/signature/SignatureReader.class
+SHA1-Digest: vk56OWDIbFd5xWa4FyNBl+Rc+Kk=
+
+Name: org/objectweb/asm/MethodWriter.class
+SHA1-Digest: sFAy7hmBGkuP3ucLv4qBFrXVeuw=
+
+Name: about_files/LICENSE.txt
+SHA1-Digest: j2BeL98mo7ztDyqaEc5IJfnL2Q4=
+
+Name: org/objectweb/asm/xml/SAXClassAdapter.class
+SHA1-Digest: DXfn9mg3ag9r+FYHr6bCsdsSFIM=
+
+Name: org/objectweb/asm/xml/Processor$SAXWriterFactory.class
+SHA1-Digest: 7Rhw91uB2J5u/9iiCEcCPsnBUHA=
+
+Name: org/objectweb/asm/Type.class
+SHA1-Digest: 3J6+fZZ+ACY1WTslhw9ucbG0748=
+
+Name: org/objectweb/asm/commons/Remapper.class
+SHA1-Digest: uL1tIWzAaPTviLE0Rus2iybo1YM=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueRule.clas
+ s
+SHA1-Digest: f65xflthl3iXtJDlX+uSNGG8k+Y=
+
+Name: org/objectweb/asm/tree/LdcInsnNode.class
+SHA1-Digest: xrVsKJm2iQgaUF9Ngszl3bzRhVs=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$LookupSwitchLabelRule.cl
+ ass
+SHA1-Digest: WmgYNlK3t/VjLd/VzmxXz/zgizY=
+
+Name: org/objectweb/asm/tree/IntInsnNode.class
+SHA1-Digest: ldzNDWzyE8eFAC3Hb/K64NgHWLU=
+
+Name: org/objectweb/asm/tree/analysis/BasicValue.class
+SHA1-Digest: uyqj9D8C8X/it1yGj6fmAmTIKSo=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$InterfacesRule.class
+SHA1-Digest: JAsviO4LTPy3XWucpOKQ+Vm4szM=
+
+Name: org/objectweb/asm/commons/JSRInlinerAdapter.class
+SHA1-Digest: ULobaqw7mM5kAXPp6dI60zbZy+8=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$SourceRule.class
+SHA1-Digest: IurtRN2/IgxLDTllPR81EgvXvmI=
+
+Name: org/objectweb/asm/commons/CodeSizeEvaluator.class
+SHA1-Digest: JLljG0VtqfiHbHyK0g0ssoXQiTo=
+
+Name: org/objectweb/asm/commons/SerialVersionUIDAdder.class
+SHA1-Digest: Tugv0GEB2ZeU5Y2oWlDpJ3Gaigo=
+
+Name: org/objectweb/asm/ClassReader.class
+SHA1-Digest: X8Qxtq+y0k6v3SIhslQbP1bq65k=
+
+Name: about.html
+SHA1-Digest: ydS7k3ZLlsTeMmEg6RBxk9Ptn7Q=
+
+Name: org/objectweb/asm/util/ASMifierClassVisitor.class
+SHA1-Digest: J+jE/eN8ovotfqqkpwHWNNvd4ec=
+
+Name: org/objectweb/asm/util/CheckFieldAdapter.class
+SHA1-Digest: 9TsvqSjZ1ShfcnjhVNRlF8TUz90=
+
+Name: org/objectweb/asm/tree/AnnotationNode.class
+SHA1-Digest: yWBnFAyxolE1o3AZSm5DltsN8xA=
+
+Name: org/objectweb/asm/util/CheckSignatureAdapter.class
+SHA1-Digest: fOlTXO7sisxUUoU2GAoS5xAUv+E=
+
+Name: org/objectweb/asm/util/CheckAnnotationAdapter.class
+SHA1-Digest: msNK6I+i+m40dvLSnzQLJWbULMg=
+
+Name: org/objectweb/asm/Item.class
+SHA1-Digest: u2HwR+Leq4I0TAxbXj+uS7QlWvw=
+
+Name: org/objectweb/asm/util/TraceAnnotationVisitor.class
+SHA1-Digest: zFw28cbyz3V6NpHvYadyqT/8Y1E=
+
+Name: org/objectweb/asm/tree/analysis/AnalyzerException.class
+SHA1-Digest: AKx9IC+kTEx4gZa2De12RsFAcRw=
+
+Name: org/objectweb/asm/tree/IincInsnNode.class
+SHA1-Digest: 7bZTrS9yacS4Vg6cd08tKDCsJsE=
+
+Name: org/objectweb/asm/tree/FrameNode.class
+SHA1-Digest: 80QMdj4xzHgQGULYAc+bNRP6jnk=
+
+Name: org/objectweb/asm/xml/ASMContentHandler.class
+SHA1-Digest: WQ4Va3iOgTJlmw23RlHfp82Ya5k=
+
+Name: org/objectweb/asm/Label.class
+SHA1-Digest: AKoFTbIyG/JPBitg15Th9uMrQw4=
+
+Name: org/objectweb/asm/tree/MethodInsnNode.class
+SHA1-Digest: aWfe0NHpqTp5Ft3eMc1f+gTsMVk=
+
+Name: org/objectweb/asm/tree/MultiANewArrayInsnNode.class
+SHA1-Digest: bQR874E6oSxJ5rXxtpHoiY67EU0=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueArrayRule
+ .class
+SHA1-Digest: oHzl3JdCwf9nA/ZFnumoHI8CtKo=
+
+Name: org/objectweb/asm/util/TraceMethodVisitor.class
+SHA1-Digest: K4rcGUcUW24+N+eGk4ZD0Y1NBn8=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$LocalVarRule.class
+SHA1-Digest: x6kxIP3KKdQPV4B1Op0k7UQz5Ak=
+
+Name: org/objectweb/asm/xml/Processor$InputSlicingHandler.class
+SHA1-Digest: CK34F97D2+4hBshmICWuYl7Zu7U=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$TryCatchRule.class
+SHA1-Digest: XFXb3AfNXDwxYNPgoj5BLkhHY5c=
+
+Name: org/objectweb/asm/commons/TryCatchBlockSorter$1.class
+SHA1-Digest: RANtj4I+tIPl76+cAYY/oG0vT9w=
+
+Name: org/objectweb/asm/commons/RemappingAnnotationAdapter.class
+SHA1-Digest: h2R7GCel7tlC3DfBvKIq+0+hgj4=
+
+Name: org/objectweb/asm/util/TraceClassVisitor.class
+SHA1-Digest: dO978Au88FUa63voe8kXrBCD8Rw=
+
+Name: org/objectweb/asm/xml/Processor$ZipEntryElement.class
+SHA1-Digest: jDooCRz4hTcgdUKpcDgtLkciCH0=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$ExceptionsRule.class
+SHA1-Digest: wB+bJXQtYvcwu3rhDN8v0GiQP8k=
+
+Name: org/objectweb/asm/tree/analysis/BasicVerifier.class
+SHA1-Digest: 7ux/BRI3M0YM3lEB7kDRXklnY+I=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$ClassRule.class
+SHA1-Digest: vM8Arq/rUPd+N+nWDBT9z+bjZZM=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$InterfaceRule.class
+SHA1-Digest: rBMOnpBeQ4CpSavaXKQfO1sF1dQ=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$FieldRule.class
+SHA1-Digest: kqqe6c6p9YidztBMfxewUrC6gGM=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationParameterRule.
+ class
+SHA1-Digest: OAFHlOiQPl3hx0biGP9kW5T8Kfs=
+
+Name: org/objectweb/asm/Handler.class
+SHA1-Digest: 7slFCwpzMai2GjSAMIoYDyjjkNM=
+
+Name: org/objectweb/asm/tree/LocalVariableNode.class
+SHA1-Digest: cdUfT0n1g0uiJ5KnpGfe/V3faj0=
+
+Name: org/objectweb/asm/tree/VarInsnNode.class
+SHA1-Digest: iONkO5hz0yyMfIESLEXJuuQSCu4=
+
+Name: org/objectweb/asm/commons/RemappingMethodAdapter.class
+SHA1-Digest: x5J2bctKh1nuMfMgBtq4ut94rIY=
+
+Name: org/objectweb/asm/FieldWriter.class
+SHA1-Digest: AouVqDrMvr2z3KTntQaQtfCUqWY=
+
+Name: org/objectweb/asm/xml/SAXAdapter.class
+SHA1-Digest: Rq0XGG1YBhNZ/s/0wS4GnqjKkeU=
+
+Name: org/objectweb/asm/xml/Processor$ContentHandlerFactory.class
+SHA1-Digest: Iql3AcTuk/Zv7KT1J682FAagE6o=
+
+Name: org/objectweb/asm/Edge.class
+SHA1-Digest: zPhU4kuh2C3K2hX7JxP3HRTWciQ=
+
+Name: org/objectweb/asm/commons/StaticInitMerger.class
+SHA1-Digest: CEb0IMAmNTzKt9hH9q7DFJXwr6o=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: KyT9FF7C7t86NoBoa2kZT3ZJBfw=
+
+Name: org/objectweb/asm/util/ASMifierAbstractVisitor.class
+SHA1-Digest: iwAhqNDyL1BHfSFnZfrd6RIMFq8=
+
+Name: org/objectweb/asm/tree/MethodNode.class
+SHA1-Digest: ARt9uAC8EXHdxhpyIGa/Bvcmf8Q=
+
+Name: org/objectweb/asm/xml/Processor$ProtectedInputStream.class
+SHA1-Digest: EEWGaF5FuPHnCgoybE1HboMxzlU=
+
+Name: org/objectweb/asm/tree/analysis/Interpreter.class
+SHA1-Digest: TGyQTdIapOWWZCMxzp2qP24URLg=
+
+Name: org/objectweb/asm/util/ASMifiable.class
+SHA1-Digest: gc/zNMznah6L9OMNiYH1VJ9u3Fo=
+
+Name: org/objectweb/asm/xml/Processor.class
+SHA1-Digest: k1R+nzqvwzexnn38zwNVUlmTocs=
+
+Name: org/objectweb/asm/tree/analysis/Analyzer.class
+SHA1-Digest: BUd5T/Qc8xbHj4TDRqTUr6W+Puk=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$LineNumberRule.class
+SHA1-Digest: nNQ86iA3yHEpjywv6uBlYWZ8FYQ=
+
+Name: org/objectweb/asm/Attribute.class
+SHA1-Digest: vSTLCi1osXUWM/PbcGSBbi3YEuk=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueAnnotatio
+ nRule.class
+SHA1-Digest: fh7sRMHq51rGvWnt9X8+eoohu00=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$Rule.class
+SHA1-Digest: y9b+F7g4B1uDWtyXile3vaI1fPA=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$MethodRule.class
+SHA1-Digest: 64u5tZhnhaU0v9DueUH6TobjNpk=
+
+Name: org/objectweb/asm/commons/SimpleRemapper.class
+SHA1-Digest: zv/T3hyl6UOT5r4B6pkE/OIcU2s=
+
+Name: org/objectweb/asm/tree/MethodNode$1.class
+SHA1-Digest: b//LjFLFpUsZbvnSRNZyTElQuQQ=
+
+Name: org/objectweb/asm/util/CheckClassAdapter.class
+SHA1-Digest: cQIkcqhpINLzqf3uxVTBJ4Uq2qs=
+
+Name: org/objectweb/asm/FieldVisitor.class
+SHA1-Digest: RsQ0nH9tT2R9G0QyTkzysSutYuc=
+
+Name: org/objectweb/asm/commons/RemappingFieldAdapter.class
+SHA1-Digest: 3hiyRWXWe0AualXZpgkllMBL2FM=
+
+Name: org/objectweb/asm/commons/TableSwitchGenerator.class
+SHA1-Digest: XwcnM4llF8WZlI/6bzZS+t4vcWU=
+
+Name: org/objectweb/asm/xml/Processor$TransformerHandlerFactory.class
+SHA1-Digest: 1F0o0EkqnW+Czhruz5Z6365xiWM=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueEnumRule.
+ class
+SHA1-Digest: pGf5BzWJAi9cg6q8bHfn09XK8Mc=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$TableSwitchLabelRule.cla
+ ss
+SHA1-Digest: juzbC0PQCAYqn+vv4DN+Nf1kZck=
+
+Name: org/objectweb/asm/tree/TryCatchBlockNode.class
+SHA1-Digest: nxjxIm42S5nwsdFxwP0yRaOiMTU=
+
+Name: org/objectweb/asm/commons/TryCatchBlockSorter.class
+SHA1-Digest: T7Ceq2PJeSXEXJssQH7Dj5WTr/0=
+
+Name: org/objectweb/asm/tree/InsnList$InsnListIterator.class
+SHA1-Digest: 0L4Y7BGoFXM7KOXHM57oW8EKIWI=
+
+Name: org/objectweb/asm/util/ASMifierMethodVisitor.class
+SHA1-Digest: bgim3+SBylSeWcHpVejW6peu0qc=
+
+Name: org/objectweb/asm/xml/Processor$ASMContentHandlerFactory.class
+SHA1-Digest: 4YK+W5iOsNC9veiDyOqB1nU3MmU=
+
+Name: org/objectweb/asm/commons/EmptyVisitor.class
+SHA1-Digest: ghmu5cSBwOS1Rak+5iLvUhtAPjs=
+
+Name: org/objectweb/asm/tree/ClassNode.class
+SHA1-Digest: zqBnODeb+oeCViRL1aiCYXMZB+4=
+
+Name: plugin.properties
+SHA1-Digest: oOwT8GoUdIL/oAVr9wT3mX3AxlY=
+
+Name: org/objectweb/asm/tree/FieldNode.class
+SHA1-Digest: gIE6CQON87o29iqIhjzRcyzXXc8=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$InnerClassRule.class
+SHA1-Digest: OGk9NWVjt8h1ZBi9PJmSXELLQPs=
+
+Name: org/objectweb/asm/util/TraceSignatureVisitor.class
+SHA1-Digest: tLGOLzBjyFpysmpUNzZ576OmHrg=
+
+Name: org/objectweb/asm/tree/TableSwitchInsnNode.class
+SHA1-Digest: DdbiGEY+a5ySYT32U8IHKSXOziA=
+
+Name: org/objectweb/asm/xml/Processor$SingleDocElement.class
+SHA1-Digest: 37EJZOP5WXgBUAQeRNIHlG81dEE=
+
+Name: org/objectweb/asm/tree/InsnList.class
+SHA1-Digest: CgRV8vXb0APKNpCP8ujNaE8LaCk=
+
+Name: org/objectweb/asm/commons/AdviceAdapter.class
+SHA1-Digest: PwFMoK8/T+Gm7t33cVp7pBsIB2w=
+
+Name: org/objectweb/asm/xml/Processor$SAXWriter.class
+SHA1-Digest: Xet+8o/VALpITFXxpKj4lY0tQZg=
+
+Name: org/objectweb/asm/tree/analysis/SimpleVerifier.class
+SHA1-Digest: kZKT8PvJpHFyKF8YgzQHYGUaE38=
+
+Name: org/objectweb/asm/xml/SAXAnnotationAdapter.class
+SHA1-Digest: r3BQAFpY7/Q2nTxEiyHtIlxBDAQ=
+
+Name: org/objectweb/asm/tree/analysis/BasicInterpreter.class
+SHA1-Digest: SZ7ibvk+IiyCe1CsiIu8opF5IqQ=
+
+Name: org/objectweb/asm/commons/JSRInlinerAdapter$Instantiation.class
+SHA1-Digest: FIgN/uJ5IIxjb/a1FhlZPMlEkgw=
+
+Name: org/objectweb/asm/commons/AnalyzerAdapter.class
+SHA1-Digest: C6kRpRTuOQYZAKfT0w07Rat1QiE=
+
+Name: org/objectweb/asm/util/Traceable.class
+SHA1-Digest: HqsPJ6VdYlqA2zfcbaEFZHi5JlY=
+
+Name: org/objectweb/asm/Opcodes.class
+SHA1-Digest: kZovfm82Efc7mxvoDryLJq42IWA=
+
+Name: org/objectweb/asm/xml/Processor$EntryElement.class
+SHA1-Digest: wSv5vSSIZmVGc6X96zR4zgeyOaw=
+
+Name: org/objectweb/asm/ClassVisitor.class
+SHA1-Digest: rHZ01JJcZ/yuuHU2MWVSh+gkdmA=
+
+Name: org/objectweb/asm/commons/RemappingClassAdapter.class
+SHA1-Digest: Cm0nOvJPjll5h6QDpWZzXjbKnKo=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$AnnotationRule.class
+SHA1-Digest: dE7AZy65zM60gbwHwlwXk4YlYrw=
+
+Name: org/objectweb/asm/xml/ASMContentHandler$TableSwitchRule.class
+SHA1-Digest: Sq4tpH8K65+CC2vyuvEGT5e1mrk=
+
+Name: org/objectweb/asm/commons/SerialVersionUIDAdder$Item.class
+SHA1-Digest: gnwpyOJGWyLNa36ns62ubxr8gPI=
+
diff --git a/dependencyManifests/org.sat4j.core_2.2.0.v20100429.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.sat4j.core_2.2.0.v20100429.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 3b90cfa..0000000
--- a/dependencyManifests/org.sat4j.core_2.2.0.v20100429.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,544 +0,0 @@
-Manifest-Version: 1.0
-Implementation-Vendor: CRIL CNRS UMR 8188 - Universite d'Artois
-Bundle-Localization: plugin
-Main-Class: org.sat4j.BasicLauncher
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Built-By: Daniel Le Berre
-Bundle-SymbolicName: org.sat4j.core
-Bundle-Version: 2.2.0.v20100429
-Export-Package: org.sat4j;version="2.2.0.v20100429",org.sat4j.core;ver
- sion="2.2.0.v20100429",org.sat4j.minisat;version="2.2.0.v20100429",or
- g.sat4j.minisat.constraints;version="2.2.0.v20100429",org.sat4j.minis
- at.constraints.card;version="2.2.0.v20100429",org.sat4j.minisat.const
- raints.cnf;version="2.2.0.v20100429",org.sat4j.minisat.core;version="
- 2.2.0.v20100429",org.sat4j.minisat.learning;version="2.2.0.v20100429"
- ,org.sat4j.minisat.orders;version="2.2.0.v20100429",org.sat4j.minisat
- .restarts;version="2.2.0.v20100429",org.sat4j.minisat.uip;version="2.
- 2.0.v20100429",org.sat4j.opt;version="2.2.0.v20100429",org.sat4j.read
- er;version="2.2.0.v20100429",org.sat4j.specs;version="2.2.0.v20100429
- ",org.sat4j.tools;version="2.2.0.v20100429",org.sat4j.tools.xplain;ve
- rsion="2.2.0.v20100429"
-Specification-Version: NA
-Specification-Title: SAT4J
-Specification-Vendor: Daniel Le Berre
-Ant-Version: Apache Ant 1.7.1
-Bundle-Vendor: %providerName
-Bundle-Name: %bundleName
-Created-By: 14.0-b16 (Sun Microsystems Inc.)
-Implementation-Version: 2.2.0.v20100429 
-Implementation-Title: SAT4J
-Bundle-ManifestVersion: 2
-
-Name: overview.html
-SHA1-Digest: dn/2qZIKrR/o7110Zst9XnBMJQs=
-
-Name: org/sat4j/tools/GateTranslator.class
-SHA1-Digest: Yh6sCzxURtlx8qrFaI+xhO7taJM=
-
-Name: org/sat4j/minisat/core/IOrder.class
-SHA1-Digest: X18Zt59LqRUfn0D/p7+Yulvx6A4=
-
-Name: org/sat4j/minisat/core/Solver$6.class
-SHA1-Digest: A9NaKDVPCX8avbQtiIcVsSUi0AQ=
-
-Name: org/sat4j/tools/SingleSolutionDetector.class
-SHA1-Digest: xRDSLeA8py9/4oqlAOAZCB5FuBo=
-
-Name: org/sat4j/minisat/constraints/AbstractDataStructureFactory.class
-SHA1-Digest: QC7DJMLxn40aJ6PtPaZzka0do/4=
-
-Name: sat4j.version
-SHA1-Digest: NZ/fetT1tL14CPqc4oXVd0YSLH4=
-
-Name: org/sat4j/minisat/core/VoidTracing.class
-SHA1-Digest: qab4ylcy9igxerjR3oNVShe7oUg=
-
-Name: org/sat4j/tools/xplain/Xplain.class
-SHA1-Digest: 1jX6dpnW8uoWTkXC5s16bjMuF0I=
-
-Name: org/sat4j/minisat/constraints/CardinalityDataStructureYanMin.cla
- ss
-SHA1-Digest: XvPtjZJs9rA05nolsi/QNsXXlvU=
-
-Name: org/sat4j/minisat/orders/VarOrderHeap.class
-SHA1-Digest: IfBRX8A9zzfGV1SbWEpHN2hyqmA=
-
-Name: org/sat4j/minisat/constraints/cnf/OriginalWLClause.class
-SHA1-Digest: e5hXI5VqiNVDnFSAf3+N9cWe+2c=
-
-Name: org/sat4j/minisat/core/ConflictTimerContainer.class
-SHA1-Digest: WZnSTl/i/51xiYxIutjbXSBBrzM=
-
-Name: org/sat4j/minisat/core/Solver$4$1.class
-SHA1-Digest: NkmAx0lapXofeVNwuxwX8QdoNsU=
-
-Name: org/sat4j/minisat/core/Solver$5$1.class
-SHA1-Digest: 8wcs6u5RIDbL8/R64JGfFlClLWk=
-
-Name: org/sat4j/minisat/learning/LimitedLearning.class
-SHA1-Digest: ErjN2ShX727XdTOXJhv363hP9bI=
-
-Name: org/sat4j/minisat/restarts/MiniSATRestarts.class
-SHA1-Digest: k/KhiR/OfC034e0ZPySapkgveAE=
-
-Name: org/sat4j/Messages.class
-SHA1-Digest: N9cs+sh8DpqhA5oV0QFAVAIY91w=
-
-Name: org/sat4j/tools/DecisionLevelTracing.class
-SHA1-Digest: bqc7u8t12qSXuXrIo9Vr5G8s56I=
-
-Name: org/sat4j/minisat/core/ConflictTimerAdapter.class
-SHA1-Digest: EOpIpvS+DhOiAnF4CKrEjlJIDpo=
-
-Name: org/sat4j/minisat/core/RestartStrategy.class
-SHA1-Digest: SV48tRost4rdjsXHcfllFOHsNXE=
-
-Name: org/sat4j/minisat/restarts/LubyRestarts.class
-SHA1-Digest: EEerNSUBAlbld5M7LP7mN2zs9Ts=
-
-Name: org/sat4j/minisat/orders/NegativeLiteralSelectionStrategy.class
-SHA1-Digest: gB+OVkgcdZHx1JonmB7tnCO7Oyc=
-
-Name: org/sat4j/minisat/constraints/ClausalDataStructureCBWL.class
-SHA1-Digest: rP/p+6+pYZiKHSfrrQIRemLWE0w=
-
-Name: org/sat4j/minisat/constraints/AbstractCardinalityDataStructure.c
- lass
-SHA1-Digest: GSCvrYhJoXJ3OrNG6+VkuyfThuY=
-
-Name: org/sat4j/minisat/constraints/cnf/LearntHTClause.class
-SHA1-Digest: MFUNHhZuO01qFAkEy0swU0CfF3w=
-
-Name: org/sat4j/minisat/orders/PhaseCachingAutoEraseStrategy.class
-SHA1-Digest: vaZ7i3+fm0kWgbsdpPmyV9++was=
-
-Name: org/sat4j/tools/ConstrGroup.class
-SHA1-Digest: 8dJf1rUYdJ5D/5q7CzmA3Mzc/jw=
-
-Name: org/sat4j/specs/IOptimizationProblem.class
-SHA1-Digest: BzbKf8Uu0CXX6Z7/80WgezxoyJ0=
-
-Name: org/sat4j/minisat/orders/RandomLiteralSelectionStrategy.class
-SHA1-Digest: tropHGTOmwv8DbIEqkHbW8cVJ28=
-
-Name: org/sat4j/minisat/core/Learner.class
-SHA1-Digest: zZl+IKIJohUSLCPKiPsh54DbG74=
-
-Name: org/sat4j/AbstractLauncher.class
-SHA1-Digest: BTH8yMwC7xiwd2oHaXS2kaEy3CM=
-
-Name: org/sat4j/minisat/orders/UserFixedPhaseSelectionStrategy.class
-SHA1-Digest: IKCHFMe/zjI/CRjw2fDR7EzNwnQ=
-
-Name: org/sat4j/minisat/constraints/card/MaxWatchCard.class
-SHA1-Digest: owfh9LqCYYiwpXaQFVQYe3jM+5k=
-
-Name: org/sat4j/minisat/core/Solver.class
-SHA1-Digest: tWS14McPuDt+bdAm8dWQcbpZzhM=
-
-Name: org/sat4j/specs/ISolver.class
-SHA1-Digest: 7JoFkvIfa9MiC/Uv2a8Conam6DU=
-
-Name: org/sat4j/minisat/constraints/cnf/LearntBinaryClause.class
-SHA1-Digest: BEa+zhrRDpf0D2PK3lHs+m1I0CM=
-
-Name: org/sat4j/minisat/core/Pair.class
-SHA1-Digest: 2CR/EMVg/UZQzmTptUlYTxZTiJw=
-
-Name: org/sat4j/messages.properties
-SHA1-Digest: DkI1sg89OFvS+e7y3E13YjlTmXU=
-
-Name: org/sat4j/AbstractLauncher$2.class
-SHA1-Digest: bcjQuEMkF58of3TUdhfOwxn8i/A=
-
-Name: org/sat4j/core/ReadOnlyVecInt.class
-SHA1-Digest: +v4PIGKi0soP5B90qdmwq8T57hA=
-
-Name: org/sat4j/minisat/core/Solver$3.class
-SHA1-Digest: Kn8DQvvP9QTKo92sfjycbOI2cPM=
-
-Name: org/sat4j/tools/SolverDecorator.class
-SHA1-Digest: VKG/qEQRDQF05dukzLzJJbQpaJI=
-
-Name: org/sat4j/minisat/learning/NoLearningButHeuristics.class
-SHA1-Digest: AQZggH2/k1qVmdC5jvHIAsCJk2I=
-
-Name: org/sat4j/minisat/constraints/MixedDataStructureDanielCBWL.class
-SHA1-Digest: SkYz32iGpeD0D1DoqaHSN8dIE6g=
-
-Name: org/sat4j/minisat/core/Solver$7.class
-SHA1-Digest: Qz0RkGh3arqLFVZjAsEZ7S0FALs=
-
-Name: org/sat4j/minisat/constraints/cnf/Clauses.class
-SHA1-Digest: PGKpp8V5ZSPDszbstf1rYyuIlaw=
-
-Name: org/sat4j/core/VecInt$1.class
-SHA1-Digest: MOlk3IOOGQOh+ItwyuWZfbLV5vE=
-
-Name: org/sat4j/minisat/core/SolverStats.class
-SHA1-Digest: aG5C74srGKadm2/55hkoqZmlfco=
-
-Name: org/sat4j/core/LiteralsUtils.class
-SHA1-Digest: X7TVqVeRHM0IPsg3VV6Llla0xl4=
-
-Name: org/sat4j/minisat/uip/FirstUIP.class
-SHA1-Digest: DT6VUSPEPccVmQsslUxhocuq03g=
-
-Name: org/sat4j/minisat/core/ConstrActivityListener.class
-SHA1-Digest: MZT8g6wjSOyxwYxQPbIFqUOzrDw=
-
-Name: org/sat4j/tools/xplain/Pair.class
-SHA1-Digest: P1Tkq8qH5itdUzZdfBCbm0/KyUE=
-
-Name: org/sat4j/tools/OptToSatAdapter.class
-SHA1-Digest: 9094OVY04hay9fCU8Zkj+xLajWY=
-
-Name: org/sat4j/core/DefaultComparator.class
-SHA1-Digest: Oc+iZAlu+B3SwdOkkvXhrC66xMA=
-
-Name: org/sat4j/tools/ExtendedDimacsArrayReader.class
-SHA1-Digest: iUP8Szu2/7qXIpD5LCC0yclTsnE=
-
-Name: org/sat4j/core/ASolverFactory.class
-SHA1-Digest: r8lJPwCRTvP8SJrsNz3GbM/D1Iw=
-
-Name: org/sat4j/minisat/constraints/cnf/OriginalBinaryClause.class
-SHA1-Digest: HwwUr0wePfbLsvgrQU6bC698E9c=
-
-Name: org/sat4j/tools/xplain/XplainStrategy.class
-SHA1-Digest: KcQau9GPcW2R6Fjyqp5jaeWTdWk=
-
-Name: org/sat4j/minisat/core/Solver$ISimplifier.class
-SHA1-Digest: 4tVyB/nROzHJWlVqmRwOtuVc5ws=
-
-Name: org/sat4j/minisat/constraints/CardinalityDataStructure.class
-SHA1-Digest: wTFZUhwJuPgfIpOUZqzt4BtHZtI=
-
-Name: target/META-INF/MANIFEST.MF
-SHA1-Digest: HUftYWvUbxYRZEc5UfTrflINdHA=
-
-Name: org/sat4j/minisat/orders/PhaseInLastLearnedClauseSelectionStrate
- gy.class
-SHA1-Digest: K97bk3JNYx0tk7Bi157aRr69gn0=
-
-Name: org/sat4j/minisat/constraints/cnf/CBClause.class
-SHA1-Digest: aL8ef8Q6JhWndr8w29VH4i/RTaI=
-
-Name: org/sat4j/minisat/SolverFactory.class
-SHA1-Digest: Z+80DpzGQVxhYxrSHdy/834VjY0=
-
-Name: org/sat4j/minisat/orders/AbstractPhaserecordingSelectionStrategy
- .class
-SHA1-Digest: Ku63mzSsCDrWuploozqcRdmkuko=
-
-Name: org/sat4j/minisat/learning/NoLearningNoHeuristics.class
-SHA1-Digest: ee/1IsqLwl8UIMDFY3B5ByoXC5M=
-
-Name: org/sat4j/minisat/constraints/cnf/UnitClause.class
-SHA1-Digest: QYp29Pf3B+TII1c5QtZ5nUGtxh4=
-
-Name: org/sat4j/minisat/constraints/cnf/LearntWLClause.class
-SHA1-Digest: iXDeBwTa2tEbw4qyfYAuajPahvg=
-
-Name: org/sat4j/core/ReadOnlyVec.class
-SHA1-Digest: 6rMIHJ0cX0CVpomOamEselGaXTQ=
-
-Name: about.html
-SHA1-Digest: ohuwRciYYMwr4+zXRG6vJTiqjlg=
-
-Name: org/sat4j/tools/DotSearchTracing.class
-SHA1-Digest: wzcwTGIxcUVRgOo9wBN2d7TSVQ0=
-
-Name: org/sat4j/minisat/orders/RandomWalkDecorator.class
-SHA1-Digest: bp+eWwcuxZZhZfm6yhziLeyFqTw=
-
-Name: org/sat4j/minisat/orders/RSATPhaseSelectionStrategy.class
-SHA1-Digest: Z9qkW17407uDjMbfkzO9y8QMZiY=
-
-Name: org/sat4j/minisat/learning/FixedLengthLearning.class
-SHA1-Digest: jvMhRyshWO+UGPAB6YkECmjSTdY=
-
-Name: org/sat4j/tools/xplain/QuickXplainStrategy.class
-SHA1-Digest: SjaqwyoYqMxlQmO/nabGhNYSTng=
-
-Name: org/sat4j/minisat/core/Propagatable.class
-SHA1-Digest: O0oTleJry9VDLuyD5aAfUnszVP0=
-
-Name: org/sat4j/minisat/core/UnitPropagationListener.class
-SHA1-Digest: p1znVXCjplcP6DuzMM12Mvlha4Q=
-
-Name: org/sat4j/reader/EfficientScanner.class
-SHA1-Digest: wHkLMQUCF1oW7I4gqgQzcizjpyQ=
-
-Name: org/sat4j/BasicLauncher.class
-SHA1-Digest: p7Jqj9M9ZpUavYfBUPG4VToj5Ks=
-
-Name: org/sat4j/tools/Minimal4InclusionModel.class
-SHA1-Digest: BCd89TeXxrwPQFfIhb759bR8rtU=
-
-Name: org/sat4j/reader/LecteurDimacs.class
-SHA1-Digest: 4Lc66LfuY3q/XiwdUTCGytBQOLk=
-
-Name: org/sat4j/minisat/core/ILits.class
-SHA1-Digest: VjUNRaTLDHQugxPBDHitvhH+wG8=
-
-Name: org/sat4j/minisat/constraints/ClausalDataStructureWL.class
-SHA1-Digest: ffoF+WFZBin6+8QH/GgAykHIS0w=
-
-Name: org/sat4j/minisat/constraints/card/MinWatchCard.class
-SHA1-Digest: q7dA0RILYtAqoS5G8VDWwJ8B+zc=
-
-Name: org/sat4j/minisat/core/ActivityListener.class
-SHA1-Digest: ZroatMN6iWIhRyiEJ/ZmdFq9JAc=
-
-Name: org/sat4j/minisat/core/Solver$4.class
-SHA1-Digest: 17HruTEcxPRso7T0xjA3SdDZcrM=
-
-Name: org/sat4j/minisat/learning/PercentLengthLearning.class
-SHA1-Digest: stM1IxYEvXcwY67YJKkLdu5FdXU=
-
-Name: org/sat4j/minisat/learning/ActiveLearning.class
-SHA1-Digest: /UKTVjAZgSr0gd3NW5liJQhzVXY=
-
-Name: org/sat4j/minisat/core/AssertingClauseGenerator.class
-SHA1-Digest: n1TtEGxXGTmCNtlOmrDJywmVZX4=
-
-Name: org/sat4j/core/VecInt$2.class
-SHA1-Digest: nqKZ6/mfZoAu5eUzuCoFfcN8X0Y=
-
-Name: org/sat4j/minisat/constraints/ClausalDataStructureCB.class
-SHA1-Digest: DQ+WOVB9VKsC6plLm6AHIjvLTuc=
-
-Name: org/sat4j/tools/Minimal4CardinalityModel.class
-SHA1-Digest: vA1Z9OaXi5zi6CXITzmuee9OSn4=
-
-Name: org/sat4j/minisat/core/Constr.class
-SHA1-Digest: gI2BzvdyzWDWZbIJXhhybvGyzmk=
-
-Name: org/sat4j/tools/ConflictLevelTracing.class
-SHA1-Digest: AsJ3xdPG/+T5p+PPRDrmIDnYtNs=
-
-Name: org/sat4j/specs/TimeoutException.class
-SHA1-Digest: l3TRwZEfDOxtce6QQ6UxlC23zXQ=
-
-Name: org/sat4j/specs/IConstr.class
-SHA1-Digest: fcsTeyTUhjLxclDuPNheWb60Nik=
-
-Name: org/sat4j/minisat/constraints/cnf/HTClause.class
-SHA1-Digest: BITYwr9toXIK4fOH5GkdD+LoN8Y=
-
-Name: org/sat4j/minisat/constraints/cnf/Lits.class
-SHA1-Digest: rlweU4B5vm9zh2s859Qo2Npuxjw=
-
-Name: org/sat4j/core/VecInt$1$1.class
-SHA1-Digest: 52axwE4a/5xaCBBiBW7sPOAHd3o=
-
-Name: org/sat4j/specs/IProblem.class
-SHA1-Digest: jEM7LkKzd591iLMZyg4EggQngu4=
-
-Name: org/sat4j/minisat/constraints/card/AtLeast.class
-SHA1-Digest: 5t2/PBFWiSW2fePcSdxhjAA7Kk4=
-
-Name: org/sat4j/minisat/uip/DecisionUIP.class
-SHA1-Digest: 08gofaQpbrVsVfAJ54ZRJn5VXig=
-
-Name: org/sat4j/minisat/constraints/CardinalityDataStructureYanMax.cla
- ss
-SHA1-Digest: y4OYLw+8K76jFI9FBrscL4nfFr8=
-
-Name: org/sat4j/minisat/core/Undoable.class
-SHA1-Digest: JlBAZdp2+IV3L38pKFCjKE0XbVA=
-
-Name: org/sat4j/reader/Reader.class
-SHA1-Digest: G1FxrKF1uWVL2FRlKyCB+OtfjbU=
-
-Name: org/sat4j/specs/ContradictionException.class
-SHA1-Digest: r1UYadzl/slay7uG5fgp2wNba3c=
-
-Name: org/sat4j/tools/DecisionTracing.class
-SHA1-Digest: Bot9owQNrQt/OYGdWJM0wXEmFBE=
-
-Name: org/sat4j/reader/AIGReader.class
-SHA1-Digest: UE5/U2zDJmqF+WoaYvaLlEogfyg=
-
-Name: org/sat4j/minisat/constraints/cnf/UnitClauses.class
-SHA1-Digest: P+j5C5cmNPQXQodvVnPXOhFC30U=
-
-Name: org/sat4j/tools/xplain/ReplayXplainStrategy.class
-SHA1-Digest: sL+4Coo1SK3Mglx2xB1V7jrktu4=
-
-Name: org/sat4j/minisat/core/VarActivityListener.class
-SHA1-Digest: n4xDxXyrKcY2NTF3EG5Td2eGKuk=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: 6mDW8kS/T9pK7w1by/wcxy21Z20=
-
-Name: org/sat4j/minisat/constraints/cnf/BinaryClause.class
-SHA1-Digest: XsywFiKmf/+/N5R1FaKtqRgUf/w=
-
-Name: org/sat4j/reader/AAGReader.class
-SHA1-Digest: trW8fG34QnCclxbTvL7j9N5b1+8=
-
-Name: org/sat4j/minisat/core/SearchParams.class
-SHA1-Digest: Obh/FcMTRJ1sNs9nmKxnMIA/CKI=
-
-Name: org/sat4j/tools/LearnedClauseSizeTracing.class
-SHA1-Digest: 7eIqj9Lxk9dkEt4wEy+7T22kg2I=
-
-Name: org/sat4j/tools/TextOutputTracing.class
-SHA1-Digest: UCrX0HDxtr/vopL3ZgEFXveuKds=
-
-Name: org/sat4j/core/Vec.class
-SHA1-Digest: lE23BQ58AXB3uzpLEGx1XjF6o3o=
-
-Name: org/sat4j/ExitCode.class
-SHA1-Digest: V5DfojXDofFKw5jKg2UlW44ID1k=
-
-Name: org/sat4j/specs/IteratorInt.class
-SHA1-Digest: 1Qw+nLBznA9xfE1k0NrCk1ZL12U=
-
-Name: org/sat4j/core/VecInt.class
-SHA1-Digest: 20p4G5/a9+z16EKfMnEpBfdBU04=
-
-Name: org/sat4j/tools/RemiUtils.class
-SHA1-Digest: FOYt8rXW11SzMi1XWT+zrLooXmo=
-
-Name: org/sat4j/minisat/restarts/NoRestarts.class
-SHA1-Digest: ZJt2YbQAK0pH0rahOGmBGxcD0iY=
-
-Name: org/sat4j/minisat/core/Solver$1.class
-SHA1-Digest: Har1eRgn67d9nkWdXEB76785ABY=
-
-Name: org/sat4j/reader/ParseFormatException.class
-SHA1-Digest: r+ff4ZThrCgnOr3nHx/9TwYYQPo=
-
-Name: org/sat4j/minisat/core/IntQueue.class
-SHA1-Digest: rA0Ji2sWaNzFPNWmQIoiWB8vaDw=
-
-Name: org/sat4j/minisat/core/Solver$5.class
-SHA1-Digest: 4S9CfrpO0dreVFpmCVv5Ge7YRZg=
-
-Name: org/sat4j/minisat/constraints/cnf/OriginalHTClause.class
-SHA1-Digest: yyLzkGGZmajG9BlwV+uplq4AxP0=
-
-Name: org/sat4j/minisat/restarts/ArminRestarts.class
-SHA1-Digest: P0Cnayj1WSNFLwVQfahcFcQ3/G8=
-
-Name: org/sat4j/minisat/orders/ValuedLit.class
-SHA1-Digest: nJs3StPJtLykgfQ1RAM9auCOTWY=
-
-Name: org/sat4j/minisat/constraints/cnf/MixableCBClause.class
-SHA1-Digest: Y3rGogVleu8GyMCiVL/Kpg/0owY=
-
-Name: org/sat4j/reader/DimacsReader.class
-SHA1-Digest: QTAdRnvX9GYGQGpgXTS4JLgSdvA=
-
-Name: org/sat4j/minisat/learning/MiniSATLearning.class
-SHA1-Digest: zKTO0CcnZQGRkMveUBuAXZJauW8=
-
-Name: org/sat4j/minisat/core/Heap.class
-SHA1-Digest: NfjIWQkaul6hYWtfsCftt1B+zuc=
-
-Name: org/sat4j/specs/IVec.class
-SHA1-Digest: ViymudVBXcOLO3BSJL2o1ejW3xg=
-
-Name: org/sat4j/tools/DimacsArrayReader.class
-SHA1-Digest: MQJ5QjAj+eb9gkW+Dq1ltLpYlc8=
-
-Name: org/sat4j/minisat/core/ConflictTimer.class
-SHA1-Digest: wBGYIZwmGm5yU49qu7QyJ2qXuG8=
-
-Name: org/sat4j/minisat/core/LearningStrategy.class
-SHA1-Digest: KOVMl4sz6I11jK2OXRUF46XxKoo=
-
-Name: plugin.properties
-SHA1-Digest: t0bd67OgJQf7Vs75aUOH2ysVGf4=
-
-Name: org/sat4j/tools/ModelIterator.class
-SHA1-Digest: gbZ+AxzpF5uOc4dUthOALy9rPmY=
-
-Name: org/sat4j/reader/InstanceReader.class
-SHA1-Digest: 8sjRko3rsU7XeZsQxycrAOcYjf0=
-
-Name: org/sat4j/opt/MinOneDecorator.class
-SHA1-Digest: FZpFT9loWBkBR+eVjVbc5MUYXYM=
-
-Name: org/sat4j/tools/DimacsOutputSolver.class
-SHA1-Digest: 1bM6Jq6L+XRXGuaYgTd9PBt5pNg=
-
-Name: org/sat4j/specs/IVecInt.class
-SHA1-Digest: s8rPWLP40S8PSFlm1S+fXu2i908=
-
-Name: org/sat4j/minisat/constraints/cnf/WLClause.class
-SHA1-Digest: /azcSLRSN7iKmvwoOk1a21MyEkE=
-
-Name: org/sat4j/minisat/constraints/MixedDataStructureDanielHT.class
-SHA1-Digest: X3AOESzN+Ai0088Po83JgsYf3IA=
-
-Name: org/sat4j/tools/SolutionCounter.class
-SHA1-Digest: c6y7VipHT+iHQkJnjRZOzJOxVCM=
-
-Name: org/sat4j/specs/SearchListener.class
-SHA1-Digest: dE+pqRw9CHWEYw9HPGm/PL1MS3w=
-
-Name: org/sat4j/LightFactory.class
-SHA1-Digest: y3vlDHbXmiThTEdaCClNtKhbBUk=
-
-Name: org/sat4j/minisat/core/Solver$LearnedConstraintsDeletionStrategy
- .class
-SHA1-Digest: RmLTVjBWD8y95SwnJ6/erR6iNDg=
-
-Name: org/sat4j/minisat/learning/AbstractLearning.class
-SHA1-Digest: S13vJv++vfR80BGDLi8imFCndiQ=
-
-Name: org/sat4j/minisat/orders/PositiveLiteralSelectionStrategy.class
-SHA1-Digest: 20jMN1A+acBGM1F51N+IlCRCuCY=
-
-Name: org/sat4j/minisat/core/ActivityComparator.class
-SHA1-Digest: YOQ17ebH2Qn6Fm2wT8e0RC/QOOQ=
-
-Name: org/sat4j/minisat/constraints/MixedDataStructureDanielWL.class
-SHA1-Digest: FaMTZx802nGMGk5F4CPwkpQizk4=
-
-Name: org/sat4j/minisat/core/IPhaseSelectionStrategy.class
-SHA1-Digest: rDjzB1H+97Ak1X7IvTAhhrJzu9Y=
-
-Name: org/sat4j/tools/DimacsStringSolver.class
-SHA1-Digest: 4aybBXJd0kpsio0qkMaDzv+4mtU=
-
-Name: org/sat4j/opt/MaxSatDecorator.class
-SHA1-Digest: sL9aW1K32uO0EzwpF4n0MNsDPgU=
-
-Name: org/sat4j/opt/AbstractSelectorVariablesDecorator.class
-SHA1-Digest: sXVhRd7oT84ewBW0tV3P8sz1OSE=
-
-Name: org/sat4j/specs/Lbool.class
-SHA1-Digest: NvK9fv0aVpTWlIHuMRBxgMDHGPM=
-
-Name: org/sat4j/minisat/orders/PureOrder.class
-SHA1-Digest: XXadIuZAlvYKyov44IWn12jTyEE=
-
-Name: org/sat4j/minisat/core/Counter.class
-SHA1-Digest: w5M/JC6k2IzZvkXiDMJmy9yHT3Q=
-
-Name: org/sat4j/minisat/learning/ClauseOnlyLearning.class
-SHA1-Digest: OhALcZTHlmXDBrgx5FPPIIiCY9k=
-
-Name: org/sat4j/AbstractOptimizationLauncher.class
-SHA1-Digest: yJSczPYnz6oI60x2qyvUeOLGnao=
-
-Name: org/sat4j/AbstractLauncher$1.class
-SHA1-Digest: Fex2k4SAbvtlf17yuFWNOHW6DiM=
-
-Name: org/sat4j/core/Vec$1.class
-SHA1-Digest: ws7WosmOOr7ItmXAq4dmuFDStbs=
-
-Name: org/sat4j/MoreThanSAT.class
-SHA1-Digest: zcZWXGo/kZbMlsfsgm/hqMvKaKI=
-
-Name: org/sat4j/minisat/core/DataStructureFactory.class
-SHA1-Digest: 5dnenVHIhwUvoRdLPk2jm+ZDZIc=
-
-Name: org/sat4j/minisat/core/Solver$2.class
-SHA1-Digest: tSYoi7MLi0qIXv6NdEQNPTALFVE=
-
diff --git a/dependencyManifests/org.sat4j.core_2.3.0.v20110329.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.sat4j.core_2.3.0.v20110329.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..70e2163
--- /dev/null
+++ b/dependencyManifests/org.sat4j.core_2.3.0.v20110329.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.8.2
+Created-By: 1.6.0_22-b22 (Sun Microsystems Inc.)
+Bundle-ManifestVersion: 2
+Bundle-Name: %bundleName
+Bundle-SymbolicName: org.sat4j.core
+Bundle-Version: 2.3.0.v20100429
+Export-Package: org.sat4j;version="2.3.0.v20100429",org.sat4j.core;ver
+ sion="2.3.0.v20100429",org.sat4j.minisat;version="2.3.0.v20100429",or
+ g.sat4j.minisat.constraints;version="2.3.0.v20100429",org.sat4j.minis
+ at.constraints.card;version="2.3.0.v20100429",org.sat4j.minisat.const
+ raints.cnf;version="2.3.0.v20100429",org.sat4j.minisat.core;version="
+ 2.3.0.v20100429",org.sat4j.minisat.learning;version="2.3.0.v20100429"
+ ,org.sat4j.minisat.orders;version="2.3.0.v20100429",org.sat4j.minisat
+ .restarts;version="2.3.0.v20100429",org.sat4j.opt;version="2.3.0.v201
+ 00429",org.sat4j.reader;version="2.3.0.v20100429",org.sat4j.specs;ver
+ sion="2.3.0.v20100429",org.sat4j.tools;version="2.3.0.v20100429",org.
+ sat4j.tools.xplain;version="2.3.0.v20100429"
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Built-By: Daniel Le Berre
+Main-Class: org.sat4j.BasicLauncher
+Specification-Title: SAT4J
+Specification-Version: NA
+Specification-Vendor: Daniel Le Berre
+Implementation-Title: SAT4J
+Implementation-Version: 2.3.0.v20100429
+Implementation-Vendor: CRIL CNRS UMR 8188 - Universite d'Artois
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/dependencyManifests/org.sat4j.pb_2.2.0.v20100429.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.sat4j.pb_2.2.0.v20100429.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 31d1d86..0000000
--- a/dependencyManifests/org.sat4j.pb_2.2.0.v20100429.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,304 +0,0 @@
-Manifest-Version: 1.0
-Implementation-Vendor: CRIL CNRS UMR 8188 - Universite d'Artois
-Main-Class: org.sat4j.pb.LanceurPseudo2007
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Built-By: Daniel Le Berre
-Bundle-SymbolicName: org.sat4j.pb
-Require-Bundle: org.sat4j.core
-Bundle-Version: 2.2.0.v20100429
-Export-Package: org.sat4j.pb;version="2.2.0.v20100429",org.sat4j.pb.co
- nstraints;version="2.2.0.v20100429",org.sat4j.pb.constraints.pb;versi
- on="2.2.0.v20100429",org.sat4j.pb.core;version="2.2.0.v20100429",org.
- sat4j.pb.orders;version="2.2.0.v20100429",org.sat4j.pb.reader;version
- ="2.2.0.v20100429",org.sat4j.pb.tools;version="2.2.0.v20100429"
-Specification-Version: NA
-Specification-Title: SAT4J
-Specification-Vendor: Daniel Le Berre
-Ant-Version: Apache Ant 1.7.1
-Bundle-Vendor: %providerName
-Bundle-Name: %bundleName
-Class-Path: org.sat4j.core.jar
-Created-By: 14.0-b16 (Sun Microsystems Inc.)
-Implementation-Version: 2.2.0.v20100429 
-Implementation-Title: SAT4J
-Bundle-ManifestVersion: 2
-
-Name: overview.html
-SHA1-Digest: dn/2qZIKrR/o7110Zst9XnBMJQs=
-
-Name: org/sat4j/pb/core/PBSolverCautious.class
-SHA1-Digest: G6PE+jY5a6fBYlvCCJ80DIRQttg=
-
-Name: org/sat4j/pb/constraints/pb/IDataStructurePB.class
-SHA1-Digest: K8hIGafz38gYco1roO+km+62nUI=
-
-Name: org/sat4j/pb/constraints/pb/OriginalBinaryClausePB.class
-SHA1-Digest: 2u9IrZTRMP8k/+Pgirz48qiZ7/0=
-
-Name: org/sat4j/pb/UserFriendlyPBStringSolver$1.class
-SHA1-Digest: gKdki2AgPWZsKfQrO3rcO8Xdsp8=
-
-Name: org/sat4j/pb/reader/OPBReader2006.class
-SHA1-Digest: Za8OEzrefdDt2z98j51EBX3xj3A=
-
-Name: org/sat4j/pb/tools/ImplicationNamer.class
-SHA1-Digest: uaNnc29kUvqltyMLCZ6SEoetrnc=
-
-Name: org/sat4j/pb/core/PBSolverMerging.class
-SHA1-Digest: djmzlzPZAInJVw6wMQ7MCGQT6F4=
-
-Name: org/sat4j/pb/constraints/CompetResolutionPBMixedWLClauseCardCons
- trDataStructure.class
-SHA1-Digest: nloc0/mY93BZDB4uTWIOeP1WHY4=
-
-Name: org/sat4j/pb/constraints/CompetMinHTmixedClauseCardConstrDataStr
- uctureFactory.class
-SHA1-Digest: GO7p5Za7oIPox69KRZ053C99kLg=
-
-Name: org/sat4j/pb/constraints/PBMaxCBClauseCardConstrDataStructure.cl
- ass
-SHA1-Digest: 8B4zKn975+9WwnkxYqODzGgNMtA=
-
-Name: org/sat4j/pb/core/PBSolverCP.class
-SHA1-Digest: +Qc17V3GJ6vqbTiGdEC/NiVaSRE=
-
-Name: org/sat4j/pb/constraints/pb/AtLeastPB.class
-SHA1-Digest: NasfzFaI5jhvxcIXI67cTVOg124=
-
-Name: org/sat4j/pb/constraints/pb/ConflictMapSwitchToClause.class
-SHA1-Digest: mx8XOflLPBSXnWWc3bXlHIYyj6A=
-
-Name: org/sat4j/pb/constraints/pb/MinWatchCardPB.class
-SHA1-Digest: crONz2vRhajI5wwzRVtND9P37RI=
-
-Name: org/sat4j/pb/constraints/pb/ConflictMap.class
-SHA1-Digest: y16ySy2IGCLtsK0U50yhENNC6W0=
-
-Name: org/sat4j/pb/constraints/pb/MapPb.class
-SHA1-Digest: NXbo9EEw7HqKORoEXNbOk2hCeq8=
-
-Name: org/sat4j/pb/constraints/pb/UnitClausePB.class
-SHA1-Digest: 4n3MLmHlk2tAJbg1EgAp8mQf64o=
-
-Name: org/sat4j/pb/LanceurPseudo2007Eclipse.class
-SHA1-Digest: +QTEdsoG7bzmL/YI28W57v47CAk=
-
-Name: org/sat4j/pb/tools/DependencyHelper.class
-SHA1-Digest: OMY1u4aMLJ3UoL+za68NnMiocyY=
-
-Name: org/sat4j/pb/tools/ImplicationAnd.class
-SHA1-Digest: +k7ETPN3t0C+UZAnZcW8u7eFomw=
-
-Name: org/sat4j/pb/constraints/PBMaxDataStructure.class
-SHA1-Digest: w0Xjba3ddTPxB2dVW1HvWpfGIq4=
-
-Name: org/sat4j/pb/constraints/pb/Pseudos.class
-SHA1-Digest: ose+x3/CGsc7AjXEunLkqmNm63I=
-
-Name: org/sat4j/pb/constraints/PBMinClauseCardConstrDataStructure.clas
- s
-SHA1-Digest: 3x3BBKrLLuA5SCj3X+IH41yAsr8=
-
-Name: org/sat4j/pb/constraints/pb/ConflictMapClause.class
-SHA1-Digest: dSLvmwcCiD9ZFlvFrTw8bneJCI4=
-
-Name: org/sat4j/pb/constraints/PuebloPBMinClauseAtLeastConstrDataStruc
- ture.class
-SHA1-Digest: w309O/LZInrUh++d8phGpdJEZtA=
-
-Name: org/sat4j/pb/core/PBSolverResCP.class
-SHA1-Digest: zCdBCthIUAVA6/i4k1D5o9Te7e8=
-
-Name: org/sat4j/pb/constraints/PBContainer.class
-SHA1-Digest: kcNv1+UXugI/PV/+sSoMgLAIftU=
-
-Name: org/sat4j/pb/PBSolverDecorator.class
-SHA1-Digest: GD0qkZZprzxUHS2LGjSka/FTl+0=
-
-Name: org/sat4j/pb/constraints/pb/LearntBinaryClausePB.class
-SHA1-Digest: QL6nsPydh+z3nKNQYe7jwE1CgHo=
-
-Name: org/sat4j/pb/SolverFactory.class
-SHA1-Digest: NBohv7locQ+NEAky27a7fek+8SY=
-
-Name: org/sat4j/pb/constraints/PuebloPBMinClauseCardConstrDataStructur
- e.class
-SHA1-Digest: ZT86iNkY8IXjLjUr72UiFPplKLw=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: 6mDW8kS/T9pK7w1by/wcxy21Z20=
-
-Name: org/sat4j/pb/tools/DependencyHelper$2.class
-SHA1-Digest: aLYin0QkwOIijO/rXnY0UmXqTpc=
-
-Name: org/sat4j/pb/orders/VarOrderHeapObjective.class
-SHA1-Digest: 2FsAP/pICHcMCNdPadbMBG7y/do=
-
-Name: org/sat4j/pb/core/PBSolverWithImpliedClause.class
-SHA1-Digest: xue1+JX1bmghjnwSZpBO+vz1WMI=
-
-Name: org/sat4j/pb/constraints/AbstractPBDataStructureFactory$2.class
-SHA1-Digest: rKuP05A+NpTct21Ak6zGVQ7vAHc=
-
-Name: org/sat4j/pb/core/PBSolverResolution.class
-SHA1-Digest: SRfvQmnFA/QRlfyWvt9nqRR/lns=
-
-Name: org/sat4j/pb/constraints/pb/MaxWatchPb.class
-SHA1-Digest: jwNLXKfu0MZJqHvWUU87nuz9r1Q=
-
-Name: org/sat4j/pb/constraints/pb/OriginalHTClausePB.class
-SHA1-Digest: +TRdmilQ15C9Xic9IlZeDbLBMM0=
-
-Name: org/sat4j/pb/core/PBSolverClause.class
-SHA1-Digest: trpkB4UWxuGDFj3J+dGk8DIKFtI=
-
-Name: org/sat4j/pb/constraints/pb/PBConstr.class
-SHA1-Digest: qaZnIWUyx9dxXNAti4MebxloBjE=
-
-Name: org/sat4j/pb/OPBStringSolver.class
-SHA1-Digest: gdLAcb+mUTxzOM6kk/5p88mp0qY=
-
-Name: org/sat4j/pb/constraints/pb/InternalMapPBStructure.class
-SHA1-Digest: W+CVWLpOBzqKrTm71l0sCPWuZyc=
-
-Name: org/sat4j/pb/core/PBSolverStats.class
-SHA1-Digest: i1V3lr1ohpwMObvUCO6yu3+jNlY=
-
-Name: org/sat4j/pb/tools/DisjunctionRHS.class
-SHA1-Digest: MqBHzo9QkDUG85zHorqZaUHoDoU=
-
-Name: org/sat4j/pb/constraints/AbstractPBClauseCardConstrDataStructure
- .class
-SHA1-Digest: QXWQslhjncOBuirq/A6ldLhfOdE=
-
-Name: org/sat4j/pb/PseudoIteratorDecorator.class
-SHA1-Digest: K3JFS3H4wD0Net76iHilpaP/ijA=
-
-Name: org/sat4j/pb/tools/ImplicationRHS.class
-SHA1-Digest: 6N5qhFgu8eCcUJgR/nyZnm9QAO0=
-
-Name: org/sat4j/pb/constraints/pb/IConflict.class
-SHA1-Digest: PHI0OOz1wRQfxXGh8PLGIidS1zg=
-
-Name: org/sat4j/pb/tools/XplainPB.class
-SHA1-Digest: DRGrsuFqXjYIrNN5TreQyylIxKo=
-
-Name: org/sat4j/pb/constraints/pb/PuebloMinWatchPb.class
-SHA1-Digest: 1ALpLOsAU3mfsrmmAVrk5duTFbM=
-
-Name: org/sat4j/pb/reader/OPBReader2005.class
-SHA1-Digest: pKJb39oplIXV3JlrwxWrZBcMk6g=
-
-Name: org/sat4j/pb/reader/OPBEclipseReader2007.class
-SHA1-Digest: cNvV2IRw/CmiGv9Xcp7GkZmMhyg=
-
-Name: org/sat4j/pb/reader/OPBReader2007.class
-SHA1-Digest: bHOST+J41ibjBKz0b7FSbOsyKlY=
-
-Name: org/sat4j/pb/constraints/pb/WatchPb.class
-SHA1-Digest: Wl9nlz4WzhuGaXqZBA8eyw8yzg8=
-
-Name: org/sat4j/pb/tools/ConflictTracing.class
-SHA1-Digest: bNwGBc0F0AQRb65r+fYJ83nYdfs=
-
-Name: org/sat4j/pb/constraints/PBMaxClauseCardConstrDataStructure.clas
- s
-SHA1-Digest: vXE4DWIWLt9Xmnhfq5IB4dIhav0=
-
-Name: org/sat4j/pb/tools/StringNegator.class
-SHA1-Digest: k0hKqdrMlxYBJhCJ8S1QmhrOLJE=
-
-Name: org/sat4j/pb/constraints/pb/LearntHTClausePB.class
-SHA1-Digest: aJhiQFddE3ZDaXaeX/23LeHN1g8=
-
-Name: plugin.properties
-SHA1-Digest: jH6bKyeXDNDTAFPXOMVz3/1taug=
-
-Name: org/sat4j/pb/constraints/pb/ConflictMapCardinality.class
-SHA1-Digest: kYQEQKAQns7W6rY6Y+ZYX9bBpWk=
-
-Name: org/sat4j/pb/OptToPBSATAdapter.class
-SHA1-Digest: MXj/pFl1iZd0sYLMBIrF/1agANM=
-
-Name: org/sat4j/pb/constraints/AbstractPBDataStructureFactory.class
-SHA1-Digest: tPyl3mGH0TFhhdNVWHTDSKj9o3s=
-
-Name: org/sat4j/pb/constraints/PBMaxClauseAtLeastConstrDataStructure.c
- lass
-SHA1-Digest: uKBmKVPD6QYIT3RVFqCUC6kD9qA=
-
-Name: org/sat4j/pb/ObjectiveFunction.class
-SHA1-Digest: F3NAF2DIaLsJAGzMLGIvo97AWeY=
-
-Name: target/META-INF/MANIFEST.MF
-SHA1-Digest: hQv/s0DLOeak/5OqsUcxm3guLeU=
-
-Name: org/sat4j/pb/core/PBSolver.class
-SHA1-Digest: gxJCEd2FqXuZuDpUXEc9kGdprNY=
-
-Name: org/sat4j/pb/reader/PBInstanceReader.class
-SHA1-Digest: J9s9zvTyMXHShX1KupSLAqns3Hw=
-
-Name: org/sat4j/pb/constraints/AbstractPBDataStructureFactory$INormali
- zer.class
-SHA1-Digest: 2iRa3YBib1gXCgoE57DR3NF6x+I=
-
-Name: org/sat4j/pb/tools/DependencyHelper$1.class
-SHA1-Digest: 7fORyR0FINvIRM6pfII4nQmLLhk=
-
-Name: org/sat4j/pb/constraints/AbstractPBDataStructureFactory$1.class
-SHA1-Digest: Ko42eIS8RwhywU09NkfV1pawdlI=
-
-Name: org/sat4j/pb/LanceurPseudo2005.class
-SHA1-Digest: Ka03bnbg7X84LZly4Ncsg/HuWys=
-
-Name: org/sat4j/pb/LanceurPseudo2007.class
-SHA1-Digest: ed4pLqCMTL1Yc4W9hkerdqO6YiQ=
-
-Name: org/sat4j/pb/tools/DependencyHelper$Negation.class
-SHA1-Digest: Rw1JeScc9GREEsMFgDyL7Ebok68=
-
-Name: org/sat4j/pb/constraints/PBMinDataStructure.class
-SHA1-Digest: sKRfSps0qSzK9KigQwTOxj2WagU=
-
-Name: about.html
-SHA1-Digest: GrW2Mel5Q31SWUprDqfCckmZlc8=
-
-Name: org/sat4j/pb/core/PBDataStructureFactory.class
-SHA1-Digest: H8EuqbIE5W7Tphq3qKi7sH6qn/M=
-
-Name: org/sat4j/pb/PseudoOptDecorator.class
-SHA1-Digest: z65sDBvX3JjybTNhUe4IHGtJTcg=
-
-Name: org/sat4j/pb/constraints/PuebloPBMinDataStructure.class
-SHA1-Digest: SM8ErxquNZp0yqPAkjtxKEce+lo=
-
-Name: org/sat4j/pb/constraints/CompetResolutionPBMixedHTClauseCardCons
- trDataStructure.class
-SHA1-Digest: m0yfuYuZXnykAZA/7AUKQXAH21E=
-
-Name: org/sat4j/pb/tools/WeightedObject.class
-SHA1-Digest: 0Ftz4Xdwv6BlICjIiLtQmqig+Fc=
-
-Name: org/sat4j/pb/UserFriendlyPBStringSolver.class
-SHA1-Digest: alT+ejzhY34Amp3w9ibn2W9Pxzw=
-
-Name: org/sat4j/pb/IPBSolver.class
-SHA1-Digest: fYQnDxuLMJKMVYHfvWwgAQFPamk=
-
-Name: org/sat4j/pb/tools/INegator.class
-SHA1-Digest: wcPOwhE1FJYCkyldqzJ4L5++ksM=
-
-Name: org/sat4j/pb/constraints/pb/ConflictMapMerging.class
-SHA1-Digest: F0BQSKqM/+RWB3eVBD/l6Zg6TEw=
-
-Name: org/sat4j/pb/constraints/pb/MixableCBClausePB.class
-SHA1-Digest: kQR6fpZJWXeRbyTtDqVfNuUyMKY=
-
-Name: org/sat4j/pb/OPBStringSolver$1.class
-SHA1-Digest: 5AYRMJJhrIzA0BjEjRSf4DQbeYo=
-
-Name: org/sat4j/pb/constraints/pb/MinWatchPb.class
-SHA1-Digest: USLVxnCfcv8nQNOf627OseH5DIM=
-
diff --git a/dependencyManifests/org.sat4j.pb_2.3.0.v20110329.jar/META-INF/MANIFEST.MF b/dependencyManifests/org.sat4j.pb_2.3.0.v20110329.jar/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..dc33e87
--- /dev/null
+++ b/dependencyManifests/org.sat4j.pb_2.3.0.v20110329.jar/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.8.2
+Created-By: 1.6.0_22-b22 (Sun Microsystems Inc.)
+Bundle-ManifestVersion: 2
+Bundle-Name: %bundleName
+Bundle-SymbolicName: org.sat4j.pb
+Bundle-Version: 2.3.0.v20100429
+Export-Package: org.sat4j.pb;version="2.3.0.v20100429",org.sat4j.pb.co
+ nstraints;version="2.3.0.v20100429",org.sat4j.pb.constraints.pb;versi
+ on="2.3.0.v20100429",org.sat4j.pb.core;version="2.3.0.v20100429",org.
+ sat4j.pb.orders;version="2.3.0.v20100429",org.sat4j.pb.reader;version
+ ="2.3.0.v20100429",org.sat4j.pb.tools;version="2.3.0.v20100429"
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.sat4j.core
+Built-By: Daniel Le Berre
+Main-Class: org.sat4j.pb.LanceurPseudo2007
+Specification-Title: SAT4J
+Specification-Version: NA
+Specification-Vendor: Daniel Le Berre
+Implementation-Title: SAT4J
+Implementation-Version: 2.3.0.v20100429
+Implementation-Vendor: CRIL CNRS UMR 8188 - Universite d'Artois
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+
diff --git a/eclipse-build-additionalArchs.tar.bz2 b/eclipse-build-additionalArchs.tar.bz2
index 9401717..67e50a4 100644
Binary files a/eclipse-build-additionalArchs.tar.bz2 and b/eclipse-build-additionalArchs.tar.bz2 differ
diff --git a/eclipse-build-config/.project b/eclipse-build-config/.project
new file mode 100644
index 0000000..caa03f5
--- /dev/null
+++ b/eclipse-build-config/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>eclipse-build-config</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/eclipse-build-config/ChangeLog b/eclipse-build-config/ChangeLog
index 8c49040..4acb9ca 100644
--- a/eclipse-build-config/ChangeLog
+++ b/eclipse-build-config/ChangeLog
@@ -1,3 +1,7 @@
+2011-04-06  Alexander Kurtakov  <akurtako at redhat.com>
+
+	* build.properties.in: Don't ask javac to be verbose, it just clutters the output.
+
 2010-07-14  Andrew Overholt  <overholt at redhat.com>
 
 	* build.properties.in: Remove svn:executable property.
diff --git a/eclipse-build-config/build.properties.in b/eclipse-build-config/build.properties.in
index a654bfb..c0843b6 100644
--- a/eclipse-build-config/build.properties.in
+++ b/eclipse-build-config/build.properties.in
@@ -39,7 +39,6 @@ configs=\
 archivesFormat =group,group,group-zip
 javacFailOnError=false
 javacDebugInfo=on
-javacVerbose=true
 compilerArg=-inlineJSR -enableJavadoc -encoding ISO-8859-1
 
 zipargs=
diff --git a/eclipse-build-config/productFiles/platform.sdk/platform.product b/eclipse-build-config/productFiles/platform.sdk/platform.product
index be10b2e..56c9635 100644
--- a/eclipse-build-config/productFiles/platform.sdk/platform.product
+++ b/eclipse-build-config/productFiles/platform.sdk/platform.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="Eclipse Platform SDK" uid="org.eclipse.platform.sdk" id="org.eclipse.platform.ide" application="org.eclipse.ui.ide.workbench" version="3.6.0. at qualifier@" useFeatures="true" includeLaunchers="true">
+<product name="Eclipse Platform SDK" uid="org.eclipse.platform.sdk" id="org.eclipse.platform.ide" application="org.eclipse.ui.ide.workbench" version="3.7.0. at qualifier@" useFeatures="true" includeLaunchers="true">
 
    <configIni use="default">
    </configIni>
@@ -28,7 +28,7 @@
         <url>http://eclipse.org/legal/epl/notice.php</url>
         <text>
    Eclipse Foundation Software User Agreement
-April 14, 2010
+February 1, 2011
 
 Usage Of Content
 
@@ -57,7 +57,7 @@ documentation and other files maintained in the Eclipse Foundation source code
 repository ("Repository") in software modules ("Modules") and made available
 as downloadable archives ("Downloads").
 
-       - Content may be structured and packaged into modules to facilitate delivering,
+      - Content may be structured and packaged into modules to facilitate delivering,
          extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),
          plug-in fragments ("Fragments"), and features ("Features").
        - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)
@@ -97,6 +97,7 @@ THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
 TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
 SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
 
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
        - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
        - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
        - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
@@ -173,3 +174,4 @@ Java and all Java-based trademarks are trademarks of Oracle Corporation in the U
    </configurations>
 
 </product>
+
diff --git a/eclipse-build-config/productFiles/platform/platform.product b/eclipse-build-config/productFiles/platform/platform.product
index 5dac54e..3d0c4e6 100644
--- a/eclipse-build-config/productFiles/platform/platform.product
+++ b/eclipse-build-config/productFiles/platform/platform.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="Eclipse Platform" id="org.eclipse.platform.ide" application="org.eclipse.ui.ide.workbench" version="3.6.0. at qualifier@" useFeatures="true">
+<product name="Eclipse Platform" id="org.eclipse.platform.ide" application="org.eclipse.ui.ide.workbench" version="3.7.0. at qualifier@" useFeatures="true">
 
    <configIni use="default">
    </configIni>
diff --git a/eclipse-build-config/productFiles/rcp.sdk/rcp.product b/eclipse-build-config/productFiles/rcp.sdk/rcp.product
index 33be0ba..3aa82d3 100644
--- a/eclipse-build-config/productFiles/rcp.sdk/rcp.product
+++ b/eclipse-build-config/productFiles/rcp.sdk/rcp.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="Eclipse RCP SDK" uid="org.eclipse.rcp.sdk.id" version="3.6.0. at qualifier@" useFeatures="true" includeLaunchers="true">
+<product name="Eclipse RCP SDK" uid="org.eclipse.rcp.sdk.id" version="3.7.0. at qualifier@" useFeatures="true" includeLaunchers="true">
 
    <configIni use="default">
    </configIni>
@@ -26,7 +26,7 @@
         <url>http://eclipse.org/legal/epl/notice.php</url>
         <text>
    Eclipse Foundation Software User Agreement
-April 14, 2010
+February 1, 2011
 
 Usage Of Content
 
@@ -55,7 +55,7 @@ documentation and other files maintained in the Eclipse Foundation source code
 repository ("Repository") in software modules ("Modules") and made available
 as downloadable archives ("Downloads").
 
-       - Content may be structured and packaged into modules to facilitate delivering,
+      - Content may be structured and packaged into modules to facilitate delivering,
          extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),
          plug-in fragments ("Fragments"), and features ("Features").
        - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)
@@ -95,6 +95,7 @@ THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
 TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
 SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
 
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
        - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
        - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
        - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
@@ -168,3 +169,4 @@ Java and all Java-based trademarks are trademarks of Oracle Corporation in the U
    </configurations>
 
 </product>
+
diff --git a/eclipse-build-config/productFiles/rcp/rcp.product b/eclipse-build-config/productFiles/rcp/rcp.product
index 9fadde5..dbec686 100644
--- a/eclipse-build-config/productFiles/rcp/rcp.product
+++ b/eclipse-build-config/productFiles/rcp/rcp.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="Eclipse RCP" uid="org.eclipse.rcp.id" version="3.6.0. at qualifier@" useFeatures="true" includeLaunchers="true">
+<product name="Eclipse RCP" uid="org.eclipse.rcp.id" version="3.7.0. at qualifier@" useFeatures="true" includeLaunchers="true">
 
    <configIni use="default">
    </configIni>
@@ -25,8 +25,7 @@
    <license>
         <url>http://eclipse.org/legal/epl/notice.php</url>
         <text>
-   Eclipse Foundation Software User Agreement
-April 14, 2010
+   February 1, 2011
 
 Usage Of Content
 
@@ -55,7 +54,7 @@ documentation and other files maintained in the Eclipse Foundation source code
 repository ("Repository") in software modules ("Modules") and made available
 as downloadable archives ("Downloads").
 
-       - Content may be structured and packaged into modules to facilitate delivering,
+      - Content may be structured and packaged into modules to facilitate delivering,
          extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),
          plug-in fragments ("Fragments"), and features ("Features").
        - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)
@@ -95,6 +94,7 @@ THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
 TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
 SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
 
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
        - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
        - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
        - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
@@ -145,7 +145,7 @@ and/or re-export to another country, of encryption software. BEFORE
 using any encryption software, please check the country's laws,
 regulations and policies concerning the import, possession, or use, and
 re-export of encryption software, to see if this is permitted.
-s
+
 Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
          </text>
    </license>
diff --git a/eclipse-build-config/productFiles/rcpConfig/buildConfiguration.xml b/eclipse-build-config/productFiles/rcpConfig/buildConfiguration.xml
index 8afcf2a..37f02d7 100644
--- a/eclipse-build-config/productFiles/rcpConfig/buildConfiguration.xml
+++ b/eclipse-build-config/productFiles/rcpConfig/buildConfiguration.xml
@@ -24,6 +24,7 @@
 
 		<!-- generate a feature based on our .product file -->
 		<ant antfile="${eclipse.pdebuild.scripts}/productBuild/productBuild.xml" target="generateFeature" >
+			<property name="nestedInclusions" value="false" />
 			<property name="buildDirectory" value="${basedir}/temp"/>
 		</ant>
 		<!-- generate product build scripts for the generated feature -->
@@ -50,4 +51,4 @@
 			baseDirectory="${basedir}"
 		/>
 	</target>
-</project>
\ No newline at end of file
+</project>
diff --git a/eclipse-build-config/productFiles/rcpConfig/feature.xml b/eclipse-build-config/productFiles/rcpConfig/feature.xml
index 0676e37..89c8eb5 100644
--- a/eclipse-build-config/productFiles/rcpConfig/feature.xml
+++ b/eclipse-build-config/productFiles/rcpConfig/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.rcp.configuration"
       label="%featureName"
-      version="1.0.0.I20090611-1540"
+      version="1.0.0. at qualifier@"
       provider-name="%providerName">
 
    <description>
diff --git a/eclipse-build-config/productFiles/sdk/p2.inf b/eclipse-build-config/productFiles/sdk/p2.inf
index e3cd47c..43d7000 100644
--- a/eclipse-build-config/productFiles/sdk/p2.inf
+++ b/eclipse-build-config/productFiles/sdk/p2.inf
@@ -1,8 +1,8 @@
 instructions.configure=\
-addRepository(type:0,location:http${#58}//download.eclipse.org/eclipse/updates/3.6,name:The Eclipse Project Updates);\
-addRepository(type:1,location:http${#58}//download.eclipse.org/eclipse/updates/3.6,name:The Eclipse Project Updates);\
-addRepository(type:0,location:http${#58}//download.eclipse.org/releases/helios,name:Helios);\
-addRepository(type:1,location:http${#58}//download.eclipse.org/releases/helios,name:Helios);\
+addRepository(type:0,location:http${#58}//download.eclipse.org/eclipse/updates/3.7,name:The Eclipse Project Updates);\
+addRepository(type:1,location:http${#58}//download.eclipse.org/eclipse/updates/3.7,name:The Eclipse Project Updates);\
+addRepository(type:0,location:http${#58}//download.eclipse.org/releases/indigo,name:Indigo);\
+addRepository(type:1,location:http${#58}//download.eclipse.org/releases/indigo,name:Indigo);\
   mkdir(path:${installFolder}/dropins);
 requires.1.namespace=org.eclipse.equinox.p2.iu
 requires.1.name=toolingorg.eclipse.configuration.macosx
diff --git a/eclipse-build-config/productFiles/sdk/sdk.product b/eclipse-build-config/productFiles/sdk/sdk.product
index b841c96..c33946d 100644
--- a/eclipse-build-config/productFiles/sdk/sdk.product
+++ b/eclipse-build-config/productFiles/sdk/sdk.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="Eclipse SDK" id="org.eclipse.sdk.ide" application="org.eclipse.ui.ide.workbench" version="3.6.0. at qualifier@" useFeatures="true">
+<product name="Eclipse SDK" id="org.eclipse.sdk.ide" application="org.eclipse.ui.ide.workbench" version="3.7.0. at qualifier@" useFeatures="true" includeLaunchers="true">
 
    <configIni use="default">
    </configIni>
@@ -30,7 +30,7 @@
         <url>http://eclipse.org/legal/epl/notice.php</url>
         <text>
    Eclipse Foundation Software User Agreement
-April 14, 2010
+February 1, 2011
 
 Usage Of Content
 
@@ -59,7 +59,7 @@ documentation and other files maintained in the Eclipse Foundation source code
 repository ("Repository") in software modules ("Modules") and made available
 as downloadable archives ("Downloads").
 
-       - Content may be structured and packaged into modules to facilitate delivering,
+      - Content may be structured and packaged into modules to facilitate delivering,
          extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),
          plug-in fragments ("Fragments"), and features ("Features").
        - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)
@@ -99,6 +99,7 @@ THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
 TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
 SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
 
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
        - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
        - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
        - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
@@ -177,3 +178,4 @@ Java and all Java-based trademarks are trademarks of Oracle Corporation in the U
    </configurations>
 
 </product>
+
diff --git a/eclipse-build-feature/.project b/eclipse-build-feature/.project
new file mode 100644
index 0000000..d9e97c4
--- /dev/null
+++ b/eclipse-build-feature/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>eclipse-build-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/eclipse-build-generatedScripts.tar.bz2 b/eclipse-build-generatedScripts.tar.bz2
index c2835f3..22c14c7 100644
Binary files a/eclipse-build-generatedScripts.tar.bz2 and b/eclipse-build-generatedScripts.tar.bz2 differ
diff --git a/eclipse/directory.txt b/eclipse/directory.txt
index bc08b3c..544d62e 100644
--- a/eclipse/directory.txt
+++ b/eclipse/directory.txt
@@ -1,170 +1,191 @@
 !***************  ANT CONTRIBUTION  ******************************************************** 
 
 #plugin at org.apache.ant=v20070416,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ant.core=v20110203_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ant.launching=v20101020_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.core=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.launching=v20110506,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ant.ui=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.ui=v20110510,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.externaltools=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.externaltools=v20100831_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.externaltools=v20110506,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.externaltools=v20110506,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ant.tests.core=v20091214,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ant.tests.ui=v20100602-1000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.tests.core=v20110506,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.tests.ui=v20110506,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  COMPARE CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.compare=R36x_v20100929-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare
-plugin at org.eclipse.compare.core=R36x_v20100929-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.core
-plugin at org.eclipse.compare.win32=R36x_v20101103-0618,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.win32
+plugin at org.eclipse.compare=I20110525-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare
+plugin at org.eclipse.compare.core=I20110208-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.core
+plugin at org.eclipse.compare.win32=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.win32
 
-plugin at org.eclipse.compare.examples=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.compare.examples.xml=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.compare.examples=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.compare.examples.xml=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.compare.tests=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.compare.tests=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  CORE (HP-UX) CONTRIBUTION  ************************************************ 
 
-fragment at org.eclipse.core.filesystem.hpux.ia64_32=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.hpux.ia64_32=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  CORE (MacOSX) CONTRIBUTION  ************************************************ 
 
-fragment at org.eclipse.core.filesystem.macosx=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.macosx=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  CORE VARIABLES CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.core.variables=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-!***************  CORE CONTRIBUTION  ******************************************************** 
+plugin at org.eclipse.core.variables=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+!***************  CORE CONTRIBUTION  ********************************************************* 
 
 !**** OSGi
-plugin at org.eclipse.osgi=R36x_v20110210,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
-plugin at org.eclipse.osgi.services=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services
-plugin at org.eclipse.osgi.util=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util
+plugin at org.eclipse.osgi=v20110613,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
+plugin at org.eclipse.osgi.services=v20110513,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services
+plugin at org.eclipse.osgi.util=v20110110,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util
 
 !**** Equinox
-plugin at org.eclipse.equinox.common=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.common
-plugin at org.eclipse.equinox.preferences=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences
-plugin at org.eclipse.equinox.registry=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry
-plugin at org.eclipse.equinox.supplement=R36x_v20101021,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement
-plugin at org.eclipse.equinox.app=R36x_v20100803,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
-plugin at org.eclipse.equinox.device=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device
-plugin at org.eclipse.equinox.event=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event
-plugin at org.eclipse.equinox.http=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http
-plugin at org.eclipse.equinox.log=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.log
-plugin at org.eclipse.equinox.metatype=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.metatype
-plugin at org.eclipse.equinox.useradmin=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.useradmin
-plugin at org.eclipse.equinox.http.jetty,2.0.0=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6
-plugin at org.eclipse.equinox.http.jetty,1.1.100=v20100519,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty5
-plugin at org.eclipse.equinox.http.servlet=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.servlet
+plugin at org.eclipse.equinox.common=v20110523,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.common
+plugin at org.eclipse.equinox.preferences=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences
+plugin at org.eclipse.equinox.registry=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry
+plugin at org.eclipse.equinox.supplement=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement
+plugin at org.eclipse.equinox.app=v20110321,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
+plugin at org.eclipse.equinox.device=v20101217,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device
+plugin at org.eclipse.equinox.event=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event
+plugin at org.eclipse.equinox.http=v20110413,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http
+plugin at org.eclipse.equinox.log=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.log
+plugin at org.eclipse.equinox.metatype=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.metatype
+plugin at org.eclipse.equinox.useradmin=v20110413,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.useradmin
+plugin at org.eclipse.equinox.http.jetty,2.0.0=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6
+plugin at org.eclipse.equinox.http.jetty,1.1.100=v20110418,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty5
+plugin at org.eclipse.equinox.http.servlet=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.servlet
 plugin at org.eclipse.equinox.http.servletbridge=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.servletbridge
-plugin at org.eclipse.equinox.http.registry=R36x_v20101103,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.registry
-plugin at org.eclipse.equinox.servletbridge=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge
+plugin at org.eclipse.equinox.http.registry=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.registry
+plugin at org.eclipse.equinox.servletbridge=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge
 fragment at org.eclipse.equinox.servletbridge.extensionbundle=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge.extensionbundle
-bundle at org.eclipse.equinox.jsp.jasper=R36x_v20101103,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper
+bundle at org.eclipse.equinox.jsp.jasper=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper
 bundle at org.eclipse.equinox.jsp.jasper.registry=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper.registry
-plugin at org.eclipse.equinox.cm=v20100520,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.cm
-plugin at org.eclipse.equinox.concurrent=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent
+plugin at org.eclipse.equinox.cm=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.cm
+plugin at org.eclipse.equinox.concurrent=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent
+plugin at org.eclipse.equinox.coordinator=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.coordinator
 
 !**** Prosyst Contributions
-plugin at org.eclipse.equinox.ds=R36x_v20100803,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
-plugin at org.eclipse.equinox.io=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io
-plugin at org.eclipse.equinox.ip=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip
-plugin at org.eclipse.equinox.util=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util
-plugin at org.eclipse.equinox.wireadmin=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.wireadmin
+plugin at org.eclipse.equinox.ds=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
+plugin at org.eclipse.equinox.io=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io
+plugin at org.eclipse.equinox.ip=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip
+plugin at org.eclipse.equinox.util=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util
+plugin at org.eclipse.equinox.wireadmin=v20110601,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.wireadmin
 
 !**** Security Contributions
-plugin at org.eclipse.equinox.security=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security
-plugin at org.eclipse.equinox.security.tests=v20080722-0430,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.tests
-plugin at org.eclipse.equinox.security.ui=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.ui
+plugin at org.eclipse.equinox.security=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security
+plugin at org.eclipse.equinox.security.tests=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.tests
+plugin at org.eclipse.equinox.security.ui=v20101004,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.ui
 fragment at org.eclipse.equinox.security.win32.x86=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.win32.x86
+fragment at org.eclipse.equinox.security.win32.x86_64=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.win32.x86_64
 fragment at org.eclipse.equinox.security.macosx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.macosx
 
 !**** Transforms
 plugin at org.eclipse.equinox.transforms.xslt=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.xslt
-fragment at org.eclipse.equinox.transforms.hook=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.hook
+fragment at org.eclipse.equinox.transforms.hook=v20100719,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.hook
 
 !**** Weaving
-plugin at org.eclipse.equinox.weaving.aspectj=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj
-plugin at org.eclipse.equinox.weaving.caching=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching
-plugin at org.eclipse.equinox.weaving.caching.j9=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9
-fragment at org.eclipse.equinox.weaving.hook=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook
+plugin at org.eclipse.equinox.weaving.aspectj=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj
+plugin at org.eclipse.equinox.weaving.caching=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching
+plugin at org.eclipse.equinox.weaving.caching.j9=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9
+fragment at org.eclipse.equinox.weaving.hook=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook
 
 !****launcher, startup.jar
-plugin at org.eclipse.equinox.launcher=R36x_v20101122_1400,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher
-fragment at org.eclipse.equinox.launcher.win32.win32.x86=R36x_v20101222,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
-fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=R36x_v20101222,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
-fragment at org.eclipse.equinox.launcher.win32.win32.ia64=R36x_v20101222,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
-fragment at org.eclipse.equinox.launcher.wpf.win32.x86=R36x_v20101222,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
-fragment at org.eclipse.equinox.launcher.carbon.macosx=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
-fragment at org.eclipse.equinox.launcher.gtk.aix.ppc64=R36x_v20101102,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64
-fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
-fragment at org.eclipse.equinox.launcher.motif.aix.ppc=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
-fragment at org.eclipse.equinox.launcher.motif.linux.x86=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
-plugin at org.eclipse.equinox.launcher.releng=R36x_v20101019,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/releng/org.eclipse.equinox.launcher.releng
+plugin at org.eclipse.equinox.launcher=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher
+fragment at org.eclipse.equinox.launcher.win32.win32.x86=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
+fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
+fragment at org.eclipse.equinox.launcher.win32.win32.ia64=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
+fragment at org.eclipse.equinox.launcher.wpf.win32.x86=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
+fragment at org.eclipse.equinox.launcher.carbon.macosx=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
+fragment at org.eclipse.equinox.launcher.gtk.aix.ppc64=v20110530,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64
+fragment at org.eclipse.equinox.launcher.gtk.aix.ppc=v20110530,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc
+fragment at org.eclipse.equinox.launcher.gtk.hpux.ia64_32=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32
+fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
+fragment at org.eclipse.equinox.launcher.motif.aix.ppc=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
+fragment at org.eclipse.equinox.launcher.motif.linux.x86=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
+plugin at org.eclipse.equinox.launcher.releng=v20101129,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/releng/org.eclipse.equinox.launcher.releng
 
 !****contributed fragments
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390=R36x_v20110125,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=R36x_v20110125,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
-fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
-fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=R36x_v20101019_1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
+fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
+fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
 
-feature at org.eclipse.equinox.executable=R36x_v20110125,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
+feature at org.eclipse.equinox.executable=v20110530,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
 
 !**** Runtime
-plugin at org.eclipse.core.runtime=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.contenttype=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.jobs=R36x_v20100824,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.runtime=v20110110,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.contenttype=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.jobs=v20110404,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Expressions
-plugin at org.eclipse.core.expressions=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.expressions=v20110228,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.core.expressions.tests=v20091203,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Resources
-plugin at org.eclipse.core.resources=R36x_v20110131-1630,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.resources=v20110510-0712,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.core.resources.win32=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.resources.win32.x86=v20100505-1345,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.resources.win32.ia64=v20081020,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.resources.compatibility=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.resources.win32.x86=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.resources.win32.ia64=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.resources.compatibility=v20101108,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** File System
-plugin at org.eclipse.core.filesystem=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86_64=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.ia64=R36x_v20100727-0745,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.linux.x86=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.linux.x86_64=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.linux.ppc=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.solaris.sparc=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.aix.ppc=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.aix.ppc
+plugin at org.eclipse.core.filesystem=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86_64=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.ia64=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.linux.x86=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.linux.x86_64=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.solaris.sparc=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.aix.ppc=v20110423-0524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.aix.ppc
 
 !**** Legacy Runtime
 plugin at org.eclipse.core.boot=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.core.runtime.compatibility=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.runtime.compatibility.auth=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.runtime.compatibility.registry=v20100520,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.runtime.compatibility.auth=v20110110,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.runtime.compatibility.registry=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Other Core Code
-plugin at org.eclipse.pde.build=R36x_20110203,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
-plugin at org.eclipse.pde.build.tests=R36x_v20110111,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
+plugin at org.eclipse.pde.build=v20110512-1320,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
+plugin at org.eclipse.pde.build.tests=v20110512-1320,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
 feature at org.eclipse.pde.builder=v20040624a,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build/feature
+feature at org.eclipse.pde.build.feature=v20110123,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.feature
+feature at org.eclipse.pde.build.product.feature=v20110123,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.product.feature
+
+!**** Features and Products
+feature at org.eclipse.core.runtime.feature=v20110124,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.equinox.compendium.sdk=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/compendium/features/org.eclipse.equinox.compendium.sdk
+feature at org.eclipse.equinox.core.feature=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/features/org.eclipse.equinox.core.feature
+feature at org.eclipse.equinox.core.sdk=CVS,tag=v20110506-0800,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/framework/features/org.eclipse.equinox.core.sdk
+feature at org.eclipse.equinox.sdk=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/features/org.eclipse.equinox.sdk
+feature at org.eclipse.equinox.starterkit.product.feature=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/features/org.eclipse.equinox.starterkit.product.feature
+feature at org.eclipse.equinox.server.core=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.core
+feature at org.eclipse.equinox.server.jetty=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.jetty
+feature at org.eclipse.equinox.server.p2=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.p2
+feature at org.eclipse.equinox.server.servletbridge=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.servletbridge
+feature at org.eclipse.equinox.server.simple=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.simple
+feature at org.eclipse.equinox.serverside.sdk=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.serverside.sdk
+feature at org.eclipse.equinox.weaving.sdk=CVS,tag=v20110502,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/weaving/features/org.eclipse.equinox.weaving.sdk
 
 !**** Test Suites
-plugin at org.eclipse.core.tests.harness=v20100505-1235,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.resources=R36x_v20110131-1630,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.runtime=R36x_v20101213,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.osgi.tests=R36x_v20101103,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
+plugin at org.eclipse.core.tests.harness=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.resources=v20110511-0607,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.runtime=v20110506,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.osgi.tests=v20110513,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
+plugin at org.eclipse.equinox.ds.tests=v20110502,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds.tests
 !***************  DOC CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.platform.doc.user=r362_v20101117-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.platform.doc.isv=r362_v20110111,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.user=v20110601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.isv=v20110602-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.doc.user=r361_v20100721-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.doc.isv=r362_v20101117-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.user=v20110601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.isv=v20110531-1242,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.pde.doc.user=v20101118_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
+plugin at org.eclipse.pde.doc.user=v20110601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
 !***************  Equinox Incubator Contribution ***************************
 
 !**** Initializer bundle
@@ -176,30 +197,40 @@ bundle at org.eclipse.equinox.initializer=v20100503,:pserver:anonymous at dev.eclipse.
 plugin at org.eclipse.equinox.jmx.client=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client
 plugin at org.eclipse.equinox.jmx.client.rmi=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.rmi
 plugin at org.eclipse.equinox.jmx.client.xmlrpc=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.xmlrpc
-feature at org.eclipse.equinox.jmx.client.feature=v20081124,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.feature
+feature at org.eclipse.equinox.jmx.client.feature=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.feature
 
 !** Common **
 plugin at org.eclipse.equinox.jmx.common=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common
-feature at org.eclipse.equinox.jmx.common.feature=v20070507,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common.feature
+feature at org.eclipse.equinox.jmx.common.feature=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common.feature
 
 !** Server **
 plugin at org.eclipse.equinox.jmx.server=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server
 plugin at org.eclipse.equinox.jmx.server.rmi=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.rmi
-plugin at org.eclipse.equinox.jmx.server.xmlrpc=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.xmlrpc
+plugin at org.eclipse.equinox.jmx.server.xmlrpc=v20110413,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.xmlrpc
 plugin at org.eclipse.equinox.jmx.vm=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.vm
 plugin at org.eclipse.equinox.preferences.jmx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.preferences.jmx
 plugin at org.eclipse.equinox.registry.jmx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.registry.jmx
-plugin at org.eclipse.osgi.jmx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.osgi.jmx
+plugin at org.eclipse.osgi.jmx=v20110414,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.osgi.jmx
 plugin at org.eclipse.swt.jmx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.swt.jmx
 plugin at org.eclipse.core.resources.jmx=v20100503,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.core.resources.jmx
-feature at org.eclipse.equinox.jmx.server.feature=v20081124,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.feature
+feature at org.eclipse.equinox.jmx.server.feature=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.feature
+
+!** Console **
+plugin at org.eclipse.equinox.console.supportability=v20110207,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/console/org.eclipse.equinox.console.supportability
+
+!** Region **
+plugin at org.eclipse.equinox.region=v20110524,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.region
+plugin at org.eclipse.equinox.region.tests=v20110523,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.region.tests
+
+!** Feature for all equinox incubatorbundles **
+feature at org.eclipse.equinox.incubator.feature=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.incubator.feature
 !***************  FEATURE CONTRIBUTION  ******************************************************
-feature at org.eclipse.sdk=r362_v20100929,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
-plugin at org.eclipse.sdk=r362_v20110202,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.sdk=v20110426,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
+plugin at org.eclipse.sdk=v20110504-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.jdt=r362_v20101117-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
+feature at org.eclipse.jdt=v20110520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
 
-feature at org.eclipse.pde=r362_v20110203,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
+feature at org.eclipse.pde=v20110504-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
 feature at org.eclipse.pde.api.tools.ee.cdcfoundation10_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10-feature
 feature at org.eclipse.pde.api.tools.ee.cdcfoundation11_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11-feature
 feature at org.eclipse.pde.api.tools.ee.j2se12_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12-feature
@@ -212,204 +243,206 @@ feature at org.eclipse.pde.api.tools.ee.osgiminimum10_feature=v20091027-1300,:pserv
 feature at org.eclipse.pde.api.tools.ee.osgiminimum11_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11-feature
 feature at org.eclipse.pde.api.tools.ee.osgiminimum12_feature=v20091027-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12-feature
 
-feature at org.eclipse.platform=r362_v20110210,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
-plugin at org.eclipse.platform=r362_v20110120,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
-feature at org.eclipse.sdk.examples=r362_v20101014,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.examples-feature
-plugin at org.eclipse.sdk.examples=v20100527,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
-feature at org.eclipse.sdk.tests=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
-plugin at org.eclipse.sdk.tests=v20060605,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.platform=v20110530,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
+plugin at org.eclipse.platform=v20110520,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.equinox.sdk=r362_v20110210b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.equinox.sdk
+feature at org.eclipse.sdk.examples=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.examples-feature
+plugin at org.eclipse.sdk.examples=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.cvs=r362_v20101111,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature
-plugin at org.eclipse.cvs=v20100414,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs
+feature at org.eclipse.sdk.tests=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
+plugin at org.eclipse.sdk.tests=v20100907,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.help=r362_v20101111,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.help-feature
+feature at org.eclipse.cvs=v20110520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature
+plugin at org.eclipse.cvs=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs
 
-feature at org.eclipse.equinox.p2.user.ui=r361_v20100903,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/org.eclipse.equinox.p2.releng/buildtime-features/org.eclipse.equinox.p2.user.ui
+feature at org.eclipse.help=v20110327,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.help-feature
 
-feature at org.eclipse.equinox.p2.sdk=CVS,tag=R36x_v20110120,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.sdk
-feature at org.eclipse.equinox.p2.discovery.feature=CVS,tag=R36x_v20110210,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.discovery.feature
-feature at org.eclipse.equinox.core.sdk=CVS,tag=r36x_v20110210,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/framework/features/org.eclipse.equinox.core.sdk
-feature at org.eclipse.equinox.compendium.sdk=CVS,tag=R36x_v20101014,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/compendium/features/org.eclipse.equinox.compendium.sdk
+feature at org.eclipse.pde.api.tools.ee.fragments=v20110123,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.api.tools.ee.fragments
 
-feature at org.eclipse.equinox.serverside.sdk=CVS,tag=R36x_v20101014,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.serverside.sdk
-feature at org.eclipse.equinox.server.core=CVS,tag=R36x_v20101007,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.core
-feature at org.eclipse.equinox.server.jetty=CVS,tag=v20100510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.jetty
-feature at org.eclipse.equinox.server.p2=CVS,tag=R36x_v20101007,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.p2
-feature at org.eclipse.equinox.server.servletbridge=CVS,tag=v20100510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.servletbridge
-feature at org.eclipse.equinox.server.simple=CVS,tag=v20100510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.simple
-
-feature at org.eclipse.equinox.weaving.sdk=CVS,tag=v20100421,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/weaving/features/org.eclipse.equinox.weaving.sdk
-
-feature at org.eclipse.pde.api.tools.ee.fragments=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.api.tools.ee.fragments
+feature at org.eclipse.pde.junit.runtime.addon=v20110331,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.junit.runtime.addon
+feature at org.eclipse.pde.junit.runtime.standalone=v20110331,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.junit.runtime.standalone
+feature at org.eclipse.license=v20110208,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.license
 
 !***************  JDT APT CONTRIBUTION *******************************************
 
-plugin at org.eclipse.jdt.apt.core=R36_v20110120-1000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.ui=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.tests=R36x_v20100707-0100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.jdt.compiler.apt=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.compiler.apt.tests=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.pluggable.core=R36_v20100727-0110,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.pluggable.tests=v20100513-0845,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.core=v20110420-1015,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.ui=v20110305-1450,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.tests=v20110305-1450,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.jdt.compiler.apt=v0110509-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.compiler.apt.tests=v0110509-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.pluggable.core=v20110305-1450,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.pluggable.tests=v20110305-1450,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-!*********************************** JDT CORE CONTRIBUTION ******************************************* 
+!*******************************  JDT CORE CONTRIBUTION ******************************************* 
 
-plugin at org.eclipse.jdt.core=v_A76_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.jdt.compiler.tool=v_A76_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core=v_B61,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.jdt.compiler.tool=v_B61,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.core.tests.builder=v_A76_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.compiler=v_A76_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.model=v_A76_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.performance=v_A76_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.compiler.tool.tests=v_A76_R36x,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.builder=v_B61,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.compiler=v_B61,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.model=v_B61,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.performance=v_B61,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.compiler.tool.tests=v_B61,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  DEBUG CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.debug.core=v20100519,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.ui=v20101201_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.debug=v20100715_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.debug.ui=v20100928a_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.launching=v20110105_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.launching.macosx=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.launching.ui.macosx=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.core=v20110518,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.ui=v20110518,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug=v20110509,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug.ui=v20110512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.launching=v20110509,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.launching.macosx=v20110509,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.launching.ui.macosx=v20110509,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.console=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.console=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.debug.tests=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.tests=v20100624_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug.tests=v20110509,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.tests=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.debug.examples.core=v20100505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.examples.ui=v20100526,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.examples.core=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.examples.ui=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  JDT UI CONTRIBUTION  ******************************************************** 
-plugin at org.eclipse.search=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.search.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.search=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.search.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ltk.core.refactoring=r362_v20101117-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ltk.core.refactoring.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ltk.ui.refactoring=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ltk.ui.refactoring.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.core.refactoring=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.core.refactoring.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.ui.refactoring=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.ui.refactoring.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.core.manipulation=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.manipulation=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.ui=r362_v20110203,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui.tests=r361_v20100818-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui.tests.refactoring=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui=v20110531-1200,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui.tests=v20110518-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui.tests.refactoring=v20110511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.junit=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit.core=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit.runtime=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit4.runtime=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit.core=v20110518-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit.runtime=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit4.runtime=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 plugin at org.junit4=v20100525,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  ORBIT CONTRIBUTION  ********************************************************
-plugin at com.ibm.icu,4.2.1=p2IU,id=com.ibm.icu,version=4.2.1.v20100412,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.ibm.icu.base,4.2.1=p2IU,id=com.ibm.icu.base,version=4.2.1.v20100412,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.ibm.icu.base.source,4.2.1=p2IU,id=com.ibm.icu.base.source,version=4.2.1.v20100412,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.ibm.icu.source,4.2.1=p2IU,id=com.ibm.icu.source,version=4.2.1.v20100412,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.jcraft.jsch,0.1.41=p2IU,id=com.jcraft.jsch,version=0.1.41.v200903070017,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.jcraft.jsch.source,0.1.41=p2IU,id=com.jcraft.jsch.source,version=0.1.41.v200903070017,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.management,1.2.0=p2IU,id=javax.management,version=1.2.0.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.management.remote,1.0.0=p2IU,id=javax.management.remote,version=1.0.0.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet,2.4.0=p2IU,id=javax.servlet,version=2.4.0.v200806031604,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet,2.5.0=p2IU,id=javax.servlet,version=2.5.0.v200910301333,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.source,2.4.0=p2IU,id=javax.servlet.source,version=2.4.0.v200806031604,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.source,2.5.0=p2IU,id=javax.servlet.source,version=2.5.0.v200910301333,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.jsp,2.0.0=p2IU,id=javax.servlet.jsp,version=2.0.0.v200806031607,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.jsp.source,2.0.0=p2IU,id=javax.servlet.jsp.source,version=2.0.0.v200806031607,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at net.sourceforge.mx4j,3.0.1=p2IU,id=net.sourceforge.mx4j,version=3.0.1.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at net.sourceforge.mx4j.remote,3.0.1=p2IU,id=net.sourceforge.mx4j.remote,version=3.0.1.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ant,1.7.1=p2IU,id=org.apache.ant,version=1.7.1.v20100518-1145,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ant.source,1.7.1=p2IU,id=org.apache.ant.source,version=1.7.1.v20100518-1145,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.codec,1.3.0=p2IU,id=org.apache.commons.codec,version=1.3.0.v20100518-1140,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.codec.source,1.3.0=p2IU,id=org.apache.commons.codec.source,version=1.3.0.v20100518-1140,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.el,1.0.0=p2IU,id=org.apache.commons.el,version=1.0.0.v201004212143,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.el.source,1.0.0=p2IU,id=org.apache.commons.el.source,version=1.0.0.v201004212143,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.httpclient,3.1.0=p2IU,id=org.apache.commons.httpclient,version=3.1.0.v201005080502,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.httpclient.source,3.1.0=p2IU,id=org.apache.commons.httpclient.source,version=3.1.0.v201005080502,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.logging,1.0.4=p2IU,id=org.apache.commons.logging,version=1.0.4.v201005080501,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.logging.source,1.0.4=p2IU,id=org.apache.commons.logging.source,version=1.0.4.v201005080501,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.jasper,5.5.17=p2IU,id=org.apache.jasper,version=5.5.17.v201004212143,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.jasper.source,5.5.17=p2IU,id=org.apache.jasper.source,version=5.5.17.v201004212143,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.lucene,1.9.1=p2IU,id=org.apache.lucene,version=1.9.1.v20100518-1140,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.lucene.analysis,1.9.1=p2IU,id=org.apache.lucene.analysis,version=1.9.1.v20100518-1140,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.lucene.analysis.source,1.9.1=p2IU,id=org.apache.lucene.analysis.source,version=1.9.1.v20100518-1140,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ws.commons.util,1.0.0=p2IU,id=org.apache.ws.commons.util,version=1.0.0.v20100518-1135,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ws.jaxme,0.5.1=p2IU,id=org.apache.ws.jaxme,version=0.5.1.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.xmlrpc,3.0.0=p2IU,id=org.apache.xmlrpc,version=3.0.0.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.easymock,2.4.0=p2IU,id=org.easymock,version=2.4.0.v20090202-0900,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.easymock.source,2.4.0=p2IU,id=org.easymock.source,version=2.4.0.v20090202-0900,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.hamcrest.core,1.1.0=p2IU,id=org.hamcrest.core,version=1.1.0.v20090501071000,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.hamcrest.core.source,1.1.0=p2IU,id=org.hamcrest.core.source,version=1.1.0.v20090501071000,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit,3.8.2=p2IU,id=org.junit,version=3.8.2.v3_8_2_v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit.source,3.8.2=p2IU,id=org.junit.source,version=3.8.2.v3_8_2_v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit,4.8.1=p2IU,id=org.junit,version=4.8.1.v4_8_1_v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit.source,4.8.1=p2IU,id=org.junit.source,version=4.8.1.v4_8_1_v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty,5.1.14=p2IU,id=org.mortbay.jetty,version=5.1.14.v200806031611,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.source,5.1.14=p2IU,id=org.mortbay.jetty.source,version=5.1.14.v200806031611,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.server,6.1.23=p2IU,id=org.mortbay.jetty.server,version=6.1.23.v201004211559,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.server.source,6.1.23=p2IU,id=org.mortbay.jetty.server.source,version=6.1.23.v201004211559,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.util,6.1.23=p2IU,id=org.mortbay.jetty.util,version=6.1.23.v201004211559,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.util.source,6.1.23=p2IU,id=org.mortbay.jetty.util.source,version=6.1.23.v201004211559,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
+plugin at com.ibm.icu,4.4.2=p2IU,id=com.ibm.icu,version=4.4.2.v20110208,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.ibm.icu.base,4.4.2=p2IU,id=com.ibm.icu.base,version=4.4.2.v20110208,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.ibm.icu.base.source,4.4.2=p2IU,id=com.ibm.icu.base.source,version=4.4.2.v20110208,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.ibm.icu.source,4.4.2=p2IU,id=com.ibm.icu.source,version=4.4.2.v20110208,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.jcraft.jsch,0.1.41=p2IU,id=com.jcraft.jsch,version=0.1.41.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.jcraft.jsch.source,0.1.41=p2IU,id=com.jcraft.jsch.source,version=0.1.41.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.management,1.2.0=p2IU,id=javax.management,version=1.2.0.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.management.remote,1.0.0=p2IU,id=javax.management.remote,version=1.0.0.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet,2.4.0=p2IU,id=javax.servlet,version=2.4.0.v200806031604,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet,2.5.0=p2IU,id=javax.servlet,version=2.5.0.v201103041518,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.source,2.4.0=p2IU,id=javax.servlet.source,version=2.4.0.v200806031604,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.source,2.5.0=p2IU,id=javax.servlet.source,version=2.5.0.v201103041518,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.jsp,2.0.0=p2IU,id=javax.servlet.jsp,version=2.0.0.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.jsp.source,2.0.0=p2IU,id=javax.servlet.jsp.source,version=2.0.0.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at net.sourceforge.mx4j,3.0.1=p2IU,id=net.sourceforge.mx4j,version=3.0.1.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at net.sourceforge.mx4j.remote,3.0.1=p2IU,id=net.sourceforge.mx4j.remote,version=3.0.1.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ant,1.8.2=p2IU,id=org.apache.ant,version=1.8.2.v20110505-1300,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ant.source,1.8.2=p2IU,id=org.apache.ant.source,version=1.8.2.v20110505-1300,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.codec,1.3.0=p2IU,id=org.apache.commons.codec,version=1.3.0.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.codec.source,1.3.0=p2IU,id=org.apache.commons.codec.source,version=1.3.0.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.el,1.0.0=p2IU,id=org.apache.commons.el,version=1.0.0.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.el.source,1.0.0=p2IU,id=org.apache.commons.el.source,version=1.0.0.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.httpclient,3.1.0=p2IU,id=org.apache.commons.httpclient,version=3.1.0.v201012070820,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.httpclient.source,3.1.0=p2IU,id=org.apache.commons.httpclient.source,version=3.1.0.v201012070820,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.logging,1.0.4=p2IU,id=org.apache.commons.logging,version=1.0.4.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.logging.source,1.0.4=p2IU,id=org.apache.commons.logging.source,version=1.0.4.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.jasper,5.5.17=p2IU,id=org.apache.jasper,version=5.5.17.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.jasper.source,5.5.17=p2IU,id=org.apache.jasper.source,version=5.5.17.v201101211617,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene,2.9.1=p2IU,id=org.apache.lucene,version=2.9.1.v201101211721,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.source,2.9.1=p2IU,id=org.apache.lucene.source,version=2.9.1.v201101211721,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.analysis,2.9.1=p2IU,id=org.apache.lucene.analysis,version=2.9.1.v201101211721,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.analysis.source,2.9.1=p2IU,id=org.apache.lucene.analysis.source,version=2.9.1.v201101211721,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.core,2.9.1=p2IU,id=org.apache.lucene.core,version=2.9.1.v201101211721,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.core.source,2.9.1=p2IU,id=org.apache.lucene.core.source,version=2.9.1.v201101211721,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ws.commons.util,1.0.0=p2IU,id=org.apache.ws.commons.util,version=1.0.0.v20100518-1135,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ws.jaxme,0.5.1=p2IU,id=org.apache.ws.jaxme,version=0.5.1.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.xmlrpc,3.0.0=p2IU,id=org.apache.xmlrpc,version=3.0.0.v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.easymock,2.4.0=p2IU,id=org.easymock,version=2.4.0.v20090202-0900,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.easymock.source,2.4.0=p2IU,id=org.easymock.source,version=2.4.0.v20090202-0900,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.hamcrest.core,1.1.0=p2IU,id=org.hamcrest.core,version=1.1.0.v20090501071000,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.hamcrest.core.source,1.1.0=p2IU,id=org.hamcrest.core.source,version=1.1.0.v20090501071000,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit,3.8.2=p2IU,id=org.junit,version=3.8.2.v3_8_2_v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit.source,3.8.2=p2IU,id=org.junit.source,version=3.8.2.v3_8_2_v20100427-1100,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit,4.8.2=p2IU,id=org.junit,version=4.8.2.v4_8_2_v20110321-1705,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit.source,4.8.2=p2IU,id=org.junit.source,version=4.8.2.v4_8_2_v20110321-1705,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty,5.1.14=p2IU,id=org.mortbay.jetty,version=5.1.14.v200806031611,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.source,5.1.14=p2IU,id=org.mortbay.jetty.source,version=5.1.14.v200806031611,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.server,6.1.23=p2IU,id=org.mortbay.jetty.server,version=6.1.23.v201012071420,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.server.source,6.1.23=p2IU,id=org.mortbay.jetty.server.source,version=6.1.23.v201012071420,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.util,6.1.23=p2IU,id=org.mortbay.jetty.util,version=6.1.23.v201012071420,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.util.source,6.1.23=p2IU,id=org.mortbay.jetty.util.source,version=6.1.23.v201012071420,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
 
 # Bundles from Orbit for p2
-plugin at org.apache.xml.resolver,1.2.0=p2IU,id=org.apache.xml.resolver,version=1.2.0.v201005080400,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.xerces,2.8.0=p2IU,id=org.apache.xerces,version=2.8.0.v200803070308,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.sat4j.core,2.2.0=p2IU,id=org.sat4j.core,version=2.2.0.v20100429,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.sat4j.pb,2.2.0=p2IU,id=org.sat4j.pb,version=2.2.0.v20100429,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
+plugin at org.apache.xml.resolver,1.2.0=p2IU,id=org.apache.xml.resolver,version=1.2.0.v201005080400,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.xerces,2.8.0=p2IU,id=org.apache.xerces,version=2.8.0.v200803070308,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.sat4j.core,2.3.0=p2IU,id=org.sat4j.core,version=2.3.0.v20110329,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.sat4j.pb,2.3.0=p2IU,id=org.sat4j.pb,version=2.3.0.v20110329,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
 
 # Orbit bundles for API tooling
-plugin at org.objectweb.asm,3.2.0=p2IU,id=org.objectweb.asm,version=3.2.0.v200909071300,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.objectweb.asm.source,3.2.0=p2IU,id=org.objectweb.asm.source,version=3.2.0.v200909071300,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/repository
+plugin at org.objectweb.asm,3.3.1=p2IU,id=org.objectweb.asm,version=3.3.1.v201105211655,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.objectweb.asm.source,3.3.1=p2IU,id=org.objectweb.asm.source,version=3.3.1.v201105211655,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
 
 #aspectj plugins for equinox weaving plugins
 plugin at org.aspectj.weaver,1.6.7=p2IU,id=org.aspectj.weaver,version=1.6.7.20091231194938,repository=http://download.eclipse.org/tools/ajdt/aspectj/update																   
 plugin at org.aspectj.runtime,1.6.7=p2IU,id=org.aspectj.runtime,version=1.6.7.20091231194938,repository=http://download.eclipse.org/tools/ajdt/aspectj/update
-plugin at org.eclipse.equinox.frameworkadmin=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin
-plugin at org.eclipse.equinox.frameworkadmin.equinox=CVS,tag=v20100505,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox
-plugin at org.eclipse.equinox.frameworkadmin.test=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.test
-plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=R36x_v20100901,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
-plugin at org.eclipse.equinox.p2.console=CVS,tag=v20100601,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console
-plugin at org.eclipse.equinox.p2.core=CVS,tag=R36x_v20110111,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
-plugin at org.eclipse.equinox.p2.director=CVS,tag=R36x_v20101117-1018,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
-plugin at org.eclipse.equinox.p2.director.app=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
-plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=R36x_v20101220,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
-plugin at org.eclipse.equinox.p2.discovery=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery
-plugin at org.eclipse.equinox.p2.discovery.compatibility=CVS,tag=v20110204-1323,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility
-plugin at org.eclipse.equinox.p2.engine=CVS,tag=R36x_v20110201,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine
-plugin at org.eclipse.equinox.p2.extensionlocation=CVS,tag=v20100518,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation
-plugin at org.eclipse.equinox.p2.garbagecollector=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.garbagecollector
-plugin at org.eclipse.equinox.p2.installer=CVS,tag=v20100503a,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.installer
-plugin at org.eclipse.equinox.p2.jarprocessor=CVS,tag=v20100503a,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.jarprocessor
-plugin at org.eclipse.equinox.p2.metadata=CVS,tag=R36x_v20101202,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata
-plugin at org.eclipse.equinox.p2.metadata.generator=CVS,tag=R36x_v20101208-1400,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.generator
-plugin at org.eclipse.equinox.p2.metadata.repository=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository
-plugin at org.eclipse.equinox.p2.operations=CVS,tag=v20100510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations
-plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20100824-2220,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
-plugin at org.eclipse.equinox.p2.reconciler.dropins=CVS,tag=R36x_v20110114,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins
-plugin at org.eclipse.equinox.p2.repository=CVS,tag=R36x_v20110111-1500,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
-plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
-plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=R36x_v20101202,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
-plugin at org.eclipse.equinox.p2.touchpoint.natives=CVS,tag=R36x_v20110111,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives
-plugin at org.eclipse.equinox.p2.ui=CVS,tag=v20100518,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui
-plugin at org.eclipse.equinox.p2.ui.admin=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin
-plugin at org.eclipse.equinox.p2.ui.discovery=CVS,tag=v20100519,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery
-plugin at org.eclipse.equinox.p2.ui.sdk=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk
-plugin at org.eclipse.equinox.p2.ui.sdk.scheduler=CVS,tag=v20100507-1815,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler
-plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
-plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
-plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=R36x_v20100823,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
-plugin at org.eclipse.equinox.simpleconfigurator=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator
-plugin at org.eclipse.equinox.simpleconfigurator.manipulator=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator
-plugin at org.eclipse.equinox.p2.tests=CVS,tag=R36x_v20101202,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
-plugin at org.eclipse.equinox.p2.tests.discovery=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.discovery
-plugin at org.eclipse.equinox.p2.tests.ui=CVS,tag=v20100513,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.ui
-plugin at org.eclipse.equinox.p2.tests.verifier=CVS,tag=v20100503,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.verifier
-plugin at org.eclipse.equinox.p2.ql=CVS,tag=v20100503a,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ql
+
+# gogo needed for equinox incubator console
+plugin at org.apache.felix.gogo.runtime,0.6.1=p2IU,id=org.apache.felix.gogo.runtime,version=0.6.1.v20110414-1850,repository=http://download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.eclipse.equinox.frameworkadmin=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin
+plugin at org.eclipse.equinox.frameworkadmin.equinox=CVS,tag=v20110506,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox
+plugin at org.eclipse.equinox.frameworkadmin.test=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.test
+plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=v20110519,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
+plugin at org.eclipse.equinox.p2.console=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console
+plugin at org.eclipse.equinox.p2.core=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
+plugin at org.eclipse.equinox.p2.director=CVS,tag=v20110504-1715,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
+plugin at org.eclipse.equinox.p2.director.app=CVS,tag=v20110505,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
+plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
+plugin at org.eclipse.equinox.p2.discovery=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery
+plugin at org.eclipse.equinox.p2.discovery.compatibility=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility
+plugin at org.eclipse.equinox.p2.engine=CVS,tag=v20110511,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine
+plugin at org.eclipse.equinox.p2.extensionlocation=CVS,tag=v20110510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation
+plugin at org.eclipse.equinox.p2.garbagecollector=CVS,tag=v20110510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.garbagecollector
+plugin at org.eclipse.equinox.p2.installer=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.installer
+plugin at org.eclipse.equinox.p2.jarprocessor=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.jarprocessor
+plugin at org.eclipse.equinox.p2.metadata=CVS,tag=v20110510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata
+plugin at org.eclipse.equinox.p2.metadata.repository=CVS,tag=v20110511-1359,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository
+plugin at org.eclipse.equinox.p2.operations=CVS,tag=v20110511-1821,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations
+plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20110511,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
+plugin at org.eclipse.equinox.p2.publisher.eclipse=CVS,tag=v20110511,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher.eclipse
+plugin at org.eclipse.equinox.p2.reconciler.dropins=CVS,tag=v20110510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins
+plugin at org.eclipse.equinox.p2.repository=CVS,tag=v20110601,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
+plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=v20110512-1320,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
+plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=v20110511,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
+plugin at org.eclipse.equinox.p2.transport.ecf=CVS,tag=v20110510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.transport.ecf
+plugin at org.eclipse.equinox.p2.touchpoint.natives=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives
+plugin at org.eclipse.equinox.p2.ui=CVS,tag=v20110601,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui
+plugin at org.eclipse.equinox.p2.ui.admin=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin
+plugin at org.eclipse.equinox.p2.ui.discovery=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery
+plugin at org.eclipse.equinox.p2.ui.importexport=CVS,tag=v20110511,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.importexport
+plugin at org.eclipse.equinox.p2.ui.sdk=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk
+plugin at org.eclipse.equinox.p2.ui.sdk.scheduler=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler
+plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
+plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
+plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=v20110510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
+plugin at org.eclipse.equinox.simpleconfigurator=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator
+plugin at org.eclipse.equinox.simpleconfigurator.manipulator=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator
+plugin at org.eclipse.equinox.p2.tests=CVS,tag=v20110519,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
+plugin at org.eclipse.equinox.p2.tests.discovery=CVS,tag=v20110502-1955,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.discovery
+plugin at org.eclipse.equinox.p2.tests.ui=CVS,tag=v20110511,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.ui
+plugin at org.eclipse.equinox.p2.tests.verifier=CVS,tag=v20110222-0044,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.verifier
+plugin at org.eclipse.equinox.p2.ql=CVS,tag=v20110510,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ql
+
+!# p2 features
+feature at org.eclipse.equinox.p2.core.feature=v20110519,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.core.feature
+feature at org.eclipse.equinox.p2.discovery.feature=CVS,tag=v20110519,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.discovery.feature
+feature at org.eclipse.equinox.p2.extras.feature=v20110519,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.extras.feature
+feature at org.eclipse.equinox.p2.rcp.feature=v20110519,:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.rcp.feature
+feature at org.eclipse.equinox.p2.sdk=CVS,tag=v20110519,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.sdk
+feature at org.eclipse.equinox.p2.user.ui=CVS,tag=v20110526,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.user.ui
 
 !# p2 examples
 plugin at org.eclipse.equinox.p2.examples.rcp.cloud=CVS,tag=v20100604,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud
@@ -420,76 +453,84 @@ plugin at org.eclipse.equinox.p2.examples.rcp.prestartupdate=CVS,tag=v20100604,cvsR
 plugin at org.eclipse.equinox.p2.examples.rcp.prestartupdate.releng=CVS,tag=v20100604,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate.releng
 plugin at org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility=CVS,tag=v20100604,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility
 plugin at org.eclipse.equinox.p2.examples.rcp.sdknoautoupdates=CVS,tag=v20100604,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdknoautoupdates
-plugin at org.eclipse.equinox.p2.examples.rcp.sdkui=CVS,tag=v20100604,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkui
+plugin at org.eclipse.equinox.p2.examples.rcp.sdkui=CVS,tag=v20100927-1600,cvsRoot=:pserver:anonymous at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkui
 
 !# Bundles from ECF
-plugin at org.eclipse.ecf,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.source,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.source_3.1.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.ssl,1.0.100=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.ssl_1.0.100.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.ssl.source,1.0.100=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.ssl.source_1.0.100.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.identity,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.identity_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.identity.source,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.identity.source_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.filetransfer,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.filetransfer_4.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.filetransfer.source,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.filetransfer.source_4.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer.source,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.source_3.1.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.ssl,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.ssl.source,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.ssl.source_1.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer.httpclient,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.source_4.0.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source_1.0.0.v20100906-1425.jar,usetimestamp=true
+plugin at org.eclipse.ecf,3.1.300=p2IU,id=org.eclipse.ecf,version=3.1.300.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.source,3.1.300=p2IU,id=org.eclipse.ecf.source,version=3.1.300.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.ssl,1.0.100=p2IU,id=org.eclipse.ecf.ssl,version=1.0.100.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.ssl.source,1.0.100=p2IU,id=org.eclipse.ecf.ssl.source,version=1.0.100.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.identity,3.1.100=p2IU,id=org.eclipse.ecf.identity,version=3.1.100.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.identity.source,3.1.100=p2IU,id=org.eclipse.ecf.identity.source,version=3.1.100.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.filetransfer,5.0.0=p2IU,id=org.eclipse.ecf.filetransfer,version=5.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.filetransfer.source,5.0.0=p2IU,id=org.eclipse.ecf.filetransfer.source,version=5.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer,3.2.0=p2IU,id=org.eclipse.ecf.provider.filetransfer,version=3.2.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer.source,3.2.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.source,version=3.2.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.ssl,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.ssl,version=1.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.ssl.source,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.ssl.source,version=1.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer.httpclient,4.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient,version=4.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source,4.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient.source,version=4.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient.ssl,version=1.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source,version=1.0.0.v20110531-2218,repository=http://download.eclipse.org/rt/ecf/3.5.1/site.p2
+
+!# The following apache bundes are obtained from the orbit.map
+!#plugin at org.apache.commons.codec,1.3.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.codec_1.3.0.v20080530-1600.jar
+!#plugin at org.apache.commons.codec.source,1.3.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.codec.source_1.3.0.v20080530-1600.jar
+!#plugin at org.apache.commons.httpclient,3.1.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.httpclient_3.1.0.v20080605-1935.jar
+!#plugin at org.apache.commons.httpclient.source,3.1.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.httpclient.source_3.1.0.v20080605-1935.jar
+!#plugin at org.apache.commons.logging,1.0.4=GET,http://download.eclipse.org/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.logging_1.0.4.v200904062259.jar
+!#plugin at org.apache.commons.logging.source,1.0.4=GET,http://download.eclipse.org/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.logging.source_1.0.4.v200904062259.jar
 !***************  PDE CONTRIBUTION  ******************************************************** 
 
 
-plugin at org.eclipse.pde=v20100625_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
-plugin at org.eclipse.pde.core=v20110210_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
-plugin at org.eclipse.pde.junit.runtime=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.junit.runtime
-plugin at org.eclipse.pde.runtime=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.runtime
-plugin at org.eclipse.pde.launching=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.launching
-plugin at org.eclipse.pde.ui=v20110210_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
-plugin at org.eclipse.pde.ui.templates=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.templates
-plugin at org.eclipse.pde.ui.tests=v20101210_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
-
-plugin at org.eclipse.ui.views.log=v20110210_r362,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.ui.views.log
-plugin at org.eclipse.pde.api.tools=v20100820_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
-plugin at org.eclipse.pde.api.tools.ui=v20100820_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
-plugin at org.eclipse.pde.api.tools.tests=v20100820_r361,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
-fragment at org.eclipse.pde.api.tools.ee.cdcfoundation10=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10
-fragment at org.eclipse.pde.api.tools.ee.cdcfoundation11=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11
-fragment at org.eclipse.pde.api.tools.ee.j2se12=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12
-fragment at org.eclipse.pde.api.tools.ee.j2se13=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se13
-fragment at org.eclipse.pde.api.tools.ee.j2se14=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se14
-fragment at org.eclipse.pde.api.tools.ee.j2se15=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se15
-fragment at org.eclipse.pde.api.tools.ee.javase16=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.javase16
-fragment at org.eclipse.pde.api.tools.ee.jre11=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.jre11
-fragment at org.eclipse.pde.api.tools.ee.osgiminimum10=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum10
-fragment at org.eclipse.pde.api.tools.ee.osgiminimum11=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11
-fragment at org.eclipse.pde.api.tools.ee.osgiminimum12=v20100506-0900,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12
+plugin at org.eclipse.pde=v20110504-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
+plugin at org.eclipse.pde.core=v20110603,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
+plugin at org.eclipse.pde.junit.runtime=v20110406,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.junit.runtime
+plugin at org.eclipse.pde.runtime=v20110508,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.runtime
+plugin at org.eclipse.pde.launching=v20110506,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.launching
+plugin at org.eclipse.pde.ui=v20110603,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
+plugin at org.eclipse.pde.ui.templates=v20110516,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.templates
+plugin at org.eclipse.pde.ui.tests=v20110509,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
+
+plugin at org.eclipse.ui.views.log=v20110404,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.ui.views.log
+plugin at org.eclipse.pde.api.tools=v20110523-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
+plugin at org.eclipse.pde.api.tools.ui=v20110523-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
+plugin at org.eclipse.pde.api.tools.tests=v20110523-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
+fragment at org.eclipse.pde.api.tools.ee.cdcfoundation10=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10
+fragment at org.eclipse.pde.api.tools.ee.cdcfoundation11=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11
+fragment at org.eclipse.pde.api.tools.ee.j2se12=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12
+fragment at org.eclipse.pde.api.tools.ee.j2se13=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se13
+fragment at org.eclipse.pde.api.tools.ee.j2se14=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se14
+fragment at org.eclipse.pde.api.tools.ee.j2se15=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se15
+fragment at org.eclipse.pde.api.tools.ee.javase16=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.javase16
+fragment at org.eclipse.pde.api.tools.ee.jre11=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.jre11
+fragment at org.eclipse.pde.api.tools.ee.osgiminimum10=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum10
+fragment at org.eclipse.pde.api.tools.ee.osgiminimum11=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11
+fragment at org.eclipse.pde.api.tools.ee.osgiminimum12=v20110401-1030,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12
 
 plugin at org.eclipse.pde.ds.core=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.core
-plugin at org.eclipse.pde.ds.ui=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.ui
+plugin at org.eclipse.pde.ds.ui=v20110516,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.ui
 plugin at org.eclipse.pde.ds.tests=v20100601,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.tests
 
-plugin at org.eclipse.pde.ua.core=v20100504,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.core
-plugin at org.eclipse.pde.ua.ui=v20100504,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.ui
-feature at org.eclipse.rcp=r362_v20101104,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
+plugin at org.eclipse.pde.ua.core=v20110516,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.core
+plugin at org.eclipse.pde.ua.ui=v20110516,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.ui
+feature at org.eclipse.rcp=v20110216,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
 feature at org.eclipse.rcp.sdk=v20080507,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp.sdk
-plugin at org.eclipse.rcp=v20100527-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.rcp
+plugin at org.eclipse.rcp=v20110504-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.rcp
 !****************  RELENG CONTRIBUTION  ******************************************************** 
-feature at master=v20091019,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master
-feature at master-equinox=r362_v20101118,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox
-feature at master-equinox-p2=v20091106,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-p2
-feature at master-equinox-weaving=v20090817,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-weaving
-feature at master-jetty=r362_v20101014,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-jetty
-feature at master-ecf=v20090316,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-ecf
+feature at master=v20110426,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master
+feature at master-equinox=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox
+feature at master-equinox-p2=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-p2
+feature at master-equinox-weaving=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-weaving
+feature at master-jetty=v20110326,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-jetty
+feature at master-ecf=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-ecf
 
-feature at com.ibm.icu.base=v20090119,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/com.ibm.icu.base
+feature at com.ibm.icu.base=v20110302,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/com.ibm.icu.base
 
-feature at org.eclipse.releng.tools=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.releng.tools
+feature at org.eclipse.releng.tools=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.releng.tools
 
-plugin at org.eclipse.releng.tools=v20100531,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.releng.tests=r362_v20110203,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.releng.tools=v20110523,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.releng.tests=v20110520,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 plugin at org.eclipse.pde.tools.versioning=r20080922,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/plugins/org.eclipse.pde.tools.versioning
 
@@ -498,76 +539,72 @@ feature at org.eclipse.jdt.test.feature.sample=HEAD,:pserver:anonymous at dev.eclipse.
 !***************  SWT CONTRIBUTION  ******************************************************** 
 
 !*** SWT Plugin
-plugin at org.eclipse.swt=v3659c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !*** SWT Platform Fragments
-fragment at org.eclipse.swt.carbon.macosx=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc64=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86_64=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.sparc=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.x86=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.aix.ppc64=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.aix.ppc=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.hpux.ia64_32=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.linux.x86=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.solaris.sparc=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.photon.qnx.x86=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.wce_ppc.arm=v3659c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86=v3659c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86_64=v3659c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.ia64=v3659c,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
-fragment at org.eclipse.swt.gtk.linux.s390=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.s390x=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.carbon.macosx=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.ppc64=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86_64=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.sparc=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.x86=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.aix.ppc=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.aix.ppc64=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.hpux.ia64_32=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.wce_ppc.arm=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86_64=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.ia64=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+
+fragment at org.eclipse.swt.gtk.linux.s390=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.s390x=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !*** SWT Examples
-plugin at org.eclipse.swt.examples=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser.demos=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.controls=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.launcher=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.layouts=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.ole.win32=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.paint=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser.demos=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.controls=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.launcher=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.layouts=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.ole.win32=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.paint=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !*** SWT Tests and Tools
-plugin at org.eclipse.swt.tests=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.tools=v3659b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.tests=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.tools=v3735b,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  TEAM CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.team.core=R36x_v20110203-1036,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.core=R36x_v20110119-0815,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ssh=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ssh2=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.ui=R36x_v20110203-1036,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ui=R36x_v20110203-1036,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
-plugin at org.eclipse.core.net=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.net=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.net=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jsch.core=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jsch.ui=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jsch.tests=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
-plugin at org.eclipse.team.examples.filesystem=I20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
-plugin at org.eclipse.team.tests.core=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.tests.cvs.core=R36x_v20110119-0815,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.net.win32.x86=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86
-fragment at org.eclipse.core.net.linux.x86=R36x_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
-fragment at org.eclipse.core.net.linux.x86_64=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64
-fragment at org.eclipse.core.net.win32.x86_64=I20100505-1245,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64
+plugin at org.eclipse.team.core=I20110525-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.core=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ssh=I20110208-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ssh2=I20110511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.ui=I20110525-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ui=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+
+plugin at org.eclipse.core.net=I20110511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.net=I20110511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.net=I20110208-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jsch.core=I20110514-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jsch.ui=I20110511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jsch.tests=I20100912-2000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+
+plugin at org.eclipse.team.examples.filesystem=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+
+plugin at org.eclipse.team.tests.core=I20110510-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.tests.cvs.core=I20110525-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.net.win32.x86=I20110331-0827,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86
+fragment at org.eclipse.core.net.linux.x86=I20110419-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
+fragment at org.eclipse.core.net.linux.x86_64=I20110331-0827,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64
+fragment at org.eclipse.core.net.win32.x86_64=I20110331-0827,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64
 !***************  Test Framework CONTRIBUTION  ******************************************************** 
-feature at org.eclipse.test=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.test-feature
+feature at org.eclipse.test=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.test-feature
 
-plugin at org.eclipse.test=v20100118,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ant.optional.junit=v20080717,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.test=v20110511,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ant.optional.junit=v20110503,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.test.performance=v20100122,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.test.performance=v20101027,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.test.performance.win32=v20070530,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 plugin at org.eclipse.test.performance.data=v20050415,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
@@ -575,97 +612,97 @@ plugin at org.eclipse.test.performance.data=v20050415,:pserver:anonymous at dev.eclips
 plugin at org.eclipse.test.dispatcher=HEAD,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.test.dispatcher
 !***************  TEXT CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.text=v20100601-1300,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.text=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench.texteditor=r361_v20100714-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.editors=r361_v20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.filebuffers=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.text=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.text=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench.texteditor=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.editors=v20110517-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.filebuffers=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.examples.javaeditor=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.javaeditor=v20110524-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.text.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.text.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.filebuffers.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench.texteditor.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.editors.tests=v20100520-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.text.tests=v20100526-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.text.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.text.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.filebuffers.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench.texteditor.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.editors.tests=v20110505-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.text.tests=v20110524-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  UI CONTRIBUTION  ********************************************************* 
 
-plugin at org.eclipse.core.commands=I20100512-1500,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface=M20110210-1200,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding.observable=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding.property=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding.beans=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui=M20110203-1100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide=M20101201-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide.application=M20100707-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.commands=I20110111-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface=I20110522-1430,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding=I20110111-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding.observable=I20110222-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding.property=I20110222-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding.beans=I20100824-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.databinding=I20100907-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui=I20110602-0100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide=I20110519-0100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide.application=I20110306-2000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.ui.presentations.r21=I20100517-1500,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.views=M20110202-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench=M20110210-1200,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.workbench.compatibility=I20100511-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.views=I20110412-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench=I20110519-0100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.workbench.compatibility=I20110413-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.ui.win32=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.carbon=M20101124-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.cocoa=M20101124-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.carbon=I20101109-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.cocoa=I20101109-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 
 plugin at org.eclipse.jface.examples.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.multipageeditor=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.propertysheet=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.readmetool=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.undo=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.multipageeditor=I20110413-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.propertysheet=I20110413-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.readmetool=I20110413-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.undo=I20110413-1600,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.ui.examples.views.properties.tabbed.article=I20100517-1500,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.ui.examples.views.properties.tabbed/org.eclipse.ui.examples.views.properties.tabbed.article
 plugin at org.eclipse.ui.examples.fieldassist=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.ui.examples.contributions=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.navigator=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.navigator.resources=M20101124-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.navigator=I20110524-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.navigator.resources=I20110421-1800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.views.properties.tabbed=I20100509-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.views.properties.tabbed=I20110201-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jface.tests.databinding=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.tests.databinding.conformance=I20090818-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests=M20100825-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.rcp=I20090525-2000,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.navigator=M20101201-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.views.properties.tabbed=M20110202-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.performance=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.harness=I20100601-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.tests.databinding=I20110405-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.tests.databinding.conformance=I20100914-0100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests=I20110602-0100,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.rcp=I20110425-1800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.navigator=I20110425-1800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.views.properties.tabbed=I20110405-0800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.performance=I20110421-1800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.harness=I20110425-1800,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  UPDATE CONTRIBUTION  ******************************************************** 
 
 plugin at org.eclipse.update.configurator=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.update.core=R36x_v20100629,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.update.core=v20110330,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.update.scheduler=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.update.ui=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 fragment at org.eclipse.update.core.win32=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.update.core.linux=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-
+#
 plugin at org.eclipse.update.tests.core=v20100512,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 !***************  UA CONTRIBUTION  *********************************************
 
 !**** Help
-plugin at org.eclipse.help=v20100524,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.appserver=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.base=r36_20101123,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.ui=r36_20101116,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.webapp=r36_20101130,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help=v20110426,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.appserver=v20110425,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.base=v20110517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.ui=v20110425,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.webapp=v20110518,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Welcome
-plugin at org.eclipse.ui.intro=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.intro.universal=r36_v20100702,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.intro=v20110425,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.intro.universal=v20110510,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Cheat sheets
-plugin at org.eclipse.ui.cheatsheets=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.cheatsheets=v20110425,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Browser
-plugin at org.eclipse.ui.browser=r36_20101216,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.browser=v20110426,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Forms
-plugin at org.eclipse.ui.forms=r36_v20100702,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.forms=v20110425,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Tests
-plugin at org.eclipse.ua.tests=r36_r20100816,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ua.tests.doc=v20100427,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.forms=v20100517,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ua.tests=v20110505,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ua.tests.doc=v20110425,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.forms=v20110425,:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse,
diff --git a/eclipse/featureVersions.properties b/eclipse/featureVersions.properties
index 9e7778f..3c627c0 100644
--- a/eclipse/featureVersions.properties
+++ b/eclipse/featureVersions.properties
@@ -1,35 +1,46 @@
-#Tue Mar 08 14:12:31 EST 2011
-org.eclipse.equinox.compendium.sdk,0.0.0=R36x_v20101014
-org.eclipse.equinox.weaving.sdk,0.0.0=v20100421
-org.eclipse.platform,0.0.0=r362_v20110210
-master-equinox,0.0.0=r362_v20101118
-org.eclipse.rcp,0.0.0=r362_v20101104
-org.eclipse.equinox.p2.sdk,0.0.0=R36x_v20110120
-com.ibm.icu.base,0.0.0=v20090119
-master,0.0.0=v20091019
-org.eclipse.cvs,0.0.0=r362_v20101111
-org.eclipse.equinox.server.simple,0.0.0=v20100510
-org.eclipse.equinox.server.core,0.0.0=R36x_v20101007
-org.eclipse.releng.tools,0.0.0=v20100427
-org.eclipse.equinox.p2.discovery.feature,0.0.0=R36x_v20110210
-org.eclipse.equinox.core.sdk,0.0.0=r36x_v20110210
-org.eclipse.equinox.p2.user.ui,0.0.0=r361_v20100903
-org.eclipse.equinox.server.p2,0.0.0=R36x_v20101007
-org.eclipse.sdk,0.0.0=r362_v20100929
-master-equinox-weaving,0.0.0=v20090817
-master-jetty,0.0.0=r362_v20101014
-org.eclipse.jdt,0.0.0=r362_v20101117-0800
-org.eclipse.equinox.jmx.server.feature,0.0.0=v20081124
-org.eclipse.equinox.server.servletbridge,0.0.0=v20100510
-master-ecf,0.0.0=v20090316
-org.eclipse.equinox.jmx.client.feature,0.0.0=v20081124
-org.eclipse.sdk.examples,0.0.0=r362_v20101014
-org.eclipse.equinox.jmx.common.feature,0.0.0=v20070507
-org.eclipse.equinox.sdk,0.0.0=r362_v20110210b
-org.eclipse.pde.api.tools.ee.fragments,0.0.0=v20100427
-org.eclipse.equinox.serverside.sdk,0.0.0=R36x_v20101014
-org.eclipse.pde,0.0.0=r362_v20110203
-org.eclipse.equinox.server.jetty,0.0.0=v20100510
-org.eclipse.equinox.executable,0.0.0=R36x_v20110125
-org.eclipse.help,0.0.0=r362_v20101111
-master-equinox-p2,0.0.0=v20091106
+#Mon Jun 27 11:22:02 EDT 2011
+org.eclipse.equinox.p2.core.feature,0.0.0=v20110519
+master-equinox,0.0.0=v20110511
+org.eclipse.equinox.p2.extras.feature,0.0.0=v20110519
+master-equinox-weaving,0.0.0=v20110505
+org.eclipse.jdt,0.0.0=v20110520-0800
+org.eclipse.core.runtime.feature,0.0.0=v20110124
+master-ecf,0.0.0=v20110503
+org.eclipse.equinox.jmx.client.feature,0.0.0=v20110511
+org.eclipse.equinox.jmx.common.feature,0.0.0=v20110511
+org.eclipse.equinox.server.p2,0.0.0=v20110502
+org.eclipse.pde.junit.runtime.addon,0.0.0=v20110331
+org.eclipse.pde.api.tools.ee.fragments,0.0.0=v20110123
+master-equinox-p2,0.0.0=v20110503
+org.eclipse.pde.build.product.feature,0.0.0=v20110123
+org.eclipse.equinox.p2.user.ui,0.0.0=v20110526
+com.ibm.icu.base,0.0.0=v20110302
+org.eclipse.equinox.core.sdk,0.0.0=v20110506-0800
+org.eclipse.equinox.p2.rcp.feature,0.0.0=v20110519
+org.eclipse.rcp,0.0.0=v20110216
+org.eclipse.equinox.p2.discovery.feature,0.0.0=v20110519
+org.eclipse.equinox.starterkit.product.feature,0.0.0=v20110502
+org.eclipse.pde.junit.runtime.standalone,0.0.0=v20110331
+org.eclipse.cvs,0.0.0=v20110520-0800
+org.eclipse.equinox.server.jetty,0.0.0=v20110502
+org.eclipse.equinox.core.feature,0.0.0=v20110502
+org.eclipse.equinox.sdk,0.0.0=v20110502
+org.eclipse.license,1.0.0=v20110208
+org.eclipse.platform,0.0.0=v20110530
+org.eclipse.pde,0.0.0=v20110504-0800
+org.eclipse.equinox.executable,0.0.0=v20110530
+org.eclipse.equinox.incubator.feature,0.0.0=v20110511
+org.eclipse.equinox.compendium.sdk,0.0.0=v20110502
+org.eclipse.releng.tools,0.0.0=v20110503
+org.eclipse.equinox.serverside.sdk,0.0.0=v20110502
+org.eclipse.equinox.weaving.sdk,0.0.0=v20110502
+org.eclipse.equinox.server.simple,0.0.0=v20110502
+org.eclipse.help,0.0.0=v20110327
+org.eclipse.equinox.jmx.server.feature,0.0.0=v20110511
+org.eclipse.equinox.server.servletbridge,0.0.0=v20110502
+org.eclipse.equinox.p2.sdk,0.0.0=v20110519
+org.eclipse.equinox.server.core,0.0.0=v20110502
+master,0.0.0=v20110426
+master-jetty,0.0.0=v20110326
+org.eclipse.sdk.examples,0.0.0=v20110503
+org.eclipse.sdk,0.0.0=v20110426
diff --git a/eclipse/features/com.ibm.icu.base/.project b/eclipse/features/com.ibm.icu.base/.project
new file mode 100644
index 0000000..78d0ab1
--- /dev/null
+++ b/eclipse/features/com.ibm.icu.base/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.ibm.icu.base</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/com.ibm.icu.base/feature.xml b/eclipse/features/com.ibm.icu.base/feature.xml
index e77efb0..2cc6ab2 100644
--- a/eclipse/features/com.ibm.icu.base/feature.xml
+++ b/eclipse/features/com.ibm.icu.base/feature.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <feature
       id="com.ibm.icu.base"
-      version="1.1.0.qualifier">
+      version="1.2.0.qualifier">
 
    <plugin
          id="com.ibm.icu.base"
diff --git a/eclipse/features/master-ecf/build.properties b/eclipse/features/master-ecf/build.properties
index a432875..2ed53fb 100644
--- a/eclipse/features/master-ecf/build.properties
+++ b/eclipse/features/master-ecf/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/features/master-equinox-p2/build.properties b/eclipse/features/master-equinox-p2/build.properties
index a432875..2ed53fb 100644
--- a/eclipse/features/master-equinox-p2/build.properties
+++ b/eclipse/features/master-equinox-p2/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/features/master-equinox-p2/feature.xml b/eclipse/features/master-equinox-p2/feature.xml
index d407bd4..75c9b31 100644
--- a/eclipse/features/master-equinox-p2/feature.xml
+++ b/eclipse/features/master-equinox-p2/feature.xml
@@ -2,8 +2,8 @@
 <feature
       id="master-equinox-p2"
       label="build utility feature for equinox p2 plugins"
-      version="1.0.0.qualifier">
-  
+      version="1.0.1.qualifier">
+
    <plugin
          id="org.eclipse.equinox.p2.installer"
          download-size="0"
diff --git a/eclipse/features/master-equinox-weaving/build.properties b/eclipse/features/master-equinox-weaving/build.properties
index a432875..4692721 100644
--- a/eclipse/features/master-equinox-weaving/build.properties
+++ b/eclipse/features/master-equinox-weaving/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/features/master-equinox-weaving/feature.xml b/eclipse/features/master-equinox-weaving/feature.xml
index 160ed04..18259f0 100644
--- a/eclipse/features/master-equinox-weaving/feature.xml
+++ b/eclipse/features/master-equinox-weaving/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="master-equinox-weaving"
       label="build utility feature for bundles required to compile equinox weaving bundles"
-      version="1.0.0.qualifier">
+      version="1.0.100.qualifier">
 
   <plugin
          id="org.aspectj.weaver"
diff --git a/eclipse/features/master-equinox/build.properties b/eclipse/features/master-equinox/build.properties
index 62626c8..ed66d7e 100644
--- a/eclipse/features/master-equinox/build.properties
+++ b/eclipse/features/master-equinox/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2006 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/features/master-equinox/feature.xml b/eclipse/features/master-equinox/feature.xml
index f1fd3b9..91c276d 100644
--- a/eclipse/features/master-equinox/feature.xml
+++ b/eclipse/features/master-equinox/feature.xml
@@ -2,22 +2,11 @@
 <feature
       id="master-equinox"
       label="build utility feature for equinox plugins"
-      version="1.1.1.qualifier">
+      version="1.1.0.qualifier">
 
    <includes
          id="org.eclipse.equinox.sdk"
          version="0.0.0"/>
-
-<!--   <includes
-         id="org.eclipse.equinox.source"
-         version="0.0.0"/> -->       
-                  	 
-    <plugin
-         id="org.eclipse.equinox.initializer"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>                   
            
     <plugin
          id="org.eclipse.equinox.supplement"
@@ -51,7 +40,7 @@
          id="org.eclipse.equinox.http.jetty"
          download-size="0"
          install-size="0"
-         version="2.0.0.qualifier" 
+         version="2.0.100.qualifier" 
          unpack="false"/>
            
     <plugin
@@ -116,19 +105,18 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>        
-         
+    
+    <plugin
+         id="org.apache.felix.gogo.runtime"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>      
+      
   <includes
-         id="org.eclipse.equinox.jmx.common.feature"
-         version="0.0.0"/>
- 
-   <includes
-         id="org.eclipse.equinox.jmx.client.feature"
+         id="org.eclipse.equinox.incubator.feature"
          version="0.0.0"/>
-   
-   <includes
-         id="org.eclipse.equinox.jmx.server.feature"
-         version="0.0.0"/>         
-         
+          
  <includes
          id="master-equinox-p2"
          version="0.0.0"/>        
@@ -140,5 +128,13 @@
  <includes
          id="org.eclipse.equinox.weaving.sdk"
          version="0.0.0"/>    
+         
+ <includes
+         id="org.eclipse.equinox.starterkit.product.feature"
+         version="0.0.0"/>      
+    
+ <includes
+         id="org.eclipse.pde.build.product.feature"
+         version="0.0.0"/>
                   
 </feature>
diff --git a/eclipse/features/master-jetty/feature.xml b/eclipse/features/master-jetty/feature.xml
index 7151d93..22ae41a 100644
--- a/eclipse/features/master-jetty/feature.xml
+++ b/eclipse/features/master-jetty/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="master-jetty"
       label="build utility feature for equinox http jetty plugins"
-      version="1.0.1.qualifier">
+      version="1.1.0.qualifier">
 
    <plugin
          id="org.eclipse.osgi"
@@ -29,7 +29,7 @@
          id="org.eclipse.equinox.http.jetty"
          download-size="0"
          install-size="0"
-         version="2.0.0.qualifier"
+         version="2.0.100.qualifier"
          unpack="false"/>
 
 </feature>
diff --git a/eclipse/features/master/feature.xml b/eclipse/features/master/feature.xml
index 5cad475..821d746 100644
--- a/eclipse/features/master/feature.xml
+++ b/eclipse/features/master/feature.xml
@@ -13,7 +13,7 @@
          
    <includes
          id="org.eclipse.pde.api.tools.ee.fragments"
-         version="0.0.0"/>
+         version="0.0.0"/> 
 
    <includes
          id="org.eclipse.sdk"
@@ -36,6 +36,14 @@
          version="0.0.0"/>
          
     <includes
+         id="org.eclipse.pde.junit.runtime.addon"
+         version="0.0.0"/>
+    
+    <includes
+         id="org.eclipse.pde.junit.runtime.standalone"
+         version="0.0.0"/>
+         
+    <includes
          id="org.eclipse.equinox.executable"
          version="0.0.0"/>  
          
@@ -51,14 +59,6 @@
          install-size="0"
          version="0.0.0"
          fragment="true"
-         unpack="false"/>
-         
-   <plugin
-         id="org.eclipse.swt.motif.solaris.sparc"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>       
-          
+         unpack="false"/>    
+           
 </feature>
diff --git a/eclipse/features/org.eclipse.core.runtime.feature/.project b/eclipse/features/org.eclipse.core.runtime.feature/.project
new file mode 100644
index 0000000..3cb05c5
--- /dev/null
+++ b/eclipse/features/org.eclipse.core.runtime.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.core.runtime.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.core.runtime.feature/build.properties b/eclipse/features/org.eclipse.core.runtime.feature/build.properties
new file mode 100644
index 0000000..554e179
--- /dev/null
+++ b/eclipse/features/org.eclipse.core.runtime.feature/build.properties
@@ -0,0 +1,2 @@
+bin.includes = feature.xml,\
+               feature.properties               
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.core.runtime.feature/feature.properties b/eclipse/features/org.eclipse.core.runtime.feature/feature.properties
new file mode 100644
index 0000000..0c190eb
--- /dev/null
+++ b/eclipse/features/org.eclipse.core.runtime.feature/feature.properties
@@ -0,0 +1,33 @@
+###############################################################################
+# Copyright (c) 2010 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Eclipse Core Runtime Infrastructure
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Equinox Project
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2010 EclipseSource and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    EclipseSource - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.core.runtime.feature/feature.xml b/eclipse/features/org.eclipse.core.runtime.feature/feature.xml
new file mode 100644
index 0000000..1c06103
--- /dev/null
+++ b/eclipse/features/org.eclipse.core.runtime.feature/feature.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.core.runtime.feature"
+      label="%featureName"
+      version="1.0.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier"> 
+
+   <description url="http://www.example.com/description">
+      [Enter Feature Description here.]
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      [Enter Copyright Description here.]
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      [Enter License Description here.]
+   </license>
+
+   <includes
+         id="org.eclipse.equinox.core.feature"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.core.runtime"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.variables"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.contenttype"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.preferences"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.expressions"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.cvs/build.properties b/eclipse/features/org.eclipse.cvs/build.properties
index ce791ec..6919512 100644
--- a/eclipse/features/org.eclipse.cvs/build.properties
+++ b/eclipse/features/org.eclipse.cvs/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
 ###############################################################################
 bin.includes = feature.xml,\
                feature.properties,\
-               license.html,\
-               epl-v10.html,\
                eclipse_update_120.jpg
                
 root=rootfiles
diff --git a/eclipse/features/org.eclipse.cvs/epl-v10.html b/eclipse/features/org.eclipse.cvs/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.cvs/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/feature.properties b/eclipse/features/org.eclipse.cvs/feature.properties
index 871667c..1d20b81 100644
--- a/eclipse/features/org.eclipse.cvs/feature.properties
+++ b/eclipse/features/org.eclipse.cvs/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -20,18 +20,12 @@ featureName=Eclipse CVS Client
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the secondary update site
-secondaryUpdateSiteName=Helios Discovery Site
-
 # "description" property - description of the feature
-description=Eclipse CVS Client. (Binary runtime and user documentation.)
+description=Eclipse CVS Client (binary runtime and user documentation).
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2000, 2009 IBM Corporation and others.\n\
+Copyright (c) 2000, 2011 IBM Corporation and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -39,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/feature.xml b/eclipse/features/org.eclipse.cvs/feature.xml
index 41353a0..bf58a63 100644
--- a/eclipse/features/org.eclipse.cvs/feature.xml
+++ b/eclipse/features/org.eclipse.cvs/feature.xml
@@ -2,16 +2,18 @@
 <feature
       id="org.eclipse.cvs"
       label="%featureName"
-      version="1.2.1.qualifier"
-      provider-name="%providerName">
+      version="1.3.100.qualifier"
+      provider-name="%providerName"   
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
    </description>
-
+   
    <copyright>
       %copyright
-   </copyright>
+   </copyright>   
 
    <license url="%licenseURL">
       %license
@@ -24,7 +26,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.platform" version="3.6.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.platform" version="3.7.0" match="greaterOrEqual"/>
    </requires>
 
    <plugin
@@ -39,7 +41,7 @@
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>
+         unpack="false"/>   
 
    <plugin
          id="org.eclipse.team.cvs.ssh2"
diff --git a/eclipse/features/org.eclipse.cvs/license.html b/eclipse/features/org.eclipse.cvs/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.cvs/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.cvs/rootfiles/notice.html b/eclipse/features/org.eclipse.cvs/rootfiles/notice.html
index c184ca3..dc5aefd 100644
--- a/eclipse/features/org.eclipse.cvs/rootfiles/notice.html
+++ b/eclipse/features/org.eclipse.cvs/rootfiles/notice.html
@@ -1,19 +1,18 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
+<!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>
+
+
 
-<body lang="EN-US">
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head><body lang="EN-US">
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
+<p>February 1, 2011</p>
 
 <h3>Usage Of Content</h3>
 
 <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
    CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
    OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
    NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
@@ -21,43 +20,73 @@
 
 <h3>Applicable Licenses</h3>
 
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
 
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
 
 <ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
       and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
 </ul>
 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
 including, but not limited to the following locations:</p>
 
 <ul>
        <li>The top-level (root) directory</li>
        <li>Plug-in and Fragment directories</li>
        <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
        <li>Feature directories</li>
 </ul>
 
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
 that directory.</p>
 
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
 OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
 
 <ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
        <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
        <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
        <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
@@ -65,43 +94,69 @@ OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
        <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
 </ul>
 
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
 
 
 <h3>Use of Provisioning Technology</h3>
 
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
 
 <ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
        product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
        accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
 </ol>
 
 <h3>Cryptography</h3>
 
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
 
 <p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
+</body></html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/feature.properties
index b7a1aec..f898707 100644
--- a/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -21,14 +21,13 @@ featureName=Eclipse CVS Client Resources
 providerName=Eclipse.org
 
 # "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
 
 # "description" property - description of the feature
 description=API documentation and source code zips for Eclipse CVS client.
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2000, 2009 IBM Corporation and others.\n\
+Copyright (c) 2000, 2011 IBM Corporation and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -36,135 +35,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.cvs/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.cvs/sourceTemplatePlugin/about.properties b/eclipse/features/org.eclipse.cvs/sourceTemplatePlugin/about.properties
index 1f6b31f..df3e1e0 100644
--- a/eclipse/features/org.eclipse.cvs/sourceTemplatePlugin/about.properties
+++ b/eclipse/features/org.eclipse.cvs/sourceTemplatePlugin/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2009 IBM Corporation and others.
+#  Copyright (c) 2000, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse CVS Client\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2009.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/eclipse/platform-cvs/
 
diff --git a/eclipse/features/org.eclipse.equinox.compendium.sdk/build.properties b/eclipse/features/org.eclipse.equinox.compendium.sdk/build.properties
index 70e92a7..3e3ffce 100644
--- a/eclipse/features/org.eclipse.equinox.compendium.sdk/build.properties
+++ b/eclipse/features/org.eclipse.equinox.compendium.sdk/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
 # Contributors:
 #     EclipseSource - initial API and implementation
 ###############################################################################
-bin.includes = feature.xml,license.html,epl-v10.html,license.html,feature.properties
+bin.includes = feature.xml,feature.properties
 
 generate.plugin at org.eclipse.equinox.app.source=org.eclipse.equinox.app
 generate.plugin at org.eclipse.equinox.cm.source=org.eclipse.equinox.cm
@@ -23,3 +23,4 @@ generate.plugin at org.eclipse.equinox.preferences.source=org.eclipse.equinox.prefe
 generate.plugin at org.eclipse.equinox.useradmin.source=org.eclipse.equinox.useradmin
 generate.plugin at org.eclipse.equinox.wireadmin.source=org.eclipse.equinox.wireadmin
 generate.plugin at org.eclipse.equinox.util.source=org.eclipse.equinox.util
+generate.plugin at org.eclipse.equinox.coordinator.source=org.eclipse.equinox.coordinator 
diff --git a/eclipse/features/org.eclipse.equinox.compendium.sdk/epl-v10.html b/eclipse/features/org.eclipse.equinox.compendium.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.compendium.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.properties b/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.properties
old mode 100644
new mode 100755
index 9be70e8..efc68bc
--- a/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -39,135 +39,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     EclipseSource - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.xml b/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.xml
index 54ee035..d06d857 100644
--- a/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.compendium.sdk/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.compendium.sdk"
       label="%featureName"
-      version="3.6.1.qualifier"
-      provider-name="%providerName">
+      version="3.7.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier"> 
 
    <description>
       %description
@@ -32,6 +34,20 @@
          unpack="false"/>
 
    <plugin
+         id="org.eclipse.equinox.coordinator"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.coordinator.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.equinox.cm"
          download-size="0"
          install-size="0"
diff --git a/eclipse/features/org.eclipse.equinox.compendium.sdk/license.html b/eclipse/features/org.eclipse.equinox.compendium.sdk/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.compendium.sdk/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.core.feature/.project b/eclipse/features/org.eclipse.equinox.core.feature/.project
new file mode 100644
index 0000000..988ebaa
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.core.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.core.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.equinox.core.feature/build.properties b/eclipse/features/org.eclipse.equinox.core.feature/build.properties
new file mode 100644
index 0000000..73379cd
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.core.feature/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
+root.win32.win32.x86=file:executables/win32.win32.x86/eclipsec.exe
+root.win32.win32.x86_64=file:executables/win32.win32.x86_64/eclipsec.exe
diff --git a/eclipse/features/org.eclipse.equinox.core.feature/feature.properties b/eclipse/features/org.eclipse.equinox.core.feature/feature.properties
new file mode 100644
index 0000000..99844ea
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.core.feature/feature.properties
@@ -0,0 +1,33 @@
+###############################################################################
+# Copyright (c) 2010, 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox Core Function
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Equinox Project
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2010 EclipseSource and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    EclipseSource - initial API and implementation\n
+################ end of copyright property ####################################
diff --git a/eclipse/features/org.eclipse.equinox.core.feature/feature.xml b/eclipse/features/org.eclipse.equinox.core.feature/feature.xml
new file mode 100644
index 0000000..2df68fe
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.core.feature/feature.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.equinox.core.feature"
+      label="%featureName"
+      version="1.0.0.qualifier"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier"> 
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.osgi"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osgi.services"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.common"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.ds"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.util"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.jobs"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.registry"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.simpleconfigurator"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.app"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.equinox.core.sdk/build.properties b/eclipse/features/org.eclipse.equinox.core.sdk/build.properties
index 532bf01..67762be 100644
--- a/eclipse/features/org.eclipse.equinox.core.sdk/build.properties
+++ b/eclipse/features/org.eclipse.equinox.core.sdk/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
 # Contributors:
 #     EclipseSource - initial API and implementation
 ###############################################################################
-bin.includes = feature.xml,license.html,epl-v10.html,license.html,feature.properties
+bin.includes = feature.xml,feature.properties
 
 generate.plugin at org.eclipse.equinox.common.source=org.eclipse.equinox.common
 generate.plugin at org.eclipse.equinox.concurrent.source=org.eclipse.equinox.concurrent
@@ -22,6 +22,7 @@ generate.plugin at org.eclipse.osgi.services.source=org.eclipse.osgi.services
 generate.plugin at org.eclipse.osgi.source=org.eclipse.osgi
 generate.plugin at org.eclipse.osgi.util.source=org.eclipse.osgi.util
 generate.plugin at org.eclipse.equinox.security.win32.x86.source=org.eclipse.equinox.security.win32.x86
+generate.plugin at org.eclipse.equinox.security.win32.x86_64.source=org.eclipse.equinox.security.win32.x86_64
 generate.plugin at org.eclipse.equinox.security.macosx.source=org.eclipse.equinox.security.macosx
 generate.plugin at org.eclipse.equinox.security.source=org.eclipse.equinox.security
 generate.plugin at org.eclipse.equinox.security.ui.source=org.eclipse.equinox.security.ui
diff --git a/eclipse/features/org.eclipse.equinox.core.sdk/epl-v10.html b/eclipse/features/org.eclipse.equinox.core.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.core.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.core.sdk/feature.properties b/eclipse/features/org.eclipse.equinox.core.sdk/feature.properties
old mode 100644
new mode 100755
index f9c9561..c6ca5fa
--- a/eclipse/features/org.eclipse.equinox.core.sdk/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.core.sdk/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -40,135 +40,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     EclipseSource - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.core.sdk/feature.xml b/eclipse/features/org.eclipse.equinox.core.sdk/feature.xml
index c0e9d25..c91e25f 100644
--- a/eclipse/features/org.eclipse.equinox.core.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.core.sdk/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.core.sdk"
       label="%featureName"
-      version="3.6.1.qualifier"
-      provider-name="%providerName">
-
+      version="3.7.0.qualifier"
+      provider-name="%providerName" 
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+      
    <description>
       %description
    </description>
@@ -200,6 +202,25 @@
          unpack="false"/>
 
    <plugin
+         id="org.eclipse.equinox.security.win32.x86_64"
+         os="win32"
+         arch="x86_64"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security.win32.x86_64.source"
+         os="win32"
+         arch="x86_64"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.equinox.security.macosx"
          os="macosx"
          arch="x86"
diff --git a/eclipse/features/org.eclipse.equinox.core.sdk/license.html b/eclipse/features/org.eclipse.equinox.core.sdk/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.core.sdk/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.executable/.cproject b/eclipse/features/org.eclipse.equinox.executable/.cproject
index 214395b..a7f3cb9 100644
--- a/eclipse/features/org.eclipse.equinox.executable/.cproject
+++ b/eclipse/features/org.eclipse.equinox.executable/.cproject
@@ -1,49 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?><?fileVersion 4.0.0?><cproject>
 	<storageModule moduleId="org.eclipse.cdt.core.settings">
 		<cconfiguration id="converted.config.1797282818">
-			<storageModule moduleId="scannerConfiguration">
-				<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-				<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-					<buildOutputProvider>
-						<openAction enabled="true" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-						<parser enabled="true"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-					<buildOutputProvider>
-						<openAction enabled="false" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="makefileGenerator">
-						<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-						<parser enabled="false"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-					<buildOutputProvider>
-						<openAction enabled="false" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-						<parser enabled="false"/>
-					</scannerInfoProvider>
-				</profile>
-				<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-					<buildOutputProvider>
-						<openAction enabled="false" filePath=""/>
-						<parser enabled="true"/>
-					</buildOutputProvider>
-					<scannerInfoProvider id="specsFile">
-						<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-						<parser enabled="false"/>
-					</scannerInfoProvider>
-				</profile>
-			</storageModule>
 			<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.1797282818" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
 				<externalSettings/>
 				<extensions>
@@ -55,15 +12,6 @@
 			<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
 			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
 			<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
-			<storageModule moduleId="org.eclipse.cdt.core.pathentry">
-				<pathentry kind="mac" name="JNIEXPORT" path="" value=""/>
-				<pathentry include="/usr/X11R6/include" kind="inc" path="" system="true"/>
-				<pathentry include="/opt/gnome/include/gtk-2.0" kind="inc" path="" system="true"/>
-				<pathentry include="/opt/gnome/include/glib-2.0" kind="inc" path="" system="true"/>
-				<pathentry kind="src" path=""/>
-				<pathentry kind="out" path=""/>
-				<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
-			</storageModule>
 			<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
 				<buildTargets>
 					<target name="linux-all" path="library/gtk" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
@@ -134,4 +82,63 @@
 			</storageModule>
 		</cconfiguration>
 	</storageModule>
+	<storageModule moduleId="scannerConfiguration">
+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+		<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+			<buildOutputProvider>
+				<openAction enabled="true" filePath=""/>
+				<parser enabled="true"/>
+			</buildOutputProvider>
+			<scannerInfoProvider id="specsFile">
+				<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+				<parser enabled="true"/>
+			</scannerInfoProvider>
+		</profile>
+		<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+			<buildOutputProvider>
+				<openAction enabled="false" filePath=""/>
+				<parser enabled="true"/>
+			</buildOutputProvider>
+			<scannerInfoProvider id="makefileGenerator">
+				<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+				<parser enabled="false"/>
+			</scannerInfoProvider>
+		</profile>
+		<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+			<buildOutputProvider>
+				<openAction enabled="false" filePath=""/>
+				<parser enabled="true"/>
+			</buildOutputProvider>
+			<scannerInfoProvider id="specsFile">
+				<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+				<parser enabled="false"/>
+			</scannerInfoProvider>
+		</profile>
+		<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+			<buildOutputProvider>
+				<openAction enabled="false" filePath=""/>
+				<parser enabled="true"/>
+			</buildOutputProvider>
+			<scannerInfoProvider id="specsFile">
+				<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+				<parser enabled="false"/>
+			</scannerInfoProvider>
+		</profile>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.pathentry">
+		<pathentry kind="mac" name="JNIEXPORT" path="" value=""/>
+		<pathentry kind="mac" name="JNICALL" path="" value=""/>
+		<pathentry include="/usr/X11R6/include" kind="inc" path="" system="true"/>
+		<pathentry include="/opt/gnome/include/gtk-2.0" kind="inc" path="" system="true"/>
+		<pathentry include="/opt/gnome/include/glib-2.0" kind="inc" path="" system="true"/>
+		<pathentry include="/usr/include/gtk-2.0" kind="inc" path="" system="true"/>
+		<pathentry include="/usr/lib64/gtk-2.0/include" kind="inc" path="" system="true"/>
+		<pathentry include="/usr/include/atk-1.0" kind="inc" path="" system="true"/>
+		<pathentry include="/usr/include/glib-2.0 " kind="inc" path="" system="true"/>
+		<pathentry include="/usr/lib64/glib-2.0/include" kind="inc" path="" system="true"/>
+		<pathentry kind="src" path=""/>
+		<pathentry kind="out" path=""/>
+		<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
 </cproject>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.executable/.project b/eclipse/features/org.eclipse.equinox.executable/.project
index e9419d7..f682906 100644
--- a/eclipse/features/org.eclipse.equinox.executable/.project
+++ b/eclipse/features/org.eclipse.equinox.executable/.project
@@ -19,7 +19,7 @@
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.build.arguments</key>
-					<value></value>
+					<value>-f make_${system:OS}.mak</value>
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.build.command</key>
@@ -27,7 +27,7 @@
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.build.location</key>
-					<value>\org.eclipse.equinox.executable\library\${system_property:osgi.ws}</value>
+					<value>/org.eclipse.equinox.executable/library/${system_property:osgi.ws}</value>
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.build.target.auto</key>
@@ -59,7 +59,7 @@
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.environment</key>
-					<value>DEFAULT_WS=${system_property:osgi.ws}|DEFAULT_OS=${system_property:osgi.os}|DEFAULT_OS_ARCH=${system_property:osgi.arch}|X11_HOME=/usr/X11R6|PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig|MOTIF_HOME=/usr/X11|</value>
+					<value>DEFAULT_OS=${system_property:osgi.os}|DEFAULT_OS_ARCH=${system_property:osgi.arch}|X11_HOME=/usr/X11R6|DEFAULT_WS=${system_property:osgi.ws}|JAVA_HOME=${system_property:java.home}/..|MOTIF_HOME=/usr/X11|PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig|</value>
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.stopOnError</key>
@@ -67,7 +67,7 @@
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>true</value>
+					<value>false</value>
 				</dictionary>
 			</arguments>
 		</buildCommand>
diff --git a/eclipse/features/org.eclipse.equinox.executable/.settings/org.eclipse.cdt.core.prefs b/eclipse/features/org.eclipse.equinox.executable/.settings/org.eclipse.cdt.core.prefs
index 06ad8fe..9a13d6d 100644
--- a/eclipse/features/org.eclipse.equinox.executable/.settings/org.eclipse.cdt.core.prefs
+++ b/eclipse/features/org.eclipse.equinox.executable/.settings/org.eclipse.cdt.core.prefs
@@ -1,154 +1,163 @@
-#Thu Feb 04 13:33:58 EST 2010
-org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
+#Mon Mar 21 13:05:40 EDT 2011
+eclipse.preferences.version=1
+indexer/filesToParseUpFront=
+indexer/indexAllFiles=true
+indexer/indexUnusedHeadersWithDefaultLang=false
+indexer/indexerId=org.eclipse.cdt.core.fastIndexer
+indexer/skipFilesLargerThanMB=8
+indexer/skipImplicitReferences=false
+indexer/skipMacroReferences=false
+indexer/skipReferences=false
+indexer/skipTypeReferences=false
+indexer/useHeuristicIncludeResolution=true
+indexerId=org.eclipse.cdt.core.fastIndexer
+org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=16
+org.eclipse.cdt.core.formatter.alignment_for_compact_if=0
+org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
+org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=16
+org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
+org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line
+org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.cdt.core.formatter.compact_else_if=true
 org.eclipse.cdt.core.formatter.continuation_indentation=2
-org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=insert
-org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
+org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
+org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=true
+org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
+org.eclipse.cdt.core.formatter.indent_empty_lines=false
+org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.cdt.core.formatter.indentation.size=4
+org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
+org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
+org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
 org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
 org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
-org.eclipse.cdt.core.formatter.tabulation.size=4
-org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
-org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.cdt.core.formatter.tabulation.char=tab
-org.eclipse.cdt.core.formatter.lineSplit=800
 org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
 org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
 org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
 org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
+org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
-org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=16
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
-org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
-org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
-org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.cdt.core.formatter.alignment_for_compact_if=0
-org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
-org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.cdt.core.formatter.indent_empty_lines=false
-org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=16
-org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=true
-org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
-org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-indexer/indexerId=org.eclipse.cdt.core.fastIndexer
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=insert
+org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=insert
 org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=insert
+org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
-org.eclipse.cdt.core.formatter.indentation.size=4
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
-org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-eclipse.preferences.version=1
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.cdt.core.formatter.compact_else_if=true
-org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
-org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line
-org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
-org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
 org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
-org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
-indexerId=org.eclipse.cdt.core.fastIndexer
-org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.cdt.core.formatter.lineSplit=800
 org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
+org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.cdt.core.formatter.tabulation.char=tab
+org.eclipse.cdt.core.formatter.tabulation.size=4
 org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
-org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
diff --git a/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/ppc/Eclipse.app/Contents/Info.plist b/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/ppc/Eclipse.app/Contents/Info.plist
index ca325a6..c55909d 100644
--- a/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/ppc/Eclipse.app/Contents/Info.plist
+++ b/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/ppc/Eclipse.app/Contents/Info.plist
@@ -6,7 +6,7 @@
 	<key>CFBundleExecutable</key>
 		<string>eclipse</string>
 	<key>CFBundleGetInfoString</key>
-		<string>Eclipse 3.6 for Mac OS X, Copyright IBM Corp. and others 2002, 2010. All rights reserved.</string>
+		<string>Eclipse 3.7 for Mac OS X, Copyright IBM Corp. and others 2002, 2011. All rights reserved.</string>
 	<key>CFBundleIconFile</key>
 		<string>Eclipse.icns</string>
 	<key>CFBundleIdentifier</key>
@@ -18,11 +18,11 @@
 	<key>CFBundlePackageType</key>
 		<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleSignature</key>
 		<string>????</string>
 	<key>CFBundleVersion</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleDevelopmentRegion</key>
 		<string>English</string>
 	<key>CFBundleLocalizations</key>
diff --git a/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/x86/Eclipse.app/Contents/Info.plist b/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/x86/Eclipse.app/Contents/Info.plist
index 3f47b4b..4106f51 100644
--- a/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/x86/Eclipse.app/Contents/Info.plist
+++ b/eclipse/features/org.eclipse.equinox.executable/bin/carbon/macosx/x86/Eclipse.app/Contents/Info.plist
@@ -6,7 +6,7 @@
 	<key>CFBundleExecutable</key>
 		<string>eclipse</string>
 	<key>CFBundleGetInfoString</key>
-		<string>Eclipse 3.6 for Mac OS X, Copyright IBM Corp. and others 2002, 2010. All rights reserved.</string>
+		<string>Eclipse 3.7 for Mac OS X, Copyright IBM Corp. and others 2002, 2011. All rights reserved.</string>
 	<key>CFBundleIconFile</key>
 		<string>Eclipse.icns</string>
 	<key>CFBundleIdentifier</key>
@@ -18,11 +18,11 @@
 	<key>CFBundlePackageType</key>
 		<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleSignature</key>
 		<string>????</string>
 	<key>CFBundleVersion</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleDevelopmentRegion</key>
 		<string>English</string>
 	<key>CFBundleLocalizations</key>
diff --git a/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/ppc/Eclipse.app/Contents/Info.plist b/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/ppc/Eclipse.app/Contents/Info.plist
index ca325a6..c55909d 100644
--- a/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/ppc/Eclipse.app/Contents/Info.plist
+++ b/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/ppc/Eclipse.app/Contents/Info.plist
@@ -6,7 +6,7 @@
 	<key>CFBundleExecutable</key>
 		<string>eclipse</string>
 	<key>CFBundleGetInfoString</key>
-		<string>Eclipse 3.6 for Mac OS X, Copyright IBM Corp. and others 2002, 2010. All rights reserved.</string>
+		<string>Eclipse 3.7 for Mac OS X, Copyright IBM Corp. and others 2002, 2011. All rights reserved.</string>
 	<key>CFBundleIconFile</key>
 		<string>Eclipse.icns</string>
 	<key>CFBundleIdentifier</key>
@@ -18,11 +18,11 @@
 	<key>CFBundlePackageType</key>
 		<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleSignature</key>
 		<string>????</string>
 	<key>CFBundleVersion</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleDevelopmentRegion</key>
 		<string>English</string>
 	<key>CFBundleLocalizations</key>
diff --git a/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86/Eclipse.app/Contents/Info.plist b/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86/Eclipse.app/Contents/Info.plist
index ca325a6..c55909d 100644
--- a/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86/Eclipse.app/Contents/Info.plist
+++ b/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86/Eclipse.app/Contents/Info.plist
@@ -6,7 +6,7 @@
 	<key>CFBundleExecutable</key>
 		<string>eclipse</string>
 	<key>CFBundleGetInfoString</key>
-		<string>Eclipse 3.6 for Mac OS X, Copyright IBM Corp. and others 2002, 2010. All rights reserved.</string>
+		<string>Eclipse 3.7 for Mac OS X, Copyright IBM Corp. and others 2002, 2011. All rights reserved.</string>
 	<key>CFBundleIconFile</key>
 		<string>Eclipse.icns</string>
 	<key>CFBundleIdentifier</key>
@@ -18,11 +18,11 @@
 	<key>CFBundlePackageType</key>
 		<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleSignature</key>
 		<string>????</string>
 	<key>CFBundleVersion</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleDevelopmentRegion</key>
 		<string>English</string>
 	<key>CFBundleLocalizations</key>
diff --git a/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86_64/Eclipse.app/Contents/Info.plist b/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86_64/Eclipse.app/Contents/Info.plist
index ca325a6..c55909d 100644
--- a/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86_64/Eclipse.app/Contents/Info.plist
+++ b/eclipse/features/org.eclipse.equinox.executable/bin/cocoa/macosx/x86_64/Eclipse.app/Contents/Info.plist
@@ -6,7 +6,7 @@
 	<key>CFBundleExecutable</key>
 		<string>eclipse</string>
 	<key>CFBundleGetInfoString</key>
-		<string>Eclipse 3.6 for Mac OS X, Copyright IBM Corp. and others 2002, 2010. All rights reserved.</string>
+		<string>Eclipse 3.7 for Mac OS X, Copyright IBM Corp. and others 2002, 2011. All rights reserved.</string>
 	<key>CFBundleIconFile</key>
 		<string>Eclipse.icns</string>
 	<key>CFBundleIdentifier</key>
@@ -18,11 +18,11 @@
 	<key>CFBundlePackageType</key>
 		<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleSignature</key>
 		<string>????</string>
 	<key>CFBundleVersion</key>
-		<string>3.6</string>
+		<string>3.7</string>
 	<key>CFBundleDevelopmentRegion</key>
 		<string>English</string>
 	<key>CFBundleLocalizations</key>
diff --git a/eclipse/features/org.eclipse.equinox.executable/build.properties b/eclipse/features/org.eclipse.equinox.executable/build.properties
index d156bd9..f2a6cf1 100644
--- a/eclipse/features/org.eclipse.equinox.executable/build.properties
+++ b/eclipse/features/org.eclipse.equinox.executable/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,8 +18,6 @@ bin.includes = bin/,\
                gtk_root/,\
                motif_root/,\
                target.build.xml,\
-               license.html,\
-               epl-v10.html,\
                eclipse_update_120.jpg,\
                contributed/
 
diff --git a/eclipse/features/org.eclipse.equinox.executable/epl-v10.html b/eclipse/features/org.eclipse.equinox.executable/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.executable/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.executable/feature.properties b/eclipse/features/org.eclipse.equinox.executable/feature.properties
index bc7b44d..eabbc97 100644
--- a/eclipse/features/org.eclipse.equinox.executable/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.executable/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -22,134 +22,3 @@ providerName=Eclipse.org
 
 # "description" property - description of the feature
 description=Platform specific launchers.
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to by "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/eclipse/features/org.eclipse.equinox.executable/feature.xml b/eclipse/features/org.eclipse.equinox.executable/feature.xml
index b8b7ea3..d8dfaa6 100644
--- a/eclipse/features/org.eclipse.equinox.executable/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.executable/feature.xml
@@ -2,7 +2,9 @@
 <feature
       id="org.eclipse.equinox.executable"
       label="%featureName"
-      version="3.4.2.qualifier">
+      version="3.5.0.qualifier"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
@@ -28,8 +30,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
-	<plugin
+
+   <plugin
          id="org.eclipse.equinox.launcher.gtk.solaris.x86"
          os="solaris"
          ws="gtk"
@@ -38,8 +40,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-            
-	<plugin
+
+   <plugin
          id="org.eclipse.equinox.launcher.motif.solaris.sparc"
          os="solaris"
          ws="motif"
@@ -57,7 +59,7 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
+
    <plugin
          id="org.eclipse.equinox.launcher.cocoa.macosx"
          os="macosx"
@@ -67,7 +69,7 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-           
+
    <plugin
          id="org.eclipse.equinox.launcher.cocoa.macosx"
          os="macosx"
@@ -77,8 +79,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
-	<plugin
+
+   <plugin
          id="org.eclipse.equinox.launcher.cocoa.macosx.x86_64"
          os="macosx"
          ws="cocoa"
@@ -107,7 +109,7 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
+
    <plugin
          id="org.eclipse.equinox.launcher.gtk.linux.x86"
          os="linux"
@@ -148,6 +150,26 @@
          version="0.0.0"
          fragment="true"/>
 
+	<plugin
+         id="org.eclipse.equinox.launcher.gtk.aix.ppc"
+         os="aix"
+         ws="gtk"
+         arch="ppc"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"/>
+
+   <plugin
+         id="org.eclipse.equinox.launcher.gtk.hpux.ia64_32"
+         os="hpux"
+         ws="gtk"
+         arch="ia64_32"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"/>
+                  
    <plugin
          id="org.eclipse.equinox.launcher.motif.hpux.ia64_32"
          os="hpux"
@@ -177,7 +199,7 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
+
    <plugin
          id="org.eclipse.equinox.launcher.win32.win32.x86_64"
          os="win32"
@@ -197,7 +219,7 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
+
    <plugin
          id="org.eclipse.equinox.launcher.wpf.win32.x86"
          os="win32"
@@ -228,5 +250,4 @@
          version="0.0.0"
          fragment="true"/>
 
-
 </feature>
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/carbon/build.sh b/eclipse/features/org.eclipse.equinox.executable/library/carbon/build.sh
old mode 100755
new mode 100644
index 413176d..078257a
--- a/eclipse/features/org.eclipse.equinox.executable/library/carbon/build.sh
+++ b/eclipse/features/org.eclipse.equinox.executable/library/carbon/build.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c
index 4773996..c91f213 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonCommon.c b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonCommon.c
index 82e9719..017c691 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonCommon.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonCommon.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonMain.c b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonMain.c
index cef62d2..51cafc2 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonMain.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseCarbonMain.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseMain.c b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseMain.c
index 4d54251..c0eaffa 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseMain.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/carbon/eclipseMain.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/carbon/make_carbon.mak b/eclipse/features/org.eclipse.equinox.executable/library/carbon/make_carbon.mak
old mode 100644
new mode 100755
index c12d29e..34843b7
--- a/eclipse/features/org.eclipse.equinox.executable/library/carbon/make_carbon.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/carbon/make_carbon.mak
@@ -1,5 +1,5 @@
 #**********************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/carbon/make_cocoa.mak b/eclipse/features/org.eclipse.equinox.executable/library/carbon/make_cocoa.mak
old mode 100644
new mode 100755
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c
index 4709007..410e62c 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipse.c
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Kevin Cornell (Rational Software Corporation)
  *	   Markus Schorn (Wind River Systems), bug 193340
+ *	   Martin Oberhuber (Wind River) - [149994] Add --launcher.appendVmargs
  *******************************************************************************/
 
 /* Eclipse Program Launcher
@@ -233,6 +234,8 @@ home directory.");
 #define LIBRARY		  _T_ECLIPSE("--launcher.library")
 #define SUPRESSERRORS _T_ECLIPSE("--launcher.suppressErrors")
 #define INI			  _T_ECLIPSE("--launcher.ini")
+#define APPEND_VMARGS _T_ECLIPSE("--launcher.appendVmargs")
+#define OVERRIDE_VMARGS _T_ECLIPSE("--launcher.overrideVmargs")
 #define SECOND_THREAD _T_ECLIPSE("--launcher.secondThread")
 #define PERM_GEN	  _T_ECLIPSE("--launcher.XXMaxPermSize")
 
@@ -254,6 +257,7 @@ static int     debug         = 0;				/* True: output debugging info	*/
 static int     noSplash      = 0;				/* True: do not show splash win	*/
 static int	   suppressErrors = 0;				/* True: do not display errors dialogs */
        int     secondThread  = 0;				/* True: start the VM on a second thread */
+static int     appendVmargs = 0;                /* True: append cmdline vmargs to launcher.ini vmargs */
        
 static _TCHAR*  showSplashArg = NULL;			/* showsplash data (main launcher window) */
 static _TCHAR*  splashBitmap  = NULL;			/* the actual splash bitmap */
@@ -264,6 +268,7 @@ static _TCHAR*  permGen  	  = NULL;			/* perm gen size for sun */
 static _TCHAR**  filePath	  = NULL;			/* list of files to open */
 static _TCHAR*  timeoutString = NULL;			/* timeout value for opening a file */
 static _TCHAR*  defaultAction = NULL;			/* default action for non '-' command line arguments */ 
+static _TCHAR*  iniFile       = NULL;			/* the launcher.ini file set if  --launcher.ini was specified */
 
 /* variables for ee options */
 static _TCHAR* eeExecutable = NULL;
@@ -289,6 +294,7 @@ typedef struct
 							/* don't assign it and only remove (remove - 1) arguments  */
 #define ADJUST_PATH		4  	/* value is a path, do processing on relative paths to try and make them absolute */
 #define VALUE_IS_LIST	8  	/* value is a pointer to a tokenized _TCHAR* string for EE files, or a _TCHAR** list for the command line */
+#define INVERT_FLAG    16   /* invert the meaning of a flag, i.e. reset it */
 
 static Option options[] = {
     { CONSOLE,		&needConsole,	VALUE_IS_FLAG,	0 },
@@ -297,8 +303,10 @@ static Option options[] = {
     { NOSPLASH,     &noSplash,      VALUE_IS_FLAG,	1 },
     { SUPRESSERRORS, &suppressErrors, VALUE_IS_FLAG, 1},
     { SECOND_THREAD, &secondThread, VALUE_IS_FLAG,  1 },
+    { APPEND_VMARGS, &appendVmargs,	VALUE_IS_FLAG, 1 },
+    { OVERRIDE_VMARGS, &appendVmargs, VALUE_IS_FLAG | INVERT_FLAG, 1 },
     { LIBRARY,		NULL,			0,			2 }, /* library was parsed by exe, just remove it */
-    { INI,			NULL, 			0,			2 }, /* same with ini */
+    { INI,			&iniFile, 		0,			2 },
     { OS,			&osArg,			0,			2 },
     { OSARCH,		&osArchArg,		0,			2 },
     { SHOWSPLASH,   &showSplashArg,	OPTIONAL_VALUE,	2 },
@@ -331,6 +339,7 @@ static int nEEargs = 0;
 /* Local methods */
 static void     parseArgs( int* argc, _TCHAR* argv[] );
 static void 	processDefaultAction(int argc, _TCHAR* argv[]);
+static void 	mergeUserVMArgs( _TCHAR **vmArgs[] );
 static void     getVMCommand( int launchMode, int argc, _TCHAR* argv[], _TCHAR **vmArgv[], _TCHAR **progArgv[] );
 static int 		determineVM(_TCHAR** msg);
 static int 		vmEEProps(_TCHAR* eeFile, _TCHAR** msg);
@@ -426,8 +435,14 @@ JNIEXPORT int run(int argc, _TCHAR* argv[], _TCHAR* vmArgs[])
     	exit( 1 );
     }
 
-    /* platform specific processing of user's vmargs */
-    processVMArgs(&vmArgs);
+    if (vmArgs != NULL) {
+    	/* reconcile VM Args from commandline with launcher.ini (append or override),
+    	 * this always allocates new memory */
+    	mergeUserVMArgs(&vmArgs);
+    	/* platform specific processing of user's vmargs */
+    	processVMArgs(&vmArgs);
+    }
+    
     launchMode = determineVM(&msg);
     if (launchMode == -1) {
     	/* problem */
@@ -640,11 +655,12 @@ JNIEXPORT int run(int argc, _TCHAR* argv[], _TCHAR* vmArgs[])
     free( programDir );
     free( program );
     free( officialName );
-    if ( vmCommand != NULL )	 free( vmCommand );
-    if ( launchMode == LAUNCH_JNI ) free( cp );
-    if ( cpValue != NULL)		 free( cpValue );
-    if ( exitData != NULL )		 free( exitData );
-    if ( splashBitmap != NULL )  free( splashBitmap );
+    if(vmCommand != NULL)	 	 free(vmCommand);
+    if(launchMode == LAUNCH_JNI) free(cp);
+    if(cpValue != NULL)		 	 free(cpValue);
+    if(exitData != NULL)		 free(exitData);
+    if(splashBitmap != NULL)  	 free(splashBitmap);
+    if(vmArgs != NULL)			 free(vmArgs);
 
     if (javaResults == NULL)
     	return -1;
@@ -724,18 +740,18 @@ static void parseArgs(int* pArgc, _TCHAR* argv[]) {
 			/* If the option requires a value and there is one, extract the value. */
 			if (option->value != NULL) {
 				if (option->flag & VALUE_IS_FLAG)
-					*((int *) option->value) = 1;
+					*((int *) option->value) = (option->flag & INVERT_FLAG) ? 0 : 1;
 				else {
 					int count = 1;
 					if (option->flag & VALUE_IS_LIST) {
 						/* count how many args, this is the -argument itself + following the non'-' args */
-						while(count + index < *pArgc && argv[count + index][0] != _T_ECLIPSE('-'))
+						while (count + index < *pArgc && argv[count + index][0] != _T_ECLIPSE('-'))
 							count++;
-						
+
 						/* allocate memory for a _TCHAR* list and initialize it with NULLs*/
 						*((void**) option->value) = malloc(count * sizeof(_TCHAR *));
 						memset(*((void **) option->value), 0, count * sizeof(_TCHAR *));
-						
+
 						if (option->remove != 0)
 							option->remove = count;
 					}
@@ -750,7 +766,7 @@ static void parseArgs(int* pArgc, _TCHAR* argv[]) {
 									(*((_TCHAR***) option->value))[i] = next;
 								else
 									*((_TCHAR**) option->value) = next;
-							} else if (option->flag & OPTIONAL_VALUE){
+							} else if (option->flag & OPTIONAL_VALUE) {
 								/* value was optional, and the next arg starts with '-' */
 								optional = 1;
 							}
@@ -800,24 +816,62 @@ static _TCHAR** parseArgList( _TCHAR* data ) {
     return execArg;
 }
 
-static void adjustVMArgs( _TCHAR *javaVM, _TCHAR *jniLib, _TCHAR **vmArgv[] ) {
+/* Return the list of args from the launcher ini file (if it exists). Caller is responsible to free(). */
+static _TCHAR** getConfigArgs() {
+	_TCHAR** configArgv = NULL;
+	_TCHAR * configFile = NULL;
+	int configArgc = 0;
+	int ret = 0;
+
+	configFile = (iniFile != NULL) ? iniFile : getIniFile(program, consoleLauncher);
+	ret = readConfigFile(configFile, &configArgc, &configArgv);
+	if (ret == 0)
+		return configArgv;
+	return NULL;
+}
+
+/** Append Commandline VM Args to VM Args that came from the launcher.ini
+ *  Always returns new memory even if no new arguments were appended */
+static void mergeUserVMArgs(_TCHAR **vmArgs[]) {
+	_TCHAR** configVMArgs = NULL;
+	_TCHAR** configArgs = NULL;
+
+	if (appendVmargs != 0 && indexOf(VMARGS, initialArgv) > 0) {
+		/* Get vmargs from the launcher.ini, if any */
+		configArgs = getConfigArgs();
+		if (configArgs != NULL) {
+			int vmArg = indexOf(VMARGS, configArgs);
+			if (vmArg >= 0)
+				configVMArgs = configArgs + vmArg + 1;
+		}
+	}
+
+	/* This always allocates new memory so we don't need to guess if it is safe
+	 * to free later  */
+	*vmArgs = concatArgs(configVMArgs, *vmArgs);
+	if (configArgs != NULL)
+		free(configArgs);
+}
+
+static void adjustVMArgs(_TCHAR *javaVM, _TCHAR *jniLib, _TCHAR **vmArgv[]) {
 	/* Sun VMs need some extra perm gen space */
-	if (permGen != NULL && isSunVM(javaVM, jniLib)) {
+	/* Detecting Sun VM is expensive - only do so if necessary */
+	if (permGen != NULL) {
 		int specified = 0, i = -1;
-		
+
 		/* first check to see if it is already specified */
-		while ( (*vmArgv)[++i] != NULL) {
+		while ((*vmArgv)[++i] != NULL) {
 			/* we are also counting the number of args here */
 			if (!specified && _tcsncmp((*vmArgv)[i], XXPERMGEN, _tcslen(XXPERMGEN)) == 0) {
 				specified = 1;
 			}
 		}
-		
-		if (!specified) {
+
+		if (!specified && isSunVM(javaVM, jniLib)) {
 			_TCHAR ** oldArgs = *vmArgv;
 			_TCHAR *newArg = malloc((_tcslen(XXPERMGEN) + _tcslen(permGen) + 1) * sizeof(_TCHAR));
 			_stprintf(newArg, _T_ECLIPSE("%s%s"), XXPERMGEN, permGen);
-			
+
 			*vmArgv = malloc((i + 2) * sizeof(_TCHAR *));
 			memcpy(*vmArgv, oldArgs, i * sizeof(_TCHAR *));
 			(*vmArgv)[i] = newArg;
@@ -825,6 +879,7 @@ static void adjustVMArgs( _TCHAR *javaVM, _TCHAR *jniLib, _TCHAR **vmArgv[] ) {
 		}
 	}
 }
+
 /*
  * Get the command and arguments to start the Java VM.
  *
@@ -888,11 +943,11 @@ static void getVMCommand( int launchMode, int argc, _TCHAR* argv[], _TCHAR **vmA
 	
 	/* Program arguments */
     /*  OS <os> + WS <ws> + ARCH <arch> + LAUNCHER <launcher> + NAME <officialName> +
-     *  + LIBRARY <library> + SHOWSPLASH <cmd> + EXITDATA <cmd> + STARTUP <jar> + argv[] + VM + <vm> + 
+     *  + LIBRARY <library> + SHOWSPLASH <cmd> + EXITDATA <cmd> + STARTUP <jar> + OVERRIDE/APPEND + argv[] + VM + <vm> +
      * VMARGS + vmArg + requiredVMargs
      *  + NULL)
      */
-    totalProgArgs  = 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + argc + 2 + 1 + nVMarg + nEEargs + nReqVMarg + 1;
+    totalProgArgs  = 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + argc + 2 + 1 + nVMarg + nEEargs + nReqVMarg + 1;
 	*progArgv = malloc( totalProgArgs * sizeof( _TCHAR* ) );
     dst = 0;
     
@@ -932,6 +987,9 @@ static void getVMCommand( int launchMode, int argc, _TCHAR* argv[], _TCHAR **vmA
 	(*progArgv)[ dst++ ] = STARTUP;
 	(*progArgv)[ dst++ ] = jarFile;
     
+	/* override or append vm args */
+	(*progArgv)[ dst++ ] = appendVmargs ? APPEND_VMARGS : OVERRIDE_VMARGS;
+
 	/* Append the exit data command. */
 	if (sharedID) {
 		(*progArgv)[ dst++ ] = EXITDATA;
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseCommon.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseCommon.c
index 56c1a71..923b3c2 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseCommon.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseCommon.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -276,8 +276,8 @@ _TCHAR* findSymlinkCommand( _TCHAR* command, int resolve )
 	                }
 #endif
 	                /* Determine if the executable resides in this directory. */
-	                if (cmdPath[0] == _T_ECLIPSE('.') &&
-	                   (_tcslen(cmdPath) == 1 || (_tcslen(cmdPath) == 2 && IS_DIR_SEPARATOR(cmdPath[1]))))
+	                if (_tcslen(cmdPath) == 0 || /*an empty path entry is treated as '.' */
+	                	(cmdPath[0] == _T_ECLIPSE('.') && (_tcslen(cmdPath) == 1 || (_tcslen(cmdPath) == 2 && IS_DIR_SEPARATOR(cmdPath[1])))))
 	                {
 	                	_tgetcwd( cmdPath, MAX_PATH_LENGTH );
 	                }
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c
index 29e7f33..bc7a5cd 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.c
@@ -38,6 +38,20 @@ int readIniFile(_TCHAR* program, int *argc, _TCHAR ***argv)
 	int result;
 	
 	if (program == NULL || argc == NULL || argv == NULL) return -1;
+	
+#if defined(_WIN32) && defined(_WIN32_CONSOLE)	
+	config_file = getIniFile(program, 1);
+#else
+	config_file = getIniFile(program, 0);
+#endif
+	
+	result = readConfigFile(config_file, argc, argv);
+	free(config_file);
+	return result;
+}
+
+_TCHAR* getIniFile(_TCHAR* program, int consoleLauncher){
+	_TCHAR* config_file = NULL;
 
 	/* Get a copy with room for .ini at the end */
 	config_file = malloc( (_tcslen(program) + 5) * sizeof(_TCHAR));
@@ -53,8 +67,7 @@ int readIniFile(_TCHAR* program, int *argc, _TCHAR ***argv)
 			extension = config_file + _tcslen(config_file);
 		}
 		_tcscpy(extension, _T_ECLIPSE(".ini"));
-#ifdef _WIN32_CONSOLE
-		{
+		if(consoleLauncher){
 			/* We are the console version, if the ini file does not exist, try
 			 * removing the 'c' from the end of the program name */
 			struct _stat stats; 
@@ -62,16 +75,12 @@ int readIniFile(_TCHAR* program, int *argc, _TCHAR ***argv)
 				_tcscpy(extension - 1, extension);
 			}
 		}
-#endif
 	}
 #else
 	/* Append the extension */
 	strcat(config_file, ".ini");
 #endif
-	
-	result = readConfigFile(config_file, argc, argv);
-	free(config_file);
-	return result;
+	return config_file;
 }
 
 int readConfigFile( _TCHAR * config_file, int *argc, _TCHAR ***argv )
@@ -85,6 +94,7 @@ int readConfigFile( _TCHAR * config_file, int *argc, _TCHAR ***argv )
 	size_t bufferSize = 1024;
 	size_t length;
 	
+	
 	/* Open the config file as a text file 
 	 * Note that carriage return-linefeed combination \r\n are automatically
 	 * translated into single linefeeds on input in the t (translated) mode
@@ -96,7 +106,6 @@ int readConfigFile( _TCHAR * config_file, int *argc, _TCHAR ***argv )
 	/* allocate buffers */
 	buffer =  (_TCHAR*)malloc(bufferSize * sizeof(_TCHAR));
 	argument = (_TCHAR*)malloc(bufferSize * sizeof(_TCHAR));
-
 	*argv = (_TCHAR **)malloc((1 + maxArgs) * sizeof(_TCHAR*));
 	
 	index = 0;
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.h b/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.h
index 5315beb..cd8ef9c 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseConfig.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -24,11 +24,24 @@
  *
  * This method will call readConfigFile to read the actual ini file
  *
+ * This method will use getIniFile with a value for consoleLauncher that
+ * is determined at compile time.  Clients who are not the actual
+ * win32 console executable should instead use getIniFile and readConfigFile.
+ *
  * Returns 0 if success.
  */
 extern int readIniFile(_TCHAR* program, int *argc, _TCHAR ***argv);
 
 /**
+ * Return the path to the launcher ini file for the corresponding program 
+ * argument. On win32, an "eclipsec.exe' console launcher can use the "eclipse.ini"
+ * ini file.
+ * consoleLauncher : whether or not we are using the win32 "eclipsec" console launcher
+ *                   has no affect on other platforms 
+ */
+extern _TCHAR* getIniFile(_TCHAR* program, int consoleLauncher);
+
+/**
  * Reads the given configuration file 
  * The argument argv refers to a newly allocated array of strings.
  * The first entry is the program name to mimic the expectations
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseMain.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseMain.c
index fe52730..c45f365 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseMain.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseMain.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -14,6 +14,11 @@
 #include "eclipseCommon.h"
 #include "eclipseConfig.h"
 
+#ifdef _WIN32
+#include <direct.h>
+#else
+#include <unistd.h>
+#endif
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -52,6 +57,7 @@ static _TCHAR* 	getDefaultOfficialName(_TCHAR* program);
 static _TCHAR*  findProgram(_TCHAR* argv[]);
 static _TCHAR*  findLibrary(_TCHAR* library, _TCHAR* program);
 static _TCHAR*  checkForIni(int argc, _TCHAR* argv[]);
+static _TCHAR*  getDirFromProgram(_TCHAR* program);
  
 static int initialArgc;
 static _TCHAR** initialArgv;
@@ -70,7 +76,7 @@ int main(int argc, char* argv[]) {
 	* Run the UNICODE version, convert the arguments from MBCS to UNICODE
 	*/
 	int i, result;
-	wchar_t **newArgv = malloc(argc * sizeof(wchar_t *));
+	wchar_t **newArgv = malloc((argc + 1) * sizeof(wchar_t *));
 	for (i=0; i<argc; i++) {
 		char *oldArg = argv[i];
 		int numChars = MultiByteToWideChar(CP_ACP, 0, oldArg, -1, NULL, 0);
@@ -79,6 +85,7 @@ int main(int argc, char* argv[]) {
 		MultiByteToWideChar(CP_ACP, 0, oldArg, -1, newArg, numChars);
 		newArgv[i] = newArg;
 	}
+	newArgv[i] = NULL;
 	result = mainW(argc, newArgv);
 	for (i=0; i<argc; i++) {
 		free(newArgv[i]);
@@ -152,7 +159,7 @@ int main( int argc, _TCHAR* argv[] )
 	officialName = name != NULL ? _tcsdup( name ) : getDefaultOfficialName(program);
 	
 	/* Find the directory where the Eclipse program is installed. */
-    programDir = getProgramDir(program);
+    programDir = getDirFromProgram(program);
 
 	/* Find the eclipse library */
     eclipseLibrary = findLibrary(eclipseLibrary, program);
@@ -312,7 +319,7 @@ static int createUserArgs(int configArgc, _TCHAR **configArgv, int *argc, _TCHAR
  * This function takes the directory where program executable resides and
  * determines the installation directory.
  */
-_TCHAR* getProgramDir(_TCHAR* program)
+_TCHAR* getDirFromProgram(_TCHAR* program)
 {
 	_TCHAR*  ch;
 	
@@ -328,10 +335,16 @@ _TCHAR* getProgramDir(_TCHAR* program)
    		return programDir;
     }
 
-	/* Can't figure out from the program */
+	/* Can't figure out from the program, lets use the cwd */
 	free(programDir);
-	programDir = NULL;
-	return NULL;
+	programDir = malloc( MAX_PATH_LENGTH * sizeof (_TCHAR));
+	_tgetcwd( programDir, MAX_PATH_LENGTH );
+	return programDir;
+}
+
+_TCHAR* getProgramDir()
+{
+	return programDir;
 }
 
 _TCHAR* getOfficialName() {
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.c
index 956ae17..a599589 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -20,25 +20,24 @@
 #include <dirent.h>
 #include <sys/stat.h>
 
+static char* prefixes[] = {
+	"xulrunner-1",
+	"mozilla-seamonkey-1",
+	"seamonkey-1",
+	"mozilla-1",
+	"mozilla-firefox-2",
+	"firefox-2",
+	"mozilla-firefox-3",
+	"firefox-3",
+	NULL
+};
+static const int XULRUNNER_INDEX = 0;
 
 /* Filter function used by fixEnvForMozilla() for finding directories
  * with a desired prefix.
  */
 int filter(const struct dirent *dir)
 {
-	char* prefixes[] = {
-		"xulrunner\0",
-		"xulrunner-1",
-		"mozilla-seamonkey-1",
-		"seamonkey-1",
-		"mozilla-1",
-		"mozilla-firefox-2",
-		"firefox-2",
-		"mozilla-firefox-3",
-		"firefox-3",
-		NULL
-	};
-	int XULRUNNER_INDEX = 0;
 #if defined(__amd64__) || defined(__x86_64__) || defined(__powerpc64__)
 	char* root = "/usr/lib64/";
 #else
@@ -186,8 +185,17 @@ void fixEnvForMozilla() {
 				{
 					if (sscanf(buffer, "GRE_PATH=%s", path) == 1)
 					{
-						grePath = strdup(path);
-						break;
+						int index = 0;
+						char* prefix = prefixes [index];
+						while (prefix != NULL)
+						{
+							if (strstr(path, prefix))
+							{
+								grePath = strdup(path);
+								break;
+							}
+							prefix = prefixes [++index];
+						}
 					}
 				}
 				fclose(file);
@@ -230,57 +238,21 @@ void fixEnvForMozilla() {
 #endif
 			}
 
+#if defined (SOLARIS)
 			if (grePath == NULL)
 			{
 				/* some other typical installation locations */
 				char* dirs[] = {
-#if defined(__amd64__) || defined(__x86_64__) || defined(__powerpc64__)
-					"/usr/lib64/xulrunner/",
-					"/usr/lib64/mozilla-firefox/",
-					"/usr/lib64/firefox/",
-					"/usr/lib64/mozilla-seamonkey/",
-					"/usr/lib64/seamonkey/",
-					"/usr/lib64/mozilla/",
-#endif
-#if defined (SOLARIS)
-					"/usr/sfw/lib/xulrunner/",
-					"/usr/sfw/lib/mozilla-firefox/",
-					"/usr/sfw/lib/firefox/",
-					"/usr/sfw/lib/mozilla/",
-					"/usr/sfw/lib/mozilla-seamonkey/",
-					"/usr/sfw/lib/seamonkey/",
-#endif
-					"/usr/lib/xulrunner/",
-					"/usr/lib/mozilla-firefox/",
-					"/usr/lib/firefox/",
-					"/usr/lib/mozilla-seamonkey/",
-					"/usr/lib/seamonkey/",
-					"/usr/lib/mozilla/",
-					"/usr/local/xulrunner/",
-					"/opt/xulrunner/",
-					"/usr/local/mozilla-firefox/",
-					"/usr/local/firefox/",
-					"/opt/mozilla-firefox/",
-					"/opt/firefox/",
-					"/usr/local/mozilla-seamonkey/",
-					"/usr/local/seamonkey/",
-					"/opt/mozilla-seamonkey/",
-					"/opt/seamonkey/",
-					"/usr/local/mozilla/",
-					"/opt/mozilla/",
+					"/usr/sfw/lib/mozilla/",	/* Solaris location */
+					"/usr/lib/firefox/",			/* OpenSolaris location */
 					NULL
 				};
 
-#if defined (SOLARIS)
 				/*
 				 * The solaris compiler does not do static linking, so just check
 				 * for a common lib to ensure that the install seems valid.
 				 */
 				char* testlib = "libxpcom.so";
-#else
-				/* Ensure that the install is dynamically-linked and is built with GTK2 */
-				char* testlib = "components/libwidget_gtk2.so";
-#endif
 
 				struct stat buf;
 				int index = 0;
@@ -301,18 +273,18 @@ void fixEnvForMozilla() {
 					dir = dirs [index++];
 				}
 			}
+#endif // SOLARIS
 		}
 
 		if (grePath != NULL)
 		{
-			/* If grePath contains "xul" then do not change the LD_LIBRARY_PATH,
+			/* If grePath contains "xulrunner" then do not change the LD_LIBRARY_PATH,
 			 * since it is likely that a xulrunner (not a mozilla or firefox)
 			 * will be found at runtime.  Note that MOZILLA_FIVE_HOME is still
 			 * updated if grePath contains "xul" since this variable can act as
 			 * a backup GRE to try if an initially-detected one fails to load.
 			 */
-			char* current = strrchr(grePath, 'x');
-			if (current == NULL || strncmp(current, "xul", 3) != 0) {
+			if (!strstr(grePath, "xulrunner")) {
 				ldPath = (char*)realloc(ldPath, strlen(ldPath) + strlen(grePath) + 2);
 				if (strlen(ldPath) > 0) strcat(ldPath, ":");
 				strcat(ldPath, grePath);
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.h b/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.h
index 42b4f00..e227741 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseMozilla.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseNix.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseNix.c
index 37a08ef..bc57e22 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseNix.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseNix.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseOS.h b/eclipse/features/org.eclipse.equinox.executable/library/eclipseOS.h
index 859bad4..a0e0902 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseOS.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseOS.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.c
index 9934fe5..e46c1f5 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.h b/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.h
index 750d780..9cac1aa 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseShm.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseUnicode.h b/eclipse/features/org.eclipse.equinox.executable/library/eclipseUnicode.h
index 546a36e..f98b77d 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseUnicode.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseUnicode.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.c b/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.c
index 9ed7b68..09eb9fd 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Kevin Cornell (Rational Software Corporation)
+ *	   Martin Oberhuber (Wind River) - [149994] Add --launcher.appendVmargs
  *******************************************************************************/
 
 /* Eclipse Launcher Utility Methods */
@@ -159,6 +160,48 @@ _TCHAR * concatPaths(_TCHAR** strs, _TCHAR separator) {
 }
 
 /*
+ * Concatenates two NULL-terminated arrays of Strings,
+ * returning a new NULL-terminated array.
+ * The returned array must be freed with the regular free().
+ */
+_TCHAR** concatArgs(_TCHAR** l1, _TCHAR** l2) {
+	_TCHAR** newArray = NULL;
+	int size1 = 0;
+	int size2 = 0;
+
+	if (l1 != NULL)
+		while (l1[size1] != NULL) size1++;
+	if (l2 != NULL)
+		while (l2[size2] != NULL) size2++;
+
+	newArray = (_TCHAR **) malloc((size1 + size2 + 1) * sizeof(_TCHAR *));
+	if (size1 > 0) {
+		memcpy(newArray, l1, size1 * sizeof(_TCHAR *));
+	}
+	if (size2 > 0) {
+		memcpy(newArray + size1, l2, size2 * sizeof(_TCHAR *));
+	}
+	newArray[size1 + size2] = NULL;
+	return newArray;
+}
+
+/*
+ * returns the relative position of arg in the NULL-terminated list of args,
+ * or -1 if args does not contain arg.
+ */
+int indexOf(_TCHAR *arg, _TCHAR **args) {
+	int i = -1;
+	if (arg != NULL && args != NULL) {
+		while (args[++i] != NULL) {
+			if (_tcsicmp(arg, args[i]) == 0) {
+				return i;
+			}
+		}
+	}
+	return -1;
+}
+
+/*
  * buffer contains a pathSeparator separated list of paths, check 
  * that it contains all the paths given.  Each path is expected to be
  * terminated with a pathSeparator character.
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.h b/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.h
index 970aba3..f9d5003 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/eclipseUtil.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Kevin Cornell (Rational Software Corporation)
+ *	   Martin Oberhuber (Wind River) - [149994] Add --launcher.appendVmargs
  *******************************************************************************/
 
 #ifndef ECLIPSE_UTIL_H
@@ -37,6 +38,12 @@ extern _TCHAR * checkPathList( _TCHAR* pathList, _TCHAR* programDir, int reverse
 /* take a NULL terminated array of strings and concatenate them together into one string */
 extern _TCHAR * concatStrings(_TCHAR** strs);
 
+/* Concatenates two NULL-terminated arrays of strings into a new array of strings */
+extern _TCHAR** concatArgs(_TCHAR** l1, _TCHAR** l2);
+
+/* Returns the relative position of arg in the NULL-terminated list of args, or -1 */
+extern int indexOf(_TCHAR *arg, _TCHAR **args);
+
 /* take a NULL terminated array of strings and concatenate them together using the give pathSeparator */
 extern _TCHAR* concatPaths(_TCHAR** paths, _TCHAR pathSeparator);
 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/build.sh b/eclipse/features/org.eclipse.equinox.executable/library/gtk/build.sh
old mode 100755
new mode 100644
index f821793..9608803
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/build.sh
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/build.sh
@@ -36,6 +36,7 @@ defaultOS=""
 defaultOSArch=""
 defaultWS="gtk"
 defaultJava=DEFAULT_JAVA_JNI
+defaultJavaHome=""
 javaHome=""
 makefile=""
 if [ "$OS" = "" ];  then
@@ -57,7 +58,7 @@ case $OS in
 			"x86_64")
 				defaultOSArch="x86_64"
 				defaultJava=DEFAULT_JAVA_EXEC
-				[ -d /usr/java64/1.5 ] && javaHome="/usr/java64/1.5"
+				[ -d /usr/java64/1.5 ] && defaultJavaHome="/usr/java64/1.5"
 				OUTPUT_DIR="../../bin/$defaultWS/$defaultOS/$defaultOSArch"
 				;;
 			i?86)
@@ -98,12 +99,20 @@ case $OS in
 		makefile="make_aix.mak"
 		defaultOS="aix"
 		defaultOSArch="ppc64"
-		javaHome="/bluebird/teamswt/swt-builddir/JDKs/AIX/PPC64/j564/sdk"
+		[ -d /bluebird/teamswt/swt-builddir/JDKs/AIX/PPC64/j564/sdk ] && defaultJavaHome="/bluebird/teamswt/swt-builddir/JDKs/AIX/PPC64/j564/sdk"
+	;;
+	"HP-UX")
+		makefile="make_hpux.mak"
+		defaultOS="hpux"
+		defaultOSArch="ia64_32"
+		PATH=$PATH:/opt/hp-gcc/bin:/opt/gtk2.6/bin:/opt/gtk2.6/lib/pkgconfig
+		export PATH
+		[ -d /opt/java1.5 ] && defaultJavaHome="/opt/java1.5"
 	;;
 	"SunOS")
 		makefile="make_solaris.mak"
 		defaultOS="solaris"
-		[ -d /usr/jdk/jdk1.5.0_01 ] && javaHome="/usr/jdk/jdk1.5.0_01"
+		[ -d /usr/jdk/jdk1.5.0_01 ] && defaultJavaHome="/usr/jdk/jdk1.5.0_01"
 		OUTPUT_DIR="../../bin/$defaultWS/$defaultOS/$defaultOSArch"
 		#PATH=/usr/ccs/bin:/opt/SUNWspro/bin:$PATH
 		PATH=/usr/ccs/bin:/export/home/SUNWspro/bin:$PATH
@@ -161,9 +170,13 @@ DEFAULT_OS_ARCH="$defaultOSArch"
 DEFAULT_WS="$defaultWS"
 DEFAULT_JAVA=$defaultJava
 
-if [ -n  $javaHome ]; then
+origJavaHome=$JAVA_HOME
+if [ -n  "$javaHome" ]; then
 	JAVA_HOME=$javaHome
 	export JAVA_HOME
+elif [ -z "$JAVA_HOME" -a -n  "$defaultJavaHome" ]; then
+	JAVA_HOME="$defaultJavaHome"
+	export JAVA_HOME
 fi
 
 if [ "$defaultOSArch" = "ppc64" ];  then
@@ -198,3 +211,7 @@ if [ "$makefile" != "" ]; then
 else
 	echo "Unknown OS $OS -- build aborted"
 fi
+
+#restore original JAVA_HOME
+JAVA_HOME="$origJavaHome"
+export JAVA_HOME
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipse.ini b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipse.ini
deleted file mode 100644
index f640dd2..0000000
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipse.ini
+++ /dev/null
@@ -1,4 +0,0 @@
---launcher.defaultAction
-openFile
---launcher.library
-./eclipse_1305.so
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c
index 9aeee5f..af75837 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -35,6 +35,10 @@
 #include <semaphore.h>
 #include <fcntl.h>
 
+#ifdef HPUX
+#define SEM_FAILED (void *)-1
+#endif
+
 /* Global Variables */
 char*  defaultVM     = "java";
 char*  vmLibrary 	 = "libjvm.so";
@@ -52,7 +56,8 @@ static GtkWidget*   image = 0;
 static sem_t* mutex;
 static Atom appWindowAtom, launcherWindowAtom;
 static _TCHAR** openFilePath = NULL; /* the files we want to open */
-static int openFileTimeout = 60; /* number of seconds to wait before timeout */
+static int openFileTimeout = 60; 	 /* number of seconds to wait before timeout */
+static int windowPropertySet = 0;	 /* set to 1 on success */
 
 static struct sigaction quitAction;
 static struct sigaction intAction;
@@ -134,24 +139,19 @@ static char * createSWTWindowString(char * suffix, int semaphore) {
 
 static int setAppWindowPropertyFn() {
 	Window appWindow;
-	GdkWindow *propWindow;
-	GdkAtom propAtom;
+	Atom propAtom;
 	_TCHAR *propVal;
 
 	//Look for the SWT window. If it's there, set a property on it.
 	appWindow = gtk.XGetSelectionOwner(gtk_GDK_DISPLAY, appWindowAtom);
-	//appWindow = XGetSelectionOwner(GDK_DISPLAY(), appWindowAtom);
 	if (appWindow) {
-		propAtom = gtk.gdk_atom_intern("org.eclipse.swt.filePath.message", FALSE);
+		propAtom = gtk.XInternAtom(gtk_GDK_DISPLAY, "org.eclipse.swt.filePath.message", FALSE);
 		//append a colon delimiter in case more than one file gets appended to the app windows property.
 		propVal = concatPaths(openFilePath, _T_ECLIPSE(':'));
-		propWindow = gtk.gdk_window_foreign_new(appWindow);
-		if (propWindow != NULL) {
-			gtk.gdk_property_change(propWindow, propAtom, propAtom, 8, GDK_PROP_MODE_APPEND, (guchar *) propVal, _tcslen(propVal));
-			free(propVal);
-			return 1;
-		} //else the window got destroyed between XGetSelectionOwner and here (?)
+		gtk.XChangeProperty(gtk_GDK_DISPLAY, appWindow, propAtom, propAtom, 8, PropModeAppend, (unsigned char *)propVal, _tcslen(propVal));
 		free(propVal);
+		windowPropertySet = 1;
+		return 1;
 	}
 	return 0;
 }
@@ -335,7 +335,7 @@ char** getArgVM( char* vm )
 JavaResults* launchJavaVM( char* args[] )
 {
 	JavaResults* jvmResults = NULL;
-  	pid_t   jvmProcess;
+  	pid_t   jvmProcess, finishedProcess = 0;
   	int     exitCode;
   	
 #ifdef MOZILLA_FIX
@@ -359,7 +359,22 @@ JavaResults* launchJavaVM( char* args[] )
 	/* If the JVM is still running, wait for it to terminate. */
 	if (jvmProcess != 0)
 	{
-		waitpid(jvmProcess, &exitCode, 0);
+		/* When attempting a file open, we need to spin the event loop
+		 * for setAppWindowTimerProc to run.  When that succeeds or times out, 
+		 * we can stop the event loop and just wait on the child process.
+		 */
+		if (openFilePath != NULL) {
+			struct timespec sleepTime;
+			sleepTime.tv_sec = 0;
+			sleepTime.tv_nsec = 5e+8; // 500 milliseconds
+			
+			while(openFileTimeout > 0 && !windowPropertySet && (finishedProcess = waitpid(jvmProcess, &exitCode, WNOHANG)) == 0) {
+				dispatchMessages();
+				nanosleep(&sleepTime, NULL);
+			}
+		}
+		if (finishedProcess == 0)
+			waitpid(jvmProcess, &exitCode, 0);
       	if (WIFEXITED(exitCode))
       		/* TODO, this should really be a runResult if we could distinguish the launch problem above */
 			jvmResults->launchResult = WEXITSTATUS(exitCode);
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.h b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.h
index c78ceaa..cdff7f4 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtk.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -54,12 +54,10 @@ struct GTK_PTRS {
 	int			(*gdk_pixbuf_get_width)		(const GdkPixbuf*);
 	int			(*gdk_pixbuf_get_height)	(const GdkPixbuf*);
 	void		(*gdk_set_program_class)	(const char*);
-	GdkWindow*  (*gdk_window_foreign_new)   (GdkNativeWindow);
-	void        (*gdk_property_change)		(GdkWindow*, GdkAtom, GdkAtom, gint, GdkPropMode, const guchar*, gint);
-	GdkAtom     (*gdk_atom_intern)			(const gchar*, gboolean);
 	
 	Window 		(*XGetSelectionOwner)		(Display*, Atom);
 	void		(*XSetSelectionOwner)		(Display*, Atom, Window, Time);
+	void 		(*XChangeProperty)			(Display*, Window, Atom, Atom, int, int, unsigned char *, int);
 	Window 		(*XCreateWindow)			(Display*, Window, int, int, unsigned int, unsigned int, unsigned int, int, unsigned int, Visual*, unsigned long, XSetWindowAttributes*);
 	void		(*XSync)					(Display*, Bool);
 	int			(*XDefaultScreen)			(Display*);
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkCommon.c b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkCommon.c
index 84eca11..538601f 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkCommon.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkCommon.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkInit.c b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkInit.c
index 995c7cf..787f733 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkInit.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/eclipseGtkInit.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -44,9 +44,6 @@ static FN_TABLE gtkFunctions[] = { 	FN_TABLE_ENTRY(gtk_adjustment_new),
 								 };
 /* functions from libgdk-x11-2.0 */
 static FN_TABLE gdkFunctions[] = {	FN_TABLE_ENTRY(gdk_set_program_class), 
-									FN_TABLE_ENTRY(gdk_property_change),
-									FN_TABLE_ENTRY(gdk_atom_intern),
-									FN_TABLE_ENTRY(gdk_window_foreign_new),
 									FN_TABLE_ENTRY(gdk_display), /* not a function */
 									{ NULL, NULL } 
 						  		 };
@@ -72,6 +69,7 @@ static FN_TABLE gobjFunctions[] = {	FN_TABLE_ENTRY(g_log_set_handler),
 static FN_TABLE x11Functions[] = {	FN_TABLE_ENTRY(XGetSelectionOwner),
 									FN_TABLE_ENTRY(XSetSelectionOwner),
 									FN_TABLE_ENTRY(XCreateWindow),
+									FN_TABLE_ENTRY(XChangeProperty),
 									FN_TABLE_ENTRY(XSync),
 									FN_TABLE_ENTRY(XRootWindow),
 									FN_TABLE_ENTRY(XDefaultScreen),
@@ -95,16 +93,16 @@ static int loadGtkSymbols( void * library, FN_TABLE * table) {
 
 int loadGtk() {
 #ifdef AIX 
-#define FLAGS RTLD_LAZY | RTLD_MEMBER
+#define DLFLAGS RTLD_LAZY | RTLD_MEMBER
 #else
-#define FLAGS RTLD_LAZY
+#define DLFLAGS RTLD_LAZY
 #endif
 
-	void * objLib = dlopen(GOBJ_LIB, FLAGS);
-	void * gdkLib = dlopen(GDK_LIB, FLAGS);
-	void * pixLib = dlopen(PIXBUF_LIB, FLAGS);
-	void * gtkLib = dlopen(GTK_LIB, FLAGS);
-	void * x11Lib = dlopen(X11_LIB, FLAGS);
+	void * objLib = dlopen(GOBJ_LIB, DLFLAGS);
+	void * gdkLib = dlopen(GDK_LIB, DLFLAGS);
+	void * pixLib = dlopen(PIXBUF_LIB, DLFLAGS);
+	void * gtkLib = dlopen(GTK_LIB, DLFLAGS);
+	void * x11Lib = dlopen(X11_LIB, DLFLAGS);
 	
 	/* initialize ptr struct to 0's */
 	memset(&gtk, 0, sizeof(struct GTK_PTRS));
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_aix.mak b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_aix.mak
index 05b8acd..d169139 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_aix.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_aix.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2010 IBM Corporation and others.
+# Copyright (c) 2010, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
@@ -38,7 +38,16 @@ EXEC = $(PROGRAM_OUTPUT)
 DLL = $(PROGRAM_LIBRARY)
 #LIBS = `pkg-config --libs-only-L gtk+-2.0` -lgtk-x11-2.0 -lgdk_pixbuf-2.0 -lgobject-2.0 -lgdk-x11-2.0 -lpthread -ldl -lX11
 LIBS = -lpthread -ldl
-GTK_LIBS = -DGTK_LIB="\"libgtk-x11-2.0.a(libgtk-x11-2.0.so.0)\"" -DGDK_LIB="\"libgdk-x11-2.0.a(libgdk-x11-2.0.so.0)\"" -DPIXBUF_LIB="\"libgdk_pixbuf-2.0.a(libgdk_pixbuf-2.0.so.0)\"" -DGOBJ_LIB="\"libgobject-2.0.a(libgobject-2.0.so.0)\"" -DX11_LIB="\"libX11.a(shr_64.o)\""
+
+X11_LIB_ppc = shr4.o
+X11_LIB_ppc64 = shr_64.o
+X11_LIB = -DX11_LIB="\"libX11.a($(X11_LIB_$(DEFAULT_OS_ARCH)))\""
+GTK_LIBS = -DGTK_LIB="\"libgtk-x11-2.0.a(libgtk-x11-2.0.so.0)\"" \
+		   -DGDK_LIB="\"libgdk-x11-2.0.a(libgdk-x11-2.0.so.0)\"" \
+		   -DPIXBUF_LIB="\"libgdk_pixbuf-2.0.a(libgdk_pixbuf-2.0.so.0)\"" \
+		   -DGOBJ_LIB="\"libgobject-2.0.a(libgobject-2.0.so.0)\"" \
+		   $(X11_LIB)
+		   
 LFLAGS = ${M_ARCH} -shared
 CFLAGS = ${M_ARCH} -g -s -Wall\
 	-fpic \
@@ -90,7 +99,8 @@ eclipseNix.o: ../eclipseNix.c
 	$(CC) $(CFLAGS) -c ../eclipseNix.c -o eclipseNix.o
 
 $(EXEC): $(MAIN_OBJS) $(COMMON_OBJS)
-	$(CC) ${M_ARCH} -o $(EXEC) $(MAIN_OBJS) $(COMMON_OBJS) $(LIBS)
+	$(CC) ${M_ARCH} -Wl,-bM:UR -o $(EXEC) $(MAIN_OBJS) $(COMMON_OBJS) $(LIBS)
+	sedmgr -c exempt $(EXEC)
 	
 $(DLL): $(DLL_OBJS) $(COMMON_OBJS)
 	$(CC) $(LFLAGS) -o $(DLL) $(DLL_OBJS) $(COMMON_OBJS) $(LIBS)
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_hpux.mak b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_hpux.mak
new file mode 100644
index 0000000..5d12d90
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_hpux.mak
@@ -0,0 +1,99 @@
+#*******************************************************************************
+# Copyright (c) 2000, 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+#     Kevin Cornell (Rational Software Corporation)
+#     Sumit Sarkar (Hewlett-Packard)
+#*******************************************************************************
+include ../make_version.mak
+# Makefile for creating the HPUX/Motif eclipse launcher program.
+
+# This makefile expects the following environment variables set:
+#
+# PROGRAM_OUTPUT  - the filename of the output executable
+# DEFAULT_OS      - the default value of the "-os" switch
+# DEFAULT_OS_ARCH - the default value of the "-arch" switch
+# DEFAULT_WS      - the default value of the "-ws" switch
+# X11_HOME	 - the full path to X11 header files
+# MOTIF_HOME	 - the full path to Motif header files
+
+#ifeq ($(PROGRAM_OUTPUT),)
+#  PROGRAM_OUTPUT=eclipse
+#endif
+
+DEFAULT_JAVA=DEFAULT_JAVA_EXEC
+PROGRAM_LIBRARY=eclipse_$(LIB_VERSION).so
+
+# Define the object modules to be compiled and flags.
+CC=gcc
+MAIN_OBJS = eclipseMain.o
+COMMON_OBJS = eclipseConfig.o eclipseCommon.o eclipseGtkCommon.o eclipseGtkInit.o
+DLL_OBJS	= eclipse.o eclipseGtk.o eclipseUtil.o eclipseJNI.o eclipseShm.o eclipseNix.o
+
+EXEC = $(PROGRAM_OUTPUT)
+DLL = $(PROGRAM_LIBRARY)
+LIBS = -L$(MOTIF_HOME)/lib -L$(X11_HOME)/lib -lpthread -lrt
+GTK_LIBS = -DGTK_LIB="\"libgtk-x11-2.0.so\"" -DGDK_LIB="\"libgdk-x11-2.0.so\"" -DPIXBUF_LIB="\"libgdk_pixbuf-2.0.so\"" \
+ -DGOBJ_LIB="\"libgobject-2.0.so\"" -DX11_LIB="\"libX11.so\""
+LFLAGS = -shared -static-libgcc
+# -Wl,--export-dynamic
+CFLAGS = -O -s \
+	-DNETSCAPE_FIX \
+	-DDEFAULT_OS="\"$(DEFAULT_OS)\"" \
+	-DDEFAULT_OS_ARCH="\"$(DEFAULT_OS_ARCH)\"" \
+	-DDEFAULT_WS="\"$(DEFAULT_WS)\"" \
+	-D$(DEFAULT_JAVA) \
+	-DHPUX \
+	$(GTK_LIBS) \
+	-I./ \
+	-I../ \
+	-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/hp-ux \
+	`pkg-config --cflags gtk+-2.0`
+
+all: $(EXEC) $(DLL)
+
+.c.o:
+	$(CC) $(CFLAGS) -c $< -o $@
+
+eclipse.o: ../eclipse.c ../eclipseOS.h ../eclipseCommon.h ../eclipseJNI.h
+	$(CC) $(CFLAGS) -c ../eclipse.c -o $@
+	
+eclipseMain.o: ../eclipseMain.c ../eclipseUnicode.h ../eclipseCommon.h  
+	$(CC) $(CFLAGS) -c ../eclipseMain.c -o $@
+
+eclipseCommon.o: ../eclipseCommon.c ../eclipseCommon.h ../eclipseUnicode.h 
+	$(CC) $(CFLAGS) -c ../eclipseCommon.c -o $@
+	
+eclipseUtil.o: ../eclipseUtil.c ../eclipseUtil.h ../eclipseOS.h
+	$(CC) $(CFLAGS) -c ../eclipseUtil.c -o $@
+
+eclipseJNI.o: ../eclipseJNI.c ../eclipseCommon.h ../eclipseOS.h ../eclipseJNI.h
+	$(CC) $(CFLAGS) -c ../eclipseJNI.c -o $@
+	
+eclipseConfig.o: ../eclipseConfig.c ../eclipseConfig.h ../eclipseOS.h
+	$(CC) $(CFLAGS) -c ../eclipseConfig.c -o $@
+	
+eclipseShm.o: ../eclipseShm.h ../eclipseUnicode.h ../eclipseShm.c
+	$(CC) $(CFLAGS) -c ../eclipseShm.c -o $@
+
+eclipseNix.o: ../eclipseNix.c
+	$(CC) $(CFLAGS) -c ../eclipseNix.c -o $@
+
+$(EXEC): $(MAIN_OBJS) $(COMMON_OBJS)
+	$(CC) -o $(EXEC) $(MAIN_OBJS) $(COMMON_OBJS) $(LIBS)
+
+$(DLL): $(DLL_OBJS) $(COMMON_OBJS)
+	$(CC) $(LFLAGS) -o $(DLL) $(DLL_OBJS) $(COMMON_OBJS) $(LIBS)
+	
+install: all
+	cp $(EXEC) $(OUTPUT_DIR)
+	cp  $(DLL) $(LIBRARY_DIR)
+	rm -f $(EXEC) $(MAIN_OBJS) $(COMMON_OBJS) $(DLL_OBJS)
+
+clean:
+	rm -f $(EXEC) $(MAIN_OBJS) $(COMMON_OBJS) $(DLL_OBJS)
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_linux.mak b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_linux.mak
index a040cd7..9c64a31 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_linux.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_linux.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak
index 7b9b3f4..0fbca23 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/gtk/make_solaris.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak b/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak
index 05aaff2..3420642 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/make_version.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2006 IBM Corporation and others.
+# Copyright (c) 2006, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,5 +10,5 @@
 #*******************************************************************************
 
 maj_ver=1
-min_ver=312
+min_ver=407
 LIB_VERSION = $(maj_ver)$(min_ver)
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.c b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.c
index 89ecdf4..2f4e525 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.h b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.h
index a4c2589..31252d7 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgCommon.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.c b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.c
index bd2abf2..056b09d 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.h b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.h
index c9c711d..a12218f 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImage.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.c b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.c
index d19f1dc..96053b3 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.h b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.h
index df3c901..2b0f9f4 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgImageData.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.c b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.c
index cf8b77f..57989f6 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.h b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.h
index 3ff010d..8ef7dda 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.h
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/NgWinBMPFileFormat.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/build.sh b/eclipse/features/org.eclipse.equinox.executable/library/motif/build.sh
old mode 100755
new mode 100644
index 12c0942..87241b8
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/build.sh
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/build.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotif.c b/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotif.c
index 4d5f8f1..049cb78 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotif.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotif.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotifInit.c b/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotifInit.c
index 84e7295..c9ca22e 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotifInit.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/eclipseMotifInit.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
@@ -104,13 +104,15 @@ void * loadMotifShimLibrary() {
 		_TCHAR* eclipseMotifLib = _T_ECLIPSE("libeclipse-motif.so");
 		_TCHAR* path = strdup(eclipseLibrary);
 		_TCHAR* c = strrchr(path, '/');
-		if (c == NULL)
+		if (c == NULL) {
+			free(path);
 			return NULL;
+		}
 
 		*c = 0;
 		c = malloc((strlen(path) + 2 + strlen(eclipseMotifLib)) * sizeof(char));
 		_stprintf(c, _T_ECLIPSE("%s/%s"), path, eclipseMotifLib);
-
+		free(path);
 		return dlopen(c, RTLD_LAZY);
 	}
 	return 0;
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_PA_RISC.mak b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_PA_RISC.mak
index d09d9ef..2552b56 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_PA_RISC.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_PA_RISC.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2007 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_ia64_32.mak b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_ia64_32.mak
index edef221..92667da 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_ia64_32.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_hpux_ia64_32.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_linux.mak b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_linux.mak
index cd8d51d..a29d1b9 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_linux.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_linux.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_solaris.mak b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_solaris.mak
index d9f7527..3438ce3 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/motif/make_solaris.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/motif/make_solaris.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2008 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/photon/build.sh b/eclipse/features/org.eclipse.equinox.executable/library/photon/build.sh
old mode 100755
new mode 100644
index 2166d19..ea84059
--- a/eclipse/features/org.eclipse.equinox.executable/library/photon/build.sh
+++ b/eclipse/features/org.eclipse.equinox.executable/library/photon/build.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2006 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/photon/eclipsePhoton.c b/eclipse/features/org.eclipse.equinox.executable/library/photon/eclipsePhoton.c
index c14cb9b..e5dfbd2 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/photon/eclipsePhoton.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/photon/eclipsePhoton.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/photon/make_qnx.mak b/eclipse/features/org.eclipse.equinox.executable/library/photon/make_qnx.mak
index fac6918..475cf48 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/photon/make_qnx.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/photon/make_qnx.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2006 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/win32/build.bat b/eclipse/features/org.eclipse.equinox.executable/library/win32/build.bat
index b1c49fc..803ab6b 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/win32/build.bat
+++ b/eclipse/features/org.eclipse.equinox.executable/library/win32/build.bat
@@ -1,5 +1,5 @@
 @rem *******************************************************************************
- at rem  Copyright (c) 2000, 2005 IBM Corporation and others.
+ at rem  Copyright (c) 2000, 2009 IBM Corporation and others.
 @rem  All rights reserved. This program and the accompanying materials
 @rem  are made available under the terms of the Eclipse Public License v1.0
 @rem  which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/win32/build.sh b/eclipse/features/org.eclipse.equinox.executable/library/win32/build.sh
old mode 100755
new mode 100644
index 386f81d..f81f52b
--- a/eclipse/features/org.eclipse.equinox.executable/library/win32/build.sh
+++ b/eclipse/features/org.eclipse.equinox.executable/library/win32/build.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #*******************************************************************************
-# Copyright (c) 2000, 2005 IBM Corporation and others.
+# Copyright (c) 2000, 2006 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipse.rc b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipse.rc
index 723baa7..c057083 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipse.rc
+++ b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipse.rc
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c
index 770b464..3875769 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWin.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWinCommon.c b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWinCommon.c
index 48f38b3..27546bf 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWinCommon.c
+++ b/eclipse/features/org.eclipse.equinox.executable/library/win32/eclipseWinCommon.c
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/win32/make_mingw.mak b/eclipse/features/org.eclipse.equinox.executable/library/win32/make_mingw.mak
index 9feb80e..aaee41e 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/win32/make_mingw.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/win32/make_mingw.mak
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/wpf/build.bat b/eclipse/features/org.eclipse.equinox.executable/library/wpf/build.bat
index 7d70ff6..be77e3a 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/wpf/build.bat
+++ b/eclipse/features/org.eclipse.equinox.executable/library/wpf/build.bat
@@ -1,5 +1,5 @@
 @rem *******************************************************************************
- at rem  Copyright (c) 2000, 2005 IBM Corporation and others.
+ at rem  Copyright (c) 2000, 2009 IBM Corporation and others.
 @rem  All rights reserved. This program and the accompanying materials
 @rem  are made available under the terms of the Eclipse Public License v1.0
 @rem  which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipse.rc b/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipse.rc
index fb54e4e..874a4b9 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipse.rc
+++ b/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipse.rc
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpf.cpp b/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpf.cpp
index 18b6c51..f965239 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpf.cpp
+++ b/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpf.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpfCommon.cpp b/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpfCommon.cpp
index a4aa8bf..03ce3fc 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpfCommon.cpp
+++ b/eclipse/features/org.eclipse.equinox.executable/library/wpf/eclipseWpfCommon.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/library/wpf/make_wpf.mak b/eclipse/features/org.eclipse.equinox.executable/library/wpf/make_wpf.mak
index bb98952..821bb64 100644
--- a/eclipse/features/org.eclipse.equinox.executable/library/wpf/make_wpf.mak
+++ b/eclipse/features/org.eclipse.equinox.executable/library/wpf/make_wpf.mak
@@ -1,5 +1,5 @@
 #******************************************************************************
-# Copyright (c) 2000, 2006 IBM Corporation and others.
+# Copyright (c) 2000, 2007 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at 
diff --git a/eclipse/features/org.eclipse.equinox.executable/license.html b/eclipse/features/org.eclipse.equinox.executable/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.executable/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.executable/target.build.properties b/eclipse/features/org.eclipse.equinox.executable/target.build.properties
index b3817cd..4baa9bb 100644
--- a/eclipse/features/org.eclipse.equinox.executable/target.build.properties
+++ b/eclipse/features/org.eclipse.equinox.executable/target.build.properties
@@ -44,9 +44,11 @@ root.macosx.cocoa.x86_64.permissions.755=${launcherName}.app/Contents/MacOS/${la
 
 root.aix.motif.ppc=bin/motif/aix/ppc
 root.aix.gtk.ppc64=bin/gtk/aix/ppc64
+root.aix.gtk.ppc=bin/gtk/aix/ppc
 
 root.hpux.motif.PA_RISC=bin/motif/hpux/PA_RISC
 root.hpux.motif.ia64_32=bin/motif/hpux/ia64_32
+root.hpux.gtk.ia64_32=bin/gtk/hpux/ia64_32
 
 root.solaris.motif.sparc=contributed/motif/solaris/sparc
 root.solaris.gtk.x86=bin/gtk/solaris/x86
diff --git a/eclipse/features/org.eclipse.equinox.executable/target.build.xml b/eclipse/features/org.eclipse.equinox.executable/target.build.xml
index ed649f2..1d06b9b 100644
--- a/eclipse/features/org.eclipse.equinox.executable/target.build.xml
+++ b/eclipse/features/org.eclipse.equinox.executable/target.build.xml
@@ -102,7 +102,7 @@
 			<fileset dir="${basedir}/bin/carbon/macosx/x86" includes="**"			/>
 		</copy>
 		<chmod perm="755" dir="${feature.base}/macosx.carbon.x86/${collectingFolder}" includes="${launcherName}" /> 
-		<chmod perm="755" dir="${feature.base}/macosx.carbon.x86/${collectingFolder}" includes="Elcipse.app/Contents/MacOS/launcher" /> 
+		<chmod perm="755" dir="${feature.base}/macosx.carbon.x86/${collectingFolder}" includes="Eclipse.app/Contents/MacOS/launcher" /> 
 	</target>
 	<target name="rootFilesmacosx_cocoa_ppc">
 		<mkdir dir="${feature.base}/macosx.cocoa.ppc/${collectingFolder}"/>
@@ -110,7 +110,7 @@
 			<fileset dir="${basedir}/bin/cocoa/macosx/ppc" includes="**"			/>
 		</copy>
 		<chmod perm="755" dir="${feature.base}/macosx.cocoa.ppc/${collectingFolder}" includes="${launcherName}" /> 
-		<chmod perm="755" dir="${feature.base}/macosx.cocoa.ppc/${collectingFolder}" includes="Elcipse.app/Contents/MacOS/launcher" /> 
+		<chmod perm="755" dir="${feature.base}/macosx.cocoa.ppc/${collectingFolder}" includes="Eclipse.app/Contents/MacOS/launcher" /> 
 	</target>
 	<target name="rootFilesmacosx_cocoa_x86">
 		<mkdir dir="${feature.base}/macosx.cocoa.x86/${collectingFolder}"/>
@@ -162,6 +162,14 @@
 		</copy>
 		<chmod perm="755" dir="${feature.base}/aix.gtk.ppc64/${collectingFolder}" includes="launcher" /> 
 	</target>
+	<target name="rootFilesaix_gtk_ppc">
+		<mkdir dir="${feature.base}/aix.gtk.ppc/${collectingFolder}"/>
+		<copy todir="${feature.base}/aix.gtk.ppc/${collectingFolder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}/bin/gtk/aix/ppc" includes="**"			/>
+			<fileset dir="${basedir}/gtk_root" includes="**"			/>
+		</copy>
+		<chmod perm="755" dir="${feature.base}/aix.gtk.ppc/${collectingFolder}" includes="launcher" /> 
+	</target>
 	<target name="rootFileslinux_gtk_x86_64">
 		<mkdir dir="${feature.base}/linux.gtk.x86_64/${collectingFolder}"/>
 		<copy todir="${feature.base}/linux.gtk.x86_64/${collectingFolder}" failonerror="true" overwrite="true">
@@ -250,6 +258,13 @@
 		</copy>
 		<chmod perm="755" dir="${feature.base}/hpux.motif.ia64_32/${collectingFolder}" includes="launcher" /> 
 	</target>
+	<target name="rootFileshpux_gtk_ia64_32">
+		<mkdir dir="${feature.base}/hpux.gtk.ia64_32/${collectingFolder}"/>
+		<copy todir="${feature.base}/hpux.gtk.ia64_32/${collectingFolder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}/bin/gtk/hpux/ia64_32" includes="**"			/>
+		</copy>
+		<chmod perm="755" dir="${feature.base}/hpux.gtk.ia64_32/${collectingFolder}" includes="launcher" /> 
+	</target>
 	<target name="rootFilesqnx_photon_x86">
 		<mkdir dir="${feature.base}/qnx.photon.x86/${collectingFolder}"/>
 		<copy todir="${feature.base}/qnx.photon.x86/${collectingFolder}" failonerror="true" overwrite="true">
@@ -278,9 +293,11 @@
 		<antcall target="rootFilessolaris_motif_sparc"/>
 		<antcall target="rootFilesaix_motif_ppc"/>
 		<antcall target="rootFilesaix_gtk_ppc64"/>
+		<antcall target="rootFilesaix_gtk_ppc"/>
 		<antcall target="rootFileshpux_motif_PA_RISC"/>
 		<antcall target="rootFileshpux_motif_ia64"/>
 		<antcall target="rootFileshpux_motif_ia64_32"/>
+		<antcall target="rootFileshpux_gtk_ia64_32"/>
 		<antcall target="rootFilesqnx_photon_x86"/>
 	</target>
 
diff --git a/eclipse/features/org.eclipse.equinox.incubator.feature/.project b/eclipse/features/org.eclipse.equinox.incubator.feature/.project
new file mode 100644
index 0000000..a5156bc
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.incubator.feature/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.incubator.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.equinox.incubator.feature/build.properties b/eclipse/features/org.eclipse.equinox.incubator.feature/build.properties
new file mode 100644
index 0000000..45c21df
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.incubator.feature/build.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties,\
+               eclipse_update_120.jpg
+               
+generate.feature at org.eclipse.equinox.jmx.client.feature.source=org.eclipse.equinox.jmx.client.feature
+generate.feature at org.eclipse.equinox.jmx.server.feature.source=org.eclipse.equinox.jmx.server.feature
+generate.feature at org.eclipse.equinox.jmx.client.feature.source=org.eclipse.equinox.jmx.client.feature
+generate.plugin at org.eclipse.equinox.initializer.source=org.eclipse.equinox.initializer
+generate.plugin at org.eclipse.equinox.region.source=org.eclipse.equinox.region
+generate.plugin at org.eclipse.equinox.console.supportability.source=org.eclipse.equinox.console.supportability
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg b/eclipse/features/org.eclipse.equinox.incubator.feature/eclipse_update_120.jpg
similarity index 100%
copy from eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg
copy to eclipse/features/org.eclipse.equinox.incubator.feature/eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.equinox.incubator.feature/feature.properties b/eclipse/features/org.eclipse.equinox.incubator.feature/feature.properties
new file mode 100644
index 0000000..45dc674
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.incubator.feature/feature.properties
@@ -0,0 +1,23 @@
+# "featureName" property - name of the feature
+featureName=Equinox Incubator Bundles Feature (Incubation)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=The Eclipse Project Updates
+
+# "description" property - description of the feature
+description=Equinox Incubator Bundles Feature (Incubation)
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.incubator.feature/feature.xml b/eclipse/features/org.eclipse.equinox.incubator.feature/feature.xml
new file mode 100644
index 0000000..5cd08b1
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.incubator.feature/feature.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.equinox.incubator.feature"
+      label="%featureName"
+      version="1.0.0.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.equinox.jmx.common.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.equinox.jmx.client.feature"
+         version="0.0.0"/>
+  
+   <includes
+         id="org.eclipse.equinox.jmx.server.feature"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.equinox.initializer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.equinox.initializer.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.region"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.equinox.region.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.console.supportability"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.equinox.console.supportability.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>       
+
+</feature>
diff --git a/eclipse/features/org.eclipse.equinox.jmx.client.feature/build.properties b/eclipse/features/org.eclipse.equinox.jmx.client.feature/build.properties
index ddfe69f..fa9c826 100644
--- a/eclipse/features/org.eclipse.equinox.jmx.client.feature/build.properties
+++ b/eclipse/features/org.eclipse.equinox.jmx.client.feature/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
+# Copyright (c) 2006,2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/features/org.eclipse.equinox.jmx.client.feature/feature.xml b/eclipse/features/org.eclipse.equinox.jmx.client.feature/feature.xml
index 1557b63..9603f8a 100644
--- a/eclipse/features/org.eclipse.equinox.jmx.client.feature/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.jmx.client.feature/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.jmx.client.feature"
       label="Resource Monitoring Client Feature (Incubation)"
-      version="1.0.0.qualifier"
-      provider-name="Eclipse.org">
-
+      version="1.0.100.qualifier"
+      provider-name="Eclipse.org"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier"> 
+      
    <description url="http://www.eclipse.org/equinox/incubator/monitoring/index.php">
       Client-side infrastructure for managing OSGi-based systems using
 JMX.
diff --git a/eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..1beb2e7
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes =\
+feature.xml,\
+feature.properties,\
+eclipse_update_120.jpg
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg b/eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/eclipse_update_120.jpg
similarity index 100%
copy from eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg
copy to eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..882f786
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.jmx.client.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,38 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Resource Monitoring Client Feature Source (Incubation)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+
+# "description" property - description of the feature
+description=Source code for the Resource Monitoring Client Feature (Incubation)
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2006, 2011 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.jmx.common.feature/build.properties b/eclipse/features/org.eclipse.equinox.jmx.common.feature/build.properties
index 4442ec0..3bb2be4 100644
--- a/eclipse/features/org.eclipse.equinox.jmx.common.feature/build.properties
+++ b/eclipse/features/org.eclipse.equinox.jmx.common.feature/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = feature.xml,\
                about.html
 src.includes = about.html
diff --git a/eclipse/features/org.eclipse.equinox.jmx.common.feature/feature.xml b/eclipse/features/org.eclipse.equinox.jmx.common.feature/feature.xml
index a338e18..68d4693 100644
--- a/eclipse/features/org.eclipse.equinox.jmx.common.feature/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.jmx.common.feature/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.jmx.common.feature"
       label="Resource Monitoring Common Feature (Incubation)"
-      version="1.0.0.qualifier"
-      provider-name="Eclipse.org">
+      version="1.0.100.qualifier"
+      provider-name="Eclipse.org"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description url="http://www.eclipse.org/equinox/incubator/monitoring/index.php">
       Common infrastructure for managing OSGi-based systems using JMX.
diff --git a/eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..52be3d7
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes =\
+feature.xml,\
+feature.properties,\
+eclipse_update_120.jpg
+
diff --git a/eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg b/eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/eclipse_update_120.jpg
similarity index 100%
copy from eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg
copy to eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..f68c822
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.jmx.common.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,38 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox Incubator Bundles Feature (Incubation)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+
+# "description" property - description of the feature
+description=Source code for the Equinox Incubator Bundles Feature  (Incubation)
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.jmx.server.feature/build.properties b/eclipse/features/org.eclipse.equinox.jmx.server.feature/build.properties
index ddfe69f..fa9c826 100644
--- a/eclipse/features/org.eclipse.equinox.jmx.server.feature/build.properties
+++ b/eclipse/features/org.eclipse.equinox.jmx.server.feature/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
+# Copyright (c) 2006,2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/features/org.eclipse.equinox.jmx.server.feature/feature.xml b/eclipse/features/org.eclipse.equinox.jmx.server.feature/feature.xml
index e7d8364..e759bb2 100644
--- a/eclipse/features/org.eclipse.equinox.jmx.server.feature/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.jmx.server.feature/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.jmx.server.feature"
       label="Resource Monitoring Server Feature (Incubation)"
-      version="1.0.0.qualifier"
-      provider-name="Eclipse.org">
-
+      version="1.0.100.qualifier"
+      provider-name="Eclipse.org"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+       
    <description url="http://www.eclipse.org/equinox/incubator/monitoring/index.php">
       Server-side infrastructure for managing OSGi-based systems using JMX.
    </description>
diff --git a/eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..500fe11
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes =\
+feature.xml,\
+feature.properties,\
+eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg b/eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/eclipse_update_120.jpg
similarity index 100%
copy from eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg
copy to eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..43beb32
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.jmx.server.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,38 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Resource Monitoring Server Feature (Incubation)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+
+# "description" property - description of the feature
+description=Source code for the Resource Monitoring Server Feature (Incubation)
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.core.feature/.project b/eclipse/features/org.eclipse.equinox.p2.core.feature/.project
new file mode 100644
index 0000000..4627633
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.core.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.p2.core.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.equinox.p2.core.feature/build.properties b/eclipse/features/org.eclipse.equinox.p2.core.feature/build.properties
new file mode 100644
index 0000000..6e95a6a
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.core.feature/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+#     IBM Corporation - Ongoing development
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties,\
+               eclipse_update_120.jpg
+src.includes = license.html,epl-v10.html
diff --git a/eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg b/eclipse/features/org.eclipse.equinox.p2.core.feature/eclipse_update_120.jpg
similarity index 100%
copy from eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg
copy to eclipse/features/org.eclipse.equinox.p2.core.feature/eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.equinox.p2.core.feature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.core.feature/feature.properties
new file mode 100644
index 0000000..8e4ff62
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.core.feature/feature.properties
@@ -0,0 +1,35 @@
+###############################################################################
+# Copyright (c) 2010, 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox p2 Core Function
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Equinox
+
+description=Provides a minimal headless provisioning system.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2010 EclipseSource Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    EclipseSource - initial API and implementation\n
+################ end of copyright property ####################################
diff --git a/eclipse/features/org.eclipse.equinox.p2.core.feature/feature.xml b/eclipse/features/org.eclipse.equinox.p2.core.feature/feature.xml
new file mode 100644
index 0000000..5b02fda
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.core.feature/feature.xml
@@ -0,0 +1,286 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.equinox.p2.core.feature"
+      label="%featureName"
+      version="1.0.0.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+   
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.equinox.p2.artifact.repository"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.console"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.director"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.engine"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.garbagecollector"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.metadata"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.metadata.repository"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.repository"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.touchpoint.eclipse"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.touchpoint.natives"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.simpleconfigurator.manipulator"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.sat4j.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.sat4j.pb"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.filetransfer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.identity"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.provider.filetransfer"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.provider.filetransfer.httpclient"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.provider.filetransfer.httpclient.ssl"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.provider.filetransfer.ssl"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ecf.ssl"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.commons.codec"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.commons.httpclient"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.commons.logging"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.frameworkadmin"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.frameworkadmin.equinox"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.preferences"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.jarprocessor"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.ql"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.transport.ecf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.operations"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security.macosx"
+         os="macosx"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security.win32.x86"
+         os="win32"
+         arch="x86"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security.win32.x86_64"
+         os="win32"
+         arch="x86_64"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.equinox.p2.core.feature/pom.xml b/eclipse/features/org.eclipse.equinox.p2.core.feature/pom.xml
new file mode 100644
index 0000000..7758117
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.core.feature/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
+    <groupId>org.eclipse</groupId>
+    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+  </parent>
+  <groupId>org.eclipse</groupId>
+  <artifactId>org.eclipse.equinox.p2.core.feature</artifactId>
+  <version>1.0.0.qualifier</version>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/eclipse/features/org.eclipse.equinox.p2.core.feature/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.p2.core.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..4dd5929
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.core.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
+
diff --git a/eclipse/features/org.eclipse.equinox.p2.core.feature/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.core.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..875491f
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.core.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,38 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox p2 Core Function Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Equinox
+
+# "updateSiteName" property - label for the update site
+
+# "description" property - description of the feature
+description=Source code for the Equinox provisioning platform
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/build.properties b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/build.properties
index 0d20533..0bcdf98 100644
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/build.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2010 Tasktop Technologies and others.
+# Copyright (c) 2010, 2011 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,4 +8,4 @@
 # Contributors:
 #     Tasktop Technologies - initial API and implementation
 ###############################################################################
-bin.includes = feature.xml,license.html,epl-v10.html,license.html,feature.properties
+bin.includes = feature.xml,feature.properties
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/epl-v10.html b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.properties
old mode 100644
new mode 100755
index 6bd1ba0..f075c0c
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2010 Tasktop Technologies and others.
+# Copyright (c) 2010, 2011 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
 featureName=Equinox p2 Discovery
 
 # "providerName" property - name of the company that provides the feature
-providerName=Eclipse Equinox Project
+providerName=Eclipse.org - Equinox
 
 # "updateSiteName" property - label for the update site
 updateSiteName=The Equinox Project Repository
@@ -37,135 +37,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     Tasktop Technologies - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.xml b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.xml
index 3b4abb6..c23282f 100644
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.p2.discovery.feature"
       label="%featureName"
-      version="1.0.1.qualifier"
-      provider-name="%providerName">
+      version="1.0.100.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier"> 
 
    <description>
       %description
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/license.html b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/pom.xml b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/pom.xml
new file mode 100644
index 0000000..6e247e4
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
+    <groupId>org.eclipse</groupId>
+    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+  </parent>
+  <groupId>org.eclipse</groupId>
+  <artifactId>org.eclipse.equinox.p2.discovery.feature</artifactId>
+  <version>1.0.100.qualifier</version>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/build.properties
index 5278417..0e90d79 100644
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/build.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/feature.properties
index 3b5a98e..b9821a7 100644
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2009 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -36,109 +36,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     Sonatype Inc. - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/license.html
deleted file mode 100644
index c6af966..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.discovery.feature/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-   
-<h3>Applicable Licenses</h3>   
-   
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository ("Repository") in CVS
-   modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-   
-<ul>
-	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-	<li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>   
- 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-	<li>The top-level (root) directory</li>
-	<li>Plug-in and Fragment directories</li>
-	<li>Inside Plug-ins and Fragments packaged as JARs</li>
-	<li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-	<li>Feature directories</li>
-</ul>
-		
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
-	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-   
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.p2.extras.feature/.project b/eclipse/features/org.eclipse.equinox.p2.extras.feature/.project
new file mode 100644
index 0000000..9a5320b
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.extras.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.p2.extras.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.equinox.p2.extras.feature/build.properties b/eclipse/features/org.eclipse.equinox.p2.extras.feature/build.properties
new file mode 100644
index 0000000..70e0467
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.extras.feature/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+#     IBM Corporation - Ongoing development
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties,\
+               eclipse_update_120.jpg
+src.includes = license.html,epl-v10.html
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg b/eclipse/features/org.eclipse.equinox.p2.extras.feature/eclipse_update_120.jpg
similarity index 100%
copy from eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg
copy to eclipse/features/org.eclipse.equinox.p2.extras.feature/eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.equinox.p2.extras.feature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.extras.feature/feature.properties
new file mode 100644
index 0000000..5b28e4c
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.extras.feature/feature.properties
@@ -0,0 +1,35 @@
+###############################################################################
+# Copyright (c) 2010, 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Add-on Function for p2
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Equinox
+
+description=Provides some backward compatibility support (e.g. drop-ins, legacy update site) and the metadata generation facility.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2010 EclipseSource Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    EclipseSource - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.extras.feature/feature.xml b/eclipse/features/org.eclipse.equinox.p2.extras.feature/feature.xml
new file mode 100644
index 0000000..959854c
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.extras.feature/feature.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.equinox.p2.extras.feature"
+      label="%featureName"
+      version="1.0.0.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.equinox.p2.core.feature"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.director.app"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.directorywatcher"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.reconciler.dropins"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.publisher"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.extensionlocation"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.repository.tools"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.publisher.eclipse"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.equinox.p2.extras.feature/pom.xml b/eclipse/features/org.eclipse.equinox.p2.extras.feature/pom.xml
new file mode 100644
index 0000000..02e40cb
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.extras.feature/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
+    <groupId>org.eclipse</groupId>
+    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+  </parent>
+  <groupId>org.eclipse</groupId>
+  <artifactId>org.eclipse.equinox.p2.extras.feature</artifactId>
+  <version>1.0.0.qualifier</version>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/eclipse/features/org.eclipse.equinox.p2.extras.feature/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.p2.extras.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..8586881
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.extras.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.extras.feature/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.extras.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..5cdc2dd
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.extras.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,38 @@
+###############################################################################
+# Copyright (c) 2008, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox p2 RCP Management Facilities
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Equinox
+
+# "updateSiteName" property - label for the update site
+
+# "description" property - description of the feature
+description=Source code for the Equinox provisioning platform
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2008, 2011 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.rcp.feature/.project b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/.project
new file mode 100644
index 0000000..e46a3be
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.p2.rcp.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.equinox.p2.rcp.feature/build.properties b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/build.properties
new file mode 100644
index 0000000..b6cf6c3
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+#     IBM Corporation - Ongoing development
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties,\
+               eclipse_update_120.jpg               
+src.includes = license.html,epl-v10.html
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/eclipse_update_120.jpg
similarity index 100%
copy from eclipse/features/org.eclipse.cvs/eclipse_update_120.jpg
copy to eclipse/features/org.eclipse.equinox.p2.rcp.feature/eclipse_update_120.jpg
diff --git a/eclipse/features/org.eclipse.equinox.p2.rcp.feature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/feature.properties
new file mode 100644
index 0000000..bffd487
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/feature.properties
@@ -0,0 +1,35 @@
+###############################################################################
+# Copyright (c) 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox p2 RCP Management Facilities
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Equinox
+
+description=Provides SWT based UI component for p2.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011 EclipseSource Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    EclipseSource - initial API and implementation\n
+################ end of copyright property ####################################
diff --git a/eclipse/features/org.eclipse.equinox.p2.rcp.feature/feature.xml b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/feature.xml
new file mode 100644
index 0000000..c25b66a
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/feature.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.equinox.p2.rcp.feature"
+      label="%featureName"
+      version="1.0.0.qualifier"
+      provider-name="%providerName"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.equinox.p2.core.feature"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.ui.sdk.scheduler"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.updatechecker"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.security.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.ui.sdk"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.equinox.p2.rcp.feature/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..8586881
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.rcp.feature/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..51f1c65
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.rcp.feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,38 @@
+###############################################################################
+# Copyright (c) 2008, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox p2 RCP Management Facilities Source
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org - Equinox
+
+# "updateSiteName" property - label for the update site
+
+# "description" property - description of the feature
+description=Source code for the Equinox provisioning platform
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2008, 2011 IBM Corporation and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    IBM Corporation - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.sdk/build.properties b/eclipse/features/org.eclipse.equinox.p2.sdk/build.properties
index be846fa..fb595f4 100644
--- a/eclipse/features/org.eclipse.equinox.p2.sdk/build.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.sdk/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009, 2010 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,7 +9,7 @@
 #     EclipseSource - initial API and implementation
 #		IBM - Ongoing changes
 ###############################################################################
-bin.includes = feature.xml,license.html,epl-v10.html,license.html,feature.properties
+bin.includes = feature.xml,feature.properties
 
 generate.plugin at org.apache.commons.codec.source=org.apache.commons.codec
 generate.plugin at org.apache.commons.httpclient.source=org.apache.commons.httpclient
@@ -35,7 +35,6 @@ generate.plugin at org.eclipse.equinox.p2.extensionlocation.source=org.eclipse.equi
 generate.plugin at org.eclipse.equinox.p2.garbagecollector.source=org.eclipse.equinox.p2.garbagecollector
 generate.plugin at org.eclipse.equinox.p2.installer.source=org.eclipse.equinox.p2.installer
 generate.plugin at org.eclipse.equinox.p2.jarprocessor.source=org.eclipse.equinox.p2.jarprocessor
-generate.plugin at org.eclipse.equinox.p2.metadata.generator.source=org.eclipse.equinox.p2.metadata.generator
 generate.plugin at org.eclipse.equinox.p2.metadata.repository.source=org.eclipse.equinox.p2.metadata.repository
 generate.plugin at org.eclipse.equinox.p2.metadata.source=org.eclipse.equinox.p2.metadata
 generate.plugin at org.eclipse.equinox.p2.operations.source=org.eclipse.equinox.p2.operations
@@ -48,6 +47,7 @@ generate.plugin at org.eclipse.equinox.p2.touchpoint.eclipse.source=org.eclipse.equ
 generate.plugin at org.eclipse.equinox.p2.touchpoint.natives.source=org.eclipse.equinox.p2.touchpoint.natives
 generate.plugin at org.eclipse.equinox.p2.ui.admin.rcp.source=org.eclipse.equinox.p2.ui.admin.rcp
 generate.plugin at org.eclipse.equinox.p2.ui.admin.source=org.eclipse.equinox.p2.ui.admin
+generate.plugin at org.eclipse.equinox.p2.ui.importexport.source=org.eclipse.equinox.p2.ui.importexport
 generate.plugin at org.eclipse.equinox.p2.ui.sdk.scheduler.source=org.eclipse.equinox.p2.ui.sdk.scheduler
 generate.plugin at org.eclipse.equinox.p2.ui.sdk.source=org.eclipse.equinox.p2.ui.sdk
 generate.plugin at org.eclipse.equinox.p2.ui.source=org.eclipse.equinox.p2.ui
@@ -55,3 +55,4 @@ generate.plugin at org.eclipse.equinox.p2.updatechecker.source=org.eclipse.equinox.
 generate.plugin at org.eclipse.equinox.p2.updatesite.source=org.eclipse.equinox.p2.updatesite
 generate.plugin at org.eclipse.equinox.simpleconfigurator.manipulator.source=org.eclipse.equinox.simpleconfigurator.manipulator
 generate.plugin at org.eclipse.equinox.simpleconfigurator.source=org.eclipse.equinox.simpleconfigurator
+generate.plugin at org.eclipse.equinox.p2.publisher.eclipse.source=org.eclipse.equinox.p2.publisher.eclipse
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.sdk/epl-v10.html b/eclipse/features/org.eclipse.equinox.p2.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.sdk/feature.properties b/eclipse/features/org.eclipse.equinox.p2.sdk/feature.properties
old mode 100644
new mode 100755
index 0753b2f..6ad4d09
--- a/eclipse/features/org.eclipse.equinox.p2.sdk/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.sdk/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009, 2010 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
 featureName=Equinox p2 SDK
 
 # "providerName" property - name of the company that provides the feature
-providerName=Eclipse Equinox Project
+providerName=Eclipse.org - Equinox
 
 # "updateSiteName" property - label for the update site
 updateSiteName=The Equinox Project Repository
@@ -40,135 +40,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 Contributors:\n\
     EclipseSource - initial API and implementation\n
     IBM - ongoing development\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.sdk/feature.xml b/eclipse/features/org.eclipse.equinox.p2.sdk/feature.xml
index c5b9753..9f734fb 100644
--- a/eclipse/features/org.eclipse.equinox.p2.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.p2.sdk/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.p2.sdk"
       label="%featureName"
-      version="3.6.2.qualifier"
-      provider-name="%providerName">
+      version="3.7.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
@@ -225,20 +227,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.equinox.p2.metadata.generator"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.metadata.generator.source"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.equinox.p2.metadata.repository"
          download-size="0"
          install-size="0"
@@ -370,7 +358,21 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-
+         
+   <plugin
+         id="org.eclipse.equinox.p2.ui.importexport"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+         
+    <plugin
+         id="org.eclipse.equinox.p2.ui.importexport.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+         
    <plugin
          id="org.eclipse.equinox.p2.ui"
          download-size="0"
@@ -654,4 +656,25 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.equinox.p2.transport.ecf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.p2.publisher.eclipse"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.equinox.p2.publisher.eclipse.source"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+         
 </feature>
diff --git a/eclipse/features/org.eclipse.equinox.p2.sdk/license.html b/eclipse/features/org.eclipse.equinox.p2.sdk/license.html
deleted file mode 100644
index 7ed55df..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.sdk/license.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.p2.sdk/pom.xml b/eclipse/features/org.eclipse.equinox.p2.sdk/pom.xml
new file mode 100644
index 0000000..d53b10f
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.p2.sdk/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
+    <groupId>org.eclipse</groupId>
+    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+  </parent>
+  <groupId>org.eclipse</groupId>
+  <artifactId>org.eclipse.equinox.p2.sdk</artifactId>
+  <version>1.0.0.qualifier</version>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/build.properties b/eclipse/features/org.eclipse.equinox.p2.user.ui/build.properties
index 9e53b4e..33ddf03 100644
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/build.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.user.ui/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,8 +9,5 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 bin.includes = feature.xml,\
-               license.html,\
-               epl-v10.html,\
                feature.properties,\
-               eclipse_update_120.jpg
-src.includes = license.html,epl-v10.html
+               eclipse_update_120.jpg
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/epl-v10.html b/eclipse/features/org.eclipse.equinox.p2.user.ui/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.properties b/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.properties
index 2e92995..6f8067d 100644
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.properties
@@ -1,14 +1,24 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 # "featureName" property - name of the feature
-featureName=Equinox p2 Provisioning 
+featureName=Equinox p2 Provisioning for IDEs.
 
 # "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
+providerName=Eclipse.org - Equinox
 
 # "updateSiteName" property - label for the update site
 updateSiteName=The Eclipse Project Updates
 
 # "description" property - description of the feature
-description=Eclipse Provisioning Platform
+description=Eclipse p2 Provisioning Platform for use in IDE related scenarios
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
@@ -20,135 +30,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml b/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml
index a65d54e..c2507b9 100644
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.p2.user.ui/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.p2.user.ui"
       label="%featureName"
-      version="2.0.1.qualifier"
+      version="2.1.1.qualifier"
       provider-name="%providerName"
-      image="eclipse_update_120.jpg">
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
@@ -18,153 +20,18 @@
       %license
    </license>
 
-   <plugin
-         id="org.eclipse.equinox.p2.director"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.engine"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.jarprocessor"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.metadata"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.metadata.repository"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.artifact.repository"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.touchpoint.eclipse"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.touchpoint.natives"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.frameworkadmin"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.frameworkadmin.equinox"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.console"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.simpleconfigurator.manipulator"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.ui.sdk"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.ui.sdk.scheduler"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.updatechecker"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.garbagecollector"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.directorywatcher"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.reconciler.dropins"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.metadata.generator"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
+   <includes
+         id="org.eclipse.equinox.p2.core.feature"
+         version="0.0.0"/>     
+ 
+   <includes
+         id="org.eclipse.equinox.p2.extras.feature"
+         version="0.0.0"/>
+         
+    <includes
+         id="org.eclipse.equinox.p2.rcp.feature"
+         version="0.0.0"/>
+  
    <plugin
          id="org.eclipse.equinox.p2.updatesite"
          download-size="0"
@@ -173,157 +40,7 @@
          unpack="false"/>
 
    <plugin
-         id="org.sat4j.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.sat4j.pb"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.security"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.security.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.extensionlocation"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.director.app"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.publisher"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.repository.tools"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.repository"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf.filetransfer"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf.identity"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf.provider.filetransfer"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf.provider.filetransfer.ssl"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf.provider.filetransfer.httpclient"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf.provider.filetransfer.httpclient.ssl"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ecf.ssl"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.commons.codec"
-         download-size="0"
-         install-size="0"
-         version="1.3.0.qualifier"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.commons.httpclient"
-         download-size="0"
-         install-size="0"
-         version="3.1.0.qualifier"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.commons.logging"
-         download-size="0"
-         install-size="0"
-         version="1.0.4.qualifier"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.operations"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.equinox.p2.ql"
+         id="org.eclipse.equinox.p2.ui.importexport"
          download-size="0"
          install-size="0"
          version="0.0.0"
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/license.html b/eclipse/features/org.eclipse.equinox.p2.user.ui/license.html
deleted file mode 100644
index 61d632d..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/license.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/build.properties
index 5278417..b5672da 100644
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/build.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,8 +9,10 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
 feature.xml,\
 feature.properties,\
-license.html
+eclipse_update_120.jpg
+
+generate.feature at org.eclipse.equinox.p2.extras.feature.source=org.eclipse.equinox.p2.extras.feature
+generate.feature at org.eclipse.equinox.p2.rcp.feature.source=org.eclipse.equinox.p2.rcp.feature
+generate.feature at org.eclipse.equinox.p2.core.feature.source=org.eclipse.equinox.p2.core.feature
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/feature.properties
index cd4e3c5..f7c0cc4 100644
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2009 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -21,7 +21,6 @@ featureName=Eclipse p2 Provisioning Developer Resources
 providerName=Eclipse.org
 
 # "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
 
 # "description" property - description of the feature
 description=Source code for the Equinox provisioning platform
@@ -36,135 +35,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/license.html
deleted file mode 100644
index 61d632d..0000000
--- a/eclipse/features/org.eclipse.equinox.p2.user.ui/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.sdk/.project b/eclipse/features/org.eclipse.equinox.sdk/.project
old mode 100644
new mode 100755
diff --git a/eclipse/features/org.eclipse.equinox.sdk/build.properties b/eclipse/features/org.eclipse.equinox.sdk/build.properties
old mode 100644
new mode 100755
index 67218f2..c9efdba
--- a/eclipse/features/org.eclipse.equinox.sdk/build.properties
+++ b/eclipse/features/org.eclipse.equinox.sdk/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,4 +8,4 @@
 # Contributors:
 #     EclipseSource - initial API and implementation
 ###############################################################################
-bin.includes = feature.xml,license.html,epl-v10.html,license.html,feature.properties
\ No newline at end of file
+bin.includes = feature.xml,feature.properties
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.sdk/epl-v10.html b/eclipse/features/org.eclipse.equinox.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.sdk/feature.properties b/eclipse/features/org.eclipse.equinox.sdk/feature.properties
index e07bdb6..f76fd7c 100644
--- a/eclipse/features/org.eclipse.equinox.sdk/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.sdk/feature.properties
@@ -21,9 +21,6 @@ featureName=Equinox Target Components
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse Equinox Project
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Equinox Project Repository
-
 # "description" property - description of the feature
 description=All of the bundles and source that are produced by the Equinox project.  \
 This includes basic OSGi framework support, all implemented compendium services, \
@@ -34,7 +31,7 @@ deployed with end-user systems.
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2009, 2011 EclipseSource and others.\n\
+Copyright (c) 2009, 2010 EclipseSource and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -42,135 +39,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     EclipseSource - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.sdk/feature.xml b/eclipse/features/org.eclipse.equinox.sdk/feature.xml
old mode 100644
new mode 100755
index e172d16..6e20fa3
--- a/eclipse/features/org.eclipse.equinox.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.sdk/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.sdk"
       label="%featureName"
-      version="3.6.2.qualifier"
-      provider-name="%providerName">
-
+      version="3.7.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+      
    <description>
       %description
    </description>
@@ -39,6 +41,27 @@
 
    <includes
          id="org.eclipse.equinox.weaving.sdk"
+         version="0.0.0"/>  
+         
+   <includes
+         id="org.eclipse.equinox.core.feature"
          version="0.0.0"/>
+   
+   <includes
+         id="org.eclipse.equinox.p2.core.feature"
+         version="0.0.0"/>
+         
+   <includes
+         id="org.eclipse.equinox.p2.extras.feature"
+         version="0.0.0"/>
+         
+   <includes
+         id="org.eclipse.equinox.p2.rcp.feature"
+         version="0.0.0"/>
+         
+   <includes
+         id="org.eclipse.core.runtime.feature"
+         version="0.0.0"/>  
+      
 
 </feature>
diff --git a/eclipse/features/org.eclipse.equinox.sdk/license.html b/eclipse/features/org.eclipse.equinox.sdk/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.sdk/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.server.core/build.properties b/eclipse/features/org.eclipse.equinox.server.core/build.properties
index 2cbd854..8586881 100644
--- a/eclipse/features/org.eclipse.equinox.server.core/build.properties
+++ b/eclipse/features/org.eclipse.equinox.server.core/build.properties
@@ -1,3 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = feature.xml,\
-               feature.properties,\
-               license.html
+               feature.properties
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.server.core/feature.properties b/eclipse/features/org.eclipse.equinox.server.core/feature.properties
index 16cfd21..5f364ba 100644
--- a/eclipse/features/org.eclipse.equinox.server.core/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.server.core/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2010 IBM, Composent, Inc. and others.
+# Copyright (c) 2010, 2011 IBM, Composent, Inc. and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,135 +30,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.server.core/feature.xml b/eclipse/features/org.eclipse.equinox.server.core/feature.xml
index 87e158d..13c09ef 100644
--- a/eclipse/features/org.eclipse.equinox.server.core/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.server.core/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.server.core"
       label="%featureName"
-      version="1.0.1.qualifier"
-      provider-name="%providerName">
-
+      version="1.1.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+       
    <copyright>
       %copyright
    </copyright>
diff --git a/eclipse/features/org.eclipse.equinox.server.core/license.html b/eclipse/features/org.eclipse.equinox.server.core/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.server.core/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.server.jetty/build.properties b/eclipse/features/org.eclipse.equinox.server.jetty/build.properties
index 2cbd854..020c38b 100644
--- a/eclipse/features/org.eclipse.equinox.server.jetty/build.properties
+++ b/eclipse/features/org.eclipse.equinox.server.jetty/build.properties
@@ -1,3 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = feature.xml,\
-               feature.properties,\
-               license.html
+               feature.properties
diff --git a/eclipse/features/org.eclipse.equinox.server.jetty/feature.properties b/eclipse/features/org.eclipse.equinox.server.jetty/feature.properties
index 4904648..87be371 100644
--- a/eclipse/features/org.eclipse.equinox.server.jetty/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.server.jetty/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2010 IBM, Composent, Inc.  and others.
+# Copyright (c) 2010, 2011 IBM, Composent, Inc.  and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,135 +30,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.server.jetty/feature.xml b/eclipse/features/org.eclipse.equinox.server.jetty/feature.xml
index 60b2409..0191e1c 100644
--- a/eclipse/features/org.eclipse.equinox.server.jetty/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.server.jetty/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.server.jetty"
       label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName">
+      version="1.0.100.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <copyright>
       %copyright
@@ -12,6 +14,7 @@
    <license url="%licenseURL">
       %license
    </license>
+
    <plugin
          id="javax.servlet"
          download-size="0"
diff --git a/eclipse/features/org.eclipse.equinox.server.jetty/license.html b/eclipse/features/org.eclipse.equinox.server.jetty/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.server.jetty/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.server.p2/build.properties b/eclipse/features/org.eclipse.equinox.server.p2/build.properties
index d34bea2..3b28786 100644
--- a/eclipse/features/org.eclipse.equinox.server.p2/build.properties
+++ b/eclipse/features/org.eclipse.equinox.server.p2/build.properties
@@ -1,12 +1,16 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = feature.xml,\
-               about.html,\
                build.properties,\
-               epl-v10.html,\
+               feature.properties
+src.includes = build.properties,\
                feature.properties,\
-               license.html
-src.includes = about.html,\
-               build.properties,\
-               epl-v10.html,\
-               feature.properties,\
-               feature.xml,\
-               license.html
+               feature.xml
diff --git a/eclipse/features/org.eclipse.equinox.server.p2/feature.properties b/eclipse/features/org.eclipse.equinox.server.p2/feature.properties
index 4271e98..fc734b0 100644
--- a/eclipse/features/org.eclipse.equinox.server.p2/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.server.p2/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2010 IBM, Composent, Inc. and others.
+# Copyright (c) 2010, 2011 IBM, Composent, Inc. and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,135 +30,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.server.p2/feature.xml b/eclipse/features/org.eclipse.equinox.server.p2/feature.xml
index 5d9fbd4..bcfa619 100644
--- a/eclipse/features/org.eclipse.equinox.server.p2/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.server.p2/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.server.p2"
       label="%featureName"
-      version="1.0.1.qualifier"
-      provider-name="%providerName">
+      version="1.1.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <copyright url="%copyrightURL">
       %copyright
@@ -240,4 +242,11 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.equinox.p2.transport.ecf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
diff --git a/eclipse/features/org.eclipse.equinox.server.p2/license.html b/eclipse/features/org.eclipse.equinox.server.p2/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.server.p2/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.server.servletbridge/build.properties b/eclipse/features/org.eclipse.equinox.server.servletbridge/build.properties
index 0bb82c9..170d1ec 100644
--- a/eclipse/features/org.eclipse.equinox.server.servletbridge/build.properties
+++ b/eclipse/features/org.eclipse.equinox.server.servletbridge/build.properties
@@ -1,5 +1,14 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 root=rootfiles
 bin.includes = feature.xml,\
                rootfiles/,\
-               license.html,\
                feature.properties
diff --git a/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.properties b/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.properties
index dee3d74..0a3dc2b 100644
--- a/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2010 IBM, Composent, Inc. and others.
+# Copyright (c) 2010, 2011 IBM, Composent, Inc. and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,135 +30,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.xml b/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.xml
index 82874e4..c37476b 100644
--- a/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.server.servletbridge/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.server.servletbridge"
       label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName">
+      version="1.0.100.qualifier"
+      provider-name="%providerName" 
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <copyright>
       %copyright
diff --git a/eclipse/features/org.eclipse.equinox.server.servletbridge/license.html b/eclipse/features/org.eclipse.equinox.server.servletbridge/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.server.servletbridge/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.server.simple/build.properties b/eclipse/features/org.eclipse.equinox.server.simple/build.properties
index 2cbd854..020c38b 100644
--- a/eclipse/features/org.eclipse.equinox.server.simple/build.properties
+++ b/eclipse/features/org.eclipse.equinox.server.simple/build.properties
@@ -1,3 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = feature.xml,\
-               feature.properties,\
-               license.html
+               feature.properties
diff --git a/eclipse/features/org.eclipse.equinox.server.simple/feature.properties b/eclipse/features/org.eclipse.equinox.server.simple/feature.properties
index 3f8befb..4283002 100644
--- a/eclipse/features/org.eclipse.equinox.server.simple/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.server.simple/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2010 IBM, Composent, Inc. and others.
+# Copyright (c) 2010, 2011 IBM, Composent, Inc. and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,135 +30,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.server.simple/feature.xml b/eclipse/features/org.eclipse.equinox.server.simple/feature.xml
index 25d59c0..f8de682 100644
--- a/eclipse/features/org.eclipse.equinox.server.simple/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.server.simple/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.server.simple"
       label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName">
-
+      version="1.0.100.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+      
    <copyright>
       %copyright
    </copyright>
diff --git a/eclipse/features/org.eclipse.equinox.server.simple/license.html b/eclipse/features/org.eclipse.equinox.server.simple/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.server.simple/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.serverside.sdk/build.properties b/eclipse/features/org.eclipse.equinox.serverside.sdk/build.properties
index 36874c0..d31807c 100644
--- a/eclipse/features/org.eclipse.equinox.serverside.sdk/build.properties
+++ b/eclipse/features/org.eclipse.equinox.serverside.sdk/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
 # Contributors:
 #     EclipseSource - initial API and implementation
 ###############################################################################
-bin.includes = feature.xml,license.html,epl-v10.html,license.html,feature.properties
+bin.includes = feature.xml,feature.properties
 
 generate.plugin at javax.servlet.jsp.source=javax.servlet.jsp
 generate.plugin at javax.servlet.source=javax.servlet
diff --git a/eclipse/features/org.eclipse.equinox.serverside.sdk/epl-v10.html b/eclipse/features/org.eclipse.equinox.serverside.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.serverside.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.properties b/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.properties
old mode 100644
new mode 100755
index 38d7b1d..d465011
--- a/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 EclipseSource and others.
+# Copyright (c) 2009, 2011 EclipseSource and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -41,135 +41,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     EclipseSource - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.xml b/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.xml
index 2292b9a..469fd16 100644
--- a/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.serverside.sdk/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.equinox.serverside.sdk"
       label="%featureName"
-      version="3.6.1.qualifier"
-      provider-name="%providerName">
+      version="3.7.0.qualifier"
+      provider-name="%providerName" 
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
@@ -83,7 +85,7 @@
          id="org.eclipse.equinox.http.jetty"
          download-size="0"
          install-size="0"
-         version="2.0.0.qualifier"
+         version="2.0.100.qualifier"
          unpack="false"/>
 
    <plugin
diff --git a/eclipse/features/org.eclipse.equinox.serverside.sdk/license.html b/eclipse/features/org.eclipse.equinox.serverside.sdk/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.serverside.sdk/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/.project b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/.project
new file mode 100644
index 0000000..ec88986
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.starterkit.product.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/build.properties b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/build.properties
new file mode 100644
index 0000000..1b27871
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = feature.xml,\
+               feature.properties               
+root.win32.win32.x86=file:executables/win32.win32.x86/eclipsec.exe
+root.win32.win32.x86_64=file:executables/win32.win32.x86_64/eclipsec.exe
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/feature.properties b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/feature.properties
new file mode 100644
index 0000000..99f5c06
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/feature.properties
@@ -0,0 +1,33 @@
+###############################################################################
+# Copyright (c) 2010, 2011 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Equinox OSGi Starter Kit Configuration
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Equinox Project
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2010 EclipseSource and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    EclipseSource - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/feature.xml b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/feature.xml
new file mode 100644
index 0000000..b82ce8f
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/feature.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.equinox.starterkit.product.feature"
+      label="%featureName"
+      version="1.0.0.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+      
+   <description url="http://www.example.com/description">
+      [Enter Feature Description here.]
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      [Enter Copyright Description here.]
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      [Enter License Description here.]
+   </license>
+
+   <includes
+         id="org.eclipse.equinox.p2.core.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.equinox.core.feature"
+         version="0.0.0"/>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/product/EclipseRTOSGiStarterKit.product b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/product/EclipseRTOSGiStarterKit.product
new file mode 100644
index 0000000..90d2add
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/product/EclipseRTOSGiStarterKit.product
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="EclipseRT OSGi Starter Kit" uid="org.eclipse.rt.osgistarterkit.product" version="1.0.0. at qualifier@" useFeatures="true" includeLaunchers="true">
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-console -nosplash -consolelog -noexit</programArgs>
+      <vmArgs>-Declipse.ignoreApp=true</vmArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+   </launcherArgs>
+
+   <windowImages/>
+
+   <launcher name="rt">
+      <macosx icon="/org.eclipse.equinox.starterkit.product.feature/rt.icns"/>
+      <solaris/>
+      <win useIco="true">
+         <ico path="/org.eclipse.equinox.starterkit.product.feature/rt.ico"/>
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+   </vm>
+
+   <license>
+        <url>http://eclipse.org/legal/epl/notice.php</url>
+        <text>
+   Eclipse Foundation Software User Agreement
+April 14, 2010
+
+Usage Of Content
+
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+BELOW, THEN YOU MAY NOT USE THE CONTENT.
+
+Applicable Licenses
+
+Unless otherwise indicated, all Content made available by the
+Eclipse Foundation is provided to you under the terms and conditions of
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.
+For purposes of the EPL, "Program" will mean the Content.
+
+Content includes, but is not limited to, source code, object code,
+documentation and other files maintained in the Eclipse Foundation source code
+repository ("Repository") in software modules ("Modules") and made available
+as downloadable archives ("Downloads").
+
+       - Content may be structured and packaged into modules to facilitate delivering,
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),
+         plug-in fragments ("Fragments"), and features ("Features").
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)
+         in a directory named "plugins".
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.
+         Each Feature may be packaged as a sub-directory in a directory named "features".
+         Within a Feature, files named "feature.xml" may contain a list of the names and version
+         numbers of the Plug-ins and/or Fragments associated with that Feature.
+       - Features may also include other Features ("Included Features"). Within a Feature, files
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.
+
+The terms and conditions governing Plug-ins and Fragments should be
+contained in files named "about.html" ("Abouts"). The terms and
+conditions governing Features and Included Features should be contained
+in files named "license.html" ("Feature Licenses"). Abouts and Feature
+Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:
+
+       - The top-level (root) directory
+       - Plug-in and Fragment directories
+       - Inside Plug-ins and Fragments packaged as JARs
+       - Sub-directories of the directory named "src" of certain Plug-ins
+       - Feature directories
+
+Note: if a Feature made available by the Eclipse Foundation is installed using the
+Provisioning Technology (as defined below), you must agree to a license ("Feature 
+Update License") during the installation process. If the Feature contains
+Included Features, the Feature Update License should either provide you
+with the terms and conditions governing the Included Features or inform
+you where you can locate them. Feature Update Licenses may be found in
+the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the
+terms and conditions (or references to such terms and conditions) that
+govern your use of the associated Content in that directory.
+
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
+
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)
+
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License
+is provided, please contact the Eclipse Foundation to determine what terms and conditions
+govern that particular Content.
+
+Use of Provisioning Technology
+
+The Eclipse Foundation makes available provisioning software, examples of which include,
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for
+the purpose of allowing users to install software, documentation, information and/or
+other materials (collectively "Installable Software"). This capability is provided with
+the intent of allowing such users to install, extend and update Eclipse-based products.
+Information about packaging Installable Software is available at
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").
+
+You may use Provisioning Technology to allow other parties to install Installable Software.
+You shall be responsible for enabling the applicable license agreements relating to the
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+in accordance with the Specification. By using Provisioning Technology in such a manner and
+making it available in accordance with the Specification, you further acknowledge your
+agreement to, and the acquisition of all necessary rights to permit the following:
+
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,
+          extending or updating the functionality of an Eclipse-based product.
+       2. During the Provisioning Process, the Provisioning Technology may cause third party
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that
+          govern the use of the Installable Software ("Installable Software Agreement") and such
+          Installable Software Agreement shall be accessed from the Target Machine in accordance
+          with the Specification. Such Installable Software Agreement must inform the user of the
+          terms and conditions that govern the Installable Software and must solicit acceptance by
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such
+          indication of agreement by the user, the provisioning Technology will complete installation
+          of the Installable Software.
+
+Cryptography
+
+Content may contain encryption software. The country in which you are
+currently may have restrictions on the import, possession, and use,
+and/or re-export to another country, of encryption software. BEFORE
+using any encryption software, please check the country's laws,
+regulations and policies concerning the import, possession, or use, and
+re-export of encryption software, to see if this is permitted.
+
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+         </text>
+   </license>
+
+   <plugins>
+   </plugins>
+
+   <features>
+      <feature id="org.eclipse.equinox.starterkit.product.feature"/>
+      <feature id="org.eclipse.osgi.configuration"/>
+   </features>
+
+   <configurations>
+      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+      <plugin id="org.eclipse.equinox.frameworkadmin.equinox" autoStart="true" startLevel="3" />
+      <plugin id="org.eclipse.equinox.p2.console" autoStart="true" startLevel="3" />
+      <plugin id="org.eclipse.equinox.simpleconfigurator.manipulator" autoStart="true" startLevel="3" />
+      <property name="eclipse.ignoreApp" value="true" />
+      <property name="osgi.noShutdown" value="true" />
+   </configurations>
+
+</product>
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/product/p2.inf b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/product/p2.inf
new file mode 100644
index 0000000..8818fac
--- /dev/null
+++ b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/product/p2.inf
@@ -0,0 +1,17 @@
+instructions.configure=
+requires.1.namespace=org.eclipse.equinox.p2.iu
+requires.1.name=toolingorg.eclipse.rt.osgistarterkit.macosx
+requires.1.filter=(osgi.os=macosx)
+requires.1.range=[1.0.0,1.0.0]
+requires.1.greedy=true
+
+units.1.id=toolingorg.eclipse.rt.osgistarterkit.macosx
+units.1.version=1.0.0
+units.1.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.1.provides.1.name=toolingorg.eclipse.rt.osgistarterkit.macosx
+units.1.provides.1.version=1.0.0
+units.1.filter=(osgi.os=macosx)
+units.1.touchpoint.id=org.eclipse.equinox.p2.osgi
+units.1.touchpoint.version=1.0.0
+units.1.instructions.configure=ln(linkTarget:rt.app/Contents/MacOS/rt,targetDir:${installFolder},linkName:rt);
+
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/rt.icns b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/rt.icns
new file mode 100644
index 0000000..f7c492d
Binary files /dev/null and b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/rt.icns differ
diff --git a/eclipse/features/org.eclipse.equinox.starterkit.product.feature/rt.ico b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/rt.ico
new file mode 100644
index 0000000..8ac4937
Binary files /dev/null and b/eclipse/features/org.eclipse.equinox.starterkit.product.feature/rt.ico differ
diff --git a/eclipse/features/org.eclipse.equinox.weaving.sdk/build.properties b/eclipse/features/org.eclipse.equinox.weaving.sdk/build.properties
index 11b7580..f1d0c0e 100644
--- a/eclipse/features/org.eclipse.equinox.weaving.sdk/build.properties
+++ b/eclipse/features/org.eclipse.equinox.weaving.sdk/build.properties
@@ -1,7 +1,15 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = feature.xml,\
-               epl-v10.html,\
-               feature.properties,\
-               license.html
+               feature.properties
 
 generate.plugin at org.eclipse.equinox.weaving.aspectj.source=org.eclipse.equinox.weaving.aspectj
 generate.plugin at org.eclipse.equinox.weaving.caching.source=org.eclipse.equinox.weaving.caching
diff --git a/eclipse/features/org.eclipse.equinox.weaving.sdk/epl-v10.html b/eclipse/features/org.eclipse.equinox.weaving.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.equinox.weaving.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.properties b/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.properties
old mode 100644
new mode 100755
index f93b673..9d6a11a
--- a/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.properties
+++ b/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
+# Copyright (c) 2009, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -37,134 +37,3 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 Contributors:\n\
     IBM - initial API and implementation\n
 ################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.xml b/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.xml
index 5011347..373e2e9 100644
--- a/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.equinox.weaving.sdk/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.equinox.weaving.sdk"
       label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName">
-
+      version="1.0.100.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+      
    <description>
       %description
    </description>
diff --git a/eclipse/features/org.eclipse.equinox.weaving.sdk/license.html b/eclipse/features/org.eclipse.equinox.weaving.sdk/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.equinox.weaving.sdk/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.help/build.properties b/eclipse/features/org.eclipse.help/build.properties
index 1cf756c..67ee8a2 100644
--- a/eclipse/features/org.eclipse.help/build.properties
+++ b/eclipse/features/org.eclipse.help/build.properties
@@ -10,7 +10,5 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 bin.includes = feature.xml,\
-               license.html,\
-               epl-v10.html,\
                eclipse_update_120.jpg,\
                feature.properties
diff --git a/eclipse/features/org.eclipse.help/feature.properties b/eclipse/features/org.eclipse.help/feature.properties
index a2fbb4e..9407eaa 100644
--- a/eclipse/features/org.eclipse.help/feature.properties
+++ b/eclipse/features/org.eclipse.help/feature.properties
@@ -20,9 +20,6 @@ featureName=Eclipse Help System
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
 description=Eclipse help system.
 
@@ -36,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.help/feature.xml b/eclipse/features/org.eclipse.help/feature.xml
index ab10824..4318c86 100644
--- a/eclipse/features/org.eclipse.help/feature.xml
+++ b/eclipse/features/org.eclipse.help/feature.xml
@@ -2,10 +2,12 @@
 <feature
       id="org.eclipse.help"
       label="%featureName"
-      version="1.2.1.qualifier"
+      version="1.3.0.qualifier"
       provider-name="%providerName"
-      plugin="org.eclipse.help.base">
-
+      plugin="org.eclipse.help.base"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">    
+      
    <description>
       %description
    </description>
@@ -18,6 +20,7 @@
       %license
    </license>
 
+   
    <plugin
          id="javax.servlet"
          download-size="0"
@@ -31,7 +34,7 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-
+  
    <plugin
          id="org.apache.commons.el"
          download-size="0"
@@ -66,12 +69,19 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
+         
+    <plugin
+         id="org.apache.lucene.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
 
    <plugin
          id="org.eclipse.equinox.http.jetty"
          download-size="0"
          install-size="0"
-         version="2.0.0.qualifier"
+         version="2.0.100.qualifier"
          unpack="false"/>
 
    <plugin
@@ -122,19 +132,19 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-
+   
    <plugin
          id="org.mortbay.jetty.server"
          download-size="0"
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-
+   
    <plugin
          id="org.mortbay.jetty.util"
          download-size="0"
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-
+  
 </feature>
diff --git a/eclipse/features/org.eclipse.help/license.html b/eclipse/features/org.eclipse.help/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.help/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.help/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.help/sourceTemplateFeature/build.properties
deleted file mode 100644
index 2d6470e..0000000
--- a/eclipse/features/org.eclipse.help/sourceTemplateFeature/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-#  Copyright (c) 2008, 2009 IBM Corporation and others.
-#  All rights reserved. This program and the accompanying materials
-#  are made available under the terms of the Eclipse Public License v1.0
-#  which accompanies this distribution, and is available at
-#  http://www.eclipse.org/legal/epl-v10.html
-# 
-#  Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-license.html
-
diff --git a/eclipse/features/org.eclipse.help/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.help/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.help/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.help/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.help/sourceTemplateFeature/feature.properties
index ce81b21..b6bac2b 100644
--- a/eclipse/features/org.eclipse.help/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.help/sourceTemplateFeature/feature.properties
@@ -20,15 +20,12 @@ featureName=Eclipse Help Developer Resources
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
 description=Source code for the Eclipse help system.
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2000, 2009 IBM Corporation and others.\n\
+Copyright (c) 2000, 2010 IBM Corporation and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -36,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.help/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.help/sourceTemplateFeature/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.help/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.jdt/build.properties b/eclipse/features/org.eclipse.jdt/build.properties
index d4560d3..bb50a5e 100644
--- a/eclipse/features/org.eclipse.jdt/build.properties
+++ b/eclipse/features/org.eclipse.jdt/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,11 +9,9 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 bin.includes=\
-epl-v10.html,\
 feature.xml,\
 feature.properties,\
-eclipse_update_120.jpg,\
-license.html
+eclipse_update_120.jpg
 
 root=rootfiles
 
diff --git a/eclipse/features/org.eclipse.jdt/epl-v10.html b/eclipse/features/org.eclipse.jdt/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.jdt/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.jdt/feature.properties b/eclipse/features/org.eclipse.jdt/feature.properties
index c94fe82..5472d80 100644
--- a/eclipse/features/org.eclipse.jdt/feature.properties
+++ b/eclipse/features/org.eclipse.jdt/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -20,15 +20,12 @@ featureName=Eclipse Java Development Tools
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
-description=Eclipse Java development tools. (Binary runtime and user documentation.)
+description=Eclipse Java development tools (binary runtime and user documentation).
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2000, 2010 IBM Corporation and others.\n\
+Copyright (c) 2000, 2011 IBM Corporation and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -36,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.jdt/feature.xml b/eclipse/features/org.eclipse.jdt/feature.xml
index 3899b9f..8513aed 100644
--- a/eclipse/features/org.eclipse.jdt/feature.xml
+++ b/eclipse/features/org.eclipse.jdt/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.jdt"
       label="%featureName"
-      version="3.6.2.qualifier"
+      version="3.7.0.qualifier"
       provider-name="%providerName"
-      image="eclipse_update_120.jpg">
+      image="eclipse_update_120.jpg" 
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
@@ -24,7 +26,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.platform" version="3.6.2" match="greaterOrEqual"/>
+      <import feature="org.eclipse.platform" version="3.7.0" match="greaterOrEqual"/>
    </requires>
 
    <plugin
@@ -151,7 +153,7 @@
          id="org.junit"
          download-size="0"
          install-size="0"
-         version="4.8.1.qualifier"/>
+         version="4.8.2.qualifier"/>
 
    <plugin
          id="org.junit"
diff --git a/eclipse/features/org.eclipse.jdt/license.html b/eclipse/features/org.eclipse.jdt/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.jdt/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.jdt/rootfiles/notice.html b/eclipse/features/org.eclipse.jdt/rootfiles/notice.html
index c184ca3..dc5aefd 100644
--- a/eclipse/features/org.eclipse.jdt/rootfiles/notice.html
+++ b/eclipse/features/org.eclipse.jdt/rootfiles/notice.html
@@ -1,19 +1,18 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
+<!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>
+
+
 
-<body lang="EN-US">
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head><body lang="EN-US">
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
+<p>February 1, 2011</p>
 
 <h3>Usage Of Content</h3>
 
 <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
    CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
    OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
    NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
@@ -21,43 +20,73 @@
 
 <h3>Applicable Licenses</h3>
 
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
 
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
 
 <ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
       and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
 </ul>
 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
 including, but not limited to the following locations:</p>
 
 <ul>
        <li>The top-level (root) directory</li>
        <li>Plug-in and Fragment directories</li>
        <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
        <li>Feature directories</li>
 </ul>
 
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
 that directory.</p>
 
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
 OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
 
 <ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
        <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
        <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
        <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
@@ -65,43 +94,69 @@ OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
        <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
 </ul>
 
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
 
 
 <h3>Use of Provisioning Technology</h3>
 
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
 
 <ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
        product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
        accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
 </ol>
 
 <h3>Cryptography</h3>
 
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
 
 <p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
+</body></html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/feature.properties
index 67ad259..1dd505d 100644
--- a/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -20,15 +20,12 @@ featureName=Eclipse JDT Plug-in Developer Resources
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
 description=API documentation and source code zips for Eclipse Java development tools.
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2000, 2010 IBM Corporation and others.\n\
+Copyright (c) 2000, 2011 IBM Corporation and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -36,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.jdt/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.jdt/sourceTemplatePlugin/about.properties b/eclipse/features/org.eclipse.jdt/sourceTemplatePlugin/about.properties
index 02116f8..7c18b64 100644
--- a/eclipse/features/org.eclipse.jdt/sourceTemplatePlugin/about.properties
+++ b/eclipse/features/org.eclipse.jdt/sourceTemplatePlugin/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Java Development Tools SDK\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/jdt
 
diff --git a/eclipse/features/org.eclipse.license/.project b/eclipse/features/org.eclipse.license/.project
new file mode 100644
index 0000000..6bbbc54
--- /dev/null
+++ b/eclipse/features/org.eclipse.license/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.license</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.license/build.properties b/eclipse/features/org.eclipse.license/build.properties
new file mode 100644
index 0000000..2354b7b
--- /dev/null
+++ b/eclipse/features/org.eclipse.license/build.properties
@@ -0,0 +1,11 @@
+###############################################################################
+#  Copyright (c) 2000, 2009 IBM Corporation and others.
+#  All rights reserved. This program and the accompanying materials
+#  are made available under the terms of the Eclipse Public License v1.0
+#  which accompanies this distribution, and is available at
+#  http://www.eclipse.org/legal/epl-v10.html
+# 
+#  Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes=feature.xml,license.html,epl-v10.html,feature.properties,eclipse_update_120.jpg
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.license/epl-v10.html b/eclipse/features/org.eclipse.license/epl-v10.html
new file mode 100644
index 0000000..fd39122
--- /dev/null
+++ b/eclipse/features/org.eclipse.license/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body>
+
+</html>
diff --git a/eclipse/features/org.eclipse.license/feature.properties b/eclipse/features/org.eclipse.license/feature.properties
new file mode 100644
index 0000000..4d83864
--- /dev/null
+++ b/eclipse/features/org.eclipse.license/feature.properties
@@ -0,0 +1,159 @@
+###############################################################################
+# Copyright (c) 2000, 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+
+# "providerName" property - name of the company that provides the feature
+
+# "updateSiteName" property - label for the update site
+
+# "description" property - description of the feature
+
+# "copyright" property - text of the "Feature Update Copyright"
+
+################ end of copyright property ####################################
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/eclipse/features/org.eclipse.license/feature.xml b/eclipse/features/org.eclipse.license/feature.xml
new file mode 100644
index 0000000..f87780c
--- /dev/null
+++ b/eclipse/features/org.eclipse.license/feature.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.license"
+      version="1.0.0.qualifier"
+      image="eclipse_update_120.jpg">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.license/license.html b/eclipse/features/org.eclipse.license/license.html
new file mode 100644
index 0000000..f19c483
--- /dev/null
+++ b/eclipse/features/org.eclipse.license/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!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=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/build.properties b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/build.properties
index 9807ee5..1973017 100644
--- a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/build.properties
+++ b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/build.properties
@@ -9,6 +9,4 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 bin.includes = feature.xml,\
-               feature.properties,\
-               epl-v10.html,\
-               license.html
+               feature.properties
diff --git a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.properties b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.properties
index 24a7500..d0aee3b 100644
--- a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.properties
+++ b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.properties
@@ -35,134 +35,3 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
 ################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.xml b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.xml
index 0d651d5..f1623b4 100644
--- a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.xml
+++ b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/feature.xml
@@ -2,8 +2,10 @@
 <feature
       id="org.eclipse.pde.api.tools.ee.fragments"
       label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName">
+      version="1.0.100.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
diff --git a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/license.html b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/p2.inf b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/p2.inf
index 0fc9566..1d2c7b4 100644
--- a/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/p2.inf
+++ b/eclipse/features/org.eclipse.pde.api.tools.ee.fragments/p2.inf
@@ -7,7 +7,192 @@ units.1.properties.1.name=org.eclipse.equinox.p2.name
 units.1.properties.1.value=PDE/API Tools Environment Descriptions
 units.1.properties.2.name=org.eclipse.equinox.p2.type.category
 units.1.properties.2.value=true
+
 units.1.requires.1.namespace=org.eclipse.equinox.p2.iu
-units.1.requires.1.name=org.eclipse.pde.api.tools.ee.fragments
+units.1.requires.1.name=org.eclipse.pde.api.tools.ee.cdcfoundation10.group
 units.1.requires.1.range=[$version$,$version$]
-units.1.requires.1.greedy=true   
\ No newline at end of file
+units.1.requires.1.greedy=true
+units.1.requires.2.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.2.name=org.eclipse.pde.api.tools.ee.cdcfoundation11.group
+units.1.requires.2.range=[$version$,$version$]
+units.1.requires.2.greedy=true
+units.1.requires.3.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.3.name=org.eclipse.pde.api.tools.ee.cdcfoundation11.group
+units.1.requires.3.range=[$version$,$version$]
+units.1.requires.3.greedy=true
+units.1.requires.4.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.4.name=org.eclipse.pde.api.tools.ee.j2se13.group
+units.1.requires.4.range=[$version$,$version$]
+units.1.requires.4.greedy=true
+units.1.requires.5.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.5.name=org.eclipse.pde.api.tools.ee.j2se14.group
+units.1.requires.5.range=[$version$,$version$]
+units.1.requires.5.greedy=true
+units.1.requires.6.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.6.name=org.eclipse.pde.api.tools.ee.j2se15.group
+units.1.requires.6.range=[$version$,$version$]
+units.1.requires.6.greedy=true
+units.1.requires.7.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.7.name=org.eclipse.pde.api.tools.ee.javase16.group
+units.1.requires.7.range=[$version$,$version$]
+units.1.requires.7.greedy=true
+units.1.requires.8.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.8.name=org.eclipse.pde.api.tools.ee.jre11.group
+units.1.requires.8.range=[$version$,$version$]
+units.1.requires.8.greedy=true
+units.1.requires.9.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.9.name=org.eclipse.pde.api.tools.ee.osgiminimum10.group
+units.1.requires.9.range=[$version$,$version$]
+units.1.requires.9.greedy=true
+units.1.requires.10.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.10.name=org.eclipse.pde.api.tools.ee.osgiminimum11.group
+units.1.requires.10.range=[$version$,$version$]
+units.1.requires.10.greedy=true
+units.1.requires.11.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.11.name=org.eclipse.pde.api.tools.ee.osgiminimum12.group
+units.1.requires.11.range=[$version$,$version$]
+units.1.requires.11.greedy=true
+
+units.2.id=org.eclipse.pde.api.tools.ee.cdcfoundation10.group
+units.2.version=$version$
+units.2.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.2.provides.1.name=org.eclipse.pde.api.tools.ee.cdcfoundation10.group
+units.2.provides.1.version=$version$
+units.2.properties.1.name=org.eclipse.equinox.p2.name
+units.2.properties.1.value=PDE/API Tools Environment Descriptions CDC/Foundation 1.0
+units.2.properties.2.name=org.eclipse.equinox.p2.type.group
+units.2.properties.2.value=true
+units.2.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.2.requires.1.name=org.eclipse.pde.api.tools.ee.cdcfoundation10
+units.2.requires.1.greedy=true
+
+units.3.id=org.eclipse.pde.api.tools.ee.cdcfoundation11.group
+units.3.version=$version$
+units.3.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.3.provides.1.name=org.eclipse.pde.api.tools.ee.cdcfoundation11.group
+units.3.provides.1.version=$version$
+units.3.properties.1.name=org.eclipse.equinox.p2.name
+units.3.properties.1.value=PDE/API Tools Environment Descriptions CDC/Foundation 1.1
+units.3.properties.2.name=org.eclipse.equinox.p2.type.group
+units.3.properties.2.value=true
+units.3.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.3.requires.1.name=org.eclipse.pde.api.tools.ee.cdcfoundation11
+units.3.requires.1.greedy=true
+
+units.4.id=org.eclipse.pde.api.tools.ee.j2se12.group
+units.4.version=$version$
+units.4.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.4.provides.1.name=org.eclipse.pde.api.tools.ee.j2se12.group
+units.4.provides.1.version=$version$
+units.4.properties.1.name=org.eclipse.equinox.p2.name
+units.4.properties.1.value=PDE/API Tools Environment Descriptions J2SE 12
+units.4.properties.2.name=org.eclipse.equinox.p2.type.group
+units.4.properties.2.value=true
+units.4.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.4.requires.1.name=org.eclipse.pde.api.tools.ee.j2se12
+units.4.requires.1.greedy=true
+
+units.5.id=org.eclipse.pde.api.tools.ee.j2se13.group
+units.5.version=$version$
+units.5.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.5.provides.1.name=org.eclipse.pde.api.tools.ee.j2se13.group
+units.5.provides.1.version=$version$
+units.5.properties.1.name=org.eclipse.equinox.p2.name
+units.5.properties.1.value=PDE/API Tools Environment Descriptions J2SE 13
+units.5.properties.2.name=org.eclipse.equinox.p2.type.group
+units.5.properties.2.value=true
+units.5.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.5.requires.1.name=org.eclipse.pde.api.tools.ee.j2se13
+units.5.requires.1.greedy=true
+
+units.6.id=org.eclipse.pde.api.tools.ee.j2se14.group
+units.6.version=$version$
+units.6.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.6.provides.1.name=org.eclipse.pde.api.tools.ee.j2se14.group
+units.6.provides.1.version=$version$
+units.6.properties.1.name=org.eclipse.equinox.p2.name
+units.6.properties.1.value=PDE/API Tools Environment Descriptions J2SE 14
+units.6.properties.2.name=org.eclipse.equinox.p2.type.group
+units.6.properties.2.value=true
+units.6.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.6.requires.1.name=org.eclipse.pde.api.tools.ee.j2se14
+units.6.requires.1.greedy=true
+
+units.7.id=org.eclipse.pde.api.tools.ee.j2se15.group
+units.7.version=$version$
+units.7.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.7.provides.1.name=org.eclipse.pde.api.tools.ee.j2se15.group
+units.7.provides.1.version=$version$
+units.7.properties.1.name=org.eclipse.equinox.p2.name
+units.7.properties.1.value=PDE/API Tools Environment Descriptions J2SE 15
+units.7.properties.2.name=org.eclipse.equinox.p2.type.group
+units.7.properties.2.value=true
+units.7.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.7.requires.1.name=org.eclipse.pde.api.tools.ee.j2se15
+units.7.requires.1.greedy=true
+
+units.8.id=org.eclipse.pde.api.tools.ee.javase16.group
+units.8.version=$version$
+units.8.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.8.provides.1.name=org.eclipse.pde.api.tools.ee.javase16.group
+units.8.provides.1.version=$version$
+units.8.properties.1.name=org.eclipse.equinox.p2.name
+units.8.properties.1.value=PDE/API Tools Environment Descriptions J2SE 16
+units.8.properties.2.name=org.eclipse.equinox.p2.type.group
+units.8.properties.2.value=true
+units.8.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.8.requires.1.name=org.eclipse.pde.api.tools.ee.javase16
+units.8.requires.1.greedy=true
+
+units.9.id=org.eclipse.pde.api.tools.ee.jre11.group
+units.9.version=$version$
+units.9.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.9.provides.1.name=org.eclipse.pde.api.tools.ee.jre11.group
+units.9.provides.1.version=$version$
+units.9.properties.1.name=org.eclipse.equinox.p2.name
+units.9.properties.1.value=PDE/API Tools Environment Descriptions JRE 11
+units.9.properties.2.name=org.eclipse.equinox.p2.type.group
+units.9.properties.2.value=true
+units.9.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.9.requires.1.name=org.eclipse.pde.api.tools.ee.jre11
+units.9.requires.1.greedy=true
+
+units.10.id=org.eclipse.pde.api.tools.ee.osgiminimum10.group
+units.10.version=$version$
+units.10.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.10.provides.1.name=org.eclipse.pde.api.tools.ee.osgiminimum10.group
+units.10.provides.1.version=$version$
+units.10.properties.1.name=org.eclipse.equinox.p2.name
+units.10.properties.1.value=PDE/API Tools Environment Descriptions OSGi minimum 10
+units.10.properties.2.name=org.eclipse.equinox.p2.type.group
+units.10.properties.2.value=true
+units.10.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.10.requires.1.name=org.eclipse.pde.api.tools.ee.osgiminimum10
+units.10.requires.1.greedy=true
+
+units.11.id=org.eclipse.pde.api.tools.ee.osgiminimum11.group
+units.11.version=$version$
+units.11.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.11.provides.1.name=org.eclipse.pde.api.tools.ee.osgiminimum11.group
+units.11.provides.1.version=$version$
+units.11.properties.1.name=org.eclipse.equinox.p2.name
+units.11.properties.1.value=PDE/API Tools Environment Descriptions OSGi minimum 11
+units.11.properties.2.name=org.eclipse.equinox.p2.type.group
+units.11.properties.2.value=true
+units.11.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.11.requires.1.name=org.eclipse.pde.api.tools.ee.osgiminimum11
+units.11.requires.1.greedy=true
+
+units.12.id=org.eclipse.pde.api.tools.ee.osgiminimum12.group
+units.12.version=$version$
+units.12.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.12.provides.1.name=org.eclipse.pde.api.tools.ee.osgiminimum12.group
+units.12.provides.1.version=$version$
+units.12.properties.1.name=org.eclipse.equinox.p2.name
+units.12.properties.1.value=PDE/API Tools Environment Descriptions OSGi minimum 12
+units.12.properties.2.name=org.eclipse.equinox.p2.type.group
+units.12.properties.2.value=true
+units.12.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.12.requires.1.name=org.eclipse.pde.api.tools.ee.osgiminimum12
+units.12.requires.1.greedy=true
+
diff --git a/eclipse/features/org.eclipse.pde.build.product.feature/.project b/eclipse/features/org.eclipse.pde.build.product.feature/.project
new file mode 100644
index 0000000..4bb1e9f
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.build.product.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.pde.build.product.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.pde.build.product.feature/build.properties b/eclipse/features/org.eclipse.pde.build.product.feature/build.properties
new file mode 100644
index 0000000..b692f5f
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.build.product.feature/build.properties
@@ -0,0 +1,2 @@
+bin.includes = feature.xml,\
+               feature.properties
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde.build.product.feature/feature.properties b/eclipse/features/org.eclipse.pde.build.product.feature/feature.properties
new file mode 100644
index 0000000..c764da9
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.build.product.feature/feature.properties
@@ -0,0 +1,33 @@
+###############################################################################
+# Copyright (c) 2010 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     EclipseSource - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=PDE Build Base Function
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse PDE Project
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2010 EclipseSource Inc. and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+Contributors:\n\
+    EclipseSource - initial API and implementation\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde.build.product.feature/feature.xml b/eclipse/features/org.eclipse.pde.build.product.feature/feature.xml
new file mode 100644
index 0000000..cf8826c
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.build.product.feature/feature.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.pde.build.product.feature"
+      label="PDE Build Product Configuration"
+      version="1.0.0.qualifier"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description url="http://www.example.com/description">
+      [Enter Feature Description here.]
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      [Enter Copyright Description here.]
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      [Enter License Description here.]
+   </license>
+
+   <plugin
+         id="com.ibm.icu.base"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/eclipse/features/org.eclipse.pde.build.product.feature/product/p2.inf b/eclipse/features/org.eclipse.pde.build.product.feature/product/p2.inf
new file mode 100644
index 0000000..8ebf897
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.build.product.feature/product/p2.inf
@@ -0,0 +1,17 @@
+instructions.configure=
+requires.1.namespace=org.eclipse.equinox.p2.iu
+requires.1.name=toolingorg.eclipse.pde.build.product.macosx
+requires.1.filter=(osgi.os=macosx)
+requires.1.range=[1.0.0,1.0.0]
+requires.1.greedy=true
+
+units.1.id=toolingorg.eclipse.pde.build.product.macosx
+units.1.version=1.0.0
+units.1.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.1.provides.1.name=toolingorg.eclipse.pde.build.product.macosx
+units.1.provides.1.version=1.0.0
+units.1.filter=(osgi.os=macosx)
+units.1.touchpoint.id=org.eclipse.equinox.p2.osgi
+units.1.touchpoint.version=1.0.0
+units.1.instructions.configure=ln(linkTarget:pdebuild.app/Contents/MacOS/pdebuild,targetDir:${installFolder},linkName:pdebuild);
+
diff --git a/eclipse/features/org.eclipse.pde.build.product.feature/product/pdebuild.product b/eclipse/features/org.eclipse.pde.build.product.feature/product/pdebuild.product
new file mode 100644
index 0000000..656d9a0
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.build.product.feature/product/pdebuild.product
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="Basic Standalone PDE Build System" uid="org.eclipse.pde.build.product" application="org.eclipse.pde.build.Build" version="1.0.0. at qualifier@" useFeatures="true" includeLaunchers="true">
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-console -nosplash -consolelog</programArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+   </launcherArgs>
+
+   <launcher name="pdebuild">
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+   </vm>
+
+   <plugins>
+   </plugins>
+
+   <features>
+      <feature id="org.eclipse.pde.build.feature"/>
+      <feature id="org.eclipse.core.runtime.feature"/>
+      <feature id="org.eclipse.pde.build.configuration"/>
+   </features>
+
+
+</product>
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.addon/.project b/eclipse/features/org.eclipse.pde.junit.runtime.addon/.project
new file mode 100644
index 0000000..d762c15
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.addon/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.pde.junit.runtime.addon</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.addon/build.properties b/eclipse/features/org.eclipse.pde.junit.runtime.addon/build.properties
new file mode 100644
index 0000000..b3a611b
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.addon/build.properties
@@ -0,0 +1,2 @@
+bin.includes = feature.xml,\
+               feature.properties
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.addon/feature.properties b/eclipse/features/org.eclipse.pde.junit.runtime.addon/feature.properties
new file mode 100644
index 0000000..69a57cb
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.addon/feature.properties
@@ -0,0 +1,31 @@
+###############################################################################
+# Copyright (c) 2004-2010 Mort Bay Consulting Pty. Ltd. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Intalio - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=PDE JUnit Runner Support - Add-on
+
+description=Do not install in your IDE: this feature is meant to provision Target Platforms.\n\
+Support for PDE's JUnit runner for a Target Platform\n\
+Add-on: Does not include org.eclipse.runtime and its dependencies.
+descriptionURL=http://eclipse.org/jetty
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Jetty Project
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2004-2010 Mort Bay Consulting Pty. Ltd. and others.\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.addon/feature.xml b/eclipse/features/org.eclipse.pde.junit.runtime.addon/feature.xml
new file mode 100644
index 0000000..72692b9
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.addon/feature.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.pde.junit.runtime.addon"
+      label="%featureName"
+      version="1.0.100.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+       <import plugin="org.eclipse.core.runtime" version="3.6.0"/>
+   </requires>
+     <plugin id="org.eclipse.jdt.junit.runtime" version="0.0.0" unpack="false"/>
+	 <plugin id="org.eclipse.pde.junit.runtime" version="0.0.0" unpack="false"/>
+     <plugin id="org.hamcrest.core" version="0.0.0" unpack="false"/>
+     <plugin id="org.junit" version="4.8.2.qualifier" unpack="true"/> 
+
+</feature>
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.addon/pom.xml b/eclipse/features/org.eclipse.pde.junit.runtime.addon/pom.xml
new file mode 100644
index 0000000..00d5f2b
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.addon/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+// ========================================================================
+// Copyright (c) 2009 Intalio, Inc.
+// 
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+// The Eclipse Public License is available at 
+// http://www.eclipse.org/legal/epl-v10.html
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+// You may elect to redistribute this code under either of these licenses. 
+// Contributors:
+//    Hugues Malphettes - initial API and implementation
+// ========================================================================
+-->
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>jetty-osgi</artifactId>
+    <groupId>org.eclipse.jetty.osgi</groupId>
+    <version>7.1.6-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <artifactId>org.eclipse.pde.junit.runtime.addon</artifactId>
+  <version>1.0.0.SNAPSHOT</version>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.standalone/.project b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/.project
new file mode 100644
index 0000000..d8f6e1d
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.pde.junit.runtime.standalone</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.standalone/build.properties b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/build.properties
new file mode 100644
index 0000000..b692f5f
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/build.properties
@@ -0,0 +1,2 @@
+bin.includes = feature.xml,\
+               feature.properties
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.standalone/feature.properties b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/feature.properties
new file mode 100644
index 0000000..0907fe7
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/feature.properties
@@ -0,0 +1,31 @@
+###############################################################################
+# Copyright (c) 2004-2010 Mort Bay Consulting Pty. Ltd. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     Intalio - initial API and implementation
+###############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=PDE JUnit Runner Support - Standalone
+
+description=Do not install in your IDE: this feature is meant to provision Target Platforms.\n\
+Support for PDE's JUnit runner for a Target Platform\n\
+Standalone: includes all the necessary bundles.
+descriptionURL=http://eclipse.org/jetty
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Jetty Project
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2004-2010 Mort Bay Consulting Pty. Ltd. and others.\n
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.standalone/feature.xml b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/feature.xml
new file mode 100644
index 0000000..baf1df1
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/feature.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.pde.junit.runtime.standalone"
+      label="%featureName"
+      version="1.0.100.qualifier"
+      provider-name="%providerName"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright url="%copyrightURL">
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+    <plugin id="org.eclipse.osgi" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.osgi.services" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.core.contenttype" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.core.jobs" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.core.runtime" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.equinox.app" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.equinox.common" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.equinox.preferences" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.equinox.registry" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.eclipse.jdt.junit.runtime" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <!--plugin id="org.eclipse.jdt.junit.runtime" download-size="0" install-size="0" version="3.4.200.r361_v20100714-0800" unpack="false"/-->
+    <plugin id="org.eclipse.pde.junit.runtime" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.hamcrest.core" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
+    <plugin id="org.junit" download-size="0" install-size="0" version="4.8.2.qualifier" unpack="true"/>
+
+
+</feature>
diff --git a/eclipse/features/org.eclipse.pde.junit.runtime.standalone/pom.xml b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/pom.xml
new file mode 100644
index 0000000..ef94d24
--- /dev/null
+++ b/eclipse/features/org.eclipse.pde.junit.runtime.standalone/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+// ========================================================================
+// Copyright (c) 2009 Intalio, Inc.
+// 
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+// The Eclipse Public License is available at 
+// http://www.eclipse.org/legal/epl-v10.html
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+// You may elect to redistribute this code under either of these licenses. 
+// Contributors:
+//    Hugues Malphettes - initial API and implementation
+// ========================================================================
+-->
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>jetty-osgi</artifactId>
+    <groupId>org.eclipse.jetty.osgi</groupId>
+    <version>7.1.6-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <artifactId>org.eclipse.pde.junit.runtime.standalone</artifactId>
+  <version>1.0.0.SNAPSHOT</version>
+  <packaging>eclipse-feature</packaging>
+</project>
diff --git a/eclipse/features/org.eclipse.pde/build.properties b/eclipse/features/org.eclipse.pde/build.properties
index a36998a..be574d9 100644
--- a/eclipse/features/org.eclipse.pde/build.properties
+++ b/eclipse/features/org.eclipse.pde/build.properties
@@ -8,5 +8,5 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-bin.includes=epl-v10.html,eclipse_update_120.jpg,feature.xml,feature.properties,license.html
+bin.includes=eclipse_update_120.jpg,feature.xml,feature.properties
 
diff --git a/eclipse/features/org.eclipse.pde/epl-v10.html b/eclipse/features/org.eclipse.pde/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.pde/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde/feature.properties b/eclipse/features/org.eclipse.pde/feature.properties
index 48e5445..b28f72f 100644
--- a/eclipse/features/org.eclipse.pde/feature.properties
+++ b/eclipse/features/org.eclipse.pde/feature.properties
@@ -20,9 +20,6 @@ featureName=Eclipse Plug-in Development Environment
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
 description=Eclipse plug-in development environment.
 
@@ -36,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde/feature.xml b/eclipse/features/org.eclipse.pde/feature.xml
index 575ef86..2612972 100644
--- a/eclipse/features/org.eclipse.pde/feature.xml
+++ b/eclipse/features/org.eclipse.pde/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.pde"
       label="%featureName"
-      version="3.6.2.qualifier"
+      version="3.7.0.qualifier"
       provider-name="%providerName"
-      image="eclipse_update_120.jpg">
+      image="eclipse_update_120.jpg"   
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
diff --git a/eclipse/features/org.eclipse.pde/license.html b/eclipse/features/org.eclipse.pde/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.pde/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.pde/sourceTemplateFeature/build.properties
deleted file mode 100644
index 6e47058..0000000
--- a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2004, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-license.html
diff --git a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.pde/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.pde/sourceTemplateFeature/feature.properties
index a9fc762..28128a6 100644
--- a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.pde/sourceTemplateFeature/feature.properties
@@ -20,9 +20,6 @@ featureName=Eclipse PDE Plug-in Developer Resources
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
 description=Eclipse plug-in development environment, including documentation and source code zips.
 
@@ -36,139 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.pde/sourceTemplateFeature/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.pde/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about.html b/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about.html
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about.html
rename to eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about.html
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/IJG_README b/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/IJG_README
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/IJG_README
rename to eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/IJG_README
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/about_cairo.html b/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/about_cairo.html
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/about_cairo.html
rename to eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/about_cairo.html
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/lgpl-v21.txt b/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/lgpl-v21.txt
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/lgpl-v21.txt
rename to eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/lgpl-v21.txt
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/mpl-v11.txt b/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/mpl-v11.txt
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/mpl-v11.txt
rename to eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/mpl-v11.txt
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/pixman-licenses.txt b/eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/pixman-licenses.txt
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc/about_files/pixman-licenses.txt
rename to eclipse/features/org.eclipse.platform/about_files/linux.gtk.ppc64/about_files/pixman-licenses.txt
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about.html b/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about.html
deleted file mode 100644
index c06208a..0000000
--- a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>August 17, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Gnome Binding</h4>
-
-<p>The "Gnome Binding" is a binding to the Gnome API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Gnome Binding:</p>
-<ul>
-	<li>libswt-gnome-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Gnome Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/gnome (but not including any sub-directories)</li>
-</ul>
-
-<p>The Gnome Binding contains portions of Gnome ("Library").  Gnome is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
-conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the Gnome Binding on a standalone
-basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
-<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
-
-<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
-containing portions of the Library (e.g. the Gnome Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
-other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the Gnome Binding such modifications shall be
-governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
-work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
-
-<h4>GTK+ Binding For Mozilla</h4>
-
-<p>The "GTK+ Binding For Mozilla" is a GTK+ binding to the Mozilla API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the GTK+ Binding For Mozilla:</p>
-<ul>
-	<li>libswt-gtk-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the GTK+ Binding For Mozilla:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/gtk (but not including any sub-directories)</li>
-</ul>
-
-<p>The GTK+ Binding For Mozilla contains portions of GTK+ ("Library").  GTK+ is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
-conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the GTK+ Binding for Mozilla on a standalone
-basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
-<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
-
-<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
-containing portions of the Library (e.g. the GTK+ Binding For Mozilla) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
-other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the GTK+ Binding For Mozilla such modifications shall be
-governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
-work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
-
-<p>Note that the GTK+ Binding For Mozilla contains a subset of the code found in the GTK+ Binding that is available in Linux GTK+ builds.</p>
-
-<h4>Mozilla Binding</h4>
-
-<p>The "Mozilla Binding" is a binding to the Mozilla API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Mozilla Binding:</p>
-<ul>
-	<li>libswt-mozilla-motif-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-mozilla-gcc3-motif-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-xulrunner-motif-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-xpcominit-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Mozilla Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/mozilla (but not including any sub-directories)</li>
-</ul>
-
-<p>The Mozilla Binding contains portions of Mozilla ("Mozilla").  Mozilla is made available by Mozilla.org.  Use of Mozilla is governed by the terms and
-conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at
-<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
-
-<h4>XULRunner 1.9 (subset, derivative work)</h4>
-
-The libraries libswt-xulrunner-motif-xxxx.so, libswt-mozilla-motif-xxxx.so, and libswt-mozilla-gcc3-motif-xxxx.so (where "xxxx" is the version number) contain a small portion of XULRunner 1.9 content (header files)
-that have been modified from the Original Code provided by mozilla.org, and whose Initial Developer is Netscape Communications Corporation. Use of this code is governed by
-the terms and conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="./about_files/mpl-v11.txt">mpl-v11.txt</a>)
-and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.
-<p>The changed files are:
-<ul>
-  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h</code>
-  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h</code>
-</ul>
-Changes to the original files were made by SWT on April 7, 2009 and are marked with trailing comment <em>"//SWT-20090407"</em>.
-
-<h4>Cairo Binding</h4>
-
-<p>The "Cairo Binding" is a binding to the Cairo API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Cairo Binding:</p>
-<ul>
-	<li>libswt-cairo-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Cairo Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/cairo (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The Cairo Binding contains portions of Cairo ("Cairo").  Cairo is made available by the Cairo project at
-<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>.  Use of Cairo by the Cairo Binding is governed by the terms and
-conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is
-provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
-
-<h4>Cairo for Linux</h4>
-
-<p>Refer to the file <a href="about_files/about_cairo.html">about_cairo.html</a> for licensing details about "Cairo for Linux".</p>
-
-<h4>Open Motif for Linux</h4>
-
-<p>Refer to the file <a href="about_files/about_open_motif.html">about_open_motif.html</a> for licensing details about "Open Motif for Linux".</p>
-
-<h4>Independent JPEG Group's JPEG software release 6b</h4>
-
-<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
-LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
-
-<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
-with the Content.</p>
-
-<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
-
-<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
-
-<ul>
-    <li>cderror.h</li>
-    <li>cdjpeg.h</li>
-    <li>jchuff.h</li>
-    <li>jdcolor.c</li>
-    <li>jdct.h</li>
-    <li>jdhuff.h</li>
-    <li>jerror.h</li>
-    <li>jidctint.c</li>
-    <li>jinclude.h</li>
-    <li>jmemsys.h</li>
-    <li>jmorecfg.h</li>
-    <li>jpegint.h</li>
-    <li>jpeglib.h</li>
-    <li>jversion.h</li>
-    <li>transupp.h</li>
-</ul>
-
-<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
-
-<ul>
-	<li>jcapimin.c</li>
-	<li>jcapistd.c</li>
-	<li>jccoefct.c</li>
-	<li>jccolor.c</li>
-	<li>jcdctmgr.c</li>
-	<li>jchuff.c</li>
-	<li>jcinit.c</li>
-	<li>jcmainct.c</li>
-	<li>jcmarker.c</li>
-	<li>jcmaster.c</li>
-	<li>jcomapi.c</li>
-	<li>jcparam.c</li>
-	<li>jcphuff.c</li>
-	<li>jcprepct.c</li>
-	<li>jcsample.c</li>
-	<li>jctrans.c</li>
-	<li>jdapimin.c</li>
-	<li>jdapistd.c</li>
-	<li>jdatadst.c</li>
-	<li>jdatasrc.c</li>
-	<li>jdcoefct.c</li>
-	<li>jdcolor.c</li>
-	<li>jddctmgr.c</li>
-	<li>jdhuff.c</li>
-	<li>jdinput.c</li>
-	<li>jdmainct.c</li>
-	<li>jdmarker.c</li>
-	<li>jdmaster.c</li>
-	<li>jdmerge.c</li>
-	<li>jdphuff.c</li>
-	<li>jdpostct.c</li>
-	<li>jdsample.c</li>
-	<li>jdtrans.c</li>
-	<li>jerror.c</li>
-	<li>jfdctflt.c</li>
-	<li>jfdctfst.c</li>
-	<li>jfdctint.c</li>
-	<li>jidctflt.c</li>
-	<li>jidctfst.c</li>
-	<li>jidctint.c</li>
-	<li>jidctred.c</li>
-	<li>jpegtran.c</li>
-	<li>jquant1.c</li>
-	<li>jquant2.c</li>
-	<li>jutils.c</li>
-	<li>cderror.h</li>
-	<li>cdjpeg.h</li>
-	<li>jchuff.h</li>
-	<li>jconfig.h</li>
-	<li>jdct.h</li>
-	<li>jdhuff.h</li>
-	<li>jerror.h</li>
-	<li>jinclude.h</li>
-	<li>jmorecfg.h</li>
-	<li>jpegint.h</li>
-	<li>jpeglib.h</li>
-	<li>jversion.h</li>
-	<li>transupp.h</li>
-</ul>
-	
-<p>The following changes were made to the LIBJPEG code in the Content:</p>
-
-<ol>
-	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
-	<li>Function pointers were replaced with switch statements.</li>
-	<li>The virtual memory, tracing and progress monitoring were removed.</li>
-	<li>The error handling was simplified and now uses Java exceptions.</li>
-</ol>
-
-<h4>PuTTY 0.58 (derivative work)</h4>
-
-<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org.  Use of PuTTY is governed by the terms and
-conditions of the the following MIT-style license:  </p>
-<blockquote>
-  <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
-  <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian  Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,  Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn,  and CORE SDI S.A.</em> </p>
-  <p><em>Permission is hereby granted, free of charge, to any person  obtaining a copy of this software and associated documentation files  (the "Software"), to deal in the Software without restriction,  including without limitation the rights to use, copy, modify, merge,  publish, distribute, sublicense, and/or sell copies of the Software,  and to permit persons to whom the Software is furnished to do so,  subject to the following conditions:</em> </p>
-  <p><em>The above copyright notice and this permission notice shall be  included in all copies or substantial portions of the Software.</em> </p>
-  <p><em>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
-</blockquote>
-<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
-
-<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/about_open_motif.html b/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/about_open_motif.html
deleted file mode 100644
index 2862520..0000000
--- a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/about_open_motif.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>June 20, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation has included the following package for your convenience:</p> 
-
-<h4>Open Motif for Linux 2.1.30 Release 4</h4>
-
-<p>Open Motif for Linux ("Open Motif") is developed by Metro Link as part of The Open Motif project.  Open Motif is:</p>
-
-<blockquote>
-	Copyright (C) May, 2000 The Open Group, Metro Link, Incorporated and others. All Rights Reserved
-</blockquote>
-
-<p>Open Motif includes the following files:</p>
-<ul>
-    <li>libXm.so.2</li>
-</ul>
-
-<p>Open Motif is not considered part of the content provided by the Eclipse Foundation.  Your use of the Open Motif code in binary form is subject to
-the terms and conditions of Metro Link Public License 1.00 ("MLPL").   A copy of the MLPL is provided (<a href="mlpl-v10.html" target="_blank">mlpl-v10.html</a>)
-and is also available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html" target="_blank">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>.</p>
-
-<p>Source code for Open Motif is available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/" target="_blank">http://www.opengroup.org/openmotif/supporters/metrolink/</a>.</p>
-
-<p>If you did not receive Open Motif directly from the Eclipse Foundation, the package is being redistributed by another party ("Redistributor") and different terms and conditions may
-apply its use.  Check the Redistributor's license that was provided with the content.  If no such license exists, contact the Redistributor.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/mlpl-v10.html b/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/mlpl-v10.html
deleted file mode 100644
index 5c692a5..0000000
--- a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/mlpl-v10.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- saved from url=(0068)http://www.opengroup.org/openmotif/supporters/metrolink/license.html -->
-<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:o = 
-"urn:schemas-microsoft-com:office:office" xmlns:w = 
-"urn:schemas-microsoft-com:office:word"><HEAD><TITLE>Metro Link Open Motif License</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=windows-1252">
-<META content=Word.Document name=ProgId>
-<META content="MSHTML 6.00.2800.1491" name=GENERATOR>
-<META content="Microsoft Word 9" name=Originator><LINK 
-href="./Open_Motif_License_ver1.00_files/filelist.xml" rel=File-List><!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Author>10-06-99 W98</o:Author>
-  <o:LastAuthor>Preferred Customer</o:LastAuthor>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>11</o:TotalTime>
-  <o:LastPrinted>2000-05-10T23:38:00Z</o:LastPrinted>
-  <o:Created>2000-05-11T19:36:00Z</o:Created>
-  <o:LastSaved>2000-05-11T19:36:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1750</o:Words>
-  <o:Characters>9977</o:Characters>
-  <o:Company>Akerman</o:Company>
-  <o:Bytes>35840</o:Bytes>
-  <o:Lines>83</o:Lines>
-  <o:Paragraphs>19</o:Paragraphs>
-  <o:CharactersWithSpaces>12252</o:CharactersWithSpaces>
-  <o:Version>9.2720</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
-  <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery>
-  <w:UseMarginsForDrawingGridOrigin/>
-  <w:Compatibility>
-   <w:FootnoteLayoutLikeWW8/>
-   <w:ShapeLayoutLikeWW8/>
-   <w:AlignTablesRowByRow/>
-   <w:ForgetLastTabAlignment/>
-   <w:LayoutRawTableWidth/>
-   <w:LayoutTableRowsApart/>
-  </w:Compatibility>
- </w:WordDocument>
-</xml><![endif]-->
-<STYLE>@page Section1 {size: 8.5in 11.0in; margin: 1.0in 1.0in 1.0in 1.0in; mso-header-margin: 1.0in; mso-footer-margin: 1.0in; mso-footer: url("./Open_Motif_License_ver1.00_files/header.htm") f1; mso-paper-source: 0; }
-P.MsoNormal {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"
-}
-LI.MsoNormal {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"
-}
-DIV.MsoNormal {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"
-}
-P.MsoHeader {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-LI.MsoHeader {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-DIV.MsoHeader {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-P.MsoFooter {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-LI.MsoFooter {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-DIV.MsoFooter {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-P.H2 {
-	FONT-WEIGHT: bold; FONT-SIZE: 18pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H2; mso-style-next: Normal; mso-outline-level: 3; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-LI.H2 {
-	FONT-WEIGHT: bold; FONT-SIZE: 18pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H2; mso-style-next: Normal; mso-outline-level: 3; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-DIV.H2 {
-	FONT-WEIGHT: bold; FONT-SIZE: 18pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H2; mso-style-next: Normal; mso-outline-level: 3; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-P.H3 {
-	FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H3; mso-style-next: Normal; mso-outline-level: 4; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-LI.H3 {
-	FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H3; mso-style-next: Normal; mso-outline-level: 4; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-DIV.H3 {
-	FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H3; mso-style-next: Normal; mso-outline-level: 4; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-P.Blockquote {
-	FONT-SIZE: 12pt; MARGIN: 5pt 0.25in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: Blockquote; mso-bidi-font-size: 10.0pt
-}
-LI.Blockquote {
-	FONT-SIZE: 12pt; MARGIN: 5pt 0.25in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: Blockquote; mso-bidi-font-size: 10.0pt
-}
-DIV.Blockquote {
-	FONT-SIZE: 12pt; MARGIN: 5pt 0.25in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: Blockquote; mso-bidi-font-size: 10.0pt
-}
-DIV.Section1 {
-	page: Section1
-}
-OL {
-	MARGIN-BOTTOM: 0in
-}
-UL {
-	MARGIN-BOTTOM: 0in
-}
-</STYLE>
-</HEAD>
-<BODY lang=EN-US style="tab-interval: .5in" bgColor=white>
-<DIV class=Section1>
-<P class=H2 style="TEXT-ALIGN: center" align=center>METRO LINK PUBLIC LICENSE 
-<BR>MOTIF GRAPHICAL USER INTERFACE SOFTWARE<BR>Version 1.00</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS 
-METRO LINK PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION 
-OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. </P>
-<P class=H3>1. DEFINITIONS </P>
-<P class=MsoNormal>"Contribution" means: </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l6 level1 lfo9">in 
-  the case of METRO LINK, INCORPORATED ("METRO LINK"), the Metro Link Program, 
-  and </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l6 level1 lfo9">in 
-  the case of each Contributor, </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=1>
-  <OL style="MARGIN-TOP: 0in" type=1>
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l0 level2 lfo2">changes 
-    to the Program, and 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l0 level2 lfo2">additions 
-    to the Program; </LI></OL></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.75in; mso-outline-level: 2"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.5in; mso-outline-level: 1">where such 
-changes and/or additions to the Program originate from and are distributed by 
-that particular Contributor. A Contribution 'originates' from a Contributor if 
-it was added to the Program by such Contributor itself or anyone acting on such 
-Contributor's behalf. Contributions do not include additions to the Program 
-which: (i) are separate modules of software distributed in conjunction with the 
-Program under their own license agreement, and (ii) are not derivative works of 
-the Program. </P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.5in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Contributor" means The Open Group, METRO LINK and any other 
-entity that distributes the Program. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Licensed Patents" mean patent claims licensable by a 
-Contributor which are necessarily infringed by the use or sale of its 
-Contribution alone or when combined with the Program.</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Open Source"<SPAN style="mso-spacerun: yes">  
-</SPAN>programs mean software for the source code is available without 
-confidential or trade secret restrictions and for which<SPAN 
-style="mso-spacerun: yes">  </SPAN>the source code and object code are 
-available for distribution without license charges.</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Metro Link Program" means the original version of the 
-software accompanying this Agreement as released by METRO LINK, including source 
-code, object code and documentation, if any. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Program" means the Metro Link Program and Contributions. 
-</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Recipient" means anyone who receives the Program under this 
-Agreement, including all Contributors. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=H3 
-style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in; mso-list: l4 level1 lfo8"><![if !supportLists]>2.<SPAN 
-style="FONT: 7pt 'Times New Roman'">     
-</SPAN><![endif]>GRANT OF RIGHTS </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>The rights granted under this license are limited solely to 
-distribution and sublicensing of the Contribution(s) on, with or<SPAN 
-style="mso-spacerun: yes">  </SPAN>for operating systems which are 
-themselves Open Source programs.</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Subject 
-  to the terms of this Agreement, The Open Group Public License Agreement 
-  attached hereto (“The Open Group Agreement”) and<SPAN 
-  style="mso-spacerun: yes">  </SPAN>the limitations of this Section 2, 
-  each Contributor hereby grants Recipient a non-exclusive, worldwide, 
-  royalty-free copyright license to reproduce, prepare derivative works of, 
-  publicly display, publicly perform, distribute and sublicense the Contribution 
-  of such Contributor, if any, and such derivative works, in source code and 
-  object code form. </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Subject 
-  to the terms of this Agreement, The Open Group Agreement and this Section 2, 
-  each Contributor hereby grants Recipient a non-exclusive, worldwide, 
-  royalty-free patent license under Licensed Patents to make, use, sell, offer 
-  to sell, import and otherwise transfer the Contribution of such Contributor, 
-  if any, in source code and object code form. This patent license shall apply 
-  to the combination of the Contribution and the Program if, at the time the 
-  Contribution is added by the Contributor, such addition of the Contribution 
-  causes such combination to be covered by the Licensed Patents. The patent 
-  license shall not apply to any other combinations which include the 
-  Contribution. No hardware per se is licensed hereunder. </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=3>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Recipient 
-  understands that although each Contributor grants the licenses to its 
-  Contributions set forth herein, no assurances are provided by any Contributor 
-  that the Program does not infringe the patent or other intellectual property 
-  rights of any other entity. Each Contributor disclaims any liability to 
-  Recipient for claims brought by any other entity based on infringement of 
-  intellectual property rights or otherwise. As a condition to exercising the 
-  rights and licenses granted hereunder, each Recipient hereby assumes sole 
-  responsibility to secure any other intellectual property rights needed, if 
-  any. For example, if a third party patent license is required to allow 
-  Recipient to distribute the Program, it is Recipient's responsibility to 
-  acquire that license before distributing the Program. </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=4>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Each 
-  Contributor represents that to its knowledge it has sufficient copyright 
-  rights in its Contribution, if any, to grant the copyright license set forth 
-  in this Agreement. </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=H3>3. REQUIREMENTS </P>
-<P class=MsoNormal>A Contributor may choose to distribute the Program in object 
-code form under its own license agreement, provided that: </P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l2 level1 lfo4">it 
-  complies with the terms and conditions of this Agreement<B 
-  style="mso-bidi-font-weight: normal"> </B>and The Open Group Agreement; and 
-  </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l2 level1 lfo4">its 
-  license agreement: </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=1 start=2>
-  <OL style="MARGIN-TOP: 0in" type=1>
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">effectively 
-    disclaims on behalf of all Contributors all warranties and conditions, 
-    express and implied, including warranties or conditions of title and 
-    non-infringement, and implied warranties or conditions of merchantability 
-    and fitness for a particular purpose; 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">effectively 
-    excludes on behalf of all Contributors all liability for damages, including 
-    direct, indirect, special, incidental and consequential damages, such as 
-    lost profits; 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">states 
-    that any provisions which differ from this Agreement are offered by that 
-    Contributor alone and not by any other party; and 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">states 
-    that source code for the Program is available from such Contributor, and 
-    informs licensees how to obtain it in a reasonable manner on or through a 
-    medium customarily used for software exchange. </LI></OL></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.75in; mso-outline-level: 2"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>When the Program is made available in source code form: </P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l3 level1 lfo6">it 
-  must be made available under this Agreement and the Open Group Agreement; and 
-  </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l3 level1 lfo6">a 
-  copy of this Agreement must be included with each copy of the Program. 
-</LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>Each Contributor must include the following in a conspicuous 
-location in the Program: </P>
-<P class=Blockquote>Copyright (C) May, 2000 The Open Group, Metro Link, 
-Incorporated and others. All Rights Reserved</P>
-<P class=Blockquote><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>In addition, each Contributor must identify itself as the 
-originator of its Contribution, if any, in a manner that reasonably allows 
-subsequent Recipients to identify the originator of the Contribution. </P>
-<P class=H3>4. COMMERCIAL DISTRIBUTION </P>
-<P class=MsoNormal>Commercial distributors of software may accept certain 
-responsibilities with respect to end users, business partners and the like. 
-While this license is intended to facilitate the commercial use of the Program, 
-the Contributor who includes the Program in a commercial product offering should 
-do so in a manner which does not create potential liability for other 
-Contributors. Therefore, if a Contributor includes the Program in a commercial 
-product offering, such Contributor ("Commercial Contributor") hereby agrees to 
-defend and indemnify every other Contributor ("Indemnified Contributor") against 
-any losses, damages and costs (collectively "Losses") arising from claims, 
-lawsuits and other legal actions brought by a third party against the 
-Indemnified Contributor to the extent caused by the acts or omissions of such 
-Commercial Contributor in connection with its distribution of the Program in a 
-commercial product offering. The obligations in this section do not apply to any 
-claims or Losses relating to any actual or alleged intellectual property 
-infringement. In order to qualify, an Indemnified Contributor must: </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal 
-style="MARGIN-LEFT: 0.25in; TEXT-INDENT: -0.25in; tab-stops: list .25in; mso-list: l5 level1 lfo7"><![if !supportLists]>a)<SPAN 
-style="FONT: 7pt 'Times New Roman'">       </SPAN><![endif]>promptly notify the Commercial Contributor in writing of such 
-claim, and </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal 
-style="MARGIN-LEFT: 0.25in; TEXT-INDENT: -0.25in; tab-stops: list .25in; mso-list: l5 level1 lfo7"><![if !supportLists]>b)<SPAN 
-style="FONT: 7pt 'Times New Roman'">       </SPAN><![endif]>allow the Commercial Contributor to control, and cooperate with 
-the Commercial Contributor in, the defense and any related settlement 
-negotiations. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>The Indemnified Contributor may participate in any such claim 
-at its own expense. </P>
-<P class=MsoNormal>For example, a Contributor might include the Program in a 
-commercial product offering, Product X. That Contributor is then a Commercial 
-Contributor. If that Commercial Contributor then makes performance claims, or 
-offers warranties related to Product X, those performance claims and warranties 
-are such Commercial Contributor's responsibility alone. Under this section, the 
-Commercial Contributor would have to defend claims against the other 
-Contributors related to those performance claims and warranties, and if a court 
-requires any other Contributor to pay any damages as a result, the Commercial 
-Contributor must pay those damages. </P>
-<P class=H3>5. NO WARRANTY </P>
-<P class=MsoNormal>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM 
-IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
-EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR 
-CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A 
-PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the 
-appropriateness of using and distributing the Program and assumes all risks 
-associated with its exercise of rights under this Agreement, including but not 
-limited to the risks and costs of program errors, compliance with applicable 
-laws, damage to or loss of data, programs or equipment, and unavailability or 
-interruption of operations. </P>
-<P class=H3>6. DISCLAIMER OF LIABILITY </P>
-<P class=MsoNormal>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER 
-RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, 
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING 
-WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR 
-THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY 
-OF SUCH DAMAGES. </P>
-<P class=H3>7. GENERAL </P>
-<P class=MsoNormal>If any provision of this Agreement is invalid or 
-unenforceable under applicable law, it shall not affect the validity or 
-enforceability of the remainder of the terms of this Agreement, and without 
-further action by the parties hereto, such provision shall be reformed to the 
-minimum extent necessary to make such provision valid and enforceable. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>If Recipient institutes patent litigation against a 
-Contributor with respect to a patent applicable to software (including a 
-cross-claim or counterclaim in a lawsuit), then any patent licenses granted by 
-that Contributor to such Recipient under this Agreement shall terminate as of 
-the date such litigation is filed. In addition, if Recipient institutes patent 
-litigation against any entity (including a cross-claim or counterclaim in a 
-lawsuit) alleging that the Program itself (excluding combinations of the Program 
-with other software or hardware) infringes such Recipient's patent(s), then such 
-Recipient's rights granted under Section 2(b) shall terminate as of the date 
-such litigation is filed. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>All Recipient's rights under this Agreement shall terminate 
-if it fails to comply with any of the material terms or conditions of this 
-Agreement and does not cure such failure in a reasonable period of time after 
-becoming aware of such noncompliance. If all Recipient's rights under this 
-Agreement terminate, Recipient agrees to cease use and distribution of the 
-Program as soon as reasonably practicable. However, Recipient's obligations 
-under this Agreement and any licenses granted by Recipient relating to the 
-Program shall continue and survive. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>METRO LINK may publish new versions (including revisions) of 
-this Agreement from time to time. Each new version of the Agreement will be 
-given a distinguishing version number. The Program (including Contributions) may 
-always be distributed subject to the version of the Agreement under which it was 
-received. In addition, after a new version of the Agreement is published, 
-Contributor may elect to distribute the Program (including its Contributions) 
-under the new version. No one other than METRO LINK has the right to modify this 
-Agreement. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient 
-receives no rights or licenses to the intellectual property of any Contributor 
-under this Agreement, whether expressly, by implication, estoppel or otherwise. 
-All rights in the Program not expressly granted under this Agreement are 
-reserved. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>This Agreement is governed by the laws of the State of 
-Florida and the intellectual property laws of the United States of America. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>No party to this Agreement will bring a legal action under 
-this Agreement more than one year after the cause of action arose. Each party 
-waives its rights to a jury trial in any resulting litigation.</P>
-<P 
-class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P></DIV></BODY></HTML>
diff --git a/eclipse/features/org.eclipse.platform/build.properties b/eclipse/features/org.eclipse.platform/build.properties
index 5aaede5..c27f41f 100644
--- a/eclipse/features/org.eclipse.platform/build.properties
+++ b/eclipse/features/org.eclipse.platform/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2009 IBM Corporation and others.
+#  Copyright (c) 2000, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -8,13 +8,10 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-license.html
+bin.includes = feature.xml,\
+			   feature.properties,\
+			   eclipse_update_120.jpg
 
 generatedVersionLength=45
 
-root=rootfiles
\ No newline at end of file
+root=rootfiles
diff --git a/eclipse/features/org.eclipse.platform/epl-v10.html b/eclipse/features/org.eclipse.platform/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.platform/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/feature.properties b/eclipse/features/org.eclipse.platform/feature.properties
index beb18c9..44f26f0 100644
--- a/eclipse/features/org.eclipse.platform/feature.properties
+++ b/eclipse/features/org.eclipse.platform/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -20,19 +20,12 @@ featureName=Eclipse Platform
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the update site
-secondaryUpdateSiteName=Galileo Discovery Site
-
-
 # "description" property - description of the feature
-description=Common OS-independent base of the Eclipse platform. (Binary runtime and user documentation.)
+description=Common OS-independent base of the Eclipse platform (binary runtime and user documentation).
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2000, 2010 IBM Corporation and others.\n\
+Copyright (c) 2000, 2011 IBM Corporation and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -40,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/feature.xml b/eclipse/features/org.eclipse.platform/feature.xml
index 60babec..caff213 100644
--- a/eclipse/features/org.eclipse.platform/feature.xml
+++ b/eclipse/features/org.eclipse.platform/feature.xml
@@ -2,10 +2,12 @@
 <feature
       id="org.eclipse.platform"
       label="%featureName"
-      version="3.6.2.qualifier"
+      version="3.7.0.qualifier"
       provider-name="%providerName"
-      image="eclipse_update_120.jpg">
-
+      image="eclipse_update_120.jpg" 
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+      
    <description>
       %description
    </description>
@@ -17,13 +19,7 @@
    <license url="%licenseURL">
       %license
    </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/eclipse/updates/3.5"/>
-      <discovery label="%updateSiteName" url="http://download.eclipse.org/eclipse/updates/3.5"/>
-      <discovery label="%secondaryUpdateSiteName" url="http://download.eclipse.org/releases/galileo"/>
-   </url>
-
+  
    <includes
          id="org.eclipse.rcp"
          version="0.0.0"/>
@@ -116,7 +112,7 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-
+         
    <plugin
          id="org.eclipse.core.net.linux.x86_64"
          os="linux"
@@ -126,7 +122,7 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-
+  
    <plugin
          id="org.eclipse.core.net.win32.x86_64"
          os="win32"
@@ -135,8 +131,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"
-         unpack="false"/>
-
+         unpack="false"/>        
+         
    <plugin
          id="org.eclipse.core.net.linux.x86"
          os="linux"
@@ -152,7 +148,7 @@
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>
+         unpack="false"/> 
 
    <plugin
          id="org.eclipse.core.runtime.compatibility"
@@ -188,7 +184,7 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-
+         
    <plugin
          id="org.eclipse.equinox.event"
          download-size="0"
@@ -419,7 +415,7 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-
+         
    <plugin
          id="org.eclipse.core.filesystem.aix.ppc"
          os="aix"
@@ -439,18 +435,8 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-
-   <plugin
-         id="org.eclipse.core.filesystem.linux.ppc"
-         os="linux"
-         arch="ppc"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>
-
-   <plugin
+ 
+      <plugin
          id="org.eclipse.core.filesystem.linux.x86"
          os="linux"
          arch="x86"
@@ -582,6 +568,16 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.equinox.security.win32.x86_64"
+         os="win32"
+         arch="x86_64"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
 
    <plugin
          id="org.eclipse.equinox.security.macosx"
diff --git a/eclipse/features/org.eclipse.platform/license.html b/eclipse/features/org.eclipse.platform/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.platform/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct b/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct
index 3ec2cc4..d81df5f 100644
--- a/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct
+++ b/eclipse/features/org.eclipse.platform/rootfiles/.eclipseproduct
@@ -1,3 +1,3 @@
 name=Eclipse Platform
 id=org.eclipse.platform
-version=3.6.1
\ No newline at end of file
+version=3.7.0
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/rootfiles/notice.html b/eclipse/features/org.eclipse.platform/rootfiles/notice.html
index c184ca3..dc5aefd 100644
--- a/eclipse/features/org.eclipse.platform/rootfiles/notice.html
+++ b/eclipse/features/org.eclipse.platform/rootfiles/notice.html
@@ -1,19 +1,18 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
+<!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>
+
+
 
-<body lang="EN-US">
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head><body lang="EN-US">
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
+<p>February 1, 2011</p>
 
 <h3>Usage Of Content</h3>
 
 <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
    CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
    OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
    NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
@@ -21,43 +20,73 @@
 
 <h3>Applicable Licenses</h3>
 
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
 
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
 
 <ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
       and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
 </ul>
 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
 including, but not limited to the following locations:</p>
 
 <ul>
        <li>The top-level (root) directory</li>
        <li>Plug-in and Fragment directories</li>
        <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
        <li>Feature directories</li>
 </ul>
 
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
 that directory.</p>
 
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
 OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
 
 <ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
        <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
        <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
        <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
@@ -65,43 +94,69 @@ OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
        <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
 </ul>
 
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
 
 
 <h3>Use of Provisioning Technology</h3>
 
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
 
 <ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
        product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
        accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
 </ol>
 
 <h3>Cryptography</h3>
 
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
 
 <p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
+</body></html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html b/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html
index 80476fc..d138457 100644
--- a/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html
+++ b/eclipse/features/org.eclipse.platform/rootfiles/readme/readme_eclipse.html
@@ -2,13 +2,13 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-<title>Eclipse Project Release Notes 3.6.2</title>
+<title>Eclipse Project Release Notes 3.7</title>
 </head>
 <body>
 
 <h1>Eclipse Project Release Notes</h1>
-<p>Release 3.6.2<br/>
-  Last revised February 10, 2011</p>
+<p>Release 3.7.0<br/>
+  Last revised May 16, 2011</p>
 <p align="left"><strong>This software is OSI Certified Open Source Software.<br/>
 OSI Certified is a certification mark of the Open Source Initiative. </strong></p>
 <blockquote>
@@ -32,10 +32,10 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
   Java Platform itself. Portions are targeted to specific classes of operating
   environments, requiring their source code to only reference facilities available
   in particular class libraries (e.g. J2ME Foundation 1.1, J2SE 1.4, Java 5, etc).</p>
-<p>In general, the 3.6 release of the Eclipse Project is developed on a mix
-  of Java 1.4, Java 5 and Java 6 VMs. As such, the Eclipse SDK as a whole
+<p>In general, the 3.7 release of the Eclipse Project is developed on a mix
+  of Java SE 5 and Java SE 6 VMs. As such, the Eclipse SDK as a whole
   is targeted at all modern, desktop Java VMs. Most functionality is available for
-  1.4 level development everywhere, and extended development capabilities are made
+  Java SE 5 level development everywhere, and extended development capabilities are made
   available on the VMs that support them.</p>
 <p><a href="#Appendix1">Appendix 1</a> contains a table that indicates the class
   library level required for each bundle.</p>
@@ -47,7 +47,7 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
   them we cannot vouch for them. Problems encountered when running Eclipse on a
   non-reference platform that cannot be recreated on any reference platform will
   be given lower priority than problems with running Eclipse on a reference platform.</p>
-<p>Eclipse 3.6 is tested and validated on the following reference platforms:</p>
+<p>Eclipse 3.7 is tested and validated on the following reference platforms:</p>
 <style type="text/css">
 	table.platforms {
 		border-width: 1px;
@@ -89,8 +89,8 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
 			<td rowspan="6">Windows</td>
 			<td rowspan="2">7</td>
 			<td rowspan="1">x86 32-bit</td>
-			<td rowspan="2">Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11
+			<td rowspan="6">Oracle Java 6 Update 17<br/>
+				IBM Java 6 SR8
 			</td>
 			<td rowspan="6">Win32</td>
 		</tr>
@@ -100,62 +100,41 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
 		<tr>
 			<td rowspan="2">Vista</td>
 			<td rowspan="1">x86 32-bit</td>
-			<td>Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11<br/>
-				Oracle JRockit 27.6.5
-			</td>
 		</tr>
 		<tr class="c0">
 			<td rowspan="1">x86 64-bit</td>
-			<td>Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11
-			</td>
 		</tr>
 		<tr class="c0">
 			<td rowspan="2">XP</td>
 			<td rowspan="1">x86 32-bit</td>
-			<td>Sun Java 6 Update 17<br/>
-				Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11<br/>
-				Oracle JRockit 27.6.5
-			</td>
 		</tr>
 		<tr class="c0">
 			<td rowspan="1">x86 64-bit</td>
-			<td>Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11
-			</td>
 		</tr>
 		<!-- ************ RHEL ************** -->
 		<tr class="c1">
 			<td rowspan="3">Red Hat Enterprise Linux</td>
-			<td rowspan="2">5.0</td>
+			<td rowspan="3">6</td>
 			<td rowspan="1">x86 32-bit</td>
-			<td>Sun Java 6 Update 17<br/>
-				Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11<br/>
-				Oracle JRockit 27.6.5
+			<td rowspan="2">Oracle Java 6 Update 17<br/>
+				IBM Java 6 SR8
 			</td>
 			<td rowspan="3">GTK</td>
 		</tr>
 		<tr class="c1">
-			<td rowspan="1">Power 64-bit</td>
-			<td>IBM Java 5 SR11</td>
+			<td rowspan="1">x86 64-bit</td>
 		</tr>
 		<tr class="c1">
-			<td rowspan="1">4.0</td>
-			<td rowspan="1">x86 64-bit</td>
-			<td>Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11
-			</td>
+			<td rowspan="1">Power 64-bit</td>
+			<td>IBM Java 6 SR8</td>
 		</tr>
 		<!-- ************ SLES ************** -->
 		<tr class="c0">
 			<td rowspan="3">SUSE Linux Enterprise Server</td>
 			<td rowspan="3">11</td>
 			<td rowspan="1">x86 32-bit</td>
-			<td rowspan="2">Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11
+			<td rowspan="2">Oracle Java 6 Update 17<br/>
+				IBM Java 6 SR8
 			</td>
 			<td rowspan="3">GTK</td>
 		</tr>
@@ -164,15 +143,15 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
 		</tr>
 		<tr class="c0">
 			<td rowspan="1">Power 64-bit</td>
-			<td>IBM Java 5 SR11</td>
+			<td>IBM Java 6 SR8</td>
 		</tr>
 		<!-- ************ Ubuntu ************** -->
 		<tr class="c1">
 			<td rowspan="2">Ubuntu Long Term Support</td>
 			<td rowspan="2">10.04</td>
 			<td rowspan="1">x86 32-bit</td>
-			<td rowspan="2">Sun Java 5 Update 22<br/>
-				IBM Java 5 SR11
+			<td rowspan="2">Oracle Java 6 Update 17<br/>
+				IBM Java 6 SR8
 			</td>
 			<td rowspan="2">GTK</td>
 		</tr>
@@ -181,10 +160,10 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
 		</tr>
 		<!-- ************ Solaris ************** -->
 		<tr class="c0">
-			<td rowspan="2">Sun Solaris</td>
+			<td rowspan="2">Oracle Solaris</td>
 			<td rowspan="2">10</td>
 			<td rowspan="1">x86 32-bit</td>
-			<td rowspan="2">Sun Java 5 Update 22</td>
+			<td rowspan="2">Oracle Java 6 Update 17</td>
 			<td rowspan="2">GTK</td>
 		</tr>
 		<tr class="c0">
@@ -195,27 +174,23 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
 			<td rowspan="1">HP-UX</td>
 			<td rowspan="1">11i v2</td>
 			<td rowspan="1">ia64 32-bit</td>
-			<td rowspan="1">HP-UX Java 5 Update 18</td>
-			<td rowspan="1">Motif 2.1</td>
+			<td rowspan="1"> HP-UX Java 6 Update 10</td>
+			<td rowspan="1">GTK</td>
 		</tr>
 		<!-- ************ AIX ************** -->
 		<tr class="c0">
 			<td rowspan="1">IBM AIX</td>
 			<td rowspan="1">5.3</td>
-			<td rowspan="1">Power 32-bit</td>
-			<td rowspan="1">IBM Java 5 SR11</td>
-			<td rowspan="1">Motif 2.1</td>
+			<td rowspan="1">Power 64-bit</td>
+			<td rowspan="1">IBM Java 6 SR8</td>
+			<td rowspan="1">GTK</td>
 		</tr>
 		<!-- ************ Mac ************** -->
 		<tr class="c1">
-			<td rowspan="3">Apple Mac OS X</td>
-			<td rowspan="3">10.5</td>
-			<td rowspan="1">Universal</td>
-			<td rowspan="3">Apple Java 10.5 Update 2</td>
-			<td rowspan="1">Carbon</td>
-		</tr>
-		<tr class="c1">
+			<td rowspan="2">Apple Mac OS X</td>
+			<td rowspan="2">10.6</td>
 			<td rowspan="1">Universal 32-bit</td>
+			<td rowspan="2">Apple Java 10.6 Update 2</td>
 			<td rowspan="2">Cocoa</td>
 		</tr>
 		<tr class="c1">
@@ -232,67 +207,67 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
   user interface elements provided by the Eclipse SDK components, including dialogs
   and error messages, are externalized. The English strings are provided as the
   default resource bundles.</p>
-<p>Latin-1 and DBCS locales are supported by the Eclipse SDK on all reference platforms;
-  BIDI locales are supported by the Eclipse SDK everywhere but on Motif.</p>
+<p>Latin-1, DBCS, and BIDI locales are supported by the Eclipse SDK on all reference platforms.</p>
 <p>The Eclipse SDK supports GB 18030 (level 1), the Chinese code page standard,
-  on Windows XP and 2000, Linux/GTK and the Macintosh.</p>
+  on Windows, Linux and the Macintosh.</p>
 <p>German and Japanese locales are tested.</p>
 
 <h2>2. <a name="Compatibility"></a>Compatibility with Previous Releases</h2>
-<h3>Compatibility of Release 3.6 with 3.5</h3>
-<p>Eclipse 3.6 is compatible with Eclipse 3.5 (and all earlier 3.x versions).</p>
+<h3>Compatibility of Release 3.7 with 3.6</h3>
+<p>Eclipse 3.7 is compatible with Eclipse 3.6 (and all earlier 3.x versions).</p>
 
-<p><strong>API Contract Compatibility:</strong> Eclipse SDK 3.6 is upwards
-  contract-compatible with Eclipse SDK 3.5 except in those areas noted in the
-  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_6_porting_guide.html" target="_top">
-    <em>Eclipse 3.6 Plug-in Migration Guide</em>
+<p><strong>API Contract Compatibility:</strong> Eclipse SDK 3.7 is upwards
+  contract-compatible with Eclipse SDK 3.6 except in those areas noted in the
+  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_7_porting_guide.html" target="_top">
+    <em>Eclipse 3.7 Plug-in Migration Guide</em>
   </a>. Programs that use affected APIs and extension points will need to be ported
-  to Eclipse SDK 3.6 APIs. Downward contract compatibility
-  is not supported. There is no guarantee that compliance with Eclipse SDK 3.6
-  APIs would ensure compliance with Eclipse SDK 3.5 APIs. Refer to
+  to Eclipse SDK 3.7 APIs. Downward contract compatibility
+  is not supported. There is no guarantee that compliance with Eclipse SDK 3.7
+  APIs would ensure compliance with Eclipse SDK 3.6 APIs. Refer to
   <a href="http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs">
     <em>Evolving Java-based APIs</em>
   </a> for a discussion of the kinds of API changes that maintain contract compatibility.</p>
   
-<p><strong>Binary (plug-in) Compatibility:</strong> Eclipse SDK 3.6 is upwards
-  binary-compatible with Eclipse SDK 3.5 except in those areas noted in the
-  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_6_porting_guide.html" target="_top">
-    <em>Eclipse 3.6 Plug-in Migration Guide</em>
+<p><strong>Binary (plug-in) Compatibility:</strong> Eclipse SDK 3.7 is upwards
+  binary-compatible with Eclipse SDK 3.6 except in those areas noted in the
+  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_7_porting_guide.html" target="_top">
+    <em>Eclipse 3.7 Plug-in Migration Guide</em>
   </a>. Downward plug-in compatibility is not supported. Plug-ins for Eclipse SDK
-  3.6 will not be usable in Eclipse SDK 3.5. Refer to
+  3.7 will not be usable in Eclipse SDK 3.6. Refer to
   <a href="http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs">
     <em>Evolving Java-based APIs</em>
   </a> for a discussion of the kinds of API changes that maintain binary compatibility.</p>
   
-<p><strong>Source Compatibility:</strong> Eclipse SDK 3.6 is upwards source-compatible
-  with Eclipse SDK 3.5 except in the areas noted in the
-  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_6_porting_guide.html" target="_top">
-    <em>Eclipse 3.6 Plug-in Migration Guide</em>
+<p><strong>Source Compatibility:</strong> Eclipse SDK 3.7 is upwards source-compatible
+  with Eclipse SDK 3.6 except in the areas noted in the
+  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.platform.doc.isv/porting/eclipse_3_7_porting_guide.html" target="_top">
+    <em>Eclipse 3.7 Plug-in Migration Guide</em>
   </a>. This means that source files written
-  to use Eclipse SDK 3.5 APIs might successfully compile and run against Eclipse
-  SDK 3.6 APIs, although this is not guaranteed. Downward source compatibility
+  to use Eclipse SDK 3.6 APIs might successfully compile and run against Eclipse
+  SDK 3.7 APIs, although this is not guaranteed. Downward source compatibility
   is not supported. If source files use new Eclipse SDK APIs, they will not be
   usable with an earlier version of the Eclipse SDK. </p>
   
-<p><strong>Workspace Compatibility:</strong> Eclipse SDK 3.6 is upwards
+<p><strong>Workspace Compatibility:</strong> Eclipse SDK 3.7 is upwards
   workspace-compatible with earlier 3.x versions of the Eclipse SDK unless noted.
-  This means that workspaces and projects created with Eclipse SDK 3.5 .. 3.0 can be successfully
-  opened by Eclipse SDK 3.6 and upgraded to a 3.6 workspace. This includes both
+  This means that workspaces and projects created with Eclipse SDK 3.6 .. 3.0 can be successfully
+  opened by Eclipse SDK 3.7 and upgraded to a 3.7 workspace. This includes both
   hidden metadata, which is localized to a particular workspace, as well as metadata
   files found within a workspace project (e.g., the .project file), which may
   propagate between workspaces via file copying or team repositories. Individual
-  plug-ins developed for Eclipse SDK 3.6 should provide similar upwards compatibility
+  plug-ins developed for Eclipse SDK 3.7 should provide similar upwards compatibility
   for their hidden and visible workspace metadata created by earlier versions;
-  3.6 plug-in developers are responsible for ensuring that their plug-ins recognize
+  3.7 plug-in developers are responsible for ensuring that their plug-ins recognize
   metadata from earlier versions and process it appropriately. User
   interface session state may be discarded when a workspace is upgraded. Downward
   workspace compatibility is not supported. A workspace created (or opened) by
-  a product based on Eclipse 3.6 will be unusable with a product based on an earlier
+  a product based on Eclipse 3.7 will be unusable with a product based on an earlier
   version of Eclipse. Visible metadata files created (or overwritten) by Eclipse
-  3.6 will generally be unusable with earlier versions of Eclipse. </p>
+  3.7 will generally be unusable with earlier versions of Eclipse. </p>
   
 <p><strong>Non-compliant usage of API's</strong>: All non-API methods and classes,
-  and certainly everything in a package with "internal" in its name,
+  and certainly everything in a package with "internal" in its name or
+  x-internal in the bundle manifest entry,
   are considered implementation details which may vary between operating environment
   and are subject to change without notice. Client plug-ins that directly depend
   on anything other than what is specified in the Eclipse SDK API are inherently
@@ -335,8 +310,8 @@ OSI Certified is a certification mark of the Open Source Initiative. </stro
 <h4>Installation/Configuration issues that can cause Eclipse to fail start</h4>
 <p>Here are some common problems that can cause Eclipse not to start:</p>
 <ul>
-  <li>As shown <a href="#TargetOperatingEnvironments">above</a>, Eclipse 3.6 requires 
-    at least a 1.4.2 VM. Perhaps an older version of the VM is being found in 
+  <li>As shown <a href="#TargetOperatingEnvironments">above</a>, Eclipse 3.7 requires 
+    at least a Java SE 5. Perhaps an older version of the VM is being found in 
     your path. To explicitly specify which VM to run with, use the Eclipse <tt>-vm</tt> 
     command-line argument. (See also the <a href="#RunningEclipse">Running Eclipse</a> 
     section below.)</li>
@@ -420,10 +395,10 @@ Eg: <code>Build id: M20070212-1330 (Ubuntu version: 3.2.2-0ubuntu3)</code>
 
 It is imperative that 64-bit builds are downloaded and used if a 64-bit Java
 runtime environment has been installed. Below are two sample tarball names of
-version 3.6.0 of the Eclipse SDK packaged for 32-bit and 64-bit processors.
+version 3.7.0 of the Eclipse SDK packaged for 32-bit and 64-bit processors.
 
-<pre>eclipse-SDK-3.6-linux-gtk.tar.gz (32-bit)
-eclipse-SDK-3.6-linux-gtk-x86_64.tar.gz (64-bit)</pre>
+<pre>eclipse-SDK-3.7-linux-gtk.tar.gz (32-bit)
+eclipse-SDK-3.7-linux-gtk-x86_64.tar.gz (64-bit)</pre>
 
 <p>To run Eclipse with an alternate Java runtime environment, the path to the Java
 virtual machine's binary must be identified. With an Eclipse installation from
@@ -527,14 +502,6 @@ version of a plug-in that is already installed will have no effect. To change th
 of a plug-in installed in your system, you need to either perform an update, or install
 a feature patch.</p>
 
-<h4>XML files with UTF-8 byte order mark fail to have content type detected</h4>
-<p>Eclipse will fail to detect the proper content type for XML files that have a
-UTF-8 byte order mark if Crimson is the XML parser (as it is on Sun 1.4 JREs,
-but not on Sun 1.5 JREs). This
-problem will prevent actions normally available when files of the affected
-content types are selected from being presented to the user. The workaround is
-to ensure the default XML parser supports UTF-8 BOMs (such as Xerces does). (bug
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67048">67048</a>)</p>
 <h4>No branding with old config.ini</h4>
 <p>If you have an old config.ini file and use it with a new Eclipse build, you
 may not get the correct product branding. This is because the id of the standard
@@ -543,8 +510,7 @@ situation as previous builds of Eclipse automatically generated config.ini files
 in some cases. The work around is either to delete the local config.ini or
 update the eclipse.product line to read eclipse.product=org.eclipse.platform.ide.</p>
 
-<h4>Problems with
-classloaders in created threads</h4>
+<h4>Problems with classloaders in created threads</h4>
 <p>There is a known issue with trying to load classes from a newly-created
 thread using a class loader different from the plug-in class loader. The result
 will be a <code>ClassNotFoundException</code>. As a workaround, do the
@@ -561,8 +527,7 @@ be unpredictable. However, there should be no problem in practice provided you
 reset the context class loader back to its original value when your use in the
 current thread is complete. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=8907">8907</a>)</p>
 
-<h4>Deadlock creating executable
-extension in Plugin.startup</h4>
+<h4>Deadlock creating executable extension in Plugin.startup</h4>
 <p>If <code>Plugin.startup</code> code is too complex and performs tasks such
 as creating an executable extension, a deadlock situation can be created. Only
 simple bookkeeping tasks should be performed in <code>Plugin.startup</code>
@@ -650,11 +615,7 @@ void myCallback(void) {
 
 
 <h3>3.2.2 <a name="I-Platform-Ant">Platform - Ant</a></h3>
-<h4>UTF-8 encoded buildfiles with Byte Order Mark</h4>
-<p>UTF-8 encoded buildfiles with byte order marks will fail to be parsed correctly depending on the XML parser being used for the build. Therefore a valid buildfile will fail to build with an error message similar to: "BUILD FAILED: C:\workspace\bom.xml:1: Document root element is missing.". To succeed in building with these files, ensure to include Xerces jars on the Ant runtime classpath so that the Xerces parser is used to parse the XML. As well the context menu for these files in the Navigator or Package Explorer will not have the run shortcuts for Ant builds. (bug
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67048">67048</a>)</p>
-<h4> Custom Ant tasks and Ant
-types must be separate from plug-in library JARs</h4>
+<h4> Custom Ant tasks and Ant types must be separate from plug-in library JARs</h4>
 <p>Including the class files for custom Ant tasks or Ant types in the regular
 code JAR for your plug-in causes problems. These class files must be provided in
 a separate JAR that is contributed to the <code>org.eclipse.ant.core.antTasks</code>
@@ -666,30 +627,15 @@ special Ant class loader and not by a plug-in classloader. (bug <a href="https:/
 <p>Eclipse can run Ant in the same JVM as the rest of Eclipse. Several aspects
 of Ant and its use of global Java resources (such as System.out and System.err),
 make it unsafe to run more than one Ant build concurrently in the same JVM. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=24129">24129</a>).</p>
-<h4> Running certain Ant tasks
-cause memory leakage</h4>
-<p>Certain Ant tasks are known to leak memory. Please see the bug report for
-details, patches, and possible workarounds. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=24448">24448</a>)</p>
-<h4> Tasks that require input
-lock up workspace</h4>
-
-<p>As with using Ant from the command line, prompts for input from the
-console is not handled. This is not the same as making use of the <input>
-task, which works correctly within Eclipse. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=21748">21748</a>)</p>
-<h4>"version" property is always set when running Ant in the same VM as Eclipse</h4>
-<p>The Xalan libraries set system properties including a version property. These get set as properties within the Ant build and therefore the "version" property cannot be set within an Ant buildfile due to the immutable nature of Ant properties. This property will always be set to "2.4.1" for Ant builds in the same VM as Eclipse. (bug
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45717">45717</a>)</p>
-<h4>XDoclet support from within Eclipse</h4>
 
+<h4>XDoclet support from within Eclipse</h4>
 <p>Since there are differences when running Ant from the commandline and within Eclipse, some extra steps may be needed to have XDoclet support function correctly within Eclipse. Problems may occur creating XDoclet subtasks. The workarounds and full discussion can be found in bug report. (bug
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37070">37070</a>)</p>
-<h4>Ant Editor code completion based on Ant 1.6.1</h4>
-<p>Code completion provided by the Ant editor does not respect the user-specified version of org.eclipse.ant.core plug-in or ANT_HOME. Code completion proposals are mostly based on Ant 1.6.1 with some updates to Ant 1.6.5 (bug
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=30886">30886</a>)</p>
-<h4> Eclipse can hang due to implementation of the Ant <property> task (Windows 9X
-only)</h4>
-<p>On Windows 9X, using:<property environment="env"/> will cause Eclipse to hang if the build occurs in the same VM as Eclipse. Running the build in a separate VM will hang the build but not Eclipse.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44196">44196</a>)</p>
+
+<h4>Ant Editor code completion based on Ant 1.6.x</h4>
+<p>Code completion provided by the Ant editor does not respect the user-specified version of org.eclipse.ant.core plug-in or ANT_HOME. 
+Code completion proposals are mostly based on Ant 1.6.x with some updates to Ant 1.6.5 (bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=193046">bug 193046</a>)</p>
 
 <h4> Setting build loggers not supported when debugging Ant builds</h4>
 <p>When debugging Ant builds within Eclipse, setting -logger as a program argument will be ignored.</p>
@@ -705,13 +651,29 @@ The workaround is to first disable the builder for auto-builds and then rename t
 
 <h4>Slow typing/saving of the Ant editor with imports that define numerous macrodefs</h4>
 <p>The Ant editor is slow on saving with buildfiles that have <import> declarations of buildfiles that have numerous <macrodef>s.
-See bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=92640">92640</a> and <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=125117">125117</a> for possible workarounds</p>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=125117">125117</a> for a possible workaround</p>
 
 <h4>Failure to run Ant builds on non-Windows platforms if Eclipse installed in location with spaces in the path</h4>
 <p>Due to a bug in Ant 1.7.0, Ant builds will fail with an IllegalArgumentException if the Eclipse installation is in a location with spaces in the path.
 Embedded usage of Ant builds, such as plug-in export will also fail.
 See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=187993">187993</a> for possible workarounds</p>
 
+<h4>Ant 1.8.x reports missing libraries as build failures</h4>
+<p>
+In Ant 1.8.x, if you try to use a task that requires additional libraries and you do not have the libraries on the Ant classpath, the build will now properly report is failed. 
+In previous versions of Ant, the build would still report that it had suceeded even though it actually failed to run any of the tasks from additional bundles. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=344518">bug 344518</a>.
+</p>
+<p>
+For more information on tasks that require additional bundles please refer to the <a href="http://www.apache.org/dist/ant/RELEASE-NOTES-apache-ant-1.8.2.html">Ant 1.8.2 release notes</a>
+and the <a href="http://ant.apache.org/manual/install.html#optionalTasks">Optional Tasks</a> section in the At manual. 
+</p>
+
+<h4>Ant 1.8.x extension-point feature is not supported in the Ant editor</h4>
+<p>
+The extension-point feature added in Ant 1.8.x is not supported in the Ant editor, meaning there is no content assist or help support for it.
+See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324625">bug 324625</a> for more details. 
+</p>
+
 <h3>3.2.3 <a name="I-Platform-User-Assistance">Platform - User Assistance</a></h3>
 <h4>Welcome page not displayed properly (Linux/Unix)</h4>
 <p>The default Welcome implementation is HTML-based and requires a supported browser
@@ -778,54 +740,12 @@ Color Scheme drop down. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi
 XP High Contrast mode. You can select this mode by selecting Accessibility
 Options > Display > Use High Contrast from the Windows XP Control Panel
 menu.</p>
-<h4>Default text file encoding
-may be detected incorrectly (Windows XP/2000 only)</h4>
-
-<p><strong>Note</strong>: the bug report associated with this problem has been fixed. 
-If you run Eclipse with JDK 1.5 or greater you should not have to use the workaround 
-stated below any longer. However, the problem still exists when running Eclipse with 
-JDK 1.4.x or lower, so in this case  the workaround is still required . </p>
-<p>The "Text file encoding" value displayed in the Preferences
-  dialog under "Editors" may be wrong on platforms running Windows XP
-(or 2000) when the user locale and system locale differ. </p>
-<p>Example of the manifestation of the bug: A Japanese user using Japanese
-Windows 2000 works in New York, United States. The user has selected English
-(United States) as the user locale. The "Text file encoding" value
-displayed by Eclipse is incorrect: "Cp1252" (English). It should
-display the system locale "MS932" (Japanese).</p>
-<p>Workaround: The user can modify the user locale so that user locale and
-system locale are identical. In the example above, this means the user should
-set Japanese as the user locale. Then restart Eclipse. The "Text file
-encoding" value will then be correct: "MS932" (Japanese).</p>
-
-<p>For Windows XP:</p>
-<ul>
-  <li>To check the system locale: Open the Control Panel. Go to Regional and
-    Language Options. Switch to the Advanced tab. The system locale is specified
-    in "Language for non-Unicode programs".</li>
-  <li>To change the user locale: Open the Control Panel. Go to Regional and
-    Language Options. The user locale can be modified by changing the language
-    in "Standards and formats".</li>
-</ul>
-<p>For Windows 2000:</p>
-<ul>
-  <li>To check the system locale: Open the Control Panel. Go to Regional
-    Options. Look up the items in the General tab, inside the "Language
-    settings for the system" group. The system locale is the item marked as
-    (Default).</li>
-  <li>To change the user locale: Open the Control Panel. Go to Regional
-    Options. The user locale can be modified by changing the location in
-    "Settings for the current user".</li>
 
-</ul>
-<p>(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=20641">20641</a>)</p>
-<h4> Dirty state not tracked
-properly for OLE documents (Windows only)</h4>
+<h4> Dirty state not tracked properly for OLE documents (Windows only)</h4>
 <p>The dirty state for an OLE document is not updated properly. This causes
 Eclipse to prompt to save the contents of the editor when the document is
 closed, even if the contents have already been saved. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=2564">2564</a>)</p>
-<h4> OLE document crashes can
-cause Eclipse to also crash (Windows only)</h4>
+<h4> OLE document crashes can cause Eclipse to also crash (Windows only)</h4>
 <p>If an OLE document crashes, Eclipse can crash, or the workbench menus can
 become inconsistent.</p>
 <h4>2.1 Presentation based workspaces incorrectly get new Min/Max behavior</h4>
@@ -872,40 +792,12 @@ of Windows\System32\USP10.DLL in the Eclipse startup directory or uninstall
 Service Pack 2.
 (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56390">56390</a>)</p>
 
-<h4>Input Method broken (Motif only)</h4>
-<p>Some versions of RedHat Linux such as Fedora Core 3 and Enterprise Linux WS 
-release 4 use a new technology called IIIM (Intranet/Internet Input Method
-Framework) to replace the old XIM (X input method).   When running on these 
-new systems, Eclipse will crash if you attempt to enter any DBCS character.  The 
-workaround is to use a XIM based input method such as chinput.  This problem 
-may be fixed in newer releases of RedHat.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=89722">89722</a>)</p>
-
-<h4>Eclipse does not start on Linux-Motif with Xinerama and a UTF-8 locale</h4>
-<p>The Linux-motif build of Eclipse does not launch properly when run on a 
-computer with Xinerama (provides support for dual head monitors) and a UTF-8 
-locale.  The workaround for this problem is to change the locale to a non-UTF-8 
-value, or to disable Xinerama.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=38843">38843</a>)
-</p>
-
 <h4>Eclipse hangs when pasting from an unresponsive application (GTK only)</h4>
 <p>If the application that is supplying the clipboard material is unresponsive,
 the paste operation hangs Eclipse for several minutes. This situation can be
 encountered when copying from an Eclipse target workbench, suspending the target
 workbench at a breakpoint and pasting into the hosting Eclipse workbench. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44915">44915</a>)</p>
 
-<h4>Unable to drag data between applications in simplified Chinese locale (Motif only)</h4>
-<p>When configured for the simplified Chinese locale, it is not possible to
-drag data between applications running on the Motif window system. This is a
-known limitation of the Open Motif library. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=29777">29777</a>)</p>
-
-<h4>Crash when attempting to launch file browser (AIX Motif only)</h4>
-<p>There is a known AIX graphics bug affecting certain levels of AIX
-releases. Ensure that the AIX install includes the necessary service updates as
-described in the "Install notes/requirements for Eclipse on AIX"
-attachment to Eclipse bug report number <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=34524">34524</a>.</p>
-
 <h4>Available colors on 8-bit Linux (Linux only)</h4>
 <p>Typically, in Gnome Linux installs running with 8-bit visuals (i.e. 256
 color mode), before the Eclipse application is started there are no free colors.
@@ -913,27 +805,10 @@ This may mean that Eclipse is unable to allocate the default widget background
 color, causing it to display a white background. The functionality, however, is
 otherwise unaffected.</p>
 
-<h4>IME-related crash (Linux Motif only)</h4>
-<p>When using Linux Motif and GB18030 IME "chinput", Eclipse can
-crash if the IME client window is left open when the parent window is disposed.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=32045">32045</a>)</p>
-
 <h4>IME conversion problem (Solaris GTK only)</h4>
 <p>When typing Japanese text, the conversion to Kanji must be done one ideogram at
 a time. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=226636">226636</a>)</p>
 
-<h4> gtk_init_check and X11 socket failure when using the IBM 1.4.2 JRE (GTK only)</h4>
-<p>Under RHEL 3.1 with the IBM 1.4.2 JRE and a large number
-of plugins, Eclipse may fail to launch with an exception from
-<tt>gtk_init_check</tt> along with this error:</p>
-<pre>
-_X11TransSocketOpen: socket() failed for local
-_X11TransSocketOpenCOTSClient: Unable to open socket for local
-</pre>
-<p>A workaround is to set the environment variable <tt>JAVA_HIGH_ZIPFDS</tt> to
-a value of 500 before starting Eclipse. (bug
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106396">106396</a>)</p>
-
 <h4>Key bindings can stop working on Debian (GTK+ only)</h4>
 <p>On some versions of Debian, Eclipse key bindings may stop working.  In this context
 the only way to make the key bindings work again is to restart Eclipse.
@@ -991,7 +866,7 @@ differ from the visual representation of the selection. (bug <a href="https://bu
 <h4>Older versions of some Windows screen readers no longer work with Eclipse</h4>
 <p>JAWS versions 8 and 9 and Window-Eyes version 6 no longer work well with Eclipse and other SWT applications.
 Window-Eyes 6 will cause Eclipse to crash, and JAWS 8 and 9 can cause SWT applications to crash.
-This happens because IAccessible2 support was added to SWT for Eclipse 3.6, but these older screen reader versions contain
+This happens because IAccessible2 support was added to SWT for Eclipse 3.7, but these older screen reader versions contain
 partial implementations of IAccessible2 that do not follow the current IAccessible2 specification.</p>
 <p>
 The workaround for these cases is to specify Java property <code>org.eclipse.swt.accessibility.UseIA2</code> with value <code>false</code>,
@@ -999,6 +874,16 @@ which will instruct SWT to not attempt to use IA2 interfaces.  An easy way to se
 <code>-Dorg.eclipse.swt.accessibility.UseIA2=false</code> when launching Eclipse or your SWT application. (bug
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313182">313182</a>)</p>
 
+<h4>Drawing problems when using non-advanced graphics on recent GTK versions</h4>
+<p>On modern Linux distributions with a GTK version greater than 2.18, clipping problems and pixel corruption
+can occur if the SWT client uses non-advanced GC calls. These problems seem to be caused by low-level bugs
+in the interactions between GDK and X.</p>
+<p>
+The workaround for this problem is to specify Java property <code>org.eclipse.swt.internal.gtk.useCairo</code> with value <code>true</code>,
+which instructs SWT to always use Cairo for all GC calls (advanced graphics).  An easy way to set this property is to specify VM argument
+<code>-Dorg.eclipse.swt.internal.gtk.useCairo=true</code> when launching Eclipse or your SWT application.
+(bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345650">345650</a> and <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333965">333965</a>)</p>
+
 
 <h3>3.2.7 <a name="I-Platform-Team-CVS">Platform - Team - CVS</a></h3>
 <p>The following are known problems with the CVS repository provider only, and
@@ -1134,20 +1019,6 @@ not always suspend execution). The problem occurs on Windows and Linux
 platforms. This is an issue with the VM and not with Eclipse.
 The workaround is to use the <code>-XX:+UseParallelGC</code> VM option. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279137">279137</a>).
 
-<h4>Side effects of Step into Selection and Run to Line</h4>
-<p>The actions "Step into Selection" and "Run to Line"
-optimistically set breakpoints on the line the user has chosen to step into or
-run to. However, the debugger can not determine if or when execution will ever
-reach the chosen line. The breakpoints set by the underlying implementation are
-not visible to the user and can cause execution to suspend unexpectedly at a
-later time, when the associated line is actually executed. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51507">51507</a>)</p>
-
-<h4>Default locale initialization incorrect</h4>
-<p>The default locale is generally initialized from the settings in the
-operating system when a target VM is launched. However, when using javaw.exe on
-JDK1.4.2, Windows XP, the default locale is incorrectly initialized to en_US, no
-matter what the operating system settings are. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65945">65945</a>)</p>
-
 <h4>Some refactoring script operations fail with Sun 6.0 JREs</h4>
 <p>Creating and applying refactoring scripts sometimes fails with Sun 6.0 JREs
 due to a bug in the XML parser that is shipped with those VMs.
@@ -1277,11 +1148,6 @@ pop-up menu (or use the shortcut "delete" key). Associated system
 processes in the OS may not be properly cleaned up. If a debug target has no
 suspended threads, termination works properly. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=1631">1631</a>)
 
-
-<h4> Memory View (Linux only)</h4>
-The feature to automatically load segments of memory while scrolling in the Memory
-view does not work on Linux. Instead the user must use the "Next Page" and "Previous Page" actions
-to manually load memory segments (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=74559">74559</a>)
 <h4>Java 6 and MacOS</h4>
 Apple JavaSE-1.6 VMs only execute on 64-bit architectures but JDT will detect 1.6 VMs installed on 32-bit
 architectures when a new workspace is started or when the user presses the "Search..." button
@@ -1336,12 +1202,7 @@ org.eclipse.swt as binary with source attached. (bug <a href="https://bugs.eclip
 work in manifest editor fields</h4>
 <p>Non-default key bindings currently do not work in fields on non-source
 pages of the PDE manifest editors. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=19482">19482</a>)</p>
-<h4>Plug-in import wizard does
-not allow plug-ins of different versions to be imported</h4>
-<p>The Eclipse platform allows two plug-ins with the same ID but different
-versions to coexist if the only thing they contribute is run-time libraries.
-However, PDE cannot handle these plug-ins because it creates project names using
-plug-in Ids during binary project import. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=18500">18500</a>)</p>
+
 <h4>Export of plug-in may silently drop classes</h4>
 <p>When exporting a plug-in using the plug-in, feature or product wizards, some classes
 might be dropped from the resulting archive if their fully qualified name is too long.
@@ -1376,32 +1237,12 @@ This is because a target's runtime configuration only contains plug-ins specific
 (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=230146">230146</a>)
 </p>
 
-<h4>The org.osgi.util.tracker package is exported at wrong version</h4>
-<p>The Equinox OSGI Framework (org.eclipse.osgi) exports the org.osgi.util.tracker package
-at the incorrect version of 1.4.2.  The correct org.osgi.util.tracker package version for 
-the OSGi Release 4 Version 4.2 specification is version 1.4.0.  Bundles that 
-wish to run on other vendor frameworks should import the org.osgi.util.tracker package at
-version 1.4.0.  By default PDE will suggest the version 1.4.2 to be used when a bundle imports 
-the org.osgi.util.tracker package (using Import-Package manifest header).  Developers can 
-manually change the import to use 1.4.0 version of the package to be able to run on both
-Equinox and other vendor frameworks.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279622">279622</a>)
-</p>
-
-<h4>Importing plug-ins as source misses resources</h4>
-<p>When importing plug-ins as source (from associated binary plug-ins and source bundles), resources
-such as property files and images will not be imported into the workspace. The workaround is to retrieve
-projects from their associated CVS repository or import binary plug-ins with attached source (if the ability
-to edit the imported plug-ins is not required).
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280259">280259</a>)
-</p>
-
 <h2>4. <a name="RunningEclipse">Running Eclipse</a></h2>
 <p>After installing the Eclipse SDK in a directory, you can start the Workbench
-by running the Eclipse executable included with the release (you also need a 1.4.2
+by running the Eclipse executable included with the release (you also need a Java SE 5
 JRE, not included with the Eclipse SDK). On Windows, the executable file is called <samp>eclipse.exe</samp>,
 and is located in the <code>eclipse</code> sub-directory of the install. If
-installed at <code>c:\eclipse-SDK-3.6-win32</code>, the executable is <code>c:\eclipse-SDK-3.6-win32\eclipse\eclipse.exe</code>.
+installed at <code>c:\eclipse-SDK-3.7-win32</code>, the executable is <code>c:\eclipse-SDK-3.7-win32\eclipse\eclipse.exe</code>.
 
 <b>Note:</b> Set-up on most other operating environments is analogous. Special
 instructions for Mac OS X are listed <a href="#macosx">below</a>.</p>
@@ -1452,7 +1293,7 @@ dialog (or via the "<code>-data</code>" command line argument).</p>
 <p>Here is a typical Eclipse command line: </p>
 
 <blockquote>
-  <p><code>eclipse -vm c:\jdk1.4.2\jre\bin\javaw</code></p>
+  <p><code>eclipse -vm c:\jdk6u22\jre\bin\javaw</code></p>
 </blockquote>
 <p><i>Tip:</i> It's generally a good idea to explicitly specify which Java VM to
 use when running Eclipse. This is achieved with the "<code>-vm</code>"
@@ -1553,8 +1394,8 @@ list on start-up, or</li>
 </p>
 <h2>6. <a name="InteroperabilityWithPreviousReleases">Interoperability with
 Previous Releases</a></h2>
-<h3>6.1 Interoperability of Release 3.6 with previous releases</h3>
-<h4>Sharing projects between heterogeneous Eclipse 3.6 and 3.5</h4>
+<h3>6.1 Interoperability of Release 3.7 with previous releases</h3>
+<h4>Sharing projects between heterogeneous Eclipse 3.7 and 3.6</h4>
 <p>Special care is required when a project in a team repository is being loaded
 and operated on by developers using Eclipse-based products based on different
 feature or plug-in versions. The general problem is that the existence,
@@ -1562,2154 +1403,145 @@ contents, and interpretation of metadata files in the workspaces may be specific
 to a particular feature or plug-in version, and differ between versions. The
 workspace compatibility guarantees only cover cases where all developers upgrade
 their Eclipse workspaces in lock step. In those cases there should be no problem
-with shared metadata. However, when some developers are working in Eclipse 3.6
-while others are working in Eclipse 3.5, there are no such guarantees.
+with shared metadata. However, when some developers are working in Eclipse 3.7
+while others are working in Eclipse 3.6, there are no such guarantees.
 This section provides advice for what to do and not to do. It addresses the
 specific issues with the Eclipse SDK.</p>
 
-<p>The typical failure mode is noticed by the 3.6 user. 3.6 metadata is lost
-when a 3.5 user saves changes and then commits the updated metadata files to the
+<p>The typical failure mode is noticed by the 3.7 user. 3.7 metadata is lost
+when a 3.6 user saves changes and then commits the updated metadata files to the
 repository. Here's how things typically go awry:</p>
 <ul>
-  <li>A user working in Eclipse 3.6 creates or modifies a project in a way that
-    results in changes to a shared metadata file that rely on 3.6-specific
+  <li>A user working in Eclipse 3.7 creates or modifies a project in a way that
+    results in changes to a shared metadata file that rely on 3.7-specific
     information. The user then commits the updated project files, including the
     shared metadata file, to the shared repository.</li>
-  <li>Another user working in Eclipse 3.5 shares this project from the same
-    repository. The 3.6-specific information in the shared metadata file is not
-    understood by Eclipse 3.5, and is generally discarded or ignored without
+  <li>Another user working in Eclipse 3.6 shares this project from the same
+    repository. The 3.7-specific information in the shared metadata file is not
+    understood by Eclipse 3.6, and is generally discarded or ignored without
     warning. The user modifies the project in a way that results in changes to
     the shared metadata file, causing the shared metadata file to be rewritten
-    without any of the 3.6-specific information. The user commits the updated
+    without any of the 3.7-specific information. The user commits the updated
     project files, including the shared metadata file, to the shared repository.
     The user is generally unaware that shared information has just been lost as
     a result of their actions.</li>
-  <li>A user working in Eclipse 3.6 picks up the changes to a project from the
+  <li>A user working in Eclipse 3.7 picks up the changes to a project from the
     shared repository, including the updated shared metadata file. The user may
     be unaware that they have just taken a retrograde step until later when
     things start to malfunction.</li>
 </ul>
 <p>Here are some things to watch out for when sharing projects between
-Eclipse 3.6 and earlier 3.x releases:</p>
+Eclipse 3.7 and earlier 3.x releases:</p>
 <ul>
   <li><b>Virtual folders</b> - 
-  Eclipse 3.6 supports a notion of <i>virtual folders</i> that did not exist
-  in Eclipse 3.5 or earlier. If such virtual folders are created in 3.6, and the project
+  Eclipse 3.7 supports a notion of <i>virtual folders</i> that did not exist
+  in Eclipse 3.5 or earlier. If such virtual folders are created in 3.7, and the project
   is subsequently loaded into an Eclipse 3.5 or earlier workspace, these folders
   will not be recognized. Recommendation: avoid creating virtual folders where project
   compatibility with Eclipse 3.5 or earlier is required.</li>
   <li><b>Resource filters</b> - 
-  Eclipse 3.6 supports a notion of <i>resource filters</i> that did not exist
-  in Eclipse 3.5 or earlier. If such filters are added to resources in 3.6, and the project
+  Eclipse 3.7 supports a notion of <i>resource filters</i> that did not exist
+  in Eclipse 3.5 or earlier. If such filters are added to resources in 3.7, and the project
   is subsequently loaded into an Eclipse 3.5 or earlier workspace, these filters
   will not be recognized. Recommendation: avoid creating resource filters where project
   compatibility with Eclipse 3.5 or earlier is required.</li>
   <li><b>Predefined path variables</b> - 
-  Eclipse 3.6 supports a set of built in path variables that can be used as the basis
+  Eclipse 3.7 supports a set of built in path variables that can be used as the basis
   for linked resource locations. Such variables will not be defined automatically in 
   Eclipse 3.5 or earlier. If compatibility with 3.5 or earlier workspace is required,
   users on 3.5 or earlier workspaces will need to define such path variables manually.
   </li>
 </ul>
-<h4>Using Eclipse 3.6 to develop plug-ins that work in Eclipse 3.5</h4>
-<p>It is also possible (and reasonable) to use Eclipse 3.6 to develop a plug-in 
-  intended to work in Eclipse 3.5 or earlier. Use the <b>Plug-in Development > 
+<h4>Using Eclipse 3.7 to develop plug-ins that work in Eclipse 3.6</h4>
+<p>It is also possible (and reasonable) to use Eclipse 3.7 to develop a plug-in 
+  intended to work in Eclipse 3.6 or earlier. Use the <b>Plug-in Development > 
   Target Platform </b>preference page to locate non-workspace plug-ins in an Eclipse 
-  3.5 install. This ensures that the code for your plug-in is being compiled and 
-  tested against Eclipse 3.5 APIs, extension points, and plug-ins. (The above 
+  3.6 install. This ensures that the code for your plug-in is being compiled and 
+  tested against Eclipse 3.6 APIs, extension points, and plug-ins. (The above 
   list of concerns do not apply since they affect the layout and interpretation 
   of files in the plug-in <i>project</i> but none affect the actual deployed form 
   of the plug-in.)</p>
-  
-  
-  
-  <h2>7. <a name="DefectsFixed"></a>Defects Fixed in Maintenance Releases</h2>
 
-<h3>7.1 Defects fixed in release 3.6.2 since 3.6.1</h3>
-<p>Release 3.6.2 is a maintenance release to fix serious defects present in
-release 3.6.1 These changes only affect some plug-ins and
-features.</p>
-
-<p>Maintenance release 3.6.2 contains fixes for the following defects and others:</p>
-
-<p>
-Note: Bug fixes since the 3.6.1 release can be obtained by the following the Bugzilla query: </p> 
-<p>
-
-<a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc_type=allwordssubstr;bug_status=RESOLVED;bug_status=VERIFIED;bug_status=CLOSED;classification=Eclipse;classification=RT;field-1-0-0=bug_status;field-1-1-0=classification;field-1-2-0=product;field-1-3-0=resolution;field-1-4-0=target_milestone;field0-0-0=noop;keywords_type=allwords;long_desc_type=allwordssubstr;product=Equinox;product=JDT;product=PDE;product=Platform;query_format=advanced;remaction=;resolution=FIXED;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;target_milestone=3.6.2;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type-1-3-0=anyexact;type-1-4-0=anyexact;type0-0-0=noop;value-1-0-0=RESOLVED%2CVERIFIED%2CCLOSED;value-1-1-0=Eclipse%2CRT;value-1-2-0=Equinox%2CJDT%2CPDE%2CPlatform;value-1-3-0=FIXED;value-1-4-0=3.6.1;value0-0-0=|;query_based_on=">Bugs fixed in the 3.6.2 release</a>
-
-</p>
-
-
-
-
-
-<table class="bz_buglist" cellspacing="0" cellpadding="4" width="100%">
-    <tr class="bz_buglist_header bz_first_buglist_header">
-      <th colspan="1" class="first-child">
-        <a href="buglist.cgi?bug_file_loc_type=allwordssubstr&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&classification=Eclipse&classification=RT&columnlist=short_desc&field0-0-0=noop&keywords_type=allwords&long_desc_type=allwordssubstr&product=Equinox&product=JDT&product=PDE&product=Platform&query_format=advanced&remaction=&resolution=FIXED&short_desc=&short_desc_type=allwordssubstr&status_whiteboard=&status_whiteboard_type=allwordssubstr&target_milestone=3.6.2&type0-0-0=noop&value0-0-0=%7C&order=bug_id%20DESC&query_based_on=">ID</a>
-      </th>
+<hr/>
+<p>Sun, Solaris, Java and all Java-based trademarks are trademarks of Oracle Corporation.
+in the United States, other countries, or both.</p>
+<p>IBM is a trademark of International Business Machines Corporation in the
+United States, other countries, or both.</p>
+<p>Microsoft, Windows, Windows NT, Vista, and the Windows logo are trademarks of
+Microsoft Corporation in the United States, other countries, or both.</p>
+<p>Apple and Mac OS are trademarks of Apple Computer, Inc., registered in the
+U.S. and other countries.</p>
+<p>QNX, Neutrino, and Photon are trademarks or registered trademarks of QNX
+Software Systems Ltd.</p>
+<p>Other company, product, and service names may be trademarks or service marks
+of others.</p>
+<p>(c) Copyright IBM Corp. and others 2009, 2011</p>
 
-<th colspan="1">
-    <a href="buglist.cgi?bug_file_loc_type=allwordssubstr&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&classification=Eclipse&classification=RT&columnlist=short_desc&field0-0-0=noop&keywords_type=allwords&long_desc_type=allwordssubstr&product=Equinox&product=JDT&product=PDE&product=Platform&query_format=advanced&remaction=&resolution=FIXED&short_desc=&short_desc_type=allwordssubstr&status_whiteboard=&status_whiteboard_type=allwordssubstr&target_milestone=3.6.2&type0-0-0=noop&value0-0-0=%7C&order=short_desc%2Cbug_id&query_based_on=">Summary</a>
-  </th>
+<h2><a name="Appendix1">Appendix 1: Execution Environment by Bundle</a></h2>
 
+<p>In the table below, the "3.7 minimum execution environment"
+  column indicates the minimum Java class library requirements of each bundle
+  for the 3.7 release, where the value is one of:</p>
+<table border="0" width="90%">
+  <tbody>
+    <tr>
 
+      <td align="center"><b>Entry</b></td>
+      <td align="left"><b>Meaning</b></td>
     </tr>
+    <tr>
+      <td><div align="center"><strong>F1.0</strong></div></td>
+      <td>J2ME Foundation 1.0 - indicates that the bundle can only be run on
+        Foundation 1.0 or greater. Note that with the exception of some MicroEdition
+        IO classes, Foundation 1.0 is a subset of J2SE 1.3.</td>
+    </tr>
+    <tr>
+      <td><div align="center"><strong>F1.1</strong></div></td>
+      <td>J2ME Foundation 1.1 - indicates that the bundle can only be run on
+        Foundation 1.1 or greater. Note that with the exception of some MicroEdition
+        IO classes, Foundation 1.1 is a subset of J2SE 1.4.</td>
+    </tr>
+    <tr>
+      <td><div align="center"><strong>1.3</strong></div></td>
+      <td>J2SE 1.3 - indicates that the bundle can only be run on JSE 1.3 or
+        greater.</td>
+    </tr>
+    <tr>
+      <td><div align="center"><strong>1.4</strong></div></td>
+      <td>J2SE 1.4 - indicates that the bundle can only be run on JSE 1.4 or
+        greater.</td>
+    </tr>
+    <tr>
+      <td><div align="center"><strong>1.5</strong></div></td>
+      <td>Java SE 5 - indicates that the bundle can only be run on Java SE 5 or
+        greater.</td>
 
+    </tr>
+    <tr>
+      <td><div align="center"><strong>1.6</strong></div></td>
+      <td>Java SE 6 - indicates that the bundle can only be run on Java SE 6 or
+        greater.</td>
+    </tr>
+    <tr>
+      <td align="center"><b>n/a</b></td>
+      <td>Unknown at the time of this revision.</td>
+    </tr>
+  </tbody>
+</table>
 
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b210027"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=210027">210027</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">TreeModelLabelProvider does not cancel stale updates.
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b283320"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283320">283320</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[SWT] Widgets flashing when moving mouse while holding Alt button
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P2             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b301894"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301894">301894</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">OutOfMemory error when building a large project with annotations
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b302184"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302184">302184</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[About] About dialog text - needs to not cache system property values
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b307345"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307345">307345</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Browser][Mozilla][Mac]Can't use ctrl+f2 to move focus to the menu bar in Mozilla browser
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b312189"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312189">312189</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[quick assist] BadLocationException when applying proposal while preview is computed
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b317771"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317771">317771</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">FUP of 315978: Add performance tracking test for scenario fixed by bug# 315978
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_critical             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b319123"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319123">319123</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[launcher] Application becomes unresponsive when code completion tooltip shows
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b319337"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319337">319337</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Win32] WindowXP command "Close Group" can not close all the Eclipse window that in one group
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b321155"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321155">321155</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[DynamicGUI] UIExtensionTracker calling Display.syncExec() on disposed Display
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b323514"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323514">323514</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[indexing] The Java Indexer is taking longer to run in eclipse 3.6 when opening projects
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_critical             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b323763"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323763">323763</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Eclipse 3.7 M1 crashes as it is starting up - detected by Java Runtime Environment
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_critical             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b324102"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324102">324102</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Backspace key, delete key and tab stop working when my application is minimized
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b324236"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324236">324236</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Browser-Mozilla] Links and JS actions opening a new window do not work
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b324596"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324596">324596</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[releng][p2] consume ECF build for 3.6.1 maintenance
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b324801"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324801">324801</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">enable WebKitGTK on Linux-PPC
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b324892"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324892">324892</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Wrong constant values for some IA2 events
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_critical             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325028"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325028">325028</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[a11y] Frequent crashes in editor resulting from atk_object_get_attributes()
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325161"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325161">325161</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">NPE in Java breakpoint properties page with JavaStratumLineBreakpoint
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_critical             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325227"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325227">325227</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Backport] NatureManager is NOT threadsafe causing incorrect responses to isNatureEnabled() (and others)
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED             bz_secure             bz_secure_mode_manual             bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325294"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325294">325294</a>
-      <span style="display: none">[SEC]</span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[launcher] DLL hijacking exploit
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325557"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325557">325557</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Associating a Launch with Perspective "None" is not persisted
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325797"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325797">325797</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">views automatically opened based on debug context are hidden/closed on perspective switch
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325885"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325885">325885</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Dynamic import resolver bug
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED             bz_secure             bz_secure_mode_manual             bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325902"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325902">325902</a>
-      <span style="display: none">[SEC]</span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[launcher] Windows LoadLibrary search cwd DLL exploit
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b325946"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325946">325946</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] Provide a way to disable capping in the comparison algorithm
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326152"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326152">326152</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Memory View] new monitors added while Memory view is hidden or closed are not shown in the tree
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326263"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326263">326263</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Windows File Locks are obtained on bundles exporting extension points and not released.
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326351"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326351">326351</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">remove p2.selfhosting bundle from org.eclipse.releng/maps/p2.map
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326354"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326354">326354</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[3.6][compiler][regression] Compiler in 3.6 and 3.6.1 generates bad code
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326395"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326395">326395</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Backport] Cannot compare word documents
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326434"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326434">326434</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">New issues with NPE refreshing external folders with 3.6.1
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326453"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326453">326453</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">releng compare tool and pde api tooling should compare against 3.6.1 in 3.6.2 maintenance stream
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326516"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326516">326516</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">3.6.2 feature versions need to be incremented
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326532"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326532">326532</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">run compare tool against p2 repos instead of sdk (backport to 3.6.2)
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326541"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326541">326541</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Plan Verifier results not checked in reconciler
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326673"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326673">326673</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[WorkingSets] FileNotFoundException in WorkingSetManager
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b326958"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326958">326958</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">default ANT home directory lower than the Ant plugin version
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_trivial             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327138"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327138">327138</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Import/Export] WizardExportResourcesPage's Finish button isn't sensitive to Select/Deselect All
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327233"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327233">327233</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">p2 and equinox feature versions need to be incremented in 3.6.2 stream
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327234"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327234">327234</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">version of org.eclipse.core.resources needs to be incremented in 3.6.x stream
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327362"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327362">327362</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">setUrl() call navigates to about:blank prior to real url breaks IEWebHistory
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327425"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327425">327425</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] New option to not use capped algorithm misses documentation
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327446"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327446">327446</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Launch's wait for build logic does not check for autobuild correctly
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327560"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327560">327560</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Failed to create Citrix Client v12
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327654"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327654">327654</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">FUP of bug 317264: Refactoring is not possible if the commons-lang.jar is in the path
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327706"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327706">327706</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Headless build failure with Eclipse 3.6.1
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327772"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327772">327772</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">equinox.serverside.sdk version needs to be incremented to 3.6.1 in R3_6_maintenance stream
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327790"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327790">327790</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Widgets] Controls with null background inside Group or TabFolder do not display correctly in Cocoa
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_critical             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b327827"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327827">327827</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Webapp] Fix for Eclipse 3.6.2 - Eclipse help system content panel tree component is unusable by people using screen readers
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328145"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328145">328145</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[cocoa, gef] Guide markers not fully visible on Cocoa
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328151"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328151">328151</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[launcher] 3.6.2: Remember to compile for S390(x)
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328177"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328177">328177</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Project ant builder cannot run in headless context as it attempts to load a UI AntInputHandler (even when not in use)
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328295"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328295">328295</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Launch button disabled after failed launch
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328345"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328345">328345</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">version of org.eclipse.equinox.supplement needs to be incremented in 3.6.2 stream
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328350"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328350">328350</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">update location of platform zips used in p2 tests
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328400"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328400">328400</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">TextEdit computed incorrectly for inserting annotation before package declaration
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328826"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328826">328826</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">content.xml is too big (20 MB+)
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED             bz_secure             bz_secure_mode_manual             bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b328975"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328975">328975</a>
-      <span style="display: none">[SEC]</span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Webapp] Possible security issue with JSP code exposure.
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329129"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329129">329129</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Mac] Unhandled event loop exception when closing Error Log Event Details
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED             bz_secure             bz_secure_mode_manual             bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329193"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329193">329193</a>
-      <span style="display: none">[SEC]</span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Webapp] Possible security issue with JSP code exposure.
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329212"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329212">329212</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">OSGI app binaries do not inherit Java 2 security
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_enhancement             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329222"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329222">329222</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Request for AIX 64-bit gtk build in 3.6.2
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329223"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329223">329223</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Need 3.6.2 launcher for AIX 64 GTK
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329267"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329267">329267</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">3.6.1 download page should contain link to 3.6 new & noteworthy
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329288"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329288">329288</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Fetching parameter names literally hangs on a class with a lot of methods
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329303"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329303">329303</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Port AIX GTK 64 back to 3.6.2
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329333"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329333">329333</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Backport] Concurrent access to file while decorating
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329485"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329485">329485</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Help] Fix for 3.6.2 On WinXP bookmarks added from help view get name "N/A"
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329494"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329494">329494</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Help] Fix in Eclipse 3.6.2 - Jaws does not give enough context info when in Help pane
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329713"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329713">329713</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Webapp] Fix in 3.6.2 Wrong topic was selected in the TOC tree
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b329838"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329838">329838</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[KeyBindings] Exporting key preferences to CSV does not allow context being null
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED             bz_secure             bz_secure_mode_manual             bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330026"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330026">330026</a>
-      <span style="display: none">[SEC]</span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Webapp][Security] Fix for Eclipse 3.6.2 Eclipse Help Server XSS
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330030"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330030">330030</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">P2 Nullpointer Exception at RepositoryTransport.download
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330047"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330047">330047</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">PluginRegistry.findModel* throws IllegalArgumentExceptions
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330081"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330081">330081</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[compiler] ArrayIndexOutOfBoundsException when Switched from C/C++ Perspective to Java Perspective
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330122"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330122">330122</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[3.6 maint] HTMLTransfer broken from Firefox --> SWT [Carbon]
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330285"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330285">330285</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Commands] Stackoverflow in BindingSystem
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330310"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330310">330310</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[webapp] Regression: Capability filtering and "Show All" are missing in Eclipse 3.6
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330438"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330438">330438</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[ltk] NPE in UndoDocumentChange
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330460"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330460">330460</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[planner] p2 director does not install source bundles from optional features
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330463"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330463">330463</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Optimize manifest TouchPointData memory footprint for MetadataRepositories
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_critical             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330515"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330515">330515</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Help] Fix in 3.6.2 Remote Help HTTPS support is setting java.protocol.handler.pkgs=javax.net.ssl
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330549"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330549">330549</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Wizards] cancelable parameter does not disable Wizard progress bar cancel button
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330584"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330584">330584</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">org.eclipse.equinox.core.sdk needed to be tagged in 3.6.2 stream
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330605"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330605">330605</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">test 3.6.2 build with bundles from M20101117-1123 to fix p2 source generation problem
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330611"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330611">330611</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[launcher] Add mechanism for ignoring user specified config.ini values
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330815"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330815">330815</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">perf_35x baselines failing due to relocated archives
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330824"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330824">330824</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Graphics] Splash screen for SR2 should be updated to use Oracle's copyrights
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b330927"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330927">330927</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] Default external web browser not found when running 32-bit Eclipse on 64-bit Ubuntu 9.04
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b331303"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331303">331303</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] Regression: Convert line delimiter action enablement is broken
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b331563"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331563">331563</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Backport: [Import/Export]  Import file system doesn't include the top folder you select
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b331758"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331758">331758</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] performance regression caused by fix in 298835
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b331762"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331762">331762</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[repository] Share StringPool for Composite Repositories
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332041"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332041">332041</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Backport bug 162079: [PropertiesView] Properties view should be a post selection listener
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332095"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332095">332095</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[query] Repository query takes a long time when deleting a lot of IUs (from dropins)
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332098"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332098">332098</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Metadata generator should not create mkdir/rmdir actions for reconciler bundle
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332148"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332148">332148</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[native] Don't fail install when rmdir cannot delete empty directory
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332637"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332637">332637</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Dead Code detection removing code that isn't dead
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332639"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332639">332639</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] There are no changes for models  showing in the Synchronize view with Team > Merge operation.
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332640"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332640">332640</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] Team > Merge operation for project contains logical model always show no changes between two branches
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332686"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332686">332686</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport][Browser] Search for external browser in Preferences finds > 40 instances of firefox on Ubuntu 64bit, if started in /usr/bin
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b332709"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332709">332709</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Use JNI add an  window callback function to Shell, function can not be called.
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b333416"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333416">333416</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[backport] Call to IResource.setEncoding() persists derived file's encoding setting in .settings\org.eclipse.core.resources.prefs
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b333493"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333493">333493</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">disposed widget exception when closing editor with Browser with Ctrl+F4
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b333576"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333576">333576</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[jre] "JRE System Library" default not used properly after Java update
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b333898"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333898">333898</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[Preferences] [accessibility] Preferences Dialog menu button needs a tooltip
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334048"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334048">334048</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[3.6.2] Clicking on a checkbox in a CheckboxTreeViewer selects the row.
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_enhancement             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334160"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334160">334160</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[reconciler] Provide mechanism for specifying multiple non-default drop-ins folders
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_major             bz_P3             bz_VERIFIED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334161"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334161">334161</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Eclipse crashes if link to PDF with anchor is clicked twice from Browser Widget
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_CLOSED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334707"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334707">334707</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">[discovery] Cache jars downloaded by RemoteBundleDiscoveryStrategy
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334725"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334725">334725</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">Something whacky with the build ids
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334916"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334916">334916</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">About text needs to be updated to 2011
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_even             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334919"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334919">334919</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">org.eclipse.equinox.p2.sdk feature version needs to be incremented in 3.6.2 stream
-    </td>
-
-  </tr>
-
-
-
-  <tr class="bz_bugitem
-             bz_normal             bz_P3             bz_RESOLVED             bz_FIXED                                       bz_row_odd             ">
-
-    <td class="first-child bz_id_column">
-      <a name="b334947"
-         href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334947">334947</a>
-      <span style="display: none"></span>
-    </td>
-
-    <td 
-        class="bz_short_desc_column">swt bundles still have version 3.6.1 in 3.6.2 stream
-    </td>
-
-  </tr>
-
-
-
-</table>
-
-
-
-
-
-<span class="bz_result_count">115 bugs found.
-</span>
-
-
-
-
-
-<hr/>
-<p>Sun, Solaris, Java and all Java-based trademarks are trademarks of Oracle Corporation.
-in the United States, other countries, or both.</p>
-<p>IBM is a trademark of International Business Machines Corporation in the
-United States, other countries, or both.</p>
-<p>Microsoft, Windows, Windows NT, Vista, and the Windows logo are trademarks of
-Microsoft Corporation in the United States, other countries, or both.</p>
-<p>Apple and Mac OS are trademarks of Apple Computer, Inc., registered in the
-U.S. and other countries.</p>
-<p>QNX, Neutrino, and Photon are trademarks or registered trademarks of QNX
-Software Systems Ltd.</p>
-<p>Other company, product, and service names may be trademarks or service marks
-of others.</p>
-<p>(c) Copyright IBM Corp. and others 2009, 2010</p>
-
-<h2><a name="Appendix1">Appendix 1: Execution Environment by Bundle</a></h2>
-
-<p>In the table below, the "3.6 minimum execution environment"
-  column indicates the minimum Java class library requirements of each bundle
-  for the 3.6 release, where the value is one of:</p>
-<table border="0" width="90%">
-  <tbody>
-    <tr>
-
-      <td align="center"><b>Entry</b></td>
-      <td align="left"><b>Meaning</b></td>
-    </tr>
-    <tr>
-      <td><div align="center"><strong>F1.0</strong></div></td>
-      <td>J2ME Foundation 1.0 - indicates that the bundle can only be run on
-        Foundation 1.0 or greater. Note that with the exception of some MicroEdition
-        IO classes, Foundation 1.0 is a subset of J2SE 1.3.</td>
-    </tr>
-    <tr>
-      <td><div align="center"><strong>F1.1</strong></div></td>
-      <td>J2ME Foundation 1.1 - indicates that the bundle can only be run on
-        Foundation 1.1 or greater. Note that with the exception of some MicroEdition
-        IO classes, Foundation 1.1 is a subset of J2SE 1.4.</td>
-    </tr>
-    <tr>
-      <td><div align="center"><strong>1.3</strong></div></td>
-      <td>J2SE 1.3 - indicates that the bundle can only be run on JSE 1.3 or
-        greater.</td>
-    </tr>
-    <tr>
-      <td><div align="center"><strong>1.4</strong></div></td>
-      <td>J2SE 1.4 - indicates that the bundle can only be run on JSE 1.4 or
-        greater.</td>
-    </tr>
-    <tr>
-      <td><div align="center"><strong>1.5</strong></div></td>
-      <td>Java SE 5 - indicates that the bundle can only be run on Java SE 5 or
-        greater.</td>
-
-    </tr>
-    <tr>
-      <td><div align="center"><strong>1.6</strong></div></td>
-      <td>Java SE 6 - indicates that the bundle can only be run on Java SE 6 or
-        greater.</td>
-    </tr>
-    <tr>
-      <td align="center"><b>n/a</b></td>
-      <td>Unknown at the time of this revision.</td>
-    </tr>
-  </tbody>
-</table>
-
-<p><b>Table of minimum execution environments by bundle.</b> (See also the
-  <a href="http://www.eclipse.org/projects/project-plan.php?projectid=rt.equinox#appendix">Equinox Project plan</a>
-  for the execution environment requirements of bundles contributed via that project.)</p>
+<p><b>Table of minimum execution environments by bundle.</b> (See also the
+  <a href="http://www.eclipse.org/projects/project-plan.php?projectid=rt.equinox#appendix">Equinox Project plan</a>
+  for the execution environment requirements of bundles contributed via that project.)</p>
 
 <table border="1">
   <tbody>
     <tr>
       <td width="290"><strong>Bundle</strong></td>
-      <td width="60"><div align="center"><p align="center"><b>3.6<br/>minimum<br/>execution<br/>environment</b></p></div></td>
-    </tr>
-    <tr>
-      <td>aa.compute.bundle.ee</td>
-      <td><div align="center">1.5</div></td>
+      <td width="60"><div align="center"><p align="center"><b>3.7<br/>minimum<br/>execution<br/>environment</b></p></div></td>
     </tr>
     <tr>
       <td>com.ibm.icu</td>
-      <td><div align="center">F1.0</div></td>
+      <td><div align="center">1.5</div></td>
     </tr>
     <tr>
       <td>com.jcraft.jsch</td>
@@ -3749,11 +1581,15 @@ of others.</p>
     </tr>
     <tr>
       <td>org.apache.lucene</td>
-      <td><div align="center">not specified</div></td>
+      <td><div align="center">1.4</div></td>
     </tr>
     <tr>
       <td>org.apache.lucene.analysis</td>
-      <td><div align="center">not specified</div></td>
+      <td><div align="center">1.4</div></td>
+    </tr>
+    <tr>
+      <td>org.apache.lucene.core</td>
+      <td><div align="center">1.4</div></td>
     </tr>
     <tr>
       <td>org.eclipse.ant.core</td>
@@ -3824,28 +1660,16 @@ of others.</p>
       <td><div align="center">1.4</div></td>
     </tr>
     <tr>
-      <td>org.eclipse.core.filesystem.win32.x86</td>
-      <td><div align="center">not specified</div></td>
-    </tr>
-    <tr>
       <td>org.eclipse.core.jobs</td>
-      <td><div align="center">F1.0</div></td>
+      <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
       <td>org.eclipse.core.net</td>
       <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
-      <td>org.eclipse.core.net.win32.x86</td>
-      <td><div align="center">1.4</div></td>
-    </tr>
-    <tr>
       <td>org.eclipse.core.resources</td>
-      <td><div align="center">1.4</div></td>
-    </tr>
-    <tr>
-      <td>org.eclipse.core.resources.win32.x86</td>
-      <td><div align="center">not specified</div></td>
+      <td><div align="center">1.5</div></td>
     </tr>
     <tr>
       <td>org.eclipse.core.runtime</td>
@@ -3885,7 +1709,7 @@ of others.</p>
     </tr>
     <tr>
       <td>org.eclipse.ecf.filetransfer</td>
-      <td><div align="center">F1.0</div></td>
+      <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
       <td>org.eclipse.ecf.identity</td>
@@ -3961,11 +1785,7 @@ of others.</p>
     </tr>
     <tr>
       <td>org.eclipse.equinox.launcher</td>
-      <td><div align="center">M1.2</div></td>
-    </tr>
-    <tr>
-      <td>org.eclipse.equinox.launcher.win32.win32.x86</td>
-      <td><div align="center">not specified</div></td>
+      <td><div align="center">OSGi/Minimum-1.2</div></td>
     </tr>
     <tr>
       <td>org.eclipse.equinox.p2.artifact.repository</td>
@@ -4012,10 +1832,6 @@ of others.</p>
       <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
-      <td>org.eclipse.equinox.p2.metadata.generator</td>
-      <td><div align="center">1.4</div></td>
-    </tr>
-    <tr>
       <td>org.eclipse.equinox.p2.metadata.repository</td>
       <td><div align="center">F1.1</div></td>
     </tr>
@@ -4028,6 +1844,10 @@ of others.</p>
       <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
+      <td>org.eclipse.equinox.p2.publisher.eclipse</td>
+      <td><div align="center">1.5</div></td>
+    </tr>
+    <tr>
       <td>org.eclipse.equinox.p2.ql</td>
       <td><div align="center">F1.1</div></td>
     </tr>
@@ -4052,10 +1872,18 @@ of others.</p>
       <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
+      <td>org.eclipse.equinox.p2.transport.ecf</td>
+      <td><div align="center">1.4</div></td>
+    </tr>
+    <tr>
       <td>org.eclipse.equinox.p2.ui</td>
       <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
+      <td>org.eclipse.equinox.p2.ui.importexport</td>
+      <td><div align="center">F1.1</div></td>
+    </tr>
+    <tr>
       <td>org.eclipse.equinox.p2.ui.sdk</td>
       <td><div align="center">F1.1</div></td>
     </tr>
@@ -4088,7 +1916,7 @@ of others.</p>
       <td><div align="center">1.4</div></td>
     </tr>
     <tr>
-      <td>org.eclipse.equinox.security.win32.x86</td>
+      <td>org.eclipse.equinox.security.win32.x86_64</td>
       <td><div align="center">1.4</div></td>
     </tr>
     <tr>
@@ -4101,7 +1929,7 @@ of others.</p>
     </tr>
     <tr>
       <td>org.eclipse.equinox.util</td>
-      <td><div align="center">M1.1</div></td>
+      <td><div align="center">OSGi/Minimum-1.1</div></td>
     </tr>
     <tr>
       <td>org.eclipse.help</td>
@@ -4173,7 +2001,7 @@ of others.</p>
     </tr>
     <tr>
       <td>org.eclipse.jdt.junit</td>
-      <td><div align="center">1.4</div></td>
+      <td><div align="center">1.5</div></td>
     </tr>
     <tr>
       <td>org.eclipse.jdt.junit.core</td>
@@ -4193,7 +2021,7 @@ of others.</p>
     </tr>
     <tr>
       <td>org.eclipse.jdt.ui</td>
-      <td><div align="center">1.4</div></td>
+      <td><div align="center">1.5</div></td>
     </tr>
     <tr>
       <td>org.eclipse.jface</td>
@@ -4324,10 +2152,6 @@ of others.</p>
       <td><div align="center">F1.0</div></td>
     </tr>
     <tr>
-      <td>org.eclipse.swt.win32.win32.x86</td>
-      <td><div align="center">F1.0</div></td>
-    </tr>
-    <tr>
       <td>org.eclipse.team.core</td>
       <td><div align="center">1.4</div></td>
     </tr>
@@ -4445,7 +2269,7 @@ of others.</p>
     </tr>
     <tr>
       <td>org.eclipse.update.core</td>
-      <td><div align="center">F1.0</div></td>
+      <td><div align="center">F1.1</div></td>
     </tr>
     <tr>
       <td>org.eclipse.update.core.win32</td>
@@ -4491,7 +2315,7 @@ of others.</p>
       <td>org.sat4j.pb</td>
       <td><div align="center">1.4</div></td>
     </tr>
-    </tbody>
+  </tbody>
 </table>
 
 </body>
diff --git a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.platform/sourceTemplateFeature/build.properties
index fc2a706..a510593 100644
--- a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/build.properties
+++ b/eclipse/features/org.eclipse.platform/sourceTemplateFeature/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2009 IBM Corporation and others.
+#  Copyright (c) 2000, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -9,28 +9,26 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 bin.includes =\
-epl-v10.html,\
 eclipse_update_120.jpg,\
 feature.xml,\
-feature.properties,\
-license.html
+feature.properties
 
-generate.feature at org.eclipse.rcp.source=org.eclipse.rcp,plugin at com.ibm.icu.source;version=4.2.1.qualifier;unpack="false"
+generate.feature at org.eclipse.rcp.source=org.eclipse.rcp,plugin at com.ibm.icu.source;version=4.4.2.qualifier;unpack="false"
 generate.feature at org.eclipse.equinox.p2.user.ui.source=org.eclipse.equinox.p2.user.ui,\
-	   plugin at org.eclipse.ecf.source;version=3.0.0.qualifier;unpack="false",\
+	   feature at org.eclipse.equinox.p2.core.feature.source,\
+	   feature at org.eclipse.equinox.p2.extras.feature.source,\
+	   feature at org.eclipse.equinox.p2.rcp.feature.source,\
+	   plugin at org.eclipse.ecf.source;version=3.1.300.qualifier;unpack="false",\
 	   plugin at org.eclipse.ecf.ssl.source;version=1.0.100.qualifier;unpack="false",\
-	   plugin at org.eclipse.ecf.identity.source;version=3.0.0.qualifier;unpack="false",\
-	   plugin at org.eclipse.ecf.filetransfer.source;version=3.0.0.qualifier;unpack="false",\
-	   plugin at org.eclipse.ecf.provider.filetransfer.source;version=3.0.0.qualifier;unpack="false",\
+	   plugin at org.eclipse.ecf.identity.source;version=3.1.100.qualifier;unpack="false",\
+	   plugin at org.eclipse.ecf.filetransfer.source;version=5.0.0.qualifier;unpack="false",\
+	   plugin at org.eclipse.ecf.provider.filetransfer.source;version=3.2.0.qualifier;unpack="false",\
 	   plugin at org.eclipse.ecf.provider.filetransfer.ssl.source;version=1.0.0.qualifier;unpack="false",\
-	   plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source;version=3.0.0.qualifier;unpack="false",\
+	   plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source;version=4.0.0.qualifier;unpack="false",\
 	   plugin at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source;version=1.0.0.qualifier;unpack="false",\
 	   plugin at org.apache.commons.codec.source;version=1.3.0.qualifier;unpack="false,\
 	   plugin at org.apache.commons.httpclient.source;version=3.1.0.qualifier;unpack="false"   
-   
-
-
-
+    
 
 
 
diff --git a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.platform/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.platform/sourceTemplateFeature/feature.properties
index 8a1eab2..1feb7fa 100644
--- a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.platform/sourceTemplateFeature/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -20,12 +20,6 @@ featureName=Eclipse Platform Plug-in Developer Resources
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the update site
-secondaryUpdateSiteName=Helios Discovery Site
-
 # "description" property - description of the feature
 description=Common OS-independent API documentation and source code zips for the Eclipse Platform.
 
@@ -39,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.platform/sourceTemplateFeature/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.platform/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.platform/sourceTemplatePlugin/about.properties b/eclipse/features/org.eclipse.platform/sourceTemplatePlugin/about.properties
index 7e7d3a3..f7e2395 100644
--- a/eclipse/features/org.eclipse.platform/sourceTemplatePlugin/about.properties
+++ b/eclipse/features/org.eclipse.platform/sourceTemplatePlugin/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -21,6 +21,6 @@ blurb=Eclipse Platform Plug-in Developer Resources\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/platform
 
diff --git a/eclipse/features/org.eclipse.rcp/build.properties b/eclipse/features/org.eclipse.rcp/build.properties
index a7c7a0a..5095a23 100644
--- a/eclipse/features/org.eclipse.rcp/build.properties
+++ b/eclipse/features/org.eclipse.rcp/build.properties
@@ -8,7 +8,7 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-bin.includes=feature.xml,license.html,epl-v10.html,feature.properties,eclipse_update_120.jpg
+bin.includes=feature.xml,feature.properties,eclipse_update_120.jpg
 root=../org.eclipse.platform/rootfiles
 
 
diff --git a/eclipse/features/org.eclipse.rcp/epl-v10.html b/eclipse/features/org.eclipse.rcp/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.rcp/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.rcp/feature.properties b/eclipse/features/org.eclipse.rcp/feature.properties
index ddf35f4..11812c0 100644
--- a/eclipse/features/org.eclipse.rcp/feature.properties
+++ b/eclipse/features/org.eclipse.rcp/feature.properties
@@ -36,135 +36,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.rcp/feature.xml b/eclipse/features/org.eclipse.rcp/feature.xml
index 9c30767..1b0f07f 100644
--- a/eclipse/features/org.eclipse.rcp/feature.xml
+++ b/eclipse/features/org.eclipse.rcp/feature.xml
@@ -1,10 +1,13 @@
-<?xml version="1.0" encoding="UTF-8"?>
<feature
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
       id="org.eclipse.rcp"
       label="%featureName"
-      version="3.6.2.qualifier"
+      version="3.7.0.qualifier"
       provider-name="%providerName"
       plugin="org.eclipse.rcp"
-      image="eclipse_update_120.jpg">
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
@@ -20,8 +23,8 @@
 
    <url>
       <update label="%updateSiteName" url="http://download.eclipse.org/eclipse/updates/3.5"/>
-   </url>
-
+   </url>  
+    
    <plugin
          id="com.ibm.icu"
          download-size="0"
@@ -34,23 +37,23 @@
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>      
-        
-    <plugin
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.core.databinding"
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>         
+         unpack="false"/>
 
    <plugin
          id="org.eclipse.core.databinding.observable"
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>       
-             
-  <plugin
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.core.databinding.property"
          download-size="0"
          install-size="0"
@@ -98,7 +101,7 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-         
+
    <plugin
          id="org.eclipse.osgi.services"
          download-size="0"
@@ -157,17 +160,17 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.ui.cocoa"
          os="macosx"
-         ws="cocoa"    
+         ws="cocoa"
          download-size="0"
          install-size="0"
          version="0.0.0"
          fragment="true"
-         unpack="false"/> 
-                                  
+         unpack="false"/>
+
    <plugin
          id="org.eclipse.update.configurator"
          download-size="0"
@@ -214,8 +217,8 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.swt.gtk.linux.s390x"
          os="linux"
          ws="gtk"
@@ -225,8 +228,8 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.swt.gtk.linux.s390"
          os="linux"
          ws="gtk"
@@ -247,7 +250,7 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
+
    <plugin
          id="org.eclipse.swt.gtk.solaris.x86"
          os="solaris"
@@ -260,17 +263,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.swt.gtk.linux.ppc"
-         os="linux"
-         ws="gtk"
-         arch="ppc"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>
-         
-   <plugin
          id="org.eclipse.swt.gtk.linux.ppc64"
          os="linux"
          ws="gtk"
@@ -302,8 +294,8 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.swt.carbon.macosx"
          os="macosx"
          ws="carbon"
@@ -313,8 +305,8 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.swt.cocoa.macosx"
          os="macosx"
          ws="cocoa"
@@ -324,8 +316,8 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.swt.cocoa.macosx"
          os="macosx"
          ws="cocoa"
@@ -335,8 +327,8 @@
          version="0.0.0"
          fragment="true"
          unpack="false"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.swt.cocoa.macosx.x86_64"
          os="macosx"
          ws="cocoa"
@@ -345,46 +337,24 @@
          install-size="0"
          version="0.0.0"
          fragment="true"
-         unpack="false"/>           
+         unpack="false"/>
 
    <plugin
-         id="org.eclipse.swt.motif.aix.ppc"
+         id="org.eclipse.swt.gtk.aix.ppc"
          os="aix"
-         ws="motif"
+         ws="gtk"
          arch="ppc"
          download-size="0"
          install-size="0"
          version="0.0.0"
          fragment="true"
-         unpack="false"/>
         
    <plugin
         id="org.eclipse.swt.gtk.aix.ppc64"
         os="aix"
         ws="gtk"
         arch="ppc64"
         download-size="0"
         install-size="0"
         version="0.0.0"
         fragment="true"
         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.swt.motif.hpux.ia64_32"
-         os="hpux"
-         ws="motif"
-         arch="ia64_32"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.swt.motif.linux.x86"
-         os="linux"
-         ws="motif"
-         arch="x86"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>   
-
-   <plugin
-         id="org.eclipse.swt.motif.solaris.sparc"
-         os="solaris"
-         ws="motif"
-         arch="sparc"
+         id="org.eclipse.swt.gtk.aix.ppc64"
+         os="aix"
+         ws="gtk"
+         arch="ppc64"
          download-size="0"
          install-size="0"
          version="0.0.0"
@@ -392,10 +362,10 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.swt.photon.qnx.x86"
-         os="qnx"
-         ws="photon"
-         arch="x86"
+         id="org.eclipse.swt.gtk.hpux.ia64_32"
+         os="hpux"
+         ws="gtk"
+         arch="ia64_32"
          download-size="0"
          install-size="0"
          version="0.0.0"
@@ -428,22 +398,22 @@
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>         
-         
-    <plugin
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.equinox.ds"
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/>       
-        
-    <plugin
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.equinox.util"
          download-size="0"
          install-size="0"
          version="0.0.0"
          unpack="false"/>
- 
+
    <plugin
          id="org.eclipse.equinox.preferences"
          download-size="0"
@@ -474,8 +444,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.equinox.launcher.gtk.solaris.x86"
          os="solaris"
          ws="gtk"
@@ -494,8 +464,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.equinox.launcher.carbon.macosx"
          os="macosx"
          ws="carbon"
@@ -504,8 +474,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-    
-    <plugin
+
+   <plugin
          id="org.eclipse.equinox.launcher.cocoa.macosx"
          os="macosx"
          ws="cocoa"
@@ -514,8 +484,8 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
-    <plugin
+
+   <plugin
          id="org.eclipse.equinox.launcher.cocoa.macosx"
          os="macosx"
          ws="cocoa"
@@ -523,8 +493,8 @@
          download-size="0"
          install-size="0"
          version="0.0.0"
-         fragment="true"/>       
-            
+         fragment="true"/>
+
    <plugin
          id="org.eclipse.equinox.launcher.cocoa.macosx.x86_64"
          os="macosx"
@@ -533,19 +503,9 @@
          download-size="0"
          install-size="0"
          version="0.0.0"
-         fragment="true"/>
+         fragment="true"/>  
 
    <plugin
-         id="org.eclipse.equinox.launcher.gtk.linux.ppc"
-         os="linux"
-         ws="gtk"
-         arch="ppc"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-         
-   <plugin
          id="org.eclipse.equinox.launcher.gtk.linux.ppc64"
          os="linux"
          ws="gtk"
@@ -554,7 +514,6 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
 
    <plugin
          id="org.eclipse.equinox.launcher.gtk.linux.x86"
@@ -575,7 +534,7 @@
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-         
+
    <plugin
          id="org.eclipse.equinox.launcher.gtk.linux.s390"
          os="linux"
@@ -587,16 +546,6 @@
          fragment="true"/>
 
    <plugin
-         id="org.eclipse.equinox.launcher.motif.linux.x86"
-         os="linux"
-         ws="motif"
-         arch="x86"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
          id="org.eclipse.equinox.launcher.gtk.linux.x86_64"
          os="linux"
          ws="gtk"
@@ -607,26 +556,26 @@
          fragment="true"/>
 
    <plugin
-         id="org.eclipse.equinox.launcher.motif.aix.ppc"
+         id="org.eclipse.equinox.launcher.gtk.aix.ppc"
          os="aix"
-         ws="motif"
+         ws="gtk"
          arch="ppc"
          download-size="0"
          install-size="0"
          version="0.0.0"
          fragment="true"/>
-
 <plugin
         id="org.eclipse.equinox.launcher.gtk.aix.ppc64"
         os="aix"
         ws="gtk"
         arch="ppc64"
         download-size="0"
         install-size="0"
         version="0.0.0"
         fragment="true"/>
+
    <plugin
-         id="org.eclipse.equinox.launcher.motif.hpux.ia64_32"
-         os="hpux"
-         ws="motif"
-         arch="ia64_32"
+         id="org.eclipse.equinox.launcher.gtk.aix.ppc64"
+         os="aix"
+         ws="gtk"
+         arch="ppc64"
          download-size="0"
          install-size="0"
          version="0.0.0"
-         fragment="true"/>  
- 
-   <plugin
+         fragment="true"/>
+
+     <plugin
          id="org.eclipse.equinox.launcher.win32.win32.x86"
          os="win32"
          ws="win32"
@@ -646,5 +595,4 @@
          version="0.0.0"
          fragment="true"/>
 
-
 </feature>
diff --git a/eclipse/features/org.eclipse.rcp/license.html b/eclipse/features/org.eclipse.rcp/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.rcp/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/build.properties b/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/build.properties
index 787aab1..ef23cda 100644
--- a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/build.properties
+++ b/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/build.properties
@@ -9,10 +9,9 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 bin.includes =\
-epl-v10.html,\
 eclipse_update_120.jpg,\
 feature.xml,\
-feature.properties,\
-license.html
+feature.properties
+
 
 
diff --git a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/epl-v10.html b/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/feature.properties b/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/feature.properties
index 3e2d556..ae04e6a 100644
--- a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/feature.properties
+++ b/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/feature.properties
@@ -20,15 +20,12 @@ featureName=Eclipse RCP Plug-in Developer Resources
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
 description=Source code zips for the Eclipse RCP.
 
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
-Copyright (c) 2000, 2009 IBM Corporation and others.\n\
+Copyright (c) 2000, 2010 IBM Corporation and others.\n\
 All rights reserved. This program and the accompanying materials\n\
 are made available under the terms of the Eclipse Public License v1.0\n\
 which accompanies this distribution, and is available at\n\
@@ -36,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/license.html b/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.rcp/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/features/org.eclipse.rcp/sourceTemplateFragment/about.html b/eclipse/features/org.eclipse.rcp/sourceTemplateFragment/about.html
deleted file mode 100644
index c207d05..0000000
--- a/eclipse/features/org.eclipse.rcp/sourceTemplateFragment/about.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 10, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Source Code</h3>
-<p>This plug-in contains source code zip files ("Source Zips") that correspond to binary content in other plug-ins. These Source Zips may be distributed under different license
-agreements and/or notices. Details about these license agreements and notices are contained in "about.html" files ("Abouts") located in sub-directories in the
-src/ directory of this plug-in. Such Abouts govern your use of the Source Zips in that directory, not the EPL.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.rcp/sourceTemplatePlugin/about.properties b/eclipse/features/org.eclipse.rcp/sourceTemplatePlugin/about.properties
index 3553c5d..7a5cd91 100644
--- a/eclipse/features/org.eclipse.rcp/sourceTemplatePlugin/about.properties
+++ b/eclipse/features/org.eclipse.rcp/sourceTemplatePlugin/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2009 IBM Corporation and others.
+#  Copyright (c) 2000, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -21,6 +21,6 @@ blurb=Eclipse RCP Plug-in Developer Resources\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2009.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
 Visit http://www.eclipse.org/rcp
 
diff --git a/eclipse/features/org.eclipse.releng.tools/feature.properties b/eclipse/features/org.eclipse.releng.tools/feature.properties
index 642b24c..09fe6ca 100644
--- a/eclipse/features/org.eclipse.releng.tools/feature.properties
+++ b/eclipse/features/org.eclipse.releng.tools/feature.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -20,9 +20,6 @@ featureName=Eclipse Releng Tools
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
 # "description" property - description of the feature
 description=Eclipse Releng Tools
 
@@ -36,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.releng.tools/feature.xml b/eclipse/features/org.eclipse.releng.tools/feature.xml
index 5134072..b88e1fd 100644
--- a/eclipse/features/org.eclipse.releng.tools/feature.xml
+++ b/eclipse/features/org.eclipse.releng.tools/feature.xml
@@ -2,10 +2,12 @@
 <feature
       id="org.eclipse.releng.tools"
       label="%featureName"
-      version="3.3.0.qualifier"
+      version="3.4.100.qualifier"
       provider-name="%providerName"
-      image="eclipse_update_120.jpg">
-
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
+      
    <description>
       %description
    </description>
@@ -13,17 +15,11 @@
    <copyright>
       %copyright
    </copyright>
-   
+
    <license url="%licenseURL">
       %license
    </license>
 
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/eclipse/updates/3.5"/>
-      <discovery label="%updateSiteName" url="http://download.eclipse.org/eclipse/updates/3.5"/>
-      <discovery label="%secondaryUpdateSiteName" url="http://download.eclipse.org/releases/galileo"/>
-   </url>
-   
    <plugin
          id="org.eclipse.releng.tools"
          download-size="0"
diff --git a/eclipse/features/org.eclipse.sdk/build.properties b/eclipse/features/org.eclipse.sdk/build.properties
index 910df08..a265b27 100644
--- a/eclipse/features/org.eclipse.sdk/build.properties
+++ b/eclipse/features/org.eclipse.sdk/build.properties
@@ -8,20 +8,19 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-bin.includes=epl-v10.html,eclipse_update_120.jpg,feature.xml,feature.properties,license.html
+bin.includes=eclipse_update_120.jpg,feature.xml,feature.properties
 
 generate.feature at org.eclipse.platform.source=org.eclipse.platform,feature at org.eclipse.rcp.source,feature at org.eclipse.equinox.p2.user.ui.source;optional="true",plugin at org.eclipse.platform.doc.isv;unpack="false",\
-  plugin at org.apache.ant.source;version=1.7.1.qualifier;unpack="false",\
+  plugin at org.apache.ant.source;version=1.8.2.qualifier;unpack="false",\
   plugin at com.jcraft.jsch.source;version=0.1.41.qualifier;unpack="false",\
   exclude at org.eclipse.platform.doc.user
    
 generate.feature at org.eclipse.jdt.source=org.eclipse.jdt, plugin at org.eclipse.jdt.doc.isv;unpack="false",\
 plugin at org.junit.source;version=3.8.2.qualifier;unpack="false",\
-plugin at org.junit.source;version=4.8.1.qualifier;unpack="false",\
+plugin at org.junit.source;version=4.8.2.qualifier;unpack="false",\
 plugin at org.hamcrest.core.source;version=1.1.0.qualifier;unpack="false",\
 exclude at org.eclipse.jdt.doc.user
-generate.feature at org.eclipse.pde.source=org.eclipse.pde,plugin at org.objectweb.asm.source;version=3.2.0.qualifier;unpack="false",\exclude at org.eclipse.pde.doc.user
-generate.feature at org.eclipse.pde.p2.source=org.eclipse.pde.p2
+generate.feature at org.eclipse.pde.source=org.eclipse.pde,plugin at org.objectweb.asm.source;version=3.3.1.qualifier;unpack="false",\exclude at org.eclipse.pde.doc.user
 generate.feature at org.eclipse.cvs.source=org.eclipse.cvs
 generate.feature at org.eclipse.help.source=org.eclipse.help,\
   plugin at javax.servlet.source;version=2.5.0.qualifier;unpack="false",\
@@ -29,9 +28,10 @@ generate.feature at org.eclipse.help.source=org.eclipse.help,\
   plugin at org.apache.jasper.source;version=5.5.17.qualifier;unpack="false",\
   plugin at org.apache.commons.el.source;version=1.0.0.qualifier;unpack="false",\
   plugin at org.apache.commons.logging.source;version=1.0.4.qualifier;unpack="false",\
-  plugin at org.apache.lucene.source;version=1.9.1.qualifier;unpack="false",\
-  plugin at org.apache.lucene.analysis.source;version=1.9.1.qualifier;unpack="false",\
+  plugin at org.apache.lucene.source;version=2.9.1.qualifier;unpack="false",\
+  plugin at org.apache.lucene.analysis.source;version=2.9.1.qualifier;unpack="false",\
+  plugin at org.apache.lucene.core.source;version=2.9.1.qualifier;unpack="false",\
   plugin at org.mortbay.jetty.util.source;version=6.1.23.qualifier;unpack="false",\
   plugin at org.mortbay.jetty.server.source;version=6.1.23.qualifier;unpack="false"
 
-generatedVersionLength=45
\ No newline at end of file
+generatedVersionLength=45
diff --git a/eclipse/features/org.eclipse.sdk/epl-v10.html b/eclipse/features/org.eclipse.sdk/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/eclipse/features/org.eclipse.sdk/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
- at font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
- at page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Contributor" means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>"Program" means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>"Recipient" means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor ("Commercial
-Contributor") hereby agrees to defend and indemnify every other
-Contributor ("Indemnified Contributor") against any losses, damages and
-costs (collectively "Losses") arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.sdk/feature.properties b/eclipse/features/org.eclipse.sdk/feature.properties
index 84d8533..3d9b8dd 100644
--- a/eclipse/features/org.eclipse.sdk/feature.properties
+++ b/eclipse/features/org.eclipse.sdk/feature.properties
@@ -20,12 +20,6 @@ featureName=Eclipse Project SDK
 # "providerName" property - name of the company that provides the feature
 providerName=Eclipse.org
 
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the secondary update site
-secondaryUpdateSiteName=Helios Discovery Site
-
 # "description" property - description of the feature
 description=SDK for Eclipse.
 
@@ -39,135 +33,4 @@ http://www.eclipse.org/legal/epl-v10.html\n\
 \n\
 Contributors:\n\
     IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-Eclipse Foundation Software User Agreement\n\
-April 14, 2010\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the\n\
-Eclipse Foundation is provided to you under the terms and conditions of\n\
-the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
-provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse Foundation source code\n\
-repository ("Repository") in software modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-       - Content may be structured and packaged into modules to facilitate delivering,\n\
-         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-         plug-in fragments ("Fragments"), and features ("Features").\n\
-       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
-         in a directory named "plugins".\n\
-       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-       - The top-level (root) directory\n\
-       - Plug-in and Fragment directories\n\
-       - Inside Plug-ins and Fragments packaged as JARs\n\
-       - Sub-directories of the directory named "src" of certain Plug-ins\n\
-       - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
-Update License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties" found within a Feature.\n\
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
-terms and conditions (or references to such terms and conditions) that\n\
-govern your use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-\n\Use of Provisioning Technology\n\
-\n\
-The Eclipse Foundation makes available provisioning software, examples of which include,\n\
-but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
-the purpose of allowing users to install software, documentation, information and/or\n\
-other materials (collectively "Installable Software"). This capability is provided with\n\
-the intent of allowing such users to install, extend and update Eclipse-based products.\n\
-Information about packaging Installable Software is available at\n\
-http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
-\n\
-You may use Provisioning Technology to allow other parties to install Installable Software.\n\
-You shall be responsible for enabling the applicable license agreements relating to the\n\
-Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
-in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
-making it available in accordance with the Specification, you further acknowledge your\n\
-agreement to, and the acquisition of all necessary rights to permit the following:\n\
-\n\
-       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
-          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
-          extending or updating the functionality of an Eclipse-based product.\n\
-       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
-          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
-       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
-          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
-          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
-          with the Specification. Such Installable Software Agreement must inform the user of the\n\
-          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
-          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
-          indication of agreement by the user, the provisioning Technology will complete installation\n\
-          of the Installable Software.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use, and\n\
-re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
-########### end of license property ##########################################
\ No newline at end of file
+################ end of copyright property ####################################
\ No newline at end of file
diff --git a/eclipse/features/org.eclipse.sdk/feature.xml b/eclipse/features/org.eclipse.sdk/feature.xml
index f954c4a..0c232d5 100644
--- a/eclipse/features/org.eclipse.sdk/feature.xml
+++ b/eclipse/features/org.eclipse.sdk/feature.xml
@@ -2,9 +2,11 @@
 <feature
       id="org.eclipse.sdk"
       label="%featureName"
-      version="3.6.2.qualifier"
+      version="3.7.0.qualifier"
       provider-name="%providerName"
-      image="eclipse_update_120.jpg">
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.license"
+      license-feature-version="1.0.0.qualifier">
 
    <description>
       %description
@@ -18,12 +20,6 @@
       %license
    </license>
 
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/eclipse/updates/3.6"/>
-      <discovery label="%updateSiteName" url="http://download.eclipse.org/eclipse/updates/3.6"/>
-      <discovery label="%secondaryUpdateSiteName" url="http://download.eclipse.org/releases/helios"/>
-   </url>
-
    <includes
          id="org.eclipse.platform"
          version="0.0.0"/>
@@ -54,16 +50,16 @@
 
    <includes
          id="org.eclipse.pde.source"
-         version="0.0.0"/> 
- 
+         version="0.0.0"/>
+
    <includes
          id="org.eclipse.help"
          version="0.0.0"/>
-         
+
    <includes
          id="org.eclipse.help.source"
          version="0.0.0"/>
- 
+
    <plugin
          id="org.eclipse.sdk"
          download-size="0"
diff --git a/eclipse/features/org.eclipse.sdk/license.html b/eclipse/features/org.eclipse.sdk/license.html
deleted file mode 100644
index c184ca3..0000000
--- a/eclipse/features/org.eclipse.sdk/license.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!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=ISO-8859-1" />
-<title>Eclipse Foundation Software User Agreement</title>
-</head>
-
-<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 14, 2010</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-
-<h3>Applicable Licenses</h3>
-
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
-   repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-
-<ul>
-       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-       <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
-
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-       <li>The top-level (root) directory</li>
-       <li>Plug-in and Fragment directories</li>
-       <li>Inside Plug-ins and Fragments packaged as JARs</li>
-       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-       <li>Feature directories</li>
-</ul>
-
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-
-<h3>Use of Provisioning Technology</h3>
-
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
-   Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
-   other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
-   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
-       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
-   ("Specification").</p>
-
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
-   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
-   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
-   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
-
-<ol>
-       <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
-       on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
-       product.</li>
-       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
-       accessed and copied to the Target Machine.</li>
-       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
-       Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
-       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
-       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
-       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
-</body>
-</html>
diff --git a/eclipse/label.properties b/eclipse/label.properties
index 7b78f16..6531971 100644
--- a/eclipse/label.properties
+++ b/eclipse/label.properties
@@ -1,6 +1,6 @@
 
-			timestamp=20110308-1405
+			timestamp=20110627-1014
 			buildType=I
-			buildId=I20110308-1405
-			buildLabel=I20110308-1405
+			buildId=I20110627-1014
+			buildLabel=I20110627-1014
 		
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/ant.map b/eclipse/maps/org.eclipse.releng/maps/ant.map
index 4e55039..ef89400 100644
--- a/eclipse/maps/org.eclipse.releng/maps/ant.map
+++ b/eclipse/maps/org.eclipse.releng/maps/ant.map
@@ -1,13 +1,13 @@
 !***************  ANT CONTRIBUTION  ******************************************************** 
 
 #plugin at org.apache.ant=v20070416,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ant.core=v20110203_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ant.launching=v20101020_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.core=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.launching=v20110506,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ant.ui=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.ui=v20110510,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.externaltools=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.externaltools=v20100831_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.externaltools=v20110506,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.externaltools=v20110506,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ant.tests.core=v20091214,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ant.tests.ui=v20100602-1000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.ant.tests.core=v20110506,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ant.tests.ui=v20110506,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/compare.map b/eclipse/maps/org.eclipse.releng/maps/compare.map
index 3257354..b5706db 100644
--- a/eclipse/maps/org.eclipse.releng/maps/compare.map
+++ b/eclipse/maps/org.eclipse.releng/maps/compare.map
@@ -1,10 +1,10 @@
 !***************  COMPARE CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.compare=R36x_v20100929-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare
-plugin at org.eclipse.compare.core=R36x_v20100929-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.core
-plugin at org.eclipse.compare.win32=R36x_v20101103-0618,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.win32
+plugin at org.eclipse.compare=I20110525-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare
+plugin at org.eclipse.compare.core=I20110208-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.core
+plugin at org.eclipse.compare.win32=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.compare/plugins/org.eclipse.compare.win32
 
-plugin at org.eclipse.compare.examples=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.compare.examples.xml=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.compare.examples=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.compare.examples.xml=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.compare.tests=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.compare.tests=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/core-hpux.map b/eclipse/maps/org.eclipse.releng/maps/core-hpux.map
index b077860..2533a6e 100644
--- a/eclipse/maps/org.eclipse.releng/maps/core-hpux.map
+++ b/eclipse/maps/org.eclipse.releng/maps/core-hpux.map
@@ -1,3 +1,3 @@
 !***************  CORE (HP-UX) CONTRIBUTION  ************************************************ 
 
-fragment at org.eclipse.core.filesystem.hpux.ia64_32=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+fragment at org.eclipse.core.filesystem.hpux.ia64_32=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/core-macosx.map b/eclipse/maps/org.eclipse.releng/maps/core-macosx.map
index 2c24c98..0e40bad 100644
--- a/eclipse/maps/org.eclipse.releng/maps/core-macosx.map
+++ b/eclipse/maps/org.eclipse.releng/maps/core-macosx.map
@@ -1,3 +1,3 @@
 !***************  CORE (MacOSX) CONTRIBUTION  ************************************************ 
 
-fragment at org.eclipse.core.filesystem.macosx=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+fragment at org.eclipse.core.filesystem.macosx=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/core-variables.map b/eclipse/maps/org.eclipse.releng/maps/core-variables.map
index a4a4aff..3d761f9 100644
--- a/eclipse/maps/org.eclipse.releng/maps/core-variables.map
+++ b/eclipse/maps/org.eclipse.releng/maps/core-variables.map
@@ -1,3 +1,3 @@
 !***************  CORE VARIABLES CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.core.variables=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.core.variables=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/core.map b/eclipse/maps/org.eclipse.releng/maps/core.map
index d7ddfa4..10cd6ca 100644
--- a/eclipse/maps/org.eclipse.releng/maps/core.map
+++ b/eclipse/maps/org.eclipse.releng/maps/core.map
@@ -1,126 +1,147 @@
-!***************  CORE CONTRIBUTION  ******************************************************** 
+!***************  CORE CONTRIBUTION  ********************************************************* 
 
 !**** OSGi
-plugin at org.eclipse.osgi=R36x_v20110210,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
-plugin at org.eclipse.osgi.services=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services
-plugin at org.eclipse.osgi.util=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util
+plugin at org.eclipse.osgi=v20110613,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi
+plugin at org.eclipse.osgi.services=v20110513,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services
+plugin at org.eclipse.osgi.util=v20110110,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util
 
 !**** Equinox
-plugin at org.eclipse.equinox.common=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.common
-plugin at org.eclipse.equinox.preferences=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences
-plugin at org.eclipse.equinox.registry=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry
-plugin at org.eclipse.equinox.supplement=R36x_v20101021,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement
-plugin at org.eclipse.equinox.app=R36x_v20100803,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
-plugin at org.eclipse.equinox.device=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device
-plugin at org.eclipse.equinox.event=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event
-plugin at org.eclipse.equinox.http=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http
-plugin at org.eclipse.equinox.log=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.log
-plugin at org.eclipse.equinox.metatype=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.metatype
-plugin at org.eclipse.equinox.useradmin=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.useradmin
-plugin at org.eclipse.equinox.http.jetty,2.0.0=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6
-plugin at org.eclipse.equinox.http.jetty,1.1.100=v20100519,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty5
-plugin at org.eclipse.equinox.http.servlet=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.servlet
+plugin at org.eclipse.equinox.common=v20110523,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.common
+plugin at org.eclipse.equinox.preferences=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences
+plugin at org.eclipse.equinox.registry=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry
+plugin at org.eclipse.equinox.supplement=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement
+plugin at org.eclipse.equinox.app=v20110321,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app
+plugin at org.eclipse.equinox.device=v20101217,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device
+plugin at org.eclipse.equinox.event=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event
+plugin at org.eclipse.equinox.http=v20110413,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http
+plugin at org.eclipse.equinox.log=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.log
+plugin at org.eclipse.equinox.metatype=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.metatype
+plugin at org.eclipse.equinox.useradmin=v20110413,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.useradmin
+plugin at org.eclipse.equinox.http.jetty,2.0.0=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6
+plugin at org.eclipse.equinox.http.jetty,1.1.100=v20110418,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty5
+plugin at org.eclipse.equinox.http.servlet=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.servlet
 plugin at org.eclipse.equinox.http.servletbridge=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.servletbridge
-plugin at org.eclipse.equinox.http.registry=R36x_v20101103,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.registry
-plugin at org.eclipse.equinox.servletbridge=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge
+plugin at org.eclipse.equinox.http.registry=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.registry
+plugin at org.eclipse.equinox.servletbridge=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge
 fragment at org.eclipse.equinox.servletbridge.extensionbundle=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge.extensionbundle
-bundle at org.eclipse.equinox.jsp.jasper=R36x_v20101103,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper
+bundle at org.eclipse.equinox.jsp.jasper=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper
 bundle at org.eclipse.equinox.jsp.jasper.registry=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper.registry
-plugin at org.eclipse.equinox.cm=v20100520,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.cm
-plugin at org.eclipse.equinox.concurrent=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent
+plugin at org.eclipse.equinox.cm=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.cm
+plugin at org.eclipse.equinox.concurrent=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent
+plugin at org.eclipse.equinox.coordinator=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.coordinator
 
 !**** Prosyst Contributions
-plugin at org.eclipse.equinox.ds=R36x_v20100803,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
-plugin at org.eclipse.equinox.io=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io
-plugin at org.eclipse.equinox.ip=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip
-plugin at org.eclipse.equinox.util=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util
-plugin at org.eclipse.equinox.wireadmin=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.wireadmin
+plugin at org.eclipse.equinox.ds=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds
+plugin at org.eclipse.equinox.io=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io
+plugin at org.eclipse.equinox.ip=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip
+plugin at org.eclipse.equinox.util=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util
+plugin at org.eclipse.equinox.wireadmin=v20110601,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.wireadmin
 
 !**** Security Contributions
-plugin at org.eclipse.equinox.security=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security
-plugin at org.eclipse.equinox.security.tests=v20080722-0430,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.tests
-plugin at org.eclipse.equinox.security.ui=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.ui
+plugin at org.eclipse.equinox.security=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security
+plugin at org.eclipse.equinox.security.tests=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.tests
+plugin at org.eclipse.equinox.security.ui=v20101004,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.ui
 fragment at org.eclipse.equinox.security.win32.x86=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.win32.x86
+fragment at org.eclipse.equinox.security.win32.x86_64=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.win32.x86_64
 fragment at org.eclipse.equinox.security.macosx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.macosx
 
 !**** Transforms
 plugin at org.eclipse.equinox.transforms.xslt=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.xslt
-fragment at org.eclipse.equinox.transforms.hook=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.hook
+fragment at org.eclipse.equinox.transforms.hook=v20100719,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.hook
 
 !**** Weaving
-plugin at org.eclipse.equinox.weaving.aspectj=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj
-plugin at org.eclipse.equinox.weaving.caching=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching
-plugin at org.eclipse.equinox.weaving.caching.j9=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9
-fragment at org.eclipse.equinox.weaving.hook=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook
+plugin at org.eclipse.equinox.weaving.aspectj=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj
+plugin at org.eclipse.equinox.weaving.caching=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching
+plugin at org.eclipse.equinox.weaving.caching.j9=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9
+fragment at org.eclipse.equinox.weaving.hook=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook
 
 !****launcher, startup.jar
-plugin at org.eclipse.equinox.launcher=R36x_v20101122_1400,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher
-fragment at org.eclipse.equinox.launcher.win32.win32.x86=R36x_v20101222,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
-fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=R36x_v20101222,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
-fragment at org.eclipse.equinox.launcher.win32.win32.ia64=R36x_v20101222,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
-fragment at org.eclipse.equinox.launcher.wpf.win32.x86=R36x_v20101222,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
-fragment at org.eclipse.equinox.launcher.carbon.macosx=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
-fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
-fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
-fragment at org.eclipse.equinox.launcher.gtk.aix.ppc64=R36x_v20101102,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64
-fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
-fragment at org.eclipse.equinox.launcher.motif.aix.ppc=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
-fragment at org.eclipse.equinox.launcher.motif.linux.x86=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
-fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
-plugin at org.eclipse.equinox.launcher.releng=R36x_v20101019,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/releng/org.eclipse.equinox.launcher.releng
+plugin at org.eclipse.equinox.launcher=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher
+fragment at org.eclipse.equinox.launcher.win32.win32.x86=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86
+fragment at org.eclipse.equinox.launcher.win32.win32.x86_64=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64
+fragment at org.eclipse.equinox.launcher.win32.win32.ia64=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64
+fragment at org.eclipse.equinox.launcher.wpf.win32.x86=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86
+fragment at org.eclipse.equinox.launcher.carbon.macosx=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx
+fragment at org.eclipse.equinox.launcher.cocoa.macosx.x86_64=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.linux.x86_64=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc
+fragment at org.eclipse.equinox.launcher.gtk.linux.ppc64=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64
+fragment at org.eclipse.equinox.launcher.gtk.aix.ppc64=v20110530,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64
+fragment at org.eclipse.equinox.launcher.gtk.aix.ppc=v20110530,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc
+fragment at org.eclipse.equinox.launcher.gtk.hpux.ia64_32=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32
+fragment at org.eclipse.equinox.launcher.motif.hpux.ia64_32=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32
+fragment at org.eclipse.equinox.launcher.motif.aix.ppc=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc
+fragment at org.eclipse.equinox.launcher.motif.linux.x86=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86
+fragment at org.eclipse.equinox.launcher.gtk.solaris.sparc=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc
+plugin at org.eclipse.equinox.launcher.releng=v20101129,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/releng/org.eclipse.equinox.launcher.releng
 
 !****contributed fragments
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390=R36x_v20110125,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
-fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=R36x_v20110125,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
-fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
-fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=R36x_v20101019_1345,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390
+fragment at org.eclipse.equinox.launcher.gtk.linux.s390x=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x
+fragment at org.eclipse.equinox.launcher.gtk.solaris.x86=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86
+fragment at org.eclipse.equinox.launcher.motif.solaris.sparc=v20110505,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc
 
-feature at org.eclipse.equinox.executable=R36x_v20110125,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
+feature at org.eclipse.equinox.executable=v20110530,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable
 
 !**** Runtime
-plugin at org.eclipse.core.runtime=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.contenttype=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.jobs=R36x_v20100824,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.runtime=v20110110,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.contenttype=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.jobs=v20110404,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Expressions
-plugin at org.eclipse.core.expressions=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.expressions=v20110228,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.core.expressions.tests=v20091203,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Resources
-plugin at org.eclipse.core.resources=R36x_v20110131-1630,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.resources=v20110510-0712,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.core.resources.win32=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.resources.win32.x86=v20100505-1345,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.resources.win32.ia64=v20081020,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.resources.compatibility=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.resources.win32.x86=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.resources.win32.ia64=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.resources.compatibility=v20101108,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** File System
-plugin at org.eclipse.core.filesystem=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.x86_64=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.win32.ia64=R36x_v20100727-0745,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.linux.x86=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.linux.x86_64=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.linux.ppc=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.solaris.sparc=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.filesystem.aix.ppc=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.aix.ppc
+plugin at org.eclipse.core.filesystem=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.x86_64=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.win32.ia64=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.linux.x86=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.linux.x86_64=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.solaris.sparc=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.filesystem.aix.ppc=v20110423-0524,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.aix.ppc
 
 !**** Legacy Runtime
 plugin at org.eclipse.core.boot=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.core.runtime.compatibility=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.runtime.compatibility.auth=v20100517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.runtime.compatibility.registry=v20100520,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.runtime.compatibility.auth=v20110110,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.runtime.compatibility.registry=v20110505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Other Core Code
-plugin at org.eclipse.pde.build=R36x_20110203,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
-plugin at org.eclipse.pde.build.tests=R36x_v20110111,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
+plugin at org.eclipse.pde.build=v20110512-1320,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build
+plugin at org.eclipse.pde.build.tests=v20110512-1320,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests
 feature at org.eclipse.pde.builder=v20040624a,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build/feature
+feature at org.eclipse.pde.build.feature=v20110123,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.feature
+feature at org.eclipse.pde.build.product.feature=v20110123,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.product.feature
+
+!**** Features and Products
+feature at org.eclipse.core.runtime.feature=v20110124,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.equinox.compendium.sdk=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/compendium/features/org.eclipse.equinox.compendium.sdk
+feature at org.eclipse.equinox.core.feature=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/features/org.eclipse.equinox.core.feature
+feature at org.eclipse.equinox.core.sdk=CVS,tag=v20110506-0800,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/framework/features/org.eclipse.equinox.core.sdk
+feature at org.eclipse.equinox.sdk=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/features/org.eclipse.equinox.sdk
+feature at org.eclipse.equinox.starterkit.product.feature=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/features/org.eclipse.equinox.starterkit.product.feature
+feature at org.eclipse.equinox.server.core=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.core
+feature at org.eclipse.equinox.server.jetty=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.jetty
+feature at org.eclipse.equinox.server.p2=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.p2
+feature at org.eclipse.equinox.server.servletbridge=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.servletbridge
+feature at org.eclipse.equinox.server.simple=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.simple
+feature at org.eclipse.equinox.serverside.sdk=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.serverside.sdk
+feature at org.eclipse.equinox.weaving.sdk=CVS,tag=v20110502,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/weaving/features/org.eclipse.equinox.weaving.sdk
 
 !**** Test Suites
-plugin at org.eclipse.core.tests.harness=v20100505-1235,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.resources=R36x_v20110131-1630,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.runtime=R36x_v20101213,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.osgi.tests=R36x_v20101103,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
\ No newline at end of file
+plugin at org.eclipse.core.tests.harness=v20110505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.resources=v20110511-0607,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.runtime=v20110506,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.osgi.tests=v20110513,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/framework/bundles/org.eclipse.osgi.tests
+plugin at org.eclipse.equinox.ds.tests=v20110502,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds.tests
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/doc.map b/eclipse/maps/org.eclipse.releng/maps/doc.map
index 3919351..3cc8299 100644
--- a/eclipse/maps/org.eclipse.releng/maps/doc.map
+++ b/eclipse/maps/org.eclipse.releng/maps/doc.map
@@ -1,9 +1,9 @@
 !***************  DOC CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.platform.doc.user=r362_v20101117-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.platform.doc.isv=r362_v20110111,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.user=v20110601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.platform.doc.isv=v20110602-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.doc.user=r361_v20100721-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.doc.isv=r362_v20101117-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.user=v20110601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.doc.isv=v20110531-1242,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.pde.doc.user=v20101118_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
\ No newline at end of file
+plugin at org.eclipse.pde.doc.user=v20110601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/doc/org.eclipse.pde.doc.user
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/equinox-incubator.map b/eclipse/maps/org.eclipse.releng/maps/equinox-incubator.map
index 35aaecc..d041eb7 100644
--- a/eclipse/maps/org.eclipse.releng/maps/equinox-incubator.map
+++ b/eclipse/maps/org.eclipse.releng/maps/equinox-incubator.map
@@ -9,20 +9,30 @@ bundle at org.eclipse.equinox.initializer=v20100503,kmoir at dev.eclipse.org:/cvsroot/
 plugin at org.eclipse.equinox.jmx.client=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client
 plugin at org.eclipse.equinox.jmx.client.rmi=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.rmi
 plugin at org.eclipse.equinox.jmx.client.xmlrpc=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.xmlrpc
-feature at org.eclipse.equinox.jmx.client.feature=v20081124,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.feature
+feature at org.eclipse.equinox.jmx.client.feature=v20110511,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.feature
 
 !** Common **
 plugin at org.eclipse.equinox.jmx.common=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common
-feature at org.eclipse.equinox.jmx.common.feature=v20070507,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common.feature
+feature at org.eclipse.equinox.jmx.common.feature=v20110511,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common.feature
 
 !** Server **
 plugin at org.eclipse.equinox.jmx.server=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server
 plugin at org.eclipse.equinox.jmx.server.rmi=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.rmi
-plugin at org.eclipse.equinox.jmx.server.xmlrpc=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.xmlrpc
+plugin at org.eclipse.equinox.jmx.server.xmlrpc=v20110413,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.xmlrpc
 plugin at org.eclipse.equinox.jmx.vm=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.vm
 plugin at org.eclipse.equinox.preferences.jmx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.preferences.jmx
 plugin at org.eclipse.equinox.registry.jmx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.registry.jmx
-plugin at org.eclipse.osgi.jmx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.osgi.jmx
+plugin at org.eclipse.osgi.jmx=v20110414,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.osgi.jmx
 plugin at org.eclipse.swt.jmx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.swt.jmx
 plugin at org.eclipse.core.resources.jmx=v20100503,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.core.resources.jmx
-feature at org.eclipse.equinox.jmx.server.feature=v20081124,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.feature
\ No newline at end of file
+feature at org.eclipse.equinox.jmx.server.feature=v20110511,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.feature
+
+!** Console **
+plugin at org.eclipse.equinox.console.supportability=v20110207,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/console/org.eclipse.equinox.console.supportability
+
+!** Region **
+plugin at org.eclipse.equinox.region=v20110524,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.region
+plugin at org.eclipse.equinox.region.tests=v20110523,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/components/bundles/org.eclipse.equinox.region.tests
+
+!** Feature for all equinox incubatorbundles **
+feature at org.eclipse.equinox.incubator.feature=v20110511,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.incubator.feature
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/feature.map b/eclipse/maps/org.eclipse.releng/maps/feature.map
index 61fd2e9..8b6f29e 100644
--- a/eclipse/maps/org.eclipse.releng/maps/feature.map
+++ b/eclipse/maps/org.eclipse.releng/maps/feature.map
@@ -1,10 +1,10 @@
 !***************  FEATURE CONTRIBUTION  ******************************************************
-feature at org.eclipse.sdk=r362_v20100929,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
-plugin at org.eclipse.sdk=r362_v20110202,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.sdk=v20110426,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.sdk
+plugin at org.eclipse.sdk=v20110504-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.jdt=r362_v20101117-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
+feature at org.eclipse.jdt=v20110520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.jdt-feature
 
-feature at org.eclipse.pde=r362_v20110203,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
+feature at org.eclipse.pde=v20110504-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.pde-feature
 feature at org.eclipse.pde.api.tools.ee.cdcfoundation10_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10-feature
 feature at org.eclipse.pde.api.tools.ee.cdcfoundation11_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11-feature
 feature at org.eclipse.pde.api.tools.ee.j2se12_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12-feature
@@ -17,36 +17,22 @@ feature at org.eclipse.pde.api.tools.ee.osgiminimum10_feature=v20091027-1300,kmoir@
 feature at org.eclipse.pde.api.tools.ee.osgiminimum11_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11-feature
 feature at org.eclipse.pde.api.tools.ee.osgiminimum12_feature=v20091027-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12-feature
 
-feature at org.eclipse.platform=r362_v20110210,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
-plugin at org.eclipse.platform=r362_v20110120,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.platform=v20110530,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.platform-feature
+plugin at org.eclipse.platform=v20110520,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.sdk.examples=r362_v20101014,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.examples-feature
-plugin at org.eclipse.sdk.examples=v20100527,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.sdk.examples=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.examples-feature
+plugin at org.eclipse.sdk.examples=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.sdk.tests=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
-plugin at org.eclipse.sdk.tests=v20060605,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+feature at org.eclipse.sdk.tests=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/features/org.eclipse.sdk.tests
+plugin at org.eclipse.sdk.tests=v20100907,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-feature at org.eclipse.equinox.sdk=r362_v20110210b,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.equinox.sdk
+feature at org.eclipse.cvs=v20110520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature
+plugin at org.eclipse.cvs=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs
 
-feature at org.eclipse.cvs=r362_v20101111,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature
-plugin at org.eclipse.cvs=v20100414,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs
+feature at org.eclipse.help=v20110327,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.help-feature
 
-feature at org.eclipse.help=r362_v20101111,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.help-feature
+feature at org.eclipse.pde.api.tools.ee.fragments=v20110123,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.api.tools.ee.fragments
 
-feature at org.eclipse.equinox.p2.user.ui=r361_v20100903,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/org.eclipse.equinox.p2.releng/buildtime-features/org.eclipse.equinox.p2.user.ui
-
-feature at org.eclipse.equinox.p2.sdk=CVS,tag=R36x_v20110120,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.sdk
-feature at org.eclipse.equinox.p2.discovery.feature=CVS,tag=R36x_v20110210,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.discovery.feature
-feature at org.eclipse.equinox.core.sdk=CVS,tag=r36x_v20110210,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/framework/features/org.eclipse.equinox.core.sdk
-feature at org.eclipse.equinox.compendium.sdk=CVS,tag=R36x_v20101014,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/compendium/features/org.eclipse.equinox.compendium.sdk
-
-feature at org.eclipse.equinox.serverside.sdk=CVS,tag=R36x_v20101014,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.serverside.sdk
-feature at org.eclipse.equinox.server.core=CVS,tag=R36x_v20101007,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.core
-feature at org.eclipse.equinox.server.jetty=CVS,tag=v20100510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.jetty
-feature at org.eclipse.equinox.server.p2=CVS,tag=R36x_v20101007,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.p2
-feature at org.eclipse.equinox.server.servletbridge=CVS,tag=v20100510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.servletbridge
-feature at org.eclipse.equinox.server.simple=CVS,tag=v20100510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/server-side/features/org.eclipse.equinox.server.simple
-
-feature at org.eclipse.equinox.weaving.sdk=CVS,tag=v20100421,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/weaving/features/org.eclipse.equinox.weaving.sdk
-
-feature at org.eclipse.pde.api.tools.ee.fragments=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.api.tools.ee.fragments
\ No newline at end of file
+feature at org.eclipse.pde.junit.runtime.addon=v20110331,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.junit.runtime.addon
+feature at org.eclipse.pde.junit.runtime.standalone=v20110331,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.pde.junit.runtime.standalone
+feature at org.eclipse.license=v20110208,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.license
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtapt.map b/eclipse/maps/org.eclipse.releng/maps/jdtapt.map
index 390c22f..d667dcb 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtapt.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtapt.map
@@ -1,10 +1,10 @@
 
 !***************  JDT APT CONTRIBUTION *******************************************
 
-plugin at org.eclipse.jdt.apt.core=R36_v20110120-1000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.ui=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.tests=R36x_v20100707-0100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.jdt.compiler.apt=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.compiler.apt.tests=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.pluggable.core=R36_v20100727-0110,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.apt.pluggable.tests=v20100513-0845,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.jdt.apt.core=v20110420-1015,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.ui=v20110305-1450,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.tests=v20110305-1450,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.jdt.compiler.apt=v0110509-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.compiler.apt.tests=v0110509-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.pluggable.core=v20110305-1450,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.apt.pluggable.tests=v20110305-1450,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtcore.map b/eclipse/maps/org.eclipse.releng/maps/jdtcore.map
index 7408718..aaace43 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtcore.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtcore.map
@@ -1,11 +1,11 @@
 
-!*********************************** JDT CORE CONTRIBUTION ******************************************* 
+!*******************************  JDT CORE CONTRIBUTION ******************************************* 
 
-plugin at org.eclipse.jdt.core=v_A76_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.jdt.compiler.tool=v_A76_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core=v_B61,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.jdt.compiler.tool=v_B61,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.core.tests.builder=v_A76_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.compiler=v_A76_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.model=v_A76_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.core.tests.performance=v_A76_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.compiler.tool.tests=v_A76_R36x,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.jdt.core.tests.builder=v_B61,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.compiler=v_B61,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.model=v_B61,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.tests.performance=v_B61,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.compiler.tool.tests=v_B61,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map b/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map
index 3835400..63d4670 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtdebug.map
@@ -1,17 +1,17 @@
 !***************  DEBUG CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.debug.core=v20100519,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.ui=v20101201_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.debug=v20100715_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.debug.ui=v20100928a_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.launching=v20110105_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.launching.macosx=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.launching.ui.macosx=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.core=v20110518,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.ui=v20110518,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug=v20110509,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug.ui=v20110512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.launching=v20110509,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.launching.macosx=v20110509,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.launching.ui.macosx=v20110509,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.console=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.console=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.debug.tests=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.tests=v20100624_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.debug.tests=v20110509,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.tests=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.debug.examples.core=v20100505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.debug.examples.ui=v20100526,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.debug.examples.core=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.debug.examples.ui=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/jdtui.map b/eclipse/maps/org.eclipse.releng/maps/jdtui.map
index 24c5e66..2abd041 100644
--- a/eclipse/maps/org.eclipse.releng/maps/jdtui.map
+++ b/eclipse/maps/org.eclipse.releng/maps/jdtui.map
@@ -1,23 +1,23 @@
 !***************  JDT UI CONTRIBUTION  ******************************************************** 
-plugin at org.eclipse.search=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.search.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.search=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.search.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ltk.core.refactoring=r362_v20101117-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ltk.core.refactoring.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ltk.ui.refactoring=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ltk.ui.refactoring.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.core.refactoring=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.core.refactoring.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.ui.refactoring=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ltk.ui.refactoring.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.core.manipulation=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.core.manipulation=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.ui=r362_v20110203,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui.tests=r361_v20100818-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.ui.tests.refactoring=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui=v20110531-1200,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui.tests=v20110518-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.ui.tests.refactoring=v20110511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jdt.junit=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit.core=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit.runtime=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.junit4.runtime=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit.core=v20110518-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit.runtime=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.junit4.runtime=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 plugin at org.junit4=v20100525,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/orbit.map b/eclipse/maps/org.eclipse.releng/maps/orbit.map
index be3de03..017b67a 100644
--- a/eclipse/maps/org.eclipse.releng/maps/orbit.map
+++ b/eclipse/maps/org.eclipse.releng/maps/orbit.map
@@ -1,63 +1,69 @@
 !***************  ORBIT CONTRIBUTION  ********************************************************
-plugin at com.ibm.icu,4.2.1=p2IU,id=com.ibm.icu,version=4.2.1.v20100412,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.ibm.icu.base,4.2.1=p2IU,id=com.ibm.icu.base,version=4.2.1.v20100412,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.ibm.icu.base.source,4.2.1=p2IU,id=com.ibm.icu.base.source,version=4.2.1.v20100412,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.ibm.icu.source,4.2.1=p2IU,id=com.ibm.icu.source,version=4.2.1.v20100412,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.jcraft.jsch,0.1.41=p2IU,id=com.jcraft.jsch,version=0.1.41.v200903070017,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at com.jcraft.jsch.source,0.1.41=p2IU,id=com.jcraft.jsch.source,version=0.1.41.v200903070017,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.management,1.2.0=p2IU,id=javax.management,version=1.2.0.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.management.remote,1.0.0=p2IU,id=javax.management.remote,version=1.0.0.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet,2.4.0=p2IU,id=javax.servlet,version=2.4.0.v200806031604,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet,2.5.0=p2IU,id=javax.servlet,version=2.5.0.v200910301333,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.source,2.4.0=p2IU,id=javax.servlet.source,version=2.4.0.v200806031604,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.source,2.5.0=p2IU,id=javax.servlet.source,version=2.5.0.v200910301333,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.jsp,2.0.0=p2IU,id=javax.servlet.jsp,version=2.0.0.v200806031607,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at javax.servlet.jsp.source,2.0.0=p2IU,id=javax.servlet.jsp.source,version=2.0.0.v200806031607,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at net.sourceforge.mx4j,3.0.1=p2IU,id=net.sourceforge.mx4j,version=3.0.1.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at net.sourceforge.mx4j.remote,3.0.1=p2IU,id=net.sourceforge.mx4j.remote,version=3.0.1.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ant,1.7.1=p2IU,id=org.apache.ant,version=1.7.1.v20100518-1145,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ant.source,1.7.1=p2IU,id=org.apache.ant.source,version=1.7.1.v20100518-1145,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.codec,1.3.0=p2IU,id=org.apache.commons.codec,version=1.3.0.v20100518-1140,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.codec.source,1.3.0=p2IU,id=org.apache.commons.codec.source,version=1.3.0.v20100518-1140,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.el,1.0.0=p2IU,id=org.apache.commons.el,version=1.0.0.v201004212143,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.el.source,1.0.0=p2IU,id=org.apache.commons.el.source,version=1.0.0.v201004212143,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.httpclient,3.1.0=p2IU,id=org.apache.commons.httpclient,version=3.1.0.v201005080502,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.httpclient.source,3.1.0=p2IU,id=org.apache.commons.httpclient.source,version=3.1.0.v201005080502,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.logging,1.0.4=p2IU,id=org.apache.commons.logging,version=1.0.4.v201005080501,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.commons.logging.source,1.0.4=p2IU,id=org.apache.commons.logging.source,version=1.0.4.v201005080501,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.jasper,5.5.17=p2IU,id=org.apache.jasper,version=5.5.17.v201004212143,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.jasper.source,5.5.17=p2IU,id=org.apache.jasper.source,version=5.5.17.v201004212143,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.lucene,1.9.1=p2IU,id=org.apache.lucene,version=1.9.1.v20100518-1140,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.lucene.analysis,1.9.1=p2IU,id=org.apache.lucene.analysis,version=1.9.1.v20100518-1140,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.lucene.analysis.source,1.9.1=p2IU,id=org.apache.lucene.analysis.source,version=1.9.1.v20100518-1140,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ws.commons.util,1.0.0=p2IU,id=org.apache.ws.commons.util,version=1.0.0.v20100518-1135,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.ws.jaxme,0.5.1=p2IU,id=org.apache.ws.jaxme,version=0.5.1.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.xmlrpc,3.0.0=p2IU,id=org.apache.xmlrpc,version=3.0.0.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.easymock,2.4.0=p2IU,id=org.easymock,version=2.4.0.v20090202-0900,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.easymock.source,2.4.0=p2IU,id=org.easymock.source,version=2.4.0.v20090202-0900,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.hamcrest.core,1.1.0=p2IU,id=org.hamcrest.core,version=1.1.0.v20090501071000,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.hamcrest.core.source,1.1.0=p2IU,id=org.hamcrest.core.source,version=1.1.0.v20090501071000,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit,3.8.2=p2IU,id=org.junit,version=3.8.2.v3_8_2_v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit.source,3.8.2=p2IU,id=org.junit.source,version=3.8.2.v3_8_2_v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit,4.8.1=p2IU,id=org.junit,version=4.8.1.v4_8_1_v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.junit.source,4.8.1=p2IU,id=org.junit.source,version=4.8.1.v4_8_1_v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty,5.1.14=p2IU,id=org.mortbay.jetty,version=5.1.14.v200806031611,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.source,5.1.14=p2IU,id=org.mortbay.jetty.source,version=5.1.14.v200806031611,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.server,6.1.23=p2IU,id=org.mortbay.jetty.server,version=6.1.23.v201004211559,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.server.source,6.1.23=p2IU,id=org.mortbay.jetty.server.source,version=6.1.23.v201004211559,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.util,6.1.23=p2IU,id=org.mortbay.jetty.util,version=6.1.23.v201004211559,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.mortbay.jetty.util.source,6.1.23=p2IU,id=org.mortbay.jetty.util.source,version=6.1.23.v201004211559,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
+plugin at com.ibm.icu,4.4.2=p2IU,id=com.ibm.icu,version=4.4.2.v20110208,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.ibm.icu.base,4.4.2=p2IU,id=com.ibm.icu.base,version=4.4.2.v20110208,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.ibm.icu.base.source,4.4.2=p2IU,id=com.ibm.icu.base.source,version=4.4.2.v20110208,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.ibm.icu.source,4.4.2=p2IU,id=com.ibm.icu.source,version=4.4.2.v20110208,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.jcraft.jsch,0.1.41=p2IU,id=com.jcraft.jsch,version=0.1.41.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at com.jcraft.jsch.source,0.1.41=p2IU,id=com.jcraft.jsch.source,version=0.1.41.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.management,1.2.0=p2IU,id=javax.management,version=1.2.0.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.management.remote,1.0.0=p2IU,id=javax.management.remote,version=1.0.0.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet,2.4.0=p2IU,id=javax.servlet,version=2.4.0.v200806031604,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet,2.5.0=p2IU,id=javax.servlet,version=2.5.0.v201103041518,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.source,2.4.0=p2IU,id=javax.servlet.source,version=2.4.0.v200806031604,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.source,2.5.0=p2IU,id=javax.servlet.source,version=2.5.0.v201103041518,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.jsp,2.0.0=p2IU,id=javax.servlet.jsp,version=2.0.0.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at javax.servlet.jsp.source,2.0.0=p2IU,id=javax.servlet.jsp.source,version=2.0.0.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at net.sourceforge.mx4j,3.0.1=p2IU,id=net.sourceforge.mx4j,version=3.0.1.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at net.sourceforge.mx4j.remote,3.0.1=p2IU,id=net.sourceforge.mx4j.remote,version=3.0.1.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ant,1.8.2=p2IU,id=org.apache.ant,version=1.8.2.v20110505-1300,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ant.source,1.8.2=p2IU,id=org.apache.ant.source,version=1.8.2.v20110505-1300,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.codec,1.3.0=p2IU,id=org.apache.commons.codec,version=1.3.0.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.codec.source,1.3.0=p2IU,id=org.apache.commons.codec.source,version=1.3.0.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.el,1.0.0=p2IU,id=org.apache.commons.el,version=1.0.0.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.el.source,1.0.0=p2IU,id=org.apache.commons.el.source,version=1.0.0.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.httpclient,3.1.0=p2IU,id=org.apache.commons.httpclient,version=3.1.0.v201012070820,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.httpclient.source,3.1.0=p2IU,id=org.apache.commons.httpclient.source,version=3.1.0.v201012070820,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.logging,1.0.4=p2IU,id=org.apache.commons.logging,version=1.0.4.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.commons.logging.source,1.0.4=p2IU,id=org.apache.commons.logging.source,version=1.0.4.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.jasper,5.5.17=p2IU,id=org.apache.jasper,version=5.5.17.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.jasper.source,5.5.17=p2IU,id=org.apache.jasper.source,version=5.5.17.v201101211617,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene,2.9.1=p2IU,id=org.apache.lucene,version=2.9.1.v201101211721,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.source,2.9.1=p2IU,id=org.apache.lucene.source,version=2.9.1.v201101211721,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.analysis,2.9.1=p2IU,id=org.apache.lucene.analysis,version=2.9.1.v201101211721,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.analysis.source,2.9.1=p2IU,id=org.apache.lucene.analysis.source,version=2.9.1.v201101211721,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.core,2.9.1=p2IU,id=org.apache.lucene.core,version=2.9.1.v201101211721,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.lucene.core.source,2.9.1=p2IU,id=org.apache.lucene.core.source,version=2.9.1.v201101211721,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ws.commons.util,1.0.0=p2IU,id=org.apache.ws.commons.util,version=1.0.0.v20100518-1135,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.ws.jaxme,0.5.1=p2IU,id=org.apache.ws.jaxme,version=0.5.1.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.xmlrpc,3.0.0=p2IU,id=org.apache.xmlrpc,version=3.0.0.v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.easymock,2.4.0=p2IU,id=org.easymock,version=2.4.0.v20090202-0900,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.easymock.source,2.4.0=p2IU,id=org.easymock.source,version=2.4.0.v20090202-0900,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.hamcrest.core,1.1.0=p2IU,id=org.hamcrest.core,version=1.1.0.v20090501071000,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.hamcrest.core.source,1.1.0=p2IU,id=org.hamcrest.core.source,version=1.1.0.v20090501071000,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit,3.8.2=p2IU,id=org.junit,version=3.8.2.v3_8_2_v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit.source,3.8.2=p2IU,id=org.junit.source,version=3.8.2.v3_8_2_v20100427-1100,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit,4.8.2=p2IU,id=org.junit,version=4.8.2.v4_8_2_v20110321-1705,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.junit.source,4.8.2=p2IU,id=org.junit.source,version=4.8.2.v4_8_2_v20110321-1705,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty,5.1.14=p2IU,id=org.mortbay.jetty,version=5.1.14.v200806031611,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.source,5.1.14=p2IU,id=org.mortbay.jetty.source,version=5.1.14.v200806031611,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.server,6.1.23=p2IU,id=org.mortbay.jetty.server,version=6.1.23.v201012071420,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.server.source,6.1.23=p2IU,id=org.mortbay.jetty.server.source,version=6.1.23.v201012071420,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.util,6.1.23=p2IU,id=org.mortbay.jetty.util,version=6.1.23.v201012071420,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.mortbay.jetty.util.source,6.1.23=p2IU,id=org.mortbay.jetty.util.source,version=6.1.23.v201012071420,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
 
 # Bundles from Orbit for p2
-plugin at org.apache.xml.resolver,1.2.0=p2IU,id=org.apache.xml.resolver,version=1.2.0.v201005080400,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.apache.xerces,2.8.0=p2IU,id=org.apache.xerces,version=2.8.0.v200803070308,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.sat4j.core,2.2.0=p2IU,id=org.sat4j.core,version=2.2.0.v20100429,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.sat4j.pb,2.2.0=p2IU,id=org.sat4j.pb,version=2.2.0.v20100429,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
+plugin at org.apache.xml.resolver,1.2.0=p2IU,id=org.apache.xml.resolver,version=1.2.0.v201005080400,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.apache.xerces,2.8.0=p2IU,id=org.apache.xerces,version=2.8.0.v200803070308,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.sat4j.core,2.3.0=p2IU,id=org.sat4j.core,version=2.3.0.v20110329,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.sat4j.pb,2.3.0=p2IU,id=org.sat4j.pb,version=2.3.0.v20110329,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
 
 # Orbit bundles for API tooling
-plugin at org.objectweb.asm,3.2.0=p2IU,id=org.objectweb.asm,version=3.2.0.v200909071300,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
-plugin at org.objectweb.asm.source,3.2.0=p2IU,id=org.objectweb.asm.source,version=3.2.0.v200909071300,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20100519200754/repository
+plugin at org.objectweb.asm,3.3.1=p2IU,id=org.objectweb.asm,version=3.3.1.v201105211655,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
+plugin at org.objectweb.asm.source,3.3.1=p2IU,id=org.objectweb.asm.source,version=3.3.1.v201105211655,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
 
 #aspectj plugins for equinox weaving plugins
 plugin at org.aspectj.weaver,1.6.7=p2IU,id=org.aspectj.weaver,version=1.6.7.20091231194938,repository=http://fullmoon.ottawa.ibm.com/tools/ajdt/aspectj/update																   
 plugin at org.aspectj.runtime,1.6.7=p2IU,id=org.aspectj.runtime,version=1.6.7.20091231194938,repository=http://fullmoon.ottawa.ibm.com/tools/ajdt/aspectj/update
+
+# gogo needed for equinox incubator console
+plugin at org.apache.felix.gogo.runtime,0.6.1=p2IU,id=org.apache.felix.gogo.runtime,version=0.6.1.v20110414-1850,repository=http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/R20110523182458/repository
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/p2.map b/eclipse/maps/org.eclipse.releng/maps/p2.map
index 4a6abff..f8d7505 100644
--- a/eclipse/maps/org.eclipse.releng/maps/p2.map
+++ b/eclipse/maps/org.eclipse.releng/maps/p2.map
@@ -1,44 +1,54 @@
-plugin at org.eclipse.equinox.frameworkadmin=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin
-plugin at org.eclipse.equinox.frameworkadmin.equinox=CVS,tag=v20100505,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox
-plugin at org.eclipse.equinox.frameworkadmin.test=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.test
-plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=R36x_v20100901,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
-plugin at org.eclipse.equinox.p2.console=CVS,tag=v20100601,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console
-plugin at org.eclipse.equinox.p2.core=CVS,tag=R36x_v20110111,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
-plugin at org.eclipse.equinox.p2.director=CVS,tag=R36x_v20101117-1018,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
-plugin at org.eclipse.equinox.p2.director.app=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
-plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=R36x_v20101220,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
-plugin at org.eclipse.equinox.p2.discovery=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery
-plugin at org.eclipse.equinox.p2.discovery.compatibility=CVS,tag=v20110204-1323,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility
-plugin at org.eclipse.equinox.p2.engine=CVS,tag=R36x_v20110201,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine
-plugin at org.eclipse.equinox.p2.extensionlocation=CVS,tag=v20100518,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation
-plugin at org.eclipse.equinox.p2.garbagecollector=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.garbagecollector
-plugin at org.eclipse.equinox.p2.installer=CVS,tag=v20100503a,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.installer
-plugin at org.eclipse.equinox.p2.jarprocessor=CVS,tag=v20100503a,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.jarprocessor
-plugin at org.eclipse.equinox.p2.metadata=CVS,tag=R36x_v20101202,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata
-plugin at org.eclipse.equinox.p2.metadata.generator=CVS,tag=R36x_v20101208-1400,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.generator
-plugin at org.eclipse.equinox.p2.metadata.repository=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository
-plugin at org.eclipse.equinox.p2.operations=CVS,tag=v20100510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations
-plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20100824-2220,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
-plugin at org.eclipse.equinox.p2.reconciler.dropins=CVS,tag=R36x_v20110114,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins
-plugin at org.eclipse.equinox.p2.repository=CVS,tag=R36x_v20110111-1500,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
-plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
-plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=R36x_v20101202,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
-plugin at org.eclipse.equinox.p2.touchpoint.natives=CVS,tag=R36x_v20110111,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives
-plugin at org.eclipse.equinox.p2.ui=CVS,tag=v20100518,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui
-plugin at org.eclipse.equinox.p2.ui.admin=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin
-plugin at org.eclipse.equinox.p2.ui.discovery=CVS,tag=v20100519,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery
-plugin at org.eclipse.equinox.p2.ui.sdk=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk
-plugin at org.eclipse.equinox.p2.ui.sdk.scheduler=CVS,tag=v20100507-1815,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler
-plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
-plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
-plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=R36x_v20100823,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
-plugin at org.eclipse.equinox.simpleconfigurator=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator
-plugin at org.eclipse.equinox.simpleconfigurator.manipulator=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator
-plugin at org.eclipse.equinox.p2.tests=CVS,tag=R36x_v20101202,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
-plugin at org.eclipse.equinox.p2.tests.discovery=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.discovery
-plugin at org.eclipse.equinox.p2.tests.ui=CVS,tag=v20100513,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.ui
-plugin at org.eclipse.equinox.p2.tests.verifier=CVS,tag=v20100503,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.verifier
-plugin at org.eclipse.equinox.p2.ql=CVS,tag=v20100503a,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ql
+plugin at org.eclipse.equinox.frameworkadmin=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin
+plugin at org.eclipse.equinox.frameworkadmin.equinox=CVS,tag=v20110506,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox
+plugin at org.eclipse.equinox.frameworkadmin.test=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.test
+plugin at org.eclipse.equinox.p2.artifact.repository=CVS,tag=v20110519,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository
+plugin at org.eclipse.equinox.p2.console=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console
+plugin at org.eclipse.equinox.p2.core=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core
+plugin at org.eclipse.equinox.p2.director=CVS,tag=v20110504-1715,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director
+plugin at org.eclipse.equinox.p2.director.app=CVS,tag=v20110505,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app
+plugin at org.eclipse.equinox.p2.directorywatcher=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher
+plugin at org.eclipse.equinox.p2.discovery=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery
+plugin at org.eclipse.equinox.p2.discovery.compatibility=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility
+plugin at org.eclipse.equinox.p2.engine=CVS,tag=v20110511,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine
+plugin at org.eclipse.equinox.p2.extensionlocation=CVS,tag=v20110510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation
+plugin at org.eclipse.equinox.p2.garbagecollector=CVS,tag=v20110510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.garbagecollector
+plugin at org.eclipse.equinox.p2.installer=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.installer
+plugin at org.eclipse.equinox.p2.jarprocessor=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.jarprocessor
+plugin at org.eclipse.equinox.p2.metadata=CVS,tag=v20110510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata
+plugin at org.eclipse.equinox.p2.metadata.repository=CVS,tag=v20110511-1359,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository
+plugin at org.eclipse.equinox.p2.operations=CVS,tag=v20110511-1821,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations
+plugin at org.eclipse.equinox.p2.publisher=CVS,tag=v20110511,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher
+plugin at org.eclipse.equinox.p2.publisher.eclipse=CVS,tag=v20110511,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher.eclipse
+plugin at org.eclipse.equinox.p2.reconciler.dropins=CVS,tag=v20110510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins
+plugin at org.eclipse.equinox.p2.repository=CVS,tag=v20110601,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository
+plugin at org.eclipse.equinox.p2.repository.tools=CVS,tag=v20110512-1320,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools
+plugin at org.eclipse.equinox.p2.touchpoint.eclipse=CVS,tag=v20110511,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse
+plugin at org.eclipse.equinox.p2.transport.ecf=CVS,tag=v20110510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.transport.ecf
+plugin at org.eclipse.equinox.p2.touchpoint.natives=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives
+plugin at org.eclipse.equinox.p2.ui=CVS,tag=v20110601,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui
+plugin at org.eclipse.equinox.p2.ui.admin=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin
+plugin at org.eclipse.equinox.p2.ui.discovery=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery
+plugin at org.eclipse.equinox.p2.ui.importexport=CVS,tag=v20110511,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.importexport
+plugin at org.eclipse.equinox.p2.ui.sdk=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk
+plugin at org.eclipse.equinox.p2.ui.sdk.scheduler=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler
+plugin at org.eclipse.equinox.p2.ui.admin.rcp=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp
+plugin at org.eclipse.equinox.p2.updatechecker=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker
+plugin at org.eclipse.equinox.p2.updatesite=CVS,tag=v20110510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite
+plugin at org.eclipse.equinox.simpleconfigurator=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator
+plugin at org.eclipse.equinox.simpleconfigurator.manipulator=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator
+plugin at org.eclipse.equinox.p2.tests=CVS,tag=v20110519,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests
+plugin at org.eclipse.equinox.p2.tests.discovery=CVS,tag=v20110502-1955,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.discovery
+plugin at org.eclipse.equinox.p2.tests.ui=CVS,tag=v20110511,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.ui
+plugin at org.eclipse.equinox.p2.tests.verifier=CVS,tag=v20110222-0044,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests.verifier
+plugin at org.eclipse.equinox.p2.ql=CVS,tag=v20110510,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ql
+
+!# p2 features
+feature at org.eclipse.equinox.p2.core.feature=v20110519,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.core.feature
+feature at org.eclipse.equinox.p2.discovery.feature=CVS,tag=v20110519,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.discovery.feature
+feature at org.eclipse.equinox.p2.extras.feature=v20110519,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.extras.feature
+feature at org.eclipse.equinox.p2.rcp.feature=v20110519,kmoir at dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.rcp.feature
+feature at org.eclipse.equinox.p2.sdk=CVS,tag=v20110519,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.sdk
+feature at org.eclipse.equinox.p2.user.ui=CVS,tag=v20110526,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/features/org.eclipse.equinox.p2.user.ui
 
 !# p2 examples
 plugin at org.eclipse.equinox.p2.examples.rcp.cloud=CVS,tag=v20100604,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud
@@ -49,22 +59,30 @@ plugin at org.eclipse.equinox.p2.examples.rcp.prestartupdate=CVS,tag=v20100604,cvsR
 plugin at org.eclipse.equinox.p2.examples.rcp.prestartupdate.releng=CVS,tag=v20100604,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.prestartupdate.releng
 plugin at org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility=CVS,tag=v20100604,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility
 plugin at org.eclipse.equinox.p2.examples.rcp.sdknoautoupdates=CVS,tag=v20100604,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdknoautoupdates
-plugin at org.eclipse.equinox.p2.examples.rcp.sdkui=CVS,tag=v20100604,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkui
+plugin at org.eclipse.equinox.p2.examples.rcp.sdkui=CVS,tag=v20100927-1600,cvsRoot=kmoir at dev.eclipse.org:/cvsroot/rt,path=org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkui
 
 !# Bundles from ECF
-plugin at org.eclipse.ecf,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.source,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.source_3.1.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.ssl,1.0.100=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.ssl_1.0.100.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.ssl.source,1.0.100=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.ssl.source_1.0.100.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.identity,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.identity_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.identity.source,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.identity.source_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.filetransfer,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.filetransfer_4.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.filetransfer.source,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.filetransfer.source_4.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer_3.1.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer.source,3.1.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.source_3.1.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.ssl,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.ssl.source,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.ssl.source_1.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer.httpclient,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.v20100906-1425.jar,usetimestamp=true
-plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source,4.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.source_4.0.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.v20100906-1425.jar,usetimestamp=true
-fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source,1.0.0=GET,http://archive.eclipse.org/rt/ecf/integration/platform/v2010-09-06_07-22-05/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source_1.0.0.v20100906-1425.jar,usetimestamp=true
\ No newline at end of file
+plugin at org.eclipse.ecf,3.1.300=p2IU,id=org.eclipse.ecf,version=3.1.300.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.source,3.1.300=p2IU,id=org.eclipse.ecf.source,version=3.1.300.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.ssl,1.0.100=p2IU,id=org.eclipse.ecf.ssl,version=1.0.100.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.ssl.source,1.0.100=p2IU,id=org.eclipse.ecf.ssl.source,version=1.0.100.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.identity,3.1.100=p2IU,id=org.eclipse.ecf.identity,version=3.1.100.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.identity.source,3.1.100=p2IU,id=org.eclipse.ecf.identity.source,version=3.1.100.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.filetransfer,5.0.0=p2IU,id=org.eclipse.ecf.filetransfer,version=5.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.filetransfer.source,5.0.0=p2IU,id=org.eclipse.ecf.filetransfer.source,version=5.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer,3.2.0=p2IU,id=org.eclipse.ecf.provider.filetransfer,version=3.2.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer.source,3.2.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.source,version=3.2.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.ssl,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.ssl,version=1.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.ssl.source,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.ssl.source,version=1.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer.httpclient,4.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient,version=4.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source,4.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient.source,version=4.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient.ssl,version=1.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+fragment at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source,1.0.0=p2IU,id=org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source,version=1.0.0.v20110531-2218,repository=http://fullmoon.ottawa.ibm.com/rt/ecf/3.5.1/site.p2
+
+!# The following apache bundes are obtained from the orbit.map
+!#plugin at org.apache.commons.codec,1.3.0=GET,http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.codec_1.3.0.v20080530-1600.jar
+!#plugin at org.apache.commons.codec.source,1.3.0=GET,http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.codec.source_1.3.0.v20080530-1600.jar
+!#plugin at org.apache.commons.httpclient,3.1.0=GET,http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.httpclient_3.1.0.v20080605-1935.jar
+!#plugin at org.apache.commons.httpclient.source,3.1.0=GET,http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.httpclient.source_3.1.0.v20080605-1935.jar
+!#plugin at org.apache.commons.logging,1.0.4=GET,http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.logging_1.0.4.v200904062259.jar
+!#plugin at org.apache.commons.logging.source,1.0.4=GET,http://fullmoon.ottawa.ibm.com/tools/orbit/downloads/drops/S20090426201227/bundles/org.apache.commons.logging.source_1.0.4.v200904062259.jar
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/pde.map b/eclipse/maps/org.eclipse.releng/maps/pde.map
index 5c15895..c1ce5a8 100644
--- a/eclipse/maps/org.eclipse.releng/maps/pde.map
+++ b/eclipse/maps/org.eclipse.releng/maps/pde.map
@@ -1,34 +1,34 @@
 !***************  PDE CONTRIBUTION  ******************************************************** 
 
 
-plugin at org.eclipse.pde=v20100625_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
-plugin at org.eclipse.pde.core=v20110210_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
-plugin at org.eclipse.pde.junit.runtime=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.junit.runtime
-plugin at org.eclipse.pde.runtime=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.runtime
-plugin at org.eclipse.pde.launching=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.launching
-plugin at org.eclipse.pde.ui=v20110210_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
-plugin at org.eclipse.pde.ui.templates=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.templates
-plugin at org.eclipse.pde.ui.tests=v20101210_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
+plugin at org.eclipse.pde=v20110504-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde
+plugin at org.eclipse.pde.core=v20110603,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.core
+plugin at org.eclipse.pde.junit.runtime=v20110406,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.junit.runtime
+plugin at org.eclipse.pde.runtime=v20110508,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.runtime
+plugin at org.eclipse.pde.launching=v20110506,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.launching
+plugin at org.eclipse.pde.ui=v20110603,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui
+plugin at org.eclipse.pde.ui.templates=v20110516,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.templates
+plugin at org.eclipse.pde.ui.tests=v20110509,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.pde.ui.tests
 
-plugin at org.eclipse.ui.views.log=v20110210_r362,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.ui.views.log
-plugin at org.eclipse.pde.api.tools=v20100820_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
-plugin at org.eclipse.pde.api.tools.ui=v20100820_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
-plugin at org.eclipse.pde.api.tools.tests=v20100820_r361,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
-fragment at org.eclipse.pde.api.tools.ee.cdcfoundation10=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10
-fragment at org.eclipse.pde.api.tools.ee.cdcfoundation11=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11
-fragment at org.eclipse.pde.api.tools.ee.j2se12=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12
-fragment at org.eclipse.pde.api.tools.ee.j2se13=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se13
-fragment at org.eclipse.pde.api.tools.ee.j2se14=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se14
-fragment at org.eclipse.pde.api.tools.ee.j2se15=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se15
-fragment at org.eclipse.pde.api.tools.ee.javase16=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.javase16
-fragment at org.eclipse.pde.api.tools.ee.jre11=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.jre11
-fragment at org.eclipse.pde.api.tools.ee.osgiminimum10=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum10
-fragment at org.eclipse.pde.api.tools.ee.osgiminimum11=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11
-fragment at org.eclipse.pde.api.tools.ee.osgiminimum12=v20100506-0900,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12
+plugin at org.eclipse.ui.views.log=v20110404,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ui/org.eclipse.ui.views.log
+plugin at org.eclipse.pde.api.tools=v20110523-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools
+plugin at org.eclipse.pde.api.tools.ui=v20110523-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ui
+plugin at org.eclipse.pde.api.tools.tests=v20110523-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.tests
+fragment at org.eclipse.pde.api.tools.ee.cdcfoundation10=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10
+fragment at org.eclipse.pde.api.tools.ee.cdcfoundation11=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11
+fragment at org.eclipse.pde.api.tools.ee.j2se12=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se12
+fragment at org.eclipse.pde.api.tools.ee.j2se13=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se13
+fragment at org.eclipse.pde.api.tools.ee.j2se14=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se14
+fragment at org.eclipse.pde.api.tools.ee.j2se15=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.j2se15
+fragment at org.eclipse.pde.api.tools.ee.javase16=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.javase16
+fragment at org.eclipse.pde.api.tools.ee.jre11=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.jre11
+fragment at org.eclipse.pde.api.tools.ee.osgiminimum10=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum10
+fragment at org.eclipse.pde.api.tools.ee.osgiminimum11=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11
+fragment at org.eclipse.pde.api.tools.ee.osgiminimum12=v20110401-1030,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12
 
 plugin at org.eclipse.pde.ds.core=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.core
-plugin at org.eclipse.pde.ds.ui=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.ui
+plugin at org.eclipse.pde.ds.ui=v20110516,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.ui
 plugin at org.eclipse.pde.ds.tests=v20100601,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ds/org.eclipse.pde.ds.tests
 
-plugin at org.eclipse.pde.ua.core=v20100504,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.core
-plugin at org.eclipse.pde.ua.ui=v20100504,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.ui
\ No newline at end of file
+plugin at org.eclipse.pde.ua.core=v20110516,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.core
+plugin at org.eclipse.pde.ua.ui=v20110516,kmoir at dev.eclipse.org:/cvsroot/eclipse,,pde/ua/org.eclipse.pde.ua.ui
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/rcp.map b/eclipse/maps/org.eclipse.releng/maps/rcp.map
index 17fdae2..b00a3d6 100644
--- a/eclipse/maps/org.eclipse.releng/maps/rcp.map
+++ b/eclipse/maps/org.eclipse.releng/maps/rcp.map
@@ -1,3 +1,3 @@
-feature at org.eclipse.rcp=r362_v20101104,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
+feature at org.eclipse.rcp=v20110216,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp
 feature at org.eclipse.rcp.sdk=v20080507,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.rcp.sdk
-plugin at org.eclipse.rcp=v20100527-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.rcp
\ No newline at end of file
+plugin at org.eclipse.rcp=v20110504-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.rcp
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/releng.map b/eclipse/maps/org.eclipse.releng/maps/releng.map
index 62baa04..8d69b56 100644
--- a/eclipse/maps/org.eclipse.releng/maps/releng.map
+++ b/eclipse/maps/org.eclipse.releng/maps/releng.map
@@ -1,17 +1,17 @@
 !****************  RELENG CONTRIBUTION  ******************************************************** 
-feature at master=v20091019,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master
-feature at master-equinox=r362_v20101118,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox
-feature at master-equinox-p2=v20091106,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-p2
-feature at master-equinox-weaving=v20090817,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-weaving
-feature at master-jetty=r362_v20101014,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-jetty
-feature at master-ecf=v20090316,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-ecf
+feature at master=v20110426,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master
+feature at master-equinox=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox
+feature at master-equinox-p2=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-p2
+feature at master-equinox-weaving=v20110505,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-equinox-weaving
+feature at master-jetty=v20110326,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-jetty
+feature at master-ecf=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/master-ecf
 
-feature at com.ibm.icu.base=v20090119,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/com.ibm.icu.base
+feature at com.ibm.icu.base=v20110302,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/com.ibm.icu.base
 
-feature at org.eclipse.releng.tools=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.releng.tools
+feature at org.eclipse.releng.tools=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/features/org.eclipse.releng.tools
 
-plugin at org.eclipse.releng.tools=v20100531,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.releng.tests=r362_v20110203,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.releng.tools=v20110523,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.releng.tests=v20110520,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 plugin at org.eclipse.pde.tools.versioning=r20080922,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk.tests-feature/plugins/org.eclipse.pde.tools.versioning
 
diff --git a/eclipse/maps/org.eclipse.releng/maps/swt.map b/eclipse/maps/org.eclipse.releng/maps/swt.map
index c59eae3..ba64441 100644
--- a/eclipse/maps/org.eclipse.releng/maps/swt.map
+++ b/eclipse/maps/org.eclipse.releng/maps/swt.map
@@ -1,42 +1,38 @@
 !***************  SWT CONTRIBUTION  ******************************************************** 
 
 !*** SWT Plugin
-plugin at org.eclipse.swt=v3659c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !*** SWT Platform Fragments
-fragment at org.eclipse.swt.carbon.macosx=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.ppc64=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.x86_64=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.sparc=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.solaris.x86=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.aix.ppc64=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.aix.ppc=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.hpux.ia64_32=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.linux.x86=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.motif.solaris.sparc=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.photon.qnx.x86=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.wce_ppc.arm=v3659c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86=v3659c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.x86_64=v3659c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.win32.win32.ia64=v3659c,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.carbon.macosx=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.cocoa.macosx.x86_64=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.ppc64=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.x86_64=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.sparc=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.solaris.x86=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.aix.ppc=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.aix.ppc64=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.hpux.ia64_32=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.wce_ppc.arm=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.x86_64=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.win32.win32.ia64=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-fragment at org.eclipse.swt.gtk.linux.s390=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.swt.gtk.linux.s390x=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.s390=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.swt.gtk.linux.s390x=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !*** SWT Examples
-plugin at org.eclipse.swt.examples=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.browser.demos=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.controls=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.launcher=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.layouts=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.ole.win32=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.examples.paint=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.browser.demos=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.controls=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.launcher=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.layouts=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.ole.win32=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.examples.paint=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !*** SWT Tests and Tools
-plugin at org.eclipse.swt.tests=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.swt.tools=v3659b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.swt.tests=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.swt.tools=v3735b,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/team.map b/eclipse/maps/org.eclipse.releng/maps/team.map
index 169cce4..eaaff7f 100644
--- a/eclipse/maps/org.eclipse.releng/maps/team.map
+++ b/eclipse/maps/org.eclipse.releng/maps/team.map
@@ -1,24 +1,24 @@
 !***************  TEAM CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.team.core=R36x_v20110203-1036,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.core=R36x_v20110119-0815,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ssh=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ssh2=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.ui=R36x_v20110203-1036,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.cvs.ui=R36x_v20110203-1036,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.core=I20110525-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.core=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ssh=I20110208-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ssh2=I20110511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.ui=I20110525-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.cvs.ui=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.core.net=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.net=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.tests.net=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jsch.core=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jsch.ui=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jsch.tests=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.net=I20110511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.net=I20110511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.tests.net=I20110208-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jsch.core=I20110514-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jsch.ui=I20110511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jsch.tests=I20100912-2000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.team.examples.filesystem=I20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.examples.filesystem=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.team.tests.core=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.team.tests.cvs.core=R36x_v20110119-0815,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.core.net.win32.x86=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86
-fragment at org.eclipse.core.net.linux.x86=R36x_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
-fragment at org.eclipse.core.net.linux.x86_64=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64
-fragment at org.eclipse.core.net.win32.x86_64=I20100505-1245,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64
\ No newline at end of file
+plugin at org.eclipse.team.tests.core=I20110510-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.team.tests.cvs.core=I20110525-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.core.net.win32.x86=I20110331-0827,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86
+fragment at org.eclipse.core.net.linux.x86=I20110419-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86
+fragment at org.eclipse.core.net.linux.x86_64=I20110331-0827,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64
+fragment at org.eclipse.core.net.win32.x86_64=I20110331-0827,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/testframework.map b/eclipse/maps/org.eclipse.releng/maps/testframework.map
index dc3ef74..c2ec89d 100644
--- a/eclipse/maps/org.eclipse.releng/maps/testframework.map
+++ b/eclipse/maps/org.eclipse.releng/maps/testframework.map
@@ -1,10 +1,10 @@
 !***************  Test Framework CONTRIBUTION  ******************************************************** 
-feature at org.eclipse.test=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.test-feature
+feature at org.eclipse.test=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.test-feature
 
-plugin at org.eclipse.test=v20100118,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ant.optional.junit=v20080717,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.test=v20110511,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ant.optional.junit=v20110503,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.test.performance=v20100122,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.test.performance=v20101027,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.test.performance.win32=v20070530,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 plugin at org.eclipse.test.performance.data=v20050415,kmoir at dev.eclipse.org:/cvsroot/eclipse,
diff --git a/eclipse/maps/org.eclipse.releng/maps/text.map b/eclipse/maps/org.eclipse.releng/maps/text.map
index 3d881f0..3e53d6b 100644
--- a/eclipse/maps/org.eclipse.releng/maps/text.map
+++ b/eclipse/maps/org.eclipse.releng/maps/text.map
@@ -1,16 +1,16 @@
 !***************  TEXT CONTRIBUTION  ******************************************************** 
 
-plugin at org.eclipse.text=v20100601-1300,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.text=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench.texteditor=r361_v20100714-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.editors=r361_v20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.filebuffers=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.text=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.text=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench.texteditor=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.editors=v20110517-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.filebuffers=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.examples.javaeditor=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.javaeditor=v20110524-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.text.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.text.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.filebuffers.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench.texteditor.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.editors.tests=v20100520-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jdt.text.tests=v20100526-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.text.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.text.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.filebuffers.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench.texteditor.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.editors.tests=v20110505-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jdt.text.tests=v20110524-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/ui.map b/eclipse/maps/org.eclipse.releng/maps/ui.map
index 4aa5db9..a7718d9 100644
--- a/eclipse/maps/org.eclipse.releng/maps/ui.map
+++ b/eclipse/maps/org.eclipse.releng/maps/ui.map
@@ -1,43 +1,43 @@
 !***************  UI CONTRIBUTION  ********************************************************* 
 
-plugin at org.eclipse.core.commands=I20100512-1500,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface=M20110210-1200,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding.observable=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding.property=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.core.databinding.beans=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui=M20110203-1100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide=M20101201-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.ide.application=M20100707-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.commands=I20110111-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface=I20110522-1430,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding=I20110111-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding.observable=I20110222-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding.property=I20110222-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.core.databinding.beans=I20100824-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.databinding=I20100907-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui=I20110602-0100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide=I20110519-0100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.ide.application=I20110306-2000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.ui.presentations.r21=I20100517-1500,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.views=M20110202-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.workbench=M20110210-1200,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.workbench.compatibility=I20100511-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.views=I20110412-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.workbench=I20110519-0100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.workbench.compatibility=I20110413-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.ui.win32=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.carbon=M20101124-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-fragment at org.eclipse.ui.cocoa=M20101124-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.carbon=I20101109-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+fragment at org.eclipse.ui.cocoa=I20101109-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 
 plugin at org.eclipse.jface.examples.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.multipageeditor=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.propertysheet=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.readmetool=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.examples.undo=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.multipageeditor=I20110413-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.propertysheet=I20110413-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.readmetool=I20110413-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.examples.undo=I20110413-1600,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.ui.examples.views.properties.tabbed.article=I20100517-1500,kmoir at dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.ui.examples.views.properties.tabbed/org.eclipse.ui.examples.views.properties.tabbed.article
 plugin at org.eclipse.ui.examples.fieldassist=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.ui.examples.contributions=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.navigator=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.navigator.resources=M20101124-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.navigator=I20110524-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.navigator.resources=I20110421-1800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.ui.views.properties.tabbed=I20100509-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.views.properties.tabbed=I20110201-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
-plugin at org.eclipse.jface.tests.databinding=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.jface.tests.databinding.conformance=I20090818-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests=M20100825-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.rcp=I20090525-2000,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.navigator=M20101201-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.views.properties.tabbed=M20110202-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.performance=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.harness=I20100601-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.jface.tests.databinding=I20110405-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.jface.tests.databinding.conformance=I20100914-0100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests=I20110602-0100,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.rcp=I20110425-1800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.navigator=I20110425-1800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.views.properties.tabbed=I20110405-0800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.performance=I20110421-1800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.harness=I20110425-1800,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/update.map b/eclipse/maps/org.eclipse.releng/maps/update.map
index ed207b1..0676988 100644
--- a/eclipse/maps/org.eclipse.releng/maps/update.map
+++ b/eclipse/maps/org.eclipse.releng/maps/update.map
@@ -1,11 +1,11 @@
 !***************  UPDATE CONTRIBUTION  ******************************************************** 
 
 plugin at org.eclipse.update.configurator=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.update.core=R36x_v20100629,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.update.core=v20110330,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.update.scheduler=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 plugin at org.eclipse.update.ui=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 fragment at org.eclipse.update.core.win32=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 fragment at org.eclipse.update.core.linux=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-
+#
 plugin at org.eclipse.update.tests.core=v20100512,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/maps/org.eclipse.releng/maps/userassist.map b/eclipse/maps/org.eclipse.releng/maps/userassist.map
index 1ca80e4..20e919a 100644
--- a/eclipse/maps/org.eclipse.releng/maps/userassist.map
+++ b/eclipse/maps/org.eclipse.releng/maps/userassist.map
@@ -1,26 +1,26 @@
 !***************  UA CONTRIBUTION  *********************************************
 
 !**** Help
-plugin at org.eclipse.help=v20100524,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.appserver=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.base=r36_20101123,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.ui=r36_20101116,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.help.webapp=r36_20101130,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help=v20110426,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.appserver=v20110425,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.base=v20110517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.ui=v20110425,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.help.webapp=v20110518,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Welcome
-plugin at org.eclipse.ui.intro=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.intro.universal=r36_v20100702,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.intro=v20110425,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.intro.universal=v20110510,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Cheat sheets
-plugin at org.eclipse.ui.cheatsheets=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.cheatsheets=v20110425,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Browser
-plugin at org.eclipse.ui.browser=r36_20101216,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.browser=v20110426,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Forms
-plugin at org.eclipse.ui.forms=r36_v20100702,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.forms=v20110425,kmoir at dev.eclipse.org:/cvsroot/eclipse,
 
 !**** Tests
-plugin at org.eclipse.ua.tests=r36_r20100816,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ua.tests.doc=v20100427,kmoir at dev.eclipse.org:/cvsroot/eclipse,
-plugin at org.eclipse.ui.tests.forms=v20100517,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
+plugin at org.eclipse.ua.tests=v20110505,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ua.tests.doc=v20110425,kmoir at dev.eclipse.org:/cvsroot/eclipse,
+plugin at org.eclipse.ui.tests.forms=v20110425,kmoir at dev.eclipse.org:/cvsroot/eclipse,
\ No newline at end of file
diff --git a/eclipse/pluginVersions.properties b/eclipse/pluginVersions.properties
index bcf7f7a..92bd86f 100644
--- a/eclipse/pluginVersions.properties
+++ b/eclipse/pluginVersions.properties
@@ -1,301 +1,303 @@
-#Tue Mar 08 14:12:31 EST 2011
-org.eclipse.help.appserver,0.0.0=v20100427
-org.eclipse.ui.forms,0.0.0=r36_v20100702
-org.eclipse.swt.gtk.linux.s390x,0.0.0=v3659b
-org.eclipse.jdt.debug.ui,0.0.0=v20100928a_r362
-org.eclipse.jdt.launching.macosx,0.0.0=v20100505
-org.eclipse.equinox.jmx.server.xmlrpc,0.0.0=v20100503
-org.eclipse.equinox.launcher.motif.solaris.sparc,0.0.0=R36x_v20101019_1345
-org.eclipse.equinox.launcher.gtk.aix.ppc64,0.0.0=R36x_v20101102
+#Mon Jun 27 11:22:02 EDT 2011
+org.eclipse.help.appserver,0.0.0=v20110425
+org.eclipse.ui.forms,0.0.0=v20110425
+org.eclipse.swt.gtk.linux.s390x,0.0.0=v3735b
+org.eclipse.jdt.debug.ui,0.0.0=v20110512
+org.eclipse.jdt.launching.macosx,0.0.0=v20110509
+org.eclipse.equinox.jmx.server.xmlrpc,0.0.0=v20110413
+org.eclipse.equinox.launcher.motif.solaris.sparc,0.0.0=v20110505
+org.eclipse.equinox.launcher.gtk.aix.ppc64,0.0.0=v20110530
 org.eclipse.core.boot,0.0.0=v20100505
-org.eclipse.ui.net,0.0.0=I20100505-1245
-org.eclipse.equinox.launcher.gtk.solaris.x86,0.0.0=R36x_v20101019_1345
-org.eclipse.jdt.apt.pluggable.core,0.0.0=R36_v20100727-0110
-org.eclipse.swt.examples.paint,0.0.0=v3659b
-org.eclipse.core.net.win32.x86,0.0.0=I20100511-0800
-org.eclipse.core.filesystem.macosx,0.0.0=v20100505
-org.eclipse.equinox.launcher.motif.linux.x86,0.0.0=R36x_v20101019_1345
-org.eclipse.ui.navigator.resources,0.0.0=M20101124-0800
-org.eclipse.equinox.p2.metadata.repository,0.0.0=v20100513
-org.eclipse.swt,0.0.0=v3659c
-org.eclipse.swt.win32.win32.x86,0.0.0=v3659c
+org.eclipse.ui.net,0.0.0=I20110511-0800
+org.eclipse.equinox.launcher.gtk.solaris.x86,0.0.0=v20110505
+org.eclipse.jdt.apt.pluggable.core,0.0.0=v20110305-1450
+org.eclipse.swt.examples.paint,0.0.0=v3735b
+org.eclipse.core.net.win32.x86,0.0.0=I20110331-0827
+org.eclipse.core.filesystem.macosx,0.0.0=v20110423-0524
+org.eclipse.equinox.launcher.motif.linux.x86,0.0.0=v20110505
+org.eclipse.ui.navigator.resources,0.0.0=I20110421-1800
+org.eclipse.equinox.p2.metadata.repository,0.0.0=v20110511-1359
+org.eclipse.swt,0.0.0=v3735b
+org.eclipse.swt.win32.win32.x86,0.0.0=v3735b
 org.eclipse.update.ui,0.0.0=v20100512
-org.eclipse.core.filesystem,0.0.0=R36x_v20100727-0745
-org.eclipse.core.externaltools,0.0.0=v20100831_r361
+org.eclipse.core.filesystem,0.0.0=v20110423-0524
+org.eclipse.core.externaltools,0.0.0=v20110506
 org.eclipse.equinox.registry.jmx,0.0.0=v20100503
-org.eclipse.equinox.io,0.0.0=v20100503
-org.eclipse.equinox.simpleconfigurator.manipulator,0.0.0=v20100503
-org.eclipse.pde.api.tools.ui,0.0.0=v20100820_r361
-org.eclipse.jdt.debug,0.0.0=v20100715_r361
-org.eclipse.sdk.examples,0.0.0=v20100527
-org.eclipse.pde,0.0.0=v20100625_r361
-org.eclipse.compare.core,0.0.0=R36x_v20100929-0800
-org.eclipse.equinox.p2.engine,0.0.0=R36x_v20110201
-org.eclipse.equinox.launcher.motif.hpux.ia64_32,0.0.0=R36x_v20101019_1345
-org.eclipse.equinox.http,0.0.0=v20100503
-org.eclipse.swt.gtk.linux.x86_64,0.0.0=v3659b
-org.eclipse.swt.photon.qnx.x86,0.0.0=v3659b
-org.eclipse.equinox.p2.ui.admin,0.0.0=v20100503
-org.eclipse.equinox.weaving.caching.j9,0.0.0=v20100503
+org.eclipse.equinox.io,0.0.0=v20110502
+org.eclipse.equinox.simpleconfigurator.manipulator,0.0.0=v20110502-1955
+org.eclipse.pde.api.tools.ui,0.0.0=v20110523-1600
+org.eclipse.jdt.debug,0.0.0=v20110509
+org.eclipse.sdk.examples,0.0.0=v20110503
+org.eclipse.pde,0.0.0=v20110504-0800
+org.eclipse.compare.core,0.0.0=I20110208-0800
+org.eclipse.equinox.p2.engine,0.0.0=v20110511
+org.eclipse.equinox.launcher.motif.hpux.ia64_32,0.0.0=v20110502
+org.eclipse.equinox.http,0.0.0=v20110413
+org.eclipse.swt.gtk.linux.x86_64,0.0.0=v3735b
+org.eclipse.equinox.p2.ui.admin,0.0.0=v20110502-1955
+org.eclipse.equinox.p2.publisher.eclipse,0.0.0=v20110511
+org.eclipse.equinox.weaving.caching.j9,0.0.0=v20110502
+org.eclipse.equinox.launcher.gtk.hpux.ia64_32,0.0.0=v20110502
 org.eclipse.equinox.transforms.xslt,0.0.0=v20100503
-org.eclipse.jface.databinding,0.0.0=I20100601-0800
-org.eclipse.equinox.p2.touchpoint.eclipse,0.0.0=R36x_v20101202
-org.eclipse.help.base,0.0.0=r36_20101123
+org.eclipse.jface.databinding,0.0.0=I20100907-0800
+org.eclipse.equinox.p2.touchpoint.eclipse,0.0.0=v20110511
+org.eclipse.help.base,0.0.0=v20110517
 org.eclipse.ui.presentations.r21,0.0.0=I20100517-1500
-org.eclipse.equinox.frameworkadmin,0.0.0=v20100503
-org.eclipse.pde.launching,0.0.0=v20100601
-org.eclipse.ui.intro,0.0.0=v20100427
-org.eclipse.ltk.ui.refactoring,0.0.0=v20100526-0800
-org.eclipse.swt.examples.ole.win32,0.0.0=v3659b
-org.eclipse.ui.workbench.texteditor,0.0.0=r361_v20100714-0800
-org.eclipse.ui.examples.multipageeditor,0.0.0=I20100509-0800
-org.eclipse.core.filesystem.linux.x86,0.0.0=v20100505-1235
-org.eclipse.equinox.p2.ui.discovery,0.0.0=v20100519
-org.eclipse.ui.examples.javaeditor,0.0.0=v20100520-0800
-org.eclipse.ant.core,0.0.0=v20110203_r362
-org.eclipse.equinox.p2.ui.admin.rcp,0.0.0=R36x_v20100823
-org.eclipse.equinox.p2.updatechecker,0.0.0=R36x_v20100823
-org.eclipse.debug.core,0.0.0=v20100519
+org.eclipse.equinox.frameworkadmin,0.0.0=v20110502-1955
+org.eclipse.pde.launching,0.0.0=v20110506
+org.eclipse.ui.intro,0.0.0=v20110425
+org.eclipse.ltk.ui.refactoring,0.0.0=v20110505-0800
+org.eclipse.swt.examples.ole.win32,0.0.0=v3735b
+org.eclipse.ui.workbench.texteditor,0.0.0=v20110505-0800
+org.eclipse.ui.examples.multipageeditor,0.0.0=I20110413-1600
+org.eclipse.core.filesystem.linux.x86,0.0.0=v20110423-0524
+org.eclipse.equinox.p2.ui.discovery,0.0.0=v20110502-1955
+org.eclipse.ui.examples.javaeditor,0.0.0=v20110524-0800
+org.eclipse.ant.core,0.0.0=v20110511
+org.eclipse.equinox.p2.ui.admin.rcp,0.0.0=v20110502-1955
+org.eclipse.equinox.p2.updatechecker,0.0.0=v20110502-1955
+org.eclipse.debug.core,0.0.0=v20110518
 org.eclipse.ui.examples.views.properties.tabbed.article,0.0.0=I20100517-1500
-org.eclipse.core.databinding,0.0.0=I20100601-0800
-org.eclipse.equinox.transforms.hook,0.0.0=v20100503
-org.eclipse.ui.carbon,0.0.0=M20101124-0800
-org.eclipse.core.contenttype,0.0.0=v20100505-1235
-org.eclipse.text,0.0.0=v20100601-1300
-org.eclipse.help.ui,0.0.0=r36_20101116
-org.eclipse.equinox.servletbridge,0.0.0=v20100503
-org.eclipse.jdt.apt.core,0.0.0=R36_v20110120-1000
-org.eclipse.swt.win32.win32.x86_64,0.0.0=v3659c
-org.eclipse.equinox.metatype,0.0.0=v20100503
-org.eclipse.pde.ua.ui,0.0.0=v20100504
+org.eclipse.core.databinding,0.0.0=I20110111-0800
+org.eclipse.equinox.transforms.hook,0.0.0=v20100719
+org.eclipse.ui.carbon,0.0.0=I20101109-0800
+org.eclipse.core.contenttype,0.0.0=v20110423-0524
+org.eclipse.text,0.0.0=v20110505-0800
+org.eclipse.help.ui,0.0.0=v20110425
+org.eclipse.equinox.servletbridge,0.0.0=v20110502
+org.eclipse.jdt.apt.core,0.0.0=v20110420-1015
+org.eclipse.swt.win32.win32.x86_64,0.0.0=v3735b
+org.eclipse.equinox.p2.transport.ecf,0.0.0=v20110510
+org.eclipse.equinox.metatype,0.0.0=v20110502
+org.eclipse.pde.ua.ui,0.0.0=v20110516
 org.eclipse.equinox.initializer,0.0.0=v20100503
-org.eclipse.jsch.core,0.0.0=I20100505-1245
-org.eclipse.equinox.frameworkadmin.equinox,0.0.0=v20100505
-org.eclipse.osgi.util,0.0.0=v20100503
-org.eclipse.search,0.0.0=v20100520-0800
-org.eclipse.ui.views,0.0.0=M20110202-0800
-org.eclipse.equinox.simpleconfigurator,0.0.0=v20100503
-org.eclipse.team.ui,0.0.0=R36x_v20110203-1036
-org.eclipse.equinox.p2.metadata,0.0.0=R36x_v20101202
-org.eclipse.swt.cocoa.macosx.x86_64,0.0.0=v3659b
-org.eclipse.swt.gtk.linux.ppc64,0.0.0=v3659b
-org.eclipse.jdt.compiler.tool,0.0.0=v_A76_R36x
-org.eclipse.platform,0.0.0=r362_v20110120
-org.eclipse.core.databinding.observable,0.0.0=I20100601-0800
-org.eclipse.equinox.weaving.aspectj,0.0.0=v20100503
-org.eclipse.team.examples.filesystem,0.0.0=I20100526-0800
-org.eclipse.pde.core,0.0.0=v20110210_r362
-org.eclipse.ui.workbench,0.0.0=M20110210-1200
-org.eclipse.core.runtime,0.0.0=v20100505
-org.eclipse.core.resources.win32.x86,0.0.0=v20100505-1345
-org.eclipse.equinox.launcher.gtk.linux.x86_64,0.0.0=R36x_v20101019_1345
-org.eclipse.help,0.0.0=v20100524
-org.eclipse.pde.api.tools.ee.j2se15,0.0.0=v20100506-0900
+org.eclipse.jsch.core,0.0.0=I20110514-0800
+org.eclipse.equinox.frameworkadmin.equinox,0.0.0=v20110506
+org.eclipse.osgi.util,0.0.0=v20110110
+org.eclipse.search,0.0.0=v20110505-0800
+org.eclipse.ui.views,0.0.0=I20110412-0800
+org.eclipse.equinox.simpleconfigurator,0.0.0=v20110502-1955
+org.eclipse.team.ui,0.0.0=I20110525-0800
+org.eclipse.equinox.p2.metadata,0.0.0=v20110510
+org.eclipse.swt.cocoa.macosx.x86_64,0.0.0=v3735b
+org.eclipse.swt.gtk.linux.ppc64,0.0.0=v3735b
+org.eclipse.jdt.compiler.tool,0.0.0=v_B61
+org.eclipse.platform,0.0.0=v20110520
+org.eclipse.core.databinding.observable,0.0.0=I20110222-0800
+org.eclipse.equinox.weaving.aspectj,0.0.0=v20110502
+org.eclipse.team.examples.filesystem,0.0.0=I20110510-0800
+org.eclipse.pde.core,0.0.0=v20110603
+org.eclipse.ui.workbench,0.0.0=I20110519-0100
+org.eclipse.core.runtime,0.0.0=v20110110
+org.eclipse.core.resources.win32.x86,0.0.0=v20110423-0524
+org.eclipse.equinox.launcher.gtk.linux.x86_64,0.0.0=v20110505
+org.eclipse.help,0.0.0=v20110426
+org.eclipse.pde.api.tools.ee.j2se15,0.0.0=v20110401-1030
 org.junit4,0.0.0=v20100525
 org.eclipse.update.scheduler,0.0.0=v20100512
-org.eclipse.equinox.launcher.gtk.linux.s390,0.0.0=R36x_v20110125
-org.eclipse.pde.junit.runtime,0.0.0=v20100601
-org.eclipse.osgi.services,0.0.0=v20100503
-org.eclipse.swt.examples.layouts,0.0.0=v3659b
-org.eclipse.jface,0.0.0=M20110210-1200
-org.eclipse.equinox.p2.discovery,0.0.0=v20100503
-org.eclipse.pde.api.tools.ee.osgiminimum10,0.0.0=v20100506-0900
+org.eclipse.equinox.launcher.gtk.linux.s390,0.0.0=v20110505
+org.eclipse.pde.junit.runtime,0.0.0=v20110406
+org.eclipse.osgi.services,0.0.0=v20110513
+org.eclipse.swt.examples.layouts,0.0.0=v3735b
+org.eclipse.jface,0.0.0=I20110522-1430
+org.eclipse.equinox.p2.discovery,0.0.0=v20110502-1955
+org.eclipse.pde.api.tools.ee.osgiminimum10,0.0.0=v20110401-1030
 org.eclipse.equinox.jmx.server,0.0.0=v20100503
 org.eclipse.equinox.jmx.server.rmi,0.0.0=v20100503
-org.eclipse.jdt.ui,0.0.0=r362_v20110203
-org.eclipse.equinox.security,0.0.0=v20100503
-org.eclipse.equinox.launcher,0.0.0=R36x_v20101122_1400
-org.eclipse.core.runtime.compatibility.registry,0.0.0=v20100520
-org.eclipse.jdt.junit.core,0.0.0=r361_v20100825-0800
-org.eclipse.equinox.http.jetty,2.0.0=v20100503
-org.eclipse.jdt.launching,0.0.0=v20110105_r362
-org.eclipse.equinox.p2.ql,0.0.0=v20100503a
-org.eclipse.ui.console,0.0.0=v20100526
-org.eclipse.equinox.weaving.caching,0.0.0=v20100503
-org.eclipse.swt.gtk.linux.s390,0.0.0=v3659b
-org.eclipse.jdt.apt.ui,0.0.0=v20100513-0845
-org.eclipse.equinox.p2.discovery.compatibility,0.0.0=v20110204-1323
+org.eclipse.jdt.ui,0.0.0=v20110531-1200
+org.eclipse.equinox.security,0.0.0=v20110502
+org.eclipse.equinox.launcher,0.0.0=v20110502
+org.eclipse.core.runtime.compatibility.registry,0.0.0=v20110505
+org.eclipse.jdt.junit.core,0.0.0=v20110518-0800
+org.eclipse.jdt.launching,0.0.0=v20110509
+org.eclipse.equinox.p2.ql,0.0.0=v20110510
+org.eclipse.ui.console,0.0.0=v20110511
+org.eclipse.equinox.weaving.caching,0.0.0=v20110502
+org.eclipse.swt.gtk.linux.s390,0.0.0=v3735b
+org.eclipse.jdt.apt.ui,0.0.0=v20110305-1450
+org.eclipse.equinox.p2.discovery.compatibility,0.0.0=v20110502-1955
 org.eclipse.ui.examples.fieldassist,0.0.0=I20100601-0800
-org.eclipse.ui.ide.application,0.0.0=M20100707-0800
-org.eclipse.equinox.launcher.gtk.linux.ppc,0.0.0=R36x_v20101019_1345
-org.eclipse.equinox.launcher.carbon.macosx,0.0.0=R36x_v20101019_1345
-org.eclipse.jdt.junit,0.0.0=r361_v20100825-0800
-org.eclipse.pde.api.tools,0.0.0=v20100820_r361
+org.eclipse.ui.ide.application,0.0.0=I20110306-2000
+org.eclipse.equinox.launcher.gtk.linux.ppc,0.0.0=v20110505
+org.eclipse.equinox.launcher.carbon.macosx,0.0.0=v20110502
+org.eclipse.jdt.junit,0.0.0=v20110505-0800
+org.eclipse.pde.api.tools,0.0.0=v20110523-1600
+org.eclipse.equinox.security.win32.x86_64,0.0.0=v20110502
 org.eclipse.core.runtime.compatibility,0.0.0=v20100505
-org.eclipse.equinox.p2.directorywatcher,0.0.0=R36x_v20101220
-org.eclipse.equinox.launcher.gtk.solaris.sparc,0.0.0=R36x_v20101019_1345
-org.eclipse.core.filesystem.hpux.ia64_32,0.0.0=v20100505
-org.eclipse.swt.motif.aix.ppc,0.0.0=v3659b
-org.eclipse.ui.examples.undo,0.0.0=I20100509-0800
-org.eclipse.ui.cocoa,0.0.0=M20101124-0800
-org.eclipse.equinox.http.registry,0.0.0=R36x_v20101103
-org.eclipse.pde.api.tools.ee.jre11,0.0.0=v20100506-0900
-org.eclipse.core.net.linux.x86_64,0.0.0=I20100505-1245
-org.eclipse.equinox.jsp.jasper,0.0.0=R36x_v20101103
-org.eclipse.pde.api.tools.ee.j2se14,0.0.0=v20100506-0900
-org.eclipse.equinox.p2.ui,0.0.0=v20100518
-org.eclipse.jdt.launching.ui.macosx,0.0.0=v20100505
-org.eclipse.equinox.p2.ui.sdk,0.0.0=v20100513
-org.eclipse.compare.examples,0.0.0=I20100505-1245
-org.eclipse.pde.ua.core,0.0.0=v20100504
-org.eclipse.platform.doc.isv,0.0.0=r362_v20110111
-org.eclipse.ant.launching,0.0.0=v20101020_r362
-org.eclipse.equinox.p2.operations,0.0.0=v20100510
-org.eclipse.compare,0.0.0=R36x_v20100929-0800
+org.eclipse.equinox.p2.directorywatcher,0.0.0=v20110502-1955
+org.eclipse.equinox.launcher.gtk.solaris.sparc,0.0.0=v20110505
+org.eclipse.core.filesystem.hpux.ia64_32,0.0.0=v20110423-0524
+org.eclipse.ui.examples.undo,0.0.0=I20110413-1600
+org.eclipse.ui.cocoa,0.0.0=I20101109-0800
+org.eclipse.equinox.http.registry,0.0.0=v20110502
+org.eclipse.equinox.p2.ui.importexport,0.0.0=v20110511
+org.eclipse.pde.api.tools.ee.jre11,0.0.0=v20110401-1030
+org.eclipse.core.net.linux.x86_64,0.0.0=I20110331-0827
+org.eclipse.equinox.jsp.jasper,0.0.0=v20110502
+org.eclipse.pde.api.tools.ee.j2se14,0.0.0=v20110401-1030
+org.eclipse.equinox.p2.ui,0.0.0=v20110601
+org.eclipse.jdt.launching.ui.macosx,0.0.0=v20110509
+org.eclipse.equinox.p2.ui.sdk,0.0.0=v20110502-1955
+org.eclipse.compare.examples,0.0.0=I20110510-0800
+org.eclipse.pde.ua.core,0.0.0=v20110516
+org.eclipse.platform.doc.isv,0.0.0=v20110602-0800
+org.eclipse.ant.launching,0.0.0=v20110506
+org.eclipse.equinox.p2.operations,0.0.0=v20110511-1821
+org.eclipse.compare,0.0.0=I20110525-0800
 org.eclipse.equinox.http.servletbridge,0.0.0=v20100503
-org.eclipse.jdt.compiler.apt,0.0.0=v20100513-0845
-org.eclipse.help.webapp,0.0.0=r36_20101130
-org.eclipse.pde.ui.templates,0.0.0=v20100601
-org.eclipse.equinox.p2.repository,0.0.0=R36x_v20110111-1500
-org.eclipse.equinox.p2.metadata.generator,0.0.0=R36x_v20101208-1400
-org.eclipse.equinox.p2.director.app,0.0.0=R36x_v20100823
-org.eclipse.equinox.launcher.motif.aix.ppc,0.0.0=R36x_v20101019_1345
-org.eclipse.equinox.app,0.0.0=R36x_v20100803
-org.eclipse.swt.motif.hpux.ia64_32,0.0.0=v3659b
-org.eclipse.swt.gtk.solaris.x86,0.0.0=v3659b
-org.eclipse.pde.ds.ui,0.0.0=v20100601
-org.eclipse.core.net.linux.x86,0.0.0=R36x_v20100825-0800
-org.eclipse.equinox.p2.console,0.0.0=v20100601
-org.eclipse.equinox.http.jetty,0.0.0=v20100503
-org.eclipse.swt.examples.browser.demos,0.0.0=v3659b
-org.eclipse.equinox.launcher.cocoa.macosx.x86_64,0.0.0=R36x_v20101019_1345
-org.eclipse.releng.tools,0.0.0=v20100531
-org.eclipse.pde.doc.user,0.0.0=v20101118_r362
-org.eclipse.swt.motif.linux.x86,0.0.0=v3659b
+org.eclipse.jdt.compiler.apt,0.0.0=v0110509-1300
+org.eclipse.help.webapp,0.0.0=v20110518
+org.eclipse.pde.ui.templates,0.0.0=v20110516
+org.eclipse.equinox.p2.repository,0.0.0=v20110601
+org.eclipse.equinox.p2.director.app,0.0.0=v20110505
+org.eclipse.equinox.launcher.motif.aix.ppc,0.0.0=v20110502
+org.eclipse.swt.gtk.aix.ppc,0.0.0=v3735b
+org.eclipse.equinox.app,0.0.0=v20110321
+org.eclipse.swt.gtk.solaris.x86,0.0.0=v3735b
+org.eclipse.pde.ds.ui,0.0.0=v20110516
+org.eclipse.core.net.linux.x86,0.0.0=I20110419-0800
+org.eclipse.equinox.p2.console,0.0.0=v20110502-1955
+org.eclipse.equinox.http.jetty,0.0.0=v20110502
+org.eclipse.swt.examples.browser.demos,0.0.0=v3735b
+org.eclipse.equinox.launcher.cocoa.macosx.x86_64,0.0.0=v20110502
+org.eclipse.releng.tools,0.0.0=v20110523
+org.eclipse.pde.doc.user,0.0.0=v20110601-0800
 org.eclipse.jface.examples.databinding,0.0.0=I20100601-0800
 org.eclipse.equinox.jmx.client.rmi,0.0.0=v20100503
-org.eclipse.equinox.weaving.hook,0.0.0=v20100503
-org.eclipse.debug.ui,0.0.0=v20101201_r362
-org.eclipse.core.net,0.0.0=I20100511-0800
-org.eclipse.core.filesystem.solaris.sparc,0.0.0=v20100505-1235
-org.eclipse.equinox.p2.touchpoint.natives,0.0.0=R36x_v20110111
-org.eclipse.pde.api.tools.ee.cdcfoundation11,0.0.0=v20100506-0900
-org.eclipse.equinox.launcher.win32.win32.ia64,0.0.0=R36x_v20101222
-org.eclipse.swt.examples.browser,0.0.0=v3659b
-org.eclipse.core.filesystem.linux.x86_64,0.0.0=v20100505-1235
-org.eclipse.equinox.event,0.0.0=v20100503
-org.eclipse.ui.ide,0.0.0=M20101201-0800
-org.eclipse.ui.views.log,0.0.0=v20110210_r362
-org.eclipse.equinox.p2.jarprocessor,0.0.0=v20100503a
-org.eclipse.ui.browser,0.0.0=r36_20101216
-org.eclipse.core.expressions,0.0.0=v20100505
-org.eclipse.core.databinding.beans,0.0.0=I20100601-0800
-org.eclipse.equinox.ds,0.0.0=R36x_v20100803
-org.eclipse.equinox.launcher.win32.win32.x86_64,0.0.0=R36x_v20101222
-org.eclipse.equinox.launcher.gtk.linux.x86,0.0.0=R36x_v20101019_1345
+org.eclipse.equinox.weaving.hook,0.0.0=v20110502
+org.eclipse.debug.ui,0.0.0=v20110518
+org.eclipse.core.net,0.0.0=I20110511-0800
+org.eclipse.core.filesystem.solaris.sparc,0.0.0=v20110423-0524
+org.eclipse.equinox.p2.touchpoint.natives,0.0.0=v20110502-1955
+org.eclipse.pde.api.tools.ee.cdcfoundation11,0.0.0=v20110401-1030
+org.eclipse.equinox.launcher.win32.win32.ia64,0.0.0=v20110502
+org.eclipse.swt.examples.browser,0.0.0=v3735b
+org.eclipse.core.filesystem.linux.x86_64,0.0.0=v20110423-0524
+org.eclipse.equinox.event,0.0.0=v20110502
+org.eclipse.ui.ide,0.0.0=I20110519-0100
+org.eclipse.ui.views.log,0.0.0=v20110404
+org.eclipse.equinox.p2.jarprocessor,0.0.0=v20110502-1955
+org.eclipse.ui.browser,0.0.0=v20110426
+org.eclipse.core.expressions,0.0.0=v20110228
+org.eclipse.core.databinding.beans,0.0.0=I20100824-0800
+org.eclipse.equinox.ds,0.0.0=v20110502
+org.eclipse.equinox.launcher.win32.win32.x86_64,0.0.0=v20110502
+org.eclipse.equinox.launcher.gtk.linux.x86,0.0.0=v20110505
 org.eclipse.update.core.linux,0.0.0=v20100512
-org.eclipse.core.databinding.property,0.0.0=I20100601-0800
-org.eclipse.ui.examples.propertysheet,0.0.0=I20100509-0800
-org.eclipse.core.jobs,0.0.0=R36x_v20100824
-org.eclipse.swt.gtk.linux.ppc,0.0.0=v3659b
-org.eclipse.swt.carbon.macosx,0.0.0=v3659b
-org.eclipse.pde.runtime,0.0.0=v20100601
-org.eclipse.pde.build,0.0.0=R36x_20110203
-org.eclipse.equinox.p2.reconciler.dropins,0.0.0=R36x_v20110114
-org.eclipse.equinox.device,0.0.0=v20100503
-org.eclipse.core.commands,0.0.0=I20100512-1500
-org.eclipse.equinox.p2.repository.tools,0.0.0=R36x_v20100823
-org.eclipse.equinox.launcher.gtk.linux.s390x,0.0.0=R36x_v20110125
-org.eclipse.update.core,0.0.0=R36x_v20100629
-org.eclipse.team.core,0.0.0=R36x_v20110203-1036
-org.eclipse.debug.examples.ui,0.0.0=v20100526
-org.eclipse.pde.api.tools.ee.javase16,0.0.0=v20100506-0900
-org.eclipse.compare.win32,0.0.0=R36x_v20101103-0618
-org.eclipse.equinox.p2.installer,0.0.0=v20100503a
-org.eclipse.debug.examples.core,0.0.0=v20100505
-org.eclipse.rcp,0.0.0=v20100527-0800
+org.eclipse.core.databinding.property,0.0.0=I20110222-0800
+org.eclipse.ui.examples.propertysheet,0.0.0=I20110413-1600
+org.eclipse.core.jobs,0.0.0=v20110404
+org.eclipse.swt.carbon.macosx,0.0.0=v3735b
+org.eclipse.pde.runtime,0.0.0=v20110508
+org.eclipse.pde.build,0.0.0=v20110512-1320
+org.eclipse.equinox.p2.reconciler.dropins,0.0.0=v20110510
+org.eclipse.equinox.device,0.0.0=v20101217
+org.eclipse.core.commands,0.0.0=I20110111-0800
+org.eclipse.equinox.p2.repository.tools,0.0.0=v20110512-1320
+org.eclipse.equinox.launcher.gtk.linux.s390x,0.0.0=v20110505
+org.eclipse.update.core,0.0.0=v20110330
+org.eclipse.team.core,0.0.0=I20110525-0800
+org.eclipse.debug.examples.ui,0.0.0=v20110511
+org.eclipse.pde.api.tools.ee.javase16,0.0.0=v20110401-1030
+org.eclipse.compare.win32,0.0.0=I20110510-0800
+org.eclipse.equinox.p2.installer,0.0.0=v20110502-1955
+org.eclipse.debug.examples.core,0.0.0=v20110511
+org.eclipse.rcp,0.0.0=v20110504-0800
 org.eclipse.pde.ds.core,0.0.0=v20100601
-org.eclipse.equinox.registry,0.0.0=v20100503
-org.eclipse.ui.examples.readmetool,0.0.0=I20100509-0800
-org.eclipse.jdt.core.manipulation,0.0.0=v20100520-0800
-org.eclipse.equinox.http.servlet,0.0.0=v20100503
-org.eclipse.equinox.launcher.win32.win32.x86,0.0.0=R36x_v20101222
-org.eclipse.jdt.junit.runtime,0.0.0=v20100526-0800
-org.eclipse.swt.examples.controls,0.0.0=v3659b
-org.eclipse.core.filesystem.linux.ppc,0.0.0=v20100505-1235
-org.eclipse.osgi.jmx,0.0.0=v20100503
-org.eclipse.ui.workbench.compatibility,0.0.0=I20100511-0800
-org.eclipse.core.filesystem.aix.ppc,0.0.0=v20100505-1235
-org.eclipse.swt.cocoa.macosx,0.0.0=v3659b
-org.eclipse.ui,0.0.0=M20110203-1100
+org.eclipse.equinox.registry,0.0.0=v20110502
+org.eclipse.ui.examples.readmetool,0.0.0=I20110413-1600
+org.eclipse.jdt.core.manipulation,0.0.0=v20110505-0800
+org.eclipse.equinox.http.servlet,0.0.0=v20110502
+org.eclipse.equinox.launcher.win32.win32.x86,0.0.0=v20110502
+org.eclipse.jdt.junit.runtime,0.0.0=v20110505-0800
+org.eclipse.swt.examples.controls,0.0.0=v3735b
+org.eclipse.osgi.jmx,0.0.0=v20110414
+org.eclipse.ui.workbench.compatibility,0.0.0=I20110413-1600
+org.eclipse.core.filesystem.aix.ppc,0.0.0=v20110423-0524
+org.eclipse.swt.cocoa.macosx,0.0.0=v3735b
+org.eclipse.ui,0.0.0=I20110602-0100
 org.eclipse.equinox.jmx.client.xmlrpc,0.0.0=v20100503
-org.eclipse.swt.win32.wce_ppc.arm,0.0.0=v3659c
-org.eclipse.compare.examples.xml,0.0.0=I20100505-1245
+org.eclipse.swt.win32.wce_ppc.arm,0.0.0=v3735b
+org.eclipse.compare.examples.xml,0.0.0=I20110510-0800
 org.eclipse.equinox.jsp.jasper.registry,0.0.0=v20100503
-org.eclipse.core.resources,0.0.0=R36x_v20110131-1630
-org.eclipse.team.cvs.ssh2,0.0.0=I20100526-0800
-org.eclipse.equinox.wireadmin,0.0.0=v20100503
-org.eclipse.ant.ui,0.0.0=v20100427
-org.eclipse.swt.gtk.solaris.sparc,0.0.0=v3659b
-org.eclipse.core.net.win32.x86_64,0.0.0=I20100505-1245
-org.eclipse.swt.examples.launcher,0.0.0=v3659b
+org.eclipse.core.resources,0.0.0=v20110510-0712
+org.eclipse.team.cvs.ssh2,0.0.0=I20110511-0800
+org.eclipse.equinox.wireadmin,0.0.0=v20110601
+org.eclipse.ant.ui,0.0.0=v20110510
+org.eclipse.swt.gtk.solaris.sparc,0.0.0=v3735b
+org.eclipse.equinox.region,0.0.0=v20110524
+org.eclipse.core.net.win32.x86_64,0.0.0=I20110331-0827
+org.eclipse.swt.examples.launcher,0.0.0=v3735b
 org.eclipse.equinox.preferences.jmx,0.0.0=v20100503
-org.eclipse.equinox.p2.garbagecollector,0.0.0=v20100503
-org.eclipse.equinox.cm,0.0.0=v20100520
-org.eclipse.equinox.common,0.0.0=v20100503
-org.eclipse.equinox.p2.director,0.0.0=R36x_v20101117-1018
-org.eclipse.equinox.p2.publisher,0.0.0=v20100824-2220
-org.eclipse.jdt.doc.isv,0.0.0=r362_v20101117-0800
-org.eclipse.ltk.core.refactoring,0.0.0=r362_v20101117-0800
-org.eclipse.jdt.core,0.0.0=v_A76_R36x
-org.eclipse.equinox.p2.updatesite,0.0.0=R36x_v20100823
+org.eclipse.equinox.p2.garbagecollector,0.0.0=v20110510
+org.eclipse.equinox.cm,0.0.0=v20110502
+org.eclipse.equinox.common,0.0.0=v20110523
+org.eclipse.equinox.p2.director,0.0.0=v20110504-1715
+org.eclipse.equinox.p2.publisher,0.0.0=v20110511
+org.eclipse.jdt.doc.isv,0.0.0=v20110531-1242
+org.eclipse.ltk.core.refactoring,0.0.0=v20110505-0800
+org.eclipse.jdt.core,0.0.0=v_B61
+org.eclipse.equinox.p2.updatesite,0.0.0=v20110510
 org.eclipse.update.configurator,0.0.0=v20100512
-org.eclipse.core.filesystem.win32.x86,0.0.0=R36x_v20100727-0745
-org.eclipse.equinox.p2.core,0.0.0=R36x_v20110111
-org.eclipse.swt.examples,0.0.0=v3659b
-org.eclipse.cvs,0.0.0=v20100414
-org.eclipse.swt.gtk.linux.x86,0.0.0=v3659b
-org.eclipse.equinox.log,0.0.0=v20100503
+org.eclipse.core.filesystem.win32.x86,0.0.0=v20110423-0524
+org.eclipse.equinox.launcher.gtk.aix.ppc,0.0.0=v20110530
+org.eclipse.equinox.p2.core,0.0.0=v20110502-1955
+org.eclipse.swt.examples,0.0.0=v3735b
+org.eclipse.cvs,0.0.0=v20110505-0800
+org.eclipse.swt.gtk.linux.x86,0.0.0=v3735b
+org.eclipse.equinox.log,0.0.0=v20110502
 org.eclipse.equinox.jmx.client,0.0.0=v20100503
 org.eclipse.ui.win32,0.0.0=I20100509-0800
-org.eclipse.ui.views.properties.tabbed,0.0.0=I20100509-0800
-org.eclipse.equinox.security.ui,0.0.0=v20100503
-org.eclipse.pde.api.tools.ee.j2se13,0.0.0=v20100506-0900
-org.eclipse.swt.motif.solaris.sparc,0.0.0=v3659b
-org.eclipse.equinox.util,0.0.0=v20100503
-org.eclipse.equinox.p2.extensionlocation,0.0.0=v20100518
-org.eclipse.pde.api.tools.ee.osgiminimum12,0.0.0=v20100506-0900
-org.eclipse.equinox.concurrent,0.0.0=v20100503
-org.eclipse.platform.doc.user,0.0.0=r362_v20101117-0800
+org.eclipse.ui.views.properties.tabbed,0.0.0=I20110201-0800
+org.eclipse.equinox.security.ui,0.0.0=v20101004
+org.eclipse.pde.api.tools.ee.j2se13,0.0.0=v20110401-1030
+org.eclipse.equinox.util,0.0.0=v20110502
+org.eclipse.equinox.p2.extensionlocation,0.0.0=v20110510
+org.eclipse.pde.api.tools.ee.osgiminimum12,0.0.0=v20110401-1030
+org.eclipse.equinox.concurrent,0.0.0=v20110502
+org.eclipse.platform.doc.user,0.0.0=v20110601-0800
 org.eclipse.equinox.security.macosx,0.0.0=v20100503
-org.eclipse.equinox.supplement,0.0.0=R36x_v20101021
-org.eclipse.sdk,0.0.0=r362_v20110202
-org.eclipse.equinox.launcher.gtk.linux.ppc64,0.0.0=R36x_v20101019_1345
-org.eclipse.jsch.ui,0.0.0=I20100505-1245
-org.eclipse.core.filesystem.win32.x86_64,0.0.0=R36x_v20100727-0745
+org.eclipse.equinox.supplement,0.0.0=v20110502
+org.eclipse.sdk,0.0.0=v20110504-0800
+org.eclipse.equinox.launcher.gtk.linux.ppc64,0.0.0=v20110505
+org.eclipse.jsch.ui,0.0.0=I20110511-0800
+org.eclipse.core.filesystem.win32.x86_64,0.0.0=v20110423-0524
 org.eclipse.equinox.security.win32.x86,0.0.0=v20100503
-org.eclipse.core.variables,0.0.0=v20100505
-org.eclipse.pde.ui,0.0.0=v20110210_r362
-org.eclipse.equinox.p2.artifact.repository,0.0.0=R36x_v20100901
-org.eclipse.core.runtime.compatibility.auth,0.0.0=v20100517
-org.eclipse.osgi,0.0.0=R36x_v20110210
-org.eclipse.ui.intro.universal,0.0.0=r36_v20100702
+org.eclipse.core.variables,0.0.0=v20110511
+org.eclipse.pde.ui,0.0.0=v20110603
+org.eclipse.equinox.p2.artifact.repository,0.0.0=v20110519
+org.eclipse.core.runtime.compatibility.auth,0.0.0=v20110110
+org.eclipse.osgi,0.0.0=v20110613
+org.eclipse.ui.intro.universal,0.0.0=v20110510
 org.eclipse.swt.jmx,0.0.0=v20100503
-org.eclipse.equinox.launcher.cocoa.macosx,0.0.0=R36x_v20101019_1345
+org.eclipse.equinox.coordinator,0.0.0=v20110502
+org.eclipse.equinox.launcher.cocoa.macosx,0.0.0=v20110502
 org.eclipse.ui.examples.contributions,0.0.0=I20100509-0800
-org.eclipse.team.cvs.ui,0.0.0=R36x_v20110203-1036
-org.eclipse.ui.cheatsheets,0.0.0=v20100427
-org.eclipse.jdt.doc.user,0.0.0=r361_v20100721-0800
-org.eclipse.equinox.useradmin,0.0.0=v20100503
-org.eclipse.jface.text,0.0.0=r361_v20100825-0800
+org.eclipse.team.cvs.ui,0.0.0=I20110510-0800
+org.eclipse.ui.cheatsheets,0.0.0=v20110425
+org.eclipse.jdt.doc.user,0.0.0=v20110601-0800
+org.eclipse.equinox.useradmin,0.0.0=v20110413
+org.eclipse.jface.text,0.0.0=v20110505-0800
 org.eclipse.core.resources.jmx,0.0.0=v20100503
 org.eclipse.update.core.win32,0.0.0=v20100512
-org.eclipse.ui.externaltools,0.0.0=v20100427
-org.eclipse.jdt.junit4.runtime,0.0.0=v20100526-0800
-org.eclipse.pde.api.tools.ee.j2se12,0.0.0=v20100506-0900
-org.eclipse.equinox.http.jetty,1.1.100=v20100519
-org.eclipse.pde.api.tools.ee.osgiminimum11,0.0.0=v20100506-0900
-org.eclipse.ui.navigator,0.0.0=I20100601-0800
-org.eclipse.team.cvs.core,0.0.0=R36x_v20110119-0815
-org.eclipse.pde.api.tools.ee.cdcfoundation10,0.0.0=v20100506-0900
-org.eclipse.equinox.launcher.wpf.win32.x86,0.0.0=R36x_v20101222
-org.eclipse.equinox.preferences,0.0.0=v20100503
+org.eclipse.ui.externaltools,0.0.0=v20110506
+org.eclipse.jdt.junit4.runtime,0.0.0=v20110505-0800
+org.eclipse.pde.api.tools.ee.j2se12,0.0.0=v20110401-1030
+org.eclipse.equinox.http.jetty,1.1.100=v20110418
+org.eclipse.pde.api.tools.ee.osgiminimum11,0.0.0=v20110401-1030
+org.eclipse.ui.navigator,0.0.0=I20110524-0800
+org.eclipse.equinox.console.supportability,0.0.0=v20110207
+org.eclipse.team.cvs.core,0.0.0=I20110510-0800
+org.eclipse.pde.api.tools.ee.cdcfoundation10,0.0.0=v20110401-1030
+org.eclipse.equinox.launcher.wpf.win32.x86,0.0.0=v20110502
+org.eclipse.equinox.preferences,0.0.0=v20110502
 org.eclipse.equinox.jmx.common,0.0.0=v20100503
-org.eclipse.equinox.p2.ui.sdk.scheduler,0.0.0=v20100507-1815
+org.eclipse.equinox.p2.ui.sdk.scheduler,0.0.0=v20110502-1955
 org.eclipse.equinox.jmx.vm,0.0.0=v20100503
-org.eclipse.swt.gtk.aix.ppc64,0.0.0=v3659b
-org.eclipse.ui.editors,0.0.0=r361_v20100825-0800
+org.eclipse.swt.gtk.aix.ppc64,0.0.0=v3735b
+org.eclipse.swt.gtk.hpux.ia64_32,0.0.0=v3735b
+org.eclipse.ui.editors,0.0.0=v20110517-0800
 org.eclipse.equinox.servletbridge.extensionbundle,0.0.0=v20100503
-org.eclipse.core.filebuffers,0.0.0=v20100520-0800
-org.eclipse.equinox.ip,0.0.0=v20100503
-org.eclipse.jdt,0.0.0=r361_v20100714-0800
+org.eclipse.core.filebuffers,0.0.0=v20110505-0800
+org.eclipse.equinox.ip,0.0.0=v20110502
+org.eclipse.jdt,0.0.0=v20110505-0800
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/ECLIPSEF.RSA b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/ECLIPSEF.RSA
deleted file mode 100644
index 47fe778..0000000
Binary files a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/ECLIPSEF.RSA and /dev/null differ
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/ECLIPSEF.SF b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/ECLIPSEF.SF
deleted file mode 100644
index 3422047..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/ECLIPSEF.SF
+++ /dev/null
@@ -1,179 +0,0 @@
-Signature-Version: 1.0
-SHA1-Digest-Manifest: DnymqoTvSz4gbC12HMrSKUQk34w=
-Created-By: 1.6.0 (IBM Corporation)
-SHA1-Digest-Manifest-Main-Attributes: T473SZ5WWmQktg3oaHggnJO/FTM=
-
-Name: lib/ant-apache-bcel.jar
-SHA1-Digest: LOl+pgdc9a4HwZywWL7CEqCEvZs=
-
-Name: etc/mmetrics-frames.xsl
-SHA1-Digest: APiAPtADgoYGSwEquxQdQx5NN0A=
-
-Name: bin/ant.bat
-SHA1-Digest: VRSA9YOPmicxeIZD8LdYkqdUmEA=
-
-Name: etc/tagdiff.xsl
-SHA1-Digest: oQK6F+rUwsdxfJl58vbKAmtTs3Y=
-
-Name: lib/ant.jar
-SHA1-Digest: lQ3OziQI4mYf42vhZl5qK05euHQ=
-
-Name: lib/ant-apache-oro.jar
-SHA1-Digest: 08O0J8DpA2CUYHKRuRY8E6d2FS0=
-
-Name: lib/ant-jsch.jar
-SHA1-Digest: 9REV6G1dh3UOS8ueh6rJVnXaBBE=
-
-Name: about_files/LICENSE.dom.html
-SHA1-Digest: xK0He1PkoQXdHC48ROEqZRNXTL4=
-
-Name: etc/coverage-frames.xsl
-SHA1-Digest: Lk7Vo06ABrH7brbJkP1hKRxLkMg=
-
-Name: lib/ant-jdepend.jar
-SHA1-Digest: 0jLeaOQiRnL1dq7dYpmBw3NIEPk=
-
-Name: about_files/asl-v20.txt
-SHA1-Digest: pJO0L/tUizs1vz2W9gV2VmGJsDs=
-
-Name: lib/ant-nodeps.jar
-SHA1-Digest: b3zl9yIdDVX5up8caMNncYIhOZk=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
-
-Name: lib/ant-apache-regexp.jar
-SHA1-Digest: bCJf89W6L5gZfecnoaC3GY5i9j0=
-
-Name: bin/runant.pl
-SHA1-Digest: 4EKNYCEcyO/SMqxm79fnts8/Q1c=
-
-Name: lib/ant-weblogic.jar
-SHA1-Digest: 1zEByTGSxJzTfSdx+joviPFLPgI=
-
-Name: bin/envset.cmd
-SHA1-Digest: anGgepI9TTUvD6W73h+kGQrc2d0=
-
-Name: etc/checkstyle/checkstyle-text.xsl
-SHA1-Digest: Jzub6NSrWxS9hYda+Wy/SP49SeI=
-
-Name: lib/ant-junit.jar
-SHA1-Digest: Asegl5TsYIaKAuGWD3RQGmYG9iw=
-
-Name: bin/ant.cmd
-SHA1-Digest: fKm5e7CiWr2UH61jbx6Yol3cQZo=
-
-Name: etc/log.xsl
-SHA1-Digest: 0HD61tw+M8q33hpPVPkjJJe4SDo=
-
-Name: bin/antRun
-SHA1-Digest: 3xz5zLVIT2QJnPskzZCOuX0LVnw=
-
-Name: bin/runant.py
-SHA1-Digest: uMviIJaN6y/k6xUbjXhmUd6TN8E=
-
-Name: lib/ant-commons-logging.jar
-SHA1-Digest: gPBkcASbXXb7sM6WCSbP3OnU0qw=
-
-Name: lib/ant-swing.jar
-SHA1-Digest: KeZdzozW8mPvLnnzlpJbnLFHC/k=
-
-Name: etc/jdepend-frames.xsl
-SHA1-Digest: OEsPHq3PIr185ocUtm81ULkmobs=
-
-Name: etc/checkstyle/checkstyle-xdoc.xsl
-SHA1-Digest: mfVMgdE+9JoC0hKc0Vc5f7pbe/c=
-
-Name: etc/changelog.xsl
-SHA1-Digest: 9ZFS8fHSvz42GLs2NDnqzLFo5G8=
-
-Name: lib/ant-launcher.jar
-SHA1-Digest: T5al3RPPs+cl2svqvzwRQyPua1M=
-
-Name: etc/jdepend.xsl
-SHA1-Digest: M6boZHWa9+JeDhCjXtq5Z9Y61dY=
-
-Name: bin/runrc.cmd
-SHA1-Digest: aq6+dBb+jdiXyrvDNmLIOzj21N8=
-
-Name: lib/ant-jmf.jar
-SHA1-Digest: rEt5vCSeiJhrDXhToAlqBYJUlpY=
-
-Name: lib/ant-starteam.jar
-SHA1-Digest: CC7k+9amtUmgE+nMSJswFn0gmdc=
-
-Name: lib/ant-netrexx.jar
-SHA1-Digest: 4MHr/zw5Cad5RNbITo3KEhTVU/g=
-
-Name: plugin.properties
-SHA1-Digest: g7K94ZyjaSU4QSVkjoTpYtl1vqE=
-
-Name: lib/ant-jai.jar
-SHA1-Digest: Hgz5UmlpuD4hOHTE+BQc7wzmHz0=
-
-Name: lib/ant-trax.jar
-SHA1-Digest: w6uurfjcZy7fOSYUPT2jG8svYVo=
-
-Name: bin/antRun.bat
-SHA1-Digest: KX8SW+sZ8gtQYr3boWRpl2DkWrE=
-
-Name: lib/ant-apache-bsf.jar
-SHA1-Digest: usSlJG0vxeeqtxI/5lH/UPeH2fg=
-
-Name: about_files/LICENSE.sax.txt
-SHA1-Digest: CnKqzCUI0E0NUSlVIAfUd8gctxU=
-
-Name: lib/ant-stylebook.jar
-SHA1-Digest: FwmSqxPzrBPJXJ0X4oKHndncTnY=
-
-Name: lib/ant-apache-log4j.jar
-SHA1-Digest: zcg372So4PVCkltPKzEiAFN3rA4=
-
-Name: bin/ant
-SHA1-Digest: bnS5vQF5wYnqXs8zr+3LORKIA0U=
-
-Name: etc/checkstyle/checkstyle-frames.xsl
-SHA1-Digest: cQKamOMX7Att9wW45aAohAWp3K0=
-
-Name: bin/complete-ant-cmd.pl
-SHA1-Digest: wXOPsOb8rPKKwt6rAb3XoXCwFgQ=
-
-Name: about_files/NOTICE
-SHA1-Digest: g5R8FDyNNir6o/tFVnDNSlcP+z0=
-
-Name: lib/ant-apache-resolver.jar
-SHA1-Digest: NNj7gb1Enc2M8v/lMP9D4XO+8W0=
-
-Name: etc/junit-frames.xsl
-SHA1-Digest: 2hTCiaPp95X9ZjX8ZDwjvqwfT6U=
-
-Name: etc/junit-noframes.xsl
-SHA1-Digest: M4u7091ckN+zoCaRvjal1SDwJQE=
-
-Name: lib/ant-antlr.jar
-SHA1-Digest: pYDgw2hfdxjUG5938M9pyip9zoA=
-
-Name: about.html
-SHA1-Digest: tujWEJAt+/IKSC26IMuUh48ercA=
-
-Name: etc/maudit-frames.xsl
-SHA1-Digest: U8xxI3AoPSoVepSv0ZbfrARsTZY=
-
-Name: etc/junit-frames-xalan1.xsl
-SHA1-Digest: Bvmst1NiMllcc+sricG/3Eyszc0=
-
-Name: lib/ant-commons-net.jar
-SHA1-Digest: 054oC0sq2Zt1GCWm8zv3DATb8nQ=
-
-Name: lib/ant-javamail.jar
-SHA1-Digest: eJJcJGmsmr4JB5KfiZJRZcv6xLs=
-
-Name: bin/lcp.bat
-SHA1-Digest: EA5m2+HfGFLhb6ForQdjnlvl3cU=
-
-Name: bin/antenv.cmd
-SHA1-Digest: as5/uc6NFrw5Zqzjc5vZEWg6MsM=
-
-Name: bin/antRun.pl
-SHA1-Digest: Cw3hkFZ/7NbP7kPUGL/WM1n8EKk=
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/MANIFEST.MF b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/MANIFEST.MF
deleted file mode 100644
index 56d762b..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,234 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ClassPath: lib/ant.jar,lib/ant-antlr.jar,lib/ant-apache-bcel.ja
- r,lib/ant-apache-bsf.jar,lib/ant-apache-log4j.jar,lib/ant-apache-oro.
- jar,lib/ant-apache-regexp.jar,lib/ant-apache-resolver.jar,lib/ant-com
- mons-logging.jar,lib/ant-commons-net.jar,lib/ant-jai.jar,lib/ant-java
- mail.jar,lib/ant-jdepend.jar,lib/ant-jmf.jar,lib/ant-jsch.jar,lib/ant
- -junit.jar,lib/ant-launcher.jar,lib/ant-netrexx.jar,lib/ant-nodeps.ja
- r,lib/ant-starteam.jar,lib/ant-stylebook.jar,lib/ant-swing.jar,lib/an
- t-trax.jar,lib/ant-weblogic.jar
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.apache.ant
-Require-Bundle: org.eclipse.osgi
-Export-Package: images,org.apache.tools.ant,org.apache.tools.ant.dispa
- tch,org.apache.tools.ant.filters,org.apache.tools.ant.filters.util,or
- g.apache.tools.ant.helper,org.apache.tools.ant.input,org.apache.tools
- .ant.launch,org.apache.tools.ant.listener,org.apache.tools.ant.loader
- ,org.apache.tools.ant.taskdefs,org.apache.tools.ant.taskdefs.compiler
- s,org.apache.tools.ant.taskdefs.condition,org.apache.tools.ant.taskde
- fs.cvslib,org.apache.tools.ant.taskdefs.email,org.apache.tools.ant.ta
- skdefs.optional,org.apache.tools.ant.taskdefs.optional.ccm,org.apache
- .tools.ant.taskdefs.optional.clearcase,org.apache.tools.ant.taskdefs.
- optional.depend,org.apache.tools.ant.taskdefs.optional.depend.constan
- tpool,org.apache.tools.ant.taskdefs.optional.dotnet,org.apache.tools.
- ant.taskdefs.optional.ejb,org.apache.tools.ant.taskdefs.optional.exte
- nsion,org.apache.tools.ant.taskdefs.optional.extension.resolvers,org.
- apache.tools.ant.taskdefs.optional.i18n,org.apache.tools.ant.taskdefs
- .optional.image,org.apache.tools.ant.taskdefs.optional.j2ee,org.apach
- e.tools.ant.taskdefs.optional.javacc,org.apache.tools.ant.taskdefs.op
- tional.javah,org.apache.tools.ant.taskdefs.optional.jdepend,org.apach
- e.tools.ant.taskdefs.optional.jlink,org.apache.tools.ant.taskdefs.opt
- ional.jsp,org.apache.tools.ant.taskdefs.optional.jsp.compilers,org.ap
- ache.tools.ant.taskdefs.optional.junit,org.apache.tools.ant.taskdefs.
- optional.junit.xsl,org.apache.tools.ant.taskdefs.optional.native2asci
- i,org.apache.tools.ant.taskdefs.optional.net,org.apache.tools.ant.tas
- kdefs.optional.perforce,org.apache.tools.ant.taskdefs.optional.pvcs,o
- rg.apache.tools.ant.taskdefs.optional.scm,org.apache.tools.ant.taskde
- fs.optional.script,org.apache.tools.ant.taskdefs.optional.sos,org.apa
- che.tools.ant.taskdefs.optional.sound,org.apache.tools.ant.taskdefs.o
- ptional.splash,org.apache.tools.ant.taskdefs.optional.ssh,org.apache.
- tools.ant.taskdefs.optional.starteam,org.apache.tools.ant.taskdefs.op
- tional.unix,org.apache.tools.ant.taskdefs.optional.vss,org.apache.too
- ls.ant.taskdefs.optional.windows,org.apache.tools.ant.taskdefs.rmic,o
- rg.apache.tools.ant.types,org.apache.tools.ant.types.conditions,org.a
- pache.tools.ant.types.mappers,org.apache.tools.ant.types.optional,org
- .apache.tools.ant.types.optional.depend,org.apache.tools.ant.types.op
- tional.image,org.apache.tools.ant.types.resolver,org.apache.tools.ant
- .types.resources,org.apache.tools.ant.types.resources.comparators,org
- .apache.tools.ant.types.resources.selectors,org.apache.tools.ant.type
- s.selectors,org.apache.tools.ant.types.selectors.modifiedselector,org
- .apache.tools.ant.types.spi,org.apache.tools.ant.util,org.apache.tool
- s.ant.util.depend,org.apache.tools.ant.util.depend.bcel,org.apache.to
- ols.ant.util.facade,org.apache.tools.ant.util.java15,org.apache.tools
- .ant.util.optional,org.apache.tools.ant.util.regexp,org.apache.tools.
- bzip2,org.apache.tools.mail,org.apache.tools.tar,org.apache.tools.zip
-Bundle-Version: 1.7.1.v20100518-1145
-Bundle-ManifestVersion: 2
-
-Name: lib/ant-apache-bcel.jar
-SHA1-Digest: mL7ypH+XtKGLayV/7EGF6kwoYwI=
-
-Name: etc/mmetrics-frames.xsl
-SHA1-Digest: cQnziGYZC2FrO0zwFE92P1bP2v8=
-
-Name: bin/ant.bat
-SHA1-Digest: Rc2etgn1RATkrEL3NCa3Fs75Ov8=
-
-Name: etc/tagdiff.xsl
-SHA1-Digest: ddaegkBkww5CoIlRpSR8RDUI1bQ=
-
-Name: lib/ant.jar
-SHA1-Digest: QmGGhQi4COYG3u+KHGHVjvZA9hM=
-
-Name: lib/ant-apache-oro.jar
-SHA1-Digest: 3mVzpEG3xmdgVi2+lwuMPKHKZfM=
-
-Name: lib/ant-jsch.jar
-SHA1-Digest: FmNWUeOpmyXmyH5K7WvBCfyprsE=
-
-Name: about_files/LICENSE.dom.html
-SHA1-Digest: 9F8cZaCgriCte0T6Mt5hAFumadk=
-
-Name: etc/coverage-frames.xsl
-SHA1-Digest: 5SE/NhPWEbqzGDGL58dwEbkhwRs=
-
-Name: lib/ant-jdepend.jar
-SHA1-Digest: juZ5ScBk7RdbT9kx1nq/TB1qix8=
-
-Name: about_files/asl-v20.txt
-SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
-
-Name: lib/ant-nodeps.jar
-SHA1-Digest: stuzByOvnFqXXfMR1DOHMbURR4Y=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
-
-Name: lib/ant-apache-regexp.jar
-SHA1-Digest: bCOUGaWl76Yhuy0KPpq3Cl/w55g=
-
-Name: bin/runant.pl
-SHA1-Digest: tynYaGh8+BtWDsZ6PljZdoi+egU=
-
-Name: lib/ant-weblogic.jar
-SHA1-Digest: q/YjU1rB8u/dxjXcENxmEQ3pgXQ=
-
-Name: etc/checkstyle/checkstyle-text.xsl
-SHA1-Digest: CqSzAXEeeV20DtFpeujwjL9FEW8=
-
-Name: bin/envset.cmd
-SHA1-Digest: EJ+ljL5sbUQ8mWVn8V49XPBuAz0=
-
-Name: bin/ant.cmd
-SHA1-Digest: 4jPJI7nJO+v3oPpbi5GbrT7x9qk=
-
-Name: lib/ant-junit.jar
-SHA1-Digest: VPSxi0uuALZXXpJF4QFhkpUOpUI=
-
-Name: bin/antRun
-SHA1-Digest: S63QT5F5EI1BCpIj59nosT3lVTw=
-
-Name: etc/log.xsl
-SHA1-Digest: juv2H0VplMm4ri1rzgdOW0yCroc=
-
-Name: bin/runant.py
-SHA1-Digest: Kg3iFzRnZW6PVIFmbj7Eyuo72cM=
-
-Name: lib/ant-commons-logging.jar
-SHA1-Digest: NjlZah2crXobTrvv4OGCIMjO+8A=
-
-Name: lib/ant-swing.jar
-SHA1-Digest: XynrDWbhmRUIf9PM4gVJqgCaA5s=
-
-Name: etc/jdepend-frames.xsl
-SHA1-Digest: U2Bb6aMxgbEYqXkCm2sujeLP7Zo=
-
-Name: etc/checkstyle/checkstyle-xdoc.xsl
-SHA1-Digest: yL3TqCA4pc0daZXtXwAiCN6xHxI=
-
-Name: etc/changelog.xsl
-SHA1-Digest: 2EZZ+jSTt1TTlBYPN4vGUAX7cTQ=
-
-Name: lib/ant-launcher.jar
-SHA1-Digest: GHtlGif/wHyc2Emb1oDygUu5sOU=
-
-Name: etc/jdepend.xsl
-SHA1-Digest: 0rf14aLzhLsun24uUsXVVvkHM6I=
-
-Name: bin/runrc.cmd
-SHA1-Digest: eNo+cuYQicndcc56FVkRScD5w30=
-
-Name: lib/ant-jmf.jar
-SHA1-Digest: LkMJEvWekiNff2+40hzqUtHWv5Y=
-
-Name: lib/ant-starteam.jar
-SHA1-Digest: phxps48pSlCZmpwiyZY2cbk6yaw=
-
-Name: lib/ant-netrexx.jar
-SHA1-Digest: QWTo/YKGFWwaSuanXxbeyc3U2yQ=
-
-Name: plugin.properties
-SHA1-Digest: EM3JUl9D3jv9MhxxbdTWTUt6kbI=
-
-Name: lib/ant-jai.jar
-SHA1-Digest: EJ+iUjul2mZKti+TEgmuQ3kIh/o=
-
-Name: lib/ant-trax.jar
-SHA1-Digest: HZ8Fu0t4n4XH3pf7VeSW1i3ymAw=
-
-Name: bin/antRun.bat
-SHA1-Digest: zB9JbFFhlXTVgwaJlw61wNELj6k=
-
-Name: lib/ant-apache-bsf.jar
-SHA1-Digest: 3m9VogNJMXiCF1ZkaeMRPdtM9OA=
-
-Name: about_files/LICENSE.sax.txt
-SHA1-Digest: uLnQn2qwT77aJ6MThuLeWz1I5ek=
-
-Name: lib/ant-stylebook.jar
-SHA1-Digest: E+Uxq8GjVBkGmc4TZ3JQh4MZeRw=
-
-Name: lib/ant-apache-log4j.jar
-SHA1-Digest: 35KkJkHQuFhTpd0mbJemrVVJCQI=
-
-Name: bin/ant
-SHA1-Digest: jK7w10Hy+BIiSimUAhjgizdaBuY=
-
-Name: etc/checkstyle/checkstyle-frames.xsl
-SHA1-Digest: 5KYg/jQq+iuWKS5gF1qX37F+UX0=
-
-Name: bin/complete-ant-cmd.pl
-SHA1-Digest: F1mrSua1xk98goAA1YvtOoJNiuw=
-
-Name: about_files/NOTICE
-SHA1-Digest: v3XrGNGv2sQGqBe+ObJZnq9915g=
-
-Name: lib/ant-apache-resolver.jar
-SHA1-Digest: fzM5Jwsbw+H2XUPO5uxQGgO9mRA=
-
-Name: etc/junit-frames.xsl
-SHA1-Digest: XIcHcYoM8I5hzTkhdiy5iskupIM=
-
-Name: etc/junit-noframes.xsl
-SHA1-Digest: zmgmTYDnXS0QZvMd3wUarjPR7aE=
-
-Name: lib/ant-antlr.jar
-SHA1-Digest: Kagxm9lkBtXTXWMRKDWn52KZeTE=
-
-Name: about.html
-SHA1-Digest: cPPs9diR9VPNDzWrCs1FLNOdJEo=
-
-Name: etc/maudit-frames.xsl
-SHA1-Digest: 1oML7OYqWjV+hPKu/ItdzrAFGcA=
-
-Name: etc/junit-frames-xalan1.xsl
-SHA1-Digest: ME/2vW22HRXG87EwVJ9LFfkfyEI=
-
-Name: lib/ant-commons-net.jar
-SHA1-Digest: Rg+mKr8hSVibDLdQwjnhGg+oMuA=
-
-Name: lib/ant-javamail.jar
-SHA1-Digest: 2b0KzqoBPtuNEHHwW3KXqLGLby8=
-
-Name: bin/lcp.bat
-SHA1-Digest: eX7ICcBsanATsaEDkn5+oTA4QaQ=
-
-Name: bin/antenv.cmd
-SHA1-Digest: s2zvcJEs2E2x6ckfXZoGxx1OF1Y=
-
-Name: bin/antRun.pl
-SHA1-Digest: mynp1agPByxojQUKZqlVZkXZSHY=
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about.html b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about.html
deleted file mode 100644
index 08d5781..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>July 14, 2008</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Ant 1.7.1</h4>
-<p>The plug-in includes software developed by The Apache Software Foundation as part of the Ant project.</p>
-
-<p>The Ant binary code in ant.jar and the scripts ant, ant.bat, ant.cmd, antenv.cmd, antRun, antRun.bat, antRun.pl, complete-ant-cmd.pl, envset.cmd, lcp.bat, runant.pl, runant.py and runrc.cmd are included with the plug-in with no modifications.
-The Ant source code is located in the zip files named ant-*src.zip.</p>
-
-<p>Your use of the Ant code and the scripts is subject to the terms and conditions of the Apache License, Version 2.0.  A copy of the license is contained
-in the file <a href="about_files/asl-v20.txt" target="_blank">asl-v20.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
-
-<p>The names "Ant" and "Apache Software Foundation" must not be used to endorse or promote products derived from this 
-software without prior written permission.  For written permission, please contact <a href="mailto:apache at apache.org">apache at apache.org</a>.</p>
-
-<p>The Apache attribution <a href="about_files/NOTICE" target="_blank">NOTICE</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
-
-<p>Ant includes the following software:</p>
-
-<blockquote>
-	<h4>DOM</h4>
-	<p>DOM is developed by the World Wide Web Consortium.  Your use of DOM is subject to the terms and conditions of the license found in the
-	file <a href="about_files/LICENSE.dom.html" target="_blank">LICENSE.dom.html</a> which is included with this plug-in and can also be found at
-	<a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720" target="_blank">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>.</p>
-	
-	<h4>SAX</h4>
-	
-	<p>SAX is developed by the SAX project (<a href="http://www.saxproject.org" target="_blank">http://www.saxproject.org</a>).  Your use of SAX is subject to the
-	terms and conditions of the license found in the file <a href="about_files/LICENSE.sax.txt" target="_blank">LICENSE.sax.txt</a> which is included with this plug-in.</p>
-</blockquote>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/LICENSE.dom.html b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/LICENSE.dom.html
deleted file mode 100644
index 97e7898..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/LICENSE.dom.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>License</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<p>This license came from:<br>
-<a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a></p>
-
-<p>
-W3C® SOFTWARE NOTICE AND LICENSE<br>
-Copyright © 1994-2001 <a href="http://www.w3.org/">World Wide Web Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts Institute of Technology</a>, 
-<a href="http://www.inria.fr/">Institut National de Recherche en Informatique et en Automatique</a>, <a href="http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved.<br>
-<a href="http://www.w3.org/Consortium/Legal/">http://www.w3.org/Consortium/Legal/</a></p>
-
-<p>
-This W3C work (including software, documents, or other related<br>
-items) is being provided by the copyright holders under the<br>
-following license. By obtaining, using and/or copying this work,<br>
-you (the licensee) agree that you have read, understood, and will<br>
-comply with the following terms and conditions:<br>
-Permission to use, copy, modify, and distribute this software<br>
-and its documentation, with or without modification, for any<br>
-purpose and without fee or royalty is hereby granted, provided that<br>
-you include the following on ALL copies of the software and<br>
-documentation or portions thereof, including modifications, that<br>
-you make:</p>
-
-<p>
-The full text of this NOTICE in a location viewable to users of<br>
-the redistributed or derivative work.</p>
-
-<p>
-Any pre-existing intellectual property disclaimers, notices, or<br>
-terms and conditions. If none exist, a short notice of the<br>
-following form (hypertext is preferred, text is permitted) should<br>
-be used within the body of any redistributed or derivative code:<br>
-"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of<br>
-Technology, Institut National de<br>
-Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.<br>
-http://www.w3.org/Consortium/Legal/"</p>
-
-<p>
-Notice of any changes or modifications to the W3C files,<br>
-including the date changes were made. (We recommend you provide <br>
-URIs to the location from which the code is derived.)</p>
-
-<p>
-THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND<br>
-COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR<br>
-IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF<br>
-MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE<br>
-USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD<br>
-PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.<br>
-COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,<br>
-SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE<br>
-SOFTWARE OR DOCUMENTATION.</p>
-
-<p>
-The name and trademarks of copyright holders may NOT be used in<br>
-advertising or publicity pertaining to the software without<br>
-specific, written prior permission. Title to copyright in this<br>
-software and any associated documentation will at all times remain<br>
-with copyright holders.</p>
-
-<p>
-____________________________________<br>
-This formulation of W3C's notice and license became active on<br>
-August 14 1998 so as to improve compatibility with GPL. This<br>
-version ensures that W3C software licensing terms are no more<br>
-restrictive than GPL and consequently W3C software may be<br>
-distributed in GPL packages. See the older formulation for the<br>
-policy prior to this date. Please see our Copyright FAQ for common <br>
-questions about using materials from<br>
-our site, including specific terms and conditions for packages like<br>
-libwww, Amaya, and Jigsaw. <br>
-Other questions about this notice can be<br>
-directed to site-policy at w3.org.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/LICENSE.sax.txt b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/LICENSE.sax.txt
deleted file mode 100644
index d46b3dc..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/LICENSE.sax.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-This license came from: http://www.megginson.com/SAX/copying.html
-  However please note future versions of SAX may be covered 
-  under http://saxproject.org/?selected=pd
-
-
-This page is now out of date -- see the new SAX site at 
-http://www.saxproject.org/ for more up-to-date
-releases and other information. Please change your bookmarks.
-
-
-SAX2 is Free!
-
-I hereby abandon any property rights to SAX 2.0 (the Simple API for
-XML), and release all of the SAX 2.0 source code, compiled code, and
-documentation contained in this distribution into the Public Domain.
-SAX comes with NO WARRANTY or guarantee of fitness for any
-purpose.
-
-David Megginson, david at megginson.com
-2000-05-05
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/NOTICE b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/NOTICE
deleted file mode 100644
index 4c88cc6..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/NOTICE
+++ /dev/null
@@ -1,26 +0,0 @@
-   =========================================================================
-   ==  NOTICE file corresponding to the section 4 d of                    ==
-   ==  the Apache License, Version 2.0,                                   ==
-   ==  in this case for the Apache Ant distribution.                      ==
-   =========================================================================
-
-   Apache Ant
-   Copyright 1999-2008 The Apache Software Foundation
-
-   This product includes software developed by
-   The Apache Software Foundation (http://www.apache.org/).
-
-   This product includes also software developed by :
-     - the W3C consortium (http://www.w3c.org) ,
-     - the SAX project (http://www.saxproject.org)
-
-   The <sync> task is based on code Copyright (c) 2002, Landmark
-   Graphics Corp that has been kindly donated to the Apache Software
-   Foundation.
-
-   Portions of this software were originally based on the following:
-     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
-     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
-     - voluntary contributions made by Paul Eng on behalf of the 
-       Apache Software Foundation that were originally developed at iClick, Inc.,
-       software copyright (c) 1999.
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant
deleted file mode 100644
index 2e60839..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant
+++ /dev/null
@@ -1,326 +0,0 @@
-#! /bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Extract launch and ant arguments, (see details below).
-ant_exec_args=
-no_config=false
-use_jikes_default=false
-ant_exec_debug=false
-show_help=false
-for arg in "$@" ; do
-  if [ "$arg" = "--noconfig" ] ; then
-    no_config=true
-  elif [ "$arg" = "--usejikes" ] ; then
-    use_jikes_default=true
-  elif [ "$arg" = "--execdebug" ] ; then
-    ant_exec_debug=true
-  elif [ my"$arg" = my"--h"  -o my"$arg" = my"--help"  ] ; then
-    show_help=true
-    ant_exec_args="$ant_exec_args -h"
-  else
-    if [  my"$arg" = my"-h"  -o  my"$arg" = my"-help" ] ; then
-      show_help=true
-    fi
-    ant_exec_args="$ant_exec_args \"$arg\""
-  fi
-done
-
-# Source/default ant configuration
-if $no_config ; then
-  rpm_mode=false
-  usejikes=$use_jikes_default
-else
-  # load system-wide ant configuration (ONLY if ANT_HOME has NOT been set)
-  if [ -z "$ANT_HOME" -o "$ANT_HOME" = "/usr/share/ant" ]; then
-      if [ -f "/etc/ant.conf" ] ; then
-          . /etc/ant.conf
-      fi
-  fi
-
-  # load user ant configuration
-  if [ -f "$HOME/.ant/ant.conf" ] ; then
-    . $HOME/.ant/ant.conf
-  fi
-  if [ -f "$HOME/.antrc" ] ; then
-    . "$HOME/.antrc"
-  fi
-
-  # provide default configuration values
-  if [ -z "$rpm_mode" ] ; then
-    rpm_mode=false
-  fi
-  if [ -z "$usejikes" ] ; then
-    usejikes=$use_jikes_default
-  fi
-fi
-
-# Setup Java environment in rpm mode
-if $rpm_mode ; then
-  if [ -f /usr/share/java-utils/java-functions ] ; then
-    . /usr/share/java-utils/java-functions
-    set_jvm
-    set_javacmd
-  fi
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  Darwin*) darwin=true
-           if [ -z "$JAVA_HOME" ] ; then
-             JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
-           fi
-           ;;
-esac
-
-if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then
-  ## resolve links - $0 may be a link to ant's home
-  PRG="$0"
-  progname=`basename "$0"`
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-    PRG="$link"
-    else
-    PRG=`dirname "$PRG"`"/$link"
-    fi
-  done
-
-  ANT_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  ANT_HOME=`cd "$ANT_HOME" > /dev/null && pwd`
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$ANT_HOME" ] &&
-    ANT_HOME=`cygpath --unix "$ANT_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# set ANT_LIB location
-ANT_LIB="${ANT_HOME}/lib"
-
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    # IBM's JDK on AIX uses strange locations for the executables
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    elif [ -x "$JAVA_HOME/jre/bin/java" ] ; then
-      JAVACMD="$JAVA_HOME/jre/bin/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD=`which java 2> /dev/null `
-    if [ -z "$JAVACMD" ] ; then
-        JAVACMD=java
-    fi
-  fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly."
-  echo "  We cannot execute $JAVACMD"
-  exit 1
-fi
-
-# Build local classpath using just the launcher in non-rpm mode or
-# use the Jpackage helper in rpm mode with basic and default jars
-# specified in the ant.conf configuration. Because the launcher is
-# used, libraries linked in ANT_HOME/lib will also be included, but this
-# is discouraged as it is not java-version safe. A user should
-# request optional jars and their dependencies via the OPT_JAR_LIST
-# variable
-if $rpm_mode && [ -x /usr/bin/build-classpath ] ; then
-  LOCALCLASSPATH="$(/usr/bin/build-classpath ant ant-launcher jaxp_parser_impl xml-commons-apis)"
-
-  # If no optional jars have been specified then build the default list
-  if [ -z "$OPT_JAR_LIST" ] ; then
-    for file in /etc/ant.d/*; do
-      if [ -f "$file" ]; then
-        case "$file" in
-        *~) ;;
-        *#*) ;;
-        *.rpmsave) ;;
-        *.rpmnew) ;;
-        *)
-          for dep in `cat "$file"`; do
-            case "$OPT_JAR_LIST" in
-            *"$dep"*) ;;
-            *) OPT_JAR_LIST="$OPT_JAR_LIST${OPT_JAR_LIST:+ }$dep"
-            esac
-          done
-        esac
-      fi
-    done
-  fi
-
-  # If the user requested to try to add some other jars to the classpath
-  if [ -n "$OPT_JAR_LIST" ] ; then
-    _OPTCLASSPATH="$(/usr/bin/build-classpath $OPT_JAR_LIST 2> /dev/null)"
-    if [ -n "$_OPTCLASSPATH" ] ; then 
-      LOCALCLASSPATH="$LOCALCLASSPATH:$_OPTCLASSPATH"
-    fi
-  fi
-
-  # Explicitly add javac path to classpath, assume JAVA_HOME set
-  # properly in rpm mode
-  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
-  fi
-  if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
-  fi
-
-  # if CLASSPATH_OVERRIDE env var is set, LOCALCLASSPATH will be
-  # user CLASSPATH first and ant-found jars after.
-  # In that case, the user CLASSPATH will override ant-found jars
-  #
-  # if CLASSPATH_OVERRIDE is not set, we'll have the normal behaviour
-  # with ant-found jars first and user CLASSPATH after
-  if [ -n "$CLASSPATH" ] ; then
-    # merge local and specified classpath 
-    if [ -z "$LOCALCLASSPATH" ] ; then 
-      LOCALCLASSPATH="$CLASSPATH"
-    elif [ -n "$CLASSPATH_OVERRIDE" ] ; then
-      LOCALCLASSPATH="$CLASSPATH:$LOCALCLASSPATH"
-    else
-      LOCALCLASSPATH="$LOCALCLASSPATH:$CLASSPATH"
-    fi
-
-    # remove class path from launcher -cp option
-    CLASSPATH=""
-  fi
-else
-  # not using rpm_mode; use launcher to determine classpaths
-  if [ -z "$LOCALCLASSPATH" ] ; then
-      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar
-  else
-      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH
-  fi
-fi
-
-if [ -n "$JAVA_HOME" ] ; then
-  # OSX hack to make Ant work with jikes
-  if $darwin ; then
-    OSXHACK="${JAVA_HOME}/../Classes"
-    if [ -d "${OSXHACK}" ] ; then
-      for i in "${OSXHACK}"/*.jar
-      do
-        JIKESPATH="$JIKESPATH:$i"
-      done
-    fi
-  fi
-fi
-
-# Allow Jikes support (off by default)
-if $usejikes; then
-  ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
-fi
-
-# For Cygwin, switch paths to appropriate format before running java
-# For PATHs convert to unix format first, then to windows format to ensure
-# both formats are supported. Probably this will fail on directories with ;
-# in the name in the path. Let's assume that paths containing ; are more
-# rare than windows style paths on cygwin.
-if $cygwin; then
-  if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
-    format=mixed
-  else
-    format=windows
-  fi
-  ANT_HOME=`cygpath --$format "$ANT_HOME"`
-  ANT_LIB=`cygpath --$format "$ANT_LIB"`
-  JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
-  LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
-  LOCALCLASSPATH=`cygpath --path --$format "$LCP_TEMP"`
-  if [ -n "$CLASSPATH" ] ; then
-    CP_TEMP=`cygpath --path --unix "$CLASSPATH"`
-    CLASSPATH=`cygpath --path --$format "$CP_TEMP"`
-  fi
-  CYGHOME=`cygpath --$format "$HOME"`
-fi
-
-# Show script help if requested
-if $show_help ; then
-  echo $0 '[script options] [options] [target [target2 [target3] ..]]'
-  echo 'Script Options:'
-  echo '  --help, --h            print this message and ant help'
-  echo '  --noconfig             suppress sourcing of /etc/ant.conf,'
-  echo '                         $HOME/.ant/ant.conf, and $HOME/.antrc'
-  echo '                         configuration files'
-  echo '  --usejikes             enable use of jikes by default, unless'
-  echo '                         set explicitly in configuration files'
-  echo '  --execdebug            print ant exec line generated by this'
-  echo '                         launch script'
-  echo '  '
-fi
-# add a second backslash to variables terminated by a backslash under cygwin
-if $cygwin; then
-  case "$ANT_HOME" in
-    *\\ )
-    ANT_HOME="$ANT_HOME\\"
-    ;;
-  esac
-  case "$CYGHOME" in
-    *\\ )
-    CYGHOME="$CYGHOME\\"
-    ;;
-  esac
-  case "$JIKESPATH" in
-    *\\ )
-    JIKESPATH="$JIKESPATH\\"
-    ;;
-  esac
-  case "$LOCALCLASSPATH" in
-    *\\ )
-    LOCALCLASSPATH="$LOCALCLASSPATH\\"
-    ;;
-  esac
-  case "$CLASSPATH" in
-    *\\ )
-    CLASSPATH="$CLASSPATH\\"
-    ;;
-  esac
-fi
-# Execute ant using eval/exec to preserve spaces in paths,
-# java options, and ant args
-ant_sys_opts=
-if [ -n "$CYGHOME" ]; then
-  if [ -n "$JIKESPATH" ]; then
-    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\" -Dcygwin.user.home=\"$CYGHOME\""
-  else
-    ant_sys_opts="-Dcygwin.user.home=\"$CYGHOME\""
-  fi
-else
-  if [ -n "$JIKESPATH" ]; then
-    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\""
-  fi
-fi
-ant_exec_command="exec \"$JAVACMD\" $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\" $ant_exec_args"
-if $ant_exec_debug ; then
-    echo $ant_exec_command
-fi
-eval $ant_exec_command
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant.bat b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant.bat
deleted file mode 100644
index 6d57c81..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant.bat
+++ /dev/null
@@ -1,226 +0,0 @@
- at echo off
-
-REM  Licensed to the Apache Software Foundation (ASF) under one or more
-REM  contributor license agreements.  See the NOTICE file distributed with
-REM  this work for additional information regarding copyright ownership.
-REM  The ASF licenses this file to You under the Apache License, Version 2.0
-REM  (the "License"); you may not use this file except in compliance with
-REM  the License.  You may obtain a copy of the License at
-REM 
-REM      http://www.apache.org/licenses/LICENSE-2.0
-REM 
-REM  Unless required by applicable law or agreed to in writing, software
-REM  distributed under the License is distributed on an "AS IS" BASIS,
-REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM  See the License for the specific language governing permissions and
-REM  limitations under the License.
-
-REM This is an inordinately troublesome piece of code, particularly because it
-REM tries to work on both Win9x and WinNT-based systems. If we could abandon '9x
-REM support, things would be much easier, but sadly, it is not yet time.
-REM Be cautious about editing this, and only add WinNT specific stuff in code that
-REM only runs on WinNT.
-
-if "%HOME%"=="" goto homeDrivePathPre
-if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
-
-:homeDrivePathPre
-if "%HOMEDRIVE%%HOMEPATH%"=="" goto userProfilePre
-if "%HOMEDRIVE%%HOMEPATH%"=="%HOME%" goto userProfilePre
-if exist "%HOMEDRIVE%%HOMEPATH%\antrc_pre.bat" call "%HOMEDRIVE%%HOMEPATH%\antrc_pre.bat"
-
-:userProfilePre
-if "%USERPROFILE%"=="" goto alpha
-if "%USERPROFILE%"=="%HOME%" goto alpha
-if "%USERPROFILE%"=="%HOMEDRIVE%%HOMEPATH%" goto alpha
-if exist "%USERPROFILE%\antrc_pre.bat" call "%USERPROFILE%\antrc_pre.bat"
-
-:alpha
-
-if "%OS%"=="Windows_NT" @setlocal
-if "%OS%"=="WINNT" @setlocal
-
-if "%ANT_HOME%"=="" goto setDefaultAntHome
-
-:stripAntHome
-if not _%ANT_HOME:~-1%==_\ goto checkClasspath
-set ANT_HOME=%ANT_HOME:~0,-1%
-goto stripAntHome
-
-:setDefaultAntHome
-rem %~dp0 is expanded pathname of the current script under NT
-set ANT_HOME=%~dp0..
-
-:checkClasspath
-set _USE_CLASSPATH=yes
-rem CLASSPATH must not be used if it is equal to ""
-if "%CLASSPATH%"=="""" set _USE_CLASSPATH=no
-if "%CLASSPATH%"=="" set _USE_CLASSPATH=no
-
-rem Slurp the command line arguments. This loop allows for an unlimited number
-rem of arguments (up to the command line limit, anyway).
-set ANT_CMD_LINE_ARGS=%1
-if ""%1""=="""" goto doneStart
-shift
-:setupArgs
-if ""%1""=="""" goto doneStart
-if ""%1""==""-noclasspath"" goto clearclasspath
-set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
-shift
-goto setupArgs
-
-rem here is there is a -noclasspath in the options
-:clearclasspath
-set _USE_CLASSPATH=no
-shift
-goto setupArgs
-
-rem This label provides a place for the argument list loop to break out
-rem and for NT handling to skip to.
-
-:doneStart
-
-if _USE_CLASSPATH==no goto findAntHome
-
-:stripClasspath
-if not _%CLASSPATH:~-1%==_\ goto findAntHome
-set CLASSPATH=%CLASSPATH:~0,-1%
-goto stripClasspath
-
-:findAntHome
-rem find ANT_HOME if it does not exist due to either an invalid value passed
-rem by the user or the %0 problem on Windows 9x
-if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
-
-rem check for ant in Program Files
-if not exist "%ProgramFiles%\ant" goto checkSystemDrive
-set ANT_HOME=%ProgramFiles%\ant
-goto checkJava
-
-:checkSystemDrive
-rem check for ant in root directory of system drive
-if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
-set ANT_HOME=%SystemDrive%\ant
-goto checkJava
-
-:checkCDrive
-rem check for ant in C:\ant for Win9X users
-if not exist C:\ant\lib\ant.jar goto noAntHome
-set ANT_HOME=C:\ant
-goto checkJava
-
-:noAntHome
-echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
-goto end
-
-:checkJava
-set _JAVACMD=%JAVACMD%
-
-if "%JAVA_HOME%" == "" goto noJavaHome
-if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
-goto checkJikes
-
-:noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=java.exe
-
-:checkJikes
-if not "%JIKESPATH%"=="" goto runAntWithJikes
-
-:runAnt
-if "%_USE_CLASSPATH%"=="no" goto runAntNoClasspath
-:runAntWithClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:runAntNoClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:runAntWithJikes
-
-if not _%JIKESPATH:~-1%==_\ goto checkJikesAndClasspath
-set JIKESPATH=%JIKESPATH:~0,-1%
-goto runAntWithJikes
-
-:checkJikesAndClasspath
-
-if "%_USE_CLASSPATH%"=="no" goto runAntWithJikesNoClasspath
-
-:runAntWithJikesAndClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS%  -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:runAntWithJikesNoClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-rem Check the error code of the Ant build
-if not "%OS%"=="Windows_NT" goto onError
-set ANT_ERROR=%ERRORLEVEL%
-goto end
-
-:onError
-rem Windows 9x way of checking the error code.  It matches via brute force.
-for %%i in (1 10 100) do set err%%i=
-for %%i in (0 1 2) do if errorlevel %%i00 set err100=%%i
-if %err100%==2 goto onError200
-if %err100%==0 set err100=
-for %%i in (0 1 2 3 4 5 6 7 8 9) do if errorlevel %err100%%%i0 set err10=%%i
-if "%err100%"=="" if %err10%==0 set err10=
-:onError1
-for %%i in (0 1 2 3 4 5 6 7 8 9) do if errorlevel %err100%%err10%%%i set err1=%%i
-goto onErrorEnd
-:onError200
-for %%i in (0 1 2 3 4 5) do if errorlevel 2%%i0 set err10=%%i
-if err10==5 for %%i in (0 1 2 3 4 5) do if errorlevel 25%%i set err1=%%i
-if not err10==5 goto onError1
-:onErrorEnd
-set ANT_ERROR=%err100%%err10%%err1%
-for %%i in (1 10 100) do set err%%i=
-
-:end
-rem bug ID 32069: resetting an undefined env variable changes the errorlevel.
-if not "%_JAVACMD%"=="" set _JAVACMD=
-if not "%_ANT_CMD_LINE_ARGS%"=="" set ANT_CMD_LINE_ARGS=
-
-if "%ANT_ERROR%"=="0" goto mainEnd
-
-rem Set the return code if we are not in NT.  We can only set
-rem a value of 1, but it's better than nothing.
-if not "%OS%"=="Windows_NT" echo 1 > nul | choice /n /c:1
-
-rem Set the ERRORLEVEL if we are running NT.
-if "%OS%"=="Windows_NT" color 00
-
-goto omega
-
-:mainEnd
-
-rem If there were no errors, we run the post script.
-if "%OS%"=="Windows_NT" @endlocal
-if "%OS%"=="WINNT" @endlocal
-
-if "%HOME%"=="" goto homeDrivePathPost
-if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
-
-:homeDrivePathPost
-if "%HOMEDRIVE%%HOMEPATH%"=="" goto userProfilePost
-if "%HOMEDRIVE%%HOMEPATH%"=="%HOME%" goto userProfilePost
-if exist "%HOMEDRIVE%%HOMEPATH%\antrc_post.bat" call "%HOMEDRIVE%%HOMEPATH%\antrc_post.bat"
-
-:userProfilePost
-if "%USERPROFILE%"=="" goto omega
-if "%USERPROFILE%"=="%HOME%" goto omega
-if "%USERPROFILE%"=="%HOMEDRIVE%%HOMEPATH%" goto omega
-if exist "%USERPROFILE%\antrc_post.bat" call "%USERPROFILE%\antrc_post.bat"
-
-:omega
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant.cmd b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant.cmd
deleted file mode 100644
index d221a40..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/ant.cmd
+++ /dev/null
@@ -1,93 +0,0 @@
-/* 
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- 
-    Run ant
-*/
-
-'@echo off'
-parse arg mode envarg '::' antarg
-
-if mode\='.' & mode\='..' & mode\='/' then do
-  envarg = mode envarg
-  mode = ''
-end
-
-if antarg = '' then do
-  antarg = envarg
-  envarg = ''
-end
-
-x = setlocal()
-
-env="OS2ENVIRONMENT"
-antenv = _getenv_('antenv')
-if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"'
-
-if mode = '' then mode = _getenv_('ANT_MODE' '..')
-if mode \= '/' then do
-  runrc = _getenv_('runrc')
-  antrc = _getenv_('antrc' 'antrc.cmd')
-  if mode = '..' then mode = '-r'
-  else mode = ''
-  interpret 'call "' || runrc || '"' antrc '"' || mode || '"'
-end
-
-if _testenv_() = 0 then do
-  say 'Ant environment is not set properly'
-  x = endlocal()
-  exit 16
-end
-
-settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME
-
-java = _getenv_('javacmd' 'java')
-opts = value('ANT_OPTS',,env)
-args = value('ANT_ARGS',,env)
-lcp = value('LOCALCLASSPATH',,env)
-cp = value('CLASSPATH',,env)
-if value('ANT_USE_CP',,env) \= '' then do
-  if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';'
-  lcp = lcp || cp
-  'SET CLASSPATH='
-end
-if lcp\='' then lcp = '-classpath' lcp
-
-cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg
-launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists')
-if launcher = '' then entry = 'org.apache.tools.ant.Main'
-else entry = 'org.apache.tools.ant.launch.Launcher'
-java opts lcp entry settings args antarg
-
-x = endlocal()
-
-return rc
-
-_testenv_: procedure expose env ANT_HOME JAVA_HOME
-ANT_HOME = value('ANT_HOME',,env)
-if ANT_HOME = '' then return 0
-JAVA_HOME = value('JAVA_HOME',,env)
-if JAVA_HOME = '' then return 0
-cp = translate(value('CLASSPATH',,env))
-if pos(translate(ANT_HOME), cp) = 0 then return 0
-if pos(translate(JAVA_HOME), cp) = 0 then return 0
-return 1
-
-_getenv_: procedure expose env
-parse arg envar default
-if default = '' then default = envar
-var = value(translate(envar),,env)
-if var = '' then var = default
-return var
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun
deleted file mode 100644
index 8110f86..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Args: DIR command
-cd "$1"
-CMD="$2"
-shift
-shift
-
-exec "$CMD" "$@"
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun.bat b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun.bat
deleted file mode 100644
index 10d2bbc..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun.bat
+++ /dev/null
@@ -1,50 +0,0 @@
- at echo off
-
-REM  Licensed to the Apache Software Foundation (ASF) under one or more
-REM  contributor license agreements.  See the NOTICE file distributed with
-REM  this work for additional information regarding copyright ownership.
-REM  The ASF licenses this file to You under the Apache License, Version 2.0
-REM  (the "License"); you may not use this file except in compliance with
-REM  the License.  You may obtain a copy of the License at
-REM 
-REM      http://www.apache.org/licenses/LICENSE-2.0
-REM 
-REM  Unless required by applicable law or agreed to in writing, software
-REM  distributed under the License is distributed on an "AS IS" BASIS,
-REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM  See the License for the specific language governing permissions and
-REM  limitations under the License.
-
-if "%OS%"=="Windows_NT" @setlocal
-if "%OS%"=="WINNT" @setlocal
-
-if ""%1""=="""" goto runCommand
-
-rem Change drive and directory to %1
-if "%OS%"=="Windows_NT" goto nt_cd
-if "%OS%"=="WINNT" goto nt_cd
-cd ""%1""
-goto end_cd
-:nt_cd
-cd /d ""%1""
-:end_cd
-shift
-
-rem Slurp the command line arguments. This loop allows for an unlimited number
-rem of arguments (up to the command line limit, anyway).
-set ANT_RUN_CMD=%1
-if ""%1""=="""" goto runCommand
-shift
-:loop
-if ""%1""=="""" goto runCommand
-set ANT_RUN_CMD=%ANT_RUN_CMD% %1
-shift
-goto loop
-
-:runCommand
-rem echo %ANT_RUN_CMD%
-%ANT_RUN_CMD%
-
-if "%OS%"=="Windows_NT" @endlocal
-if "%OS%"=="WINNT" @endlocal
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun.pl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun.pl
deleted file mode 100644
index dbea10f..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antRun.pl
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/perl
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  See the NOTICE file distributed with
-#  this work for additional information regarding copyright ownership.
-#  The ASF licenses this file to You under the Apache License, Version 2.0
-#  (the "License"); you may not use this file except in compliance with
-#  the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-#######################################################################
-#
-# antRun.pl
-#
-# wrapper script for invoking commands on a platform with Perl installed
-# this is akin to antRun.bat, and antRun the SH script 
-#
-# created:         2001-10-18
-# author:          Jeff Tulley jtulley at novell.com 
-#######################################################################
-#be fussy about variables
-use strict;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info (currently unused)
-my $debug=1;
-
-#######################################################################
-# change drive and directory to "%1"
-my $ANT_RUN_CMD = @ARGV[0];
-
-# assign current run command to "%2"
-chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
-if ($^O eq "NetWare") {
-    # There is a bug in Perl 5 on NetWare, where chdir does not
-    # do anything.  On NetWare, the following path-prefixed form should 
-    # always work. (afaict)
-    $ANT_RUN_CMD .= "/". at ARGV[1];
-}
-else {
-    $ANT_RUN_CMD = @ARGV[1];
-}
-
-# dispose of the first two arguments, leaving only the command's args.
-shift;
-shift;
-
-# run the command
-my $returnValue = system $ANT_RUN_CMD, @ARGV;
-if ($returnValue eq 0) {
-    exit 0;
-}
-else {
-    # only 0 and 1 are widely recognized as exit values
-    # so change the exit value to 1
-    exit 1;
-}
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antenv.cmd b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antenv.cmd
deleted file mode 100644
index 170d89f..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/antenv.cmd
+++ /dev/null
@@ -1,98 +0,0 @@
-/* 
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-*/
-
-'@echo off'
-call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
-call SysLoadFuncs
-
-/* Prepare the parameters for later use */
-parse arg argv
-mode = ''
-args = ''
-opts = ''
-cp = ''
-lcp = ''
-
-do i = 1 to words(argv)
-  param = word(argv, i)
-  select
-    when param='-lcp' then mode = 'l'
-    when param='-cp' | param='-classpath' then mode = 'c'
-    when abbrev('-opts', param, 4) then mode = 'o'
-    when abbrev('-args', param, 4) then mode = 'a'
-  otherwise
-    select
-      when mode = 'a' then args = space(args param, 1)
-      when mode = 'c' then cp = space(cp param, 1)
-      when mode = 'l' then lcp = space(lcp param, 1)
-      when mode = 'o' then opts = space(opts param, 1)
-    otherwise
-      say 'Option' param 'ignored'
-    end
-  end
-end
-
-env="OS2ENVIRONMENT"
-antconf = _getenv_('antconf' 'antconf.cmd')
-runrc = _getenv_('runrc')
-interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC'
-ANT_HOME = value('ANT_HOME',,env)
-JAVA_HOME = value('JAVA_HOME',,env)
-classpath = value('CLASSPATH',,env)
-classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS")
-if classes \= '' then classpath = prepend(classpath classes)
-classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS")
-if classes \= '' then classpath = prepend(classpath classes)
-
-classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar')
-'SET CLASSPATH=' || classpath
-
-/* Setting classpathes, options and arguments */
-envset = _getenv_('envset')
-if cp\=''   then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"'
-if lcp\=''  then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"'
-if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"'
-if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"'
-
-exit 0
-
-addpath: procedure
-parse arg path elem
-if elem = '' then do
-  if path\='' & right(path, 1)\=';' then path = path || ';'
-  return path
-end
-if substr(path, length(path)) = ';' then glue = ''
-else glue = ';'
-if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';'
-return path
-
-prepend: procedure
-parse arg path elem
-if elem = '' then do
-  if path\='' & right(path, 1)\=';' then path = path || ';'
-  return path
-end
-if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path
-return path
-
-_getenv_: procedure expose env
-parse arg envar default
-if default = '' then default = envar
-var = value(translate(envar),,env)
-if var = '' then var = default
-return var
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/complete-ant-cmd.pl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/complete-ant-cmd.pl
deleted file mode 100644
index b58c26e..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/complete-ant-cmd.pl
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/perl
-#
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  See the NOTICE file distributed with
-#  this work for additional information regarding copyright ownership.
-#  The ASF licenses this file to You under the Apache License, Version 2.0
-#  (the "License"); you may not use this file except in compliance with
-#  the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-# A script to allow Bash or Z-Shell to complete an Ant command-line.  
-#
-# To install for Bash 2.0 or better, add the following to ~/.bashrc:
-# 
-#     $ complete -C complete-ant-cmd ant build.sh
-#
-# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
-#
-#     function ant_complete () {
-#         local args_line args
-#         read -l args_line
-#         set -A args $args_line
-#         set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
-#     }
-#     compctl -K ant_complete ant build.sh
-#     
-# @author Mike Williams <mikew at cortexebusiness.com.au>
-
-my $cmdLine = $ENV{'COMP_LINE'};
-my $antCmd = $ARGV[0];
-my $word = $ARGV[1];
-
-my @completions;
-if ($word =~ /^-/) {
-    list( restrict( $word, getArguments() ));
-} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
-    list( getBuildFiles($word) );
-} else {
-    list( restrict( $word, getTargets() ));
-}
-
-exit(0);
-
-sub list {
-    for (@_) {
-        print "$_\n";
-    }
-}
-
-sub restrict {
-    my ($word, @completions) = @_;
-    grep( /^\Q$word\E/, @completions );
-}
-
-sub getArguments {
-    qw(-buildfile -debug -emacs -f -find -help -listener -logfile 
-       -logger -projecthelp -quiet -verbose -version); 
-}
-
-
-sub getBuildFiles {
-    my ($word) = @_;
-    grep( /\.xml$/, glob( "$word*" ));
-}
-
-sub getTargets {
-
-    # Look for build-file
-    my $buildFile = 'build.xml';
-    if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
-        $buildFile = $2;
-    }
-    return () unless (-f $buildFile);
-
-    # Run "ant -projecthelp" to list targets.  Keep a cache of results in a
-    # cache-file.
-    my $cacheFile = $buildFile;
-    $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
-    if ((!-e $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
-        open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
-        open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return(); 
-        my %targets;
-        while( <HELP> ) {
-            if (/^\s+(\S+)/) {
-                $targets{$1}++;
-            }
-        }
-        my @targets = sort keys %targets;
-        for (@targets) { print CACHE "$_\n"; }
-        return @targets;
-    }
-    
-    # Read the target-cache
-    open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
-    my @targets;
-    while (<CACHE>) {
-        chop;
-        s/\r$//;  # for Cygwin
-        push( @targets, $_ );
-    }
-    close( CACHE );
-    @targets;
-
-}
-
-
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/envset.cmd b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/envset.cmd
deleted file mode 100644
index 3b07419..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/envset.cmd
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-SET environment variables
-First optional parameter:
-   ;     parameters are considered parts of a path variable, semicolons are
-         appended to each element if not already present
-   -D    parameters are properties for Java or Makefile etc., -D will be
-         prepended and the parameters will be separated by a space
-   =D    the same as above but equal sign is not required
-   ,     parameters should be comma separated in the environment variable
-   -     parameters should be separated by the next parameter
-   Other values mean that the first parameter is missing and the environment
-   variable will be set to the space separated parameters
-
-Second parameter: name of the environment variable
-
-Next parameters: values
-; implies that the equal sign is considered a part of the parameter and is
-not interpreted
-
--D requires parameters in the form name=value. If the equal sign is not found,
-the parameters are changed to name=expanded_name
-
-Other options have optional equal sign. If it is found, only the part after
-the equal sign will be oprionally expanded.
-
-If the parameter is the minus sign, the next parameter will not be expanded.
-If the parameter is a single dot, it will be replaced with the value of the
-environment variable as it existed before envset was invoked.
-
-For other parameters the batch looks for the environment variable with the
-same name (in uppercase). If it is found, it forms the expanded_name. If
-the environment variable with such a name does not exist, the expanded_name
-will hold the parameter name without case conversion.
-*/
-
-parse arg mode envar args
-
-equal = 0
-sep = ' '
-
-/* Parse command line parameters */
-select
-  when mode='-' then do
-    sep = envar
-    parse var args envar args
-  end
-  when mode=';' then do
-    sep = ''
-    equal = -1
-  end
-  when mode='-D' then equal = 1
-  when mode='=D' then mode = '-D'
-  when mode=',' then sep = ','
-otherwise
-  args = envar args
-  envar = mode
-  mode = ''
-end
-
-env = 'OS2ENVIRONMENT'
-envar = translate(envar)
-orig = value(envar,,env)
-newval = ''
-expand = 1
-
-/* for each parameter... */
-do i = 1 to words(args)
-  if expand > 0 & word(args, i) = '-' then expand = 0
-  else call addval word(args, i)
-end
-
-/* Optionally enclose path variable by quotes */
-if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"'
-
-/* Set the new value, 'SET' cannot be used since it does not allow '=' */
-x = value(envar, newval, env)
-exit 0
-
-addval: procedure expose sep equal orig expand newval mode env
-parse arg var
-
-if var = '.' then expvar = orig
-else do
-  if equal >= 0 then do
-    parse var var name '=' val
-    if val = '' then var = name
-    else var = val
-  end
-  if expand = 0 then expvar = var
-  else expvar = value(translate(var),,env)
-  if expvar = '' then expvar = var
-  if equal >= 0 then do
-    if val = '' then do
-      parse var expvar key '=' val
-      if val <> '' then name = key
-      else do
-        if equal > 0 then val = key
-        else name = key
-      end
-    end
-    else val = expvar
-    if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"'
-    if val = '' then expvar = name
-    else expvar = name || '=' || val
-  end
-  if mode = '-D' then expvar = '-D' || expvar
-  if mode = ';' then do
-    if right(expvar, 1) <> ';' then expvar = expvar || ';'
-  end
-end
-
-if newval = '' then newval = expvar
-else newval = newval || sep || expvar
-expand = 1
-return
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/lcp.bat b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/lcp.bat
deleted file mode 100644
index 4bf2e7c..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/lcp.bat
+++ /dev/null
@@ -1,31 +0,0 @@
-REM
-REM  Licensed to the Apache Software Foundation (ASF) under one or more
-REM  contributor license agreements.  See the NOTICE file distributed with
-REM  this work for additional information regarding copyright ownership.
-REM  The ASF licenses this file to You under the Apache License, Version 2.0
-REM  (the "License"); you may not use this file except in compliance with
-REM  the License.  You may obtain a copy of the License at
-REM 
-REM      http://www.apache.org/licenses/LICENSE-2.0
-REM 
-REM  Unless required by applicable law or agreed to in writing, software
-REM  distributed under the License is distributed on an "AS IS" BASIS,
-REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM  See the License for the specific language governing permissions and
-REM  limitations under the License.
-REM
-REM
-
-set _CLASSPATHCOMPONENT=%1
-if ""%1""=="""" goto gotAllArgs
-shift
-
-:argCheck
-if ""%1""=="""" goto gotAllArgs
-set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
-shift
-goto argCheck
-
-:gotAllArgs
-set LOCALCLASSPATH=%LOCALCLASSPATH%;%_CLASSPATHCOMPONENT%
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runant.pl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runant.pl
deleted file mode 100644
index 5f8307a..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runant.pl
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/perl
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  See the NOTICE file distributed with
-#  this work for additional information regarding copyright ownership.
-#  The ASF licenses this file to You under the Apache License, Version 2.0
-#  (the "License"); you may not use this file except in compliance with
-#  the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-#######################################################################
-#
-# runant.pl
-#
-# wrapper script for invoking ant in a platform with Perl installed
-# this may include cgi-bin invocation, which is considered somewhat daft.
-# (slo: that should be a separate file which can be derived from this
-# and returns the XML formatted output)
-#
-# the code is not totally portable due to classpath and directory splitting
-# issues. oops. (NB, use File::Spec::Functions  will help and the code is
-# structured for the catfile() call, but because of perl version funnies
-# the code is not included. 
-#
-# created:         2000-8-24
-# author:          Steve Loughran steve_l at sourceforge.net
-#######################################################################
-#
-# Assumptions:
-#
-# - the "java" executable/script is on the command path
-# - ANT_HOME has been set
-# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
-# - target platform uses "/" as directory separator.
-
-#be fussy about variables
-use strict;
-
-#platform specifics (disabled)
-#use File::Spec::Functions;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info
-my $debug=1;
-
-#######################################################################
-#
-# check to make sure environment is setup
-#
-
-my $HOME = $ENV{ANT_HOME};
-if ($HOME eq "")
-        {
-    die "\n\nANT_HOME *MUST* be set!\n\n";
-        }
-
-my $JAVACMD = $ENV{JAVACMD};
-$JAVACMD = "java" if $JAVACMD eq "";
-
-my $onnetware = 0;
-if ($^O eq "NetWare")
-{
-  $onnetware = 1;
-}
-
-my $oncygwin = ($^O eq "cygwin");
-
-#ISSUE: what java wants to split up classpath varies from platform to platform 
-#and perl is not too hot at hinting which box it is on.
-#here I assume ":" 'cept on win32, dos, and netware. Add extra tests here as needed.
-my $s=":";
-if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin") ||
-   ($onnetware == 1))
-        {
-        $s=";";
-        }
-
-#build up standard classpath
-my $localpath = "$HOME/lib/ant-launcher.jar";
-#set JVM options and Ant arguments, if any
-my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
-my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
-
-#jikes
-if($ENV{JIKESPATH} ne "")
-        {
-        push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
-        }
-
-#construct arguments to java
-my @ARGS;
-push @ARGS, @ANT_OPTS;
-
-my $CYGHOME = "";
-
-my $classpath=$ENV{CLASSPATH};
-if ($oncygwin == 1) {
-  $localpath = `cygpath --path --windows $localpath`;
-  chomp ($localpath);
-  if (! $classpath eq "")
-  {
-    $classpath = `cygpath --path --windows "$classpath"`;
-    chomp ($classpath);
-  }
-  $HOME = `cygpath --path --windows $HOME`;
-  chomp ($HOME);
-  $CYGHOME = `cygpath --path --windows $ENV{HOME}`;
-  chomp ($CYGHOME);
-}
-push @ARGS, "-classpath", "$localpath";
-push @ARGS, "-Dant.home=$HOME";
-if ( ! $CYGHOME eq "" )
-{
-  push @ARGS, "-Dcygwin.user.home=\"$CYGHOME\""
-}
-push @ARGS, "org.apache.tools.ant.launch.Launcher", @ANT_ARGS;
-push @ARGS, @ARGV;
-if (! $classpath eq "")
-{
-  if ($onnetware == 1)
-  {
-    # make classpath literally $CLASSPATH
-    # this is to avoid pushing us over the 512 character limit
-    # even skip the ; - that is already in $localpath
-    push @ARGS, "-lib", "\$CLASSPATH";
-  }
-  else
-  {
-    push @ARGS, "-lib", "$classpath";
-  }
-}
-print "\n $JAVACMD @ARGS\n\n" if ($debug);
-
-my $returnValue = system $JAVACMD, @ARGS;
-if ($returnValue eq 0)
-        {
-        exit 0;
-        }
-else
-        {
-        # only 0 and 1 are widely recognized as exit values
-        # so change the exit value to 1
-        exit 1;
-        }
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runant.py b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runant.py
deleted file mode 100644
index eec549e..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runant.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/python
-# Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  See the NOTICE file distributed with
-#  this work for additional information regarding copyright ownership.
-#  The ASF licenses this file to You under the Apache License, Version 2.0
-#  (the "License"); you may not use this file except in compliance with
-#  the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-
-"""
-
- runant.py
-
-    This script is a translation of the runant.pl written by Steve Loughran.
-    It runs ant with/out arguments, it should be quite portable (thanks to
-    the python os library)
-    This script has been tested with Python2.0/Win2K
-
- created:         2001-04-11
- author:          Pierre Dittgen pierre.dittgen at criltelecom.com
-
- Assumptions:
-
- - the "java" executable/script is on the command path
-"""
-import os, os.path, string, sys
-
-# Change it to 1 to get extra debug information
-debug = 0
-
-#######################################################################
-
-# If ANT_HOME is not set default to script's parent directory
-if os.environ.has_key('ANT_HOME'):
-    ANT_HOME = os.environ['ANT_HOME']
-else:
-    ANT_HOME = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
-
-# set ANT_LIB location
-ANT_LIB = os.path.join(ANT_HOME, 'lib')
-
-# set JAVACMD (check variables JAVACMD and JAVA_HOME)
-JAVACMD = None
-if not os.environ.has_key('JAVACMD'):
-    if os.environ.has_key('JAVA_HOME'):
-        if not os.path.exists(os.environ['JAVA_HOME']):
-            print "Warning: JAVA_HOME is not defined correctly."
-        else:
-            JAVACMD = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
-    else:
-        print "Warning: JAVA_HOME not set."
-else:
-    JAVACMD = os.environ['JAVACMD']
-if not JAVACMD:
-    JAVACMD = 'java'
-
-launcher_jar = os.path.join(ANT_LIB, 'ant-launcher.jar')
-if not os.path.exists(launcher_jar):
-    print 'Unable to locate ant-launcher.jar. Expected to find it in %s' % \
-        ANT_LIB
-
-# Build up standard classpath (LOCALCLASSPATH)
-LOCALCLASSPATH = launcher_jar
-if os.environ.has_key('LOCALCLASSPATH'):
-    LOCALCLASSPATH += os.pathsep + os.environ['LOCALCLASSPATH']
-
-ANT_OPTS = ""
-if os.environ.has_key('ANT_OPTS'):
-    ANT_OPTS = os.environ['ANT_OPTS']
-
-OPTS = ""
-if os.environ.has_key('JIKESPATH'):
-    OPTS = '-Djikes.class.path=\"%s\"' % os.environ['JIKESPATH']
-
-ANT_ARGS = ""
-if os.environ.has_key('ANT_ARGS'):
-    ANT_ARGS = os.environ['ANT_ARGS']
-
-CLASSPATH = ""
-if os.environ.has_key('CLASSPATH'):
-    CLASSPATH = os.environ['CLASSPATH']
-
-# Builds the commandline
-cmdline = ('%s %s -classpath %s -Dant.home=%s %s ' + \
-    'org.apache.tools.ant.launch.Launcher %s -lib %s %s') \
-     % (JAVACMD, ANT_OPTS, LOCALCLASSPATH, ANT_HOME, OPTS, ANT_ARGS, \
-        CLASSPATH, string.join(sys.argv[1:], ' '))
-
-if debug:
-    print '\n%s\n\n' % (cmdline)
-sys.stdout.flush()
-
-# Run the biniou!
-os.system(cmdline)
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runrc.cmd b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runrc.cmd
deleted file mode 100644
index c68f04d..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/bin/runrc.cmd
+++ /dev/null
@@ -1,60 +0,0 @@
-/* 
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-   Run RC file, name is in the first arg, second arg is either PATH
-   ENV  or -r or nothing 
-*/
-
-parse arg name path rest
-
-if name = '' then do
-  say 'RC file name is missing'
-  exit 1
-end
-
-if rest \= '' then do
-  say 'Too many parameters'
-  exit 1
-end
-
-call runit name path
-exit 0
-
-runit: procedure
-parse arg name path dir
-
-if path \= '' & path \= '-r' then do
-  dir = value(translate(path),,'OS2ENVIRONMENT')
-  if dir = '' then return
-  dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */
-end
-
-if dir = '' then dir = directory()
-
-if path = '-r' then do /* recursive call */
-  subdir = filespec('path', dir)
-  if subdir \= '\' then do
-    subdir = left(subdir, length(subdir)-1)
-    call runit name path filespec('drive', dir) || subdir
-  end
-end
-
-/* Look for the file and run it */
-if right(dir, 1) \= '\' then dir = dir || '\'
-rcfile = stream(dir || name, 'c', 'query exists')
-if rcfile \= '' then interpret 'call "' || rcfile || '"'
-
-return
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/changelog.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/changelog.xsl
deleted file mode 100644
index c6aef8f..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/changelog.xsl
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<xsl:stylesheet
-    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
-    version='1.0'>
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   
--->
-  <xsl:param name="title"/>
-  <xsl:param name="module"/>
-  <xsl:param name="cvsweb"/>
-
-  <xsl:output method="html" indent="yes" encoding="US-ASCII"
-              doctype-public="-//W3C//DTD HTML 4.01//EN"
-              doctype-system="http://www.w3.org/TR/html401/strict.dtd"/>
-
-  <!-- Copy standard document elements.  Elements that
-       should be ignored must be filtered by apply-templates
-       tags. -->
-  <xsl:template match="*">
-    <xsl:copy>
-      <xsl:copy-of select="attribute::*[. != '']"/>
-      <xsl:apply-templates/>
-    </xsl:copy>
-  </xsl:template>
-
-  <xsl:template match="changelog">
-    <html>
-      <head>
-        <title><xsl:value-of select="$title"/></title>
-        <style type="text/css">
-          body, p {
-            font-family: Verdana, Arial, Helvetica, sans-serif;
-            font-size: 80%;
-            color: #000000;
-            background-color: #ffffff;
-          }
-          tr, td {
-            font-family: Verdana, Arial, Helvetica, sans-serif;
-            background: #eeeee0;
-          }
-          td {
-            padding-left: 20px;
-          }
-      .dateAndAuthor {
-            font-family: Verdana, Arial, Helvetica, sans-serif;
-            font-weight: bold;
-            text-align: left;
-            background: #a6caf0;
-            padding-left: 3px;
-      }
-          a {
-            color: #000000;
-          }
-          pre {
-            font-weight: bold;
-          }
-        </style>
-      </head>
-      <body>
-        <h1>
-          <a name="top"><xsl:value-of select="$title"/></a>
-        </h1>
-        <p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p>
-        <hr/>
-        <table border="0" width="100%" cellspacing="1">
-          
-          <xsl:apply-templates select=".//entry">
-            <xsl:sort select="date" data-type="text" order="descending"/>
-            <xsl:sort select="time" data-type="text" order="descending"/>
-          </xsl:apply-templates>
-          
-        </table>
-        
-      </body>
-    </html>
-  </xsl:template>
-  
-  <xsl:template match="entry">
-    <tr>
-      <td class="dateAndAuthor">
-        <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
-      </td>
-    </tr>
-    <tr>
-      <td>
-        <pre>
-<xsl:apply-templates select="msg"/></pre>
-        <ul>
-          <xsl:apply-templates select="file"/>
-        </ul>
-      </td>
-    </tr>
-  </xsl:template>
-
-  <xsl:template match="date">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="time">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="author">
-    <i>
-      <a>
-        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
-        <xsl:value-of select="."/></a>
-    </i>
-  </xsl:template>
-
-  <xsl:template match="file">
-    <li>
-      <a>
-        <xsl:choose>
-          <xsl:when test="string-length(prevrevision) = 0 ">
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
-          </xsl:otherwise>
-        </xsl:choose>
-        <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)</a>
-    </li>
-  </xsl:template>
-
-  <!-- Any elements within a msg are processed,
-       so that we can preserve HTML tags. -->
-  <xsl:template match="msg">
-    <xsl:apply-templates/>
-  </xsl:template>
-  
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-frames.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-frames.xsl
deleted file mode 100644
index abaafd6..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-frames.xsl
+++ /dev/null
@@ -1,299 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="org.apache.xalan.lib.Redirect"
-    extension-element-prefixes="redirect">
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-    <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-    <xsl:decimal-format decimal-separator="." grouping-separator="," />
-
-    <xsl:param name="output.dir" select="'.'"/>
-    <xsl:param name="basedir" select="'.'"/>
-
-    <xsl:template match="checkstyle">
-        <!-- create the index.html -->
-        <redirect:write file="{$output.dir}/index.html">
-            <xsl:call-template name="index.html"/>
-        </redirect:write>
-
-        <!-- create the stylesheet.css -->
-        <redirect:write file="{$output.dir}/stylesheet.css">
-            <xsl:call-template name="stylesheet.css"/>
-        </redirect:write>
-
-        <!-- create the overview-summary.html at the root -->
-        <redirect:write file="{$output.dir}/overview-frame.html">
-            <xsl:apply-templates select="." mode="overview"/>
-        </redirect:write>
-
-        <!-- create the all-classes.html at the root -->
-        <redirect:write file="{$output.dir}/allclasses-frame.html">
-            <xsl:apply-templates select="." mode="all.classes"/>
-        </redirect:write>
-
-        <!-- process all files -->
-        <xsl:apply-templates select="file[count(error) != 0]"/>
-    </xsl:template>
-
-    <xsl:template name="index.html">
-        <html>
-            <head>
-                <title>CheckStyle Audit</title>
-            </head>
-            <frameset cols="20%,80%">
-                <frame src="allclasses-frame.html" name="fileListFrame"/>
-                <frame src="overview-frame.html" name="fileFrame"/>
-            </frameset>
-            <noframes>
-                <h2>Frame Alert</h2>
-                <p>
-                    This document is designed to be viewed using the frames feature.
-                    If you see this message, you are using a non-frame-capable web client.
-                </p>
-            </noframes>
-        </html>
-    </xsl:template>
-
-    <xsl:template name="pageHeader">
-        <table border="0" cellpadding="0" cellspacing="0" width="100%">
-            <tr>
-                <td class="text-align:right"><h2>CheckStyle Audit</h2></td>
-            </tr>
-            <tr>
-                <td class="text-align:right">Designed for use with
-                  <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and
-                  <a href='http://ant.apache.org/'>Ant</a>.</td>
-            </tr>
-        </table>
-        <hr size="1"/>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="overview">
-        <html>
-            <head>
-                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-            </head>
-            <body>
-                <!-- page header -->
-                <xsl:call-template name="pageHeader"/>
-
-                <!-- Summary part -->
-                <xsl:apply-templates select="." mode="summary"/>
-                <hr size="1" width="100%" align="left"/>
-
-                <!-- File list part -->
-                <xsl:apply-templates select="." mode="filelist"/>
-            </body>
-        </html>
-    </xsl:template>
-
-    <xsl:template name="stylesheet.css">
-        .bannercell {
-        border: 0px;
-        padding: 0px;
-        }
-        body {
-        margin-left: 10;
-        margin-right: 10;
-        font:normal 80% arial,helvetica,sanserif;
-        background-color:#FFFFFF;
-        color:#000000;
-        }
-        .oddrow td {
-        background: #efefef;
-        }
-        .evenrow td {
-        background: #fff;
-        }
-        th, td {
-        text-align: left;
-        vertical-align: top;
-        }
-        th {
-        font-weight:bold;
-        background: #ccc;
-        color: black;
-        }
-        table, th, td {
-        font-size:100%;
-        border: none
-        }
-        table.log tr td, tr th {
-
-        }
-        h2 {
-        font-weight:bold;
-        font-size:140%;
-        margin-bottom: 5;
-        }
-        h3 {
-        font-size:100%;
-        font-weight:bold;
-        background: #525D76;
-        color: white;
-        text-decoration: none;
-        padding: 5px;
-        margin-right: 2px;
-        margin-left: 2px;
-        margin-bottom: 0;
-        }
-    </xsl:template>
-
-    <!--
-    Creates an all-classes.html file that contains a link to all files.
-    -->
-    <xsl:template match="checkstyle" mode="all.classes">
-        <html>
-            <head>
-                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-            </head>
-            <body>
-                <h2>Files</h2>
-                <p>
-                    <table width="100%">
-                        <!-- For each file create its part -->
-                        <xsl:apply-templates select="file[count(error) != 0]" mode="all.classes">
-                            <xsl:sort select="substring-after(@name, $basedir)"/>
-                        </xsl:apply-templates>
-                    </table>
-                </p>
-            </body>
-        </html>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="filelist">
-        <h3>Files</h3>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-            <tr>
-                <th>Name</th>
-                <th>Errors</th>
-            </tr>
-            <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
-                <xsl:sort select="count(error)" order="descending" data-type="number"/>
-            </xsl:apply-templates>
-        </table>
-    </xsl:template>
-
-    <xsl:template match="file" mode="filelist">
-        <tr>
-            <xsl:call-template name="alternated-row"/>
-            <td nowrap="nowrap">
-                <a>
-                    <xsl:attribute name="href">
-                        <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
-                    </xsl:attribute>
-                    <xsl:value-of select="substring-after(@name, $basedir)"/>
-                </a>
-            </td>
-            <td><xsl:value-of select="count(error)"/></td>
-        </tr>
-    </xsl:template>
-
-    <xsl:template match="file" mode="all.classes">
-        <tr>
-            <td nowrap="nowrap">
-                <a target="fileFrame">
-                    <xsl:attribute name="href">
-                        <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
-                    </xsl:attribute>
-                    <xsl:value-of select="substring-after(@name, $basedir)"/>
-                </a>
-            </td>
-        </tr>
-    </xsl:template>
-
-    <!--
-    transform string like a/b/c to ../../../
-    @param path the path to transform into a descending directory path
-    -->
-    <xsl:template name="path">
-        <xsl:param name="path"/>
-
-        <!-- Convert a windows path '\' to a unix path '/' for further processing. -->
-        <xsl:variable name="path2" select="translate($path,'\','/')"/>
-
-        
-        <xsl:if test="contains($path2,'/')">
-            <xsl:text>../</xsl:text>
-            <xsl:call-template name="path">
-                <xsl:with-param name="path"><xsl:value-of select="substring-after($path2,'/')"/></xsl:with-param>
-            </xsl:call-template>
-        </xsl:if>
-        <xsl:if test="not(contains($path2,'/')) and not($path2 = '')">
-            <xsl:text>../</xsl:text>
-        </xsl:if>
-    </xsl:template>
-
-    <xsl:template match="file">
-        <redirect:write file="{$output.dir}/files/{substring-after(@name, $basedir)}.html">
-            <html>
-                <head>
-                    <link rel="stylesheet" type="text/css">
-                        <xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="substring-after(@name, $basedir)"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute>
-                    </link>
-                </head>
-                <body>
-                    <xsl:call-template name="pageHeader"/>
-                    <h3>File <xsl:value-of select="substring-after(@name, $basedir)"/></h3>
-                    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-                        <tr>
-                            <th>Error Description</th>
-                            <th>Line:Column</th>
-                        </tr>
-                        <xsl:for-each select="error">
-                            <tr>
-                                <xsl:call-template name="alternated-row"/>
-                                <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
-                                <td align="center"><xsl:value-of select="@line"/><xsl:if test="@column">:<xsl:value-of select="@column"/></xsl:if></td>
-                            </tr>
-                        </xsl:for-each>
-                    </table>
-                </body>
-            </html>
-        </redirect:write>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="summary">
-        <h3>Summary</h3>
-        <xsl:variable name="fileCount" select="count(file)"/>
-        <xsl:variable name="errorCount" select="count(file/error)"/>
-        <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-            <tr>
-                <th>Total Files</th>
-                <th>Files With Errors</th>
-                <th>Errors</th>
-            </tr>
-            <tr>
-                <xsl:call-template name="alternated-row"/>
-                <td><xsl:value-of select="$fileCount"/></td>
-                <td><xsl:value-of select="$fileErrorCount"/></td>
-                <td><xsl:value-of select="$errorCount"/></td>
-            </tr>
-        </table>
-    </xsl:template>
-
-    <xsl:template name="alternated-row">
-        <xsl:attribute name="class">
-            <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
-            <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
-        </xsl:attribute>
-    </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-text.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-text.xsl
deleted file mode 100644
index 7359e41..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-text.xsl
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-    <xsl:strip-space elements="checkstyle"/>
-    <xsl:preserve-space elements="file"/>
-    <xsl:output method="text"/>
-    <xsl:template match="checkstyle/file/error">
-        <xsl:value-of select="../@name"/>
-        <xsl:text>:</xsl:text>
-        <xsl:value-of select="@line"/>
-        <xsl:text>:</xsl:text>
-        <xsl:value-of select="@column"/>
-        <xsl:text> </xsl:text>
-        <xsl:value-of select="@message"/>
-    </xsl:template>
-</xsl:stylesheet>
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-xdoc.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-xdoc.xsl
deleted file mode 100644
index 5fc6eab..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/checkstyle/checkstyle-xdoc.xsl
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="org.apache.xalan.lib.Redirect"
-    extension-element-prefixes="redirect">
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-    <xsl:output method="xml" indent="yes"/>
-    <xsl:decimal-format decimal-separator="." grouping-separator="," />
-
-    <xsl:param name="output.dir" select="'.'"/>
-    <xsl:param name="basedir" select="'.'"/>
-
-    <xsl:template match="checkstyle">
-      <document>
-        <properties>
-          <title>Checkstyle Audit</title>
-        </properties>
-
-        <body>
-          <xsl:apply-templates select="." mode="summary"/>
-          <!-- File list part -->
-          <xsl:apply-templates select="." mode="filelist"/>
-          <xsl:apply-templates select="file[count(error) != 0]"/>
-        </body>
-      </document>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="filelist">
-      <section name="Files">
-        <table>
-            <tr>
-                <th>Name</th>
-                <th>Errors</th>
-            </tr>
-            <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
-                <xsl:sort select="count(error)" order="descending" data-type="number"/>
-            </xsl:apply-templates>
-        </table>
-      </section>
-    </xsl:template>
-
-    <xsl:template match="file" mode="filelist">
-        <tr>
-            <xsl:call-template name="alternated-row"/>
-            <td nowrap="nowrap">
-                <a>
-                    <xsl:attribute name="href">
-                        <xsl:text>files</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
-                    </xsl:attribute>
-                    <xsl:value-of select="substring-after(@name, $basedir)"/>
-                </a>
-            </td>
-            <td><xsl:value-of select="count(error)"/></td>
-        </tr>
-    </xsl:template>
-
-    <xsl:template match="file">
-      <redirect:write file="{$output.dir}/files{substring-after(@name, $basedir)}.xml">
-        <document>
-          <properties>
-            <title>Checkstyle Audit</title>
-          </properties>
-
-          <body>
-            <section name="Details for {substring-after(@name, $basedir)}">
-              <table>
-                  <tr>
-                      <th>Error Description</th>
-                      <th>Line</th>
-                  </tr>
-                  <xsl:for-each select="error">
-                      <tr>
-                          <xsl:call-template name="alternated-row"/>
-                          <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
-                          <td><xsl:value-of select="@line"/></td>
-                      </tr>
-                  </xsl:for-each>
-              </table>
-            </section>
-          </body>
-        </document>
-      </redirect:write>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="summary">
-      <section name="Summary">
-        <xsl:variable name="fileCount" select="count(file)"/>
-        <xsl:variable name="errorCount" select="count(file/error)"/>
-        <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
-        <table>
-            <tr>
-                <th>Files</th>
-                <th>Files With Errors</th>
-                <th>Errors</th>
-            </tr>
-            <tr>
-                <xsl:call-template name="alternated-row"/>
-                <td><xsl:value-of select="$fileCount"/></td>
-                <td><xsl:value-of select="$fileErrorCount"/></td>
-                <td><xsl:value-of select="$errorCount"/></td>
-            </tr>
-        </table>
-      </section>
-    </xsl:template>
-
-    <xsl:template name="alternated-row">
-        <xsl:attribute name="class">
-            <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
-            <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
-        </xsl:attribute>
-    </xsl:template>
-</xsl:stylesheet>
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/coverage-frames.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/coverage-frames.xsl
deleted file mode 100644
index a55a52a..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/coverage-frames.xsl
+++ /dev/null
@@ -1,489 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="org.apache.xalan.lib.Redirect"
-    extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!--
-
- Sample stylesheet to be used with JProbe 3.0 XML output.
-
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
-
- It is best used with JProbe Coverage Ant task that gives you the benefit
- of a reference classpath so that you have the list of classes/methods
- that are not used at all in a given classpath.
-
- @author Stephane Bailliez <a href="mailto:sbailliez at apache.org"/>
-
--->
-
-<!-- default output directory is current directory -->
-<xsl:param name="output.dir" select="'.'"/>
-
-<!-- ======================================================================
-    Root element
-    ======================================================================= -->
-<xsl:template match="/snapshot">
-    <!-- create the index.html -->
-    <redirect:write file="{$output.dir}/index.html">
-        <xsl:call-template name="index.html"/>
-    </redirect:write>
-
-    <!-- create the stylesheet.css -->
-    <redirect:write file="{$output.dir}/stylesheet.css">
-        <xsl:call-template name="stylesheet.css"/>
-    </redirect:write>
-
-    <!-- create the overview-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-summary.html">
-        <xsl:apply-templates select="." mode="overview.packages"/>
-    </redirect:write>
-
-    <!-- create the all-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-frame.html">
-        <xsl:apply-templates select="." mode="all.packages"/>
-    </redirect:write>
-
-    <!-- create the all-classes.html at the root -->
-    <redirect:write file="{$output.dir}/allclasses-frame.html">
-        <xsl:apply-templates select="." mode="all.classes"/>
-    </redirect:write>
-
-    <!-- process all packages -->
-    <xsl:apply-templates select="./package" mode="write"/>
-</xsl:template>
-
-<!-- =======================================================================
-    Frameset definition. Entry point for the report.
-    3 frames: packageListFrame, classListFrame, classFrame
-    ======================================================================= -->
-<xsl:template name="index.html">
-<html>
-    <head><title>Coverage Results.</title></head>
-    <frameset cols="20%,80%">
-        <frameset rows="30%,70%">
-            <frame src="overview-frame.html" name="packageListFrame"/>
-            <frame src="allclasses-frame.html" name="classListFrame"/>
-        </frameset>
-        <frame src="overview-summary.html" name="classFrame"/>
-    </frameset>
-    <noframes>
-        <h2>Frame Alert</h2>
-        <p>
-        This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-        </p>
-    </noframes>
-</html>
-</xsl:template>
-
-<!-- =======================================================================
-    Stylesheet CSS used
-    ======================================================================= -->
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin-left: 10;
-      margin-right: 10;
-      font:normal 80% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    .a td {
-      background: #efefef;
-    }
-    .b td {
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      font-weight:bold;
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      font-size:100%;
-      border: none
-    }
-    table.log tr td, tr th {
-
-    }
-    h2 {
-      font-weight:bold;
-      font-size:140%;
-      margin-bottom: 5;
-    }
-    h3 {
-      font-size:100%;
-      font-weight:bold;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-</xsl:template>
-
-<!-- =======================================================================
-    List of all classes in all packages
-    This will be the first page in the classListFrame
-    ======================================================================= -->
-<xsl:template match="snapshot" mode="all.classes">
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link"/>
-        </head>
-        <body>
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:for-each select="package/class">
-                    <xsl:sort select="@name"/>
-                    <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
-                    <xsl:variable name="link">
-                        <xsl:if test="not($package.name='')">
-                            <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-                        </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-                    </xsl:variable>
-                    <tr>
-                        <td nowrap="nowrap">
-                            <a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a>
-                        </td>
-                    </tr>
-                </xsl:for-each>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<!-- list of all packages -->
-<xsl:template match="snapshot" mode="all.packages">
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link"/>
-        </head>
-        <body>
-            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-            <h2>Packages</h2>
-            <table width="100%">
-                <xsl:for-each select="package">
-                    <xsl:sort select="@name" order="ascending"/>
-                    <tr>
-                        <td nowrap="nowrap">
-                            <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
-                                <xsl:value-of select="@name"/>
-                            </a>
-                        </td>
-                    </tr>
-                </xsl:for-each>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<!-- overview of statistics in packages -->
-<xsl:template match="snapshot" mode="overview.packages">
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link"/>
-        </head>
-        <body onload="open('allclasses-frame.html','classListFrame')">
-        <xsl:call-template name="pageHeader"/>
-        <h3>Summary</h3>
-        <table class="log" cellpadding="5" cellspacing="2" width="100%">
-            <tr>
-                <!--th width="10%" nowrap="nowrap">Date</th>
-                <th width="10%" nowrap="nowrap">Elapsed time</th-->
-                <th width="10%" nowrap="nowrap">Reported Classes</th>
-                <th width="10%" nowrap="nowrap">Methods Hit</th>
-                <th width="10%" nowrap="nowrap">Lines Hit</th>
-            </tr>
-            <tr class="a">
-                <!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td>
-                <td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td-->
-                <td><xsl:value-of select="count(package/class)"/></td>
-                <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
-                <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
-            </tr>
-        </table>
-        <table border="0" width="100%">
-        <tr>
-        <td style="text-align: justify;">
-        To ensure accurate test runs on Java applications, developers need to know how much of
-        the code has been tested, and where to find any untested code. Coverage helps you
-        locate untested code, and measure precisely how much code has been exercised.
-        The result is a higher quality application in a shorter period of time.
-        <p/>
-        </td>
-        </tr>
-        </table>
-
-        <h3>Packages</h3>
-        <table class="log" cellpadding="5" cellspacing="2" width="100%">
-            <xsl:apply-templates select="package[1]" mode="stats.header"/>
-            <!-- display packages and sort them via their coverage rate -->
-            <xsl:for-each select="package">
-                <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
-                <tr>
-                  <xsl:call-template name="alternate-row"/>
-                    <td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td>
-                    <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
-                    <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
-                </tr>
-            </xsl:for-each>
-        </table>
-        <xsl:call-template name="pageFooter"/>
-        </body>
-        </html>
-</xsl:template>
-
-<!--
- detailed info for a package. It will output the list of classes
-, the summary page, and the info for each class
--->
-<xsl:template match="package" mode="write">
-    <xsl:variable name="package.dir">
-        <xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if>
-        <xsl:if test="@name = ''">.</xsl:if>
-    </xsl:variable>
-
-    <!-- create a classes-list.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-        <xsl:apply-templates select="." mode="classes.list"/>
-    </redirect:write>
-
-    <!-- create a package-summary.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-        <xsl:apply-templates select="." mode="package.summary"/>
-    </redirect:write>
-
-    <!-- for each class, creates a @name.html -->
-    <xsl:for-each select="class">
-        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-            <xsl:apply-templates select="." mode="class.details"/>
-        </redirect:write>
-    </xsl:for-each>
-</xsl:template>
-
-<!-- list of classes in a package -->
-<xsl:template match="package" mode="classes.list">
-    <html>
-        <HEAD>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="@name"/>
-            </xsl:call-template>
-        </HEAD>
-        <BODY>
-            <table width="100%">
-                <tr>
-                    <td nowrap="nowrap">
-                        <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
-                    </td>
-                </tr>
-            </table>
-
-            <H2>Classes</H2>
-            <TABLE WIDTH="100%">
-                <xsl:for-each select="class">
-                    <xsl:sort select="@name"/>
-                    <tr>
-                        <td nowrap="nowrap">
-                            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-                        </td>
-                    </tr>
-                </xsl:for-each>
-            </TABLE>
-        </BODY>
-    </html>
-</xsl:template>
-
-<!-- summary of a package -->
-<xsl:template match="package" mode="package.summary">
-    <HTML>
-        <HEAD>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="@name"/>
-            </xsl:call-template>
-        </HEAD>
-        <!-- when loading this package, it will open the classes into the frame -->
-        <BODY onload="open('package-frame.html','classListFrame')">
-            <xsl:call-template name="pageHeader"/>
-            <h3>Package <xsl:value-of select="@name"/></h3>
-            <table class="log" cellpadding="5" cellspacing="2" width="100%">
-                <xsl:apply-templates select="." mode="stats.header"/>
-                <xsl:apply-templates select="." mode="stats"/>
-            </table>
-
-            <xsl:if test="count(class) > 0">
-                <H3>Classes</H3>
-                <table class="log" cellpadding="5" cellspacing="2" width="100%">
-                    <xsl:apply-templates select="." mode="stats.header"/>
-                    <xsl:apply-templates select="class" mode="stats">
-                        <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
-                    </xsl:apply-templates>
-                </table>
-            </xsl:if>
-            <xsl:call-template name="pageFooter"/>
-        </BODY>
-    </HTML>
-</xsl:template>
-
-<!-- details of a class -->
-<xsl:template match="class" mode="class.details">
-    <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
-    <HTML>
-        <HEAD>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$package.name"/>
-            </xsl:call-template>
-        </HEAD>
-        <BODY>
-            <xsl:call-template name="pageHeader"/>
-            <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
-
-            <!-- class summary -->
-            <table class="log" cellpadding="5" cellspacing="2" width="100%">
-                <xsl:apply-templates select="." mode="stats.header"/>
-                <xsl:apply-templates select="." mode="stats"/>
-            </table>
-
-            <!-- details of methods -->
-            <H3>Methods</H3>
-            <table class="log" cellpadding="5" cellspacing="2" width="100%">
-                <xsl:apply-templates select="method[1]" mode="stats.header"/>
-                <xsl:apply-templates select="method" mode="stats">
-                    <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
-                </xsl:apply-templates>
-            </table>
-            <xsl:call-template name="pageFooter"/>
-        </BODY>
-    </HTML>
-
-</xsl:template>
-
-<!-- Page Header -->
-<xsl:template name="pageHeader">
-  <!-- jakarta logo -->
-  <table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td class="bannercell" rowspan="2">
-      <a href="http://jakarta.apache.org/">
-      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-      </a>
-    </td>
-        <td style="text-align:right"><h2>Source Code Coverage</h2></td>
-        </tr>
-        <tr>
-        <td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-        </tr>
-  </table>
-    <hr size="1"/>
-</xsl:template>
-
-<!-- Page Footer -->
-<xsl:template name="pageFooter">
-</xsl:template>
-
-
-<xsl:template name="table.header">
-    <tr>
-        <th width="80%">Name</th>
-        <th width="10%" nowrap="nowrap">Methods Hit</th>
-        <th width="10%" nowrap="nowrap">Lines Hit</th>
-    </tr>
-</xsl:template>
-
-<xsl:template match="method" mode="stats.header">
-    <tr>
-        <th width="90%">Name</th>
-        <th width="10%" nowrap="nowrap">Lines Hit</th>
-    </tr>
-</xsl:template>
-<xsl:template match="method" mode="stats">
-    <tr>
-      <xsl:call-template name="alternate-row"/>
-        <td><xsl:value-of select="@name"/></td>
-        <td>
-        <xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/>
-        </td>
-    </tr>
-</xsl:template>
-
-<xsl:template match="package|class" mode="stats.header">
-    <tr>
-        <th width="80%">Name</th>
-        <th width="10%" nowrap="nowrap">Methods Hit</th>
-        <th width="10%" nowrap="nowrap">Lines Hit</th>
-    </tr>
-</xsl:template>
-<xsl:template match="package|class" mode="stats">
-    <tr>
-      <xsl:call-template name="alternate-row"/>
-        <td><xsl:value-of select="@name"/></td>
-        <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
-        <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
-    </tr>
-</xsl:template>
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-    <xsl:param name="path"/>
-    <xsl:if test="contains($path,'.')">
-        <xsl:text>../</xsl:text>
-        <xsl:call-template name="path">
-            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-        </xsl:call-template>
-    </xsl:if>
-    <xsl:if test="not(contains($path,'.')) and not($path = '')">
-        <xsl:text>../</xsl:text>
-    </xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-    <xsl:param name="package.name"/>
-    <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
-</xsl:template>
-
-<!-- alternated row style -->
-<xsl:template name="alternate-row">
-<xsl:attribute name="class">
-  <xsl:if test="position() mod 2 = 1">a</xsl:if>
-  <xsl:if test="position() mod 2 = 0">b</xsl:if>
-</xsl:attribute>
-</xsl:template>
-
-</xsl:stylesheet>
-
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/jdepend-frames.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/jdepend-frames.xsl
deleted file mode 100644
index ccc9dcc..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/jdepend-frames.xsl
+++ /dev/null
@@ -1,487 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-  xmlns:lxslt="http://xml.apache.org/xslt"
-  xmlns:redirect="org.apache.xalan.lib.Redirect"
-  extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   
--->
-<!--
-
- Sample stylesheet to be used with JDepend XML output.
-
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
-
- @author <a href="mailto:jtulley at novell.com">Jeff Tulley</a>
-
-  -->
-<xsl:param name="output.dir" select="'.'"/>
-
-<xsl:template match="JDepend">
-   <!-- create the index.html -->
-   <redirect:write file="{$output.dir}/index.html">
-      <xsl:call-template name="index.html"/>
-   </redirect:write>
-
-  <!-- create the stylesheet.css -->
-  <redirect:write file="{$output.dir}/stylesheet.css">
-    <xsl:call-template name="stylesheet.css"/>
-   </redirect:write>
-
-   <!-- create the overview-packages.html at the root -->
-  <redirect:write file="{$output.dir}/overview-summary.html">
-    <xsl:apply-templates select="." mode="overview.packages"/>
-  </redirect:write>
-
-   <!-- create the overview-packages.html at the root -->
-   <redirect:write file="{$output.dir}/overview-packages.html">
-    <xsl:apply-templates select="." mode="packages.details"/>
-  </redirect:write>
-
-   <!-- create the overview-cycles.html at the root -->
-   <redirect:write file="{$output.dir}/overview-cycles.html">
-    <xsl:apply-templates select="." mode="cycles.details"/>
-  </redirect:write>
-
-   <!-- create the overview-cycles.html at the root -->
-   <redirect:write file="{$output.dir}/overview-explanations.html">
-    <xsl:apply-templates select="." mode="explanations"/>
-  </redirect:write>
-
-  <!-- create the all-packages.html at the root -->
-   <redirect:write file="{$output.dir}/all-packages.html">
-    <xsl:apply-templates select="Packages" mode="all.packages"/>
-  </redirect:write>
-
-  <!-- create the all-cycles.html at the root -->
-  <redirect:write file="{$output.dir}/all-cycles.html">
-    <xsl:apply-templates select="Cycles" mode="all.cycles"/>
-  </redirect:write>
-</xsl:template>
-
-
-<xsl:template name="index.html">
-<html>
-   <head>
-      <title>JDepend Analysis</title>
-   </head>
-      <frameset cols="20%,80%">
-         <frameset rows="30%,70%">
-            <frame src="all-packages.html" name="packageListFrame"/>
-            <frame src="all-cycles.html" name="classListFrame"/>
-         </frameset>
-         <frame src="overview-summary.html" name="classFrame"/>
-      </frameset>
-      <noframes>
-         <h2>Frame Alert</h2>
-         <p>
-            This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-         </p>
-      </noframes>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-   <style type="text/css">
-    body {
-    font:normal 68% verdana,arial,helvetica;
-    color:#000000;
-    }
-    table tr td, tr th {
-      font-size: 68%;
-    }
-    table.details tr th{
-    font-weight: bold;
-    text-align:left;
-    background:#a6caf0;
-    }
-    table.details tr td{
-    background:#eeeee0;
-    }
-
-    p {
-    line-height:1.5em;
-    margin-top:0.5em; margin-bottom:1.0em;
-    margin-left:2em;
-    margin-right:2em;
-    }
-    h1 {
-    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-    }
-    h2 {
-    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-    }
-    h3 {
-    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-    }
-    h4 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-    }
-    h5 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-    }
-    h6 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-    }
-    .Error {
-    font-weight:bold; color:red;
-    }
-    .Failure {
-    font-weight:bold; color:purple;
-    }
-    .Properties {
-    text-align:right;
-    }
-  </style>
-</xsl:template>
-
-<xsl:template match="JDepend" mode="overview.packages">
-   <html>
-      <head>
-         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-  <table width="100%"><tr align="left"><h2>Summary</h2><td>
-  </td><td align="right">
-  [summary]
-  [<a href="overview-packages.html">packages</a>]
-  [<a href="overview-cycles.html">cycles</a>]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-         <table width="100%" class="details">
-            <tr>
-               <th>Package</th>
-               <th>Total Classes</th>
-               <th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th>
-               <th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th>
-               <th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th>
-               <th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th>
-               <th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th>
-               <th><a href="overview-explanations.html#EXinstability">Instability</a></th>
-               <th><a href="overview-explanations.html#EXdistance">Distance</a></th>
-
-            </tr>
-            <xsl:for-each select="./Packages/Package">
-               <xsl:if test="count(error) = 0">
-                  <tr>
-                     <td align="left">
-                        <a>
-                           <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/>
-                           </xsl:attribute>
-                           <xsl:value-of select="@name"/>
-                        </a>
-                     </td>
-                     <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
-                     <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
-                     <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
-                     <td align="right"><xsl:value-of select="Stats/Ca"/></td>
-                     <td align="right"><xsl:value-of select="Stats/Ce"/></td>
-                     <td align="right"><xsl:value-of select="Stats/A"/></td>
-                     <td align="right"><xsl:value-of select="Stats/I"/></td>
-                     <td align="right"><xsl:value-of select="Stats/D"/></td>
-                  </tr>
-               </xsl:if>
-            </xsl:for-each>
-            <xsl:for-each select="./Packages/Package">
-               <xsl:if test="count(error) > 0">
-                  <tr>
-                     <td align="left">
-                        <xsl:value-of select="@name"/>
-                     </td>
-                     <td align="left" colspan="8"><xsl:value-of select="error"/></td>
-                  </tr>
-               </xsl:if>
-            </xsl:for-each>
-         </table>
-      </body>
-   </html>
-</xsl:template>
-
-<xsl:template match="JDepend" mode="packages.details">
-   <html>
-      <head>
-          <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-  <table width="100%"><tr align="left"><h2>Packages</h2><td>
-  </td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [packages]
-  [<a href="overview-cycles.html">cycles</a>]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-
-  <xsl:for-each select="./Packages/Package">
-    <xsl:if test="count(error) = 0">
-      <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
-      <xsl:value-of select="@name"/></a></h3>
-
-      <table width="100%"><tr>
-        <td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
-        <td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
-        <td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
-        <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
-        <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
-      </tr></table>
-
-      <table width="100%" class="details">
-        <tr>
-          <th>Abstract Classes</th>
-          <th>Concrete Classes</th>
-          <th>Used by Packages</th>
-          <th>Uses Packages</th>
-        </tr>
-        <tr>
-          <td valign="top" width="25%">
-          <xsl:if test="count(AbstractClasses/Class)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="AbstractClasses/Class">
-              <xsl:value-of select="node()"/><br/>
-            </xsl:for-each>
-          </td>
-          <td valign="top" width="25%">
-            <xsl:if test="count(ConcreteClasses/Class)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="ConcreteClasses/Class">
-              <xsl:value-of select="node()"/><br/>
-            </xsl:for-each>
-          </td>
-          <td valign="top" width="25%">
-            <xsl:if test="count(UsedBy/Package)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="UsedBy/Package">
-              <a>
-                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
-                <xsl:value-of select="node()"/>
-              </a><br/>
-            </xsl:for-each>
-          </td>
-          <td valign="top" width="25%">
-            <xsl:if test="count(DependsUpon/Package)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="DependsUpon/Package">
-              <a>
-                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
-                <xsl:value-of select="node()"/>
-              </a><br/>
-            </xsl:for-each>
-          </td>
-        </tr>
-      </table>
-    </xsl:if>
-  </xsl:for-each>
-  <!-- this is often a long listing; provide a lower navigation table also -->
-  <table width="100%"><tr align="left"><td></td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [packages]
-  [<a href="overview-cycles.html">cycles</a>]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-      </body>
-   </html>
-</xsl:template>
-
-<xsl:template match="JDepend" mode="cycles.details">
-   <html>
-      <head>
-         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-  <table width="100%"><tr align="left"><h2>Cycles</h2><td>
-  </td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [<a href="overview-packages.html">packages</a>]
-  [cycles]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-  <!--<table width="100%"><tr><td>
-  </td><td align="right">
-    [<a href="#NVsummary">summary</a>]
-  [<a href="#NVpackages">packages</a>]
-  [<a href="#NVcycles">cycles</a>]
-   [<a href="#NVexplanations">explanations</a>]
-  </td></tr></table> -->
-
-  <xsl:if test="count(Cycles/Package) = 0">
-    <p>There are no cyclic dependancies.</p>
-  </xsl:if>
-  <xsl:for-each select="Cycles/Package">
-     <h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p>
-    <xsl:for-each select="Package">
-      <xsl:value-of select="."/><br/>
-    </xsl:for-each></p>
-  </xsl:for-each>
-  <!-- this is often a long listing; provide a lower navigation table also -->
-  <table width="100%"><tr align="left"><td></td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [<a href="overview-packages.html">packages</a>]
-  [cycles]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-  </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="JDepend" mode="explanations">
-   <html>
-      <head>
-         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-
-  <table width="100%"><tr align="left"><h2>Explanations</h2><td>
-  </td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [<a href="overview-packages.html">packages</a>]
-  [<a href="overview-cycles.html">cycles</a>]
-  [explanations]
-   </td></tr></table>
-
-  <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
-
-  <h3><a name="EXnumber">Number of Classes</a></h3>
-    <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
-  <h3><a name="EXafferent">Afferent Couplings</a></h3>
-    <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
-  <h3><a name="EXefferent">Efferent Couplings</a></h3>
-    <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
-  <h3><a name="EXabstractness">Abstractness</a></h3>
-    <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
-    <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
-  <h3><a name="EXinstability">Instability</a></h3>
-    <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
-    <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
-  <h3><a name="EXdistance">Distance</a></h3>
-    <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
-    <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
-    <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
-
-      </body>
-   </html>
-</xsl:template>
-
-
-<!--
-Creates an html file that contains a link to all package links in overview-packages.html.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="JDepend/Packages" mode="all.packages">
-  <html>
-    <head>
-      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-    </head>
-    <body>
-  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
-  [<a href="overview-summary.html" target="classFrame">summary</a>]
-  [<a href="overview-packages.html" target="classFrame">packages</a>]
-  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
-  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
-   </td></tr></table>
-      <h2>Packages</h2>
-        <table width="100%">
-          <xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link">
-            <xsl:sort select="@name"/>
-          </xsl:apply-templates>
-          <xsl:apply-templates select="Package[count(error) > 0]" mode="all.packages.nolink">
-            <xsl:sort select="@name"/>
-          </xsl:apply-templates>
-        </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="JDepend/Packages/Package" mode="all.packages.link">
-  <tr>
-    <td nowrap="nowrap">
-         <a href="overview-packages.html#PK{@name}" target="classFrame">
-        <xsl:value-of select="@name"/>
-      </a>
-    </td>
-  </tr>
-</xsl:template>
-
-<!--
-I do not know JDepend enough to know if every error results in a non-analyzed package,
-but that is how I am presenting it to the viewer.  This may need to change.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink">
-  <tr>
-    <td nowrap="nowrap">
-       Not Analyzed: <xsl:value-of select="@name"/>
-    </td>
-  </tr>
-</xsl:template>
-
-<!--
-Creates an html file that contains a link to all package links in overview-cycles.html.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="JDepend/Cycles" mode="all.cycles">
-  <html>
-    <head>
-      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-    </head>
-    <body>
-  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
-  [<a href="overview-summary.html" target="classFrame">summary</a>]
-  [<a href="overview-packages.html" target="classFrame">packages</a>]
-  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
-  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
-   </td></tr></table>
-      <h2>Cycles</h2>
-        <table width="100%">
-           <xsl:apply-templates select="Package" mode="all.cycles">
-            <xsl:sort select="@Name"/>
-          </xsl:apply-templates>
-        </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="JDepend/Cycles/Package" mode="all.cycles">
-  <tr>
-    <td nowrap="nowrap">
-         <a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a>
-    </td>
-  </tr>
-</xsl:template>
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-   <h1>JDepend Analysis</h1>
-  <table width="100%">
-  <tr>
-    <td align="left"></td>
-      <td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td>
-  </tr>
-  </table>
-  <hr size="1"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/jdepend.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/jdepend.xsl
deleted file mode 100644
index f813297..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/jdepend.xsl
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<xsl:output method="html" indent="yes"  encoding="US-ASCII"/>
-
-<xsl:template match="JDepend">
-    <html>
-    <head>
-        <title>JDepend Analysis</title>
-        
-    <style type="text/css">
-      body {
-        font:normal 68% verdana,arial,helvetica;
-        color:#000000;
-      }
-      table tr td, tr th {
-          font-size: 68%;
-      }
-      table.details tr th{
-        font-weight: bold;
-        text-align:left;
-        background:#a6caf0;
-      }
-      table.details tr td{
-        background:#eeeee0;
-      }
-      
-      p {
-        line-height:1.5em;
-        margin-top:0.5em; margin-bottom:1.0em;
-        margin-left:2em;
-        margin-right:2em;
-      }
-      h1 {
-        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-      }
-      h2 {
-        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-      }
-      h3 {
-        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-      }
-      h4 {
-        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      h5 {
-        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      h6 {
-        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      .Error {
-        font-weight:bold; color:red;
-      }
-      .Failure {
-        font-weight:bold; color:purple;
-      }
-      .Properties {
-        text-align:right;
-      }
-      </style>
-        
-        
-    </head>
-    <body>
-    <!--h1>JDepend Report</h1>
-    <ul>
-    <xsl:for-each select="./Packages/Package">
-                <xsl:sort select="@name"/>
-        <li><xsl:value-of select="@name"/></li>
-    </xsl:for-each>
-    </ul-->
-    
-    <h1><a name="top">JDepend Analysis</a></h1>
-    <p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
-    <hr size="2" />
-    
-    <table width="100%"><tr><td>
-    <a name="NVsummary"><h2>Summary</h2></a>
-    </td><td align="right">
-    [<a href="#NVsummary">summary</a>]
-    [<a href="#NVpackages">packages</a>]
-    [<a href="#NVcycles">cycles</a>]
-    [<a href="#NVexplanations">explanations</a>]
-    </td></tr></table>
-    
-    <table width="100%" class="details">
-        <tr>
-            <th>Package</th>
-            <th>Total Classes</th>
-            <th><a href="#EXnumber">Abstract Classes</a></th>
-            <th><a href="#EXnumber">Concrete Classes</a></th>
-            <th><a href="#EXafferent">Afferent Couplings</a></th>
-            <th><a href="#EXefferent">Efferent Couplings</a></th>
-            <th><a href="#EXabstractness">Abstractness</a></th>
-            <th><a href="#EXinstability">Instability</a></th>
-            <th><a href="#EXdistance">Distance</a></th>
-            
-        </tr>
-    <xsl:for-each select="./Packages/Package">
-        <xsl:if test="count(error) = 0">
-            <tr>
-                <td align="left">
-                    <a>
-                    <xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
-                    </xsl:attribute>
-                    <xsl:value-of select="@name"/>
-                    </a>
-                </td>
-                <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
-                <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
-                <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
-                <td align="right"><xsl:value-of select="Stats/Ca"/></td>
-                <td align="right"><xsl:value-of select="Stats/Ce"/></td>
-                <td align="right"><xsl:value-of select="Stats/A"/></td>
-                <td align="right"><xsl:value-of select="Stats/I"/></td>
-                <td align="right"><xsl:value-of select="Stats/D"/></td>
-                
-
-            </tr>
-        </xsl:if>
-    </xsl:for-each>
-    <xsl:for-each select="./Packages/Package">
-        <xsl:if test="count(error) > 0">
-            <tr>
-                <td align="left">
-                    <xsl:value-of select="@name"/>
-                </td>
-                <td align="left" colspan="8"><xsl:value-of select="error"/></td>
-            </tr>
-        </xsl:if>
-    </xsl:for-each>
-    </table>
-    
-    <table width="100%"><tr><td>
-    <a name="NVpackages"><h2>Packages</h2></a>
-    </td><td align="right">
-    [<a href="#NVsummary">summary</a>]
-    [<a href="#NVpackages">packages</a>]
-    [<a href="#NVcycles">cycles</a>]
-    [<a href="#NVexplanations">explanations</a>]
-    </td></tr></table>
-    
-    <xsl:for-each select="./Packages/Package">
-        <xsl:if test="count(error) = 0">
-            <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
-            <xsl:value-of select="@name"/></a></h3>
-            
-            <table width="100%"><tr>
-                <td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
-                <td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
-                <td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
-                <td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
-                <td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
-            </tr></table>
-            
-            <table width="100%" class="details">
-                <tr>
-                    <th>Abstract Classes</th>
-                    <th>Concrete Classes</th>
-                    <th>Used by Packages</th>
-                    <th>Uses Packages</th>
-                </tr>
-                <tr>
-                    <td valign="top" width="25%">
-                    <xsl:if test="count(AbstractClasses/Class)=0">
-                            <i>None</i>
-                        </xsl:if>
-                        <xsl:for-each select="AbstractClasses/Class">
-                            <xsl:value-of select="node()"/><br/>
-                        </xsl:for-each>
-                    </td>
-                    <td valign="top" width="25%">
-                        <xsl:if test="count(ConcreteClasses/Class)=0">
-                            <i>None</i>
-                        </xsl:if>
-                        <xsl:for-each select="ConcreteClasses/Class">
-                            <xsl:value-of select="node()"/><br/>
-                        </xsl:for-each>
-                    </td>
-                    <td valign="top" width="25%">
-                        <xsl:if test="count(UsedBy/Package)=0">
-                            <i>None</i>
-                        </xsl:if>
-                        <xsl:for-each select="UsedBy/Package">
-                            <a>
-                                <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
-                                <xsl:value-of select="node()"/>
-                            </a><br/>
-                        </xsl:for-each>
-                    </td>
-                    <td valign="top" width="25%">
-                        <xsl:if test="count(DependsUpon/Package)=0">
-                            <i>None</i>
-                        </xsl:if>
-                        <xsl:for-each select="DependsUpon/Package">
-                            <a>
-                                <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
-                                <xsl:value-of select="node()"/>
-                            </a><br/>
-                        </xsl:for-each>
-                    </td>
-                </tr>
-            </table>
-        </xsl:if>
-    </xsl:for-each>
-    
-    <table width="100%"><tr><td>
-    <a name="NVcycles"><h2>Cycles</h2></a>
-    </td><td align="right">
-    [<a href="#NVsummary">summary</a>]
-    [<a href="#NVpackages">packages</a>]
-    [<a href="#NVcycles">cycles</a>]
-    [<a href="#NVexplanations">explanations</a>]
-    </td></tr></table>
-    
-    <xsl:if test="count(Cycles/Package) = 0">
-        <p>There are no cyclic dependancies.</p>
-    </xsl:if>
-    <xsl:for-each select="Cycles/Package">
-        <h3><xsl:value-of select="@Name"/></h3><p>
-        <xsl:for-each select="Package">
-            <xsl:value-of select="."/><br/>
-        </xsl:for-each></p>
-    </xsl:for-each>
-    
-    <table width="100%"><tr><td>
-    <a name="NVexplanations"><h2>Explanations</h2></a>
-    </td><td align="right">
-    [<a href="#NVsummary">summary</a>]
-    [<a href="#NVpackages">packages</a>]
-    [<a href="#NVcycles">cycles</a>]
-    [<a href="#NVexplanations">explanations</a>]
-    </td></tr></table>
-    
-    <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
-    
-    <h3><a name="EXnumber">Number of Classes</a></h3>
-        <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
-    <h3><a name="EXafferent">Afferent Couplings</a></h3>
-        <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
-    <h3><a name="EXefferent">Efferent Couplings</a></h3>
-        <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
-    <h3><a name="EXabstractness">Abstractness</a></h3> 
-        <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
-        <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
-    <h3><a name="EXinstability">Instability</a></h3>
-        <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
-        <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
-    <h3><a name="EXdistance">Distance</a></h3>
-        <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
-        <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
-        <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
-    
-    </body>
-    </html>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-frames-xalan1.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-frames-xalan1.xsl
deleted file mode 100644
index 8cef4ca..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-frames-xalan1.xsl
+++ /dev/null
@@ -1,719 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="org.apache.xalan.lib.Redirect"
-    xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
-    extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator=","/>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-
-<!--
-
- Sample stylesheet to be used with Ant JUnitReport output.
-
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
-
--->
-<xsl:param name="output.dir" select="'.'"/>
-
-
-<xsl:template match="testsuites">
-    <!-- create the index.html -->
-    <redirect:write file="{$output.dir}/index.html">
-        <xsl:call-template name="index.html"/>
-    </redirect:write>
-
-    <!-- create the stylesheet.css -->
-    <redirect:write file="{$output.dir}/stylesheet.css">
-        <xsl:call-template name="stylesheet.css"/>
-    </redirect:write>
-
-    <!-- create the overview-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-summary.html">
-        <xsl:apply-templates select="." mode="overview.packages"/>
-    </redirect:write>
-
-    <!-- create the all-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-frame.html">
-        <xsl:apply-templates select="." mode="all.packages"/>
-    </redirect:write>
-
-    <!-- create the all-classes.html at the root -->
-    <redirect:write file="{$output.dir}/allclasses-frame.html">
-        <xsl:apply-templates select="." mode="all.classes"/>
-    </redirect:write>
-
-    <!-- process all packages -->
-    <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-        <xsl:call-template name="package">
-            <xsl:with-param name="name" select="@package"/>
-        </xsl:call-template>
-    </xsl:for-each>
-</xsl:template>
-
-
-<xsl:template name="package">
-    <xsl:param name="name"/>
-    <xsl:variable name="package.dir">
-        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
-        <xsl:if test="$name = ''">.</xsl:if>
-    </xsl:variable>
-    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
-    <!-- create a classes-list.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-        <xsl:call-template name="classes.list">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- create a package-summary.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-        <xsl:call-template name="package.summary">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- for each class, creates a @name.html -->
-    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-    <xsl:for-each select="/testsuites/testsuite[@package = $name]">
-        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-            <xsl:apply-templates select="." mode="class.details"/>
-        </redirect:write>
-        <xsl:if test="string-length(./system-out)!=0">
-            <redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.txt">
-                <xsl:value-of select="./system-out" />
-            </redirect:write>
-        </xsl:if>
-        <xsl:if test="string-length(./system-err)!=0">
-            <redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.txt">
-                <xsl:value-of select="./system-err" />
-            </redirect:write>
-        </xsl:if>
-    </xsl:for-each>
-</xsl:template>
-
-<xsl:template name="index.html">
-<html>
-    <head>
-        <title>Unit Test Results.</title>
-    </head>
-    <frameset cols="20%,80%">
-        <frameset rows="30%,70%">
-            <frame src="overview-frame.html" name="packageListFrame"/>
-            <frame src="allclasses-frame.html" name="classListFrame"/>
-        </frameset>
-        <frame src="overview-summary.html" name="classFrame"/>
-        <noframes>
-            <h2>Frame Alert</h2>
-            <p>
-                This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-            </p>
-        </noframes>
-    </frameset>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-body {
-    font:normal 68% verdana,arial,helvetica;
-    color:#000000;
-}
-table tr td, table tr th {
-    font-size: 68%;
-}
-table.details tr th{
-    font-weight: bold;
-    text-align:left;
-    background:#a6caf0;
-}
-table.details tr td{
-    background:#eeeee0;
-}
-
-p {
-    line-height:1.5em;
-    margin-top:0.5em; margin-bottom:1.0em;
-}
-h1 {
-    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-}
-h2 {
-    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-}
-h3 {
-    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-}
-h4 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h5 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h6 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-.Error {
-    font-weight:bold; color:red;
-}
-.Failure {
-    font-weight:bold; color:purple;
-}
-.Properties {
-  text-align:right;
-}
-</xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every testsuite class.
-    It prints a summary of the testsuite and detailed information about
-    testcase methods.
-     ====================================================================== -->
-<xsl:template match="testsuite" mode="class.details">
-    <xsl:variable name="package.name" select="@package"/>
-    <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
-    <html>
-        <head>
-          <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$package.name"/>
-            </xsl:call-template>
-       <script type="text/javascript" language="JavaScript">
-        var TestCases = new Array();
-        var cur;
-        <xsl:apply-templates select="properties"/>
-       </script>
-       <script type="text/javascript" language="JavaScript"><![CDATA[
-        function displayProperties (name) {
-          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
-          var doc = win.document;
-          doc.open();
-          doc.write("<html><head><title>Properties of " + name + "</title>");
-          doc.write("<style type=\"text/css\">");
-          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
-          doc.write("table tr td, table tr th { font-size: 68%; }");
-          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
-          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
-          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
-          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
-          doc.write("</style>");
-          doc.write("</head><body>");
-          doc.write("<h3>Properties of " + name + "</h3>");
-          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
-          doc.write("<table class='properties'>");
-          doc.write("<tr><th>Name</th><th>Value</th></tr>");
-          for (prop in TestCases[name]) {
-            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
-          }
-          doc.write("</table>");
-          doc.write("</body></html>");
-          doc.close();
-          win.focus();
-        }
-      ]]>
-      </script>
-        </head>
-        <body>
-            <xsl:call-template name="pageHeader"/>
-            <h3>Class <xsl:value-of select="$class.name"/></h3>
-
-
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-                <xsl:call-template name="testsuite.test.header"/>
-                <xsl:apply-templates select="." mode="print.test"/>
-            </table>
-
-            <h2>Tests</h2>
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-        <xsl:call-template name="testcase.test.header"/>
-              <!--
-              test can even not be started at all (failure to load the class)
-              so report the error directly
-              -->
-                <xsl:if test="./error">
-                    <tr class="Error">
-                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
-                    </tr>
-                </xsl:if>
-                <xsl:apply-templates select="./testcase" mode="print.test"/>
-            </table>
-            <div class="Properties">
-                <a>
-                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
-                    Properties »
-                </a>
-            </div>
-            <xsl:if test="string-length(./system-out)!=0">
-                <div class="Properties">
-                    <a>
-                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
-                        System.out »
-                    </a>
-                </div>
-            </xsl:if>
-            <xsl:if test="string-length(./system-err)!=0">
-                <div class="Properties">
-                    <a>
-                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
-                        System.err »
-                    </a>
-                </div>
-            </xsl:if>
-        </body>
-    </html>
-</xsl:template>
-
-  <!--
-   Write properties into a JavaScript data structure.
-   This is based on the original idea by Erik Hatcher (ehatcher at apache.org)
-   -->
-  <xsl:template match="properties">
-    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
-    <xsl:for-each select="property">
-    <xsl:sort select="@name"/>
-        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
-    </xsl:for-each>
-  </xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every package.
-    It prints the name of all classes that belongs to this package.
-    @param name the package name to print classes.
-     ====================================================================== -->
-<!-- list of classes in a package -->
-<xsl:template name="classes.list">
-    <xsl:param name="name"/>
-    <html>
-        <head>
-            <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <table width="100%">
-                <tr>
-                    <td nowrap="nowrap">
-                        <h2><a href="package-summary.html" target="classFrame">
-                            <xsl:value-of select="$name"/>
-                            <xsl:if test="$name = ''"><none></xsl:if>
-                        </a></h2>
-                    </td>
-                </tr>
-            </table>
-
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
-                    <xsl:sort select="@name"/>
-                    <tr>
-                        <td nowrap="nowrap">
-                            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-                        </td>
-                    </tr>
-                </xsl:for-each>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-
-<!--
-    Creates an all-classes.html file that contains a link to all package-summary.html
-    on each class.
--->
-<xsl:template match="testsuites" mode="all.classes">
-    <html>
-        <head>
-            <title>All Unit Test Classes</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:apply-templates select="testsuite" mode="all.classes">
-                    <xsl:sort select="@name"/>
-                </xsl:apply-templates>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.classes">
-    <xsl:variable name="package.name" select="@package"/>
-    <tr>
-        <td nowrap="nowrap">
-            <a target="classFrame">
-                <xsl:attribute name="href">
-                    <xsl:if test="not($package.name='')">
-                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-                    </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-                </xsl:attribute>
-                <xsl:value-of select="@name"/>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!--
-    Creates an html file that contains a link to all package-summary.html files on
-    each package existing on testsuites.
-    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="testsuites" mode="all.packages">
-    <html>
-        <head>
-            <title>All Unit Test Packages</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-            <h2>Packages</h2>
-            <table width="100%">
-                <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
-                    <xsl:sort select="@package"/>
-                </xsl:apply-templates>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.packages">
-    <tr>
-        <td nowrap="nowrap">
-            <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
-                <xsl:value-of select="@package"/>
-                <xsl:if test="@package = ''"><none></xsl:if>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<xsl:template match="testsuites" mode="overview.packages">
-    <html>
-        <head>
-            <title>Unit Test Results: Summary</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-        <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
-        <xsl:call-template name="pageHeader"/>
-        <h2>Summary</h2>
-        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
-        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
-        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
-        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
-        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-        <tr valign="top">
-            <th>Tests</th>
-            <th>Failures</th>
-            <th>Errors</th>
-            <th>Success rate</th>
-            <th>Time</th>
-        </tr>
-        <tr valign="top">
-            <xsl:attribute name="class">
-                <xsl:choose>
-                    <xsl:when test="$errorCount > 0">Error</xsl:when>
-                    <xsl:when test="$failureCount > 0">Failure</xsl:when>
-                    <xsl:otherwise>Pass</xsl:otherwise>
-                </xsl:choose>
-            </xsl:attribute>
-            <td><xsl:value-of select="$testCount"/></td>
-            <td><xsl:value-of select="$failureCount"/></td>
-            <td><xsl:value-of select="$errorCount"/></td>
-            <td>
-                <xsl:call-template name="display-percent">
-                    <xsl:with-param name="value" select="$successRate"/>
-                </xsl:call-template>
-            </td>
-            <td>
-                <xsl:call-template name="display-time">
-                    <xsl:with-param name="value" select="$timeCount"/>
-                </xsl:call-template>
-            </td>
-        </tr>
-        </table>
-        <table border="0" width="95%">
-        <tr>
-        <td style="text-align: justify;">
-        Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
-        </td>
-        </tr>
-        </table>
-
-        <h2>Packages</h2>
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-            <xsl:call-template name="testsuite.test.header"/>
-            <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-                <xsl:sort select="@package" order="ascending"/>
-                <!-- get the node set containing all testsuites that have the same package -->
-                <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
-                <tr valign="top">
-                    <!-- display a failure if there is any failure/error in the package -->
-                    <xsl:attribute name="class">
-                        <xsl:choose>
-                            <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when>
-                            <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when>
-                            <xsl:otherwise>Pass</xsl:otherwise>
-                        </xsl:choose>
-                    </xsl:attribute>
-                    <td><a href="./{translate(@package,'.','/')}/package-summary.html">
-                        <xsl:value-of select="@package"/>
-                        <xsl:if test="@package = ''"><none></xsl:if>
-                    </a></td>
-                    <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
-                    <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
-                    <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
-                    <td>
-                    <xsl:call-template name="display-time">
-                        <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
-                    </xsl:call-template>
-                    </td>
-                    <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
-                    <td><xsl:value-of select="$insamepackage/@hostname"/></td>
-                </tr>
-            </xsl:for-each>
-        </table>
-        </body>
-        </html>
-</xsl:template>
-
-
-<xsl:template name="package.summary">
-    <xsl:param name="name"/>
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
-            <xsl:call-template name="pageHeader"/>
-            <h3>Package <xsl:value-of select="$name"/></h3>
-
-            <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
-                <xsl:call-template name="class.metrics.header"/>
-                <xsl:apply-templates select="." mode="print.metrics"/>
-            </table-->
-
-            <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
-            <xsl:if test="count($insamepackage) > 0">
-                <h2>Classes</h2>
-                <p>
-                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-                    <xsl:call-template name="testsuite.test.header"/>
-                    <xsl:apply-templates select="$insamepackage" mode="print.test">
-                        <xsl:sort select="@name"/>
-                    </xsl:apply-templates>
-                </table>
-                </p>
-            </xsl:if>
-        </body>
-    </html>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-    <xsl:param name="path"/>
-    <xsl:if test="contains($path,'.')">
-        <xsl:text>../</xsl:text>
-        <xsl:call-template name="path">
-            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-        </xsl:call-template>
-    </xsl:if>
-    <xsl:if test="not(contains($path,'.')) and not($path = '')">
-        <xsl:text>../</xsl:text>
-    </xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-    <xsl:param name="package.name"/>
-    <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
-</xsl:template>
-
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-    <h1>Unit Test Results</h1>
-    <table width="100%">
-    <tr>
-        <td align="left"></td>
-        <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://ant.apache.org/">Ant</a>.</td>
-    </tr>
-    </table>
-    <hr size="1"/>
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="testsuite.test.header">
-    <tr valign="top">
-        <th width="80%">Name</th>
-        <th>Tests</th>
-        <th>Errors</th>
-        <th>Failures</th>
-        <th nowrap="nowrap">Time(s)</th>
-        <th nowrap="nowrap">Time Stamp</th>
-        <th>Host</th>
-    </tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="testcase.test.header">
-    <tr valign="top">
-        <th>Name</th>
-        <th>Status</th>
-        <th width="80%">Type</th>
-        <th nowrap="nowrap">Time(s)</th>
-    </tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="testsuite" mode="print.test">
-    <tr valign="top">
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="@errors[.> 0]">Error</xsl:when>
-                <xsl:when test="@failures[.> 0]">Failure</xsl:when>
-                <xsl:otherwise>Pass</xsl:otherwise>
-            </xsl:choose>
-        </xsl:attribute>
-        <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
-        <td><xsl:apply-templates select="@tests"/></td>
-        <td><xsl:apply-templates select="@errors"/></td>
-        <td><xsl:apply-templates select="@failures"/></td>
-        <td><xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-        <td><xsl:apply-templates select="@timestamp"/></td>
-        <td><xsl:apply-templates select="@hostname"/></td>
-    </tr>
-</xsl:template>
-
-<xsl:template match="testcase" mode="print.test">
-    <tr valign="top">
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="error">Error</xsl:when>
-                <xsl:when test="failure">Failure</xsl:when>
-                <xsl:otherwise>TableRowColor</xsl:otherwise>
-            </xsl:choose>
-        </xsl:attribute>
-        <td><xsl:value-of select="@name"/></td>
-        <xsl:choose>
-            <xsl:when test="failure">
-                <td>Failure</td>
-                <td><xsl:apply-templates select="failure"/></td>
-            </xsl:when>
-            <xsl:when test="error">
-                <td>Error</td>
-                <td><xsl:apply-templates select="error"/></td>
-            </xsl:when>
-            <xsl:otherwise>
-                <td>Success</td>
-                <td></td>
-            </xsl:otherwise>
-        </xsl:choose>
-        <td>
-            <xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!-- Note : the below template error and failure are the same style
-            so just call the same style store in the toolkit template -->
-<xsl:template match="failure">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<xsl:template match="error">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<!-- Style for the error and failure in the testcase template -->
-<xsl:template name="display-failures">
-    <xsl:choose>
-        <xsl:when test="not(@message)">N/A</xsl:when>
-        <xsl:otherwise>
-            <xsl:value-of select="@message"/>
-        </xsl:otherwise>
-    </xsl:choose>
-    <!-- display the stacktrace -->
-    <br/><br/>
-    <code>
-        <xsl:call-template name="br-replace">
-            <xsl:with-param name="word" select="."/>
-        </xsl:call-template>
-    </code>
-    <!-- the latter is better but might be problematic for non-21" monitors... -->
-    <!--pre><xsl:value-of select="."/></pre-->
-</xsl:template>
-
-<xsl:template name="JS-escape">
-    <xsl:param name="string"/>
-    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
-    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
-    <xsl:value-of select="$tmp2"/>
-</xsl:template>
-
-
-<!--
-    template that will convert a carriage return into a br tag
-    @param word the text from which to convert CR to BR tag
--->
-<xsl:template name="br-replace">
-    <xsl:param name="word"/>
-    <xsl:param name="br"><br/></xsl:param>
-    <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
-</xsl:template>
-
-<xsl:template name="display-time">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.000')"/>
-</xsl:template>
-
-<xsl:template name="display-percent">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.00%')"/>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-frames.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-frames.xsl
deleted file mode 100644
index 9ea322a..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-frames.xsl
+++ /dev/null
@@ -1,877 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="http://xml.apache.org/xalan/redirect"
-    xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
-    extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator=","/>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-
-<!--
-
- Sample stylesheet to be used with Ant JUnitReport output.
-
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
-
--->
-<xsl:param name="output.dir" select="'.'"/>
-<xsl:param name="TITLE">Unit Test Results.</xsl:param>
-
-
-<xsl:template match="testsuites">
-    <!-- create the index.html -->
-    <redirect:write file="{$output.dir}/index.html">
-        <xsl:call-template name="index.html"/>
-    </redirect:write>
-
-    <!-- create the stylesheet.css -->
-    <redirect:write file="{$output.dir}/stylesheet.css">
-        <xsl:call-template name="stylesheet.css"/>
-    </redirect:write>
-
-    <!-- create the overview-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-summary.html">
-        <xsl:apply-templates select="." mode="overview.packages"/>
-    </redirect:write>
-
-    <!-- create the all-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-frame.html">
-        <xsl:apply-templates select="." mode="all.packages"/>
-    </redirect:write>
-
-    <!-- create the all-classes.html at the root -->
-    <redirect:write file="{$output.dir}/allclasses-frame.html">
-        <xsl:apply-templates select="." mode="all.classes"/>
-    </redirect:write>
-
-    <!-- create the all-tests.html at the root -->
-    <redirect:write file="{$output.dir}/all-tests.html">
-        <xsl:apply-templates select="." mode="all.tests"/>
-    </redirect:write>
-
-    <!-- create the alltests-fails.html at the root -->
-    <redirect:write file="{$output.dir}/alltests-fails.html">
-      <xsl:apply-templates select="." mode="all.tests">
-        <xsl:with-param name="type" select="'fails'"/>
-      </xsl:apply-templates>
-    </redirect:write>
-
-  <!-- create the alltests-errors.html at the root -->
-    <redirect:write file="{$output.dir}/alltests-errors.html">
-      <xsl:apply-templates select="." mode="all.tests">
-        <xsl:with-param name="type" select="'errors'"/>
-      </xsl:apply-templates>
-    </redirect:write>
-
-  <!-- process all packages -->
-    <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-        <xsl:call-template name="package">
-            <xsl:with-param name="name" select="@package"/>
-        </xsl:call-template>
-    </xsl:for-each>
-</xsl:template>
-
-
-<xsl:template name="package">
-    <xsl:param name="name"/>
-    <xsl:variable name="package.dir">
-        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
-        <xsl:if test="$name = ''">.</xsl:if>
-    </xsl:variable>
-    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
-    <!-- create a classes-list.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-        <xsl:call-template name="classes.list">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- create a package-summary.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-        <xsl:call-template name="package.summary">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- for each class, creates a @name.html -->
-    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-  <xsl:for-each select="/testsuites/testsuite[@package = $name]">
-    <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}.html">
-      <xsl:apply-templates select="." mode="class.details"/>
-    </redirect:write>
-    <xsl:if test="string-length(./system-out)!=0">
-      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt">
-        <xsl:value-of disable-output-escaping="yes" select="./system-out"/>
-      </redirect:write>
-    </xsl:if>
-    <xsl:if test="string-length(./system-err)!=0">
-      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt">
-        <xsl:value-of disable-output-escaping="yes" select="./system-err"/>
-      </redirect:write>
-    </xsl:if>
-    <xsl:if test="@failures != 0">
-      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-fails.html">
-        <xsl:apply-templates select="." mode="class.details">
-          <xsl:with-param name="type" select="'fails'"/>
-        </xsl:apply-templates>
-      </redirect:write>
-    </xsl:if>
-    <xsl:if test="@errors != 0">
-      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-errors.html">
-        <xsl:apply-templates select="." mode="class.details">
-          <xsl:with-param name="type" select="'errors'"/>
-        </xsl:apply-templates>
-      </redirect:write>
-    </xsl:if>
-  </xsl:for-each>
-</xsl:template>
-
-<xsl:template name="index.html">
-<html>
-    <head>
-        <title><xsl:value-of select="$TITLE"/></title>
-    </head>
-    <frameset cols="20%,80%">
-        <frameset rows="30%,70%">
-            <frame src="overview-frame.html" name="packageListFrame"/>
-            <frame src="allclasses-frame.html" name="classListFrame"/>
-        </frameset>
-        <frame src="overview-summary.html" name="classFrame"/>
-        <noframes>
-            <h2>Frame Alert</h2>
-            <p>
-                This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-            </p>
-        </noframes>
-    </frameset>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-body {
-    font:normal 68% verdana,arial,helvetica;
-    color:#000000;
-}
-table tr td, table tr th {
-    font-size: 68%;
-}
-table.details tr th{
-    font-weight: bold;
-    text-align:left;
-    background:#a6caf0;
-}
-table.details tr td{
-    background:#eeeee0;
-}
-
-p {
-    line-height:1.5em;
-    margin-top:0.5em; margin-bottom:1.0em;
-}
-h1 {
-    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-}
-h2 {
-    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-}
-h3 {
-    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-}
-h4 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h5 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h6 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-.Error {
-    font-weight:bold; color:red;
-}
-.Failure {
-    font-weight:bold; color:purple;
-}
-.Properties {
-  text-align:right;
-}
-</xsl:template>
-
-<!-- Create list of all/failed/errored tests -->
-<xsl:template match="testsuites" mode="all.tests">
-    <xsl:param name="type" select="'all'"/>
-    <html>
-	<xsl:variable name="title">
-	    <xsl:choose>
-		<xsl:when test="$type = 'fails'">
-		    <xsl:text>All Failures</xsl:text>
-		</xsl:when>
-		<xsl:when test="$type = 'errors'">
-		    <xsl:text>All Errors</xsl:text>
-		</xsl:when>
-		<xsl:otherwise>
-		    <xsl:text>All Tests</xsl:text>
-		</xsl:otherwise>
-	    </xsl:choose>
-	</xsl:variable>
-	<head>
-	    <title>Unit Test Results: <xsl:value-of select="$title"/></title>
-	    <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-	</head>
-	<body>
-	    <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
-            <xsl:call-template name="pageHeader"/>
-            <h2><xsl:value-of select="$title"/></h2>
-
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-		<xsl:call-template name="testcase.test.header">
-		    <xsl:with-param name="show.class" select="'yes'"/>
-		</xsl:call-template>
-		<!--
-                test can even not be started at all (failure to load the class)
-		so report the error directly
-		-->
-              <xsl:if test="./error">
-                <tr class="Error">
-                  <td colspan="4">
-                    <xsl:apply-templates select="./error"/>
-                  </td>
-                </tr>
-              </xsl:if>
-              <xsl:choose>
-                <xsl:when test="$type = 'fails'">
-                  <xsl:apply-templates select=".//testcase[failure]" mode="print.test">
-                    <xsl:with-param name="show.class" select="'yes'"/>
-                  </xsl:apply-templates>
-                </xsl:when>
-                <xsl:when test="$type = 'errors'">
-                  <xsl:apply-templates select=".//testcase[error]" mode="print.test">
-                    <xsl:with-param name="show.class" select="'yes'"/>
-                  </xsl:apply-templates>
-                </xsl:when>
-                <xsl:otherwise>
-                  <xsl:apply-templates select=".//testcase" mode="print.test">
-                    <xsl:with-param name="show.class" select="'yes'"/>
-                  </xsl:apply-templates>
-                </xsl:otherwise>
-              </xsl:choose>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every testsuite class.
-    It prints a summary of the testsuite and detailed information about
-    testcase methods.
-     ====================================================================== -->
-<xsl:template match="testsuite" mode="class.details">
-    <xsl:param name="type" select="'all'"/>
-    <xsl:variable name="package.name" select="@package"/>
-    <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
-    <html>
-        <head>
-          <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$package.name"/>
-            </xsl:call-template>
-       <script type="text/javascript" language="JavaScript">
-        var TestCases = new Array();
-        var cur;
-        <xsl:apply-templates select="properties"/>
-       </script>
-       <script type="text/javascript" language="JavaScript"><![CDATA[
-        function displayProperties (name) {
-          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
-          var doc = win.document;
-          doc.open();
-          doc.write("<html><head><title>Properties of " + name + "</title>");
-          doc.write("<style type=\"text/css\">");
-          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
-          doc.write("table tr td, table tr th { font-size: 68%; }");
-          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
-          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
-          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
-          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
-          doc.write("</style>");
-          doc.write("</head><body>");
-          doc.write("<h3>Properties of " + name + "</h3>");
-          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
-          doc.write("<table class='properties'>");
-          doc.write("<tr><th>Name</th><th>Value</th></tr>");
-          for (prop in TestCases[name]) {
-            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
-          }
-          doc.write("</table>");
-          doc.write("</body></html>");
-          doc.close();
-          win.focus();
-        }
-      ]]>
-      </script>
-        </head>
-        <body>
-            <xsl:call-template name="pageHeader"/>
-            <h3>Class <xsl:value-of select="$class.name"/></h3>
-
-
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-                <xsl:call-template name="testsuite.test.header"/>
-                <xsl:apply-templates select="." mode="print.test"/>
-            </table>
-
-	    <xsl:choose>
-		<xsl:when test="$type = 'fails'">
-		    <h2>Failures</h2>
-		</xsl:when>
-		<xsl:when test="$type = 'errors'">
-		    <h2>Errors</h2>
-		</xsl:when>
-		<xsl:otherwise>
-		    <h2>Tests</h2>
-		</xsl:otherwise>
-	    </xsl:choose>
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-		<xsl:call-template name="testcase.test.header"/>
-		<!--
-                test can even not be started at all (failure to load the class)
-		so report the error directly
-		-->
-                <xsl:if test="./error">
-                    <tr class="Error">
-                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
-                    </tr>
-                </xsl:if>
-		<xsl:choose>
-		    <xsl:when test="$type = 'fails'">
-			<xsl:apply-templates select="./testcase[failure]" mode="print.test"/>
-		    </xsl:when>
-		    <xsl:when test="$type = 'errors'">
-			<xsl:apply-templates select="./testcase[error]" mode="print.test"/>
-		    </xsl:when>
-		    <xsl:otherwise>
-			<xsl:apply-templates select="./testcase" mode="print.test"/>
-		    </xsl:otherwise>
-		</xsl:choose>
-            </table>
-            <div class="Properties">
-                <a>
-                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
-                    Properties »
-                </a>
-            </div>
-            <xsl:if test="string-length(./system-out)!=0">
-                <div class="Properties">
-                    <a>
-                        <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
-                        System.out »
-                    </a>
-                </div>
-            </xsl:if>
-            <xsl:if test="string-length(./system-err)!=0">
-                <div class="Properties">
-                    <a>
-                        <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
-                        System.err »
-                    </a>
-                </div>
-            </xsl:if>
-        </body>
-    </html>
-</xsl:template>
-
-  <!--
-   Write properties into a JavaScript data structure.
-   This is based on the original idea by Erik Hatcher (ehatcher at apache.org)
-   -->
-  <xsl:template match="properties">
-    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
-    <xsl:for-each select="property">
-    <xsl:sort select="@name"/>
-        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
-    </xsl:for-each>
-  </xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every package.
-    It prints the name of all classes that belongs to this package.
-    @param name the package name to print classes.
-     ====================================================================== -->
-<!-- list of classes in a package -->
-<xsl:template name="classes.list">
-    <xsl:param name="name"/>
-    <html>
-        <head>
-            <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <table width="100%">
-                <tr>
-                    <td nowrap="nowrap">
-                        <h2><a href="package-summary.html" target="classFrame">
-                            <xsl:value-of select="$name"/>
-                            <xsl:if test="$name = ''"><none></xsl:if>
-                        </a></h2>
-                    </td>
-                </tr>
-            </table>
-
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
-                    <xsl:sort select="@name"/>
-                    <tr>
-                        <td nowrap="nowrap">
-                            <a href="{@id}_{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-                        </td>
-                    </tr>
-                </xsl:for-each>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-
-<!--
-    Creates an all-classes.html file that contains a link to all package-summary.html
-    on each class.
--->
-<xsl:template match="testsuites" mode="all.classes">
-    <html>
-        <head>
-            <title>All Unit Test Classes</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:apply-templates select="testsuite" mode="all.classes">
-                    <xsl:sort select="@name"/>
-                </xsl:apply-templates>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.classes">
-    <xsl:variable name="package.name" select="@package"/>
-    <tr>
-        <td nowrap="nowrap">
-            <a target="classFrame">
-                <xsl:attribute name="href">
-                    <xsl:if test="not($package.name='')">
-                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-                    </xsl:if><xsl:value-of select="@id"/>_<xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-                </xsl:attribute>
-                <xsl:value-of select="@name"/>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!--
-    Creates an html file that contains a link to all package-summary.html files on
-    each package existing on testsuites.
-    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="testsuites" mode="all.packages">
-    <html>
-        <head>
-            <title>All Unit Test Packages</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-            <h2>Packages</h2>
-            <table width="100%">
-                <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
-                    <xsl:sort select="@package"/>
-                </xsl:apply-templates>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.packages">
-    <tr>
-        <td nowrap="nowrap">
-            <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
-                <xsl:value-of select="@package"/>
-                <xsl:if test="@package = ''"><none></xsl:if>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<xsl:template match="testsuites" mode="overview.packages">
-    <html>
-        <head>
-            <title>Unit Test Results: Summary</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-        <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
-        <xsl:call-template name="pageHeader"/>
-        <h2>Summary</h2>
-        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
-        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
-        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
-        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
-        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-        <tr valign="top">
-            <th>Tests</th>
-            <th>Failures</th>
-            <th>Errors</th>
-            <th>Success rate</th>
-            <th>Time</th>
-        </tr>
-        <tr valign="top">
-            <xsl:attribute name="class">
-                <xsl:choose>
-                    <xsl:when test="$errorCount > 0">Error</xsl:when>
-                    <xsl:when test="$failureCount > 0">Failure</xsl:when>
-                    <xsl:otherwise>Pass</xsl:otherwise>
-                </xsl:choose>
-            </xsl:attribute>
-            <td><a title="Display all tests" href="all-tests.html"><xsl:value-of select="$testCount"/></a></td>
-            <td><a title="Display all failures" href="alltests-fails.html"><xsl:value-of select="$failureCount"/></a></td>
-            <td><a title="Display all errors" href="alltests-errors.html"><xsl:value-of select="$errorCount"/></a></td>
-            <td>
-                <xsl:call-template name="display-percent">
-                    <xsl:with-param name="value" select="$successRate"/>
-                </xsl:call-template>
-            </td>
-            <td>
-                <xsl:call-template name="display-time">
-                    <xsl:with-param name="value" select="$timeCount"/>
-                </xsl:call-template>
-            </td>
-        </tr>
-        </table>
-        <table border="0" width="95%">
-        <tr>
-        <td style="text-align: justify;">
-        Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
-        </td>
-        </tr>
-        </table>
-
-        <h2>Packages</h2>
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-            <xsl:call-template name="testsuite.test.header"/>
-            <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-                <xsl:sort select="@package" order="ascending"/>
-                <!-- get the node set containing all testsuites that have the same package -->
-                <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
-                <tr valign="top">
-                    <!-- display a failure if there is any failure/error in the package -->
-                    <xsl:attribute name="class">
-                        <xsl:choose>
-                            <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when>
-                            <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when>
-                            <xsl:otherwise>Pass</xsl:otherwise>
-                        </xsl:choose>
-                    </xsl:attribute>
-                    <td><a href="./{translate(@package,'.','/')}/package-summary.html">
-                        <xsl:value-of select="@package"/>
-                        <xsl:if test="@package = ''"><none></xsl:if>
-                    </a></td>
-                    <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
-                    <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
-                    <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
-                    <td>
-                    <xsl:call-template name="display-time">
-                        <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
-                    </xsl:call-template>
-                    </td>
-                    <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
-                    <td><xsl:value-of select="$insamepackage/@hostname"/></td>
-                </tr>
-            </xsl:for-each>
-        </table>
-        </body>
-        </html>
-</xsl:template>
-
-
-<xsl:template name="package.summary">
-    <xsl:param name="name"/>
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
-            <xsl:call-template name="pageHeader"/>
-            <h3>Package <xsl:value-of select="$name"/></h3>
-
-            <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
-                <xsl:call-template name="class.metrics.header"/>
-                <xsl:apply-templates select="." mode="print.metrics"/>
-            </table-->
-
-            <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
-            <xsl:if test="count($insamepackage) > 0">
-                <h2>Classes</h2>
-                <p>
-                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-                    <xsl:call-template name="testsuite.test.header"/>
-                    <xsl:apply-templates select="$insamepackage" mode="print.test">
-                        <xsl:sort select="@name"/>
-                    </xsl:apply-templates>
-                </table>
-                </p>
-            </xsl:if>
-        </body>
-    </html>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-    <xsl:param name="path"/>
-    <xsl:if test="contains($path,'.')">
-        <xsl:text>../</xsl:text>
-        <xsl:call-template name="path">
-            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-        </xsl:call-template>
-    </xsl:if>
-    <xsl:if test="not(contains($path,'.')) and not($path = '')">
-        <xsl:text>../</xsl:text>
-    </xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-    <xsl:param name="package.name"/>
-    <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
-</xsl:template>
-
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-    <h1><xsl:value-of select="$TITLE"/></h1>
-    <table width="100%">
-    <tr>
-        <td align="left"></td>
-        <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://ant.apache.org/">Ant</a>.</td>
-    </tr>
-    </table>
-    <hr size="1"/>
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="testsuite.test.header">
-    <tr valign="top">
-        <th width="80%">Name</th>
-        <th>Tests</th>
-        <th>Errors</th>
-        <th>Failures</th>
-        <th nowrap="nowrap">Time(s)</th>
-        <th nowrap="nowrap">Time Stamp</th>
-        <th>Host</th>
-    </tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="testcase.test.header">
-    <xsl:param name="show.class" select="''"/>
-    <tr valign="top">
-	<xsl:if test="boolean($show.class)">
-	    <th>Class</th>
-	</xsl:if>
-        <th>Name</th>
-        <th>Status</th>
-        <th width="80%">Type</th>
-        <th nowrap="nowrap">Time(s)</th>
-    </tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="testsuite" mode="print.test">
-    <tr valign="top">
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="@errors[.> 0]">Error</xsl:when>
-                <xsl:when test="@failures[.> 0]">Failure</xsl:when>
-                <xsl:otherwise>Pass</xsl:otherwise>
-            </xsl:choose>
-        </xsl:attribute>
-        <td><a title="Display all tests" href="{@id}_{@name}.html"><xsl:value-of select="@name"/></a></td>
-        <td><a title="Display all tests" href="{@id}_{@name}.html"><xsl:apply-templates select="@tests"/></a></td>
-        <td>
-	    <xsl:choose>
-		<xsl:when test="@errors != 0">
-		    <a title="Display only errors" href="{@id}_{@name}-errors.html"><xsl:apply-templates select="@errors"/></a>
-		</xsl:when>
-		<xsl:otherwise>
-		    <xsl:apply-templates select="@errors"/>
-		</xsl:otherwise>
-	    </xsl:choose>
-	</td>
-        <td>
-	    <xsl:choose>
-		<xsl:when test="@failures != 0">
-		    <a title="Display only failures" href="{@id}_{@name}-fails.html"><xsl:apply-templates select="@failures"/></a>
-		</xsl:when>
-		<xsl:otherwise>
-		    <xsl:apply-templates select="@failures"/>
-		</xsl:otherwise>
-	    </xsl:choose>
-	</td>
-        <td><xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-        <td><xsl:apply-templates select="@timestamp"/></td>
-        <td><xsl:apply-templates select="@hostname"/></td>
-    </tr>
-</xsl:template>
-
-<xsl:template match="testcase" mode="print.test">
-    <xsl:param name="show.class" select="''"/>
-    <tr valign="top">
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="error">Error</xsl:when>
-                <xsl:when test="failure">Failure</xsl:when>
-                <xsl:otherwise>TableRowColor</xsl:otherwise>
-            </xsl:choose>
-        </xsl:attribute>
-	<xsl:variable name="class.href">
-	    <xsl:value-of select="concat(translate(../@package,'.','/'), '/', ../@id, '_', ../@name, '.html')"/>
-	</xsl:variable>
-	<xsl:if test="boolean($show.class)">
-	    <td><a href="{$class.href}"><xsl:value-of select="../@name"/></a></td>
-	</xsl:if>
-        <td>
-	    <a name="{@name}"/>
-	    <xsl:choose>
-		<xsl:when test="boolean($show.class)">
-		    <a href="{concat($class.href, '#', @name)}"><xsl:value-of select="@name"/></a>
-		</xsl:when>
-		<xsl:otherwise>
-		    <xsl:value-of select="@name"/>
-		</xsl:otherwise>
-	    </xsl:choose>
-	</td>
-        <xsl:choose>
-            <xsl:when test="failure">
-                <td>Failure</td>
-                <td><xsl:apply-templates select="failure"/></td>
-            </xsl:when>
-            <xsl:when test="error">
-                <td>Error</td>
-                <td><xsl:apply-templates select="error"/></td>
-            </xsl:when>
-            <xsl:otherwise>
-                <td>Success</td>
-                <td></td>
-            </xsl:otherwise>
-        </xsl:choose>
-        <td>
-            <xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!-- Note : the below template error and failure are the same style
-            so just call the same style store in the toolkit template -->
-<xsl:template match="failure">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<xsl:template match="error">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<!-- Style for the error and failure in the testcase template -->
-<xsl:template name="display-failures">
-    <xsl:choose>
-        <xsl:when test="not(@message)">N/A</xsl:when>
-        <xsl:otherwise>
-            <xsl:value-of select="@message"/>
-        </xsl:otherwise>
-    </xsl:choose>
-    <!-- display the stacktrace -->
-    <br/><br/>
-    <code>
-        <xsl:call-template name="br-replace">
-            <xsl:with-param name="word" select="."/>
-        </xsl:call-template>
-    </code>
-    <!-- the latter is better but might be problematic for non-21" monitors... -->
-    <!--pre><xsl:value-of select="."/></pre-->
-</xsl:template>
-
-<xsl:template name="JS-escape">
-    <xsl:param name="string"/>
-    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
-    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
-    <xsl:value-of select="$tmp2"/>
-</xsl:template>
-
-
-<!--
-    template that will convert a carriage return into a br tag
-    @param word the text from which to convert CR to BR tag
--->
-<xsl:template name="br-replace">
-    <xsl:param name="word"/>
-    <xsl:value-of disable-output-escaping="yes" select='stringutils:replace(string($word),"&#xA;","<br/>")'/>
-</xsl:template>
-
-<xsl:template name="display-time">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.000')"/>
-</xsl:template>
-
-<xsl:template name="display-percent">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.00%')"/>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-noframes.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-noframes.xsl
deleted file mode 100644
index f0ab964..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/junit-noframes.xsl
+++ /dev/null
@@ -1,467 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-        xmlns:lxslt="http://xml.apache.org/xslt"
-        xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"
-  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- -->
-
-<xsl:param name="TITLE">Unit Test Results.</xsl:param>
-
-<!--
-
- Sample stylesheet to be used with Ant JUnitReport output.
-
- It creates a non-framed report that can be useful to send via
- e-mail or such.
-
--->
-<xsl:template match="testsuites">
-    <html>
-        <head>
-            <title><xsl:value-of select="$TITLE"/></title>
-    <style type="text/css">
-      body {
-        font:normal 68% verdana,arial,helvetica;
-        color:#000000;
-      }
-      table tr td, table tr th {
-          font-size: 68%;
-      }
-      table.details tr th{
-        font-weight: bold;
-        text-align:left;
-        background:#a6caf0;
-      }
-      table.details tr td{
-        background:#eeeee0;
-      }
-
-      p {
-        line-height:1.5em;
-        margin-top:0.5em; margin-bottom:1.0em;
-      }
-      h1 {
-        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-      }
-      h2 {
-        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-      }
-      h3 {
-        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-      }
-      h4 {
-        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      h5 {
-        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      h6 {
-        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      .Error {
-        font-weight:bold; color:red;
-      }
-      .Failure {
-        font-weight:bold; color:purple;
-      }
-      .Properties {
-        text-align:right;
-      }
-      </style>
-      <script type="text/javascript" language="JavaScript">
-        var TestCases = new Array();
-        var cur;
-        <xsl:for-each select="./testsuite">
-            <xsl:apply-templates select="properties"/>
-        </xsl:for-each>
-
-       </script>
-       <script type="text/javascript" language="JavaScript"><![CDATA[
-        function displayProperties (name) {
-          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
-          var doc = win.document;
-          doc.open();
-          doc.write("<html><head><title>Properties of " + name + "</title>");
-          doc.write("<style>")
-          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
-          doc.write("table tr td, table tr th { font-size: 68%; }");
-          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
-          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
-          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
-          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
-          doc.write("</style>");
-          doc.write("</head><body>");
-          doc.write("<h3>Properties of " + name + "</h3>");
-          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
-          doc.write("<table class='properties'>");
-          doc.write("<tr><th>Name</th><th>Value</th></tr>");
-          for (prop in TestCases[name]) {
-            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
-          }
-          doc.write("</table>");
-          doc.write("</body></html>");
-          doc.close();
-          win.focus();
-        }
-      ]]>
-      </script>
-        </head>
-        <body>
-            <a name="top"></a>
-            <xsl:call-template name="pageHeader"/>
-
-            <!-- Summary part -->
-            <xsl:call-template name="summary"/>
-            <hr size="1" width="95%" align="left"/>
-
-            <!-- Package List part -->
-            <xsl:call-template name="packagelist"/>
-            <hr size="1" width="95%" align="left"/>
-
-            <!-- For each package create its part -->
-            <xsl:call-template name="packages"/>
-            <hr size="1" width="95%" align="left"/>
-
-            <!-- For each class create the  part -->
-            <xsl:call-template name="classes"/>
-
-        </body>
-    </html>
-</xsl:template>
-
-
-
-    <!-- ================================================================== -->
-    <!-- Write a list of all packages with an hyperlink to the anchor of    -->
-    <!-- of the package name.                                               -->
-    <!-- ================================================================== -->
-    <xsl:template name="packagelist">
-        <h2>Packages</h2>
-        Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-            <xsl:call-template name="testsuite.test.header"/>
-            <!-- list all packages recursively -->
-            <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-                <xsl:sort select="@package"/>
-                <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
-                <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
-                <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
-                <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
-                <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
-
-                <!-- write a summary for the package -->
-                <tr valign="top">
-                    <!-- set a nice color depending if there is an error/failure -->
-                    <xsl:attribute name="class">
-                        <xsl:choose>
-                            <xsl:when test="$failureCount > 0">Failure</xsl:when>
-                            <xsl:when test="$errorCount > 0">Error</xsl:when>
-                        </xsl:choose>
-                    </xsl:attribute>
-                    <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
-                    <td><xsl:value-of select="$testCount"/></td>
-                    <td><xsl:value-of select="$errorCount"/></td>
-                    <td><xsl:value-of select="$failureCount"/></td>
-                    <td>
-                    <xsl:call-template name="display-time">
-                        <xsl:with-param name="value" select="$timeCount"/>
-                    </xsl:call-template>
-                    </td>
-                    <td><xsl:value-of select="$testsuites-in-package/@timestamp"/></td>
-                    <td><xsl:value-of select="$testsuites-in-package/@hostname"/></td>
-                </tr>
-            </xsl:for-each>
-        </table>
-    </xsl:template>
-
-
-    <!-- ================================================================== -->
-    <!-- Write a package level report                                       -->
-    <!-- It creates a table with values from the document:                  -->
-    <!-- Name | Tests | Errors | Failures | Time                            -->
-    <!-- ================================================================== -->
-    <xsl:template name="packages">
-        <!-- create an anchor to this package name -->
-        <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-            <xsl:sort select="@package"/>
-                <a name="{@package}"></a>
-                <h3>Package <xsl:value-of select="@package"/></h3>
-
-                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-                    <xsl:call-template name="testsuite.test.header"/>
-
-                    <!-- match the testsuites of this package -->
-                    <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
-                </table>
-                <a href="#top">Back to top</a>
-                <p/>
-                <p/>
-        </xsl:for-each>
-    </xsl:template>
-
-    <xsl:template name="classes">
-        <xsl:for-each select="testsuite">
-            <xsl:sort select="@name"/>
-            <!-- create an anchor to this class name -->
-            <a name="{@name}"></a>
-            <h3>TestCase <xsl:value-of select="@name"/></h3>
-
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-              <xsl:call-template name="testcase.test.header"/>
-              <!--
-              test can even not be started at all (failure to load the class)
-              so report the error directly
-              -->
-                <xsl:if test="./error">
-                    <tr class="Error">
-                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
-                    </tr>
-                </xsl:if>
-                <xsl:apply-templates select="./testcase" mode="print.test"/>
-            </table>
-            <div class="Properties">
-                <a>
-                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
-                    Properties »
-                </a>
-            </div>
-            <p/>
-
-            <a href="#top">Back to top</a>
-        </xsl:for-each>
-    </xsl:template>
-
-    <xsl:template name="summary">
-        <h2>Summary</h2>
-        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
-        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
-        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
-        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
-        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-        <tr valign="top">
-            <th>Tests</th>
-            <th>Failures</th>
-            <th>Errors</th>
-            <th>Success rate</th>
-            <th>Time</th>
-        </tr>
-        <tr valign="top">
-            <xsl:attribute name="class">
-                <xsl:choose>
-                    <xsl:when test="$failureCount > 0">Failure</xsl:when>
-                    <xsl:when test="$errorCount > 0">Error</xsl:when>
-                </xsl:choose>
-            </xsl:attribute>
-            <td><xsl:value-of select="$testCount"/></td>
-            <td><xsl:value-of select="$failureCount"/></td>
-            <td><xsl:value-of select="$errorCount"/></td>
-            <td>
-                <xsl:call-template name="display-percent">
-                    <xsl:with-param name="value" select="$successRate"/>
-                </xsl:call-template>
-            </td>
-            <td>
-                <xsl:call-template name="display-time">
-                    <xsl:with-param name="value" select="$timeCount"/>
-                </xsl:call-template>
-            </td>
-
-        </tr>
-        </table>
-        <table border="0" width="95%">
-        <tr>
-        <td style="text-align: justify;">
-        Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
-        </td>
-        </tr>
-        </table>
-    </xsl:template>
-
-  <!--
-   Write properties into a JavaScript data structure.
-   This is based on the original idea by Erik Hatcher (ehatcher at apache.org)
-   -->
-  <xsl:template match="properties">
-    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
-    <xsl:for-each select="property">
-    <xsl:sort select="@name"/>
-        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
-    </xsl:for-each>
-  </xsl:template>
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-    <h1><xsl:value-of select="$TITLE"/></h1>
-    <table width="100%">
-    <tr>
-        <td align="left"></td>
-        <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://ant.apache.org/ant'>Ant</a>.</td>
-    </tr>
-    </table>
-    <hr size="1"/>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="header">
-    <tr valign="top">
-        <th width="80%">Name</th>
-        <th>Tests</th>
-        <th>Errors</th>
-        <th>Failures</th>
-        <th nowrap="nowrap">Time(s)</th>
-    </tr>
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="testsuite.test.header">
-    <tr valign="top">
-        <th width="80%">Name</th>
-        <th>Tests</th>
-        <th>Errors</th>
-        <th>Failures</th>
-        <th nowrap="nowrap">Time(s)</th>
-        <th nowrap="nowrap">Time Stamp</th>
-        <th>Host</th>
-    </tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="testcase.test.header">
-    <tr valign="top">
-        <th>Name</th>
-        <th>Status</th>
-        <th width="80%">Type</th>
-        <th nowrap="nowrap">Time(s)</th>
-    </tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="testsuite" mode="print.test">
-    <tr valign="top">
-        <!-- set a nice color depending if there is an error/failure -->
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="@failures[.> 0]">Failure</xsl:when>
-                <xsl:when test="@errors[.> 0]">Error</xsl:when>
-            </xsl:choose>
-        </xsl:attribute>
-
-        <!-- print testsuite information -->
-        <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
-        <td><xsl:value-of select="@tests"/></td>
-        <td><xsl:value-of select="@errors"/></td>
-        <td><xsl:value-of select="@failures"/></td>
-        <td>
-            <xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-        <td><xsl:apply-templates select="@timestamp"/></td>
-        <td><xsl:apply-templates select="@hostname"/></td>
-    </tr>
-</xsl:template>
-
-<xsl:template match="testcase" mode="print.test">
-    <tr valign="top">
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="failure | error">Error</xsl:when>
-            </xsl:choose>
-        </xsl:attribute>
-        <td><xsl:value-of select="@name"/></td>
-        <xsl:choose>
-            <xsl:when test="failure">
-                <td>Failure</td>
-                <td><xsl:apply-templates select="failure"/></td>
-            </xsl:when>
-            <xsl:when test="error">
-                <td>Error</td>
-                <td><xsl:apply-templates select="error"/></td>
-            </xsl:when>
-            <xsl:otherwise>
-                <td>Success</td>
-                <td></td>
-            </xsl:otherwise>
-        </xsl:choose>
-        <td>
-            <xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<xsl:template match="failure">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<xsl:template match="error">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<!-- Style for the error and failure in the tescase template -->
-<xsl:template name="display-failures">
-    <xsl:choose>
-        <xsl:when test="not(@message)">N/A</xsl:when>
-        <xsl:otherwise>
-            <xsl:value-of select="@message"/>
-        </xsl:otherwise>
-    </xsl:choose>
-    <!-- display the stacktrace -->
-    <code>
-        <br/><br/>
-        <xsl:call-template name="br-replace">
-            <xsl:with-param name="word" select="."/>
-        </xsl:call-template>
-    </code>
-    <!-- the later is better but might be problematic for non-21" monitors... -->
-    <!--pre><xsl:value-of select="."/></pre-->
-</xsl:template>
-
-<xsl:template name="JS-escape">
-    <xsl:param name="string"/>
-    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
-    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
-    <xsl:value-of select="$tmp2"/>
-</xsl:template>
-
-
-<!--
-    template that will convert a carriage return into a br tag
-    @param word the text from which to convert CR to BR tag
--->
-<xsl:template name="br-replace">
-    <xsl:param name="word"/>
-    <xsl:value-of disable-output-escaping="yes" select='stringutils:replace(string($word),"&#xA;","<br/>")'/>
-</xsl:template>
-
-<xsl:template name="display-time">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.000')"/>
-</xsl:template>
-
-<xsl:template name="display-percent">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.00%')"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/log.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/log.xsl
deleted file mode 100644
index 5040993..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/log.xsl
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   
--->
- 
-<!--
-
-  The purpose have this XSL is to provide a nice way to look at the output
-  from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger )
-  
-  @author <a href="mailto:sbailliez at apache.org">Stephane Bailliez</a>
-  
--->
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-
-<xsl:template match="/">
-<html>
-  <head>
-    <style type="text/css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin: 0;
-      font:normal 100% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    table.status {
-      font:bold 80% arial,helvetica,sanserif;
-      background-color:#525D76;
-      color:#ffffff;
-    }
-    table.log tr td, tr th {
-      font-size: 80%;
-    }
-    .error {
-      color:red;
-    }
-    .warn {
-      color:brown;
-    }
-    .info {
-      color:gray;
-    }
-    .debug{
-      color:gray;
-    }
-    .failed {
-      font-size:80%;
-      background-color: red;
-      color:#FFFFFF;
-      font-weight: bold
-    }
-    .complete {
-      font-size:80%;
-      background-color: #525D76;
-      color:#FFFFFF;
-      font-weight: bold
-    }
-    .a td { 
-      background: #efefef;
-    }
-    .b td { 
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      border: none
-    }
-    h3 {
-      font:bold 80% arial,helvetica,sanserif;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-    </style>
-  </head>
-  <body>
-    <!-- jakarta logo -->
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr>
-      <td valign="top" class="bannercell">
-        <a href="http://jakarta.apache.org/">
-        <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-        </a>
-      </td>
-      <td style="text-align:right;vertical-align:bottom">
-        <a href="http://ant.apache.org/">Apache Ant</a>
-      </td>
-    </tr>
-    </table>
-      
-    <table border="0" width="100%">
-    <tr><td><hr noshade="yes" size="1"/></td></tr>
-    </table>
-
-    <xsl:apply-templates select="build"/>
-
-  </body>
-</html>
-</xsl:template>
-
-<xsl:template match="build">
-  <!-- build status -->
-  <table width="100%">
-    <xsl:attribute name="class">
-      <xsl:if test="@error">failed</xsl:if>
-      <xsl:if test="not(@error)">complete</xsl:if>
-    </xsl:attribute>
-    <tr>
-      <xsl:if test="@error">
-        <td nowrap="yes">Build Failed</td> 
-      </xsl:if>
-      <xsl:if test="not(@error)">
-        <td nowrap="yes">Build Complete</td>
-      </xsl:if>
-        <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td>
-    </tr>
-    <tr>
-      <td colspan="2">
-        <xsl:if test="@error">
-          <tt><xsl:value-of select="@error"/></tt><br/>
-          <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i>
-        </xsl:if>
-      </td>
-    </tr>
-  </table>
-  <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%">
-    <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.file')], '->')"/></td></tr>
-    <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.version')], '->')"/></td></tr>
-    <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'java.vm.version')], '->')"/></td></tr>
-    <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(//message[contains(text(),'os.name')], '->')"/></td></tr>
-  </table>
-  <!-- build information -->
-  <h3>Build events</h3>
-  <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%">
-  <tr>
-    <th nowrap="yes" align="left" width="1%">target</th>
-    <th nowrap="yes" align="left" width="1%">task</th>
-    <th nowrap="yes" align="left">message</th>
-  </tr>
-  <xsl:apply-templates select=".//message[@priority != 'debug']"/>
-  </table>
-  <p>
-  <!-- stacktrace -->
-  <xsl:if test="stacktrace">
-  <a name="stacktrace"/>
-  <h3>Error details</h3>
-  <table width="100%">
-    <tr><td>
-      <pre><xsl:value-of select="stacktrace"/></pre>
-    </td></tr>
-  </table>
-  </xsl:if>
-  </p>
-</xsl:template>
-
-<!-- report every message but those with debug priority -->
-<xsl:template match="message[@priority!='debug']">
-  <tr valign="top">
-    <!-- alternated row style -->
-    <xsl:attribute name="class">
-      <xsl:if test="position() mod 2 = 1">a</xsl:if>
-      <xsl:if test="position() mod 2 = 0">b</xsl:if>
-    </xsl:attribute>
-    <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td>
-    <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td>
-    <td class="{@priority}" nowrap="yes">
-            <xsl:value-of select="text()"/>
-    </td>
-  </tr>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/maudit-frames.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/maudit-frames.xsl
deleted file mode 100644
index 257c0c8..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/maudit-frames.xsl
+++ /dev/null
@@ -1,503 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="org.apache.xalan.lib.Redirect"
-    extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--
-
-    Stylesheet to transform an XML file generated by the Ant MAudit task into
-    a set of JavaDoc-like HTML page to make pages more convenient to be browsed.
-
-    It use the Xalan redirect extension to write to multiple output files.
-
-    @author Stephane Bailliez <a href="mailto:sbailliez at apache.org"/>
--->
-
-<xsl:param name="output.dir" select="'.'"/>
-
-
-<xsl:template match="classes">
-    <!-- create the index.html -->
-    <redirect:write file="{$output.dir}/index.html">
-        <xsl:call-template name="index.html"/>
-    </redirect:write>
-
-    <!-- create the stylesheet.css -->
-    <redirect:write file="{$output.dir}/stylesheet.css">
-        <xsl:call-template name="stylesheet.css"/>
-    </redirect:write>
-
-    <!-- create the overview-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-summary.html">
-        <xsl:apply-templates select="." mode="overview.packages"/>
-    </redirect:write>
-
-    <!-- create the all-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-frame.html">
-        <xsl:apply-templates select="." mode="all.packages"/>
-    </redirect:write>
-
-    <!-- create the all-classes.html at the root -->
-    <redirect:write file="{$output.dir}/allclasses-frame.html">
-        <xsl:apply-templates select="." mode="all.classes"/>
-    </redirect:write>
-
-    <!-- process all packages -->
-    <xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]">
-        <xsl:call-template name="package">
-            <xsl:with-param name="name" select="@package"/>
-        </xsl:call-template>
-    </xsl:for-each>
-</xsl:template>
-
-
-<xsl:template name="package">
-    <xsl:param name="name"/>
-    <xsl:variable name="package.dir">
-        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
-        <xsl:if test="$name = ''">.</xsl:if>
-    </xsl:variable>
-    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
-    <!-- create a classes-list.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-        <xsl:call-template name="classes.list">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- create a package-summary.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-        <xsl:call-template name="package.summary">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- for each class, creates a @name.html -->
-    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-    <xsl:for-each select="/classes/class[@package = $name]">
-        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-            <xsl:apply-templates select="." mode="class.details"/>
-        </redirect:write>
-    </xsl:for-each>
-</xsl:template>
-
-<xsl:template name="index.html">
-<HTML>
-    <HEAD><TITLE>Audit Results.</TITLE></HEAD>
-    <FRAMESET cols="20%,80%">
-        <FRAMESET rows="30%,70%">
-            <FRAME src="overview-frame.html" name="packageListFrame"/>
-            <FRAME src="allclasses-frame.html" name="classListFrame"/>
-        </FRAMESET>
-        <FRAME src="overview-summary.html" name="classFrame"/>
-    </FRAMESET>
-    <noframes>
-        <H2>Frame Alert</H2>
-        <P>
-        This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-        </P>
-    </noframes>
-</HTML>
-</xsl:template>
-
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin-left: 10;
-      margin-right: 10;
-      font:normal 80% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    .a td {
-      background: #efefef;
-    }
-    .b td {
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      font-weight:bold;
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      font-size:100%;
-      border: none
-    }
-    table.log tr td, tr th {
-
-    }
-    h2 {
-      font-weight:bold;
-      font-size:140%;
-      margin-bottom: 5;
-    }
-    h3 {
-      font-size:100%;
-      font-weight:bold;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-</xsl:template>
-
-
-<!-- print the violations of the class -->
-<xsl:template match="class" mode="class.details">
-    <xsl:variable name="package.name" select="@package"/>
-    <HTML>
-        <HEAD>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$package.name"/>
-            </xsl:call-template>
-        </HEAD>
-        <BODY>
-            <xsl:call-template name="pageHeader"/>
-            <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
-
-            <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-                <xsl:call-template name="class.audit.header"/>
-                <xsl:apply-templates select="." mode="print.audit"/>
-            </table>
-
-            <H3>Violations</H3>
-            <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-                <xsl:call-template name="violation.audit.header"/>
-                <xsl:apply-templates select="./violation" mode="print.audit">
-                    <xsl:sort data-type="number" select="@line"/>
-                </xsl:apply-templates>
-            </table>
-            <xsl:call-template name="pageFooter"/>
-        </BODY>
-    </HTML>
-</xsl:template>
-
-
-<!-- list of classes in a package -->
-<xsl:template name="classes.list">
-    <xsl:param name="name"/>
-    <HTML>
-        <HEAD>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </HEAD>
-        <BODY>
-            <table width="100%">
-                <tr>
-                    <td nowrap="nowrap">
-                        <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2>
-                    </td>
-                </tr>
-            </table>
-
-            <h2>Classes</h2>
-            <TABLE WIDTH="100%">
-                <xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list">
-                    <xsl:sort select="@name"/>
-                </xsl:apply-templates>
-            </TABLE>
-        </BODY>
-    </HTML>
-</xsl:template>
-<!-- the class to list -->
-<xsl:template match="class" mode="classes.list">
-    <tr>
-        <td nowrap="nowrap">
-            <!-- @bug naming to fix for inner classes -->
-            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!--
-    Creates an all-classes.html file that contains a link to all package-summary.html
-    on each class.
--->
-<xsl:template match="classes" mode="all.classes">
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:apply-templates select=".//class" mode="all.classes">
-                    <xsl:sort select="@name"/>
-                </xsl:apply-templates>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="class" mode="all.classes">
-    <!-- (ancestor::package)[last()] is buggy in MSXML3 ? -->
-    <xsl:variable name="package.name" select="@package"/>
-    <tr>
-        <td nowrap="nowrap">
-            <a target="classFrame">
-                <xsl:attribute name="href">
-                    <xsl:if test="not($package.name='')">
-                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-                    </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-                </xsl:attribute>
-                <xsl:value-of select="@name"/>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!--
-    Creates an html file that contains a link to all package-summary.html files on
-    each package existing on testsuites.
-    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="classes" mode="all.packages">
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-            <h2>Packages</h2>
-                <table width="100%">
-                    <xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages">
-                        <xsl:sort select="@package" order="ascending"/>
-                    </xsl:apply-templates>
-                </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="class" mode="all.packages">
-    <tr>
-        <td nowrap="nowrap">
-            <a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame">
-                <xsl:value-of select="@package"/>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<xsl:template match="classes" mode="overview.packages">
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body onload="open('allclasses-frame.html','classListFrame')">
-        <xsl:call-template name="pageHeader"/>
-        <h3>Summary</h3>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-        <tr>
-            <th>Audited classes</th>
-            <th>Reported classes</th>
-            <th>Violations</th>
-        </tr>
-        <tr class="a">
-            <td><xsl:value-of select="@audited"/></td>
-            <td><xsl:value-of select="@reported"/></td>
-            <td><xsl:value-of select="@violations"/></td>
-        </tr>
-        </table>
-        <table border="0" width="100%">
-        <tr>
-        <td style="text-align: justify;">
-        Note: Rules checked have originated from style guidelines suggested by the language designers,
-        experience from the Java development community and insite experience. Violations are generally
-        reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x)
-        and Metamata Audit rules (x.x).
-        Please consult these documents for additional information about violations.
-        <p/>
-        Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta.
-        <p/>
-        One should note that these violations do not necessary underline errors but should be used
-        as an indication for <i>possible</i> errors. As always, use your best judgment and review
-        them carefully, it might save you hours of debugging.
-        </td>
-        </tr>
-        </table>
-
-        <h3>Packages</h3>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-            <xsl:call-template name="class.audit.header"/>
-            <xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]">
-                <xsl:sort select="@package" order="ascending"/>
-                <tr>
-          <xsl:call-template name="alternate-row"/>
-                    <td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td>
-                    <td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td>
-                </tr>
-            </xsl:for-each>
-        </table>
-        <xsl:call-template name="pageFooter"/>
-        </body>
-        </html>
-</xsl:template>
-
-
-<xsl:template name="package.summary">
-    <xsl:param name="name"/>
-    <HTML>
-        <HEAD>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </HEAD>
-        <BODY>
-            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
-            <xsl:call-template name="pageHeader"/>
-            <h3>Package <xsl:value-of select="$name"/></h3>
-
-            <!--table border="0" cellpadding="5" cellspacing="2" width="100%">
-                <xsl:call-template name="class.metrics.header"/>
-                <xsl:apply-templates select="." mode="print.metrics"/>
-            </table-->
-
-            <xsl:if test="count(/classes/class[./@package = $name]) > 0">
-                <H3>Classes</H3>
-                <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-                    <xsl:call-template name="class.audit.header"/>
-                    <xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit">
-                        <xsl:sort select="@name"/>
-                    </xsl:apply-templates>
-                </table>
-            </xsl:if>
-            <xsl:call-template name="pageFooter"/>
-        </BODY>
-    </HTML>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-    <xsl:param name="path"/>
-    <xsl:if test="contains($path,'.')">
-        <xsl:text>../</xsl:text>
-        <xsl:call-template name="path">
-            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-        </xsl:call-template>
-    </xsl:if>
-    <xsl:if test="not(contains($path,'.')) and not($path = '')">
-        <xsl:text>../</xsl:text>
-    </xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-    <xsl:param name="package.name"/>
-    <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
-</xsl:template>
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-
-  <!-- jakarta logo -->
-  <table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td class="bannercell" rowspan="2">
-      <a href="http://jakarta.apache.org/">
-      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-      </a>
-    </td>
-        <td style="text-align:right"><h2>Source Code Audit</h2></td>
-        </tr>
-        <tr>
-        <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-        </tr>
-  </table>
-    <hr size="1"/>
-</xsl:template>
-
-<!-- Page HEADER -->
-<xsl:template name="pageFooter">
-</xsl:template>
-
-
-<!-- class header -->
-<xsl:template name="class.audit.header">
-    <tr>
-        <th width="80%">Name</th>
-        <th>Violations</th>
-    </tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="violation.audit.header">
-    <tr>
-        <th>Line</th>
-        <th>Message</th>
-    </tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="class" mode="print.audit">
-    <tr>
-    <xsl:call-template name="alternate-row"/>
-        <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
-        <td><xsl:apply-templates select="@violations"/></td>
-    </tr>
-</xsl:template>
-
-<xsl:template match="violation" mode="print.audit">
-    <tr>
-    <xsl:call-template name="alternate-row"/>
-        <td><xsl:value-of select="@line"/></td>
-        <td><xsl:apply-templates select="@message"/></td>
-    </tr>
-</xsl:template>
-
-<!-- alternated row style -->
-<xsl:template name="alternate-row">
-<xsl:attribute name="class">
-  <xsl:if test="position() mod 2 = 1">a</xsl:if>
-  <xsl:if test="position() mod 2 = 0">b</xsl:if>
-</xsl:attribute>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/mmetrics-frames.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/mmetrics-frames.xsl
deleted file mode 100644
index 8b4643a..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/mmetrics-frames.xsl
+++ /dev/null
@@ -1,1026 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-  xmlns:lxslt="http://xml.apache.org/xslt"
-  xmlns:xalan="http://xml.apache.org/xalan"
-  xmlns:redirect="org.apache.xalan.lib.Redirect"
-  exclude-result-prefixes="xalan"
-  extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--
-  @author Stephane Bailliez <a href="mailto:sbailliez at apache.org"/>
-  -->
-<xsl:param name="output.dir" select="'.'"/>
-
-<!-- default max value for the metrics -->
-<xsl:param name="vg.max" select="10"/>
-<xsl:param name="loc.max" select="1000"/>
-<xsl:param name="dit.max" select="10"/>
-<xsl:param name="noa.max" select="250"/>
-<xsl:param name="nrm.max" select="50"/>
-<xsl:param name="nlm.max" select="250"/>
-<xsl:param name="wmc.max" select="250"/>
-<xsl:param name="rfc.max" select="50"/>
-<xsl:param name="dac.max" select="10"/>
-<xsl:param name="fanout.max" select="10"/>
-<xsl:param name="cbo.max" select="15"/>
-<xsl:param name="lcom.max" select="10"/>
-<xsl:param name="nocl.max" select="10"/>
-
-
-<!-- create a tree fragment to speed up processing -->
-<xsl:variable name="doctree.var">
-  <xsl:element name="classes">
-    <xsl:for-each select=".//class">
-      <xsl:element name="class">
-        <xsl:attribute name="package">
-          <xsl:value-of select="(ancestor::package)[last()]/@name"/>
-        </xsl:attribute>
-        <xsl:copy-of select="@*"/>
-        <xsl:attribute name="name">
-          <xsl:apply-templates select="." mode="class.name"/>
-        </xsl:attribute>
-        <xsl:copy-of select="method"/>
-      </xsl:element>
-    </xsl:for-each>
-  </xsl:element>
-</xsl:variable>
-
-<xsl:variable name="doctree" select="xalan:nodeset($doctree.var)"/>
-
-<xsl:template match="metrics">
-
-  <!-- create the index.html -->
-  <redirect:write file="{$output.dir}/index.html">
-    <xsl:call-template name="index.html"/>
-  </redirect:write>
-
-  <!-- create the stylesheet.css -->
-  <redirect:write file="{$output.dir}/stylesheet.css">
-    <xsl:call-template name="stylesheet.css"/>
-  </redirect:write>
-
-  <redirect:write file="{$output.dir}/metrics-reference.html">
-    <xsl:call-template name="metrics-reference.html"/>
-  </redirect:write>
-
-  <!-- create the overview-packages.html at the root -->
-  <redirect:write file="{$output.dir}/overview-summary.html">
-    <xsl:apply-templates select="." mode="overview.packages"/>
-  </redirect:write>
-
-  <!-- create the all-packages.html at the root -->
-  <redirect:write file="{$output.dir}/overview-frame.html">
-    <xsl:apply-templates select="." mode="all.packages"/>
-  </redirect:write>
-
-  <!-- create the all-classes.html at the root -->
-  <redirect:write file="{$output.dir}/allclasses-frame.html">
-    <xsl:apply-templates select="." mode="all.classes"/>
-  </redirect:write>
-
-  <!-- process all packages -->
-  <xsl:apply-templates select=".//package"/>
-</xsl:template>
-
-
-<xsl:template match="package">
-  <xsl:variable name="package.name" select="@name"/>
-  <xsl:variable name="package.dir">
-    <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="translate($package.name,'.','/')"/></xsl:if>
-    <xsl:if test="$package.name = 'unnamed package'">.</xsl:if>
-  </xsl:variable>
-  <!-- create a classes-list.html in the package directory -->
-  <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-    <xsl:apply-templates select="." mode="classes.list"/>
-  </redirect:write>
-
-  <!-- create a package-summary.html in the package directory -->
-  <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-    <xsl:apply-templates select="." mode="package.summary"/>
-  </redirect:write>
-
-  <!-- for each class, creates a @name.html -->
-  <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-  <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
-      <!--Processing <xsl:value-of select="$class.name"/><xsl:text>
</xsl:text> -->
-    <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-      <xsl:apply-templates select="." mode="class.details"/>
-    </redirect:write>
-  </xsl:for-each>
-</xsl:template>
-
-<!-- little trick to compute the classname for inner and non inner classes -->
-<!-- this is all in one line to avoid CRLF in the name -->
-<xsl:template match="class" mode="class.name">
-    <xsl:if test="parent::class"><xsl:apply-templates select="parent::class" mode="class.name"/>.<xsl:value-of select="@name"/></xsl:if><xsl:if test="not(parent::class)"><xsl:value-of select="@name"/></xsl:if>
-</xsl:template>
-
-
-<xsl:template name="index.html">
-<HTML>
-  <HEAD><TITLE>Metrics Results.</TITLE></HEAD>
-  <FRAMESET cols="20%,80%">
-    <FRAMESET rows="30%,70%">
-      <FRAME src="overview-frame.html" name="packageListFrame"/>
-      <FRAME src="allclasses-frame.html" name="classListFrame"/>
-    </FRAMESET>
-    <FRAME src="overview-summary.html" name="classFrame"/>
-  </FRAMESET>
-  <noframes>
-    <H2>Frame Alert</H2>
-    <P>
-    This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-    </P>
-  </noframes>
-</HTML>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="metrics-reference.html">
-<html>
-<head>
-<link title="Style" type="text/css" rel="stylesheet" href="stylesheet.css"/>
-</head>
-<body style="text-align:justify;">
-<h2>Metrics Reference</h2>
-<a href="#V(G)">V(G)</a> |
-<a href="#LOC">LOC</a> |
-<a href="#DIT">DIT</a> |
-<a href="#NOA">NOA</a> |
-<a href="#NRM">NRM</a> |
-<a href="#NLM">NLM</a> |
-<a href="#WMC">WMC</a> |
-<a href="#RFC">RFC</a> |
-<a href="#DAC">DAC</a> |
-<a href="#FANOUT">FANOUT</a> |
-<a href="#CBO">CBO</a> |
-<a href="#LCOM">LCOM</a> |
-<a href="#NOC">NOC</a>
-
-<a name="V(G)"/>
-<h3>Cyclomatic Complexity - V(G)</h3>
-This metric was introduced in the 1970s to measure the amount of control
-flow complexity or branching complexity in a module such as a
-subroutine. It gives the number of paths that may be taken through the
-code, and was initially developed to give some measure of the cost of
-producing a test case for the module by executing each path.
-<p/>
-Methods with a high cyclomatic complexity tend to be more difficult to
-understand and maintain. In general the more complex the methods of an
-application, the more difficult it will be to test it, and this will adversely
-affect its reliability.
-<p/>
-V(G) is a measure of the control flow complexity of a method or
-constructor.  It counts the number of branches in the body of the method,
-defined as:
-<ul>
-<li>while statements;</li>
-<li>if statements;</li>
-<li>for statements.</li>
-</ul>
-
-The metric can also be configured to count each case of a switch
-statement as well.
-
-<a name="LOC"/>
-<h3>Lines of Code - LOC</h3>
-
-This is perhaps the simplest of all the metrics to define and compute.
-Counting lines has a long history as a software metric dating from before
-the rise of structured programming, and it is still in widespread use today.
-The size of a method affects the ease with which it can be understood, its
-reusability and its maintainability. There are a variety of ways that the size
-can be calculated. These include counting all the lines of code, the number
-of statements, the blank lines of code, the lines of commentary, and the
-lines consisting only of syntax such as block delimiters.
-<p/>
-This metric can also be used for sizing other constructs as well, for
-example, the overall size of a Java class or package can be measured by
-counting the number of source lines it consists of.
-<p/>
-LOC can be used to determine the size of a compilation unit (source file),
-class or interface, method, constructor, or field.  It can be configured to
-ignore:
-<ul>
-<li>blank lines;</li>
-<li>lines consisting only of comments;</li>
-<li>lines consisting only of opening and closing braces.</li>
-</ul>
-
-<a name="DIT"/>
-<h3>Depth of Inheritance Hierarchy - DIT</h3>
-
-This metric calculates how far down the inheritance hierarchy a class is
-declared. In Java all classes have java.lang.Object as their ultimate
-superclass, which is defined to have a depth of 1. So a class that
-immediately extends java.lang.Object has a metric value of 2; any of its
-subclasses will have a value of 3, and so on.
-<p/>
-A class that is deep within the tree inherits more methods and state
-variables, thereby increasing its complexity and making it difficult to
-predict its behavior. It can be harder to understand a system with many
-inheritance layers.
-<p/>
-DIT is defined for classes and interfaces:
-<ul>
-<li>all interface types have a depth of 1;</li>
-<li>the class java.lang.Object has a depth of 1;</li>
-<li>all other classes have a depth of 1 + the depth of their super class.</li>
-</ul>
-
-<a name="NOA"/>
-<h3>Number of Attributes - NOA</h3>
-
-The number of distinct state variables in a class serves as one measure of
-its complexity. The more state a class represents the more difficult it is to
-maintain invariants for it. It also hinders comprehensibility and reuse.
-<p/>
-In Java, state can be exposed to subclasses through protected fields, which
-entails that the subclass also be aware of and maintain any invariants. This
-interference with the class's data encapsulation can be a source of defects
-and hidden dependencies between the state variables.
-<p/>
-NOA is defined for classes and interfaces.  It counts the number of fields
-declared in the class or interface.
-
-<a name="NRM"/>
-<h3>Number of Remote Methods - NRM</h3>
-
-NRM is defined for classes.  A remote method call is defined as an
-invocation of a method that is not declared in any of:
-<ul>
-<li>the class itself;</li>
-<li>a class or interface that the class extends or implements;</li>
-<li>a class or method that extends the class.</li>
-</ul>
-
-The value is the count of all the remote method calls in all of the methods
-and constructors of the class.
-
-<a name="NLM"/>
-<h3>Number of Local Methods - NLM</h3>
-
-NLM is defined for classes and interfaces.  A local method is defined as a
-method that is declared in the class or interface. NLM can be configured to
-include the local methods of all of the class's superclasses.  Methods with
-public, protected, package and private visibility can be independently
-counted by setting configuration parameters.
-
-<a name="WMC"/>
-<h3>Weighted Methods per Class - WMC</h3>
-
-If the number of methods in a class can be determined during the design
-and modeling phase of a project, it can be used as a predictor of how
-much time and effort is needed to develop, debug and maintain it. This
-metric can be further refined by incorporating a weighting for the
-complexity of each method. The usual weighting is given by the cyclomatic
-complexity of the method.
-<p/>
-The subclasses of a class inherit all of its public and protected methods,
-and possibly its package methods as well, so the number of methods a
-class has directly impacts the complexity of its subclasses. Classes with
-large numbers of methods are often specific to a particular application,
-reducing the ability to reuse them.
-<p/>
-The definition of WMC is based upon NLM, and it provides the same
-configuration parameters for counting inherited methods and of varying
-visibility. The main difference is that NLM always counts each method as 1,
-whereas WMC will weight each method. There are two weighting schemes:
-<ul>
-<li>V(G) the cyclomatic complexity of the method is used as its weight.
-   Methods from class files are given a V(G) of 1.</li>
-<li>the arity, or the number of parameters of the method are used to
-   determine the weight.</li>
-</ul>
-
-<a name="RFC"/>
-<h3>Response For Class - RFC</h3>
-
-The response set of a class is the set of all methods that can be invoked as
-a result of a message sent to an object of the class. This includes methods
-in the class's inheritance hierarchy and methods that can be invoked on
-other objects. The Response For Class metric is defined to be size of the
-response set for the class. A class which provides a larger response set is
-considered to be more complex than one with a smaller response set.
-<p/>
-One reason for this is that if a method call on a class can result in a large
-number of different method calls on the target and other classes, then it
-can be harder to test the behavior of the class and debug problems. It will
-typically require a deeper understanding of the potential interactions that
-objects of the class can have with the rest of the system.
-<p/>
-RFC is defined as the sum of NLM and NRM for the class.  The local methods
-include all of the public, protected, package and private methods, but not
-methods declared only in a superclass.
-
-<a name="DAC"/>
-<h3>Data Abstraction Coupling - DAC</h3>
-
-DAC is defined for classes and interfaces.  It counts the number of reference
-types that are used in the field declarations of the class or interface.  The
-component types of arrays are also counted.  Any field with a type that is
-either a supertype or a subtype of the class is not counted.
-
-<a name="FANOUT"/>
-<h3>Fan Out - FANOUT</h3>
-
-FANOUT is defined for classes and interfaces, constructors and methods. It
-counts the number of reference types that are used in:
-<ul>
-<li>field declarations;</li>
-<li>formal parameters and return types;</li>
-<li>throws declarations;</li>
-<li>local variables.</li>
-</ul>
-
-The component types of arrays are also counted. Any type that is either a
-supertype or a subtype of the class is not counted.
-
-<a name="CBO"/>
-<h3>Coupling Between Objects - CBO</h3>
-
-When one object or class uses another object or class they are said to be
-coupled. One major source of coupling is that between a superclass and a
-subclass. A coupling is also introduced when a method or field in another
-class is accessed, or when an object of another class is passed into or out
-of a method invocation. Coupling Between Objects is a measure of the
-non-inheritance coupling between two objects.
-<p/>
-A high value of coupling reduces the modularity of the class and makes
-reuse more difficult. The more independent a class is the more likely it is
-that it will be possible to reuse it in another part of the system. When a
-class is coupled to another class it becomes sensitive to changes in that
-class, thereby making maintenance for difficult. In addition, a class that is
-overly dependent on other classes can be difficult to understand and test in
-isolation.
-<p/>
-CBO is defined for classes and interfaces, constructors and methods. It
-counts the number of reference types that are used in:
-<ul>
-<li>field declarations</li>
-<li>formal parameters and return types</li>
-<li>throws declarations</li>
-<li>local variables</li>
-</ul>
-
-It also counts:
-<ul>
-<li>types from which field and method selections are made</li>
-</ul>
-
-The component types of arrays are also counted. Any type that is either a
-supertype or a subtype of the class is not counted.
-
-<a name="LCOM"/>
-<h3>Lack of Cohesion Of Methods - LCOM</h3>
-
-The cohesion of a class is the degree to which its methods are related to
-each other. It is determined by examining the pattern of state variable
-accesses within the set of methods. If all the methods access the same state
-variables then they have high cohesion; if they access disjoint sets of
-variables then the cohesion is low. An extreme example of low cohesion
-would be if none of the methods accessed any of the state variables.
-
-If a class exhibits low method cohesion it indicates that the design of the
-class has probably been partitioned incorrectly, and could benefit by being
-split into more classes with individually higher cohesion. On the other
-hand, a high value of cohesion (a low lack of cohesion) implies that the
-class is well designed. A cohesive class will tend to provide a high degree
-of encapsulation, whereas a lack of cohesion decreases encapsulation and
-increases complexity.
-<p/>
-Another form of cohesion that is useful for Java programs is cohesion
-between nested and enclosing classes. A nested class that has very low
-cohesion with its enclosing class would probably better designed as a peer
-class rather than a nested class.
-<p/>
-LCOM is defined for classes. Operationally, LCOM takes each pair of
-methods in the class and determines the set of fields they each access. If
-they have disjoint sets of field accesses increase the count P by one. If they
-share at least one field access then increase Q by one. After considering
-each pair of methods,
-LCOM = (P > Q) ? (P - Q) : 0
-<p/>
-Indirect access to fields via local methods can be considered by setting a
-metric configuration parameter.
-
-<a name="NOC"/>
-<h3>Number Of Classes - NOC</h3>
-
-The overall size of the system can be estimated by calculating the number
-of classes it contains. A large system with more classes is more complex
-than a smaller one because the number of potential interactions between
-objects is higher. This reduces the comprehensibility of the system which
-in turn makes it harder to test, debug and maintain.
-<p/>
-If the number of classes in the system can be projected during the initial
-design phase of the project it can serve as a base for estimating the total
-effort and cost of developing, debugging and maintaining the system.
-<p/>
-The NOC metric can also usefully be applied at the package and class level
-as well as the total system.
-<p/>
-NOCL is defined for class and interfaces. It counts the number of classes or
-interfaces that are declared. This is usually 1, but nested class declarations
-will increase this number.
-</body>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin-left: 10;
-      margin-right: 10;
-      font:normal 80% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    .a td {
-      background: #efefef;
-    }
-    .b td {
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      font-weight:bold;
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      font-size:100%;
-      border: none
-    }
-    table.log tr td, tr th {
-
-    }
-    h2 {
-      font-weight:bold;
-      font-size:140%;
-      margin-bottom: 5;
-    }
-    h3 {
-      font-size:100%;
-      font-weight:bold;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-    .Error {
-      font-weight:bold; color:red;
-    }
-
-</xsl:template>
-
-<!-- print the metrics of the class -->
-<xsl:template match="class" mode="class.details">
-  <!--xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/-->
-  <xsl:variable name="package.name" select="@package"/>
-  <HTML>
-    <HEAD>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="$package.name"/>
-      </xsl:call-template>
-    </HEAD>
-    <BODY>
-      <xsl:call-template name="pageHeader"/>
-
-      <H3>Class <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
-      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-        <xsl:call-template name="all.metrics.header"/>
-        <xsl:apply-templates select="." mode="print.metrics"/>
-      </table>
-
-      <H3>Methods</H3>
-      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-        <xsl:call-template name="method.metrics.header"/>
-        <xsl:apply-templates select="method" mode="print.metrics"/>
-      </table>
-
-      <xsl:call-template name="pageFooter"/>
-    </BODY>
-  </HTML>
-</xsl:template>
-
-
-<!-- list of classes in a package -->
-<xsl:template match="package" mode="classes.list">
-  <HTML>
-    <HEAD>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="@name"/>
-      </xsl:call-template>
-    </HEAD>
-    <BODY>
-      <table width="100%">
-        <tr>
-          <td nowrap="nowrap">
-            <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
-          </td>
-        </tr>
-      </table>
-
-      <H2>Classes</H2>
-      <TABLE WIDTH="100%">
-        <!-- xalan-nodeset:nodeset for Xalan 1.2.2 -->
-            <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
-                <xsl:sort select="@name"/>
-          <tr>
-            <td nowrap="nowrap">
-              <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-            </td>
-          </tr>
-            </xsl:for-each>
-      </TABLE>
-    </BODY>
-  </HTML>
-</xsl:template>
-
-
-<!--
-  Creates an all-classes.html file that contains a link to all package-summary.html
-  on each class.
--->
-<xsl:template match="metrics" mode="all.classes">
-  <html>
-    <head>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="''"/>
-      </xsl:call-template>
-    </head>
-    <body>
-      <h2>Classes</h2>
-      <table width="100%">
-          <xsl:for-each select="$doctree/classes/class">
-              <xsl:sort select="@name"/>
-              <xsl:apply-templates select="." mode="all.classes"/>
-          </xsl:for-each>
-      </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="class" mode="all.classes">
-    <xsl:variable name="package.name" select="@package"/>
-    <xsl:variable name="class.name" select="@name"/>
-  <tr>
-    <td nowrap="nowrap">
-      <a target="classFrame">
-        <xsl:attribute name="href">
-          <xsl:if test="not($package.name='unnamed package')">
-            <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-          </xsl:if>
-          <xsl:value-of select="$class.name"/><xsl:text>.html</xsl:text>
-        </xsl:attribute>
-        <xsl:value-of select="$class.name"/>
-      </a>
-    </td>
-  </tr>
-</xsl:template>
-
-<!--
-  Creates an html file that contains a link to all package-summary.html files on
-  each package existing on testsuites.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="metrics" mode="all.packages">
-  <html>
-    <head>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="./package/@name"/>
-      </xsl:call-template>
-    </head>
-    <body>
-      <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-      <h2>Packages</h2>
-        <table width="100%">
-          <xsl:apply-templates select=".//package[not(./@name = 'unnamed package')]" mode="all.packages">
-            <xsl:sort select="@name"/>
-          </xsl:apply-templates>
-        </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="package" mode="all.packages">
-  <tr>
-    <td nowrap="nowrap">
-      <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
-        <xsl:value-of select="@name"/>
-      </a>
-    </td>
-  </tr>
-</xsl:template>
-
-
-<xsl:template match="metrics" mode="overview.packages">
-  <html>
-    <head>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="''"/>
-      </xsl:call-template>
-    </head>
-    <body onload="open('allclasses-frame.html','classListFrame')">
-    <xsl:call-template name="pageHeader"/>
-    <h3>Summary</h3>
-    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-    <tr>
-      <th><a href="metrics-reference.html#V(G)">V(G)</a></th>
-      <th><a href="metrics-reference.html#LOC">LOC</a></th>
-      <th><a href="metrics-reference.html#DIT">DIT</a></th>
-      <th><a href="metrics-reference.html#NOA">NOA</a></th>
-      <th><a href="metrics-reference.html#NRM">NRM</a></th>
-      <th><a href="metrics-reference.html#NLM">NLM</a></th>
-      <th><a href="metrics-reference.html#WMC">WMC</a></th>
-      <th><a href="metrics-reference.html#RFC">RFC</a></th>
-      <th><a href="metrics-reference.html#DAC">DAC</a></th>
-      <th><a href="metrics-reference.html#FANOUT">FANOUT</a></th>
-      <th><a href="metrics-reference.html#CBO">CBO</a></th>
-      <th><a href="metrics-reference.html#LCOM">LCOM</a></th>
-      <th><a href="metrics-reference.html#NOCL">NOCL</a></th>
-    </tr>
-    <xsl:apply-templates select="." mode="print.metrics"/>
-    </table>
-    <table border="0" width="100%">
-    <tr>
-    <td style="text-align: justify;">
-    Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
-    various kind of complexity. Complexity is a common source of problems and defects in software.
-    High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
-    a program.
-    <p/>
-    The primary use of metrics is to focus your attention on those parts of code that potentially are
-    complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
-    actions.
-    For additional information about metrics and their meaning, please consult
-    Metamata Metrics manual.
-    </td>
-    </tr>
-    </table>
-
-    <h3>Packages</h3>
-    <table border="0" cellpadding="5" cellspacing="2" width="100%">
-      <xsl:call-template name="all.metrics.header"/>
-      <xsl:for-each select=".//package[not(@name = 'unnamed package')]">
-        <xsl:sort select="@name" order="ascending"/>
-        <xsl:apply-templates select="." mode="print.metrics"/>
-      </xsl:for-each>
-    </table>
-    <!-- @bug there could some classes at this level (classes in unnamed package) -->
-    <xsl:call-template name="pageFooter"/>
-    </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="package" mode="package.summary">
-  <HTML>
-    <HEAD>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="@name"/>
-      </xsl:call-template>
-    </HEAD>
-    <body onload="open('package-frame.html','classListFrame')">
-      <xsl:call-template name="pageHeader"/>
-      <!-- create an anchor to this package name -->
-      <h3>Package <xsl:value-of select="@name"/></h3>
-
-      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-        <xsl:call-template name="all.metrics.header"/>
-        <xsl:apply-templates select="." mode="print.metrics"/>
-      </table>
-
-      <table border="0" width="100%">
-      <tr>
-      <td style="text-align: justify;">
-      Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
-      various kind of complexity. Complexity is a common source of problems and defects in software.
-      High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
-      a program.
-      <p/>
-      The primary use of metrics is to focus your attention on those parts of code that potentially are
-      complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
-      actions.
-      For additional information about metrics and their meaning, please consult
-      Metamata Metrics manual.
-      </td>
-      </tr>
-      </table>
-
-      <xsl:variable name="classes-in-package" select="$doctree/classes/class[@package = current()/@name]"/>
-      <xsl:if test="count($classes-in-package) > 0">
-        <H3>Classes</H3>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-          <xsl:call-template name="all.metrics.header"/>
-          <xsl:for-each select="$classes-in-package">
-                <xsl:sort select="@name"/>
-                <xsl:apply-templates select="." mode="print.metrics"/>
-          </xsl:for-each>
-        </table>
-      </xsl:if>
-
-      <xsl:call-template name="pageFooter"/>
-    </body>
-  </HTML>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-  <xsl:param name="path"/>
-  <xsl:if test="contains($path,'.')">
-    <xsl:text>../</xsl:text>
-    <xsl:call-template name="path">
-      <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-    </xsl:call-template>
-  </xsl:if>
-  <xsl:if test="not(contains($path,'.')) and not($path = '')">
-    <xsl:text>../</xsl:text>
-  </xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-  <xsl:param name="package.name"/>
-  <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
-</xsl:template>
-
-
-<!-- Page Header -->
-<xsl:template name="pageHeader">
-
-  <!-- jakarta logo -->
-  <table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td class="bannercell" rowspan="2">
-      <a href="http://jakarta.apache.org/">
-      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-      </a>
-    </td>
-    <td style="text-align:right"><h2>Source Code Metrics</h2></td>
-    </tr>
-    <tr>
-    <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Metrics</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-    </tr>
-  </table>
-  <hr size="1"/>
-</xsl:template>
-
-<!-- Page Footer -->
-<xsl:template name="pageFooter">
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="all.metrics.header">
-  <tr>
-    <th width="80%">Name</th>
-    <th nowrap="nowrap">V(G)</th>
-    <th>LOC</th>
-    <th>DIT</th>
-    <th>NOA</th>
-    <th>NRM</th>
-    <th>NLM</th>
-    <th>WMC</th>
-    <th>RFC</th>
-    <th>DAC</th>
-    <th>FANOUT</th>
-    <th>CBO</th>
-    <th>LCOM</th>
-    <th>NOCL</th>
-  </tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="method.metrics.header">
-  <tr>
-    <th width="80%">Name</th>
-    <th nowrap="nowrap">V(G)</th>
-    <th>LOC</th>
-    <th>FANOUT</th>
-    <th>CBO</th>
-  </tr>
-</xsl:template>
-
-<!-- method information -->
-<xsl:template match="method" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-    <td><xsl:apply-templates select="@name"/></td>
-    <td><xsl:apply-templates select="@vg"/></td>
-    <td><xsl:apply-templates select="@loc"/></td>
-    <td><xsl:apply-templates select="@fanout"/></td>
-    <td><xsl:apply-templates select="@cbo"/></td>
-  </tr>
-</xsl:template>
-
-<!-- class information -->
-<xsl:template match="class" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-    <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
-    <td><xsl:apply-templates select="@vg"/></td>
-    <td><xsl:apply-templates select="@loc"/></td>
-    <td><xsl:apply-templates select="@dit"/></td>
-    <td><xsl:apply-templates select="@noa"/></td>
-    <td><xsl:apply-templates select="@nrm"/></td>
-    <td><xsl:apply-templates select="@nlm"/></td>
-    <td><xsl:apply-templates select="@wmc"/></td>
-    <td><xsl:apply-templates select="@rfc"/></td>
-    <td><xsl:apply-templates select="@dac"/></td>
-    <td><xsl:apply-templates select="@fanout"/></td>
-    <td><xsl:apply-templates select="@cbo"/></td>
-    <td><xsl:apply-templates select="@lcom"/></td>
-    <td><xsl:apply-templates select="@nocl"/></td>
-  </tr>
-</xsl:template>
-
-<xsl:template match="file|package" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-    <td>
-    <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
-    <xsl:value-of select="@name"/>
-    </a>
-    </td>
-    <td><xsl:apply-templates select="@vg"/></td>
-    <td><xsl:apply-templates select="@loc"/></td>
-    <td><xsl:apply-templates select="@dit"/></td>
-    <td><xsl:apply-templates select="@noa"/></td>
-    <td><xsl:apply-templates select="@nrm"/></td>
-    <td><xsl:apply-templates select="@nlm"/></td>
-    <td><xsl:apply-templates select="@wmc"/></td>
-    <td><xsl:apply-templates select="@rfc"/></td>
-    <td><xsl:apply-templates select="@dac"/></td>
-    <td><xsl:apply-templates select="@fanout"/></td>
-    <td><xsl:apply-templates select="@cbo"/></td>
-    <td><xsl:apply-templates select="@lcom"/></td>
-    <td><xsl:apply-templates select="@nocl"/></td>
-  </tr>
-</xsl:template>
-
-<xsl:template match="metrics" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-      <!-- the global metrics is the top package metrics -->
-    <td><xsl:apply-templates select="./package/@vg"/></td>
-    <td><xsl:apply-templates select="./package/@loc"/></td>
-    <td><xsl:apply-templates select="./package/@dit"/></td>
-    <td><xsl:apply-templates select="./package/@noa"/></td>
-    <td><xsl:apply-templates select="./package/@nrm"/></td>
-    <td><xsl:apply-templates select="./package/@nlm"/></td>
-    <td><xsl:apply-templates select="./package/@wmc"/></td>
-    <td><xsl:apply-templates select="./package/@rfc"/></td>
-    <td><xsl:apply-templates select="./package/@dac"/></td>
-    <td><xsl:apply-templates select="./package/@fanout"/></td>
-    <td><xsl:apply-templates select="./package/@cbo"/></td>
-    <td><xsl:apply-templates select="./package/@lcom"/></td>
-    <td><xsl:apply-templates select="./package/@nocl"/></td>
-  </tr>
-</xsl:template>
-
-<!-- alternated row style -->
-<xsl:template name="alternate-row">
-<xsl:attribute name="class">
-  <xsl:if test="position() mod 2 = 1">a</xsl:if>
-  <xsl:if test="position() mod 2 = 0">b</xsl:if>
-</xsl:attribute>
-</xsl:template>
-
-
-<!-- how to display the metrics with their max value -->
-<!-- @todo the max values must be external to the xsl -->
-
-  <xsl:template match="@vg">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$vg.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@loc">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$loc.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@dit">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$dit.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@noa">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$noa.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@nrm">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$nrm.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@nlm">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$nlm.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@wmc">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$wmc.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@rfc">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$rfc.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@dac">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$dac.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@fanout">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$fanout.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@cbo">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$cbo.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@lcom">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$lcom.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@nocl">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$nocl.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template name="display-value">
-    <xsl:param name="value"/>
-    <xsl:param name="max"/>
-    <xsl:if test="$value > $max">
-      <xsl:attribute name="class">Error</xsl:attribute>
-    </xsl:if>
-    <xsl:value-of select="$value"/>
-  </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/tagdiff.xsl b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/tagdiff.xsl
deleted file mode 100644
index 5d430a7..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/etc/tagdiff.xsl
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- a stylesheet to display changelogs ala netbeans -->
-<xsl:stylesheet
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    version="1.0">
-  <xsl:param name="title"/>
-  <xsl:param name="module"/>
-  <xsl:param name="cvsweb"/>
-
-  <xsl:output method="html" indent="yes"/>
-
-  <!-- Copy standard document elements.  Elements that
-       should be ignored must be filtered by apply-templates
-       tags. -->
-  <xsl:template match="*">
-    <xsl:copy>
-      <xsl:copy-of select="attribute::*[. != '']"/>
-      <xsl:apply-templates/>
-    </xsl:copy>
-  </xsl:template>
-
-  <xsl:template match="tagdiff">
-    <html>
-      <head>
-        <title><xsl:value-of select="$title"/></title>
-        <style type="text/css">
-          body, p {
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          color:#000000;
-          }
-	  .dateAndAuthor {
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          font-weight: bold;
-          text-align:left;
-          background:#a6caf0;
-	  }
-          tr, td{
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          background:#eeeee0;
-          }	  
-	  </style> 
-      </head>
-      <body link="#000000" alink="#000000" vlink="#000000" text="#000000">       
-          <h1>
-            <a name="top"><xsl:value-of select="$title"/></a>
-          </h1>
-          Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and
-			<xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/>
-          <p align="right">Designed for use with <a href="http://ant.apache.org/">Ant</a>.</p>
-          <hr size="2"/>
-	<a name="TOP"/>
-	<table width="100%">
-		<tr>
-			<td align="right">
-				<a href="#New">New Files</a> |
-				<a href="#Modified">Modified Files</a> |
-				<a href="#Removed">Removed Files</a>
-			</td>
-		</tr>
-	</table>
-        <table border="0" width="100%" cellpadding="3" cellspacing="1">
-		<xsl:call-template name="show-entries">
-			<xsl:with-param name="title">New Files</xsl:with-param>
-			<xsl:with-param name="anchor">New</xsl:with-param>
-			<xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/>
-		</xsl:call-template>
-
-		<xsl:call-template name="show-entries">
-			<xsl:with-param name="title">Modified Files</xsl:with-param>
-			<xsl:with-param name="anchor">Modified</xsl:with-param>
-			<xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/>
-		</xsl:call-template>
-
-		<!-- change to entries select to address bug #36827 -->
-		<xsl:call-template name="show-entries">
-			<xsl:with-param name="title">Removed Files</xsl:with-param>
-			<xsl:with-param name="anchor">Removed</xsl:with-param>
-			<xsl:with-param name="entries" select=".//entry[not(file/revision)][file/prevrevision]"/>
-		</xsl:call-template>
-        </table>
-        
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template name="show-entries">
-	<xsl:param name="title"/>
-	<xsl:param name="anchor"/>
-	<xsl:param name="entries"/>
-	<tr>
-		<td colspan="2" class="dateAndAuthor">
-			<a>
-				<xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute>
-				<xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries
-			</a>
-			<a href="#TOP">(back to top)</a>
-		</td>
-	</tr>
-	<tr>
-		<td width="20">
-			<xsl:text>    </xsl:text>
-		</td>
-		<td>
-		        <ul>
-				<xsl:apply-templates select="$entries"/>
-			</ul>
-		</td>
-	</tr>
-  </xsl:template>  
-
-  <xsl:template match="entry">
-	<xsl:apply-templates select="file"/>
-  </xsl:template>
-
-  <xsl:template match="date">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="time">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="author">
-    <i>
-      <a>
-        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
-        <xsl:value-of select="."/>
-      </a>
-    </i>
-  </xsl:template>
-
-  <xsl:template match="file">
-    <li>
-      <a target="_new">
-        <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute>
-        <xsl:value-of select="name" />
-      </a>
-      <xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0">
-      <xsl:text> </xsl:text>
-      <a target="_new">
-        <xsl:choose>
-          <xsl:when test="string-length(prevrevision) = 0 ">
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/>&diff_format=h</xsl:attribute>
-          </xsl:otherwise>
-        </xsl:choose> (<xsl:if test="count(prevrevision) > 0"> <xsl:value-of select="prevrevision"/> --> </xsl:if> <xsl:value-of select="revision"/>)
-      </a>
-      </xsl:if>
-    </li>
-  </xsl:template>
-
-  <!-- Any elements within a msg are processed,
-       so that we can preserve HTML tags. -->
-  <xsl:template match="msg">
-    <b><xsl:apply-templates/></b>
-  </xsl:template>
-  
-</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/plugin.properties b/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/plugin.properties
deleted file mode 100644
index 658714d..0000000
--- a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Apache Ant
-providerName = Eclipse Orbit
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/ECLIPSEF.RSA b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..b9fa242
Binary files /dev/null and b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/ECLIPSEF.RSA differ
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/ECLIPSEF.SF b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..2cef7a9
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/ECLIPSEF.SF
@@ -0,0 +1,143 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: 5qcdbN+Zu4xlonmZNbpSRAcSWgc=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: XvqHfuBjHWjSfOONdfd9/8zjfQo=
+
+Name: lib/ant-jmf.jar
+SHA1-Digest: UbcW+ksShEmXIUcQa5S95dvKVRI=
+
+Name: lib/ant-apache-bcel.jar
+SHA1-Digest: tbJ3kPD68JXpKAq9ylYx+VO+YzM=
+
+Name: etc/mmetrics-frames.xsl
+SHA1-Digest: uY7jITIeh5zWGHqitcCH+BXFi9Y=
+
+Name: about_files/SAX-LICENSE.html
+SHA1-Digest: wfcxz3PMKKjNrpG0aXSbqRs/EEk=
+
+Name: etc/tagdiff.xsl
+SHA1-Digest: SRM+krXj9faGqiSbtW4EoDiwb+s=
+
+Name: OSGI-INF/l10n/bundle.properties
+SHA1-Digest: SbtnFwBsTocONv+0XWtS0Aui4aY=
+
+Name: lib/ant-apache-oro.jar
+SHA1-Digest: RNKQUg3NrX2kiZjPlPMV1GKqGTg=
+
+Name: lib/ant.jar
+SHA1-Digest: CuF+Gzo/CDpbCM/xIH4L33hFSp4=
+
+Name: lib/ant-jsch.jar
+SHA1-Digest: Sorqzp+yadcU0UJRFGMhISVAVe8=
+
+Name: about_files/ASL-LICENSE-2.0.txt
+SHA1-Digest: rwxLKF3abAAfm7UMkgtQnA9n+jU=
+
+Name: lib/ant-netrexx.jar
+SHA1-Digest: UtFq/iGc2VswtDMm7fOSQQAuY38=
+
+Name: plugin.properties
+SHA1-Digest: lAjq1ZqcPElR/8nFFtA+YyHitzo=
+
+Name: lib/ant-jai.jar
+SHA1-Digest: ZzCI28+CBQaJpD/T3yFPFFBeIVs=
+
+Name: lib/ant-jdepend.jar
+SHA1-Digest: 1/3ekAGQZrH3QNgCBbuTFVnX+lM=
+
+Name: lib/ant-apache-bsf.jar
+SHA1-Digest: fVbNlVOwMi79QcKWJUev9lD5OUc=
+
+Name: etc/coverage-frames.xsl
+SHA1-Digest: Gm3habNRgdpkq7h0e54JskKlyLs=
+
+Name: about_files/LICENSE
+SHA1-Digest: WURQbjdp+UeDnBBRMfdLZPsudhw=
+
+Name: lib/ant-apache-log4j.jar
+SHA1-Digest: b3E7Alczb5eoUnIjEoC1jMn0fB4=
+
+Name: lib/ant-apache-resolver.jar
+SHA1-Digest: DyLHejoMfGuYn8sTAwndGdzU6Cc=
+
+Name: etc/checkstyle/checkstyle-frames.xsl
+SHA1-Digest: E90g3bhhw2/jxZu2OKjjT0CCGE8=
+
+Name: about_files/NOTICE
+SHA1-Digest: Gx0bQjD9abtB8UfkZy/EG2p6jmk=
+
+Name: lib/ant-junit4.jar
+SHA1-Digest: V1wuSBsN5DbG6C9RRy6vNLwP4uI=
+
+Name: etc/junit-frames.xsl
+SHA1-Digest: md5CK99JRxedw9KxLKj0oBAQmsE=
+
+Name: etc/junit-noframes.xsl
+SHA1-Digest: gSonXHTWIi/n6tGFX7bBf1OnIXc=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
+
+Name: lib/ant-apache-regexp.jar
+SHA1-Digest: Zl2fYJ/ki77udi2j2yLXqaoG0DI=
+
+Name: etc/checkstyle/checkstyle-text.xsl
+SHA1-Digest: k0Lt9eVayUNooipspvmFOL3Pnq8=
+
+Name: lib/ant-antlr.jar
+SHA1-Digest: JHADSrsTEVWd8U0lwNkwDBiGvRQ=
+
+Name: lib/ant-junit.jar
+SHA1-Digest: 7tvFW2XO5pJq3oouw7u1YRNh318=
+
+Name: etc/log.xsl
+SHA1-Digest: wERs+JIuI7AqhXfOfJeEspw0988=
+
+Name: about.html
+SHA1-Digest: jDTkyEWRRCxVb2VP5IVO8g8KIxI=
+
+Name: etc/maudit-frames.xsl
+SHA1-Digest: ALKNWC8rT5LzA6OX8H49bRV8T3Q=
+
+Name: about_files/DOM-LICENSE.html
+SHA1-Digest: SjQGRnT57q7bMbrYLDqao3XYtr8=
+
+Name: etc/junit-frames-xalan1.xsl
+SHA1-Digest: MmPga2CFObtLV5UX3ZseR4WCxQI=
+
+Name: lib/ant-testutil.jar
+SHA1-Digest: XYaVCDSh9e2+MVPOyubztWoBT8I=
+
+Name: lib/ant-commons-net.jar
+SHA1-Digest: R2Fj6TOSo4sCom2+KJoANVGKDGM=
+
+Name: lib/ant-javamail.jar
+SHA1-Digest: oRGkU8nktP4/9lQjP47JhLYNh/E=
+
+Name: lib/ant-commons-logging.jar
+SHA1-Digest: 3jjuvaFKm+mcNuGGHJlxaxUlSKM=
+
+Name: etc/ant-bootstrap.jar
+SHA1-Digest: 7j2bLnXfpY8JgGr5dMdg1OUy6F4=
+
+Name: etc/jdepend-frames.xsl
+SHA1-Digest: eH9sUSIIShS+gY8MVO6SeOS/p7E=
+
+Name: lib/ant-swing.jar
+SHA1-Digest: WtG9vUTJCiDWjXDMuk9i2GEExUE=
+
+Name: etc/checkstyle/checkstyle-xdoc.xsl
+SHA1-Digest: 6CpvgWQX0oP7GBNUrADbtW7bA6Y=
+
+Name: etc/changelog.xsl
+SHA1-Digest: BpCViFm/89N/0Ona5MJCljwxgaA=
+
+Name: lib/ant-launcher.jar
+SHA1-Digest: 0M1p8TOzAp3MmFLGgTeCgnhQ5B8=
+
+Name: etc/jdepend.xsl
+SHA1-Digest: gLN/5j5Db1raGOXaWj3JeZ1tOsM=
+
+Name: lib/ant-apache-xalan2.jar
+SHA1-Digest: emdwaTUznI6nX2CxCyO2PgPPUBg=
+
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/MANIFEST.MF b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5be67ff
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/MANIFEST.MF
@@ -0,0 +1,196 @@
+Manifest-Version: 1.0
+Bundle-ClassPath: lib/ant-antlr.jar,lib/ant-apache-bcel.jar,lib/ant-ap
+ ache-bsf.jar,lib/ant-apache-log4j.jar,lib/ant-apache-oro.jar,lib/ant-
+ apache-regexp.jar,lib/ant-apache-resolver.jar,lib/ant-apache-xalan2.j
+ ar,lib/ant-commons-logging.jar,lib/ant-commons-net.jar,lib/ant-jai.ja
+ r,lib/ant-javamail.jar,lib/ant-jdepend.jar,lib/ant-jmf.jar,lib/ant-js
+ ch.jar,lib/ant-junit.jar,lib/ant-junit4.jar,lib/ant-launcher.jar,lib/
+ ant-netrexx.jar,lib/ant-swing.jar,lib/ant-testutil.jar,lib/ant.jar
+Bundle-Vendor: %Bundle-Vendor
+Bundle-RequiredExecutionEnvironment: J2SE-1.2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.apache.ant;singleton:=true
+Eclipse-SourceReferences: scm:cvs:pserver:dev.eclipse.org:/cvsroot/too
+ ls:org.eclipse.orbit/org.apache.ant;tag=v20110505-1300
+Require-Bundle: org.eclipse.osgi
+Export-Package: org.apache.tools.ant,org.apache.tools.ant.dispatch,org
+ .apache.tools.ant.filters,org.apache.tools.ant.filters.util,org.apach
+ e.tools.ant.helper,org.apache.tools.ant.input,org.apache.tools.ant.la
+ unch,org.apache.tools.ant.listener,org.apache.tools.ant.loader,org.ap
+ ache.tools.ant.property,org.apache.tools.ant.taskdefs,org.apache.tool
+ s.ant.taskdefs.compilers,org.apache.tools.ant.taskdefs.condition,org.
+ apache.tools.ant.taskdefs.cvslib,org.apache.tools.ant.taskdefs.email,
+ org.apache.tools.ant.taskdefs.optional,org.apache.tools.ant.taskdefs.
+ optional.ccm,org.apache.tools.ant.taskdefs.optional.clearcase,org.apa
+ che.tools.ant.taskdefs.optional.depend,org.apache.tools.ant.taskdefs.
+ optional.depend.constantpool,org.apache.tools.ant.taskdefs.optional.e
+ jb,org.apache.tools.ant.taskdefs.optional.extension,org.apache.tools.
+ ant.taskdefs.optional.extension.resolvers,org.apache.tools.ant.taskde
+ fs.optional.i18n,org.apache.tools.ant.taskdefs.optional.image,org.apa
+ che.tools.ant.taskdefs.optional.j2ee,org.apache.tools.ant.taskdefs.op
+ tional.javacc,org.apache.tools.ant.taskdefs.optional.javah,org.apache
+ .tools.ant.taskdefs.optional.jdepend,org.apache.tools.ant.taskdefs.op
+ tional.jlink,org.apache.tools.ant.taskdefs.optional.jsp,org.apache.to
+ ols.ant.taskdefs.optional.jsp.compilers,org.apache.tools.ant.taskdefs
+ .optional.junit,org.apache.tools.ant.taskdefs.optional.native2ascii,o
+ rg.apache.tools.ant.taskdefs.optional.net,org.apache.tools.ant.taskde
+ fs.optional.perforce,org.apache.tools.ant.taskdefs.optional.pvcs,org.
+ apache.tools.ant.taskdefs.optional.script,org.apache.tools.ant.taskde
+ fs.optional.sos,org.apache.tools.ant.taskdefs.optional.sound,org.apac
+ he.tools.ant.taskdefs.optional.splash,org.apache.tools.ant.taskdefs.o
+ ptional.ssh,org.apache.tools.ant.taskdefs.optional.testing,org.apache
+ .tools.ant.taskdefs.optional.unix,org.apache.tools.ant.taskdefs.optio
+ nal.vss,org.apache.tools.ant.taskdefs.optional.windows,org.apache.too
+ ls.ant.taskdefs.rmic,org.apache.tools.ant.types,org.apache.tools.ant.
+ types.mappers,org.apache.tools.ant.types.optional,org.apache.tools.an
+ t.types.optional.depend,org.apache.tools.ant.types.optional.image,org
+ .apache.tools.ant.types.resolver,org.apache.tools.ant.types.resources
+ ,org.apache.tools.ant.types.resources.comparators,org.apache.tools.an
+ t.types.resources.selectors,org.apache.tools.ant.types.selectors,org.
+ apache.tools.ant.types.selectors.modifiedselector,org.apache.tools.an
+ t.types.spi,org.apache.tools.ant.util,org.apache.tools.ant.util.depen
+ d,org.apache.tools.ant.util.depend.bcel,org.apache.tools.ant.util.fac
+ ade,org.apache.tools.ant.util.java15,org.apache.tools.ant.util.option
+ al,org.apache.tools.ant.util.regexp,org.apache.tools.bzip2,org.apache
+ .tools.mail,org.apache.tools.tar,org.apache.tools.zip
+Bundle-Version: 1.8.2.v20110505-1300
+Bundle-ManifestVersion: 2
+
+Name: lib/ant-jmf.jar
+SHA1-Digest: 4XTIeiybkrnTWf3tIpvEv6crdEc=
+
+Name: lib/ant-apache-bcel.jar
+SHA1-Digest: sI/oavxhZYjgg+astBIx0P2Ydac=
+
+Name: about_files/SAX-LICENSE.html
+SHA1-Digest: piMH5omfqbi7lC6boj3RJCIzHGk=
+
+Name: etc/mmetrics-frames.xsl
+SHA1-Digest: ANFdCjWYJHjShgRgwUK/dsGRb5E=
+
+Name: etc/tagdiff.xsl
+SHA1-Digest: sfSzexHzWhEnzgaKBk/5d8jmiXM=
+
+Name: OSGI-INF/l10n/bundle.properties
+SHA1-Digest: Gvp9C/3B+pTm68y7Qfw9HA4zJGY=
+
+Name: lib/ant.jar
+SHA1-Digest: bq/bqNAOfW5iYSvlMqTTQFUXsAU=
+
+Name: lib/ant-apache-oro.jar
+SHA1-Digest: QF2yCHxJZD54rWwFY00fj2e+E6U=
+
+Name: lib/ant-jsch.jar
+SHA1-Digest: WIWsF5zz4CPy6Azi6p+Xkw3aiqg=
+
+Name: lib/ant-netrexx.jar
+SHA1-Digest: 5misiQIvC4eEHRlltnKSU9Fk+qU=
+
+Name: about_files/ASL-LICENSE-2.0.txt
+SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
+
+Name: plugin.properties
+SHA1-Digest: rUeBSrYaj7Yj+sa6iRGcSwD0lpg=
+
+Name: lib/ant-jai.jar
+SHA1-Digest: yu/onBG5/QP+xZwsXfxD6yz32pM=
+
+Name: lib/ant-jdepend.jar
+SHA1-Digest: AwsgpuplbKOan4FHsgnLHseCOAU=
+
+Name: lib/ant-apache-bsf.jar
+SHA1-Digest: Vsbtj4QOjs+frvOdKk8Dg8aMq6o=
+
+Name: etc/coverage-frames.xsl
+SHA1-Digest: JHDppTq5SfIuV1GC/wXaueDvT/Q=
+
+Name: about_files/LICENSE
+SHA1-Digest: UuIC0ICov6vx3JdTJsMcRm5XaPA=
+
+Name: lib/ant-apache-log4j.jar
+SHA1-Digest: +WM8xm0VJuCjMdYrso6ABYHTSKM=
+
+Name: lib/ant-apache-resolver.jar
+SHA1-Digest: l1lBn9skcCWw/RrpmI3s3EfY7ZU=
+
+Name: etc/checkstyle/checkstyle-frames.xsl
+SHA1-Digest: laoNV00T2H6nt+mbBJ0OV5v9QXs=
+
+Name: about_files/NOTICE
+SHA1-Digest: UEEpmbTrBBVn1/ZzHrPcDMN32KI=
+
+Name: lib/ant-junit4.jar
+SHA1-Digest: 0lhYn9Avy9VeJ8m/+PP9JODyw6g=
+
+Name: etc/junit-frames.xsl
+SHA1-Digest: f6SbMZ9ifmAf7jaIbA1QAiw+B7M=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
+
+Name: etc/junit-noframes.xsl
+SHA1-Digest: C1FRPEArSG+umNklrEBlPtwCm78=
+
+Name: lib/ant-apache-regexp.jar
+SHA1-Digest: 12HU5kz10VisHJ8e8GUria5HDKw=
+
+Name: etc/checkstyle/checkstyle-text.xsl
+SHA1-Digest: M2Mfi0GqTpCMLjuI5zXtGn9bJNY=
+
+Name: lib/ant-antlr.jar
+SHA1-Digest: tZXIKsFmMM8q3eN8SvOSJIQ2WXE=
+
+Name: lib/ant-junit.jar
+SHA1-Digest: garc72OE4vUH7PajdnbJU2oeH2A=
+
+Name: about.html
+SHA1-Digest: +xKddo86MpaguXP67tAuODwLjkI=
+
+Name: etc/log.xsl
+SHA1-Digest: GTQQ3CQPmTcir+XasJVs+gPOqwk=
+
+Name: about_files/DOM-LICENSE.html
+SHA1-Digest: yPiF8tE2Hke5piMIdzyuu4VNSjk=
+
+Name: etc/maudit-frames.xsl
+SHA1-Digest: aMXYnmnDX3WL04KbvCeXl1L2dF4=
+
+Name: lib/ant-testutil.jar
+SHA1-Digest: rvslwZIazGgB91rMx5YRE7Z8B1M=
+
+Name: etc/junit-frames-xalan1.xsl
+SHA1-Digest: dUVqi2d3KSiyo8E+KL0mq+ZawZE=
+
+Name: lib/ant-commons-net.jar
+SHA1-Digest: aZrJp6i/DueOM8h8Ngu1HUYF0kQ=
+
+Name: lib/ant-javamail.jar
+SHA1-Digest: wrxiIFgTy42K+3HyDbOTqB7ZDr4=
+
+Name: lib/ant-commons-logging.jar
+SHA1-Digest: Y5hINFRXIaAlSOfM2o97W+ynxlA=
+
+Name: etc/ant-bootstrap.jar
+SHA1-Digest: Itotp7/eRa5Mp2FCTvo/Vr80iLY=
+
+Name: lib/ant-swing.jar
+SHA1-Digest: luiXrFQr60HvXXzvIhUQQ8aqLuo=
+
+Name: etc/jdepend-frames.xsl
+SHA1-Digest: 7SXktiL6gSxGMCTMqKCXZmWqsEk=
+
+Name: etc/changelog.xsl
+SHA1-Digest: 2Q6Z3z9DyAwQkba7rYQcns0EB4s=
+
+Name: etc/checkstyle/checkstyle-xdoc.xsl
+SHA1-Digest: BRAN84UDA9rSi86GOq9S3zfbcGE=
+
+Name: lib/ant-launcher.jar
+SHA1-Digest: qX6Eq8IEtHxkpQ6XAwpTGO+v4rM=
+
+Name: lib/ant-apache-xalan2.jar
+SHA1-Digest: 5jc/RjtRymySPsomMDvVhubRoXM=
+
+Name: etc/jdepend.xsl
+SHA1-Digest: B9c3t3v0IYGzRRshVv781Nc7JPQ=
+
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/eclipse.inf b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/eclipse.inf
similarity index 100%
rename from eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/eclipse.inf
rename to eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/META-INF/eclipse.inf
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/OSGI-INF/l10n/bundle.properties b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..c51b2b8
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2010, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+Bundle-Vendor = Eclipse.org
+Bundle-Name = Apache Ant
\ No newline at end of file
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about.html b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about.html
new file mode 100644
index 0000000..e542126
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about.html
@@ -0,0 +1,74 @@
+<!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>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>December, 2010</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>
+The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor’s license for 
+terms and conditions of use.
+</p>
+
+<h4>Ant 1.8.2</h4>
+<p>
+The plug-in includes software developed by The Apache Software Foundation as part of the Ant project.
+</p>
+
+<p>
+The Ant binary code in ant.jar and the scripts ant, ant.bat, ant.cmd, antenv.cmd, antRun, antRun.bat, antRun.pl, complete-ant-cmd.pl, envset.cmd, lcp.bat, runant.pl, runant.py and runrc.cmd are included with the plug-in with no modifications.
+</p>
+
+<p>
+Your use of the Ant code and the scripts is subject to the terms and conditions of the Apache License, Version 2.0.  A copy of the license is contained
+in the file <a href="about_files/ASL-LICENSE-2.0.txt" target="_blank">ASL-LICENSE-2.0.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+</p>
+<p>
+The names "Ant" and "Apache Software Foundation" must not be used to endorse or promote products derived from this 
+software without prior written permission.  For written permission, please contact <a href="mailto:apache at apache.org">apache at apache.org</a>.
+</p>
+
+<p>
+The Apache attribution <a href="about_files/NOTICE" target="_blank">NOTICE</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.
+</p>
+
+<p>Ant includes the following software:</p>
+
+<blockquote>
+	<h4>DOM</h4>
+	<p>
+	DOM is developed by the World Wide Web Consortium.  Your use of DOM is subject to the terms and conditions of the license found in the
+	file <a href="about_files/DOM-LICENSE.html" target="_blank">DOM-LICENSE.html</a> which is included with this plug-in and can also be found at
+	<a href="http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231" target="_blank">http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</a>.
+	</p>
+	
+	<h4>SAX</h4>
+	
+	<p>SAX is developed by the SAX project (<a href="http://www.saxproject.org" target="_blank">http://www.saxproject.org</a>).  Your use of SAX is subject to the
+	terms and conditions of the license found in the file <a href="about_files/SAX-LICENSE.html" target="_blank">SAX-LICENSE.html</a> which is included with this plug-in.</p>
+</blockquote>
+</body>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/asl-v20.txt b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/ASL-LICENSE-2.0.txt
similarity index 100%
rename from eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145/about_files/asl-v20.txt
rename to eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/ASL-LICENSE-2.0.txt
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/DOM-LICENSE.html b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/DOM-LICENSE.html
new file mode 100644
index 0000000..a14bbd1
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/DOM-LICENSE.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content=
+"text/html; charset=utf-8" />
+<meta name="generator" content=
+"HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />
+<title>DOM License</title>
+<link rel="stylesheet" href="./DOM-LICENSE_files/minimum" type=
+"text/css" media="all" />
+<style type="text/css" media="all" xml:space="preserve">
+/*<![CDATA[*/
+     @import url("/2008/site/css/advanced");
+/*]]>*/
+</style>
+<link href="./DOM-LICENSE_files/minimum" rel="stylesheet" type=
+"text/css" media=
+"handheld, only screen and (max-device-width: 480px)" disabled=
+"disabled" />
+<meta name="viewport" content="width=device-width" />
+<link rel="stylesheet" href="./DOM-LICENSE_files/print" type=
+"text/css" media="all" />
+<link rel="shortcut icon" href=
+"http://www.w3.org/2008/site/images/favicon.ico" type=
+"image/x-icon" />
+</head>
+<body id="www-w3-org" class="w3c_public w3c_javascript w3c_print">
+<div id="w3c_container">
+<div id="w3c_main">
+<h1 class="title">W3C Software Notice and License</h1>
+<div id="w3c_content_body">
+<div class="line">
+<p class="intro tPadding">This work (and included software,
+documentation such as READMEs, or other related items) is being
+provided by the copyright holders under the following license.</p>
+<h2>License</h2>
+<p class="tPadding">By obtaining, using and/or copying this work,
+you (the licensee) agree that you have read, understood, and will
+comply with the following terms and conditions.</p>
+<p>Permission to copy, modify, and distribute this software and its
+documentation, with or without modification, for any purpose
+and without fee or royalty is hereby granted, provided that you
+include the following on ALL copies of the software and
+documentation or portions thereof, including modifications:</p>
+<ul class="show_items">
+<li>The full text of this NOTICE in a location viewable to users of
+the redistributed or derivative work.</li>
+<li>Any pre-existing intellectual property disclaimers, notices, or
+terms and conditions. If none exist, the <a href=
+"http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231.html">
+W3C Software Short Notice</a> should be included (hypertext is
+preferred, text is permitted) within the body of any redistributed
+or derivative code.</li>
+<li>Notice of any changes or modifications to the files, including
+the date changes were made. (We recommend you provide URIs to the
+location from which the code is derived.)</li>
+</ul>
+<h2>Disclaimers</h2>
+<p>THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND
+COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
+USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD
+PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p>
+<p>COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,
+SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE
+SOFTWARE OR DOCUMENTATION.</p>
+<p>The name and trademarks of copyright holders may NOT be used in
+advertising or publicity pertaining to the software without
+specific, written prior permission. Title to copyright in this
+software and any associated documentation will at all times remain
+with copyright holders.</p>
+<h2>Notes</h2>
+<p>This version:
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</p>
+<p>This formulation of W3C's notice and license became active on
+December 31 2002. This version removes the copyright ownership
+notice such that this license can be used with materials other than
+those owned by the W3C, reflects that ERCIM is now a host of the
+W3C, includes references to this specific dated version of the
+license, and removes the ambiguous grant of "use". Otherwise, this
+version is the same as the <a href=
+"http://www.w3.org/Consortium/Legal/copyright-software-19980720">previous
+version</a> and is written so as to preserve the <a href=
+"http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses">
+Free Software Foundation's assessment of GPL compatibility</a> and
+<a href="http://www.opensource.org/licenses/W3C.php">OSI's
+certification</a> under the <a href=
+"http://www.opensource.org/docs/definition.php">Open Source
+Definition</a>.</p>
+</div>
+</div>
+</div>
+</div>
+<p class="copyright">Copyright © 2009 W3C <sup>®</sup> ( <a href=
+"http://www.csail.mit.edu/"><acronym title=
+"Massachusetts Institute of Technology">MIT</acronym></a> ,
+<a href="http://www.ercim.org/"><acronym title=
+"European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>
+, <a href="http://www.keio.ac.jp/">Keio</a>) <a href=
+"http://www.w3.org/Consortium/Legal/2002/ipr-notice-20021231">Usage
+policies apply</a>.</p>
+<!-- Generated from data/scripts.php, ../../smarty/{scripts.tpl} --><!-- At the bottom for performance reasons -->
+<div id="w3c_scripts"><script type="text/javascript" src=
+"./DOM-LICENSE_files/main" xml:space="preserve">
+//<![CDATA[
+<!-- -->
+//]]>
+</script></div>
+</body>
+</html>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/LICENSE b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/LICENSE
new file mode 100644
index 0000000..e7789e0
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/LICENSE
@@ -0,0 +1,272 @@
+/*
+ *                                 Apache License
+ *                           Version 2.0, January 2004
+ *                        http://www.apache.org/licenses/
+ *
+ *   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *   1. Definitions.
+ *
+ *      "License" shall mean the terms and conditions for use, reproduction,
+ *      and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *      "Licensor" shall mean the copyright owner or entity authorized by
+ *      the copyright owner that is granting the License.
+ *
+ *      "Legal Entity" shall mean the union of the acting entity and all
+ *      other entities that control, are controlled by, or are under common
+ *      control with that entity. For the purposes of this definition,
+ *      "control" means (i) the power, direct or indirect, to cause the
+ *      direction or management of such entity, whether by contract or
+ *      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *      outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *      "You" (or "Your") shall mean an individual or Legal Entity
+ *      exercising permissions granted by this License.
+ *
+ *      "Source" form shall mean the preferred form for making modifications,
+ *      including but not limited to software source code, documentation
+ *      source, and configuration files.
+ *
+ *      "Object" form shall mean any form resulting from mechanical
+ *      transformation or translation of a Source form, including but
+ *      not limited to compiled object code, generated documentation,
+ *      and conversions to other media types.
+ *
+ *      "Work" shall mean the work of authorship, whether in Source or
+ *      Object form, made available under the License, as indicated by a
+ *      copyright notice that is included in or attached to the work
+ *      (an example is provided in the Appendix below).
+ *
+ *      "Derivative Works" shall mean any work, whether in Source or Object
+ *      form, that is based on (or derived from) the Work and for which the
+ *      editorial revisions, annotations, elaborations, or other modifications
+ *      represent, as a whole, an original work of authorship. For the purposes
+ *      of this License, Derivative Works shall not include works that remain
+ *      separable from, or merely link (or bind by name) to the interfaces of,
+ *      the Work and Derivative Works thereof.
+ *
+ *      "Contribution" shall mean any work of authorship, including
+ *      the original version of the Work and any modifications or additions
+ *      to that Work or Derivative Works thereof, that is intentionally
+ *      submitted to Licensor for inclusion in the Work by the copyright owner
+ *      or by an individual or Legal Entity authorized to submit on behalf of
+ *      the copyright owner. For the purposes of this definition, "submitted"
+ *      means any form of electronic, verbal, or written communication sent
+ *      to the Licensor or its representatives, including but not limited to
+ *      communication on electronic mailing lists, source code control systems,
+ *      and issue tracking systems that are managed by, or on behalf of, the
+ *      Licensor for the purpose of discussing and improving the Work, but
+ *      excluding communication that is conspicuously marked or otherwise
+ *      designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *      "Contributor" shall mean Licensor and any individual or Legal Entity
+ *      on behalf of whom a Contribution has been received by Licensor and
+ *      subsequently incorporated within the Work.
+ *
+ *   2. Grant of Copyright License. Subject to the terms and conditions of
+ *      this License, each Contributor hereby grants to You a perpetual,
+ *      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *      copyright license to reproduce, prepare Derivative Works of,
+ *      publicly display, publicly perform, sublicense, and distribute the
+ *      Work and such Derivative Works in Source or Object form.
+ *
+ *   3. Grant of Patent License. Subject to the terms and conditions of
+ *      this License, each Contributor hereby grants to You a perpetual,
+ *      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *      (except as stated in this section) patent license to make, have made,
+ *      use, offer to sell, sell, import, and otherwise transfer the Work,
+ *      where such license applies only to those patent claims licensable
+ *      by such Contributor that are necessarily infringed by their
+ *      Contribution(s) alone or by combination of their Contribution(s)
+ *      with the Work to which such Contribution(s) was submitted. If You
+ *      institute patent litigation against any entity (including a
+ *      cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *      or a Contribution incorporated within the Work constitutes direct
+ *      or contributory patent infringement, then any patent licenses
+ *      granted to You under this License for that Work shall terminate
+ *      as of the date such litigation is filed.
+ *
+ *   4. Redistribution. You may reproduce and distribute copies of the
+ *      Work or Derivative Works thereof in any medium, with or without
+ *      modifications, and in Source or Object form, provided that You
+ *      meet the following conditions:
+ *
+ *      (a) You must give any other recipients of the Work or
+ *          Derivative Works a copy of this License; and
+ *
+ *      (b) You must cause any modified files to carry prominent notices
+ *          stating that You changed the files; and
+ *
+ *      (c) You must retain, in the Source form of any Derivative Works
+ *          that You distribute, all copyright, patent, trademark, and
+ *          attribution notices from the Source form of the Work,
+ *          excluding those notices that do not pertain to any part of
+ *          the Derivative Works; and
+ *
+ *      (d) If the Work includes a "NOTICE" text file as part of its
+ *          distribution, then any Derivative Works that You distribute must
+ *          include a readable copy of the attribution notices contained
+ *          within such NOTICE file, excluding those notices that do not
+ *          pertain to any part of the Derivative Works, in at least one
+ *          of the following places: within a NOTICE text file distributed
+ *          as part of the Derivative Works; within the Source form or
+ *          documentation, if provided along with the Derivative Works; or,
+ *          within a display generated by the Derivative Works, if and
+ *          wherever such third-party notices normally appear. The contents
+ *          of the NOTICE file are for informational purposes only and
+ *          do not modify the License. You may add Your own attribution
+ *          notices within Derivative Works that You distribute, alongside
+ *          or as an addendum to the NOTICE text from the Work, provided
+ *          that such additional attribution notices cannot be construed
+ *          as modifying the License.
+ *
+ *      You may add Your own copyright statement to Your modifications and
+ *      may provide additional or different license terms and conditions
+ *      for use, reproduction, or distribution of Your modifications, or
+ *      for any such Derivative Works as a whole, provided Your use,
+ *      reproduction, and distribution of the Work otherwise complies with
+ *      the conditions stated in this License.
+ *
+ *   5. Submission of Contributions. Unless You explicitly state otherwise,
+ *      any Contribution intentionally submitted for inclusion in the Work
+ *      by You to the Licensor shall be under the terms and conditions of
+ *      this License, without any additional terms or conditions.
+ *      Notwithstanding the above, nothing herein shall supersede or modify
+ *      the terms of any separate license agreement you may have executed
+ *      with Licensor regarding such Contributions.
+ *
+ *   6. Trademarks. This License does not grant permission to use the trade
+ *      names, trademarks, service marks, or product names of the Licensor,
+ *      except as required for reasonable and customary use in describing the
+ *      origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *   7. Disclaimer of Warranty. Unless required by applicable law or
+ *      agreed to in writing, Licensor provides the Work (and each
+ *      Contributor provides its Contributions) on an "AS IS" BASIS,
+ *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *      implied, including, without limitation, any warranties or conditions
+ *      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *      PARTICULAR PURPOSE. You are solely responsible for determining the
+ *      appropriateness of using or redistributing the Work and assume any
+ *      risks associated with Your exercise of permissions under this License.
+ *
+ *   8. Limitation of Liability. In no event and under no legal theory,
+ *      whether in tort (including negligence), contract, or otherwise,
+ *      unless required by applicable law (such as deliberate and grossly
+ *      negligent acts) or agreed to in writing, shall any Contributor be
+ *      liable to You for damages, including any direct, indirect, special,
+ *      incidental, or consequential damages of any character arising as a
+ *      result of this License or out of the use or inability to use the
+ *      Work (including but not limited to damages for loss of goodwill,
+ *      work stoppage, computer failure or malfunction, or any and all
+ *      other commercial damages or losses), even if such Contributor
+ *      has been advised of the possibility of such damages.
+ *
+ *   9. Accepting Warranty or Additional Liability. While redistributing
+ *      the Work or Derivative Works thereof, You may choose to offer,
+ *      and charge a fee for, acceptance of support, warranty, indemnity,
+ *      or other liability obligations and/or rights consistent with this
+ *      License. However, in accepting such obligations, You may act only
+ *      on Your own behalf and on Your sole responsibility, not on behalf
+ *      of any other Contributor, and only if You agree to indemnify,
+ *      defend, and hold each Contributor harmless for any liability
+ *      incurred by, or claims asserted against, such Contributor by reason
+ *      of your accepting any such warranty or additional liability.
+ *
+ *   END OF TERMS AND CONDITIONS
+ *
+ *   APPENDIX: How to apply the Apache License to your work.
+ *
+ *      To apply the Apache License to your work, attach the following
+ *      boilerplate notice, with the fields enclosed by brackets "[]"
+ *      replaced with your own identifying information. (Don't include
+ *      the brackets!)  The text should be enclosed in the appropriate
+ *      comment syntax for the file format. We also recommend that a
+ *      file or class name and description of purpose be included on the
+ *      same "printed page" as the copyright notice for easier
+ *      identification within third-party archives.
+ *
+ *   Copyright [yyyy] [name of copyright owner]
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ */
+
+W3C® SOFTWARE NOTICE AND LICENSE
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+This work (and included software, documentation such as READMEs, or other
+related items) is being provided by the copyright holders under the following
+license. By obtaining, using and/or copying this work, you (the licensee) agree
+that you have read, understood, and will comply with the following terms and
+conditions.
+
+Permission to copy, modify, and distribute this software and its documentation,
+with or without modification, for any purpose and without fee or royalty is
+hereby granted, provided that you include the following on ALL copies of the
+software and documentation or portions thereof, including modifications:
+
+  1. The full text of this NOTICE in a location viewable to users of the
+     redistributed or derivative work. 
+  2. Any pre-existing intellectual property disclaimers, notices, or terms
+     and conditions. If none exist, the W3C Software Short Notice should be
+     included (hypertext is preferred, text is permitted) within the body
+     of any redistributed or derivative code.
+  3. Notice of any changes or modifications to the files, including the date
+     changes were made. (We recommend you provide URIs to the location from
+     which the code is derived.)
+     
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
+NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
+THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
+PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or
+publicity pertaining to the software without specific, written prior permission.
+Title to copyright in this software and any associated documentation will at
+all times remain with copyright holders.
+
+____________________________________
+
+This formulation of W3C's notice and license became active on December 31 2002.
+This version removes the copyright ownership notice such that this license can
+be used with materials other than those owned by the W3C, reflects that ERCIM
+is now a host of the W3C, includes references to this specific dated version of
+the license, and removes the ambiguous grant of "use". Otherwise, this version
+is the same as the previous version and is written so as to preserve the Free
+Software Foundation's assessment of GPL compatibility and OSI's certification
+under the Open Source Definition. Please see our Copyright FAQ for common
+questions about using materials from our site, including specific terms and
+conditions for packages like libwww, Amaya, and Jigsaw. Other questions about
+this notice can be directed to site-policy at w3.org.
+ 
+Joseph Reagle <site-policy at w3.org> 
+
+This license came from: http://www.megginson.com/SAX/copying.html
+  However please note future versions of SAX may be covered 
+  under http://saxproject.org/?selected=pd
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david at megginson.com
+2000-05-05
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/NOTICE b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/NOTICE
new file mode 100644
index 0000000..a47f692
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/NOTICE
@@ -0,0 +1,6 @@
+   Apache Ant
+   Copyright 1999-2010 The Apache Software Foundation
+
+   The <sync> task is based on code Copyright (c) 2002, Landmark
+   Graphics Corp that has been kindly donated to the Apache Software
+   Foundation.
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/SAX-LICENSE.html b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/SAX-LICENSE.html
new file mode 100644
index 0000000..5ebc705
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/about_files/SAX-LICENSE.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta name="generator" content=
+"HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />
+<meta http-equiv="Content-Type" content=
+"text/html; charset=utf-8" />
+<title>SAX License</title>
+
+<style type="text/css">
+/*<![CDATA[*/
+<!--
+        h1, h2, h3, h4, h5, h6 { color: maroon; }
+        /* make sure that goes OK with the nav column background
+         * net-friendly colors include: yellow/ffffcc, blue/ccccff
+         */
+    -->
+/*]]>*/
+</style>
+</head>
+<body color="#000000">
+<h2>Origin</h2>
+<p>This page was originally taken from: <a href=
+"http://www.saxproject.org/copying.html">http://www.saxproject.org/copying.html</a>
+with the navigation links remove from the left-hand-side of the
+page.</p>
+<h2>Copyright Status</h2>
+<div>
+<p><em>SAX is free!</em></p>
+<p>In fact, it's not possible to own a license to SAX, since it's
+been placed in the public domain.</p>
+<h2>No Warranty</h2>
+<p>Because SAX is released to the public domain, there is no
+warranty for the design or for the software implementation, to the
+extent permitted by applicable law. Except when otherwise stated in
+writing the copyright holders and/or other parties provide SAX "as
+is" without warranty of any kind, either expressed or implied,
+including, but not limited to, the implied warranties of
+merchantability and fitness for a particular purpose. The entire
+risk as to the quality and performance of SAX is with you. Should
+SAX prove defective, you assume the cost of all necessary
+servicing, repair or correction.</p>
+<p>In no event unless required by applicable law or agreed to in
+writing will any copyright holder, or any other party who may
+modify and/or redistribute SAX, be liable to you for damages,
+including any general, special, incidental or consequential damages
+arising out of the use or inability to use SAX (including but not
+limited to loss of data or data being rendered inaccurate or losses
+sustained by you or third parties or a failure of the SAX to
+operate with any other programs), even if such holder or other
+party has been advised of the possibility of such damages.</p>
+<h2>Copyright Disclaimers</h2>
+<p>This page includes statements to that effect by David Megginson,
+who would have been able to claim copyright for the original
+work.</p>
+<!-- MAYBE:  link to archived copies of the messages? -->
+<h3>SAX 1.0</h3>
+<p>Version 1.0 of the Simple API for XML (SAX), created
+collectively by the membership of the XML-DEV mailing list, is
+hereby released into the public domain.</p>
+<p>No one owns SAX: you may use it freely in both commercial and
+non-commercial applications, bundle it with your software
+distribution, include it on a CD-ROM, list the source code in a
+book, mirror the documentation at your own web site, or use it in
+any other way you see fit.</p>
+<p><em>David Megginson, <a href=
+"http://www.megginson.com/">Megginson Technologies Ltd.</a><br />
+1998-05-11</em></p>
+<h3>SAX 2.0</h3>
+<p>I hereby abandon any property rights to SAX 2.0 (the Simple API
+for XML), and release all of the SAX 2.0 source code, compiled
+code, and documentation contained in this distribution into the
+Public Domain. SAX comes with NO WARRANTY or guarantee of fitness
+for any purpose.</p>
+<p><em>David Megginson, <a href=
+"http://www.megginson.com/">Megginson Technologies Ltd.</a><br />
+2000-05-05</em></p>
+</div>
+<br />
+</body>
+</html>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/changelog.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/changelog.xsl
new file mode 100644
index 0000000..5e6d848
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/changelog.xsl
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<xsl:stylesheet
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+    version='1.0'>
+
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   
+-->
+  <xsl:param name="title"/>
+  <xsl:param name="module"/>
+  <xsl:param name="cvsweb"/>
+
+  <xsl:output method="html" indent="yes" encoding="US-ASCII"
+              doctype-public="-//W3C//DTD HTML 4.01//EN"
+              doctype-system="http://www.w3.org/TR/html401/strict.dtd"/>
+
+  <!-- Copy standard document elements.  Elements that
+       should be ignored must be filtered by apply-templates
+       tags. -->
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:copy-of select="attribute::*[. != '']"/>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="changelog">
+    <html>
+      <head>
+        <title><xsl:value-of select="$title"/></title>
+        <style type="text/css">
+          body, p {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            font-size: 80%;
+            color: #000000;
+            background-color: #ffffff;
+          }
+          tr, td {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            background: #eeeee0;
+          }
+          td {
+            padding-left: 20px;
+          }
+      .dateAndAuthor {
+            font-family: Verdana, Arial, Helvetica, sans-serif;
+            font-weight: bold;
+            text-align: left;
+            background: #a6caf0;
+            padding-left: 3px;
+      }
+          a {
+            color: #000000;
+          }
+          pre {
+            font-weight: bold;
+          }
+        </style>
+      </head>
+      <body>
+        <h1>
+          <a name="top"><xsl:value-of select="$title"/></a>
+        </h1>
+        <p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p>
+        <hr/>
+        <table border="0" width="100%" cellspacing="1">
+          
+          <xsl:apply-templates select=".//entry">
+            <xsl:sort select="date" data-type="text" order="descending"/>
+            <xsl:sort select="time" data-type="text" order="descending"/>
+          </xsl:apply-templates>
+          
+        </table>
+        
+      </body>
+    </html>
+  </xsl:template>
+  
+  <xsl:template match="entry">
+    <tr>
+      <td class="dateAndAuthor">
+        <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
+      </td>
+    </tr>
+    <tr>
+      <td>
+        <pre>
+<xsl:apply-templates select="msg"/></pre>
+        <ul>
+          <xsl:apply-templates select="file"/>
+        </ul>
+      </td>
+    </tr>
+  </xsl:template>
+
+  <xsl:template match="date">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="time">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="author">
+    <i>
+      <a>
+        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+        <xsl:value-of select="."/></a>
+    </i>
+  </xsl:template>
+
+  <xsl:template match="file">
+    <li>
+      <a>
+        <xsl:choose>
+          <xsl:when test="string-length(prevrevision) = 0 ">
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
+          </xsl:otherwise>
+        </xsl:choose>
+        <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)</a>
+    </li>
+  </xsl:template>
+
+  <!-- Any elements within a msg are processed,
+       so that we can preserve HTML tags. -->
+  <xsl:template match="msg">
+    <xsl:apply-templates/>
+  </xsl:template>
+  
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-frames.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-frames.xsl
new file mode 100644
index 0000000..47aa2f7
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-frames.xsl
@@ -0,0 +1,299 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="http://xml.apache.org/xalan/redirect"
+    extension-element-prefixes="redirect">
+
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+    <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+    <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+    <xsl:param name="output.dir" select="'.'"/>
+    <xsl:param name="basedir" select="'.'"/>
+
+    <xsl:template match="checkstyle">
+        <!-- create the index.html -->
+        <redirect:write file="{$output.dir}/index.html">
+            <xsl:call-template name="index.html"/>
+        </redirect:write>
+
+        <!-- create the stylesheet.css -->
+        <redirect:write file="{$output.dir}/stylesheet.css">
+            <xsl:call-template name="stylesheet.css"/>
+        </redirect:write>
+
+        <!-- create the overview-summary.html at the root -->
+        <redirect:write file="{$output.dir}/overview-frame.html">
+            <xsl:apply-templates select="." mode="overview"/>
+        </redirect:write>
+
+        <!-- create the all-classes.html at the root -->
+        <redirect:write file="{$output.dir}/allclasses-frame.html">
+            <xsl:apply-templates select="." mode="all.classes"/>
+        </redirect:write>
+
+        <!-- process all files -->
+        <xsl:apply-templates select="file[count(error) != 0]"/>
+    </xsl:template>
+
+    <xsl:template name="index.html">
+        <html>
+            <head>
+                <title>CheckStyle Audit</title>
+            </head>
+            <frameset cols="20%,80%">
+                <frame src="allclasses-frame.html" name="fileListFrame"/>
+                <frame src="overview-frame.html" name="fileFrame"/>
+            </frameset>
+            <noframes>
+                <h2>Frame Alert</h2>
+                <p>
+                    This document is designed to be viewed using the frames feature.
+                    If you see this message, you are using a non-frame-capable web client.
+                </p>
+            </noframes>
+        </html>
+    </xsl:template>
+
+    <xsl:template name="pageHeader">
+        <table border="0" cellpadding="0" cellspacing="0" width="100%">
+            <tr>
+                <td class="text-align:right"><h2>CheckStyle Audit</h2></td>
+            </tr>
+            <tr>
+                <td class="text-align:right">Designed for use with
+                  <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and
+                  <a href='http://ant.apache.org/'>Ant</a>.</td>
+            </tr>
+        </table>
+        <hr size="1"/>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="overview">
+        <html>
+            <head>
+                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+            </head>
+            <body>
+                <!-- page header -->
+                <xsl:call-template name="pageHeader"/>
+
+                <!-- Summary part -->
+                <xsl:apply-templates select="." mode="summary"/>
+                <hr size="1" width="100%" align="left"/>
+
+                <!-- File list part -->
+                <xsl:apply-templates select="." mode="filelist"/>
+            </body>
+        </html>
+    </xsl:template>
+
+    <xsl:template name="stylesheet.css">
+        .bannercell {
+        border: 0px;
+        padding: 0px;
+        }
+        body {
+        margin-left: 10;
+        margin-right: 10;
+        font:normal 80% arial,helvetica,sanserif;
+        background-color:#FFFFFF;
+        color:#000000;
+        }
+        .oddrow td {
+        background: #efefef;
+        }
+        .evenrow td {
+        background: #fff;
+        }
+        th, td {
+        text-align: left;
+        vertical-align: top;
+        }
+        th {
+        font-weight:bold;
+        background: #ccc;
+        color: black;
+        }
+        table, th, td {
+        font-size:100%;
+        border: none
+        }
+        table.log tr td, tr th {
+
+        }
+        h2 {
+        font-weight:bold;
+        font-size:140%;
+        margin-bottom: 5;
+        }
+        h3 {
+        font-size:100%;
+        font-weight:bold;
+        background: #525D76;
+        color: white;
+        text-decoration: none;
+        padding: 5px;
+        margin-right: 2px;
+        margin-left: 2px;
+        margin-bottom: 0;
+        }
+    </xsl:template>
+
+    <!--
+    Creates an all-classes.html file that contains a link to all files.
+    -->
+    <xsl:template match="checkstyle" mode="all.classes">
+        <html>
+            <head>
+                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+            </head>
+            <body>
+                <h2>Files</h2>
+                <p>
+                    <table width="100%">
+                        <!-- For each file create its part -->
+                        <xsl:apply-templates select="file[count(error) != 0]" mode="all.classes">
+                            <xsl:sort select="substring-after(@name, $basedir)"/>
+                        </xsl:apply-templates>
+                    </table>
+                </p>
+            </body>
+        </html>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="filelist">
+        <h3>Files</h3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+            <tr>
+                <th>Name</th>
+                <th>Errors</th>
+            </tr>
+            <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+                <xsl:sort select="count(error)" order="descending" data-type="number"/>
+            </xsl:apply-templates>
+        </table>
+    </xsl:template>
+
+    <xsl:template match="file" mode="filelist">
+        <tr>
+            <xsl:call-template name="alternated-row"/>
+            <td nowrap="nowrap">
+                <a>
+                    <xsl:attribute name="href">
+                        <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+                    </xsl:attribute>
+                    <xsl:value-of select="substring-after(@name, $basedir)"/>
+                </a>
+            </td>
+            <td><xsl:value-of select="count(error)"/></td>
+        </tr>
+    </xsl:template>
+
+    <xsl:template match="file" mode="all.classes">
+        <tr>
+            <td nowrap="nowrap">
+                <a target="fileFrame">
+                    <xsl:attribute name="href">
+                        <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+                    </xsl:attribute>
+                    <xsl:value-of select="substring-after(@name, $basedir)"/>
+                </a>
+            </td>
+        </tr>
+    </xsl:template>
+
+    <!--
+    transform string like a/b/c to ../../../
+    @param path the path to transform into a descending directory path
+    -->
+    <xsl:template name="path">
+        <xsl:param name="path"/>
+
+        <!-- Convert a windows path '\' to a unix path '/' for further processing. -->
+        <xsl:variable name="path2" select="translate($path,'\','/')"/>
+
+        
+        <xsl:if test="contains($path2,'/')">
+            <xsl:text>../</xsl:text>
+            <xsl:call-template name="path">
+                <xsl:with-param name="path"><xsl:value-of select="substring-after($path2,'/')"/></xsl:with-param>
+            </xsl:call-template>
+        </xsl:if>
+        <xsl:if test="not(contains($path2,'/')) and not($path2 = '')">
+            <xsl:text>../</xsl:text>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template match="file">
+        <redirect:write file="{$output.dir}/files/{substring-after(@name, $basedir)}.html">
+            <html>
+                <head>
+                    <link rel="stylesheet" type="text/css">
+                        <xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="substring-after(@name, $basedir)"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute>
+                    </link>
+                </head>
+                <body>
+                    <xsl:call-template name="pageHeader"/>
+                    <h3>File <xsl:value-of select="substring-after(@name, $basedir)"/></h3>
+                    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                        <tr>
+                            <th>Error Description</th>
+                            <th>Line:Column</th>
+                        </tr>
+                        <xsl:for-each select="error">
+                            <tr>
+                                <xsl:call-template name="alternated-row"/>
+                                <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+                                <td align="center"><xsl:value-of select="@line"/><xsl:if test="@column">:<xsl:value-of select="@column"/></xsl:if></td>
+                            </tr>
+                        </xsl:for-each>
+                    </table>
+                </body>
+            </html>
+        </redirect:write>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="summary">
+        <h3>Summary</h3>
+        <xsl:variable name="fileCount" select="count(file)"/>
+        <xsl:variable name="errorCount" select="count(file/error)"/>
+        <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+            <tr>
+                <th>Total Files</th>
+                <th>Files With Errors</th>
+                <th>Errors</th>
+            </tr>
+            <tr>
+                <xsl:call-template name="alternated-row"/>
+                <td><xsl:value-of select="$fileCount"/></td>
+                <td><xsl:value-of select="$fileErrorCount"/></td>
+                <td><xsl:value-of select="$errorCount"/></td>
+            </tr>
+        </table>
+    </xsl:template>
+
+    <xsl:template name="alternated-row">
+        <xsl:attribute name="class">
+            <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+            <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+        </xsl:attribute>
+    </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-text.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-text.xsl
new file mode 100644
index 0000000..aab5161
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-text.xsl
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+    <xsl:strip-space elements="checkstyle"/>
+    <xsl:preserve-space elements="file"/>
+    <xsl:output method="text"/>
+    <xsl:template match="checkstyle/file/error">
+        <xsl:value-of select="../@name"/>
+        <xsl:text>:</xsl:text>
+        <xsl:value-of select="@line"/>
+        <xsl:text>:</xsl:text>
+        <xsl:value-of select="@column"/>
+        <xsl:text> </xsl:text>
+        <xsl:value-of select="@message"/>
+    </xsl:template>
+</xsl:stylesheet>
+
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-xdoc.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-xdoc.xsl
new file mode 100644
index 0000000..bacf11e
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/checkstyle/checkstyle-xdoc.xsl
@@ -0,0 +1,130 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    extension-element-prefixes="redirect">
+
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+    <xsl:output method="xml" indent="yes"/>
+    <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+    <xsl:param name="output.dir" select="'.'"/>
+    <xsl:param name="basedir" select="'.'"/>
+
+    <xsl:template match="checkstyle">
+      <document>
+        <properties>
+          <title>Checkstyle Audit</title>
+        </properties>
+
+        <body>
+          <xsl:apply-templates select="." mode="summary"/>
+          <!-- File list part -->
+          <xsl:apply-templates select="." mode="filelist"/>
+          <xsl:apply-templates select="file[count(error) != 0]"/>
+        </body>
+      </document>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="filelist">
+      <section name="Files">
+        <table>
+            <tr>
+                <th>Name</th>
+                <th>Errors</th>
+            </tr>
+            <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+                <xsl:sort select="count(error)" order="descending" data-type="number"/>
+            </xsl:apply-templates>
+        </table>
+      </section>
+    </xsl:template>
+
+    <xsl:template match="file" mode="filelist">
+        <tr>
+            <xsl:call-template name="alternated-row"/>
+            <td nowrap="nowrap">
+                <a>
+                    <xsl:attribute name="href">
+                        <xsl:text>files</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+                    </xsl:attribute>
+                    <xsl:value-of select="substring-after(@name, $basedir)"/>
+                </a>
+            </td>
+            <td><xsl:value-of select="count(error)"/></td>
+        </tr>
+    </xsl:template>
+
+    <xsl:template match="file">
+      <redirect:write file="{$output.dir}/files{substring-after(@name, $basedir)}.xml">
+        <document>
+          <properties>
+            <title>Checkstyle Audit</title>
+          </properties>
+
+          <body>
+            <section name="Details for {substring-after(@name, $basedir)}">
+              <table>
+                  <tr>
+                      <th>Error Description</th>
+                      <th>Line</th>
+                  </tr>
+                  <xsl:for-each select="error">
+                      <tr>
+                          <xsl:call-template name="alternated-row"/>
+                          <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+                          <td><xsl:value-of select="@line"/></td>
+                      </tr>
+                  </xsl:for-each>
+              </table>
+            </section>
+          </body>
+        </document>
+      </redirect:write>
+    </xsl:template>
+
+    <xsl:template match="checkstyle" mode="summary">
+      <section name="Summary">
+        <xsl:variable name="fileCount" select="count(file)"/>
+        <xsl:variable name="errorCount" select="count(file/error)"/>
+        <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+        <table>
+            <tr>
+                <th>Files</th>
+                <th>Files With Errors</th>
+                <th>Errors</th>
+            </tr>
+            <tr>
+                <xsl:call-template name="alternated-row"/>
+                <td><xsl:value-of select="$fileCount"/></td>
+                <td><xsl:value-of select="$fileErrorCount"/></td>
+                <td><xsl:value-of select="$errorCount"/></td>
+            </tr>
+        </table>
+      </section>
+    </xsl:template>
+
+    <xsl:template name="alternated-row">
+        <xsl:attribute name="class">
+            <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+            <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+        </xsl:attribute>
+    </xsl:template>
+</xsl:stylesheet>
+
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/coverage-frames.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/coverage-frames.xsl
new file mode 100644
index 0000000..357bea3
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/coverage-frames.xsl
@@ -0,0 +1,489 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+<!--
+
+ Sample stylesheet to be used with JProbe 3.0 XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ It is best used with JProbe Coverage Ant task that gives you the benefit
+ of a reference classpath so that you have the list of classes/methods
+ that are not used at all in a given classpath.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez at apache.org"/>
+
+-->
+
+<!-- default output directory is current directory -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- ======================================================================
+    Root element
+    ======================================================================= -->
+<xsl:template match="/snapshot">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- process all packages -->
+    <xsl:apply-templates select="./package" mode="write"/>
+</xsl:template>
+
+<!-- =======================================================================
+    Frameset definition. Entry point for the report.
+    3 frames: packageListFrame, classListFrame, classFrame
+    ======================================================================= -->
+<xsl:template name="index.html">
+<html>
+    <head><title>Coverage Results.</title></head>
+    <frameset cols="20%,80%">
+        <frameset rows="30%,70%">
+            <frame src="overview-frame.html" name="packageListFrame"/>
+            <frame src="allclasses-frame.html" name="classListFrame"/>
+        </frameset>
+        <frame src="overview-summary.html" name="classFrame"/>
+    </frameset>
+    <noframes>
+        <h2>Frame Alert</h2>
+        <p>
+        This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+        </p>
+    </noframes>
+</html>
+</xsl:template>
+
+<!-- =======================================================================
+    Stylesheet CSS used
+    ======================================================================= -->
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin-left: 10;
+      margin-right: 10;
+      font:normal 80% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    .a td {
+      background: #efefef;
+    }
+    .b td {
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      font-weight:bold;
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      font-size:100%;
+      border: none
+    }
+    table.log tr td, tr th {
+
+    }
+    h2 {
+      font-weight:bold;
+      font-size:140%;
+      margin-bottom: 5;
+    }
+    h3 {
+      font-size:100%;
+      font-weight:bold;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+</xsl:template>
+
+<!-- =======================================================================
+    List of all classes in all packages
+    This will be the first page in the classListFrame
+    ======================================================================= -->
+<xsl:template match="snapshot" mode="all.classes">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link"/>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:for-each select="package/class">
+                    <xsl:sort select="@name"/>
+                    <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+                    <xsl:variable name="link">
+                        <xsl:if test="not($package.name='')">
+                            <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                        </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                    </xsl:variable>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<!-- list of all packages -->
+<xsl:template match="snapshot" mode="all.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link"/>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+            <table width="100%">
+                <xsl:for-each select="package">
+                    <xsl:sort select="@name" order="ascending"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+                                <xsl:value-of select="@name"/>
+                            </a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<!-- overview of statistics in packages -->
+<xsl:template match="snapshot" mode="overview.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link"/>
+        </head>
+        <body onload="open('allclasses-frame.html','classListFrame')">
+        <xsl:call-template name="pageHeader"/>
+        <h3>Summary</h3>
+        <table class="log" cellpadding="5" cellspacing="2" width="100%">
+            <tr>
+                <!--th width="10%" nowrap="nowrap">Date</th>
+                <th width="10%" nowrap="nowrap">Elapsed time</th-->
+                <th width="10%" nowrap="nowrap">Reported Classes</th>
+                <th width="10%" nowrap="nowrap">Methods Hit</th>
+                <th width="10%" nowrap="nowrap">Lines Hit</th>
+            </tr>
+            <tr class="a">
+                <!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td>
+                <td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td-->
+                <td><xsl:value-of select="count(package/class)"/></td>
+                <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+                <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+            </tr>
+        </table>
+        <table border="0" width="100%">
+        <tr>
+        <td style="text-align: justify;">
+        To ensure accurate test runs on Java applications, developers need to know how much of
+        the code has been tested, and where to find any untested code. Coverage helps you
+        locate untested code, and measure precisely how much code has been exercised.
+        The result is a higher quality application in a shorter period of time.
+        <p/>
+        </td>
+        </tr>
+        </table>
+
+        <h3>Packages</h3>
+        <table class="log" cellpadding="5" cellspacing="2" width="100%">
+            <xsl:apply-templates select="package[1]" mode="stats.header"/>
+            <!-- display packages and sort them via their coverage rate -->
+            <xsl:for-each select="package">
+                <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+                <tr>
+                  <xsl:call-template name="alternate-row"/>
+                    <td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td>
+                    <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+                    <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        <xsl:call-template name="pageFooter"/>
+        </body>
+        </html>
+</xsl:template>
+
+<!--
+ detailed info for a package. It will output the list of classes
+, the summary page, and the info for each class
+-->
+<xsl:template match="package" mode="write">
+    <xsl:variable name="package.dir">
+        <xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if>
+        <xsl:if test="@name = ''">.</xsl:if>
+    </xsl:variable>
+
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:apply-templates select="." mode="classes.list"/>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:apply-templates select="." mode="package.summary"/>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <xsl:for-each select="class">
+        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+            <xsl:apply-templates select="." mode="class.details"/>
+        </redirect:write>
+    </xsl:for-each>
+</xsl:template>
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+    <html>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="@name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+                    </td>
+                </tr>
+            </table>
+
+            <H2>Classes</H2>
+            <TABLE WIDTH="100%">
+                <xsl:for-each select="class">
+                    <xsl:sort select="@name"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </TABLE>
+        </BODY>
+    </html>
+</xsl:template>
+
+<!-- summary of a package -->
+<xsl:template match="package" mode="package.summary">
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="@name"/>
+            </xsl:call-template>
+        </HEAD>
+        <!-- when loading this package, it will open the classes into the frame -->
+        <BODY onload="open('package-frame.html','classListFrame')">
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="@name"/></h3>
+            <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:apply-templates select="." mode="stats.header"/>
+                <xsl:apply-templates select="." mode="stats"/>
+            </table>
+
+            <xsl:if test="count(class) > 0">
+                <H3>Classes</H3>
+                <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                    <xsl:apply-templates select="." mode="stats.header"/>
+                    <xsl:apply-templates select="class" mode="stats">
+                        <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+                    </xsl:apply-templates>
+                </table>
+            </xsl:if>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+</xsl:template>
+
+<!-- details of a class -->
+<xsl:template match="class" mode="class.details">
+    <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <xsl:call-template name="pageHeader"/>
+            <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+            <!-- class summary -->
+            <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:apply-templates select="." mode="stats.header"/>
+                <xsl:apply-templates select="." mode="stats"/>
+            </table>
+
+            <!-- details of methods -->
+            <H3>Methods</H3>
+            <table class="log" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:apply-templates select="method[1]" mode="stats.header"/>
+                <xsl:apply-templates select="method" mode="stats">
+                    <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+                </xsl:apply-templates>
+            </table>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+
+</xsl:template>
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+  <!-- jakarta logo -->
+  <table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td class="bannercell" rowspan="2">
+      <a href="http://jakarta.apache.org/">
+      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+      </a>
+    </td>
+        <td style="text-align:right"><h2>Source Code Coverage</h2></td>
+        </tr>
+        <tr>
+        <td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+        </tr>
+  </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+</xsl:template>
+
+
+<xsl:template name="table.header">
+    <tr>
+        <th width="80%">Name</th>
+        <th width="10%" nowrap="nowrap">Methods Hit</th>
+        <th width="10%" nowrap="nowrap">Lines Hit</th>
+    </tr>
+</xsl:template>
+
+<xsl:template match="method" mode="stats.header">
+    <tr>
+        <th width="90%">Name</th>
+        <th width="10%" nowrap="nowrap">Lines Hit</th>
+    </tr>
+</xsl:template>
+<xsl:template match="method" mode="stats">
+    <tr>
+      <xsl:call-template name="alternate-row"/>
+        <td><xsl:value-of select="@name"/></td>
+        <td>
+        <xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/>
+        </td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="package|class" mode="stats.header">
+    <tr>
+        <th width="80%">Name</th>
+        <th width="10%" nowrap="nowrap">Methods Hit</th>
+        <th width="10%" nowrap="nowrap">Lines Hit</th>
+    </tr>
+</xsl:template>
+<xsl:template match="package|class" mode="stats">
+    <tr>
+      <xsl:call-template name="alternate-row"/>
+        <td><xsl:value-of select="@name"/></td>
+        <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+        <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+    </tr>
+</xsl:template>
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+  <xsl:if test="position() mod 2 = 1">a</xsl:if>
+  <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/jdepend-frames.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/jdepend-frames.xsl
new file mode 100644
index 0000000..d693280
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/jdepend-frames.xsl
@@ -0,0 +1,487 @@
+<?xml version="1.0"?>
+<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+  xmlns:lxslt="http://xml.apache.org/xslt"
+  xmlns:redirect="org.apache.xalan.lib.Redirect"
+  extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   
+-->
+<!--
+
+ Sample stylesheet to be used with JDepend XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ @author <a href="mailto:jtulley at novell.com">Jeff Tulley</a>
+
+  -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<xsl:template match="JDepend">
+   <!-- create the index.html -->
+   <redirect:write file="{$output.dir}/index.html">
+      <xsl:call-template name="index.html"/>
+   </redirect:write>
+
+  <!-- create the stylesheet.css -->
+  <redirect:write file="{$output.dir}/stylesheet.css">
+    <xsl:call-template name="stylesheet.css"/>
+   </redirect:write>
+
+   <!-- create the overview-packages.html at the root -->
+  <redirect:write file="{$output.dir}/overview-summary.html">
+    <xsl:apply-templates select="." mode="overview.packages"/>
+  </redirect:write>
+
+   <!-- create the overview-packages.html at the root -->
+   <redirect:write file="{$output.dir}/overview-packages.html">
+    <xsl:apply-templates select="." mode="packages.details"/>
+  </redirect:write>
+
+   <!-- create the overview-cycles.html at the root -->
+   <redirect:write file="{$output.dir}/overview-cycles.html">
+    <xsl:apply-templates select="." mode="cycles.details"/>
+  </redirect:write>
+
+   <!-- create the overview-cycles.html at the root -->
+   <redirect:write file="{$output.dir}/overview-explanations.html">
+    <xsl:apply-templates select="." mode="explanations"/>
+  </redirect:write>
+
+  <!-- create the all-packages.html at the root -->
+   <redirect:write file="{$output.dir}/all-packages.html">
+    <xsl:apply-templates select="Packages" mode="all.packages"/>
+  </redirect:write>
+
+  <!-- create the all-cycles.html at the root -->
+  <redirect:write file="{$output.dir}/all-cycles.html">
+    <xsl:apply-templates select="Cycles" mode="all.cycles"/>
+  </redirect:write>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<html>
+   <head>
+      <title>JDepend Analysis</title>
+   </head>
+      <frameset cols="20%,80%">
+         <frameset rows="30%,70%">
+            <frame src="all-packages.html" name="packageListFrame"/>
+            <frame src="all-cycles.html" name="classListFrame"/>
+         </frameset>
+         <frame src="overview-summary.html" name="classFrame"/>
+      </frameset>
+      <noframes>
+         <h2>Frame Alert</h2>
+         <p>
+            This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+         </p>
+      </noframes>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+   <style type="text/css">
+    body {
+    font:normal 68% verdana,arial,helvetica;
+    color:#000000;
+    }
+    table tr td, tr th {
+      font-size: 68%;
+    }
+    table.details tr th{
+    font-weight: bold;
+    text-align:left;
+    background:#a6caf0;
+    }
+    table.details tr td{
+    background:#eeeee0;
+    }
+
+    p {
+    line-height:1.5em;
+    margin-top:0.5em; margin-bottom:1.0em;
+    margin-left:2em;
+    margin-right:2em;
+    }
+    h1 {
+    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+    }
+    h2 {
+    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+    }
+    h3 {
+    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+    }
+    h4 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+    }
+    h5 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+    }
+    h6 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+    }
+    .Error {
+    font-weight:bold; color:red;
+    }
+    .Failure {
+    font-weight:bold; color:purple;
+    }
+    .Properties {
+    text-align:right;
+    }
+  </style>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="overview.packages">
+   <html>
+      <head>
+         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+  <table width="100%"><tr align="left"><h2>Summary</h2><td>
+  </td><td align="right">
+  [summary]
+  [<a href="overview-packages.html">packages</a>]
+  [<a href="overview-cycles.html">cycles</a>]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+         <table width="100%" class="details">
+            <tr>
+               <th>Package</th>
+               <th>Total Classes</th>
+               <th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th>
+               <th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th>
+               <th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th>
+               <th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th>
+               <th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th>
+               <th><a href="overview-explanations.html#EXinstability">Instability</a></th>
+               <th><a href="overview-explanations.html#EXdistance">Distance</a></th>
+
+            </tr>
+            <xsl:for-each select="./Packages/Package">
+               <xsl:if test="count(error) = 0">
+                  <tr>
+                     <td align="left">
+                        <a>
+                           <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/>
+                           </xsl:attribute>
+                           <xsl:value-of select="@name"/>
+                        </a>
+                     </td>
+                     <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+                     <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+                     <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+                     <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+                     <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+                     <td align="right"><xsl:value-of select="Stats/A"/></td>
+                     <td align="right"><xsl:value-of select="Stats/I"/></td>
+                     <td align="right"><xsl:value-of select="Stats/D"/></td>
+                  </tr>
+               </xsl:if>
+            </xsl:for-each>
+            <xsl:for-each select="./Packages/Package">
+               <xsl:if test="count(error) > 0">
+                  <tr>
+                     <td align="left">
+                        <xsl:value-of select="@name"/>
+                     </td>
+                     <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+                  </tr>
+               </xsl:if>
+            </xsl:for-each>
+         </table>
+      </body>
+   </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="packages.details">
+   <html>
+      <head>
+          <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+  <table width="100%"><tr align="left"><h2>Packages</h2><td>
+  </td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [packages]
+  [<a href="overview-cycles.html">cycles</a>]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+
+  <xsl:for-each select="./Packages/Package">
+    <xsl:if test="count(error) = 0">
+      <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+      <xsl:value-of select="@name"/></a></h3>
+
+      <table width="100%"><tr>
+        <td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+        <td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+        <td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+        <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+        <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+      </tr></table>
+
+      <table width="100%" class="details">
+        <tr>
+          <th>Abstract Classes</th>
+          <th>Concrete Classes</th>
+          <th>Used by Packages</th>
+          <th>Uses Packages</th>
+        </tr>
+        <tr>
+          <td valign="top" width="25%">
+          <xsl:if test="count(AbstractClasses/Class)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="AbstractClasses/Class">
+              <xsl:value-of select="node()"/><br/>
+            </xsl:for-each>
+          </td>
+          <td valign="top" width="25%">
+            <xsl:if test="count(ConcreteClasses/Class)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="ConcreteClasses/Class">
+              <xsl:value-of select="node()"/><br/>
+            </xsl:for-each>
+          </td>
+          <td valign="top" width="25%">
+            <xsl:if test="count(UsedBy/Package)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="UsedBy/Package">
+              <a>
+                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+                <xsl:value-of select="node()"/>
+              </a><br/>
+            </xsl:for-each>
+          </td>
+          <td valign="top" width="25%">
+            <xsl:if test="count(DependsUpon/Package)=0">
+              <i>None</i>
+            </xsl:if>
+            <xsl:for-each select="DependsUpon/Package">
+              <a>
+                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+                <xsl:value-of select="node()"/>
+              </a><br/>
+            </xsl:for-each>
+          </td>
+        </tr>
+      </table>
+    </xsl:if>
+  </xsl:for-each>
+  <!-- this is often a long listing; provide a lower navigation table also -->
+  <table width="100%"><tr align="left"><td></td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [packages]
+  [<a href="overview-cycles.html">cycles</a>]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+      </body>
+   </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="cycles.details">
+   <html>
+      <head>
+         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+  <table width="100%"><tr align="left"><h2>Cycles</h2><td>
+  </td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [<a href="overview-packages.html">packages</a>]
+  [cycles]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+  <!--<table width="100%"><tr><td>
+  </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+  [<a href="#NVpackages">packages</a>]
+  [<a href="#NVcycles">cycles</a>]
+   [<a href="#NVexplanations">explanations</a>]
+  </td></tr></table> -->
+
+  <xsl:if test="count(Cycles/Package) = 0">
+    <p>There are no cyclic dependancies.</p>
+  </xsl:if>
+  <xsl:for-each select="Cycles/Package">
+     <h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p>
+    <xsl:for-each select="Package">
+      <xsl:value-of select="."/><br/>
+    </xsl:for-each></p>
+  </xsl:for-each>
+  <!-- this is often a long listing; provide a lower navigation table also -->
+  <table width="100%"><tr align="left"><td></td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [<a href="overview-packages.html">packages</a>]
+  [cycles]
+  [<a href="overview-explanations.html">explanations</a>]
+   </td></tr></table>
+  </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="explanations">
+   <html>
+      <head>
+         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+      </head>
+      <body>
+         <xsl:call-template name="pageHeader"/>
+
+  <table width="100%"><tr align="left"><h2>Explanations</h2><td>
+  </td><td align="right">
+  [<a href="overview-summary.html">summary</a>]
+  [<a href="overview-packages.html">packages</a>]
+  [<a href="overview-cycles.html">cycles</a>]
+  [explanations]
+   </td></tr></table>
+
+  <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+
+  <h3><a name="EXnumber">Number of Classes</a></h3>
+    <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+  <h3><a name="EXafferent">Afferent Couplings</a></h3>
+    <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+  <h3><a name="EXefferent">Efferent Couplings</a></h3>
+    <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+  <h3><a name="EXabstractness">Abstractness</a></h3>
+    <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+    <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+  <h3><a name="EXinstability">Instability</a></h3>
+    <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+    <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+  <h3><a name="EXdistance">Distance</a></h3>
+    <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+    <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+    <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+
+      </body>
+   </html>
+</xsl:template>
+
+
+<!--
+Creates an html file that contains a link to all package links in overview-packages.html.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages" mode="all.packages">
+  <html>
+    <head>
+      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+    </head>
+    <body>
+  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+  [<a href="overview-summary.html" target="classFrame">summary</a>]
+  [<a href="overview-packages.html" target="classFrame">packages</a>]
+  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+   </td></tr></table>
+      <h2>Packages</h2>
+        <table width="100%">
+          <xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link">
+            <xsl:sort select="@name"/>
+          </xsl:apply-templates>
+          <xsl:apply-templates select="Package[count(error) > 0]" mode="all.packages.nolink">
+            <xsl:sort select="@name"/>
+          </xsl:apply-templates>
+        </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.link">
+  <tr>
+    <td nowrap="nowrap">
+         <a href="overview-packages.html#PK{@name}" target="classFrame">
+        <xsl:value-of select="@name"/>
+      </a>
+    </td>
+  </tr>
+</xsl:template>
+
+<!--
+I do not know JDepend enough to know if every error results in a non-analyzed package,
+but that is how I am presenting it to the viewer.  This may need to change.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink">
+  <tr>
+    <td nowrap="nowrap">
+       Not Analyzed: <xsl:value-of select="@name"/>
+    </td>
+  </tr>
+</xsl:template>
+
+<!--
+Creates an html file that contains a link to all package links in overview-cycles.html.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Cycles" mode="all.cycles">
+  <html>
+    <head>
+      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+    </head>
+    <body>
+  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+  [<a href="overview-summary.html" target="classFrame">summary</a>]
+  [<a href="overview-packages.html" target="classFrame">packages</a>]
+  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+   </td></tr></table>
+      <h2>Cycles</h2>
+        <table width="100%">
+           <xsl:apply-templates select="Package" mode="all.cycles">
+            <xsl:sort select="@Name"/>
+          </xsl:apply-templates>
+        </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Cycles/Package" mode="all.cycles">
+  <tr>
+    <td nowrap="nowrap">
+         <a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a>
+    </td>
+  </tr>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+   <h1>JDepend Analysis</h1>
+  <table width="100%">
+  <tr>
+    <td align="left"></td>
+      <td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td>
+  </tr>
+  </table>
+  <hr size="1"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/jdepend.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/jdepend.xsl
new file mode 100644
index 0000000..028b6da
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/jdepend.xsl
@@ -0,0 +1,276 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+<xsl:output method="html" indent="yes"  encoding="US-ASCII"/>
+
+<xsl:template match="JDepend">
+    <html>
+    <head>
+        <title>JDepend Analysis</title>
+        
+    <style type="text/css">
+      body {
+        font:normal 68% verdana,arial,helvetica;
+        color:#000000;
+      }
+      table tr td, tr th {
+          font-size: 68%;
+      }
+      table.details tr th{
+        font-weight: bold;
+        text-align:left;
+        background:#a6caf0;
+      }
+      table.details tr td{
+        background:#eeeee0;
+      }
+      
+      p {
+        line-height:1.5em;
+        margin-top:0.5em; margin-bottom:1.0em;
+        margin-left:2em;
+        margin-right:2em;
+      }
+      h1 {
+        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+      }
+      h2 {
+        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+      }
+      h3 {
+        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+      }
+      h4 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h5 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h6 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      .Error {
+        font-weight:bold; color:red;
+      }
+      .Failure {
+        font-weight:bold; color:purple;
+      }
+      .Properties {
+        text-align:right;
+      }
+      </style>
+        
+        
+    </head>
+    <body>
+    <!--h1>JDepend Report</h1>
+    <ul>
+    <xsl:for-each select="./Packages/Package">
+                <xsl:sort select="@name"/>
+        <li><xsl:value-of select="@name"/></li>
+    </xsl:for-each>
+    </ul-->
+    
+    <h1><a name="top">JDepend Analysis</a></h1>
+    <p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
+    <hr size="2" />
+    
+    <table width="100%"><tr><td>
+    <a name="NVsummary"><h2>Summary</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <table width="100%" class="details">
+        <tr>
+            <th>Package</th>
+            <th>Total Classes</th>
+            <th><a href="#EXnumber">Abstract Classes</a></th>
+            <th><a href="#EXnumber">Concrete Classes</a></th>
+            <th><a href="#EXafferent">Afferent Couplings</a></th>
+            <th><a href="#EXefferent">Efferent Couplings</a></th>
+            <th><a href="#EXabstractness">Abstractness</a></th>
+            <th><a href="#EXinstability">Instability</a></th>
+            <th><a href="#EXdistance">Distance</a></th>
+            
+        </tr>
+    <xsl:for-each select="./Packages/Package">
+        <xsl:if test="count(error) = 0">
+            <tr>
+                <td align="left">
+                    <a>
+                    <xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
+                    </xsl:attribute>
+                    <xsl:value-of select="@name"/>
+                    </a>
+                </td>
+                <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+                <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+                <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+                <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+                <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+                <td align="right"><xsl:value-of select="Stats/A"/></td>
+                <td align="right"><xsl:value-of select="Stats/I"/></td>
+                <td align="right"><xsl:value-of select="Stats/D"/></td>
+                
+
+            </tr>
+        </xsl:if>
+    </xsl:for-each>
+    <xsl:for-each select="./Packages/Package">
+        <xsl:if test="count(error) > 0">
+            <tr>
+                <td align="left">
+                    <xsl:value-of select="@name"/>
+                </td>
+                <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+            </tr>
+        </xsl:if>
+    </xsl:for-each>
+    </table>
+    
+    <table width="100%"><tr><td>
+    <a name="NVpackages"><h2>Packages</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <xsl:for-each select="./Packages/Package">
+        <xsl:if test="count(error) = 0">
+            <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+            <xsl:value-of select="@name"/></a></h3>
+            
+            <table width="100%"><tr>
+                <td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+                <td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+                <td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+                <td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+                <td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+            </tr></table>
+            
+            <table width="100%" class="details">
+                <tr>
+                    <th>Abstract Classes</th>
+                    <th>Concrete Classes</th>
+                    <th>Used by Packages</th>
+                    <th>Uses Packages</th>
+                </tr>
+                <tr>
+                    <td valign="top" width="25%">
+                    <xsl:if test="count(AbstractClasses/Class)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="AbstractClasses/Class">
+                            <xsl:value-of select="node()"/><br/>
+                        </xsl:for-each>
+                    </td>
+                    <td valign="top" width="25%">
+                        <xsl:if test="count(ConcreteClasses/Class)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="ConcreteClasses/Class">
+                            <xsl:value-of select="node()"/><br/>
+                        </xsl:for-each>
+                    </td>
+                    <td valign="top" width="25%">
+                        <xsl:if test="count(UsedBy/Package)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="UsedBy/Package">
+                            <a>
+                                <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+                                <xsl:value-of select="node()"/>
+                            </a><br/>
+                        </xsl:for-each>
+                    </td>
+                    <td valign="top" width="25%">
+                        <xsl:if test="count(DependsUpon/Package)=0">
+                            <i>None</i>
+                        </xsl:if>
+                        <xsl:for-each select="DependsUpon/Package">
+                            <a>
+                                <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+                                <xsl:value-of select="node()"/>
+                            </a><br/>
+                        </xsl:for-each>
+                    </td>
+                </tr>
+            </table>
+        </xsl:if>
+    </xsl:for-each>
+    
+    <table width="100%"><tr><td>
+    <a name="NVcycles"><h2>Cycles</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <xsl:if test="count(Cycles/Package) = 0">
+        <p>There are no cyclic dependancies.</p>
+    </xsl:if>
+    <xsl:for-each select="Cycles/Package">
+        <h3><xsl:value-of select="@Name"/></h3><p>
+        <xsl:for-each select="Package">
+            <xsl:value-of select="."/><br/>
+        </xsl:for-each></p>
+    </xsl:for-each>
+    
+    <table width="100%"><tr><td>
+    <a name="NVexplanations"><h2>Explanations</h2></a>
+    </td><td align="right">
+    [<a href="#NVsummary">summary</a>]
+    [<a href="#NVpackages">packages</a>]
+    [<a href="#NVcycles">cycles</a>]
+    [<a href="#NVexplanations">explanations</a>]
+    </td></tr></table>
+    
+    <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+    
+    <h3><a name="EXnumber">Number of Classes</a></h3>
+        <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+    <h3><a name="EXafferent">Afferent Couplings</a></h3>
+        <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+    <h3><a name="EXefferent">Efferent Couplings</a></h3>
+        <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+    <h3><a name="EXabstractness">Abstractness</a></h3> 
+        <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+        <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+    <h3><a name="EXinstability">Instability</a></h3>
+        <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+        <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+    <h3><a name="EXdistance">Distance</a></h3>
+        <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+        <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+        <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+    
+    </body>
+    </html>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-frames-xalan1.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-frames-xalan1.xsl
new file mode 100644
index 0000000..3258412
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-frames-xalan1.xsl
@@ -0,0 +1,733 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="UTF-8"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="testsuites">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- process all packages -->
+    <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+        <xsl:call-template name="package">
+            <xsl:with-param name="name" select="@package"/>
+        </xsl:call-template>
+    </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+    <xsl:param name="name"/>
+    <xsl:variable name="package.dir">
+        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+        <xsl:if test="$name = ''">.</xsl:if>
+    </xsl:variable>
+    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:call-template name="classes.list">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:call-template name="package.summary">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+    <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+            <xsl:apply-templates select="." mode="class.details"/>
+        </redirect:write>
+        <xsl:if test="string-length(./system-out)!=0">
+          <redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.html">
+            <html>
+              <head>
+                <title>Standard Output from <xsl:value-of select="@name"/></title>
+              </head>
+              <body>
+                <pre><xsl:value-of select="./system-out"/></pre>
+              </body>
+            </html>
+          </redirect:write>
+        </xsl:if>
+        <xsl:if test="string-length(./system-err)!=0">
+          <redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.html">
+            <html>
+              <head>
+                <title>Standard Error from <xsl:value-of select="@name"/></title>
+              </head>
+              <body>
+                <pre><xsl:value-of select="./system-err"/></pre>
+              </body>
+            </html>
+          </redirect:write>
+        </xsl:if>
+    </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+    <head>
+        <title>Unit Test Results.</title>
+    </head>
+    <frameset cols="20%,80%">
+        <frameset rows="30%,70%">
+            <frame src="overview-frame.html" name="packageListFrame"/>
+            <frame src="allclasses-frame.html" name="classListFrame"/>
+        </frameset>
+        <frame src="overview-summary.html" name="classFrame"/>
+        <noframes>
+            <h2>Frame Alert</h2>
+            <p>
+                This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+            </p>
+        </noframes>
+    </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+    font:normal 68% verdana,arial,helvetica;
+    color:#000000;
+}
+table tr td, table tr th {
+    font-size: 68%;
+}
+table.details tr th{
+    font-weight: bold;
+    text-align:left;
+    background:#a6caf0;
+}
+table.details tr td{
+    background:#eeeee0;
+}
+
+p {
+    line-height:1.5em;
+    margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+    font-weight:bold; color:red;
+}
+.Failure {
+    font-weight:bold; color:purple;
+}
+.Properties {
+  text-align:right;
+}
+</xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every testsuite class.
+    It prints a summary of the testsuite and detailed information about
+    testcase methods.
+     ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+    <xsl:variable name="package.name" select="@package"/>
+    <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+    <html>
+        <head>
+          <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+       <script type="text/javascript" language="JavaScript">
+        var TestCases = new Array();
+        var cur;
+        <xsl:apply-templates select="properties"/>
+       </script>
+       <script type="text/javascript" language="JavaScript"><![CDATA[
+        function displayProperties (name) {
+          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+          var doc = win.document;
+          doc.open();
+          doc.write("<html><head><title>Properties of " + name + "</title>");
+          doc.write("<style type=\"text/css\">");
+          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+          doc.write("table tr td, table tr th { font-size: 68%; }");
+          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+          doc.write("</style>");
+          doc.write("</head><body>");
+          doc.write("<h3>Properties of " + name + "</h3>");
+          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+          doc.write("<table class='properties'>");
+          doc.write("<tr><th>Name</th><th>Value</th></tr>");
+          for (prop in TestCases[name]) {
+            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+          }
+          doc.write("</table>");
+          doc.write("</body></html>");
+          doc.close();
+          win.focus();
+        }
+      ]]>
+      </script>
+        </head>
+        <body>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="testsuite.test.header"/>
+                <xsl:apply-templates select="." mode="print.test"/>
+            </table>
+
+            <h2>Tests</h2>
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <xsl:call-template name="testcase.test.header"/>
+              <!--
+              test can even not be started at all (failure to load the class)
+              so report the error directly
+              -->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+                <xsl:apply-templates select="./testcase" mode="print.test"/>
+            </table>
+            <div class="Properties">
+                <a>
+                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+                    Properties »
+                </a>
+            </div>
+            <xsl:if test="string-length(./system-out)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.html</xsl:attribute>
+                        System.out »
+                    </a>
+                </div>
+            </xsl:if>
+            <xsl:if test="string-length(./system-err)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.html</xsl:attribute>
+                        System.err »
+                    </a>
+                </div>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+  <!--
+   Write properties into a JavaScript data structure.
+   This is based on the original idea by Erik Hatcher (ehatcher at apache.org)
+   -->
+  <xsl:template match="properties">
+    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+    <xsl:for-each select="property">
+    <xsl:sort select="@name"/>
+        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+    </xsl:for-each>
+  </xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every package.
+    It prints the name of all classes that belongs to this package.
+    @param name the package name to print classes.
+     ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <h2><a href="package-summary.html" target="classFrame">
+                            <xsl:value-of select="$name"/>
+                            <xsl:if test="$name = ''"><none></xsl:if>
+                        </a></h2>
+                    </td>
+                </tr>
+            </table>
+
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+                    <xsl:sort select="@name"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    Creates an all-classes.html file that contains a link to all package-summary.html
+    on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+    <html>
+        <head>
+            <title>All Unit Test Classes</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite" mode="all.classes">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+    <xsl:variable name="package.name" select="@package"/>
+    <tr>
+        <td nowrap="nowrap">
+            <a target="classFrame">
+                <xsl:attribute name="href">
+                    <xsl:if test="not($package.name='')">
+                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                    </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an html file that contains a link to all package-summary.html files on
+    each package existing on testsuites.
+    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+    <html>
+        <head>
+            <title>All Unit Test Packages</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+                    <xsl:sort select="@package"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+    <tr>
+        <td nowrap="nowrap">
+            <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+                <xsl:value-of select="@package"/>
+                <xsl:if test="@package = ''"><none></xsl:if>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+    <html>
+        <head>
+            <title>Unit Test Results: Summary</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+        <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+        <xsl:call-template name="pageHeader"/>
+        <h2>Summary</h2>
+        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <tr valign="top">
+            <th>Tests</th>
+            <th>Failures</th>
+            <th>Errors</th>
+            <th>Success rate</th>
+            <th>Time</th>
+        </tr>
+        <tr valign="top">
+            <xsl:attribute name="class">
+                <xsl:choose>
+                    <xsl:when test="$errorCount > 0">Error</xsl:when>
+                    <xsl:when test="$failureCount > 0">Failure</xsl:when>
+                    <xsl:otherwise>Pass</xsl:otherwise>
+                </xsl:choose>
+            </xsl:attribute>
+            <td><xsl:value-of select="$testCount"/></td>
+            <td><xsl:value-of select="$failureCount"/></td>
+            <td><xsl:value-of select="$errorCount"/></td>
+            <td>
+                <xsl:call-template name="display-percent">
+                    <xsl:with-param name="value" select="$successRate"/>
+                </xsl:call-template>
+            </td>
+            <td>
+                <xsl:call-template name="display-time">
+                    <xsl:with-param name="value" select="$timeCount"/>
+                </xsl:call-template>
+            </td>
+        </tr>
+        </table>
+        <table border="0" width="95%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+        </td>
+        </tr>
+        </table>
+
+        <h2>Packages</h2>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+            <xsl:call-template name="testsuite.test.header"/>
+            <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package" order="ascending"/>
+                <!-- get the node set containing all testsuites that have the same package -->
+                <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <tr valign="top">
+                    <!-- display a failure if there is any failure/error in the package -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when>
+                            <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when>
+                            <xsl:otherwise>Pass</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+                        <xsl:value-of select="@package"/>
+                        <xsl:if test="@package = ''"><none></xsl:if>
+                    </a></td>
+                    <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+                    </xsl:call-template>
+                    </td>
+                    <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
+                    <td><xsl:value-of select="$insamepackage/@hostname"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        </body>
+        </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="$name"/></h3>
+
+            <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="class.metrics.header"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+            </table-->
+
+            <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+            <xsl:if test="count($insamepackage) > 0">
+                <h2>Classes</h2>
+                <p>
+                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                    <xsl:call-template name="testsuite.test.header"/>
+                    <xsl:apply-templates select="$insamepackage" mode="print.test">
+                        <xsl:sort select="@name"/>
+                    </xsl:apply-templates>
+                </table>
+                </p>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+    <h1>Unit Test Results</h1>
+    <table width="100%">
+    <tr>
+        <td align="left"></td>
+        <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://ant.apache.org/">Ant</a>.</td>
+    </tr>
+    </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+        <th nowrap="nowrap">Time Stamp</th>
+        <th>Host</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+    <tr valign="top">
+        <th>Name</th>
+        <th>Status</th>
+        <th width="80%">Type</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@errors[.> 0]">Error</xsl:when>
+                <xsl:when test="@failures[.> 0]">Failure</xsl:when>
+                <xsl:otherwise>Pass</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:apply-templates select="@tests"/></td>
+        <td><xsl:apply-templates select="@errors"/></td>
+        <td><xsl:apply-templates select="@failures"/></td>
+        <td><xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+        <td><xsl:apply-templates select="@timestamp"/></td>
+        <td><xsl:apply-templates select="@hostname"/></td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="error">Error</xsl:when>
+                <xsl:when test="failure">Failure</xsl:when>
+                <xsl:otherwise>TableRowColor</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><xsl:value-of select="@name"/></td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+            so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <br/><br/>
+    <code>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the latter is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:param name="br"><br/></xsl:param>
+    <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-frames.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-frames.xsl
new file mode 100644
index 0000000..2149fe2
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-frames.xsl
@@ -0,0 +1,902 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="http://xml.apache.org/xalan/redirect"
+    xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="UTF-8"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+<xsl:param name="TITLE">Unit Test Results.</xsl:param>
+
+
+<xsl:template match="testsuites">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- create the all-tests.html at the root -->
+    <redirect:write file="{$output.dir}/all-tests.html">
+        <xsl:apply-templates select="." mode="all.tests"/>
+    </redirect:write>
+
+    <!-- create the alltests-fails.html at the root -->
+    <redirect:write file="{$output.dir}/alltests-fails.html">
+      <xsl:apply-templates select="." mode="all.tests">
+        <xsl:with-param name="type" select="'fails'"/>
+      </xsl:apply-templates>
+    </redirect:write>
+
+  <!-- create the alltests-errors.html at the root -->
+    <redirect:write file="{$output.dir}/alltests-errors.html">
+      <xsl:apply-templates select="." mode="all.tests">
+        <xsl:with-param name="type" select="'errors'"/>
+      </xsl:apply-templates>
+    </redirect:write>
+
+  <!-- process all packages -->
+    <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+        <xsl:call-template name="package">
+            <xsl:with-param name="name" select="@package"/>
+        </xsl:call-template>
+    </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+    <xsl:param name="name"/>
+    <xsl:variable name="package.dir">
+        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+        <xsl:if test="$name = ''">.</xsl:if>
+    </xsl:variable>
+    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:call-template name="classes.list">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:call-template name="package.summary">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+  <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+    <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}.html">
+      <xsl:apply-templates select="." mode="class.details"/>
+    </redirect:write>
+    <xsl:if test="string-length(./system-out)!=0">
+      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.html">
+        <html>
+          <head>
+            <title>Standard Output from <xsl:value-of select="@name"/></title>
+          </head>
+          <body>
+            <pre><xsl:value-of select="./system-out"/></pre>
+          </body>
+        </html>
+      </redirect:write>
+    </xsl:if>
+    <xsl:if test="string-length(./system-err)!=0">
+      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.html">
+        <html>
+          <head>
+            <title>Standard Error from <xsl:value-of select="@name"/></title>
+          </head>
+          <body>
+            <pre><xsl:value-of select="./system-err"/></pre>
+          </body>
+        </html>
+      </redirect:write>
+    </xsl:if>
+    <xsl:if test="@failures != 0">
+      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-fails.html">
+        <xsl:apply-templates select="." mode="class.details">
+          <xsl:with-param name="type" select="'fails'"/>
+        </xsl:apply-templates>
+      </redirect:write>
+    </xsl:if>
+    <xsl:if test="@errors != 0">
+      <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-errors.html">
+        <xsl:apply-templates select="." mode="class.details">
+          <xsl:with-param name="type" select="'errors'"/>
+        </xsl:apply-templates>
+      </redirect:write>
+    </xsl:if>
+  </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+    <head>
+        <title><xsl:value-of select="$TITLE"/></title>
+    </head>
+    <frameset cols="20%,80%">
+        <frameset rows="30%,70%">
+            <frame src="overview-frame.html" name="packageListFrame"/>
+            <frame src="allclasses-frame.html" name="classListFrame"/>
+        </frameset>
+        <frame src="overview-summary.html" name="classFrame"/>
+        <noframes>
+            <h2>Frame Alert</h2>
+            <p>
+                This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+            </p>
+        </noframes>
+    </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+    font:normal 68% verdana,arial,helvetica;
+    color:#000000;
+}
+table tr td, table tr th {
+    font-size: 68%;
+}
+table.details tr th{
+    font-weight: bold;
+    text-align:left;
+    background:#a6caf0;
+}
+table.details tr td{
+    background:#eeeee0;
+}
+
+p {
+    line-height:1.5em;
+    margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+    font-weight:bold; color:red;
+}
+.Failure {
+    font-weight:bold; color:purple;
+}
+.Properties {
+  text-align:right;
+}
+</xsl:template>
+
+<!-- Create list of all/failed/errored tests -->
+<xsl:template match="testsuites" mode="all.tests">
+    <xsl:param name="type" select="'all'"/>
+    <html>
+	<xsl:variable name="title">
+	    <xsl:choose>
+		<xsl:when test="$type = 'fails'">
+		    <xsl:text>All Failures</xsl:text>
+		</xsl:when>
+		<xsl:when test="$type = 'errors'">
+		    <xsl:text>All Errors</xsl:text>
+		</xsl:when>
+		<xsl:otherwise>
+		    <xsl:text>All Tests</xsl:text>
+		</xsl:otherwise>
+	    </xsl:choose>
+	</xsl:variable>
+	<head>
+	    <title>Unit Test Results: <xsl:value-of select="$title"/></title>
+	    <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+	</head>
+	<body>
+	    <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+            <xsl:call-template name="pageHeader"/>
+            <h2><xsl:value-of select="$title"/></h2>
+
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+		<xsl:call-template name="testcase.test.header">
+		    <xsl:with-param name="show.class" select="'yes'"/>
+		</xsl:call-template>
+		<!--
+                test can even not be started at all (failure to load the class)
+		so report the error directly
+		-->
+              <xsl:if test="./error">
+                <tr class="Error">
+                  <td colspan="4">
+                    <xsl:apply-templates select="./error"/>
+                  </td>
+                </tr>
+              </xsl:if>
+              <xsl:choose>
+                <xsl:when test="$type = 'fails'">
+                  <xsl:apply-templates select=".//testcase[failure]" mode="print.test">
+                    <xsl:with-param name="show.class" select="'yes'"/>
+                  </xsl:apply-templates>
+                </xsl:when>
+                <xsl:when test="$type = 'errors'">
+                  <xsl:apply-templates select=".//testcase[error]" mode="print.test">
+                    <xsl:with-param name="show.class" select="'yes'"/>
+                  </xsl:apply-templates>
+                </xsl:when>
+                <xsl:otherwise>
+                  <xsl:apply-templates select=".//testcase" mode="print.test">
+                    <xsl:with-param name="show.class" select="'yes'"/>
+                  </xsl:apply-templates>
+                </xsl:otherwise>
+              </xsl:choose>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every testsuite class.
+    It prints a summary of the testsuite and detailed information about
+    testcase methods.
+     ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+    <xsl:param name="type" select="'all'"/>
+    <xsl:variable name="package.name" select="@package"/>
+    <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+    <html>
+        <head>
+          <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+       <script type="text/javascript" language="JavaScript">
+        var TestCases = new Array();
+        var cur;
+        <xsl:apply-templates select="properties"/>
+       </script>
+       <script type="text/javascript" language="JavaScript"><![CDATA[
+        function displayProperties (name) {
+          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+          var doc = win.document;
+          doc.open();
+          doc.write("<html><head><title>Properties of " + name + "</title>");
+          doc.write("<style type=\"text/css\">");
+          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+          doc.write("table tr td, table tr th { font-size: 68%; }");
+          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+          doc.write("</style>");
+          doc.write("</head><body>");
+          doc.write("<h3>Properties of " + name + "</h3>");
+          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+          doc.write("<table class='properties'>");
+          doc.write("<tr><th>Name</th><th>Value</th></tr>");
+          for (prop in TestCases[name]) {
+            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+          }
+          doc.write("</table>");
+          doc.write("</body></html>");
+          doc.close();
+          win.focus();
+        }
+      ]]>
+      </script>
+        </head>
+        <body>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="testsuite.test.header"/>
+                <xsl:apply-templates select="." mode="print.test"/>
+            </table>
+
+	    <xsl:choose>
+		<xsl:when test="$type = 'fails'">
+		    <h2>Failures</h2>
+		</xsl:when>
+		<xsl:when test="$type = 'errors'">
+		    <h2>Errors</h2>
+		</xsl:when>
+		<xsl:otherwise>
+		    <h2>Tests</h2>
+		</xsl:otherwise>
+	    </xsl:choose>
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+		<xsl:call-template name="testcase.test.header"/>
+		<!--
+                test can even not be started at all (failure to load the class)
+		so report the error directly
+		-->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+		<xsl:choose>
+		    <xsl:when test="$type = 'fails'">
+			<xsl:apply-templates select="./testcase[failure]" mode="print.test"/>
+		    </xsl:when>
+		    <xsl:when test="$type = 'errors'">
+			<xsl:apply-templates select="./testcase[error]" mode="print.test"/>
+		    </xsl:when>
+		    <xsl:otherwise>
+			<xsl:apply-templates select="./testcase" mode="print.test"/>
+		    </xsl:otherwise>
+		</xsl:choose>
+            </table>
+            <div class="Properties">
+                <a>
+                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+                    Properties »
+                </a>
+            </div>
+            <xsl:if test="string-length(./system-out)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-out.html</xsl:attribute>
+                        System.out »
+                    </a>
+                </div>
+            </xsl:if>
+            <xsl:if test="string-length(./system-err)!=0">
+                <div class="Properties">
+                    <a>
+                        <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-err.html</xsl:attribute>
+                        System.err »
+                    </a>
+                </div>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+  <!--
+   Write properties into a JavaScript data structure.
+   This is based on the original idea by Erik Hatcher (ehatcher at apache.org)
+   -->
+  <xsl:template match="properties">
+    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+    <xsl:for-each select="property">
+    <xsl:sort select="@name"/>
+        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+    </xsl:for-each>
+  </xsl:template>
+
+
+<!-- ======================================================================
+    This page is created for every package.
+    It prints the name of all classes that belongs to this package.
+    @param name the package name to print classes.
+     ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <h2><a href="package-summary.html" target="classFrame">
+                            <xsl:value-of select="$name"/>
+                            <xsl:if test="$name = ''"><none></xsl:if>
+                        </a></h2>
+                    </td>
+                </tr>
+            </table>
+
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+                    <xsl:sort select="@name"/>
+                    <tr>
+                        <td nowrap="nowrap">
+                            <a href="{@id}_{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+                        </td>
+                    </tr>
+                </xsl:for-each>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    Creates an all-classes.html file that contains a link to all package-summary.html
+    on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+    <html>
+        <head>
+            <title>All Unit Test Classes</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite" mode="all.classes">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+    <xsl:variable name="package.name" select="@package"/>
+    <tr>
+        <td nowrap="nowrap">
+            <a target="classFrame">
+                <xsl:attribute name="href">
+                    <xsl:if test="not($package.name='')">
+                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                    </xsl:if><xsl:value-of select="@id"/>_<xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an html file that contains a link to all package-summary.html files on
+    each package existing on testsuites.
+    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+    <html>
+        <head>
+            <title>All Unit Test Packages</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+            <table width="100%">
+                <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+                    <xsl:sort select="@package"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+    <tr>
+        <td nowrap="nowrap">
+            <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+                <xsl:value-of select="@package"/>
+                <xsl:if test="@package = ''"><none></xsl:if>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+    <html>
+        <head>
+            <title>Unit Test Results: Summary</title>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+        <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+        <xsl:call-template name="pageHeader"/>
+        <h2>Summary</h2>
+        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <tr valign="top">
+            <th>Tests</th>
+            <th>Failures</th>
+            <th>Errors</th>
+            <th>Success rate</th>
+            <th>Time</th>
+        </tr>
+        <tr valign="top">
+            <xsl:attribute name="class">
+                <xsl:choose>
+                    <xsl:when test="$errorCount > 0">Error</xsl:when>
+                    <xsl:when test="$failureCount > 0">Failure</xsl:when>
+                    <xsl:otherwise>Pass</xsl:otherwise>
+                </xsl:choose>
+            </xsl:attribute>
+            <td><a title="Display all tests" href="all-tests.html"><xsl:value-of select="$testCount"/></a></td>
+            <td><a title="Display all failures" href="alltests-fails.html"><xsl:value-of select="$failureCount"/></a></td>
+            <td><a title="Display all errors" href="alltests-errors.html"><xsl:value-of select="$errorCount"/></a></td>
+            <td>
+                <xsl:call-template name="display-percent">
+                    <xsl:with-param name="value" select="$successRate"/>
+                </xsl:call-template>
+            </td>
+            <td>
+                <xsl:call-template name="display-time">
+                    <xsl:with-param name="value" select="$timeCount"/>
+                </xsl:call-template>
+            </td>
+        </tr>
+        </table>
+        <table border="0" width="95%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+        </td>
+        </tr>
+        </table>
+
+        <h2>Packages</h2>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+            <xsl:call-template name="testsuite.test.header"/>
+            <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package" order="ascending"/>
+                <!-- get the node set containing all testsuites that have the same package -->
+                <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <tr valign="top">
+                    <!-- display a failure if there is any failure/error in the package -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when>
+                            <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when>
+                            <xsl:otherwise>Pass</xsl:otherwise>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+                        <xsl:value-of select="@package"/>
+                        <xsl:if test="@package = ''"><none></xsl:if>
+                    </a></td>
+                    <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+                    <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+                    </xsl:call-template>
+                    </td>
+                    <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
+                    <td><xsl:value-of select="$insamepackage/@hostname"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        </body>
+        </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+    <xsl:param name="name"/>
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="$name"/></h3>
+
+            <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+                <xsl:call-template name="class.metrics.header"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+            </table-->
+
+            <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+            <xsl:if test="count($insamepackage) > 0">
+                <h2>Classes</h2>
+                <p>
+                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                    <xsl:call-template name="testsuite.test.header"/>
+                    <xsl:apply-templates select="$insamepackage" mode="print.test">
+                        <xsl:sort select="@name"/>
+                    </xsl:apply-templates>
+                </table>
+                </p>
+            </xsl:if>
+        </body>
+    </html>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+    <h1><xsl:value-of select="$TITLE"/></h1>
+    <table width="100%">
+    <tr>
+        <td align="left"></td>
+        <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://ant.apache.org/">Ant</a>.</td>
+    </tr>
+    </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+        <th nowrap="nowrap">Time Stamp</th>
+        <th>Host</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+    <xsl:param name="show.class" select="''"/>
+    <tr valign="top">
+	<xsl:if test="boolean($show.class)">
+	    <th>Class</th>
+	</xsl:if>
+        <th>Name</th>
+        <th>Status</th>
+        <th width="80%">Type</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@errors[.> 0]">Error</xsl:when>
+                <xsl:when test="@failures[.> 0]">Failure</xsl:when>
+                <xsl:otherwise>Pass</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><a title="Display all tests" href="{@id}_{@name}.html"><xsl:value-of select="@name"/></a></td>
+        <td><a title="Display all tests" href="{@id}_{@name}.html"><xsl:apply-templates select="@tests"/></a></td>
+        <td>
+	    <xsl:choose>
+		<xsl:when test="@errors != 0">
+		    <a title="Display only errors" href="{@id}_{@name}-errors.html"><xsl:apply-templates select="@errors"/></a>
+		</xsl:when>
+		<xsl:otherwise>
+		    <xsl:apply-templates select="@errors"/>
+		</xsl:otherwise>
+	    </xsl:choose>
+	</td>
+        <td>
+	    <xsl:choose>
+		<xsl:when test="@failures != 0">
+		    <a title="Display only failures" href="{@id}_{@name}-fails.html"><xsl:apply-templates select="@failures"/></a>
+		</xsl:when>
+		<xsl:otherwise>
+		    <xsl:apply-templates select="@failures"/>
+		</xsl:otherwise>
+	    </xsl:choose>
+	</td>
+        <td><xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+        <td><xsl:apply-templates select="@timestamp"/></td>
+        <td><xsl:apply-templates select="@hostname"/></td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <xsl:param name="show.class" select="''"/>
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="error">Error</xsl:when>
+                <xsl:when test="failure">Failure</xsl:when>
+                <xsl:otherwise>TableRowColor</xsl:otherwise>
+            </xsl:choose>
+        </xsl:attribute>
+	<xsl:variable name="class.href">
+	    <xsl:value-of select="concat(translate(../@package,'.','/'), '/', ../@id, '_', ../@name, '.html')"/>
+	</xsl:variable>
+	<xsl:if test="boolean($show.class)">
+	    <td><a href="{$class.href}"><xsl:value-of select="../@name"/></a></td>
+	</xsl:if>
+        <td>
+	    <a name="{@name}"/>
+	    <xsl:choose>
+		<xsl:when test="boolean($show.class)">
+		    <a href="{concat($class.href, '#', @name)}"><xsl:value-of select="@name"/></a>
+		</xsl:when>
+		<xsl:otherwise>
+		    <xsl:value-of select="@name"/>
+		</xsl:otherwise>
+	    </xsl:choose>
+	</td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+            so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <br/><br/>
+    <code>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the latter is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:choose>
+      <xsl:when test="contains($word, '&#xa;')">
+        <xsl:value-of select="substring-before($word, '&#xa;')"/>
+        <br/>
+        <xsl:call-template name="br-replace">
+          <xsl:with-param name="word" select="substring-after($word, '&#xa;')"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:value-of select="$word"/>
+      </xsl:otherwise>
+    </xsl:choose>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-noframes.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-noframes.xsl
new file mode 100644
index 0000000..0da2a68
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/junit-noframes.xsl
@@ -0,0 +1,478 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+        xmlns:lxslt="http://xml.apache.org/xslt"
+        xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils">
+<xsl:output method="html" indent="yes" encoding="UTF-8"
+  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+
+<xsl:param name="TITLE">Unit Test Results.</xsl:param>
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a non-framed report that can be useful to send via
+ e-mail or such.
+
+-->
+<xsl:template match="testsuites">
+    <html>
+        <head>
+            <title><xsl:value-of select="$TITLE"/></title>
+    <style type="text/css">
+      body {
+        font:normal 68% verdana,arial,helvetica;
+        color:#000000;
+      }
+      table tr td, table tr th {
+          font-size: 68%;
+      }
+      table.details tr th{
+        font-weight: bold;
+        text-align:left;
+        background:#a6caf0;
+      }
+      table.details tr td{
+        background:#eeeee0;
+      }
+
+      p {
+        line-height:1.5em;
+        margin-top:0.5em; margin-bottom:1.0em;
+      }
+      h1 {
+        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+      }
+      h2 {
+        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+      }
+      h3 {
+        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+      }
+      h4 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h5 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      h6 {
+        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+      }
+      .Error {
+        font-weight:bold; color:red;
+      }
+      .Failure {
+        font-weight:bold; color:purple;
+      }
+      .Properties {
+        text-align:right;
+      }
+      </style>
+      <script type="text/javascript" language="JavaScript">
+        var TestCases = new Array();
+        var cur;
+        <xsl:for-each select="./testsuite">
+            <xsl:apply-templates select="properties"/>
+        </xsl:for-each>
+
+       </script>
+       <script type="text/javascript" language="JavaScript"><![CDATA[
+        function displayProperties (name) {
+          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+          var doc = win.document;
+          doc.open();
+          doc.write("<html><head><title>Properties of " + name + "</title>");
+          doc.write("<style>")
+          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+          doc.write("table tr td, table tr th { font-size: 68%; }");
+          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+          doc.write("</style>");
+          doc.write("</head><body>");
+          doc.write("<h3>Properties of " + name + "</h3>");
+          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+          doc.write("<table class='properties'>");
+          doc.write("<tr><th>Name</th><th>Value</th></tr>");
+          for (prop in TestCases[name]) {
+            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+          }
+          doc.write("</table>");
+          doc.write("</body></html>");
+          doc.close();
+          win.focus();
+        }
+      ]]>
+      </script>
+        </head>
+        <body>
+            <a name="top"></a>
+            <xsl:call-template name="pageHeader"/>
+
+            <!-- Summary part -->
+            <xsl:call-template name="summary"/>
+            <hr size="1" width="95%" align="left"/>
+
+            <!-- Package List part -->
+            <xsl:call-template name="packagelist"/>
+            <hr size="1" width="95%" align="left"/>
+
+            <!-- For each package create its part -->
+            <xsl:call-template name="packages"/>
+            <hr size="1" width="95%" align="left"/>
+
+            <!-- For each class create the  part -->
+            <xsl:call-template name="classes"/>
+
+        </body>
+    </html>
+</xsl:template>
+
+
+
+    <!-- ================================================================== -->
+    <!-- Write a list of all packages with an hyperlink to the anchor of    -->
+    <!-- of the package name.                                               -->
+    <!-- ================================================================== -->
+    <xsl:template name="packagelist">
+        <h2>Packages</h2>
+        Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+            <xsl:call-template name="testsuite.test.header"/>
+            <!-- list all packages recursively -->
+            <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package"/>
+                <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
+                <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
+                <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
+                <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
+
+                <!-- write a summary for the package -->
+                <tr valign="top">
+                    <!-- set a nice color depending if there is an error/failure -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="$failureCount > 0">Failure</xsl:when>
+                            <xsl:when test="$errorCount > 0">Error</xsl:when>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
+                    <td><xsl:value-of select="$testCount"/></td>
+                    <td><xsl:value-of select="$errorCount"/></td>
+                    <td><xsl:value-of select="$failureCount"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="$timeCount"/>
+                    </xsl:call-template>
+                    </td>
+                    <td><xsl:value-of select="$testsuites-in-package/@timestamp"/></td>
+                    <td><xsl:value-of select="$testsuites-in-package/@hostname"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+    </xsl:template>
+
+
+    <!-- ================================================================== -->
+    <!-- Write a package level report                                       -->
+    <!-- It creates a table with values from the document:                  -->
+    <!-- Name | Tests | Errors | Failures | Time                            -->
+    <!-- ================================================================== -->
+    <xsl:template name="packages">
+        <!-- create an anchor to this package name -->
+        <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+            <xsl:sort select="@package"/>
+                <a name="{@package}"></a>
+                <h3>Package <xsl:value-of select="@package"/></h3>
+
+                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+                    <xsl:call-template name="testsuite.test.header"/>
+
+                    <!-- match the testsuites of this package -->
+                    <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
+                </table>
+                <a href="#top">Back to top</a>
+                <p/>
+                <p/>
+        </xsl:for-each>
+    </xsl:template>
+
+    <xsl:template name="classes">
+        <xsl:for-each select="testsuite">
+            <xsl:sort select="@name"/>
+            <!-- create an anchor to this class name -->
+            <a name="{@name}"></a>
+            <h3>TestCase <xsl:value-of select="@name"/></h3>
+
+            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+              <xsl:call-template name="testcase.test.header"/>
+              <!--
+              test can even not be started at all (failure to load the class)
+              so report the error directly
+              -->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+                <xsl:apply-templates select="./testcase" mode="print.test"/>
+            </table>
+            <div class="Properties">
+                <a>
+                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+                    Properties »
+                </a>
+            </div>
+            <p/>
+
+            <a href="#top">Back to top</a>
+        </xsl:for-each>
+    </xsl:template>
+
+    <xsl:template name="summary">
+        <h2>Summary</h2>
+        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+        <tr valign="top">
+            <th>Tests</th>
+            <th>Failures</th>
+            <th>Errors</th>
+            <th>Success rate</th>
+            <th>Time</th>
+        </tr>
+        <tr valign="top">
+            <xsl:attribute name="class">
+                <xsl:choose>
+                    <xsl:when test="$failureCount > 0">Failure</xsl:when>
+                    <xsl:when test="$errorCount > 0">Error</xsl:when>
+                </xsl:choose>
+            </xsl:attribute>
+            <td><xsl:value-of select="$testCount"/></td>
+            <td><xsl:value-of select="$failureCount"/></td>
+            <td><xsl:value-of select="$errorCount"/></td>
+            <td>
+                <xsl:call-template name="display-percent">
+                    <xsl:with-param name="value" select="$successRate"/>
+                </xsl:call-template>
+            </td>
+            <td>
+                <xsl:call-template name="display-time">
+                    <xsl:with-param name="value" select="$timeCount"/>
+                </xsl:call-template>
+            </td>
+
+        </tr>
+        </table>
+        <table border="0" width="95%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
+        </td>
+        </tr>
+        </table>
+    </xsl:template>
+
+  <!--
+   Write properties into a JavaScript data structure.
+   This is based on the original idea by Erik Hatcher (ehatcher at apache.org)
+   -->
+  <xsl:template match="properties">
+    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+    <xsl:for-each select="property">
+    <xsl:sort select="@name"/>
+        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+    </xsl:for-each>
+  </xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+    <h1><xsl:value-of select="$TITLE"/></h1>
+    <table width="100%">
+    <tr>
+        <td align="left"></td>
+        <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://ant.apache.org/ant'>Ant</a>.</td>
+    </tr>
+    </table>
+    <hr size="1"/>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+    <tr valign="top">
+        <th width="80%">Name</th>
+        <th>Tests</th>
+        <th>Errors</th>
+        <th>Failures</th>
+        <th nowrap="nowrap">Time(s)</th>
+        <th nowrap="nowrap">Time Stamp</th>
+        <th>Host</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+    <tr valign="top">
+        <th>Name</th>
+        <th>Status</th>
+        <th width="80%">Type</th>
+        <th nowrap="nowrap">Time(s)</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <!-- set a nice color depending if there is an error/failure -->
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@failures[.> 0]">Failure</xsl:when>
+                <xsl:when test="@errors[.> 0]">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+
+        <!-- print testsuite information -->
+        <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:value-of select="@tests"/></td>
+        <td><xsl:value-of select="@errors"/></td>
+        <td><xsl:value-of select="@failures"/></td>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+        <td><xsl:apply-templates select="@timestamp"/></td>
+        <td><xsl:apply-templates select="@hostname"/></td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="failure | error">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+        <td><xsl:value-of select="@name"/></td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the tescase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <code>
+        <br/><br/>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the later is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:choose>
+      <xsl:when test="contains($word, '&#xa;')">
+        <xsl:value-of select="substring-before($word, '&#xa;')"/>
+        <br/>
+        <xsl:call-template name="br-replace">
+          <xsl:with-param name="word" select="substring-after($word, '&#xa;')"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+	<xsl:value-of select="$word"/>
+      </xsl:otherwise>
+    </xsl:choose>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/log.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/log.xsl
new file mode 100644
index 0000000..26ad1fb
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/log.xsl
@@ -0,0 +1,203 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   
+-->
+ 
+<!--
+
+  The purpose have this XSL is to provide a nice way to look at the output
+  from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger )
+  
+  @author <a href="mailto:sbailliez at apache.org">Stephane Bailliez</a>
+  
+-->
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+<xsl:template match="/">
+<html>
+  <head>
+    <style type="text/css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin: 0;
+      font:normal 100% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    table.status {
+      font:bold 80% arial,helvetica,sanserif;
+      background-color:#525D76;
+      color:#ffffff;
+    }
+    table.log tr td, tr th {
+      font-size: 80%;
+    }
+    .error {
+      color:red;
+    }
+    .warn {
+      color:brown;
+    }
+    .info {
+      color:gray;
+    }
+    .debug{
+      color:gray;
+    }
+    .failed {
+      font-size:80%;
+      background-color: red;
+      color:#FFFFFF;
+      font-weight: bold
+    }
+    .complete {
+      font-size:80%;
+      background-color: #525D76;
+      color:#FFFFFF;
+      font-weight: bold
+    }
+    .a td { 
+      background: #efefef;
+    }
+    .b td { 
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      border: none
+    }
+    h3 {
+      font:bold 80% arial,helvetica,sanserif;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+    </style>
+  </head>
+  <body>
+    <!-- jakarta logo -->
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+    <tr>
+      <td valign="top" class="bannercell">
+        <a href="http://jakarta.apache.org/">
+        <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+        </a>
+      </td>
+      <td style="text-align:right;vertical-align:bottom">
+        <a href="http://ant.apache.org/">Apache Ant</a>
+      </td>
+    </tr>
+    </table>
+      
+    <table border="0" width="100%">
+    <tr><td><hr noshade="yes" size="1"/></td></tr>
+    </table>
+
+    <xsl:apply-templates select="build"/>
+
+  </body>
+</html>
+</xsl:template>
+
+<xsl:template match="build">
+  <!-- build status -->
+  <table width="100%">
+    <xsl:attribute name="class">
+      <xsl:if test="@error">failed</xsl:if>
+      <xsl:if test="not(@error)">complete</xsl:if>
+    </xsl:attribute>
+    <tr>
+      <xsl:if test="@error">
+        <td nowrap="yes">Build Failed</td> 
+      </xsl:if>
+      <xsl:if test="not(@error)">
+        <td nowrap="yes">Build Complete</td>
+      </xsl:if>
+        <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td>
+    </tr>
+    <tr>
+      <td colspan="2">
+        <xsl:if test="@error">
+          <tt><xsl:value-of select="@error"/></tt><br/>
+          <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i>
+        </xsl:if>
+      </td>
+    </tr>
+  </table>
+  <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%">
+    <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.file')], '->')"/></td></tr>
+    <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.version')], '->')"/></td></tr>
+    <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'java.vm.version')], '->')"/></td></tr>
+    <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(//message[contains(text(),'os.name')], '->')"/></td></tr>
+  </table>
+  <!-- build information -->
+  <h3>Build events</h3>
+  <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%">
+  <tr>
+    <th nowrap="yes" align="left" width="1%">target</th>
+    <th nowrap="yes" align="left" width="1%">task</th>
+    <th nowrap="yes" align="left">message</th>
+  </tr>
+  <xsl:apply-templates select=".//message[@priority != 'debug']"/>
+  </table>
+  <p>
+  <!-- stacktrace -->
+  <xsl:if test="stacktrace">
+  <a name="stacktrace"/>
+  <h3>Error details</h3>
+  <table width="100%">
+    <tr><td>
+      <pre><xsl:value-of select="stacktrace"/></pre>
+    </td></tr>
+  </table>
+  </xsl:if>
+  </p>
+</xsl:template>
+
+<!-- report every message but those with debug priority -->
+<xsl:template match="message[@priority!='debug']">
+  <tr valign="top">
+    <!-- alternated row style -->
+    <xsl:attribute name="class">
+      <xsl:if test="position() mod 2 = 1">a</xsl:if>
+      <xsl:if test="position() mod 2 = 0">b</xsl:if>
+    </xsl:attribute>
+    <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td>
+    <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td>
+    <td class="{@priority}" nowrap="yes">
+            <xsl:value-of select="text()"/>
+    </td>
+  </tr>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/maudit-frames.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/maudit-frames.xsl
new file mode 100644
index 0000000..883324d
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/maudit-frames.xsl
@@ -0,0 +1,503 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt"
+    xmlns:redirect="org.apache.xalan.lib.Redirect"
+    extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<!--
+
+    Stylesheet to transform an XML file generated by the Ant MAudit task into
+    a set of JavaDoc-like HTML page to make pages more convenient to be browsed.
+
+    It use the Xalan redirect extension to write to multiple output files.
+
+    @author Stephane Bailliez <a href="mailto:sbailliez at apache.org"/>
+-->
+
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="classes">
+    <!-- create the index.html -->
+    <redirect:write file="{$output.dir}/index.html">
+        <xsl:call-template name="index.html"/>
+    </redirect:write>
+
+    <!-- create the stylesheet.css -->
+    <redirect:write file="{$output.dir}/stylesheet.css">
+        <xsl:call-template name="stylesheet.css"/>
+    </redirect:write>
+
+    <!-- create the overview-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-summary.html">
+        <xsl:apply-templates select="." mode="overview.packages"/>
+    </redirect:write>
+
+    <!-- create the all-packages.html at the root -->
+    <redirect:write file="{$output.dir}/overview-frame.html">
+        <xsl:apply-templates select="." mode="all.packages"/>
+    </redirect:write>
+
+    <!-- create the all-classes.html at the root -->
+    <redirect:write file="{$output.dir}/allclasses-frame.html">
+        <xsl:apply-templates select="." mode="all.classes"/>
+    </redirect:write>
+
+    <!-- process all packages -->
+    <xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]">
+        <xsl:call-template name="package">
+            <xsl:with-param name="name" select="@package"/>
+        </xsl:call-template>
+    </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+    <xsl:param name="name"/>
+    <xsl:variable name="package.dir">
+        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+        <xsl:if test="$name = ''">.</xsl:if>
+    </xsl:variable>
+    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+    <!-- create a classes-list.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+        <xsl:call-template name="classes.list">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- create a package-summary.html in the package directory -->
+    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+        <xsl:call-template name="package.summary">
+            <xsl:with-param name="name" select="$name"/>
+        </xsl:call-template>
+    </redirect:write>
+
+    <!-- for each class, creates a @name.html -->
+    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+    <xsl:for-each select="/classes/class[@package = $name]">
+        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+            <xsl:apply-templates select="." mode="class.details"/>
+        </redirect:write>
+    </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<HTML>
+    <HEAD><TITLE>Audit Results.</TITLE></HEAD>
+    <FRAMESET cols="20%,80%">
+        <FRAMESET rows="30%,70%">
+            <FRAME src="overview-frame.html" name="packageListFrame"/>
+            <FRAME src="allclasses-frame.html" name="classListFrame"/>
+        </FRAMESET>
+        <FRAME src="overview-summary.html" name="classFrame"/>
+    </FRAMESET>
+    <noframes>
+        <H2>Frame Alert</H2>
+        <P>
+        This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+        </P>
+    </noframes>
+</HTML>
+</xsl:template>
+
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin-left: 10;
+      margin-right: 10;
+      font:normal 80% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    .a td {
+      background: #efefef;
+    }
+    .b td {
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      font-weight:bold;
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      font-size:100%;
+      border: none
+    }
+    table.log tr td, tr th {
+
+    }
+    h2 {
+      font-weight:bold;
+      font-size:140%;
+      margin-bottom: 5;
+    }
+    h3 {
+      font-size:100%;
+      font-weight:bold;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+</xsl:template>
+
+
+<!-- print the violations of the class -->
+<xsl:template match="class" mode="class.details">
+    <xsl:variable name="package.name" select="@package"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$package.name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <xsl:call-template name="pageHeader"/>
+            <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+            <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:call-template name="class.audit.header"/>
+                <xsl:apply-templates select="." mode="print.audit"/>
+            </table>
+
+            <H3>Violations</H3>
+            <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:call-template name="violation.audit.header"/>
+                <xsl:apply-templates select="./violation" mode="print.audit">
+                    <xsl:sort data-type="number" select="@line"/>
+                </xsl:apply-templates>
+            </table>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+    <xsl:param name="name"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <table width="100%">
+                <tr>
+                    <td nowrap="nowrap">
+                        <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2>
+                    </td>
+                </tr>
+            </table>
+
+            <h2>Classes</h2>
+            <TABLE WIDTH="100%">
+                <xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </TABLE>
+        </BODY>
+    </HTML>
+</xsl:template>
+<!-- the class to list -->
+<xsl:template match="class" mode="classes.list">
+    <tr>
+        <td nowrap="nowrap">
+            <!-- @bug naming to fix for inner classes -->
+            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an all-classes.html file that contains a link to all package-summary.html
+    on each class.
+-->
+<xsl:template match="classes" mode="all.classes">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2>Classes</h2>
+            <table width="100%">
+                <xsl:apply-templates select=".//class" mode="all.classes">
+                    <xsl:sort select="@name"/>
+                </xsl:apply-templates>
+            </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+    <!-- (ancestor::package)[last()] is buggy in MSXML3 ? -->
+    <xsl:variable name="package.name" select="@package"/>
+    <tr>
+        <td nowrap="nowrap">
+            <a target="classFrame">
+                <xsl:attribute name="href">
+                    <xsl:if test="not($package.name='')">
+                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+                    </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+                </xsl:attribute>
+                <xsl:value-of select="@name"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<!--
+    Creates an html file that contains a link to all package-summary.html files on
+    each package existing on testsuites.
+    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="classes" mode="all.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body>
+            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+            <h2>Packages</h2>
+                <table width="100%">
+                    <xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages">
+                        <xsl:sort select="@package" order="ascending"/>
+                    </xsl:apply-templates>
+                </table>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.packages">
+    <tr>
+        <td nowrap="nowrap">
+            <a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+                <xsl:value-of select="@package"/>
+            </a>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="classes" mode="overview.packages">
+    <html>
+        <head>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name"/>
+            </xsl:call-template>
+        </head>
+        <body onload="open('allclasses-frame.html','classListFrame')">
+        <xsl:call-template name="pageHeader"/>
+        <h3>Summary</h3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <tr>
+            <th>Audited classes</th>
+            <th>Reported classes</th>
+            <th>Violations</th>
+        </tr>
+        <tr class="a">
+            <td><xsl:value-of select="@audited"/></td>
+            <td><xsl:value-of select="@reported"/></td>
+            <td><xsl:value-of select="@violations"/></td>
+        </tr>
+        </table>
+        <table border="0" width="100%">
+        <tr>
+        <td style="text-align: justify;">
+        Note: Rules checked have originated from style guidelines suggested by the language designers,
+        experience from the Java development community and insite experience. Violations are generally
+        reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x)
+        and Metamata Audit rules (x.x).
+        Please consult these documents for additional information about violations.
+        <p/>
+        Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta.
+        <p/>
+        One should note that these violations do not necessary underline errors but should be used
+        as an indication for <i>possible</i> errors. As always, use your best judgment and review
+        them carefully, it might save you hours of debugging.
+        </td>
+        </tr>
+        </table>
+
+        <h3>Packages</h3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+            <xsl:call-template name="class.audit.header"/>
+            <xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]">
+                <xsl:sort select="@package" order="ascending"/>
+                <tr>
+          <xsl:call-template name="alternate-row"/>
+                    <td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td>
+                    <td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td>
+                </tr>
+            </xsl:for-each>
+        </table>
+        <xsl:call-template name="pageFooter"/>
+        </body>
+        </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+    <xsl:param name="name"/>
+    <HTML>
+        <HEAD>
+            <xsl:call-template name="create.stylesheet.link">
+                <xsl:with-param name="package.name" select="$name"/>
+            </xsl:call-template>
+        </HEAD>
+        <BODY>
+            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+            <xsl:call-template name="pageHeader"/>
+            <h3>Package <xsl:value-of select="$name"/></h3>
+
+            <!--table border="0" cellpadding="5" cellspacing="2" width="100%">
+                <xsl:call-template name="class.metrics.header"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+            </table-->
+
+            <xsl:if test="count(/classes/class[./@package = $name]) > 0">
+                <H3>Classes</H3>
+                <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+                    <xsl:call-template name="class.audit.header"/>
+                    <xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit">
+                        <xsl:sort select="@name"/>
+                    </xsl:apply-templates>
+                </table>
+            </xsl:if>
+            <xsl:call-template name="pageFooter"/>
+        </BODY>
+    </HTML>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+    <xsl:param name="path"/>
+    <xsl:if test="contains($path,'.')">
+        <xsl:text>../</xsl:text>
+        <xsl:call-template name="path">
+            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+        </xsl:call-template>
+    </xsl:if>
+    <xsl:if test="not(contains($path,'.')) and not($path = '')">
+        <xsl:text>../</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+    <xsl:param name="package.name"/>
+    <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+
+  <!-- jakarta logo -->
+  <table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td class="bannercell" rowspan="2">
+      <a href="http://jakarta.apache.org/">
+      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+      </a>
+    </td>
+        <td style="text-align:right"><h2>Source Code Audit</h2></td>
+        </tr>
+        <tr>
+        <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+        </tr>
+  </table>
+    <hr size="1"/>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageFooter">
+</xsl:template>
+
+
+<!-- class header -->
+<xsl:template name="class.audit.header">
+    <tr>
+        <th width="80%">Name</th>
+        <th>Violations</th>
+    </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="violation.audit.header">
+    <tr>
+        <th>Line</th>
+        <th>Message</th>
+    </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="class" mode="print.audit">
+    <tr>
+    <xsl:call-template name="alternate-row"/>
+        <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:apply-templates select="@violations"/></td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="violation" mode="print.audit">
+    <tr>
+    <xsl:call-template name="alternate-row"/>
+        <td><xsl:value-of select="@line"/></td>
+        <td><xsl:apply-templates select="@message"/></td>
+    </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+  <xsl:if test="position() mod 2 = 1">a</xsl:if>
+  <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/mmetrics-frames.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/mmetrics-frames.xsl
new file mode 100644
index 0000000..cd5afe7
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/mmetrics-frames.xsl
@@ -0,0 +1,1026 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+  xmlns:lxslt="http://xml.apache.org/xslt"
+  xmlns:xalan="http://xml.apache.org/xalan"
+  xmlns:redirect="org.apache.xalan.lib.Redirect"
+  exclude-result-prefixes="xalan"
+  extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<!--
+  @author Stephane Bailliez <a href="mailto:sbailliez at apache.org"/>
+  -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- default max value for the metrics -->
+<xsl:param name="vg.max" select="10"/>
+<xsl:param name="loc.max" select="1000"/>
+<xsl:param name="dit.max" select="10"/>
+<xsl:param name="noa.max" select="250"/>
+<xsl:param name="nrm.max" select="50"/>
+<xsl:param name="nlm.max" select="250"/>
+<xsl:param name="wmc.max" select="250"/>
+<xsl:param name="rfc.max" select="50"/>
+<xsl:param name="dac.max" select="10"/>
+<xsl:param name="fanout.max" select="10"/>
+<xsl:param name="cbo.max" select="15"/>
+<xsl:param name="lcom.max" select="10"/>
+<xsl:param name="nocl.max" select="10"/>
+
+
+<!-- create a tree fragment to speed up processing -->
+<xsl:variable name="doctree.var">
+  <xsl:element name="classes">
+    <xsl:for-each select=".//class">
+      <xsl:element name="class">
+        <xsl:attribute name="package">
+          <xsl:value-of select="(ancestor::package)[last()]/@name"/>
+        </xsl:attribute>
+        <xsl:copy-of select="@*"/>
+        <xsl:attribute name="name">
+          <xsl:apply-templates select="." mode="class.name"/>
+        </xsl:attribute>
+        <xsl:copy-of select="method"/>
+      </xsl:element>
+    </xsl:for-each>
+  </xsl:element>
+</xsl:variable>
+
+<xsl:variable name="doctree" select="xalan:nodeset($doctree.var)"/>
+
+<xsl:template match="metrics">
+
+  <!-- create the index.html -->
+  <redirect:write file="{$output.dir}/index.html">
+    <xsl:call-template name="index.html"/>
+  </redirect:write>
+
+  <!-- create the stylesheet.css -->
+  <redirect:write file="{$output.dir}/stylesheet.css">
+    <xsl:call-template name="stylesheet.css"/>
+  </redirect:write>
+
+  <redirect:write file="{$output.dir}/metrics-reference.html">
+    <xsl:call-template name="metrics-reference.html"/>
+  </redirect:write>
+
+  <!-- create the overview-packages.html at the root -->
+  <redirect:write file="{$output.dir}/overview-summary.html">
+    <xsl:apply-templates select="." mode="overview.packages"/>
+  </redirect:write>
+
+  <!-- create the all-packages.html at the root -->
+  <redirect:write file="{$output.dir}/overview-frame.html">
+    <xsl:apply-templates select="." mode="all.packages"/>
+  </redirect:write>
+
+  <!-- create the all-classes.html at the root -->
+  <redirect:write file="{$output.dir}/allclasses-frame.html">
+    <xsl:apply-templates select="." mode="all.classes"/>
+  </redirect:write>
+
+  <!-- process all packages -->
+  <xsl:apply-templates select=".//package"/>
+</xsl:template>
+
+
+<xsl:template match="package">
+  <xsl:variable name="package.name" select="@name"/>
+  <xsl:variable name="package.dir">
+    <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="translate($package.name,'.','/')"/></xsl:if>
+    <xsl:if test="$package.name = 'unnamed package'">.</xsl:if>
+  </xsl:variable>
+  <!-- create a classes-list.html in the package directory -->
+  <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+    <xsl:apply-templates select="." mode="classes.list"/>
+  </redirect:write>
+
+  <!-- create a package-summary.html in the package directory -->
+  <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+    <xsl:apply-templates select="." mode="package.summary"/>
+  </redirect:write>
+
+  <!-- for each class, creates a @name.html -->
+  <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+  <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+      <!--Processing <xsl:value-of select="$class.name"/><xsl:text>
</xsl:text> -->
+    <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+      <xsl:apply-templates select="." mode="class.details"/>
+    </redirect:write>
+  </xsl:for-each>
+</xsl:template>
+
+<!-- little trick to compute the classname for inner and non inner classes -->
+<!-- this is all in one line to avoid CRLF in the name -->
+<xsl:template match="class" mode="class.name">
+    <xsl:if test="parent::class"><xsl:apply-templates select="parent::class" mode="class.name"/>.<xsl:value-of select="@name"/></xsl:if><xsl:if test="not(parent::class)"><xsl:value-of select="@name"/></xsl:if>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<HTML>
+  <HEAD><TITLE>Metrics Results.</TITLE></HEAD>
+  <FRAMESET cols="20%,80%">
+    <FRAMESET rows="30%,70%">
+      <FRAME src="overview-frame.html" name="packageListFrame"/>
+      <FRAME src="allclasses-frame.html" name="classListFrame"/>
+    </FRAMESET>
+    <FRAME src="overview-summary.html" name="classFrame"/>
+  </FRAMESET>
+  <noframes>
+    <H2>Frame Alert</H2>
+    <P>
+    This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+    </P>
+  </noframes>
+</HTML>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="metrics-reference.html">
+<html>
+<head>
+<link title="Style" type="text/css" rel="stylesheet" href="stylesheet.css"/>
+</head>
+<body style="text-align:justify;">
+<h2>Metrics Reference</h2>
+<a href="#V(G)">V(G)</a> |
+<a href="#LOC">LOC</a> |
+<a href="#DIT">DIT</a> |
+<a href="#NOA">NOA</a> |
+<a href="#NRM">NRM</a> |
+<a href="#NLM">NLM</a> |
+<a href="#WMC">WMC</a> |
+<a href="#RFC">RFC</a> |
+<a href="#DAC">DAC</a> |
+<a href="#FANOUT">FANOUT</a> |
+<a href="#CBO">CBO</a> |
+<a href="#LCOM">LCOM</a> |
+<a href="#NOC">NOC</a>
+
+<a name="V(G)"/>
+<h3>Cyclomatic Complexity - V(G)</h3>
+This metric was introduced in the 1970s to measure the amount of control
+flow complexity or branching complexity in a module such as a
+subroutine. It gives the number of paths that may be taken through the
+code, and was initially developed to give some measure of the cost of
+producing a test case for the module by executing each path.
+<p/>
+Methods with a high cyclomatic complexity tend to be more difficult to
+understand and maintain. In general the more complex the methods of an
+application, the more difficult it will be to test it, and this will adversely
+affect its reliability.
+<p/>
+V(G) is a measure of the control flow complexity of a method or
+constructor.  It counts the number of branches in the body of the method,
+defined as:
+<ul>
+<li>while statements;</li>
+<li>if statements;</li>
+<li>for statements.</li>
+</ul>
+
+The metric can also be configured to count each case of a switch
+statement as well.
+
+<a name="LOC"/>
+<h3>Lines of Code - LOC</h3>
+
+This is perhaps the simplest of all the metrics to define and compute.
+Counting lines has a long history as a software metric dating from before
+the rise of structured programming, and it is still in widespread use today.
+The size of a method affects the ease with which it can be understood, its
+reusability and its maintainability. There are a variety of ways that the size
+can be calculated. These include counting all the lines of code, the number
+of statements, the blank lines of code, the lines of commentary, and the
+lines consisting only of syntax such as block delimiters.
+<p/>
+This metric can also be used for sizing other constructs as well, for
+example, the overall size of a Java class or package can be measured by
+counting the number of source lines it consists of.
+<p/>
+LOC can be used to determine the size of a compilation unit (source file),
+class or interface, method, constructor, or field.  It can be configured to
+ignore:
+<ul>
+<li>blank lines;</li>
+<li>lines consisting only of comments;</li>
+<li>lines consisting only of opening and closing braces.</li>
+</ul>
+
+<a name="DIT"/>
+<h3>Depth of Inheritance Hierarchy - DIT</h3>
+
+This metric calculates how far down the inheritance hierarchy a class is
+declared. In Java all classes have java.lang.Object as their ultimate
+superclass, which is defined to have a depth of 1. So a class that
+immediately extends java.lang.Object has a metric value of 2; any of its
+subclasses will have a value of 3, and so on.
+<p/>
+A class that is deep within the tree inherits more methods and state
+variables, thereby increasing its complexity and making it difficult to
+predict its behavior. It can be harder to understand a system with many
+inheritance layers.
+<p/>
+DIT is defined for classes and interfaces:
+<ul>
+<li>all interface types have a depth of 1;</li>
+<li>the class java.lang.Object has a depth of 1;</li>
+<li>all other classes have a depth of 1 + the depth of their super class.</li>
+</ul>
+
+<a name="NOA"/>
+<h3>Number of Attributes - NOA</h3>
+
+The number of distinct state variables in a class serves as one measure of
+its complexity. The more state a class represents the more difficult it is to
+maintain invariants for it. It also hinders comprehensibility and reuse.
+<p/>
+In Java, state can be exposed to subclasses through protected fields, which
+entails that the subclass also be aware of and maintain any invariants. This
+interference with the class's data encapsulation can be a source of defects
+and hidden dependencies between the state variables.
+<p/>
+NOA is defined for classes and interfaces.  It counts the number of fields
+declared in the class or interface.
+
+<a name="NRM"/>
+<h3>Number of Remote Methods - NRM</h3>
+
+NRM is defined for classes.  A remote method call is defined as an
+invocation of a method that is not declared in any of:
+<ul>
+<li>the class itself;</li>
+<li>a class or interface that the class extends or implements;</li>
+<li>a class or method that extends the class.</li>
+</ul>
+
+The value is the count of all the remote method calls in all of the methods
+and constructors of the class.
+
+<a name="NLM"/>
+<h3>Number of Local Methods - NLM</h3>
+
+NLM is defined for classes and interfaces.  A local method is defined as a
+method that is declared in the class or interface. NLM can be configured to
+include the local methods of all of the class's superclasses.  Methods with
+public, protected, package and private visibility can be independently
+counted by setting configuration parameters.
+
+<a name="WMC"/>
+<h3>Weighted Methods per Class - WMC</h3>
+
+If the number of methods in a class can be determined during the design
+and modeling phase of a project, it can be used as a predictor of how
+much time and effort is needed to develop, debug and maintain it. This
+metric can be further refined by incorporating a weighting for the
+complexity of each method. The usual weighting is given by the cyclomatic
+complexity of the method.
+<p/>
+The subclasses of a class inherit all of its public and protected methods,
+and possibly its package methods as well, so the number of methods a
+class has directly impacts the complexity of its subclasses. Classes with
+large numbers of methods are often specific to a particular application,
+reducing the ability to reuse them.
+<p/>
+The definition of WMC is based upon NLM, and it provides the same
+configuration parameters for counting inherited methods and of varying
+visibility. The main difference is that NLM always counts each method as 1,
+whereas WMC will weight each method. There are two weighting schemes:
+<ul>
+<li>V(G) the cyclomatic complexity of the method is used as its weight.
+   Methods from class files are given a V(G) of 1.</li>
+<li>the arity, or the number of parameters of the method are used to
+   determine the weight.</li>
+</ul>
+
+<a name="RFC"/>
+<h3>Response For Class - RFC</h3>
+
+The response set of a class is the set of all methods that can be invoked as
+a result of a message sent to an object of the class. This includes methods
+in the class's inheritance hierarchy and methods that can be invoked on
+other objects. The Response For Class metric is defined to be size of the
+response set for the class. A class which provides a larger response set is
+considered to be more complex than one with a smaller response set.
+<p/>
+One reason for this is that if a method call on a class can result in a large
+number of different method calls on the target and other classes, then it
+can be harder to test the behavior of the class and debug problems. It will
+typically require a deeper understanding of the potential interactions that
+objects of the class can have with the rest of the system.
+<p/>
+RFC is defined as the sum of NLM and NRM for the class.  The local methods
+include all of the public, protected, package and private methods, but not
+methods declared only in a superclass.
+
+<a name="DAC"/>
+<h3>Data Abstraction Coupling - DAC</h3>
+
+DAC is defined for classes and interfaces.  It counts the number of reference
+types that are used in the field declarations of the class or interface.  The
+component types of arrays are also counted.  Any field with a type that is
+either a supertype or a subtype of the class is not counted.
+
+<a name="FANOUT"/>
+<h3>Fan Out - FANOUT</h3>
+
+FANOUT is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations;</li>
+<li>formal parameters and return types;</li>
+<li>throws declarations;</li>
+<li>local variables.</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="CBO"/>
+<h3>Coupling Between Objects - CBO</h3>
+
+When one object or class uses another object or class they are said to be
+coupled. One major source of coupling is that between a superclass and a
+subclass. A coupling is also introduced when a method or field in another
+class is accessed, or when an object of another class is passed into or out
+of a method invocation. Coupling Between Objects is a measure of the
+non-inheritance coupling between two objects.
+<p/>
+A high value of coupling reduces the modularity of the class and makes
+reuse more difficult. The more independent a class is the more likely it is
+that it will be possible to reuse it in another part of the system. When a
+class is coupled to another class it becomes sensitive to changes in that
+class, thereby making maintenance for difficult. In addition, a class that is
+overly dependent on other classes can be difficult to understand and test in
+isolation.
+<p/>
+CBO is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations</li>
+<li>formal parameters and return types</li>
+<li>throws declarations</li>
+<li>local variables</li>
+</ul>
+
+It also counts:
+<ul>
+<li>types from which field and method selections are made</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="LCOM"/>
+<h3>Lack of Cohesion Of Methods - LCOM</h3>
+
+The cohesion of a class is the degree to which its methods are related to
+each other. It is determined by examining the pattern of state variable
+accesses within the set of methods. If all the methods access the same state
+variables then they have high cohesion; if they access disjoint sets of
+variables then the cohesion is low. An extreme example of low cohesion
+would be if none of the methods accessed any of the state variables.
+
+If a class exhibits low method cohesion it indicates that the design of the
+class has probably been partitioned incorrectly, and could benefit by being
+split into more classes with individually higher cohesion. On the other
+hand, a high value of cohesion (a low lack of cohesion) implies that the
+class is well designed. A cohesive class will tend to provide a high degree
+of encapsulation, whereas a lack of cohesion decreases encapsulation and
+increases complexity.
+<p/>
+Another form of cohesion that is useful for Java programs is cohesion
+between nested and enclosing classes. A nested class that has very low
+cohesion with its enclosing class would probably better designed as a peer
+class rather than a nested class.
+<p/>
+LCOM is defined for classes. Operationally, LCOM takes each pair of
+methods in the class and determines the set of fields they each access. If
+they have disjoint sets of field accesses increase the count P by one. If they
+share at least one field access then increase Q by one. After considering
+each pair of methods,
+LCOM = (P > Q) ? (P - Q) : 0
+<p/>
+Indirect access to fields via local methods can be considered by setting a
+metric configuration parameter.
+
+<a name="NOC"/>
+<h3>Number Of Classes - NOC</h3>
+
+The overall size of the system can be estimated by calculating the number
+of classes it contains. A large system with more classes is more complex
+than a smaller one because the number of potential interactions between
+objects is higher. This reduces the comprehensibility of the system which
+in turn makes it harder to test, debug and maintain.
+<p/>
+If the number of classes in the system can be projected during the initial
+design phase of the project it can serve as a base for estimating the total
+effort and cost of developing, debugging and maintaining the system.
+<p/>
+The NOC metric can also usefully be applied at the package and class level
+as well as the total system.
+<p/>
+NOCL is defined for class and interfaces. It counts the number of classes or
+interfaces that are declared. This is usually 1, but nested class declarations
+will increase this number.
+</body>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+    .bannercell {
+      border: 0px;
+      padding: 0px;
+    }
+    body {
+      margin-left: 10;
+      margin-right: 10;
+      font:normal 80% arial,helvetica,sanserif;
+      background-color:#FFFFFF;
+      color:#000000;
+    }
+    .a td {
+      background: #efefef;
+    }
+    .b td {
+      background: #fff;
+    }
+    th, td {
+      text-align: left;
+      vertical-align: top;
+    }
+    th {
+      font-weight:bold;
+      background: #ccc;
+      color: black;
+    }
+    table, th, td {
+      font-size:100%;
+      border: none
+    }
+    table.log tr td, tr th {
+
+    }
+    h2 {
+      font-weight:bold;
+      font-size:140%;
+      margin-bottom: 5;
+    }
+    h3 {
+      font-size:100%;
+      font-weight:bold;
+      background: #525D76;
+      color: white;
+      text-decoration: none;
+      padding: 5px;
+      margin-right: 2px;
+      margin-left: 2px;
+      margin-bottom: 0;
+    }
+    .Error {
+      font-weight:bold; color:red;
+    }
+
+</xsl:template>
+
+<!-- print the metrics of the class -->
+<xsl:template match="class" mode="class.details">
+  <!--xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/-->
+  <xsl:variable name="package.name" select="@package"/>
+  <HTML>
+    <HEAD>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="$package.name"/>
+      </xsl:call-template>
+    </HEAD>
+    <BODY>
+      <xsl:call-template name="pageHeader"/>
+
+      <H3>Class <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <xsl:call-template name="all.metrics.header"/>
+        <xsl:apply-templates select="." mode="print.metrics"/>
+      </table>
+
+      <H3>Methods</H3>
+      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <xsl:call-template name="method.metrics.header"/>
+        <xsl:apply-templates select="method" mode="print.metrics"/>
+      </table>
+
+      <xsl:call-template name="pageFooter"/>
+    </BODY>
+  </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+  <HTML>
+    <HEAD>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="@name"/>
+      </xsl:call-template>
+    </HEAD>
+    <BODY>
+      <table width="100%">
+        <tr>
+          <td nowrap="nowrap">
+            <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+          </td>
+        </tr>
+      </table>
+
+      <H2>Classes</H2>
+      <TABLE WIDTH="100%">
+        <!-- xalan-nodeset:nodeset for Xalan 1.2.2 -->
+            <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+                <xsl:sort select="@name"/>
+          <tr>
+            <td nowrap="nowrap">
+              <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+            </td>
+          </tr>
+            </xsl:for-each>
+      </TABLE>
+    </BODY>
+  </HTML>
+</xsl:template>
+
+
+<!--
+  Creates an all-classes.html file that contains a link to all package-summary.html
+  on each class.
+-->
+<xsl:template match="metrics" mode="all.classes">
+  <html>
+    <head>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="''"/>
+      </xsl:call-template>
+    </head>
+    <body>
+      <h2>Classes</h2>
+      <table width="100%">
+          <xsl:for-each select="$doctree/classes/class">
+              <xsl:sort select="@name"/>
+              <xsl:apply-templates select="." mode="all.classes"/>
+          </xsl:for-each>
+      </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+    <xsl:variable name="package.name" select="@package"/>
+    <xsl:variable name="class.name" select="@name"/>
+  <tr>
+    <td nowrap="nowrap">
+      <a target="classFrame">
+        <xsl:attribute name="href">
+          <xsl:if test="not($package.name='unnamed package')">
+            <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+          </xsl:if>
+          <xsl:value-of select="$class.name"/><xsl:text>.html</xsl:text>
+        </xsl:attribute>
+        <xsl:value-of select="$class.name"/>
+      </a>
+    </td>
+  </tr>
+</xsl:template>
+
+<!--
+  Creates an html file that contains a link to all package-summary.html files on
+  each package existing on testsuites.
+  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="metrics" mode="all.packages">
+  <html>
+    <head>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="./package/@name"/>
+      </xsl:call-template>
+    </head>
+    <body>
+      <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+      <h2>Packages</h2>
+        <table width="100%">
+          <xsl:apply-templates select=".//package[not(./@name = 'unnamed package')]" mode="all.packages">
+            <xsl:sort select="@name"/>
+          </xsl:apply-templates>
+        </table>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="package" mode="all.packages">
+  <tr>
+    <td nowrap="nowrap">
+      <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+        <xsl:value-of select="@name"/>
+      </a>
+    </td>
+  </tr>
+</xsl:template>
+
+
+<xsl:template match="metrics" mode="overview.packages">
+  <html>
+    <head>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="''"/>
+      </xsl:call-template>
+    </head>
+    <body onload="open('allclasses-frame.html','classListFrame')">
+    <xsl:call-template name="pageHeader"/>
+    <h3>Summary</h3>
+    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+    <tr>
+      <th><a href="metrics-reference.html#V(G)">V(G)</a></th>
+      <th><a href="metrics-reference.html#LOC">LOC</a></th>
+      <th><a href="metrics-reference.html#DIT">DIT</a></th>
+      <th><a href="metrics-reference.html#NOA">NOA</a></th>
+      <th><a href="metrics-reference.html#NRM">NRM</a></th>
+      <th><a href="metrics-reference.html#NLM">NLM</a></th>
+      <th><a href="metrics-reference.html#WMC">WMC</a></th>
+      <th><a href="metrics-reference.html#RFC">RFC</a></th>
+      <th><a href="metrics-reference.html#DAC">DAC</a></th>
+      <th><a href="metrics-reference.html#FANOUT">FANOUT</a></th>
+      <th><a href="metrics-reference.html#CBO">CBO</a></th>
+      <th><a href="metrics-reference.html#LCOM">LCOM</a></th>
+      <th><a href="metrics-reference.html#NOCL">NOCL</a></th>
+    </tr>
+    <xsl:apply-templates select="." mode="print.metrics"/>
+    </table>
+    <table border="0" width="100%">
+    <tr>
+    <td style="text-align: justify;">
+    Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+    various kind of complexity. Complexity is a common source of problems and defects in software.
+    High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+    a program.
+    <p/>
+    The primary use of metrics is to focus your attention on those parts of code that potentially are
+    complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+    actions.
+    For additional information about metrics and their meaning, please consult
+    Metamata Metrics manual.
+    </td>
+    </tr>
+    </table>
+
+    <h3>Packages</h3>
+    <table border="0" cellpadding="5" cellspacing="2" width="100%">
+      <xsl:call-template name="all.metrics.header"/>
+      <xsl:for-each select=".//package[not(@name = 'unnamed package')]">
+        <xsl:sort select="@name" order="ascending"/>
+        <xsl:apply-templates select="." mode="print.metrics"/>
+      </xsl:for-each>
+    </table>
+    <!-- @bug there could some classes at this level (classes in unnamed package) -->
+    <xsl:call-template name="pageFooter"/>
+    </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="package" mode="package.summary">
+  <HTML>
+    <HEAD>
+      <xsl:call-template name="create.stylesheet.link">
+        <xsl:with-param name="package.name" select="@name"/>
+      </xsl:call-template>
+    </HEAD>
+    <body onload="open('package-frame.html','classListFrame')">
+      <xsl:call-template name="pageHeader"/>
+      <!-- create an anchor to this package name -->
+      <h3>Package <xsl:value-of select="@name"/></h3>
+
+      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+        <xsl:call-template name="all.metrics.header"/>
+        <xsl:apply-templates select="." mode="print.metrics"/>
+      </table>
+
+      <table border="0" width="100%">
+      <tr>
+      <td style="text-align: justify;">
+      Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+      various kind of complexity. Complexity is a common source of problems and defects in software.
+      High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+      a program.
+      <p/>
+      The primary use of metrics is to focus your attention on those parts of code that potentially are
+      complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+      actions.
+      For additional information about metrics and their meaning, please consult
+      Metamata Metrics manual.
+      </td>
+      </tr>
+      </table>
+
+      <xsl:variable name="classes-in-package" select="$doctree/classes/class[@package = current()/@name]"/>
+      <xsl:if test="count($classes-in-package) > 0">
+        <H3>Classes</H3>
+        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+          <xsl:call-template name="all.metrics.header"/>
+          <xsl:for-each select="$classes-in-package">
+                <xsl:sort select="@name"/>
+                <xsl:apply-templates select="." mode="print.metrics"/>
+          </xsl:for-each>
+        </table>
+      </xsl:if>
+
+      <xsl:call-template name="pageFooter"/>
+    </body>
+  </HTML>
+</xsl:template>
+
+
+<!--
+    transform string like a.b.c to ../../../
+    @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+  <xsl:param name="path"/>
+  <xsl:if test="contains($path,'.')">
+    <xsl:text>../</xsl:text>
+    <xsl:call-template name="path">
+      <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+    </xsl:call-template>
+  </xsl:if>
+  <xsl:if test="not(contains($path,'.')) and not($path = '')">
+    <xsl:text>../</xsl:text>
+  </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+  <xsl:param name="package.name"/>
+  <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+
+  <!-- jakarta logo -->
+  <table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr>
+    <td class="bannercell" rowspan="2">
+      <a href="http://jakarta.apache.org/">
+      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+      </a>
+    </td>
+    <td style="text-align:right"><h2>Source Code Metrics</h2></td>
+    </tr>
+    <tr>
+    <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Metrics</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+    </tr>
+  </table>
+  <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="all.metrics.header">
+  <tr>
+    <th width="80%">Name</th>
+    <th nowrap="nowrap">V(G)</th>
+    <th>LOC</th>
+    <th>DIT</th>
+    <th>NOA</th>
+    <th>NRM</th>
+    <th>NLM</th>
+    <th>WMC</th>
+    <th>RFC</th>
+    <th>DAC</th>
+    <th>FANOUT</th>
+    <th>CBO</th>
+    <th>LCOM</th>
+    <th>NOCL</th>
+  </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="method.metrics.header">
+  <tr>
+    <th width="80%">Name</th>
+    <th nowrap="nowrap">V(G)</th>
+    <th>LOC</th>
+    <th>FANOUT</th>
+    <th>CBO</th>
+  </tr>
+</xsl:template>
+
+<!-- method information -->
+<xsl:template match="method" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+    <td><xsl:apply-templates select="@name"/></td>
+    <td><xsl:apply-templates select="@vg"/></td>
+    <td><xsl:apply-templates select="@loc"/></td>
+    <td><xsl:apply-templates select="@fanout"/></td>
+    <td><xsl:apply-templates select="@cbo"/></td>
+  </tr>
+</xsl:template>
+
+<!-- class information -->
+<xsl:template match="class" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+    <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+    <td><xsl:apply-templates select="@vg"/></td>
+    <td><xsl:apply-templates select="@loc"/></td>
+    <td><xsl:apply-templates select="@dit"/></td>
+    <td><xsl:apply-templates select="@noa"/></td>
+    <td><xsl:apply-templates select="@nrm"/></td>
+    <td><xsl:apply-templates select="@nlm"/></td>
+    <td><xsl:apply-templates select="@wmc"/></td>
+    <td><xsl:apply-templates select="@rfc"/></td>
+    <td><xsl:apply-templates select="@dac"/></td>
+    <td><xsl:apply-templates select="@fanout"/></td>
+    <td><xsl:apply-templates select="@cbo"/></td>
+    <td><xsl:apply-templates select="@lcom"/></td>
+    <td><xsl:apply-templates select="@nocl"/></td>
+  </tr>
+</xsl:template>
+
+<xsl:template match="file|package" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+    <td>
+    <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+    <xsl:value-of select="@name"/>
+    </a>
+    </td>
+    <td><xsl:apply-templates select="@vg"/></td>
+    <td><xsl:apply-templates select="@loc"/></td>
+    <td><xsl:apply-templates select="@dit"/></td>
+    <td><xsl:apply-templates select="@noa"/></td>
+    <td><xsl:apply-templates select="@nrm"/></td>
+    <td><xsl:apply-templates select="@nlm"/></td>
+    <td><xsl:apply-templates select="@wmc"/></td>
+    <td><xsl:apply-templates select="@rfc"/></td>
+    <td><xsl:apply-templates select="@dac"/></td>
+    <td><xsl:apply-templates select="@fanout"/></td>
+    <td><xsl:apply-templates select="@cbo"/></td>
+    <td><xsl:apply-templates select="@lcom"/></td>
+    <td><xsl:apply-templates select="@nocl"/></td>
+  </tr>
+</xsl:template>
+
+<xsl:template match="metrics" mode="print.metrics">
+  <tr>
+    <xsl:call-template name="alternate-row"/>
+      <!-- the global metrics is the top package metrics -->
+    <td><xsl:apply-templates select="./package/@vg"/></td>
+    <td><xsl:apply-templates select="./package/@loc"/></td>
+    <td><xsl:apply-templates select="./package/@dit"/></td>
+    <td><xsl:apply-templates select="./package/@noa"/></td>
+    <td><xsl:apply-templates select="./package/@nrm"/></td>
+    <td><xsl:apply-templates select="./package/@nlm"/></td>
+    <td><xsl:apply-templates select="./package/@wmc"/></td>
+    <td><xsl:apply-templates select="./package/@rfc"/></td>
+    <td><xsl:apply-templates select="./package/@dac"/></td>
+    <td><xsl:apply-templates select="./package/@fanout"/></td>
+    <td><xsl:apply-templates select="./package/@cbo"/></td>
+    <td><xsl:apply-templates select="./package/@lcom"/></td>
+    <td><xsl:apply-templates select="./package/@nocl"/></td>
+  </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+  <xsl:if test="position() mod 2 = 1">a</xsl:if>
+  <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+
+<!-- how to display the metrics with their max value -->
+<!-- @todo the max values must be external to the xsl -->
+
+  <xsl:template match="@vg">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$vg.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@loc">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$loc.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@dit">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$dit.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@noa">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$noa.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@nrm">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$nrm.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@nlm">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$nlm.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@wmc">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$wmc.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@rfc">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$rfc.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@dac">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$dac.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@fanout">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$fanout.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@cbo">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$cbo.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@lcom">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$lcom.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template match="@nocl">
+    <xsl:call-template name="display-value">
+      <xsl:with-param name="value" select="current()"/>
+      <xsl:with-param name="max" select="$nocl.max"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="display-value">
+    <xsl:param name="value"/>
+    <xsl:param name="max"/>
+    <xsl:if test="$value > $max">
+      <xsl:attribute name="class">Error</xsl:attribute>
+    </xsl:if>
+    <xsl:value-of select="$value"/>
+  </xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/tagdiff.xsl b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/tagdiff.xsl
new file mode 100644
index 0000000..49c4b17
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/etc/tagdiff.xsl
@@ -0,0 +1,179 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<!-- a stylesheet to display changelogs ala netbeans -->
+<xsl:stylesheet
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    version="1.0">
+  <xsl:param name="title"/>
+  <xsl:param name="module"/>
+  <xsl:param name="cvsweb"/>
+
+  <xsl:output method="html" indent="yes"/>
+
+  <!-- Copy standard document elements.  Elements that
+       should be ignored must be filtered by apply-templates
+       tags. -->
+  <xsl:template match="*">
+    <xsl:copy>
+      <xsl:copy-of select="attribute::*[. != '']"/>
+      <xsl:apply-templates/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="tagdiff">
+    <html>
+      <head>
+        <title><xsl:value-of select="$title"/></title>
+        <style type="text/css">
+          body, p {
+          font-family: verdana,arial,helvetica;
+          font-size: 80%;
+          color:#000000;
+          }
+	  .dateAndAuthor {
+          font-family: verdana,arial,helvetica;
+          font-size: 80%;
+          font-weight: bold;
+          text-align:left;
+          background:#a6caf0;
+	  }
+          tr, td{
+          font-family: verdana,arial,helvetica;
+          font-size: 80%;
+          background:#eeeee0;
+          }	  
+	  </style> 
+      </head>
+      <body link="#000000" alink="#000000" vlink="#000000" text="#000000">       
+          <h1>
+            <a name="top"><xsl:value-of select="$title"/></a>
+          </h1>
+          Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and
+			<xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/>
+          <p align="right">Designed for use with <a href="http://ant.apache.org/">Ant</a>.</p>
+          <hr size="2"/>
+	<a name="TOP"/>
+	<table width="100%">
+		<tr>
+			<td align="right">
+				<a href="#New">New Files</a> |
+				<a href="#Modified">Modified Files</a> |
+				<a href="#Removed">Removed Files</a>
+			</td>
+		</tr>
+	</table>
+        <table border="0" width="100%" cellpadding="3" cellspacing="1">
+		<xsl:call-template name="show-entries">
+			<xsl:with-param name="title">New Files</xsl:with-param>
+			<xsl:with-param name="anchor">New</xsl:with-param>
+			<xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/>
+		</xsl:call-template>
+
+		<xsl:call-template name="show-entries">
+			<xsl:with-param name="title">Modified Files</xsl:with-param>
+			<xsl:with-param name="anchor">Modified</xsl:with-param>
+			<xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/>
+		</xsl:call-template>
+
+		<!-- change to entries select to address bug #36827 -->
+		<xsl:call-template name="show-entries">
+			<xsl:with-param name="title">Removed Files</xsl:with-param>
+			<xsl:with-param name="anchor">Removed</xsl:with-param>
+			<xsl:with-param name="entries" select=".//entry[not(file/revision)][file/prevrevision]"/>
+		</xsl:call-template>
+        </table>
+        
+      </body>
+    </html>
+  </xsl:template>
+
+  <xsl:template name="show-entries">
+	<xsl:param name="title"/>
+	<xsl:param name="anchor"/>
+	<xsl:param name="entries"/>
+	<tr>
+		<td colspan="2" class="dateAndAuthor">
+			<a>
+				<xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute>
+				<xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries
+			</a>
+			<a href="#TOP">(back to top)</a>
+		</td>
+	</tr>
+	<tr>
+		<td width="20">
+			<xsl:text>    </xsl:text>
+		</td>
+		<td>
+		        <ul>
+				<xsl:apply-templates select="$entries"/>
+			</ul>
+		</td>
+	</tr>
+  </xsl:template>  
+
+  <xsl:template match="entry">
+	<xsl:apply-templates select="file"/>
+  </xsl:template>
+
+  <xsl:template match="date">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="time">
+    <i><xsl:value-of select="."/></i>
+  </xsl:template>
+
+  <xsl:template match="author">
+    <i>
+      <a>
+        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+        <xsl:value-of select="."/>
+      </a>
+    </i>
+  </xsl:template>
+
+  <xsl:template match="file">
+    <li>
+      <a target="_new">
+        <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute>
+        <xsl:value-of select="name" />
+      </a>
+      <xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0">
+      <xsl:text> </xsl:text>
+      <a target="_new">
+        <xsl:choose>
+          <xsl:when test="string-length(prevrevision) = 0 ">
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/>&diff_format=h</xsl:attribute>
+          </xsl:otherwise>
+        </xsl:choose> (<xsl:if test="count(prevrevision) > 0"> <xsl:value-of select="prevrevision"/> --> </xsl:if> <xsl:value-of select="revision"/>)
+      </a>
+      </xsl:if>
+    </li>
+  </xsl:template>
+
+  <!-- Any elements within a msg are processed,
+       so that we can preserve HTML tags. -->
+  <xsl:template match="msg">
+    <b><xsl:apply-templates/></b>
+  </xsl:template>
+  
+</xsl:stylesheet>
diff --git a/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/plugin.properties b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/plugin.properties
new file mode 100644
index 0000000..6652492
--- /dev/null
+++ b/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2000, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Apache Ant
+providerName = Eclipse Orbit
diff --git a/eclipse/plugins/org.apache.lucene/.classpath b/eclipse/plugins/org.apache.lucene/.classpath
new file mode 100755
index 0000000..c7e80f5
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry exported="true" kind="lib" path="" sourcepath="source-bundle"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/eclipse/plugins/org.eclipse.ecf.provider.filetransfer.httpclient/.gitignore b/eclipse/plugins/org.apache.lucene/.cvsignore
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/plugins/org.eclipse.ecf.provider.filetransfer.httpclient/.gitignore
copy to eclipse/plugins/org.apache.lucene/.cvsignore
diff --git a/eclipse/plugins/org.apache.lucene/.project b/eclipse/plugins/org.apache.lucene/.project
new file mode 100755
index 0000000..f02015b
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.apache.lucene</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.apache.lucene/.settings/CVS/Entries b/eclipse/plugins/org.apache.lucene/.settings/CVS/Entries
new file mode 100644
index 0000000..d984568
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.settings/CVS/Entries
@@ -0,0 +1,3 @@
+/org.eclipse.core.resources.prefs/1.1.2.1/Tue Apr 20 19:57:44 2010/-ko/Tv2_9_1
+/org.eclipse.pde.core.prefs/1.1.2.1/Sun Oct 15 13:01:56 2006/-ko/Tv2_9_1
+/org.eclipse.pde.prefs/1.1.2.1/Wed Jan  7 08:16:14 2009/-ko/Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/.settings/CVS/Repository b/eclipse/plugins/org.apache.lucene/.settings/CVS/Repository
new file mode 100644
index 0000000..6083047
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.settings/CVS/Repository
@@ -0,0 +1 @@
+org.eclipse.orbit/org.apache.lucene/.settings
diff --git a/eclipse/plugins/org.apache.lucene/.settings/CVS/Root b/eclipse/plugins/org.apache.lucene/.settings/CVS/Root
new file mode 100644
index 0000000..24126f4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.settings/CVS/Root
@@ -0,0 +1 @@
+:extssh:caniszczyk at dev.eclipse.org:/cvsroot/tools
diff --git a/eclipse/plugins/org.apache.lucene/.settings/CVS/Tag b/eclipse/plugins/org.apache.lucene/.settings/CVS/Tag
new file mode 100644
index 0000000..3114c57
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.settings/CVS/Tag
@@ -0,0 +1 @@
+Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.core.resources.prefs b/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..ac9048d
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Wed Jan 27 12:35:08 CET 2010
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.pde.core.prefs
new file mode 100755
index 0000000..b5caa3a
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Sun Oct 15 08:46:29 EDT 2006
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.pde.prefs b/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.pde.prefs
new file mode 100755
index 0000000..fc301c4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,25 @@
+#Mon Jan 05 16:18:42 CET 2009
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=2
+compilers.p.missing-version-require-bundle=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/eclipse/plugins/org.apache.lucene/CVS/Entries b/eclipse/plugins/org.apache.lucene/CVS/Entries
new file mode 100644
index 0000000..dc1d4c8
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/CVS/Entries
@@ -0,0 +1,12 @@
+/.classpath/1.1.4.2.4.2/Wed Jan  7 08:16:14 2009/-ko/Tv2_9_1
+/.cvsignore/1.1.4.1/Sun Oct 15 13:01:56 2006/-ko/Tv2_9_1
+/.project/1.1.4.1/Tue May 10 11:31:21 2011/-ko/Tv2_9_1
+D/.settings////
+D/META-INF////
+/about.html/1.1.4.2.4.1.2.2/Fri Jan 21 17:20:15 2011/-ko/Tv2_9_1
+D/about_files////
+/build.properties/1.1.4.5.4.1/Wed Jan  7 08:16:14 2009/-ko/Tv2_9_1
+D/org////
+/plugin.properties/1.1.4.1/Sun Oct 15 13:01:55 2006/-ko/Tv2_9_1
+/readme-bundles.txt/1.1.2.1/Wed Jan  7 08:16:14 2009/-ko/Tv2_9_1
+D/source-bundle////
diff --git a/eclipse/plugins/org.apache.lucene/CVS/Repository b/eclipse/plugins/org.apache.lucene/CVS/Repository
new file mode 100644
index 0000000..50dfa9d
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/CVS/Repository
@@ -0,0 +1 @@
+org.eclipse.orbit/org.apache.lucene
diff --git a/eclipse/plugins/org.apache.lucene/CVS/Root b/eclipse/plugins/org.apache.lucene/CVS/Root
new file mode 100644
index 0000000..24126f4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/CVS/Root
@@ -0,0 +1 @@
+:extssh:caniszczyk at dev.eclipse.org:/cvsroot/tools
diff --git a/eclipse/plugins/org.apache.lucene/CVS/Tag b/eclipse/plugins/org.apache.lucene/CVS/Tag
new file mode 100644
index 0000000..3114c57
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/CVS/Tag
@@ -0,0 +1 @@
+Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/CVS/Template b/eclipse/plugins/org.apache.lucene/CVS/Template
new file mode 100644
index 0000000..e69de29
diff --git a/eclipse/plugins/org.apache.lucene/META-INF/CVS/Entries b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Entries
new file mode 100644
index 0000000..2a9629d
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Entries
@@ -0,0 +1 @@
+/MANIFEST.MF/1.1.4.3.4.2.2.1/Tue Apr 20 19:57:44 2010/-ko/Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/META-INF/CVS/Repository b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Repository
new file mode 100644
index 0000000..e8696c5
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Repository
@@ -0,0 +1 @@
+org.eclipse.orbit/org.apache.lucene/META-INF
diff --git a/eclipse/plugins/org.apache.lucene/META-INF/CVS/Root b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Root
new file mode 100644
index 0000000..24126f4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Root
@@ -0,0 +1 @@
+:extssh:caniszczyk at dev.eclipse.org:/cvsroot/tools
diff --git a/eclipse/plugins/org.apache.lucene/META-INF/CVS/Tag b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Tag
new file mode 100644
index 0000000..3114c57
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/META-INF/CVS/Tag
@@ -0,0 +1 @@
+Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/META-INF/MANIFEST.MF b/eclipse/plugins/org.apache.lucene/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..ab03b4b
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.apache.lucene
+Bundle-Version: 2.9.1.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Require-Bundle: org.apache.lucene.core;bundle-version="[2.9.1,3.0.0)";visibility:=reexport,
+ org.apache.lucene.analysis;bundle-version="[2.9.1,3.0.0)";resolution:=optional,
+ org.apache.lucene.highlighter;bundle-version="[2.9.1,3.0.0)";resolution:=optional,
+ org.apache.lucene.memory;bundle-version="[2.9.1,3.0.0)";resolution:=optional,
+ org.apache.lucene.queries;bundle-version="[2.9.1,3.0.0)";resolution:=optional,
+ org.apache.lucene.snowball;bundle-version="[2.9.1,3.0.0)";resolution:=optional,
+ org.apache.lucene.spellchecker;bundle-version="[2.9.1,3.0.0)";resolution:=optional,
+ org.apache.lucene.misc;bundle-version="[2.9.1,3.0.0)";resolution:=optional
+Export-Package: org.apache.lucene;version="2.9.1",
+ org.apache.lucene.analysis;version="2.9.1",
+ org.apache.lucene.analysis.standard;version="2.9.1",
+ org.apache.lucene.analysis.tokenattributes;version="2.9.1",
+ org.apache.lucene.document;version="2.9.1",
+ org.apache.lucene.index;version="2.9.1",
+ org.apache.lucene.messages;version="2.9.1",
+ org.apache.lucene.queryParser;version="2.9.1",
+ org.apache.lucene.search;version="2.9.1",
+ org.apache.lucene.search.function;version="2.9.1",
+ org.apache.lucene.search.payloads;version="2.9.1",
+ org.apache.lucene.search.spans;version="2.9.1",
+ org.apache.lucene.store;version="2.9.1",
+ org.apache.lucene.util;version="2.9.1",
+ org.apache.lucene.util.cache;version="2.9.1"
diff --git a/eclipse/plugins/org.apache.lucene/about.html b/eclipse/plugins/org.apache.lucene/about.html
new file mode 100755
index 0000000..2a13c34
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about.html
@@ -0,0 +1,48 @@
+<!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=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>May 30, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor’s license for 
+terms and conditions of use.</p>
+
+<h4>Lucene 2.9.1</h4>
+
+<p>The plug-in includes software developed by The Apache Software Foundation as part of the Ant project.</p>
+
+<p>Your use of the Lucene code is subject to the terms and conditions of the Apache Software License 2.0.  A copy of the license is contained
+in the file <a href="about_files/LICENSE.txt">LICENSE.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+</p>
+<p>The names "Lucene" and  "Apache Software Foundation" must not be used to endorse or promote products derived from this 
+software without prior written permission.  For written permission, please contact <a href="mailto:apache at apache.org">apache at apache.org</a>.</p>
+
+<p>
+Original binaries and source are available from the <a href="http://lucene.apache.org/">Apache Lucene website</a>.
+</p>
+</body>
+</html>
diff --git a/eclipse/plugins/org.apache.lucene/about_files/CHANGES.txt b/eclipse/plugins/org.apache.lucene/about_files/CHANGES.txt
new file mode 100755
index 0000000..eb1ebd0
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/CHANGES.txt
@@ -0,0 +1,3858 @@
+Lucene Change Log
+$Id: CHANGES.txt 832363 2009-11-03 09:37:36Z mikemccand $
+
+======================= Release 2.9.1 2009-11-06 =======================
+
+Changes in backwards compatibility policy
+
+ * LUCENE-2002: Add required Version matchVersion argument when
+   constructing QueryParser or MultiFieldQueryParser and, default (as
+   of 2.9) enablePositionIncrements to true to match
+   StandardAnalyzer's 2.9 default (Uwe Schindler, Mike McCandless)
+
+Bug fixes
+
+ * LUCENE-1974: Fixed nasty bug in BooleanQuery (when it used
+   BooleanScorer for scoring), whereby some matching documents fail to
+   be collected.  (Fulin Tang via Mike McCandless)
+
+ * LUCENE-1124: Make sure FuzzyQuery always matches the precise term.
+   (stefatwork at gmail.com via Mike McCandless)
+
+ * LUCENE-1976: Fix IndexReader.isCurrent() to return the right thing
+   when the reader is a near real-time reader.  (Jake Mannix via Mike
+   McCandless)
+
+ * LUCENE-1986: Fix NPE when scoring PayloadNearQuery (Peter Keegan,
+   Mark Miller via Mike McCandless)
+
+ * LUCENE-1992: Fix thread hazard if a merge is committing just as an
+   exception occurs during sync (Uwe Schindler, Mike McCandless)
+
+ * LUCENE-1995: Note in javadocs that IndexWriter.setRAMBufferSizeMB
+   cannot exceed 2048 MB, and throw IllegalArgumentException if it
+   does.  (Aaron McKee, Yonik Seeley, Mike McCandless)
+
+ * LUCENE-2004: Fix Constants.LUCENE_MAIN_VERSION to not be inlined
+   by client code.  (Uwe Schindler)
+
+ * LUCENE-2016: Replace illegal U+FFFF character with the replacement
+   char (U+FFFD) during indexing, to prevent silent index corruption.
+   (Peter Keegan, Mike McCandless)
+
+API Changes
+
+ * Un-deprecate search(Weight weight, Filter filter, int n) from
+   Searchable interface (deprecated by accident).  (Uwe Schindler)
+
+ * Un-deprecate o.a.l.util.Version constants.  (Mike McCandless)
+
+ * LUCENE-1987: Un-deprecate some ctors of Token, as they will not
+   be removed in 3.0 and are still useful. Also add some missing
+   o.a.l.util.Version constants for enabling invalid acronym
+   settings in StandardAnalyzer to be compatible with the coming
+   Lucene 3.0.  (Uwe Schindler)
+
+ * LUCENE-1973: Un-deprecate IndexSearcher.setDefaultFieldSortScoring,
+   to allow controlling per-IndexSearcher whether scores are computed
+   when sorting by field.  (Uwe Schindler, Mike McCandless)
+   
+Documentation
+
+ * LUCENE-1955: Fix Hits deprecation notice to point users in right
+   direction. (Mike McCandless, Mark Miller)
+   
+ * Fix javadoc about score tracking done by search methods in Searcher 
+   and IndexSearcher.  (Mike McCandless)
+
+ * LUCENE-2008: Javadoc improvements for TokenStream/Tokenizer/Token
+   (Luke Nezda via Mike McCandless)
+
+======================= Release 2.9.0 2009-09-23 =======================
+
+Changes in backwards compatibility policy
+
+ * LUCENE-1575: Searchable.search(Weight, Filter, int, Sort) no
+    longer computes a document score for each hit by default.  If
+    document score tracking is still needed, you can call
+    IndexSearcher.setDefaultFieldSortScoring(true, true) to enable
+    both per-hit and maxScore tracking; however, this is deprecated
+    and will be removed in 3.0.
+
+    Alternatively, use Searchable.search(Weight, Filter, Collector)
+    and pass in a TopFieldCollector instance, using the following code
+    sample:
+ 
+    <code>
+      TopFieldCollector tfc = TopFieldCollector.create(sort, numHits, fillFields, 
+                                                       true /* trackDocScores */,
+                                                       true /* trackMaxScore */,
+                                                       false /* docsInOrder */);
+      searcher.search(query, tfc);
+      TopDocs results = tfc.topDocs();
+    </code>
+
+    Note that your Sort object cannot use SortField.AUTO when you
+    directly instantiate TopFieldCollector.
+
+    Also, the method search(Weight, Filter, Collector) was added to
+    the Searchable interface and the Searcher abstract class to
+    replace the deprecated HitCollector versions.  If you either
+    implement Searchable or extend Searcher, you should change your
+    code to implement this method.  If you already extend
+    IndexSearcher, no further changes are needed to use Collector.
+    
+    Finally, the values Float.NaN, Float.NEGATIVE_INFINITY and
+    Float.POSITIVE_INFINITY are not valid scores.  Lucene uses these
+    values internally in certain places, so if you have hits with such
+    scores, it will cause problems. (Shai Erera via Mike McCandless)
+
+ * LUCENE-1687: All methods and parsers from the interface ExtendedFieldCache
+    have been moved into FieldCache. ExtendedFieldCache is now deprecated and
+    contains only a few declarations for binary backwards compatibility. 
+    ExtendedFieldCache will be removed in version 3.0. Users of FieldCache and 
+    ExtendedFieldCache will be able to plug in Lucene 2.9 without recompilation.
+    The auto cache (FieldCache.getAuto) is now deprecated. Due to the merge of
+    ExtendedFieldCache and FieldCache, FieldCache can now additionally return
+    long[] and double[] arrays in addition to int[] and float[] and StringIndex.
+    
+    The interface changes are only notable for users implementing the interfaces,
+    which was unlikely done, because there is no possibility to change
+    Lucene's FieldCache implementation.  (Grant Ingersoll, Uwe Schindler)
+    
+ * LUCENE-1630, LUCENE-1771: Weight, previously an interface, is now an abstract 
+    class. Some of the method signatures have changed, but it should be fairly
+    easy to see what adjustments must be made to existing code to sync up
+    with the new API. You can find more detail in the API Changes section.
+    
+    Going forward Searchable will be kept for convenience only and may
+    be changed between minor releases without any deprecation
+    process. It is not recommended that you implement it, but rather extend
+    Searcher.  
+    (Shai Erera, Chris Hostetter, Martin Ruckli, Mark Miller via Mike McCandless)
+
+ * LUCENE-1422, LUCENE-1693: The new Attribute based TokenStream API (see below)
+    has some backwards breaks in rare cases. We did our best to make the 
+    transition as easy as possible and you are not likely to run into any problems. 
+    If your tokenizers still implement next(Token) or next(), the calls are 
+    automatically wrapped. The indexer and query parser use the new API 
+    (eg use incrementToken() calls). All core TokenStreams are implemented using 
+    the new API. You can mix old and new API style TokenFilters/TokenStream. 
+    Problems only occur when you have done the following:
+    You have overridden next(Token) or next() in one of the non-abstract core
+    TokenStreams/-Filters. These classes should normally be final, but some
+    of them are not. In this case, next(Token)/next() would never be called.
+    To fail early with a hard compile/runtime error, the next(Token)/next()
+    methods in these TokenStreams/-Filters were made final in this release.
+    (Michael Busch, Uwe Schindler)
+
+ * LUCENE-1763: MergePolicy now requires an IndexWriter instance to
+    be passed upon instantiation. As a result, IndexWriter was removed
+    as a method argument from all MergePolicy methods. (Shai Erera via
+    Mike McCandless)
+    
+ * LUCENE-1748: LUCENE-1001 introduced PayloadSpans, but this was a back
+    compat break and caused custom SpanQuery implementations to fail at runtime
+    in a variety of ways. This issue attempts to remedy things by causing
+    a compile time break on custom SpanQuery implementations and removing 
+    the PayloadSpans class, with its functionality now moved to Spans. To
+    help in alleviating future back compat pain, Spans has been changed from
+    an interface to an abstract class.
+    (Hugh Cayless, Mark Miller)
+    
+ * LUCENE-1808: Query.createWeight has been changed from protected to
+    public. This will be a back compat break if you have overridden this
+    method - but you are likely already affected by the LUCENE-1693 (make Weight 
+    abstract rather than an interface) back compat break if you have overridden 
+    Query.creatWeight, so we have taken the opportunity to make this change.
+    (Tim Smith, Shai Erera via Mark Miller)
+
+ * LUCENE-1708 - IndexReader.document() no longer checks if the document is 
+    deleted. You can call IndexReader.isDeleted(n) prior to calling document(n).
+    (Shai Erera via Mike McCandless)
+
+ 
+Changes in runtime behavior
+
+ * LUCENE-1424: QueryParser now by default uses constant score auto
+    rewriting when it generates a WildcardQuery and PrefixQuery (it
+    already does so for TermRangeQuery, as well).  Call
+    setMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE)
+    to revert to slower BooleanQuery rewriting method.  (Mark Miller via Mike
+    McCandless)
+    
+ * LUCENE-1575: As of 2.9, the core collectors as well as
+    IndexSearcher's search methods that return top N results, no
+    longer filter out zero scoring documents. If you rely on this
+    functionality you can use PositiveScoresOnlyCollector like this:
+
+    <code>
+      TopDocsCollector tdc = new TopScoreDocCollector(10);
+      Collector c = new PositiveScoresOnlyCollector(tdc);
+      searcher.search(query, c);
+      TopDocs hits = tdc.topDocs();
+      ...
+    </code>
+
+ * LUCENE-1604: IndexReader.norms(String field) is now allowed to
+    return null if the field has no norms, as long as you've
+    previously called IndexReader.setDisableFakeNorms(true).  This
+    setting now defaults to false (to preserve the fake norms back
+    compatible behavior) but in 3.0 will be hardwired to true.  (Shon
+    Vella via Mike McCandless).
+
+ * LUCENE-1624: If you open IndexWriter with create=true and
+    autoCommit=false on an existing index, IndexWriter no longer
+    writes an empty commit when it's created.  (Paul Taylor via Mike
+    McCandless)
+
+ * LUCENE-1593: When you call Sort() or Sort.setSort(String field,
+    boolean reverse), the resulting SortField array no longer ends
+    with SortField.FIELD_DOC (it was unnecessary as Lucene breaks ties
+    internally by docID). (Shai Erera via Michael McCandless)
+
+ * LUCENE-1542: When the first token(s) have 0 position increment,
+    IndexWriter used to incorrectly record the position as -1, if no
+    payload is present, or Integer.MAX_VALUE if a payload is present.
+    This causes positional queries to fail to match.  The bug is now
+    fixed, but if your app relies on the buggy behavior then you must
+    call IndexWriter.setAllowMinus1Position().  That API is deprecated
+    so you must fix your application, and rebuild your index, to not
+    rely on this behavior by the 3.0 release of Lucene. (Jonathan
+    Mamou, Mark Miller via Mike McCandless)
+
+
+ * LUCENE-1715: Finalizers have been removed from the 4 core classes
+    that still had them, since they will cause GC to take longer, thus
+    tying up memory for longer, and at best they mask buggy app code.
+    DirectoryReader (returned from IndexReader.open) & IndexWriter
+    previously released the write lock during finalize.
+    SimpleFSDirectory.FSIndexInput closed the descriptor in its
+    finalizer, and NativeFSLock released the lock.  It's possible
+    applications will be affected by this, but only if the application
+    is failing to close reader/writers.  (Brian Groose via Mike
+    McCandless)
+
+ * LUCENE-1717: Fixed IndexWriter to account for RAM usage of
+    buffered deletions.  (Mike McCandless)
+
+ * LUCENE-1727: Ensure that fields are stored & retrieved in the
+    exact order in which they were added to the document.  This was
+    true in all Lucene releases before 2.3, but was broken in 2.3 and
+    2.4, and is now fixed in 2.9.  (Mike McCandless)
+
+ * LUCENE-1678: The addition of Analyzer.reusableTokenStream
+    accidentally broke back compatibility of external analyzers that
+    subclassed core analyzers that implemented tokenStream but not
+    reusableTokenStream.  This is now fixed, such that if
+    reusableTokenStream is invoked on such a subclass, that method
+    will forcefully fallback to tokenStream.  (Mike McCandless)
+    
+ * LUCENE-1801: Token.clear() and Token.clearNoTermBuffer() now also clear
+    startOffset, endOffset and type. This is not likely to affect any
+    Tokenizer chains, as Tokenizers normally always set these three values.
+    This change was made to be conform to the new AttributeImpl.clear() and
+    AttributeSource.clearAttributes() to work identical for Token as one for all
+    AttributeImpl and the 6 separate AttributeImpls. (Uwe Schindler, Michael Busch)
+
+ * LUCENE-1483: When searching over multiple segments, a new Scorer is now created 
+    for each segment. Searching has been telescoped out a level and IndexSearcher now
+    operates much like MultiSearcher does. The Weight is created only once for the top 
+    level Searcher, but each Scorer is passed a per-segment IndexReader. This will 
+    result in doc ids in the Scorer being internal to the per-segment IndexReader. It 
+    has always been outside of the API to count on a given IndexReader to contain every 
+    doc id in the index - and if you have been ignoring MultiSearcher in your custom code 
+    and counting on this fact, you will find your code no longer works correctly. If a 
+    custom Scorer implementation uses any caches/filters that rely on being based on the 
+    top level IndexReader, it will need to be updated to correctly use contextless 
+    caches/filters eg you can't count on the IndexReader to contain any given doc id or 
+    all of the doc ids. (Mark Miller, Mike McCandless)
+
+ * LUCENE-1846: DateTools now uses the US locale to format the numbers in its
+    date/time strings instead of the default locale. For most locales there will
+    be no change in the index format, as DateFormatSymbols is using ASCII digits.
+    The usage of the US locale is important to guarantee correct ordering of
+    generated terms.  (Uwe Schindler)
+
+ * LUCENE-1860: MultiTermQuery now defaults to
+    CONSTANT_SCORE_AUTO_REWRITE_DEFAULT rewrite method (previously it
+    was SCORING_BOOLEAN_QUERY_REWRITE).  This means that PrefixQuery
+    and WildcardQuery will now produce constant score for all matching
+    docs, equal to the boost of the query.  (Mike McCandless)
+
+API Changes
+
+ * LUCENE-1419: Add expert API to set custom indexing chain. This API is 
+   package-protected for now, so we don't have to officially support it.
+   Yet, it will give us the possibility to try out different consumers
+   in the chain. (Michael Busch)
+
+ * LUCENE-1427: DocIdSet.iterator() is now allowed to throw
+   IOException.  (Paul Elschot, Mike McCandless)
+
+ * LUCENE-1422, LUCENE-1693: New TokenStream API that uses a new class called 
+   AttributeSource instead of the Token class, which is now a utility class that
+   holds common Token attributes. All attributes that the Token class had have 
+   been moved into separate classes: TermAttribute, OffsetAttribute, 
+   PositionIncrementAttribute, PayloadAttribute, TypeAttribute and FlagsAttribute. 
+   The new API is much more flexible; it allows to combine the Attributes 
+   arbitrarily and also to define custom Attributes. The new API has the same 
+   performance as the old next(Token) approach. For conformance with this new 
+   API Tee-/SinkTokenizer was deprecated and replaced by a new TeeSinkTokenFilter. 
+   (Michael Busch, Uwe Schindler; additional contributions and bug fixes by 
+   Daniel Shane, Doron Cohen)
+
+ * LUCENE-1467: Add nextDoc() and next(int) methods to OpenBitSetIterator.
+   These methods can be used to avoid additional calls to doc(). 
+   (Michael Busch)
+
+ * LUCENE-1468: Deprecate Directory.list(), which sometimes (in
+   FSDirectory) filters out files that don't look like index files, in
+   favor of new Directory.listAll(), which does no filtering.  Also,
+   listAll() will never return null; instead, it throws an IOException
+   (or subclass).  Specifically, FSDirectory.listAll() will throw the
+   newly added NoSuchDirectoryException if the directory does not
+   exist.  (Marcel Reutegger, Mike McCandless)
+
+ * LUCENE-1546: Add IndexReader.flush(Map commitUserData), allowing
+   you to record an opaque commitUserData (maps String -> String) into
+   the commit written by IndexReader.  This matches IndexWriter's
+   commit methods.  (Jason Rutherglen via Mike McCandless)
+
+ * LUCENE-652: Added org.apache.lucene.document.CompressionTools, to
+   enable compressing & decompressing binary content, external to
+   Lucene's indexing.  Deprecated Field.Store.COMPRESS.
+
+ * LUCENE-1561: Renamed Field.omitTf to Field.omitTermFreqAndPositions
+    (Otis Gospodnetic via Mike McCandless)
+  
+ * LUCENE-1500: Added new InvalidTokenOffsetsException to Highlighter methods
+    to denote issues when offsets in TokenStream tokens exceed the length of the
+    provided text.  (Mark Harwood)
+    
+ * LUCENE-1575, LUCENE-1483: HitCollector is now deprecated in favor of 
+    a new Collector abstract class. For easy migration, people can use
+    HitCollectorWrapper which translates (wraps) HitCollector into
+    Collector. Note that this class is also deprecated and will be
+    removed when HitCollector is removed.  Also TimeLimitedCollector
+    is deprecated in favor of the new TimeLimitingCollector which
+    extends Collector.  (Shai Erera, Mark Miller, Mike McCandless)
+
+ * LUCENE-1592: The method TermsEnum.skipTo() was deprecated, because
+    it is used nowhere in core/contrib and there is only a very ineffective
+    default implementation available. If you want to position a TermEnum
+    to another Term, create a new one using IndexReader.terms(Term).
+    (Uwe Schindler)
+
+ * LUCENE-1621: MultiTermQuery.getTerm() has been deprecated as it does
+    not make sense for all subclasses of MultiTermQuery. Check individual
+    subclasses to see if they support getTerm().  (Mark Miller)
+
+ * LUCENE-1636: Make TokenFilter.input final so it's set only
+    once. (Wouter Heijke, Uwe Schindler via Mike McCandless).
+
+ * LUCENE-1658, LUCENE-1451: Renamed FSDirectory to SimpleFSDirectory
+    (but left an FSDirectory base class).  Added an FSDirectory.open
+    static method to pick a good default FSDirectory implementation
+    given the OS. FSDirectories should now be instantiated using
+    FSDirectory.open or with public constructors rather than
+    FSDirectory.getDirectory(), which has been deprecated.
+    (Michael McCandless, Uwe Schindler, yonik)
+
+ * LUCENE-1665: Deprecate SortField.AUTO, to be removed in 3.0.
+    Instead, when sorting by field, the application should explicitly
+    state the type of the field.  (Mike McCandless)
+
+ * LUCENE-1660: StopFilter, StandardAnalyzer, StopAnalyzer now
+    require up front specification of enablePositionIncrement (Mike
+    McCandless)
+
+ * LUCENE-1614: DocIdSetIterator's next() and skipTo() were deprecated in favor
+    of the new nextDoc() and advance(). The new methods return the doc Id they 
+    landed on, saving an extra call to doc() in most cases.
+    For easy migration of the code, you can change the calls to next() to 
+    nextDoc() != DocIdSetIterator.NO_MORE_DOCS and similarly for skipTo(). 
+    However it is advised that you take advantage of the returned doc ID and not 
+    call doc() following those two.
+    Also, doc() was deprecated in favor of docID(). docID() should return -1 or 
+    NO_MORE_DOCS if nextDoc/advance were not called yet, or NO_MORE_DOCS if the 
+    iterator has exhausted. Otherwise it should return the current doc ID.
+    (Shai Erera via Mike McCandless)
+
+ * LUCENE-1672: All ctors/opens and other methods using String/File to
+    specify the directory in IndexReader, IndexWriter, and IndexSearcher
+    were deprecated. You should instantiate the Directory manually before
+    and pass it to these classes (LUCENE-1451, LUCENE-1658).
+    (Uwe Schindler)
+
+ * LUCENE-1407: Move RemoteSearchable, RemoteCachingWrapperFilter out
+    of Lucene's core into new contrib/remote package.  Searchable no
+    longer extends java.rmi.Remote (Simon Willnauer via Mike
+    McCandless)
+
+ * LUCENE-1677: The global property
+    org.apache.lucene.SegmentReader.class, and
+    ReadOnlySegmentReader.class are now deprecated, to be removed in
+    3.0.  src/gcj/* has been removed. (Earwin Burrfoot via Mike
+    McCandless)
+
+ * LUCENE-1673: Deprecated NumberTools in favour of the new
+    NumericRangeQuery and its new indexing format for numeric or
+    date values.  (Uwe Schindler)
+    
+ * LUCENE-1630, LUCENE-1771: Weight is now an abstract class, and adds
+    a scorer(IndexReader, boolean /* scoreDocsInOrder */, boolean /*
+    topScorer */) method instead of scorer(IndexReader). IndexSearcher uses 
+    this method to obtain a scorer matching the capabilities of the Collector 
+    wrt orderedness of docIDs. Some Scorers (like BooleanScorer) are much more
+    efficient if out-of-order documents scoring is allowed by a Collector.  
+    Collector must now implement acceptsDocsOutOfOrder. If you write a 
+    Collector which does not care about doc ID orderness, it is recommended 
+    that you return true.  Weight has a scoresDocsOutOfOrder method, which by 
+    default returns false.  If you create a Weight which will score documents 
+    out of order if requested, you should override that method to return true. 
+    BooleanQuery's setAllowDocsOutOfOrder and getAllowDocsOutOfOrder have been 
+    deprecated as they are not needed anymore. BooleanQuery will now score docs 
+    out of order when used with a Collector that can accept docs out of order.
+    Finally, Weight#explain now takes a sub-reader and sub-docID, rather than
+    a top level reader and docID.
+    (Shai Erera, Chris Hostetter, Martin Ruckli, Mark Miller via Mike McCandless)
+ 	
+ * LUCENE-1466, LUCENE-1906: Added CharFilter and MappingCharFilter, which allows
+    chaining & mapping of characters before tokenizers run. CharStream (subclass of
+    Reader) is the base class for custom java.io.Reader's, that support offset
+    correction. Tokenizers got an additional method correctOffset() that is passed
+    down to the underlying CharStream if input is a subclass of CharStream/-Filter.
+    (Koji Sekiguchi via Mike McCandless, Uwe Schindler)
+
+ * LUCENE-1703: Add IndexWriter.waitForMerges.  (Tim Smith via Mike
+    McCandless)
+
+ * LUCENE-1625: CheckIndex's programmatic API now returns separate
+    classes detailing the status of each component in the index, and
+    includes more detailed status than previously.  (Tim Smith via
+    Mike McCandless)
+
+ * LUCENE-1713: Deprecated RangeQuery and RangeFilter and renamed to
+    TermRangeQuery and TermRangeFilter. TermRangeQuery is in constant
+    score auto rewrite mode by default. The new classes also have new
+    ctors taking field and term ranges as Strings (see also
+    LUCENE-1424).  (Uwe Schindler)
+
+ * LUCENE-1609: The termInfosIndexDivisor must now be specified
+    up-front when opening the IndexReader.  Attempts to call
+    IndexReader.setTermInfosIndexDivisor will hit an
+    UnsupportedOperationException.  This was done to enable removal of
+    all synchronization in TermInfosReader, which previously could
+    cause threads to pile up in certain cases. (Dan Rosher via Mike
+    McCandless)
+    
+ * LUCENE-1688: Deprecate static final String stop word array in and 
+    StopAnalzyer and replace it with an immutable implementation of 
+    CharArraySet.  (Simon Willnauer via Mark Miller)
+
+ * LUCENE-1742: SegmentInfos, SegmentInfo and SegmentReader have been
+    made public as expert, experimental APIs.  These APIs may suddenly
+    change from release to release (Jason Rutherglen via Mike
+    McCandless).
+    
+ * LUCENE-1754: QueryWeight.scorer() can return null if no documents
+    are going to be matched by the query. Similarly,
+    Filter.getDocIdSet() can return null if no documents are going to
+    be accepted by the Filter. Note that these 'can' return null,
+    however they don't have to and can return a Scorer/DocIdSet which
+    does not match / reject all documents.  This is already the
+    behavior of some QueryWeight/Filter implementations, and is
+    documented here just for emphasis. (Shai Erera via Mike
+    McCandless)
+
+ * LUCENE-1705: Added IndexWriter.deleteAllDocuments.  (Tim Smith via
+    Mike McCandless)
+
+ * LUCENE-1460: Changed TokenStreams/TokenFilters in contrib to
+    use the new TokenStream API. (Robert Muir, Michael Busch)
+
+ * LUCENE-1748: LUCENE-1001 introduced PayloadSpans, but this was a back
+    compat break and caused custom SpanQuery implementations to fail at runtime
+    in a variety of ways. This issue attempts to remedy things by causing
+    a compile time break on custom SpanQuery implementations and removing 
+    the PayloadSpans class, with its functionality now moved to Spans. To
+    help in alleviating future back compat pain, Spans has been changed from
+    an interface to an abstract class.
+    (Hugh Cayless, Mark Miller)
+    
+ * LUCENE-1808: Query.createWeight has been changed from protected to
+    public. (Tim Smith, Shai Erera via Mark Miller)
+
+ * LUCENE-1826: Add constructors that take AttributeSource and
+    AttributeFactory to all Tokenizer implementations.
+    (Michael Busch)
+    
+ * LUCENE-1847: Similarity#idf for both a Term and Term Collection have
+    been deprecated. New versions that return an IDFExplanation have been
+    added.  (Yasoja Seneviratne, Mike McCandless, Mark Miller)
+    
+ * LUCENE-1877: Made NativeFSLockFactory the default for
+    the new FSDirectory API (open(), FSDirectory subclass ctors).
+    All FSDirectory system properties were deprecated and all lock
+    implementations use no lock prefix if the locks are stored inside
+    the index directory. Because the deprecated String/File ctors of
+    IndexWriter and IndexReader (LUCENE-1672) and FSDirectory.getDirectory()
+    still use the old SimpleFSLockFactory and the new API
+    NativeFSLockFactory, we strongly recommend not to mix deprecated
+    and new API. (Uwe Schindler, Mike McCandless)
+
+ * LUCENE-1911: Added a new method isCacheable() to DocIdSet. This method
+    should return true, if the underlying implementation does not use disk
+    I/O and is fast enough to be directly cached by CachingWrapperFilter.
+    OpenBitSet, SortedVIntList, and DocIdBitSet are such candidates.
+    The default implementation of the abstract DocIdSet class returns false.
+    In this case, CachingWrapperFilter copies the DocIdSetIterator into an
+    OpenBitSet for caching.  (Uwe Schindler, Thomas Becker)
+
+Bug fixes
+
+ * LUCENE-1415: MultiPhraseQuery has incorrect hashCode() and equals()
+   implementation - Leads to Solr Cache misses. 
+   (Todd Feak, Mark Miller via yonik)
+
+ * LUCENE-1327: Fix TermSpans#skipTo() to behave as specified in javadocs
+   of Terms#skipTo(). (Michael Busch)
+
+ * LUCENE-1573: Do not ignore InterruptedException (caused by
+   Thread.interrupt()) nor enter deadlock/spin loop. Now, an interrupt
+   will cause a RuntimeException to be thrown.  In 3.0 we will change
+   public APIs to throw InterruptedException.  (Jeremy Volkman via
+   Mike McCandless)
+
+ * LUCENE-1590: Fixed stored-only Field instances do not change the
+   value of omitNorms, omitTermFreqAndPositions in FieldInfo; when you
+   retrieve such fields they will now have omitNorms=true and
+   omitTermFreqAndPositions=false (though these values are unused).
+   (Uwe Schindler via Mike McCandless)
+
+ * LUCENE-1587: RangeQuery#equals() could consider a RangeQuery
+   without a collator equal to one with a collator.
+   (Mark Platvoet via Mark Miller) 
+
+ * LUCENE-1600: Don't call String.intern unnecessarily in some cases
+   when loading documents from the index.  (P Eger via Mike
+   McCandless)
+
+ * LUCENE-1611: Fix case where OutOfMemoryException in IndexWriter
+   could cause "infinite merging" to happen.  (Christiaan Fluit via
+   Mike McCandless)
+
+ * LUCENE-1623: Properly handle back-compatibility of 2.3.x indexes that
+   contain field names with non-ascii characters.  (Mike Streeton via
+   Mike McCandless)
+
+ * LUCENE-1593: MultiSearcher and ParallelMultiSearcher did not break ties (in 
+   sort) by doc Id in a consistent manner (i.e., if Sort.FIELD_DOC was used vs. 
+   when it wasn't). (Shai Erera via Michael McCandless)
+
+ * LUCENE-1647: Fix case where IndexReader.undeleteAll would cause
+    the segment's deletion count to be incorrect. (Mike McCandless)
+
+ * LUCENE-1542: When the first token(s) have 0 position increment,
+    IndexWriter used to incorrectly record the position as -1, if no
+    payload is present, or Integer.MAX_VALUE if a payload is present.
+    This causes positional queries to fail to match.  The bug is now
+    fixed, but if your app relies on the buggy behavior then you must
+    call IndexWriter.setAllowMinus1Position().  That API is deprecated
+    so you must fix your application, and rebuild your index, to not
+    rely on this behavior by the 3.0 release of Lucene. (Jonathan
+    Mamou, Mark Miller via Mike McCandless)
+
+ * LUCENE-1658: Fixed MMapDirectory to correctly throw IOExceptions
+    on EOF, removed numeric overflow possibilities and added support
+    for a hack to unmap the buffers on closing IndexInput.
+    (Uwe Schindler)
+    
+ * LUCENE-1681: Fix infinite loop caused by a call to DocValues methods 
+    getMinValue, getMaxValue, getAverageValue. (Simon Willnauer via Mark Miller)
+
+ * LUCENE-1599: Add clone support for SpanQuerys. SpanRegexQuery counts
+    on this functionality and does not work correctly without it.
+    (Billow Gao, Mark Miller)
+
+ * LUCENE-1718: Fix termInfosIndexDivisor to carry over to reopened
+    readers (Mike McCandless)
+    
+ * LUCENE-1583: SpanOrQuery skipTo() doesn't always move forwards as Spans
+	documentation indicates it should.  (Moti Nisenson via Mark Miller)
+
+ * LUCENE-1566: Sun JVM Bug
+    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6478546 causes
+    invalid OutOfMemoryError when reading too many bytes at once from
+    a file on 32bit JVMs that have a large maximum heap size.  This
+    fix adds set/getReadChunkSize to FSDirectory so that large reads
+    are broken into chunks, to work around this JVM bug.  On 32bit
+    JVMs the default chunk size is 100 MB; on 64bit JVMs, which don't
+    show the bug, the default is Integer.MAX_VALUE. (Simon Willnauer
+    via Mike McCandless)
+    
+ * LUCENE-1448: Added TokenStream.end() to perform end-of-stream
+    operations (ie to return the end offset of the tokenization).  
+    This is important when multiple fields with the same name are added
+    to a document, to ensure offsets recorded in term vectors for all 
+    of the instances are correct.  
+    (Mike McCandless, Mark Miller, Michael Busch)
+
+ * LUCENE-1805: CloseableThreadLocal did not allow a null Object in get(), 
+    although it does allow it in set(Object). Fix get() to not assert the object
+    is not null. (Shai Erera via Mike McCandless)
+    
+ * LUCENE-1801: Changed all Tokenizers or TokenStreams in core/contrib)
+    that are the source of Tokens to always call
+    AttributeSource.clearAttributes() first. (Uwe Schindler)
+    
+ * LUCENE-1819: MatchAllDocsQuery.toString(field) should produce output
+    that is parsable by the QueryParser.  (John Wang, Mark Miller)
+
+ * LUCENE-1836: Fix localization bug in the new query parser and add 
+    new LocalizedTestCase as base class for localization junit tests.
+    (Robert Muir, Uwe Schindler via Michael Busch)
+
+ * LUCENE-1847: PhraseQuery/TermQuery/SpanQuery use IndexReader specific stats 
+    in their Weight#explain methods - these stats should be corpus wide.
+    (Yasoja Seneviratne, Mike McCandless, Mark Miller)
+
+ * LUCENE-1885: Fix the bug that NativeFSLock.isLocked() did not work,
+    if the lock was obtained by another NativeFSLock(Factory) instance.
+    Because of this IndexReader.isLocked() and IndexWriter.isLocked() did
+    not work correctly.  (Uwe Schindler)
+
+ * LUCENE-1899: Fix O(N^2) CPU cost when setting docIDs in order in an
+    OpenBitSet, due to an inefficiency in how the underlying storage is
+    reallocated.  (Nadav Har'El via Mike McCandless)
+
+ * LUCENE-1918: Fixed cases where a ParallelReader would
+   generate exceptions on being passed to
+   IndexWriter.addIndexes(IndexReader[]).  First case was when the
+   ParallelReader was empty.  Second case was when the ParallelReader
+   used to contain documents with TermVectors, but all such documents
+   have been deleted. (Christian Kohlschütter via Mike McCandless)
+
+New features
+
+ * LUCENE-1411: Added expert API to open an IndexWriter on a prior
+    commit, obtained from IndexReader.listCommits.  This makes it
+    possible to rollback changes to an index even after you've closed
+    the IndexWriter that made the changes, assuming you are using an
+    IndexDeletionPolicy that keeps past commits around.  This is useful
+    when building transactional support on top of Lucene.  (Mike
+    McCandless)
+
+ * LUCENE-1382: Add an optional arbitrary Map (String -> String)
+    "commitUserData" to IndexWriter.commit(), which is stored in the
+    segments file and is then retrievable via
+    IndexReader.getCommitUserData instance and static methods.
+    (Shalin Shekhar Mangar via Mike McCandless)
+
+ * LUCENE-1420: Similarity now has a computeNorm method that allows
+    custom Similarity classes to override how norm is computed.  It's
+    provided a FieldInvertState instance that contains details from
+    inverting the field.  The default impl is boost *
+    lengthNorm(numTerms), to be backwards compatible.  Also added
+    {set/get}DiscountOverlaps to DefaultSimilarity, to control whether
+    overlapping tokens (tokens with 0 position increment) should be
+    counted in lengthNorm.  (Andrzej Bialecki via Mike McCandless)
+
+ * LUCENE-1424: Moved constant score query rewrite capability into
+    MultiTermQuery, allowing TermRangeQuery, PrefixQuery and WildcardQuery
+    to switch between constant-score rewriting or BooleanQuery
+    expansion rewriting via a new setRewriteMethod method.
+    Deprecated ConstantScoreRangeQuery (Mark Miller via Mike
+    McCandless)
+
+ * LUCENE-1461: Added FieldCacheRangeFilter, a RangeFilter for
+    single-term fields that uses FieldCache to compute the filter.  If
+    your documents all have a single term for a given field, and you
+    need to create many RangeFilters with varying lower/upper bounds,
+    then this is likely a much faster way to create the filters than
+    RangeFilter.  FieldCacheRangeFilter allows ranges on all data types,
+    FieldCache supports (term ranges, byte, short, int, long, float, double).
+    However, it comes at the expense of added RAM consumption and slower
+    first-time usage due to populating the FieldCache.  It also does not
+    support collation  (Tim Sturge, Matt Ericson via Mike McCandless and
+    Uwe Schindler)
+
+ * LUCENE-1296: add protected method CachingWrapperFilter.docIdSetToCache 
+    to allow subclasses to choose which DocIdSet implementation to use
+    (Paul Elschot via Mike McCandless)
+    
+ * LUCENE-1390: Added ASCIIFoldingFilter, a Filter that converts 
+    alphabetic, numeric, and symbolic Unicode characters which are not in 
+    the first 127 ASCII characters (the "Basic Latin" Unicode block) into 
+    their ASCII equivalents, if one exists. ISOLatin1AccentFilter, which
+    handles a subset of this filter, has been deprecated.
+    (Andi Vajda, Steven Rowe via Mark Miller)
+
+ * LUCENE-1478: Added new SortField constructor allowing you to
+    specify a custom FieldCache parser to generate numeric values from
+    terms for a field.  (Uwe Schindler via Mike McCandless)
+
+ * LUCENE-1528: Add support for Ideographic Space to the queryparser.
+    (Luis Alves via Michael Busch)
+
+ * LUCENE-1487: Added FieldCacheTermsFilter, to filter by multiple
+    terms on single-valued fields.  The filter loads the FieldCache
+    for the field the first time it's called, and subsequent usage of
+    that field, even with different Terms in the filter, are fast.
+    (Tim Sturge, Shalin Shekhar Mangar via Mike McCandless).
+
+ * LUCENE-1314: Add clone(), clone(boolean readOnly) and
+    reopen(boolean readOnly) to IndexReader.  Cloning an IndexReader
+    gives you a new reader which you can make changes to (deletions,
+    norms) without affecting the original reader.  Now, with clone or
+    reopen you can change the readOnly of the original reader.  (Jason
+    Rutherglen, Mike McCandless)
+
+ * LUCENE-1506: Added FilteredDocIdSet, an abstract class which you
+    subclass to implement the "match" method to accept or reject each
+    docID.  Unlike ChainedFilter (under contrib/misc),
+    FilteredDocIdSet never requires you to materialize the full
+    bitset.  Instead, match() is called on demand per docID.  (John
+    Wang via Mike McCandless)
+
+ * LUCENE-1398: Add ReverseStringFilter to contrib/analyzers, a filter
+    to reverse the characters in each token.  (Koji Sekiguchi via yonik)
+
+ * LUCENE-1551: Add expert IndexReader.reopen(IndexCommit) to allow
+    efficiently opening a new reader on a specific commit, sharing
+    resources with the original reader.  (Torin Danil via Mike
+    McCandless)
+
+ * LUCENE-1434: Added org.apache.lucene.util.IndexableBinaryStringTools,
+    to encode byte[] as String values that are valid terms, and
+    maintain sort order of the original byte[] when the bytes are
+    interpreted as unsigned.  (Steven Rowe via Mike McCandless)
+
+ * LUCENE-1543: Allow MatchAllDocsQuery to optionally use norms from
+    a specific fields to set the score for a document.  (Karl Wettin
+    via Mike McCandless)
+
+ * LUCENE-1586: Add IndexReader.getUniqueTermCount().  (Mike
+    McCandless via Derek)
+
+ * LUCENE-1516: Added "near real-time search" to IndexWriter, via a
+    new expert getReader() method.  This method returns a reader that
+    searches the full index, including any uncommitted changes in the
+    current IndexWriter session.  This should result in a faster
+    turnaround than the normal approach of commiting the changes and
+    then reopening a reader.  (Jason Rutherglen via Mike McCandless)
+
+ * LUCENE-1603: Added new MultiTermQueryWrapperFilter, to wrap any
+    MultiTermQuery as a Filter.  Also made some improvements to
+    MultiTermQuery: return DocIdSet.EMPTY_DOCIDSET if there are no
+    terms in the enum; track the total number of terms it visited
+    during rewrite (getTotalNumberOfTerms).  FilteredTermEnum is also
+    more friendly to subclassing.  (Uwe Schindler via Mike McCandless)
+
+ * LUCENE-1605: Added BitVector.subset().  (Jeremy Volkman via Mike
+    McCandless)
+    
+ * LUCENE-1618: Added FileSwitchDirectory that enables files with
+    specified extensions to be stored in a primary directory and the
+    rest of the files to be stored in the secondary directory.  For
+    example, this can be useful for the large doc-store (stored
+    fields, term vectors) files in FSDirectory and the rest of the
+    index files in a RAMDirectory. (Jason Rutherglen via Mike
+    McCandless)
+
+ * LUCENE-1494: Added FieldMaskingSpanQuery which can be used to
+    cross-correlate Spans from different fields.
+    (Paul Cowan and Chris Hostetter)
+
+ * LUCENE-1634: Add calibrateSizeByDeletes to LogMergePolicy, to take
+    deletions into account when considering merges.  (Yasuhiro Matsuda
+    via Mike McCandless)
+
+ * LUCENE-1550: Added new n-gram based String distance measure for spell checking.
+    See the Javadocs for NGramDistance.java for a reference paper on why
+    this is helpful (Tom Morton via Grant Ingersoll)
+
+ * LUCENE-1470, LUCENE-1582, LUCENE-1602, LUCENE-1673, LUCENE-1701, LUCENE-1712:
+    Added NumericRangeQuery and NumericRangeFilter, a fast alternative to
+    RangeQuery/RangeFilter for numeric searches. They depend on a specific
+    structure of terms in the index that can be created by indexing
+    using the new NumericField or NumericTokenStream classes. NumericField
+    can only be used for indexing and optionally stores the values as
+    string representation in the doc store. Documents returned from
+    IndexReader/IndexSearcher will return only the String value using
+    the standard Fieldable interface. NumericFields can be sorted on
+    and loaded into the FieldCache.  (Uwe Schindler, Yonik Seeley,
+    Mike McCandless)
+
+ * LUCENE-1405: Added support for Ant resource collections in contrib/ant
+    <index> task.  (Przemyslaw Sztoch via Erik Hatcher)
+
+ * LUCENE-1699: Allow setting a TokenStream on Field/Fieldable for indexing
+    in conjunction with any other ways to specify stored field values,
+    currently binary or string values.  (yonik)
+    
+ * LUCENE-1701: Made the standard FieldCache.Parsers public and added
+    parsers for fields generated using NumericField/NumericTokenStream.
+    All standard parsers now also implement Serializable and enforce
+    their singleton status.  (Uwe Schindler, Mike McCandless)
+    
+ * LUCENE-1741: User configurable maximum chunk size in MMapDirectory.
+    On 32 bit platforms, the address space can be very fragmented, so
+    one big ByteBuffer for the whole file may not fit into address space.
+    (Eks Dev via Uwe Schindler)
+
+ * LUCENE-1644: Enable 4 rewrite modes for queries deriving from
+    MultiTermQuery (WildcardQuery, PrefixQuery, TermRangeQuery,
+    NumericRangeQuery): CONSTANT_SCORE_FILTER_REWRITE first creates a
+    filter and then assigns constant score (boost) to docs;
+    CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE create a BooleanQuery but
+    uses a constant score (boost); SCORING_BOOLEAN_QUERY_REWRITE also
+    creates a BooleanQuery but keeps the BooleanQuery's scores;
+    CONSTANT_SCORE_AUTO_REWRITE tries to pick the most performant
+    constant-score rewrite method.  (Mike McCandless)
+    
+ * LUCENE-1448: Added TokenStream.end(), to perform end-of-stream
+    operations.  This is currently used to fix offset problems when 
+    multiple fields with the same name are added to a document.
+    (Mike McCandless, Mark Miller, Michael Busch)
+ 
+ * LUCENE-1776: Add an option to not collect payloads for an ordered
+    SpanNearQuery. Payloads were not lazily loaded in this case as
+    the javadocs implied. If you have payloads and want to use an ordered
+    SpanNearQuery that does not need to use the payloads, you can
+    disable loading them with a new constructor switch.  (Mark Miller)
+
+ * LUCENE-1341: Added PayloadNearQuery to enable SpanNearQuery functionality
+    with payloads (Peter Keegan, Grant Ingersoll, Mark Miller)
+
+ * LUCENE-1790: Added PayloadTermQuery to enable scoring of payloads
+    based on the maximum payload seen for a document.
+    Slight refactoring of Similarity and other payload queries (Grant Ingersoll, Mark Miller)
+
+ * LUCENE-1749: Addition of FieldCacheSanityChecker utility, and
+    hooks to use it in all existing Lucene Tests.  This class can
+    be used by any application to inspect the FieldCache and provide
+    diagnostic information about the possibility of inconsistent
+    FieldCache usage.  Namely: FieldCache entries for the same field
+    with different datatypes or parsers; and FieldCache entries for
+    the same field in both a reader, and one of it's (descendant) sub
+    readers. 
+    (Chris Hostetter, Mark Miller)
+
+ * LUCENE-1789: Added utility class
+    oal.search.function.MultiValueSource to ease the transition to
+    segment based searching for any apps that directly call
+    oal.search.function.* APIs.  This class wraps any other
+    ValueSource, but takes care when composite (multi-segment) are
+    passed to not double RAM usage in the FieldCache.  (Chris
+    Hostetter, Mark Miller, Mike McCandless)
+   
+Optimizations
+
+ * LUCENE-1427: Fixed QueryWrapperFilter to not waste time computing
+    scores of the query, since they are just discarded.  Also, made it
+    more efficient (single pass) by not creating & populating an
+    intermediate OpenBitSet (Paul Elschot, Mike McCandless)
+
+ * LUCENE-1443: Performance improvement for OpenBitSetDISI.inPlaceAnd()
+    (Paul Elschot via yonik)
+
+ * LUCENE-1484: Remove synchronization of IndexReader.document() by
+    using CloseableThreadLocal internally.  (Jason Rutherglen via Mike
+    McCandless).
+    
+ * LUCENE-1124: Short circuit FuzzyQuery.rewrite when input token length 
+    is small compared to minSimilarity. (Timo Nentwig, Mark Miller)
+
+ * LUCENE-1316: MatchAllDocsQuery now avoids the synchronized
+    IndexReader.isDeleted() call per document, by directly accessing
+    the underlying deleteDocs BitVector.  This improves performance
+    with non-readOnly readers, especially in a multi-threaded
+    environment.  (Todd Feak, Yonik Seeley, Jason Rutherglen via Mike
+    McCandless)
+
+ * LUCENE-1483: When searching over multiple segments we now visit
+    each sub-reader one at a time.  This speeds up warming, since
+    FieldCache entries (if required) can be shared across reopens for
+    those segments that did not change, and also speeds up searches
+    that sort by relevance or by field values.  (Mark Miller, Mike
+    McCandless)
+    
+ * LUCENE-1575: The new Collector class decouples collect() from
+    score computation.  Collector.setScorer is called to establish the
+    current Scorer in-use per segment.  Collectors that require the
+    score should then call Scorer.score() per hit inside
+    collect(). (Shai Erera via Mike McCandless)
+
+ * LUCENE-1596: MultiTermDocs speedup when set with
+    MultiTermDocs.seek(MultiTermEnum) (yonik)
+    
+ * LUCENE-1653: Avoid creating a Calendar in every call to 
+    DateTools#dateToString, DateTools#timeToString and
+    DateTools#round.  (Shai Erera via Mark Miller)
+    
+ * LUCENE-1688: Deprecate static final String stop word array and 
+    replace it with an immutable implementation of CharArraySet.
+    Removes conversions between Set and array.
+    (Simon Willnauer via Mark Miller)
+
+ * LUCENE-1754: BooleanQuery.queryWeight.scorer() will return null if
+    it won't match any documents (e.g. if there are no required and
+    optional scorers, or not enough optional scorers to satisfy
+    minShouldMatch).  (Shai Erera via Mike McCandless)
+
+ * LUCENE-1607: To speed up string interning for commonly used
+    strings, the StringHelper.intern() interface was added with a
+    default implementation that uses a lockless cache.
+    (Earwin Burrfoot, yonik)
+
+ * LUCENE-1800: QueryParser should use reusable TokenStreams. (yonik)
+    
+
+Documentation
+
+ * LUCENE-1908: Scoring documentation imrovements in Similarity javadocs. 
+   (Mark Miller, Shai Erera, Ted Dunning, Jiri Kuhn, Marvin Humphrey, Doron Cohen)
+    
+ * LUCENE-1872: NumericField javadoc improvements
+    (Michael McCandless, Uwe Schindler)
+ 
+ * LUCENE-1875: Make TokenStream.end javadoc less confusing.
+    (Uwe Schindler)
+
+ * LUCENE-1862: Rectified duplicate package level javadocs for
+    o.a.l.queryParser and o.a.l.analysis.cn.
+    (Chris Hostetter)
+
+ * LUCENE-1886: Improved hyperlinking in key Analysis javadocs
+    (Bernd Fondermann via Chris Hostetter)
+
+ * LUCENE-1884: massive javadoc and comment cleanup, primarily dealing with
+    typos.
+    (Robert Muir via Chris Hostetter)
+    
+ * LUCENE-1898: Switch changes to use bullets rather than numbers and 
+    update changes-to-html script to handle the new format. 
+    (Steven Rowe, Mark Miller)
+    
+ * LUCENE-1900: Improve Searchable Javadoc.
+    (Nadav Har'El, Doron Cohen, Marvin Humphrey, Mark Miller)
+    
+ * LUCENE-1896: Improve Similarity#queryNorm javadocs.
+    (Jiri Kuhn, Mark Miller)
+
+Build
+
+ * LUCENE-1440: Add new targets to build.xml that allow downloading
+    and executing the junit testcases from an older release for
+    backwards-compatibility testing. (Michael Busch)
+
+ * LUCENE-1446: Add compatibility tag to common-build.xml and run 
+    backwards-compatibility tests in the nightly build. (Michael Busch)
+
+ * LUCENE-1529: Properly test "drop-in" replacement of jar with 
+    backwards-compatibility tests. (Mike McCandless, Michael Busch)
+
+ * LUCENE-1851: Change 'javacc' and 'clean-javacc' targets to build
+    and clean contrib/surround files. (Luis Alves via Michael Busch)
+
+ * LUCENE-1854: tar task should use longfile="gnu" to avoid false file
+    name length warnings.  (Mark Miller)
+
+Test Cases
+
+ * LUCENE-1791: Enhancements to the QueryUtils and CheckHits utility 
+    classes to wrap IndexReaders and Searchers in MultiReaders or 
+    MultiSearcher when possible to help exercise more edge cases.
+    (Chris Hostetter, Mark Miller)
+
+ * LUCENE-1852: Fix localization test failures. 
+    (Robert Muir via Michael Busch)
+    
+ * LUCENE-1843: Refactored all tests that use assertAnalyzesTo() & others
+    in core and contrib to use a new BaseTokenStreamTestCase
+    base class. Also rewrote some tests to use this general analysis assert
+    functions instead of own ones (e.g. TestMappingCharFilter).
+    The new base class also tests tokenization with the TokenStream.next()
+    backwards layer enabled (using Token/TokenWrapper as attribute
+    implementation) and disabled (default for Lucene 3.0)
+    (Uwe Schindler, Robert Muir)
+    
+ * LUCENE-1836: Added a new LocalizedTestCase as base class for localization
+    junit tests.  (Robert Muir, Uwe Schindler via Michael Busch)
+
+======================= Release 2.4.1 2009-03-09 =======================
+
+API Changes
+
+1. LUCENE-1186: Add Analyzer.close() to free internal ThreadLocal
+   resources.  (Christian Kohlschütter via Mike McCandless)
+
+Bug fixes
+
+1. LUCENE-1452: Fixed silent data-loss case whereby binary fields are
+   truncated to 0 bytes during merging if the segments being merged
+   are non-congruent (same field name maps to different field
+   numbers).  This bug was introduced with LUCENE-1219.  (Andrzej
+   Bialecki via Mike McCandless).
+
+2. LUCENE-1429: Don't throw incorrect IllegalStateException from
+   IndexWriter.close() if you've hit an OOM when autoCommit is true.
+   (Mike McCandless)
+
+3. LUCENE-1474: If IndexReader.flush() is called twice when there were
+   pending deletions, it could lead to later false AssertionError
+   during IndexReader.open.  (Mike McCandless)
+
+4. LUCENE-1430: Fix false AlreadyClosedException from IndexReader.open
+   (masking an actual IOException) that takes String or File path.
+   (Mike McCandless)
+
+5. LUCENE-1442: Multiple-valued NOT_ANALYZED fields can double-count
+   token offsets.  (Mike McCandless)
+
+6. LUCENE-1453: Ensure IndexReader.reopen()/clone() does not result in
+   incorrectly closing the shared FSDirectory. This bug would only
+   happen if you use IndexReader.open() with a File or String argument.
+   The returned readers are wrapped by a FilterIndexReader that
+   correctly handles closing of directory after reopen()/clone(). 
+   (Mark Miller, Uwe Schindler, Mike McCandless)
+
+7. LUCENE-1457: Fix possible overflow bugs during binary
+   searches. (Mark Miller via Mike McCandless)
+
+8. LUCENE-1459: Fix CachingWrapperFilter to not throw exception if
+   both bits() and getDocIdSet() methods are called. (Matt Jones via
+   Mike McCandless)
+
+9. LUCENE-1519: Fix int overflow bug during segment merging.  (Deepak
+   via Mike McCandless)
+
+10. LUCENE-1521: Fix int overflow bug when flushing segment.
+    (Shon Vella via Mike McCandless).
+
+11. LUCENE-1544: Fix deadlock in IndexWriter.addIndexes(IndexReader[]).
+    (Mike McCandless via Doug Sale)
+
+12. LUCENE-1547: Fix rare thread safety issue if two threads call
+    IndexWriter commit() at the same time.  (Mike McCandless)
+
+13. LUCENE-1465: NearSpansOrdered returns payloads from first possible match 
+    rather than the correct, shortest match; Payloads could be returned even
+    if the max slop was exceeded; The wrong payload could be returned in 
+    certain situations. (Jonathan Mamou, Greg Shackles, Mark Miller)
+
+14. LUCENE-1186: Add Analyzer.close() to free internal ThreadLocal
+    resources.  (Christian Kohlschütter via Mike McCandless)
+
+15. LUCENE-1552: Fix IndexWriter.addIndexes(IndexReader[]) to properly
+    rollback IndexWriter's internal state on hitting an
+    exception. (Scott Garland via Mike McCandless)
+
+======================= Release 2.4.0 2008-10-06 =======================
+
+Changes in backwards compatibility policy
+
+1. LUCENE-1340: In a minor change to Lucene's backward compatibility
+   policy, we are now allowing the Fieldable interface to have
+   changes, within reason, and made on a case-by-case basis.  If an
+   application implements it's own Fieldable, please be aware of
+   this.  Otherwise, no need to be concerned.  This is in effect for
+   all 2.X releases, starting with 2.4.  Also note, that in all
+   likelihood, Fieldable will be changed in 3.0.
+
+
+Changes in runtime behavior
+
+ 1. LUCENE-1151: Fix StandardAnalyzer to not mis-identify host names
+    (eg lucene.apache.org) as an ACRONYM.  To get back to the pre-2.4
+    backwards compatible, but buggy, behavior, you can either call
+    StandardAnalyzer.setDefaultReplaceInvalidAcronym(false) (static
+    method), or, set system property
+    org.apache.lucene.analysis.standard.StandardAnalyzer.replaceInvalidAcronym
+    to "false" on JVM startup.  All StandardAnalyzer instances created
+    after that will then show the pre-2.4 behavior.  Alternatively,
+    you can call setReplaceInvalidAcronym(false) to change the
+    behavior per instance of StandardAnalyzer.  This backwards
+    compatibility will be removed in 3.0 (hardwiring the value to
+    true).  (Mike McCandless)
+
+ 2. LUCENE-1044: IndexWriter with autoCommit=true now commits (such
+    that a reader can see the changes) far less often than it used to.
+    Previously, every flush was also a commit.  You can always force a
+    commit by calling IndexWriter.commit().  Furthermore, in 3.0,
+    autoCommit will be hardwired to false (IndexWriter constructors
+    that take an autoCommit argument have been deprecated) (Mike
+    McCandless)
+
+ 3. LUCENE-1335: IndexWriter.addIndexes(Directory[]) and
+    addIndexesNoOptimize no longer allow the same Directory instance
+    to be passed in more than once.  Internally, IndexWriter uses
+    Directory and segment name to uniquely identify segments, so
+    adding the same Directory more than once was causing duplicates
+    which led to problems (Mike McCandless)
+
+ 4. LUCENE-1396: Improve PhraseQuery.toString() so that gaps in the
+    positions are indicated with a ? and multiple terms at the same
+    position are joined with a |.  (Andrzej Bialecki via Mike
+    McCandless)
+
+API Changes
+
+ 1. LUCENE-1084: Changed all IndexWriter constructors to take an
+    explicit parameter for maximum field size.  Deprecated all the
+    pre-existing constructors; these will be removed in release 3.0.
+    NOTE: these new constructors set autoCommit to false.  (Steven
+    Rowe via Mike McCandless)
+
+ 2. LUCENE-584: Changed Filter API to return a DocIdSet instead of a
+    java.util.BitSet. This allows using more efficient data structures
+    for Filters and makes them more flexible. This deprecates
+    Filter.bits(), so all filters that implement this outside
+    the Lucene code base will need to be adapted. See also the javadocs
+    of the Filter class. (Paul Elschot, Michael Busch)
+
+ 3. LUCENE-1044: Added IndexWriter.commit() which flushes any buffered
+    adds/deletes and then commits a new segments file so readers will
+    see the changes.  Deprecate IndexWriter.flush() in favor of
+    IndexWriter.commit().  (Mike McCandless)
+
+ 4. LUCENE-325: Added IndexWriter.expungeDeletes methods, which
+    consult the MergePolicy to find merges necessary to merge away all
+    deletes from the index.  This should be a somewhat lower cost
+    operation than optimize.  (John Wang via Mike McCandless)
+
+ 5. LUCENE-1233: Return empty array instead of null when no fields
+    match the specified name in these methods in Document:
+    getFieldables, getFields, getValues, getBinaryValues.  (Stefan
+    Trcek vai Mike McCandless)
+
+ 6. LUCENE-1234: Make BoostingSpanScorer protected.  (Andi Vajda via Grant Ingersoll)
+
+ 7. LUCENE-510: The index now stores strings as true UTF-8 bytes
+    (previously it was Java's modified UTF-8).  If any text, either
+    stored fields or a token, has illegal UTF-16 surrogate characters,
+    these characters are now silently replaced with the Unicode
+    replacement character U+FFFD.  This is a change to the index file
+    format.  (Marvin Humphrey via Mike McCandless)
+
+ 8. LUCENE-852: Let the SpellChecker caller specify IndexWriter mergeFactor
+    and RAM buffer size.  (Otis Gospodnetic)
+	
+ 9. LUCENE-1290: Deprecate org.apache.lucene.search.Hits, Hit and HitIterator
+    and remove all references to these classes from the core. Also update demos
+    and tutorials. (Michael Busch)
+
+10. LUCENE-1288: Add getVersion() and getGeneration() to IndexCommit.
+    getVersion() returns the same value that IndexReader.getVersion()
+    returns when the reader is opened on the same commit.  (Jason
+    Rutherglen via Mike McCandless)
+
+11. LUCENE-1311: Added IndexReader.listCommits(Directory) static
+    method to list all commits in a Directory, plus IndexReader.open
+    methods that accept an IndexCommit and open the index as of that
+    commit.  These methods are only useful if you implement a custom
+    DeletionPolicy that keeps more than the last commit around.
+    (Jason Rutherglen via Mike McCandless)
+
+12. LUCENE-1325: Added IndexCommit.isOptimized().  (Shalin Shekhar
+    Mangar via Mike McCandless)
+
+13. LUCENE-1324: Added TokenFilter.reset(). (Shai Erera via Mike
+    McCandless)
+
+14. LUCENE-1340: Added Fieldable.omitTf() method to skip indexing term
+    frequency, positions and payloads.  This saves index space, and
+    indexing/searching time.  (Eks Dev via Mike McCandless)
+
+15. LUCENE-1219: Add basic reuse API to Fieldable for binary fields:
+    getBinaryValue/Offset/Length(); currently only lazy fields reuse
+    the provided byte[] result to getBinaryValue.  (Eks Dev via Mike
+    McCandless)
+
+16. LUCENE-1334: Add new constructor for Term: Term(String fieldName)
+    which defaults term text to "".  (DM Smith via Mike McCandless)
+
+17. LUCENE-1333: Added Token.reinit(*) APIs to re-initialize (reuse) a
+    Token.  Also added term() method to return a String, with a
+    performance penalty clearly documented.  Also implemented
+    hashCode() and equals() in Token, and fixed all core and contrib
+    analyzers to use the re-use APIs.  (DM Smith via Mike McCandless)
+
+18. LUCENE-1329: Add optional readOnly boolean when opening an
+    IndexReader.  A readOnly reader is not allowed to make changes
+    (deletions, norms) to the index; in exchanged, the isDeleted
+    method, often a bottleneck when searching with many threads, is
+    not synchronized.  The default for readOnly is still false, but in
+    3.0 the default will become true.  (Jason Rutherglen via Mike
+    McCandless)
+
+19. LUCENE-1367: Add IndexCommit.isDeleted().  (Shalin Shekhar Mangar
+    via Mike McCandless)
+
+20. LUCENE-1061: Factored out all "new XXXQuery(...)" in
+    QueryParser.java into protected methods newXXXQuery(...) so that
+    subclasses can create their own subclasses of each Query type.
+    (John Wang via Mike McCandless)
+
+21. LUCENE-753: Added new Directory implementation
+    org.apache.lucene.store.NIOFSDirectory, which uses java.nio's
+    FileChannel to do file reads.  On most non-Windows platforms, with
+    many threads sharing a single searcher, this may yield sizable
+    improvement to query throughput when compared to FSDirectory,
+    which only allows a single thread to read from an open file at a
+    time.  (Jason Rutherglen via Mike McCandless)
+
+22. LUCENE-1371: Added convenience method TopDocs Searcher.search(Query query, int n).
+    (Mike McCandless)
+    
+23. LUCENE-1356: Allow easy extensions of TopDocCollector by turning
+    constructor and fields from package to protected. (Shai Erera
+    via Doron Cohen) 
+
+24. LUCENE-1375: Added convenience method IndexCommit.getTimestamp,
+    which is equivalent to
+    getDirectory().fileModified(getSegmentsFileName()).  (Mike McCandless)
+
+23. LUCENE-1366: Rename Field.Index options to be more accurate:
+    TOKENIZED becomes ANALYZED;  UN_TOKENIZED becomes NOT_ANALYZED;
+    NO_NORMS becomes NOT_ANALYZED_NO_NORMS and a new ANALYZED_NO_NORMS
+    is added.  (Mike McCandless)
+
+24. LUCENE-1131: Added numDeletedDocs method to IndexReader (Otis Gospodnetic)
+
+Bug fixes
+    
+ 1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimize a single 
+    clause query if minNumShouldMatch<=0. (Shai Erera via Michael Busch)
+
+ 2. LUCENE-1169: Fixed bug in IndexSearcher.search(): searching with
+    a filter might miss some hits because scorer.skipTo() is called
+    without checking if the scorer is already at the right position.
+    scorer.skipTo(scorer.doc()) is not a NOOP, it behaves as 
+    scorer.next(). (Eks Dev, Michael Busch)
+
+ 3. LUCENE-1182: Added scorePayload to SimilarityDelegator (Andi Vajda via Grant Ingersoll)
+ 
+ 4. LUCENE-1213: MultiFieldQueryParser was ignoring slop in case
+    of a single field phrase. (Trejkaz via Doron Cohen)
+
+ 5. LUCENE-1228: IndexWriter.commit() was not updating the index version and as
+    result IndexReader.reopen() failed to sense index changes. (Doron Cohen)
+
+ 6. LUCENE-1267: Added numDocs() and maxDoc() to IndexWriter;
+    deprecated docCount().  (Mike McCandless)
+
+ 7. LUCENE-1274: Added new prepareCommit() method to IndexWriter,
+    which does phase 1 of a 2-phase commit (commit() does phase 2).
+    This is needed when you want to update an index as part of a
+    transaction involving external resources (eg a database).  Also
+    deprecated abort(), renaming it to rollback().  (Mike McCandless)
+
+ 8. LUCENE-1003: Stop RussianAnalyzer from removing numbers.
+    (TUSUR OpenTeam, Dmitry Lihachev via Otis Gospodnetic)
+
+ 9. LUCENE-1152: SpellChecker fix around clearIndex and indexDictionary
+    methods, plus removal of IndexReader reference.
+    (Naveen Belkale via Otis Gospodnetic)
+
+10. LUCENE-1046: Removed dead code in SpellChecker
+    (Daniel Naber via Otis Gospodnetic)
+	
+11. LUCENE-1189: Fixed the QueryParser to handle escaped characters within 
+    quoted terms correctly. (Tomer Gabel via Michael Busch)
+
+12. LUCENE-1299: Fixed NPE in SpellChecker when IndexReader is not null and field is (Grant Ingersoll)
+
+13. LUCENE-1303: Fixed BoostingTermQuery's explanation to be marked as a Match 
+    depending only upon the non-payload score part, regardless of the effect of 
+    the payload on the score. Prior to this, score of a query containing a BTQ 
+    differed from its explanation. (Doron Cohen)
+    
+14. LUCENE-1310: Fixed SloppyPhraseScorer to work also for terms repeating more 
+    than twice in the query. (Doron Cohen)
+
+15. LUCENE-1351: ISOLatin1AccentFilter now cleans additional ligatures (Cedrik Lime via Grant Ingersoll)
+
+16. LUCENE-1383: Workaround a nasty "leak" in Java's builtin
+    ThreadLocal, to prevent Lucene from causing unexpected
+    OutOfMemoryError in certain situations (notably J2EE
+    applications).  (Chris Lu via Mike McCandless)
+
+New features
+
+ 1. LUCENE-1137: Added Token.set/getFlags() accessors for passing more information about a Token through the analysis
+    process.  The flag is not indexed/stored and is thus only used by analysis.
+
+ 2. LUCENE-1147: Add -segment option to CheckIndex tool so you can
+    check only a specific segment or segments in your index.  (Mike
+    McCandless)
+
+ 3. LUCENE-1045: Reopened this issue to add support for short and bytes. 
+ 
+ 4. LUCENE-584: Added new data structures to o.a.l.util, such as 
+    OpenBitSet and SortedVIntList. These extend DocIdSet and can 
+    directly be used for Filters with the new Filter API. Also changed
+    the core Filters to use OpenBitSet instead of java.util.BitSet.
+    (Paul Elschot, Michael Busch)
+
+ 5. LUCENE-494: Added QueryAutoStopWordAnalyzer to allow for the automatic removal, from a query of frequently occurring terms.
+    This Analyzer is not intended for use during indexing. (Mark Harwood via Grant Ingersoll)
+
+ 6. LUCENE-1044: Change Lucene to properly "sync" files after
+    committing, to ensure on a machine or OS crash or power cut, even
+    with cached writes, the index remains consistent.  Also added
+    explicit commit() method to IndexWriter to force a commit without
+    having to close.  (Mike McCandless)
+    
+ 7. LUCENE-997: Add search timeout (partial) support.
+    A TimeLimitedCollector was added to allow limiting search time.
+    It is a partial solution since timeout is checked only when 
+    collecting a hit, and therefore a search for rare words in a 
+    huge index might not stop within the specified time.
+    (Sean Timm via Doron Cohen) 
+
+ 8. LUCENE-1184: Allow SnapshotDeletionPolicy to be re-used across
+    close/re-open of IndexWriter while still protecting an open
+    snapshot (Tim Brennan via Mike McCandless)
+
+ 9. LUCENE-1194: Added IndexWriter.deleteDocuments(Query) to delete
+    documents matching the specified query.  Also added static unlock
+    and isLocked methods (deprecating the ones in IndexReader).  (Mike
+    McCandless)
+
+10. LUCENE-1201: Add IndexReader.getIndexCommit() method. (Tim Brennan
+    via Mike McCandless)
+
+11. LUCENE-550:  Added InstantiatedIndex implementation.  Experimental 
+    Index store similar to MemoryIndex but allows for multiple documents 
+    in memory.  (Karl Wettin via Grant Ingersoll)
+
+12. LUCENE-400: Added word based n-gram filter (in contrib/analyzers) called ShingleFilter and an Analyzer wrapper
+    that wraps another Analyzer's token stream with a ShingleFilter (Sebastian Kirsch, Steve Rowe via Grant Ingersoll) 
+
+13. LUCENE-1166: Decomposition tokenfilter for languages like German and Swedish (Thomas Peuss via Grant Ingersoll)
+
+14. LUCENE-1187: ChainedFilter and BooleanFilter now work with new Filter API
+    and DocIdSetIterator-based filters. Backwards-compatibility with old 
+    BitSet-based filters is ensured. (Paul Elschot via Michael Busch)
+
+15. LUCENE-1295: Added new method to MoreLikeThis for retrieving interesting terms and made retrieveTerms(int) public. (Grant Ingersoll)
+
+16. LUCENE-1298: MoreLikeThis can now accept a custom Similarity (Grant Ingersoll)
+
+17. LUCENE-1297: Allow other string distance measures for the SpellChecker
+    (Thomas Morton via Otis Gospodnetic)
+
+18. LUCENE-1001: Provide access to Payloads via Spans.  All existing Span Query implementations in Lucene implement. (Mark Miller, Grant Ingersoll)
+
+19. LUCENE-1354: Provide programmatic access to CheckIndex (Grant Ingersoll, Mike McCandless)
+
+20. LUCENE-1279: Add support for Collators to RangeFilter/Query and Query Parser.  (Steve Rowe via Grant Ingersoll) 
+
+Optimizations
+
+ 1. LUCENE-705: When building a compound file, use
+    RandomAccessFile.setLength() to tell the OS/filesystem to
+    pre-allocate space for the file.  This may improve fragmentation
+    in how the CFS file is stored, and allows us to detect an upcoming
+    disk full situation before actually filling up the disk.  (Mike
+    McCandless)
+
+ 2. LUCENE-1120: Speed up merging of term vectors by bulk-copying the
+    raw bytes for each contiguous range of non-deleted documents.
+    (Mike McCandless)
+	
+ 3. LUCENE-1185: Avoid checking if the TermBuffer 'scratch' in 
+    SegmentTermEnum is null for every call of scanTo().
+    (Christian Kohlschuetter via Michael Busch)
+
+ 4. LUCENE-1217: Internal to Field.java, use isBinary instead of
+    runtime type checking for possible speedup of binaryValue().
+    (Eks Dev via Mike McCandless)
+
+ 5. LUCENE-1183: Optimized TRStringDistance class (in contrib/spell) that uses
+    less memory than the previous version.  (Cédrik LIME via Otis Gospodnetic)
+
+ 6. LUCENE-1195: Improve term lookup performance by adding a LRU cache to the
+    TermInfosReader. In performance experiments the speedup was about 25% on 
+    average on mid-size indexes with ~500,000 documents for queries with 3 
+    terms and about 7% on larger indexes with ~4.3M documents. (Michael Busch)
+
+Documentation
+
+  1. LUCENE-1236:  Added some clarifying remarks to EdgeNGram*.java (Hiroaki Kawai via Grant Ingersoll)
+  
+  2. LUCENE-1157 and LUCENE-1256: HTML changes log, created automatically 
+     from CHANGES.txt. This HTML file is currently visible only via developers page.     
+     (Steven Rowe via Doron Cohen)
+
+  3. LUCENE-1349: Fieldable can now be changed without breaking backward compatibility rules (within reason.  See the note at
+  the top of this file and also on Fieldable.java).  (Grant Ingersoll)
+  
+  4. LUCENE-1873: Update documentation to reflect current Contrib area status.
+     (Steven Rowe, Mark Miller)
+
+Build
+
+  1. LUCENE-1153: Added JUnit JAR to new lib directory.  Updated build to rely on local JUnit instead of ANT/lib.
+  
+  2. LUCENE-1202: Small fixes to the way Clover is used to work better
+     with contribs.  Of particular note: a single clover db is used
+     regardless of whether tests are run globally or in the specific
+     contrib directories. 
+     
+  3. LUCENE-1353: Javacc target in contrib/miscellaneous for 
+     generating the precedence query parser. 
+
+Test Cases
+
+ 1. LUCENE-1238: Fixed intermittent failures of TestTimeLimitedCollector.testTimeoutMultiThreaded.
+    Within this fix, "greedy" flag was added to TimeLimitedCollector, to allow the wrapped 
+    collector to collect also the last doc, after allowed-tTime passed. (Doron Cohen)   
+	
+ 2. LUCENE-1348: relax TestTimeLimitedCollector to not fail due to 
+    timeout exceeded (just because test machine is very busy).
+	
+======================= Release 2.3.2 2008-05-05 =======================
+
+Bug fixes
+
+ 1. LUCENE-1191: On hitting OutOfMemoryError in any index-modifying
+    methods in IndexWriter, do not commit any further changes to the
+    index to prevent risk of possible corruption.  (Mike McCandless)
+
+ 2. LUCENE-1197: Fixed issue whereby IndexWriter would flush by RAM
+    too early when TermVectors were in use.  (Mike McCandless)
+
+ 3. LUCENE-1198: Don't corrupt index if an exception happens inside
+    DocumentsWriter.init (Mike McCandless)
+
+ 4. LUCENE-1199: Added defensive check for null indexReader before
+    calling close in IndexModifier.close() (Mike McCandless)
+
+ 5. LUCENE-1200: Fix rare deadlock case in addIndexes* when
+    ConcurrentMergeScheduler is in use (Mike McCandless)
+
+ 6. LUCENE-1208: Fix deadlock case on hitting an exception while
+    processing a document that had triggered a flush (Mike McCandless)
+
+ 7. LUCENE-1210: Fix deadlock case on hitting an exception while
+    starting a merge when using ConcurrentMergeScheduler (Mike McCandless)
+
+ 8. LUCENE-1222: Fix IndexWriter.doAfterFlush to always be called on
+    flush (Mark Ferguson via Mike McCandless)
+	
+ 9. LUCENE-1226: Fixed IndexWriter.addIndexes(IndexReader[]) to commit
+    successfully created compound files. (Michael Busch)
+
+10. LUCENE-1150: Re-expose StandardTokenizer's constants publicly;
+    this was accidentally lost with LUCENE-966.  (Nicolas Lalevée via
+    Mike McCandless)
+
+11. LUCENE-1262: Fixed bug in BufferedIndexReader.refill whereby on
+    hitting an exception in readInternal, the buffer is incorrectly
+    filled with stale bytes such that subsequent calls to readByte()
+    return incorrect results.  (Trejkaz via Mike McCandless)
+
+12. LUCENE-1270: Fixed intermittent case where IndexWriter.close()
+    would hang after IndexWriter.addIndexesNoOptimize had been
+    called.  (Stu Hood via Mike McCandless)
+	
+Build
+
+ 1. LUCENE-1230: Include *pom.xml* in source release files. (Michael Busch)
+
+ 
+======================= Release 2.3.1 2008-02-22 =======================
+
+Bug fixes
+    
+ 1. LUCENE-1168: Fixed corruption cases when autoCommit=false and
+    documents have mixed term vectors (Suresh Guvvala via Mike
+    McCandless).
+
+ 2. LUCENE-1171: Fixed some cases where OOM errors could cause
+    deadlock in IndexWriter (Mike McCandless).
+
+ 3. LUCENE-1173: Fixed corruption case when autoCommit=false and bulk
+    merging of stored fields is used (Yonik via Mike McCandless).
+
+ 4. LUCENE-1163: Fixed bug in CharArraySet.contains(char[] buffer, int
+    offset, int len) that was ignoring offset and thus giving the
+    wrong answer.  (Thomas Peuss via Mike McCandless)
+	
+ 5. LUCENE-1177: Fix rare case where IndexWriter.optimize might do too
+    many merges at the end.  (Mike McCandless)
+	
+ 6. LUCENE-1176: Fix corruption case when documents with no term
+    vector fields are added before documents with term vector fields.
+    (Mike McCandless)
+	
+ 7. LUCENE-1179: Fixed assert statement that was incorrectly
+    preventing Fields with empty-string field name from working.
+    (Sergey Kabashnyuk via Mike McCandless)
+
+======================= Release 2.3.0 2008-01-21 =======================
+
+Changes in runtime behavior
+
+ 1. LUCENE-994: Defaults for IndexWriter have been changed to maximize
+    out-of-the-box indexing speed.  First, IndexWriter now flushes by
+    RAM usage (16 MB by default) instead of a fixed doc count (call
+    IndexWriter.setMaxBufferedDocs to get backwards compatible
+    behavior).  Second, ConcurrentMergeScheduler is used to run merges
+    using background threads (call IndexWriter.setMergeScheduler(new
+    SerialMergeScheduler()) to get backwards compatible behavior).
+    Third, merges are chosen based on size in bytes of each segment
+    rather than document count of each segment (call
+    IndexWriter.setMergePolicy(new LogDocMergePolicy()) to get
+    backwards compatible behavior).
+
+    NOTE: users of ParallelReader must change back all of these
+    defaults in order to ensure the docIDs "align" across all parallel
+    indices.
+
+    (Mike McCandless)
+
+ 2. LUCENE-1045: SortField.AUTO didn't work with long. When detecting
+    the field type for sorting automatically, numbers used to be
+    interpreted as int, then as float, if parsing the number as an int
+    failed. Now the detection checks for int, then for long,
+    then for float. (Daniel Naber)
+
+API Changes
+
+ 1. LUCENE-843: Added IndexWriter.setRAMBufferSizeMB(...) to have
+    IndexWriter flush whenever the buffered documents are using more
+    than the specified amount of RAM.  Also added new APIs to Token
+    that allow one to set a char[] plus offset and length to specify a
+    token (to avoid creating a new String() for each Token).  (Mike
+    McCandless)
+
+ 2. LUCENE-963: Add setters to Field to allow for re-using a single
+    Field instance during indexing.  This is a sizable performance
+    gain, especially for small documents.  (Mike McCandless)
+
+ 3. LUCENE-969: Add new APIs to Token, TokenStream and Analyzer to
+    permit re-using of Token and TokenStream instances during
+    indexing.  Changed Token to use a char[] as the store for the
+    termText instead of String.  This gives faster tokenization
+    performance (~10-15%).  (Mike McCandless)
+
+ 4. LUCENE-847: Factored MergePolicy, which determines which merges
+    should take place and when, as well as MergeScheduler, which
+    determines when the selected merges should actually run, out of
+    IndexWriter.  The default merge policy is now
+    LogByteSizeMergePolicy (see LUCENE-845) and the default merge
+    scheduler is now ConcurrentMergeScheduler (see
+    LUCENE-870). (Steven Parkes via Mike McCandless)
+
+ 5. LUCENE-1052: Add IndexReader.setTermInfosIndexDivisor(int) method
+    that allows you to reduce memory usage of the termInfos by further
+    sub-sampling (over the termIndexInterval that was used during
+    indexing) which terms are loaded into memory.  (Chuck Williams,
+    Doug Cutting via Mike McCandless)
+    
+ 6. LUCENE-743: Add IndexReader.reopen() method that re-opens an
+    existing IndexReader (see New features -> 8.) (Michael Busch)
+
+ 7. LUCENE-1062: Add setData(byte[] data), 
+    setData(byte[] data, int offset, int length), getData(), getOffset()
+    and clone() methods to o.a.l.index.Payload. Also add the field name 
+    as arg to Similarity.scorePayload(). (Michael Busch)
+
+ 8. LUCENE-982: Add IndexWriter.optimize(int maxNumSegments) method to
+    "partially optimize" an index down to maxNumSegments segments.
+    (Mike McCandless)
+
+ 9. LUCENE-1080: Changed Token.DEFAULT_TYPE to be public.
+
+10. LUCENE-1064: Changed TopDocs constructor to be public. 
+     (Shai Erera via Michael Busch)
+
+11. LUCENE-1079: DocValues cleanup: constructor now has no params,
+    and getInnerArray() now throws UnsupportedOperationException (Doron Cohen)
+
+12. LUCENE-1089: Added PriorityQueue.insertWithOverflow, which returns
+    the Object (if any) that was bumped from the queue to allow
+    re-use.  (Shai Erera via Mike McCandless)
+    
+13. LUCENE-1101: Token reuse 'contract' (defined LUCENE-969)
+    modified so it is token producer's responsibility
+    to call Token.clear(). (Doron Cohen)   
+
+14. LUCENE-1118: Changed StandardAnalyzer to skip too-long (default >
+    255 characters) tokens.  You can increase this limit by calling
+    StandardAnalyzer.setMaxTokenLength(...).  (Michael McCandless)
+
+
+Bug fixes
+
+ 1. LUCENE-933: QueryParser fixed to not produce empty sub 
+    BooleanQueries "()" even if the Analyzer produced no 
+    tokens for input. (Doron Cohen)
+
+ 2. LUCENE-955: Fixed SegmentTermPositions to work correctly with the
+    first term in the dictionary. (Michael Busch)
+
+ 3. LUCENE-951: Fixed NullPointerException in MultiLevelSkipListReader
+    that was thrown after a call of TermPositions.seek(). 
+    (Rich Johnson via Michael Busch)
+    
+ 4. LUCENE-938: Fixed cases where an unhandled exception in
+    IndexWriter's methods could cause deletes to be lost.
+    (Steven Parkes via Mike McCandless)
+      
+ 5. LUCENE-962: Fixed case where an unhandled exception in
+    IndexWriter.addDocument or IndexWriter.updateDocument could cause
+    unreferenced files in the index to not be deleted
+    (Steven Parkes via Mike McCandless)
+  
+ 6. LUCENE-957: RAMDirectory fixed to properly handle directories
+    larger than Integer.MAX_VALUE. (Doron Cohen)
+
+ 7. LUCENE-781: MultiReader fixed to not throw NPE if isCurrent(),
+    isOptimized() or getVersion() is called. Separated MultiReader
+    into two classes: MultiSegmentReader extends IndexReader, is
+    package-protected and is created automatically by IndexReader.open()
+    in case the index has multiple segments. The public MultiReader 
+    now extends MultiSegmentReader and is intended to be used by users
+    who want to add their own subreaders. (Daniel Naber, Michael Busch)
+
+ 8. LUCENE-970: FilterIndexReader now implements isOptimized(). Before
+    a call of isOptimized() would throw a NPE. (Michael Busch)
+
+ 9. LUCENE-832: ParallelReader fixed to not throw NPE if isCurrent(),
+    isOptimized() or getVersion() is called. (Michael Busch)
+      
+10. LUCENE-948: Fix FNFE exception caused by stale NFS client
+    directory listing caches when writers on different machines are
+    sharing an index over NFS and using a custom deletion policy (Mike
+    McCandless)
+
+11. LUCENE-978: Ensure TermInfosReader, FieldsReader, and FieldsReader
+    close any streams they had opened if an exception is hit in the
+    constructor.  (Ning Li via Mike McCandless)
+
+12. LUCENE-985: If an extremely long term is in a doc (> 16383 chars),
+    we now throw an IllegalArgumentException saying the term is too
+    long, instead of cryptic ArrayIndexOutOfBoundsException.  (Karl
+    Wettin via Mike McCandless)
+
+13. LUCENE-991: The explain() method of BoostingTermQuery had errors
+    when no payloads were present on a document.  (Peter Keegan via
+    Grant Ingersoll)
+
+14. LUCENE-992: Fixed IndexWriter.updateDocument to be atomic again
+    (this was broken by LUCENE-843).  (Ning Li via Mike McCandless)
+
+15. LUCENE-1008: Fixed corruption case when document with no term
+    vector fields is added after documents with term vector fields.
+    This bug was introduced with LUCENE-843.  (Grant Ingersoll via
+    Mike McCandless)
+
+16. LUCENE-1006: Fixed QueryParser to accept a "" field value (zero
+    length quoted string.)  (yonik)
+
+17. LUCENE-1010: Fixed corruption case when document with no term
+    vector fields is added after documents with term vector fields.
+    This case is hit during merge and would cause an EOFException.
+    This bug was introduced with LUCENE-984.  (Andi Vajda via Mike
+    McCandless)
+
+19. LUCENE-1009: Fix merge slowdown with LogByteSizeMergePolicy when
+    autoCommit=false and documents are using stored fields and/or term
+    vectors.  (Mark Miller via Mike McCandless)
+
+20. LUCENE-1011: Fixed corruption case when two or more machines,
+    sharing an index over NFS, can be writers in quick succession.
+    (Patrick Kimber via Mike McCandless)
+
+21. LUCENE-1028: Fixed Weight serialization for few queries:
+    DisjunctionMaxQuery, ValueSourceQuery, CustomScoreQuery.
+    Serialization check added for all queries.
+    (Kyle Maxwell via Doron Cohen)
+
+22. LUCENE-1048: Fixed incorrect behavior in Lock.obtain(...) when the
+    timeout argument is very large (eg Long.MAX_VALUE).  Also added
+    Lock.LOCK_OBTAIN_WAIT_FOREVER constant to never timeout.  (Nikolay
+    Diakov via Mike McCandless)
+
+23. LUCENE-1050: Throw LockReleaseFailedException in
+    Simple/NativeFSLockFactory if we fail to delete the lock file when
+    releasing the lock.  (Nikolay Diakov via Mike McCandless)
+
+24. LUCENE-1071: Fixed SegmentMerger to correctly set payload bit in 
+    the merged segment. (Michael Busch)
+
+25. LUCENE-1042: Remove throwing of IOException in getTermFreqVector(int, String, TermVectorMapper) to be consistent
+    with other getTermFreqVector calls.  Also removed the throwing of the other IOException in that method to be consistent.  (Karl Wettin via Grant Ingersoll)
+    
+26. LUCENE-1096: Fixed Hits behavior when hits' docs are deleted 
+    along with iterating the hits. Deleting docs already retrieved 
+    now works seamlessly. If docs not yet retrieved are deleted 
+    (e.g. from another thread), and then, relying on the initial 
+    Hits.length(), an application attempts to retrieve more hits 
+    than actually exist , a ConcurrentMidificationException 
+    is thrown.  (Doron Cohen)
+
+27. LUCENE-1068: Changed StandardTokenizer to fix an issue with it marking
+  the type of some tokens incorrectly.  This is done by adding a new flag named
+  replaceInvalidAcronym which defaults to false, the current, incorrect behavior.  Setting
+  this flag to true fixes the problem.  This flag is a temporary fix and is already
+  marked as being deprecated.  3.x will implement the correct approach.  (Shai Erera via Grant Ingersoll)
+  LUCENE-1140: Fixed NPE caused by 1068 (Alexei Dets via Grant Ingersoll)
+    
+28. LUCENE-749: ChainedFilter behavior fixed when logic of 
+    first filter is ANDNOT.  (Antonio Bruno via Doron Cohen)
+
+29. LUCENE-508: Make sure SegmentTermEnum.prev() is accurate (= last
+    term) after next() returns false.  (Steven Tamm via Mike
+    McCandless)
+
+    
+New features
+
+ 1. LUCENE-906: Elision filter for French.
+    (Mathieu Lecarme via Otis Gospodnetic)
+
+ 2. LUCENE-960: Added a SpanQueryFilter and related classes to allow for
+    not only filtering, but knowing where in a Document a Filter matches
+    (Grant Ingersoll)
+
+ 3. LUCENE-868: Added new Term Vector access features.  New callback
+    mechanism allows application to define how and where to read Term
+    Vectors from disk. This implementation contains several extensions
+    of the new abstract TermVectorMapper class.  The new API should be
+    back-compatible.  No changes in the actual storage of Term Vectors
+    has taken place.
+ 3.1 LUCENE-1038: Added setDocumentNumber() method to TermVectorMapper
+     to provide information about what document is being accessed.
+     (Karl Wettin via Grant Ingersoll)
+
+ 4. LUCENE-975: Added PositionBasedTermVectorMapper that allows for
+    position based lookup of term vector information.
+    See item #3 above (LUCENE-868).
+
+ 5. LUCENE-1011: Added simple tools (all in org.apache.lucene.store)
+    to verify that locking is working properly.  LockVerifyServer runs
+    a separate server to verify locks.  LockStressTest runs a simple
+    tool that rapidly obtains and releases locks.
+    VerifyingLockFactory is a LockFactory that wraps any other
+    LockFactory and consults the LockVerifyServer whenever a lock is
+    obtained or released, throwing an exception if an illegal lock
+    obtain occurred.  (Patrick Kimber via Mike McCandless)
+
+ 6. LUCENE-1015: Added FieldCache extension (ExtendedFieldCache) to
+    support doubles and longs.  Added support into SortField for sorting
+    on doubles and longs as well.  (Grant Ingersoll)
+
+ 7. LUCENE-1020: Created basic index checking & repair tool
+    (o.a.l.index.CheckIndex).  When run without -fix it does a
+    detailed test of all segments in the index and reports summary
+    information and any errors it hit.  With -fix it will remove
+    segments that had errors.  (Mike McCandless)
+
+ 8. LUCENE-743: Add IndexReader.reopen() method that re-opens an
+    existing IndexReader by only loading those portions of an index
+    that have changed since the reader was (re)opened. reopen() can
+    be significantly faster than open(), depending on the amount of
+    index changes. SegmentReader, MultiSegmentReader, MultiReader,
+    and ParallelReader implement reopen(). (Michael Busch) 
+
+ 9. LUCENE-1040: CharArraySet useful for efficiently checking
+    set membership of text specified by char[]. (yonik)
+
+10. LUCENE-1073: Created SnapshotDeletionPolicy to facilitate taking a
+    live backup of an index without pausing indexing.  (Mike
+    McCandless)
+    
+11. LUCENE-1019: CustomScoreQuery enhanced to support multiple 
+    ValueSource queries. (Kyle Maxwell via Doron Cohen)
+    
+12. LUCENE-1095: Added an option to StopFilter to increase 
+    positionIncrement of the token succeeding a stopped token.
+    Disabled by default. Similar option added to QueryParser 
+    to consider token positions when creating PhraseQuery 
+    and MultiPhraseQuery. Disabled by default (so by default
+    the query parser ignores position increments).
+    (Doron Cohen)
+
+13. LUCENE-1380: Added TokenFilter for setting position increment in special cases related to the ShingleFilter (Mck SembWever, Steve Rowe, Karl Wettin via Grant Ingersoll)
+
+
+
+Optimizations
+
+ 1. LUCENE-937: CachingTokenFilter now uses an iterator to access the 
+    Tokens that are cached in the LinkedList. This increases performance 
+    significantly, especially when the number of Tokens is large. 
+    (Mark Miller via Michael Busch)
+
+ 2. LUCENE-843: Substantial optimizations to improve how IndexWriter
+    uses RAM for buffering documents and to speed up indexing (2X-8X
+    faster).  A single shared hash table now records the in-memory
+    postings per unique term and is directly flushed into a single
+    segment.  (Mike McCandless)
+ 
+ 3. LUCENE-892: Fixed extra "buffer to buffer copy" that sometimes
+    takes place when using compound files.  (Mike McCandless)
+
+ 4. LUCENE-959: Remove synchronization in Document (yonik)
+
+ 5. LUCENE-963: Add setters to Field to allow for re-using a single
+    Field instance during indexing.  This is a sizable performance
+    gain, especially for small documents.  (Mike McCandless)
+
+ 6. LUCENE-939: Check explicitly for boundary conditions in FieldInfos
+    and don't rely on exceptions. (Michael Busch)
+
+ 7. LUCENE-966: Very substantial speedups (~6X faster) for
+    StandardTokenizer (StandardAnalyzer) by using JFlex instead of
+    JavaCC to generate the tokenizer.
+    (Stanislaw Osinski via Mike McCandless)
+
+ 8. LUCENE-969: Changed core tokenizers & filters to re-use Token and
+    TokenStream instances when possible to improve tokenization
+    performance (~10-15%). (Mike McCandless)
+
+ 9. LUCENE-871: Speedup ISOLatin1AccentFilter (Ian Boston via Mike
+    McCandless)
+
+10. LUCENE-986: Refactored SegmentInfos from IndexReader into the new
+    subclass DirectoryIndexReader. SegmentReader and MultiSegmentReader
+    now extend DirectoryIndexReader and are the only IndexReader 
+    implementations that use SegmentInfos to access an index and 
+    acquire a write lock for index modifications. (Michael Busch)
+
+11. LUCENE-1007: Allow flushing in IndexWriter to be triggered by
+    either RAM usage or document count or both (whichever comes
+    first), by adding symbolic constant DISABLE_AUTO_FLUSH to disable
+    one of the flush triggers.  (Ning Li via Mike McCandless)
+
+12. LUCENE-1043: Speed up merging of stored fields by bulk-copying the
+    raw bytes for each contiguous range of non-deleted documents.
+    (Robert Engels via Mike McCandless)
+
+13. LUCENE-693: Speed up nested conjunctions (~2x) that match many
+    documents, and a slight performance increase for top level
+    conjunctions.  (yonik)
+
+14. LUCENE-1098: Make inner class StandardAnalyzer.SavedStreams static 
+    and final. (Nathan Beyer via Michael Busch)
+
+Documentation
+
+ 1. LUCENE-1051: Generate separate javadocs for core, demo and contrib
+    classes, as well as an unified view. Also add an appropriate menu 
+    structure to the website. (Michael Busch)
+
+ 2. LUCENE-746: Fix error message in AnalyzingQueryParser.getPrefixQuery.
+    (Ronnie Kolehmainen via Michael Busch)
+
+Build
+
+ 1. LUCENE-908: Improvements and simplifications for how the MANIFEST
+    file and the META-INF dir are created. (Michael Busch)
+
+ 2. LUCENE-935: Various improvements for the maven artifacts. Now the
+    artifacts also include the sources as .jar files. (Michael Busch)
+
+ 3. Added apply-patch target to top-level build.  Defaults to looking for
+    a patch in ${basedir}/../patches with name specified by -Dpatch.name.
+    Can also specify any location by -Dpatch.file property on the command
+    line.  This should be helpful for easy application of patches, but it
+    is also a step towards integrating automatic patch application with
+    JIRA and Hudson, and is thus subject to change.  (Grant Ingersoll)
+ 
+ 4. LUCENE-935: Defined property "m2.repository.url" to allow setting
+    the url to a maven remote repository to deploy to. (Michael Busch)
+
+ 5. LUCENE-1051: Include javadocs in the maven artifacts. (Michael Busch)
+
+ 6. LUCENE-1055: Remove gdata-server from build files and its sources 
+    from trunk. (Michael Busch)
+
+ 7. LUCENE-935: Allow to deploy maven artifacts to a remote m2 repository
+    via scp and ssh authentication. (Michael Busch)
+	
+ 8. LUCENE-1123: Allow overriding the specification version for 
+    MANIFEST.MF (Michael Busch)
+
+Test Cases
+
+ 1. LUCENE-766: Test adding two fields with the same name but different 
+    term vector setting.  (Nicolas Lalevée via Doron Cohen)  
+    
+======================= Release 2.2.0 2007-06-19 =======================
+
+Changes in runtime behavior
+
+API Changes
+
+ 1. LUCENE-793: created new exceptions and added them to throws clause
+    for many methods (all subclasses of IOException for backwards
+    compatibility): index.StaleReaderException,
+    index.CorruptIndexException, store.LockObtainFailedException.
+    This was done to better call out the possible root causes of an
+    IOException from these methods.  (Mike McCandless)
+
+ 2. LUCENE-811: make SegmentInfos class, plus a few methods from related
+    classes, package-private again (they were unnecessarily made public
+    as part of LUCENE-701).  (Mike McCandless)
+
+ 3. LUCENE-710: added optional autoCommit boolean to IndexWriter
+    constructors.  When this is false, index changes are not committed
+    until the writer is closed.  This gives explicit control over when
+    a reader will see the changes.  Also added optional custom
+    deletion policy to explicitly control when prior commits are
+    removed from the index.  This is intended to allow applications to
+    share an index over NFS by customizing when prior commits are
+    deleted. (Mike McCandless)
+
+ 4. LUCENE-818: changed most public methods of IndexWriter,
+    IndexReader (and its subclasses), FieldsReader and RAMDirectory to
+    throw AlreadyClosedException if they are accessed after being
+    closed.  (Mike McCandless)
+
+ 5. LUCENE-834: Changed some access levels for certain Span classes to allow them
+    to be overridden.  They have been marked expert only and not for public
+    consumption. (Grant Ingersoll) 
+
+ 6. LUCENE-796: Removed calls to super.* from various get*Query methods in
+    MultiFieldQueryParser, in order to allow sub-classes to override them.
+    (Steven Parkes via Otis Gospodnetic)
+
+ 7. LUCENE-857: Removed caching from QueryFilter and deprecated QueryFilter
+    in favour of QueryWrapperFilter or QueryWrapperFilter + CachingWrapperFilter
+    combination when caching is desired.
+    (Chris Hostetter, Otis Gospodnetic)
+
+ 8. LUCENE-869: Changed FSIndexInput and FSIndexOutput to inner classes of FSDirectory
+    to enable extensibility of these classes. (Michael Busch)
+
+ 9. LUCENE-580: Added the public method reset() to TokenStream. This method does
+    nothing by default, but may be overwritten by subclasses to support consuming
+    the TokenStream more than once. (Michael Busch)
+
+10. LUCENE-580: Added a new constructor to Field that takes a TokenStream as
+    argument, available as tokenStreamValue(). This is useful to avoid the need of 
+    "dummy analyzers" for pre-analyzed fields. (Karl Wettin, Michael Busch)
+
+11. LUCENE-730: Added the new methods to BooleanQuery setAllowDocsOutOfOrder() and
+    getAllowDocsOutOfOrder(). Deprecated the methods setUseScorer14() and 
+    getUseScorer14(). The optimization patch LUCENE-730 (see Optimizations->3.) 
+    improves performance for certain queries but results in scoring out of docid 
+    order. This patch reverse this change, so now by default hit docs are scored
+    in docid order if not setAllowDocsOutOfOrder(true) is explicitly called.
+    This patch also enables the tests in QueryUtils again that check for docid
+    order. (Paul Elschot, Doron Cohen, Michael Busch)
+
+12. LUCENE-888: Added Directory.openInput(File path, int bufferSize)
+    to optionally specify the size of the read buffer.  Also added
+    BufferedIndexInput.setBufferSize(int) to change the buffer size.
+    (Mike McCandless)
+
+13. LUCENE-923: Make SegmentTermPositionVector package-private. It does not need
+    to be public because it implements the public interface TermPositionVector.
+    (Michael Busch)
+
+Bug fixes
+
+ 1. LUCENE-804: Fixed build.xml to pack a fully compilable src dist.  (Doron Cohen)
+
+ 2. LUCENE-813: Leading wildcard fixed to work with trailing wildcard.
+    Query parser modified to create a prefix query only for the case 
+    that there is a single trailing wildcard (and no additional wildcard 
+    or '?' in the query text).  (Doron Cohen)
+
+ 3. LUCENE-812: Add no-argument constructors to NativeFSLockFactory
+    and SimpleFSLockFactory.  This enables all 4 builtin LockFactory
+    implementations to be specified via the System property
+    org.apache.lucene.store.FSDirectoryLockFactoryClass.  (Mike McCandless)
+
+ 4. LUCENE-821: The new single-norm-file introduced by LUCENE-756
+    failed to reduce the number of open descriptors since it was still
+    opened once per field with norms. (yonik)
+
+ 5. LUCENE-823: Make sure internal file handles are closed when
+    hitting an exception (eg disk full) while flushing deletes in
+    IndexWriter's mergeSegments, and also during
+    IndexWriter.addIndexes.  (Mike McCandless)
+
+ 6. LUCENE-825: If directory is removed after
+    FSDirectory.getDirectory() but before IndexReader.open you now get
+    a FileNotFoundException like Lucene pre-2.1 (before this fix you
+    got an NPE).  (Mike McCandless)
+
+ 7. LUCENE-800: Removed backslash from the TERM_CHAR list in the queryparser, 
+    because the backslash is the escape character. Also changed the ESCAPED_CHAR
+    list to contain all possible characters, because every character that 
+    follows a backslash should be considered as escaped. (Michael Busch)
+
+ 8. LUCENE-372: QueryParser.parse() now ensures that the entire input string 
+    is consumed. Now a ParseException is thrown if a query contains too many
+    closing parentheses. (Andreas Neumann via Michael Busch)
+
+ 9. LUCENE-814: javacc build targets now fix line-end-style of generated files.
+    Now also deleting all javacc generated files before calling javacc.
+    (Steven Parkes, Doron Cohen)
+    
+10. LUCENE-829: close readers in contrib/benchmark. (Karl Wettin, Doron Cohen)
+
+11. LUCENE-828: Minor fix for Term's equal().
+    (Paul Cowan via Otis Gospodnetic)
+
+12. LUCENE-846: Fixed: if IndexWriter is opened with autoCommit=false,
+    and you call addIndexes, and hit an exception (eg disk full) then
+    when IndexWriter rolls back its internal state this could corrupt
+    the instance of IndexWriter (but, not the index itself) by
+    referencing already deleted segments.  This bug was only present
+    in 2.2 (trunk), ie was never released.  (Mike McCandless)
+    
+13. LUCENE-736: Sloppy phrase query with repeating terms matches wrong docs.
+    For example query "B C B"~2 matches the doc "A B C D E". (Doron Cohen)
+    
+14. LUCENE-789: Fixed: custom similarity is ignored when using MultiSearcher (problem reported 
+    by Alexey Lef). Now the similarity applied by MultiSearcer.setSimilarity(sim) is being used. 
+    Note that as before this fix, creating a multiSearcher from Searchers for whom custom similarity 
+    was set has no effect - it is masked by the similarity of the MultiSearcher. This is as 
+    designed, because MultiSearcher operates on Searchables (not Searchers). (Doron Cohen)
+
+15. LUCENE-880: Fixed DocumentWriter to close the TokenStreams after it
+    has written the postings. Then the resources associated with the 
+    TokenStreams can safely be released. (Michael Busch)
+
+16. LUCENE-883: consecutive calls to Spellchecker.indexDictionary()
+    won't insert terms twice anymore. (Daniel Naber)
+
+17. LUCENE-881: QueryParser.escape() now also escapes the characters
+    '|' and '&' which are part of the queryparser syntax. (Michael Busch)
+
+18. LUCENE-886: Spellchecker clean up: exceptions aren't printed to STDERR
+    anymore and ignored, but re-thrown. Some javadoc improvements.
+    (Daniel Naber)
+
+19. LUCENE-698: FilteredQuery now takes the query boost into account for 
+    scoring. (Michael Busch)
+
+20. LUCENE-763: Spellchecker: LuceneDictionary used to skip first word in 
+    enumeration. (Christian Mallwitz via Daniel Naber)
+    
+21. LUCENE-903: FilteredQuery explanation inaccuracy with boost.
+    Explanation tests now "deep" check the explanation details.
+    (Chris Hostetter, Doron Cohen)
+    
+22. LUCENE-912: DisjunctionMaxScorer first skipTo(target) call ignores the 
+    skip target param and ends up at the first match.
+    (Sudaakeran B. via Chris Hostetter & Doron Cohen)
+    
+23. LUCENE-913: Two consecutive score() calls return different 
+    scores for Boolean Queries. (Michael Busch, Doron Cohen)
+
+24. LUCENE-1013: Fix IndexWriter.setMaxMergeDocs to work "out of the
+    box", again, by moving set/getMaxMergeDocs up from
+    LogDocMergePolicy into LogMergePolicy.  This fixes the API
+    breakage (non backwards compatible change) caused by LUCENE-994.
+    (Yonik Seeley via Mike McCandless)
+
+New features
+
+ 1. LUCENE-759: Added two n-gram-producing TokenFilters.
+    (Otis Gospodnetic)
+
+ 2. LUCENE-822: Added FieldSelector capabilities to Searchable for use with
+    RemoteSearcher, and other Searchable implementations. (Mark Miller, Grant Ingersoll)
+
+ 3. LUCENE-755: Added the ability to store arbitrary binary metadata in the posting list.
+    These metadata are called Payloads. For every position of a Token one Payload in the form
+    of a variable length byte array can be stored in the prox file.
+    Remark: The APIs introduced with this feature are in experimental state and thus
+            contain appropriate warnings in the javadocs.
+    (Michael Busch)
+
+ 4. LUCENE-834: Added BoostingTermQuery which can boost scores based on the
+    values of a payload (see #3 above.) (Grant Ingersoll)
+
+ 5. LUCENE-834: Similarity has a new method for scoring payloads called
+    scorePayloads that can be overridden to take advantage of payload
+    storage (see #3 above)
+
+ 6. LUCENE-834: Added isPayloadAvailable() onto TermPositions interface and
+    implemented it in the appropriate places (Grant Ingersoll)
+
+ 7. LUCENE-853: Added RemoteCachingWrapperFilter to enable caching of Filters
+    on the remote side of the RMI connection.
+    (Matt Ericson via Otis Gospodnetic)
+
+ 8. LUCENE-446: Added Solr's search.function for scores based on field 
+    values, plus CustomScoreQuery for simple score (post) customization.
+    (Yonik Seeley, Doron Cohen)
+
+ 9. LUCENE-1058: Added new TeeTokenFilter (like the UNIX 'tee' command) and SinkTokenizer which can be used to share tokens between two or more
+    Fields such that the other Fields do not have to go through the whole Analysis process over again.  For instance, if you have two
+    Fields that share all the same analysis steps except one lowercases tokens and the other does not, you can coordinate the operations
+    between the two using the TeeTokenFilter and the SinkTokenizer.  See TeeSinkTokenTest.java for examples.
+    (Grant Ingersoll, Michael Busch, Yonik Seeley)
+ 
+Optimizations
+
+ 1. LUCENE-761: The proxStream is now cloned lazily in SegmentTermPositions
+    when nextPosition() is called for the first time. This allows using instances
+    of SegmentTermPositions instead of SegmentTermDocs without additional costs.
+    (Michael Busch)
+
+ 2. LUCENE-431: RAMInputStream and RAMOutputStream extend IndexInput and
+    IndexOutput directly now. This avoids further buffering and thus avoids 
+    unnecessary array copies. (Michael Busch)
+
+ 3. LUCENE-730: Updated BooleanScorer2 to make use of BooleanScorer in some
+    cases and possibly improve scoring performance.  Documents can now be
+    delivered out-of-order as they are scored (e.g. to HitCollector).
+    N.B. A bit of code had to be disabled in QueryUtils in order for
+    TestBoolean2 test to keep passing.
+    (Paul Elschot via Otis Gospodnetic)
+
+ 4. LUCENE-882: Spellchecker doesn't store the ngrams anymore but only indexes
+    them to keep the spell index small. (Daniel Naber)
+
+ 5. LUCENE-430: Delay allocation of the buffer after a clone of BufferedIndexInput.
+    Together with LUCENE-888 this will allow to adjust the buffer size
+    dynamically. (Paul Elschot, Michael Busch)
+ 
+ 6. LUCENE-888: Increase buffer sizes inside CompoundFileWriter and
+    BufferedIndexOutput.  Also increase buffer size in
+    BufferedIndexInput, but only when used during merging.  Together,
+    these increases yield 10-18% overall performance gain vs the
+    previous 1K defaults.  (Mike McCandless)
+
+ 7. LUCENE-866: Adds multi-level skip lists to the posting lists. This speeds 
+    up most queries that use skipTo(), especially on big indexes with large posting 
+    lists. For average AND queries the speedup is about 20%, for queries that 
+    contain very frequent and very unique terms the speedup can be over 80%.
+    (Michael Busch)
+
+Documentation
+
+ 1. LUCENE 791 && INFRA-1173: Infrastructure moved the Wiki to
+    http://wiki.apache.org/lucene-java/   Updated the links in the docs and
+    wherever else I found references.  (Grant Ingersoll, Joe Schaefer)
+
+ 2. LUCENE-807: Fixed the javadoc for ScoreDocComparator.compare() to be 
+    consistent with java.util.Comparator.compare(): Any integer is allowed to 
+    be returned instead of only -1/0/1.
+    (Paul Cowan via Michael Busch)
+ 
+ 3. LUCENE-875: Solved javadoc warnings & errors under jdk1.4. 
+    Solved javadoc errors under jdk5 (jars in path for gdata).
+    Made "javadocs" target depend on "build-contrib" for first downloading
+    contrib jars configured for dynamic downloaded. (Note: when running
+    behind firewall, a firewall prompt might pop up) (Doron Cohen)
+
+ 4. LUCENE-740: Added SNOWBALL-LICENSE.txt to the snowball package and a
+    remark about the license to NOTICE.TXT. (Steven Parkes via Michael Busch)
+
+ 5. LUCENE-925: Added analysis package javadocs. (Grant Ingersoll and Doron Cohen)
+
+ 6. LUCENE-926: Added document package javadocs. (Grant Ingersoll)
+
+Build
+
+ 1. LUCENE-802: Added LICENSE.TXT and NOTICE.TXT to Lucene jars.
+    (Steven Parkes via Michael Busch)
+
+ 2. LUCENE-885: "ant test" now includes all contrib tests.  The new
+    "ant test-core" target can be used to run only the Core (non
+    contrib) tests. 
+    (Chris Hostetter)
+    
+ 3. LUCENE-900: "ant test" now enables Java assertions (in Lucene packages).
+    (Doron Cohen)
+
+ 4. LUCENE-894: Add custom build file for binary distributions that includes
+    targets to build the demos. (Chris Hostetter, Michael Busch)
+
+ 5. LUCENE-904: The "package" targets in build.xml now also generate .md5
+    checksum files. (Chris Hostetter, Michael Busch)
+
+ 6. LUCENE-907: Include LICENSE.TXT and NOTICE.TXT in the META-INF dirs of
+    demo war, demo jar, and the contrib jars. (Michael Busch)
+    
+ 7. LUCENE-909: Demo targets for running the demo. (Doron Cohen)
+
+ 8. LUCENE-908: Improves content of MANIFEST file and makes it customizable
+    for the contribs. Adds SNOWBALL-LICENSE.txt to META-INF of the snowball
+    jar and makes sure that the lucli jar contains LICENSE.txt and NOTICE.txt.
+    (Chris Hostetter, Michael Busch)
+
+ 9. LUCENE-930: Various contrib building improvements to ensure contrib
+    dependencies are met, and test compilation errors fail the build.
+    (Steven Parkes, Chris Hostetter)
+
+10. LUCENE-622: Add ant target and pom.xml files for building maven artifacts 
+    of the Lucene core and the contrib modules. 
+    (Sami Siren, Karl Wettin, Michael Busch)
+
+======================= Release 2.1.0 2007-02-14 =======================
+
+Changes in runtime behavior
+
+ 1. 's' and 't' have been removed from the list of default stopwords
+    in StopAnalyzer (also used in by StandardAnalyzer). Having e.g. 's'
+    as a stopword meant that 's-class' led to the same results as 'class'.
+    Note that this problem still exists for 'a', e.g. in 'a-class' as
+    'a' continues to be a stopword.
+    (Daniel Naber)
+
+ 2. LUCENE-478: Updated the list of Unicode code point ranges for CJK
+    (now split into CJ and K) in StandardAnalyzer.  (John Wang and
+    Steven Rowe via Otis Gospodnetic)
+
+ 3. Modified some CJK Unicode code point ranges in StandardTokenizer.jj,
+    and added a few more of them to increase CJK character coverage.
+    Also documented some of the ranges.
+    (Otis Gospodnetic)
+
+ 4. LUCENE-489: Add support for leading wildcard characters (*, ?) to
+    QueryParser.  Default is to disallow them, as before.
+    (Steven Parkes via Otis Gospodnetic)
+
+ 5. LUCENE-703: QueryParser changed to default to use of ConstantScoreRangeQuery
+    for range queries. Added useOldRangeQuery property to QueryParser to allow
+    selection of old RangeQuery class if required.
+    (Mark Harwood)
+
+ 6. LUCENE-543: WildcardQuery now performs a TermQuery if the provided term
+    does not contain a wildcard character (? or *), when previously a
+    StringIndexOutOfBoundsException was thrown.
+    (Michael Busch via Erik Hatcher)
+
+ 7. LUCENE-726: Removed the use of deprecated doc.fields() method and
+    Enumeration.
+    (Michael Busch via Otis Gospodnetic)
+
+ 8. LUCENE-436: Removed finalize() in TermInfosReader and SegmentReader,
+    and added a call to enumerators.remove() in TermInfosReader.close().
+    The finalize() overrides were added to help with a pre-1.4.2 JVM bug
+    that has since been fixed, plus we no longer support pre-1.4.2 JVMs.
+    (Otis Gospodnetic)
+
+ 9. LUCENE-771: The default location of the write lock is now the
+    index directory, and is named simply "write.lock" (without a big
+    digest prefix).  The system properties "org.apache.lucene.lockDir"
+    nor "java.io.tmpdir" are no longer used as the global directory
+    for storing lock files, and the LOCK_DIR field of FSDirectory is
+    now deprecated.  (Mike McCandless)
+
+New features
+
+ 1. LUCENE-503: New ThaiAnalyzer and ThaiWordFilter in contrib/analyzers
+    (Samphan Raruenrom via Chris Hostetter)
+
+ 2. LUCENE-545: New FieldSelector API and associated changes to
+    IndexReader and implementations.  New Fieldable interface for use
+    with the lazy field loading mechanism.  (Grant Ingersoll and Chuck
+    Williams via Grant Ingersoll)
+
+ 3. LUCENE-676: Move Solr's PrefixFilter to Lucene core. (Yura
+    Smolsky, Yonik Seeley)
+
+ 4. LUCENE-678: Added NativeFSLockFactory, which implements locking
+    using OS native locking (via java.nio.*).  (Michael McCandless via
+    Yonik Seeley)
+
+ 5. LUCENE-544: Added the ability to specify different boosts for
+    different fields when using MultiFieldQueryParser (Matt Ericson
+    via Otis Gospodnetic)
+
+ 6. LUCENE-528: New IndexWriter.addIndexesNoOptimize() that doesn't
+    optimize the index when adding new segments, only performing
+    merges as needed.  (Ning Li via Yonik Seeley)
+
+ 7. LUCENE-573: QueryParser now allows backslash escaping in
+    quoted terms and phrases. (Michael Busch via Yonik Seeley)
+
+ 8. LUCENE-716: QueryParser now allows specification of Unicode
+    characters in terms via a unicode escape of the form \uXXXX
+    (Michael Busch via Yonik Seeley)
+
+ 9. LUCENE-709: Added RAMDirectory.sizeInBytes(), IndexWriter.ramSizeInBytes()
+    and IndexWriter.flushRamSegments(), allowing applications to
+    control the amount of memory used to buffer documents.
+    (Chuck Williams via Yonik Seeley)
+
+10. LUCENE-723: QueryParser now parses *:* as MatchAllDocsQuery
+    (Yonik Seeley)
+
+11. LUCENE-741: Command-line utility for modifying or removing norms
+    on fields in an existing index.  This is mostly based on LUCENE-496
+    and lives in contrib/miscellaneous.
+    (Chris Hostetter, Otis Gospodnetic)
+
+12. LUCENE-759: Added NGramTokenizer and EdgeNGramTokenizer classes and
+    their passing unit tests.
+    (Otis Gospodnetic)
+
+13. LUCENE-565: Added methods to IndexWriter to more efficiently
+    handle updating documents (the "delete then add" use case).  This
+    is intended to be an eventual replacement for the existing
+    IndexModifier.  Added IndexWriter.flush() (renamed from
+    flushRamSegments()) to flush all pending updates (held in RAM), to
+    the Directory.  (Ning Li via Mike McCandless)
+
+14. LUCENE-762: Added in SIZE and SIZE_AND_BREAK FieldSelectorResult options
+    which allow one to retrieve the size of a field without retrieving the
+    actual field. (Chuck Williams via Grant Ingersoll)
+
+15. LUCENE-799: Properly handle lazy, compressed fields.
+    (Mike Klaas via Grant Ingersoll)
+
+API Changes
+
+ 1. LUCENE-438: Remove "final" from Token, implement Cloneable, allow
+    changing of termText via setTermText().  (Yonik Seeley)
+
+ 2. org.apache.lucene.analysis.nl.WordlistLoader has been deprecated
+    and is supposed to be replaced with the WordlistLoader class in
+    package org.apache.lucene.analysis (Daniel Naber)
+
+ 3. LUCENE-609: Revert return type of Document.getField(s) to Field
+    for backward compatibility, added new Document.getFieldable(s)
+    for access to new lazy loaded fields. (Yonik Seeley)
+
+ 4. LUCENE-608: Document.fields() has been deprecated and a new method
+    Document.getFields() has been added that returns a List instead of
+    an Enumeration (Daniel Naber)
+
+ 5. LUCENE-605: New Explanation.isMatch() method and new ComplexExplanation
+    subclass allows explain methods to produce Explanations which model
+    "matching" independent of having a positive value.
+    (Chris Hostetter)
+
+ 6. LUCENE-621: New static methods IndexWriter.setDefaultWriteLockTimeout
+    and IndexWriter.setDefaultCommitLockTimeout for overriding default
+    timeout values for all future instances of IndexWriter (as well
+    as for any other classes that may reference the static values,
+    ie: IndexReader).
+    (Michael McCandless via Chris Hostetter)
+
+ 7. LUCENE-638: FSDirectory.list() now only returns the directory's
+    Lucene-related files. Thanks to this change one can now construct
+    a RAMDirectory from a file system directory that contains files
+    not related to Lucene.
+    (Simon Willnauer via Daniel Naber)
+
+ 8. LUCENE-635: Decoupling locking implementation from Directory
+    implementation.  Added set/getLockFactory to Directory and moved
+    all locking code into subclasses of abstract class LockFactory.
+    FSDirectory and RAMDirectory still default to their prior locking
+    implementations, but now you can mix & match, for example using
+    SingleInstanceLockFactory (ie, in memory locking) locking with an
+    FSDirectory.  Note that now you must call setDisableLocks before
+    the instantiation a FSDirectory if you wish to disable locking
+    for that Directory.
+    (Michael McCandless, Jeff Patterson via Yonik Seeley)
+
+ 9. LUCENE-657: Made FuzzyQuery non-final and inner ScoreTerm protected.
+    (Steven Parkes via Otis Gospodnetic)
+
+10. LUCENE-701: Lockless commits: a commit lock is no longer required
+    when a writer commits and a reader opens the index.  This includes
+    a change to the index file format (see docs/fileformats.html for
+    details).  It also removes all APIs associated with the commit
+    lock & its timeout.  Readers are now truly read-only and do not
+    block one another on startup.  This is the first step to getting
+    Lucene to work correctly over NFS (second step is
+    LUCENE-710). (Mike McCandless)
+
+11. LUCENE-722: DEFAULT_MIN_DOC_FREQ was misspelled DEFALT_MIN_DOC_FREQ
+    in Similarity's MoreLikeThis class. The misspelling has been
+    replaced by the correct spelling.
+    (Andi Vajda via Daniel Naber)
+
+12. LUCENE-738: Reduce the size of the file that keeps track of which
+    documents are deleted when the number of deleted documents is
+    small.  This changes the index file format and cannot be
+    read by previous versions of Lucene.  (Doron Cohen via Yonik Seeley)
+
+13. LUCENE-756: Maintain all norms in a single .nrm file to reduce the
+    number of open files and file descriptors for the non-compound index
+    format.  This changes the index file format, but maintains the
+    ability to read and update older indices. The first segment merge
+    on an older format index will create a single .nrm file for the new
+    segment.  (Doron Cohen via Yonik Seeley)
+
+14. LUCENE-732: DateTools support has been added to QueryParser, with
+    setters for both the default Resolution, and per-field Resolution.
+    For backwards compatibility, DateField is still used if no Resolutions
+    are specified. (Michael Busch via Chris Hostetter)
+
+15. Added isOptimized() method to IndexReader.
+    (Otis Gospodnetic)
+
+16. LUCENE-773: Deprecate the FSDirectory.getDirectory(*) methods that
+    take a boolean "create" argument.  Instead you should use
+    IndexWriter's "create" argument to create a new index.
+    (Mike McCandless)
+
+17. LUCENE-780: Add a static Directory.copy() method to copy files
+    from one Directory to another.  (Jiri Kuhn via Mike McCandless)
+
+18. LUCENE-773: Added Directory.clearLock(String name) to forcefully
+    remove an old lock.  The default implementation is to ask the
+    lockFactory (if non null) to clear the lock.  (Mike McCandless)
+
+19. LUCENE-795: Directory.renameFile() has been deprecated as it is
+    not used anymore inside Lucene.  (Daniel Naber)
+
+Bug fixes
+
+ 1. Fixed the web application demo (built with "ant war-demo") which
+    didn't work because it used a QueryParser method that had
+    been removed (Daniel Naber)
+
+ 2. LUCENE-583: ISOLatin1AccentFilter fails to preserve positionIncrement
+    (Yonik Seeley)
+
+ 3. LUCENE-575: SpellChecker min score is incorrectly changed by suggestSimilar
+    (Karl Wettin via Yonik Seeley)
+
+ 4. LUCENE-587: Explanation.toHtml was producing malformed HTML
+    (Chris Hostetter)
+
+ 5. Fix to allow MatchAllDocsQuery to be used with RemoteSearcher (Yonik Seeley)
+
+ 6. LUCENE-601: RAMDirectory and RAMFile made Serializable
+    (Karl Wettin via Otis Gospodnetic)
+
+ 7. LUCENE-557: Fixes to BooleanQuery and FilteredQuery so that the score
+    Explanations match up with the real scores.
+    (Chris Hostetter)
+
+ 8. LUCENE-607: ParallelReader's TermEnum fails to advance properly to
+    new fields (Chuck Williams, Christian Kohlschuetter via Yonik Seeley)
+
+ 9. LUCENE-610,LUCENE-611: Simple syntax changes to allow compilation with ecj:
+    disambiguate inner class scorer's use of doc() in BooleanScorer2,
+    other test code changes.  (DM Smith via Yonik Seeley)
+
+10. LUCENE-451: All core query types now use ComplexExplanations so that
+    boosts of zero don't confuse the BooleanWeight explain method.
+    (Chris Hostetter)
+
+11. LUCENE-593: Fixed LuceneDictionary's inner Iterator
+    (KÃ¥re Fiedler Christiansen via Otis Gospodnetic)
+
+12. LUCENE-641: fixed an off-by-one bug with IndexWriter.setMaxFieldLength()
+    (Daniel Naber)
+
+13. LUCENE-659: Make PerFieldAnalyzerWrapper delegate getPositionIncrementGap()
+    to the correct analyzer for the field. (Chuck Williams via Yonik Seeley)
+
+14. LUCENE-650: Fixed NPE in Locale specific String Sort when Document
+    has no value.
+    (Oliver Hutchison via Chris Hostetter)
+
+15. LUCENE-683: Fixed data corruption when reading lazy loaded fields.
+    (Yonik Seeley)
+
+16. LUCENE-678: Fixed bug in NativeFSLockFactory which caused the same
+    lock to be shared between different directories.
+    (Michael McCandless via Yonik Seeley)
+
+17. LUCENE-690: Fixed thread unsafe use of IndexInput by lazy loaded fields.
+    (Yonik Seeley)
+
+18. LUCENE-696: Fix bug when scorer for DisjunctionMaxQuery has skipTo()
+    called on it before next().  (Yonik Seeley)
+
+19. LUCENE-569: Fixed SpanNearQuery bug, for 'inOrder' queries it would fail
+    to recognize ordered spans if they overlapped with unordered spans.
+    (Paul Elschot via Chris Hostetter)
+
+20. LUCENE-706: Updated fileformats.xml|html concerning the docdelta value
+    in the frequency file. (Johan Stuyts, Doron Cohen via Grant Ingersoll)
+
+21. LUCENE-715: Fixed private constructor in IndexWriter.java to
+    properly release the acquired write lock if there is an
+    IOException after acquiring the write lock but before finishing
+    instantiation. (Matthew Bogosian via Mike McCandless)
+
+22. LUCENE-651: Multiple different threads requesting the same
+    FieldCache entry (often for Sorting by a field) at the same
+    time caused multiple generations of that entry, which was
+    detrimental to performance and memory use.
+    (Oliver Hutchison via Otis Gospodnetic)
+
+23. LUCENE-717: Fixed build.xml not to fail when there is no lib dir.
+    (Doron Cohen via Otis Gospodnetic)
+
+24. LUCENE-728: Removed duplicate/old MoreLikeThis and SimilarityQueries
+    classes from contrib/similarity, as their new home is under
+    contrib/queries.
+    (Otis Gospodnetic)
+
+25. LUCENE-669: Do not double-close the RandomAccessFile in
+    FSIndexInput/Output during finalize().  Besides sending an
+    IOException up to the GC, this may also be the cause intermittent
+    "The handle is invalid" IOExceptions on Windows when trying to
+    close readers or writers. (Michael Busch via Mike McCandless)
+
+26. LUCENE-702: Fix IndexWriter.addIndexes(*) to not corrupt the index
+    on any exceptions (eg disk full).  The semantics of these methods
+    is now transactional: either all indices are merged or none are.
+    Also fixed IndexWriter.mergeSegments (called outside of
+    addIndexes(*) by addDocument, optimize, flushRamSegments) and
+    IndexReader.commit() (called by close) to clean up and keep the
+    instance state consistent to what's actually in the index (Mike
+    McCandless).
+
+27. LUCENE-129: Change finalizers to do "try {...} finally
+    {super.finalize();}" to make sure we don't miss finalizers in
+    classes above us. (Esmond Pitt via Mike McCandless)
+
+28. LUCENE-754: Fix a problem introduced by LUCENE-651, causing
+    IndexReaders to hang around forever, in addition to not
+    fixing the original FieldCache performance problem.
+    (Chris Hostetter, Yonik Seeley)
+
+29. LUCENE-140: Fix IndexReader.deleteDocument(int docNum) to
+    correctly raise ArrayIndexOutOfBoundsException when docNum is too
+    large.  Previously, if docNum was only slightly too large (within
+    the same multiple of 8, ie, up to 7 ints beyond maxDoc), no
+    exception would be raised and instead the index would become
+    silently corrupted.  The corruption then only appears much later,
+    in mergeSegments, when the corrupted segment is merged with
+    segment(s) after it. (Mike McCandless)
+
+30. LUCENE-768: Fix case where an Exception during deleteDocument,
+    undeleteAll or setNorm in IndexReader could leave the reader in a
+    state where close() fails to release the write lock.
+    (Mike McCandless)
+
+31. Remove "tvp" from known index file extensions because it is
+    never used. (Nicolas Lalevée via Bernhard Messer)
+    
+32. LUCENE-767: Change how SegmentReader.maxDoc() is computed to not
+    rely on file length check and instead use the SegmentInfo's
+    docCount that's already stored explicitly in the index.  This is a
+    defensive bug fix (ie, there is no known problem seen "in real
+    life" due to this, just a possible future problem).  (Chuck
+    Williams via Mike McCandless)
+
+Optimizations
+
+  1. LUCENE-586: TermDocs.skipTo() is now more efficient for
+     multi-segment indexes.  This will improve the performance of many
+     types of queries against a non-optimized index. (Andrew Hudson
+     via Yonik Seeley)
+
+  2. LUCENE-623: RAMDirectory.close now nulls out its reference to all
+     internal "files", allowing them to be GCed even if references to the
+     RAMDirectory itself still exist. (Nadav Har'El via Chris Hostetter)
+
+  3. LUCENE-629: Compressed fields are no longer uncompressed and
+     recompressed during segment merges (e.g. during indexing or
+     optimizing), thus improving performance . (Michael Busch via Otis
+     Gospodnetic)
+
+  4. LUCENE-388: Improve indexing performance when maxBufferedDocs is
+     large by keeping a count of buffered documents rather than
+     counting after each document addition.  (Doron Cohen, Paul Smith,
+     Yonik Seeley)
+
+  5. Modified TermScorer.explain to use TermDocs.skipTo() instead of
+     looping through docs. (Grant Ingersoll)
+
+  6. LUCENE-672: New indexing segment merge policy flushes all
+     buffered docs to their own segment and delays a merge until
+     mergeFactor segments of a certain level have been accumulated.
+     This increases indexing performance in the presence of deleted
+     docs or partially full segments as well as enabling future
+     optimizations.
+
+     NOTE: this also fixes an "under-merging" bug whereby it is
+     possible to get far too many segments in your index (which will
+     drastically slow down search, risks exhausting file descriptor
+     limit, etc.).  This can happen when the number of buffered docs
+     at close, plus the number of docs in the last non-ram segment is
+     greater than mergeFactor. (Ning Li, Yonik Seeley)
+
+  7. Lazy loaded fields unnecessarily retained an extra copy of loaded
+     String data.  (Yonik Seeley)
+
+  8. LUCENE-443: ConjunctionScorer performance increase.  Speed up
+     any BooleanQuery with more than one mandatory clause.
+     (Abdul Chaudhry, Paul Elschot via Yonik Seeley)
+
+  9. LUCENE-365: DisjunctionSumScorer performance increase of
+     ~30%. Speeds up queries with optional clauses. (Paul Elschot via
+     Yonik Seeley)
+
+ 10. LUCENE-695: Optimized BufferedIndexInput.readBytes() for medium
+     size buffers, which will speed up merging and retrieving binary
+     and compressed fields.  (Nadav Har'El via Yonik Seeley)
+
+ 11. LUCENE-687: Lazy skipping on proximity file speeds up most
+     queries involving term positions, including phrase queries.
+     (Michael Busch via Yonik Seeley)
+
+ 12. LUCENE-714: Replaced 2 cases of manual for-loop array copying
+     with calls to System.arraycopy instead, in DocumentWriter.java.
+     (Nicolas Lalevee via Mike McCandless)
+
+ 13. LUCENE-729: Non-recursive skipTo and next implementation of
+     TermDocs for a MultiReader.  The old implementation could
+     recurse up to the number of segments in the index. (Yonik Seeley)
+
+ 14. LUCENE-739: Improve segment merging performance by reusing
+     the norm array across different fields and doing bulk writes
+     of norms of segments with no deleted docs.
+    (Michael Busch via Yonik Seeley)
+
+ 15. LUCENE-745: Add BooleanQuery.clauses(), allowing direct access
+     to the List of clauses and replaced the internal synchronized Vector
+     with an unsynchronized List. (Yonik Seeley)
+
+ 16. LUCENE-750: Remove finalizers from FSIndexOutput and move the
+     FSIndexInput finalizer to the actual file so all clones don't
+     register a new finalizer. (Yonik Seeley)
+
+Test Cases
+
+  1. Added TestTermScorer.java (Grant Ingersoll)
+
+  2. Added TestWindowsMMap.java (Benson Margulies via Mike McCandless)
+
+  3. LUCENE-744 Append the user.name property onto the temporary directory 
+     that is created so it doesn't interfere with other users. (Grant Ingersoll)
+
+Documentation
+
+  1. Added style sheet to xdocs named lucene.css and included in the
+     Anakia VSL descriptor.  (Grant Ingersoll)
+
+  2. Added scoring.xml document into xdocs.  Updated Similarity.java
+     scoring formula.(Grant Ingersoll and Steve Rowe.  Updates from:
+     Michael McCandless, Doron Cohen, Chris Hostetter, Doug Cutting).
+     Issue 664.
+
+  3. Added javadocs for FieldSelectorResult.java. (Grant Ingersoll)
+
+  4. Moved xdocs directory to src/site/src/documentation/content/xdocs per
+     Issue 707.  Site now builds using Forrest, just like the other Lucene
+     siblings.  See http://wiki.apache.org/jakarta-lucene/HowToUpdateTheWebsite
+     for info on updating the website. (Grant Ingersoll with help from Steve Rowe,
+     Chris Hostetter, Doug Cutting, Otis Gospodnetic, Yonik Seeley)
+
+  5. Added in Developer and System Requirements sections under Resources (Grant Ingersoll)
+
+  6. LUCENE-713 Updated the Term Vector section of File Formats to include
+     documentation on how Offset and Position info are stored in the TVF file.
+     (Grant Ingersoll, Samir Abdou)
+
+  7. Added in link to Clover Test Code Coverage Reports under the Develop
+     section in Resources (Grant Ingersoll)
+
+  8. LUCENE-748: Added details for semantics of IndexWriter.close on
+     hitting an Exception.  (Jed Wesley-Smith via Mike McCandless)
+
+  9. Added some text about what is contained in releases.
+     (Eric Haszlakiewicz via Grant Ingersoll)
+
+  10. LUCENE-758: Fix javadoc to clarify that RAMDirectory(Directory)
+      makes a full copy of the starting Directory.  (Mike McCandless)
+
+  11. LUCENE-764: Fix javadocs to detail temporary space requirements
+      for IndexWriter's optimize(), addIndexes(*) and addDocument(...)
+      methods.  (Mike McCandless)
+
+Build
+
+  1. Added in clover test code coverage per http://issues.apache.org/jira/browse/LUCENE-721
+     To enable clover code coverage, you must have clover.jar in the ANT
+     classpath and specify -Drun.clover=true on the command line.
+     (Michael Busch and Grant Ingersoll)
+
+  2. Added a sysproperty in common-build.xml per Lucene 752 to map java.io.tmpdir to
+     ${build.dir}/test just like the tempDir sysproperty.
+
+  3. LUCENE-757 Added new target named init-dist that does setup for
+     distribution of both binary and source distributions.  Called by package 
+     and package-*-src
+
+======================= Release 2.0.0 2006-05-26 =======================
+
+API Changes
+
+ 1. All deprecated methods and fields have been removed, except
+    DateField, which will still be supported for some time
+    so Lucene can read its date fields from old indexes
+    (Yonik Seeley & Grant Ingersoll)
+
+ 2. DisjunctionSumScorer is no longer public.
+    (Paul Elschot via Otis Gospodnetic)
+
+ 3. Creating a Field with both an empty name and an empty value
+    now throws an IllegalArgumentException
+    (Daniel Naber)
+
+ 4. LUCENE-301: Added new IndexWriter({String,File,Directory},
+    Analyzer) constructors that do not take a boolean "create"
+    argument.  These new constructors will create a new index if
+    necessary, else append to the existing one.  (Dan Armbrust via
+    Mike McCandless)
+
+New features
+
+ 1. LUCENE-496: Command line tool for modifying the field norms of an
+    existing index; added to contrib/miscellaneous.  (Chris Hostetter)
+
+ 2. LUCENE-577: SweetSpotSimilarity added to contrib/miscellaneous.
+    (Chris Hostetter)
+    
+Bug fixes
+
+ 1. LUCENE-330: Fix issue of FilteredQuery not working properly within
+    BooleanQuery.  (Paul Elschot via Erik Hatcher)
+
+ 2. LUCENE-515: Make ConstantScoreRangeQuery and ConstantScoreQuery work
+    with RemoteSearchable.  (Philippe Laflamme via Yonik Seeley)
+
+ 3. Added methods to get/set writeLockTimeout and commitLockTimeout in
+    IndexWriter. These could be set in Lucene 1.4 using a system property.
+    This feature had been removed without adding the corresponding
+    getter/setter methods.  (Daniel Naber)
+
+ 4. LUCENE-413: Fixed ArrayIndexOutOfBoundsException exceptions
+    when using SpanQueries. (Paul Elschot via Yonik Seeley)
+
+ 5. Implemented FilterIndexReader.getVersion() and isCurrent()
+    (Yonik Seeley)
+
+ 6. LUCENE-540: Fixed a bug with IndexWriter.addIndexes(Directory[])
+    that sometimes caused the index order of documents to change.
+    (Yonik Seeley)
+
+ 7. LUCENE-526: Fixed a bug in FieldSortedHitQueue that caused
+    subsequent String sorts with different locales to sort identically.
+    (Paul Cowan via Yonik Seeley)
+
+ 8. LUCENE-541: Add missing extractTerms() to DisjunctionMaxQuery
+    (Stefan Will via Yonik Seeley)
+
+ 9. LUCENE-514: Added getTermArrays() and extractTerms() to
+    MultiPhraseQuery (Eric Jain & Yonik Seeley)
+
+10. LUCENE-512: Fixed ClassCastException in ParallelReader.getTermFreqVectors
+    (frederic via Yonik)
+
+11. LUCENE-352: Fixed bug in SpanNotQuery that manifested as
+    NullPointerException when "exclude" query was not a SpanTermQuery.
+    (Chris Hostetter)
+
+12. LUCENE-572: Fixed bug in SpanNotQuery hashCode, was ignoring exclude clause
+    (Chris Hostetter)
+
+13. LUCENE-561: Fixed some ParallelReader bugs. NullPointerException if the reader
+    didn't know about the field yet, reader didn't keep track if it had deletions,
+    and deleteDocument calls could circumvent synchronization on the subreaders.
+    (Chuck Williams via Yonik Seeley)
+
+14. LUCENE-556: Added empty extractTerms() implementation to MatchAllDocsQuery and
+    ConstantScoreQuery in order to allow their use with a MultiSearcher.
+    (Yonik Seeley)
+
+15. LUCENE-546: Removed 2GB file size limitations for RAMDirectory.
+    (Peter Royal, Michael Chan, Yonik Seeley)
+
+16. LUCENE-485: Don't hold commit lock while removing obsolete index
+    files.  (Luc Vanlerberghe via cutting)
+
+
+1.9.1
+
+Bug fixes
+
+ 1. LUCENE-511: Fix a bug in the BufferedIndexOutput optimization
+    introduced in 1.9-final.  (Shay Banon & Steven Tamm via cutting)
+
+1.9 final
+
+Note that this release is mostly but not 100% source compatible with
+the previous release of Lucene (1.4.3). In other words, you should
+make sure your application compiles with this version of Lucene before
+you replace the old Lucene JAR with the new one.  Many methods have
+been deprecated in anticipation of release 2.0, so deprecation
+warnings are to be expected when upgrading from 1.4.3 to 1.9.
+
+Bug fixes
+ 
+ 1. The fix that made IndexWriter.setMaxBufferedDocs(1) work had negative 
+    effects on indexing performance and has thus been reverted. The 
+    argument for setMaxBufferedDocs(int) must now at least be 2, otherwise
+    an exception is thrown. (Daniel Naber)
+ 
+Optimizations
+     
+ 1. Optimized BufferedIndexOutput.writeBytes() to use
+    System.arraycopy() in more cases, rather than copying byte-by-byte.
+    (Lukas Zapletal via Cutting)
+
+1.9 RC1
+
+Requirements
+
+ 1. To compile and use Lucene you now need Java 1.4 or later.
+
+Changes in runtime behavior
+
+ 1. FuzzyQuery can no longer throw a TooManyClauses exception. If a
+    FuzzyQuery expands to more than BooleanQuery.maxClauseCount
+    terms only the BooleanQuery.maxClauseCount most similar terms
+    go into the rewritten query and thus the exception is avoided.
+    (Christoph)
+
+ 2. Changed system property from "org.apache.lucene.lockdir" to
+    "org.apache.lucene.lockDir", so that its casing follows the existing
+    pattern used in other Lucene system properties. (Bernhard)
+
+ 3. The terms of RangeQueries and FuzzyQueries are now converted to
+    lowercase by default (as it has been the case for PrefixQueries
+    and WildcardQueries before). Use setLowercaseExpandedTerms(false)
+    to disable that behavior but note that this also affects
+    PrefixQueries and WildcardQueries. (Daniel Naber)
+
+ 4. Document frequency that is computed when MultiSearcher is used is now
+    computed correctly and "globally" across subsearchers and indices, while
+    before it used to be computed locally to each index, which caused
+    ranking across multiple indices not to be equivalent.
+    (Chuck Williams, Wolf Siberski via Otis, bug #31841)
+
+ 5. When opening an IndexWriter with create=true, Lucene now only deletes
+    its own files from the index directory (looking at the file name suffixes
+    to decide if a file belongs to Lucene). The old behavior was to delete
+    all files. (Daniel Naber and Bernhard Messer, bug #34695)
+
+ 6. The version of an IndexReader, as returned by getCurrentVersion()
+    and getVersion() doesn't start at 0 anymore for new indexes. Instead, it
+    is now initialized by the system time in milliseconds.
+    (Bernhard Messer via Daniel Naber)
+
+ 7. Several default values cannot be set via system properties anymore, as
+    this has been considered inappropriate for a library like Lucene. For
+    most properties there are set/get methods available in IndexWriter which
+    you should use instead. This affects the following properties:
+    See IndexWriter for getter/setter methods:
+      org.apache.lucene.writeLockTimeout, org.apache.lucene.commitLockTimeout,
+      org.apache.lucene.minMergeDocs, org.apache.lucene.maxMergeDocs,
+      org.apache.lucene.maxFieldLength, org.apache.lucene.termIndexInterval,
+      org.apache.lucene.mergeFactor,
+    See BooleanQuery for getter/setter methods:
+      org.apache.lucene.maxClauseCount
+    See FSDirectory for getter/setter methods:
+      disableLuceneLocks
+    (Daniel Naber)
+
+ 8. Fixed FieldCacheImpl to use user-provided IntParser and FloatParser,
+    instead of using Integer and Float classes for parsing.
+    (Yonik Seeley via Otis Gospodnetic)
+
+ 9. Expert level search routines returning TopDocs and TopFieldDocs
+    no longer normalize scores.  This also fixes bugs related to
+    MultiSearchers and score sorting/normalization.
+    (Luc Vanlerberghe via Yonik Seeley, LUCENE-469)
+
+New features
+
+ 1. Added support for stored compressed fields (patch #31149)
+    (Bernhard Messer via Christoph)
+
+ 2. Added support for binary stored fields (patch #29370)
+    (Drew Farris and Bernhard Messer via Christoph)
+
+ 3. Added support for position and offset information in term vectors
+    (patch #18927). (Grant Ingersoll & Christoph)
+
+ 4. A new class DateTools has been added. It allows you to format dates
+    in a readable format adequate for indexing. Unlike the existing
+    DateField class DateTools can cope with dates before 1970 and it
+    forces you to specify the desired date resolution (e.g. month, day,
+    second, ...) which can make RangeQuerys on those fields more efficient.
+    (Daniel Naber)
+
+ 5. QueryParser now correctly works with Analyzers that can return more
+    than one token per position. For example, a query "+fast +car"
+    would be parsed as "+fast +(car automobile)" if the Analyzer
+    returns "car" and "automobile" at the same position whenever it
+    finds "car" (Patch #23307).
+    (Pierrick Brihaye, Daniel Naber)
+
+ 6. Permit unbuffered Directory implementations (e.g., using mmap).
+    InputStream is replaced by the new classes IndexInput and
+    BufferedIndexInput.  OutputStream is replaced by the new classes
+    IndexOutput and BufferedIndexOutput.  InputStream and OutputStream
+    are now deprecated and FSDirectory is now subclassable. (cutting)
+
+ 7. Add native Directory and TermDocs implementations that work under
+    GCJ.  These require GCC 3.4.0 or later and have only been tested
+    on Linux.  Use 'ant gcj' to build demo applications. (cutting)
+
+ 8. Add MMapDirectory, which uses nio to mmap input files.  This is
+    still somewhat slower than FSDirectory.  However it uses less
+    memory per query term, since a new buffer is not allocated per
+    term, which may help applications which use, e.g., wildcard
+    queries.  It may also someday be faster. (cutting & Paul Elschot)
+
+ 9. Added javadocs-internal to build.xml - bug #30360
+    (Paul Elschot via Otis)
+
+10. Added RangeFilter, a more generically useful filter than DateFilter.
+    (Chris M Hostetter via Erik)
+
+11. Added NumberTools, a utility class indexing numeric fields.
+    (adapted from code contributed by Matt Quail; committed by Erik)
+
+12. Added public static IndexReader.main(String[] args) method.
+    IndexReader can now be used directly at command line level
+    to list and optionally extract the individual files from an existing
+    compound index file.
+    (adapted from code contributed by Garrett Rooney; committed by Bernhard)
+
+13. Add IndexWriter.setTermIndexInterval() method.  See javadocs.
+    (Doug Cutting)
+
+14. Added LucenePackage, whose static get() method returns java.util.Package,
+    which lets the caller get the Lucene version information specified in
+    the Lucene Jar.
+    (Doug Cutting via Otis)
+
+15. Added Hits.iterator() method and corresponding HitIterator and Hit objects.
+    This provides standard java.util.Iterator iteration over Hits.
+    Each call to the iterator's next() method returns a Hit object.
+    (Jeremy Rayner via Erik)
+
+16. Add ParallelReader, an IndexReader that combines separate indexes
+    over different fields into a single virtual index.  (Doug Cutting)
+
+17. Add IntParser and FloatParser interfaces to FieldCache, so that
+    fields in arbitrarily formats can be cached as ints and floats.
+    (Doug Cutting)
+
+18. Added class org.apache.lucene.index.IndexModifier which combines
+    IndexWriter and IndexReader, so you can add and delete documents without
+    worrying about synchronization/locking issues.
+    (Daniel Naber)
+
+19. Lucene can now be used inside an unsigned applet, as Lucene's access
+    to system properties will not cause a SecurityException anymore.
+    (Jon Schuster via Daniel Naber, bug #34359)
+
+20. Added a new class MatchAllDocsQuery that matches all documents.
+    (John Wang via Daniel Naber, bug #34946)
+
+21. Added ability to omit norms on a per field basis to decrease
+    index size and memory consumption when there are many indexed fields.
+    See Field.setOmitNorms()
+    (Yonik Seeley, LUCENE-448)
+
+22. Added NullFragmenter to contrib/highlighter, which is useful for
+    highlighting entire documents or fields.
+    (Erik Hatcher)
+
+23. Added regular expression queries, RegexQuery and SpanRegexQuery.
+    Note the same term enumeration caveats apply with these queries as
+    apply to WildcardQuery and other term expanding queries.
+    These two new queries are not currently supported via QueryParser.
+    (Erik Hatcher)
+
+24. Added ConstantScoreQuery which wraps a filter and produces a score
+    equal to the query boost for every matching document.
+    (Yonik Seeley, LUCENE-383)
+
+25. Added ConstantScoreRangeQuery which produces a constant score for
+    every document in the range.  One advantage over a normal RangeQuery
+    is that it doesn't expand to a BooleanQuery and thus doesn't have a maximum
+    number of terms the range can cover.  Both endpoints may also be open.
+    (Yonik Seeley, LUCENE-383)
+
+26. Added ability to specify a minimum number of optional clauses that
+    must match in a BooleanQuery.  See BooleanQuery.setMinimumNumberShouldMatch().
+    (Paul Elschot, Chris Hostetter via Yonik Seeley, LUCENE-395)
+
+27. Added DisjunctionMaxQuery which provides the maximum score across its clauses.
+    It's very useful for searching across multiple fields.
+    (Chuck Williams via Yonik Seeley, LUCENE-323)
+
+28. New class ISOLatin1AccentFilter that replaces accented characters in the ISO
+    Latin 1 character set by their unaccented equivalent.
+    (Sven Duzont via Erik Hatcher)
+
+29. New class KeywordAnalyzer. "Tokenizes" the entire stream as a single token.
+    This is useful for data like zip codes, ids, and some product names.
+    (Erik Hatcher)
+
+30. Copied LengthFilter from contrib area to core. Removes words that are too
+    long and too short from the stream.
+    (David Spencer via Otis and Daniel)
+
+31. Added getPositionIncrementGap(String fieldName) to Analyzer.  This allows
+    custom analyzers to put gaps between Field instances with the same field
+    name, preventing phrase or span queries crossing these boundaries.  The
+    default implementation issues a gap of 0, allowing the default token
+    position increment of 1 to put the next field's first token into a
+    successive position.
+    (Erik Hatcher, with advice from Yonik)
+
+32. StopFilter can now ignore case when checking for stop words.
+    (Grant Ingersoll via Yonik, LUCENE-248)
+
+33. Add TopDocCollector and TopFieldDocCollector.  These simplify the
+    implementation of hit collectors that collect only the
+    top-scoring or top-sorting hits.
+
+API Changes
+
+ 1. Several methods and fields have been deprecated. The API documentation
+    contains information about the recommended replacements. It is planned
+    that most of the deprecated methods and fields will be removed in
+    Lucene 2.0. (Daniel Naber)
+
+ 2. The Russian and the German analyzers have been moved to contrib/analyzers.
+    Also, the WordlistLoader class has been moved one level up in the
+    hierarchy and is now org.apache.lucene.analysis.WordlistLoader
+    (Daniel Naber)
+
+ 3. The API contained methods that declared to throw an IOException
+    but that never did this. These declarations have been removed. If
+    your code tries to catch these exceptions you might need to remove
+    those catch clauses to avoid compile errors. (Daniel Naber)
+
+ 4. Add a serializable Parameter Class to standardize parameter enum
+    classes in BooleanClause and Field. (Christoph)
+
+ 5. Added rewrite methods to all SpanQuery subclasses that nest other SpanQuerys.
+    This allows custom SpanQuery subclasses that rewrite (for term expansion, for
+    example) to nest within the built-in SpanQuery classes successfully.
+
+Bug fixes
+
+ 1. The JSP demo page (src/jsp/results.jsp) now properly closes the
+    IndexSearcher it opens. (Daniel Naber)
+
+ 2. Fixed a bug in IndexWriter.addIndexes(IndexReader[] readers) that
+    prevented deletion of obsolete segments. (Christoph Goller)
+
+ 3. Fix in FieldInfos to avoid the return of an extra blank field in
+    IndexReader.getFieldNames() (Patch #19058). (Mark Harwood via Bernhard)
+
+ 4. Some combinations of BooleanQuery and MultiPhraseQuery (formerly
+    PhrasePrefixQuery) could provoke UnsupportedOperationException
+    (bug #33161). (Rhett Sutphin via Daniel Naber)
+
+ 5. Small bug in skipTo of ConjunctionScorer that caused NullPointerException
+    if skipTo() was called without prior call to next() fixed. (Christoph)
+
+ 6. Disable Similiarty.coord() in the scoring of most automatically
+    generated boolean queries.  The coord() score factor is
+    appropriate when clauses are independently specified by a user,
+    but is usually not appropriate when clauses are generated
+    automatically, e.g., by a fuzzy, wildcard or range query.  Matches
+    on such automatically generated queries are no longer penalized
+    for not matching all terms.  (Doug Cutting, Patch #33472)
+
+ 7. Getting a lock file with Lock.obtain(long) was supposed to wait for
+    a given amount of milliseconds, but this didn't work.
+    (John Wang via Daniel Naber, Bug #33799)
+
+ 8. Fix FSDirectory.createOutput() to always create new files.
+    Previously, existing files were overwritten, and an index could be
+    corrupted when the old version of a file was longer than the new.
+    Now any existing file is first removed.  (Doug Cutting)
+
+ 9. Fix BooleanQuery containing nested SpanTermQuery's, which previously
+    could return an incorrect number of hits.
+    (Reece Wilton via Erik Hatcher, Bug #35157)
+
+10. Fix NullPointerException that could occur with a MultiPhraseQuery
+    inside a BooleanQuery.
+    (Hans Hjelm and Scotty Allen via Daniel Naber, Bug #35626)
+
+11. Fixed SnowballFilter to pass through the position increment from
+    the original token.
+    (Yonik Seeley via Erik Hatcher, LUCENE-437)
+
+12. Added Unicode range of Korean characters to StandardTokenizer,
+    grouping contiguous characters into a token rather than one token
+    per character.  This change also changes the token type to "<CJ>"
+    for Chinese and Japanese character tokens (previously it was "<CJK>").
+    (Cheolgoo Kang via Otis and Erik, LUCENE-444 and LUCENE-461)
+
+13. FieldsReader now looks at FieldInfo.storeOffsetWithTermVector and
+    FieldInfo.storePositionWithTermVector and creates the Field with
+    correct TermVector parameter.
+    (Frank Steinmann via Bernhard, LUCENE-455)
+
+14. Fixed WildcardQuery to prevent "cat" matching "ca??".
+    (Xiaozheng Ma via Bernhard, LUCENE-306)
+
+15. Fixed a bug where MultiSearcher and ParallelMultiSearcher could
+    change the sort order when sorting by string for documents without
+    a value for the sort field.
+    (Luc Vanlerberghe via Yonik, LUCENE-453)
+
+16. Fixed a sorting problem with MultiSearchers that can lead to
+    missing or duplicate docs due to equal docs sorting in an arbitrary order.
+    (Yonik Seeley, LUCENE-456)
+
+17. A single hit using the expert level sorted search methods
+    resulted in the score not being normalized.
+    (Yonik Seeley, LUCENE-462)
+
+18. Fixed inefficient memory usage when loading an index into RAMDirectory.
+    (Volodymyr Bychkoviak via Bernhard, LUCENE-475)
+
+19. Corrected term offsets returned by ChineseTokenizer.
+    (Ray Tsang via Erik Hatcher, LUCENE-324)
+
+20. Fixed MultiReader.undeleteAll() to correctly update numDocs.
+    (Robert Kirchgessner via Doug Cutting, LUCENE-479)
+
+21. Race condition in IndexReader.getCurrentVersion() and isCurrent()
+    fixed by acquiring the commit lock.
+    (Luc Vanlerberghe via Yonik Seeley, LUCENE-481)
+
+22. IndexWriter.setMaxBufferedDocs(1) didn't have the expected effect,
+    this has now been fixed. (Daniel Naber)
+
+23. Fixed QueryParser when called with a date in local form like 
+    "[1/16/2000 TO 1/18/2000]". This query did not include the documents
+    of 1/18/2000, i.e. the last day was not included. (Daniel Naber)
+
+24. Removed sorting constraint that threw an exception if there were
+    not yet any values for the sort field (Yonik Seeley, LUCENE-374)
+
+Optimizations
+     
+ 1. Disk usage (peak requirements during indexing and optimization)
+    in case of compound file format has been improved. 
+    (Bernhard, Dmitry, and Christoph)
+
+ 2. Optimize the performance of certain uses of BooleanScorer,
+    TermScorer and IndexSearcher.  In particular, a BooleanQuery
+    composed of TermQuery, with not all terms required, that returns a
+    TopDocs (e.g., through a Hits with no Sort specified) runs much
+    faster.  (cutting)
+    
+ 3. Removed synchronization from reading of term vectors with an
+    IndexReader (Patch #30736). (Bernhard Messer via Christoph)
+
+ 4. Optimize term-dictionary lookup to allocate far fewer terms when
+    scanning for the matching term.  This speeds searches involving
+    low-frequency terms, where the cost of dictionary lookup can be
+    significant. (cutting)
+
+ 5. Optimize fuzzy queries so the standard fuzzy queries with a prefix 
+    of 0 now run 20-50% faster (Patch #31882).
+    (Jonathan Hager via Daniel Naber)
+    
+ 6. A Version of BooleanScorer (BooleanScorer2) added that delivers
+    documents in increasing order and implements skipTo. For queries
+    with required or forbidden clauses it may be faster than the old
+    BooleanScorer, for BooleanQueries consisting only of optional
+    clauses it is probably slower. The new BooleanScorer is now the
+    default. (Patch 31785 by Paul Elschot via Christoph)
+
+ 7. Use uncached access to norms when merging to reduce RAM usage.
+    (Bug #32847).  (Doug Cutting)
+
+ 8. Don't read term index when random-access is not required.  This
+    reduces time to open IndexReaders and they use less memory when
+    random access is not required, e.g., when merging segments.  The
+    term index is now read into memory lazily at the first
+    random-access.  (Doug Cutting)
+
+ 9. Optimize IndexWriter.addIndexes(Directory[]) when the number of
+    added indexes is larger than mergeFactor.  Previously this could
+    result in quadratic performance.  Now performance is n log(n).
+    (Doug Cutting)
+
+10. Speed up the creation of TermEnum for indices with multiple
+    segments and deleted documents, and thus speed up PrefixQuery,
+    RangeQuery, WildcardQuery, FuzzyQuery, RangeFilter, DateFilter,
+    and sorting the first time on a field.
+    (Yonik Seeley, LUCENE-454)
+
+11. Optimized and generalized 32 bit floating point to byte
+    (custom 8 bit floating point) conversions.  Increased the speed of
+    Similarity.encodeNorm() anywhere from 10% to 250%, depending on the JVM.
+    (Yonik Seeley, LUCENE-467)
+
+Infrastructure
+
+ 1. Lucene's source code repository has converted from CVS to
+    Subversion.  The new repository is at
+    http://svn.apache.org/repos/asf/lucene/java/trunk
+
+ 2. Lucene's issue tracker has migrated from Bugzilla to JIRA.
+    Lucene's JIRA is at http://issues.apache.org/jira/browse/LUCENE
+    The old issues are still available at
+    http://issues.apache.org/bugzilla/show_bug.cgi?id=xxxx
+    (use the bug number instead of xxxx)
+
+
+1.4.3
+
+ 1. The JSP demo page (src/jsp/results.jsp) now properly escapes error
+    messages which might contain user input (e.g. error messages about 
+    query parsing). If you used that page as a starting point for your
+    own code please make sure your code also properly escapes HTML
+    characters from user input in order to avoid so-called cross site
+    scripting attacks. (Daniel Naber)
+  
+  2. QueryParser changes in 1.4.2 broke the QueryParser API. Now the old 
+     API is supported again. (Christoph)
+
+
+1.4.2
+
+ 1. Fixed bug #31241: Sorting could lead to incorrect results (documents
+    missing, others duplicated) if the sort keys were not unique and there
+    were more than 100 matches. (Daniel Naber)
+
+ 2. Memory leak in Sort code (bug #31240) eliminated.
+    (Rafal Krzewski via Christoph and Daniel)
+    
+ 3. FuzzyQuery now takes an additional parameter that specifies the
+    minimum similarity that is required for a term to match the query.
+    The QueryParser syntax for this is term~x, where x is a floating 
+    point number >= 0 and < 1 (a bigger number means that a higher
+    similarity is required). Furthermore, a prefix can be specified
+    for FuzzyQuerys so that only those terms are considered similar that 
+    start with this prefix. This can speed up FuzzyQuery greatly.
+    (Daniel Naber, Christoph Goller)
+    
+ 4. PhraseQuery and PhrasePrefixQuery now allow the explicit specification
+    of relative positions. (Christoph Goller)
+    
+ 5. QueryParser changes: Fix for ArrayIndexOutOfBoundsExceptions 
+    (patch #9110); some unused method parameters removed; The ability
+    to specify a minimum similarity for FuzzyQuery has been added.
+    (Christoph Goller)
+
+ 6. IndexSearcher optimization: a new ScoreDoc is no longer allocated
+    for every non-zero-scoring hit.  This makes 'OR' queries that
+    contain common terms substantially faster.  (cutting)
+
+
+1.4.1
+
+ 1. Fixed a performance bug in hit sorting code, where values were not
+    correctly cached.  (Aviran via cutting)
+
+ 2. Fixed errors in file format documentation. (Daniel Naber)
+
+
+1.4 final
+
+ 1. Added "an" to the list of stop words in StopAnalyzer, to complement
+    the existing "a" there.  Fix for bug 28960
+     (http://issues.apache.org/bugzilla/show_bug.cgi?id=28960). (Otis)
+
+ 2. Added new class FieldCache to manage in-memory caches of field term
+    values.  (Tim Jones)
+
+ 3. Added overloaded getFieldQuery method to QueryParser which
+    accepts the slop factor specified for the phrase (or the default
+    phrase slop for the QueryParser instance).  This allows overriding
+    methods to replace a PhraseQuery with a SpanNearQuery instead,
+    keeping the proper slop factor. (Erik Hatcher)
+
+ 4. Changed the encoding of GermanAnalyzer.java and GermanStemmer.java to
+    UTF-8 and changed the build encoding to UTF-8, to make changed files
+    compile. (Otis Gospodnetic)
+
+ 5. Removed synchronization from term lookup under IndexReader methods
+    termFreq(), termDocs() or termPositions() to improve
+    multi-threaded performance.  (cutting)
+
+ 6. Fix a bug where obsolete segment files were not deleted on Win32.
+
+
+1.4 RC3
+
+ 1. Fixed several search bugs introduced by the skipTo() changes in
+    release 1.4RC1.  The index file format was changed a bit, so
+    collections must be re-indexed to take advantage of the skipTo()
+    optimizations.  (Christoph Goller)
+
+ 2. Added new Document methods, removeField() and removeFields().
+    (Christoph Goller)
+
+ 3. Fixed inconsistencies with index closing.  Indexes and directories
+    are now only closed automatically by Lucene when Lucene opened
+    them automatically.  (Christoph Goller)
+
+ 4. Added new class: FilteredQuery.  (Tim Jones)
+
+ 5. Added a new SortField type for custom comparators.  (Tim Jones)
+
+ 6. Lock obtain timed out message now displays the full path to the lock
+    file. (Daniel Naber via Erik)
+
+ 7. Fixed a bug in SpanNearQuery when ordered. (Paul Elschot via cutting)
+
+ 8. Fixed so that FSDirectory's locks still work when the
+    java.io.tmpdir system property is null.  (cutting)
+
+ 9. Changed FilteredTermEnum's constructor to take no parameters,
+    as the parameters were ignored anyway (bug #28858)
+
+1.4 RC2
+
+ 1. GermanAnalyzer now throws an exception if the stopword file
+    cannot be found (bug #27987). It now uses LowerCaseFilter
+    (bug #18410) (Daniel Naber via Otis, Erik)
+
+ 2. Fixed a few bugs in the file format documentation. (cutting)
+
+
+1.4 RC1
+
+ 1. Changed the format of the .tis file, so that:
+
+    - it has a format version number, which makes it easier to
+      back-compatibly change file formats in the future.
+
+    - the term count is now stored as a long.  This was the one aspect
+      of the Lucene's file formats which limited index size.
+
+    - a few internal index parameters are now stored in the index, so
+      that they can (in theory) now be changed from index to index,
+      although there is not yet an API to do so.
+
+    These changes are back compatible.  The new code can read old
+    indexes.  But old code will not be able read new indexes. (cutting)
+
+ 2. Added an optimized implementation of TermDocs.skipTo().  A skip
+    table is now stored for each term in the .frq file.  This only
+    adds a percent or two to overall index size, but can substantially
+    speedup many searches.  (cutting)
+
+ 3. Restructured the Scorer API and all Scorer implementations to take
+    advantage of an optimized TermDocs.skipTo() implementation.  In
+    particular, PhraseQuerys and conjunctive BooleanQuerys are
+    faster when one clause has substantially fewer matches than the
+    others.  (A conjunctive BooleanQuery is a BooleanQuery where all
+    clauses are required.)  (cutting)
+
+ 4. Added new class ParallelMultiSearcher.  Combined with
+    RemoteSearchable this makes it easy to implement distributed
+    search systems.  (Jean-Francois Halleux via cutting)
+
+ 5. Added support for hit sorting.  Results may now be sorted by any
+    indexed field.  For details see the javadoc for
+    Searcher#search(Query, Sort).  (Tim Jones via Cutting)
+
+ 6. Changed FSDirectory to auto-create a full directory tree that it
+    needs by using mkdirs() instead of mkdir().  (Mladen Turk via Otis)
+
+ 7. Added a new span-based query API.  This implements, among other
+    things, nested phrases.  See javadocs for details.  (Doug Cutting)
+
+ 8. Added new method Query.getSimilarity(Searcher), and changed
+    scorers to use it.  This permits one to subclass a Query class so
+    that it can specify its own Similarity implementation, perhaps
+    one that delegates through that of the Searcher.  (Julien Nioche
+    via Cutting)
+
+ 9. Added MultiReader, an IndexReader that combines multiple other
+    IndexReaders.  (Cutting)
+
+10. Added support for term vectors.  See Field#isTermVectorStored().
+    (Grant Ingersoll, Cutting & Dmitry)
+
+11. Fixed the old bug with escaping of special characters in query
+    strings: http://issues.apache.org/bugzilla/show_bug.cgi?id=24665
+    (Jean-Francois Halleux via Otis)
+
+12. Added support for overriding default values for the following,
+    using system properties:
+      - default commit lock timeout
+      - default maxFieldLength
+      - default maxMergeDocs
+      - default mergeFactor
+      - default minMergeDocs
+      - default write lock timeout
+    (Otis)
+
+13. Changed QueryParser.jj to allow '-' and '+' within tokens:
+    http://issues.apache.org/bugzilla/show_bug.cgi?id=27491
+    (Morus Walter via Otis)
+
+14. Changed so that the compound index format is used by default.
+    This makes indexing a bit slower, but vastly reduces the chances
+    of file handle problems.  (Cutting)
+
+
+1.3 final
+
+ 1. Added catch of BooleanQuery$TooManyClauses in QueryParser to
+    throw ParseException instead. (Erik Hatcher)
+
+ 2. Fixed a NullPointerException in Query.explain(). (Doug Cutting)
+
+ 3. Added a new method IndexReader.setNorm(), that permits one to
+    alter the boosting of fields after an index is created.
+
+ 4. Distinguish between the final position and length when indexing a
+    field.  The length is now defined as the total number of tokens,
+    instead of the final position, as it was previously.  Length is
+    used for score normalization (Similarity.lengthNorm()) and for
+    controlling memory usage (IndexWriter.maxFieldLength).  In both of
+    these cases, the total number of tokens is a better value to use
+    than the final token position.  Position is used in phrase
+    searching (see PhraseQuery and Token.setPositionIncrement()).
+
+ 5. Fix StandardTokenizer's handling of CJK characters (Chinese,
+    Japanese and Korean ideograms).  Previously contiguous sequences
+    were combined in a single token, which is not very useful.  Now
+    each ideogram generates a separate token, which is more useful.
+
+
+1.3 RC3
+
+ 1. Added minMergeDocs in IndexWriter.  This can be raised to speed
+    indexing without altering the number of files, but only using more
+    memory.  (Julien Nioche via Otis)
+
+ 2. Fix bug #24786, in query rewriting. (bschneeman via Cutting)
+
+ 3. Fix bug #16952, in demo HTML parser, skip comments in
+    javascript. (Christoph Goller)
+
+ 4. Fix bug #19253, in demo HTML parser, add whitespace as needed to
+    output (Daniel Naber via Christoph Goller)
+
+ 5. Fix bug #24301, in demo HTML parser, long titles no longer
+    hang things. (Christoph Goller)
+
+ 6. Fix bug #23534, Replace use of file timestamp of segments file
+    with an index version number stored in the segments file.  This
+    resolves problems when running on file systems with low-resolution
+    timestamps, e.g., HFS under MacOS X.  (Christoph Goller)
+
+ 7. Fix QueryParser so that TokenMgrError is not thrown, only
+    ParseException.  (Erik Hatcher)
+
+ 8. Fix some bugs introduced by change 11 of RC2.  (Christoph Goller)
+
+ 9. Fixed a problem compiling TestRussianStem.  (Christoph Goller)
+
+10. Cleaned up some build stuff.  (Erik Hatcher)
+
+
+1.3 RC2
+
+ 1. Added getFieldNames(boolean) to IndexReader, SegmentReader, and
+    SegmentsReader. (Julien Nioche via otis)
+
+ 2. Changed file locking to place lock files in
+    System.getProperty("java.io.tmpdir"), where all users are
+    permitted to write files.  This way folks can open and correctly
+    lock indexes which are read-only to them.
+
+ 3. IndexWriter: added a new method, addDocument(Document, Analyzer),
+    permitting one to easily use different analyzers for different
+    documents in the same index.
+
+ 4. Minor enhancements to FuzzyTermEnum.
+    (Christoph Goller via Otis)
+
+ 5. PriorityQueue: added insert(Object) method and adjusted IndexSearcher
+    and MultiIndexSearcher to use it.
+    (Christoph Goller via Otis)
+
+ 6. Fixed a bug in IndexWriter that returned incorrect docCount().
+    (Christoph Goller via Otis)
+
+ 7. Fixed SegmentsReader to eliminate the confusing and slightly different
+    behaviour of TermEnum when dealing with an enumeration of all terms,
+    versus an enumeration starting from a specific term.
+    This patch also fixes incorrect term document frequencies when the same term
+    is present in multiple segments.
+    (Christoph Goller via Otis)
+
+ 8. Added CachingWrapperFilter and PerFieldAnalyzerWrapper. (Erik Hatcher)
+
+ 9. Added support for the new "compound file" index format (Dmitry
+    Serebrennikov)
+
+10. Added Locale setting to QueryParser, for use by date range parsing.
+
+11. Changed IndexReader so that it can be subclassed by classes
+    outside of its package.  Previously it had package-private
+    abstract methods.  Also modified the index merging code so that it
+    can work on an arbitrary IndexReader implementation, and added a
+    new method, IndexWriter.addIndexes(IndexReader[]), to take
+    advantage of this. (cutting)
+
+12. Added a limit to the number of clauses which may be added to a
+    BooleanQuery.  The default limit is 1024 clauses.  This should
+    stop most OutOfMemoryExceptions by prefix, wildcard and fuzzy
+    queries which run amok. (cutting)
+
+13. Add new method: IndexReader.undeleteAll().  This undeletes all
+    deleted documents which still remain in the index. (cutting)
+
+
+1.3 RC1
+
+ 1. Fixed PriorityQueue's clear() method.
+    Fix for bug 9454, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9454
+    (Matthijs Bomhoff via otis)
+
+ 2. Changed StandardTokenizer.jj grammar for EMAIL tokens.
+    Fix for bug 9015, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9015
+    (Dale Anson via otis)
+
+ 3. Added the ability to disable lock creation by using disableLuceneLocks
+    system property.  This is useful for read-only media, such as CD-ROMs.
+    (otis)
+
+ 4. Added id method to Hits to be able to access the index global id.
+    Required for sorting options.
+    (carlson)
+
+ 5. Added support for new range query syntax to QueryParser.jj.
+    (briangoetz)
+
+ 6. Added the ability to retrieve HTML documents' META tag values to
+    HTMLParser.jj.
+    (Mark Harwood via otis)
+
+ 7. Modified QueryParser to make it possible to programmatically specify the
+    default Boolean operator (OR or AND).
+    (Péter Halácsy via otis)
+
+ 8. Made many search methods and classes non-final, per requests.
+    This includes IndexWriter and IndexSearcher, among others.
+    (cutting)
+
+ 9. Added class RemoteSearchable, providing support for remote
+    searching via RMI.  The test class RemoteSearchableTest.java
+    provides an example of how this can be used.  (cutting)
+
+ 10. Added PhrasePrefixQuery (and supporting MultipleTermPositions).  The
+     test class TestPhrasePrefixQuery provides the usage example.
+     (Anders Nielsen via otis)
+
+ 11. Changed the German stemming algorithm to ignore case while
+     stripping. The new algorithm is faster and produces more equal
+     stems from nouns and verbs derived from the same word.
+     (gschwarz)
+
+ 12. Added support for boosting the score of documents and fields via
+     the new methods Document.setBoost(float) and Field.setBoost(float).
+
+     Note: This changes the encoding of an indexed value.  Indexes
+     should be re-created from scratch in order for search scores to
+     be correct.  With the new code and an old index, searches will
+     yield very large scores for shorter fields, and very small scores
+     for longer fields.  Once the index is re-created, scores will be
+     as before. (cutting)
+
+ 13. Added new method Token.setPositionIncrement().
+
+     This permits, for the purpose of phrase searching, placing
+     multiple terms in a single position.  This is useful with
+     stemmers that produce multiple possible stems for a word.
+
+     This also permits the introduction of gaps between terms, so that
+     terms which are adjacent in a token stream will not be matched by
+     and exact phrase query.  This makes it possible, e.g., to build
+     an analyzer where phrases are not matched over stop words which
+     have been removed.
+
+     Finally, repeating a token with an increment of zero can also be
+     used to boost scores of matches on that token.  (cutting)
+
+ 14. Added new Filter class, QueryFilter.  This constrains search
+     results to only match those which also match a provided query.
+     Results are cached, so that searches after the first on the same
+     index using this filter are very fast.
+
+     This could be used, for example, with a RangeQuery on a formatted
+     date field to implement date filtering.  One could re-use a
+     single QueryFilter that matches, e.g., only documents modified
+     within the last week.  The QueryFilter and RangeQuery would only
+     need to be reconstructed once per day. (cutting)
+
+ 15. Added a new IndexWriter method, getAnalyzer().  This returns the
+     analyzer used when adding documents to this index. (cutting)
+
+ 16. Fixed a bug with IndexReader.lastModified().  Before, document
+     deletion did not update this.  Now it does.  (cutting)
+
+ 17. Added Russian Analyzer.
+     (Boris Okner via otis)
+
+ 18. Added a public, extensible scoring API.  For details, see the
+     javadoc for org.apache.lucene.search.Similarity.
+
+ 19. Fixed return of Hits.id() from float to int. (Terry Steichen via Peter).
+
+ 20. Added getFieldNames() to IndexReader and Segment(s)Reader classes.
+     (Peter Mularien via otis)
+
+ 21. Added getFields(String) and getValues(String) methods.
+     Contributed by Rasik Pandey on 2002-10-09
+     (Rasik Pandey via otis)
+
+ 22. Revised internal search APIs.  Changes include:
+
+       a. Queries are no longer modified during a search.  This makes
+       it possible, e.g., to reuse the same query instance with
+       multiple indexes from multiple threads.
+
+       b. Term-expanding queries (e.g. PrefixQuery, WildcardQuery,
+       etc.)  now work correctly with MultiSearcher, fixing bugs 12619
+       and 12667.
+
+       c. Boosting BooleanQuery's now works, and is supported by the
+       query parser (problem reported by Lee Mallabone).  Thus a query
+       like "(+foo +bar)^2 +baz" is now supported and equivalent to
+       "(+foo^2 +bar^2) +baz".
+
+       d. New method: Query.rewrite(IndexReader).  This permits a
+       query to re-write itself as an alternate, more primitive query.
+       Most of the term-expanding query classes (PrefixQuery,
+       WildcardQuery, etc.) are now implemented using this method.
+
+       e. New method: Searchable.explain(Query q, int doc).  This
+       returns an Explanation instance that describes how a particular
+       document is scored against a query.  An explanation can be
+       displayed as either plain text, with the toString() method, or
+       as HTML, with the toHtml() method.  Note that computing an
+       explanation is as expensive as executing the query over the
+       entire index.  This is intended to be used in developing
+       Similarity implementations, and, for good performance, should
+       not be displayed with every hit.
+
+       f. Scorer and Weight are public, not package protected.  It now
+       possible for someone to write a Scorer implementation that is
+       not in the org.apache.lucene.search package.  This is still
+       fairly advanced programming, and I don't expect anyone to do
+       this anytime soon, but at least now it is possible.
+
+       g. Added public accessors to the primitive query classes
+       (TermQuery, PhraseQuery and BooleanQuery), permitting access to
+       their terms and clauses.
+
+     Caution: These are extensive changes and they have not yet been
+     tested extensively.  Bug reports are appreciated.
+     (cutting)
+
+ 23. Added convenience RAMDirectory constructors taking File and String
+     arguments, for easy FSDirectory to RAMDirectory conversion.
+     (otis)
+
+ 24. Added code for manual renaming of files in FSDirectory, since it
+     has been reported that java.io.File's renameTo(File) method sometimes
+     fails on Windows JVMs.
+     (Matt Tucker via otis)
+
+ 25. Refactored QueryParser to make it easier for people to extend it.
+     Added the ability to automatically lower-case Wildcard terms in
+     the QueryParser.
+     (Tatu Saloranta via otis)
+
+
+1.2 RC6
+
+ 1. Changed QueryParser.jj to have "?" be a special character which
+    allowed it to be used as a wildcard term. Updated TestWildcard
+    unit test also. (Ralf Hettesheimer via carlson)
+
+1.2 RC5
+
+ 1. Renamed build.properties to default.properties and updated
+    the BUILD.txt document to describe how to override the
+    default.property settings without having to edit the file. This
+    brings the build process closer to Scarab's build process.
+    (jon)
+
+ 2. Added MultiFieldQueryParser class. (Kelvin Tan, via otis)
+
+ 3. Updated "powered by" links. (otis)
+
+ 4. Fixed instruction for setting up JavaCC - Bug #7017 (otis)
+
+ 5. Added throwing exception if FSDirectory could not create directory
+    - Bug #6914 (Eugene Gluzberg via otis)
+
+ 6. Update MultiSearcher, MultiFieldParse, Constants, DateFilter,
+    LowerCaseTokenizer javadoc (otis)
+
+ 7. Added fix to avoid NullPointerException in results.jsp
+    (Mark Hayes via otis)
+
+ 8. Changed Wildcard search to find 0 or more char instead of 1 or more
+    (Lee Mallobone, via otis)
+
+ 9. Fixed error in offset issue in GermanStemFilter - Bug #7412
+    (Rodrigo Reyes, via otis)
+
+ 10. Added unit tests for wildcard search and DateFilter (otis)
+
+ 11. Allow co-existence of indexed and non-indexed fields with the same name
+     (cutting/casper, via otis)
+
+ 12. Add escape character to query parser.
+     (briangoetz)
+
+ 13. Applied a patch that ensures that searches that use DateFilter
+     don't throw an exception when no matches are found. (David Smiley, via
+     otis)
+
+ 14. Fixed bugs in DateFilter and wildcardquery unit tests. (cutting, otis, carlson)
+
+
+1.2 RC4
+
+ 1. Updated contributions section of website.
+    Add XML Document #3 implementation to Document Section.
+    Also added Term Highlighting to Misc Section. (carlson)
+
+ 2. Fixed NullPointerException for phrase searches containing
+    unindexed terms, introduced in 1.2RC3.  (cutting)
+
+ 3. Changed document deletion code to obtain the index write lock,
+    enforcing the fact that document addition and deletion cannot be
+    performed concurrently.  (cutting)
+
+ 4. Various documentation cleanups.  (otis, acoliver)
+
+ 5. Updated "powered by" links.  (cutting, jon)
+
+ 6. Fixed a bug in the GermanStemmer.  (Bernhard Messer, via otis)
+
+ 7. Changed Term and Query to implement Serializable.  (scottganyo)
+
+ 8. Fixed to never delete indexes added with IndexWriter.addIndexes().
+    (cutting)
+
+ 9. Upgraded to JUnit 3.7. (otis)
+
+1.2 RC3
+
+ 1. IndexWriter: fixed a bug where adding an optimized index to an
+    empty index failed.  This was encountered using addIndexes to copy
+    a RAMDirectory index to an FSDirectory.
+
+ 2. RAMDirectory: fixed a bug where RAMInputStream could not read
+    across more than across a single buffer boundary.
+
+ 3. Fix query parser so it accepts queries with unicode characters.
+    (briangoetz)
+
+ 4. Fix query parser so that PrefixQuery is used in preference to
+    WildcardQuery when there's only an asterisk at the end of the
+    term.  Previously PrefixQuery would never be used.
+
+ 5. Fix tests so they compile; fix ant file so it compiles tests
+    properly.  Added test cases for Analyzers and PriorityQueue.
+
+ 6. Updated demos, added Getting Started documentation. (acoliver)
+
+ 7. Added 'contributions' section to website & docs. (carlson)
+
+ 8. Removed JavaCC from source distribution for copyright reasons.
+    Folks must now download this separately from metamata in order to
+    compile Lucene.  (cutting)
+
+ 9. Substantially improved the performance of DateFilter by adding the
+    ability to reuse TermDocs objects.  (cutting)
+
+10. Added IndexReader methods:
+      public static boolean indexExists(String directory);
+      public static boolean indexExists(File directory);
+      public static boolean indexExists(Directory directory);
+      public static boolean isLocked(Directory directory);
+      public static void unlock(Directory directory);
+    (cutting, otis)
+
+11. Fixed bugs in GermanAnalyzer (gschwarz)
+
+
+1.2 RC2, 19 October 2001:
+ - added sources to distribution
+ - removed broken build scripts and libraries from distribution
+ - SegmentsReader: fixed potential race condition
+ - FSDirectory: fixed so that getDirectory(xxx,true) correctly
+   erases the directory contents, even when the directory
+   has already been accessed in this JVM.
+ - RangeQuery: Fix issue where an inclusive range query would
+   include the nearest term in the index above a non-existant
+   specified upper term.
+ - SegmentTermEnum: Fix NullPointerException in clone() method
+   when the Term is null.
+ - JDK 1.1 compatibility fix: disabled lock files for JDK 1.1,
+   since they rely on a feature added in JDK 1.2.
+
+1.2 RC1 (first Apache release), 2 October 2001:
+  - packages renamed from com.lucene to org.apache.lucene
+  - license switched from LGPL to Apache
+  - ant-only build -- no more makefiles
+  - addition of lock files--now fully thread & process safe
+  - addition of German stemmer
+  - MultiSearcher now supports low-level search API
+  - added RangeQuery, for term-range searching
+  - Analyzers can choose tokenizer based on field name
+  - misc bug fixes.
+
+1.01b (last Sourceforge release), 2 July 2001
+ . a few bug fixes
+ . new Query Parser
+ . new prefix query (search for "foo*" matches "food")
+
+1.0, 2000-10-04
+
+This release fixes a few serious bugs and also includes some
+performance optimizations, a stemmer, and a few other minor
+enhancements.
+
+0.04 2000-04-19
+
+Lucene now includes a grammar-based tokenizer, StandardTokenizer.
+
+The only tokenizer included in the previous release (LetterTokenizer)
+identified terms consisting entirely of alphabetic characters.  The
+new tokenizer uses a regular-expression grammar to identify more
+complex classes of terms, including numbers, acronyms, email
+addresses, etc.
+
+StandardTokenizer serves two purposes:
+
+ 1. It is a much better, general purpose tokenizer for use by
+    applications as is.
+
+    The easiest way for applications to start using
+    StandardTokenizer is to use StandardAnalyzer.
+
+ 2. It provides a good example of grammar-based tokenization.
+
+    If an application has special tokenization requirements, it can
+    implement a custom tokenizer by copying the directory containing
+    the new tokenizer into the application and modifying it
+    accordingly.
+
+0.01, 2000-03-30
+
+First open source release.
+
+The code has been re-organized into a new package and directory
+structure for this release.  It builds OK, but has not been tested
+beyond that since the re-organization.
diff --git a/eclipse/plugins/org.apache.lucene/about_files/CVS/Entries b/eclipse/plugins/org.apache.lucene/about_files/CVS/Entries
new file mode 100644
index 0000000..7685cf6
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/CVS/Entries
@@ -0,0 +1,4 @@
+/CHANGES.txt/1.1.2.1.2.1/Tue Apr 20 19:46:38 2010/-ko/Tv2_9_1
+/LICENSE.txt/1.1.2.1/Mon Nov 10 16:46:57 2008/-ko/Tv2_9_1
+/NOTICE.txt/1.1.2.1.2.1/Tue Apr 20 19:57:44 2010/-ko/Tv2_9_1
+/README.txt/1.1.2.1.2.1/Tue Apr 20 19:57:44 2010/-ko/Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/about_files/CVS/Repository b/eclipse/plugins/org.apache.lucene/about_files/CVS/Repository
new file mode 100644
index 0000000..be58ee4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/CVS/Repository
@@ -0,0 +1 @@
+org.eclipse.orbit/org.apache.lucene/about_files
diff --git a/eclipse/plugins/org.apache.lucene/about_files/CVS/Root b/eclipse/plugins/org.apache.lucene/about_files/CVS/Root
new file mode 100644
index 0000000..24126f4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/CVS/Root
@@ -0,0 +1 @@
+:extssh:caniszczyk at dev.eclipse.org:/cvsroot/tools
diff --git a/eclipse/plugins/org.apache.lucene/about_files/CVS/Tag b/eclipse/plugins/org.apache.lucene/about_files/CVS/Tag
new file mode 100644
index 0000000..3114c57
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/CVS/Tag
@@ -0,0 +1 @@
+Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/about_files/LICENSE.txt b/eclipse/plugins/org.apache.lucene/about_files/LICENSE.txt
new file mode 100755
index 0000000..dfd5693
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/LICENSE.txt
@@ -0,0 +1,240 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+Some code in src/java/org/apache/lucene/util/UnicodeUtil.java was
+derived from unicode conversion examples available at
+http://www.unicode.org/Public/PROGRAMS/CVTUTF.  Here is the copyright
+from those sources:
+
+/*
+ * Copyright 2001-2004 Unicode, Inc.
+ * 
+ * Disclaimer
+ * 
+ * This source code is provided as is by Unicode, Inc. No claims are
+ * made as to fitness for any particular purpose. No warranties of any
+ * kind are expressed or implied. The recipient agrees to determine
+ * applicability of information provided. If this file has been
+ * purchased on magnetic or optical media from Unicode, Inc., the
+ * sole remedy for any claim will be exchange of defective media
+ * within 90 days of receipt.
+ * 
+ * Limitations on Rights to Redistribute This Code
+ * 
+ * Unicode, Inc. hereby grants the right to freely use the information
+ * supplied in this file in the creation of products supporting the
+ * Unicode Standard, and to make copies of this file in any form
+ * for internal or external distribution as long as this notice
+ * remains attached.
+ */
+
+
+Some code in src/java/org/apache/lucene/util/ArrayUtil.java was
+derived from Python 2.4.2 sources available at
+http://www.python.org. Full license is here:
+
+  http://www.python.org/download/releases/2.4.2/license/
+
+
diff --git a/eclipse/plugins/org.apache.lucene/about_files/NOTICE.txt b/eclipse/plugins/org.apache.lucene/about_files/NOTICE.txt
new file mode 100755
index 0000000..8ae6c9b
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/NOTICE.txt
@@ -0,0 +1,30 @@
+Apache Lucene
+Copyright 2006 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+The snowball stemmers in
+  contrib/snowball/src/java/net/sf/snowball
+were developed by Martin Porter and Richard Boulton.
+The full snowball package is available from
+  http://snowball.tartarus.org/
+
+The Arabic stemmer (contrib/analyzers) comes with a default
+stopword list that is BSD-licensed created by Jacques Savoy.  The file resides in 
+contrib/analyzers/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt.
+See http://members.unine.ch/jacques.savoy/clef/index.html.
+
+The Persian analyzer (contrib/analyzers) comes with a default
+stopword list that is BSD-licensed created by Jacques Savoy.  The file resides in
+contrib/analyzers/common/src/resources/org/apache/lucene/analysis/fa/stopwords.txt.
+See http://members.unine.ch/jacques.savoy/clef/index.html.
+
+Includes lib/servlet-api-2.4.jar from  Apache Tomcat
+
+The SmartChineseAnalyzer source code (under contrib/analyzers) was
+provided by Xiaoping Gao and copyright 2009 by www.imdict.net.
+
+ICU4J, (under contrib/collation) is licensed under an MIT styles license
+(contrib/collation/lib/ICU-LICENSE.txt) and Copyright (c) 1995-2008 
+International Business Machines Corporation and others
diff --git a/eclipse/plugins/org.apache.lucene/about_files/README.txt b/eclipse/plugins/org.apache.lucene/about_files/README.txt
new file mode 100755
index 0000000..ad1315c
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/about_files/README.txt
@@ -0,0 +1,46 @@
+Lucene README file
+
+$Id: README.txt 490368 2006-12-26 20:44:29Z gsingers $
+
+INTRODUCTION
+
+Lucene is a Java full-text search engine.  Lucene is not a complete
+application, but rather a code library and API that can easily be used
+to add search capabilities to applications.
+
+The Lucene web site is at:
+  http://lucene.apache.org/
+
+Please join the Lucene-User mailing list by sending a message to:
+  java-user-subscribe at lucene.apache.org
+
+FILES
+
+lucene-core-XX.jar
+  The compiled lucene library.
+
+lucene-demos-XX.jar
+  The compiled simple example code.
+
+luceneweb.war
+  The compiled simple example Web Application.
+
+contrib/*
+  Contributed code which extends and enhances Lucene, but is not
+  part of the core library.  Of special note are the JAR files in the analyzers and snowball directory which
+  contain various analyzers that people may find useful in place of the StandardAnalyzer.
+
+
+
+docs/index.html
+  The contents of the Lucene website.
+
+docs/api/index.html
+  The Javadoc Lucene API documentation.  This includes the core
+  library, the demo, as well as all of the contrib modules.
+
+src/java
+  The Lucene source code.
+
+src/demo
+  Some example code.
diff --git a/eclipse/plugins/org.apache.lucene/build.properties b/eclipse/plugins/org.apache.lucene/build.properties
new file mode 100755
index 0000000..604f3c8
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2000, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = META-INF/,\
+               plugin.properties,\
+               about.html,\
+               about_files/
+output.. = .
diff --git a/eclipse/plugins/org.apache.lucene/plugin.properties b/eclipse/plugins/org.apache.lucene/plugin.properties
new file mode 100755
index 0000000..409f6c4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Apache Lucene
+providerName=Eclipse.org
diff --git a/eclipse/plugins/org.apache.lucene/readme-bundles.txt b/eclipse/plugins/org.apache.lucene/readme-bundles.txt
new file mode 100755
index 0000000..1c4ef61
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/readme-bundles.txt
@@ -0,0 +1,42 @@
+Apache Lucene OSGi Bundles
+==========================
+
+Apache Lucene is available as a set of OSGi bundles in the Orbit repository.
+However, the packaging as some special requirements because of split-
+packages between Lucene Core and some contrib libs. Therefore, the following
+bundle layout was created.
+
+
+org.apache.lucene
+-----------------
+ 
+This is the master bundle. It depends on the core bundle (using 
+Require-Bundle) and re-exports it for backwards compatibility reasons. 
+
+It also exports all core packages as single packages (without split 
+attributes) for backwards compatibility reasons AND to resolve split-
+packages. It has optional dependencies on the contrib bundles to properly 
+resolve split-packages (Require-Bundle). But it does not re-export the 
+contrib bundles.
+
+
+org.apache.lucene.core
+----------------------
+
+This is the core bundle. It's created from the Lucene core jar and only
+contains Lucene core. It exports all its packages using split-package
+attributes ("..;core=split;mandatory:=core;.."). This allows packages
+split across Lucene core and Lucene contrib libs.
+
+
+org.apache.lucene.<contrib-name>
+--------------------------------
+
+This defines a bundle for a Lucene contrib library. Usually, a contrib
+bundle has a Require-Bundle dependency on the core bundle. It may have 
+additional dependencies to other contrib libs. 
+
+A contrib bundles exports shared/split packages with split-packages
+attributes ("..;<contrib-name>=split;mandatory:=<contrib-name>;..") 
+but non-split packages without split-packages attributes.
+
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Entries b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Entries
new file mode 100644
index 0000000..8918c6a
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Entries
@@ -0,0 +1,7 @@
+D/META-INF////
+/about.html/1.1.2.3.4.1.2.2/Fri Jan 21 17:20:15 2011/-ko/Tv2_9_1
+D/about_files////
+/build.properties/1.1.2.4.4.1/Wed Jan  7 08:16:14 2009/-ko/Tv2_9_1
+D/org////
+/plugin.properties/1.1.2.1/Tue May 15 01:44:26 2007/-ko/Tv2_9_1
+D/src////
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Repository b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Repository
new file mode 100644
index 0000000..a2685b9
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Repository
@@ -0,0 +1 @@
+org.eclipse.orbit/org.apache.lucene/source-bundle
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Root b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Root
new file mode 100644
index 0000000..24126f4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Root
@@ -0,0 +1 @@
+:extssh:caniszczyk at dev.eclipse.org:/cvsroot/tools
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Tag b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Tag
new file mode 100644
index 0000000..3114c57
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/CVS/Tag
@@ -0,0 +1 @@
+Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Entries b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Entries
new file mode 100644
index 0000000..b46ddd8
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Entries
@@ -0,0 +1 @@
+/MANIFEST.MF/1.1.2.5.4.1.2.1/Tue Apr 20 19:57:44 2010/-ko/Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Repository b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Repository
new file mode 100644
index 0000000..8d5c782
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Repository
@@ -0,0 +1 @@
+org.eclipse.orbit/org.apache.lucene/source-bundle/META-INF
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Root b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Root
new file mode 100644
index 0000000..24126f4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Root
@@ -0,0 +1 @@
+:extssh:caniszczyk at dev.eclipse.org:/cvsroot/tools
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Tag b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Tag
new file mode 100644
index 0000000..3114c57
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/CVS/Tag
@@ -0,0 +1 @@
+Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/MANIFEST.MF b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..394002c
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-ManifestVersion: 2
+Bundle-Localization: plugin
+Bundle-SymbolicName: org.apache.lucene.source
+Bundle-Version: 2.9.1.qualifier
+Eclipse-SourceBundle: org.apache.lucene;version="2.9.1.qualifier"
+
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about.html b/eclipse/plugins/org.apache.lucene/source-bundle/about.html
new file mode 100755
index 0000000..2a13c34
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about.html
@@ -0,0 +1,48 @@
+<!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=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>May 30, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor’s license for 
+terms and conditions of use.</p>
+
+<h4>Lucene 2.9.1</h4>
+
+<p>The plug-in includes software developed by The Apache Software Foundation as part of the Ant project.</p>
+
+<p>Your use of the Lucene code is subject to the terms and conditions of the Apache Software License 2.0.  A copy of the license is contained
+in the file <a href="about_files/LICENSE.txt">LICENSE.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+</p>
+<p>The names "Lucene" and  "Apache Software Foundation" must not be used to endorse or promote products derived from this 
+software without prior written permission.  For written permission, please contact <a href="mailto:apache at apache.org">apache at apache.org</a>.</p>
+
+<p>
+Original binaries and source are available from the <a href="http://lucene.apache.org/">Apache Lucene website</a>.
+</p>
+</body>
+</html>
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CHANGES.txt b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CHANGES.txt
new file mode 100755
index 0000000..2553afd
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CHANGES.txt
@@ -0,0 +1,2803 @@
+Lucene Change Log
+$Id: CHANGES.txt 700741 2008-10-01 11:20:42Z mikemccand $
+
+======================= Release 2.4.0 2008-10-06 =======================
+
+Changes in backwards compatibility policy
+
+1. LUCENE-1340: In a minor change to Lucene's backward compatibility
+   policy, we are now allowing the Fieldable interface to have
+   changes, within reason, and made on a case-by-case basis.  If an
+   application implements it's own Fieldable, please be aware of
+   this.  Otherwise, no need to be concerned.  This is in effect for
+   all 2.X releases, starting with 2.4.  Also note, that in all
+   likelihood, Fieldable will be changed in 3.0.
+
+Changes in runtime behavior
+
+ 1. LUCENE-1151: Fix StandardAnalyzer to not mis-identify host names
+    (eg lucene.apache.org) as an ACRONYM.  To get back to the pre-2.4
+    backwards compatible, but buggy, behavior, you can either call
+    StandardAnalyzer.setDefaultReplaceInvalidAcronym(false) (static
+    method), or, set system property
+    org.apache.lucene.analysis.standard.StandardAnalyzer.replaceInvalidAcronym
+    to "false" on JVM startup.  All StandardAnalyzer instances created
+    after that will then show the pre-2.4 behavior.  Alternatively,
+    you can call setReplaceInvalidAcronym(false) to change the
+    behavior per instance of StandardAnalyzer.  This backwards
+    compatibility will be removed in 3.0 (hardwiring the value to
+    true).  (Mike McCandless)
+
+ 2. LUCENE-1044: IndexWriter with autoCommit=true now commits (such
+    that a reader can see the changes) far less often than it used to.
+    Previously, every flush was also a commit.  You can always force a
+    commit by calling IndexWriter.commit().  Furthermore, in 3.0,
+    autoCommit will be hardwired to false (IndexWriter constructors
+    that take an autoCommit argument have been deprecated) (Mike
+    McCandless)
+
+ 3. LUCENE-1335: IndexWriter.addIndexes(Directory[]) and
+    addIndexesNoOptimize no longer allow the same Directory instance
+    to be passed in more than once.  Internally, IndexWriter uses
+    Directory and segment name to uniquely identify segments, so
+    adding the same Directory more than once was causing duplicates
+    which led to problems (Mike McCandless)
+
+ 4. LUCENE-1396: Improve PhraseQuery.toString() so that gaps in the
+    positions are indicated with a ? and multiple terms at the same
+    position are joined with a |.  (Andrzej Bialecki via Mike
+    McCandless)
+
+API Changes
+
+ 1. LUCENE-1084: Changed all IndexWriter constructors to take an
+    explicit parameter for maximum field size.  Deprecated all the
+    pre-existing constructors; these will be removed in release 3.0.
+    NOTE: these new constructors set autoCommit to false.  (Steven
+    Rowe via Mike McCandless)
+
+ 2. LUCENE-584: Changed Filter API to return a DocIdSet instead of a
+    java.util.BitSet. This allows using more efficient data structures
+    for Filters and makes them more flexible. This deprecates
+    Filter.bits(), so all filters that implement this outside
+    the Lucene code base will need to be adapted. See also the javadocs
+    of the Filter class. (Paul Elschot, Michael Busch)
+
+ 3. LUCENE-1044: Added IndexWriter.commit() which flushes any buffered
+    adds/deletes and then commits a new segments file so readers will
+    see the changes.  Deprecate IndexWriter.flush() in favor of
+    IndexWriter.commit().  (Mike McCandless)
+
+ 4. LUCENE-325: Added IndexWriter.expungeDeletes methods, which
+    consult the MergePolicy to find merges necessary to merge away all
+    deletes from the index.  This should be a somewhat lower cost
+    operation than optimize.  (John Wang via Mike McCandless)
+
+ 5. LUCENE-1233: Return empty array instead of null when no fields
+    match the specified name in these methods in Document:
+    getFieldables, getFields, getValues, getBinaryValues.  (Stefan
+    Trcek vai Mike McCandless)
+
+ 6. LUCENE-1234: Make BoostingSpanScorer protected.  (Andi Vajda via Grant Ingersoll)
+
+ 7. LUCENE-510: The index now stores strings as true UTF-8 bytes
+    (previously it was Java's modified UTF-8).  If any text, either
+    stored fields or a token, has illegal UTF-16 surrogate characters,
+    these characters are now silently replaced with the Unicode
+    replacement character U+FFFD.  This is a change to the index file
+    format.  (Marvin Humphrey via Mike McCandless)
+
+ 8. LUCENE-852: Let the SpellChecker caller specify IndexWriter mergeFactor
+    and RAM buffer size.  (Otis Gospodnetic)
+	
+ 9. LUCENE-1290: Deprecate org.apache.lucene.search.Hits, Hit and HitIterator
+    and remove all references to these classes from the core. Also update demos
+    and tutorials. (Michael Busch)
+
+10. LUCENE-1288: Add getVersion() and getGeneration() to IndexCommit.
+    getVersion() returns the same value that IndexReader.getVersion()
+    returns when the reader is opened on the same commit.  (Jason
+    Rutherglen via Mike McCandless)
+
+11. LUCENE-1311: Added IndexReader.listCommits(Directory) static
+    method to list all commits in a Directory, plus IndexReader.open
+    methods that accept an IndexCommit and open the index as of that
+    commit.  These methods are only useful if you implement a custom
+    DeletionPolicy that keeps more than the last commit around.
+    (Jason Rutherglen via Mike McCandless)
+
+12. LUCENE-1325: Added IndexCommit.isOptimized().  (Shalin Shekhar
+    Mangar via Mike McCandless)
+
+13. LUCENE-1324: Added TokenFilter.reset(). (Shai Erera via Mike
+    McCandless)
+
+14. LUCENE-1340: Added Fieldable.omitTf() method to skip indexing term
+    frequency, positions and payloads.  This saves index space, and
+    indexing/searching time.  (Eks Dev via Mike McCandless)
+
+15. LUCENE-1219: Add basic reuse API to Fieldable for binary fields:
+    getBinaryValue/Offset/Length(); currently only lazy fields reuse
+    the provided byte[] result to getBinaryValue.  (Eks Dev via Mike
+    McCandless)
+
+16. LUCENE-1334: Add new constructor for Term: Term(String fieldName)
+    which defaults term text to "".  (DM Smith via Mike McCandless)
+
+17. LUCENE-1333: Added Token.reinit(*) APIs to re-initialize (reuse) a
+    Token.  Also added term() method to return a String, with a
+    performance penalty clearly documented.  Also implemented
+    hashCode() and equals() in Token, and fixed all core and contrib
+    analyzers to use the re-use APIs.  (DM Smith via Mike McCandless)
+
+18. LUCENE-1329: Add optional readOnly boolean when opening an
+    IndexReader.  A readOnly reader is not allowed to make changes
+    (deletions, norms) to the index; in exchanged, the isDeleted
+    method, often a bottleneck when searching with many threads, is
+    not synchronized.  The default for readOnly is still false, but in
+    3.0 the default will become true.  (Jason Rutherglen via Mike
+    McCandless)
+
+19. LUCENE-1367: Add IndexCommit.isDeleted().  (Shalin Shekhar Mangar
+    via Mike McCandless)
+
+20. LUCENE-1061: Factored out all "new XXXQuery(...)" in
+    QueryParser.java into protected methods newXXXQuery(...) so that
+    subclasses can create their own subclasses of each Query type.
+    (John Wang via Mike McCandless)
+
+21. LUCENE-753: Added new Directory implementation
+    org.apache.lucene.store.NIOFSDirectory, which uses java.nio's
+    FileChannel to do file reads.  On most non-Windows platforms, with
+    many threads sharing a single searcher, this may yield sizable
+    improvement to query throughput when compared to FSDirectory,
+    which only allows a single thread to read from an open file at a
+    time.  (Jason Rutherglen via Mike McCandless)
+
+22. LUCENE-1371: Added convenience method TopDocs Searcher.search(Query query, int n).
+    (Mike McCandless)
+    
+23. LUCENE-1356: Allow easy extensions of TopDocCollector by turning
+    constructor and fields from package to protected. (Shai Erera
+    via Doron Cohen) 
+
+24. LUCENE-1375: Added convencience method IndexCommit.getTimestamp,
+    which is equivalent to
+    getDirectory().fileModified(getSegmentsFileName()).  (Mike McCandless)
+
+23. LUCENE-1366: Rename Field.Index options to be more accurate:
+    TOKENIZED becomes ANALYZED;  UN_TOKENIZED becomes NOT_ANALYZED;
+    NO_NORMS becomes NOT_ANALYZED_NO_NORMS and a new ANALYZED_NO_NORMS
+    is added.  (Mike McCandless)
+
+24. LUCENE-1131: Added numDeletedDocs method to IndexReader (Otis Gospodnetic)
+
+Bug fixes
+    
+ 1. LUCENE-1134: Fixed BooleanQuery.rewrite to only optimize a single 
+    clause query if minNumShouldMatch<=0. (Shai Erera via Michael Busch)
+
+ 2. LUCENE-1169: Fixed bug in IndexSearcher.search(): searching with
+    a filter might miss some hits because scorer.skipTo() is called
+    without checking if the scorer is already at the right position.
+    scorer.skipTo(scorer.doc()) is not a NOOP, it behaves as 
+    scorer.next(). (Eks Dev, Michael Busch)
+
+ 3. LUCENE-1182: Added scorePayload to SimilarityDelegator (Andi Vajda via Grant Ingersoll)
+ 
+ 4. LUCENE-1213: MultiFieldQueryParser was ignoring slop in case
+    of a single field phrase. (Trejkaz via Doron Cohen)
+
+ 5. LUCENE-1228: IndexWriter.commit() was not updating the index version and as
+    result IndexReader.reopen() failed to sense index changes. (Doron Cohen)
+
+ 6. LUCENE-1267: Added numDocs() and maxDoc() to IndexWriter;
+    deprecated docCount().  (Mike McCandless)
+
+ 7. LUCENE-1274: Added new prepareCommit() method to IndexWriter,
+    which does phase 1 of a 2-phase commit (commit() does phase 2).
+    This is needed when you want to update an index as part of a
+    transaction involving external resources (eg a database).  Also
+    deprecated abort(), renaming it to rollback().  (Mike McCandless)
+
+ 8. LUCENE-1003: Stop RussianAnalyzer from removing numbers.
+    (TUSUR OpenTeam, Dmitry Lihachev via Otis Gospodnetic)
+
+ 9. LUCENE-1152: SpellChecker fix around clearIndex and indexDictionary
+    methods, plus removal of IndexReader reference.
+    (Naveen Belkale via Otis Gospodnetic)
+
+10. LUCENE-1046: Removed dead code in SpellChecker
+    (Daniel Naber via Otis Gospodnetic)
+	
+11. LUCENE-1189: Fixed the QueryParser to handle escaped characters within 
+    quoted terms correctly. (Tomer Gabel via Michael Busch)
+
+12. LUCENE-1299: Fixed NPE in SpellChecker when IndexReader is not null and field is (Grant Ingersoll)
+
+13. LUCENE-1303: Fixed BoostingTermQuery's explanation to be marked as a Match 
+    depending only upon the non-payload score part, regardless of the effect of 
+    the payload on the score. Prior to this, score of a query containing a BTQ 
+    differed from its explanation. (Doron Cohen)
+    
+14. LUCENE-1310: Fixed SloppyPhraseScorer to work also for terms repeating more 
+    than twice in the query. (Doron Cohen)
+
+15. LUCENE-1351: ISOLatin1AccentFilter now cleans additional ligatures (Cedrik Lime via Grant Ingersoll)
+
+16. LUCENE-1383: Workaround a nasty "leak" in Java's builtin
+    ThreadLocal, to prevent Lucene from causing unexpected
+    OutOfMemoryError in certain situations (notably J2EE
+    applications).  (Chris Lu via Mike McCandless)
+
+New features
+
+ 1. LUCENE-1137: Added Token.set/getFlags() accessors for passing more information about a Token through the analysis
+    process.  The flag is not indexed/stored and is thus only used by analysis.
+
+ 2. LUCENE-1147: Add -segment option to CheckIndex tool so you can
+    check only a specific segment or segments in your index.  (Mike
+    McCandless)
+
+ 3. LUCENE-1045: Reopened this issue to add support for short and bytes. 
+ 
+ 4. LUCENE-584: Added new data structures to o.a.l.util, such as 
+    OpenBitSet and SortedVIntList. These extend DocIdSet and can 
+    directly be used for Filters with the new Filter API. Also changed
+    the core Filters to use OpenBitSet instead of java.util.BitSet.
+    (Paul Elschot, Michael Busch)
+
+ 5. LUCENE-494: Added QueryAutoStopWordAnalyzer to allow for the automatic removal, from a query of frequently occurring terms.
+    This Analyzer is not intended for use during indexing. (Mark Harwood via Grant Ingersoll)
+
+ 6. LUCENE-1044: Change Lucene to properly "sync" files after
+    committing, to ensure on a machine or OS crash or power cut, even
+    with cached writes, the index remains consistent.  Also added
+    explicit commit() method to IndexWriter to force a commit without
+    having to close.  (Mike McCandless)
+    
+ 7. LUCENE-997: Add search timeout (partial) support.
+    A TimeLimitedCollector was added to allow limiting search time.
+    It is a partial solution since timeout is checked only when 
+    collecting a hit, and therefore a search for rare words in a 
+    huge index might not stop within the specified time.
+    (Sean Timm via Doron Cohen) 
+
+ 8. LUCENE-1184: Allow SnapshotDeletionPolicy to be re-used across
+    close/re-open of IndexWriter while still protecting an open
+    snapshot (Tim Brennan via Mike McCandless)
+
+ 9. LUCENE-1194: Added IndexWriter.deleteDocuments(Query) to delete
+    documents matching the specified query.  Also added static unlock
+    and isLocked methods (deprecating the ones in IndexReader).  (Mike
+    McCandless)
+
+10. LUCENE-1201: Add IndexReader.getIndexCommit() method. (Tim Brennan
+    via Mike McCandless)
+
+11. LUCENE-550:  Added InstantiatedIndex implementation.  Experimental 
+    Index store similar to MemoryIndex but allows for multiple documents 
+    in memory.  (Karl Wettin via Grant Ingersoll)
+
+12. LUCENE-400: Added word based n-gram filter (in contrib/analyzers) called ShingleFilter and an Analyzer wrapper
+    that wraps another Analyzer's token stream with a ShingleFilter (Sebastian Kirsch, Steve Rowe via Grant Ingersoll) 
+
+13. LUCENE-1166: Decomposition tokenfilter for languages like German and Swedish (Thomas Peuss via Grant Ingersoll)
+
+14. LUCENE-1187: ChainedFilter and BooleanFilter now work with new Filter API
+    and DocIdSetIterator-based filters. Backwards-compatibility with old 
+    BitSet-based filters is ensured. (Paul Elschot via Michael Busch)
+
+15. LUCENE-1295: Added new method to MoreLikeThis for retrieving interesting terms and made retrieveTerms(int) public. (Grant Ingersoll)
+
+16. LUCENE-1298: MoreLikeThis can now accept a custom Similarity (Grant Ingersoll)
+
+17. LUCENE-1297: Allow other string distance measures for the SpellChecker
+    (Thomas Morton via Otis Gospodnetic)
+
+18. LUCENE-1001: Provide access to Payloads via Spans.  All existing Span Query implementations in Lucene implement. (Mark Miller, Grant Ingersoll)
+
+19. LUCENE-1354: Provide programmatic access to CheckIndex (Grant Ingersoll, Mike McCandless)
+
+20. LUCENE-1279: Add support for Collators to RangeFilter/Query and Query Parser.  (Steve Rowe via Grant Ingersoll) 
+
+Optimizations
+
+ 1. LUCENE-705: When building a compound file, use
+    RandomAccessFile.setLength() to tell the OS/filesystem to
+    pre-allocate space for the file.  This may improve fragmentation
+    in how the CFS file is stored, and allows us to detect an upcoming
+    disk full situation before actually filling up the disk.  (Mike
+    McCandless)
+
+ 2. LUCENE-1120: Speed up merging of term vectors by bulk-copying the
+    raw bytes for each contiguous range of non-deleted documents.
+    (Mike McCandless)
+	
+ 3. LUCENE-1185: Avoid checking if the TermBuffer 'scratch' in 
+    SegmentTermEnum is null for every call of scanTo().
+    (Christian Kohlschuetter via Michael Busch)
+
+ 4. LUCENE-1217: Internal to Field.java, use isBinary instead of
+    runtime type checking for possible speedup of binaryValue().
+    (Eks Dev via Mike McCandless)
+
+ 5. LUCENE-1183: Optimized TRStringDistance class (in contrib/spell) that uses
+    less memory than the previous version.  (Cédrik LIME via Otis Gospodnetic)
+
+ 6. LUCENE-1195: Improve term lookup performance by adding a LRU cache to the
+    TermInfosReader. In performance experiments the speedup was about 25% on 
+    average on mid-size indexes with ~500,000 documents for queries with 3 
+    terms and about 7% on larger indexes with ~4.3M documents. (Michael Busch)
+
+Documentation
+
+  1. LUCENE-1236:  Added some clarifying remarks to EdgeNGram*.java (Hiroaki Kawai via Grant Ingersoll)
+  
+  2. LUCENE-1157 and LUCENE-1256: HTML changes log, created automatically 
+     from CHANGES.txt. This HTML file is currently visible only via developers page.     
+     (Steven Rowe via Doron Cohen)
+
+  3. LUCENE-1349: Fieldable can now be changed without breaking backward compatibility rules (within reason.  See the note at
+  the top of this file and also on Fieldable.java).  (Grant Ingersoll)
+
+Build
+
+  1. LUCENE-1153: Added JUnit JAR to new lib directory.  Updated build to rely on local JUnit instead of ANT/lib.
+  
+  2. LUCENE-1202: Small fixes to the way Clover is used to work better
+     with contribs.  Of particular note: a single clover db is used
+     regardless of whether tests are run globally or in the specific
+     contrib directories. 
+     
+  3. LUCENE-1353: Javacc target in contrib/miscellaneous for 
+     generating the precedence query parser. 
+
+Test Cases
+
+ 1. LUCENE-1238: Fixed intermittent failures of TestTimeLimitedCollector.testTimeoutMultiThreaded.
+    Within this fix, "greedy" flag was added to TimeLimitedCollector, to allow the wrapped 
+    collector to collect also the last doc, after allowed-tTime passed. (Doron Cohen)   
+	
+ 2. LUCENE-1348: relax TestTimeLimitedCollector to not fail due to 
+    timeout exceeded (just because test machine is very busy).
+	
+======================= Release 2.3.2 2008-05-05 =======================
+
+Bug fixes
+
+ 1. LUCENE-1191: On hitting OutOfMemoryError in any index-modifying
+    methods in IndexWriter, do not commit any further changes to the
+    index to prevent risk of possible corruption.  (Mike McCandless)
+
+ 2. LUCENE-1197: Fixed issue whereby IndexWriter would flush by RAM
+    too early when TermVectors were in use.  (Mike McCandless)
+
+ 3. LUCENE-1198: Don't corrupt index if an exception happens inside
+    DocumentsWriter.init (Mike McCandless)
+
+ 4. LUCENE-1199: Added defensive check for null indexReader before
+    calling close in IndexModifier.close() (Mike McCandless)
+
+ 5. LUCENE-1200: Fix rare deadlock case in addIndexes* when
+    ConcurrentMergeScheduler is in use (Mike McCandless)
+
+ 6. LUCENE-1208: Fix deadlock case on hitting an exception while
+    processing a document that had triggered a flush (Mike McCandless)
+
+ 7. LUCENE-1210: Fix deadlock case on hitting an exception while
+    starting a merge when using ConcurrentMergeScheduler (Mike McCandless)
+
+ 8. LUCENE-1222: Fix IndexWriter.doAfterFlush to always be called on
+    flush (Mark Ferguson via Mike McCandless)
+	
+ 9. LUCENE-1226: Fixed IndexWriter.addIndexes(IndexReader[]) to commit
+    successfully created compound files. (Michael Busch)
+
+10. LUCENE-1150: Re-expose StandardTokenizer's constants publicly;
+    this was accidentally lost with LUCENE-966.  (Nicolas Lalevée via
+    Mike McCandless)
+
+11. LUCENE-1262: Fixed bug in BufferedIndexReader.refill whereby on
+    hitting an exception in readInternal, the buffer is incorrectly
+    filled with stale bytes such that subsequent calls to readByte()
+    return incorrect results.  (Trejkaz via Mike McCandless)
+
+12. LUCENE-1270: Fixed intermittant case where IndexWriter.close()
+    would hang after IndexWriter.addIndexesNoOptimize had been
+    called.  (Stu Hood via Mike McCandless)
+	
+Build
+
+ 1. LUCENE-1230: Include *pom.xml* in source release files. (Michael Busch)
+
+ 
+======================= Release 2.3.1 2008-02-22 =======================
+
+Bug fixes
+    
+ 1. LUCENE-1168: Fixed corruption cases when autoCommit=false and
+    documents have mixed term vectors (Suresh Guvvala via Mike
+    McCandless).
+
+ 2. LUCENE-1171: Fixed some cases where OOM errors could cause
+    deadlock in IndexWriter (Mike McCandless).
+
+ 3. LUCENE-1173: Fixed corruption case when autoCommit=false and bulk
+    merging of stored fields is used (Yonik via Mike McCandless).
+
+ 4. LUCENE-1163: Fixed bug in CharArraySet.contains(char[] buffer, int
+    offset, int len) that was ignoring offset and thus giving the
+    wrong answer.  (Thomas Peuss via Mike McCandless)
+	
+ 5. LUCENE-1177: Fix rare case where IndexWriter.optimize might do too
+    many merges at the end.  (Mike McCandless)
+	
+ 6. LUCENE-1176: Fix corruption case when documents with no term
+    vector fields are added before documents with term vector fields.
+    (Mike McCandless)
+	
+ 7. LUCENE-1179: Fixed assert statement that was incorrectly
+    preventing Fields with empty-string field name from working.
+    (Sergey Kabashnyuk via Mike McCandless)
+
+======================= Release 2.3.0 2008-01-21 =======================
+
+Changes in runtime behavior
+
+ 1. LUCENE-994: Defaults for IndexWriter have been changed to maximize
+    out-of-the-box indexing speed.  First, IndexWriter now flushes by
+    RAM usage (16 MB by default) instead of a fixed doc count (call
+    IndexWriter.setMaxBufferedDocs to get backwards compatible
+    behavior).  Second, ConcurrentMergeScheduler is used to run merges
+    using background threads (call IndexWriter.setMergeScheduler(new
+    SerialMergeScheduler()) to get backwards compatible behavior).
+    Third, merges are chosen based on size in bytes of each segment
+    rather than document count of each segment (call
+    IndexWriter.setMergePolicy(new LogDocMergePolicy()) to get
+    backwards compatible behavior).
+
+    NOTE: users of ParallelReader must change back all of these
+    defaults in order to ensure the docIDs "align" across all parallel
+    indices.
+
+    (Mike McCandless)
+
+ 2. LUCENE-1045: SortField.AUTO didn't work with long. When detecting
+    the field type for sorting automatically, numbers used to be
+    interpreted as int, then as float, if parsing the number as an int
+    failed. Now the detection checks for int, then for long,
+    then for float. (Daniel Naber)
+
+API Changes
+
+ 1. LUCENE-843: Added IndexWriter.setRAMBufferSizeMB(...) to have
+    IndexWriter flush whenever the buffered documents are using more
+    than the specified amount of RAM.  Also added new APIs to Token
+    that allow one to set a char[] plus offset and length to specify a
+    token (to avoid creating a new String() for each Token).  (Mike
+    McCandless)
+
+ 2. LUCENE-963: Add setters to Field to allow for re-using a single
+    Field instance during indexing.  This is a sizable performance
+    gain, especially for small documents.  (Mike McCandless)
+
+ 3. LUCENE-969: Add new APIs to Token, TokenStream and Analyzer to
+    permit re-using of Token and TokenStream instances during
+    indexing.  Changed Token to use a char[] as the store for the
+    termText instead of String.  This gives faster tokenization
+    performance (~10-15%).  (Mike McCandless)
+
+ 4. LUCENE-847: Factored MergePolicy, which determines which merges
+    should take place and when, as well as MergeScheduler, which
+    determines when the selected merges should actually run, out of
+    IndexWriter.  The default merge policy is now
+    LogByteSizeMergePolicy (see LUCENE-845) and the default merge
+    scheduler is now ConcurrentMergeScheduler (see
+    LUCENE-870). (Steven Parkes via Mike McCandless)
+
+ 5. LUCENE-1052: Add IndexReader.setTermInfosIndexDivisor(int) method
+    that allows you to reduce memory usage of the termInfos by further
+    sub-sampling (over the termIndexInterval that was used during
+    indexing) which terms are loaded into memory.  (Chuck Williams,
+    Doug Cutting via Mike McCandless)
+    
+ 6. LUCENE-743: Add IndexReader.reopen() method that re-opens an
+    existing IndexReader (see New features -> 8.) (Michael Busch)
+
+ 7. LUCENE-1062: Add setData(byte[] data), 
+    setData(byte[] data, int offset, int length), getData(), getOffset()
+    and clone() methods to o.a.l.index.Payload. Also add the field name 
+    as arg to Similarity.scorePayload(). (Michael Busch)
+
+ 8. LUCENE-982: Add IndexWriter.optimize(int maxNumSegments) method to
+    "partially optimize" an index down to maxNumSegments segments.
+    (Mike McCandless)
+
+ 9. LUCENE-1080: Changed Token.DEFAULT_TYPE to be public.
+
+10. LUCENE-1064: Changed TopDocs constructor to be public. 
+     (Shai Erera via Michael Busch)
+
+11. LUCENE-1079: DocValues cleanup: constructor now has no params,
+    and getInnerArray() now throws UnsupportedOperationException (Doron Cohen)
+
+12. LUCENE-1089: Added PriorityQueue.insertWithOverflow, which returns
+    the Object (if any) that was bumped from the queue to allow
+    re-use.  (Shai Erera via Mike McCandless)
+    
+13. LUCENE-1101: Token reuse 'contract' (defined LUCENE-969)
+    modified so it is token producer's responsibility
+    to call Token.clear(). (Doron Cohen)   
+
+14. LUCENE-1118: Changed StandardAnalyzer to skip too-long (default >
+    255 characters) tokens.  You can increase this limit by calling
+    StandardAnalyzer.setMaxTokenLength(...).  (Michael McCandless)
+
+
+Bug fixes
+
+ 1. LUCENE-933: QueryParser fixed to not produce empty sub 
+    BooleanQueries "()" even if the Analyzer produced no 
+    tokens for input. (Doron Cohen)
+
+ 2. LUCENE-955: Fixed SegmentTermPositions to work correctly with the
+    first term in the dictionary. (Michael Busch)
+
+ 3. LUCENE-951: Fixed NullPointerException in MultiLevelSkipListReader
+    that was thrown after a call of TermPositions.seek(). 
+    (Rich Johnson via Michael Busch)
+    
+ 4. LUCENE-938: Fixed cases where an unhandled exception in
+    IndexWriter's methods could cause deletes to be lost.
+    (Steven Parkes via Mike McCandless)
+      
+ 5. LUCENE-962: Fixed case where an unhandled exception in
+    IndexWriter.addDocument or IndexWriter.updateDocument could cause
+    unreferenced files in the index to not be deleted
+    (Steven Parkes via Mike McCandless)
+  
+ 6. LUCENE-957: RAMDirectory fixed to properly handle directories
+    larger than Integer.MAX_VALUE. (Doron Cohen)
+
+ 7. LUCENE-781: MultiReader fixed to not throw NPE if isCurrent(),
+    isOptimized() or getVersion() is called. Separated MultiReader
+    into two classes: MultiSegmentReader extends IndexReader, is
+    package-protected and is created automatically by IndexReader.open()
+    in case the index has multiple segments. The public MultiReader 
+    now extends MultiSegmentReader and is intended to be used by users
+    who want to add their own subreaders. (Daniel Naber, Michael Busch)
+
+ 8. LUCENE-970: FilterIndexReader now implements isOptimized(). Before
+    a call of isOptimized() would throw a NPE. (Michael Busch)
+
+ 9. LUCENE-832: ParallelReader fixed to not throw NPE if isCurrent(),
+    isOptimized() or getVersion() is called. (Michael Busch)
+      
+10. LUCENE-948: Fix FNFE exception caused by stale NFS client
+    directory listing caches when writers on different machines are
+    sharing an index over NFS and using a custom deletion policy (Mike
+    McCandless)
+
+11. LUCENE-978: Ensure TermInfosReader, FieldsReader, and FieldsReader
+    close any streams they had opened if an exception is hit in the
+    constructor.  (Ning Li via Mike McCandless)
+
+12. LUCENE-985: If an extremely long term is in a doc (> 16383 chars),
+    we now throw an IllegalArgumentException saying the term is too
+    long, instead of cryptic ArrayIndexOutOfBoundsException.  (Karl
+    Wettin via Mike McCandless)
+
+13. LUCENE-991: The explain() method of BoostingTermQuery had errors
+    when no payloads were present on a document.  (Peter Keegan via
+    Grant Ingersoll)
+
+14. LUCENE-992: Fixed IndexWriter.updateDocument to be atomic again
+    (this was broken by LUCENE-843).  (Ning Li via Mike McCandless)
+
+15. LUCENE-1008: Fixed corruption case when document with no term
+    vector fields is added after documents with term vector fields.
+    This bug was introduced with LUCENE-843.  (Grant Ingersoll via
+    Mike McCandless)
+
+16. LUCENE-1006: Fixed QueryParser to accept a "" field value (zero
+    length quoted string.)  (yonik)
+
+17. LUCENE-1010: Fixed corruption case when document with no term
+    vector fields is added after documents with term vector fields.
+    This case is hit during merge and would cause an EOFException.
+    This bug was introduced with LUCENE-984.  (Andi Vajda via Mike
+    McCandless)
+
+19. LUCENE-1009: Fix merge slowdown with LogByteSizeMergePolicy when
+    autoCommit=false and documents are using stored fields and/or term
+    vectors.  (Mark Miller via Mike McCandless)
+
+20. LUCENE-1011: Fixed corruption case when two or more machines,
+    sharing an index over NFS, can be writers in quick succession.
+    (Patrick Kimber via Mike McCandless)
+
+21. LUCENE-1028: Fixed Weight serialization for few queries:
+    DisjunctionMaxQuery, ValueSourceQuery, CustomScoreQuery.
+    Serialization check added for all queries.
+    (Kyle Maxwell via Doron Cohen)
+
+22. LUCENE-1048: Fixed incorrect behavior in Lock.obtain(...) when the
+    timeout argument is very large (eg Long.MAX_VALUE).  Also added
+    Lock.LOCK_OBTAIN_WAIT_FOREVER constant to never timeout.  (Nikolay
+    Diakov via Mike McCandless)
+
+23. LUCENE-1050: Throw LockReleaseFailedException in
+    Simple/NativeFSLockFactory if we fail to delete the lock file when
+    releasing the lock.  (Nikolay Diakov via Mike McCandless)
+
+24. LUCENE-1071: Fixed SegmentMerger to correctly set payload bit in 
+    the merged segment. (Michael Busch)
+
+25. LUCENE-1042: Remove throwing of IOException in getTermFreqVector(int, String, TermVectorMapper) to be consistent
+    with other getTermFreqVector calls.  Also removed the throwing of the other IOException in that method to be consistent.  (Karl Wettin via Grant Ingersoll)
+    
+26. LUCENE-1096: Fixed Hits behavior when hits' docs are deleted 
+    along with iterating the hits. Deleting docs already retrieved 
+    now works seamlessly. If docs not yet retrieved are deleted 
+    (e.g. from another thread), and then, relying on the initial 
+    Hits.length(), an application attempts to retrieve more hits 
+    than actually exist , a ConcurrentMidificationException 
+    is thrown.  (Doron Cohen)
+
+27. LUCENE-1068: Changed StandardTokenizer to fix an issue with it marking
+  the type of some tokens incorrectly.  This is done by adding a new flag named
+  replaceInvalidAcronym which defaults to false, the current, incorrect behavior.  Setting
+  this flag to true fixes the problem.  This flag is a temporary fix and is already
+  marked as being deprecated.  3.x will implement the correct approach.  (Shai Erera via Grant Ingersoll)
+  LUCENE-1140: Fixed NPE caused by 1068 (Alexei Dets via Grant Ingersoll)
+    
+28. LUCENE-749: ChainedFilter behavior fixed when logic of 
+    first filter is ANDNOT.  (Antonio Bruno via Doron Cohen)
+
+29. LUCENE-508: Make sure SegmentTermEnum.prev() is accurate (= last
+    term) after next() returns false.  (Steven Tamm via Mike
+    McCandless)
+
+    
+New features
+
+ 1. LUCENE-906: Elision filter for French.
+    (Mathieu Lecarme via Otis Gospodnetic)
+
+ 2. LUCENE-960: Added a SpanQueryFilter and related classes to allow for
+    not only filtering, but knowing where in a Document a Filter matches
+    (Grant Ingersoll)
+
+ 3. LUCENE-868: Added new Term Vector access features.  New callback
+    mechanism allows application to define how and where to read Term
+    Vectors from disk. This implementation contains several extensions
+    of the new abstract TermVectorMapper class.  The new API should be
+    back-compatible.  No changes in the actual storage of Term Vectors
+    has taken place.
+ 3.1 LUCENE-1038: Added setDocumentNumber() method to TermVectorMapper
+     to provide information about what document is being accessed.
+     (Karl Wettin via Grant Ingersoll)
+
+ 4. LUCENE-975: Added PositionBasedTermVectorMapper that allows for
+    position based lookup of term vector information.
+    See item #3 above (LUCENE-868).
+
+ 5. LUCENE-1011: Added simple tools (all in org.apache.lucene.store)
+    to verify that locking is working properly.  LockVerifyServer runs
+    a separate server to verify locks.  LockStressTest runs a simple
+    tool that rapidly obtains and releases locks.
+    VerifyingLockFactory is a LockFactory that wraps any other
+    LockFactory and consults the LockVerifyServer whenever a lock is
+    obtained or released, throwing an exception if an illegal lock
+    obtain occurred.  (Patrick Kimber via Mike McCandless)
+
+ 6. LUCENE-1015: Added FieldCache extension (ExtendedFieldCache) to
+    support doubles and longs.  Added support into SortField for sorting
+    on doubles and longs as well.  (Grant Ingersoll)
+
+ 7. LUCENE-1020: Created basic index checking & repair tool
+    (o.a.l.index.CheckIndex).  When run without -fix it does a
+    detailed test of all segments in the index and reports summary
+    information and any errors it hit.  With -fix it will remove
+    segments that had errors.  (Mike McCandless)
+
+ 8. LUCENE-743: Add IndexReader.reopen() method that re-opens an
+    existing IndexReader by only loading those portions of an index
+    that have changed since the reader was (re)opened. reopen() can
+    be significantly faster than open(), depending on the amount of
+    index changes. SegmentReader, MultiSegmentReader, MultiReader,
+    and ParallelReader implement reopen(). (Michael Busch) 
+
+ 9. LUCENE-1040: CharArraySet useful for efficiently checking
+    set membership of text specified by char[]. (yonik)
+
+10. LUCENE-1073: Created SnapshotDeletionPolicy to facilitate taking a
+    live backup of an index without pausing indexing.  (Mike
+    McCandless)
+    
+11. LUCENE-1019: CustomScoreQuery enhanced to support multiple 
+    ValueSource queries. (Kyle Maxwell via Doron Cohen)
+    
+12. LUCENE-1095: Added an option to StopFilter to increase 
+    positionIncrement of the token succeeding a stopped token.
+    Disabled by default. Similar option added to QueryParser 
+    to consider token positions when creating PhraseQuery 
+    and MultiPhraseQuery. Disabled by default (so by default
+    the query parser ignores position increments).
+    (Doron Cohen)
+
+
+
+Optimizations
+
+ 1. LUCENE-937: CachingTokenFilter now uses an iterator to access the 
+    Tokens that are cached in the LinkedList. This increases performance 
+    significantly, especially when the number of Tokens is large. 
+    (Mark Miller via Michael Busch)
+
+ 2. LUCENE-843: Substantial optimizations to improve how IndexWriter
+    uses RAM for buffering documents and to speed up indexing (2X-8X
+    faster).  A single shared hash table now records the in-memory
+    postings per unique term and is directly flushed into a single
+    segment.  (Mike McCandless)
+ 
+ 3. LUCENE-892: Fixed extra "buffer to buffer copy" that sometimes
+    takes place when using compound files.  (Mike McCandless)
+
+ 4. LUCENE-959: Remove synchronization in Document (yonik)
+
+ 5. LUCENE-963: Add setters to Field to allow for re-using a single
+    Field instance during indexing.  This is a sizable performance
+    gain, especially for small documents.  (Mike McCandless)
+
+ 6. LUCENE-939: Check explicitly for boundary conditions in FieldInfos
+    and don't rely on exceptions. (Michael Busch)
+
+ 7. LUCENE-966: Very substantial speedups (~6X faster) for
+    StandardTokenizer (StandardAnalyzer) by using JFlex instead of
+    JavaCC to generate the tokenizer.
+    (Stanislaw Osinski via Mike McCandless)
+
+ 8. LUCENE-969: Changed core tokenizers & filters to re-use Token and
+    TokenStream instances when possible to improve tokenization
+    performance (~10-15%). (Mike McCandless)
+
+ 9. LUCENE-871: Speedup ISOLatin1AccentFilter (Ian Boston via Mike
+    McCandless)
+
+10. LUCENE-986: Refactored SegmentInfos from IndexReader into the new
+    subclass DirectoryIndexReader. SegmentReader and MultiSegmentReader
+    now extend DirectoryIndexReader and are the only IndexReader 
+    implementations that use SegmentInfos to access an index and 
+    acquire a write lock for index modifications. (Michael Busch)
+
+11. LUCENE-1007: Allow flushing in IndexWriter to be triggered by
+    either RAM usage or document count or both (whichever comes
+    first), by adding symbolic constant DISABLE_AUTO_FLUSH to disable
+    one of the flush triggers.  (Ning Li via Mike McCandless)
+
+12. LUCENE-1043: Speed up merging of stored fields by bulk-copying the
+    raw bytes for each contiguous range of non-deleted documents.
+    (Robert Engels via Mike McCandless)
+
+13. LUCENE-693: Speed up nested conjunctions (~2x) that match many
+    documents, and a slight performance increase for top level
+    conjunctions.  (yonik)
+
+14. LUCENE-1098: Make inner class StandardAnalyzer.SavedStreams static 
+    and final. (Nathan Beyer via Michael Busch)
+
+Documentation
+
+ 1. LUCENE-1051: Generate separate javadocs for core, demo and contrib
+    classes, as well as an unified view. Also add an appropriate menu 
+    structure to the website. (Michael Busch)
+
+ 2. LUCENE-746: Fix error message in AnalyzingQueryParser.getPrefixQuery.
+    (Ronnie Kolehmainen via Michael Busch)
+
+Build
+
+ 1. LUCENE-908: Improvements and simplifications for how the MANIFEST
+    file and the META-INF dir are created. (Michael Busch)
+
+ 2. LUCENE-935: Various improvements for the maven artifacts. Now the
+    artifacts also include the sources as .jar files. (Michael Busch)
+
+ 3. Added apply-patch target to top-level build.  Defaults to looking for
+    a patch in ${basedir}/../patches with name specified by -Dpatch.name.
+    Can also specify any location by -Dpatch.file property on the command
+    line.  This should be helpful for easy application of patches, but it
+    is also a step towards integrating automatic patch application with
+    JIRA and Hudson, and is thus subject to change.  (Grant Ingersoll)
+ 
+ 4. LUCENE-935: Defined property "m2.repository.url" to allow setting
+    the url to a maven remote repository to deploy to. (Michael Busch)
+
+ 5. LUCENE-1051: Include javadocs in the maven artifacts. (Michael Busch)
+
+ 6. LUCENE-1055: Remove gdata-server from build files and its sources 
+    from trunk. (Michael Busch)
+
+ 7. LUCENE-935: Allow to deploy maven artifacts to a remote m2 repository
+    via scp and ssh authentication. (Michael Busch)
+	
+ 8. LUCENE-1123: Allow overriding the specification version for 
+    MANIFEST.MF (Michael Busch)
+
+Test Cases
+
+ 1. LUCENE-766: Test adding two fields with the same name but different 
+    term vector setting.  (Nicolas Lalevée via Doron Cohen)  
+    
+======================= Release 2.2.0 2007-06-19 =======================
+
+Changes in runtime behavior
+
+API Changes
+
+ 1. LUCENE-793: created new exceptions and added them to throws clause
+    for many methods (all subclasses of IOException for backwards
+    compatibility): index.StaleReaderException,
+    index.CorruptIndexException, store.LockObtainFailedException.
+    This was done to better call out the possible root causes of an
+    IOException from these methods.  (Mike McCandless)
+
+ 2. LUCENE-811: make SegmentInfos class, plus a few methods from related
+    classes, package-private again (they were unnecessarily made public
+    as part of LUCENE-701).  (Mike McCandless)
+
+ 3. LUCENE-710: added optional autoCommit boolean to IndexWriter
+    constructors.  When this is false, index changes are not committed
+    until the writer is closed.  This gives explicit control over when
+    a reader will see the changes.  Also added optional custom
+    deletion policy to explicitly control when prior commits are
+    removed from the index.  This is intended to allow applications to
+    share an index over NFS by customizing when prior commits are
+    deleted. (Mike McCandless)
+
+ 4. LUCENE-818: changed most public methods of IndexWriter,
+    IndexReader (and its subclasses), FieldsReader and RAMDirectory to
+    throw AlreadyClosedException if they are accessed after being
+    closed.  (Mike McCandless)
+
+ 5. LUCENE-834: Changed some access levels for certain Span classes to allow them
+    to be overridden.  They have been marked expert only and not for public
+    consumption. (Grant Ingersoll) 
+
+ 6. LUCENE-796: Removed calls to super.* from various get*Query methods in
+    MultiFieldQueryParser, in order to allow sub-classes to override them.
+    (Steven Parkes via Otis Gospodnetic)
+
+ 7. LUCENE-857: Removed caching from QueryFilter and deprecated QueryFilter
+    in favour of QueryWrapperFilter or QueryWrapperFilter + CachingWrapperFilter
+    combination when caching is desired.
+    (Chris Hostetter, Otis Gospodnetic)
+
+ 8. LUCENE-869: Changed FSIndexInput and FSIndexOutput to inner classes of FSDirectory
+    to enable extensibility of these classes. (Michael Busch)
+
+ 9. LUCENE-580: Added the public method reset() to TokenStream. This method does
+    nothing by default, but may be overwritten by subclasses to support consuming
+    the TokenStream more than once. (Michael Busch)
+
+10. LUCENE-580: Added a new constructor to Field that takes a TokenStream as
+    argument, available as tokenStreamValue(). This is useful to avoid the need of 
+    "dummy analyzers" for pre-analyzed fields. (Karl Wettin, Michael Busch)
+
+11. LUCENE-730: Added the new methods to BooleanQuery setAllowDocsOutOfOrder() and
+    getAllowDocsOutOfOrder(). Deprecated the methods setUseScorer14() and 
+    getUseScorer14(). The optimization patch LUCENE-730 (see Optimizations->3.) 
+    improves performance for certain queries but results in scoring out of docid 
+    order. This patch reverse this change, so now by default hit docs are scored
+    in docid order if not setAllowDocsOutOfOrder(true) is explicitly called.
+    This patch also enables the tests in QueryUtils again that check for docid
+    order. (Paul Elschot, Doron Cohen, Michael Busch)
+
+12. LUCENE-888: Added Directory.openInput(File path, int bufferSize)
+    to optionally specify the size of the read buffer.  Also added
+    BufferedIndexInput.setBufferSize(int) to change the buffer size.
+    (Mike McCandless)
+
+13. LUCENE-923: Make SegmentTermPositionVector package-private. It does not need
+    to be public because it implements the public interface TermPositionVector.
+    (Michael Busch)
+
+Bug fixes
+
+ 1. LUCENE-804: Fixed build.xml to pack a fully compilable src dist.  (Doron Cohen)
+
+ 2. LUCENE-813: Leading wildcard fixed to work with trailing wildcard.
+    Query parser modified to create a prefix query only for the case 
+    that there is a single trailing wildcard (and no additional wildcard 
+    or '?' in the query text).  (Doron Cohen)
+
+ 3. LUCENE-812: Add no-argument constructors to NativeFSLockFactory
+    and SimpleFSLockFactory.  This enables all 4 builtin LockFactory
+    implementations to be specified via the System property
+    org.apache.lucene.store.FSDirectoryLockFactoryClass.  (Mike McCandless)
+
+ 4. LUCENE-821: The new single-norm-file introduced by LUCENE-756
+    failed to reduce the number of open descriptors since it was still
+    opened once per field with norms. (yonik)
+
+ 5. LUCENE-823: Make sure internal file handles are closed when
+    hitting an exception (eg disk full) while flushing deletes in
+    IndexWriter's mergeSegments, and also during
+    IndexWriter.addIndexes.  (Mike McCandless)
+
+ 6. LUCENE-825: If directory is removed after
+    FSDirectory.getDirectory() but before IndexReader.open you now get
+    a FileNotFoundException like Lucene pre-2.1 (before this fix you
+    got an NPE).  (Mike McCandless)
+
+ 7. LUCENE-800: Removed backslash from the TERM_CHAR list in the queryparser, 
+    because the backslash is the escape character. Also changed the ESCAPED_CHAR
+    list to contain all possible characters, because every character that 
+    follows a backslash should be considered as escaped. (Michael Busch)
+
+ 8. LUCENE-372: QueryParser.parse() now ensures that the entire input string 
+    is consumed. Now a ParseException is thrown if a query contains too many
+    closing parentheses. (Andreas Neumann via Michael Busch)
+
+ 9. LUCENE-814: javacc build targets now fix line-end-style of generated files.
+    Now also deleting all javacc generated files before calling javacc.
+    (Steven Parkes, Doron Cohen)
+    
+10. LUCENE-829: close readers in contrib/benchmark. (Karl Wettin, Doron Cohen)
+
+11. LUCENE-828: Minor fix for Term's equal().
+    (Paul Cowan via Otis Gospodnetic)
+
+12. LUCENE-846: Fixed: if IndexWriter is opened with autoCommit=false,
+    and you call addIndexes, and hit an exception (eg disk full) then
+    when IndexWriter rolls back its internal state this could corrupt
+    the instance of IndexWriter (but, not the index itself) by
+    referencing already deleted segments.  This bug was only present
+    in 2.2 (trunk), ie was never released.  (Mike McCandless)
+    
+13. LUCENE-736: Sloppy phrase query with repeating terms matches wrong docs.
+    For example query "B C B"~2 matches the doc "A B C D E". (Doron Cohen)
+    
+14. LUCENE-789: Fixed: custom similarity is ignored when using MultiSearcher (problem reported 
+    by Alexey Lef). Now the similarity applied by MultiSearcer.setSimilarity(sim) is being used. 
+    Note that as before this fix, creating a multiSearcher from Searchers for whom custom similarity 
+    was set has no effect - it is masked by the similarity of the MultiSearcher. This is as 
+    designed, because MultiSearcher operates on Searchables (not Searchers). (Doron Cohen)
+
+15. LUCENE-880: Fixed DocumentWriter to close the TokenStreams after it
+    has written the postings. Then the resources associated with the 
+    TokenStreams can safely be released. (Michael Busch)
+
+16. LUCENE-883: consecutive calls to Spellchecker.indexDictionary()
+    won't insert terms twice anymore. (Daniel Naber)
+
+17. LUCENE-881: QueryParser.escape() now also escapes the characters
+    '|' and '&' which are part of the queryparser syntax. (Michael Busch)
+
+18. LUCENE-886: Spellchecker clean up: exceptions aren't printed to STDERR
+    anymore and ignored, but re-thrown. Some javadoc improvements.
+    (Daniel Naber)
+
+19. LUCENE-698: FilteredQuery now takes the query boost into account for 
+    scoring. (Michael Busch)
+
+20. LUCENE-763: Spellchecker: LuceneDictionary used to skip first word in 
+    enumeration. (Christian Mallwitz via Daniel Naber)
+    
+21. LUCENE-903: FilteredQuery explanation inaccuracy with boost.
+    Explanation tests now "deep" check the explanation details.
+    (Chris Hostetter, Doron Cohen)
+    
+22. LUCENE-912: DisjunctionMaxScorer first skipTo(target) call ignores the 
+    skip target param and ends up at the first match.
+    (Sudaakeran B. via Chris Hostetter & Doron Cohen)
+    
+23. LUCENE-913: Two consecutive score() calls return different 
+    scores for Boolean Queries. (Michael Busch, Doron Cohen)
+
+24. LUCENE-1013: Fix IndexWriter.setMaxMergeDocs to work "out of the
+    box", again, by moving set/getMaxMergeDocs up from
+    LogDocMergePolicy into LogMergePolicy.  This fixes the API
+    breakage (non backwards compatible change) caused by LUCENE-994.
+    (Yonik Seeley via Mike McCandless)
+
+New features
+
+ 1. LUCENE-759: Added two n-gram-producing TokenFilters.
+    (Otis Gospodnetic)
+
+ 2. LUCENE-822: Added FieldSelector capabilities to Searchable for use with
+    RemoteSearcher, and other Searchable implementations. (Mark Miller, Grant Ingersoll)
+
+ 3. LUCENE-755: Added the ability to store arbitrary binary metadata in the posting list.
+    These metadata are called Payloads. For every position of a Token one Payload in the form
+    of a variable length byte array can be stored in the prox file.
+    Remark: The APIs introduced with this feature are in experimental state and thus
+            contain appropriate warnings in the javadocs.
+    (Michael Busch)
+
+ 4. LUCENE-834: Added BoostingTermQuery which can boost scores based on the
+    values of a payload (see #3 above.) (Grant Ingersoll)
+
+ 5. LUCENE-834: Similarity has a new method for scoring payloads called
+    scorePayloads that can be overridden to take advantage of payload
+    storage (see #3 above)
+
+ 6. LUCENE-834: Added isPayloadAvailable() onto TermPositions interface and
+    implemented it in the appropriate places (Grant Ingersoll)
+
+ 7. LUCENE-853: Added RemoteCachingWrapperFilter to enable caching of Filters
+    on the remote side of the RMI connection.
+    (Matt Ericson via Otis Gospodnetic)
+
+ 8. LUCENE-446: Added Solr's search.function for scores based on field 
+    values, plus CustomScoreQuery for simple score (post) customization.
+    (Yonik Seeley, Doron Cohen)
+
+ 9. LUCENE-1058: Added new TeeTokenFilter (like the UNIX 'tee' command) and SinkTokenizer which can be used to share tokens between two or more
+    Fields such that the other Fields do not have to go through the whole Analysis process over again.  For instance, if you have two
+    Fields that share all the same analysis steps except one lowercases tokens and the other does not, you can coordinate the operations
+    between the two using the TeeTokenFilter and the SinkTokenizer.  See TeeSinkTokenTest.java for examples.
+    (Grant Ingersoll, Michael Busch, Yonik Seeley)
+ 
+Optimizations
+
+ 1. LUCENE-761: The proxStream is now cloned lazily in SegmentTermPositions
+    when nextPosition() is called for the first time. This allows using instances
+    of SegmentTermPositions instead of SegmentTermDocs without additional costs.
+    (Michael Busch)
+
+ 2. LUCENE-431: RAMInputStream and RAMOutputStream extend IndexInput and
+    IndexOutput directly now. This avoids further buffering and thus avoids 
+    unnecessary array copies. (Michael Busch)
+
+ 3. LUCENE-730: Updated BooleanScorer2 to make use of BooleanScorer in some
+    cases and possibly improve scoring performance.  Documents can now be
+    delivered out-of-order as they are scored (e.g. to HitCollector).
+    N.B. A bit of code had to be disabled in QueryUtils in order for
+    TestBoolean2 test to keep passing.
+    (Paul Elschot via Otis Gospodnetic)
+
+ 4. LUCENE-882: Spellchecker doesn't store the ngrams anymore but only indexes
+    them to keep the spell index small. (Daniel Naber)
+
+ 5. LUCENE-430: Delay allocation of the buffer after a clone of BufferedIndexInput.
+    Together with LUCENE-888 this will allow to adjust the buffer size
+    dynamically. (Paul Elschot, Michael Busch)
+ 
+ 6. LUCENE-888: Increase buffer sizes inside CompoundFileWriter and
+    BufferedIndexOutput.  Also increase buffer size in
+    BufferedIndexInput, but only when used during merging.  Together,
+    these increases yield 10-18% overall performance gain vs the
+    previous 1K defaults.  (Mike McCandless)
+
+ 7. LUCENE-866: Adds multi-level skip lists to the posting lists. This speeds 
+    up most queries that use skipTo(), especially on big indexes with large posting 
+    lists. For average AND queries the speedup is about 20%, for queries that 
+    contain very frequent and very unique terms the speedup can be over 80%.
+    (Michael Busch)
+
+Documentation
+
+ 1. LUCENE 791 && INFRA-1173: Infrastructure moved the Wiki to
+    http://wiki.apache.org/lucene-java/   Updated the links in the docs and
+    wherever else I found references.  (Grant Ingersoll, Joe Schaefer)
+
+ 2. LUCENE-807: Fixed the javadoc for ScoreDocComparator.compare() to be 
+    consistent with java.util.Comparator.compare(): Any integer is allowed to 
+    be returned instead of only -1/0/1.
+    (Paul Cowan via Michael Busch)
+ 
+ 3. LUCENE-875: Solved javadoc warnings & errors under jdk1.4. 
+    Solved javadoc errors under jdk5 (jars in path for gdata).
+    Made "javadocs" target depend on "build-contrib" for first downloading
+    contrib jars configured for dynamic downloaded. (Note: when running
+    behind firewall, a firewall prompt might pop up) (Doron Cohen)
+
+ 4. LUCENE-740: Added SNOWBALL-LICENSE.txt to the snowball package and a
+    remark about the license to NOTICE.TXT. (Steven Parkes via Michael Busch)
+
+ 5. LUCENE-925: Added analysis package javadocs. (Grant Ingersoll and Doron Cohen)
+
+ 6. LUCENE-926: Added document package javadocs. (Grant Ingersoll)
+
+Build
+
+ 1. LUCENE-802: Added LICENSE.TXT and NOTICE.TXT to Lucene jars.
+    (Steven Parkes via Michael Busch)
+
+ 2. LUCENE-885: "ant test" now includes all contrib tests.  The new
+    "ant test-core" target can be used to run only the Core (non
+    contrib) tests. 
+    (Chris Hostetter)
+    
+ 3. LUCENE-900: "ant test" now enables Java assertions (in Lucene packages).
+    (Doron Cohen)
+
+ 4. LUCENE-894: Add custom build file for binary distributions that includes
+    targets to build the demos. (Chris Hostetter, Michael Busch)
+
+ 5. LUCENE-904: The "package" targets in build.xml now also generate .md5
+    checksum files. (Chris Hostetter, Michael Busch)
+
+ 6. LUCENE-907: Include LICENSE.TXT and NOTICE.TXT in the META-INF dirs of
+    demo war, demo jar, and the contrib jars. (Michael Busch)
+    
+ 7. LUCENE-909: Demo targets for running the demo. (Doron Cohen)
+
+ 8. LUCENE-908: Improves content of MANIFEST file and makes it customizable
+    for the contribs. Adds SNOWBALL-LICENSE.txt to META-INF of the snowball
+    jar and makes sure that the lucli jar contains LICENSE.txt and NOTICE.txt.
+    (Chris Hostetter, Michael Busch)
+
+ 9. LUCENE-930: Various contrib building improvements to ensure contrib
+    dependencies are met, and test compilation errors fail the build.
+    (Steven Parkes, Chris Hostetter)
+
+10. LUCENE-622: Add ant target and pom.xml files for building maven artifacts 
+    of the Lucene core and the contrib modules. 
+    (Sami Siren, Karl Wettin, Michael Busch)
+
+======================= Release 2.1.0 2007-02-14 =======================
+
+Changes in runtime behavior
+
+ 1. 's' and 't' have been removed from the list of default stopwords
+    in StopAnalyzer (also used in by StandardAnalyzer). Having e.g. 's'
+    as a stopword meant that 's-class' led to the same results as 'class'.
+    Note that this problem still exists for 'a', e.g. in 'a-class' as
+    'a' continues to be a stopword.
+    (Daniel Naber)
+
+ 2. LUCENE-478: Updated the list of Unicode code point ranges for CJK
+    (now split into CJ and K) in StandardAnalyzer.  (John Wang and
+    Steven Rowe via Otis Gospodnetic)
+
+ 3. Modified some CJK Unicode code point ranges in StandardTokenizer.jj,
+    and added a few more of them to increase CJK character coverage.
+    Also documented some of the ranges.
+    (Otis Gospodnetic)
+
+ 4. LUCENE-489: Add support for leading wildcard characters (*, ?) to
+    QueryParser.  Default is to disallow them, as before.
+    (Steven Parkes via Otis Gospodnetic)
+
+ 5. LUCENE-703: QueryParser changed to default to use of ConstantScoreRangeQuery
+    for range queries. Added useOldRangeQuery property to QueryParser to allow
+    selection of old RangeQuery class if required.
+    (Mark Harwood)
+
+ 6. LUCENE-543: WildcardQuery now performs a TermQuery if the provided term
+    does not contain a wildcard character (? or *), when previously a
+    StringIndexOutOfBoundsException was thrown.
+    (Michael Busch via Erik Hatcher)
+
+ 7. LUCENE-726: Removed the use of deprecated doc.fields() method and
+    Enumeration.
+    (Michael Busch via Otis Gospodnetic)
+
+ 8. LUCENE-436: Removed finalize() in TermInfosReader and SegmentReader,
+    and added a call to enumerators.remove() in TermInfosReader.close().
+    The finalize() overrides were added to help with a pre-1.4.2 JVM bug
+    that has since been fixed, plus we no longer support pre-1.4.2 JVMs.
+    (Otis Gospodnetic)
+
+ 9. LUCENE-771: The default location of the write lock is now the
+    index directory, and is named simply "write.lock" (without a big
+    digest prefix).  The system properties "org.apache.lucene.lockDir"
+    nor "java.io.tmpdir" are no longer used as the global directory
+    for storing lock files, and the LOCK_DIR field of FSDirectory is
+    now deprecated.  (Mike McCandless)
+
+New features
+
+ 1. LUCENE-503: New ThaiAnalyzer and ThaiWordFilter in contrib/analyzers
+    (Samphan Raruenrom via Chris Hostetter)
+
+ 2. LUCENE-545: New FieldSelector API and associated changes to
+    IndexReader and implementations.  New Fieldable interface for use
+    with the lazy field loading mechanism.  (Grant Ingersoll and Chuck
+    Williams via Grant Ingersoll)
+
+ 3. LUCENE-676: Move Solr's PrefixFilter to Lucene core. (Yura
+    Smolsky, Yonik Seeley)
+
+ 4. LUCENE-678: Added NativeFSLockFactory, which implements locking
+    using OS native locking (via java.nio.*).  (Michael McCandless via
+    Yonik Seeley)
+
+ 5. LUCENE-544: Added the ability to specify different boosts for
+    different fields when using MultiFieldQueryParser (Matt Ericson
+    via Otis Gospodnetic)
+
+ 6. LUCENE-528: New IndexWriter.addIndexesNoOptimize() that doesn't
+    optimize the index when adding new segments, only performing
+    merges as needed.  (Ning Li via Yonik Seeley)
+
+ 7. LUCENE-573: QueryParser now allows backslash escaping in
+    quoted terms and phrases. (Michael Busch via Yonik Seeley)
+
+ 8. LUCENE-716: QueryParser now allows specification of Unicode
+    characters in terms via a unicode escape of the form \uXXXX
+    (Michael Busch via Yonik Seeley)
+
+ 9. LUCENE-709: Added RAMDirectory.sizeInBytes(), IndexWriter.ramSizeInBytes()
+    and IndexWriter.flushRamSegments(), allowing applications to
+    control the amount of memory used to buffer documents.
+    (Chuck Williams via Yonik Seeley)
+
+10. LUCENE-723: QueryParser now parses *:* as MatchAllDocsQuery
+    (Yonik Seeley)
+
+11. LUCENE-741: Command-line utility for modifying or removing norms
+    on fields in an existing index.  This is mostly based on LUCENE-496
+    and lives in contrib/miscellaneous.
+    (Chris Hostetter, Otis Gospodnetic)
+
+12. LUCENE-759: Added NGramTokenizer and EdgeNGramTokenizer classes and
+    their passing unit tests.
+    (Otis Gospodnetic)
+
+13. LUCENE-565: Added methods to IndexWriter to more efficiently
+    handle updating documents (the "delete then add" use case).  This
+    is intended to be an eventual replacement for the existing
+    IndexModifier.  Added IndexWriter.flush() (renamed from
+    flushRamSegments()) to flush all pending updates (held in RAM), to
+    the Directory.  (Ning Li via Mike McCandless)
+
+14. LUCENE-762: Added in SIZE and SIZE_AND_BREAK FieldSelectorResult options
+    which allow one to retrieve the size of a field without retrieving the
+    actual field. (Chuck Williams via Grant Ingersoll)
+
+15. LUCENE-799: Properly handle lazy, compressed fields.
+    (Mike Klaas via Grant Ingersoll)
+
+API Changes
+
+ 1. LUCENE-438: Remove "final" from Token, implement Cloneable, allow
+    changing of termText via setTermText().  (Yonik Seeley)
+
+ 2. org.apache.lucene.analysis.nl.WordlistLoader has been deprecated
+    and is supposed to be replaced with the WordlistLoader class in
+    package org.apache.lucene.analysis (Daniel Naber)
+
+ 3. LUCENE-609: Revert return type of Document.getField(s) to Field
+    for backward compatibility, added new Document.getFieldable(s)
+    for access to new lazy loaded fields. (Yonik Seeley)
+
+ 4. LUCENE-608: Document.fields() has been deprecated and a new method
+    Document.getFields() has been added that returns a List instead of
+    an Enumeration (Daniel Naber)
+
+ 5. LUCENE-605: New Explanation.isMatch() method and new ComplexExplanation
+    subclass allows explain methods to produce Explanations which model
+    "matching" independent of having a positive value.
+    (Chris Hostetter)
+
+ 6. LUCENE-621: New static methods IndexWriter.setDefaultWriteLockTimeout
+    and IndexWriter.setDefaultCommitLockTimeout for overriding default
+    timeout values for all future instances of IndexWriter (as well
+    as for any other classes that may reference the static values,
+    ie: IndexReader).
+    (Michael McCandless via Chris Hostetter)
+
+ 7. LUCENE-638: FSDirectory.list() now only returns the directory's
+    Lucene-related files. Thanks to this change one can now construct
+    a RAMDirectory from a file system directory that contains files
+    not related to Lucene.
+    (Simon Willnauer via Daniel Naber)
+
+ 8. LUCENE-635: Decoupling locking implementation from Directory
+    implementation.  Added set/getLockFactory to Directory and moved
+    all locking code into subclasses of abstract class LockFactory.
+    FSDirectory and RAMDirectory still default to their prior locking
+    implementations, but now you can mix & match, for example using
+    SingleInstanceLockFactory (ie, in memory locking) locking with an
+    FSDirectory.  Note that now you must call setDisableLocks before
+    the instantiation a FSDirectory if you wish to disable locking
+    for that Directory.
+    (Michael McCandless, Jeff Patterson via Yonik Seeley)
+
+ 9. LUCENE-657: Made FuzzyQuery non-final and inner ScoreTerm protected.
+    (Steven Parkes via Otis Gospodnetic)
+
+10. LUCENE-701: Lockless commits: a commit lock is no longer required
+    when a writer commits and a reader opens the index.  This includes
+    a change to the index file format (see docs/fileformats.html for
+    details).  It also removes all APIs associated with the commit
+    lock & its timeout.  Readers are now truly read-only and do not
+    block one another on startup.  This is the first step to getting
+    Lucene to work correctly over NFS (second step is
+    LUCENE-710). (Mike McCandless)
+
+11. LUCENE-722: DEFAULT_MIN_DOC_FREQ was misspelled DEFALT_MIN_DOC_FREQ
+    in Similarity's MoreLikeThis class. The misspelling has been
+    replaced by the correct spelling.
+    (Andi Vajda via Daniel Naber)
+
+12. LUCENE-738: Reduce the size of the file that keeps track of which
+    documents are deleted when the number of deleted documents is
+    small.  This changes the index file format and cannot be
+    read by previous versions of Lucene.  (Doron Cohen via Yonik Seeley)
+
+13. LUCENE-756: Maintain all norms in a single .nrm file to reduce the
+    number of open files and file descriptors for the non-compound index
+    format.  This changes the index file format, but maintains the
+    ability to read and update older indices. The first segment merge
+    on an older format index will create a single .nrm file for the new
+    segment.  (Doron Cohen via Yonik Seeley)
+
+14. LUCENE-732: DateTools support has been added to QueryParser, with
+    setters for both the default Resolution, and per-field Resolution.
+    For backwards compatibility, DateField is still used if no Resolutions
+    are specified. (Michael Busch via Chris Hostetter)
+
+15. Added isOptimized() method to IndexReader.
+    (Otis Gospodnetic)
+
+16. LUCENE-773: Deprecate the FSDirectory.getDirectory(*) methods that
+    take a boolean "create" argument.  Instead you should use
+    IndexWriter's "create" argument to create a new index.
+    (Mike McCandless)
+
+17. LUCENE-780: Add a static Directory.copy() method to copy files
+    from one Directory to another.  (Jiri Kuhn via Mike McCandless)
+
+18. LUCENE-773: Added Directory.clearLock(String name) to forcefully
+    remove an old lock.  The default implementation is to ask the
+    lockFactory (if non null) to clear the lock.  (Mike McCandless)
+
+19. LUCENE-795: Directory.renameFile() has been deprecated as it is
+    not used anymore inside Lucene.  (Daniel Naber)
+
+Bug fixes
+
+ 1. Fixed the web application demo (built with "ant war-demo") which
+    didn't work because it used a QueryParser method that had
+    been removed (Daniel Naber)
+
+ 2. LUCENE-583: ISOLatin1AccentFilter fails to preserve positionIncrement
+    (Yonik Seeley)
+
+ 3. LUCENE-575: SpellChecker min score is incorrectly changed by suggestSimilar
+    (Karl Wettin via Yonik Seeley)
+
+ 4. LUCENE-587: Explanation.toHtml was producing malformed HTML
+    (Chris Hostetter)
+
+ 5. Fix to allow MatchAllDocsQuery to be used with RemoteSearcher (Yonik Seeley)
+
+ 6. LUCENE-601: RAMDirectory and RAMFile made Serializable
+    (Karl Wettin via Otis Gospodnetic)
+
+ 7. LUCENE-557: Fixes to BooleanQuery and FilteredQuery so that the score
+    Explanations match up with the real scores.
+    (Chris Hostetter)
+
+ 8. LUCENE-607: ParallelReader's TermEnum fails to advance properly to
+    new fields (Chuck Williams, Christian Kohlschuetter via Yonik Seeley)
+
+ 9. LUCENE-610,LUCENE-611: Simple syntax changes to allow compilation with ecj:
+    disambiguate inner class scorer's use of doc() in BooleanScorer2,
+    other test code changes.  (DM Smith via Yonik Seeley)
+
+10. LUCENE-451: All core query types now use ComplexExplanations so that
+    boosts of zero don't confuse the BooleanWeight explain method.
+    (Chris Hostetter)
+
+11. LUCENE-593: Fixed LuceneDictionary's inner Iterator
+    (KÃ¥re Fiedler Christiansen via Otis Gospodnetic)
+
+12. LUCENE-641: fixed an off-by-one bug with IndexWriter.setMaxFieldLength()
+    (Daniel Naber)
+
+13. LUCENE-659: Make PerFieldAnalyzerWrapper delegate getPositionIncrementGap()
+    to the correct analyzer for the field. (Chuck Williams via Yonik Seeley)
+
+14. LUCENE-650: Fixed NPE in Locale specific String Sort when Document
+    has no value.
+    (Oliver Hutchison via Chris Hostetter)
+
+15. LUCENE-683: Fixed data corruption when reading lazy loaded fields.
+    (Yonik Seeley)
+
+16. LUCENE-678: Fixed bug in NativeFSLockFactory which caused the same
+    lock to be shared between different directories.
+    (Michael McCandless via Yonik Seeley)
+
+17. LUCENE-690: Fixed thread unsafe use of IndexInput by lazy loaded fields.
+    (Yonik Seeley)
+
+18. LUCENE-696: Fix bug when scorer for DisjunctionMaxQuery has skipTo()
+    called on it before next().  (Yonik Seeley)
+
+19. LUCENE-569: Fixed SpanNearQuery bug, for 'inOrder' queries it would fail
+    to recognize ordered spans if they overlapped with unordered spans.
+    (Paul Elschot via Chris Hostetter)
+
+20. LUCENE-706: Updated fileformats.xml|html concerning the docdelta value
+    in the frequency file. (Johan Stuyts, Doron Cohen via Grant Ingersoll)
+
+21. LUCENE-715: Fixed private constructor in IndexWriter.java to
+    properly release the acquired write lock if there is an
+    IOException after acquiring the write lock but before finishing
+    instantiation. (Matthew Bogosian via Mike McCandless)
+
+22. LUCENE-651: Multiple different threads requesting the same
+    FieldCache entry (often for Sorting by a field) at the same
+    time caused multiple generations of that entry, which was
+    detrimental to performance and memory use.
+    (Oliver Hutchison via Otis Gospodnetic)
+
+23. LUCENE-717: Fixed build.xml not to fail when there is no lib dir.
+    (Doron Cohen via Otis Gospodnetic)
+
+24. LUCENE-728: Removed duplicate/old MoreLikeThis and SimilarityQueries
+    classes from contrib/similarity, as their new home is under
+    contrib/queries.
+    (Otis Gospodnetic)
+
+25. LUCENE-669: Do not double-close the RandomAccessFile in
+    FSIndexInput/Output during finalize().  Besides sending an
+    IOException up to the GC, this may also be the cause intermittent
+    "The handle is invalid" IOExceptions on Windows when trying to
+    close readers or writers. (Michael Busch via Mike McCandless)
+
+26. LUCENE-702: Fix IndexWriter.addIndexes(*) to not corrupt the index
+    on any exceptions (eg disk full).  The semantics of these methods
+    is now transactional: either all indices are merged or none are.
+    Also fixed IndexWriter.mergeSegments (called outside of
+    addIndexes(*) by addDocument, optimize, flushRamSegments) and
+    IndexReader.commit() (called by close) to clean up and keep the
+    instance state consistent to what's actually in the index (Mike
+    McCandless).
+
+27. LUCENE-129: Change finalizers to do "try {...} finally
+    {super.finalize();}" to make sure we don't miss finalizers in
+    classes above us. (Esmond Pitt via Mike McCandless)
+
+28. LUCENE-754: Fix a problem introduced by LUCENE-651, causing
+    IndexReaders to hang around forever, in addition to not
+    fixing the original FieldCache performance problem.
+    (Chris Hostetter, Yonik Seeley)
+
+29. LUCENE-140: Fix IndexReader.deleteDocument(int docNum) to
+    correctly raise ArrayIndexOutOfBoundsException when docNum is too
+    large.  Previously, if docNum was only slightly too large (within
+    the same multiple of 8, ie, up to 7 ints beyond maxDoc), no
+    exception would be raised and instead the index would become
+    silently corrupted.  The corruption then only appears much later,
+    in mergeSegments, when the corrupted segment is merged with
+    segment(s) after it. (Mike McCandless)
+
+30. LUCENE-768: Fix case where an Exception during deleteDocument,
+    undeleteAll or setNorm in IndexReader could leave the reader in a
+    state where close() fails to release the write lock.
+    (Mike McCandless)
+
+31. Remove "tvp" from known index file extensions because it is
+    never used. (Nicolas Lalevée via Bernhard Messer)
+    
+32. LUCENE-767: Change how SegmentReader.maxDoc() is computed to not
+    rely on file length check and instead use the SegmentInfo's
+    docCount that's already stored explicitly in the index.  This is a
+    defensive bug fix (ie, there is no known problem seen "in real
+    life" due to this, just a possible future problem).  (Chuck
+    Williams via Mike McCandless)
+
+Optimizations
+
+  1. LUCENE-586: TermDocs.skipTo() is now more efficient for
+     multi-segment indexes.  This will improve the performance of many
+     types of queries against a non-optimized index. (Andrew Hudson
+     via Yonik Seeley)
+
+  2. LUCENE-623: RAMDirectory.close now nulls out its reference to all
+     internal "files", allowing them to be GCed even if references to the
+     RAMDirectory itself still exist. (Nadav Har'El via Chris Hostetter)
+
+  3. LUCENE-629: Compressed fields are no longer uncompressed and
+     recompressed during segment merges (e.g. during indexing or
+     optimizing), thus improving performance . (Michael Busch via Otis
+     Gospodnetic)
+
+  4. LUCENE-388: Improve indexing performance when maxBufferedDocs is
+     large by keeping a count of buffered documents rather than
+     counting after each document addition.  (Doron Cohen, Paul Smith,
+     Yonik Seeley)
+
+  5. Modified TermScorer.explain to use TermDocs.skipTo() instead of
+     looping through docs. (Grant Ingersoll)
+
+  6. LUCENE-672: New indexing segment merge policy flushes all
+     buffered docs to their own segment and delays a merge until
+     mergeFactor segments of a certain level have been accumulated.
+     This increases indexing performance in the presence of deleted
+     docs or partially full segments as well as enabling future
+     optimizations.
+
+     NOTE: this also fixes an "under-merging" bug whereby it is
+     possible to get far too many segments in your index (which will
+     drastically slow down search, risks exhausting file descriptor
+     limit, etc.).  This can happen when the number of buffered docs
+     at close, plus the number of docs in the last non-ram segment is
+     greater than mergeFactor. (Ning Li, Yonik Seeley)
+
+  7. Lazy loaded fields unnecessarily retained an extra copy of loaded
+     String data.  (Yonik Seeley)
+
+  8. LUCENE-443: ConjunctionScorer performance increase.  Speed up
+     any BooleanQuery with more than one mandatory clause.
+     (Abdul Chaudhry, Paul Elschot via Yonik Seeley)
+
+  9. LUCENE-365: DisjunctionSumScorer performance increase of
+     ~30%. Speeds up queries with optional clauses. (Paul Elschot via
+     Yonik Seeley)
+
+ 10. LUCENE-695: Optimized BufferedIndexInput.readBytes() for medium
+     size buffers, which will speed up merging and retrieving binary
+     and compressed fields.  (Nadav Har'El via Yonik Seeley)
+
+ 11. LUCENE-687: Lazy skipping on proximity file speeds up most
+     queries involving term positions, including phrase queries.
+     (Michael Busch via Yonik Seeley)
+
+ 12. LUCENE-714: Replaced 2 cases of manual for-loop array copying
+     with calls to System.arraycopy instead, in DocumentWriter.java.
+     (Nicolas Lalevee via Mike McCandless)
+
+ 13. LUCENE-729: Non-recursive skipTo and next implementation of
+     TermDocs for a MultiReader.  The old implementation could
+     recurse up to the number of segments in the index. (Yonik Seeley)
+
+ 14. LUCENE-739: Improve segment merging performance by reusing
+     the norm array across different fields and doing bulk writes
+     of norms of segments with no deleted docs.
+    (Michael Busch via Yonik Seeley)
+
+ 15. LUCENE-745: Add BooleanQuery.clauses(), allowing direct access
+     to the List of clauses and replaced the internal synchronized Vector
+     with an unsynchronized List. (Yonik Seeley)
+
+ 16. LUCENE-750: Remove finalizers from FSIndexOutput and move the
+     FSIndexInput finalizer to the actual file so all clones don't
+     register a new finalizer. (Yonik Seeley)
+
+Test Cases
+
+  1. Added TestTermScorer.java (Grant Ingersoll)
+
+  2. Added TestWindowsMMap.java (Benson Margulies via Mike McCandless)
+
+  3. LUCENE-744 Append the user.name property onto the temporary directory 
+     that is created so it doesn't interfere with other users. (Grant Ingersoll)
+
+Documentation
+
+  1. Added style sheet to xdocs named lucene.css and included in the
+     Anakia VSL descriptor.  (Grant Ingersoll)
+
+  2. Added scoring.xml document into xdocs.  Updated Similarity.java
+     scoring formula.(Grant Ingersoll and Steve Rowe.  Updates from:
+     Michael McCandless, Doron Cohen, Chris Hostetter, Doug Cutting).
+     Issue 664.
+
+  3. Added javadocs for FieldSelectorResult.java. (Grant Ingersoll)
+
+  4. Moved xdocs directory to src/site/src/documentation/content/xdocs per
+     Issue 707.  Site now builds using Forrest, just like the other Lucene
+     siblings.  See http://wiki.apache.org/jakarta-lucene/HowToUpdateTheWebsite
+     for info on updating the website. (Grant Ingersoll with help from Steve Rowe,
+     Chris Hostetter, Doug Cutting, Otis Gospodnetic, Yonik Seeley)
+
+  5. Added in Developer and System Requirements sections under Resources (Grant Ingersoll)
+
+  6. LUCENE-713 Updated the Term Vector section of File Formats to include
+     documentation on how Offset and Position info are stored in the TVF file.
+     (Grant Ingersoll, Samir Abdou)
+
+  7. Added in link to Clover Test Code Coverage Reports under the Develop
+     section in Resources (Grant Ingersoll)
+
+  8. LUCENE-748: Added details for semantics of IndexWriter.close on
+     hitting an Exception.  (Jed Wesley-Smith via Mike McCandless)
+
+  9. Added some text about what is contained in releases.
+     (Eric Haszlakiewicz via Grant Ingersoll)
+
+  10. LUCENE-758: Fix javadoc to clarify that RAMDirectory(Directory)
+      makes a full copy of the starting Directory.  (Mike McCandless)
+
+  11. LUCENE-764: Fix javadocs to detail temporary space requirements
+      for IndexWriter's optimize(), addIndexes(*) and addDocument(...)
+      methods.  (Mike McCandless)
+
+Build
+
+  1. Added in clover test code coverage per http://issues.apache.org/jira/browse/LUCENE-721
+     To enable clover code coverage, you must have clover.jar in the ANT
+     classpath and specify -Drun.clover=true on the command line.
+     (Michael Busch and Grant Ingersoll)
+
+  2. Added a sysproperty in common-build.xml per Lucene 752 to map java.io.tmpdir to
+     ${build.dir}/test just like the tempDir sysproperty.
+
+  3. LUCENE-757 Added new target named init-dist that does setup for
+     distribution of both binary and source distributions.  Called by package 
+     and package-*-src
+
+======================= Release 2.0.0 2006-05-26 =======================
+
+API Changes
+
+ 1. All deprecated methods and fields have been removed, except
+    DateField, which will still be supported for some time
+    so Lucene can read its date fields from old indexes
+    (Yonik Seeley & Grant Ingersoll)
+
+ 2. DisjunctionSumScorer is no longer public.
+    (Paul Elschot via Otis Gospodnetic)
+
+ 3. Creating a Field with both an empty name and an empty value
+    now throws an IllegalArgumentException
+    (Daniel Naber)
+
+ 4. LUCENE-301: Added new IndexWriter({String,File,Directory},
+    Analyzer) constructors that do not take a boolean "create"
+    argument.  These new constructors will create a new index if
+    necessary, else append to the existing one.  (Dan Armbrust via
+    Mike McCandless)
+
+New features
+
+ 1. LUCENE-496: Command line tool for modifying the field norms of an
+    existing index; added to contrib/miscellaneous.  (Chris Hostetter)
+
+ 2. LUCENE-577: SweetSpotSimilarity added to contrib/miscellaneous.
+    (Chris Hostetter)
+    
+Bug fixes
+
+ 1. LUCENE-330: Fix issue of FilteredQuery not working properly within
+    BooleanQuery.  (Paul Elschot via Erik Hatcher)
+
+ 2. LUCENE-515: Make ConstantScoreRangeQuery and ConstantScoreQuery work
+    with RemoteSearchable.  (Philippe Laflamme via Yonik Seeley)
+
+ 3. Added methods to get/set writeLockTimeout and commitLockTimeout in
+    IndexWriter. These could be set in Lucene 1.4 using a system property.
+    This feature had been removed without adding the corresponding
+    getter/setter methods.  (Daniel Naber)
+
+ 4. LUCENE-413: Fixed ArrayIndexOutOfBoundsException exceptions
+    when using SpanQueries. (Paul Elschot via Yonik Seeley)
+
+ 5. Implemented FilterIndexReader.getVersion() and isCurrent()
+    (Yonik Seeley)
+
+ 6. LUCENE-540: Fixed a bug with IndexWriter.addIndexes(Directory[])
+    that sometimes caused the index order of documents to change.
+    (Yonik Seeley)
+
+ 7. LUCENE-526: Fixed a bug in FieldSortedHitQueue that caused
+    subsequent String sorts with different locales to sort identically.
+    (Paul Cowan via Yonik Seeley)
+
+ 8. LUCENE-541: Add missing extractTerms() to DisjunctionMaxQuery
+    (Stefan Will via Yonik Seeley)
+
+ 9. LUCENE-514: Added getTermArrays() and extractTerms() to
+    MultiPhraseQuery (Eric Jain & Yonik Seeley)
+
+10. LUCENE-512: Fixed ClassCastException in ParallelReader.getTermFreqVectors
+    (frederic via Yonik)
+
+11. LUCENE-352: Fixed bug in SpanNotQuery that manifested as
+    NullPointerException when "exclude" query was not a SpanTermQuery.
+    (Chris Hostetter)
+
+12. LUCENE-572: Fixed bug in SpanNotQuery hashCode, was ignoring exclude clause
+    (Chris Hostetter)
+
+13. LUCENE-561: Fixed some ParallelReader bugs. NullPointerException if the reader
+    didn't know about the field yet, reader didn't keep track if it had deletions,
+    and deleteDocument calls could circumvent synchronization on the subreaders.
+    (Chuck Williams via Yonik Seeley)
+
+14. LUCENE-556: Added empty extractTerms() implementation to MatchAllDocsQuery and
+    ConstantScoreQuery in order to allow their use with a MultiSearcher.
+    (Yonik Seeley)
+
+15. LUCENE-546: Removed 2GB file size limitations for RAMDirectory.
+    (Peter Royal, Michael Chan, Yonik Seeley)
+
+16. LUCENE-485: Don't hold commit lock while removing obsolete index
+    files.  (Luc Vanlerberghe via cutting)
+
+
+1.9.1
+
+Bug fixes
+
+ 1. LUCENE-511: Fix a bug in the BufferedIndexOutput optimization
+    introduced in 1.9-final.  (Shay Banon & Steven Tamm via cutting)
+
+1.9 final
+
+Note that this release is mostly but not 100% source compatible with
+the previous release of Lucene (1.4.3). In other words, you should
+make sure your application compiles with this version of Lucene before
+you replace the old Lucene JAR with the new one.  Many methods have
+been deprecated in anticipation of release 2.0, so deprecation
+warnings are to be expected when upgrading from 1.4.3 to 1.9.
+
+Bug fixes
+ 
+ 1. The fix that made IndexWriter.setMaxBufferedDocs(1) work had negative 
+    effects on indexing performance and has thus been reverted. The 
+    argument for setMaxBufferedDocs(int) must now at least be 2, otherwise
+    an exception is thrown. (Daniel Naber)
+ 
+Optimizations
+     
+ 1. Optimized BufferedIndexOutput.writeBytes() to use
+    System.arraycopy() in more cases, rather than copying byte-by-byte.
+    (Lukas Zapletal via Cutting)
+
+1.9 RC1
+
+Requirements
+
+ 1. To compile and use Lucene you now need Java 1.4 or later.
+
+Changes in runtime behavior
+
+ 1. FuzzyQuery can no longer throw a TooManyClauses exception. If a
+    FuzzyQuery expands to more than BooleanQuery.maxClauseCount
+    terms only the BooleanQuery.maxClauseCount most similar terms
+    go into the rewritten query and thus the exception is avoided.
+    (Christoph)
+
+ 2. Changed system property from "org.apache.lucene.lockdir" to
+    "org.apache.lucene.lockDir", so that its casing follows the existing
+    pattern used in other Lucene system properties. (Bernhard)
+
+ 3. The terms of RangeQueries and FuzzyQueries are now converted to
+    lowercase by default (as it has been the case for PrefixQueries
+    and WildcardQueries before). Use setLowercaseExpandedTerms(false)
+    to disable that behavior but note that this also affects
+    PrefixQueries and WildcardQueries. (Daniel Naber)
+
+ 4. Document frequency that is computed when MultiSearcher is used is now
+    computed correctly and "globally" across subsearchers and indices, while
+    before it used to be computed locally to each index, which caused
+    ranking across multiple indices not to be equivalent.
+    (Chuck Williams, Wolf Siberski via Otis, bug #31841)
+
+ 5. When opening an IndexWriter with create=true, Lucene now only deletes
+    its own files from the index directory (looking at the file name suffixes
+    to decide if a file belongs to Lucene). The old behavior was to delete
+    all files. (Daniel Naber and Bernhard Messer, bug #34695)
+
+ 6. The version of an IndexReader, as returned by getCurrentVersion()
+    and getVersion() doesn't start at 0 anymore for new indexes. Instead, it
+    is now initialized by the system time in milliseconds.
+    (Bernhard Messer via Daniel Naber)
+
+ 7. Several default values cannot be set via system properties anymore, as
+    this has been considered inappropriate for a library like Lucene. For
+    most properties there are set/get methods available in IndexWriter which
+    you should use instead. This affects the following properties:
+    See IndexWriter for getter/setter methods:
+      org.apache.lucene.writeLockTimeout, org.apache.lucene.commitLockTimeout,
+      org.apache.lucene.minMergeDocs, org.apache.lucene.maxMergeDocs,
+      org.apache.lucene.maxFieldLength, org.apache.lucene.termIndexInterval,
+      org.apache.lucene.mergeFactor,
+    See BooleanQuery for getter/setter methods:
+      org.apache.lucene.maxClauseCount
+    See FSDirectory for getter/setter methods:
+      disableLuceneLocks
+    (Daniel Naber)
+
+ 8. Fixed FieldCacheImpl to use user-provided IntParser and FloatParser,
+    instead of using Integer and Float classes for parsing.
+    (Yonik Seeley via Otis Gospodnetic)
+
+ 9. Expert level search routines returning TopDocs and TopFieldDocs
+    no longer normalize scores.  This also fixes bugs related to
+    MultiSearchers and score sorting/normalization.
+    (Luc Vanlerberghe via Yonik Seeley, LUCENE-469)
+
+New features
+
+ 1. Added support for stored compressed fields (patch #31149)
+    (Bernhard Messer via Christoph)
+
+ 2. Added support for binary stored fields (patch #29370)
+    (Drew Farris and Bernhard Messer via Christoph)
+
+ 3. Added support for position and offset information in term vectors
+    (patch #18927). (Grant Ingersoll & Christoph)
+
+ 4. A new class DateTools has been added. It allows you to format dates
+    in a readable format adequate for indexing. Unlike the existing
+    DateField class DateTools can cope with dates before 1970 and it
+    forces you to specify the desired date resolution (e.g. month, day,
+    second, ...) which can make RangeQuerys on those fields more efficient.
+    (Daniel Naber)
+
+ 5. QueryParser now correctly works with Analyzers that can return more
+    than one token per position. For example, a query "+fast +car"
+    would be parsed as "+fast +(car automobile)" if the Analyzer
+    returns "car" and "automobile" at the same position whenever it
+    finds "car" (Patch #23307).
+    (Pierrick Brihaye, Daniel Naber)
+
+ 6. Permit unbuffered Directory implementations (e.g., using mmap).
+    InputStream is replaced by the new classes IndexInput and
+    BufferedIndexInput.  OutputStream is replaced by the new classes
+    IndexOutput and BufferedIndexOutput.  InputStream and OutputStream
+    are now deprecated and FSDirectory is now subclassable. (cutting)
+
+ 7. Add native Directory and TermDocs implementations that work under
+    GCJ.  These require GCC 3.4.0 or later and have only been tested
+    on Linux.  Use 'ant gcj' to build demo applications. (cutting)
+
+ 8. Add MMapDirectory, which uses nio to mmap input files.  This is
+    still somewhat slower than FSDirectory.  However it uses less
+    memory per query term, since a new buffer is not allocated per
+    term, which may help applications which use, e.g., wildcard
+    queries.  It may also someday be faster. (cutting & Paul Elschot)
+
+ 9. Added javadocs-internal to build.xml - bug #30360
+    (Paul Elschot via Otis)
+
+10. Added RangeFilter, a more generically useful filter than DateFilter.
+    (Chris M Hostetter via Erik)
+
+11. Added NumberTools, a utility class indexing numeric fields.
+    (adapted from code contributed by Matt Quail; committed by Erik)
+
+12. Added public static IndexReader.main(String[] args) method.
+    IndexReader can now be used directly at command line level
+    to list and optionally extract the individual files from an existing
+    compound index file.
+    (adapted from code contributed by Garrett Rooney; committed by Bernhard)
+
+13. Add IndexWriter.setTermIndexInterval() method.  See javadocs.
+    (Doug Cutting)
+
+14. Added LucenePackage, whose static get() method returns java.util.Package,
+    which lets the caller get the Lucene version information specified in
+    the Lucene Jar.
+    (Doug Cutting via Otis)
+
+15. Added Hits.iterator() method and corresponding HitIterator and Hit objects.
+    This provides standard java.util.Iterator iteration over Hits.
+    Each call to the iterator's next() method returns a Hit object.
+    (Jeremy Rayner via Erik)
+
+16. Add ParallelReader, an IndexReader that combines separate indexes
+    over different fields into a single virtual index.  (Doug Cutting)
+
+17. Add IntParser and FloatParser interfaces to FieldCache, so that
+    fields in arbitrarily formats can be cached as ints and floats.
+    (Doug Cutting)
+
+18. Added class org.apache.lucene.index.IndexModifier which combines
+    IndexWriter and IndexReader, so you can add and delete documents without
+    worrying about synchronization/locking issues.
+    (Daniel Naber)
+
+19. Lucene can now be used inside an unsigned applet, as Lucene's access
+    to system properties will not cause a SecurityException anymore.
+    (Jon Schuster via Daniel Naber, bug #34359)
+
+20. Added a new class MatchAllDocsQuery that matches all documents.
+    (John Wang via Daniel Naber, bug #34946)
+
+21. Added ability to omit norms on a per field basis to decrease
+    index size and memory consumption when there are many indexed fields.
+    See Field.setOmitNorms()
+    (Yonik Seeley, LUCENE-448)
+
+22. Added NullFragmenter to contrib/highlighter, which is useful for
+    highlighting entire documents or fields.
+    (Erik Hatcher)
+
+23. Added regular expression queries, RegexQuery and SpanRegexQuery.
+    Note the same term enumeration caveats apply with these queries as
+    apply to WildcardQuery and other term expanding queries.
+    These two new queries are not currently supported via QueryParser.
+    (Erik Hatcher)
+
+24. Added ConstantScoreQuery which wraps a filter and produces a score
+    equal to the query boost for every matching document.
+    (Yonik Seeley, LUCENE-383)
+
+25. Added ConstantScoreRangeQuery which produces a constant score for
+    every document in the range.  One advantage over a normal RangeQuery
+    is that it doesn't expand to a BooleanQuery and thus doesn't have a maximum
+    number of terms the range can cover.  Both endpoints may also be open.
+    (Yonik Seeley, LUCENE-383)
+
+26. Added ability to specify a minimum number of optional clauses that
+    must match in a BooleanQuery.  See BooleanQuery.setMinimumNumberShouldMatch().
+    (Paul Elschot, Chris Hostetter via Yonik Seeley, LUCENE-395)
+
+27. Added DisjunctionMaxQuery which provides the maximum score across its clauses.
+    It's very useful for searching across multiple fields.
+    (Chuck Williams via Yonik Seeley, LUCENE-323)
+
+28. New class ISOLatin1AccentFilter that replaces accented characters in the ISO
+    Latin 1 character set by their unaccented equivalent.
+    (Sven Duzont via Erik Hatcher)
+
+29. New class KeywordAnalyzer. "Tokenizes" the entire stream as a single token.
+    This is useful for data like zip codes, ids, and some product names.
+    (Erik Hatcher)
+
+30. Copied LengthFilter from contrib area to core. Removes words that are too
+    long and too short from the stream.
+    (David Spencer via Otis and Daniel)
+
+31. Added getPositionIncrementGap(String fieldName) to Analyzer.  This allows
+    custom analyzers to put gaps between Field instances with the same field
+    name, preventing phrase or span queries crossing these boundaries.  The
+    default implementation issues a gap of 0, allowing the default token
+    position increment of 1 to put the next field's first token into a
+    successive position.
+    (Erik Hatcher, with advice from Yonik)
+
+32. StopFilter can now ignore case when checking for stop words.
+    (Grant Ingersoll via Yonik, LUCENE-248)
+
+33. Add TopDocCollector and TopFieldDocCollector.  These simplify the
+    implementation of hit collectors that collect only the
+    top-scoring or top-sorting hits.
+
+API Changes
+
+ 1. Several methods and fields have been deprecated. The API documentation
+    contains information about the recommended replacements. It is planned
+    that most of the deprecated methods and fields will be removed in
+    Lucene 2.0. (Daniel Naber)
+
+ 2. The Russian and the German analyzers have been moved to contrib/analyzers.
+    Also, the WordlistLoader class has been moved one level up in the
+    hierarchy and is now org.apache.lucene.analysis.WordlistLoader
+    (Daniel Naber)
+
+ 3. The API contained methods that declared to throw an IOException
+    but that never did this. These declarations have been removed. If
+    your code tries to catch these exceptions you might need to remove
+    those catch clauses to avoid compile errors. (Daniel Naber)
+
+ 4. Add a serializable Parameter Class to standardize parameter enum
+    classes in BooleanClause and Field. (Christoph)
+
+ 5. Added rewrite methods to all SpanQuery subclasses that nest other SpanQuerys.
+    This allows custom SpanQuery subclasses that rewrite (for term expansion, for
+    example) to nest within the built-in SpanQuery classes successfully.
+
+Bug fixes
+
+ 1. The JSP demo page (src/jsp/results.jsp) now properly closes the
+    IndexSearcher it opens. (Daniel Naber)
+
+ 2. Fixed a bug in IndexWriter.addIndexes(IndexReader[] readers) that
+    prevented deletion of obsolete segments. (Christoph Goller)
+
+ 3. Fix in FieldInfos to avoid the return of an extra blank field in
+    IndexReader.getFieldNames() (Patch #19058). (Mark Harwood via Bernhard)
+
+ 4. Some combinations of BooleanQuery and MultiPhraseQuery (formerly
+    PhrasePrefixQuery) could provoke UnsupportedOperationException
+    (bug #33161). (Rhett Sutphin via Daniel Naber)
+
+ 5. Small bug in skipTo of ConjunctionScorer that caused NullPointerException
+    if skipTo() was called without prior call to next() fixed. (Christoph)
+
+ 6. Disable Similiarty.coord() in the scoring of most automatically
+    generated boolean queries.  The coord() score factor is
+    appropriate when clauses are independently specified by a user,
+    but is usually not appropriate when clauses are generated
+    automatically, e.g., by a fuzzy, wildcard or range query.  Matches
+    on such automatically generated queries are no longer penalized
+    for not matching all terms.  (Doug Cutting, Patch #33472)
+
+ 7. Getting a lock file with Lock.obtain(long) was supposed to wait for
+    a given amount of milliseconds, but this didn't work.
+    (John Wang via Daniel Naber, Bug #33799)
+
+ 8. Fix FSDirectory.createOutput() to always create new files.
+    Previously, existing files were overwritten, and an index could be
+    corrupted when the old version of a file was longer than the new.
+    Now any existing file is first removed.  (Doug Cutting)
+
+ 9. Fix BooleanQuery containing nested SpanTermQuery's, which previously
+    could return an incorrect number of hits.
+    (Reece Wilton via Erik Hatcher, Bug #35157)
+
+10. Fix NullPointerException that could occur with a MultiPhraseQuery
+    inside a BooleanQuery.
+    (Hans Hjelm and Scotty Allen via Daniel Naber, Bug #35626)
+
+11. Fixed SnowballFilter to pass through the position increment from
+    the original token.
+    (Yonik Seeley via Erik Hatcher, LUCENE-437)
+
+12. Added Unicode range of Korean characters to StandardTokenizer,
+    grouping contiguous characters into a token rather than one token
+    per character.  This change also changes the token type to "<CJ>"
+    for Chinese and Japanese character tokens (previously it was "<CJK>").
+    (Cheolgoo Kang via Otis and Erik, LUCENE-444 and LUCENE-461)
+
+13. FieldsReader now looks at FieldInfo.storeOffsetWithTermVector and
+    FieldInfo.storePositionWithTermVector and creates the Field with
+    correct TermVector parameter.
+    (Frank Steinmann via Bernhard, LUCENE-455)
+
+14. Fixed WildcardQuery to prevent "cat" matching "ca??".
+    (Xiaozheng Ma via Bernhard, LUCENE-306)
+
+15. Fixed a bug where MultiSearcher and ParallelMultiSearcher could
+    change the sort order when sorting by string for documents without
+    a value for the sort field.
+    (Luc Vanlerberghe via Yonik, LUCENE-453)
+
+16. Fixed a sorting problem with MultiSearchers that can lead to
+    missing or duplicate docs due to equal docs sorting in an arbitrary order.
+    (Yonik Seeley, LUCENE-456)
+
+17. A single hit using the expert level sorted search methods
+    resulted in the score not being normalized.
+    (Yonik Seeley, LUCENE-462)
+
+18. Fixed inefficient memory usage when loading an index into RAMDirectory.
+    (Volodymyr Bychkoviak via Bernhard, LUCENE-475)
+
+19. Corrected term offsets returned by ChineseTokenizer.
+    (Ray Tsang via Erik Hatcher, LUCENE-324)
+
+20. Fixed MultiReader.undeleteAll() to correctly update numDocs.
+    (Robert Kirchgessner via Doug Cutting, LUCENE-479)
+
+21. Race condition in IndexReader.getCurrentVersion() and isCurrent()
+    fixed by acquiring the commit lock.
+    (Luc Vanlerberghe via Yonik Seeley, LUCENE-481)
+
+22. IndexWriter.setMaxBufferedDocs(1) didn't have the expected effect,
+    this has now been fixed. (Daniel Naber)
+
+23. Fixed QueryParser when called with a date in local form like 
+    "[1/16/2000 TO 1/18/2000]". This query did not include the documents
+    of 1/18/2000, i.e. the last day was not included. (Daniel Naber)
+
+24. Removed sorting constraint that threw an exception if there were
+    not yet any values for the sort field (Yonik Seeley, LUCENE-374)
+
+Optimizations
+     
+ 1. Disk usage (peak requirements during indexing and optimization)
+    in case of compound file format has been improved. 
+    (Bernhard, Dmitry, and Christoph)
+
+ 2. Optimize the performance of certain uses of BooleanScorer,
+    TermScorer and IndexSearcher.  In particular, a BooleanQuery
+    composed of TermQuery, with not all terms required, that returns a
+    TopDocs (e.g., through a Hits with no Sort specified) runs much
+    faster.  (cutting)
+    
+ 3. Removed synchronization from reading of term vectors with an
+    IndexReader (Patch #30736). (Bernhard Messer via Christoph)
+
+ 4. Optimize term-dictionary lookup to allocate far fewer terms when
+    scanning for the matching term.  This speeds searches involving
+    low-frequency terms, where the cost of dictionary lookup can be
+    significant. (cutting)
+
+ 5. Optimize fuzzy queries so the standard fuzzy queries with a prefix 
+    of 0 now run 20-50% faster (Patch #31882).
+    (Jonathan Hager via Daniel Naber)
+    
+ 6. A Version of BooleanScorer (BooleanScorer2) added that delivers
+    documents in increasing order and implements skipTo. For queries
+    with required or forbidden clauses it may be faster than the old
+    BooleanScorer, for BooleanQueries consisting only of optional
+    clauses it is probably slower. The new BooleanScorer is now the
+    default. (Patch 31785 by Paul Elschot via Christoph)
+
+ 7. Use uncached access to norms when merging to reduce RAM usage.
+    (Bug #32847).  (Doug Cutting)
+
+ 8. Don't read term index when random-access is not required.  This
+    reduces time to open IndexReaders and they use less memory when
+    random access is not required, e.g., when merging segments.  The
+    term index is now read into memory lazily at the first
+    random-access.  (Doug Cutting)
+
+ 9. Optimize IndexWriter.addIndexes(Directory[]) when the number of
+    added indexes is larger than mergeFactor.  Previously this could
+    result in quadratic performance.  Now performance is n log(n).
+    (Doug Cutting)
+
+10. Speed up the creation of TermEnum for indices with multiple
+    segments and deleted documents, and thus speed up PrefixQuery,
+    RangeQuery, WildcardQuery, FuzzyQuery, RangeFilter, DateFilter,
+    and sorting the first time on a field.
+    (Yonik Seeley, LUCENE-454)
+
+11. Optimized and generalized 32 bit floating point to byte
+    (custom 8 bit floating point) conversions.  Increased the speed of
+    Similarity.encodeNorm() anywhere from 10% to 250%, depending on the JVM.
+    (Yonik Seeley, LUCENE-467)
+
+Infrastructure
+
+ 1. Lucene's source code repository has converted from CVS to
+    Subversion.  The new repository is at
+    http://svn.apache.org/repos/asf/lucene/java/trunk
+
+ 2. Lucene's issue tracker has migrated from Bugzilla to JIRA.
+    Lucene's JIRA is at http://issues.apache.org/jira/browse/LUCENE
+    The old issues are still available at
+    http://issues.apache.org/bugzilla/show_bug.cgi?id=xxxx
+    (use the bug number instead of xxxx)
+
+
+1.4.3
+
+ 1. The JSP demo page (src/jsp/results.jsp) now properly escapes error
+    messages which might contain user input (e.g. error messages about 
+    query parsing). If you used that page as a starting point for your
+    own code please make sure your code also properly escapes HTML
+    characters from user input in order to avoid so-called cross site
+    scripting attacks. (Daniel Naber)
+  
+  2. QueryParser changes in 1.4.2 broke the QueryParser API. Now the old 
+     API is supported again. (Christoph)
+
+
+1.4.2
+
+ 1. Fixed bug #31241: Sorting could lead to incorrect results (documents
+    missing, others duplicated) if the sort keys were not unique and there
+    were more than 100 matches. (Daniel Naber)
+
+ 2. Memory leak in Sort code (bug #31240) eliminated.
+    (Rafal Krzewski via Christoph and Daniel)
+    
+ 3. FuzzyQuery now takes an additional parameter that specifies the
+    minimum similarity that is required for a term to match the query.
+    The QueryParser syntax for this is term~x, where x is a floating 
+    point number >= 0 and < 1 (a bigger number means that a higher
+    similarity is required). Furthermore, a prefix can be specified
+    for FuzzyQuerys so that only those terms are considered similar that 
+    start with this prefix. This can speed up FuzzyQuery greatly.
+    (Daniel Naber, Christoph Goller)
+    
+ 4. PhraseQuery and PhrasePrefixQuery now allow the explicit specification
+    of relative positions. (Christoph Goller)
+    
+ 5. QueryParser changes: Fix for ArrayIndexOutOfBoundsExceptions 
+    (patch #9110); some unused method parameters removed; The ability
+    to specify a minimum similarity for FuzzyQuery has been added.
+    (Christoph Goller)
+
+ 6. IndexSearcher optimization: a new ScoreDoc is no longer allocated
+    for every non-zero-scoring hit.  This makes 'OR' queries that
+    contain common terms substantially faster.  (cutting)
+
+
+1.4.1
+
+ 1. Fixed a performance bug in hit sorting code, where values were not
+    correctly cached.  (Aviran via cutting)
+
+ 2. Fixed errors in file format documentation. (Daniel Naber)
+
+
+1.4 final
+
+ 1. Added "an" to the list of stop words in StopAnalyzer, to complement
+    the existing "a" there.  Fix for bug 28960
+     (http://issues.apache.org/bugzilla/show_bug.cgi?id=28960). (Otis)
+
+ 2. Added new class FieldCache to manage in-memory caches of field term
+    values.  (Tim Jones)
+
+ 3. Added overloaded getFieldQuery method to QueryParser which
+    accepts the slop factor specified for the phrase (or the default
+    phrase slop for the QueryParser instance).  This allows overriding
+    methods to replace a PhraseQuery with a SpanNearQuery instead,
+    keeping the proper slop factor. (Erik Hatcher)
+
+ 4. Changed the encoding of GermanAnalyzer.java and GermanStemmer.java to
+    UTF-8 and changed the build encoding to UTF-8, to make changed files
+    compile. (Otis Gospodnetic)
+
+ 5. Removed synchronization from term lookup under IndexReader methods
+    termFreq(), termDocs() or termPositions() to improve
+    multi-threaded performance.  (cutting)
+
+ 6. Fix a bug where obsolete segment files were not deleted on Win32.
+
+
+1.4 RC3
+
+ 1. Fixed several search bugs introduced by the skipTo() changes in
+    release 1.4RC1.  The index file format was changed a bit, so
+    collections must be re-indexed to take advantage of the skipTo()
+    optimizations.  (Christoph Goller)
+
+ 2. Added new Document methods, removeField() and removeFields().
+    (Christoph Goller)
+
+ 3. Fixed inconsistencies with index closing.  Indexes and directories
+    are now only closed automatically by Lucene when Lucene opened
+    them automatically.  (Christoph Goller)
+
+ 4. Added new class: FilteredQuery.  (Tim Jones)
+
+ 5. Added a new SortField type for custom comparators.  (Tim Jones)
+
+ 6. Lock obtain timed out message now displays the full path to the lock
+    file. (Daniel Naber via Erik)
+
+ 7. Fixed a bug in SpanNearQuery when ordered. (Paul Elschot via cutting)
+
+ 8. Fixed so that FSDirectory's locks still work when the
+    java.io.tmpdir system property is null.  (cutting)
+
+ 9. Changed FilteredTermEnum's constructor to take no parameters,
+    as the parameters were ignored anyway (bug #28858)
+
+1.4 RC2
+
+ 1. GermanAnalyzer now throws an exception if the stopword file
+    cannot be found (bug #27987). It now uses LowerCaseFilter
+    (bug #18410) (Daniel Naber via Otis, Erik)
+
+ 2. Fixed a few bugs in the file format documentation. (cutting)
+
+
+1.4 RC1
+
+ 1. Changed the format of the .tis file, so that:
+
+    - it has a format version number, which makes it easier to
+      back-compatibly change file formats in the future.
+
+    - the term count is now stored as a long.  This was the one aspect
+      of the Lucene's file formats which limited index size.
+
+    - a few internal index parameters are now stored in the index, so
+      that they can (in theory) now be changed from index to index,
+      although there is not yet an API to do so.
+
+    These changes are back compatible.  The new code can read old
+    indexes.  But old code will not be able read new indexes. (cutting)
+
+ 2. Added an optimized implementation of TermDocs.skipTo().  A skip
+    table is now stored for each term in the .frq file.  This only
+    adds a percent or two to overall index size, but can substantially
+    speedup many searches.  (cutting)
+
+ 3. Restructured the Scorer API and all Scorer implementations to take
+    advantage of an optimized TermDocs.skipTo() implementation.  In
+    particular, PhraseQuerys and conjunctive BooleanQuerys are
+    faster when one clause has substantially fewer matches than the
+    others.  (A conjunctive BooleanQuery is a BooleanQuery where all
+    clauses are required.)  (cutting)
+
+ 4. Added new class ParallelMultiSearcher.  Combined with
+    RemoteSearchable this makes it easy to implement distributed
+    search systems.  (Jean-Francois Halleux via cutting)
+
+ 5. Added support for hit sorting.  Results may now be sorted by any
+    indexed field.  For details see the javadoc for
+    Searcher#search(Query, Sort).  (Tim Jones via Cutting)
+
+ 6. Changed FSDirectory to auto-create a full directory tree that it
+    needs by using mkdirs() instead of mkdir().  (Mladen Turk via Otis)
+
+ 7. Added a new span-based query API.  This implements, among other
+    things, nested phrases.  See javadocs for details.  (Doug Cutting)
+
+ 8. Added new method Query.getSimilarity(Searcher), and changed
+    scorers to use it.  This permits one to subclass a Query class so
+    that it can specify its own Similarity implementation, perhaps
+    one that delegates through that of the Searcher.  (Julien Nioche
+    via Cutting)
+
+ 9. Added MultiReader, an IndexReader that combines multiple other
+    IndexReaders.  (Cutting)
+
+10. Added support for term vectors.  See Field#isTermVectorStored().
+    (Grant Ingersoll, Cutting & Dmitry)
+
+11. Fixed the old bug with escaping of special characters in query
+    strings: http://issues.apache.org/bugzilla/show_bug.cgi?id=24665
+    (Jean-Francois Halleux via Otis)
+
+12. Added support for overriding default values for the following,
+    using system properties:
+      - default commit lock timeout
+      - default maxFieldLength
+      - default maxMergeDocs
+      - default mergeFactor
+      - default minMergeDocs
+      - default write lock timeout
+    (Otis)
+
+13. Changed QueryParser.jj to allow '-' and '+' within tokens:
+    http://issues.apache.org/bugzilla/show_bug.cgi?id=27491
+    (Morus Walter via Otis)
+
+14. Changed so that the compound index format is used by default.
+    This makes indexing a bit slower, but vastly reduces the chances
+    of file handle problems.  (Cutting)
+
+
+1.3 final
+
+ 1. Added catch of BooleanQuery$TooManyClauses in QueryParser to
+    throw ParseException instead. (Erik Hatcher)
+
+ 2. Fixed a NullPointerException in Query.explain(). (Doug Cutting)
+
+ 3. Added a new method IndexReader.setNorm(), that permits one to
+    alter the boosting of fields after an index is created.
+
+ 4. Distinguish between the final position and length when indexing a
+    field.  The length is now defined as the total number of tokens,
+    instead of the final position, as it was previously.  Length is
+    used for score normalization (Similarity.lengthNorm()) and for
+    controlling memory usage (IndexWriter.maxFieldLength).  In both of
+    these cases, the total number of tokens is a better value to use
+    than the final token position.  Position is used in phrase
+    searching (see PhraseQuery and Token.setPositionIncrement()).
+
+ 5. Fix StandardTokenizer's handling of CJK characters (Chinese,
+    Japanese and Korean ideograms).  Previously contiguous sequences
+    were combined in a single token, which is not very useful.  Now
+    each ideogram generates a separate token, which is more useful.
+
+
+1.3 RC3
+
+ 1. Added minMergeDocs in IndexWriter.  This can be raised to speed
+    indexing without altering the number of files, but only using more
+    memory.  (Julien Nioche via Otis)
+
+ 2. Fix bug #24786, in query rewriting. (bschneeman via Cutting)
+
+ 3. Fix bug #16952, in demo HTML parser, skip comments in
+    javascript. (Christoph Goller)
+
+ 4. Fix bug #19253, in demo HTML parser, add whitespace as needed to
+    output (Daniel Naber via Christoph Goller)
+
+ 5. Fix bug #24301, in demo HTML parser, long titles no longer
+    hang things. (Christoph Goller)
+
+ 6. Fix bug #23534, Replace use of file timestamp of segments file
+    with an index version number stored in the segments file.  This
+    resolves problems when running on file systems with low-resolution
+    timestamps, e.g., HFS under MacOS X.  (Christoph Goller)
+
+ 7. Fix QueryParser so that TokenMgrError is not thrown, only
+    ParseException.  (Erik Hatcher)
+
+ 8. Fix some bugs introduced by change 11 of RC2.  (Christoph Goller)
+
+ 9. Fixed a problem compiling TestRussianStem.  (Christoph Goller)
+
+10. Cleaned up some build stuff.  (Erik Hatcher)
+
+
+1.3 RC2
+
+ 1. Added getFieldNames(boolean) to IndexReader, SegmentReader, and
+    SegmentsReader. (Julien Nioche via otis)
+
+ 2. Changed file locking to place lock files in
+    System.getProperty("java.io.tmpdir"), where all users are
+    permitted to write files.  This way folks can open and correctly
+    lock indexes which are read-only to them.
+
+ 3. IndexWriter: added a new method, addDocument(Document, Analyzer),
+    permitting one to easily use different analyzers for different
+    documents in the same index.
+
+ 4. Minor enhancements to FuzzyTermEnum.
+    (Christoph Goller via Otis)
+
+ 5. PriorityQueue: added insert(Object) method and adjusted IndexSearcher
+    and MultiIndexSearcher to use it.
+    (Christoph Goller via Otis)
+
+ 6. Fixed a bug in IndexWriter that returned incorrect docCount().
+    (Christoph Goller via Otis)
+
+ 7. Fixed SegmentsReader to eliminate the confusing and slightly different
+    behaviour of TermEnum when dealing with an enumeration of all terms,
+    versus an enumeration starting from a specific term.
+    This patch also fixes incorrect term document frequencies when the same term
+    is present in multiple segments.
+    (Christoph Goller via Otis)
+
+ 8. Added CachingWrapperFilter and PerFieldAnalyzerWrapper. (Erik Hatcher)
+
+ 9. Added support for the new "compound file" index format (Dmitry
+    Serebrennikov)
+
+10. Added Locale setting to QueryParser, for use by date range parsing.
+
+11. Changed IndexReader so that it can be subclassed by classes
+    outside of its package.  Previously it had package-private
+    abstract methods.  Also modified the index merging code so that it
+    can work on an arbitrary IndexReader implementation, and added a
+    new method, IndexWriter.addIndexes(IndexReader[]), to take
+    advantage of this. (cutting)
+
+12. Added a limit to the number of clauses which may be added to a
+    BooleanQuery.  The default limit is 1024 clauses.  This should
+    stop most OutOfMemoryExceptions by prefix, wildcard and fuzzy
+    queries which run amok. (cutting)
+
+13. Add new method: IndexReader.undeleteAll().  This undeletes all
+    deleted documents which still remain in the index. (cutting)
+
+
+1.3 RC1
+
+ 1. Fixed PriorityQueue's clear() method.
+    Fix for bug 9454, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9454
+    (Matthijs Bomhoff via otis)
+
+ 2. Changed StandardTokenizer.jj grammar for EMAIL tokens.
+    Fix for bug 9015, http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9015
+    (Dale Anson via otis)
+
+ 3. Added the ability to disable lock creation by using disableLuceneLocks
+    system property.  This is useful for read-only media, such as CD-ROMs.
+    (otis)
+
+ 4. Added id method to Hits to be able to access the index global id.
+    Required for sorting options.
+    (carlson)
+
+ 5. Added support for new range query syntax to QueryParser.jj.
+    (briangoetz)
+
+ 6. Added the ability to retrieve HTML documents' META tag values to
+    HTMLParser.jj.
+    (Mark Harwood via otis)
+
+ 7. Modified QueryParser to make it possible to programmatically specify the
+    default Boolean operator (OR or AND).
+    (Péter Halácsy via otis)
+
+ 8. Made many search methods and classes non-final, per requests.
+    This includes IndexWriter and IndexSearcher, among others.
+    (cutting)
+
+ 9. Added class RemoteSearchable, providing support for remote
+    searching via RMI.  The test class RemoteSearchableTest.java
+    provides an example of how this can be used.  (cutting)
+
+ 10. Added PhrasePrefixQuery (and supporting MultipleTermPositions).  The
+     test class TestPhrasePrefixQuery provides the usage example.
+     (Anders Nielsen via otis)
+
+ 11. Changed the German stemming algorithm to ignore case while
+     stripping. The new algorithm is faster and produces more equal
+     stems from nouns and verbs derived from the same word.
+     (gschwarz)
+
+ 12. Added support for boosting the score of documents and fields via
+     the new methods Document.setBoost(float) and Field.setBoost(float).
+
+     Note: This changes the encoding of an indexed value.  Indexes
+     should be re-created from scratch in order for search scores to
+     be correct.  With the new code and an old index, searches will
+     yield very large scores for shorter fields, and very small scores
+     for longer fields.  Once the index is re-created, scores will be
+     as before. (cutting)
+
+ 13. Added new method Token.setPositionIncrement().
+
+     This permits, for the purpose of phrase searching, placing
+     multiple terms in a single position.  This is useful with
+     stemmers that produce multiple possible stems for a word.
+
+     This also permits the introduction of gaps between terms, so that
+     terms which are adjacent in a token stream will not be matched by
+     and exact phrase query.  This makes it possible, e.g., to build
+     an analyzer where phrases are not matched over stop words which
+     have been removed.
+
+     Finally, repeating a token with an increment of zero can also be
+     used to boost scores of matches on that token.  (cutting)
+
+ 14. Added new Filter class, QueryFilter.  This constrains search
+     results to only match those which also match a provided query.
+     Results are cached, so that searches after the first on the same
+     index using this filter are very fast.
+
+     This could be used, for example, with a RangeQuery on a formatted
+     date field to implement date filtering.  One could re-use a
+     single QueryFilter that matches, e.g., only documents modified
+     within the last week.  The QueryFilter and RangeQuery would only
+     need to be reconstructed once per day. (cutting)
+
+ 15. Added a new IndexWriter method, getAnalyzer().  This returns the
+     analyzer used when adding documents to this index. (cutting)
+
+ 16. Fixed a bug with IndexReader.lastModified().  Before, document
+     deletion did not update this.  Now it does.  (cutting)
+
+ 17. Added Russian Analyzer.
+     (Boris Okner via otis)
+
+ 18. Added a public, extensible scoring API.  For details, see the
+     javadoc for org.apache.lucene.search.Similarity.
+
+ 19. Fixed return of Hits.id() from float to int. (Terry Steichen via Peter).
+
+ 20. Added getFieldNames() to IndexReader and Segment(s)Reader classes.
+     (Peter Mularien via otis)
+
+ 21. Added getFields(String) and getValues(String) methods.
+     Contributed by Rasik Pandey on 2002-10-09
+     (Rasik Pandey via otis)
+
+ 22. Revised internal search APIs.  Changes include:
+
+       a. Queries are no longer modified during a search.  This makes
+       it possible, e.g., to reuse the same query instance with
+       multiple indexes from multiple threads.
+
+       b. Term-expanding queries (e.g. PrefixQuery, WildcardQuery,
+       etc.)  now work correctly with MultiSearcher, fixing bugs 12619
+       and 12667.
+
+       c. Boosting BooleanQuery's now works, and is supported by the
+       query parser (problem reported by Lee Mallabone).  Thus a query
+       like "(+foo +bar)^2 +baz" is now supported and equivalent to
+       "(+foo^2 +bar^2) +baz".
+
+       d. New method: Query.rewrite(IndexReader).  This permits a
+       query to re-write itself as an alternate, more primitive query.
+       Most of the term-expanding query classes (PrefixQuery,
+       WildcardQuery, etc.) are now implemented using this method.
+
+       e. New method: Searchable.explain(Query q, int doc).  This
+       returns an Explanation instance that describes how a particular
+       document is scored against a query.  An explanation can be
+       displayed as either plain text, with the toString() method, or
+       as HTML, with the toHtml() method.  Note that computing an
+       explanation is as expensive as executing the query over the
+       entire index.  This is intended to be used in developing
+       Similarity implementations, and, for good performance, should
+       not be displayed with every hit.
+
+       f. Scorer and Weight are public, not package protected.  It now
+       possible for someone to write a Scorer implementation that is
+       not in the org.apache.lucene.search package.  This is still
+       fairly advanced programming, and I don't expect anyone to do
+       this anytime soon, but at least now it is possible.
+
+       g. Added public accessors to the primitive query classes
+       (TermQuery, PhraseQuery and BooleanQuery), permitting access to
+       their terms and clauses.
+
+     Caution: These are extensive changes and they have not yet been
+     tested extensively.  Bug reports are appreciated.
+     (cutting)
+
+ 23. Added convenience RAMDirectory constructors taking File and String
+     arguments, for easy FSDirectory to RAMDirectory conversion.
+     (otis)
+
+ 24. Added code for manual renaming of files in FSDirectory, since it
+     has been reported that java.io.File's renameTo(File) method sometimes
+     fails on Windows JVMs.
+     (Matt Tucker via otis)
+
+ 25. Refactored QueryParser to make it easier for people to extend it.
+     Added the ability to automatically lower-case Wildcard terms in
+     the QueryParser.
+     (Tatu Saloranta via otis)
+
+
+1.2 RC6
+
+ 1. Changed QueryParser.jj to have "?" be a special character which
+    allowed it to be used as a wildcard term. Updated TestWildcard
+    unit test also. (Ralf Hettesheimer via carlson)
+
+1.2 RC5
+
+ 1. Renamed build.properties to default.properties and updated
+    the BUILD.txt document to describe how to override the
+    default.property settings without having to edit the file. This
+    brings the build process closer to Scarab's build process.
+    (jon)
+
+ 2. Added MultiFieldQueryParser class. (Kelvin Tan, via otis)
+
+ 3. Updated "powered by" links. (otis)
+
+ 4. Fixed instruction for setting up JavaCC - Bug #7017 (otis)
+
+ 5. Added throwing exception if FSDirectory could not create directory
+    - Bug #6914 (Eugene Gluzberg via otis)
+
+ 6. Update MultiSearcher, MultiFieldParse, Constants, DateFilter,
+    LowerCaseTokenizer javadoc (otis)
+
+ 7. Added fix to avoid NullPointerException in results.jsp
+    (Mark Hayes via otis)
+
+ 8. Changed Wildcard search to find 0 or more char instead of 1 or more
+    (Lee Mallobone, via otis)
+
+ 9. Fixed error in offset issue in GermanStemFilter - Bug #7412
+    (Rodrigo Reyes, via otis)
+
+ 10. Added unit tests for wildcard search and DateFilter (otis)
+
+ 11. Allow co-existence of indexed and non-indexed fields with the same name
+     (cutting/casper, via otis)
+
+ 12. Add escape character to query parser.
+     (briangoetz)
+
+ 13. Applied a patch that ensures that searches that use DateFilter
+     don't throw an exception when no matches are found. (David Smiley, via
+     otis)
+
+ 14. Fixed bugs in DateFilter and wildcardquery unit tests. (cutting, otis, carlson)
+
+
+1.2 RC4
+
+ 1. Updated contributions section of website.
+    Add XML Document #3 implementation to Document Section.
+    Also added Term Highlighting to Misc Section. (carlson)
+
+ 2. Fixed NullPointerException for phrase searches containing
+    unindexed terms, introduced in 1.2RC3.  (cutting)
+
+ 3. Changed document deletion code to obtain the index write lock,
+    enforcing the fact that document addition and deletion cannot be
+    performed concurrently.  (cutting)
+
+ 4. Various documentation cleanups.  (otis, acoliver)
+
+ 5. Updated "powered by" links.  (cutting, jon)
+
+ 6. Fixed a bug in the GermanStemmer.  (Bernhard Messer, via otis)
+
+ 7. Changed Term and Query to implement Serializable.  (scottganyo)
+
+ 8. Fixed to never delete indexes added with IndexWriter.addIndexes().
+    (cutting)
+
+ 9. Upgraded to JUnit 3.7. (otis)
+
+1.2 RC3
+
+ 1. IndexWriter: fixed a bug where adding an optimized index to an
+    empty index failed.  This was encountered using addIndexes to copy
+    a RAMDirectory index to an FSDirectory.
+
+ 2. RAMDirectory: fixed a bug where RAMInputStream could not read
+    across more than across a single buffer boundary.
+
+ 3. Fix query parser so it accepts queries with unicode characters.
+    (briangoetz)
+
+ 4. Fix query parser so that PrefixQuery is used in preference to
+    WildcardQuery when there's only an asterisk at the end of the
+    term.  Previously PrefixQuery would never be used.
+
+ 5. Fix tests so they compile; fix ant file so it compiles tests
+    properly.  Added test cases for Analyzers and PriorityQueue.
+
+ 6. Updated demos, added Getting Started documentation. (acoliver)
+
+ 7. Added 'contributions' section to website & docs. (carlson)
+
+ 8. Removed JavaCC from source distribution for copyright reasons.
+    Folks must now download this separately from metamata in order to
+    compile Lucene.  (cutting)
+
+ 9. Substantially improved the performance of DateFilter by adding the
+    ability to reuse TermDocs objects.  (cutting)
+
+10. Added IndexReader methods:
+      public static boolean indexExists(String directory);
+      public static boolean indexExists(File directory);
+      public static boolean indexExists(Directory directory);
+      public static boolean isLocked(Directory directory);
+      public static void unlock(Directory directory);
+    (cutting, otis)
+
+11. Fixed bugs in GermanAnalyzer (gschwarz)
+
+
+1.2 RC2, 19 October 2001:
+ - added sources to distribution
+ - removed broken build scripts and libraries from distribution
+ - SegmentsReader: fixed potential race condition
+ - FSDirectory: fixed so that getDirectory(xxx,true) correctly
+   erases the directory contents, even when the directory
+   has already been accessed in this JVM.
+ - RangeQuery: Fix issue where an inclusive range query would
+   include the nearest term in the index above a non-existant
+   specified upper term.
+ - SegmentTermEnum: Fix NullPointerException in clone() method
+   when the Term is null.
+ - JDK 1.1 compatibility fix: disabled lock files for JDK 1.1,
+   since they rely on a feature added in JDK 1.2.
+
+1.2 RC1 (first Apache release), 2 October 2001:
+  - packages renamed from com.lucene to org.apache.lucene
+  - license switched from LGPL to Apache
+  - ant-only build -- no more makefiles
+  - addition of lock files--now fully thread & process safe
+  - addition of German stemmer
+  - MultiSearcher now supports low-level search API
+  - added RangeQuery, for term-range searching
+  - Analyzers can choose tokenizer based on field name
+  - misc bug fixes.
+
+1.01b (last Sourceforge release), 2 July 2001
+ . a few bug fixes
+ . new Query Parser
+ . new prefix query (search for "foo*" matches "food")
+
+1.0, 2000-10-04
+
+This release fixes a few serious bugs and also includes some
+performance optimizations, a stemmer, and a few other minor
+enhancements.
+
+0.04 2000-04-19
+
+Lucene now includes a grammar-based tokenizer, StandardTokenizer.
+
+The only tokenizer included in the previous release (LetterTokenizer)
+identified terms consisting entirely of alphabetic characters.  The
+new tokenizer uses a regular-expression grammar to identify more
+complex classes of terms, including numbers, acronyms, email
+addresses, etc.
+
+StandardTokenizer serves two purposes:
+
+ 1. It is a much better, general purpose tokenizer for use by
+    applications as is.
+
+    The easiest way for applications to start using
+    StandardTokenizer is to use StandardAnalyzer.
+
+ 2. It provides a good example of grammar-based tokenization.
+
+    If an application has special tokenization requirements, it can
+    implement a custom tokenizer by copying the directory containing
+    the new tokenizer into the application and modifying it
+    accordingly.
+
+0.01, 2000-03-30
+
+First open source release.
+
+The code has been re-organized into a new package and directory
+structure for this release.  It builds OK, but has not been tested
+beyond that since the re-organization.
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Entries b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Entries
new file mode 100644
index 0000000..8c03103
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Entries
@@ -0,0 +1,4 @@
+/CHANGES.txt/1.1.2.1/Mon Nov 10 16:46:53 2008/-ko/Tv2_9_1
+/LICENSE.txt/1.1.2.1/Mon Nov 10 16:46:53 2008/-ko/Tv2_9_1
+/NOTICE.txt/1.1.2.1/Mon Nov 10 16:46:53 2008/-ko/Tv2_9_1
+/README.txt/1.1.2.1/Mon Nov 10 16:46:53 2008/-ko/Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Repository b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Repository
new file mode 100644
index 0000000..532ad3d
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Repository
@@ -0,0 +1 @@
+org.eclipse.orbit/org.apache.lucene/source-bundle/about_files
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Root b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Root
new file mode 100644
index 0000000..24126f4
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Root
@@ -0,0 +1 @@
+:extssh:caniszczyk at dev.eclipse.org:/cvsroot/tools
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Tag b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Tag
new file mode 100644
index 0000000..3114c57
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/CVS/Tag
@@ -0,0 +1 @@
+Tv2_9_1
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/LICENSE.txt b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/LICENSE.txt
new file mode 100755
index 0000000..dfd5693
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/LICENSE.txt
@@ -0,0 +1,240 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+Some code in src/java/org/apache/lucene/util/UnicodeUtil.java was
+derived from unicode conversion examples available at
+http://www.unicode.org/Public/PROGRAMS/CVTUTF.  Here is the copyright
+from those sources:
+
+/*
+ * Copyright 2001-2004 Unicode, Inc.
+ * 
+ * Disclaimer
+ * 
+ * This source code is provided as is by Unicode, Inc. No claims are
+ * made as to fitness for any particular purpose. No warranties of any
+ * kind are expressed or implied. The recipient agrees to determine
+ * applicability of information provided. If this file has been
+ * purchased on magnetic or optical media from Unicode, Inc., the
+ * sole remedy for any claim will be exchange of defective media
+ * within 90 days of receipt.
+ * 
+ * Limitations on Rights to Redistribute This Code
+ * 
+ * Unicode, Inc. hereby grants the right to freely use the information
+ * supplied in this file in the creation of products supporting the
+ * Unicode Standard, and to make copies of this file in any form
+ * for internal or external distribution as long as this notice
+ * remains attached.
+ */
+
+
+Some code in src/java/org/apache/lucene/util/ArrayUtil.java was
+derived from Python 2.4.2 sources available at
+http://www.python.org. Full license is here:
+
+  http://www.python.org/download/releases/2.4.2/license/
+
+
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/NOTICE.txt b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/NOTICE.txt
new file mode 100755
index 0000000..92fd344
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/NOTICE.txt
@@ -0,0 +1,11 @@
+Apache Lucene
+Copyright 2006 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+The snowball stemmers in
+  contrib/snowball/src/java/net/sf/snowball
+were developed by Martin Porter and Richard Boulton.
+The full snowball package is available from
+  http://snowball.tartarus.org/
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/about_files/README.txt b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/README.txt
new file mode 100755
index 0000000..ad1315c
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/about_files/README.txt
@@ -0,0 +1,46 @@
+Lucene README file
+
+$Id: README.txt 490368 2006-12-26 20:44:29Z gsingers $
+
+INTRODUCTION
+
+Lucene is a Java full-text search engine.  Lucene is not a complete
+application, but rather a code library and API that can easily be used
+to add search capabilities to applications.
+
+The Lucene web site is at:
+  http://lucene.apache.org/
+
+Please join the Lucene-User mailing list by sending a message to:
+  java-user-subscribe at lucene.apache.org
+
+FILES
+
+lucene-core-XX.jar
+  The compiled lucene library.
+
+lucene-demos-XX.jar
+  The compiled simple example code.
+
+luceneweb.war
+  The compiled simple example Web Application.
+
+contrib/*
+  Contributed code which extends and enhances Lucene, but is not
+  part of the core library.  Of special note are the JAR files in the analyzers and snowball directory which
+  contain various analyzers that people may find useful in place of the StandardAnalyzer.
+
+
+
+docs/index.html
+  The contents of the Lucene website.
+
+docs/api/index.html
+  The Javadoc Lucene API documentation.  This includes the core
+  library, the demo, as well as all of the contrib modules.
+
+src/java
+  The Lucene source code.
+
+src/demo
+  Some example code.
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/build.properties b/eclipse/plugins/org.apache.lucene/source-bundle/build.properties
new file mode 100755
index 0000000..b550e2b
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2007, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Common Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/cpl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = about.html,\
+               about_files/,\
+               plugin.properties,\
+               META-INF/
diff --git a/eclipse/plugins/org.apache.lucene/source-bundle/plugin.properties b/eclipse/plugins/org.apache.lucene/source-bundle/plugin.properties
new file mode 100755
index 0000000..a159548
--- /dev/null
+++ b/eclipse/plugins/org.apache.lucene/source-bundle/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=Apache Lucene Source
+providerName=Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.ant.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.ant.core/.settings/org.eclipse.jdt.core.prefs
index e510b3e..ae25ba7 100644
--- a/eclipse/plugins/org.eclipse.ant.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.ant.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,9 @@
-#Mon Dec 01 10:42:13 PST 2008
+#Thu May 05 15:06:07 CDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
@@ -20,28 +21,29 @@ org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=error
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=error
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
@@ -49,28 +51,35 @@ org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -85,11 +94,12 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverridin
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.ant.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.ant.core/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..5ee1bba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ant.core/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:42:25 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.ant.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ant.core/META-INF/MANIFEST.MF
index ce39c3b..b25056d 100644
--- a/eclipse/plugins/org.eclipse.ant.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ant.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ant.core; singleton:=true
-Bundle-Version: 3.2.201.qualifier
+Bundle-Version: 3.2.300.qualifier
 Bundle-Activator: org.eclipse.ant.core.AntCorePlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ant.core/buildfiles/buildExtraJAR.xml b/eclipse/plugins/org.eclipse.ant.core/buildfiles/buildExtraJAR.xml
index 4b7c46f..a86fcc1 100644
--- a/eclipse/plugins/org.eclipse.ant.core/buildfiles/buildExtraJAR.xml
+++ b/eclipse/plugins/org.eclipse.ant.core/buildfiles/buildExtraJAR.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-     Copyright (c) 2005, 2006 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.core/buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/buildnotes_platform-ant.html
deleted file mode 100644
index aa102dd..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/buildnotes_platform-ant.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse 3.6 Ant Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse 3.6 Ant Build Notes</h1>
-
-<h2>Enhancements in 3.6</h2>
-<p>None.</p>
-
-<h2>July 6, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=277487">Bug 277487</a>: Ant UI tests should not force focus of test workbench when breakpoint is hit<br>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.core/r2_0_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r2_0_buildnotes_platform-ant.html
deleted file mode 100644
index 238d69a..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r2_0_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,552 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse Platform Release Notes Core</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020612
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F06%2F11&chfieldto=2002%2F06%2F12&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&field0-0-1=noop&type0-0-1=noop&value0-0-1=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020611
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F06%2F07&chfieldto=2002%2F06%2F11&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&field0-0-1=noop&type0-0-1=noop&value0-0-1=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020607
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F31&chfieldto=2002%2F06%2F07&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&field0-0-1=noop&type0-0-1=noop&value0-0-1=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020531
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F30&chfieldto=2002%2F05%2F31&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&field0-0-1=noop&type0-0-1=noop&value0-0-1=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020530
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F29&chfieldto=2002%2F05%2F30&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020529
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F21&chfieldto=2002%2F05%2F29&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020521
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-The plug-in <b><tt>org.eclipse.ant.ui</tt></b> has been removed in favor
-of <b><tt>org.eclipse.ui.externaltools</tt></b>.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F14&chfieldto=2002%2F05%2F21&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020514
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-Ant type eclipse.commapatternset has been removed.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F04%2F30&chfieldto=2002%2F05%2F14&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020430
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-Type commapatternset is now called eclipse.commapatternset .</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F04%2F12&chfieldto=2002%2F04%2F30&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020411
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F04%2F09&chfieldto=2002%2F04%2F12&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=Active&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020409
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-<b><tt>org.eclipse.ant.core</tt></b> does not export <b><tt>org.apache.ant</tt></b>
-anymore. Plug-ins that need to have access to Ant classes need to require
-<b><tt>org.apache.ant</tt></b>
-directly.</li>
-
-<li>
-Tasks <b><tt>refreshLocal</tt></b> and <b><tt>incrementalBuild</tt></b>
-are not available anymore. Use <b><tt>eclipse.refreshLocal</tt></b> and
-<b><tt>eclipse.incrementalBuild</tt></b>
-instead.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-New property <b><tt>eclipse.running</tt></b> is set for scripts running
-inside Eclipse.</li>
-
-<li>
-It is now possible to extend the Ant classpath by adding new JARs, folders,
-tasks and types through a preference (Workbench->Preferences->Ant->Customize).</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F01%2F29&chfieldto=2002%2F04%2F09&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=Active&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20020129
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2001%2F12%2F17&chfieldto=2002%2F01%2F29&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=ant&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20011218
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2001%2F12%2F11&chfieldto=2001%2F12%2F17&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=ant&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20011211
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-Ant code from Apache has moved to a new plug-in called org.apache.ant..</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2001%2F11%2F27&chfieldto=2001%2F12%2F10&chfieldvalue=&product=Platform&component=Ant&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=Active&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20011127 (v213)
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5391">5391</a> 
-Upgrade to Ant 1.4.1</li>
-</ul>
-
-<h1>
-
-<hr WIDTH="100%">Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build 20011120 (v211)
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5331">5331</a> 
-Ant does not override optional tasks with org.eclipse.ant.core.antTasks
-extension point</li>
-</ul>
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.ant.core/r2_1_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r2_1_buildnotes_platform-ant.html
deleted file mode 100644
index 6ce0828..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r2_1_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,706 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse Platform Release Notes Ant</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build March 25, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35610">35610</a>: External tools plugin.xml error<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build March 17, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35138">35138</a>: NPE during shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34767">34767</a>: Ant preferences not imported<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35100">35100</a>: Migrate actions to command extension point<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build March 13, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34726">34726</a>: Ant tests do not need the overhead of AutomatedSuite.run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34922">34922</a>: Typos<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34439">34439</a>: Index out of bounds editing custom task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34496">34496</a>: double click adds type without name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34682">34682</a>: External entity with unrecognized protocol<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34678">34678</a>: Duplicate properties in files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34663">34663</a>: Ant attempts to resolve taskdefs before resolving properties<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build March 12, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34442">34442</a>: Custom task does not work in folder (only in jar)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34472">34472</a>: External tools preference is not clear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34519">34519</a>: Dialog slow to cancel when Properties/External Tools was selected<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build March 6, 2003
-<p>
-<b>Note:</b> Adding the Xerces JARs to your runtime Ant classpath is no longer required.
-In fact, adding these JARs can cause problems. The Xerces classes are loaded from the Xerces plugin provided with Eclipse.
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32643">32643</a>: PlantyContentOutlinePage: 'Open With' shows up in context menu for non-existant external entity<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33682">33682</a>: Ant build file editor causes exceptions when file empty<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33794">33794</a>: Variables should be sorted in the "Select Variable" dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33826">33826</a>: Preferences>Editor>Appearance: layout problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33069">33069</a>: Stack traces using ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31727">31727</a>: Ant Editor tests fail when run as PDE JUnit tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33838">33838</a>: Have build.xml as a default name for -find emulation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32700">32700</a>: Refresh Tab Scope variable selected but no selection widget<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33685">33685</a>: Ant view: open with not available for targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32657">32657</a>: Ant build stops working after terminating build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33861">33861</a>: [External Tools] Pref page too prominent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33870">33870</a>: The build.properties for org.eclipse.ant.tests.core is incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33837">33837</a>: Ant editor code assist is case sensitive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33859">33859</a>: AntEditor: error nodes in outline are inconsistent with the Java editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33867">33867</a>: Misspelling in Ant View context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33874">33874</a>: AntEditor: no context menu on vertical ruler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33857">33857</a>: AntEditor: doesn't support hovers on annotations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33928">33928</a>: NPE closing workbench<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33981">33981</a>: Better positioning of error squiggles in Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33264">33264</a>: Content assist fails if reference external entity<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33664">33644</a>: Class org/xml/sax/Parser violates loader constraints with IBM vm 131<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32890">32890</a>: Coloring bug in ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33892">33892</a>: BadLocationException possible during reconciliation of AntEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33952">33952</a>: AntEditor: possible automatic move of cursor while editing<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build March 4, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33443">33443</a>: No need for our own Ant version implementation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33263">33263</a>: Ant completion of properties is incorrect.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32825">32825</a>: Missing NLS strings for Ant Editor preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32183">32183</a>: Running with Ant1.6 alpha<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32477">32477</a>: Errors in external entities and nested external entities aren't supported by the editor outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32551">32551</a>: "Run Ant" causes ClassCastException with filesets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32587">32587</a>: AntView actions are incorrecly enabled --> NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32824">32824</a>: BadLocationException creating build.xml file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32624">32624</a>: Problem with asyncExec(..) Runnable in PlantyContentOutlinePage if control of treeviewer gets disposed.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32787">32787</a>: AssertionFailedException selecting error node in AntEditor outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33043">33043</a>: Custom types are broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33288">33288</a>: Ant View tooltips should use book capitalization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32517">32517</a>: No mneumonics on the Choose Configuration Type dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31433">31433</a>: Ant view will not set its focus when selecting the window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33514">33514</a>: Ant integration appears broken in I20030227<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32715">32715</a>: Cancelling removing a external tool builder fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32836">32836</a>: Cannot remove custom task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33284">33284</a>: Ant preferences: additional classpath entries not removed permanently<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33117">33117</a>: ClassCastException with tasks using Xerces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32837">32837</a>: Tasks tab restore defaults<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32827">32827</a>: Editor selection for external entities can be improved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32809">32809</a>: AntView search dialog retains name of removed working set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32693">32693</a>: Duplicate mneumonic on Program main tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33534">33534</a>: Ant Editor: range indication not supported<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33272">33272</a>: Leaking PlantyDocumentProviders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32768">32768</a>: Edit launch config from Ant view starts out "dirty"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32811">32811</a>: Setting ANT_HOME for specific config does not update classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32781">32781</a>: Description in Ant preference page is confusing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33702">33702</a>: [Ant View] Properties action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33346">33346</a>: Move to Ant 1.5.2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32521">32521</a>: (minor)AntView status line shows "no description"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33670">33670</a>: Ant view error strings are too long<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32762">32762</a>: ${resource_loc} variable component specific resource tree too small<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 21, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23969">23969</a>: Launcher should throw JVM exit code to parent process when build fails<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 20, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31819">31819</a>: New support for color in TableViewers and TreeViewers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32158">32158</a>: Can't remove erroneous project builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30716">30716</a>: cannot change external tool builder launch configuration properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31949">31949</a>: Use OpenWith menu for external entities in the AntEditor outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32091">32091</a>: AntClassloader should be setting its parent classloader<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31625">31625</a>: Mixing build files in Ant view does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31934">31934</a>: Targets tab gets very wide if lots of targets selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19459">19459</a>: [ExternalTools] failure to execute invalid tools should be better handled by ui.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32297">32297</a>: "plug-in" should be spelled with a hyphen<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32276">32276</a>: Stack trace running ant.bat as an external process<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31955">31955</a>: Outline is not created until initial reconcilation: noticeable delay<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32345">32345</a>: Ant Editor doesn't support annotations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32374">32374</a>: BadLocationException on external entity build file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32423">32423</a>: Cannot use Run as Ant build with the Ant Editor outline with focus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32419">32419</a>: Put External Tools launch button with Run and Debug launch buttons<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 18, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28770">28770</a>: Display default target in project label in Ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30596">30596</a>: Fixes for the Ant Editor Tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29236">29236</a>: AntView tests & Ant editor tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31780">31780</a>: Workaround JFace selection bug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31776">31776</a>: Ant targets cannot be configured within the list box if many targets exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31777">31777</a>: Add reconciling to the Ant editor outline page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21793">21793</a>: Ant ProjectHelper not loaded correctly [set thread context classloader]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31796">31796</a>: Ant Editor syntax coloring fails over multiple lines<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30836">30836</a>: XMLElements from external entities have incorrect selection in AntEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31369">31369</a>: External Processes are not typed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31439">31439</a>: PlantyException on opening ant script<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31588">31588</a>: Show In... support from the Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31792">31792</a>: Project.init shortcut not working for datatypes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31797">31797</a>: AntEditor syntax color does not update until the editor is re-opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31935">31935</a>: No targets selected, yet still have targets in target execution order<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31876">31876</a>: ClassCastException code assisting in Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31948">31948</a>: AntEditor reconciling has broken resolution of external entities<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32069">32069</a>: Color preferences are applied too early<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27613">27613</a>: Code duplication with Ant preference pages and Ant launch config tabs<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 13, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31587">31587</a>: Open Editor for external entities should use selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31561">31561</a>: Parse build files faster<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31672">31672</a>: Broken backwards compatibility with Ant 1.4.*<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31678">31678</a>: Disallow the AntClassLoader to load core Ant classes from plugin parents<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30679">30679</a>: External tool migration and writing to System.err<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31097">31097</a>: Ant Color Option list needs scrollbars<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28928">28928</a>: Set minimum size of Runtime class path<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 11, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30939">30939</a>: DBCS characters are garbled at the Outline view using non-native workbench encoding<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31180">31180</a>: Outline colors all elements whose name matches default target's<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29815">29815</a>: Ant artwork<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29898">29898</a>: Updating actions in the AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30931">30931</a>: [Ant View] Run button not enabled when first target added to list<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30961">30961</a>: Arguments field on the ExternalToolsMain tab needs to be multiline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30239">30239</a>: Some bugs in launch configurations for external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31378">31378</a>: AntTargetsTab order tab does not color default target correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31200">31200</a>: Unable to uncheck Ant Targets after clicking "Revert"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31145">31145</a>: Show external entities as root nodes in the outline page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30884">30884</a>: PlantyCompletionProcessor does not handle external entities<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30844">30844</a>: AntClasspathTab top table will grow unbounded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29572">29572</a>: headless Ant support does not properly handle IDE based Ant tasks<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 6, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31055">31055</a>: NPE determining if default target<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 5, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30239">30239</a>: Some bugs in launch configurations for external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26750">26750</a>: "Run with..." dialog for AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29231">29231</a>: Ant view is listed under "External Tools" in menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29824">29824</a>: Ant view toolbars should follow type hierarchy example<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30220">30220</a>: external builder not readded to projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30228">30228</a>: Mneumonic collision on Refresh tab for resource variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30649">30649</a>: Ant Runtime Classpath Up/Down buttons broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30591">30591</a>: DBCS:After remove all targets, "Run Ant..." will repeat last target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29822">29822</a>: Streamline single target case for Ant View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30331">30331</a>: [Ant View] Add build files sorts case dependant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30318">30318</a>: Planty should be renamed to "Ant Editor"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29820">29820</a>: Reduce clutter in Ant View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30098">30098</a>: AntSecurityManager throws exception when exiting Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30715">30715</a>: Incorrect string description for ${build_type} variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30420">30420</a>: StringIndexOutOfBoundsException on restart with Ant editor active<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30744">30744</a>: Activating a target in the Ant view switches view layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30589">30589</a>: DBCS:Clicking "Up" or "Down" make Target lost<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29318">29318</a>: Two builds at the same time...one starts logging to the DOS console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29271">29271</a>: External tools ant output always goes to the console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30547">30547</a>: Ant view properties action doesn't handle more than one config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30680">30680</a>: "Widget is disposed" setting variable arguments for Ant Build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30769">30769</a>: Missing icon for target error node<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29885">29885</a>: Ant editor (planty) does not handle relative paths nicely<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29744">29744</a>: [External Tools] refresh ${working_set} does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30559">30559</a>: ExternalToolsPlugin.log(Throwable) logs no message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30770">30770</a>: When things go wrong parsing for the Ant Editor outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30767">30767</a>: NPE on resource changed from AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30343">30343</a>: Ant Editor outline does not indicate default target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24108">24108</a>: Nls external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26683">26683</a>: Targets tab behavior<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27325">27325</a>: "activate" terminology<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29828">29828</a>: Too many preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30915">30915</a>: Selected resource tracking fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30932">30932</a>: Restore defaults does not work for color preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30845">30845</a>: org.eclipse.ui.externaltools.internal.ant.dtd.test.dumper.java<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30093">30093</a>: Handling bad definitions of extension points<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 28, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29878">29878</a>: Chkpii failures for Ant / external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29857">29857</a>: Open with "Planty"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28877">28877</a>: Double clicking active target should run the active target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29816">29816</a>: Support "delete" key in the Ant view for active targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30035">30035</a>: NPE running build file in external project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29315">29315</a>: AntProgressBuildListener writing to .log on build cancelled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29321">29321</a>: Set ANT_HOME does not force you to enter location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29249">29249</a>: Ant view updates for resource changes inefficiently<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27675">27675</a>: Show custom Eclipse tasks / types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30083">30083</a>: Adding -logger XmlLogger cause Exception on build finished<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27627">27627</a>: API review<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30086">30086</a>: Ant view not updated when project deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29743">29743</a>: [External Tools] Apply button does not enable in "refresh tab"<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 21, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26532">26532</a>: [External Tools] the external tools menu in the run menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25860">25860</a>: Ant runner sets basedir incorrectly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26667">26667</a>: External Tool variables are expanded in launch config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29504">29504</a>: External Tools' Eclipse variables are disallowed to have text before/after<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16618">16618</a>: [ExternalTools] Re-launch last External Tool hotkey <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26523">26523</a>: NPE in getHyperLink<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29573">29573</a>: External tool variable scope is too restrictive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29672">29672</a>: When external tool builders go bad<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29152">29152</a>: Migrate extension point schema ownership<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29148">29148</a>: Contribution of Planty 0.9.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28746">28746</a>: Please sort build targets alphabetically<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29322">29322</a>: Revert has no effect on Build Options tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29806">29806</a>: Default script name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29812">29812</a>: Define placeholder for Ant View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29811">29811</a>: Add "Ant View" to top level menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28306">28306</a>: External tool builder not deleted on cancel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28577">28577</a>: External tool builder not added<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28769">28769</a>: New Ant View doesn't gracefully handle missing targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29449">29449</a>: SearchForBuildFilesDialog.searchForBuildFiles optimization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29663">29663</a>: Descriptions in the AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29818">29818</a>: Replace "Go To File" with "Open With ->"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3079">3079</a>: [ExternalTools] Clicking on output should open resource<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27684">27684</a>: Tasks and Types lists need to be sorted<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 14, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26688">26688</a>: Rendering of Ant projects in the Ant View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27699">27699</a>: Move up/down enabled when no selection and only one target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29180">29180</a>: Support double-click in the selection dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28809">28809</a>: ANT_HOME not set on first run of Ant tool<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27540">27540</a>: Run Ant vs. Ant View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19623">19623</a>: [ExternalTools] Display full command line for external tool<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29220">29220</a>: Ant view execution order contains extra node<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29221">29221</a>: Run as Ant does not report anything on some failures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24338">24338</a>: Cancelling an Ant run can take a long time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21012">21012</a>: [ExternalTools] Cancel tool does not cancel tool<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28933">28933</a>: Cannot add tasks/types from folder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28876">28876</a>: Ant View in M4 should split vertical<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29269">29269</a>: ClassNotFoundException: TaskLineTracker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26978">26978</a>: Ant targets tab shouldn't add all targets by defaultt<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26882">26882</a>: Need "run for build kinds" UI for project builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28431">28431</a>: Variable expansion is using incorrect path separators<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28569">28569</a>: Browse workspace dialog needs colon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28570">28570</a>: Missing mneumonic for copy button in External Tools builders page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28305">28305</a>: Edit properties for Launch Configuration for External tools<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 7, 2003
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27983">27983</a>: Ant logger does not respect console buffer size<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 17, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28276">28276</a>: Should not expose "ant class loader" option to user<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 16, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28301">28301</a>: Creation of an External Tool Builder gets name wrong.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28306">28306</a>: External tool builder not deleted on cancel<br>
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 13, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27984">27984</a>: Total build time wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23661">23661</a>: [ExternalTools] Launching Ant on xml file that is in the active editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20581">20581</a>: [ExternalTools] Variables should insert at caret<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26182">26182</a>: Ant preference page has conflicting mnemonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26200">26200</a>: External tools menu is missing mnemonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27525">27525</a>: Remove All Projects and Remove all build files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28052">28052</a>: AntProcessBuildLogger doesn't handle empty locations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27804">27804</a>: VariableContextManager and ExternalToolsPlugin#startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28130">28130</a>: 1.3 incompatible compile when target, source set to "1.3" using 1.4.* vm<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28136">28136</a>: Ant view "Run" button is ambiguous<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28213">28213</a>: Adding a file to the Ant view that already exists takes way too long<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26689">26689</a>: navigate from ant view to editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26554">26554</a>: Ant view should update when projects closed/removed<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 10, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27328">27328</a>: Search for build file does not remeber last search text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27541">27541</a>: Cannot add an Ant External Tool Builder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27050">27050</a>: NullBuildLogger no longer needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16574">16574</a>: [ExternalTools] External tool builders should use same set of external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27101">27101</a>: AntView enhancement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27686">27686</a>: Having both Run Ant and Run Ant... in the same menu is problematic<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27669">27669</a>: Ant view toolbar is misleading<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27615">27615</a>: Incorrect button enablement on AntClasspathPage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22793">22793</a>: [ExternalTools] Ant preference page jar area changes size<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27814">27814</a>: AntLaunchShortcut refererences internal debug UI class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27665">27665</a>: Buildfile hyperlink off by 1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27323">27323</a>: can only single-select active targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27700">27700</a>: Ant View: I can activate a target more than once<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27810">27810</a>: BuilderPropertyPage makes multiple dispatching listeners<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15405">15405</a>: Make all ANT configuration defined at config level<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27841">27841</a>: Illegal reference to LaunchGroup and DebugUIPlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27832">27832</a>: Easy to cut off the "Reuse Ant classloader" option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27831">27831</a>: Save changes prompt from classpath tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25649">25649</a>: Add action to add ant project to ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27505">27505</a>: Ant specific actions in External tools base<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27865">27865</a>: Can't cancel AntView search<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27702">27702</a>: IllegalArgumentException in AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27846">27846</a>: Cannot add new ext tool builer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20856">20856</a>: [ExternalTools] Preferences/Ant/Classpath inconsistency<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27440">27440</a>: Cached classloader misses changes to tasks / types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25650">25650</a>: Add action to ant view to search for build files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27954">27954</a>: Merge Main and Options tabs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27841">27841</a>: Ext tool builders have wrong icon and NPE'd<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17782">17782</a>: [ExternalTools] Custom tasks not checked for validity<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26455">26455</a>: -find option not yet implemented<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27703">27703</a>: Add classpath tab for Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27776">27776</a>: Don't use the term "Ant Script"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27780">27780</a>: Ant Preference page reorganization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27856">27856</a>: Description field on ExternalToolsMainTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27964">27964</a>: NoSuchElement exception in AddCustomDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27956">27956</a>: Create Ant Main tab to limit location selection<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 03, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20014">20014</a>: [ExternalTools] Tool location should accept only files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26918">26918</a>: Projects with external builders cause NPEs when built in headless mode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26671">26671</a>: Ant external tool hangs Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25709">25709</a>: Lists on Targets page of External Tools properties need scrollbars<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26637">26637</a>: Process timestamp showing as launch configuration property<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26638">26638</a>: Too much logging to the log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26995">26995</a>: Run Ant action should prompt for config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26449">26449</a>: pref page: set ANT_HOME 'Browse' button size is unusual<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27500">27500</a>: Ant tasks do not always have a name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25712">25712</a>: external tools tabs missing mneumonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27124">27124</a>: Adjust hyperlink for adorned tasks in Ant output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27049">27049</a>: AntProcessBuildLogger does not write to logfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24704">24704</a>: Tasks with the same name can be entered via the pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27345">27345</a>: "Don't ask again" preference when migrating external tool builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27128">27128</a>: Hyperlinking for Ant tasks does not work on older Ants<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27141">27141</a>: [External Tools] Unexpected Run Ant dialog behaviour.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27531">27531</a>: Browse for Ant home should store last location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27157">27157</a>: Two launch histories for external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27534">27534</a>: Extra runtime classpath entries lost if Ant home specified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25500">25500</a>: Add JAR to classpath should default to workspace root<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13144">13144</a>: [ExternalTools] Ant preference page details<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27449">27449</a>: External Tools/Ant should honour dialog font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27206">27206</a>: Additional ant classpath urls do not show up for adding tasks/types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24865">24865</a>: Misc Restricted to Selected Objects in Breakpoint Properties dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27265">27265</a>: Adornment adjustment is incorrect for long task names.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20921">20921</a>: [ExternalTools] Project properties runs autobuild for all projects<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 26, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27009">27009</a>: External tool option tab defaults to "run in background"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24699">24699</a>: Ant classpath should be separated into two components?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26405">26405</a>: AntTargetsTab doesn't save target selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26415">26415</a>: Migrate external tool project builders to use launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26704">26704</a>: Remove External Tools View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26705">26705</a>: Remove "ExternalTool" UI code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26708">26708</a>: output should be the same as from command line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27014">27014</a>: Prompt for argument checkbox should be temporarily removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27033">27033</a>: AntView uses JDK 1.4 method String.split(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26744">26744</a>: [ExternalTools] Console always opens build file with Text editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26636">26636</a>: Cached Ant classloader not reset with classpath change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16849">16849</a>: [ExternalTools] Ant does not respect output level preference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26948">26948</a>: Requesting invalid target execution causes NPE in ProgressBuildListener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26042">26042</a>: Can't run Ant script with new Ant on MacOS X<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26606">26606</a>: Ant errors not showing in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19520">19520</a>: [ExternalTools] Performance suffers with console log ouput enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22402">22402</a>: [ExternalTools] Port fix for handling spaces in arguments...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26192">26192</a>: NPE from ant targets tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26729">26729</a>: External tools menu does not update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26714">26714</a>: Ant loses preferences<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 19, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26112">26112</a>: "Run Ant..." implies dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6498">6498</a>: [ExternalTools] selecting and building individual targets in ANT scripts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18971">18971</a>: [ExternalTools] Using external tool configs in other contexts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19450">19450</a>: [ExternalTools] menu should limit itself to the first n tools (perhaps n = 20)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21809">21809</a>: Let user specify installation directory of Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24718">24718</a>: Run Ant should be programmatically available<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25059">25059</a>: [ExternalTools] Refresh Scopes dialog should be wizard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25062">25062</a>: Support execution of ant tasks in a seperate thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25821">25821</a>: External Tool] Error Message "External Tool runner internal error"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26061">26061</a>: Changes to Ant classpath don't persist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26418">26418</a>: Remove "launch configuration mode" as an option in external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26629">26629</a>: Error message has reversed arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19450">19450</a>: [ExternalTools] menu should limit itself to the first n tools (perhaps n = 20)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22738">22738</a>: [ExternalTools] Tool arguments should be a wizard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13275">13275</a>: [ExternalTools] Ant Wizard should not "always" be modal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20857">20857</a>: Problems with Ant classpath not being picked up<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 13, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26050">26050</a>: Unnamed projects cause NPE in Ant View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16982">16982</a>: [ExternalTools] Console font setting should be workbench text font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25592">25592</a>: [External Tools] Log console should have autoscroll<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18478">18478</a>: [External Tools] Minor: output not always in right order<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22727">22727</a>: [External Tools] Program tool output not shown on log console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25762">25762</a>: Problem starting JUnit plugin tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25746">25746</a>: Runtime exec support should be in debug core<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25877">25877</a>: should save all files before execute ant script<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23662">23662</a>: [ExternalTools] External tools history manipulation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25907">25907</a>: [ExternalTools] ExternalToolMenuDelegate leaking menus<br>
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 12, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25759">25759</a>: NPE trying to open the antview preferences page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22730">22730</a>: [ExternalTools] Capture output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25397">25397</a>: AntPage flashes when resized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25493">25493</a>: NPE if default target does not exist in external tool builder ant file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25648">25648</a>: Add remove action to ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25468">25468</a>: Backwards compatibility with Ant 1.4.1<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 05, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25509">25509</a>: NPE from InternalAntRunner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25639">25639</a>: Double click in tasks and types tabs should invoke edit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25656">25656</a>: [ant] Cannot add multiple Jars to ant classpath at the same time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25693">25693</a>: Implement support for the -diagnostics option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25647">25647</a>: Add Ant View to Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25698">25698</a>: Global properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25699">25699</a>: Global property files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25702">25702</a>:  [External Tools] Restore defaults does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24525">24525</a>:  Active targets not shown in ant tool property page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24578">24578</a>:  Can't add variable to tool arguments<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 29, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24847">24847</a>: duplicate options not handled the same as cmd line Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25133">25133</a>: Implement support for the 1.5.1 feature: -propertyfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25213">25213</a>: -propertyfile should not abort build if the property file is not found<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24580">24580</a>: Expose more information in TargetInfo<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17803">17803</a>: [ExternalTools] AntPage table should scroll horizontally<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18294">18294</a>: [ExternalTools] Ant preference page: classpath list too wide<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24383">24383</a>: Update the printUsage of InternalAntRunner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24824">24824</a>: DefaultLogger should be used for headless Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20576">20576</a>: [ExternalTools] Should specify order of jars on classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24234">24234</a>: Ant test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24318">24318</a>: Move to Ant 1.5.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25134">25134</a>: Implement support for the 1.5.1 feature: -inputhandler<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 22, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24756">24756</a>: -projecthelp indicates BUILD SUCCESSFUL<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24831">24831</a>: Same URL multiple times in the AntClassLoader<br>
-
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 16, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15821">15821</a>: [ExternalTools] Minor: Ant console "steals" focus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22400">22400</a>: [ExternalTools] Run Ant... action displayed for invalid resources (build I0813)<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 15, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6020">6020</a>: Tasks calling System.exit crash Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23651">23651</a>: [doc] AntTasks and AntTypes refer to non-existant API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23653">23653</a>: [doc] Extra Ant classpath entries extension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24459">24459</a>: AntCorePlugin startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19899">19899</a>: If the user never changes the Ant classpath, it should always be computed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23917">23917</a>: logfile not created in the correct location when path not fully specified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24587">24587</a>: Project properties not set properly if no arguments passed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24696">24696</a>: ExternalTools antrunner.jar is still in the HEAD stream<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24418">24418</a>: Option without necessary corresponding argument not handled correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24594">24594</a>: Targets specified as arguments not recognized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23995">23995</a>: deadlock while running build.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24733">24733</a>: Help text is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24710">24710</a>: Custom ant task classes not found<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 09, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24527">24527</a>: java.io.FileNotFoundException occurs when invoking AntRunner<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 08, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20557">20557</a>: Running an empty ant script takes about 2 seconds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22459">22459</a>: AntRunner prints stack trace on OperationCanceledException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23383">23383</a>: API: Add @since tags<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24290">24290</a>: Ant preferences are only saved at shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23584">23584</a>: Java should be capitalized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17484">17484</a>: [ExternalTools] Adding tasks from JARs in the Ant Preference Page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23664">23664</a>: Better reporting of errors when reading Ant build file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24415">24415</a>: Running an Ant script with console logging turned off writes to OS console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24452">24452</a>: Key clashes within extension point definitions<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23350">23350</a>: Possible NPE<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 01, 2002
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23482">23482</a>: Rework the Core Ant code to be able to use the NLS tools<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14180">14180</a>: Ant -help not function<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19801">19801</a>: AntCorePreferences, Type, Tasks could be a public class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23881">23881</a>: Same error logged three times<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23913">23913</a>: Issues with InternalAntRunner#printHelp(Project)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22714">22714</a>: Arguments line lose spaces when printed to console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23132">23132</a>: -logfile option for ant doesnt seem to work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16740">16740</a>: [ExternalTools] Irrelevant stack trace for errors in Ant build file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19838">19838</a>: Error codes for Ant Core should be public<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21478">21478</a>: Insufficient Ant activation error reporting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23658">23658</a>: Build file is not logged to log console view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22465">22465</a>: Wrong ant script causes fatal error written to console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23924">23924</a>: handling of incorrect / unrecognized arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23720">23720</a>: [doc] Extension point listing is incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22702">22702</a>: XmlLogger not working?<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21479">21479</a>: Ant classpath refers to old 'xerces.jar'<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23832">23832</a>: Update Ant pages on dev.eclipse.org<br>
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.ant.core/r3_0_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r3_0_buildnotes_platform-ant.html
deleted file mode 100644
index ccaa5ea..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r3_0_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,956 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Ant Release Notes </title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build for RC3, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66867">66867</a>: icon allignment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66883">66883</a>: RC2, external tools: VM arguments not forwarded to separate JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55358">55358</a>: Create templates for commonly used tasks and types.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55242">55242</a>: NPE on shutting down Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66734">66734</a>: NPE in RemoteAntProcessFactory from "null" attributes (1.1.x VM)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67057">67057</a>: Migration of builder from 2.0.2 to 3.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67302">67302</a>: AntEditorMarkerUpdater susceptable to CME<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build for RC2, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65655">65655</a>: eclipse.home ant property improperly set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60828">60828</a>: wizard banner for import ant build file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64668">64668</a>: Style (bold/italic) not working in Ant Editor on comments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65086">65086</a>: Missing code completions for attribute values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65075">65075</a>: Outline not cleared when change to empty buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65208">65208</a>: Taskdef undefined<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65758">65758</a>: "&Add Buildfiles" displayed on Ant view toolbar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65582">65582</a>: warning in generated javadoc for AntCorePreferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66171">66171</a>: Polish patch: support view activation via a keyboard shortcut<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65348">65348</a>: Unused sections in anttasks_1.6.0.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65404">65404</a>: Rule conflicts during launch config change notification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64461">64461</a>: Ant Editor image does not update when problem prefs changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65465">65465</a>:	Search for Buildfiles button Search disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64684">64684</a>: DocumentSetupParticipants (easily) interfere with each other<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65757">65757</a>: Different built-in properties from Ant at the commandline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66058">66058</a>: Change project builder "handle" format<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64713">64713</a>: Ant editor locks jars supplying tasks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66303">66303</a>: NPE during shutdown from integrated external too builder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66342">66342</a>: Ant editor indentation problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65391">65391</a>: No confirm before migration of external builder: 2.1.3 -> 3.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64928">64928</a>: Change builder when workspace is locked<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 27, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63448">63448</a>: Exception with non-existent property file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55793">55793</a>: [Editor] Taskdef warnings length is not adjusted correctly in targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63123">63123</a>: Run from context menu of external entity does not build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63165">63165</a>: AntModel#possiblyWaitForReconcile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51333">51333</a>: Position for error markers is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62396">62396</a>: Allow configuration of Ant buildfile warnings and errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64475">64475</a>: Reconciling multiple times for changes to preferences<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 25, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63760">63760</a>: No external tool build on clean if first builder disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63558">63558</a>: formatter removes text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63335">63335</a>: VM arguments text pane should grab horizontal space<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63884">63884</a>: NPE editing Ant builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63604">63604</a>: Modal progress improvements round two<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63339">63339</a>: AntUtil#getFileForLocation(...) has incorrect behavior on WinOS<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 20, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62830">62830</a>: Ant Build and Ant Build... both appear on Run menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63010">63010</a>: Colon for projects label from Ant build tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63142">63142</a>: Error remains after turning off Build before launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63151">63151</a>: NPE parsing buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63045">63045</a>: Use JFace MessageDialogWithToggle<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62826">62826</a>: Remove duplicate property configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62967">62967</a>: VM never exits (using older VM for an Ant build)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63125">63125</a>: Problem from import not reported correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60916">60916</a>: Icon look unalligned<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 18, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61676">61676</a>: AntLaunchShortcut should seed copied config name better<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61788">61788</a>: Cleanup IntrospectionHelpers when editor closes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61947">61947</a>: InternalAntRunner.java has 2 copyright notices<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51381">51381</a>: Add "Import from Ant buildfile"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51781">51781</a>: Top level tasks causing problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61396">61396</a>: Consistency in Ant shortcuts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57379">57379</a>: partition scanner doesn't handle CDATA sections<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61830">61830</a>: Ant Editor shows bogus errors when using property setting tasks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62234">62234</a>: Ant color settings should NOT be shown in Workbench>Colors and Fonts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61402">61402</a>: Remove AntEditor annotation and quick diff pref pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62563">62563</a>: NPE editing external Ant file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34971">34971</a>: Global and local properties and property files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61553">61553</a>: formatter should expose api for formatting docs & tags together<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54723">54723</a>: [Editor] No indication of error, no outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58374">58374</a>: Building with external build files from editor "context"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61955">61955</a>: dangerous practice of catching Throwable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54466">54466</a>: ant formatter preference page should include preview window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62237">62237</a>: Ant syntax coloring options lacks a preview<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62403">62403</a>: Create separate Code Assist page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61806">61806</a>: Move off of InputDialog deprecated code<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 11, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51416">51416</a>: Migrate "Run Ant..." action to Run context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61018">61018</a>: Copy and Paste in Ant Editor inserts extra unwanted tabs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60303">60303</a>: Variables buttons missing mnemonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55128">55128</a>: Properties value hover shown for text that is not a property<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59737">59737</a>: Not all properties set during parsing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61394">61394</a>: Attribute and element elements of macrodef do not present attribute proposals<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61602">61602</a>: ant.ui AntUtil not compiling in HEAD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61605">61605</a>: more robust version of AntUIPlugin.stop<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61284">61284</a>: Failing code completion tests for Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55618">55618</a>: [Editor] Hover value for old property<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60693">60693</a>: No code completions for starting a buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60348">60348</a>: Template proposals show up when code assist for properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60145">60145</a>: ant editor has wrong values for properties for <import><br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60362">60362</a>: Run Ant forces workspace build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61617">61617</a>: valid chars in content type ids<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61652">61652</a>: Move Ant outline actions to Debug context menu launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61689">61689</a>: Ant doesn't release taskdef classes after a run<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 4, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60163">60163</a>: Accessibility: New Builder Dialog missing object info for textInput controls<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60546">60546</a>: Default target null does not exist in this project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60521">60521</a>: Global classpath Ant home should indicate default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60807">60807</a>: Targets tab checkboxes not using dialog font<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60067">60067</a>: Ant Editor adds marker which cannot be deleted<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59985">59985</a>: Move from ProgressMonitorDialog to IProgressService.busyCursorWhile()<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60312">60312</a>: Adapt to changes from bug 60258<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60473">60473</a>: projecthelp does not work for separate VM builds<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60678">60678</a>: PDE ant tasks fail to load when self hosting<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60691">60691</a>: AntModel should reuse classloader until classpath changes<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60761">60761</a>: Ant build file content-type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61652">61652</a>: Double quoting doesn't work for variable expansion with external tools<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build April 27, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59755">59755</a>: Cannot set ant home to ant used in 2.1.x<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59862">59862</a>: Code completion could cache the current prefix<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59024">59024</a>: template code completion doesn't use prefix to limit options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59866">59866</a>: Copy/Paste of entire lines breaks indentation in Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57855">57855</a>: Sorting targets option is completely hidden<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53339">53339</a>: Make the InternalAntRunner more lazy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55662">55662</a>: formatter references deprecated code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59513">59513</a>: ant input task causes stack overflow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59917">59917</a>: NPE in AntEditorCompletionProcessor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60011">60011</a>: NPE from AntEditor during shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55436">55436</a>: Template additional proposal info is not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59863">59863</a>: Code completion when text selection is not empty<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build April 20, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47285">47285</a>: Open External File does not work on build.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58426">58426</a>: NPE in PartiallySynchronizedDocument.replace(..)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25590">25590</a>: Should be possible to use variables specifying Ant classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43266">43266</a>: Using variables in Ant Properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57839">57839</a>: Mimic classpath tab support for variables in the classpath pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58263">58263</a>: organization of colors for Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55429">55429</a>: Ant editor typing can be slow due to reconcile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57195">57195</a>: Auto-indent in Ant editor is broken<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build April 13, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55047">55047</a>: [Editor] Ant tasks and types not cleared when parsing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37943">37943</a>: ${project_loc} for ANT ext tool builder location can't find targets.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56199">56199</a>: AntEditor move to file buffer document provider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58206">58206</a>: Help with memory footprint: dispose Ant model for Ant doc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52688">52688</a>: Provide "build_project" variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57317">57317</a>: Typing in Ant buildfile location is brutally slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57332">57332</a>: Too much validation going on in launch config Location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57984">57984</a>: NPE from startup with open Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55824">55824</a>: macrodef code assist offers wrong attributes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56296">56296</a>: code assist for custom tasks: type references<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build April 6, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56959">56959</a>: Move the AntEditorMarkerUpdater to make use of MarkerUtilities<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57140">57140</a>: Ant launching and the prelaunch checks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55823">55823</a>: problems view not updated until save<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54458">54458</a>: formatter swallows text when attribute values include --><br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51215">51215</a>: fix partioner to handle angle brackets in attribute values.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56657">56657</a>: External tool builders need to adapt to new build story<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55355">55355</a>: Move to new template extension point for ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40255">40255</a>: Ant formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54461">54461</a>: add an AutoIndentStrategy to ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55429">55429</a>: Ant editor typing can be slow due to reconcile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55433">55433</a>: Enhance property file support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55782">55782</a>: Edit/Remove buttons incorrectly enabled for the AntEnvironmentTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55982">55982</a>: Rename "alternate JRE" to "separate JRE"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49830">49830</a>: Code assist for refid<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54935">54935</a>: Ant editor title image does not indicate error when first opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55961">55961</a>: Move/Add the link with editor action to the view menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57000">57000</a>: Do not handle Property file names with spaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56297">56297</a>: code assist for custom tasks: enumerations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56299">56299</a>: code assist for custom tasks:  boolean attributes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56488">56488</a>: template support should be context aware<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Mar 30, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55818">55818</a>: AntEditorContentOutlinePage retains too much state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55813">55813</a>: ProjectHelper static state needs to be cleaned up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56055">56055</a>: Remove top level ant.jar in org.apache.ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56293">56293</a>: editor incorrectly reports "taskdef class not found<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56258">56258</a>: escape entities in ant warning hovers<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Mar 23, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54756">54756</a>: add *.macrodef & *.ent to editor's file associations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50303">50303</a>: Ant Editor outline "Link with Editor"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55118">55118</a>: NPE from AntModel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55313">55313</a>: Add a mnemonic for one of the launch config tabs for builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38935">38935</a>: Completion for custom ant tasks in ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54933">54933</a>: Ant error overlay drawn in different quadrant than Java<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37180">37180</a>: Ant editor errors and warnings should appear in the problem list<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49829">49829</a>: Code assist should include previously defined macrodefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50452">50452</a>: Another way to resolve a location for a tools.jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53688">53688</a>: Update Ant preference page to reflect classpath tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53715">53715</a>: Add environment tab to Ant launch config types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55003">55003</a>: Nodes with warnings have error icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55140">55140</a>: Build hangs if running on separate VM that is older than 1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52076">52076</a>: Preference page for the Ant Formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52449">52449</a>: Show error for target that depends on a non-existant target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55119">55119</a>: Assertion failed dumped to console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55122">55122</a>: Ant editor code assist locks up Eclipse if reconciling error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55543">55543</a>: Opening an Ant editor is taking 10 seconds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54937">54937</a>: [Editor] Changing property does not change value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53458">53458</a>: "Import" elements open with select element in open editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50986">50986</a>: Classpath tab for External tool Ant builds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55306">55306</a>: Incorrect schema for org.eclipse.ant.core.extraClasspathEntries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51307">51307</a>: calls to taskdef printing "Dropping \d from path as it doesn't exist"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52446">52446</a>: Label for tasks/types has leading slash<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Mar 16, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54115">54115</a>: Hungry code assist (is eating characters)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54359">54359</a>: Button enablement on the classpath tabs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54361">54361</a>: Missing Ant home no longer indicated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52724">52724</a>: Errors from the ant task do not provide links<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51825">51825</a>: add to outline view "filter top level tasks and types" action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54731">54731</a>: remove dependency on apache ant in ant core and ui buildfiles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54784">54784</a>: NPE from XMLTextHover<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38267">38267</a>: tools.jar needs to be updated when setting to run in a separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51698">51698</a>: Output still displayed when "Capture output" off in sep VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54369">54369</a>: Remove pref for "Warn ... for changing the Ant JRE"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53152">53152</a>: Eclipse "locks up" aka super slow when editing a large build.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54664">54664</a>: Cannot run a build.xml from a non-Java project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48934">48934</a>: Move to use the Platform UI color support<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Mar 9, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53316">53316</a>: Hidden functionality of the copy button for builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53511">53511</a>: External tool builders run in background when they shouldn't<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49445">49445</a>: outline and ant runner views should  include imported targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34685">34685</a>: Error indicated but no error squiggle or message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53681">53681</a>: NPE if external entity does not exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49014">49014</a>: Classpath should be expanded on entry into tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48051">48051</a>: Add "Restore defaults" button to the Ant Classpath Page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48053">48053</a>: Remove Update classpath functionality from the JRE tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52883">52883</a>: SeparateVM Ant builds cannot be specified to run in the foreground<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53778">53778</a>: Ant classpath missing global entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53891">53891</a>: Spelling error in Ant Code Formatter preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53696">53696</a>: Failing Ant UI test: testMixedElement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53547">53547</a>: Ant Outline view - toggle control to Show/Hide included elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53690">53690</a>: Code completion proposals case sensitive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52211">52211</a>: Persisting classpath when the same as default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40688">40688</a>: Code assist for closing a task should not need "&lt/"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54113">54113</a>: [Editor] Highlight range incorrect for selected element<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53687">53687</a>: StringIndexOutOfBoundsException on code completion<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52040">52040</a>: Ant editor reports error on my custom task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48041">48041</a>: Updating classpath support for separate VMs<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Mar 2, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52973">52973</a>: Better message for specifying an Ant home that does not exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52972">52972</a>: Ant classpath tab does not indicate an error if the Ant home has been deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53115">53115</a>: Contribute remote Ant support as an extraClasspathEntry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53244">53244</a>: External tool builders generate outgoing "ATTR_LAUNCH_IN_BACKGROUND" change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51726">51726</a>: Show In is enabled for selections in Ant editor outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51731">51731</a>: Navigate/Show In for external elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51347">51347</a>: External entity support (Open With etc)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53125">53125</a>: Navigate support for Import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53142">53142</a>: ClassCastException determining properties for top level code assist<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 24, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52209">52209</a>: JARs from global classpath not found for build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52332">52332</a>: caret off by one after code assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51579">51579</a>: Pref Page Ant/Editor/Annotations; 2 checkboxes do not use dialog font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51784">51784</a>: Setting Java executable for Alternate JRE is forgotten<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37944">37944</a>: .project file paths to external tools hardcoded to specific project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52400">52400</a>: ClassCastException in BuilderPropertyPage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52713">52713</a>: Provide descriptions for Ant and Program config types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52329">52329</a>: Move to Ant 1.6.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40618">40618</a>: No JRE tab for Ant project builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47373">47373</a>: Setting properties for separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51733">51733</a>: Code assist: no completions available<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51007">51007</a>: Review the "remove Xerces" code in AntRunner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47901">47901</a>: Extend contributed "object"s extension points to specify whether to be included in separate VM build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52793">52793</a>: Builder Launch in Background setting is forgotten<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47312">47312</a>: Setting tasks and types for separate VM build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51101">51101</a>: [Dialogs] New Builder Dialog should not come up w/ an error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51393">51393</a>: Ant in external JVM doesn't honor extraClassPath extension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38821">38821</a>: Ant editor: indenting size<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 17, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51694">51694</a>: base directory not honored when run in separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51696">51696</a>: alternate label for Ant build file "Location"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51789">51789</a>: Run Ant... in ant view does not run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52200">52200</a>: NPE possible if hovering over text in AntEditor with no project node<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52182">52182</a>: BadLocationException during reconcile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51937">51937</a>: Widget is disposed problem possible from BuilderPropertyPage<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 12, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51882">51882</a>: Project builders property dialog fails with graphic disposed<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 10, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51332">51332</a>: Outline positions to wrong offset in editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50389">50389</a>: Problem altering order of ant targets when mutliple targets selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49554">49554</a>: JDK 1.5 and Ant Editor troubles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51298">51298</a>: No "Environment" tab on program project builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51319">51319</a>: "Run" in Outline View does not work for default target<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Feb 3, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50795">50795</a>: Possible lockup from executing implicit target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50410">50410</a>: Cannot use older Ant installs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50494">50494</a>: AntView context menu cleanup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50505">50505</a>: Malformed URL exception from antcore preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49275">49275</a>: Ant Editor Outline view - no longer works as of M5<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49792">49792</a>: Update the Ant code assist support files for Ant 1.6.0<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 27, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45915">45915</a>: Checkbox table view for external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44125">44125</a>: Performance issues with Ant editor: slow to open<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50351">50351</a>: Should not be able to remove/edit wrapped builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40501">40501</a>: Missing Ant syntax errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44995">44995</a>: Option to hide properties in Ant outline view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50529">50529</a>: incorrect error annotation length for error target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44343">44343</a>: Create an object model for Ant UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50575">50575</a>: Editor selection is incorrect for some multiline elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50046">50046</a>: Add property text hovering to the Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49386">49386</a>: code assist should include previosly defined properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50653">50653</a>: No code assist proposals when starting in error state<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 20, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50019">50019</a>: No overview ruler for the AntEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49579">49579</a>: Adapt to the marker annotation changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50016">50016</a>: AntEditorPreferencePage does not present all of the annotation prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34548">34548</a>: Add 'Run task' to outline view of build.xml files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50144">50144</a>: Classpath for separate Ant build is duplicated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50170">50170</a>: TaskDescriptionProvider could be shared by all AntEditors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33361">33361</a>: [External Tools] copy button does nothing<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 13, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49747">49747</a>: misspelled title in Any Property File Selection Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49709">49709</a>: ClassCastException when adding non-file as a property file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32727">32727</a>: Console color for Ant not updated until forced to redraw<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45923">45923</a>: Move to Ant 1.6<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49810">49810</a>: Code assist for attributes of a target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41591">41591</a>: Ant 1.6 new options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49886">49886</a>: Hide internal targets icon needs to be updated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49697">49697</a>: ant editor outline page's label provider is case sensitive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49380">49380</a>: editor outline should have icon for macrodef<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44491">44491</a>: Move to using ProjectHelper2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47581">47581</a>: Duplicates on the Ant runtime classpath<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Jan 6, 2004
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48803">48803</a>: Run ant doesnt save build.xml before display of run dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49016">49016</a>: [Ant view] Missing acclerator keys<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 15, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48127">48127</a>: Ant will not launch with an incomplete class path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48445">48445</a>: Ant core external tool builder not successful<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47422">47422</a>: Internal error on launching ant target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48747">48747</a>: Specify Ant logger argument then build fails<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 9, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47941">47941</a>: Ant core buildfiles doesn't work without binary plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48098">48098</a>: NPE creating new Ant launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48012">48012</a>: BuildFailedTracker does not handle failure message with no line numbers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44935">44935</a>: Xerces warnings for Ant classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47137">47137</a>: Context menu actions of the AntEditor outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48113">48113</a>: Select an element in the AntView after single deletion<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37332">37332</a>: Targets tab needs to reset if classpath changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39251">39251</a>: Need some way for variables to provide multiple arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47139">47139</a>: changing color pref does not update editor until re-opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47140">47140</a>: Ant editor missing current line highlight<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47289">47289</a>: Ant UI giving wrong error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48184">48184</a>: org.apache.ant must not list any dependencies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48165">48165</a>: Error when location is corrected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43814">43814</a>: Ant Runtime error, but do not affect eclipse work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46897">46897</a>: Ant view not sorted after a project is renamed.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47933">47933</a>: Multiple listeners added to fields in ExternalToolsMainTab<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Dec 2, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47745">47745</a>: Remove xerces from ant ui tests for seperate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45974">45974</a>: Move the Ant projects to use the PDE required plugins container support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44565">44565</a>: StringIndexOutOfBounds from BuildFailedTracker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47308">47308</a>: Add Ant task error in preferences in 3.0M5<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47368">47368</a>: Ant custom tasks and types need to use variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47748">47748</a>: Should not prompt when running tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45985">45985</a>: BUILD FAILED: java.lang.NoSuchMethodError: attempting to use jar task on Ant 1.6b2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42983">42983</a>: Variables get run mutliple times for Run ant...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47370">47370</a>: Improve AntPage.getContents(boolean)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47477">47477</a>: Improve Builders property page description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47821">47821</a>: Do not force the expansion of the Ant classpath entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30638">30638</a>: Ant Runtime page is cut off in High Contrast<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 25, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47155">47155</a>: Context menu for plugin.xml file should not have Run Ant...<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 20, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46916">46916</a>: Ant source is shipped in the wrong directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47133">47133</a>: Non-Java project Ant build defaults to same VM<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 19, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47043">47043</a>: Update the classpath for a separate JRE leads to a NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46815">46815</a>: VM widgets enabled when set to run in same VM<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 18, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36406">36406</a>: Ant target icons conflict with GTK tree expander<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46740">46740</a>: Loss of the separate output directories for org.eclipse.ant.ui<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46734">46734</a>: No error logged if Build logger incompatible instance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46703">46703</a>: Moving multiple Ant classpath entries does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43798">43798</a>: Incessant dialogs when trying to set the JRE for Ant config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46819">46819</a>: enable/disable builder bug - cannot cancel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29677">29677</a>: Need A Way To Run Ant Instead of The Default Java Builder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45899">45899</a>: Make build in separate VM the default setting for Ant launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45995">45995</a>: Setting Ant home adds jars in reverse order<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Nov 11, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46049">46049</a>: Rename "external tool builders" property page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45644">45644</a>: NumberFormatException if multiline build errors in remote VM build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44093">44093</a>: Tests for external tool builder migration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45781">45781</a>: tools.jar on classpath<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 28, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44494">44494</a>: Remove direct dependancies on the Xerces plugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44988">44988</a>: Incorrect javac output with -verbose<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45285">45285</a>: Multi-select in AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44368">44368</a>: Space between buttons on Ant tasks and types page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45473">45473</a>: AntRunner.setMessageOutputLevel should only set when changed from dflt<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45288">45288</a>: Help: Running Ant buildfiles programmatically incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45881">45881</a>: NPE in AntCorePreference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45844">45844</a>: Ant problems in I20031029 when no tools.jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45450">45450</a>: Rework the presentation of the Ant classpath<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 21, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44369">44369</a>: Duplicate mneumonic on the Ant Editor Code Assist page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44271">44271</a>: Update OutlinePreparingHandler for deprecations in IDocument<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41289">41289</a>: TaskLinkManager needs to be cleaned up earlier<br>
-
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Oct 7, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43845">43845</a>: Ant Editor code assist should display error in the status bar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43541">43541</a>: Run Ant... launch config comes up in dirty state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44042">44042</a>: Move the Ant test console line tracker to implement IConsoleLineTrackerExtension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35687">35687</a>: AntEditor should demonstrate proper use of MultiLineRule in conjunction with damager/repairer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44090">44090</a>: Error building org.eclipse.core.resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38243">38243</a>: Editing an external tool builder modifies the .project file<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Sept 30, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39250">39250</a>: DnD build file into ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37287">37287</a>: Ant view not persisted within session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38677">38677</a>: Ant target table sorting and filtering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43522">43522</a>: Ant preference page does not update for preference change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43255">43255</a>: Junit tasks showing "null"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43384">43384</a>: Info to make running separate JRE easier<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43542">43542</a>: Ant home Browse button on the AntClasspath tab has incorrect layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40269">40269</a>: Document requirements for developing Ant tasks in self hosting workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43773">43773</a>: Project Resource doesn't Refresh for External Tool in separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42595">42595</a>: NPE while scrolling background ant output in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43626">43626</a>: BuildFailedTracker not adding link<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43628">43628</a>: Review all uses of getFileForLocation(IPath)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40500">40500</a>: Incorrect code assist in AntEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43618">43618</a>: Child jvm for ant build not exiting when build fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43530">43530</a>: Newly added classpath elements should be selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43081">43081</a>: Ant Errors not linking to source when using linked folders<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Sept 23, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38995">38995</a>: Cannot run target from antview - "An error occurred please see log for more details<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43322">43322</a>: [External Tools] Cannot create new 'program' config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41819">41819</a>: Document the antRunner application entry point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38389">38389</a>: AntClasspathTab top label gets truncated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43382">43382</a>: AntWorkingDirectoryBlock not disabled fully for same VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41877">41877</a>:	Change from "show" to "do not show"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43287">43287</a>: [Dialog] Ant Build Targets tab font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43320">43320</a>: Ant "tables" are not "delete" enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43363">43363</a>: Cannot use user's xerces to parse targets<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Sept 16, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42334">42334</a>: Pref Page Ant/Runtime Button labeling inconsistencies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42808">42808</a>: After creation of new Ant object select that object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33673">33673</a>: Option to filter subtargets from Ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42926">42926</a>: ant.home not set at parse time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42491">42491</a>: Can edit contributed Ant objects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42495">42495</a>:	Change in DirectoryDialog behavior dealing with ampersands in message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42741">42741</a>:	Config classpath does not update for change in global Ant home<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42983">42983</a>:	Variables get run multiple times for Run ant...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43043">43043</a>:	-help does not work for Ant build in separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39295">39295</a>:	Sort targets alphabetically in Ant outline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42966">42966</a>:	New option shortcuts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34001">34001</a>:	Warn user when specifies Xerces on Ant runtime classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38815">38815</a>:	update Xerces in the Ant runtime classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42984">42984</a>: No way to set working directory, VM args for Ant processes<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Sept 9, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42327">42327</a>: [Dialog] "Order targets" dialog margin spaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42063">42063</a>: Pref Page Ant/Runtime Add.. dialog margin spacing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41998">41998</a>: RemoteAntBuildListener server connection not closed on failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42351">42351</a>: Ant UI and help contexts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42420">42420</a>: No progress shown when external program running in foreground<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41068">41068</a>: Ant in separate VM does not color output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41156">41156</a>: Links for tasks missing if use -debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42222">42222</a>: Separate VM console output not showing till end<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41997">41997</a>: Clean up RemoteAntBuildLogger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37653">37653</a>: ant.home is not set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41671">41671</a>: Ant error popups message box and prints into the console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42136">42136</a>: External tools; Ant BuildConfiguration; JRE tab problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42333">42333</a>: Ant build failed error messages no longer shown in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42484">42484</a>: NPE if ctrl dbl click in Ant properties block<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42737">42737</a>: Subtarget -> internal target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39294">39294</a>: Allow filtering of helper targets in Ant outline<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Sept 2, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41581">41581</a>: The Ant UI packages are incorrectly named<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42137">42137</a>: External tools; Ant Build Configuration; Properties tab; button sizes<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Aug 27, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42029">42029</a>: eclipse.running flag not being set properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42073">42073</a>: Can't manually build plug-ins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40972">40972</a>: Ant class loader should define findClass, not loadClass<br>
-<h1>
-
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Aug 26, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41779">41779</a>: Run ant has no effect from within the synchronize view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39567">39567</a>: Use a Job for the BackgroundResourceRefresher<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41835">41835</a>: Ant in separate VM setting eclipse.running<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41841">41841</a>: Use InternalAntRunner as Ant entry point for separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41521">41521</a>: AntConsoleColorProvider should be marked as readOnly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41816">41816</a>: Ant Editor annotation list should be dynamically sized.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40069">40069</a>: Move Ant editor to use standard annotation types<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Aug 20, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41498">41498</a>: Update doc for Ant properties extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41301">41301</a>: BuilderPropertyPage should have both enable and disable buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41300">41300</a>: No multi-select in the External Tool builder property page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41277">41277</a>: Move to Ant 1.5.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41616">41616</a>: Ant view play button should be async<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41717">41717</a>: NPE in AntEditor on latest text framework<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Aug 12, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40922">40922</a>: Ability to disable an external tool builder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41273">41273</a>: Build Options page does not use dialog font for widgets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41157">41157</a>: links missing in seperate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41120">41120</a>: Buildfile link not available when using -debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40490">40490</a>: Scoped external tool builder not triggered if change in different project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41119">41119</a>: Multi-line task output differs from cmd line Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40037">40037</a>: Duplicate properties silently fail<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41419">41419</a>: Can overwrite contributed properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41454">41454</a>: NPE out of AntProcessBuildLogger<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build Aug 6, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34415">34415</a>: Missing file link in build failed message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40502">40502</a>: Provide an extension to set ant property values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40871">40871</a>: No code assist proposals for properties in echo task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40935">40935</a>: BUILD FAILED message with ant: handling "-Debug"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40951">40951</a>: NullPointerException at autocompletion on sql tag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41041">41041</a>: Remote Ant should not have extra classpath entries on the classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24129">24129</a>: Ability to (optionally) run ANT in a separate JVM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41158">41158</a>: NPE from ant classpath provider<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build July 29, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40672">40672</a>: NPE during full build in ExternalToolBuilder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37248">37248</a>: Make org.eclipse.ant.tests.ui part of the build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37902">37902</a>: Code-Assist for <fail> tasks makes incorrect suggestions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40733">40733</a>: Contributed Ant objects should indicate contributor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40778">40778</a>: Questionable Ant warning: "library tools.jar not on runtime classpath"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40165">40165</a>: Notify user when Ant does not have tools.jar on the Ant runtime classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40879">40879</a>: Tests needed for Ant Core<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build July 22, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40254">40254</a>: Ant code assist should not require "<"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40212">40212</a>: incorrect location of 'properties' in context menu of ant view<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build July 16, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40044">40044</a>: Incorrect error message if remove auto activation delay<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38844">38844</a>: Two code assist entries for WsdlToDotnet task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40138">40138</a>: Incorrect dialog titles for adding / editing tasks / types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40277">40277</a>: Update the package names for the Ant UI tests<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build July 15, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39722">39722</a>: Ant core schemas should mark the library as a resource<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39713">39713</a>: Ant build not triggered on second save<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38614">38614</a>: External tool builder not triggered when checking project out from repository<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39215">39215</a>: Ant is run in Java Applet security mode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39067">39067</a>: Allow to run same build.xml multiple times<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39814">39814</a>: core.resources has invalid external tool builder??<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39978">39978</a>: Edit button should be disabled for multiselect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34597">34597</a>: Search results are not shown in overview ruler or as squigglies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40048">40048</a>: Ant editor has no syntax highlighting<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build July 8, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38525">38525</a>: Deadlock refreshing resources for an external tool when in background<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38900">38900</a>: Ant target names not quoted when "Run Ant in a separate Java virtual machine" is checked<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build June 17, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38820">38820</a>: Ant editor: Content Assist wrong behaviour with upper case<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38728">38728</a>: Remove AntClassloader workarounds for self hosting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38707">38707</a>: Working sets should not be considered for full builds<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build June 10, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38023">38023</a>: NPE attempting to Run as > Ant Build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38645">38645</a>: Exception occured creating launch configuration tabs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34683">34683</a>: Standardize the parser used throughout ExternalTools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38609">38609</a>: External tool project builders always run in background<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build June 3, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38142">38142</a>: Unknown extension point specified in org.eclipse.ui.externaltools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37522">37522</a>: properties with capitals are lost in content assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38029">38029</a>: Build fails resulting from errors in build file provides no link<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37516">37516</a>: AntRunner should return an IPlatformRunnable return code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38284">38284</a>: [External Tools] Illegal access to DebugUIPlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37529">37529</a>: Ant UI tests failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38287">38287</a>: TVT21: Use of variable makes the string difficult to translate<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 13, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37060">37060</a>: Ant core preference store persistance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37173">37173</a>: VariableSelectionDialog needs a key listener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37451">37451</a>: XDOCtasks.xml does not need to be included in binary plugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37520">37520</a>: Cannot edit properties from double click<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37502">37502</a>: Property icon missing in Ant editor outline and from content assist proposals<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35834">35834</a>: Action set icons: some color; some not<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32444">32444</a>: No configurability for code completion in Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20169">20169</a>: Help context ids for External tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25337">25337</a>: External Builder Configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31699">31699</a>: Ant editor completion should provide minimal required keys<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36869">36869</a>: WorkingSetComponent should allow creating/editing of working sets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36971">36971</a>: Classpath not set correctly for parsing target<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build May 06, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36574">36574</a>: Additional classpath entries on Ant dont take effect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36848">36848</a>: Support double-click in variable selection dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37088">37088</a>: Argument expansion consistently fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37074">37074</a>: External tool builders should not default to run in the background<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37007">37007</a>: NPE with missing name for property<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37185">37185</a>: Properties not sorted properly after edit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37059">37059</a>: Better error reporting when arguments cannot be expanded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37094">37094</a>: Specifying -D with spaces differs from cmd line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36875">36875</a>: Targets tab defaults 50/50 split for names and descriptions<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build April 29, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35511">35511</a>: NPE running external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36444">36444</a>: Ant view needs a refresh action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36581">36581</a>: External tool closed when Eclipse exits<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29316">29316</a>: Classpath entries and task/type paths separators not platform specific<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36870">36870</a>: Separate the Ant UI from ExternalToolsUI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37056">37056</a>: NPE creating new Ant config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36937">36937</a>: WorkingSetComponent should set the working set images<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36538">36538</a>: Add a ${variable} that prompts the user with a dialog<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Eclipse SDK Build April 22, 2003
-<h3>
-Resolved Bugs</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35507">35507</a>: Preference pages do not set help on control<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35508">35508</a>: Ant editor preference page doesn't set widget fonts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34608">34608</a>: Exception using content assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35497">35497</a>: ArrayIndexOutOfBounds on external tools page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35726">35726</a>: Remove unused icons in External Tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34984">34984</a>: RunTargetAction causing parsing of build file out of ProjectNode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36076">36076</a>: Ant View does not refresh for projects outside the workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31691">31691</a>: Allow unrecognized arguments to pass through<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34488">34488</a>: When "-quiet" no report of build success or failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36570">36570</a>: Ant view parses files during shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34709">34709</a>: Should be allowed to apply changes to Ant launch config when errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35648">35648</a>: No help context for variable selection dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36660">36660</a>: Double click in external tool builder property page should invoke edit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36728">36728</a>: NPE after upgrading<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36353">36353</a>: Move to Ant 1.5.3<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27245">27245</a>: If Ant "core" classes cannot be found, no error reported<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34645">34645</a>: Representation of default targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36158">36158</a>: Workbench Help set on wrong Composite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36596">36596</a>: No completion proposals for properties that contain '-'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36412">36412</a>: Refreshing for specific resource should set an initial selection<br>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.ant.core/r3_1_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r3_1_buildnotes_platform-ant.html
deleted file mode 100644
index b41e819..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r3_1_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,825 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Ant Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-3.1 RC3
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99443">99443</a>: 3.1: TCT 127, 156, 168, 171, 172, 173  - Translation Clarification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99652">99652</a>: 3.1: TCT 213 - Translation Clarification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99865">99865</a>: Java Project creation wizard description: Creates --> Create<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99946">99946</a>: 3.1: TCT 219, 220 - Translation Clarification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99961">99961</a>: 3.1: TCT 221 - Translation Clarification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99499">99499</a>: Internal error during matchjob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100157">100157</a>: 3.1: TCT 222, 224, 225 - Translation Clarification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99444">99444</a>: 3.1: TCT 202 - Suggestion<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99727">99727</a>: Keywords for preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96314">96314</a>: Move to Ant 1.6.5<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-3.1 RC2
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66861">66861</a>: Javac errors in the console do not link to source when using presetdef<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96921">96921</a>: Trailing Space  after property values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97121">97121</a>: It takes forever to open folder with large xml file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97136">97136</a>: New Java Project [from an Ant file] wizard; layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97216">97216</a>: java.lang.NumberFormatException when launching ANT<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97639">97639</a>: ant task debugging and breakpoints on targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97708">97708</a>: Pref Page Ant/Editor - enablement after "Restore Defaults"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97710">97710</a>: Pref Page Ant/Editor/Code Assist - enablement after "Restore Defaults"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97711">97711</a>: Pref Page Ant/Editor/Formatter - margins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97741">97741</a>: Console created for same JRE builds when capture off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98202">98202</a>: NPE placing breakpoint on task outside of target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98980">98980</a>: 3.1: tct 177, 178, 179 , 180, 185- Translation clarification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99033">99033</a>: 3.1:tct 175- Translation clarification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98412">98412</a>: JARs from ${user.home}/.ant/lib not added to Ant classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98853">98853</a>: Ant editor doesn't recognize macrodefs with a uri<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99235">99235</a>: Fully qualified paths in antfile attribute do not open file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98872">98872</a>: Incorrect stack representation with same named targets in subbuilds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96022">96022</a>: Step over antcall or ant will suspend on completion of other antcall/ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97707">97707</a>: Pref Page Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97716">97716</a>: Pref Page Ant/Runtime/Classpath/Ant Home/dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97717">97717</a>: Pref Page Ant/Runtime/Classpath/Add variable/dialog - margin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97722">97722</a>: Pref Page Ant/Runtime/Tasks/Add Task dialog problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98005">98005</a>: 3.1 RC1 javadoc warnings: ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98533">98533</a>: Missing closing semicolon in xml description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94633">94633</a>: Concurrent Modification Exception whilst editing Ant file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98014">98014</a>: NPE logging from tasks with UNKNOWN_LOCATION<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98305">98305</a>: XML hover is not showing HTML comments properly<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 27, 3.1RC1, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85309">85309</a>: step over does not step out of macrodef<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94769">94769</a>: Step over (macrodef) resumes Ant debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95812">95812</a>: Ant and external tool plug-ins need to be restricted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94471">94471</a>: Linkage error on startup with Xerces on the Ant runtime classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94466">94466</a>: Problems using <input> and Ant 1.5.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74195">74195</a>: Allow user to choose the javac declaration to use for import from buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87787">87787</a>: Widget disposed error creating new builder during build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96830">96830</a>: fragments break external Ant execution<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96868">96868</a>: Memory cleanup for Ant support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96885">96885</a>: Infinite loop from occurrences finding with empty string identifier<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96859">96859</a>: Remove validation of default target at runtime<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96888">96888</a>: No property hover for properties with '(' or ')' in names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96037">96037</a>: AntSourcePathComputerDelegate does not setup for external buildfiles<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 25, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84608">84608</a>: Setting BuildLoggers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91674">91674</a>: Namespace imported ant targets not listed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95663">95663</a>: Formatter use of System property of line.separator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96175">96175</a>: Ant launch configurations for external files not "found" after Eclipse restart<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96530">96530</a>: Remove BuildFailedTracker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96541">96541</a>: Cache SWT library location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88614">88614</a>: AntEditor performance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79134">79134</a>: Investigate Ant Separate VM tests slow down<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 23, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83964">83964</a>: Imported property expansion in Hover text<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 21, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80431">80431</a>: External buildfile does not have Run As / Debug As<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96161">96161</a>: External buildfiles do not provide links<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87543">87543</a>: AntBreakpoint hover info not updated with changes to linenumber<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 20, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95988">95988</a>: javac error linking not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95297">95297</a>: Ant export filter: Export also JUnit tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85769">85769</a>: Dependency stack incorrect when ant or antcall on stack<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94309">94309</a>: Move to Ant 1.6.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93330">93330</a>: Ant 1.6.3: ProjectHelper changes required<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95701">95701</a>: ServerSocket used for RemoteAntBuildListener should set timeout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94573">94573</a>: Stepping over an <ant> task causes hang or NullPointerException in some build files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96128">96128</a>: Contributed entries missing for specifying task library<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95863">95863</a>: Ant antfile hyperlink does not open editor<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 18, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95611">95611</a>: Quotes in environment path crashes ant target runs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94578">94578</a>: Caching of location information for linking<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95061">95061</a>: Region incorrect for <name/> tags<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95296">95296</a>: Ant export filter overwrites existing build.xml silently<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95675">95675</a>: Ant classpath order of buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95298">95298</a>: Ant export filter: Don't add JRE 1.5 libraries to classpath<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 17, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94972">94972</a>: Formatter preference page quickly shows error status on initial display<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95300">95300</a>: Ant export filter: Buildfiles are not indented with JRE 1.5<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95416">95416</a>: NPE on code assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95422">95422</a>: Auto-reconcile editor toolbar button not synched correctly<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-M7, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81867">81867</a>: Functioning Ant Scripts Please<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93273">93273</a>: AntEditor caching of AntModel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93335">93335</a>: ProjectHelper caching of SAX helpers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93378">93378</a>: Changing tab width does not effect open Ant editors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90584">90584</a>: DBCS3.1: build failure with DBCS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91346">91346</a>: available property reference not found for marking occurrences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93496">93496</a>: NoClassDefFoundError when trying to open a build script in the ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92640">92640</a>: Typing performance: Imports reparsed on typing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94572">94572</a>: Cache fNodeBeingResolved index in the AntModel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93923">93923</a>: Add keywords to preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94543">94543</a>: BadLocationException during AntFoldingStructureProvider.addFoldingRegions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94757">94757</a>: highlight off by one<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95151">95151</a>: NPE removing defined tasks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94524">94524</a>: Ant View context menu "open" on imported target results in NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64707">64707</a>: Ant documentCreation extension is "over defined"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93333">93333</a>: Ant 1.6.3: Definition of tasks with the Ant editor using Eclipse contributed classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81418">81418</a>: Handling marshalling line.separator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93334">93334</a>: Ant 1.6.3: Ant core FrameworkTests.testGetTargets fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94774">94774</a>: orphaned "fetching children from debug target job"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-May 3, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89234">89234</a>: adopt content type association for Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92546">92546</a>: Ant content type describer activating ant core<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89265">89265</a>: "Rename in File" moves cursor position<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90549">90549</a>: Mark Occurrences should work for one position past reference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93053">93053</a>: Turn off reconciling during rename<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93462">93462</a>: Can't run build files on external JRE from target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88138">88138</a>: Move to Ant 1.6.3<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92831">92831</a>: [api] missing @since3.1 tags on AntCorePlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93348">93348</a>: Ant 1.6.3: InternalAntRunner.getTargets will fail with top level taskdefs<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Apr 26, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91349">91349</a>: NPE on marking occurrences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91495">91495</a>: Finished Ant Task in Debug view not marked as terminated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91422">91422</a>: Update Ant buildfiles for plugins extra JARs from Jar'd Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91332">91332</a>: Console stop button does not stop a debugging session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91989">91989</a>: Exception when closing Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90782">90782</a>: DBCS3.1: Internal error occurred retrieving targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91249">91249</a>: Ant editor: double click on 'identifiers' containing digits doesn't select the whole 'identifier'<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Apr 19, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90905">90905</a>: JAR the Ant plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91580">91580</a>: Setting working directory to default doesn't work after setting to non-default<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Apr 12, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89079">89079</a>: Deprecations in org.eclipse.ui.commands extensions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90260">90260</a>: NPE in AntEditor$EditorSelectionChangedListener.selectionChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90455">90455</a>: Move to new NLS API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86772">86772</a>: CCE Opening empty Ant build script<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90597">90597</a>: Ant script exits when not expected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90759">90759</a>: Separate VM Ant builds are broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90760">90760</a>: AntEditorTests failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89709">89709</a>: 'include buildfiles that contains errors' option has no effect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91054">91054</a>: Turn off occurrence highlighting during rename<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88262">88262</a>: create component XML for Ant plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89894">89894</a>: Exported build file doesn't include local plugin dependencies<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Apr 5, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89195">89195</a>: ant content type over defined for <project> tag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89926">89926</a>: Checking the "Set Input Handler" box clears the default "java.library.path"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90237">90237</a>: Ant view marks as error buildfiles with no targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89651">89651</a>: attempt to show external doc for macrodef call<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90130">90130</a>: Promote Ant import to a 'New Java Project' wizard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89745">89745</a>: projects reordered in the ant view when buildfile is saved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89519">89519</a>: Ant content type is 'Ant BuildFile' instead of 'Ant Build File'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89481">89481</a>: Adapt link on ant editor preference page pointing to general editors preference page [preference]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83195">83195</a>: Mnemonic collision on AntJRETab<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-M6, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88555">88555</a>: Occurrences hilights first textual match in element regardless of context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80135">80135</a>: [plan item] Ant editor improvements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88831">88831</a>: Many occurrences are missed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88893">88893</a>: Building Ant plugin Ant support JARs fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89078">89078</a>: Rename in file for the Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84400">84400</a>: Step over incorrectly runs to completion<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87379">87379</a>: Ant versions backwards compatibility<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88218">88218</a>: ant debugger requires 2 step intos to go into ant task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88963">88963</a>: Antcall and Ant references to targets not marked as occurrences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83738">83738</a>: Allow unqualified tool name in location field for External Tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79133">79133</a>: Investigate Ant Editor UI tests slow down: code folding<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84307">84307</a>: Need more control on build file error checking<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89666">89666</a>: Ant Editor sets "F3" as Open Declaration accelerator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89682">89682</a>: mark occurrences inconsistent with defnition vs. reference for location props<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80159">80159</a>: [plan item] Import/export of Ant build files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51382">51382</a>: Add "Export project to buildfile"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Mar 22, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88557">88557</a>: NPE from occurrence finder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88037">88037</a>: eclipse doesn't parse imports with indirect eclipse variables references in file attribute<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85752">85752</a>: External builder not started when configured with a resource working set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88554">88554</a>: Occurrence hilight for default target is off by one character<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Mar 15, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87719">87719</a>: [jars] Patch to run against a JAR'd Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86223">86223</a>: Mark Occurrences feature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87710">87710</a>: Source lookup fails when ant task that sets dir<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87553">87553</a>: No navigation from ant antfile attribute<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87600">87600</a>: No problem annotation from import in buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60995">60995</a>: Ant use of deprecated runtime code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86224">86224</a>: Open Declaration not included in navigation stack<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Mar 8, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86659">86659</a>: Environment is not properly set for external targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86894">86894</a>: AntThread can return an array of nulls for variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81260">81260</a>: breakpoints on targets<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Mar 1, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59935">59935</a>: Names of targets in the Ant console should act as hyperlinks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86222">86222</a>: Open Declaration loses track of position of definition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86174">86174</a>: AntSecurityException while running nested antRunner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86727">86727</a>: NPE from variables view with Ant properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84742">84742</a>: Changing problem severity reporting does not change reporting in open editors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86428">86428</a>: Move AntDebugElement to subclass DebugElement<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Feb 22, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85915">85915</a>: AntSecurityManager imports sun.* class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85908">85908</a>: Crashing ClassCircularityError with -Xverify:none<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85450">85450</a>: Run Ant menu cannot be enabled for files not ending in .xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85890">85890</a>: extraClasspathEntries error message could be more helpful<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-M5 Feb 18, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85590">85590</a>: IndexOutOfBoundsException in the Ant preference page on loss of selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85302">85302</a>: Replace reference to JDT UI internal class CHyperLink with SWT Link<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85550">85550</a>: ant builder always cleans<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85357">85357</a>: extra target in the dependency tree<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85718">85718</a>: Exception creating builder<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Feb 15, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82598">82598</a>: Ant UI test failures from incorrect output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81324">81324</a>: Exiting while debugging same JRE build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84834">84834</a>: No console hyperlinks with javac failures/errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60860">60860</a>: Custom Property task crashes Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63685">63685</a>: Customize what happens on each build kind when using external builders and Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75501">75501</a>: Add more hover tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83364">83364</a>: Buildfile dialog does not recall the last directory selected.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85158">85158</a>: Update builders to execute clean target on Clean<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82405">82405</a>: Adjust to new ICommand API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83508">83508</a>: testHoverRegionWithSpaces failing during build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85023">85023</a>: remove empty .options files from build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84694">84694</a>: More "Open Declaration" functionality in Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75729">75729</a>: "Preferences->Ant->Runtime->Ant Home..." doesn't set ANT_HOME<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65653">65653</a>: Warn when target depends on itself<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Feb 8, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51403">51403</a>: Ant in Eclipse breaks after upgrading to Java 1.4.2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84082">84082</a>: Move to use the FastPartitioner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80435">80435</a>: Problems using the XmlLogger as a listener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84342">84342</a>: Ant Formatter new line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71888">71888</a>: Problems on Save<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83359">83359</a>: Provide errors in the AntEditor for circular dependancies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73411">73411</a>: Ant formatter replaces single quotes by double quotes in tasks attributes<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Feb 1, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83644">83644</a>: NPE in RemoteAntDebugBuildListener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83367">83367</a>: AntEditor hover while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82870">82870</a>: Cannot debug Ant builds in non-Java projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83647">83647</a>: Old Tasks / Types remain after reconciliation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83322">83322</a>: When defined properties not showing up in the Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71358">71358</a>: Poor performance editing Ant buildfile with "large" taskdef<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83455">83455</a>: Reuse in Ant Build Loggers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83577">83577</a>: dependency stack frames do not find source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84190">84190</a>: NPE with taskdef<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81811">81811</a>: Ant UI performance tests take much longer on Linux-GTK than Win32<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83896">83896</a>: All stack annotations shown as Debug Call Stack<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Jan 25, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83146">83146</a>: Warnings in latest integration build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83131">83131</a>: Build fails if only running the implicit target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82833">82833</a>: BuildException stacktrace not printed when ant run with -v option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82875">82875</a>: Stack frames for external targets mapped to incorrect file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82498">82498</a>: Ant Run to line not respecting skip breakpoints pref<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83153">83153</a>: Ant editor depends resolution fails with spaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83261">83261</a>: NumberFormatException getting variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83254">83254</a>: Cannot allow debug session for Ant build to occur in the foreground<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83273">83273</a>: NPE while editing buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83343">83343</a>: Show dependancy calling in the Ant stack<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83436">83436</a>: AntTargetsTab will not validate without targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83578">83578</a>: Mnemonic collision on Ant Main tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83358">83358</a>: StackOverflowError from ProgressBuildListener if circular dependancy<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Jan 18, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81029">81029</a>: Silent failure on build if .launch for builder is missing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82713">82713</a>: Runtime Classpath tree item coloration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82478">82478</a>: Ant view is not sorted correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82415">82415</a>: [debug] Source lookup broken when working with multiple files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82894">82894</a>: Ant Debugger sometimes get RESUME before SUSPEND<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70238">70238</a>: Clicking junit call stack items doesn't open source anymore<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81717">81717</a>: ClassCastException in Ant Editor with installed Web Tools plug-ins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82835">82835</a>: Ant Editor should use a shared document provider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82880">82880</a>: AntTargetsTab will not validate without default target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76690">76690</a>: Previously added property files not filtered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82543">82543</a>: Attribute completion for new Ant 1.6.* tasks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82528">82528</a>: Return from ant call resumes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82959">82959</a>: Ant view : tasks are sorted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80988">80988</a>: Migrate StringMatcher to RegEx 1.4 support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82777">82777</a>: Up/Down buttons in Ant Runtime Classpath tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82799">82799</a>: JARs added by the user in Ant Runtime flagged as require<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Jan 11, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82168">82168</a>: ant.home and ant.library.dir not set for parsing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81970">81970</a>: ANT View Hide Internal Targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82172">82172</a>: StringIndexOutOfBounds on removing chars during code complete<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52687">52687</a>: Code assist should propose properties defined in the Runtime Prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58351">58351</a>: Extraclasspathentries should show up in the UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81270">81270</a>: Variables view scrolls to top on step<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78453">78453</a>: Back and forth navigation after hyperlink navigation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78708">78708</a>: Properties tab correct presentation of properties to be set for builds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82396">82396</a>: Change to have Ant objects use the plugin identifiers instead of names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82344">82344</a>: Types, Tasks and Properties page clean up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56072">56072</a>: Ant objects should indicate which are included in a separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55562">55562</a>: Transient properties are displayed in the 'Properties' launch configuration tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78923">78923</a>: Warn when a builder is disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82486">82486</a>: Ant view does not update project name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81296">81296</a>: Better presentation of Ant properties when debugging<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Jan 4, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81541">81541</a>: NPE attempting to add breakpoint to external buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82031">82031</a>: Project attributes not able to be code completed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81409">81409</a>: Set relevant preference pages for Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81408">81408</a>: Remove quick diff actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81328">81328</a>: Debugging fails on Ant older than 1.6<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81367">81367</a>: Projects do not require the default attribute<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-Dec 21, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81484">81484</a>: ConnectException in RemoteAntDebugBuildListener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81573">81573</a>: Spelling mistakes in the Import > Existing Ant Buildfile description<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Ant</h1>
-M4, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81280">81280</a>: NPE on removing launch if build never actually starts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81299">81299</a>: Retrieving properties fails for empty string properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81268">81268</a>: Property presentation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81274">81274</a>: BadLocationException in Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81371">81371</a>: "Open declaration" doesnt work on names with spaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81479">81479</a>: Ant debugger hits disabled breakpoints<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Dec 14, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80541">80541</a>: Run to Line breakpoints for Ant debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24131">24131</a>: Ability to debug ANT buildfile in some type of ANT debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80651">80651</a>: NPE in Ant debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80287">80287</a>: Ant debugger leaves highlight in editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79463">79463</a>: Deadlock debugging ant script<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80555">80555</a>: Ant debugger does not respect skip breakpoints pref<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80707">80707</a>: Make breakpoint / run mode check debug model specific<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77330">77330</a>: Ant build configuration; main tab<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Dec 8, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80382">80382</a>: Copy/Paste results in a divide by 0 error in the Ant editor<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Dec 7, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76536">76536</a>: Status line error message not cleared for Ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79822">79822</a>: Cache AntElementNode labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79835">79835</a>: Too much filtering in the Ant content outline page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76226">76226</a>: Lost some support with changes to AntTargetsTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79884">79884</a>: ArrayIndexOutOfBoundsException attempting to getTargets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71590">71590</a>: Serializable classes and declaring a static final serialVersionUID<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79788">79788</a>: Adapt to new hyperlink support<br> 
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Nov 30, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78648">78648</a>: Allow multi-select in the Ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79602">79602</a>: Adjust the Ant auto indent to the deprecations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76216">76216</a>: AntView should prompt before remove all<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78646">78646</a>: Error nodes in the Ant view hide which file they're from<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Nov 23, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78799">78799</a>: Capture Output option is redundant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79012">79012</a>: Add launch shortcut hotkey for Ant builds<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Nov 16, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78198">78198</a>: NPE if buildfile does not designate default target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78141">78141</a>: Ant build unable to scan build files using import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78000">78000</a>: Build triggered when only team-private resources have changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78196">78196</a>: Tooltip for the RunTargetAction not correct for selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78201">78201</a>: ClassCastException on Refresh in the AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78466">78466</a>: IllegalThreadStateException opening Ant LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78162">78162</a>: Double click on Ant view tasks Open the editor (should start that target)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77728">77728</a>: Duplicate "Source" command category<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Nov 9, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78030">78030</a>: Ant editor should propose values for project default attribute<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78028">78028</a>: Ant Completion processor is not directly filtering templates by context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77973">77973</a>: AntView is parsing buildfiles on startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77975">77975</a>: AntModels from error AntView elements are not disposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77723">77723</a>: Open external documentation has no menu entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77386">77386</a>: Allow user to set URL for external doc location<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-3.1M3, Nov 5, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75744">75744</a>: XmlTextHover shows affordance based on JDT prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77169">77169</a>: Pass ProgressMonitor through when creating project from import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65480">65480</a>: Present reference attribute value proposals for javac attributes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58815">58815</a>: "Show source of selected elements only" for the Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77246">77246</a>: Cancel Decay thread when Ant UI plugin stopped<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76986">76986</a>: Ant Editor pref page does not handle multiple errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31602">31602</a>: Add hyperlink support in Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75665">75665</a>: NPE running Ant UI performance test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76976">76976</a>: NPE in AntProjectNodeProxy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77216">77216</a>: NPE trying to open an existing launching configuration for an external builder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77218">77218</a>: NPE retrieving targets for empty buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72054">72054</a>: Literal quotes no longer work in external tool arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69948">69948</a>: TVT3.0: tools.jar warning message is too long<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49390">49390</a>: Ant manual as external documentation (Shift-F2)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45484">45484</a>: Ant builds using an external JVM with [input] tasks cannot request input.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77549">77549</a>: NPE in initial reconcile of Ant Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77727">77727</a>: OK not enabled on empty input when run on separate VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77401">77401</a>: "No targets" error not cleared<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77523">77523</a>: Same JRE input handler comes up in error state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77519">77519</a>: Separate JRE input handler not working on non Win32 OS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77777">77777</a>: Increase in build time from adding SWT Input handler<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Oct 26, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76207">76207</a>: ClassCastException changing preference for Code Assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76712">76712</a>: Differences depending on how AntModel generated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76838">76838</a>: Provide Show in target list for the Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72652">72652</a>: Refactor AntModel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76366">76366</a>: Navigation actions in the context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76843">76843</a>: Lost the generation of Ant problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55357">55357</a>: templates do not appear in content assist when expected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76231">76231</a>: Centralized Ant navigation support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68885">68885</a>: Execution of implicit target retrieving targets for Ant LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76607">76607</a>: Double click opening in Ant view does not select element<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76973">76973</a>: StringIndexOutOfBounds navigating within property declaration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76608">76608</a>: AntView Open With support for "normal" targets should select element<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72598">72598</a>: "*.ant" file association does not provide syntax coloring<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74113">74113</a>: Error annotations for external buildfiles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76217">76217</a>: AntView buildfile selection dialog does not filter added buildfiles<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Oct 19, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76138">76138</a>: Ant editor not following tab/space setting on shift right<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76225">76225</a>: Move the ExternalAntBuildfileImportPage to use the AntUtil support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72566">72566</a>: Rework AntView to make use of AntModel support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63051">63051</a>: Consistency with "Run" in AntView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75319">75319</a>: Move the AntTargetsTab to retrieve target information from an AntModel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48018">48018</a>: AntView open with does not correctly with external entity targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76129">76129</a>: ClassCastException filtering for internal targets in Ant LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76293">76293</a>: Import Ant buildfile fails if no destdir<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73602">73602</a>: InternalAntRunner.getTargets can fail with top level taskdefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76414">76414</a>: Templates show up when code completing for nested elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72482">72482</a>: No "Folding" context menu item in the Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76300">76300</a>: NPE if attempt to import empty buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75802">75802</a>: scp task missing in code completion helper files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55057">55057</a>: Ant view support for imported elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76346">76346</a>: Bad attribute completion for <attribute> tag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74775">74775</a>: Folders in "Ant Build... ", Classpath tab ignored in other contexts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76535">76535</a>: DnD to the Ant view should always show the plus sign<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Oct 12, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50583">50583</a>: Patternsets, paths and fileset hovering (F2)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73553">73553</a>: Format keybinding wrong on Mac<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69258">69258</a>: Target navigation for Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59745">59745</a>: Present buildfile source view for additional proposal info<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71689">71689</a>: Syntax colored folded region annotation hover<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65200">65200</a>: Ctrl-Shift-Q does not work to toggle Quick diff in AntEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75940">75940</a>: Open declaration support in the Ant editor requires full selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75759">75759</a>: Navigation to property definition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75804">75804</a>: Add Task dialog needs to be resizeable<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Oct 5, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74840">74840</a>: Variables not substituted in user properties for same JRE Ant Build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75133">75133</a>: Variables get run mutliple times for Run ant...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75224">75224</a>: Remove remnants of incremental reconciliation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75369">75369</a>: 3.1M2: Tooltips in ANT editor show "xx changed lines"<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Sep 28, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73807">73807</a>: Parsing the Ant dtd on startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74490">74490</a>: Decay Ant code completion data structures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75137">75137</a>: AntRunner#addUserProperties(Map) does not add<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71296">71296</a>: Ant editor performance tests: opening / typing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75064">75064</a>: The remove builder button in project properties is inactive<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Sep 23, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74539">74539</a>: [TYPO] Missing 's' in "existing" in dialog title "Import  project from existing Ant buildfile"<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Sep 21, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74102">74102</a>: Identity instead of equals for import buildfile javac resolution<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74117">74117</a>: Improve error message when user specifies buildfile that does not exist for import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74117">74114</a>: Silent failure when importing buildfile with no javac target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74122">74122</a>: Buildfile project name not updated when change imported buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73724">73724</a>: Logfile output differs from console output: extra linebreaks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73800">73800</a>: Check for updates to code completion for Ant 1.6.2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66235">66235</a>: Working directoy error not cleared after setting to be in same VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74060">74060</a>: NPEs in Ant tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74105">74105</a>: Duplicate files in the Ant UI jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74372">74372</a>: Import Project from buildfile adds all classpath entries as libraries<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Sep 14, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73637">73637</a>: CodeAssist for <fail> task makes incorrect suggestions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70871">70871</a>: Update the XMLMarkerAnnotation for the MarkerAnnotation deprecations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67980">67980</a>: Prolog error message in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69104">69104</a>: [ant] Add buildfile need to show all file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47246">47246</a>: Antview add file dialog should allow multi select<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73284">73284</a>: InternalAntRunner should check for bad string index and generate more helpful error msgs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73568">73568</a>: .externalToolBuilders folder remains when all builders removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73584">73584</a>: Ant JRE tab allows to specify *no* JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73595">73595</a>: Import Project from buildfile does not handle BuildExceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71419">71419</a>: Missing action for 'External Tools Launch Configuration'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67003">67003</a>: <splash> task creates process that never ends<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Sep 7, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73102">73102</a>: ProjectHelper retains old state in memory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73268">73268</a>: ArrayIndexOutOfBoundsException when double click in Builder page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72823">72823</a>: Ant Builder should not create console when not capturing output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63344">63344</a>: Missing some Ant output as the streams have been closed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68886">68886</a>: Code completion in Ant editor not work with xmlbuddy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71438">71438</a>: Ordering of builders not considered for builds other than full builds<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Aug 31, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70650">70650</a>: Project builders do not execute in specified order<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71688">71688</a>: Customization of initally folded regions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72746">72746</a>: Remove All image broken in Ant view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66062">66062</a>: DocumentModelChangeEvent and IDocumentModelEventListener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72512">72512</a>: Global Properties not set for editor parsing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72473">72473</a>: Remove external tools plugin unused dependancies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65479">65479</a>: taskString could be cached in AntEditorCompletionProcessor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72619">72619</a>: Add DTD syntax coloring<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Aug 24, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72077">72077</a>: No code completion for most built-in properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71685">71685</a>: Imported nested tasks / attributes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72224">72224</a>: Error logged when failure to get introspection helper<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Aug 17, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71956">71956</a>: Setting selection in the outline updates editor twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71696">71696</a>: Buildfile prologs are not foldable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71687">71687</a>: Comments are not foldable in the Ant Editor<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Aug 10, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71319">71319</a>: Duplicate target hover error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71596">71596</a>: Some files missing from the distribution of the Ant plugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71475">71475</a>: ant.tests.core builds extra jar on any resource change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=60134">60134</a>: Code folding in the Ant Editor<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-Aug 03, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70841">70841</a>: Move to Ant 1.6.2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69768">69768</a>: TVT3.0: Preferences -> Ant has text showing up in english<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70734">70734</a>: TVT3.0: Duplicate mnemonics, ''Build Ant'' and ''Build Ant...''?<br>
-
-<h1>
-Eclipse Platform Build Notes<br>
-Ant</h1>
-July 27, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56295">56295</a>: new icon for taskdef needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68840">68840</a>: Source not found on Console hyperlink for Separate VM builds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68252">68252</a>: unused icons in Ant ui<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68081">68081</a>: Ant view's Add Buildfiles popup item should have trailing ellipses<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68886">68886</a>: Code completion in Ant editor not work with xmlbuddy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69177">69177</a>: Error messages not logged for build failure due to bad inputhandler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69235">69235</a>: Fully qualify the Ant partition name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70429">70429</a>: missing <pre> and </pre> tags in Examples section of configurationDuplicationMaps.exsd<br>
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.ant.core/r3_2_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r3_2_buildnotes_platform-ant.html
deleted file mode 100644
index 064f35b..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r3_2_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,186 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse 3.2 Ant Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse 3.2 Ant Build Notes</h1>
-
-<h2>RC2 - April 28, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137088">137088</a>: StringIndexOutOfBoundsException in AntLaunchDelegate.appendProperty()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73814">73814</a>: AntEditorContentOutlineTests.testParsingOfNonValidFile fails on Xerces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138089">138089</a>: pathelements for project dependencies are syntactically incorrect<br>
-
-<h2>RC 1 - April 13, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134932">134932</a>: support retrieving the path from AntElementNode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133380">133380</a>: Polish of the Ant preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134303">134303</a>: Fix broken NLS strings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135765">135765</a>: need to adopt ICU4J APIs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132339">132339</a>: Update the External Tools launcher wizard to use a PNG image<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136480">136480</a>: Performance improvement for the AntModel<br>
-
-<h2>3.2 M6 - March 30, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106803">106803</a>: Ant launcher not setting working directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111740">111740</a>: Ant editor shows text in black and white until file is edited<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107721">107721</a>: Ant fails to detect  when default JRE changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133184">133184</a>: Create markers for Ant build using javac<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124405">124405</a>: Migrate ant launch configs to support resource filtering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128493">128493</a>: Organize manifests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133190">133190</a>: Namespace support for the Ant extension points<br>
-
-<h2>March 14, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130751">130751</a>: NPE creating build.xml file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131421">131421</a>: debug as ant build ignores global user property<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131803">131803</a>: javac task in build.xml should have debug="true", at least optionally<br>
-
-<h2>March 7, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130129">130129</a>: Intermittent failure saving Ant build script<br>
-
-<h2>February 28, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102282">102282</a>: Missing hyperlinks in Ant error output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128176">128176</a>: ant editor: Property rename doesn't find unless-attribute of fail task.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128104">128104</a>: Ant export filter: Make use of project build order<br>
-
-<h2>February 21, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128512">128512</a>: Ant export filter: Fix confirm overwrite message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128103">128103</a>: Ant export filter: Make use of specified junit directory<br>
-
-<h2>3.2 M5 - February 17, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117787">117787</a>: StringIndexOutOfBoundsException finding occurrences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104114">104114</a>: Comment template fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111217">111217</a>: Ant editor support for content assist proposal cycling<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127088">127088</a>: Should not be prompted for save ditry editors when building<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127193">127193</a>: top level entries should not be allowed for global Ant runtime classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125038">125038</a>: Arguments in "Main" folder of "Run an Ant buildfile" launch dialog does not take care of quoting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124210">124210</a>: special comments would better be Processing instructions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126490">126490</a>: [refactoring] rename does not update Ant buildfile reference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128152">128152</a>: Ant UI failures from changes to LaunchSuspendTrigger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107476">107476</a>: Missing ETC directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108937">108937</a>: NullPointerException when trying to Run As ant task<br>
-
-<h2>February 7, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108114">108114</a>: <input> task with long validargs list: dialog size to small<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107813">107813</a>: BadLocationException when using Ant with DocType Entity<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110557">110557</a>: Manifest file error in export -package list<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126392">126392</a>: loadproperties does not set properties for Ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123026">123026</a>: [patch] Ant source attachments incorrectly configured<br>
-
-<h2>January 31, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104320">104320</a>: Should not call IDocumentSetupParticipant.setup(IDocument)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107335">107335</a>: eclipse doesn't expand eclipse variables references in properties defined in property files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125367">125367</a>: [patch] An ant script without targets or default target is not recognized as an ant file<br>
-
-<h2>January 24, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101090">101090</a>: No console output when running ant in separate jvm<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112533">112533</a>: Ant duplicates the "format" command<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104416">104416</a>: Common tab missing on Ant Build for Java Project Properties Builders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124562">124562</a>: Extension point task proposal test failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99703">99703</a>: incorrect line terminators with windows install of ant 1.6.4<br>
-
-<h2>January 17, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102641">102641</a>: Ant crashes if property is defined that's value ends with a backslash<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106588">106588</a>: ATTR_PROJECT_NAME is not updated for change in buildfile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111427">111427</a>: Adding a builder with .project read-only<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117776">117776</a>: Ant Icons: Export Dialog icons have inconsistent metaphors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122634">122634</a>: ISynchronizable.getLockObject() can be null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111532">111532</a>: update dialog size / position persistance<br>
-
-<h2>January 10, 2006</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105677">105677</a>: ContributedClasspathEntriesEntry throws NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101766">101766</a>: antcall target attribute could benefit of content assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108276">108276</a>: [patch] Absolute path in build.xml from export<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110636">110636</a>: Ant UI does not compile on JDK 1.5<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122663">122663</a>: Code completion does not present nested target element for antcall<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122421">122421</a>: Improve Ant Export Filter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104748">104748</a>: Linked resources not resolved to local file system folder in generated Ant build file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121052">121052</a>: "Export Ant Buildfiles" doesn't copy resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120804">120804</a>: Export Ant Buildfiles NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89751">89751</a>: Export Ant buildfiles should allow user to specify a name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113650">113650</a>: export ant build files doesn't set the correct classpath with simple projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122913">122913</a>: documentCreation extension point has been deprecated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104684">104684</a>: Ant classpath gets corrupted when adding external jars named *-tools.jar in Global Entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118949">118949</a>: Ant fails to run in external JVM if comma in project path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122664">122664</a>: Ant>Editor>Problems>Names text field limited to a single line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96789">96789</a>: Export buildfiles doesn't have run targets' classpath correct<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114085">114085</a>: export ant build file doesn't handle spaces too well and eclipse variables in arguements<br>
-
-<h2>December 13, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119585">119585</a>: dangerous uses of "new GC(Display)"<br>
-
-<h2>November 29, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117793">117793</a>: Doc references incorrect version of Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118413">118413</a>: [ext tools] Import ext tool builder shows private launch configs<br>
-
-<h2>November 22, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117383">117383</a>: The Javac paths specified in the custom build scripts need to be extended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116843">116843</a>: Errors when building ant projects<br>
-
-<h2>October 31, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113899">113899</a>: Ant node hyperlink does not function if dir attribute is relative<br>
-
-<h2>October 11, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111908">111908</a>: Adapt to changes in JavaFileEditorInput for more flexible workspaces<br>
-
-<h2>October 4, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110164">110164</a>: Last paragraph in the "Creating Ant buildfiles" doesn't parse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111199">111199</a>: Self hosting instructions out of date<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102300">102300</a>: RemoteAntBuildListener throws exception for jspc task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55574">55574</a>: Go to Annotation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32088">32088</a>: Inconsistent terminology for content assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89195">89195</a>: ant content type over defined for <project> tag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108990">108990</a>: provide category for ant build files export wizard<br>
-
-<h2>August 16, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106859">106859</a>: TVT 3.1 - TCT 590 - External Tools Icon is not BiDi Enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106703">106703</a>: TVT 3.1: TCT 584 - Memonic confliction in Ant Runtime Preferences page<br>
-
-<h2>August 8, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104854">104854</a>: XML syntax coloring wrong when PI on more than 1 line.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105231">105231</a>: [BIDI] need to add $nl$/ to icon paths for reversed icons<br>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.core/r3_3_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r3_3_buildnotes_platform-ant.html
deleted file mode 100644
index 2ad7bf3..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r3_3_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse 3.3 Ant Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse 3.3 Ant Build Notes</h1>
-
-<h2>3.3 RC4 2007 Friday, 8 June 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192438">192438</a>: [doc] Ant build file export wizard doc out of date<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192201">192201</a>: Ant screenshots out of date<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192130">192130</a>: Ant Preference pages need to be updated in the User Guide<br>
-
-<h2>3.3 RC1 2007 Friday, 18 May 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183283">183283</a>: Exporting product produces Exception if installation path has spaces<br>
-
-<h2>3.3 M7 2007 Friday, 4 May 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180093">180093</a>: Missing nls message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137980">137980</a>: Move to Ant 1.7<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182444">182444</a>: jars.extra.classpath causes duplicate classpath entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182577">182577</a>: executing ant build in same JRE seems to leak input handling thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164958">164958</a>: Hover over problem is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182653">182653</a>: [DOC] Update org.eclipse.platform.doc.user\tasks\antRunner.htm<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155566">155566</a>: [DOC] Ant Builder has no "Run the builder" settings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183702">183702</a>: Move off of deprecated FileUtils methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184215">184215</a>: Error when opening build.xml with macrodef<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163534">163534</a>: Eclipse ANT "- projecthelp" produces mixed up results<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179837">179837</a>: Some external tool builders not running, then NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184112">184112</a>: Exclude support jars from signing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184124">184124</a>: remove open LCD test from ant test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177833">177833</a>: Adapt to validate edit deprecations within ExportUtil<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152067">152067</a>: [Ant 1.7] Default value is available for the input task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=160767">160767</a>: [Help] General XML files not openable by ant editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175350">175350</a>: [Ant 1.7] References are more lazily loaded --> incomplete code assistance<br>
-
-<h2>3.3 M6 2007 Friday, 23 March 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174276">174276</a>: JavaFileEditorInput will be deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138007">138007</a>: system_path macro should support common extensions in Windows<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168094">168094</a>: Hyperlinks from Ant output not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174726">174726</a>: a possible null-dereference in "org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175345">175345</a>: ResourceException running Ant UI test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177125">177125</a>: Buildfile template should declare encoding<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177135">177135</a>: Replace hard coded hyperlink detector with extension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177581">177581</a>: Adopt "Show Tooltip" / F2 support from Platform Text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178031">178031</a>: Adopt tabs to spaces support from Platform Text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175823">175823</a>: org.apache.ant should have plug-in nature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170859">170859</a>: Move AntRunner to IApplication<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147337">147337</a>: Need a link source option for Ant build script<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176157">176157</a>: testAttributePrposals test fails on Harmony VM due to inconsistent check<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175692">175692</a>: EmptyStackException handling a warning<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175186">175186</a>: Add a build variable for showing changeset (patch included)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174759">174759</a>: ant editor breaks on imported build files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175352">Bug 175352</a>: [Ant 1.7] More eager cleanup after execute --> macrodef stepping problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176620">Bug 176620</a>: AntCLassLoader loads classes from plugin bundle, but not resources<br>
-
-<h2>3.3 M5 Friday, 9 February 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170050">170050</a>: small error in ant hover info<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170145">170145</a>: [launching] new mapping for launch shortcuts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167291">167291</a>: Unable to create XML editor with wrapper version of Ant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171420">171420</a>: [launching] New fields for launch delegates<br>
-
-<h2>3.3 M4 Friday, 15 December 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163382">163382</a>: add property file to support signing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163962">163962</a>: condition task 'else' attribute does not appear in content assist?<br>
-
-<h2>3.3 M3 Friday, 3 November 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158332">158332</a>: Get rid of copied HTML rendering classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161267">161267</a>: [launching] deleting ant config produces error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161273">161273</a>: [launching] using context menu in LCD to create a new or duplicate causes errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155510">155510</a>: Project properties->Builders: Cancel doesn't work properly.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161845">161845</a>: ANT build export fails when ECLIPSE_HOME is not in list of variable<br>
-
-<h2>3.3 M2 Friday, 22 September 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155793">155793</a>: Patch to fix jface.text.Assert deprecation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155447">155447</a>: incorrect service segment for org.eclipse.ant.ui in R3_2_maintenance branch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152063">152063</a>: Improvements to the Ant tasks / types selfhosting help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156621">156621</a>: Wrong name for interface in ant extension documentation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155762">155762</a>: 21 Error dialogs before the Ant LCD appears<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149739">149739</a>: Improve AntRunner javadocs<br>
-
-<h2>3.3 M1 Thursday, 10 August 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152480">152480</a>: Update the platform ant home resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143008">143008</a>: Changing Ant Home and Reloading build file results in ClasscastException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150825">150825</a>: No syntax coloring if Ant Editor is associated with different content type or extension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152508">152508</a>: ANT file names pattern...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152625">152625</a>: Adapt external tools to the propertyPages extension point deprecations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141317">141317</a>: Templates don't work when creating a new build file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139190">139190</a>: Name column in the Ant launch dialog is not properly sized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=146298">146298</a>: [launching] Eclipse does not ask to save dirty editors before running an external program<br>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.core/r3_4_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r3_4_buildnotes_platform-ant.html
deleted file mode 100644
index cf98b6e..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r3_4_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse 3.4 Ant Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse 3.4 Ant Build Notes</h1>
-
-<h2>Enhancements in 3.4</h2>
-<p>A new application entry point (<code>org.eclispe.ant.ui.antRunner</code>) has 
-  been added to the Ant UI plug-in that allows an Ant buildfile to be run. This is 
-  similar to the existing application entry point (<code>org.eclipse.ant.core.antRunner</code>) 
-  in the Ant Core plug-in, but allows ant buildfiles that require access to the workbench 
-  to execute.</p>
-
-<h2>May 14, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220385">Bug 220385</a>: [api] enabled API tooling for ant projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231305">Bug 231305</a>: external tools bunlde version not correct<br>
-
-<h2>May 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199014">Bug 199014</a>: [ant templates]Invalid ant templates: target1 & buildFile1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220930">Bug 220930</a>: Ant Editor folding preference not retained across sessions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229474">Bug 229474</a>: table in ant Targets tab has no vertical scrollbar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154907">Bug 154907</a>: Sort variables in the Variables view<br>
-
-<h2>Friday, May 9, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231305">Bug 231305</a>: external tools bunlde version not correct<br>
-
-<h2>3.4 M7 Monday, April 28, 2008 (warm-up build)</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225901">Bug 225901</a>: Ant test failure in nightly builds<br>
-
-<h2>3.4 M6 Thursday, March 20, 2008 (warm-up build)</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223125">Bug 223125</a>: ColorManager is not disposed.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223198">Link</a>: Builder failed due to NPE<br>
-
-<h2>3.4 M4 - December 14, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212179">212179</a>: [launching] Incorrect resolution of launch configuration --> no reuse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212562">Bug 212562</a>: [launching] Need a way to query for existing launch configs without reporting error<br>
-
-<h2>3.4 M3 Friday, November 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200347">200347</a>: Running build from ant view with multiple build files runs incorrect one<br>
-
-<h1>
-Eclipse 3.4 Ant Build Notes</h1>
-
-<h2>3.4 M2 Friday, 22 September 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199490">199490</a>: Java project from Ant wizard needs changes to label casing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201169">201169</a>: javac problem markers not generated for compilers other than Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201083">201083</a>: ant view - 'remove all buildfiles' doesn't<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190836">190836</a>: NPE removing invalid ant file from Ant view<br>
-
-
-<h2>3.4 M1 Thursday, 21 August 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200167">200167</a>: Keybindings on the Mac conflict with reserved OS bindings<br>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.core/r3_5_buildnotes_platform-ant.html b/eclipse/plugins/org.eclipse.ant.core/r3_5_buildnotes_platform-ant.html
deleted file mode 100644
index f1023f3..0000000
--- a/eclipse/plugins/org.eclipse.ant.core/r3_5_buildnotes_platform-ant.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse 3.5 Ant Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse 3.5 Ant Build Notes</h1>
-
-<h2>Enhancements in 3.5</h2>
-<ul>
-  <li>Added API constants for Ant launch configuration attributes - <code>org.eclipse.ant.ui.launching.IAntLaunchConfigurationConstants</code>.</li>
-</ul>
-
-<h2>May 5, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275839">Bug 275839</a>: Eclipse Preferences Ant Runtime -- NPE -- (PDE Export fails)<br>
-
-<h2>May 5, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274603">Bug 274603</a>: Unreachable strings<br>
-
-<h2>May 7, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274601">Bug 274601</a>: Problem with InternalAntRunner_Specifying_property_files_is_a_Ant_1_5___feature__Please_update_your_Ant_classpath__6<br>
-
-<h2>April 14, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222615">Bug 222615</a>: Export Ant buildfile does not export JUnit4 style tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223902">Bug 223902</a>: [launching] No descriptions for ant launch shortcuts<br>
-
-<h2>April 7, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270041">Bug 270041</a>: Any first Ant target invocation builds open java projects while Build Automatically is turned off<br>
-
-<h2>March 23, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161354">Bug 161354</a>: Exported ANT scripts should use the 'dir' attribute of the ant task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201143">Bug 201143</a>: exported ant script does not apply include/exclude filter on init target's copy task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267459">Bug 267459</a>: Java project with an external jar file from FS root on the build path throws a NPE during the Ant Buildfile generation.<br>
-
-<h2>February 3, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218074">Bug 218074</a>: button label truncations on External Tools Builders config dialog<br>
-
-<h2>3.5 M5 - January 30, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262378">Bug 262378</a>: Ant test suite does not handle dynamic plugin version length<br>
-
-<h2>December 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215530">Bug 215530</a>: Ant targets no longer bring up "Ant Configuration Settings" Dialog box<br>
-
-<h2>November 25, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253100">Bug 253100</a>: 'Builders' property page should remember it has warned the user<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256299">Bug 256299</a>: Simplify setup of ContentAssistAction<br>
-
-<h2>November 18, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255370">Bug 255370</a>: AntBuildfileContentDescriber should extend org.eclipse.core.runtime.content.XMLContentDescriber<br>
-
-<h2>October 4, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251259">Bug 251259</a>: Use the new contentType extension point<br>
-
-<h2>Aug 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244581">Bug 244581</a>: Javadoc warnings in N20080818-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244301">Bug 244301</a>: javadoc errors in N20080814-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244121">Bug 244121</a>: Warning in build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42262">Bug 42262</a>: Ant API<br>
-
-<h2>July 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=241538">Bug 241538</a>: ant tests need to be updated to reflect ant 1.7.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209504">Bug 209504</a>: Adopt Apache Ant 1.7.1<br>
-
-<h2>July 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158627">Bug 158627</a>: Eclipse is not following a variable import link<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201180">Bug 201180</a>: Export ant buildfile does not export bootclasspath correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192726">Bug 192726</a>: ant exporter incorrectly defines path variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195840">Bug 195840</a>: Import a XML file with BOM character in ant editor fails<br>
-
-<h2>June 30, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238665">Bug 238665</a>: Change to use bundle activation policy for Ant core and Ant ui<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238990">Bug 238990</a>: Remove no longer used code to setup code assist navigation<br>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.core/schema/antTasks.exsd b/eclipse/plugins/org.eclipse.ant.core/schema/antTasks.exsd
index 77e7a13..6e33754 100644
--- a/eclipse/plugins/org.eclipse.ant.core/schema/antTasks.exsd
+++ b/eclipse/plugins/org.eclipse.ant.core/schema/antTasks.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.ant.core">
+<schema targetNamespace="org.eclipse.ant.core" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
          <meta.schema plugin="org.eclipse.ant.core" id="antTasks" name="Ant Tasks"/>
@@ -20,6 +20,11 @@ request that the declaring plug-in load the specified class.
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="antTask" minOccurs="0" maxOccurs="unbounded"/>
@@ -65,7 +70,7 @@ request that the declaring plug-in load the specified class.
          <attribute name="uri" type="string">
             <annotation>
                <documentation>
-                   The uri that this definition should live in. Only used if using Ant newer than 1.6.
+                  The uri that this definition should live in. Only used if using Ant newer than 1.6.
                </documentation>
             </annotation>
          </attribute>
@@ -111,6 +116,7 @@ for the library containing the task.
       </complexType>
    </element>
 
+
    <annotation>
       <appInfo>
          <meta.section type="examples"/>
@@ -124,9 +130,11 @@ for the library containing the task.
    </extension> 
 </pre>
 </p>
+In the above example the <code>antSupport.jar</code> must be created using an Ant project builder. For more information about creating project builders and how they work, please refer to the following help topics: <b>Contributing tasks and types</b>, <b>Ant buildfiles as project builders</b> and <b>Creating a project builder Ant buildfile</b>
       </documentation>
    </annotation>
 
+
    <annotation>
       <appInfo>
          <meta.section type="implementation"/>
@@ -142,7 +150,7 @@ eclipse.incrementalBuild and eclipse.refreshLocal.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2000, 2006 IBM Corporation and others.<br>
+         Copyright (c) 2000, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made 
 available under the terms of the Eclipse Public License v1.0 which 
 accompanies this distribution, and is available at 
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
index 61d38c4..ebe2bc6 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,7 +99,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 		}
 
 		public String toString() {
-			return from.toString() + "->" + (to == null ? "" : to.toString()); //$NON-NLS-1$//$NON-NLS-2$
+			return from.toString() + "->" + (to == null ? IAntCoreConstants.EMPTY_STRING : to.toString()); //$NON-NLS-1$
 		}
 	}
 
@@ -206,7 +206,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	
 	private void restoreTasks(Preferences prefs) {
 		 String tasks = prefs.getString(IAntCoreConstants.PREFERENCE_TASKS);
-		 if (tasks.equals("")) { //$NON-NLS-1$
+		 if (tasks.equals(IAntCoreConstants.EMPTY_STRING)) {
 			 customTasks = new Task[0];
 		 } else {
 			 customTasks = extractTasks(prefs, getArrayFromString(tasks));
@@ -215,7 +215,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	
 	private void restoreTypes(Preferences prefs) {
 		String types = prefs.getString(IAntCoreConstants.PREFERENCE_TYPES);
-		if (types.equals("")) {//$NON-NLS-1$
+		if (types.equals(IAntCoreConstants.EMPTY_STRING)) {
 			customTypes = new Type[0];
 		} else {
 			customTypes = extractTypes(prefs, getArrayFromString(types));
@@ -224,14 +224,14 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	
 	private void restoreAntHomeEntries(Preferences prefs) {
 		String entries = prefs.getString("ant_urls"); //old constant //$NON-NLS-1$
-		if (entries.equals("")) {//$NON-NLS-1$
+		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
 			entries= prefs.getString(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES);
 		} else {
 			prefs.setToDefault("ant_urls"); //$NON-NLS-1$
 			antHomeEntries= migrateURLEntries(getArrayFromString(entries));
 			return;
 		}
-		if (entries.equals("")) {//$NON-NLS-1$
+		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
 			antHomeEntries= getDefaultAntHomeEntries();
 		} else {
 			antHomeEntries= extractEntries(getArrayFromString(entries));
@@ -240,14 +240,14 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	
 	private void restoreAdditionalEntries(Preferences prefs) {
 		String entries = prefs.getString("urls"); //old constant //$NON-NLS-1$
-		if (entries.equals("")) {//$NON-NLS-1$
+		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
 			entries = prefs.getString(IAntCoreConstants.PREFERENCE_ADDITIONAL_ENTRIES);
 		} else {
 			prefs.setToDefault("urls"); //$NON-NLS-1$
 			additionalEntries= migrateURLEntries(getArrayFromString(entries));
 			return;
 		}
-		if (entries.equals("")) {//$NON-NLS-1$
+		if (entries.equals(IAntCoreConstants.EMPTY_STRING)) {
 			IAntClasspathEntry toolsJarEntry= getToolsJarEntry();
 			List userLibs= getUserLibraries();
 			if (toolsJarEntry == null) {
@@ -314,7 +314,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	
 	private void restoreCustomProperties(Preferences prefs) {
 		String properties = prefs.getString(IAntCoreConstants.PREFERENCE_PROPERTIES);
-		if (properties.equals("")) {//$NON-NLS-1$
+		if (properties.equals(IAntCoreConstants.EMPTY_STRING)) {
 			customProperties = new Property[0];
 		} else {
 			customProperties = extractProperties(prefs, getArrayFromString(properties));
@@ -323,7 +323,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	
 	private void restoreCustomPropertyFiles(Preferences prefs) {
 		String propertyFiles= prefs.getString(IAntCoreConstants.PREFERENCE_PROPERTY_FILES);
-		if (propertyFiles.equals("")) { //$NON-NLS-1$
+		if (propertyFiles.equals(IAntCoreConstants.EMPTY_STRING)) {
 			customPropertyFiles= new String[0];
 		} else {
 			customPropertyFiles= getArrayFromString(propertyFiles);
@@ -342,7 +342,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 			task.setTaskName(taskName);
 			task.setClassName(values[0]);
 			String library= values[1];
-			if (library.startsWith("file:")) { //$NON-NLS-1$
+			if (library.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
 				//old format where URLs were persisted
 				library= library.substring(5);
 			}
@@ -364,7 +364,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 			type.setTypeName(typeName);
 			type.setClassName(values[0]);
 			String library= values[1];
-			if (library.startsWith("file:")) { //$NON-NLS-1$
+			if (library.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
 				//old format where URLs were persisted
 				library= library.substring(5);
 			}
@@ -486,7 +486,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	 * 
 	 * @param packages the live list of {@link ExportedPackage}s to inspect
 	 * @return the bundle that represents the highest version of <code>org.apache.ant</code> or <code>null</code>
-	 * if there are other providers for the <code>org.apache.ant.tools</code> packages.
+	 * if there are no <code>org.apache.ant</code> providers of the <code>org.apache.ant.tools</code> package.
 	 */
 	Bundle findHighestAntVersion(ExportedPackage[] packages) {
 		Bundle bundle = null;
@@ -552,7 +552,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 				continue;
 			}
 			Task task = new Task();
-			task.setTaskName(element.getAttribute(AntCorePlugin.NAME));
+			task.setTaskName(element.getAttribute(IAntCoreConstants.NAME));
 			task.setClassName(element.getAttribute(AntCorePlugin.CLASS));
 			
 			configureAntObject(result, element, task, task.getTaskName(), InternalCoreAntMessages.AntCorePreferences_No_library_for_task);
@@ -587,7 +587,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 				continue;
 			}
 			Type type = new Type();
-			type.setTypeName(element.getAttribute(AntCorePlugin.NAME));
+			type.setTypeName(element.getAttribute(IAntCoreConstants.NAME));
 			type.setClassName(element.getAttribute(AntCorePlugin.CLASS));
 			
 			configureAntObject(result, element, type, type.getTypeName(), InternalCoreAntMessages.AntCorePreferences_No_library_for_type);
@@ -595,6 +595,22 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 		return result;
 	}
 
+	/*
+	 * Create a "file:" URL for the specified File making sure the URL ends with a slash if the File denotes a directory.
+	 */
+	private URL getClasspathEntryURL(Bundle bundle, String library) throws IOException {
+		File urlFile;
+		if (library.equals("/")) { //$NON-NLS-1$
+			urlFile = FileLocator.getBundleFile(bundle);
+		} else {
+			urlFile = new File(FileLocator.toFileURL(bundle.getEntry(library)).getPath());
+		}
+		if (!urlFile.exists())
+			return null;
+	    String path = urlFile.getAbsolutePath();
+	    return new URL(IAntCoreConstants.FILE_PROTOCOL + (urlFile.isDirectory() ? path + "/" : path));  //$NON-NLS-1$
+	}
+
 	private void configureAntObject(List result, IConfigurationElement element, AntObject antObject, String objectName, String errorMessage) {
 		String runtime = element.getAttribute(AntCorePlugin.ECLIPSE_RUNTIME);
 		if (runtime != null) {
@@ -617,10 +633,8 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
             IContributor contributor= element.getContributor();
 			antObject.setPluginLabel(contributor.getName());
 			Bundle bundle = Platform.getBundle(contributor.getName());
-			URL url = FileLocator.toFileURL(bundle.getEntry(library));
-			File urlFile = new File(url.getPath());
-			if (urlFile.exists()) {
-				url = new URL("file:" +  urlFile.getAbsolutePath()); //$NON-NLS-1$
+			URL url = getClasspathEntryURL(bundle, library);
+			if (url != null) {
 				addURLToExtraClasspathEntries(url, element);
 				result.add(antObject);
 				addPluginClassLoader(bundle);
@@ -629,7 +643,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 			} 
 
 			//type specifies a library that does not exist
-			IStatus status = new Status(IStatus.ERROR, AntCorePlugin.PI_ANTCORE, AntCorePlugin.ERROR_LIBRARY_NOT_SPECIFIED, NLS.bind(errorMessage, new String[]{url.toExternalForm(), element.getContributor().getName()}), null);
+			IStatus status = new Status(IStatus.ERROR, AntCorePlugin.PI_ANTCORE, AntCorePlugin.ERROR_LIBRARY_NOT_SPECIFIED, NLS.bind(errorMessage, new String[]{library, element.getContributor().getName()}), null);
 			AntCorePlugin.getPlugin().getLog().log(status);
 			return;
 		} catch (MalformedURLException e) {
@@ -657,15 +671,13 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 			String library = element.getAttribute(AntCorePlugin.LIBRARY);
 			Bundle bundle = Platform.getBundle(element.getContributor().getName());
 			try {
-				URL url = FileLocator.toFileURL(bundle.getEntry(library));
-				File urlFile = new File(url.getPath());
-				if (urlFile.exists()) {
-					url = new URL("file:" +  urlFile.getAbsolutePath()); //$NON-NLS-1$
+				URL url = getClasspathEntryURL(bundle, library);
+				if (url != null) {
 					addURLToExtraClasspathEntries(url, element);  
 					addPluginClassLoader(bundle);
 				} else {
 					//extra classpath entry that does not exist
-					IStatus status = new Status(IStatus.ERROR, AntCorePlugin.PI_ANTCORE, AntCorePlugin.ERROR_LIBRARY_NOT_SPECIFIED, NLS.bind(InternalCoreAntMessages.AntCorePreferences_6, new String[]{url.toExternalForm(), element.getContributor().getName()}), null);
+					IStatus status = new Status(IStatus.ERROR, AntCorePlugin.PI_ANTCORE, AntCorePlugin.ERROR_LIBRARY_NOT_SPECIFIED, NLS.bind(InternalCoreAntMessages.AntCorePreferences_6, new String[]{library, element.getContributor().getName()}), null);
 					AntCorePlugin.getPlugin().getLog().log(status);
 					continue;
 				}
@@ -708,11 +720,11 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 			if (!relevantRunningHeadless(element)) {
 				continue;
 			}
-			String name = element.getAttribute(AntCorePlugin.NAME);
+			String name = element.getAttribute(IAntCoreConstants.NAME);
 			if (name == null) {
 				continue;
 			}
-			String value = element.getAttribute(AntCorePlugin.VALUE);
+			String value = element.getAttribute(IAntCoreConstants.VALUE);
 			Property property= null;
 			if (value != null) {
 				property = new Property(name, value);
@@ -746,16 +758,17 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	 * @since 3.0
 	 */
 	public IAntClasspathEntry getToolsJarEntry(IPath javaHomePath) {
-		if ("jre".equalsIgnoreCase(javaHomePath.lastSegment())) { //$NON-NLS-1$
-			javaHomePath = javaHomePath.removeLastSegments(1);
+		IPath newjh = javaHomePath;
+		if ("jre".equalsIgnoreCase(newjh.lastSegment())) { //$NON-NLS-1$
+			newjh = newjh.removeLastSegments(1);
 		}
-		javaHomePath= javaHomePath.append("lib").append("tools.jar"); //$NON-NLS-1$ //$NON-NLS-2$
-		File tools= javaHomePath.toFile();
+		newjh= newjh.append("lib").append("tools.jar"); //$NON-NLS-1$ //$NON-NLS-2$
+		File tools= newjh.toFile();
 		if (!tools.exists()) {
 			//attempt to find in the older 1.1.* 
-			javaHomePath= javaHomePath.removeLastSegments(1);
-			javaHomePath= javaHomePath.append("classes.zip"); //$NON-NLS-1$
-			tools= javaHomePath.toFile();
+			newjh= newjh.removeLastSegments(1);
+			newjh= newjh.append("classes.zip"); //$NON-NLS-1$
+			tools= newjh.toFile();
 			if (!tools.exists()) {
 				return null;
 			}
@@ -892,7 +905,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	private void addLibraries(Bundle source, List destination) throws IOException, MalformedURLException {
 		ManifestElement[] libraries = null;
 		try {
-			libraries = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, (String) source.getHeaders("").get(Constants.BUNDLE_CLASSPATH)); //$NON-NLS-1$
+			libraries = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, (String) source.getHeaders(IAntCoreConstants.EMPTY_STRING).get(Constants.BUNDLE_CLASSPATH));
 		} catch (BundleException e) {
 			IStatus status = new Status(IStatus.ERROR, AntCorePlugin.PI_ANTCORE, AntCorePlugin.ERROR_MALFORMED_URL, InternalCoreAntMessages.AntCorePreferences_0, e);
 			AntCorePlugin.getPlugin().getLog().log(status);
@@ -1503,13 +1516,13 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	 */
 	protected String[] getArrayFromString(String list) {
 		String separator= ","; //$NON-NLS-1$
-		if (list == null || list.trim().equals("")) { //$NON-NLS-1$
+		if (list == null || list.trim().equals(IAntCoreConstants.EMPTY_STRING)) {
 			return new String[0];
 		}
 		ArrayList result = new ArrayList();
 		for (StringTokenizer tokens = new StringTokenizer(list, separator); tokens.hasMoreTokens();) {
 			String token = tokens.nextToken().trim();
-			if (!token.equals("")) { //$NON-NLS-1$
+			if (!token.equals(IAntCoreConstants.EMPTY_STRING)) {
 				result.add(token);
 			}
 		}
@@ -1547,7 +1560,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 		}	
 		
 		if (customTasks.length == 0) {
-			prefs.setValue(IAntCoreConstants.PREFERENCE_TASKS, ""); //$NON-NLS-1$
+			prefs.setValue(IAntCoreConstants.PREFERENCE_TASKS, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
 		StringBuffer tasks = new StringBuffer();
@@ -1569,7 +1582,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 		}	
 				
 		if (customTypes.length == 0) {
-			prefs.setValue(IAntCoreConstants.PREFERENCE_TYPES, ""); //$NON-NLS-1$
+			prefs.setValue(IAntCoreConstants.PREFERENCE_TYPES, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
 		StringBuffer types = new StringBuffer();
@@ -1591,7 +1604,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 		}
 		
 		if (customProperties.length == 0) {
-			prefs.setValue(IAntCoreConstants.PREFERENCE_PROPERTIES, ""); //$NON-NLS-1$
+			prefs.setValue(IAntCoreConstants.PREFERENCE_PROPERTIES, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
 		StringBuffer properties = new StringBuffer();
@@ -1604,8 +1617,8 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	}
 
 	protected void updateAdditionalEntries(Preferences prefs) {
-		prefs.setValue("urls", ""); //old constant removed  //$NON-NLS-1$//$NON-NLS-2$
-		String serialized= ""; //$NON-NLS-1$
+		prefs.setValue("urls", IAntCoreConstants.EMPTY_STRING); //old constant removed  //$NON-NLS-1$
+		String serialized= IAntCoreConstants.EMPTY_STRING;
 		IAntClasspathEntry toolsJarEntry= getToolsJarEntry();
 		List userLibs= getUserLibraries();
 		if (userLibs == null) {
@@ -1635,7 +1648,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 		
 		prefs.setValue(IAntCoreConstants.PREFERENCE_ADDITIONAL_ENTRIES, serialized);
 		
-		String prefAntHome= ""; //$NON-NLS-1$
+		String prefAntHome= IAntCoreConstants.EMPTY_STRING;
 		if (antHome != null && !antHome.equals(getDefaultAntHome())) {
 			prefAntHome= antHome;
 		} 
@@ -1643,7 +1656,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 	}
 	
 	protected void updateAntHomeEntries(Preferences prefs) {
-		prefs.setValue("ant_urls", ""); //old constant removed  //$NON-NLS-1$//$NON-NLS-2$
+		prefs.setValue("ant_urls", IAntCoreConstants.EMPTY_STRING); //old constant removed  //$NON-NLS-1$
 		
 		//see if the custom entries are just the default entries
 		IAntClasspathEntry[] defaultEntries= getDefaultAntHomeEntries();
@@ -1660,7 +1673,7 @@ public class AntCorePreferences implements org.eclipse.core.runtime.Preferences.
 		if (dflt) {
 			//always want to recalculate the default Ant urls
 			//to pick up any changes in the default Ant classpath
-			prefs.setValue(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES, ""); //$NON-NLS-1$
+			prefs.setValue(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES, IAntCoreConstants.EMPTY_STRING);
 			return;
 		}
 		StringBuffer entries = new StringBuffer();
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
index edddfbf..c16eb11 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -340,7 +340,7 @@ public class AntRunner implements IApplication {
 			
 			if (buildLoggerClassName == null) {
 				//indicate that the default logger is not to be used
-				buildLoggerClassName= ""; //$NON-NLS-1$
+				buildLoggerClassName= IAntCoreConstants.EMPTY_STRING;
 			}
 			// add build logger
 			Method addBuildLogger = classInternalAntRunner.getMethod("addBuildLogger", new Class[] { String.class }); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/IAntPropertyValueProvider.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/IAntPropertyValueProvider.java
index 0cf7155..6f250b3 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/IAntPropertyValueProvider.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/IAntPropertyValueProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 BBDO Detroit and others.
+ * Copyright (c) 2003, 2006 BBDO Detroit and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
index 41b1605..0db8c2a 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/ProjectInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.ant.core;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
+
 
 /**
  * Represents information about a project within an Ant build file.
@@ -28,12 +30,12 @@ public class ProjectInfo {
 	 * Create a project information
 	 * 
 	 * @param name project name
-	 * @param description a brief explanation of the project's purpose 		or
+	 * @param description a brief explanation of the project's purpose or
 	 * <code>null</code> if not specified
 	 */
 	/*package*/
 	ProjectInfo(String name, String description) {
-		this.name = name == null ? "" : name; //$NON-NLS-1$
+		this.name = name == null ? IAntCoreConstants.EMPTY_STRING : name;
 		this.description = description;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
index bfec707..7eede73 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/core/TargetInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.ant.core;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
+
 
 /**
  * Represents information about a target within an Ant build file.
@@ -38,7 +40,7 @@ public class TargetInfo {
 	 */
 	/*package*/
 	TargetInfo(ProjectInfo project, String name, String description, String[] dependencies, boolean isDefault) {
-		this.name = name == null ? "" : name; //$NON-NLS-1$
+		this.name = name == null ? IAntCoreConstants.EMPTY_STRING : name;
 		this.description = description;
 		this.project = project;
 		this.dependencies = dependencies;
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
index 45d19ec..9069438 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClasspathEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,10 +42,10 @@ public class AntClasspathEntry implements IAntClasspathEntry {
 		}
 		try {
 			String expanded = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(entryString);
-			return new URL("file:" + expanded); //$NON-NLS-1$
+			return new URL(IAntCoreConstants.FILE_PROTOCOL + expanded);
 		} catch (CoreException e) {
 			try {
-				return new URL("file:" + entryString); //$NON-NLS-1$
+				return new URL(IAntCoreConstants.FILE_PROTOCOL + entryString);
 			} catch (MalformedURLException e1) {
 				return null;
 			}
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
index 483b4b3..1bc54fb 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntCoreUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,12 +73,12 @@ public class AntCoreUtil {
 		}
 		commands.remove(index);
 		if (index == commands.size()) {// if this is the last command
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		
 		String command = (String) commands.get(index);
 		if (command.startsWith("-")) { //new parameter //$NON-NLS-1$
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		commands.remove(index);
 		return command;
@@ -94,7 +94,7 @@ public class AntCoreUtil {
 				int posEq = name.indexOf("="); //$NON-NLS-1$
 				if (posEq == 0) {
 					value= name.substring(1);
-					name= ""; //$NON-NLS-1$
+					name= IAntCoreConstants.EMPTY_STRING;
 				} else if (posEq > 0 && posEq != name.length() - 1) {
 					value = name.substring(posEq + 1).trim();
 					name = name.substring(0, posEq);
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
index 2b0fc00..30ab90f 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,7 +82,7 @@ public abstract class AntObject {
 	 * @see java.lang.Object#toString()
 	 */
 	public String toString() {
-		if (fURI == null || fURI.equals("") || fURI.equals("antlib:org.apache.tools.ant")) {  //$NON-NLS-1$//$NON-NLS-2$
+		if (fURI == null || fURI.equals(IAntCoreConstants.EMPTY_STRING) || fURI.equals("antlib:org.apache.tools.ant")) {  //$NON-NLS-1$
             return fName;
         }
 		return fURI + ':' + fName;
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
index 30c2dbc..d969f33 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/IAntCoreConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.core;
 
+import org.eclipse.ant.core.AntCorePlugin;
+
 
 /**
  * Common constants.
@@ -43,4 +45,83 @@ public interface IAntCoreConstants {
 	public static final String PREFERENCE_PROPERTIES = "properties"; //$NON-NLS-1$
 	public static final String PREFERENCE_PROPERTY_FILES = "propertyfiles"; //$NON-NLS-1$
 	public static final String PREFIX_PROPERTY = "property."; //$NON-NLS-1$
+
+	/**
+	 * Constant for the word 'default'
+	 * <br><br>
+	 * Value is: <code>default</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String DEFAULT = "default"; //$NON-NLS-1$
+
+	/**
+	 * Constant for the word 'dir'
+	 * <br><br>
+	 * Value is: <code>dir</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String DIR = "dir"; //$NON-NLS-1$
+	
+	/**
+	 * Constant for the empty {@link String}
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String EMPTY_STRING = ""; //$NON-NLS-1$
+	
+	/**
+	 * Constant for the word 'file'
+	 * <br><br>
+	 * Value is: <code>file</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String FILE = "file"; //$NON-NLS-1$
+
+	/**
+	 * Constant representing a file URL protocol
+	 * <br><br>
+	 * Value is: <code>file:</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String FILE_PROTOCOL = "file:"; //$NON-NLS-1$
+	
+	/**
+	 * Constant for the word 'name'
+	 * <br><br>
+	 * Value is: <code>name</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String NAME = AntCorePlugin.NAME;
+
+	/**
+	 * Constant for the word 'value'
+	 * <br><br>
+	 * Value is: <code>value</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String VALUE = AntCorePlugin.VALUE;
+
+	/**
+	 * Constant for the word 'description'
+	 * <br><br>
+	 * Value is: <code>description</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.2.200
+	 */
+	public static final String DESCRIPTION = "description"; //$NON-NLS-1$
+
+	/**
+	 * Constant for the encoding <code>UTF-8</code>
+	 * <br><br>
+	 * Value is: <code>UTF-8</code>
+	 * 
+	 * @since org.eclipse.ant.core 3.3.0
+	 */
+	public static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
index 22d5b4b..2a48c60 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/contentDescriber/AntHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -55,7 +56,6 @@ public final class AntHandler extends DefaultHandler {
         }
     }
 
-    private static final String DEFAULT_ATTRIBUTE= "default"; //$NON-NLS-1$
     private static final String PROJECT = "project"; //$NON-NLS-1$
     private static final String TARGET= "target"; //$NON-NLS-1$
     private static final String MACRODEF= "macrodef"; //$NON-NLS-1$
@@ -141,7 +141,7 @@ public final class AntHandler extends DefaultHandler {
      * @see org.xml.sax.helpers.DefaultHandler#resolveEntity(java.lang.String, java.lang.String)
      */
     public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
-        return new InputSource(new StringReader("")); //$NON-NLS-1$
+        return new InputSource(new StringReader(IAntCoreConstants.EMPTY_STRING));
     }
 
     /*
@@ -158,7 +158,7 @@ public final class AntHandler extends DefaultHandler {
                 throw new StopParsingException();
             }
             if (attributes != null) {
-                fDefaultAttributeFound= attributes.getValue(DEFAULT_ATTRIBUTE) != null;
+                fDefaultAttributeFound= attributes.getValue(IAntCoreConstants.DEFAULT) != null;
                 if (fDefaultAttributeFound) {
                     throw new StopParsingException();
                 }
diff --git a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
index 4b69c48..752c21a 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ import org.eclipse.ant.core.Type;
 import org.eclipse.ant.internal.core.AbstractEclipseBuildLogger;
 import org.eclipse.ant.internal.core.AntCoreUtil;
 import org.eclipse.ant.internal.core.AntSecurityManager;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IPath;
@@ -739,7 +740,7 @@ public class InternalAntRunner {
 	private BuildLogger createLogger() {
 		if (loggerClassname == null) {
 			buildLogger= new DefaultLogger();
-		} else if (!"".equals(loggerClassname)) { //$NON-NLS-1$
+		} else if (!IAntCoreConstants.EMPTY_STRING.equals(loggerClassname)) {
 			try {
 				buildLogger = (BuildLogger) (Class.forName(loggerClassname).newInstance());
 			} catch (ClassCastException e) {
@@ -837,8 +838,8 @@ public class InternalAntRunner {
 			project.log(message, priority);	
 		} else {
 			if (buildListeners != null) {
-				project = new Project();
-				BuildEvent event = new BuildEvent(project);
+				Project p = new Project();
+				BuildEvent event = new BuildEvent(p);
 				event.setMessage(message, priority);
 				//notify the build listeners that are not registered as
 				//no project existed
@@ -1163,7 +1164,7 @@ public class InternalAntRunner {
 		if (p < 0) { return; }
 
 		// remove everything preceding that last '-arg'
-		String s = ""; //$NON-NLS-1$
+		String s = IAntCoreConstants.EMPTY_STRING;
 		for (int i = 0; i <= p; i++) {
 			s += " " + ((String) commands.get(0)); //$NON-NLS-1$
 			commands.remove(0);
diff --git a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
index f192299..c069c4c 100644
--- a/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
+++ b/eclipse/plugins/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/ProgressBuildListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ import org.apache.tools.ant.Task;
 import org.apache.tools.ant.taskdefs.Ant;
 import org.apache.tools.ant.taskdefs.CallTarget;
 import org.eclipse.ant.core.AntCorePlugin;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
@@ -94,10 +95,11 @@ public class ProgressBuildListener implements BuildListener {
 		projects = new HashMap();
 		mainProject = project;
 		ProjectMonitors monitors = new ProjectMonitors();
-		if (monitor == null) {
-			monitor= new NullProgressMonitor();
+		IProgressMonitor localmonitor = monitor;
+		if (localmonitor == null) {
+			localmonitor= new NullProgressMonitor();
 		}
-		monitors.setMainMonitor(monitor);
+		monitors.setMainMonitor(localmonitor);
 		projects.put(mainProject, monitors);
 		List targets= new ArrayList(targetNames.size());
 		for (int i = 0; i < targetNames.size(); i++) {
@@ -108,7 +110,7 @@ public class ProgressBuildListener implements BuildListener {
 			}
 		}
 		int work = computeWork(targets);
-		monitors.getMainMonitor().beginTask("", work);  //$NON-NLS-1$
+		monitors.getMainMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, work);
 	}
 
 	/* (non-Javadoc)
@@ -190,7 +192,7 @@ public class ProgressBuildListener implements BuildListener {
 
 		monitors.setTargetMonitor(subMonitorFor(monitors.getMainMonitor(), 1));
 		int work = (target != null) ? target.getTasks().length : 100;
-		monitors.getTargetMonitor().beginTask("", work);  //$NON-NLS-1$
+		monitors.getTargetMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, work);
 	}
 
 	protected ProjectMonitors createMonitors(Project currentProject, Target target) {
@@ -209,7 +211,7 @@ public class ProgressBuildListener implements BuildListener {
 			parentProject = null;
 			monitors.setMainMonitor(subMonitorFor(parentMonitors.getTaskMonitor(), 1));
 		}
-		monitors.getMainMonitor().beginTask("", work);  //$NON-NLS-1$
+		monitors.getMainMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, work);
 		projects.put(currentProject, monitors);
 		return monitors;
 	}
@@ -255,7 +257,7 @@ public class ProgressBuildListener implements BuildListener {
 		}
 		currentTaskThread= Thread.currentThread();
 		monitors.setTaskMonitor(subMonitorFor(monitors.getTargetMonitor(), 1));
-		monitors.getTaskMonitor().beginTask("", 1);  //$NON-NLS-1$
+		monitors.getTaskMonitor().beginTask(IAntCoreConstants.EMPTY_STRING, 1);
 		// If this script is calling another one, track the project chain.
 		if (task instanceof Ant) {
 			parentProject = currentProject;
diff --git a/eclipse/plugins/org.eclipse.ant.launching/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.ant.launching/.settings/org.eclipse.jdt.core.prefs
index 8bd34ab..0a0e78e 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.ant.launching/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Sun Sep 20 13:08:07 CEST 2009
+#Thu May 05 15:06:07 CDT 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -7,68 +15,93 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=error
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=error
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.ant.launching/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.ant.launching/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..5ee1bba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ant.launching/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:42:25 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.ant.launching/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ant.launching/META-INF/MANIFEST.MF
index dd528aa..e62489a 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ant.launching/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Localization: plugin
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ant.launching;singleton:=true
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Activator: org.eclipse.ant.internal.launching.AntLaunching
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.debug.core;bundle-version="[3.6.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java b/eclipse/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
index 27592ec..49332ed 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/common/org/eclipse/ant/internal/launching/debug/AntDebugState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.taskdefs.MacroInstance;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.debug.model.DebugMessageIds;
 
 public class AntDebugState {
@@ -59,6 +60,39 @@ public class AntDebugState {
 		fLogger= logger;
 	}
 
+	public void buildStarted() {
+        fProjectToTargetNames= new HashMap();
+        fProjectToMapOfTargetToBuildSequence= new HashMap();
+    }
+    
+    /**
+     * Call-back from {@link org.eclipse.ant.internal.launching.runtime.logger.AntProcessDebugBuildLogger}
+     * when the build has finished
+     * @since 1.0.1
+     */
+    public void buildFinished() {
+    	if(fProjectToTargetNames != null) {
+    		fProjectToTargetNames.clear();
+    	}
+    	if(fProjectToMapOfTargetToBuildSequence != null) {
+    		fProjectToMapOfTargetToBuildSequence.clear();
+    	}
+    	fTargetsExecuting.clear();
+    	fTargetsToExecute.clear();
+    	if(fInitialProperties != null) {
+    		fInitialProperties.clear();
+    	}
+    	if(fProperties != null) {
+    		fProperties.clear();
+    	}
+    	if(fTaskToProxies != null) {
+    		fTaskToProxies.clear();
+    	}
+    	if(fTasks != null) {
+    		fTasks.clear();
+    	}
+    }
+	
 	public void waitIfSuspended() {
 		fLogger.waitIfSuspended();
 	}
@@ -128,7 +162,9 @@ public class AntDebugState {
 
 	public void setTargetExecuting(Target target) {
         if (target == null) {
-            fTargetsExecuting.pop();
+        	if(!fTargetsExecuting.isEmpty()) {
+        		fTargetsExecuting.pop();
+        	}
         } else {
             fTargetsExecuting.push(target);
         }
@@ -209,34 +245,38 @@ public class AntDebugState {
 		
 		setCurrentTask(event.getTask());
 		setConsiderTargetBreakpoints(false);
-		if (!getTasks().isEmpty()) {
+		Stack tasks = getTasks();
+		if (!tasks.isEmpty()) {
 			//cache the parent task proxy as when that task is started or finished the
 			//proxy is not yet available or is nulled out
-			Task parentTask = (Task) getTasks().peek();
+			Task parentTask = (Task) tasks.peek();
 			Object proxy = parentTask.getRuntimeConfigurableWrapper().getProxy();
 			if (proxy != null) {
 				fTaskToProxies.put(parentTask, proxy);
 			}
 		}
-		getTasks().push(getCurrentTask());
+		tasks.push(getCurrentTask());
 		waitIfSuspended();
 	}
 	
 
     public void taskFinished() {
-    	Task lastTask= (Task)getTasks().pop();
-        setLastTaskFinished(lastTask);
-        setCurrentTask(null);
-        String taskName= lastTask.getTaskName();
-       
-        if (getStepOverTask() != null) {
-        	if ((fgAntCallTaskName.equals(taskName) || fgAntTaskName.equals(taskName)) && (!fgAntCallTaskName.equals(getStepOverTask().getTaskName()) && !fgAntTaskName.equals(getStepOverTask().getTaskName()))) {
-        		setShouldSuspend(true);
-        	} else if (fTaskToProxies.remove(lastTask) instanceof MacroInstance) {
-        		setShouldSuspend(true);
-        	}
-        }
-        waitIfSuspended();
+    	Stack tasks = getTasks();
+    	if(!tasks.empty()) {
+	    	Task lastTask= (Task)tasks.pop();
+	        setLastTaskFinished(lastTask);
+	        setCurrentTask(null);
+	        String taskName= lastTask.getTaskName();
+	       
+	        if (getStepOverTask() != null) {
+	        	if ((fgAntCallTaskName.equals(taskName) || fgAntTaskName.equals(taskName)) && (!fgAntCallTaskName.equals(getStepOverTask().getTaskName()) && !fgAntTaskName.equals(getStepOverTask().getTaskName()))) {
+	        		setShouldSuspend(true);
+	        	} else if (fTaskToProxies.remove(lastTask) instanceof MacroInstance) {
+	        		setShouldSuspend(true);
+	        	}
+	        }
+    	}
+    	 waitIfSuspended();
     }
 
     public void stepOver() {
@@ -360,13 +400,13 @@ public class AntDebugState {
         Project projectExecuting= null;
         if (targetExecuting != null) {
             projectExecuting= targetExecuting.getProject();
-        } else { //no target...must be a task
+        } else if(!tasks.empty()) { //no target...must be a task
             Task task= (Task) tasks.peek();
             projectExecuting= task.getProject();
         }
         
 		if (!isAfterTaskEvent()) {
-			appendToStack(stackRepresentation, targetExecuting.getName(), "", getLocation(targetExecuting)); //$NON-NLS-1$
+			appendToStack(stackRepresentation, targetExecuting.getName(), IAntCoreConstants.EMPTY_STRING, getLocation(targetExecuting));
 		}
 		for (int i = tasks.size() - 1; i >= 0 ; i--) {
 			Task task= (Task) tasks.get(i);
@@ -406,20 +446,21 @@ public class AntDebugState {
 	     	for (int i = startIndex; i <= dependancyStackDepth; i++) {
 	     		stackTarget= (Target) buildSequence.get(i);
 	            if (stackTarget.dependsOn(targetExecuting.getName())) {
-	     		    appendToStack(stackRepresentation, stackTarget.getName(), "", getLocation(stackTarget)); //$NON-NLS-1$
+	     		    appendToStack(stackRepresentation, stackTarget.getName(), IAntCoreConstants.EMPTY_STRING, getLocation(stackTarget));
 	            }
 	     	}
 	     }
     }
 
 	public void marshallProperties(StringBuffer propertiesRepresentation, boolean escapeLineSep) {
-		if (getTasks().isEmpty()) {
+		Stack tasks = getTasks();
+		if (tasks.isEmpty()) {
 			return;
 		}
 	    propertiesRepresentation.append(DebugMessageIds.PROPERTIES);
 	    propertiesRepresentation.append(DebugMessageIds.MESSAGE_DELIMITER);
 		
-		Project project= ((Task)getTasks().peek()).getProject();
+		Project project= ((Task)tasks.peek()).getProject();
 		Map lastProperties= getProperties(); 
 		
 	    Map currentProperties= project.getProperties();
@@ -522,9 +563,4 @@ public class AntDebugState {
 	    //the target to execute
 	    return (Target) allTargets.get(targets.remove(0));
 	}
-    
-    public void buildStarted() {
-        fProjectToTargetNames= new HashMap();
-        fProjectToMapOfTargetToBuildSequence= new HashMap();
-    }
 }
diff --git a/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java b/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
index f8acbe4..3be4461 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessBuildLogger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import org.apache.tools.ant.Location;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
 import org.eclipse.ant.internal.core.AbstractEclipseBuildLogger;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.AntLaunch;
 import org.eclipse.ant.internal.launching.AntLaunching;
 import org.eclipse.ant.internal.launching.AntLaunchingUtil;
@@ -217,7 +218,7 @@ public class AntProcessBuildLogger extends NullBuildLogger {
     				}
     				line = r.readLine();
     			}
-    			logMessage("", event, Project.MSG_ERR); //$NON-NLS-1$
+    			logMessage(IAntCoreConstants.EMPTY_STRING, event, Project.MSG_ERR);
     		} catch (IOException e) {
     		}
         }
diff --git a/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessDebugBuildLogger.java b/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessDebugBuildLogger.java
index 13ddfa3..04bd7f5 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessDebugBuildLogger.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/AntProcessDebugBuildLogger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,36 @@ public class AntProcessDebugBuildLogger extends AntProcessBuildLogger implements
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.ant.internal.launching.runtime.logger.AntProcessBuildLogger#buildFinished(org.apache.tools.ant.BuildEvent)
+	 */
+	public void buildFinished(BuildEvent event) {
+		super.buildFinished(event);
+		cleanup();
+	}
+	
+	/**
+	 * Cleans up all held memory.
+	 * <br><br>
+	 * Called from {@link #buildFinished(BuildEvent)} and {@link #terminate()}
+	 * @since 1.0.1
+	 */
+	void cleanup() {
+		if(fAntDebugTarget != null) {
+			IProcess process= getAntProcess(fProcessId);
+			if(process != null) {
+				ILaunch launch= process.getLaunch();
+				launch.removeDebugTarget(fAntDebugTarget);
+			}
+		}
+		if(fDebugState != null) {
+			fDebugState.buildFinished();
+		}
+		if(fBreakpoints != null) {
+			fBreakpoints.clear();
+		}
+	}
+	
+	/* (non-Javadoc)
 	 * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent)
 	 */
 	public void taskFinished(BuildEvent event) {
@@ -147,6 +177,13 @@ public class AntProcessDebugBuildLogger extends AntProcessBuildLogger implements
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.ant.internal.launching.debug.IAntDebugController#terminate()
+	 */
+	public void terminate() {
+		cleanup();
+	}
+	
+	/* (non-Javadoc)
 	 * @see org.eclipse.ant.internal.ui.debug.IAntDebugController#stepOver()
 	 */
 	public synchronized void stepOver() {
@@ -176,7 +213,7 @@ public class AntProcessDebugBuildLogger extends AntProcessBuildLogger implements
 	 * @see org.eclipse.ant.internal.ui.debug.IAntDebugController#getProperties()
 	 */
 	public void getProperties() {
-		if (!fAntDebugTarget.isSuspended()) {
+		if (fAntDebugTarget == null || !fAntDebugTarget.isSuspended()) {
 			return;
 		}
 	    StringBuffer propertiesRepresentation= new StringBuffer();
@@ -234,7 +271,9 @@ public class AntProcessDebugBuildLogger extends AntProcessBuildLogger implements
 	 */
 	public void targetFinished(BuildEvent event) {
 		super.targetFinished(event);
-		fDebugState.setTargetExecuting(null);
+		if(fDebugState != null) {
+			fDebugState.setTargetExecuting(null);
+		}
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java b/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
index 1119f39..990a5e6 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/InternalAntRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * Portions Copyright  2000-2005 The Apache Software Foundation
  * All rights reserved. This program and the accompanying materials are made 
  * available under the terms of the Apache Software License v2.0 which 
@@ -46,6 +46,7 @@ import org.apache.tools.ant.Target;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.TaskAdapter;
 import org.apache.tools.ant.util.FileUtils;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.remote.logger.RemoteAntBuildLogger;
 
 /**
@@ -222,7 +223,7 @@ public class InternalAntRunner {
 		//notify the logger that project help message are coming
 		//since there is no buildstarted or targetstarted to 
 		//to be used to establish the connection
-		logMessage(project, "", MSG_PROJECT_HELP); //$NON-NLS-1$
+		logMessage(project, IAntCoreConstants.EMPTY_STRING, MSG_PROJECT_HELP);
 		// find the target with the longest name
 		int maxLength = 0;
 		Enumeration ptargets = project.getTargets().elements();
@@ -255,7 +256,7 @@ public class InternalAntRunner {
 		Collections.sort(topDescriptions);
 		
 		String defaultTargetName = project.getDefaultTarget();
-		if (defaultTargetName != null && !"".equals(defaultTargetName)) { // shouldn't need to check but... //$NON-NLS-1$
+		if (defaultTargetName != null && !IAntCoreConstants.EMPTY_STRING.equals(defaultTargetName)) { // shouldn't need to check but...
 			List defaultName = new ArrayList(1);
 			List defaultDesc = null;
 			defaultName.add(defaultTargetName);
@@ -521,7 +522,7 @@ public class InternalAntRunner {
 	private BuildLogger createLogger() {
 		if (loggerClassname == null) {
 			buildLogger= new DefaultLogger();
-		} else if (!"".equals(loggerClassname)) { //$NON-NLS-1$
+		} else if (!IAntCoreConstants.EMPTY_STRING.equals(loggerClassname)) {
 			try {
 				buildLogger = (BuildLogger) (Class.forName(loggerClassname).newInstance());
 			} catch (ClassCastException e) {
@@ -586,8 +587,8 @@ public class InternalAntRunner {
 			project.log(message, priority);	
 		} else {
 			if (buildListeners != null) {
-				project = new Project();
-				BuildEvent event = new BuildEvent(project);
+				Project p = new Project();
+				BuildEvent event = new BuildEvent(p);
 				event.setMessage(message, priority);
 				//notify the build listeners that are not registered as
 				//no project existed
@@ -879,7 +880,7 @@ public class InternalAntRunner {
 		if (p < 0) { return; }
 
 		// remove everything preceding that last '-arg'
-		String s = ""; //$NON-NLS-1$
+		String s = IAntCoreConstants.EMPTY_STRING;
 		for (int i = 0; i <= p; i++) {
 			s += " " + ((String) commands.get(0)); //$NON-NLS-1$
 			commands.remove(0);
@@ -981,7 +982,7 @@ public class InternalAntRunner {
 				int posEq = name.indexOf("="); //$NON-NLS-1$
 				if (posEq == 0) {
 					value= name.substring(1);
-					name= ""; //$NON-NLS-1$
+					name= IAntCoreConstants.EMPTY_STRING;
 				} else if (posEq > 0 && posEq != name.length() - 1) {
 					value = name.substring(posEq + 1).trim();
 					name = name.substring(0, posEq);
@@ -1138,12 +1139,12 @@ public class InternalAntRunner {
 		}
 		commands.remove(index);
 		if (index == commands.size()) {// if this is the last command
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		
 		String command = (String) commands.get(index);
 		if (command.startsWith("-")) { //new parameter //$NON-NLS-1$
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		
 		commands.remove(index);
diff --git a/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java b/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
index fcaa8dd..95aad77 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntBuildLogger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ import org.apache.tools.ant.Location;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.util.StringUtils;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.debug.AntDebugState;
 import org.eclipse.ant.internal.launching.remote.AntSecurityException;
 import org.eclipse.ant.internal.launching.remote.InternalAntRunner;
@@ -55,7 +56,7 @@ public class RemoteAntBuildLogger extends DefaultLogger {
     /**
      * Host to connect to, default is the localhost
      */
-    protected String fHost= ""; //$NON-NLS-1$
+    protected String fHost= IAntCoreConstants.EMPTY_STRING;
     /**
      * Port to connect to.
      */
@@ -311,7 +312,7 @@ public class RemoteAntBuildLogger extends DefaultLogger {
         StringBuffer message;
         String taskName= event.getTask().getTaskName();
         if (taskName != null && taskName.equals(fLastTaskName)) {
-            taskName= ""; //$NON-NLS-1$
+            taskName= IAntCoreConstants.EMPTY_STRING;
         } else {
             fLastTaskName= taskName;
         }
diff --git a/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java b/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java
index 73f08bb..10f5d35 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/remote/org/eclipse/ant/internal/launching/remote/logger/RemoteAntDebugBuildLogger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -188,6 +188,28 @@ public class RemoteAntDebugBuildLogger extends RemoteAntBuildLogger implements I
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.ant.internal.launching.remote.logger.RemoteAntBuildLogger#buildFinished(org.apache.tools.ant.BuildEvent)
+	 */
+	public void buildFinished(BuildEvent event) {
+		super.buildFinished(event);
+		fDebugState.buildFinished();
+		fDebugState = null;
+		if(fBreakpoints != null) {
+			fBreakpoints.clear();
+		}
+		if(fRequestReader != null) {
+			try {
+				fRequestReader.close();
+			} catch (IOException e) {
+				
+			}
+		}
+		if(fRequestWriter != null) {
+			fRequestWriter.close();
+		}
+	}
+	
+	/* (non-Javadoc)
 	 * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent)
 	 */
 	public void taskStarted(BuildEvent event) {
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
index 3acfd09..9d59fb5 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import java.util.StringTokenizer;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.util.FileUtils;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.launchConfigurations.AntHomeClasspathEntry;
 import org.eclipse.ant.internal.launching.launchConfigurations.AntProcess;
 import org.eclipse.ant.internal.launching.launchConfigurations.RemoteAntRuntimeProcess;
@@ -254,7 +255,7 @@ public final class AntLaunchingUtil {
 		for (int i = 0; i < entries.length; i++) {
 			IRuntimeClasspathEntry entry = entries[i];
 			try {
-				urls[i] = new URL("file:" + entry.getLocation()); //$NON-NLS-1$
+				urls[i] = new URL(IAntCoreConstants.FILE_PROTOCOL + entry.getLocation());
 			} catch (MalformedURLException e) {
 				throw new CoreException(new Status(IStatus.ERROR, AntLaunching
 						.getUniqueIdentifier(), AntLaunching.INTERNAL_ERROR,
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/IAntDebugController.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/IAntDebugController.java
index abeac52..9078d3f 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/IAntDebugController.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/IAntDebugController.java
@@ -1,66 +1,72 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ant.internal.launching.debug;
-
-import org.eclipse.debug.core.model.IBreakpoint;
-
-public interface IAntDebugController {
-	
-    /**
-     * Resume the Ant build
-     */
-	public void resume();
-    
-    /**
-     * Suspend the Ant build
-     */
-	public void suspend();
-    
-     /**
-     * Step into the current Ant task
-     */
-	public void stepInto();
-    
-     /**
-     * Step over the current Ant task
-     */
-	public void stepOver();
-    
-    /**
-     * The provided breakpoint has been added or removed depending on the <code>added</code> parameter.
-     * Updates the controller for this change.
-     * 
-     * @param breakpoint the breakpoint that has been added or removed
-     * @param added whether or not the breakpoint has been added 
-     */
-	public void handleBreakpoint(IBreakpoint breakpoint, boolean added);
-    
-     /**
-     * Retrieve the properties of the Ant build.
-     * May occur asynchronously depending on implementation.
-     */
-	public void getProperties();
-    
-    /**
-     * Retrieve the stack frames of the Ant build.
-     * May occur asynchronously depending on implementation.
-     */
-	public void getStackFrames();
-
-	/**
-	 * Some strings are escaped when marshalled for socket communication.
-	 * The Ant debug controller will properly unescape these Strings if required.
-	 * 
-	 * @param value The buffer of the string to unescape
-	 * @return The unescaped string
-	 */
-	public StringBuffer unescapeString(StringBuffer value);
-}
+/*******************************************************************************
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ant.internal.launching.debug;
+
+import org.eclipse.debug.core.model.IBreakpoint;
+
+public interface IAntDebugController {
+	
+    /**
+     * Resume the Ant build
+     */
+	public void resume();
+    
+    /**
+     * Suspend the Ant build
+     */
+	public void suspend();
+    
+     /**
+     * Step into the current Ant task
+     */
+	public void stepInto();
+    
+     /**
+     * Step over the current Ant task
+     */
+	public void stepOver();
+	
+	/**
+	 * The debugging session has terminated
+	 * @since 1.0.1
+	 */
+	public void terminate();
+    
+    /**
+     * The provided breakpoint has been added or removed depending on the <code>added</code> parameter.
+     * Updates the controller for this change.
+     * 
+     * @param breakpoint the breakpoint that has been added or removed
+     * @param added whether or not the breakpoint has been added 
+     */
+	public void handleBreakpoint(IBreakpoint breakpoint, boolean added);
+    
+     /**
+     * Retrieve the properties of the Ant build.
+     * May occur asynchronously depending on implementation.
+     */
+	public void getProperties();
+    
+    /**
+     * Retrieve the stack frames of the Ant build.
+     * May occur asynchronously depending on implementation.
+     */
+	public void getStackFrames();
+
+	/**
+	 * Some strings are escaped when marshalled for socket communication.
+	 * The Ant debug controller will properly unescape these Strings if required.
+	 * 
+	 * @param value The buffer of the string to unescape
+	 * @return The unescaped string
+	 */
+	public StringBuffer unescapeString(StringBuffer value);
+}
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntDebugTarget.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntDebugTarget.java
index 855971d..a320843 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntDebugTarget.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntDebugTarget.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -172,14 +172,14 @@ public class AntDebugTarget extends AntDebugElement implements IDebugTarget, IDe
 	 * @see org.eclipse.debug.core.model.ISuspendResume#canResume()
 	 */
 	public boolean canResume() {
-		return !isTerminated() && isSuspended();
+		return !fTerminated && fSuspended;
 	}
 	
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend()
 	 */
 	public boolean canSuspend() {
-		return !isTerminated() && !isSuspended();
+		return !fTerminated && !fSuspended;
 	}
 	
 	/* (non-Javadoc)
@@ -193,8 +193,12 @@ public class AntDebugTarget extends AntDebugElement implements IDebugTarget, IDe
 	 * @see org.eclipse.debug.core.model.ISuspendResume#resume()
 	 */
 	public void resume() throws DebugException {
-	    fSuspended= false;
-	    fController.resume();
+		fSuspended= false;
+		fController.resume();
+		if(fThread.isSuspended()) {
+			fThread.resumedByTarget();
+		}
+		fireResumeEvent(DebugEvent.CLIENT_REQUEST);
 	}
 	
 	/**
@@ -219,27 +223,31 @@ public class AntDebugTarget extends AntDebugElement implements IDebugTarget, IDe
 	 * @see org.eclipse.debug.core.IBreakpointListener#breakpointAdded(org.eclipse.debug.core.model.IBreakpoint)
 	 */
 	public void breakpointAdded(IBreakpoint breakpoint) {
-		fController.handleBreakpoint(breakpoint, true);
-        if (breakpoint instanceof AntLineBreakpoint) {
-            if (((AntLineBreakpoint) breakpoint).isRunToLine()) {
-                if (fRunToLineBreakpoints == null) {
-                    fRunToLineBreakpoints= new ArrayList();
-                }
-                fRunToLineBreakpoints.add(breakpoint);
-            }
-        }
+		if(!fTerminated) {
+			fController.handleBreakpoint(breakpoint, true);
+	        if (breakpoint instanceof AntLineBreakpoint) {
+	            if (((AntLineBreakpoint) breakpoint).isRunToLine()) {
+	                if (fRunToLineBreakpoints == null) {
+	                    fRunToLineBreakpoints= new ArrayList();
+	                }
+	                fRunToLineBreakpoints.add(breakpoint);
+	            }
+	        }
+		}
 	}
 
     /* (non-Javadoc)
 	 * @see org.eclipse.debug.core.IBreakpointListener#breakpointRemoved(org.eclipse.debug.core.model.IBreakpoint, org.eclipse.core.resources.IMarkerDelta)
 	 */
 	public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) {
-		fController.handleBreakpoint(breakpoint, false);
-        if (fRunToLineBreakpoints != null) {
-            if (fRunToLineBreakpoints.remove(breakpoint) && fRunToLineBreakpoints.isEmpty()) {
-                fRunToLineBreakpoints= null;
-            }
-        }
+		if(!fTerminated) {
+			fController.handleBreakpoint(breakpoint, false);
+	        if (fRunToLineBreakpoints != null) {
+	            if (fRunToLineBreakpoints.remove(breakpoint) && fRunToLineBreakpoints.isEmpty()) {
+	                fRunToLineBreakpoints= null;
+	            }
+	        }
+		}
 	}
 	
 	/* (non-Javadoc)
@@ -330,23 +338,26 @@ public class AntDebugTarget extends AntDebugElement implements IDebugTarget, IDe
 	 * Called when this debug target terminates.
 	 */
 	public void terminated() {
-		fThreads= new IThread[0];
-		fTerminated = true;
-		fSuspended = false;
-		if (DebugPlugin.getDefault() != null) {
-			DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener(this);
-			DebugPlugin.getDefault().removeDebugEventListener(this);
-			DebugPlugin.getDefault().getBreakpointManager().removeBreakpointManagerListener(this);
-		}
-		if (!getProcess().isTerminated()) {
-		    try {
-                fProcess.terminate();
-                resume();
-		    } catch (DebugException e) {       
-		    }
-		}
-		if (DebugPlugin.getDefault() != null) {
-			fireTerminateEvent();
+		if(!fTerminated) {
+			fThreads= new IThread[0];
+			fTerminated = true;
+			fSuspended = false;
+			fController.terminate();
+			fController = null;
+			if (DebugPlugin.getDefault() != null) {
+				DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener(this);
+				DebugPlugin.getDefault().removeDebugEventListener(this);
+				DebugPlugin.getDefault().getBreakpointManager().removeBreakpointManagerListener(this);
+			}
+			if (!getProcess().isTerminated()) {
+			    try {
+	                fProcess.terminate();
+			    } catch (DebugException e) {       
+			    }
+			}
+			if (DebugPlugin.getDefault() != null) {
+				fireTerminateEvent();
+			}
 		}
 	}
 	
@@ -358,6 +369,7 @@ public class AntDebugTarget extends AntDebugElement implements IDebugTarget, IDe
 	public void stepOver() {
 	    fSuspended= false;
 		fController.stepOver();
+		fireResumeEvent(DebugEvent.CLIENT_REQUEST);
 	}
 	
 	/**
@@ -368,6 +380,7 @@ public class AntDebugTarget extends AntDebugElement implements IDebugTarget, IDe
 	public void stepInto() {
 	    fSuspended= false;
 	    fController.stepInto();
+	    fireResumeEvent(DebugEvent.CLIENT_REQUEST);
 	}
 	
 	/**
@@ -420,11 +433,15 @@ public class AntDebugTarget extends AntDebugElement implements IDebugTarget, IDe
     }
     
 	public void getStackFrames() {
-		fController.getStackFrames();
+		if(isSuspended()) {
+			fController.getStackFrames();
+		}
 	}
 	
 	public void getProperties() {
-		fController.getProperties();
+		if(!fTerminated) {
+			fController.getProperties();
+		}
 	}
 
     /* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntThread.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntThread.java
index a3f5eeb..d319cdd 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntThread.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntThread.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,8 @@ import org.eclipse.debug.core.model.IVariable;
  */
 public class AntThread extends AntDebugElement implements IThread {
 	
+	static final IBreakpoint[] NO_BREAKPOINTS = new IBreakpoint[0];
+	
 	/**
 	 * Breakpoints this thread is suspended at or <code>null</code>
 	 * if none.
@@ -154,7 +156,7 @@ public class AntThread extends AntDebugElement implements IThread {
 	 */
 	public IBreakpoint[] getBreakpoints() {
 		if (fBreakpoints == null) {
-			return new IBreakpoint[0];
+			return NO_BREAKPOINTS;
 		}
 		return fBreakpoints;
 	}
@@ -199,6 +201,14 @@ public class AntThread extends AntDebugElement implements IThread {
 		getDebugTarget().resume();
 	}
 	
+	/**
+	 * Call-back when the target is resumed
+	 * @since 1.0
+	 */
+	void resumedByTarget() {
+		aboutToResume(DebugEvent.CLIENT_REQUEST, false);
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.model.ISuspendResume#suspend()
 	 */
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java
index 6d86b7a..b13a14b 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/RemoteAntDebugBuildListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.ant.internal.launching.debug.IAntDebugController;
 import org.eclipse.ant.internal.launching.launchConfigurations.RemoteAntBuildListener;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.DebugEvent;
+import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.model.IBreakpoint;
@@ -69,8 +70,14 @@ public class RemoteAntDebugBuildListener extends RemoteAntBuildListener implemen
 		}
 	}	
 	
-	public RemoteAntDebugBuildListener(ILaunch launch) {
-		super(launch);
+	/**
+	 * Constructor
+	 * 
+	 * @param launch the backing launch to listen to
+	 * @param encoding the encoding to use for communications
+	 */
+	public RemoteAntDebugBuildListener(ILaunch launch, String encoding) {
+		super(launch, encoding);
 		//fDebug= true;
 	}
 	
@@ -80,7 +87,9 @@ public class RemoteAntDebugBuildListener extends RemoteAntBuildListener implemen
 		} else if (message.startsWith(DebugMessageIds.SUSPENDED)){
 			handleSuspendMessage(message);
 		} else if (message.startsWith(DebugMessageIds.TERMINATED)){
-			fTarget.terminated();
+			try {
+				fTarget.terminate();
+			} catch (DebugException e) {}
 		} else if (message.startsWith(DebugMessageIds.STACK)){
 			AntThread thread= (AntThread) fTarget.getThreads()[0];
 			thread.buildStack(message);
@@ -130,7 +139,7 @@ public class RemoteAntDebugBuildListener extends RemoteAntBuildListener implemen
     		try {
     			fRequestSocket = new Socket("localhost", fRequestPort); //$NON-NLS-1$
     			fRequestWriter = new PrintWriter(fRequestSocket.getOutputStream(), true);
-    			fResponseReader = new BufferedReader(new InputStreamReader(fRequestSocket.getInputStream()));
+    			fResponseReader = new BufferedReader(new InputStreamReader(fRequestSocket.getInputStream(), getEncoding()));
     			
     			fReaderThread= new ReaderThread();
     			fReaderThread.start();
@@ -178,8 +187,10 @@ public class RemoteAntDebugBuildListener extends RemoteAntBuildListener implemen
 	
 	protected synchronized void shutDown() {
         if (fTarget != null) {
-            fTarget.terminated();
-            fTarget= null;
+            try {
+				fTarget.terminate();
+				fTarget= null;
+			} catch (DebugException e) {}
         }
 		fLaunch= null;
 		if (DebugPlugin.getDefault() != null) {
@@ -220,6 +231,12 @@ public class RemoteAntDebugBuildListener extends RemoteAntBuildListener implemen
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.ant.internal.launching.debug.IAntDebugController#terminate()
+	 */
+	public void terminate() {
+	}
+	
+	/* (non-Javadoc)
 	 * @see org.eclipse.ant.internal.ui.debug.IAntDebugController#suspend()
 	 */
 	public void suspend() {
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
index 15088ae..3662460 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -597,15 +597,14 @@ public class AntLaunchDelegate extends LaunchConfigurationDelegate {
 			boolean setInputHandler) throws CoreException {
 		boolean debug = fMode.equals(ILaunchManager.DEBUG_MODE);
 		if (captureOutput) {
+			String encoding = DebugPlugin.getDefault().getLaunchManager().getEncoding(configuration);
 			if (debug) {
-				RemoteAntDebugBuildListener listener = new RemoteAntDebugBuildListener(
-						launch);
+				RemoteAntDebugBuildListener listener = new RemoteAntDebugBuildListener(launch, encoding);
 				if (requestPort != -1) {
 					listener.startListening(port, requestPort);
 				}
 			} else if (!fUserSpecifiedLogger) {
-				RemoteAntBuildListener client = new RemoteAntBuildListener(
-						launch);
+				RemoteAntBuildListener client = new RemoteAntBuildListener(launch, encoding);
 				if (port != -1) {
 					client.startListening(port);
 				}
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
index 71ac04c..09c42e0 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import java.util.List;
 import org.eclipse.ant.core.AntCorePlugin;
 import org.eclipse.ant.core.AntCorePreferences;
 import org.eclipse.ant.core.IAntClasspathEntry;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.AntLaunching;
 import org.eclipse.ant.internal.launching.AntLaunchingUtil;
 import org.eclipse.core.runtime.CoreException;
@@ -155,7 +156,7 @@ public class ContributedClasspathEntriesEntry extends AbstractRuntimeClasspathEn
                    continue;
                 }
                 String urlFileName= bundleURL.getFile();
-                if (urlFileName.startsWith("file:")) { //$NON-NLS-1$
+                if (urlFileName.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
                     try {
                         urlFileName= new URL(urlFileName).getFile();
                         if (urlFileName.endsWith("!/")) { //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java
index 2191556..083d7e2 100644
--- a/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java
+++ b/eclipse/plugins/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/RemoteAntBuildListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2009 IBM Corporation and others.
+ *  Copyright (c) 2003, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ import org.eclipse.debug.core.model.IProcess;
 
 /**
  * Parts adapted from org.eclipse.jdt.internal.junit.ui.RemoteTestRunnerClient
- * The client side of the RemoteAntBuildLogger. Handles the marshalling of the
+ * The client side of the RemoteAntBuildLogger. Handles the marshaling of the
  * different messages.
  */
 public class RemoteAntBuildListener implements ILaunchesListener {
@@ -61,6 +61,11 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 	private String fLastFileName = null;
 	private String fLastTaskName = null;
 	private boolean fBuildFailed = false;
+	/**
+	 * The encoding to use
+	 * @since 3.7
+	 */
+	private String fEncoding;
 
 	/**
 	 * Reads the message stream from the RemoteAntBuildLogger
@@ -78,20 +83,15 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 			Exception exception = null;
 			try {
 				fServerSocket = new ServerSocket(fServerPort);
-
-				int socketTimeout = Platform
-						.getPreferencesService()
-						.getInt(
+				int socketTimeout = Platform.getPreferencesService().getInt(
 								AntLaunching.getUniqueIdentifier(),
 								IAntLaunchingPreferenceConstants.ANT_COMMUNICATION_TIMEOUT,
 								20000, null);
 				fServerSocket.setSoTimeout(socketTimeout);
 				fSocket = fServerSocket.accept();
-				fBufferedReader = new BufferedReader(new InputStreamReader(
-						fSocket.getInputStream(), "UTF-8")); //$NON-NLS-1$
+				fBufferedReader = new BufferedReader(new InputStreamReader(fSocket.getInputStream(), fEncoding));
 				String message;
-				while (fBufferedReader != null
-						&& (message = fBufferedReader.readLine()) != null) {
+				while (fLaunch != null && fBufferedReader != null && (message = fBufferedReader.readLine()) != null) {
 					receiveMessage(message);
 				}
 			} catch (SocketException e) {
@@ -108,12 +108,29 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 		}
 	}
 
-	public RemoteAntBuildListener(ILaunch launch) {
+	/**
+	 * Constructor
+	 * 
+	 * @param launch the backing launch to listen to
+	 * @param encoding the encoding to use for communications
+	 */
+	public RemoteAntBuildListener(ILaunch launch, String encoding) {
 		super();
 		fLaunch = launch;
+		fEncoding = encoding;
 		DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this);
 	}
-
+	
+	/**
+	 * Returns the encoding set on the listener
+	 * 
+	 * @return the encoding set on the listener
+	 * @since 3.7
+	 */
+	protected String getEncoding() {
+		return fEncoding;
+	}
+	
 	/**
 	 * Start listening to an Ant build. Start a server connection that the
 	 * RemoteAntBuildLogger can connect to.
@@ -129,8 +146,7 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 	protected synchronized void shutDown() {
 		fLaunch = null;
 		if (DebugPlugin.getDefault() != null) {
-			DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(
-					this);
+			DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this);
 		}
 		try {
 			if (fBufferedReader != null) {
@@ -161,23 +177,20 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 		} else if (message.startsWith(MessageIds.TARGET)) {
 			receiveTargetMessage(message);
 		} else if (message.startsWith(MessageIds.PROCESS_ID)) {
-			message = message.substring(MessageIds.PROCESS_ID.length());
-			fProcessId = message;
+			fProcessId = message.substring(MessageIds.PROCESS_ID.length());
 		} else {
 			int index = message.indexOf(',');
 			if (index > 0) {
 				int priority = Integer.parseInt(message.substring(0, index));
-				message = message.substring(index + 1);
-				writeMessage(
-						message + System.getProperty("line.separator"), priority); //$NON-NLS-1$
-				if (message.startsWith("BUILD FAILED")) { //$NON-NLS-1$
+				String msg = message.substring(index + 1);
+				writeMessage(msg + System.getProperty("line.separator"), priority); //$NON-NLS-1$
+				if (msg.startsWith("BUILD FAILED")) { //$NON-NLS-1$
 					fBuildFailed = true;
 				} else if (fBuildFailed) {
-					if (message.startsWith("Total time:")) { //$NON-NLS-1$
+					if (msg.startsWith("Total time:")) { //$NON-NLS-1$
 						fBuildFailed = false;
 					} else {
-						AntLaunchingUtil.linkBuildFailedMessage(message,
-								getProcess());
+						AntLaunchingUtil.linkBuildFailedMessage(msg, getProcess());
 					}
 				}
 
@@ -186,9 +199,9 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 	}
 
 	private void receiveTargetMessage(String message) {
-		message = message.substring(MessageIds.TARGET.length());
-		StringTokenizer tokenizer = new StringTokenizer(message, ","); //$NON-NLS-1$
-		message = tokenizer.nextToken();
+		String msg = message.substring(MessageIds.TARGET.length());
+		StringTokenizer tokenizer = new StringTokenizer(msg, ","); //$NON-NLS-1$
+		msg = tokenizer.nextToken();
 		if (tokenizer.hasMoreTokens()) {
 			int locationLength = Integer.parseInt(tokenizer.nextToken());
 			String location = tokenizer.nextToken();
@@ -198,28 +211,24 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 				location += tokenizer.nextToken();
 			}
 			int lineNumber = Integer.parseInt(tokenizer.nextToken());
-			generateLink(message, location, lineNumber, 0, message.length() - 1);
+			generateLink(msg, location, lineNumber, 0, msg.length() - 1);
 		}
-		writeMessage(
-				message + System.getProperty("line.separator"), Project.MSG_INFO); //$NON-NLS-1$
+		writeMessage(msg + System.getProperty("line.separator"), Project.MSG_INFO); //$NON-NLS-1$
 	}
 
 	private void receiveTaskMessage(String message) {
-		message = message.substring(MessageIds.TASK.length());
-
-		int index = message.indexOf(',');
-		int priority = Integer.parseInt(message.substring(0, index));
-		int index2 = message.indexOf(',', index + 1);
-		String taskName = message.substring(index + 1, index2);
+		String msg = message.substring(MessageIds.TASK.length());
+		int index = msg.indexOf(',');
+		int priority = Integer.parseInt(msg.substring(0, index));
+		int index2 = msg.indexOf(',', index + 1);
+		String taskName = msg.substring(index + 1, index2);
 		if (taskName.length() == 0) {
 			taskName = fLastTaskName;
 		}
-		int index3 = message.indexOf(',', index2 + 1);
-		int lineLength = Integer
-				.parseInt(message.substring(index2 + 1, index3));
+		int index3 = msg.indexOf(',', index2 + 1);
+		int lineLength = Integer.parseInt(msg.substring(index2 + 1, index3));
 		int index4 = index3 + 1 + lineLength;
-
-		String line = message.substring(index3 + 1, index4);
+		String line = msg.substring(index3 + 1, index4);
 		StringBuffer labelBuff = new StringBuffer();
 		labelBuff.append('[');
 		labelBuff.append(taskName);
@@ -228,26 +237,21 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 		line = labelBuff.toString();
 
 		fLastTaskName = taskName;
-
-		int locationIndex = message.indexOf(',', index4 + 1);
+		int locationIndex = msg.indexOf(',', index4 + 1);
 		int finalIndex = locationIndex + 1;
-		String fileName = message.substring(index4 + 1, locationIndex);
+		String fileName = msg.substring(index4 + 1, locationIndex);
 		int locationLength = 0;
 		if (fileName.length() == 0) {
 			fileName = fLastFileName;
 		} else {
-			finalIndex = message.indexOf(',', locationIndex) + 1;
+			finalIndex = msg.indexOf(',', locationIndex) + 1;
 			locationLength = Integer.parseInt(fileName);
-			fileName = message.substring(finalIndex, finalIndex
-					+ locationLength);
+			fileName = msg.substring(finalIndex, finalIndex	+ locationLength);
 			locationLength += 1; // set past delimiter
 		}
 		fLastFileName = fileName;
-		int lineNumber = Integer.parseInt(message.substring(finalIndex
-				+ locationLength));
-
-		int size = AntLaunching.LEFT_COLUMN_SIZE
-				- (taskName.length() + 3);
+		int lineNumber = Integer.parseInt(msg.substring(finalIndex + locationLength));
+		int size = AntLaunching.LEFT_COLUMN_SIZE - (taskName.length() + 3);
 		int offset = Math.max(size - 2, 1);
 		int length = AntLaunching.LEFT_COLUMN_SIZE - size - 3;
 		if (fileName != null) {
@@ -256,15 +260,13 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 
 		StringBuffer fullMessage = new StringBuffer();
 		adornMessage(taskName, line, fullMessage);
-		writeMessage(
-				fullMessage
-						.append(System.getProperty("line.separator")).toString(), priority); //$NON-NLS-1$
+		writeMessage(fullMessage.append(System.getProperty("line.separator")).toString(), priority); //$NON-NLS-1$
 	}
 
-	private void generateLink(String line, String fileName, int lineNumber,
-			int offset, int length) {
-		((AntLaunch) fLaunch).addLinkDescriptor(line, fileName, lineNumber,
-				offset, length);
+	private void generateLink(String line, String fileName, int lineNumber,	int offset, int length) {
+		if(fLaunch != null) {
+			((AntLaunch) fLaunch).addLinkDescriptor(line, fileName, lineNumber, offset, length);
+		}
 	}
 
 	/**
@@ -273,13 +275,10 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 	protected IProcess getProcess() {
 		if (fProcess == null) {
 			if (fProcessId != null) {
-				IProcess[] all = DebugPlugin.getDefault().getLaunchManager()
-						.getProcesses();
+				IProcess[] all = DebugPlugin.getDefault().getLaunchManager().getProcesses();
 				for (int i = 0; i < all.length; i++) {
 					IProcess process = all[i];
-					if (fProcessId
-							.equals(process
-									.getAttribute(AbstractEclipseBuildLogger.ANT_PROCESS_ID))) {
+					if (fProcessId.equals(process.getAttribute(AbstractEclipseBuildLogger.ANT_PROCESS_ID))) {
 						fProcess = process;
 						break;
 					}
@@ -323,19 +322,17 @@ public class RemoteAntBuildListener implements ILaunchesListener {
 	 * Builds a right justified task prefix for the given build event, placing
 	 * it in the given string buffer.
 	 * 
-	 * @param event
-	 *            build event
-	 * @param fullMessage
-	 *            buffer to place task prefix in
+	 * @param taskName the name of the task, can be <code>null</code>
+	 * @param line the line of text
+	 * @param fullMessage buffer to place task prefix in
 	 */
-	private void adornMessage(String taskName, String line,
-			StringBuffer fullMessage) {
-		if (taskName == null) {
-			taskName = "null"; //$NON-NLS-1$
+	private void adornMessage(String taskName, String line, StringBuffer fullMessage) {
+		String tname = taskName;
+		if (tname == null) {
+			tname = "null"; //$NON-NLS-1$
 		}
 
-		int size = AntLaunching.LEFT_COLUMN_SIZE
-				- (taskName.length() + 6);
+		int size = AntLaunching.LEFT_COLUMN_SIZE - (tname.length() + 6);
 		for (int i = 0; i < size; i++) {
 			fullMessage.append(' ');
 		}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.ant.ui/.settings/org.eclipse.jdt.core.prefs
index 3e6e01e..ae25ba7 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.ant.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,9 @@
-#Wed Oct 14 08:50:53 CDT 2009
+#Thu May 05 15:06:07 CDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
@@ -20,26 +21,27 @@ org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=error
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=error
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
@@ -49,29 +51,35 @@ org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -86,11 +94,12 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverridin
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.ant.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.ant.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..5ee1bba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ant.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:42:25 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java
index bd3af71..1bf76a8 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2006 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH, 
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials 
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Atom.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Atom.java
index 80cf656..b12afcd 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Atom.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Atom.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 Object Factory Inc.
+ * Copyright (c) 2002, 2011 Object Factory Inc.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ public class Atom implements IAtom {
 
 	protected Atom(int kind, String name) {
 		fKind = kind;
-		fName = name.intern();
+		fName = name;
 	}
 	
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java
index 53ff464..9625ff0 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 Object Factory Inc.
+ * Copyright (c) 2002, 2011 Object Factory Inc.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,12 +7,14 @@
  * 
  * Contributors:
  *		Object Factory Inc. - Initial implementation
+ *		IBM Corporation - bug fixes
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.dtd.schema;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.dtd.IAtom;
 import org.eclipse.ant.internal.ui.dtd.IModel;
 
@@ -207,7 +209,7 @@ public class Model implements IModel {
 	 * @see org.eclipse.ant.internal.ui.dtd.IModel#getQualifier()
 	 */
 	public String getQualifier() {
-		return fMin == 1 ? (fMax == UNBOUNDED ? "+" : "") : (fMax == UNBOUNDED ? "*" : "?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		return fMin == 1 ? (fMax == UNBOUNDED ? "+" : IAntCoreConstants.EMPTY_STRING) : (fMax == UNBOUNDED ? "*" : "?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
 	
 	/**
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmParser.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmParser.java
index aadaa3a..6b197ee 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmParser.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmParser.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 Object Factory Inc.
+ * Copyright (c) 2002, 2006 Object Factory Inc.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java
index 063dbce..01f2209 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 Object Factory Inc.
+ * Copyright (c) 2002, 2006 Object Factory Inc.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java
index 78fc1d9..3142c12 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 Object Factory Inc.
+ * Copyright (c) 2002, 2006 Object Factory Inc.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java
index a91e5f2..70762dd 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntCompletionProposal.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 
 package org.eclipse.ant.internal.ui.editor;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.DocumentEvent;
 import org.eclipse.jface.text.IDocument;
@@ -92,7 +93,7 @@ public class AntCompletionProposal implements ICompletionProposal, ICompletionPr
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension2#validate(org.eclipse.jface.text.IDocument, int, org.eclipse.jface.text.DocumentEvent)
 	 */
 	public boolean validate(IDocument document, int offset, DocumentEvent event) {
-		String enteredText= ""; //$NON-NLS-1$
+		String enteredText= IAntCoreConstants.EMPTY_STRING;
 		try {
 			enteredText = document.get(fReplacementOffset, offset-fReplacementOffset);
 		} catch (BadLocationException e) {
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
index 7a56061..97ef7f9 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2008 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH,
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.ResourceBundle;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.AntUtil;
 import org.eclipse.ant.internal.ui.ExternalHyperlink;
@@ -45,35 +46,21 @@ import org.eclipse.ant.internal.ui.model.AntModelCore;
 import org.eclipse.ant.internal.ui.model.AntProjectNode;
 import org.eclipse.ant.internal.ui.model.IAntModelListener;
 import org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants;
-
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-
-import org.eclipse.core.resources.IFile;
-
+import org.eclipse.debug.ui.actions.IRunToLineTarget;
+import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.viewers.IPostSelectionProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.DocumentEvent;
 import org.eclipse.jface.text.IAutoEditStrategy;
@@ -99,7 +86,19 @@ import org.eclipse.jface.text.source.SourceViewerConfiguration;
 import org.eclipse.jface.text.source.projection.IProjectionListener;
 import org.eclipse.jface.text.source.projection.ProjectionSupport;
 import org.eclipse.jface.text.source.projection.ProjectionViewer;
-
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.IPostSelectionProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.ShellAdapter;
+import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IPageLayout;
 import org.eclipse.ui.IPartService;
@@ -107,24 +106,16 @@ import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.editors.text.TextEditor;
 import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.part.IShowInTargetList;
-import org.eclipse.ui.views.contentoutline.ContentOutline;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
-
 import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
 import org.eclipse.ui.texteditor.IDocumentProvider;
 import org.eclipse.ui.texteditor.IEditorStatusLine;
 import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 import org.eclipse.ui.texteditor.TextOperationAction;
-
-import org.eclipse.ui.editors.text.TextEditor;
-
-import org.eclipse.debug.ui.actions.IRunToLineTarget;
-import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
-
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 
 /**
  * The actual editor implementation for Eclipse's Ant integration.
@@ -555,10 +546,6 @@ public class AntEditor extends TextEditor implements IReconcilingParticipant, IP
 			}
 		};
 		AntModelCore.getDefault().addAntModelListener(fAntModelListener);
-
-		if (isFoldingEnabled()) {
-			fFoldingStructureProvider= new AntFoldingStructureProvider(this);
-		}
     }
    
 	/* (non-Javadoc)
@@ -924,7 +911,7 @@ public class AntEditor extends TextEditor implements IReconcilingParticipant, IP
             return null;
         }
         
-		return ""; //$NON-NLS-1$
+		return IAntCoreConstants.EMPTY_STRING;
 	}
 	
 	/* (non-Javadoc)
@@ -1385,17 +1372,17 @@ public class AntEditor extends TextEditor implements IReconcilingParticipant, IP
 	/**
 	 * The editor has entered or exited linked mode.
 	 * @param inLinkedMode whether an enter or exit has occurred
-	 * @param effectsOccurrences whether to change the state of the occurrences finder
+	 * @param affectsOccurrences whether to change the state of the occurrences finder
 	 */
-	public void setInLinkedMode(boolean inLinkedMode, boolean effectsOccurrences) {
+	public void setInLinkedMode(boolean inLinkedMode, boolean affectsOccurrences) {
 		if (inLinkedMode) {
 			getAntModel().setShouldReconcile(false);
-			if (effectsOccurrences) {
+			if (affectsOccurrences) {
 				uninstallOccurrencesFinder();
 			}
 		} else {
 			getAntModel().setShouldReconcile(true);
-			if (effectsOccurrences) {
+			if (affectsOccurrences) {
 				installOccurrencesFinder();
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
index d31247b..d324cf0 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2008 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH, 
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials 
@@ -32,6 +32,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.apache.tools.ant.BuildException;
@@ -43,6 +44,7 @@ import org.apache.tools.ant.taskdefs.MacroDef;
 import org.apache.tools.ant.taskdefs.MacroInstance;
 import org.apache.tools.ant.types.EnumeratedAttribute;
 import org.apache.tools.ant.types.Reference;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
@@ -52,6 +54,7 @@ import org.eclipse.ant.internal.ui.dtd.IElement;
 import org.eclipse.ant.internal.ui.dtd.ISchema;
 import org.eclipse.ant.internal.ui.dtd.ParseError;
 import org.eclipse.ant.internal.ui.dtd.Parser;
+import org.eclipse.ant.internal.ui.editor.TaskDescriptionProvider.ProposalNode;
 import org.eclipse.ant.internal.ui.editor.templates.AntContext;
 import org.eclipse.ant.internal.ui.editor.templates.AntTemplateAccess;
 import org.eclipse.ant.internal.ui.editor.templates.AntTemplateInformationControlCreator;
@@ -300,12 +303,13 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
 		ITextSelection selection= (ITextSelection) viewer.getSelectionProvider().getSelection();
 
 		// adjust offset to end of normalized selection
-		if (selection.getOffset() == offset) {
-			offset= selection.getOffset() + selection.getLength();
+		int newoffset = offset;
+		if (selection.getOffset() == newoffset) {
+			newoffset= selection.getOffset() + selection.getLength();
 		}
 
-		String prefix= extractPrefix(viewer, offset);
-		Region region= new Region(offset - prefix.length(), prefix.length());
+		String prefix= extractPrefix(viewer, newoffset);
+		Region region= new Region(newoffset - prefix.length(), prefix.length());
 		TemplateContext context= createContext(viewer, region);
 		if (context == null) {
 			return new ICompletionProposal[0];
@@ -488,14 +492,14 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
         }
         
         if (proposals.length > 0) {
-        	errorMessage= ""; //$NON-NLS-1$
+        	errorMessage= IAntCoreConstants.EMPTY_STRING;
         }
         return proposals;
 
     }
     
     private ICompletionProposal[] getProjectAttributeValueProposals(String prefix, String attributeName) {
-		if (attributeName.equalsIgnoreCase("default")) { //$NON-NLS-1$
+		if (attributeName.equalsIgnoreCase(IAntCoreConstants.DEFAULT)) {
 			return getDefaultValueProposals(prefix);
 		}
 
@@ -540,12 +544,12 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
 			id= ((AntTaskNode)node).getId();
 		}
 		List proposals= new ArrayList(refIds.size());
-		int i= 0;
 		String refId;
 		ICompletionProposal proposal;
 		int prefixLength= prefix.length();
 		int replacementOffset= cursorPosition - prefixLength;
-		for (Iterator iter = refIds.iterator(); iter.hasNext(); i++) {
+		Iterator iter= refIds.iterator();
+		while (iter.hasNext()) {
 			refId= (String) iter.next();
 			if (!refId.equals(id) && (prefixLength == 0 || refId.toLowerCase().startsWith(prefix))) {
 				proposal= new AntCompletionProposal(refId, replacementOffset, prefixLength, refId.length(), null, refId, null, AntCompletionProposal.TASK_PROPOSAL);
@@ -584,7 +588,6 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
         Map targets= getTargets();
         Set targetNames= targets.keySet();
         List proposals= new ArrayList(targets.size() - 2); //current target and implicit target
-        int index= 0;
         Iterator itr= targetNames.iterator();
         while (itr.hasNext()) {
             String targetName = (String) itr.next();
@@ -594,7 +597,6 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
             if (targetName.toLowerCase().startsWith(prefix) && targetName.length() > 0){
                 ICompletionProposal proposal = new AntCompletionProposal(targetName, cursorPosition - prefix.length(), prefix.length(), targetName.length(), getTargetImage(targetName), targetName, ((Target)targets.get(targetName)).getDescription(), AntCompletionProposal.TASK_PROPOSAL);
                 proposals.add(proposal);
-                index++;
             }
         }
         return (ICompletionProposal[])proposals.toArray(new ICompletionProposal[proposals.size()]);      
@@ -605,7 +607,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
      * target cannot be found, <code>null</code> will be returned. 
      * 
      * @param targetName the target's name
-     * @return an image suitable for representating the target, or <code>null</code> if the target cannot be found
+     * @return an image suitable for representing the target, or <code>null</code> if the target cannot be found
      * @since 3.6
      */
     private Image getTargetImage(String targetName) {
@@ -848,7 +850,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
 			}
 			String description = getDescriptionProvider().getDescriptionForTaskAttribute(taskName, attrName);
 			if(description != null) {
-			    proposalInfo = (proposalInfo == null ? "" : proposalInfo); //$NON-NLS-1$
+			    proposalInfo = (proposalInfo == null ? IAntCoreConstants.EMPTY_STRING : proposalInfo);
 			    proposalInfo += description;
 			}
 		}
@@ -1103,9 +1105,9 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
 	}
 
 	/** 
-    * Returns proposals that define the structure of a buildfile.
+    * Returns proposals that define the structure of a build file.
     * 
-    * Note that template proposals which define the structure of a buildfile 
+    * Note that template proposals which define the structure of a build file 
     * are handled by {@link #determineTemplateProposals(ITextViewer, int)} 
     * which limits proposals by context type.
 
@@ -1217,12 +1219,10 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
     private String getTaskProposalReplacementString(String aTaskName, boolean hasNested) {
         StringBuffer replacement = new StringBuffer("<"); //$NON-NLS-1$
         replacement.append(aTaskName); 
-        Node attributeNode= getDescriptionProvider().getAttributesNode(aTaskName);
-		
-        if (attributeNode != null) {
-			appendRequiredAttributes(replacement, attributeNode);
-        } 
-        
+        ProposalNode task = getDescriptionProvider().getTaskNode(aTaskName);
+        if(task != null) {
+        	appendRequiredAttributes(replacement,task);
+        }
         if (hasNested) {
         	replacement.append("></"); //$NON-NLS-1$
             replacement.append(aTaskName);
@@ -1233,25 +1233,25 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
         return replacement.toString();               
     }
 
-    private void appendRequiredAttributes(StringBuffer replacement, Node attributeNode) {
-		boolean requiredAdded= false;
-		NodeList attributes= attributeNode.getChildNodes();
-		String required;
-		Node attribute;
-		for (int i = 0; i < attributes.getLength(); i++) {
-			attribute = attributes.item(i);
-			required= getDescriptionProvider().getRequiredOfNode(attribute);
-			if (required.equalsIgnoreCase("yes")) { //$NON-NLS-1$
-				String attributeName= getDescriptionProvider().getTaskAttributeName(attribute);
-				replacement.append(' ');
-				replacement.append(attributeName);
-				replacement.append("=\"\""); //$NON-NLS-1$
-				if (!requiredAdded){
-					additionalProposalOffset= attributeName.length() + 2;
-					requiredAdded= true;
-				}	
+    private void appendRequiredAttributes(StringBuffer replacement, ProposalNode task) {
+    	if(task.nodes != null) {
+			boolean requiredAdded = false;
+			Entry entry = null;
+			for (Iterator i = task.nodes.entrySet().iterator();i.hasNext();) {
+				entry = (Entry) i.next();
+				String name = (String) entry.getKey();
+				ProposalNode att = (ProposalNode) entry.getValue();
+				if ("yes".equalsIgnoreCase(att.required)) { //$NON-NLS-1$
+					replacement.append(' ');
+					replacement.append(name);
+					replacement.append("=\"\""); //$NON-NLS-1$
+					if (!requiredAdded){
+						additionalProposalOffset = name.length() + 2;
+						requiredAdded = true;
+					}	
+				}
 			}
-		}
+    	}
 	}
 
 	/**
@@ -1342,7 +1342,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
         if (startOfWordToken != anOffset) {
             currentPrefix= aDocumentText.substring(startOfWordToken, anOffset).toLowerCase();
         } else {
-            currentPrefix= ""; //$NON-NLS-1$
+            currentPrefix= IAntCoreConstants.EMPTY_STRING;
         }
         return currentPrefix;
     }
@@ -1406,14 +1406,19 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
             int spaceIndex = stringToPrefix.lastIndexOf(' ');
             int lessThanIndex = stringToPrefix.lastIndexOf('<');
             int greaterThanIndex = stringToPrefix.lastIndexOf('>');
-            
             // Task proposal
-            if(lessThanIndex > spaceIndex && greaterThanIndex < lessThanIndex) {
-                int slashIndex = stringToPrefix.lastIndexOf('/');
-                if(slashIndex == lessThanIndex +1) {
-                    return PROPOSAL_MODE_TASK_PROPOSAL_CLOSING; // ... </
-                }
-                return PROPOSAL_MODE_TASK_PROPOSAL;
+            if(greaterThanIndex < lessThanIndex) {
+            	//we are inside an open element
+            	if(lastChar == '$') {
+            		return PROPOSAL_MODE_PROPERTY_PROPOSAL;
+            	}
+            	if(lessThanIndex > spaceIndex) {
+	                int slashIndex = stringToPrefix.lastIndexOf('/');
+	                if(slashIndex == lessThanIndex +1) {
+	                    return PROPOSAL_MODE_TASK_PROPOSAL_CLOSING; // ... </
+	                }
+	                return PROPOSAL_MODE_TASK_PROPOSAL;
+            	}
             }
             if(lessThanIndex < greaterThanIndex) {
             	if (isPropertyProposalMode(stringToPrefix)) {
@@ -1443,7 +1448,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
 		return false;
 	}
     /**
-     * Returns the last occuring task string in the specified string.
+     * Returns the last occurring task string in the specified string.
      * <P>
      * The returned string must not necessarily be a valid Ant task string.
      * This can be tested with the method <code>inNamedTaskKnown(String)</code>
@@ -1483,7 +1488,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
     
 
     /**
-     * Returns the last occuring attribute string in the specified string.
+     * Returns the last occurring attribute string in the specified string.
      * <code>null</code> is returned if no attribute string is available.
      * <P>
      * Calling this method is only safe if the current proposal mode is really
@@ -1587,7 +1592,7 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
     		node= antModel.getOpenElement();
     	}
     	if (node == null) {
-    		return ""; //$NON-NLS-1$
+    		return IAntCoreConstants.EMPTY_STRING;
     	} else if (node instanceof AntTaskNode) {
     		String name= node.getName();
     		if (offset <= node.getOffset() + name.length() - 1) {
@@ -1706,10 +1711,13 @@ public class AntEditorCompletionProcessor  extends TemplateCompletionProcessor i
 	 * does not contain the brackets.
 	 */
 	protected int getRelevance(Template template, String prefix) {
-		if (prefix.startsWith("<")) //$NON-NLS-1$
-			prefix= prefix.substring(1);
-		if (template.getName().startsWith(prefix))
+		String newprefix = prefix;
+		if (newprefix.startsWith("<")) {//$NON-NLS-1$
+			newprefix= prefix.substring(1);
+		}
+		if (template.getName().startsWith(newprefix)) {
 			return 90; 
+		}
 		return 0;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
index d4eaf62..9c373df 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2008 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH,
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntSourceViewerConfiguration;
 import org.eclipse.ant.internal.ui.editor.formatter.XmlDocumentFormattingStrategy;
 import org.eclipse.ant.internal.ui.editor.formatter.XmlElementFormattingStrategy;
@@ -262,7 +263,7 @@ public class AntEditorSourceViewerConfiguration extends AntSourceViewerConfigura
 			list.add(prefix.toString());
 		}
 
-		list.add(""); //$NON-NLS-1$
+		list.add(IAntCoreConstants.EMPTY_STRING);
 		
 		return (String[]) list.toArray(new String[list.size()]);
 	}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
index b8f1882..2f1ffca 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH, 
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials 
@@ -24,6 +24,7 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -31,10 +32,8 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.IProgressService;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
-import org.w3c.dom.Text;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
@@ -62,13 +61,45 @@ public class TaskDescriptionProvider {
     public static final String XML_TAG_ATTRIBUTES = "attributes"; //$NON-NLS-1$
     public static final String XML_TAG_ELEMENT = "element"; //$NON-NLS-1$
     public static final String XML_TAG_STRUCTURE = "structure"; //$NON-NLS-1$
-    public static final String XML_TAG_DESCRIPTION = "description"; //$NON-NLS-1$
-    public static final String XML_ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
     public static final String XML_ATTRIBUTE_REQUIRED = "required"; //$NON-NLS-1$
+
+    /**
+     * Class to avoid holding on to DOM element handles
+     * @since 3.5
+     */
+    class ProposalNode {
+    	String desc = null;
+    	String required = null;
+    	HashMap nodes = null;
+    	
+    	ProposalNode(String desc, String required) {
+    		this.desc = desc;
+    		this.required = required;
+    	}
+    	
+    	void addChild(String name, ProposalNode node) {
+    		if(nodes == null) {
+    			nodes = new HashMap(9);
+    		}
+    		nodes.put(name, node);
+    	}
+    	
+    	ProposalNode getChild(String name) {
+    		if(nodes != null) {
+    			return (ProposalNode) nodes.get(name);
+    		}
+    		return null;
+    	}
+    }
     
     private static TaskDescriptionProvider fgDefault;
 
-    private Map taskNodes= null;
+    /**
+     * Mapping of {@link String} to {@link ProposalNode}
+     * <br><br>
+     * <code>Map<String, ProposalNode></code>
+     */
+    private Map taskNodes = null;
     
     /**
      * Meant to be a singleton
@@ -80,9 +111,8 @@ public class TaskDescriptionProvider {
     	if (fgDefault == null) {
     		fgDefault= new TaskDescriptionProvider();
     		IRunnableWithProgress runnable= new IRunnableWithProgress() {
-				public void run(IProgressMonitor monitor)
-									throws InvocationTargetException, InterruptedException {					
-						fgDefault.initialize();
+				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {					
+					fgDefault.initialize();
 				}
 			};
 			
@@ -97,32 +127,74 @@ public class TaskDescriptionProvider {
     }
 
     /**
-     * Parses the task description xml file and stores the information.
+     * Parses the task description XML file and stores the information.
      */
     protected void initialize() {
-    	taskNodes= new HashMap();
-        Document tempDocument = parseFile(TASKS_DESCRIPTION_XML_FILE_NAME);
-        Node tempRootNode = tempDocument.getDocumentElement();
-        NodeList tempChildNodes = tempRootNode.getChildNodes();
-        for(int i=0; i<tempChildNodes.getLength(); i++) {
-            Node tempNode = tempChildNodes.item(i);
-            if(tempNode.getNodeType() == Node.ELEMENT_NODE) {
-                String tempTagName = tempNode.getNodeName();
-                if(tempTagName.equals(XML_TAG_TASK)) {
-                    NamedNodeMap tempAttributes = tempNode.getAttributes();
-                    Node tempAttributeNode = tempAttributes.getNamedItem(XML_ATTRIBUTE_NAME);
-                    if(tempAttributeNode != null) {
-                        String tempTaskName = tempAttributeNode.getNodeValue();
-                        if(tempTaskName != null) {
-                            taskNodes.put(tempTaskName, tempNode);
-                        }
+    	taskNodes = new HashMap();
+        Document doc = parseFile(TASKS_DESCRIPTION_XML_FILE_NAME);
+        Node root = doc.getDocumentElement();
+        NodeList tasks = root.getChildNodes();
+        Node node = null;
+        for(int i=0; i < tasks.getLength(); i++) {
+            node = tasks.item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE) {
+                if(XML_TAG_TASK.equals(node.getNodeName())) {
+                	Element task = (Element) node;
+                	String name = task.getAttribute(IAntCoreConstants.NAME);
+                    if(name != null) {
+                    	ProposalNode tasknode = new ProposalNode(getDescription(task), null);
+                    	taskNodes.put(name, tasknode);
+                    	NodeList nodes = task.getElementsByTagName(XML_TAG_ATTRIBUTE);
+                    	Element e = null;
+                    	for (int j = 0; j < nodes.getLength(); j++) {
+							e = (Element) nodes.item(j);
+							addNode(e, tasknode);
+						}
+                    	nodes = task.getElementsByTagName(XML_TAG_ELEMENT);
+                    	for (int j = 0; j < nodes.getLength(); j++) {
+							e = (Element) nodes.item(j);
+							addNode(e, tasknode);
+						}
                     }
                 }
             }
         }
     }
     
-
+    /**
+     * Adds a new child {@link ProposalNode} to the given parent node
+     * 
+     * @param element
+     * @param node
+     * @since 3.5
+     */
+    void addNode(Element element, ProposalNode node) {
+    	String name = element.getAttribute(IAntCoreConstants.NAME);
+    	if(name != null) {
+    		node.addChild(name, new ProposalNode(getDescription(element), element.getAttribute(XML_ATTRIBUTE_REQUIRED)));
+    	}
+    }
+    
+    /**
+     * Recursively find the description text for the parent {@link Element} 
+     * @param element
+     * @return the description element text or <code>null</code>
+     * @since 3.5
+     */
+    String getDescription(Element element) {
+    	NodeList nodes = element.getChildNodes();
+    	for (int i = 0; i < nodes.getLength(); i++) {
+    		Node node = nodes.item(i);
+			if(node.getNodeType() == Node.ELEMENT_NODE && IAntCoreConstants.DESCRIPTION.equals(node.getNodeName())) {
+				node = node.getFirstChild();
+				if(node != null) {
+					return node.getNodeValue();
+				}
+			}
+		}
+    	return null;
+    }
+    
     /**
      * Returns the (DOM) document as a result of parsing the file with the 
      * specified file name.
@@ -164,61 +236,13 @@ public class TaskDescriptionProvider {
      * no description available.
      */
     public String getDescriptionForTask(String aTaskName) {
-        Element taskElement = (Element)taskNodes.get(aTaskName);
-        if(taskElement != null) {
-            return getDescriptionOfNode(taskElement);
-        }
+    	ProposalNode task = (ProposalNode) taskNodes.get(aTaskName);
+    	if(task != null) {
+    		return task.desc;
+    	}
         return null;
     }
 
-
-    /**
-     * Returns the description of the specified node.
-     * <P>
-     * The node must be either one of task node or attribute node.
-     */
-    private String getDescriptionOfNode(Node aNode) {
-        NodeList tempChildNodes = aNode.getChildNodes();
-        for (int i=0; i<tempChildNodes.getLength(); i++) {
-            Node tempNode = tempChildNodes.item(i);
-            if(tempNode instanceof Element && XML_TAG_DESCRIPTION.equals(tempNode.getNodeName())) {
-                Element tempDescriptionElement = (Element)tempNode;
-                Node tempChildNode = tempDescriptionElement.getFirstChild();
-                if(tempChildNode instanceof Text) {
-                    return ((Text)tempChildNode).getData();
-                }
-                break; 
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * Returns the Required value of the specified node.
-     * <P>
-     * Currently the XML file has Required defined as NOTDEFINED in
-     * some cases. If so the value returned is an empty string
-     */
-    protected String getRequiredOfNode(Node aNode) {
-    	
-    	String tmpNodeName = aNode.getNodeName();
-    	String tmpRequiredValue = null;
-    	
-   		if(aNode.getNodeType() == Node.ELEMENT_NODE && 
-   			(XML_TAG_ATTRIBUTE.equals(tmpNodeName) || XML_TAG_ELEMENT.equals(tmpNodeName)) ) {
-        	  
-        	  tmpRequiredValue = aNode.getAttributes().getNamedItem(XML_ATTRIBUTE_REQUIRED).getNodeValue();
-   		}
-   		
-   		if(tmpRequiredValue == null || tmpRequiredValue.equals("NOTDEFINED")) { //$NON-NLS-1$
-   			return ""; //$NON-NLS-1$
-   		}
-   		
-   		return tmpRequiredValue;
-                   
-    }
-
-    
     /**
      * Returns the description string for the specified attribute of the 
      * specified task.
@@ -227,28 +251,12 @@ public class TaskDescriptionProvider {
      * not known or no description available.
      */
     public String getDescriptionForTaskAttribute(String aTaskName, String anAttributeName) {
-        
-        String tmpDescription = null;	
-        	
-        Node tmpAttributesNode = getAttributesNode(aTaskName);
-        	
-        if(tmpAttributesNode != null) {
-        	
-        	tmpDescription = getDescriptionForNodeNamedWithNameInNodeList( XML_TAG_ATTRIBUTE, anAttributeName,
-        																tmpAttributesNode.getChildNodes());															
-    		//If Description is null we try the elements section else we're satisfied.
-    		if( tmpDescription != null ) {
-    			return tmpDescription;
-    		}
-        }
-        //Not yet found. Try the elements Node
-    	tmpAttributesNode = getElementsNode(aTaskName);
-    	if(tmpAttributesNode != null) {
-    		tmpDescription = getDescriptionForNodeNamedWithNameInNodeList( XML_TAG_ELEMENT, anAttributeName,
-            														   tmpAttributesNode.getChildNodes());
-            
-            return tmpDescription;  
-            
+        ProposalNode task = (ProposalNode) taskNodes.get(aTaskName);
+        if(task != null) {
+        	ProposalNode att = task.getChild(anAttributeName);
+        	if(att != null) {
+        		return att.desc;
+        	}
         }
         return null;
     }
@@ -261,170 +269,30 @@ public class TaskDescriptionProvider {
      * known or no description available.
      */
     public String getRequiredAttributeForTaskAttribute(String aTaskName, String anAttributeName) {
- 
-        String tmpRequired = null;	
-        	
-        Node tmpAttributesNode = getAttributesNode(aTaskName);
-        	
-        if(tmpAttributesNode != null) {
-        	
-        	tmpRequired = getRequiredForNodeNamedWithNameInNodeList( XML_TAG_ATTRIBUTE, anAttributeName,
-        																tmpAttributesNode.getChildNodes());															
-    		
-    		//If Required is null we try the elements section else we're satisfied.
-    		if( tmpRequired != null ) {
-    			return tmpRequired;
-    		}
-        }
-        
-        //Not yet found. Try the elements Node
-    	tmpAttributesNode = getElementsNode(aTaskName);
-    	if(tmpAttributesNode != null) {
-    		tmpRequired = getDescriptionForNodeNamedWithNameInNodeList( XML_TAG_ELEMENT, anAttributeName,
-            														   tmpAttributesNode.getChildNodes());
-            //Return it even if its null
-            return tmpRequired;  
-            
+    	ProposalNode task = (ProposalNode) taskNodes.get(aTaskName);
+        if(task != null) {
+        	ProposalNode att = task.getChild(anAttributeName);
+        	if(att != null) {
+        		return att.required;
+        	}
         }
-        
-        //Not found return null
         return null;
     }
     
     /**
-     * Returns the Elements Node of the specified TaskName
-     * 
-     * @param aTaskName The name of the task
-     * @return The Elements Node of the Task.
+     * Returns the {@link ProposalNode} for the given task name or <code>null</code> if one does not exist
+     * @param aTaskName
+     * @return the {@link ProposalNode} for the given name or <code>null</code>
+     * @since 3.5
      */
-    private Node getElementsNode(String aTaskName) {
-    	
-    	Node tmpStructureNode = getStructureNode(aTaskName);
-    	if(tmpStructureNode != null) {
-    		return getChildNodeNamedOfTypeFromNode(XML_TAG_ELEMENTS, Node.ELEMENT_NODE,
-    												tmpStructureNode);
-    	}
-    	return null;
-    }
-    
-    /**
-     * Returns the Attributes Node of the specified TaskName
-     * 
-     * @param aTaskName The name of the task
-     * @return The Attributes Node of the Task or <code>null</code> if one
-     * does not exist.
-     */    
-    protected Node getAttributesNode(String aTaskName) {
-    	
-        Node tmpStructureNode = getStructureNode(aTaskName);
-        if(tmpStructureNode != null){
-        	return getChildNodeNamedOfTypeFromNode(XML_TAG_ATTRIBUTES, Node.ELEMENT_NODE,
-                                                             tmpStructureNode);
-    	} 
-        return null;
-    }
-
-    /**
-     * Returns the Structure Node of the specified TaskName
-     * 
-     * @param aTaskName The name of the task
-     * @return The Structure Node of the Task.
-     */        
-    private Node getStructureNode(String aTaskName) {	
-    	Element taskElement = (Element)taskNodes.get(aTaskName);
-        if(taskElement != null) {
-        	//Dig us down to the Structure node
-        	Node structureNode = getChildNodeNamedOfTypeFromNode(XML_TAG_STRUCTURE, Node.ELEMENT_NODE,
-        	                                                     taskElement);
-        	return structureNode;
-        }
-        return null;
-    }
-    
-    /**
-     * Returns the Description for a Node satisfying the criterias in the
-     * NodeList given as Argument.
-     * 
-     * @param aNodeName The Name of the Node
-     * @param anAttributeName The string of the Name value
-     * @param anAttributesNodeList The NodeList to search in.
-     * @return The Description found or null if none is found
-     */
-    private String getDescriptionForNodeNamedWithNameInNodeList( String aNodeName, String anAttributeName,
-    																 NodeList anAttributesNodeList) {
-    	for (int i=0; i<anAttributesNodeList.getLength(); i++) {
-                Node tempNode = anAttributesNodeList.item(i);
-                if(tempNode.getNodeType() == Node.ELEMENT_NODE && aNodeName.equals(tempNode.getNodeName())) {
-                	if( anAttributeName.equals(getTaskAttributeName(tempNode)) ) {
-                    	return getDescriptionOfNode(tempNode);
-                	}
-                }
-        }
-        
-        //Not found
-        return null;																 	
-	}
-	
-	
-    /**
-     * Returns the Name of Task Attribute.
-     * 
-     * @return The Name of the Attribute.
-     */
-    public String getTaskAttributeName(Node aTaskAttributeNode) {
-    	NamedNodeMap tmpNamedNodeMap = aTaskAttributeNode.getAttributes();	
-    	return tmpNamedNodeMap.getNamedItem(XML_ATTRIBUTE_NAME).getNodeValue();
-    }
-    
-    /**
-     * Returns the ChildNode of the node defined by the Arguments. The
-     * first child found matching the criterias is returned.
-     * 
-     * @param aNodeName The Name of the Node to return.
-     * @param aType The Type of the node @see Node
-     * @param aParentNode The Node to get the child from
-     * 
-     * @return The First Child Node found matching the criterias,
-     * or null if none is found.
-     */
-    private Node getChildNodeNamedOfTypeFromNode(String aNodeName, short aNodeType, Node aParentNode) {
-    
-    	NodeList tmpNodeList = aParentNode.getChildNodes();
-		for(int i=0; i<tmpNodeList.getLength(); ++i ) {
-			Node tmpNode = tmpNodeList.item(i);
-			if( (tmpNode.getNodeType() == aNodeType) && aNodeName.equals(tmpNode.getNodeName()) ) {
-				return tmpNode;
-			}
-		}
-		//Not found
-		return null;    	
-    }
-    
-     /**
-     * Returns the Required Field for a Node satisfying the criterias in the
-     * NodeList given as Argument.
-     * 
-     * @param aNodeName The Name of the Node
-     * @param anAttributeName The string of the Name value
-     * @param anAttributesNodeList The NodeList to search in.
-     * @return The Description found or null if none is found
-     */
-    private String getRequiredForNodeNamedWithNameInNodeList( String aNodeName, String anAttributeName,
-    																 NodeList anAttributesNodeList) {
-    	for (int i=0; i<anAttributesNodeList.getLength(); i++) {
-    		Node tempNode = anAttributesNodeList.item(i);
-            if(tempNode.getNodeType() == Node.ELEMENT_NODE && aNodeName.equals(tempNode.getNodeName())) {
-        		if( anAttributeName.equals(getTaskAttributeName(tempNode)) ) {
-                	return getRequiredOfNode(tempNode);
-            	}
-            }
-        }
-        
-        //Not found
-        return null;																 	
+    ProposalNode getTaskNode(String aTaskName) {
+    	return (ProposalNode) taskNodes.get(aTaskName);
     }
     
     protected static void reset() {
+    	if(fgDefault != null && fgDefault.taskNodes != null) {
+    		fgDefault.taskNodes.clear();
+    	}
     	fgDefault= null;
     }
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleLineBreakpointAction.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleLineBreakpointAction.java
index 46a5312..26c5e69 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleLineBreakpointAction.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleLineBreakpointAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,20 +12,29 @@ package org.eclipse.ant.internal.ui.editor.actions;
 
 import org.eclipse.ant.internal.launching.debug.IAntDebugConstants;
 import org.eclipse.ant.internal.launching.debug.model.AntLineBreakpoint;
-import org.eclipse.core.resources.IResource;
+
+import org.eclipse.swt.widgets.Display;
+
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.model.IBreakpoint;
-import org.eclipse.debug.core.model.ILineBreakpoint;
-import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
-import org.eclipse.jface.text.ITextSelection;
+
+import org.eclipse.core.resources.IResource;
+
 import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.jface.text.ITextSelection;
+
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IWorkbenchPart;
 
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.core.model.ILineBreakpoint;
+
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
+
 public class ToggleLineBreakpointAction implements IToggleBreakpointsTarget {
 	
 	/* (non-Javadoc)
@@ -50,8 +59,7 @@ public class ToggleLineBreakpointAction implements IToggleBreakpointsTarget {
 			IBreakpoint breakpoint = breakpoints[i];
 			if (resource.equals(breakpoint.getMarker().getResource())) {
 				if (((ILineBreakpoint)breakpoint).getLineNumber() == (lineNumber + 1)) {
-					// remove
-					breakpoint.delete();
+					DebugUITools.deleteBreakpoints(new IBreakpoint[] { breakpoint }, part.getSite().getShell(), null);
 					return;
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/anttasks_1.6.0.xml b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/anttasks_1.6.0.xml
index 356e3fb..eed65ab 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/anttasks_1.6.0.xml	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/anttasks_1.6.0.xml	
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-     Copyright (c) 2005, 2007 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java
index a7b5f4a..7a2fbd9 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/FormattingPreferences.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 John-Mason P. Shackelford and others.
+ * Copyright (c) 2004, 2011 John-Mason P. Shackelford and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.editor.formatter;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -25,7 +26,7 @@ public class FormattingPreferences {
        if (!useSpacesInsteadOfTabs()) {
             canonicalIndent = "\t"; //$NON-NLS-1$
         } else {
-            String tab = ""; //$NON-NLS-1$
+            String tab = IAntCoreConstants.EMPTY_STRING;
             for (int i = 0; i < getTabWidth(); i++) {
                 tab = tab.concat(" "); //$NON-NLS-1$
             }
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
index a9dbfb7..4d9abf6 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006s John-Mason P. Shackelford and others.
+ * Copyright (c) 2004, 2011 John-Mason P. Shackelford and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants;
 import org.eclipse.core.runtime.Assert;
@@ -206,7 +207,7 @@ public class XmlDocumentFormatter {
          * @see org.eclipse.ant.internal.ui.editor.formatter.XmlDocumentFormatter.TagReader#getStartOfTag()
          */
         public String getStartOfTag() {
-            return ""; //$NON-NLS-1$
+            return IAntCoreConstants.EMPTY_STRING;
         }
 
         /* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java
index 9891a45..9273679 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlFormatter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 John-Mason P. Shackelford and others.
+ * Copyright (c) 2004, 2011 John-Mason P. Shackelford and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     John-Mason P. Shackelford - initial API and implementation
+ *     IBM Corporation - bug fixes
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.editor.formatter;
 
@@ -14,6 +15,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.editor.templates.AntContext;
 import org.eclipse.ant.internal.ui.editor.text.AntDocumentSetupParticipant;
 import org.eclipse.ant.internal.ui.editor.text.AntEditorPartitionScanner;
@@ -222,11 +224,11 @@ public class XmlFormatter {
 	private static String getLeadingText(IDocument document, IAntModel model, int completionOffset) {
 		AntProjectNode project= model.getProjectNode(false);
 		if (project == null) {
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		AntElementNode node= project.getNode(completionOffset);// - fAccumulatedChange);
 		if (node == null) {
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		
 		StringBuffer buf= new StringBuffer();
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java
index 69728fe..cc15786 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2005 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2009 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH, 
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials 
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java
index 834afb7..392a891 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.ant.core.AntCorePlugin;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.model.IAntModel;
 import org.eclipse.ant.internal.ui.model.IProblem;
@@ -51,7 +52,7 @@ public class AntEditorMarkerUpdater {
 		 */
 		public IStatus runInWorkspace(IProgressMonitor monitor) {
 			updateMarkers0(fProblems);
-			return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), IStatus.OK, "", null); //$NON-NLS-1$
+			return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), IStatus.OK, IAntCoreConstants.EMPTY_STRING, null);
 		}
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntContext.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntContext.java
index b50d081..f4cb3db 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntContext.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2009 IBM Corporation and others.
+ *  Copyright (c) 2004, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,14 +12,19 @@
 package org.eclipse.ant.internal.ui.editor.templates;
 
 import org.eclipse.ant.internal.ui.model.IAntModel;
+
 import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.TextUtilities;
 import org.eclipse.jface.text.templates.DocumentTemplateContext;
 import org.eclipse.jface.text.templates.Template;
 import org.eclipse.jface.text.templates.TemplateBuffer;
 import org.eclipse.jface.text.templates.TemplateContextType;
 import org.eclipse.jface.text.templates.TemplateException;
+import org.eclipse.jface.text.templates.TemplateTranslator;
 
 public class AntContext extends DocumentTemplateContext {
 	
@@ -34,12 +39,15 @@ public class AntContext extends DocumentTemplateContext {
 	 * @see org.eclipse.jface.text.templates.TemplateContext#evaluate(org.eclipse.jface.text.templates.Template)
 	 */
 	public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException {
+		if (!canEvaluate(template))
+			return null;
+
+		TemplateBuffer templateBuffer= createTemplateBuffer(template);
 
-		TemplateBuffer templateBuffer= super.evaluate(template);
-		
 		if (templateBuffer == null) {
 			return null;
 		}
+
 		//TODO Not enabled see bug 55356
 //		if (false && AntUIPlugin.getDefault().getPreferenceStore().getBoolean(AntEditorPreferenceConstants.TEMPLATES_USE_CODEFORMATTER)) {
 //			FormattingPreferences prefs = new FormattingPreferences();
@@ -47,7 +55,30 @@ public class AntContext extends DocumentTemplateContext {
 //		}
 		return templateBuffer;
 	}
-	
+
+	private TemplateBuffer createTemplateBuffer(Template template) throws BadLocationException, TemplateException {
+		String lineDelimiter= TextUtilities.getDefaultLineDelimiter(getDocument());
+		IDocument document= new Document(template.getPattern());
+		convertLineDelimiters(document, lineDelimiter);
+
+		TemplateTranslator translator= new TemplateTranslator();
+		TemplateBuffer buffer= translator.translate(document.get());
+
+		getContextType().resolve(buffer, this);
+
+		return buffer;
+	}
+
+	private static void convertLineDelimiters(IDocument document, String defaultLineDelimiter) throws BadLocationException {
+		int lines= document.getNumberOfLines();
+		for (int line= 0; line < lines; line++) {
+			IRegion region= document.getLineInformation(line);
+			String lineDelimiter= document.getLineDelimiter(line);
+			if (lineDelimiter != null)
+				document.replace(region.getOffset() + region.getLength(), lineDelimiter.length(), defaultLineDelimiter);
+		}
+	}
+
 	/**
 	 * @return Returns the AntModel.
 	 */
@@ -59,12 +90,24 @@ public class AntContext extends DocumentTemplateContext {
 	 * @see org.eclipse.jface.text.templates.DocumentTemplateContext#getEnd()
 	 */
 	public int getEnd() {
-		int replacementOffset = getCompletionOffset();
-		int replacementLength = getCompletionLength();
-		if (replacementOffset > 0 && getDocument().get().charAt(replacementOffset - 1) == '<' && getDocument().getLength() > 1) {
-			replacementLength++;
+		int start= getCompletionOffset();
+		int length= getCompletionLength();
+
+		IDocument document= getDocument();
+		if (start > 0 && document.get().charAt(start - 1) == '<' && document.getLength() > 1) {
+			length++;
 		}
-		return replacementLength + replacementOffset;
+
+		int end= getCompletionOffset() + length;
+
+		try {
+			while (start != end && Character.isWhitespace(document.getChar(end - 1)))
+				end--;
+		} catch (BadLocationException e) {
+			// Return latest valid end
+		}
+
+		return end;
 	}
 	
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java
index 41b3227..ada3f5f 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplatePreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005  John-Mason P. Shackelford and others.
+ * Copyright (c) 2000, 2011  John-Mason P. Shackelford and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.editor.templates;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.editor.formatter.FormattingPreferences;
 import org.eclipse.ant.internal.ui.editor.formatter.XmlFormatter;
@@ -95,7 +96,7 @@ public class AntTemplatePreferencePage extends TemplatePreferencePage {
 				viewer.getDocument().set(template.getPattern());
 			}
 		} else {
-			viewer.getDocument().set(""); //$NON-NLS-1$
+			viewer.getDocument().set(IAntCoreConstants.EMPTY_STRING);
 		}		
 	}
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntEditorDocumentProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntEditorDocumentProvider.java
index 3c8279c..c63d65b 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntEditorDocumentProvider.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntEditorDocumentProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2006 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2007 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH, 
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials 
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java
index 5202f51..f70c588 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.ant.internal.ui.editor.AntEditor;
 import org.eclipse.ant.internal.ui.model.AntElementNode;
 import org.eclipse.ant.internal.ui.model.AntModel;
 import org.eclipse.ant.internal.ui.model.AntProjectNode;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.Position;
@@ -41,7 +42,6 @@ public class AntFoldingStructureProvider {
 	private Map fPositionToElement= new HashMap();
 	
 	public AntFoldingStructureProvider(AntEditor editor) {
-		super();
 		fEditor = editor;
 	}
 	
@@ -85,14 +85,13 @@ public class AntFoldingStructureProvider {
 			}
 	
 			Set currentRegions= new HashSet();
+			List root= new ArrayList();
 			AntProjectNode node= antModel.getProjectNode();
-			if (node == null || node.getOffset() == -1 || node.getLength() == -1) {
-				return;
+			if (node != null && node.getOffset() != -1) {
+				root.add(node);
+				List nodes= antModel.getNonStructuralNodes();
+				root.addAll(nodes);
 			}
-			List root= new ArrayList(2);
-			root.add(node);
-			List nodes= antModel.getNonStructuralNodes();
-			root.addAll(nodes);
 			addFoldingRegions(currentRegions, root);
 			updateFoldingRegions(model, currentRegions);
 		} catch (BadLocationException be) {
@@ -118,9 +117,9 @@ public class AntFoldingStructureProvider {
 				fPositionToElement.put(position, element);
 			}
 			
-			children= element.getChildNodes();
-			if (children != null) {
-				addFoldingRegions(regions, children);
+			List childNodes= element.getChildNodes();
+			if (childNodes != null) {
+				addFoldingRegions(regions, childNodes);
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java
index 90f616b..a8f6c6c 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.AbstractFileSet;
 import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.PatternSet;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.debug.model.AntProperty;
 import org.eclipse.ant.internal.launching.debug.model.AntStackFrame;
 import org.eclipse.ant.internal.launching.debug.model.AntValue;
@@ -201,8 +202,8 @@ public class XMLTextHover implements ITextHover, ITextHoverExtension, IInformati
 				HTMLPrinter.addBullet(buffer, includes[i]);
 			}
 		}
-		HTMLPrinter.addParagraph(buffer, ""); //$NON-NLS-1$
-		HTMLPrinter.addParagraph(buffer, ""); //$NON-NLS-1$
+		HTMLPrinter.addParagraph(buffer, IAntCoreConstants.EMPTY_STRING);
+		HTMLPrinter.addParagraph(buffer, IAntCoreConstants.EMPTY_STRING);
 		if (excludes != null && excludes.length > 0) {
 			HTMLPrinter.addSmallHeader(buffer, AntEditorTextMessages.XMLTextHover_6);
 			for (int i = 0; i < excludes.length; i++) {
@@ -302,24 +303,25 @@ public class XMLTextHover implements ITextHover, ITextHoverExtension, IInformati
 
 	private static IRegion cleanRegionForNonProperty(int offset, IDocument document, IRegion region) throws BadLocationException {
 		//do not allow spaces in region that is not a property
-		String text= document.get(region.getOffset(), region.getLength());
+		IRegion r = region;
+		String text= document.get(r.getOffset(), r.getLength());
 		if (text.startsWith("/")) { //$NON-NLS-1$
 			text= text.substring(1);
-			region= new Region(region.getOffset() + 1, region.getLength() - 1);
+			r= new Region(r.getOffset() + 1, r.getLength() - 1);
 		}
 		StringTokenizer tokenizer= new StringTokenizer(text, " "); //$NON-NLS-1$
 		if (tokenizer.countTokens() != 1) {
 		    while(tokenizer.hasMoreTokens()) {
 		        String token= tokenizer.nextToken();
 		        int index= text.indexOf(token);
-		        if (region.getOffset() + index <= offset && region.getOffset() + index + token.length() >= offset) {
-		            region= new Region(region.getOffset() + index, token.length());
+		        if (r.getOffset() + index <= offset && r.getOffset() + index + token.length() >= offset) {
+		            r= new Region(r.getOffset() + index, token.length());
 		            break;
 		        }
 		    }
 		}
 		
-		return region;
+		return r;
 	}
 	
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
index 1dc834e..093bfa0 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ import javax.xml.parsers.SAXParserFactory;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Location;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelperRepository;
 import org.apache.tools.ant.RuntimeConfigurable;
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.Task;
@@ -37,6 +38,7 @@ import org.apache.tools.ant.helper.AntXMLContext;
 import org.apache.tools.ant.helper.ProjectHelper2;
 import org.apache.tools.ant.util.FileUtils;
 import org.apache.tools.ant.util.JAXPUtils;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.model.IAntModel;
 import org.eclipse.jface.text.BadLocationException;
 import org.xml.sax.Attributes;
@@ -60,7 +62,7 @@ public class ProjectHelper extends ProjectHelper2 {
 	private static FileUtils fu= null;
     
 	/**
-	 * The buildfile that is to be parsed. Must be set if parsing is to
+	 * The build file that is to be parsed. Must be set if parsing is to
 	 * be successful.
 	 */
 	private File buildFile= null;
@@ -158,7 +160,7 @@ public class ProjectHelper extends ProjectHelper2 {
             String fileName= contextLocator.getSystemId();
             String normalizedFileName= (String) fNormalizedFileNames.get(fileName);
             if (normalizedFileName == null) {
-                if (fileName.startsWith("file:")) { //$NON-NLS-1$
+                if (fileName.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
                     normalizedFileName= getFileUtils().fromURI(fileName);
                     fNormalizedFileNames.put(fileName, normalizedFileName);
                 } else {
@@ -298,7 +300,7 @@ public class ProjectHelper extends ProjectHelper2 {
 			}
             if (context.getCurrentTarget() == null) {
                 //exception occurred creating the project
-                context.getProject().addTarget("", context.getImplicitTarget()); //$NON-NLS-1$
+                context.getProject().addTarget(IAntCoreConstants.EMPTY_STRING, context.getImplicitTarget());
                 context.setCurrentTarget(context.getImplicitTarget());
             }
 			if (currentImportStackSize == 1) {
@@ -514,23 +516,31 @@ public class ProjectHelper extends ProjectHelper2 {
 	}
 	
 	/**
+	 * Constructor
+	 * <p>
+	 * This constructor is only to be used by the {@link ProjectHelperRepository} when loading
+	 * instances of registered helpers.
+	 * </p>
+	 * @since 3.7
+	 * @noreference This constructor is not intended to be referenced by clients.
+	 */
+	public ProjectHelper() {}
+	
+	/**
      * Parses the project file, configuring the project as it goes.
      *
      * @param project the current project
-     * @param source  the xml source or a java.io.File
+     * @param source  the XML source or a {@link File}
      * @param handler the root handler to use (contains the current context)
-     * @exception BuildException if the configuration is invalid or cannot
-     *                           be read
+     * @exception BuildException if the configuration is invalid or cannot be read
      */
-    public void parse(Project project, Object source, org.apache.tools.ant.helper.ProjectHelper2.RootHandler handler) throws BuildException {
-    	
+    public void parse(Project project, Object source, ProjectHelper2.RootHandler handler) throws BuildException {
     	if (!(source instanceof String) && !(source instanceof File)) {
     		//this should only occur with a source URL and that should not be possible currently
     		//as Antlib hard codes using ProjectHelper2 (bug 152793)
     		super.parse(project, source, handler);
     		return;
     	}
-    	
     	AntXMLContext context = (AntXMLContext)project.getReference("ant.parsing.context"); //$NON-NLS-1$
 		//switch to using "our" handler so parsing will continue on hitting errors.
     	handler = new RootHandler(context, mainHandler);
@@ -543,7 +553,12 @@ public class ProjectHelper extends ProjectHelper2 {
                 stream = new FileInputStream(buildFile);
                 inputSource = new InputSource(stream);
         	} else if (source instanceof String) {
-        		stream = new ByteArrayInputStream(((String)source).getBytes("UTF-8")); //$NON-NLS-1$
+        		IAntModel model = getAntModel();
+        		String encoding = IAntCoreConstants.UTF_8;
+        		if(model != null) {
+        			encoding = model.getEncoding();
+        		}
+        		stream = new ByteArrayInputStream(((String)source).getBytes(encoding));
         		inputSource = new InputSource(stream);
         	}
         	
@@ -597,7 +612,7 @@ public class ProjectHelper extends ProjectHelper2 {
         }
     }
 
-	/**
+    /**
 	 * Sets the buildfile that is about to be parsed or <code>null</code> if
 	 * parsing has completed.
 	 * 
@@ -636,7 +651,7 @@ public class ProjectHelper extends ProjectHelper2 {
             try {
                 Target newCurrent = new Target();
                 newCurrent.setProject(project);
-                newCurrent.setName(""); //$NON-NLS-1$
+                newCurrent.setName(IAntCoreConstants.EMPTY_STRING);
                 context.setCurrentTarget(newCurrent);
                 context.setCurrentTargets(new HashMap());
                 context.setImplicitTarget(newCurrent);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java
index 655ec18..8c2f191 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.antsupport.inputhandler;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.input.DefaultInputHandler;
 import org.apache.tools.ant.input.InputRequest;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.antsupport.AntSupportMessages;
 import org.eclipse.jface.dialogs.IInputValidator;
 import org.eclipse.jface.dialogs.InputDialog;
@@ -59,7 +60,7 @@ public class AntInputHandler extends DefaultInputHandler {
 						} 
 						if (fFirstValidation) {
 						    fFirstValidation= false;
-						    return ""; //$NON-NLS-1$
+						    return IAntCoreConstants.EMPTY_STRING;
 						}
 						return AntSupportMessages.AntInputHandler_Invalid_input_2;
 					}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java
index 778b9d5..c002aa1 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPlugin.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui;
 
 import java.util.Locale;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.editor.DecayCodeCompletionDataStructuresThread;
 import org.eclipse.ant.internal.ui.editor.text.AntEditorDocumentProvider;
 import org.eclipse.core.runtime.IStatus;
@@ -53,8 +54,6 @@ public class AntUIPlugin extends AbstractUIPlugin {
 	 */
 	public static final String PI_ANTUI = "org.eclipse.ant.ui"; //$NON-NLS-1$
 	
-	private static final String EMPTY_STRING= ""; //$NON-NLS-1$
-	
 	/**
 	 * The combined preference store.
 	 * @since 3.1
@@ -139,7 +138,7 @@ public class AntUIPlugin extends AbstractUIPlugin {
 	 */
 	public static IStatus newErrorStatus(String message, Throwable exception) {
 		if (message == null) {
-			message= EMPTY_STRING; 
+			return new Status(IStatus.ERROR, IAntUIConstants.PLUGIN_ID, 0, IAntCoreConstants.EMPTY_STRING, exception);
 		}		
 		return new Status(IStatus.ERROR, IAntUIConstants.PLUGIN_ID, 0, message, exception);
 	}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPreferenceInitializer.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPreferenceInitializer.java
index 0289642..ace694e 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPreferenceInitializer.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIPreferenceInitializer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class AntUIPreferenceInitializer extends AbstractPreferenceInitializer {
 		prefs.setDefault(IAntUIPreferenceConstants.ANT_FIND_BUILD_FILE_NAMES, "build.xml"); //$NON-NLS-1$
 		
 		prefs.setDefault(IAntUIPreferenceConstants.DOCUMENTATION_URL, "http://ant.apache.org/manual"); //$NON-NLS-1$
+		prefs.setDefault(IAntUIPreferenceConstants.USE_WORKSPACE_JRE, false);
 	
 		EditorsUI.useAnnotationsPreferencePage(prefs);
 		EditorsUI.useQuickDiffPreferencePage(prefs);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
index 05b7cd5..72d106d 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ import java.util.regex.Pattern;
 import org.apache.tools.ant.Target;
 import org.eclipse.ant.core.AntCorePlugin;
 import org.eclipse.ant.internal.core.AntCoreUtil;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.AntLaunchingUtil;
 import org.eclipse.ant.internal.ui.editor.AntEditor;
 import org.eclipse.ant.internal.ui.model.AntElementNode;
@@ -247,7 +248,7 @@ public final class AntUtil {
 		AntTargetNode[] targets= getTargets(project);
         if (targets == null) {
             Hashtable antTargets= project.getProject().getTargets();
-            Target implicitTarget= (Target) antTargets.get(""); //$NON-NLS-1$
+            Target implicitTarget= (Target) antTargets.get(IAntCoreConstants.EMPTY_STRING);
             if (implicitTarget != null) {
                 AntTargetNode implicitTargetNode= new AntTargetNode(implicitTarget);
                 project.addChildNode(implicitTargetNode);
@@ -397,7 +398,7 @@ public final class AntUtil {
 		if (path.length() == 0) {
 			return null;
 		}
-		if (path.startsWith("file:")) { //$NON-NLS-1$
+		if (path.startsWith(IAntCoreConstants.FILE_PROTOCOL)) {
 			// remove "file:"
 			path= path.substring(5, path.length());
 		}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java
index df0ea2b..9ced695 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.preferences.AntObjectLabelProvider;
 import org.eclipse.jface.viewers.ColumnViewer;
 import org.eclipse.jface.viewers.Viewer;
@@ -92,11 +93,11 @@ public abstract class ColumnSorter extends ViewerComparator {
 	public int compare(Viewer viewer, Object e1, Object e2) {
 		String text1 = getCompareText(e1, this.columnidx);
 		if(text1 == null) {
-			text1 = ""; //$NON-NLS-1$
+			text1 = IAntCoreConstants.EMPTY_STRING; 
 		}
 		String text2 = getCompareText(e2, this.columnidx);
 		if(text2 == null) {
-			text2 = ""; //$NON-NLS-1$
+			text2 = IAntCoreConstants.EMPTY_STRING; 
 		}
 		return (this.direction == SWT.UP ? -1 : 1) * 
 			text1.compareTo(text2);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/IAntUIPreferenceConstants.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/IAntUIPreferenceConstants.java
index 9d1e23b..74dbe88 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/IAntUIPreferenceConstants.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/IAntUIPreferenceConstants.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,4 +84,11 @@ public interface IAntUIPreferenceConstants {
 	 * Ant documentation.
 	 */
 	public static final String DOCUMENTATION_URL = "documentation.url"; //$NON-NLS-1$
+	
+	 /**
+     * Boolean preference that allows Ant to always be run in the same JRE as the workspace
+     * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=135807"
+     * @since 3.7
+     */
+    public static final String USE_WORKSPACE_JRE = "workspacejre"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java
index bec0e91..0b5dbed 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.UnknownElement;
 import org.apache.tools.ant.taskdefs.Javac;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.AntUtil;
 import org.eclipse.ant.internal.ui.model.AntElementNode;
@@ -249,7 +250,7 @@ public class AntNewJavaProjectPage extends WizardPage {
 	 */
 	private String getProjectNameFieldValue() {
 		if (fProjectNameField == null) {
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		} 
 		return fProjectNameField.getText().trim();
 	}
@@ -268,7 +269,7 @@ public class AntNewJavaProjectPage extends WizardPage {
 	 */
 	private void handleBrowseButtonPressed() {
 		
-		String lastUsedPath= ""; //$NON-NLS-1$
+		String lastUsedPath= IAntCoreConstants.EMPTY_STRING;
 		FileDialog dialog = new FileDialog(getShell(), SWT.SINGLE);
 		dialog.setFilterExtensions(new String[] { "*.xml" }); //$NON-NLS-1$;
 		dialog.setFilterPath(lastUsedPath);
@@ -295,13 +296,13 @@ public class AntNewJavaProjectPage extends WizardPage {
 
 		String locationFieldContents = getProjectLocationFieldValue();
 
-		if (locationFieldContents.equals("")) { //$NON-NLS-1$
+		if (locationFieldContents.equals(IAntCoreConstants.EMPTY_STRING)) {
 			setErrorMessage(null);
 			setMessage(DataTransferMessages.AntNewJavaProjectPage_15);
 			return false;
 		}
 
-		IPath path = new Path(""); //$NON-NLS-1$
+		IPath path = new Path(IAntCoreConstants.EMPTY_STRING);
 		if (!path.isValidPath(locationFieldContents)) {
 			setErrorMessage(DataTransferMessages.AntNewJavaProjectPage_16);
 			return false;
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java
index 5846e39..b6c8457 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AppletUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 Richard Hoefter and others.
+ * Copyright (c) 2004, 2011 Richard Hoefter and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.ILaunch;
@@ -59,7 +60,7 @@ public class AppletUtil
         b.append("        <applet code="); //$NON-NLS-1$
         b.append(getQuotedString(name + ".class")); //$NON-NLS-1$
         String appletName = configuration.getAttribute(
-                IJavaLaunchConfigurationConstants.ATTR_APPLET_NAME, ""); //$NON-NLS-1$
+                IJavaLaunchConfigurationConstants.ATTR_APPLET_NAME, IAntCoreConstants.EMPTY_STRING);
         if (appletName.length() != 0)
         {
             b.append(" name=\"" + appletName + "\""); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java
index 46542a2..e14ae78 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java	
@@ -1,1331 +1,1333 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 Richard Hoefter and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Richard Hoefter (richard.hoefter at web.de) - initial API and implementation, bug 95297, bug 97051, bug 128103, bug 201180, bug 161354
- *     IBM Corporation - nlsing and incorporating into Eclipse, bug 108276, bug 124210, bug 161845, bug 177833
- *     Nikolay Metchev (N.Metchev at teamphone.com) - bug 108276
- *     Ryan Fong (rfong at trapezenetworks.com) - bug 201143
- *******************************************************************************/
-
-package org.eclipse.ant.internal.ui.datatransfer;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactoryConfigurationError;
-
-import org.eclipse.ant.internal.ui.AntUIPlugin;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.core.variables.VariablesPlugin;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.jdt.core.IClasspathContainer;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Shell;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.ProcessingInstruction;
-import org.xml.sax.SAXException;
-
-/**
- * Creates build.xml file.
- */
-public class BuildFileCreator
-{
-    protected static final String IMPORT_BUILDFILE_PROCESSING_TARGET = "eclipse.ant.import"; //$NON-NLS-1$
-    protected static final String WARNING = " WARNING: Eclipse auto-generated file." + ExportUtil.NEWLINE + //$NON-NLS-1$
-                                            "              Any modifications will be overwritten."; //$NON-NLS-1$
-    protected static final String NOTE =    "              To include a user specific buildfile here, " + //$NON-NLS-1$
-                                            "simply create one in the same" + ExportUtil.NEWLINE + //$NON-NLS-1$
-                                            "              directory with the processing instruction " + //$NON-NLS-1$
-                                            "<?" +  IMPORT_BUILDFILE_PROCESSING_TARGET + "?>" + ExportUtil.NEWLINE + //$NON-NLS-1$ //$NON-NLS-2$
-                                            "              as the first entry and export the buildfile again. "; //$NON-NLS-1$
-
-    protected static String BUILD_XML = "build.xml"; //$NON-NLS-1$
-    protected static String JUNIT_OUTPUT_DIR = "junit"; //$NON-NLS-1$
-    protected static boolean CHECK_SOURCE_CYCLES = true;
-    protected static boolean CREATE_ECLIPSE_COMPILE_TARGET = true;
-    
-    private Document doc;
-    private Element root;
-    private IJavaProject project;
-    private String projectName;
-    private String projectRoot;
-    private Map variable2valueMap;
-    private Shell shell;
-    private Set visited = new TreeSet(); // record used subclasspaths
-    private Node classpathNode;
-    
-    /**
-     * Constructor. Please prefer {@link #createBuildFiles(Set, Shell, IProgressMonitor)} if
-     * you do not want call the various createXXX() methods yourself.
-     * 
-     * @param project    create buildfile for this project
-     * @param shell      parent instance for dialogs
-     */
-    public BuildFileCreator(IJavaProject project, Shell shell) throws ParserConfigurationException
-    {
-        this.project = project;
-        this.projectName = project.getProject().getName();
-        this.projectRoot = ExportUtil.getProjectRoot(project);
-        this.variable2valueMap = new LinkedHashMap();
-        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-        this.doc = dbf.newDocumentBuilder().newDocument();
-        this.shell = shell;
-    }
-      
-    /**
-     * Create buildfile for given projects.
-     * 
-     * @param projects    create buildfiles for these <code>IJavaProject</code>
-     *                    objects
-     * @param shell       parent instance for dialogs
-     * @return            project names for which buildfiles were created
-     * @throws InterruptedException thrown when user cancels task
-     */
-    public static List createBuildFiles(Set projects, Shell shell, IProgressMonitor pm)
-        throws JavaModelException, ParserConfigurationException,
-               TransformerConfigurationException, TransformerException,
-               IOException, CoreException, InterruptedException
-    {
-        List res = new ArrayList();
-        try {
-            createBuildFilesLoop(projects, shell, pm, res);
-        } finally {
-            if (pm != null) {
-                pm.done();
-            }
-        }
-        return res;
-    }
-
-    private static void createBuildFilesLoop(Set projects, Shell shell, IProgressMonitor pm, List res) throws CoreException, ParserConfigurationException,
-            JavaModelException, TransformerConfigurationException,
-            TransformerFactoryConfigurationError, TransformerException,
-            UnsupportedEncodingException {
-
-        // determine files to create/change
-        List files = new ArrayList();
-        for (Iterator iter = projects.iterator(); iter.hasNext();)
-        {
-            IJavaProject currentProject = (IJavaProject) iter.next();
-            IFile file = currentProject.getProject().getFile(BuildFileCreator.BUILD_XML);
-            files.add(file);
-        }
-
-        // trigger checkout
-        Set confirmedFiles = ExportUtil.validateEdit(shell, files);
-        SubMonitor localmonitor = SubMonitor.convert(pm, DataTransferMessages.AntBuildfileExportPage_0, confirmedFiles.size());
-        try {
-            int i = 0;
-            for (Iterator iter = projects.iterator(); iter.hasNext(); i++)
-            {
-                IJavaProject currentProject = (IJavaProject) iter.next();
-                IFile file = currentProject.getProject().getFile(BuildFileCreator.BUILD_XML);
-                if (! confirmedFiles.contains(file))
-                {
-                    continue;
-                }
-                
-                localmonitor.setTaskName(NLS.bind(DataTransferMessages.BuildFileCreator_generating_buildfile_for, currentProject.getProject().getName()));
-                
-                BuildFileCreator instance = new BuildFileCreator(currentProject, shell);
-                instance.createRoot();
-                instance.createImports();
-                EclipseClasspath classpath = new EclipseClasspath(currentProject);
-                if (CHECK_SOURCE_CYCLES) {
-                    SourceAnalyzer.checkCycles(currentProject, classpath, shell);
-                }
-                instance.createClasspaths(classpath);
-                instance.createInit(classpath.srcDirs, classpath.classDirs,
-                    classpath.inclusionLists, classpath.exclusionLists);   
-                instance.createClean(classpath.classDirs);
-                instance.createCleanAll();
-                instance.createBuild(classpath.srcDirs, classpath.classDirs,
-                                     classpath.inclusionLists, classpath.exclusionLists);
-                instance.createBuildRef();
-                if (CREATE_ECLIPSE_COMPILE_TARGET) {
-                    instance.addInitEclipseCompiler();
-                    instance.addBuildEclipse();
-                }
-                instance.createRun();           
-                instance.addSubProperties(currentProject, classpath);
-                instance.createProperty();
-    
-                // write build file
-                String xml = ExportUtil.toString(instance.doc);
-                InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8")); //$NON-NLS-1$
-                if (file.exists())
-                {
-                    file.setContents(is, true, true, null);
-                }
-                else
-                {
-                    file.create(is, true, null);
-                }    
-                if(localmonitor.isCanceled()) {
-                    return;
-                }
-                localmonitor.worked(1);
-                res.add(instance.projectName);
-            }
-        }
-        finally {
-            if(!localmonitor.isCanceled()) {
-                localmonitor.done();
-            }
-        }
-    }
-
-    /**
-     * Add property tag.
-     */
-    public void createProperty()
-    {
-        // read debug options from Eclipse settings
-        boolean source = JavaCore.GENERATE.equals(project.getOption(JavaCore.COMPILER_SOURCE_FILE_ATTR, true));
-        boolean lines = JavaCore.GENERATE.equals(project.getOption(JavaCore.COMPILER_LINE_NUMBER_ATTR, true));
-        boolean vars = JavaCore.GENERATE.equals(project.getOption(JavaCore.COMPILER_LOCAL_VARIABLE_ATTR, true));
-        
-        List debuglevel = new ArrayList();
-        if (source)
-        {
-            debuglevel.add("source"); //$NON-NLS-1$
-        }
-        if (lines)
-        {
-            debuglevel.add("lines"); //$NON-NLS-1$
-        }
-        if (vars)
-        {
-            debuglevel.add("vars"); //$NON-NLS-1$
-        }
-        if (debuglevel.size() == 0)
-        {
-            debuglevel.add("none"); //$NON-NLS-1$
-        }
-        variable2valueMap.put("debuglevel", ExportUtil.toString(debuglevel, ",")); //$NON-NLS-1$ //$NON-NLS-2$
-
-        // "Generated .class files compatibility"
-        String target = project.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true); 
-        variable2valueMap.put("target", target); //$NON-NLS-1$
-
-        // "Compiler compliance level"
-        //String compliance = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); 
-        
-        // "Source compatibility"
-        String sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
-        variable2valueMap.put("source", sourceLevel); //$NON-NLS-1$
-        
-        // <property name="x" value="y"/>
-        boolean first = true;
-        Node node = root.getFirstChild();
-        for (Iterator iterator = variable2valueMap.keySet().iterator(); iterator.hasNext();)
-        {
-            String key = (String) iterator.next();
-            String value = (String) variable2valueMap.get(key);
-            Element prop = doc.createElement("property"); //$NON-NLS-1$
-            prop.setAttribute("name", key); //$NON-NLS-1$
-            prop.setAttribute("value", value); //$NON-NLS-1$
-            if (first)
-            {
-                first = false;               
-            }
-            else
-            {
-                node = node.getNextSibling();
-            }
-            node = root.insertBefore(prop, node);
-        }
-        
-        // <property environment="env"/>
-        Element env = doc.createElement("property"); //$NON-NLS-1$
-        env.setAttribute("environment", "env"); //$NON-NLS-1$ //$NON-NLS-2$
-        root.insertBefore(env, root.getFirstChild());
-    }
-
-    /**
-     * Create project tag.
-     */
-    public void createRoot()
-    {   
-        // <project name="hello" default="build" basedir=".">
-        root = doc.createElement("project"); //$NON-NLS-1$
-        root.setAttribute("name" , projectName); //$NON-NLS-1$
-        root.setAttribute("default" , "build"); //$NON-NLS-1$ //$NON-NLS-2$
-        root.setAttribute("basedir" , "."); //$NON-NLS-1$ //$NON-NLS-2$
-        doc.appendChild(root);
-        
-        // <!-- warning -->
-        Comment comment = doc.createComment(WARNING + ExportUtil.NEWLINE + NOTE);
-        doc.insertBefore(comment, root);
-    }
-    
-    /**
-     * Find buildfiles in projectroot directory and automatically import them.
-     */
-    public void createImports()
-    {
-        // <import file="javadoc.xml"/>
-        File dir = new File(projectRoot);
-        FilenameFilter filter = new FilenameFilter()
-        {
-            public boolean accept(File acceptDir, String name)
-            {
-                return name.endsWith(".xml"); //$NON-NLS-1$
-            }
-        };
-
-        File[] files = dir.listFiles(filter);
-        if (files == null)
-        {
-            return;
-        }
-        for (int i = 0; i < files.length; i++)
-        {
-            // import file if it is an XML document with marker comment as first
-            // child
-            File file = files[i];
-            Document docCandidate;
-            try {
-                docCandidate = ExportUtil.parseXmlFile(file);
-                NodeList nodes = docCandidate.getChildNodes();
-                for (int j = 0; j < nodes.getLength(); j++) {
-                    Node node = nodes.item(j);
-                    if (node instanceof ProcessingInstruction &&  
-                            IMPORT_BUILDFILE_PROCESSING_TARGET.equals(((ProcessingInstruction) node).getTarget().trim())) {
-                        Element element = doc.createElement("import"); //$NON-NLS-1$
-                        element.setAttribute("file", file.getName()); //$NON-NLS-1$
-                        root.appendChild(element);
-                        break;
-                    }
-                }
-            } catch (ParserConfigurationException e){
-                AntUIPlugin.log("invalid XML file not imported: " + file.getAbsolutePath(), e); //$NON-NLS-1$
-            } catch (SAXException e) {
-                AntUIPlugin.log("invalid XML file not imported: " + file.getAbsolutePath(), e); //$NON-NLS-1$
-            } catch (IOException e) {
-                AntUIPlugin.log("invalid XML file not imported: " + file.getAbsolutePath(), e); //$NON-NLS-1$
-            }
-        }
-    }
-
-    /**
-     * Create classpath tags.
-     */
-    public void createClasspaths(EclipseClasspath classpath) throws JavaModelException
-    {
-        createClasspaths(null, project, classpath);
-    }
-    
-    /**
-     * Create classpath tags. Allows to specify ID.
-     * @param pathId    specify id, if null project name is used
-     */
-    public void createClasspaths(String pathId, IJavaProject currentProject, EclipseClasspath classpath)
-        throws JavaModelException
-    {
-        if (currentProject == null)
-        {
-            AntUIPlugin.log("project is not loaded in workspace: " + pathId, null); //$NON-NLS-1$ 
-            return;
-        }
-        // <path id="hello.classpath">
-        //     <pathelement location="${hello.location}/classes"/>
-        //     <pathelement location="${hello.location}/x.jar"/>
-        //     <path refid="${goodbye.classpath}"/>
-        // </path>
-        Element element = doc.createElement("path"); //$NON-NLS-1$
-        String pathid = pathId;
-        if (pathid == null)
-        {
-            pathid = currentProject.getProject().getName() + ".classpath"; //$NON-NLS-1$
-        }
-        element.setAttribute("id", pathid); //$NON-NLS-1$
-        visited.add(pathid);
-        variable2valueMap.putAll(classpath.variable2valueMap);
-        for (Iterator iter = ExportUtil.removeDuplicates(classpath.rawClassPathEntries).iterator(); iter.hasNext();)
-        {
-            String entry = (String) iter.next(); 
-            if (EclipseClasspath.isProjectReference(entry))
-            {
-                Element pathElement = doc.createElement("path"); //$NON-NLS-1$
-                IJavaProject referencedProject = EclipseClasspath.resolveProjectReference(entry); 
-                if (referencedProject == null)
-                {
-                    AntUIPlugin.log("project is not loaded in workspace: " + pathid, null); //$NON-NLS-1$
-                    continue;
-                }
-                String refPathId = referencedProject.getProject().getName() + ".classpath"; //$NON-NLS-1$
-                pathElement.setAttribute("refid", refPathId); //$NON-NLS-1$
-                element.appendChild(pathElement);               
-                if (visited.add(refPathId))
-                {
-                    createClasspaths(null, referencedProject, new EclipseClasspath(referencedProject)); // recursion
-                }
-            }
-            else if (EclipseClasspath.isUserLibraryReference(entry) ||
-                     EclipseClasspath.isLibraryReference(entry))
-            {
-                addUserLibrary(element, entry);
-            }
-            else if (EclipseClasspath.isUserSystemLibraryReference(entry))
-            {
-                if (pathid.endsWith(".bootclasspath")) { //$NON-NLS-1$
-                    addUserLibrary(element, entry);
-                }
-            }            
-            else if (EclipseClasspath.isJreReference(entry))
-            {
-                if (pathid.endsWith(".bootclasspath")) { //$NON-NLS-1$
-                    addJre(element);
-                }
-            }
-            else
-            {
-                // prefix with ${project.location}
-                String prefix = ""; //$NON-NLS-1$
-                if (!entry.startsWith("${") &&                                  // no variable ${var}/classes //$NON-NLS-1$
-                    !projectName.equals(currentProject.getProject().getName())) // not main project 
-                {
-                    String currentProjectRoot= ExportUtil.getProjectRoot(currentProject);
-                    entry= ExportUtil.getRelativePath(entry, currentProjectRoot);
-                    if (!new Path(entry).isAbsolute()) {
-                        prefix = "${" + currentProject.getProject().getName() + ".location}/"; //$NON-NLS-1$ //$NON-NLS-2$
-                    }
-                }
-                Element pathElement = doc.createElement("pathelement"); //$NON-NLS-1$
-                String path = ExportUtil.getRelativePath(prefix + entry, projectRoot);
-                pathElement.setAttribute("location", path); //$NON-NLS-1$
-                element.appendChild(pathElement);
-            }
-        }
-        addToClasspathBlock(element);
-    }
-
-    private void addUserLibrary(Element element, String entry)
-    {
-        // add classpath reference
-        Element pathElement = doc.createElement("path"); //$NON-NLS-1$
-        IClasspathContainer container = EclipseClasspath.resolveUserLibraryReference(entry); 
-        String name = ExportUtil.removePrefixAndSuffix(entry, "${", "}"); //$NON-NLS-1$ //$NON-NLS-2$
-        pathElement.setAttribute("refid", name); //$NON-NLS-1$
-        element.appendChild(pathElement);
-
-        // add classpath
-        if (visited.add(entry))
-        {
-            Element userElement = doc.createElement("path"); //$NON-NLS-1$
-            userElement.setAttribute("id", name); //$NON-NLS-1$
-            IClasspathEntry entries[] = container.getClasspathEntries();
-            for (int i = 0; i < entries.length; i++)
-            {   
-                String jarFile = entries[i].getPath().toString();
-                // use ECLIPSE_HOME variable for library jars
-                if (EclipseClasspath.isLibraryReference(entry))
-                {
-                    IPath home = JavaCore.getClasspathVariable("ECLIPSE_HOME"); //$NON-NLS-1$
-                    if (home != null && home.isPrefixOf(entries[i].getPath()))
-                    {
-                        variable2valueMap.put("ECLIPSE_HOME", home.toString()); //$NON-NLS-1$
-                        jarFile = "${ECLIPSE_HOME}" + jarFile.substring(home.toString().length()); //$NON-NLS-1$ 
-                    }
-                    else if (! new File(jarFile).exists() &&
-                            jarFile.startsWith('/' + projectName) &&
-                            new File(projectRoot, jarFile.substring(('/' + projectName).length())).exists())
-                    {
-                        // workaround that additional jars are stored with
-                        // leading project root in container object, although
-                        // they are relative and indeed correctly stored in
-                        // build.properties (jars.extra.classpath)
-                        jarFile = jarFile.substring(('/' + projectName).length() + 1);
-                    }
-                }
-                jarFile = ExportUtil.getRelativePath(jarFile, projectRoot);
-                Element userPathElement = doc.createElement("pathelement"); //$NON-NLS-1$
-                userPathElement.setAttribute("location", jarFile); //$NON-NLS-1$
-                userElement.appendChild(userPathElement);
-            }
-            addToClasspathBlock(userElement);
-        }
-    }
-    
-    /**
-     * Add JRE to given classpath.
-     * @param element   classpath tag
-     */
-    private void addJre(Element element)
-    {
-        // <fileset dir="${java.home}/lib" includes="*.jar"/>
-        // <fileset dir="${java.home}/lib/ext" includes="*.jar"/>
-        Element pathElement = doc.createElement("fileset"); //$NON-NLS-1$
-        pathElement.setAttribute("dir", "${java.home}/lib"); //$NON-NLS-1$ //$NON-NLS-2$
-        pathElement.setAttribute("includes", "*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.appendChild(pathElement);
-        pathElement = doc.createElement("fileset"); //$NON-NLS-1$
-        pathElement.setAttribute("dir", "${java.home}/lib/ext"); //$NON-NLS-1$ //$NON-NLS-2$
-        pathElement.setAttribute("includes", "*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.appendChild(pathElement);
-    }
-
-    private void addToClasspathBlock(Element element)
-    {
-        // remember node to insert all classpaths at same location
-        if (classpathNode == null)
-        {
-            classpathNode = root.appendChild(element);
-        }
-        else
-        {
-            classpathNode = classpathNode.getNextSibling();
-            classpathNode = root.insertBefore(element, classpathNode);
-        }
-    }
-    
-    /**
-     * Add properties of subprojects to internal properties map.
-     */
-    public void addSubProperties(IJavaProject subproject, EclipseClasspath classpath) throws JavaModelException
-    { 
-        for (Iterator iterator = ExportUtil.getClasspathProjectsRecursive(subproject).iterator(); iterator.hasNext();)
-        {
-            IJavaProject subProject = (IJavaProject) iterator.next(); 
-            String location = subProject.getProject().getName() + ".location"; //$NON-NLS-1$
-            // add subproject properties to variable2valueMap
-            String subProjectRoot = ExportUtil.getProjectRoot(subProject);
-            String relativePath = ExportUtil.getRelativePath(subProjectRoot,
-                    projectRoot);
-            variable2valueMap.put(location, relativePath);
-            variable2valueMap.putAll(classpath.variable2valueMap);    
-        }
-    }
-
-    /**
-     * Create init target. Creates directories and copies resources.
-     * @param srcDirs            source directories to copy resources from
-     * @param classDirs          classes directories to copy resources to
-     */
-    public void createInit(List srcDirs, List classDirs,
-        List inclusionLists, List exclusionLists)
-    {
-        // <target name="init">
-        //     <mkdir dir="classes"/>
-        // </target>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "init"); //$NON-NLS-1$ //$NON-NLS-2$
-        List classDirsUnique = ExportUtil.removeDuplicates(classDirs);        
-        for (Iterator iterator = classDirsUnique.iterator(); iterator.hasNext();)
-        {            
-            String classDir = (String) iterator.next();
-            if (!classDir.equals(".") && //$NON-NLS-1$
-                !EclipseClasspath.isReference(classDir))
-            {
-                Element pathElement = doc.createElement("mkdir"); //$NON-NLS-1$
-                pathElement.setAttribute("dir", classDir); //$NON-NLS-1$
-                element.appendChild(pathElement);
-            }
-        }
-        root.appendChild(element);
-        
-        createCopyResources(srcDirs, classDirs, element, inclusionLists,
-            exclusionLists);
-    }
-
-    private void createCopyResources(List srcDirs, List classDirs, Element element,
-        List inclusionLists, List exclusionLists)
-    {
-        // Check filter for copying resources
-        String filter = project.getOption(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, true);
-        StringTokenizer tokenizer = new StringTokenizer(filter, ","); //$NON-NLS-1$
-        List filters = Collections.list(tokenizer);
-        filters.add("*.java"); //$NON-NLS-1$
-        
-        // prefix filters with wildcard
-        for (int i = 0; i < filters.size(); i++)
-        {
-            String item = ((String) filters.get(i)).trim();
-            if (item.equals("*")) //$NON-NLS-1$
-            {
-                // everything is excluded from copying
-                return;
-            }            
-            filters.set(i, "**/" + item); //$NON-NLS-1$
-        }
-        
-        // <copy todir="classes" includeemptydirs="false">
-        //     <fileset dir="src" excludes="**/*.java"/>
-        // </copy>
-        for (int i = 0; i < srcDirs.size(); i++)
-        {
-            String srcDir = (String) srcDirs.get(i);
-            String classDir = (String) classDirs.get(i);
-            if (! EclipseClasspath.isReference(classDir))
-            {
-                Element copyElement = doc.createElement("copy"); //$NON-NLS-1$
-                copyElement.setAttribute("todir", classDir); //$NON-NLS-1$
-                copyElement.setAttribute("includeemptydirs", "false"); //$NON-NLS-1$ //$NON-NLS-2$
-                Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
-                filesetElement.setAttribute("dir", srcDir); //$NON-NLS-1$
-
-                List inclusions = (List) inclusionLists.get(i);
-                List exclusions = (List) exclusionLists.get(i);
-
-                for (Iterator iter = inclusions.iterator(); iter.hasNext();)
-                {
-                    String inclusion = (String) iter.next();
-                    Element includeElement = doc.createElement("include"); //$NON-NLS-1$
-                    includeElement.setAttribute("name", inclusion); //$NON-NLS-1$
-                    filesetElement.appendChild(includeElement);
-                }           
-                for (Iterator iter = filters.iterator(); iter.hasNext();)
-                {
-                    String exclusion = (String) iter.next();
-                    Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
-                    excludeElement.setAttribute("name", exclusion); //$NON-NLS-1$
-                    filesetElement.appendChild(excludeElement);
-                }
-                for (Iterator iter = exclusions.iterator(); iter.hasNext();)
-                {
-                    String exclusion = (String) iter.next();
-                    Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
-                    excludeElement.setAttribute("name", exclusion); //$NON-NLS-1$
-                    filesetElement.appendChild(excludeElement);
-                }
-                
-                copyElement.appendChild(filesetElement);
-                element.appendChild(copyElement);
-            }
-        }
-    }
-
-    /**
-     * Create clean target.
-     * @param classDirs    classes directories to delete
-     */
-    public void createClean(List classDirs)
-    {
-        // <target name="clean">
-        //     <delete dir="classes"/>
-        // </target>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
-        List classDirUnique = ExportUtil.removeDuplicates(classDirs);
-        for (Iterator iterator = classDirUnique.iterator(); iterator.hasNext();)
-        {
-            String classDir = (String) iterator.next();
-            if (!classDir.equals(".") && //$NON-NLS-1$
-                !EclipseClasspath.isReference(classDir))
-            {
-                Element deleteElement = doc.createElement("delete"); //$NON-NLS-1$
-                deleteElement.setAttribute("dir", classDir); //$NON-NLS-1$
-                element.appendChild(deleteElement);
-            }
-        }
-        root.appendChild(element);    
-
-        // <target name="clean">
-        //     <delete>
-        //         <fileset dir="." includes="**/*.class"/>
-        //     </delete>
-        // </target>
-        if (classDirs.contains(".")) //$NON-NLS-1$
-        {
-            Element deleteElement = doc.createElement("delete"); //$NON-NLS-1$
-            Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
-            filesetElement.setAttribute("dir", "."); //$NON-NLS-1$ //$NON-NLS-2$
-            filesetElement.setAttribute("includes", "**/*.class"); //$NON-NLS-1$ //$NON-NLS-2$
-            deleteElement.appendChild(filesetElement);           
-            element.appendChild(deleteElement);           
-        }
-    }
-    
-    /**
-     * Create cleanall target.
-     */
-    public void createCleanAll() throws JavaModelException
-    {
-        // <target name="cleanall" depends="clean">
-        //     <ant antfile="build.xml" dir="${hello.location}" inheritAll="false" target="clean"/>
-        // </target>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "cleanall"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.setAttribute("depends", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
-        List subProjects = ExportUtil.getClasspathProjectsRecursive(project);
-        for (Iterator iterator = subProjects.iterator(); iterator.hasNext();)
-        {
-            IJavaProject subProject = (IJavaProject) iterator.next();
-            Element antElement = doc.createElement("ant"); //$NON-NLS-1$
-            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
-            antElement.setAttribute("dir", "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-            antElement.setAttribute("target", "clean");  //$NON-NLS-1$ //$NON-NLS-2$
-            antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
-            element.appendChild(antElement);
-        }
-        root.appendChild(element);
-    }
-
-    /**
-     * Create build target.
-     * @param srcDirs           source directories of mainproject
-     * @param classDirs         class directories of mainproject
-     * @param inclusionLists    inclusion filters of mainproject 
-     * @param exclusionLists    exclusion filters of mainproject
-     */
-    public void createBuild(List srcDirs, List classDirs, List inclusionLists, List exclusionLists) throws JavaModelException
-    {
-        // <target name="build" depends="build-subprojects,build-project"/>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "build"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.setAttribute("depends", "build-subprojects,build-project"); //$NON-NLS-1$ //$NON-NLS-2$
-        root.appendChild(element);
-        
-        // <target name="build-subprojects">
-        //     <ant antfile="build.xml" dir="${hello.location}" inheritAll="false" target="build-project"/>
-        // </target>
-        element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "build-subprojects"); //$NON-NLS-1$ //$NON-NLS-2$
-        List subProjects = ExportUtil.getClasspathProjectsRecursive(project);
-        for (Iterator iterator = subProjects.iterator(); iterator.hasNext();)
-        {
-            IJavaProject subProject = (IJavaProject) iterator.next();
-            Element antElement = doc.createElement("ant"); //$NON-NLS-1$
-            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
-            antElement.setAttribute("dir", "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-            antElement.setAttribute("target", "build-project");  //$NON-NLS-1$ //$NON-NLS-2$
-            antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
-            if (CREATE_ECLIPSE_COMPILE_TARGET) {
-                Element propertysetElement = doc.createElement("propertyset"); //$NON-NLS-1$
-                Element propertyrefElement = doc.createElement("propertyref"); //$NON-NLS-1$
-                propertyrefElement.setAttribute("name", "build.compiler");  //$NON-NLS-1$ //$NON-NLS-2$
-                propertysetElement.appendChild(propertyrefElement);
-                antElement.appendChild(propertysetElement);
-            }
-            element.appendChild(antElement);           
-        }
-        root.appendChild(element);
-        
-        // <target name="build-project" depends="init">
-        //     <echo message="${ant.project.name}: ${ant.file}"/>
-        //     <javac destdir="classes">
-        //         <src path="src"/>
-        //         <include name=""/>
-        //         <exclude name=""/>
-        //         <classpath refid="project.classpath"/>
-        //     </javac>    
-        // </target>        
-        element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "build-project"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.setAttribute("depends", "init"); //$NON-NLS-1$ //$NON-NLS-2$
-        Element echoElement = doc.createElement("echo"); //$NON-NLS-1$
-        echoElement.setAttribute("message", "${ant.project.name}: ${ant.file}"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.appendChild(echoElement);           
-        for (int i = 0; i < srcDirs.size(); i++)
-        {
-            String srcDir = (String) srcDirs.get(i);
-            if (!EclipseClasspath.isReference(srcDir))
-            {
-                String classDir = (String) classDirs.get(i);
-                List inclusions = (List) inclusionLists.get(i);
-                List exclusions = (List) exclusionLists.get(i);
-                Element javacElement = doc.createElement("javac"); //$NON-NLS-1$
-                javacElement.setAttribute("destdir", classDir); //$NON-NLS-1$
-                javacElement.setAttribute("debug", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-                javacElement.setAttribute("debuglevel", "${debuglevel}"); //$NON-NLS-1$ //$NON-NLS-2$
-                javacElement.setAttribute("source", "${source}"); //$NON-NLS-1$ //$NON-NLS-2$
-                javacElement.setAttribute("target", "${target}"); //$NON-NLS-1$ //$NON-NLS-2$
-    
-                Element srcElement = doc.createElement("src"); //$NON-NLS-1$
-                srcElement.setAttribute("path", srcDir); //$NON-NLS-1$
-                javacElement.appendChild(srcElement);            
-    
-                for (Iterator iter = inclusions.iterator(); iter.hasNext();)
-                {
-                    String inclusion = (String) iter.next();
-                    Element includeElement = doc.createElement("include"); //$NON-NLS-1$
-                    includeElement.setAttribute("name", inclusion); //$NON-NLS-1$
-                    javacElement.appendChild(includeElement);
-                }           
-                for (Iterator iter = exclusions.iterator(); iter.hasNext();)
-                {
-                    String exclusion = (String) iter.next();
-                    Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
-                    excludeElement.setAttribute("name", exclusion); //$NON-NLS-1$
-                    javacElement.appendChild(excludeElement);
-                }           
-                Element classpathRefElement = doc.createElement("classpath"); //$NON-NLS-1$
-                classpathRefElement.setAttribute("refid", projectName + ".classpath"); //$NON-NLS-1$ //$NON-NLS-2$
-                javacElement.appendChild(classpathRefElement);
-                element.appendChild(javacElement);
-                
-                addCompilerBootClasspath(srcDirs, javacElement);
-            }
-        }
-        root.appendChild(element);
-    }
-    
-    /**
-     * Create target build-refprojects which compiles projects which reference
-     * current project.
-     */
-    private void createBuildRef() throws JavaModelException {
-        
-        Set refProjects = new TreeSet(ExportUtil.getJavaProjectComparator());
-        IJavaProject[] projects = project.getJavaModel().getJavaProjects();
-        for (int i = 0; i < projects.length; i++) {
-            List subProjects = ExportUtil.getClasspathProjects(projects[i]);
-            for (Iterator iter = subProjects.iterator(); iter.hasNext();) {
-                IJavaProject p = (IJavaProject) iter.next();
-                if (projectName.equals(p.getProject().getName())) {
-                    refProjects.add(projects[i]);
-                }
-            }
-        }
-        
-        // <target name="build-refprojects">
-        //     <ant antfile="build.xml" dir="${hello.location}" target="clean" inheritAll="false"/> 
-        //     <ant antfile="build.xml" dir="${hello.location}" target="build" inheritAll="false"/> 
-        // </target>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "build-refprojects"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.setAttribute("description", "Build all projects which " + //$NON-NLS-1$ //$NON-NLS-2$
-                "reference this project. Useful to propagate changes."); //$NON-NLS-1$
-        for (Iterator iter = refProjects.iterator(); iter.hasNext();) {
-            IJavaProject p = (IJavaProject) iter.next();
-            String location = p.getProject().getName() + ".location"; //$NON-NLS-1$
-            String refProjectRoot = ExportUtil.getProjectRoot(p);
-            String relativePath = ExportUtil.getRelativePath(refProjectRoot,
-                    projectRoot);
-            variable2valueMap.put(location, relativePath);
-
-            Element antElement = doc.createElement("ant"); //$NON-NLS-1$
-            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
-            antElement.setAttribute("dir", "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-            antElement.setAttribute("target", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
-            antElement.setAttribute("inheritAll", "false"); //$NON-NLS-1$ //$NON-NLS-2$
-            element.appendChild(antElement);
-            
-            antElement = doc.createElement("ant"); //$NON-NLS-1$
-            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
-            antElement.setAttribute("dir", "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-            antElement.setAttribute("target", "build"); //$NON-NLS-1$ //$NON-NLS-2$
-            antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
-            if (CREATE_ECLIPSE_COMPILE_TARGET) {
-                Element propertysetElement = doc.createElement("propertyset"); //$NON-NLS-1$
-                Element propertyrefElement = doc.createElement("propertyref"); //$NON-NLS-1$
-                propertyrefElement.setAttribute("name", "build.compiler");  //$NON-NLS-1$ //$NON-NLS-2$
-                propertysetElement.appendChild(propertyrefElement);
-                antElement.appendChild(propertysetElement);
-            }
-            element.appendChild(antElement);
-        }
-        root.appendChild(element);
-    }
-    
-    /**
-     * Add target to initialize Eclipse compiler. It copies required jars to ant
-     * lib directory.
-     */
-    public void addInitEclipseCompiler()
-    {
-        // use ECLIPSE_HOME classpath variable
-        IPath value = JavaCore.getClasspathVariable("ECLIPSE_HOME"); //$NON-NLS-1$
-        if (value != null) {
-            variable2valueMap.put("ECLIPSE_HOME", ExportUtil.getRelativePath( //$NON-NLS-1$
-                value.toString(), projectRoot));
-        }
-        // <target name="init-eclipse-compiler" description="copy Eclipse compiler jars to ant lib directory">
-        //     <property name="ECLIPSE_HOME" value="C:/Programme/eclipse-3.1" />
-        //     <copy todir="${ant.library.dir}">
-        //         <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar" />
-        //     </copy>
-        //     <unzip dest="${ant.library.dir}">
-        //         <patternset includes="jdtCompilerAdapter.jar" />
-        //         <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar" />
-        //     </unzip>
-        // </target>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "init-eclipse-compiler"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.setAttribute("description", "copy Eclipse compiler jars to ant lib directory"); //$NON-NLS-1$ //$NON-NLS-2$
-        Element copyElement = doc.createElement("copy"); //$NON-NLS-1$
-        copyElement.setAttribute("todir", "${ant.library.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-        Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
-        filesetElement.setAttribute("dir", "${ECLIPSE_HOME}/plugins"); //$NON-NLS-1$ //$NON-NLS-2$
-        filesetElement.setAttribute("includes", "org.eclipse.jdt.core_*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
-        copyElement.appendChild(filesetElement);
-        element.appendChild(copyElement);
-        Element unzipElement = doc.createElement("unzip"); //$NON-NLS-1$
-        unzipElement.setAttribute("dest", "${ant.library.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-        Element patternsetElement = doc.createElement("patternset"); //$NON-NLS-1$
-        patternsetElement.setAttribute("includes", "jdtCompilerAdapter.jar"); //$NON-NLS-1$ //$NON-NLS-2$
-        unzipElement.appendChild(patternsetElement);
-        unzipElement.appendChild(filesetElement.cloneNode(false));
-        element.appendChild(unzipElement);
-        root.appendChild(element);
-    }
-
-    /**
-     * Add target to compile project using Eclipse compiler.
-     */
-    public void addBuildEclipse()
-    {
-        // <target name="build-eclipse-compiler" description="compile project with Eclipse compiler">
-        //     <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
-        //     <antcall target="build" />
-        // </target>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "build-eclipse-compiler"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.setAttribute("description", "compile project with Eclipse compiler"); //$NON-NLS-1$ //$NON-NLS-2$
-        Element propertyElement = doc.createElement("property"); //$NON-NLS-1$
-        propertyElement.setAttribute("name", "build.compiler"); //$NON-NLS-1$ //$NON-NLS-2$
-        propertyElement.setAttribute("value", "org.eclipse.jdt.core.JDTCompilerAdapter"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.appendChild(propertyElement);
-        Element antcallElement = doc.createElement("antcall"); //$NON-NLS-1$
-        antcallElement.setAttribute("target", "build"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.appendChild(antcallElement);
-        root.appendChild(element);
-    }
-
-    /**
-     * Add all bootclasspaths in srcDirs to given javacElement.
-     */
-    private void addCompilerBootClasspath(List srcDirs, Element javacElement)
-    {
-        // <bootclasspath>
-        //     <path refid="mylib.bootclasspath"/>
-        //     <fileset dir="${java.home}/lib" includes="*.jar"/>
-        //     <fileset dir="${java.home}/lib/ext" includes="*.jar"/>
-        // </bootclasspath>
-        Element bootclasspathElement = doc.createElement("bootclasspath"); //$NON-NLS-1$
-        boolean bootclasspathUsed = false;
-        for (Iterator iter = srcDirs.iterator(); iter.hasNext();)
-        {
-            String entry = (String) iter.next();
-            if (EclipseClasspath.isUserSystemLibraryReference(entry))
-            {
-                Element pathElement = doc.createElement("path"); //$NON-NLS-1$                        
-                pathElement.setAttribute("refid", ExportUtil.removePrefixAndSuffix(entry, "${", "}")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-                bootclasspathElement.appendChild(pathElement);
-                bootclasspathUsed = true;
-            } else if (EclipseClasspath.isJreReference(entry)) {
-                addJre(bootclasspathElement);
-            }
-        }
-        if (bootclasspathUsed)
-        {
-            javacElement.appendChild(bootclasspathElement);
-        }
-    }
-
-    /**
-     * Add run targets.
-     * @throws CoreException thrown if problem accessing the launch configuration
-     * @throws TransformerFactoryConfigurationError thrown if applet file could not get created
-     * @throws UnsupportedEncodingException thrown if applet file could not get created
-     */
-    public void createRun() throws CoreException, TransformerFactoryConfigurationError, UnsupportedEncodingException
-    {
-        // <target name="run">
-        //     <java fork="yes" classname="class" failonerror="true" dir="." newenvironment="true">
-        //         <env key="a" value="b"/>
-        //         <jvmarg value="-Dx=y"/>
-        //         <arg value="arg"/>
-        //         <classpath refid="project.classpath"/>
-        //     </java>
-        // </target>
-        ILaunchConfiguration[] confs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations();
-        boolean junitUsed = false;
-        for (int i = 0; i < confs.length; i++)
-        {
-            ILaunchConfiguration conf = confs[i];
-            if (!projectName.equals(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""))) //$NON-NLS-1$
-            {
-                continue;
-            }
-                    
-            if (conf.getType().getIdentifier().equals(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION))
-            {
-                addJavaApplication(variable2valueMap, conf);
-            }
-            else if (conf.getType().getIdentifier().equals(IJavaLaunchConfigurationConstants.ID_JAVA_APPLET))
-            {
-                addApplet(variable2valueMap, conf);
-            }
-            else if (conf.getType().getIdentifier().equals("org.eclipse.jdt.junit.launchconfig" /*JUnitLaunchConfiguration.ID_JUNIT_APPLICATION*/)) //$NON-NLS-1$
-            {                    
-                addJUnit(variable2valueMap, conf);
-                junitUsed = true;
-            }           
-        }
-        
-        if (junitUsed)
-        {
-            addJUnitReport();
-        }
-    }
-
-    /**
-     * Convert Java application launch configuration to ant target and add it to a document.
-     * @param variable2value    adds Eclipse variables to this map,
-     *                             if run configuration makes use of this feature
-     * @param conf                 Java application launch configuration
-     */
-    public void addJavaApplication(Map variable2value, ILaunchConfiguration conf) throws CoreException
-    {
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", conf.getName()); //$NON-NLS-1$
-        Element javaElement = doc.createElement("java"); //$NON-NLS-1$
-        javaElement.setAttribute("fork", "yes"); //$NON-NLS-1$ //$NON-NLS-2$
-        javaElement.setAttribute("classname", conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "")); //$NON-NLS-1$ //$NON-NLS-2$
-        javaElement.setAttribute("failonerror", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
-        ExportUtil.addVariable(variable2value, dir, projectRoot);                
-        if (!dir.equals("")) //$NON-NLS-1$
-        {
-            javaElement.setAttribute("dir", ExportUtil.getRelativePath(dir, projectRoot)); //$NON-NLS-1$
-        }
-        if (!conf.getAttribute(ILaunchManager.ATTR_APPEND_ENVIRONMENT_VARIABLES, true))
-        {
-            javaElement.setAttribute("newenvironment", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-        }
-        Map props = conf.getAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, new TreeMap());
-        addElements(props, doc, javaElement, "env", "key", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, ""), doc, javaElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""), doc, javaElement, "arg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        element.appendChild(javaElement);
-        
-        addRuntimeClasspath(conf, javaElement);
-        addRuntimeBootClasspath(conf, javaElement);
-        root.appendChild(element);
-    }
-
-    /**
-     * Convert applet launch configuration to Ant target and add it to a document. 
-     * @param variable2value    adds Eclipse variables to this map,
-     *                             if run configuration makes use of this feature
-     * @param conf                 applet configuration
-     * @throws CoreException thrown if problem dealing with launch configuration or underlying resources 
-     * @throws TransformerFactoryConfigurationError thrown if applet file could not get created 
-     * @throws UnsupportedEncodingException thrown if applet file could not get created
-     */
-    public void addApplet(Map variable2value, ILaunchConfiguration conf) throws CoreException, TransformerFactoryConfigurationError, UnsupportedEncodingException
-    {
-        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
-        if (dir.equals("")) //$NON-NLS-1$
-        {
-            dir = projectRoot;
-        }
-        ExportUtil.addVariable(variable2value, dir, projectRoot);
-        String value;
-        try
-        {
-            value = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(dir);    
-        }
-        catch (CoreException e)
-        {
-            // cannot resolve variable
-            value = null;
-        }
-
-        String htmlfile = ((value != null) ? value : dir) + '/' + conf.getName() + ".html"; //$NON-NLS-1$
-        // confirm overwrite
-        if (ExportUtil.existsUserFile(htmlfile) && !MessageDialog.openConfirm(shell, DataTransferMessages.AntBuildfileExportPage_4, DataTransferMessages.AntBuildfileExportPage_4 + ": " + htmlfile)) //$NON-NLS-1$
-        {
-            return;
-        }
-        IJavaProject javaProject = ExportUtil.getJavaProjectByName(projectName);
-        IFile file = javaProject.getProject().getFile(conf.getName() + ".html"); //$NON-NLS-1$
-        if (ExportUtil.validateEdit(shell, file)) // checkout file if required
-        {
-            // write build file
-            String html = AppletUtil.buildHTMLFile(conf);
-            InputStream is = new ByteArrayInputStream(html.getBytes("UTF-8")); //$NON-NLS-1$
-            if (file.exists())
-            {
-                file.setContents(is, true, true, null);
-            }
-            else
-            {
-                file.create(is, true, null);
-            }
-        }
-        
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", conf.getName()); //$NON-NLS-1$
-        Element javaElement = doc.createElement("java"); //$NON-NLS-1$
-        javaElement.setAttribute("fork", "yes");  //$NON-NLS-1$//$NON-NLS-2$
-        javaElement.setAttribute("classname", conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_APPLET_APPLETVIEWER_CLASS, "sun.applet.AppletViewer")); //$NON-NLS-1$ //$NON-NLS-2$
-        javaElement.setAttribute("failonerror", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-        if (value != null)
-        {
-            javaElement.setAttribute("dir", ExportUtil.getRelativePath(dir, projectRoot)); //$NON-NLS-1$
-        }
-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, ""), doc, javaElement, "jvmarg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""), doc, javaElement, "arg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
-        addElement(conf.getName() + ".html", doc, javaElement, "arg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        element.appendChild(javaElement);
-        addRuntimeClasspath(conf, javaElement);
-        addRuntimeBootClasspath(conf, javaElement);
-        root.appendChild(element);
-    }
-    
-    /**
-     * Convert JUnit launch configuration to JUnit task and add it to a document. 
-     * @param variable2value    adds Eclipse variables to this map,
-     *                             if run configuration makes use of this feature
-     * @param conf                 applet configuration
-     */
-    public void addJUnit(Map variable2value, ILaunchConfiguration conf) throws CoreException
-    {
-        // <target name="runtest">
-        //     <mkdir dir="junit"/>
-        //     <junit fork="yes" printsummary="withOutAndErr">
-        //         <formatter type="xml"/>
-        //         <test name="testclass"/>
-        //         <env key="a" value="b"/>
-        //         <jvmarg value="-Dx=y"/>
-        //         <classpath refid="project.classpath"/>
-        //     </junit>
-        // </target>
-        String testClass = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, ""); //$NON-NLS-1$
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", conf.getName()); //$NON-NLS-1$
-        
-        Element mkdirElement = doc.createElement("mkdir"); //$NON-NLS-1$
-        mkdirElement.setAttribute("dir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-        element.appendChild(mkdirElement);
-        
-        Element junitElement = doc.createElement("junit"); //$NON-NLS-1$
-        junitElement.setAttribute("fork", "yes"); //$NON-NLS-1$ //$NON-NLS-2$
-        junitElement.setAttribute("printsummary", "withOutAndErr"); //$NON-NLS-1$ //$NON-NLS-2$
-        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
-        ExportUtil.addVariable(variable2value, dir, projectRoot);                
-        if (!dir.equals("")) //$NON-NLS-1$
-        {
-            junitElement.setAttribute("dir", ExportUtil.getRelativePath(dir, projectRoot)); //$NON-NLS-1$
-        }
-        if (!conf.getAttribute(ILaunchManager.ATTR_APPEND_ENVIRONMENT_VARIABLES, true))
-        {
-            junitElement.setAttribute("newenvironment", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-        }
-        Element formatterElement = doc.createElement("formatter"); //$NON-NLS-1$
-        formatterElement.setAttribute("type", "xml");  //$NON-NLS-1$//$NON-NLS-2$
-        junitElement.appendChild(formatterElement);
-        if (!testClass.equals("")) //$NON-NLS-1$
-        {
-            // Case 1: Single JUnit class
-            Element testElement = doc.createElement("test"); //$NON-NLS-1$
-            testElement.setAttribute("name", testClass); //$NON-NLS-1$
-            testElement.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-            junitElement.appendChild(testElement);                       
-        }
-        else
-        {
-            // Case 2: Run all tests in project, package or source folder
-            String container = conf.getAttribute("org.eclipse.jdt.junit.CONTAINER" /*JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR*/, ""); //$NON-NLS-1$ //$NON-NLS-2$
-            IType[] types = ExportUtil.findTestsInContainer(container);
-            Set sortedTypes = new TreeSet(ExportUtil.getITypeComparator());
-            sortedTypes.addAll(Arrays.asList(types));
-            for (Iterator iter = sortedTypes.iterator(); iter.hasNext();) {
-                IType type = (IType) iter.next();
-                Element testElement = doc.createElement("test"); //$NON-NLS-1$
-                testElement.setAttribute("name", type.getFullyQualifiedName()); //$NON-NLS-1$
-                testElement.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-                junitElement.appendChild(testElement);                       
-            }
-        }
-        Map props = conf.getAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, new TreeMap());
-        addElements(props, doc, junitElement, "env", "key", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, ""), doc, junitElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        element.appendChild(junitElement);
-        addRuntimeClasspath(conf, junitElement);
-        addRuntimeBootClasspath(conf, junitElement);
-        root.appendChild(element);
-    }
-    
-    /**
-     * Add junitreport target. 
-     */
-    public void addJUnitReport()
-    {
-        variable2valueMap.put("junit.output.dir", JUNIT_OUTPUT_DIR); //$NON-NLS-1$
-        
-        // <target name="junitreport">
-        //     <junitreport todir="junit">
-        //         <fileset dir="junit">
-        //             <include name="TEST-*.xml"/>
-        //         </fileset>
-        //         <report format="frames" todir="junit"/>
-        //     </junitreport>
-        // </target>
-        Element element = doc.createElement("target"); //$NON-NLS-1$
-        element.setAttribute("name", "junitreport"); //$NON-NLS-1$ //$NON-NLS-2$
-        Element junitreport = doc.createElement("junitreport"); //$NON-NLS-1$
-        junitreport.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-        Element fileset = doc.createElement("fileset"); //$NON-NLS-1$
-        fileset.setAttribute("dir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-        junitreport.appendChild(fileset);
-        Element include = doc.createElement("include"); //$NON-NLS-1$
-        include.setAttribute("name", "TEST-*.xml"); //$NON-NLS-1$ //$NON-NLS-2$
-        fileset.appendChild(include);
-        Element report = doc.createElement("report"); //$NON-NLS-1$
-        report.setAttribute("format", "frames"); //$NON-NLS-1$ //$NON-NLS-2$
-        report.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
-        junitreport.appendChild(report);
-        element.appendChild(junitreport);
-        root.appendChild(element);
-    }
-
-    /**
-     * Add classpath tag to given javaElement.
-     */
-    private void addRuntimeClasspath(ILaunchConfiguration conf, Element javaElement) throws CoreException
-    {
-        // <classpath refid="hello.classpath"/>
-        Element classpathRefElement = doc.createElement("classpath"); //$NON-NLS-1$
-        EclipseClasspath runtimeClasspath = new EclipseClasspath(project, conf, false);
-        if (ExportUtil.isDefaultClasspath(project, runtimeClasspath))
-        {
-            classpathRefElement.setAttribute("refid", projectName + ".classpath"); //$NON-NLS-1$ //$NON-NLS-2$
-        }
-        else
-        {
-            String pathId = "run." + conf.getName() + ".classpath"; //$NON-NLS-1$ //$NON-NLS-2$
-            classpathRefElement.setAttribute("refid", pathId); //$NON-NLS-1$
-            createClasspaths(pathId, project, runtimeClasspath);            
-        }
-        javaElement.appendChild(classpathRefElement);
-    }
-    
-    /**
-     * Add bootclasspath tag to given javaElement.
-     */
-    private void addRuntimeBootClasspath(ILaunchConfiguration conf, Element javaElement) throws CoreException
-    {        
-        // <bootclasspath>
-        //     <path refid="run.hello.bootclasspath"/>
-        // </bootclasspath>
-        EclipseClasspath bootClasspath = new EclipseClasspath(project, conf, true);
-        if (bootClasspath.rawClassPathEntries.size() == 1
-                && EclipseClasspath.isJreReference((String) bootClasspath.rawClassPathEntries.get(0))) {
-            // the default boot classpath contains exactly one element (the JRE)
-            return;
-        }
-        String pathId = "run." + conf.getName() + ".bootclasspath"; //$NON-NLS-1$ //$NON-NLS-2$
-        createClasspaths(pathId, project, bootClasspath);
-        Element bootclasspath = doc.createElement("bootclasspath"); //$NON-NLS-1$
-        Element classpathRefElement = doc.createElement("path"); //$NON-NLS-1$
-        classpathRefElement.setAttribute("refid", pathId); //$NON-NLS-1$
-        bootclasspath.appendChild(classpathRefElement);
-        javaElement.appendChild(bootclasspath);
-    }
-
-    /**
-     * Create child node from <code>cmdLine</code> and add it to <code>element</code> which is part of
-     * <code>doc</code>.
-     * 
-     * @param cmdLineArgs          command line arguments, separated with spaces or within double quotes, may also contain Eclipse variables 
-     * @param doc                  XML document
-     * @param element              node to add child to
-     * @param elementName          name of new child node
-     * @param attributeName        name of attribute for child node
-     * @param variable2valueMap    adds Eclipse variables to this map,
-     *                             if command line makes use of this feature
-     */
-    private static void addElement(String cmdLineArgs, Document doc,
-            Element element, String elementName, String attributeName,
-            Map variable2valueMap, String projectRoot) {
-
-        if (cmdLineArgs == null || cmdLineArgs.length() == 0) {
-            return;
-        }
-        ExportUtil.addVariable(variable2valueMap, cmdLineArgs, projectRoot);
-        Element itemElement = doc.createElement(elementName);
-        itemElement.setAttribute(attributeName, cmdLineArgs);
-        element.appendChild(itemElement);            
-    }
-    
-    /**
-     * Create child nodes from string map and add them to <code>element</code> which is part of
-     * <code>doc</code>.
-     * 
-     * @param map                   key/value string pairs
-     * @param doc                   XML document
-     * @param element               node to add children to
-     * @param elementName           name of new child node
-     * @param keyAttributeName      name of key attribute
-     * @param valueAttributeName    name of value attribute
-     */
-    private static void addElements(Map map, Document doc, Element element, String elementName,
-                                    String keyAttributeName, String valueAttributeName)
-    {
-        for (Iterator iter = map.keySet().iterator(); iter.hasNext();)
-        {
-            String key = (String) iter.next();
-            String value = (String) map.get(key);
-            Element itemElement = doc.createElement(elementName);
-            itemElement.setAttribute(keyAttributeName, key);
-            itemElement.setAttribute(valueAttributeName, value);
-            element.appendChild(itemElement);            
-        }
-    }
-    
-    /**
-     * Set config options.
-     * @param buildfilename name for Ant buildfile
-     * @param junitdir name of JUnit output directory
-     * @param checkcycles check project for Ant compatibility
-     * @param eclipsecompiler generate target for compiling project with Eclipse compiler
-     */
-    public static void setOptions(String buildfilename, String junitdir,
-            boolean checkcycles, boolean eclipsecompiler) {
-
-        if (buildfilename.length() > 0) {
-            BUILD_XML = buildfilename;
-        }
-        if (junitdir.length() > 0) {
-            JUNIT_OUTPUT_DIR = junitdir;
-        }
-        CHECK_SOURCE_CYCLES = checkcycles;
-        CREATE_ECLIPSE_COMPILE_TARGET = eclipsecompiler;
-    }
+/*******************************************************************************
+ * Copyright (c) 2004, 2011 Richard Hoefter and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Richard Hoefter (richard.hoefter at web.de) - initial API and implementation, bug 95297, bug 97051, bug 128103, bug 201180, bug 161354
+ *     IBM Corporation - nlsing and incorporating into Eclipse, bug 108276, bug 124210, bug 161845, bug 177833
+ *     Nikolay Metchev (N.Metchev at teamphone.com) - bug 108276
+ *     Ryan Fong (rfong at trapezenetworks.com) - bug 201143
+ *******************************************************************************/
+
+package org.eclipse.ant.internal.ui.datatransfer;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+
+import org.eclipse.ant.internal.core.IAntCoreConstants;
+import org.eclipse.ant.internal.ui.AntUIPlugin;
+import org.eclipse.ant.internal.ui.model.IAntModelConstants;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.ProcessingInstruction;
+import org.xml.sax.SAXException;
+
+/**
+ * Creates build.xml file.
+ */
+public class BuildFileCreator
+{
+    protected static final String IMPORT_BUILDFILE_PROCESSING_TARGET = "eclipse.ant.import"; //$NON-NLS-1$
+    protected static final String WARNING = " WARNING: Eclipse auto-generated file." + ExportUtil.NEWLINE + //$NON-NLS-1$
+                                            "              Any modifications will be overwritten."; //$NON-NLS-1$
+    protected static final String NOTE =    "              To include a user specific buildfile here, " + //$NON-NLS-1$
+                                            "simply create one in the same" + ExportUtil.NEWLINE + //$NON-NLS-1$
+                                            "              directory with the processing instruction " + //$NON-NLS-1$
+                                            "<?" +  IMPORT_BUILDFILE_PROCESSING_TARGET + "?>" + ExportUtil.NEWLINE + //$NON-NLS-1$ //$NON-NLS-2$
+                                            "              as the first entry and export the buildfile again. "; //$NON-NLS-1$
+
+    protected static String BUILD_XML = "build.xml"; //$NON-NLS-1$
+    protected static String JUNIT_OUTPUT_DIR = "junit"; //$NON-NLS-1$
+    protected static boolean CHECK_SOURCE_CYCLES = true;
+    protected static boolean CREATE_ECLIPSE_COMPILE_TARGET = true;
+    
+    private Document doc;
+    private Element root;
+    private IJavaProject project;
+    private String projectName;
+    private String projectRoot;
+    private Map variable2valueMap;
+    private Shell shell;
+    private Set visited = new TreeSet(); // record used subclasspaths
+    private Node classpathNode;
+    
+    /**
+     * Constructor. Please prefer {@link #createBuildFiles(Set, Shell, IProgressMonitor)} if
+     * you do not want call the various createXXX() methods yourself.
+     * 
+     * @param project    create buildfile for this project
+     * @param shell      parent instance for dialogs
+     */
+    public BuildFileCreator(IJavaProject project, Shell shell) throws ParserConfigurationException
+    {
+        this.project = project;
+        this.projectName = project.getProject().getName();
+        this.projectRoot = ExportUtil.getProjectRoot(project);
+        this.variable2valueMap = new LinkedHashMap();
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        this.doc = dbf.newDocumentBuilder().newDocument();
+        this.shell = shell;
+    }
+      
+    /**
+     * Create buildfile for given projects.
+     * 
+     * @param projects    create buildfiles for these <code>IJavaProject</code>
+     *                    objects
+     * @param shell       parent instance for dialogs
+     * @return            project names for which buildfiles were created
+     * @throws InterruptedException thrown when user cancels task
+     */
+    public static List createBuildFiles(Set projects, Shell shell, IProgressMonitor pm)
+        throws JavaModelException, ParserConfigurationException,
+               TransformerConfigurationException, TransformerException,
+               IOException, CoreException, InterruptedException
+    {
+        List res = new ArrayList();
+        try {
+            createBuildFilesLoop(projects, shell, pm, res);
+        } finally {
+            if (pm != null) {
+                pm.done();
+            }
+        }
+        return res;
+    }
+
+    private static void createBuildFilesLoop(Set projects, Shell shell, IProgressMonitor pm, List res) throws CoreException, ParserConfigurationException,
+            JavaModelException, TransformerConfigurationException,
+            TransformerFactoryConfigurationError, TransformerException,
+            UnsupportedEncodingException {
+
+        // determine files to create/change
+        List files = new ArrayList();
+        for (Iterator iter = projects.iterator(); iter.hasNext();)
+        {
+            IJavaProject currentProject = (IJavaProject) iter.next();
+            IFile file = currentProject.getProject().getFile(BuildFileCreator.BUILD_XML);
+            files.add(file);
+        }
+
+        // trigger checkout
+        Set confirmedFiles = ExportUtil.validateEdit(shell, files);
+        SubMonitor localmonitor = SubMonitor.convert(pm, DataTransferMessages.AntBuildfileExportPage_0, confirmedFiles.size());
+        try {
+			Iterator iter= projects.iterator();
+			while (iter.hasNext())
+            {
+                IJavaProject currentProject = (IJavaProject) iter.next();
+                IFile file = currentProject.getProject().getFile(BuildFileCreator.BUILD_XML);
+                if (! confirmedFiles.contains(file))
+                {
+                    continue;
+                }
+                
+                localmonitor.setTaskName(NLS.bind(DataTransferMessages.BuildFileCreator_generating_buildfile_for, currentProject.getProject().getName()));
+                
+                BuildFileCreator instance = new BuildFileCreator(currentProject, shell);
+                instance.createRoot();
+                instance.createImports();
+                EclipseClasspath classpath = new EclipseClasspath(currentProject);
+                if (CHECK_SOURCE_CYCLES) {
+                    SourceAnalyzer.checkCycles(currentProject, classpath, shell);
+                }
+                instance.createClasspaths(classpath);
+                instance.createInit(classpath.srcDirs, classpath.classDirs,
+                    classpath.inclusionLists, classpath.exclusionLists);   
+                instance.createClean(classpath.classDirs);
+                instance.createCleanAll();
+                instance.createBuild(classpath.srcDirs, classpath.classDirs,
+                                     classpath.inclusionLists, classpath.exclusionLists);
+                instance.createBuildRef();
+                if (CREATE_ECLIPSE_COMPILE_TARGET) {
+                    instance.addInitEclipseCompiler();
+                    instance.addBuildEclipse();
+                }
+                instance.createRun();           
+                instance.addSubProperties(currentProject, classpath);
+                instance.createProperty();
+    
+                // write build file
+                String xml = ExportUtil.toString(instance.doc);
+                InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8")); //$NON-NLS-1$
+                if (file.exists())
+                {
+                    file.setContents(is, true, true, null);
+                }
+                else
+                {
+                    file.create(is, true, null);
+                }    
+                if(localmonitor.isCanceled()) {
+                    return;
+                }
+                localmonitor.worked(1);
+                res.add(instance.projectName);
+            }
+        }
+        finally {
+            if(!localmonitor.isCanceled()) {
+                localmonitor.done();
+            }
+        }
+    }
+
+    /**
+     * Add property tag.
+     */
+    public void createProperty()
+    {
+        // read debug options from Eclipse settings
+        boolean source = JavaCore.GENERATE.equals(project.getOption(JavaCore.COMPILER_SOURCE_FILE_ATTR, true));
+        boolean lines = JavaCore.GENERATE.equals(project.getOption(JavaCore.COMPILER_LINE_NUMBER_ATTR, true));
+        boolean vars = JavaCore.GENERATE.equals(project.getOption(JavaCore.COMPILER_LOCAL_VARIABLE_ATTR, true));
+        
+        List debuglevel = new ArrayList();
+        if (source)
+        {
+            debuglevel.add("source"); //$NON-NLS-1$
+        }
+        if (lines)
+        {
+            debuglevel.add("lines"); //$NON-NLS-1$
+        }
+        if (vars)
+        {
+            debuglevel.add("vars"); //$NON-NLS-1$
+        }
+        if (debuglevel.size() == 0)
+        {
+            debuglevel.add("none"); //$NON-NLS-1$
+        }
+        variable2valueMap.put("debuglevel", ExportUtil.toString(debuglevel, ",")); //$NON-NLS-1$ //$NON-NLS-2$
+
+        // "Generated .class files compatibility"
+        String target = project.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true); 
+        variable2valueMap.put("target", target); //$NON-NLS-1$
+
+        // "Compiler compliance level"
+        //String compliance = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); 
+        
+        // "Source compatibility"
+        String sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
+        variable2valueMap.put("source", sourceLevel); //$NON-NLS-1$
+        
+        // <property name="x" value="y"/>
+        boolean first = true;
+        Node node = root.getFirstChild();
+        for (Iterator iterator = variable2valueMap.keySet().iterator(); iterator.hasNext();)
+        {
+            String key = (String) iterator.next();
+            String value = (String) variable2valueMap.get(key);
+            Element prop = doc.createElement("property"); //$NON-NLS-1$
+            prop.setAttribute(IAntCoreConstants.NAME, key);
+            prop.setAttribute(IAntCoreConstants.VALUE, value);
+            if (first)
+            {
+                first = false;               
+            }
+            else
+            {
+                node = node.getNextSibling();
+            }
+            node = root.insertBefore(prop, node);
+        }
+        
+        // <property environment="env"/>
+        Element env = doc.createElement("property"); //$NON-NLS-1$
+        env.setAttribute("environment", "env"); //$NON-NLS-1$ //$NON-NLS-2$
+        root.insertBefore(env, root.getFirstChild());
+    }
+
+    /**
+     * Create project tag.
+     */
+    public void createRoot()
+    {   
+        // <project name="hello" default="build" basedir=".">
+        root = doc.createElement("project"); //$NON-NLS-1$
+        root.setAttribute(IAntCoreConstants.NAME , projectName);
+        root.setAttribute(IAntCoreConstants.DEFAULT , "build"); //$NON-NLS-1$
+        root.setAttribute("basedir" , "."); //$NON-NLS-1$ //$NON-NLS-2$
+        doc.appendChild(root);
+        
+        // <!-- warning -->
+        Comment comment = doc.createComment(WARNING + ExportUtil.NEWLINE + NOTE);
+        doc.insertBefore(comment, root);
+    }
+    
+    /**
+     * Find buildfiles in projectroot directory and automatically import them.
+     */
+    public void createImports()
+    {
+        // <import file="javadoc.xml"/>
+        File dir = new File(projectRoot);
+        FilenameFilter filter = new FilenameFilter()
+        {
+            public boolean accept(File acceptDir, String name)
+            {
+                return name.endsWith(".xml"); //$NON-NLS-1$
+            }
+        };
+
+        File[] files = dir.listFiles(filter);
+        if (files == null)
+        {
+            return;
+        }
+        for (int i = 0; i < files.length; i++)
+        {
+            // import file if it is an XML document with marker comment as first
+            // child
+            File file = files[i];
+            Document docCandidate;
+            try {
+                docCandidate = ExportUtil.parseXmlFile(file);
+                NodeList nodes = docCandidate.getChildNodes();
+                for (int j = 0; j < nodes.getLength(); j++) {
+                    Node node = nodes.item(j);
+                    if (node instanceof ProcessingInstruction &&  
+                            IMPORT_BUILDFILE_PROCESSING_TARGET.equals(((ProcessingInstruction) node).getTarget().trim())) {
+                        Element element = doc.createElement("import"); //$NON-NLS-1$
+                        element.setAttribute(IAntCoreConstants.FILE, file.getName());
+                        root.appendChild(element);
+                        break;
+                    }
+                }
+            } catch (ParserConfigurationException e){
+                AntUIPlugin.log("invalid XML file not imported: " + file.getAbsolutePath(), e); //$NON-NLS-1$
+            } catch (SAXException e) {
+                AntUIPlugin.log("invalid XML file not imported: " + file.getAbsolutePath(), e); //$NON-NLS-1$
+            } catch (IOException e) {
+                AntUIPlugin.log("invalid XML file not imported: " + file.getAbsolutePath(), e); //$NON-NLS-1$
+            }
+        }
+    }
+
+    /**
+     * Create classpath tags.
+     */
+    public void createClasspaths(EclipseClasspath classpath) throws JavaModelException
+    {
+        createClasspaths(null, project, classpath);
+    }
+    
+    /**
+     * Create classpath tags. Allows to specify ID.
+     * @param pathId    specify id, if null project name is used
+     */
+    public void createClasspaths(String pathId, IJavaProject currentProject, EclipseClasspath classpath)
+        throws JavaModelException
+    {
+        if (currentProject == null)
+        {
+            AntUIPlugin.log("project is not loaded in workspace: " + pathId, null); //$NON-NLS-1$ 
+            return;
+        }
+        // <path id="hello.classpath">
+        //     <pathelement location="${hello.location}/classes"/>
+        //     <pathelement location="${hello.location}/x.jar"/>
+        //     <path refid="${goodbye.classpath}"/>
+        // </path>
+        Element element = doc.createElement("path"); //$NON-NLS-1$
+        String pathid = pathId;
+        if (pathid == null)
+        {
+            pathid = currentProject.getProject().getName() + ".classpath"; //$NON-NLS-1$
+        }
+        element.setAttribute("id", pathid); //$NON-NLS-1$
+        visited.add(pathid);
+        variable2valueMap.putAll(classpath.variable2valueMap);
+        for (Iterator iter = ExportUtil.removeDuplicates(classpath.rawClassPathEntries).iterator(); iter.hasNext();)
+        {
+            String entry = (String) iter.next(); 
+            if (EclipseClasspath.isProjectReference(entry))
+            {
+                Element pathElement = doc.createElement("path"); //$NON-NLS-1$
+                IJavaProject referencedProject = EclipseClasspath.resolveProjectReference(entry); 
+                if (referencedProject == null)
+                {
+                    AntUIPlugin.log("project is not loaded in workspace: " + pathid, null); //$NON-NLS-1$
+                    continue;
+                }
+                String refPathId = referencedProject.getProject().getName() + ".classpath"; //$NON-NLS-1$
+                pathElement.setAttribute("refid", refPathId); //$NON-NLS-1$
+                element.appendChild(pathElement);               
+                if (visited.add(refPathId))
+                {
+                    createClasspaths(null, referencedProject, new EclipseClasspath(referencedProject)); // recursion
+                }
+            }
+            else if (EclipseClasspath.isUserLibraryReference(entry) ||
+                     EclipseClasspath.isLibraryReference(entry))
+            {
+                addUserLibrary(element, entry);
+            }
+            else if (EclipseClasspath.isUserSystemLibraryReference(entry))
+            {
+                if (pathid.endsWith(".bootclasspath")) { //$NON-NLS-1$
+                    addUserLibrary(element, entry);
+                }
+            }            
+            else if (EclipseClasspath.isJreReference(entry))
+            {
+                if (pathid.endsWith(".bootclasspath")) { //$NON-NLS-1$
+                    addJre(element);
+                }
+            }
+            else
+            {
+                // prefix with ${project.location}
+                String prefix = IAntCoreConstants.EMPTY_STRING;
+                if (!entry.startsWith("${") &&                                  // no variable ${var}/classes //$NON-NLS-1$
+                    !projectName.equals(currentProject.getProject().getName())) // not main project 
+                {
+                    String currentProjectRoot= ExportUtil.getProjectRoot(currentProject);
+                    entry= ExportUtil.getRelativePath(entry, currentProjectRoot);
+                    if (!new Path(entry).isAbsolute()) {
+                        prefix = "${" + currentProject.getProject().getName() + ".location}/"; //$NON-NLS-1$ //$NON-NLS-2$
+                    }
+                }
+                Element pathElement = doc.createElement("pathelement"); //$NON-NLS-1$
+                String path = ExportUtil.getRelativePath(prefix + entry, projectRoot);
+                pathElement.setAttribute(IAntModelConstants.ATTR_LOCATION, path);
+                element.appendChild(pathElement);
+            }
+        }
+        addToClasspathBlock(element);
+    }
+
+    private void addUserLibrary(Element element, String entry)
+    {
+        // add classpath reference
+        Element pathElement = doc.createElement("path"); //$NON-NLS-1$
+        IClasspathContainer container = EclipseClasspath.resolveUserLibraryReference(entry); 
+        String name = ExportUtil.removePrefixAndSuffix(entry, "${", "}"); //$NON-NLS-1$ //$NON-NLS-2$
+        pathElement.setAttribute("refid", name); //$NON-NLS-1$
+        element.appendChild(pathElement);
+
+        // add classpath
+        if (visited.add(entry))
+        {
+            Element userElement = doc.createElement("path"); //$NON-NLS-1$
+            userElement.setAttribute("id", name); //$NON-NLS-1$
+            IClasspathEntry entries[] = container.getClasspathEntries();
+            for (int i = 0; i < entries.length; i++)
+            {   
+                String jarFile = entries[i].getPath().toString();
+                // use ECLIPSE_HOME variable for library jars
+                if (EclipseClasspath.isLibraryReference(entry))
+                {
+                    IPath home = JavaCore.getClasspathVariable("ECLIPSE_HOME"); //$NON-NLS-1$
+                    if (home != null && home.isPrefixOf(entries[i].getPath()))
+                    {
+                        variable2valueMap.put("ECLIPSE_HOME", home.toString()); //$NON-NLS-1$
+                        jarFile = "${ECLIPSE_HOME}" + jarFile.substring(home.toString().length()); //$NON-NLS-1$ 
+                    }
+                    else if (! new File(jarFile).exists() &&
+                            jarFile.startsWith('/' + projectName) &&
+                            new File(projectRoot, jarFile.substring(('/' + projectName).length())).exists())
+                    {
+                        // workaround that additional jars are stored with
+                        // leading project root in container object, although
+                        // they are relative and indeed correctly stored in
+                        // build.properties (jars.extra.classpath)
+                        jarFile = jarFile.substring(('/' + projectName).length() + 1);
+                    }
+                }
+                jarFile = ExportUtil.getRelativePath(jarFile, projectRoot);
+                Element userPathElement = doc.createElement("pathelement"); //$NON-NLS-1$
+                userPathElement.setAttribute(IAntModelConstants.ATTR_LOCATION, jarFile);
+                userElement.appendChild(userPathElement);
+            }
+            addToClasspathBlock(userElement);
+        }
+    }
+    
+    /**
+     * Add JRE to given classpath.
+     * @param element   classpath tag
+     */
+    private void addJre(Element element)
+    {
+        // <fileset dir="${java.home}/lib" includes="*.jar"/>
+        // <fileset dir="${java.home}/lib/ext" includes="*.jar"/>
+        Element pathElement = doc.createElement("fileset"); //$NON-NLS-1$
+        pathElement.setAttribute(IAntCoreConstants.DIR, "${java.home}/lib"); //$NON-NLS-1$
+        pathElement.setAttribute("includes", "*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
+        element.appendChild(pathElement);
+        pathElement = doc.createElement("fileset"); //$NON-NLS-1$
+        pathElement.setAttribute(IAntCoreConstants.DIR, "${java.home}/lib/ext"); //$NON-NLS-1$
+        pathElement.setAttribute("includes", "*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
+        element.appendChild(pathElement);
+    }
+
+    private void addToClasspathBlock(Element element)
+    {
+        // remember node to insert all classpaths at same location
+        if (classpathNode == null)
+        {
+            classpathNode = root.appendChild(element);
+        }
+        else
+        {
+            classpathNode = classpathNode.getNextSibling();
+            classpathNode = root.insertBefore(element, classpathNode);
+        }
+    }
+    
+    /**
+     * Add properties of subprojects to internal properties map.
+     */
+    public void addSubProperties(IJavaProject subproject, EclipseClasspath classpath) throws JavaModelException
+    { 
+        for (Iterator iterator = ExportUtil.getClasspathProjectsRecursive(subproject).iterator(); iterator.hasNext();)
+        {
+            IJavaProject subProject = (IJavaProject) iterator.next(); 
+            String location = subProject.getProject().getName() + ".location"; //$NON-NLS-1$
+            // add subproject properties to variable2valueMap
+            String subProjectRoot = ExportUtil.getProjectRoot(subProject);
+            String relativePath = ExportUtil.getRelativePath(subProjectRoot,
+                    projectRoot);
+            variable2valueMap.put(location, relativePath);
+            variable2valueMap.putAll(classpath.variable2valueMap);    
+        }
+    }
+
+    /**
+     * Create init target. Creates directories and copies resources.
+     * @param srcDirs            source directories to copy resources from
+     * @param classDirs          classes directories to copy resources to
+     */
+    public void createInit(List srcDirs, List classDirs,
+        List inclusionLists, List exclusionLists)
+    {
+        // <target name="init">
+        //     <mkdir dir="classes"/>
+        // </target>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "init"); //$NON-NLS-1$
+        List classDirsUnique = ExportUtil.removeDuplicates(classDirs);        
+        for (Iterator iterator = classDirsUnique.iterator(); iterator.hasNext();)
+        {            
+            String classDir = (String) iterator.next();
+            if (!classDir.equals(".") && //$NON-NLS-1$
+                !EclipseClasspath.isReference(classDir))
+            {
+                Element pathElement = doc.createElement("mkdir"); //$NON-NLS-1$
+                pathElement.setAttribute(IAntCoreConstants.DIR, classDir);
+                element.appendChild(pathElement);
+            }
+        }
+        root.appendChild(element);
+        
+        createCopyResources(srcDirs, classDirs, element, inclusionLists,
+            exclusionLists);
+    }
+
+    private void createCopyResources(List srcDirs, List classDirs, Element element,
+        List inclusionLists, List exclusionLists)
+    {
+        // Check filter for copying resources
+        String filter = project.getOption(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, true);
+        StringTokenizer tokenizer = new StringTokenizer(filter, ","); //$NON-NLS-1$
+        List filters = Collections.list(tokenizer);
+        filters.add("*.java"); //$NON-NLS-1$
+        
+        // prefix filters with wildcard
+        for (int i = 0; i < filters.size(); i++)
+        {
+            String item = ((String) filters.get(i)).trim();
+            if (item.equals("*")) //$NON-NLS-1$
+            {
+                // everything is excluded from copying
+                return;
+            }            
+            filters.set(i, "**/" + item); //$NON-NLS-1$
+        }
+        
+        // <copy todir="classes" includeemptydirs="false">
+        //     <fileset dir="src" excludes="**/*.java"/>
+        // </copy>
+        for (int i = 0; i < srcDirs.size(); i++)
+        {
+            String srcDir = (String) srcDirs.get(i);
+            String classDir = (String) classDirs.get(i);
+            if (! EclipseClasspath.isReference(classDir))
+            {
+                Element copyElement = doc.createElement("copy"); //$NON-NLS-1$
+                copyElement.setAttribute("todir", classDir); //$NON-NLS-1$
+                copyElement.setAttribute("includeemptydirs", "false"); //$NON-NLS-1$ //$NON-NLS-2$
+                Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
+                filesetElement.setAttribute(IAntCoreConstants.DIR, srcDir);
+
+                List inclusions = (List) inclusionLists.get(i);
+                List exclusions = (List) exclusionLists.get(i);
+
+                for (Iterator iter = inclusions.iterator(); iter.hasNext();)
+                {
+                    String inclusion = (String) iter.next();
+                    Element includeElement = doc.createElement("include"); //$NON-NLS-1$
+                    includeElement.setAttribute(IAntCoreConstants.NAME, inclusion);
+                    filesetElement.appendChild(includeElement);
+                }           
+                for (Iterator iter = filters.iterator(); iter.hasNext();)
+                {
+                    String exclusion = (String) iter.next();
+                    Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
+                    excludeElement.setAttribute(IAntCoreConstants.NAME, exclusion);
+                    filesetElement.appendChild(excludeElement);
+                }
+                for (Iterator iter = exclusions.iterator(); iter.hasNext();)
+                {
+                    String exclusion = (String) iter.next();
+                    Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
+                    excludeElement.setAttribute(IAntCoreConstants.NAME, exclusion);
+                    filesetElement.appendChild(excludeElement);
+                }
+                
+                copyElement.appendChild(filesetElement);
+                element.appendChild(copyElement);
+            }
+        }
+    }
+
+    /**
+     * Create clean target.
+     * @param classDirs    classes directories to delete
+     */
+    public void createClean(List classDirs)
+    {
+        // <target name="clean">
+        //     <delete dir="classes"/>
+        // </target>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "clean"); //$NON-NLS-1$
+        List classDirUnique = ExportUtil.removeDuplicates(classDirs);
+        for (Iterator iterator = classDirUnique.iterator(); iterator.hasNext();)
+        {
+            String classDir = (String) iterator.next();
+            if (!classDir.equals(".") && //$NON-NLS-1$
+                !EclipseClasspath.isReference(classDir))
+            {
+                Element deleteElement = doc.createElement("delete"); //$NON-NLS-1$
+                deleteElement.setAttribute(IAntCoreConstants.DIR, classDir);
+                element.appendChild(deleteElement);
+            }
+        }
+        root.appendChild(element);    
+
+        // <target name="clean">
+        //     <delete>
+        //         <fileset dir="." includes="**/*.class"/>
+        //     </delete>
+        // </target>
+        if (classDirs.contains(".")) //$NON-NLS-1$
+        {
+            Element deleteElement = doc.createElement("delete"); //$NON-NLS-1$
+            Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
+            filesetElement.setAttribute(IAntCoreConstants.DIR, "."); //$NON-NLS-1$
+            filesetElement.setAttribute("includes", "**/*.class"); //$NON-NLS-1$ //$NON-NLS-2$
+            deleteElement.appendChild(filesetElement);           
+            element.appendChild(deleteElement);           
+        }
+    }
+    
+    /**
+     * Create cleanall target.
+     */
+    public void createCleanAll() throws JavaModelException
+    {
+        // <target name="cleanall" depends="clean">
+        //     <ant antfile="build.xml" dir="${hello.location}" inheritAll="false" target="clean"/>
+        // </target>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "cleanall"); //$NON-NLS-1$
+        element.setAttribute("depends", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
+        List subProjects = ExportUtil.getClasspathProjectsRecursive(project);
+        for (Iterator iterator = subProjects.iterator(); iterator.hasNext();)
+        {
+            IJavaProject subProject = (IJavaProject) iterator.next();
+            Element antElement = doc.createElement("ant"); //$NON-NLS-1$
+            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
+            antElement.setAttribute(IAntCoreConstants.DIR, "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("target", "clean");  //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
+            element.appendChild(antElement);
+        }
+        root.appendChild(element);
+    }
+
+    /**
+     * Create build target.
+     * @param srcDirs           source directories of mainproject
+     * @param classDirs         class directories of mainproject
+     * @param inclusionLists    inclusion filters of mainproject 
+     * @param exclusionLists    exclusion filters of mainproject
+     */
+    public void createBuild(List srcDirs, List classDirs, List inclusionLists, List exclusionLists) throws JavaModelException
+    {
+        // <target name="build" depends="build-subprojects,build-project"/>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "build"); //$NON-NLS-1$
+        element.setAttribute("depends", "build-subprojects,build-project"); //$NON-NLS-1$ //$NON-NLS-2$
+        root.appendChild(element);
+        
+        // <target name="build-subprojects">
+        //     <ant antfile="build.xml" dir="${hello.location}" inheritAll="false" target="build-project"/>
+        // </target>
+        element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "build-subprojects"); //$NON-NLS-1$
+        List subProjects = ExportUtil.getClasspathProjectsRecursive(project);
+        for (Iterator iterator = subProjects.iterator(); iterator.hasNext();)
+        {
+            IJavaProject subProject = (IJavaProject) iterator.next();
+            Element antElement = doc.createElement("ant"); //$NON-NLS-1$
+            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
+            antElement.setAttribute(IAntCoreConstants.DIR, "${" + subProject.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("target", "build-project");  //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
+            if (CREATE_ECLIPSE_COMPILE_TARGET) {
+                Element propertysetElement = doc.createElement("propertyset"); //$NON-NLS-1$
+                Element propertyrefElement = doc.createElement("propertyref"); //$NON-NLS-1$
+                propertyrefElement.setAttribute(IAntCoreConstants.NAME, "build.compiler");  //$NON-NLS-1$
+                propertysetElement.appendChild(propertyrefElement);
+                antElement.appendChild(propertysetElement);
+            }
+            element.appendChild(antElement);           
+        }
+        root.appendChild(element);
+        
+        // <target name="build-project" depends="init">
+        //     <echo message="${ant.project.name}: ${ant.file}"/>
+        //     <javac destdir="classes">
+        //         <src path="src"/>
+        //         <include name=""/>
+        //         <exclude name=""/>
+        //         <classpath refid="project.classpath"/>
+        //     </javac>    
+        // </target>        
+        element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "build-project"); //$NON-NLS-1$
+        element.setAttribute("depends", "init"); //$NON-NLS-1$ //$NON-NLS-2$
+        Element echoElement = doc.createElement("echo"); //$NON-NLS-1$
+        echoElement.setAttribute("message", "${ant.project.name}: ${ant.file}"); //$NON-NLS-1$ //$NON-NLS-2$
+        element.appendChild(echoElement);           
+        for (int i = 0; i < srcDirs.size(); i++)
+        {
+            String srcDir = (String) srcDirs.get(i);
+            if (!EclipseClasspath.isReference(srcDir))
+            {
+                String classDir = (String) classDirs.get(i);
+                List inclusions = (List) inclusionLists.get(i);
+                List exclusions = (List) exclusionLists.get(i);
+                Element javacElement = doc.createElement("javac"); //$NON-NLS-1$
+                javacElement.setAttribute("destdir", classDir); //$NON-NLS-1$
+                javacElement.setAttribute("debug", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+                javacElement.setAttribute("debuglevel", "${debuglevel}"); //$NON-NLS-1$ //$NON-NLS-2$
+                javacElement.setAttribute("source", "${source}"); //$NON-NLS-1$ //$NON-NLS-2$
+                javacElement.setAttribute("target", "${target}"); //$NON-NLS-1$ //$NON-NLS-2$
+    
+                Element srcElement = doc.createElement("src"); //$NON-NLS-1$
+                srcElement.setAttribute("path", srcDir); //$NON-NLS-1$
+                javacElement.appendChild(srcElement);            
+    
+                for (Iterator iter = inclusions.iterator(); iter.hasNext();)
+                {
+                    String inclusion = (String) iter.next();
+                    Element includeElement = doc.createElement("include"); //$NON-NLS-1$
+                    includeElement.setAttribute(IAntCoreConstants.NAME, inclusion);
+                    javacElement.appendChild(includeElement);
+                }           
+                for (Iterator iter = exclusions.iterator(); iter.hasNext();)
+                {
+                    String exclusion = (String) iter.next();
+                    Element excludeElement = doc.createElement("exclude"); //$NON-NLS-1$
+                    excludeElement.setAttribute(IAntCoreConstants.NAME, exclusion);
+                    javacElement.appendChild(excludeElement);
+                }           
+                Element classpathRefElement = doc.createElement("classpath"); //$NON-NLS-1$
+                classpathRefElement.setAttribute("refid", projectName + ".classpath"); //$NON-NLS-1$ //$NON-NLS-2$
+                javacElement.appendChild(classpathRefElement);
+                element.appendChild(javacElement);
+                
+                addCompilerBootClasspath(srcDirs, javacElement);
+            }
+        }
+        root.appendChild(element);
+    }
+    
+    /**
+     * Create target build-refprojects which compiles projects which reference
+     * current project.
+     */
+    private void createBuildRef() throws JavaModelException {
+        
+        Set refProjects = new TreeSet(ExportUtil.getJavaProjectComparator());
+        IJavaProject[] projects = project.getJavaModel().getJavaProjects();
+        for (int i = 0; i < projects.length; i++) {
+            List subProjects = ExportUtil.getClasspathProjects(projects[i]);
+            for (Iterator iter = subProjects.iterator(); iter.hasNext();) {
+                IJavaProject p = (IJavaProject) iter.next();
+                if (projectName.equals(p.getProject().getName())) {
+                    refProjects.add(projects[i]);
+                }
+            }
+        }
+        
+        // <target name="build-refprojects">
+        //     <ant antfile="build.xml" dir="${hello.location}" target="clean" inheritAll="false"/> 
+        //     <ant antfile="build.xml" dir="${hello.location}" target="build" inheritAll="false"/> 
+        // </target>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "build-refprojects"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.DESCRIPTION, "Build all projects which " + //$NON-NLS-1$ 
+                "reference this project. Useful to propagate changes."); //$NON-NLS-1$
+        for (Iterator iter = refProjects.iterator(); iter.hasNext();) {
+            IJavaProject p = (IJavaProject) iter.next();
+            String location = p.getProject().getName() + ".location"; //$NON-NLS-1$
+            String refProjectRoot = ExportUtil.getProjectRoot(p);
+            String relativePath = ExportUtil.getRelativePath(refProjectRoot,
+                    projectRoot);
+            variable2valueMap.put(location, relativePath);
+
+            Element antElement = doc.createElement("ant"); //$NON-NLS-1$
+            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
+            antElement.setAttribute(IAntCoreConstants.DIR, "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("target", "clean"); //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("inheritAll", "false"); //$NON-NLS-1$ //$NON-NLS-2$
+            element.appendChild(antElement);
+            
+            antElement = doc.createElement("ant"); //$NON-NLS-1$
+            antElement.setAttribute("antfile", BUILD_XML); //$NON-NLS-1$
+            antElement.setAttribute(IAntCoreConstants.DIR, "${" + p.getProject().getName() + ".location}"); //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("target", "build"); //$NON-NLS-1$ //$NON-NLS-2$
+            antElement.setAttribute("inheritAll", "false");  //$NON-NLS-1$ //$NON-NLS-2$
+            if (CREATE_ECLIPSE_COMPILE_TARGET) {
+                Element propertysetElement = doc.createElement("propertyset"); //$NON-NLS-1$
+                Element propertyrefElement = doc.createElement("propertyref"); //$NON-NLS-1$
+                propertyrefElement.setAttribute(IAntCoreConstants.NAME, "build.compiler");  //$NON-NLS-1$
+                propertysetElement.appendChild(propertyrefElement);
+                antElement.appendChild(propertysetElement);
+            }
+            element.appendChild(antElement);
+        }
+        root.appendChild(element);
+    }
+    
+    /**
+     * Add target to initialize Eclipse compiler. It copies required jars to ant
+     * lib directory.
+     */
+    public void addInitEclipseCompiler()
+    {
+        // use ECLIPSE_HOME classpath variable
+        IPath value = JavaCore.getClasspathVariable("ECLIPSE_HOME"); //$NON-NLS-1$
+        if (value != null) {
+            variable2valueMap.put("ECLIPSE_HOME", ExportUtil.getRelativePath( //$NON-NLS-1$
+                value.toString(), projectRoot));
+        }
+        // <target name="init-eclipse-compiler" description="copy Eclipse compiler jars to ant lib directory">
+        //     <property name="ECLIPSE_HOME" value="C:/Programme/eclipse-3.1" />
+        //     <copy todir="${ant.library.dir}">
+        //         <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar" />
+        //     </copy>
+        //     <unzip dest="${ant.library.dir}">
+        //         <patternset includes="jdtCompilerAdapter.jar" />
+        //         <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar" />
+        //     </unzip>
+        // </target>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "init-eclipse-compiler"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.DESCRIPTION, "copy Eclipse compiler jars to ant lib directory"); //$NON-NLS-1$ 
+        Element copyElement = doc.createElement("copy"); //$NON-NLS-1$
+        copyElement.setAttribute("todir", "${ant.library.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+        Element filesetElement = doc.createElement("fileset"); //$NON-NLS-1$
+        filesetElement.setAttribute(IAntCoreConstants.DIR, "${ECLIPSE_HOME}/plugins"); //$NON-NLS-1$
+        filesetElement.setAttribute("includes", "org.eclipse.jdt.core_*.jar"); //$NON-NLS-1$ //$NON-NLS-2$
+        copyElement.appendChild(filesetElement);
+        element.appendChild(copyElement);
+        Element unzipElement = doc.createElement("unzip"); //$NON-NLS-1$
+        unzipElement.setAttribute("dest", "${ant.library.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+        Element patternsetElement = doc.createElement("patternset"); //$NON-NLS-1$
+        patternsetElement.setAttribute("includes", "jdtCompilerAdapter.jar"); //$NON-NLS-1$ //$NON-NLS-2$
+        unzipElement.appendChild(patternsetElement);
+        unzipElement.appendChild(filesetElement.cloneNode(false));
+        element.appendChild(unzipElement);
+        root.appendChild(element);
+    }
+
+    /**
+     * Add target to compile project using Eclipse compiler.
+     */
+    public void addBuildEclipse()
+    {
+        // <target name="build-eclipse-compiler" description="compile project with Eclipse compiler">
+        //     <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
+        //     <antcall target="build" />
+        // </target>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "build-eclipse-compiler"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.DESCRIPTION, "compile project with Eclipse compiler"); //$NON-NLS-1$ 
+        Element propertyElement = doc.createElement("property"); //$NON-NLS-1$
+        propertyElement.setAttribute(IAntCoreConstants.NAME, "build.compiler"); //$NON-NLS-1$
+        propertyElement.setAttribute(IAntCoreConstants.VALUE, "org.eclipse.jdt.core.JDTCompilerAdapter"); //$NON-NLS-1$
+        element.appendChild(propertyElement);
+        Element antcallElement = doc.createElement("antcall"); //$NON-NLS-1$
+        antcallElement.setAttribute("target", "build"); //$NON-NLS-1$ //$NON-NLS-2$
+        element.appendChild(antcallElement);
+        root.appendChild(element);
+    }
+
+    /**
+     * Add all bootclasspaths in srcDirs to given javacElement.
+     */
+    private void addCompilerBootClasspath(List srcDirs, Element javacElement)
+    {
+        // <bootclasspath>
+        //     <path refid="mylib.bootclasspath"/>
+        //     <fileset dir="${java.home}/lib" includes="*.jar"/>
+        //     <fileset dir="${java.home}/lib/ext" includes="*.jar"/>
+        // </bootclasspath>
+        Element bootclasspathElement = doc.createElement("bootclasspath"); //$NON-NLS-1$
+        boolean bootclasspathUsed = false;
+        for (Iterator iter = srcDirs.iterator(); iter.hasNext();)
+        {
+            String entry = (String) iter.next();
+            if (EclipseClasspath.isUserSystemLibraryReference(entry))
+            {
+                Element pathElement = doc.createElement("path"); //$NON-NLS-1$                        
+                pathElement.setAttribute("refid", ExportUtil.removePrefixAndSuffix(entry, "${", "}")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                bootclasspathElement.appendChild(pathElement);
+                bootclasspathUsed = true;
+            } else if (EclipseClasspath.isJreReference(entry)) {
+                addJre(bootclasspathElement);
+            }
+        }
+        if (bootclasspathUsed)
+        {
+            javacElement.appendChild(bootclasspathElement);
+        }
+    }
+
+    /**
+     * Add run targets.
+     * @throws CoreException thrown if problem accessing the launch configuration
+     * @throws TransformerFactoryConfigurationError thrown if applet file could not get created
+     * @throws UnsupportedEncodingException thrown if applet file could not get created
+     */
+    public void createRun() throws CoreException, TransformerFactoryConfigurationError, UnsupportedEncodingException
+    {
+        // <target name="run">
+        //     <java fork="yes" classname="class" failonerror="true" dir="." newenvironment="true">
+        //         <env key="a" value="b"/>
+        //         <jvmarg value="-Dx=y"/>
+        //         <arg value="arg"/>
+        //         <classpath refid="project.classpath"/>
+        //     </java>
+        // </target>
+        ILaunchConfiguration[] confs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations();
+        boolean junitUsed = false;
+        for (int i = 0; i < confs.length; i++)
+        {
+            ILaunchConfiguration conf = confs[i];
+            if (!projectName.equals(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, IAntCoreConstants.EMPTY_STRING)))
+            {
+                continue;
+            }
+                    
+            if (conf.getType().getIdentifier().equals(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION))
+            {
+                addJavaApplication(variable2valueMap, conf);
+            }
+            else if (conf.getType().getIdentifier().equals(IJavaLaunchConfigurationConstants.ID_JAVA_APPLET))
+            {
+                addApplet(variable2valueMap, conf);
+            }
+            else if (conf.getType().getIdentifier().equals("org.eclipse.jdt.junit.launchconfig" /*JUnitLaunchConfiguration.ID_JUNIT_APPLICATION*/)) //$NON-NLS-1$
+            {                    
+                addJUnit(variable2valueMap, conf);
+                junitUsed = true;
+            }           
+        }
+        
+        if (junitUsed)
+        {
+            addJUnitReport();
+        }
+    }
+
+    /**
+     * Convert Java application launch configuration to ant target and add it to a document.
+     * @param variable2value    adds Eclipse variables to this map,
+     *                             if run configuration makes use of this feature
+     * @param conf                 Java application launch configuration
+     */
+    public void addJavaApplication(Map variable2value, ILaunchConfiguration conf) throws CoreException
+    {
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, conf.getName());
+        Element javaElement = doc.createElement("java"); //$NON-NLS-1$
+        javaElement.setAttribute("fork", "yes"); //$NON-NLS-1$ //$NON-NLS-2$
+        javaElement.setAttribute("classname", conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, IAntCoreConstants.EMPTY_STRING)); //$NON-NLS-1$
+        javaElement.setAttribute("failonerror", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, IAntCoreConstants.EMPTY_STRING);
+        ExportUtil.addVariable(variable2value, dir, projectRoot);                
+        if (!dir.equals(IAntCoreConstants.EMPTY_STRING))
+        {
+            javaElement.setAttribute(IAntCoreConstants.DIR, ExportUtil.getRelativePath(dir, projectRoot));
+        }
+        if (!conf.getAttribute(ILaunchManager.ATTR_APPEND_ENVIRONMENT_VARIABLES, true))
+        {
+            javaElement.setAttribute("newenvironment", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        Map props = conf.getAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, new TreeMap());
+        addElements(props, doc, javaElement, "env", "key", IAntCoreConstants.VALUE); //$NON-NLS-1$ //$NON-NLS-2$
+        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$
+        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "arg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$
+        element.appendChild(javaElement);
+        
+        addRuntimeClasspath(conf, javaElement);
+        addRuntimeBootClasspath(conf, javaElement);
+        root.appendChild(element);
+    }
+
+    /**
+     * Convert applet launch configuration to Ant target and add it to a document. 
+     * @param variable2value    adds Eclipse variables to this map,
+     *                             if run configuration makes use of this feature
+     * @param conf                 applet configuration
+     * @throws CoreException thrown if problem dealing with launch configuration or underlying resources 
+     * @throws TransformerFactoryConfigurationError thrown if applet file could not get created 
+     * @throws UnsupportedEncodingException thrown if applet file could not get created
+     */
+    public void addApplet(Map variable2value, ILaunchConfiguration conf) throws CoreException, TransformerFactoryConfigurationError, UnsupportedEncodingException
+    {
+        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, IAntCoreConstants.EMPTY_STRING);
+        if (dir.equals(IAntCoreConstants.EMPTY_STRING))
+        {
+            dir = projectRoot;
+        }
+        ExportUtil.addVariable(variable2value, dir, projectRoot);
+        String value;
+        try
+        {
+            value = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(dir);    
+        }
+        catch (CoreException e)
+        {
+            // cannot resolve variable
+            value = null;
+        }
+
+        String htmlfile = ((value != null) ? value : dir) + '/' + conf.getName() + ".html"; //$NON-NLS-1$
+        // confirm overwrite
+        if (ExportUtil.existsUserFile(htmlfile) && !MessageDialog.openConfirm(shell, DataTransferMessages.AntBuildfileExportPage_4, DataTransferMessages.AntBuildfileExportPage_4 + ": " + htmlfile)) //$NON-NLS-1$
+        {
+            return;
+        }
+        IJavaProject javaProject = ExportUtil.getJavaProjectByName(projectName);
+        IFile file = javaProject.getProject().getFile(conf.getName() + ".html"); //$NON-NLS-1$
+        if (ExportUtil.validateEdit(shell, file)) // checkout file if required
+        {
+            // write build file
+            String html = AppletUtil.buildHTMLFile(conf);
+            InputStream is = new ByteArrayInputStream(html.getBytes("UTF-8")); //$NON-NLS-1$
+            if (file.exists())
+            {
+                file.setContents(is, true, true, null);
+            }
+            else
+            {
+                file.create(is, true, null);
+            }
+        }
+        
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, conf.getName());
+        Element javaElement = doc.createElement("java"); //$NON-NLS-1$
+        javaElement.setAttribute("fork", "yes");  //$NON-NLS-1$//$NON-NLS-2$
+        javaElement.setAttribute("classname", conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_APPLET_APPLETVIEWER_CLASS, "sun.applet.AppletViewer")); //$NON-NLS-1$ //$NON-NLS-2$
+        javaElement.setAttribute("failonerror", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (value != null)
+        {
+            javaElement.setAttribute(IAntCoreConstants.DIR, ExportUtil.getRelativePath(dir, projectRoot));
+        }
+        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "jvmarg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$
+        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, javaElement, "arg", "line", variable2value, projectRoot);   //$NON-NLS-1$//$NON-NLS-2$
+        addElement(conf.getName() + ".html", doc, javaElement, "arg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        element.appendChild(javaElement);
+        addRuntimeClasspath(conf, javaElement);
+        addRuntimeBootClasspath(conf, javaElement);
+        root.appendChild(element);
+    }
+    
+    /**
+     * Convert JUnit launch configuration to JUnit task and add it to a document. 
+     * @param variable2value    adds Eclipse variables to this map,
+     *                             if run configuration makes use of this feature
+     * @param conf                 applet configuration
+     */
+    public void addJUnit(Map variable2value, ILaunchConfiguration conf) throws CoreException
+    {
+        // <target name="runtest">
+        //     <mkdir dir="junit"/>
+        //     <junit fork="yes" printsummary="withOutAndErr">
+        //         <formatter type="xml"/>
+        //         <test name="testclass"/>
+        //         <env key="a" value="b"/>
+        //         <jvmarg value="-Dx=y"/>
+        //         <classpath refid="project.classpath"/>
+        //     </junit>
+        // </target>
+        String testClass = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, IAntCoreConstants.EMPTY_STRING);
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, conf.getName());
+        
+        Element mkdirElement = doc.createElement("mkdir"); //$NON-NLS-1$
+        mkdirElement.setAttribute(IAntCoreConstants.DIR, "${junit.output.dir}"); //$NON-NLS-1$
+        element.appendChild(mkdirElement);
+        
+        Element junitElement = doc.createElement("junit"); //$NON-NLS-1$
+        junitElement.setAttribute("fork", "yes"); //$NON-NLS-1$ //$NON-NLS-2$
+        junitElement.setAttribute("printsummary", "withOutAndErr"); //$NON-NLS-1$ //$NON-NLS-2$
+        String dir = conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, IAntCoreConstants.EMPTY_STRING);
+        ExportUtil.addVariable(variable2value, dir, projectRoot);                
+        if (!dir.equals(IAntCoreConstants.EMPTY_STRING))
+        {
+            junitElement.setAttribute(IAntCoreConstants.DIR, ExportUtil.getRelativePath(dir, projectRoot));
+        }
+        if (!conf.getAttribute(ILaunchManager.ATTR_APPEND_ENVIRONMENT_VARIABLES, true))
+        {
+            junitElement.setAttribute("newenvironment", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        Element formatterElement = doc.createElement("formatter"); //$NON-NLS-1$
+        formatterElement.setAttribute("type", "xml");  //$NON-NLS-1$//$NON-NLS-2$
+        junitElement.appendChild(formatterElement);
+        if (!testClass.equals(IAntCoreConstants.EMPTY_STRING))
+        {
+            // Case 1: Single JUnit class
+            Element testElement = doc.createElement("test"); //$NON-NLS-1$
+            testElement.setAttribute(IAntCoreConstants.NAME, testClass);
+            testElement.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+            junitElement.appendChild(testElement);                       
+        }
+        else
+        {
+            // Case 2: Run all tests in project, package or source folder
+            String container = conf.getAttribute("org.eclipse.jdt.junit.CONTAINER" /*JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR*/, IAntCoreConstants.EMPTY_STRING); //$NON-NLS-1$
+            IType[] types = ExportUtil.findTestsInContainer(container);
+            Set sortedTypes = new TreeSet(ExportUtil.getITypeComparator());
+            sortedTypes.addAll(Arrays.asList(types));
+            for (Iterator iter = sortedTypes.iterator(); iter.hasNext();) {
+                IType type = (IType) iter.next();
+                Element testElement = doc.createElement("test"); //$NON-NLS-1$
+                testElement.setAttribute(IAntCoreConstants.NAME, type.getFullyQualifiedName());
+                testElement.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+                junitElement.appendChild(testElement);                       
+            }
+        }
+        Map props = conf.getAttribute(ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, new TreeMap());
+        addElements(props, doc, junitElement, "env", "key", IAntCoreConstants.VALUE); //$NON-NLS-1$ //$NON-NLS-2$
+        addElement(conf.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING), doc, junitElement, "jvmarg", "line", variable2value, projectRoot); //$NON-NLS-1$ //$NON-NLS-2$
+        element.appendChild(junitElement);
+        addRuntimeClasspath(conf, junitElement);
+        addRuntimeBootClasspath(conf, junitElement);
+        root.appendChild(element);
+    }
+    
+    /**
+     * Add junitreport target. 
+     */
+    public void addJUnitReport()
+    {
+        variable2valueMap.put("junit.output.dir", JUNIT_OUTPUT_DIR); //$NON-NLS-1$
+        
+        // <target name="junitreport">
+        //     <junitreport todir="junit">
+        //         <fileset dir="junit">
+        //             <include name="TEST-*.xml"/>
+        //         </fileset>
+        //         <report format="frames" todir="junit"/>
+        //     </junitreport>
+        // </target>
+        Element element = doc.createElement("target"); //$NON-NLS-1$
+        element.setAttribute(IAntCoreConstants.NAME, "junitreport"); //$NON-NLS-1$
+        Element junitreport = doc.createElement("junitreport"); //$NON-NLS-1$
+        junitreport.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+        Element fileset = doc.createElement("fileset"); //$NON-NLS-1$
+        fileset.setAttribute(IAntCoreConstants.DIR, "${junit.output.dir}"); //$NON-NLS-1$
+        junitreport.appendChild(fileset);
+        Element include = doc.createElement("include"); //$NON-NLS-1$
+        include.setAttribute(IAntCoreConstants.NAME, "TEST-*.xml"); //$NON-NLS-1$
+        fileset.appendChild(include);
+        Element report = doc.createElement("report"); //$NON-NLS-1$
+        report.setAttribute("format", "frames"); //$NON-NLS-1$ //$NON-NLS-2$
+        report.setAttribute("todir", "${junit.output.dir}"); //$NON-NLS-1$ //$NON-NLS-2$
+        junitreport.appendChild(report);
+        element.appendChild(junitreport);
+        root.appendChild(element);
+    }
+
+    /**
+     * Add classpath tag to given javaElement.
+     */
+    private void addRuntimeClasspath(ILaunchConfiguration conf, Element javaElement) throws CoreException
+    {
+        // <classpath refid="hello.classpath"/>
+        Element classpathRefElement = doc.createElement("classpath"); //$NON-NLS-1$
+        EclipseClasspath runtimeClasspath = new EclipseClasspath(project, conf, false);
+        if (ExportUtil.isDefaultClasspath(project, runtimeClasspath))
+        {
+            classpathRefElement.setAttribute("refid", projectName + ".classpath"); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        else
+        {
+            String pathId = "run." + conf.getName() + ".classpath"; //$NON-NLS-1$ //$NON-NLS-2$
+            classpathRefElement.setAttribute("refid", pathId); //$NON-NLS-1$
+            createClasspaths(pathId, project, runtimeClasspath);            
+        }
+        javaElement.appendChild(classpathRefElement);
+    }
+    
+    /**
+     * Add bootclasspath tag to given javaElement.
+     */
+    private void addRuntimeBootClasspath(ILaunchConfiguration conf, Element javaElement) throws CoreException
+    {        
+        // <bootclasspath>
+        //     <path refid="run.hello.bootclasspath"/>
+        // </bootclasspath>
+        EclipseClasspath bootClasspath = new EclipseClasspath(project, conf, true);
+        if (bootClasspath.rawClassPathEntries.size() == 1
+                && EclipseClasspath.isJreReference((String) bootClasspath.rawClassPathEntries.get(0))) {
+            // the default boot classpath contains exactly one element (the JRE)
+            return;
+        }
+        String pathId = "run." + conf.getName() + ".bootclasspath"; //$NON-NLS-1$ //$NON-NLS-2$
+        createClasspaths(pathId, project, bootClasspath);
+        Element bootclasspath = doc.createElement("bootclasspath"); //$NON-NLS-1$
+        Element classpathRefElement = doc.createElement("path"); //$NON-NLS-1$
+        classpathRefElement.setAttribute("refid", pathId); //$NON-NLS-1$
+        bootclasspath.appendChild(classpathRefElement);
+        javaElement.appendChild(bootclasspath);
+    }
+
+    /**
+     * Create child node from <code>cmdLine</code> and add it to <code>element</code> which is part of
+     * <code>doc</code>.
+     * 
+     * @param cmdLineArgs          command line arguments, separated with spaces or within double quotes, may also contain Eclipse variables 
+     * @param doc                  XML document
+     * @param element              node to add child to
+     * @param elementName          name of new child node
+     * @param attributeName        name of attribute for child node
+     * @param variable2valueMap    adds Eclipse variables to this map,
+     *                             if command line makes use of this feature
+     */
+    private static void addElement(String cmdLineArgs, Document doc,
+            Element element, String elementName, String attributeName,
+            Map variable2valueMap, String projectRoot) {
+
+        if (cmdLineArgs == null || cmdLineArgs.length() == 0) {
+            return;
+        }
+        ExportUtil.addVariable(variable2valueMap, cmdLineArgs, projectRoot);
+        Element itemElement = doc.createElement(elementName);
+        itemElement.setAttribute(attributeName, cmdLineArgs);
+        element.appendChild(itemElement);            
+    }
+    
+    /**
+     * Create child nodes from string map and add them to <code>element</code> which is part of
+     * <code>doc</code>.
+     * 
+     * @param map                   key/value string pairs
+     * @param doc                   XML document
+     * @param element               node to add children to
+     * @param elementName           name of new child node
+     * @param keyAttributeName      name of key attribute
+     * @param valueAttributeName    name of value attribute
+     */
+    private static void addElements(Map map, Document doc, Element element, String elementName,
+                                    String keyAttributeName, String valueAttributeName)
+    {
+        for (Iterator iter = map.keySet().iterator(); iter.hasNext();)
+        {
+            String key = (String) iter.next();
+            String value = (String) map.get(key);
+            Element itemElement = doc.createElement(elementName);
+            itemElement.setAttribute(keyAttributeName, key);
+            itemElement.setAttribute(valueAttributeName, value);
+            element.appendChild(itemElement);            
+        }
+    }
+    
+    /**
+     * Set config options.
+     * @param buildfilename name for Ant buildfile
+     * @param junitdir name of JUnit output directory
+     * @param checkcycles check project for Ant compatibility
+     * @param eclipsecompiler generate target for compiling project with Eclipse compiler
+     */
+    public static void setOptions(String buildfilename, String junitdir,
+            boolean checkcycles, boolean eclipsecompiler) {
+
+        if (buildfilename.length() > 0) {
+            BUILD_XML = buildfilename;
+        }
+        if (junitdir.length() > 0) {
+            JUNIT_OUTPUT_DIR = junitdir;
+        }
+        CHECK_SOURCE_CYCLES = checkcycles;
+        CREATE_ECLIPSE_COMPILE_TARGET = eclipsecompiler;
+    }
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java
index 8de43fc..fa05d2a 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/EclipseClasspath.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 Richard Hoefter and others.
+ * Copyright (c) 2004, 2011 Richard Hoefter and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -218,7 +219,7 @@ public class EclipseClasspath
             }
             else
             {
-                String relativePath = ExportUtil.getRelativePath(file.getLocation() + "", //$NON-NLS-1$
+                String relativePath = ExportUtil.getRelativePath(file.getLocation() + IAntCoreConstants.EMPTY_STRING,
                         projectRoot);
                 variable2valueMap.put(srcDir + ".link", relativePath); //$NON-NLS-1$
             }
@@ -307,7 +308,7 @@ public class EclipseClasspath
                 index = e.indexOf('\\');
             }
             String variable = e;
-            String path = ""; //$NON-NLS-1$
+            String path = IAntCoreConstants.EMPTY_STRING;
             if (index != -1)
             {
                 variable = e.substring(0, index);
@@ -324,7 +325,7 @@ public class EclipseClasspath
             else if (variable2valueMap.get(variable) == null)
             {
                 // only add empty value, if variable is new 
-                variable2valueMap.put(variable, ""); //$NON-NLS-1$
+                variable2valueMap.put(variable, IAntCoreConstants.EMPTY_STRING);
             }
             rawClassPathEntriesAbsolute.add(value + path);
             rawClassPathEntries.add("${" + variable + "}" + path); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
index b7a07bd..b9f3026 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 Richard Hoefter and others.
+ * Copyright (c) 2004, 2011 Richard Hoefter and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     IBM Corporation - NLS'ing and incorporating into Eclipse. 
  *                     - Bug 177833 Class created from combination of all utility classes of contribution 
  *                     - Bug 267459 Java project with an external jar file from C:\ on the build path throws a NPE during the Ant Buildfile generation.
+ *                     - bug fixing
  *******************************************************************************/
 
 package org.eclipse.ant.internal.ui.datatransfer;
@@ -47,6 +48,7 @@ import javax.xml.transform.TransformerFactoryConfigurationError;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
@@ -712,7 +714,7 @@ public class ExportUtil {
 	 */
 	public static void addVariable(Map variable2valueMap, String s,
 			String projectRoot) {
-		if (s == null || s.equals("")) //$NON-NLS-1$
+		if (s == null || s.equals(IAntCoreConstants.EMPTY_STRING))
 		{
 			return;
 		}
@@ -758,7 +760,7 @@ public class ExportUtil {
 		}
 		int baseCount = base.segmentCount();
 		int count = base.matchingFirstSegments(location);
-		String temp = ""; //$NON-NLS-1$
+		String temp = IAntCoreConstants.EMPTY_STRING;
 		for (int j = 0; j < baseCount - count; j++) {
 			temp += "../"; //$NON-NLS-1$
 		}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java
index c0dabf8..1d5b070 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/JavacTableLabelProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.ant.internal.ui.datatransfer;
 
 import com.ibm.icu.text.MessageFormat;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.model.AntElementNode;
 import org.eclipse.ant.internal.ui.model.AntModelLabelProvider;
 
@@ -25,7 +26,7 @@ public class JavacTableLabelProvider extends AntModelLabelProvider {
 	public String getText(Object element) {
 		AntElementNode parent= ((AntElementNode)element).getParentNode();
 		if (parent == null) {
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		String targetName= super.getText(parent);
         return MessageFormat.format(DataTransferMessages.JavacTableLabelProvider_0, new String[] {targetName});
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java
index c043082..8d4e7a0 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/debug/model/AntDebugModelPresentation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.ant.internal.ui.debug.model;
 
 import java.io.File;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.debug.model.AntLineBreakpoint;
 import org.eclipse.ant.internal.launching.debug.model.AntProperties;
 import org.eclipse.ant.internal.launching.debug.model.AntProperty;
@@ -133,7 +134,7 @@ public class AntDebugModelPresentation extends LabelProvider implements IDebugMo
 	 * @see org.eclipse.debug.ui.IDebugModelPresentation#computeDetail(org.eclipse.debug.core.model.IValue, org.eclipse.debug.ui.IValueDetailListener)
 	 */
 	public void computeDetail(IValue value, IValueDetailListener listener) {
-		String detail = ""; //$NON-NLS-1$
+		String detail = IAntCoreConstants.EMPTY_STRING;
 		try {
 			detail = value.getValueString();
 		} catch (DebugException e) {
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java
index 4f4673c..adbf0fc 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntBuilderTargetsTab.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.ant.internal.ui.launchConfigurations;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.AntUtil;
@@ -270,7 +271,7 @@ public class AntBuilderTargetsTab extends AbstractLaunchConfigurationTab {
     private void initializeBuildKinds(ILaunchConfiguration configuration) {
         String buildKindString= null;
         try {
-            buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, ""); //$NON-NLS-1$
+            buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, IAntCoreConstants.EMPTY_STRING);
         } catch (CoreException e) {
             AntUIPlugin.log("Error reading configuration", e); //$NON-NLS-1$
         }
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java
index 19ac949..66e9727 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJRETab.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,12 +13,15 @@ package org.eclipse.ant.internal.ui.launchConfigurations;
 
 import java.util.regex.Pattern;
 
+import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
 import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
+import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants;
 import org.eclipse.ant.launching.IAntLaunchConstants;
 import org.eclipse.core.externaltools.internal.IExternalToolConstants;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.variables.IStringVariableManager;
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.debug.core.DebugPlugin;
@@ -216,13 +219,15 @@ public class AntJRETab extends JavaJRETab {
 	public void setDefaults(ILaunchConfigurationWorkingCopy config) {
 		super.setDefaults(config);
 		config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER, "org.eclipse.ant.ui.AntClasspathProvider"); //$NON-NLS-1$
-		IVMInstall defaultVMInstall= getDefaultVMInstall(config);
-		if (defaultVMInstall != null) {
-			config.setAttribute(IAntLaunchConstants.ATTR_DEFAULT_VM_INSTALL, false);
-			setDefaultVMInstallAttributes(defaultVMInstall, config);
-			applySeparateVMAttributes(config);
+		boolean usedefault = InstanceScope.INSTANCE.getNode(AntUIPlugin.PI_ANTUI).getBoolean(IAntUIPreferenceConstants.USE_WORKSPACE_JRE, false);
+		if (!usedefault) {
+			IVMInstall defaultVMInstall = getDefaultVMInstall(config);
+			if(defaultVMInstall != null) {
+				config.setAttribute(IAntLaunchConstants.ATTR_DEFAULT_VM_INSTALL, false);
+				setDefaultVMInstallAttributes(defaultVMInstall, config);
+				applySeparateVMAttributes(config);
+			}
 		}
-		
 	}
 
 	/**
@@ -238,7 +243,12 @@ public class AntJRETab extends JavaJRETab {
 		try {
 			IJavaProject project = JavaRuntime.getJavaProject(config);
 			if(project != null) {
-				return JavaRuntime.getVMInstall(project);
+				IVMInstall vm = JavaRuntime.getVMInstall(project);
+				//https://bugs.eclipse.org/bugs/show_bug.cgi?id=335860
+				//if the project does not have a JRE on the build path, return the workspace default JRE
+				if(vm != null) {
+					return vm;
+				}
 			}
 			return JavaRuntime.getDefaultVMInstall();
 		} catch (CoreException e) {
@@ -246,7 +256,7 @@ public class AntJRETab extends JavaJRETab {
 			return JavaRuntime.getDefaultVMInstall();
 		}
 	}
-
+	
 	private void setDefaultVMInstallAttributes(IVMInstall defaultVMInstall, ILaunchConfigurationWorkingCopy config) {
 		String vmName = defaultVMInstall.getName();
 		String vmTypeID = defaultVMInstall.getVMInstallType().getId();
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java
index 8234c55..2ffad58 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntJavaLaunchDelegate.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.launchConfigurations;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.ILaunchConfiguration;
@@ -42,6 +43,6 @@ public class AntJavaLaunchDelegate extends JavaLaunchDelegate {
 			return super.getProgramArguments(configuration);
 		} catch (CoreException ce) {
 		}
-		return configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""); //$NON-NLS-1$
+		return configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, IAntCoreConstants.EMPTY_STRING);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
index ef417b9..bd5bc7f 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.launchConfigurations;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.AntUtil;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
@@ -320,7 +321,7 @@ public class AntLaunchShortcut implements ILaunchShortcut2 {
 			if (!DebugUITools.saveBeforeLaunch()) {
 				return;
 			}
-			IStatus status = new Status(IStatus.INFO, IAntUIConstants.PLUGIN_ID, IAntUIConstants.STATUS_INIT_RUN_ANT, "", null); //$NON-NLS-1$
+			IStatus status = new Status(IStatus.INFO, IAntUIConstants.PLUGIN_ID, IAntUIConstants.STATUS_INIT_RUN_ANT, IAntCoreConstants.EMPTY_STRING, null);
 			String groupId;
 			if (mode.equals(ILaunchManager.DEBUG_MODE)) {
 			    groupId= IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP;
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java
index 209aa6c..5b3cdfd 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntMainTab.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.launchConfigurations;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.AntUtil;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
@@ -96,7 +97,7 @@ public class AntMainTab extends ExternalToolsMainTab {
 
 	private void updateProjectName(ILaunchConfigurationWorkingCopy configuration) {
         IFile file = getIFile(configuration);
-        String projectName= ""; //$NON-NLS-1$
+        String projectName= IAntCoreConstants.EMPTY_STRING;
         if (file != null) {
             projectName= file.getProject().getName();
         }
@@ -162,6 +163,14 @@ public class AntMainTab extends ExternalToolsMainTab {
 			}
 		});
 	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsMainTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
+	 */
+	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
+		super.setDefaults(configuration);
+		//prevent a new blank configuration from being dirty when first created and not yet edited
+		setMappedResources(configuration);
+	}
 	
 	private void updateCheckButtons(ILaunchConfiguration configuration) {
 		boolean setInputHandler= true;
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java
index 1b8065f..7f41b76 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/SetTargetsDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.launchConfigurations;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.launching.IAntLaunchConstants;
 import org.eclipse.core.runtime.CoreException;
@@ -61,7 +62,7 @@ public class SetTargetsDialog extends Dialog {
     protected String getTargetsSelected() {
 		String defaultValue= null;
 		if (!fTargetsTab.isTargetSelected()) {
-			defaultValue= ""; //$NON-NLS-1$
+			defaultValue= IAntCoreConstants.EMPTY_STRING;
 		}
         try {
             return fConfiguration.getAttribute(IAntLaunchConstants.ATTR_ANT_TARGETS, defaultValue);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java
index a377e9c..752e137 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetTableLabelProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.launchConfigurations;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.model.AntModelLabelProvider;
 import org.eclipse.ant.internal.ui.model.AntTargetNode;
 import org.eclipse.jface.viewers.ITableLabelProvider;
@@ -39,7 +40,7 @@ public class TargetTableLabelProvider extends AntModelLabelProvider implements I
 		}
 		String desc= ((AntTargetNode)element).getTarget().getDescription();
 		if (desc == null) {
-			return ""; //$NON-NLS-1$
+			return IAntCoreConstants.EMPTY_STRING;
 		}
 		return desc;
 	}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java
index c6d8515..d27be10 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TaskLinkManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.tools.ant.util.FileUtils;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.launching.AntLaunch;
 import org.eclipse.ant.internal.launching.AntLaunchingUtil;
 import org.eclipse.ant.internal.launching.LinkDescriptor;
@@ -137,7 +138,7 @@ public class TaskLinkManager {
 
 	private static boolean linkBuildFileMessage(IConsole console, IRegion region) {
 		
-		String message= ""; //$NON-NLS-1$
+		String message= IAntCoreConstants.EMPTY_STRING;
 		int offset= region.getOffset();
 		try {
 			message = console.getDocument().get(offset, region.getLength());
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java
index 9b99709..e34ed5f 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntAntNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.io.File;
 
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.util.FileUtils;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor;
 import org.xml.sax.Attributes;
 
@@ -24,7 +25,7 @@ public class AntAntNode extends AntTaskNode {
     public AntAntNode(Task task, Attributes attributes) {
         super(task);
         StringBuffer label= new StringBuffer("ant "); //$NON-NLS-1$
-        fFile= attributes.getValue(IAntModelConstants.ATTR_DIR);
+        fFile= attributes.getValue(IAntCoreConstants.DIR);
         if (fFile != null) {
         	if (!FileUtils.isAbsolutePath(fFile)) {
         		File basedir= task.getProject().getBaseDir();
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java
index 9b6940f..39fd5f6 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntDefiningTaskNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.apache.tools.ant.UnknownElement;
 import org.eclipse.ant.core.AntCorePlugin;
 import org.eclipse.ant.core.AntCorePreferences;
 import org.eclipse.ant.core.AntSecurityException;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
@@ -40,11 +41,11 @@ public class AntDefiningTaskNode extends AntTaskNode {
     
     public AntDefiningTaskNode(Task task, Attributes attributes) {
         super(task);
-        String label= attributes.getValue(IAntModelConstants.ATTR_NAME);
+        String label= attributes.getValue(IAntCoreConstants.NAME);
         if (label == null) {
             label= task.getTaskName();
         
-            String file= attributes.getValue(IAntModelConstants.ATTR_FILE);
+            String file= attributes.getValue(IAntCoreConstants.FILE);
             if(file != null) {
                 label=  label + " " + file; //$NON-NLS-1$
                 fIdentifier= file;
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java
index a1e95d6..8e21c82 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntElementNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2008 GEBIT Gesellschaft fuer EDV-Beratung
+ * Copyright (c) 2002, 2011 GEBIT Gesellschaft fuer EDV-Beratung
  * und Informatik-Technologien mbH, 
  * Berlin, Duesseldorf, Frankfurt (Germany) and others.
  * All rights reserved. This program and the accompanying materials 
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntImageDescriptor;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.AntUtil;
@@ -333,7 +334,7 @@ public class AntElementNode implements IAdaptable, IAntElement {
 			if (buildFileName != null) {
 				buffer.append(buildFileName);
 			}
-			buffer.append(getParentNode() != null ? getParentNode().getElementPath() : ""); //$NON-NLS-1$
+			buffer.append(getParentNode() != null ? getParentNode().getElementPath() : IAntCoreConstants.EMPTY_STRING);
 			buffer.append('/');
 			buffer.append(getElementIdentifier());
 			buffer.append('[');
@@ -347,9 +348,9 @@ public class AntElementNode implements IAdaptable, IAntElement {
 
 	private String getElementIdentifier() {
 		if (fElementIdentifier == null) {
-			StringBuffer buffer= escape(new StringBuffer(getName() != null ? getName() : ""), '\\', "$/[]\\"); //$NON-NLS-1$ //$NON-NLS-2$
+			StringBuffer buffer= escape(new StringBuffer(getName() != null ? getName() : IAntCoreConstants.EMPTY_STRING), '\\', "$/[]\\"); //$NON-NLS-1$
 			buffer.append('$');
-			buffer.append(escape(new StringBuffer(getLabel() != null ? getLabel() : ""), '\\', "$/[]\\").toString()); //$NON-NLS-1$ //$NON-NLS-2$
+			buffer.append(escape(new StringBuffer(getLabel() != null ? getLabel() : IAntCoreConstants.EMPTY_STRING), '\\', "$/[]\\").toString()); //$NON-NLS-1$
 			
 			fElementIdentifier= buffer.toString();
 		}
@@ -366,28 +367,6 @@ public class AntElementNode implements IAdaptable, IAntElement {
 		return sb;
 	}
 
-//	private int getElementIndexOf(AntElementNode child) {
-//		if (getChildNodes() == null) {
-//			return -1;
-//		}
-//		
-//		int result= -1;
-//		
-//		Iterator iter= getChildNodes().iterator();
-//		AntElementNode current= null;
-//		while (current != child && iter.hasNext()) {
-//			current= (AntElementNode) iter.next();
-//			if (child.getElementIdentifier().equals(current.getElementIdentifier()))
-//				result++;
-//		}
-//		
-//		if (current != child) {
-//			return -1;
-//		}
-//		
-//		return result;
-//	}
-
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java
index 9270ba2..a669336 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntImportNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.model;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
 import org.eclipse.ant.core.AntSecurityException;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.AntUtil;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
@@ -29,7 +30,7 @@ public class AntImportNode extends AntTaskNode {
 	
 	public AntImportNode(Task task, Attributes attributes) {
 		super(task);
-         fFile= attributes.getValue(IAntModelConstants.ATTR_FILE);
+         fFile= attributes.getValue(IAntCoreConstants.FILE);
 	}
 	
 	public String getFile() {
@@ -98,7 +99,7 @@ public class AntImportNode extends AntTaskNode {
 			String textToSearch= getAntModel().getText(getOffset(), offset - getOffset());
 			if (textToSearch != null && textToSearch.length() != 0) {
 				String attributeString = AntEditorCompletionProcessor.getAttributeStringFromDocumentStringToPrefix(textToSearch);
-				if (IAntModelConstants.ATTR_FILE.equals(attributeString)) {
+				if (IAntCoreConstants.FILE.equals(attributeString)) {
 					return fFile;
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
index ea91ab8..ea47b54 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
 package org.eclipse.ant.internal.ui.model;
 
 import java.io.File;
+import java.io.FileReader;
 import java.io.IOException;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
@@ -36,6 +37,7 @@ import org.apache.tools.ant.IntrospectionHelper;
 import org.apache.tools.ant.Location;
 import org.apache.tools.ant.Main;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelperRepository;
 import org.apache.tools.ant.RuntimeConfigurable;
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.Task;
@@ -60,7 +62,10 @@ import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.core.runtime.content.IContentDescription;
 import org.eclipse.core.variables.IStringVariableManager;
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.jface.text.BadLocationException;
@@ -77,6 +82,7 @@ public class AntModel implements IAntModel {
 
     private static ClassLoader fgClassLoader;
     private static int fgInstanceCount= 0;
+    private static Object loaderLock = new Object();
     
     private IDocument fDocument;
     private IProblemRequestor fProblemRequestor;
@@ -87,6 +93,7 @@ public class AntModel implements IAntModel {
     private AntElementNode fLastNode;
     private AntElementNode fNodeBeingResolved;
     private int fNodeBeingResolvedIndex= -1;
+    private String fEncoding = null;
     
     private Map fEntityNameToPath;
     
@@ -176,7 +183,6 @@ public class AntModel implements IAntModel {
     
     public AntModel(IDocument document, IProblemRequestor problemRequestor, LocationProvider locationProvider, boolean resolveLexicalInfo, boolean resolvePositionInfo, boolean resolveTaskInfo) {
         init(document, problemRequestor, locationProvider);
-        
         fHasLexicalInfo= resolveLexicalInfo;
         fHasPositionInfo= resolvePositionInfo;
         fHasTaskInfo= resolveTaskInfo;
@@ -194,6 +200,30 @@ public class AntModel implements IAntModel {
         }
         fgInstanceCount++;
         DecayCodeCompletionDataStructuresThread.cancel();
+        ProjectHelper helper = getProjectHelper();
+    	if(helper == null) {
+    		ProjectHelperRepository.getInstance().registerProjectHelper(ProjectHelper.class);
+    	}
+    	computeEncoding();
+    }
+    
+    /**
+     * Searches the collection of registered {@link org.apache.tools.ant.ProjectHelper}s to see if we have one
+     * registered already.
+     * 
+     * @return the {@link ProjectHelper} from our implementation of <code>null</code> if we have not registered one yet
+     * @since 3.7
+     * @see ProjectHelperRepository
+     */
+    ProjectHelper getProjectHelper() {
+    	Iterator helpers = ProjectHelperRepository.getInstance().getHelpers();
+    	while(helpers.hasNext()) {
+			org.apache.tools.ant.ProjectHelper helper = (org.apache.tools.ant.ProjectHelper) helpers.next();
+			if(helper instanceof ProjectHelper) {
+				return (ProjectHelper) helper;
+			}
+		}
+    	return null;
     }
     
     /* (non-Javadoc)
@@ -241,6 +271,7 @@ public class AntModel implements IAntModel {
             IntrospectionHelper.getHelper(projectNode.getProject(), Small.class);
             projectNode.getProject().fireBuildFinished(null);
         }
+        fEncoding = null;
     }
 
     /* (non-Javadoc)
@@ -348,14 +379,15 @@ public class AntModel implements IAntModel {
         // to determine the actual location of the file. Though the file 
         // contents will not be parsed. We parse the passed document string
         File file = getEditedFile();
-        String filePath= ""; //$NON-NLS-1$
+        String filePath= IAntCoreConstants.EMPTY_STRING;
         if (file != null) {
             filePath= file.getAbsolutePath();
         }
         project.setUserProperty("ant.file", filePath); //$NON-NLS-1$
         project.setUserProperty("ant.version", Main.getAntVersion()); //$NON-NLS-1$
-
-        ProjectHelper projectHelper= new ProjectHelper(this);
+        
+        ProjectHelper projectHelper = getProjectHelper();
+        ProjectHelper.setAntModel(this);
         projectHelper.setBuildFile(file);
         project.addReference("ant.projectHelper", projectHelper); //$NON-NLS-1$
         return projectHelper;
@@ -836,7 +868,7 @@ public class AntModel implements IAntModel {
         } else if(taskName.equalsIgnoreCase("antcall")) { //$NON-NLS-1$
             newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntModelConstants.ATTR_TARGET));
         } else if(taskName.equalsIgnoreCase("mkdir")) { //$NON-NLS-1$
-            newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntModelConstants.ATTR_DIR));
+            newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntCoreConstants.DIR));
         } else if(taskName.equalsIgnoreCase("copy")) { //$NON-NLS-1$
             newNode= new AntTaskNode(newTask, generateLabel(taskName, attributes, IAntModelConstants.ATTR_DESTFILE));
         } else if(taskName.equalsIgnoreCase("tar")  //$NON-NLS-1$
@@ -869,11 +901,11 @@ public class AntModel implements IAntModel {
             newNode= new AntAntNode(newTask, attributes);
         } else if(taskName.equalsIgnoreCase("delete")) { //$NON-NLS-1$
             String label = "delete "; //$NON-NLS-1$
-            String file = attributes.getValue(IAntModelConstants.ATTR_FILE);
+            String file = attributes.getValue(IAntCoreConstants.FILE);
             if(file != null) {
                 label+= file;
             } else {
-                file = attributes.getValue(IAntModelConstants.ATTR_DIR);
+                file = attributes.getValue(IAntCoreConstants.DIR);
                 if(file != null) {
                     label+= file;
                 }
@@ -916,7 +948,7 @@ public class AntModel implements IAntModel {
         }
         String taskName= newTask.getTaskName();
         if ("attribute".equals(taskName) || "element".equals(taskName)) { //$NON-NLS-1$ //$NON-NLS-2$
-            String name= attributes.getValue("name"); //$NON-NLS-1$
+            String name= attributes.getValue(IAntCoreConstants.NAME);
             if (name != null) {
                 newNode.setBaseLabel(name);
             }
@@ -1342,17 +1374,19 @@ public class AntModel implements IAntModel {
     }
 
     private ClassLoader getClassLoader(ClassLoader contextClassLoader) {
-        if (fLocalClassLoader != null) {
-            ((AntClassLoader) fLocalClassLoader).setPluginContextClassloader(contextClassLoader);
-            return fLocalClassLoader;
-        }
-        if (fgClassLoader == null) {
-            fgClassLoader= AntCorePlugin.getPlugin().getNewClassLoader(true);
-        }
-        if (fgClassLoader instanceof AntClassLoader) {
-            ((AntClassLoader) fgClassLoader).setPluginContextClassloader(contextClassLoader);
-        }
-        return fgClassLoader;
+    	synchronized (loaderLock) {
+    		if (fLocalClassLoader != null) {
+                ((AntClassLoader) fLocalClassLoader).setPluginContextClassloader(contextClassLoader);
+                return fLocalClassLoader;
+            }
+            if (fgClassLoader == null) {
+                fgClassLoader= AntCorePlugin.getPlugin().getNewClassLoader(true);
+            }
+            if (fgClassLoader instanceof AntClassLoader) {
+                ((AntClassLoader) fgClassLoader).setPluginContextClassloader(contextClassLoader);
+            }
+            return fgClassLoader;
+		}
     }
     
     public String getTargetDescription(String targetName) {
@@ -1810,4 +1844,52 @@ public class AntModel implements IAntModel {
      */
     class Small {
     }
+
+    /**
+     * Compute the encoding for the backing build file
+     * 
+     * @since 3.7
+     */
+    void computeEncoding() { 
+    	try {
+			IFile file = getFile();
+			if(file != null) {
+				fEncoding = getFile().getCharset(true);
+				return;
+			}
+		} catch (CoreException e) {
+			//do nothing. default to UTF-8 
+		}
+		//try the file buffer manager - likely an external file
+		IPath path = getLocationProvider().getLocation();
+		if(path != null) {
+			File buildfile = path.toFile();
+			FileReader reader = null;
+			try {
+				reader = new FileReader(buildfile);
+				QualifiedName[] options= new QualifiedName[] {IContentDescription.CHARSET};
+				IContentDescription desc = Platform.getContentTypeManager().getDescriptionFor(reader,  buildfile.getName(), options);
+				if(desc != null) {
+					fEncoding = desc.getCharset();
+					return;
+				}
+			}
+			catch(IOException ioe) {}
+			finally {
+				if(reader != null) {
+					try {
+						reader.close();
+					} catch (IOException e) {}
+				}
+			}
+		}
+		fEncoding = IAntCoreConstants.UTF_8;
+    }
+    
+	/* (non-Javadoc)
+	 * @see org.eclipse.ant.internal.ui.model.IAntModel#getEncoding()
+	 */
+	public String getEncoding() {
+		return fEncoding;
+	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java
index ff4d049..d8faf4e 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelProject.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * Portions Copyright  2000-2004 The Apache Software Foundation
  * All rights reserved. This program and the accompanying materials are made 
  * available under the terms of the Apache Software License v2.0 which 
@@ -13,14 +13,22 @@
 package org.eclipse.ant.internal.ui.model;
 
 import java.io.File;
+import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.PropertyHelper;
+import org.apache.tools.ant.UnknownElement;
 import org.apache.tools.ant.types.Path;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 
 /**
  * Derived from the original Ant Project class
@@ -32,22 +40,54 @@ import org.apache.tools.ant.types.Path;
  */
 public class AntModelProject extends Project {
 	
-	private Hashtable fBaseProperties;
-	private Hashtable fCurrentProperties= new Hashtable();
+	/**
+	 * Delegate to maintain property chaining - to make sure our project is alerted 
+	 * to new properties being set
+	 */
+	class AntPropertyHelper implements PropertyHelper.PropertySetter {
+		/* (non-Javadoc)
+		 * @see org.apache.tools.ant.PropertyHelper.PropertySetter#setNew(java.lang.String, java.lang.Object, org.apache.tools.ant.PropertyHelper)
+		 */
+		public boolean setNew(String property, Object value, PropertyHelper propertyHelper) {
+			setNewProperty(property, value.toString());
+			return false;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.apache.tools.ant.PropertyHelper.PropertySetter#set(java.lang.String, java.lang.Object, org.apache.tools.ant.PropertyHelper)
+		 */
+		public boolean set(String property, Object value, PropertyHelper propertyHelper) {
+			return false;
+		}
+	}
+	
 	private AntPropertyNode fCurrentConfiguringPropertyNode;
+	private Map idrefs = Collections.synchronizedMap(new HashMap());
+	private static Object loaderLock = new Object();
+	private Hashtable loaders = null;
+	private AntRefTable references = new AntRefTable();
+	
+	/**
+	 * Constructor
+	 * <p>
+	 * Allows us to register a {@link PropertyHelper.PropertySetter} delegate for this project
+	 * </p>
+	 * @noreference This constructor is not intended to be referenced by clients.
+	 */
+	public AntModelProject() {
+		PropertyHelper.getPropertyHelper(this).add(new AntPropertyHelper());
+	}
 	
 	/* (non-Javadoc)
 	 * @see org.apache.tools.ant.Project#setNewProperty(java.lang.String, java.lang.String)
 	 */
 	public void setNewProperty(String name, String value) {
-		
-		if (fCurrentProperties.get(name) != null) {
+		if(PropertyHelper.getPropertyHelper(this).getProperty(name) != null) {
 			return;
-		} 
+		}
 		//allows property values to be over-written for this parse session
 		//there is currently no way to remove properties from the Apache Ant project
 		//the project resets it properties for each parse...see reset()
-		fCurrentProperties.put(name, value);
 		if (fCurrentConfiguringPropertyNode != null) {
 			fCurrentConfiguringPropertyNode.addProperty(name, value);
 		}
@@ -66,13 +106,26 @@ public class AntModelProject extends Project {
 		}
 	}
 	
+	/**
+	 * Reset the project
+	 */
 	public void reset() {
 		getTargets().clear();
 		setDefault(null);
 		setDescription(null);
-		setName(""); //$NON-NLS-1$
-		//reset the properties to the initial set
-		fCurrentProperties= new Hashtable(fBaseProperties);
+		setName(IAntCoreConstants.EMPTY_STRING);
+		synchronized (loaderLock) {
+			if(loaders != null) {
+				Iterator i = loaders.entrySet().iterator();
+				Entry e = null;
+				while(i.hasNext()) {
+					e = (Entry) i.next();
+					AntClassLoader acl = (AntClassLoader) e.getValue();
+					acl.cleanup();
+					acl.clearAssertionStatus();
+				}
+			}
+		}
 	}
 	
 	/* (non-Javadoc)
@@ -80,39 +133,55 @@ public class AntModelProject extends Project {
 	 */
 	public String getProperty(String name) {
 		//override as we cannot remove properties from the Apache Ant project
-		String result= (String)fCurrentProperties.get(name);
+		String result= super.getProperty(name);
 		if (result == null) {
-			result= getUserProperty(name);
+			return getUserProperty(name);
 		}
 		return result;
 	}
 	
 	/* (non-Javadoc)
+	 * @see org.apache.tools.ant.Project#addIdReference(java.lang.String, java.lang.Object)
+	 */
+	public void addIdReference(String id, Object value) {
+		//XXX hack because we cannot look up references by id in Ant 1.8.x
+		//see https://issues.apache.org/bugzilla/show_bug.cgi?id=49659
+		idrefs.put(id, value);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.apache.tools.ant.Project#getReference(java.lang.String)
+	 */
+	public Object getReference(String key) {
+		Object ref = references.get(key);
+		if(ref == null) {
+			ref = idrefs.get(key);
+			if(ref instanceof UnknownElement) {
+				UnknownElement ue = (UnknownElement) ref;
+				ue.maybeConfigure();
+				return ue.getRealThing();
+			}
+		}
+		return ref;
+	}
+	
+	/* (non-Javadoc)
 	 * @see org.apache.tools.ant.Project#getProperties()
 	 */
 	public Hashtable getProperties() {
 		//override as we cannot remove properties from the Apache Ant project
-		Hashtable allProps= new Hashtable(fCurrentProperties);
+		Hashtable allProps = super.getProperties();
 		allProps.putAll(getUserProperties());
 		allProps.put("basedir", getBaseDir().getPath()); //$NON-NLS-1$
 		return allProps;
 	}
 	
 	/* (non-Javadoc)
-	 * @see org.apache.tools.ant.Project#init()
-	 */
-	public void init() throws BuildException {
-		super.init();
-		fBaseProperties= super.getProperties();
-		fCurrentProperties= super.getProperties();
-	}
-	
-	/* (non-Javadoc)
 	 * @see org.apache.tools.ant.Project#setBaseDir(java.io.File)
 	 */
 	public void setBaseDir(File baseDir) throws BuildException {
 		super.setBaseDir(baseDir);
-		fCurrentProperties.put("basedir", getBaseDir().getPath()); //$NON-NLS-1$
+		setNewProperty("basedir", getBaseDir().getPath()); //$NON-NLS-1$
 	}
 
 	/**
@@ -126,12 +195,53 @@ public class AntModelProject extends Project {
      * @see org.apache.tools.ant.Project#createClassLoader(org.apache.tools.ant.types.Path)
      */
     public AntClassLoader createClassLoader(Path path) {
-    	AntClassLoader loader= super.createClassLoader(path);
-    	if (path == null) {
-    		//use the "fake" Eclipse runtime classpath for Ant
-    		loader.setClassPath(Path.systemClasspath);
-    	}
-        
-        return loader;
+    	synchronized (loaderLock) {
+    		if(loaders == null) {
+    			loaders = new Hashtable(8);
+    		}
+    		Path p = path;
+    		if(p == null) {
+    			p = new Path(this);
+    		}
+    		String pstr = p.toString();
+    		AntClassLoader loader = (AntClassLoader) loaders.get(pstr);
+    		if(loader == null) {
+    			loader = super.createClassLoader(path);
+    	    	if (path == null) {
+    	    		//use the "fake" Eclipse runtime classpath for Ant
+    	    		loader.setClassPath(Path.systemClasspath);
+    	    	}
+    	    	loaders.put(pstr, loader);
+    		}
+    		return loader;
+		}
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.tools.ant.Project#addReference(java.lang.String, java.lang.Object)
+     */
+    public void addReference(String referenceName, Object value) {
+    	references.put(referenceName, value);
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.tools.ant.Project#getReferences()
+     */
+    public Hashtable getReferences() {
+    	return references;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.tools.ant.Project#getCopyOfReferences()
+     */
+    public Map getCopyOfReferences() {
+    	return new Hashtable(references);
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.tools.ant.Project#hasReference(java.lang.String)
+     */
+    public boolean hasReference(String key) {
+    	return references.contains(key);
     }
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java
index c56db72..cf3b69a 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntProjectNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.tools.ant.Project;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
 import org.eclipse.core.resources.IFile;
@@ -129,9 +130,9 @@ public class AntProjectNode extends AntElementNode {
         	return null;
         }
         List results= new ArrayList(1);
-    	identifier= new StringBuffer("\"").append(identifier).append('"').toString(); //$NON-NLS-1$
-    	int defaultTargetNameOffset= textToSearch.indexOf("default"); //$NON-NLS-1$
-    	defaultTargetNameOffset= textToSearch.indexOf(identifier, defaultTargetNameOffset);
+    	String newidentifier= new StringBuffer("\"").append(identifier).append('"').toString(); //$NON-NLS-1$
+    	int defaultTargetNameOffset= textToSearch.indexOf(IAntCoreConstants.DEFAULT);
+    	defaultTargetNameOffset= textToSearch.indexOf(newidentifier, defaultTargetNameOffset);
     	results.add(new Integer(getOffset() + defaultTargetNameOffset + 1));
         return results;
     }
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java
index 6a04c21..b21e3a5 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntPropertyNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.Map;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
 import org.eclipse.ant.core.AntSecurityException;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
 import org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor;
@@ -31,7 +32,7 @@ public class AntPropertyNode extends AntTaskNode {
 	
 	private String fValue= null;
 	private String fReferencedName;
-    private String fOccurrencesStartingPoint= IAntModelConstants.ATTR_VALUE;
+    private String fOccurrencesStartingPoint= IAntCoreConstants.VALUE;
     private String fOccurrencesIdentifier;
     
 	/*
@@ -42,9 +43,9 @@ public class AntPropertyNode extends AntTaskNode {
 	
 	public AntPropertyNode(Task task, Attributes attributes) {
 		super(task);
-		 String label = attributes.getValue(IAntModelConstants.ATTR_NAME);
+		 String label = attributes.getValue(IAntCoreConstants.NAME);
          if (label == null) {
-			label = attributes.getValue(IAntModelConstants.ATTR_FILE);
+			label = attributes.getValue(IAntCoreConstants.FILE);
          	if (label != null) {
          		fReferencedName= label;
          		label=  "file="+label; //$NON-NLS-1$
@@ -67,7 +68,7 @@ public class AntPropertyNode extends AntTaskNode {
          		}
          	}
          } else {
-         	fValue= attributes.getValue(IAntModelConstants.ATTR_VALUE);
+         	fValue= attributes.getValue(IAntCoreConstants.VALUE);
             if (fValue == null) {
                 fOccurrencesStartingPoint= IAntModelConstants.ATTR_LOCATION;
                 fValue= attributes.getValue(fOccurrencesStartingPoint);
@@ -140,7 +141,7 @@ public class AntPropertyNode extends AntTaskNode {
 			String textToSearch= getAntModel().getText(getOffset(), offset - getOffset());
 			if (textToSearch != null && textToSearch.length() != 0) {
 				String attributeString = AntEditorCompletionProcessor.getAttributeStringFromDocumentStringToPrefix(textToSearch);
-				if ("file".equals(attributeString) || "resource".equals(attributeString) || "srcFile".equals(attributeString)) {  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+				if (IAntCoreConstants.FILE.equals(attributeString) || IAntModelConstants.ATTR_RESOURCE.equals(attributeString) || "srcFile".equals(attributeString)) {  //$NON-NLS-1$
 					return fReferencedName;
 				}
 			}
@@ -214,7 +215,7 @@ public class AntPropertyNode extends AntTaskNode {
         List results= new ArrayList();
         if (fBaseLabel != null) {
             if (fBaseLabel.equals(identifier)) {
-                int nameOffset= textToSearch.indexOf("name"); //$NON-NLS-1$
+                int nameOffset= textToSearch.indexOf(IAntCoreConstants.NAME);
                 nameOffset= textToSearch.indexOf(identifier, nameOffset + 1);
                 results.add(new Integer(getOffset() + nameOffset));
             }
@@ -249,7 +250,7 @@ public class AntPropertyNode extends AntTaskNode {
          if (textToSearch == null || textToSearch.length() == 0) {
          	return false;
          }
-         int nameStartOffset= textToSearch.indexOf("name"); //$NON-NLS-1$
+         int nameStartOffset= textToSearch.indexOf(IAntCoreConstants.NAME);
          nameStartOffset= textToSearch.indexOf("\"", nameStartOffset); //$NON-NLS-1$
          int nameEndOffset= textToSearch.indexOf("\"", nameStartOffset + 1); //$NON-NLS-1$
          nameEndOffset+=offset;
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java
new file mode 100644
index 0000000..f9070e1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntRefTable.java	
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ant.internal.ui.model;
+
+import java.util.Hashtable;
+
+import org.apache.tools.ant.UnknownElement;
+
+/**
+ * This class has been copied in its entirety from the static
+ * inner class AntRefTable from {@link org.apache.tools.ant.Project}
+ */
+public class AntRefTable extends Hashtable {
+
+	private static final long serialVersionUID = 1L;
+
+	AntRefTable() {
+        super();
+    }
+
+    /** 
+     * Returns the unmodified original object.
+     * This method should be called internally to
+     * get the "real" object.
+     * The normal get method will do the replacement
+     * of UnknownElement (this is similar with the JDNI
+     * refs behavior).
+     */
+    private Object getReal(Object key) {
+        return super.get(key);
+    }
+
+    /** 
+     * Get method for the reference table.
+     *  It can be used to hook dynamic references and to modify
+     * some references on the fly--for example for delayed
+     * evaluation.
+     *
+     * It is important to make sure that the processing that is
+     * done inside is not calling get indirectly.
+     *
+     * @param key lookup key.
+     * @return mapped value.
+     */
+    public synchronized Object get(Object key) {
+        Object o = getReal(key);
+        if (o instanceof UnknownElement) {
+            // Make sure that
+            UnknownElement ue = (UnknownElement) o;
+            ue.maybeConfigure();
+            o = ue.getRealThing();
+        }
+        return o;
+    }
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java
index 0bd4c1c..c59e984 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntTargetNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.tools.ant.Target;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
@@ -179,7 +180,7 @@ public class AntTargetNode extends AntElementNode {
         }
         List results= new ArrayList();
         if (getTargetName().equals(identifier)) {
-            int nameOffset= textToSearch.indexOf("name"); //$NON-NLS-1$
+            int nameOffset= textToSearch.indexOf(IAntCoreConstants.NAME);
             nameOffset= textToSearch.indexOf(identifier, nameOffset);
             results.add(new Integer(getOffset() + nameOffset));
         } else {
@@ -236,7 +237,7 @@ public class AntTargetNode extends AntElementNode {
 		}
 		if (checkReferenceRegion(region, textToSearch, "depends")) { //$NON-NLS-1$
 			return true;
-		} else if (checkReferenceRegion(region, textToSearch, "name")) { //$NON-NLS-1$
+		} else if (checkReferenceRegion(region, textToSearch, IAntCoreConstants.NAME)) {
 			return true;
 		} else if (checkReferenceRegion(region, textToSearch, "if")) { //$NON-NLS-1$
 			return true;
@@ -252,6 +253,6 @@ public class AntTargetNode extends AntElementNode {
          if (textToSearch == null || textToSearch.length() == 0) {
          	return false;
          }
-         return checkReferenceRegion(region, textToSearch, "name"); //$NON-NLS-1$
+         return checkReferenceRegion(region, textToSearch, IAntCoreConstants.NAME);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java
index 6175880..d7c44ef 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -80,6 +80,16 @@ public interface IAntModel {
     IFile getFile();
 
     /**
+     * Returns the encoding from the backing {@link IAntModel}. If the model is <code>null</code>
+     * or the encoding cannot be computed from the location backing the model, <code>UTF-8</code> 
+     * is returned
+     * 
+     * @return the encoding
+     * @since 3.7
+     */
+    String getEncoding();
+    
+    /**
      * Handles a <code>BuildException</code> that occurred during parsing.
      * @param be the build exception that occurred
      * @param node the node associated with the problem
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java
index f9c4f6e..b54be37 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModelConstants.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,23 +15,14 @@ package org.eclipse.ant.internal.ui.model;
  */
 public interface IAntModelConstants {
 	
-	/**
-	 * Attributes of Ant elements
-	 */
-	public static final String ATTR_NAME= "name"; //$NON-NLS-1$
-	public static final String ATTR_VALUE= "value"; //$NON-NLS-1$
-    public static final String ATTR_LOCATION= "location"; //$NON-NLS-1$
-	public static final String ATTR_DEFAULT= "default"; //$NON-NLS-1$
+	public static final String ATTR_LOCATION= "location"; //$NON-NLS-1$
 	public static final String ATTR_RESOURCE= "resource"; //$NON-NLS-1$
 	public static final String ATTR_ENVIRONMENT= "environment"; //$NON-NLS-1$
 	public static final String ATTR_TARGET= "target"; //$NON-NLS-1$
-	public static final String ATTR_DIR= "dir"; //$NON-NLS-1$
-	public static final String ATTR_FILE= "file"; //$NON-NLS-1$
 	public static final String ATTR_DESTFILE= "destfile"; //$NON-NLS-1$
 	public static final String ATTR_SRC= "src"; //$NON-NLS-1$
 	public static final String ATTR_ZIPFILE= "zipfile"; //$NON-NLS-1$
 	public static final String ATTR_COMMAND= "command"; //$NON-NLS-1$
 	public static final String ATTR_EXECUTABLE= "executable"; //$NON-NLS-1$
-	public static final String ATTR_DESCRIPTION= "description"; //$NON-NLS-1$
 	public static final String ATTR_ANT_FILE= "antfile"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java
index 3b60e31..a539e03 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@ package org.eclipse.ant.internal.ui.preferences;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import com.ibm.icu.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -22,11 +21,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.ibm.icu.text.MessageFormat;
+
 import org.eclipse.ant.internal.ui.AntUIPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.DialogPage;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -39,8 +38,16 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.core.runtime.IStatus;
+
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.preference.PreferencePage;
+
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.PlatformUI;
 
 public abstract class AbstractAntEditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
 	
@@ -90,7 +97,15 @@ public abstract class AbstractAntEditorPreferencePage extends PreferencePage imp
 	 */
 	public void init(IWorkbench workbench) {
 	}
-	
+
+	/*
+	 * @see org.eclipse.jface.preference.PreferencePage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IAntUIHelpContextIds.ANT_EDITOR_PREFERENCE_PAGE);
+	}
+
 	protected void initializeFields() {
 		Map checkBoxes= getCheckBoxes();
 		Map textFields= getTextFields();
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
index bb9894d..515b256 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
 import org.eclipse.ant.core.IAntClasspathEntry;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -82,9 +83,9 @@ public class AddCustomDialog extends StatusDialog {
 	
 	private Text nameField;
 	
-	private String name=""; //$NON-NLS-1$
+	private String name= IAntCoreConstants.EMPTY_STRING;
 	private IAntClasspathEntry library= null;
-	private String className=""; //$NON-NLS-1$
+	private String className= IAntCoreConstants.EMPTY_STRING;
 	
 	private boolean editing= false;
 	
@@ -394,7 +395,7 @@ public class AddCustomDialog extends StatusDialog {
 		// Use an empty label so that display of the element's full name
 		// doesn't include a confusing label
 		MinimizedFileSystemElement dummyParent =
-			new MinimizedFileSystemElement("", null, true);//$NON-NLS-1$
+			new MinimizedFileSystemElement(IAntCoreConstants.EMPTY_STRING, null, true);
 		dummyParent.setPopulated();
 		MinimizedFileSystemElement result =
 			new MinimizedFileSystemElement(elementLabel, dummyParent, isContainer);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java
index 09c43a7..f0b1067 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.ant.core.IAntClasspathEntry;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
 import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants;
@@ -221,7 +222,7 @@ public class AntClasspathBlock {
 		String result = dialog.open();
 		if (result != null) {
 			try {
-				URL url = new URL("file:" + result + "/"); //$NON-NLS-2$;//$NON-NLS-1$;
+				URL url = new URL(IAntCoreConstants.FILE_PROTOCOL + result + "/"); //$NON-NLS-1$;
 				((AntClasspathContentProvider)treeViewer.getContentProvider()).add(currentParent, url);
 			} catch (MalformedURLException e) {
 			}
@@ -252,7 +253,7 @@ public class AntClasspathBlock {
 			String jarName = results[i];
 			try {
 				IPath path = filterPath.append(jarName).makeAbsolute();
-				URL url = new URL("file:" + path.toOSString()); //$NON-NLS-1$;
+				URL url = new URL(IAntCoreConstants.FILE_PROTOCOL + path.toOSString());
 				contentProvider.add(currentParent, url);
 			} catch (MalformedURLException e) {
 			}
@@ -497,7 +498,7 @@ public class AntClasspathBlock {
 				File file = new File(rootDir, names[i]);
 				if (file.isFile() && file.getPath().endsWith(".jar")) { //$NON-NLS-1$
 					try {
-						URL url = new URL("file:" +  file.getAbsolutePath()); //$NON-NLS-1$
+						URL url = new URL(IAntCoreConstants.FILE_PROTOCOL +  file.getAbsolutePath());
 						contentProvider.add(ClasspathModel.ANT_HOME, url);
 					} catch (MalformedURLException e) {
 					}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntCodeAssistPreferencePage.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntCodeAssistPreferencePage.java
index fdee992..c32fe55 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntCodeAssistPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntCodeAssistPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,15 +71,15 @@ public class AntCodeAssistPreferencePage extends AbstractAntEditorPreferencePage
 		Control[] labelledTextField;
 		text= AntPreferencesMessages.AntCodeAssistPreferencePage_Auto_activation__delay__3;
 		String[] errorMessages= new String[]{AntPreferencesMessages.AntCodeAssistPreferencePage_empty_input_auto_activation, AntPreferencesMessages.AntCodeAssistPreferencePage_invalid_input_auto_activation};
-		labelledTextField= addLabelledTextField(contentAssistComposite, text, AntEditorPreferenceConstants.CODEASSIST_AUTOACTIVATION_DELAY, 4, 0, errorMessages);
+		labelledTextField= addLabelledTextField(contentAssistComposite, text, AntEditorPreferenceConstants.CODEASSIST_AUTOACTIVATION_DELAY, 4, 20, errorMessages);
 		fAutoInsertDelayLabel= getLabelControl(labelledTextField);
 		fAutoInsertDelayText= getTextControl(labelledTextField);
 		
 		text= AntPreferencesMessages.AntCodeAssistPreferencePage_Auto_activation_tri_ggers__4;
-		labelledTextField= addLabelledTextField(contentAssistComposite, text, AntEditorPreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS, 4, 0, null);
+		labelledTextField= addLabelledTextField(contentAssistComposite, text, AntEditorPreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS, 4, 20, null);
 		fAutoInsertTriggerLabel= getLabelControl(labelledTextField);
 		fAutoInsertTriggerText= getTextControl(labelledTextField);
-		
+		updateAutoactivationControls();
 		return contentAssistComposite;
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java
index ac16e03..1e3bb17 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,24 +18,9 @@ import java.util.Map;
 
 import org.eclipse.ant.internal.ui.AntSourceViewerConfiguration;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
-import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
 import org.eclipse.ant.internal.ui.editor.text.AntDocumentSetupParticipant;
 import org.eclipse.ant.internal.ui.editor.text.IAntEditorColorConstants;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.viewers.IColorProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -55,12 +40,31 @@ import org.eclipse.swt.widgets.TabFolder;
 import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.source.SourceViewer;
+
 import org.eclipse.ui.dialogs.PreferencesUtil;
-import org.eclipse.ui.editors.text.EditorsUI;
 import org.eclipse.ui.model.WorkbenchViewerComparator;
+
 import org.eclipse.ui.texteditor.ChainedPreferenceStore;
 
+import org.eclipse.ui.editors.text.EditorsUI;
+
 /*
  * The page for setting the editor options.
  */
@@ -333,7 +337,6 @@ public class AntEditorPreferencePage extends AbstractAntEditorPreferencePage {
 	 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
 	 */
 	protected Control createContents(Composite parent) {
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IAntUIHelpContextIds.ANT_EDITOR_PREFERENCE_PAGE);
 		getOverlayStore().load();
 		getOverlayStore().start();
 		
@@ -744,11 +747,13 @@ public class AntEditorPreferencePage extends AbstractAntEditorPreferencePage {
 	
 	private void createHeader(Composite contents) {
 		final Link link= new Link(contents, SWT.NONE);
-		final String target= "org.eclipse.ui.preferencePages.GeneralTextEditor"; //$NON-NLS-1$
 		link.setText(AntPreferencesMessages.AntEditorPreferencePage_0);
 		link.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				PreferencesUtil.createPreferenceDialogOn(link.getShell(), target, null, null);
+				if ("org.eclipse.ui.preferencePages.GeneralTextEditor".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(link.getShell(), e.text, null, null);
+				else if ("org.eclipse.ui.preferencePages.ColorsAndFonts".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(link.getShell(), e.text, null, "selectFont:org.eclipse.jface.textfont"); //$NON-NLS-1$
 			}
 		});
 		String linktooltip= AntPreferencesMessages.AntEditorPreferencePage_3;
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java
index e284013..5d7c070 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntObjectLabelProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.ant.internal.ui.preferences;
 import org.eclipse.ant.core.Property;
 import org.eclipse.ant.core.Task;
 import org.eclipse.ant.internal.core.AntObject;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIImages;
 import org.eclipse.ant.internal.ui.IAntUIConstants;
 import org.eclipse.jface.viewers.IColorProvider;
@@ -98,7 +99,7 @@ public class AntObjectLabelProvider extends LabelProvider implements ITableLabel
                     return property.getPluginLabel();
                 }
         }
-        return ""; //$NON-NLS-1$
+        return IAntCoreConstants.EMPTY_STRING;
     }
     
 	public static Image getTypeImage() {
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java
index 56d2369..0687de0 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,22 +10,14 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.preferences;
 
+import com.ibm.icu.text.MessageFormat;
+
 import org.eclipse.ant.internal.launching.AntLaunching;
 import org.eclipse.ant.internal.launching.IAntLaunchingPreferenceConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
 import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.jface.preference.StringFieldEditor;
-import org.eclipse.jface.resource.StringConverter;
-import org.eclipse.jface.util.PropertyChangeEvent;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -38,12 +30,24 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.List;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.PlatformUI;
 
-import com.ibm.icu.text.MessageFormat;
-
 public class AntPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
 	
 	/**
@@ -74,7 +78,7 @@ public class AntPreferencePage extends FieldEditorPreferencePage implements IWor
 		 * @see org.eclipse.jface.preference.IntegerFieldEditor#doStore()
 		 */
 		protected void doStore() {
-			new InstanceScope().getNode(node).putInt(key, Integer.parseInt(getStringValue()));
+			InstanceScope.INSTANCE.getNode(node).putInt(key, Integer.parseInt(getStringValue()));
 		}
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.preference.FieldEditor#load()
@@ -86,13 +90,14 @@ public class AntPreferencePage extends FieldEditorPreferencePage implements IWor
 		 * @see org.eclipse.jface.preference.FieldEditor#loadDefault()
 		 */
 		public void loadDefault() {
-			setStringValue(Integer.toString(new DefaultScope().getNode(AntLaunching.getUniqueIdentifier()).getInt(key, defaultvalue)));
+			setStringValue(Integer.toString(DefaultScope.INSTANCE.getNode(AntLaunching.getUniqueIdentifier()).getInt(key, defaultvalue)));
 		}
 	}
 	
 	private List fConsoleColorList;
 	private ColorEditor fConsoleColorEditor;
 	private IntegerFieldEditor timeout;
+	private BooleanFieldEditor workspacejre = null;
 
 	private BooleanFieldEditor fToolsWarningEditor= null;
 	
@@ -139,7 +144,7 @@ public class AntPreferencePage extends FieldEditorPreferencePage implements IWor
 				AntPreferencesMessages.AntPreferencePage_13, 
 				getFieldEditorParent(),
 				20000);
-        int minValue = new DefaultScope().getNode(AntLaunching.getUniqueIdentifier()).getInt(IAntLaunchingPreferenceConstants.ANT_COMMUNICATION_TIMEOUT, 20000);
+        int minValue = DefaultScope.INSTANCE.getNode(AntLaunching.getUniqueIdentifier()).getInt(IAntLaunchingPreferenceConstants.ANT_COMMUNICATION_TIMEOUT, 20000);
         int maxValue = 1200000;
         timeout.setValidRange(minValue, maxValue);
         timeout.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
@@ -149,8 +154,12 @@ public class AntPreferencePage extends FieldEditorPreferencePage implements IWor
         editor = new URLFieldEditor(IAntUIPreferenceConstants.DOCUMENTATION_URL, AntPreferencesMessages.AntPreferencePage_2, getFieldEditorParent());
 		addField(editor);
 		
-		createSpace();
-	
+		workspacejre = new BooleanFieldEditor(IAntUIPreferenceConstants.USE_WORKSPACE_JRE, AntPreferencesMessages.always_run_in_workspace_jre, getFieldEditorParent());
+	    workspacejre.fillIntoGrid(getFieldEditorParent(), 3);
+	    addField(workspacejre);
+	      
+	    createSpace();
+		
 		if (!AntUIPlugin.isMacOS()) {
 			//the mac does not have a tools.jar Bug 40778
 		    label= new Label(getFieldEditorParent(), SWT.WRAP);
@@ -168,7 +177,6 @@ public class AntPreferencePage extends FieldEditorPreferencePage implements IWor
 		addField(new BooleanFieldEditor(IAntUIPreferenceConstants.ANT_ERROR_DIALOG, AntPreferencesMessages.AntPreferencePage_12, getFieldEditorParent()));
 		createSpace();
 		
-		
 		addField(new BooleanFieldEditor(IAntUIPreferenceConstants.ANT_CREATE_MARKERS, AntPreferencesMessages.AntPreferencePage_15, getFieldEditorParent()));
 		label= new Label(getFieldEditorParent(), SWT.WRAP);
 		label.setText(AntPreferencesMessages.AntPreferencePage_16);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.java
index 79fdf08..2689ca4 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.java	
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -107,6 +107,8 @@ public class AntPreferencesMessages extends NLS {
 	public static String AddPropertyDialog__Value__2;
 	public static String AddPropertyDialog_2;
 
+	public static String always_run_in_workspace_jre;
+
 	public static String AntCodeAssistPreferencePage_Insert;
 	public static String AntCodeAssistPreferencePage_0;
 	public static String AntCodeAssistPreferencePage__Enable_auto_activation_2;
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.properties b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.properties
index 51926a4..67fee85 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.properties	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencesMessages.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -103,6 +103,7 @@ AntPropertiesBlock_18=A property named {0} is contributed from the {1} plug-in.
 AddPropertyDialog__Name__1=&Name:
 AddPropertyDialog__Value__2=&Value:
 AddPropertyDialog_2=Varia&bles...
+always_run_in_workspace_jre=Always run new Ant configurations in the same JRE as the wor&kspace
 
 AntCodeAssistPreferencePage_Insert=Insert single &proposals automatically
 AntCodeAssistPreferencePage_0=Provide proposals for &user defined tasks (may lock referenced JAR files)
@@ -147,10 +148,12 @@ AntEditorPreferencePage_7=&Bold
 AntEditorPreferencePage_8=I&talic
 AntEditorPreferencePage_9=&Preview:
 AntEditorPreferencePage_3=Show the shared text editor preferences
-AntEditorPreferencePage_0=See <A>'Text Editors'</A> for the general text editor preferences.
 AntEditorPreferencePage_2=&Mark occurrences of the selected element in the current buildfile
 AntEditorPreferencePage_4=&Keep marks when selection changes
 
+# DO NOT TRANSLATE "org.eclipse.ui.preferencePages.GeneralTextEditor" and "org.eclipse.ui.preferencePages.ColorsAndFonts"
+AntEditorPreferencePage_0=See <a href=\"org.eclipse.ui.preferencePages.GeneralTextEditor\">'Text Editors'</a> for general text editor preferences and <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">'Colors and Fonts'</a> to configure the font.
+
 ClasspathModel_2=Ant Home Entries
 ClasspathModel_3=Global Entries
 ClasspathModel_0=Contributed Entries
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java
index fcdc7da..20d7f2b 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.ant.core.Property;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.AntUtil;
 import org.eclipse.ant.internal.ui.ColumnSorter;
@@ -404,7 +405,7 @@ public class AntPropertiesBlock {
 		String lastUsedPath;
 		lastUsedPath= dialogSettings.get(IAntUIConstants.DIALOGSTORE_LASTEXTFILE);
 		if (lastUsedPath == null) {
-			lastUsedPath= ""; //$NON-NLS-1$
+			lastUsedPath= IAntCoreConstants.EMPTY_STRING;
 		}
 		FileDialog dialog = new FileDialog(fileTableViewer.getControl().getShell(), SWT.MULTI);
 		dialog.setFilterExtensions(new String[] { "*.properties", "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$;
@@ -438,7 +439,7 @@ public class AntPropertiesBlock {
 	 */
 	private void addProperty() {
 		String title = AntPreferencesMessages.AntPropertiesBlock_Add_Property_2;
-		AddPropertyDialog dialog = new AddPropertyDialog(propertyTableViewer.getControl().getShell(), title, new String[]{"", ""}); //$NON-NLS-1$ //$NON-NLS-2$
+		AddPropertyDialog dialog = new AddPropertyDialog(propertyTableViewer.getControl().getShell(), title, new String[]{IAntCoreConstants.EMPTY_STRING, IAntCoreConstants.EMPTY_STRING});
 		if (dialog.open() == Window.CANCEL) {
 			return;
 		}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java
index a7681cb..fabbad7 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/ClasspathEntry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.ant.internal.ui.preferences;
 import java.net.MalformedURLException;
 import java.net.URL;
 import org.eclipse.ant.core.IAntClasspathEntry;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.variables.VariablesPlugin;
@@ -99,7 +100,7 @@ public class ClasspathEntry extends AbstractClasspathEntry {
 			
 		try {
 			String expanded = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(fVariableString);
-			return new URL("file:" + expanded); //$NON-NLS-1$
+			return new URL(IAntCoreConstants.FILE_PROTOCOL + expanded);
 		} catch (CoreException e) {
 			AntUIPlugin.log(e);
 		} catch (MalformedURLException e) {
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java
index e9c9588..d91b721 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.ant.internal.ui.preferences;
 
 import java.util.List;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
@@ -55,14 +56,14 @@ public class FileSelectionDialog extends ElementTreeSelectionDialog {
 		ISelectionStatusValidator validator= new ISelectionStatusValidator() {
 			public IStatus validate(Object[] selection) {
 				if (selection.length == 0) {
-					return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, "", null); //$NON-NLS-1$
+					return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null); 
 				}
 				for (int i= 0; i < selection.length; i++) {
 					if (!(selection[i] instanceof IFile)) {
-						return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, "", null); //$NON-NLS-1$
+						return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null); 
 					}
 				}
-				return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), 0, "", null); //$NON-NLS-1$
+				return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null); 
 			}			
 		};
 		setValidator(validator);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java
index 5ebb895..0745969 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.ant.internal.ui.preferences;
 
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.core.runtime.IStatus;
 
 import org.eclipse.swt.SWT;
@@ -79,7 +80,7 @@ public class MessageLine extends CLabel {
 				return;
 			}
 		}
-		setText(""); //$NON-NLS-1$
+		setText(IAntCoreConstants.EMPTY_STRING);
 		setImage(null);
 		setBackground(fNormalMsgAreaBackground);
 	}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java
index 5a05584..307b310 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/refactoring/LaunchConfigurationBuildfileChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.ant.core.AntCorePlugin;
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUtil;
 import org.eclipse.ant.launching.IAntLaunchConstants;
 import org.eclipse.core.externaltools.internal.IExternalToolConstants;
@@ -208,7 +209,7 @@ public class LaunchConfigurationBuildfileChange extends Change {
 	 */
 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		if (fLaunchConfiguration.exists()) {
-			String buildFileLocation= fLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$
+			String buildFileLocation= fLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, IAntCoreConstants.EMPTY_STRING); 
 			if (fOldBuildfileLocation == null || (buildFileLocation.endsWith(fOldBuildfileLocation + '}') || buildFileLocation.endsWith(fOldBuildfileLocation))) {
 				String projectName= fLaunchConfiguration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)null);
 				if (fOldProjectName.equals(projectName)) {
@@ -233,7 +234,7 @@ public class LaunchConfigurationBuildfileChange extends Change {
             fNewLaunchConfiguration.setContainer(container);
         }
 
-		String oldBuildfileLocation= fNewLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$
+		String oldBuildfileLocation= fNewLaunchConfiguration.getAttribute(IExternalToolConstants.ATTR_LOCATION, IAntCoreConstants.EMPTY_STRING); 
 		String oldProjectName;
 		if (fNewBuildfileLocation != null) {
             String newBuildFileLocation= oldBuildfileLocation.replaceFirst(fOldBuildfileLocation, fNewBuildfileLocation);
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
index b8c1861..b987ecf 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
 import org.eclipse.ant.internal.ui.model.AntElementNode;
 import org.eclipse.ant.internal.ui.model.AntModelLabelProvider;
@@ -575,7 +576,7 @@ public class AntView extends ViewPart implements IResourceChangeListener, IShowI
 
 			AntProjectNodeProxy project = null;
 			if (nameString == null) {
-				nameString = ""; //$NON-NLS-1$
+				nameString = IAntCoreConstants.EMPTY_STRING;
 			}
 			project = new AntProjectNodeProxy(nameString, pathString);
 			if (errorString != null && Boolean.valueOf(errorString).booleanValue()) {
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java
index f2b5c00..7622264 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,7 +61,7 @@ public class AntViewDropAdapter extends DropTargetAdapter {
 	 */
 	private void processString(String buildFileName) {
 		IFile buildFile = AntUtil.getFileForLocation(buildFileName, null);
-		if (!acceptBuildFile(buildFile.getName())) {
+		if (!AntUtil.isKnownAntFile(buildFile)) {
 			return;
 		}
 		String name = buildFile.getFullPath().toString();
@@ -77,18 +77,6 @@ public class AntViewDropAdapter extends DropTargetAdapter {
 		view.addProject(project);
 	}
 	
-	/**
-	 * Returns if the given build file name is known as a build file
-	 * @param name
-	 * @return true if the name of the build file is known as a build file, false otherwise
-	 */
-	boolean acceptBuildFile(String name) {
-		if(name != null) {
-			return name.toLowerCase().endsWith(".xml") || AntUtil.isKnownBuildfileName(name); //$NON-NLS-1$
-		}
-		return false;
-	}
-	
 	/* (non-Javadoc)
 	 * @see org.eclipse.swt.dnd.DropTargetListener#dragEnter(org.eclipse.swt.dnd.DropTargetEvent)
 	 */
@@ -104,4 +92,4 @@ public class AntViewDropAdapter extends DropTargetAdapter {
 		event.detail= DND.DROP_COPY;
 		super.dragOperationChanged(event);
 	}
-}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
index 09c8d5d..e88cfe2 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java	
+++ b/eclipse/plugins/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
+import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIHelpContextIds;
 import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants;
@@ -96,7 +98,7 @@ public class SearchForBuildFilesDialog extends InputDialog {
 			settings.put(IAntUIPreferenceConstants.ANTVIEW_LAST_SEARCH_STRING, "build.xml"); //$NON-NLS-1$
 		}
 		if (settings.get(IAntUIPreferenceConstants.ANTVIEW_LAST_WORKINGSET_SEARCH_SCOPE) == null) {
-			settings.put(IAntUIPreferenceConstants.ANTVIEW_LAST_WORKINGSET_SEARCH_SCOPE, ""); //$NON-NLS-1$
+			settings.put(IAntUIPreferenceConstants.ANTVIEW_LAST_WORKINGSET_SEARCH_SCOPE, IAntCoreConstants.EMPTY_STRING); 
 		} 
 	}
 
@@ -303,7 +305,7 @@ public class SearchForBuildFilesDialog extends InputDialog {
 	private void setWorkingSet(IWorkingSet set) {
 		if (set == null) {
 			searchScopes= null;
-			workingSetText.setText(""); //$NON-NLS-1$
+			workingSetText.setText(IAntCoreConstants.EMPTY_STRING); 
 			validateInput();
 			return;
 		}
diff --git a/eclipse/plugins/org.eclipse.ant.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ant.ui/META-INF/MANIFEST.MF
index 79bb531..1b7b144 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ant.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ant.ui; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Activator: org.eclipse.ant.internal.ui.AntUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -32,7 +32,7 @@ Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)";resolution:=op
  org.eclipse.jface.text;bundle-version="[3.5.0,4.0.0)";resolution:=optional,
  org.eclipse.ui.workbench.texteditor;bundle-version="[3.5.0,4.0.0)";resolution:=optional,
  org.eclipse.ui.editors;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
- org.apache.ant;bundle-version="1.7.0",
+ org.apache.ant;bundle-version="1.8.2",
  org.eclipse.ant.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
@@ -45,7 +45,7 @@ Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)";resolution:=op
  org.eclipse.jdt.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.team.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ltk.core.refactoring;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildExtraJAR.xml b/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildExtraJAR.xml
index 55cd644..17c9754 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildExtraJAR.xml
+++ b/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildExtraJAR.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-    Copyright (c) 2005, 2009 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2005, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildRemoteExtraJAR.xml b/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildRemoteExtraJAR.xml
index 9c485e4..3f7383f 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildRemoteExtraJAR.xml
+++ b/eclipse/plugins/org.eclipse.ant.ui/buildfiles/buildRemoteExtraJAR.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-    Copyright (c) 2005, 2009 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2005, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ant.ui/plugin.properties b/eclipse/plugins/org.eclipse.ant.ui/plugin.properties
index fdc1ee2..0e9afeb 100644
--- a/eclipse/plugins/org.eclipse.ant.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.ant.ui/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -92,7 +92,7 @@ preferenceKeywords.general=Ant buildfile color
 preferenceKeywords.runtime=ant runtime classpath tasks types properties property
 preferenceKeywords.editor=ant buildfile appearance syntax problems error warning folding color
 preferenceKeywords.formatter=ant format formatter
-preferenceKeywords.codeAssist=ant content complete color
+preferenceKeywords.codeAssist=ant content complete color auto activation trigger
 preferenceKeywords.template=ant templates snippets macros
 
 AntRenameParticipant.name= Ant launch configuration rename participant
diff --git a/eclipse/plugins/org.eclipse.compare.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.compare.core/.settings/org.eclipse.jdt.core.prefs
index 54f4753..4e907f0 100644
--- a/eclipse/plugins/org.eclipse.compare.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.compare.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,17 @@
-#Thu Feb 19 14:39:20 CET 2009
+#Tue Feb 01 14:35:28 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
@@ -18,3 +27,5 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected
 org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.compare.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.compare.core/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..58060f5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.compare.core/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:35:28 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.compare.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.compare.core/META-INF/MANIFEST.MF
index 84ea7ec..9a8a606 100644
--- a/eclipse/plugins/org.eclipse.compare.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.compare.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.compare.core
-Bundle-Version: 3.5.101.qualifier
+Bundle-Version: 3.5.200.qualifier
 Bundle-Activator: org.eclipse.compare.internal.core.ComparePlugin
 Bundle-Vendor: %providerName
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"
diff --git a/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java b/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java
index e458e23..a56285c 100644
--- a/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java
+++ b/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java
@@ -130,7 +130,7 @@ public abstract class LCS {
 			return 0;
 		}
 
-		int d = find_middle_snake(bottoml1, topl1, bottoml2, topl2, V, snake);
+		int d = find_middle_snake(bottoml1, topl1, bottoml2, topl2, V, snake, subMonitor);
 		// System.out.println(snake[0] + " " + snake[1] + " " + snake[2]);
 
 		// need to store these so we don't lose them when they're overwritten by
@@ -188,6 +188,7 @@ public abstract class LCS {
 	 *            to store furthest reaching D-paths
 	 * @param snake should be allocated as int[3], used to store the beginning
 	 *            x, y coordinates and the length of the middle snake
+	 * @subMonitor subMonitor
 	 * 
 	 * @return The number of differences (SES) between l1[bottoml1..topl1] and
 	 *         l2[bottoml2..topl2]
@@ -195,7 +196,8 @@ public abstract class LCS {
 	private int find_middle_snake(
 			int bottoml1, int topl1,
 			int bottoml2, int topl2, 
-			int[][] V, int[] snake) {
+			int[][] V, int[] snake,
+			SubMonitor subMonitor) {
 		int N = topl1 - bottoml1 + 1;
 		int M = topl2 - bottoml2 + 1;
 		// System.out.println("N: " + N + " M: " + M + " bottom: " + bottoml1 +
@@ -324,6 +326,7 @@ public abstract class LCS {
 					end_backward = k - 1;
 				}
 			}
+			worked(subMonitor, 1);
 		}
 
 		/*
diff --git a/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java b/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java
index 88ab17b..27ec848 100644
--- a/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java
+++ b/eclipse/plugins/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java
@@ -14,10 +14,11 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.runtime.Assert;
+
 import org.eclipse.compare.patch.IFilePatchResult;
 import org.eclipse.compare.patch.IHunk;
 import org.eclipse.compare.patch.PatchConfiguration;
-import org.eclipse.core.runtime.Assert;
 
 /**
  * A Hunk describes a range of changed lines and some context lines.
@@ -176,7 +177,6 @@ public class Hunk implements IHunk {
 	public boolean tryPatch(PatchConfiguration configuration, List lines, int shift, int fuzz) {
 		boolean reverse = configuration.isReversed();
 		int pos = getStart(reverse) + shift;
-		int deleteMatches = 0;
 		List contextLines = new ArrayList();
 		boolean contextLinesMatched = true;
 		boolean precedingLinesChecked = false;
@@ -226,7 +226,6 @@ public class Hunk implements IHunk {
 				if (pos < 0 || pos >= lines.size()) // out of the file
 					return false;
 				if (linesMatch(configuration, line, (String) lines.get(pos))) {
-					deleteMatches++;
 					pos++;
 					continue; // line matched, continue with the next one
 				}
@@ -234,10 +233,7 @@ public class Hunk implements IHunk {
 				// We must remove all lines at once, return false if this
 				// fails. In other words, all lines considered for deletion
 				// must be found one by one.
-
-				// if (deleteMatches <= 0)
 				return false;
-				// pos++;
 			} else if (isAddedDelimeter(controlChar, reverse)) {
 				
 				if (precedingLinesChecked && !contextLinesMatched && contextLines.size() > 0)
diff --git a/eclipse/plugins/org.eclipse.compare.win32/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.compare.win32/.settings/org.eclipse.jdt.core.prefs
index b88ad0d..32a523d 100644
--- a/eclipse/plugins/org.eclipse.compare.win32/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.compare.win32/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Mon Jun 09 13:49:08 EDT 2008
+#Tue Feb 01 14:37:12 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -7,6 +15,9 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
 org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.compare.win32/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.compare.win32/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..44fca4e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.compare.win32/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:37:12 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.compare.win32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.compare.win32/META-INF/MANIFEST.MF
index ddc1d40..9e6ffa1 100644
--- a/eclipse/plugins/org.eclipse.compare.win32/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.compare.win32/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.compare.win32;singleton:=true
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.200.qualifier
 Bundle-Vendor: %providerName
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Eclipse-PlatformFilter: (osgi.os=win32)
diff --git a/eclipse/plugins/org.eclipse.compare.win32/plugin.xml b/eclipse/plugins/org.eclipse.compare.win32/plugin.xml
index 8d58497..76b02ea 100644
--- a/eclipse/plugins/org.eclipse.compare.win32/plugin.xml
+++ b/eclipse/plugins/org.eclipse.compare.win32/plugin.xml
@@ -1,5 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
+<?eclipse version="3.2"?>
<!--
+    Copyright (c) 2008, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
    <extension
          point="org.eclipse.compare.contentMergeViewers">
@@ -17,7 +27,7 @@
     <extension
          point="org.eclipse.core.contenttype.contentTypes">
       <content-type
-            file-extensions="doc"
+            file-extensions="doc, docx"
             id="org.eclipse.compare.wordDoc"
             name="%wordDocumentContentTypeName">
       </content-type>
diff --git a/eclipse/plugins/org.eclipse.compare.win32/src/org/eclipse/compare/internal/win32/WordComparison.java b/eclipse/plugins/org.eclipse.compare.win32/src/org/eclipse/compare/internal/win32/WordComparison.java
index fc63c28..def6628 100644
--- a/eclipse/plugins/org.eclipse.compare.win32/src/org/eclipse/compare/internal/win32/WordComparison.java
+++ b/eclipse/plugins/org.eclipse.compare.win32/src/org/eclipse/compare/internal/win32/WordComparison.java
@@ -154,9 +154,13 @@ public class WordComparison {
 
 	/**
 	 * Open the file at the given path as a document in Word.
-	 * @param filePath the path of the file containing the document
-	 * @param inplace whether Word is to be opened in-place or in a separate window
-	 * @throws SWTException if the document could not be opened for some reason
+	 * 
+	 * @param filePath
+	 *            the path of the file containing the document
+	 * @param inplace
+	 *            whether Word is to be opened in-place or in a separate window
+	 * @throws SWTException
+	 *             if the document could not be opened for some reason
 	 */
 	public void openDocument(String filePath, boolean inplace) throws SWTException {
 		resetSite(inplace ? filePath : null);
@@ -175,12 +179,18 @@ public class WordComparison {
 	}
 
 	/**
-	 * Compares the base document with the revised document and saves the comparison in the
-	 * working copy which can then be opened using openDocument.
-	 * @param baseDocument the base document
-	 * @param revisedDocument the revised document
-	 * @param workingCopy the working copy (will be overwritten)
-	 * @throws SWTException if an SWT error occurs
+	 * Compares the base document with the revised document and saves the
+	 * comparison in the working copy which can then be opened using
+	 * openDocument.
+	 * 
+	 * @param baseDocument
+	 *            the base document
+	 * @param revisedDocument
+	 *            the revised document
+	 * @param workingCopy
+	 *            the working copy (will be overwritten)
+	 * @throws SWTException
+	 *             if an SWT error occurs
 	 */
 	public void createWorkingCopy(String baseDocument, String revisedDocument, String workingCopy) throws SWTException {
 		resetSite(null);
@@ -197,35 +207,42 @@ public class WordComparison {
 						throw new SWTException(NLS.bind(CompareWin32Messages.WordComparison_6, workingCopy));
 					varResult.dispose();
 				} finally {
-					try {
-						closeDocument(activeDocument, document);
-					} catch (SWTException e) {
-						// We don't want to throw the exception as we may mask another exception
-						Activator.log(e);
-					} finally {
-						activeDocument.dispose();
-					}
+					closeDocument(activeDocument, document);
 				}
 			} finally {
-				try {
-					closeDocument(document, null);
-				} catch (SWTException e) {
-					// We don't want to throw the exception as we may mask another exception
-					Activator.log(e);
-				} finally {
-					document.dispose();
-				}
+				closeDocument(document, null);
 			}
 		} finally {
-			application.dispose();
+			try {
+				//Quit application without saving any changes
+				int [] ids = application.getIDsOfNames(new String [] {"Quit", "SaveChanges"});
+				final Variant wdDoNotSaveChanges = new Variant(0);
+				Variant varResult = application.invoke(ids[0], new Variant[]{ wdDoNotSaveChanges }, new int[] {ids[1]});
+				if (varResult != null) {
+					varResult.dispose();
+				}
+			} catch (SWTException e) {
+				// We don't want to throw the exception as we may mask another exception
+				Activator.log(e);
+			} finally {
+				application.dispose();
+			}
 		}
 	}
 	
 	private void closeDocument(OleAutomation document, OleAutomation reference) {
 		// Close the first document: destination.Close()
-		Variant varResult = invoke(document, reference, "Close"); //$NON-NLS-1$
-		if (varResult != null) {
-			varResult.dispose();
+		try {
+			Variant varResult = invoke(document, reference, "Close"); //$NON-NLS-1$
+			if (varResult != null) {
+				varResult.dispose();
+			}
+		} catch (SWTException e) {
+			// We don't want to throw the exception as we may mask another
+			// exception
+			Activator.log(e);
+		} finally {
+			document.dispose();
 		}
 	}
 
@@ -310,12 +327,7 @@ public class WordComparison {
 
 	private void disposeSite() {
 		if (document != null) {
-			try {
-				closeDocument(document, null);
-			} catch (SWTException e) {
-				Activator.log(e);
-			}
-			document.dispose();
+			closeDocument(document, null);
 			document = null;
 			OleAutomation application = createApplication();
 			try {
diff --git a/eclipse/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.core.prefs
index 14b3cf7..e4b1b80 100644
--- a/eclipse/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,9 @@
-#Wed Nov 15 09:22:56 EST 2006
+#Tue Feb 01 14:33:15 CET 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
diff --git a/eclipse/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..6e0451f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.compare/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:33:15 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.compare/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.compare/META-INF/MANIFEST.MF
index 511a171..8577810 100644
--- a/eclipse/plugins/org.eclipse.compare/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.compare/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.compare; singleton:=true
-Bundle-Version: 3.5.101.qualifier
+Bundle-Version: 3.5.200.qualifier
 Bundle-Activator: org.eclipse.compare.internal.CompareUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
index fe7268f..0ded697 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,9 +11,9 @@
 package org.eclipse.compare; 
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
 import java.util.ResourceBundle;
 
+import org.eclipse.compare.contentmergeviewer.ContentMergeViewer;
 import org.eclipse.compare.contentmergeviewer.IFlushable;
 import org.eclipse.compare.internal.BinaryCompareViewer;
 import org.eclipse.compare.internal.ChangePropertyAction;
@@ -24,6 +24,7 @@ import org.eclipse.compare.internal.ComparePreferencePage;
 import org.eclipse.compare.internal.CompareStructureViewerSwitchingPane;
 import org.eclipse.compare.internal.CompareUIPlugin;
 import org.eclipse.compare.internal.ICompareUIConstants;
+import org.eclipse.compare.internal.IFlushable2;
 import org.eclipse.compare.internal.OutlineViewerCreator;
 import org.eclipse.compare.internal.Utilities;
 import org.eclipse.compare.internal.ViewerDescriptor;
@@ -177,7 +178,7 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit
 	 * @since 3.3
 	 */
 	public static final String PROP_SELECTED_EDITION= ICompareUIConstants.PROP_SELECTED_EDITION;
-		
+
 	private static final String COMPARE_EDITOR_IMAGE_NAME= "eview16/compare_view.gif"; //$NON-NLS-1$
 	private static Image fgTitleImage;
 	
@@ -193,8 +194,8 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit
 	private String fTitle;
 	private ListenerList fListenerList= new ListenerList();
 	private CompareNavigator fNavigator;
-	private boolean fDirty= false;
-	private ArrayList fDirtyViewers= new ArrayList();
+	private ContentMergeViewer fLeftDirtyViewer = null;
+	private ContentMergeViewer fRightDirtyViewer = null;
 	private IPropertyChangeListener fDirtyStateListener;
 	
 	boolean fStructureCompareOnSingleClick= true;
@@ -1016,18 +1017,38 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit
 	}
 	
 	/**
-	 * Returns <code>true</code> if there are unsaved changes.
-	 * The value returned is the value of the <code>DIRTY_STATE</code> property of this input object.
-	 
-	 * Returns <code>true</code> if this input has unsaved changes,
-	 * that is if <code>setDirty(true)</code> has been called.
-	 * Subclasses don't have to override if the functionality provided by <code>setDirty</code>
-	 * is sufficient.
-	 *
+	 * Returns <code>true</code> if there are unsaved changes in either left or
+	 * right side. The value returned is the value of the
+	 * <code>DIRTY_STATE</code> property of this input object.
+	 * 
+	 * Returns <code>true</code> if left or right side has unsaved changes
+	 * Subclasses don't have to override if the functionality provided by
+	 * <code>setDirty</code> is sufficient.
+	 * 
 	 * @return <code>true</code> if there are changes that need to be saved
 	 */
 	public boolean isSaveNeeded() {
-		return fDirty || fDirtyViewers.size() > 0;
+		return isLeftSaveNeeded() || isRightSaveNeeded();
+	}
+
+	/**
+	 * Returns <code>true</code> if there are unsaved changes for left side.
+	 * 
+	 * @return <code>true</code> if there are changes that need to be saved
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	protected boolean isLeftSaveNeeded() {
+		return fLeftDirtyViewer != null;
+	}
+
+	/**
+	 * Returns <code>true</code> if there are unsaved changes for right side.
+	 * 
+	 * @return <code>true</code> if there are changes that need to be saved
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	protected boolean isRightSaveNeeded() {
+		return fRightDirtyViewer != null;
 	}
 	
 	/**
@@ -1044,31 +1065,142 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit
 	}
 		
 	/**
-	 * Sets the dirty state of this input to the given
-	 * value and sends out a <code>PropertyChangeEvent</code> if the new value differs from the old value.
-	 *
-	 * @param dirty the dirty state for this compare input
+	 * Sets the dirty state of this input to the given value and sends out a
+	 * <code>PropertyChangeEvent</code> if the new value differs from the old
+	 * value. Direct calling this method with parameter dirty equal to
+	 * <code>false</code> when there are unsaved changes in viewers, results in
+	 * inconsistent state. The dirty state of compare input should be based only
+	 * on the information if there are changes in viewers for left or right
+	 * side.
+	 * 
+	 * @param dirty
+	 *            the dirty state for this compare input
 	 */
 	public void setDirty(boolean dirty) {
-		boolean oldDirty = fDirty || fDirtyViewers.size() > 0;
-		fDirty= dirty;
-		if (!fDirty)
-			fDirtyViewers.clear();
-		if (oldDirty != dirty)
-			Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, Boolean.valueOf(oldDirty), Boolean.valueOf(dirty));
+		boolean oldDirty = isSaveNeeded();
+		boolean newDirty = dirty;
+		if (!newDirty) {
+			fLeftDirtyViewer = null;
+			fRightDirtyViewer = null;
+		} else {
+			if (fLeftDirtyViewer == null)
+				fLeftDirtyViewer = (ContentMergeViewer) fContentInputPane
+						.getViewer();
+			if (fRightDirtyViewer == null)
+				fRightDirtyViewer = (ContentMergeViewer) fContentInputPane
+						.getViewer();
+		}
+		if (oldDirty != isSaveNeeded()) {
+			Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, Boolean.valueOf(oldDirty), Boolean.valueOf(isSaveNeeded()));
+		}
 	}
-	
+
+	/**
+	 * Sets the dirty state of left site of this input to the given value and
+	 * sends out a <code>PropertyChangeEvent</code> if the new value for whole
+	 * input differs from the old value. Direct calling this method with
+	 * parameter dirty equal to <code>false</code> when there are unsaved
+	 * changes in left viewer, results in inconsistent state. The dirty state of
+	 * compare input should be based only on the information if there are
+	 * changes in viewers for left side.
+	 * 
+	 * @param dirty
+	 *            the dirty state for this compare input
+	 * @since 3.7
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended
+	 *             by clients.
+	 */
+	protected void setLeftDirty(boolean dirty) {
+		boolean oldDirty = isSaveNeeded();
+		boolean newDirty = dirty;
+		if (!newDirty) {
+			fLeftDirtyViewer = null;
+		} else {
+			if (fLeftDirtyViewer == null)
+				fLeftDirtyViewer = (ContentMergeViewer) fContentInputPane
+						.getViewer();
+
+		}
+		if (oldDirty != isSaveNeeded()) {
+			Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE,
+					Boolean.valueOf(oldDirty), Boolean.valueOf(isSaveNeeded()));
+		}
+	}
+
+	/**
+	 * Sets the dirty state of right site of this input to the given value and
+	 * sends out a <code>PropertyChangeEvent</code> if the new value for whole
+	 * input differs from the old value. Direct calling this method with
+	 * parameter dirty equal to <code>false</code> when there are unsaved
+	 * changes in right viewer, results in inconsistent state. The dirty state
+	 * of compare input should be based only on the information if there are
+	 * changes in viewers for right side.
+	 * 
+	 * @param dirty
+	 *            the dirty state for this compare input
+	 * @since 3.7
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @nooverride This method is not intended to be re-implemented or extended
+	 *             by clients.
+	 */
+	protected void setRightDirty(boolean dirty) {
+		boolean oldDirty = isSaveNeeded();
+		boolean newDirty = dirty;
+		if (!newDirty) {
+			fRightDirtyViewer = null;
+		} else {
+			if (fRightDirtyViewer == null)
+				fRightDirtyViewer = (ContentMergeViewer) fContentInputPane
+						.getViewer();
+		}
+		if (oldDirty != isSaveNeeded()) {
+			Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE,
+					Boolean.valueOf(oldDirty), Boolean.valueOf(isSaveNeeded()));
+		}
+	}
+
+	/**
+	 * Method adds or removes viewers that changed left or right side of this
+	 * compare input. Any modification of any of the list of viewers may result
+	 * in dirty state change.
+	 * 
+	 * @param source
+	 *            the object that fired <code>PropertyChangeEvent</code>
+	 *            modifying the dirty state
+	 * @param dirty
+	 *            value that describes if the changes were added or removed
+	 */
 	private void setDirty(Object source, boolean dirty) {
 		Assert.isNotNull(source);
-		boolean oldDirty= fDirty || fDirtyViewers.size() > 0;
-		if (dirty)
-			fDirtyViewers.add(source);
-		else
-			fDirtyViewers.remove(source);
-		boolean newDirty= fDirty || fDirtyViewers.size() > 0;
-		if (DEBUG) System.out.println("setDirty("+source+", "+dirty+"): " + newDirty); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		if (oldDirty != newDirty)
+		boolean oldDirty = isSaveNeeded();
+		ContentMergeViewer cmv = (ContentMergeViewer) source;
+		if (dirty) {
+			if (cmv.internalIsLeftDirty()) {
+				if (fLeftDirtyViewer == null) {
+					fLeftDirtyViewer = cmv;
+				}
+			}
+			if (cmv.internalIsRightDirty()) {
+				if (fRightDirtyViewer == null) {
+					fRightDirtyViewer = cmv;
+				}
+			}
+		} else {
+			if (!cmv.internalIsLeftDirty()) {
+				fLeftDirtyViewer = null;
+			}
+			if (!cmv.internalIsRightDirty()) {
+				fRightDirtyViewer = null;
+			}
+		}
+		boolean newDirty = isSaveNeeded();
+		if (DEBUG) {
+			System.out.println("setDirty(" + source + ", " + dirty + "): " + newDirty); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+		if (oldDirty != newDirty) {
 			Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, Boolean.valueOf(oldDirty), Boolean.valueOf(newDirty));
+		}
 	}
 	
 	/* (non Javadoc)
@@ -1129,7 +1261,31 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit
 		flushViewer(fStructurePane2, monitor);
 		flushViewer(fContentInputPane, monitor);
 	}
-		
+	
+	/**
+	 * @param monitor
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	protected void flushLeftViewers(IProgressMonitor monitor) {
+		// flush changes in left dirty viewer
+		flushViewer(fStructureInputPane, monitor);
+		flushViewer(fStructurePane1, monitor);
+		flushViewer(fStructurePane2, monitor);
+		flushLeftViewer(fContentInputPane, monitor);
+	}
+
+	/**
+	 * @param monitor
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	protected void flushRightViewers(IProgressMonitor monitor) {
+		// flush changes in right dirty viewer
+		flushViewer(fStructureInputPane, monitor);
+		flushViewer(fStructurePane1, monitor);
+		flushViewer(fStructurePane2, monitor);
+		flushRightViewer(fContentInputPane, monitor);
+	}
+	
 	private static void flushViewer(CompareViewerPane pane, IProgressMonitor pm) {
 		if (pane != null) {
 			IFlushable flushable = (IFlushable)Utilities.getAdapter(pane, IFlushable.class);
@@ -1138,6 +1294,22 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit
 		}
 	}
 	
+	private static void flushLeftViewer(CompareViewerPane pane, IProgressMonitor pm) {
+		if (pane != null) {
+			IFlushable2 flushable = (IFlushable2)Utilities.getAdapter(pane, IFlushable2.class);
+			if (flushable != null)
+				flushable.flushLeft(pm);
+		}
+	}
+
+	private static void flushRightViewer(CompareViewerPane pane, IProgressMonitor pm) {
+		if (pane != null) {
+			IFlushable2 flushable = (IFlushable2)Utilities.getAdapter(pane, IFlushable2.class);
+			if (flushable != null)
+				flushable.flushRight(pm);
+		}
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareContainer#addCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInput, org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener)
 	 */
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
index 71fe641..47e6f5a 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
@@ -12,6 +12,7 @@ package org.eclipse.compare;
 
 import org.eclipse.compare.contentmergeviewer.IFlushable;
 import org.eclipse.compare.internal.CompareMessages;
+import org.eclipse.compare.internal.IFlushable2;
 import org.eclipse.compare.internal.NullViewer;
 import org.eclipse.compare.internal.Utilities;
 import org.eclipse.compare.structuremergeviewer.ICompareInput;
@@ -354,6 +355,14 @@ public abstract class CompareViewerSwitchingPane extends CompareViewerPane {
 					return flushable;
 			}
 		}
+		if (adapter == IFlushable2.class) {
+			Viewer v= getViewer();
+			if (v != null) {
+				IFlushable2 flushable = (IFlushable2)Utilities.getAdapter(v, IFlushable2.class);
+				if (flushable != null)
+					return flushable;
+			}
+		}
 		return super.getAdapter(adapter);
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
index b025807..ddb220a 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
@@ -20,24 +20,10 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.ResourceBundle;
 
-import org.eclipse.compare.internal.CompareContainer;
-import org.eclipse.compare.internal.CompareUIPlugin;
-import org.eclipse.compare.internal.ResizableDialog;
-import org.eclipse.compare.internal.StructureCreatorDescriptor;
-import org.eclipse.compare.internal.Utilities;
-import org.eclipse.compare.structuremergeviewer.DiffNode;
-import org.eclipse.compare.structuremergeviewer.ICompareInput;
-import org.eclipse.compare.structuremergeviewer.IStructureComparator;
-import org.eclipse.compare.structuremergeviewer.IStructureCreator;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.Viewer;
+import com.ibm.icu.text.DateFormat;
+import com.ibm.icu.text.MessageFormat;
+import com.ibm.icu.util.Calendar;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
@@ -58,9 +44,26 @@ import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.swt.widgets.Widget;
 
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.text.MessageFormat;
-import com.ibm.icu.util.Calendar;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.compare.internal.CompareContainer;
+import org.eclipse.compare.internal.CompareUIPlugin;
+import org.eclipse.compare.internal.ResizableDialog;
+import org.eclipse.compare.internal.StructureCreatorDescriptor;
+import org.eclipse.compare.internal.Utilities;
+import org.eclipse.compare.structuremergeviewer.DiffNode;
+import org.eclipse.compare.structuremergeviewer.ICompareInput;
+import org.eclipse.compare.structuremergeviewer.IStructureComparator;
+import org.eclipse.compare.structuremergeviewer.IStructureCreator;
 
 
 /**
@@ -587,7 +590,7 @@ public class EditionSelectionDialog extends ResizableDialog {
 		ArrayList result= new ArrayList();
 		if (fMemberSelection != null) {
 			Iterator iter= fArrayList.iterator();
-			for (int i= 0; iter.hasNext(); i++) {
+			while (iter.hasNext()) {
 				Object edition= iter.next();		
 				Object item= fMemberSelection.get(edition);
 				if (item != null)
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
index 031a042..b479316 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
@@ -25,16 +25,14 @@ import org.eclipse.compare.internal.CompareEditor;
 import org.eclipse.compare.internal.CompareHandlerService;
 import org.eclipse.compare.internal.CompareMessages;
 import org.eclipse.compare.internal.ICompareUIConstants;
+import org.eclipse.compare.internal.IFlushable2;
+import org.eclipse.compare.internal.ISavingSaveable;
 import org.eclipse.compare.internal.MergeViewerContentProvider;
 import org.eclipse.compare.internal.Utilities;
 import org.eclipse.compare.internal.ViewerSwitchingCancelled;
 import org.eclipse.compare.structuremergeviewer.Differencer;
 import org.eclipse.compare.structuremergeviewer.ICompareInput;
 import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.IExecutionListener;
-import org.eclipse.core.commands.NotHandledException;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -42,6 +40,7 @@ import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ActionContributionItem;
 import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.LegacyActionTools;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -71,9 +70,9 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Sash;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.ISaveablesSource;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.Saveable;
 
 /**
  * An abstract compare and merge viewer with two side-by-side content areas
@@ -102,7 +101,7 @@ import org.eclipse.ui.commands.ICommandService;
  * @see TextMergeViewer
  */
 public abstract class ContentMergeViewer extends ContentViewer
-					implements IPropertyChangeNotifier, IFlushable {
+					implements IPropertyChangeNotifier, IFlushable, IFlushable2 {
 	
 	/* package */ static final int HORIZONTAL= 1;
 	/* package */ static final int VERTICAL= 2;
@@ -295,10 +294,6 @@ public abstract class ContentMergeViewer extends ContentViewer
 	private boolean fIsLeftDirty;
 	private boolean fIsRightDirty;
 
-	private boolean fIsSaving;
-	private ICommandService fCommandService;
-	private IExecutionListener fExecutionListener;
-	
 	private CompareHandlerService fHandlerService;
 
 	// SWT widgets
@@ -371,43 +366,8 @@ public abstract class ContentMergeViewer extends ContentViewer
 		
 		fIsLeftDirty = false;
 		fIsRightDirty = false;
-
-		fIsSaving = false;
-		fCommandService = (ICommandService)PlatformUI.getWorkbench().getAdapter(ICommandService.class);
-		if (fCommandService != null) {
-			fCommandService.addExecutionListener(getExecutionListener());
-		}
 	}
 
-	private IExecutionListener getExecutionListener() {
-		if (fExecutionListener == null) {
-			fExecutionListener = new IExecutionListener() {
-				public void preExecute(String commandId, ExecutionEvent event) {
-					if (IWorkbenchCommandConstants.FILE_SAVE.equals(commandId)
-							|| IWorkbenchCommandConstants.FILE_SAVE_ALL.equals(commandId))
-						fIsSaving = true;
-				}
-
-				public void postExecuteSuccess(String commandId, Object returnValue) {
-					if (IWorkbenchCommandConstants.FILE_SAVE.equals(commandId)
-							|| IWorkbenchCommandConstants.FILE_SAVE_ALL.equals(commandId))
-						fIsSaving= false;
-				}
-
-				public void postExecuteFailure(String commandId, ExecutionException exception) {
-					if (IWorkbenchCommandConstants.FILE_SAVE.equals(commandId)
-							|| IWorkbenchCommandConstants.FILE_SAVE_ALL.equals(commandId))
-						fIsSaving= false;
-				}
-
-				public void notHandled(String commandId, NotHandledException exception) {
-					// not needed
-				}
-			};
-		}
-		return fExecutionListener;
-	}
-	
 	//---- hooks ---------------------
 	
 	/**
@@ -1037,12 +997,6 @@ public abstract class ContentMergeViewer extends ContentViewer
 			fHVSashCursor= null;
 		}
 		
-		if (fCommandService != null) {
-			fCommandService.removeExecutionListener(fExecutionListener);
-			fCommandService = null;
-			fExecutionListener = null;
-		}
-
 		super.handleDispose(event);
   	}
   	
@@ -1101,7 +1055,7 @@ public abstract class ContentMergeViewer extends ContentViewer
 				fAncestorLabel.setImage(ancestorImage);
 			String ancestorLabel = content.getAncestorLabel(input);
 			if (ancestorLabel != null)
-				fAncestorLabel.setText(TextProcessor.process(ancestorLabel));
+				fAncestorLabel.setText(LegacyActionTools.escapeMnemonics(TextProcessor.process(ancestorLabel)));
 		}
 		if (fLeftLabel != null) {
 			Image leftImage = content.getLeftImage(input);
@@ -1109,7 +1063,7 @@ public abstract class ContentMergeViewer extends ContentViewer
 				fLeftLabel.setImage(leftImage);
 			String leftLabel = content.getLeftLabel(input);
 			if (leftLabel != null)
-				fLeftLabel.setText(leftLabel);
+				fLeftLabel.setText(LegacyActionTools.escapeMnemonics(leftLabel));
 		}
 		if (fRightLabel != null) {
 			Image rightImage = content.getRightImage(input);
@@ -1117,7 +1071,7 @@ public abstract class ContentMergeViewer extends ContentViewer
 				fRightLabel.setImage(rightImage);
 			String rightLabel = content.getRightLabel(input);
 			if (rightLabel != null)
-				fRightLabel.setText(rightLabel);
+				fRightLabel.setText(LegacyActionTools.escapeMnemonics(rightLabel));
 		}
 	}
 		
@@ -1168,9 +1122,8 @@ public abstract class ContentMergeViewer extends ContentViewer
 	protected void setLeftDirty(boolean dirty) {
 		if (isLeftDirty() != dirty) {
 			fIsLeftDirty = dirty;
-			// Only fire the event if the combined dirty state has changed
-			if (!isRightDirty())
-				fireDirtyState(dirty);
+			// Always fire the event if the dirty state has changed
+			fireDirtyState(dirty);
 		}
 	}
 	
@@ -1186,9 +1139,8 @@ public abstract class ContentMergeViewer extends ContentViewer
 	protected void setRightDirty(boolean dirty) {
 		if (isRightDirty() != dirty) {
 			fIsRightDirty = dirty;
-			// Only fire the event if the combined dirty state has changed
-			if (!isLeftDirty())
-				fireDirtyState(dirty);
+			// Always fire the event if the dirty state has changed
+			fireDirtyState(dirty);
 		}
 	}
 	
@@ -1215,7 +1167,7 @@ public abstract class ContentMergeViewer extends ContentViewer
 	public final void flush(IProgressMonitor monitor) {
 		flushContent(getInput(), monitor);
 	}
-	
+
 	/**
 	 * Flush the modified content back to input elements via the content provider.
 	 * The provided input may be the current input of the viewer or it may be
@@ -1227,31 +1179,56 @@ public abstract class ContentMergeViewer extends ContentViewer
 	 * @since 3.3
 	 */
 	protected void flushContent(Object input, IProgressMonitor monitor) {
-				
-		// write back modified contents
-		IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider();
-		
-		boolean leftEmpty= content.getLeftContent(input) == null;
-		boolean rightEmpty= content.getRightContent(input) == null;
+		flushLeftSide(input, monitor);
+		flushRightSide(input, monitor);
+	}
+
+
+	void flushLeftSide(Object input, IProgressMonitor monitor) {
+		IMergeViewerContentProvider content = (IMergeViewerContentProvider) getContentProvider();
+
+		boolean rightEmpty = content.getRightContent(input) == null;
 
 		if (getCompareConfiguration().isLeftEditable() && isLeftDirty()) {
-			byte[] bytes= getContents(true);
+			byte[] bytes = getContents(true);
 			if (rightEmpty && bytes != null && bytes.length == 0)
-				bytes= null;
+				bytes = null;
 			setLeftDirty(false);
 			content.saveLeftContent(input, bytes);
 		}
-		
+	}
+
+	void flushRightSide(Object input, IProgressMonitor monitor) {
+		IMergeViewerContentProvider content = (IMergeViewerContentProvider) getContentProvider();
+
+		boolean leftEmpty = content.getLeftContent(input) == null;
+
 		if (getCompareConfiguration().isRightEditable() && isRightDirty()) {
-			byte[] bytes= getContents(false);
+			byte[] bytes = getContents(false);
 			if (leftEmpty && bytes != null && bytes.length == 0)
-				bytes= null;
+				bytes = null;
 			setRightDirty(false);
 			content.saveRightContent(input, bytes);
 		}
 	}
 
 	/**
+	 * @param monitor
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public void flushLeft(IProgressMonitor monitor) {
+		flushLeftSide(getInput(), monitor);
+	}
+
+	/**
+	 * @param monitor
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public void flushRight(IProgressMonitor monitor) {
+		flushRightSide(getInput(), monitor);
+	}
+
+	/**
 	 * Return the dirty state of the right side of this viewer.
 	 * @return the dirty state of the right side of this viewer
 	 * @since 3.3
@@ -1261,6 +1238,15 @@ public abstract class ContentMergeViewer extends ContentViewer
 	}
 
 	/**
+	 * @return the dirty state of the right side of this viewer
+	 * @since 3.7
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public boolean internalIsRightDirty() {
+		return isRightDirty();
+	}
+
+	/**
 	 * Return the dirty state of the left side of this viewer.
 	 * @return the dirty state of the left side of this viewer
 	 * @since 3.3
@@ -1270,6 +1256,15 @@ public abstract class ContentMergeViewer extends ContentViewer
 	}
 
 	/**
+	 * @return the dirty state of the left side of this viewer
+	 * @since 3.7
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public boolean internalIsLeftDirty() {
+		return isLeftDirty();
+	}
+
+	/**
 	 * Handle a change to the given input reported from an {@link org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener}.
 	 * This class registers a listener with its input and reports any change events through
 	 * this method. By default, this method prompts for any unsaved changes and then refreshes
@@ -1279,7 +1274,7 @@ public abstract class ContentMergeViewer extends ContentViewer
 	protected void handleCompareInputChange() {
 		// before setting the new input we have to save the old
 		Object input = getInput();
-		if (!fIsSaving && (isLeftDirty() || isRightDirty())) {
+		if (!isSaving() && (isLeftDirty() || isRightDirty())) {
 			
 			if (Utilities.RUNNING_TESTS) {
 				if (Utilities.TESTING_FLUSH_ON_COMPARE_INPUT_CHANGE) {
@@ -1317,4 +1312,32 @@ public abstract class ContentMergeViewer extends ContentViewer
 	CompareHandlerService getCompareHandlerService() {
 		return fHandlerService;
 	}
+
+	/**
+	 * @return true if any of the Saveables is being saved
+	 */
+	private boolean isSaving() {
+		ICompareContainer container = fCompareConfiguration.getContainer();
+		ISaveablesSource source = null;
+		if (container instanceof ISaveablesSource) {
+			source = (ISaveablesSource) container;
+		} else {
+			IWorkbenchPart part = container.getWorkbenchPart();
+			if (part instanceof ISaveablesSource) {
+				source = (ISaveablesSource) part;
+			}
+		}
+		if (source != null) {
+			Saveable[] saveables = source.getSaveables();
+			for (int i = 0; i < saveables.length; i++) {
+				if (saveables[i] instanceof ISavingSaveable) {
+					ISavingSaveable saveable = (ISavingSaveable) saveables[i];
+					if (saveable.isSaving())
+						return true;
+				}
+			}
+		}
+		return false;
+	} 
+
 }
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
index 5bd32a6..77dd1a5 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
@@ -4838,15 +4838,9 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
 		return fMerger.virtualToRealPosition(contributor, v);
 	}
 	
-	/* (non-Javadoc)
-	 * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#flushContent(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	protected void flushContent(Object oldInput, IProgressMonitor monitor) {
-				
-		// check and handle any shared buffers
+	void flushLeftSide(Object oldInput, IProgressMonitor monitor){
 		IMergeViewerContentProvider content= getMergeContentProvider();
 		Object leftContent = content.getLeftContent(oldInput);
-		Object rightContent = content.getRightContent(oldInput);
 		
 		if (leftContent != null && getCompareConfiguration().isLeftEditable() && isLeftDirty()) {
 			if (fLeftContributor.hasSharedDocument(leftContent)) {
@@ -4855,13 +4849,36 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
 			}
 		}
 		
+		if (!(content instanceof MergeViewerContentProvider) || isLeftDirty()) {
+			super.flushLeftSide(oldInput, monitor);
+		}
+	}
+	
+	void flushRightSide(Object oldInput, IProgressMonitor monitor){
+		IMergeViewerContentProvider content= getMergeContentProvider();
+		Object rightContent = content.getRightContent(oldInput);
+		
 		if (rightContent != null && getCompareConfiguration().isRightEditable() && isRightDirty()) {
 			if (fRightContributor.hasSharedDocument(rightContent)) {
 				if (flush(fRightContributor))
 					setRightDirty(false);
 			}
 		}
-		
+
+		if (!(content instanceof MergeViewerContentProvider) || isRightDirty()) {
+			super.flushRightSide(oldInput, monitor);
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#flushContent(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected void flushContent(Object oldInput, IProgressMonitor monitor) {
+		flushLeftSide(oldInput, monitor);
+		flushRightSide(oldInput, monitor);
+
+		IMergeViewerContentProvider content = getMergeContentProvider();
+
 		if (!(content instanceof MergeViewerContentProvider) || isLeftDirty() || isRightDirty()) {
 			super.flushContent(oldInput, monitor);
 		}
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
index 9c0f1d6..0a97df8 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2006 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ todayFormat= Today ({0})
 yesterdayFormat= Yesterday ({0})
 dayFormat= {0}
 
-buttonLabel= Restore
+buttonLabel= &Restore
 
 noLocalHistoryError= No deleted resources in local history for selected container.
 replaceError=Cannot replace resource (reason: {0}).
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
index 1ebda98..f3fbc52 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
@@ -342,7 +342,7 @@ public class CompareEditor extends EditorPart implements IReusableEditor, ISavea
 	
 	protected void initializeInBackground(final CompareEditorInput cei, final boolean hadPreviousInput) {
 		// Need to cancel any running jobs associated with the oldInput
-		Job job = new Job(CompareMessages.CompareEditor_0) {
+		Job job = new Job(NLS.bind(CompareMessages.CompareEditor_0, cei.getTitle())) {
 			protected IStatus run(final IProgressMonitor monitor) {
 				final int[] newState = new int[] { ERROR };
 				try {
@@ -366,11 +366,11 @@ public class CompareEditor extends EditorPart implements IReusableEditor, ISavea
 						newState[0] = CANCELED;
 					Display.getDefault().syncExec(new Runnable() {
 						public void run() {
+							if (fPageBook.isDisposed())
+								return;
 							// we need to register the saveable if we had a previous input or if
 							// there are knownSaveables (which means that the workbench called
 							// getSaveables and got an empty list
-							if (monitor.isCanceled() || fPageBook.isDisposed())
-								return;
 							if (hadPreviousInput || (knownSaveables != null && !isAllSaveablesKnown())) {
 								registerSaveable();
 							}
@@ -448,6 +448,12 @@ public class CompareEditor extends EditorPart implements IReusableEditor, ISavea
 					closeEditor();
 				}
 			} else if (fControl == null && getState() != CREATING_CONTROL) {
+				if (getState() == CANCELED) {
+					// Close the editor when we are canceled, even when compare
+					// result has been already prepared
+					closeEditor();
+					return;
+				}
 				// Set the state in case this method gets called again
 				setState(CREATING_CONTROL);
 				if (getSite().getSelectionProvider() == null)
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
index 16f3c6a..451ac3b 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
@@ -98,7 +98,7 @@ NavigationEndDialog_1=Navigation Options
 CompareUIPlugin_0=Opening Compare Editor
 CompareUIPlugin_1=Opening Compare Dialog
 CompareContainer_0=Updating Comparison State
-CompareEditor_0=Initializing Compare Editor
+CompareEditor_0=Initializing Compare Editor for {0}
 CompareEditor_1=Initializing...
 CompareEditor_2=Update comparison {0}
 DocumentMerger_0=Computing Differences...
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
index d9d18b0..f4fe72b 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
@@ -16,19 +16,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import org.eclipse.compare.CompareConfiguration;
-import org.eclipse.compare.IEncodedStreamContentAccessor;
-import org.eclipse.compare.ITypedElement;
-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
-import org.eclipse.compare.internal.core.ComparePlugin;
-import org.eclipse.compare.structuremergeviewer.DiffNode;
-import org.eclipse.compare.structuremergeviewer.Differencer;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.preference.RadioGroupFieldEditor;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
@@ -47,12 +34,28 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.TabFolder;
 import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.preference.RadioGroupFieldEditor;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.PreferenceLinkArea;
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
+import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.IEncodedStreamContentAccessor;
+import org.eclipse.compare.ITypedElement;
+import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
+import org.eclipse.compare.internal.core.ComparePlugin;
+import org.eclipse.compare.structuremergeviewer.DiffNode;
+import org.eclipse.compare.structuremergeviewer.Differencer;
+
 
 public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
 	
@@ -381,7 +384,7 @@ public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
 		
 		PreferenceLinkArea area = new PreferenceLinkArea(composite, SWT.NONE,
 				"org.eclipse.ui.preferencePages.ColorsAndFonts", Utilities.getString("ComparePreferencePage.colorAndFontLink"), //$NON-NLS-1$ //$NON-NLS-2$
-				(IWorkbenchPreferenceContainer) getContainer(), null);
+				(IWorkbenchPreferenceContainer)getContainer(), "selectCategory:org.eclipse.compare.contentmergeviewer.TextMergeViewer"); //$NON-NLS-1$
 
 		GridData data= new GridData(SWT.FILL, SWT.CENTER, false, false);
 		area.getControl().setLayoutData(data);
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
index 4e32e94..f00c768 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IFlushable2.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IFlushable2.java
new file mode 100644
index 0000000..47a5b73
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IFlushable2.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.compare.internal;
+
+import org.eclipse.compare.contentmergeviewer.IFlushable;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * Interface which provides the ability to flush the contents from the specified
+ * side of the viewer.
+ * 
+ * @see IFlushable
+ * 
+ * @since 3.7
+ */
+public interface IFlushable2 {
+	void flushLeft(IProgressMonitor monitor);
+
+	void flushRight(IProgressMonitor monitor);
+}
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavingSaveable.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavingSaveable.java
new file mode 100644
index 0000000..287a78c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavingSaveable.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.compare.internal;
+
+import org.eclipse.ui.Saveable;
+
+/**
+ * Interface defines API for checking if an object, preferably an instance of
+ * {@link Saveable}, is being saved.
+ * 
+ * @since 3.7
+ */
+public interface ISavingSaveable {
+	public boolean isSaving();
+}
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
index 218b351..fe72e6b 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -236,7 +236,7 @@ class ResourceCompareInput extends CompareEditorInput {
 			SelectAncestorDialog dialog =
 				new SelectAncestorDialog(shell, selection);
 			int code = dialog.open();
-			if (code == Window.CANCEL)
+			if (code != Window.OK)
 				return false;
 			
 			fAncestorResource= dialog.ancestorResource;
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java
index a410ea9..2b2e147 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,10 +10,15 @@
  *******************************************************************************/
 package org.eclipse.compare.internal;
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.WhitespaceCharacterPainter;
-
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.ui.editors.text.EditorsUI;
 import org.eclipse.ui.texteditor.AbstractTextEditor;
 
 public class ShowWhitespaceAction extends TextEditorPropertyAction {
@@ -21,13 +26,85 @@ public class ShowWhitespaceAction extends TextEditorPropertyAction {
 	private Map fPainters;
 	private boolean isWhitespaceShowing;
 	private boolean[] fNeedsPainters;
-	
+	/** @since 3.7 */
+	private boolean fShowLeadingSpaces;
+	/** @since 3.7 */
+	private boolean fShowEnclosedSpaces;
+	/** @since 3.7 */
+	private boolean fShowTrailingSpaces;
+	/** @since 3.7 */
+	private boolean fShowLeadingIdeographicSpaces;
+	/** @since 3.7 */
+	private boolean fShowEnclosedIdeographicSpaces;
+	/** @since 3.7 */
+	private boolean fShowTrailingIdeographicSpace;
+	/** @since 3.7 */
+	private boolean fShowLeadingTabs;
+	/** @since 3.7 */
+	private boolean fShowEnclosedTabs;
+	/** @since 3.7 */
+	private boolean fShowTrailingTabs;
+	/** @since 3.7 */
+	private boolean fShowCarriageReturn;
+	/** @since 3.7 */
+	private boolean fShowLineFeed;
+	/** @since 3.7 */
+	private IPreferenceStore fStore = EditorsUI.getPreferenceStore();
+	/** @since 3.7 */
+	private int fAlpha;
+
 	public ShowWhitespaceAction(MergeSourceViewer[] viewers, boolean[] needsPainters) {
 		super(CompareMessages.ShowWhitespaceAction_0, viewers, AbstractTextEditor.PREFERENCE_SHOW_WHITESPACE_CHARACTERS);
 		fNeedsPainters = needsPainters;
 		synchronizeWithPreference();
 	}
 	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.compare.internal.TextEditorPropertyAction#synchronizeWithPreference()
+	 */
+	protected void synchronizeWithPreference() {
+		boolean checked = false;
+		if (fStore != null) {
+			checked = fStore.getBoolean(getPreferenceKey());
+			fShowLeadingSpaces = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LEADING_SPACES);
+			fShowEnclosedSpaces = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_SPACES);
+			fShowTrailingSpaces = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_TRAILING_SPACES);
+			fShowLeadingIdeographicSpaces = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LEADING_IDEOGRAPHIC_SPACES);
+			fShowEnclosedIdeographicSpaces = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES);
+			fShowTrailingIdeographicSpace = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_TRAILING_IDEOGRAPHIC_SPACES);
+			fShowLeadingTabs = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LEADING_TABS);
+			fShowEnclosedTabs = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_TABS);
+			fShowTrailingTabs = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_TRAILING_TABS);
+			fShowCarriageReturn = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_CARRIAGE_RETURN);
+			fShowLineFeed = fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LINE_FEED);
+			fAlpha = fStore.getInt(AbstractTextEditor.PREFERENCE_WHITESPACE_CHARACTER_ALPHA_VALUE);
+		}
+		if (checked != isChecked()) {
+			if (toggleState(checked))
+				setChecked(checked);
+		} else if (fNeedsPainters != null && checked) {
+			hideWhitespace();
+			showWhitespace();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.compare.internal.TextEditorPropertyAction#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+	 */
+	public void propertyChange(PropertyChangeEvent event) {
+		String property = event.getProperty();
+		if (property.equals(getPreferenceKey()) || AbstractTextEditor.PREFERENCE_SHOW_LEADING_SPACES.equals(property) || AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_SPACES.equals(property)
+				|| AbstractTextEditor.PREFERENCE_SHOW_TRAILING_SPACES.equals(property) || AbstractTextEditor.PREFERENCE_SHOW_LEADING_IDEOGRAPHIC_SPACES.equals(property)
+				|| AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES.equals(property) || AbstractTextEditor.PREFERENCE_SHOW_TRAILING_IDEOGRAPHIC_SPACES.equals(property)
+				|| AbstractTextEditor.PREFERENCE_SHOW_LEADING_TABS.equals(property) || AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_TABS.equals(property)
+				|| AbstractTextEditor.PREFERENCE_SHOW_TRAILING_TABS.equals(property) || AbstractTextEditor.PREFERENCE_SHOW_CARRIAGE_RETURN.equals(property)
+				|| AbstractTextEditor.PREFERENCE_SHOW_LINE_FEED.equals(property) || AbstractTextEditor.PREFERENCE_WHITESPACE_CHARACTER_ALPHA_VALUE.equals(property)) {
+			synchronizeWithPreference();
+		}
+	}
+
 	protected boolean toggleState(boolean checked) {
 		if (fNeedsPainters == null)
 			return false; // Not initialized yet
@@ -54,8 +131,15 @@ public class ShowWhitespaceAction extends TextEditorPropertyAction {
 			for (int i = 0; i < viewers.length; i++) {
 				if (fNeedsPainters[i]) {
 					MergeSourceViewer viewer = viewers[i];
-					WhitespaceCharacterPainter painter= new WhitespaceCharacterPainter(viewer.getSourceViewer());
-					viewer.getSourceViewer().addPainter(painter);
+					SourceViewer sourceViewer = viewer.getSourceViewer();
+					WhitespaceCharacterPainter painter;
+					if (fStore != null) {
+						painter = new WhitespaceCharacterPainter(sourceViewer, fShowLeadingSpaces, fShowEnclosedSpaces, fShowTrailingSpaces, fShowLeadingIdeographicSpaces,
+								fShowEnclosedIdeographicSpaces, fShowTrailingIdeographicSpace, fShowLeadingTabs, fShowEnclosedTabs, fShowTrailingTabs, fShowCarriageReturn, fShowLineFeed, fAlpha);
+					} else {
+						painter = new WhitespaceCharacterPainter(sourceViewer);
+					}
+					sourceViewer.addPainter(painter);
 					painters.put(viewer, painter);
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
index 7a582c1..fe48c72 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,8 @@ import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.net.SocketTimeoutException;
+import java.net.URL;
 import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -36,6 +38,7 @@ import org.eclipse.compare.ITypedElement;
 import org.eclipse.compare.SharedDocumentAdapter;
 import org.eclipse.compare.contentmergeviewer.IDocumentRange;
 import org.eclipse.compare.internal.core.patch.HunkResult;
+import org.eclipse.compare.internal.patch.PatchMessages;
 import org.eclipse.compare.patch.IHunk;
 import org.eclipse.compare.structuremergeviewer.DiffNode;
 import org.eclipse.compare.structuremergeviewer.ICompareInput;
@@ -64,6 +67,8 @@ import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.util.IPropertyChangeListener;
@@ -146,19 +151,17 @@ public class Utilities {
 		// Legacy listeners may expect to get notified in the UI thread
 		Runnable runnable = new Runnable() {
 			public void run() {
-				if (listenerList != null) {
-					Object[] listeners= listenerList.getListeners();
-					for (int i= 0; i < listeners.length; i++) {
-						final IPropertyChangeListener listener= (IPropertyChangeListener) listeners[i];
-						SafeRunner.run(new ISafeRunnable() {
-							public void run() throws Exception {
-								listener.propertyChange(event);
-							}
-							public void handleException(Throwable exception) {
-								// Logged by SafeRunner
-							}
-						});
-					}
+				Object[] listeners= listenerList.getListeners();
+				for (int i= 0; i < listeners.length; i++) {
+					final IPropertyChangeListener listener= (IPropertyChangeListener) listeners[i];
+					SafeRunner.run(new ISafeRunnable() {
+						public void run() throws Exception {
+							listener.propertyChange(event);
+						}
+						public void handleException(Throwable exception) {
+							// Logged by SafeRunner
+						}
+					});
 				}
 			}
 		};
@@ -861,4 +864,52 @@ public class Utilities {
 		}
 		return false;
 	}
+
+	/**
+	 * Load content of file under <code>url</code> displaying progress on given
+	 * context.
+	 * 
+	 * @param url
+	 * @param context
+	 * @return the content of file under given URL, or <code>null</code> if URL
+	 *         could not be loaded
+	 * @throws InvocationTargetException
+	 *             thrown on errors while URL loading
+	 * @throws OperationCanceledException
+	 * @throws InterruptedException
+	 */
+	public static String getURLContents(final URL url, IRunnableContext context)
+			throws InvocationTargetException, OperationCanceledException,
+			InterruptedException {
+		final String[] result = new String[1];
+		context.run(true, true, new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor)
+					throws InvocationTargetException, InterruptedException {
+				SubMonitor progress = SubMonitor.convert(monitor,
+						PatchMessages.InputPatchPage_URLConnecting, 100);
+				try {
+					URLConnection connection = url.openConnection();
+					progress.worked(10);
+					if (monitor.isCanceled())
+						throw new OperationCanceledException();
+					setReadTimeout(connection, 60 * 1000);
+					progress.setTaskName(PatchMessages.InputPatchPage_URLFetchingContent);
+					String enc = connection.getContentEncoding();
+					if (enc == null)
+						enc = ResourcesPlugin.getEncoding();
+					result[0] = Utilities.readString(
+							connection.getInputStream(), enc,
+							connection.getContentLength(),
+							progress.newChild(90));
+				} catch (SocketTimeoutException e) {
+					throw new InvocationTargetException(e);
+				} catch (IOException e) {
+					throw new InvocationTargetException(e);
+				} finally {
+					monitor.done();
+				}
+			}
+		});
+		return result[0];
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java
index e89c3dd..463d8d1 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java
@@ -15,25 +15,16 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.compare.CompareConfiguration;
-import org.eclipse.compare.contentmergeviewer.ITokenComparator;
-import org.eclipse.compare.internal.CompareContentViewerSwitchingPane;
-import org.eclipse.compare.internal.CompareMessages;
-import org.eclipse.compare.internal.ComparePreferencePage;
-import org.eclipse.compare.internal.CompareUIPlugin;
-import org.eclipse.compare.internal.DocLineComparator;
-import org.eclipse.compare.internal.MergeViewerContentProvider;
-import org.eclipse.compare.internal.Utilities;
-import org.eclipse.compare.internal.core.LCS;
-import org.eclipse.compare.rangedifferencer.IRangeComparator;
-import org.eclipse.compare.rangedifferencer.RangeDifference;
-import org.eclipse.compare.rangedifferencer.RangeDifferencer;
-import org.eclipse.compare.structuremergeviewer.Differencer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+
 import org.eclipse.jface.operation.IRunnableWithProgress;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.BadPositionCategoryException;
 import org.eclipse.jface.text.IDocument;
@@ -41,11 +32,25 @@ import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.Position;
 import org.eclipse.jface.text.Region;
 import org.eclipse.jface.text.TextUtilities;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
+
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.IProgressService;
 
+import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.contentmergeviewer.ITokenComparator;
+import org.eclipse.compare.internal.CompareContentViewerSwitchingPane;
+import org.eclipse.compare.internal.CompareMessages;
+import org.eclipse.compare.internal.ComparePreferencePage;
+import org.eclipse.compare.internal.CompareUIPlugin;
+import org.eclipse.compare.internal.DocLineComparator;
+import org.eclipse.compare.internal.MergeViewerContentProvider;
+import org.eclipse.compare.internal.Utilities;
+import org.eclipse.compare.internal.core.LCS;
+import org.eclipse.compare.rangedifferencer.IRangeComparator;
+import org.eclipse.compare.rangedifferencer.RangeDifference;
+import org.eclipse.compare.rangedifferencer.RangeDifferencer;
+import org.eclipse.compare.structuremergeviewer.Differencer;
+
 /**
  * A document merger manages the differences between two documents
  * for either a 2-way or 3-way comparison. 
@@ -1113,7 +1118,7 @@ public class DocumentMerger {
 		int h= 1;
 		if (fAllDiffs != null) {
 			Iterator e= fAllDiffs.iterator();
-			for (int i= 0; e.hasNext(); i++) {
+			while (e.hasNext()) {
 				Diff diff= (Diff) e.next();
 				h+= diff.getMaxDiffHeight();
 			}
@@ -1128,7 +1133,7 @@ public class DocumentMerger {
 		int h= 1;
 		if (fAllDiffs != null) {
 			Iterator e= fAllDiffs.iterator();
-			for (int i= 0; e.hasNext(); i++) {
+			while (e.hasNext()) {
 				Diff diff= (Diff) e.next();
 				h+= diff.getRightHeight();
 			}
@@ -1180,7 +1185,7 @@ public class DocumentMerger {
 		int y= 0;
 		if (fAllDiffs != null) {
 			Iterator e= fAllDiffs.iterator();
-			for (int i= 0; e.hasNext(); i++) {
+			while (e.hasNext()) {
 				Diff diff= (Diff) e.next();
 				int h= synchronizedScrolling ? diff.getMaxDiffHeight()
 											  : diff.getRightHeight();
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
index f460911..7248fcc 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
@@ -21,9 +21,7 @@ import java.io.Reader;
 import java.io.StringReader;
 import java.lang.reflect.InvocationTargetException;
 import java.net.MalformedURLException;
-import java.net.SocketTimeoutException;
 import java.net.URL;
-import java.net.URLConnection;
 
 import org.eclipse.compare.internal.ICompareContextIds;
 import org.eclipse.compare.internal.Utilities;
@@ -34,15 +32,12 @@ import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
@@ -264,9 +259,17 @@ public class InputPatchPage extends WizardPage {
 			} else if (inputMethod==URL) {
 				String patchFileURL = fPatchURLField.getText();
 				if (patchFileURL != null) {
-					String contents = getURLContents(patchFileURL);
-					if (contents != null)
-						reader = new StringReader(contents);
+					try {
+						String contents = Utilities.getURLContents(new URL(
+								patchFileURL), getContainer());
+						if (contents != null)
+							reader = new StringReader(contents);
+					} catch (MalformedURLException e) {
+						// ignore as we tested it with modify listener on combo
+					} catch (InvocationTargetException e) { // ignore
+					} catch (OperationCanceledException e) { // ignore
+					} catch (InterruptedException e) { // ignore
+					}
 				}
 				fPatchSource= PatchMessages.InputPatchPage_URL_title;
 			} else if (inputMethod==WORKSPACE) {
@@ -307,43 +310,6 @@ public class InputPatchPage extends WizardPage {
 			}
 		}
 	}
-	
-	private String getURLContents(String patchFileURL) {
-		final URL url;
-		try {
-			url = new URL(patchFileURL);
-			final String[] result= new String[1];
-			try {
-				getContainer().run(true, true, new IRunnableWithProgress() {
-					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-						SubMonitor progress = SubMonitor.convert(monitor, PatchMessages.InputPatchPage_URLConnecting, 100);
-						try {
-							URLConnection connection = url.openConnection();
-							progress.worked(10);
-							if (monitor.isCanceled())
-								throw new OperationCanceledException();
-							Utilities.setReadTimeout(connection, 60*1000);
-							progress.setTaskName(PatchMessages.InputPatchPage_URLFetchingContent);
-							String enc = connection.getContentEncoding();
-							if (enc == null)
-								enc = ResourcesPlugin.getEncoding();
-							result[0] = Utilities.readString(connection.getInputStream(), enc, connection.getContentLength(), progress.newChild(90));
-						} catch (SocketTimeoutException e) { // timeout
-						} catch (IOException e) { //ignore
-						}
-						monitor.done();
-					}
-				});
-				return result[0];
-			} catch (OperationCanceledException e) { //ignore
-			} catch (InvocationTargetException e) { //ignore
-			} catch (InterruptedException e) { //ignore
-			}
-		} catch (MalformedURLException e) {
-			// ignore as we tested it with modify listener on combo
-		}
-		return null;
-	}
 
 	/* (non-JavaDoc)
 	 * Method declared in IWizardPage.
diff --git a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java
index 7bbaa32..0f73174 100644
--- a/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java
+++ b/eclipse/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java
@@ -10,14 +10,26 @@
  *******************************************************************************/
 package org.eclipse.compare.internal.patch;
 
-import org.eclipse.compare.internal.ICompareContextIds;
-import org.eclipse.compare.internal.Utilities;
+import com.ibm.icu.text.MessageFormat;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
+
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -28,21 +40,14 @@ import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.wizard.IWizardPage;
 import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
+
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.model.WorkbenchContentProvider;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 import org.eclipse.ui.views.navigator.ResourceComparator;
 
-import com.ibm.icu.text.MessageFormat;
+import org.eclipse.compare.internal.ICompareContextIds;
+import org.eclipse.compare.internal.Utilities;
 
 /***
  * This page only shows up if the user is trying to apply
@@ -123,7 +128,7 @@ public class PatchTargetPage extends WizardPage {
 
 		// if selected target is file ensure that patch file
 		// contains only a patch for a single file
-		if (fPatcher.getTarget() instanceof IFile && fPatcher.getDiffs().length > 1) {
+		if (!fPatcher.isWorkspacePatch() && fPatcher.getTarget() instanceof IFile && fPatcher.getDiffs().length > 1) {
 			InputPatchPage inputPage = (InputPatchPage) getWizard().getPage(InputPatchPage.INPUTPATCHPAGE_NAME);
 			String source = ""; //$NON-NLS-1$
 			switch (inputPage.getInputMethod()) {
diff --git a/eclipse/plugins/org.eclipse.compare/component.xml b/eclipse/plugins/org.eclipse.compare/component.xml
index 4f87b72..b6cb15c 100644
--- a/eclipse/plugins/org.eclipse.compare/component.xml
+++ b/eclipse/plugins/org.eclipse.compare/component.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
+<!--
+    Copyright (c) 2005, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <component xmlns="http://eclipse.org/component"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://eclipse.org/component ../component.xsd "
diff --git a/eclipse/plugins/org.eclipse.compare/plugin.properties b/eclipse/plugins/org.eclipse.compare/plugin.properties
index a5fb23f..11d1bdd 100644
--- a/eclipse/plugins/org.eclipse.compare/plugin.properties
+++ b/eclipse/plugins/org.eclipse.compare/plugin.properties
@@ -145,7 +145,7 @@ ComparePreferencePage.previewAncestor= 1\n2\n3\nconflicting change\n4\n5
 ComparePreferencePage.previewLeft= 1\n2\noutgoing addition\n3\noutgoing change\n4\npseudo conflict\n5
 ComparePreferencePage.previewRight= 1\nincoming addition\nincoming addition\n2\n3\nincoming change\n4\npseudo conflict\n5
 
-ComparePreferencePage.colorAndFontLink=See '<a>Colors and Fonts</a>' preferences for text compare colors and fonts.
+ComparePreferencePage.colorAndFontLink=See <a>''{0}''</a> preferences for text compare colors and fonts.
 
 textCompareAppearance.label=Text Compare
 
diff --git a/eclipse/plugins/org.eclipse.compare/plugin.xml b/eclipse/plugins/org.eclipse.compare/plugin.xml
index 55dd505..63ae78a 100644
--- a/eclipse/plugins/org.eclipse.compare/plugin.xml
+++ b/eclipse/plugins/org.eclipse.compare/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2001, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
 
 <!-- Compare extension point definitions -->
diff --git a/eclipse/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd b/eclipse/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd
index 644461f..5ecec8d 100644
--- a/eclipse/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd
+++ b/eclipse/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.compare" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
-         <meta.schema plugin="org.eclipse.compare" id="structureMergeViewers" name="StructureMerge Viewers"/>
+         <meta.schema plugin="org.eclipse.compare" id="structureMergeViewers" name="Structure Merge Viewers"/>
       </appInfo>
       <documentation>
          This extension point allows a plug-in to register compare/merge 
@@ -170,7 +170,7 @@ viewer for zip archives.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2000, 2009 IBM Corporation and others.<br>
+         Copyright (c) 2000, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
       </documentation>
    </annotation>
diff --git a/eclipse/plugins/org.eclipse.compare/scripts/exportplugin.xml b/eclipse/plugins/org.eclipse.compare/scripts/exportplugin.xml
index 1d4e050..18f0bd3 100644
--- a/eclipse/plugins/org.eclipse.compare/scripts/exportplugin.xml
+++ b/eclipse/plugins/org.eclipse.compare/scripts/exportplugin.xml
@@ -1,3 +1,13 @@
+<!--
+    Copyright (c) 2001, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
 <project name="org.eclipse.compare" default="export" basedir="..">
 	<target name="init">
 		<tstamp/>
diff --git a/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java b/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java
index fdcc471..0de8832 100644
--- a/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java
+++ b/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/ParameterizedCommand.java
@@ -545,23 +545,17 @@ public final class ParameterizedCommand implements Comparable {
 			if (parameterizations != null) {
 				nameBuffer.append(" ("); //$NON-NLS-1$
 				final int parameterizationCount = parameterizations.length;
-				for (int i = 0; i < parameterizationCount; i++) {
-					final Parameterization parameterization = parameterizations[i];
-					nameBuffer
-							.append(parameterization.getParameter().getName());
-					nameBuffer.append(": "); //$NON-NLS-1$
-					try {
-						nameBuffer.append(parameterization.getValueName());
-					} catch (final ParameterValuesException e) {
-						/*
-						 * Just let it go for now. If someone complains we can
-						 * add more info later.
-						 */
-					}
-
-					// If there is another item, append a separator.
-					if (i + 1 < parameterizationCount) {
-						nameBuffer.append(", "); //$NON-NLS-1$
+				if(parameterizationCount == 1) {
+					appendParameter(nameBuffer, parameterizations[0], false);
+				}else {
+					for (int i = 0; i < parameterizationCount; i++) {
+						
+						appendParameter(nameBuffer, parameterizations[i], true);
+	
+						// If there is another item, append a separator.
+						if (i + 1 < parameterizationCount) {
+							nameBuffer.append(", "); //$NON-NLS-1$
+						}
 					}
 				}
 				nameBuffer.append(')');
@@ -571,6 +565,24 @@ public final class ParameterizedCommand implements Comparable {
 		return name;
 	}
 
+	private void appendParameter(final StringBuffer nameBuffer,
+			final Parameterization parameterization, boolean shouldAppendName) {
+		
+		if(shouldAppendName) {
+			nameBuffer
+					.append(parameterization.getParameter().getName());
+			nameBuffer.append(": "); //$NON-NLS-1$
+		}
+		try {
+			nameBuffer.append(parameterization.getValueName());
+		} catch (final ParameterValuesException e) {
+			/*
+			 * Just let it go for now. If someone complains we can
+			 * add more info later.
+			 */
+		}
+	}
+
 	/**
 	 * Returns the parameter map, as can be used to construct an
 	 * <code>ExecutionEvent</code>.
diff --git a/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java b/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java
index 57450ea..4364814 100644
--- a/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java
+++ b/eclipse/plugins/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Tasktop Technologies -  Bug 323444 - [Undo] [Commands] java.util.ConcurrentModificationException 
+ *     		when trying to get the undo history from a source viewer
  *******************************************************************************/
 package org.eclipse.core.commands.operations;
 
@@ -551,8 +553,8 @@ public final class DefaultOperationHistory implements IOperationHistory {
 		 */
 
 		List filtered = new ArrayList();
-		Iterator iterator = list.iterator();
 		synchronized (undoRedoHistoryLock) {
+			Iterator iterator = list.iterator();
 			while (iterator.hasNext()) {
 				IUndoableOperation operation = (IUndoableOperation) iterator
 						.next();
diff --git a/eclipse/plugins/org.eclipse.core.contenttype/.classpath b/eclipse/plugins/org.eclipse.core.contenttype/.classpath
index ce73933..2fbb7a2 100644
--- a/eclipse/plugins/org.eclipse.core.contenttype/.classpath
+++ b/eclipse/plugins/org.eclipse.core.contenttype/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.jdt.core.prefs
index 78da440..dacd400 100644
--- a/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,17 @@
-#Fri Feb 20 11:51:06 CET 2009
+#Tue Feb 01 14:51:01 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -151,7 +160,12 @@ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
 org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
@@ -331,3 +345,5 @@ org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
 org.eclipse.jdt.core.formatter.tabulation.char=tab
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..cded36c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:51:01 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.core.contenttype/src/org/eclipse/core/runtime/content/XMLContentDescriber.java b/eclipse/plugins/org.eclipse.core.contenttype/src/org/eclipse/core/runtime/content/XMLContentDescriber.java
index b7ce359..42e2693 100644
--- a/eclipse/plugins/org.eclipse.core.contenttype/src/org/eclipse/core/runtime/content/XMLContentDescriber.java
+++ b/eclipse/plugins/org.eclipse.core.contenttype/src/org/eclipse/core/runtime/content/XMLContentDescriber.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -186,10 +186,12 @@ public class XMLContentDescriber extends TextContentDescriber implements ITextCo
 		if (encodingPos == -1)
 			return null;
 		char quoteChar = '"';
-		int firstQuote = firstLine.indexOf(quoteChar, encodingPos);
-		if (firstQuote == -1) {
+		int firstQuote = firstLine.indexOf('"', encodingPos);
+		int firstApostrophe = firstLine.indexOf('\'', encodingPos);
+		//use apostrophe if there is no quote, or an apostrophe comes first
+		if (firstQuote == -1 || (firstApostrophe != -1 && firstApostrophe < firstQuote)) {
 			quoteChar = '\'';
-			firstQuote = firstLine.indexOf(quoteChar, encodingPos);
+			firstQuote = firstApostrophe;
 		}
 		if (firstQuote == -1 || firstLine.length() == firstQuote + 1)
 			return null;
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanListPropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanListPropertyDecorator.java
index 8328dc5..d54bbdc 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanListPropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanListPropertyDecorator.java
@@ -21,7 +21,6 @@ import org.eclipse.core.databinding.beans.IBeanValueProperty;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.ListDiff;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.databinding.property.list.ListProperty;
@@ -71,8 +70,8 @@ public class BeanListPropertyDecorator extends ListProperty implements
 	}
 
 	public IBeanListProperty values(IBeanValueProperty property) {
-		return new BeanListPropertyDecorator(super.values(property), property
-				.getPropertyDescriptor());
+		return new BeanListPropertyDecorator(super.values(property),
+				property.getPropertyDescriptor());
 	}
 
 	public PropertyDescriptor getPropertyDescriptor() {
@@ -89,14 +88,6 @@ public class BeanListPropertyDecorator extends ListProperty implements
 				propertyDescriptor);
 	}
 
-	public IObservableFactory listFactory() {
-		return delegate.listFactory();
-	}
-
-	public IObservableFactory listFactory(Realm realm) {
-		return delegate.listFactory(realm);
-	}
-
 	public IObservableList observeDetail(IObservableValue master) {
 		return new BeanObservableListDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanMapPropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanMapPropertyDecorator.java
index b1ba7a0..e7b47c2 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanMapPropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanMapPropertyDecorator.java
@@ -21,7 +21,6 @@ import org.eclipse.core.databinding.beans.IBeanValueProperty;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
 import org.eclipse.core.databinding.observable.map.MapDiff;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.map.IMapProperty;
 import org.eclipse.core.databinding.property.map.MapProperty;
@@ -79,8 +78,8 @@ public class BeanMapPropertyDecorator extends MapProperty implements
 	}
 
 	public IBeanMapProperty values(IBeanValueProperty property) {
-		return new BeanMapPropertyDecorator(super.values(property), property
-				.getPropertyDescriptor());
+		return new BeanMapPropertyDecorator(super.values(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IObservableMap observe(Object source) {
@@ -93,14 +92,6 @@ public class BeanMapPropertyDecorator extends MapProperty implements
 				propertyDescriptor);
 	}
 
-	public IObservableFactory mapFactory() {
-		return delegate.mapFactory();
-	}
-
-	public IObservableFactory mapFactory(Realm realm) {
-		return delegate.mapFactory(realm);
-	}
-
 	public IObservableMap observeDetail(IObservableValue master) {
 		return new BeanObservableMapDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanPropertyHelper.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanPropertyHelper.java
index 92e8199..83d1ebf 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanPropertyHelper.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanPropertyHelper.java
@@ -48,6 +48,11 @@ public class BeanPropertyHelper {
 			PropertyDescriptor propertyDescriptor, Object value) {
 		try {
 			Method writeMethod = propertyDescriptor.getWriteMethod();
+			if (null == writeMethod) {
+				throw new IllegalArgumentException(
+						"Missing public setter method for " //$NON-NLS-1$
+								+ propertyDescriptor.getName() + " property"); //$NON-NLS-1$
+			}
 			if (!writeMethod.isAccessible()) {
 				writeMethod.setAccessible(true);
 			}
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanSetPropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanSetPropertyDecorator.java
index c384f6a..3b52f7c 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanSetPropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanSetPropertyDecorator.java
@@ -20,7 +20,6 @@ import org.eclipse.core.databinding.beans.IBeanMapProperty;
 import org.eclipse.core.databinding.beans.IBeanSetProperty;
 import org.eclipse.core.databinding.beans.IBeanValueProperty;
 import org.eclipse.core.databinding.observable.Realm;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.databinding.observable.set.SetDiff;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -76,8 +75,8 @@ public class BeanSetPropertyDecorator extends SetProperty implements
 	}
 
 	public IBeanMapProperty values(IBeanValueProperty property) {
-		return new BeanMapPropertyDecorator(super.values(property), property
-				.getPropertyDescriptor());
+		return new BeanMapPropertyDecorator(super.values(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IObservableSet observe(Object source) {
@@ -90,14 +89,6 @@ public class BeanSetPropertyDecorator extends SetProperty implements
 				propertyDescriptor);
 	}
 
-	public IObservableFactory setFactory() {
-		return delegate.setFactory();
-	}
-
-	public IObservableFactory setFactory(Realm realm) {
-		return delegate.setFactory(realm);
-	}
-
 	public IObservableSet observeDetail(IObservableValue master) {
 		return new BeanObservableSetDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanValuePropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanValuePropertyDecorator.java
index 5469453..034afba 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanValuePropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/BeanValuePropertyDecorator.java
@@ -22,7 +22,6 @@ import org.eclipse.core.databinding.beans.IBeanValueProperty;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.value.IValueProperty;
@@ -73,8 +72,8 @@ public class BeanValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanValueProperty value(IBeanValueProperty property) {
-		return new BeanValuePropertyDecorator(super.value(property), property
-				.getPropertyDescriptor());
+		return new BeanValuePropertyDecorator(super.value(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IBeanListProperty list(String propertyName) {
@@ -87,8 +86,8 @@ public class BeanValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanListProperty list(IBeanListProperty property) {
-		return new BeanListPropertyDecorator(super.list(property), property
-				.getPropertyDescriptor());
+		return new BeanListPropertyDecorator(super.list(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IBeanSetProperty set(String propertyName) {
@@ -101,8 +100,8 @@ public class BeanValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanSetProperty set(IBeanSetProperty property) {
-		return new BeanSetPropertyDecorator(super.set(property), property
-				.getPropertyDescriptor());
+		return new BeanSetPropertyDecorator(super.set(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IBeanMapProperty map(String propertyName) {
@@ -117,8 +116,8 @@ public class BeanValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanMapProperty map(IBeanMapProperty property) {
-		return new BeanMapPropertyDecorator(super.map(property), property
-				.getPropertyDescriptor());
+		return new BeanMapPropertyDecorator(super.map(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IObservableValue observe(Object source) {
@@ -131,14 +130,6 @@ public class BeanValuePropertyDecorator extends ValueProperty implements
 				delegate.observe(realm, source), propertyDescriptor);
 	}
 
-	public IObservableFactory valueFactory() {
-		return delegate.valueFactory();
-	}
-
-	public IObservableFactory valueFactory(Realm realm) {
-		return delegate.valueFactory(realm);
-	}
-
 	public IObservableValue observeDetail(IObservableValue master) {
 		return new BeanObservableValueDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoListPropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoListPropertyDecorator.java
index ae3e33c..a77ced2 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoListPropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoListPropertyDecorator.java
@@ -21,7 +21,6 @@ import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.ListDiff;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.databinding.property.list.ListProperty;
@@ -71,8 +70,8 @@ public class PojoListPropertyDecorator extends ListProperty implements
 	}
 
 	public IBeanListProperty values(IBeanValueProperty property) {
-		return new PojoListPropertyDecorator(super.values(property), property
-				.getPropertyDescriptor());
+		return new PojoListPropertyDecorator(super.values(property),
+				property.getPropertyDescriptor());
 	}
 
 	public PropertyDescriptor getPropertyDescriptor() {
@@ -89,14 +88,6 @@ public class PojoListPropertyDecorator extends ListProperty implements
 				propertyDescriptor);
 	}
 
-	public IObservableFactory listFactory() {
-		return delegate.listFactory();
-	}
-
-	public IObservableFactory listFactory(Realm realm) {
-		return delegate.listFactory(realm);
-	}
-
 	public IObservableList observeDetail(IObservableValue master) {
 		return new BeanObservableListDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoMapPropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoMapPropertyDecorator.java
index 8efcd2f..fa318a9 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoMapPropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoMapPropertyDecorator.java
@@ -21,7 +21,6 @@ import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
 import org.eclipse.core.databinding.observable.map.MapDiff;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.map.IMapProperty;
 import org.eclipse.core.databinding.property.map.MapProperty;
@@ -79,8 +78,8 @@ public class PojoMapPropertyDecorator extends MapProperty implements
 	}
 
 	public IBeanMapProperty values(IBeanValueProperty property) {
-		return new PojoMapPropertyDecorator(super.values(property), property
-				.getPropertyDescriptor());
+		return new PojoMapPropertyDecorator(super.values(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IObservableMap observe(Object source) {
@@ -93,14 +92,6 @@ public class PojoMapPropertyDecorator extends MapProperty implements
 				propertyDescriptor);
 	}
 
-	public IObservableFactory mapFactory() {
-		return delegate.mapFactory();
-	}
-
-	public IObservableFactory mapFactory(Realm realm) {
-		return delegate.mapFactory(realm);
-	}
-
 	public IObservableMap observeDetail(IObservableValue master) {
 		return new BeanObservableMapDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoSetPropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoSetPropertyDecorator.java
index c0e6b3c..ebe54a9 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoSetPropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoSetPropertyDecorator.java
@@ -20,7 +20,6 @@ import org.eclipse.core.databinding.beans.IBeanSetProperty;
 import org.eclipse.core.databinding.beans.IBeanValueProperty;
 import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.databinding.observable.set.SetDiff;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -76,8 +75,8 @@ public class PojoSetPropertyDecorator extends SetProperty implements
 	}
 
 	public IBeanMapProperty values(IBeanValueProperty property) {
-		return new BeanMapPropertyDecorator(super.values(property), property
-				.getPropertyDescriptor());
+		return new BeanMapPropertyDecorator(super.values(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IObservableSet observe(Object source) {
@@ -90,14 +89,6 @@ public class PojoSetPropertyDecorator extends SetProperty implements
 				propertyDescriptor);
 	}
 
-	public IObservableFactory setFactory() {
-		return delegate.setFactory();
-	}
-
-	public IObservableFactory setFactory(Realm realm) {
-		return delegate.setFactory(realm);
-	}
-
 	public IObservableSet observeDetail(IObservableValue master) {
 		return new BeanObservableSetDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoValuePropertyDecorator.java b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoValuePropertyDecorator.java
index d7acb6f..af410e7 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoValuePropertyDecorator.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.beans/src/org/eclipse/core/internal/databinding/beans/PojoValuePropertyDecorator.java
@@ -22,7 +22,6 @@ import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.value.IValueProperty;
@@ -73,8 +72,8 @@ public class PojoValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanValueProperty value(IBeanValueProperty property) {
-		return new PojoValuePropertyDecorator(super.value(property), property
-				.getPropertyDescriptor());
+		return new PojoValuePropertyDecorator(super.value(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IBeanListProperty list(String propertyName) {
@@ -87,8 +86,8 @@ public class PojoValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanListProperty list(IBeanListProperty property) {
-		return new BeanListPropertyDecorator(super.list(property), property
-				.getPropertyDescriptor());
+		return new BeanListPropertyDecorator(super.list(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IBeanSetProperty set(String propertyName) {
@@ -101,8 +100,8 @@ public class PojoValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanSetProperty set(IBeanSetProperty property) {
-		return new BeanSetPropertyDecorator(super.set(property), property
-				.getPropertyDescriptor());
+		return new BeanSetPropertyDecorator(super.set(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IBeanMapProperty map(String propertyName) {
@@ -117,8 +116,8 @@ public class PojoValuePropertyDecorator extends ValueProperty implements
 	}
 
 	public IBeanMapProperty map(IBeanMapProperty property) {
-		return new BeanMapPropertyDecorator(super.map(property), property
-				.getPropertyDescriptor());
+		return new BeanMapPropertyDecorator(super.map(property),
+				property.getPropertyDescriptor());
 	}
 
 	public IObservableValue observe(Object source) {
@@ -131,14 +130,6 @@ public class PojoValuePropertyDecorator extends ValueProperty implements
 				delegate.observe(realm, source), propertyDescriptor);
 	}
 
-	public IObservableFactory valueFactory() {
-		return delegate.valueFactory();
-	}
-
-	public IObservableFactory valueFactory(Realm realm) {
-		return delegate.valueFactory(realm);
-	}
-
 	public IObservableValue observeDetail(IObservableValue master) {
 		return new BeanObservableValueDecorator(delegate.observeDetail(master),
 				propertyDescriptor);
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.databinding.observable/META-INF/MANIFEST.MF
index a99b010..1bdf4a1 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.observable/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.databinding.observable
-Bundle-Version: 1.3.0.qualifier
+Bundle-Version: 1.4.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/DecoratingObservableCollection.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/DecoratingObservableCollection.java
index 2129e08..de13bd0 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/DecoratingObservableCollection.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/DecoratingObservableCollection.java
@@ -117,9 +117,12 @@ public class DecoratingObservableCollection extends DecoratingObservable
 		return decorated.getElementType();
 	}
 
-	public boolean equals(Object o) {
+	public boolean equals(Object obj) {
 		getterCalled();
-		return decorated.equals(o);
+		if (this == obj) {
+			return true;
+		}
+		return decorated.equals(obj);
 	}
 
 	public int hashCode() {
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/WritableList.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/WritableList.java
index 8302f6e..7d447a5 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/WritableList.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/list/WritableList.java
@@ -12,6 +12,7 @@
  *     Brad Reynolds - bug 147515
  *     Sebastian Fuchs <spacehorst at gmail.com> - bug 243848
  *     Matthew Hall - bugs 208858, 213145, 243848
+ *     Ovidio Mallo - bug 332367
  *******************************************************************************/
 package org.eclipse.core.databinding.observable.list;
 
@@ -19,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.ListIterator;
 
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.Realm;
@@ -125,9 +127,9 @@ public class WritableList extends ObservableList {
 	public Object set(int index, Object element) {
 		checkRealm();
 		Object oldElement = wrappedList.set(index, element);
-		fireListChange(Diffs.createListDiff(Diffs.createListDiffEntry(index,
-				false, oldElement), Diffs.createListDiffEntry(index, true,
-				element)));
+		fireListChange(Diffs.createListDiff(
+				Diffs.createListDiffEntry(index, false, oldElement),
+				Diffs.createListDiffEntry(index, true, element)));
 		return oldElement;
 	}
 
@@ -147,9 +149,9 @@ public class WritableList extends ObservableList {
 			return wrappedList.get(oldIndex);
 		Object element = wrappedList.remove(oldIndex);
 		wrappedList.add(newIndex, element);
-		fireListChange(Diffs.createListDiff(Diffs.createListDiffEntry(oldIndex,
-				false, element), Diffs.createListDiffEntry(newIndex, true,
-				element)));
+		fireListChange(Diffs.createListDiff(
+				Diffs.createListDiffEntry(oldIndex, false, element),
+				Diffs.createListDiffEntry(newIndex, true, element)));
 		return element;
 	}
 
@@ -259,15 +261,19 @@ public class WritableList extends ObservableList {
 
 	public void clear() {
 		checkRealm();
-		List entries = new ArrayList();
-		for (Iterator it = wrappedList.iterator(); it.hasNext();) {
-			Object element = it.next();
-			// always report 0 as the remove index
-			entries.add(Diffs.createListDiffEntry(0, false, element));
-			it.remove();
+		// We remove the elements from back to front which is typically much
+		// faster on common list implementations like ArrayList.
+		ListDiffEntry[] entries = new ListDiffEntry[wrappedList.size()];
+		int entryIndex = 0;
+		for (ListIterator it = wrappedList.listIterator(wrappedList.size()); it
+				.hasPrevious();) {
+			int elementIndex = it.previousIndex();
+			Object element = it.previous();
+			entries[entryIndex++] = Diffs.createListDiffEntry(elementIndex,
+					false, element);
 		}
-		fireListChange(Diffs.createListDiff((ListDiffEntry[]) entries
-				.toArray(new ListDiffEntry[entries.size()])));
+		wrappedList.clear();
+		fireListChange(Diffs.createListDiff(entries));
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/DecoratingObservableMap.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/DecoratingObservableMap.java
index 2624c00..c0a1bb7 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/DecoratingObservableMap.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/map/DecoratingObservableMap.java
@@ -286,9 +286,12 @@ public class DecoratingObservableMap extends DecoratingObservable implements
 		return values;
 	}
 
-	public boolean equals(Object o) {
+	public boolean equals(Object obj) {
 		getterCalled();
-		return decorated.equals(o);
+		if (this == obj) {
+			return true;
+		}
+		return decorated.equals(obj);
 	}
 
 	public int hashCode() {
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/masterdetail/MasterDetailObservables.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/masterdetail/MasterDetailObservables.java
index e75dc53..203a1cf 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/masterdetail/MasterDetailObservables.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/masterdetail/MasterDetailObservables.java
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Brad Reynolds - bug 147515
  *     Matthew Hall - bug 221704, 226289
+ *     Ovidio Mallo - bugs 305367
  *******************************************************************************/
 
 package org.eclipse.core.databinding.observable.masterdetail;
@@ -21,6 +22,9 @@ import org.eclipse.core.internal.databinding.observable.masterdetail.DetailObser
 import org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableMap;
 import org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet;
 import org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableValue;
+import org.eclipse.core.internal.databinding.observable.masterdetail.ListDetailValueObservableList;
+import org.eclipse.core.internal.databinding.observable.masterdetail.MapDetailValueObservableMap;
+import org.eclipse.core.internal.databinding.observable.masterdetail.SetDetailValueObservableMap;
 
 /**
  * Allows for the observation of an attribute, the detail, of an observable
@@ -29,7 +33,7 @@ import org.eclipse.core.internal.databinding.observable.masterdetail.DetailObser
  * @since 1.0
  */
 public class MasterDetailObservables {
-	
+
 	/**
 	 * Creates a detail observable value from a master observable value and a
 	 * factory. This can be used to create observable values that represent a
@@ -145,4 +149,119 @@ public class MasterDetailObservables {
 		return new DetailObservableMap(detailFactory, master, detailKeyType,
 				detailValueType);
 	}
+
+	/**
+	 * Returns a detail observable list where each element is the detail value
+	 * of the element in the master observable list. The provided factory is
+	 * used to create the detail observable values for every master element
+	 * which then define the elements of the detail list. The detail list
+	 * resides in the same realm as the given master list.
+	 * 
+	 * <p>
+	 * Note that since the values of the returned list are detail values of the
+	 * elements of the master list, the only modifications supported are through
+	 * the {@link IObservableList#set(int, Object)} method. Modifications made
+	 * through the returned list are made through the detail observables created
+	 * by the specified observable factory.
+	 * </p>
+	 * 
+	 * @param masterList
+	 *            The master observable list.
+	 * @param detailFactory
+	 *            The factory for creating {@link IObservableValue} instances
+	 *            for the elements of the master list which then define the
+	 *            elements of the new detail list.
+	 * @param detailType
+	 *            The value type of the detail values, typically of type
+	 *            <code>java.lang.Class</code>. May be <code>null</code>.
+	 * @return A detail observable list with elements which correspond to the
+	 *         detail values of the elements of the master list.
+	 * 
+	 * @since 1.4
+	 */
+	public static IObservableList detailValues(IObservableList masterList,
+			IObservableFactory detailFactory, Object detailType) {
+		return new ListDetailValueObservableList(masterList, detailFactory,
+				detailType);
+	}
+
+	/**
+	 * Returns a detail observable map where the map's key set is the same as
+	 * the given observable set, and where each value is the detail value of the
+	 * element in the master observable set. The provided factory is used to
+	 * create the detail observable values for every master key which then
+	 * define the values of the detail map. The detail map resides in the same
+	 * realm as the given master set.
+	 * 
+	 * <p>
+	 * Note that since the values of the returned map are detail values of the
+	 * elements of the master set, the only modifications supported are through
+	 * the {@link IObservableMap#put(Object, Object)} and
+	 * {@link IObservableMap#putAll(java.util.Map)} methods. Therefore, the
+	 * returned map does not add entries for elements not already contained in
+	 * the master set. Modifications made through the returned detail map are
+	 * made through the detail observables created by the specified observable
+	 * factory.
+	 * </p>
+	 * 
+	 * @param masterSet
+	 *            The master observable set.
+	 * @param detailFactory
+	 *            The factory for creating {@link IObservableValue} instances
+	 *            for the elements of the master set which then define the
+	 *            values of the new detail map.
+	 * @param detailType
+	 *            The value type of the detail values, typically of type
+	 *            <code>java.lang.Class</code>. May be <code>null</code>.
+	 * @return A detail observable map with the given master set as key set and
+	 *         with values which correspond to the detail values of the elements
+	 *         of the master set.
+	 * 
+	 * @since 1.4
+	 */
+	public static IObservableMap detailValues(IObservableSet masterSet,
+			IObservableFactory detailFactory, Object detailType) {
+		return new SetDetailValueObservableMap(masterSet, detailFactory,
+				detailType);
+	}
+
+	/**
+	 * Returns a detail observable map where the map's key set is the same as
+	 * the one of the given master observable map, and where each value is the
+	 * detail value of the corresponding value in the master observable map. The
+	 * provided factory is used to create the detail observable values for every
+	 * master value which then define the values of the detail map. The detail
+	 * map resides in the same realm as the given master map.
+	 * 
+	 * <p>
+	 * Note that since the values of the returned map are detail values of the
+	 * values of the master map, the only modifications supported are through
+	 * the {@link IObservableMap#put(Object, Object)} and
+	 * {@link IObservableMap#putAll(java.util.Map)} methods. Therefore, the
+	 * returned map does not add entries for keys not already contained in the
+	 * master map's key set. Modifications made through the returned detail map
+	 * are made through the detail observables created by the specified
+	 * observable factory.
+	 * </p>
+	 * 
+	 * @param masterMap
+	 *            The master observable map.
+	 * @param detailFactory
+	 *            The factory for creating {@link IObservableValue} instances
+	 *            for the values of the master map which then define the values
+	 *            of the new detail map.
+	 * @param detailType
+	 *            The value type of the detail values, typically of type
+	 *            <code>java.lang.Class</code>. May be <code>null</code>.
+	 * @return A detail observable map with the same key set as the given master
+	 *         observable map and with values which correspond to the detail
+	 *         values of the values of the master map.
+	 * 
+	 * @since 1.4
+	 */
+	public static IObservableMap detailValues(IObservableMap masterMap,
+			IObservableFactory detailFactory, Object detailType) {
+		return new MapDetailValueObservableMap(masterMap, detailFactory,
+				detailType);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableList.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableList.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableSet.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableSet.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableValue.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableValue.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/ListDetailValueObservableList.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/ListDetailValueObservableList.java
new file mode 100644
index 0000000..df985d8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/ListDetailValueObservableList.java
@@ -0,0 +1,351 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Ovidio Mallo and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Ovidio Mallo - initial API and implementation (bug 305367)
+ ******************************************************************************/
+
+package org.eclipse.core.internal.databinding.observable.masterdetail;
+
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.RandomAccess;
+
+import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.DisposeEvent;
+import org.eclipse.core.databinding.observable.IDisposeListener;
+import org.eclipse.core.databinding.observable.IObserving;
+import org.eclipse.core.databinding.observable.IStaleListener;
+import org.eclipse.core.databinding.observable.ObservableTracker;
+import org.eclipse.core.databinding.observable.StaleEvent;
+import org.eclipse.core.databinding.observable.list.AbstractObservableList;
+import org.eclipse.core.databinding.observable.list.IListChangeListener;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.ListChangeEvent;
+import org.eclipse.core.databinding.observable.list.ListDiff;
+import org.eclipse.core.databinding.observable.list.ListDiffEntry;
+import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.IValueChangeListener;
+import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
+import org.eclipse.core.internal.databinding.identity.IdentityMap;
+import org.eclipse.core.internal.databinding.identity.IdentitySet;
+
+/**
+ * @since 1.4
+ */
+public class ListDetailValueObservableList extends AbstractObservableList
+		implements IObserving, RandomAccess {
+
+	private IObservableList masterList;
+
+	private IObservableFactory detailFactory;
+
+	private Object detailType;
+
+	// The list of detail observables.
+	private ArrayList detailList;
+
+	// Maps every master to a DetailEntry containing the detail observable. This
+	// map is used to avoid that multiple detail observables are created for the
+	// same master.
+	private IdentityMap masterDetailMap = new IdentityMap();
+
+	private IdentitySet staleDetailObservables = new IdentitySet();
+
+	private IListChangeListener masterListListener = new IListChangeListener() {
+		public void handleListChange(ListChangeEvent event) {
+			handleMasterListChange(event.diff);
+		}
+	};
+
+	private IValueChangeListener detailValueListener = new IValueChangeListener() {
+		public void handleValueChange(ValueChangeEvent event) {
+			if (!event.getObservable().isStale()) {
+				staleDetailObservables.remove(event.getObservable());
+			}
+			handleDetailValueChange(event);
+		}
+	};
+
+	private IStaleListener masterStaleListener = new IStaleListener() {
+		public void handleStale(StaleEvent staleEvent) {
+			fireStale();
+		}
+	};
+
+	private IStaleListener detailStaleListener = new IStaleListener() {
+		public void handleStale(StaleEvent staleEvent) {
+			boolean wasStale = isStale();
+			staleDetailObservables.add((staleEvent.getObservable()));
+			if (!wasStale) {
+				fireStale();
+			}
+		}
+	};
+
+	/**
+	 * 
+	 * @param masterList
+	 * @param detailFactory
+	 * @param detailType
+	 */
+	public ListDetailValueObservableList(IObservableList masterList,
+			IObservableFactory detailFactory, Object detailType) {
+		super(masterList.getRealm());
+		this.masterList = masterList;
+		this.detailFactory = detailFactory;
+		this.detailType = detailType;
+		this.detailList = new ArrayList();
+
+		// Add change/stale/dispose listeners on the master list.
+		masterList.addListChangeListener(masterListListener);
+		masterList.addStaleListener(masterStaleListener);
+		masterList.addDisposeListener(new IDisposeListener() {
+			public void handleDispose(DisposeEvent event) {
+				ListDetailValueObservableList.this.dispose();
+			}
+		});
+
+		ListDiff initMasterDiff = Diffs.computeListDiff(Collections.EMPTY_LIST,
+				masterList);
+		handleMasterListChange(initMasterDiff);
+	}
+
+	protected synchronized void firstListenerAdded() {
+		for (int i = 0; i < detailList.size(); i++) {
+			IObservableValue detail = (IObservableValue) detailList.get(i);
+			detail.addValueChangeListener(detailValueListener);
+			detail.addStaleListener(detailStaleListener);
+			if (detail.isStale()) {
+				staleDetailObservables.add(detail);
+			}
+		}
+	}
+
+	protected synchronized void lastListenerRemoved() {
+		if (isDisposed()) {
+			return;
+		}
+
+		for (int i = 0; i < detailList.size(); i++) {
+			IObservableValue detail = (IObservableValue) detailList.get(i);
+			detail.removeValueChangeListener(detailValueListener);
+			detail.removeStaleListener(detailStaleListener);
+		}
+		staleDetailObservables.clear();
+	}
+
+	private void handleMasterListChange(ListDiff masterListDiff) {
+		boolean wasStale = isStale();
+
+		boolean hasListeners = hasListeners();
+		ListDiffEntry[] masterEntries = masterListDiff.getDifferences();
+		ListDiffEntry[] detailEntries = new ListDiffEntry[masterEntries.length];
+		for (int i = 0; i < masterEntries.length; i++) {
+			ListDiffEntry masterEntry = masterEntries[i];
+			int index = masterEntry.getPosition();
+
+			Object masterElement = masterEntry.getElement();
+			Object detailValue;
+			if (masterEntry.isAddition()) {
+				detailValue = addDetailObservable(masterElement, index);
+			} else {
+				detailValue = removeDetailObservable(masterElement, index);
+			}
+
+			if (hasListeners) {
+				// Create the corresponding diff for the detail list.
+				detailEntries[i] = Diffs.createListDiffEntry(index,
+						masterEntry.isAddition(), detailValue);
+			}
+		}
+
+		if (hasListeners) {
+			if (!wasStale && isStale()) {
+				fireStale();
+			}
+
+			// Fire a list change event with the adapted diff.
+			fireListChange(Diffs.createListDiff(detailEntries));
+		}
+	}
+
+	private Object addDetailObservable(Object masterElement, int index) {
+		DetailEntry detailEntry = (DetailEntry) masterDetailMap
+				.get(masterElement);
+		if (detailEntry != null) {
+			// If we already have a detail observable for the given
+			// masterElement, we increment the reference count.
+			detailEntry.masterReferenceCount++;
+			detailList.add(index, detailEntry.detailObservable);
+			return detailEntry.detailObservable.getValue();
+		}
+
+		IObservableValue detail = createDetailObservable(masterElement);
+		masterDetailMap.put(masterElement, new DetailEntry(detail));
+
+		detailList.add(index, detail);
+
+		if (hasListeners()) {
+			detail.addValueChangeListener(detailValueListener);
+			detail.addStaleListener(detailStaleListener);
+			if (detail.isStale()) {
+				staleDetailObservables.add(detail);
+			}
+		}
+
+		return detail.getValue();
+	}
+
+	private Object removeDetailObservable(Object masterElement, int index) {
+		IObservableValue detail = (IObservableValue) detailList.remove(index);
+		Object detailValue = detail.getValue();
+
+		DetailEntry detailEntry = (DetailEntry) masterDetailMap
+				.get(masterElement);
+
+		// We may only dispose the detail observable ASA there are no more
+		// masters referencing it.
+		detailEntry.masterReferenceCount--;
+		if (detailEntry.masterReferenceCount == 0) {
+			masterDetailMap.remove(masterElement);
+			staleDetailObservables.remove(detail);
+			detail.dispose();
+		}
+
+		return detailValue;
+	}
+
+	private void handleDetailValueChange(ValueChangeEvent event) {
+		IObservableValue detail = event.getObservableValue();
+
+		// When we get a change event on a detail observable, we must find its
+		// position while there may also be duplicate entries.
+		BitSet detailIndexes = new BitSet();
+		for (int i = 0; i < detailList.size(); i++) {
+			if (detailList.get(i) == detail) {
+				detailIndexes.set(i);
+			}
+		}
+
+		// Create the diff for every found position.
+		Object oldValue = event.diff.getOldValue();
+		Object newValue = event.diff.getNewValue();
+		ListDiffEntry[] diffEntries = new ListDiffEntry[2 * detailIndexes
+				.cardinality()];
+		int diffIndex = 0;
+		for (int b = detailIndexes.nextSetBit(0); b != -1; b = detailIndexes
+				.nextSetBit(b + 1)) {
+			diffEntries[diffIndex++] = Diffs.createListDiffEntry(b, false,
+					oldValue);
+			diffEntries[diffIndex++] = Diffs.createListDiffEntry(b, true,
+					newValue);
+		}
+		fireListChange(Diffs.createListDiff(diffEntries));
+	}
+
+	private IObservableValue createDetailObservable(Object masterElement) {
+		ObservableTracker.setIgnore(true);
+		try {
+			return (IObservableValue) detailFactory
+					.createObservable(masterElement);
+		} finally {
+			ObservableTracker.setIgnore(false);
+		}
+	}
+
+	protected int doGetSize() {
+		return detailList.size();
+	}
+
+	public Object get(int index) {
+		ObservableTracker.getterCalled(this);
+		return ((IObservableValue) detailList.get(index)).getValue();
+	}
+
+	public Object set(int index, Object element) {
+		IObservableValue detail = (IObservableValue) detailList.get(index);
+		Object oldElement = detail.getValue();
+		detail.setValue(element);
+		return oldElement;
+	}
+
+	public Object move(int oldIndex, int newIndex) {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean remove(Object o) {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean removeAll(Collection c) {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean retainAll(Collection c) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void clear() {
+		throw new UnsupportedOperationException();
+	}
+
+	public Object getElementType() {
+		return detailType;
+	}
+
+	public boolean isStale() {
+		return super.isStale()
+				|| (masterList != null && masterList.isStale())
+				|| (staleDetailObservables != null && !staleDetailObservables
+						.isEmpty());
+	}
+
+	public Object getObserved() {
+		return masterList;
+	}
+
+	public synchronized void dispose() {
+		if (masterList != null) {
+			masterList.removeListChangeListener(masterListListener);
+			masterList.removeStaleListener(masterStaleListener);
+		}
+
+		if (detailList != null) {
+			for (Iterator iter = detailList.iterator(); iter.hasNext();) {
+				IObservableValue detailValue = (IObservableValue) iter.next();
+				detailValue.dispose();
+			}
+			detailList.clear();
+		}
+
+		masterList = null;
+		detailFactory = null;
+		detailType = null;
+		masterListListener = null;
+		detailValueListener = null;
+		masterDetailMap = null;
+		staleDetailObservables = null;
+
+		super.dispose();
+	}
+
+	private static final class DetailEntry {
+
+		private final IObservableValue detailObservable;
+
+		private int masterReferenceCount = 1;
+
+		public DetailEntry(IObservableValue detailObservable) {
+			this.detailObservable = detailObservable;
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/MapDetailValueObservableMap.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/MapDetailValueObservableMap.java
new file mode 100644
index 0000000..fc3cec1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/MapDetailValueObservableMap.java
@@ -0,0 +1,405 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Ovidio Mallo and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Ovidio Mallo - initial API and implementation (bug 305367)
+ ******************************************************************************/
+
+package org.eclipse.core.internal.databinding.observable.masterdetail;
+
+import java.util.AbstractSet;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.DisposeEvent;
+import org.eclipse.core.databinding.observable.IDisposeListener;
+import org.eclipse.core.databinding.observable.IObserving;
+import org.eclipse.core.databinding.observable.IStaleListener;
+import org.eclipse.core.databinding.observable.ObservableTracker;
+import org.eclipse.core.databinding.observable.StaleEvent;
+import org.eclipse.core.databinding.observable.map.AbstractObservableMap;
+import org.eclipse.core.databinding.observable.map.IMapChangeListener;
+import org.eclipse.core.databinding.observable.map.IObservableMap;
+import org.eclipse.core.databinding.observable.map.MapChangeEvent;
+import org.eclipse.core.databinding.observable.map.MapDiff;
+import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.IValueChangeListener;
+import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
+import org.eclipse.core.internal.databinding.identity.IdentityMap;
+import org.eclipse.core.internal.databinding.identity.IdentitySet;
+import org.eclipse.core.internal.databinding.observable.Util;
+
+/**
+ * @since 1.4
+ */
+public class MapDetailValueObservableMap extends AbstractObservableMap
+		implements IObserving {
+
+	private IObservableMap masterMap;
+
+	private IObservableFactory observableValueFactory;
+
+	private Object detailValueType;
+
+	private Set entrySet;
+
+	private IdentityHashMap keyDetailMap = new IdentityHashMap();
+
+	private IdentitySet staleDetailObservables = new IdentitySet();
+
+	private IMapChangeListener masterMapListener = new IMapChangeListener() {
+		public void handleMapChange(MapChangeEvent event) {
+			handleMasterMapChange(event.diff);
+		}
+	};
+
+	private IStaleListener masterStaleListener = new IStaleListener() {
+		public void handleStale(StaleEvent staleEvent) {
+			fireStale();
+		}
+	};
+
+	private IStaleListener detailStaleListener = new IStaleListener() {
+		public void handleStale(StaleEvent staleEvent) {
+			addStaleDetailObservable((IObservableValue) staleEvent
+					.getObservable());
+		}
+	};
+
+	/**
+	 * @param masterMap
+	 * @param observableValueFactory
+	 * @param detailValueType
+	 */
+	public MapDetailValueObservableMap(IObservableMap masterMap,
+			IObservableFactory observableValueFactory, Object detailValueType) {
+		super(masterMap.getRealm());
+		this.masterMap = masterMap;
+		this.observableValueFactory = observableValueFactory;
+		this.detailValueType = detailValueType;
+
+		// Add change/stale/dispose listeners on the master map.
+		masterMap.addMapChangeListener(masterMapListener);
+		masterMap.addStaleListener(masterStaleListener);
+		masterMap.addDisposeListener(new IDisposeListener() {
+			public void handleDispose(DisposeEvent event) {
+				MapDetailValueObservableMap.this.dispose();
+			}
+		});
+
+		// Initialize the map with the current state of the master map.
+		MapDiff initMasterDiff = Diffs.computeMapDiff(Collections.EMPTY_MAP,
+				masterMap);
+		handleMasterMapChange(initMasterDiff);
+	}
+
+	private void handleMasterMapChange(MapDiff diff) {
+		// Collect the detail values for the master values in the input diff.
+		IdentityMap oldValues = new IdentityMap();
+		IdentityMap newValues = new IdentityMap();
+
+		// Handle added master values.
+		Set addedKeys = diff.getAddedKeys();
+		for (Iterator iter = addedKeys.iterator(); iter.hasNext();) {
+			Object addedKey = iter.next();
+
+			// For added master values, we set up a new detail observable.
+			addDetailObservable(addedKey);
+
+			// Get the value of the created detail observable for the new diff.
+			IObservableValue detailValue = getDetailObservableValue(addedKey);
+			newValues.put(addedKey, detailValue.getValue());
+		}
+
+		// Handle removed master values.
+		Set removedKeys = diff.getRemovedKeys();
+		for (Iterator iter = removedKeys.iterator(); iter.hasNext();) {
+			Object removedKey = iter.next();
+
+			// First of all, get the current detail value and add it to the set
+			// of old values of the new diff.
+			IObservableValue detailValue = getDetailObservableValue(removedKey);
+			oldValues.put(removedKey, detailValue.getValue());
+
+			// For removed master values, we dispose the detail observable.
+			removeDetailObservable(removedKey);
+		}
+
+		// Handle changed master values.
+		Set changedKeys = diff.getChangedKeys();
+		for (Iterator iter = changedKeys.iterator(); iter.hasNext();) {
+			Object changedKey = iter.next();
+
+			// Get the detail value prior to the change and add it to the set of
+			// old values of the new diff.
+			IObservableValue oldDetailValue = getDetailObservableValue(changedKey);
+			oldValues.put(changedKey, oldDetailValue.getValue());
+
+			// Remove the old detail value for the old master value and add it
+			// again for the new master value.
+			removeDetailObservable(changedKey);
+			addDetailObservable(changedKey);
+
+			// Get the new detail value and add it to the set of new values.
+			IObservableValue newDetailValue = getDetailObservableValue(changedKey);
+			newValues.put(changedKey, newDetailValue.getValue());
+		}
+
+		// The different key sets are the same, only the values change.
+		fireMapChange(Diffs.createMapDiff(addedKeys, removedKeys, changedKeys,
+				oldValues, newValues));
+	}
+
+	private void addDetailObservable(final Object addedKey) {
+		Object masterElement = masterMap.get(addedKey);
+
+		IObservableValue detailValue = (IObservableValue) keyDetailMap
+				.get(addedKey);
+
+		if (detailValue == null) {
+			detailValue = createDetailObservable(masterElement);
+
+			keyDetailMap.put(addedKey, detailValue);
+
+			detailValue.addValueChangeListener(new IValueChangeListener() {
+				public void handleValueChange(ValueChangeEvent event) {
+					if (!event.getObservableValue().isStale()) {
+						staleDetailObservables.remove(event.getSource());
+					}
+
+					fireMapChange(Diffs.createMapDiffSingleChange(addedKey,
+							event.diff.getOldValue(), event.diff.getNewValue()));
+				}
+			});
+
+			if (detailValue.isStale()) {
+				addStaleDetailObservable(detailValue);
+			}
+		}
+
+		detailValue.addStaleListener(detailStaleListener);
+	}
+
+	private IObservableValue createDetailObservable(Object masterElement) {
+		ObservableTracker.setIgnore(true);
+		try {
+			return (IObservableValue) observableValueFactory
+					.createObservable(masterElement);
+		} finally {
+			ObservableTracker.setIgnore(false);
+		}
+	}
+
+	private void removeDetailObservable(Object removedKey) {
+		if (isDisposed()) {
+			return;
+		}
+
+		IObservableValue detailValue = (IObservableValue) keyDetailMap
+				.remove(removedKey);
+		staleDetailObservables.remove(detailValue);
+		detailValue.dispose();
+	}
+
+	private IObservableValue getDetailObservableValue(Object masterKey) {
+		return (IObservableValue) keyDetailMap.get(masterKey);
+	}
+
+	private void addStaleDetailObservable(IObservableValue detailObservable) {
+		boolean wasStale = isStale();
+		staleDetailObservables.add(detailObservable);
+		if (!wasStale) {
+			fireStale();
+		}
+	}
+
+	public Set keySet() {
+		getterCalled();
+
+		return masterMap.keySet();
+	}
+
+	public Object get(Object key) {
+		getterCalled();
+
+		if (!containsKey(key)) {
+			return null;
+		}
+
+		IObservableValue detailValue = getDetailObservableValue(key);
+		return detailValue.getValue();
+	}
+
+	public Object put(Object key, Object value) {
+		if (!containsKey(key)) {
+			return null;
+		}
+
+		IObservableValue detailValue = getDetailObservableValue(key);
+		Object oldValue = detailValue.getValue();
+		detailValue.setValue(value);
+		return oldValue;
+	}
+
+	public boolean containsKey(Object key) {
+		getterCalled();
+
+		return masterMap.containsKey(key);
+	}
+
+	public Object remove(Object key) {
+		checkRealm();
+
+		if (!containsKey(key)) {
+			return null;
+		}
+
+		IObservableValue detailValue = getDetailObservableValue(key);
+		Object oldValue = detailValue.getValue();
+
+		masterMap.remove(key);
+
+		return oldValue;
+	}
+
+	public int size() {
+		getterCalled();
+
+		return masterMap.size();
+	}
+
+	public boolean isStale() {
+		return super.isStale()
+				|| (masterMap != null && masterMap.isStale())
+				|| (staleDetailObservables != null && !staleDetailObservables
+						.isEmpty());
+	}
+
+	public Object getKeyType() {
+		return masterMap.getKeyType();
+	}
+
+	public Object getValueType() {
+		return detailValueType;
+	}
+
+	public Object getObserved() {
+		return masterMap;
+	}
+
+	public synchronized void dispose() {
+		if (masterMap != null) {
+			masterMap.removeMapChangeListener(masterMapListener);
+			masterMap.removeStaleListener(masterStaleListener);
+		}
+
+		if (keyDetailMap != null) {
+			for (Iterator iter = keyDetailMap.values().iterator(); iter
+					.hasNext();) {
+				IObservableValue detailValue = (IObservableValue) iter.next();
+				detailValue.dispose();
+			}
+			keyDetailMap.clear();
+		}
+
+		masterMap = null;
+		observableValueFactory = null;
+		detailValueType = null;
+		keyDetailMap = null;
+		masterStaleListener = null;
+		detailStaleListener = null;
+		staleDetailObservables = null;
+
+		super.dispose();
+	}
+
+	public Set entrySet() {
+		getterCalled();
+
+		if (entrySet == null) {
+			entrySet = new EntrySet();
+		}
+		return entrySet;
+	}
+
+	private void getterCalled() {
+		ObservableTracker.getterCalled(this);
+	}
+
+	private class EntrySet extends AbstractSet {
+
+		public Iterator iterator() {
+			final Iterator keyIterator = keySet().iterator();
+			return new Iterator() {
+
+				public boolean hasNext() {
+					return keyIterator.hasNext();
+				}
+
+				public Object next() {
+					Object key = keyIterator.next();
+					return new MapEntry(key);
+				}
+
+				public void remove() {
+					keyIterator.remove();
+				}
+			};
+		}
+
+		public int size() {
+			return MapDetailValueObservableMap.this.size();
+		}
+	}
+
+	private final class MapEntry implements Map.Entry {
+
+		private final Object key;
+
+		private MapEntry(Object key) {
+			this.key = key;
+		}
+
+		public Object getKey() {
+			MapDetailValueObservableMap.this.getterCalled();
+			return key;
+		}
+
+		public Object getValue() {
+			return MapDetailValueObservableMap.this.get(getKey());
+		}
+
+		public Object setValue(Object value) {
+			return MapDetailValueObservableMap.this.put(getKey(), value);
+		}
+
+		public boolean equals(Object o) {
+			MapDetailValueObservableMap.this.getterCalled();
+			if (o == this)
+				return true;
+			if (o == null)
+				return false;
+			if (!(o instanceof Map.Entry))
+				return false;
+			Map.Entry that = (Map.Entry) o;
+			return Util.equals(this.getKey(), that.getKey())
+					&& Util.equals(this.getValue(), that.getValue());
+		}
+
+		public int hashCode() {
+			MapDetailValueObservableMap.this.getterCalled();
+			Object value = getValue();
+			return (getKey() == null ? 0 : getKey().hashCode())
+					^ (value == null ? 0 : value.hashCode());
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/SetDetailValueObservableMap.java b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/SetDetailValueObservableMap.java
new file mode 100644
index 0000000..f66a1c9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.databinding.observable/src/org/eclipse/core/internal/databinding/observable/masterdetail/SetDetailValueObservableMap.java
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Ovidio Mallo and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Ovidio Mallo - initial API and implementation (bug 305367)
+ ******************************************************************************/
+
+package org.eclipse.core.internal.databinding.observable.masterdetail;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.databinding.observable.IObserving;
+import org.eclipse.core.databinding.observable.IStaleListener;
+import org.eclipse.core.databinding.observable.ObservableTracker;
+import org.eclipse.core.databinding.observable.StaleEvent;
+import org.eclipse.core.databinding.observable.map.ComputedObservableMap;
+import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
+import org.eclipse.core.databinding.observable.set.IObservableSet;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.IValueChangeListener;
+import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
+import org.eclipse.core.internal.databinding.identity.IdentitySet;
+
+/**
+ * @since 1.4
+ */
+public class SetDetailValueObservableMap extends ComputedObservableMap
+		implements IObserving {
+
+	private IObservableFactory observableValueFactory;
+
+	private Map detailObservableValueMap = new HashMap();
+
+	private IdentitySet staleDetailObservables = new IdentitySet();
+
+	private IStaleListener detailStaleListener = new IStaleListener() {
+		public void handleStale(StaleEvent staleEvent) {
+			addStaleDetailObservable((IObservableValue) staleEvent
+					.getObservable());
+		}
+	};
+
+	/**
+	 * @param masterKeySet
+	 * @param observableValueFactory
+	 * @param detailValueType
+	 */
+	public SetDetailValueObservableMap(IObservableSet masterKeySet,
+			IObservableFactory observableValueFactory, Object detailValueType) {
+		super(masterKeySet, detailValueType);
+		this.observableValueFactory = observableValueFactory;
+	}
+
+	protected void hookListener(final Object addedKey) {
+		final IObservableValue detailValue = getDetailObservableValue(addedKey);
+
+		detailValue.addValueChangeListener(new IValueChangeListener() {
+			public void handleValueChange(ValueChangeEvent event) {
+				if (!event.getObservableValue().isStale()) {
+					staleDetailObservables.remove(detailValue);
+				}
+
+				fireSingleChange(addedKey, event.diff.getOldValue(),
+						event.diff.getNewValue());
+			}
+		});
+
+		detailValue.addStaleListener(detailStaleListener);
+	}
+
+	protected void unhookListener(Object removedKey) {
+		if (isDisposed()) {
+			return;
+		}
+
+		IObservableValue detailValue = (IObservableValue) detailObservableValueMap
+				.remove(removedKey);
+		staleDetailObservables.remove(detailValue);
+		detailValue.dispose();
+	}
+
+	private IObservableValue getDetailObservableValue(Object masterKey) {
+		IObservableValue detailValue = (IObservableValue) detailObservableValueMap
+				.get(masterKey);
+
+		if (detailValue == null) {
+			ObservableTracker.setIgnore(true);
+			try {
+				detailValue = (IObservableValue) observableValueFactory
+						.createObservable(masterKey);
+			} finally {
+				ObservableTracker.setIgnore(false);
+			}
+
+			detailObservableValueMap.put(masterKey, detailValue);
+
+			if (detailValue.isStale()) {
+				addStaleDetailObservable(detailValue);
+			}
+		}
+
+		return detailValue;
+	}
+
+	private void addStaleDetailObservable(IObservableValue detailObservable) {
+		boolean wasStale = isStale();
+		staleDetailObservables.add(detailObservable);
+		if (!wasStale) {
+			fireStale();
+		}
+	}
+
+	protected Object doGet(Object key) {
+		IObservableValue detailValue = getDetailObservableValue(key);
+		return detailValue.getValue();
+	}
+
+	protected Object doPut(Object key, Object value) {
+		IObservableValue detailValue = getDetailObservableValue(key);
+		Object oldValue = detailValue.getValue();
+		detailValue.setValue(value);
+		return oldValue;
+	}
+
+	public boolean containsKey(Object key) {
+		getterCalled();
+
+		return keySet().contains(key);
+	}
+
+	public Object remove(Object key) {
+		checkRealm();
+
+		if (!containsKey(key)) {
+			return null;
+		}
+
+		IObservableValue detailValue = getDetailObservableValue(key);
+		Object oldValue = detailValue.getValue();
+
+		keySet().remove(key);
+
+		return oldValue;
+	}
+
+	public int size() {
+		getterCalled();
+
+		return keySet().size();
+	}
+
+	public boolean isStale() {
+		return super.isStale() || staleDetailObservables != null
+				&& !staleDetailObservables.isEmpty();
+	}
+
+	public Object getObserved() {
+		return keySet();
+	}
+
+	public synchronized void dispose() {
+		super.dispose();
+
+		observableValueFactory = null;
+		detailObservableValueMap = null;
+		detailStaleListener = null;
+		staleDetailObservables = null;
+	}
+
+	private void getterCalled() {
+		ObservableTracker.getterCalled(this);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.core.databinding.property/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.databinding.property/META-INF/MANIFEST.MF
index c2b26cc..11b5608 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.property/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.databinding.property/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.databinding.property
-Bundle-Version: 1.3.0.qualifier
+Bundle-Version: 1.4.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/list/ListProperty.java b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/list/ListProperty.java
index 139a093..cf9590b 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/list/ListProperty.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/list/ListProperty.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     Matthew Hall - initial API and implementation (bug 194734)
  *     Matthew Hall - bug 195222
+ *     Ovidio Mallo - bug 331348
  ******************************************************************************/
 
 package org.eclipse.core.databinding.property.list;
@@ -33,10 +34,22 @@ import org.eclipse.core.internal.databinding.property.ListPropertyDetailValuesLi
  * @since 1.2
  */
 public abstract class ListProperty implements IListProperty {
+
 	/**
+	 * By default, this method returns <code>Collections.EMPTY_LIST</code> in
+	 * case the source object is <code>null</code>. Otherwise, this method
+	 * delegates to {@link #doGetList(Object)}.
+	 * 
+	 * <p>
+	 * Clients may override this method if they e.g. want to return a specific
+	 * default list in case the source object is <code>null</code>.
+	 * </p>
+	 * 
+	 * @see #doGetList(Object)
+	 * 
 	 * @since 1.3
 	 */
-	public final List getList(Object source) {
+	public List getList(Object source) {
 		if (source == null) {
 			return Collections.EMPTY_LIST;
 		}
@@ -132,8 +145,8 @@ public abstract class ListProperty implements IListProperty {
 	}
 
 	public IObservableList observeDetail(IObservableValue master) {
-		return MasterDetailObservables.detailList(master, listFactory(master
-				.getRealm()), getElementType());
+		return MasterDetailObservables.detailList(master,
+				listFactory(master.getRealm()), getElementType());
 	}
 
 	public final IListProperty values(IValueProperty detailValue) {
diff --git a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/map/MapProperty.java b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/map/MapProperty.java
index 70fcd95..2b1d5d6 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/map/MapProperty.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/map/MapProperty.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     Matthew Hall - initial API and implementation (bug 194734)
  *     Matthew Hall - bug 195222
+ *     Ovidio Mallo - bug 331348
  ******************************************************************************/
 
 package org.eclipse.core.databinding.property.map;
@@ -33,10 +34,22 @@ import org.eclipse.core.internal.databinding.property.MapPropertyDetailValuesMap
  * @since 1.2
  */
 public abstract class MapProperty implements IMapProperty {
+
 	/**
+	 * By default, this method returns <code>Collections.EMPTY_MAP</code> in
+	 * case the source object is <code>null</code>. Otherwise, this method
+	 * delegates to {@link #doGetMap(Object)}.
+	 * 
+	 * <p>
+	 * Clients may override this method if they e.g. want to return a specific
+	 * default map in case the source object is <code>null</code>.
+	 * </p>
+	 * 
+	 * @see #doGetMap(Object)
+	 * 
 	 * @since 1.3
 	 */
-	public final Map getMap(Object source) {
+	public Map getMap(Object source) {
 		if (source == null) {
 			return Collections.EMPTY_MAP;
 		}
@@ -134,8 +147,8 @@ public abstract class MapProperty implements IMapProperty {
 	}
 
 	public IObservableMap observeDetail(IObservableValue master) {
-		return MasterDetailObservables.detailMap(master, mapFactory(master
-				.getRealm()), getKeyType(), getValueType());
+		return MasterDetailObservables.detailMap(master,
+				mapFactory(master.getRealm()), getKeyType(), getValueType());
 	}
 
 	public final IMapProperty values(IValueProperty detailValues) {
diff --git a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/set/SetProperty.java b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/set/SetProperty.java
index 8b213ec..52c68c8 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/set/SetProperty.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/set/SetProperty.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     Matthew Hall - initial API and implementation (bug 194734)
  *     Matthew Hall - bug 195222
+ *     Ovidio Mallo - bug 331348
  ******************************************************************************/
 
 package org.eclipse.core.databinding.property.set;
@@ -34,10 +35,22 @@ import org.eclipse.core.internal.databinding.property.SetPropertyDetailValuesMap
  * @since 1.2
  */
 public abstract class SetProperty implements ISetProperty {
+
 	/**
+	 * By default, this method returns <code>Collections.EMPTY_SET</code> in
+	 * case the source object is <code>null</code>. Otherwise, this method
+	 * delegates to {@link #doGetSet(Object)}.
+	 * 
+	 * <p>
+	 * Clients may override this method if they e.g. want to return a specific
+	 * default set in case the source object is <code>null</code>.
+	 * </p>
+	 * 
+	 * @see #doGetSet(Object)
+	 * 
 	 * @since 1.3
 	 */
-	public final Set getSet(Object source) {
+	public Set getSet(Object source) {
 		if (source == null) {
 			return Collections.EMPTY_SET;
 		}
@@ -134,8 +147,8 @@ public abstract class SetProperty implements ISetProperty {
 	}
 
 	public IObservableSet observeDetail(IObservableValue master) {
-		return MasterDetailObservables.detailSet(master, setFactory(master
-				.getRealm()), getElementType());
+		return MasterDetailObservables.detailSet(master,
+				setFactory(master.getRealm()), getElementType());
 	}
 
 	public final IMapProperty values(IValueProperty detailValues) {
diff --git a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/ValueProperty.java b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/ValueProperty.java
index d726668..5024b3b 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/ValueProperty.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/databinding/property/value/ValueProperty.java
@@ -8,14 +8,18 @@
  * Contributors:
  *     Matthew Hall - initial API and implementation (bug 194734)
  *     Matthew Hall - bug 195222
+ *     Ovidio Mallo - bugs 331348, 305367
  ******************************************************************************/
 
 package org.eclipse.core.databinding.property.value;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.map.IObservableMap;
 import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
 import org.eclipse.core.databinding.observable.masterdetail.MasterDetailObservables;
+import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.databinding.property.map.IMapProperty;
@@ -31,10 +35,22 @@ import org.eclipse.core.internal.databinding.property.ValuePropertyDetailValue;
  * @since 1.2
  */
 public abstract class ValueProperty implements IValueProperty {
+
 	/**
+	 * By default, this method returns <code>null</code> in case the source
+	 * object is itself <code>null</code>. Otherwise, this method delegates to
+	 * {@link #doGetValue(Object)}.
+	 * 
+	 * <p>
+	 * Clients may override this method if they e.g. want to return a specific
+	 * default value in case the source object is <code>null</code>.
+	 * </p>
+	 * 
+	 * @see #doGetValue(Object)
+	 * 
 	 * @since 1.3
 	 */
-	public final Object getValue(Object source) {
+	public Object getValue(Object source) {
 		if (source == null) {
 			return null;
 		}
@@ -108,8 +124,32 @@ public abstract class ValueProperty implements IValueProperty {
 	}
 
 	public IObservableValue observeDetail(IObservableValue master) {
-		return MasterDetailObservables.detailValue(master, valueFactory(master
-				.getRealm()), getValueType());
+		return MasterDetailObservables.detailValue(master,
+				valueFactory(master.getRealm()), getValueType());
+	}
+
+	/**
+	 * @since 1.4
+	 */
+	public IObservableList observeDetail(IObservableList master) {
+		return MasterDetailObservables.detailValues(master,
+				valueFactory(master.getRealm()), getValueType());
+	}
+
+	/**
+	 * @since 1.4
+	 */
+	public IObservableMap observeDetail(IObservableSet master) {
+		return MasterDetailObservables.detailValues(master,
+				valueFactory(master.getRealm()), getValueType());
+	}
+
+	/**
+	 * @since 1.4
+	 */
+	public IObservableMap observeDetail(IObservableMap master) {
+		return MasterDetailObservables.detailValues(master,
+				valueFactory(master.getRealm()), getValueType());
 	}
 
 	public final IValueProperty value(IValueProperty detailValue) {
diff --git a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/map/SimplePropertyObservableMap.java b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/map/SimplePropertyObservableMap.java
index ee1e56e..df7fd0d 100644
--- a/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/map/SimplePropertyObservableMap.java
+++ b/eclipse/plugins/org.eclipse.core.databinding.property/src/org/eclipse/core/internal/databinding/property/map/SimplePropertyObservableMap.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     Matthew Hall - initial API and implementation (bug 194734)
  *     Matthew Hall - bugs 265561, 262287, 268203, 268688, 301774, 303847
+ *     Ovidio Mallo - bug 332367
  ******************************************************************************/
 
 package org.eclipse.core.internal.databinding.property.map;
@@ -184,8 +185,8 @@ public class SimplePropertyObservableMap extends AbstractObservableMap
 			getterCalled();
 			checkForComodification();
 
-			MapDiff diff = Diffs.createMapDiffSingleRemove(last.getKey(), last
-					.getValue());
+			MapDiff diff = Diffs.createMapDiffSingleRemove(last.getKey(),
+					last.getValue());
 			updateMap(map, diff);
 
 			iterator.remove(); // stay in sync
@@ -281,6 +282,17 @@ public class SimplePropertyObservableMap extends AbstractObservableMap
 		return oldValue;
 	}
 
+	public void clear() {
+		getterCalled();
+
+		Map map = getMap();
+		if (map.isEmpty())
+			return;
+
+		MapDiff diff = Diffs.createMapDiffRemoveAll(new HashMap(map));
+		updateMap(map, diff);
+	}
+
 	public Collection values() {
 		getterCalled();
 		// AbstractMap depends on entrySet() to fulfil values() API, so all
diff --git a/eclipse/plugins/org.eclipse.core.databinding/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.databinding/META-INF/MANIFEST.MF
index 703e8b7..7eb6a40 100644
--- a/eclipse/plugins/org.eclipse.core.databinding/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.databinding/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.databinding
-Bundle-Version: 1.3.100.qualifier
+Bundle-Version: 1.4.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/databinding/BindingProperties.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/databinding/BindingProperties.java
index aae4869..0977bf9 100644
--- a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/databinding/BindingProperties.java
+++ b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/databinding/BindingProperties.java
@@ -8,16 +8,19 @@
  * Contributors:
  *     Matthew Hall - initial API and implementation (bug 263709)
  *     Matthew Hall - bug 264954
+ *     Ovidio Mallo - bug 306611
  ******************************************************************************/
 
 package org.eclipse.core.databinding;
 
+import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.property.Properties;
 import org.eclipse.core.databinding.property.list.IListProperty;
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.internal.databinding.BindingModelProperty;
 import org.eclipse.core.internal.databinding.BindingTargetProperty;
+import org.eclipse.core.internal.databinding.ConverterValueProperty;
 import org.eclipse.core.internal.databinding.DataBindingContextBindingsProperty;
 import org.eclipse.core.internal.databinding.DataBindingContextValidationStatusProvidersProperty;
 import org.eclipse.core.internal.databinding.ValidationStatusProviderModelsProperty;
@@ -111,4 +114,24 @@ public class BindingProperties {
 	public static IListProperty validationStatusProviders() {
 		return new DataBindingContextValidationStatusProvidersProperty();
 	}
+
+	/**
+	 * Returns an {@link IValueProperty} whose value results from applying the
+	 * given {@link IConverter} on the source object of the value property.
+	 * Consequently, the {@link IValueProperty#getValueType() value type} of the
+	 * returned property is the same as the {@link IConverter#getToType() target
+	 * type} of the converter. Setting a value on the property is not supported.
+	 * 
+	 * @param converter
+	 *            The converter to apply to the source object of the value
+	 *            property.
+	 * @return A new instance of a value property whose value is the result of
+	 *         applying the given converter to the source object passed to the
+	 *         value property.
+	 * 
+	 * @since 1.4
+	 */
+	public static IValueProperty convertedValue(IConverter converter) {
+		return new ConverterValueProperty(converter);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ConverterValueProperty.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ConverterValueProperty.java
new file mode 100644
index 0000000..32ca3a7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/ConverterValueProperty.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Ovidio Mallo and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Ovidio Mallo - initial API and implementation (bug 306611)
+ ******************************************************************************/
+
+package org.eclipse.core.internal.databinding;
+
+import org.eclipse.core.databinding.conversion.IConverter;
+import org.eclipse.core.databinding.property.INativePropertyListener;
+import org.eclipse.core.databinding.property.ISimplePropertyListener;
+import org.eclipse.core.databinding.property.value.SimpleValueProperty;
+
+/**
+ * Simple value property which applies a given converter on a source object in
+ * order to produce the property's value.
+ */
+public class ConverterValueProperty extends SimpleValueProperty {
+
+	private final IConverter converter;
+
+	/**
+	 * Creates a new value property which applies the given converter on the
+	 * source object in order to produce the property's value.
+	 * 
+	 * @param converter
+	 *            The converter to apply to the source object.
+	 */
+	public ConverterValueProperty(IConverter converter) {
+		this.converter = converter;
+	}
+
+	public Object getValueType() {
+		// the property type is the converter's target type
+		return converter.getToType();
+	}
+
+	public Object getValue(Object source) {
+		// We do also pass null values to the converter.
+		return doGetValue(source);
+	}
+
+	protected Object doGetValue(Object source) {
+		// delegate to the IConverter
+		return converter.convert(source);
+	}
+
+	protected void doSetValue(Object source, Object value) {
+		// setting a value is not supported
+		throw new UnsupportedOperationException(toString()
+				+ ": Setter not supported on a converted value!"); //$NON-NLS-1$
+	}
+
+	public INativePropertyListener adaptListener(
+			ISimplePropertyListener listener) {
+		// no listener API
+		return null;
+	}
+
+	public String toString() {
+		return "IConverter#convert(source) <IConverter#getToType()>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/DateConversionSupport.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/DateConversionSupport.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/DateToStringConverter.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/DateToStringConverter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/StringToBooleanConverter.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/StringToBooleanConverter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/StringToByteConverter.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/StringToByteConverter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/StringToShortConverter.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/conversion/StringToShortConverter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/ObjectToPrimitiveValidator.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/ObjectToPrimitiveValidator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/ReadOnlyValidator.java b/eclipse/plugins/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/ReadOnlyValidator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.expressions/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.expressions/META-INF/MANIFEST.MF
index 7184711..5bb73ae 100644
--- a/eclipse/plugins/org.eclipse.core.expressions/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.expressions/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.expressions; singleton:=true
-Bundle-Version: 3.4.200.qualifier
+Bundle-Version: 3.4.300.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.core.internal.expressions.ExpressionPlugin
 Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.core.expressions/schema/expressionLanguage.exsd b/eclipse/plugins/org.eclipse.core.expressions/schema/expressionLanguage.exsd
index 7cfaa9c..79ca930 100644
--- a/eclipse/plugins/org.eclipse.core.expressions/schema/expressionLanguage.exsd
+++ b/eclipse/plugins/org.eclipse.core.expressions/schema/expressionLanguage.exsd
@@ -14,7 +14,7 @@
       <annotation>
          <documentation>
             A generic root element. The element can be used inside an extension point to define its enablement expression.
-            The children of an enablement expression are combined using the and operator.
+            The children of an enablement expression are combined using the "and" operator.
          </documentation>
       </annotation>
       <complexType>
@@ -39,7 +39,7 @@
    <element name="not">
       <annotation>
          <documentation>
-            This element represent a NOT operation on the result of evaluating it's sub-element expression.
+            This element represents a NOT operation on the result of evaluating its sub-element expression.
          </documentation>
       </annotation>
       <complexType>
@@ -64,7 +64,7 @@
    <element name="and">
       <annotation>
          <documentation>
-            This element represent an AND operation on the result of evaluating all it's sub-elements expressions.
+            This element represents an AND operation on the result of evaluating all its sub-elements expressions.
          </documentation>
       </annotation>
       <complexType>
@@ -89,7 +89,7 @@
    <element name="or">
       <annotation>
          <documentation>
-            This element represent an  OR operation on the result of evaluating all it's sub-element expressions.
+            This element represent an  OR operation on the result of evaluating all its sub-element expressions.
          </documentation>
       </annotation>
       <complexType>
@@ -142,13 +142,7 @@
             <meta.element labelAttribute="property"/>
          </appInfo>
          <documentation>
-            This element is used to evaluate the property state of the object in focus. The set of
-            testable properties can be extended using the propery tester extension point. The test
-            expression returns EvaluationResult.NOT_LOADED if the property tester doing the actual
-            testing isn't loaded yet and the attribute forcePluginActivation is set to false. 
-            If forcePluginActivation is set to true and the evaluation context used to evaluate
-            this expression support plug-in activation then evaluating the property will result in 
-            activating the plug-in defining the tester.
+            This element is used to evaluate the property state of the object in focus. The set of testable properties can be extended using the <b>org.eclipse.core.expressions.propertyTesters</b> extension point. The test expression returns EvaluationResult.NOT_LOADED if the property tester doing the actual testing isn't loaded yet and the attribute forcePluginActivation is set to false.  If forcePluginActivation is set to true and the evaluation context used to evaluate this expression support plug-in activation then evaluating the property will result in activating the plug-in defining the tester.
          </documentation>
       </annotation>
       <complexType>
@@ -183,7 +177,7 @@ rules:
  the value into a Float object. If this fails the string is treated as a
  java.lang.String</li>
  <li>if the string only consists of numbers then the interpreter
- converts the value in an Integer object.</li>
+ converts the value into an Integer object.</li>
  <li>in all other cases the string is treated as a java.lang.String</li>
  <li>the conversion of the string into a Boolean, Float, or Integer can
  be suppressed by surrounding the string with single quotes. For
@@ -297,7 +291,7 @@ rules:
             This element changes the object to be inspected for all its child element to the object
             referenced by the given variable. If the variable can not be resolved then the expression
             will throw an ExpressionException when evaluating it. The children of a with expression 
-            are combined using the and operator.
+            are combined using the "and" operator.
          </documentation>
       </annotation>
       <complexType>
@@ -336,7 +330,7 @@ rules:
             This element changes the object to be inspected for all its child element to the object
             referenced by the given variable. If the variable can not be resolved then the expression
             will throw an ExpressionException when evaluating it. The children of a resolve expression 
-            are combined using the and operator.
+            are combined using the "and" operator.
          </documentation>
       </annotation>
       <complexType>
@@ -384,9 +378,9 @@ rules:
          </appInfo>
          <documentation>
             This element is used to adapt the object in focus to the type specified by the attribute
-            type. The expression returns not loaded if either the adapter or the type referenced isn't
+            type. The expression returns EvaluationResult.NOT_LOADED if either the adapter or the type referenced isn't
             loaded yet. It throws an ExpressionException during evaluation if the type name doesn't exist 
-            at all. The children of an adapt expression are combined using the and operator.
+            at all. The children of an adapt expression are combined using the "and" operator.
          </documentation>
       </annotation>
       <complexType>
@@ -424,7 +418,7 @@ rules:
             This element is used to iterate over a variable that is of type java.util.Collection, or a variable that
             adapts to org.eclipse.core.expressions.IIterable. If the object in focus is not one of the above then a
             CoreException with an ExpressionStatus will be thrown while evaluating the expression.
-            The child expressions of an iterate expression are combined using the and operator.
+            The child expressions of an iterate expression are combined using the "and" operator.
          </documentation>
       </annotation>
       <complexType>
@@ -463,9 +457,9 @@ rules:
          <attribute name="ifEmpty" type="boolean">
             <annotation>
                <documentation>
-                  the value return from the iterate expression if the collection is empty. If
-                 not specified then true is returned when the operator equals "and" 
-                 and false is return if the operator equals "or".
+                  the value returned from the "iterate" expression if the collection is empty. If
+                 not specified then EvaluationResult.TRUE is returned when the operator equals "and" 
+                 and EvaluationResult.FALSE is returned if the operator equals "or".
                </documentation>
             </annotation>
          </attribute>
@@ -512,7 +506,7 @@ rules:
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2001, 2008 IBM Corporation and others.<br>
+         Copyright (c) 2001, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
       </documentation>
    </annotation>
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs
index 5ac4bbd..0a0e78e 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Wed Sep 16 09:50:20 CDT 2009
+#Thu May 05 15:06:07 CDT 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -7,68 +15,93 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=error
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=error
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..5ee1bba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:42:25 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF
index 30d373c..3a541d1 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.externaltools/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.core.externaltools;singleton:=true
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Activator: org.eclipse.core.externaltools.internal.ExternalToolsCore
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.debug.core;bundle-version="[3.6.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java
index e14df99..b0e2bf1 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java
+++ b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/ExternalToolsCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,8 +24,6 @@ public class ExternalToolsCore extends Plugin {
 	// The plug-in ID
 	public static final String PLUGIN_ID = "org.eclipse.core.externaltools"; //$NON-NLS-1$
 	
-	private static final String EMPTY_STRING= ""; //$NON-NLS-1$
-	
 	/**
 	 * Status code indicating an unexpected internal error.
 	 * @since 2.1
@@ -102,7 +100,7 @@ public class ExternalToolsCore extends Plugin {
 	 */
 	public static IStatus newErrorStatus(String message, Throwable exception) {
 		if (message == null) {
-			message= EMPTY_STRING; 
+			return new Status(IStatus.ERROR, PLUGIN_ID, 0, IExternalToolConstants.EMPTY_STRING, exception); 
 		}		
 		return new Status(IStatus.ERROR, PLUGIN_ID, 0, message, exception);
 	}
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java
index 4641a0e..b276e21 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java
+++ b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/IExternalToolConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,14 @@ package org.eclipse.core.externaltools.internal;
  * </p>
  */
 public interface IExternalToolConstants {
+	
+	/**
+	 * Constant for the empty {@link String}
+	 * 
+	 * @since org.eclipse.core.externaltools 1.0.100
+	 */
+	public static final String EMPTY_STRING = ""; //$NON-NLS-1$
+	
 	/**
 	 * Plug-in identifier for external tools UI (value <code>org.eclipse.ui.externaltools</code>).
 	 */
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ExternalToolsCoreUtil.java b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ExternalToolsCoreUtil.java
index d316f27..9239265 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ExternalToolsCoreUtil.java
+++ b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ExternalToolsCoreUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -224,7 +224,7 @@ public class ExternalToolsCoreUtil {
 		}
 		if (scope.startsWith("${projects:")) { //$NON-NLS-1$
 			String pathString = scope.substring(11, scope.length() - 1);
-			if (pathString.length() > 1) {
+			if (pathString.length() > 0) {
 				String[] names = pathString.split(","); //$NON-NLS-1$
 				IProject[] projects = new IProject[names.length];
 				IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
index 00d1c63..a1ae3a6 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
+++ b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -166,7 +166,7 @@ public class ProgramLaunchDelegate extends LaunchConfigurationDelegate {
 
 	private String generateCommandLine(String[] commandLine) {
 		if (commandLine.length < 1)
-			return ""; //$NON-NLS-1$
+			return IExternalToolConstants.EMPTY_STRING;
 		StringBuffer buf = new StringBuffer();
 		for (int i = 0; i < commandLine.length; i++) {
 			buf.append(' ');
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java
index f3b7acd..d8e7d75 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java
+++ b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,12 @@ import org.eclipse.debug.core.ILaunchManager;
 public class BuilderCoreUtils {
 
 	public static final String LAUNCH_CONFIG_HANDLE = "LaunchConfigHandle"; //$NON-NLS-1$
+	/**
+	 * Constant added to the build command to determine if we are doing an incremental build after a clean
+	 * 
+	 * @since 3.7
+	 */
+	public static final String INC_CLEAN = "incclean"; //$NON-NLS-1$
 
 	/**
 	 * Constant used to find a builder using the 3.0-interim format
@@ -113,41 +119,44 @@ public class BuilderCoreUtils {
 		return configuration;
 	}
 
-	public static void configureTriggers(ILaunchConfiguration config,
-			ICommand newCommand) throws CoreException {
+	public static void configureTriggers(ILaunchConfiguration config, ICommand newCommand) throws CoreException {
 		newCommand.setBuilding(IncrementalProjectBuilder.FULL_BUILD, false);
-		newCommand.setBuilding(IncrementalProjectBuilder.INCREMENTAL_BUILD,
-				false);
+		newCommand.setBuilding(IncrementalProjectBuilder.INCREMENTAL_BUILD, false);
 		newCommand.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, false);
 		newCommand.setBuilding(IncrementalProjectBuilder.CLEAN_BUILD, false);
-		String buildKinds = config.getAttribute(
-				IExternalToolConstants.ATTR_RUN_BUILD_KINDS, (String) null);
-		int[] triggers = BuilderCoreUtils.buildTypesToArray(buildKinds);
+		String buildKinds = config.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, (String) null);
+		int[] triggers = buildTypesToArray(buildKinds);
+		boolean isfull = false, isinc = false;
 		for (int i = 0; i < triggers.length; i++) {
 			switch (triggers[i]) {
-			case IncrementalProjectBuilder.FULL_BUILD:
-				newCommand.setBuilding(IncrementalProjectBuilder.FULL_BUILD,
-						true);
-				break;
-			case IncrementalProjectBuilder.INCREMENTAL_BUILD:
-				newCommand.setBuilding(
-						IncrementalProjectBuilder.INCREMENTAL_BUILD, true);
-				break;
-			case IncrementalProjectBuilder.AUTO_BUILD:
-				newCommand.setBuilding(IncrementalProjectBuilder.AUTO_BUILD,
-						true);
-				break;
-			case IncrementalProjectBuilder.CLEAN_BUILD:
-				newCommand.setBuilding(IncrementalProjectBuilder.CLEAN_BUILD,
-						true);
-				break;
+				case IncrementalProjectBuilder.FULL_BUILD:
+					newCommand.setBuilding(IncrementalProjectBuilder.FULL_BUILD, true);
+					isfull = true;
+					break;
+				case IncrementalProjectBuilder.INCREMENTAL_BUILD:
+					newCommand.setBuilding(IncrementalProjectBuilder.INCREMENTAL_BUILD, true);
+					isinc = true;
+					break;
+				case IncrementalProjectBuilder.AUTO_BUILD:
+					newCommand.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, true);
+					break;
+				case IncrementalProjectBuilder.CLEAN_BUILD:
+					newCommand.setBuilding(IncrementalProjectBuilder.CLEAN_BUILD, true);
+					break;
+			}
+		}
+		if(!isfull && isinc) {
+			Map args = newCommand.getArguments();
+			if(args == null) {
+				args = new HashMap();
 			}
+			newCommand.setBuilding(IncrementalProjectBuilder.FULL_BUILD, true);
+			args.put(INC_CLEAN, Boolean.TRUE.toString());
+			newCommand.setArguments(args);
 		}
-		if (!config.getAttribute(
-				IExternalToolConstants.ATTR_TRIGGERS_CONFIGURED, false)) {
+		if (!config.getAttribute(IExternalToolConstants.ATTR_TRIGGERS_CONFIGURED, false)) {
 			ILaunchConfigurationWorkingCopy copy = config.getWorkingCopy();
-			copy.setAttribute(IExternalToolConstants.ATTR_TRIGGERS_CONFIGURED,
-					true);
+			copy.setAttribute(IExternalToolConstants.ATTR_TRIGGERS_CONFIGURED, true);
 			copy.doSave();
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/ExternalToolBuilder.java b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/ExternalToolBuilder.java
index 244a833..dd809de 100644
--- a/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/ExternalToolBuilder.java
+++ b/eclipse/plugins/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/ExternalToolBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,7 +85,7 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
 		}
         boolean kindCompatible= commandConfiguredForKind(config, kind);
         if (kindCompatible && configEnabled(config)) {
-            doBuildBasedOnScope(resources, kind, config, monitor);
+            doBuildBasedOnScope(resources, kind, config, args, monitor);
         }
         
 		return projectsWithinScope;
@@ -157,7 +157,7 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
 		return true;
 	}
 
-	private void doBuildBasedOnScope(IResource[] resources, int kind, ILaunchConfiguration config, IProgressMonitor monitor) throws CoreException {
+	private void doBuildBasedOnScope(IResource[] resources, int kind, ILaunchConfiguration config, Map args, IProgressMonitor monitor) throws CoreException {
 		boolean buildForChange = true;
 		if (kind != FULL_BUILD) { //scope not applied for full builds
 			if (resources != null && resources.length > 0) {
@@ -166,19 +166,19 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
 		}
 
 		if (buildForChange) {
-			launchBuild(kind, config, monitor);
+			launchBuild(kind, config, args, monitor);
 		}
 	}
 	
-	private void launchBuild(int kind, ILaunchConfiguration config, IProgressMonitor monitor) throws CoreException {
+	private void launchBuild(int kind, ILaunchConfiguration config, Map args, IProgressMonitor monitor) throws CoreException {
 		monitor.subTask(NLS.bind(ExternalToolsModelMessages.ExternalToolBuilder_Running__0_____1, new String[] { config.getName()}));
-		buildStarted(kind);
+		buildStarted(kind, args);
 		// The default value for "launch in background" is true in debug core. If
 		// the user doesn't go through the UI, the new attribute won't be set. This means
 		// that existing Ant builders will try to run in the background (and likely conflict with
 		// each other) without migration.
-		config= ExternalToolMigration.migrateRunInBackground(config);
-		config.launch(ILaunchManager.RUN_MODE, monitor);
+		ILaunchConfiguration newconfig= ExternalToolMigration.migrateRunInBackground(config);
+		newconfig.launch(ILaunchManager.RUN_MODE, monitor);
 		buildEnded();
 	}
 
@@ -215,15 +215,22 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
 	/**
 	 * Stores the currently active build kind and build project when a build begins
 	 * @param buildKind
+	 * @param args the arguments passed into the builder
 	 */
-	private void buildStarted(int buildKind) {
+	private void buildStarted(int buildKind, Map args) {
 		switch (buildKind) {
 			case IncrementalProjectBuilder.INCREMENTAL_BUILD :
 				buildType = IExternalToolConstants.BUILD_TYPE_INCREMENTAL;
 				buildDelta = getDelta(getProject());
 				break;
 			case IncrementalProjectBuilder.FULL_BUILD :
-				buildType = IExternalToolConstants.BUILD_TYPE_FULL;
+				if(args != null && args.containsKey(BuilderCoreUtils.INC_CLEAN)) {
+					buildType = IExternalToolConstants.BUILD_TYPE_INCREMENTAL;
+					buildDelta = getDelta(getProject());
+				}
+				else {
+					buildType = IExternalToolConstants.BUILD_TYPE_FULL;
+				}
 				break;
 			case IncrementalProjectBuilder.AUTO_BUILD :
 				buildType = IExternalToolConstants.BUILD_TYPE_AUTO;
@@ -285,6 +292,6 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
             return;
         }
 	
-		launchBuild(IncrementalProjectBuilder.CLEAN_BUILD, config, monitor);
+		launchBuild(IncrementalProjectBuilder.CLEAN_BUILD, config, null, monitor);
     }
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF
index c5eddf5..68688b1 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.filebuffers; singleton:=true
-Bundle-Version: 3.5.100.qualifier
+Bundle-Version: 3.5.200.qualifier
 Bundle-Activator: org.eclipse.core.internal.filebuffers.FileBuffersPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
@@ -12,7 +12,7 @@ Export-Package:
  org.eclipse.core.filebuffers.manipulation,
  org.eclipse.core.internal.filebuffers;x-internal:=true
 Require-Bundle: 
- org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)";resolution:=optional,
  org.eclipse.text;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.2.0,2.0.0)"
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/FileBuffers.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/FileBuffers.java
index dfbfbe4..0a3c914 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/FileBuffers.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/FileBuffers.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,23 +97,23 @@ public final class FileBuffers {
 	}
 
 	/**
-	 * Returns the workspace file at the given location or <code>null</code> if
-	 * the location is not a valid location in the workspace.
-	 *
+	 * Returns the workspace file at the given location if such a file exists.
+	 * 
 	 * @param location the location
-	 * @return the workspace file at the location or <code>null</code>
+	 * @return the workspace file at the location or <code>null</code> if no such file exists or if
+	 *         the location is not a valid location
 	 */
 	public static IFile getWorkspaceFileAtLocation(IPath location) {
 		return getWorkspaceFileAtLocation(location, false);
 	}
 
 	/**
-	 * Returns the workspace file at the given location or <code>null</code> if
-	 * the location is not a valid location in the workspace.
-	 *
+	 * Returns the workspace file at the given location if such a file exists.
+	 * 
 	 * @param location the location
 	 * @param isNormalized <code>true</code> if the given location is already normalized
-	 * @return the workspace file at the location or <code>null</code>
+	 * @return the workspace file at the location or <code>null</code> if no such file exists or if
+	 *         the location is not a valid location
 	 * @since 3.3
 	 */
 	public static IFile getWorkspaceFileAtLocation(IPath location, boolean isNormalized) {
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBuffer.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBuffer.java
index eba8857..2f52ebc 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBuffer.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBuffer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -166,13 +166,15 @@ public interface IFileBuffer {
 	ISchedulingRule computeValidateStateRule();
 
 	/**
-	 * Validates the state of this file buffer and tries to bring the buffer's
-	 * underlying file into a state in which it can be modified. If state
-	 * validation is not supported this operation does nothing.
-	 *
-	 * @param monitor the progress monitor, or <code>null</code> if progress reporting is not desired
+	 * Validates the state of this file buffer and tries to bring the buffer's underlying file into
+	 * a state in which it can be modified. If state validation is not supported this operation does
+	 * nothing.
+	 * 
+	 * @param monitor the progress monitor, or <code>null</code> if progress reporting is not
+	 *            desired
 	 * @param computationContext the context in which the validation is performed, e.g., a SWT shell
-	 * @exception CoreException if the underlying file can not be accessed to it's state cannot be changed
+	 * @exception CoreException if the underlying file can not be accessed or its state cannot be
+	 *                changed
 	 */
 	void validateState(IProgressMonitor monitor, Object computationContext) throws CoreException;
 
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferListener.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferListener.java
index c3e29c3..785ad8e 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferListener.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,14 +39,14 @@ public interface IFileBufferListener {
 	/**
 	 * Informs the listener about an upcoming replace of the contents of the given buffer.
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 */
 	void bufferContentAboutToBeReplaced(IFileBuffer buffer);
 
 	/**
 	 * Informs the listener that the buffer of the given buffer has been replaced.
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 */
 	void bufferContentReplaced(IFileBuffer buffer);
 
@@ -54,7 +54,7 @@ public interface IFileBufferListener {
 	 * Informs the listener about the start of a state changing operation on
 	 * the given buffer.
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 */
 	void stateChanging(IFileBuffer buffer);
 
@@ -62,7 +62,7 @@ public interface IFileBufferListener {
 	 * Informs the listener that the dirty state of the given buffer changed
 	 * to the specified value
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 * @param isDirty <code>true</code> if the buffer is dirty, <code>false</code> otherwise
 	 */
 	void dirtyStateChanged(IFileBuffer buffer, boolean isDirty);
@@ -70,7 +70,7 @@ public interface IFileBufferListener {
 	/**
 	 * Informs the listener that the state validation changed to the specified value.
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 * @param isStateValidated <code>true</code> if the buffer state is validated, <code>false</code> otherwise
 	 */
 	void stateValidationChanged(IFileBuffer buffer, boolean isStateValidated);
@@ -83,7 +83,7 @@ public interface IFileBufferListener {
 	 * backed by an <code>IFile</code>.
 	 * </p>
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 * @param path the new location (not just the container)
 	 */
 	void underlyingFileMoved(IFileBuffer buffer, IPath path);
@@ -91,7 +91,7 @@ public interface IFileBufferListener {
 	/**
 	 * Informs the listener that the file underlying the given file buffer has been deleted.
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 */
 	void underlyingFileDeleted(IFileBuffer buffer);
 
@@ -99,7 +99,7 @@ public interface IFileBufferListener {
 	 * Informs the listener that a state changing operation on the given
 	 * file buffer failed.
 	 *
-	 * @param buffer the effected file buffer
+	 * @param buffer the affected file buffer
 	 */
 	void stateChangeFailed(IFileBuffer buffer);
 }
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferManager.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferManager.java
index 3313532..3c98800 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferManager.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/filebuffers/IFileBufferManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -300,17 +300,20 @@ public interface IFileBufferManager {
 	void removeFileBufferListener(IFileBufferListener listener);
 
 	/**
-	 * Validates the state of the given file buffers and tries to bring the
-	 * buffer's underlying file into a state in which it can be modified. File
-	 * buffers which do not support state validation are left untouched.
+	 * Validates the state of the given file buffers and tries to bring the buffer's underlying file
+	 * into a state in which it can be modified. File buffers which do not support state validation
+	 * are left untouched.
 	 * <p>
-	 * In case of a single file buffer, {@link IFileBuffer#validateState(IProgressMonitor, Object)} should be used.
+	 * In case of a single file buffer, {@link IFileBuffer#validateState(IProgressMonitor, Object)}
+	 * should be used.
 	 * </p>
-	 *
+	 * 
 	 * @param fileBuffers the file buffers to validate
-	 * @param monitor the progress monitor, or <code>null</code> if progress reporting is not desired
+	 * @param monitor the progress monitor, or <code>null</code> if progress reporting is not
+	 *            desired
 	 * @param computationContext the context in which the validation is performed, e.g., a SWT shell
-	 * @exception CoreException if the underlying file can not be accessed to it's state cannot be changed
+	 * @exception CoreException if the underlying file can not be accessed or its state cannot be
+	 *                changed
 	 * @since 3.1
 	 */
 	void validateState(IFileBuffer[] fileBuffers, IProgressMonitor monitor, Object computationContext) throws CoreException;
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/FileStoreTextFileBuffer.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/FileStoreTextFileBuffer.java
index 9bd0c18..00025c6 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/FileStoreTextFileBuffer.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/FileStoreTextFileBuffer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn <jamesblackburn+eclipse at gmail.com> - [implementation] FileStoreTextFileBuffer eats IOException on external file save - https://bugs.eclipse.org/333660
  *******************************************************************************/
 package org.eclipse.core.internal.filebuffers;
 
@@ -198,19 +199,19 @@ public class FileStoreTextFileBuffer extends FileStoreFileBuffer implements ITex
 			byte[] buffer= new byte[8192];
 			while (true) {
 				int bytesRead= -1;
-				try {
-					bytesRead= stream.read(buffer);
-				} catch (IOException e) {
-				}
-				if (bytesRead == -1)
+				bytesRead= stream.read(buffer);
+				if (bytesRead == -1) {
+					out.close();
 					break;
-				try {
-					out.write(buffer, 0, bytesRead);
-				} catch (IOException e) {
 				}
+				out.write(buffer, 0, bytesRead);
 				if (monitor != null)
 					monitor.worked(1);
 			}
+		} catch (IOException ex) {
+			String message= (ex.getMessage() != null ? ex.getMessage() : ""); //$NON-NLS-1$
+			IStatus s= new Status(IStatus.ERROR, FileBuffersPlugin.PLUGIN_ID, IStatus.OK, message, ex);
+			throw new CoreException(s);
 		} finally {
 			try {
 				stream.close();
@@ -490,6 +491,7 @@ public class FileStoreTextFileBuffer extends FileStoreFileBuffer implements ITex
 
 				out.write(bytes, 0, bytesLength);
 				out.flush();
+				out.close();
 			} catch (IOException x) {
 				IStatus s= new Status(IStatus.ERROR, FileBuffersPlugin.PLUGIN_ID, IStatus.OK, x.getLocalizedMessage(), x);
 				throw new CoreException(s);
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java
index 6c3dc33..7eb9824 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -405,7 +405,7 @@ public abstract class ResourceFileBuffer extends AbstractFileBuffer {
 						handleFileContentChanged(false, false);
 				}
 
-				if (isDerived(fFile)) {
+				if (fFile.isDerived(IResource.CHECK_ANCESTORS)) {
 					IStatus status= new Status(IStatus.WARNING, FileBuffersPlugin.PLUGIN_ID, IFileBufferStatusCodes.DERIVED_FILE, FileBuffersMessages.ResourceFileBuffer_warning_fileIsDerived, null);
 					if (fStatus == null || fStatus.isOK())
 						fStatus= status;
@@ -424,20 +424,6 @@ public abstract class ResourceFileBuffer extends AbstractFileBuffer {
 	}
 
 	/*
-	 *
-	 * @see IResource#isDerived()
-	 * @since 3.3
-	 */
-	private boolean isDerived(IResource resource) {
-		while (resource != null) {
-			if (resource.isDerived())
-				return true;
-			resource= resource.getParent();
-		}
-		return false;
-	}
-
-	/*
 	 * @see org.eclipse.core.filebuffers.IFileBuffer#isStateValidated()
 	 */
 	public boolean isStateValidated() {
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceTextFileBufferManager.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceTextFileBufferManager.java
index b374460..edafab8 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceTextFileBufferManager.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceTextFileBufferManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -206,7 +206,7 @@ public class ResourceTextFileBufferManager extends TextFileBufferManager {
 				return lineDelimiter;
 		}
 		// workspace preference
-		scopeContext= new IScopeContext[] { new InstanceScope() };
+		scopeContext= new IScopeContext[] { InstanceScope.INSTANCE };
 		return Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/SynchronizableDocument.java b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/SynchronizableDocument.java
index 2519bdf..d3b0a45 100644
--- a/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/SynchronizableDocument.java
+++ b/eclipse/plugins/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/SynchronizableDocument.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,10 +51,9 @@ public class SynchronizableDocument extends Document implements ISynchronizable
 
 	/**
 	 * {@inheritDoc}
-	 *
-	 * @deprecated since 3.1. Use
+	 * 
+	 * @deprecated As of 3.1, replaced by
 	 *             {@link IDocumentExtension4#startRewriteSession(DocumentRewriteSessionType)}
-	 *             instead.
 	 */
 	public void startSequentialRewrite(boolean normalized) {
 		Object lockObject= getLockObject();
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/.project b/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/.project
deleted file mode 100644
index 2ffafe6..0000000
--- a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.core.filesystem.linux.ppc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/META-INF/MANIFEST.MF
deleted file mode 100644
index a148bcf..0000000
--- a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,9 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.core.filesystem.linux.ppc;singleton:=true
-Bundle-Version: 1.0.200.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)"
-Bundle-Localization: fragment
-Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=ppc))
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/build.properties b/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/build.properties
deleted file mode 100644
index 93fd333..0000000
--- a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2006, 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = META-INF/,\
-               about.html,\
-               os/,\
-               fragment.properties
-src.includes = about.html
-generateSourceBundle=false
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/fragment.properties b/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/fragment.properties
deleted file mode 100644
index 701a0e4..0000000
--- a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/fragment.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-fragmentName = Core File System for Linux PPC
-providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF
index cb23f6e..5fd2b17 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.core.filesystem.win32.x86; singleton:=true
-Bundle-Version: 1.1.201.qualifier
+Bundle-Version: 1.1.300.qualifier
 Bundle-Vendor: %providerName
 Fragment-Host: org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)"
 Bundle-Localization: fragment
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF
index dde2c2d..1cf91c7 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_64/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.core.filesystem.win32.x86_64; singleton:=true
-Bundle-Version: 1.1.201.qualifier
+Bundle-Version: 1.1.300.qualifier
 Bundle-Vendor: %providerName
 Fragment-Host: org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)"
 Bundle-Localization: fragment
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/.classpath b/eclipse/plugins/org.eclipse.core.filesystem/.classpath
index ce73933..2fbb7a2 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/.classpath
+++ b/eclipse/plugins/org.eclipse.core.filesystem/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.core.filesystem/.settings/org.eclipse.jdt.core.prefs
index 4e676e2..5db17c8 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.core.filesystem/.settings/org.eclipse.jdt.core.prefs
@@ -1,9 +1,10 @@
-#Fri Feb 20 11:53:10 CET 2009
+#Tue Feb 01 14:53:47 CET 2011
 eclipse.preferences.version=1
 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
@@ -137,11 +138,9 @@ org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
 org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
 org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
 org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_comments=false
 org.eclipse.jdt.core.formatter.comment.format_header=false
 org.eclipse.jdt.core.formatter.comment.format_html=true
 org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
@@ -167,7 +166,12 @@ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
 org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.core.filesystem/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..cc8e674
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.filesystem/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:53:47 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF
index 10b42ef..bff18fd 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.filesystem/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.filesystem; singleton:=true
-Bundle-Version: 1.3.1.qualifier
+Bundle-Version: 1.3.100.qualifier
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.equinox.registry;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/natives/unix/hpux/PA_RISC.mak b/eclipse/plugins/org.eclipse.core.filesystem/natives/unix/hpux/PA_RISC.mak
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/natives/unix/hpux/ia64_32.mak b/eclipse/plugins/org.eclipse.core.filesystem/natives/unix/hpux/ia64_32.mak
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/natives/unix/qnx/Makefile b/eclipse/plugins/org.eclipse.core.filesystem/natives/unix/qnx/Makefile
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/natives/win32/localfile.c b/eclipse/plugins/org.eclipse.core.filesystem/natives/win32/localfile.c
index 3206e90..f428b60 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/natives/win32/localfile.c
+++ b/eclipse/plugins/org.eclipse.core.filesystem/natives/win32/localfile.c
@@ -8,12 +8,46 @@
  *  Contributors:
  *  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
+#define _WIN32_WINNT 0x0500
 #include <jni.h>
 #include <io.h>
 #include <sys/stat.h>
 #include <windows.h>
 #include <stdio.h>
 #include "../localfile.h"
+#include <winioctl.h>
+
+#ifndef IO_REPARSE_TAG_SYMLINK
+#define IO_REPARSE_TAG_SYMLINK 0xA000000C
+#endif
+
+typedef struct _REPARSE_DATA_BUFFER {
+  ULONG  ReparseTag;
+  USHORT ReparseDataLength;
+  USHORT Reserved;
+  union {
+    struct {
+      USHORT SubstituteNameOffset;
+      USHORT SubstituteNameLength;
+      USHORT PrintNameOffset;
+      USHORT PrintNameLength;
+      ULONG  Flags;
+      WCHAR  PathBuffer[1];
+    } SymbolicLinkReparseBuffer;
+    struct {
+      USHORT SubstituteNameOffset;
+      USHORT SubstituteNameLength;
+      USHORT PrintNameOffset;
+      USHORT PrintNameLength;
+      WCHAR  PathBuffer[1];
+    } MountPointReparseBuffer;
+    struct {
+      UCHAR DataBuffer[1];
+    } GenericReparseBuffer;
+  };
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+
+
 
 /*
  * Converts a FILETIME in a java long (milliseconds).
@@ -55,7 +89,14 @@ jbyte* getByteArray(JNIEnv *env, jbyteArray target) {
  */
 JNIEXPORT jint JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_nativeAttributes
   (JNIEnv *env, jclass clazz) {
-    return ATTRIBUTE_READ_ONLY | ATTRIBUTE_ARCHIVE | ATTRIBUTE_HIDDEN;
+	jint attributes = ATTRIBUTE_READ_ONLY | ATTRIBUTE_ARCHIVE | ATTRIBUTE_HIDDEN;
+	HMODULE kernelModule = LoadLibraryW(L"kernel32.dll");
+	if (kernelModule == NULL)
+		return attributes;
+	if (GetProcAddress(kernelModule, "CreateSymbolicLinkW") != NULL)
+  		attributes |= ATTRIBUTE_SYMLINK | ATTRIBUTE_LINK_TARGET;
+	FreeLibrary(kernelModule);
+	return attributes;
 }
 
 /*
@@ -65,7 +106,6 @@ JNIEXPORT jint JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFile
  */
 JNIEXPORT jboolean JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_internalIsUnicode
   (JNIEnv *env, jclass clazz) {
-	HANDLE hModule;
   	OSVERSIONINFO osvi;
   	memset(&osvi, 0, sizeof(OSVERSIONINFO));
   	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
@@ -74,7 +114,7 @@ JNIEXPORT jboolean JNICALL Java_org_eclipse_core_internal_filesystem_local_Local
 	// only Windows NT 4, Windows 2K and XP support Unicode API calls
     if (!(osvi.dwMajorVersion >= 5 || (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion == 4)))
 		return JNI_FALSE;
-	return JNI_TRUE;		
+	return JNI_TRUE;
 }
 
 /*
@@ -183,9 +223,32 @@ jboolean convertFindDataToFileInfo(JNIEnv *env, WIN32_FIND_DATA info, jobject fi
 }
 
 /*
+ * Set symbolic link information in IFileInfo 
+ */
+jboolean setSymlinkInFileInfo (JNIEnv *env, jobject fileInfo, jstring linkTarget) {
+    jclass cls;
+    jmethodID mid;
+
+    cls = (*env)->GetObjectClass(env, fileInfo);
+    if (cls == 0) return JNI_FALSE;
+
+    // set symlink attribute
+    mid = (*env)->GetMethodID(env, cls, "setAttribute", "(IZ)V");
+    if (mid == 0) return JNI_FALSE;
+    (*env)->CallVoidMethod(env, fileInfo, mid, ATTRIBUTE_SYMLINK, JNI_TRUE);
+    
+    // set link target
+    mid = (*env)->GetMethodID(env, cls, "setStringAttribute", "(ILjava/lang/String;)V");
+    if (mid == 0) return JNI_FALSE;
+    (*env)->CallVoidMethod(env, fileInfo, mid, ATTRIBUTE_LINK_TARGET, linkTarget);
+    return JNI_TRUE;
+}
+
+
+/*
  * Converts a WIN32_FIND_DATAW to IFileInfo 
  */
-jboolean convertFindDataWToFileInfo(JNIEnv *env, WIN32_FIND_DATAW info, jobject fileInfo) {
+jboolean convertFindDataWToFileInfo(JNIEnv *env, WIN32_FIND_DATAW info, jobject fileInfo, jchar *filename) {
     jclass cls;
     jmethodID mid;
 	jstring nameString;
@@ -246,6 +309,55 @@ jboolean convertFindDataWToFileInfo(JNIEnv *env, WIN32_FIND_DATAW info, jobject
 	    if (mid == 0) return JNI_FALSE;
 	    (*env)->CallVoidMethod(env, fileInfo, mid, ATTRIBUTE_HIDDEN, JNI_TRUE);
     }
+
+	if ((info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) &&
+			  info.dwReserved0 == IO_REPARSE_TAG_SYMLINK) {
+		REPARSE_DATA_BUFFER *rdb;
+		DWORD bytesReturned;
+		BOOL result;
+		jstring nameString;
+		jsize len;
+		HANDLE fh = CreateFileW(filename, FILE_READ_EA, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL);
+		if (fh == INVALID_HANDLE_VALUE) {
+			goto error;
+		}
+
+		rdb = malloc(MAXIMUM_REPARSE_DATA_BUFFER_SIZE);
+		if (rdb == NULL) {
+			CloseHandle(fh);
+			goto error;
+		}
+ 
+		result = DeviceIoControl(fh, FSCTL_GET_REPARSE_POINT, NULL, 0, rdb, MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &bytesReturned, NULL);
+
+		CloseHandle(fh);
+		if (!result) {
+			free(rdb);
+			goto error;
+		}
+ 
+		//check again, make sure it has not changed
+		if (rdb->ReparseTag == IO_REPARSE_TAG_SYMLINK) {
+			WCHAR *targetName;
+			len = rdb->SymbolicLinkReparseBuffer.PrintNameLength / sizeof(WCHAR);
+			if (len > 0) {
+				targetName = &rdb->SymbolicLinkReparseBuffer.PathBuffer[rdb->SymbolicLinkReparseBuffer.PrintNameOffset / sizeof(WCHAR)]; 
+			} else {
+				len = rdb->SymbolicLinkReparseBuffer.SubstituteNameLength / sizeof(WCHAR);
+				targetName = &rdb->SymbolicLinkReparseBuffer.PathBuffer[rdb->SymbolicLinkReparseBuffer.SubstituteNameOffset / sizeof(WCHAR)]; 
+			}
+			nameString = (*env)->NewString(env, (jchar *)targetName, len);
+			free(rdb);
+		} else {
+			free(rdb);
+error:
+			nameString = (*env)->NewString(env, (jchar *)&nameString, 0);
+		}
+		if (nameString == NULL) {
+			return JNI_FALSE;
+		}
+		return setSymlinkInFileInfo(env, fileInfo, nameString);
+	}
     return JNI_TRUE;
 }
 
@@ -307,6 +419,7 @@ JNIEXPORT jboolean JNICALL Java_org_eclipse_core_internal_filesystem_local_Local
 	jsize size;
 	HANDLE handle;
 	WIN32_FIND_DATAW info;
+	jboolean result;
 	
 	name = getCharArray(env, target);	
 	size = (*env)->GetArrayLength(env, target);
@@ -318,11 +431,15 @@ JNIEXPORT jboolean JNICALL Java_org_eclipse_core_internal_filesystem_local_Local
 		return fillEmptyDirectory(env, fileInfo);
 	}
 	handle = FindFirstFileW(name, &info);
-	free(name);
-	if (handle == INVALID_HANDLE_VALUE)
+	if (handle == INVALID_HANDLE_VALUE) {
+		free(name);
 		return JNI_FALSE;
+	}
+
 	FindClose(handle);
-	return convertFindDataWToFileInfo(env, info, fileInfo);
+	result = convertFindDataWToFileInfo(env, info, fileInfo, name);
+	free(name);
+	return result;
 }
 
 /*
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/filesystem/provider/FileStore.java b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/filesystem/provider/FileStore.java
index 93bef7a..7d49128 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/filesystem/provider/FileStore.java
+++ b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/filesystem/provider/FileStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.filesystem.provider;
 
@@ -76,9 +77,11 @@ public abstract class FileStore extends PlatformObject implements IFileStore {
 						String msg = NLS.bind(Messages.failedReadDuringWrite, path);
 						Policy.error(EFS.ERROR_READ, msg, e);
 					}
-					if (bytesRead == -1)
-						break;
 					try {
+						if (bytesRead == -1) {
+							destination.close();
+							break;
+						}
 						destination.write(buffer, 0, bytesRead);
 					} catch (IOException e) {
 						String msg = NLS.bind(Messages.couldNotWrite, path);
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/FileCache.java b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/FileCache.java
index 9bef3ab..4dd237b 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/FileCache.java
+++ b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/FileCache.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.core.filesystem.*;
 import org.eclipse.core.filesystem.provider.FileStore;
 import org.eclipse.core.internal.filesystem.local.LocalFile;
 import org.eclipse.core.runtime.*;
+import org.eclipse.osgi.service.environment.Constants;
 import org.eclipse.osgi.util.NLS;
 
 /**
@@ -31,6 +32,11 @@ public class FileCache {
 	private static final Object creationLock = new Object();
 
 	/**
+	 * Cached constant indicating if the current OS is Mac OSX
+	 */
+	static final boolean MACOSX = FileCache.getOS().equals(Constants.OS_MACOSX);
+
+	/**
 	 * The singleton file cache instance.
 	 */
 	private static FileCache instance = null;
@@ -103,9 +109,46 @@ public class FileCache {
 	 */
 	private void cleanOldCache(File cacheParent) throws CoreException {
 		//clear any old cache - this could be moved to a background thread
+		if (MACOSX) {
+			// fix for bug 323833: clear the immutable flag before old cache deletion on MacOS
+			clearImmutableFlag(cacheParent);
+		}
 		new LocalFile(cacheParent).delete(EFS.NONE, null);
 	}
 
+	private void clearImmutableFlag(File target) {
+		if (!target.exists()) {
+			return;
+		}
+		if (target.isDirectory()) {
+			File[] children = target.listFiles();
+			if (children != null) {
+				for (int i = 0, imax = children.length; i < imax; i++) {
+					clearImmutableFlag(children[i]);
+				}
+			}
+		} else {
+			LocalFile lfile = new LocalFile(target);
+			try {
+				IFileInfo info = lfile.fetchInfo(EFS.NONE, null);
+				if (info.getAttribute(EFS.ATTRIBUTE_IMMUTABLE)) {
+					info.setAttribute(EFS.ATTRIBUTE_IMMUTABLE, false);
+					lfile.putInfo(info, EFS.SET_ATTRIBUTES, null);
+				}
+			} catch (CoreException e) {
+				// ignore and continue since failed deletions will be reported by LocalFile.delete()
+			}
+		}
+	}
+
+	/**
+	 * Returns the current OS.  This is equivalent to Platform.getOS(), but
+	 * is tolerant of the platform runtime not being present.
+	 */
+	static String getOS() {
+		return System.getProperty("osgi.os", ""); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
 	/**
 	 * Returns a new unique directory in the given parent directory.
 	 * 
diff --git a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java
index 575f529..e0d52bf 100644
--- a/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java
+++ b/eclipse/plugins/org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem/local/unix/UnixFileNatives.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -132,8 +132,8 @@ public abstract class UnixFileNatives {
 			StructStat stat = new StructStat();
 			if (stat(name, stat) == 0) {
 				long flags = stat.st_flags;
-				flags |= UnixFileFlags.SF_IMMUTABLE;
-				code |= chflags(name, UnixFileFlags.UF_IMMUTABLE);
+				flags |= UnixFileFlags.UF_IMMUTABLE;
+				code |= chflags(name, (int) flags);
 			}
 		}
 		return code == 0;
diff --git a/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF
index 5efc247..d10a320 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.jobs/META-INF/MANIFEST.MF
@@ -2,15 +2,15 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.jobs; singleton:=true
-Bundle-Version: 3.5.1.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.core.internal.jobs;x-internal:=true,
  org.eclipse.core.runtime.jobs
 Bundle-Activator: org.eclipse.core.internal.jobs.JobActivator
 Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.2.0,4.0.0)"
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
+Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,
+ J2SE-1.4
 Eclipse-LazyStart: true
 Import-Package: org.eclipse.osgi.service.debug,
  org.eclipse.osgi.util,
diff --git a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/DeadlockDetector.java b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/DeadlockDetector.java
index 938b728..a3e37c9 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/DeadlockDetector.java
+++ b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/DeadlockDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -396,12 +396,11 @@ class DeadlockDetector {
 			return null;
 		//there is a deadlock in the graph
 		Thread[] threads = getThreadsInDeadlock(client);
+		//find a thread whose locks can be suspended to resolve the deadlock
 		Thread candidate = resolutionCandidate(threads);
 		ISchedulingRule[] locksToSuspend = realLocksForThread(candidate);
 		Deadlock deadlock = new Deadlock(threads, locksToSuspend, candidate);
-		//find a thread whose locks can be suspended to resolve the deadlock
-		if (JobManager.DEBUG_LOCKS)
-			reportDeadlock(deadlock);
+		reportDeadlock(deadlock);
 		if (JobManager.DEBUG_DEADLOCK)
 			throw new IllegalStateException("Deadlock detected. Caused by thread " + client.getName() + '.'); //$NON-NLS-1$
 		// Update the graph to indicate that the locks will now be suspended.
@@ -415,6 +414,7 @@ class DeadlockDetector {
 	/**
 	 * The given thread has stopped waiting for the given lock. 
 	 * Update the graph.
+	 * If the lock has already been granted, then it isn't removed.
 	 */
 	void lockWaitStop(Thread owner, ISchedulingRule lock) {
 		int lockIndex = indexOf(lock, false);
@@ -430,8 +430,12 @@ class DeadlockDetector {
 				System.out.println("Lock " + lock + " was already removed."); //$NON-NLS-1$ //$NON-NLS-2$
 			return;
 		}
-		if (graph[threadIndex][lockIndex] != WAITING_FOR_LOCK)
-			Assert.isTrue(false, "Thread " + owner.getName() + " was not waiting for lock " + lock.toString() + " so it could not time out."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		if (graph[threadIndex][lockIndex] != WAITING_FOR_LOCK) {
+			// Lock has already been granted, nothing to do...
+			if (JobManager.DEBUG_LOCKS)
+				System.out.println("Lock " + lock + " already granted to depth: " + graph[threadIndex][lockIndex]); //$NON-NLS-1$ //$NON-NLS-2$
+			return;
+		}
 		graph[threadIndex][lockIndex] = NO_STATE;
 		reduceGraph(threadIndex, lock);
 	}
diff --git a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java
index 6f423f6..e35aef8 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java
+++ b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1450,6 +1450,25 @@ public class JobManager implements IJobManager {
 	}
 
 	/**
+	 * Invokes {@link Job#shouldRun()} while guarding against unexpected failures.
+	 */
+	private boolean shouldRun(Job job) {
+		Throwable t;
+		try {
+			return job.shouldRun();
+		} catch (Exception e) {
+			t = e;
+		} catch (LinkageError e) {
+			t = e;
+		} catch (AssertionError e) {
+			t = e;
+		}
+		RuntimeLog.log(new Status(IStatus.ERROR, JobManager.PI_JOBS, JobManager.PLUGIN_ERROR, "Error invoking shouldRun() method on: " + job, t)); //$NON-NLS-1$
+		//if the should is unexpectedly failing it is safer not to run it
+		return false;
+	}
+
+	/**
 	 * Returns the next job to be run, or null if no jobs are waiting to run.
 	 * The worker must call endJob when the job is finished running.  
 	 */
@@ -1460,7 +1479,7 @@ public class JobManager implements IJobManager {
 			if (job == null)
 				return null;
 			//must perform this outside sync block because it is third party code
-			boolean shouldRun = job.shouldRun();
+			boolean shouldRun = shouldRun(job);
 			//check for listener veto
 			if (shouldRun)
 				jobListeners.aboutToRun(job);
@@ -1494,7 +1513,7 @@ public class JobManager implements IJobManager {
 
 	}
 
-	/* non-Javadoc)
+	/* (non-Javadoc)
 	 * @see org.eclipse.core.runtime.jobs.IJobManager#suspend()
 	 */
 	public final void suspend() {
@@ -1512,7 +1531,7 @@ public class JobManager implements IJobManager {
 		implicitJobs.suspend(rule, monitorFor(monitor));
 	}
 
-	/* non-Javadoc)
+	/* (non-Javadoc)
 	 * @see org.eclipse.core.runtime.jobs.IJobManager#transferRule()
 	 */
 	public void transferRule(ISchedulingRule rule, Thread destinationThread) {
diff --git a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java
index 069b59d..efacd10 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java
+++ b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java
@@ -275,6 +275,8 @@ public class LockManager {
 
 	/**
 	 * This thread has just stopped waiting for a lock. Update graph.
+	 * If the thread has already been granted the lock (or wasn't waiting
+	 * for the lock) then the graph remains unchanged.
 	 */
 	void removeLockWaitThread(Thread thread, ISchedulingRule lock) {
 		DeadlockDetector tempLocks = locks;
diff --git a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java
index 146559e..ab05e97 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java
+++ b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -258,15 +258,20 @@ class ThreadJob extends Job {
 				if (manager.getLockManager().aboutToWait(blocker))
 					// Condition #2.
 					return threadJob;
+
+				// Notify the lock manager that we're about to block waiting for the scheduling rule
+				manager.getLockManager().addLockWaitThread(currentThread, threadJob.getRule());
 				synchronized (blockingJob.jobStateLock) {
 					try {
 						// Wait until we are no longer definitely blocked (not running). 
 						// The actual exit conditions are listed above at the beginning of
-						// this while loop. 
-						if (blockingJob.getState() == Job.RUNNING)
-							// If we canBlock do not use a timeout value. Otherwise, 
-							// timeout and recheck conditions other than #1 (above). 
-							blockingJob.jobStateLock.wait(canBlock ? 0 : 250);
+						// this while loop
+						int state = blockingJob.getState();
+						//ensure we don't wait forever if the blocker is waiting, because it might have yielded to me
+						if (state == Job.RUNNING && canBlock)
+							blockingJob.jobStateLock.wait();
+						else if (state != Job.NONE)
+							blockingJob.jobStateLock.wait(250);
 					} catch (InterruptedException e) {
 						// This thread may be interrupted via two common scenarios. 1) If
 						// the UISynchronizer is in use and this thread is a UI thread
@@ -278,6 +283,9 @@ class ThreadJob extends Job {
 						interrupted = true;
 					}
 				}
+				// Going around the loop again.  Ensure we're not marked as waiting for the thread
+				// as external code is run via the monitor (Bug 262032).
+				manager.getLockManager().removeLockWaitThread(currentThread, threadJob.getRule());
 			}
 		} finally {
 			if (interrupted)
@@ -421,12 +429,11 @@ class ThreadJob extends Job {
 
 	/**
 	 * Indicates the start of a wait on a scheduling rule. Report the
-	 * blockage to the progress manager and update the lock manager.
+	 * blockage to the progress manager.
 	 * @param monitor The monitor to report blocking to
 	 * @param blockingJob The job that is blocking this thread, or <code>null</code>
 	 */
 	static private void waitStart(ThreadJob threadJob, IProgressMonitor monitor, InternalJob blockingJob) {
-		manager.getLockManager().addLockWaitThread(Thread.currentThread(), threadJob.getRule());
 		threadJob.isBlocked = true;
 		manager.reportBlocked(monitor, blockingJob);
 	}
diff --git a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/WorkerPool.java b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/WorkerPool.java
index a4f8899..bd86bbb 100644
--- a/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/WorkerPool.java
+++ b/eclipse/plugins/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/WorkerPool.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2009 IBM Corporation and others.
+ *  Copyright (c) 2003, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -95,16 +95,19 @@ class WorkerPool {
 	 * OutOfMemoryError conditions and thus must be paranoid about allocating objects.
 	 */
 	protected void endJob(InternalJob job, IStatus result) {
-		decrementBusyThreads();
-		//need to end rule in graph before ending job so that 2 threads
-		//do not become the owners of the same rule in the graph
-		if ((job.getRule() != null) && !(job instanceof ThreadJob)) {
-			//remove any locks this thread may be owning on that rule
-			manager.getLockManager().removeLockCompletely(Thread.currentThread(), job.getRule());
+		try {
+			//need to end rule in graph before ending job so that 2 threads
+			//do not become the owners of the same rule in the graph
+			if ((job.getRule() != null) && !(job instanceof ThreadJob)) {
+				//remove any locks this thread may be owning on that rule
+				manager.getLockManager().removeLockCompletely(Thread.currentThread(), job.getRule());
+			}
+			manager.endJob(job, result, true);
+			//ensure this thread no longer owns any scheduling rules
+			manager.implicitJobs.endJob(job);
+		} finally {
+			decrementBusyThreads();
 		}
-		manager.endJob(job, result, true);
-		//ensure this thread no longer owns any scheduling rules
-		manager.implicitJobs.endJob(job);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
index 9c99a62..8c64fb3 100644
--- a/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-Localization: fragment
 Bundle-SymbolicName: org.eclipse.core.net.linux.x86;singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 1.1.200.qualifier
 Fragment-Host: org.eclipse.core.net;bundle-version="1.1.0"
 Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86))
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.core.net/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.core.net/.settings/org.eclipse.jdt.core.prefs
index db828e6..1347397 100644
--- a/eclipse/plugins/org.eclipse.core.net/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.core.net/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,17 @@
-#Fri Feb 20 12:31:47 CET 2009
+#Tue Feb 01 14:40:09 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=error
@@ -83,3 +92,5 @@ org.eclipse.jdt.core.compiler.source=1.3
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,XXX
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.core.net/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.core.net/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..375d810
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.net/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:40:09 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
index 9c99a62..8c64fb3 100644
--- a/eclipse/plugins/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-Localization: fragment
 Bundle-SymbolicName: org.eclipse.core.net.linux.x86;singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 1.1.200.qualifier
 Fragment-Host: org.eclipse.core.net;bundle-version="1.1.0"
 Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86))
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.core.net/plugin.xml b/eclipse/plugins/org.eclipse.core.net/plugin.xml
index ae647fe..2e20c34 100644
--- a/eclipse/plugins/org.eclipse.core.net/plugin.xml
+++ b/eclipse/plugins/org.eclipse.core.net/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?>
+<!--
+    Copyright (c) 2007, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
    <extension-point id="authenticator" name="Authenticator" schema="schema/authenticator.exsd"/>
    <extension
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/AbstractProxyProvider.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/AbstractProxyProvider.java
index 5bd72ea..c9cbf05 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/AbstractProxyProvider.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/AbstractProxyProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Oakland Software Incorporated and others
+ * Copyright (c) 2008, 2010 Oakland Software Incorporated and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,30 +28,7 @@ public abstract class AbstractProxyProvider {
 	 *            the URI that a connection is required to
 	 * @return an array of proxies for the given URI
 	 */
-	public IProxyData[] select(URI uri) {
-		String[] nonProxyHosts = getNonProxiedHosts();
-		
-		if (nonProxyHosts != null) {
-			String host = uri.getHost();
-			for (int npIndex = 0; npIndex < nonProxyHosts.length; npIndex++) {
-				if (host.equals(nonProxyHosts[npIndex])) {
-					return new IProxyData[0];
-				}
-			}
-		}
-
-		IProxyData[] proxies = getProxyData(uri);
-		
-		if (Policy.DEBUG) {
-			Policy.debug("AbstractProxyProvider#select result for [" + uri + "]"); //$NON-NLS-1$ //$NON-NLS-2$
-			for (int i = 0; i < proxies.length; i++)
-				System.out.println("	" + proxies[i]); //$NON-NLS-1$
-		}
-		
-		return proxies;
-	}
-
-	protected abstract IProxyData[] getProxyData(URI uri);
+	public abstract IProxyData[] select(URI uri);
 
 	protected abstract IProxyData[] getProxyData();
 
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/Activator.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/Activator.java
index 5ed05a2..419bd09 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/Activator.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,6 @@ import org.eclipse.core.net.proxy.IProxyService;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
 import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.service.datalocation.Location;
@@ -61,6 +60,8 @@ public class Activator implements BundleActivator {
 	
 	private boolean debug = false;
 
+	private PreferenceManager preferenceManger;
+
 	/**
 	 * Constructor for use by the Eclipse platform only.
 	 */
@@ -140,8 +141,8 @@ public class Activator implements BundleActivator {
 				status.getCode(), status.getMessage(), stackCode, t, children);
 	}
 
-	public org.osgi.service.prefs.Preferences getPreferences() {
-		return new ConfigurationScope().getNode(ID);
+	public PreferenceManager getPreferenceManager() {
+		return preferenceManger;
 	}
 
 	public boolean instanceLocationAvailable() {
@@ -152,6 +153,7 @@ public class Activator implements BundleActivator {
 
 	public void start(BundleContext context) throws Exception {
 		this.bundleContext = context;
+		this.preferenceManger = PreferenceManager.createConfigurationManager(ID);
 		Filter filter = null;
 		try {
 			filter = context.createFilter(Location.INSTANCE_FILTER);
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceInitializer.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceInitializer.java
index d154f94..1570a62 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,17 +10,47 @@
  *******************************************************************************/
 package org.eclipse.core.internal.net;
 
+import org.eclipse.core.net.proxy.IProxyData;
 import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
 
 public class PreferenceInitializer extends AbstractPreferenceInitializer {
 	
+	private static final int DEFAULT_PREF_PROXY_PORT = -1;
+	private static final boolean DEFAULT_PREF_PROXY_HAS_AUTH = false;
+	private static final boolean DEFAULT_PREF_ENABLED = true;
+	private static final boolean DEFAULT_PREF_OS = true;
+	private static final String DEFAULT_PREF_NON_PROXIED_HOSTS = "localhost|127.0.0.1"; //$NON-NLS-1$
 	public PreferenceInitializer() {
 		super();
 	}
 
 	public void initializeDefaultPreferences() {
-		// TODO: We should set defaults in the default scope
-		//((ProxyManager)ProxyManager.getProxyManager()).initialize();
+		IEclipsePreferences node = new DefaultScope().getNode(Activator.ID);
+		node.put(ProxyManager.PREF_NON_PROXIED_HOSTS, DEFAULT_PREF_NON_PROXIED_HOSTS);
+		node.putBoolean(ProxyManager.PREF_ENABLED, DEFAULT_PREF_ENABLED);
+		node.putBoolean(ProxyManager.PREF_OS, DEFAULT_PREF_OS);
+		
+		Preferences type = node.node(ProxyType.PREF_PROXY_DATA_NODE).node(IProxyData.HTTP_PROXY_TYPE);
+		type.putInt(ProxyType.PREF_PROXY_PORT, DEFAULT_PREF_PROXY_PORT);
+		type.putBoolean(ProxyType.PREF_PROXY_HAS_AUTH, DEFAULT_PREF_PROXY_HAS_AUTH);
+		
+		type = node.node(ProxyType.PREF_PROXY_DATA_NODE).node(IProxyData.HTTPS_PROXY_TYPE);
+		type.putInt(ProxyType.PREF_PROXY_PORT, DEFAULT_PREF_PROXY_PORT); 
+		type.putBoolean(ProxyType.PREF_PROXY_HAS_AUTH, DEFAULT_PREF_PROXY_HAS_AUTH);
+		
+		type = node.node(ProxyType.PREF_PROXY_DATA_NODE).node(IProxyData.SOCKS_PROXY_TYPE);
+		type.putInt(ProxyType.PREF_PROXY_PORT, DEFAULT_PREF_PROXY_PORT); 
+		type.putBoolean(ProxyType.PREF_PROXY_HAS_AUTH, DEFAULT_PREF_PROXY_HAS_AUTH);
+	
+		try {
+			node.flush();
+		} catch (BackingStoreException e) {
+			Activator.logInfo("Could not store default preferences", e); //$NON-NLS-1$
+		}
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceManager.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceManager.java
new file mode 100644
index 0000000..7039d10
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceManager.java
@@ -0,0 +1,379 @@
+/*******************************************************************************
+* Copyright (c) 2010, 2011 IBM Corporation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     IBM Corporation - initial API and implementation
+*******************************************************************************/
+package org.eclipse.core.internal.net;
+
+import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.runtime.preferences.ConfigurationScope;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.INodeChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * Provides set of methods to operate on preferences
+ */
+public class PreferenceManager {
+	
+	public static final String ROOT = ""; //$NON-NLS-1$
+	
+	private static final String PREF_HAS_MIGRATED = "org.eclipse.core.net.hasMigrated"; //$NON-NLS-1$
+
+	/**
+	 * Preference constants used by Update to record the HTTP proxy
+	 */
+	private static String HTTP_PROXY_HOST = "org.eclipse.update.core.proxy.host"; //$NON-NLS-1$
+	private static String HTTP_PROXY_PORT = "org.eclipse.update.core.proxy.port"; //$NON-NLS-1$
+	private static String HTTP_PROXY_ENABLE = "org.eclipse.update.core.proxy.enable"; //$NON-NLS-1$
+	
+	private static final int DEFAULT_INT = -1;
+	private static final String DEFAULT_STRING = null;
+	private static final boolean DEFAULT_BOOLEAN = false;
+
+	private static boolean migrated = false;
+
+	private IEclipsePreferences defaultScope;
+	private IEclipsePreferences currentScope;
+
+	private PreferenceManager(String id) {
+		this.defaultScope = new DefaultScope().getNode(id);
+	}
+	
+	/**
+	 * Creates the preferences manager for the node defined by id
+	 * in configuration scope.
+	 * @param id node name for which node should be created in configuration scope 
+	 * @return {@link PreferenceManager}
+	 */
+	public static PreferenceManager createConfigurationManager(String id) {
+		PreferenceManager manager = new PreferenceManager(id);
+		manager.currentScope = new ConfigurationScope().getNode(id);
+		return manager;
+	}
+	
+	/**
+	 * Checks if preference migration was already performed.
+	 * @return <code>boolean</code>
+	 */
+	public boolean isMigrated() {
+		return migrated;
+	}
+	
+	/**
+	 * Returns the <code>boolean</code> value associated with the specified <code>key</code> 
+	 * for specified <code>node</code> in current scope. 
+	 * 
+	 * <p>
+	 * Returns the value specified in the default scope if there is no value associated with the
+	 * <code>key</code> in the current scope, the backing store is inaccessible, or if the associated
+	 * value is something that can not be parsed as an integer value.
+	 * Use {@link #putBoolean(String, String, boolean)} to set the value of this preference key.
+	 * </p>
+	 * @param node node
+	 * @param key key whose associated value is to be returned as an <code>boolean</code>.
+	 * @return the <code>boolean</code> value associated with <code>key</code>, or
+	 *         <code>false</code> if the associated value does not exist in either scope or cannot
+	 *         be interpreted as an <code>boolean</code>.
+	 * @see #putBoolean(String, String, boolean)
+	 */
+	public boolean getBoolean(String node, String key) {
+		return currentScope.node(node).getBoolean(key, defaultScope.node(node).getBoolean(key, DEFAULT_BOOLEAN));
+	}
+
+	/**
+	 * Returns the <code>int</code> value associated with the specified <code>key</code> 
+	 * for specified <code>node</code> in current scope. 
+	 * 
+	 * <p>
+	 * Returns the value specified in the default scope if there is no value associated with the
+	 * <code>key</code> in the current scope, the backing store is inaccessible, or if the associated
+	 * value is something that can not be parsed as an integer value.
+	 * Use {@link #putInt(String, String, int)} to set the value of this preference key.
+	 * </p>
+	 * @param node node
+	 * @param key key whose associated value is to be returned as an <code>int</code>.
+	 * @return the <code>int</code> value associated with <code>key</code>, or
+	 *         <code>-1</code> if the associated value does not exist in either scope or cannot
+	 *         be interpreted as an <code>int</code>.
+	 * @see #putInt(String, String, int)
+	 */
+	public int getInt(String node, String key) {
+		return currentScope.node(node).getInt(key, defaultScope.node(node).getInt(key, DEFAULT_INT));
+	}
+
+	/**
+	 * Returns the <code>String</code> value associated with the specified <code>key</code> 
+	 * for specified <code>node</code> in current scope. 
+	 * 
+	 * <p>
+	 * Returns the value specified in the default scope if there is no value associated with the
+	 * <code>key</code> in the current scope, the backing store is inaccessible, or if the associated
+	 * value is something that can not be parsed as an integer value.
+	 * Use {@link #putString(String, String, String)} to set the value of this preference key.
+	 * </p>
+	 * @param node node
+	 * @param key key whose associated value is to be returned as an <code>String</code>.
+	 * @return the <code>String</code> value associated with <code>key</code>, or
+	 *         <code>null</code> if the associated value does not exist in either scope or cannot
+	 *         be interpreted as an <code>String</code>.
+	 * @see #putString(String, String, String)
+	 */
+	public String getString(String node, String key) {
+		return currentScope.node(node).get(key, defaultScope.node(node).get(key, DEFAULT_STRING));
+	}
+	
+	/**
+	 * Associates the specified <code>int</code> value with the specified key 
+	 * for specified <code>node</code> in current scope.
+	 * 
+	 * @param node node 
+	 * @param key <code>key</code> with which the string form of value is to be associated.
+	 * @param value <code>value</code> to be associated with <code>key</code>.
+	 * @see #getInt(String, String)
+	 */
+	public void putInt(String node, String key, int value) {
+		currentScope.node(node).putInt(key, value);
+	}
+
+	/**
+	 * Associates the specified <code>boolean</code> value with the specified key
+	 * for specified <code>node</code> in current scope.
+	 * 
+	 * @param node node 
+	 * @param key <code>key</code> with which the string form of value is to be associated.
+	 * @param value <code>value</code> to be associated with <code>key</code>.
+	 * @see #getBoolean(String, String)
+	 */
+	public void putBoolean(String node, String key, boolean value) {
+		currentScope.node(node).putBoolean(key, value);
+	}
+
+	/**
+	 * Associates the specified <code>String</code> value with the specified key
+	 * for specified <code>node</code> in current scope.
+	 * 
+	 * @param node node 
+	 * @param key <code>key</code> with which the string form of value is to be associated.
+	 * @param value <code>value</code> to be associated with <code>key</code>.
+	 * @see #getString(String, String)
+	 */
+	public void putString(String node, String key, String value) {
+		currentScope.node(node).put(key, value);
+	}
+	
+	/**
+	 * Register the given listener for notification of preference changes.
+	 * Calling this method multiple times with the same listener has no effect. The
+	 * given listener argument must not be <code>null</code>.
+	 * 
+	 * @param node node
+	 * @param listener the preference change listener to register
+	 * @see #removePreferenceChangeListener(String, IEclipsePreferences.IPreferenceChangeListener)
+	 * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener
+	 */
+	public void addPreferenceChangeListener(String node, IPreferenceChangeListener listener) {
+		((IEclipsePreferences)currentScope.node(node)).addPreferenceChangeListener(listener);
+	}
+
+	/**
+	 * De-register the given listener from receiving notification of preference changes
+	 * Calling this method multiple times with the same listener has no
+	 * effect. The given listener argument must not be <code>null</code>.
+	 * @param node node
+	 * @param listener the preference change listener to remove
+	 * @see #addPreferenceChangeListener(String, IEclipsePreferences.IPreferenceChangeListener)
+	 * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener
+	 */
+	public void removePreferenceChangeListener(String node, IPreferenceChangeListener listener) {
+		((IEclipsePreferences)currentScope.node(node)).removePreferenceChangeListener(listener);
+	}
+	
+	/**
+	 * Register the given listener for changes to this node.
+	 * Calling this method multiple times with the same listener has no effect. The
+	 * given listener argument must not be <code>null</code>.
+	 * 
+	 * @param node node
+	 * @param listener the preference change listener to register
+	 * @see #removeNodeChangeListener(String, IEclipsePreferences.INodeChangeListener)
+	 * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener
+	 */
+	public void addNodeChangeListener(String node, INodeChangeListener listener) {
+		((IEclipsePreferences)currentScope.node(node)).addNodeChangeListener(listener);
+	}
+
+	/**
+	 * De-register the given listener from receiving event change notifications for this node.
+	 * Calling this method multiple times with the same listener has no
+	 * effect. The given listener argument must not be <code>null</code>.
+	 * @param node node
+	 * @param listener the preference change listener to remove
+	 * @see #addPreferenceChangeListener(String, IEclipsePreferences.IPreferenceChangeListener)
+	 * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener
+	 */
+	public void removeNodeChangeListener(String node, INodeChangeListener listener) {
+		((IEclipsePreferences)currentScope.node(node)).removeNodeChangeListener(listener);
+	}
+	
+	/**
+	 * Removes this node and all of its descendants, 
+	 * invalidating any properties contained in the removed nodes. 
+	 * @param node name of a node which should be removed
+	 * @throws BackingStoreException - if this operation cannot be completed 
+	 * due to a failure in the backing store, or inability to communicate with it.
+	 */
+	public void removeNode(String node) throws BackingStoreException {
+		currentScope.node(node).removeNode();
+	}
+
+	/**
+	 * Forces any changes in the contents of current scope
+	 * and its descendants to the persistent store. 
+	 * @throws BackingStoreException - if this operation cannot be completed
+	 * due to a failure in the backing store, or inability to communicate with it.
+	 */
+	public void flush() throws BackingStoreException {
+		currentScope.flush();
+	}
+
+	/**
+	 * Migrate preferences from instance scope to current scope.
+	 * @param proxies proxy types for which migration should be performed {@link ProxyType}
+	 */
+	public void migrate(ProxyType[] proxies) {
+		migrated = true;
+		if (currentScope.getBoolean(PREF_HAS_MIGRATED, false)
+				|| currentScope.name().equals(InstanceScope.SCOPE)) {
+			return;
+		}
+		currentScope.putBoolean(PREF_HAS_MIGRATED, true);
+		migrateInstanceScopePreferences(new InstanceScope().getNode(Activator.ID), currentScope, proxies, true);
+	}
+
+	void migrateInstanceScopePreferences(Preferences instanceScope, Preferences configuration, ProxyType[] proxies, boolean isInitialize) {
+		migrateUpdateHttpProxy(instanceScope, proxies, isInitialize);
+
+		// migrate enabled status
+		if (configuration.get(ProxyManager.PREF_ENABLED, null) == null) {
+			String instanceEnabled = instanceScope.get(ProxyManager.PREF_ENABLED, null);
+			if (instanceEnabled != null)
+				configuration.put(ProxyManager.PREF_ENABLED, instanceEnabled);
+		}
+		
+		// migrate enabled status
+		if (configuration.get(ProxyManager.PREF_OS, null) == null) {
+			String instanceEnabled = instanceScope.get(ProxyManager.PREF_OS, null);
+			if (instanceEnabled != null)
+				configuration.put(ProxyManager.PREF_OS, instanceEnabled);
+		}
+	
+		// migrate non proxied hosts if not already set
+		if (configuration.get(ProxyManager.PREF_NON_PROXIED_HOSTS, null) == null) {
+			String instanceNonProxiedHosts = instanceScope.get(ProxyManager.PREF_NON_PROXIED_HOSTS, null);
+			if (instanceNonProxiedHosts != null) {
+				configuration.put(ProxyManager.PREF_NON_PROXIED_HOSTS, instanceNonProxiedHosts);
+			}
+		}
+		
+		// migrate proxy data
+		PreferenceManager instanceManager = PreferenceManager.createInstanceManager(instanceScope);
+		for (int i = 0; i < proxies.length; i++) {
+			ProxyType type = proxies[i];
+			IProxyData data = type.getProxyData(ProxyType.DO_NOT_VERIFY);
+			if (data.getHost() == null) {
+				ProxyType instanceType = new ProxyType(type.getName(), instanceManager);
+				IProxyData instanceData = instanceType.getProxyData(ProxyType.DO_NOT_VERIFY);
+				if (instanceData.getHost() != null)
+					type.setProxyData(instanceData);
+			}
+		}
+		
+		// if this an import we should remove the old node
+		if (!isInitialize) {
+			try {
+				instanceScope.removeNode();
+			} catch (BackingStoreException e) {
+				// ignore
+			}
+		}			
+	}
+	
+	private void migrateUpdateHttpProxy(Preferences instanceScope, ProxyType[] proxies, boolean isInitialize) {
+		if (!instanceScope.getBoolean(PREF_HAS_MIGRATED, false)) {
+			// Only set the migration bit when initializing
+			if (isInitialize)
+				instanceScope.putBoolean(PREF_HAS_MIGRATED, true);
+			Preferences updatePrefs = instanceScope.parent().node("org.eclipse.update.core"); //$NON-NLS-1$
+			String httpProxyHost = getHostToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
+			int port = getPortToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
+			boolean httpProxyEnable = getEnablementToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
+			if (httpProxyHost != null) {
+				ProxyData proxyData = new ProxyData(IProxyData.HTTP_PROXY_TYPE,
+						httpProxyHost, port, false, null);
+				for (int i = 0; i < proxies.length; i++) {
+					ProxyType type = proxies[i];
+					if (type.getName().equals(proxyData.getType())) {
+						type.updatePreferencesIfMissing(proxyData);
+					}
+				}
+				if (httpProxyEnable) {
+					instanceScope.putBoolean(ProxyManager.PREF_ENABLED, true);
+				}
+			}
+		}
+	}
+	
+	private String getHostToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
+		String httpProxyHost = updatePrefs.get(HTTP_PROXY_HOST, ""); //$NON-NLS-1$
+		if (checkSystemProperties && "".equals(httpProxyHost)) { //$NON-NLS-1$
+			httpProxyHost = System.getProperty("http.proxyHost", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if ("".equals(httpProxyHost)) //$NON-NLS-1$
+			httpProxyHost = null;
+		updatePrefs.remove(HTTP_PROXY_HOST);
+		return httpProxyHost;
+	}
+	
+	private int getPortToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
+		String httpProxyPort = updatePrefs.get(HTTP_PROXY_PORT, ""); //$NON-NLS-1$
+		if (checkSystemProperties && "".equals(httpProxyPort)) { //$NON-NLS-1$
+			httpProxyPort = System.getProperty("http.proxyPort", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		updatePrefs.remove(HTTP_PROXY_PORT);
+		int port = -1;
+		if (httpProxyPort != null && !"".equals(httpProxyPort)) //$NON-NLS-1$
+			try {
+				port = Integer.parseInt(httpProxyPort);
+			} catch (NumberFormatException e) {
+				// Ignore
+			}
+		return port;
+	}
+	
+	private boolean getEnablementToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
+		boolean httpProxyEnable = false;
+		if (checkSystemProperties && updatePrefs.get(HTTP_PROXY_ENABLE, null) == null) {
+			httpProxyEnable = Boolean.getBoolean("http.proxySet"); //$NON-NLS-1$
+		} else {
+			httpProxyEnable = updatePrefs.getBoolean(HTTP_PROXY_ENABLE, false);
+			updatePrefs.remove(HTTP_PROXY_ENABLE);
+		}
+		return httpProxyEnable;
+	}
+	
+	private static PreferenceManager createInstanceManager(Preferences instance) {
+		PreferenceManager manager = new PreferenceManager(Activator.ID);
+		manager.currentScope = (IEclipsePreferences) instance;
+		return manager;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceModifyListener.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceModifyListener.java
index a9181c4..0f51982 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceModifyListener.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceModifyListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,12 +25,13 @@ public class PreferenceModifyListener extends
 	public IEclipsePreferences preApply(IEclipsePreferences node) {
 		try {
 			if (node.nodeExists(InstanceScope.SCOPE)) {
-				((ProxyManager)ProxyManager.getProxyManager()).migrateInstanceScopePreferences(node.node(InstanceScope.SCOPE), node.node(ConfigurationScope.SCOPE), false);
+				((ProxyManager)ProxyManager.getProxyManager()).migrateInstanceScopePreferences(
+								node.node(InstanceScope.SCOPE).node(Activator.ID), 
+								node.node(ConfigurationScope.SCOPE).node(Activator.ID), false);
 			}
 		} catch (BackingStoreException e) {
 			Activator.logError("Could not access instance preferences", e); //$NON-NLS-1$
 		}
 		return super.preApply(node);
 	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyManager.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyManager.java
index a9042f4..981b490 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyManager.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyManager.java
@@ -14,6 +14,7 @@ import java.net.Authenticator;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
 
@@ -30,9 +31,6 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.core.runtime.RegistryFactory;
 import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
 import org.eclipse.osgi.util.NLS;
@@ -40,24 +38,17 @@ import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.service.prefs.Preferences;
 
 public class ProxyManager implements IProxyService, IPreferenceChangeListener {
-
-	private static final String PREF_HAS_MIGRATED = "org.eclipse.core.net.hasMigrated"; //$NON-NLS-1$
 	
-	/**
-	 * Preference constants used by Update to record the HTTP proxy
-	 */
-	private static String HTTP_PROXY_HOST = "org.eclipse.update.core.proxy.host"; //$NON-NLS-1$
-	private static String HTTP_PROXY_PORT = "org.eclipse.update.core.proxy.port"; //$NON-NLS-1$
-	private static String HTTP_PROXY_ENABLE = "org.eclipse.update.core.proxy.enable"; //$NON-NLS-1$
-	
-	private static final String PREF_NON_PROXIED_HOSTS = "nonProxiedHosts"; //$NON-NLS-1$
-	private static final String PREF_ENABLED = "proxiesEnabled"; //$NON-NLS-1$
-	private static final String PREF_OS = "systemProxiesEnabled"; //$NON-NLS-1$
+	static final String PREF_NON_PROXIED_HOSTS = "nonProxiedHosts"; //$NON-NLS-1$
+	static final String PREF_ENABLED = "proxiesEnabled"; //$NON-NLS-1$
+	static final String PREF_OS = "systemProxiesEnabled"; //$NON-NLS-1$
 	
 	private static IProxyService proxyManager;
 	
 	private AbstractProxyProvider nativeProxyProvider;
 	
+	private PreferenceManager preferenceManager;
+	
 	ListenerList listeners = new ListenerList(ListenerList.IDENTITY);
 	private String[] nonProxiedHosts;
 	private final ProxyType[] proxies = new ProxyType[] {
@@ -66,8 +57,6 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 			new ProxyType(IProxyData.SOCKS_PROXY_TYPE)
 		};
 
-	private boolean migrated = false;
-
 	private ProxyManager() {
 		try {
 			nativeProxyProvider = (AbstractProxyProvider) Class.forName(
@@ -77,6 +66,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 		} catch (Exception e) {
 			Activator.logInfo("Problems occured during the proxy provider initialization.", e); //$NON-NLS-1$
 		}
+		preferenceManager = Activator.getInstance().getPreferenceManager();
 	}
 
 	/**
@@ -124,7 +114,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 	public synchronized String[] getNonProxiedHosts() {
 		checkMigrated();
 		if (nonProxiedHosts == null) {
-			String prop = Activator.getInstance().getPreferences().get(PREF_NON_PROXIED_HOSTS, "localhost|127.0.0.1"); //$NON-NLS-1$
+			String prop = preferenceManager.getString(PreferenceManager.ROOT, PREF_NON_PROXIED_HOSTS);
 			nonProxiedHosts = ProxyType.convertPropertyStringToHosts(prop);
 		}
 		if (nonProxiedHosts.length == 0)
@@ -153,10 +143,13 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 			Assert.isTrue(host.length() > 0);
 		}
 		String[] oldHosts = nonProxiedHosts;
+		if (Arrays.equals(oldHosts, hosts)) {
+			return;
+		}
 		nonProxiedHosts = hosts;
-		Activator.getInstance().getPreferences().put(PREF_NON_PROXIED_HOSTS, ProxyType.convertHostsToPropertyString(nonProxiedHosts));
+		preferenceManager.putString(PreferenceManager.ROOT, PREF_NON_PROXIED_HOSTS, ProxyType.convertHostsToPropertyString(nonProxiedHosts));
 		try {
-			Activator.getInstance().getPreferences().flush();
+			preferenceManager.flush();
 		} catch (BackingStoreException e) {
 			Activator.logError(
 					"An error occurred while writing out the non-proxied hosts list", e); //$NON-NLS-1$
@@ -232,8 +225,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 	}
 
 	private boolean internalIsProxiesEnabled() {
-		return Activator.getInstance().getPreferences().getBoolean(
-				PREF_ENABLED, true);
+		return preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_ENABLED);
 	}
 
 	/* (non-Javadoc)
@@ -246,7 +238,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 			return;
 		// Setting the preference will trigger the system property update
 		// (see preferenceChange)
-		Activator.getInstance().getPreferences().putBoolean(PREF_ENABLED, enabled);
+		preferenceManager.putBoolean(PreferenceManager.ROOT, PREF_ENABLED, enabled);
 	}
 
 	private void internalSetEnabled(boolean enabled, boolean systemEnabled) {
@@ -255,7 +247,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 		sysProps.put("systemProxySet", systemEnabled ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		updateSystemProperties();
 		try {
-			Activator.getInstance().getPreferences().flush();
+			preferenceManager.flush();
 		} catch (BackingStoreException e) {
 			Activator.logError(
 					"An error occurred while writing out the enablement state", e); //$NON-NLS-1$
@@ -275,7 +267,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 
 	public void initialize() {
 		checkMigrated();
-		((IEclipsePreferences)Activator.getInstance().getPreferences()).addPreferenceChangeListener(this);
+		preferenceManager.addPreferenceChangeListener(PreferenceManager.ROOT, this);
 		// Now initialize each proxy type
 		for (int i = 0; i < proxies.length; i++) {
 			ProxyType type = proxies[i];
@@ -364,7 +356,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 			try {
 				URI uri = new URI(type, "//" + host, null); //$NON-NLS-1$
 				IProxyData[] proxyDatas = nativeProxyProvider.select(uri);
-				return proxyDatas.length > 0 ? resolveType(nativeProxyProvider.select(uri)[0]) : null;
+				return proxyDatas.length > 0 ? resolveType(proxyDatas[0]) : null;
 			} catch (URISyntaxException e) {
 				return null;
 			}
@@ -404,136 +396,25 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 			return null;
 		}
 	}
-
 	
 	private synchronized void checkMigrated() {
-		if (migrated || !Activator.getInstance().instanceLocationAvailable())
+		if (preferenceManager.isMigrated() || !Activator.getInstance().instanceLocationAvailable()) {
 			return;
-		
-		migrated = true;
-		if (Activator.getInstance().getPreferences().getBoolean(PREF_HAS_MIGRATED, false))
-			return;
-		
-		Activator.getInstance().getPreferences().putBoolean(PREF_HAS_MIGRATED, true);
-		migrateInstanceScopePreferences(new InstanceScope().getNode(""), new ConfigurationScope().getNode(""), true);  //$NON-NLS-1$//$NON-NLS-2$
-	}
-	
-	void migrateInstanceScopePreferences(Preferences instanceNode, Preferences configurationNode, boolean isInitialize) {
-		migrateUpdateHttpProxy(instanceNode, isInitialize);
-		
-		Preferences netInstancePrefs = instanceNode.node(Activator.ID);
-		Preferences netConfigurationPrefs = configurationNode.node(Activator.ID);
-		
-		// migrate enabled status
-		if (netConfigurationPrefs.get(PREF_ENABLED, null) == null) {
-			String instanceEnabled = netInstancePrefs.get(PREF_ENABLED, null);
-			if (instanceEnabled != null)
-				netConfigurationPrefs.put(PREF_ENABLED, instanceEnabled);
-		}
-		
-		// migrate enabled status
-		if (netConfigurationPrefs.get(PREF_OS, null) == null) {
-			String instanceEnabled = netInstancePrefs.get(PREF_OS, null);
-			if (instanceEnabled != null)
-				netConfigurationPrefs.put(PREF_OS, instanceEnabled);
 		}
-	
-		// migrate non proxied hosts if not already set
-		if (netConfigurationPrefs.get(PREF_NON_PROXIED_HOSTS, null) == null) {
-			String instanceNonProxiedHosts = netInstancePrefs.get(PREF_NON_PROXIED_HOSTS, null);
-			if (instanceNonProxiedHosts != null) {
-				netConfigurationPrefs.put(PREF_NON_PROXIED_HOSTS, instanceNonProxiedHosts);
-				nonProxiedHosts = null;
-			}
-		}
-		
-		// migrate proxy data
-		for (int i = 0; i < proxies.length; i++) {
-			ProxyType type = proxies[i];
-			IProxyData data = type.getProxyData(ProxyType.DO_NOT_VERIFY);
-			if (data.getHost() == null) {
-				ProxyType instanceType = new ProxyType(type.getName(),netInstancePrefs);
-				IProxyData instanceData = instanceType.getProxyData(ProxyType.DO_NOT_VERIFY);
-				if (instanceData.getHost() != null)
-					type.setProxyData(instanceData);
-			}
-		}
-		
-		// if this an import we should remove the old node
-		if (! isInitialize) {
-			try {
-				netInstancePrefs.removeNode();
-			} catch (BackingStoreException e) {
-				// ignore
-			}
-		}			
+		preferenceManager.migrate(proxies);
 	}
 	
-	private void migrateUpdateHttpProxy(Preferences node, boolean isInitialize) {
-		Preferences netPrefs = node.node(Activator.ID);
-		if (!netPrefs.getBoolean(PREF_HAS_MIGRATED, false)) {
-			// Only set the migration bit when initializing
-			if (isInitialize)
-				netPrefs.putBoolean(PREF_HAS_MIGRATED, true);
-			Preferences updatePrefs = node.node("org.eclipse.update.core"); //$NON-NLS-1$
-			String httpProxyHost = getHostToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
-			int port = getPortToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
-			boolean httpProxyEnable = getEnablementToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
-			if (httpProxyHost != null) {
-				ProxyData proxyData = new ProxyData(IProxyData.HTTP_PROXY_TYPE,
-						httpProxyHost, port, false, null);
-				ProxyType type = getType(proxyData);
-				type.updatePreferencesIfMissing(netPrefs, proxyData);
-				if (httpProxyEnable) {
-					netPrefs.putBoolean(ProxyManager.PREF_ENABLED, true);
-				}
-			}
-		}
-	}
-
-	private boolean getEnablementToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
-		boolean httpProxyEnable = false;
-		if (checkSystemProperties && updatePrefs.get(HTTP_PROXY_ENABLE, null) == null) {
-			httpProxyEnable = Boolean.getBoolean("http.proxySet"); //$NON-NLS-1$
-		} else {
-			httpProxyEnable = updatePrefs.getBoolean(HTTP_PROXY_ENABLE, false);
-			updatePrefs.remove(HTTP_PROXY_ENABLE);
-		}
-		return httpProxyEnable;
-	}
-
-	private int getPortToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
-		String httpProxyPort = updatePrefs.get(HTTP_PROXY_PORT, ""); //$NON-NLS-1$
-		if (checkSystemProperties && "".equals(httpProxyPort)) { //$NON-NLS-1$
-			httpProxyPort = System.getProperty("http.proxyPort", ""); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		updatePrefs.remove(HTTP_PROXY_PORT);
-		int port = -1;
-		if (httpProxyPort != null && !"".equals(httpProxyPort)) //$NON-NLS-1$
-			try {
-				port = Integer.parseInt(httpProxyPort);
-			} catch (NumberFormatException e) {
-				// Ignore
-			}
-		return port;
-	}
-
-	private String getHostToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
-		String httpProxyHost = updatePrefs.get(HTTP_PROXY_HOST, ""); //$NON-NLS-1$
-		if (checkSystemProperties && "".equals(httpProxyHost)) { //$NON-NLS-1$
-			httpProxyHost = System.getProperty("http.proxyHost", ""); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		if ("".equals(httpProxyHost)) //$NON-NLS-1$
-			httpProxyHost = null;
-		updatePrefs.remove(HTTP_PROXY_HOST);
-		return httpProxyHost;
+	void migrateInstanceScopePreferences(Preferences instance,
+			Preferences configuration, boolean isInitialize) {
+		preferenceManager.migrateInstanceScopePreferences(instance,
+				configuration, proxies, isInitialize);
 	}
 
 	public void preferenceChange(PreferenceChangeEvent event) {
 		if (event.getKey().equals(PREF_ENABLED) || event.getKey().equals(PREF_OS)) {
 			checkMigrated();
-			internalSetEnabled(Activator.getInstance().getPreferences().getBoolean(PREF_ENABLED, true),
-					Activator.getInstance().getPreferences().getBoolean(PREF_OS, true));
+			internalSetEnabled(preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_ENABLED),
+					preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_OS));
 		}
 	}
 
@@ -543,8 +424,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 
 	public boolean isSystemProxiesEnabled() {
 		checkMigrated();
-		return Activator.getInstance().getPreferences().getBoolean(PREF_OS,
-				true);
+		return preferenceManager.getBoolean(PreferenceManager.ROOT, PREF_OS);
 	}
 
 	public void setSystemProxiesEnabled(boolean enabled) {
@@ -554,7 +434,7 @@ public class ProxyManager implements IProxyService, IPreferenceChangeListener {
 			return;
 		// Setting the preference will trigger the system property update
 		// (see preferenceChange)
-		Activator.getInstance().getPreferences().putBoolean(PREF_OS, enabled);
+		preferenceManager.putBoolean(PreferenceManager.ROOT, PREF_OS, enabled);
 	}
 
 	public IProxyData[] select(URI uri) {
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyType.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyType.java
index f1dcd6d..7416867 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyType.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.Properties;
 
 import org.eclipse.core.net.proxy.IProxyData;
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.INodeChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
@@ -26,17 +27,16 @@ import org.eclipse.equinox.security.storage.SecurePreferencesFactory;
 import org.eclipse.equinox.security.storage.StorageException;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
 
 public class ProxyType implements INodeChangeListener, IPreferenceChangeListener {
 
 	/**
 	 * Preference keys
 	 */
-	private static final String PREF_PROXY_DATA_NODE = "proxyData"; //$NON-NLS-1$
-	private static final String PREF_PROXY_HOST = "host"; //$NON-NLS-1$
-	private static final String PREF_PROXY_PORT = "port"; //$NON-NLS-1$
-	private static final String PREF_PROXY_HAS_AUTH = "hasAuth"; //$NON-NLS-1$
+	static final String PREF_PROXY_DATA_NODE = "proxyData"; //$NON-NLS-1$
+	static final String PREF_PROXY_HOST = "host"; //$NON-NLS-1$
+	static final String PREF_PROXY_PORT = "port"; //$NON-NLS-1$
+	static final String PREF_PROXY_HAS_AUTH = "hasAuth"; //$NON-NLS-1$
 
 	/**
 	 * Verification tags used when creating a proxy data
@@ -78,7 +78,7 @@ public class ProxyType implements INodeChangeListener, IPreferenceChangeListener
     
 	private String name;
 	private boolean updatingPreferences;
-	private Preferences netPreferences;
+	private PreferenceManager preferenceManager;
 
 	public static String convertHostsToPropertyString(String[] value) {
 		StringBuffer buffer = new StringBuffer();
@@ -111,38 +111,28 @@ public class ProxyType implements INodeChangeListener, IPreferenceChangeListener
 
 	public ProxyType(String name) {
 		this.name = name;
-		this.netPreferences = Activator.getInstance().getPreferences();
+		this.preferenceManager = Activator.getInstance().getPreferenceManager();
 	}	
 	
-	public ProxyType(String name, Preferences netPreferences) {
+	public ProxyType(String name, PreferenceManager manager) {
 		this.name = name;
-		this.netPreferences = netPreferences;
+		this.preferenceManager = manager;
 	}
 
-	private Preferences getPreferenceNode() {
-		return getParentPreferences().node(getName());
-	}
-
-	/**
-	 * Return the preferences node whose child nodes are the know proxy types
-	 * 
-	 * @return a preferences node
-	 */
-	private Preferences getParentPreferences() {
-		return netPreferences.node(
-				PREF_PROXY_DATA_NODE);
+	private String getPreferenceNode() {
+		return PREF_PROXY_DATA_NODE + IPath.SEPARATOR + getName();
 	}
 
 	public IProxyData getProxyData(int verifyFlag) {
 		return createProxyData(name, getPreferenceNode(), verifyFlag);
 	}
 
-	private IProxyData createProxyData(String type, Preferences node, int verifyFlag) {
-		String host = node.get(PREF_PROXY_HOST, null);
+	private IProxyData createProxyData(String type, String node, int verifyFlag) {
+		String host = preferenceManager.getString(node, PREF_PROXY_HOST);
 		if (host != null && host.length() == 0)
 			host = null;
-		int port = node.getInt(PREF_PROXY_PORT, -1);
-		boolean requiresAuth = node.getBoolean(PREF_PROXY_HAS_AUTH, false);
+		int port = preferenceManager.getInt(node, PREF_PROXY_PORT);
+		boolean requiresAuth = preferenceManager.getBoolean(node, PREF_PROXY_HAS_AUTH);
 		ProxyData proxyData = new ProxyData(type, host, port, requiresAuth,
 				null);
 		loadProxyAuth(proxyData);
@@ -176,33 +166,51 @@ public class ProxyType implements INodeChangeListener, IPreferenceChangeListener
 		updatePreferences(getPreferenceNode(), proxyData);
 	}
 	
-	/* package */ void updatePreferencesIfMissing(Preferences node, IProxyData proxyData) {
-		Preferences proxyNode = node.node(PREF_PROXY_DATA_NODE).node(getName());
-		if (node.get(PREF_PROXY_HOST, null) == null)
-			updatePreferences(proxyNode, proxyData);
+	/*package*/  void updatePreferencesIfMissing(IProxyData proxyData) {
+		String node = getPreferenceNode();
+		if (preferenceManager.getString(node, PREF_PROXY_HOST) == null)
+			updatePreferences(node, proxyData);
 	}
 	
-	private void updatePreferences(Preferences node, IProxyData proxyData) {
+	private void updatePreferences(String node, IProxyData proxyData) {
+		if (!hasPreferencesChanged(node, proxyData)) {
+			return;
+		}
 		if (proxyData.getHost() == null) {
 			try {
-				Preferences parent = node.parent();
-				node.removeNode();
-				parent.flush();
+				preferenceManager.removeNode(node);
+				preferenceManager.flush();
 			} catch (BackingStoreException e) {
 				Activator.logError(NLS.bind(
 						"An error occurred removing the {0} proxy node from the preference store", proxyData.getType()), e); //$NON-NLS-1$
 			}
-		} else {
-			node.put(PREF_PROXY_HOST, proxyData.getHost());
-			node.putInt(PREF_PROXY_PORT, proxyData.getPort());
-			node.putBoolean(PREF_PROXY_HAS_AUTH, proxyData.getUserId() != null);
-			try {
-				node.flush();
-			} catch (BackingStoreException e) {
-				Activator.logError(NLS.bind(
-					"The {0} proxy node could not be written", proxyData.getType()), e); //$NON-NLS-1$
+			// Check if there is a value in default scope (e.g. set by -pluginCustomization).
+			// If it is, update preferences even if host is empty.
+			if (!hasPreferencesChanged(node, proxyData)) {
+				return;
 			}
 		}
+		preferenceManager.putString(node, PREF_PROXY_HOST, proxyData.getHost() != null ? proxyData.getHost() : ""); //$NON-NLS-1$
+		preferenceManager.putInt(node, PREF_PROXY_PORT, proxyData.getPort());
+		preferenceManager.putBoolean(node, PREF_PROXY_HAS_AUTH, proxyData.getUserId() != null);
+		try {
+			preferenceManager.flush();
+		} catch (BackingStoreException e) {
+			Activator.logError(NLS.bind(
+				"The {0} proxy node could not be written", proxyData.getType()), e); //$NON-NLS-1$
+		}
+	}
+
+	private boolean hasPreferencesChanged(String node, IProxyData proxyData) {
+		String host = preferenceManager.getString(node, PREF_PROXY_HOST);
+		if ((host != null && host.equals(proxyData.getHost())) || (host == null && proxyData.getHost() == null)) {
+			if (preferenceManager.getInt(node, PREF_PROXY_PORT) == proxyData.getPort()) {
+				if (preferenceManager.getBoolean(node, PREF_PROXY_HAS_AUTH) == proxyData.isRequiresAuthentication()) {
+					return false;
+				}
+			}
+		}
+		return true;
 	}
 	
 	/* package */void updateSystemProperties(IProxyData proxyData) {
@@ -507,8 +515,8 @@ public class ProxyType implements INodeChangeListener, IPreferenceChangeListener
 
 	public void initialize() {
 		updateSystemProperties(getProxyData(VERIFY_EMPTY));
-		((IEclipsePreferences)getParentPreferences()).addNodeChangeListener(this);
-		((IEclipsePreferences)getPreferenceNode()).addPreferenceChangeListener(this);
+		preferenceManager.addNodeChangeListener(PREF_PROXY_DATA_NODE, this);
+		preferenceManager.addPreferenceChangeListener(getPreferenceNode(), this);
 	}
 	
 	private ISecurePreferences getNode() {
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/WindowsProxyProvider.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/WindowsProxyProvider.java
index aec4489..20d8f8c 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/WindowsProxyProvider.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/WindowsProxyProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 compeople AG and others.
+ * Copyright (c) 2008, 2010 compeople AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,12 +43,18 @@ public class WindowsProxyProvider extends AbstractProxyProvider {
 			winHttpProxyProvider = null;
 		}
 	}
-
-	protected IProxyData[] getProxyData(URI uri) {
+	
+	public IProxyData[] select(URI uri) {
+		IProxyData[] proxies = new IProxyData[0];
 		if (jWinHttpLoaded) {
-			return winHttpProxyProvider.getProxyData(uri);
+			proxies = winHttpProxyProvider.getProxyData(uri);
 		}
-		return new IProxyData[0];
+		if (Policy.DEBUG) {
+			Policy.debug("WindowsProxyProvider#select result for [" + uri + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+			for (int i = 0; i < proxies.length; i++)
+				System.out.println("	" + proxies[i]); //$NON-NLS-1$
+		}
+		return proxies;
 	}
 
 	protected IProxyData[] getProxyData() {
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java
index e2d3f0b..e479de0 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Oakland Software Incorporated and others
+ * Copyright (c) 2008, 2011 Oakland Software Incorporated and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
 package org.eclipse.core.internal.net.proxy.unix;
 
 import java.io.IOException;
+import java.lang.reflect.Method;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Locale;
@@ -21,6 +22,7 @@ import org.eclipse.core.internal.net.AbstractProxyProvider;
 import org.eclipse.core.internal.net.Activator;
 import org.eclipse.core.internal.net.Policy;
 import org.eclipse.core.internal.net.ProxyData;
+import org.eclipse.core.internal.net.StringMatcher;
 import org.eclipse.core.internal.net.StringUtil;
 import org.eclipse.core.net.proxy.IProxyData;
 
@@ -47,18 +49,30 @@ public class UnixProxyProvider extends AbstractProxyProvider {
 	public UnixProxyProvider() {
 		// Nothing to initialize
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.internal.net.AbstractProxyProvider#getProxyData(java.net.URI)
-	 */
-	public IProxyData[] getProxyData(URI uri) {
+	
+	public IProxyData[] select(URI uri) {
+		String[] nonProxyHosts = getNonProxiedHosts();
+		if (nonProxyHosts != null) {
+			String host = uri.getHost();
+			for (int npIndex = 0; npIndex < nonProxyHosts.length; npIndex++) {
+				if (matchesFilter(host, nonProxyHosts[npIndex])) {
+					return new IProxyData[0];
+				}
+			}
+		}
+		IProxyData[] proxies = new IProxyData[0];
 		if (uri.getScheme() != null) {
 			ProxyData pd = getSystemProxyInfo(uri.getScheme());
-			return pd != null ? new IProxyData[] { pd } : new IProxyData[0];
+			proxies = pd != null ? new IProxyData[] { pd } : new IProxyData[0];
+		} else {
+			proxies = getProxyData();
 		}
-		return getProxyData();
+		if (Policy.DEBUG) {
+			Policy.debug("UnixProxyProvider#select result for [" + uri + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+			for (int i = 0; i < proxies.length; i++)
+				System.out.println("	" + proxies[i]); //$NON-NLS-1$
+		}
+		return proxies;
 	}
 
 	public IProxyData[] getProxyData() {
@@ -185,32 +199,35 @@ public class UnixProxyProvider extends AbstractProxyProvider {
 		return null;
 	}
 
-	private synchronized String getEnv(String env) {
-		String cmd[] = { "/bin/sh", //$NON-NLS-1$
-				"-c", //$NON-NLS-1$
-				"env | grep -i proxy" }; //$NON-NLS-1$
-		Properties props = new Properties();
-		Process proc = null;
+	private static String getEnv(String env) {
 		try {
-			proc = Runtime.getRuntime().exec(cmd);
-			props.load(proc.getInputStream());
-			proc.waitFor();
-		} catch (IOException e) {
-			Activator.logError(
-					"Problem during accessing system variable: " + env, e); //$NON-NLS-1$
-		} catch (IllegalArgumentException e) {
-			Activator.logError(
-					"Problem during accessing system variable: " + env, e); //$NON-NLS-1$
-		} catch (InterruptedException e) {
-			Activator.logError(
-					"Problem during accessing system variable: " + env, e); //$NON-NLS-1$
-		} finally {
-			if (proc != null) {
-				proc.destroy();
+			Method m = System.class.getMethod(
+					"getenv", new Class[] { String.class }); //$NON-NLS-1$
+			return (String) m.invoke(null, new Object[] { env });
+		} catch (Throwable t) {
+			// Fall-back to running 'env' directly. Warning this is very slow...
+			// up to 200ms
+			String cmd[] = { "/bin/sh", //$NON-NLS-1$
+					"-c", //$NON-NLS-1$
+					"env | grep -i proxy" }; //$NON-NLS-1$
+			Properties props = new Properties();
+			Process proc = null;
+			try {
+				proc = Runtime.getRuntime().exec(cmd);
+				props.load(proc.getInputStream());
+			} catch (IOException e) {
+				Activator.logError(
+						"Problem during accessing system variable: " + env, e); //$NON-NLS-1$
+			} catch (IllegalArgumentException e) {
+				Activator.logError(
+						"Problem during accessing system variable: " + env, e); //$NON-NLS-1$
+			} finally {
+				if (proc != null) {
+					proc.destroy();
+				}
 			}
+			return props.getProperty(env);
 		}
-
-		return props.getProperty(env);
 	}
 
 	private static void loadGnomeLib() {
@@ -243,6 +260,11 @@ public class UnixProxyProvider extends AbstractProxyProvider {
 		for (int i = 0; i < strs.length; i++)
 			System.out.println(i + ": " + strs[i]); //$NON-NLS-1$
 	}
+	
+	private boolean matchesFilter(String host, String filter) {
+		StringMatcher matcher = new StringMatcher(filter, true, false);
+		return matcher.match(host);
+	}
 
 	protected static native void gconfInit();
 
diff --git a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/win32/winhttp/ProxyBypass.java b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/win32/winhttp/ProxyBypass.java
index 7967151..98e8255 100644
--- a/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/win32/winhttp/ProxyBypass.java
+++ b/eclipse/plugins/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/win32/winhttp/ProxyBypass.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 compeople AG and others.
+ * Copyright (c) 2008, 2010 compeople AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.core.internal.net.proxy.win32.winhttp;
 
 import java.net.URI;
 
+import org.eclipse.core.internal.net.StringMatcher;
 import org.eclipse.core.internal.net.StringUtil;
 
 /**
@@ -67,12 +68,8 @@ public class ProxyBypass {
 	private boolean isInBypassList(String host) {
 		for (int i = 0; i < proxyBypassEntries.length; i++) {
 			String entry = proxyBypassEntries[i];
-			if (entry.endsWith("*")) { //$NON-NLS-1$
-				if (host.toLowerCase().startsWith(
-						entry.substring(0, entry.length() - 1).toLowerCase())) {
-					return true;
-				}
-			} else if (host.equalsIgnoreCase(entry)) {
+			StringMatcher matcher = new StringMatcher(entry, true, false);
+			if (matcher.match(host)) {
 				return true;
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/.classpath b/eclipse/plugins/org.eclipse.core.resources.jmx/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/.project b/eclipse/plugins/org.eclipse.core.resources.jmx/.project
deleted file mode 100644
index f53633e..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.core.resources.jmx</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.core.resources.jmx/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 66dc638..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,309 +0,0 @@
-#Thu May 10 13:51:20 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.core.resources.jmx/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index f6e1e18..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:26:04 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.resources.jmx/META-INF/MANIFEST.MF
deleted file mode 100644
index 9091b0b..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,23 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring Core Resources Extensions (Incubation)
-Bundle-SymbolicName: org.eclipse.core.resources.jmx;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Vendor: Eclipse.org
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Import-Package: javax.management,
- javax.management.remote,
- org.eclipse.core.resources,
- org.eclipse.core.runtime;common=split,
- org.eclipse.core.runtime.jobs,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.server,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.log,
- org.osgi.util.tracker
-Bundle-Activator: org.eclipse.core.internal.resources.jmx.Activator
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/about.html b/eclipse/plugins/org.eclipse.core.resources.jmx/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/build.properties b/eclipse/plugins/org.eclipse.core.resources.jmx/build.properties
deleted file mode 100644
index 0e23b66..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               icons/,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/file.gif b/eclipse/plugins/org.eclipse.core.resources.jmx/icons/file.gif
deleted file mode 100644
index 7ccc6a7..0000000
Binary files a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/file.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/folder.gif b/eclipse/plugins/org.eclipse.core.resources.jmx/icons/folder.gif
deleted file mode 100644
index 51e703b..0000000
Binary files a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/folder.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/project.gif b/eclipse/plugins/org.eclipse.core.resources.jmx/icons/project.gif
deleted file mode 100644
index a4ea580..0000000
Binary files a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/project.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/resources.gif b/eclipse/plugins/org.eclipse.core.resources.jmx/icons/resources.gif
deleted file mode 100644
index 983932f..0000000
Binary files a/eclipse/plugins/org.eclipse.core.resources.jmx/icons/resources.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/plugin.xml b/eclipse/plugins/org.eclipse.core.resources.jmx/plugin.xml
deleted file mode 100644
index 90635cc..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/plugin.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension point="org.eclipse.equinox.jmx.server.contribution">
-      <contribution
-            class="org.eclipse.core.internal.resources.jmx.ResourceContributionProvider"
-            isroot="true"/>
-   </extension>
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/Activator.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/Activator.java
deleted file mode 100644
index bc053c1..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/Activator.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import java.net.URL;
-import org.eclipse.core.runtime.*;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * The activator class for this bundle.
- * 
- * @since 1.0
- */
-public class Activator implements BundleActivator {
-
-	private static final String BUNDLE_NAME = "org.eclipse.core.resources.jmx"; //$NON-NLS-1$
-	private static BundleContext context;
-	private static ServiceTracker logService;
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext bundleContext) throws Exception {
-		context = bundleContext;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext bundleContext) throws Exception {
-		if (logService != null) {
-			logService.close();
-			logService = null;
-		}
-		context = null;
-	}
-
-	/*
-	 * Log the given message and error to the log file.
-	 */
-	public static void log(String message, Exception exception) {
-		if (logService == null) {
-			logService = new ServiceTracker(context, LogService.class.getName(), null);
-			logService.open();
-		}
-		LogService log = (LogService) logService.getService();
-		if (log == null) {
-			System.out.println(BUNDLE_NAME);
-			System.out.println(message);
-			if (exception != null)
-				exception.printStackTrace(System.out);
-		} else
-			log.log(IStatus.ERROR, message, exception);
-	}
-
-	static URL getImageLocation(String path) {
-		return FileLocator.find(context.getBundle(), new Path(path), null);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ContainerContribution.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ContainerContribution.java
deleted file mode 100644
index 26d3679..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ContainerContribution.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * @since 1.0
- */
-public abstract class ContainerContribution extends ResourceContribution {
-
-	private static final IResource[] EMPTY_ARRAY = new IResource[0];
-
-	/*
-	 * Constructor for the class.
-	 */
-	public ContainerContribution(IContainer container) {
-		super(container);
-	}
-
-	private IContainer getDelegate() {
-		return (IContainer) contributionDelegate;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		try {
-			return getDelegate().members();
-		} catch (CoreException e) {
-			return EMPTY_ARRAY;
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/FileContribution.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/FileContribution.java
deleted file mode 100644
index c266c29..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/FileContribution.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-/**
- * @since 1.0
- */
-public class FileContribution extends ResourceContribution {
-
-	private static final IResource[] EMPTY_ARRAY = new IResource[0];
-	private static final String ICON_PATH = "icons/file.gif";//$NON-NLS-1$
-
-	/*
-	 * Constructor for the class.
-	 */
-	public FileContribution(IFile file) {
-		super(file);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.internal.resources.jmx.ResourceContribution#getIconPath()
-	 */
-	protected IPath getIconPath() {
-		return new Path(ICON_PATH);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return EMPTY_ARRAY;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/FolderContribution.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/FolderContribution.java
deleted file mode 100644
index f8765b6..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/FolderContribution.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-/**
- * @since 1.0
- */
-public class FolderContribution extends ContainerContribution {
-
-	private static final String ICON_PATH = "icons/folder.gif";//$NON-NLS-1$
-
-	/*
-	 * Constructor for the class.
-	 */
-	public FolderContribution(IFolder folder) {
-		super(folder);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.internal.resources.jmx.ResourceContribution#getIconPath()
-	 */
-	protected IPath getIconPath() {
-		return new Path(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/Messages.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/Messages.java
deleted file mode 100644
index 23313d3..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/Messages.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Class which is used in the translation of messages.
- * 
- * @since 1.0
- */
-public class Messages extends NLS {
-
-	public static String contributionName;
-	public static String rootName;
-	public static String operation_delete;
-
-	private Messages() {
-		// prevent instantiation
-	}
-
-	// initialize resource bundle
-	static {
-		NLS.initializeMessages("org.eclipse.core.internal.resources.jmx.messages", Messages.class); //$NON-NLS-1$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ProjectContribution.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ProjectContribution.java
deleted file mode 100644
index 166f2f3..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ProjectContribution.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-
-/**
- * @since 1.0
- */
-public class ProjectContribution extends ContainerContribution {
-
-	private static final String ICON_PATH = "icons/project.gif";//$NON-NLS-1$
-
-	/*
-	 * Constructor for the class.
-	 */
-	public ProjectContribution(IProject project) {
-		super(project);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.internal.resources.jmx.ResourceContribution#getIconPath()
-	 */
-	protected IPath getIconPath() {
-		return new Path(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ResourceContribution.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ResourceContribution.java
deleted file mode 100644
index e82a79e..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ResourceContribution.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.equinox.jmx.common.JMXConstants;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-/**
- * Class which represents an {@link IResource} as a contribution.
- * 
- * @since 1.0
- */
-public abstract class ResourceContribution extends Contribution {
-
-	private static final String METHOD_DELETE = "delete"; //$NON-NLS-1$
-
-	/*
-	 * Constructor for the class. Create a new contribution for the given
-	 * resource.
-	 */
-	public ResourceContribution(IResource delegate) {
-		super(delegate);
-	}
-
-    /* (non-Javadoc)
-     * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-     */
-    protected ObjectName getObjectName() {
-        try {
-            return new ObjectName(JMXConstants.DEFAULT_DOMAIN +":type=Resource,name=" + getDelegate().getFullPath()); //$NON-NLS-1$
-        } catch (Exception e) {
-            return super.getObjectName();
-        }
-    }
-
-	/*
-	 * Return this contribution's delegate. It is stored in the super-class as
-	 * an Object so we need to cast it to our specific type.
-	 */
-	private IResource getDelegate() {
-		return (IResource) contributionDelegate;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return getDelegate().getName();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(getIconPath().toOSString());
-	}
-
-	/**
-	 * Return a path to the icon used to represent this contributions. 
-	 * 
-	 * @return a path in the file-system to the icon
-	 */
-	protected abstract IPath getIconPath();
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		List list = createOperations();
-		MBeanOperationInfo[] operations = (MBeanOperationInfo[]) list.toArray(new MBeanOperationInfo[list.size()]);
-		return new MBeanInfo(getClass().getName(), null, null, null, operations, null);
-	}
-
-	/*
-	 * Return the list of operations known to this contribution type.
-	 * Sub-classes to override. Should call "super" as well. 
-	 */
-	protected List createOperations() {
-		List result = new ArrayList();
-		result.add(new MBeanOperationInfo(METHOD_DELETE, Messages.operation_delete, null, Void.TYPE.getName(), 0));
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		if (METHOD_DELETE.equals(operationName)) {
-			try {
-				getDelegate().delete(IResource.FORCE, null);
-			} catch (CoreException e) {
-				Activator.log(e.getMessage(), e);
-			}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ResourceContributionProvider.java b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ResourceContributionProvider.java
deleted file mode 100644
index d93b809..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/ResourceContributionProvider.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.resources.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.resources.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-
-/**
- * @since 1.0
- */
-public class ResourceContributionProvider extends ContributionProvider {
-
-	private static final String ICON_PATH = "icons/resources.gif"; //$NON-NLS-1$
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof IResource;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return providesType(obj) ? new ResourceContributionProvider() : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) {
-		if (!contributesType(obj))
-			return null;
-		IResource resource = (IResource) obj;
-		switch (resource.getType()) {
-			case IResource.FILE :
-				return new FileContribution((IFile) obj);
-			case IResource.FOLDER :
-				return new FolderContribution((IFolder) obj);
-			case IResource.PROJECT :
-				return new ProjectContribution((IProject) obj);
-			case IResource.ROOT :
-				return null;
-			default :
-				throw new IllegalArgumentException("Resource type unknown: " + resource.getType()); //$NON-NLS-1$
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return Messages.contributionName;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return ResourcesPlugin.getWorkspace().getRoot().getProjects();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(ICON_PATH);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return new MBeanInfo(getClass().getName(), null, null, null, createOperations(), null);
-	}
-
-	protected MBeanOperationInfo[] createOperations() {
-		return new MBeanOperationInfo[0];
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/messages.properties b/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/messages.properties
deleted file mode 100644
index d07617b..0000000
--- a/eclipse/plugins/org.eclipse.core.resources.jmx/src/org/eclipse/core/internal/resources/jmx/messages.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-contributionName=Workspace Resources
-rootName=/
-
-operation_delete=Delete this resource.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.core.resources/.classpath b/eclipse/plugins/org.eclipse.core.resources/.classpath
index dbdcc84..7ab5113 100644
--- a/eclipse/plugins/org.eclipse.core.resources/.classpath
+++ b/eclipse/plugins/org.eclipse.core.resources/.classpath
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src_ant"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.core.resources/.settings/.api_filters b/eclipse/plugins/org.eclipse.core.resources/.settings/.api_filters
index af63731..0558d10 100644
--- a/eclipse/plugins/org.eclipse.core.resources/.settings/.api_filters
+++ b/eclipse/plugins/org.eclipse.core.resources/.settings/.api_filters
@@ -1,12 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <component id="org.eclipse.core.resources" version="2">
-    <resource path="src/org/eclipse/core/resources/mapping/IResourceChangeDescriptionFactory.java" type="org.eclipse.core.resources.mapping.IResourceChangeDescriptionFactory">
-        <filter id="403853384">
-            <message_arguments>
-                <message_argument value="org.eclipse.core.resources.mapping.IResourceChangeDescriptionFactory"/>
-            </message_arguments>
-        </filter>
-    </resource>
     <resource path="src/org/eclipse/core/resources/mapping/ModelProvider.java" type="org.eclipse.core.resources.mapping.ModelProvider">
         <filter id="338944126">
             <message_arguments>
diff --git a/eclipse/plugins/org.eclipse.core.resources/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.core.resources/.settings/org.eclipse.jdt.core.prefs
index 9f9008a..823b81c 100644
--- a/eclipse/plugins/org.eclipse.core.resources/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.core.resources/.settings/org.eclipse.jdt.core.prefs
@@ -1,16 +1,17 @@
-#Fri Feb 20 11:55:24 CET 2009
+#Fri Feb 04 14:24:15 EST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
 org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -30,10 +31,11 @@ org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
@@ -54,6 +56,7 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
@@ -69,6 +72,7 @@ org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
@@ -85,6 +89,7 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverridin
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
@@ -92,7 +97,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enab
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -136,11 +141,9 @@ org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
 org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
 org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
 org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_comments=false
 org.eclipse.jdt.core.formatter.comment.format_header=false
 org.eclipse.jdt.core.formatter.comment.format_html=true
 org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
@@ -166,7 +169,12 @@ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
 org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
diff --git a/eclipse/plugins/org.eclipse.core.resources/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.core.resources/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..5fee16a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.resources/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:54:01 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.core.resources/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.resources/META-INF/MANIFEST.MF
index 893e00f..6e31310 100644
--- a/eclipse/plugins/org.eclipse.core.resources/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.resources/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.resources; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.100.qualifier
 Bundle-Activator: org.eclipse.core.resources.ResourcesPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -26,7 +26,7 @@ Export-Package: org.eclipse.core.internal.dtree;x-internal:=true,
  org.eclipse.core.resources.variableresolvers
 Require-Bundle: org.eclipse.ant.core;bundle-version="[3.1.0,4.0.0)";resolution:=optional,
  org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"
+ org.eclipse.core.filesystem;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/eclipse/plugins/org.eclipse.core.resources/build.properties b/eclipse/plugins/org.eclipse.core.resources/build.properties
index f580e4c..d7af07f 100644
--- a/eclipse/plugins/org.eclipse.core.resources/build.properties
+++ b/eclipse/plugins/org.eclipse.core.resources/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -23,3 +23,5 @@ bin.includes = plugin.xml,\
 jars.compile.order=.,ant_tasks/resources-ant.jar
 extra.ant_tasks/resources-ant.jar = platform:/plugin/org.apache.ant, platform:/plugin/org.eclipse.ant.core
 jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar
+javacWarnings..=-raw,-unchecked
+javacWarnings.ant_tasks/resources-ant.jar=-raw,-unchecked
diff --git a/eclipse/plugins/org.eclipse.core.resources/schema/builders.exsd b/eclipse/plugins/org.eclipse.core.resources/schema/builders.exsd
index 8b1ccbf..8db1747 100644
--- a/eclipse/plugins/org.eclipse.core.resources/schema/builders.exsd
+++ b/eclipse/plugins/org.eclipse.core.resources/schema/builders.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.core.resources">
+<schema targetNamespace="org.eclipse.core.resources" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
          <meta.schema plugin="org.eclipse.core.resources" id="builders" name="Incremental Project Builders"/>
@@ -30,6 +30,11 @@ name is the id of the builder extension. When defining a builder extension, user
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="builder"/>
@@ -90,6 +95,16 @@ build spec.  If the attribute is not specified, it is assumed to be "<tt
                </documentation>
             </annotation>
          </attribute>
+         <attribute name="supportsConfigurations" type="boolean">
+            <annotation>
+               <documentation>
+                  "<tt>true</tt>" or "<tt>false</tt>" indicating whether the builder supports multiple build configurations.  If "<tt>true</tt>" the builder is provided with a configuration specific delta.
+If "<tt>false</tt>" the delta is the delta since build was last called.
+<p>
+ If the attribute is not specified, it is assumed to be "<tt>false</tt>".
+               </documentation>
+            </annotation>
+         </attribute>
       </complexType>
    </element>
 
@@ -139,7 +154,6 @@ specified builder class
       </complexType>
    </element>
 
-
    <annotation>
       <appInfo>
          <meta.section type="examples"/>
@@ -174,6 +188,7 @@ subclass of <samp>org.eclipse.core.resources.IncrementalProjectBuilder<
       </documentation>
    </annotation>
 
+
    <annotation>
       <appInfo>
          <meta.section type="implementation"/>
@@ -190,7 +205,7 @@ builders as required.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2002, 2006 IBM Corporation and others.<br>
+         Copyright (c) 2002, 2010 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made 
 available under the terms of the Eclipse Public License v1.0 which 
 accompanies this distribution, and is available at 
diff --git a/eclipse/plugins/org.eclipse.core.resources/schema/filterMatchers.exsd b/eclipse/plugins/org.eclipse.core.resources/schema/filterMatchers.exsd
index 1525f05..5bcd92a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/schema/filterMatchers.exsd
+++ b/eclipse/plugins/org.eclipse.core.resources/schema/filterMatchers.exsd
@@ -55,7 +55,7 @@
                   
                </documentation>
                <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.core.resources.AbstractFileInfoMatcher:"/>
+                  <meta.attribute kind="java" basedOn="org.eclipse.core.resources.filtermatchers.AbstractFileInfoMatcher:"/>
                </appInfo>
             </annotation>
          </attribute>
@@ -157,7 +157,7 @@
       </appInfo>
       <documentation>
          The value of the class attribute must represent a 
-subclass of <samp>org.eclipse.core.resources.AbstractFileInfoMatcher</samp>.
+subclass of <samp>org.eclipse.core.resources.filtermatchers.AbstractFileInfoMatcher</samp>.
       </documentation>
    </annotation>
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/schema/modelProviders.exsd b/eclipse/plugins/org.eclipse.core.resources/schema/modelProviders.exsd
index 9d79f2a..aa9b999 100644
--- a/eclipse/plugins/org.eclipse.core.resources/schema/modelProviders.exsd
+++ b/eclipse/plugins/org.eclipse.core.resources/schema/modelProviders.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.core.resources">
+<schema targetNamespace="org.eclipse.core.resources" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
          <meta.schema plugin="org.eclipse.core.resources" id="modelProviders" name="Model Providers"/>
@@ -13,6 +13,11 @@
    <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="modelProvider"/>
@@ -68,6 +73,9 @@
                <documentation>
                   
                </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.core.resources.modelProviders/@id"/>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -75,6 +83,15 @@
 
    <annotation>
       <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         The value of the class attribute must represent an implementation of <tt>org.eclipse.core.resources.mapping.ModelProvider</tt>.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
          <meta.section type="since"/>
       </appInfo>
       <documentation>
@@ -115,15 +132,6 @@
 
    <annotation>
       <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         The value of the class attribute must represent an implementation of <tt>org.eclipse.core.resources.mapping.ModelProvider</tt>.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
          <meta.section type="implementation"/>
       </appInfo>
       <documentation>
@@ -138,7 +146,7 @@ model providers as required.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2005, 2007 IBM Corporation and others.<br>
+         Copyright (c) 2005, 2010 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made 
 available under the terms of the Eclipse Public License v1.0 which 
 accompanies 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/AutoBuildJob.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/AutoBuildJob.java
index 84945db..0220467 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/AutoBuildJob.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/AutoBuildJob.java
@@ -11,8 +11,7 @@
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
-import org.eclipse.core.internal.resources.ResourceException;
-import org.eclipse.core.internal.resources.Workspace;
+import org.eclipse.core.internal.resources.*;
 import org.eclipse.core.internal.utils.Messages;
 import org.eclipse.core.internal.utils.Policy;
 import org.eclipse.core.resources.*;
@@ -75,7 +74,7 @@ class AutoBuildJob extends Job implements Preferences.IPropertyChangeListener {
 		long delay = computeScheduleDelay();
 		int state = getState();
 		if (Policy.DEBUG_BUILD_NEEDED)
-			Policy.debug("Build requested, needsBuild: " + needsBuild + " state: " + state + " delay: " + delay); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			Policy.debug("Auto-Build requested, needsBuild: " + needsBuild + " state: " + state + " delay: " + delay); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		if (needsBuild && Policy.DEBUG_BUILD_NEEDED_STACK && state != Job.RUNNING)
 			new RuntimeException("Build Needed").printStackTrace(); //$NON-NLS-1$
 		//don't mess with the interrupt flag if the job is still running
@@ -141,7 +140,7 @@ class AutoBuildJob extends Job implements Preferences.IPropertyChangeListener {
 				IStatus result = Status.OK_STATUS;
 				try {
 					if (shouldBuild())
-						result = workspace.getBuildManager().build(trigger, Policy.subMonitorFor(monitor, Policy.opWork));
+						result = workspace.getBuildManager().build(workspace.getBuildOrder(), ICoreConstants.EMPTY_BUILD_CONFIG_ARRAY, trigger, Policy.subMonitorFor(monitor, Policy.opWork));
 				} finally {
 					//always send POST_BUILD if there has been a PRE_BUILD
 					workspace.broadcastBuildEvent(workspace, IResourceChangeEvent.POST_BUILD, trigger);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildCommand.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildCommand.java
index 4e70a44..8ad2769 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildCommand.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,9 +7,13 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - Custom trigger builder #equals
+ *     Broadcom Corporation - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
+import org.eclipse.core.resources.IBuildConfiguration;
+
 import java.util.HashMap;
 import java.util.Map;
 import org.eclipse.core.internal.resources.ModelObject;
@@ -18,8 +22,11 @@ import org.eclipse.core.runtime.*;
 
 /**
  * The concrete implementation of <tt>ICommand</tt>.  This object
- * stores information about a particular builder, including a reference
- * to the builder instance itself if it has been instantiated.
+ * stores information about a particular type of builder.
+ *
+ *  If the builder has been instantiated, a reference to the builder is held.
+ *  If the builder supports multiple build configurations, a reference to the
+ *  builder for each configuration is held.
  */
 public class BuildCommand extends ModelObject implements ICommand {
 	/**
@@ -43,13 +50,21 @@ public class BuildCommand extends ModelObject implements ICommand {
 
 	private static final int ALL_TRIGGERS = MASK_AUTO | MASK_CLEAN | MASK_FULL | MASK_INCREMENTAL;
 
-	protected HashMap arguments;
-	
+	protected HashMap<String,String> arguments = new HashMap<String,String>(0);
+
+	/** Have we checked the supports configurations flag */
+	private boolean supportsConfigurationsCalculated;
+	/** Does this builder support configurations */
+	private boolean supportsConfigurations;
 	/**
 	 * The builder instance for this command. Null if the builder has
 	 * not yet been instantiated.
 	 */
-	protected IncrementalProjectBuilder builder;
+	private IncrementalProjectBuilder builder;
+	/**
+	 * The builders for this command if the builder supports multiple configurations 
+	 */
+	private HashMap<IBuildConfiguration, IncrementalProjectBuilder> builders;
 
 	/**
 	 * The triggers that this builder will respond to.  Since build triggers are not 
@@ -78,7 +93,6 @@ public class BuildCommand extends ModelObject implements ICommand {
 
 	public BuildCommand() {
 		super(""); //$NON-NLS-1$
-		this.arguments = new HashMap(0);
 	}
 
 	public Object clone() {
@@ -88,7 +102,7 @@ public class BuildCommand extends ModelObject implements ICommand {
 			return null;
 		result.setArguments(getArguments());
 		//don't let references to builder instances leak out because they reference trees
-		result.setBuilder(null);
+		result.setBuilders(null);
 		return result;
 	}
 
@@ -117,22 +131,44 @@ public class BuildCommand extends ModelObject implements ICommand {
 		if (!(object instanceof BuildCommand))
 			return false;
 		BuildCommand command = (BuildCommand) object;
-		// equal if same builder name and equal argument tables
-		return getBuilderName().equals(command.getBuilderName()) && getArguments(false).equals(command.getArguments(false)) && triggers == command.triggers;
+		// equal if same builder name, arguments, and triggers
+		return getBuilderName().equals(command.getBuilderName()) && getArguments(false).equals(command.getArguments(false)) && 
+								(triggers & ALL_TRIGGERS) == (command.triggers & ALL_TRIGGERS);
 	}
 
 	/**
 	 * @see ICommand#getArguments()
 	 */
-	public Map getArguments() {
+	public Map<String,String> getArguments() {
 		return getArguments(true);
 	}
 
-	public Map getArguments(boolean makeCopy) {
-		return arguments == null ? null : (makeCopy ? (Map) arguments.clone() : arguments);
+	@SuppressWarnings("unchecked")
+	public Map<String,String> getArguments(boolean makeCopy) {
+		return arguments == null ? null : (makeCopy ? (Map<String,String>) arguments.clone() : arguments);
+	}
+
+	/**
+	 * @return Map {@link IBuildConfiguration} -> {@link IncrementalProjectBuilder} if
+	 * this build command supports multiple configurations. Otherwise return the {@link IncrementalProjectBuilder}
+	 * associated with this build command.
+	 */
+	public Object getBuilders() {
+		if (supportsConfigs())
+			return builders;
+		return builder;
 	}
 
-	public IncrementalProjectBuilder getBuilder() {
+	/**
+	 * Return the {@link IncrementalProjectBuilder} for the {@link IBuildConfiguration}
+	 * If this builder is configuration agnostic, the same {@link IncrementalProjectBuilder} is
+	 * returned for all configurations.
+	 * @param config
+	 * @return {@link IncrementalProjectBuilder} corresponding to config
+	 */
+	public IncrementalProjectBuilder getBuilder(IBuildConfiguration config) {
+		if (builders != null && supportsConfigs())
+			return builders.get(config);
 		return builder;
 	}
 
@@ -147,8 +183,8 @@ public class BuildCommand extends ModelObject implements ICommand {
 	 * Method declared on Object
 	 */
 	public int hashCode() {
-		// hash on name alone
-		return 37 * getName().hashCode() + triggers;
+		// hash on name and trigger
+		return 37 * getName().hashCode() + (ALL_TRIGGERS & triggers);
 	}
 
 	/**
@@ -164,16 +200,64 @@ public class BuildCommand extends ModelObject implements ICommand {
 		return (triggers & MASK_CONFIGURABLE) != 0;
 	}
 
+	public boolean supportsConfigs() {
+		if (!supportsConfigurationsCalculated) {
+			IExtension extension = Platform.getExtensionRegistry().getExtension(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_BUILDERS, name);
+			if (extension != null) {
+				IConfigurationElement[] configs = extension.getConfigurationElements();
+				if (configs.length != 0) {
+					String value = configs[0].getAttribute("supportsConfigurations"); //$NON-NLS-1$
+					supportsConfigurations = (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString()));
+				}
+			}
+			supportsConfigurationsCalculated = true;
+		}
+		return supportsConfigurations;
+	}
+
 	/**
 	 * @see ICommand#setArguments(Map)
 	 */
-	public void setArguments(Map value) {
+	public void setArguments(Map<String,String> value) {
 		// copy parameter for safety's sake
-		arguments = value == null ? null : new HashMap(value);
+		arguments = value == null ? null : new HashMap<String,String>(value);
+	}
+
+	/**
+	 * Set the IncrementalProjectBuilder(s) for this command
+	 * @param value
+	 */
+	@SuppressWarnings("unchecked")
+	public void setBuilders(Object value) {
+		if (value == null) {
+			builder = null;
+			builders = null;
+		} else {
+			if (value instanceof IncrementalProjectBuilder)
+				builder = (IncrementalProjectBuilder)value;
+			else
+				builders = new HashMap<IBuildConfiguration, IncrementalProjectBuilder>((Map<IBuildConfiguration, IncrementalProjectBuilder>)value);
+		}
 	}
 
-	public void setBuilder(IncrementalProjectBuilder builder) {
-		this.builder = builder;
+	/**
+	 * Add an IncrementalProjectBuilder for the given configuration.
+	 * For builders which don't respond to multiple configurations, there's only one builder
+	 * instance.
+	 * @param config
+	 * @param builder
+	 */
+	public void addBuilder(IBuildConfiguration config, IncrementalProjectBuilder builder) {
+		// Builder shouldn't already exist in this build command
+		Assert.isTrue(builders == null || !builders.containsKey(config));
+		Assert.isTrue(this.builder == null);
+
+		if (supportsConfigs()) {
+			if (builders == null)
+				builders = new HashMap<IBuildConfiguration, IncrementalProjectBuilder>(1);
+			builders.put(config, builder);
+		} else
+			this.builder = builder;
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildContext.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildContext.java
new file mode 100644
index 0000000..f02a6f8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildContext.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Broadcom Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Broadcom Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.internal.events;
+
+import java.util.*;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.Assert;
+
+/**
+ * Concrete implementation of a build context
+ */
+public class BuildContext implements IBuildContext {
+
+	/** The Build Configuration currently being built */
+	private final IBuildConfiguration buildConfiguration;
+	/** Configurations user requested to be built */
+	private final IBuildConfiguration[] requestedBuilt;
+	/** The configurations built as part of this build invocations*/
+	private final IBuildConfiguration[] buildOrder;
+
+	/**
+	 * Create an empty build context for the given project configuration.
+	 * @param buildConfiguration the project configuration being built, that we need the context for
+	 */
+	public BuildContext(IBuildConfiguration buildConfiguration) {
+		this.buildConfiguration = buildConfiguration;
+		requestedBuilt = buildOrder = new IBuildConfiguration[] {buildConfiguration};
+	}
+
+	/**
+	 * Create a build context for the given project configuration.
+	 * @param buildConfiguration the project configuration being built, that we need the context for
+	 * @param requestedBuilt an array of configurations the user actually requested to be built
+	 * @param buildOrder the build order for the entire build, indicating how cycles etc. have been resolved
+	 */
+	public BuildContext(IBuildConfiguration buildConfiguration, IBuildConfiguration[] requestedBuilt, IBuildConfiguration[] buildOrder) {
+		this.buildConfiguration = buildConfiguration;
+		this.requestedBuilt = requestedBuilt;
+		this.buildOrder = buildOrder;
+	}
+
+	private int findBuildConfigurationIndex() {
+		int position = -1;
+		for (int i = 0; i < buildOrder.length; i++) {
+			if (buildOrder[i].equals(buildConfiguration))
+			{
+				position = i;
+				break;
+			}
+		}
+		Assert.isTrue(0 <= position && position < buildOrder.length);
+		return position;
+	}
+
+	public IBuildConfiguration[] getRequestedConfigs() {
+		return requestedBuilt.clone();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.resources.IBuildContext#getAllReferencedBuildConfigurations()
+	 */
+	public IBuildConfiguration[] getAllReferencedBuildConfigs() {
+		int position = findBuildConfigurationIndex();
+		IBuildConfiguration[] builtBefore = new IBuildConfiguration[position];
+		System.arraycopy(buildOrder, 0, builtBefore, 0, builtBefore.length);
+		return builtBefore;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.resources.IBuildContext#getAllReferencingBuildConfigurations()
+	 */
+	public IBuildConfiguration[] getAllReferencingBuildConfigs() {
+		int position = findBuildConfigurationIndex();
+		IBuildConfiguration[] builtAfter = new IBuildConfiguration[buildOrder.length - position - 1];
+		System.arraycopy(buildOrder, position + 1, builtAfter, 0, builtAfter.length);
+		return builtAfter;
+	}
+
+	private static final int hashCode(IBuildConfiguration[] array) {
+		final int prime = 31;
+		int result = 1;
+		for (int i = 0; i < array.length; i++)
+			result = prime * result + array[i].hashCode();
+		return result;
+	}
+
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + buildConfiguration.hashCode();
+		result = prime * result + hashCode(requestedBuilt);
+		result = prime * result + hashCode(buildOrder);
+		return result;
+	}
+
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		BuildContext other = (BuildContext) obj;
+		if (!buildConfiguration.equals(other.buildConfiguration))
+			return false;
+		if (!Arrays.equals(requestedBuilt, other.requestedBuilt))
+			return false;
+		if (!Arrays.equals(buildOrder, other.buildOrder))
+			return false;
+		return true;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java
index cc9319c..c87155b 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     Isaac Pacht (isaacp3 at gmail.com) - fix for bug 206540
  * Anton Leherbauer (Wind River) - [305858] Allow Builder to return null rule
  * James Blackburn (Broadcom) - [306822] Provide Context for Builder getRule()
+ * Broadcom Corporation - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
@@ -80,7 +81,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 		/**
 		 * Log an exception on the first build, and silently do nothing on subsequent builds.
 		 */
-		protected IProject[] build(int kind, Map args, IProgressMonitor monitor) {
+		protected IProject[] build(int kind, Map<String,String> args, IProgressMonitor monitor) {
 			if (!hasBeenBuilt && Policy.DEBUG_BUILD_FAILURE) {
 				hasBeenBuilt = true;
 				String msg = NLS.bind(Messages.events_skippingBuilder, name, getProject().getName());
@@ -95,7 +96,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	//the job for performing background autobuild
 	final AutoBuildJob autoBuildJob;
 	private boolean building = false;
-	private final ArrayList builtProjects = new ArrayList();
+	private final Set<IProject> builtProjects = new HashSet<IProject>();
 
 	//the following four fields only apply for the lifetime of a single builder invocation.
 	protected InternalBuilder currentBuilder;
@@ -121,6 +122,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 
 	//used for debug/trace timing
 	private long timeStamp = -1;
+	private long overallTimeStamp = -1;
 	private Workspace workspace;
 
 	public BuildManager(Workspace workspace, ILock workspaceLock) {
@@ -130,26 +132,39 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 		InternalBuilder.buildManager = this;
 	}
 
-	private void basicBuild(int trigger, IncrementalProjectBuilder builder, Map args, MultiStatus status, IProgressMonitor monitor) {
+	private void basicBuild(int trigger, IncrementalProjectBuilder builder, Map<String,String> args, MultiStatus status, IProgressMonitor monitor) {
 		try {
 			currentBuilder = builder;
 			//clear any old requests to forget built state
-			currentBuilder.clearForgetLastBuiltState();
+			currentBuilder.clearLastBuiltStateRequests();
 			// Figure out want kind of build is needed
 			boolean clean = trigger == IncrementalProjectBuilder.CLEAN_BUILD;
 			currentLastBuiltTree = currentBuilder.getLastBuiltTree();
+
+			// Does the build command respond to this trigger?
+			boolean isBuilding = builder.getCommand().isBuilding(trigger);
+
 			// If no tree is available we have to do a full build
-			if (!clean && currentLastBuiltTree == null)
+			if (!clean && currentLastBuiltTree == null) {
+				// Bug 306746 - Don't promote build to FULL_BUILD if builder doesn't AUTO_BUILD
+				if (trigger == IncrementalProjectBuilder.AUTO_BUILD && !isBuilding)
+					return;
+				// Without a build tree the build is promoted to FULL_BUILD
 				trigger = IncrementalProjectBuilder.FULL_BUILD;
-			//don't build if this builder doesn't respond to the given trigger
-			if (!builder.getCommand().isBuilding(trigger)) {
+				isBuilding = isBuilding || builder.getCommand().isBuilding(trigger);
+			}
+
+			//don't build if this builder doesn't respond to the trigger
+			if (!isBuilding) {
 				if (clean)
 					currentBuilder.setLastBuiltTree(null);
 				return;
 			}
+
 			// For incremental builds, grab a pointer to the current state before computing the delta
 			currentTree = ((trigger == IncrementalProjectBuilder.FULL_BUILD) || clean) ? null : workspace.getElementTree();
 			int depth = -1;
+			ISchedulingRule rule = null;
 			try {
 				//short-circuit if none of the projects this builder cares about have changed.
 				if (!needsBuild(currentBuilder, trigger)) {
@@ -158,6 +173,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 					monitor.done();
 					return;
 				}
+				rule = builder.getRule(trigger, args);
 				String name = currentBuilder.getLabel();
 				String message;
 				if (name != null)
@@ -166,16 +182,36 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 					message = NLS.bind(Messages.events_invoking_1, builder.getProject().getFullPath());
 				monitor.subTask(message);
 				hookStartBuild(builder, trigger);
+				// Make the current tree immutable before releasing the WS lock
+				if (rule != null && currentTree != null)
+					workspace.newWorkingTree();
 				//release workspace lock while calling builders
 				depth = getWorkManager().beginUnprotected();
+				// Acquire the rule required for running this builder
+				if (rule != null) {
+					Job.getJobManager().beginRule(rule, monitor);
+					// Now that we've acquired the rule, changes may have been made concurrently, ensure we're pointing at the 
+					// correct currentTree so delta contains concurrent changes made in areas guarded by the scheduling rule
+					if (currentTree != null)
+						currentTree = workspace.getElementTree();
+				}
 				//do the build
 				SafeRunner.run(getSafeRunnable(trigger, args, status, monitor));
 			} finally {
+				// Re-acquire the WS lock, then release the scheduling rule
 				if (depth >= 0)
 					getWorkManager().endUnprotected(depth);
+				if (rule != null)
+					Job.getJobManager().endRule(rule);
 				// Be sure to clean up after ourselves.
 				if (clean || currentBuilder.wasForgetStateRequested()) {
 					currentBuilder.setLastBuiltTree(null);
+				} else if (currentBuilder.wasRememberStateRequested()) {
+					// If remember last build state, and FULL_BUILD
+					// last tree must be set to => null for next build
+					if (trigger == IncrementalProjectBuilder.FULL_BUILD)
+						currentBuilder.setLastBuiltTree(null);
+					// else don't modify the last built tree
 				} else {
 					// remember the current state as the last built state.
 					ElementTree lastTree = workspace.getElementTree();
@@ -192,13 +228,13 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 		}
 	}
 
-	protected void basicBuild(IProject project, int trigger, ICommand[] commands, MultiStatus status, IProgressMonitor monitor) {
+	protected void basicBuild(IBuildConfiguration buildConfiguration, int trigger, IBuildContext context, ICommand[] commands, MultiStatus status, IProgressMonitor monitor) {
 		try {
 			for (int i = 0; i < commands.length; i++) {
 				checkCanceled(trigger, monitor);
 				BuildCommand command = (BuildCommand) commands[i];
 				IProgressMonitor sub = Policy.subMonitorFor(monitor, 1);
-				IncrementalProjectBuilder builder = getBuilder(project, command, i, status);
+				IncrementalProjectBuilder builder = getBuilder(buildConfiguration, command, i, status, context);
 				if (builder != null)
 					basicBuild(trigger, builder, command.getArguments(false), status, sub);
 			}
@@ -208,24 +244,25 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
-	 * Runs all builders on the given project. 
+	 * Runs all builders on the given project config.
 	 * @return A status indicating if the build succeeded or failed
 	 */
-	private IStatus basicBuild(IProject project, int trigger, IProgressMonitor monitor) {
+	private IStatus basicBuild(IBuildConfiguration buildConfiguration, int trigger, IBuildContext context, IProgressMonitor monitor) {
 		if (!canRun(trigger))
 			return Status.OK_STATUS;
 		try {
-			hookStartBuild(trigger);
+			hookStartBuild(new IBuildConfiguration[] { buildConfiguration }, trigger);
 			MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, Messages.events_errors, null);
-			basicBuild(project, trigger, status, monitor);
+			basicBuild(buildConfiguration, trigger, context, status, monitor);
 			return status;
 		} finally {
 			hookEndBuild(trigger);
 		}
 	}
 
-	private void basicBuild(final IProject project, final int trigger, final MultiStatus status, final IProgressMonitor monitor) {
+	private void basicBuild(final IBuildConfiguration buildConfiguration, final int trigger, final IBuildContext context, final MultiStatus status, final IProgressMonitor monitor) {
 		try {
+			final IProject project = buildConfiguration.getProject();
 			final ICommand[] commands;
 			if (project.isAccessible())
 				commands = ((Project) project).internalGetDescription().getBuildSpec(false);
@@ -252,7 +289,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 				}
 
 				public void run() throws Exception {
-					basicBuild(project, trigger, commands, status, monitor);
+					basicBuild(buildConfiguration, trigger, context, commands, status, monitor);
 				}
 			};
 			SafeRunner.run(code);
@@ -262,10 +299,11 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
-	 * Runs the builder with the given name on the given project. 
+	 * Runs the builder with the given name on the given project config.
 	 * @return A status indicating if the build succeeded or failed
 	 */
-	private IStatus basicBuild(IProject project, int trigger, String builderName, Map args, IProgressMonitor monitor) {
+	private IStatus basicBuild(IBuildConfiguration buildConfiguration, int trigger, String builderName, Map<String,String> args, IProgressMonitor monitor) {
+		final IProject project = buildConfiguration.getProject();
 		monitor = Policy.monitorFor(monitor);
 		try {
 			String message = NLS.bind(Messages.events_building_1, project.getFullPath());
@@ -273,11 +311,12 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 			if (!canRun(trigger))
 				return Status.OK_STATUS;
 			try {
-				hookStartBuild(trigger);
+				hookStartBuild(new IBuildConfiguration[] {buildConfiguration}, trigger);
 				MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, Messages.events_errors, null);
 				ICommand command = getCommand(project, builderName, args);
 				try {
-					IncrementalProjectBuilder builder = getBuilder(project, command, -1, status);
+					IBuildContext context = new BuildContext(buildConfiguration);
+					IncrementalProjectBuilder builder = getBuilder(buildConfiguration, command, -1, status, context);
 					if (builder != null)
 						basicBuild(trigger, builder, args, status, Policy.subMonitorFor(monitor, 1));
 				} catch (CoreException e) {
@@ -295,8 +334,8 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	/**
 	 * Loop the workspace build until no more builders request a rebuild.
 	 */
-	private void basicBuildLoop(IProject[] ordered, IProject[] unordered, int trigger, MultiStatus status, IProgressMonitor monitor) {
-		int projectWork = ordered.length;
+	private void basicBuildLoop(IBuildConfiguration[] configs, IBuildConfiguration[] requestedConfigs, int trigger, MultiStatus status, IProgressMonitor monitor) {
+		int projectWork = configs.length;
 		if (projectWork > 0)
 			projectWork = TOTAL_BUILD_WORK / projectWork;
 		int maxIterations = workspace.getDescription().getMaxBuildIterations();
@@ -306,16 +345,11 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 		for (int iter = 0; rebuildRequested && iter < maxIterations; iter++) {
 			rebuildRequested = false;
 			builtProjects.clear();
-			for (int i = 0; i < ordered.length; i++) {
-				if (ordered[i].isAccessible()) {
-					basicBuild(ordered[i], trigger, status, Policy.subMonitorFor(monitor, projectWork));
-					builtProjects.add(ordered[i]);
-				}
-			}
-			for (int i = 0; i < unordered.length; i++) {
-				if (unordered[i].isAccessible()) {
-					basicBuild(unordered[i], trigger, status, Policy.subMonitorFor(monitor, projectWork));
-					builtProjects.add(unordered[i]);
+			for (int i = 0; i < configs.length; i++) {
+				if (configs[i].getProject().isAccessible()) {
+					IBuildContext context = new BuildContext(configs[i], requestedConfigs, configs);
+					basicBuild(configs[i], trigger, context, status, Policy.subMonitorFor(monitor, projectWork));
+					builtProjects.add(configs[i].getProject());
 				}
 			}
 			//subsequent builds should always be incremental
@@ -324,23 +358,20 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
-	 * Runs all builders on all projects. 
+	 * Runs all builders on all the given project configs, in the order that
+	 * they are given.
 	 * @return A status indicating if the build succeeded or failed
 	 */
-	public IStatus build(int trigger, IProgressMonitor monitor) {
+	public IStatus build(IBuildConfiguration[] configs, IBuildConfiguration[] requestedConfigs, int trigger, IProgressMonitor monitor) {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			monitor.beginTask(Messages.events_building_0, TOTAL_BUILD_WORK);
 			if (!canRun(trigger))
 				return Status.OK_STATUS;
 			try {
-				hookStartBuild(trigger);
-				IProject[] ordered = workspace.getBuildOrder();
-				HashSet leftover = new HashSet(Arrays.asList(workspace.getRoot().getProjects(IContainer.INCLUDE_HIDDEN)));
-				leftover.removeAll(Arrays.asList(ordered));
-				IProject[] unordered = (IProject[]) leftover.toArray(new IProject[leftover.size()]);
+				hookStartBuild(configs, trigger);
 				MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.BUILD_FAILED, Messages.events_errors, null);
-				basicBuildLoop(ordered, unordered, trigger, status, monitor);
+				basicBuildLoop(configs, requestedConfigs, trigger, status, monitor);
 				return status;
 			} finally {
 				hookEndBuild(trigger);
@@ -353,14 +384,16 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
-	 * Runs the builder with the given name on the given project. 
+	 * Runs the builder with the given name on the given project config.
 	 * @return A status indicating if the build succeeded or failed
 	 */
-	public IStatus build(IProject project, int trigger, String builderName, Map args, IProgressMonitor monitor) {
+	public IStatus build(IBuildConfiguration buildConfiguration, int trigger, String builderName, Map<String,String> args, IProgressMonitor monitor) {
 		monitor = Policy.monitorFor(monitor);
-		if (builderName == null)
-			return basicBuild(project, trigger, monitor);
-		return basicBuild(project, trigger, builderName, args, monitor);
+		if (builderName == null) {
+			IBuildContext context = new BuildContext(buildConfiguration);
+			return basicBuild(buildConfiguration, trigger, context, monitor);
+		}
+		return basicBuild(buildConfiguration, trigger, builderName, args, monitor);
 	}
 
 	private boolean canRun(int trigger) {
@@ -384,41 +417,64 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
-	 * Creates and returns an ArrayList of BuilderPersistentInfo. 
-	 * The list includes entries for all builders that are
-	 * in the builder spec, and that have a last built state, even if they 
+	 * Creates and returns an ArrayList of BuilderPersistentInfo.
+	 * The list includes entries for all builders for all configs that are
+	 * in the builder spec, and that have a last built state, even if they
 	 * have not been instantiated this session.
+	 *
+	 * e.g. 
+	 * For a project with 3 builders, 2 build configurations and the second
+	 * builder doesn't support configurations.
+	 * The returned List of BuilderInfos is ordered:
+	 * builder_id, config_name,builder_index
+	 * builder_1,  config_1, 1
+	 * builder_1,  config_2, 1
+	 * builder_2,  null,     2
+	 * builder_3,  config_1, 3
+	 * builder_3,  config_1, 3
+	 *
 	 */
-	public ArrayList createBuildersPersistentInfo(IProject project) throws CoreException {
+	public ArrayList<BuilderPersistentInfo> createBuildersPersistentInfo(IProject project) throws CoreException {
 		/* get the old builders (those not yet instantiated) */
-		ArrayList oldInfos = getBuildersPersistentInfo(project);
+		ArrayList<BuilderPersistentInfo> oldInfos = getBuildersPersistentInfo(project);
 
-		ICommand[] commands = ((Project) project).internalGetDescription().getBuildSpec(false);
+		ProjectDescription desc = ((Project) project).internalGetDescription();
+		ICommand[] commands = desc.getBuildSpec(false);
 		if (commands.length == 0)
 			return null;
+		IBuildConfiguration[] configs = project.getBuildConfigs();
 
 		/* build the new list */
-		ArrayList newInfos = new ArrayList(commands.length);
+		ArrayList<BuilderPersistentInfo> newInfos = new ArrayList<BuilderPersistentInfo>(commands.length * configs.length);
 		for (int i = 0; i < commands.length; i++) {
-			String builderName = commands[i].getBuilderName();
-			BuilderPersistentInfo info = null;
-			IncrementalProjectBuilder builder = ((BuildCommand) commands[i]).getBuilder();
-			if (builder == null) {
-				// if the builder was not instantiated, use the old info if any.
-				if (oldInfos != null)
-					info = getBuilderInfo(oldInfos, builderName, i);
-			} else if (!(builder instanceof MissingBuilder)) {
-				ElementTree oldTree = ((InternalBuilder) builder).getLastBuiltTree();
-				//don't persist build state for builders that have no last built state
-				if (oldTree != null) {
-					// if the builder was instantiated, construct a memento with the important info
-					info = new BuilderPersistentInfo(project.getName(), builderName, i);
-					info.setLastBuildTree(oldTree);
-					info.setInterestingProjects(((InternalBuilder) builder).getInterestingProjects());
+			BuildCommand command = (BuildCommand)commands[i];
+			String builderName = command.getBuilderName();
+
+			// If the builder doesn't support configurations, only 1 delta tree to persist
+			boolean supportsConfigs = command.supportsConfigs();
+			int numberConfigs = supportsConfigs ? configs.length : 1;
+
+			for (int j = 0; j < numberConfigs; j++) {
+				IBuildConfiguration config = configs[j];
+				BuilderPersistentInfo info = null;
+				IncrementalProjectBuilder builder = ((BuildCommand) commands[i]).getBuilder(config);
+				if (builder == null) {
+					// if the builder was not instantiated, use the old info if any.
+					if (oldInfos != null)
+						info = getBuilderInfo(oldInfos, builderName, supportsConfigs ? config.getName() : null, i);
+				} else if (!(builder instanceof MissingBuilder)) {
+					ElementTree oldTree = ((InternalBuilder) builder).getLastBuiltTree();
+					//don't persist build state for builders that have no last built state
+					if (oldTree != null) {
+						// if the builder was instantiated, construct a memento with the important info
+						info = new BuilderPersistentInfo(project.getName(), supportsConfigs ? config.getName() : null, builderName, i);
+						info.setLastBuildTree(oldTree);
+						info.setInterestingProjects(((InternalBuilder) builder).getInterestingProjects());
+					}
 				}
+				if (info != null)
+					newInfos.add(info);
 			}
-			if (info != null)
-				newInfos.add(info);
 		}
 		return newInfos;
 	}
@@ -470,21 +526,23 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	/**
 	 * 	Returns the builder instance corresponding to the given command, or
 	 * <code>null</code> if the builder was not valid.
-	 * @param project The project this builder corresponds to
+	 * @param buildConfiguration The project config this builder corresponds to
 	 * @param command The build command
 	 * @param buildSpecIndex The index of this builder in the build spec, or -1 if
 	 * the index is unknown
 	 * @param status MultiStatus for collecting errors
 	 */
-	private IncrementalProjectBuilder getBuilder(IProject project, ICommand command, int buildSpecIndex, MultiStatus status) throws CoreException {
-		InternalBuilder result = ((BuildCommand) command).getBuilder();
+	private IncrementalProjectBuilder getBuilder(IBuildConfiguration buildConfiguration, ICommand command, int buildSpecIndex, MultiStatus status) throws CoreException {
+		InternalBuilder result = ((BuildCommand) command).getBuilder(buildConfiguration);
 		if (result == null) {
-			result = initializeBuilder(command.getBuilderName(), project, buildSpecIndex, status);
-			((BuildCommand) command).setBuilder((IncrementalProjectBuilder) result);
+			result = initializeBuilder(command.getBuilderName(), buildConfiguration, buildSpecIndex, status);
+			((BuildCommand) command).addBuilder(buildConfiguration, (IncrementalProjectBuilder) result);
 			result.setCommand(command);
-			result.setProject(project);
+			result.setBuildConfig(buildConfiguration);
 			result.startupOnInitialize();
 		}
+		// Ensure the build configuration stays fresh for non-config aware builders
+		result.setBuildConfig(buildConfiguration);
 		if (!validateNature(result, command.getBuilderName())) {
 			//skip this builder and null its last built tree because it is invalid
 			//if the nature gets added or re-enabled a full build will be triggered
@@ -495,19 +553,40 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
+	 * Returns the builder instance corresponding to the given command, or
+	 * <code>null</code> if the builder was not valid, and sets its context
+	 * to the one supplied.
+	 * 
+	 * @param buildConfiguration The project config this builder corresponds to
+	 * @param command The build command
+	 * @param buildSpecIndex The index of this builder in the build spec, or -1 if
+	 * the index is unknown
+	 * @param status MultiStatus for collecting errors
+	 */
+	private IncrementalProjectBuilder getBuilder(IBuildConfiguration buildConfiguration, ICommand command, int buildSpecIndex, MultiStatus status, IBuildContext context) throws CoreException {
+		InternalBuilder builder = getBuilder(buildConfiguration, command, buildSpecIndex, status);
+		if (builder != null)
+			builder.setContext(context);
+		return (IncrementalProjectBuilder) builder;
+	}
+
+	/**
 	 * Removes the builder persistent info from the map corresponding to the
-	 * given builder name and build spec index, or <code>null</code> if not found
+	 * given builder name, configuration name and build spec index, or <code>null</code> if not found
 	 * 
+	 * @param configName or null if the builder doesn't support configurations
 	 * @param buildSpecIndex The index in the build spec, or -1 if unknown
 	 */
-	private BuilderPersistentInfo getBuilderInfo(ArrayList infos, String builderName, int buildSpecIndex) {
-		//try to match on builder index, but if not match is found, use the name alone
+	private BuilderPersistentInfo getBuilderInfo(ArrayList<BuilderPersistentInfo> infos, String builderName, String configName, int buildSpecIndex) {
+		//try to match on builder index, but if not match is found, use the builder name and config name
 		//this is because older workspace versions did not store builder infos in build spec order
 		BuilderPersistentInfo nameMatch = null;
-		for (Iterator it = infos.iterator(); it.hasNext();) {
-			BuilderPersistentInfo info = (BuilderPersistentInfo) it.next();
-			//match on name and build spec index if known
-			if (info.getBuilderName().equals(builderName)) {
+		for (Iterator<BuilderPersistentInfo> it = infos.iterator(); it.hasNext();) {
+			BuilderPersistentInfo info = it.next();
+			// match on name, config name and build spec index if known
+			// Note: the config name may be null for builders that don't support configurations, or old workspaces
+			if (info.getBuilderName().equals(builderName) && 
+					(info.getConfigName() == null || info.getConfigName().equals(configName))) {
 				//we have found a match on name alone
 				if (nameMatch == null)
 					nameMatch = info;
@@ -525,8 +604,9 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	 * The list includes entries for all builders that are in the builder spec,
 	 * and that have a last built state but have not been instantiated this session.
 	 */
-	public ArrayList getBuildersPersistentInfo(IProject project) throws CoreException {
-		return (ArrayList) project.getSessionProperty(K_BUILD_LIST);
+	@SuppressWarnings("unchecked")
+	public ArrayList<BuilderPersistentInfo> getBuildersPersistentInfo(IProject project) throws CoreException {
+		return (ArrayList<BuilderPersistentInfo>) project.getSessionProperty(K_BUILD_LIST);
 	}
 
 	/**
@@ -536,7 +616,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	 * because IProject.build allows a builder to be executed that is not in the
 	 * build spec.
 	 */
-	private ICommand getCommand(IProject project, String builderName, Map args) {
+	private ICommand getCommand(IProject project, String builderName, Map<String, String> args) {
 		ICommand[] buildSpec = ((Project) project).internalGetDescription().getBuildSpec(false);
 		for (int i = 0; i < buildSpec.length; i++)
 			if (buildSpec[i].getBuilderName().equals(builderName))
@@ -548,6 +628,22 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 		return result;
 	}
 
+	/**
+	 * Gets a workspace delta for a given project, based on the state of the workspace
+	 * tree the last time the current builder was run.
+	 * <p>
+	 * Returns null if:
+	 * <ul>
+	 * <li> The state of the workspace is unknown. </li>
+	 * <li> The current builder has not indicated that it is interested in deltas
+	 * for the given project. </li>
+	 * <li> If the project does not exist. </li>
+	 * </ul>
+	 * <p>
+	 * Deltas are computed once and cached for efficiency.
+	 * 
+	 * @param project the project to get a delta for
+	 */
 	IResourceDelta getDelta(IProject project) {
 		try {
 			lock.acquire();
@@ -584,8 +680,11 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 			deltaCache.cache(project.getFullPath(), currentLastBuiltTree, currentTree, result);
 			if (Policy.DEBUG_BUILD_FAILURE && result == null)
 				Policy.debug("Build: no delta " + debugBuilder() + " [" + debugProject() + "] " + project.getFullPath()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			if (Policy.DEBUG_BUILD_DELTA)
+			if (Policy.DEBUG_BUILD_DELTA) {
 				Policy.debug("Finished computing delta, time: " + (System.currentTimeMillis() - startTime) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
+				// Debug the delta
+				Policy.debug(((ResourceDelta)result).toDebugString());
+			}
 			return result;
 		} finally {
 			lock.release();
@@ -595,7 +694,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	/**
 	 * Returns the safe runnable instance for invoking a builder
 	 */
-	private ISafeRunnable getSafeRunnable(final int trigger, final Map args, final MultiStatus status, final IProgressMonitor monitor) {
+	private ISafeRunnable getSafeRunnable(final int trigger, final Map<String, String> args, final MultiStatus status, final IProgressMonitor monitor) {
 		return new ISafeRunnable() {
 			public void handleException(Throwable e) {
 				if (e instanceof OperationCanceledException) {
@@ -631,7 +730,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 					currentBuilder.clean(monitor);
 				if (prereqs == null)
 					prereqs = new IProject[0];
-				currentBuilder.setInterestingProjects((IProject[]) prereqs.clone());
+				currentBuilder.setInterestingProjects(prereqs.clone());
 			}
 		};
 	}
@@ -663,8 +762,8 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
-	 * Returns true if the given project has been built during this build cycle, and
-	 * false otherwise.
+	 * Returns true if at least one of the given project's configs have been built
+	 * during this build cycle; and false otherwise.
 	 */
 	boolean hasBeenBuilt(IProject project) {
 		return builtProjects.contains(project);
@@ -696,6 +795,10 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 		//ensure autobuild runs after a clean
 		if (trigger == IncrementalProjectBuilder.CLEAN_BUILD)
 			autoBuildJob.forceBuild();
+		if (Policy.DEBUG_BUILD_INVOKING) {
+			Policy.debug("Top-level build-end time: " + (System.currentTimeMillis() - overallTimeStamp)); //$NON-NLS-1$
+			overallTimeStamp = -1;
+		}
 	}
 
 	/**
@@ -716,12 +819,20 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	 * This hook is called when a build API method is called, before any builders
 	 * start running.
 	 */
-	private void hookStartBuild(int trigger) {
+	private void hookStartBuild(IBuildConfiguration[] configs, int trigger) {
 		building = true;
 		if (Policy.DEBUG_BUILD_STACK) {
 			IStatus info = new Status(IStatus.INFO, ResourcesPlugin.PI_RESOURCES, 1, "Starting build: " + debugTrigger(trigger), new RuntimeException().fillInStackTrace()); //$NON-NLS-1$
 			Policy.log(info);
 		}
+		if (Policy.DEBUG_BUILD_INVOKING) {
+			overallTimeStamp = System.currentTimeMillis();
+			StringBuffer sb = new StringBuffer("Top-level build-start of: "); //$NON-NLS-1$
+			for (int i = 0; i < configs.length; i++)
+				sb.append(configs[i]).append(", "); //$NON-NLS-1$
+			sb.append(debugTrigger(trigger));
+			Policy.debug(sb.toString());
+		}
 	}
 
 	/**
@@ -731,7 +842,8 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	 * prevent trying to instantiate it every time a build is run.
 	 * This method NEVER returns null.
 	 */
-	private IncrementalProjectBuilder initializeBuilder(String builderName, IProject project, int buildSpecIndex, MultiStatus status) throws CoreException {
+	private IncrementalProjectBuilder initializeBuilder(String builderName, IBuildConfiguration buildConfiguration, int buildSpecIndex, MultiStatus status) throws CoreException {
+		IProject project = buildConfiguration.getProject();
 		IncrementalProjectBuilder builder = null;
 		try {
 			builder = instantiateBuilder(builderName);
@@ -744,9 +856,9 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 			builder = new MissingBuilder(builderName);
 		}
 		// get the map of builders to get the last built tree
-		ArrayList infos = getBuildersPersistentInfo(project);
+		ArrayList<BuilderPersistentInfo> infos = getBuildersPersistentInfo(project);
 		if (infos != null) {
-			BuilderPersistentInfo info = getBuilderInfo(infos, builderName, buildSpecIndex);
+			BuilderPersistentInfo info = getBuilderInfo(infos, builderName, buildConfiguration.getName(), buildSpecIndex);
 			if (info != null) {
 				infos.remove(info);
 				ElementTree tree = info.getLastBuiltTree();
@@ -825,8 +937,8 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	 * Returns true if the given builder needs to be invoked, and false
 	 * otherwise.
 	 * 
-	 * The algorithm is to compute the intersection of the set of projects that
-	 * have changed since the last build, and the set of projects this builder
+	 * The algorithm is to compute the intersection of the set of build configs that
+	 * have changed since the last build, and the set of build configs this builder
 	 * cares about.  This is an optimization, under the assumption that computing
 	 * the forward delta once (not the resource delta) is more efficient than
 	 * computing project deltas and invoking builders for projects that haven't
@@ -918,13 +1030,13 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	}
 
 	/**
-	 * Sets the builder infos for the given project.  The builder infos are
+	 * Sets the builder infos for the given build config.  The builder infos are
 	 * an ArrayList of BuilderPersistentInfo.
 	 * The list includes entries for all builders that are
 	 * in the builder spec, and that have a last built state, even if they 
 	 * have not been instantiated this session.
 	 */
-	public void setBuildersPersistentInfo(IProject project, ArrayList list) {
+	public void setBuildersPersistentInfo(IProject project, List<BuilderPersistentInfo> list) {
 		try {
 			project.setSessionProperty(K_BUILD_LIST, list);
 		} catch (CoreException e) {
@@ -949,7 +1061,7 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 	private String toString(InternalBuilder builder) {
 		String name = builder.getClass().getName();
 		name = name.substring(name.lastIndexOf('.') + 1);
-		return name + "(" + builder.getProject().getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+		return name + "(" + builder.getBuildConfig() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	/**
@@ -980,23 +1092,24 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 		}
 		return project.isNatureEnabled(nature);
 	}
-	
+
 	/**
 	 * Returns the scheduling rule that is required for building the project.
 	 */
-	public ISchedulingRule getRule(IProject project, int trigger, String builderName, Map args) {
-
+	public ISchedulingRule getRule(IBuildConfiguration buildConfiguration, int trigger, String builderName, Map<String, String> args) {
+		IProject project = buildConfiguration.getProject();
 		MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, Messages.events_errors, null);
 		if (builderName == null) {
 			final ICommand[] commands;
 			if (project.isAccessible()) {
-				Set rules = new HashSet();
+				Set<ISchedulingRule> rules = new HashSet<ISchedulingRule>();
 				commands = ((Project) project).internalGetDescription().getBuildSpec(false);
 				boolean hasNullBuildRule = false;
+				BuildContext context = new BuildContext(buildConfiguration);
 				for (int i = 0; i < commands.length; i++) {
 					BuildCommand command = (BuildCommand) commands[i];
 					try {
-						IncrementalProjectBuilder builder = getBuilder(project, command, i, status);
+						IncrementalProjectBuilder builder = getBuilder(buildConfiguration, command, i, status, context);
 						if (builder != null) {
 							ISchedulingRule builderRule = builder.getRule(trigger, args);
 							if (builderRule != null)
@@ -1013,13 +1126,13 @@ public class BuildManager implements ICoreConstants, IManager, ILifecycleListene
 				// Bug 306824 - Builders returning a null rule can't work safely if other builders require a non-null rule
 				// Be pessimistic and fall back to the default build rule (workspace root) in this case.
 				if (!hasNullBuildRule)
-					return new MultiRule((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]));
+					return new MultiRule(rules.toArray(new ISchedulingRule[rules.size()]));
 			}
 		} else {
 			// Returns the derived resources for the specified builderName
 			ICommand command = getCommand(project, builderName, args);
 			try {
-				IncrementalProjectBuilder builder = getBuilder(project, command, -1, status);
+				IncrementalProjectBuilder builder = getBuilder(buildConfiguration, command, -1, status);
 				if (builder != null)
 					return builder.getRule(trigger, args);
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuilderPersistentInfo.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuilderPersistentInfo.java
index 0f3ab46..7610f6d 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuilderPersistentInfo.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuilderPersistentInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Broadcom Corporation - build configurations
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
@@ -24,12 +25,19 @@ public class BuilderPersistentInfo {
 	protected IProject[] interestingProjects = ICoreConstants.EMPTY_PROJECT_ARRAY;
 	protected ElementTree lastBuildTree;
 	protected String projectName;
+	protected String configName;
 
 	public BuilderPersistentInfo(String projectName, String builderName, int buildSpecIndex) {
+		this(projectName, null, builderName, buildSpecIndex);
+	}
+
+	public BuilderPersistentInfo(String projectName, String configName, String builderName, int buildSpecIndex) {
 		this.projectName = projectName;
+		this.configName = configName;
 		this.builderName = builderName;
 		this.buildSpecIndex = buildSpecIndex;
 	}
+
 	public String getBuilderName() {
 		return builderName;
 	}
@@ -38,6 +46,15 @@ public class BuilderPersistentInfo {
 		return buildSpecIndex;
 	}
 
+	/**
+	 * @return the name of the configuration for which this information refers. 
+	 * Will return null if the build command doesn't support configurations, or the 
+	 * build persistent info has been loaded from a workspace without configurations.
+	 */
+	public String getConfigName() {
+		return configName;
+	}
+
 	public IProject[] getInterestingProjects() {
 		return interestingProjects;
 	}
@@ -50,6 +67,10 @@ public class BuilderPersistentInfo {
 		return projectName;
 	}
 
+	public void setConfigName(String configName) {
+		this.configName = configName;
+	}
+
 	public void setInterestingProjects(IProject[] projects) {
 		interestingProjects = projects;
 	}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/InternalBuilder.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/InternalBuilder.java
index 5631f3f..d364333 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/InternalBuilder.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/InternalBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,9 +7,12 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Broadcom Corporation - build configurations and references
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
+import org.eclipse.core.resources.IBuildConfiguration;
+
 import java.util.Map;
 import org.eclipse.core.internal.resources.ICoreConstants;
 import org.eclipse.core.internal.watson.ElementTree;
@@ -30,6 +33,7 @@ public abstract class InternalBuilder {
 	static BuildManager buildManager;
 	private ICommand command;
 	private boolean forgetStateRequested = false;
+	private boolean rememberStateRequested = false;
 	private IProject[] interestingProjects = ICoreConstants.EMPTY_PROJECT_ARRAY;
 	/**
 	 * Human readable builder name for progress reporting.
@@ -41,8 +45,15 @@ public abstract class InternalBuilder {
 	 * The symbolic name of the plugin that defines this builder
 	 */
 	private String pluginId;
-	private IProject project;
-	
+	/**
+	 * The build configuration that this builder is to build.
+	 */
+	private IBuildConfiguration buildConfiguration;
+	/**
+	 * The context in which the builder was called.
+	 */
+	private IBuildContext context = null;
+
 	/**
 	 * The value of the callOnEmptyDelta builder extension attribute.
 	 */
@@ -51,7 +62,7 @@ public abstract class InternalBuilder {
 	/*
 	 *  @see IncrementalProjectBuilder#build
 	 */
-	protected abstract IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException;
+	protected abstract IProject[] build(int kind, Map<String,String> args, IProgressMonitor monitor) throws CoreException;
 
 	/**
 	 * Returns the value of the callOnEmptyDelta builder extension attribute.
@@ -65,10 +76,11 @@ public abstract class InternalBuilder {
 	protected abstract void clean(IProgressMonitor monitor) throws CoreException;
 
 	/**
-	 * Clears the request to forget last built states.
+	 * Clears the requests for forgetting or remembering last built states.
 	 */
-	final void clearForgetLastBuiltState() {
+	final void clearLastBuiltStateRequests() {
 		forgetStateRequested = false;
+		rememberStateRequested = false;
 	}
 
 	/*
@@ -77,6 +89,14 @@ public abstract class InternalBuilder {
 	protected void forgetLastBuiltState() {
 		oldState = null;
 		forgetStateRequested = true;
+		rememberStateRequested = false;
+	}
+
+	/*
+	 * @see IncrementalProjectBuilder#rememberLastBuiltState
+	 */
+	protected void rememberLastBuiltState() {
+		rememberStateRequested = !forgetStateRequested;
 	}
 
 	/*
@@ -86,12 +106,20 @@ public abstract class InternalBuilder {
 		return (ICommand)((BuildCommand)command).clone();
 	}
 	
-	/*
-	 * @see IncrementalProjectBuilder#forgetLastBuiltState
+	/**
+	 * @see IncrementalProjectBuilder#forgetLastBuiltState()
+	 * @see IncrementalProjectBuilder#rememberLastBuiltState()
 	 */
 	protected IResourceDelta getDelta(IProject aProject) {
 		return buildManager.getDelta(aProject);
 	}
+	
+	/**
+	 * @see IncrementalProjectBuilder#getContext()
+	 */ 
+	protected IBuildContext getContext() {
+		return context;
+	}
 
 	final IProject[] getInterestingProjects() {
 		return interestingProjects;
@@ -121,7 +149,14 @@ public abstract class InternalBuilder {
 	 * Returns the project for this builder
 	 */
 	protected IProject getProject() {
-		return project;
+		return buildConfiguration.getProject();
+	}
+
+	/**
+	 * @see IncrementalProjectBuilder#getBuildConfig()
+	 */
+	protected IBuildConfiguration getBuildConfig() {
+		return buildConfiguration;
 	}
 
 	/*
@@ -174,12 +209,22 @@ public abstract class InternalBuilder {
 	}
 
 	/**
-	 * Sets the project for which this builder operates.
-	 * @see #getProject()
+	 * Sets the build configuration for which this builder operates.
+	 * @see #getBuildConfig()
 	 */
-	final void setProject(IProject value) {
-		Assert.isTrue(project == null);
-		project = value;
+	final void setBuildConfig(IBuildConfiguration value) {
+		Assert.isNotNull(value);
+		buildConfiguration = value;
+		if (context == null)
+			context = new BuildContext(buildConfiguration);
+	}
+
+	/**
+	 * Sets the context in which the builder was last called.
+	 * @see #getContext()
+	 */
+	final void setContext(IBuildContext context) {
+		this.context = context;
 	}
 
 	/*
@@ -194,4 +239,12 @@ public abstract class InternalBuilder {
 	final boolean wasForgetStateRequested() {
 		return forgetStateRequested;
 	}
+
+	/**
+	 * Returns true if the builder requested that its last built state be
+	 * remembered, and false otherwise.
+	 */
+	final boolean wasRememberStateRequested() {
+		return rememberStateRequested;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/LifecycleEvent.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/LifecycleEvent.java
index 342691d..20ad0c7 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/LifecycleEvent.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/LifecycleEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import org.eclipse.core.resources.IResource;
 public class LifecycleEvent {
 	//constants for kinds of internal workspace lifecycle events
 	public static final int PRE_PROJECT_CLOSE = 0x01;
-	public static final int PRE_PROJECT_CHANGE = 0x02;
+	public static final int POST_PROJECT_CHANGE = 0x02;
 	public static final int PRE_PROJECT_COPY = 0x04;
 	public static final int PRE_PROJECT_CREATE = 0x08;
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/NotificationManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/NotificationManager.java
index 37faa27..03ee509 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/NotificationManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/NotificationManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,12 +7,12 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
 import java.util.*;
-import org.eclipse.core.internal.resources.IManager;
-import org.eclipse.core.internal.resources.Workspace;
+import org.eclipse.core.internal.resources.*;
 import org.eclipse.core.internal.utils.Messages;
 import org.eclipse.core.internal.watson.ElementTree;
 import org.eclipse.core.resources.*;
@@ -49,7 +49,7 @@ public class NotificationManager implements IManager, ILifecycleListener {
 	/**
 	 * The Threads that are currently avoiding notification.
 	 */
-	private Set avoidNotify = new HashSet();
+	private Set<Thread> avoidNotify = new HashSet<Thread>();
 
 	/**
 	 * Indicates whether a notification is currently in progress. Used to avoid
@@ -221,7 +221,7 @@ public class NotificationManager implements IManager, ILifecycleListener {
 			// Markers may have changed since the delta was generated. If so, get the new
 			// marker state and insert it in to the delta which is being reused.
 			if (id != lastDeltaId) {
-				Map markerDeltas = workspace.getMarkerManager().getMarkerDeltas(lastPostBuildId);
+				Map<IPath, MarkerSet> markerDeltas = workspace.getMarkerManager().getMarkerDeltas(lastPostBuildId);
 				lastDelta.updateMarkers(markerDeltas);
 			}
 		} else {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceChangeEvent.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceChangeEvent.java
index 396fc74..4630ada 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceChangeEvent.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceChangeEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,12 +7,14 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
 import java.util.*;
 import org.eclipse.core.internal.resources.*;
 import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.IPath;
 
 public class ResourceChangeEvent extends EventObject implements IResourceChangeEvent {
 
@@ -50,13 +52,13 @@ public class ResourceChangeEvent extends EventObject implements IResourceChangeE
 		if (info == null)
 			return NO_MARKER_DELTAS;
 		//Map of IPath -> MarkerSet containing MarkerDelta objects
-		Map markerDeltas = info.getMarkerDeltas();
+		Map<IPath, MarkerSet> markerDeltas = info.getMarkerDeltas();
 		if (markerDeltas == null || markerDeltas.size() == 0)
 			return NO_MARKER_DELTAS;
-		ArrayList matching = new ArrayList();
-		Iterator deltaSets = markerDeltas.values().iterator();
+		ArrayList<IMarkerDelta> matching = new ArrayList<IMarkerDelta>();
+		Iterator<MarkerSet> deltaSets = markerDeltas.values().iterator();
 		while (deltaSets.hasNext()) {
-			MarkerSet deltas = (MarkerSet) deltaSets.next();
+			MarkerSet deltas = deltaSets.next();
 			IMarkerSetElement[] elements = deltas.elements();
 			for (int i = 0; i < elements.length; i++) {
 				MarkerDelta markerDelta = (MarkerDelta) elements[i];
@@ -65,7 +67,7 @@ public class ResourceChangeEvent extends EventObject implements IResourceChangeE
 					matching.add(markerDelta);
 			}
 		}
-		return (IMarkerDelta[]) matching.toArray(new IMarkerDelta[matching.size()]);
+		return matching.toArray(new IMarkerDelta[matching.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDelta.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDelta.java
index c7e14bf..f7cda9e 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDelta.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
@@ -90,7 +91,7 @@ public class ResourceDelta extends PlatformObject implements IResourceDelta {
 		// Only need to check for added and removed, or for changes on the workspace.
 		// For changed, the bit is set in the comparator.
 		if (path.isRoot() || kind == ADDED || kind == REMOVED) {
-			MarkerSet changes = (MarkerSet) deltaInfo.getMarkerDeltas().get(path);
+			MarkerSet changes = deltaInfo.getMarkerDeltas().get(path);
 			if (changes != null && changes.size() > 0) {
 				status |= MARKERS;
 				// If there have been marker changes, then ensure kind is CHANGED (if not ADDED or REMOVED).
@@ -271,12 +272,12 @@ public class ResourceDelta extends PlatformObject implements IResourceDelta {
 	 * @see IResourceDelta#getMarkerDeltas()
 	 */
 	public IMarkerDelta[] getMarkerDeltas() {
-		Map markerDeltas = deltaInfo.getMarkerDeltas();
+		Map<IPath, MarkerSet> markerDeltas = deltaInfo.getMarkerDeltas();
 		if (markerDeltas == null)
 			return EMPTY_MARKER_DELTAS;
 		if (path == null)
 			path = Path.ROOT;
-		MarkerSet changes = (MarkerSet) markerDeltas.get(path);
+		MarkerSet changes = markerDeltas.get(path);
 		if (changes == null)
 			return EMPTY_MARKER_DELTAS;
 		IMarkerSetElement[] elements = changes.elements();
@@ -426,7 +427,7 @@ public class ResourceDelta extends PlatformObject implements IResourceDelta {
 	 * when the delta is reused in cases where the only changes 
 	 * are marker changes.
 	 */
-	public void updateMarkers(Map markers) {
+	public void updateMarkers(Map<IPath, MarkerSet> markers) {
 		deltaInfo.setMarkerDeltas(markers);
 	}
 
@@ -544,14 +545,14 @@ public class ResourceDelta extends PlatformObject implements IResourceDelta {
 	}
 
 	public void writeMarkerDebugString(StringBuffer buffer) {
-		Map markerDeltas = deltaInfo.getMarkerDeltas();
+		Map<IPath, MarkerSet> markerDeltas = deltaInfo.getMarkerDeltas();
 		if (markerDeltas == null || markerDeltas.isEmpty())
 			return;
 		buffer.append('[');
-		for (Iterator e = markerDeltas.keySet().iterator(); e.hasNext();) {
-			IPath key = (IPath) e.next();
+		for (Iterator<IPath> e = markerDeltas.keySet().iterator(); e.hasNext();) {
+			IPath key = e.next();
 			if (getResource().getFullPath().equals(key)) {
-				IMarkerSetElement[] deltas = ((MarkerSet) markerDeltas.get(key)).elements();
+				IMarkerSetElement[] deltas = markerDeltas.get(key).elements();
 				boolean addComma = false;
 				for (int i = 0; i < deltas.length; i++) {
 					IMarkerDelta delta = (IMarkerDelta) deltas[i];
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaFactory.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaFactory.java
index 67e7e39..21978e2 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaFactory.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
@@ -51,7 +52,7 @@ public class ResourceDeltaFactory {
 		IPath pathInDelta = Path.ROOT;
 
 		// get the marker deltas for the delta info object....if needed
-		Map allMarkerDeltas = null;
+		Map<IPath, MarkerSet> allMarkerDeltas = null;
 		if (markerGeneration >= 0)
 			allMarkerDeltas = workspace.getMarkerManager().getMarkerDeltas(markerGeneration);
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaInfo.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaInfo.java
index d3aa67a..89daee6 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaInfo.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/events/ResourceDeltaInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,19 +7,22 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.events;
 
 import java.util.Map;
+import org.eclipse.core.internal.resources.MarkerSet;
 import org.eclipse.core.internal.resources.Workspace;
+import org.eclipse.core.runtime.IPath;
 
 public class ResourceDeltaInfo {
 	protected Workspace workspace;
-	protected Map allMarkerDeltas;
+	protected Map<IPath, MarkerSet> allMarkerDeltas;
 	protected NodeIDMap nodeIDMap;
 	protected ResourceComparator comparator;
 
-	public ResourceDeltaInfo(Workspace workspace, Map markerDeltas, ResourceComparator comparator) {
+	public ResourceDeltaInfo(Workspace workspace, Map<IPath, MarkerSet> markerDeltas, ResourceComparator comparator) {
 		super();
 		this.workspace = workspace;
 		this.allMarkerDeltas = markerDeltas;
@@ -33,7 +36,7 @@ public class ResourceDeltaInfo {
 	/**
 	 * Table of all marker deltas, IPath -> MarkerSet
 	 */
-	public Map getMarkerDeltas() {
+	public Map<IPath, MarkerSet> getMarkerDeltas() {
 		return allMarkerDeltas;
 	}
 
@@ -45,7 +48,7 @@ public class ResourceDeltaInfo {
 		return workspace;
 	}
 
-	public void setMarkerDeltas(Map value) {
+	public void setMarkerDeltas(Map<IPath, MarkerSet> value) {
 		allMarkerDeltas = value;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BlobStore.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BlobStore.java
index 2f9a8f0..2c9d6fc 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BlobStore.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BlobStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.core.internal.localstore;
 
 import java.io.InputStream;
-import java.util.Iterator;
 import java.util.Set;
 import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileStore;
@@ -99,9 +98,9 @@ public class BlobStore {
 	/**
 	 * Delete all of the blobs in the given set.
 	 */
-	public void deleteBlobs(Set set) {
-		for (Iterator i = set.iterator(); i.hasNext();)
-			deleteBlob((UniversalUniqueIdentifier) i.next());
+	public void deleteBlobs(Set<UniversalUniqueIdentifier> set) {
+		for (UniversalUniqueIdentifier id : set)
+			deleteBlob(id);
 	}
 
 	public IFileStore fileFor(UniversalUniqueIdentifier uuid) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/Bucket.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/Bucket.java
index a604d3f..c51fb4d 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/Bucket.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/Bucket.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
@@ -14,6 +15,7 @@ import java.io.*;
 import java.util.*;
 import org.eclipse.core.internal.resources.ResourceException;
 import org.eclipse.core.internal.resources.ResourceStatus;
+import org.eclipse.core.internal.utils.FileUtil;
 import org.eclipse.core.internal.utils.Messages;
 import org.eclipse.core.resources.IResourceStatus;
 import org.eclipse.core.runtime.*;
@@ -141,11 +143,11 @@ public abstract class Bucket {
 	static final String INDEXES_DIR_NAME = ".indexes"; //$NON-NLS-1$	
 
 	/**
-	 * Map of the history entries in this bucket. Maps (String -> byte[][]),
+	 * Map of the history entries in this bucket. Maps (String -> byte[][] or String[][]),
 	 * where the key is the path of the object we are storing history for, and
 	 * the value is the history entry data (UUID,timestamp) pairs.
 	 */
-	private final Map entries;
+	private final Map<String,Object> entries;
 	/**
 	 * The file system location of this bucket index file.
 	 */
@@ -160,7 +162,7 @@ public abstract class Bucket {
 	protected String projectName;
 
 	public Bucket() {
-		this.entries = new HashMap();
+		this.entries = new HashMap<String,Object>();
 	}
 
 	/**
@@ -175,9 +177,9 @@ public abstract class Bucket {
 		if (entries.isEmpty())
 			return Visitor.CONTINUE;
 		try {
-			for (Iterator i = entries.entrySet().iterator(); i.hasNext();) {
-				Map.Entry mapEntry = (Map.Entry) i.next();
-				IPath path = new Path((String) mapEntry.getKey());
+			for (Iterator<Map.Entry<String, Object>> i = entries.entrySet().iterator(); i.hasNext();) {
+				Map.Entry<String,Object> mapEntry = i.next();
+				IPath path = new Path(mapEntry.getKey());
 				// check whether the filter applies
 				int matchingSegments = filter.matchingFirstSegments(path);
 				if (!filter.isPrefixOf(path) || path.segmentCount() - matchingSegments > depth)
@@ -345,13 +347,14 @@ public abstract class Bucket {
 			try {
 				destination.write(getVersion());
 				destination.writeInt(entries.size());
-				for (Iterator i = entries.entrySet().iterator(); i.hasNext();) {
-					Map.Entry entry = (Map.Entry) i.next();
-					writeEntryKey(destination, (String) entry.getKey());
+				for (Iterator<Map.Entry<String,Object>> i = entries.entrySet().iterator(); i.hasNext();) {
+					Map.Entry<String,Object> entry = i.next();
+					writeEntryKey(destination, entry.getKey());
 					writeEntryValue(destination, entry.getValue());
 				}
-			} finally {
 				destination.close();
+			} finally {
+				FileUtil.safeClose(destination);
 			}
 			needSaving = false;
 		} catch (IOException ioe) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BucketTree.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BucketTree.java
index 48d9efe..18b54a4 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BucketTree.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/BucketTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
@@ -14,6 +15,7 @@ import java.io.*;
 import org.eclipse.core.internal.localstore.Bucket.Visitor;
 import org.eclipse.core.internal.resources.ResourceException;
 import org.eclipse.core.internal.resources.Workspace;
+import org.eclipse.core.internal.utils.FileUtil;
 import org.eclipse.core.internal.utils.Messages;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
@@ -139,24 +141,15 @@ public class BucketTree {
 		if (!versionFile.getParentFile().exists())
 			versionFile.getParentFile().mkdirs();
 		FileOutputStream stream = null;
-		boolean failed = false;
 		try {
 			stream = new FileOutputStream(versionFile);
 			stream.write(current.getVersion());
+			stream.close();
 		} catch (IOException e) {
-			failed = true;
 			String message = NLS.bind(Messages.resources_writeWorkspaceMeta, versionFile.getAbsolutePath()); 
 			throw new ResourceException(IResourceStatus.FAILED_WRITE_METADATA, null, message, e);
 		} finally {
-			try {
-				if (stream != null)
-					stream.close();
-			} catch (IOException e) {
-				if (!failed) {
-					String message = NLS.bind(Messages.resources_writeWorkspaceMeta, versionFile.getAbsolutePath());
-					throw new ResourceException(IResourceStatus.FAILED_WRITE_METADATA, null, message, e);
-				}
-			}
+			FileUtil.safeClose(stream);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CollectSyncStatusVisitor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CollectSyncStatusVisitor.java
index aeed700..33bccf4 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CollectSyncStatusVisitor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CollectSyncStatusVisitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.osgi.util.NLS;
  * the two will be recorded in the returned status.
  */
 public class CollectSyncStatusVisitor extends RefreshLocalVisitor {
-	protected List affectedResources;
+	protected List<Resource> affectedResources;
 	/**
 	 * Determines how to treat cases where the resource is missing from
 	 * the local file system.  When performing a deletion with force=false,
@@ -49,7 +49,7 @@ public class CollectSyncStatusVisitor extends RefreshLocalVisitor {
 		String message = NLS.bind(Messages.localstore_resourceIsOutOfSync, target.getFullPath());
 		status.add(new ResourceStatus(IResourceStatus.OUT_OF_SYNC_LOCAL, target.getFullPath(), message));
 		if (affectedResources == null)
-			affectedResources = new ArrayList(20);
+			affectedResources = new ArrayList<Resource>(20);
 		affectedResources.add(target);
 		resourceChanged = true;
 	}
@@ -76,7 +76,7 @@ public class CollectSyncStatusVisitor extends RefreshLocalVisitor {
 	 * the local file system, or <code>null</code> if all resources
 	 * are synchronized.
 	 */
-	public List getAffectedResources() {
+	public List<Resource> getAffectedResources() {
 		return affectedResources;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CopyVisitor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CopyVisitor.java
index 64f28cb..f350e6f 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CopyVisitor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/CopyVisitor.java
@@ -85,8 +85,8 @@ public class CopyVisitor implements IUnifiedTreeVisitor {
 			// update filters in project descriptions
 			if (source instanceof Container && ((Container) source).hasFilters()) {
 				Project sourceProject = (Project) source.getProject();
-				LinkedList/*<FilterDescription>*/originalDescriptions = sourceProject.internalGetDescription().getFilter(source.getProjectRelativePath());
-				LinkedList/*<FilterDescription>*/filterDescriptions = FilterDescription.copy(originalDescriptions, destination);
+				LinkedList<FilterDescription> originalDescriptions = sourceProject.internalGetDescription().getFilter(source.getProjectRelativePath());
+				LinkedList<FilterDescription> filterDescriptions = FilterDescription.copy(originalDescriptions, destination);
 				Project project = (Project) destination.getProject();
 				project.internalGetDescription().setFilters(destination.getProjectRelativePath(), filterDescriptions);
 				project.writeDescription(updateFlags);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java
index 3ec3ed6..5472fb4 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Matt McCutchen - fix for bug 174492
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
@@ -27,7 +28,7 @@ public class DeleteVisitor implements IUnifiedTreeVisitor, ICoreConstants {
 	protected boolean force;
 	protected boolean keepHistory;
 	protected IProgressMonitor monitor;
-	protected List skipList;
+	protected List<Resource> skipList;
 	protected MultiStatus status;
 
 	/**
@@ -35,7 +36,7 @@ public class DeleteVisitor implements IUnifiedTreeVisitor, ICoreConstants {
 	 */
 	private int ticks;
 
-	public DeleteVisitor(List skipList, int flags, IProgressMonitor monitor, int ticks) {
+	public DeleteVisitor(List<Resource> skipList, int flags, IProgressMonitor monitor, int ticks) {
 		this.skipList = skipList;
 		this.ticks = ticks;
 		this.force = (flags & IResource.FORCE) != 0;
@@ -94,8 +95,7 @@ public class DeleteVisitor implements IUnifiedTreeVisitor, ICoreConstants {
 	protected boolean isAncestorOfResourceToSkip(IResource resource) {
 		if (skipList == null)
 			return false;
-		for (int i = 0; i < skipList.size(); i++) {
-			IResource target = (IResource) skipList.get(i);
+		for (IResource target : skipList) {
 			if (isAncestor(resource, target))
 				return true;
 		}
@@ -109,8 +109,8 @@ public class DeleteVisitor implements IUnifiedTreeVisitor, ICoreConstants {
 			return;
 		if (node.isFolder()) {
 			monitor.subTask(NLS.bind(Messages.localstore_deleting, target.getFullPath()));
-			for (Iterator children = node.getChildren(); children.hasNext();)
-				recursiveKeepHistory(store, (UnifiedTreeNode) children.next());
+			for (Iterator<UnifiedTreeNode> children = node.getChildren(); children.hasNext();)
+				recursiveKeepHistory(store, children.next());
 		} else {
 			IFileInfo info = node.fileInfo;
 			if (info == null)
@@ -130,7 +130,7 @@ public class DeleteVisitor implements IUnifiedTreeVisitor, ICoreConstants {
 		if (skipList == null)
 			return false;
 		for (int i = 0; i < skipList.size(); i++)
-			if (equals(resource, (IResource) skipList.get(i)))
+			if (equals(resource, skipList.get(i)))
 				return true;
 		return false;
 	}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileStoreRoot.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileStoreRoot.java
index af219bd..498b34b 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileStoreRoot.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileStoreRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,21 +55,11 @@ public class FileStoreRoot {
 	}
 
 	private IPathVariableManager getManager(IPath workspacePath) {
-		if (workspacePath.segmentCount() > 0) {
-			IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace()
-					.getRoot();
-			IPath path = (IPath) workspacePath.clone();
-			while (path.segmentCount() > 0) {
-				IResource resource = workspaceRoot.findMember(path);
-				if (resource != null) {
-					if (path.segmentCount() < workspacePath.segmentCount())
-						resource = ((IContainer) resource).getFile(workspacePath.removeFirstSegments(path.segmentCount()));
-					return resource.getPathVariableManager();
-				}
-				path = path.removeLastSegments(1);
-			}
-		}
-		return ResourcesPlugin.getWorkspace().getPathVariableManager();
+		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+		IResource resource = workspaceRoot.findMember(workspacePath);
+		if (resource != null)
+			return resource.getPathVariableManager();
+		return workspaceRoot.getFile(workspacePath).getPathVariableManager();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
index 33d9fc5..761a8d7 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Martin Oberhuber (Wind River) - [210664] descriptionChanged(): ignore LF style
  *     Martin Oberhuber (Wind River) - [233939] findFilesForLocation() with symlinks
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
@@ -22,13 +23,14 @@ import org.eclipse.core.internal.resources.File;
 import org.eclipse.core.internal.utils.*;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
 import org.eclipse.osgi.util.NLS;
 import org.xml.sax.InputSource;
 
 /**
  * Manages the synchronization between the workspace's view and the file system.  
  */
-public class FileSystemResourceManager implements ICoreConstants, IManager {
+public class FileSystemResourceManager implements ICoreConstants, IManager, Preferences.IPropertyChangeListener {
 
 	/**
 	 * The history store is initialized lazily - always use the accessor method
@@ -36,6 +38,8 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	protected IHistoryStore _historyStore;
 	protected Workspace workspace;
 
+	private volatile boolean lightweightAutoRefreshEnabled;
+
 	public FileSystemResourceManager(Workspace workspace) {
 		this.workspace = workspace;
 	}
@@ -49,23 +53,24 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	 * The workspace paths of {@link IResource#HIDDEN} project and resources
 	 * located in {@link IResource#HIDDEN} projects won't be added to the result.
 	 * </p>
+	 * 
 	 */
-	protected ArrayList allPathsForLocation(URI inputLocation) {
+	protected ArrayList<IPath> allPathsForLocation(URI inputLocation) {
 		URI canonicalLocation = FileUtil.canonicalURI(inputLocation);
 		// First, try the canonical version of the inputLocation.
 		// If the inputLocation is different from the canonical version, it will be tried second
-		ArrayList results = allPathsForLocationNonCanonical(canonicalLocation);
+		ArrayList<IPath> results = allPathsForLocationNonCanonical(canonicalLocation);
 		if(results.size()==0 && canonicalLocation!=inputLocation) {
 			results = allPathsForLocationNonCanonical(inputLocation);
 		}
 		return results;
 	}
 	
-	private ArrayList allPathsForLocationNonCanonical(URI inputLocation) {
+	private ArrayList<IPath> allPathsForLocationNonCanonical(URI inputLocation) {
 		URI location = inputLocation;
 		final boolean isFileLocation = EFS.SCHEME_FILE.equals(inputLocation.getScheme());
 		final IWorkspaceRoot root = getWorkspace().getRoot();
-		final ArrayList results = new ArrayList();
+		final ArrayList<IPath> results = new ArrayList<IPath>();
 		if (URIUtil.equals(location, root.getLocationURI())) {
 			//there can only be one resource at the workspace root's location
 			results.add(Path.ROOT);
@@ -78,6 +83,7 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 			URI testLocation = project.getLocationURI();
 			if (testLocation == null)
 				continue;
+			boolean usingAnotherScheme = !inputLocation.getScheme().equals(testLocation.getScheme());
 			// if we are looking for file: locations try to get a file: location for this project
 			if (isFileLocation && !EFS.SCHEME_FILE.equals(testLocation.getScheme()))
 				testLocation = getFileURI(testLocation);
@@ -88,32 +94,71 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 				IPath suffix = new Path(relative.getPath());
 				results.add(project.getFullPath().append(suffix));
 			}
-			ProjectDescription description = ((Project) project).internalGetDescription();
-			if (description == null)
-				continue;
-			HashMap links = description.getLinks();
-			if (links == null)
-				continue;
-			for (Iterator it = links.values().iterator(); it.hasNext();) {
-				LinkDescription link = (LinkDescription) it.next();
-				IResource resource = project.findMember(link.getProjectRelativePath());
-				IPathVariableManager pathMan = resource == null ? project.getPathVariableManager() : resource.getPathVariableManager();
-				testLocation = pathMan.resolveURI(link.getLocationURI());
-				// if we are looking for file: locations try to get a file: location for this link
-				if (isFileLocation && !EFS.SCHEME_FILE.equals(testLocation.getScheme()))
-					testLocation = getFileURI(testLocation);
-				if (testLocation == null)
+			if (usingAnotherScheme) {
+				// if a different scheme is used, we can't use the AliasManager, since the manager
+				// map is stored using the EFS scheme, and not necessarily the SCHEME_FILE 
+				ProjectDescription description = ((Project) project).internalGetDescription();
+				if (description == null)
+					continue;
+				HashMap<IPath,LinkDescription> links = description.getLinks();
+				if (links == null)
 					continue;
-				relative = testLocation.relativize(location);
-				if (!relative.isAbsolute() && !relative.equals(testLocation)) {
-					IPath suffix = new Path(relative.getPath());
-					results.add(project.getFullPath().append(link.getProjectRelativePath()).append(suffix));
+				for (LinkDescription link : links.values()) {
+					IResource resource = project.findMember(link.getProjectRelativePath());
+					IPathVariableManager pathMan = resource == null ? project.getPathVariableManager() : resource.getPathVariableManager();
+					testLocation = pathMan.resolveURI(link.getLocationURI());
+					// if we are looking for file: locations try to get a file: location for this link
+					if (isFileLocation && !EFS.SCHEME_FILE.equals(testLocation.getScheme()))
+						testLocation = getFileURI(testLocation);
+					if (testLocation == null)
+						continue;
+					relative = testLocation.relativize(location);
+					if (!relative.isAbsolute() && !relative.equals(testLocation)) {
+						IPath suffix = new Path(relative.getPath());
+						results.add(project.getFullPath().append(link.getProjectRelativePath()).append(suffix));
+					}
 				}
 			}
 		}
+		try {
+			findLinkedResourcesPaths(inputLocation, results);
+		} catch (CoreException e) {
+			Policy.log(e);
+		}
 		return results;
 	}
 
+	/**
+	 * Asynchronously auto-refresh the requested resource if {@link ResourcesPlugin#PREF_LIGHTWEIGHT_AUTO_REFRESH} is enabled.
+	 * @param target
+	 */
+	private void asyncRefresh(IResource target) {
+		if (lightweightAutoRefreshEnabled)
+			workspace.getRefreshManager().refresh(target);
+	}
+
+	private void findLinkedResourcesPaths(URI inputLocation, final ArrayList<IPath> results) throws CoreException {
+		IPath suffix = null;
+		IFileStore fileStore = EFS.getStore(inputLocation);
+		while (fileStore != null) {
+			IResource[] resources = workspace.getAliasManager().findResources(fileStore);
+			for (int i = 0; i < resources.length; i++) {
+				if (resources[i].isLinked()) {
+					IPath path = resources[i].getFullPath();
+					if (suffix != null)
+						path = path.append(suffix);
+					if (!results.contains(path))
+						results.add(path);
+				}
+			}
+			if (suffix == null)
+				suffix = Path.fromPortableString(fileStore.getName());
+			else
+				suffix = Path.fromPortableString(fileStore.getName()).append(suffix);
+			fileStore = fileStore.getParent();
+		}
+	}
+
 	/** 
 	 * Tries to obtain a file URI for the given URI. Returns <code>null</code> if the file system associated
 	 * to the URI scheme does not map to the local file system. 
@@ -149,6 +194,10 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	 * {@link IContainer#INCLUDE_HIDDEN} flag is not specified (recommended),
 	 * the result will omit any hidden member resources.
 	 * </p>
+	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
 	 * 
 	 * @param location
 	 *        the file system location
@@ -162,14 +211,15 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	 *        {@link IContainer#INCLUDE_HIDDEN}) indicating which members are of
 	 *        interest
 	 */
+	@SuppressWarnings({"rawtypes", "unchecked"})
 	public IResource[] allResourcesFor(URI location, boolean files, int memberFlags) {
 		ArrayList result = allPathsForLocation(location);
 		int count = 0;
 		for (int i = 0, imax = result.size(); i < imax; i++) {
 			//replace the path in the list with the appropriate resource type
-			IResource resource = resourceFor((IPath) result.get(i), files);
+			IResource resource = resourceFor((IPath)result.get(i), files);
 
-			if (resource == null || (((memberFlags & IContainer.INCLUDE_HIDDEN) == 0) && resource.isHidden(IResource.CHECK_ANCESTORS)) 
+			if (resource == null || ((Resource) resource).isFiltered() || (((memberFlags & IContainer.INCLUDE_HIDDEN) == 0) && resource.isHidden(IResource.CHECK_ANCESTORS)) 
 					|| (((memberFlags & IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS) == 0) && resource.isTeamPrivateMember(IResource.CHECK_ANCESTORS)))
 				resource = null;
 
@@ -206,10 +256,42 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	 * <code>IProject</code> is returned.  Otherwise, the returned object
 	 * is a <code>IFolder</code>.  This method does NOT check the existence
 	 * of a folder in the given location. Location cannot be null.
+	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters. If all resources 
+	 * are omitted, the result may be null.
+	 * </p>
 	 */
 	public IContainer containerForLocation(IPath location) {
-		IPath path = pathForLocation(location);
-		return path == null ? null : (IContainer) resourceFor(path, false);
+		return (IContainer) resourceForLocation(location, false); 
+	}
+
+	/**
+	 * Returns the resource corresponding to the given location.  The
+	 * "files" parameter is used for paths of two or more segments.  If true,
+	 * a file is returned, otherwise a folder is returned.  Returns null if files is true
+	 * and the path is not of sufficient length. Also returns null if the resource is 
+	 * filtered out by resource filters
+	 */
+	private IResource resourceForLocation(IPath location, boolean files) {
+		if (workspace.getRoot().getLocation().equals(location)) {
+			if (!files)
+				return resourceFor(Path.ROOT, false);
+			return null;
+		}
+		IProject[] projects = getWorkspace().getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
+		for (int i = 0; i < projects.length; i++) {
+			IProject project = projects[i];
+			IPath projectLocation = project.getLocation();
+			if (projectLocation != null && projectLocation.isPrefixOf(location)) {
+				int segmentsToRemove = projectLocation.segmentCount();
+				IPath path = project.getFullPath().append(location.removeFirstSegments(segmentsToRemove));
+				IResource resource = resourceFor(path, files);
+				if (resource != null && !((Resource)resource).isFiltered())
+					return resource;
+			}
+		}
+		return null;
 	}
 
 	public void copy(IResource target, IResource destination, int updateFlags, IProgressMonitor monitor) throws CoreException {
@@ -248,7 +330,7 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 			monitor.beginTask(title, deleteWork + refreshWork);
 			monitor.subTask(""); //$NON-NLS-1$
 			MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.FAILED_DELETE_LOCAL, Messages.localstore_deleteProblem, null);
-			List skipList = null;
+			List<Resource> skipList = null;
 			UnifiedTree tree = new UnifiedTree(target);
 			if (!force) {
 				IProgressMonitor sub = Policy.subMonitorFor(monitor, refreshWork);
@@ -380,10 +462,14 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	 * Returns an IFile for the given file system location or null if there
 	 * is no mapping for this path. This method does NOT check the existence
 	 * of a file in the given location. Location cannot be null.
+	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters. If all resources 
+	 * are omitted, the result may be null.
+	 * </p>
 	 */
 	public IFile fileForLocation(IPath location) {
-		IPath path = pathForLocation(location);
-		return path == null ? null : (IFile) resourceFor(path, true);
+		return (IFile) resourceForLocation(location, true);
 	}
 
 	/**
@@ -588,10 +674,14 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 		return projectInfo.getLocalSyncInfo() == getStore(descriptionFile).fetchInfo().getLastModified();
 	}
 
-	/* (non-Javadoc)
+	/**
 	 * Returns true if the given resource is synchronized with the file system
 	 * to the given depth.  Returns false otherwise.
-	 * 
+	 *
+	 * Any discovered out-of-sync resources are scheduled to be brought 
+	 * back in sync, if {@link ResourcesPlugin#PREF_LIGHTWEIGHT_AUTO_REFRESH} is
+	 * enabled.
+	 *
 	 * @see IResource#isSynchronized(int)
 	 */
 	public boolean isSynchronized(IResource target, int depth) {
@@ -628,12 +718,25 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 			Policy.log(e);
 			return false;
 		} catch (IsSynchronizedVisitor.ResourceChangedException e) {
+			// Ask refresh manager to bring out-of-sync resource back into sync when convenient
+			asyncRefresh(e.target);
 			//visitor throws an exception if out of sync
 			return false;
 		}
 		return true;
 	}
 
+	/**
+	 * Check whether the preference {@link ResourcesPlugin#PREF_LIGHTWEIGHT_AUTO_REFRESH} is
+	 * enabled.  When this preference is true the Resources plugin automatically refreshes
+	 * resources which are known to be out-of-sync, and may install lightweight filesystem
+	 * notification hooks.
+	 * @return whether this FSRM is automatically refreshing discovered out-of-sync resources
+	 */
+	public boolean isLightweightAutoRefreshEnabled() {
+		return lightweightAutoRefreshEnabled;
+	}
+
 	public void link(Resource target, URI location, IFileInfo fileInfo) throws CoreException {
 		initializeStore(target, location);
 		ResourceInfo info = target.getResourceInfo(false, true);
@@ -664,39 +767,31 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 		getStore(source).move(destination, EFS.NONE, monitor);
 	}
 
-	/**
-	 * Returns a resource path to the given local location. Returns null if
-	 * it is not under a project's location.
-	 */
-	protected IPath pathForLocation(IPath location) {
-		if (workspace.getRoot().getLocation().equals(location))
-			return Path.ROOT;
-		IProject[] projects = getWorkspace().getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
-		for (int i = 0; i < projects.length; i++) {
-			IProject project = projects[i];
-			IPath projectLocation = project.getLocation();
-			if (projectLocation != null && projectLocation.isPrefixOf(location)) {
-				int segmentsToRemove = projectLocation.segmentCount();
-				return project.getFullPath().append(location.removeFirstSegments(segmentsToRemove));
-			}
-		}
-		return null;
+	public void propertyChange(PropertyChangeEvent event) {
+		if (ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH.equals(event.getProperty()))
+			lightweightAutoRefreshEnabled = (Boolean)Boolean.valueOf(event.getNewValue().toString());
 	}
 
 	public InputStream read(IFile target, boolean force, IProgressMonitor monitor) throws CoreException {
 		IFileStore store = getStore(target);
-		if (!force) {
+		if (lightweightAutoRefreshEnabled || !force) {
 			final IFileInfo fileInfo = store.fetchInfo();
 			if (!fileInfo.exists()) {
-				String message = NLS.bind(Messages.localstore_fileNotFound, store.toString());
-				throw new ResourceException(IResourceStatus.FAILED_READ_LOCAL, target.getFullPath(), message, null);
+				asyncRefresh(target);
+				if (!force) {
+					String message = NLS.bind(Messages.localstore_fileNotFound, store.toString());
+					throw new ResourceException(IResourceStatus.FAILED_READ_LOCAL, target.getFullPath(), message, null);
+				}
 			}
 			ResourceInfo info = ((Resource) target).getResourceInfo(true, false);
 			int flags = ((Resource) target).getFlags(info);
 			((Resource) target).checkExists(flags, true);
 			if (fileInfo.getLastModified() != info.getLocalSyncInfo()) {
-				String message = NLS.bind(Messages.localstore_resourceIsOutOfSync, target.getFullPath());
-				throw new ResourceException(IResourceStatus.OUT_OF_SYNC_LOCAL, target.getFullPath(), message, null);
+				asyncRefresh(target);
+				if (!force) {
+					String message = NLS.bind(Messages.localstore_resourceIsOutOfSync, target.getFullPath());
+					throw new ResourceException(IResourceStatus.OUT_OF_SYNC_LOCAL, target.getFullPath(), message, null);
+				}
 			}
 		}
 		return store.openInputStream(EFS.NONE, monitor);
@@ -768,7 +863,8 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 			if (!isDefaultLocation)
 				description.setLocationURI(projectLocation);
 			if (creation && privateDescription != null)
-				description.setDynamicReferences(privateDescription.getDynamicReferences(false));
+				// Bring dynamic state back to life
+				description.updateDynamicState(privateDescription);
 		}
 		long lastModified = descriptionStore.fetchInfo().getLastModified();
 		IFile descriptionFile = target.getFile(IProjectDescription.DESCRIPTION_FILE_NAME);
@@ -860,7 +956,7 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	}
 
 	/**
-	 * Returns the resource corresponding to the given workspace path.  The 
+	 * Returns the resource corresponding to the given workspace path.  The
 	 * "files" parameter is used for paths of two or more segments.  If true,
 	 * a file is returned, otherwise a folder is returned.  Returns null if files is true
 	 * and the path is not of sufficient length.
@@ -928,10 +1024,13 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 	public void shutdown(IProgressMonitor monitor) throws CoreException {
 		if (_historyStore != null)
 			_historyStore.shutdown(monitor);
+		ResourcesPlugin.getPlugin().getPluginPreferences().removePropertyChangeListener(this);
 	}
 
 	public void startup(IProgressMonitor monitor) throws CoreException {
-		//nothing to do
+		Preferences preferences = ResourcesPlugin.getPlugin().getPluginPreferences();
+		preferences.addPropertyChangeListener(this);
+		lightweightAutoRefreshEnabled = preferences.getBoolean(ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH);
 	}
 
 	/**
@@ -972,10 +1071,12 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 					ResourceInfo info = ((Resource) target).getResourceInfo(true, false);
 					// test if timestamp is the same since last synchronization
 					if (lastModified != info.getLocalSyncInfo()) {
+						asyncRefresh(target);
 						String message = NLS.bind(Messages.localstore_resourceIsOutOfSync, target.getFullPath());
 						throw new ResourceException(IResourceStatus.OUT_OF_SYNC_LOCAL, target.getFullPath(), message, null);
 					}
 					if (!fileInfo.exists()) {
+						asyncRefresh(target);
 						String message = NLS.bind(Messages.localstore_resourceDoesNotExist, target.getFullPath());
 						throw new ResourceException(IResourceStatus.NOT_FOUND_LOCAL, target.getFullPath(), message, null);
 					}
@@ -1058,17 +1159,12 @@ public class FileSystemResourceManager implements ICoreConstants, IManager {
 		try {
 			out = fileStore.openOutputStream(EFS.NONE, null);
 			new ModelObjectWriter().write(desc, out);
+			out.close();
 		} catch (IOException e) {
 			String msg = NLS.bind(Messages.resources_writeMeta, target.getFullPath());
 			throw new ResourceException(IResourceStatus.FAILED_WRITE_METADATA, target.getFullPath(), msg, e);
 		} finally {
-			if (out != null) {
-				try {
-					out.close();
-				} catch (IOException e) {
-					// ignore failure to close stream
-				}
-			}
+			FileUtil.safeClose(out);
 		}
 		//for backwards compatibility, ensure the old .prj file is deleted
 		getWorkspace().getMetaArea().clearOldDescription(target);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryBucket.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryBucket.java
index b43cae0..3775d4b 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryBucket.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryBucket.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
@@ -30,10 +31,8 @@ public class HistoryBucket extends Bucket {
 	 */
 	public static final class HistoryEntry extends Bucket.Entry {
 
-		final static Comparator COMPARATOR = new Comparator() {
-			public int compare(Object o1, Object o2) {
-				byte[] state1 = (byte[]) o1;
-				byte[] state2 = (byte[]) o2;
+		final static Comparator<byte[]> COMPARATOR = new Comparator<byte[]>() {
+			public int compare(byte[] state1, byte[] state2) {
 				return compareStates(state1, state2);
 			}
 		};
@@ -57,7 +56,7 @@ public class HistoryBucket extends Bucket {
 		 * 
 		 * @see Comparator#compare(java.lang.Object, java.lang.Object)
 		 */
-		private static int compareStates(byte[] state1, byte[] state2) {
+		static int compareStates(byte[] state1, byte[] state2) {
 			long timestamp1 = getTimestamp(state1);
 			long timestamp2 = getTimestamp(state2);
 			if (timestamp1 == timestamp2)
@@ -68,7 +67,7 @@ public class HistoryBucket extends Bucket {
 		/**
 		 * Returns the byte array representation of a (UUID, timestamp) pair. 
 		 */
-		private static byte[] getState(UniversalUniqueIdentifier uuid, long timestamp) {
+		static byte[] getState(UniversalUniqueIdentifier uuid, long timestamp) {
 			byte[] uuidBytes = uuid.toBytes();
 			byte[] state = new byte[DATA_LENGTH];
 			System.arraycopy(uuidBytes, 0, state, 0, uuidBytes.length);
@@ -90,7 +89,7 @@ public class HistoryBucket extends Bucket {
 		 * Inserts the given item into the given array at the right position. 
 		 * Returns the resulting array. Returns null if the item already exists. 
 		 */
-		private static byte[][] insert(byte[][] existing, byte[] toAdd) {
+		static byte[][] insert(byte[][] existing, byte[] toAdd) {
 			// look for the right spot where to insert the new guy
 			int index = search(existing, toAdd);
 			if (index >= 0)
@@ -110,7 +109,7 @@ public class HistoryBucket extends Bucket {
 		/**
 		 * Merges two entries (are always sorted). Duplicates are discarded.
 		 */
-		private static byte[][] merge(byte[][] base, byte[][] additions) {
+		static byte[][] merge(byte[][] base, byte[][] additions) {
 			int additionPointer = 0;
 			int basePointer = 0;
 			int added = 0;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryStore2.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryStore2.java
index 0ff2757..c36e286 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryStore2.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/HistoryStore2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ import org.eclipse.core.runtime.*;
 public class HistoryStore2 implements IHistoryStore {
 
 	class HistoryCopyVisitor extends Bucket.Visitor {
-		private List changes = new ArrayList();
+		private List<HistoryEntry> changes = new ArrayList<HistoryEntry>();
 		private IPath destination;
 		private IPath source;
 
@@ -41,13 +41,13 @@ public class HistoryStore2 implements IHistoryStore {
 			if (changes.isEmpty())
 				return;
 			// make effective all changes collected
-			Iterator i = changes.iterator();
-			HistoryEntry entry = (HistoryEntry) i.next();
+			Iterator<HistoryEntry> i = changes.iterator();
+			HistoryEntry entry = i.next();
 			tree.loadBucketFor(entry.getPath());
 			HistoryBucket bucket = (HistoryBucket) tree.getCurrent();
 			bucket.addBlobs(entry);
 			while (i.hasNext())
-				bucket.addBlobs((HistoryEntry) i.next());
+				bucket.addBlobs(i.next());
 			bucket.save();
 		}
 
@@ -62,7 +62,7 @@ public class HistoryStore2 implements IHistoryStore {
 	}
 
 	private BlobStore blobStore;
-	private Set blobsToRemove = new HashSet();
+	private Set<UniversalUniqueIdentifier> blobsToRemove = new HashSet<UniversalUniqueIdentifier>();
 	final BucketTree tree;
 	private Workspace workspace;
 
@@ -100,8 +100,8 @@ public class HistoryStore2 implements IHistoryStore {
 		return new FileState(this, key, lastModified, uuid);
 	}
 
-	public synchronized Set allFiles(IPath root, int depth, IProgressMonitor monitor) {
-		final Set allFiles = new HashSet();
+	public synchronized Set<IPath> allFiles(IPath root, int depth, IProgressMonitor monitor) {
+		final Set<IPath> allFiles = new HashSet<IPath>();
 		try {
 			tree.accept(new Bucket.Visitor() {
 				public int visit(Entry fileEntry) {
@@ -193,7 +193,7 @@ public class HistoryStore2 implements IHistoryStore {
 			blobStore.deleteBlobs(blobsToRemove);
 			if (Policy.DEBUG_HISTORY)
 				Policy.debug("Time to remove " + blobsToRemove.size() + " unreferenced blobs: " + (System.currentTimeMillis() - start) + "ms."); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$			
-			blobsToRemove = new HashSet();
+			blobsToRemove = new HashSet<UniversalUniqueIdentifier>();
 		}
 	}
 
@@ -322,7 +322,7 @@ public class HistoryStore2 implements IHistoryStore {
 
 	public synchronized void remove(IPath root, IProgressMonitor monitor) {
 		try {
-			final Set tmpBlobsToRemove = blobsToRemove;
+			final Set<UniversalUniqueIdentifier> tmpBlobsToRemove = blobsToRemove;
 			tree.accept(new Bucket.Visitor() {
 				public int visit(Entry fileEntry) {
 					for (int i = 0; i < fileEntry.getOccurrences(); i++)
@@ -342,7 +342,7 @@ public class HistoryStore2 implements IHistoryStore {
 	 */
 	public synchronized void removeGarbage() {
 		try {
-			final Set tmpBlobsToRemove = blobsToRemove;
+			final Set<UniversalUniqueIdentifier> tmpBlobsToRemove = blobsToRemove;
 			tree.accept(new Bucket.Visitor() {
 				public int visit(Entry fileEntry) {
 					for (int i = 0; i < fileEntry.getOccurrences(); i++)
@@ -352,7 +352,7 @@ public class HistoryStore2 implements IHistoryStore {
 				}
 			}, Path.ROOT, BucketTree.DEPTH_INFINITE);
 			blobStore.deleteBlobs(blobsToRemove);
-			blobsToRemove = new HashSet();
+			blobsToRemove = new HashSet<UniversalUniqueIdentifier>();
 		} catch (Exception e) {
 			String message = Messages.history_problemsCleaning;
 			ResourceStatus status = new ResourceStatus(IResourceStatus.FAILED_DELETE_LOCAL, null, message, e);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IHistoryStore.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IHistoryStore.java
index be13482..d677525 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IHistoryStore.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IHistoryStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,7 +69,7 @@ public interface IHistoryStore extends IManager {
 	 * @return the set of paths for files that have at least one history entry
 	 *   (element type: <code>IPath</code>)
 	 */
-	public Set allFiles(IPath path, int depth, IProgressMonitor monitor);
+	public Set<IPath> allFiles(IPath path, int depth, IProgressMonitor monitor);
 
 	/**
 	 * Clean this store applying the current policies.
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IsSynchronizedVisitor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IsSynchronizedVisitor.java
index 0960296..57590a1 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IsSynchronizedVisitor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/IsSynchronizedVisitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,25 +7,30 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
 import org.eclipse.core.internal.resources.Resource;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IProgressMonitor;
 
 /**
  * Visits a unified tree, and throws a ResourceChangedException on the first 
  * node that is discovered to be out of sync.  The exception that is thrown 
- * will not have any meaningful status, message, or stack trace.  Nodes 
- * discovered to be out of sync are not brought to be in sync with the workspace.
+ * will not have any meaningful status, message, or stack trace. However it
+ * does contain the target resource which can be used to bring the Resource
+ * back into sync.
  */
 public class IsSynchronizedVisitor extends CollectSyncStatusVisitor {
 	static class ResourceChangedException extends RuntimeException {
 		private static final long serialVersionUID = 1L;
+		public final IResource target;
+		public ResourceChangedException(IResource target) {
+			this.target = target;
+		}
 	}
 
-	protected static ResourceChangedException exception = new ResourceChangedException();
-
 	/**
 	 * Creates a new IsSynchronizedVisitor.
 	 */
@@ -36,7 +41,19 @@ public class IsSynchronizedVisitor extends CollectSyncStatusVisitor {
 	/**
 	 * @see CollectSyncStatusVisitor#changed(Resource)
 	 */
+	@Override
 	protected void changed(Resource target) {
-		throw exception;
+		throw new ResourceChangedException(target);
+	}
+
+	@Override
+	protected void fileToFolder(UnifiedTreeNode node, Resource target) {
+		changed((Resource)workspace.getRoot().getFolder(target.getFullPath()));
+	}
+
+	@Override
+	protected void folderToFile(UnifiedTreeNode node, Resource target) {
+		// Pass correct gender to changed for notification and async-refresh
+		changed((Resource)workspace.getRoot().getFile(target.getFullPath()));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeChunkyOutputStream.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeChunkyOutputStream.java
index 97e2258..3a3c5bf 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeChunkyOutputStream.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeChunkyOutputStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,10 +7,12 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
 import java.io.*;
+import org.eclipse.core.internal.utils.FileUtil;
 
 /**
  * Appends data, in chunks, to a file. Each chunk is defined by the moment
@@ -63,9 +65,10 @@ public class SafeChunkyOutputStream extends FilterOutputStream {
 	public void succeed() throws IOException {
 		try {
 			endChunk();
+			close();
 		} finally {
 			isOpen = false;
-			close();
+			FileUtil.safeClose(this);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeFileOutputStream.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeFileOutputStream.java
index 6661501..980e398 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeFileOutputStream.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/SafeFileOutputStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
@@ -86,6 +87,7 @@ public class SafeFileOutputStream extends OutputStream {
 			source = new BufferedInputStream(new FileInputStream(sourceFile));
 			destination = new BufferedOutputStream(new FileOutputStream(destinationFile));
 			transferStreams(source, destination);
+			destination.close();
 		} finally {
 			FileUtil.safeClose(source);
 			FileUtil.safeClose(destination);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java
index 64075af..2a6fee0 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
  *     Martin Oberhuber (Wind River) - [232426] shared prefix histories for symlinks
  *     Serge Beauchamp (Freescale Semiconductor) - [252996] add resource filtering
  *     Martin Oberhuber (Wind River) - [292267] OutOfMemoryError due to leak in UnifiedTree
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.localstore;
 
@@ -33,7 +34,8 @@ public class UnifiedTree {
 	/** special node to mark the separation of a node's children */
 	protected static final UnifiedTreeNode childrenMarker = new UnifiedTreeNode(null, null, null, null, false);
 
-	private static final Iterator EMPTY_ITERATOR = Collections.EMPTY_LIST.iterator();
+	@SuppressWarnings("unchecked")
+	private static final Iterator<UnifiedTreeNode> EMPTY_ITERATOR = Collections.EMPTY_LIST.iterator();
 
 	/** special node to mark the beginning of a level in the tree */
 	protected static final UnifiedTreeNode levelMarker = new UnifiedTreeNode(null, null, null, null, false);
@@ -53,11 +55,11 @@ public class UnifiedTree {
 	protected IFileTree fileTree = null;
 
 	/** Spare node objects available for reuse */
-	protected ArrayList freeNodes = new ArrayList();
+	protected ArrayList<UnifiedTreeNode> freeNodes = new ArrayList<UnifiedTreeNode>();
 	/** tree's actual level */
 	protected int level;
 	/** our queue */
-	protected Queue queue;
+	protected Queue<UnifiedTreeNode> queue;
 
 	/** path prefixes for checking symbolic link cycles */
 	protected PrefixPool pathPrefixHistory, rootPathHistory;
@@ -97,7 +99,7 @@ public class UnifiedTree {
 		initializeQueue();
 		setLevel(0, depth);
 		while (!queue.isEmpty()) {
-			UnifiedTreeNode node = (UnifiedTreeNode) queue.remove();
+			UnifiedTreeNode node = queue.remove();
 			if (isChildrenMarker(node))
 				continue;
 			if (isLevelMarker(node)) {
@@ -245,10 +247,10 @@ public class UnifiedTree {
 			return;
 		//if we're about to change levels, then the children just added
 		//are the last nodes for their level, so add a level marker to the queue
-		UnifiedTreeNode nextNode = (UnifiedTreeNode) queue.peek();
+		UnifiedTreeNode nextNode = queue.peek();
 		if (isChildrenMarker(nextNode))
 			queue.remove();
-		nextNode = (UnifiedTreeNode) queue.peek();
+		nextNode = queue.peek();
 		if (isLevelMarker(nextNode))
 			addElementToQueue(levelMarker);
 	}
@@ -295,7 +297,7 @@ public class UnifiedTree {
 		UnifiedTreeNode node = null;
 		int size = freeNodes.size();
 		if (size > 0) {
-			node = (UnifiedTreeNode) freeNodes.remove(size - 1);
+			node = freeNodes.remove(size - 1);
 			node.reuse(this, resource, store, info, existsWorkspace);
 			return node;
 		}
@@ -303,7 +305,7 @@ public class UnifiedTree {
 		return new UnifiedTreeNode(this, resource, store, info, existsWorkspace);
 	}
 
-	protected Iterator getChildren(UnifiedTreeNode node) {
+	protected Iterator<UnifiedTreeNode> getChildren(UnifiedTreeNode node) {
 		/* if first child is null we need to add node's children to queue */
 		if (node.getFirstChild() == null)
 			addNodeChildrenToQueue(node);
@@ -320,9 +322,9 @@ public class UnifiedTree {
 			return EMPTY_ITERATOR;
 
 		/* create an enumeration with node's children */
-		List result = new ArrayList(10);
+		List<UnifiedTreeNode> result = new ArrayList<UnifiedTreeNode>(10);
 		while (true) {
-			UnifiedTreeNode child = (UnifiedTreeNode) queue.elementAt(index);
+			UnifiedTreeNode child = queue.elementAt(index);
 			if (isChildrenMarker(child))
 				break;
 			result.add(child);
@@ -338,7 +340,12 @@ public class UnifiedTree {
 	protected IFileInfo[] getLocalList(UnifiedTreeNode node) {
 		try {
 			final IFileStore store = node.getStore();
-			IFileInfo[] list = fileTree != null ? fileTree.getChildInfos(store) : store.childInfos(EFS.NONE, null);
+			IFileInfo[] list;
+			if (fileTree != null && (fileTree.getTreeRoot().equals(store) || fileTree.getTreeRoot().isParentOf(store) ))
+				list = fileTree.getChildInfos(store);
+			else
+				list = store.childInfos(EFS.NONE, null);
+			
 			if (list == null || list.length == 0)
 				return NO_CHILDREN;
 			list = ((Resource) node.getResource()).filterChildren(list, false);
@@ -359,12 +366,12 @@ public class UnifiedTree {
 	protected void initializeQueue() {
 		//initialize the queue
 		if (queue == null)
-			queue = new Queue(100, false);
+			queue = new Queue<UnifiedTreeNode>(100, false);
 		else
 			queue.reset();
 		//initialize the free nodes list
 		if (freeNodes == null)
-			freeNodes = new ArrayList(100);
+			freeNodes = new ArrayList<UnifiedTreeNode>(100);
 		else
 			freeNodes.clear();
 		addRootToQueue();
@@ -511,6 +518,7 @@ public class UnifiedTree {
 	 * Sorts the given array of strings in place.  This is
 	 * not using the sorting framework to avoid casting overhead.
 	 */
+	@SuppressWarnings("unchecked")
 	protected void quickSort(IFileInfo[] infos, int left, int right) {
 		int originalLeft = left;
 		int originalRight = right;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java
index e119907..764748b 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/UnifiedTreeNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,9 +46,9 @@ public class UnifiedTreeNode implements ILocalStoreConstants {
 	}
 
 	/**
-	 * Returns an Iterator of UnifiedTreeNode.
+	 * Returns an iterator of this node's children.
 	 */
-	public Iterator getChildren() {
+	public Iterator<UnifiedTreeNode> getChildren() {
 		return tree.getChildren(this);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/IPropertyManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/IPropertyManager.java
index 42f25bf..69bae55 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/IPropertyManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/IPropertyManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,5 +71,5 @@ public interface IPropertyManager extends IManager {
 	 * all properties defined for the given resource. In case no properties can 
 	 * be found, returns an empty map. 
 	 */
-	public Map getProperties(IResource resource) throws CoreException;
+	public Map<QualifiedName, String> getProperties(IResource resource) throws CoreException;
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyBucket.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyBucket.java
index 24e6995..0fc6b02 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyBucket.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyBucket.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,10 +22,10 @@ import org.eclipse.osgi.util.NLS;
 public class PropertyBucket extends Bucket {
 	public static class PropertyEntry extends Entry {
 
-		private final static Comparator COMPARATOR = new Comparator() {
-			public int compare(Object o1, Object o2) {
-				int qualifierComparison = ((String[]) o1)[0].compareTo(((String[]) o2)[0]);
-				return qualifierComparison != 0 ? qualifierComparison : ((String[]) o1)[1].compareTo(((String[]) o2)[1]);
+		private final static Comparator<String[]> COMPARATOR = new Comparator<String[]>() {
+			public int compare(String[] o1, String[] o2) {
+				int qualifierComparison = o1[0].compareTo(o2[0]);
+				return qualifierComparison != 0 ? qualifierComparison : o1[1].compareTo(o2[1]);
 			}
 		};
 		private static final String[][] EMPTY_DATA = new String[0][];
@@ -170,11 +170,11 @@ public class PropertyBucket extends Bucket {
 			return index < 0 ? null : value[index][2];
 		}
 
-		public Object getPropertyName(int i) {
+		public QualifiedName getPropertyName(int i) {
 			return new QualifiedName(this.value[i][0], this.value[i][1]);
 		}
 
-		public Object getPropertyValue(int i) {
+		public String getPropertyValue(int i) {
 			return this.value[i][2];
 		}
 
@@ -210,7 +210,7 @@ public class PropertyBucket extends Bucket {
 	 */
 	private static final byte VERSION = 1;
 
-	private final List qualifierIndex = new ArrayList();
+	private final List<String> qualifierIndex = new ArrayList<String>();
 
 	public PropertyBucket() {
 		super();
@@ -270,7 +270,7 @@ public class PropertyBucket extends Bucket {
 					qualifierIndex.add(properties[j][0]);
 					break;
 				case INDEX :
-					properties[j][0] = (String) qualifierIndex.get(source.readInt());
+					properties[j][0] = qualifierIndex.get(source.readInt());
 					break;
 				default :
 					//if we get here the properties file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyManager2.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyManager2.java
index 5dc3a6b..d6cf156 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyManager2.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/properties/PropertyManager2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ public class PropertyManager2 implements IPropertyManager {
 	private static final int MAX_VALUE_SIZE = 2 * 1024;
 
 	class PropertyCopyVisitor extends Bucket.Visitor {
-		private List changes = new ArrayList();
+		private List<PropertyEntry> changes = new ArrayList<PropertyEntry>();
 		private IPath destination;
 		private IPath source;
 
@@ -49,12 +49,12 @@ public class PropertyManager2 implements IPropertyManager {
 			if (changes.isEmpty())
 				return;
 			// make effective all changes collected
-			Iterator i = changes.iterator();
-			PropertyEntry entry = (PropertyEntry) i.next();
+			Iterator<PropertyEntry> i = changes.iterator();
+			PropertyEntry entry = i.next();
 			tree.loadBucketFor(entry.getPath());
 			bucket.setProperties(entry);
 			while (i.hasNext())
-				bucket.setProperties((PropertyEntry) i.next());
+				bucket.setProperties(i.next());
 			bucket.save();
 		}
 
@@ -111,8 +111,8 @@ public class PropertyManager2 implements IPropertyManager {
 		deleteProperties(target, IResource.DEPTH_INFINITE);
 	}
 
-	public synchronized Map getProperties(IResource target) throws CoreException {
-		final Map result = new HashMap();
+	public synchronized Map<QualifiedName, String> getProperties(IResource target) throws CoreException {
+		final Map<QualifiedName, String> result = new HashMap<QualifiedName, String>();
 		tree.accept(new PropertyBucket.Visitor() {
 			public int visit(Entry entry) {
 				PropertyEntry propertyEntry = (PropertyEntry) entry;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/StringMatcher.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/StringMatcher.java
index 4f31c62..98cf416 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/StringMatcher.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/propertytester/StringMatcher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,7 +151,7 @@ public class StringMatcher {
 			}
 		}
 
-		ArrayList temp = new ArrayList();
+		ArrayList<String> temp = new ArrayList<String>();
 
 		int pos = 0;
 		StringBuffer buf = new StringBuffer();
@@ -195,7 +195,7 @@ public class StringMatcher {
 			temp.add(buf.toString());
 			bound += buf.length();
 		}
-		segments = (String[]) temp.toArray(new String[temp.size()]);
+		segments = temp.toArray(new String[temp.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/MonitorManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/MonitorManager.java
index 02494ff..2740490 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/MonitorManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/MonitorManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,10 +7,12 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.refresh;
 
 import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.core.internal.events.ILifecycleListener;
 import org.eclipse.core.internal.events.LifecycleEvent;
 import org.eclipse.core.internal.resources.Workspace;
@@ -44,7 +46,7 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 	/**
 	 * A mapping of monitors to a list of resources each monitor is responsible for.
 	 */
-	protected final Map registeredMonitors;
+	protected final Map<IRefreshMonitor, List<IResource>> registeredMonitors;
 	/**
 	 * Reference to the workspace.
 	 */
@@ -53,7 +55,7 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 	public MonitorManager(IWorkspace workspace, RefreshManager refreshManager) {
 		this.workspace = workspace;
 		this.refreshManager = refreshManager;
-		registeredMonitors = Collections.synchronizedMap(new HashMap(10));
+		registeredMonitors = Collections.synchronizedMap(new HashMap<IRefreshMonitor, List<IResource>>(10));
 		pollMonitor = new PollingMonitor(refreshManager);
 	}
 
@@ -69,7 +71,7 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 			return providers;
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_REFRESH_PROVIDERS);
 		IConfigurationElement[] infos = extensionPoint.getConfigurationElements();
-		List providerList = new ArrayList(infos.length);
+		List<RefreshProvider> providerList = new ArrayList<RefreshProvider>(infos.length);
 		for (int i = 0; i < infos.length; i++) {
 			IConfigurationElement configurationElement = infos[i];
 			RefreshProvider provider = null;
@@ -81,7 +83,7 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 			if (provider != null)
 				providerList.add(provider);
 		}
-		providers = (RefreshProvider[]) providerList.toArray(new RefreshProvider[providerList.size()]);
+		providers = providerList.toArray(new RefreshProvider[providerList.size()]);
 		return providers;
 	}
 
@@ -89,8 +91,8 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 	 * Collects the set of root resources that required monitoring. This
 	 * includes projects and all linked resources.
 	 */
-	private List getResourcesToMonitor() {
-		final List resourcesToMonitor = new ArrayList(10);
+	private List<IResource> getResourcesToMonitor() {
+		final List<IResource> resourcesToMonitor = new ArrayList<IResource>(10);
 		IProject[] projects = workspace.getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
 		for (int i = 0; i < projects.length; i++) {
 			if (!projects[i].isAccessible())
@@ -120,8 +122,8 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 
 	private boolean isMonitoring(IResource resource) {
 		synchronized (registeredMonitors) {
-			for (Iterator i = registeredMonitors.keySet().iterator(); i.hasNext();) {
-				List resources = (List) registeredMonitors.get(i.next());
+			for (Iterator<IRefreshMonitor> i = registeredMonitors.keySet().iterator(); i.hasNext();) {
+				List<IResource> resources = registeredMonitors.get(i.next());
 				if ((resources != null) && (resources.contains(resource)))
 					return true;
 			}
@@ -161,15 +163,15 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 		if (registeredMonitors == null || monitor == null)
 			return;
 		if (resource == null) {
-			List resources = (List) registeredMonitors.get(monitor);
+			List<IResource> resources = registeredMonitors.get(monitor);
 			if (resources == null || resources.isEmpty()) {
 				registeredMonitors.remove(monitor);
 				return;
 			}
 			// synchronized: protect the collection during iteration
 			synchronized (registeredMonitors) {
-				for (Iterator i = resources.iterator(); i.hasNext();) {
-					resource = (IResource) i.next();
+				for (Iterator<IResource> i = resources.iterator(); i.hasNext();) {
+					resource = i.next();
 					pollMonitor.monitor(resource);
 					registerMonitor(pollMonitor, resource);
 				}
@@ -189,10 +191,10 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 		if (registeredMonitors.isEmpty())
 			return;
 		String variableName = event.getVariableName();
-		Set invalidResources = new HashSet();
-		for (Iterator i = registeredMonitors.values().iterator(); i.hasNext();) {
-			for (Iterator j = ((List) i.next()).iterator(); j.hasNext();) {
-				IResource resource = (IResource) j.next();
+		Set<IResource> invalidResources = new HashSet<IResource>();
+		for (Iterator<List<IResource>> i = registeredMonitors.values().iterator(); i.hasNext();) {
+			for (Iterator<IResource> j = i.next().iterator(); j.hasNext();) {
+				IResource resource = j.next();
 				IPath rawLocation = resource.getRawLocation();
 				if (rawLocation != null) {
 					if (rawLocation.segmentCount() > 0 && variableName.equals(rawLocation.segment(0)) && !invalidResources.contains(resource)) {
@@ -202,8 +204,8 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 			}
 		}
 		if (!invalidResources.isEmpty()) {
-			for (Iterator i = invalidResources.iterator(); i.hasNext();) {
-				IResource resource = (IResource) i.next();
+			for (Iterator<IResource> i = invalidResources.iterator(); i.hasNext();) {
+				IResource resource = i.next();
 				unmonitor(resource);
 				monitor(resource);
 			}
@@ -213,9 +215,9 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 	private void registerMonitor(IRefreshMonitor monitor, IResource resource) {
 		// synchronized: protect the collection during add
 		synchronized (registeredMonitors) {
-			List resources = (List) registeredMonitors.get(monitor);
+			List<IResource> resources = registeredMonitors.get(monitor);
 			if (resources == null) {
-				resources = new ArrayList(1);
+				resources = new ArrayList<IResource>(1);
 				registeredMonitors.put(monitor, resources);
 			}
 			if (!resources.contains(resource))
@@ -228,7 +230,7 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 	private void removeMonitor(IRefreshMonitor monitor, IResource resource) {
 		// synchronized: protect the collection during remove
 		synchronized (registeredMonitors) {
-			List resources = (List) registeredMonitors.get(monitor);
+			List<IResource> resources = registeredMonitors.get(monitor);
 			if (resources != null && !resources.isEmpty())
 				resources.remove(resource);
 			else
@@ -257,8 +259,8 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 	 */
 	public void start() {
 		boolean refreshNeeded = false;
-		for (Iterator i = getResourcesToMonitor().iterator(); i.hasNext();)
-			refreshNeeded |= !monitor((IResource) i.next());
+		for (Iterator<IResource> i = getResourcesToMonitor().iterator(); i.hasNext();)
+			refreshNeeded |= !monitor(i.next());
 		workspace.getPathVariableManager().addChangeListener(this);
 		workspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
 		//adding the lifecycle listener twice does no harm
@@ -279,8 +281,8 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 		workspace.getPathVariableManager().removeChangeListener(this);
 		// synchronized: protect the collection during iteration
 		synchronized (registeredMonitors) {
-			for (Iterator i = registeredMonitors.keySet().iterator(); i.hasNext();) {
-				IRefreshMonitor monitor = (IRefreshMonitor) i.next();
+			for (Iterator<IRefreshMonitor> i = registeredMonitors.keySet().iterator(); i.hasNext();) {
+				IRefreshMonitor monitor = i.next();
 				monitor.unmonitor(null);
 			}
 		}
@@ -294,11 +296,11 @@ class MonitorManager implements ILifecycleListener, IPathVariableChangeListener,
 		if (resource == null || !isMonitoring(resource))
 			return;
 		synchronized (registeredMonitors) {
-			for (Iterator i = registeredMonitors.entrySet().iterator(); i.hasNext();) {
-				Map.Entry current = (Map.Entry) i.next();
-				List resources = (List) current.getValue();
+			for (Iterator<Entry<IRefreshMonitor, List<IResource>>> i = registeredMonitors.entrySet().iterator(); i.hasNext();) {
+				Entry<IRefreshMonitor, List<IResource>> current = i.next();
+				List<IResource> resources = current.getValue();
 				if ((resources != null) && !resources.isEmpty() && resources.contains(resource)) {
-					((IRefreshMonitor) current.getKey()).unmonitor(resource);
+					current.getKey().unmonitor(resource);
 					resources.remove(resource);
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/PollingMonitor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/PollingMonitor.java
index 63a57bd..ff41209 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/PollingMonitor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/PollingMonitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.refresh;
 
@@ -48,11 +49,11 @@ public class PollingMonitor extends Job implements IRefreshMonitor {
 	/**
 	 * The roots of resources which should be polled
 	 */
-	private final ArrayList resourceRoots;
+	private final ArrayList<IResource> resourceRoots;
 	/**
 	 * The resources remaining to be refreshed in this iteration
 	 */
-	private final ArrayList toRefresh;
+	private final ArrayList<IResource> toRefresh;
 	/**
 	 * The root that has most recently been out of sync
 	 */
@@ -76,8 +77,8 @@ public class PollingMonitor extends Job implements IRefreshMonitor {
 		this.refreshManager = manager;
 		setPriority(Job.DECORATE);
 		setSystem(true);
-		resourceRoots = new ArrayList();
-		toRefresh = new ArrayList();
+		resourceRoots = new ArrayList<IResource>();
+		toRefresh = new ArrayList<IResource>();
 	}
 
 	/**
@@ -128,7 +129,7 @@ public class PollingMonitor extends Job implements IRefreshMonitor {
 		while (!toRefresh.isEmpty()) {
 			if (monitor.isCanceled())
 				break;
-			poll((IResource) toRefresh.remove(toRefresh.size() - 1));
+			poll(toRefresh.remove(toRefresh.size() - 1));
 			//stop the iteration if we have exceed maximum duration
 			if (System.currentTimeMillis() - loopStart > MAX_DURATION)
 				break;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshJob.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshJob.java
index 6078251..c4a8d3b 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshJob.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2010 IBM Corporation and others.
+ *  Copyright (c) 2004, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  *  Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.refresh;
 
@@ -33,7 +34,7 @@ public class RefreshJob extends WorkspaceJob {
 	 * or the end of the list depending on whether they are explicit user
 	 * requests or background refresh requests.
 	 */
-	private final List fRequests;
+	private final List<IResource> fRequests;
 
 	/**
 	 * The history of path prefixes visited during this refresh job invocation.
@@ -43,7 +44,7 @@ public class RefreshJob extends WorkspaceJob {
 
 	public RefreshJob() {
 		super(Messages.refresh_jobName);
-		fRequests = new ArrayList(1);
+		fRequests = new ArrayList<IResource>(1);
 	}
 
 	/**
@@ -53,8 +54,8 @@ public class RefreshJob extends WorkspaceJob {
 	 */
 	private synchronized void addRequest(IResource resource) {
 		IPath toAdd = resource.getFullPath();
-		for (Iterator it = fRequests.iterator(); it.hasNext();) {
-			IPath request = ((IResource) it.next()).getFullPath();
+		for (Iterator<IResource> it = fRequests.iterator(); it.hasNext();) {
+			IPath request = it.next().getFullPath();
 			//discard any existing requests the same or below the resource to be added
 			if (toAdd.isPrefixOf(request))
 				it.remove();
@@ -66,7 +67,7 @@ public class RefreshJob extends WorkspaceJob {
 		fRequests.add(resource);
 	}
 
-	private synchronized void addRequests(List list) {
+	private synchronized void addRequests(List<IResource> list) {
 		//add requests to the end of the queue
 		fRequests.addAll(0, list);
 	}
@@ -82,7 +83,7 @@ public class RefreshJob extends WorkspaceJob {
 	 * This method adds all members at the specified depth from the resource
 	 * to the provided list.
 	 */
-	private List collectChildrenToDepth(IResource resource, ArrayList children, int depth) {
+	private List<IResource> collectChildrenToDepth(IResource resource, ArrayList<IResource> children, int depth) {
 		if (resource.getType() == IResource.FILE)
 			return children;
 		IResource[] members;
@@ -129,7 +130,7 @@ public class RefreshJob extends WorkspaceJob {
 		int len = fRequests.size();
 		if (len == 0)
 			return null;
-		return (IResource) fRequests.remove(len - 1);
+		return fRequests.remove(len - 1);
 	}
 
 	/* (non-Javadoc)
@@ -182,7 +183,7 @@ public class RefreshJob extends WorkspaceJob {
 						}
 						longestRefresh = 0;
 					}
-					addRequests(collectChildrenToDepth(toRefresh, new ArrayList(), depth));
+					addRequests(collectChildrenToDepth(toRefresh, new ArrayList<IResource>(), depth));
 				} catch (CoreException e) {
 					errors.merge(new Status(IStatus.ERROR, ResourcesPlugin.PI_RESOURCES, 1, errors.getMessage(), e));
 				}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshManager.java
index 4d01c5e..ec0ebb5 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/refresh/RefreshManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,8 +15,7 @@ import org.eclipse.core.internal.utils.Policy;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.resources.refresh.IRefreshMonitor;
 import org.eclipse.core.resources.refresh.IRefreshResult;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
 
 /**
@@ -27,6 +26,7 @@ import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
  * @since 3.0
  */
 public class RefreshManager implements IRefreshResult, IManager, Preferences.IPropertyChangeListener {
+
 	public static boolean DEBUG = Policy.DEBUG_AUTO_REFRESH;
 	public static final String DEBUG_PREFIX = "Auto-refresh: "; //$NON-NLS-1$
 	MonitorManager monitors;
@@ -66,7 +66,7 @@ public class RefreshManager implements IRefreshResult, IManager, Preferences.IPr
 
 	/**
 	 * Checks for changes to the PREF_AUTO_UPDATE property.
-	 * @see Preferences.IPropertyChangeListener#propertyChange(Preferences.PropertyChangeEvent)
+	 * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(Preferences.PropertyChangeEvent)
 	 */
 	public void propertyChange(PropertyChangeEvent event) {
 		String property = event.getProperty();
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/AliasManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/AliasManager.java
index a258cd7..54d2157 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/AliasManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/AliasManager.java
@@ -13,7 +13,7 @@
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
-import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 
 import java.net.URI;
 import java.util.*;
@@ -53,13 +53,13 @@ import org.eclipse.osgi.util.NLS;
  */
 public class AliasManager implements IManager, ILifecycleListener, IResourceChangeListener {
 	public class AddToCollectionDoit implements Doit {
-		Collection collection;
+		Collection<IResource> collection;
 
 		public void doit(IResource resource) {
 			collection.add(resource);
 		}
 
-		public void setCollection(Collection collection) {
+		public void setCollection(Collection<IResource> collection) {
 			this.collection = collection;
 		}
 	}
@@ -124,7 +124,7 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 		/**
 		 * Map of FileStore->IResource OR FileStore->ArrayList of (IResource)
 		 */
-		private final SortedMap map = new TreeMap(getComparator());
+		private final SortedMap<IFileStore, Object> map = new TreeMap<IFileStore,Object>(getComparator());
 
 		/**
 		 * Adds the given resource to the map, keyed by the given location.
@@ -139,13 +139,14 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 			if (oldValue instanceof IResource) {
 				if (resource.equals(oldValue))
 					return false;//duplicate
-				ArrayList newValue = new ArrayList(2);
+				ArrayList<Object> newValue = new ArrayList<Object>(2);
 				newValue.add(oldValue);
 				newValue.add(resource);
 				map.put(location, newValue);
 				return true;
 			}
-			ArrayList list = (ArrayList) oldValue;
+			@SuppressWarnings("unchecked")
+			ArrayList<IResource> list = (ArrayList<IResource>) oldValue;
 			if (list.contains(resource))
 				return false;//duplicate
 			list.add(resource);
@@ -164,7 +165,7 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 		 * given location as a prefix.
 		 */
 		public void matchingPrefixDo(IFileStore prefix, Doit doit) {
-			SortedMap matching;
+			SortedMap<IFileStore, Object> matching;
 			IFileStore prefixParent = prefix.getParent();
 			if (prefixParent != null) {
 				//endPoint is the smallest possible path greater than the prefix that doesn't
@@ -174,14 +175,15 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 			} else {
 				matching = map;
 			}
-			for (Iterator it = matching.values().iterator(); it.hasNext();) {
+			for (Iterator<Object> it = matching.values().iterator(); it.hasNext();) {
 				Object value = it.next();
 				if (value == null)
 					return;
 				if (value instanceof List) {
-					Iterator duplicates = ((List) value).iterator();
+					@SuppressWarnings("unchecked")
+					Iterator<IResource> duplicates = ((List<IResource>) value).iterator();
 					while (duplicates.hasNext())
-						doit.doit((IResource) duplicates.next());
+						doit.doit(duplicates.next());
 				} else {
 					doit.doit((IResource) value);
 				}
@@ -197,9 +199,10 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 			if (value == null)
 				return;
 			if (value instanceof List) {
-				Iterator duplicates = ((List) value).iterator();
+				@SuppressWarnings("unchecked")
+				Iterator<IResource> duplicates = ((List<IResource>) value).iterator();
 				while (duplicates.hasNext())
-					doit.doit((IResource) duplicates.next());
+					doit.doit(duplicates.next());
 			} else {
 				doit.doit((IResource) value);
 			}
@@ -210,20 +213,21 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 		 * whose location overlaps another resource in the map.
 		 */
 		public void overLappingResourcesDo(Doit doit) {
-			Iterator entries = map.entrySet().iterator();
+			Iterator<Map.Entry<IFileStore,Object>> entries = map.entrySet().iterator();
 			IFileStore previousStore = null;
 			IResource previousResource = null;
 			while (entries.hasNext()) {
-				Map.Entry current = (Map.Entry) entries.next();
+				Map.Entry<IFileStore,Object> current = entries.next();
 				//value is either single resource or List of resources
-				IFileStore currentStore = (IFileStore) current.getKey();
+				IFileStore currentStore = current.getKey();
 				IResource currentResource = null;
 				Object value = current.getValue();
 				if (value instanceof List) {
 					//if there are several then they're all overlapping
-					Iterator duplicates = ((List) value).iterator();
+					@SuppressWarnings("unchecked")
+					Iterator<IResource> duplicates = ((List<IResource>) value).iterator();
 					while (duplicates.hasNext())
-						doit.doit(((IResource) duplicates.next()).getProject());
+						doit.doit(duplicates.next().getProject());
 				} else {
 					//value is a single resource
 					currentResource = (IResource) value;
@@ -265,7 +269,8 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 				}
 				return false;
 			}
-			ArrayList list = (ArrayList) oldValue;
+			@SuppressWarnings("unchecked")
+			ArrayList<IResource> list = (ArrayList<IResource>) oldValue;
 			boolean wasRemoved = list.remove(resource);
 			if (list.size() == 0)
 				map.remove(location);
@@ -281,20 +286,20 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 	/**
 	 * The set of IProjects that have aliases.
 	 */
-	protected final Set aliasedProjects = new HashSet();
+	protected final Set<IResource> aliasedProjects = new HashSet<IResource>();
 
 	/**
 	 * A temporary set of aliases.  Used during computeAliases, but maintained
 	 * as a field as an optimization to prevent recreating the set.
 	 */
-	protected final HashSet aliases = new HashSet();
+	protected final HashSet<IResource> aliases = new HashSet<IResource>();
 
 	/**
 	 * The set of resources that have had structure changes that might
 	 * invalidate the locations map or aliased projects set.  These will be
 	 * updated incrementally on the next alias request.
 	 */
-	private final Set changedLinks = new HashSet();
+	private final Set<IResource> changedLinks = new HashSet<IResource>();
 
 	/**
 	 * This flag is true when projects have been created or deleted and the
@@ -346,11 +351,10 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 			return;
 		if (description.getLocationURI() != null)
 			nonDefaultResourceCount++;
-		HashMap links = description.getLinks();
+		HashMap<IPath,LinkDescription> links = description.getLinks();
 		if (links == null)
 			return;
-		for (Iterator it = links.values().iterator(); it.hasNext();) {
-			LinkDescription linkDesc = (LinkDescription) it.next();
+		for (LinkDescription linkDesc : links.values()) {
 			IResource link = project.findMember(linkDesc.getProjectRelativePath());
 			if (link != null) {
 				try {
@@ -433,10 +437,24 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 		int size = aliases.size();
 		if (size == 0)
 			return null;
-		return (IResource[]) aliases.toArray(new IResource[size]);
+		return aliases.toArray(new IResource[size]);
 	}
 
 	/**
+	 * Returns all resources pointing to the given location, or an empty array if there are none.
+	 */
+	public IResource[] findResources(IFileStore location) {
+		final ArrayList<IResource> resources = new ArrayList<IResource>();
+		locationsMap.matchingResourcesDo(location, new Doit() {
+			public void doit(IResource resource) {
+				resources.add(resource);
+			}
+		});
+		return resources.toArray(new IResource[0]);
+	}
+
+
+	/**
 	 * Returns all aliases of this resource, and any aliases of subtrees of this
 	 * resource.  Returns null if no aliases are found.
 	 */
@@ -474,11 +492,9 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 	 * strings, with the extra condition that the path separator is ordered
 	 * before all other characters. (Ex: "/foo" < "/foo/zzz" < "/fooaaa").
 	 */
-	private Comparator getComparator() {
-		return new Comparator() {
-			public int compare(Object o1, Object o2) {
-				IFileStore store1 = (IFileStore) o1;
-				IFileStore store2 = (IFileStore) o2;
+	Comparator<IFileStore> getComparator() {
+		return new Comparator<IFileStore>() {
+			public int compare(IFileStore store1, IFileStore store2) {
 				//scheme takes precedence over all else
 				int compare = compareStringOrNull(store1.getFileSystem().getScheme(), store2.getFileSystem().getScheme());
 				if (compare != 0)
@@ -687,9 +703,10 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 		if (aliases.size() == 0)
 			return;
 		FileSystemResourceManager localManager = workspace.getFileSystemManager();
-		HashSet aliasesCopy = (HashSet) aliases.clone();
-		for (Iterator it = aliasesCopy.iterator(); it.hasNext();) {
-			IResource alias = (IResource) it.next();
+		@SuppressWarnings("unchecked")
+		HashSet<IResource> aliasesCopy = (HashSet<IResource>) aliases.clone();
+		for (Iterator<IResource> it = aliasesCopy.iterator(); it.hasNext();) {
+			IResource alias = it.next();
 			monitor.subTask(NLS.bind(Messages.links_updatingDuplicate, alias.getFullPath()));
 			if (alias.getType() == IResource.PROJECT) {
 				if (checkDeletion((Project) alias, location))
@@ -714,8 +731,8 @@ public class AliasManager implements IManager, ILifecycleListener, IResourceChan
 			buildLocationsMap();
 		} else {
 			//incrementally update location map for changed links
-			for (Iterator it = changedLinks.iterator(); it.hasNext();) {
-				IResource resource = (IResource) it.next();
+			for (Iterator<IResource> it = changedLinks.iterator(); it.hasNext();) {
+				IResource resource = it.next();
 				hadChanges = true;
 				if (!resource.isAccessible())
 					continue;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/BuildConfiguration.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/BuildConfiguration.java
new file mode 100644
index 0000000..a1679e8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/BuildConfiguration.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Broadcom Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Broadcom Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.internal.resources;
+
+import org.eclipse.core.resources.IBuildConfiguration;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.PlatformObject;
+
+/**
+ * Concrete implementation of a build configuration.
+ *<p>
+ * This class can both be used as a real build configuration in a project.
+ * As well as the reference to a build configuration in another project.
+ *</p>
+ *<p>
+ * When being used as a reference, core.resources <strong>must</strong> call
+ * {@link #getBuildConfig()} to dereference the build configuration to the
+ * the actual build configuration on the referenced project.
+ *</p>
+ */
+public class BuildConfiguration extends PlatformObject implements IBuildConfiguration {
+
+	/** Project on which this build configuration is set */
+	private final IProject project;
+	/** Unique human readable name of the configuration in the project */
+	private final String name;
+
+	public BuildConfiguration(IProject project) {
+		this(project, IBuildConfiguration.DEFAULT_CONFIG_NAME);
+	}
+
+	public BuildConfiguration(IProject project, String configName) {
+		this.project = project;
+		this.name = configName;
+	}
+
+	/**
+	 * @return the concrete build configuration referred to by this IBuildConfiguration
+	 *         when it's being used as a reference
+	 */
+	public IBuildConfiguration getBuildConfig() throws CoreException {
+		return project.getBuildConfig(name);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see IBuildConfiguration#getName()
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see IBuildConfiguration#getProject()
+	 */
+	public IProject getProject() {
+		return project;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		BuildConfiguration other = (BuildConfiguration) obj;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		if (project == null) {
+			if (other.project != null)
+				return false;
+		} else if (!project.equals(other.project))
+			return false;
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		result = prime * result + ((project == null) ? 0 : project.hashCode());
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		StringBuffer result = new StringBuffer();
+		if (project != null)
+			result.append(project.getName());
+		else
+			result.append("?"); //$NON-NLS-1$
+		result.append(";"); //$NON-NLS-1$
+		if (name != null)
+			result.append(" [").append(name).append(']'); //$NON-NLS-1$
+		else
+			result.append(" [active]"); //$NON-NLS-1$
+		return result.toString();
+	}
+
+	@Override
+	@SuppressWarnings("rawtypes")
+	public Object getAdapter(Class adapter) {
+		if (adapter.isInstance(project))
+			return project;
+		return super.getAdapter(adapter);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetDeltaJob.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetDeltaJob.java
index a4eb64b..2f3e30a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetDeltaJob.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetDeltaJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -42,10 +43,10 @@ public class CharsetDeltaJob extends Job implements IContentTypeManager.IContent
 		boolean isAffected(ResourceInfo info, IPathRequestor requestor);
 	}
 
-	private ThreadLocal disabled = new ThreadLocal();
+	private ThreadLocal<Boolean> disabled = new ThreadLocal<Boolean>();
 
 	private final Bundle systemBundle = Platform.getBundle("org.eclipse.osgi"); //$NON-NLS-1$
-	private Queue work = new Queue();
+	private Queue<ICharsetListenerFilter> work = new Queue<ICharsetListenerFilter>();
 
 	Workspace workspace;
 
@@ -136,7 +137,7 @@ public class CharsetDeltaJob extends Job implements IContentTypeManager.IContent
 
 	private ICharsetListenerFilter removeFromQueue() {
 		synchronized (work) {
-			return (ICharsetListenerFilter) work.remove();
+			return work.remove();
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetManager.java
index b420671..2430344 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/CharsetManager.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -33,7 +34,7 @@ public class CharsetManager implements IManager {
 	 */
 	private class CharsetManagerJob extends Job {
 		private static final int CHARSET_UPDATE_DELAY = 500;
-		private List/*<Map.Entry<IProject, Boolean>>*/ asyncChanges = new ArrayList/*<Map.Entry<IProject, Boolean>>*/();
+		private List<Map.Entry<IProject, Boolean>> asyncChanges = new ArrayList<Map.Entry<IProject, Boolean>>();
 
 		public CharsetManagerJob() {
 			super(Messages.resources_charsetUpdating);
@@ -41,7 +42,7 @@ public class CharsetManager implements IManager {
 			setPriority(Job.INTERACTIVE);
 		}
 
-		public void addChanges(Map/*<IProject, Boolean>*/ newChanges) {
+		public void addChanges(Map<IProject, Boolean> newChanges) {
 			if (newChanges.isEmpty())
 				return;
 			synchronized (asyncChanges) {
@@ -51,9 +52,9 @@ public class CharsetManager implements IManager {
 			schedule(CHARSET_UPDATE_DELAY);
 		}
 
-		public Map.Entry/*<IProject, Boolean>*/ getNextChange() {
+		public Map.Entry<IProject, Boolean> getNextChange() {
 			synchronized (asyncChanges) {
-				return asyncChanges.isEmpty() ? null : (Map.Entry)asyncChanges.remove(asyncChanges.size() - 1);
+				return asyncChanges.isEmpty() ? null : asyncChanges.remove(asyncChanges.size() - 1);
 			}
 		}
 
@@ -69,16 +70,16 @@ public class CharsetManager implements IManager {
 				try {
 					workspace.prepareOperation(rule, monitor);
 					workspace.beginOperation(true);
-					Map.Entry/*<IProject, Boolean>*/ next;
+					Map.Entry<IProject, Boolean> next;
 					while ((next = getNextChange()) != null) {
 						//just exit if the system is shutting down or has been shut down
 						//it is too late to change the workspace at this point anyway
 						if (systemBundle.getState() != Bundle.ACTIVE)
 							return Status.OK_STATUS;
-						IProject project = (IProject)next.getKey();
+						IProject project = next.getKey();
 						try {
 							if (project.isAccessible()) {
-								boolean shouldDisableCharsetDeltaJob = ((Boolean)next.getValue()).booleanValue();
+								boolean shouldDisableCharsetDeltaJob = next.getValue().booleanValue();
 								// flush prefs for non-derived resources
 								flushPreferences(getPreferences(project, false, false, true), shouldDisableCharsetDeltaJob);
 								// flush prefs for derived resources
@@ -152,13 +153,13 @@ public class CharsetManager implements IManager {
 			return resourceChanges;
 		}
 
-		private void processEntryChanges(IResourceDelta projectDelta, Map/*<IProject, Boolean>*/ projectsToSave) {
+		private void processEntryChanges(IResourceDelta projectDelta, Map<IProject, Boolean> projectsToSave) {
 			// check each resource with user-set encoding to see if it has
 			// been moved/deleted or if derived state has been changed
 			IProject currentProject = (IProject) projectDelta.getResource();
 			Preferences projectRegularPrefs = getPreferences(currentProject, false, false, true);
 			Preferences projectDerivedPrefs = getPreferences(currentProject, false, true, true);
-			Map/*<Boolean, String[]>*/ affectedResourcesMap = new HashMap/*<Boolean, String[]>*/();
+			Map<Boolean, String[]> affectedResourcesMap = new HashMap<Boolean, String[]>();
 			try {
 				// no regular preferences for this project
 				if (projectRegularPrefs == null)
@@ -176,9 +177,9 @@ public class CharsetManager implements IManager {
 				Policy.log(new ResourceStatus(IResourceStatus.FAILED_GETTING_CHARSET, currentProject.getFullPath(), message, e));
 				return;
 			}
-			for (Iterator/*<Boolean>*/ it = affectedResourcesMap.keySet().iterator(); it.hasNext();) {
-				Boolean isDerived = (Boolean)it.next();
-				String[] affectedResources = (String[])affectedResourcesMap.get(isDerived);
+			for (Iterator<Boolean> it = affectedResourcesMap.keySet().iterator(); it.hasNext();) {
+				Boolean isDerived = it.next();
+				String[] affectedResources = affectedResourcesMap.get(isDerived);
 				Preferences projectPrefs = isDerived.booleanValue() ? projectDerivedPrefs : projectRegularPrefs;
 				for (int i = 0; i < affectedResources.length; i++) {
 					IResourceDelta memberDelta = projectDelta.findMember(new Path(affectedResources[i]));
@@ -227,7 +228,7 @@ public class CharsetManager implements IManager {
 				return;
 			IResourceDelta[] projectDeltas = delta.getAffectedChildren();
 			// process each project in the delta
-			Map/*<IProject, Boolean>*/ projectsToSave = new HashMap/*<IProject, Boolean>*/();
+			Map<IProject, Boolean> projectsToSave = new HashMap<IProject, Boolean>();
 			for (int i = 0; i < projectDeltas.length; i++)
 				//nothing to do if a project has been added/removed/moved				
 				if (projectDeltas[i].getKind() == IResourceDelta.CHANGED && (projectDeltas[i].getFlags() & IResourceDelta.OPEN) == 0)
@@ -273,19 +274,19 @@ public class CharsetManager implements IManager {
 	public String getCharsetFor(IPath resourcePath, boolean recurse) {
 		Assert.isLegal(resourcePath.segmentCount() >= 1);
 		IProject project = workspace.getRoot().getProject(resourcePath.segment(0));
-
+		
 		Preferences prefs = getPreferences(project, false, false);
 		Preferences derivedPrefs = getPreferences(project, false, true);
-
+		
 		if (prefs == null && derivedPrefs == null)
 			// no preferences found - for performance reasons, short-circuit 
 			// lookup by falling back to workspace's default setting			
 			return recurse ? ResourcesPlugin.getEncoding() : null;
-
+		
 		return internalGetCharsetFor(prefs, derivedPrefs, resourcePath, recurse);
 	}
 
-	private String getKeyFor(IPath resourcePath) {
+	static String getKeyFor(IPath resourcePath) {
 		return resourcePath.segmentCount() > 1 ? resourcePath.removeFirstSegments(1).toString() : PROJECT_KEY;
 	}
 
@@ -364,7 +365,7 @@ public class CharsetManager implements IManager {
 			if (!node.nodeExists(ResourcesPlugin.PI_RESOURCES))
 				return false;
 			node = node.node(ResourcesPlugin.PI_RESOURCES);
-			return node.getBoolean(ProjectPreferences.PREF_SEPARATE_DERIVED_ENCODINGS, false);
+			return node.getBoolean(ResourcesPlugin.PREF_SEPARATE_DERIVED_ENCODINGS, false);
 		} catch (BackingStoreException e) {
 			// nodeExists failed
 			String message = Messages.resources_readingEncoding;
@@ -393,7 +394,7 @@ public class CharsetManager implements IManager {
 				prefsChanged = true;
 			}
 			if (prefsChanged) {
-				Map/*<IProject, Boolean>*/ projectsToSave = new HashMap/*<IProject, Boolean>*/();
+				Map<IProject, Boolean> projectsToSave = new HashMap<IProject, Boolean>();
 				// this is internal change so do not notify charset delta job
 				projectsToSave.put(project, Boolean.TRUE);
 				job.addChanges(projectsToSave);
@@ -470,7 +471,7 @@ public class CharsetManager implements IManager {
 				}
 			}
 			if (prefsChanged) {
-				Map/*<IProject, Boolean>*/ projectsToSave = new HashMap/*<IProject, Boolean>*/();
+				Map<IProject, Boolean> projectsToSave = new HashMap<IProject, Boolean>();
 				// this is internal change so do not notify charset delta job
 				projectsToSave.put(project, Boolean.TRUE);
 				job.addChanges(projectsToSave);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ComputeProjectOrder.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ComputeProjectOrder.java
index 72dcbe8..9c5b200 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ComputeProjectOrder.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ComputeProjectOrder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,17 +7,18 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Broadcom Corporation - ongoing development
  *******************************************************************************/
 
 package org.eclipse.core.internal.resources;
 
 import java.util.*;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspace;
 
 /**
- * Implementation of a sort algorithm for computing the project order. This
- * algorithm handles cycles in the project reference graph in a reasonable way.
+ * Implementation of a sort algorithm for computing the order of vertexes that are part
+ * of a reference graph. This algorithm handles cycles in the graph in a reasonable way.
+ * In 3.7 this class was enhanced to support computing order of a graph containing an
+ * arbitrary type.
  * 
  * @since 2.1
  */
@@ -93,7 +94,7 @@ class ComputeProjectOrder {
 			 * 
 			 * Element type: <code>Vertex</code>
 			 */
-			public List adjacent = new ArrayList(3);
+			public List<Vertex> adjacent = new ArrayList<Vertex>(3);
 
 			/**
 			 * Creates a new vertex with the given id.
@@ -110,14 +111,14 @@ class ComputeProjectOrder {
 		 * 
 		 * Element type: <code>Vertex</code>
 		 */
-		private List vertexList = new ArrayList(100);
+		private List<Vertex> vertexList = new ArrayList<Vertex>(100);
 
 		/**
 		 * Map from id to vertex.
 		 * 
 		 * Key type: <code>Object</code>; value type: <code>Vertex</code>
 		 */
-		private Map vertexMap = new HashMap(100);
+		private Map<Object, Vertex> vertexMap = new HashMap<Object, Vertex>(100);
 
 		/**
 		 * DFS visit time. Non-negative.
@@ -201,8 +202,8 @@ class ComputeProjectOrder {
 			if (initialized) {
 				throw new IllegalArgumentException();
 			}
-			Vertex fromVertex = (Vertex) vertexMap.get(fromId);
-			Vertex toVertex = (Vertex) vertexMap.get(toId);
+			Vertex fromVertex = vertexMap.get(fromId);
+			Vertex toVertex = vertexMap.get(toId);
 			// nip problems with bogus vertexes in the bud
 			if (fromVertex == null) {
 				throw new IllegalArgumentException();
@@ -225,14 +226,14 @@ class ComputeProjectOrder {
 		 * (element type: <code>Object</code>)
 		 * @exception IllegalArgumentException if the graph is not frozen
 		 */
-		public List idsByDFSFinishTime(boolean increasing) {
+		public List<Object> idsByDFSFinishTime(boolean increasing) {
 			if (!initialized) {
 				throw new IllegalArgumentException();
 			}
 			int len = vertexList.size();
 			Object[] r = new Object[len];
-			for (Iterator allV = vertexList.iterator(); allV.hasNext();) {
-				Vertex vertex = (Vertex) allV.next();
+			for (Iterator<Vertex> allV = vertexList.iterator(); allV.hasNext();) {
+				Vertex vertex = allV.next();
 				int f = vertex.finishTime;
 				// note that finish times start at 1, not 0
 				if (increasing) {
@@ -268,15 +269,15 @@ class ComputeProjectOrder {
 		 * <code>Object[]</code>)
 		 * @exception IllegalArgumentException if the graph is not frozen
 		 */
-		public List nonTrivialComponents() {
+		public List<Object[]> nonTrivialComponents() {
 			if (!initialized) {
 				throw new IllegalArgumentException();
 			}
 			// find the roots of each component
 			// Map<Vertex,List<Object>> components
-			Map components = new HashMap();
-			for (Iterator it = vertexList.iterator(); it.hasNext();) {
-				Vertex vertex = (Vertex) it.next();
+			Map<Vertex, List<Object>> components = new HashMap<Vertex, List<Object>>();
+			for (Iterator<Vertex> it = vertexList.iterator(); it.hasNext();) {
+				Vertex vertex = it.next();
 				if (vertex.predecessor == null) {
 					// this vertex is the root of a component
 					// if component is non-trivial we will hit a child
@@ -286,18 +287,18 @@ class ComputeProjectOrder {
 					while (root.predecessor != null) {
 						root = root.predecessor;
 					}
-					List component = (List) components.get(root);
+					List<Object> component = components.get(root);
 					if (component == null) {
-						component = new ArrayList(2);
+						component = new ArrayList<Object>(2);
 						component.add(root.id);
 						components.put(root, component);
 					}
 					component.add(vertex.id);
 				}
 			}
-			List result = new ArrayList(components.size());
-			for (Iterator it = components.values().iterator(); it.hasNext();) {
-				List component = (List) it.next();
+			List<Object[]> result = new ArrayList<Object[]>(components.size());
+			for (Iterator<List<Object>> it = components.values().iterator(); it.hasNext();) {
+				List<Object> component = it.next();
 				if (component.size() > 1) {
 					result.add(component.toArray());
 				}
@@ -373,10 +374,10 @@ class ComputeProjectOrder {
 			// all vertex.predecessor initially null;
 			time = 0;
 			// for a stack, append to the end of an array-based list
-			List stack = new ArrayList(Math.max(1, vertexList.size()));
-			Iterator allAdjacent = null;
+			List<Object> stack = new ArrayList<Object>(Math.max(1, vertexList.size()));
+			Iterator<Vertex> allAdjacent = null;
 			Vertex vertex = null;
-			Iterator allV = vertexList.iterator();
+			Iterator<Vertex> allV = vertexList.iterator();
 			state = NEXT_VERTEX;
 			nextStateLoop: while (true) {
 				switch (state) {
@@ -386,7 +387,7 @@ class ComputeProjectOrder {
 							// all done
 							break nextStateLoop;
 						}
-						Vertex nextVertex = (Vertex) allV.next();
+						Vertex nextVertex = allV.next();
 						if (nextVertex.color == Vertex.WHITE) {
 							stack.add(NEXT_VERTEX_OBJECT);
 							vertex = nextVertex;
@@ -408,7 +409,7 @@ class ComputeProjectOrder {
 						// on entry, "allAdjacent" contains adjacent vertexes to
 						// be visited; "vertex" contains vertex being visited
 						if (allAdjacent.hasNext()) {
-							Vertex adjVertex = (Vertex) allAdjacent.next();
+							Vertex adjVertex = allAdjacent.next();
 							if (adjVertex.color == Vertex.WHITE) {
 								// explore edge from vertex to adjVertex
 								adjVertex.predecessor = vertex;
@@ -435,7 +436,7 @@ class ComputeProjectOrder {
 					case AFTER_NEXTED_DFS_VISIT :
 						// on entry, stack contains "vertex" and "allAjacent"
 						vertex = (Vertex) stack.remove(stack.size() - 1);
-						allAdjacent = (Iterator) stack.remove(stack.size() - 1);
+						allAdjacent = (Iterator<Vertex>) stack.remove(stack.size() - 1);
 						state = NEXT_ADJACENT;
 						continue nextStateLoop;
 				}
@@ -445,46 +446,79 @@ class ComputeProjectOrder {
 	}
 
 	/**
-	 * Sorts the given list of project in a manner that honors the given
-	 * project reference relationships. That is, if project A references project
-	 * B, then the resulting order will list B before A if possible. For graphs
-	 * that do not contain cycles, the result is the same as a conventional
+	 * Data structure for holding the multi-part outcome of
+	 * <code>ComputeVertexOrder.computeVertexOrder</code>.
+	 */
+	static final class VertexOrder {
+		/**
+		 * Creates an instance with the given values.
+		 * @param vertexes initial value of <code>vertexes</code> field
+		 * @param hasCycles initial value of <code>hasCycles</code> field
+		 * @param knots initial value of <code>knots</code> field
+		 */
+		public VertexOrder(Object[] vertexes, boolean hasCycles, Object[][] knots) {
+			this.vertexes = vertexes;
+			this.hasCycles = hasCycles;
+			this.knots = knots;
+		}
+
+		/**
+		 * A list of vertexes ordered so as to honor the reference
+		 * relationships between them wherever possible.
+		 */
+		public Object[] vertexes;
+		/**
+		 * <code>true</code> if any of the vertexes in <code>vertexes</code>
+		 * are involved in non-trivial cycles in the reference graph.
+		 */
+		public boolean hasCycles;
+		/**
+		 * A list of knots in the reference graph. This list is empty if
+		 * the reference graph does not contain cycles. If the reference graph
+		 * contains cycles, each element is a knot of two or more vertexes that
+		 * are involved in a cycle of mutually dependent references.
+		 */
+		public Object[][] knots;
+	}
+
+	/**
+	 * Sorts the given list of vertexes in a manner that honors the given
+	 * reference relationships between them. That is, if A references
+	 * B, then the resulting order will list B before A if possible.
+	 * For graphs that do not contain cycles, the result is the same as a conventional
 	 * topological sort. For graphs containing cycles, the order is based on
 	 * ordering the strongly connected components of the graph. This has the
-	 * effect of keeping each knot of projects together without otherwise
-	 * affecting the order of projects not involved in a cycle. For a graph G,
+	 * effect of keeping each knot of vertexes together without otherwise
+	 * affecting the order of vertexes not involved in a cycle. For a graph G,
 	 * the algorithm performs in O(|G|) space and time.
 	 * <p>
 	 * When there is an arbitrary choice, vertexes are ordered as supplied.
-	 * Arranged projects in descending alphabetical order generally results in
-	 * an order that builds "A" before "Z" when there are no other constraints.
+	 * If there are no constraints on the order of the vertexes, they are returned
+	 * in the reverse order of how they are supplied.
 	 * </p>
 	 * <p> Ref: Cormen, Leiserson, and Rivest <it>Introduction to
 	 * Algorithms</it>, McGraw-Hill, 1990. The strongly-connected-components
 	 * algorithm is in section 23.5.
 	 * </p>
 	 * 
-	 * @param projects a list of projects (element type:
-	 * <code>IProject</code>)
-	 * @param references a list of project references [A,B] meaning that A
-	 * references B (element type: <code>IProject[]</code>)
-	 * @return an object describing the resulting project order
+	 * @param vertexes a list of vertexes
+	 * @param references a list of pairs [A,B] meaning that A references B
+	 * @return an object describing the resulting order
 	 */
-	static IWorkspace.ProjectOrder computeProjectOrder(SortedSet projects, List references) {
+	static VertexOrder computeVertexOrder(SortedSet<? extends Object> vertexes, List<? extends Object[]> references) {
 
 		// Step 1: Create the graph object.
 		final Digraph g1 = new Digraph();
 		// add vertexes
-		for (Iterator it = projects.iterator(); it.hasNext();) {
-			IProject project = (IProject) it.next();
-			g1.addVertex(project);
+		for (Iterator<?> it = vertexes.iterator(); it.hasNext();) {
+			g1.addVertex(it.next());
 		}
 		// add edges
-		for (Iterator it = references.iterator(); it.hasNext();) {
-			IProject[] ref = (IProject[]) it.next();
-			IProject p = ref[0];
-			IProject q = ref[1];
-			// p has a project reference to q
+		for (Iterator<? extends Object[]> it = references.iterator(); it.hasNext();) {
+			Object[] ref = it.next();
+			Object p = ref[0];
+			Object q = ref[1];
+			// p has a reference to q
 			// therefore create an edge from q to p
 			// to cause q to come before p in eventual result
 			g1.addEdge(q, p);
@@ -496,17 +530,16 @@ class ComputeProjectOrder {
 		// interchange "to" and "from" to reverse edges from g1
 		final Digraph g2 = new Digraph();
 		// add vertexes
-		List resortedVertexes = g1.idsByDFSFinishTime(false);
-		for (Iterator it = resortedVertexes.iterator(); it.hasNext();) {
-			final IProject project = (IProject) it.next();
-			g2.addVertex(project);
+		List<Object> resortedVertexes = g1.idsByDFSFinishTime(false);
+		for (Iterator<Object> it = resortedVertexes.iterator(); it.hasNext();) {
+			g2.addVertex(it.next());
 		}
 		// add edges
-		for (Iterator it = references.iterator(); it.hasNext();) {
-			IProject[] ref = (IProject[]) it.next();
-			IProject p = ref[0];
-			IProject q = ref[1];
-			// p has a project reference to q
+		for (Iterator<? extends Object[]> it = references.iterator(); it.hasNext();) {
+			Object[] ref = it.next();
+			Object p = ref[0];
+			Object q = ref[1];
+			// p has a reference to q
 			// therefore create an edge from p to q
 			// N.B. this is the reverse of step 1
 			g2.addEdge(p, q);
@@ -515,29 +548,73 @@ class ComputeProjectOrder {
 
 		// Step 3: Return the vertexes in increasing order of depth-first finish
 		// time in g2
-		List sortedProjectList = g2.idsByDFSFinishTime(true);
-		IProject[] orderedProjects = new IProject[sortedProjectList.size()];
-		sortedProjectList.toArray(orderedProjects);
-		IProject[][] knots;
+		List<Object> sortedVertexList = g2.idsByDFSFinishTime(true);
+		Object[] orderedVertexes = new Object[sortedVertexList.size()];
+		sortedVertexList.toArray(orderedVertexes);
+		Object[][] knots;
 		boolean hasCycles = g2.containsCycles();
 		if (hasCycles) {
-			List knotList = g2.nonTrivialComponents();
-			knots = new IProject[knotList.size()][];
-			// cannot use knotList.toArray(knots) because each knot is Object[]
-			// and we need each to be an IProject[]
-			int k = 0;
-			for (Iterator it = knotList.iterator(); it.hasNext();) {
-				Object[] knot = (Object[]) it.next();
-				IProject[] knotCopy = new IProject[knot.length];
-				for (int i = 0; i < knot.length; i++) {
-					knotCopy[i] = (IProject) knot[i];
+			List<Object[]> knotList = g2.nonTrivialComponents();
+			knots = new Object[knotList.size()][];
+			knotList.toArray(knots);
+		} else {
+			knots = new Object[][] {};
+		}
+		return new VertexOrder(orderedVertexes, hasCycles, knots);
+	}
+
+	static interface VertexFilter {
+		boolean matches(Object vertex);
+	}
+
+	/**
+	 * Given a VertexOrder and a VertexFilter, remove all vertexes
+	 * matching the filter from the ordering.
+	 */
+	static VertexOrder filterVertexOrder(VertexOrder order, VertexFilter filter) {
+		// Optimize common case where nothing is to be filtered
+		// and cache the results of applying the filter
+		int filteredCount = 0;
+		boolean[] filterMatches = new boolean[order.vertexes.length];
+		for (int i = 0; i < order.vertexes.length; i++) {
+			filterMatches[i] = filter.matches(order.vertexes[i]);
+			if (filterMatches[i])
+				filteredCount++;
+		}
+
+		// No vertexes match the filter, so return the order unmodified
+		if (filteredCount == 0) {
+			return order;
+		}
+
+		// Otherwise we need to eliminate mention of vertexes matching the filter
+		// from the list of vertexes
+		Object[] reducedVertexes = new Object[order.vertexes.length - filteredCount];
+		for (int i = 0, j = 0; i < order.vertexes.length; i++) {
+			if (!filterMatches[i]) {
+				reducedVertexes[j] = order.vertexes[i];
+				j++;
+			}
+		}
+
+		// and from the knots list
+		List<Object[]> reducedKnots = new ArrayList<Object[]>(order.knots.length);
+		for (int i = 0; i < order.knots.length; i++) {
+			Object[] knot = order.knots[i];
+			List<Object> knotList = new ArrayList<Object>(knot.length);
+			for (int j = 0; j < knot.length; j++) {
+				Object vertex = knot[j];
+				if (!filter.matches(vertex)) {
+					knotList.add(vertex);
 				}
-				knots[k] = knotCopy;
-				k++;
 			}
-		} else {
-			knots = new IProject[][] {};
+			// Keep knots containing 2 or more vertexes in the specified subset
+			if (knotList.size() > 1) {
+				reducedKnots.add(knotList.toArray());
+			}
 		}
-		return new IWorkspace.ProjectOrder(orderedProjects, hasCycles, knots);
+
+		return new VertexOrder(reducedVertexes, reducedKnots.size() > 0,
+						reducedKnots.toArray(new Object[reducedKnots.size()][]));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Container.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Container.java
index 4d4e436..63aff54 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Container.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Container.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -97,15 +98,15 @@ public abstract class Container extends Resource implements IContainer {
 	/* (non-Javadoc)
 	 * @see IContainer#findMember(String)
 	 */
-	public IResource findMember(String name) {
-		return findMember(name, false);
+	public IResource findMember(String memberPath) {
+		return findMember(memberPath, false);
 	}
 
 	/* (non-Javadoc)
 	 * @see IContainer#findMember(String, boolean)
 	 */
-	public IResource findMember(String name, boolean phantom) {
-		IPath childPath = getFullPath().append(name);
+	public IResource findMember(String memberPath, boolean phantom) {
+		IPath childPath = getFullPath().append(memberPath);
 		ResourceInfo info = workspace.getResourceInfo(childPath, phantom, false);
 		return info == null ? null : workspace.newResource(childPath, info.getType());
 	}
@@ -175,11 +176,11 @@ public abstract class Container extends Resource implements IContainer {
 		Project project = (Project) getProject();
 		ProjectDescription desc = project.internalGetDescription();
 		if (desc != null) {
-			LinkedList/*<FilterDescription>*/ list = desc.getFilter(getProjectRelativePath());
+			LinkedList<FilterDescription> list = desc.getFilter(getProjectRelativePath());
 			if (list != null) {
 				results = new IResourceFilterDescription[list.size()];
 				for (int i = 0; i < list.size(); i++) {
-					results[i] = (FilterDescription) list.get(i);
+					results[i] = list.get(i);
 				}
 				return results;
 			}
@@ -194,7 +195,7 @@ public abstract class Container extends Resource implements IContainer {
 		ProjectDescription desc = ((Project) project).internalGetDescription();
 		if (desc == null)
 			return false;
-		LinkedList/*<FilterDescription>*/ filters = desc.getFilter(getProjectRelativePath());
+		LinkedList<FilterDescription> filters = desc.getFilter(getProjectRelativePath());
 		if ((filters != null) && (filters.size() > 0))
 			return true;
 		return false;
@@ -324,7 +325,7 @@ public abstract class Container extends Resource implements IContainer {
 		IHistoryStore historyStore = getLocalManager().getHistoryStore();
 		IPath basePath = getFullPath();
 		IWorkspaceRoot root = getWorkspace().getRoot();
-		Set deletedFiles = new HashSet();
+		Set<IFile> deletedFiles = new HashSet<IFile>();
 
 		if (depth == IResource.DEPTH_ZERO) {
 			// this folder might have been a file in a past life
@@ -335,17 +336,15 @@ public abstract class Container extends Resource implements IContainer {
 				}
 			}
 		} else {
-			Set allFilePaths = historyStore.allFiles(basePath, depth, monitor);
 			// convert IPaths to IFiles keeping only files that no longer exist
-			for (Iterator it = allFilePaths.iterator(); it.hasNext();) {
-				IPath filePath = (IPath) it.next();
+			for (IPath filePath : historyStore.allFiles(basePath, depth, monitor)) {
 				IFile file = root.getFile(filePath);
 				if (!file.exists()) {
 					deletedFiles.add(file);
 				}
 			}
 		}
-		return (IFile[]) deletedFiles.toArray(new IFile[deletedFiles.size()]);
+		return deletedFiles.toArray(new IFile[deletedFiles.size()]);
 	}
 
 	/** (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ContentDescriptionManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ContentDescriptionManager.java
index 6606270..9e13b05 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ContentDescriptionManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ContentDescriptionManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,11 +7,10 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
-import org.eclipse.core.internal.utils.FileUtil;
-
 import java.io.*;
 import java.util.ArrayList;
 import java.util.List;
@@ -41,7 +40,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 	 * in the resource tree to be flushed. 
 	 */
 	private class FlushJob extends WorkspaceJob {
-		private final List toFlush;
+		private final List<IPath> toFlush;
 		private boolean fullFlush;
 
 		public FlushJob() {
@@ -50,7 +49,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 			setUser(false);
 			setPriority(LONG);
 			setRule(workspace.getRoot());
-			toFlush = new ArrayList(5);
+			toFlush = new ArrayList<IPath>(5);
 		}
 
 		/* (non-Javadoc)
@@ -97,7 +96,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 					if (fullFlush)
 						return null;
 					int size = toFlush.size();
-					return (size == 0) ? null : (IPath[]) toFlush.toArray(new IPath[size]);
+					return (size == 0) ? null : toFlush.toArray(new IPath[size]);
 				} finally {
 					fullFlush = false;
 					toFlush.clear();
@@ -203,7 +202,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 	protected final Bundle systemBundle = Platform.getBundle("org.eclipse.osgi"); //$NON-NLS-1$
 
 	/**
-	 * @see IContentTypeManager.IContentTypeChangeListener#contentTypeChanged(IContentTypeManager.ContentTypeChangeEvent)
+	 * @see org.eclipse.core.runtime.content.IContentTypeManager.IContentTypeChangeListener#contentTypeChanged(IContentTypeManager.ContentTypeChangeEvent)
 	 */
 	public void contentTypeChanged(ContentTypeChangeEvent event) {
 		if (Policy.DEBUG_CONTENT_TYPE)
@@ -301,7 +300,15 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 		return projectContentTypes.getMatcherFor(project);
 	}
 
-	public IContentDescription getDescriptionFor(File file, ResourceInfo info) throws CoreException {
+	/**
+	 * Discovers, and caches, the content description of the requested File.
+	 * @param file to discover the content description for; result cached
+	 * @param info ResourceInfo for the passed in file
+	 * @param inSync boolean flag which indicates if cache can be trusted. If false false don't trust the cache
+	 * @return IContentDescription for the file
+	 * @throws CoreException
+	 */
+	public IContentDescription getDescriptionFor(File file, ResourceInfo info, boolean inSync) throws CoreException {
 		if (ProjectContentTypes.usesContentTypePreferences(file.getFullPath().segment(0)))
 			// caching for project containing project specific settings is not supported
 			return readDescription(file);
@@ -312,7 +319,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 			// the cache is not good, flush it
 			flushJob.schedule(1000);
 		}
-		if (getCacheState() != ABOUT_TO_FLUSH) {
+		if (inSync && getCacheState() != ABOUT_TO_FLUSH) {
 			// first look for the flags in the resource info to avoid looking in the cache
 			// don't need to copy the info because the modified bits are not in the deltas
 			if (info == null)
@@ -333,12 +340,14 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 				info.clear(ICoreConstants.M_CONTENT_CACHE);
 			}
 		}
-		synchronized (this) {
+		if (inSync) {
 			// tries to get a description from the cache	
-			Cache.Entry entry = cache.getEntry(file.getFullPath());
-			if (entry != null && entry.getTimestamp() == getTimestamp(info))
-				// there was a description in the cache, and it was up to date
-				return (IContentDescription) entry.getCached();
+			synchronized (this) {
+				Cache.Entry entry = cache.getEntry(file.getFullPath());
+				if (entry != null && entry.getTimestamp() == getTimestamp(info))
+					// there was a description in the cache, and it was up to date
+					return (IContentDescription) entry.getCached();
+			}
 		}
 			
 			// either we didn't find a description in the cache, or it was not up-to-date - has to be read again
@@ -348,7 +357,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 		synchronized (this) {
 			// tries to get a description from the cache
 			Cache.Entry entry = cache.getEntry(file.getFullPath());
-			if (entry != null && entry.getTimestamp() == getTimestamp(info))
+			if (entry != null && inSync && entry.getTimestamp() == getTimestamp(info))
 				// there was a description in the cache, and it was up to date
 				return (IContentDescription) entry.getCached();
 			
@@ -376,7 +385,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 				entry = cache.addEntry(file.getFullPath(), newDescription, getTimestamp(info));
 			else {
 				// just update the existing entry
-				entry.setTimestamp(info.getContentId());
+				entry.setTimestamp(getTimestamp(info));
 				entry.setCached(newDescription);
 			}
 			return newDescription;
@@ -458,7 +467,7 @@ public class ContentDescriptionManager implements IManager, IRegistryChangeListe
 	public void handleEvent(LifecycleEvent event) {
 		//TODO are these the only events we care about?
 		switch (event.kind) {
-			case LifecycleEvent.PRE_PROJECT_CHANGE :
+			case LifecycleEvent.POST_PROJECT_CHANGE :
 			// if the project changes, its natures may have changed as well (content types may be associated to natures)
 			case LifecycleEvent.PRE_PROJECT_DELETE :
 			// if the project gets deleted, we may get confused if it is recreated again (content ids might match)
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/DelayedSnapshotJob.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/DelayedSnapshotJob.java
index 26948d0..65e1045 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/DelayedSnapshotJob.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/DelayedSnapshotJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,8 +38,15 @@ public class DelayedSnapshotJob extends Job {
 	public IStatus run(IProgressMonitor monitor) {
 		if (monitor.isCanceled())
 			return Status.CANCEL_STATUS;
-		if (ResourcesPlugin.getWorkspace() == null)
+
+		try {
+			ResourcesPlugin.getWorkspace();
+		} catch (IllegalStateException e) {
+			// workspace is null, log it as warning only and return OK_STATUS
+			Policy.log(IStatus.WARNING, null, e);
 			return Status.OK_STATUS;
+		}
+
 		try {
 			return saveManager.save(ISaveContext.SNAPSHOT, null, Policy.monitorFor(null));
 		} catch (CoreException e) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java
index f67c66f..ac46c97 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Group and Project Path Variable Support
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -94,16 +95,6 @@ public class File extends Resource implements IFile {
 		return result;
 	}
 
-	/**
-	 * Checks that this resource is synchronized with the local file system.
-	 */
-	private void checkSynchronized() throws CoreException {
-		if (!isSynchronized(IResource.DEPTH_ZERO)) {
-			String message = NLS.bind(Messages.localstore_resourceIsOutOfSync, getFullPath());
-			throw new ResourceException(IResourceStatus.OUT_OF_SYNC_LOCAL, getFullPath(), message, null);
-		}
-	}
-
 	/* (non-Javadoc)
 	 * @see IFile#create(InputStream, int, IProgressMonitor)
 	 */
@@ -252,7 +243,7 @@ public class File extends Resource implements IFile {
 		if (charset != null || !checkImplicit)
 			return charset;
 		// tries to obtain a description for the file contents
-		IContentDescription description = workspace.getContentDescriptionManager().getDescriptionFor(this, info);
+		IContentDescription description = workspace.getContentDescriptionManager().getDescriptionFor(this, info, true);
 		if (description != null) {
 			String contentCharset = description.getCharset();
 			if (contentCharset != null)
@@ -270,16 +261,21 @@ public class File extends Resource implements IFile {
 		ResourceInfo info = getResourceInfo(false, false);
 		int flags = getFlags(info);
 		checkAccessible(flags);
-		checkSynchronized();
 		checkLocal(flags, DEPTH_ZERO);
-		return workspace.getContentDescriptionManager().getDescriptionFor(this, info);
+		boolean isSynchronized = isSynchronized(IResource.DEPTH_ZERO);
+		// Throw an exception if out-of-sync and not auto-refresh enabled
+		if (!isSynchronized && !getLocalManager().isLightweightAutoRefreshEnabled()) {
+			String message = NLS.bind(Messages.localstore_resourceIsOutOfSync, getFullPath());
+			throw new ResourceException(IResourceStatus.OUT_OF_SYNC_LOCAL, getFullPath(), message, null);
+		}
+		return workspace.getContentDescriptionManager().getDescriptionFor(this, info, isSynchronized);
 	}
 
 	/* (non-Javadoc)
 	 * @see IFile#getContents()
 	 */
 	public InputStream getContents() throws CoreException {
-		return getContents(false);
+		return getContents(getLocalManager().isLightweightAutoRefreshEnabled());
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FileState.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FileState.java
index 4ac454a..8cb6a75 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FileState.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FileState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,13 +7,13 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
 import java.io.*;
 import org.eclipse.core.internal.localstore.IHistoryStore;
-import org.eclipse.core.internal.utils.Messages;
-import org.eclipse.core.internal.utils.UniversalUniqueIdentifier;
+import org.eclipse.core.internal.utils.*;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.content.IContentDescription;
@@ -53,23 +53,15 @@ public class FileState extends PlatformObject implements IFileState {
 		// tries to obtain a description for the file contents
 		IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
 		InputStream contents = new BufferedInputStream(getContents());
-		boolean failed = false;
 		try {
 			IContentDescription description = contentTypeManager.getDescriptionFor(contents, getName(), new QualifiedName[] {IContentDescription.CHARSET});
+			contents.close();
 			return description == null ? null : description.getCharset();
 		} catch (IOException e) {
-			failed = true;
 			String message = NLS.bind(Messages.history_errorContentDescription, getFullPath());		
 			throw new ResourceException(IResourceStatus.FAILED_DESCRIBING_CONTENTS, getFullPath(), message, e);
 		} finally {
-			try {
-				contents.close();
-			} catch (IOException e) {
-				if (!failed) {
-					String message = NLS.bind(Messages.history_errorContentDescription, getFullPath());		
-					throw new ResourceException(IResourceStatus.FAILED_DESCRIBING_CONTENTS, getFullPath(), message, e);
-				}
-			}
+			FileUtil.safeClose(contents);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Filter.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Filter.java
index 589f74a..deea345 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Filter.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Filter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
  *     IBM Corporation - ongoing implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -86,22 +87,22 @@ public class Filter {
 		return (getType() & IResourceFilterDescription.FILES) != 0;
 	}
 
-	public static IFileInfo[] filter(IProject project, LinkedList/*Filter*/includeFilters, LinkedList/*Filter*/excludeFilters, IContainer parent, IFileInfo[] list) throws CoreException {
+	public static IFileInfo[] filter(IProject project, LinkedList<Filter> includeFilters, LinkedList<Filter> excludeFilters, IContainer parent, IFileInfo[] list) throws CoreException {
 		IFileInfo[] result = filterIncludes(project, includeFilters, parent, list);
 		return filterExcludes(project, excludeFilters, parent, result);
 	}
 
-	public static IFileInfo[] filterIncludes(IProject project, LinkedList/*Filter*/filters, IContainer parent, IFileInfo[] list) throws CoreException {
+	public static IFileInfo[] filterIncludes(IProject project, LinkedList<Filter> filters, IContainer parent, IFileInfo[] list) throws CoreException {
 		if (filters.size() > 0) {
 			IFileInfo[] result = new IFileInfo[list.length];
 			int outputIndex = 0;
 
 			for (int i = 0; i < list.length; i++) {
 				IFileInfo info = list[i];
-				Iterator objIt = filters.iterator();
+				Iterator<Filter> objIt = filters.iterator();
 				boolean filtersWereApplicable = false;
 				while (objIt.hasNext()) {
-					Filter filter = (Filter) objIt.next();
+					Filter filter = objIt.next();
 					if (filter.appliesTo(info)) {
 						filtersWereApplicable = true;
 						if (filter.match(parent, info)) {
@@ -123,17 +124,17 @@ public class Filter {
 		return list;
 	}
 
-	public static IFileInfo[] filterExcludes(IProject project, LinkedList/*Filter*/filters, IContainer parent, IFileInfo[] list) throws CoreException {
+	public static IFileInfo[] filterExcludes(IProject project, LinkedList<Filter> filters, IContainer parent, IFileInfo[] list) throws CoreException {
 		if (filters.size() > 0) {
 			IFileInfo[] result = new IFileInfo[list.length];
 			int outputIndex = 0;
 
 			for (int i = 0; i < list.length; i++) {
 				IFileInfo info = list[i];
-				Iterator objIt = filters.iterator();
+				Iterator<Filter> objIt = filters.iterator();
 				boolean shouldBeExcluded = false;
 				while (objIt.hasNext()) {
-					Filter filter = (Filter) objIt.next();
+					Filter filter = objIt.next();
 					if (filter.appliesTo(info)) {
 						if (filter.match(parent, info)) {
 							shouldBeExcluded = true;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterDescription.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterDescription.java
index bedd634..3be3704 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterDescription.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterDescription.java
@@ -11,7 +11,6 @@
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
-import java.util.Iterator;
 import java.util.LinkedList;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
@@ -20,7 +19,7 @@ import org.eclipse.core.runtime.*;
  * Class for describing the characteristics of filters that are stored
  * in the project description.
  */
-public class FilterDescription implements IResourceFilterDescription, Comparable {
+public class FilterDescription implements IResourceFilterDescription, Comparable<FilterDescription> {
 
 	private long id;
 
@@ -52,11 +51,9 @@ public class FilterDescription implements IResourceFilterDescription, Comparable
 		return (getType() & IResourceFilterDescription.INHERITABLE) != 0;
 	}
 
-	public static LinkedList copy(LinkedList originalDescriptions, IResource resource) {
-		LinkedList copy = new LinkedList();
-		Iterator it = originalDescriptions.iterator();
-		while (it.hasNext()) {
-			FilterDescription desc = (FilterDescription) it.next();
+	public static LinkedList<FilterDescription> copy(LinkedList<FilterDescription> originalDescriptions, IResource resource) {
+		LinkedList<FilterDescription> copy = new LinkedList<FilterDescription>();
+		for (FilterDescription desc : originalDescriptions) {
 			FilterDescription newDesc = new FilterDescription(resource, desc.getType(), desc.getFileInfoMatcherDescription());
 			copy.add(newDesc);
 		}
@@ -118,8 +115,7 @@ public class FilterDescription implements IResourceFilterDescription, Comparable
 	/**
 	 * Compare filter descriptions in a way that sorts them topologically by path.
 	 */
-	public int compareTo(Object o) {
-		FilterDescription that = (FilterDescription) o;
+	public int compareTo(FilterDescription that) {
 		IPath path1 = this.getResource().getProjectRelativePath();
 		IPath path2 = that.getResource().getProjectRelativePath();
 		int count1 = path1.segmentCount();
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterTypeManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterTypeManager.java
index 5b8c936..f184e5c 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterTypeManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/FilterTypeManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Freescale Semiconductor and others.
+ * Copyright (c) 2008, 2011 Freescale Semiconductor and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
  *     IBM Corporation - ongoing development
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -25,7 +26,7 @@ class FilterTypeManager implements IManager {
 
 	private static final String FILTER_ELEMENT = "filterMatcher"; //$NON-NLS-1$
 
-	private HashMap/*<String, FilterDescriptor>*/factories = new HashMap();
+	private HashMap<String, IFilterMatcherDescriptor> factories = new HashMap<String, IFilterMatcherDescriptor>();
 
 	public FilterTypeManager() {
 		IExtensionPoint point = RegistryFactory.getRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_FILTER_MATCHERS);
@@ -59,11 +60,11 @@ class FilterTypeManager implements IManager {
 	}
 
 	public IFilterMatcherDescriptor getFilterDescriptor(String id) {
-		return (IFilterMatcherDescriptor) factories.get(id);
+		return factories.get(id);
 	}
 
 	public IFilterMatcherDescriptor[] getFilterDescriptors() {
-		return (IFilterMatcherDescriptor[]) factories.values().toArray(new IFilterMatcherDescriptor[0]);
+		return factories.values().toArray(new IFilterMatcherDescriptor[0]);
 	}
 
 	protected void processExtension(IExtension extension) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java
index bda1a23..98518ca 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ICoreConstants.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Group Support
+ *     Broadcom Corporation - build configurations
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -117,6 +118,7 @@ public interface ICoreConstants {
 	public static final int WORKSPACE_TREE_VERSION_2 = 67305986;
 
 	// helper constants for empty structures
+	public static final IBuildConfiguration[] EMPTY_BUILD_CONFIG_ARRAY = new IBuildConfiguration[0];
 	public static final IProject[] EMPTY_PROJECT_ARRAY = new IProject[0];
 	public static final IResource[] EMPTY_RESOURCE_ARRAY = new IResource[0];
 	public static final IFileState[] EMPTY_FILE_STATES = new IFileState[0];
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LinkDescription.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LinkDescription.java
index da0a83f..bdba76a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LinkDescription.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LinkDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Group and Project Path Variable Support
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -20,7 +21,7 @@ import org.eclipse.core.runtime.*;
  * Object for describing the characteristics of linked resources that are stored
  * in the project description.
  */
-public class LinkDescription implements Comparable {
+public class LinkDescription implements Comparable<LinkDescription> {
 	public static final URI VIRTUAL_LOCATION = getVirtualLocation();
 	private static URI getVirtualLocation() {
 		try {
@@ -104,8 +105,7 @@ public class LinkDescription implements Comparable {
 	 * This is important to ensure we process links in topological (breadth-first) order when reconciling
 	 * links.  See {@link Project#reconcileLinksAndGroups(ProjectDescription)}.
 	 */
-	public int compareTo(Object o) {
-		LinkDescription that = (LinkDescription) o;
+	public int compareTo(LinkDescription that) {
 		IPath path1 = this.getProjectRelativePath();
 		IPath path2 = that.getProjectRelativePath();
 		int count1 = path1.segmentCount();
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocalMetaArea.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocalMetaArea.java
index f799da2..531c65b 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocalMetaArea.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocalMetaArea.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,16 +8,18 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  * Francis Lynch (Wind River) - [301563] Save and load tree snapshots
+ * Broadcom Corporation - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
 import java.io.*;
 import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
 import org.eclipse.core.filesystem.URIUtil;
 import org.eclipse.core.internal.localstore.SafeChunkyInputStream;
 import org.eclipse.core.internal.localstore.SafeChunkyOutputStream;
-import org.eclipse.core.internal.utils.Messages;
-import org.eclipse.core.internal.utils.Policy;
+import org.eclipse.core.internal.utils.*;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.util.NLS;
@@ -301,7 +303,8 @@ public class LocalMetaArea implements ICoreConstants {
 	/**
 	 * Returns the portions of the project description that are private, and
 	 * adds them to the supplied project description. In particular, the
-	 * project location and the project's dynamic references are stored here.
+	 * project location, the project's dynamic references and build configurations
+	 * are stored here.
 	 * The project location will be set to <code>null</code> if the default
 	 * location should be used. In the case of failure, log the exception and
 	 * return silently, thus reverting to using the default location and no
@@ -310,8 +313,21 @@ public class LocalMetaArea implements ICoreConstants {
 	 *    int - number of dynamic project references
 	 *    UTF - project reference 1
 	 *    ... repeat for remaining references
+	 * since 3.7:
+	 *    int - number of build configurations
+	 *      UTF - configuration name in order
+	 *      ... repeated for N configurations
+	 *    UTF - active build configuration name
+	 *    int - number of build configurations with refs
+	 *      UTF - build configuration name
+	 *      int - number of referenced configuration
+	 *        UTF - project name
+	 *        bool - hasConfigName
+	 *        UTF - configName if hasConfigName
+	 *        ... repeat for number of referenced configurations
+	 *      ... repeat for number of build configurations with references
 	 */
-	public void readPrivateDescription(IProject target, IProjectDescription description) {
+	public void readPrivateDescription(IProject target, ProjectDescription description) {
 		IPath locationFile = locationFor(target).append(F_PROJECT_LOCATION);
 		java.io.File file = locationFile.toFile();
 		if (!file.exists()) {
@@ -346,6 +362,34 @@ public class LocalMetaArea implements ICoreConstants {
 				for (int i = 0; i < numRefs; i++)
 					references[i] = root.getProject(dataIn.readUTF());
 				description.setDynamicReferences(references);
+
+				// Since 3.7 -  Build Configurations
+				String[] configs = new String[dataIn.readInt()];
+				for (int i = 0; i < configs.length; i++)
+					configs[i] = dataIn.readUTF();
+				if (configs.length > 0)
+					// In the future we may decide this is better stored in the 
+					// .project, so only set if configs.length > 0
+					description.setBuildConfigs(configs);
+				// Active configuration name
+				description.setActiveBuildConfig(dataIn.readUTF());
+				// Build configuration references?
+				int numBuildConifgsWithRefs = dataIn.readInt();
+				HashMap<String, IBuildConfiguration[]> m = new HashMap<String, IBuildConfiguration[]>(numBuildConifgsWithRefs);
+				for (int i = 0; i < numBuildConifgsWithRefs; i++) {
+					String configName = dataIn.readUTF();
+					numRefs = dataIn.readInt();
+					IBuildConfiguration[] refs = new IBuildConfiguration[numRefs];
+					for (int j = 0; j < numRefs; j++) {
+						String projName = dataIn.readUTF();
+						if (dataIn.readBoolean())
+							refs[j] = new BuildConfiguration(root.getProject(projName), dataIn.readUTF());
+						else
+							refs[j] = new BuildConfiguration(root.getProject(projName), null);
+					}
+					m.put(configName, refs);
+				}
+				description.setBuildConfigReferences(m);
 			} finally {
 				dataIn.close();
 			}
@@ -389,9 +433,11 @@ public class LocalMetaArea implements ICoreConstants {
 		if (desc == null)
 			return;
 		final URI projectLocation = desc.getLocationURI();
-		final IProject[] references = desc.getDynamicReferences(false);
-		final int numRefs = references.length;
-		if (projectLocation == null && numRefs == 0)
+		final IProject[] prjRefs = desc.getDynamicReferences(false);
+		final String[] buildConfigs = desc.configNames;
+		final Map<String, IBuildConfiguration[]> configRefs = desc.getBuildConfigReferences(false);
+		if (projectLocation == null && prjRefs.length == 0 && 
+				buildConfigs.length == 0 && configRefs.isEmpty())
 			return;
 		//write the private metadata file
 		try {
@@ -402,12 +448,40 @@ public class LocalMetaArea implements ICoreConstants {
 					dataOut.writeUTF(""); //$NON-NLS-1$
 				else
 					dataOut.writeUTF(URI_PREFIX + projectLocation.toString());
-				dataOut.writeInt(numRefs);
-				for (int i = 0; i < numRefs; i++)
-					dataOut.writeUTF(references[i].getName());
+				dataOut.writeInt(prjRefs.length);
+				for (int i = 0; i < prjRefs.length; i++)
+					dataOut.writeUTF(prjRefs[i].getName());
+
+				// Since 3.7 - build configurations + references
+				// Write out the build configurations
+				dataOut.writeInt(buildConfigs.length);
+				for (int i = 0; i < buildConfigs.length; i++) {
+					dataOut.writeUTF(buildConfigs[i]);
+				}
+				// Write active configuration name
+				dataOut.writeUTF(desc.getActiveBuildConfig());
+				// Write out the configuration level references
+				dataOut.writeInt(configRefs.size());
+				for (Map.Entry<String, IBuildConfiguration[]> e : configRefs.entrySet()) {
+					String refdName = e.getKey();
+					IBuildConfiguration[] refs = e.getValue();
+
+					dataOut.writeUTF(refdName);
+					dataOut.writeInt(refs.length);
+					for (int j = 0; j < refs.length; j++) {
+						dataOut.writeUTF(refs[j].getProject().getName());
+						if (refs[j].getName() == null) {
+							dataOut.writeBoolean(false);
+						} else {
+							dataOut.writeBoolean(true);
+							dataOut.writeUTF(refs[j].getName());
+						}
+					}
+				}
 				output.succeed();
-			} finally {
 				dataOut.close();
+			} finally {
+				FileUtil.safeClose(dataOut);
 			}
 		} catch (IOException e) {
 			String message = NLS.bind(Messages.resources_exSaveProjectLocation, target.getName());
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocationValidator.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocationValidator.java
index 9030794..89c41cb 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocationValidator.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/LocationValidator.java
@@ -377,13 +377,7 @@ public class LocationValidator {
 		IProject[] projects = workspace.getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
 		for (int j = 0; j < projects.length; j++) {
 			IProject project = projects[j];
-			// since we are iterating over the project in the workspace, we
-			// know that they have been created before and must have a description
-			IProjectDescription desc = ((Project) project).internalGetDescription();
-			URI testLocation = desc.getLocationURI();
-			// if the project uses the default location then continue
-			if (testLocation == null)
-				continue;
+			URI testLocation = project.getLocationURI();
 			if (context != null && project.equals(context)) {
 				//tolerate locations being the same if this is the project being tested
 				if (URIUtil.equals(testLocation, location))
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Marker.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Marker.java
index 75c8675..6175f0d 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Marker.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Marker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -143,7 +144,7 @@ public class Marker extends PlatformObject implements IMarker {
 	/**
 	 * @see IMarker#getAttributes()
 	 */
-	public Map getAttributes() throws CoreException {
+	public Map<String, Object> getAttributes() throws CoreException {
 		MarkerInfo info = getInfo();
 		checkInfo(info);
 		return info.getAttributes();
@@ -291,7 +292,7 @@ public class Marker extends PlatformObject implements IMarker {
 	/**
 	 * @see IMarker#setAttributes(Map)
 	 */
-	public void setAttributes(Map values) throws CoreException {
+	public void setAttributes(Map<String, ? extends Object> values) throws CoreException {
 		Workspace workspace = getWorkspace();
 		MarkerManager manager = workspace.getMarkerManager();
 		try {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerAttributeMap.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerAttributeMap.java
index 4bb856f..e3e7547 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerAttributeMap.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerAttributeMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -21,7 +22,8 @@ import org.eclipse.core.internal.utils.StringPool;
  * 
  * Implemented as a single array that alternates keys and values.
  */
-public class MarkerAttributeMap implements Map, IStringPoolParticipant {
+ at SuppressWarnings("unchecked")
+public class MarkerAttributeMap<V> implements Map<String, V>, IStringPoolParticipant {
 	protected Object[] elements = null;
 	protected int count = 0;
 
@@ -50,7 +52,7 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	 * Creates a new marker attribute map of default size
 	 * @param map The entries in the given map will be added to the new map.
 	 */
-	public MarkerAttributeMap(Map map) {
+	public MarkerAttributeMap(Map<String, ? extends V> map) {
 		this(map.size());
 		putAll(map);
 	}
@@ -94,7 +96,7 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	 * in the Map interface.  The returned collection will not be bound to
 	 * this map and will not remain in sync with this map.
 	 */
-	public Set entrySet() {
+	public Set<Entry<String, V>> entrySet() {
 		return toHashMap().entrySet();
 	}
 
@@ -104,7 +106,7 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	public boolean equals(Object o) {
 		if (!(o instanceof Map))
 			return false;
-		Map other = (Map) o;
+		Map<String, V> other = (Map<String, V>) o;
 		//must be same size
 		if (count != other.size())
 			return false;
@@ -127,13 +129,13 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	/* (non-Javadoc)
 	 * @see Map#get(java.lang.Object)
 	 */
-	public Object get(Object key) {
+	public V get(Object key) {
 		if (count == 0)
 			return null;
-		key = ((String) key).intern();
+		key = ((String)key).intern();
 		for (int i = 0; i < elements.length; i = i + 2)
 			if (elements[i] == key)
-				return elements[i + 1];
+				return (V)elements[i + 1];
 		return null;
 	}
 
@@ -175,13 +177,13 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	 * in the Map interface.  The returned collection will not be bound to
 	 * this map and will not remain in sync with this map.
 	 */
-	public Set keySet() {
-		Set result = new HashSet(size());
+	public Set<String> keySet() {
+		Set<String> result = new HashSet<String>(size());
 		if (count == 0)
 			return result;
 		for (int i = 0; i < elements.length; i = i + 2) {
 			if (elements[i] != null) {
-				result.add(elements[i]);
+				result.add((String)elements[i]);
 			}
 		}
 		return result;
@@ -190,12 +192,12 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	/* (non-Javadoc)
 	 * @see Map#put(java.lang.Object, java.lang.Object)
 	 */
-	public Object put(Object key, Object value) {
-		if (key == null)
+	public V put(String k, V value) {
+		if (k == null)
 			throw new NullPointerException();
 		if (value == null)
-			return remove(key);
-		key = ((String) key).intern();
+			return remove(k);
+		String key = k.intern();
 
 		if (elements.length <= (count * 2))
 			grow();
@@ -213,7 +215,7 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 			if (elements[i] == key) {
 				Object oldValue = elements[i + 1];
 				elements[i + 1] = value;
-				return oldValue;
+				return (V)oldValue;
 			}
 		}
 
@@ -232,28 +234,25 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	/* (non-Javadoc)
 	 * @see Map#putAll(java.util.Map)
 	 */
-	public void putAll(Map map) {
-		for (Iterator i = map.keySet().iterator(); i.hasNext();) {
-			Object key = i.next();
-			Object value = map.get(key);
-			put(key, value);
-		}
+	public void putAll(Map<? extends String, ? extends V> map) {
+		for (Map.Entry<? extends String, ? extends V> e : map.entrySet())
+			put(e.getKey(), e.getValue());
 	}
 
 	/* (non-Javadoc)
 	 * @see Map#remove(java.lang.Object)
 	 */
-	public Object remove(Object key) {
+	public V remove(Object key) {
 		if (count == 0)
 			return null;
-		key = ((String) key).intern();
+		key = ((String)key).intern();
 		for (int i = 0; i < elements.length; i = i + 2) {
 			if (elements[i] == key) {
 				elements[i] = null;
 				Object result = elements[i + 1];
 				elements[i + 1] = null;
 				count--;
-				return result;
+				return (V)result;
 			}
 		}
 		return null;
@@ -287,13 +286,13 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	/**
 	 * Creates a new hash map with the same contents as this map.
 	 */
-	private HashMap toHashMap() {
-		HashMap result = new HashMap(size());
+	private HashMap<String, V> toHashMap() {
+		HashMap<String, V> result = new HashMap<String, V>(size());
 		if (count == 0)
 			return result;
 		for (int i = 0; i < elements.length; i = i + 2) {
 			if (elements[i] != null) {
-				result.put(elements[i], elements[i + 1]);
+				result.put((String)elements[i], (V)elements[i + 1]);
 			}
 		}
 		return result;
@@ -305,13 +304,13 @@ public class MarkerAttributeMap implements Map, IStringPoolParticipant {
 	 * in the Map interface.  The returned collection will not be bound to
 	 * this map and will not remain in sync with this map.
 	 */
-	public Collection values() {
-		Set result = new HashSet(size());
+	public Collection<V> values() {
+		Set<V> result = new HashSet<V>(size());
 		if (count == 0)
 			return result;
 		for (int i = 1; i < elements.length; i = i + 2) {
 			if (elements[i] != null) {
-				result.add(elements[i]);
+				result.add((V)elements[i]);
 			}
 		}
 		return result;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDelta.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDelta.java
index b577a8d..8c90e59 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDelta.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -72,7 +73,7 @@ public class MarkerDelta implements IMarkerDelta, IMarkerSetElement {
 	/* (non-Javadoc)
 	 * @see IMarkerDelta#getAttributes()
 	 */
-	public Map getAttributes() {
+	public Map<String, Object> getAttributes() {
 		return info.getAttributes();
 	}
 
@@ -129,16 +130,16 @@ public class MarkerDelta implements IMarkerDelta, IMarkerSetElement {
 	 * Merge two Maps of (IPath->MarkerSet) representing changes.  Use the old
 	 * map to store the result so we don't have to build a new map to return.
 	 */
-	public static Map merge(Map oldChanges, Map newChanges) {
+	public static Map<IPath, MarkerSet> merge(Map<IPath, MarkerSet> oldChanges, Map<IPath, MarkerSet> newChanges) {
 		if (oldChanges == null)
 			//don't worry about copying since the new changes are no longer used
 			return newChanges;
 		if (newChanges == null)
 			return oldChanges;
-		for (Iterator it = newChanges.keySet().iterator(); it.hasNext();) {
-			IPath key = (IPath) it.next();
-			MarkerSet oldSet = (MarkerSet) oldChanges.get(key);
-			MarkerSet newSet = (MarkerSet) newChanges.get(key);
+		for (Iterator<IPath> it = newChanges.keySet().iterator(); it.hasNext();) {
+			IPath key = it.next();
+			MarkerSet oldSet = oldChanges.get(key);
+			MarkerSet newSet = newChanges.get(key);
 			if (oldSet == null)
 				oldChanges.put(key, newSet);
 			else
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDeltaManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDeltaManager.java
index 1b5edb9..8c9a640 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDeltaManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerDeltaManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,10 +7,12 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
 import java.util.*;
+import org.eclipse.core.runtime.IPath;
 
 /**
  * The notification mechanism can request marker deltas for several overlapping intervals
@@ -24,15 +26,16 @@ import java.util.*;
 class MarkerDeltaManager {
 	private static final int DEFAULT_SIZE = 10;
 	private long[] startIds = new long[DEFAULT_SIZE];
-	private Map[] batches = new Map[DEFAULT_SIZE];
+	@SuppressWarnings("unchecked")
+	private Map<IPath, MarkerSet>[] batches = new Map[DEFAULT_SIZE];
 	private int nextFree = 0;
 
 	/**
 	 * Returns the deltas from the given start id up until the present. Returns null
 	 * if there are no deltas for that interval.
 	 */
-	protected Map assembleDeltas(long start) {
-		Map result = null;
+	protected Map<IPath, MarkerSet> assembleDeltas(long start) {
+		Map<IPath, MarkerSet> result = null;
 		for (int i = 0; i < nextFree; i++)
 			if (startIds[i] >= start)
 				result = MarkerDelta.merge(result, batches[i]);
@@ -42,6 +45,7 @@ class MarkerDeltaManager {
 	/**
 	 * Flushes all delta batches up to but not including the given start Id.
 	 */
+	@SuppressWarnings("unchecked")
 	protected void resetDeltas(long startId) {
 		//find offset of first batch to keep
 		int startOffset = 0;
@@ -51,7 +55,7 @@ class MarkerDeltaManager {
 		if (startOffset == 0)
 			return;
 		long[] newIds = startIds;
-		Map[] newBatches = batches;
+		Map<IPath, MarkerSet>[] newBatches = batches;
 		//shrink the arrays if it has grown too large
 		if (startIds.length > DEFAULT_SIZE && (nextFree - startOffset < DEFAULT_SIZE)) {
 			newIds = new long[DEFAULT_SIZE];
@@ -69,18 +73,19 @@ class MarkerDeltaManager {
 		nextFree = remaining;
 	}
 
-	protected Map newGeneration(long start) {
+	@SuppressWarnings("unchecked")
+	protected Map<IPath, MarkerSet> newGeneration(long start) {
 		int len = startIds.length;
 		if (nextFree >= len) {
 			long[] newIds = new long[len * 2];
-			Map[] newBatches = new Map[len * 2];
+			Map<IPath, MarkerSet>[] newBatches = new Map[len * 2];
 			System.arraycopy(startIds, 0, newIds, 0, len);
 			System.arraycopy(batches, 0, newBatches, 0, len);
 			startIds = newIds;
 			batches = newBatches;
 		}
 		startIds[nextFree] = start;
-		batches[nextFree] = new HashMap(11);
+		batches[nextFree] = new HashMap<IPath, MarkerSet>(11);
 		return batches[nextFree++];
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerInfo.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerInfo.java
index 5f63605..1e6b4a1 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerInfo.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -27,7 +28,7 @@ public class MarkerInfo implements IMarkerSetElement, Cloneable, IStringPoolPart
 	//
 	protected static final long UNDEFINED_ID = -1;
 	/** The store of attributes for this marker. */
-	protected Map attributes = null;
+	protected Map<String, Object> attributes = null;
 
 	/** The creation time for this marker. */
 	protected long creationTime = 0;
@@ -107,14 +108,14 @@ public class MarkerInfo implements IMarkerSetElement, Cloneable, IStringPoolPart
 		return attributes == null ? null : attributes.get(attributeName);
 	}
 
-	public Map getAttributes() {
+	public Map<String, Object> getAttributes() {
 		return getAttributes(true);
 	}
 
-	public Map getAttributes(boolean makeCopy) {
+	public Map<String, Object> getAttributes(boolean makeCopy) {
 		if (attributes == null)
 			return null;
-		return makeCopy ? new MarkerAttributeMap(attributes) : attributes;
+		return makeCopy ? new MarkerAttributeMap<Object>(attributes) : attributes;
 	}
 
 	public Object[] getAttributes(String[] attributeNames) {
@@ -136,7 +137,7 @@ public class MarkerInfo implements IMarkerSetElement, Cloneable, IStringPoolPart
 		return type;
 	}
 
-	public void internalSetAttributes(Map map) {
+	public void internalSetAttributes(Map<String, Object> map) {
 		//the cast effectively acts as an assertion to make sure
 		//the right kind of map is being used
 		attributes = map;
@@ -148,7 +149,7 @@ public class MarkerInfo implements IMarkerSetElement, Cloneable, IStringPoolPart
 		if (attributes == null) {
 			if (value == null)
 				return;
-			attributes = new MarkerAttributeMap();
+			attributes = new MarkerAttributeMap<Object>();
 			attributes.put(attributeName, value);
 		} else {
 			if (value == null) {
@@ -161,12 +162,12 @@ public class MarkerInfo implements IMarkerSetElement, Cloneable, IStringPoolPart
 		}
 	}
 
-	public void setAttributes(Map map, boolean validate) {
+	public void setAttributes(Map<String, ? extends Object> map, boolean validate) {
 		if (map == null)
 			attributes = null;
 		else {
-			attributes = new MarkerAttributeMap(map.size());
-			for (Iterator i = map.keySet().iterator(); i.hasNext();) {
+			attributes = new MarkerAttributeMap<Object>(map.size());
+			for (Iterator<String> i = map.keySet().iterator(); i.hasNext();) {
 				Object key = i.next();
 				Assert.isTrue(key instanceof String);
 				Object value = map.get(key);
@@ -198,7 +199,7 @@ public class MarkerInfo implements IMarkerSetElement, Cloneable, IStringPoolPart
 	 */
 	public void shareStrings(StringPool set) {
 		type = set.add(type);
-		Map map = attributes;
+		Map<String, Object> map = attributes;
 		if (map instanceof IStringPoolParticipant)
 			((IStringPoolParticipant) map).shareStrings(set);
 	}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerManager.java
index 7dd0efe..b34145f 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -31,7 +32,7 @@ public class MarkerManager implements IManager {
 	private static final IMarker[] NO_MARKERS = new IMarker[0];
 	protected MarkerTypeDefinitionCache cache = new MarkerTypeDefinitionCache();
 	private long changeId = 0;
-	protected Map currentDeltas = null;
+	protected Map<IPath, MarkerSet> currentDeltas = null;
 	protected final MarkerDeltaManager deltaManager = new MarkerDeltaManager();
 
 	protected Workspace workspace;
@@ -95,7 +96,7 @@ public class MarkerManager implements IManager {
 		int size = markers.size();
 		if (size <= 0)
 			return NO_MARKER_INFO;
-		List result = new ArrayList(size);
+		List<MarkerInfo> result = new ArrayList<MarkerInfo>(size);
 		IMarkerSetElement[] elements = markers.elements();
 		for (int i = 0; i < elements.length; i++) {
 			MarkerInfo marker = (MarkerInfo) elements[i];
@@ -115,7 +116,7 @@ public class MarkerManager implements IManager {
 		size = result.size();
 		if (size <= 0)
 			return NO_MARKER_INFO;
-		return (MarkerInfo[]) result.toArray(new MarkerInfo[size]);
+		return result.toArray(new MarkerInfo[size]);
 	}
 
 	protected int basicFindMaxSeverity(MarkerSet markers, String type, boolean includeSubtypes) {
@@ -199,7 +200,7 @@ public class MarkerManager implements IManager {
 	/**
 	 * Adds the markers on the given target which match the specified type to the list.
 	 */
-	protected void buildMarkers(IMarkerSetElement[] markers, IPath path, int type, ArrayList list) {
+	protected void buildMarkers(IMarkerSetElement[] markers, IPath path, int type, ArrayList<IMarker> list) {
 		if (markers.length == 0)
 			return;
 		IResource resource = workspace.newResource(path, type);
@@ -219,7 +220,7 @@ public class MarkerManager implements IManager {
 		if (currentDeltas == null)
 			currentDeltas = deltaManager.newGeneration(changeId);
 		IPath path = resource.getFullPath();
-		MarkerSet previousChanges = (MarkerSet) currentDeltas.get(path);
+		MarkerSet previousChanges = currentDeltas.get(path);
 		MarkerSet result = MarkerDelta.merge(previousChanges, changes);
 		if (result.size() == 0)
 			currentDeltas.remove(path);
@@ -258,11 +259,11 @@ public class MarkerManager implements IManager {
 	 * for all types (i.e., <code>null</code> is a wildcard.
 	 */
 	public IMarker[] findMarkers(IResource target, final String type, final boolean includeSubtypes, int depth) {
-		ArrayList result = new ArrayList();
+		ArrayList<IMarker> result = new ArrayList<IMarker>();
 		doFindMarkers(target, result, type, includeSubtypes, depth);
 		if (result.size() == 0)
 			return NO_MARKERS;
-		return (IMarker[]) result.toArray(new IMarker[result.size()]);
+		return result.toArray(new IMarker[result.size()]);
 	}
 
 	/**
@@ -271,7 +272,7 @@ public class MarkerManager implements IManager {
 	 * Passing <code>null</code> for the type specifies a match
 	 * for all types (i.e., <code>null</code> is a wildcard.
 	 */
-	public void doFindMarkers(IResource target, ArrayList result, final String type, final boolean includeSubtypes, int depth) {
+	public void doFindMarkers(IResource target, ArrayList<IMarker> result, final String type, final boolean includeSubtypes, int depth) {
 		//optimize the deep searches with an element tree visitor
 		if (depth == IResource.DEPTH_INFINITE && target.getType() != IResource.FILE)
 			visitorFindMarkers(target.getFullPath(), result, type, includeSubtypes);
@@ -297,7 +298,7 @@ public class MarkerManager implements IManager {
 	/**
 	 * Returns the map of all marker deltas since the given change Id.
 	 */
-	public Map getMarkerDeltas(long startChangeId) {
+	public Map<IPath, MarkerSet> getMarkerDeltas(long startChangeId) {
 		return deltaManager.assembleDeltas(startChangeId);
 	}
 
@@ -308,7 +309,7 @@ public class MarkerManager implements IManager {
 	boolean hasDelta(IPath path, long id) {
 		if (currentDeltas == null)
 			return false;
-		MarkerSet set = (MarkerSet) currentDeltas.get(path);
+		MarkerSet set = currentDeltas.get(path);
 		if (set == null)
 			return false;
 		return set.get(id) != null;
@@ -378,7 +379,7 @@ public class MarkerManager implements IManager {
 	/**
 	 * Adds the markers for a subtree of resources to the list.
 	 */
-	private void recursiveFindMarkers(IPath path, ArrayList list, String type, boolean includeSubtypes, int depth) {
+	private void recursiveFindMarkers(IPath path, ArrayList<IMarker> list, String type, boolean includeSubtypes, int depth) {
 		ResourceInfo info = workspace.getResourceInfo(path, false, false);
 		if (info == null)
 			return;
@@ -566,7 +567,7 @@ public class MarkerManager implements IManager {
 		}
 	}
 
-	public void save(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List list) throws IOException {
+	public void save(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List<String> list) throws IOException {
 		writer.save(info, requestor, output, list);
 	}
 
@@ -591,7 +592,7 @@ public class MarkerManager implements IManager {
 	/**
 	 * Adds the markers for a subtree of resources to the list.
 	 */
-	private void visitorFindMarkers(IPath path, final ArrayList list, final String type, final boolean includeSubtypes) {
+	private void visitorFindMarkers(IPath path, final ArrayList<IMarker> list, final String type, final boolean includeSubtypes) {
 		IElementContentVisitor visitor = new IElementContentVisitor() {
 			public boolean visitElement(ElementTree tree, IPathRequestor requestor, Object elementContents) {
 				ResourceInfo info = (ResourceInfo) elementContents;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_1.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_1.java
index a07dcae..8f48f04 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_1.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_1.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -58,7 +59,7 @@ public class MarkerReader_1 extends MarkerReader {
 	 */
 	public void read(DataInputStream input, boolean generateDeltas) throws IOException, CoreException {
 		try {
-			List readTypes = new ArrayList(5);
+			List<String> readTypes = new ArrayList<String>(5);
 			while (true) {
 				IPath path = new Path(input.readUTF());
 				int markersSize = input.readInt();
@@ -77,11 +78,11 @@ public class MarkerReader_1 extends MarkerReader {
 					// Iterate over all elements and add not null ones. This saves us from copying
 					// and shrinking the array.
 					IMarkerSetElement[] infos = markers.elements;
-					ArrayList deltas = new ArrayList(infos.length);
+					ArrayList<MarkerDelta> deltas = new ArrayList<MarkerDelta>(infos.length);
 					for (int i = 0; i < infos.length; i++)
 						if (infos[i] != null)
 							deltas.add(new MarkerDelta(IResourceDelta.ADDED, resource, (MarkerInfo) infos[i]));
-					workspace.getMarkerManager().changedMarkers(resource, (IMarkerSetElement[]) deltas.toArray(new IMarkerSetElement[deltas.size()]));
+					workspace.getMarkerManager().changedMarkers(resource, deltas.toArray(new IMarkerSetElement[deltas.size()]));
 				}
 			}
 		} catch (EOFException e) {
@@ -89,11 +90,11 @@ public class MarkerReader_1 extends MarkerReader {
 		}
 	}
 
-	private Map readAttributes(DataInputStream input) throws IOException {
+	private Map<String, Object> readAttributes(DataInputStream input) throws IOException {
 		int attributesSize = input.readInt();
 		if (attributesSize == 0)
 			return null;
-		Map result = new MarkerAttributeMap(attributesSize);
+		Map<String, Object> result = new MarkerAttributeMap<Object>(attributesSize);
 		for (int j = 0; j < attributesSize; j++) {
 			String key = input.readUTF();
 			int type = input.readInt();
@@ -118,7 +119,7 @@ public class MarkerReader_1 extends MarkerReader {
 		return result.isEmpty() ? null : result;
 	}
 
-	private MarkerInfo readMarkerInfo(DataInputStream input, List readTypes) throws IOException, CoreException {
+	private MarkerInfo readMarkerInfo(DataInputStream input, List<String> readTypes) throws IOException, CoreException {
 		MarkerInfo info = new MarkerInfo();
 		info.setId(input.readLong());
 		int constant = input.readInt();
@@ -129,7 +130,7 @@ public class MarkerReader_1 extends MarkerReader {
 				readTypes.add(type);
 				break;
 			case INDEX :
-				info.setType((String) readTypes.get(input.readInt()));
+				info.setType(readTypes.get(input.readInt()));
 				break;
 			default :
 				//if we get here the marker file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_2.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_2.java
index 88f7bbc..916eac7 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_2.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -59,7 +60,7 @@ public class MarkerReader_2 extends MarkerReader {
 	 */
 	public void read(DataInputStream input, boolean generateDeltas) throws IOException, CoreException {
 		try {
-			List readTypes = new ArrayList(5);
+			List<String> readTypes = new ArrayList<String>(5);
 			while (true) {
 				IPath path = new Path(input.readUTF());
 				int markersSize = input.readInt();
@@ -78,11 +79,11 @@ public class MarkerReader_2 extends MarkerReader {
 					// and shrinking the array.
 					Resource resource = workspace.newResource(path, info.getType());
 					IMarkerSetElement[] infos = markers.elements;
-					ArrayList deltas = new ArrayList(infos.length);
+					ArrayList<MarkerDelta> deltas = new ArrayList<MarkerDelta>(infos.length);
 					for (int i = 0; i < infos.length; i++)
 						if (infos[i] != null)
 							deltas.add(new MarkerDelta(IResourceDelta.ADDED, resource, (MarkerInfo) infos[i]));
-					workspace.getMarkerManager().changedMarkers(resource, (IMarkerSetElement[]) deltas.toArray(new IMarkerSetElement[deltas.size()]));
+					workspace.getMarkerManager().changedMarkers(resource, deltas.toArray(new IMarkerSetElement[deltas.size()]));
 				}
 			}
 		} catch (EOFException e) {
@@ -90,11 +91,11 @@ public class MarkerReader_2 extends MarkerReader {
 		}
 	}
 
-	private Map readAttributes(DataInputStream input) throws IOException {
+	private Map<String, Object> readAttributes(DataInputStream input) throws IOException {
 		int attributesSize = input.readShort();
 		if (attributesSize == 0)
 			return null;
-		Map result = new MarkerAttributeMap(attributesSize);
+		Map<String, Object> result = new MarkerAttributeMap<Object>(attributesSize);
 		for (int j = 0; j < attributesSize; j++) {
 			String key = input.readUTF();
 			byte type = input.readByte();
@@ -119,7 +120,7 @@ public class MarkerReader_2 extends MarkerReader {
 		return result.isEmpty() ? null : result;
 	}
 
-	private MarkerInfo readMarkerInfo(DataInputStream input, List readTypes) throws IOException, CoreException {
+	private MarkerInfo readMarkerInfo(DataInputStream input, List<String> readTypes) throws IOException, CoreException {
 		MarkerInfo info = new MarkerInfo();
 		info.setId(input.readLong());
 		byte constant = input.readByte();
@@ -130,7 +131,7 @@ public class MarkerReader_2 extends MarkerReader {
 				readTypes.add(type);
 				break;
 			case INDEX :
-				info.setType((String) readTypes.get(input.readInt()));
+				info.setType(readTypes.get(input.readInt()));
 				break;
 			default :
 				//if we get here the marker file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_3.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_3.java
index 4e9aef2..0b10941 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_3.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerReader_3.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -60,7 +61,7 @@ public class MarkerReader_3 extends MarkerReader {
 	 */
 	public void read(DataInputStream input, boolean generateDeltas) throws IOException, CoreException {
 		try {
-			List readTypes = new ArrayList(5);
+			List<String> readTypes = new ArrayList<String>(5);
 			while (true) {
 				IPath path = new Path(input.readUTF());
 				int markersSize = input.readInt();
@@ -79,11 +80,11 @@ public class MarkerReader_3 extends MarkerReader {
 					// and shrinking the array.
 					Resource resource = workspace.newResource(path, info.getType());
 					IMarkerSetElement[] infos = markers.elements;
-					ArrayList deltas = new ArrayList(infos.length);
+					ArrayList<MarkerDelta> deltas = new ArrayList<MarkerDelta>(infos.length);
 					for (int i = 0; i < infos.length; i++)
 						if (infos[i] != null)
 							deltas.add(new MarkerDelta(IResourceDelta.ADDED, resource, (MarkerInfo) infos[i]));
-					workspace.getMarkerManager().changedMarkers(resource, (IMarkerSetElement[]) deltas.toArray(new IMarkerSetElement[deltas.size()]));
+					workspace.getMarkerManager().changedMarkers(resource, deltas.toArray(new IMarkerSetElement[deltas.size()]));
 				}
 			}
 		} catch (EOFException e) {
@@ -91,11 +92,11 @@ public class MarkerReader_3 extends MarkerReader {
 		}
 	}
 
-	private Map readAttributes(DataInputStream input) throws IOException {
+	private Map<String, Object> readAttributes(DataInputStream input) throws IOException {
 		int attributesSize = input.readShort();
 		if (attributesSize == 0)
 			return null;
-		Map result = new MarkerAttributeMap(attributesSize);
+		Map<String, Object> result = new MarkerAttributeMap<Object>(attributesSize);
 		for (int j = 0; j < attributesSize; j++) {
 			String key = input.readUTF();
 			byte type = input.readByte();
@@ -134,7 +135,7 @@ public class MarkerReader_3 extends MarkerReader {
 		return result.isEmpty() ? null : result;
 	}
 
-	private MarkerInfo readMarkerInfo(DataInputStream input, List readTypes) throws IOException, CoreException {
+	private MarkerInfo readMarkerInfo(DataInputStream input, List<String> readTypes) throws IOException, CoreException {
 		MarkerInfo info = new MarkerInfo();
 		info.setId(input.readLong());
 		byte constant = input.readByte();
@@ -145,7 +146,7 @@ public class MarkerReader_3 extends MarkerReader {
 				readTypes.add(type);
 				break;
 			case INDEX :
-				info.setType((String) readTypes.get(input.readInt()));
+				info.setType(readTypes.get(input.readInt()));
 				break;
 			default :
 				//if we get here the marker file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSet.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSet.java
index a444b36..508e33a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSet.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -70,7 +71,7 @@ public class MarkerSet implements Cloneable, IStringPoolParticipant {
 		try {
 			MarkerSet copy = (MarkerSet) super.clone();
 			//copy the attribute array
-			copy.elements = (IMarkerSetElement[]) elements.clone();
+			copy.elements = elements.clone();
 			return copy;
 		} catch (CloneNotSupportedException e) {
 			//cannot happen because this class implements Cloneable
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_1.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_1.java
index 4331236..c3055f9 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_1.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_1.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -61,7 +62,7 @@ public class MarkerSnapshotReader_1 extends MarkerSnapshotReader {
 		IPath path = new Path(input.readUTF());
 		int markersSize = input.readInt();
 		MarkerSet markers = new MarkerSet(markersSize);
-		ArrayList readTypes = new ArrayList();
+		ArrayList<String> readTypes = new ArrayList<String>();
 		for (int i = 0; i < markersSize; i++)
 			markers.add(readMarkerInfo(input, readTypes));
 		// we've read all the markers from the file for this snap. if the resource
@@ -73,11 +74,11 @@ public class MarkerSnapshotReader_1 extends MarkerSnapshotReader {
 		info.clear(ICoreConstants.M_MARKERS_SNAP_DIRTY);
 	}
 
-	private Map readAttributes(DataInputStream input) throws IOException {
+	private Map<String, Object> readAttributes(DataInputStream input) throws IOException {
 		short attributesSize = input.readShort();
 		if (attributesSize == 0)
 			return null;
-		Map result = new MarkerAttributeMap(attributesSize);
+		Map<String, Object> result = new MarkerAttributeMap<Object>(attributesSize);
 		for (int j = 0; j < attributesSize; j++) {
 			String key = input.readUTF();
 			byte type = input.readByte();
@@ -102,7 +103,7 @@ public class MarkerSnapshotReader_1 extends MarkerSnapshotReader {
 		return result.isEmpty() ? null : result;
 	}
 
-	private MarkerInfo readMarkerInfo(DataInputStream input, List readTypes) throws IOException, CoreException {
+	private MarkerInfo readMarkerInfo(DataInputStream input, List<String> readTypes) throws IOException, CoreException {
 		MarkerInfo info = new MarkerInfo();
 		info.setId(input.readLong());
 		byte constant = input.readByte();
@@ -113,7 +114,7 @@ public class MarkerSnapshotReader_1 extends MarkerSnapshotReader {
 				readTypes.add(type);
 				break;
 			case INDEX :
-				info.setType((String) readTypes.get(input.readInt()));
+				info.setType(readTypes.get(input.readInt()));
 				break;
 			default :
 				//if we get here the marker file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_2.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_2.java
index b79f7ff..87cb2bc 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_2.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerSnapshotReader_2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -62,7 +63,7 @@ public class MarkerSnapshotReader_2 extends MarkerSnapshotReader {
 		IPath path = new Path(input.readUTF());
 		int markersSize = input.readInt();
 		MarkerSet markers = new MarkerSet(markersSize);
-		ArrayList readTypes = new ArrayList();
+		ArrayList<String> readTypes = new ArrayList<String>();
 		for (int i = 0; i < markersSize; i++)
 			markers.add(readMarkerInfo(input, readTypes));
 		// we've read all the markers from the file for this snap. if the resource
@@ -74,11 +75,11 @@ public class MarkerSnapshotReader_2 extends MarkerSnapshotReader {
 		info.clear(ICoreConstants.M_MARKERS_SNAP_DIRTY);
 	}
 
-	private Map readAttributes(DataInputStream input) throws IOException {
+	private Map<String, Object> readAttributes(DataInputStream input) throws IOException {
 		short attributesSize = input.readShort();
 		if (attributesSize == 0)
 			return null;
-		Map result = new MarkerAttributeMap(attributesSize);
+		Map<String, Object> result = new MarkerAttributeMap<Object>(attributesSize);
 		for (int j = 0; j < attributesSize; j++) {
 			String key = input.readUTF();
 			byte type = input.readByte();
@@ -116,7 +117,7 @@ public class MarkerSnapshotReader_2 extends MarkerSnapshotReader {
 		return result.isEmpty() ? null : result;
 	}
 
-	private MarkerInfo readMarkerInfo(DataInputStream input, List readTypes) throws IOException, CoreException {
+	private MarkerInfo readMarkerInfo(DataInputStream input, List<String> readTypes) throws IOException, CoreException {
 		MarkerInfo info = new MarkerInfo();
 		info.setId(input.readLong());
 		byte constant = input.readByte();
@@ -127,7 +128,7 @@ public class MarkerSnapshotReader_2 extends MarkerSnapshotReader {
 				readTypes.add(type);
 				break;
 			case INDEX :
-				info.setType((String) readTypes.get(input.readInt()));
+				info.setType(readTypes.get(input.readInt()));
 				break;
 			default :
 				//if we get here the marker file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerTypeDefinitionCache.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerTypeDefinitionCache.java
index 18a11fb..25bc903 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerTypeDefinitionCache.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerTypeDefinitionCache.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -18,7 +19,7 @@ import org.eclipse.core.runtime.*;
 public class MarkerTypeDefinitionCache {
 	static class MarkerTypeDefinition {
 		boolean isPersistent = false;
-		Set superTypes;
+		Set<String> superTypes;
 
 		MarkerTypeDefinition(IExtension ext) {
 			IConfigurationElement[] elements = ext.getConfigurationElements();
@@ -30,7 +31,7 @@ public class MarkerTypeDefinitionCache {
 					String aType = element.getAttribute("type"); //$NON-NLS-1$
 					if (aType != null) {
 						if (superTypes == null)
-							superTypes = new HashSet(8);
+							superTypes = new HashSet<String>(8);
 						//note that all marker type names will be in the intern table
 						//already because there is invariably a constant to describe
 						//the type name
@@ -56,15 +57,15 @@ public class MarkerTypeDefinitionCache {
 	/**
 	 * The marker type definitions.  Maps String (markerId) -> MarkerTypeDefinition
 	 */
-	protected HashMap definitions;
+	protected HashMap<String, MarkerTypeDefinition> definitions;
 
 	/** Constructs a new type cache.
 	 */
 	public MarkerTypeDefinitionCache() {
 		loadDefinitions();
-		HashSet toCompute = new HashSet(definitions.keySet());
-		for (Iterator i = definitions.keySet().iterator(); i.hasNext();) {
-			String markerId = (String) i.next();
+		HashSet<String> toCompute = new HashSet<String>(definitions.keySet());
+		for (Iterator<String> i = definitions.keySet().iterator(); i.hasNext();) {
+			String markerId = i.next();
 			if (toCompute.contains(markerId))
 				computeSuperTypes(markerId, toCompute);
 		}
@@ -78,23 +79,23 @@ public class MarkerTypeDefinitionCache {
 	 * @return The transitive set of super types for this marker, or null
 	 * if this marker is not defined or has no super types.
 	 */
-	private Set computeSuperTypes(String markerId, Set toCompute) {
-		MarkerTypeDefinition def = (MarkerTypeDefinition) definitions.get(markerId);
+	private Set<String> computeSuperTypes(String markerId, Set<String> toCompute) {
+		MarkerTypeDefinition def = definitions.get(markerId);
 		if (def == null || def.superTypes == null) {
 			//nothing to do if there are no supertypes
 			toCompute.remove(markerId);
 			return null;
 		}
-		Set transitiveSuperTypes = new HashSet(def.superTypes);
-		for (Iterator it = def.superTypes.iterator(); it.hasNext();) {
-			String superId = (String) it.next();
-			Set toAdd = null;
+		Set<String> transitiveSuperTypes = new HashSet<String>(def.superTypes);
+		for (Iterator<String> it = def.superTypes.iterator(); it.hasNext();) {
+			String superId = it.next();
+			Set<String> toAdd = null;
 			if (toCompute.contains(superId)) {
 				//this type's super types have not been compute yet. Do recursive call
 				toAdd = computeSuperTypes(superId, toCompute);
 			} else {
 				// we have already computed this super type's super types (or it doesn't exist)
-				MarkerTypeDefinition parentDef = (MarkerTypeDefinition) definitions.get(superId);
+				MarkerTypeDefinition parentDef = definitions.get(superId);
 				if (parentDef != null)
 					toAdd = parentDef.superTypes;
 			}
@@ -110,7 +111,7 @@ public class MarkerTypeDefinitionCache {
 	 * Returns true if the given marker type is defined to be persistent.
 	 */
 	public boolean isPersistent(String type) {
-		MarkerTypeDefinition def = (MarkerTypeDefinition) definitions.get(type);
+		MarkerTypeDefinition def = definitions.get(type);
 		return def != null && def.isPersistent;
 	}
 
@@ -121,14 +122,14 @@ public class MarkerTypeDefinitionCache {
 		//types are considered super types of themselves
 		if (type.equals(superType))
 			return true;
-		MarkerTypeDefinition def = (MarkerTypeDefinition) definitions.get(type);
+		MarkerTypeDefinition def = definitions.get(type);
 		return def != null && def.superTypes != null && def.superTypes.contains(superType);
 	}
 
 	private void loadDefinitions() {
 		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_MARKERS);
 		IExtension[] types = point.getExtensions();
-		definitions = new HashMap(types.length);
+		definitions = new HashMap<String, MarkerTypeDefinition>(types.length);
 		for (int i = 0; i < types.length; i++) {
 			String markerId = types[i].getUniqueIdentifier();
 			if (markerId != null)
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerWriter.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerWriter.java
index 7e5c6a6..7b6241d 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerWriter.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/MarkerWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -82,7 +83,7 @@ public class MarkerWriter {
 	 * CREATION_TIME -> long
 	 * 	
 	 */
-	public void save(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List writtenTypes) throws IOException {
+	public void save(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List<String> writtenTypes) throws IOException {
 		// phantom resources don't have markers
 		if (info.isSet(ICoreConstants.M_PHANTOM))
 			return;
@@ -150,7 +151,7 @@ public class MarkerWriter {
 		// always write out the count...even if its zero. this will help
 		// use pick up marker deletions from our snapshot.
 		output.writeInt(count);
-		List writtenTypes = new ArrayList();
+		List<String> writtenTypes = new ArrayList<String>();
 		for (int i = 0; i < elements.length; i++)
 			if (isPersistent[i])
 				write((MarkerInfo) elements[i], output, writtenTypes);
@@ -160,12 +161,12 @@ public class MarkerWriter {
 	/* 
 	 * Write out the given marker attributes to the given output stream.
 	 */
-	private void write(Map attributes, DataOutputStream output) throws IOException {
+	private void write(Map<String, Object> attributes, DataOutputStream output) throws IOException {
 		output.writeShort(attributes.size());
-		for (Iterator i = attributes.keySet().iterator(); i.hasNext();) {
-			String key = (String) i.next();
+		for (Map.Entry<String, Object> e : attributes.entrySet()) {
+			String key = e.getKey();
 			output.writeUTF(key);
-			Object value = attributes.get(key);
+			Object value = e.getValue();
 			if (value instanceof Integer) {
 				output.writeByte(ATTRIBUTE_INTEGER);
 				output.writeInt(((Integer) value).intValue());
@@ -187,7 +188,7 @@ public class MarkerWriter {
 		}
 	}
 
-	private void write(MarkerInfo info, DataOutputStream output, List writtenTypes) throws IOException {
+	private void write(MarkerInfo info, DataOutputStream output, List<String> writtenTypes) throws IOException {
 		output.writeLong(info.getId());
 		// if we have already written the type once, then write an integer
 		// constant to represent it instead to remove duplication
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
index 1628cb7..7a7ac36 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     Serge Beauchamp (Freescale Semiconductor) - [252996] add resource filtering
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Group and Project Path Variable Support
  * Markus Schorn (Wind River) - [306575] Save snapshot location with project
+ * James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -155,9 +156,9 @@ public class ModelObjectWriter implements IModelObjectConstants {
 		try {
 			file = new SafeFileOutputStream(location.toOSString(), tempPath);
 			write(object, file);
+			file.close();
 		} finally {
-			if (file != null)
-				file.close();
+			FileUtil.safeClose(file);
 		}
 	}
 
@@ -170,8 +171,10 @@ public class ModelObjectWriter implements IModelObjectConstants {
 			write(object, writer);
 			writer.flush();
 			writer.close();
+			if (writer.checkError())
+				throw new IOException();
 		} finally {
-			output.close();
+			FileUtil.safeClose(output);
 		}
 	}
 
@@ -217,26 +220,26 @@ public class ModelObjectWriter implements IModelObjectConstants {
 			write(PROJECTS, PROJECT, getReferencedProjects(description), writer);
 			write(BUILD_SPEC, Arrays.asList(description.getBuildSpec(false)), writer);
 			write(NATURES, NATURE, description.getNatureIds(false), writer);
-			HashMap links = description.getLinks();
+			HashMap<IPath, LinkDescription> links = description.getLinks();
 			if (links != null) {
 				// ensure consistent order of map elements
-				List sorted = new ArrayList(links.values());
+				List<LinkDescription> sorted = new ArrayList<LinkDescription>(links.values());
 				Collections.sort(sorted);
 				write(LINKED_RESOURCES, sorted, writer);
 			}
-			HashMap filters = description.getFilters();
+			HashMap<IPath, LinkedList<FilterDescription>> filters = description.getFilters();
 			if (filters != null) {
-				List sorted = new ArrayList();
-				for (Iterator it = filters.values().iterator(); it.hasNext();) {
-					List list = (List) it.next();
+				List<FilterDescription> sorted = new ArrayList<FilterDescription>();
+				for (Iterator<LinkedList<FilterDescription>> it = filters.values().iterator(); it.hasNext();) {
+					List<FilterDescription> list = it.next();
 					sorted.addAll(list);
 				}
 				Collections.sort(sorted);
 				write(FILTERED_RESOURCES, sorted, writer);
 			}
-			HashMap variables = description.getVariables();
+			HashMap<String, VariableDescription> variables = description.getVariables();
 			if (variables != null) {
-				List sorted = new ArrayList(variables.values());
+				List<VariableDescription> sorted = new ArrayList<VariableDescription>(variables.values());
 				Collections.sort(sorted);
 				write(VARIABLE_LIST, sorted, writer);
 			}
@@ -244,25 +247,25 @@ public class ModelObjectWriter implements IModelObjectConstants {
 		writer.endTag(PROJECT_DESCRIPTION);
 	}
 
-	protected void write(String name, Collection collection, XMLWriter writer) throws IOException {
+	protected void write(String name, Collection<?> collection, XMLWriter writer) throws IOException {
 		writer.startTag(name, null);
-		for (Iterator it = collection.iterator(); it.hasNext();)
-			write(it.next(), writer);
+		for (Object o : collection)
+			write(o, writer);
 		writer.endTag(name);
 	}
 
 	/**
 	 * Write maps of (String, String).
 	 */
-	protected void write(String name, Map table, XMLWriter writer) {
+	protected void write(String name, Map<String, String> table, XMLWriter writer) {
 		writer.startTag(name, null);
 		if (table != null) {
 			// ensure consistent order of map elements
-			List sorted = new ArrayList(table.keySet());
+			List<String> sorted = new ArrayList<String>(table.keySet());
 			Collections.sort(sorted);
 
-			for (Iterator it = sorted.iterator(); it.hasNext();) {
-				String key = (String) it.next();
+			for (Iterator<String> it = sorted.iterator(); it.hasNext();) {
+				String key = it.next();
 				Object value = table.get(key);
 				writer.startTag(DICTIONARY, null);
 				{
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/NatureManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/NatureManager.java
index 3795989..b78f1d9 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/NatureManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/NatureManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -25,13 +26,13 @@ import org.eclipse.osgi.util.NLS;
  */
 public class NatureManager implements ILifecycleListener, IManager {
 	//maps String (nature ID) -> descriptor objects
-	private Map descriptors;
+	private Map<String, IProjectNatureDescriptor> descriptors;
 
 	//maps IProject -> String[] of enabled natures for that project
-	private final Map natureEnablements = Collections.synchronizedMap(new HashMap(20));
+	private final Map<Project, String[]> natureEnablements = new HashMap<Project, String[]>(20);
 
 	//maps String (builder ID) -> String (nature ID)
-	private Map buildersToNatures;
+	private Map<String, String> buildersToNatures;
 	//colour constants used in cycle detection algorithm
 	private static final byte WHITE = 0;
 	private static final byte GREY = 1;
@@ -56,9 +57,9 @@ public class NatureManager implements ILifecycleListener, IManager {
 			return natureIds;
 
 		//set of the nature ids being validated (String (id))
-		HashSet candidates = new HashSet(count * 2);
+		HashSet<String> candidates = new HashSet<String>(count * 2);
 		//table of String(set ID) -> ArrayList (nature IDs that belong to that set)
-		HashMap setsToNatures = new HashMap(count);
+		HashMap<String, ArrayList<String>> setsToNatures = new HashMap<String, ArrayList<String>>(count);
 		for (int i = 0; i < count; i++) {
 			String id = natureIds[i];
 			ProjectNatureDescriptor desc = (ProjectNatureDescriptor) getNatureDescriptor(id);
@@ -70,17 +71,17 @@ public class NatureManager implements ILifecycleListener, IManager {
 			String[] setIds = desc.getNatureSetIds();
 			for (int j = 0; j < setIds.length; j++) {
 				String set = setIds[j];
-				ArrayList current = (ArrayList) setsToNatures.get(set);
+				ArrayList<String> current = setsToNatures.get(set);
 				if (current == null) {
-					current = new ArrayList(5);
+					current = new ArrayList<String>(5);
 					setsToNatures.put(set, current);
 				}
 				current.add(id);
 			}
 		}
 		//now remove all natures that belong to sets with more than one member
-		for (Iterator it = setsToNatures.values().iterator(); it.hasNext();) {
-			ArrayList setMembers = (ArrayList) it.next();
+		for (Iterator<ArrayList<String>> it = setsToNatures.values().iterator(); it.hasNext();) {
+			ArrayList<String> setMembers = it.next();
 			if (setMembers.size() > 1) {
 				candidates.removeAll(setMembers);
 			}
@@ -88,7 +89,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 		//now walk over the set and ensure all pre-requisite natures are present
 		//need to walk in prereq order because if A requires B and B requires C, and C is
 		//disabled for some other reason, we must ensure both A and B are disabled
-		String[] orderedCandidates = (String[]) candidates.toArray(new String[candidates.size()]);
+		String[] orderedCandidates = candidates.toArray(new String[candidates.size()]);
 		orderedCandidates = sortNatureSet(orderedCandidates);
 		for (int i = 0; i < orderedCandidates.length; i++) {
 			String id = orderedCandidates[i];
@@ -102,7 +103,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 			}
 		}
 		//remaining candidates are enabled
-		return (String[]) candidates.toArray(new String[candidates.size()]);
+		return candidates.toArray(new String[candidates.size()]);
 	}
 
 	/* (non-Javadoc)
@@ -110,7 +111,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 */
 	public synchronized IProjectNatureDescriptor getNatureDescriptor(String natureId) {
 		lazyInitialize();
-		return (IProjectNatureDescriptor) descriptors.get(natureId);
+		return descriptors.get(natureId);
 	}
 
 	/* (non-Javadoc)
@@ -118,13 +119,13 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 */
 	public synchronized IProjectNatureDescriptor[] getNatureDescriptors() {
 		lazyInitialize();
-		Collection values = descriptors.values();
-		return (IProjectNatureDescriptor[]) values.toArray(new IProjectNatureDescriptor[values.size()]);
+		Collection<IProjectNatureDescriptor> values = descriptors.values();
+		return values.toArray(new IProjectNatureDescriptor[values.size()]);
 	}
 
 	public void handleEvent(LifecycleEvent event) {
 		switch (event.kind) {
-			case LifecycleEvent.PRE_PROJECT_CHANGE :
+			case LifecycleEvent.POST_PROJECT_CHANGE :
 			case LifecycleEvent.PRE_PROJECT_CLOSE :
 			case LifecycleEvent.PRE_PROJECT_DELETE :
 			case LifecycleEvent.PRE_PROJECT_MOVE :
@@ -164,15 +165,16 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 * new description are removed.  Updates the old description so that it reflects
 	 * the new set of the natures.  Errors are added to the given multi-status.
 	 */
+	@SuppressWarnings("unchecked")
 	public void configureNatures(Project project, ProjectDescription oldDescription, ProjectDescription newDescription, MultiStatus status) {
 		// Be careful not to rely on much state because (de)configuring a nature
 		// may well result in recursive calls to this method.
-		HashSet oldNatures = new HashSet(Arrays.asList(oldDescription.getNatureIds(false)));
-		HashSet newNatures = new HashSet(Arrays.asList(newDescription.getNatureIds(false)));
+		HashSet<String> oldNatures = new HashSet<String>(Arrays.asList(oldDescription.getNatureIds(false)));
+		HashSet<String> newNatures = new HashSet<String>(Arrays.asList(newDescription.getNatureIds(false)));
 		if (oldNatures.equals(newNatures))
 			return;
-		HashSet deletions = (HashSet) oldNatures.clone();
-		HashSet additions = (HashSet) newNatures.clone();
+		HashSet<String> deletions = (HashSet<String>) oldNatures.clone();
+		HashSet<String> additions = (HashSet<String>) newNatures.clone();
 		additions.removeAll(oldNatures);
 		deletions.removeAll(newNatures);
 		//do validation of the changes.  If any single change is invalid, fail the whole operation
@@ -193,12 +195,12 @@ public class NatureManager implements ILifecycleListener, IManager {
 		//(de)configure in topological order to maintain consistency of configured set
 		String[] ordered = null;
 		if (deletions.size() > 0) {
-			ordered = sortNatureSet((String[]) deletions.toArray(new String[deletions.size()]));
+			ordered = sortNatureSet(deletions.toArray(new String[deletions.size()]));
 			for (int i = ordered.length; --i >= 0;)
 				deconfigureNature(project, ordered[i], status);
 		}
 		if (additions.size() > 0) {
-			ordered = sortNatureSet((String[]) additions.toArray(new String[additions.size()]));
+			ordered = sortNatureSet(additions.toArray(new String[additions.size()]));
 			for (int i = 0; i < ordered.length; i++)
 				configureNature(project, ordered[i], status);
 		}
@@ -276,8 +278,8 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 * Marks all nature descriptors that are involved in cycles
 	 */
 	private void detectCycles() {
-		Collection values = descriptors.values();
-		ProjectNatureDescriptor[] natures = (ProjectNatureDescriptor[]) values.toArray(new ProjectNatureDescriptor[values.size()]);
+		Collection<IProjectNatureDescriptor> values = descriptors.values();
+		ProjectNatureDescriptor[] natures = values.toArray(new ProjectNatureDescriptor[values.size()]);
 		for (int i = 0; i < natures.length; i++)
 			if (natures[i].colour == WHITE)
 				hasCycles(natures[i]);
@@ -296,7 +298,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 */
 	public synchronized String findNatureForBuilder(String builderID) {
 		if (buildersToNatures == null) {
-			buildersToNatures = new HashMap(10);
+			buildersToNatures = new HashMap<String, String>(10);
 			IProjectNatureDescriptor[] descs = getNatureDescriptors();
 			for (int i = 0; i < descs.length; i++) {
 				String natureId = descs[i].getNatureId();
@@ -307,7 +309,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 				}
 			}
 		}
-		return (String) buildersToNatures.get(builderID);
+		return buildersToNatures.get(builderID);
 	}
 
 	private synchronized void flushEnablements(IProject project) {
@@ -319,7 +321,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 * or null if there is nothing in the cache.
 	 */
 	protected synchronized String[] getEnabledNatures(Project project) {
-		String[] enabled = (String[]) natureEnablements.get(project);
+		String[] enabled = natureEnablements.get(project);
 		if (enabled != null)
 			return enabled;
 		enabled = computeNatureEnablements(project);
@@ -403,7 +405,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 	/**
 	 * Perform depth-first insertion of the given nature ID into the result list.
 	 */
-	protected void insert(ArrayList list, Set seen, String id) {
+	protected void insert(ArrayList<String> list, Set<String> seen, String id) {
 		if (seen.contains(id))
 			return;
 		seen.add(id);
@@ -440,7 +442,7 @@ public class NatureManager implements ILifecycleListener, IManager {
 			return;
 		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_NATURES);
 		IExtension[] extensions = point.getExtensions();
-		descriptors = new HashMap(extensions.length * 2 + 1);
+		descriptors = new HashMap<String, IProjectNatureDescriptor>(extensions.length * 2 + 1);
 		for (int i = 0, imax = extensions.length; i < imax; i++) {
 			IProjectNatureDescriptor desc = null;
 			try {
@@ -467,19 +469,19 @@ public class NatureManager implements ILifecycleListener, IManager {
 		int count = natureIds.length;
 		if (count == 0)
 			return natureIds;
-		ArrayList result = new ArrayList(count);
-		HashSet seen = new HashSet(count);//for cycle and duplicate detection
+		ArrayList<String> result = new ArrayList<String>(count);
+		HashSet<String> seen = new HashSet<String>(count);//for cycle and duplicate detection
 		for (int i = 0; i < count; i++)
 			insert(result, seen, natureIds[i]);
 		//remove added prerequisites that didn't exist in original list
 		seen.clear();
 		seen.addAll(Arrays.asList(natureIds));
-		for (Iterator it = result.iterator(); it.hasNext();) {
+		for (Iterator<String> it = result.iterator(); it.hasNext();) {
 			Object id = it.next();
 			if (!seen.contains(id))
 				it.remove();
 		}
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	public void startup(IProgressMonitor monitor) {
@@ -496,11 +498,11 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 * @return An OK status if all additions are valid, and an error status 
 	 * 	if any of the additions introduce new inconsistencies.
 	 */
-	protected IStatus validateAdditions(HashSet newNatures, HashSet additions, IProject project) {
+	protected IStatus validateAdditions(HashSet<String> newNatures, HashSet<String> additions, IProject project) {
 		Boolean hasLinks = null;//three states: true, false, null (not yet computed)
 		//perform checks in order from least expensive to most expensive
-		for (Iterator added = additions.iterator(); added.hasNext();) {
-			String id = (String) added.next();
+		for (Iterator<String> added = additions.iterator(); added.hasNext();) {
+			String id = added.next();
 			// check for adding a nature that is not available. 
 			IProjectNatureDescriptor desc = getNatureDescriptor(id);
 			if (desc == null) {
@@ -518,8 +520,8 @@ public class NatureManager implements ILifecycleListener, IManager {
 				}
 			}
 			// check for adding a nature that creates a duplicated set member.
-			for (Iterator all = newNatures.iterator(); all.hasNext();) {
-				String current = (String) all.next();
+			for (Iterator<String> all = newNatures.iterator(); all.hasNext();) {
+				String current = all.next();
 				if (!current.equals(id)) {
 					String overlap = hasSetOverlap(desc, getNatureDescriptor(current));
 					if (overlap != null) {
@@ -568,10 +570,10 @@ public class NatureManager implements ILifecycleListener, IManager {
 	 * @return An OK status if all removals are valid, and a not OK status 
 	 * 	if any of the deletions introduce new inconsistencies.
 	 */
-	protected IStatus validateRemovals(HashSet newNatures, HashSet deletions) {
+	protected IStatus validateRemovals(HashSet<String> newNatures, HashSet<String> deletions) {
 		//iterate over new nature set, and ensure that none of their prerequisites are being deleted
-		for (Iterator it = newNatures.iterator(); it.hasNext();) {
-			String currentID = (String) it.next();
+		for (Iterator<String> it = newNatures.iterator(); it.hasNext();) {
+			String currentID = it.next();
 			IProjectNatureDescriptor desc = getNatureDescriptor(currentID);
 			if (desc != null) {
 				String[] required = desc.getRequiredNatureIds();
@@ -596,9 +598,9 @@ public class NatureManager implements ILifecycleListener, IManager {
 		MultiStatus result = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INVALID_NATURE_SET, msg, null);
 
 		//set of the nature ids being validated (String (id))
-		HashSet natures = new HashSet(count * 2);
+		HashSet<String> natures = new HashSet<String>(count * 2);
 		//set of nature sets for which a member nature has been found (String (id))
-		HashSet sets = new HashSet(count);
+		HashSet<String> sets = new HashSet<String>(count);
 		for (int i = 0; i < count; i++) {
 			String id = natureIds[i];
 			ProjectNatureDescriptor desc = (ProjectNatureDescriptor) getNatureDescriptor(id);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableManager.java
index 6d79984..fec3029 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -26,8 +27,8 @@ import org.eclipse.osgi.util.NLS;
 public class PathVariableManager implements IPathVariableManager, IManager {
 
 	static final String VARIABLE_PREFIX = "pathvariable."; //$NON-NLS-1$
-	private Set listeners;
-	private Map/*<IProject, Set<Project>*/ projectListeners;
+	private Set<IPathVariableChangeListener> listeners;
+	private Map<IProject, Collection<IPathVariableChangeListener>> projectListeners;
 
 	private Preferences preferences;
 
@@ -35,8 +36,8 @@ public class PathVariableManager implements IPathVariableManager, IManager {
 	 * Constructor for the class.
 	 */
 	public PathVariableManager() {
-		this.listeners = Collections.synchronizedSet(new HashSet());
-		this.projectListeners = Collections.synchronizedMap(new HashMap());
+		this.listeners = Collections.synchronizedSet(new HashSet<IPathVariableChangeListener>());
+		this.projectListeners = Collections.synchronizedMap(new HashMap<IProject, Collection<IPathVariableChangeListener>>());
 		this.preferences = ResourcesPlugin.getPlugin().getPluginPreferences();
 	}
 
@@ -49,12 +50,12 @@ public class PathVariableManager implements IPathVariableManager, IManager {
 	}
 
 	synchronized public void addChangeListener(IPathVariableChangeListener listener, IProject project) {
-		Object list = projectListeners.get(project);
+		Collection<IPathVariableChangeListener> list = projectListeners.get(project);
 		if (list == null) {
-			list = Collections.synchronizedSet(new HashSet());
+			list = Collections.synchronizedSet(new HashSet<IPathVariableChangeListener>());
 			projectListeners.put(project, list);
 		}
-		((Set) list).add(listener);
+		list.add(listener);
 	}
 
 	/**
@@ -97,7 +98,7 @@ public class PathVariableManager implements IPathVariableManager, IManager {
 		fireVariableChangeEvent(this.listeners, name, value, type);
 	}
 
-	private void fireVariableChangeEvent(Set list, String name, IPath value, int type) {
+	private void fireVariableChangeEvent(Collection<IPathVariableChangeListener> list, String name, IPath value, int type) {
 		if (list.size() == 0)
 			return;
 		// use a separate collection to avoid interference of simultaneous additions/removals 
@@ -119,9 +120,9 @@ public class PathVariableManager implements IPathVariableManager, IManager {
 	}
 
 	public void fireVariableChangeEvent(IProject project, String name, IPath value, int type) {
-		Object list = projectListeners.get(project);
+		Collection<IPathVariableChangeListener> list = projectListeners.get(project);
 		if (list != null)
-			fireVariableChangeEvent(((Set) list), name, value, type);
+			fireVariableChangeEvent(list, name, value, type);
 	}
 
 	/**
@@ -135,7 +136,7 @@ public class PathVariableManager implements IPathVariableManager, IManager {
 	 * @see org.eclipse.core.resources.IPathVariableManager#getPathVariableNames()
 	 */
 	public String[] getPathVariableNames() {
-		List result = new LinkedList();
+		List<String> result = new LinkedList<String>();
 		String[] names = preferences.propertyNames();
 		for (int i = 0; i < names.length; i++) {
 			if (names[i].startsWith(VARIABLE_PREFIX)) {
@@ -151,7 +152,7 @@ public class PathVariableManager implements IPathVariableManager, IManager {
 					result.add(key);
 			}
 		}
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
@@ -184,10 +185,10 @@ public class PathVariableManager implements IPathVariableManager, IManager {
 	}
 
 	synchronized public void removeChangeListener(IPathVariableChangeListener listener, IProject project) {
-		Object list = projectListeners.get(project);
+		Collection<IPathVariableChangeListener> list = projectListeners.get(project);
 		if (list != null) {
-			((Set) list).remove(listener);
-			if (((Set) list).isEmpty())
+			list.remove(listener);
+			if (list.isEmpty())
 				projectListeners.remove(project);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableUtil.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableUtil.java
index a214977..2ec6802 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableUtil.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PathVariableUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 Freescale Semiconductor and others.
+ * Copyright (c) 2008, 2011 Freescale Semiconductor and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -357,7 +358,7 @@ public class PathVariableUtil {
 	}
 
 	private static String[] splitPathComponents(String userFormat) {
-		ArrayList list = new ArrayList();
+		ArrayList<String> list = new ArrayList<String>();
 		StringBuffer buffer = new StringBuffer();
 		for (int i = 0; i < userFormat.length(); i++) {
 			char c = userFormat.charAt(i);
@@ -370,7 +371,7 @@ public class PathVariableUtil {
 		}
 		if (buffer.length() > 0)
 			list.add(buffer.toString());
-		return (String[]) list.toArray(new String[0]);
+		return list.toArray(new String[0]);
 	}
 
 	public static String convertToUserEditableFormatInternal(String value, boolean locationFormat) {
@@ -417,7 +418,7 @@ public class PathVariableUtil {
 	 * returned will be {"${ECLIPSE_HOME}" "/plugins"}
 	 */
 	static String[] splitVariablesAndContent(String value) {
-		LinkedList result = new LinkedList();
+		LinkedList<String> result = new LinkedList<String>();
 		while (true) {
 			// we check if the value contains referenced variables with ${VAR}
 			int index = value.indexOf("${"); //$NON-NLS-1$
@@ -432,7 +433,7 @@ public class PathVariableUtil {
 		}
 		if (value.length() > 0)
 			result.add(value);
-		return (String[]) result.toArray(new String[0]);
+		return result.toArray(new String[0]);
 	}
 
 	/*
@@ -445,7 +446,7 @@ public class PathVariableUtil {
 	 * {"ECLIPSE_HOME", "FOO"}.
 	 */
 	static String[] splitVariableNames(String value) {
-		LinkedList result = new LinkedList();
+		LinkedList<String> result = new LinkedList<String>();
 		while (true) {
 			int index = value.indexOf("${"); //$NON-NLS-1$
 			if (index != -1) {
@@ -455,7 +456,7 @@ public class PathVariableUtil {
 			} else
 				break;
 		}
-		return (String[]) result.toArray(new String[0]);
+		return result.toArray(new String[0]);
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java
index 2f8c58e..4c9915c 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -24,6 +25,7 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 
 	// DEFAULTS
 	public static final boolean PREF_AUTO_REFRESH_DEFAULT = false;
+	public static final boolean PREF_LIGHTWEIGHT_AUTO_REFRESH_DEFAULT = false;
 	public static final boolean PREF_DISABLE_LINKING_DEFAULT = false;
 	public static final String PREF_ENCODING_DEFAULT = ""; //$NON-NLS-1$
 	public static final boolean PREF_AUTO_BUILDING_DEFAULT = true;
@@ -46,9 +48,10 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
 	 */
 	public void initializeDefaultPreferences() {
-		IEclipsePreferences node = new DefaultScope().getNode(ResourcesPlugin.PI_RESOURCES);
+		IEclipsePreferences node = DefaultScope.INSTANCE.getNode(ResourcesPlugin.PI_RESOURCES);
 		// auto-refresh default
 		node.putBoolean(ResourcesPlugin.PREF_AUTO_REFRESH, PREF_AUTO_REFRESH_DEFAULT);
+		node.putBoolean(ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH, PREF_LIGHTWEIGHT_AUTO_REFRESH_DEFAULT);
 
 		// linked resources default
 		node.putBoolean(ResourcesPlugin.PREF_DISABLE_LINKING, PREF_DISABLE_LINKING_DEFAULT);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java
index 9561e20..8eac4c3 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java
@@ -11,6 +11,7 @@
  *     Anton Leherbauer (Wind River) - [198591] Allow Builder to specify scheduling rule
  *     Francis Lynch (Wind River) - [301563] Save and load tree snapshots
  *     Markus Schorn (Wind River) - [306575] Save snapshot location with project
+ *     Broadcom Corporation - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -90,12 +91,8 @@ public class Project extends Container implements IProject {
 			current.setReferencedProjects(newReferences);
 			flushOrder = true;
 		}
-		oldReferences = current.getDynamicReferences();
-		newReferences = description.getDynamicReferences();
-		if (!Arrays.equals(oldReferences, newReferences)) {
-			current.setDynamicReferences(newReferences);
-			flushOrder = true;
-		}
+		// Update the dynamic state
+		flushOrder |= current.updateDynamicState(description);
 
 		if (flushOrder)
 			workspace.flushBuildOrder();
@@ -112,15 +109,31 @@ public class Project extends Container implements IProject {
 	 * @see IProject#build(int, IProgressMonitor)
 	 */
 	public void build(int trigger, IProgressMonitor monitor) throws CoreException {
-		internalBuild(trigger, null, null, monitor);
+		if (!isAccessible())
+			return;		
+		internalBuild(getActiveBuildConfig(), trigger, null, null, monitor);
 	}
 
 	/* (non-Javadoc)
 	 * @see IProject#build(int, String, Map, IProgressMonitor)
 	 */
-	public void build(int trigger, String builderName, Map args, IProgressMonitor monitor) throws CoreException {
+	public void build(int trigger, String builderName, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
 		Assert.isNotNull(builderName);
-		internalBuild(trigger, builderName, args, monitor);
+		if (!isAccessible())
+			return;
+		internalBuild(getActiveBuildConfig(), trigger, builderName, args, monitor);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see IProject#build(org.eclipse.core.resources.IBuildConfiguration, int, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void build(IBuildConfiguration config, int trigger, IProgressMonitor monitor) throws CoreException {
+		Assert.isNotNull(config);
+		// If project isn't accessible, or doesn't contain the build configuration, nothing to do.
+		if (!isAccessible() || !hasBuildConfig(config.getName()))
+			return;
+		internalBuild(config, trigger, null, null, monitor);
 	}
 
 	/**
@@ -353,6 +366,42 @@ public class Project extends Container implements IProject {
 		ProjectPreferences.deleted(this);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IProject#getActiveBuildConfig()
+	 */
+	public IBuildConfiguration getActiveBuildConfig() throws CoreException {
+		ResourceInfo info = getResourceInfo(false, false);
+		int flags = getFlags(info);
+		checkAccessible(flags);
+		return internalGetActiveBuildConfig();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IProject#getBuildConfig(java.lang.String)
+	 */
+	public IBuildConfiguration getBuildConfig(String configName) throws CoreException {
+		if (configName == null)
+			return getActiveBuildConfig();
+		ProjectInfo info = (ProjectInfo) getResourceInfo(false, false);
+		checkAccessible(getFlags(info));
+		IBuildConfiguration[] configs = internalGetBuildConfigs(false);
+		for (int i = 0; i < configs.length; i++) {
+			if (configs[i].getName().equals(configName)) {
+				return configs[i];
+			}
+		}
+		throw new ResourceException(IResourceStatus.BUILD_CONFIGURATION_NOT_FOUND, getFullPath(), null, null);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IProject#getBuildConfigs()
+	 */
+	public IBuildConfiguration[] getBuildConfigs() throws CoreException {
+		ProjectInfo info = (ProjectInfo) getResourceInfo(false, false);
+		checkAccessible(getFlags(info));
+		return internalGetBuildConfigs(true);
+	}
+
 	/*
 	 *  (non-Javadoc)
 	 * @see IProject#getContentTypeMatcher
@@ -450,6 +499,21 @@ public class Project extends Container implements IProject {
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IProject#getReferencedBuildConfigs(java.lang.String, boolean)
+	 */
+	public IBuildConfiguration[] getReferencedBuildConfigs(String configName, boolean includeMissing) throws CoreException {
+		ResourceInfo info = getResourceInfo(false, false);
+		checkAccessible(getFlags(info));
+		ProjectDescription description = ((ProjectInfo) info).getDescription();
+		//if the project is currently in the middle of being created, the description might not be available yet
+		if (description == null)
+			checkAccessible(NULL_FLAG);
+		if (!hasBuildConfig(configName))
+			throw new ResourceException(IResourceStatus.BUILD_CONFIGURATION_NOT_FOUND, getFullPath(), null, null);
+		return internalGetReferencedBuildConfigs(configName, includeMissing);
+	}
+
+	/* (non-Javadoc)
 	 * @see IProject#getReferencedProjects()
 	 */
 	public IProject[] getReferencedProjects() throws CoreException {
@@ -467,7 +531,7 @@ public class Project extends Container implements IProject {
 	 */
 	public IProject[] getReferencingProjects() {
 		IProject[] projects = workspace.getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
-		List result = new ArrayList(projects.length);
+		List<IProject> result = new ArrayList<IProject>(projects.length);
 		for (int i = 0; i < projects.length; i++) {
 			Project project = (Project) projects[i];
 			if (!project.isAccessible())
@@ -482,7 +546,7 @@ public class Project extends Container implements IProject {
 					break;
 				}
 		}
-		return (IProject[]) result.toArray(new IProject[result.size()]);
+		return result.toArray(new IProject[result.size()]);
 	}
 
 	/* (non-Javadoc)
@@ -505,6 +569,15 @@ public class Project extends Container implements IProject {
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IProject#hasBuildConfig(java.lang.String)
+	 */
+	public boolean hasBuildConfig(String configName) throws CoreException {
+		ProjectInfo info = (ProjectInfo) getResourceInfo(false, false);
+		checkAccessible(getFlags(info));
+		return internalHasBuildConfig(configName);
+	}
+
+	/* (non-Javadoc)
 	 * @see IProject#hasNature(String)
 	 */
 	public boolean hasNature(String natureID) throws CoreException {
@@ -520,7 +593,7 @@ public class Project extends Container implements IProject {
 	/**
 	 * Implements all build methods on IProject.
 	 */
-	protected void internalBuild(final int trigger, final String builderName, final Map args, IProgressMonitor monitor) throws CoreException {
+	protected void internalBuild(final IBuildConfiguration config, final int trigger, final String builderName, final Map<String, String> args, IProgressMonitor monitor) throws CoreException {
 		workspace.run(new IWorkspaceRunnable() {
 			public void run(IProgressMonitor innerMonitor) throws CoreException {
 				innerMonitor = Policy.monitorFor(innerMonitor);
@@ -536,13 +609,13 @@ public class Project extends Container implements IProject {
 					} finally {
 						workspace.endOperation(rule, false, innerMonitor);
 					}
-					final ISchedulingRule buildRule = workspace.getBuildManager().getRule(Project.this, trigger, builderName, args);
+					final ISchedulingRule buildRule = workspace.getBuildManager().getRule(config, trigger, builderName, args);
 					try {
 						IStatus result;
 						workspace.prepareOperation(buildRule, innerMonitor);
 						//don't open the tree eagerly because it will be wasted if no build occurs
 						workspace.beginOperation(false);
-						result = workspace.getBuildManager().build(Project.this, trigger, builderName, args, Policy.subMonitorFor(innerMonitor, Policy.opWork));
+						result = workspace.getBuildManager().build(config, trigger, builderName, args, Policy.subMonitorFor(innerMonitor, Policy.opWork));
 						if (!result.isOK())
 							throw new ResourceException(result);
 					} finally {
@@ -714,6 +787,32 @@ public class Project extends Container implements IProject {
 	}
 
 	/**
+	 * Like {@link #getActiveBuildConfig()} but doesn't check accessibility.
+	 * Project must be accessible.
+	 * @see #getActiveBuildConfig()
+	 */
+	IBuildConfiguration internalGetActiveBuildConfig() {
+		String configName = internalGetDescription().activeConfiguration;
+		try {
+			if (configName != null)
+				return getBuildConfig(configName);
+		} catch (CoreException e) {
+			// Build configuration doesn't exist; treat the first as active.
+		}
+		return internalGetBuildConfigs(false)[0];
+	}
+
+	/**
+	 * @return IBuildConfiguration[] always contains at least one build configuration
+	 */
+	public IBuildConfiguration[] internalGetBuildConfigs(boolean makeCopy) {
+		ProjectDescription desc = internalGetDescription();
+		if (desc == null)
+			return new IBuildConfiguration[] {new BuildConfiguration(this, IBuildConfiguration.DEFAULT_CONFIG_NAME)};
+		return desc.getBuildConfigs(this, makeCopy);
+	}
+
+	/**
 	 * This is an internal helper method. This implementation is different from the API
 	 * method getDescription(). This one does not check the project accessibility. It exists
 	 * in order to prevent "chicken and egg" problems in places like the project creation.
@@ -727,11 +826,41 @@ public class Project extends Container implements IProject {
 	}
 
 	/**
+	 * Returns the IBuildConfigurations referenced by the passed in build configuration
+	 * @param configName to find references for
+	 * @return IBuildConfiguration[] of referenced configurations; never null.
+	 */
+	public IBuildConfiguration[] internalGetReferencedBuildConfigs(String configName, boolean includeMissing) {
+		ProjectDescription description = internalGetDescription();
+		IBuildConfiguration[] refs = description.getAllBuildConfigReferences(configName, false);
+		Collection<IBuildConfiguration> configs = new LinkedHashSet<IBuildConfiguration>(refs.length);
+		for (int i = 0; i < refs.length; i++) {
+			try {
+				configs.add((((BuildConfiguration)refs[i]).getBuildConfig()));
+			} catch (CoreException e) {
+				// The project isn't accessible, or the build configuration doesn't exist
+				// on the project.  If requested return the full set of build references which may
+				// be useful to API consumers
+				if (includeMissing)
+					configs.add(refs[i]);
+			}
+		}
+		return configs.toArray(new IBuildConfiguration[configs.size()]);
+	}
+
+	boolean internalHasBuildConfig(String configName) {
+		return internalGetDescription().hasBuildConfig(configName);
+	}
+
+	/**
 	 * Sets this project's description to the given value.  This is the body of the
 	 * corresponding API method but is needed separately since it is used
 	 * during workspace restore (i.e., when you cannot do an operation)
 	 */
 	void internalSetDescription(IProjectDescription value, boolean incrementContentId) {
+		// Project has been added / removed. Build order is out-of-step
+		workspace.flushBuildOrder();
+
 		ProjectInfo info = (ProjectInfo) getResourceInfo(false, true);
 		info.setDescription((ProjectDescription) value);
 		getLocalManager().setLocation(this, info, value.getLocationURI());
@@ -1027,6 +1156,8 @@ public class Project extends Container implements IProject {
 						}
 					}
 				}
+				//initialize this project preferences
+				((ProjectPreferences) Platform.getPreferencesService().getRootNode().node(ProjectScope.SCOPE).node(getName())).initialize();
 				//creation of this project may affect overlapping resources
 				workspace.getAliasManager().updateAliases(this, getStore(), IResource.DEPTH_INFINITE, monitor);
 			} catch (OperationCanceledException e) {
@@ -1058,21 +1189,21 @@ public class Project extends Container implements IProject {
 	 */
 	public IStatus reconcileLinksAndGroups(ProjectDescription newDescription) {
 		String msg = Messages.links_errorLinkReconcile;
-		HashMap newLinks = newDescription.getLinks();
+		HashMap<IPath,LinkDescription> newLinks = newDescription.getLinks();
 		MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.OPERATION_FAILED, msg, null);
 		//walk over old linked resources and remove those that are no longer defined
 		ProjectDescription oldDescription = internalGetDescription();
 		if (oldDescription != null) {
-			HashMap oldLinks = oldDescription.getLinks();
+			HashMap<IPath,LinkDescription> oldLinks = oldDescription.getLinks();
 			if (oldLinks != null) {
-				for (Iterator it = oldLinks.values().iterator(); it.hasNext();) {
-					LinkDescription oldLink = (LinkDescription) it.next();
+				for (Iterator<LinkDescription> it = oldLinks.values().iterator(); it.hasNext();) {
+					LinkDescription oldLink = it.next();
 					Resource oldLinkResource = (Resource) findMember(oldLink.getProjectRelativePath());
 					if (oldLinkResource == null || !oldLinkResource.isLinked())
 						continue;
 					LinkDescription newLink = null;
 					if (newLinks != null)
-						newLink = (LinkDescription) newLinks.get(oldLink.getProjectRelativePath());
+						newLink = newLinks.get(oldLink.getProjectRelativePath());
 					//if the new link is missing, or has different (raw) location or gender, then remove old link
 					if (newLink == null || !newLink.getLocationURI().equals(oldLinkResource.getRawLocationURI()) || newLink.getType() != oldLinkResource.getType()) {
 						try {
@@ -1094,10 +1225,10 @@ public class Project extends Container implements IProject {
 		if (newLinks == null)
 			return status;
 		//sort links to avoid creating nested links before their parents
-		TreeSet newLinksAndGroups = new TreeSet(new Comparator() {
-			public int compare(Object arg0, Object arg1) {
-				int numberOfSegments0 = ((LinkDescription) arg0).getProjectRelativePath().segmentCount();
-				int numberOfSegments1 = ((LinkDescription) arg1).getProjectRelativePath().segmentCount();
+		TreeSet<LinkDescription> newLinksAndGroups = new TreeSet<LinkDescription>(new Comparator<LinkDescription>() {
+			public int compare(LinkDescription arg0, LinkDescription arg1) {
+				int numberOfSegments0 = arg0.getProjectRelativePath().segmentCount();
+				int numberOfSegments1 = arg1.getProjectRelativePath().segmentCount();
 				if (numberOfSegments0 != numberOfSegments1)
 					return numberOfSegments0 - numberOfSegments1;
 				else if (arg0.equals(arg1))
@@ -1110,7 +1241,7 @@ public class Project extends Container implements IProject {
 		if (newLinks != null)
 			newLinksAndGroups.addAll(newLinks.values());
 
-		for (Iterator it = newLinksAndGroups.iterator(); it.hasNext();) {
+		for (Iterator<LinkDescription> it = newLinksAndGroups.iterator(); it.hasNext();) {
 			Object description = it.next();
 			LinkDescription newLink = (LinkDescription) description;
 			try {
@@ -1212,7 +1343,6 @@ public class Project extends Container implements IProject {
 				//see if we have an old .prj file
 				if (!hadSavedDescription)
 					hadSavedDescription = workspace.getMetaArea().hasSavedProject(this);
-				workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.PRE_PROJECT_CHANGE, this));
 				workspace.beginOperation(true);
 				MultiStatus status = basicSetDescription(newDescription, updateFlags);
 				if (hadSavedDescription && !status.isOK())
@@ -1230,6 +1360,7 @@ public class Project extends Container implements IProject {
 				if (!status.isOK())
 					throw new CoreException(status);
 			} finally {
+				workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.POST_PROJECT_CHANGE, this));
 				workspace.endOperation(rule, true, Policy.subMonitorFor(monitor, Policy.endOpWork));
 			}
 		} finally {
@@ -1268,13 +1399,13 @@ public class Project extends Container implements IProject {
 			final ISchedulingRule rule = workspace.getRuleFactory().modifyRule(this);
 			try {
 				workspace.prepareOperation(rule, monitor);
-				workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.PRE_PROJECT_CHANGE, this));
 				workspace.beginOperation(true);
 				super.touch(Policy.subMonitorFor(monitor, Policy.opWork));
 			} catch (OperationCanceledException e) {
 				workspace.getWorkManager().operationCanceled();
 				throw e;
 			} finally {
+				workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.POST_PROJECT_CHANGE, this));
 				workspace.endOperation(rule, true, Policy.subMonitorFor(monitor, Policy.endOpWork));
 			}
 		} finally {
@@ -1292,7 +1423,6 @@ public class Project extends Container implements IProject {
 			return;
 		ProjectDescription.isReading = true;
 		try {
-			workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.PRE_PROJECT_CHANGE, this));
 			ProjectDescription description = getLocalManager().read(this, false);
 			//links can only be created if the project is open
 			IStatus result = null;
@@ -1302,6 +1432,7 @@ public class Project extends Container implements IProject {
 			if (result != null && !result.isOK())
 				throw new CoreException(result);
 		} finally {
+			workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.POST_PROJECT_CHANGE, this));
 			ProjectDescription.isReading = false;
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectContentTypes.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectContentTypes.java
index 2427139..980a001 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectContentTypes.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectContentTypes.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -25,7 +26,7 @@ import org.osgi.service.prefs.Preferences;
  * Manages project-specific content type behavior.
  * 
  * @see ContentDescriptionManager
- * @see IContentTypeManager.ISelectionPolicy
+ * @see org.eclipse.core.runtime.content.IContentTypeManager.ISelectionPolicy
  * @since 3.1
  */
 public class ProjectContentTypes {
@@ -132,11 +133,11 @@ public class ProjectContentTypes {
 	/**
 	 * Collect content types associated to the natures configured for the given project.
 	 */
-	private Set collectAssociatedContentTypes(Project project) {
+	private Set<String> collectAssociatedContentTypes(Project project) {
 		String[] enabledNatures = workspace.getNatureManager().getEnabledNatures(project);
 		if (enabledNatures.length == 0)
 			return Collections.EMPTY_SET;
-		Set related = new HashSet(enabledNatures.length);
+		Set<String> related = new HashSet<String>(enabledNatures.length);
 		for (int i = 0; i < enabledNatures.length; i++) {
 			ProjectNatureDescriptor descriptor = (ProjectNatureDescriptor) workspace.getNatureDescriptor(enabledNatures[i]);
 			if (descriptor == null)
@@ -164,7 +165,7 @@ public class ProjectContentTypes {
 		return Platform.getContentTypeManager().getMatcher(projectContentTypeSelectionPolicy, projectContentTypeSelectionPolicy);
 	}
 
-	private Set getAssociatedContentTypes(Project project) {
+	private Set<String> getAssociatedContentTypes(Project project) {
 		final ResourceInfo info = project.getResourceInfo(false, false);
 		if (info == null)
 			// the project has been deleted
@@ -176,9 +177,9 @@ public class ProjectContentTypes {
 				// we have an entry...
 				if (entry.getTimestamp() == info.getContentId())
 					// ...and it is not stale, so just return it
-					return (Set) entry.getCached();
+					return (Set<String>) entry.getCached();
 			// no cached information found, have to collect associated content types  
-			Set result = collectAssociatedContentTypes(project);
+			Set<String> result = collectAssociatedContentTypes(project);
 			if (entry == null)
 				// there was no entry before - create one
 				entry = contentTypesPerProject.addEntry(projectName, result, info.getContentId());
@@ -213,13 +214,13 @@ public class ProjectContentTypes {
 	 * <li>otherwise, relative ordering should be preserved.</li>
 	 * </ol>
 	 * 
-	 *  @see IContentTypeManager.ISelectionPolicy
+	 *  @see org.eclipse.core.runtime.content.IContentTypeManager.ISelectionPolicy
 	 */
 	final IContentType[] select(Project project, IContentType[] candidates, boolean fileName, boolean content) {
 		// since no vetoing is done here, don't go further if there is nothing to sort
 		if (candidates.length < 2)
 			return candidates;
-		final Set associated = getAssociatedContentTypes(project);
+		final Set<String> associated = getAssociatedContentTypes(project);
 		if (associated == null || associated.isEmpty())
 			// project has no content types associated
 			return candidates;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java
index 5f4a423..571ddeb 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescription.java
@@ -9,12 +9,14 @@
  *     IBM Corporation - initial API and implementation
  *     Martin Oberhuber (Wind River) - [245937] setLinkLocation() detects non-change
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Project Path Variable Support
- * Markus Schorn (Wind River) - [306575] Save snapshot location with project
+ *     Markus Schorn (Wind River) - [306575] Save snapshot location with project
+ *     Broadcom Corporation - build configurations and references
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
 import java.net.URI;
 import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.core.filesystem.URIUtil;
 import org.eclipse.core.internal.events.BuildCommand;
 import org.eclipse.core.internal.utils.FileUtil;
@@ -22,10 +24,13 @@ import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 
 public class ProjectDescription extends ModelObject implements IProjectDescription {
-	private static final ICommand[] EMPTY_COMMAND_ARRAY = new ICommand[0];
 	// constants
+	private static final IBuildConfiguration[] EMPTY_BUILD_CONFIG_REFERENCE_ARRAY = new IBuildConfiguration[0];
+	private static final ICommand[] EMPTY_COMMAND_ARRAY = new ICommand[0];
 	private static final IProject[] EMPTY_PROJECT_ARRAY = new IProject[0];
 	private static final String[] EMPTY_STRING_ARRAY = new String[0];
+	private static final String EMPTY_STR = ""; //$NON-NLS-1$
+
 	protected static boolean isReading = false;
 
 	//flags to indicate when we are in the middle of reading or writing a
@@ -33,54 +38,94 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	//these can be static because only one description can be read at once.
 	protected static boolean isWriting = false;
 	protected ICommand[] buildSpec = EMPTY_COMMAND_ARRAY;
-	/*
-	 * Cached union of static and dynamic references (duplicates omitted).
-	 * This cache is not persisted.
+	protected String comment = EMPTY_STR;
+
+	// Build configuration + References state
+	/** Id of the currently active build configuration */
+	protected String activeConfiguration = IBuildConfiguration.DEFAULT_CONFIG_NAME;
+	/** 
+	 * The 'real' build configuration names set on this project. 
+	 * This doesn't contain the generated 'default' build configuration with name
+	 * {@link IBuildConfiguration#DEFAULT_CONFIG_NAME}
+	 * when no build configurations have been defined. 
 	 */
-	protected IProject[] cachedRefs = null;
-	protected String comment = ""; //$NON-NLS-1$
+	protected String[] configNames = EMPTY_STRING_ARRAY;
+	// Static + Dynamic project level references
+	protected IProject[] staticRefs = EMPTY_PROJECT_ARRAY;
 	protected IProject[] dynamicRefs = EMPTY_PROJECT_ARRAY;
-	
+	/** Map from config name in this project -> build configurations in other projects */
+	protected HashMap<String, IBuildConfiguration[]> dynamicConfigRefs = new HashMap<String, IBuildConfiguration[]>(1);
+
+	// Cache of the build configurations
+	protected volatile IBuildConfiguration[] cachedBuildConfigs;
+	// Cached build configuration references. Not persisted.
+	protected Map<String, IBuildConfiguration[]> cachedConfigRefs = Collections.synchronizedMap(new HashMap<String, IBuildConfiguration[]>(1));
+	// Cached project level references.
+	protected volatile IProject[] cachedRefs = null;
+
 	/**
 	 * Map of (IPath -> LinkDescription) pairs for each linked resource
 	 * in this project, where IPath is the project relative path of the resource.
 	 */
-	protected HashMap linkDescriptions = null;
+	protected HashMap<IPath,LinkDescription> linkDescriptions = null;
 	
 	/**
 	 * Map of (IPath -> LinkedList<FilterDescription>) pairs for each filtered resource
 	 * in this project, where IPath is the project relative path of the resource.
 	 */
-	protected HashMap filterDescriptions = null;
+	protected HashMap<IPath,LinkedList<FilterDescription>> filterDescriptions = null;
 
 	/**
 	 * Map of (String -> VariableDescription) pairs for each variable in this
 	 * project, where String is the name of the variable.
 	 */
-	protected HashMap variableDescriptions = null;
+	protected HashMap<String,VariableDescription> variableDescriptions = null;
 
 	// fields
 	protected URI location = null;
 	protected String[] natures = EMPTY_STRING_ARRAY;
-	protected IProject[] staticRefs = EMPTY_PROJECT_ARRAY;
 	protected URI snapshotLocation= null;
 
 	public ProjectDescription() {
 		super();
 	}
 
+	@SuppressWarnings("unchecked")
 	public Object clone() {
 		ProjectDescription clone = (ProjectDescription) super.clone();
 		//don't want the clone to have access to our internal link locations table or builders
 		clone.linkDescriptions = null;
 		clone.filterDescriptions = null;
 		if (variableDescriptions != null)
-			clone.variableDescriptions = (HashMap) variableDescriptions.clone();
+			clone.variableDescriptions =  (HashMap<String, VariableDescription>) variableDescriptions.clone();
 		clone.buildSpec = getBuildSpec(true);
+		clone.dynamicConfigRefs = (HashMap<String, IBuildConfiguration[]>) dynamicConfigRefs.clone();
+		clone.cachedConfigRefs = Collections.synchronizedMap(new HashMap<String, IBuildConfiguration[]>(1));
+		clone.clearCachedReferences(null);
 		return clone;
 	}
 
 	/**
+	 * Clear cached references for the specified build config name
+	 * or all if configName is null.
+	 */
+	private void clearCachedReferences(String configName)	{
+		if (configName == null)
+			cachedConfigRefs.clear();
+		else
+			cachedConfigRefs.remove(configName);
+		cachedRefs = null;
+	}
+
+	/**
+	 * Returns a copy of the given array of build configs with all duplicates removed
+	 */
+	private IBuildConfiguration[] copyAndRemoveDuplicates(IBuildConfiguration[] values) {
+		Set<IBuildConfiguration> set = new LinkedHashSet<IBuildConfiguration>(Arrays.asList(values));
+		return set.toArray(new IBuildConfiguration[set.size()]);
+	}
+
+	/**
 	 * Returns a copy of the given array with all duplicates removed
 	 */
     private IProject[] copyAndRemoveDuplicates(IProject[] projects) {
@@ -102,29 +147,140 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
                 return reduced;
         }
         return result;
-}
+    }
+
+	/**
+	 * Helper to turn an array of projects into an array of {@link IBuildConfiguration} to the
+	 * projects' active configuration
+	 * Order is preserved - the buildConfigs appear for each project in the order
+	 * that the projects were specified.
+	 * @param projects projects to get the active configuration from
+	 * @return collection of build config references
+	 */
+	private Collection<BuildConfiguration> getBuildConfigReferencesFromProjects(IProject[] projects) {
+		List<BuildConfiguration> refs = new ArrayList<BuildConfiguration>(projects.length);
+		for (int i = 0; i < projects.length; i++)
+			refs.add(new BuildConfiguration(projects[i], null));
+		return refs;
+	}
+
+	/**
+	 * Helper to fetch projects from an array of build configuration references
+	 * @param refs
+	 * @return List<IProject>
+	 */
+	private Collection<IProject> getProjectsFromBuildConfigRefs(IBuildConfiguration[] refs) {
+		LinkedHashSet<IProject> projects = new LinkedHashSet<IProject>(refs.length);
+		for (int i = 0; i < refs.length; i++)
+			projects.add(refs[i].getProject());
+		return projects;
+	}
+
+	public String getActiveBuildConfig() {
+		return activeConfiguration;
+	}
+
 	/**
 	 * Returns the union of the description's static and dynamic project references,
 	 * with duplicates omitted. The calculation is optimized by caching the result
+	 * Call the configuration based implementation.
+	 * @see #getAllBuildConfigReferences(String, boolean)
 	 */
 	public IProject[] getAllReferences(boolean makeCopy) {
-		if (cachedRefs == null) {
-			IProject[] statik = getReferencedProjects(false);
-			IProject[] dynamic = getDynamicReferences(false);
-			if (dynamic.length == 0) {
-				cachedRefs = statik;
-			} else if (statik.length == 0) {
-				cachedRefs = dynamic;
-			} else {
-				//combine all references
-				IProject[] result = new IProject[dynamic.length + statik.length];
-				System.arraycopy(statik, 0, result, 0, statik.length);
-				System.arraycopy(dynamic, 0, result, statik.length, dynamic.length);
-				cachedRefs = copyAndRemoveDuplicates(result);
-			}
+		IProject[] projRefs = cachedRefs;
+		if (projRefs == null) {
+			IBuildConfiguration[] refs;
+			if (hasBuildConfig(activeConfiguration))
+				refs = getAllBuildConfigReferences(activeConfiguration, false);
+			else if (configNames.length > 0)
+				refs = getAllBuildConfigReferences(configNames[0], false);
+			else // No build configuration => fall-back to default
+				refs = getAllBuildConfigReferences(IBuildConfiguration.DEFAULT_CONFIG_NAME, false);
+			Collection<IProject> l = getProjectsFromBuildConfigRefs(refs);
+			projRefs = cachedRefs = l.toArray(new IProject[l.size()]);
 		}
 		//still need to copy the result to prevent tampering with the cache
-		return makeCopy ? (IProject[]) cachedRefs.clone() : cachedRefs;
+		return makeCopy ? (IProject[]) projRefs.clone() : projRefs;
+	}
+
+	/**
+	 * The main entrance point to fetch the full set of Project references.
+	 *
+	 * Returns the union of all the description's references. Includes static and dynamic 
+	 * project level references as well as build configuration references for the configuration
+	 * with the given id. 
+	 * Duplicates are omitted.  The calculation is optimized by caching the result.
+	 * Note that these BuildConfiguration references may have <code>null</code> name.  They must
+	 * be resolved using {@link BuildConfiguration#getBuildConfig()} before use.
+	 * Returns an empty array if the given configName does not exist in the description.
+	 */
+	public IBuildConfiguration[] getAllBuildConfigReferences(String configName, boolean makeCopy) {
+		if (!hasBuildConfig(configName))
+			return EMPTY_BUILD_CONFIG_REFERENCE_ARRAY;
+		IBuildConfiguration[] refs = cachedConfigRefs.get(configName);
+		if (refs == null) {
+			Set<IBuildConfiguration> references = new LinkedHashSet<IBuildConfiguration>();
+			IBuildConfiguration[] dynamicBuildConfigs = dynamicConfigRefs.containsKey(configName) ?
+														dynamicConfigRefs.get(configName) : EMPTY_BUILD_CONFIG_REFERENCE_ARRAY;
+			Collection<BuildConfiguration> dynamic = getBuildConfigReferencesFromProjects(dynamicRefs);
+			Collection<BuildConfiguration> statik = getBuildConfigReferencesFromProjects(staticRefs);
+
+			// Combine all references:
+			// New build config references (which only come in dynamic form) trump all others.
+			references.addAll(Arrays.asList(dynamicBuildConfigs));
+			// We preserve the previous order of static project references before dynamic project references
+			references.addAll(statik);
+			references.addAll(dynamic);
+			refs = references.toArray(new IBuildConfiguration[references.size()]);
+			cachedConfigRefs.put(configName, refs);
+		}
+		return makeCopy ? (IBuildConfiguration[]) refs.clone() : refs;
+	}
+
+	/**
+	 * Used by Project to get the buildConfigs on the description.
+	 * @return the project configurations
+	 */
+	public IBuildConfiguration[] getBuildConfigs(IProject project, boolean makeCopy) {
+		IBuildConfiguration[] configs = cachedBuildConfigs;
+		// Ensure project is up to date in the cache
+		if (configs != null && !project.equals(configs[0].getProject()))
+			configs = null;
+		if (configs == null) {
+			if (configNames.length == 0)
+				configs = new IBuildConfiguration[] { new BuildConfiguration(project) };
+			else {
+				configs = new IBuildConfiguration[configNames.length];
+				for (int i = 0; i < configs.length; i++)
+					configs[i] = new BuildConfiguration(project, configNames[i]);
+			}
+			cachedBuildConfigs = configs;
+		}
+		return makeCopy ? (IBuildConfiguration[])configs.clone() : configs;
+	}
+
+	/* (non-Javadoc)
+	 * @see IProjectDescription#getBuildConfigReferences(String)
+	 */
+	public IBuildConfiguration[] getBuildConfigReferences(String configName) {
+		return getBuildConfigRefs(configName, true);
+	}
+
+	public IBuildConfiguration[] getBuildConfigRefs(String configName, boolean makeCopy) {
+		if (!hasBuildConfig(configName) || !dynamicConfigRefs.containsKey(configName))
+			return EMPTY_BUILD_CONFIG_REFERENCE_ARRAY;
+
+		return makeCopy ? (IBuildConfiguration[])dynamicConfigRefs.get(configName).clone()
+						 						: dynamicConfigRefs.get(configName);
+	}
+
+	/**
+	 * Returns the build configuration references map
+	 * @param makeCopy
+	 */
+	@SuppressWarnings("unchecked")
+	public Map<String, IBuildConfiguration[]> getBuildConfigReferences(boolean makeCopy) {
+		return makeCopy ? (Map<String, IBuildConfiguration[]>)dynamicConfigRefs.clone() : dynamicConfigRefs;
 	}
 
 	/* (non-Javadoc)
@@ -162,9 +318,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	}
 
 	public IProject[] getDynamicReferences(boolean makeCopy) {
-		if (dynamicRefs == null)
-			return EMPTY_PROJECT_ARRAY;
-		return makeCopy ? (IProject[]) dynamicRefs.clone() : dynamicRefs;
+		return makeCopy ? (IProject[])dynamicRefs.clone() : dynamicRefs;
 	}
 
 	/**
@@ -174,7 +328,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	public URI getLinkLocationURI(IPath aPath) {
 		if (linkDescriptions == null)
 			return null;
-		LinkDescription desc = (LinkDescription) linkDescriptions.get(aPath);
+		LinkDescription desc = linkDescriptions.get(aPath);
 		return desc == null ? null : desc.getLocationURI();
 	}
 
@@ -182,10 +336,10 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * Returns the filter for the given resource name. Returns null if
 	 * no such filter exists.
 	 */
-	synchronized public LinkedList/*<FilterDescription>*/ getFilter(IPath aPath) {
+	synchronized public LinkedList<FilterDescription> getFilter(IPath aPath) {
 		if (filterDescriptions == null)
 			return null;
-		return (LinkedList /*<FilterDescription> */) filterDescriptions.get(aPath);
+		return filterDescriptions.get(aPath);
 	}
 
 	/**
@@ -193,7 +347,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * Since this method is only used internally, it never creates a copy.
 	 * Returns null if the project does not have any linked resources.
 	 */
-	public HashMap getLinks() {
+	public HashMap<IPath,LinkDescription> getLinks() {
 		return linkDescriptions;
 	}
 
@@ -202,7 +356,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * Since this method is only used internally, it never creates a copy.
 	 * Returns null if the project does not have any filtered resources.
 	 */
-	public HashMap getFilters() {
+	public HashMap<IPath, LinkedList<FilterDescription>> getFilters() {
 		return filterDescriptions;
 	}
 
@@ -211,7 +365,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * VariableDescription). Since this method is only used internally, it never
 	 * creates a copy. Returns null if the project does not have any variables.
 	 */
-	public HashMap getVariables() {
+	public HashMap<String,VariableDescription> getVariables() {
 		return variableDescriptions;
 	}
 
@@ -289,17 +443,61 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	}
 
 	/**
+	 * Helper method to compare two maps of Configuration Name -> IBuildConfigurationReference[]
+	 * @return boolean indicating if there are differences between the two maps
+	 */
+	private static boolean configRefsHaveChanges(Map<String, IBuildConfiguration[]> m1, Map<String, IBuildConfiguration[]> m2) {
+		if (m1.size() != m2.size())
+			return true;
+		for (Iterator<Entry<String,IBuildConfiguration[]>> it = m1.entrySet().iterator(); it.hasNext();) {
+			Entry<String,IBuildConfiguration[]> e = it.next();
+			if (!m2.containsKey(e.getKey()))
+				return true;
+			if (!Arrays.equals(e.getValue(), 
+					m2.get(e.getKey())))
+				return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Internal method to check if the description has a given build configuration.
+	 */
+	boolean hasBuildConfig(String buildConfigName) {
+		Assert.isNotNull(buildConfigName);
+		if (configNames.length == 0)
+			return IBuildConfiguration.DEFAULT_CONFIG_NAME.equals(buildConfigName);
+		for (int i = 0; i < configNames.length; i++)
+			if (configNames[i].equals(buildConfigName))
+				return true;
+		return false;
+	}
+
+	/**
 	 * Returns true if any private attributes of the description have changed.
 	 * Private attributes are those that are not stored in the project description
 	 * file (.project).
 	 */
 	public boolean hasPrivateChanges(ProjectDescription description) {
-		if (!Arrays.equals(dynamicRefs, description.getDynamicReferences(false)))
+		if (location == null) {
+			if (description.location != null)
+				return true;
+		} else if (!location.equals(description.location))
 			return true;
-		IPath otherLocation = description.getLocation();
-		if (location == null)
-			return otherLocation != null;
-		return !location.equals(otherLocation);
+
+		if (!Arrays.equals(dynamicRefs, description.dynamicRefs))
+			return true;
+
+		// Build Configuration state
+		if (!activeConfiguration.equals(description.activeConfiguration))
+			return true;
+		if (!Arrays.equals(configNames, description.configNames))
+			return true;
+		// Configuration level references
+		if (configRefsHaveChanges(dynamicConfigRefs, description.dynamicConfigRefs))
+			return true;
+
+		return false;
 	}
 
 	/**
@@ -320,19 +518,19 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 		if (!Arrays.equals(natures, description.getNatureIds(false)))
 			return true;
 		
-		HashMap otherFilters = description.getFilters();
+		HashMap<IPath, LinkedList<FilterDescription>> otherFilters = description.getFilters();
 		if ((filterDescriptions == null) && (otherFilters != null))
 			return otherFilters != null;
 		if ((filterDescriptions != null) && !filterDescriptions.equals(otherFilters))
 			return true;
 
-		HashMap otherVariables = description.getVariables();
+		HashMap<String,VariableDescription> otherVariables = description.getVariables();
 		if ((variableDescriptions == null) && (otherVariables != null))
 			return true;
 		if ((variableDescriptions != null) && !variableDescriptions.equals(otherVariables))
 			return true;
 
-		final HashMap otherLinks = description.getLinks();
+		final HashMap<IPath,LinkDescription> otherLinks = description.getLinks();
 		if (linkDescriptions != otherLinks) { 
 			if (linkDescriptions == null || !linkDescriptions.equals(otherLinks))
 				return true;
@@ -353,6 +551,13 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 		return new BuildCommand();
 	}
 
+	public void setActiveBuildConfig(String configName) {
+		Assert.isNotNull(configName);
+		if (!configName.equals(activeConfiguration))
+			clearCachedReferences(null);
+		activeConfiguration = configName;
+	}
+
 	/* (non-Javadoc)
 	 * @see IProjectDescription#setBuildSpec(ICommand[])
 	 */
@@ -366,7 +571,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 			//to preserve builder states if possible.
 			for (int j = 0; j < buildSpec.length; j++) {
 				if (result[i].equals(buildSpec[j])) {
-					((BuildCommand) result[i]).setBuilder(((BuildCommand) buildSpec[j]).getBuilder());
+					((BuildCommand) result[i]).setBuilders(((BuildCommand) buildSpec[j]).getBuilders());
 					break;
 				}
 			}
@@ -387,7 +592,56 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	public void setDynamicReferences(IProject[] value) {
 		Assert.isLegal(value != null);
 		dynamicRefs = copyAndRemoveDuplicates(value);
-		cachedRefs = null;
+		clearCachedReferences(null);
+	}
+
+	public void setBuildConfigReferences(HashMap<String, IBuildConfiguration[]> refs) {
+		dynamicConfigRefs = new HashMap<String, IBuildConfiguration[]>(refs);
+		clearCachedReferences(null);
+	}
+
+	/* (non-Javadoc)
+	 * @see IProjectDescription#setDynamicConfigReferences(String, IBuildConfiguration[])
+	 */
+	public void setBuildConfigReferences(String configName, IBuildConfiguration[] references) {
+		Assert.isLegal(configName != null);
+		Assert.isLegal(references != null);
+		if (!hasBuildConfig(configName))
+			return;
+		dynamicConfigRefs.put(configName, copyAndRemoveDuplicates(references));
+		clearCachedReferences(configName);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see IProjectDescription#setBuildConfigurations(String[])
+	 */
+	public void setBuildConfigs(String[] names) {
+		// Remove references for deleted buildConfigs
+		LinkedHashSet<String> buildConfigNames = new LinkedHashSet<String>();
+
+		if (names == null || names.length == 0) {
+			configNames = EMPTY_STRING_ARRAY;
+			buildConfigNames.add(IBuildConfiguration.DEFAULT_CONFIG_NAME);
+		} else {
+			// Filter out duplicates
+			for (String n : names) {
+				Assert.isLegal(n != null);
+				buildConfigNames.add(n);
+			}
+
+			if (buildConfigNames.size() == 1 && ((buildConfigNames.iterator().next())).equals(IBuildConfiguration.DEFAULT_CONFIG_NAME))
+				configNames = EMPTY_STRING_ARRAY;
+			else
+				configNames = buildConfigNames.toArray(new String[buildConfigNames.size()]);
+		}
+
+		// Remove references for deleted buildConfigs
+		boolean modified = dynamicConfigRefs.keySet().retainAll(buildConfigNames);
+		if (modified)
+			clearCachedReferences(null);
+		// Clear the cached IBuildConfiguration[]
+		cachedBuildConfigs = null;
 	}
 
 	/**
@@ -395,7 +649,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * Since this method is only used internally, it never creates a copy. May
 	 * pass null if this project does not have any linked resources
 	 */
-	public void setLinkDescriptions(HashMap linkDescriptions) {
+	public void setLinkDescriptions(HashMap<IPath,LinkDescription> linkDescriptions) {
 		this.linkDescriptions = linkDescriptions;
 	}
 
@@ -404,7 +658,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * Since this method is only used internally, it never creates a copy. May
 	 * pass null if this project does not have any filtered resources
 	 */
-	public void setFilterDescriptions(HashMap filterDescriptions) {
+	public void setFilterDescriptions(HashMap<IPath,LinkedList<FilterDescription>> filterDescriptions) {
 		this.filterDescriptions = filterDescriptions;
 	}
 
@@ -413,7 +667,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * VariableDescription). Since this method is only used internally, it never
 	 * creates a copy. May pass null if this project does not have any variables
 	 */
-	public void setVariableDescriptions(HashMap variableDescriptions) {
+	public void setVariableDescriptions(HashMap<String,VariableDescription> variableDescriptions) {
 		this.variableDescriptions = variableDescriptions;
 	}
 
@@ -424,15 +678,16 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 *     <code>false</code> otherwise.
 	 * @since 3.5 returns boolean (was void before)
 	 */
+	@SuppressWarnings("unchecked")
 	public boolean setLinkLocation(IPath path, LinkDescription description) {
-		HashMap tempMap = linkDescriptions;
+		HashMap<IPath,LinkDescription> tempMap = linkDescriptions;
 		if (description != null) {
 			//addition or modification
 			if (tempMap == null)
-				tempMap = new HashMap(10);
+				tempMap = new HashMap<IPath,LinkDescription>(10);
 			else 
 				//copy on write to protect against concurrent read
-				tempMap = (HashMap) tempMap.clone();
+				tempMap = (HashMap<IPath, LinkDescription>) tempMap.clone();
 			Object oldValue = tempMap.put(path, description);
 			if (oldValue!=null && description.equals(oldValue)) {
 				//not actually changed anything
@@ -444,7 +699,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 			if (tempMap == null)
 				return false;
 			//copy on write to protect against concurrent access
-			HashMap newMap = (HashMap) tempMap.clone();
+			HashMap<IPath,LinkDescription> newMap = (HashMap<IPath,LinkDescription>) tempMap.clone();
 			Object oldValue = newMap.remove(path);
 			if (oldValue == null) {
 				//not actually changed anything
@@ -462,10 +717,10 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	synchronized public void addFilter(IPath path, FilterDescription description) {
 		Assert.isNotNull(description);
 		if (filterDescriptions == null)
-			filterDescriptions = new HashMap(10);
-		LinkedList/*<FilterDescription>*/ descList = (LinkedList /*<FilterDescription> */) filterDescriptions.get(path);
+			filterDescriptions = new HashMap<IPath,LinkedList<FilterDescription>>(10);
+		LinkedList<FilterDescription> descList = filterDescriptions.get(path);
 		if (descList == null) {
-			descList = new LinkedList/*<FilterDescription>*/();
+			descList = new LinkedList<FilterDescription>();
 			filterDescriptions.put(path, descList);
 		}
 		descList.add(description);
@@ -477,7 +732,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 */
 	synchronized public void removeFilter(IPath path, FilterDescription description) {
 		if (filterDescriptions != null) {
-			LinkedList/*<FilterDescription>*/ descList = (LinkedList /*<FilterDescription> */) filterDescriptions.get(path);
+			LinkedList<FilterDescription> descList = filterDescriptions.get(path);
 			if (descList != null) {
 				descList.remove(description);
 				if (descList.size() == 0) {
@@ -496,16 +751,17 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 *     <code>false</code> otherwise.
 	 * @since 3.5
 	 */
+	@SuppressWarnings("unchecked")
 	public boolean setVariableDescription(String name,
 			VariableDescription description) {
-		HashMap tempMap = variableDescriptions;
+		HashMap<String,VariableDescription> tempMap = variableDescriptions;
 		if (description != null) {
 			// addition or modification
 			if (tempMap == null)
-				tempMap = new HashMap(10);
+				tempMap = new HashMap<String,VariableDescription>(10);
 			else
 				// copy on write to protect against concurrent read
-				tempMap = (HashMap) tempMap.clone();
+				tempMap = (HashMap<String,VariableDescription>) tempMap.clone();
 			Object oldValue = tempMap.put(name, description);
 			if (oldValue!=null && description.equals(oldValue)) {
 				//not actually changed anything
@@ -517,7 +773,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 			if (tempMap == null)
 				return false;
 			// copy on write to protect against concurrent access
-			HashMap newMap = (HashMap) tempMap.clone();
+			HashMap<String,VariableDescription> newMap = (HashMap<String,VariableDescription>) tempMap.clone();
 			Object oldValue = newMap.remove(name);
 			if (oldValue == null) {
 				//not actually changed anything
@@ -534,11 +790,11 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * @return <code>true</code> if the description was actually changed,
 	 *     <code>false</code> otherwise.
 	 */
-	synchronized public boolean setFilters(IPath path, LinkedList/*<FilterDescription>*/ descriptions) {
+	synchronized public boolean setFilters(IPath path, LinkedList<FilterDescription> descriptions) {
 		if (descriptions != null) {
 			// addition
 			if (filterDescriptions == null)
-				filterDescriptions = new HashMap(10);
+				filterDescriptions = new HashMap<IPath,LinkedList<FilterDescription>>(10);
 			Object oldValue = filterDescriptions.put(path, descriptions);
 			if (oldValue!=null && descriptions.equals(oldValue)) {
 				//not actually changed anything
@@ -583,7 +839,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	 * @see IProjectDescription#setNatureIds(String[])
 	 */
 	public void setNatureIds(String[] value) {
-		natures = (String[]) value.clone();
+		natures = value.clone();
 	}
 
 	/* (non-Javadoc)
@@ -592,7 +848,7 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	public void setReferencedProjects(IProject[] value) {
 		Assert.isLegal(value != null);
 		staticRefs = copyAndRemoveDuplicates(value);
-		cachedRefs = null;
+		clearCachedReferences(null);
 	}
 
 	/**
@@ -617,4 +873,40 @@ public class ProjectDescription extends ModelObject implements IProjectDescripti
 	public URI getGroupLocationURI(IPath projectRelativePath) {
 		return LinkDescription.VIRTUAL_LOCATION;
 	}
+
+	/**
+	 * Updates the dynamic build configuration and reference state to that of the passed in 
+	 * description.
+	 * Copies in:
+	 * <ul>
+	 * <li>Active configuration name</li>
+	 * <li>Dynamic Project References</li>
+	 * <li>Build configurations list</li>
+	 * <li>Build Configuration References</li>
+	 * </ul>
+	 * @param description Project description to copy dynamic state from
+	 * @return boolean indicating if anything changed requing re-calculation of WS build order
+	 */
+	public boolean updateDynamicState(ProjectDescription description) {
+		boolean changed = false;
+		if (!activeConfiguration.equals(description.activeConfiguration)) {
+			changed = true;
+			activeConfiguration = description.activeConfiguration;
+		}
+		if (!Arrays.equals(dynamicRefs, description.dynamicRefs)) {
+			changed = true;
+			setDynamicReferences(description.dynamicRefs);
+		}
+		if (!Arrays.equals(configNames, description.configNames)) {
+			changed = true;
+			setBuildConfigs(description.configNames);
+		}
+		if (configRefsHaveChanges(dynamicConfigRefs, description.dynamicConfigRefs)) {
+			changed = true;
+			dynamicConfigRefs = new HashMap<String, IBuildConfiguration[]>(description.dynamicConfigRefs);
+		}
+		if (changed)
+			clearCachedReferences(null);
+		return changed;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescriptionReader.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescriptionReader.java
index 93264b2..300cc96 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescriptionReader.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectDescriptionReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Project Path Variable Support
  * Markus Schorn (Wind River) - [306575] Save snapshot location with project
+ * James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -20,14 +21,14 @@ import javax.xml.parsers.*;
 import org.eclipse.core.filesystem.URIUtil;
 import org.eclipse.core.internal.events.BuildCommand;
 import org.eclipse.core.internal.localstore.SafeFileInputStream;
-import org.eclipse.core.internal.utils.Messages;
-import org.eclipse.core.internal.utils.Policy;
+import org.eclipse.core.internal.utils.*;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.util.NLS;
 import org.xml.sax.*;
 import org.xml.sax.helpers.DefaultHandler;
 
+ at SuppressWarnings("unchecked")
 public class ProjectDescriptionReader extends DefaultHandler implements IModelObjectConstants {
 
 	//states
@@ -83,7 +84,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 
 	protected final StringBuffer charBuffer = new StringBuffer();
 
-	protected Stack objectStack;
+	protected Stack<Object> objectStack;
 	protected MultiStatus problems;
 
 	/**
@@ -161,7 +162,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			// Pop this BuildCommand off the stack.
 			BuildCommand command = (BuildCommand) objectStack.pop();
 			// Add this BuildCommand to a array list of BuildCommands.
-			ArrayList commandList = (ArrayList) objectStack.peek();
+			ArrayList<BuildCommand> commandList = (ArrayList<BuildCommand>) objectStack.peek();
 			commandList.add(command);
 			state = S_BUILD_SPEC;
 		}
@@ -174,11 +175,11 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 		if (elementName.equals(BUILD_SPEC)) {
 			// Pop off the array list of BuildCommands and add them to the
 			// ProjectDescription which is the next thing on the stack.
-			ArrayList commands = (ArrayList) objectStack.pop();
+			ArrayList<ICommand> commands = (ArrayList<ICommand>) objectStack.pop();
 			state = S_PROJECT_DESC;
 			if (commands.isEmpty())
 				return;
-			ICommand[] commandArray = ((ICommand[]) commands.toArray(new ICommand[commands.size()]));
+			ICommand[] commandArray = commands.toArray(new ICommand[commands.size()]);
 			projectDescription.setBuildSpec(commandArray);
 		}
 	}
@@ -227,7 +228,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			// pairs if they exist.
 			String value = (String) objectStack.pop();
 			String key = (String) objectStack.pop();
-			((HashMap) objectStack.peek()).put(key, value);
+			((HashMap<String, String>) objectStack.peek()).put(key, value);
 			state = S_BUILD_COMMAND_ARGUMENTS;
 		}
 	}
@@ -295,7 +296,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 				if (elementName.equals(ARGUMENTS)) {
 					// There is a hashmap on the top of the stack with the
 					// arguments (if any).
-					HashMap dictionaryArgs = (HashMap) objectStack.pop();
+					HashMap<String, String> dictionaryArgs = (HashMap<String, String>) objectStack.pop();
 					state = S_BUILD_COMMAND;
 					if (dictionaryArgs.isEmpty())
 						break;
@@ -345,7 +346,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 					// Referenced projects are just project names and, therefore,
 					// are also IResource names and cannot have leading/trailing 
 					// whitespace.
-					((ArrayList) objectStack.peek()).add(charBuffer.toString().trim());
+					((ArrayList<String>) objectStack.peek()).add(charBuffer.toString().trim());
 					state = S_PROJECTS;
 				}
 				break;
@@ -369,7 +370,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 					//top of stack is list of nature names
 					// A nature name is an extension id and cannot
 					// have leading/trailing whitespace.
-					((ArrayList) objectStack.peek()).add(charBuffer.toString().trim());
+					((ArrayList<String>) objectStack.peek()).add(charBuffer.toString().trim());
 					state = S_NATURES;
 				}
 				break;
@@ -421,7 +422,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 	 */
 	private void endLinkedResourcesElement(String elementName) {
 		if (elementName.equals(LINKED_RESOURCES)) {
-			HashMap linkedResources = (HashMap) objectStack.pop();
+			HashMap<IPath, LinkDescription> linkedResources = (HashMap<IPath, LinkDescription>) objectStack.pop();
 			state = S_PROJECT_DESC;
 			if (linkedResources.isEmpty())
 				return;
@@ -434,7 +435,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 	 */
 	private void endFilteredResourcesElement(String elementName) {
 		if (elementName.equals(FILTERED_RESOURCES)) {
-			HashMap filteredResources = (HashMap) objectStack.pop();
+			HashMap<IPath, LinkedList<FilterDescription>> filteredResources = (HashMap<IPath, LinkedList<FilterDescription>>) objectStack.pop();
 			state = S_PROJECT_DESC;
 			if (filteredResources.isEmpty())
 				return;
@@ -448,7 +449,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 	 */
 	private void endVariableListElement(String elementName) {
 		if (elementName.equals(VARIABLE_LIST)) {
-			HashMap variableList = (HashMap) objectStack.pop();
+			HashMap<String, VariableDescription> variableList = (HashMap<String, VariableDescription>) objectStack.pop();
 			state = S_PROJECT_DESC;
 			if (variableList.isEmpty())
 				return;
@@ -482,7 +483,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			}
 
 			// The HashMap of linked resources is the next thing on the stack
-			((HashMap) objectStack.peek()).put(link.getProjectRelativePath(), link);
+			((HashMap<IPath, LinkDescription>) objectStack.peek()).put(link.getProjectRelativePath(), link);
 		}
 	}
 	
@@ -501,7 +502,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			if (objectStack.peek() instanceof ArrayList) {
 				state = S_MATCHER_ARGUMENTS;
 				// The ArrayList of matchers is the next thing on the stack
-				ArrayList list = ((ArrayList) objectStack.peek());
+				ArrayList<FileInfoMatcherDescription> list = ((ArrayList<FileInfoMatcherDescription>) objectStack.peek());
 				list.add(new FileInfoMatcherDescription((String) matcher[0], matcher[1]));
 			}
 
@@ -535,10 +536,10 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 				}
 
 				// The HashMap of filtered resources is the next thing on the stack
-				HashMap map = ((HashMap) objectStack.peek());
-				LinkedList/*FilterDescription*/list = (LinkedList/*FilterDescription*/) map.get(filter.getResource().getProjectRelativePath());
+				HashMap<IPath, LinkedList<FilterDescription>> map = ((HashMap<IPath, LinkedList<FilterDescription>>) objectStack.peek());
+				LinkedList<FilterDescription>list = map.get(filter.getResource().getProjectRelativePath());
 				if (list == null) {
-					list = new LinkedList/*FilterDescription*/();
+					list = new LinkedList<FilterDescription>();
 					map.put(filter.getResource().getProjectRelativePath(), list);
 				}
 				list.add(filter);
@@ -547,10 +548,10 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 				// if the project is null, that means that we're loading a project description to retrieve 
 				// some meta data only.
 				String key = new String(); // an empty key;
-				HashMap map = ((HashMap) objectStack.peek());
-				LinkedList/*FilterDescription*/list = (LinkedList/*FilterDescription*/) map.get(key);
+				HashMap<String, LinkedList<FilterDescription>> map = ((HashMap<String, LinkedList<FilterDescription>>) objectStack.peek());
+				LinkedList<FilterDescription>list = map.get(key);
 				if (list == null) {
-					list = new LinkedList/*FilterDescription*/();
+					list = new LinkedList<FilterDescription>();
 					map.put(key, list);
 				}
 				list.add(filter);
@@ -575,7 +576,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			}
 
 			// The HashMap of variables is the next thing on the stack
-			((HashMap) objectStack.peek()).put(desc.getName(), desc);
+			((HashMap<String, VariableDescription>) objectStack.peek()).put(desc.getName(), desc);
 		}
 	}
 
@@ -656,7 +657,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 
 	private void endMatcherArguments(String elementName) {
 		if (elementName.equals(ARGUMENTS)) {
-			ArrayList matchers = (ArrayList) objectStack.pop();
+			ArrayList<FileInfoMatcherDescription> matchers = (ArrayList<FileInfoMatcherDescription>) objectStack.pop();
 			Object newArguments = charBuffer.toString();
 			
 			if (matchers.size() > 0)
@@ -782,11 +783,11 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 	private void endNaturesElement(String elementName) {
 		if (elementName.equals(NATURES)) {
 			// Pop the array list of natures off the stack
-			ArrayList natures = (ArrayList) objectStack.pop();
+			ArrayList<String> natures = (ArrayList<String>) objectStack.pop();
 			state = S_PROJECT_DESC;
 			if (natures.size() == 0)
 				return;
-			String[] natureNames = (String[]) natures.toArray(new String[natures.size()]);
+			String[] natureNames = natures.toArray(new String[natures.size()]);
 			projectDescription.setNatureIds(natureNames);
 		}
 	}
@@ -796,7 +797,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 	 */
 	private void endProjectsElement(String elementName) {
 		// Pop the array list that contains all the referenced project names
-		ArrayList referencedProjects = (ArrayList) objectStack.pop();
+		ArrayList<String> referencedProjects = (ArrayList<String>) objectStack.pop();
 		if (referencedProjects.size() == 0)
 			// Don't bother adding an empty group of referenced projects to the
 			// project descriptor.
@@ -804,7 +805,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
 		IProject[] projects = new IProject[referencedProjects.size()];
 		for (int i = 0; i < projects.length; i++) {
-			projects[i] = root.getProject((String) referencedProjects.get(i));
+			projects[i] = root.getProject(referencedProjects.get(i));
 		}
 		projectDescription.setReferencedProjects(projects);
 	}
@@ -869,7 +870,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			// popped off the stack, massaged into the right format
 			// and added to the project description when we hit the
 			// end element for PROJECTS.
-			objectStack.push(new ArrayList());
+			objectStack.push(new ArrayList<String>());
 			return;
 		}
 		if (elementName.equals(BUILD_SPEC)) {
@@ -878,30 +879,30 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			// for this build spec.  This array list will be popped off the stack,
 			// massaged into the right format and added to the project's build
 			// spec when we hit the end element for BUILD_SPEC.
-			objectStack.push(new ArrayList());
+			objectStack.push(new ArrayList<ICommand>());
 			return;
 		}
 		if (elementName.equals(NATURES)) {
 			state = S_NATURES;
 			// Push an array list to hold all the nature names.
-			objectStack.push(new ArrayList());
+			objectStack.push(new ArrayList<String>());
 			return;
 		}
 		if (elementName.equals(LINKED_RESOURCES)) {
 			// Push a HashMap to collect all the links.
-			objectStack.push(new HashMap());
+			objectStack.push(new HashMap<IPath, LinkDescription>());
 			state = S_LINKED_RESOURCES;
 			return;
 		}
 		if (elementName.equals(FILTERED_RESOURCES)) {
 			// Push a HashMap to collect all the filters.
-			objectStack.push(new HashMap());
+			objectStack.push(new HashMap<IPath, LinkedList<FilterDescription>>());
 			state = S_FILTERED_RESOURCES;
 			return;
 		}
 		if (elementName.equals(VARIABLE_LIST)) {
 			// Push a HashMap to collect all the variables.
-			objectStack.push(new HashMap());
+			objectStack.push(new HashMap<String, VariableDescription>());
 			state = S_VARIABLE_LIST;
 			return;
 		}
@@ -913,7 +914,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 
 	public ProjectDescription read(InputSource input) {
 		problems = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.FAILED_READ_METADATA, Messages.projRead_failureReadingProjectDesc, null);
-		objectStack = new Stack();
+		objectStack = new Stack<Object>();
 		state = S_INITIAL;
 		try {
 			createParser().parse(input, this);
@@ -946,8 +947,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 			file = new BufferedInputStream(new FileInputStream(location.toFile()));
 			return read(new InputSource(file));
 		} finally {
-			if (file != null)
-				file.close();
+			FileUtil.safeClose(file);
 		}
 	}
 
@@ -1002,7 +1002,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 					state = S_BUILD_COMMAND_ARGUMENTS;
 					// Push a HashMap to hold all the key/value pairs which
 					// will become the argument list.
-					objectStack.push(new HashMap());
+					objectStack.push(new HashMap<String, String>());
 				}
 				break;
 			case S_BUILD_COMMAND_ARGUMENTS :
@@ -1078,7 +1078,7 @@ public class ProjectDescriptionReader extends DefaultHandler implements IModelOb
 					state = S_MATCHER_ID;
 				} else if (elementName.equals(ARGUMENTS)) {
 					state = S_MATCHER_ARGUMENTS;
-					objectStack.push(new ArrayList());
+					objectStack.push(new ArrayList<FileInfoMatcherDescription>());
 				}
 				break;
 			case S_MATCHER_ARGUMENTS:
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectInfo.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectInfo.java
index af16c9f..a40c667 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectInfo.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -22,7 +23,7 @@ public class ProjectInfo extends ResourceInfo {
 	protected ProjectDescription description = null;
 
 	/** The list of natures for this project */
-	protected HashMap natures = null;
+	protected HashMap<String, IProjectNature> natures = null;
 
 	/** The property store for this resource (used only by the compatibility fragment) */
 	protected Object propertyStore = null;
@@ -49,7 +50,7 @@ public class ProjectInfo extends ResourceInfo {
 		if (description != null) {
 			ICommand[] buildSpec = description.getBuildSpec(false);
 			for (int i = 0; i < buildSpec.length; i++)
-				((BuildCommand) buildSpec[i]).setBuilder(null);
+				((BuildCommand) buildSpec[i]).setBuilders(null);
 		}
 	}
 
@@ -69,10 +70,10 @@ public class ProjectInfo extends ResourceInfo {
 
 	public IProjectNature getNature(String natureId) {
 		// thread safety: (Concurrency001)
-		HashMap temp = natures;
+		HashMap<String, IProjectNature> temp = natures;
 		if (temp == null)
 			return null;
-		return (IProjectNature) temp.get(natureId);
+		return temp.get(natureId);
 	}
 
 	/**
@@ -105,23 +106,24 @@ public class ProjectInfo extends ResourceInfo {
 		this.matcher = matcher;
 	}
 
+	@SuppressWarnings("unchecked")
 	public synchronized void setNature(String natureId, IProjectNature value) {
 		// thread safety: (Concurrency001)
 		if (value == null) {
 			if (natures == null)
 				return;
-			HashMap temp = (HashMap) natures.clone();
+			HashMap<String, IProjectNature> temp = (HashMap<String, IProjectNature>) natures.clone();
 			temp.remove(natureId);
 			if (temp.isEmpty())
 				natures = null;
 			else
 				natures = temp;
 		} else {
-			HashMap temp = natures;
+			HashMap<String, IProjectNature> temp = natures;
 			if (temp == null)
-				temp = new HashMap(5);
+				temp = new HashMap<String, IProjectNature>(5);
 			else
-				temp = (HashMap) natures.clone();
+				temp = (HashMap<String, IProjectNature>) natures.clone();
 			temp.put(natureId, value);
 			natures = temp;
 		}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectNatureDescriptor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectNatureDescriptor.java
index 878832f..90963b1 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectNatureDescriptor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectNatureDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -112,10 +113,10 @@ public class ProjectNatureDescriptor implements IProjectNatureDescriptor {
 		label = natureExtension.getLabel();
 		IConfigurationElement[] elements = natureExtension.getConfigurationElements();
 		int count = elements.length;
-		ArrayList requiredList = new ArrayList(count);
-		ArrayList setList = new ArrayList(count);
-		ArrayList builderList = new ArrayList(count);
-		ArrayList contentTypeList = new ArrayList(count);
+		ArrayList<String> requiredList = new ArrayList<String>(count);
+		ArrayList<String> setList = new ArrayList<String>(count);
+		ArrayList<String> builderList = new ArrayList<String>(count);
+		ArrayList<String> contentTypeList = new ArrayList<String>(count);
 		for (int i = 0; i < count; i++) {
 			IConfigurationElement element = elements[i];
 			String name = element.getName();
@@ -145,10 +146,10 @@ public class ProjectNatureDescriptor implements IProjectNatureDescriptor {
 				allowLinking = !Boolean.FALSE.toString().equalsIgnoreCase(attribute);
 			}
 		}
-		requiredNatures = (String[]) requiredList.toArray(new String[requiredList.size()]);
-		natureSets = (String[]) setList.toArray(new String[setList.size()]);
-		builderIds = (String[]) builderList.toArray(new String[builderList.size()]);
-		contentTypeIds = (String[]) contentTypeList.toArray(new String[contentTypeList.size()]);
+		requiredNatures = requiredList.toArray(new String[requiredList.size()]);
+		natureSets = setList.toArray(new String[setList.size()]);
+		builderIds = builderList.toArray(new String[builderList.size()]);
+		contentTypeIds = contentTypeList.toArray(new String[contentTypeList.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPathVariableManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPathVariableManager.java
index 135907e..75f960a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPathVariableManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPathVariableManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 Freescale Semiconductor and others.
+ * Copyright (c) 2008, 2011 Freescale Semiconductor and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
  *     IBM Corporation - ongoing development
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -71,8 +72,8 @@ public class ProjectPathVariableManager implements IPathVariableManager, IManage
 	 * @see org.eclipse.core.resources.IPathVariableManager#getPathVariableNames()
 	 */
 	public String[] getPathVariableNames() {
-		List result = new LinkedList();
-		HashMap map;
+		List<String> result = new LinkedList<String>();
+		HashMap<String,VariableDescription> map;
 		try {
 			map = ((ProjectDescription) resource.getProject().getDescription()).getVariables();
 		} catch (CoreException e) {
@@ -87,7 +88,7 @@ public class ProjectPathVariableManager implements IPathVariableManager, IManage
 		if (map != null)
 			result.addAll(map.keySet());
 		result.addAll(Arrays.asList(getWorkspaceManager().getPathVariableNames()));
-		return (String[]) result.toArray(new String[0]);
+		return result.toArray(new String[0]);
 	}
 
 	/**
@@ -131,14 +132,14 @@ public class ProjectPathVariableManager implements IPathVariableManager, IManage
 	}
 
 	public String internalGetValue(String varName) {
-		HashMap map;
+		HashMap<String,VariableDescription> map;
 		try {
 			map = ((ProjectDescription) resource.getProject().getDescription()).getVariables();
 		} catch (CoreException e) {
 			return null;
 		}
 		if (map != null && map.containsKey(varName))
-			return ((VariableDescription) map.get(varName)).getValue();
+			return map.get(varName).getValue();
 
 		String name;
 		int index = varName.indexOf('-');
@@ -170,11 +171,11 @@ public class ProjectPathVariableManager implements IPathVariableManager, IManage
 		}
 		
 		try {
-			HashMap map = ((ProjectDescription) resource.getProject().getDescription()).getVariables();
+			HashMap<String,VariableDescription> map = ((ProjectDescription) resource.getProject().getDescription()).getVariables();
 			if (map != null) {
-				Iterator it = map.keySet().iterator();
+				Iterator<String> it = map.keySet().iterator();
 				while(it.hasNext()) {
-					String name = (String) it.next();
+					String name = it.next();
 					if (name.equals(varName))
 						return true;
 				}
@@ -205,7 +206,7 @@ public class ProjectPathVariableManager implements IPathVariableManager, IManage
 	}
 
 	public URI resolveVariable(String variable) {
-		LinkedList variableStack = new LinkedList();
+		LinkedList<String> variableStack = new LinkedList<String>();
 
 		String value = resolveVariable(variable, variableStack);
 		if (value != null) {
@@ -218,9 +219,9 @@ public class ProjectPathVariableManager implements IPathVariableManager, IManage
 		return null;
 	}
 
-	public String resolveVariable(String value, LinkedList variableStack) {
+	public String resolveVariable(String value, LinkedList<String> variableStack) {
 		if (variableStack == null)
-			variableStack = new LinkedList();
+			variableStack = new LinkedList<String>();
 
 		String tmp = internalGetValue(value);
 		if (tmp == null) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPreferences.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPreferences.java
index 10686d2..90d6367 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPreferences.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectPreferences.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Markus Schorn (Wind River) - [108066] Project prefs marked dirty on read
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -36,47 +37,41 @@ public class ProjectPreferences extends EclipsePreferences {
 
 	class SortedProperties extends Properties {
 
-		class IteratorWrapper implements Enumeration {
-			Iterator iterator;
-
-			public IteratorWrapper(Iterator iterator) {
-				this.iterator = iterator;
-			}
-
-			public boolean hasMoreElements() {
-				return iterator.hasNext();
-			}
-
-			public Object nextElement() {
-				return iterator.next();
-			}
-		}
-
 		private static final long serialVersionUID = 1L;
 
 		/* (non-Javadoc)
 		 * @see java.util.Hashtable#keys()
 		 */
-		public synchronized Enumeration keys() {
-			TreeSet set = new TreeSet();
-			for (Enumeration e = super.keys(); e.hasMoreElements();)
+		public synchronized Enumeration<Object> keys() {
+			TreeSet<Object> set = new TreeSet<Object>();
+			for (Enumeration<Object> e = super.keys(); e.hasMoreElements();)
 				set.add(e.nextElement());
-			return new IteratorWrapper(set.iterator());
+			return Collections.enumeration(set);
+		}
+
+		/* (non-Javadoc)
+		 * @see java.util.Hashtable#entrySet()
+		 */
+		public Set<Map.Entry<Object, Object>> entrySet() {
+			TreeSet<Map.Entry<Object, Object>> set = new TreeSet<Map.Entry<Object, Object>>(new Comparator<Map.Entry<Object, Object>>() {
+				public int compare(Map.Entry<Object, Object> e1, Map.Entry<Object, Object> e2) {
+					String s1 = (String) e1.getKey();
+					String s2 = (String) e2.getKey();
+					return s1.compareTo(s2);
+				}
+			});
+			for (Iterator<Map.Entry<Object, Object>> i = super.entrySet().iterator(); i.hasNext();)
+				set.add(i.next());
+			return set;
 		}
 	}
-	
-	/**
-	 * Name of a preference for configuring whether encodings for derived resources 
-	 * within the project should be stored in a separate derived preference file.
-	 */
-	public static final String PREF_SEPARATE_DERIVED_ENCODINGS = "separateDerivedEncodings"; //$NON-NLS-1$
 
 	static final String PREFS_REGULAR_QUALIFIER = ResourcesPlugin.PI_RESOURCES;
 	static final String PREFS_DERIVED_QUALIFIER = PREFS_REGULAR_QUALIFIER + ".derived"; //$NON-NLS-1$
 	/**
 	 * Cache which nodes have been loaded from disk
 	 */
-	protected static Set loadedNodes = Collections.synchronizedSet(new HashSet());
+	protected static Set<String> loadedNodes = Collections.synchronizedSet(new HashSet<String>());
 	private IFile file;
 	private boolean initialized = false;
 	/**
@@ -280,8 +275,8 @@ public class ProjectPreferences extends EclipsePreferences {
 	private static void removeLoadedNodes(Preferences node) {
 		String path = node.absolutePath();
 		synchronized (loadedNodes) {
-			for (Iterator i = loadedNodes.iterator(); i.hasNext();) {
-				String key = (String) i.next();
+			for (Iterator<String> i = loadedNodes.iterator(); i.hasNext();) {
+				String key = i.next();
 				if (key.startsWith(path))
 					i.remove();
 			}
@@ -349,21 +344,7 @@ public class ProjectPreferences extends EclipsePreferences {
 		if (segmentCount > 2)
 			qualifier = getSegment(path, 2);
 
-		if (segmentCount != 2)
-			return;
-
-		// else segmentCount == 2 so we initialize the children
-		if (initialized)
-			return;
-		try {
-			synchronized (this) {
-				String[] names = computeChildren();
-				for (int i = 0; i < names.length; i++)
-					addChild(names[i], null);
-			}
-		} finally {
-			initialized = true;
-		}
+		initialize();
 	}
 
 	/*
@@ -382,13 +363,13 @@ public class ProjectPreferences extends EclipsePreferences {
 		} catch (CoreException e) {
 			return EMPTY_STRING_ARRAY;
 		}
-		ArrayList result = new ArrayList();
+		ArrayList<String> result = new ArrayList<String>();
 		for (int i = 0; i < members.length; i++) {
 			IResource resource = members[i];
 			if (resource.getType() == IResource.FILE && PREFS_FILE_EXTENSION.equals(resource.getFullPath().getFileExtension()))
 				result.add(resource.getFullPath().removeFileExtension().lastSegment());
 		}
-		return (String[]) result.toArray(EMPTY_STRING_ARRAY);
+		return result.toArray(EMPTY_STRING_ARRAY);
 	}
 
 	public void flush() throws BackingStoreException {
@@ -399,30 +380,6 @@ public class ProjectPreferences extends EclipsePreferences {
 			super.flush();
 		} finally {
 			isWriting = false;
-			if ((segmentCount == 3) && (PREFS_DERIVED_QUALIFIER.equals(qualifier))) {
-				final IFile fileInWorkspace = getFile();
-				if (fileInWorkspace != null) {
-					IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-						public void run(IProgressMonitor monitor) throws CoreException {
-							if (fileInWorkspace.exists())
-								fileInWorkspace.setDerived(true, monitor);
-						}
-					};
-					Workspace workspace = ((Workspace) ResourcesPlugin.getWorkspace());
-					try {
-						if (workspace.getWorkManager().isLockAlreadyAcquired())
-							operation.run(null);
-						else
-							workspace.run(operation, workspace.getRuleFactory().derivedRule(fileInWorkspace), IResource.NONE, null);
-					} catch (OperationCanceledException e) {
-						throw new BackingStoreException(Messages.preferences_operationCanceled);
-					} catch (CoreException e) {
-						String message = NLS.bind(Messages.preferences_setDerivedException, fileInWorkspace.getFullPath());
-						log(new Status(IStatus.ERROR, ResourcesPlugin.PI_RESOURCES, IStatus.ERROR, message, e));
-						throw new BackingStoreException(message);
-					}
-				}
-			}
 		}
 	}
 
@@ -474,9 +431,9 @@ public class ProjectPreferences extends EclipsePreferences {
 
 	protected String internalPut(String key, String newValue) {
 		if ((segmentCount == 3) && PREFS_REGULAR_QUALIFIER.equals(qualifier) && (project != null)) {
-			if (ProjectPreferences.PREF_SEPARATE_DERIVED_ENCODINGS.equals(key)) {
+			if (ResourcesPlugin.PREF_SEPARATE_DERIVED_ENCODINGS.equals(key)) {
 				Workspace workspace = ((Workspace) ResourcesPlugin.getWorkspace());
-				if (Boolean.valueOf(newValue).booleanValue())
+				if (Boolean.parseBoolean(newValue))
 					workspace.getCharsetManager().splitEncodingPreferences(project);
 				else
 					workspace.getCharsetManager().mergeEncodingPreferences(project);
@@ -485,6 +442,29 @@ public class ProjectPreferences extends EclipsePreferences {
 		return super.internalPut(key, newValue);
 	}
 
+	protected void initialize() {
+		if (segmentCount != 2)
+			return;
+
+		// if already initialized, then skip this initialization
+		if (initialized)
+			return;
+
+		// initialize the children only if project is opened
+		if (project.isOpen()) {
+			try {
+				synchronized (this) {
+					String[] names = computeChildren();
+					for (int i = 0; i < names.length; i++)
+						addChild(names[i], null);
+				}
+			} finally {
+				// mark as initialized so that subsequent project opening will not initialize preferences again
+				initialized = true;
+			}
+		}
+	}
+
 	protected boolean isAlreadyLoaded(IEclipsePreferences node) {
 		return loadedNodes.contains(node.absolutePath());
 	}
@@ -500,6 +480,9 @@ public class ProjectPreferences extends EclipsePreferences {
 				Policy.debug("Unable to determine preference file or file does not exist for node: " + absolutePath()); //$NON-NLS-1$
 			return;
 		}
+		// Before loading the preferences, try to initialize parent node (/project/<projectName>)
+		// see bug 335591
+		((ProjectPreferences) parent).initialize();
 		if (Policy.DEBUG_PREFERENCES)
 			Policy.debug("Loading preferences from file: " + localFile.getFullPath()); //$NON-NLS-1$
 		Properties fromDisk = new Properties();
@@ -519,9 +502,6 @@ public class ProjectPreferences extends EclipsePreferences {
 			FileUtil.safeClose(input);
 		}
 		convertFromProperties(this, fromDisk, true);
-	}
-
-	protected void loaded() {
 		loadedNodes.add(absolutePath());
 	}
 
@@ -549,7 +529,7 @@ public class ProjectPreferences extends EclipsePreferences {
 	public void remove(String key) {
 		super.remove(key);
 		if ((segmentCount == 3) && PREFS_REGULAR_QUALIFIER.equals(qualifier) && (project != null)) {
-			if (ProjectPreferences.PREF_SEPARATE_DERIVED_ENCODINGS.equals(key)) {
+			if (ResourcesPlugin.PREF_SEPARATE_DERIVED_ENCODINGS.equals(key)) {
 				Workspace workspace = ((Workspace) ResourcesPlugin.getWorkspace());
 				workspace.getCharsetManager().mergeEncodingPreferences(project);
 			}
@@ -600,18 +580,16 @@ public class ProjectPreferences extends EclipsePreferences {
 			ByteArrayOutputStream output = new ByteArrayOutputStream();
 			try {
 				table.store(output, null);
+				output.close();
 			} catch (IOException e) {
 				String message = NLS.bind(Messages.preferences_saveProblems, absolutePath());
 				log(new Status(IStatus.ERROR, Platform.PI_RUNTIME, IStatus.ERROR, message, e));
 				throw new BackingStoreException(message);
 			} finally {
-				try {
-					output.close();
-				} catch (IOException e) {
-					// ignore
-				}
+				FileUtil.safeClose(output);
 			}
 			final InputStream input = new BufferedInputStream(new ByteArrayInputStream(output.toByteArray()));
+			final String finalQualifier = qualifier;
 			IWorkspaceRunnable operation = new IWorkspaceRunnable() {
 				public void run(IProgressMonitor monitor) throws CoreException {
 					if (fileInWorkspace.exists()) {
@@ -636,6 +614,8 @@ public class ProjectPreferences extends EclipsePreferences {
 							Policy.debug("Creating preference file: " + fileInWorkspace.getLocation()); //$NON-NLS-1$
 						fileInWorkspace.create(input, IResource.NONE, null);
 					}
+					if (PREFS_DERIVED_QUALIFIER.equals(finalQualifier))
+						fileInWorkspace.setDerived(true, null);
 				}
 			};
 			//don't bother with scheduling rules if we are already inside an operation
@@ -643,8 +623,8 @@ public class ProjectPreferences extends EclipsePreferences {
 				if (((Workspace) workspace).getWorkManager().isLockAlreadyAcquired()) {
 					operation.run(null);
 				} else {
-					// we might: create the .settings folder, create the file, or modify the file.
-					ISchedulingRule rule = MultiRule.combine(factory.createRule(fileInWorkspace.getParent()), factory.modifyRule(fileInWorkspace));
+					// we might: create the .settings folder, create the file, modify the file, or set derived flag for the file.
+					ISchedulingRule rule = MultiRule.combine(new ISchedulingRule[] {factory.createRule(fileInWorkspace.getParent()), factory.modifyRule(fileInWorkspace), factory.derivedRule(fileInWorkspace)});
 					workspace.run(operation, rule, IResource.NONE, null);
 				}
 			} catch (OperationCanceledException e) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectVariableProviderManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectVariableProviderManager.java
index 8b6c6a9..0629050 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectVariableProviderManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ProjectVariableProviderManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 Freescale Semiconductor and others.
+ * Copyright (c) 2008, 2011 Freescale Semiconductor and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     Freescale Semiconductor - initial API and implementation
  *     IBM Corporation - ongoing development
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -65,7 +66,7 @@ public class ProjectVariableProviderManager {
 		}
 	}
 
-	private static Map descriptors;
+	private static Map<String, Descriptor> descriptors;
 	private static ProjectVariableProviderManager instance;
 
 	public synchronized static ProjectVariableProviderManager getDefault() {
@@ -77,7 +78,7 @@ public class ProjectVariableProviderManager {
 
 	public Descriptor[] getDescriptors() {
 		lazyInitialize();
-		return (Descriptor[]) descriptors.values().toArray(new Descriptor[descriptors.size()]);
+		return descriptors.values().toArray(new Descriptor[descriptors.size()]);
 	}
 
 	protected void lazyInitialize() {
@@ -85,7 +86,7 @@ public class ProjectVariableProviderManager {
 			return;
 		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_VARIABLE_PROVIDERS);
 		IExtension[] extensions = point.getExtensions();
-		descriptors = new HashMap(extensions.length * 2 + 1);
+		descriptors = new HashMap<String, Descriptor>(extensions.length * 2 + 1);
 		for (int i = 0, imax = extensions.length; i < imax; i++) {
 			IConfigurationElement[] elements = extensions[i].getConfigurationElements();
 			int count = elements.length;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
index d538383..bc5155a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@
  *     Martin Oberhuber (Wind River) -  [245937] ProjectDescription#setLinkLocation() detects non-change
  *     Serge Beauchamp (Freescale Semiconductor) - [252996] add resource filtering
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Project Path Variable Support
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -74,13 +75,6 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 			new ElementTreeIterator(workspace.getElementTree(), getFullPath()).iterate(elementVisitor);
 		} catch (WrappedRuntimeException e) {
 			throw (CoreException) e.getTargetException();
-		} catch (OperationCanceledException e) {
-			throw e;
-		} catch (RuntimeException e) {
-			String msg = Messages.resources_errorVisiting;
-			IResourceStatus errorStatus = new ResourceStatus(IResourceStatus.INTERNAL_ERROR, getFullPath(), msg, e);
-			Policy.log(errorStatus);
-			throw new ResourceException(errorStatus);
 		} finally {
 			proxy.requestor = null;
 			proxy.info = null;
@@ -842,11 +836,11 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 		if (exists())
 			getMarkerManager().removeMarkers(this, IResource.DEPTH_INFINITE);
 		// if this is a linked resource or contains linked resources , remove their entries from the project description
-		List links = findLinks();
+		List<Resource> links = findLinks();
 		//pre-delete notification to internal infrastructure
 		if (links != null)
-			for (Iterator it = links.iterator(); it.hasNext();)
-				workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.PRE_LINK_DELETE, (IResource) it.next()));
+			for (Iterator<Resource> it = links.iterator(); it.hasNext();)
+				workspace.broadcastEvent(LifecycleEvent.newEvent(LifecycleEvent.PRE_LINK_DELETE, it.next()));
 
 		// check if we deleted a preferences file 
 		ProjectPreferences.deleted(this);
@@ -864,8 +858,8 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 			ProjectDescription description = project.internalGetDescription();
 			if (description != null) {
 				boolean wasChanged = false;
-				for (Iterator it = links.iterator(); it.hasNext();)
-					wasChanged |= description.setLinkLocation(((IResource) it.next()).getProjectRelativePath(), null);
+				for (Iterator<Resource> it = links.iterator(); it.hasNext();)
+					wasChanged |= description.setLinkLocation(it.next().getProjectRelativePath(), null);
 				if (wasChanged) {
 					project.internalSetDescription(description, true);
 					project.writeDescription(IResource.FORCE);
@@ -873,14 +867,14 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 			}
 		}
 
-		List filters = findFilters();
+		List<Resource> filters = findFilters();
 		if ((filters != null) && (filters.size() > 0)) {
 			// delete resource filters
 			Project project = (Project) getProject();
 			ProjectDescription description = project.internalGetDescription();
 			if (description != null) {
-				for (Iterator it = filters.iterator(); it.hasNext();)
-					description.setFilters(((IResource) it.next()).getProjectRelativePath(), null);
+				for (Iterator<Resource> it = filters.iterator(); it.hasNext();)
+					description.setFilters(it.next().getProjectRelativePath(), null);
 				project.internalSetDescription(description, true);
 				project.writeDescription(IResource.FORCE);
 			}
@@ -904,20 +898,20 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 	 * Returns a list of all linked resources at or below this resource, or null if there
 	 * are no links.
 	 */
-	private List findLinks() {
+	private List<Resource> findLinks() {
 		Project project = (Project) getProject();
 		ProjectDescription description = project.internalGetDescription();
-		HashMap linkMap = description.getLinks();
+		HashMap<IPath,LinkDescription> linkMap = description.getLinks();
 		if (linkMap == null)
 			return null;
-		List links = null;
+		List<Resource> links = null;
 		IPath myPath = getProjectRelativePath();
-		for (Iterator it = linkMap.values().iterator(); it.hasNext();) {
-			LinkDescription link = (LinkDescription) it.next();
+		for (Iterator<LinkDescription> it = linkMap.values().iterator(); it.hasNext();) {
+			LinkDescription link = it.next();
 			IPath linkPath = link.getProjectRelativePath();
 			if (myPath.isPrefixOf(linkPath)) {
 				if (links == null)
-					links = new ArrayList();
+					links = new ArrayList<Resource>();
 				links.add(workspace.newResource(project.getFullPath().append(linkPath), link.getType()));
 			}
 		}
@@ -928,19 +922,19 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 	 * Returns a list of all filtered resources at or below this resource, or null if there
 	 * are no links.
 	 */
-	private List findFilters() {
+	private List<Resource> findFilters() {
 		Project project = (Project) getProject();
 		ProjectDescription description = project.internalGetDescription();
-		List filters = null;
+		List<Resource> filters = null;
 		if (description != null) {
-			HashMap filterMap = description.getFilters();
+			HashMap<IPath, LinkedList<FilterDescription>> filterMap = description.getFilters();
 			if (filterMap != null) {
 				IPath myPath = getProjectRelativePath();
-				for (Iterator it = filterMap.keySet().iterator(); it.hasNext();) {
-					IPath filterPath = (IPath) it.next();
+				for (Iterator<IPath> it = filterMap.keySet().iterator(); it.hasNext();) {
+					IPath filterPath = it.next();
 					if (myPath.isPrefixOf(filterPath)) {
 						if (filters == null)
-							filters = new ArrayList();
+							filters = new ArrayList<Resource>();
 						filters.add(workspace.newResource(project.getFullPath().append(filterPath), IResource.FOLDER));
 					}
 				}
@@ -1051,13 +1045,13 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 				project.writeDescription(IResource.NONE);
 		}
 
-		List filters = findFilters();
+		List<Resource> filters = findFilters();
 		if ((filters != null) && (filters.size() > 0)) {
 			// delete resource filters
 			Project project = (Project) getProject();
 			ProjectDescription description = project.internalGetDescription();
-			for (Iterator it = filters.iterator(); it.hasNext();)
-				description.setFilters(((IResource) it.next()).getProjectRelativePath(), null);
+			for (Iterator<Resource> it = filters.iterator(); it.hasNext();)
+				description.setFilters(it.next().getProjectRelativePath(), null);
 			project.writeDescription(IResource.NONE);
 		}
 
@@ -1182,7 +1176,7 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 	/* (non-Javadoc)
 	 * @see IResource#getPersistentProperties()
 	 */
-	public Map getPersistentProperties() throws CoreException {
+	public Map<QualifiedName, String> getPersistentProperties() throws CoreException {
 		checkAccessibleAndLocal(DEPTH_ZERO);
 		return getPropertyManager().getProperties(this);
 	}
@@ -1252,7 +1246,7 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 	/* (non-Javadoc)
 	 * @see IResource#getSessionProperties()
 	 */
-	public Map getSessionProperties() throws CoreException {
+	public Map<QualifiedName,Object> getSessionProperties() throws CoreException {
 		ResourceInfo info = checkAccessibleAndLocal(DEPTH_ZERO);
 		return info.getSessionProperties();
 	}
@@ -1400,12 +1394,12 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 			ProjectDescription desc = ((Project) project).internalGetDescription();
 			if (desc == null)
 				return false;
-			HashMap links = desc.getLinks();
+			HashMap<IPath,LinkDescription> links = desc.getLinks();
 			if (links == null)
 				return false;
 			IPath myPath = getProjectRelativePath();
-			for (Iterator it = links.values().iterator(); it.hasNext();) {
-				if (((LinkDescription) it.next()).getProjectRelativePath().isPrefixOf(myPath))
+			for (Iterator<LinkDescription> it = links.values().iterator(); it.hasNext();) {
+				if (it.next().getProjectRelativePath().isPrefixOf(myPath))
 					return true;
 			}
 			return false;
@@ -1711,6 +1705,7 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 	 * @deprecated Replaced by {@link #setDerived(boolean, IProgressMonitor)} which 
 	 * is a workspace operation and reports changes in resource deltas.
 	 */
+	@Deprecated
 	public void setDerived(boolean isDerived) throws CoreException {
 		// fetch the info but don't bother making it mutable even though we are going
 		// to modify it.  We don't know whether or not the tree is open and it really doesn't
@@ -1928,7 +1923,7 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 	 * Calls the move/delete hook to perform the deletion.  Since this method calls 
 	 * client code, it is run "unprotected", so the workspace lock is not held.  
 	 */
-	private void unprotectedDelete(ResourceTree tree, int updateFlags, IProgressMonitor monitor) throws CoreException {
+	private void unprotectedDelete(ResourceTree tree, int updateFlags, IProgressMonitor monitor) {
 		IMoveDeleteHook hook = workspace.getMoveDeleteHook();
 		switch (getType()) {
 			case IResource.FILE :
@@ -2052,21 +2047,25 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 	public boolean isFilteredWithException(boolean throwExeception) throws CoreException {
 		if (isLinked() || isVirtual())
 			return false;
+		
+		Project project = (Project) getProject();
+		if (project == null)
+			return false;
+		final ProjectDescription description = project.internalGetDescription();
+		if (description == null)
+			return false;
+		if (description.getFilters() == null)
+			return false;
+
 		Resource currentResource = this;
 		while (currentResource != null && currentResource.getParent() != null) {
 			Resource parent = (Resource) currentResource.getParent();
 			IFileStore store = currentResource.getStore();
 			if (store != null) {
-				IFileInfo fileInfo = store.fetchInfo();
+				FileInfo fileInfo = new FileInfo(store.getName());
+				fileInfo.setDirectory(currentResource.getType() == IResource.FOLDER);
 				if (fileInfo != null) {
-					if (!fileInfo.exists()) {
-						// If the file/folder doesn't exist, it won't have the file/folder flag set,
-						// so we create another one and set that attribute directly.
-						FileInfo info = new FileInfo(fileInfo.getName());
-						info.setDirectory(currentResource.getType() == IResource.FOLDER);
-						fileInfo = info;
-					}
-					IFileInfo[] filtered = parent.filterChildren(new IFileInfo[] {fileInfo}, throwExeception);
+					IFileInfo[] filtered = parent.filterChildren(project, description, new IFileInfo[] {fileInfo}, throwExeception);
 					if (filtered.length == 0)
 						return true;
 				}
@@ -2083,10 +2082,14 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 		final ProjectDescription description = project.internalGetDescription();
 		if (description == null)
 			return list;
+		return filterChildren(project, description, list, throwException);
+	}
+	
+	private IFileInfo[] filterChildren(Project project, ProjectDescription description, IFileInfo[] list, boolean throwException) throws CoreException {
 		IPath relativePath = getProjectRelativePath();
-		LinkedList/*<Filter>*/currentIncludeFilters = new LinkedList/*<FilterDescription>*/();
-		LinkedList/*<Filter>*/currentExcludeFilters = new LinkedList/*<FilterDescription>*/();
-		LinkedList/*<FilterDescription>*/filters = null;
+		LinkedList<Filter> currentIncludeFilters = new LinkedList<Filter>();
+		LinkedList<Filter> currentExcludeFilters = new LinkedList<Filter>();
+		LinkedList<FilterDescription> filters = null;
 		
 		boolean firstSegment = true;
 		do {
@@ -2094,8 +2097,8 @@ public abstract class Resource extends PlatformObject implements IResource, ICor
 				relativePath = relativePath.removeLastSegments(1);
 			filters = description.getFilter(relativePath);
 			if (filters != null) {
-				for (Iterator it = filters.iterator(); it.hasNext();) {
-					FilterDescription desc = (FilterDescription) it.next();
+				for (Iterator<FilterDescription> it = filters.iterator(); it.hasNext();) {
+					FilterDescription desc = it.next();
 					if (firstSegment || desc.isInheritable()) {
 						Filter filter = new Filter(project, desc);
 						if (filter.isIncludeOnly()) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceInfo.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceInfo.java
index 636919c..63f7f0c 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceInfo.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Oakland Software Incorporated - added getSessionProperties and getPersistentProperties
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -67,7 +68,7 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 * interface so we ensure that we get it right since we are making certain
 	 * assumptions about the object type w.r.t. casting.
 	 */
-	protected ObjectMap sessionProperties = null;
+	protected ObjectMap<QualifiedName,Object> sessionProperties = null;
 
 	/** 
 	 * The table of sync information. 
@@ -76,7 +77,7 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 * interface so we ensure that we get it right since we are making certain
 	 * assumptions about the object type w.r.t. casting.
 	 */
-	protected ObjectMap syncInfo = null;
+	protected ObjectMap<QualifiedName, Object> syncInfo = null;
 
 	/** 
 	 * Returns the integer value stored in the indicated part of this info's flags.
@@ -194,13 +195,14 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 * Returns a copy of the map of this resource session properties.
 	 * An empty map is returned if there are none.
 	 */
-	public Map getSessionProperties() {
+	@SuppressWarnings("unchecked")
+	public Map<QualifiedName,Object> getSessionProperties() {
 		// thread safety: (Concurrency001)
-		ObjectMap temp = sessionProperties;
+		ObjectMap<QualifiedName,Object> temp = sessionProperties;
 		if (temp == null)
-			temp = new ObjectMap(5);
+			temp = new ObjectMap<QualifiedName, Object>(5);
 		else
-			temp = (ObjectMap) sessionProperties.clone();
+			temp = (ObjectMap<QualifiedName, Object>) sessionProperties.clone();
 		return temp;
 	}
 	
@@ -209,7 +211,7 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 */
 	public Object getSessionProperty(QualifiedName name) {
 		// thread safety: (Concurrency001)
-		Map temp = sessionProperties;
+		Map<QualifiedName, Object> temp = sessionProperties;
 		if (temp == null)
 			return null;
 		return temp.get(name);
@@ -220,10 +222,11 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 * interface so we ensure that we get it right since we are making certain
 	 * assumptions about the object type w.r.t. casting.
 	 */
-	public synchronized ObjectMap getSyncInfo(boolean makeCopy) {
+	@SuppressWarnings("unchecked")
+	public synchronized ObjectMap<QualifiedName, Object> getSyncInfo(boolean makeCopy) {
 		if (syncInfo == null)
 			return null;
-		return makeCopy ? (ObjectMap) syncInfo.clone() : syncInfo;
+		return makeCopy ? (ObjectMap<QualifiedName, Object>) syncInfo.clone() : syncInfo;
 	}
 
 	public synchronized byte[] getSyncInfo(QualifiedName id, boolean makeCopy) {
@@ -371,6 +374,10 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 */
 	public void setNodeId(long id) {
 		nodeId = id;
+		// Resource modification stamp starts from current nodeId
+		// so future generations are distinguishable (bug 160728)
+		if (modStamp == 0)
+			modStamp = nodeId;
 	}
 
 	/**
@@ -384,23 +391,24 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 * Sets the identified session property to the given value.  If
 	 * the value is null, the property is removed.
 	 */
+	@SuppressWarnings("unchecked")
 	public synchronized void setSessionProperty(QualifiedName name, Object value) {
 		// thread safety: (Concurrency001)
 		if (value == null) {
 			if (sessionProperties == null)
 				return;
-			ObjectMap temp = (ObjectMap) sessionProperties.clone();
+			ObjectMap<QualifiedName, Object> temp = (ObjectMap<QualifiedName, Object>) sessionProperties.clone();
 			temp.remove(name);
 			if (temp.isEmpty())
 				sessionProperties = null;
 			else
 				sessionProperties = temp;
 		} else {
-			ObjectMap temp = sessionProperties;
+			ObjectMap<QualifiedName, Object> temp = sessionProperties;
 			if (temp == null)
-				temp = new ObjectMap(5);
+				temp = new ObjectMap<QualifiedName, Object>(5);
 			else
-				temp = (ObjectMap) sessionProperties.clone();
+				temp = (ObjectMap<QualifiedName, Object>) sessionProperties.clone();
 			temp.put(name, value);
 			sessionProperties = temp;
 		}
@@ -411,7 +419,7 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 * interface so we ensure that we get it right since we are making certain
 	 * assumptions about the object type w.r.t. casting.
 	 */
-	protected void setSyncInfo(ObjectMap syncInfo) {
+	protected void setSyncInfo(ObjectMap<QualifiedName, Object> syncInfo) {
 		this.syncInfo = syncInfo;
 	}
 
@@ -426,7 +434,7 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 		} else {
 			//add sync info
 			if (syncInfo == null)
-				syncInfo = new ObjectMap(5);
+				syncInfo = new ObjectMap<QualifiedName, Object>(5);
 			syncInfo.put(id, value.clone());
 		}
 	}
@@ -443,7 +451,7 @@ public class ResourceInfo implements IElementTreeData, ICoreConstants, IStringPo
 	 * Method declared on IStringPoolParticipant
 	 */
 	public void shareStrings(StringPool set) {
-		ObjectMap map = syncInfo;
+		ObjectMap<QualifiedName, Object> map = syncInfo;
 		if (map != null)
 			map.shareStrings(set);
 		map = sessionProperties;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java
index a0670b7..41e8b6d 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -29,7 +30,7 @@ class Rules implements IResourceRuleFactory, ILifecycleListener {
 	/**
 	 * Map of project names to the factory for that project.
 	 */
-	private final Map projectsToRules = Collections.synchronizedMap(new HashMap());
+	private final Map<String, IResourceRuleFactory> projectsToRules = Collections.synchronizedMap(new HashMap<String, IResourceRuleFactory>());
 	private final TeamHook teamHook;
 	private final IWorkspaceRoot root;
 
@@ -83,7 +84,7 @@ class Rules implements IResourceRuleFactory, ILifecycleListener {
 	 * Returns the scheduling rule factory for the given resource
 	 */
 	private IResourceRuleFactory factoryFor(IResource destination) {
-		IResourceRuleFactory fac = (IResourceRuleFactory) projectsToRules.get(destination.getFullPath().segment(0));
+		IResourceRuleFactory fac = projectsToRules.get(destination.getFullPath().segment(0));
 		if (fac == null) {
 			//use the default factory if the project is not yet accessible
 			if (!destination.getProject().isAccessible())
@@ -189,7 +190,7 @@ class Rules implements IResourceRuleFactory, ILifecycleListener {
 			return factoryFor(resources[0]).validateEditRule(resources);
 		}
 		//gather rules for each resource from appropriate factory
-		HashSet rules = new HashSet();
+		HashSet<ISchedulingRule> rules = new HashSet<ISchedulingRule>();
 		IResource[] oneResource = new IResource[1];
 		for (int i = 0; i < resources.length; i++) {
 			if (resources[i].getType() == IResource.ROOT)
@@ -202,8 +203,8 @@ class Rules implements IResourceRuleFactory, ILifecycleListener {
 		if (rules.isEmpty())
 			return null;
 		if (rules.size() == 1)
-			return (ISchedulingRule) rules.iterator().next();
-		ISchedulingRule[] ruleArray = (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]);
+			return rules.iterator().next();
+		ISchedulingRule[] ruleArray = rules.toArray(new ISchedulingRule[rules.size()]);
 		return new MultiRule(ruleArray);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SafeFileTable.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SafeFileTable.java
index 56680dd..2e31b46 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SafeFileTable.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SafeFileTable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,12 +7,14 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
 import java.io.*;
 import java.util.Properties;
 import java.util.Set;
+import org.eclipse.core.internal.utils.FileUtil;
 import org.eclipse.core.internal.utils.Messages;
 import org.eclipse.core.resources.IResourceStatus;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -32,8 +34,8 @@ public class SafeFileTable {
 	}
 
 	public IPath[] getFiles() {
-		Set set = table.keySet();
-		String[] keys = (String[]) set.toArray(new String[set.size()]);
+		Set<Object> set = table.keySet();
+		String[] keys = set.toArray(new String[set.size()]);
 		IPath[] files = new IPath[keys.length];
 		for (int i = 0; i < keys.length; i++)
 			files[i] = new Path(keys[i]);
@@ -80,8 +82,9 @@ public class SafeFileTable {
 			FileOutputStream output = new FileOutputStream(target);
 			try {
 				table.store(output, "safe table"); //$NON-NLS-1$
-			} finally {
 				output.close();
+			} finally {
+				FileUtil.safeClose(output);
 			}
 		} catch (IOException e) {
 			String message = Messages.resources_exSafeSave;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SaveManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SaveManager.java
index 50c7f7e..54a0b49 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SaveManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SaveManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,20 +9,16 @@
  *     IBM Corporation - initial API and implementation
  * Francis Lynch (Wind River) - [301563] Save and load tree snapshots
  * Francis Lynch (Wind River) - [305718] Allow reading snapshot into renamed project
+ * Broadcom Corporation - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
-import org.eclipse.core.runtime.OperationCanceledException;
-
-import org.eclipse.core.filesystem.IFileStore;
-
-import org.eclipse.core.filesystem.EFS;
-
-import java.net.URI;
-
 import java.io.*;
+import java.net.URI;
 import java.util.*;
 import java.util.zip.*;
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
 import org.eclipse.core.internal.events.*;
 import org.eclipse.core.internal.localstore.*;
 import org.eclipse.core.internal.utils.*;
@@ -34,6 +30,31 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.osgi.util.NLS;
 
 public class SaveManager implements IElementInfoFlattener, IManager, IStringPoolParticipant {
+	class MasterTable extends Properties {
+		private static final long serialVersionUID = 1L;
+
+		/* (non-Javadoc)
+		 * @see java.util.Hashtable#put(java.lang.Object, java.lang.Object)
+		 */
+		@Override
+		public synchronized Object put(Object key, Object value) {
+			Object prev = super.put(key, value);
+			if (prev != null && ROOT_SEQUENCE_NUMBER_KEY.equals(key)) {
+				int prevSeqNum = new Integer((String) prev).intValue();
+				int currSeqNum = new Integer((String) value).intValue();
+				if (prevSeqNum > currSeqNum) {
+					//revert last put operation
+					super.put(key, prev);
+					//notify about the problem, do not throw exception but add the exception to know where it occurred
+					String message = "Cannot set lower sequence number for root (previous: " + prevSeqNum + ", new: " + currSeqNum + "). Ignoring the new value."; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					Policy.log(new Status(IStatus.ERROR, ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, message, new IllegalArgumentException(message)));
+				}
+			}
+			return prev;
+		}
+	}
+
+	protected static final String ROOT_SEQUENCE_NUMBER_KEY = Path.ROOT.toString() + LocalMetaArea.F_TREE;
 	protected static final String CLEAR_DELTA_PREFIX = "clearDelta_"; //$NON-NLS-1$
 	protected static final String DELTA_EXPIRATION_PREFIX = "deltaExpiration_"; //$NON-NLS-1$
 	protected static final int DONE_SAVING = 3;
@@ -55,7 +76,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	protected static final String SAVE_NUMBER_PREFIX = "saveNumber_"; //$NON-NLS-1$
 	protected static final int SAVING = 2;
 	protected ElementTree lastSnap;
-	protected Properties masterTable;
+	protected MasterTable masterTable;
 
 	/**
 	 * A flag indicating that a save operation is occurring.  This is a signal
@@ -83,7 +104,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 * independent synchronization. This is accomplished using a synchronized
 	 * wrapper map.
 	 */
-	protected Map savedStates;
+	protected Map<String, SavedState> savedStates;
 
 	/**
 	 * Ids of plugins that participate on a workspace save. Maps String (plugin id)-> ISaveParticipant.
@@ -91,7 +112,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 * independent synchronization. This is accomplished using a synchronized
 	 * wrapper map.
 	 */
-	protected Map saveParticipants;
+	protected Map<String, ISaveParticipant> saveParticipants;
 
 	protected final DelayedSnapshotJob snapshotJob;
 
@@ -108,14 +129,14 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		this.workspace = workspace;
 		this.snapshotJob = new DelayedSnapshotJob(this);
 		snapshotRequested = false;
-		saveParticipants = Collections.synchronizedMap(new HashMap(10));
+		saveParticipants = Collections.synchronizedMap(new HashMap<String, ISaveParticipant>(10));
 	}
 
 	public ISavedState addParticipant(String pluginId, ISaveParticipant participant) throws CoreException {
 		// If the plugin was already registered as a save participant we return null
 		if (saveParticipants.put(pluginId, participant) != null)
 			return null;
-		SavedState state = (SavedState) savedStates.get(pluginId);
+		SavedState state = savedStates.get(pluginId);
 		if (state != null) {
 			if (isDeltaCleared(pluginId)) {
 				// this plugin was marked not to receive deltas
@@ -140,20 +161,20 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		return null;
 	}
 
-	protected void broadcastLifecycle(final int lifecycle, Map contexts, final MultiStatus warnings, IProgressMonitor monitor) {
+	protected void broadcastLifecycle(final int lifecycle, Map<String, SaveContext> contexts, final MultiStatus warnings, IProgressMonitor monitor) {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			monitor.beginTask("", contexts.size()); //$NON-NLS-1$
-			for (final Iterator it = contexts.entrySet().iterator(); it.hasNext();) {
-				Map.Entry entry = (Map.Entry) it.next();
-				String pluginId = (String) entry.getKey();
-				final ISaveParticipant participant = (ISaveParticipant) saveParticipants.get(pluginId);
+			for (final Iterator<Map.Entry<String, SaveContext>> it = contexts.entrySet().iterator(); it.hasNext();) {
+				Map.Entry<String, SaveContext> entry = it.next();
+				String pluginId = entry.getKey();
+				final ISaveParticipant participant = saveParticipants.get(pluginId);
 				//save participants can be removed concurrently
 				if (participant == null) {
 					monitor.worked(1);
 					continue;
 				}
-				final SaveContext context = (SaveContext) entry.getValue();
+				final SaveContext context = entry.getValue();
 				/* Be extra careful when calling lifecycle method on arbitrary plugin */
 				ISafeRunnable code = new ISafeRunnable() {
 
@@ -188,7 +209,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 
 	protected void cleanMasterTable() {
 		//remove tree file entries for everything except closed projects
-		for (Iterator it = masterTable.keySet().iterator(); it.hasNext();) {
+		for (Iterator<Object> it = masterTable.keySet().iterator(); it.hasNext();) {
 			String key = (String) it.next();
 			if (!key.endsWith(LocalMetaArea.F_TREE))
 				continue;
@@ -228,8 +249,8 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 */
 	protected void clearSavedDelta() {
 		synchronized (saveParticipants) {
-			for (Iterator i = saveParticipants.keySet().iterator(); i.hasNext();) {
-				String pluginId = (String) i.next();
+			for (Iterator<String> i = saveParticipants.keySet().iterator(); i.hasNext();) {
+				String pluginId = i.next();
 				masterTable.setProperty(CLEAR_DELTA_PREFIX + pluginId, "true"); //$NON-NLS-1$
 			}
 		}
@@ -239,22 +260,22 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 * Collects the set of ElementTrees we are still interested in,
 	 * and removes references to any other trees.
 	 */
-	protected void collapseTrees(Map contexts) throws CoreException {
+	protected void collapseTrees(Map<String, SaveContext> contexts) throws CoreException {
 		//collect trees we're interested in
 		
 		//forget saved trees, if they are not used by registered participants
 		synchronized (savedStates) {
-			for (Iterator i = contexts.values().iterator(); i.hasNext();) {
-				SaveContext context = (SaveContext) i.next();
+			for (Iterator<SaveContext> i = contexts.values().iterator(); i.hasNext();) {
+				SaveContext context = i.next();
 				forgetSavedTree(context.getPluginId());
 			}
 		}
 
 		//trees for plugin saved states
-		ArrayList trees = new ArrayList();
+		ArrayList<ElementTree> trees = new ArrayList<ElementTree>();
 		synchronized (savedStates) {
-			for (Iterator i = savedStates.values().iterator(); i.hasNext();) {
-				SavedState state = (SavedState) i.next();
+			for (Iterator<SavedState> i = savedStates.values().iterator(); i.hasNext();) {
+				SavedState state = i.next();
 				if (state.oldTree != null) {
 					trees.add(state.oldTree);
 				}
@@ -266,10 +287,10 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		for (int i = 0; i < projects.length; i++) {
 			IProject project = projects[i];
 			if (project.isOpen()) {
-				ArrayList builderInfos = workspace.getBuildManager().createBuildersPersistentInfo(project);
+				ArrayList<BuilderPersistentInfo> builderInfos = workspace.getBuildManager().createBuildersPersistentInfo(project);
 				if (builderInfos != null) {
-					for (Iterator it = builderInfos.iterator(); it.hasNext();) {
-						BuilderPersistentInfo info = (BuilderPersistentInfo) it.next();
+					for (Iterator<BuilderPersistentInfo> it = builderInfos.iterator(); it.hasNext();) {
+						BuilderPersistentInfo info = it.next();
 						trees.add(info.getLastBuiltTree());
 					}
 				}
@@ -297,9 +318,9 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 			sorted[i].collapseTo(sorted[i - 1]);
 	}
 
-	protected void commit(Map contexts) throws CoreException {
-		for (Iterator i = contexts.values().iterator(); i.hasNext();)
-			((SaveContext) i.next()).commit();
+	protected void commit(Map<String, SaveContext> contexts) throws CoreException {
+		for (Iterator<SaveContext> i = contexts.values().iterator(); i.hasNext();)
+			i.next().commit();
 	}
 
 	/**
@@ -307,8 +328,8 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 * <code>SaveContexts</code> to use during the save lifecycle.
 	 * The keys are plugins and values are SaveContext objects.
 	 */
-	protected Map computeSaveContexts(String[] pluginIds, int kind, IProject project) {
-		HashMap result = new HashMap(pluginIds.length);
+	protected Map<String, SaveContext> computeSaveContexts(String[] pluginIds, int kind, IProject project) {
+		HashMap<String, SaveContext> result = new HashMap<String, SaveContext>(pluginIds.length);
 		for (int i = 0; i < pluginIds.length; i++) {
 			String pluginId = pluginIds[i];
 			try {
@@ -330,17 +351,17 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 * any newly created saved states.  This method is used to compute the set of
 	 * saved states to be written out.
 	 */
-	protected Map computeStatesToSave(Map contexts, ElementTree current) {
-		HashMap result = new HashMap(savedStates.size() * 2);
+	protected Map<String, ElementTree> computeStatesToSave(Map<String, SaveContext> contexts, ElementTree current) {
+		HashMap<String, ElementTree> result = new HashMap<String, ElementTree>(savedStates.size() * 2);
 		synchronized (savedStates) {
-			for (Iterator i = savedStates.values().iterator(); i.hasNext();) {
-				SavedState state = (SavedState) i.next();
+			for (Iterator<SavedState> i = savedStates.values().iterator(); i.hasNext();) {
+				SavedState state = i.next();
 				if (state.oldTree != null)
 					result.put(state.pluginId, state.oldTree);
 			}
 		}
-		for (Iterator i = contexts.values().iterator(); i.hasNext();) {
-			SaveContext context = (SaveContext) i.next();
+		for (Iterator<SaveContext> i = contexts.values().iterator(); i.hasNext();) {
+			SaveContext context = i.next();
 			if (!context.isDeltaNeeded())
 				continue;
 			String pluginId = context.getPluginId();
@@ -378,11 +399,11 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	public void forgetSavedTree(String pluginId) {
 		if (pluginId == null) {
 			synchronized (savedStates) {
-				for (Iterator i = savedStates.values().iterator(); i.hasNext();)
-					((SavedState) i.next()).forgetTrees();
+				for (Iterator<SavedState> i = savedStates.values().iterator(); i.hasNext();)
+					i.next().forgetTrees();
 			}
 		} else {
-			SavedState state = (SavedState) savedStates.get(pluginId);
+			SavedState state = savedStates.get(pluginId);
 			if (state != null)
 				state.forgetTrees();
 		}
@@ -407,7 +428,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 
 	protected String[] getSaveParticipantPluginIds() {
 		synchronized (saveParticipants) {
-			return (String[]) saveParticipants.keySet().toArray(new String[saveParticipants.size()]);
+			return saveParticipants.keySet().toArray(new String[saveParticipants.size()]);
 		}
 	}
 
@@ -519,8 +540,8 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 */
 	protected void removeClearDeltaMarks() {
 		synchronized (saveParticipants) {
-			for (Iterator i = saveParticipants.keySet().iterator(); i.hasNext();) {
-				String pluginId = (String) i.next();
+			for (Iterator<String> i = saveParticipants.keySet().iterator(); i.hasNext();) {
+				String pluginId = i.next();
 				removeClearDeltaMarks(pluginId);
 			}
 		}
@@ -530,11 +551,11 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		masterTable.setProperty(CLEAR_DELTA_PREFIX + pluginId, "false"); //$NON-NLS-1$
 	}
 
-	protected void removeFiles(java.io.File root, String[] candidates, List exclude) {
+	protected void removeFiles(java.io.File root, String[] candidates, List<String> exclude) {
 		for (int i = 0; i < candidates.length; i++) {
 			boolean delete = true;
-			for (ListIterator it = exclude.listIterator(); it.hasNext();) {
-				String s = (String) it.next();
+			for (ListIterator<String> it = exclude.listIterator(); it.hasNext();) {
+				String s = it.next();
 				if (s.equals(candidates[i])) {
 					it.remove();
 					delete = false;
@@ -559,10 +580,10 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	}
 
 	protected void removeUnusedSafeTables() {
-		List valuables = new ArrayList(10);
+		List<String> valuables = new ArrayList<String>(10);
 		IPath location = workspace.getMetaArea().getSafeTableLocationFor(ResourcesPlugin.PI_RESOURCES);
 		valuables.add(location.lastSegment()); // add master table
-		for (Enumeration e = masterTable.keys(); e.hasMoreElements();) {
+		for (Enumeration<Object> e = masterTable.keys(); e.hasMoreElements();) {
 			String key = (String) e.nextElement();
 			if (key.startsWith(SAVE_NUMBER_PREFIX)) {
 				String pluginId = key.substring(SAVE_NUMBER_PREFIX.length());
@@ -578,7 +599,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 
 	protected void removeUnusedTreeFiles() {
 		// root resource
-		List valuables = new ArrayList(10);
+		List<String> valuables = new ArrayList<String>(10);
 		IPath location = workspace.getMetaArea().getTreeLocationFor(workspace.getRoot(), false);
 		valuables.add(location.lastSegment());
 		java.io.File target = location.toFile().getParentFile();
@@ -793,7 +814,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 
 	protected void restoreMasterTable() throws CoreException {
 		long start = System.currentTimeMillis();
-		masterTable = new Properties();
+		masterTable = new MasterTable();
 		IPath location = workspace.getMetaArea().getSafeTableLocationFor(ResourcesPlugin.PI_RESOURCES);
 		java.io.File target = location.toFile();
 		if (!target.exists()) {
@@ -969,7 +990,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		IPath treeLocation = workspace.getMetaArea().getTreeLocationFor(workspace.getRoot(), false);
 		IPath tempLocation = workspace.getMetaArea().getBackupLocationFor(treeLocation);
 		if (!treeLocation.toFile().exists() && !tempLocation.toFile().exists()) {
-			savedStates = Collections.synchronizedMap(new HashMap(10));
+			savedStates = Collections.synchronizedMap(new HashMap<String, SavedState>(10));
 			return;
 		}
 		try {
@@ -1102,7 +1123,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 				workspace.beginOperation(false);
 				hookStartSave(kind, project);
 				long start = System.currentTimeMillis();
-				Map contexts = computeSaveContexts(getSaveParticipantPluginIds(), kind, project);
+				Map<String, SaveContext> contexts = computeSaveContexts(getSaveParticipantPluginIds(), kind, project);
 				broadcastLifecycle(PREPARE_TO_SAVE, contexts, warnings, Policy.subMonitorFor(monitor, 1));
 				try {
 					broadcastLifecycle(SAVING, contexts, warnings, Policy.subMonitorFor(monitor, 1));
@@ -1206,8 +1227,9 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 			try {
 				masterTable.store(output, "master table"); //$NON-NLS-1$
 				output.succeed();
-			} finally {
 				output.close();
+			} finally {
+				FileUtil.safeClose(output);
 			}
 		} catch (IOException e) {
 			throw new ResourceException(IResourceStatus.INTERNAL_ERROR, null, NLS.bind(Messages.resources_exSaveMaster, location.toOSString()), e);
@@ -1283,8 +1305,9 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 			try {
 				output.writeInt(ICoreConstants.WORKSPACE_TREE_VERSION_2);
 				writeTree(project, output, monitor);
-			} finally {
 				output.close();
+			} finally {
+				FileUtil.safeClose(output);
 			}
 			OutputStream snapOut = store.openOutputStream(EFS.NONE, monitor);
 			out = new ZipOutputStream(snapOut);
@@ -1299,15 +1322,15 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 					out.write(buffer, 0, read);
 				}
 				out.closeEntry();
-			} finally {
 				in.close();
+			} finally {
+				FileUtil.safeClose(in);
 			}
+			out.close();
 		} catch (IOException e) {
 			throw new ResourceException(IResourceStatus.FAILED_WRITE_LOCAL, snapshotPath, Messages.resources_copyProblem, e);
 		} finally {
-			if (out!=null) {
-				try { out.close(); } catch (IOException e) { /*ignore*/ }
-			}
+			FileUtil.safeClose(out);
 			if (tmpTree!=null) tmpTree.delete();
 		}
 	}
@@ -1318,7 +1341,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 * is used to save the state of an individual project.
 	 * @exception CoreException if there is a problem writing the tree to disk.
 	 */
-	protected void saveTree(Map contexts, IProgressMonitor monitor) throws CoreException {
+	protected void saveTree(Map<String, SaveContext> contexts, IProgressMonitor monitor) throws CoreException {
 		long start = System.currentTimeMillis();
 		IPath treeLocation = workspace.getMetaArea().getTreeLocationFor(workspace.getRoot(), true);
 		try {
@@ -1327,8 +1350,9 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 			try {
 				output.writeInt(ICoreConstants.WORKSPACE_TREE_VERSION_2);
 				writeTree(computeStatesToSave(contexts, workspace.getElementTree()), output, monitor);
-			} finally {
 				output.close();
+			} finally {
+				FileUtil.safeClose(output);
 			}
 		} catch (Exception e) {
 			String msg = NLS.bind(Messages.resources_writeWorkspaceMeta, treeLocation);
@@ -1341,7 +1365,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	/**
 	 * Should only be used for read purposes.
 	 */
-	void setPluginsSavedState(HashMap savedStates) {
+	void setPluginsSavedState(HashMap<String, SavedState> savedStates) {
 		this.savedStates = Collections.synchronizedMap(savedStates);
 	}
 
@@ -1456,11 +1480,11 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		ElementTree[] sorted = new ElementTree[numTrees];
 
 		/* first build a table of ElementTree -> List of Integers(indices in trees array) */
-		Map table = new HashMap(numTrees * 2 + 1);
+		Map<ElementTree, List<Integer>> table = new HashMap<ElementTree, List<Integer>>(numTrees * 2 + 1);
 		for (int i = 0; i < trees.length; i++) {
-			List indices = (List) table.get(trees[i]);
+			List<Integer> indices = table.get(trees[i]);
 			if (indices == null) {
-				indices = new ArrayList(10);
+				indices = new ArrayList<Integer>(10);
 				table.put(trees[i], indices);
 			}
 			indices.add(new Integer(i));
@@ -1476,8 +1500,8 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		int i = numTrees - 1;
 		while (i >= 0) {
 			/* add all instances of the current oldest tree to the sorted list */
-			List indices = (List) table.remove(oldest);
-			for (Enumeration e = Collections.enumeration(indices); e.hasMoreElements();) {
+			List<Integer> indices = table.remove(oldest);
+			for (Enumeration<Integer> e = Collections.enumeration(indices); e.hasMoreElements();) {
 				e.nextElement();
 				sorted[i] = oldest;
 				i--;
@@ -1540,8 +1564,8 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		IPath markersTempLocation = workspace.getMetaArea().getBackupLocationFor(markersLocation);
 		IPath syncInfoLocation = workspace.getMetaArea().getSyncInfoLocationFor(root);
 		IPath syncInfoTempLocation = workspace.getMetaArea().getBackupLocationFor(syncInfoLocation);
-		final List writtenTypes = new ArrayList(5);
-		final List writtenPartners = new ArrayList(synchronizer.registry.size());
+		final List<String> writtenTypes = new ArrayList<String>(5);
+		final List<QualifiedName> writtenPartners = new ArrayList<QualifiedName>(synchronizer.registry.size());
 		DataOutputStream o1 = null;
 		DataOutputStream o2 = null;
 		String message;
@@ -1554,12 +1578,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 			if (root.getType() != IResource.ROOT)
 				o2 = new DataOutputStream(new SafeFileOutputStream(syncInfoLocation.toOSString(), syncInfoTempLocation.toOSString()));
 		} catch (IOException e) {
-			if (o1 != null)
-				try {
-					o1.close();
-				} catch (IOException e2) {
-					// ignore
-				}
+			FileUtil.safeClose(o1);
 			message = NLS.bind(Messages.resources_writeMeta, root.getFullPath());
 			throw new ResourceException(IResourceStatus.FAILED_WRITE_METADATA, root.getFullPath(), message, e);
 		}
@@ -1615,8 +1634,11 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 			removeGarbage(markersOutput, markersLocation, markersTempLocation);
 			// if we have the workspace root the output stream will be null and we
 			// don't have to perform cleanup code
-			if (syncInfoOutput != null)
+			if (syncInfoOutput != null) {
 				removeGarbage(syncInfoOutput, syncInfoLocation, syncInfoTempLocation);
+				syncInfoOutput.close();
+			}
+			markersOutput.close();
 		} catch (IOException e) {
 			message = NLS.bind(Messages.resources_writeMeta, root.getFullPath());
 			throw new ResourceException(IResourceStatus.FAILED_WRITE_METADATA, root.getFullPath(), message, e);
@@ -1724,8 +1746,11 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 				System.out.println("Snap SyncInfo for " + root.getFullPath() + ": " + snapTimes[1] + "ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			if (markerFileSize != markersOutput.size())
 				safeMarkerStream.succeed();
-			if (safeSyncInfoStream != null && syncInfoFileSize != syncInfoOutput.size())
+			if (safeSyncInfoStream != null && syncInfoFileSize != syncInfoOutput.size()) {
 				safeSyncInfoStream.succeed();
+				syncInfoOutput.close();
+			}
+			markersOutput.close();
 		} catch (IOException e) {
 			message = NLS.bind(Messages.resources_writeMeta, root.getFullPath());
 			throw new ResourceException(IResourceStatus.FAILED_WRITE_METADATA, root.getFullPath(), message, e);
@@ -1753,14 +1778,14 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	 *    For each interesting project:
 	 *       UTF - interesting project name
 	 */
-	protected void writeBuilderPersistentInfo(DataOutputStream output, List builders, List trees, IProgressMonitor monitor) throws IOException {
+	private void writeBuilderPersistentInfo(DataOutputStream output, List<BuilderPersistentInfo> builders, IProgressMonitor monitor) throws IOException {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			// write the number of builders we are saving
 			int numBuilders = builders.size();
 			output.writeInt(numBuilders);
 			for (int i = 0; i < numBuilders; i++) {
-				BuilderPersistentInfo info = (BuilderPersistentInfo) builders.get(i);
+				BuilderPersistentInfo info = builders.get(i);
 				output.writeUTF(info.getProjectName());
 				output.writeUTF(info.getBuilderName());
 				// write interesting projects
@@ -1768,11 +1793,6 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 				output.writeInt(interestingProjects.length);
 				for (int j = 0; j < interestingProjects.length; j++)
 					output.writeUTF(interestingProjects[j].getName());
-				ElementTree last = info.getLastBuiltTree();
-				//it is not unusual for a builder to have no last built tree (for example after a clean)
-				if (last == null)
-					last = workspace.getElementTree();
-				trees.add(last);
 			}
 		} finally {
 			monitor.done();
@@ -1791,7 +1811,72 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 		info.writeTo(output);
 	}
 
-	protected void writeTree(Map statesToSave, DataOutputStream output, IProgressMonitor monitor) throws IOException, CoreException {
+	/**
+	 * Discovers the trees which need to be saved for the passed in project's builders.
+	 * In a pre-3.7 workspace, only one tree is saved per builder.  
+	 * Since 3.7 one tree may be persisted per build configuration per multi-config builder.
+	 * 
+	 * We still provide one tree per builder first so the workspace can be opened in an older Eclipse.
+	 * Newer eclipses will be able to load the additional per-configuration trees.
+	 * @param project project to fetch builder trees for
+	 * @param trees list of trees to be persisted
+	 * @param builderInfos list of builder infos; one per builder 
+	 * @param configNames configuration names persisted for builder infos above
+	 * @param additionalBuilderInfos remaining trees to be persisted for other configurations
+	 * @param additionalConfigNames configuration names of the remaining per-configuration trees
+	 * @throws CoreException
+	 */
+	private void getTreesToSave(IProject project, List<ElementTree> trees, List<BuilderPersistentInfo> builderInfos, List<String> configNames, List<BuilderPersistentInfo> additionalBuilderInfos, List<String> additionalConfigNames) throws CoreException {
+		if (project.isOpen()) {
+			String activeConfigName = project.getActiveBuildConfig().getName();
+			List<BuilderPersistentInfo> infos = workspace.getBuildManager().createBuildersPersistentInfo(project);
+			if (infos != null) {
+				for (Iterator<BuilderPersistentInfo> it = infos.iterator(); it.hasNext();) {
+					BuilderPersistentInfo info = it.next();
+					// Nothing to persist if there isn't a previous delta tree.
+					// There used to be code which serialized the current workspace tree 
+					// but this will result in the next build of the builder getting an empty delta...
+					if (info.getLastBuiltTree() == null)
+						continue;
+
+					// Add to the correct list of builders info and add to the configuration names
+					String configName = info.getConfigName() == null ? activeConfigName : info.getConfigName();
+					if (configName.equals(activeConfigName)) {
+						// Serializes the active configurations's build tree 
+						// TODO could probably do better by serializing the 'oldest' tree
+						builderInfos.add(info);
+						configNames.add(configName);
+					} else {
+						additionalBuilderInfos.add(info);
+						additionalConfigNames.add(configName);
+					}
+					// Add the builder's tree
+					ElementTree tree = info.getLastBuiltTree();
+					trees.add(tree);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Attempts to save plugin info, builder info and build states for all projects
+	 * in the workspace.
+	 * 
+	 * The following is written to the output stream:
+	 * <ul>
+	 * <li> Workspace information </li>
+	 * <li> A list of plugin info </li>
+	 * <li> Builder info for all the builders for each project's active build config </li>
+	 * <li> Workspace trees for all plugins and builders </li>
+	 * <li> And since 3.7: </li>
+	 * <li> Builder info for all the builders of all the other project's buildConfigs </li>
+	 * <li> The names of the buildConfigs for each of the builders </li>
+	 * </ul>
+	 * This format is designed to work with WorkspaceTreeReader versions 2.
+	 * 
+	 * @see WorkspaceTreeReader_2
+	 */
+	protected void writeTree(Map<String, ElementTree> statesToSave, DataOutputStream output, IProgressMonitor monitor) throws IOException, CoreException {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			monitor.beginTask("", Policy.totalWork); //$NON-NLS-1$
@@ -1801,7 +1886,7 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 				ElementTree current = workspace.getElementTree();
 				wasImmutable = current.isImmutable();
 				current.immutable();
-				ArrayList trees = new ArrayList(statesToSave.size() * 2); // pick a number
+				ArrayList<ElementTree> trees = new ArrayList<ElementTree>(statesToSave.size() * 2); // pick a number
 				monitor.worked(Policy.totalWork * 10 / 100);
 
 				// write out the workspace fields
@@ -1809,36 +1894,43 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 
 				// save plugin info
 				output.writeInt(statesToSave.size()); // write the number of plugins we are saving
-				for (Iterator i = statesToSave.entrySet().iterator(); i.hasNext();) {
-					Map.Entry entry = (Map.Entry) i.next();
-					String pluginId = (String) entry.getKey();
+				for (Map.Entry<String, ElementTree> entry : statesToSave.entrySet()) {
+					String pluginId = entry.getKey();
 					output.writeUTF(pluginId);
 					trees.add(entry.getValue()); // tree
 					updateDeltaExpiration(pluginId);
 				}
 				monitor.worked(Policy.totalWork * 10 / 100);
 
-				// add builders' trees
+				// Get the the builder info and configuration names, and add all the associated workspace trees in the correct order
 				IProject[] projects = workspace.getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
-				List builders = new ArrayList(projects.length * 2);
-				for (int i = 0; i < projects.length; i++) {
-					IProject project = projects[i];
-					if (project.isOpen()) {
-						ArrayList infos = workspace.getBuildManager().createBuildersPersistentInfo(project);
-						if (infos != null)
-							builders.addAll(infos);
-					}
-				}
-				writeBuilderPersistentInfo(output, builders, trees, Policy.subMonitorFor(monitor, Policy.totalWork * 10 / 100));
+				List<BuilderPersistentInfo> builderInfos = new ArrayList<BuilderPersistentInfo>(projects.length * 2);
+				List<String> configNames = new ArrayList<String>(projects.length);
+				List<BuilderPersistentInfo> additionalBuilderInfos = new ArrayList<BuilderPersistentInfo>(projects.length * 2);
+				List<String> additionalConfigNames = new ArrayList<String>(projects.length);
+				for (int i = 0; i < projects.length; i++)
+					getTreesToSave(projects[i], trees, builderInfos, configNames, additionalBuilderInfos, additionalConfigNames);
 
-				// add the current tree in the list as the last element
+				// Save the version 2 builders info
+				writeBuilderPersistentInfo(output, builderInfos, Policy.subMonitorFor(monitor, Policy.totalWork * 10 / 100));
+
+				// add the current tree in the list as the last tree in the chain
 				trees.add(current);
 
 				/* save the forest! */
 				ElementTreeWriter writer = new ElementTreeWriter(this);
-				ElementTree[] treesToSave = (ElementTree[]) trees.toArray(new ElementTree[trees.size()]);
+				ElementTree[] treesToSave = trees.toArray(new ElementTree[trees.size()]);
 				writer.writeDeltaChain(treesToSave, Path.ROOT, ElementTreeWriter.D_INFINITE, output, ResourceComparator.getSaveComparator());
-				monitor.worked(Policy.totalWork * 50 / 100);
+				monitor.worked(Policy.totalWork * 40 / 100);
+
+				// Since 3.7: Save the additional builders info
+				writeBuilderPersistentInfo(output, additionalBuilderInfos, Policy.subMonitorFor(monitor, Policy.totalWork * 10 / 100));
+
+				// Save the configuration names for the builders in the order they were saved
+				for (Iterator<String> it = configNames.iterator(); it.hasNext();)
+					output.writeUTF(it.next());
+				for (Iterator<String> it = additionalConfigNames.iterator(); it.hasNext();)
+					output.writeUTF(it.next());
 			} finally {
 				if (!wasImmutable)
 					workspace.newWorkingTree();
@@ -1849,45 +1941,66 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 	}
 
 	/**
-	 * Attempts to save all the trees for this project (the current tree
-	 * plus a tree for each builder with a previously built state).  Throws
-	 * an IOException if anything went wrong during save.  Attempts to close
+	 * Attempts to save all the trees for the given project. This includes the current
+	 * workspace tree and a tree for each builder that has previously built state information.
+	 * 
+	 * The following is written to the output stream:
+	 * <ul>
+	 * <li> Builder info for all the builders for the project's active build configuration </li>
+	 * <li> Workspace trees for all the project's builders </li>
+	 * <li> Since 3.7: </li>
+	 * <li> Builder info for all the builders of all the other project's buildConfigs </li>
+	 * <li> Name of the project's buildConfigs </li>
+	 * </ul>
+	 * This format is designed to work with WorkspaceTreeReader versions 2.
+	 *
+	 * @throws IOException if anything went wrong during save. Attempts to close
 	 * the provided stream at all costs.
+	 * @see WorkspaceTreeReader_2
 	 */
 	protected void writeTree(Project project, DataOutputStream output, IProgressMonitor monitor) throws IOException, CoreException {
 		monitor = Policy.monitorFor(monitor);
 		try {
-			monitor.beginTask("", 10); //$NON-NLS-1$
+			monitor.beginTask("", Policy.totalWork); //$NON-NLS-1$
 			boolean wasImmutable = false;
 			try {
-				/**
-				 * Obtain a list of BuilderPersistentInfo.
-				 * This list includes builders that have never been instantiated
-				 * but already had a last built state.
-				 */
-				ArrayList builderInfos = workspace.getBuildManager().createBuildersPersistentInfo(project);
-				if (builderInfos == null)
-					builderInfos = new ArrayList(5);
-				List trees = new ArrayList(builderInfos.size() + 1);
-				monitor.worked(1);
-
-				/* Make sure the most recent tree is in the array */
+				// Create an array of trees to save and ensure that the current one is immutable before we add other trees
 				ElementTree current = workspace.getElementTree();
 				wasImmutable = current.isImmutable();
 				current.immutable();
+				List<ElementTree> trees = new ArrayList<ElementTree>(2);
+				monitor.worked(Policy.totalWork * 10 / 100);
+
+				// Get the the builder info and configuration names, and add all the associated workspace trees in the correct order
+				List<String> configNames = new ArrayList<String>(5);
+				List<BuilderPersistentInfo> builderInfos = new ArrayList<BuilderPersistentInfo>(5);
+				List<String> additionalConfigNames = new ArrayList<String>(5);
+				List<BuilderPersistentInfo> additionalBuilderInfos = new ArrayList<BuilderPersistentInfo>(5);
+				getTreesToSave(project, trees, builderInfos, configNames, additionalBuilderInfos, additionalConfigNames);
 
-				/* add the tree for each builder to the array */
-				writeBuilderPersistentInfo(output, builderInfos, trees, Policy.subMonitorFor(monitor, 1));
+				// Save the version 2 builders info
+				writeBuilderPersistentInfo(output, builderInfos, Policy.subMonitorFor(monitor, Policy.totalWork * 20 / 100));
+
+				// Add the current tree in the list as the last tree in the chain
 				trees.add(current);
 
-				/* save the forest! */
+				// Save the trees
 				ElementTreeWriter writer = new ElementTreeWriter(this);
-				ElementTree[] treesToSave = (ElementTree[]) trees.toArray(new ElementTree[trees.size()]);
+				ElementTree[] treesToSave = trees.toArray(new ElementTree[trees.size()]);
 				writer.writeDeltaChain(treesToSave, project.getFullPath(), ElementTreeWriter.D_INFINITE, output, ResourceComparator.getSaveComparator());
-				monitor.worked(8);
+				monitor.worked(Policy.totalWork * 50 / 100);
+
+				// Since 3.7: Save the builders info and get the workspace trees associated with those builders
+				writeBuilderPersistentInfo(output, additionalBuilderInfos, Policy.subMonitorFor(monitor, Policy.totalWork * 20 / 100));
+
+				// Save configuration names for the builders in the order they were saved
+				for (Iterator<String> it = configNames.iterator(); it.hasNext();)
+					output.writeUTF(it.next());
+				for (Iterator<String> it = additionalConfigNames.iterator(); it.hasNext();)
+					output.writeUTF(it.next());
+				output.close();
 			} finally {
-				if (output != null)
-					output.close();
+				FileUtil.safeClose(output);
 				if (!wasImmutable)
 					workspace.newWorkingTree();
 			}
@@ -1906,8 +2019,9 @@ public class SaveManager implements IElementInfoFlattener, IManager, IStringPool
 				DataOutputStream output = new DataOutputStream(safe);
 				output.writeInt(ICoreConstants.WORKSPACE_TREE_VERSION_2);
 				writeTree(project, output, null);
-			} finally {
 				safe.close();
+			} finally {
+				FileUtil.safeClose(safe);
 			}
 		} catch (IOException e) {
 			String msg = NLS.bind(Messages.resources_writeMeta, project.getFullPath());
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader.java
index 4ab48da..995a40e 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -51,7 +52,7 @@ public class SyncInfoReader {
 	public void readPartners(DataInputStream input) throws CoreException {
 		try {
 			int size = input.readInt();
-			Set registry = new HashSet(size);
+			Set<QualifiedName> registry = new HashSet<QualifiedName>(size);
 			for (int i = 0; i < size; i++) {
 				String qualifier = input.readUTF();
 				String local = input.readUTF();
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_2.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_2.java
index 3c9ab99..e03fe65 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_2.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -48,7 +49,7 @@ public class SyncInfoReader_2 extends SyncInfoReader {
 	 */
 	public void readSyncInfo(DataInputStream input) throws IOException, CoreException {
 		try {
-			List readPartners = new ArrayList(5);
+			List<QualifiedName> readPartners = new ArrayList<QualifiedName>(5);
 			while (true) {
 				IPath path = new Path(input.readUTF());
 				readSyncInfo(path, input, readPartners);
@@ -58,9 +59,9 @@ public class SyncInfoReader_2 extends SyncInfoReader {
 		}
 	}
 
-	private void readSyncInfo(IPath path, DataInputStream input, List readPartners) throws IOException, CoreException {
+	private void readSyncInfo(IPath path, DataInputStream input, List<QualifiedName> readPartners) throws IOException, CoreException {
 		int size = input.readInt();
-		ObjectMap table = new ObjectMap(size);
+		ObjectMap<QualifiedName, Object> table = new ObjectMap<QualifiedName, Object>(size);
 		for (int i = 0; i < size; i++) {
 			QualifiedName name = null;
 			int type = input.readInt();
@@ -72,7 +73,7 @@ public class SyncInfoReader_2 extends SyncInfoReader {
 					readPartners.add(name);
 					break;
 				case INDEX :
-					name = (QualifiedName) readPartners.get(input.readInt());
+					name = readPartners.get(input.readInt());
 					break;
 				default :
 					//if we get here then the sync info file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_3.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_3.java
index fda7a3d..51a9e33 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_3.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoReader_3.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -48,7 +49,7 @@ public class SyncInfoReader_3 extends SyncInfoReader {
 	 */
 	public void readSyncInfo(DataInputStream input) throws IOException, CoreException {
 		try {
-			List readPartners = new ArrayList(5);
+			List<QualifiedName> readPartners = new ArrayList<QualifiedName>(5);
 			while (true) {
 				IPath path = new Path(input.readUTF());
 				readSyncInfo(path, input, readPartners);
@@ -58,9 +59,9 @@ public class SyncInfoReader_3 extends SyncInfoReader {
 		}
 	}
 
-	private void readSyncInfo(IPath path, DataInputStream input, List readPartners) throws IOException, CoreException {
+	private void readSyncInfo(IPath path, DataInputStream input, List<QualifiedName> readPartners) throws IOException, CoreException {
 		int size = input.readInt();
-		ObjectMap table = new ObjectMap(size);
+		ObjectMap<QualifiedName, Object> table = new ObjectMap<QualifiedName, Object>(size);
 		for (int i = 0; i < size; i++) {
 			QualifiedName name = null;
 			byte type = input.readByte();
@@ -72,7 +73,7 @@ public class SyncInfoReader_3 extends SyncInfoReader {
 					readPartners.add(name);
 					break;
 				case INDEX :
-					name = (QualifiedName) readPartners.get(input.readInt());
+					name = readPartners.get(input.readInt());
 					break;
 				default :
 					//if we get here then the sync info file is corrupt
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoSnapReader_3.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoSnapReader_3.java
index 9af7ef1..7b8a07f 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoSnapReader_3.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoSnapReader_3.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -21,9 +22,9 @@ public class SyncInfoSnapReader_3 extends SyncInfoSnapReader {
 		super(workspace, synchronizer);
 	}
 
-	private ObjectMap internalReadSyncInfo(DataInputStream input) throws IOException {
+	private ObjectMap<QualifiedName, Object> internalReadSyncInfo(DataInputStream input) throws IOException {
 		int size = input.readInt();
-		ObjectMap map = new ObjectMap(size);
+		ObjectMap<QualifiedName, Object> map = new ObjectMap<QualifiedName, Object>(size);
 		for (int i = 0; i < size; i++) {
 			// read the qualified name
 			String qualifier = input.readUTF();
@@ -51,7 +52,7 @@ public class SyncInfoSnapReader_3 extends SyncInfoSnapReader {
 	 */
 	public void readSyncInfo(DataInputStream input) throws IOException {
 		IPath path = new Path(input.readUTF());
-		ObjectMap map = internalReadSyncInfo(input);
+		ObjectMap<QualifiedName, Object> map = internalReadSyncInfo(input);
 		// set the table on the resource info
 		ResourceInfo info = workspace.getResourceInfo(path, true, false);
 		if (info == null)
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoWriter.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoWriter.java
index 766c566..5579283 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoWriter.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/SyncInfoWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -35,10 +36,10 @@ public class SyncInfoWriter {
 	}
 
 	public void savePartners(DataOutputStream output) throws IOException {
-		Set registry = synchronizer.getRegistry();
+		Set<QualifiedName> registry = synchronizer.getRegistry();
 		output.writeInt(registry.size());
-		for (Iterator i = registry.iterator(); i.hasNext();) {
-			QualifiedName qname = (QualifiedName) i.next();
+		for (Iterator<QualifiedName> i = registry.iterator(); i.hasNext();) {
+			QualifiedName qname = i.next();
 			output.writeUTF(qname.getQualifier());
 			output.writeUTF(qname.getLocalName());
 		}
@@ -56,8 +57,8 @@ public class SyncInfoWriter {
 	 * QNAME -> byte String
 	 * BYTES -> byte[]
 	 */
-	public void saveSyncInfo(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List writtenPartners) throws IOException {
-		Map table = info.getSyncInfo(false);
+	public void saveSyncInfo(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List<QualifiedName> writtenPartners) throws IOException {
+		Map<QualifiedName, Object> table = info.getSyncInfo(false);
 		if (table == null)
 			return;
 		// if this is the first sync info that we have written, then
@@ -66,9 +67,8 @@ public class SyncInfoWriter {
 			output.writeInt(SYNCINFO_SAVE_VERSION);
 		output.writeUTF(requestor.requestPath().toString());
 		output.writeInt(table.size());
-		for (Iterator i = table.entrySet().iterator(); i.hasNext();) {
-			Map.Entry entry = (Map.Entry) i.next();
-			QualifiedName name = (QualifiedName) entry.getKey();
+		for (Map.Entry<QualifiedName, Object> entry : table.entrySet()) {
+			QualifiedName name = entry.getKey();
 			// if we have already written the partner name once, then write an integer
 			// constant to represent it instead to remove duplication
 			int index = writtenPartners.indexOf(name);
@@ -101,16 +101,15 @@ public class SyncInfoWriter {
 	public void snapSyncInfo(ResourceInfo info, IPathRequestor requestor, DataOutputStream output) throws IOException {
 		if (!info.isSet(ICoreConstants.M_SYNCINFO_SNAP_DIRTY))
 			return;
-		Map table = info.getSyncInfo(false);
+		Map<QualifiedName, Object> table = info.getSyncInfo(false);
 		if (table == null)
 			return;
 		// write the version id for the snapshot.
 		output.writeInt(SYNCINFO_SNAP_VERSION);
 		output.writeUTF(requestor.requestPath().toString());
 		output.writeInt(table.size());
-		for (Iterator i = table.entrySet().iterator(); i.hasNext();) {
-			Map.Entry entry = (Map.Entry) i.next();
-			QualifiedName name = (QualifiedName) entry.getKey();
+		for (Map.Entry<QualifiedName, Object> entry : table.entrySet()) {
+			QualifiedName name = entry.getKey();
 			output.writeUTF(name.getQualifier());
 			output.writeUTF(name.getLocalName());
 			byte[] bytes = (byte[]) entry.getValue();
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Synchronizer.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Synchronizer.java
index 55fe50a..cd60edd 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Synchronizer.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Synchronizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -27,7 +28,7 @@ public class Synchronizer implements ISynchronizer {
 	protected SyncInfoWriter writer;
 
 	// Registry of sync partners. Set of qualified names.
-	protected Set registry = new HashSet(5);
+	protected Set<QualifiedName> registry = new HashSet<QualifiedName>(5);
 
 	public Synchronizer(Workspace workspace) {
 		super();
@@ -97,13 +98,13 @@ public class Synchronizer implements ISynchronizer {
 	 * @see ISynchronizer#getPartners()
 	 */
 	public QualifiedName[] getPartners() {
-		return (QualifiedName[]) registry.toArray(new QualifiedName[registry.size()]);
+		return registry.toArray(new QualifiedName[registry.size()]);
 	}
 
 	/**
 	 * For use by the serialization code.
 	 */
-	protected Set getRegistry() {
+	protected Set<QualifiedName> getRegistry() {
 		return registry;
 	}
 
@@ -206,11 +207,11 @@ public class Synchronizer implements ISynchronizer {
 		writer.savePartners(output);
 	}
 
-	public void saveSyncInfo(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List writtenPartners) throws IOException {
+	public void saveSyncInfo(ResourceInfo info, IPathRequestor requestor, DataOutputStream output, List<QualifiedName> writtenPartners) throws IOException {
 		writer.saveSyncInfo(info, requestor, output, writtenPartners);
 	}
 
-	protected void setRegistry(Set registry) {
+	protected void setRegistry(Set<QualifiedName> registry) {
 		this.registry = registry;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/VariableDescription.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/VariableDescription.java
index 1b5090e..7dd0211 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/VariableDescription.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/VariableDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -15,7 +16,7 @@ import org.eclipse.core.runtime.*;
 /**
  * 
  */
-public class VariableDescription implements Comparable {
+public class VariableDescription implements Comparable<VariableDescription> {
 
 	private String name;
 	private String value;
@@ -64,8 +65,7 @@ public class VariableDescription implements Comparable {
 	 * Compare string descriptions in a way that sorts them topologically by
 	 * name.
 	 */
-	public int compareTo(Object o) {
-		VariableDescription that = (VariableDescription) o;
+	public int compareTo(VariableDescription that) {
 		return name.compareTo(that.name);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java
index dd1e767..926db4e 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -56,7 +57,7 @@ public class WorkManager implements IManager {
 	 * Indicates that the last checkIn failed, either due to cancelation or due to the
 	 * workspace tree being locked for modifications (during resource change events).
 	 */
-	private final ThreadLocal checkInFailed = new ThreadLocal();
+	private final ThreadLocal<Boolean> checkInFailed = new ThreadLocal<Boolean>();
 	/**
 	 * Indicates whether any operations have run that may require a build. 
 	 */
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java
index 8da4f86..5869397 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java
@@ -10,6 +10,7 @@
  *     Red Hat Incorporated - loadProjectDescription(InputStream)
  *     Serge Beauchamp (Freescale Semiconductor) - [252996] add resource filtering
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Group and Project Path Variable Support
+ *     Broadcom Corporation - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -18,11 +19,14 @@ import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
 import org.eclipse.core.filesystem.URIUtil;
 import org.eclipse.core.internal.events.*;
 import org.eclipse.core.internal.localstore.FileSystemResourceManager;
 import org.eclipse.core.internal.properties.IPropertyManager;
 import org.eclipse.core.internal.refresh.RefreshManager;
+import org.eclipse.core.internal.resources.ComputeProjectOrder.VertexFilter;
+import org.eclipse.core.internal.resources.ComputeProjectOrder.VertexOrder;
 import org.eclipse.core.internal.utils.*;
 import org.eclipse.core.internal.watson.*;
 import org.eclipse.core.resources.*;
@@ -84,7 +88,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	protected WorkManager _workManager;
 	protected AliasManager aliasManager;
 	protected BuildManager buildManager;
-	protected IProject[] buildOrder = null;
+	protected volatile IBuildConfiguration[] buildOrder = null;
 	protected CharsetManager charsetManager;
 	protected ContentDescriptionManager contentDescriptionManager;
 	/** indicates if the workspace crashed in a previous session */
@@ -92,7 +96,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	protected final IWorkspaceRoot defaultRoot = new WorkspaceRoot(Path.ROOT, this);
 	protected WorkspacePreferences description;
 	protected FileSystemResourceManager fileSystemManager;
-	protected final HashSet lifecycleListeners = new HashSet(10);
+	protected final CopyOnWriteArrayList<ILifecycleListener> lifecycleListeners = new CopyOnWriteArrayList<ILifecycleListener>();
 	protected LocalMetaArea localMetaArea;
 	/**
 	 * Helper class for performing validation of resource names and locations.
@@ -159,7 +163,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	 * reads and concurrent writes, write access to the tree is governed
 	 * by {@link WorkManager}.
 	 */
-	protected ElementTree tree;
+	protected volatile ElementTree tree;
 
 	/**
 	 * This field is used to control access to the workspace tree during
@@ -175,6 +179,71 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	protected IFileModificationValidator validator = null;
 
 	/**
+	 * Data structure for holding the multi-part outcome of
+	 * <code>IWorkspace.computeProjectBuildConfigOrder</code>.
+	 * <p>
+	 * This class is not intended to be instantiated by clients.
+	 * </p>
+	 * 
+	 * @see Workspace#computeProjectBuildConfigOrder(IBuildConfiguration[])
+	 * @since 3.7
+	 */
+	public static final class ProjectBuildConfigOrder {
+		/**
+		 * Creates an instance with the given values.
+		 * <p>
+		 * This class is not intended to be instantiated by clients.
+		 * </p>
+		 * 
+		 * @param buildConfigurations initial value of <code>buildConfigurations</code> field
+		 * @param hasCycles initial value of <code>hasCycles</code> field
+		 * @param knots initial value of <code>knots</code> field
+		 */
+		public ProjectBuildConfigOrder(IBuildConfiguration[] buildConfigurations, boolean hasCycles, IBuildConfiguration[][] knots) {
+			this.buildConfigurations = buildConfigurations;
+			this.hasCycles = hasCycles;
+			this.knots = knots;
+		}
+
+		/**
+		 * A list of project buildConfigs ordered so as to honor the build configuration reference
+		 * relationships between these project buildConfigs wherever possible. The elements
+		 * are a subset of the ones passed as the <code>buildConfigurations</code>
+		 * parameter to <code>IWorkspace.computeProjectOrder</code>, where
+		 * inaccessible (closed or non-existent) projects have been omitted.
+		 */
+		public IBuildConfiguration[] buildConfigurations;
+		/**
+		 * Indicates whether any of the accessible project buildConfigs in
+		 * <code>buildConfigurations</code> are involved in non-trivial cycles.
+		 * <code>true</code> if the reference graph contains at least
+		 * one cycle involving two or more of the project buildConfigs in
+		 * <code>buildConfigurations</code>, and <code>false</code> if none of the
+		 * project buildConfigs in <code>buildConfigurations</code> are involved in cycles.
+		 */
+		public boolean hasCycles;
+		/**
+		 * A list of knots in the reference graph. This list is empty if
+		 * the reference graph does not contain cycles. If the
+		 * reference graph contains cycles, each element is a knot of two or
+		 * more accessible project buildConfigs from <code>buildConfigurations</code> that are
+		 * involved in a cycle of mutually dependent references.
+		 */
+		public IBuildConfiguration[][] knots;
+	}
+
+	// Comparator used to provide a stable ordering of project buildConfigs
+	private static class BuildConfigurationComparator implements Comparator<IBuildConfiguration> {
+		public BuildConfigurationComparator() {}
+		public int compare(IBuildConfiguration px, IBuildConfiguration py) {
+			int cmp = py.getProject().getName().compareTo(px.getProject().getName());
+			if (cmp == 0)
+				cmp = py.getName().compareTo(px.getName());
+			return cmp;
+		}
+	}
+
+	/**
 	 * Deletes all the files and directories from the given root down (inclusive).
 	 * Returns false if we could not delete some file or an exception occurred
 	 * at any point in the deletion.
@@ -255,7 +324,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	 * remove lifecycle listeners.
 	 */
 	public void addLifecycleListener(ILifecycleListener listener) {
-		lifecycleListeners.add(listener);
+		lifecycleListeners.addIfAbsent(listener);
 	}
 
 	/* (non-Javadoc)
@@ -275,6 +344,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	/* (non-Javadoc)
 	 * @see IWorkspace#addSaveParticipant(Plugin, ISaveParticipant)
 	 */
+	@Deprecated
 	public ISavedState addSaveParticipant(Plugin plugin, ISaveParticipant participant) throws CoreException {
 		Assert.isNotNull(plugin, "Plugin must not be null"); //$NON-NLS-1$
 		Assert.isNotNull(participant, "Participant must not be null"); //$NON-NLS-1$
@@ -316,10 +386,8 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	 * internal listeners.
 	 */
 	protected void broadcastEvent(LifecycleEvent event) throws CoreException {
-		for (Iterator it = lifecycleListeners.iterator(); it.hasNext();) {
-			ILifecycleListener listener = (ILifecycleListener) it.next();
+		for (ILifecycleListener listener : lifecycleListeners)
 			listener.handleEvent(event);
-		}
 	}
 
 	public void broadcastPostChange() {
@@ -327,22 +395,129 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 		notificationManager.broadcastChanges(tree, event, true);
 	}
 
+	/**
+	 * Add all IBuildConfigurations reachable from config to the configs collection.
+	 * @param configs collection of configurations to extend
+	 * @param config config to find reachable configurations to.
+	 */
+	private void recursivelyAddBuildConfigs(Collection/*<IBuildConfiguration>*/<IBuildConfiguration> configs, IBuildConfiguration config) {
+		try {
+			IBuildConfiguration[] referenced = config.getProject().getReferencedBuildConfigs(config.getName(), false);
+			for (int i = 0; i < referenced.length; i++) {
+				if (configs.contains(referenced[i]))
+					continue;
+				configs.add(referenced[i]);
+				recursivelyAddBuildConfigs(configs, referenced[i]);
+			}
+		} catch (CoreException e) {
+			// Not possible, we've checked that the project + configuration are accessible.
+			Assert.isTrue(false);
+		}
+	}
+
 	/* (non-Javadoc)
 	 * @see IWorkspace#build(int, IProgressMonitor)
 	 */
 	public void build(int trigger, IProgressMonitor monitor) throws CoreException {
+		buildInternal(EMPTY_BUILD_CONFIG_ARRAY, trigger, true, monitor);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see IWorkspace#build(IBuildConfiguration[], int, boolean, IProgressMonitor)
+	 */
+	public void build(IBuildConfiguration[] configs, int trigger, boolean buildReferences, IProgressMonitor monitor) throws CoreException {
+		if (configs.length == 0)
+			return;
+		buildInternal(configs, trigger, buildReferences, monitor);
+	}
+
+	/**
+	 * Build the passed in configurations or the whole workspace.
+	 * @param configs to build or EMPTY_BUILD_CONFIG_ARRAY for the whole workspace
+	 * @param trigger build trigger
+	 * @param buildReferences transitively build referenced build configurations
+	 */
+	private void buildInternal(IBuildConfiguration[] configs, int trigger, boolean buildReferences, IProgressMonitor monitor) throws CoreException {
 		monitor = Policy.monitorFor(monitor);
-		final ISchedulingRule rule = getRuleFactory().buildRule();
+		// Bug 343256 use a relaxed scheduling rule if the config we're building uses a relaxed rule.
+		// Otherwise fall-back to WR.
+		boolean relaxed = false;
+		if (Job.getJobManager().currentRule() == null && configs.length > 0) {
+			relaxed = true;
+			for (IBuildConfiguration config : configs) {
+				ISchedulingRule requested = getBuildManager().getRule(config, trigger, null, null);
+				if (requested != null && requested.contains(getRoot())) {
+					relaxed = false;
+					break;
+				}
+			}
+		}
+
+		// PRE + POST_BUILD, and the build itself are allowed to modify resources, so require the current thread's scheduling rule
+		// to either contain the WR or be null. Therefore, if not null, ensure it contains the WR rule...
+		final ISchedulingRule buildRule = getRuleFactory().buildRule();
+		final ISchedulingRule rule = relaxed ? null : buildRule;
 		try {
 			monitor.beginTask("", Policy.opWork); //$NON-NLS-1$
 			try {
-				prepareOperation(rule, monitor);
-				beginOperation(true);
-				aboutToBuild(this, trigger);
+				try {
+					// Must run the PRE_BUILD with the WRule held before acquiring WS lock
+					// Can remove this if we run notifications without the WS lock held: bug 249951
+					prepareOperation(rule == null ? buildRule : rule, monitor);
+					beginOperation(true);
+					aboutToBuild(this, trigger);
+				} finally {
+					if (rule == null) {
+						endOperation(buildRule, false, monitor);
+						prepareOperation(rule, monitor);
+						beginOperation(false);
+					}
+				}
 				IStatus result;
 				try {
-					result = getBuildManager().build(trigger, Policy.subMonitorFor(monitor, Policy.opWork));
+
+					// Calculate the build-order having called the pre-build notification (which may change build order)
+					// If configs == EMPTY_BUILD_CONFIG_ARRAY => This is a full workspace build.
+					IBuildConfiguration[] requestedConfigs = configs;
+					if (configs == EMPTY_BUILD_CONFIG_ARRAY) {
+						if (trigger != IncrementalProjectBuilder.CLEAN_BUILD)
+							configs = getBuildOrder();
+						else {
+							// clean all accessible configurations
+							List<IBuildConfiguration> configArr = new ArrayList<IBuildConfiguration>();
+							IProject[] prjs = getRoot().getProjects();
+							for (int i = 0; i < prjs.length; i++)
+								if (prjs[i].isAccessible())
+									configArr.addAll(Arrays.asList(prjs[i].getBuildConfigs()));
+							configs = configArr.toArray(new IBuildConfiguration[configArr.size()]);										
+						}
+					} else {
+						// Order the passed in build configurations + resolve references if requested
+						Set<IBuildConfiguration> refsList = new HashSet<IBuildConfiguration>();
+						for (int i = 0 ; i < configs.length ; i++) {
+							// Check project + build configuration are accessible.
+							if (!configs[i].getProject().isAccessible() || !configs[i].getProject().hasBuildConfig(configs[i].getName()))
+								continue;
+							refsList.add(configs[i]);
+							// Find transitive closure of referenced project buildConfigs
+							if (buildReferences)
+								recursivelyAddBuildConfigs(refsList, configs[i]);
+						}
+
+						// Order the referenced project buildConfigs
+						ProjectBuildConfigOrder order = computeProjectBuildConfigOrder(refsList.toArray(new IBuildConfiguration[refsList.size()]));
+						configs = order.buildConfigurations;
+					}
+
+					result = getBuildManager().build(configs, requestedConfigs, trigger, Policy.subMonitorFor(monitor, Policy.opWork));
 				} finally {
+					// Run the POST_BUILD with the WRule held
+					if (rule == null) {
+						endOperation(rule, false, monitor);
+						prepareOperation(buildRule, monitor);
+						beginOperation(false);							
+					}
 					//must fire POST_BUILD if PRE_BUILD has occurred
 					broadcastBuildEvent(this, IResourceChangeEvent.POST_BUILD, trigger);
 				}
@@ -352,7 +527,8 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 				//building may close the tree, but we are still inside an operation so open it
 				if (tree.isImmutable())
 					newWorkingTree();
-				endOperation(rule, false, Policy.subMonitorFor(monitor, Policy.endOpWork));
+				// Rule will be the build-rule from the POST_BUILD refresh
+				endOperation(buildRule, false, Policy.subMonitorFor(monitor, Policy.endOpWork));
 			}
 		} finally {
 			monitor.done();
@@ -477,20 +653,18 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	 * @return result describing the global project order
 	 * @since 2.1
 	 */
-	private ProjectOrder computeFullProjectOrder() {
+	private VertexOrder computeFullProjectOrder() {
 
 		// determine the full set of accessible projects in the workspace
 		// order the set in descending alphabetical order of project name
-		SortedSet allAccessibleProjects = new TreeSet(new Comparator() {
-			public int compare(Object x, Object y) {
-				IProject px = (IProject) x;
-				IProject py = (IProject) y;
+		SortedSet<IProject> allAccessibleProjects = new TreeSet<IProject>(new Comparator<IProject>() {
+			public int compare(IProject px, IProject py) {
 				return py.getName().compareTo(px.getName());
 			}
 		});
 		IProject[] allProjects = getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
 		// List<IProject[]> edges
-		List edges = new ArrayList(allProjects.length);
+		List<IProject[]> edges = new ArrayList<IProject[]>(allProjects.length);
 		for (int i = 0; i < allProjects.length; i++) {
 			Project project = (Project) allProjects[i];
 			// ignore projects that are not accessible
@@ -509,18 +683,182 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 					edges.add(new IProject[] {project, ref});
 			}
 		}
+		return ComputeProjectOrder.computeVertexOrder(allAccessibleProjects, edges);
+	}
+
+	/**
+	 * Computes the global total ordering of all open projects' active buildConfigs in the
+	 * workspace based on build configuration references. If an existing and open project's build config P
+	 * references another existing and open project's build config Q, then Q should come before P
+	 * in the resulting ordering. If a build config references a non-active build config it is
+	 * added to the resulting ordered list. Closed and non-existent projects/buildConfigs are
+	 * ignored, and will not appear in the result. References to non-existent or closed
+	 * projects/buildConfigs are also ignored, as are any self-references.
+	 * <p>
+	 * When there are choices, the choice is made in a reasonably stable way. For
+	 * example, given an arbitrary choice between two project buildConfigs, the one with the
+	 * lower collating project name and build config name will appear earlier in the list.
+	 * </p>
+	 * <p>
+	 * When the build configuration reference graph contains cyclic references, it is
+	 * impossible to honor all of the relationships. In this case, the result
+	 * ignores as few relationships as possible.  For example, if P2 references P1,
+	 * P4 references P3, and P2 and P3 reference each other, then exactly one of the
+	 * relationships between P2 and P3 will have to be ignored. The outcome will be
+	 * either [P1, P2, P3, P4] or [P1, P3, P2, P4]. The result also contains
+	 * complete details of any cycles present.
+	 * </p>
+	 *
+	 * @return result describing the global active build configuration order
+	 */
+	private VertexOrder computeActiveBuildConfigOrder() {
+		// Determine the full set of accessible active project buildConfigs in the workspace,
+		// and all the accessible project buildConfigs that they reference. This forms a set
+		// of all the project buildConfigs that will be returned.
+		// Order the set in descending alphabetical order of project name then build config name,
+		// as a secondary sort applied after sorting based on references, to achieve a stable
+		// ordering.
+		SortedSet<IBuildConfiguration> allAccessibleBuildConfigs = new TreeSet<IBuildConfiguration>(new BuildConfigurationComparator());
+
+		// For each project's active build config, perform a depth first search in the reference graph
+		// rooted at that build config.
+		// This generates the required subset of the reference graph that is required to order all
+		// the dependencies of the active project buildConfigs.
+		IProject[] allProjects = getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
+		List<IBuildConfiguration[]> edges = new ArrayList<IBuildConfiguration[]>(allProjects.length);
+
+		for (int i = 0; i < allProjects.length; i++) {
+			Project project = (Project) allProjects[i];
+			// Ignore projects that are not accessible
+			if (!project.isAccessible())
+				continue;
+
+			// If the active build configuration hasn't already been explored
+			// perform a depth first search rooted at it
+			if (!allAccessibleBuildConfigs.contains(project.internalGetActiveBuildConfig())) {
+				allAccessibleBuildConfigs.add(project.internalGetActiveBuildConfig());
+				Stack<IBuildConfiguration> stack = new Stack<IBuildConfiguration>();
+				stack.push(project.internalGetActiveBuildConfig());
+
+				while (!stack.isEmpty()) {
+					IBuildConfiguration buildConfiguration = stack.pop();
 
-		ProjectOrder fullProjectOrder = ComputeProjectOrder.computeProjectOrder(allAccessibleProjects, edges);
-		return fullProjectOrder;
+					// Add all referenced buildConfigs from the current configuration
+					// (it is guaranteed to be accessible as it was pushed onto the stack)
+					Project subProject = (Project) buildConfiguration.getProject();
+					IBuildConfiguration[] refs = subProject.internalGetReferencedBuildConfigs(buildConfiguration.getName(), false);
+					for (int j = 0; j < refs.length; j++) {
+						IBuildConfiguration ref = refs[j];
+
+						// Ignore self references and references to projects that are not accessible
+						if (ref.equals(buildConfiguration))
+							continue;
+
+						// Add the referenced accessible configuration
+						edges.add(new IBuildConfiguration[] {buildConfiguration, ref});
+
+						// If we have already explored the referenced configuration, don't explore it again
+						if (allAccessibleBuildConfigs.contains(ref))
+							continue;
+
+						allAccessibleBuildConfigs.add(ref);
+
+						// Push the referenced configuration onto the stack so that it is explored by the depth first search
+						stack.push(ref);
+					}
+				}
+			}
+		}
+		return ComputeProjectOrder.computeVertexOrder(allAccessibleBuildConfigs, edges);
+	}
+
+	/**
+	 * Computes the global total ordering of all project buildConfigs in the workspace based
+	 * on build config references. If an existing and open build config P
+	 * references another existing and open project build config Q, then Q should come before P
+	 * in the resulting ordering. Closed and non-existent projects/buildConfigs are
+	 * ignored, and will not appear in the result. References to non-existent or closed
+	 * projects/buildConfigs are also ignored, as are any self-references.
+	 * <p>
+	 * When there are choices, the choice is made in a reasonably stable way. For
+	 * example, given an arbitrary choice between two project buildConfigs, the one with the
+	 * lower collating project name and build config name will appear earlier in the list.
+	 * </p>
+	 * <p>
+	 * When the build config reference graph contains cyclic references, it is
+	 * impossible to honor all of the relationships. In this case, the result
+	 * ignores as few relationships as possible.  For example, if P2 references P1,
+	 * P4 references P3, and P2 and P3 reference each other, then exactly one of the
+	 * relationships between P2 and P3 will have to be ignored. The outcome will be
+	 * either [P1, P2, P3, P4] or [P1, P3, P2, P4]. The result also contains
+	 * complete details of any cycles present.
+	 * </p>
+	 *
+	 * @return result describing the global project build configuration order
+	 */
+	private VertexOrder computeFullBuildConfigOrder() {
+		// Compute the order for all accessible project buildConfigs
+		SortedSet<IBuildConfiguration> allAccessibleBuildConfigurations = new TreeSet<IBuildConfiguration>(new BuildConfigurationComparator());
+
+		IProject[] allProjects = getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
+		List<IBuildConfiguration[]> edges = new ArrayList<IBuildConfiguration[]>(allProjects.length);
+
+		for (int i = 0; i < allProjects.length; i++) {
+			Project project = (Project) allProjects[i];
+			// Ignore projects that are not accessible
+			if (!project.isAccessible())
+				continue;
+
+			IBuildConfiguration[] configs = project.internalGetBuildConfigs(false);
+			for (int j = 0; j < configs.length; j++) {
+				IBuildConfiguration config = configs[j];
+				allAccessibleBuildConfigurations.add(config);
+				IBuildConfiguration[] refs = project.internalGetReferencedBuildConfigs(config.getName(), false);
+				for (int k = 0; k < refs.length; k++) {
+					IBuildConfiguration ref = refs[k];
+
+					// Ignore self references
+					if (ref.equals(config))
+						continue;
+
+					// Add the reference to the set of reachable configs + add an edge
+					allAccessibleBuildConfigurations.add(ref);
+					edges.add(new IBuildConfiguration[] {config, ref});
+				}
+			}
+		}
+		return ComputeProjectOrder.computeVertexOrder(allAccessibleBuildConfigurations, edges);
+	}
+
+	private static ProjectOrder vertexOrderToProjectOrder(VertexOrder order) {
+		IProject[] projects = new IProject[order.vertexes.length];
+		System.arraycopy(order.vertexes, 0, projects, 0, order.vertexes.length);
+		IProject[][] knots = new IProject[order.knots.length][];
+		for (int i = 0; i < order.knots.length; i++) {
+			knots[i] = new IProject[order.knots[i].length];
+			System.arraycopy(order.knots[i], 0, knots[i], 0, order.knots[i].length);
+		}
+		return new ProjectOrder(projects, order.hasCycles, knots);
+	}
+
+	private static ProjectBuildConfigOrder vertexOrderToProjectBuildConfigOrder(VertexOrder order) {
+		IBuildConfiguration[] buildConfigs = new IBuildConfiguration[order.vertexes.length];
+		System.arraycopy(order.vertexes, 0, buildConfigs, 0, order.vertexes.length);
+		IBuildConfiguration[][] knots = new IBuildConfiguration[order.knots.length][];
+		for (int i = 0; i < order.knots.length; i++) {
+			knots[i] = new IBuildConfiguration[order.knots[i].length];
+			System.arraycopy(order.knots[i], 0, knots[i], 0, order.knots[i].length);
+		}
+		return new ProjectBuildConfigOrder(buildConfigs, order.hasCycles, knots);
 	}
 
 	/**
 	 * Implementation of API method declared on IWorkspace.
 	 * 
 	 * @see IWorkspace#computePrerequisiteOrder(IProject[])
-	 * @deprecated Replaced by <code>IWorkspace.computeProjectOrder</code>, which
-	 * produces a more usable result when there are cycles in project reference
-	 * graph.
+	 * @deprecated Replaced by {@link IWorkspace#computeProjectOrder(IProject[])} and
+	 * {@link Workspace#computeProjectBuildConfigOrder(IBuildConfiguration[])} which
+	 * produces more usable results when there are cycles in project reference.
 	 */
 	public IProject[][] computePrerequisiteOrder(IProject[] targets) {
 		return computePrerequisiteOrder1(targets);
@@ -541,9 +879,9 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 		// when there are cycles, we need to remove all knotted projects from
 		// r.projects to form result[0] and merge all knots to form result[1]
 		// Set<IProject> bad
-		Set bad = new HashSet();
+		Set<IProject> bad = new HashSet<IProject>();
 		// Set<IProject> bad
-		Set keepers = new HashSet(Arrays.asList(r.projects));
+		Set<IProject> keepers = new HashSet<IProject>(Arrays.asList(r.projects));
 		for (int i = 0; i < r.knots.length; i++) {
 			IProject[] knot = r.knots[i];
 			for (int j = 0; j < knot.length; j++) {
@@ -557,10 +895,10 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 		IProject[] result2 = new IProject[bad.size()];
 		bad.toArray(result2);
 		// List<IProject> p
-		List p = new LinkedList();
+		List<IProject> p = new LinkedList<IProject>();
 		p.addAll(Arrays.asList(r.projects));
-		for (Iterator it = p.listIterator(); it.hasNext();) {
-			IProject project = (IProject) it.next();
+		for (Iterator<IProject> it = p.listIterator(); it.hasNext();) {
+			IProject project = it.next();
 			if (bad.contains(project)) {
 				// remove knotted projects from the main answer
 				it.remove();
@@ -577,60 +915,71 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	 */
 	public ProjectOrder computeProjectOrder(IProject[] projects) {
 
-		// compute the full project order for all accessible projects
-		ProjectOrder fullProjectOrder = computeFullProjectOrder();
+		// Compute the full project order for all accessible projects
+		VertexOrder fullProjectOrder = computeFullProjectOrder();
 
-		// "fullProjectOrder.projects" contains no inaccessible projects
-		// but might contain accessible projects omitted from "projects"
-		// optimize common case where "projects" includes everything
-		int accessibleCount = 0;
-		for (int i = 0; i < projects.length; i++) {
-			if (projects[i].isAccessible()) {
-				accessibleCount++;
+		// Create a filter to remove all projects that are not in the list asked for
+		final Set<IProject> projectSet = new HashSet<IProject>(projects.length);
+		projectSet.addAll(Arrays.asList(projects));
+		VertexFilter filter = new VertexFilter() {
+			public boolean matches(Object vertex) {
+				return !projectSet.contains(vertex);
 			}
-		}
-		// no filtering required if the subset accounts for the full list
-		if (accessibleCount == fullProjectOrder.projects.length) {
-			return fullProjectOrder;
-		}
+		};
 
-		// otherwise we need to eliminate mention of other projects...
-		// ... from "fullProjectOrder.projects"...		
-		// Set<IProject> keepers
-		Set keepers = new HashSet(Arrays.asList(projects));
-		// List<IProject> projects
-		List reducedProjects = new ArrayList(fullProjectOrder.projects.length);
-		for (int i = 0; i < fullProjectOrder.projects.length; i++) {
-			IProject project = fullProjectOrder.projects[i];
-			if (keepers.contains(project)) {
-				// remove projects not in the initial subset
-				reducedProjects.add(project);
-			}
-		}
-		IProject[] p1 = new IProject[reducedProjects.size()];
-		reducedProjects.toArray(p1);
-
-		// ... and from "fullProjectOrder.knots"		
-		// List<IProject[]> knots
-		List reducedKnots = new ArrayList(fullProjectOrder.knots.length);
-		for (int i = 0; i < fullProjectOrder.knots.length; i++) {
-			IProject[] knot = fullProjectOrder.knots[i];
-			List x = new ArrayList(knot.length);
-			for (int j = 0; j < knot.length; j++) {
-				IProject project = knot[j];
-				if (keepers.contains(project)) {
-					x.add(project);
-				}
-			}
-			// keep knots containing 2 or more projects in the specified subset
-			if (x.size() > 1) {
-				reducedKnots.add(x.toArray(new IProject[x.size()]));
+		// Filter the order and return it
+		return vertexOrderToProjectOrder(ComputeProjectOrder.filterVertexOrder(fullProjectOrder, filter));
+	}
+
+	/**
+	 * Computes a total ordering of the given projects buildConfigs based on both static and
+	 * dynamic project references. If an existing and open project's build configuratioin P references
+	 * another existing and open project's configuration Q also included in the list, then Q
+	 * should come before P in the resulting ordering. Closed and non-existent
+	 * projects are ignored, and will not appear in the result. References to
+	 * non-existent or closed projects/buildConfigs are also ignored, as are any
+	 * self-references. The total ordering is always consistent with the global
+	 * total ordering of all open projects' buildConfigs in the workspace.
+	 * <p>
+	 * When there are choices, the choice is made in a reasonably stable way.
+	 * For example, given an arbitrary choice between two project buildConfigs, the one with
+	 * the lower collating configuration name is usually selected.
+	 * </p>
+	 * <p>
+	 * When the project reference graph contains cyclic references, it is
+	 * impossible to honor all of the relationships. In this case, the result
+	 * ignores as few relationships as possible. For example, if P2 references
+	 * P1, P4 references P3, and P2 and P3 reference each other, then exactly
+	 * one of the relationships between P2 and P3 will have to be ignored. The
+	 * outcome will be either [P1, P2, P3, P4] or [P1, P3, P2, P4]. The result
+	 * also contains complete details of any cycles present.
+	 * </p>
+	 * <p>
+	 * This method is time-consuming and should not be called unnecessarily.
+	 * There are a very limited set of changes to a workspace that could affect
+	 * the outcome: creating, renaming, or deleting a project; opening or
+	 * closing a project; deleting a build configuration; adding or removing a build configuration reference.
+	 * </p>
+	 * 
+	 * @param buildConfigs the build configurations to order
+	 * @return result describing the build configuration order
+	 * @since 3.7
+	 */
+	public ProjectBuildConfigOrder computeProjectBuildConfigOrder(IBuildConfiguration[] buildConfigs) {
+		// Compute the full project order for all accessible projects
+		VertexOrder fullBuildConfigOrder = computeFullBuildConfigOrder();
+
+		// Create a filter to remove all project buildConfigs that are not in the list asked for
+		final Set<IBuildConfiguration> projectConfigSet = new HashSet<IBuildConfiguration>(buildConfigs.length);
+		projectConfigSet.addAll(Arrays.asList(buildConfigs));
+		VertexFilter filter = new VertexFilter() {
+			public boolean matches(Object vertex) {
+				return !projectConfigSet.contains(vertex);
 			}
-		}
-		IProject[][] k1 = new IProject[reducedKnots.size()][];
-		// okay to use toArray here because reducedKnots elements are IProject[]
-		reducedKnots.toArray(k1);
-		return new ProjectOrder(p1, (k1.length > 0), k1);
+		};
+
+		// Filter the order and return it
+		return vertexOrderToProjectBuildConfigOrder(ComputeProjectOrder.filterVertexOrder(fullBuildConfigOrder, filter));
 	}
 
 	/* (non-Javadoc)
@@ -655,7 +1004,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 			if (resources.length == 0)
 				return Status.OK_STATUS;
 			// to avoid concurrent changes to this array
-			resources = (IResource[]) resources.clone();
+			resources = resources.clone();
 			IPath parentPath = null;
 			message = Messages.resources_copyProblem;
 			MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, message, null);
@@ -781,8 +1130,8 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 		// update filters in project descriptions
 		if (source.getProject().exists() && source instanceof Container && ((Container) source).hasFilters()) {
 			Project sourceProject = (Project) source.getProject();
-			LinkedList/*<FilterDescription>*/ originalDescriptions = sourceProject.internalGetDescription().getFilter(source.getProjectRelativePath());
-			LinkedList/*<FilterDescription>*/ filterDescriptions = FilterDescription.copy(originalDescriptions, destinationResource);
+			LinkedList<FilterDescription> originalDescriptions = sourceProject.internalGetDescription().getFilter(source.getProjectRelativePath());
+			LinkedList<FilterDescription> filterDescriptions = FilterDescription.copy(originalDescriptions, destinationResource);
 			if (moveResources && !movingProject) {
 				if (((Project) source.getProject())
 						.internalGetDescription()
@@ -1064,7 +1413,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 			MultiStatus result = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, message, null);
 			if (resources.length == 0)
 				return result;
-			resources = (IResource[]) resources.clone(); // to avoid concurrent changes to this array
+			resources = resources.clone(); // to avoid concurrent changes to this array
 			try {
 				prepareOperation(getRoot(), monitor);
 				beginOperation(true);
@@ -1109,7 +1458,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 		if (markers.length == 0)
 			return;
 		// clone to avoid outside changes
-		markers = (IMarker[]) markers.clone();
+		markers = markers.clone();
 		try {
 			prepareOperation(null, null);
 			beginOperation(true);
@@ -1197,13 +1546,12 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	}
 
 	/**
-	 * Flush the build order cache for the workspace.  Only needed if the
-	 * description does not already have a build order.  That is, if this
-	 * is really a cache.
+	 * Flush the build order cache for the workspace.  The buildOrder cache contains the total
+	 * order of the build configurations in the workspace, including projects not mentioned in
+	 * the workspace description.
 	 */
 	protected void flushBuildOrder() {
-		if (description.getBuildOrder(false) == null)
-			buildOrder = null;
+		buildOrder = null;
 	}
 
 	/* (non-Javadoc)
@@ -1226,48 +1574,61 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 
 	/**
 	 * Returns the order in which open projects in this workspace will be built.
+	 * The result returned is a list of project buildConfigs, that need to be built
+	 * in order to successfully build the active config of every project in this
+	 * workspace.
 	 * <p>
-	 * The project build order is based on information specified in the workspace
-	 * description. The projects are built in the order specified by
+	 * The build configuration order is based on information specified in the workspace
+	 * description. The project build configs are built in the order specified by
 	 * <code>IWorkspaceDescription.getBuildOrder</code>; closed or non-existent
-	 * projects are ignored and not included in the result. If
-	 * <code>IWorkspaceDescription.getBuildOrder</code> is non-null, the default
-	 * build order is used; again, only open projects are included in the result.
+	 * projects are ignored and not included in the result. If any open projects are
+	 * not specified in this order, they are appended to the end of the build order
+	 * sorted by project name (to provide a stable ordering).
+	 * </p>
+	 * <p>
+	 * If <code>IWorkspaceDescription.getBuildOrder</code> is non-null, the default
+	 * build order is used (calculated based on references); again, only open projects'
+	 * buildConfigs are included in the result.
 	 * </p>
 	 * <p>
 	 * The returned value is cached in the <code>buildOrder</code> field.
 	 * </p>
 	 * 
-	 * @return the list of currently open projects in the workspace in the order in
-	 * which they would be built by <code>IWorkspace.build</code>.
+	 * @return the list of currently open projects active buildConfigs (and the project buildConfigs
+	 * they depend on) in the workspace in the order in which they would be built by <code>IWorkspace.build</code>.
 	 * @see IWorkspace#build(int, IProgressMonitor)
 	 * @see IWorkspaceDescription#getBuildOrder()
-	 * @since 2.1
 	 */
-	public IProject[] getBuildOrder() {
-		if (buildOrder != null) {
-			// return previously-computed and cached project build order
+	public IBuildConfiguration[] getBuildOrder() {
+		// Return the build order cache.
+		if (buildOrder != null)
 			return buildOrder;
-		}
+
 		// see if a particular build order is specified
 		String[] order = description.getBuildOrder(false);
 		if (order != null) {
-			// convert from project names to project handles
+			LinkedHashSet<IBuildConfiguration> configs = new LinkedHashSet<IBuildConfiguration>();
+
+			// convert from project names to active project buildConfigs
 			// and eliminate non-existent and closed projects
-			List projectList = new ArrayList(order.length);
 			for (int i = 0; i < order.length; i++) {
 				IProject project = getRoot().getProject(order[i]);
-				if (project.isAccessible()) {
-					projectList.add(project);
-				}
+				if (project.isAccessible())
+					configs.add(((Project) project).internalGetActiveBuildConfig());
 			}
-			buildOrder = new IProject[projectList.size()];
-			projectList.toArray(buildOrder);
-		} else {
+
+			// Add projects not mentioned in the build order to the end, in a sensible reference order
+			configs.addAll(Arrays.asList(vertexOrderToProjectBuildConfigOrder(computeActiveBuildConfigOrder()).buildConfigurations));
+
+			// Update the cache - Java 5 volatile memory barrier semantics
+			IBuildConfiguration[] bo = new IBuildConfiguration[configs.size()];
+			configs.toArray(bo);
+			this.buildOrder = bo;
+		} else
 			// use default project build order
 			// computed for all accessible projects in workspace
-			buildOrder = computeFullProjectOrder().projects;
-		}
+			buildOrder = vertexOrderToProjectBuildConfigOrder(computeActiveBuildConfigOrder()).buildConfigurations;
+
 		return buildOrder;
 	}
 
@@ -1282,15 +1643,15 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	/* (non-Javadoc)
 	 * @see IWorkspace#getDanglingReferences()
 	 */
-	public Map getDanglingReferences() {
+	public Map<IProject, IProject[]> getDanglingReferences() {
 		IProject[] projects = getRoot().getProjects(IContainer.INCLUDE_HIDDEN);
-		Map result = new HashMap(projects.length);
+		Map<IProject, IProject[]> result = new HashMap<IProject, IProject[]>(projects.length);
 		for (int i = 0; i < projects.length; i++) {
 			Project project = (Project) projects[i];
 			if (!project.isAccessible())
 				continue;
 			IProject[] refs = project.internalGetDescription().getReferencedProjects(false);
-			List dangling = new ArrayList(refs.length);
+			List<IProject> dangling = new ArrayList<IProject>(refs.length);
 			for (int j = 0; j < refs.length; j++)
 				if (!refs[i].exists())
 					dangling.add(refs[i]);
@@ -1684,7 +2045,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 			monitor.beginTask(message, totalWork);
 			if (resources.length == 0)
 				return Status.OK_STATUS;
-			resources = (IResource[]) resources.clone(); // to avoid concurrent changes to this array
+			resources = resources.clone(); // to avoid concurrent changes to this array
 			IPath parentPath = null;
 			message = Messages.resources_moveProblem;
 			MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, message, null);
@@ -1778,6 +2139,13 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IWorkspace#newBuildConfig(java.lang.String, java.lang.String)
+	 */
+	public IBuildConfiguration newBuildConfig(String projectName, String configName) {
+		return new BuildConfiguration(getRoot().getProject(projectName), configName);
+	}
+
+	/* (non-Javadoc)
 	 * @see IWorkspace#newProjectDescription(String)
 	 */
 	public IProjectDescription newProjectDescription(String projectName) {
@@ -1937,6 +2305,7 @@ public class Workspace extends PlatformObject implements IWorkspace, ICoreConsta
 	/* (non-Javadoc)
 	 * @see IWorkspace#removeSaveParticipant(Plugin)
 	 */
+	@Deprecated
 	public void removeSaveParticipant(Plugin plugin) {
 		Assert.isNotNull(plugin, "Plugin must not be null"); //$NON-NLS-1$
 		saveManager.removeParticipant(plugin.getBundle().getSymbolicName());
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java
index 51d4fb8..a1b3d49 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -47,13 +48,13 @@ public class WorkspaceDescriptionReader implements IModelObjectConstants {
 		NodeList list = target.getChildNodes();
 		if (list.getLength() == 0)
 			return EMPTY_STRING_ARRAY;
-		List result = new ArrayList(list.getLength());
+		List<Object> result = new ArrayList<Object>(list.getLength());
 		for (int i = 0; i < list.getLength(); i++) {
 			Node node = list.item(i);
 			if (node.getNodeType() == Node.ELEMENT_NODE)
 				result.add(read(node.getChildNodes().item(0)));
 		}
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java
index fe93dde..433f770 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -54,10 +55,10 @@ public class WorkspacePreferences extends WorkspaceDescription {
 	 * stringN" to a string array {"string1","string2",..."stringN"}.
 	 */
 	public static String[] convertStringToStringArray(String string, String separator) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		for (StringTokenizer tokenizer = new StringTokenizer(string, separator); tokenizer.hasMoreTokens();)
 			list.add(tokenizer.nextToken());
-		return (String[]) list.toArray(new String[list.size()]);
+		return list.toArray(new String[list.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceRoot.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceRoot.java
index 7fc4ec9..9b3bac1 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceRoot.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -26,7 +27,7 @@ public class WorkspaceRoot extends Container implements IWorkspaceRoot {
 	 * that have been requested from this root.  This maps project
 	 * name strings to project handles.
 	 */
-	private final Map projectTable = Collections.synchronizedMap(new HashMap(16));
+	private final Map<String, Project> projectTable = Collections.synchronizedMap(new HashMap<String, Project>(16));
 	
 	/**
 	 * Cache of the canonicalized platform location.
@@ -176,14 +177,14 @@ public class WorkspaceRoot extends Container implements IWorkspaceRoot {
 	 */
 	public IProject getProject(String name) {
 		//first check our project cache
-		Project result = (Project) projectTable.get(name);
+		Project result = projectTable.get(name);
 		if (result == null) {
 			IPath projectPath = new Path(null, name).makeAbsolute();
 			String message = "Path for project must have only one segment."; //$NON-NLS-1$
 			Assert.isLegal(projectPath.segmentCount() == ICoreConstants.PROJECT_SEGMENT_LENGTH, message);
 			//try to get the project using a canonical name
 			String canonicalName = projectPath.lastSegment();
-			result = (Project) projectTable.get(canonicalName);
+			result = projectTable.get(canonicalName);
 			if (result != null)
 				return result;
 			result = new Project(projectPath, workspace);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_1.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_1.java
index 7b96982..8191cc0 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_1.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_1.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  * Francis Lynch (Wind River) - [305718] Allow reading snapshot into renamed project
+ * James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
@@ -36,20 +37,20 @@ public class WorkspaceTreeReader_1 extends WorkspaceTreeReader {
 		return ICoreConstants.WORKSPACE_TREE_VERSION_1;
 	}
 
-	protected void linkBuildersToTrees(List buildersToBeLinked, ElementTree[] trees, int index, IProgressMonitor monitor) {
+	protected void linkBuildersToTrees(List<BuilderPersistentInfo> buildersToBeLinked, ElementTree[] trees, int index, IProgressMonitor monitor) {
 		monitor = Policy.monitorFor(monitor);
 		try {
-			ArrayList infos = null;
+			ArrayList<BuilderPersistentInfo> infos = null;
 			String projectName = null;
 			for (int i = 0; i < buildersToBeLinked.size(); i++) {
-				BuilderPersistentInfo info = (BuilderPersistentInfo) buildersToBeLinked.get(i);
+				BuilderPersistentInfo info = buildersToBeLinked.get(i);
 				if (!info.getProjectName().equals(projectName)) {
 					if (infos != null) { // if it is not the first iteration
 						IProject project = workspace.getRoot().getProject(projectName);
 						workspace.getBuildManager().setBuildersPersistentInfo(project, infos);
 					}
 					projectName = info.getProjectName();
-					infos = new ArrayList(5);
+					infos = new ArrayList<BuilderPersistentInfo>(5);
 				}
 				info.setLastBuildTree(trees[index++]);
 				infos.add(info);
@@ -63,11 +64,11 @@ public class WorkspaceTreeReader_1 extends WorkspaceTreeReader {
 		}
 	}
 
-	protected void linkPluginsSavedStateToTrees(List states, ElementTree[] trees, IProgressMonitor monitor) {
+	protected void linkPluginsSavedStateToTrees(List<SavedState> states, ElementTree[] trees, IProgressMonitor monitor) {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			for (int i = 0; i < states.size(); i++) {
-				SavedState state = (SavedState) states.get(i);
+				SavedState state = states.get(i);
 				// If the tree is too old (depends on the policy), the plug-in should not
 				// get it back as a delta. It is expensive to maintain this information too long.
 				final SaveManager saveManager = workspace.getSaveManager();
@@ -93,7 +94,7 @@ public class WorkspaceTreeReader_1 extends WorkspaceTreeReader {
 		return new BuilderPersistentInfo(projectName, builderName, index);
 	}
 
-	protected void readBuildersPersistentInfo(IProject project, DataInputStream input, List builders, IProgressMonitor monitor) throws IOException {
+	protected void readBuildersPersistentInfo(IProject project, DataInputStream input, List<BuilderPersistentInfo> builders, IProgressMonitor monitor) throws IOException {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			int builderCount = input.readInt();
@@ -104,7 +105,7 @@ public class WorkspaceTreeReader_1 extends WorkspaceTreeReader {
 		}
 	}
 
-	protected void readPluginsSavedStates(DataInputStream input, HashMap savedStates, List plugins, IProgressMonitor monitor) throws IOException, CoreException {
+	protected void readPluginsSavedStates(DataInputStream input, HashMap<String, SavedState> savedStates, List<SavedState> plugins, IProgressMonitor monitor) throws IOException, CoreException {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			int stateCount = input.readInt();
@@ -155,12 +156,12 @@ public class WorkspaceTreeReader_1 extends WorkspaceTreeReader {
 			monitor.beginTask(message, Policy.totalWork);
 			readWorkspaceFields(input, Policy.subMonitorFor(monitor, Policy.opWork * 20 / 100));
 
-			HashMap savedStates = new HashMap(20);
-			List pluginsToBeLinked = new ArrayList(20);
+			HashMap<String, SavedState> savedStates = new HashMap<String, SavedState>(20);
+			List<SavedState> pluginsToBeLinked = new ArrayList<SavedState>(20);
 			readPluginsSavedStates(input, savedStates, pluginsToBeLinked, Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
 			workspace.getSaveManager().setPluginsSavedState(savedStates);
 
-			List buildersToBeLinked = new ArrayList(20);
+			List<BuilderPersistentInfo> buildersToBeLinked = new ArrayList<BuilderPersistentInfo>(20);
 			readBuildersPersistentInfo(null, input, buildersToBeLinked, Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
 
 			ElementTree[] trees = readTrees(Path.ROOT, input, Policy.subMonitorFor(monitor, Policy.opWork * 40 / 100));
@@ -197,7 +198,7 @@ public class WorkspaceTreeReader_1 extends WorkspaceTreeReader {
 
 			/* map builder names to trees */
 			if (numBuilders > 0) {
-				ArrayList infos = new ArrayList(trees.length * 2 + 1);
+				ArrayList<BuilderPersistentInfo> infos = new ArrayList<BuilderPersistentInfo>(trees.length * 2 + 1);
 				for (int i = 0; i < numBuilders; i++) {
 					BuilderPersistentInfo info = new BuilderPersistentInfo(project.getName(), builderNames[i], -1);
 					info.setLastBuildTree(trees[i]);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_2.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_2.java
index cc47428..2e8b4a5 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_2.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceTreeReader_2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,21 +7,20 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Broadcom Corporation - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
 import java.io.DataInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import org.eclipse.core.internal.events.BuilderPersistentInfo;
 import org.eclipse.core.internal.utils.Messages;
 import org.eclipse.core.internal.utils.Policy;
 import org.eclipse.core.internal.watson.ElementTree;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResourceStatus;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.*;
 
 /**
  * Reads version 2 of the workspace tree file format. 
@@ -30,9 +29,20 @@ import org.eclipse.core.runtime.IProgressMonitor;
  * for each builder. Version 1 only stored builder names and trees. Version
  * 2 stores builder names, project names, trees, and interesting projects for
  * each builder.
+ * <p>
+ * Since 3.7 support has been added for persisting multiple delta trees for
+ * multi-configuration builders.
+ * </p>
+ * <p>
+ * To achieve backwards compatibility, the new additional information is
+ * appended to the existing workspace tree file.  This allows the workspace
+ * to be opened, and function, with older eclipse products.
+ * </p>
  */
 public class WorkspaceTreeReader_2 extends WorkspaceTreeReader_1 {
 
+	private List<BuilderPersistentInfo> builderInfos;
+
 	public WorkspaceTreeReader_2(Workspace workspace) {
 		super(workspace);
 	}
@@ -44,7 +54,7 @@ public class WorkspaceTreeReader_2 extends WorkspaceTreeReader_1 {
 	/*
 	 * overwritten from WorkspaceTreeReader_1
 	 */
-	protected void readBuildersPersistentInfo(IProject project, DataInputStream input, List builders, IProgressMonitor monitor) throws IOException {
+	protected void readBuildersPersistentInfo(IProject project, DataInputStream input, List<BuilderPersistentInfo> builders, IProgressMonitor monitor) throws IOException {
 		monitor = Policy.monitorFor(monitor);
 		try {
 			int builderCount = input.readInt();
@@ -63,8 +73,59 @@ public class WorkspaceTreeReader_2 extends WorkspaceTreeReader_1 {
 		}
 	}
 
-	/*
-	 * overwritten from WorkspaceTreeReader_1
+	/**
+	 * Read a workspace tree storing information about multiple projects.
+	 * Overrides {@link WorkspaceTreeReader_1#readTree(DataInputStream, IProgressMonitor)}
+	 */
+	public void readTree(DataInputStream input, IProgressMonitor monitor) throws CoreException {
+		monitor = Policy.monitorFor(monitor);
+		String message;
+		try {
+			message = Messages.resources_reading;
+			monitor.beginTask(message, Policy.totalWork);
+
+			builderInfos = new ArrayList<BuilderPersistentInfo>(20);
+
+			// Read the version 2 part of the file, but don't set the builder info in
+			// the projects. Store it in builderInfos instead.
+			readWorkspaceFields(input, Policy.subMonitorFor(monitor, Policy.opWork * 20 / 100));
+
+			HashMap<String, SavedState> savedStates = new HashMap<String, SavedState>(20);
+			List<SavedState> pluginsToBeLinked = new ArrayList<SavedState>(20);
+			readPluginsSavedStates(input, savedStates, pluginsToBeLinked, Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
+			workspace.getSaveManager().setPluginsSavedState(savedStates);
+
+			List<BuilderPersistentInfo> buildersToBeLinked = new ArrayList<BuilderPersistentInfo>(20);
+			readBuildersPersistentInfo(null, input, buildersToBeLinked, Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
+
+			final ElementTree[] trees = readTrees(Path.ROOT, input, Policy.subMonitorFor(monitor, Policy.opWork * 40 / 100));
+			linkPluginsSavedStateToTrees(pluginsToBeLinked, trees, Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
+			linkBuildersToTrees(buildersToBeLinked, trees, pluginsToBeLinked.size(), Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
+
+			// Since 3.7: Read the per-configuration trees if available
+			if (input.available() > 0) {
+				buildersToBeLinked.clear();
+				readBuildersPersistentInfo(null, input, buildersToBeLinked, Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
+				linkBuildersToTrees(buildersToBeLinked, trees, 0, Policy.subMonitorFor(monitor, Policy.opWork * 10 / 100));
+
+				for (Iterator<BuilderPersistentInfo> it = builderInfos.iterator(); it.hasNext();)
+					it.next().setConfigName(input.readUTF());
+			}
+
+			// Set the builder infos on the projects
+			setBuilderInfos(builderInfos);
+
+		} catch (IOException e) {
+			message = Messages.resources_readProjectTree;
+			throw new ResourceException(IResourceStatus.FAILED_READ_METADATA, null, message, e);
+		} finally {
+			monitor.done();
+		}
+	}
+
+	/**
+	 * Read a workspace tree storing information about a single project.
+	 * Overrides {@link WorkspaceTreeReader_2#readTree(IProject, DataInputStream, IProgressMonitor)}
 	 */
 	public void readTree(IProject project, DataInputStream input, IProgressMonitor monitor) throws CoreException {
 		monitor = Policy.monitorFor(monitor);
@@ -73,15 +134,30 @@ public class WorkspaceTreeReader_2 extends WorkspaceTreeReader_1 {
 			message = Messages.resources_reading;
 			monitor.beginTask(message, 10);
 
-			/* read in the builder infos */
-			List infos = new ArrayList(5);
-			readBuildersPersistentInfo(project, input, infos, Policy.subMonitorFor(monitor, 1));
+			builderInfos = new ArrayList<BuilderPersistentInfo>(20);
+
+			// Read the version 2 part of the file, but don't set the builder info in
+			// the projects. It is stored in builderInfos instead.
+
+			List<BuilderPersistentInfo> buildersToBeLinked = new ArrayList<BuilderPersistentInfo>(20);
+			readBuildersPersistentInfo(project, input, buildersToBeLinked, Policy.subMonitorFor(monitor, 1));
 
-			/* read and link the trees */
 			ElementTree[] trees = readTrees(project.getFullPath(), input, Policy.subMonitorFor(monitor, 8));
+			linkBuildersToTrees(buildersToBeLinked, trees, 0, Policy.subMonitorFor(monitor, 1));
+
+			// Since 3.7: Read the additional builder information
+			if (input.available() > 0) {
+
+				List<BuilderPersistentInfo> infos = new ArrayList<BuilderPersistentInfo>(5);
+				readBuildersPersistentInfo(project, input, infos, Policy.subMonitorFor(monitor, 1));
+				linkBuildersToTrees(infos, trees, 0, Policy.subMonitorFor(monitor, 1));
 
-			/* map builder names to trees */
-			linkBuildersToTrees(infos, trees, 0, Policy.subMonitorFor(monitor, 1));
+				for (Iterator<BuilderPersistentInfo> it = builderInfos.iterator(); it.hasNext();)
+					it.next().setConfigName(input.readUTF());
+			}
+
+			// Set the builder info on the projects
+			setBuilderInfos(builderInfos);
 
 		} catch (IOException e) {
 			message = Messages.resources_readProjectTree;
@@ -90,4 +166,40 @@ public class WorkspaceTreeReader_2 extends WorkspaceTreeReader_1 {
 			monitor.done();
 		}
 	}
+
+	/**
+	 * This implementation allows pre-3.7 version 2 and post-3.7 version 2 information to be loaded in separate passes.
+	 * Links trees with the given builders, but does not add them to the projects.
+	 * Overrides {@link WorkspaceTreeReader_1#linkBuildersToTrees(List, ElementTree[], int, IProgressMonitor)}
+	 */
+	protected void linkBuildersToTrees(List<BuilderPersistentInfo> buildersToBeLinked, ElementTree[] trees, int index, IProgressMonitor monitor) {
+		monitor = Policy.monitorFor(monitor);
+		try {
+			for (int i = 0; i < buildersToBeLinked.size(); i++) {
+				BuilderPersistentInfo info = buildersToBeLinked.get(i);
+				info.setLastBuildTree(trees[index++]);
+				builderInfos.add(info);
+			}
+		} finally {
+			monitor.done();
+		}
+	}
+
+	/**
+	 * Given a list of builder infos, group them by project and set them on the project.
+	 */
+	private void setBuilderInfos(List<BuilderPersistentInfo> infos) {
+		Map<String, List<BuilderPersistentInfo>> groupedInfos = new HashMap<String, List<BuilderPersistentInfo>>();
+		for (Iterator<BuilderPersistentInfo> it = infos.iterator(); it.hasNext();) {
+			BuilderPersistentInfo info = it.next();
+			if (!groupedInfos.containsKey(info.getProjectName()))
+				groupedInfos.put(info.getProjectName(), new ArrayList<BuilderPersistentInfo>());
+			groupedInfos.get(info.getProjectName()).add(info);
+		}
+		for (Map.Entry<String, List<BuilderPersistentInfo>> entry : groupedInfos.entrySet()) {
+			IProject proj = workspace.getRoot().getProject(entry.getKey());
+			workspace.getBuildManager().setBuildersPersistentInfo(proj, entry.getValue());
+		}
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/XMLWriter.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/XMLWriter.java
index 2cbbca2..e591aab 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/XMLWriter.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/XMLWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,12 +7,13 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources;
 
 import java.io.*;
 import java.util.HashMap;
-import java.util.Iterator;
+import java.util.Map;
 
 /**
  * A simple XML writer.
@@ -47,21 +48,21 @@ public class XMLWriter extends PrintWriter {
 			super.print('\t');
 	}
 
-	public void printTag(String name, HashMap parameters) {
+	public void printTag(String name, HashMap<String, Object> parameters) {
 		printTag(name, parameters, true, true);
 	}
 
-	public void printTag(String name, HashMap parameters, boolean shouldTab, boolean newLine) {
+	public void printTag(String name, HashMap<String, Object> parameters, boolean shouldTab, boolean newLine) {
 		StringBuffer sb = new StringBuffer();
 		sb.append("<"); //$NON-NLS-1$
 		sb.append(name);
 		if (parameters != null)
-			for (Iterator it = parameters.keySet().iterator(); it.hasNext();) {
+			for (Map.Entry<String, Object> entry : parameters.entrySet()) {
 				sb.append(" "); //$NON-NLS-1$
-				String key = (String) it.next();
+				String key = entry.getKey();
 				sb.append(key);
 				sb.append("=\""); //$NON-NLS-1$
-				sb.append(getEscaped(String.valueOf(parameters.get(key))));
+				sb.append(getEscaped(String.valueOf(entry.getValue())));
 				sb.append("\""); //$NON-NLS-1$
 			}
 		sb.append(">"); //$NON-NLS-1$
@@ -73,11 +74,11 @@ public class XMLWriter extends PrintWriter {
 			print(sb.toString());
 	}
 
-	public void startTag(String name, HashMap parameters) {
+	public void startTag(String name, HashMap<String, Object> parameters) {
 		startTag(name, parameters, true);
 	}
 
-	public void startTag(String name, HashMap parameters, boolean newLine) {
+	public void startTag(String name, HashMap<String, Object> parameters, boolean newLine) {
 		printTag(name, parameters, true, newLine);
 		tab++;
 	}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ChangeDescription.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ChangeDescription.java
index f396265..0e231ef 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ChangeDescription.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ChangeDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources.mapping;
 
@@ -19,12 +20,12 @@ import org.eclipse.core.runtime.IPath;
  */
 public class ChangeDescription {
 
-	private List addedRoots = new ArrayList();
-	private List changedFiles = new ArrayList();
-	private List closedProjects = new ArrayList();
-	private List copiedRoots = new ArrayList();
-	private List movedRoots = new ArrayList();
-	private List removedRoots = new ArrayList();
+	private List<IResource> addedRoots = new ArrayList<IResource>();
+	private List<IResource> changedFiles = new ArrayList<IResource>();
+	private List<IResource> closedProjects = new ArrayList<IResource>();
+	private List<IResource> copiedRoots = new ArrayList<IResource>();
+	private List<IResource> movedRoots = new ArrayList<IResource>();
+	private List<IResource> removedRoots = new ArrayList<IResource>();
 
 	private IResource createSourceResource(IResourceDelta delta) {
 		IPath sourcePath = delta.getMovedFromPath();
@@ -41,10 +42,10 @@ public class ChangeDescription {
 		return null;
 	}
 
-	private void ensureResourceCovered(IResource resource, List list) {
+	private void ensureResourceCovered(IResource resource, List<IResource> list) {
 		IPath path = resource.getFullPath();
-		for (Iterator iter = list.iterator(); iter.hasNext();) {
-			IResource root = (IResource) iter.next();
+		for (Iterator<IResource> iter = list.iterator(); iter.hasNext();) {
+			IResource root = iter.next();
 			if (root.getFullPath().isPrefixOf(path)) {
 				return;
 			}
@@ -53,14 +54,14 @@ public class ChangeDescription {
 	}
 
 	public IResource[] getRootResources() {
-		Set result = new HashSet();
+		Set<IResource> result = new HashSet<IResource>();
 		result.addAll(addedRoots);
 		result.addAll(changedFiles);
 		result.addAll(closedProjects);
 		result.addAll(copiedRoots);
 		result.addAll(movedRoots);
 		result.addAll(removedRoots);
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	private void handleAdded(IResourceDelta delta) {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderDescriptor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderDescriptor.java
index fa5bb13..3ea90d9 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderDescriptor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources.mapping;
 
@@ -60,7 +61,7 @@ public class ModelProviderDescriptor implements IModelProviderDescriptor {
 	}
 
 	public IResource[] getMatchingResources(IResource[] resources) throws CoreException {
-		Set result = new HashSet();
+		Set<IResource> result = new HashSet<IResource>();
 		for (int i = 0; i < resources.length; i++) {
 			IResource resource = resources[i];
 			EvaluationContext evalContext = createEvaluationContext(resource);
@@ -68,7 +69,7 @@ public class ModelProviderDescriptor implements IModelProviderDescriptor {
 				result.add(resource);
 			}
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	public synchronized ModelProvider getModelProvider() throws CoreException {
@@ -108,7 +109,7 @@ public class ModelProviderDescriptor implements IModelProviderDescriptor {
 		label = extension.getLabel();
 		IConfigurationElement[] elements = extension.getConfigurationElements();
 		int count = elements.length;
-		ArrayList extendsList = new ArrayList(count);
+		ArrayList<String> extendsList = new ArrayList<String>(count);
 		for (int i = 0; i < count; i++) {
 			IConfigurationElement element = elements[i];
 			String name = element.getName();
@@ -121,18 +122,18 @@ public class ModelProviderDescriptor implements IModelProviderDescriptor {
 				enablementRule = ExpressionConverter.getDefault().perform(element);
 			}
 		}
-		extendedModels = (String[]) extendsList.toArray(new String[extendsList.size()]);
+		extendedModels = extendsList.toArray(new String[extendsList.size()]);
 	}
 
 	public ResourceTraversal[] getMatchingTraversals(ResourceTraversal[] traversals) throws CoreException {
-		List result = new ArrayList();
+		List<ResourceTraversal> result = new ArrayList<ResourceTraversal>();
 		for (int i = 0; i < traversals.length; i++) {
 			ResourceTraversal traversal = traversals[i];
 			if (getMatchingResources(traversal.getResources()).length > 0) {
 				result.add(traversal);
 			}
 		}
-		return (ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]);
+		return result.toArray(new ResourceTraversal[result.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderManager.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderManager.java
index 77efca8..37a7fc5 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderManager.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ModelProviderManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources.mapping;
 
@@ -20,7 +21,7 @@ import org.eclipse.core.runtime.*;
 
 public class ModelProviderManager {
 
-	private static Map descriptors;
+	private static Map<String, IModelProviderDescriptor> descriptors;
 	private static ModelProviderManager instance;
 
 	public synchronized static ModelProviderManager getDefault() {
@@ -37,12 +38,12 @@ public class ModelProviderManager {
 
 	public IModelProviderDescriptor getDescriptor(String id) {
 		lazyInitialize();
-		return (IModelProviderDescriptor) descriptors.get(id);
+		return descriptors.get(id);
 	}
 
 	public IModelProviderDescriptor[] getDescriptors() {
 		lazyInitialize();
-		return (IModelProviderDescriptor[]) descriptors.values().toArray(new IModelProviderDescriptor[descriptors.size()]);
+		return descriptors.values().toArray(new IModelProviderDescriptor[descriptors.size()]);
 	}
 
 	public ModelProvider getModelProvider(String modelProviderId) throws CoreException {
@@ -57,7 +58,7 @@ public class ModelProviderManager {
 			return;
 		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_MODEL_PROVIDERS);
 		IExtension[] extensions = point.getExtensions();
-		descriptors = new HashMap(extensions.length * 2 + 1);
+		descriptors = new HashMap<String, IModelProviderDescriptor>(extensions.length * 2 + 1);
 		for (int i = 0, imax = extensions.length; i < imax; i++) {
 			IModelProviderDescriptor desc = null;
 			try {
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ProposedResourceDelta.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ProposedResourceDelta.java
index 22cd39f..6525d2e 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ProposedResourceDelta.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ProposedResourceDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources.mapping;
 
@@ -21,7 +22,7 @@ public final class ProposedResourceDelta extends PlatformObject implements IReso
 
 	protected static int KIND_MASK = 0xFF;
 
-	private HashMap children = new HashMap(8);
+	private HashMap<String, ProposedResourceDelta> children = new HashMap<String, ProposedResourceDelta>(8);
 	private IPath movedFromPath;
 	private IPath movedToPath;
 	private IResource resource;
@@ -51,8 +52,8 @@ public final class ProposedResourceDelta extends PlatformObject implements IReso
 	public void accept(IResourceDeltaVisitor visitor, int memberFlags) throws CoreException {
 		if (!visitor.visit(this))
 			return;
-		for (Iterator iter = children.values().iterator(); iter.hasNext();) {
-			ProposedResourceDelta childDelta = (ProposedResourceDelta) iter.next();
+		for (Iterator<ProposedResourceDelta> iter = children.values().iterator(); iter.hasNext();) {
+			ProposedResourceDelta childDelta = iter.next();
 			childDelta.accept(visitor, memberFlags);
 		}
 	}
@@ -87,7 +88,7 @@ public final class ProposedResourceDelta extends PlatformObject implements IReso
 		//iterate over the path and find matching child delta
 		ProposedResourceDelta current = this;
 		for (int i = 0; i < segmentCount; i++) {
-			current = (ProposedResourceDelta) current.children.get(path.segment(i));
+			current = current.children.get(path.segment(i));
 			if (current == null)
 				return null;
 		}
@@ -112,13 +113,13 @@ public final class ProposedResourceDelta extends PlatformObject implements IReso
 	 * @see org.eclipse.core.resources.IResourceDelta#getAffectedChildren(int, int)
 	 */
 	public IResourceDelta[] getAffectedChildren(int kindMask, int memberFlags) {
-		List result = new ArrayList();
-		for (Iterator iter = children.values().iterator(); iter.hasNext();) {
-			ProposedResourceDelta child = (ProposedResourceDelta) iter.next();
+		List<ProposedResourceDelta> result = new ArrayList<ProposedResourceDelta>();
+		for (Iterator<ProposedResourceDelta> iter = children.values().iterator(); iter.hasNext();) {
+			ProposedResourceDelta child = iter.next();
 			if ((child.getKind() & kindMask) != 0)
 				result.add(child);
 		}
-		return (IResourceDelta[]) result.toArray(new IResourceDelta[result.size()]);
+		return result.toArray(new IResourceDelta[result.size()]);
 	}
 	
 	/**
@@ -126,7 +127,7 @@ public final class ProposedResourceDelta extends PlatformObject implements IReso
 	 * or <code>null</code>.
 	 */
 	ProposedResourceDelta getChild(String name) {
-		return (ProposedResourceDelta) children.get(name);
+		return children.get(name);
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ResourceModelProvider.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ResourceModelProvider.java
index 6d21cb7..90aed6a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ResourceModelProvider.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/mapping/ResourceModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources.mapping;
 
@@ -14,8 +15,7 @@ import java.util.*;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.mapping.*;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.*;
 
 /**
  * A simple model provider that represents the resource model itself.
@@ -35,7 +35,7 @@ public final class ResourceModelProvider extends ModelProvider {
 	 * @see org.eclipse.core.resources.mapping.ModelProvider#getMappings(org.eclipse.core.resources.mapping.ResourceTraversal[], org.eclipse.core.resources.mapping.ResourceMappingContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public ResourceMapping[] getMappings(ResourceTraversal[] traversals, ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
-		Set result = new HashSet();
+		Set<IAdaptable> result = new HashSet<IAdaptable>();
 		for (int i = 0; i < traversals.length; i++) {
 			ResourceTraversal traversal = traversals[i];
 			IResource[] resources = traversal.getResources();
@@ -62,7 +62,7 @@ public final class ResourceModelProvider extends ModelProvider {
 		}
 		ResourceMapping[] mappings = new ResourceMapping[result.size()];
 		int i = 0;
-		for (Iterator iter = result.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter = result.iterator(); iter.hasNext();) {
 			Object element = iter.next();
 			if (element instanceof IResource) {
 				mappings[i++] = new SimpleResourceMapping((IResource) element);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/refresh/win32/Win32Monitor.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/refresh/win32/Win32Monitor.java
index 7359ec8..3cd481f 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/refresh/win32/Win32Monitor.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/refresh/win32/Win32Monitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2002, 2007 IBM Corporation and others.
+ * Copyright (c) 2002, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.resources.refresh.win32;
 
@@ -202,7 +203,7 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 	}
 
 	protected class LinkedResourceHandle extends ChainedHandle {
-		private List fileHandleChain;
+		private List<FileHandle> fileHandleChain;
 		private IResource resource;
 
 		/**
@@ -214,7 +215,7 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 		}
 
 		protected void createFileHandleChain() {
-			fileHandleChain = new ArrayList(1);
+			fileHandleChain = new ArrayList<FileHandle>(1);
 			File file = new File(resource.getLocation().toOSString());
 			file = file.getParentFile();
 			while (file != null) {
@@ -223,17 +224,17 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 			}
 			int size = fileHandleChain.size();
 			for (int i = 0; i < size; i++) {
-				ChainedHandle handle = (ChainedHandle) fileHandleChain.get(i);
-				handle.setPrevious((i > 0) ? (ChainedHandle) fileHandleChain.get(i - 1) : null);
-				handle.setNext((i + 1 < size) ? (ChainedHandle) fileHandleChain.get(i + 1) : this);
+				ChainedHandle handle = fileHandleChain.get(i);
+				handle.setPrevious((i > 0) ? fileHandleChain.get(i - 1) : null);
+				handle.setNext((i + 1 < size) ? fileHandleChain.get(i + 1) : this);
 			}
-			setPrevious((size > 0) ? (ChainedHandle) fileHandleChain.get(size - 1) : null);
+			setPrevious((size > 0) ? fileHandleChain.get(size - 1) : null);
 		}
 
 		public void destroy() {
 			super.destroy();
-			for (Iterator i = fileHandleChain.iterator(); i.hasNext();) {
-				Handle handle = (Handle) i.next();
+			for (Iterator<FileHandle> i = fileHandleChain.iterator(); i.hasNext();) {
+				Handle handle = i.next();
 				handle.destroy();
 			}
 		}
@@ -308,11 +309,11 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 	 * Mapping of handles (java.lang.Long) to absolute paths
 	 * (java.lang.String).
 	 */
-	protected Map fHandleValueToHandle;
+	protected Map<Long, Handle> fHandleValueToHandle;
 	protected IRefreshResult refreshResult;
 
 	/*
-	 * Creates a new monitor. @param result A result that will recieve refresh
+	 * Creates a new monitor. @param result A result that will receive refresh
 	 * callbacks and error notifications
 	 */
 	public Win32Monitor(IRefreshResult result) {
@@ -320,7 +321,7 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 		this.refreshResult = result;
 		setPriority(Job.DECORATE);
 		setSystem(true);
-		fHandleValueToHandle = new HashMap(1);
+		fHandleValueToHandle = new HashMap<Long, Handle>(1);
 		setHandleValueArrays(createHandleArrays());
 	}
 
@@ -373,22 +374,22 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 	 * more than a certain number of objects, we are forced to split the array
 	 * of objects to monitor and monitor each one individually. <p> This method
 	 * splits the list of handles into arrays no larger than
-	 * Win32Natives.MAXIMUM_WAIT_OBJECTS. The arrays are balenced so that they
+	 * Win32Natives.MAXIMUM_WAIT_OBJECTS. The arrays are balanced so that they
 	 * differ in size by no more than one element.
 	 */
 	protected long[][] createHandleArrays() {
 		long[] handles;
 		// synchronized: in order to protect the map during iteration
 		synchronized (fHandleValueToHandle) {
-			Set keys = fHandleValueToHandle.keySet();
+			Set<Long> keys = fHandleValueToHandle.keySet();
 			int size = keys.size();
 			if (size == 0) {
 				return new long[0][0];
 			}
 			handles = new long[size];
 			int count = 0;
-			for (Iterator i = keys.iterator(); i.hasNext();) {
-				handles[count++] = ((Long) i.next()).longValue();
+			for (Iterator<Long> i = keys.iterator(); i.hasNext();) {
+				handles[count++] = i.next().longValue();
 			}
 		}
 		return balancedSplit(handles, Win32Natives.MAXIMUM_WAIT_OBJECTS);
@@ -400,8 +401,8 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 		}
 		// synchronized: in order to protect the map during iteration
 		synchronized (fHandleValueToHandle) {
-			for (Iterator i = fHandleValueToHandle.values().iterator(); i.hasNext();) {
-				Handle handle = (Handle) i.next();
+			for (Iterator<Handle> i = fHandleValueToHandle.values().iterator(); i.hasNext();) {
+				Handle handle = i.next();
 				if (handle instanceof ResourceHandle) {
 					ResourceHandle resourceHandle = (ResourceHandle) handle;
 					if (resourceHandle.getResource().equals(resource)) {
@@ -456,7 +457,7 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 	 *                  a handle, not <code>null</code>
 	 */
 	protected void removeHandle(Handle handle) {
-		List handles = new ArrayList(1);
+		List<Handle> handles = new ArrayList<Handle>(1);
 		handles.add(handle);
 		removeHandles(handles);
 	}
@@ -470,11 +471,11 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 	 * @param handles
 	 *                  a collection of handles, not <code>null</code>
 	 */
-	private void removeHandles(Collection handles) {
+	private void removeHandles(Collection<Handle> handles) {
 		// synchronized: protect the array, removal must be atomic
 		synchronized (this) {
-			for (Iterator i = handles.iterator(); i.hasNext();) {
-				Handle handle = (Handle) i.next();
+			for (Iterator<Handle> i = handles.iterator(); i.hasNext();) {
+				Handle handle = i.next();
 				fHandleValueToHandle.remove(new Long(handle.getHandleValue()));
 				handle.destroy();
 			}
@@ -544,7 +545,7 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 		if (resource == null) {
 			// resource == null means stop monitoring all resources
 			synchronized (fHandleValueToHandle) {
-				removeHandles(new ArrayList(fHandleValueToHandle.values()));
+				removeHandles(new ArrayList<Handle>(fHandleValueToHandle.values()));
 			}
 		} else {
 			Handle handle = getHandle(resource);
@@ -582,7 +583,7 @@ class Win32Monitor extends Job implements IRefreshMonitor {
 		// a change occurred
 		// WaitForMultipleObjects returns WAIT_OBJECT_0 + index
 		index -= Win32Natives.WAIT_OBJECT_0;
-		Handle handle = (Handle) fHandleValueToHandle.get(new Long(handleValues[index]));
+		Handle handle = fHandleValueToHandle.get(new Long(handleValues[index]));
 		if (handle != null)
 			handle.handleNotification();
 	}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ArrayIterator.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ArrayIterator.java
index 3499dfb..804c531 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ArrayIterator.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ArrayIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.utils;
 
@@ -16,22 +17,22 @@ import java.util.NoSuchElementException;
 /**
  * An object that iterates over the elements of an array
  */
-public class ArrayIterator implements Iterator {
-	Object[] elements;
+public class ArrayIterator<T> implements Iterator<T> {
+	T[] elements;
 	int index;
 	int lastElement;
 
 	/**
 	 * Returns new array enumeration over the given object array
 	 */
-	public ArrayIterator(Object[] elements) {
+	public ArrayIterator(T[] elements) {
 		this(elements, 0, elements.length - 1);
 	}
 
 	/**
 	 * Returns new array enumeration over the given object array
 	 */
-	public ArrayIterator(Object[] elements, int firstElement, int lastElement) {
+	public ArrayIterator(T[] elements, int firstElement, int lastElement) {
 		super();
 		this.elements = elements;
 		index = firstElement;
@@ -49,7 +50,7 @@ public class ArrayIterator implements Iterator {
 	 * Returns the next element of this enumeration.
 	 * @exception  NoSuchElementException  if no more elements exist.
 	 */
-	public Object next() throws NoSuchElementException {
+	public T next() throws NoSuchElementException {
 		if (!hasNext())
 			throw new NoSuchElementException();
 		return elements[index++];
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/FileUtil.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/FileUtil.java
index 7e86b58..a30e65c 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/FileUtil.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/FileUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  * Martin Oberhuber (Wind River) - [44107] Add symbolic links to ResourceAttributes API
+ * James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.utils;
 
@@ -44,6 +45,13 @@ public class FileUtil {
 		fileInfo.setAttribute(EFS.ATTRIBUTE_EXECUTABLE, attributes.isExecutable());
 		fileInfo.setAttribute(EFS.ATTRIBUTE_ARCHIVE, attributes.isArchive());
 		fileInfo.setAttribute(EFS.ATTRIBUTE_HIDDEN, attributes.isHidden());
+		fileInfo.setAttribute(EFS.ATTRIBUTE_SYMLINK, attributes.isSymbolicLink());
+		fileInfo.setAttribute(EFS.ATTRIBUTE_GROUP_READ, attributes.isSet(EFS.ATTRIBUTE_GROUP_READ));
+		fileInfo.setAttribute(EFS.ATTRIBUTE_GROUP_WRITE, attributes.isSet(EFS.ATTRIBUTE_GROUP_WRITE));
+		fileInfo.setAttribute(EFS.ATTRIBUTE_GROUP_EXECUTE, attributes.isSet(EFS.ATTRIBUTE_GROUP_EXECUTE));
+		fileInfo.setAttribute(EFS.ATTRIBUTE_OTHER_READ, attributes.isSet(EFS.ATTRIBUTE_OTHER_READ));
+		fileInfo.setAttribute(EFS.ATTRIBUTE_OTHER_WRITE, attributes.isSet(EFS.ATTRIBUTE_OTHER_WRITE));
+		fileInfo.setAttribute(EFS.ATTRIBUTE_OTHER_EXECUTE, attributes.isSet(EFS.ATTRIBUTE_OTHER_EXECUTE));
 		return fileInfo;
 	}
 
@@ -144,6 +152,12 @@ public class FileUtil {
 		attributes.setExecutable(fileInfo.getAttribute(EFS.ATTRIBUTE_EXECUTABLE));
 		attributes.setHidden(fileInfo.getAttribute(EFS.ATTRIBUTE_HIDDEN));
 		attributes.setSymbolicLink(fileInfo.getAttribute(EFS.ATTRIBUTE_SYMLINK));
+		attributes.set(EFS.ATTRIBUTE_GROUP_READ, fileInfo.getAttribute(EFS.ATTRIBUTE_GROUP_READ));
+		attributes.set(EFS.ATTRIBUTE_GROUP_WRITE, fileInfo.getAttribute(EFS.ATTRIBUTE_GROUP_WRITE));
+		attributes.set(EFS.ATTRIBUTE_GROUP_EXECUTE, fileInfo.getAttribute(EFS.ATTRIBUTE_GROUP_EXECUTE));
+		attributes.set(EFS.ATTRIBUTE_OTHER_READ, fileInfo.getAttribute(EFS.ATTRIBUTE_OTHER_READ));
+		attributes.set(EFS.ATTRIBUTE_OTHER_WRITE, fileInfo.getAttribute(EFS.ATTRIBUTE_OTHER_WRITE));
+		attributes.set(EFS.ATTRIBUTE_OTHER_EXECUTE, fileInfo.getAttribute(EFS.ATTRIBUTE_OTHER_EXECUTE));
 		return attributes;
 	}
 
@@ -175,25 +189,25 @@ public class FileUtil {
 	 * Closes a stream and ignores any resulting exception. This is useful
 	 * when doing stream cleanup in a finally block where secondary exceptions
 	 * are not worth logging.
+	 *
+	 *<p>
+	 * <strong>WARNING:</strong>
+	 * If the API contract requires notifying clients of I/O problems, then you <strong>must</strong>
+	 * explicitly close() output streams outside of safeClose().
+	 * Some OutputStreams will defer an IOException from write() to close().  So
+	 * while the writes may 'succeed', ignoring the IOExcpetion will result in silent
+	 * data loss.
+	 * </p>
+	 * <p>
+	 * This method should only be used as a fail-safe to ensure resources are not
+	 * leaked.
+	 * </p>
+	 * See also: https://bugs.eclipse.org/bugs/show_bug.cgi?id=332543
 	 */
-	public static void safeClose(InputStream in) {
-		try {
-			if (in != null)
-				in.close();
-		} catch (IOException e) {
-			//ignore
-		}
-	}
-
-	/**
-	 * Closes a stream and ignores any resulting exception. This is useful
-	 * when doing stream cleanup in a finally block where secondary exceptions
-	 * are not worth logging.
-	 */
-	public static void safeClose(OutputStream out) {
+	public static void safeClose(Closeable stream) {
 		try {
-			if (out != null)
-				out.close();
+			if (stream != null)
+				stream.close();
 		} catch (IOException e) {
 			//ignore
 		}
@@ -233,9 +247,12 @@ public class FileUtil {
 						String msg = NLS.bind(Messages.localstore_failedReadDuringWrite, path);
 						throw new ResourceException(IResourceStatus.FAILED_READ_LOCAL, new Path(path), msg, e);
 					}
-					if (bytesRead == -1)
-						break;
 					try {
+						if (bytesRead == -1) {
+							// Bug 332543 - ensure we don't ignore failures on close()
+							destination.close();
+							break;
+						}
 						destination.write(buffer, 0, bytesRead);
 					} catch (IOException e) {
 						String msg = NLS.bind(Messages.localstore_couldNotWrite, path);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.java
index bebaf65..6e1567c 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Messages.java
@@ -118,7 +118,6 @@ public class Messages extends NLS {
 	public static String preferences_removeNodeException;
 	public static String preferences_clearNodeException;
 	public static String preferences_saveProblems;
-	public static String preferences_setDerivedException;
 	public static String preferences_syncException;
 
 	public static String projRead_badArguments;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ObjectMap.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ObjectMap.java
index 2e2cdf1..d9743b9 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ObjectMap.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/ObjectMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.utils;
 
@@ -18,7 +19,8 @@ import java.util.*;
  * 
  * Implemented as a single array that alternates keys and values.
  */
-public class ObjectMap implements Map, IStringPoolParticipant {
+ at SuppressWarnings("unchecked")
+public class ObjectMap<K,V> implements Map<K,V>, IStringPoolParticipant {
 
 	// 8 attribute keys, 8 attribute values
 	protected static final int DEFAULT_SIZE = 16;
@@ -47,7 +49,7 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	 * populate it with the key/attribute pairs found in the map.
 	 * @param map The entries in the given map will be added to the new map.
 	 */
-	public ObjectMap(Map map) {
+	public ObjectMap(Map<? extends K, ? extends V> map) {
 		this(map.size());
 		putAll(map);
 	}
@@ -64,7 +66,7 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	 * @see java.lang.Object#clone()
 	 */
 	public Object clone() {
-		return new ObjectMap(this);
+		return new ObjectMap<K, V>(this);
 	}
 
 	/**
@@ -97,7 +99,7 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	 * in the Map interface.  The returned collection will not be bound to
 	 * this map and will not remain in sync with this map.
 	 */
-	public Set entrySet() {
+	public Set<Entry<K, V>> entrySet() {
 		return count == 0 ? Collections.EMPTY_SET : toHashMap().entrySet();
 	}
 
@@ -107,7 +109,7 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	public boolean equals(Object o) {
 		if (!(o instanceof Map))
 			return false;
-		Map other = (Map) o;
+		Map<Object, Object> other = (Map<Object, Object>) o;
 		//must be same size
 		if (count != other.size())
 			return false;
@@ -127,12 +129,12 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	/**
 	 * @see Map#get(java.lang.Object)
 	 */
-	public Object get(Object key) {
+	public V get(Object key) {
 		if (elements == null || count == 0)
 			return null;
 		for (int i = 0; i < elements.length; i = i + 2)
 			if (elements[i] != null && elements[i].equals(key))
-				return elements[i + 1];
+				return (V)elements[i + 1];
 		return null;
 	}
 
@@ -172,11 +174,11 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	 * in the Map interface.  The returned collection will not be bound to
 	 * this map and will not remain in sync with this map.
 	 */
-	public Set keySet() {
-		Set result = new HashSet(size());
+	public Set<K> keySet() {
+		Set<K> result = new HashSet<K>(size());
 		for (int i = 0; i < elements.length; i = i + 2) {
 			if (elements[i] != null) {
-				result.add(elements[i]);
+				result.add((K)elements[i]);
 			}
 		}
 		return result;
@@ -185,7 +187,7 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	/**
 	 * @see Map#put(java.lang.Object, java.lang.Object)
 	 */
-	public Object put(Object key, Object value) {
+	public V put(K key, V value) {
 		if (key == null)
 			throw new NullPointerException();
 		if (value == null)
@@ -208,7 +210,7 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 				if (elements[i].equals(key)) {
 					Object oldValue = elements[i + 1];
 					elements[i + 1] = value;
-					return oldValue;
+					return (V)oldValue;
 				}
 			} else if (emptyIndex == -1) {
 				// keep track of the first empty index
@@ -233,18 +235,15 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	/**
 	 * @see Map#putAll(java.util.Map)
 	 */
-	public void putAll(Map map) {
-		for (Iterator i = map.keySet().iterator(); i.hasNext();) {
-			Object key = i.next();
-			Object value = map.get(key);
-			put(key, value);
-		}
+	public void putAll(Map<? extends K, ? extends V> map) {
+		for (Map.Entry<? extends K, ? extends V> e : map.entrySet())
+			put(e.getKey(), e.getValue());
 	}
 
 	/**
 	 * @see Map#remove(java.lang.Object)
 	 */
-	public Object remove(Object key) {
+	public V remove(Object key) {
 		if (elements == null || count == 0)
 			return null;
 		for (int i = 0; i < elements.length; i = i + 2) {
@@ -253,7 +252,7 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 				Object result = elements[i + 1];
 				elements[i + 1] = null;
 				count--;
-				return result;
+				return (V)result;
 			}
 		}
 		return null;
@@ -286,11 +285,11 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	/**
 	 * Creates a new hash map with the same contents as this map.
 	 */
-	private HashMap toHashMap() {
-		HashMap result = new HashMap(size());
+	private HashMap<K,V> toHashMap() {
+		HashMap<K,V> result = new HashMap<K,V>(size());
 		for (int i = 0; i < elements.length; i = i + 2) {
 			if (elements[i] != null) {
-				result.put(elements[i], elements[i + 1]);
+				result.put((K)elements[i], (V)elements[i + 1]);
 			}
 		}
 		return result;
@@ -302,11 +301,11 @@ public class ObjectMap implements Map, IStringPoolParticipant {
 	 * in the Map interface.  The returned collection will not be bound to
 	 * this map and will not remain in sync with this map.
 	 */
-	public Collection values() {
-		Set result = new HashSet(size());
+	public Collection<V> values() {
+		Set<V> result = new HashSet<V>(size());
 		for (int i = 1; i < elements.length; i = i + 2) {
 			if (elements[i] != null) {
-				result.add(elements[i]);
+				result.add((V)elements[i]);
 			}
 		}
 		return result;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Queue.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Queue.java
index 481c7fc..fc62c5e 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Queue.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/Queue.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.utils;
 
@@ -16,7 +17,8 @@ import java.util.Iterator;
 /**
  * A Queue of objects.
  */
-public class Queue {
+ at SuppressWarnings("unchecked")
+public class Queue<T> {
 	protected Object[] elements;
 	protected int head;
 	protected int tail;
@@ -40,7 +42,7 @@ public class Queue {
 		this.reuse = reuse;
 	}
 
-	public void add(Object element) {
+	public void add(T element) {
 		int newTail = increment(tail);
 		if (newTail == head) {
 			grow();
@@ -58,11 +60,12 @@ public class Queue {
 		return (index == 0) ? (elements.length - 1) : index - 1;
 	}
 
-	public Object elementAt(int index) {
-		return elements[index];
+	public T elementAt(int index) {
+		return (T)elements[index];
 	}
 
-	public Iterator iterator() {
+	@SuppressWarnings("rawtypes")
+	public Iterator<T> iterator() {
 		/**/
 		if (isEmpty())
 			return Collections.EMPTY_LIST.iterator();
@@ -85,11 +88,11 @@ public class Queue {
 	 * been processed and removed from the queue.  Returns null if there
 	 * are no available objects.
 	 */
-	public Object getNextAvailableObject() {
+	public T getNextAvailableObject() {
 		int index = tail;
 		while (index != head) {
 			if (elements[index] != null) {
-				Object result = elements[index];
+				T result = (T)elements[index];
 				elements[index] = null;
 				return result;
 			}
@@ -120,7 +123,7 @@ public class Queue {
 		return (index == (elements.length - 1)) ? 0 : index + 1;
 	}
 
-	public int indexOf(Object target) {
+	public int indexOf(T target) {
 		if (tail >= head) {
 			for (int i = head; i < tail; i++)
 				if (target.equals(elements[i]))
@@ -140,26 +143,26 @@ public class Queue {
 		return tail == head;
 	}
 
-	public Object peek() {
-		return elements[head];
+	public T peek() {
+		return (T)elements[head];
 	}
 
-	public Object peekTail() {
-		return elements[decrement(tail)];
+	public T peekTail() {
+		return (T)elements[decrement(tail)];
 	}
 
-	public Object remove() {
+	public T remove() {
 		if (isEmpty())
 			return null;
-		Object result = peek();
+		T result = peek();
 		if (!reuse)
 			elements[head] = null;
 		head = increment(head);
 		return result;
 	}
 
-	public Object removeTail() {
-		Object result = peekTail();
+	public T removeTail() {
+		T result = peekTail();
 		tail = decrement(tail);
 		if (!reuse)
 			elements[tail] = null;
@@ -179,7 +182,7 @@ public class Queue {
 		sb.append('[');
 		int count = 0;
 		if (!isEmpty()) {
-			Iterator it = iterator();
+			Iterator<T> it = iterator();
 			//only print a fixed number of elements to prevent debugger from choking
 			while (count < 100) {
 				sb.append(it.next());
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPool.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPool.java
index c19907a..b696d02 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPool.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPool.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.utils;
 
@@ -26,7 +27,7 @@ import java.util.HashMap;
  */
 public final class StringPool {
 	private int savings;
-	private final HashMap map = new HashMap();
+	private final HashMap<String, String> map = new HashMap<String, String>();
 
 	/**
 	 * Creates a new string pool.
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPoolJob.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPoolJob.java
index c22e4bb..1dac00e 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPoolJob.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/StringPoolJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.utils;
 
@@ -27,7 +28,7 @@ public class StringPoolJob extends Job {
 	 * Stores all registered string pool participants, along with the scheduling
 	 * rule required when running it.
 	 */
-	private Map participants = Collections.synchronizedMap(new HashMap(10));
+	private Map<IStringPoolParticipant, ISchedulingRule> participants = Collections.synchronizedMap(new HashMap<IStringPoolParticipant, ISchedulingRule>(10));
 
 	private final Bundle systemBundle = Platform.getBundle("org.eclipse.osgi"); //$NON-NLS-1$
 
@@ -84,12 +85,13 @@ public class StringPoolJob extends Job {
 			return Status.OK_STATUS;
 
 		//copy current participants to handle concurrent additions and removals to map
-		Map.Entry[] entries = (Map.Entry[]) participants.entrySet().toArray(new Map.Entry[0]);
+		@SuppressWarnings("unchecked")
+		Map.Entry<IStringPoolParticipant, ISchedulingRule>[] entries = participants.entrySet().toArray(new Map.Entry[participants.size()]);
 		ISchedulingRule[] rules = new ISchedulingRule[entries.length];
 		IStringPoolParticipant[] toRun = new IStringPoolParticipant[entries.length];
 		for (int i = 0; i < toRun.length; i++) {
-			toRun[i] = (IStringPoolParticipant) entries[i].getKey();
-			rules[i] = (ISchedulingRule) entries[i].getValue();
+			toRun[i] = entries[i].getKey();
+			rules[i] = entries[i].getValue();
 		}
 		final ISchedulingRule rule = MultiRule.combine(rules);
 		long start = -1;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/messages.properties b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/messages.properties
index dfd539f..2057328 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/messages.properties
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/utils/messages.properties
@@ -115,7 +115,6 @@ preferences_operationCanceled=Operation canceled.
 preferences_removeNodeException=Exception while removing preference node: {0}.
 preferences_clearNodeException=Exception while clearing preference node: {0}.
 preferences_saveProblems=Exception occurred while saving project preferences: {0}.
-preferences_setDerivedException=Exception occurred while setting derived flag for project derived preferences: {0}.
 preferences_syncException=Exception occurred while synchronizing node: {0}.
 
 projRead_badLinkName = Names ''{0}'' and ''{1}'' detected for a single link.  Using ''{0}''.
@@ -225,7 +224,7 @@ resources_mustBeLocal = Resource ''{0}'' is not local.
 resources_mustBeOpen = Resource ''{0}'' is not open.
 resources_mustExist = Resource ''{0}'' does not exist.
 resources_mustNotExist = Resource ''{0}'' already exists.
-resources_nameEmpty = Names cannot be empty.
+resources_nameEmpty = Name cannot be empty.
 resources_nameNull = Name must not be null.
 resources_natureClass = Missing project nature class for ''{0}''.
 resources_natureDeconfig = Error deconfiguring nature: {0}.
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTree.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTree.java
index 7d482e0..f3979c7 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTree.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.watson;
 
@@ -266,7 +267,7 @@ public class ElementTree {
 	public static int findOldest(ElementTree[] trees) {
 
 		/* first put all the trees in a hashtable */
-		HashMap candidates = new HashMap((int) (trees.length * 1.5 + 1));
+		HashMap<ElementTree, ElementTree> candidates = new HashMap<ElementTree, ElementTree>((int) (trees.length * 1.5 + 1));
 		for (int i = 0; i < trees.length; i++) {
 			candidates.put(trees[i], trees[i]);
 		}
@@ -275,7 +276,7 @@ public class ElementTree {
 		ElementTree oldestSoFar = null;
 		while (candidates.size() > 0) {
 			/* get a new candidate */
-			ElementTree current = (ElementTree) candidates.values().iterator().next();
+			ElementTree current = candidates.values().iterator().next();
 
 			/* remove this candidate from the table */
 			candidates.remove(current);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeWriter.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeWriter.java
index 0a4992e..add35cc 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeWriter.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/internal/watson/ElementTreeWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.internal.watson;
 
@@ -86,11 +87,11 @@ public class ElementTreeWriter {
 		int[] order = new int[numTrees];
 
 		/* first build a table of ElementTree -> Vector of Integers(indices in trees array) */
-		HashMap table = new HashMap(numTrees * 2 + 1);
+		HashMap<ElementTree, List<Integer>> table = new HashMap<ElementTree, List<Integer>>(numTrees * 2 + 1);
 		for (int i = 0; i < trees.length; i++) {
-			List indices = (List) table.get(trees[i]);
+			List<Integer> indices = table.get(trees[i]);
 			if (indices == null) {
-				indices = new ArrayList();
+				indices = new ArrayList<Integer>();
 				table.put(trees[i], indices);
 			}
 			indices.add(new Integer(i));
@@ -106,9 +107,9 @@ public class ElementTreeWriter {
 		int i = numTrees - 1;
 		while (i >= 0) {
 			/* add all instances of the current oldest tree to the sorted list */
-			List indices = (List) table.remove(oldest);
-			for (Enumeration e = Collections.enumeration(indices); e.hasMoreElements();) {
-				Integer next = (Integer) e.nextElement();
+			List<Integer> indices = table.remove(oldest);
+			for (Enumeration<Integer> e = Collections.enumeration(indices); e.hasMoreElements();) {
+				Integer next = e.nextElement();
 				sorted[i] = oldest;
 				order[i] = next.intValue();
 				i--;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IBuildConfiguration.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IBuildConfiguration.java
new file mode 100644
index 0000000..fceba3d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IBuildConfiguration.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Broadcom Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Broadcom Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.resources;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * Build Configurations provide a mechanism for orthogonal configuration specific
+ * builds within a single project.  The resources plugin maintains build deltas per
+ * interested builder, per configuration, and allow build configurations to reference
+ * each other.
+ *<p>
+ * All projects have at least one build configuration.  By default this
+ * has name {@link #DEFAULT_CONFIG_NAME}.  One configuration in the project is defined 
+ * to be 'active'. The active configuration is built by default.  If unset, the
+ * active configuration defaults to the first configuration in the project.
+ *</p>
+ *<p>
+ * Build configurations are created and set on the project description using:
+ * {@link IProjectDescription#setBuildConfigs(String[])}.
+ * Build configurations set on Projects must have unique non-null names.
+ *</p>
+ *<p>
+ * When a project is built, a specific configuration is built. This configuration
+ * is passed to the builders so they can adapt their behavior
+ * appropriately. Builders which don't care about configurations may ignore this,
+ * and work as before.
+ *</p>
+ *<p>
+ * Build configuration can reference other builds configurations.  These references are created 
+ * using {@link IWorkspace#newBuildConfig(String, String)}, and set on the referencing project
+ * with {@link IProjectDescription#setBuildConfigReferences(String, IBuildConfiguration[])}.
+ * A referenced build configuration may have a <code>null</code> configuration name which is resolved to the 
+ * referenced project's current active build configuration at build time.
+ *</p>
+ *<p> 
+ * Workspace build will ensure that the projects are built in an appropriate order as defined
+ * by the reference graph.
+ *</p>
+ *
+ * @see IWorkspace#newBuildConfig(String, String)
+ * @see IProjectDescription#setActiveBuildConfig(String)
+ * @see IProjectDescription#setBuildConfigs(String[])
+ * @see IProjectDescription#setBuildConfigReferences(String, IBuildConfiguration[])
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ * @since 3.7
+ */
+public interface IBuildConfiguration extends IAdaptable {
+
+	/**
+	 * The Id of the default build configuration
+	 */
+	public static final String DEFAULT_CONFIG_NAME = ""; //$NON-NLS-1$
+
+	/**
+	 * @return the project that the config is for; never null.
+	 */
+	public IProject getProject();
+
+	/**
+	 * Returns the human readable name of this build configuration.  If this
+	 * {@link IBuildConfiguration} is set on a Project, this can never be null.  
+	 * <p>
+	 * If this IBuildConfiguration is being used as a reference to a build configuration
+	 * in another project, this may be null.  Such build configuration references are
+	 * resolved to the current active configuration at build time.
+	 * </p>
+	 * @return the name of the configuration; or null if this is a reference to the active
+	 * configuration
+	 */
+	public String getName();
+
+}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IBuildContext.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IBuildContext.java
new file mode 100644
index 0000000..b126ebf
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IBuildContext.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Broadcom Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Broadcom Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.resources;
+
+/**
+ * Stores information about the context in which a builder was called.
+ * 
+ * <p>
+ * This can be interrogated by a builder to determine what's been built
+ * before, and what's being built after it, for this particular build
+ * invocation.
+ * </p>
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ *
+ * @since 3.7
+ */
+public interface IBuildContext {
+
+	/**
+	 * Gets a array of build configurations that were built before this build configuration,
+	 * as part of the current top-level build invocation.
+	 *
+	 * @return an array of all referenced build configurations that have been built
+	 * in the current build; never null.
+	 */
+	public IBuildConfiguration[] getAllReferencedBuildConfigs();
+
+	/**
+	 * Gets a array of build configurations that will be built after this build configuration,
+	 * as part of the current top-level build invocation.
+	 * <p>
+	 * If the array is empty, this configuration is the last in the build chain.
+	 * </p>
+	 *
+	 * @return an array of all referencing build configurations that will be built
+	 * in the current build; never null.
+	 */
+	public IBuildConfiguration[] getAllReferencingBuildConfigs();
+
+	/**
+	 * Returns the full array of configurations that were requested to be built
+	 * by the API user.  These configurations may be anywhere in the build
+	 * order (depending on how the build graph has been flattened).
+ 	 * <p>
+ 	 * This array won't include any build configurations being built by virtue 
+ 	 * of being referenced from a requested build configuration.
+	 * </p>
+	 * May return the empty array if this is a top-level workspace build.
+	 *
+	 * @return an array of configurations that were requested to be built.
+	 */
+	public IBuildConfiguration[] getRequestedConfigs();
+}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ICommand.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ICommand.java
index 9b98dd7..17f29e4 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ICommand.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ICommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ public interface ICommand {
 	 *		value type : <code>String</code>), or <code>null</code>
 	 * @see #setArguments(Map)
 	 */
-	public Map getArguments();
+	public Map<String,String> getArguments();
 
 	/**
 	 * Returns the name of the builder to run for this command, or
@@ -94,7 +94,7 @@ public interface ICommand {
 	 *   both be of type <code>String</code>), or <code>null</code>
 	 * @see #getArguments()
 	 */
-	public void setArguments(Map args);
+	public void setArguments(Map<String,String> args);
 
 	/**
 	 * Sets the name of the builder to run for this command.
@@ -117,8 +117,23 @@ public interface ICommand {
 	 * </p><p>
 	 * This method has no effect if this build command does not allow its
 	 * build kinds to be configured.
-	 * </p>
-	 * 
+	 * </p><p>
+	 * <strong>Note:</strong> 
+	 * <ul>
+	 * <li>A request for INCREMENTAL_BUILD or AUTO_BUILD will result in the builder being called with the FULL_BUILD
+	 * kind, if there is no previous delta (e.g. after a clean build).
+	 * </li><li>
+	 * If INCREMENTAL_BUILD (or AUTO_BUILD) is promoted to FULL_BUILD, the builder will be called,
+	 * if the command responds to INCREMENTAL_BUILD (or AUTO_BUILD).
+	 * </li><li>
+	 * If INCREMENTAL_BUILD is promoted to FULL_BUILD, the builder will be called,
+	 * if the command responds to FULL_BUILD. 
+	 * </li><li>
+	 * If AUTO_BUILD is promoted to FULL_BUILD, the builder will be called,
+	 * <strong>only if</strong> the command responds to AUTO_BUILD.
+	 * </li>
+	 * </ul>
+	 *
 	 * @param kind One of the <tt>*_BUILD</code> constants defined
 	 * 		on <code>IncrementalProjectBuilder</code>
 	 * @param value <code>true</code> if this build command responds to the 
@@ -127,6 +142,10 @@ public interface ICommand {
 	 * @see #isConfigurable()
 	 * @see IWorkspace#build(int, IProgressMonitor)
 	 * @see IProject#build(int, IProgressMonitor)
+	 * @see IncrementalProjectBuilder#FULL_BUILD
+	 * @see IncrementalProjectBuilder#INCREMENTAL_BUILD
+	 * @see IncrementalProjectBuilder#AUTO_BUILD
+	 * @see IncrementalProjectBuilder#CLEAN_BUILD
 	 * @since 3.1
 	 */
 	public void setBuilding(int kind, boolean value);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IContainer.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IContainer.java
index f221679..cbf731a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IContainer.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IContainer.java
@@ -88,63 +88,87 @@ public interface IContainer extends IResource, IAdaptable {
 	public boolean exists(IPath path);
 
 	/**
-	 * Finds and returns the member resource (project, folder, or file)
-	 * with the given name in this container, or <code>null</code> if no such
-	 * resource exists.
-	 * 
-	 * <p> N.B. Unlike the methods which traffic strictly in resource
+	 * Finds and returns the member resource identified by the given path in
+	 * this container, or <code>null</code> if no such resource exists.
+	 * The supplied path may be absolute or relative; in either case, it is
+	 * interpreted as relative to this resource. Trailing separators and the path's
+	 * device are ignored. If the path is empty this container is returned. Parent
+	 * references in the supplied path are discarded if they go above the workspace
+	 * root.
+	 * <p>
+	 * Note that no attempt is made to exclude team-private member resources
+	 * as with <code>members</code>.
+	 * </p><p>
+	 * N.B. Unlike the methods which traffic strictly in resource
 	 * handles, this method infers the resulting resource's type from the
 	 * resource existing at the calculated path in the workspace.
+	 * </p><p>
+	 * Note that <code>path</code> contains a relative path to the resource
+	 * and all path special characters will be interpreted. Passing an empty string
+	 * will result in returning this {@link IContainer} itself.
 	 * </p>
 	 *
-	 * @param name the string name of the member resource
+	 * @param path the relative path to the member resource, must be a valid path or path segment
 	 * @return the member resource, or <code>null</code> if no such
 	 * 		resource exists
+	 * @see #members()
+	 * @see IPath#isValidPath(String)
+	 * @see IPath#isValidSegment(String)
 	 */
-	public IResource findMember(String name);
+	public IResource findMember(String path);
 
 	/**
-	 * Finds and returns the member resource (project, folder, or file)
-	 * with the given name in this container, or <code>null</code> if 
-	 * there is no such resource.
+	 * Finds and returns the member resource identified by the given path in
+	 * this container, or <code>null</code> if no such resource exists.
+	 * The supplied path may be absolute or relative; in either case, it is
+	 * interpreted as relative to this resource. Trailing separators and the path's
+	 * device are ignored. If the path is empty this container is returned. Parent
+	 * references in the supplied path are discarded if they go above the workspace
+	 * root.
 	 * <p>
 	 * If the <code>includePhantoms</code> argument is <code>false</code>, 
-	 * only a member resource with the given name that exists will be returned.
+	 * only a member resource with the given path that exists will be returned.
 	 * If the <code>includePhantoms</code> argument is <code>true</code>,
 	 * the method also returns a resource if the workspace is keeping track of a
-	 * phantom with that name.
+	 * phantom with that path.
 	 * </p><p>
 	 * Note that no attempt is made to exclude team-private member resources
 	 * as with <code>members</code>.
 	 * </p><p>
 	 * N.B. Unlike the methods which traffic strictly in resource
 	 * handles, this method infers the resulting resource's type from the
-	 * existing resource (or phantom) in the workspace.
+	 * resource (or phantom) existing at the calculated path in the workspace.
+	 * </p><p>
+	 * Note that <code>path</code> contains a relative path to the resource
+	 * and all path special characters will be interpreted. Passing an empty string
+	 * will result in returning this {@link IContainer} itself.
 	 * </p>
 	 *
-	 * @param name the string name of the member resource
+	 * @param path the relative path to the member resource, must be a valid path or path segment
 	 * @param includePhantoms <code>true</code> if phantom resources are
 	 *   of interest; <code>false</code> if phantom resources are not of
 	 *   interest
 	 * @return the member resource, or <code>null</code> if no such
 	 * 		resource exists
-	 * @see #members()
+	 * @see #members(boolean)
 	 * @see IResource#isPhantom()
+	 * @see IPath#isValidPath(String)
+	 * @see IPath#isValidSegment(String)
 	 */
-	public IResource findMember(String name, boolean includePhantoms);
+	public IResource findMember(String path, boolean includePhantoms);
 
 	/**
 	 * Finds and returns the member resource identified by the given path in
 	 * this container, or <code>null</code> if no such resource exists.
 	 * The supplied path may be absolute or relative; in either case, it is
-	 * interpreted as relative to this resource.   Trailing separators and the path's
-	 * device are ignored. If the path is empty this container is returned.  Parent
+	 * interpreted as relative to this resource. Trailing separators and the path's
+	 * device are ignored. If the path is empty this container is returned. Parent
 	 * references in the supplied path are discarded if they go above the workspace
 	 * root.
 	 * <p>
 	 * Note that no attempt is made to exclude team-private member resources
 	 * as with <code>members</code>.
-	 * </p><p> 
+	 * </p><p>
 	 * N.B. Unlike the methods which traffic strictly in resource
 	 * handles, this method infers the resulting resource's type from the
 	 * resource existing at the calculated path in the workspace.
@@ -158,25 +182,25 @@ public interface IContainer extends IResource, IAdaptable {
 
 	/**
 	 * Finds and returns the member resource identified by the given path in
-	 * this container, or <code>null</code> if there is no such resource.
+	 * this container, or <code>null</code> if no such resource exists.
 	 * The supplied path may be absolute or relative; in either case, it is
-	 * interpreted as relative to this resource.  Trailing separators and the path's
-	 * device are ignored.  If the path is empty this container is returned.
-	 * Parent references in the supplied path are discarded if they go above the 
-	 * workspace root.
+	 * interpreted as relative to this resource. Trailing separators and the path's
+	 * device are ignored. If the path is empty this container is returned. Parent
+	 * references in the supplied path are discarded if they go above the workspace
+	 * root.
 	 * <p>
 	 * If the <code>includePhantoms</code> argument is <code>false</code>, 
-	 * only a resource that exists at the given path will be returned.
+	 * only a member resource with the given path that exists will be returned.
 	 * If the <code>includePhantoms</code> argument is <code>true</code>,
-	 * the method also returns a resource if the workspace is keeping track of
-	 * a phantom member resource at the given path.
+	 * the method also returns a resource if the workspace is keeping track of a
+	 * phantom with that path.
 	 * </p><p>
 	 * Note that no attempt is made to exclude team-private member resources
 	 * as with <code>members</code>.
 	 * </p><p>
 	 * N.B. Unlike the methods which traffic strictly in resource
 	 * handles, this method infers the resulting resource's type from the
-	 * existing resource (or phantom) at the calculated path in the workspace.
+	 * resource (or phantom) existing at the calculated path in the workspace.
 	 * </p>
 	 *
 	 * @param path the path of the desired resource
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java
index ba0bea4..a83f217 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources;
 
@@ -669,7 +670,8 @@ public interface IFile extends IResource, IEncodedStorage, IAdaptable {
 	 * <li> This resource could not be read.</li>
 	 * <li> This resource is not local.</li>
 	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system.</li>
+	 *       in the local file system and {@link ResourcesPlugin#PREF_LIGHTWEIGHT_AUTO_REFRESH} is
+	 *       disabled.</li>
 	 * <li> The corresponding location in the local file system
 	 *       is occupied by a directory.</li>
 	 * </ul> 
@@ -681,8 +683,17 @@ public interface IFile extends IResource, IEncodedStorage, IAdaptable {
 
 	/**
 	 * Returns an open input stream on the contents of this file.
-	 * This refinement of the corresponding <code>IStorage</code> method 
-	 * returns an open input stream on the contents of this file.
+	 * <p>
+	 * This refinement of the corresponding {@link IStorage} method
+	 * is a convenience method returning an open input stream.  It's equivalent to:
+	 * <pre>
+	 *   getContents(RefreshManager#PREF_LIGHTWEIGHT_AUTO_REFRESH);
+	 * </pre>
+	 * </p>
+	 * <p>
+	 * If lightweight auto-refresh is not enabled this method will throw a CoreException
+	 * when opening out-of-sync resources.
+	 * </p>
 	 * The client is responsible for closing the stream when finished.
 	 *
 	 * @return an input stream containing the contents of the file
@@ -690,8 +701,10 @@ public interface IFile extends IResource, IEncodedStorage, IAdaptable {
 	 * <ul>
 	 * <li> This resource does not exist.</li>
 	 * <li> This resource is not local.</li>
+	 * <li> The file-system resource is not a file.</li>
 	 * <li> The workspace is not in sync with the corresponding location
-	 *       in the local file system.</li>
+	 *       in the local file system (and {@link ResourcesPlugin#PREF_LIGHTWEIGHT_AUTO_REFRESH} 
+	 *       is disabled).</li>
 	 * </ul>
 	 */
 	public InputStream getContents() throws CoreException;
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarker.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarker.java
index dbb538b..09adca6 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarker.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -366,7 +366,7 @@ public interface IMarker extends IAdaptable {
 	 * <li> This marker does not exist.</li>
 	 * </ul>
 	 */
-	public Map getAttributes() throws CoreException;
+	public Map<String,Object> getAttributes() throws CoreException;
 
 	/**
 	 * Returns the attributes with the given names.  The result is an an array 
@@ -573,5 +573,5 @@ public interface IMarker extends IAdaptable {
 	 * </ul>
 	 * @see IResourceRuleFactory#markerRule(IResource)
 	 */
-	public void setAttributes(Map attributes) throws CoreException;
+	public void setAttributes(Map<String, ? extends Object> attributes) throws CoreException;
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarkerDelta.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarkerDelta.java
index a0b0c46..071c823 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarkerDelta.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IMarkerDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -98,7 +98,7 @@ public interface IMarkerDelta {
 	 *		value type : <code>String</code>, <code>Integer</code>, or 
 	 *		<code>Boolean</code>) or <code>null</code>.
 	 */
-	public Map getAttributes();
+	public Map<String, Object> getAttributes();
 
 	/**
 	 * Returns the attributes with the given names.  The result is an array 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProject.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProject.java
index 870f6d7..d41dc69 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProject.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProject.java
@@ -8,9 +8,12 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  * Francis Lynch (Wind River) - [301563] Save and load tree snapshots
+ * Broadcom Corporation - build configurations and references
  *******************************************************************************/
 package org.eclipse.core.resources;
 
+import org.eclipse.core.runtime.CoreException;
+
 import java.net.URI;
 
 import java.util.Map;
@@ -30,7 +33,8 @@ import org.eclipse.core.runtime.content.IContentTypeMatcher;
  * <li>A project can carry session and persistent properties.</li>
  * <li>A project can be open or closed; a closed project is
  * 		passive and has a minimal in-memory footprint.</li>
- * <li>A project can carry references to other projects.</li>
+ * <li>A project can have one or more project build configurations.</li>
+ * <li>A project can carry references to other project build configurations.</li>
  * <li>A project can have one or more project natures.</li>
  * </ul>
  * </p>
@@ -57,7 +61,8 @@ public interface IProject extends IContainer, IAdaptable {
 	 * Invokes the <code>build</code> method of the specified builder 
 	 * for this project. Does nothing if this project is closed.  If this project
 	 * has multiple builders on its build spec matching the given name, only
-	 * the first matching builder will be run.
+	 * the first matching builder will be run. The build is run for the project's
+	 * active build configuration.
 	 * <p>
 	 * The builder name is declared in the extension that plugs in
 	 * to the standard <code>org.eclipse.core.resources.builders</code> 
@@ -99,13 +104,14 @@ public interface IProject extends IContainer, IAdaptable {
 	 * @see IncrementalProjectBuilder#CLEAN_BUILD
 	 * @see IResourceRuleFactory#buildRule()
 	 */
-	public void build(int kind, String builderName, Map args, IProgressMonitor monitor) throws CoreException;
+	public void build(int kind, String builderName, Map<String,String> args, IProgressMonitor monitor) throws CoreException;
 
 	/** 
 	 * Builds this project. Does nothing if the project is closed.
 	 * <p>
 	 * Building a project involves executing the commands found
-	 * in this project's build spec.
+	 * in this project's build spec. The build is run for the project's
+	 * active build configuration.
 	 * </p>
 	 * <p>
 	 * This method may change resources; these changes will be reported
@@ -139,6 +145,47 @@ public interface IProject extends IContainer, IAdaptable {
 	 */
 	public void build(int kind, IProgressMonitor monitor) throws CoreException;
 
+	/** 
+	 * Builds a specific build configuration of this project. Does nothing if the project is closed
+	 * or the build configuration does not exist.
+	 * <p>
+	 * Building a project involves executing the commands found
+	 * in this project's build spec. The build is run for the specific project
+	 * build configuration.
+	 * </p>
+	 * <p>
+	 * This method may change resources; these changes will be reported
+	 * in a subsequent resource change event.
+	 * </p>
+	 * <p>
+	 * This method is long-running; progress and cancellation are provided
+	 * by the given progress monitor.
+	 * </p>
+	 * @param config build configuration to build
+	 * @param kind the kind of build being requested. Valid values are:
+	 *		<ul>
+	 *		<li> <code>IncrementalProjectBuilder.FULL_BUILD</code> - indicates a full build.</li>
+	 *		<li> <code>IncrementalProjectBuilder.INCREMENTAL_BUILD</code> - indicates an incremental build.</li>
+	 * 		<li><code>CLEAN_BUILD</code>- indicates a clean request. Clean does
+	 * 		not actually build anything, but rather discards all problems and build states.
+	 *		</ul>
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *		reporting is not desired
+	 * @exception CoreException if the build fails.
+	 *		The status contained in the exception may be a generic <code>BUILD_FAILED</code>
+	 *		code, but it could also be any other status code; it might
+	 *		also be a multi-status.
+	 * @exception OperationCanceledException if the operation is canceled.
+	 * Cancelation can occur even if no progress monitor is provided.
+	 *
+	 * @see IProjectDescription
+	 * @see IncrementalProjectBuilder#FULL_BUILD
+	 * @see IncrementalProjectBuilder#INCREMENTAL_BUILD
+	 * @see IResourceRuleFactory#buildRule()
+	 * @since 3.7
+	 */
+	public void build(IBuildConfiguration config, int kind, IProgressMonitor monitor) throws CoreException;
+
 	/**
 	 * Closes this project.  The project need not be open.  Closing
 	 * a closed project does nothing.
@@ -189,8 +236,8 @@ public interface IProject extends IContainer, IAdaptable {
 	 * contain a project description file, a project description file is written
 	 * in the project content area with the natures, build spec, comment, and 
 	 * referenced projects as specified in the given project description.
-	 * If there is an existing project description file, it is not overwritten.  In either
-	 * case, this method does not cause natures to be configured.
+	 * If there is an existing project description file, it is not overwritten.
+	 * In either case, this method does <b>not</b> cause natures to be configured.
 	 * </p>
 	 * <p>
 	 * This method changes resources; these changes will be reported
@@ -287,8 +334,8 @@ public interface IProject extends IContainer, IAdaptable {
 	 * contain a project description file, a project description file is written
 	 * in the project content area with the natures, build spec, comment, and 
 	 * referenced projects as specified in the given project description.
-	 * If there is an existing project description file, it is not overwritten.  In either
-	 * case, this method does not cause natures to be configured.
+	 * If there is an existing project description file, it is not overwritten.
+	 * In either case, this method does <b>not</b> cause natures to be configured.
 	 * </p>
 	 * <p>
 	 * This method changes resources; these changes will be reported
@@ -375,6 +422,55 @@ public interface IProject extends IContainer, IAdaptable {
 	public void delete(boolean deleteContent, boolean force, IProgressMonitor monitor) throws CoreException;
 	
 	/**
+	 * Returns the active build configuration for the project.
+	 * <p>
+	 * If at any point the active configuration is removed from the project, for example
+	 * when updating the list of build configurations, the active build configuration will be set to
+	 * the first build configuration specified by {@link IProjectDescription#setBuildConfigs(String[])}.
+	 * <p>
+	 * If all of the build configurations are removed, the active build configuration will be set to the
+	 * default configuration.
+	 * </p>
+	 * @return the active build configuration
+	 * @exception CoreException if this method fails. Reasons include:
+	 * <ul>
+	 * <li> This project does not exist.</li>
+	 * <li> This project is not open.</li>
+	 * </ul>
+	 * @since 3.7
+	 */
+	public IBuildConfiguration getActiveBuildConfig() throws CoreException;
+
+	/**
+	 * Returns the project {@link IBuildConfiguration} with the given name for this project.
+	 * @param configName the name of the configuration to get
+	 * @return a project configuration
+	 * @exception CoreException if this method fails. Reasons include:
+	 * <ul>
+	 * <li> This project does not exist.</li>
+	 * <li> This project is not open.</li>
+	 * <li> The configuration does not exist in this project.</li>
+	 * </ul>
+	 * @see #getBuildConfigs()
+	 * @since 3.7
+	 */
+	public IBuildConfiguration getBuildConfig(String configName) throws CoreException;
+
+	/**
+	 * Returns the build configurations for this project. A project always has at
+	 * least one build configuration, so this will never return an empty list or null.
+	 * The result will not contain duplicates.
+	 * @return a list of project build configurations
+	 * @exception CoreException if this method fails. Reasons include:
+	 * <ul>
+	 * <li> This project does not exist.</li>
+	 * <li> This project is not open.</li>
+	 * </ul>
+	 * @since 3.7
+	 */
+	public IBuildConfiguration[] getBuildConfigs() throws CoreException;
+
+	/**
 	 * Returns this project's content type matcher. This content type matcher takes 
 	 * project specific preferences and nature-content type associations into 
 	 * account.
@@ -510,6 +606,7 @@ public interface IProject extends IContainer, IAdaptable {
 	 * <li> This project does not exist.</li>
 	 * <li> This project is not open.</li>
 	 * </ul>
+	 * @see #getReferencedBuildConfigs(String, boolean)
 	 * @see IProjectDescription#getReferencedProjects()
 	 * @see IProjectDescription#getDynamicReferences()
 	 */
@@ -524,6 +621,55 @@ public interface IProject extends IContainer, IAdaptable {
 	 */
 	public IProject[] getReferencingProjects();
 
+	/**
+	 * Returns the build configurations referenced by the passed in build configuration
+	 * on this project.
+	 * <p>
+	 * This includes both the static and dynamic project level references.  These are 
+	 * converted to build configurations pointing at the currently active referenced 
+	 * project configuration.
+	 * The result will not contain duplicates.
+	 * </p>
+	 * <p>
+	 * References to active configurations will be translated to references to actual
+	 * build configurations, if the project is accessible.  Note that if includeMissing
+	 * is true BuildConfigurations which can't be resolved (i.e. exist on missing projects,
+	 * or aren't listed on the referenced project) are still included in the  returned 
+	 * IBuildConfiguration array.
+	 * </p>
+	 * <p>
+	 * Returns an empty array if there are no references.
+	 * </p>
+	 *
+	 * @param configName the configuration to get the references for
+	 * @param includeMissing boolean controls whether unresolved buildConfiguration should 
+	 *        be included in the result
+	 * @return an array of project build configurations
+	 * @exception CoreException if this method fails. Reasons include:
+	 * <ul>
+	 * <li> This project does not exist.</li>
+	 * <li> This project is not open.</li>
+	 * <li> The build configuration does not exist in this project.</li>
+	 * </ul>
+	 * @see IProjectDescription#getBuildConfigReferences(String)
+	 * @since 3.7
+	 */
+	public IBuildConfiguration[] getReferencedBuildConfigs(String configName, boolean includeMissing) throws CoreException;
+
+	/**
+	 * Checks whether the project has the specified build configuration.
+	 *
+	 * @param configName the configuration
+	 * @return <code>true</code> if the project has the specified configuration, false otherwise
+	 * @exception CoreException if this method fails. Reasons include:
+	 * <ul>
+	 * <li> This project does not exist.</li>
+	 * <li> This project is not open.</li>
+	 * </ul>
+	 * @since 3.7
+	 */
+	public boolean hasBuildConfig(String configName) throws CoreException;
+
 	/** 
 	 * Returns whether the project nature specified by the given
 	 * nature extension id has been added to this project. 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProjectDescription.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProjectDescription.java
index cc2ca16..9ca06bd 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProjectDescription.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IProjectDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Broadcom Corporation - build configurations and references
  *******************************************************************************/
 package org.eclipse.core.resources;
 
@@ -34,6 +35,29 @@ public interface IProjectDescription {
 	public static final String DESCRIPTION_FILE_NAME = ".project"; //$NON-NLS-1$
 
 	/**
+	 * Returns the build configurations referenced by the specified configuration for the
+	 * described project. 
+	 * <p>
+	 * These references are persisted by the workspace in a private location outside the
+	 * project description file, and as such will not be shared when a project is exported
+	 * or persisted in a repository.  As such clients are always
+	 * responsible for setting these references when a project is created or recreated.
+	 * </p>
+	 * <p>
+	 * The referenced build configurations need not exist in the workspace.
+	 * The result will not contain duplicates. The order of the references is preserved
+	 * from the call to {@link #setBuildConfigReferences(String, IBuildConfiguration[])}.
+	 * Returns an empty array if the provided config doesn't dynamically reference 
+	 * any other build configurations, or the given config does not exist in this description.
+	 * </p>
+	 * @param configName the configuration in the described project to get the references for
+	 * @return a list of dynamic build configurations
+	 * @see #setBuildConfigReferences(String, IBuildConfiguration[])
+	 * @since 3.7
+	 */
+	public IBuildConfiguration[] getBuildConfigReferences(String configName);
+
+	/**
 	 * Returns the list of build commands to run when building the described project.
 	 * The commands are listed in the order in which they are to be run.
 	 *
@@ -62,6 +86,7 @@ public interface IProjectDescription {
 	 * contain duplicates. Returns an empty array if there are no dynamic project 
 	 * references on this description.
 	 *
+	 * @see #getBuildConfigReferences(String)
 	 * @see #getReferencedProjects()
 	 * @see #setDynamicReferences(IProject[])
 	 * @return a list of projects
@@ -119,7 +144,8 @@ public interface IProjectDescription {
 	 * The result will not contain duplicates. Returns an empty
 	 * array if there are no referenced projects on this description.
 	 *
-	 *@see #getDynamicReferences()
+	 * @see #getDynamicReferences()
+	 * @see #getBuildConfigReferences(String)
 	 * @return a list of projects
 	 */
 	public IProject[] getReferencedProjects();
@@ -147,6 +173,73 @@ public interface IProjectDescription {
 	public ICommand newCommand();
 
 	/**
+	 * Sets the active configuration for the described project.
+	 * <p>
+	 * If a configuration with the specified name does not exist in the project then the
+	 * first configuration in the project is treated as the active configuration.
+	 * </p>
+	 *
+	 * @param configName the configuration to set as the active or default
+	 * @since 3.7
+	 */
+	public void setActiveBuildConfig(String configName);
+
+	/**
+	 * Sets the build configurations for the described project.
+	 * <p>
+	 * The passed in names must all be non-null.
+	 * Before they are set, duplicates are removed.
+	 * </p>
+	 * <p>
+	 * All projects have one default build configuration, and it is impossible to configure
+	 * the project to have no build configurations.
+	 * If the input is null or an empty list, the current configurations are removed,
+	 * and a default build configuration is (re-)added.
+	 * </p>
+	 * <p>
+	 * Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
+	 * before changes made to this description take effect.
+	 * </p>
+	 *
+	 * @param configNames the configurations to set for the described project
+	 * @see IProject#getActiveBuildConfig()
+	 * @see IProject#getBuildConfigs()
+	 * @see IProjectDescription#setActiveBuildConfig(String)
+	 * @since 3.7
+	 */
+	public void setBuildConfigs(String[] configNames);
+
+	/**
+	 * Sets the build configurations referenced by the specified configuration.
+	 * <p>
+	 * The configuration to which references are being added needs to exist in this
+	 * description, but the referenced projects and build configurations need not exist.
+	 * A reference with <code>null</code> configuration name is resolved to the active build configuration
+	 * on use.
+	 * Duplicates will be removed. The order of the referenced build configurations is preserved.
+	 * If the given configuration does not exist in this description then this has no effect.
+	 * </p>
+	 * <p>
+	 * References at the build configuration level take precedence over references at the project level.
+	 * </p>
+	 * <p>
+	 * Like dynamic references, these build configuration references are persisted as part of workspace
+	 * metadata.
+	 * </p>
+	 * <p>
+	 * Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)}
+	 * before changes made to this description take effect.
+	 * </p>
+	 * 
+	 * @see #getBuildConfigReferences(String)
+	 * @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
+	 * @param configName the configuration in the described project to set the references for
+	 * @param references list of build configuration references
+	 * @since 3.7
+	 */
+	public void setBuildConfigReferences(String configName, IBuildConfiguration[] references);
+
+	/**
 	 * Sets the list of build command to run when building the described project.
 	 * <p>
 	 * Users must call {@link IProject#setDescription(IProjectDescription, int, IProgressMonitor)} 
@@ -182,6 +275,7 @@ public interface IProjectDescription {
 	 * before changes made to this description take effect.
 	 * </p>
 	 * @see #getDynamicReferences()
+	 * @see #setBuildConfigReferences(String, IBuildConfiguration[])
 	 * @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
 	 * @param projects list of projects
 	 * @since 3.0
@@ -283,6 +377,7 @@ public interface IProjectDescription {
 	 *
 	 * @param projects a list of projects
 	 * @see IProject#setDescription(IProjectDescription, int, IProgressMonitor)
+	 * @see #setBuildConfigReferences(String, IBuildConfiguration[])
 	 * @see #getReferencedProjects()
 	 */
 	public void setReferencedProjects(IProject[] projects);
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java
index 06c3f9e..a11220a 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResource.java
@@ -1398,7 +1398,7 @@ public interface IResource extends IAdaptable, ISchedulingRule {
 	 * @see #setPersistentProperty(QualifiedName, String)
 	 * @since 3.4
 	 */
-	public Map getPersistentProperties() throws CoreException;
+	public Map<QualifiedName,String> getPersistentProperties() throws CoreException;
 
 	/**
 	 * Returns the value of the persistent property of this resource identified
@@ -1556,7 +1556,7 @@ public interface IResource extends IAdaptable, ISchedulingRule {
 	 * @see #setSessionProperty(QualifiedName, Object)
 	 * @since 3.4
 	 */
-	public Map getSessionProperties() throws CoreException;
+	public Map<QualifiedName,Object> getSessionProperties() throws CoreException;
 
 	/**
 	 * Returns the value of the session property of this resource identified
@@ -2457,7 +2457,7 @@ public interface IResource extends IAdaptable, ISchedulingRule {
 	 * specified depth) are expected to have their contents (and properties)
 	 * available locally.  The workspace root and projects are always local and 
 	 * attempting to set either to non-local (i.e., passing <code>false</code>) 
-	 * has no affect on the resource.
+	 * has no effect on the resource.
 	 * <p>
 	 * When a resource is not local, its content and properties are
 	 * unavailable for both reading and writing.
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java
index 4366efc..7b8ca6b 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IResourceStatus.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -275,6 +275,13 @@ public interface IResourceStatus extends IStatus {
 	 */
 	public static final int FAILED_GETTING_CHARSET = 383;	
 
+	/** Status code constant (value 384) indicating a build configuration with
+	 * the specified ID unexpectedly does not exist.
+	 * Severity: error. Category: workspace.
+	 * @since 3.7
+	 */
+	public static final int BUILD_CONFIGURATION_NOT_FOUND = 384;
+
 	// Internal constants [500-598]
 	// Information Only [500-532]
 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspace.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspace.java
index 208cf9f..139f5aa 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspace.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspace.java
@@ -8,6 +8,7 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *     Red Hat Incorporated - loadProjectDescription(InputStream)
+ *     Broadcom Corporation - build configurations and references
  *******************************************************************************/
 package org.eclipse.core.resources;
 
@@ -228,6 +229,7 @@ public interface IWorkspace extends IAdaptable {
 	 * @exception OperationCanceledException if the operation is canceled. 
 	 * Cancelation can occur even if no progress monitor is provided.
 	 * 
+	 * @see IWorkspace#build(IBuildConfiguration[], int, boolean, IProgressMonitor)
 	 * @see IProject#build(int, IProgressMonitor)
 	 * @see #computeProjectOrder(IProject[])
 	 * @see IncrementalProjectBuilder#FULL_BUILD
@@ -238,6 +240,51 @@ public interface IWorkspace extends IAdaptable {
 	public void build(int kind, IProgressMonitor monitor) throws CoreException;
 
 	/**
+	 * Build the build configurations specified in the passed in build configuration array.
+	 * <p>
+	 * Build order is determined by the workspace description and the project build configuration 
+	 * reference graph.
+	 * </p>
+	 * <p>
+	 * If buildReferences is true, build configurations reachable through the build configuration graph are
+	 * built as part of this build invocation.
+	 * </p>
+	 * <p>
+	 * This method may change resources; these changes will be reported in a
+	 * subsequent resource change event.
+	 * </p>
+	 * <p>
+	 * This method is long-running; progress and cancellation are provided by
+	 * the given progress monitor.
+	 * </p>
+	 * @param buildConfigs array of configurations to build
+	 * @param kind the kind of build being requested. Valid values are
+	 *	<ul>
+	 * <li>{@link IncrementalProjectBuilder#FULL_BUILD}- indicates a full build.</li>
+	 * <li>{@link IncrementalProjectBuilder#INCREMENTAL_BUILD}- indicates a incremental build.</li>
+	 * <li>{@link IncrementalProjectBuilder#CLEAN_BUILD}- indicates a clean request.  Clean does
+	 * not actually build anything, but rather discards all problems and build states.</li>
+	 *	</ul>
+	 * @param buildReferences boolean indicating if references should be transitively built.
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 * reporting is not desired
+	 * @exception CoreException if the build fails.
+	 *		The status contained in the exception may be a generic {@link IResourceStatus#BUILD_FAILED}
+	 *		code, but it could also be any other status code; it might
+	 *		also be a {@link MultiStatus}.
+	 * @exception OperationCanceledException if the operation is canceled. 
+	 * Cancellation can occur even if no progress monitor is provided.
+	 * 
+	 * @see IProject#build(int, IProgressMonitor)
+	 * @see IncrementalProjectBuilder#FULL_BUILD
+	 * @see IncrementalProjectBuilder#INCREMENTAL_BUILD
+	 * @see IncrementalProjectBuilder#CLEAN_BUILD
+	 * @see IResourceRuleFactory#buildRule()
+	 * @since 3.7
+	 */
+	public void build(IBuildConfiguration[] buildConfigs, int kind, boolean buildReferences, IProgressMonitor monitor) throws CoreException;
+
+	/**
 	 * Checkpoints the operation currently in progress. This method is used in
 	 * the middle of a group of operations to force a background autobuild (if
 	 * the build argument is true) and send an interim notification of resource
@@ -267,7 +314,8 @@ public interface IWorkspace extends IAdaptable {
 
 	/**
 	 * Returns the prerequisite ordering of the given projects. The computation
-	 * is done by interpreting project references as dependency relationships.
+	 * is done by interpreting the projects' active build configuration references
+	 * as dependency relationships.
 	 * For example if A references B and C, and C references B, this method,
 	 * given the list A, B, C will return the order B, C, A. That is, projects
 	 * with no dependencies are listed first.
@@ -321,9 +369,10 @@ public interface IWorkspace extends IAdaptable {
 		}
 
 		/**
-		 * A list of projects ordered so as to honor the project reference
-		 * relationships between these projects wherever possible. The elements
-		 * are a subset of the ones passed as the <code>projects</code>
+		 * A list of projects ordered so as to honor the project reference, and
+		 * build configuration reference, relationships between these projects
+		 * wherever possible.
+		 * The elements are a subset of the ones passed as the <code>projects</code>
 		 * parameter to <code>IWorkspace.computeProjectOrder</code>, where
 		 * inaccessible (closed or non-existent) projects have been omitted.
 		 */
@@ -331,7 +380,7 @@ public interface IWorkspace extends IAdaptable {
 		/**
 		 * Indicates whether any of the accessible projects in
 		 * <code>projects</code> are involved in non-trivial cycles.
-		 * <code>true</code> if the project reference graph contains at least
+		 * <code>true</code> if the reference graph contains at least
 		 * one cycle involving two or more of the projects in
 		 * <code>projects</code>, and <code>false</code> if none of the
 		 * projects in <code>projects</code> are involved in cycles.
@@ -676,7 +725,7 @@ public interface IWorkspace extends IAdaptable {
 	 * @return a map (key type: <code>IProject</code>, value type:
 	 * <code>IProject[]</code>) from project to dangling project references
 	 */
-	public Map getDanglingReferences();
+	public Map<IProject,IProject[]> getDanglingReferences();
 
 	/**
 	 * Returns the workspace description. This object is responsible for
@@ -914,6 +963,32 @@ public interface IWorkspace extends IAdaptable {
 	public IStatus move(IResource[] resources, IPath destination, int updateFlags, IProgressMonitor monitor) throws CoreException;
 
 	/**
+	 * Returns a new build configuration for the project, with the given name.  
+	 * The name is a human readable unique name for the build configuration in the
+	 * project.  The project need not exist.
+	 *<p>
+	 * This API can be used to create {@link IBuildConfiguration}s that will be used as references
+	 * to {@link IBuildConfiguration}s in other projects.  These references are set using
+	 * {@link IProjectDescription#setBuildConfigReferences(String, IBuildConfiguration[])}
+	 * and may have a <code>null</code> configuration name which will resolve to the referenced
+	 * project's active configuration when the reference is used.
+	 *</p>
+	 *<p>
+	 * Build configuration do not become part of a project
+	 * description until set using {@link IProjectDescription#setBuildConfigs(String[])}.
+	 *</p>
+	 *
+	 * @param projectName the name of the project on which the configuration will exist
+	 * @param configName the name of the new build configuration
+	 * @return a build configuration
+	 * @see IProjectDescription#setBuildConfigs(String[])
+	 * @see IProjectDescription#setBuildConfigReferences(String, IBuildConfiguration[])
+	 * @see IBuildConfiguration
+	 * @since 3.7
+	 */
+	public IBuildConfiguration newBuildConfig(String projectName, String configName);
+
+	/**
 	 * Creates and returns a new project description for a project with the
 	 * given name. This object is useful when creating, moving or copying
 	 * projects.
@@ -1006,10 +1081,10 @@ public interface IWorkspace extends IAdaptable {
 	 * running, the calling thread will be blocked until that change completes.
 	 * If the action attempts to make changes to the workspace that were not
 	 * specified in the scheduling rule, it will fail. If no scheduling rule is
-	 * supplied, then any attempt to change resources will fail.  If a non-<code>null</code>
-	 * scheduling rule is supplied, this operation must always support cancelation
-	 * in the case where this operation becomes blocked by a long running background
-	 * operation.
+	 * supplied, there are no scheduling restrictions for this operation. 
+	 * If a non-<code>null</code> scheduling rule is supplied, this operation 
+	 * must always support cancelation in the case where this operation becomes 
+	 * blocked by a long running background operation.
 	 * </p>
 	 * <p>
 	 * The AVOID_UPDATE flag controls whether periodic resource change
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceRoot.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceRoot.java
index e3fafb4..14cca88 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceRoot.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -100,6 +100,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * result will omit resources within team private members or hidden
 	 * containers.
 	 * </p>
+	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
 	 * 
 	 * @param location
 	 *        a path in the local file system
@@ -136,6 +140,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * containers.
 	 * </p>
 	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
+	 * <p>
 	 * This is a convenience method, fully equivalent to
 	 * <code>findContainersForLocationURI(location, IResource.NONE)</code>.
 	 * </p>
@@ -165,6 +173,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * {@link #INCLUDE_HIDDEN} flag is not specified (recommended), the result
 	 * will omit any hidden member resources.
 	 * </p>
+	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
 	 * 
 	 * @param location
 	 *        a URI path into some file system
@@ -189,6 +201,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * result will omit resources within team private member or hidden
 	 * containers.
 	 * </p>
+	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
 	 * 
 	 * @param location
 	 *        a path in the local file system
@@ -210,6 +226,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * containers.
 	 * </p>
 	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
+	 * <p>
 	 * This is a convenience method, fully equivalent to
 	 * <code>findFilesForLocationURI(location, IResource.NONE)</code>.
 	 * </p>
@@ -240,6 +260,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * {@link #INCLUDE_HIDDEN} flag is not specified (recommended), the result
 	 * will omit any hidden member resources.
 	 * </p>
+	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
 	 * 
 	 * @param location
 	 *        a URI path into some file system
@@ -271,6 +295,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * location of the platform working location.
 	 * </p>
 	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
+	 * <p>
 	 * Warning: This method ignores linked resources and their children.  Since
 	 * linked resources may overlap other resources, a unique mapping from a
 	 * file system location to a single resource is not guaranteed.  To find all 
@@ -295,6 +323,10 @@ public interface IWorkspaceRoot extends IContainer, IAdaptable {
 	 * the location of any existing project in the workspace.
 	 * </p>
 	 * <p>
+	 * The result will also omit resources that are explicitly excluded 
+	 * from the workspace according to existing resource filters.
+	 * </p>
+	 * <p>
 	 * Warning: This method ignores linked resources and their children.  Since
 	 * linked resources may overlap other resources, a unique mapping from a
 	 * file system location to a single resource is not guaranteed.  To find all 
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IncrementalProjectBuilder.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IncrementalProjectBuilder.java
index 35f7ec2..4c3a0f2 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IncrementalProjectBuilder.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/IncrementalProjectBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  * Anton Leherbauer (Wind River) - [198591] Allow Builder to specify scheduling rule
  * Anton Leherbauer (Wind River) - [305858] Allow Builder to return null rule
  * James Blackburn (Broadcom) - [306822] Provide Context for Builder getRule()
+ * Broadcom Corporation - build configurations and references
  *******************************************************************************/
 package org.eclipse.core.resources;
 
@@ -38,7 +39,12 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 	 * Build kind constant (value 6) indicating a full build request.  A full
 	 * build discards all previously built state and builds all resources again.
 	 * Resource deltas are not applicable for this kind of build.
-	 * 
+	 * <p>
+	 * <strong>Note:</strong> If there is no previous delta, a request for {@link #INCREMENTAL_BUILD}
+	 * or {@link #AUTO_BUILD} will result in the builder being called with {@link #FULL_BUILD}
+	 * build kind.
+	 * </p>
+	 *
 	 * @see IProject#build(int, IProgressMonitor)
 	 * @see IProject#build(int, String, Map, IProgressMonitor)
 	 * @see IWorkspace#build(int, IProgressMonitor)
@@ -88,7 +94,7 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 	 * used during the invocation of this method to obtain information about
 	 * what changes have occurred since the last invocation of this method. Any
 	 * resource delta acquired is valid only for the duration of the invocation
-	 * of this method.
+	 * of this method.  A {@link #FULL_BUILD} has no associated build delta.
 	 * </p>
 	 * <p>
 	 * After completing a build, this builder may return a list of projects for
@@ -135,7 +141,7 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 	 * @exception CoreException if this build fails.
 	 * @see IProject#build(int, String, Map, IProgressMonitor)
 	 */
-	protected abstract IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException;
+	protected abstract IProject[] build(int kind, Map<String,String> args, IProgressMonitor monitor) throws CoreException;
 
 	/**
 	 * Clean is an opportunity for a builder to discard any additional state that has 
@@ -177,12 +183,29 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 	 * previously built states. Typically this means that the next time the
 	 * builder runs, it will have to do a full build since it does not have any
 	 * state upon which to base an incremental build.
+	 * This supersedes a call to {@link #rememberLastBuiltState()}.
 	 */
 	public final void forgetLastBuiltState() {
 		super.forgetLastBuiltState();
 	}
 
 	/**
+	 * Requests that this builder remember any build invocation specific state.
+	 * This means that the next time the builder runs, it will receive a delta 
+	 * which includes changes reported in the current {@link #getDelta(IProject)}.
+	 *<p>
+	 * This can be used to indicate that a builder didn't run, even though there
+	 * are changes, and the builder wishes that the delta be preserved until its
+	 * next invocation.
+	 * </p>
+	 * This is superseded by a call to {@link #forgetLastBuiltState()}.
+	 * @since 3.7
+	 */
+	public final void rememberLastBuiltState() {
+		super.rememberLastBuiltState();
+	}
+
+	/**
 	 * Returns the build command associated with this builder.  The returned
 	 * command may or may not be in the build specification for the project
 	 * on which this builder operates.
@@ -253,6 +276,15 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 	}
 
 	/**
+	 * Returns the build configuration for which this build was invoked.
+	 * @return the build configuration
+	 * @since 3.7
+	 */
+	public final IBuildConfiguration getBuildConfig() {
+		return super.getBuildConfig();
+	}
+
+	/**
 	 * Returns whether the given project has already been built during this
 	 * build iteration.
 	 * <p>
@@ -292,8 +324,8 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 	}
 
 	/**
-	 * Indicates that this builder made changes that affect a project that
-	 * precedes this project in the currently executing build order, and thus a
+	 * Indicates that this builder made changes that affect a build configuration that
+	 * precedes this build configuration in the currently executing build order, and thus a
 	 * rebuild will be necessary.
 	 * <p>
 	 * This is an advanced feature that builders should use with caution. This
@@ -367,7 +399,7 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 
 	/**
 	 * Returns the scheduling rule that is required for building 
-	 * the project for which this builder is defined. The default 
+	 * the project build configuration for which this builder is defined. The default 
 	 * is {@link #getRule()}, which returns the workspace root 
 	 * rule unless overridden.
 	 * <p>
@@ -418,7 +450,24 @@ public abstract class IncrementalProjectBuilder extends InternalBuilder implemen
 	 * 
 	 * @since 3.6
 	 */
-	public ISchedulingRule getRule(int kind, Map args) {
+	public ISchedulingRule getRule(int kind, Map<String,String> args) {
 		return getRule();
 	}
+
+	/**
+	 * Get the context for this invocation of the builder. This is only valid
+	 * in the context of a call to
+	 * {@link #build(int, Map, IProgressMonitor)}
+	 *
+	 * <p>
+	 * This can be used to discover which build configurations are being built before
+	 * and after this build configuration.
+	 * </p>
+	 *
+	 * @return the context for the most recent invocation of the builder
+	 * @since 3.7
+	 */
+	public final IBuildContext getContext() {
+		return super.getContext();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourceAttributes.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourceAttributes.java
index 3c97408..34fbc67 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourceAttributes.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourceAttributes.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 Red Hat Incorporated and others
+ * Copyright (c) 2004, 2011 Red Hat Incorporated and others
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API 
  *     Red Hat Incorporated - initial implementation
- * 	Martin Oberhuber (Wind River) - [44107] Add symbolic links to ResourceAttributes API
+ *     Martin Oberhuber (Wind River) - [44107] Add symbolic links to ResourceAttributes API
  *******************************************************************************/
 
 package org.eclipse.core.resources;
@@ -127,14 +127,25 @@ public class ResourceAttributes {
 
 	/** 
 	 * Clears all of the bits indicated by the mask.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @noreference This method is not intended to be referenced by clients.
 	 */
-	private void set(int mask, boolean value) {
+	public void set(int mask, boolean value) {
 		if (value)
 			attributes |= mask;
 		else
 			attributes &= ~mask;
 	}
 
+	/** 
+	 * Returns whether this ResourceAttributes object has the given mask set.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients.
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public boolean isSet(int mask) {
+		return (attributes & mask) != 0;
+	}
+
 	/**
 	 * Sets or unsets whether this ResourceAttributes object is marked executable.
 	 *
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java
index 63dbfc4..3c3761d 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -9,9 +9,13 @@
  *     IBM Corporation - initial API and implementation
  *     Serge Beauchamp (Freescale Semiconductor) - [252996] add PT_FILTER_PROVIDERS
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] add PT_VARIABLE_PROVIDERS
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources;
 
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.internal.preferences.PreferencesService;
 import org.eclipse.core.internal.resources.*;
 import org.eclipse.core.internal.utils.Messages;
 import org.eclipse.core.runtime.*;
@@ -95,7 +99,7 @@ public final class ResourcesPlugin extends Plugin {
 	 * @since 3.2
 	 */
 	public static final String PT_MODEL_PROVIDERS = "modelProviders"; //$NON-NLS-1$
-	
+
 	/**
 	 * Simple identifier constant (value <code>"variableProviders"</code>)
 	 * for the variable providers extension point.
@@ -119,15 +123,15 @@ public final class ResourcesPlugin extends Plugin {
 	 * @since 3.0
 	 */
 	public static final Object FAMILY_AUTO_BUILD = new Object();
-	
+
 	/**
 	 * Constant identifying the job family identifier for the background auto-refresh job.
 	 * 
 	 * @see IJobManager#join(Object, IProgressMonitor)
 	 * @since 3.1
 	 */
-	public static final Object FAMILY_AUTO_REFRESH = new Object();	
-	
+	public static final Object FAMILY_AUTO_REFRESH = new Object();
+
 	/**
 	 * Constant identifying the job family identifier for a background build job. All clients
 	 * that schedule background jobs for performing builds should include this job
@@ -149,7 +153,7 @@ public final class ResourcesPlugin extends Plugin {
 	 * @since 3.4
 	 */
 	public static final Object FAMILY_MANUAL_REFRESH = new Object();
-	
+
 	/**
 	 * Name of a preference indicating the encoding to use when reading text 
 	 * files in the workspace.  The value is a string, and may 
@@ -277,12 +281,40 @@ public final class ResourcesPlugin extends Plugin {
 
 	/**
 	 * Name of a preference for configuring whether the workspace performs auto-
-	 * refresh.
+	 * refresh.  Auto-refresh installs a file-system listener, or performs
+	 * periodic file-system polling to actively discover changes in the resource
+	 * hierarchy.
 	 * @since 3.0
 	 */
 	public static final String PREF_AUTO_REFRESH = "refresh.enabled"; //$NON-NLS-1$
 
 	/**
+	 * Name of a preference for configuring whether out-of-sync resources are automatically
+	 * asynchronously refreshed, when discovered to be out-of-sync by the workspace.
+	 * <p>
+	 * This preference suppresses out-of-sync CoreException for some read methods, including:
+	 * {@link IFile#getContents()} & {@link IFile#getContentDescription()}. 
+	 * </p>
+	 * <p>
+	 * In the future the workspace may enable other lightweight auto-refresh mechanisms when this
+	 * preference is true. (The existing {@link ResourcesPlugin#PREF_AUTO_REFRESH} will continue
+	 * to enable filesystem hooks and the existing polling based monitor.)
+	 * </p>
+	 * See the discussion: https://bugs.eclipse.org/303517
+	 * @since 3.7
+	 */
+	public static final String PREF_LIGHTWEIGHT_AUTO_REFRESH = "refresh.lightweight.enabled"; //$NON-NLS-1$
+
+	/**
+	 * Name of a preference for configuring whether encodings for derived
+	 * resources within the project should be stored in a separate derived
+	 * preference file.
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREF_SEPARATE_DERIVED_ENCODINGS = "separateDerivedEncodings"; //$NON-NLS-1$
+
+	/**
 	 * The single instance of this plug-in runtime class.
 	 */
 	private static ResourcesPlugin plugin;
@@ -293,7 +325,7 @@ public final class ResourcesPlugin extends Plugin {
 	 */
 	private static Workspace workspace = null;
 
-	private ServiceRegistration workspaceRegistration;
+	private ServiceRegistration<IWorkspace> workspaceRegistration;
 
 	/** 
 	 * Constructs an instance of this plug-in runtime class.
@@ -403,9 +435,25 @@ public final class ResourcesPlugin extends Plugin {
 		// make it easier to debug cases where open() is failing.
 		workspace = new Workspace();
 		PlatformURLResourceConnection.startup(workspace.getRoot().getLocation());
+		initializePreferenceLookupOrder();
 		IStatus result = workspace.open(null);
 		if (!result.isOK())
 			getLog().log(result);
-		workspaceRegistration = context.registerService(IWorkspace.SERVICE_NAME, workspace, null);
+		workspaceRegistration = context.registerService(IWorkspace.class, workspace, null);
+	}
+
+	/*
+	 * Add the project scope to the preference service's default look-up order so 
+	 * people get it for free
+	 */
+	private void initializePreferenceLookupOrder() {
+		PreferencesService service = PreferencesService.getDefault();
+		String[] original = service.getDefaultDefaultLookupOrder();
+		List<String> newOrder = new ArrayList<String>();
+		// put the project scope first on the list
+		newOrder.add(ProjectScope.SCOPE);
+		for (String entry : original)
+			newOrder.add(entry);
+		service.setDefaultDefaultLookupOrder(newOrder.toArray(new String[newOrder.size()]));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/CompositeResourceMapping.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/CompositeResourceMapping.java
index 30843d1..b7bedf5 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/CompositeResourceMapping.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/CompositeResourceMapping.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources.mapping;
 
@@ -80,12 +81,12 @@ public final class CompositeResourceMapping extends ResourceMapping {
 	 */
 	public IProject[] getProjects() {
 		if (projects == null) {
-			Set result = new HashSet();
+			Set<IProject> result = new HashSet<IProject>();
 			for (int i = 0; i < mappings.length; i++) {
 				ResourceMapping mapping = mappings[i];
 				result.addAll(Arrays.asList(mapping.getProjects()));
 			}
-			projects = (IProject[]) result.toArray(new IProject[result.size()]);
+			projects = result.toArray(new IProject[result.size()]);
 		}
 		return projects;
 	}
@@ -98,12 +99,12 @@ public final class CompositeResourceMapping extends ResourceMapping {
 			monitor = new NullProgressMonitor();
 		try {
 			monitor.beginTask("", 100 * mappings.length); //$NON-NLS-1$
-			List result = new ArrayList();
+			List<ResourceTraversal> result = new ArrayList<ResourceTraversal>();
 			for (int i = 0; i < mappings.length; i++) {
 				ResourceMapping mapping = mappings[i];
 				result.addAll(Arrays.asList(mapping.getTraversals(context, new SubProgressMonitor(monitor, 100))));
 			}
-			return (ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]);
+			return result.toArray(new ResourceTraversal[result.size()]);
 		} finally {
 			monitor.done();
 		}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ModelProvider.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ModelProvider.java
index 7321886..2029aa4 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ModelProvider.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources.mapping;
 
@@ -135,14 +136,14 @@ public abstract class ModelProvider extends PlatformObject {
 	 * @exception CoreException 
 	 */
 	public ResourceMapping[] getMappings(IResource[] resources, ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
-		Set mappings = new HashSet();
+		Set<ResourceMapping> mappings = new HashSet<ResourceMapping>();
 		for (int i = 0; i < resources.length; i++) {
 			IResource resource = resources[i];
 			ResourceMapping[] resourceMappings = getMappings(resource, context, monitor);
 			if (resourceMappings.length > 0)
 				mappings.addAll(Arrays.asList(resourceMappings));
 		}
-		return (ResourceMapping[]) mappings.toArray(new ResourceMapping[mappings.size()]);
+		return mappings.toArray(new ResourceMapping[mappings.size()]);
 	}
 
 	/**
@@ -162,14 +163,14 @@ public abstract class ModelProvider extends PlatformObject {
 	 * @return the set of mappings that overlap with the given resource traversals
 	 */
 	public ResourceMapping[] getMappings(ResourceTraversal[] traversals, ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
-		Set result = new HashSet();
+		Set<ResourceMapping> result = new HashSet<ResourceMapping>();
 		for (int i = 0; i < traversals.length; i++) {
 			ResourceTraversal traversal = traversals[i];
 			ResourceMapping[] mappings = getMappings(traversal.getResources(), context, monitor);
 			for (int j = 0; j < mappings.length; j++)
 				result.add(mappings[j]);
 		}
-		return (ResourceMapping[]) result.toArray(new ResourceMapping[result.size()]);
+		return result.toArray(new ResourceMapping[result.size()]);
 	}
 
 	/**
@@ -193,12 +194,12 @@ public abstract class ModelProvider extends PlatformObject {
 	public ResourceTraversal[] getTraversals(ResourceMapping[] mappings, ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask("", 100 * mappings.length); //$NON-NLS-1$
-			List traversals = new ArrayList();
+			List<ResourceTraversal> traversals = new ArrayList<ResourceTraversal>();
 			for (int i = 0; i < mappings.length; i++) {
 				ResourceMapping mapping = mappings[i];
 				traversals.addAll(Arrays.asList(mapping.getTraversals(context, new SubProgressMonitor(monitor, 100))));
 			}
-			return (ResourceTraversal[]) traversals.toArray(new ResourceTraversal[traversals.size()]);
+			return traversals.toArray(new ResourceTraversal[traversals.size()]);
 		} finally {
 			monitor.done();
 		}
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceChangeValidator.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceChangeValidator.java
index 0349684..161cb9f 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceChangeValidator.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceChangeValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources.mapping;
 
@@ -67,7 +68,7 @@ public final class ResourceChangeValidator {
 	}
 
 	private IStatus combineResults(IStatus[] result) {
-		List notOK = new ArrayList();
+		List<IStatus> notOK = new ArrayList<IStatus>();
 		for (int i = 0; i < result.length; i++) {
 			IStatus status = result[i];
 			if (!status.isOK()) {
@@ -78,9 +79,9 @@ public final class ResourceChangeValidator {
 			return Status.OK_STATUS;
 		}
 		if (notOK.size() == 1) {
-			return (IStatus) notOK.get(0);
+			return notOK.get(0);
 		}
-		return new MultiStatus(ResourcesPlugin.PI_RESOURCES, 0, (IStatus[]) notOK.toArray(new IStatus[notOK.size()]), Messages.mapping_multiProblems, null);
+		return new MultiStatus(ResourcesPlugin.PI_RESOURCES, 0, notOK.toArray(new IStatus[notOK.size()]), Messages.mapping_multiProblems, null);
 	}
 
 	/**
@@ -95,7 +96,7 @@ public final class ResourceChangeValidator {
 
 	private ModelProvider[] getProviders(IResource[] resources) {
 		IModelProviderDescriptor[] descriptors = ModelProvider.getModelProviderDescriptors();
-		List result = new ArrayList();
+		List<ModelProvider> result = new ArrayList<ModelProvider>();
 		for (int i = 0; i < descriptors.length; i++) {
 			IModelProviderDescriptor descriptor = descriptors[i];
 			try {
@@ -107,7 +108,7 @@ public final class ResourceChangeValidator {
 				Policy.log(e.getStatus().getSeverity(), NLS.bind("Could not instantiate provider {0}", descriptor.getId()), e); //$NON-NLS-1$
 			}
 		}
-		return (ModelProvider[]) result.toArray(new ModelProvider[result.size()]);
+		return result.toArray(new ModelProvider[result.size()]);
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceMapping.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceMapping.java
index 2a27c9c..26bba20 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceMapping.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceMapping.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources.mapping;
 
@@ -108,10 +109,10 @@ public abstract class ResourceMapping extends PlatformObject {
 	 */
 	public IMarker[] findMarkers(String type, boolean includeSubtypes, IProgressMonitor monitor) throws CoreException {
 		final ResourceTraversal[] traversals = getTraversals(ResourceMappingContext.LOCAL_CONTEXT, monitor);
-		ArrayList result = new ArrayList();
+		ArrayList<IMarker> result = new ArrayList<IMarker>();
 		for (int i = 0; i < traversals.length; i++)
 			traversals[i].doFindMarkers(result, type, includeSubtypes);
-		return (IMarker[]) result.toArray(new IMarker[result.size()]);
+		return result.toArray(new IMarker[result.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceTraversal.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceTraversal.java
index 2bbfbe1..220a22d 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceTraversal.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/mapping/ResourceTraversal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources.mapping;
 
@@ -110,7 +111,7 @@ public class ResourceTraversal {
 	 * available to clients because underlying non-API methods are used that
 	 * may change.
 	 */
-	void doFindMarkers(ArrayList result, String type, boolean includeSubtypes) {
+	void doFindMarkers(ArrayList<IMarker> result, String type, boolean includeSubtypes) {
 		MarkerManager markerMan = ((Workspace) ResourcesPlugin.getWorkspace()).getMarkerManager();
 		for (int i = 0; i < resources.length; i++)
 			markerMan.doFindMarkers(resources[i], result, type, includeSubtypes, depth);
@@ -131,9 +132,9 @@ public class ResourceTraversal {
 	public IMarker[] findMarkers(String type, boolean includeSubtypes) throws CoreException {
 		if (resources.length == 0)
 			return new IMarker[0];
-		ArrayList result = new ArrayList();
+		ArrayList<IMarker> result = new ArrayList<IMarker>();
 		doFindMarkers(result, type, includeSubtypes);
-		return (IMarker[]) result.toArray(new IMarker[result.size()]);
+		return result.toArray(new IMarker[result.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/team/ResourceRuleFactory.java b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/team/ResourceRuleFactory.java
index 336e2b4..482fdca 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/team/ResourceRuleFactory.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src/org/eclipse/core/resources/team/ResourceRuleFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     IBM - Initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - ongoing development
  *******************************************************************************/
 package org.eclipse.core.resources.team;
 
@@ -233,15 +234,15 @@ public class ResourceRuleFactory implements IResourceRuleFactory {
 		if (resources.length == 1)
 			return isReadOnly(resources[0]) ? parent(resources[0]) : null;
 		//need a lock on the parents of all read-only files
-		HashSet rules = new HashSet();
+		HashSet<ISchedulingRule> rules = new HashSet<ISchedulingRule>();
 		for (int i = 0; i < resources.length; i++)
 			if (isReadOnly(resources[i]))
 				rules.add(parent(resources[i]));
 		if (rules.isEmpty())
 			return null;
 		if (rules.size() == 1)
-			return (ISchedulingRule) rules.iterator().next();
-		ISchedulingRule[] ruleArray = (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]);
+			return rules.iterator().next();
+		ISchedulingRule[] ruleArray = rules.toArray(new ISchedulingRule[rules.size()]);
 		return new MultiRule(ruleArray);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.resources/src_ant/org/eclipse/core/resources/ant/Policy.java b/eclipse/plugins/org.eclipse.core.resources/src_ant/org/eclipse/core/resources/ant/Policy.java
index 4e71a6e..45b9ec9 100644
--- a/eclipse/plugins/org.eclipse.core.resources/src_ant/org/eclipse/core/resources/ant/Policy.java
+++ b/eclipse/plugins/org.eclipse.core.resources/src_ant/org/eclipse/core/resources/ant/Policy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,6 @@ public class Policy {
 		}
 		if (bindings == null)
 			return message;
-		return MessageFormat.format(message, bindings);
+		return MessageFormat.format(message, (Object[]) bindings);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/META-INF/MANIFEST.MF
index 321e2f8..c4b1ccf 100644
--- a/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.core.runtime.compatibility.auth
 Bundle-Version: 3.2.200.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Import-Package: org.eclipse.osgi.framework.log,
+Import-Package: org.eclipse.osgi.framework.log; version="[1.1,2.0)",
  org.eclipse.osgi.service.datalocation,
  org.eclipse.osgi.util;version="1.0.0",
  org.osgi.framework,
diff --git a/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/src/org/eclipse/core/internal/runtime/auth/Activator.java b/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/src/org/eclipse/core/internal/runtime/auth/Activator.java
index bf8a2dc..f496037 100644
--- a/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/src/org/eclipse/core/internal/runtime/auth/Activator.java
+++ b/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth/src/org/eclipse/core/internal/runtime/auth/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,7 +85,7 @@ public class Activator implements BundleActivator {
 
 		FrameworkLogEntry[] children = (FrameworkLogEntry[]) (childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()]));
 
-		return new FrameworkLogEntry(status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), stackCode, t, children);
+		return new FrameworkLogEntry(status, status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), stackCode, t, children);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/META-INF/MANIFEST.MF
index 477ece4..b6ce41e 100644
--- a/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.core.runtime.compatibility.registry
-Bundle-Version: 3.3.0.qualifier
+Bundle-Version: 3.5.0.qualifier
 Bundle-Vendor: %providerName
 Fragment-Host: org.eclipse.equinox.registry;bundle-version="[3.5.0,3.6.0)"
 Bundle-Localization: fragment
diff --git a/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/build.properties b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/build.properties
index 7249e0e..9ae1a79 100644
--- a/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/build.properties
+++ b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2005, 2008 IBM Corporation and others.
+#  Copyright (c) 2005, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -8,8 +8,7 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-source.runtime_registry_compatibility.jar = src/,\
-                                            classes/
+source.runtime_registry_compatibility.jar = src/
 output.runtime_registry_compatibility.jar = bin/
 bin.includes = META-INF/,\
                runtime_registry_compatibility.jar,\
@@ -17,3 +16,4 @@ bin.includes = META-INF/,\
                fragment.properties
 extra.runtime_registry_compatibility.jar = classes/
 src.includes = about.html
+customBuildCallbacks=true
diff --git a/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/customBuildCallbacks.xml
new file mode 100644
index 0000000..2d33cfa
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/customBuildCallbacks.xml
@@ -0,0 +1,167 @@
+<!-- ===================================================================== -->
+<!-- Custom targets called from a project's generated build.xml            -->
+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
+<!-- ===================================================================== -->
+<project name="Build specific targets and properties" default="noDefault">
+
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="This file must be called with explicit targets" />
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.jars                              -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.jars">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.jars                               -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.jars">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.sources                            -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the compilation target <name>                      -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="pre.name">
+	</target>
+
+	<target name="pre. at dot">
+	</target>
+
+	<target name="pre.runtime_registry_compatibility.jar"/>
+	<!-- ===================================================================== -->
+	<!-- Steps to do during the compilation target <name>, after the compile   -->
+	<!-- but before jaring.  Substitute "name" with the name of the compilation-->
+	<!-- target, eg @dot                                                       -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.compile.runtime_registry_compatibility.jar">
+		<copy todir="${target.folder}" failonerror="true" overwrite="false">
+			<fileset dir="classes/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="post.runtime_registry_compatibility.jar"/>
+
+	<target name="post.compile. at dot">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the compilation target <name>                       -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   jar.Location - the location of the compilation results              -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.name">
+	</target>
+
+	<target name="post. at dot">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.bin.parts">
+	</target>
+		
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.bin.parts">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.sources                          -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.logs                             -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.logs">        
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.logs                              -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.logs">       
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target clean                                   -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.clean">              
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target clean                                    -->
+	<!-- Available parameters :                                                -->
+	<!--   plugin.destination - final destination of the build                 -->
+	<!--   build.result.folder - results of the compilation                    -->
+	<!--   temp.folder - temporary folder                                      -->
+	<!-- ===================================================================== -->
+	<target name="post.clean">             
+	</target>
+</project>
diff --git a/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/src/org/eclipse/core/runtime/IExtension.java b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/src/org/eclipse/core/runtime/IExtension.java
index 16b634d..386ad81 100644
--- a/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/src/org/eclipse/core/runtime/IExtension.java
+++ b/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry/src/org/eclipse/core/runtime/IExtension.java
@@ -174,7 +174,7 @@ public interface IExtension {
 	 * @deprecated IPluginDescriptor is not part of the new runtime and its function
 	 * has been split over several parts of the new runtime.  This method
 	 * is not available (returns <tt>null</tt>) if the compatibility layer is not installed.  Use getNamespace()
-	 * to get the symbolic id of the declaring plugin.  See {@link IPluginDescriptor} to see how to 
+	 * to get the symbolic id of the declaring plug-in.  See {@link IPluginDescriptor} to see how to 
 	 * update your use-cases.
 	 */
 	public IPluginDescriptor getDeclaringPluginDescriptor() throws InvalidRegistryObjectException;
diff --git a/eclipse/plugins/org.eclipse.core.runtime/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.runtime/META-INF/MANIFEST.MF
index 51b32d7..5248c03 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.runtime/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-SymbolicName: org.eclipse.core.runtime; singleton:=true
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.core.internal.runtime.PlatformActivator
@@ -9,14 +9,14 @@ Bundle-Localization: plugin
 Export-Package: org.eclipse.core.internal.preferences.legacy;x-internal:=true,
  org.eclipse.core.internal.runtime;x-friends:="org.eclipse.core.runtime.compatibility",
  org.eclipse.core.runtime;version="3.4.0"
-Require-Bundle: org.eclipse.osgi;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
+Require-Bundle: org.eclipse.osgi;bundle-version="[3.7.0,4.0.0)";visibility:=reexport,
  org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
  org.eclipse.core.jobs;bundle-version="[3.2.0,4.0.0)";visibility:=reexport,
  org.eclipse.equinox.registry;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
- org.eclipse.equinox.preferences;bundle-version="[3.3.0,4.0.0)";visibility:=reexport,
+ org.eclipse.equinox.preferences;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
  org.eclipse.core.contenttype;bundle-version="[3.3.0,4.0.0)";visibility:=reexport,
  org.eclipse.core.runtime.compatibility.auth;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
- org.eclipse.equinox.app;bundle-version="[1.0.0,2.0.0)";visibility:=reexport
+ org.eclipse.equinox.app;bundle-version="1.0.0";visibility:=reexport
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
  J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/legacy/PreferenceForwarder.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/legacy/PreferenceForwarder.java
index 4ee079e..c5d6e51 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/legacy/PreferenceForwarder.java
+++ b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/legacy/PreferenceForwarder.java
@@ -79,7 +79,7 @@ public class PreferenceForwarder extends Preferences implements IEclipsePreferen
 
 	/**
 	 * Adds a property change listener to this preference object.
-	 * Has no affect if the identical listener is already registered.
+	 * Has no effect if the identical listener is already registered.
 	 *
 	 * @param listener a property change listener
 	 */
@@ -132,7 +132,7 @@ public class PreferenceForwarder extends Preferences implements IEclipsePreferen
 
 	/**
 	 * Removes the given listener from this preference object.
-	 * Has no affect if the listener is not registered.
+	 * Has no effect if the listener is not registered.
 	 *
 	 * @param listener a property change listener
 	 */
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
index 8299de4..0ab947c 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
+++ b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ import org.eclipse.core.runtime.preferences.IPreferencesService;
 import org.eclipse.equinox.app.IApplicationContext;
 import org.eclipse.equinox.internal.app.*;
 import org.eclipse.equinox.internal.app.Activator;
+import org.eclipse.equinox.log.*;
 import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.service.debug.DebugOptions;
@@ -65,7 +66,6 @@ public final class InternalPlatform {
 	private static final String[] OS_LIST = {Platform.OS_AIX, Platform.OS_HPUX, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_QNX, Platform.OS_SOLARIS, Platform.OS_WIN32};
 	private static String password = ""; //$NON-NLS-1$
 	private static final String PASSWORD = "-password"; //$NON-NLS-1$
-	private static PlatformLogWriter platformLog = null;
 
 	private static final String PLUGIN_PATH = ".plugin-path"; //$NON-NLS-1$
 
@@ -110,6 +110,8 @@ public final class InternalPlatform {
 	private ServiceTracker preferencesTracker = null;
 	private ServiceTracker userLocation = null;
 	private ServiceTracker groupProviderTracker = null;
+	private ServiceTracker logReaderTracker = null;
+	private ServiceTracker extendedLogTracker = null;
 
 	private IProduct product;
 
@@ -406,10 +408,14 @@ public final class InternalPlatform {
 	 * The system log listener needs to be optional: turned on or off. What about a system property? :-)
 	 */
 	public ILog getLog(Bundle bundle) {
-		ILog result = (ILog) logs.get(bundle);
+		Log result = (Log) logs.get(bundle);
 		if (result != null)
 			return result;
-		result = new Log(bundle);
+		ExtendedLogService logService = (ExtendedLogService) extendedLogTracker.getService();
+		Logger logger = logService == null ? null : logService.getLogger(bundle, PlatformLogWriter.EQUINOX_LOGGER_NAME);
+		result = new Log(bundle, logger);
+		ExtendedLogReaderService logReader = (ExtendedLogReaderService) logReaderTracker.getService();
+		logReader.addLogListener(result, result);
 		logs.put(bundle, result);
 		return result;
 	}
@@ -777,18 +783,16 @@ public final class InternalPlatform {
 	 */
 	public void start(BundleContext runtimeContext) {
 		this.context = runtimeContext;
+		logReaderTracker = new ServiceTracker(context, ExtendedLogReaderService.class.getName(), null);
+		logReaderTracker.open();
+		extendedLogTracker = new ServiceTracker(context, ExtendedLogService.class.getName(), null);
+		extendedLogTracker.open();
 		splashEnded = false;
 		processCommandLine(getEnvironmentInfoService().getNonFrameworkArgs());
 		initializeDebugFlags();
 		initialized = true;
 		getMetaArea();
 		initializeAuthorizationHandler();
-		FrameworkLog log = getFrameworkLog();
-		if (log != null) {
-			platformLog = new PlatformLogWriter(getFrameworkLog());
-			addLogListener(platformLog);
-		} else
-			platformLog = null;
 		startServices();
 
 		// See if need to activate rest of the runtime plugins. Plugins are "gently" activated by touching 
@@ -810,8 +814,6 @@ public final class InternalPlatform {
 	public void stop(BundleContext bundleContext) {
 		assertInitialized();
 		stopServices(); // should be done after preferences shutdown
-		if (platformLog != null)
-			RuntimeLog.removeLogListener(platformLog); // effectively turns the platform logging off
 		initialized = false;
 		closeOSGITrackers();
 		context = null;
@@ -888,6 +890,14 @@ public final class InternalPlatform {
 			environmentTracker.close();
 			environmentTracker = null;
 		}
+		if (logReaderTracker != null) {
+			logReaderTracker.close();
+			logReaderTracker = null;
+		}
+		if (extendedLogTracker != null) {
+			extendedLogTracker.close();
+			extendedLogTracker = null;
+		}
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Log.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Log.java
index cf4871e..edf045f 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Log.java
+++ b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Log.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,17 +13,21 @@ package org.eclipse.core.internal.runtime;
 import java.util.HashSet;
 import java.util.Set;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.log.*;
 import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogEntry;
 
 /**
  * 
  */
-public class Log implements ILog {
-	Bundle bundle;
-	Set logListeners = new HashSet(5);
+public class Log implements ILog, SynchronousLogListener, LogFilter {
+	final Bundle bundle;
+	private final Logger logger;
+	private final Set logListeners = new HashSet(5);
 
-	public Log(Bundle plugin) {
+	public Log(Bundle plugin, Logger logger) {
 		this.bundle = plugin;
+		this.logger = logger;
 	}
 
 	/**
@@ -52,8 +56,27 @@ public class Log implements ILog {
 	 * @see Plugin#getLog()
 	 */
 	public void log(final IStatus status) {
-		// Log to the platform log first in case a listener throws an error.
-		InternalPlatform.getDefault().log(status);
+		// Log to the logger
+		logger.log(PlatformLogWriter.getLog(status), PlatformLogWriter.getLevel(status), status.getMessage(), status.getException());
+	}
+
+	/**
+	 * Removes the given log listener to this log.  Subsequently the log listener will
+	 * no longer receive notification of log events passing through this log.
+	 *
+	 * @see Platform#removeLogListener(ILogListener)
+	 */
+	public void removeLogListener(ILogListener listener) {
+		synchronized (logListeners) {
+			logListeners.remove(listener);
+		}
+	}
+
+	public void logged(LogEntry entry) {
+		logToListeners(PlatformLogWriter.convertToStatus(entry));
+	}
+
+	private void logToListeners(final IStatus status) {
 		// create array to avoid concurrent access
 		ILogListener[] listeners;
 		synchronized (logListeners) {
@@ -74,15 +97,7 @@ public class Log implements ILog {
 		}
 	}
 
-	/**
-	 * Removes the given log listener to this log.  Subsequently the log listener will
-	 * no longer receive notification of log events passing through this log.
-	 *
-	 * @see Platform#removeLogListener(ILogListener)
-	 */
-	public void removeLogListener(ILogListener listener) {
-		synchronized (logListeners) {
-			logListeners.remove(listener);
-		}
+	public boolean isLoggable(Bundle loggingBundle, String loggerName, int logLevel) {
+		return PlatformLogWriter.EQUINOX_LOGGER_NAME.equals(loggerName) && bundle.getBundleId() == loggingBundle.getBundleId();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/PerformanceStatsProcessor.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/PerformanceStatsProcessor.java
index 3d0c1ea..c44d481 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/PerformanceStatsProcessor.java
+++ b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/PerformanceStatsProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.PerformanceStats.PerformanceListener;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.osgi.framework.log.FrameworkLog;
+import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
@@ -45,7 +46,7 @@ public class PerformanceStatsProcessor extends Job {
 	 */
 	private final org.eclipse.core.runtime.ListenerList listeners = new org.eclipse.core.runtime.ListenerList();
 
-	private PlatformLogWriter log;
+	private FrameworkLog log;
 
 	/*
 	 * @see PerformanceStats#addListener
@@ -165,7 +166,7 @@ public class PerformanceStatsProcessor extends Job {
 		//use the platform log if we couldn't create the performance log
 		if (perfLog == null)
 			perfLog = InternalPlatform.getDefault().getFrameworkLog();
-		log = new PlatformLogWriter(perfLog);
+		log = perfLog;
 	}
 
 	/**
@@ -178,7 +179,9 @@ public class PerformanceStatsProcessor extends Job {
 		if (pluginId == null)
 			pluginId = Platform.PI_RUNTIME;
 		String msg = "Performance failure: " + stats.getEvent() + " blame: " + stats.getBlameString() + " context: " + stats.getContext() + " duration: " + elapsed; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		log.logging(new Status(IStatus.WARNING, pluginId, 1, msg, new RuntimeException()), pluginId);
+		Status status = new Status(IStatus.WARNING, pluginId, 1, msg, new RuntimeException());
+		log.log(new FrameworkLogEntry(status, status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), 0, status.getException(), null));
+
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/PlatformLogWriter.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/PlatformLogWriter.java
deleted file mode 100644
index 28b0633..0000000
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/PlatformLogWriter.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.runtime;
-
-import java.util.ArrayList;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.framework.log.FrameworkLog;
-import org.eclipse.osgi.framework.log.FrameworkLogEntry;
-
-/**
- * A log writer that writes log entries.  
- * <p>
- * Note that this class just provides a bridge from the old ILog interface
- * to the OSGi FrameworkLog interface.
- */
-public class PlatformLogWriter implements ILogListener {
-	private final FrameworkLog frameworkLog;
-
-	public PlatformLogWriter(FrameworkLog frameworkLog) {
-		this.frameworkLog = frameworkLog;
-	}
-
-	/**
-	 * @see ILogListener#logging(IStatus, String)
-	 */
-	public synchronized void logging(IStatus status, String plugin) {
-		frameworkLog.log(getLog(status));
-	}
-
-	protected FrameworkLogEntry getLog(IStatus status) {
-		Throwable t = status.getException();
-		ArrayList childlist = new ArrayList();
-
-		int stackCode = t instanceof CoreException ? 1 : 0;
-		// ensure a substatus inside a CoreException is properly logged 
-		if (stackCode == 1) {
-			IStatus coreStatus = ((CoreException) t).getStatus();
-			if (coreStatus != null) {
-				childlist.add(getLog(coreStatus));
-			}
-		}
-
-		if (status.isMultiStatus()) {
-			IStatus[] children = status.getChildren();
-			for (int i = 0; i < children.length; i++) {
-				childlist.add(getLog(children[i]));
-			}
-		}
-
-		FrameworkLogEntry[] children = (FrameworkLogEntry[]) (childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()]));
-
-		return new FrameworkLogEntry(status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), stackCode, t, children);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/ILog.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/ILog.java
index 6d59c23..ee2b9ef 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/ILog.java
+++ b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/ILog.java
@@ -27,7 +27,7 @@ public interface ILog {
 	/**
 	 * Adds the given log listener to this log.  Subsequently the log listener will
 	 * receive notification of all log events passing through this log.
-	 * This method has no affect if the identical listener is already registered on this log.
+	 * This method has no effect if the identical listener is already registered on this log.
 	 *
 	 * @param listener the listener to add to this log
 	 * @see Platform#addLogListener(ILogListener)
@@ -53,7 +53,7 @@ public interface ILog {
 	/**
 	 * Removes the given log listener to this log.  Subsequently the log listener will
 	 * no longer receive notification of log events passing through this log.  
-	 * This method has no affect if the identical listener is not registered on this log.
+	 * This method has no effect if the identical listener is not registered on this log.
 	 *
 	 * @param listener the listener to remove
 	 * @see Platform#removeLogListener(ILogListener)
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Plugin.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Plugin.java
index 0135354..1e6b0f7 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Plugin.java
+++ b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Plugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.net.URL;
 import java.util.Map;
 import org.eclipse.core.internal.runtime.*;
 import org.eclipse.core.runtime.preferences.*;
+import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.service.debug.DebugOptions;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
@@ -387,6 +388,12 @@ public abstract class Plugin implements BundleActivator {
 	 * @deprecated Replaced by InstanceScope.getNode(<bundleId>).flush()
 	 */
 	public final void savePluginPreferences() {
+		
+		Location instance = InternalPlatform.getDefault().getInstanceLocation();
+		if (instance == null || !instance.isSet())
+			// If the instance area is not set there is no point in getting or setting the preferences.
+			// There is nothing to save in this case.
+			return;
 		// populate the "preferences" instance variable. We still might
 		// need to save them because someone else might have
 		// made changes via the OSGi APIs.
diff --git a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Preferences.java b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Preferences.java
index 9dde492..f98e339 100644
--- a/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Preferences.java
+++ b/eclipse/plugins/org.eclipse.core.runtime/src/org/eclipse/core/runtime/Preferences.java
@@ -442,7 +442,7 @@ public class Preferences {
 
 	/**
 	 * Adds a property change listener to this preference object.
-	 * Has no affect if the identical listener is already registered.
+	 * Has no effect if the identical listener is already registered.
 	 * <p>
 	 * <em>Note:</em> Depending on the means in which the property
 	 * values changed, the old and new values for the property can 
@@ -458,7 +458,7 @@ public class Preferences {
 
 	/**
 	 * Removes the given listener from this preference object.
-	 * Has no affect if the listener is not registered.
+	 * Has no effect if the listener is not registered.
 	 *
 	 * @param listener a property change listener
 	 */
diff --git a/eclipse/plugins/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs
index 05664ee..865b860 100644
--- a/eclipse/plugins/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Thu Feb 26 08:16:51 CST 2009
+#Thu Jan 20 17:11:20 CET 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -14,7 +14,7 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
@@ -28,30 +28,35 @@ org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
 org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
@@ -67,9 +72,11 @@ org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -84,6 +91,7 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverridin
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
@@ -92,5 +100,8 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.core.variables/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.core.variables/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..8d877af
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.core.variables/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:57:13 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.core.variables/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.core.variables/META-INF/MANIFEST.MF
index 906536f..6093f5d 100644
--- a/eclipse/plugins/org.eclipse.core.variables/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.core.variables/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.variables; singleton:=true
-Bundle-Version: 3.2.400.qualifier
+Bundle-Version: 3.2.500.qualifier
 Bundle-Activator: org.eclipse.core.variables.VariablesPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.core.variables/schema/valueVariables.exsd b/eclipse/plugins/org.eclipse.core.variables/schema/valueVariables.exsd
index 7dd314c..bff303a 100644
--- a/eclipse/plugins/org.eclipse.core.variables/schema/valueVariables.exsd
+++ b/eclipse/plugins/org.eclipse.core.variables/schema/valueVariables.exsd
@@ -51,7 +51,7 @@
          <attribute name="readOnly" type="boolean">
             <annotation>
                <documentation>
-                  Specifies whether this variable is read only. When true, this variable's value will always be derived from the extension and cannot be edited by the user. When false, this variable's value will be initialized from any <code>initialValue</code> attribtue or initializer class, and can be modified by the user. Once a read-write variable is modified, it's value is persisted and overrides any value specified by an extension's <code>initialValue</code> or initializer class. When unspecified, the value of this attribute is <code>false</code>. This attribute was added in the 3.3 release.
+                  Specifies whether this variable is read only. When true, this variable's value will always be derived from the extension and cannot be edited by the user. When false, this variable's value will be initialized from any <code>initialValue</code> attribtue or initializer class, and can be modified by the user. Once a read-write variable is modified, its value is persisted and overrides any value specified by an extension's <code>initialValue</code> or initializer class. When unspecified, the value of this attribute is <code>false</code>. This attribute was added in the 3.3 release.
                </documentation>
             </annotation>
          </attribute>
@@ -145,7 +145,7 @@ used to initialize the value the first time it's requested.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2003, 2006 IBM Corporation and others.<br>
+         Copyright (c) 2003, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made 
 available under the terms of the Eclipse Public License v1.0 which 
 accompanies this distribution, and is available at 
diff --git a/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/internal/variables/StringVariableManager.java b/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/internal/variables/StringVariableManager.java
index e015008..c847de6 100644
--- a/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/internal/variables/StringVariableManager.java
+++ b/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/internal/variables/StringVariableManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,9 +41,9 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.variables.IDynamicVariable;
 import org.eclipse.core.variables.IStringVariable;
 import org.eclipse.core.variables.IStringVariableManager;
@@ -205,7 +205,7 @@ public class StringVariableManager implements IStringVariableManager, IPreferenc
 			loadContributedValueVariables();
 			loadPersistedValueVariables();
 			loadDynamicVariables();
-			new InstanceScope().getNode(VariablesPlugin.PI_CORE_VARIABLES).addPreferenceChangeListener(this);
+			InstanceScope.INSTANCE.getNode(VariablesPlugin.PI_CORE_VARIABLES).addPreferenceChangeListener(this);
 			fInternalChange = false;
 		}
 	}
@@ -526,7 +526,7 @@ public class StringVariableManager implements IStringVariableManager, IPreferenc
 		}
 		fInternalChange = true;
 		try {
-			IEclipsePreferences prefs = new InstanceScope().getNode(VariablesPlugin.PI_CORE_VARIABLES);
+			IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(VariablesPlugin.PI_CORE_VARIABLES);
 			prefs.put(PREF_VALUE_VARIABLES, variableString);
 			prefs.flush();
 		}
diff --git a/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/variables/IValueVariable.java b/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/variables/IValueVariable.java
index 4b25138..ba4e169 100644
--- a/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/variables/IValueVariable.java
+++ b/eclipse/plugins/org.eclipse.core.variables/src/org/eclipse/core/variables/IValueVariable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@ package org.eclipse.core.variables;
 
 /**
  * A variable with a value that can be set and retrieved. The context in which
- * a value variable is referenced does not effect the value of the variable.
+ * a value variable is referenced does not affect the value of the variable.
  * A value variable can be contributed by an extension or created programmatically.
  * A contributor may optionally specify an initial value for a variable, or
  * provide a delegate that will initialize the variable with a value.
diff --git a/eclipse/plugins/org.eclipse.cvs/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.cvs/META-INF/MANIFEST.MF
index fb9ece3..d58cd72 100644
--- a/eclipse/plugins/org.eclipse.cvs/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.cvs/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.cvs; singleton:=true
-Bundle-Version: 1.0.500.qualifier
+Bundle-Version: 1.1.100.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Eclipse-AutoStart: true
+Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.cvs/about.properties b/eclipse/plugins/org.eclipse.cvs/about.properties
index d77ec24..d7f0c62 100644
--- a/eclipse/plugins/org.eclipse.cvs/about.properties
+++ b/eclipse/plugins/org.eclipse.cvs/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse CVS Client\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/eclipse/platform-cvs
 
diff --git a/eclipse/plugins/org.eclipse.cvs/notice.html b/eclipse/plugins/org.eclipse.cvs/notice.html
index c6af966..dc5aefd 100644
--- a/eclipse/plugins/org.eclipse.cvs/notice.html
+++ b/eclipse/plugins/org.eclipse.cvs/notice.html
@@ -1,79 +1,162 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
+<!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=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head><body lang="EN-US">
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
+<p>February 1, 2011</p>
 
 <h3>Usage Of Content</h3>
 
 <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
    CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
    OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
    NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
    CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-   
-<h3>Applicable Licenses</h3>   
-   
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository ("Repository") in CVS
-   modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-   
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
+
 <ul>
-	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
       and/or Fragments associated with that Feature.</li>
-	<li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>   
- 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
 including, but not limited to the following locations:</p>
 
 <ul>
-	<li>The top-level (root) directory</li>
-	<li>Plug-in and Fragment directories</li>
-	<li>Inside Plug-ins and Fragments packaged as JARs</li>
-	<li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-	<li>Feature directories</li>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
 </ul>
-		
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
 that directory.</p>
 
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
 OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
 
 <ul>
-	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
-	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
 </ul>
 
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
+</ol>
 
 <h3>Cryptography</h3>
 
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-   
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
-</body>
-</html>
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body></html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs
index 0cf89c0..01626ca 100644
--- a/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Thu Feb 26 08:13:04 CST 2009
+#Thu Jan 20 17:00:23 CET 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -29,20 +29,21 @@ org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
@@ -50,10 +51,13 @@ org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
 org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
@@ -69,9 +73,11 @@ org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -86,6 +92,7 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverridin
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
diff --git a/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.launching.prefs
index f2a3bc3..ce641cd 100644
--- a/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.launching.prefs
+++ b/eclipse/plugins/org.eclipse.debug.core/.settings/org.eclipse.jdt.launching.prefs
@@ -1,3 +1,3 @@
-#Thu Feb 26 08:13:04 CST 2009
+#Wed Feb 02 16:46:33 CET 2011
 eclipse.preferences.version=1
-org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.debug.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.debug.core/META-INF/MANIFEST.MF
index 7d68a22..c75aecf 100644
--- a/eclipse/plugins/org.eclipse.debug.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.debug.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.debug.core; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.debug.core.DebugPlugin
 Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.debug.core/buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/buildnotes_platform-debug.html
deleted file mode 100644
index fda3b85..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/buildnotes_platform-debug.html
+++ /dev/null
@@ -1,96 +0,0 @@
-	<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-<h1>Eclipse 3.6 Debug Platform Build Notes</h1>
-
-<h2>Summary of API changes in 3.6</h2>
-
-<h3>AbstractLaunchHistoryAction</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Method addition: <code>public void runWithEvent(IAction action, Event event)</code> </li>
-  <li>Method addition: <code>public void init(IAction action)</code> </li>
-  <li>Implemented Interface: <code>org.eclipse.ui.IActionDelegate2</code></li>
-</ul>
-<p><strong>Description: </strong>The implementation of <code>org.eclipse.ui.IActionDelegate2</code> and the addition of the two implemented
-methods allows for the Ctrl key modifier to be used to open the last launched launch configuration when clicking on any launch history action.
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>ILaunchManager</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Method addition: <code>public String generateLaunchConfigurationName(String namePrefix)</code> </li>
-  <li>Method addition: <code>public boolean isValidLaunchConfigurationName(String configname) throws IllegalArgumentException</code> </li>
-  <li>Constant addition: <code>public static final String ATTR_PRIVATE</code></li>
-</ul>
-<p><strong>Description: </strong>The <code>generateLaunchConfigurationName(String namePrefix)</code> method is a replacement for the traditional <code>generateUniqueLaunchConfigurationNameFrom(configname)</code> method - which has been deprecated. 
-The new method behaves the same as its predecessor but also provides error checking on the new name to ensure it does not use any system reserved characters or names, like <code>com</code> on Windows for example. If an invalid name or character is found
-the method makes an effort to correct the name in one of two ways:
-<ul>
-<li>If an invalid name is given the configuration will be renamed to <code>launch_configuration</code></li>
-<li>Any invalid characters found will be replaced with <code>_</code></li>
-</ul>
-<strong>Action required:</strong> This is a backwards compatible change. No action required.
-</p>
-<p>
-<strong>Description:</strong> The <code>isValidLaunchConfigurationName(String configname)</code> method is used to validate the specified configuration name and throws an <code>IllegalArgumentException</code>. This method provides
-the validation for the <code>generateLaunchConfigurationName(String namePrefix)</code> method.</p>
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-<p><strong>Description:</strong> The <code>ATTR_PRIVATE</code> constant is a launch configuration attribute key used to identify whether a launch configuration should appear in the debug user interface (launch history, launch dialog, etc.). The value is a boolean. This attribute was previously defined in the debug UI plug-in, but was moved to core for headless plug-is that need to specify a value for this attribute. </p>
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>DebugCommandAction base class</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Class addition: <code>org.eclipse.debug.ui.actions.DebugCommandAction</code> </li>
-  <li>Class addition: <code>org.eclipse.debug.ui.actions.DebugCommandHandler</code> </li>
-  <li>Class addition: <code>org.eclipse.debug.core.commands.AbstractDebugCommand</code></li>
-</ul>
-<p><strong>Description:</strong>The <code>IDebugCommandHandler</code> interface allows debugger to implement debug action handlers which execute asynchronously.  Most of the debugger actions user this interface to communicate with the debug model.  However, debuggers which need to add their own asynchronous actions had to duplicate the debug framework actions which invoke the <code>IDebugCommandHandler</code> handlers.  <code>DebugCommandAction</code> and <code>DebugCommandHandler</code> are base classes which can be extended by debuggers to implement new types of actions with asynchronous execution handlers.  Also, this change includes a standard base class <code>AbstractDebugCommand</code> to help implement the <code>IDebugCommandHandler</code> interface.</p>
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>IRestartHandler</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Interface addition: <code>org.eclipse.debug.core.commands.IRestartHandler</code></li>
-</ul>
-<p><strong>Description:</strong>The <code>IRestartHandler</code> interface enables a new "Restart" command.  If a debugger supplies the <code>IRestartHandler</code> as an adapter to debug model elements, the new Restart command will be enabled.  The restart command appears in the Debug view context menu and can be configured as a short cut.</p>
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>RefreshUtil</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Class addition: <code>org.eclipse.debug.core.RefreshUtil</code></li>
-</ul>
-<p><strong>Description:</strong>The <code>RefreshUtil</code> class provides API to create and restore mementos for resource collections as well as a convenience API for refreshing resources. This support was moved to <code>org.eclipse.debug.core</code> from <code>org.eclispe.debug.ui</code> such that headless plug-ins can leverage these features. </p>
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>Launch Time Stamps</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Constant addition: <code>DebugPlugin - public static final String ATTR_LAUNCH_TIMESTAMP</code></li>
-</ul>
-<p><strong>Description:</strong>A time stamp value is added to all launch objects representing the time a
- launch configuration's <code>launch(...)</code> method was called. The value of the launch attribute is a 
- <code>String</code> representing a <code>long</code> generated from <code>System.currentTimeMillis()</code>. The attribute value
- can be obtained from <code>ILaunch.getAttrbute(DebugPlugin.ATTR_LAUNCH_TIMESTAMP)</code>.
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>IDetailPane3</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Interface addition: <code>org.eclipse.debug.ui.IDetailPane3</code></li>
-</ul>
-<p><strong>Description:</strong>An optional interface that detail pane extensions may implement in order
- to interact with the containing part's <code>ISaveablePart</code> function.
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<p> </p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java
index d3869d2..7b9d27b 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,9 +26,17 @@ import javax.xml.parsers.FactoryConfigurationError;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
-import org.eclipse.core.resources.ISaveContext;
-import org.eclipse.core.resources.ISaveParticipant;
-import org.eclipse.core.resources.ResourcesPlugin;
+import com.ibm.icu.text.MessageFormat;
+
+import org.osgi.framework.BundleContext;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.eclipse.osgi.service.environment.Constants;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IAdapterManager;
@@ -44,6 +52,11 @@ import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+
+import org.eclipse.core.resources.ISaveContext;
+import org.eclipse.core.resources.ISaveParticipant;
+import org.eclipse.core.resources.ResourcesPlugin;
+
 import org.eclipse.debug.core.model.IDebugElement;
 import org.eclipse.debug.core.model.IDisconnect;
 import org.eclipse.debug.core.model.IDropToFrame;
@@ -67,14 +80,6 @@ import org.eclipse.debug.internal.core.Preferences;
 import org.eclipse.debug.internal.core.StepFilterManager;
 import org.eclipse.debug.internal.core.commands.CommandAdapterFactory;
 import org.eclipse.debug.internal.core.sourcelookup.SourceLookupUtils;
-import org.eclipse.osgi.service.environment.Constants;
-import org.osgi.framework.BundleContext;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import com.ibm.icu.text.MessageFormat;
 
 /**
  * There is one instance of the debug plug-in available from
@@ -279,6 +284,26 @@ public class DebugPlugin extends Plugin {
 	public static final String ATTR_CONSOLE_ENCODING = "org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING"; //$NON-NLS-1$
 	
 	/**
+	 * Boolean preference key (value <code>org.eclipse.debug.core.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE</code>) that controls
+	 * whether to delete associated configurations when a project is deleted. Default value is <code>false</code>.
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREF_DELETE_CONFIGS_ON_PROJECT_DELETE = DebugPlugin.getUniqueIdentifier() + ".PREF_DELETE_CONFIGS_ON_PROJECT_DELETE"; //$NON-NLS-1$
+
+	/**
+	 * Deleted breakpoint marker attribute (value
+	 * <code>"org.eclipse.debug.core.breakpointIsDeleted"</code>). The attribute is a
+	 * <code>boolean</code> corresponding to the deleted state of a breakpoint.
+	 * 
+	 * @see org.eclipse.core.resources.IMarker#getAttribute(String, boolean)
+	 * @since 3.7
+	 */
+	public static final String ATTR_BREAKPOINT_IS_DELETED= DebugPlugin.getUniqueIdentifier() + ".breakpointIsDeleted"; //$NON-NLS-1$
+
+
+	
+	/**
 	 * The singleton debug plug-in instance.
 	 */
 	private static DebugPlugin fgDebugPlugin= null;
@@ -632,6 +657,9 @@ public class DebugPlugin extends Plugin {
 		ResourcesPlugin.getWorkspace().addSaveParticipant(getUniqueIdentifier(),
 				new ISaveParticipant() {
 					public void saving(ISaveContext saveContext) throws CoreException {
+						if (fExpressionManager != null) {
+							fExpressionManager.storeWatchExpressions();
+						}
 						Preferences.savePreferences(DebugPlugin.getUniqueIdentifier());
 					}				
 					public void rollback(ISaveContext saveContext) {}
@@ -1401,6 +1429,10 @@ public class DebugPlugin extends Plugin {
 				if (adapter == null && !(element instanceof PlatformObject)) {
 	                adapter = Platform.getAdapterManager().getAdapter(element, type);
 				}
+				// force load the adapter in case it really is available
+				if (adapter == null) {
+					adapter = Platform.getAdapterManager().loadAdapter(element, type.getName());
+				}
 			}
     	}
     	return adapter;		
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java
index 811a89f..b6df853 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/ILaunchConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ public interface ILaunchConfiguration extends IAdaptable {
 	 * working copy does not refer back to this configuration
 	 * as its original launch configuration (the working copy
 	 * will return <code>null</code> for <code>getOriginal()</code>).
-	 * When the working copy is saved it will not effect this
+	 * When the working copy is saved it will not affect this
 	 * launch configuration.
 	 * 
 	 * @param name the name of the copy
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugTarget.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugTarget.java
index 35c21b6..dee67fb 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugTarget.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/core/model/IDebugTarget.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,7 +87,7 @@ public interface IDebugTarget extends IDebugElement, ITerminate, ISuspendResume,
 	/**
 	 * Returns whether this target can install the given breakpoint. 
 	 * 
-	 * @param breakpoint breakpoing to consider
+	 * @param breakpoint breakpoint to consider
 	 * @return whether this target can install the given breakpoint
 	 */
 	public boolean supportsBreakpoint(IBreakpoint breakpoint);
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
index a369fad..c7f12a8 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -21,17 +21,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
 
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IMarkerDelta;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
+import com.ibm.icu.text.MessageFormat;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
@@ -43,6 +34,19 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.IBreakpointListener;
@@ -52,8 +56,6 @@ import org.eclipse.debug.core.IBreakpointsListener;
 import org.eclipse.debug.core.model.IBreakpoint;
 import org.eclipse.debug.core.model.IBreakpointImportParticipant;
 
-import com.ibm.icu.text.MessageFormat;
-
 /**
  * The breakpoint manager manages all registered breakpoints
  * for the debug plug-in. It is instantiated by the debug plug-in at startup.
@@ -671,6 +673,13 @@ public class BreakpointManager implements IBreakpointManager, IResourceChangeLis
 		 * Removed breakpoints
 		 */
 		private List fRemoved = new ArrayList();
+		
+		/**
+		 * Added breakpoints.
+		 * @since 3.7
+		 */
+		private List fAdded= new ArrayList();
+
 		/**
 		 * Changed breakpoints and associated marker deltas
 		 */
@@ -684,6 +693,7 @@ public class BreakpointManager implements IBreakpointManager, IResourceChangeLis
 		protected void reset() {
 			fMoved.clear();
 			fRemoved.clear();
+			fAdded.clear();
 			fChanged.clear();
 			fChangedDeltas.clear();
 		}
@@ -715,6 +725,24 @@ public class BreakpointManager implements IBreakpointManager, IResourceChangeLis
 					DebugPlugin.log(e);
 				}
 			}
+			if (!fAdded.isEmpty()) {
+				try {
+					IWorkspaceRunnable runnable= new IWorkspaceRunnable() {
+						public void run(IProgressMonitor monitor) throws CoreException {
+							Iterator iter= fAdded.iterator();
+							while (iter.hasNext()) {
+								IBreakpoint breakpoint= (IBreakpoint)iter.next();
+								breakpoint.getMarker().setAttribute(DebugPlugin.ATTR_BREAKPOINT_IS_DELETED, false);
+								breakpoint.setRegistered(true);
+							}
+						}
+					};
+					getWorkspace().run(runnable, null, 0, null);
+					addBreakpoints((IBreakpoint[])fAdded.toArray(new IBreakpoint[fAdded.size()]), false);
+				} catch (CoreException e) {
+					DebugPlugin.log(e);
+				}
+			}
 			if (!fChanged.isEmpty()) {
 				fireUpdate(fChanged, fChangedDeltas, CHANGED);
 			}
@@ -770,6 +798,12 @@ public class BreakpointManager implements IBreakpointManager, IResourceChangeLis
 					if (fPostChangMarkersChanged.contains(marker)) {
 						handleChangeBreakpoint(marker, mDelta);
 						fPostChangMarkersChanged.remove(marker);
+					} else if (marker.getAttribute(DebugPlugin.ATTR_BREAKPOINT_IS_DELETED, false) && getBreakpoint(marker) == null) {
+						try {
+							fAdded.add(createBreakpoint(marker));
+						} catch (CoreException e) {
+							DebugPlugin.log(e);
+						}
 					}
 					fPostBuildMarkersAdded.add(marker);
 				}
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugPreferenceInitializer.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugPreferenceInitializer.java
index 9e28969..c2b7479 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/DebugPreferenceInitializer.java
@@ -27,7 +27,7 @@ public class DebugPreferenceInitializer extends AbstractPreferenceInitializer {
 		// Step filter preferences
 		Preferences.setDefaultBoolean(DebugPlugin.getUniqueIdentifier(), StepFilterManager.PREF_USE_STEP_FILTERS, false);
 		//launch configurations preferences
-		Preferences.setDefaultBoolean(DebugPlugin.getUniqueIdentifier(), LaunchManager.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, true);
+		Preferences.setDefaultBoolean(DebugPlugin.getUniqueIdentifier(), DebugPlugin.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, false);
 		Preferences.setDefaultBoolean(DebugPlugin.getUniqueIdentifier(), IInternalDebugCoreConstants.PREF_ENABLE_STATUS_HANDLERS, true);
 		Preferences.setDefaultBoolean(DebugPlugin.getUniqueIdentifier(), IInternalDebugCoreConstants.PREF_BREAKPOINT_MANAGER_ENABLED_STATE, true);
 		Preferences.savePreferences(DebugPlugin.getUniqueIdentifier());
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java
index 17d3b61..5b0360c 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/ExpressionManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -263,33 +263,41 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 	 * @see org.eclipse.debug.core.IExpressionManager#addExpressions(org.eclipse.debug.core.model.IExpression[])
 	 */
 	public void addExpressions(IExpression[] expressions) {
-		if (fExpressions == null) {
-			fExpressions = new Vector(expressions.length);
-		}
-		boolean addedWatchExpression= false;
-		List added = new ArrayList(expressions.length);
-		for (int i = 0; i < expressions.length; i++) {
-			IExpression expression = expressions[i];
-			if (fExpressions.indexOf(expression) == -1) {
-				added.add(expression);
-				fExpressions.add(expression);
-				if (expression instanceof IWatchExpression) {
-					addedWatchExpression= true;
-				}
-			}				
-		}
+		List added = doAdd(expressions);
 		if (!added.isEmpty()) {
 			fireUpdate((IExpression[])added.toArray(new IExpression[added.size()]), ADDED);
 		}
-		if (addedWatchExpression) {
-			storeWatchExpressions();
+	}
+	
+	/**
+	 * Adds the given expressions to the list of managed expressions, and returns a list
+	 * of expressions that were actually added. Expressions that already exist in the
+	 * managed list are not added.
+	 * 
+	 * @param expressions expressions to add
+	 * @return list of expressions that were actually added.
+	 */
+	private List doAdd(IExpression[] expressions) {
+		List added = new ArrayList(expressions.length);
+		synchronized (this) {
+			if (fExpressions == null) {
+				fExpressions = new Vector(expressions.length);
+			}
+			for (int i = 0; i < expressions.length; i++) {
+				IExpression expression = expressions[i];
+				if (fExpressions.indexOf(expression) == -1) {
+					added.add(expression);
+					fExpressions.add(expression);
+				}				
+			}
 		}
+		return added;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.IExpressionManager#getExpressions()
 	 */
-	public IExpression[] getExpressions() {
+	public synchronized IExpression[] getExpressions() {
 		if (fExpressions == null) {
 			return new IExpression[0];
 		}
@@ -301,7 +309,7 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.IExpressionManager#getExpressions(java.lang.String)
 	 */
-	public IExpression[] getExpressions(String modelIdentifier) {
+	public synchronized IExpression[] getExpressions(String modelIdentifier) {
 		if (fExpressions == null) {
 			return new IExpression[0];
 		}
@@ -331,38 +339,37 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 	 * @since 3.4
 	 */
 	public void insertExpressions(IExpression[] expressions, IExpression insertionLocation, boolean insertBefore){
-		if (fExpressions == null) {
-			addExpressions(expressions);
-			return;
-		}
-		
-		int insertionIndex = fExpressions.indexOf(insertionLocation);
-		if (insertionIndex < 0){
-			addExpressions(expressions);
-			return;
-		}
-		if (!insertBefore){
-			insertionIndex++;
-		}
-		boolean addedWatchExpression = false;
-		List added = new ArrayList(expressions.length);
-		for (int i = 0; i < expressions.length; i++) {
-			IExpression expression = expressions[i];
-			if (fExpressions.indexOf(expression) == -1) {
-				//Insert in the same order as the array is passed
-				fExpressions.add(insertionIndex+added.size(), expression);
-				added.add(expression);
-				if (expression instanceof IWatchExpression) {
-					addedWatchExpression= true;
+		List added = null;
+		List inserted = null;
+		int insertionIndex = -1;
+		synchronized (this) {
+			if (fExpressions == null || ((insertionIndex = fExpressions.indexOf(insertionLocation)) < 0)) {
+				added = doAdd(expressions);
+			} else {
+				if (!insertBefore){
+					insertionIndex++;
 				}
-			}				
+				inserted = new ArrayList(expressions.length);
+				for (int i = 0; i < expressions.length; i++) {
+					IExpression expression = expressions[i];
+					if (fExpressions.indexOf(expression) == -1) {
+						//Insert in the same order as the array is passed
+						fExpressions.add(insertionIndex+inserted.size(), expression);
+						inserted.add(expression);
+					}				
+				}
+			}
 		}
-		
-		if (!added.isEmpty()) {
-			fireUpdate((IExpression[])added.toArray(new IExpression[added.size()]), INSERTED, insertionIndex);
+		if (added != null) {
+			if (!added.isEmpty()) {
+				fireUpdate((IExpression[])added.toArray(new IExpression[added.size()]), ADDED);
+			}
+			return;
 		}
-		if (addedWatchExpression) {
-			storeWatchExpressions();
+		if (inserted != null) {
+			if (!inserted.isEmpty()) {
+				fireUpdate((IExpression[])inserted.toArray(new IExpression[inserted.size()]), INSERTED, insertionIndex);
+			}
 		}
 	}
 	
@@ -379,37 +386,40 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 	 * @since 3.4
 	 */
 	public void moveExpressions(IExpression[] expressions, IExpression insertionLocation, boolean insertBefore){
-		if (fExpressions == null){
-			return;
-		}
-		int insertionIndex = fExpressions.indexOf(insertionLocation);
-		if (insertionIndex < 0){
-			return;
-		}
-		if (!insertBefore){
-			insertionIndex++;
-		}
-		
 		List movedExpressions = new ArrayList(expressions.length);
-		for (int i = 0; i < expressions.length; i++) {
-			int removeIndex = fExpressions.indexOf(expressions[i]);
-			if (removeIndex >= 0){
-				movedExpressions.add(expressions[i]);
-				if (removeIndex < insertionIndex){
-					insertionIndex--;
+		int insertionIndex = -1;
+		IExpression[] movedExpressionsArray = null;
+		synchronized (this) {
+			if (fExpressions == null){
+				return;
+			}
+			insertionIndex = fExpressions.indexOf(insertionLocation);
+			if (insertionIndex < 0){
+				return;
+			}
+			if (!insertBefore){
+				insertionIndex++;
+			}
+			
+			for (int i = 0; i < expressions.length; i++) {
+				int removeIndex = fExpressions.indexOf(expressions[i]);
+				if (removeIndex >= 0){
+					movedExpressions.add(expressions[i]);
+					if (removeIndex < insertionIndex){
+						insertionIndex--;
+					}
+					fExpressions.remove(removeIndex);
 				}
-				fExpressions.remove(removeIndex);
 			}
-		}
-		IExpression[] movedExpressionsArray = (IExpression[])movedExpressions.toArray(new IExpression[movedExpressions.size()]);
-		for (int i = 0; i < movedExpressionsArray.length; i++) {
-			// Insert the expressions in the same order as the passed array
-			fExpressions.add(insertionIndex+i,movedExpressionsArray[i]);
+			movedExpressionsArray = (IExpression[])movedExpressions.toArray(new IExpression[movedExpressions.size()]);
+			for (int i = 0; i < movedExpressionsArray.length; i++) {
+				// Insert the expressions in the same order as the passed array
+				fExpressions.add(insertionIndex+i,movedExpressionsArray[i]);
+			}
 		}
 				
 		if (!movedExpressions.isEmpty()) {
 			fireUpdate(movedExpressionsArray, MOVED, insertionIndex);
-			storeWatchExpressions();
 		}
 	}
 	
@@ -424,20 +434,25 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 	 * @see org.eclipse.debug.core.IExpressionManager#removeExpressions(org.eclipse.debug.core.model.IExpression[])
 	 */
 	public void removeExpressions(IExpression[] expressions) {
-		if (fExpressions == null) {
-			return;
-		}
 		List removed = new ArrayList(expressions.length);
-		for (int i = 0; i < expressions.length; i++) {
-			IExpression expression = expressions[i];
-			if (fExpressions.remove(expression)) {
-				removed.add(expression);
-				expression.dispose();
-			}				
+		synchronized (this) {
+			if (fExpressions == null) {
+				return;
+			}
+			for (int i = 0; i < expressions.length; i++) {
+				IExpression expression = expressions[i];
+				if (fExpressions.remove(expression)) {
+					removed.add(expression);
+				}				
+			}			
+		}
+		// dispose outside of the synchronized block
+		Iterator iterator = removed.iterator();
+		while (iterator.hasNext()) {
+			((IExpression) iterator.next()).dispose();
 		}
 		if (!removed.isEmpty()) {
 			fireUpdate((IExpression[])removed.toArray(new IExpression[removed.size()]), REMOVED);
-			storeWatchExpressions();
 		}
 	}	
 	
@@ -468,11 +483,14 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 	 * @param expression the changed expression
 	 * @param persist whether to persist the expressions
 	 */
-	protected void watchExpressionChanged(IWatchExpression expression, boolean persist) {
-		if (fExpressions != null && fExpressions.contains(expression)) {
-			if (persist) {
-				storeWatchExpressions();
+	protected void watchExpressionChanged(IWatchExpression expression) {
+		boolean notify = false;
+		synchronized (this) {
+			if (fExpressions != null && fExpressions.contains(expression)) {
+				notify = true;
 			}
+		}
+		if (notify) {
 			fireUpdate(new IExpression[]{expression}, CHANGED);
 		}
 	}
@@ -505,7 +523,7 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.IExpressionManager#hasExpressions()
 	 */
-	public boolean hasExpressions() {
+	public synchronized boolean hasExpressions() {
 		return fExpressions != null && !fExpressions.isEmpty();
 	}
 
@@ -557,6 +575,7 @@ public class ExpressionManager extends PlatformObject implements IExpressionMana
 		public void run() throws Exception {
 			switch (fType) {
 				case ADDED:
+				case INSERTED:
 					fListener.expressionAdded(fExpression);
 					break;
 				case REMOVED:
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java
index 3f6e6ae..11344dd 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -181,8 +181,9 @@ public class LaunchConfiguration extends PlatformObject implements ILaunchConfig
 	 * @since 3.5
 	 */
 	protected static String getSimpleName(String fileName) {
-		if (fileName.endsWith(ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION)) {
-			return fileName.substring(0, fileName.length() - ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION.length() - 1);
+		IPath path = new Path(fileName);
+		if(ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION.equals(path.getFileExtension())) {
+			return path.removeFileExtension().toString();
 		}
 		return fileName;
 	}
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java
index 6780dfd..29174c1 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchManager.java
@@ -139,14 +139,7 @@ public class LaunchManager extends PlatformObject implements ILaunchManager, IRe
      * @since 3.3
      */
 	protected static final String PREF_PREFERRED_DELEGATES = DebugPlugin.getUniqueIdentifier() + ".PREFERRED_DELEGATES"; //$NON-NLS-1$
-	
-	/**
-	 * Boolean preference on whether to delete associated configurations when a project is deleted.
-	 * 
-	 * @since 3.3
-	 */
-	public static final String PREF_DELETE_CONFIGS_ON_PROJECT_DELETE = DebugPlugin.getUniqueIdentifier() + ".PREF_DELETE_CONFIGS_ON_PROJECT_DELETE"; //$NON-NLS-1$
-	
+		
 	/**
 	 * Constant to define debug.ui for the status codes
 	 * 
@@ -2038,7 +2031,7 @@ public class LaunchManager extends PlatformObject implements ILaunchManager, IRe
 	 * @return whether to auto-delete configurations
 	 */
 	private boolean isDeleteConfigurations() {
-		return Platform.getPreferencesService().getBoolean(DebugPlugin.getUniqueIdentifier(), PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, true, null);
+		return Platform.getPreferencesService().getBoolean(DebugPlugin.getUniqueIdentifier(), DebugPlugin.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, true, null);
 	}
 	
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/Preferences.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/Preferences.java
index 3268363..5fc5fd9 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/Preferences.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/Preferences.java
@@ -1,415 +1,417 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.debug.internal.core;
-
-import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IScopeContext;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.debug.core.DebugPlugin;
-import org.osgi.service.prefs.BackingStoreException;
-
-/**
- * Convenience class to facilitate using the new {@link IEclipsePreferences} story
- * 
- * @since 3.6
- * @noinstantiate This class is not intended to be instantiated by clients.
- */
-public final class Preferences {
-
-	static final IScopeContext[] contexts = new IScopeContext[] {new DefaultScope(), new InstanceScope()}; 
-	
-	static final int DEFAULT_CONTEXT = 0;
-	static final int INSTANCE_CONTEXT = 1;
-	
-	/**
-	 * Constructor
-	 */
-	private Preferences() {
-		// no direct instantiation
-	}
-	
-	/**
-	 * Sets a string preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
-	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
-	 * @param qualifier 
-	 * @param key the key
-	 * @param value the value
-	 * @param context
-	 */
-	public static synchronized void setString(String qualifier, String key, String value, IScopeContext context) {
-		if(context != null) {
-			try {
-				IEclipsePreferences node = context.getNode(qualifier);
-				node.put(key, value);
-				node.flush();
-			}
-			catch(BackingStoreException bse) {
-				DebugPlugin.log(bse);
-			}
-		}
-		else {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).put(key, value);
-		}
-	}
-	
-	/**
-	 * Sets a boolean preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
-	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
-	 * @param qualifier 
-	 * @param key the key
-	 * @param value the value
-	 * @param context
-	 */
-	public static synchronized void setBoolean(String qualifier, String key, boolean value, IScopeContext context) {
-		if(context != null) {
-			try {
-				IEclipsePreferences node = context.getNode(qualifier);
-				node.putBoolean(key, value);
-				node.flush();
-			}
-			catch(BackingStoreException bse) {
-				DebugPlugin.log(bse);
-			}
-		}
-		else {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).putBoolean(key, value);
-		}
-	}
-	
-	/**
-	 * Sets a integer preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
-	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the value
-	 * @param context
-	 */
-	public static synchronized void setInt(String qualifier, String key, int value, IScopeContext context) {
-		if(context != null) {
-			try {
-				IEclipsePreferences node = context.getNode(qualifier);
-				node.putInt(key, value);
-				node.flush();
-			}
-			catch(BackingStoreException bse) {
-				DebugPlugin.log(bse);
-			}
-		}
-		else {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).putInt(key, value);
-		}
-	}
-	
-	/**
-	 * Sets a long preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
-	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the value
-	 * @param context
-	 */
-	public static synchronized void setLong(String qualifier, String key, long value, IScopeContext context) {
-		if(context != null) {
-			try {
-				IEclipsePreferences node = context.getNode(qualifier);
-				node.putLong(key, value);
-				node.flush();
-			}
-			catch(BackingStoreException bse) {
-				DebugPlugin.log(bse);
-			}
-		}
-		else {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).putLong(key, value);
-		}
-	}
-	
-	/**
-	 * Sets a byte array preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
-	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the value
-	 * @param context
-	 */
-	public static synchronized void setByteArray(String qualifier, String key, byte[] value, IScopeContext context) {
-		if(context != null) {
-			try {
-				IEclipsePreferences node = context.getNode(qualifier);
-				node.putByteArray(key, value);
-				node.flush();
-			}
-			catch(BackingStoreException bse) {
-				DebugPlugin.log(bse);
-			}
-		}
-		else {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).putByteArray(key, value);
-		}
-	}
-	
-	/**
-	 * Sets a double preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
-	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the value
-	 * @param context
-	 */
-	public static synchronized void setDouble(String qualifier, String key, double value, IScopeContext context) {
-		if(context != null) {
-			try {
-				IEclipsePreferences node = context.getNode(qualifier);
-				node.putDouble(key, value);
-				node.flush();
-			}
-			catch(BackingStoreException bse) {
-				DebugPlugin.log(bse);
-			}
-		}
-		else {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).putDouble(key, value);
-		}
-	}
-	
-	/**
-	 * Sets a float preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
-	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the value
-	 * @param context
-	 */
-	public static synchronized void setFloat(String qualifier, String key, float value, IScopeContext context) {
-		if(context != null) {
-			try {
-				IEclipsePreferences node = context.getNode(qualifier);
-				node.putFloat(key, value);
-				node.flush();
-			}
-			catch(BackingStoreException bse) {
-				DebugPlugin.log(bse);
-			}
-		}
-		else {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).putFloat(key, value);
-		}
-	}
-	
-	/**
-	 * Sets a string in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the new value
-	 */
-	public static synchronized void setDefaultString(String qualifier, String key, String value) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).put(key, value);
-	}
-	
-	/**
-	 * Sets a boolean in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the new value
-	 */
-	public static synchronized void setDefaultBoolean(String qualifier, String key, boolean value) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).putBoolean(key, value);
-	}
-	
-	/**
-	 * Sets a byte array in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the new value
-	 */
-	public static synchronized void setDefaultByteArray(String qualifier, String key, byte[] value) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).putByteArray(key, value);
-	}
-	
-	/**
-	 * Sets a double in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the new value
-	 */
-	public static synchronized void setDefaultDouble(String qualifier, String key, double value) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).putDouble(key, value);
-	}
-	
-	/**
-	 * Sets a float in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the new value
-	 */
-	public static synchronized void setDefaultFloat(String qualifier, String key, float value) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).putFloat(key, value);
-	}
-	
-	/**
-	 * Sets a integer in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the new value
-	 */
-	public static synchronized void setDefaultInt(String qualifier, String key, int value) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).putInt(key, value);
-	}
-	
-	/**
-	 * Sets a long in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key the key
-	 * @param value the new value
-	 */
-	public static synchronized void setDefaultLong(String qualifier, String key, long value) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).putLong(key, value);
-	}
-	
-	/**
-	 * Sets the given preference to its default value. This is done by removing any set value
-	 * from the {@link InstanceScope}. Has no effect if the given key is <code>null</code>.
-	 * @param qualifier
-	 * @param key the key for the preference
-	 */
-	public static synchronized void setToDefault(String qualifier, String key) {
-		if(key != null) {
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).remove(key);
-		}
-	}
-	
-	/**
-	 * Returns the default boolean value stored in the {@link DefaultScope} for the given key
-	 * or the specified default value if the key does not appear in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key
-	 * @param defaultvalue
-	 * 
-	 * @return the boolean value set in the {@link DefaultScope} for the given key, or the specified default value.
-	 */
-	public static synchronized boolean getDefaultBoolean(String qualifier, String key, boolean defaultvalue) {
-		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getBoolean(key, defaultvalue);
-	}
-	
-	/**
-	 * Returns the default string value stored in the {@link DefaultScope} for the given key
-	 * or the specified default value if the key does not appear in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key
-	 * @param defaultvalue
-	 * 
-	 * @return the string value set in the {@link DefaultScope} for the given key, or the specified default value.
-	 */
-	public static synchronized String getDefaultString(String qualifier, String key, String defaultvalue) {
-		return contexts[DEFAULT_CONTEXT].getNode(qualifier).get(key, defaultvalue);
-	}
-	
-	/**
-	 * Returns the default byte array value stored in the {@link DefaultScope} for the given key
-	 * or the specified default value if the key does not appear in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key
-	 * @param defaultvalue
-	 * 
-	 * @return the byte array value set in the {@link DefaultScope} for the given key, or the specified default value.
-	 */
-	public static synchronized byte[] getDefaultByteArray(String qualifier, String key, byte[] defaultvalue) {
-		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getByteArray(key, defaultvalue);
-	}
-	
-	/**
-	 * Returns the default integer value stored in the {@link DefaultScope} for the given key
-	 * or the specified default value if the key does not appear in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key
-	 * @param defaultvalue
-	 * 
-	 * @return the integer value set in the {@link DefaultScope} for the given key, or the specified default value.
-	 */
-	public static synchronized int getDefaultInt(String qualifier, String key, int defaultvalue) {
-		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getInt(key, defaultvalue);
-	}
-	
-	/**
-	 * Returns the default long value stored in the {@link DefaultScope} for the given key
-	 * or the specified default value if the key does not appear in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key
-	 * @param defaultvalue
-	 * 
-	 * @return the long value set in the {@link DefaultScope} for the given key, or the specified default value.
-	 */
-	public static synchronized long getDefaultLong(String qualifier, String key, long defaultvalue) {
-		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getLong(key, defaultvalue);
-	}
-	
-	/**
-	 * Returns the default double value stored in the {@link DefaultScope} for the given key
-	 * or the specified default value if the key does not appear in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key
-	 * @param defaultvalue
-	 * 
-	 * @return the double value set in the {@link DefaultScope} for the given key, or the specified default value.
-	 */
-	public static synchronized double getDefaultDouble(String qualifier, String key, double defaultvalue) {
-		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getDouble(key, defaultvalue);
-	}
-	
-	/**
-	 * Returns the default float value stored in the {@link DefaultScope} for the given key
-	 * or the specified default value if the key does not appear in the {@link DefaultScope}
-	 * @param qualifier
-	 * @param key
-	 * @param defaultvalue
-	 * 
-	 * @return the float value set in the {@link DefaultScope} for the given key, or the specified default value.
-	 */
-	public static synchronized float getDefaultFloat(String qualifier, String key, float defaultvalue) {
-		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getFloat(key, defaultvalue);
-	}
-	
-	/**
-	 * Save the preferences for the given plugin identifier.
-	 * It should be noted that all pending preference changes will be flushed with this method.
-	 * @param qualifier
-	 */
-	public static synchronized void savePreferences(String qualifier) {
-		try {
-			contexts[DEFAULT_CONTEXT].getNode(qualifier).flush();
-			contexts[INSTANCE_CONTEXT].getNode(qualifier).flush();
-		}
-		catch(BackingStoreException bse) {
-			DebugPlugin.log(bse);
-		}
-	}
-	
-	/**
-	 * Adds the given preference listener to the {@link DefaultScope} and the {@link InstanceScope}
-	 * @param qualifier
-	 * @param listener
-	 */
-	public static void addPreferenceListener(String qualifier, IEclipsePreferences.IPreferenceChangeListener listener) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).addPreferenceChangeListener(listener);
-		contexts[INSTANCE_CONTEXT].getNode(qualifier).addPreferenceChangeListener(listener);
-	}
-	
-	/**
-	 * Removes the given preference listener from the {@link DefaultScope} and the {@link InstanceScope}
-	 * @param qualifier
-	 * @param listener
-	 */
-	public static void removePreferenceListener(String qualifier, IEclipsePreferences.IPreferenceChangeListener listener) {
-		contexts[DEFAULT_CONTEXT].getNode(qualifier).removePreferenceChangeListener(listener);
-		contexts[INSTANCE_CONTEXT].getNode(qualifier).removePreferenceChangeListener(listener);
-	}
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.debug.internal.core;
+
+import org.osgi.service.prefs.BackingStoreException;
+
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+import org.eclipse.debug.core.DebugPlugin;
+
+/**
+ * Convenience class to facilitate using the new {@link IEclipsePreferences} story
+ * 
+ * @since 3.6
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class Preferences {
+
+	static final IScopeContext[] contexts= new IScopeContext[] { DefaultScope.INSTANCE, InstanceScope.INSTANCE };
+	
+	static final int DEFAULT_CONTEXT = 0;
+	static final int INSTANCE_CONTEXT = 1;
+	
+	/**
+	 * Constructor
+	 */
+	private Preferences() {
+		// no direct instantiation
+	}
+	
+	/**
+	 * Sets a string preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
+	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
+	 * @param qualifier 
+	 * @param key the key
+	 * @param value the value
+	 * @param context
+	 */
+	public static synchronized void setString(String qualifier, String key, String value, IScopeContext context) {
+		if(context != null) {
+			try {
+				IEclipsePreferences node = context.getNode(qualifier);
+				node.put(key, value);
+				node.flush();
+			}
+			catch(BackingStoreException bse) {
+				DebugPlugin.log(bse);
+			}
+		}
+		else {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).put(key, value);
+		}
+	}
+	
+	/**
+	 * Sets a boolean preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
+	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
+	 * @param qualifier 
+	 * @param key the key
+	 * @param value the value
+	 * @param context
+	 */
+	public static synchronized void setBoolean(String qualifier, String key, boolean value, IScopeContext context) {
+		if(context != null) {
+			try {
+				IEclipsePreferences node = context.getNode(qualifier);
+				node.putBoolean(key, value);
+				node.flush();
+			}
+			catch(BackingStoreException bse) {
+				DebugPlugin.log(bse);
+			}
+		}
+		else {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).putBoolean(key, value);
+		}
+	}
+	
+	/**
+	 * Sets a integer preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
+	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the value
+	 * @param context
+	 */
+	public static synchronized void setInt(String qualifier, String key, int value, IScopeContext context) {
+		if(context != null) {
+			try {
+				IEclipsePreferences node = context.getNode(qualifier);
+				node.putInt(key, value);
+				node.flush();
+			}
+			catch(BackingStoreException bse) {
+				DebugPlugin.log(bse);
+			}
+		}
+		else {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).putInt(key, value);
+		}
+	}
+	
+	/**
+	 * Sets a long preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
+	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the value
+	 * @param context
+	 */
+	public static synchronized void setLong(String qualifier, String key, long value, IScopeContext context) {
+		if(context != null) {
+			try {
+				IEclipsePreferences node = context.getNode(qualifier);
+				node.putLong(key, value);
+				node.flush();
+			}
+			catch(BackingStoreException bse) {
+				DebugPlugin.log(bse);
+			}
+		}
+		else {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).putLong(key, value);
+		}
+	}
+	
+	/**
+	 * Sets a byte array preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
+	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the value
+	 * @param context
+	 */
+	public static synchronized void setByteArray(String qualifier, String key, byte[] value, IScopeContext context) {
+		if(context != null) {
+			try {
+				IEclipsePreferences node = context.getNode(qualifier);
+				node.putByteArray(key, value);
+				node.flush();
+			}
+			catch(BackingStoreException bse) {
+				DebugPlugin.log(bse);
+			}
+		}
+		else {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).putByteArray(key, value);
+		}
+	}
+	
+	/**
+	 * Sets a double preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
+	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the value
+	 * @param context
+	 */
+	public static synchronized void setDouble(String qualifier, String key, double value, IScopeContext context) {
+		if(context != null) {
+			try {
+				IEclipsePreferences node = context.getNode(qualifier);
+				node.putDouble(key, value);
+				node.flush();
+			}
+			catch(BackingStoreException bse) {
+				DebugPlugin.log(bse);
+			}
+		}
+		else {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).putDouble(key, value);
+		}
+	}
+	
+	/**
+	 * Sets a float preference in the {@link InstanceScope} or the given {@link IScopeContext} if it
+	 * is not <code>null</code>. Preferences set in a given context are flushed as they are set.
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the value
+	 * @param context
+	 */
+	public static synchronized void setFloat(String qualifier, String key, float value, IScopeContext context) {
+		if(context != null) {
+			try {
+				IEclipsePreferences node = context.getNode(qualifier);
+				node.putFloat(key, value);
+				node.flush();
+			}
+			catch(BackingStoreException bse) {
+				DebugPlugin.log(bse);
+			}
+		}
+		else {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).putFloat(key, value);
+		}
+	}
+	
+	/**
+	 * Sets a string in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the new value
+	 */
+	public static synchronized void setDefaultString(String qualifier, String key, String value) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).put(key, value);
+	}
+	
+	/**
+	 * Sets a boolean in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the new value
+	 */
+	public static synchronized void setDefaultBoolean(String qualifier, String key, boolean value) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).putBoolean(key, value);
+	}
+	
+	/**
+	 * Sets a byte array in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the new value
+	 */
+	public static synchronized void setDefaultByteArray(String qualifier, String key, byte[] value) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).putByteArray(key, value);
+	}
+	
+	/**
+	 * Sets a double in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the new value
+	 */
+	public static synchronized void setDefaultDouble(String qualifier, String key, double value) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).putDouble(key, value);
+	}
+	
+	/**
+	 * Sets a float in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the new value
+	 */
+	public static synchronized void setDefaultFloat(String qualifier, String key, float value) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).putFloat(key, value);
+	}
+	
+	/**
+	 * Sets a integer in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the new value
+	 */
+	public static synchronized void setDefaultInt(String qualifier, String key, int value) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).putInt(key, value);
+	}
+	
+	/**
+	 * Sets a long in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key the key
+	 * @param value the new value
+	 */
+	public static synchronized void setDefaultLong(String qualifier, String key, long value) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).putLong(key, value);
+	}
+	
+	/**
+	 * Sets the given preference to its default value. This is done by removing any set value
+	 * from the {@link InstanceScope}. Has no effect if the given key is <code>null</code>.
+	 * @param qualifier
+	 * @param key the key for the preference
+	 */
+	public static synchronized void setToDefault(String qualifier, String key) {
+		if(key != null) {
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).remove(key);
+		}
+	}
+	
+	/**
+	 * Returns the default boolean value stored in the {@link DefaultScope} for the given key
+	 * or the specified default value if the key does not appear in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key
+	 * @param defaultvalue
+	 * 
+	 * @return the boolean value set in the {@link DefaultScope} for the given key, or the specified default value.
+	 */
+	public static synchronized boolean getDefaultBoolean(String qualifier, String key, boolean defaultvalue) {
+		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getBoolean(key, defaultvalue);
+	}
+	
+	/**
+	 * Returns the default string value stored in the {@link DefaultScope} for the given key
+	 * or the specified default value if the key does not appear in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key
+	 * @param defaultvalue
+	 * 
+	 * @return the string value set in the {@link DefaultScope} for the given key, or the specified default value.
+	 */
+	public static synchronized String getDefaultString(String qualifier, String key, String defaultvalue) {
+		return contexts[DEFAULT_CONTEXT].getNode(qualifier).get(key, defaultvalue);
+	}
+	
+	/**
+	 * Returns the default byte array value stored in the {@link DefaultScope} for the given key
+	 * or the specified default value if the key does not appear in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key
+	 * @param defaultvalue
+	 * 
+	 * @return the byte array value set in the {@link DefaultScope} for the given key, or the specified default value.
+	 */
+	public static synchronized byte[] getDefaultByteArray(String qualifier, String key, byte[] defaultvalue) {
+		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getByteArray(key, defaultvalue);
+	}
+	
+	/**
+	 * Returns the default integer value stored in the {@link DefaultScope} for the given key
+	 * or the specified default value if the key does not appear in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key
+	 * @param defaultvalue
+	 * 
+	 * @return the integer value set in the {@link DefaultScope} for the given key, or the specified default value.
+	 */
+	public static synchronized int getDefaultInt(String qualifier, String key, int defaultvalue) {
+		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getInt(key, defaultvalue);
+	}
+	
+	/**
+	 * Returns the default long value stored in the {@link DefaultScope} for the given key
+	 * or the specified default value if the key does not appear in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key
+	 * @param defaultvalue
+	 * 
+	 * @return the long value set in the {@link DefaultScope} for the given key, or the specified default value.
+	 */
+	public static synchronized long getDefaultLong(String qualifier, String key, long defaultvalue) {
+		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getLong(key, defaultvalue);
+	}
+	
+	/**
+	 * Returns the default double value stored in the {@link DefaultScope} for the given key
+	 * or the specified default value if the key does not appear in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key
+	 * @param defaultvalue
+	 * 
+	 * @return the double value set in the {@link DefaultScope} for the given key, or the specified default value.
+	 */
+	public static synchronized double getDefaultDouble(String qualifier, String key, double defaultvalue) {
+		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getDouble(key, defaultvalue);
+	}
+	
+	/**
+	 * Returns the default float value stored in the {@link DefaultScope} for the given key
+	 * or the specified default value if the key does not appear in the {@link DefaultScope}
+	 * @param qualifier
+	 * @param key
+	 * @param defaultvalue
+	 * 
+	 * @return the float value set in the {@link DefaultScope} for the given key, or the specified default value.
+	 */
+	public static synchronized float getDefaultFloat(String qualifier, String key, float defaultvalue) {
+		return contexts[DEFAULT_CONTEXT].getNode(qualifier).getFloat(key, defaultvalue);
+	}
+	
+	/**
+	 * Save the preferences for the given plugin identifier.
+	 * It should be noted that all pending preference changes will be flushed with this method.
+	 * @param qualifier
+	 */
+	public static synchronized void savePreferences(String qualifier) {
+		try {
+			contexts[DEFAULT_CONTEXT].getNode(qualifier).flush();
+			contexts[INSTANCE_CONTEXT].getNode(qualifier).flush();
+		}
+		catch(BackingStoreException bse) {
+			DebugPlugin.log(bse);
+		}
+	}
+	
+	/**
+	 * Adds the given preference listener to the {@link DefaultScope} and the {@link InstanceScope}
+	 * @param qualifier
+	 * @param listener
+	 */
+	public static void addPreferenceListener(String qualifier, IEclipsePreferences.IPreferenceChangeListener listener) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).addPreferenceChangeListener(listener);
+		contexts[INSTANCE_CONTEXT].getNode(qualifier).addPreferenceChangeListener(listener);
+	}
+	
+	/**
+	 * Removes the given preference listener from the {@link DefaultScope} and the {@link InstanceScope}
+	 * @param qualifier
+	 * @param listener
+	 */
+	public static void removePreferenceListener(String qualifier, IEclipsePreferences.IPreferenceChangeListener listener) {
+		contexts[DEFAULT_CONTEXT].getNode(qualifier).removePreferenceChangeListener(listener);
+		contexts[INSTANCE_CONTEXT].getNode(qualifier).removePreferenceChangeListener(listener);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/WatchExpression.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/WatchExpression.java
index ed51fc9..8be2ba3 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/WatchExpression.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/WatchExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -149,8 +149,8 @@ public class WatchExpression implements IWatchExpression {
 	 * 
 	 * @param persist whether to persist the expression
 	 */
-	private void watchExpressionChanged(boolean persist) {
-		((ExpressionManager)DebugPlugin.getDefault().getExpressionManager()).watchExpressionChanged(this, persist);
+	private void watchExpressionChanged() {
+		((ExpressionManager)DebugPlugin.getDefault().getExpressionManager()).watchExpressionChanged(this);
 	}
 
 	/**
@@ -233,7 +233,7 @@ public class WatchExpression implements IWatchExpression {
 	 */
 	public void setEnabled(boolean enabled) {
 		fEnabled= enabled;
-		watchExpressionChanged(true);
+		watchExpressionChanged();
 		evaluate();
 	}
 
@@ -242,7 +242,7 @@ public class WatchExpression implements IWatchExpression {
 	 */
 	public void setExpressionText(String expression) {
 		fExpressionText= expression;
-		watchExpressionChanged(true);
+		watchExpressionChanged();
 		evaluate();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/XMLMemento.java b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/XMLMemento.java
index 6daf965..65081fd 100644
--- a/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/XMLMemento.java
+++ b/eclipse/plugins/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/XMLMemento.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -460,7 +460,7 @@ public final class XMLMemento {
      */
     private static final class DOMWriter extends PrintWriter {
     	
-    	private int tab;
+//    	private int tab;
 
     	/* constants */
     	private static final String XML_VERSION = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; //$NON-NLS-1$
@@ -472,7 +472,7 @@ public final class XMLMemento {
     	 */
     	public DOMWriter(Writer output) {
     		super(output);
-    		tab = 0;
+//    		tab = 0;
     		println(XML_VERSION);
     	}
 
@@ -488,7 +488,7 @@ public final class XMLMemento {
         	boolean hasChildren = element.hasChildNodes();
         	startTag(element, hasChildren);
         	if (hasChildren) {
-	        	tab++;
+//	        	tab++;
 	        	boolean prevWasText = false;
 	        	NodeList children = element.getChildNodes();
 	    		for (int i = 0; i < children.getLength(); i++) {
@@ -506,7 +506,7 @@ public final class XMLMemento {
 	    				prevWasText = true;
 	    			}
 	    		}
-	    		tab--;
+//	    		tab--;
 	    		if (!prevWasText) {
 	    			println();
 	    			printTabulation();
diff --git a/eclipse/plugins/org.eclipse.debug.core/r2_0_buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r2_0_buildnotes_platform-debug.html
deleted file mode 100644
index 90f26fd..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r2_0_buildnotes_platform-debug.html
+++ /dev/null
@@ -1,1102 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes for the 2.0 release</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 20, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20365">20365</a>: Bidi - NPE when closing Eclipse<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 19, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20492">20492</a>: Extra separator in run/debug history menus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19878">19878</a>: Collapse/expand symbol (+/-) dissappears in inspect window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19998">19998</a>: NullPointerException when launching rsource that has no extension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20066">20066</a>: TVT2: Hardcoded "None" in debug preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20594">20594</a>: Preference listeners should use equals, not ==<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 12, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19928">19928</a>: Run/Debug menu ordering<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 11, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17462">17462</a>: IllegalArgumentException when printing long stack to console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19375">19375</a>: Duplicate launch config naming problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19170">19170</a>: LaunchConfigurationDialog etc leakage when last launched is Runtime<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19740">19740</a>: Content assist is now retargetable<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 10, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19613">19613</a>: LaunchConfig marked PRIVATE shows in Console View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19338">19338</a>: Missing copyrights<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 7, 2002
-<h3>
-What's new in this drop</h3>
-<li>API change - a spelling mistake was fixed in the name of a method in IPersistableSourceLocator</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18789">18789</a>: Source editor not given focus on suspend<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19170">19170</a>: LaunchConfigurationDialog etc leakage when last launched is<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18772">18772</a>: Launch Configurations: Table is cut off on motif<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19379">19379</a>: Debug remembers selected state of toolbar entry even if it is no longer enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19443">19443</a>: IPersistableSourceLocator has misspelled method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19489">19489</a>: References to IDebugViewAdapter (DOC)<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 1, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18209">18209</a>: Unable to run a program on first attempt<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 31, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15671">15671</a>: Strange behavior of the console view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17017">17017</a>: Not always prompted to find source location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18334">18334</a>: Launch view holding onto Objects longer than necessary<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18153">18153</a>: launch last and run/debug buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18385">18385</a>: NPE during launching after removing the launch info<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16946">16946</a>: several Eclipse buttons are too short<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18474">18474</a>: Empty group in history menus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16764">16764</a>: Debug Perspective leaks actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10383">10383</a>: Help pass for 2.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16152">16152</a>: NLS pass<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16379">16379</a>: Launch configs tree is missing label and is not wide enough<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 30, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17087">17087</a>: Launch view, source lookup and closed projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17029">17029</a>: DCR: Please let me specify a launch history size of 20<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16378">16378</a>: Missing icons in launch config creation tabs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18156">18156</a>: Debug/Run As cascade menu should be sorted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16462">16462</a>: Not all tabs visible in Run-time Workbench config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18154">18154</a>: Launch shortcuts menu labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16685">16685</a>: Internal error changing launch history preference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16963">16963</a>: Mneumonic missing on table label for Select Launch Configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16975">16975</a>: Up/down button on launch history page not working correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17512">17512</a>: Missing mneumonics in Console Preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18222">18222</a>: All XML written using platform line delimiters/UTF8<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16955">16955</a>: NPE opening java perspective.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17633">17633</a>: ActionDelegateHelper should nullify fTextEditor when it does not need it<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17380">17380</a>: Launch history maintains duplicate entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14406">14406</a>: Debug menu items becoming disabled inappropriately<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17794">17794</a>: Disabled actions in the context menu of the Launch config dialog viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17358">17358</a>: Revert button not enabled after changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17116">17116</a>: Launch related walkbacks in .log<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 29, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18099">18099</a>: Change provider name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17490">17490</a>: F1 help for launch config tabs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18121">18121</a>: Static menus items should be at the top<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17649">17649</a>: ObjectCollectedException written to console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16838">16838</a>: Over zealous error logging when config has been deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17105">17105</a>: Attempt to save shared launch configs in closed projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18122">18122</a>: Scrapbook configs show up in list for Launch history pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16970">16970</a>: ClassCastException out of Launch history preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16492">16492</a>: CommonTab Switch to String<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16956">16956</a>: NPE opening java perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17100">17100</a>: Launch Config name with underscore is truncated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16638">16638</a>: Missing menmonic on Debug Action Groups page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17072">17072</a>: "Show Supported Breakpoints" has just one calorie, not meaningful enough<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17946">17946</a>: Generalize launch shortcuts/convenience actions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 28, 2002
-<h3>
-What's new in this drop</h3>
-<li>New/replaced extension point. The extension point "org.eclipse.debug.ui.launchConfigurationShortcuts" has
- been replaced with "org.eclipse.debug.ui.launchShortcuts". Please see extension point documentation
- for details.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 27, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16757">16757</a>: Launch.removeDebugTarget does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17534">17534</a>: Two huge bugs in Launch class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17676">17676</a>: Run menu history menus not updated after organize favorites<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17069">17069</a>: NPE deleting project with shared config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16655">16655</a>: Streams are not closed when a java program is finished<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 21, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16185">16185</a>: Show/hide package names button in doesn't work in debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15964">15964</a>: Updates to preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16476">16476</a>: TextViewerGotoLineAction$NumberValidator<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 19, 2002
-<h3>
-What's new in this drop</h3>
-<li>API change - deprecated method was removed - ILaunchConfigurationTab.isValid()</li>
-<li>New extension point - org.eclipse.debug.core.launchConfigurationComparator. This 
- extension point is for launch configuration attributes that require a custom
- equality implementation. See documentation for extension point.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15704">15704</a>: Default "Maximum launch history size" should be at least 10<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15560">15560</a>: Cancel button on edit Configurations is much smaller than others<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15952">15952</a>: Remove deprecated method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15953">15953</a>: No longer expanding debug target to show threads<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15988">15988</a>: ArrayIndexOutOfBoundsException in config reselection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16107">16107</a>: NPE opening editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16063">16063</a>: Preference pages now re-size<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16060">16060</a>: Re-sizable launch config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15850">15850</a>: LaunchView changes required from platform ui changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16143">16143</a>: Multiple *.launch filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12032">12032</a>: Debug Constants should include value in javadoc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6485">6485</a>: Extension & Package documentation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16217">16217</a>: launch config "revert" causes flicker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16325">16325</a>: Content assist action icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16356">16356</a>: NPE out of ConsoleDocumentManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16148">16148</a>: IProcess should support an exit value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14927">14927</a>: Cancel button in progress monitor of launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15775">15775</a>: Deleting launch config should select the next config<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16113">16113</a>: Execution arguments gets lost if starting a class file of a jar library<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 14, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13766">13766</a>: Error recovery on failed launch - need to bring up dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11540">11540</a>: Misc Debugger source lookup dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15506">15506</a>: Switching launch configs should show busy cursor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15618">15618</a>: DebugDropDownAction missing resource string<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15375">15375</a>: ClassCastException trying to resume<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15720">15720</a>: Debug perspective should define place holders for standard views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12316">12316</a>: Message (stack trace) silently written to console when trying to run small java example<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4130">4130</a>: Eclipse Debugger: Setting Breakpoints via keyboard not possilbe (1GITILH)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15449">15449</a>: 'show detail pane' toolbar button behaves differently than other buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12904">12904</a>: Creating shard Launch Configuration fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15748">15748</a>: Duplicate action in launch config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16848">15848</a>: Change Debug Menu id<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15533">15533</a>: DebugAction contains redundant cascade menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14922">14922</a>: Config created by double clicking on launch type; delete not enabled<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 08, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9034">9034</a>: Variables view should scroll to display new variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12001">12001</a>: Plug-in startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14412">14412</a>: Launch configuration XML should be written to file immediately<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15246">15246</a>: Allow private launch configs to perspective switch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15325">15325</a>: Remove 'Configuration' from debug action labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1636">1636</a>: Copy/paste across console docs (1GF61GB)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13457">13457</a>: Should expose launch history length as user preference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15024">15024</a>: Launch configuration dialog doesn't display "favorite" option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15180">15180</a>: DND.ERROR_CANNOT_SET_CLIPBOARD must be handled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14657">14657</a>: LaunchDropDownAction and coolbar support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14897">14897</a>: many missing '...' on buttons in launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15362">15362</a>: Standard out not always hooked to console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15446">15446</a>: first click in the debug/launch history preference page results in exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11894">11894</a>: Mneumonic collision in the debug menu<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 30, 2002
-<h3>
-What's new in this drop</h3>
-<li>Changes in the launch configuration dialog:
-	<ul>
-	<li>To free up screen real estate for editing launch configurations, the tree of launch
-		configurations has been made more narrow by removing the "copy" button from the
-		dialog. The "new" button copies a configuration when a configuration is selected, and
-		creates a new configuration (based on the workbench selection) when a configuration
-		type is selected.</li>
-	<li>The "Cancel" button has been replaced with a "Close" button (closing the dialog
-		does not cancel changes). You will be prompted to save unsaved changes.</li>
-	<li>A "Revert" button has been added to the edit area to revert changes on the 
-		currently selected launch configuration (under edit).</li>
-	</ul>
-</li>
-<li>Changes to launch behavior
-	<ul>
-	<li>Pressing the run or debug toolbar buttons launches the configuration that was last launched
-		(in the workspace), in the appropriate mode (run or debug).</li>
-	<li>To create a new launch configuration, use the cascading menu items on the run or debug
-		menu. For example "New Configuration -> Local Java Application" - this will create a new 
-		configuration based on the selection in the workbench (or active editor).</li>
-	<li>"Single-click launching" preference has been removed. It was determined that a preference
-		which changes the behavior of a toolbar button is disorienting to the user.</li>
-	</ul>
-</li>
-<li>Changes to ILaunchManager
-	<ul>
-	<li>API for setting default launch configuration types has been removed.</li>
-	</ul>
-</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13537">13537</a>: DebugActionGroups: Clearer wording in preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13909">13909</a>: Inconsistent margins on preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11889">11889</a>: Buttons too small in the Console and Launch Configuration Preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13513">13513</a>: Running a debug view in a Java perspective has several problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13536">13536</a>: DebugActionGroups: Collision on ID wipes out both action groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13317">13317</a>: New Configuration menu empty<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14560">14560</a>: Deleting breakpoint selects another breakpoint in the wrong direction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14143">14143</a>: Breakpoints View appears with "Go to file" button enabled regardless of breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9834">9834</a>: Views do not remember package visibility filter settings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11904">11904</a>: Debug menu mneumonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14797">14797</a>: NumberFormatException if cancel Go to line in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13440">13440</a>: menu reorganization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14550">14550</a>: Need to be able to make launch configuration type invisible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6388">6388</a>: Variables view's static and field buttons are backwards<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14495">14495</a>: clipboards must be disposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13665">13665</a>: Debug preference page looks cluttered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14485">14485</a>: Cannot delete a launch config using the Delete key<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14486">14486</a>: Default perspective for Run should not be Debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11697">11697</a>: Debug Preference Page needs group box<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14540">14540</a>: Relaunch action not enabled correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14556">14556</a>: Enable breakpoint action using old selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14520">14520</a>: Debug plugins should provide consistent unique identifier access<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12577">12577</a>: Launch configurations wizard - usability<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13555">13555</a>: Edit configuration dialog UI confusing<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12292">12292</a>: Unable to suspend a running thread to see stack frames<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 23, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13836">13836</a>: Missing and duplicated extensions in debug plugin.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12125">12125</a>: NLS debug projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14111">14111</a>: Console terminate button not enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13041">13041</a>: Remove all terminated action incorrectly enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13372">13372</a>: Strange UI feedback when breakpoint hit during evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13430">13430</a>: Open on Type in console can work better; less beep<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12184">12184</a>: IncompatibleThreadStateException on launchAdded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14190">14190</a>: Stack dumps noticed in log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14125">14125</a>: Debug view "Resume" always jumps to source - menu item does not<br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12132">12132</a>: Can't launch debugger if proxy set.<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 18, 2002
-<h3>
-What's new in this drop</h3>
-<ul>
-<li>Support for old launchers has been removed (ILauncher, ILauncherDelegate, ILaunchWizard).
-	Launch configruations now rule the launching world.</li>
-<li>The extension point "org.eclipse.debug.ui.launchTabs" has been removed and replaced with
- a new extension point "org.eclipse.debug.ui.launchTabGroups".</li>
-<li>The constants IDebugUIConstants.PREF_AUTO_SHOW_DEBUG_VIEW & IDebugUIConstants.PREF_AUTO_SHOW_PROCESS_VIEW
- have been removed.  Users can now set a default perspective for each of Run & Debug which may be
- overridden in a launch configuration.</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13385">13385</a>: Showing detail should be disabled when multi-select in var view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12788">12788</a>: Cut, copy, paste actions don't work in details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8590">8590</a>: Allow position of "step debug" in step tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12982">12982</a>: Need ability to set initial state of debug view based on AbstractDebugView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13554">13554</a>: Incorrect dependencies: result is NPE in DebugActionGroupsManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13714">13714</a>: Pressing Apply makes tabs disappear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13307">13307</a>: NPE in launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12382">12382</a>: Action set part association for the launch view?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13285">13285</a>: Debug/Run With use old launchers when in config mode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13425">13425</a>: Double click to expand/contract tree in variable and expression views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13864">13864</a>: npe on lanuning (latest after 0412)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12281">12281</a>: Launch configuration tab widgets are private<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13501">13501</a>: hostname cut off when show qualified names is off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12257">12257</a>: remove single event handling support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12722">12722</a>: Actions for configuration dialogs should appear on Debug menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13324">13324</a>: Change of selection lost in Launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11942">11942</a>: Single click launching preference text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13088">13088</a>: NPE in the log after exiting workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13565">13565</a>: Properties page for process should not contain defaults/apply buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13853">13853</a>: native code error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13613">13613</a>: Delegating presentation and #setAttribute()...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12962">12962</a>: Same target shows up twice in drop-downs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13375">13375</a>: Show Detail Pane in popup menu missing mneumonic<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12785">12785</a>: Select all in the details pane selects all variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13383">13383</a>: Copy variables action not enabled correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13993">13993</a>: Debug and Run buttons have been accidentally swapped<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12953">12953</a>: Action "type" constants should be moved from AbstractDebugView to IDebugView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14124">14124</a>: Launch configuration classes not in launch configuration package<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 11, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12677">12677</a>: Single click launching and F11, Ctrl-F11<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13214">13214</a>: ArrayOutOfBoundException in launch history pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13480">13480</a>: NPE creating Java Project when running Runtime Workbench<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13345">13345</a>: exception in log - after opening/closing projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13085">13085</a>: DebugActionGroups cannot handle two actions with same ID in views<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 09, 2002
-<h3>
-What's new in this drop</h3>
-<li>A new extension point exists in the debug ui to control the types of launch configurations that can
- be created from the cascading "New run/debug configuration" menu (off the run/debug dropdown menus).
- A type of configuration can be contributed to mulitple perspectives.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1696">1696</a>: DCR: Perspective specific launcher filtering (1GIYJXH)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11733">11733</a>: duplicate shared config after close & restart<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11899">11899</a>: Launch config name collission<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12658">12658</a>: Single click launching doesn't work if the active editor isn't selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12488">12488</a>: Launch config dialog should allow double-click on config type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11710">11710</a>: Deleting a launch configuration leaves no selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12598">12598</a>: Launch config - tab group API inconvenience<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11190">11190</a>: cannot set working directory if it includes a japanese character<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12160">12160</a>: Launch creation/lifecycle<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8772">8772</a>: Infinitely looping stack trace in target pgm locks UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12619">12619</a>: Exception during startup.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10282">10282</a>: Rendering of changed variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12310">12310</a>: Need ability to determine if a breakpoint applies to a target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12981">12981</a>: Launcher - listed name does not match given name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9825">9825</a>: Action icon inconsistencies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12891">12891</a>: Several IOExceptions from .log in StreamsProxy.write(StreamsProxy.java:92)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11906">11906</a>: Useless single click launch for classes with no main<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12276">12276</a>: Index out of bounds exception from launch configuration dialog<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 2, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12289">12289</a>: Breakpoint should extend platform object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12548">12548</a>: Debug event filters should use event sets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12613">12613</a>: Exception when on target workspace when starting eclipse<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 28, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11756">11756</a>: Launch config dialog: button sizes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11923">11923</a>: Console preference page needs reworking<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11880">11880</a>: Launch ConfigurationType property page missing accelerator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11925">11925</a>: Up/down buttons for launch history restricted to single select<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11457">11457</a>: Launch Configuration Dialog issues<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11702">11702</a>: Launch configuration defaults are set after widgets are initialized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11330">11330</a>: JavaEnvironmentTab depends on JavaMainTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11053">11053</a>: Launch view too optimistic on source lookup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11982">11982</a>: Logging exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12339">12339</a>: NPE when i switch to debug perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7609">7609</a>: Attempting to go to a marker that no longer exists<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11326">11326</a>: Restore instead of rebuild launch config index<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11720">11720</a>: Need replacement for #hasChildren<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 26, 2002
-<h3>
-What's new in this drop</h3>
-<li>Breaking API change: IDebugViewAdapter had been renamed to IDebugView</li>
-<li>Launch configurations are the default launch mechanism.</li>
-<li>Debug events are reported in sets. @see IDebugEventSetListener and IDebugEventListener</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11610">11610</a>: Doc: identifier for launch extension points are incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11401">11401</a>: API on ILaunch.getDebugTarget() <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11303">11303</a>: Deadlock on startup processing breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11919">11919</a>: 2 NPEs using Preferences->Debug->Launch Configuration Types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6212">6212</a>: Debug view toolbar/menu pollution<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11849">11849</a>: Duplicate history items showing up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10448">10448</a>: IExpressionManager#hasExpression, IBreakpointManager#hasBreakpoints,etc.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10817">10817</a>: configs in java packages get copied to output folder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11207">11207</a>: IDebugViewAdapter should be named IDebugView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11612">11612</a>: Agressive clearing of instruction pointer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12025">12025</a>: Invalid thread access out of Launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12229">12229</a>: Set default launching style to configuration based<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9650">9650</a>: Variable change notification bug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12157">12157</a>: Debug event sets<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 18, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11197">11197</a>: Feature request: Delete in breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11212">11212</a>: Debug UI plugin.xml references jdt<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11308">11308</a>: Launch configurations make workspace non-transportable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11346">11346</a>: Registering a launch multiple times is not handled well<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10586">10586</a>: Use new workbench selection service<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11425">11425</a>: ILaunchConfiguration JavaDoc is incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11189">11189</a>: Flicker in the Launch Configurations dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11253">11253</a>: Launch config tab flicker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11370">11370</a>: Launch view update bug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11462">11462</a>: Launch config metadata change generates parse exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10637">10637</a>: "currently active project" should be the "current working directory"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10162">10162</a>: Console View to front on error output only<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8937">8937</a>: Feature Request: Select all in the breakpoints view<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 12, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10775">10775</a>: New, delete copy of Launch configurations remain disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10780">10780</a>: Delete and Copy enabled for Launch configuration type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10778">10778</a>: Launch configuration names should be trimmed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6376">6376</a>: Should be possible to remove entries from the "Run list"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10855">10855</a>: Use new workbench API for show perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10610">10610</a>: Null exception when lauchviewer processing events on remove tree items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8420">8420</a>: Cannot edit ExpressionView detail area until after inspect.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11076">11076</a>: Delete configs reamin in favorite list<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9922">9922</a>: Null pointer in launch configuration type property page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7605">7605</a>: Feature: Doubleclicking in launch config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11072">11072</a>: History menu update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8294">8294</a>: "Debug History" and "Run History" have empty submenus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11133">11133</a>: NPE in LaunchView.initializeSelection()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11110">11110</a>: NPE in AbstractListenerActionDelegate.pageActivated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10847">10847</a>: API - AbstractLaunchConfiguration tab<br>
-<h3>
-
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 05, 2002
-<h3>
-What's new in this drop</h3>
-<li>Launch Configuration API has changed. The launch configuration tab lifecycle is now similar
- to that of preference and wizard pages.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9680">9680</a>: Launch config: pressing save returns to first tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9660">9660</a>: Launch Config Flicker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10524">10524</a>: Provide default label provider API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10506">10506</a>: NPE in launch view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10582">10582</a>: SWT Exception closing a Debug Perspective in JUnit test<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7207">7207</a>: Launch configuration bugs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7430">7430</a>: Debug perspective not reused<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10652">10652</a>: Remove action enabled when nothing to be removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7430">7430</a>: Debug perspective not reused<br>
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-February 28, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10243">10243</a>: ClassCastException when removing a breakpoint<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-February 26, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7767">7767</a>: Changing from "Debug View"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-February 14, 2002
-<h3>
-What's new in this drop</h3>
-<li>As part of the transition to configuration-based launching, early adopters may
-continue to access the launch configuration dialog by Shift-clicking the run and debug
-buttons, but configuration-based launches will NOT appear in the history, and
-CANNOT be relaunched.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9166">9166</a>: NPE in preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9167">9167</a>: LaunchConfigurationLabelDecorator should not be on by default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9483">9483</a>: NPE in LaunchConfigurationTypePropertyPage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9652">9652</a>: IllegalArgumentException out of Console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9704">9704</a>: NPE on shutdown in BreakpointsView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9167">9167</a>: LaunchConfigurationLabelDecorator should not be on by default<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-February 12, 2002
-<h3>
-What's new in this drop</h3>
-<li>Removed deprecated constant IDebugUIConstants.ID_PROCESS_VIEW</li>
-<li>Basic icons and their support has been removed</li>
-<li>Breakpoint property sheet has been replaced with breakpoint properties dialog.
- Choose "Properties..." from the pop-up menu in the breakpoints view.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8230">8230</a>: Console does not show process as <terminated>; better tracking of changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9194">9194</a>: Attempting to modify locked resource tree in BreakpointManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9200">9200</a>: Editor not opening for suspended stack frame with modified prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9218">9218</a>: NPE in LaunchConfigurationLabelDecorator.isLaunchConfigFile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9280">9280</a>: Debug event handlers performing runnables after dispose<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9057">9057</a>: API - CHANGE event should be better specified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9111">9111</a>: Invalid thread access running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6370">6370</a>: Breakpoint Properties Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9327">9327</a>: JavaDebugOptionsManager startup loading breakpoints during resource changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9200">9200</a>: Editor not opening for suspended stack frame with modified prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9178">9178</a>: Remove All Terminated always disabled?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9065">9065</a>: WID opening editor for breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8296">8296</a>: Debug With menu items have interesting numbering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9421">9421</a>: NPE out of the LaunchView on shutdown with running target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7301">7301</a>: no way to switch to custom debug perspective on debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5311">5311</a>: Missing debug information should be conveyed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1683">1683</a>: Extra Action delegates (1GIGUK0)<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9299">9299</a>: NPE in LaunchView.showMarkerForCurrentSelection<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-February 05, 2002
-<h3>
-What's new in this drop</h3>
-<li>Launch configuration infrastructure and UI is available for early adopters.
-Developers that have contributed launchers should migrate to launch configurations. To
-access launch configurations from the workbench, press the run/debug buttons while holding
-the SHIFT key down.</li>
-<li>The debugger indicates variables that have changed since the last suspend. See <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1533">1533</a>.</i>
-<li>The debug action set has been renamed from Debug/Run to Debug. See <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8729">8729</a>.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8729">8729</a>: Rename Debug action set from "Debug/Run" to "Debug"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8945">8945</a>: Non-Persisted breakpoint can be incorrectly deleted at startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7965">7965</a>: Debug view refresh flicker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1533">1533</a>: Feature: notification of changing variables (1G5NRPC)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1721">1721</a>: Small Feature: separate disable/enable breakpoints (1GKKEI5)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8245">8245</a>: Launch preferences page problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1621">1621</a>: Debugger doesn't come to front when breakpoint is hit (1GEUZEX)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9102">9102</a>: Remove & Terminate walkback<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6807">6807</a>: launch configurations not crash proof<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-January 29, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7837">7837</a>: Launch configuration page verifier error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8235">8235</a>: Ctrl-space does not work for code assist in details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7763">7763</a>: (usability) selecting in variables view with details pane causes un-maximize<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7814">7814</a>: API for char range within a line<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8501">8501</a>: "Disable all" breakpoints action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7864">7864</a>: Need API for selection changes in debug view<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-January 24, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8059">8059</a>: NPE out of ControlActionDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8005">8005</a>: Terminate & Remove disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8063">8063</a>: NPE in BreakpointsView when closing workbench<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8318">8318</a>: internal error occured, if open the menu "Debug -> Debug History"<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-January 22, 2002
-<h3>
-What's new in this drop</h3>
-<li>Breakpoint API has been updated to allow selective persistence of breakpoint
-of the same type</li>
-<li>Breakpoint API now allows for "hidden" breakpoints. @see IBreakpoint.isRegistered()</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7578">7578</a>: .metadata launch files not in correct location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7626">7626</a>: Widget is disposed error relaunching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1710">1710</a>: DCR - Launcher should have control over perspective switching (1GJUT9J)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6480">6480</a>: Launch configurations - store with workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7961">7961</a>: updating source twice per suspend event<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7507">7507</a>: debugger keyboard shortcuts do not work in 20020109<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=2990">2990</a>: Internal errors when fast clicking in debug stack (1GLDZVH)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7974">7974</a>: Stack overflow pression "remove all" from Expression View<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1563">1563</a>: Fully qualified rendering of launch element name (1GD7U0Z)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7418">7418</a>: Need the Process view back<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7627">7627</a>: Tooltips not working in debug views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7755">7755</a>: The Breakpoints pane should highlight the breakpoint where the debugger stops<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5141">5141</a>: Breakpoint manager can use new marker API<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-January 15, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6088">6088</a>: Move "qualified name" rendering to java debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7420">7420</a>: "Debug UI.xml" references JDT<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7580">7580</a>: NPE out of AbstractDebugEventHandler on shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7513">7513</a>: Terminate and remove fails to remove when timeouts occur<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7316">7316</a>: Inconsistent casing for Show detail pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7370">7370</a>: TimeoutException occurs during stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1714">1714</a>: Confusion of launches from different projects in history (1GJYNLK)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-January 9, 2002
-<h3>
-What's new in this drop</h3>
-<li>The debugger now uses the workbench editor re-use policy.</li>
-<li>There is no longer a Process view. The Debug view shows all debug
-sessions and processes launched. When a workspace is re-started that
-had a Process view open, an error message will appear explaining that
-the Process view could not be created.</li>
-<li>The debug action set has been split into two groups - debug and launch.
-Existing debug and Java perspectives need to be closed and re-opened to obtain
-run and debug buttons in the toolbar. @see bug 1724.</li>
-<li>There is no longer an Inspector view - it has been replaced with an
-Expressions view. When a workspace is re-started that had an Inspector
-view open, an error message will appear explaining the Inspector view
-could not be created.</li>
-<li>A launch can be annotated with client specific data. @see bug 6481.</li>
-<li>A launch can now contain more than one debug target. API has changed
- in ILaunch, ILaunchListener, and ILaunchManager to suppport this.</li>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7120">7120</a>: NPE during shutdown of DebugUIPlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6954">6954</a>: Use new workbench API for openning perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6206">6206</a>: Make AbstractDebugView API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7151">7151</a>: Toggling ShowDetailPaneAction sets focus to the launch view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7164">7164</a>: NPE during shutdown to do with DebugSelectionManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1724">1724</a>: Feature: split debug action set in to debug & launch (1GKCQVZ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7167">7167</a>: NPE shutting down in abstract debug view 'save state'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6771">6771</a>: DebugEvent constructors changed to take IDebugElement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1574">1574</a>: Settings in debug views not persisted (1GDTUNW)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6105">6105</a>: Step accelerators should not take focus from editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1671">1671</a>: Option to autoclear terminated processes (1GHSO3L)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6357">6357</a>: Combine Process/Debug Views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6200">6200</a>: Extensible set of debug elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7204">7204</a>: Copy variables action needs icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7031">7031</a>: Inspector is missing a toString area<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6213">6213</a>: Breakpoints view improvements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6213">6481</a>: Feature: Annotate launch with transaction id<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1617">1617</a>: type names not always shown in inspector (1GEULC4)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6484">6484</a>: Ability for "super adaptor"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6783">6783</a>: Console should not steal focus while writing output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7277">7277</a>: Step detail events for into/over/return<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6214">6214</a>: More that one debug target per lanuch<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6482">6482</a>: Ability to group debug targets in one launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6215">6215</a>: Exception handling in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1688">1688</a>: Object display options (1GIKMIG)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1606">1606</a>: Feature: Source Lookup (1GEPJEN)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1553">1553</a>: Handling of no source is confusing (1GC2TVU)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7166">7166</a>: Remove terminated launches preference does not applied correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7169">7169</a>: Debug "F" keys not enabled properly on new editor<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-December 18, 2001
-<h3>
-What's new in this drop</h3>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5260">5260</a>: TVT: Properties view for debug process is missing substitution variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6321">6321</a>: Console IOException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7003">7003</a>: Debug With menu launches incorrect program (not finding selection)<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1548">1548</a>: Extensible launch modes (1GBEQYO)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1592">1592</a>: DebugPlugin must allow for null elements in updateHistory() (1GEI3C1)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6886">6886</a>: Request: Keep perspective when running application<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1627">1627</a>: Previous editor's unsaved contents are still visible (1GEX5LS)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-December 11, 2001
-<h3>
-What's new in this drop</h3>
-	<ul>
-	<li>The "relaunch last" action has been remapped to use F9 instead of F10.
-	Please see "<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6387">6387</a>: Can't use F10" for details.
-	</li></ul>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6387">6387</a>: Can't use F10 <br>
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-December 6, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6521">6521</a>: Variables view stays empty with stack frame selected (1GLE8PW) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6577">6577</a>: NPE in DebugContentProvider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6598">6598</a>: Problem using old workspace with new build <br>
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-December 4, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6321">6321</a>: Console IOException <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6216">6216</a>: Help for debug views in 1.0 <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6521">6521</a>: Newly added resources cannot be checked out <br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1715">1715</a>: Consider removing state change actions from BreakpointsView (1GKKT90)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1559">1559</a>: Debugger doesn't pop to front when breakpoint hit (1GD7P7D) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1564">1564</a>: README: printf's in native code only show up in console at the end of execution (1GD80QZ) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1588">1588</a>: README: System.exit(0) from Scrapbook (1GE8JU3) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5485">5485</a>: NPE if missing launcher when using launch history <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1770">1770</a>: Last launch not updated upon deletion (1GLEANH) <br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 27, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-<li>Procedural Debug API - new debug element interfaces have been defined to support the notion of registers,
-register groups, memory blocks, and memory block retrieval:
-	<ul>
-	<li>IRegister - a register in a register group</li>
-	<li>IRegisterGroup - register groups are available from each stack frame (that supports registers)</li>
-	<li>IMemoryBlock - a contiguos block of bytes from memory allocated by a running program</li>
-	<li>IMemoryBlockRetrieval - support to retrieve arbitrary blocks of memory from a running program</li>
-	</ul>
-</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1720">1720</A>: Issue: breakpoint manager breaks lazy plug-in load rule (1GK<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6097">6097</A>: The inspector is not refresh<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 20, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-<li>API Change - method addition - @see ILaunch.getLaunchConfiguration(). This does
-not break any clients, as the only implementation of ILaunch is org.eclipse.debug.core.Launch,
-which has been updated.</li>
-<li>API Change - method return value - @see ILaunch.getLauncher(). A launch
-is now allowed to return null for #getLauncher() when it was created by a launch
-configuration rather than a launcher. This does not break any clients, as launch configurations
-are not in use yet. The main client that will have to be updated is the Debug UI.</li>
-<li>New debug preference - "Build (if required) before launch"</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4023">4023</A>: Prompt user for save and build before run  (1GGCBO0)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5818">5818</A>: Debugger Source Lookup page claims project is closed<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5895">5895</A>: NPE out of the Console view on shutdown<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5896">5896</A>: NPE out of LaunchManagerVisitor on shutdown<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1623">1623</A>: StackFrame selected but toolbar actions disable (1GEV0L7)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5681">5681</A>: Show debug perspective doesn't reuse my perspective<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5909">5909</A>: Should have terminate on Debug menu<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5582">5582</A>: Keyboard shortcut for run/debug<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5789">5789</A>: Console Empty on Hello World Examples<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5951">5951</A>: Console buffer not flushed?<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5946">5946</A>: NPE  in LaunchManagerVisitor<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5808">5808</A>: Console output being lost<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5925">5925</A>: DebugView does not survive platform crash<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 13, 2001
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5360">5360</A>: ListenerList#removeAll<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5613">5613</A>: Debugger hangs when it hits breakpoints during self hosting<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4269">4269</A>: Simplifying debugger perspective (1GKRAWI)<br>
-
-
-<h3>
-Problem Reports Closed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5588">5588</A>: General Protection Fault double clicking on breakpoint in th<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5795">5795</A>: Reached Breakpoint, but no stacktrace<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 12, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-<li>Draft definition and infrastructure for launch configurations.</li>
-<li>API Change: Presentation of variable value details allows for long running
-computation. @see IDebugModelPresentation.computeDetail(IValue, IValueDetailListener). @see IValueDetailListener.
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5686">5686</A>: Launch/Run actions should be available on menubar<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5579">5579</A>: Would like option to switch to Debug perspective on breakpoi<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r2_1_buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r2_1_buildnotes_platform-debug.html
deleted file mode 100644
index 3e0da8c..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r2_1_buildnotes_platform-debug.html
+++ /dev/null
@@ -1,410 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 25, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35459">35459</a>: "Run As ..." menu disabled<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 24, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35410">35410</a>: VariableView#fExpandedVariables is not always cleaned<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-March 17, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32335">32335</a>: Eclipse M5, launcher, arguments tab truncated<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 13, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34901">34901</a>: Typos(?)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34899">34899</a>: Typos<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34554">34554</a>: console: locking during 6 second clear request on big contents<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 6, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33767">33767</a>: Step with filters label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32335">32335</a>: Eclipse M5, launcher, arguments tab truncated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33993">33993</a>: NPE in launch config getMemento<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33996">33996</a>: Making a shared favorite config does not appear in fav's<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 4, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32631">32631</a>: Problem with text input from console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32668">32668</a>: Invalid thread access disposing process drop down menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32706">32706</a>: Can re-enable LCD when disabled for run in foreground<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32621">32621</a>: Console Pref page: punctuation and capitalization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33289">33289</a>: Console: ShowProcess tooltip should use book capitilization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29752">29752</a>: Removal of the "launchers" extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31519">31519</a>: action set part associations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33579">33579</a>: NPE in launch view event handler on shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33613">33613</a>: NPE in console line notifier<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32722">32722</a>: Attempting two background builds at same time: lose console document<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33620">33620</a>: NPE attempting to launch from a LCD with no selection area (Run Ant...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33153">33153</a>: Debug As and Run As actions are ignored if there is no selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33185">33185</a>: Activate workbench when breakpoint hit should be on by default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32775">32775</a>: BadLocationException on file hyperlink from ant build<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 20, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18665">18665</a>: Launch progress message bar is too short<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32191">32191</a>: LaunchManager added too late as resource changed listener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31431">31431</a>: Show In...from the Console to the Debug View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32247">32247</a>: Missing hashCode in org.eclipse.debug.internal.core.LaunchConfigurationInfo<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32176">32176</a>: Hyperlink on wrapped line draws line badly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32275">32275</a>: Debug console selection shows the wrong information<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30513">30513</a>: Step actions should be disabled when debug view closed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31161">31161</a>: Dialogs don't use standard platform spacing for buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31216">31216</a>: Offer Show In...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31734">31734</a>: Console line trackers not notified of last line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11991">11991</a>: Renamed config not updated in history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31745">31745</a>: No feedback for navigating links in console using keyboard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30586">30586</a>: NPE opening editor in LaunchView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32433">32433</a>: ShowProcessAction reference to its process keeps hyperlinks in memory<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 18, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31565">31565</a>: Selecting part of stack trace in console loses focus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29326">29326</a>: Launch configuration with errors can be launched<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29045">29045</a>: StringIndexOutOfBoundsException from Console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31394">31394</a>: New console UI does not provide a "Clear History" option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31898">31898</a>: Error in the status bar without any text selected in the console<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 13, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30901">30901</a>: Dialog flicker when launching a program<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31500">31500</a>: Double click for create a new launch configuration<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 11, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31321">31321</a>: disable/enable breakpoints does not scale<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31502">31502</a>: Refactor LaunchHistoryPreferenceTab<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 5, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30411">30411</a>: Exceptions deleting Launch Configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28148">28148</a>: Debug and Run toolbar actions missing mneumonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30493">30493</a>: No need for the verify key listener in the VariablesView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22815">22815</a>: Support delete key in viewers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30125">30125</a>: Provide inforpops for launch configuration types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30332">30332</a>: Not enough IDisconnect support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28827">28827</a>: Run Screen Sizing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30167">30167</a>: Would like a way to navigate back from debugger to corresponding launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30333">30333</a>: Problem when multiple debug events occur at the same time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30831">30831</a>: Console View: Terminate and Clear are too close<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29503">29503</a>: Debug preference page error messaging<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 28, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29877">29877</a>: Chkpii errors in debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28295">28295</a>: ConcurrentModificationException during "Run Ant..." build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18306">18306</a>: Use safe runnables for listeners and "untrusted" code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30037">30037</a>: Use platform support for breakpoint persistence<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29843">29843</a>: tooltip of the debug and run buttons displays "Debu&g" and "Ru&n"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30307">30307</a>: Apparent mispelled catalog reference in Expressions pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30222">30222</a>: External tool builder build command path is fully qualified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30324">30324</a>: NPE restoring shared launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29112">29112</a>: Add key binding to "open link" action in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30180">30180</a>: Stale launch if runtime-workbench launch is canceled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29028">29028</a>: Stack trace hyperlink does not work after clear<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 21, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24154">24154</a>: Add interfaces to debug core for enhanced debug function...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27782">27782</a>: Improve Debug UI plug-in startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29660">29660</a>: Only top stack frame icon correct after long step<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29676">29676</a>: Better error reporting when a launch config goes missing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29720">29720</a>: launch dialog for edit/run of a single config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26157">26157</a>: launch config working sets applied globally<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27989">27989</a>: Provide 'final verification' launch configuration API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29450">29450</a>: LaunchManager.searchForFiles optimization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24821">24821</a>: [Key Bindings] Provide debug action definitions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29153">29153</a>: Migrate extension point schema ownership<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 14, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28969">28969</a>: convenience action to open LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27342">27342</a>: No busy cursor when creating new config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25569">25569</a>: Checkbox in launch config doesn't keep its value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27164">27164</a>: shared launch configs and "validate edit"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29064">29064</a>: Attached source not recognized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27830">27830</a>: Use IActionDelegate2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28033">28033</a>: external tools dialog title shows as "&External Tools"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27403">27403</a>: Should consider using the new font propogation support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27444">27444</a>: [Dialogs] Dialog font should be used by debug components<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22927">22927</a>: Add word-wrap option to Variables display area<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28127">28127</a>: NPE if AbstractDebugView handling exception early<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22230">22230</a>: #setButtonLayoutData addition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24754">24754</a>: Preferences - should offer font choice for variable details pane<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Jan 07, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28386">28386</a>: Source selection disappears<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28571">28571</a>: Text selection updates on evaluation end<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10016">10016</a>: Flicker of System.err output in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28060">28060</a>: Launch#canTerminate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24884">24884</a>: Launching progress monitor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28562">28562</a>: details area does not update when BP hit while stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7715">7715</a>: Console does not show output of selected process<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28867">28867</a>: [Console] Navigation between output of hosted/debugged apps<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27172">27172</a>: Hang copying variables with cycle<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29052">29052</a>: ConsolePreferencePage problem<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Dec 17, 2002
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28383">28383</a>: Debug view flashes during stepping<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Dec 16, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28245">28245</a>: No launchAdded notification on first relaunch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28282">28282</a>: Launch view doesn't select stack frame when it is made visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27011">27011</a>: NPE from LaunchConfigurationTabGroupViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28317">28317</a>: NPE exiting workbench<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Dec 13, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28050">28050</a>: Extra separator if no history, only favorites.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27881">27881</a>: Remote Debug Connection Configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28088">28088</a>: Console view caused NPE when "becomesVisible"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27092">27092</a>: Only update variables/expressions when visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28227">28227</a>: NPE painting console document<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28100">28100</a>: Re-factor "isVisible" debug view function<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25437">25437</a>: Console Performance when output alternates between streams<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Dec 10, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27139">27139</a>: Common tab has duplicate accelerator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23216">23216</a>: Shared launches marked as favorites do not show up after importing existing project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23951">23951</a>: Flicker when closing launch config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26333">26333</a>: Improve launch manager startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24715">24715</a>: Launch dialog open return codes are internal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14758">14758</a>: ILaunchConfigurationTab#performApply called twice on hitting the Apply button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26335">26335</a>: Improve debug plug-in startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27834">27834</a>: LaunchHistory registers unnecessary listener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27607">27607</a>: Better Ant project names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26503">26503</a>: launch groups/dropdown should support shortcuts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27877">27877</a>: Don't use a marker for stack frame line highlighting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27816">27816</a>: Re-work launch actions to use launch group framework<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27952">27952</a>: hyperlink region should not be stored in hyperlink<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Dec 03, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27353">27353</a>: ConsoleContentProvider -> ConsoleColorProvider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27347">27347</a>: Process types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27200">27200</a>: "Show console when program writes ..." doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19674">19674</a>: LaunchConfigurationDialog is over 3,000 lines (whew!)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27248">27248</a>: Launch config dialog is grotesquely large<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Nov 26, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18814">18814</a>: Cannot 'save changes' and duplicate a Launch configuration at the same time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25745">25745</a>: NPE if no tab group specified for a configuration type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26996">26996</a>: get/setAttributes on ILaunchConfiguration/WorkingCopy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26702">26702</a>: Allow single launch config to be edited<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Nov 12, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25701">25701</a>: Instruction pointer disappears<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23477">23477</a>: Most recent launch config lost after each restart<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Nov 05, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1524">1524</a>: Feature: Displaying Instruction pointer (1G3A7CG)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14758">14758</a>: ILaunchConfigurationTab#performApply called twice on hitting the Apply button<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Oct 22, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24738">24738</a>: Launch Config Dialog: Pressing cancel permanently diables 'Apply'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16817">16817</a>: DebugException: The resource tree is locked for modifications.<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Oct 15, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24364">24364</a>: Investigate opening launch config dialog from inside a delegate's launch() method<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Oct 8, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24270">24270</a>: UI hangs when try to debug with 'bad' VM arguments<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Oct 1, 2002
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24100">24100</a>: LaunchConfigurationWorkingSetPage.setSelection should work without container being set<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Sept 17, 2002
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23124">23124</a>: Presentation of "no source"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23266">23266</a>: NPE exception in VariablesViewContentProvider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22595">22595</a>: No code assist in details pane<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Aug 27, 2002
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22283">22283</a>: ArrayIndexOutOfBoundsException in launch view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19856">19856</a>: Create a new launch configuration should always be an option in launch configuration wizard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18877">18877</a>: Flicker in VariablesView when rapid stepping<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-August 06, 2002
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21585">21585</a>: Evaluating expression switches editors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9687">9687</a>: Should have busy cursor opening editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21640">21640</a>: Show types action in Variables view is confused<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18787">18787</a>: Slightly off message in details pane of Expressions view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15847">15847</a>: Disable Run / Debug buttons in toolbar if no contribution is associated with that mode<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 30, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21504">21504</a>: Both "enable" and "disable" breakpoints actions are enabled when multiple breakpoints are selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20431">20431</a>: Run/debug include in favorites setting ineffective<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 16, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19099">19099</a>: Console in different window keeps name of terminated and removed debug target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20504">20504</a>: Launch view accelerator update workaround no longer needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20602">20602</a>: Potential NPE in AbstractDebugView when subclass does not persist state in memento<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20610">20610</a>: [Console] Terminate button disabled on Clear Console, even when app still running<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20713">20713</a>: 2 requests to change value of variable when enter pressed on invalid value.<br>
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_0_buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r3_0_buildnotes_platform-debug.html
deleted file mode 100644
index fb29aed..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_0_buildnotes_platform-debug.html
+++ /dev/null
@@ -1,994 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>3.0 - RC4</p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=68181">68181</a>: [doc] Error in IDebugUIConstants javadoc (launchActionSet)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>3.0 - RC3</p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61992">61992</a>: Slow selection change in debug view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66586">66586</a>: Debug-related views no longer "come to front" in non-debug perspective<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66990">66990</a>: PopupInformationControl does not specify shell for handler<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66330">66330</a>: Remote Debug Connection not disconnected when JDIDebugModel.newDebugTarget(...) fails<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66443">66443</a>: Review LaunchView call to IEditorReference#getEditor(true)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67522">67522</a>: Views don't open when auto-manage initially activated<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67463">67463</a>: Launch Shortcuts schema is incorrect<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67507">67507</a>: Ampersand ('&') in label when adding directory to source lookup path<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67620">67620</a>: Breakpoints should not be shown in the overview ruler<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65051">65051</a>: string_prompt variable prevents other variables from executing<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67781">67781</a>: color tuning<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>3.0 - RC2</p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64638">64638</a>: Don't use new "Run" icon on Debug objects<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45980">45980</a>: Check calls to IWorkspace.run(...)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65067">65067</a>: switch perspective when breakpoint hit not honored<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57293">57293</a>: [doc] Beef up contextViewBinding schema<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66033">66033</a>: Move isAutoManageViews() to LaunchViewContextListener<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63340">63340</a>: Remove DebugContextManager<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65814">65814</a>: o.e.debug.core.memoryRenderings extension point<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65581">65581</a>: broken doc link for stringVariablePresentations<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65351">65351</a>: Breakpoint migration from 2.1 to 3.0<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64940">64940</a>: Delay on breakpoint rendering when enable/disable<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66187">66187</a>: Polish patch: support view activation via a keyboard shortcut<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65356">65356</a>: source lookup tab migration from 2.1 to 3.0<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65072">65072</a>: workbench not activated when breakpoint hit<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64984">64984</a>: Inspect doesn't work in Display View<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65039">65039</a>: Launch view should use IPerspectiveListener2<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64666">64666</a>: Run/Debug prompts to continue before compiling [JUnit]<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52336">52336</a>: [Viewers] Internal error at start of debug session<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62677">62677</a>: Adding working set to Source Lookup Tabs causes problems in the tab.<br>
- 
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>June 1, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56012">56012</a>: Consistency in space at top of launch configuration tabs<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64188">64188</a>: Classcast exception when trying to resolve non-stackframe object<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63468">63468</a>: ConsoleView should set it's title using setContentDescription()<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64019">64019</a>: IllegalArgumentException when editing ant builder<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63449">63449</a>: Wrong menu path for profile action set.<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61117">61117</a>: enable checkbox state after "Show Breakpoints Supported by Selected Target"<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62322">62322</a>: Green triangle for Run is confused with the Resume button<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63951">63951</a>: Wrong window activated when new window is opened<br> 
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>May 25, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63323">63328</a>: Move "show debug action set" to LaunchView<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63493">63493</a>: LaunchView keeps lots of state from last debug session in memory<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63016">63016</a>: Display view always brought to the top<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64337">64337</a>: unqualified source lookup fails in external archive<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62803">62803</a>: ExternalArchiveSourceContainer needs to handle multiple root paths<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>May 21, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63348">63348</a>: NPE from popup<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63374">63374</a>: NPE in LaunchView.partClosed<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63575">63575</a>: Invalid button states in EnvironmentTab of Launch Configuration<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>May 20, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62798">62798</a>: Ok to launch Yes/No should also honor cancel<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62960">62960</a>: NullPointerException when restoring default in Source Lookup Tab<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62677">62677</a>: Adding working set to Source Lookup Tabs causes problems in the tab.<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63009">63009</a>: Source Lookup Tab does not properly show icons for Jar files<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63182">63182</a>: Warning about error in pre-requisite wrong<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63090">63090</a>: Console scroll button has its logic reversed.<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63053">63053</a>: View Management view menu drop down has no mnemonic<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63249">63249</a>: uneccessary error logging<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63029">63029</a>: Show As for logical structure has no mnemonic<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62564">62564</a>: A runnable may not be run, if the previous one throws an exception<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=54407">54407</a>: Make a pass on all the properties files<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62643">62643</a>: [External Tools] Quoted args send quote to process<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63027">63027</a>: View Management "Reset Now" button does not layed out correctly<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56042">56042</a>: [Coolbar] [Workbench] Toolbar flash selecting stack frames<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62592">62592</a>: Debug view can fail to close generic debugging views<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63050">63050</a>: NPE in VariablesViewContentProvider<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62574">62574</a>: Expose Debug view's "view tracking" behavior<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63293">63293</a>: Pressing "Reset Now/Cancel" does not cancel<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63256">63256</a>: NPE when adding a breakpoint in an external Java file<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62391">62391</a>: View management: Views opened in wrong perspective<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>May 18, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57519">57519</a>: Console should bold title when new output is available<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=53508">53508</a>: Activate debug action set with debug view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61801">61801</a>: A null String object reference becomes the value "null"<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62069">62069</a>: NullPointerException in LaunchViewContextListener#initViewCollection<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61940">61940</a>: Customized perspective opens closed views<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61064">61064</a>: improve string variable descriptions<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61116">61116</a>: Common watch expressions don't work for wrapper adapters<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60024">60024</a>: Memory view code could make use of Debug plugin logging support<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61385">61385</a>: Remove debug action group doc<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=47295">47295</a>: Hard to pin down a console<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62236">62236</a>: Debug color settings should NOT be shown in Workbench>Colors and Fonts<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61938">61938</a>: Add source location dialog always selects Java Classpath Variable<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62193">62193</a>: No RunToLine action in context menu<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62488">62488</a>: Default pref settings<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62490">62490</a>: out-of-box experience<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61412">61412</a>: Source lookup tab causes config to need saving<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44632">44632</a>: Debug view need to be error-proof<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61958">61958</a>: dangerous practice of catching Throwable<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60327">60327</a>: Review LaunchViewContextListener multi-window behavior<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56412">56412</a>: Duplicate favorites after rename<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61630">61630</a>: schema for external tools configurationDuplicationMaps ext point<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55400">55400</a>: context menu>watch from the variables view doesn't open/activate the expressions view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62258">62258</a>: No vertical scroll bar on inspect results<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61826">61826</a>: Add file extension filtering for run/debug context menu<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51435">51435</a>: CommonSourceNotFoundEditor#resetEditor<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60016">60016</a>: Accessibility: Run config, Arguments tab: Working directory not read<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61868">61868</a>: Double tree viewer in debug view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61917">61917</a>: use .exsd for extension pt schemas<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62202">62202</a>: Run context menu does not filter actions based on enabled activities<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62269">62269</a>: Uneccessary label computation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61928">61928</a>: Launch Views leaking<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>May 11, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=54598">54598</a>: Launch configuration; wizard buttons New/Delete margins<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57637">57637</a>: turn Remove All Terminated Launches on by default<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60305">60305</a>: Layout problems on the Environment tab<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58384">58384</a>: Profile toolbar launch menu should use "Profile As >"<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51916">51916</a>: Add ability to change source lookup of a running launch<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58725">58725</a>: [Debug] "Switch to assciated perspective when launching" should set to "Prompt" by default<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60286">60286</a>: API Request: Ability to open launch configuration properties dialog on a specific tab<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60838">60838</a>: Support matchesContentType property test<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45656">45656</a>: New Annotation Features<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59319">59319</a>: make scroll lock global to all process consoles<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60927">60927</a>: notifyResult(...) in OpenLaunchDialogAction<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60952">60952</a>: Chkpii errors in I20040504<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60364">60364</a>: debug used deprecated runtime code<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61321">61321</a>: ui.console should not depend on core.resources<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60918">60918</a>: [KeyBindings] Some key bindings not working<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60974">60974</a>: make org.eclipse.debug.internal.ui.views.console.ProcessConsolePage.getConsoleViewer() method public<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61105">61105</a>: Configure view management per perspective<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60010">60010</a>: Auto manage view action move to view menu<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61221">61221</a>: No progress dialog when prompted to wait for build<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57763">57763</a>: NPE running from scrapbook<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61166">61166</a>: source not found<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61120">61120</a>: Should closed projects be skipped?<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55423">55423</a>: don't schedule build if already building<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=41376">41376</a>: Incorrect english: doesn't account for case where launch config type starts with vowel<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=53722">53722</a>: Run As... menu disabled if selection is empty<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61634">61634</a>: Compile errors in workspace message should be more general<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61336">61336</a>: Compile errors prompt should use a warning dialog<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61291">61291</a>: Breakpoint view is displayed when a breakpoint is hit<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57052">57052</a>: [KeyBindings] F11 (Debug Last Launched) Conflict on MacOS X<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=46168">46168</a>: fork() methods should use jobs<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61427">61427</a>: LaunchConfigurationDialog leaked for each use<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=54946">54946</a>: Contextual launch contribution should not set adaptable=true<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60051">60051</a>: Launching with Ant buildfile errors <br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61308">61308</a>: Display var/expression shows in unreadable popup<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57333">57333</a>: Provide API to specify whether a substitution variable supports arguments<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57164">57164</a>: Context view activation should maintain view "stack"<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57588">57588</a>: Removing process from launch doesn't remove associated console<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61810">61810</a>: NPE in the log<br>
- 
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>May 4, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60064">60064</a>: Memory preference page is missing mnemonic<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60254">60254</a>: Change required in AbstractMemoryRenderer<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56146">56146</a>: Memory View Contribution to Eclipse<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56827">56827</a>: NPE - ExpressionManager expects a delegate for all debug models<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57862">57862</a>: Ability to configure variables from variable selection dialog<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=54726">54726</a>: Fix schema reference in launch shortcut extension<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51503">51503</a>: Add filter button to Expressions view to show expressions by debug target<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59776">59776</a>: Migrate memory view pref page to view setting<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60203">60203</a>: Launch job waiting forever<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60655">60655</a>: Memory Block is not enabled / disabled by the Memory View properly<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59986">59986</a>: Move from ProgressMonitorDialog to IProgressService.busyCursorWhile()<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57272">57272</a>: AlwaysNeverDialog should have "Eclipse standard" look<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60708">60708</a>: Edit String Substitution Variable dialog does not use the dialog font<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58933">58933</a>: Remove activity filtering in Breakpoints view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59330">59330</a>: migrate to new search API<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59183">59183</a>: Cancelling foreground launch waits for build to complete<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59535">59535</a>: Opening launch configuration dialog with "profile" mode.<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59356">59356</a>: LaunchConfigurationDelegate needs a way to tell it per instance to not put up status prompts.<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60409">60409</a>: Use of deprecated fontDefinition extension point<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59854">59854</a>: Debug keybindings wrong on Mac<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59990">59990</a>: function keys not working<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58528">58528</a>: User prompted to switch to debug when debug perspective is active<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>April 27, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58957">58957</a>: breakpoints : Remove BreakpointManagerListener on dispose<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57305">57305</a>: flashing breakpoints view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57173">57173</a>: Activity filtering not working for debug<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58684">58684</a>: Installed JRE can't be named "."<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=42138">42138</a>: Provide a way to dynamically change the process label shown in the console title and debug view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=47164">47164</a>: Need to be able to disable go to file action for breakpoints.<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57517">57517</a>: eval popup are initially too small<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57735">57735</a>: When including assert tags in private method, breakpoint can't be set<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59483">59483</a>: Predefine some launch conifiguration variables<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59042">59042</a>: Invalid Launch configurations are never cleaned up<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58725">58725</a>: [Debug] "Switch to assciated perspective when launching" should set to "Prompt" by default<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=39024">39024</a>: Need better icon for object browsers action<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57999">57999</a>: Breakpoints added to view while breakpoint manager disabled are not greyed<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58516">58516</a>: HandlerSubmission constructor marked as deprecated<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58766">58766</a>: doc/enhance stratum breakpoint<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59002">59002</a>: Do we need marker definitions for instruction pointers<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57642">57642</a>: [ViewMgmt] debug tests failures due to missing selection<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57836">57836</a>: Support to put paths in variable values<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59729">59729</a>: Run-> context menu only enabled for a single selection<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56246">56246</a>: InstructionPointerAnnotation and IDebugEditorPresentation<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58209">58209</a>: Support multi-select for Resume action<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58377">58377</a>: 'Esc' out of change variable dialog doesn't cancel action<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58650">58650</a>: replace debugModelActivityBinding with pattern binding<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59828">59828</a>: Various issues with SelectedResourceManager<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=7552">7552</a>: Keep breakpoints when renaming a resource<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>April 20, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58290">58290</a>: Launch error message spelling<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56850">56850</a>: DebugViewDecoratingLabelProvider.computedText never cleared<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=29890">29890</a>: Debug Platform Source Lookup Facilites<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45877">45887</a>: When selecting "Build before launching", the build is not specific to the project launched, but the whole workspace<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58754">58754</a>: Wait for build never and prompt preferences reversed<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55419">55419</a>: Generalize compilation error detection for other launchers<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56191">56191</a>: Skip breakpoints in run-to-line<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57306">57306</a>: Improve progress feedback when user wants to wait on build before a launch<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>April 13, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57790">57790</a>: Support multiple debug-model-to-context extensions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53222">53222</a>: Trigger activities when debug elements selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53640">53640</a>: Registers view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57929">57929</a>: Scope step actions with debuging context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58052">58052</a>: Launch view can open views in the wrong window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57788">57788</a>: API changes to IHandler causing compile errors<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>April 6, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56235">56235</a>: Organize Favorites dialog could remember size<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56266">56266</a>: Reorder preference choices for Save dirty editors<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56966">56966</a>: Skip All Breakpoints should have a keyboard shortcut<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=30639">30639</a>: Debug preference pages cut of in High Contrast<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57328">57328</a>: NPE from ResourceResolver<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55685">55685</a>: Get rid of MoveResultToViewerAction<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55808">55808</a>: SelectedResourceManager holds onto selections too long<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56192">56192</a>: Remove unused command for close popup<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55612">55612</a>: Rename "Run" keybinding category to "Run/Debug"<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56035">56035</a>: Console text font should be moved to Workbench Appearance<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51901">51901</a>: Breakpoint image specification is on jdt.ui instead of debug.ui<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56214">56214</a>: ProjectSourceContainer#getSourceContainers() and referenced projects<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51084">51084</a>: Launch view should not track view open/close during perspective reset<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52524">52524</a>: Blocked launch dialog should offer cancel as an option<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56013">56013</a>: Remove the use of the deprecated shared icons<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56070">56070</a>: New and Delete buttons remained disabled after cancelling search<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=53548">53548</a>: Automatically close views that were opened automatically<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>March 30, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56677">56677</a>: AssertionFailed from LaunchConfigurationView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56082">56082</a>: no junit test for LaunchConfigurationDelegate.preLaunchCheck()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55309">55309</a>: Leak: RetargetWatchpointAction hangs onto last activated part<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56672">56672</a>: 'Marker id not found' error in breakpoint view during fast create/delete breakpoint actions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>March 25, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55704">55704</a>: Step into selection leads to too many breakpoints being skipped<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56238">56238</a>: Continue Launch when compile errors preference: Never<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>March 23, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53677">53677</a>: Remove "debug popup" scope when dialogs support key bindings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52613">52613</a>: [New Look] Duplicate debugger perspective opened while stopping at brk pt<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55124">55124</a>: Warning reported in the builds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36495">36495</a>: Debugger support for roles and activities<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55040">55040</a>: Don't provide ILaunchListener2 API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54925">54925</a>: want option to not run programs with errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54631">54631</a>: debug view opens while prompting for perspective change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6400">6400</a>: DCR - suggestion to improve running vs. debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55183">55183</a>: Preference to switch perspective on suspend is too eager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55442">55442</a>: ClassCastException in LaunchViewEventHandler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55194">55194</a>: "String" problems with the DebugPreferencePage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55430">55430</a>: "[KeyBindings] Migrate Popup keybinding support to new EnabledSubmission API<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>March 16, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50156">50156</a>: Disable "Use Step Filters" toggle for targets that do not support step filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54189">54189</a>: Disable "Use ToggleAutoManageViewsActionDelegate is missing required id<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37485">37485</a>: Icons for launch short-cuts should be optional<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44234">44234</a>: Type names always qualified in expressions view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53223">53223</a>: Expression popup should also show toString()/details<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54073">54073</a>: Chkpii warnings in plugin.xml files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10302">10302</a>: 'Run to Line' stops at breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52809">52809</a>: Evaluating in debugger should not stop on breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38950">38950</a>: Display offset of cursor in variables detail pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10078">10078</a>: Feature: Global enable/disable of breakpoints (and leave breakpoints list untouched)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54182">54182</a>: Two prompts when starting a debug session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44632">44632</a>: Debug view need to be error-proof<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12746">12746</a>: refactoring support for launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52017">52017</a>: Add createCheckButton API to AbstractLaunchConfigurationTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34345">34345</a>: Disabled watch expression label includes "obsolete"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53001">53001</a>: Need a separator between 'Include type inheriting ...' and 'stop in main' in the main Java launch configuration tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54859">54859</a>: Breakpoint are not set as non-registered when deleted from the breakpoint view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54117">54117</a>: Contextual Launch should use XML Expression Language<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52952">52952</a>: show all env vars when replacing environment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48933">48933</a>: Move to use the Platform UI color support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50384">50384</a>: Debugger perspective: default layout improvements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37514">37514</a>: global retargettable breakpoint action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52450">52450</a>: Don't open Expression View by default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51402">51402</a>: [Generic console] need showConsoleView() method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51935">51935</a>: Add UI support for variables when specifying environment variable values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54065">54065</a>: Tooltip text for profile button in toolbar is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54901">54901</a>: Better error logging when launch configuration blows up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51568">51568</a>: Numerated accelerators for launch shorts in context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54924">54924</a>: Variable selection dialog needs mneumonic for Variable Desc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54619">54619</a>: Doc for breakpoint manager enablement<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>March 9, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14414">14414</a>: Use detail pane for variable value setting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53636">53636</a>: Label changes after display/inspect popup is visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53665">53665</a>: NPE with "double click"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48313">48313</a>: Message console does not support tab size<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52964">52964</a>: Persist size of debug pop-ups (or size better)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53470">53470</a>: launch waiting for build shows up in context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53693">53693</a>: Variables view doesn't show variables.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51787">51787</a>: Stepping in Java Perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53554">53554</a>: Default perspective switching preferences are backwards<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53954">53954</a>: "Change variable value" action.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50886">50886</a>: Update debug markerAnnotationSpecification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44135">44135</a>: ability to prompt for arguments in run/debug profiles<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>March 2, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52607">52607</a>: console: no action when drop down is pressed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51387">51387</a>: API for retreiving console associated with a process<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52867">52867</a>: New look - console no longer has a view title<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53225">53225</a>: Display keybinding for default close action in debug popup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51386">51386</a>:	Variables view does not persist size of details area<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13933">13933</a>:	Terminating launch does not send launchChanged event<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53313">53313</a>:	StringIndexOutOfBoundsException from LaunchConfiguration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52330">52330</a>:	Logical Structure should have a single value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52974">52974</a>: NPE in launch dialog when creating a new config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53409">53409</a>: Launch view doesn't persist "views to not close"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49877">49887</a>: Expose the exit value of IProcess<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Feb 24, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29953">29953</a>: Launch configuration not found, many stacktraces in the .log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13449">13449</a>: Better description when launch configuration type is selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52397">52397</a>: NPE from AddFavoritesAction and others when rename launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52763">52763</a>:	Edit String Substitution Variable dialog clears value on name change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52170">52170</a>:	Improve debug context inheritance<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Feb 17, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51998">51998</a>: Bad label for a menu item<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51465">51465</a>: Variable subranges<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51635">51635</a>: Debug view is not brought to the front when a breakpoint is hit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37942">37942</a>: Launch config dialog should have some way to determine the full location of JARs that are listed on the classpath<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Feb 12, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51803">51803</a>: ClassCastException importing preferences<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Feb 10, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18338">18338</a>: Run/Debug in the context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51388">51388</a>: Show "Selection Not Applicable"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51422">51422</a>: NPE on hitting breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49934">49934</a>: Promote views with debugging contexts<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Feb 3, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50155">50155</a>: New Job#schedule() behavior<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50203">50203</a>: Exception in error log + blank rendered in sessions view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50543">50543</a>: Cannot override PATH environment variable<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Jan 27, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49972">49972</a>: Nothing happens when launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50232">50232</a>: Missing localizations for extension point names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49891">49891</a>: Problems launching a program, when using linked resources in CLASSPATH, which are not set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50407">50407</a>: NPE in selected text resolver<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50223">50223</a>: Missing localizations for extension point names<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Jan 20, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46781">46781</a>: Console buffer size limit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46869">46869</a>: Message console does not buffer output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49288">49288</a>: Set Variable dialog not sized properly or resizable.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47601">47601</a>: external tools: add ${selection} as a variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48320">48320</a>: Adapt to annotation deprecations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49977">49977</a>: Less invasive background labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41510">41510</a>: Step with Filters: unify function across languages by allowing filters to be enabled/disabled on the 3 basic step functions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50232">50232</a>: Missing localizations for extension point names<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Jan 13, 2004 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45603">45603</a>: Cycles in string substitutions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46363">46363</a>: Lazy label provider for variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49884">49884</a>: ProcessConsolePage does not deregister hyperlink action<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Dec 15, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48608">48608</a>: Handle null for IProcess#getStreamsProxy()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46868">46868</a>: Changing text color via a MessageStream doesn't update colors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46797">46797</a>: Possible NPE when writing launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48226">48226</a>: Tooltip text for "External Tools" toolbar button not updated.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47668">47668</a>: Exclude exception location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37506">37506</a>: RefreshTab makes use of WorkbenchPlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45991">45991</a>: need package.html in "variables" plug-in<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47848">47848</a>: IDebugEditorPresentation methods called in different order<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47855">47855</a>: Review VariableViewToggleAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48224">48224</a>: Target execution order hidden<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47268">47268</a>: Selected launch configuration incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48190">48190</a>: Variables context menu actions need eclipses [...]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40541">40541</a>: NPE in launch configuration dialog<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Dec 9, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37918">37918</a>: Console uses Date format that is not appropriate for Japanese<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47949">47949</a>: Nothing added to launch history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47924">47924</a>: Thread label flicker<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47834">47834</a>: No feedback that launch got queued/postponed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47377">47377</a>: Console: order of local toolbar items should remain stable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42272">42272</a>: Resize problem in Launch Config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41609">41609</a>: invalid tab size (rendering) in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48315">48315</a>: LaunchView thread timer runs too long<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47389">47389</a>: Use of deprecated API from IActivityManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38419">38419</a>: Variable "filters" is a misnomer<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Dec 2, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47478">47478</a>: Switching to use JRE Library container<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47107">47107</a>: Open Resource not available in Debug perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45981">45981</a>: Move debug projects to use PDE dynamic classpath support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46811">46811</a>: Deadlock saving working copied<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Nov 25, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47248">47248</a>: NPE starting run-time workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38979">38979</a>: Should not be able to remove contributed variables<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Nov 21, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47100">47100</a>: TitleAreaDialog image has been disposed<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Nov 20, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47071">47071</a>: Set instruction point layer to 6 in code<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Nov 19, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46858">46858</a>: FileLink needs to resolve an editorId<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Nov 18, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45524">45524</a>: Artwork for array partitions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46728">46728</a>: org.eclipse.ui.console should be tagged as 3.0 plug-in<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44479">44479</a>: Exception when trying to start RuntimeWorkbench while workspace is building<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Nov 11, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43388">43388</a>: Possible problem with DebugPlugin$AsynchJob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36942">36942</a>: [plan item] Present logical view of Java objects in debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45903">45903</a>: Breakpoint incorrectly enabled after activity filtering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43387">43387</a>: Refresh tab and specific resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44566">44566</a>: Refresh tab does not enable "Apply" when changing selection<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Nov 4, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45849">45849</a>: ConcurrentModificationException in Expression manager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43332">43332</a>: String Substitution Support - org.eclipse.core.variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43952">43952</a>: Improve launch tab interface/notification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44100">44100</a>: UI blocked removing breakpoints from breakpoints view with other jobs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46152">46152</a>: Revise usage of IWorkspace.run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46035">46035</a>: NPE in Run... pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45858">45858</a>: User gets prompted multiple times to save the same resources<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Oct 28, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43388">43388</a>: Possible problem with DebugPlugin$AsynchJob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45195">45195</a>: Debug View: Copy Stack only copies <pending...><br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44856">44856</a>: errors in label update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44723">44723</a>: Redundant launching job message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36735">36735</a>: Would like automatic partitioning of large arrays<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44099">44099</a>: organize favorites...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44577">44577</a>: Suspended debug target not given "suspended" overlay<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Oct 21, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44934">44934</a>: Remove dependancies on Xerces plugin<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Oct 15, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44660">44660</a>: MessageConsole.appendToDocument(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44040">44040</a>: IConsoleLineTrackerExtension and after consoleClosed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44012">44012</a>: missing closed notification for console line tracker<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Oct 07, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40609">40609</a>: Launch configuration dialog re-initializes all of the tabs on close<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43226">43226</a>: Deadlock using 0916<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44048">44048</a>: Cannot create New String Substitutions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Sep 30, 2003 </p>
-<h3>API Changes</h3>
-<ul>
-  <li>Support for variables that support string substitution has been changed. 
-    The previously experimental extension points for simpleLaunchVariables, contextLaunchVariables, 
-    and refreshLaunchVariables have been replaced with new (and yet experimental) 
-    extension points valueVariables and contextVariables. The new support is purely 
-    string based and is currently implemented in internal packages. It is percieved 
-    that the new support could be moved to a new plug-in such that more clients 
-    could leverage the support, as the current implementation is not tied to the 
-    debug plug-in. </li>
-  <li>A console line tracker (IConsoleLineTracker) can be notified when its associated 
-    console is closed (i.e. all of its streams are closed), by implementing the 
-    new interface IConsoleLineTrackerExtension. The notification indicates that 
-    no more output will be appended to the console.</li>
-</ul>
-
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31734">31734</a>: Console line trackers not notified of last line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43608">43608</a>: NPE removing an existing program in the external tools launching configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43477">43477</a>: Console plug-in needs package.html<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43704">43704</a>: LaunchConfiguration.getFile does not handle linked resources: NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41579">41579</a>: Move selection to next suspended thread after resuming<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43197">43197</a>: Race condition between console line tracker and debug terminate event<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Sep 23, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43225">43225</a>: No prompt to save dirty editors <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43353">43353</a>: Environment variable names all lowercased when appending to native environment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43331">43331</a>: Rework Refresh Tab to avoid use of "refresh variables"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43334">43334</a>: Refresh Tab always needs "apply" when working set specified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33866">33866</a>: Move to using the PDE generated build.xml for exporting plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37263">37263</a>: Support for generic console<br>
- 
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Sep 16, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42570">42570</a>: Promote RuntimeProcess to API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42779">42779</a>: Duplicate entry in expression view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42814">42814</a>: Ability of "override" environment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42877">42877</a>: Clean up Launch in Background / Run in Background<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19292">19292</a>: Icons for enable/disable breakpoints very confusing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37091">37091</a>: Need icon for environment tab and variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10668">10668</a>: Variable view - should reselect selected variable name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42177">42177</a>: Installed JRE's preference page is huge<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40863">40863</a>: Env var usability<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37784">37784</a>: Rename "Debug" preference page to "Run/Debug"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Sep 09, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42020">42020</a>: Move "Run in background" to builders only<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41866">41866</a>: Reference to IConsoleDocumentContentProvider in error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42179">42179</a>: Reevaluate watch expression enabled with no active targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41633">41633</a>: ILaunchManager#getLaunchConfigurations returns private configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41352">41352</a>: Incorrect lineAppended notification from ConsoleLineNotifier<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1562">1562</a>: Suspending on a breakpoint...select that breakpoint (1GD5P0D)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42184">42184</a>: Edit->Find action for the console is only enabled after some text is selected<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Sep 2, 2003 </p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41758">41758</a>: "Profile Last Launched" menu item is at the bottom, should be at the top<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42218">42218</a>: LAUNCH_CONFIGURATION_DIALOG_LAUNCH_LAST no longer used<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41947">41947</a>: LaunchConfigurationDialog and cancellation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42064">42064</a>: "New Launch Variable" and "Edit Launch Variable" dialogs do not use dialog font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42189">42189</a>: NPE during shutdown<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-<p>Aug 27, 2003 </p>
-<h3>New Features in Milestone 3 (release 3.0)</h3>
-<h4>Extensible Watch Expressions</h4>
-<p>In release 3.0, the debug platform provides an implementation of watch expressions. 
-  Debug models can contribute watch expression delegates if they support watch 
-  expressions. When a stack frame is selected, the associated delegate is queried 
-  to provide a value for a watch expression in the given (stack frame) context. 
-  The debug platform provides persistence, enabling, disabling, entering, and 
-  editing of watch expressions. See the new extension point <code>org.eclipse.debug.core.watchExpressionDelegates</code> 
-  for more details.</p>
-<h3>API Changes</h3>
-<h4>Launch Tabs & Tab Groups</h4>
-<p>Launch tab groups and launch tabs are no longer notified when a launch completes. 
-  The method <code>launched(ILaunch)</code> in the interfaces <code>ILaunchConfigurationTab</code> 
-  and <code>ILaunchConfigurationTabGroup</code> has been deprecated and is no 
-  longer called. Relying on this method for launch function was always problematic, 
-  since tabs only exist when launching is performed from the launch dialog. Also, 
-  with the introduction of background launching, this method can no longer be 
-  called, as the launch dialog is be closed before the resulting launch object 
-  exists.</p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41675">41675</a>: breakpoints no longer visible in overview ruler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38842">38842</a>: Make enabling and disabling expressions part of the debug framework.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27493">27493</a>: Re-use "watch list" actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41940">41940</a>: watch item not updated when enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41941">41941</a>: API method should be internal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41550">41550</a>: launch in the background<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41977">41977</a>: watch items will not disappear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42013">42013</a>: Launching should not be UIJob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42037">42037</a>: Breakpoint not shown as checked when enabled.<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Aug 19, 2003
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41499">41499</a>: Update doc for watchExpressionDelegates extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41448">41448</a>: launch shortcuts should be sorted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41506">41506</a>: NPE attempting to create watch expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27281">27281</a>: The watch expressions don't persist across workbench invocations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41575">41575</a>: Can't open breakpoint view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41585">41585</a>: shared launch configurations are not being encoded with UTF-8<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Aug 12, 2003
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41290">41290</a>: Typo: "persepctive" in launch configurations window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41276">41276</a>: Clarify ILaunchConfiguration#getLocation()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41384">41384</a>: Chkpii errors in debug<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Aug 5, 2003
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40964">40964</a>: Got DebugException when stepping and removing a breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38365">38365</a>: current instruction pointer annotation only added for ITextEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40961">40961</a>: Refresh tab indicates working set error when no refresh<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40962">40962</a>: Refresh tab revert enabled incorrectly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19581">19581</a>: Single launch config error logged many time<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 29, 2003
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40576">40576</a>: NPE with pinned console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40844">40844</a>: NPE using debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35453">35453</a>: Process output causes switch to wrong console view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35573">35573</a>: Console output on new run or debug<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 22, 2003
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40235">40235</a>: preference page 'launch variables' uses borderless table, which looks suboptimal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40275">40275</a>: Superfluous semicolons in the generated jdt eval tests<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 15, 2003 
-<h3>New Features in Milestone 2 (release 3.0)</h3>
-<h4>Extensible Debug Events</h4>
-<p>The debug platform supports an extensible set of debug events. A debug event 
-  kind of <code>MODEL_SPECIFIC</code> has been added in the 3.0 release to indicate 
-  an application specific debug event. When a debug event of kind <code>MODEL_SPECIFIC</code> 
-  is created, the detail code in the event is client defined. The source of the 
-  event (debug element that generated the event) identifies the debug model from 
-  which the event was generated. The debug platform and user interface ignores 
-  model specific debug events.</p>
-<p>A data field has been added to debug events to allow clients to store application 
-  specific data in debug events.</p>
-<h4>Extensible Instruction Pointer Images</h4>
-<p>When a stack frame is selected in the debug view, the debugger opens a corresponding 
-  editor and displays an image in the editor ruler on the line that corresponds 
-  to the selected stack frame. In releases prior to 3.0, the images were provided 
-  by the debug plug-in and could not be overridden by a debug model. In release 
-  3.0, a debug model presentation (<code>IDebugModelPresentation</code>) can provide 
-  specialized images by implementing the debug editor presentation interface (<code>IDebugEditorPresentation</code>).</p>
-<h4>Editor Positioning and Custom Decorations</h4>
-<p>In release 3.0, debug model presentations can control the positioning of editors 
-  opened by the debugger for a stack frame, and may add extra decorations to the 
-  editor for a stack frame (for example, custom background coloring, etc.). This 
-  can be acheived by having a debug model presentation implement the new interface 
-  <code>IDebugEditorPresentation</code>, and implementing the appropriate methods 
-  - <code>selectAndReveal</code>,<code> decorateEditor</code>, and <code>removeDecorations</code>.</p>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33598">33598</a>: Need to dynamically set icon for current line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38976">38976</a>: Cancelling on launch var pref page does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38980">38980</a>: var descriptions not persisted.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37793">37793</a>: When moving folders and/or files in the navigator window UI hangs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36147">36147</a>: Launch framework doesn't handle out of sync launch files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37092">37092</a>: Environment tab variables should be sorted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38534">38534</a>: Duplicate environment variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39979">39979</a>: Edit button should be disabled for multiselect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36597">36597</a>: Would like to say what text attributes to use when selecting the executing statement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35208">35208</a>: IAE in JavaMainTab when entering project name with path seperator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39980">39980</a>: Selection of launch variables in the Launch Variable pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38324">38324</a>: Double dialog for launch variable is unnecessary<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40122">40122</a>: NPE in TextEditorSelection.remove<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 9, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39058">39058</a>: Would like "collapse all" action in variable view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38577">38577</a>: Setting detail pane to be visible can hide selected variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39482">39482</a>: NPE adding Java Watch expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39709">39709</a>: Duplicated entries in the debugger<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 1, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38584">38584</a>: Book Capitilization for the tooltip for Toggle Variable Filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38508">38508</a>: [Dialog] [Font] Remote Java Application/Connect Page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38302">38302</a>: An IProcess that returns null for getStreamsProxy generates 2 null pointer exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39397">39397</a>: Consolidate variables & general debug preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39208">39208</a>: Context menu "Copy" should show Icon from ISharedImages [Console]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39344">39344</a>: Convert ProcessMonitor to be a Job<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39258">39258</a>: Launch Configuration dialog: Screen cheese when switching between nodes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39394">39394</a>: Extensible debug events<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23432">23432</a>: Some exceptions should not be logged.<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 17, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38676">38676</a>: can't debug into class if file/class name identifier has _$$_<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38722">38722</a>: Need restoration of preference store for those actions that are enabled only<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38532">38532</a>: Variables view orientation actions should more closely mimic the type hierarchy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22941">22941</a>: Details area orientation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37241">37241</a>: Support for core variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38837">38837</a>: CHKPII errors with launch variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38972">38972</a>: variable values only persisted when added/removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38967">38967</a>: simple launch variables & lazy init of plug-in<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38725">38725</a>: Debug context variables missing descriptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38727">38727</a>: IVariableComponent#setEnabled(boolean)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 10, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38671">38671</a>: NPE from LaunchVariableManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38649">38649</a>: Plugin.xml and schema validation<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 5, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38423">38423</a>: NPE during creation of varibles view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38529">38529</a>: UI locks up toggline on the variable filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38420">38420</a>: Details pane does not populate when first opened<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-June 3, 2003
-
-<h3> Extensible Launch Modes</h3>
-<p>The debug platform supports an extensible set of launch modes. Releases prior 
-  to 3.0 only supported two launch modes - run and debug. The debug platform now 
-  provides an extension point for contributing new launch modes - <code>org.eclipse.debug.core.launchModes</code>. 
-  The debug platform now defines (contributes) three basic launch modes - run, 
-  debug, and profile. Other clients may contribute new launch modes. The launch 
-  manager (<code>ILaunchManager</code>) has additional API to retrieve all launch 
-  modes, and a human readable label for each launch mode.</p>
-<p>The debug platform has a new extension point to support the contribution of 
-  a launch delegate for a specific launch configuration type and launch mode - 
-  <code>org.eclipse.debug.core.launchDelegates</code>. This allows launch configurations 
-  to be extended by third parties, to support new launch modes. For example, a 
-  client could contribute a launch delegate that launches a Java Application in 
-  profile mode (currently, the SDK does not provide a profiler).</p>
-<p>The debug platform has added an optional element (<code>launchMode</code>), 
-  to the definition of a launch tab group extension - <code>(org.eclipse.debug.ui.launchConfigurationTabGroup</code>), 
-  to support the contribution of a set of tabs for a specific launch configuration 
-  type and launch mode. This allows third parties to extend an existing lauch 
-  configuration user interface. For example, a client contributing a launch delegate 
-  to profile a Java Application would also contribute a set of tabs to configure 
-  the profiler. The launchMode element defines a perpsective attribute to specify 
-  the default perspective associated with the launch configuration type and mode. 
-  This controls the perspective that is switched to/opened, by default, when a 
-  configuration is launched in the associated mode. For example, a client contributing 
-  a profiler may also contribute a profiling perspective that should be displayed 
-  when an application is profiled.</p>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38083">38083</a>: [Viewers] Debug exception when double-clicking on hashtable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38249">38249</a>: NPE trying to create project builder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37141">37141</a>: Common tab icon should not be a bug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38283">38283</a>: Remove the setting of the target perspective on working copies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38102">38102</a>: [Debug] [Preferences] Launch Variables Page; Table Columns truncated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38330">38330</a>: No double click to edit for launch variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38325">38325</a>: Launch variable not removed from table on remove<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38336">38336</a>: Support delete key in launch variable table<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38328">38328</a>: Launch variable table needs to be sorted alphabetically<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 27, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38070">38070</a>: AbstractLaunchConfigurationTabGroup#launched() javadoc typo<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 06, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37090">37090</a>: Apply/Revert incorrectly enabled for Environment tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36930">36930</a>: Support variables in launch configurations<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 29, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27243">27243</a>: Environment for external tools<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 22, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35740">35740</a>: Disable edit launch config popup action for private launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36390">36390</a>: Doc error in schema for consoleColorProviders and consoleLineTrackers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36152">36152</a>: Workbench Help set on wrong Composite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36035">36035</a>: Request a variant on DebugPlugin.exec that takes an environment pointer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36409">36409</a>: TODO marker for help context for OpenLaunchDialogAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27444">27444</a>: [Dialogs] Dialog font should be used by debug components<br>
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_0_changes.html b/eclipse/plugins/org.eclipse.debug.core/r3_0_changes.html
deleted file mode 100644
index 1e584cb..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_0_changes.html
+++ /dev/null
@@ -1,260 +0,0 @@
-<html>
-<head>
-<title>3.0 Debug Platform Change Notes</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
-<h1>3.0 Debug Platform Change Notes</h1>
-<p>This document describes important changes in the 3.0 debug platform, relative 
-  to the 2.1 release.</p>
-  
-<h2>New Features</h2>
-
-<h3> Extensible Launch Modes</h3>
-<p>The debug platform supports an extensible set of launch modes. Releases prior 
-  to 3.0 only supported two launch modes - run and debug. The debug platform now 
-  provides an extension point for contributing new launch modes - <code>org.eclipse.debug.core.launchModes</code>. 
-  The debug platform now defines (contributes) three basic launch modes - run, 
-  debug, and profile. Other clients may contribute new launch modes. The launch 
-  manager (<code>ILaunchManager</code>) has additional API to retrieve all launch 
-  modes, and a human readable label for each launch mode.</p>
-<p>The debug platform has a new extension point to support the contribution of 
-  a launch delegate for a specific launch configuration type and launch mode - 
-  <code>org.eclipse.debug.core.launchDelegates</code>. This allows launch configurations 
-  to be extended by third parties, to support new launch modes. For example, a 
-  client could contribute a launch delegate that launches a Java Application in 
-  profile mode (currently, the SDK does not provide a profiler).</p>
-<p>For backwards compatibility, the launch delegate supplied by a launch configuration 
-  type extension is used for the launch modes specified by the launch configuration 
-  type. A launch delegate supplied for a specific mode, is used only for that 
-  mode. </p>
-<p>The debug platform has added an optional element (<code>launchMode</code>), 
-  to the definition of a launch tab group extension - <code>(org.eclipse.debug.ui.launchConfigurationTabGroup</code>), 
-  to support the contribution of a set of tabs for a specific launch configuration 
-  type and launch mode. This allows third parties to extend an existing launch 
-  configuration user interface. For example, a client contributing a launch delegate 
-  to profile a Java Application would also contribute a set of tabs to configure 
-  the profiler. The <code>launchMode</code> element defines a <code>perspective</code> 
-  attribute to specify the default perspective associated with the launch configuration 
-  type and mode. This controls the perspective that is switched to/opened, by 
-  default, when a configuration is launched in the associated mode. For example, 
-  a client contributing a profiler may also contribute a profiling perspective 
-  that should be displayed when an application is profiled.</p>
-<p>For backwards compatibility, the tab group contributed for a launch configuration 
-  type (specifying no launch mode), is used for all launch modes for which a specific 
-  launch tab group is not contributed. Thus, when a mode is not specified by a 
-  tab group, the tab group effectively becomes the default tab group.</p>
-  
-<h3>Extensible Debug Events</h3>
-<p>The debug platform supports an extensible set of debug events. A debug event 
-  kind of <code>MODEL_SPECIFIC</code> has been added in the 3.0 release to indicate 
-  an application specific debug event. When a debug event of kind <code>MODEL_SPECIFIC</code> 
-  is created, the detail code in the event is client defined. The source of the 
-  event (debug element that generated the event) identifies the debug model from 
-  which the event was generated. The debug platform and user interface ignores 
-  model specific debug events.</p>
-<p>A data field has been added to debug events to allow clients to store application 
-  specific data in debug events.</p>
-  
-<h3>Editor Positioning and Custom Annotations</h3>
-<p>In release 3.0, a debug model presentation can position and annotate editors 
-  opened by the debugger for stack frames. This is done by implementing the new 
-  interface <code>IDebugEditorPresentation</code> on the applicable debug model 
-  presentation. When implemented, the model presentation is used as a delegate 
-  to position editors, add annotations, and remove annotations for stack frames.</p>
-
-<h3>Extensible Watch Expressions</h3>
-<p>In release 3.0, the debug platform provides an implementation of watch expressions. 
-  Debug models can contribute watch expression delegates if they support watch 
-  expressions. When a stack frame is selected, the associated delegate is queried 
-  to provide a value for a watch expression in the given (stack frame) context. 
-  The debug platform provides persistence, enabling, disabling, entering, and 
-  editing of watch expressions.</p>
-
-<h3>Process Factories</h3>
-<p>The debug platform provides an extension point (<code>org.eclipse.debug.core.processFactories</code>) 
-  for contributing process factories. A process factory can be used to override 
-  default process creation for a launch configuration when the debug plug-in (i.e.<code> 
-  org.eclipse.debug.core.DebugPlugin</code>) is consulted to create a new process. 
-  A launch configuration can reference a process factory to use when creating 
-  a process, via the launch configuration attribute <code>DebugPlugin.ATTR_PROCESS_FACTORY_ID</code>.</p>
-
-<h3>Automatic Array Partitioning</h3>
-<p>The debug plug-in now supports automatic array partitioning in the variables, 
-  which partitions large arrays into sub-ranges in the variables view. This is 
-  supported with the introduction of a new interface in the debug model representing 
-  an indexed value - <code>org.eclipse.core.debug.model.IIndexedValue</code>. 
-  If a value implements this interface, the variables view will automatically 
-  partition its elements as required, into sub-ranges</p>
-
-<h3>Logical Structure Types</h3>
-<p>Often, it is convenient to navigate complex data structures in terms of a logical 
-  structure, rather than an implementation structure. For example, no matter how 
-  a list is implemented (i.e. linked list, collection of arrays, etc.), it is 
-  often convenient to be able to view the list as an ordered collection. To facilitate 
-  the display of logical structures in the variables view, an extension point 
-  has been added (<code>org.eclipse.debug.core.logicalStructureTypes</code>) allowing 
-  debug models to contribute logical structures of its values, where applicable. 
-  Debug models may contribute delegates to translate raw implementation values 
-  into logical values. The variables view will display the logical values, when 
-  the option to display logical structures is turned on. More than one logical 
-  structure can be provided for a single value - the user can choose which structure 
-  to display.</p>
-
-<h3>Step Filters</h3>
-<p>To support step filters on all stepping functions (into, over, return), a new 
-  interface has been added to the debug platform - <code>IStepFilters</code> - 
-  which can be implemented by debug targets. This interface replaces <code>IFilteredStep</code>, 
-  which is now deprecated. The debugger provides a global toggle that turns step 
-  filters on/off for all stepping functions. Toggle actions are provided in the 
-  Run menu, Debug View context menu, and Debug View toolbar, which replaces the 
-  'Step with Filters' action in previous releases. As well, an API is provided 
-  on <code>DebugUITools</code> to modify step filter enablement. It is up to debug 
-  targets to implement this new interface and to honor the step filter enablement 
-  setting when stepping. See javadoc for <code>IStepFilters</code> for more details.</p>
-<p>This change maintains binary compatibility with previous releases. However, 
-  targets wishing to leverage the new function must implement the new interface.</p>
-
-<h3>Launch Termination Notification</h3>
-<p>A new interface has been introduced to provide a mechanism for launch listeners 
-  to be notified when a launch terminates. A launch is simply a container of processes 
-  and debug targets. When all of the contained targets and processes terminate, 
-  a terminate notification is now sent to those listeners that implement
-  <code>ILaunchesListener2</code>.</p>
-  
-
-<h3>Launch Delegate Enhancements</h3>
-<p>Lanuch delegates can optionally implement the new interface <code>ILaunchConfigurationDelegate2</code>. 
-  This allows launch delegates to provide a launch object to be used for a launch. 
-  For example, when debugging on a server a delegate could create a new launch 
-  object or may reuse an existing launch object if the server is already running 
-  in debug mode.</p>
-
-<h3>Retargettable Actions</h3>
-<p>The debug platform now provides retargettable actions for the following actions.</p>
-<ul>
-  <li>Run to Line</li>
-  <li>Toggle Line Breakpoint</li>
-  <li>Toggle Method Breakpoint</li>
-  <li>Toggle Watchpoint</li>
-</ul>
-<p>Debug implementations can plug into the retargettable actions by providing 
-  appropriate adapters for relevant editors and model objects that perform the 
-  actual operations (<code>IRunToLineTarget</code> and <code>IToggleBreakpointsTarget</code>, 
-  defined in the <code>org.eclipse.debug.ui.actions</code> package). A retargettable 
-  action works on the active part. First the part is asked for a target adapter. 
-  If the part does not provide an adapter, the selected objects within the part 
-  are consulted for adapters.</p>
-<p>As well, action delegates actions are provided by the debug platform such that 
-  debug implementations can contribute appropriate actions to context menus. An 
-  editor actions delegate is provided for the run to line action, and an object 
-  action delegate is provided for toggling method breakpoints and watchpoints. 
-  See the following classes: <code>RunToLineActionDelegate</code>, <code>ToggleMethodBreakpointActionDelegate</code>, 
-  and <code>ToggleWatchpointActionDelegate</code> in the <code>org.eclipse.debug.ui.actions</code> 
-  package.</p>
-  
-<h2>API Changes</h2>
-
-<h3>Debug Action Groups removed</h3>
-<p>The Debug Action Groups extension point (org.eclipse.debug.ui.debugActionGroups) has been
-  removed. In Eclipse 3.0, the workbench introduced support for Activities via the
-  org.eclipse.platform.ui.activities extension point. This support provides everything
-  that Debug Action Groups provided and is also easier to use (it supports patterns instead of
-  specifying all actions exhaustively) and has a programmatic API to support it.</p>
-<p>Failing to remove references to the old extension point won't cause any failures.
-  References to the extension point will simply be ignored. Product vendors are encouraged to
-  use the workbench Activities support to associate language-specific debugger actions with
-  language-specific activities (for example, C++ debugging actions might be associated with
-  an activity called "Developing C++").</p>
-
-<h3>Extensible Launch Modes</h3>
-<p>With the introduction of extensible launch modes, more than one launch delegate 
-  can exist for a launch configuration type. Releases prior to 3.0 only supported 
-  one launch delegate per launch configuration type. The method <code>ILaunchConfigurationType.getDelegate()</code> 
-  is now deprecated. The method <code>getDelegate(String mode)</code> should be 
-  used in its place to retrieve the launch delegate for a specific launch mode. 
-  The deprecated method has been changed to return the launch delegate for the 
-  <code>run</code> mode.</p>
-
-<h3>Launch Tabs & Tab Groups</h3>
-<p>Launch tab groups and launch tabs are no longer notified when a launch completes. 
-  The method <code>launched(ILaunch)</code> in the interfaces <code>ILaunchConfigurationTab</code> 
-  and <code>ILaunchConfigurationTabGroup</code> has been deprecated and is no 
-  longer called. Relying on this method for launch function was always problematic, 
-  since tabs only exist when launching is performed from the launch dialog. Also, 
-  with the introduction of background launching, this method can no longer be 
-  called, as the launch dialog is be closed before the resulting launch object 
-  exists.</p>
-
-<h3>Perspective Switching</h3>
-<p>In prior releases, perspective switching was specified on a launch configuration, 
-  via the launch configuration attributes <code>ATTR_TARGET_DEBUG_PERSPECTIVE</code> 
-  and <code>ATTR_TARGET_RUN_PERSPECTIVE</code>. With the addition of extensible 
-  launch modes in 3.0, this approach no longer scales. Perspective switching is 
-  now specified on launch configuration type basis, per launch mode that a launch 
-  configuration type supports. API has been added to <code>DebugUITools</code> 
-  to set and get the perspective associated with a launch configuration type for 
-  a specific launch mode.</p>
-<p>An additional, optional, <code>launchMode</code> element has been added to 
-  the <code>launchConfigurationTabGroup</code> extension point, allowing a contributed 
-  tab group to specify a default perspective for a launch configuration type and 
-  mode.</p>
-<p>From the Eclipse user interface, users can edit the perspective associated 
-  with a launch configuration type by opening the launch configuration dialog, 
-  and selecting a launch configuration type node in the tree (rather than an individual 
-  configuration). A tab is displayed allowing the user to set a perspective with 
-  each supported launch mode.</p>
-
-<h3>Generic Console</h3>
-<p>With the work for the generic console support <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37263"> 
-  (Bug 37263)</a>, the view id for the Eclipse (formerly debug) console has changed. 
-  This results in problems at startup such as "Could not restore workbench layout" 
-  with details that "Could not create view: org.eclipse.debug.ui.ConsoleView" 
-  for the particular perspective that contained reference to the old view id. 
-  The equivalent view id is now: "org.eclipse.ui.console.ConsoleView".<br>
-  The generic console is available via the Window>Show View>Basic>Console and 
-  is used by the Eclipse debug and Ant integration. </p>
-
-<h3>Console Line Tracker Extension</h3>
-<p>A console line tracker (<code>IConsoleLineTracker</code>) can be notified when 
-  its associated console is closed (i.e. all of its streams are closed), by implementing 
-  the new interface <code>IConsoleLineTrackerExtension</code>. The notification 
-  indicates that no more output will be appended to the console.</p>
-
-<h3>Launch Configuration Tab Enhancements</h3>
-<p>Two methods have been added to the <code>ILaunchConfigurationTab</code> interface 
-  - activated and deactivated. These new life cycle methods are called when a 
-  tab is entered and exited respectively. Existing implementations of <code>ILaunchConfigurationTab</code> 
-  that subclass the abstract class provided by the debug plug-in (<code>AbstractLaunchConfigurationTab</code>) 
-  will maintain binary compatibility, as the methods have been added in the abstract 
-  class.</p>
-<p>In prior releases, a tab was sent the message <code>initializeFrom</code> when 
-  it was activated, and <code>performApply</code> when it was deactivated. In 
-  this way, the launch configuration tab framework provided inter-tab communication 
-  via a launch configuration (by updating the configuration with current attribute 
-  values when a tab is exited, and updating the newly entered tab). However, since 
-  many tabs do not perform inter-tab communication, this can be inefficient. As 
-  well, there was no way to distinguish between a tab being activated, and a tab 
-  displaying a selected launch configuration for the first time. The newly added 
-  methods allow tabs to distinguish between activation and initialization, and 
-  deactivation and saving current values. </p>
-<p>To avoid breaking the behavior of current tab implementations, the default 
-  implementation of <code>activated</code>, provided by the abstract tab, calls 
-  <code>initializeFrom</code>. And, the default implementation of <code>deactivated</code> 
-  calls <code>performApply</code>. Tabs wishing to take advantage of the new API 
-  should override these methods as required. Generally, for tabs that do not perform 
-  inter-tab communication, a correct implementation of these methods is to do 
-  nothing.</p>
-  
-<h3>BreakpointManager Can Be Disabled</h3>
-<p>IBreakpointManager now defines the methods setEnabled(boolean) and isEnabled().
-  When the breakpoint manager is disabled, debuggers should ignore all registered breakpoints.
-  The debug platform also provides a new listener mechanism, IBreakpointManagerListener
-  which allows clients to register with the breakpoint manager to be notified when its
-  enablement changes.</p>
-<p>The Breakpoints view calls this API from a new toggle action that allows the user to
-  "Skip All Breakpoints." Debuggers which do not honor the breakpoint manager's enablement
-  will thus appear somewhat broken if the user tries to use this feature.</p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_1_buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r3_1_buildnotes_platform-debug.html
deleted file mode 100644
index 3562b6e..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_1_buildnotes_platform-debug.html
+++ /dev/null
@@ -1,975 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-3.1 RC4
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100807">100807</a>: Source not found<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-3.1 RC3
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99407">99407</a>: Handle BLE from toggle breakpoint action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99796">99796</a>: Refactoring changed launch config name to "null"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99693">99693</a>: Invalid stack frames during display<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84458">84458</a>: [Doc] package.html needs to be updated for org.eclipse.ui.console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99752">99752</a>: Console Terminate Hangs Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99996">99996</a>: NPE when bringing the Memory View to the top from a view stack<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100105">100105</a>: Help context id fixes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100489">100489</a>: "color" as a preference keyword<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100283">100283</a>: [Memory View]: SWTException when launch a session with Memory view open<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-3.1 RC2 - June 10, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94441">94441</a>: deallocated Inspect Expression incorrectly displayed in details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97654">97654</a>: Pref Page General/Colors and Fonts - problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97564">97564</a>: breakpoint group shows as disabled when enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98655">98655</a>: [Preferences] Error message too long in Preferences dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96972">96972</a>: NullPointerException when trying to set breakpoint (in ToggleBreakpointAction)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97304">97304</a>: DebugRequestJob should be system job<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97327">97327</a>: renaming main type does not update launch history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97628">97628</a>: Edit source path dialog not re-sizeable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97742">97742</a>: Console uses wrong link color<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97847">97847</a>: An internal error occurred during: "Fetching children from debug target"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97869">97869</a>: Pref Page Run/Debug - problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98272">98272</a>: Key binding for terminate - works 3.0, not 3.1 (debug view issue)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98389">98389</a>: Stack overflow when launching from within project with circular plugin dependancy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71794">71794</a>: Mnemonic in error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98090">98090</a>: source lookup with relative path names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95490">95490</a>: String substitution variables are lost during import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98048">98048</a>: "Terminate and Remove" doesn't assure termination of launch object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98090">98090</a>: source lookup with relative path names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99174">99174</a>: launch view should use async instead of sync<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98249">98249</a>: cvs console missing icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99063">99063</a>: DebugModePromptStatusHandler should check preference before getting the active shell<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91305">91305</a>: program spewing large amounts to console causes eclipse to OOM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92135">92135</a>: Investigate console performance test failures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97348">97348</a>: Run button enabled without selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98162">98162</a>: Missing properties string in AddMemoryRenderingAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98003">98003</a>: 3.1 RC1 javadoc warnings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96657">96657</a>: Clipped message for missing source.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97726">97726</a>: Carat location should be updated when user types in Console.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98900">98900</a>: Console hyperlinks inaccurately detected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98995">98995</a>: Monitor Memory Dialog needs to accept empty expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99067">99067</a>: Add Memory Monitor dialog should stay up if there is an error adding a memory monitor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99247">99247</a>: Potential NegativeArraySizeException in Table Rendering<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-3.1 RC1 - May 27, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94446">94446</a>: CodePagesPrefDialog using internal help access<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84324">84324</a>: Changes to Watch Expressions not updated in view when not debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84959">84959</a>: action background job hangs onto elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89961">89961</a>: NPE running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93686">93686</a>: Provide select all / deselect all buttons for BreakpointWorkingSetPage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95190">95190</a>: Display view context menu item is missing label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95199">95199</a>: consoleFactories extension point doesn't specify implementation reqs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94749">94749</a>: terminate all does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95256">95256</a>: Marker doesn't exist error from breakpoint sorter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94357">94357</a>: breakpoints view not auto-opened on second launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87586">87586</a>: View closure doesn't pay attention to perspectives<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71486">71486</a>: no error message when CTRL-S used to change var value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85612">85612</a>: NPE trying to create new launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93545">93545</a>: No feedback when re-enabling breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95662">95662</a>: Activity enablement not working in debug platform<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93474">93474</a>: "Step filters" incorrectly enabled when launch selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94281">94281</a>: [Preferences] Some Parts not using Dialog Fonts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90206">90206</a>: Stack trace console should use console font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95204">95204</a>: FolderSourceContainerDialog and internal ref<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95767">95767</a>: (polish) Use "open" instead of "switch" terminology for perspectives<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95956">95956</a>: typo in NLS keys<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92547">92547</a>: Job not shut down correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92949">92949</a>: potential NPE in RenderingViewPane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95477">95477</a>: Infinite "restore viewer state" in Registers view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91543">91543</a>: Exception when placing a breakpoint (double click on ruler)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91786">91786</a>: top frame annotated as "secondary"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77252">77252</a>: Consistency in SDK consoles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96546">96546</a>: Debug plugins should restrict access to their packages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95470">95470</a>: Debug jobs should be system jobs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87587">87587</a>: Debugging views automatically opened before perspective switch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96470">96470</a>: Breakpoint type group shows up not "enabled"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96199">96199</a>: NPE in RemoteTreeViewer.deferExpansion running Ant test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96724">96724</a>: FindVariableDelegate leaks as remains as DebugEventListener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96557">96557</a>: Missing adapter type: BreakpointTypeCategory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94406">94406</a>: Context Enabled not opened in Java Perspective in multi-langauage scenario<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94535">94535</a>: TimedOut VM remains in Debug View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96451">96451</a>: Memory View throws exception in multi-window scenario<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95745">95745</a>: console/editor:  allow editor selection/load of source files for none stack traces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96766">96766</a>: Console hyperlinks broken by 3.1M7<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96432">96432</a>: Debug/Run As "Ant build" shows up for Java files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85770">85770</a>: Hyperlink over multiple lines: text colored only on first line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96731">96731</a>: Leak: RemoteTreeViewer jobs holding on to debug elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96728">96728</a>: Leak: MemoryViewSynchronizationService remains as listener of IMemoryBlockManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94454">94454</a>: Find Variable action from Variable view missing mnemonic<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 13, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94208">94208</a>: Debug UI depends on IDE to declare "Goto Breakpoint" image.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94216">94216</a>: Open type does not work for generic types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94447">94447</a>: WorkingSetSourceContainerBrowser and internal WorkbenchPlugin<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 9, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92939">92939</a>: Render links in the console as hyperlinks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93712">93712</a>: missing messages in DebugUIMessages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93198">93198</a>: ClassCastException  when monitoring large array in Expression View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93578">93578</a>: java.lang.ArrayIndexOutOfBoundsException in ConsoleDocumentAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93800">93800</a>: Serialize requests per target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93805">93805</a>: Run/Debug as menu should never be empty<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93909">93909</a>: No longer able to launch java application from navigator view folder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93927">93927</a>: Add keywords to preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93949">93949</a>: Tests opening external browsers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93976">93976</a>: Add Source Container dialog should add the new container to the top of the source container list by default.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94133">94133</a>: [Console] console does not automatically appear on write to stdout<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 3, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93711">93711</a>: Eraser icon is difficult to see and analogy is often missed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89548">89548</a>: no message for native methods in var view<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-May 3, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85033">85033</a>: Memory View:  Screen reader does not read content properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92704">92704</a>: Classcast exception from Registers View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76032">76032</a>: inconsistent "Run" rightclick menu on French OS vs. English OS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92817">92817</a>: [api] fields deleted from MessageConsole<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92838">92838</a>: [api] add missing @since 3.1 tags on API added in 3.1 cycles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92902">92902</a>: Can't launch with errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92836">92836</a>: [api] missing @since 3.1 tag on AbstractDebugView.setViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92930">92930</a>: 4 methods added to CommonTab intended to be private<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90289">90289</a>: >1 debug worker thread calling IStackFrame.getVariables()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92938">92938</a>: Unused Keys in ConsoleMessages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92840">92840</a>: [api] deleted field IDebugUIConstants.IMG_ACT_SYNCED<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 26, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88685">88685</a>: stepxxx and resume calls made even if "canStepxxx()" and "canResume()" return false<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91605">91605</a>: ShowTypesAction runs twice when it is invoked.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89604">89604</a>: [polish] Prompted to delete all selected breakpoints for empty group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91889">91889</a>: top frame not selected when monitor added to stack<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78166">78166</a>: [performance test] console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79426">79426</a>: Exception in log file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92135">92135</a>: Output out of sync with process when debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90351">90351</a>: [performance test] Tests completing too quickly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91552">91552</a>: Console view shows "Console" as content description when no consoles open<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91625">91625</a>: IndexedValuePartition's #getVariables is inefficient<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91984">91984</a>: RemoteTreeViewer.StateRestorationJob should be pushed down stack<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92132">92132</a>: Memory rendering's dispose() method gets called twice when closing the rendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89743">89743</a>: [polish] [Console] Process Console not opened if output is not captured anywhere<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87420">87420</a>: Provide feedback during source lookup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89230">89230</a>: Run as mnemonic has been changed from S to U<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89693">89693</a>: Exception occurred when looking at monitors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92244">92244</a>: SelectedResourceManager copies entire text selection upon every selection change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81330">81330</a>: Missing mnemonics in Context menu of Console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85588">85588</a>: No error/warning when console encoding not set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74885">74885</a>: Review all Threads created to see if they should be set as daemon<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 19, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91208">91208</a>: firing PropertyChangeEvent in TextConsole.addHyperlink can be expensive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78318">78318</a>: Backport performance tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91471">91471</a>: Avoid asyncs in action updating<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89865">89865</a>: Poor debug performance in I20050330-0500<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89184">89184</a>: Eclipse hangs during shutdown after error disposing display<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90975">90975</a>: Consoles removed when using multiple windows<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91569">91569</a>: TextConsoleViewer should not change selection when auto-scrolling<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91067">91067</a>: Performance problem in Console View if more than one Console View is opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91597">91597</a>: OutputStreamMonitor #read method is inefficient<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82530">82530</a>: DebugPluginImages and ImageRegistry<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 12, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89748">89748</a>: [polish] "Search for duplicate source files" option doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82627">82627</a>: Source containers should be case-insensitive on platforms that are case insensitive.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89883">89883</a>: Exception triggered by Memory View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90154">90154</a>: [Memory View] Short Input Rejected by Hex Rendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88261">88261</a>: create component XML for debug plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90892">90892</a>: Typos in javadoc of IConsoleFactory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90318">90318</a>: Change string externalization to use new format<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88677">88677</a>: AbstractDebugEventHandler$EventProcessingJob can hog UI thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90387">90387</a>: Debug with break point cause error in 3.1M6<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90518">90518</a>: JAR debug plug-ins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90838">90838</a>: Folder and Directory source containers should have slightly more descriptive names.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90470">90470</a>: StatusDialog now available in JFace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76794">76794</a>: Error Disabling Breakpoint: "Unable to create class prepare request."<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 5, 2005 - M6
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89741">89741</a>: [polish] Debug config: Suggestion: When user clicks new, put focus in name text field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89590">89590</a>: Scroll Lock is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89711">89711</a>: Display View unexpectedly brought to top when debug session is suspended<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-April 1, 2005 - M6
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89772">89772</a>: [Memory View] NPE in AbstractTableRendering when throwing Debug Exception during rendering creation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89308">89308</a>: Pass combined preference store to TextSourceViewerConfiguration(IPreferenceStore)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Mar 29, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88945">88945</a>: [Memory View] Add code page preference for Memory View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84378">84378</a>: Open several tabs in memory view at once<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89293">89293</a>: [Memory View] Selection problems in Memory View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82245">82245</a>: Multiple memory views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88828">88828</a>: [Memory View] Allow clients to provider custom decorations in AbstractTableRendering<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Mar 24, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88833">88833</a>: TableRenderingLabelProviderEx should cache font/color providers<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Mar 22, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86510">86510</a>: Filtering all threads from the debug view causes infinite expand attempts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88585">88585</a>: Find action in variables and expressions view context menu has no text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80857">80857</a>: ProjectSourceContainer fails to search for files specified by relative paths<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86572">86572</a>: banner image for launch config tab groups ignored<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88465">88465</a>: VariableValueEditorManager does not need to be API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86743">86743</a>: Register view shows the same as Variables view in CVS HEAD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88027">88027</a>: ConsoleManager does not recognize Workbench shutdown.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88264">88264</a>: [Memory View] Support for non-scrollable IMemoryBlockExtension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88404">88404</a>: [Memory View] Support for mixed-endianess in a memory block<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88232">88232</a>: AbstractSourceLookupDirector disposes existing containers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86725">86725</a>: Environment vars on windows: lowercase/uppercase<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85216">85216</a>: [API] platform could provide double-click breakpoint action<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Mar 15, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86793">86793</a>: Support for dynamic help in LaunchConfigurationView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87421">87421</a>: IMemoryBlockExtension: Rename getAddressibleSize<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52939">52939</a>: Launch from the context menu in an editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74343">74343</a>: Some contextual views not opening after a perspective switch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87569">87569</a>: Infinte loop obtaining image when switching to Debug Perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87955">87955</a>: Exception on startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86617">86617</a>: Memory view scrolling problem under GTK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83246">83246</a>: Javadoc warnings in latest builds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87692">87692</a>: setConsoleWidth() causes Invalid thread access<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86859">86859</a>: NPE running Ant debugger test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86895">86895</a>: NPE from source lookup from Ant debug tests<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Mar 8, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87108">87108</a>: ProcessConsole.ConsoleLogFilePatternMatcher should remove itself once a match has been found<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78288">78288</a>: [API] Drop to Frame not enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86850">86850</a>: Console should scroll to last line, not end of document<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86956">86956</a>: Adapt to the key binding changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87225">87225</a>: NPE during compile using clover 1.2.2<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Mar 1, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85623">85623</a>: NPE opening View Management preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77566">77566</a>: [API] Implementations of AbstractJavaLaunchConfigurationDelegate.launch are too monolithic<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85322">85322</a>: remote viewers should cancel jobs when disposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85964">85964</a>: RemoteVariablesContentProvider.hasChildren() communicating with Target in UI Thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86030">86030</a>: VariablesView communicates with target in UI thread while populated Details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86199">86199</a>: [M5a] Memory view is not updated when padded string is changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81211">81211</a>: [KeyBindings] preference page: key bindings don't show relevant platform<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51887">51887</a>: Feature request: Allow more control over Debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86573">86573</a>: Console prcoess type property tester poorly named<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76526">76526</a>: [API] ILaunchManager/Launch not extensible.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87081">87081</a>: Invalid thread access during "Populate Detail Pane"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85600">85600</a>: NPE from format in Java Stack trace console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77255">77255</a>: RemoveAllTerminatedAction and ConsoleRemoveAllTerminatedAction differences/bugs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85626">85626</a>: View tracking state still honored after toggling "track views" preference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84362">84362</a>: Relaunch does not terminate current launch<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Feb 22, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85740">85740</a>: "Display in favorites" selection table is too small<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85734">85734</a>: Debug view flickers excessively<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Feb 17, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85582">85582</a>: index out of bounds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85653">85653</a>: Reuse of source lookup result<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84111">84111</a>: Exception while running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85603">85603</a>: Attempting to capture output to invalid file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85330">85330</a>: Illegal Argument Exception in VariablesView details panel<br>	  	
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85579">85579</a>: launch view event handler performs insert rather than refresh<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85701">85701</a>: source selection only cleared on thread termination<br>
-	  	
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Feb 15, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84588">84588</a>: Dummy launch should be rendered with italics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84587">84587</a>: dummy launch not cleaned up when job terminated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84257">84257</a>: Expanding tree in the variable view collapses the tree<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78553">78553</a>: Console hyperlink painting needs improvement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84795">84795</a>: Missing NLS string<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84586">84586</a>: Launch doesn't wait for build if launching while "cleaning" before build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82318">82318</a>: Breakpoint enablement blocks UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80325">80325</a>: Deferred content adapater will override workbench adapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84075">84075</a>: deferred workbench adapters for expressions and registers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84825">84825</a>: new variables no longer revealed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84672">84672</a>: breakpoint does not have marker errors in test log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84907">84907</a>: Invalid thread access while removing launches<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84958">84958</a>: class cast exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85048">85048</a>: RemoveAllTerminatedAction causes debug view to refresh<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84932">84932</a>: Deleting a breakpoint leaves no selection in the breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83793">83793</a>: Find Variable could be mapped to Ctrl-F<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84959">84959</a>: action background job hangs onto elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84951">84951</a>: Launch leak<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73397">73397</a>: Setting ErrorHandlers for XML parsing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84960">84960</a>: Launch view source lookup result hangs onto launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83245">83245</a>: [Breakpoint Groups] Improve icons for breakpoint type groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84884">84884</a>: test failure: memory rendering types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84925">84925</a>: refactoring of doUpdateItem(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85291">85291</a>: NPE in find variale action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84933">84933</a>: Adding a lock to Debug View deselects stack frame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85007">85007</a>: Invalid stack frames displayed in Debug View, Owned monitors not displayed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84641">84641</a>: StringIndexOutOfBoundsException in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84870">84870</a>: Hang in PasteBreakpointsAction.updateSelection<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Feb 8, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84072">84072</a>: Text field doesn't have border<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83237">83237</a>: [Breakpoint Groups] Breakpoint working set actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84258">84258</a>: Find variable enabled when view is empty<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83453">83453</a>: Infinite "restore viewer state"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73417">73417</a>: Wrong thread selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84078">84078</a>: RemoteTreeContentManager should override default job name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84493">84493</a>: Flashing job notification on stepping: "Restore Viewer state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84189">84189</a>: Remove "final" limitation from Launch implementation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77781">77781</a>: No feedback when launch is waiting for build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84454">84454</a>: Allow termination of launch when in "waiting for build..." state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83607">83607</a>: ClassCastException during saving VariablesView state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84605">84605</a>: update javadoc for IDebugModelPresentation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84385">84385</a>: disabling breakpoint with ruler action does update check box in breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83794">83794</a>: API issue with logical structures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72838">72838</a>: Say which project in "Errors exist in a required project. Continue to launch?"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64424">64424</a>: Enhancement required in the Launch Configuration extension point<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Feb 1, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83779">83779</a>: NPE attempting to edit string<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75849">75849</a>: Support for search in variables view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83054">83054</a>: Changing toString() setting at debug time has no immediate effect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83570">83570</a>: Mnemonic collisions on CommonTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83956">83956</a>: Hang while debugging<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Jan 25, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82866">82866</a>: [Breakpoint Groups] The default groups should be emphasized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82993">82993</a>: "show qualified names" broken in breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83035">83035</a>: breakpoints not visible when view brought to top<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83103">83103</a>: newly created breakpoint not visible in breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82886">82886</a>: Breakpoints view "expands all" too often<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83244">83244</a>: [Breakpoint Groups] wording in advanced ordering dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44724">44724</a>: background content in debug views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82840">82840</a>: Concurrent modification exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82729">82729</a>: Run to line should work in the background<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82931">82931</a>: NPE in RenderingViewPane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82869">82869</a>: [Breakpoint Groups] show only breakpoint working sets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74125">74125</a>: [Console] provide API for images<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75227">75227</a>: Allow DND of breakpoints to breakpoint groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83235">83235</a>: [Breakpoint Groups] show empty breakpoint sets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83238">83238</a>: [Breakpoint Groups] Breakpoint actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83260">83260</a>: dnd with nested breakpoint groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83277">83277</a>: Run/Debug: reuse editor does not affect current workbench session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82492">82492</a>: Groups do not indicate that the breakpoint manager is disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83365">83365</a>: Cutting a breakpoint doesn't remove the breakpoint from editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82912">82912</a>: breakpoint groups "Others" category could be more descriptive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75891">75891</a>: Stratum line breakpoints should be grouped by stratum.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83202">83202</a>: No mnemonics on Breakpoint working set page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82868">82868</a>: [Breakpoint Groups] Custom working set dialog<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Jan 18, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80991">80991</a>: Promote StringVariableSelectionDialog to API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82553">82553</a>: NPE from TerminateAllAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80924">80924</a>: errors in log running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75194">75194</a>: CommonSourceNotFoundEditor is closed unexpectedly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76272">76272</a>: Use working sets to store custom breakpoint groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71149">71149</a>: [artwork] When breakpoints are disabled (skipped), the bullet should be different<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81236">81236</a>: Consider console output to a workspace file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82708">82708</a>: Cannot delete console output file w/o removing console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82908">82908</a>: console ckpii error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80321">80321</a>: Support "Group By > Working Set" in Breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82865">82865</a>: [Breakpoint Groups] "Show" actions for breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82871">82871</a>: [Breakpoint Groups] Deselect working should disable when none<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82882">82882</a>: Need to provide an icon for "working set organizer"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82883">82883</a>: IBreakpointOrganizer not needed in public API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82885">82885</a>: "Breakpoint organizers" don't show icons in cascade menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82895">82895</a>: Broken strings in new "breakpoint working set" dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82900">82900</a>: should be able to create empty breakpoint working set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80207">80207</a>: launch variables should insert at cursor<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Jan 11, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82003">82003</a>: The IDisconnect implementation by Launch module is too restrictive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82001">82001</a>: When shutting down the IDE, the debugger should first attempt to disconnect debug targets before terminating them<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80551">80551</a>: Provide AbstractRunToLineAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82402">82402</a>: [Memory View] Bad error message format<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74559">74559</a>: Memory View does not scroll properly on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82403">82403</a>: [Memory View] Unable to remove more than one memory monitor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82280">82280</a>: remove TextConsole.setAutoScroll()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82479">82479</a>: run to line test failures<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Jan 4, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72909">72909</a>: Add "Remove All Breakpoints" action to "Run" menu<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-Dec 21, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81540">81540</a>: no need to create annotation for editors without annotation model<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71149">71149</a>: [artwork] When breakpoints are disabled (skipped), the bullet should be different<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-M4, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70938">70938</a>: Need to be able to turn off "Watch" action for IVariable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80522">80522</a>: VariablesView and problems with hyperlink support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81234">81234</a>: Console Pinning causes no console to be displayed.<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-December 14, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80227">80227</a>: Fixed width console of 80 chars double spaces 80 char lines<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80546">80546</a>: Incorrect package ref for IRunToLineTarget<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80617">80617</a>: Memory View does not synchronize properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80331">80331</a>: NPE from AbstractDebugActionDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80409">80409</a>: Breakpoints Group By > menu should number submenu starting with 1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76297">76297</a>: Enhancements to memory block API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78335">78335</a>: Support for word-addressable memory in memory view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78423">78423</a>: Enhancements to Memory Rendering Extension Point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79255">79255</a>: Enhancements to Memory View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80284">80284</a>: Enhancements to Memory View - replace MemoryViewPane with Tree Viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80229">80229</a>: AIOB exception with fixed width console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80679">80679</a>: Encoding dropdown enabled on common tab of launch config when default selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80653">80653</a>: IllegalArgumentException from OpenBreakpointMarkerAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1654">1654</a>: USABILITY - Can't look at client server output in one perspective (1GFX2ZU)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80726">80726</a>: new launch doesn't open console view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80728">80728</a>: ShowConsoleAction not working when console pinned<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80720">80720</a>: Pinned console does not remain on top<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80373">80373</a>: Pinning of consoles is lost after relaunch of debug process<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80729">80729</a>: NPE in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80873">80873</a>: Fill out schema for logical structure providers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80721">80721</a>: Conflicting key binding for 'org.eclipse.debug.ui.commands.eof' and 'org.eclipse.ui.edit.text.delete.line'<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-December 7, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79153">79153</a>: [Common Tab] redirect to file should do variable expansion<br>	
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79043">79043</a>: Translatable attributes not translated in memoryRenderingTypes extensions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79757">79757</a>: NoClassDefFoundError when opening type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79897">79897</a>: Debug view flashes after terminating target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79903">79903</a>: Source not found automatically for higher level plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79949">79949</a>: Console View is missing Ctrl-C in context menu item.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79841">79841</a>: Memory view leaks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79606">79606</a>: Common tab is too tall<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79735">79735</a>: Allow to append / overwrite when output to file from console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79304">79304</a>: Incorrect stack frame selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79952">79952</a>: broken hyperlink in console redirecting process output to console.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79306">79306</a>: Custom breakpoint group action enablement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30779">30779</a>: Queue/Fire debug events in separate thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79951">79951</a>: Output lost / colored incorrect with echoProperties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80073">80073</a>: Shortcut for show debug perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79510">79510</a>: background source lookup<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 30, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78881">78881</a>: NullPointerException in memory view when selecting watch expressions<br>	
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78079">78079</a>: Error loading classes to to Apple's VM packaging.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79097">79097</a>: Mnemonic collision on the Commons tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79466">79466</a>: Capture Output file widgets enabled initially<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35400">35400</a>: new Debugger view can't get to associated text editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79043">79043</a>: Translatable attributes not translated in memoryRenderingTypes extensions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23064">23064</a>: RFE: Add option to redirect console output (stderr & stdout) to file<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 23, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76316">76316</a>: Addition of memory block manager to API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76310">76310</a>: Memory block enhancements: MemoryByte<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78864">78864</a>: Using new registry API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61801">61801</a>: A null String object reference becomes the value "null"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77060">77060</a>: Toggling show qualified names in the Debug view collapses thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78010">78010</a>: NPE closing eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79008">79008</a>: Dialog units should not be used for calculating button heights<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77380">77380</a>: hyperlinks in stack trace console draw "higher" than original text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78739">78739</a>: stack trace console unexpectedly restored<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78751">78751</a>: Extension Point Schema Changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78996">78996</a>: ContextualLaunchAction assumes launch group category supports mode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78759">78759</a>: NPE in WatchExpression.getLaunch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78338">78338</a>: Selection is lost in debug view while stepping with monitor info on<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79304">79304</a>: Incorrect stack frame selected<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 16, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77202">77202</a>: font setting for process console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73882">73882</a>: ConsoleDocumentManager caused a deadlock<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77779">77779</a>: Advanced Breakpoints grouping dialog improvements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76119">76119</a>: source containers not disposed when launch removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78338">78338</a>: Selection is lost in debug view while stepping with monitor info on<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78191">78191</a>: [console] context menu contributions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77995">77995</a>: NPE out of LaunchViewer running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74590">74590</a>: Console colors not changed for terminated processes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52336">52336</a>: [Viewers] Internal error at start of debug session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68621">68621</a>: Invalid thread access in launcher from Checkout thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78193">78193</a>: IOConsolePartitioner.TrimJob quits too early if lastPartition is null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78351">78351</a>: Please add shortcut keys to switch to Variables and Breakpoints views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77416">77416</a>: Filter console factories by capabilities<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78386">78386</a>: NPE in ProcessConsoleManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73460">73460</a>: Console flicker when launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78456">78456</a>: Breakpoint group setting lost on close of breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78494">78494</a>: State of child BreakpointContainers are not updated when parent is enabled/disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75851">75851</a>: Custom variable edit widget<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78513">78513</a>: Memory View: Length and change state incorrect for IMemoryBlock<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29581">29581</a>: Launch shortcut hotkeys<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 9, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74584">74584</a>: [Console] IOConsole does not bold title when contents change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75571">75571</a>: restore defaults does not enable console buffer size text field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77667">77667</a>: Invalid error message in Run/Debug|Console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77783">77783</a>: No mnemonic for "Group By"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77670">77670</a>: breakpoint group rendered as "enabled" when manager disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77721">77721</a>: groups not expanded when switching between none and other<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77991">77991</a>: Leak: IOConsolePage needs to dispose ScrollLockAction<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 5, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77703">77703</a>: Deselecting Map$Entry/Show As>/Key And Value Deselects Map/Show As>/Map Entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77754">77754</a>: Inefficient loop rendering styled text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77472">77472</a>: NPE in TextConsolePage runnable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77994">77994</a>: TextConsoleViewer leaks ConsoleDocumentAdapter<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77998">77998</a>: IOConsoleViewer leaks a document listener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76605">76605</a>: Set our compiler settings for each project so they are shared<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77748">77748</a>: NPE terminating a target<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-November 2, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76771">76771</a>: Inconsistency between schema description and implementation in logicalStructureTypes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77049">77049</a>: SelectBreakpointGroupDialog doesn't allow selection of existing groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76675">76675</a>: Pattern Matching independent of IOConsole and IOConsolePartitioner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77028">77028</a>: Element 'breakpointContainerFactory' is not legal as a child of element 'extension'.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77046">77046</a>: Console causing Ant test failures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77072">77072</a>: Composite breakpoint group expansion problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77065">77065</a>: scroll lock not required in stack trace console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77066">77066</a>: Pressing <Enter> in strack trace console appends to EOD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76907">76907</a>: Clarify run menu (run, run..., run > run...?  RUN!)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54916">54916</a>: Environment tab should show icons for env vars<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74206">74206</a>: Delete breakpoint needs to "preserve selection"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74031">74031</a>: No mnemonics on Open Console drop down items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74123">74123</a>: Console font problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75370">75370</a>: Hyperlinks to source in console don't work sometimes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77029">77029</a>: "Browse" button on the Common tab does not resize properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77033">77033</a>: Console encoding on Common tab: mnemonics and NLS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77189">77189</a>: exception during test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77202">77202</a>: font setting for process console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77068">77068</a>: Typing in stack trace console moves line to top of view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77116">77116</a>: API cannot reference internal classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77306">77306</a>: Provide a rendering view pane in the Memory View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69815">69815</a>: DBCS -- System console cannot display Unicode characters properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76427">76427</a>: Run configuration dialog layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69083">69083</a>: Switch to associated perspective on suspension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77063">77063</a>: JavaStackTraceConsole should use Hyperlink Color<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77295">77295</a>: Argument parsing for command line launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77238">77238</a>: Enable/Disable not on context menu for breakpoint groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77048">77048</a>: ArrayIndexOutOfBounds removing breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77397">77397</a>: Book capitalization in Color and Font extensions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77253">77253</a>: Sort the consoles in the Open console dropdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77073">77073</a>: Expand to show breakpoint containers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77421">77421</a>: [Themes] default text editor font changes by itself<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77462">77462</a>: CVS Plug-in fails to start<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74596">74596</a>: Always group by breakpoint type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75119">75119</a>: Default breakpoint group setting not used when breakpoints view not there<br>
- 
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-October 26, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76539">76539</a>: ILaunchConfiguration.getAttributes doc/clone usage pbm<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76677">76677</a>: Console Input incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76110">76110</a>: Breakpoints not showing as installed in the BreakpointsView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76532">76532</a>: Deleting multipe groups prompts for each group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75183">75183</a>: DebugEvent.CHANGE does not cause run control action states to be updated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76797">76797</a>: Two output stream reader threads and 100% CPU usages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76743">76743</a>: Console pipes should be closed when program terminated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51884">51884</a>: Feature request: More flexible debug hierarchy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76514">76514</a>: Allow debug presentations to provide colors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76517">76517</a>: NPE in LaunchViewContextListener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76529">76529</a>: Renaming a custom group collapses all of the groups<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-October 19, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75967">75967</a>: NullPointerException in IOConsolePartitioner.getRegion<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75769">75769</a>: Console doesn't restore displayed tab width 8 on restart<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74909">74909</a>: Automated test for console input<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75174">75174</a>: Can not clear console with unlimited output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75546">75546</a>: hang during debug session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72500">72500</a>: Migrate StringMatcher to RegEx 1.4 support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75198">75198</a>: breakpoint groups don't support double click expand<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76428">76428</a>: Run configuration dialog; source tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76270">76270</a>: Scroll in Console is always lock.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74909">74909</a>: Automated test for console input<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76208">76208</a>: Incorrect code for converting String-> boolean<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75282">75282</a>: Composite breakpoint groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76518">76518</a>: Buttons in the Group Breakpoints "Advanced" dialog incorrectly sized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76521">76521</a>: Incorrect icon names for the breakpoint group actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76519">76519</a>: Expand all in the Breakpoints view with no groups causes infinite recursion<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74673">74673</a>: Add Expand/Collapse All to Breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74560">74560</a>: Group all should expand groups on creation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76495">76495</a>: Delete action is enabled for a group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76498">76498</a>: "set custom group" should have "..."<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76497">76497</a>: illegal argument exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76326">76326</a>: Shared launch configurations not removed when containing project is deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76527">76527</a>: Flaw in AbstractBreakpointGroupAction->rename and dissolve broken<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-October 12, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75454">75454</a>: RuntimeProcess.isTerminated() replies "false" if process segfaults<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75402">75402</a>: NPE on LaunchShortcutsAction.createContext<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75588">75588</a>: generalize watchpoint to debug platform<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-October 5, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75111">75111</a>: ArrayIndexOutOfBoundsException in ContentWidthCache.textChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75177">75177</a>: Error setting Console Preference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75204">75204</a>: NPE using build 200409240800<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75226">75226</a>: IllegalArgumentException setting console size from 200k to 400k<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75506">75506</a>: Adjust for the many deprecations in the command extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75405">75405</a>: Allow a logical structure type to provide more than one logical structure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75123">75123</a>: Use PerspectiveLabelProvider in ViewManagementPreferencePage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75372">75372</a>: NPE in org.eclipse.ui.console.IOConsole.getHyperlink<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72209">72209</a>: Inspect and Display popup does not allow copying of values<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-September 28, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74947">74947</a>: Remove warnings from 200409240800 build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74741">74741</a>: console hyperlink search is slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34052">34052</a>: CTRL-Z Not Recognized as EOF<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-September 21-23, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56253">56253</a>: [Generic Console] no support for extending the toolbar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73942">73942</a>: IllegalMonitorStateException pasting into the Java Stack Trace Console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73908">73908</a>: [Console] Incorrect colorization when multi streams write to same line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56252">56252</a>: [Generic Console] no support for enabled/disabled lifecycles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73957">73957</a>: API break introduced with IConsoleHyperlink change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73924">73924</a>: Console can be removed before it's page is created<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73893">73893</a>: Should disallow close in LCD when running an operation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73842">73842</a>: Remove from Group enabled when breakpoint not in a group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73576">73576</a>: Pattern matching in IOConsole is too expensive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73996">73996</a>: Add to Group / Remove from Group incorrectly disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74005">74005</a>: Persist last breakpoint group across invocations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73460">73460</a>: Console flicker when launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73950">73950</a>: MemoryView leaks AddMemoryBlockAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73951">73951</a>: CopyViewTabToClipboardAction leaks Clipboard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74033">74033</a>: ClassCastException on selection change in Breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73840">73840</a>: Group by>File seems to only match on name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74000">74000</a>: ClassCastException filtering for "show support breakpoints"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73870">73870</a>: [misc] NPE when terminating large output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73917">73917</a>: [Console] Missing hyperlinks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74080">74080</a>: Process console did not flush stream monitors<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74124">74124</a>: Console type should be promoted to IConsole<br>  
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74308">74308</a>: Wrong number of lines in output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74331">74331</a>: CPU at 99% after a debug session<br>  
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74340">74340</a>: NPE in IOConsoleViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74370">74370</a>: NPE from ProcessConsolePageParticipant<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74039">74039</a>: NPE in ProcessConsole.connect<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68077">68077</a>: Manually closed views do not open when view management is reset<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73841">73841</a>: Icon for grouped breakpoints not disabled with set to skip breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74229">74229</a>: Debug test failure for program arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74283">74283</a>: Empty output in debug tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74703">74703</a>: Console view activated even if nothing is written to standart out<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74431">74431</a>: [Mac] runtime discovers JDI interfaces in classes.jar before jdi.jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48286">48286</a>: Add support for input on consoles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74024">74024</a>: Console buffer implementation is line based rather than char based<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74428">74428</a>: Clearing console during output breaks hyperlinks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74363">74363</a>: "Terminate and Remove" action doesn't close a view tied to a Context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74563">74563</a>: renaming breakpoint group collapses group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74560">74560</a>: Group all should expand groups on creation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74381">74381</a>: Launch view manages views in other perspectives<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74384">74384</a>: Numerous action delegates leaked on debug perspective closed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74465">74465</a>: Pasting multiple lines in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74558">74558</a>: "Dissolve Group" should be "Ungroup"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21597">21597</a>: Difficult to enter text in debug console<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-September 14, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72317">72317</a>: Copying from IOConsole inserts extra line breaks.<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73823">73823</a>: Reorganize BreakpointsView menus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72167">72167</a>: ProcessConsole should extend IOConsole<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44986">44986</a>: Support for Breakpoint groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73704">73704</a>: Provide action to group breakpoints by Type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70066">70066</a>: Bind "Alt+Shift+Q C" to active console view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73493">73493</a>: Default VM Args field should parse quotes intuitively<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73577">73577</a>: Find (Ctrl-F) not enabled in ConsoleView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73779">73779</a>: Allow browse in "Add To Group" dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70471">70471</a>: ExpressionManager#handleDebugEvents() doesn't work as intended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73844">73844</a>: Mnemonics missing from breakpoint groups<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-September 7, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72986">72986</a>: ExpressionInformationControl leaks<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72000">72000</a>: Run as Application: duplicate menmonics<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72449">72449</a>: NPE in VariablesView.saveState<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73068">73068</a>: Support for ordering launch shortcuts<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73069">73069</a>: bogus extension point id in org.eclipse.debug.ui.launchShortcuts<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73110">73110</a>: IConsoleColorProvider is not disconnected<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72472">72472</a>: Remove unused dependancies<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72551">72551</a>: add System property to test suite to turn off workbench and console activation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51562">51562</a>: console doesn't wrap input<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72317">72317</a>: IOConsole inserts extra line breaks when pasting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72517">72517</a>: Replace "Run As >" with context launch<br>  
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73272">73272</a>: NPE in ProcessConsoleManager when no process type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70664">70664</a>: TVT3.0:   Improper characters combination "Run As"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-August 31, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72300">72300</a>: Confirmation on RemoveAll actions<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72350">72350</a>: NPE in BreakpointsView.dispose<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72881">72881</a>: LineTracker Test Failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72483">72483</a>: NPE attempt to Inspect if never shown Variable view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27895">27895</a>: Add new command to Run-menu; Resume All Threads<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67383">67383</a>: breakpoint manage fires add notificaiton on initialization<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-August 24, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72169">72169</a>: provided debug context for non-UI thread<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26830">26830</a>: Allow external programs to create tasks and markers through regex matches on the output<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27591">27591</a>: [Console] Hyperlink color not used<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72165">72165</a>: MessageConsole should extend IOConsole<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70864">70864</a>: API method to show the console view has a bug<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28193">28193</a>: Watch expressions updating when expression view not visible<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31899">31899</a>: Consolidate "Java" hyperlinks<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71292">71292</a>: Launch name is truncated in MRU list<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71429">71429</a>: Choosing 'Cancel' in the ${string_prompt} dialog does not cancel the Run command<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61447">61447</a>: keybinding clean up.<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71561">71561</a>: Inspect popup doesn't handle tabs in inspected expression<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72370">72370</a>: [Console] ArrayIndexOutOfBounds<br> 
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-August 17, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70354">70354</a>: JSP editor does not scroll to/highlight the current execution line when debug with JDT<br>
- 
-
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-August 3, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69470">69470</a>: TVT3.0: NL Truncation occurs in Run -> External Tools -> External Tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69723">69723</a>: TVT3.0: Truncated text in memory view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69952">69952</a>: ILaunchConfigurationListener's launchConfigurationRemoved gets a configuration that doesn't exist<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71185">71185</a>: TVT3.0: Extra mnemonics for Debug, Run, and External tools<br>  
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=61566">61566</a>: Launch configs dialog: Arrow_Up/Down in configurations tree extremely slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64370">64370</a>: Fix setTitle deprecations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68808">68808</a>: all debug actions (step, terminate, etc), should be done async<br>
- 
-<h1>
-Eclipse Platform Build Notes <br>
-Platform Debug</h1>
-July 27, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69536">69536</a>: Infinite loop on rendering variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69978">69978</a>: TVT3.0: Two shortcuts for one menuitem<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69057">69057</a>: Incorrect icon in Breakpoints view when breakpoint manager disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69190">69190</a>: NullPointerException @ org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainer.isFindDuplicates<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70472">70472</a>: MemoryBlockManager has redundant null check<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70492">70492</a>: Possible NPE in AddSourceContainerDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70493">70493</a>: Possible NPE in ViewTabCursorManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70495">70495</a>: Redundant null check in RefreshTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70499">70499</a>: Unnecessary null check in ContextualLaunchAction#selectionChanged(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69452">69452</a>: NPE initializing source lookup<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70571">70571</a>: launch config save location on Common tab<br>  
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68523">68523</a>: missing `return' in org.eclipse.ui.internal.console.MessageConsolePartition<br>  
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24829">24829</a>: Multiple toString results shown if hold down arrow key<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68413">68413</a>: NPE from InstructionPointerManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70051">70051</a>: MemoryViewTab does not calculate delta and selected address correctly after error<br>
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_1_changes.html b/eclipse/plugins/org.eclipse.debug.core/r3_1_changes.html
deleted file mode 100644
index fb2cba6..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_1_changes.html
+++ /dev/null
@@ -1,183 +0,0 @@
-<html>
-<head>
-<title>3.1 Debug Platform Change Notes</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
-<h1>3.1 Debug Platform Change Notes</h1>
-<p>This document describes new features and important changes in the 3.1 debug 
-  platform, relative to the 3.0 release.</p>
-  
-<h2>New Features</h2>
-
-<h3> Breakpoint Organizers</h3>
-<p>The breakpoints view allows breakpoints to be displayed in groups. The platform 
-  supports breakpoint groupings by breakpoint type, file, project, and breakpoint 
-  working sets and resource based working sets (as well, it supports nested groupings). 
-  The <code>breakpointOrganizers</code> extension point allows for other grouping 
-  strategies to be contributed to the debug platform.</p>
-<p>A new, optional, <code>name</code> attribute has been added to the breakpoints 
-  extension point to provide a type name for breakpoints. This name appears as 
-  the group label, when the user chooses to group breakpoints by type. If this 
-  attribute is not specified on a breakpoint extension, the breakpoints are considered 
-  to not have a type, and will be displayed in the "Others" group.</p>
-<h3>Logical Structure Providers</h3>
-<p>Logical structures have been enhanced to allow clients to more easily contribute 
-  more than one logical structure for a given value. The new extension point <code>logicalStructureProviders</code> 
-  allows clients to contribute an implementation of an <code>ILogicalStrugureProvider</code>. 
-  A logical structure provider provides a simple way to contribute a single factory 
-  of logical structures for a debug model.</p>
-<p>In addition the optional interface <code>ILogicalStructureTypeDelegate2</code> 
-  has been added to allow a logical structure delegate to provide a dynamic label 
-  for a value's logical structure type.</p>
-<h3>Process Console Enhancements</h3>
-<p>The debug console has been enhanced to allow output to be multiplexed between 
-  the console and/or a file. As well, the encoding used to translate output to 
-  characters can now be specified. All of these options are available to the user 
-  on the "Common" launch configuration tab. As well, the options are 
-  available programmatically as launch configuration attributes. The following 
-  attributes have been added to <code>org.eclipse.debug.ui.IDebugUIConstants</code>.</p>
-<ul>
-  <li><code>ATTR_CONSOLE_ENCODING</code></li>
-  <li><code>ATTR_CAPTURE_IN_CONSOLE</code></li>
-  <li><code>ATTR_CAPTURE_IN_FILE</code></li>
-  <li><code>ATTR_APPEND_TO_FILE</code></li>
-</ul>
-<h3>Memory View</h3>
-<p>The Memory view, which was first released in 3.0 as internal API, has become 
-  public API in 3.1. See the new extension point <code>memoryRenderings</code>, 
-  and the new API package <code>org.eclipse.debug.ui.memory</code> for more information.</p>
-<h3>Parse Arguments</h3>
-<p>A convenience API method has been added to <code>DebugPlugin</code> to separate 
-  arguments in a single string into an array of arguments that can be passed to 
-  the command line for execution. See <code>DebugPlugin.parseArguments(String)</code>.</p>
-<h3>Run To Line Handler</h3>
-<p>Many debuggers implement "run to line" functionality by creating 
-  a breakpoint at the line a user has chosen to "run to", and then resuming 
-  execution until that breakpoint is hit. A new API class, <code>RunToLineHandler</code>, 
-  has been created to simplify the task. The handler manages the "skip breakpoints 
-  while performing run to line" user preference as well canceling the operation 
-  if another breakpoint is hit before the "run to line" operation completes.</p>
-<h3>Run To Line Action Delegate</h3>
-<p>The <code>RunToLineActionDelegate</code> introduced in 3.0 can now also be 
-  contributed to a view (in 3.0 it could only be contributed to an editor). The 
-  action additionally implements <code>IViewActionDelegate</code>.</p>
-<h3>Variable Value Editors</h3>
-<p>A new extension point, <code>variableValueEditors</code>, allows debuggers 
-  to contribute custom editors for modifying a variable's value selected in the 
-  Variables view.</p>
-<h3>Launch Shortcut Keybindings</h3>
-<p>To register a key-binding for a launch shortcut, define a command with an <font face="Courier New, Courier, mono">id 
-  </font>the same as the launch shortcut <font face="Courier New, Courier, mono">id</font>, 
-  suffixed with the launch mode. For example, the id of the "Java Application" 
-  launch short cut is <font face="Courier New, Courier, mono">org.eclipse.jdt.debug.ui.localJavaShortcut</font>, 
-  so the command id for launching in debug mode is <font face="Courier New, Courier, mono">org.eclipse.jdt.debug.ui.localJavaShortcut.debug</font>. 
-  Then define a key-binding for your command.</p>
-<p>When the command is invoked via the key-binding, the selection or active editor 
-  will be used as the target for the launch shortcut's launch method. The shortcut 
-  is only invoked if the shortcut is enabled for the selection or editor.</p>
-<h3>Source Lookup/Display Facility</h3>
-<p>API methods have been added to <code>DebugUITools</code> to facilitate source 
-  lookup and display. See the methods <code>lookupSource(Object, ISourceLocator)</code> 
-  and <code>displaySource(ISourceLookupResult, IWorkbenchPage)</code>. When a 
-  source lookup result for a stack frame is displayed, the open editor is also 
-  annotated with an appropriate instruction pointer.</p>
-<h3>Watchpoints (IWatchpoint) and Images</h3>
-<p>As watchpoints are common to many debug architectures, the notion of an IWatchpoint 
-  has been added to the debug model. A watch point is a breakpoint that suspends 
-  execution when an associated variable is read and/or written. As well, default 
-  images for rendering watchpoints have been added to the debug platform.</p>
-<h3>Colors and Fonts for Debug Elements</h3>
-<p>In 3.1, debug model presentations (<code>IDebugModelPresentation</code>) may 
-  optionally implement <code>IColorProvider </code>and <code>IFontProvider </code>to 
-  override default fonts and colors for debug elements.</p>
-<h3>Inserting Elements into Debug View</h3>
-<p>The Debug view allows for debug models to insert arbitrary elements into the 
-  debug model element hierarchy. For example, the Java debugger now displays lock 
-  information directly in the view. To override the default presentation in the 
-  view, a debugger must provide an <code>IWorkbenchAdapter</code> or <code>IDeferredWorkbenchAdapter 
-  </code>for the relevant element(s). The debug platform provides default adapters 
-  for the standard debug elements.</p>
-<p>Debug elements were always required to implement <code>IAdaptable</code>, and 
-  now must be subclasses of <code>PlatformObject</code> in order for workbench 
-  adapters to be properly registered and retrieved for debug elements.</p>
-<h3>Abstract Debug Element</h3>
-<p>An abstract implementation of a debug element is provided in 3.1 - <code>DebugElement</code>. 
-  Clients implementing debug models may choose to subclass this class when implementing 
-  debug models. The class provides convenience methods for firing debug events, 
-  reporting exceptions, and retrieving adapters.</p>
-<h3>Drop to Frame Platform Action/Interface</h3>
-<p>The debug platform provides a "drop to frame" action and corresponding 
-  capability interface (<code>IDropToFrame</code>). Debug elements supporting 
-  the capability should implement this new interface to share the global action.</p>
-<h3>Context Menu Launching in Editors</h3>
-<p>Launching from the context menu (for example, "Run As > Java Application"), 
-  is now available in editors (In 3.1, this was only available in the package 
-  explorer and resource navigator). To leverage this feature, the editor input 
-  associated with a executable file must have an <code>ILaunchable</code> adapter 
-  registered for it.</p>
-<h3>Support for Unregistered Launch</h3>
-<p>The launch framework allows for a launch to be performed without registering 
-  a launch object with the launch manager. An unregistered launch does not appear 
-  in the Debug view. A new launch method has been added to <code>ILaunchConfiguration</code>, 
-  accepting a boolean argument determining whether the launch should be registered 
-  (<code>launch(String mode, IProgressMonitor monitor, boolean build, boolean 
-  register)</code>), and a new method has been added to <code>ILaunchManager</code> 
-  to determine if a launch is registered (<code>isRegistered(ILaunch launch)</code>).</p>
-<h3>Reusable Breakpoint Ruler Toggle Actions</h3>
-<p>Providing double-click breakpoint creation in an editor's vertical ruler is 
-  a common feature for debuggers. The debug platform provides two actions to facilitate 
-  this: <code>RulerToggleBreakpointActionDelegate </code>and <code>ToggleBreakpointAction</code>. 
-  A debugger must contribute the <code>RulerToggleBreakpointActionDelegate</code> 
-  to the appropriate editor (see javadoc for more details), and also register 
-  an <code>IToggleBreakpointsTarget </code>adapter with the editor.</p>
-<h3>Environment Variables Case Preservation</h3>
-<p>Support has been added to <code>ILaunchManager</code> to retrieve the environment 
-  variables defined in the OS preserving case. This is important on the WIN32 
-  operating system. Although WIN32 is case insensitive, depending on what you 
-  intend to do with the environment, the lack of normalization may or may not 
-  cause problems. This method <code>getNativeEnvironmentCasePreserved()</code> returns 
-  mixed-case keys using the variable names recorded by the OS. Use <code>getNativeEnvironment()</code> 
-  instead to get a WIN32 system environment where all keys have been normalized 
-  to uppercase.</p>
-<h3>Closing an Input Stream</h3>
-<p>An optional extension, <code>IStreamsProxy2</code>, can be implemented by implementations 
-  of <code>IStreamsProxy</code>. When implemented, it allows the input stream 
-  associated with a process to be closed. This is used to allow the user to signal 
-  EOF when typing in the console.</p>
-<h3>Launch in Debug Mode when Workspace Contains Breakpoints</h3>
-<p>Since 3.0, The user preference "Launch in debug mode when workspace contains 
-  breakpoints" is used to control whether a launch should use debug mode 
-  even when "run" is pressed by the user, based on the presence of breakpoints 
-  in the workspace. A new method, <code>getBreakpoints(ILaunchConfiguration configuration)</code>, 
-  has been added to the abstract implementation of <code>LaunchConfigurationDelegate</code>, 
-  to determine which breakpoints should be considered as relevant for a particular 
-  launch. By default, all breakpoints in the workspace are considered, but subclasses 
-  may override. For example, the Java Application launcher only considers Java 
-  breakpoints.</p>
-<h3>Case Insensitive Source Lookup and Relative Paths</h3>
-<p>The debug platform's source lookup facilities now lookup source in folders 
-  and directories in a case insensitive manner on platforms that are case insensitive. 
-  As well, relative path names are supported in folders and directories.</p>
-<h2>Changes</h2>
-<h3>Debug Event Dispatch</h3>
-<p>In releases 3.0 and prior, calling <code>DebugPlugin.fireDebugEventSet(DebugEvent[])</code> 
-  resulted in debug events being fired synchronously in the calling thread. In 
-  3.1, debug event set listeners are notified of debug events asynchronously in 
-  a different thread than the event is reported in.</p>
-<h3>Debug Actions and Content in Background Jobs</h3>
-<p>In 3.1, many actions that call debug element APIs (like "stepOver"), 
-  now create jobs to communicate with debug elements in background threads. This 
-  avoids blocking the UI in the case that a debug element method requires communication 
-  with a debug target that can block, hang, or timeout. Similarly, many of the 
-  debug views populate their content using background jobs to avoid blocking the 
-  UI thread. The net difference is that in 3.1, more than one thread might be 
-  accessing a debug model's APIs where previously only the UI thread was.</p>
-<h3>Contextual Launch from Top Level Run/Debug Menus</h3>
-<p>The top level menus no longer support the perspective element, and launch shortcuts 
-  must specify a "<code>contextualLaunch</code>" element to appear in 
-  the Run/Debug cascade menus.</p>
-<p> </p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_2_ buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r3_2_ buildnotes_platform-debug.html
deleted file mode 100644
index fad1106..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_2_ buildnotes_platform-debug.html	
+++ /dev/null
@@ -1,601 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-<h1> Eclipse 3.2 Debug Platform Build Notes </h1>
-
-<h2>RC7 - June 2, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144551">144551</a>: Collapse All tooltip in the Breakpoint View says "Collapse Al"<br>
-
-<h2>RC6 - May 26, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143297">143297</a>: Terminate and Relaunch only works asynchronously<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143096">143096</a>: TVT3.2:TCT644: TR: Migrate button truncated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143812">143812</a>: [Memory View] Memory View's tree viewer handles any terminate event<br>
-
-<h2>RC5 - May 19, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139839">139839</a>: [source lookup] disconnect from PDE source locator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141908">141908</a>: Memory Leak in debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141895">141895</a>: Step keybindings not working in Ant debugger.<br>
-
-<h2>RC4 - May 12, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138389">138389</a>: Large memory leak in launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141324">141324</a>: NPE in JDIDebugTarget.getRootThreadGroups()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141189">141189</a>: No version range specified when requiring bundles<br>
-
-<h2>RC3 - May 05, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136223">136223</a>: Suspended thread does not show stackframe/missing thread labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138527">138527</a>: Actions under the "Run" menu are incorrectly enabled at startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139530">139530</a>: SWTException when workbench is shut down<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139718">139718</a>: Got internal error for "Retrieving labels" when displaying my JSP variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139853">139853</a>: NPE in asynch tree viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139859">139859</a>: selection lost while traversing tree<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136416">136416</a>: Terminated threads appearing in debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139562">139562</a>: Regression...Launch Dialogs lose default button handling<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139576">139576</a>: unable to get the 'value' column back in variables view<br>
-
-<h2>RC2 - April 28, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131930">131930</a>: New Variables view is hard to use<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136478">136478</a>: IllegalArgumentException in ProcessPropertyPage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138468">138468</a>: special characters should be escaped in var view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138220">138220</a>: Using 0424-0010, I got org.eclipse.core.commands.common.NotDefinedException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123842">123842</a>: IndexedVariablePartition has no children in InspectPopup.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126725">126725</a>: "Find" in virtual trees<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126724">126724</a>: Copy Stack/Variables in virtual tree<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137782">137782</a>: Index out of bounds exception in clear()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136671">136671</a>: Mnemonic conflict on "Common" Launch Configuration tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136917">136917</a>: Console view doesn't get opened in the current window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137212">137212</a>: Launch Dialogs won't save data<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137511">137511</a>: Launch Dialogs won't close<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130201">130201</a>: Debug view doesn't select the last stopped thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109611">109611</a>: System environment variables are not propagated into External tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136623">136623</a>: prompt to delete shared configs not needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137379">137379</a>: Assert error from actions when wrappering JDT debug elements.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135093">135093</a>: 'Errors in Project' dialog should have 'Yes' as default button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134612">134612</a>: shared location dialog does not persist size/location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134287">134287</a>: Junit View autosave class(es) used in test<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130208">130208</a>: Widget disposed in AsynchronousTreeModelViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137836">137836</a>: Step Filters action do not use StepFiltersAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138186">138186</a>: Deadlock after inspecting a value (Ctrl+Shift+I)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137569">137569</a>: Remove ICU4J dependency for org.eclipse.core.variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108039">108039</a>: Detail pane setting not remembered if debug views are controlled by context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120620">120620</a>: Static variables show up twice in Find Variables Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133750">133750</a>: Copy variables action should include columns to copy values of variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137923">137923</a>: Delete Launch Configurations dialog problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138002">138002</a>: ModelDelta using ArrayList that only contains 1 element<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128452">128452</a>: Race Condition on Auto-Removal of terminated Launches<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128289">128289</a>: [memory view] added mem block  not selected in mem view tree<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130572">130572</a>: [Memory View] Do not show Previous and Next Page actions for IMemoryBlock<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139051">139051</a>: Remove unused 'background' function in old debug action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120200">120200</a>: Stepping performance deteriorates for testcase with many variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126725">126725</a>: Find" in virtual trees<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134833">134833</a>: Thread Change events not handled properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136439">136439</a>: Terminate All should be disabled on startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133422">133422</a>: [Memory View] SwitchMemoryBlock does not list all available memory blocks if the node is collapsed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135275">135275</a>: [Memory View] Formatting sometimes not synchronized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136646">136646</a>: [Memory View] Memory View takes focus whenever a rendering is added<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133755">133755</a>: Columns settings not remembered for Registers View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137308">137308</a>: [Memory View] Need changes in table rendering resulted from changes with underlying table viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138011">138011</a>: [Memory View] Format causes boundary alignment to be incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139024">139024</a>: Ant JRE tab has clipped widgets on the bottom<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138660">138660</a>: [Memory View] Firing state change event for memory block does not update labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138729">138729</a>: [Memory View] Need to  be able to turn off address boundary alignment<br>
-
-<h2>RC1 - April 13, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101754">101754</a>: [EditorMgmt] Debug view opens wrong editor if more than one editor is registered for given file type.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135629">135629</a>: undo/redo in variable view details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134871">134871</a>: StackOverflowError using AsynchronousViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133632">133632</a>: Please add "do not ask again" to "errors in project" dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134177">134177</a>: Step Actions still check for IStep interface<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134324">134324</a>: infinite "do you wish to save?" dialogs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17360">17360</a>: Should specify default shared config location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134186">134186</a>: [Memory View] Workbench gets really slow after formatting to 1 byte per row<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134408">134408</a>: DBCS3.2: errors on the Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110215">110215</a>: Apply button has no effect after having modified launch configuration arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135514">135514</a>: BreakpointConditionEditor disposes global action handler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133563">133563</a>: Edit Source Lookup action available on non-existant config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127894">127894</a>: Debug Exception when selecting the launch after refactor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114727">114727</a>: DebugException after renaming a type and switching to debug perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135877">135877</a>: Warning in latest nightly build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135770">135770</a>: need to adopt ICU4J APIs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133379">133379</a>: Bad console pattern listener breaks launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127157">127157</a>: Deleting > 1 project results in > 1 prompt to delete configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134746">134746</a>: Pressing ENTER key while editing program or VM arguments runs the app and doesn't insert a new line.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131368">131368</a>: [Memory View] AddMemoryBlockAction and GoToAddressAction  should get debug context from service<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131830">131830</a>: [Memory View] AbstractAsyncTableRendering shows pending forever<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133864">133864</a>: [Memory View] Columns not sized properly first memory rendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134886">134886</a>: [Memory View] Copy and Print actions only copy/print what's visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135031">135031</a>: [Memory View] Lose last line of buffer for IMemoryBlock after format<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135119">135119</a>: [Memory View] Reset does not position the base address to the top of the view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135274">135274</a>: [Memory View] Text rendering should render memory byte-by-byte for invalid data<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134092">134092</a>: NPE in LaunchConfigurationsDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135897">135897</a>: [Memory View] All tab labels show address if creating more than one rendering at the same time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135914">135914</a>: [Memory View] TableRenderingModel only considers values when marking a byte as changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133857">133857</a>: Expansion not maintained in Registers View when switching between stackframes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129247">129247</a>: [Memory View] Format Dialog is too small<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134603">134603</a>: [Memory View]MonitorMemoryBlockDialog is too small<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134348">134348</a>: Footprint fattening from StackFrameSourceDisplayAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131920">131920</a>: Variables view unusably small<br>
-
-<h2>3.2 Milestone 6 - March 31, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132896">132896</a>: Improve perspective description and display on launch dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133752">133752</a>: Unexpected filtering in the launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132929">132929</a>: LCD Filtering is whacked<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132860">132860</a>: launch config resource filter assumes resource mapping is project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133553">133553</a>: prompt for delete breakpoints and working sets enabled when nothing selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133705">133705</a>: Error out of date in Launch dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133712">133712</a>: Typing in filter text in launch dialog does not work as expected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132936">132936</a>: Resizeable launch configuration migration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130852">130852</a>: NPE from async tree viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132342">132342</a>: [Memory View] Need more enhancements in offset mode for GoToAddressAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133371">133371</a>: [Memory View] SwitchMemoryBlockAction calls model on UI thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133877">133877</a>: [Memory View] Viewer contribution of AddMemoryRenderingActionDelegate does not work properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106790">106790</a>: Resume button is incorrectly enabled when the IProcess is selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131179">131179</a>: Show Column action has no effect in Registers View and Expressions View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132044">132044</a>: ArrayIndexOutOfBound exception in Variables View if show column is off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132150">132150</a>: Suspend action is always disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127147">127147</a>: [Memory View] Allow user to enter "go to address" in an address bar from a rendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105733">105733</a>: TVT 3.1 - TCT 531 - Poor grammar in "Run Eclipse Application" and "Profile Eclipse Application"<br>
-
-<h2>March 21, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132953">132953</a>: DBCS3.2: unstable Breakpoint export<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131818">131818</a>: [Column Adapters] Widget disposed error closing down workbench<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131765">131765</a>: Columns disappear when resumig to breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131842">131842</a>: Remove workaround for bug 95832<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131922">131922</a>: index out of bounds handling cell selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131587">131587</a>: launch config dialog has different appearance than the rest of eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131173">131173</a>: "show columns" setting not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130534">130534</a>: Need collapse option for launch config management<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132054">132054</a>: NPE in JavaBreakpointPropertiesAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118072">118072</a>: [flex-hierarchy] Setting color to null in label adapter does nothing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127066">127066</a>: debug capability interfaces should be async<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106205">106205</a>: [plan item] Enhance the debug platform<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131816">131816</a>: [Memory View] Sync properties id need to be defined in AbstractAsyncTableRendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132027">132027</a>: [Memory View] Rendering View Pane is blank if the tree viewer is hidden<br>
-
-<h2>March 14, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131032">131032</a>: org.eclipse.debug.ui.BreakpointOrganizers shutdown problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131174">131174</a>: background color for changed value should be user pref<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131212">131212</a>: Need factory adapter for IModelSelectionPolicyAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103811">103811</a>: cannot delete a breakpoint working set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79713">79713</a>: Persist/restore expansion state in the LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125292">125292</a>: red X = delete   black X = clear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129757">129757</a>: view menu polishing: use 'Layout' submenu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130750">130750</a>: cheese in LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130663">130663</a>: Warn when console pattern matcher missing enablement expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102943">102943</a>: [Memory View] F1 help for Memory View does not work correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108590">108590</a>: [Memory View] Add mnemonic to pull down menu items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99866">99866</a>: [Memory View] Labels on the Memory Monitors Pane is truncated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120758">120758</a>: [Memory View] Non-auto load mode does not load memory properly if row size is not boundary aligned<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127327">127327</a>: [Memory View] Rendering shows blank lines when re-synchronizing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130370">130370</a>: [Memory View] Add Layout submenu in Memory View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129761">129761</a>: [Memory View] memory view UI issues<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125374">125374</a>: support trees with columns<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130775">130775</a>: [Memory View] TableCursor magically appears again<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130941">130941</a>: [Memory View] swt exception  when debug session is terminated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130953">130953</a>: [Memory View] Create provisional APIs<br>
-
-<h2>March 7, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130431">130431</a>: A lot of characters in a line of output crashes Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129762">129762</a>: initial focus in launch dialog should be on tree, not filter coolbar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124257">124257</a>: LCD insists on saving<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128991">128991</a>: NPE in DebugPlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127873">127873</a>: Actions incorrectly enabled in Debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128685">128685</a>: Resume action enabled after all processes terminated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129577">129577</a>: separate viewer model and widgets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79912">79912</a>: Bad sizing in LaunchConfigurationsDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130373">130373</a>: Bad sizing on the LaunchConfigurationPropertiesDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129381">129381</a>: LaunchView will never return a ShowInContext<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130767">130767</a>: In 3.1/3.2, ExecutionArguments class unexpectedly returns surrounding double-quotes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130828">130828</a>: Breakpoints View go to file icon is gone.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130397">130397</a>: [Memory View] widget disposed exception when debug session terminates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130555">130555</a>: [Memory View] Cursor unexpectedly disappears<br>
-
-<h2>February 28, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124799">124799</a>: Discouraged references on legitimate API methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127926">127926</a>: Discouraged access to "getContainer()" from "FolderSourceContainer"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106406">106406</a>: Preference not saved when launching with compile error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128383">128383</a>: BreakpointOrganzierLabelProvider extends internal UI class but does not use it<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128610">128610</a>: DBCS32: exported breakpoints file isn't UTF-8 encoded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128978">128978</a>: Add an "Are You Sure?" check to "Remove All" action in Expressions View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128553">128553</a>: NPE when launching Ant launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128534">128534</a>: Use FilteredTree in launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129351">129351</a>: Mismatched selection in Launch Configuration Dialog after rename<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121747">121747</a>: [flex-hierarchy] investigate jface TreeSelection and TreePath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129379">129379</a>: Incorrect logic in BreakpointTypeOrganizer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128494">128494</a>: Organize manifests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127331">127331</a>: [Memory View] Changing color setting has no effect until refresh<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127460">127460</a>: [Memory View] Create empty groups in context menu for AbstractAsyncTableRendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127371">127371</a>: [Memory View] #supportsValueModification calls on UI thread<br>
-
-<h2>3.2 M5 - February 17, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123653">123653</a>: Ctrl-Shift-D does not work  in dialogs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127914">127914</a>: Export Breakpoints Table does not use Dialog Font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127581">127581</a>: NPE attempting selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124274">124274</a>: debug keybindings not active on first launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127067">127067</a>: Instruction pointer images should be API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126630">126630</a>: Deadlock while building<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121454">121454</a>: Console synchronization problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105235">105235</a>: TVT 3.1: TCT479 - mnemonic char in middle of DBCS menu label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117103">117103</a>: Suspending the target manually does not expand it.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126667">126667</a>: Copy stack behavior differs when showing thread groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68394">68394</a>: [view management] debug view stays when debug session finishes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87612">87612</a>: Automated tests for debug view management<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119512">119512</a>: [flex-hierarchy] AsynchronousTreeViewer.add(..) requires UI Thread.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124203">124203</a>: View management with respect to debug context manager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126790">126790</a>: Variables view update problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117491">117491</a>: Debug event handlers no more<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119512">119512</a>: [flex-hierarchy] AsynchronousTreeViewer.add(..) requires UI Thread.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126666">126666</a>: NPE in target on latest code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126726">126726</a>: Show Monitors not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125236">125236</a>: Missing context help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95791">95791</a>: [view management] Context enablement efficiency<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127106">127106</a>: suspend trigger not created for subsequent launches<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127130">127130</a>: ConsoleDocumentAdapter.repairLines needs review<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66576">66576</a>: perspectives pref page tab does not take activities into accoutn<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126963">126963</a>: Terminate action in console context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126964">126964</a>: "Remove Launch" action in console context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126884">126884</a>: Terminology: 'Perspectives' vs. 'Perspective Switching'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125375">125375</a>: Cancel does not cancel launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126439">126439</a>: SelectAllExpressionsAction leakage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127334">127334</a>: Turning off filter checked launch configuration types fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127305">127305</a>: apply revert buttons appear always<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127246">127246</a>: NPE in ViewContextService.perspectiveChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126733">126733</a>: Debug view toolbar actions initially enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127307">127307</a>: empty logical structure dance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127937">127937</a>: Leak: LaunchSuspendTrigger is not disposed properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127903">127903</a>: Terminate all has no effect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125536">125536</a>: selection not revealed when item not populated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127458">127458</a>: NPE attempting selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127918">127918</a>: Refresh Tab displaying incorrect error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127932">127932</a>: Widget is disposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127473">127473</a>: NPE in  Launch View context provider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127190">127190</a>: Duplication of stack in Debug View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127757">127757</a>: missing thread in debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127946">127946</a>: Leak: ConsoleView never deregistered from the ConsoleManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127886">127886</a>: NPE on importing Ant breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90164">90164</a>: [Memory View] Highlight/Colourize Changed Values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106424">106424</a>: [Memory View] Move memory view update to background thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120031">120031</a>: [Memory View] Need to allow clients to customize labels in SwitchMemoryBlockAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120126">120126</a>: [Memory View] RenderingViewPane does not set selection to new memory block<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128096">128096</a>: [Memory View] Selection in tree view pane not maintained properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120443">120443</a>: [Memory View] Reset Monitor action does not run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127368">127368</a>: [Memory View] NPE in synchronization service when Memory View is closed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128292">128292</a>: launch config type viewer is showing private config types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128144">128144</a>: Launch view should support legacy "workbench adapters"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128210">128210</a>: Cannot expand items in the Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128314">128314</a>: NPE after clicking in stack<br>
-
-<h2>February 7, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126024">126024</a>: Launch config filter for external tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126114">126114</a>: Launch Configuraiton dialog filter count does not update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123163">123163</a>: AsynchronousTreeViewer should use SWT.VIRTUAL.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120863">120863</a>: Support Ctrl modifier on console hyperlinks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121106">121106</a>: no need for IModelDelta.CHANGE flag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122743">122743</a>: ToggleBreakpointAction must implement IUpdate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124040">124040</a>: debug/inspect popups require ITextViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125490">125490</a>: Debug view not populated when a breakpoint is reached<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125771">125771</a>: unable to create method breakpoints in external source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126106">126106</a>: popup dialog API changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126165">126165</a>: Snipptet editor's 'documentSetup' extension violates spec<br>
-
-<h2>January 31, 2006</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>Added API to consolePatternMatchListeners extension to support the use of
-    string variable substitution in pattern matchers. See extension point documentation.</li>
-  <li>Added API to delegate watch expression creation to debug model via IWatchExpressionFactoryAdapter.
-    Allows a debugger to override default watch expression creation based on a
-    variable's name.</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119488">119488</a>: java stack trace hyperlinks not .java agnostic<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124257">124257</a>: LCD insists on saving<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125244">125244</a>: ResourceException while running Debug test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12134">12134</a>: Closing a project should disable run and debug.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125005">125005</a>: renaming a project prompts for deleting launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115044">115044</a>: Filter launch configurations to current working set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125361">125361</a>: spelling error in Configure Details Area dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125054">125054</a>: FIlter menu mnuemonic should be letters not numbers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124160">124160</a>: step actions become disabled<br>
-
-<h2>January 24, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124171">124171</a>: Launch configuration filters prefs page: glitches in labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123861">123861</a>: Selection remains on filtered config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124170">124170</a>: Launch configuration filters: pulldown menu on filter button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124181">124181</a>: Invalid Thread Access in LaunchConfigurationsDialog<br>
-
-<h2>January 17, 2006</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>New API to export and import breakpoints. The new API classes ExportBreakpointsOperation
-    and ImportBreakpointsOperation can be found in org.eclipse.debug.ui.actions.</li>
-</ul>
-
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19521">19521</a>: Launching classes from closed projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122882">122882</a>: Mnemonic change on debug launch page: "De&bug" conflicts with "&Browse" buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114521">114521</a>: Still too hard to customize the coloring of the executing line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123820">123820</a>: typo in AbstractSourceLookupDirector javadoc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113772">113772</a>: removing a project should remove launcher-entry as well<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123627">123627</a>: Filter count on LCD not accurate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123630">123630</a>: CCE pressing Aply in Launch config pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123635">123635</a>: run/debug latest fails when filtered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123680">123680</a>: FIlter count not updated with action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123858">123858</a>: LCD main page needs updating<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123663">123663</a>: Launch history should support Capabilities<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123862">123862</a>: keywords for Launch Configurations pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123889">123889</a>: LCD not setting dialog font for preferences dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123956">123956</a>: Font not propegated to child widgets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123440">123440</a>: DebugPopup and InspectPopup need javadoc/since 3.2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124017">124017</a>: NPE after deleting config from LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111530">111530</a>: update dialog size/position persistance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123847">123847</a>: Remote Java App - Debug Run Configuration - throws IndexOutOfBoundsException<br>
-
-<h2>January 10, 2006</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>Insturction pointer annotataions can be overriden in part or whole by having a debug
-     model presentation implement <code>IInstructionPointerPresentation</code>. This allows
-     specification of the entire annotation object, and annotation type + text, or an
-     image + text.</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122908">122908</a>: pref pages missing context help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121681">121681</a>: CCE in breakpoints export wizard.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116316">116316</a>: "Source lookup error" logged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122646">122646</a>: Use IStructuredSelection instead of StructuredSelection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111017">111017</a>: default tab width for MessageConsole changed from 8 to 0 in 3.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116060">116060</a>: MessageConsoleStream.println synchronization hazard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117946">117946</a>: InstantiationException from ConsoleRemoveLaunchAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119306">119306</a>: [flex-hierarchy] LaunchView autoExpand() creates TreePath with hard coded hierarchy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122166">122166</a>: Watch does Inspect in 3.2M4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123327">123327</a>: Need API to import / export breakpoints programatically<br>
-
-<h2>3.2 M4</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120677">120677</a>: Terminating a debug launch does not deactivate the debugging context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108568">108568</a>: Debug console test failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120028">120028</a>: ConcurrentModificationException in DecorationManager when stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121092">121092</a>: DefaultUpdate policy ignores EXPAND and SELECT deltas for unchanged items<br>
-
-<h2>December 12, 2005</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>The "source not found" editor and editor input have become API.
-    See <code>CommonSourceNotFoundEditor</code> and <code>CommonSourceNotFoundEditorInput</code>.</li>
-  <li>The "changed value color" has become API. See <code>IDebugUIConstants.PREF_CHANGED_DEBUG_ELEMENT_COLOR</code>
-    and <code>DebugUITools.getPreferenceColor(id)</code>.</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120683">120683</a>: Please stop using ListenerList from org.eclipse.core.commands<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119447">119447</a>: SaveScopeResourcesHandler needs check for Private configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117098">117098</a>: Thread not selected on class loading breakpoint hit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92901">92901</a>: Popup control should be installed once on each control<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106419">106419</a>: [Memory View] Improve user experience for adding new memory blocks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100081">100081</a>: [Memory View] Support for address space in Memory View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106422">106422</a>: [Memory View] Improvement to Memory Monitor View Pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118075">118075</a>: CommonSourceNotFoundEditor needs to be public<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106421">106421</a>: [Memory View] Initial column size preference should be stored by debug target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112412">112412</a>: Make access to change variable colour preference public<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117093">117093</a>: [flex-hierarchy] Drop to frame doesn't clear old current line annotations.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117082">117082</a>: [flex-hierarchy] expressions don't show errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119391">119391</a>: Many NPEs in DebugTargetProxy.containsEvent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120010">120010</a>: combine IModelDelat and IModelDeltaNode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108828">108828</a>: Drag and Drop in Breakpoints view shows misleading drop affordance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120447">120447</a>: prompted to save scrapbook editor before exeucting expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117072">117072</a>: [flex-hierarchy] suspend event may occurr before proxy installed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113410">113410</a>: null fTabFolderForMemoryBlock in RenderingViewPane.memoryBlocksAdded<br>
-
-<h2>December 6, 2005</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>New API action for enabling/disabling breakpoints in editor ruler - RulerEnableDisableBreakpointActionDelegate.</li>
-  <li>New abstract API action for action working on breakpoints in editor ruler
-    - RulerBreakpointAction.</li>
-  <li>API to retrieve images and browsers for source containers added to DebugUITools.</li>
-  <li>API for overriding default instruction pointer annotations - see IInstructionPointerPresentation.</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=63058">63058</a>: Adding lots of favorites needs busy cursor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97706">97706</a>: [Memory View] Need to make some more Memory View  related contants/methods public<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88914">88914</a>: [Memory View] Provide UI and API to configure the addressable size.<br>
-
-<h2>November 29, 2005</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>API has been added to retrieve images and browsers for source container
-    types. See DebugUITools.</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117945">117945</a>: [flexible hierarchy] ClassCastException when trying to get active context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117386">117386</a>: [flex-hierarchy] expand over rides previous expands<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112792">112792</a>: NPE in TextConsoleViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89429">89429</a>: Make the SourceLookupUIUtils class public<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117720">117720</a>: SelectAll and Copy actions not available in Registers View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118082">118082</a>: Deadlock between VariablesViewer and DefaultVariableViewModelProxy<br>
-
-<h2>November 22, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114845">114845</a>: 'Terminate and relaunch' action is enabled for non-relaunchable configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115874">115874</a>: Import and Export icons for Breakpoints are backwards.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117057">117057</a>: [flex-hierarchy] NPE in RemoveAllTerminatedAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117090">117090</a>: [flex-hierarchy] terminated threads appear in debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82850">82850</a>: Variable is not updated in the variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106150">106150</a>: Variables view is constantly updating which results in 100% CPU usage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109943">109943</a>: Expressions view calls expensive IValue.getVariables() instead of cheap IValue.hasVariables()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110206">110206</a>: Variables view won't collapse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117101">117101</a>: [flex-hierarchy] select/expand states not cleared from cache<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117155">117155</a>: [flex-hierarchy] Threads not updated when target resumed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114617">114617</a>: [Memory View] Tooltip not updated propertly at column 0 in AbstractTableRendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100273">100273</a>: [Memory View]: Preference Table Renderings UI bug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117095">117095</a>: [flex-hierarchy] resuming one thread does not select next suspended thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117106">117106</a>: [flex-hierarchy] null tree path with manually expanding thread<br>
-
-<h2>November 8, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115195">115195</a>: Debug manifests reference a deprecated header<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115155">115155</a>: Link to perspective preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90031">90031</a>: [Memory View] Adjust the Number of Columns in the Memory View<br>
-
-<h2>October 31, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li>Consoles can provide context specfic F1 help. Console implementations should
-    override <code>AbstractConsole.getHelpContextId()</code> to hook appropriate
-    help. If not provided, the generic help for the console view is displayed.</li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112625">112625</a>: Launcher : Bad default value with the variable ${string_prompt}<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112670">112670</a>: Can't toggle selection of treeitem in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113837">113837</a>: breakpoints import and export wizards should be categorized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112503">112503</a>: Cannot change the background color of the 'Display' view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112553">112553</a>: ConcurrentModificationException in BreakpointManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112771">112771</a>: Add API to allow specific context help in Text Consoles<br>
-
-<h2>October 25, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112648">112648</a>: Breakpoint import/export references java constant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113378">113378</a>: incorrect neumonic on Launching preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111633">111633</a>: API clarification needed for getWorkingCopy()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111739">111739</a>: [Contributions] matchesContentType check does not take base-type into account<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106567">106567</a>: [Memory View] Provide hover support in table renderings<br>
-
-<h2>October 18, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110080">110080</a>: breakpoint import updates breakpoint view for each breakpoint<br>
-
-<h2>October 11, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111485">111485</a>: perspective page fails when new launch types are added<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103462">103462</a>: Stacktrace-Hyperlink works only for one link per line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111437">111437</a>: hyperlinks not updated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109491">109491</a>: Exception in log<br>
-
-<h2>October 4, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li>The perspective settings associated with launch configurations have been
-    centralized on the "Run/Debug > Perspectives" preference page.
-    Previously the perspective settings were controlled via the launch configuration
-    dialog. The "Perspectives" tab has been replaced with a "Getting
-    Started" tab that explains how to create a new configuration.</li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110928">110928</a>: mneumonic conflict on preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79709">79709</a>: Centralize launching preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110075">110075</a>: Embedded breakpoints view with nested groups does not update check marks properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111079">111079</a>: debug/run button active with multiple selection<br>
-
-<h2>September 21, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110078">110078</a>: acclerator conflict in breakpoint import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110074">110074</a>: Breakpoints are not added to default breakpoint working set<br>
-
-<h2>September 19, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li><strong>Remove a single console</strong>: An action has been added to the console
-  toolbar to remove the associated launch/console.</li>
-</ol>
-
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109008">109008</a>: breakpoint import/export polish items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103731">103731</a>: breakpoint working set settings lost on project close/open<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102270">102270</a>: Console: Close just one window?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109009">109009</a>: Tests for breakpoint import/export<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109777">109777</a>: import/export breakpoints test failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102526">102526</a>: Find/Replace in Console window does not go to proper place of matches when window  has fixed width<br>
-
-<h2>September 13, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li><strong>Breakpoint import and export</strong>: Breakpoints can be exported
-    and imported from the local file system. Actions are available in the context
-    menu of the Breakpoints view to export/import, as well as in the general import/export
-    wizard. </li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41057">41057</a>: Option to export and import break points at the Breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86114">86114</a>: Breakpoint working set wizard should show breakpoints in hierarchical fashion<br>
-
-<h2>September 6, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li><strong>System properties as launch variables</strong>: A new string variable
-    "${system_property:name}" was added to the debug platform that resolves
-    to the value of a system property in the Eclipse SDK runtime. The variable
-    accepts a system property name as an argument and a selection dialog allows
-    the user to select from known system properties.</li>
-</ol>
-
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108323">108323</a>: expose system properties as variables in the launching framework<br>
-
-
-<h2>Aug 30, 2005 </h2>
-
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107488">107488</a>: [Memory View] Table rendering stop updating when new memory blocks are added<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108307">108307</a>: remove coupling between breakpoints view and content provider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105356">105356</a>: TVT 3.1 - TCT 428 - Mnemonic Error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107383">107383</a>: testCaseSensitiveQualifiedSourceLookup failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108126">108126</a>: NPE when bringing Registers View to the top<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107739">107739</a>: [Memory View] Rendering View Pane does not pin display on first new memory block.<br>
-
-<h2>Aug 8, 2005 </h2>
-<h3>Enhancements</h3>
-<ol>
-  <li><strong>API addition:</strong><code> IDebugUIConstants.PREF_MAX_DETAIL_LENGTH</code>.
-    The user preference controlling the maximum length of strings displayed in
-    the Variables view detail area has been made public API. In previous builds
-    the preference was internal.</li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106178">106178</a>: Remove uneccessary NLS tags<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89471">89471</a>: [polish] Installed JRE pref page: Source attach & jdoc loc should be configurable in default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104852">104852</a>: Debug View  changes focus on removal of terminated launch forcing editor popup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104675">104675</a>: large byte[] variabls expand into too much memory<br>
-
-
-<h2>Aug 2, 2005 </h2>
-<h3>Enhancements</h3>
-<ol>
-  <li>Added NL support for images.</li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103381">103381</a>: Infinite viewer expand/restore when recursive data structure expanded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105071">105071</a>: Incorrect handling for debugger's continue-launch-despite-compile-errors dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105264">105264</a>: [BIDI] need to add $nl$/ to icon paths for reversed icons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104573">104573</a>: Resource Tree Locked error while saving shared Eclipse Application launch config<br>
-
-<h2>July 26, 2005 </h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98147">98147</a>: Variables View does not show all children if same instance is expanded twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99416">99416</a>: Evaluation in context of superclass fails to resolve instvar in subclass<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100543">100543</a>: TextConsoleViewer should not subclass TextViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100480">100480</a>: Duplicate launch configuration leads to bogus launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102537">102537</a>: org.eclipse.ui.console.consolePageParticipants API information<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99753">99753</a>: Debug use of new Boolean(boolean)<br>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_3_buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r3_3_buildnotes_platform-debug.html
deleted file mode 100644
index 5c79a75..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_3_buildnotes_platform-debug.html
+++ /dev/null
@@ -1,747 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-<h1> Eclipse 3.3 Debug Platform Build Notes </h1>
-
-<h2>Summary of API changes in 3.3</h2>
-<h3>Launching</h3>
-The launch framework has been enhanced to support the following: 
-<ul>
-  <li> Mixed mode launching - for example, allows an application to debugged and 
-    profiled at the same time</li>
-  <li> Multiple launch delegates for the same configuration type and mode combination 
-    - for example, allows multiple Java profilers to exist in the workbench side 
-    by side</li>
-  <li>Contribution of extra tabs to existing tab groups - for example, allows 
-    a profiler to contribute a profile options tab to an existing tab group in 
-    the launch dialog</li>
-  <li>Read-only launch configurations - for example, if a launch configuration 
-    is stored in the file system in a read-only state, the launch configuration 
-    cannot be edited in the launch dialog</li>
-  <li>Nested launch configuration working copies - allows a working copy to be 
-    created from a working copy that saves back to the parent working copy instead 
-    of file system</li>
-</ul>
-<p>The following extension points have been added: </p>
-<ul>
-  <li><code>org.eclipse.debug.ui.launchConfigurationTabs</code> - allows a tab 
-    to be contributed to an existing tab group in the launch configuration dialog 
-    <ul>
-      <li>added extension point identifier constant <code>IDebugUIConstants.EXTENSION_POINT_LAUNCH_TABS</code> 
-      </li>
-    </ul>
-  </li>
-</ul>
-<p>The following extension points have been enhanced: </p>
-<ul>
-  <li><code>org.eclipse.debug.core.launchDelegates </code> 
-    <ul>
-      <li>addition of optional <code>name</code> attribute to allow users to select 
-        a launcher when more than one is available</li>
-      <li>addition of optional <code>modeCombination</code> element to specify 
-        supported mixed launch modes</li>
-    </ul>
-  </li>
-  <li><code>org.eclipse.debug.core.launchConfigurationTypes </code> 
-    <ul>
-      <li>addition of optional <code>icon</code> attribute to allow an icon to 
-        be contributed in the same extension as its type. This can only be used 
-        if the icon is in the same plug-in as the launch configuration type.</li>
-      <li>addition of optional <code>delegateName </code>attribute to allow users 
-        to select a launcher when more than one is available</li>
-    </ul>
-  </li>
-</ul>
-<p>The following types have been added:</p>
-<ul>
-  <li>added interface <code>org.eclipse.debug.core.ILaunchDelegate</code> - provides 
-    access to a launch delegate extensions and attributes</li>
-  <li>added class org.eclipse.debug.ui.AbstractLaunchModeConfigurationTab - abstract 
-    implementation of a launch tab that modifies a configuration's launch mode</li>
-</ul>
-<p>The following types have been modified in support of launching enhancements:</p>
-<ul>
-  <li>org.eclipse.debug.core.ILaunchConfiguration 
-    <ul>
-      <li>added method getAttribute(String key, Set defaultValue)</li>
-      <li>added method getModes()</li>
-      <li>added method isReadOnly()</li>
-    </ul>
-  </li>
-  <li>org.eclipse.debug.core.ILaunchConfigurationType 
-    <ul>
-      <li>deprecated method getDelegate(String mode)</li>
-      <li>added method getDelegates(Set modes)</li>
-      <li>added method getPreferredDelegate(Set modes)</li>
-      <li>added method setPreferredDelegate(Set modes)</li>
-      <li>added method supportsModes(Set modes)</li>
-      <li>deprecated method getSupportedModes()</li>
-      <li>added method getSupportedModeCombinations()</li>
-      <li>added method getContributorName()</li>
-      <li>added method getImageDescriptorPath()</li>
-    </ul>
-  </li>
-  <li>org.eclipse.debug.core.ILaunchConfigurationWorkingCopy 
-    <ul>
-      <li>added method addModes(Set modes)</li>
-      <li>added method setModes(Set modes)</li>
-      <li>added method removeModes(Set modes)</li>
-      <li>added method getNestedWorkingCopy()</li>
-      <li>added method getParent()</li>
-    </ul>
-  </li>
-  <li>org.eclipse.debug.ui.DebugUITools 
-    <ul>
-      <li>added method getLastLaunch(String id)</li>
-      <li>added method openLaunchConfigurationEditDialog(Shell shell, ILaunchConfiguration 
-        configuration, String groupIdentifier, IStatus status, boolean showCancel)</li>
-    </ul>
-  </li>
-  <li>org.eclipse.debug.ui.AbstractLaunchConfigurationTab 
-    <ul>
-      <li>added method getId()</li>
-    </ul>
-  </li>
-  <li>org.eclipse.debug.ui.actions.AbstractLaunchHistoryAction 
-    <ul>
-      <li>getHistory()</li>
-      <li>getFavorites()</li>
-    </ul>
-  </li>
-</ul>
-<h3>Debug Context Service</h3>
-<p>A debug context represents the active state of a program being debugged. The 
-  active debug context drives the enabled state of debug actions (step, terminate, 
-  etc.), source lookup, visible variables, watch expression values, etc. A set 
-  of classes and interfaces have been added allowing clients to respond to and 
-  provide the active debug context.</p>
-<p>The package <code>org.eclipse.debug.ui.contexts</code> has been added with 
-  the following types:</p>
-<ul>
-  <li><code>AbstractDebugContextProvider</code></li>
-  <li><code>DebugContextEvent</code></li>
-  <li><code>IDebugContextListener</code></li>
-  <li><code>IDebugContextManager</code></li>
-  <li><code>IDebugContextProvider</code></li>
-  <li><code>IDebugContextService</code></li>
-  <li><code>ISuspendTrigger</code></li>
-  <li><code>ISuspendTriggerListener</code></li>
-</ul>
-<p>The following types have been modified</p>
-<ul>
-  <li><code>org.eclipse.debug.ui.DebugUITools </code> 
-    <ul>
-      <li>added method <code>getDebugContextManager()</code></li>
-    </ul>
-  </li>
-</ul>
-<h3>Debug Commands</h3>
-<p>Debug commands represent common debug operations implemented by debuggers - 
-  for example, step over, suspend, resume, and terminate. The debug platform allows 
-  debuggers to provide custom implementations of the operations by implementing 
-  debug command handler interfaces. The platform provides a user interface and 
-  actions that delegate to the command handlers. As well, the platform provides 
-  an implementation of the commands for debuggers that are implementations of 
-  the standard debug model. Debuggers may override the standard implementation 
-  by directly implementing the command handler interfaces in debug model elements 
-  or by registering adapters for the command handler interfaces on debug model 
-  elements. The command handler interfaces are to be implemented in a non-blocking 
-  fashion, and are designed with an asynchronous API, allowing clients to cancel 
-  a command or report failure via the asynchronous request.</p>
-<p>The package<code> org.eclipse.debug.core.commands</code> has been added with 
-  the following types:</p>
-<ul>
-  <li><code>IDebugCommandHandler</code></li>
-  <li><code>IDebugCommandRequest</code></li>
-  <li><code>IDisconnectHandler</code></li>
-  <li><code>IDropToFrameHandler</code></li>
-  <li><code>IEnabledStateRequest</code></li>
-  <li><code>IResumeHandler</code></li>
-  <li><code>IStepFiltersHandler</code></li>
-  <li><code>IStepIntoHandler</code></li>
-  <li><code>IStepOverHandler</code></li>
-  <li><code>IStepReturnHandler</code></li>
-  <li><code> ISuspendHandler</code></li>
-  <li><code> ITerminateHandler</code></li>
-</ul>
-<p>Note that the "use step filters" setting has been moved to the <code>org.eclipse.debug.core</code> 
-  plug-in from <code>org.eclipse.debug.ui</code>. This is to allow the toggle 
-  step filters command to work properly in absence of the UI plug-in. The following 
-  API methods have been added to <code>DebugPlugin</code>:</p>
-<ul>
-  <li><code>setUseStepFilters(boolean useStepFilters)</code></li>
-  <li><code>isUseStepFilters()</code></li>
-</ul>
-<p>The same methods that existed in <code>DebugUITools</code> now delegate to 
-  these new methods.</p>
-<h3>Pluggable Detail Panes</h3>
-<p>The variables, registers, and expressions views in Eclipse 3.3 support pluggable 
-  detail panes. A new extension point - <code>org.eclipse.debug.ui.detailPaneFactories</code> 
-  - is used to contribute factories that create detail panes for specific selections. 
-  The platform provides a default text details area that displays textual details 
-  based on a debug model presentation's <code>computeDetails(...)</code> method. 
-  Clients can contribute detail pane factories with enablement expressions that 
-  can create one or more detail panes for specific objects/selections. The user 
-  is allowed to choose between available detail panes using a context menu. See 
-  <code>IDetailPaneFactory</code> and <code>IDetailPane</code>.</p>
-<h3>Source Lookup</h3>
-<p>Source lookup is driven by the active debug context. When a context is activated 
-  the debug platform displays source for that context. Clients may provide a custom 
-  implementation of source lookup by implementing the source display interface 
-  directly on their debug model elements, or by providing an adapter for the source 
-  display interface. The debug platform provides a standard implementation of 
-  source display for debuggers that are an implementation of the standard debug 
-  model - i.e. implementations of <code>IStackFrame</code> that have an associated 
-  <code>ISourceLocator</code>.</p>
-<p>The following interface has been added:</p>
-<ul>
-  <li><code>org.eclipse.debug.ui.sourcelookup.ISourceDisplay</code></li>
-</ul>
-<h3>Console</h3>
-<ul>
-  <li>Added <code>DebugPlugin.ATTR_CONSOLE_ENCODING</code> - this launch attribute 
-    specifies the encoding used by the console. When unspecified the default system 
-    encoding is used. This constant replaces the now deprecated <code>IDebugUIConstants.ATTR_CONSOLE_ENCODING</code>.</li>
-  <li>Deprecated <code>IDebugUIConstants.ATTR_CONSOLE_ENCODING</code>.</li>
-  <li>Added support to set the background color to text consoles - see new methods 
-    <code>TextConsole.setBackground(Color)</code> and <code>getBackground()</code></li>
-  <li>Added property constant to indicate background color of a console has changed 
-    - <code>IConsoleConstants.P_BACKGROUND_COLOR</code>.</li>
-   <li>Added preference constant <code>IDebugUIConstants.PREF_CONSOLE_FONT</code>, which is used to specify
-   what font should be used in the console.</li>
-</ul>
-<h3>Expressions</h3>
-<ul>
-  <li>added <code>org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapterExtension</code> 
-    - this is an interface that can be optionally implemented by <code>IWatchExpressionFactoryAdapter</code>'s. 
-    Allows the <b>Create Watch Expression</b> action to be dynamically enabled 
-    based on the selected variables.</li>
-</ul>
-<h3>Breakpoints</h3>
-<ul>
-  <li>Added new optional interface for breakpoint organizer extensions. Breakpoint 
-    organizer delegates may optionally implement the <code>IBreakpointOrganizerDelegateExtension</code> 
-    interface. The new interfaces supports add and remove operations on collections 
-    of breakpoints to allow for more efficient drag and drop operations in the 
-    breakpoints view.</li>
-</ul>
-<h3>Memory Renderings</h3>
-<ul>
-  <li>Memory renderings can optionally implement the new interface <code>IRepositionableMemoryRendering</code> 
-    to support repositioning. The API allows a memory rendering to be positioned 
-    to a user specified address.</li>
-</ul>
-<h3>Debug Popup Anchor</h3>
-<ul>
-<li>The specifications on the constructor for <code>DebugPopup</code> have been updated to reflect the change allowing 
-<code>null</code> to be passed as the default anchor point. This change allows consumers of the popup to force a default location 
-for the popup to appear when an otherwise valid anchor point is not available.</li>
-</ul>
-
-<h2>3.3 RC4 - June 8, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188404">188404</a>: [doc] Help for default launchers is meaningless<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190264">190264</a>: [doc] Add links to command contexts to reference help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190269">190269</a>: [doc] JDT Developer Guide Topics need organizing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190528">190528</a>: [doc] New screenshots needed for debug help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190259">190259</a>: [doc] Check html links in doc plugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190532">190532</a>: [doc] Variables and Expressions aren't helpful enough<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190535">190535</a>: [doc] Run/Debug help doesn't make sense with contextual launching<br>
-
-<h2>3.3 RC3 - June 1, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189708">189708</a>: fill contextual launch perf test is yellow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188689">188689</a>: [Memory View] Command Handler conflict when switching to java editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189665">189665</a>: IProcess label not displayed in debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189182">189182</a>: Help contents cannot be fully indexed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189509">189509</a>: Contextual launching glitches<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189982">189982</a>: Layout shows "Variables View Only" in Registers View drop-down<br>
-
-<h2>3.3 RC2 - May 25, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187746">187746</a>: Conflicting mnemonics on Environment tab of OSGi Framework launcher<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188444">188444</a>: Restore Defaults does not work in Launch Preference Page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187905">187905</a>: [doc] console actions are missing help context ids<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187684">187684</a>: Slow to show debug drop-down<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188315">188315</a>: [doc] Reference help uses incorrect style<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188747">188747</a>: [doc] "Realizes" should be replaced with "Opens" in help doc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188919">188919</a>: [doc] Breakpoints view doc needs improvements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189019">189019</a>: [doc] import/export breakpoints topics do not follow style<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189024">189024</a>: [doc] import/export breakpoints F1 help needs more topics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189012">189012</a>: Change Value dialogs do not have F1 help<br>
-
-<h2>3.3 RC1 - May 18, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186527">186527</a>: F11 (Debug Last Launched) behaves wrong in 3.3m7<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186920">186920</a>: TextConsole setBackground method incorrectly spelled as setBackgrond<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187171">187171</a>: [Memory View] Reset Monitors action is enabled when there is no monitor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187043">187043</a>: TVT33:TCT179: ja: mnemonic displayed in the hover text (linux only)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183509">183509</a>: [launching] Optimize launcher story for test driven development<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187049">187049</a>: Update org.eclipse.jdt.doc.user Memory view user assistance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186595">186595</a>: Non-nls string in StackFrameSourceDisplayAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186622">186622</a>: Deadlock trying to launch two configs at the same time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184934">184934</a>: [breakpoints] double click bp in external source should fail more gracefully<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169718">169718</a>: Received ConcurrentModificationException when debugging in RAD6<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185553">185553</a>: Strange icon in the launch configuration context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169438">169438</a>: [Debug Framework] DefaultVariableCellModifier doesn't call verifyValue<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184959">184959</a>: instruction pointer remains when added > 1 editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185311">185311</a>: typo in detailPaneFactories.exsd<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144019">144019</a>: [KeyBindings] Constructed context shows in Keys pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185171">185171</a>: LaunchConfigurationTypesViewer is no longer used and should be deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184867">184867</a>: Ok is the new Cancel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184898">184898</a>: [breakpoints] AIOOB exception setting default working set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184893">184893</a>: [launching] Restore defaults in Run/Debug settings does nothing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184972">184972</a>: [launching] the Search... button is the new dirty button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184631">184631</a>: no way to remove <unknown> launches<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184864">184864</a>: [help] Help topic for Run/Debug properties pages is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184999">184999</a>: Add/Edit File System Directory Dialog has incorrect F1 help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184873">184873</a>: No F1 help for Registers view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185832">185832</a>: [launching] [favorites] filtered launch configurations show up where they shouldn't<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185621">185621</a>: Launching history imposes size limit without message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185688">185688</a>: [KeyBindings] conflict between Run and Debug last launched on Mac<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184970">184970</a>: [Memory View] NPE in SwitchMemoryBlockAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184880">184880</a>: [launching] cannot apply changes editing launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184901">184901</a>: [breakpoints] Breakpoints get removed for same named resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184865">184865</a>: [help] help topic for Select Configuration Type dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184945">184945</a>: [breakpoints] [refactoring] Moving breakpoints of an anonymous inner type has bad label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185829">185829</a>: [help] The add favorites dialog help is not helpful<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184902">184902</a>: Timing problem in variables views' expansion state save/restore logic.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184958">184958</a>: Text from bottom of launch dialog gets cut off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187033">187033</a>: Concurrent modification exception in LaunchManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173120">173120</a>: [variables] logical structures re-computed for each visible range<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187319">187319</a>: TVT33:TCT189: ar: 13.002210 Parenthesis incorrectly displayed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187134">187134</a>: NLS33:default Run application name RTL reading order problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186921">186921</a>: TVT33:TCT170: zh_TW:the mnemonic should be either removed or placed in the end<br>
-
-<h2>3.3 Milestone 7 - May 4, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184896">184896</a>: Concurrent Modification on startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134863">134863</a>: [Memory View] Cell editors in the table rendering needs to be extensible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176857">176857</a>: [Memory View] View id check in DefaultModelProxyFactory makes rendering not portable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176858">176858</a>: [Memory View] CreateRendering can potentially get left behind<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181648">181648</a>: [Memory View] NPE in AbstractAsyncTableRendering when activated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183078">183078</a>: [Memory View] NPE in sync service<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183019">183019</a>: [Memory View] Reset does not position the base address to the top<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184315">184315</a>: Remove all breakpoint dialog does not honor escape<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184320">184320</a>: Color labels for changed values are variables specific<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167426">167426</a>: InstructionPointerContext keeps reference to closed editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183887">183887</a>: NPE in DefaultVariableViewModelProxy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183504">183504</a>: Frames collapse when holding down step over key<br>
-
-<h2>April 24, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184108">184108</a>: [Memory View] Address passed to the cell modifier is incorrect for muti-byte addressable size<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183621">183621</a>: Ensure plug-in dependencies are correct (versions)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183059">183059</a>: SWTException: Failed to execute runnable (ArrayIndexOutOfBoundsException)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180441">180441</a>: RetargetAction should not update upon text selection change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132385">132385</a>: [Memory View] "Remove Rendering" action  not disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144467">144467</a>: [jdi] SocketLaunchingConnectorImpl.launch should call Runtime.getRuntime().exec(String [])<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173306">173306</a>: When editing source lookup, new source containers should be added at the top of the list.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182657">182657</a>: AssertionFailedException running Ant UI test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182324">182324</a>: [launching] When launching a project with errors the warning dialog title says "Errors in Project{0}"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136943">136943</a>: [console] README: Console Deadlock when too much information written<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183163">183163</a>: Accessing constants causes DebugUI to be started<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182318">182318</a>: context launching should be default launch pref setting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183097">183097</a>: [launching] prompted for which Eclipse Application to launch after workbench restart<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177539">177539</a>: [launching] Press on Run/Debug button launches an unexpected configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182774">182774</a>: [launching] launch shortcuts have deprecated elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112081">112081</a>: [launching] Widget is disposed error from launch config window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183275">183275</a>: NPE in TreeModelContentProvider.getPresentationContext<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183460">183460</a>: catch up with JFace fixes from bug 172640<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183463">183463</a>: Expanded nodes in tree viewer flash on refresh<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182901">182901</a>: Better labels for references tracking<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183360">183360</a>: [launching] Launching tooltip re-computed for same selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176471">176471</a>: [launching] debug fails if the default jre is a jdk<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181220">181220</a>: Variable text font does not update correctly when columns turned on/off<br>
-
-<h2>April 17, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182230">182230</a>: org.eclipse.core.variables version number update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182554">182554</a>: illegal argument exception updating labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182170">182170</a>: Index out of bounds running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177909">177909</a>: [Variables View/Registers View] Refresh/Scroll issues - Test Case to reproduce<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31969">31969</a>: [breakpoints] Method breakpoint icon too wide for editor ruler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177910">177910</a>: [Debug] No stack frame selected when thread has been suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178868">178868</a>: run/debug buttons do nothing if exception in shortcut enablement expr<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181044">181044</a>: LabelUpdate does not store previous font data<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181769">181769</a>: [api] broken api contract in ContextualLaunchAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181809">181809</a>: [launching] ContextualLaunchAction shuold not hold handle to current selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182572">182572</a>: [tests] TestAlternateModeTab invalid thread access<br>
-
-<h2>April 10, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178106">178106</a>: [detail pane] Find action doesn't scroll to reveal selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176478">176478</a>: [Registers View] Add font preference for registers view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180618">180618</a>: AbstractLaunchConfigurationTabGroup#setDefaults() no longer gets called<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178753">178753</a>: Cannot do anything in Run/Debug>Launching>Default Launcher preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74480">74480</a>: [launching] Simplify the launch experience for less technical users of Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154107">154107</a>: [launching] Enhance launching support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166219">166219</a>: [launching] Run Last Launched fails due to Launch Config Tree filter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180756">180756</a>: Launch config attriubutes should be persisted in consistent order<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143711">143711</a>: [views] async update of variables view too granular<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177303">177303</a>: [launching] ContextLaunchingResourceManager slows down structured selection changes and part activations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42879">42879</a>: [launching] Common tab does not allow revert when in error state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180971">180971</a>: [breakpoints] export breakpoints dialog scrolled to right<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138780">138780</a>: [variables] [vitrual] Detail pane doesn't show value of selected element if it is invisible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181034">181034</a>: Closing the workbench results in Widget is disposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178526">178526</a>: New menu item "Open Debug Dialog..." is counter intuitive and has bad kbd access key<br>
-
-<h2>April 3, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177640">177640</a>: icon attribute from consoleFactory element should be a resource type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164218">164218</a>: [console] IOConsoleInputStream.read() doesn't reduce the amount of data available<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179558">179558</a>: [console] Preferences... action should use the new SWTFactory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178356">178356</a>: [launching] launch tabs do not match new presentation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176638">176638</a>: [launching] launch config tree initially scrolled to the right<br>
-
-<h2>Milestone 6 - Mar 23, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177788">177788</a>: When hitting a breakpoint from the java perspective, the variable view is not populated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178463">178463</a>: NPE in Launch Configuration Mgr<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177988">177988</a>: Launch configurations marked dirty for no reason<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175805">175805</a>: Debug wants to migrate scrapbook pages but can't<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177165">177165</a>: Context launch chooses Eclipse Application over Test Suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177349">177349</a>: [launching] ContextLaunchingResourceManager should deregister when not using context launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176266">176266</a>: a possible null-deference in "org.eclipse.debug.core/core/org/eclipse/debug/internal/core/LaunchConfigurationWorkingCopy.java"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177036">177036</a>: move 'delete configs' preference to debug.core<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177074">177074</a>: Logged errors for out of sync launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176000">176000</a>: NPE when looking at 'All Instances'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177143">177143</a>: remove unused private constant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175723">175723</a>: Errors related to old launch configs on startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177388">177388</a>: NLS33:translation questions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176902">176902</a>: run/debug hover/behavior incorrect on workspace re-start<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177012">177012</a>: separator in menu when not needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177004">177004</a>: NPE in LaunchConfigurationManager.getHistoryAsXML<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176440">176440</a>: Add optional description attribute to launch shortcuts<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177298">177298</a>: AFE in context launching for binary type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154135">154135</a>: APIs for custom debugger integration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177913">177913</a>: Wrong javadoc for org.eclipse.debug.ui.AbsractLaunchConfigurationTab.setDirty(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178057">178057</a>: details for indexed partition do not update detail pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178126">178126</a>: Incomplete context-sensitive help text.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178118">178118</a>: [launch view] [actions] the launch view should use new factory<br>
-
-<h2>Mar 13, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176957">176957</a>: NPEs from Debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176890">176890</a>: NLS33:new debug.ui message "LaunchConfigurationAction_0" not enabled for translation properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176487">176487</a>: org.eclipse.debug.core crashes in headless mode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176430">176430</a>: remove API for set/get default launch config for a resource<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174190">174190</a>: Transient test failures not allowed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176841">176841</a>: [launching] preference for launch last vs. launch selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175862">175862</a>: Selecting text in editor broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150625">150625</a>: [build path] Cancel project creation ask to delete launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175332">175332</a>: Run/Debug last actions should conform to contextual launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165515">165515</a>: [Memory View] Built-in table renderings only write value if it differs from original<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166234">166234</a>: [Memory View] More flexible buffer size in table renderings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166691">166691</a>: [Memory View] Need gotoAddress() API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167788">167788</a>: [Memory View] Add shortcut keys for Next Page and Previous Page actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171753">171753</a>: [Memory View] Reload is incorrect when receiving selected address change event<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176962">176962</a>: Inconsistency in labels for browse buttons<br>
-
-<h2>Mar 6, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173181">173181</a>: [variables][views] change background colour is hard to work with....<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170857">170857</a>: Index out of bound at the SWT level in the debug view<br>
-
-<h2>Feb 27, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175541">175541</a>: concurrent modification exception in launch history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175292">175292</a>: new config should be initialized with defaults<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56642">56642</a>: [launching] Launching progress<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174797">174797</a>: [launching] no longer prompted to delete associated launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174782">174782</a>: firing model delta should notify root delta<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166231">166231</a>: [launching] history not updated properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174527">174527</a>: NLS:questions about LaunchConfigurationsMessages.properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=159981">159981</a>: Add "COLLAPSE" flag to IModelDelta<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174819">174819</a>: [history] [launching] launch history/favorites not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174935">174935</a>: "<project> does not exist" in log when selecting launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172728">172728</a>: [detail pane] detail panes should be available in inspect popup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100478">100478</a>: [Memory View]: Adding 0 memory blocks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174722">174722</a>: [Memory View] a possible out-of-bound array access in "org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java"<br>
-
-<h2>Feb 20, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=159054">159054</a>: IModelDelta reference ModelDelta<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174210">174210</a>: batched updates don't run if last update canceled<br>
-
-<h2>Feb 13, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173087">173087</a>: Debug should make use of IWorkingSetElementAdapter API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174233">174233</a>: Allow null anchor point in DebugPopup window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153013">153013</a>: [console] Java console will not open<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173896">173896</a>: NPE while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145396">145396</a>: ShowIn LaunchView does not work anymore<br>
-
-<h2>Milestone 5 - Feb 9, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166794">166794</a>: [variables] Copy variables shortcut key doesn't work after detail pane gets focus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172556">172556</a>: Skip all Breakpoints option not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170857">170857</a>: Index out of bound at the SWT level in the debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132055">132055</a>: [launching] Promote LaunchHistory methods to AbstractLaunchToolbarAction API?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173093">173093</a>: [detail panes] detail pane test failure on linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114377">114377</a>: [Memory View] Endian in hex view and ASCII view doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150003">150003</a>: expansion state not maintained when suspending target with thread groups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158537">158537</a>: Variables view: copy variables copies formerly expanded children<br>
-
-<h2>Jan 30, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172248">172248</a>: TextConsoleViewer should be checking for disposed text widget<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=159944">159944</a>: Asynchronous viewer should allow model to set selection after selected object is removed.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172026">172026</a>: [launching] alt+enter shortcut dies when resource adapter cannot be resolved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168733">168733</a>: Manifest and properties file could get some clean up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171700">171700</a>: [launching] changing LCD filtering with last items elected throws exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171790">171790</a>: Chkpii error in build N20070126-0010<br>
-
-<h2>Jan 23, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170766">170766</a>: NPE MultiLaunchGroupFilter.equalModes()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150970">150970</a>: Progress Monitor not handled correctly during launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166102">166102</a>: RetargetBreakpointAction should use the "resource->launch configuration" association to find the IToggleBreakpointsTarget adapter.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171056">171056</a>: Detail job should stop wait()'ing when canceled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171091">171091</a>: [detail pane] Removing default detail pane results in NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170673">170673</a>: [Console] Select all keyboard shortcut marked incorrectly in context menu<br>
-
-<h2>Jan 16, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170669">170669</a>: [Launching] Main Tab missing search options under main type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170485">170485</a>: [launching] no useful help in save and launch dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170502">170502</a>: [source lookup] [launching] string variables added to the bootpath via the launch dialog do not stay there<br>
-
-<h2>Jan 9, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169701">169701</a>: IllegalArgumentException in LaunchConfigurationViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169992">169992</a>: Non-externalized string in debug ui plugin.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169689">169689</a>: [launching] revert button does not revert config name text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168434">168434</a>: move debug commands to core plug-in<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168618">168618</a>: step actions enabled when multiple frames selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169549">169549</a>: no description for java tab group anymore<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165986">165986</a>: [Memory View] Migrate MemoryBlocksTreeViewPane to use new tree viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126883">126883</a>: [launching] Allow multi-selection of application types in Perspective Switching preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167667">167667</a>: [launching] No visual clue configurations are filtered from dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153938">153938</a>: [Memory View] Base address of memory block is not displayed on first rendering's tab label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167292">167292</a>: [Memory View] Icons and labels for Memory view layout menu are mismatched<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168768">168768</a>: [Memory View] NPE when shutting down workbench with table rendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167031">167031</a>: Switching perspectives based on launch delegates<br>
-
-<h2>Dec 19, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168525">168525</a>: Loading Debug Core plug-in causes ClassNotFoundException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168428">168428</a>: "Asynchronous viewer update" appears when stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170784">170784</a>: org.eclipse.debug.ui plugin.xml uses enablesFor="1+" incorrectly<br>
-
-<h2>3.3 M4 - Dec 15, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166659">166659</a>: [launching] Launcher selection dialog layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167119">167119</a>: [launching] tab icons not decorated consistently<br>
-
-<h2>Dec 11, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156441">156441</a>: Scalability enhancement to the flexible hierarchy's IAsynchronousContentAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75852">75852</a>: [variables] Support for custom details view widgets.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166408">166408</a>: VM Capabilities property page shows up unexpectedly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=160745">160745</a>: Dangerous use of getActiveShell in Debug<br>
-
-<h2>Dec 5, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166683">166683</a>: [plugins] DebugUIPlugin should be a save participant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166525">166525</a>: [launching] Should display error message in LCD when launcher choice required<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45061">45061</a>: [launching] LaunchHistory is serialized 9 times on preference change<br>
-
-<h2>Nov 28, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166065">166065</a>: Deadlock in DebugCommandAction/DebugCommandActionDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165829">165829</a>: [launching] the source lookup tab is the new apply button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165175">165175</a>: [source lookup] ContainerSourceContainer assumes resource is in local file system<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156516">156516</a>: Incorrect popup text in debug icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165855">165855</a>: Launch Shortcuts shows deprecated example.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165348">165348</a>: [source lookup] source lookup panel is not saving changes to source lookup path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164682">164682</a>: NPE SourceLookupPanel  add external archive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166125">166125</a>: [launching] run last no longer runs last<br>
-
-<h2>Nov 21, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165174">165174</a>: [viewers] selection is lost in launch view after stepping into sync block<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165046">165046</a>: [viewers] launch view loses selection with monitors showing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164953">164953</a>: Watch expression keeps reference to old IDebugTarget object after debug session terminates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164671">164671</a>: NPE updating children in view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164651">164651</a>: [viewers] launch view has duplicate entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164379">164379</a>: ClassCastException from StackFrameContentProvider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156761">156761</a>: [console] Allow possibility of changing console background color<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104369">104369</a>: [breakpoints] drag & drop of many breakpoints is slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164620">164620</a>: Tree in Debug view should not have border<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99709">99709</a>: [breakpoints] Breakpoints dropped to incorrect working set when moved using drag and drop<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158280">158280</a>: CCE in JDIObjectValue.getEnclosingObject<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163082">163082</a>: Add Memory Rendering Dialog should listen for Memory Rendering Bindings changed event<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=159359">159359</a>: expressions serialized each time they change state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163130">163130</a>: [breakpoints] select default breakpoint working set dialog throws NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164940">164940</a>: Disabled state of Run/Profile/Debug button is not handled properly sometimes<br>
-
-<h2>Nov 14, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162802">162802</a>: [launching] launch manager causes exception persisting preferred delegates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163128">163128</a>: org.eclipse.debug.ui plugin needs organizing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=160749">160749</a>: Can't set a breakpoint on the first line of an editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163684">163684</a>: [variables view] Max details pane text length dialog does nothing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162996">162996</a>: NPE in EnvironmentVariableResolver.resolveValue<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163988">163988</a>: org.eclipse.debug.ui.console.FileLink missing adaptation, protection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153461">153461</a>: DnD slow in breakpoints view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163684">163684</a>: [variables view] Max details pane text length dialog does nothing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163400">163400</a>: fileExtension is deprecated but doesn't offer alternatives in schema description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163961">163961</a>: Schema description for launchConfigurationTypes outdated<br>
-
-<h2>3.3 Milestone 3 - Nov 3, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=159200">159200</a>: Step action should not automatically disable after the action is invoked.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162802">162802</a>: [launching] launch manager causes exception persisting preferred delegates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162667">162667</a>: Javadoc warnings in N20061028-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162816">162816</a>: [commands] StepFilterCommand can lead to NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162320">162320</a>: Toggle step filters action does not initialize state properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=160932">160932</a>: API for debug context and debug commands<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162426">162426</a>: Javadoc warnings in N20061026-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162666">162666</a>: Chkpii error in nightly build 20061028-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162106">162106</a>: Missing org.eclipse.debug.core.launchOptions extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162547">162547</a>: ConcurrentModificationEx in DebugCommandService.postUpdate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=160130">160130</a>: Multi-line environment variables are truncated<br>
-
-<h2>Oct 24, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161896">161896</a>: Warnings in N20061022-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151848">151848</a>: [launching] Write protected launch configurations fails in Launch Configuration Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153789">153789</a>: [launching] Launch configuration dialog: switching filters should not remove multi-selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154400">154400</a>: [WorkingSets] Select Default Breakpoint Working Set dialog is confusing and can clear default setting accidentally<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157915">157915</a>: Delete launch configurations confirmation dialog too small<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158232">158232</a>: 'Terminate and relaunch' action is enabled for non-relaunchable configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161077">161077</a>: [schema] build N20061016-0010 schema errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161080">161080</a>: [schema] build > N20061016-0010 schema errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157090">157090</a>: should adopt ICU Collator and use new APIs on StructuredViewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155552">155552</a>: Debug View has no selection after long step<br>
-
-<h2>Oct 3, 2006</h2> 
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158760">158760</a>: Warning in latest nightly build and integration build<br>
-
-<h2>Sep 22, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158202">158202</a>: LaunchConfigurationWorkingCopy setAttributes(Map) does not set dirty?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140722">140722</a>: Surface Run/Debug Terminate key mapping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76341">76341</a>: [evaluation] Yellow popup box cannot be moved easily<br>
-
-<h2>Sep 12, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155791">155791</a>: Patch to fix jface.text.Assert deprecation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156134">156134</a>: debug.core should re-export dependencies whose API is exposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155690">155690</a>: Launch shortcuts: Allow 'forcePluginActivation' for expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148255">148255</a>: [tests] "should be access" test failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155055">155055</a>: [views] [actions] Terminate All changed since 3.1.2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156087">156087</a>: NPE in CreateLaunchConfigurationAction#performAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105574">105574</a>: TVT 3.1 - TCT 466 - Truncated string on Memory monitor<br>
-
-<h2>Aug 22, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153929">153929</a>: [Memory View] Shift+F10 does not bring up context menu in table rendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153964">153964</a>: Need public access to LaunchConfigurationManager.getLastLaunch()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153428">153428</a>: Share a launch configuration: NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154025">154025</a>: Unable to create view: Argument not valid---:---Variables view doesn't show variable values in debug mode<br>
-
-<h2>3.3 Milestone 1 - August 10, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138976">138976</a>: [console] IOException when closing the application<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152794">152794</a>: ConcurrentModificationException disposing consoles from Ant UI test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152583">152583</a>: Use proceed label and button id for compile error prompt<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152664">152664</a>: Separate workbench part from presentation context id<br>
-
-<h2>July 29, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151066">151066</a>: details sash same background color as tree<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149728">149728</a>: Detaching from process with many threads takes a long time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142198">142198</a>: [breakpoints] Initial state of breakpoint's 'Enable/Disable Breakpoint' ruler menu is always 'Enable Breakpoint'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138252">138252</a>: [console] Stream closed while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151433">151433</a>: Firing content event on a debug target does not causing the target to be refreshed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148900">148900</a>: IWatchExpressionDelegate needs to be context sensitive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142602">142602</a>: [breakpoints] Default Breakpoint Working Set's setting lost when working set name is changed<br>
-
-<h2>July 18, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149205">151006</a>: Expression View menu inconsistent when referring to Detail(s) Pane/Area<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149205">149205</a>: AssignValueAction ignores target messages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135170">135170</a>: Terminate All menu option does not do anything<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150193">150193</a>: second frame selected instead of top frame after step return<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148995">148995</a>: Deadlock while stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148897">148897</a>: [Memory View] memory renderings leak menu listener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148923">148923</a>: [Memory View] selection is incorrect after stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140102">140102</a>: [breakpoints] Focus cannot be set to "Type", "Line Number" and "Member" fields in the properties dialog of the breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150569">150569</a>: [help] Add exception dialog show workbench help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149638">149638</a>: [breakpoints] 'Don't ask again' option for 'Remove All Breakpoints'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149176">149176</a>: [Working Sets] UI is blocked when clearing all items in a breakpoint working set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148863">148863</a>: [Memory View] Memory View should clean up command handler for NextMemoryBlock action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148865">148865</a>: [Memory View]Sync service is holding onto rendering after a memory block is removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149891">149891</a>: SourceLookupFacility should use IEditorMatchingStrategy<br>
-
-<h2>July 11, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149069">149069</a>: [preferences] Move USE_STEP_FILTERING pref constant to public API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148776">148776</a>: !MESSAGE NLS unused messages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149076">149076</a>: [preferences] Use step filtering pref is not persisted over workbench restart<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148526">148526</a>: Editing a string variable discards last entered character<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149021">149021</a>: [tests] testInstructionPointerLeaks failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139089">139089</a>: [breakpoints] NPE in JavaBreakpoint.fireRemoved () shutting down eclipse with Java Debug session running<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144258">144258</a>: The image registry is created twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144560">144560</a>: [console] NPE in ProcessConsole$InputReadJob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145545">145545</a>: [console] Console can only be associated with IDebugElement instances<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148940">148940</a>: [Preferences] Step filter settings broken post-RC7<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140561">140561</a>: debug view scrolls to top, loses thread focus<br>
-
-<h2>June 27, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142972">142972</a>: [launching] Add "Run" to context menu of shared launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148006">148006</a>: [console] deadlock in ConsoleDocument during ant execution in autobuild<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148646">148646</a>: [console] current console combo uses CHECK instead of RADIO style buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138719">138719</a>: [source lookup] memory  leak in DecorationManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132616">132616</a>: [console] Console corrupts UTF-8<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38387">38387</a>: NLS'ing of internal error messages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138473">138473</a>: [breakpoints] BreakpointManager sometimes fails to send a breakpoint-changed notification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142476">142476</a>: TVT3.2:TCT535: Text boxes overlap with borders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89594">89594</a>: [console] typing in the JSTConsole is screwy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137694">137694</a>: [console] scrollbar in empty console<br>
-
-<h2>June 20, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67370">67370</a>: [console] F1 help missing - Console view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140487">140487</a>: [launching] The Debug/Run Configurations dialog uses wrong color<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140823">140823</a>: [launching] Code clean up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141782">141782</a>: [help] Debug dialogs not offering help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141785">141785</a>: [help] No context help for Debug Dialogs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145634">145634</a>: [view management] Context-Based Debug View Activation only uses last contributed binding per view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147335">147335</a>: [help] Source Tab has no context help topic<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147502">147502</a>: [view management] most relevant view should be brought to top<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42876">42876</a>: [help] F1 help in the Launch Configuration Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145766">145766</a>: [launching] Launch configuration change dialog appears twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147464">147464</a>: [view management] debug view does not activate in non-debug perspective<br>
-
-<h2>June 13, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132554">132554</a>: keybinding doesn't enable 'Use Step Filters/Step Debug' action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144900">144900</a>: TVT3.2:TCT824: FR : Base - Missing apostrophes in Perspective preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120606">120606</a>: [variables] Static variables disappeared after clicking a variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136085">136085</a>: [variables] view doesn't remember column positions or even which column<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140487">140487</a>: [launching] The Debug/Run Configurations dialog uses wrong color<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141769">141769</a>: [preferences] Perspectives tab is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143569">143569</a>: Debug actions should check status after an action is completed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143805">143805</a>: [viewers] array does not grow when parent not visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144221">144221</a>: [Memory View] Table rendering fails to show changes after resume<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144258">144258</a>: The image registry is created twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144400">144400</a>: [launching] LaunchManager keeps references on last resource delta<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144560">144560</a>: [console] NPE in ProcessConsole$InputReadJob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=144900">144900</a>: TVT3.2:TCT824: FR : Base - Missing apostrophes in Perspective preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145545">145545</a>: [console] Console can only be associated with IDebugElement instances<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145553">145553</a>: [variables] Cannot modify String variable with empty string value with Change Value dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134304">134304</a>: Fix broken NLS strings<br>
-
-<p> </p></body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_4_buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r3_4_buildnotes_platform-debug.html
deleted file mode 100644
index 623b934..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_4_buildnotes_platform-debug.html
+++ /dev/null
@@ -1,395 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-<h1> Eclipse 3.4 Debug Platform Build Notes </h1>
-
-<h2>Summary of API changes in 3.4</h2>
-
-<h3>Console Encoding</h3>
-<ul>
-  <li>A new method <code>ILaunchManager#getEncoding(ILaunchConfiguration)</code>
-    was added to allow consumers of the <code>DebugPlugin#ATTR_CONSOLE_ENCODING</code>
-    preference to get the encoding to use when launching the configuration specified
-    as the parameter to getEncoding(..). The javadoc for <code>DebugPlugin#ATTR_CONSOLE_ENCODING</code>
-    has been updated to reflect that a launch configuration now inherits its default
-    encoding from its associated resource(s) when unspecified.</li>
-</ul>
-<h3>Launching Enhancements</h3>
-<ul>
-  <li>added <code>ILaunchShortcut2</code>. The new interface adds extensions to the standard launch shortcut (<code>ILaunchShortcut</code>) to specify how selections and editors should be launched.</li>
-  <li>added "<code>public boolean hasAttribute(String attributeName)</code>"
-    to <code>ILaunchConfiguration</code>. The method allows clients to determine
-    if an attribute is present on a launch configuration.</li>
-  <li>added "<code>public Object removeAttribute(String attributeName)</code>"
-    to <code>ILaunchConfigurationWorkingCopy</code>. The method allows clients
-    to remove attributes from configurations.</li>
-</ul>
-<h3>Expression Enhancements</h3>
-<ul>
-  <li>added <code>IWatchExpressionFactoryAdapter2</code>. The new interface allows the
-  	'Create Watch Expression' action to operate on arbitrary objects, instead of just
-  	<code>IVariable</code>s.</li>
-</ul>
-<h3>Getting Adapters</h3>
-<ul>
-  <li>added a new method <code>DebugPlugin#getAdapter(Object element, Class type)</code> that
-    gets an adapter from an object in the correct manner.  Duplicate methods in the platform
-    were changed to use this convenience method.</li>
-</ul> 
-
-<h3>Debug Model Presentation</h3>
-<ul>
-  <li>A new optional extension interface (<code>IDebugModelPresentationExtension</code>) allows 	 debug model presentations to control whether they are called in the UI thread. </li>
-</ul>
-<h3>Modules View</h3>
-<ul>
-  <li>A Modules View has been added to the platform, along with appropriate constants in <code>IDebugUIConstants</code>.
-    <ul>
-      <li><code>ID_MODULE_VIEW</code> - view identifier </li>
-      <li><code>EMPTY_MODULES_GROUP </code>- menu group identifier </li>
-      <li><code>MODULES_GROUP</code> - menu group identifier </li>
-    </ul>
-  </li>
-</ul>
-
-<h2>June 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236922">Bug 236922</a>: external tool builder does not run<br>
-
-<h2>June 5, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235824">Bug 235824</a>: [doc] Help topics missing<br>
-
-<h2>June 2, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234642">Bug 234642</a>: [doc] Javadoc of ILaunchesListener should link to ILaunchListener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234536">Bug 234536</a>: JUnit tests fail from time to time because DebugPlugin.getLaunchManager() is not synchronized<br>
-
-<h2>May 28, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208062">Bug 208062</a>: First context menu has mysterious Run As/Debug As/Profile As menu entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233730">Bug 233730</a>: Run control actions not refreshed after event with both CONTENT and STATE flags for parent context issued<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234471">Bug 234471</a>: Infinite loop running evaluation tests<br>
-
-<h2>May 28, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233703">Bug 233703</a>: Debug plugin and ProcessConsoleManager misses launches<br>
-
-<h2>May 21, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232699">Bug 232699</a>: TVT34:TCT330: TVT FR - Space missing before colon sign in French<br>
-
-<h2>May 20, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232832">Bug 232832</a>: TVT34:TCT275: KO: 'Import Launch Configurations' in English<br>
-
-<h2>May 14, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225688">Bug 225688</a>: DBCS3.4: In expression view, DBCS characters are changed to "?" after restarting eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228445">Bug 228445</a>: 'Create Watch Expression' shows up in every context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224019">Bug 224019</a>: Command handler conflict in registers view<br>
-
-<h2>May 13, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229356">Bug 229356</a>: Run/Debug settings property page sizes to screen width for long name config<br>
-
-<h2>May 9, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217127">Bug 217127</a>: Regression in performance test PerfContextualLaunchMenu#testContextualLaunchMenu()<br>
-
-<h2>May 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230969">Bug 230969</a>: NPE disposing a model proxy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223851">Bug 223851</a>: Contextual launch not choosing most recent configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209243">Bug 209243</a>: Console window with black background<br>
-
-<h2>May 7, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229349">Bug 229349</a>: Poor wording in Import breakpoint dialog<br>
-
-<h2>May 6, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229344">Bug 229344</a>: AssertionFailedException during "Enable Breakpoint" with access/modification turned off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229362">Bug 229362</a>: filter count on LCD considers PRIVATE configs in total<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229363">Bug 229363</a>: Run/Debug settings page should not be visible for .jpage files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220613">Bug 220613</a>: Platform UI now provides a collapse all command<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229344">Bug 229344</a>: AssertionFailedException during "Enable Breakpoint" with access/modification turned off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227477">Bug 227477</a>: IModelProxy.init() and installed() are called inside a synchronized() block in ModelContentProvider<br>
-
-<h2>May 5, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222802">Bug 222802</a>: NPE if DebugUITools.launch(...) is called on background thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225567">Bug 225567</a>: [Memory View] Tooltip  from rendering stays forever<br>
-
-<h2>3.4 M7 - May 2, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229033">Bug 229033</a>: Adding/Editing installed JRE should allow other archive names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228267">Bug 228267</a>: Inspect popup dialog disposes presentation context from variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228264">Bug 228264</a>: NPE when copying stack trace.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220611">Bug 220611</a>: Add PageSwitcher command to the Console View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228716">Bug 228716</a>: breakpoints view context activated for any part<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220442">Bug 220442</a>: adopt identifier attribute for schemas<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217104">Bug 217104</a>: NPE when returning null from force return<br>
-
-<h2>April 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220611">Bug 220611</a>: Add PageSwitcher command to the Console View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226203">Bug 226203</a>: Invoking Find action in Registers views with large group "hangs" IDE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203147">Bug 203147</a>: NPE while 'copy variables' in Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198568">Bug 198568</a>: Copy Stack doesn't always cancel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191625">Bug 191625</a>: Undefined context while filtering dialog/window contexts<br>
-
-<h2>April 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215432">Bug 215432</a>: [Memory View] Memory View: real estate & new/remove rendering workflow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222267">Bug 222267</a>: Expressions aren't update correclty (ExpressionEventHandler doesn't preserve event source for CDT change events)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223992">Bug 223992</a>: NPE from  "Model Proxy installed notification job"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225094">Bug 225094</a>: Get rid of outdated context Id "org.eclipse.ui.globalScope"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189786">Bug 189786</a>: Invalid thread access stopping Debug UI plugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194831">Link</a>: enabling breakpoints during debug has poor performance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225336">Bug 225336</a>: [Memory View] MemoryView mistreats small bounded memory blocks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225366">Bug 225366</a>: [Memory View] Rendering view pane is blank when view is re-opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225385">Bug 225385</a>: [Memory View] Need ability to disable add/remove rendering actions in RenderingViewPane<br>
-
-<h2>3.4 M6 - March 28, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188704">Bug 188704</a>: Top index not maintained properly in variables / registers view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215489">Bug 215489</a>: Stackframe shows as running when suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127770">Bug 127770</a>: [variables] Expansion lost in variables view when holding down step key<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221905">Bug 221905</a>: clean up javadoc tags<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211158">Bug 211158</a>: Add a modules view to the set of standard debugger views.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223791">Bug 223791</a>: Compiler warning in org.eclipse.debug.ui<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224128">Bug 224128</a>: LCD title not correct creating a new configuration<br>
-
-<h2>March 11, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219643">Bug 219643</a>: Memory: typo EXTENSION_POINT_MEMORY_RENDERIGNS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219794">Bug 219794</a>: NPE in console MatchJob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222228">Bug 222228</a>: Should delegate to platform adapater manager for adapters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220808">Link</a>: LazyStart from Debug plugins<br>
-
-<h2>February 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217769">Bug 217769</a>: [breakpoints] ToggleBreakpointAction always creates TextSelection with 0 lengh<br>
-
-<h2>February 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211920">Bug 211920</a>: [DND] Add expression by drag and drop does not honor "Create Watch Expression" enablement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217951">Bug 217951</a>: Missing detail formatter for registers group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217900">Bug 217900</a>: [breakpoints] Breakpoint export dialog does not size well on linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218080">Bug 218080</a>: [breakpoints] No warning when using an inavlid path in breakpoint export dialog<br>
-
-<h2>3.4 M5 - February 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218086">Bug 218086</a>: Filtering statics also filters constants<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218240">Bug 218240</a>: [expressions] Missing check for delegate and factory when creating watch expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213069">Bug 213069</a>: Extend PresentationContext to save and restore properties.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216509">Bug 216509</a>: Memory View: typo, s/isMeomryBlockRemoved/isMemoryBlockRemoved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208062">Bug 208062</a>: First context menu has mysterious Run As/Debug As/Profile As menu entries<br>
-
-<h2>January 29, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217279">Bug 217279</a>: [launch] Allow ILaunchShortcut2 to provide resource mapping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216777">Bug 216777</a>: [detail panes] widget disposed exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209883">Bug 209883</a>: Expression view actions use getAdapter() to work with non-standard debug models.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199915">Bug 199915</a>: API Request: DelegatingModelPresentation.isInitialized(...)<br>
-
-<h2>January 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215242">Bug 215242</a>: Debuggers cannot set the selected frame for Suspend events<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215723">Bug 215723</a>: Attempt to reveal the call stack when stopped<br>
-
-<h2>January 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214094">Bug 214094</a>: i can't edit the run configuration because of an AssertionFailedException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214359">Bug 214359</a>: [launching] clean up launch config filtering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213719">Bug 213719</a>: NPE when closing the Variables view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213609">Bug 213609</a>: Need a clarification on usage of IElement*Provider interfaces with update arrays.<br>
-
-<h2>December 18, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212638">Bug 212638</a>: Always save editors before launch preference should take effect immediately<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213244">Bug 213244</a>: VariableAdapterService should also call IAdaptable.getAdapter() for adaptables that implement this method directly.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213212">Bug 213212</a>: ViewerAdapterService should use IAdapterManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212314">Bug 212314</a>: DebugModelPropertyTester does not use the IDebugModelProvider adapter.<br>
-
-<h2>December 14, 3.4M4</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208039">Bug 208039</a>: Tweaks to context launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208797">Bug 208797</a>: SelectedResourceManager.getCurrentSelection0() should use IAdapterManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212420">Bug 212420</a>: Remove workaround for bug 99234<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212145">Bug 212145</a>: [launching] Selection cannot be launched and there are no recent launches<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210023">Bug 210023</a>: Another NPE in DefaultWatchExpressionModelProxy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202678">Bug 202678</a>: IViewerUpdate should have a method to return viewer input.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208034">Bug 208034</a>: [launching] Unexpected error when opening launch config dialog from resource properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208127">Bug 208127</a>: breakpoint import does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211928">Bug 211928</a>: ExpressionDropAdapter makes implementation to IWatchExpressionFactoryAdapterExtension mandatory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212442">Bug 212442</a>: Failing import breakpoints tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212581">Bug 212581</a>: [launching] widget disposed exception launching<br>
-
-<h2>December 4, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198428">Bug 198428</a>: Deadlock deleting launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211769">Bug 211769</a>: NPE in LaunchManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=211076">Bug 211076</a>: Debug annotations could allow all possible text styles<br>
-
-<h2>November 27, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210471">Bug 210471</a>: Cannot change the selected detail pane viewer.<br>
-
-<h2>November 20, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209920">Bug 209920</a>: While loading class SelectedResourceManager, thread timed out waiting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209668">Bug 209668</a>: The field org.eclipse.debug.core.DebugPlugin#INTERNAL_ERROR has changed value between HEAD and 3.3.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184233">Bug 184233</a>: Expression view does not support alternative content providers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=146825">Bug 146825</a>: [console] NPE in process console participant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205335">Bug 205335</a>: ModelContentProvider does not cancel stale updates when switching viewer input.<br>
-
-<h2>November 13, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208431">Bug 208431</a>: [launching] clicking checkbox twice disables OK button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208109">Bug 208109</a>: touching Environment tab makes launch config dirty<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208707">Bug 208707</a>: (Console) Remove binding for show console view with CTRL+ALT+Q<br>
-
-<h2>3.4 M3 - November 2, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207600">Bug 207600</a>: export configurations page does not update as text typed into export directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205980">Bug 205980</a>: new artwork for export/import launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208084">Bug 208084</a>: Error writing to console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207293">Bug 207293</a>: Wrong context help for the builder properties dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85370">Bug 85370</a>: [string variables] string_prompt for passwords<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205305">Bug 205305</a>: Add perspective extensions for newly moved log view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206407">Bug 206407</a>: AbstractMemoryRendering connect()s the wrong "this"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207157">Bug 207157</a>: Breakpoint Export action disposes shared Label Provider.<br>
-
-<h2>October 23, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198896">Bug 198896</a>: Actions "Open Debug Dialog..." and "Open Run Dialog..." labeled incorrectly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207079">Bug 207079</a>: NPE running test suites in  I20071016-1215<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206822">Bug 206822</a>: Debug views should indicate busy status while there are viewer updates in progress.<br>
-
-<h2>October 16, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12898">Bug 12898</a>: [launching] Import/Export of launch configs<br>
-
-<h2>October 9, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205207">Bug 205207</a>: [launching] '&' shows in run tooltip if debug plugins not loaded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204378">Bug 204378</a>: An internal error occurred during: "Compute launch button tooltip".<br>
-
-<h2>October 2, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90737">Bug 90737</a>: "Terminate All" action should be renamed to "Terminate/Disconnect All"<br>
-
-<h2>September 24, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203907">Bug 203907</a>: Run --> External Tools history menus not updated after organize favorites<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203615">Bug 203615</a>: TextConsoleViewer leaks Cursors<br>
-
-<h2>3.4 M2 - September 21, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202456">Bug 202456</a>: Variable Selection Dialog needs better help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202798">Bug 202798</a>: Breakpoint working set description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141009">Bug 141009</a>: [expressions] Add 'Watch' to the display view context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199125">Bug 199125</a>: Improve UI for breakpoint working sets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203253">Bug 203253</a>: Deleting config bring Run and Debug menus out of sync<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202450">Bug 202450</a>: [Actions] Empty cascading menus show up as enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173156">Bug 173156</a>: [properties] process property page cuts off text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89178">Bug 89178</a>: [launching] Open Properties dialog by clicking "Run As..." with Ctrl key<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188339">Bug 188339</a>: [scrapbook] Expressions from scrapbook does not convert to watch expression correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188385">Bug 188385</a>: context launch does not work with method in outline selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203870">Bug 203870</a>: Launch tooltip not in synch with selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202564">Bug 202564</a>: MessageConsole.clearConsole() flushes output queued up after the clearConsole call<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203850">Bug 203850</a>: Expression order not always persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204033">Bug 204033</a>: Local configurations auto-deleted when project closed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204189">Bug 204189</a>: Always prompted to save launch configurations<br>
-
-
-<h2>September 11, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202059">Bug 202059</a>: Run dialogue: switching between read-only or removed launch configurations.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39875">Bug 39875</a>: [launching] Managing invalid launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198785">Bug 198785</a>: Remove launch from Run/Debug drop down<br>
-
-<h2>September 4, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176508">Bug 176508</a>: [console] IOConsole Updater error with long output lines<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199294">Bug 199294</a>: LaunchManager provokes NPEs when *.launch files are on remote EFS locations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137769">Bug 137769</a>: [launching] Launch history is not updated/Run Last Launched fails due to working set filter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198896">Bug 198896</a>: Actions "Open Debug Dialog..." and "Open Run Dialog..." labeled incorrectly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200185">Bug 200185</a>: Problem highlighting first position of source in debug mode.<br>
-
-<h2>August 28, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198545">Bug 198545</a>: Debug Core should use EMPTY_STRING constant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200831">Bug 200831</a>: Dragging text to bad location in expressions view does not update cursor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201239">Bug 201239</a>: Javadoc of ILaunchesListener should mention ILaunchesListener2<br>
-
-<h2>August 21, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200168">Bug 200168</a>: Keybindings on the Mac conflict with reserved OS bindings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200105">Bug 200105</a>: auto expand does not work in the async tree viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199500">Bug 199500</a>: Usability Problem in 'Save and Launch' Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176627">Bug 176627</a>: [Registers view] Switching stack frames: Unnecessary scrolling to top and group closing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168574">Bug 168574</a>: Support for IElementMementoProvider on each element in a viewer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200595">Bug 200595</a>: reduce duplication of #getAdapter code for viewers<br>
-
-<h2>3.4 M1 - August 10, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190873">190873</a>: [launching] Environment tab grows wider on each config selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198437">198437</a>: EMPTY_STRING constant not used<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177554">177554</a>: [messages] remove internal error messages from translations<br>
-
-<h2>July 31, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198248">198248</a>: NPE at org.eclipse.debug.ui.CommonTab.getDefaultSharedConfigLocation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197998">197998</a>: Workbench refuses to show Run or Debug dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197834">197834</a>: Expression Evaluation Failure with Generics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197145">197145</a>: [launching] Changing AutoSelect in LaunchConfigurationViewer from a LaunchConfigurationTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197645">197645</a>: [launching] selection of encoding does twice as much work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197532">197532</a>: NPE in DefaultWatchExpressionModelProxy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185196">185196</a>: Debug selection dialogs should subclass AbstractDebugSelectionDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194598">194598</a>: 44% of time closing projects spent in LaunchManager#resourceChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194303">194303</a>: [launching] CME during "Compute launch button tooltip"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197000">197000</a>: [launching] Auto Launch Configuration deletion should be resource specific<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174020">174020</a>: Background colour makes variable value unreadable in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197698">197698</a>: [launching] Deleting launch config from LCD does not remove config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191379">191379</a>: Console encoding does not match workspace encoding<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191382">191382</a>: JVM file encoding does not match console encoding<br>
-
-<h2>July 17, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191515">191515</a>: Some run menu actions are missing help context ids<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193175">193175</a>: inconsistent action names for "Open Run/Debug/Profile Dialog..."<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177554">177554</a>: [messages] remove internal error messages from translations<br>
-
-<h2>July 10, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175584">175584</a>: [expressions] Allow re-ordering of expressions in the Expressions View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195232">195232</a>: Outdated Run Toolbar tool tip<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191723">191723</a>: A lot more classes being loaded than in 3.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195461">195461</a>: calling dispose on LaunchConfigurationTabGroupWrapper can get a NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48197">48197</a>: [Dialogs] Add Folders Selection Dialog should not list closed projects.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191071">191071</a>: Delete Unused Debug Help Context ID Constants<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=194458">194458</a>: CCE when dragging to Breakpoints View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193595">193595</a>: ProcessConsole is internal API but states that "Clients may instantiate this class." in the javadocs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47931">47931</a>: Copies of serializeDocument(Document)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66983">66983</a>: [evaluation] EmptyStackException from invalid condition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=192212">192212</a>: Screenshots out of date in isv doc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193179">193179</a>: Should there be an 'add' button in the expression view toolbar?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191974">191974</a>: Concurrent modification exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191636">191636</a>: [breakpoints] import breakpoints causes exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189328">189328</a>: [Accessibility] Run dialog (Common tab) - controls do not provide labels<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191388">191388</a>: TVT33:TCT635: pl: truncations in Perspective preferences panel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193432">193432</a>: Clicking link in Ant console should ensure resulting editor is visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184057">184057</a>: Add drag and drop to expression view.<br>
-
-<p> </p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/r3_5_buildnotes_platform-debug.html b/eclipse/plugins/org.eclipse.debug.core/r3_5_buildnotes_platform-debug.html
deleted file mode 100644
index 6eb664e..0000000
--- a/eclipse/plugins/org.eclipse.debug.core/r3_5_buildnotes_platform-debug.html
+++ /dev/null
@@ -1,354 +0,0 @@
-	<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Platform Debug Release Notes</title>
-</head>
-<body>
-<h1>Eclipse 3.5 Debug Platform Build Notes</h1>
-
-<h2>Summary of API changes in 3.5</h2>
-
-<h3>Breakpoint Import Participants</h3>
-The breakpoints framework has been further enhanced to support breakpoint import
-participants, which allows contributors to participate in the importing process
-for any given breakpoint type. Participants can contribute in the decision of whether
-a breakpoint should be imported and in the verification process once a breakpoint has
-been imported.
-<p>The API to support this feature includes:</p>
-<ul>
-<li><b><code>org.eclipse.debug.breakpointImportParticipants</code> extension point</b>
-	- Allows a client to register their participant for a given breakpoint type.
-</li>
-<li><b><code>IBreakpointImportParticipant</code> interface</b>
-	- Required implementing interface for all participants.
-</li>
-<li><b><code>org.eclipse.debug.core.DebugPlugin#EXTENSION_POINT_BREAKPOINT_IMPORT_PARTICIPANTS</code> constant</b>
-	- Constant providing the id of the new extension point to clients.
-</li>
-<li><b><code>org.eclipse.debug.core.IBreakpointManager#getImportParticipants(id)</code></b>
-	- convenience method for getting all registered breakpoint participants for the given breakpoint
-	type id. If there are no matching participants a default participant will be returned.
-</li>
-</ul>
-
-<h3>Breakpoints</h3>
-The breakpoints framework has been enhanced to support different breakpoint
-types to be created within the same part.  This effectively allows different
-debuggers to share a common editor and views where breakpoints are created.
-Debuggers can also use this mechanism to let users quickly change what
-breakpoint type is created by default (e.g.: software, hardware,
-thread-filtered, etc.).
-<p>The API to support this feature includes: </p>
-<ul>
-  <li><b><code>org.eclipse.debug.ui.toggleBreakpointsTargetFactories</code>
-      extension point</b> - Allows a debugger to register a factory of
-      <code>IToggleBreakpointsTarget</code> adapters, which are used by toggle
-      breakpoint actions to create breakpoints.
-  </li>
-  <li><b><code>IToggleBreakpointsTargetFactory</code> interface</b> - Factory API
-  	  for IToggleBreakpointTarget adapters to be implemented by debuggers.
-  </li>
-  <li><b><code>RulerBreakpointTypesActionDelegate</code> action</b> - Editor gutter
-      action to select the active breakpoint types.
-  </li>
-</ul>
-
-<h3>ILaunchConfiguration.getLocation() can return null</h3>
-<p><strong>What is affected:</strong> Clients that call ILaunchConfiguration.getLocation()</p>
-<p><strong>Description:</strong> In release 3.4 and earlier, ILaunchConfiguration.getLocation() was not specified
-to return <code>null</code>. Since 3.5, launch configuration infrastructure has been enhanced to support storage
-on external file systems (EFS). The #getLocation() method returns a location in the local file system - however, since
-an external file system may not map to a local location, <code>null</code> can now be returned. </p>
-<p><strong>Action required:</strong> Clients that call ILaunchConfiguration.getLocation() should update
-code to handle a <code>null</code> result. The #getLocation() method has been deprecated since the return
-value is no longer reliable.</p>
-
-<h3>Access to current source lookup participant</h3>
-<p><strong>What is affected:</strong> Method addition: AbstractSourceLookupDirector#getCurrentParticipant() </p>
-<p><strong>Description:</strong> Since 3.5, the AbstractSourceLookupDirector provides access to the ISourceLookupParticipant currently looking up source via the new method #getCurrentParticipant(). The implementation of AbstractSourceContainer has been enhanced to ask the current participant if duplicate source files should be found when looking up source. To maintain backwards compatibility, the participant delegates whether duplicates should be found to the source lookup director. A custom implementation of a source lookup participant could override the default behavior to control whether duplicate source files should be found. </p>
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>debugContext evaluation variable</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Evaluation service variable addition: <code>debugContext</code> </li>
-  <li>Method addition: <code>DebugUITools.getDebugContextForEvent(EvalutationEvent)</code> </li>
-  <li>Method addition: <code>DebugUITools.getDebugContextForEventChecked(EvalutationEvent)</code> </li>
-  <li>Constant addition: <code>IDebugUIConstants.DEBUG_CONTEXT_SOURCE_NAME</code></li>
-</ul>
-</p>
-<p><strong>Description:</strong>The command framework allows menu and toolbar items to be controlled using powerful standard expressions.  However many debugger related commands require access to the current debug context in order to properly evaluate their enabled or visible state.  This addition allows command handlers and their expressions to use the <code>debugContext</code> variable to access the current debug context applicable to the given handler.</p>
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>Detail pane selection provider</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Interface addition: <code>IDetailPane2</code> </li>
-  <li>Interface addition: <code>IDetailPaneContainer2</code> </li>
-</ul>
-</p>
-<p><strong>Description:</strong>The original detail pane design does not allow a detail pane implementation to properly supply a selection provider for a view (see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=254442">bug 254442</a>).  These addition allows a detail pane to overcome this limitation.</p>
-<p><strong>Action required:</strong>This is a backwards compatible change, so no action is required.  However, detail pane implementations which need to drive the active view selection, should implement the new <code>IDetailPane2</code> interface.</p>
-<p>   </p>
-
-<h3>Variables views' preference constants</h3>
-<p><strong>What is affected:</strong> Clients that use the <em>variable</em> font, <em>detail pane</em> font, and <em>changed value background</em> preferences.  The new constants are:
-<ul>
-  <li>Constant addition: <code>IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND</code></li>
-  <li>Constant addition: <code>IDebugUIConstants.PREF_VARIABLE_TEXT_FONT</code></li>
-  <li>Constant addition: <code>IDebugUIConstants.PREF_DETAIL_PANE_FONT</code></li>
-</ul>
-</p>
-<p><strong>Description:</strong> Some clients needed to access preference settings for display attributes in the variables
-view which were defined in an internal interface.  This change moves these constants to the <code>IDebugUIConstants</code> interface.
-<p><strong>Action required:</strong> Clients which may have copied these constants or (gasp!) have referenced the internal interface,
-should instead reference the new API constants.</p>
-
-<h2>May 26, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=277869">Bug 277869</a>: NPE copying empty list of variables<br>
-
-<h2>May 25, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76481">Bug 76481</a>: [doc] In the doc for org.eclipse.debug.ui.AbstractLaunchConfigurationTab, setDirty is badly described<br>
-
-<h2>May 20, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276908">Bug 276908</a>: Mnemonic collision on debug preference page<br>
-
-<h2>May 19, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276377">Bug 276377</a>: [doc] Minor minor minor Javadoc bug: IRuntimeClasspathProvider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276945">Bug 276948</a>: [examples] org,eclipse.debug.examples.ui should use J2SE-1.4 compiler options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269182">Bug 269182</a>: [breakpoints] Breakpoint does not have an associated marker error in the .log file<br>
-
-<h2>May 13, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=241394">Bug 241394</a>: [Console] Can not get input text properly in eclipse console panel<br>
-
-<h2>May 12, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275700">Bug 275700</a>: Internal errors when expanding thread groups.<br>
-
-<h2>May 11, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275614">Bug 275614</a>: REGRESSION: threads no longer expanded if Debug view not visible<br>
-
-<h2>May 8, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273929">Bug 273929</a>: NPE in ToggleBreakpointObjectActionDelegate<br>
-
-<h2>May 5, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273498">Bug 273498</a>: Launch history generation could be more robust<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274358">Bug 274358</a>: Show Thread Group option not propery updated in debug view<br>
-
-<h2>April 27, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273082">Bug 273082</a>: BreakpointsView-Group By sub-menu contains extra mnemonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220657">Bug 220657</a>: Teminate All in ConsoleView.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272489">Bug 272489</a>: Debug view: "View Mode" menu misses mnemonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272367">Bug 272367</a>: "Show Type Names" attribute is not available in the IPresentationContext properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273178">Bug 273178</a>: Repeated expressions in expressions window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273617">Bug 273617</a>: property tester expression doesn't check selected element's type<br>
-
-<h2>April 20, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268978">Bug 268978</a>: Build before launch should use one top level workspace runnable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233040">Bug 233040</a>: ConsoleTerminateAction performed in UI thread, occasionally lags<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212798">Bug 212798</a>: Thread collapsed unexpectedly as threads are terminated<br>
-
-<h2>April 7, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=271055">Bug 271055</a>: Risk of deleting a launch configuration multiple times<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=271113">Bug 271113</a>: !MESSAGE NLS unused message: BreakpointTypesContribution_noBreakpointsActive_menuItem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269961">Bug 269961</a>: [launching] Confusing "Discard Changes?" dialog when trying to filter with pending changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233233">Bug 233233</a>: [launching] Default Launchers -- description does not update when click on the checkbox<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267957">Bug 267957</a>: [launching] Prompted about text search when close is pressed<br>
-
-<h2>March 24, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236435">Bug 236435</a>: add 'do not ask again' option for 'remove all expressions'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270467">Bug 270467</a>: Enable to navigate to breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199288">Bug 199288</a>: Expressions view should support paste<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269287">Bug 269287</a>: Content assist handler not disabled when the conditional breakpoint properties page is hidden<br>
-
-<h2>March 17, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262850">Bug 262850</a>: [launch modes] When a launch delegate is not selected, the "Multiple launchers available" label should have an error decorator.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268876">Bug 268876</a>: [launching] OK button disabled in Select Preferred Launcher dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102766">Bug 102766</a>: [launching] Shared launch configurations not displayed in favorites when importing/opening containing project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268130">Bug 268130</a>: Labels on 'JRE' launch tab does not use sentence style<br>
-
-<h2>March 10, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258891">Bug 258891</a>: [Memory View] AbstractAsyncTableRendering.removeListeners susceptible to an NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262705">Bug 262705</a>: [Memory View] CreateRendering "New Rendering..." tab is missing Enter key binding<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262845">Bug 262845</a>: [breadcrumb] breadcrumb causes performance degradation in stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266162">Bug 266162</a>: Duplicates in prompt to save dirty resources before launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262811">Bug 262811</a>: [breadcrumb] Provide hooks to setup debugging in other perspectives<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266162">Bug 266162</a>: Duplicates in prompt to save dirty resources before launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262849">Bug 262849</a>: [launching] Select Preferred Launcher dialog is somewhat confusing.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267438">Bug 267438</a>: IInernalDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND should be public.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262845">Bug 262845</a>: [breadcrumb] breadcrumb causes performance degradation in stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265376">Bug 265376</a>: [breadcrumb] Breadcrumb doesn't update layout after the view is resized.<br>
-
-<h2>February 10, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267251">Bug 267251</a>: [launching] Add a RefreshTab.getID() implementation.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262261">Bug 262261</a>: [breadcrumb] Add actions to Debug view to switch between tree view, breadcrumb, or automatic modes.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262262">Bug 262262</a>: [breadcrumb] Add actions to quickly switch between contexts in Debug view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262870">Bug 262870</a>: [breadcrumb] When debug view is activated no item has focus.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262837">Bug 262837</a>: No more handle exception when working in Debug Perspective<br>
-
-
-<h2>February 10, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262844">Bug 262844</a>: [launching] Launch tab group with no tabs leads to NPEs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262848">Bug 262848</a>: [launching] If a tab is contributed and it does not have a placement specified, it should go in front.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=263307">Bug 263307</a>: [launching] Preferred launch delegates preference should be more transparent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255722">Bug 255722</a>: IWorkspaceRoot.findContainersForLocation(IPath) is deprecated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208484">Bug 208484</a>: variables should be available for headless operation when possible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=263881">Bug 263881</a>: SourceLookupFacility selects editor region when stack frame provides CharStart  value > -1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262814">Bug 262814</a>: Class Cast exception when Expression view has expressions defined by non-Java debug session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221234">Bug 221234</a>: [console] Programs with lots of output cause major eclipse unresponsiveness with large console buffer<br>
-
-<h2>3.5 M5 - January 30, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262369">Bug 262369</a>: NPE in viewer test<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262819">Bug 262819</a>: 'process model delta' job appears in progress view/status bar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260802">Bug 260802</a>: Retargetable debug actions do not enable when an adapter is first loaded.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247990">Bug 247990</a>: [breakpoints] Breakpoint working set not updated properly after import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255644">Bug 255644</a>: chkpii error in N20081117-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256569">Bug 256569</a>: Possibly broken code in LaunchConfigurationTabGroupViewer.setSelection(ISelection, boolean)<br>
-
-<h2>January 20, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=261567">Bug 261567</a>: [launching] ILaunchConfiguration's getLocation returns different values at different times<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=261214">Bug 261214</a>: Console view: Opening drop-down of console switcher button already switches consoles<br>
-
-<h2>January 6, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=259839">Bug 259839</a>: Typo in TerminateAndRelaunchAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=259107">Bug 259107</a>: [console] Console Deadlock when too much information written<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253955">Bug 253955</a>: Hitting breakpoint gives focus to workbench instead of dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245314">Bug 245314</a>: Populating variables view with logical structures is really slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253257">Bug 253257</a>: Source lookup job data getting overwritten while running<br>
-
-<h2>December 16, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258235">Bug 258235</a>: Switch LaunchConfigurationFilteredTree to new look of FilteredTree<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258058">Bug 258058</a>: Buttons not greyed out in Organize Favorites dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255153">Bug 255153</a>: Select All does not fire selection change event<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49730">Bug 49730</a>: [source lookup] Call stack editor annotation ambiguous<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=254442">Bug 254442</a>: "Create Watch Expression" action does not appear consistently<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257717">Bug 257717</a>: Errors in Workspace dialog on launch is contains incorrect text<br>
-
-<h2>Milestone 4 - December 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234854">Bug 234854</a>: synchronize remaining 3 public get*Manager() methods from DebugPlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136741">Bug 136741</a>: [Memory View] Base address not initially scrolled into view with built-in renderings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257546">Bug 257546</a>: Console view: Open Console button should open menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257537">Bug 257537</a>: ConsolePlugin should consider modifying its getStandardDisplay() method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=240330">Bug 240330</a>: [Memory View] Items per row should not be limited to 16<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212605">Bug 212605</a>: [launching] Mac OS X launcher should not hide the necessary -XstartOnFirstThread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257970">Bug 257970</a>: SWT Exception shutting down Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236296">Bug 236296</a>: "update the classpath settings" feature sets wrong project  compiler compliance level<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244059">Bug 244059</a>: [breakpoints] Allow breakpoints to specify when they should be overwritten on import<br>
-
-<h2>December 2, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257103">Bug 257103</a>: modify execution environment tests to not break real environments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256181">Bug 256181</a>: [Flex-Hierarchy] State restore logic can get into a cycle.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255267">Bug 255267</a>: OSGi min 1.2 EE is not recognized as subset of J2SE 1.4 and Foundation 1.1<br>
-
-<h2>November 11, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253966">Bug 253966</a>: Support to configure resource based variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252992">Bug 252992</a>: Move {workspace_loc} to debug.core plug-in<br>
-
-<h2>November 4, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252445">Bug 252445</a>: toggle breakpoint jobs should have a priority<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252360">Bug 252360</a>: Can not place breakpoint in inner class of an annotation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252387">Bug 252387</a>: context launch offers to launch configs that have no associated project<br>
-
-<h2>Milestone 3 - October 31, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251711">Bug 251711</a>: Select All should not select invisible items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229219">Bug 229219</a>: Track debugContext with the window evaluation context.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247575">Bug 247575</a>: [flex-hierarchy] TreeModelLabelProvider should coalesce label updates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234908">Bug 234908</a>: [Expressions View] Expression view can show wrong data if selection is changed rapidly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250954">Bug 250954</a>: NPE in LaunchManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252141">Bug 252141</a>: Compile warnings in official build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252609">Bug 252609</a>: Transient ConsoleLineTracker test failures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213074">Bug 213074</a>: "Run to line" action cannot be used with non-standard debug models.<br>
-
-<h2>October 21, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251265">Bug 251265</a>: Rollback changes to IOConsolePartition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250928">Bug 250928</a>: Debug serversocket nulled out<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250048">Bug 250048</a>: DebugUIPlugin.start() pollutes SWT Display<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250008">Bug 250008</a>: Keybinding conflicts occurred. CTRL+SHIFT+P, jface NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=248054">Bug 248054</a>: Can't set breakpoint annotation as Highlighted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182974">Bug 182974</a>: [breakpoints] Removing a breakpoint causes two independent resource deltas<br>
-
-<h2>October 7, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=249364">Bug 249364</a>: NPE getting file store<br>
-
-<h2>September 30, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246278">Bug 246278</a>: NPE in DefaultDetailPane.java:264<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=248520">Bug 248520</a>: NPE selecting launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247977">Bug 247977</a>: ISourceLookupParticipant should be able to influence whether ISourceContainer returns multiple source elements<br>
-
-<h2>September 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236980">Bug 236980</a>: [launching] Support ILaunchConfigurations on EFS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244920">Bug 244920</a>: Two Breakpoints in one line. Saving of class not possible (NPE).<br>
-
-<h2>Aug 26, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244694">Bug 244694</a>: Conflicting mnemonics in breakpoints export wizard<br>
-
-<h2>Aug 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243053">Bug 243053</a>: Tabs added via launchConfigurationTabs cannot be placed after each other<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111818">Bug 111818</a>: new launch config arguments field should let Ctrl+Enter engage dialog's default button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231790">Bug 231790</a>: NPE when opening Run Configuration Dialog on linux/gtk<br>
-
-<h2>Aug 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243606">Bug 243606</a>: [Debug View] Stackframe does not get focus with multiple debug targets<br>
-
-<h2>Aug 5, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242685">Bug 242685</a>: StringVariableManager - Variable contributions may silently override existing variables<br>
-
-<h2>July 29, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236049">Bug 236049</a>: [console] 'Clear' context menu item enable when no text is available to be cleared<br>
-
-<h2>July 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239856">Bug 239856</a>: Launches corrupted in I20080702-0939<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233008">Bug 233008</a>: User consistent naming to create watch expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=240985">Bug 240985</a>: NPE adding org.eclipse.ui.console.consolePageParticipants extension without enablement clause<br>
-
-<h2>July 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239512">Bug 239512</a>: MessageConsole hides IOConsole constructor taking consoleType<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239446">Bug 239446</a>: org.eclipse.debug LaunchConfigurationsDialog fails to load when PlatformUI SHOW_FILTERED_TEXTS is false<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239794">Bug 239794</a>: CommonTab source uses wrong launch group<br>
-
-<h2>June 24, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236076">Bug 236076</a>: [launching] Run and Debug History menus not updated after reorganize favorites<br>
-
-<p> </p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.debug.core/schema/launchers.exsd b/eclipse/plugins/org.eclipse.debug.core/schema/launchers.exsd
index 2a90cdf..1261546 100644
--- a/eclipse/plugins/org.eclipse.debug.core/schema/launchers.exsd
+++ b/eclipse/plugins/org.eclipse.debug.core/schema/launchers.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.debug.core">
 <annotation>
       <appInfo>
-         <meta.schema plugin="org.eclipse.debug.core" id="launchers" name="Launcher (Obsolete)"/>
+         <meta.schema plugin="org.eclipse.debug.core" id="launchers" name="Launcher"/>
       </appInfo>
       <documentation>
          This extension point has been replaced by the launchConfigurationTypes extension point. Extensions of this type are obsolete as of release 2.0 and are ignored. This extension point was used to contribute launchers. 
@@ -219,7 +219,7 @@ implements <samp>org.eclipse.debug.ui.ILaunchWizard</samp>.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2000, 2005 IBM Corporation and others.<br>
+         Copyright (c) 2000, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made 
 available under the terms of the Eclipse Public License v1.0 which 
 accompanies this distribution, and is available at 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.debug.ui/.settings/org.eclipse.jdt.core.prefs
index bc985ad..6206e62 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.debug.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,101 +1,107 @@
-#Thu Oct 15 14:59:52 CDT 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=error
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
-org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
-org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
+#Thu Jan 20 17:00:45 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.debug.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.debug.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..9efd017
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.debug.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:44:07 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF
index 8281b20..390c5f4 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.debug.ui; singleton:=true
-Bundle-Version: 3.6.3.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.debug.internal.ui.DebugUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -66,7 +66,7 @@ Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.console;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.help;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.debug.core;bundle-version="[3.6.0,4.0.0)";visibility:=reexport,
+ org.eclipse.debug.core;bundle-version="[3.7.0,4.0.0)";visibility:=reexport,
  org.eclipse.jface.text;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.workbench.texteditor;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.debug.ui/plugin.xml b/eclipse/plugins/org.eclipse.debug.ui/plugin.xml
index 57739e5..6357bba 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.debug.ui/plugin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
 <!--
-     Copyright (c) 2005, 2010 IBM Corporation and others.
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -80,6 +80,7 @@
             icon="$nl$/icons/full/eview16/breakpoint_view.gif"
             category="org.eclipse.debug.ui"
             class="org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView"
+            allowMultiple="true"
             id="org.eclipse.debug.ui.BreakpointView">
       </view>
       <view
@@ -87,6 +88,7 @@
             icon="$nl$/icons/full/eview16/variable_view.gif"
             category="org.eclipse.debug.ui"
             class="org.eclipse.debug.internal.ui.views.variables.VariablesView"
+            allowMultiple="true"
             id="org.eclipse.debug.ui.VariableView">
       </view>
       <view
@@ -94,6 +96,7 @@
             icon="$nl$/icons/full/eview16/watchlist_view.gif"
             category="org.eclipse.debug.ui"
             class="org.eclipse.debug.internal.ui.views.expression.ExpressionView"
+            allowMultiple="true"
             id="org.eclipse.debug.ui.ExpressionView">
       </view>
       <view
@@ -101,6 +104,7 @@
             icon="$nl$/icons/full/eview16/register_view.gif"
             category="org.eclipse.debug.ui"
             class="org.eclipse.debug.internal.ui.views.registers.RegistersView"
+            allowMultiple="true"
             id="org.eclipse.debug.ui.RegisterView">
       </view>
       <view
@@ -108,6 +112,7 @@
             icon="$nl$/icons/full/eview16/module_view.gif"
             category="org.eclipse.debug.ui"
             class="org.eclipse.debug.internal.ui.views.modules.ModulesView"
+            allowMultiple="true"
             id="org.eclipse.debug.ui.ModuleView">
       </view>
       <view
@@ -1580,11 +1585,22 @@
             name="%DefaultLaunchConfigurationsPropPage.name"
             >
          <enabledWhen>
-            <and>
+            <or>
                <adapt
                      type="org.eclipse.core.resources.IResource">
+                  <not>
+                     <instanceof
+                           value="org.eclipse.core.resources.IProject">
+                     </instanceof>
+                  </not>
                </adapt>
-            </and>
+               <adapt
+                     type="org.eclipse.core.resources.IProject">
+                  <test
+                        property="org.eclipse.core.resources.open">
+                  </test>
+               </adapt>
+            </or>
          </enabledWhen>
       </page>
    </extension>
diff --git a/eclipse/plugins/org.eclipse.debug.ui/schema/launchShortcuts.exsd b/eclipse/plugins/org.eclipse.debug.ui/schema/launchShortcuts.exsd
index 53d0156..d2e1f99 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/schema/launchShortcuts.exsd
+++ b/eclipse/plugins/org.eclipse.debug.ui/schema/launchShortcuts.exsd
@@ -2,9 +2,9 @@
 <!-- Schema file written by PDE -->
 <schema targetNamespace="org.eclipse.debug.ui" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appinfo>
+      <appInfo>
          <meta.schema plugin="org.eclipse.debug.ui" id="launchShortcuts" name="Launch Shortcuts"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          This extension point provides support for selection sensitive launching.  Extensions register a shortcut which
 appears in the run and/or debug cascade menus to launch the workbench selection or active editor.
@@ -14,6 +14,11 @@ appears in the run and/or debug cascade menus to launch the workbench selection
    <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="shortcut" minOccurs="0" maxOccurs="unbounded"/>
@@ -44,9 +49,9 @@ appears in the run and/or debug cascade menus to launch the workbench selection
 
    <element name="shortcut">
       <annotation>
-         <appinfo>
+         <appInfo>
             <meta.element labelAttribute="label"/>
-         </appinfo>
+         </appInfo>
       </annotation>
       <complexType>
          <sequence>
@@ -78,9 +83,9 @@ appears in the run and/or debug cascade menus to launch the workbench selection
 
 New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortcut2</code> to participate in context sensitive launching of resource and non-resource based artifacts.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.debug.ui.ILaunchShortcut"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="label" type="string" use="required">
@@ -88,9 +93,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   specifies a label used to render this shortcut.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute translatable="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="icon" type="string">
@@ -98,9 +103,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   specifies a plugin-relative path to an image used to render this shortcut. Icon is optional because it is up to other plugins (i.e. Views) to render it.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="resource"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="category" type="string">
@@ -108,9 +113,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   specifies the launch configuration type category this shortcut is applicable for. When unspecified, the category is <code>null</code> (default).
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="identifier" basedOn="org.eclipse.debug.core.launchConfigurationTypes/launchConfigurationType/@category"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="helpContextId" type="string">
@@ -132,9 +137,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   Provides a human readable description of what the shortcut does (or will do) if the user selects it. A Description provided in this field will apply as the default description for all of the modes listed in the modes attribute. This attribute was added in the 3.3 release.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute translatable="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -142,9 +147,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
 
    <element name="perspective">
       <annotation>
-         <appinfo>
+         <appInfo>
             <meta.element deprecated="true"/>
-         </appinfo>
+         </appInfo>
          <documentation>
             The <code>perspective</code> element has been <b>deprecated</b> in the 3.1 release. The top level Run/Debug/Profile cascade menus now support contextual (selection sensitive) launching, and clients should provide a <code>contextualLaunch</code> element instead.
          </documentation>
@@ -155,9 +160,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   the unique identifier of a perspective in which a menu shortcut for this launch shortcut will appear.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="identifier" basedOn="org.eclipse.ui.perspectives/perspective/@id"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -189,9 +194,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   specifies a mode from the set {"run","debug","profile"}
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="identifier" basedOn="org.eclipse.debug.core.launchModes/launchMode/@mode"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="label" type="string" use="required">
@@ -199,9 +204,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   specifies the label to appear in the contextual launch menu.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute translatable="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -219,9 +224,9 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   This attribute is the identifier of an existing launch configuration type that is to be associated with this launch shortcut. This association is then used to determine what launch shortcuts apply to what types for context sensitive launching.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="identifier" basedOn="org.eclipse.debug.core.launchConfigurationTypes/launchConfigurationType/@id"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -246,18 +251,18 @@ New in 3.4, clients can implement <code>org.eclipse.debug.ui.ILaunchShortc
                <documentation>
                   The desciption for this launch shortcut when invoked in the associated mode.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute translatable="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
    </element>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="examples"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          The following is an example of the Java Application launch shortcut contribution with an enablement expression, an associated launch configuration type id and descriptions for run and debug mode:
 
@@ -314,9 +319,9 @@ For more information on property testers see <code>org.eclipse.core.expres
    </annotation>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="apiInfo"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          <p>
 Value of the attribute <b>class</b> must be a fully qualified name of a Java class that implements the 
@@ -398,12 +403,19 @@ Example of a description for the run mode only:
    </annotation>
 
 
-
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         No launch shortcuts are provided by the platform. Note that although launch shortcuts do not have to be associated with a specific launch configuration type, launch shortcut menus will not appear unless there is at least one launch configuration type that supports a shortcut's launch mode(s).
+      </documentation>
+   </annotation>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="copyright"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          Copyright (c) 2000, 2007 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/schema/stringVariablePresentations.exsd b/eclipse/plugins/org.eclipse.debug.ui/schema/stringVariablePresentations.exsd
index d81d9bd..44100cc 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/schema/stringVariablePresentations.exsd
+++ b/eclipse/plugins/org.eclipse.debug.ui/schema/stringVariablePresentations.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.debug.ui">
+<schema targetNamespace="org.eclipse.debug.ui" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
          <meta.schema plugin="org.eclipse.debug.ui" id="stringVariablePresentations" name="String Variable Presentations"/>
@@ -11,6 +11,11 @@
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="variablePresentation" minOccurs="0" maxOccurs="unbounded"/>
@@ -46,6 +51,9 @@
                <documentation>
                   specifies the variable this presentation is for
                </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.core.variables.dynamicVariables/variable/@name"/>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="argumentSelector" type="string" use="required">
@@ -53,6 +61,9 @@
                <documentation>
                   specifies a fully qualified name of a Java class that implements <code>IArgumentSelector</code>
                </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.debug.internal.ui.stringsubstitution.IArgumentSelector"/>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -94,12 +105,13 @@ In the above example, the contributed presentation will be used for the variable
       </documentation>
    </annotation>
 
+
    <annotation>
       <appInfo>
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-Copyright (c) 2003, 2005 IBM Corporation and others.<br>
+         Copyright (c) 2003, 2005 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made 
 available under the terms of the Eclipse Public License v1.0 which 
 accompanies this distribution, and is available at 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/schema/toggleBreakpointsTargetFactories.exsd b/eclipse/plugins/org.eclipse.debug.ui/schema/toggleBreakpointsTargetFactories.exsd
index 6221b60..d8d7481 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/schema/toggleBreakpointsTargetFactories.exsd
+++ b/eclipse/plugins/org.eclipse.debug.ui/schema/toggleBreakpointsTargetFactories.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.debug.ui" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
-         <meta.schema plugin="org.eclipse.debug.ui" id="toggleBreakpointsTargetFactories" name="toggleBreakpointsTargetFactories"/>
+         <meta.schema plugin="org.eclipse.debug.ui" id="toggleBreakpointsTargetFactories" name="Toggle Breakpoints Target Factories"/>
       </appinfo>
       <documentation>
          This extension point provides a mechanism for contributing breakpoint toggle action targets which can be registered for specific editors, debug models, or files.
@@ -152,7 +152,7 @@
          <meta.section type="copyright"/>
       </appinfo>
       <documentation>
-         Copyright (c) 2007 Wind River Systems and others.<br>
+         Copyright (c) 2007, 2011 Wind River Systems and others.<br>
 All rights reserved. This program and the accompanying materials
 are made available under the terms of the Eclipse Public License v1.0
 which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java
index d6ac5b6..f917bb3 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,8 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.resources.ISaveContext;
 import org.eclipse.core.resources.ISaveParticipant;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
@@ -94,7 +96,9 @@ import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.ui.progress.IProgressConstants2;
 import org.eclipse.ui.progress.IProgressService;
+import org.eclipse.ui.services.IEvaluationService;
 import org.eclipse.ui.themes.IThemeManager;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -1156,6 +1160,7 @@ public class DebugUIPlugin extends AbstractUIPlugin implements ILaunchListener {
 		IProgressService progressService = workbench.getProgressService();
 
 		job.setPriority(Job.INTERACTIVE);
+		job.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
 		job.setName(MessageFormat.format(DebugUIMessages.DebugUIPlugin_25, new Object[] {configuration.getName()}));
 		
 		if (wait) {
@@ -1299,5 +1304,23 @@ public class DebugUIPlugin extends AbstractUIPlugin implements ILaunchListener {
 		}
 		return ret;
 	}
+	
+	/**
+	 * Creates a new {@link IEvaluationContext} initialized with the current platform state if the 
+	 * {@link IEvaluationService} can be acquired, otherwise the new context is created with no 
+	 * parent context
+	 * 
+	 * @param defaultvar the default variable for the new context
+	 * @return a new {@link IEvaluationContext}
+	 * @since 3.7
+	 */
+	public static IEvaluationContext createEvaluationContext(Object defaultvar) {
+		IEvaluationContext parent = null;
+		IEvaluationService esrvc = (IEvaluationService)PlatformUI.getWorkbench().getService(IEvaluationService.class);
+		if (esrvc != null) {
+			parent = esrvc.getCurrentState();
+		}
+		return new EvaluationContext(parent, defaultvar);
+	}
 }
 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/SWTFactory.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/SWTFactory.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.java
index f191582..5c3a331 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -103,8 +103,11 @@ public class ActionMessages extends NLS {
 	public static String RemoveBreakpointAction_4;
 	public static String RemoveBreakpointAction_5;
 	public static String RemoveBreakpointAction_6;
-    public static String RemoveBreakpointAction_Exceptions_occurred_attempting_to_remove_a_breakpoint__5;
-    public static String RemoveBreakpointAction_Removing_a_breakpoint_4;
+	public static String RemoveBreakpointAction_Exceptions_occurred_attempting_to_remove_a_breakpoint__5;
+	public static String RemoveBreakpointAction_Removing_a_breakpoint_4;
+	
+	public static String DeleteBreakpointOperationName;
+	public static String DeleteBreakpointsOperationName;
 
 	public static String RetargetRunToLineAction_0;
 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.properties
index ab6c5ba..ad9f0e5 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.properties
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ActionMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2010 IBM Corporation and others.
+#  Copyright (c) 2000, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -59,6 +59,10 @@ RemoveBreakpointAction_5=OK
 RemoveBreakpointAction_6=Cancel
 RemoveBreakpointAction_Exceptions_occurred_attempting_to_remove_a_breakpoint__5=An exception occurred attempting to remove breakpoint(s).
 RemoveBreakpointAction_Removing_a_breakpoint_4=Removing a breakpoint
+
+DeleteBreakpointOperationName=Delete Breakpoint
+DeleteBreakpointsOperationName=Delete Breakpoints
+
 DeleteWorkingsetsMessageDialog_0=&Selected working set(s).
 DeleteWorkingsetsMessageDialog_1=&All breakpoints contained in selected working set(s).
 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/LaunchShortcutAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/LaunchShortcutAction.java
index 77946cf..5affdaa 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/LaunchShortcutAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/LaunchShortcutAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.resources.IResource;
@@ -31,6 +30,7 @@ import org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager;
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.ILaunchGroup;
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.swt.SWT;
@@ -141,7 +141,7 @@ public class LaunchShortcutAction extends Action {
 					enabled = !ss.isEmpty();
 				} else {
 					List list = ss.toList();
-					IEvaluationContext context = new EvaluationContext(null, list);
+					IEvaluationContext context = DebugUIPlugin.createEvaluationContext(list);
 					context.addVariable("selection", list); //$NON-NLS-1$
 					enabled = fShortcut.evalEnablementExpression(context, expression);
 				}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ToggleBreakpointsTargetManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ToggleBreakpointsTargetManager.java
index 8bd624f..94a7ec9 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ToggleBreakpointsTargetManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ToggleBreakpointsTargetManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Wind River Systems and others.
+ * Copyright (c) 2008, 2011 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,11 +20,10 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.StringTokenizer;
-import java.util.Map.Entry;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.EvaluationResult;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.ExpressionConverter;
@@ -44,14 +43,13 @@ import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
+import org.eclipse.debug.ui.actions.IToggleBreakpointsTargetExtension;
 import org.eclipse.debug.ui.actions.IToggleBreakpointsTargetFactory;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.services.IEvaluationService;
 
 /**
  * Organizes the toggle breakpoints target factories contributed through the 
@@ -150,20 +148,14 @@ public class ToggleBreakpointsTargetManager {
          * Evaluate the given expression within the given context and return
          * the result. Returns <code>true</code> iff result is either TRUE.
          * 
-         * @param exp the enablement expression to evaluate or <code>null</code>
-         * @param context the context of the evaluation. Usually, the
-         *  user's selection.
+         * @param part the {@link IWorkbenchPart} context
+         * @param selection the current selection in the part
+         * @param exp the current expression
          * @return the result of evaluating the expression
          */
         private boolean evalEnablementExpression(IWorkbenchPart part, ISelection selection, Expression exp) {
             if (exp != null){
-        		IEvaluationContext parentContext = null;
-        		IEvaluationService evaluationService = (IEvaluationService)PlatformUI.getWorkbench().getService(IEvaluationService.class);
-        		if (evaluationService != null) {
-        			parentContext = evaluationService.getCurrentState();
-        		}
-                IEvaluationContext context = new EvaluationContext(parentContext, part);
-                
+                IEvaluationContext context = DebugUIPlugin.createEvaluationContext(part);
                 List debugContextList = getDebugContext(part).toList();
                 context.addVariable(IConfigurationElementConstants.DEBUG_CONTEXT, debugContextList); 
 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/BreakpointGroupMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/BreakpointGroupMessages.properties
index 5663925..a00ae3a 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/BreakpointGroupMessages.properties
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/BreakpointGroupMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2010 IBM Corporation and others.
+# Copyright (c) 2004, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -13,9 +13,9 @@ GroupBreakpointsByAction_0=Breakpoints
 GroupBreakpointsByAction_1=Advanced...
 GroupBreakpointsByDialog_0=Specify nested groupings for the Breakpoints view.
 GroupBreakpointsByDialog_1=A&vailable Groups:
-GroupBreakpointsByDialog_2=&Add -->
+GroupBreakpointsByDialog_2=&Add ->
 GroupBreakpointsByDialog_3=&Selected Groups:
-GroupBreakpointsByDialog_4=<-- &Remove
+GroupBreakpointsByDialog_4=<- &Remove
 GroupBreakpointsByDialog_5=Move &Up
 GroupBreakpointsByDialog_6=Move &Down
 GroupBreakpointsByDialog_7=Group Breakpoints
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/OpenBreakpointMarkerAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/OpenBreakpointMarkerAction.java
index 50cccc6..32f01bf 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/OpenBreakpointMarkerAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/OpenBreakpointMarkerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,14 +69,13 @@ public class OpenBreakpointMarkerAction extends SelectionProviderAction {
 			String editorId = fgPresentation.getEditorId(input, breakpoint);
             if (editorId != null) {
     			try {
-    				part= page.openEditor(input, editorId);
+    				part= page.openEditor(input, editorId, true, IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID);
     			} catch (PartInitException e) {
     				DebugUIPlugin.errorDialog(dwindow.getShell(), ActionMessages.OpenBreakpointMarkerAction_Go_to_Breakpoint_1, ActionMessages.OpenBreakpointMarkerAction_Exceptions_occurred_attempting_to_open_the_editor_for_the_breakpoint_resource_2, e); // 
     			}
             }
 		}
 		if (part != null) {
-			part.setFocus();
 			IDE.gotoMarker(part, breakpoint.getMarker());
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveAllBreakpointsAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveAllBreakpointsAction.java
index dec17fb..930aaab 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveAllBreakpointsAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveAllBreakpointsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,12 +11,24 @@
 package org.eclipse.debug.internal.ui.actions.breakpoints;
 
  
-import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+
+import org.eclipse.core.resources.IMarkerDelta;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchWindow;
+
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.IBreakpointManager;
 import org.eclipse.debug.core.IBreakpointsListener;
@@ -25,11 +37,8 @@ import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.actions.AbstractRemoveAllActionDelegate;
 import org.eclipse.debug.internal.ui.actions.ActionMessages;
 import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialogWithToggle;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.ui.IWorkbenchWindow;
+
+import org.eclipse.debug.ui.DebugUITools;
 
 /**
  * Removes all breakpoints from the source (markers) and remove all
@@ -37,6 +46,8 @@ import org.eclipse.ui.IWorkbenchWindow;
  */
 public class RemoveAllBreakpointsAction extends AbstractRemoveAllActionDelegate implements IBreakpointsListener {
 
+	private Shell fShell;
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.internal.ui.actions.selection.AbstractRemoveAllActionDelegate#isEnabled()
 	 */
@@ -108,18 +119,35 @@ public class RemoveAllBreakpointsAction extends AbstractRemoveAllActionDelegate
 			}
 		}  
 		if (proceed) {
-            new Job(ActionMessages.RemoveAllBreakpointsAction_2) { 
-                protected IStatus run(IProgressMonitor monitor) {
-                    try {
-                        breakpointManager.removeBreakpoints(breakpoints, true);
-                    } catch (CoreException e) {
-                        DebugUIPlugin.log(e);
-                        return Status.CANCEL_STATUS;
-                    }
-                    return Status.OK_STATUS;
-                }
-            }.schedule();
+			new Job(ActionMessages.RemoveAllBreakpointsAction_2) {
+				protected IStatus run(IProgressMonitor monitor) {
+					try {
+						DebugUITools.deleteBreakpoints(breakpoints, fShell, monitor);
+					} catch (CoreException e) {
+						DebugUIPlugin.log(e);
+						return Status.CANCEL_STATUS;
+					}
+					return Status.OK_STATUS;
+				}
+			}.schedule();
 		}
 	}
 
+	/*
+	 * @see org.eclipse.debug.internal.ui.actions.AbstractRemoveAllActionDelegate#init(org.eclipse.ui.IViewPart)
+	 * @since 3.7
+	 */
+	public void init(IViewPart view) {
+		super.init(view);
+		fShell= view.getSite().getShell();
+	}
+
+	/*
+	 * @see org.eclipse.debug.internal.ui.actions.AbstractRemoveAllActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
+	 * @since 3.7
+	 */
+	public void init(IWorkbenchWindow window) {
+		super.init(window);
+		fShell= window.getShell();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveBreakpointAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveBreakpointAction.java
index 1a4aedc..cef9ad8 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveBreakpointAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/RemoveBreakpointAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,22 +15,17 @@ package org.eclipse.debug.internal.ui.actions.breakpoints;
 import java.util.ArrayList;
 import java.util.Iterator;
 
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.model.IBreakpoint;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.actions.AbstractRemoveActionDelegate;
-import org.eclipse.debug.internal.ui.actions.ActionMessages;
-import org.eclipse.debug.internal.ui.breakpoints.provisional.IBreakpointContainer;
-import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
-import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView;
-import org.eclipse.debug.internal.ui.views.breakpoints.WorkingSetCategory;
+
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -38,10 +33,23 @@ import org.eclipse.jface.dialogs.MessageDialogWithToggle;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.Window;
+
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.IWorkingSet;
 import org.eclipse.ui.PlatformUI;
 
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.actions.AbstractRemoveActionDelegate;
+import org.eclipse.debug.internal.ui.actions.ActionMessages;
+import org.eclipse.debug.internal.ui.breakpoints.provisional.IBreakpointContainer;
+import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
+import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView;
+import org.eclipse.debug.internal.ui.views.breakpoints.WorkingSetCategory;
+
+import org.eclipse.debug.ui.DebugUITools;
+
 public class RemoveBreakpointAction extends AbstractRemoveActionDelegate {
 	
 	/* (non-Javadoc)
@@ -126,7 +134,9 @@ public class RemoveBreakpointAction extends AbstractRemoveActionDelegate {
 				new Job(ActionMessages.RemoveBreakpointAction_2) { 
                     protected IStatus run(IProgressMonitor pmonitor) {
                         try {
-                            DebugPlugin.getDefault().getBreakpointManager().removeBreakpoints(breakpoints, true);
+							Shell shell= getView() != null ? getView().getSite().getShell() : null;
+							DebugUITools.deleteBreakpoints(breakpoints, shell, pmonitor);
+
                             for (int i = 0; i < sets.length; i++) {
                             	PlatformUI.getWorkbench().getWorkingSetManager().removeWorkingSet(sets[i]);
 							}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/ShowTargetBreakpointsAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/ShowTargetBreakpointsAction.java
index b6821f1..c9f0bff 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/ShowTargetBreakpointsAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpoints/ShowTargetBreakpointsAction.java
@@ -1,63 +1,63 @@
-/*****************************************************************
- * Copyright (c) 2009 Texas Instruments and others
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956)
- *****************************************************************/
-package org.eclipse.debug.internal.ui.actions.breakpoints;
-
-import org.eclipse.debug.internal.ui.DebugPluginImages;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
-import org.eclipse.debug.internal.ui.actions.ActionMessages;
-import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.jface.action.Action;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * This class implements the show target breakpoint action.
- * 
- * @since 3.6
- */
-public class ShowTargetBreakpointsAction extends Action {
-	/**
-	 * Breakpoints view
-	 */
-	BreakpointsView fView;
-	
-	/**
-	 * Constructor.
-	 * 
-	 * @param view the breakpoints view
-	 */
-	public ShowTargetBreakpointsAction(BreakpointsView view) {
-		super();
-		
-		fView = view;
-		
-		setText(ActionMessages.ShowSupportedBreakpointsAction_Show_For_Selected); 
-		setToolTipText(ActionMessages.ShowSupportedBreakpointsAction_tooltip); 
-		
-		setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_OBJS_DEBUG_TARGET));
-		setChecked(false);
-		setId(DebugUIPlugin.getUniqueIdentifier() + ".ShowSupportedBreakpointsAction"); //$NON-NLS-1$
-		
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IDebugHelpContextIds.SHOW_BREAKPOINTS_FOR_MODEL_ACTION);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.jface.action.Action#run()
-	 */
-	public void run() {
-		if (fView.getViewer().getControl().isDisposed()) {
-			return;
-		}
-		fView.setFilterSelection(isChecked());
-	}
-}
+/*****************************************************************
+ * Copyright (c) 2009, 2010 Texas Instruments and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956)
+ *****************************************************************/
+package org.eclipse.debug.internal.ui.actions.breakpoints;
+
+import org.eclipse.debug.internal.ui.DebugPluginImages;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
+import org.eclipse.debug.internal.ui.actions.ActionMessages;
+import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * This class implements the show target breakpoint action.
+ * 
+ * @since 3.6
+ */
+public class ShowTargetBreakpointsAction extends Action {
+	/**
+	 * Breakpoints view
+	 */
+	BreakpointsView fView;
+	
+	/**
+	 * Constructor.
+	 * 
+	 * @param view the breakpoints view
+	 */
+	public ShowTargetBreakpointsAction(BreakpointsView view) {
+		super();
+		
+		fView = view;
+		
+		setText(ActionMessages.ShowSupportedBreakpointsAction_Show_For_Selected); 
+		setToolTipText(ActionMessages.ShowSupportedBreakpointsAction_tooltip); 
+		
+		setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_OBJS_DEBUG_TARGET));
+		setChecked(false);
+		setId(DebugUIPlugin.getUniqueIdentifier() + ".ShowSupportedBreakpointsAction"); //$NON-NLS-1$
+		
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IDebugHelpContextIds.SHOW_BREAKPOINTS_FOR_MODEL_ACTION);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	public void run() {
+		if (fView.getViewer().getControl().isDisposed()) {
+			return;
+		}
+		fView.setFilterSelection(isChecked());
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/EditWatchExpressinInPlaceAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/EditWatchExpressinInPlaceAction.java
new file mode 100644
index 0000000..1b09da3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/EditWatchExpressinInPlaceAction.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.debug.internal.ui.actions.expressions;
+
+import org.eclipse.debug.core.model.IWatchExpression;
+import org.eclipse.debug.internal.ui.elements.adapters.VariableColumnPresentation;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
+import org.eclipse.debug.internal.ui.views.expression.ExpressionView;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+
+/**
+ * This action activates the cell editor in the expressions view to edit the 
+ * expression string.  If no expression column found or for multi-line 
+ * expressions, revert to the 
+ */
+public class EditWatchExpressinInPlaceAction extends Action implements ISelectionChangedListener {
+
+    private ExpressionView fView;
+    private TreeModelViewer fViewer;
+    private EditWatchExpressionAction fEditActionDelegate = new EditWatchExpressionAction();
+    
+    public EditWatchExpressinInPlaceAction(ExpressionView view) {
+        fView = view;
+        fViewer = (TreeModelViewer)view.getViewer();
+        fEditActionDelegate.init(view);
+        ISelectionProvider selectionProvider = fView.getSite().getSelectionProvider(); 
+        selectionProvider.addSelectionChangedListener(this);
+        fEditActionDelegate.selectionChanged(this, selectionProvider.getSelection());
+    }
+    
+    public void selectionChanged(SelectionChangedEvent event) {
+        IStructuredSelection selection = fEditActionDelegate.getCurrentSelection();
+        setEnabled(selection != null && selection.size() == 1);
+    }
+
+    public void dispose() {
+        fView.getSite().getSelectionProvider().removeSelectionChangedListener(this);
+    }
+    
+    public void run() {
+        IStructuredSelection selelection = fEditActionDelegate.getCurrentSelection();
+        
+        if (selelection.size() != 1) {
+            return;
+        }
+
+
+        // Always edit multi-line expressions in dialog.  Otherwise try to find the expression 
+        // column and activate cell editor there.
+        int expressionColumn = getExpressionColumnIndex();
+        if (expressionColumn != -1 || isWatchExpressionWithNewLine()) {
+            fViewer.editElement(selelection.getFirstElement(), expressionColumn);
+        } else {
+            fEditActionDelegate.run(this);
+        }
+    }
+    
+    private boolean isWatchExpressionWithNewLine() {
+        IWatchExpression[] expressions = fEditActionDelegate.getSelectedExpressions();
+        return expressions.length == 1 && 
+            expressions[0].getExpressionText().indexOf('\n') == -1;
+    }
+    
+    private int getExpressionColumnIndex() {
+        Object[] columnProperties = fViewer.getColumnProperties();
+        for (int i = 0; i < columnProperties.length; i++) {
+            if (VariableColumnPresentation.COLUMN_VARIABLE_NAME.equals(columnProperties[i])) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/variables/ShowTypesAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/variables/ShowTypesAction.java
index b62df10..9aaa804 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/variables/ShowTypesAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/variables/ShowTypesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import org.eclipse.ui.PlatformUI;
  * An action that toggles the state of a viewer to
  * show/hide type names of variables.
  * Only viewers that use a <code>VariableLabelProvider</code> to render its
- * elements are effected.
+ * elements are affected.
  */
 public class ShowTypesAction extends Action {
 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/breakpoints/provisional/IBreakpointUIConstants.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/breakpoints/provisional/IBreakpointUIConstants.java
index 85784cd..ad55c07 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/breakpoints/provisional/IBreakpointUIConstants.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/breakpoints/provisional/IBreakpointUIConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Wind River Systems and others.
+ * Copyright (c) 2009, 2010 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java
index 6166663..65704a3 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contextlaunching/LaunchingResourceManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,6 @@ import java.util.List;
 import java.util.ListIterator;
 import java.util.Set;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -42,8 +41,9 @@ import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationMan
 import org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension;
 import org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager;
 import org.eclipse.debug.ui.ILaunchGroup;
-import org.eclipse.jface.action.CoolBarManager;
+import org.eclipse.debug.ui.ILaunchShortcut;
 import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.ICoolBarManager;
 import org.eclipse.jface.action.ToolBarContributionItem;
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.util.IPropertyChangeListener;
@@ -161,7 +161,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	 * <li>The preference is turned on</li>
 	 * <li>the launch group id is not <code>org.eclipse.ui.externaltools.launchGroup</code></li>
 	 * </ul>
-	 * @param launchgroupid
+	 * @param launchgroupid the id of the {@link ILaunchGroup}
 	 * @return <code>true</code> if context launching is enabled <code>false</code> otherwise
 	 */
 	public static boolean isContextLaunchEnabled(String launchgroupid) {
@@ -171,9 +171,9 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	/**
 	 * Allows an <code>AbstractLaunchHistoryAction</code> to register with this manager to be notified
 	 * of a context (<code>IResource</code>) change and have its updateToolTip(..) method called back to.
-	 * @param action the action to add
-	 * @param group the launch group
-	 * @return true if the <code>AbstractLaunchHistoryAction</code> was added as a listener, false otherwise
+	 * <br><br>
+	 * Obeys the contract of listener addition as outlined in {@link ListenerList#add(Object)}
+	 * @param listener the {@link ILaunchLabelChangedListener} to add
 	 */
 	public void addLaunchLabelUpdateListener(ILaunchLabelChangedListener listener) {
 		fLabelListeners.add(listener);
@@ -182,10 +182,9 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	/**
 	 * Removes the specified <code>AbstractLaunchHistoryAction</code> from the listing of registered 
 	 * listeners
-	 * @param action the action to remove
-	 * @param group the launch group
-	 * @return true if the action was removed from the listing of <code>AbstractLaunchHistoryAction</code> listeners,
-	 * false otherwise
+	 * <br><br>
+	 * Obeys the contract of listener removal as outlined in {@link ListenerList#remove(Object)}
+	 * @param listener the {@link ILaunchLabelChangedListener} to remove
 	 */
 	public void removeLaunchLabelChangedListener(ILaunchLabelChangedListener listener) {
 		fLabelListeners.remove(listener);
@@ -266,7 +265,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	/**
 	 * Appends the text '(already running)' to the tooltip label if there is a launch currently
 	 * running (not terminated) with the same backing launch configuration as the one specified
-	 * @param config
+	 * @param config the {@link ILaunchConfiguration} to check for running state
 	 * @return the appended string for the tooltip label or the configuration name (default)
 	 */
 	private String appendLaunched(ILaunchConfiguration config) {
@@ -290,7 +289,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	
 	/**
 	 * Returns the label for the last launched configuration or and empty string if there was no last launch.
-	 * @param group
+	 * @param group the {@link ILaunchGroup} to get the label for
 	 * @return the name of the last launched configuration, altered with '(running)' if needed, or the empty
 	 * string if there is no last launch.
 	 */
@@ -304,8 +303,11 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	
 	/**
 	 * Returns the label for the specified resource or the empty string, never <code>null</code>
-	 * @param resource
-	 * @param group
+	 * 
+	 * @param selection the current {@link IStructuredSelection}
+	 * @param resource the backing {@link IResource} for the selection
+	 * @param shortcuts the list of {@link ILaunchShortcut}s to consider
+	 * @param group the {@link ILaunchGroup} to launch using
 	 * @return the label for the resource or the empty string, never <code>null</code>
 	 */
 	protected String getLabel(IStructuredSelection selection, IResource resource, List shortcuts, ILaunchGroup group) {
@@ -369,6 +371,8 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	 * Prunes the original listing of shortcuts
 	 * @param shortcuts the original listing of <code>LaunchShortcutExtension</code>s
 	 * @param resource the derived resource
+	 * @param mode the mode we are wanting to launch in
+	 * @return the list of {@link ILaunchShortcut}s to consider
 	 * 
 	 * @since 3.4
 	 */
@@ -392,8 +396,8 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	/**
 	 * Computes the current resources context, given all of the launch shortcut participants
 	 * and the current selection
-	 * @param shortcuts
-	 * @param selection
+	 * @param shortcuts the list of {@link ILaunchShortcut} to ask for mapped resources
+	 * @param selection the current workbench {@link IStructuredSelection}
 	 * @return The set of resources who care about this launch
 	 * 
 	 * @since 3.4
@@ -443,7 +447,7 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 		if(o instanceof IEditorPart) {
 			ctxt.set(0, ((IEditorPart)o).getEditorInput());
 		}
-		IEvaluationContext context = new EvaluationContext(null, ctxt);
+		IEvaluationContext context = DebugUIPlugin.createEvaluationContext(ctxt);
 		context.addVariable("selection", ctxt); //$NON-NLS-1$
 		LaunchShortcutExtension ext = null;
 		for(Iterator iter = sc.iterator(); iter.hasNext();) {
@@ -523,8 +527,8 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	/**
 	 * Adds all of the items in the given object array to the given collection.
 	 * Does nothing if either the collection or array is <code>null</code>.
-	 * @param list
-	 * @param values
+	 * @param list the {@link List} to append to
+	 * @param values the array of {@link Object}s to add to the list
 	 */
 	private void addAllToList(Collection list, Object[] values) {
 		if(list == null || values == null) {
@@ -629,10 +633,10 @@ public class LaunchingResourceManager implements IPropertyChangeListener, IWindo
 	/**
 	 * Adds a mouse listener to the launch toolbar 
 	 * 
-	 * @param window
+	 * @param window the {@link IWorkbenchWindow} to work with
 	 */
 	private void addMouseListener(IWorkbenchWindow window) {
-		CoolBarManager cmgr = ((WorkbenchWindow)window).getCoolBarManager();
+		ICoolBarManager cmgr = ((WorkbenchWindow)window).getCoolBarManager2();
 		if(cmgr != null) {
 			IContributionItem item = cmgr.find("org.eclipse.debug.ui.launchActionSet"); //$NON-NLS-1$
 			if(item instanceof ToolBarContributionItem) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java
index 7ebc01b..7b700fe 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2009 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Patrick Chuong (Texas Instruments) - Allow multiple debug views and 
+ *     		multiple debug context providers (Bug 327263)
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.contexts;
 
@@ -14,18 +16,16 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.internal.ui.views.ViewContextManager;
 import org.eclipse.debug.ui.contexts.IDebugContextListener;
 import org.eclipse.debug.ui.contexts.IDebugContextManager;
+import org.eclipse.debug.ui.contexts.IDebugContextProvider;
 import org.eclipse.debug.ui.contexts.IDebugContextService;
+import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.IWindowListener;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.progress.UIJob;
 
 /**
  * @since 3.2
@@ -36,6 +36,52 @@ public class DebugContextManager implements IDebugContextManager {
 	private Map fServices = new HashMap();
 	private ListenerList fGlobalListeners = new ListenerList();
 	
+	/**
+	 * A debug context service that does nothing (used for windows that have been closed)
+	 */
+	private static IDebugContextService NULL_SERVICE = new IDebugContextService() {
+		public void removePostDebugContextListener(IDebugContextListener listener, String partId) {
+		}
+		public void removePostDebugContextListener(IDebugContextListener listener) {
+		}
+		public void removeDebugContextProvider(IDebugContextProvider provider) {
+		}
+		public void removeDebugContextListener(IDebugContextListener listener, String partId) {
+		}
+		public void removeDebugContextListener(IDebugContextListener listener) {
+		}
+		public ISelection getActiveContext(String partId) {
+			return null;
+		}
+		public ISelection getActiveContext() {
+			return null;
+		}
+		public void addPostDebugContextListener(IDebugContextListener listener, String partId) {
+		}
+		public void addPostDebugContextListener(IDebugContextListener listener) {
+		}
+		public void addDebugContextProvider(IDebugContextProvider provider) {
+		}
+		public void addDebugContextListener(IDebugContextListener listener, String partId) {
+		}
+		public void addDebugContextListener(IDebugContextListener listener) {
+		}
+		public void addDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+			
+		}
+		public void removeDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+		}
+		
+		public ISelection getActiveContext(String partId, String partSecondaryId) {
+			return null;
+		}
+		public void addPostDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+		}
+
+		public void removePostDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+		}
+	};
+	
 	private class WindowListener implements IWindowListener {
 
 		/* (non-Javadoc)
@@ -54,22 +100,11 @@ public class DebugContextManager implements IDebugContextManager {
 		 * @see org.eclipse.ui.IWindowListener#windowClosed(org.eclipse.ui.IWorkbenchWindow)
 		 */
 		public void windowClosed(final IWorkbenchWindow window) {
-		    // Use an async exec to dispose the debug context service for the 
-			// closed window.  This will allow other window closed listeners 
-			// to still use the context service before it is disposed.
-			new UIJob(window.getShell().getDisplay(), "DebugContextManager windowClosed() handler") { //$NON-NLS-1$
-				{
-					setSystem(true);
-				}
-				
-				public IStatus runInUIThread(IProgressMonitor monitor) {
-					DebugWindowContextService service = (DebugWindowContextService) fServices.remove(window);
-					if (service != null) {
-						service.dispose();
-					}
-					return Status.OK_STATUS;
-				}
-			}.schedule();
+            DebugWindowContextService service = (DebugWindowContextService) fServices.get(window);
+            if (service != null) {
+            	fServices.remove(window);
+                service.dispose();
+            }
 		}
 
 		/* (non-Javadoc)
@@ -95,16 +130,21 @@ public class DebugContextManager implements IDebugContextManager {
 		return fgDefault;
 	}
 	
-	protected DebugWindowContextService createService(IWorkbenchWindow window) {
+	protected IDebugContextService createService(IWorkbenchWindow window) {
 		DebugWindowContextService service = (DebugWindowContextService) fServices.get(window);
 		if (service == null) {
-			service = new DebugWindowContextService(window);
-			fServices.put(window, service);
-			// register global listeners
-			Object[] listeners = fGlobalListeners.getListeners();
-			for (int i = 0; i < listeners.length; i++) {
-				IDebugContextListener listener = (IDebugContextListener) listeners[i];
-				service.addDebugContextListener(listener);
+			if (window.getShell() == null) {
+				// the window has been closed - return a dummy service
+				return NULL_SERVICE;
+			} else {
+				service = new DebugWindowContextService(window);
+				fServices.put(window, service);
+				// register global listeners
+				Object[] listeners = fGlobalListeners.getListeners();
+				for (int i = 0; i < listeners.length; i++) {
+					IDebugContextListener listener = (IDebugContextListener) listeners[i];
+					service.addDebugContextListener(listener);
+				}
 			}
 		}
 		return service;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java
index 596c2bc..dcc7315 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -8,11 +8,15 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *     Wind River - Pawel Piech - added an evaluation context source provider (bug 229219)
+ *     Patrick Chuong (Texas Instruments) and Pawel Piech (Wind River) - 
+ *     		Allow multiple debug views and multiple debug context providers (Bug 327263)
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.contexts;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -23,10 +27,12 @@ import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.ui.contexts.DebugContextEvent;
 import org.eclipse.debug.ui.contexts.IDebugContextListener;
 import org.eclipse.debug.ui.contexts.IDebugContextProvider;
+import org.eclipse.debug.ui.contexts.IDebugContextProvider2;
 import org.eclipse.debug.ui.contexts.IDebugContextService;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IViewSite;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchPartReference;
@@ -64,10 +70,12 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 	}
 	
 	public synchronized void addDebugContextProvider(IDebugContextProvider provider) {
+	    if (fWindow == null) return; // disposed
+	    
 		IWorkbenchPart part = provider.getPart();
 		String id = null;
 		if (part != null) {
-			id = part.getSite().getId();
+			id = getCombinedPartId(part);
 		}
 		fProvidersByPartId.put(id, provider);
 		fProviders.add(provider);
@@ -88,7 +96,7 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 			IWorkbenchPart part = provider.getPart();
 			String id = null;
 			if (part != null) {
-				id = part.getSite().getId();
+				id = getCombinedPartId(part);
 			}
 			fProvidersByPartId.remove(id);
 			fProviders.remove(index);
@@ -156,48 +164,100 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 	}
 	
 	protected void notify(DebugContextEvent event) {
-		notify(event, getListeners(null));
-		IWorkbenchPart part = event.getDebugContextProvider().getPart();
-		if (part != null) {
-			notify(event, getListeners(part));
-		}
-		notify(event, getPostListeners(null));
-		if (part != null) {
-			notify(event, getPostListeners(part));
+		IDebugContextProvider provider = getActiveProvider();
+		if (provider != null) {
+			IWorkbenchPart part = event.getDebugContextProvider().getPart();
+		
+			// Once for listeners
+			if (provider == event.getDebugContextProvider()) {		
+				notify(event, getListeners(null));
+			}		
+			if (part != null) {
+				notify(event, getListeners(part));
+			}
+			
+			// Again for post-listeners
+			if (provider == event.getDebugContextProvider()) {
+				notify(event, getPostListeners(null));
+			}
+			if (part != null) {
+				notify(event, getPostListeners(part));
+			}
 		}
 	}
 	
-	protected void notify(final DebugContextEvent event, ListenerList list) {
-		if (list != null) {
-			Object[] listeners = list.getListeners();
-			for (int i = 0; i < listeners.length; i++) {
-				final IDebugContextListener listener = (IDebugContextListener) listeners[i];
-				SafeRunner.run(new ISafeRunnable() {
-					public void run() throws Exception {
-						listener.debugContextChanged(event);
-					}
-					public void handleException(Throwable exception) {
-						DebugUIPlugin.log(exception);
-					}
-				});
-			}
+	protected void notify(final DebugContextEvent event, Object[] listeners) {
+		for (int i = 0; i < listeners.length; i++) {
+			final IDebugContextListener listener = (IDebugContextListener) listeners[i];
+			SafeRunner.run(new ISafeRunnable() {
+				public void run() throws Exception {
+					listener.debugContextChanged(event);
+				}
+				public void handleException(Throwable exception) {
+					DebugUIPlugin.log(exception);
+				}
+			});
 		}
 	}
 	
-	protected ListenerList getListeners(IWorkbenchPart part) {
-		String id = null;
-		if (part != null) {
-			id = part.getSite().getId();
-		}
-		return (ListenerList) fListenersByPartId.get(id);
+	protected Object[] getListeners(IWorkbenchPart part) {
+        String id = null; 
+        if (part != null) { 
+            id = getCombinedPartId(part); 
+            ListenerList listenerList = (ListenerList)fListenersByPartId.get(id); 
+            return listenerList != null ? listenerList.getListeners() : new Object[0]; 
+        } else { 
+            List retVal = new ArrayList(); 
+            retVal.addAll(Arrays.asList(((ListenerList)fListenersByPartId.get(null)).getListeners()) ); 
+            outer: for (Iterator itr = fListenersByPartId.keySet().iterator(); itr.hasNext();) { 
+                String listenerPartId = (String)itr.next(); 
+                for (int i = 0; i < fProviders.size(); i++) { 
+                    String providerPartId = getCombinedPartId(((IDebugContextProvider)fProviders.get(i)).getPart()); 
+                    if ((listenerPartId == null && providerPartId == null) || 
+                        (listenerPartId != null && listenerPartId.equals(providerPartId)))  
+                    { 
+                        continue outer; 
+                    } 
+                }
+                
+                List toAdd = Arrays.asList(((ListenerList)fListenersByPartId.get(listenerPartId)).getListeners());
+                for (Iterator addItr = toAdd.iterator(); addItr.hasNext();) {
+                	Object element = addItr.next();
+                	if (!retVal.contains(element)) retVal.add(element);
+                	
+                } 
+            } 
+            return retVal.toArray(); 
+        } 
 	}
 	
-	protected ListenerList getPostListeners(IWorkbenchPart part) {
-		String id = null;
-		if (part != null) {
-			id = part.getSite().getId();
-		}
-		return (ListenerList) fPostListenersByPartId.get(id);
+	protected Object[] getPostListeners(IWorkbenchPart part) {
+		String id = null; 
+        if (part != null) { 
+            id = getCombinedPartId(part); 
+            ListenerList listenerList = (ListenerList)fPostListenersByPartId.get(id); 
+            return listenerList != null ? listenerList.getListeners() : new Object[0]; 
+        } else { 
+            List retVal = new ArrayList(); 
+            ListenerList postListenersList = (ListenerList)fPostListenersByPartId.get(null); 
+            if (postListenersList != null) { 
+                retVal.addAll( Arrays.asList(postListenersList.getListeners()) ); 
+            } 
+            
+            outer: for (Iterator itr = fPostListenersByPartId.keySet().iterator(); itr.hasNext();) { 
+                String listenerPartId = (String)itr.next(); 
+                for (int i = 0; i < fProviders.size(); i++) { 
+                    String providerPartId = getCombinedPartId(((IDebugContextProvider)fProviders.get(i)).getPart()); 
+                    if ((listenerPartId == null && providerPartId == null) || 
+                        (listenerPartId != null && listenerPartId.equals(providerPartId)))  
+                    { 
+                        continue outer; 
+                    } 
+                } 
+                retVal.addAll( Arrays.asList(((ListenerList)fPostListenersByPartId.get(listenerPartId)).getListeners()) ); 
+            } 
+            return retVal.toArray(); 
+        } 
 	}	
 
 	/* (non-Javadoc)
@@ -219,6 +279,8 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 		ListenerList list = (ListenerList) fListenersByPartId.get(partId);
 		if (list != null) {
 			list.remove(listener);
+			if (list.size() == 0)
+				fListenersByPartId.remove(partId);
 		}
 	}
 
@@ -230,7 +292,7 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 		if (provider != null) {
 			return provider.getActiveContext();
 		}
-		return null;
+		return getActiveContext();
 	}
 
 	/* (non-Javadoc)
@@ -249,7 +311,7 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 	 * 
 	 * @return active provider or <code>null</code>
 	 */
-	protected IDebugContextProvider getActiveProvider() {
+	private IDebugContextProvider getActiveProvider() {
 		if (!fProviders.isEmpty()) {
 			return (IDebugContextProvider)fProviders.get(0);
 		}
@@ -262,11 +324,18 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 	public void partActivated(IWorkbenchPartReference partRef) {
 		IDebugContextProvider provider = (IDebugContextProvider) fProvidersByPartId.get(partRef.getId());
 		if (provider != null) {
-			int index = fProviders.indexOf(provider);
-			if (index > 0) {
-				fProviders.remove(index);
-				fProviders.add(0, provider);
-				notify(provider);
+			boolean canSetActive = true;
+			if (provider instanceof IDebugContextProvider2) {
+				canSetActive = ((IDebugContextProvider2) provider).isWindowContextProvider();
+			}
+			
+			if (canSetActive) {
+				int index = fProviders.indexOf(provider);
+				if (index > 0) {
+					fProviders.remove(index);
+					fProviders.add(0, provider);
+					notify(provider);
+				}
 			}
 		}
 		
@@ -317,13 +386,56 @@ public class DebugWindowContextService implements IDebugContextService, IPartLis
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextEventListener#contextEvent(org.eclipse.debug.internal.ui.contexts.provisional.DebugContextEvent)
 	 */
-	public void debugContextChanged(DebugContextEvent event) {
-		if (!fProviders.isEmpty()) {
-			IDebugContextProvider provider = (IDebugContextProvider) fProviders.get(0);
-			if (provider == event.getDebugContextProvider()) {
-				notify(event);
-			}
-		}	
+	public void debugContextChanged(DebugContextEvent event) {	
+		notify(event);
+	}
+	
+	private String getCombinedPartId(IWorkbenchPart part) { 
+        if (part.getSite() instanceof IViewSite) { 
+            IViewSite site = (IViewSite)part.getSite();
+            return getCombinedPartId(site.getId(), site.getSecondaryId());
+            
+        } else { 
+            return part.getSite().getId(); 
+        } 
+    }	
+
+	private String getCombinedPartId(String id, String secondaryId) {
+		return id + (secondaryId != null ? ":" + secondaryId : "");   //$NON-NLS-1$//$NON-NLS-2$
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.contexts.IDebugContextService2#addDebugContextListener(org.eclipse.debug.ui.contexts.IDebugContextListener, java.lang.String, java.lang.String)
+	 */
+	public void addDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+		addDebugContextListener(listener, getCombinedPartId(partId, partSecondaryId));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.contexts.IDebugContextService2#removeDebugContextListener(org.eclipse.debug.ui.contexts.IDebugContextListener, java.lang.String, java.lang.String)
+	 */
+	public void removeDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+		removeDebugContextListener(listener, getCombinedPartId(partId, partSecondaryId));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.contexts.IDebugContextService2#addPostDebugContextListener(org.eclipse.debug.ui.contexts.IDebugContextListener, java.lang.String, java.lang.String)
+	 */
+	public void addPostDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+		addPostDebugContextListener(listener, getCombinedPartId(partId, partSecondaryId));
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.contexts.IDebugContextService2#removePostDebugContextListener(org.eclipse.debug.ui.contexts.IDebugContextListener, java.lang.String, java.lang.String)
+	 */
+	public void removePostDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId) {
+		removePostDebugContextListener(listener, getCombinedPartId(partId, partSecondaryId));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.contexts.IDebugContextService2#getActiveContext(java.lang.String, java.lang.String)
+	 */
+	public ISelection getActiveContext(String partId, String partSecondaryId) {		
+		return getActiveContext(getCombinedPartId(partId, partSecondaryId));
+	} 
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultBreakpointsViewInput.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultBreakpointsViewInput.java
index 27a161a..a525bdf 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultBreakpointsViewInput.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultBreakpointsViewInput.java
@@ -1,74 +1,74 @@
-/*****************************************************************
- * Copyright (c) 2009 Texas Instruments and others
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956)
- *     Wind River Systems - ongoing enhancements and bug fixing
- *****************************************************************/
-package org.eclipse.debug.internal.ui.elements.adapters;
-
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
-
-/**
- * The default breakpoints view input populates the view with content 
- * from the default breakpoint manager.
- * 
- * @since 3.6
- */
-public class DefaultBreakpointsViewInput {
-	
-	/**
-	 * The presentation context of the breakpoints view.
-	 */
-	final private IPresentationContext fContext;
-	
-	/**
-	 * Constructor.
-	 * 
-	 * @param context the presentation context for this input
-	 */
-	public DefaultBreakpointsViewInput(IPresentationContext context) {
-		fContext = context;
-	}
-		
-	/**
-	 * Returns the presentation context for this input.
-	 * 
-	 * @return the presentation context
-	 */
-	public IPresentationContext getContext() {
-		return fContext;
-	}
-	
-	/*
-     * (non-Javadoc)
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode() {
-        if (getContext() != null) {
-            return getContext().hashCode();
-        } else {
-            return 1;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.lang.Object#equals(java.lang.Object)
-     */
-    public boolean equals(Object arg0) {
-        if ( (arg0 != null) && arg0.getClass().equals(this.getClass()) ) {
-
-            IPresentationContext context = ((DefaultBreakpointsViewInput) arg0).getContext();
-            if (getContext() != null && context != null)
-                return getContext().equals(context);
-        } 
-        
-        return super.equals(arg0);              
-    }
-
-}
+/*****************************************************************
+ * Copyright (c) 2009, 2010 Texas Instruments and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956)
+ *     Wind River Systems - ongoing enhancements and bug fixing
+ *****************************************************************/
+package org.eclipse.debug.internal.ui.elements.adapters;
+
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+
+/**
+ * The default breakpoints view input populates the view with content 
+ * from the default breakpoint manager.
+ * 
+ * @since 3.6
+ */
+public class DefaultBreakpointsViewInput {
+	
+	/**
+	 * The presentation context of the breakpoints view.
+	 */
+	final private IPresentationContext fContext;
+	
+	/**
+	 * Constructor.
+	 * 
+	 * @param context the presentation context for this input
+	 */
+	public DefaultBreakpointsViewInput(IPresentationContext context) {
+		fContext = context;
+	}
+		
+	/**
+	 * Returns the presentation context for this input.
+	 * 
+	 * @return the presentation context
+	 */
+	public IPresentationContext getContext() {
+		return fContext;
+	}
+	
+	/*
+     * (non-Javadoc)
+     * @see java.lang.Object#hashCode()
+     */
+    public int hashCode() {
+        if (getContext() != null) {
+            return getContext().hashCode();
+        } else {
+            return 1;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object arg0) {
+        if ( (arg0 != null) && arg0.getClass().equals(this.getClass()) ) {
+
+            IPresentationContext context = ((DefaultBreakpointsViewInput) arg0).getContext();
+            if (getContext() != null && context != null)
+                return getContext().equals(context);
+        } 
+        
+        return super.equals(arg0);              
+    }
+
+}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultViewerInputProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultViewerInputProvider.java
index 04997ef..258cc1e 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultViewerInputProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/DefaultViewerInputProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 Wind River Systems and others.
+ * Copyright (c) 2007, 2010 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java
index 5b40457..03a3730 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,6 +98,8 @@ public class StackFrameSourceDisplayAdapter implements ISourceDisplay {
 			fTarget = frame;
 			fLocator = locator;
 			fPage = page;
+			// Note: Be careful when trying to use scheduling rules with this 
+			// job, in order to avoid blocking nested jobs (bug 339542).
 		}
 		
 		/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationEditDialog.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationEditDialog.java
index af33234..d99f93c 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationEditDialog.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationEditDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,20 +74,14 @@ public class LaunchConfigurationEditDialog extends LaunchConfigurationDialog {
 	 * @see org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog#buttonPressed(int)
 	 */
 	protected void buttonPressed(int buttonId) {
-		if(buttonId == ID_LAUNCH_BUTTON) {
-			setReturnCode(IDialogConstants.OK_ID);
-			int status = shouldSaveCurrentConfig();
-			if(status != IDialogConstants.CANCEL_ID) {
-				if(status != ID_DISCARD_BUTTON) {
-					if(status == IDialogConstants.YES_ID) {
-						getTabViewer().handleApplyPressed();
-					}
+		int status = shouldSaveCurrentConfig();
+		if(status != IDialogConstants.CANCEL_ID) {
+			if(status != ID_DISCARD_BUTTON) {
+				if(status == IDialogConstants.YES_ID) {
+					getTabViewer().handleApplyPressed();
 				}
+				cancelPressed();
 			}
 		}
-		else if(buttonId == ID_CANCEL_BUTTON) {
-			setReturnCode(IDialogConstants.CANCEL_ID);
-		}
-		close();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationFilteredTree.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationFilteredTree.java
index d760e0c..751dd27 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationFilteredTree.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationFilteredTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2006, 2009 IBM Corporation and others.
+ *  Copyright (c) 2006, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Eike Stepper    - bug 343228
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.launchConfigurations;
 
@@ -19,6 +20,7 @@ import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.ILaunchGroup;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DecoratingLabelProvider;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -49,9 +51,11 @@ public final class LaunchConfigurationFilteredTree extends FilteredTree {
 	
 	/**
 	 * Constructor
-	 * @param parent
-	 * @param treeStyle
-	 * @param filter
+	 * @param parent the parent {@link Composite}
+	 * @param treeStyle the style
+	 * @param filter the initial filter pattern
+	 * @param group the launch group to open on
+	 * @param filters the initial group of filters
 	 */
 	public LaunchConfigurationFilteredTree(Composite parent, int treeStyle, PatternFilter filter, ILaunchGroup group, ViewerFilter[] filters) {
 		super(parent, treeStyle, filter, true);
@@ -66,7 +70,7 @@ public final class LaunchConfigurationFilteredTree extends FilteredTree {
 	 */
 	protected TreeViewer doCreateTreeViewer(Composite cparent, int style) {
 		treeViewer = new LaunchConfigurationViewer(cparent, style);
-		treeViewer.setLabelProvider(DebugUITools.newDebugModelPresentation());
+		treeViewer.setLabelProvider(new DecoratingLabelProvider(DebugUITools.newDebugModelPresentation(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
 		treeViewer.setComparator(new WorkbenchViewerComparator());
 		treeViewer.setContentProvider(new LaunchConfigurationTreeContentProvider(fLaunchGroup.getMode(), cparent.getShell()));
 		treeViewer.addFilter(new LaunchGroupFilter(fLaunchGroup));
@@ -108,7 +112,7 @@ public final class LaunchConfigurationFilteredTree extends FilteredTree {
 	/**
 	 * Handle help events locally rather than deferring to WorkbenchHelp.  This
 	 * allows help specific to the selected config type to be presented.
-	 * 
+	 * @param evt the {@link HelpEvent}
 	 */
 	protected void handleHelpRequest(HelpEvent evt) {
 		if (getViewer().getTree() != evt.getSource()) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java
index 6e8b888..f00f0e3 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,6 @@ import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -702,7 +701,7 @@ public class LaunchConfigurationManager implements ILaunchListener, ISavePartici
 		if(resource != null) {
 			ctxt.add(resource);
 		}
-		IEvaluationContext context = new EvaluationContext(null, ctxt);
+		IEvaluationContext context = DebugUIPlugin.createEvaluationContext(ctxt);
 		context.addVariable("selection", ctxt); //$NON-NLS-1$
 		LaunchShortcutExtension ext = null;
 		for(Iterator iter = sc.iterator(); iter.hasNext();) {
@@ -734,7 +733,7 @@ public class LaunchConfigurationManager implements ILaunchListener, ISavePartici
 		LaunchShortcutExtension ext = null;
 		List list = new ArrayList();
 		list.add(resource);
-		IEvaluationContext context = new EvaluationContext(null, list);
+		IEvaluationContext context = DebugUIPlugin.createEvaluationContext(list);
 		context.setAllowPluginActivation(true);
 		context.addVariable("selection", list); //$NON-NLS-1$
 		HashSet set = new HashSet();
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
index e779dd5..1b608c2 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,35 +13,33 @@ package org.eclipse.debug.internal.ui.launchConfigurations;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
 
-import com.ibm.icu.text.MessageFormat;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.custom.ViewForm;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.TreeItem;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
-
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationType;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.IStatusHandler;
+import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
+import org.eclipse.debug.internal.core.LaunchConfigurationWorkingCopy;
+import org.eclipse.debug.internal.core.LaunchManager;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
+import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.debug.ui.IDebugView;
+import org.eclipse.debug.ui.ILaunchConfigurationDialog;
+import org.eclipse.debug.ui.ILaunchConfigurationTab;
+import org.eclipse.debug.ui.ILaunchConfigurationTabGroup;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.Separator;
@@ -65,29 +63,27 @@ import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jface.wizard.ProgressMonitorPart;
-
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.custom.ViewForm;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.WorkbenchJob;
 
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationType;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.core.IStatusHandler;
-import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
-import org.eclipse.debug.internal.core.LaunchConfigurationWorkingCopy;
-import org.eclipse.debug.internal.core.LaunchManager;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
-import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
-
-import org.eclipse.debug.ui.DebugUITools;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.IDebugView;
-import org.eclipse.debug.ui.ILaunchConfigurationDialog;
-import org.eclipse.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.debug.ui.ILaunchConfigurationTabGroup;
+import com.ibm.icu.text.MessageFormat;
  
 /**
  * The dialog used to edit and launch launch configurations.
@@ -345,13 +341,14 @@ public class LaunchConfigurationsDialog extends TitleAreaDialog implements ILaun
 	    persistSashWeights();
 	    persistExpansion();
 		setCurrentlyVisibleLaunchConfigurationDialog(null);
-		getBannerImage().dispose();
 		fTabViewer.dispose();
 		if (fLaunchConfigurationView != null) {
 			fLaunchConfigurationView.dispose();
 		}
 		DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
-		return super.close();
+		boolean result = super.close();
+		getBannerImage().dispose();
+		return result;
 	}
 	
 	/**
@@ -514,6 +511,10 @@ public class LaunchConfigurationsDialog extends TitleAreaDialog implements ILaun
         viewFormContents.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
 		fLaunchConfigurationView = new LaunchConfigurationView(getLaunchGroup(), createViewerFilters());
 		fLaunchConfigurationView.createLaunchDialogControl(viewFormContents);
+		Text filterText = fLaunchConfigurationView.getFilteringTextControl();
+		if (filterText != null){
+			filterText.setFocus();
+		}
 		
 	//create toolbar actions, we reuse the actions from the view so we wait until after
 	//the view is created to add them to the toolbar
@@ -945,6 +946,7 @@ public class LaunchConfigurationsDialog extends TitleAreaDialog implements ILaun
 			} finally {
 				fSettingInput = false;
 				updateButtons();
+				updateMessage();
 			}
  			if(getShell() != null && getShell().isVisible()) {
  				resize();
@@ -1081,10 +1083,6 @@ public class LaunchConfigurationsDialog extends TitleAreaDialog implements ILaun
 		if (status != null) {
 			handleStatus(status);
 		}
-		Text filterText = fLaunchConfigurationView.getFilteringTextControl();
-		if (filterText != null){
-			filterText.setFocus();
-		}
 		restoreExpansion();
 	}
 	
@@ -1183,7 +1181,7 @@ public class LaunchConfigurationsDialog extends TitleAreaDialog implements ILaun
 			if(value != null) {
 				String[] nodes = value.split(DELIMITER);
 				TreeItem[] items = fLaunchConfigurationView.getTreeViewer().getTree().getItems();
-				ArrayList toexpand = new ArrayList();
+				HashSet toexpand = new HashSet();
 				// if we have a selection make sure it is expanded
 				if(fInitialSelection != null && !fInitialSelection.isEmpty()) {
 					Object obj = fInitialSelection.getFirstElement();
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
index 71bac4e..26704b8 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -30,6 +30,8 @@ public class LaunchConfigurationsMessages extends NLS {
 	public static String CommonTab_14;
 	public static String CommonTab_0;
 	public static String CommonTab_1;
+
+	public static String CommonTab_15;
 	public static String CommonTab_2;
 	public static String CommonTab_3;
 	public static String CommonTab_4;
@@ -169,8 +171,6 @@ public class LaunchConfigurationsMessages extends NLS {
 	public static String DebugModePromptStatusHandler_0;
 	public static String DebugModePromptStatusHandler_1;
 
-    public static String CommonTab_No_Encoding_Selected;
-
 	static {
 		// load message values from bundle file
 		NLS.initializeMessages(BUNDLE_NAME, LaunchConfigurationsMessages.class);
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
index 00fc2d5..f1dd888 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2010 IBM Corporation and others.
+#  Copyright (c) 2000, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -9,7 +9,6 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 
-CommonTab_No_Encoding_Selected=Console encoding not selected
 CommonTab__Browse_6=&Browse...
 CommonTab__Common_15=&Common
 CommonTab_Display_in_favorites_menu__10=Display in favor&ites menu
@@ -25,10 +24,11 @@ CommonTab_13=Select a Resource:
 CommonTab_14=Select a resource to redirect output to:
 CommonTab_0=Save as
 CommonTab_1=Encoding
+CommonTab_15=The selected encoding is not supported.
 CommonTab_2=Defa&ult - inherited ({0})
 CommonTab_3=Oth&er
 CommonTab_4=Standard Input and Output
-CommonTab_5=&Allocate Console (necessary for input)
+CommonTab_5=&Allocate console (necessary for input)
 CommonTab_6=Fi&le:
 CommonTab_7=File Syste&m...
 CommonTab_8=No file specified for process output
@@ -53,7 +53,7 @@ LaunchConfigurationTabGroupViewer_2=- Press the 'New' button to create a configu
 LaunchConfigurationTabGroupViewer_3=- Edit or view an existing configuration by selecting it.
 LaunchConfigurationTabGroupViewer_4=- Press the 'Delete' button to remove the selected configuration.
 LaunchConfigurationTabGroupViewer_6=- Press the 'Duplicate' button to copy the selected configuration.
-LaunchConfigurationTabGroupViewer_5=Configure launch perspective settings from the <a>Perspectives</a> preference page.
+LaunchConfigurationTabGroupViewer_5=Configure launch perspective settings from the <a>'Perspectives'</a> preference page.
 LaunchConfigurationTabGroupViewer_8=- Press the 'Filter' button to configure filtering options.
 LaunchConfigurationTabGroupViewer_13=Select a supported <a>launch mode</a>.
 LaunchConfigurationTabGroupViewer_14=Mixed launch mode not supported: {0}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java
index 259883a..c99894f 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java
@@ -12,20 +12,23 @@
 package org.eclipse.debug.internal.ui.launchConfigurations;
 
 
-import java.util.ArrayList;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
 
 import org.eclipse.core.commands.contexts.Context;
 import org.eclipse.core.resources.ISaveContext;
 import org.eclipse.core.resources.ISaveParticipant;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.ILaunch;
@@ -39,6 +42,7 @@ import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
 import org.eclipse.debug.internal.core.LaunchManager;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
+import org.eclipse.debug.internal.ui.viewers.AsynchronousSchedulingRuleFactory;
 import org.eclipse.debug.internal.ui.views.ViewContextManager;
 import org.eclipse.debug.internal.ui.views.ViewContextService;
 import org.eclipse.debug.ui.IDebugUIConstants;
@@ -56,6 +60,7 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.WorkbenchException;
 import org.eclipse.ui.contexts.IContextActivation;
 import org.eclipse.ui.contexts.IContextService;
+import org.eclipse.ui.progress.UIJob;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -83,42 +88,7 @@ import com.ibm.icu.text.MessageFormat;
  * @see DebugUIPlugin
  */
 public class PerspectiveManager implements ILaunchListener, ISuspendTriggerListener, ISaveParticipant {
-		
-	/**
-	 * Lock used to synchronize perspective switching with view activation.
-	 * Clients wanting to perform an action after a perspective switch should
-	 * schedule jobs with the perspective manager via #schedulePostSwitch(..)
-	 */
-	public class PerspectiveSwitchLock {
 
-		private int fSwitch = 0;
-		private List fJobs = new ArrayList();
-		
-		public synchronized void startSwitch() {
-			fSwitch++;
-		}
-		
-		public synchronized void endSwitch() {
-			fSwitch--;
-			if (fSwitch == 0) {
-				Iterator jobs = fJobs.iterator();
-				while (jobs.hasNext()) {
-					((Job)jobs.next()).schedule();
-				}
-				fJobs.clear();
-			}
-		}
-				
-		public synchronized void schedulePostSwitch(Job job) {
-			if (fSwitch > 0) {
-				fJobs.add(job);	
-			} 
-			else {
-				job.schedule();
-			}
-		}
-	}
-	
 	/**
 	 * Describes exactly one perspective context, which is composed of an <code>ILaunchCOnfigurationType</code>, and set of modes
 	 * and an <code>ILaunchDelegate</code>. Perspective ids are then cached for a context based on mode set.
@@ -231,11 +201,6 @@ public class PerspectiveManager implements ILaunchListener, ISuspendTriggerListe
 	 */
 	private boolean fPrompting;
 	
-	/**
-	 * Lock to sync other jobs on the perspective switch
-	 */
-	private PerspectiveSwitchLock fPerspectiveSwitchLock = new PerspectiveSwitchLock();
-    
     /**
      * Maps each launch to its perspective context activation. These
      * are disabled when a launch terminates.
@@ -305,7 +270,6 @@ public class PerspectiveManager implements ILaunchListener, ISuspendTriggerListe
         if (trigger != null) {
             trigger.addSuspendTriggerListener(this);
         }
-	    fPerspectiveSwitchLock.startSwitch();
 		String perspectiveId = null;
 		// check event filters
 		try {
@@ -324,19 +288,19 @@ public class PerspectiveManager implements ILaunchListener, ISuspendTriggerListe
 		}
 		final String id = perspectiveId;
 		// switch
-		async(new Runnable() {
-			public void run() {
-				try {
-					IWorkbenchWindow window = getWindowForPerspective(id);
-					if (id != null && window != null && shouldSwitchPerspective(window, id, IInternalDebugUIConstants.PREF_SWITCH_TO_PERSPECTIVE)) {
-						switchToPerspective(window, id);
-					}
-				}
-				finally {
-					fPerspectiveSwitchLock.endSwitch();
+		Job switchJob = new UIJob(DebugUIPlugin.getStandardDisplay(), "Perspective Switch Job") { //$NON-NLS-1$
+			public IStatus runInUIThread(IProgressMonitor monitor) {
+				IWorkbenchWindow window = getWindowForPerspective(id);
+				if (id != null && window != null && shouldSwitchPerspective(window, id, IInternalDebugUIConstants.PREF_SWITCH_TO_PERSPECTIVE)) {
+					switchToPerspective(window, id);
 				}
+				return Status.OK_STATUS;
 			}
-		});
+		};
+		switchJob.setSystem(true);
+		switchJob.setPriority(Job.INTERACTIVE);
+		switchJob.setRule(AsynchronousSchedulingRuleFactory.getDefault().newSerialPerObjectRule(this));
+		switchJob.schedule();
 	}
 
 
@@ -405,14 +369,6 @@ public class PerspectiveManager implements ILaunchListener, ISuspendTriggerListe
 	 */
 	private void handleBreakpointHit(final ILaunch launch) {
 		
-		// Must be called here to indicate that the perspective
-		// may be switching.
-		// Putting this in the async UI call will cause the Perspective
-		// Manager to turn on the lock too late.  Consequently, LaunchViewContextListener
-		// may not know that the perspective will switch and will open view before
-		// the perspective switch.
-		fPerspectiveSwitchLock.startSwitch();
-		
 		String perspectiveId = null;
 		try {
 			perspectiveId = getPerspectiveId(launch);
@@ -424,86 +380,85 @@ public class PerspectiveManager implements ILaunchListener, ISuspendTriggerListe
 		// this has to be done in an async, such that the workbench
 		// window can be accessed
 		final String targetId = perspectiveId;
-		Runnable r = new Runnable() {
-			public void run() {
+		Job switchJob = new UIJob(DebugUIPlugin.getStandardDisplay(), "Perspective Switch Job") { //$NON-NLS-1$
+			public IStatus runInUIThread(IProgressMonitor monitor) {
 				IWorkbenchWindow window = null;
-				try{
-					if (targetId != null) {
-						// get the window to open the perspective in
+				if (targetId != null) {
+					// get the window to open the perspective in
+					window = getWindowForPerspective(targetId);
+					if (window == null) {
+						return Status.OK_STATUS;
+					}
+					
+					// switch the perspective if user preference is set
+					if (shouldSwitchPerspective(window, targetId, IInternalDebugUIConstants.PREF_SWITCH_PERSPECTIVE_ON_SUSPEND)) {
+						switchToPerspective(window, targetId);
 						window = getWindowForPerspective(targetId);
 						if (window == null) {
-							return;
+							return Status.OK_STATUS;
 						}
-						
-						// switch the perspective if user preference is set
-						if (shouldSwitchPerspective(window, targetId, IInternalDebugUIConstants.PREF_SWITCH_PERSPECTIVE_ON_SUSPEND)) {
-							switchToPerspective(window, targetId);
-							window = getWindowForPerspective(targetId);
-							if (window == null) {
-								return;
-							}
-						}
-						
-						// make sure the shell is active
-						Shell shell= window.getShell();
-						if (shell != null) {
-							if (DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IDebugUIConstants.PREF_ACTIVATE_WORKBENCH)) {
-								Shell dialog = getModalDialogOpen(shell);
-								if (shell.getMinimized()) {
-									shell.setMinimized(false);
-									if (dialog != null) {
-										dialog.setFocus();
-									}
-								}
-								// If a model dialog is open on the shell, don't activate it
-								if (dialog == null) {
-									shell.forceActive();
+					}
+					
+					// make sure the shell is active
+					Shell shell= window.getShell();
+					if (shell != null) {
+						if (DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IDebugUIConstants.PREF_ACTIVATE_WORKBENCH)) {
+							Shell dialog = getModalDialogOpen(shell);
+							if (shell.getMinimized()) {
+								shell.setMinimized(false);
+								if (dialog != null) {
+									dialog.setFocus();
 								}
 							}
+							// If a model dialog is open on the shell, don't activate it
+							if (dialog == null) {
+								shell.forceActive();
+							}
 						}
-	
-						// Activate a context for the launch
-						Object ca = fLaunchToContextActivations.get(launch);
-						if (ca == null) {
-							ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
-							if (launchConfiguration != null) {
-								try {
-									String type = launchConfiguration.getType().getIdentifier();
-									ViewContextService service = ViewContextManager.getDefault().getService(window);
-									if (service != null) {
-										IContextService contextServce = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
-										String[] ids = service.getEnabledPerspectives();
-										IContextActivation[] activations = new IContextActivation[ids.length];
-										for (int i = 0; i < ids.length; i++) {
-											// Include the word '.internal.' so the context is filtered from the key binding pref page (Bug 144019) also see ViewContextService.contextActivated()
-											Context context = contextServce.getContext(type + ".internal." + ids[i]); //$NON-NLS-1$
-											if (!context.isDefined()) {
-												context.define(context.getId(), null, null);
-											}
-											IContextActivation activation = contextServce.activateContext(context.getId());
-											activations[i] = activation;
+					}
+
+					// Activate a context for the launch
+					Object ca = fLaunchToContextActivations.get(launch);
+					if (ca == null) {
+						ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
+						if (launchConfiguration != null) {
+							try {
+								String type = launchConfiguration.getType().getIdentifier();
+								ViewContextService service = ViewContextManager.getDefault().getService(window);
+								if (service != null) {
+									IContextService contextServce = (IContextService) PlatformUI.getWorkbench().getAdapter(IContextService.class);
+									String[] ids = service.getEnabledPerspectives();
+									IContextActivation[] activations = new IContextActivation[ids.length];
+									for (int i = 0; i < ids.length; i++) {
+										// Include the word '.internal.' so the context is filtered from the key binding pref page (Bug 144019) also see ViewContextService.contextActivated()
+										Context context = contextServce.getContext(type + ".internal." + ids[i]); //$NON-NLS-1$
+										if (!context.isDefined()) {
+											context.define(context.getId(), null, null);
 										}
-										fLaunchToContextActivations.put(launch, activations);
+										IContextActivation activation = contextServce.activateContext(context.getId());
+										activations[i] = activation;
 									}
-								} catch (CoreException e) {
-									DebugUIPlugin.log(e);
+									fLaunchToContextActivations.put(launch, activations);
 								}
+							} catch (CoreException e) {
+								DebugUIPlugin.log(e);
 							}
 						}
-
-					}
-					if (window != null && DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IInternalDebugUIConstants.PREF_ACTIVATE_DEBUG_VIEW)) {
-						ViewContextService service = ViewContextManager.getDefault().getService(window);
-						service.showViewQuiet(IDebugUIConstants.ID_DEBUG_VIEW);
 					}
+
 				}
-				finally
-				{
-					fPerspectiveSwitchLock.endSwitch();
+				if (window != null && DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IInternalDebugUIConstants.PREF_ACTIVATE_DEBUG_VIEW)) {
+					ViewContextService service = ViewContextManager.getDefault().getService(window);
+					service.showViewQuiet(IDebugUIConstants.ID_DEBUG_VIEW);
 				}
+				return Status.OK_STATUS;
 			}
 		};
-		async(r);
+		
+		switchJob.setSystem(true);
+		switchJob.setPriority(Job.INTERACTIVE);
+		switchJob.setRule(AsynchronousSchedulingRuleFactory.getDefault().newSerialPerObjectRule(this));
+		switchJob.schedule();
 	}
 	
 	/**
@@ -1064,7 +1019,8 @@ public class PerspectiveManager implements ILaunchListener, ISuspendTriggerListe
 	 * @param job job to run after perspective switching
 	 */
 	public void schedulePostSwitch(Job job) {
-		fPerspectiveSwitchLock.schedulePostSwitch(job);
+		job.setRule(AsynchronousSchedulingRuleFactory.getDefault().newSerialPerObjectRule(this));
+		job.schedule();
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/RenderingBindings.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/RenderingBindings.java
index 3a4f15b..9a0f2b5 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/RenderingBindings.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/RenderingBindings.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@ package org.eclipse.debug.internal.ui.memory;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.EvaluationResult;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.ExpressionConverter;
@@ -184,7 +183,7 @@ class RenderingBindings extends AbstractMemoryRenderingBindingsProvider implemen
     private boolean isBound(IMemoryBlock block) {
         Expression expression = getExpression();
         if (expression != null) {
-            IEvaluationContext context = new EvaluationContext(null, block);
+            IEvaluationContext context = DebugUIPlugin.createEvaluationContext(block);
             try {
                 return expression.evaluate(context) == EvaluationResult.TRUE;
             } catch (CoreException e) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java
index 781c363..cecec56 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java
@@ -288,8 +288,8 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
 	
 	private class RenderingGoToAddressAction extends GoToAddressAction
 	{
-		public RenderingGoToAddressAction(AbstractBaseTableRendering rendering) {
-			super(rendering);
+		public RenderingGoToAddressAction(IMemoryRenderingContainer container, AbstractBaseTableRendering rendering) {
+			super(container, rendering);
 		}
 		
 		public void run() {
@@ -2038,7 +2038,7 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
 	protected void createActions() {
 		
 		fCopyToClipboardAction = new AsyncCopyTableRenderingAction(this, fTableViewer);
-		fGoToAddressAction = new RenderingGoToAddressAction(this);
+		fGoToAddressAction = new RenderingGoToAddressAction(getMemoryRenderingContainer(), this);
 		fResetMemoryBlockAction = new ResetToBaseAddressAction(this);
 		
 		fPrintViewTabAction = new AsyncPrintTableRenderingAction(this, fTableViewer);
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/BreakpointManagerContentProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/BreakpointManagerContentProvider.java
index b30014d..f4c4cb4 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/BreakpointManagerContentProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/BreakpointManagerContentProvider.java
@@ -1,5 +1,5 @@
 /*****************************************************************
- * Copyright (c) 2009, 2010 Texas Instruments and others
+ * Copyright (c) 2009, 2011 Texas Instruments and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956)
  *     IBM Corporation - ongoing enhancements and bug fixing
  *     Wind River Systems - ongoing enhancements and bug fixing
+ *     Wind River System (Randy Rohrbach) - non standard model breakpoint filtering (Bug 333517)
  *****************************************************************/
 package org.eclipse.debug.internal.ui.model.elements;
 
@@ -24,6 +25,7 @@ import java.util.Set;
 
 import org.eclipse.core.resources.IMarkerDelta;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
@@ -834,13 +836,20 @@ public class BreakpointManagerContentProvider extends ElementContentProvider
                     if (target != null) {
                         debugTargets.add(target);
                     }
-                }   
+                } else if (next instanceof IAdaptable) {
+                    // Allow non-standard debug model element return an IDebugTarget
+                    // element that could be used for implementing breakpoint filtering.
+                    // Bug 333517.
+    				IDebugTarget target = (IDebugTarget) ((IAdaptable)next).getAdapter(IDebugTarget.class);
+    				if (target != null) {
+    				    debugTargets.add(target);
+    				}
+    			}
             }
         }
         return debugTargets;
     }
 
-
     /**
      * Maximum number of breakpoint manager input objects that this provider 
      * will cache data for.  This method is called once upon class creation 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties
index f712d8e..b77d394 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -36,13 +36,13 @@ DebugPreferencePage_21=Open the associated perspective when an application suspe
 DebugPreferencePage_22=A&lways
 DebugPreferencePage_23=&Never
 DebugPreferencePage_24=&Prompt
-DebugPreferencePage_25=Skip &breakpoints during a 'Run to Line' operation.
+DebugPreferencePage_25=Skip &breakpoints during a 'Run to Line' operation
 DebugPreferencePage_26=A&ctivate the debug view when a breakpoint is hit
 DebugPreferencePage_27=Memor&y buffered color:
 DebugPreferencePage_28=Changed value bac&kground color:
-DebugPreferencePage_29=&Prompt for confirmation when deleting all breakpoints.
-DebugPreferencePage_30=Prompt for confirmation when deleting breakpoint con&tainers.
-DebugPreferencePage_5=Prompt for confirmation when deleting all e&xpressions.
+DebugPreferencePage_29=&Prompt for confirmation when deleting all breakpoints
+DebugPreferencePage_30=Prompt for confirmation when deleting breakpoint con&tainers
+DebugPreferencePage_5=Prompt for confirmation when deleting all e&xpressions
 
 LaunchingPreferencePage_1=&Build (if required) before launching
 LaunchingPreferencePage_2=Save required dirty editors before launching
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/LaunchConfigurationsPreferencePage.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/LaunchConfigurationsPreferencePage.java
index b0850b8..a40272f 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/LaunchConfigurationsPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/LaunchConfigurationsPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,9 +19,8 @@ import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationType;
 import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.internal.core.Preferences;
 import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
-import org.eclipse.debug.internal.core.LaunchManager;
+import org.eclipse.debug.internal.core.Preferences;
 import org.eclipse.debug.internal.ui.AbstractDebugCheckboxSelectionDialog;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
@@ -340,7 +339,7 @@ public class LaunchConfigurationsPreferencePage extends PreferencePage implement
 		}
 		fDeleteConfigs.setSelection(
 				Platform.getPreferencesService().getBoolean(DebugPlugin.getUniqueIdentifier(),
-				LaunchManager.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, true, null));
+				DebugPlugin.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, true, null));
 		//restore the tables' checked state
 		String[] types = getPreferenceStore().getString(IInternalDebugUIConstants.PREF_FILTER_TYPE_LIST).split("\\,"); //$NON-NLS-1$
 		TableItem[] items = fTable.getItems();
@@ -359,7 +358,7 @@ public class LaunchConfigurationsPreferencePage extends PreferencePage implement
 	 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
 	 */
 	protected void performDefaults() {
-		fDeleteConfigs.setSelection(Preferences.getDefaultBoolean(DebugPlugin.getUniqueIdentifier(), LaunchManager.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, true));
+		fDeleteConfigs.setSelection(Preferences.getDefaultBoolean(DebugPlugin.getUniqueIdentifier(), DebugPlugin.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, true));
 		FieldEditor editor = null;
 		for(int i = 0; i < fFieldEditors.size(); i++) {
 			editor = (FieldEditor)fFieldEditors.get(i);
@@ -379,7 +378,7 @@ public class LaunchConfigurationsPreferencePage extends PreferencePage implement
 		for(int i = 0; i < fFieldEditors.size(); i++) {
 			((FieldEditor)fFieldEditors.get(i)).store();
 		}
-		Preferences.setBoolean(DebugPlugin.getUniqueIdentifier(), LaunchManager.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, fDeleteConfigs.getSelection(), null);
+		Preferences.setBoolean(DebugPlugin.getUniqueIdentifier(), DebugPlugin.PREF_DELETE_CONFIGS_ON_PROJECT_DELETE, fDeleteConfigs.getSelection(), null);
 		//save table
 		String types = IInternalDebugCoreConstants.EMPTY_STRING;
 		TableItem[] items = fTable.getItems();
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java
index 50dc8a3..5a5a594 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,6 +73,7 @@ public class SourceLookupManager implements IWindowListener {
 	public void windowClosed(IWorkbenchWindow window) {
 		SourceLookupService service = (SourceLookupService) fServices.get(window);
 		if (service != null) {
+			fServices.remove(window);
 			service.dispose();
 		}
 	}
@@ -81,8 +82,11 @@ public class SourceLookupManager implements IWindowListener {
 	 * @see org.eclipse.ui.IWindowListener#windowOpened(org.eclipse.ui.IWorkbenchWindow)
 	 */
 	public void windowOpened(IWorkbenchWindow window) {
-		SourceLookupService service = new SourceLookupService(window);
-		fServices.put(window, service);
+		SourceLookupService service = (SourceLookupService) fServices.get(window);
+		if (service == null) {
+			service = new SourceLookupService(window);
+			fServices.put(window, service);
+		}
 	}
 	
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java
index b2d28c0..b4c92f3 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
-  * Copyright (c) 2005, 2008 IBM Corporation and others.
+  * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class SourceLookupService implements IDebugContextListener, ISourceDispla
 	
 	public void dispose() {
 		fDebugContextService.removeDebugContextListener(this);
+		fWindow = null;
 	}
 
 	public synchronized void debugContextChanged(DebugContextEvent event) {
@@ -60,6 +61,8 @@ public class SourceLookupService implements IDebugContextListener, ISourceDispla
 	 * @param force
 	 */
 	protected synchronized void displaySource(ISelection selection, IWorkbenchPart part, boolean force) {
+	    if (fWindow == null) return; // disposed
+	    
 		if (selection instanceof IStructuredSelection) {
 			IStructuredSelection structuredSelection = (IStructuredSelection)selection;
 			if (structuredSelection.size() == 1) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/PromptingResolver.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/PromptingResolver.java
index d1c3bb4..fc00f40 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/PromptingResolver.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/PromptingResolver.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 Matt Conway and others.
+ * Copyright (c) 2000, 2006 Matt Conway and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.java
index 6cad26f..3f98f54 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.java
@@ -43,6 +43,7 @@ public class StringSubstitutionMessages extends NLS {
 
 	public static String StringPromptExpander_0;
 
+	public static String StringVariableSelectionDialog_1;
 	public static String StringVariableSelectionDialog_2;
 	public static String StringVariableSelectionDialog_3;
 	public static String StringVariableSelectionDialog_6;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.properties
index eb56586..8f00c59 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.properties
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/stringsubstitution/StringSubstitutionMessages.properties
@@ -35,6 +35,7 @@ ResourceSelector_0=Select Resource
 SelectedResourceResolver_0=Unable to resource a selected resource: {0}
 StringPromptExpander_0=Variable input
 
+StringVariableSelectionDialog_1=String Substitution
 StringVariableSelectionDialog_2=Select Variable
 StringVariableSelectionDialog_3=&Choose a variable (? = any character, * = any string):
 StringVariableSelectionDialog_6=&Argument:
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousSchedulingRuleFactory.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousSchedulingRuleFactory.java
index 5a9218c..a6cfaf8 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousSchedulingRuleFactory.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousSchedulingRuleFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,7 @@ package org.eclipse.debug.internal.ui.viewers;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 
 /**
- * Scheduling rule factory for asycn operations.
+ * Scheduling rule factory for asynchronous operations.
  * 
  * @since 3.2
  */
@@ -76,7 +76,7 @@ public class AsynchronousSchedulingRuleFactory {
 	}
 	
 	/**
-	 * Returns a scheulding rule that allows all jobs with an instance
+	 * Returns a scheduling rule that allows all jobs with an instance
 	 * of the rule to run one at a time.
 	 *  
 	 * @return scheduling rule
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
index c601a4b..7f149d0 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.resource.CompositeImageDescriptor;
 import org.eclipse.jface.util.Geometry;
 import org.eclipse.jface.viewers.ISelection;
@@ -23,6 +24,7 @@ import org.eclipse.jface.viewers.TreePath;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.accessibility.AccessibleAdapter;
 import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.ControlAdapter;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.events.DisposeEvent;
@@ -151,8 +153,16 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 		}
 	}
 
-	private static final int DROP_DOWN_HIGHT= 300;
-	private static final int DROP_DOWN_WIDTH= 500;
+	// Workaround for bug 258196: set the minimum size to 500 because on Linux
+	// the size is not adjusted correctly in a virtual tree.
+    private static final int DROP_DOWN_MIN_WIDTH= 500;
+    private static final int DROP_DOWN_MAX_WIDTH= 501;
+    
+    private static final int DROP_DOWN_DEFAULT_MIN_HEIGHT= 300;
+    private static final int DROP_DOWN_DEFAULT_MAX_HEIGHT= 500;
+
+    private static final String DIALOG_SETTINGS= "BreadcrumbItemDropDown"; //$NON-NLS-1$
+    private static final String DIALOG_HEIGHT= "height"; //$NON-NLS-1$
 
 	private final BreadcrumbItem fParent;
 	private final Composite fParentComposite;
@@ -161,6 +171,7 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 	private boolean fMenuIsShown;
 	private boolean fEnabled;
 	private Shell fShell;
+    private boolean fIsResizingProgrammatically;
 
 	public BreadcrumbItemDropDown(BreadcrumbItem parent, Composite composite) {
 		fParent= parent;
@@ -265,6 +276,20 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 		if (DEBUG)
 			System.out.println("	creating new shell"); //$NON-NLS-1$
 
+	      
+        fShell.addControlListener(new ControlAdapter() {
+            /*
+             * @see org.eclipse.swt.events.ControlAdapter#controlResized(org.eclipse.swt.events.ControlEvent)
+             */
+            public void controlResized(ControlEvent e) {
+                if (fIsResizingProgrammatically)
+                    return;
+                
+                Point size= fShell.getSize();
+                getDialogSettings().put(DIALOG_HEIGHT, size.y);
+            }
+        });
+
 		GridLayout layout= new GridLayout(1, false);
 		layout.marginHeight= 0;
 		layout.marginWidth= 0;
@@ -386,6 +411,22 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 		});
 	}
 
+	private IDialogSettings getDialogSettings() {
+	    IDialogSettings javaSettings= DebugUIPlugin.getDefault().getDialogSettings();
+	    IDialogSettings settings= javaSettings.getSection(DIALOG_SETTINGS);
+	    if (settings == null)
+	        settings= javaSettings.addNewSection(DIALOG_SETTINGS);
+	    return settings;
+	}
+	    
+	private int getMaxHeight() {
+	    try {
+	        return getDialogSettings().getInt(DIALOG_HEIGHT);
+	    } catch (NumberFormatException e) {
+	        return DROP_DOWN_DEFAULT_MAX_HEIGHT;
+	    }
+	}
+
 	/**
 	 * Calculates a useful size for the given shell.
 	 *
@@ -397,12 +438,8 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 		Rectangle toolbarBounds= fToolBar.getBounds();
 
 		Point size = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT, false);
-		int height= Math.min(size.y, DROP_DOWN_HIGHT);
-		// TODO: Because of bug 258196 the drop down does not resize correctly 
-		// on GTK.  As a workaround temporarily increase the initial width of 
-		// the drop down to 500.
-		//int width= Math.max(Math.min(size.x, DROP_DOWN_WIDTH), 250);
-        int width= Math.max(Math.min(size.x, DROP_DOWN_WIDTH), 500);
+		int height= Math.max(Math.min(size.y, getMaxHeight()), DROP_DOWN_DEFAULT_MIN_HEIGHT);
+		int width= Math.max(Math.min(size.x, DROP_DOWN_MAX_WIDTH), DROP_DOWN_MIN_WIDTH);
 
 		int imageBoundsX= 0;
 		if (fParent.getImage() != null) {
@@ -431,7 +468,12 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 			pt.x= monitor.x;
 
 		shell.setLocation(pt);
-		shell.setSize(width, height);
+        fIsResizingProgrammatically= true;
+        try {
+            shell.setSize(width, height);
+        } finally {
+            fIsResizingProgrammatically= false;
+        }
 	}
 
 	/**
@@ -471,7 +513,7 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 
 	/**
 	 * Set the size of the given shell such that more content can be shown. The shell size does not
-	 * exceed {@link #DROP_DOWN_HIGHT} and {@link #DROP_DOWN_WIDTH}.
+     * exceed a user-configurable maximum.
 	 *
 	 * @param shell the shell to resize
 	 */
@@ -480,27 +522,33 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 		int currentWidth= size.x;
 		int currentHeight= size.y;
 
-		if (currentHeight >= DROP_DOWN_HIGHT && currentWidth >= DROP_DOWN_WIDTH)
+        int maxHeight= getMaxHeight();
+        
+        if (currentHeight >= maxHeight && currentWidth >= DROP_DOWN_MAX_WIDTH)
 			return;
 
 		Point preferedSize= shell.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 
 		int newWidth;
-		if (currentWidth >= DROP_DOWN_WIDTH) {
+        if (currentWidth >= DROP_DOWN_MAX_WIDTH) {
 			newWidth= currentWidth;
 		} else {
-			newWidth= Math.min(Math.max(preferedSize.x, currentWidth), DROP_DOWN_WIDTH);
+		    // Workaround for bug 319612: Do not resize width below the 
+		    // DROP_DOWN_MIN_WIDTH.  This can happen because the Shell.getSize()
+		    // is incorrectly small on Linux.
+            newWidth= Math.min(Math.max(Math.max(preferedSize.x, currentWidth), DROP_DOWN_MIN_WIDTH), DROP_DOWN_MAX_WIDTH);
 		}
 		int newHeight;
-		if (currentHeight >= DROP_DOWN_HIGHT) {
+        if (currentHeight >= maxHeight) {
 			newHeight= currentHeight;
 		} else {
-			newHeight= Math.min(Math.max(preferedSize.y, currentHeight), DROP_DOWN_HIGHT);
+            newHeight= Math.min(Math.max(preferedSize.y, currentHeight), maxHeight);
 		}
 
 		if (newHeight != currentHeight || newWidth != currentWidth) {
 			shell.setRedraw(false);
 			try {
+                fIsResizingProgrammatically= true;
 				shell.setSize(newWidth, newHeight);
 				
 				Point location = shell.getLocation();
@@ -515,6 +563,7 @@ class BreadcrumbItemDropDown implements IBreadcrumbDropDownSite {
 	                shell.setLocation(newLocation.x, newLocation.y);
 				}
 			} finally {
+                fIsResizingProgrammatically= false;
 				shell.setRedraw(true);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java
index 910b640..c626768 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java
@@ -111,7 +111,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
                 int height= fContainer.getClientArea().height;
 
                 if (fGradientBackground == null || fGradientBackground.getBounds().height != height) {
-                    Image image= createGradientImage(height, event.display);
+                    Image image= height == 0 ? null : createGradientImage(height, event.display);
                     fContainer.setBackgroundImage(image);
 
                     if (fGradientBackground != null)
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/TreeViewerDropDown.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/TreeViewerDropDown.java
index 2b1b5b5..bb4231a 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/TreeViewerDropDown.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/TreeViewerDropDown.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Wind River Systems and others.
+ * Copyright (c) 2009, 2010 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Wind River Systems - initial API and implementation
+ *     IBM Corporation - ongoing bug fixes and enhancements
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.viewers.breadcrumb;
 
@@ -139,6 +140,10 @@ public abstract class TreeViewerDropDown {
             public void mouseMove(MouseEvent e) {
                 if (tree.equals(e.getSource())) {
                     Object o= tree.getItem(new Point(e.x, e.y));
+					if (fLastItem == null ^ o == null) {
+						tree.setCursor(o == null ? null : tree.getDisplay()
+								.getSystemCursor(SWT.CURSOR_HAND));
+					}
                     if (o instanceof TreeItem) {
                         TreeItem currentItem= (TreeItem) o;
                         if (!o.equals(fLastItem)) {
@@ -184,6 +189,8 @@ public abstract class TreeViewerDropDown {
                                 }
                             }
                         }
+					} else if (o == null) {
+						fLastItem = null;
                     }
                 }
             }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java
index f856855..ffa062c 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ import org.eclipse.ui.progress.UIJob;
 /**
  * @since 3.3
  */
-class ElementCompareRequest extends MementoUpdate implements IElementCompareRequest {
+public class ElementCompareRequest extends MementoUpdate implements IElementCompareRequest {
 
 	private boolean fEqual;
     private final int fModelIndex;
@@ -74,7 +74,7 @@ class ElementCompareRequest extends MementoUpdate implements IElementCompareRequ
 		job.schedule();
 	}
 	
-	boolean isEqual() {
+	public boolean isEqual() {
 		return fEqual;
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java
index 1bbb00b..bad08fb 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Wind River Systems and others.
+ * Copyright (c) 2009, 2010 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateList
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.jface.viewers.ILazyTreePathContentProvider;
 import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.Viewer;
 
 /** 
  * {@link TreeModelViewer} content provider interface.
@@ -192,4 +193,16 @@ public interface ITreeModelContentProvider extends ILazyTreePathContentProvider
      * @param flags Flags indicating the changes to cancel.
      */
     public void cancelRestore(TreePath path, int flags);
+    
+    /**
+     * Notifies the content provider that a client called {@link Viewer#setInput(Object)}, 
+     * and the viewer input is about to change.  
+     *  
+     * @param viewer The viewer that uses this content provider.
+     * @param oldInput Old input object.
+     * @param newInput New input object.
+     * 
+     * @since 3.7
+     */
+    public void inputAboutToChange(ITreeModelContentProviderTarget viewer, Object oldInput, Object newInput);
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java
index b342feb..1f356c1 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckboxModelProxy;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation2;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor;
@@ -1217,10 +1218,23 @@ public class InternalTreeModelViewer extends TreeViewer
 		return super.hasFilters();
 	}
 	
+	protected void unmapAllElements() {
+	    // Do nothing when called from StructuredViewer.setInput(), to avoid 
+	    // clearing elements before viewer state is saved.
+	    // Bug 326917
+	    if (getControl().isDisposed()) {
+	        unmapAllElements();
+	    }
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#inputChanged(java.lang.Object, java.lang.Object)
 	 */
 	protected void inputChanged(Object input, Object oldInput) {
+        ((ITreeModelContentProvider)getContentProvider()).inputAboutToChange(this, oldInput, input);
+        // Clear items map now that we've called inputAboutToChange.
+        // Bug 326917
+        super.unmapAllElements();
 		super.inputChanged(input, oldInput);
 		resetColumns(input);
 	}
@@ -1312,7 +1326,7 @@ public class InternalTreeModelViewer extends TreeViewer
 	
 	/**
 	 * Sets the id's of visible columns, or <code>null</code> to set default columns.
-	 * Only effects the current column presentation.
+	 * Only affects the current column presentation.
 	 * 
 	 * @param ids visible columns
 	 */
@@ -1433,8 +1447,8 @@ public class InternalTreeModelViewer extends TreeViewer
     		setColumnProperties(null);
     	}
     	
-
-    	int avg = tree.getSize().x;
+    	int treeWidgetWidth = tree.getSize().x;
+    	int avg = treeWidgetWidth;
     	if (visibleColumnIds != null)
     		avg /= visibleColumnIds.length;
     	
@@ -1444,24 +1458,32 @@ public class InternalTreeModelViewer extends TreeViewer
                     Tree tree2 = getTree();
                     String[] visibleColumns = getVisibleColumns();
                     if (visibleColumns != null) {
-						int avg1 = tree2.getSize().x / visibleColumns.length;
-	                    initColumns(avg1);
+                    	int treeWidgetWidth1 = tree2.getSize().x;
+						int avg1 = treeWidgetWidth1 / visibleColumns.length;
+	                    initColumns(avg1, treeWidgetWidth1, visibleColumns);
                     }
                     tree2.removePaintListener(this);
                 }
             });
         } else {
-            initColumns(avg);
+            initColumns(avg, treeWidgetWidth, visibleColumnIds);
         }
     }
 
-    private void initColumns(int widthHint) {
+    private void initColumns(int widthHint, int treeWidgetWidth, String[] visibleColumnIds) {
         TreeColumn[] columns = getTree().getColumns();
         for (int i = 0; i < columns.length; i++) {
             TreeColumn treeColumn = columns[i];
-            Integer width = (Integer) fColumnSizes.get(treeColumn.getData());
+            Object colData = treeColumn.getData();
+            String columnId = colData instanceof String ? (String) colData : null;            
+            Integer width = (Integer) fColumnSizes.get(colData);
             if (width == null) {
-                treeColumn.setWidth(widthHint);
+            	int ans = getInitialColumnWidth(columnId, treeWidgetWidth, visibleColumnIds);
+            	if (ans == -1) {
+            		treeColumn.setWidth(widthHint);
+            	} else {
+            		treeColumn.setWidth(ans);
+            	}
             } else {
                 treeColumn.setWidth(width.intValue());
             }
@@ -1499,7 +1521,26 @@ public class InternalTreeModelViewer extends TreeViewer
 		return null;
 	}    
 	
-    /**
+	/**
+	 * Returns initial column width of a given column, or -1
+	 * @param columnId column Id
+	 * @param treeWidgetWidth tree widget width
+	 * @param visibleColumnIds visible columns
+	 *  
+	 * @return column width
+	 */
+	public int getInitialColumnWidth(String columnId, int treeWidgetWidth, String[] visibleColumnIds) {
+		if (isShowColumns()) {
+			IColumnPresentation presentation = getColumnPresentation();
+			if (presentation instanceof IColumnPresentation2) {
+				int ans = ((IColumnPresentation2) presentation).getInitialColumnWidth(columnId, treeWidgetWidth, visibleColumnIds);
+				return ans;
+			}
+		}
+		return -1;
+	}
+
+	/**
      * Persists column sizes in cache
      */
     protected void persistColumnSizes() { 
@@ -2288,13 +2329,13 @@ public class InternalTreeModelViewer extends TreeViewer
             items = tree.getItems(); 
         } else if (w instanceof TreeItem) {
             TreeItem item = (TreeItem)w;
-            int itemCount = item.getItemCount();
-            delta.setChildCount(((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, itemCount));
             if (item.getExpanded()) {
+                int itemCount = item.getData() != null ? item.getItemCount() : -1;
+                delta.setChildCount(((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, itemCount));
                 if ((flagsToSave & IModelDelta.EXPAND) != 0) {
                     delta.setFlags(delta.getFlags() | IModelDelta.EXPAND);
                 }
-            } else if ((flagsToSave & IModelDelta.COLLAPSE) != 0 && itemCount > 0){
+            } else if ((flagsToSave & IModelDelta.COLLAPSE) != 0){
                 delta.setFlags(delta.getFlags() | IModelDelta.COLLAPSE);
             }
             
@@ -2318,12 +2359,11 @@ public class InternalTreeModelViewer extends TreeViewer
         if (element != null) {
             boolean expanded = item.getExpanded();
             boolean selected = set.contains(item);
-            int itemCount = item.getItemCount();
             int flags = IModelDelta.NO_CHANGE;
             if (expanded && (flagsToSave & IModelDelta.EXPAND) != 0) {
                 flags = flags | IModelDelta.EXPAND;
             } 
-            if (!expanded && (flagsToSave & IModelDelta.COLLAPSE) != 0 && itemCount > 0) {
+            if (!expanded && (flagsToSave & IModelDelta.COLLAPSE) != 0) {
                 flags = flags | IModelDelta.COLLAPSE;
             }
             if (selected && (flagsToSave & IModelDelta.SELECT) != 0) {
@@ -2332,9 +2372,13 @@ public class InternalTreeModelViewer extends TreeViewer
             if (expanded || flags != IModelDelta.NO_CHANGE) {
                 int modelIndex = ((ITreeModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, index);
                 TreePath elementPath = parentPath.createChildPath(element);
-                int numChildren = ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(elementPath, itemCount);
-                ModelDelta childDelta = delta.addNode(element, modelIndex, flags, numChildren);
+                ModelDelta childDelta = delta.addNode(element, modelIndex, flags, -1);
                 if (expanded) {
+                    // Only get the item count if the item is expanded.  Getting
+                    // item count triggers an update of the element (bug 335734).
+                    int itemCount = item.getItemCount();                
+                    int numChildren = ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(elementPath, itemCount);
+                    childDelta.setChildCount(numChildren);
                     TreeItem[] items = item.getItems();
                     for (int i = 0; i < items.length; i++) {
                         doSaveElementState(elementPath, childDelta, items[i], set, i, flagsToSave);
@@ -2442,7 +2486,7 @@ public class InternalTreeModelViewer extends TreeViewer
 	            	    item.setData(PREV_CHECKED_KEY, new Boolean(checked));
 	            	}
 	            } else {
-		            ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.SELECT);
+		            ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.SELECT|IModelDelta.REVEAL);
 	    		}
 	        }
         }
@@ -2451,16 +2495,18 @@ public class InternalTreeModelViewer extends TreeViewer
 	protected void handleTreeExpand(TreeEvent event) {
         super.handleTreeExpand(event);
         IContentProvider contentProvider = getContentProvider();
-        if (contentProvider instanceof TreeModelContentProvider) {
+        if (contentProvider instanceof TreeModelContentProvider && event.item.getData() != null) {
             TreePath path = getTreePathFromItem((TreeItem)event.item);
             ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.COLLAPSE);
+        } else {
+            System.out.println("dude");
         }
 	}
 	
 	protected void handleTreeCollapse(TreeEvent event) {
 	    super.handleTreeCollapse(event);
         IContentProvider contentProvider = getContentProvider();
-        if (contentProvider instanceof TreeModelContentProvider) {
+        if (contentProvider instanceof TreeModelContentProvider && event.item.getData() != null) {
             TreePath path = getTreePathFromItem((TreeItem)event.item);
             ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.EXPAND);
         }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java
index dff4d63..301bc38 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java
@@ -208,6 +208,8 @@ public class InternalVirtualTreeModelViewer extends Viewer
 
     public void setInput(Object input) {
         Object oldInput = fInput;
+        getContentProvider().inputAboutToChange(this, oldInput  , input);
+        fItemsMap.clear();
         getContentProvider().inputChanged(this, oldInput, input);
         fInput = input;
         fTree.setData(fInput);
@@ -1125,7 +1127,7 @@ public class InternalVirtualTreeModelViewer extends Viewer
     
     /**
      * Sets the id's of visible columns, or <code>null</code> to set default columns.
-     * Only effects the current column presentation.
+     * Only affects the current column presentation.
      * 
      * @param ids visible columns
      */
@@ -1306,8 +1308,9 @@ public class InternalVirtualTreeModelViewer extends Viewer
             childCount = items[0].getItemCount();
             // Mimic the jface viewer behavior which returns 1 for child count
             // for an item that has children but is not yet expanded.
-            if (childCount == -1 && items[0].hasItems()) {
-                childCount = 1;
+            // Return 0, if we do not know if the item has children.
+            if (childCount == -1) {
+                childCount = items[0].hasItems() ? 1 : 0;
             } 
         }   
         return childCount;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java
index ab991f6..764eecc 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,6 @@ class LabelUpdate extends Request implements ILabelUpdate, ICheckUpdate {
 	private String[] fLabels;
 	private FontData[] fFontDatas;
 	private TreeModelLabelProvider fProvider;
-	private ITreeModelLabelProviderTarget fTreeViewer;
 	private int fNumColumns; 
 	private IPresentationContext fContext;
 	private Object fViewerInput;
@@ -50,7 +49,7 @@ class LabelUpdate extends Request implements ILabelUpdate, ICheckUpdate {
 	 * @param columnIds column identifiers or <code>null</code>
 	 * @param context presentation context
 	 */
-	public LabelUpdate(Object viewerInput, TreePath elementPath, TreeModelLabelProvider provider, ITreeModelLabelProviderTarget treeViewer, String[] columnIds, IPresentationContext context) {
+	public LabelUpdate(Object viewerInput, TreePath elementPath, TreeModelLabelProvider provider, String[] columnIds, IPresentationContext context) {
 		fContext = context;
 		fViewerInput = viewerInput;
 		fElementPath = elementPath;
@@ -61,7 +60,6 @@ class LabelUpdate extends Request implements ILabelUpdate, ICheckUpdate {
 			fNumColumns = columnIds.length;
 		}
 		fLabels = new String[fNumColumns];
-		fTreeViewer = treeViewer;
 	}
 
 	/* (non-Javadoc)
@@ -155,9 +153,7 @@ class LabelUpdate extends Request implements ILabelUpdate, ICheckUpdate {
 	 * Applies settings to viewer cell
 	 */
 	public void update() {
-	    fTreeViewer.setElementData(fElementPath, fNumColumns, fLabels, fImageDescriptors, fFontDatas, fForegrounds, fBackgrounds);
-		if (fTreeViewer instanceof ITreeModelCheckProviderTarget)
-			((ITreeModelCheckProviderTarget) fTreeViewer).setElementChecked(fElementPath, fChecked, fGrayed);
+	    fProvider.setElementData(fElementPath, fNumColumns, fLabels, fImageDescriptors, fFontDatas, fForegrounds, fBackgrounds, fChecked, fGrayed);
 
 		fProvider.updateComplete(this);
 	}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java
index b7cb288..8ba3666 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     Pawel Piech - Wind River - Bug 205335: ModelContentProvider does not cancel stale updates when switching viewer input
  *     Wind River Systems - Fix for viewer state save/restore [188704] 
  *     Pawel Piech (Wind River) - added support for a virtual tree model viewer (Bug 242489)
+ *     Dorin Ciuca - Top index fix (Bug 324100)
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.viewers.model;
 
@@ -24,8 +25,8 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.ISafeRunnable;
@@ -116,13 +117,13 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
     /**
      * Map of updates in progress: element path -> list of requests
      */
-    private Map fRequestsInProgress = new HashMap();
+    protected Map fRequestsInProgress = new HashMap();
 
     /**
      * Map of dependent requests waiting for parent requests to complete:
      * element path -> list of requests
      */
-    private Map fWaitingRequests = new HashMap();
+    protected Map fWaitingRequests = new HashMap();
 
     /**
      * Map of viewer states keyed by viewer input mementos
@@ -132,7 +133,7 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
     /**
      * Pending viewer state to be restored
      */
-    private ModelDelta fPendingState = null;
+    protected ModelDelta fPendingState = null;
 
     /**
      * Flag indicating that the content provider is performing
@@ -140,6 +141,25 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
      */
     private boolean fInStateRestore = false; 
     
+    protected interface IPendingRevealDelta extends IViewerUpdateListener {
+    	/**
+    	 * 
+    	 * @return delta that should be revealed
+    	 */
+    	ModelDelta getDelta();
+    	
+    	/**
+    	 * Dispose the pending operation
+    	 */
+    	void dispose();
+    }
+    
+    /**
+     * Postpone restoring REVEAL element until the current updates are complete.
+     * See bug 324100
+     */
+    protected IPendingRevealDelta fPendingSetTopItem = null;
+    
     private static class CompareRequestKey {
         CompareRequestKey(TreePath path, IModelDelta delta) {
             fPath = path;
@@ -296,6 +316,16 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
         return fViewer == null;
     }
 
+    public synchronized void inputAboutToChange(ITreeModelContentProviderTarget viewer, Object oldInput, Object newInput) {
+        if (newInput != oldInput && oldInput != null) {
+            for (Iterator itr = fCompareRequestsInProgress.values().iterator(); itr.hasNext();) {
+                ((ElementCompareRequest) itr.next()).cancel();
+                itr.remove();
+            }
+            saveViewerState(oldInput);
+        }
+    }
+    
     /*
      * (non-Javadoc)
      * 
@@ -305,13 +335,6 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
      */
     public synchronized void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
         fViewer = (ITreeModelContentProviderTarget) viewer;
-        if (oldInput != null) {
-            for (Iterator itr = fCompareRequestsInProgress.values().iterator(); itr.hasNext();) {
-                ((ElementCompareRequest) itr.next()).cancel();
-                itr.remove();
-            }
-            saveViewerState(oldInput);
-        }
         if (newInput != oldInput) {
             cancelSubtreeUpdates(TreePath.EMPTY);
             disposeAllModelProxies();
@@ -476,19 +499,27 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
         boolean checkChildrenRealized);
 
     public void cancelRestore(final TreePath path, final int flags) {
-        if (fPendingState == null) {
-        	// Nothing to do
-            return;
-        }
-
         if (fInStateRestore) {
         	// If we are currently processing pending state already, ignore 
         	// cancelRestore requests.  These requests may be triggered in the viewer
         	// by changes to the tree state (Bug 295585).
         	return;
         }
+
+        if ((flags & IModelDelta.REVEAL) != 0 && fPendingSetTopItem != null) {
+            fPendingSetTopItem.dispose();
+            return;
+        }
+
+        // Nothing else to do 
+        if (fPendingState == null) {
+            return;
+        }
         
         if ((flags & (IModelDelta.SELECT | IModelDelta.REVEAL)) != 0) {
+        	// If we're canceling reveal and this is waiting for updates to complete
+        	// then just cancel it and return
+        	
             // If we're canceling select or reveal, cancel it for all of pending deltas
             final int mask = flags & (IModelDelta.SELECT | IModelDelta.REVEAL);
             fPendingState.accept(new IModelDeltaVisitor() {
@@ -510,7 +541,16 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
             // For other flags (EXPAND/COLLAPSE), cancel only from the matching path.
             fPendingState.accept(new IModelDeltaVisitor() {
                 public boolean visit(IModelDelta delta, int depth) {
-                    if (depth == path.getSegmentCount()) {
+                    if (depth < path.getSegmentCount()) {
+                        // Descend until we reach a matching depth.
+                        TreePath deltaPath = getViewerTreePath(delta);
+                        if (path.startsWith(deltaPath, null)) {
+                            return true;
+                        } else {
+                            return false;
+                        }
+                    }
+                    else if (depth == path.getSegmentCount()) {
                         TreePath deltaPath = getViewerTreePath(delta);
                         if (deltaPath.equals(path)) {
                             int deltaFlags = delta.getFlags();
@@ -521,10 +561,24 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
                                 }
                             }
                             ((ModelDelta)delta).setFlags(newFlags);
-                        }
+                            if ((flags & IModelDelta.EXPAND) != 0) {
+                                // Descend delta to clear the EXPAND flags of a canceled expand
+                                return true;
+                            }
+                        } 
                         return false;
-                    } 
-                    return true;
+                    } else {
+                        // We're clearing out flags of a matching sub-tree
+                        // assert (flags & IModelDelta.EXPAND) != 0;
+                        
+                        if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+                            if (delta.getFlags() != IModelDelta.NO_CHANGE) {
+                                System.out.println("\tCANCEL: " + delta.getElement() + "(" + Integer.toHexString(delta.getFlags()) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                            }
+                        }
+                        ((ModelDelta)delta).setFlags(IModelDelta.NO_CHANGE);
+                        return true;
+                    }
                 }
             });
         }
@@ -768,6 +822,39 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
                 System.out.println("\tSAVE DELTA FROM VIEW:\n" + saveDeltaRoot); //$NON-NLS-1$
             }
 
+            // check if pending restore reveal
+            if (fPendingSetTopItem != null) {
+            	// set back the pending reveal flag
+            	ModelDelta revealDelta = fPendingSetTopItem.getDelta();
+            	revealDelta.setFlags(revealDelta.getFlags() | IModelDelta.REVEAL);
+            	
+            	fPendingSetTopItem.dispose();
+            	
+            	ModelDelta saveDeltaNode = findSubDeltaParent(saveDeltaRoot, revealDelta);
+            	if (saveDeltaNode != null) {
+            		clearRevealFlag(saveDeltaRoot);
+            		boolean childFounded = false;
+            		for (int i = 0; i < saveDeltaNode.getChildDeltas().length; i++) {
+            			ModelDelta child = (ModelDelta)saveDeltaNode.getChildDeltas()[i]; 
+            			if (deltasEqual(child, revealDelta)) {
+            				child.setFlags(child.getFlags() | IModelDelta.REVEAL);
+            				childFounded = true;
+            				break;
+            			}
+            		}
+            		
+            		// the node should be added if not found
+            		if (!childFounded) {
+            			saveDeltaNode.setChildCount(revealDelta.getParentDelta().getChildCount());
+                        copyIntoDelta(revealDelta, saveDeltaNode);
+            		}
+                } else {
+                    if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+                        System.out.println("\tSKIPPED: " + revealDelta.getElement()); //$NON-NLS-1$
+                    }
+            	}
+            }
+            
             if (fPendingState != null) {
                 // If the restore for the current input was never completed,
                 // preserve
@@ -1325,6 +1412,8 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
         updateNodes(deltaArray, mask & ITreeModelContentProvider.UPDATE_MODEL_DELTA_FLAGS
             & ~(IModelDelta.REMOVED | IModelDelta.UNINSTALL));
         updateNodes(deltaArray, mask & ITreeModelContentProvider.CONTROL_MODEL_DELTA_FLAGS);
+        
+        checkIfRestoreComplete();
     }
 
     /**
@@ -1755,11 +1844,17 @@ abstract class ModelContentProvider implements IContentProvider, IModelChangedLi
         CheckState state = new CheckState();
         fPendingState.accept(state);
         if (state.isComplete()) {
-            if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
-                System.out.println("STATE RESTORE COMPELTE: " + fPendingState); //$NON-NLS-1$
+            // notify restore complete if REVEAL was restored also, otherwise
+            // postpone until then. 
+            if (fPendingSetTopItem == null) {
+                if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+                    System.out.println("STATE RESTORE COMPELTE: " + fPendingState); //$NON-NLS-1$
+                }
+
+                notifyStateUpdate(fPendingState.getElement(), STATE_RESTORE_SEQUENCE_COMPLETE, null);
             }
-            notifyStateUpdate(fPendingState.getElement(), STATE_RESTORE_SEQUENCE_COMPLETE, null);
-            fPendingState = null;
+            
+            fPendingState = null;            
         }
     }
 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java
index 486d89f..6d46f29 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java
@@ -466,6 +466,10 @@ public class SubTreeModelViewer extends TreeModelViewer {
         public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
             fBaseProvider.inputChanged(fDelegatingViewer, oldInput, newInput);
         }
+        
+        public void inputAboutToChange(ITreeModelContentProviderTarget viewer, Object oldInput, Object newInput) {
+            fBaseProvider.inputAboutToChange(viewer, oldInput, newInput);
+        }
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeCursor.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeCursor.java
index 0aeb59a..2b420b2 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeCursor.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeCursor.java
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.viewers.model;
 
-import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.GC;
@@ -27,112 +27,115 @@ import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeColumn;
 import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.swt.widgets.TypedListener;
+import org.eclipse.swt.widgets.Widget;
+
+import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
 
 /**
- * A TreeCursor provides a way for the user to navigate around a Tree with columns
- * using the keyboard.  It also provides a mechanism for selecting an
- * individual cell in a tree.
+ * A TreeCursor provides a way for the user to navigate around a Tree with columns using the
+ * keyboard. It also provides a mechanism for selecting an individual cell in a tree.
  * 
- * <p> Here is an example of using a TreeCursor to navigate to a cell and then edit it.
+ * <p>
+ * Here is an example of using a TreeCursor to navigate to a cell and then edit it.
  * 
  * <code><pre>
  *  public static void main(String[] args) {
- *		Display display = new Display();
- *		Shell shell = new Shell(display);
- *		shell.setLayout(new GridLayout());
- *	
- *		// create a a tree with 3 columns and fill with data
- *		final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
- *		tree.setLayoutData(new GridData(GridData.FILL_BOTH));
- *		TreeColumn column1 = new TreeColumn(tree, SWT.NONE);
- *		TreeColumn column2 = new TreeColumn(tree, SWT.NONE);
- *		TreeColumn column3 = new TreeColumn(tree, SWT.NONE);
- *		for (int i = 0; i < 100; i++) {
- *			TreeItem item = new TreeItem(tree, SWT.NONE);
- *			item.setText(new String[] { "cell "+i+" 0", "cell "+i+" 1", "cell "+i+" 2"});
- *		}
- *		column1.pack();
- *		column2.pack();
- *		column3.pack();
- *	
- *		// create a TreeCursor to navigate around the tree
- *		final TreeCursor cursor = new TreeCursor(tree, SWT.NONE);
- *		// create an editor to edit the cell when the user hits "ENTER" 
- *		// while over a cell in the tree
- *		final ControlEditor editor = new ControlEditor(cursor);
- *		editor.grabHorizontal = true;
- *		editor.grabVertical = true;
- *	
- *		cursor.addSelectionListener(new SelectionAdapter() {
- *			// when the TreeEditor is over a cell, select the corresponding row in 
- *			// the tree
- *			public void widgetSelected(SelectionEvent e) {
- *				tree.setSelection(new TreeItem[] {cursor.getRow()});
- *			}
- *			// when the user hits "ENTER" in the TreeCursor, pop up a text editor so that 
- *			// they can change the text of the cell
- *			public void widgetDefaultSelected(SelectionEvent e){
- *				final Text text = new Text(cursor, SWT.NONE);
- *				TreeItem row = cursor.getRow();
- *				int column = cursor.getColumn();
- *				text.setText(row.getText(column));
- *				text.addKeyListener(new KeyAdapter() {
- *					public void keyPressed(KeyEvent e) {
- *						// close the text editor and copy the data over 
- *						// when the user hits "ENTER"
- *						if (e.character == SWT.CR) {
- *							TreeItem row = cursor.getRow();
- *							int column = cursor.getColumn();
- *							row.setText(column, text.getText());
- *							text.dispose();
- *						}
- *						// close the text editor when the user hits "ESC"
- *						if (e.character == SWT.ESC) {
- *							text.dispose();
- *						}
- *					}
- *				});
- *				editor.setEditor(text);
- *				text.setFocus();
- *			}
- *		});
- *		// Hide the TreeCursor when the user hits the "MOD1" or "MOD2" key.
- *		// This alows the user to select multiple items in the tree.
- *		cursor.addKeyListener(new KeyAdapter() {
- *			public void keyPressed(KeyEvent e) {
- *				if (e.keyCode == SWT.MOD1 || 
- *				    e.keyCode == SWT.MOD2 || 
- *				    (e.stateMask & SWT.MOD1) != 0 || 
- *				    (e.stateMask & SWT.MOD2) != 0) {
- *					cursor.setVisible(false);
- *				}
- *			}
- *		});
- *		// Show the TreeCursor when the user releases the "MOD2" or "MOD1" key.
- *		// This signals the end of the multiple selection task.
- *		tree.addKeyListener(new KeyAdapter() {
- *			public void keyReleased(KeyEvent e) {
- *				if (e.keyCode == SWT.MOD1 && (e.stateMask & SWT.MOD2) != 0) return;
- *				if (e.keyCode == SWT.MOD2 && (e.stateMask & SWT.MOD1) != 0) return;
- *				if (e.keyCode != SWT.MOD1 && (e.stateMask & SWT.MOD1) != 0) return;
- *				if (e.keyCode != SWT.MOD2 && (e.stateMask & SWT.MOD2) != 0) return;
- *			
- *				TreeItem[] selection = tree.getSelection();
- *				TreeItem row = (selection.length == 0) ? tree.getItem(tree.indexOf(tree.getTopItem())) : selection[0];
- *				tree.showItem(row);
- *				cursor.setSelection(row, 0);
- *				cursor.setVisible(true);
- *				cursor.setFocus();
- *			}
- *		});
- *	
- *		shell.open();
- *		while (!shell.isDisposed()) {
- *			if (!display.readAndDispatch())
- *				display.sleep();
- *		}
- *		display.dispose();
- *	}
+ * 		Display display = new Display();
+ * 		Shell shell = new Shell(display);
+ * 		shell.setLayout(new GridLayout());
+ * 	
+ * 		// create a a tree with 3 columns and fill with data
+ * 		final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
+ * 		tree.setLayoutData(new GridData(GridData.FILL_BOTH));
+ * 		TreeColumn column1 = new TreeColumn(tree, SWT.NONE);
+ * 		TreeColumn column2 = new TreeColumn(tree, SWT.NONE);
+ * 		TreeColumn column3 = new TreeColumn(tree, SWT.NONE);
+ * 		for (int i = 0; i < 100; i++) {
+ * 			TreeItem item = new TreeItem(tree, SWT.NONE);
+ * 			item.setText(new String[] { "cell "+i+" 0", "cell "+i+" 1", "cell "+i+" 2"});
+ * 		}
+ * 		column1.pack();
+ * 		column2.pack();
+ * 		column3.pack();
+ * 	
+ * 		// create a TreeCursor to navigate around the tree
+ * 		final TreeCursor cursor = new TreeCursor(tree, SWT.NONE);
+ * 		// create an editor to edit the cell when the user hits "ENTER" 
+ * 		// while over a cell in the tree
+ * 		final ControlEditor editor = new ControlEditor(cursor);
+ * 		editor.grabHorizontal = true;
+ * 		editor.grabVertical = true;
+ * 	
+ * 		cursor.addSelectionListener(new SelectionAdapter() {
+ * 			// when the TreeEditor is over a cell, select the corresponding row in 
+ * 			// the tree
+ * 			public void widgetSelected(SelectionEvent e) {
+ * 				tree.setSelection(new TreeItem[] {cursor.getRow()});
+ * 			}
+ * 			// when the user hits "ENTER" in the TreeCursor, pop up a text editor so that 
+ * 			// they can change the text of the cell
+ * 			public void widgetDefaultSelected(SelectionEvent e){
+ * 				final Text text = new Text(cursor, SWT.NONE);
+ * 				TreeItem row = cursor.getRow();
+ * 				int column = cursor.getColumn();
+ * 				text.setText(row.getText(column));
+ * 				text.addKeyListener(new KeyAdapter() {
+ * 					public void keyPressed(KeyEvent e) {
+ * 						// close the text editor and copy the data over 
+ * 						// when the user hits "ENTER"
+ * 						if (e.character == SWT.CR) {
+ * 							TreeItem row = cursor.getRow();
+ * 							int column = cursor.getColumn();
+ * 							row.setText(column, text.getText());
+ * 							text.dispose();
+ * 						}
+ * 						// close the text editor when the user hits "ESC"
+ * 						if (e.character == SWT.ESC) {
+ * 							text.dispose();
+ * 						}
+ * 					}
+ * 				});
+ * 				editor.setEditor(text);
+ * 				text.setFocus();
+ * 			}
+ * 		});
+ * 		// Hide the TreeCursor when the user hits the "MOD1" or "MOD2" key.
+ * 		// This alows the user to select multiple items in the tree.
+ * 		cursor.addKeyListener(new KeyAdapter() {
+ * 			public void keyPressed(KeyEvent e) {
+ * 				if (e.keyCode == SWT.MOD1 || 
+ * 				    e.keyCode == SWT.MOD2 || 
+ * 				    (e.stateMask & SWT.MOD1) != 0 || 
+ * 				    (e.stateMask & SWT.MOD2) != 0) {
+ * 					cursor.setVisible(false);
+ * 				}
+ * 			}
+ * 		});
+ * 		// Show the TreeCursor when the user releases the "MOD2" or "MOD1" key.
+ * 		// This signals the end of the multiple selection task.
+ * 		tree.addKeyListener(new KeyAdapter() {
+ * 			public void keyReleased(KeyEvent e) {
+ * 				if (e.keyCode == SWT.MOD1 && (e.stateMask & SWT.MOD2) != 0) return;
+ * 				if (e.keyCode == SWT.MOD2 && (e.stateMask & SWT.MOD1) != 0) return;
+ * 				if (e.keyCode != SWT.MOD1 && (e.stateMask & SWT.MOD1) != 0) return;
+ * 				if (e.keyCode != SWT.MOD2 && (e.stateMask & SWT.MOD2) != 0) return;
+ * 			
+ * 				TreeItem[] selection = tree.getSelection();
+ * 				TreeItem row = (selection.length == 0) ? tree.getItem(tree.indexOf(tree.getTopItem())) : selection[0];
+ * 				tree.showItem(row);
+ * 				cursor.setSelection(row, 0);
+ * 				cursor.setVisible(true);
+ * 				cursor.setFocus();
+ * 			}
+ * 		});
+ * 	
+ * 		shell.open();
+ * 		while (!shell.isDisposed()) {
+ * 			if (!display.readAndDispatch())
+ * 				display.sleep();
+ * 		}
+ * 		display.dispose();
+ * 	}
  * </pre></code>
  * 
  * <dl>
@@ -147,557 +150,575 @@ import org.eclipse.swt.widgets.TypedListener;
  */
 public class TreeCursor extends Canvas {
 	Tree tree;
-	TreeItem row = null;
-	TreeColumn column = null;
+
+	TreeItem row= null;
+
+	TreeColumn column= null;
+
 	Listener treeListener, resizeListener, disposeItemListener, disposeColumnListener;
-	
+
 	// By default, invert the list selection colors
-	static final int BACKGROUND = SWT.COLOR_LIST_SELECTION_TEXT;
-	static final int FOREGROUND = SWT.COLOR_LIST_SELECTION;
+	static final int BACKGROUND= SWT.COLOR_LIST_SELECTION_TEXT;
 
-/**
- * Constructs a new instance of this class given its parent
- * table and a style value describing its behavior and appearance.
- * <p>
- * The style value is either one of the style constants defined in
- * class <code>SWT</code> which is applicable to instances of this
- * class, or must be built by <em>bitwise OR</em>'ing together 
- * (that is, using the <code>int</code> "|" operator) two or more
- * of those <code>SWT</code> style constants. The class description
- * lists the style constants that are applicable to the class.
- * Style bits are also inherited from superclasses.
- * </p>
- *
- * @param parent a Tree control which will be the parent of the new instance (cannot be null)
- * @param style the style of control to construct
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
- * </ul>
- * @exception SWTException <ul>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
- *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
- * </ul>
- *
- * @see SWT#BORDER
- * @see Widget#checkSubclass()
- * @see Widget#getStyle()
- */
-public TreeCursor(Tree parent, int style) {
-	super(parent, style);
-	tree = parent;
-	setBackground(null);
-	setForeground(null);
-	
-	Listener listener = new Listener() {
-		public void handleEvent(Event event) {
-			switch (event.type) {
-				case SWT.Dispose :
-					dispose(event);
-					break;
-				case SWT.FocusIn :
-				case SWT.FocusOut :
-					redraw();
-					break;
-				case SWT.KeyDown :
-					keyDown(event);
-					break;
-				case SWT.Paint :
-					paint(event);
-					break;
-				case SWT.Traverse :
-					traverse(event);
-					break;
+	static final int FOREGROUND= SWT.COLOR_LIST_SELECTION;
+
+	/**
+	 * Constructs a new instance of this class given its parent table and a style value describing
+	 * its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class <code>SWT</code> which
+	 * is applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing
+	 * together (that is, using the <code>int</code> "|" operator) two or more of those
+	 * <code>SWT</code> style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent a Tree control which will be the parent of the new instance (cannot be null)
+	 * @param style the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created
+	 *                the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#BORDER
+	 * @see Widget#checkSubclass()
+	 * @see Widget#getStyle()
+	 */
+	public TreeCursor(Tree parent, int style) {
+		super(parent, style);
+		tree= parent;
+		setBackground(null);
+		setForeground(null);
+
+		Listener listener= new Listener() {
+			public void handleEvent(Event event) {
+				switch (event.type) {
+					case SWT.Dispose:
+						treeCursorDispose(event);
+						break;
+					case SWT.FocusIn:
+					case SWT.FocusOut:
+						redraw();
+						break;
+					case SWT.KeyDown:
+						treeCursorKeyDown(event);
+						break;
+					case SWT.Paint:
+						treeCursorPaint(event);
+						break;
+					case SWT.Traverse:
+						treeCursorTraverse(event);
+						break;
+				}
 			}
+		};
+		int[] events= new int[] { SWT.Dispose, SWT.FocusIn, SWT.FocusOut, SWT.KeyDown, SWT.Paint, SWT.Traverse };
+		for (int i= 0; i < events.length; i++) {
+			addListener(events[i], listener);
 		}
-	};
-	int[] events = new int[] {SWT.Dispose, SWT.FocusIn, SWT.FocusOut, SWT.KeyDown, SWT.Paint, SWT.Traverse};
-	for (int i = 0; i < events.length; i++) {
-		addListener(events[i], listener);
-	}
 
-	treeListener = new Listener() {
-		public void handleEvent(Event event) {
-			switch (event.type) {
-				case SWT.MouseDown :
-					tableMouseDown(event);
-					break;
-				case SWT.FocusIn :
-					tableFocusIn(event);
-					break;
+		treeListener= new Listener() {
+			public void handleEvent(Event event) {
+				switch (event.type) {
+					case SWT.MouseDown:
+						tableMouseDown(event);
+						break;
+					case SWT.FocusIn:
+						tableFocusIn(event);
+						break;
+				}
 			}
-		}
-	};
-	tree.addListener(SWT.FocusIn, treeListener);
-	tree.addListener(SWT.MouseDown, treeListener);
+		};
+		tree.addListener(SWT.FocusIn, treeListener);
+		tree.addListener(SWT.MouseDown, treeListener);
 
-	disposeItemListener = new Listener() {
-		public void handleEvent(Event event) {
-			row = null;
-			column = null;
-			_resize();
-		}
-	};
-	disposeColumnListener = new Listener() {
-		public void handleEvent(Event event) {
-			row = null;
-			column = null;
-			_resize();
+		disposeItemListener= new Listener() {
+			public void handleEvent(Event event) {
+				row= null;
+				column= null;
+				_resize();
+			}
+		};
+		disposeColumnListener= new Listener() {
+			public void handleEvent(Event event) {
+				row= null;
+				column= null;
+				_resize();
+			}
+		};
+		resizeListener= new Listener() {
+			public void handleEvent(Event event) {
+				_resize();
+			}
+		};
+		ScrollBar hBar= tree.getHorizontalBar();
+		if (hBar != null) {
+			hBar.addListener(SWT.Selection, resizeListener);
 		}
-	};
-	resizeListener = new Listener() {
-		public void handleEvent(Event event) {
-			_resize();
+		ScrollBar vBar= tree.getVerticalBar();
+		if (vBar != null) {
+			vBar.addListener(SWT.Selection, resizeListener);
 		}
-	};
-	ScrollBar hBar = tree.getHorizontalBar();
-	if (hBar != null) {
-		hBar.addListener(SWT.Selection, resizeListener);
 	}
-	ScrollBar vBar = tree.getVerticalBar();
-	if (vBar != null) {
-		vBar.addListener(SWT.Selection, resizeListener);
-	}
-}
 
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the receiver's selection changes, by sending
- * it one of the messages defined in the <code>SelectionListener</code>
- * interface.
- * <p>
- * When <code>widgetSelected</code> is called, the item field of the event object is valid.
- * If the receiver has <code>SWT.CHECK</code> style set and the check selection changes,
- * the event object detail field contains the value <code>SWT.CHECK</code>.
- * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
- * </p>
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see SelectionListener
- * @see SelectionEvent
- * @see #removeSelectionListener(SelectionListener)
- * 
- */
-public void addSelectionListener(SelectionListener listener) {
-	checkWidget();
-	if (listener == null)
-		SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	TypedListener typedListener = new TypedListener(listener);
-	addListener(SWT.Selection, typedListener);
-	addListener(SWT.DefaultSelection, typedListener);
-}
-
-/**
- * @param event  
- */
-void dispose(Event event) {
-	tree.removeListener(SWT.FocusIn, treeListener);
-	tree.removeListener(SWT.MouseDown, treeListener);
-	if (column != null) {
-		column.removeListener(SWT.Dispose, disposeColumnListener);
-		column.removeListener(SWT.Move, resizeListener);
-		column.removeListener(SWT.Resize, resizeListener);
-		column = null;
+	/**
+	 * Adds the listener to the collection of listeners who will be notified when the receiver's
+	 * selection changes, by sending it one of the messages defined in the
+	 * <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the item field of the event object is valid. If
+	 * the receiver has <code>SWT.CHECK</code> style set and the check selection changes, the event
+	 * object detail field contains the value <code>SWT.CHECK</code>.
+	 * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
+	 * </p>
+	 * 
+	 * @param listener the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created
+	 *                the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see SelectionEvent
+	 * @see #removeSelectionListener(SelectionListener)
+	 * 
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null)
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		TypedListener typedListener= new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
 	}
-	if (row != null) {
-		row.removeListener(SWT.Dispose, disposeItemListener);
-		row = null;
-	}
-	ScrollBar hBar = tree.getHorizontalBar();
-	if (hBar != null) {
-		hBar.removeListener(SWT.Selection, resizeListener);
-	}
-	ScrollBar vBar = tree.getVerticalBar();
-	if (vBar != null) {
-		vBar.removeListener(SWT.Selection, resizeListener);
+
+	/**
+	 * @param event
+	 */
+	void treeCursorDispose(Event event) {
+		tree.removeListener(SWT.FocusIn, treeListener);
+		tree.removeListener(SWT.MouseDown, treeListener);
+		if (column != null) {
+			column.removeListener(SWT.Dispose, disposeColumnListener);
+			column.removeListener(SWT.Move, resizeListener);
+			column.removeListener(SWT.Resize, resizeListener);
+			column= null;
+		}
+		if (row != null) {
+			row.removeListener(SWT.Dispose, disposeItemListener);
+			row= null;
+		}
+		ScrollBar hBar= tree.getHorizontalBar();
+		if (hBar != null) {
+			hBar.removeListener(SWT.Selection, resizeListener);
+		}
+		ScrollBar vBar= tree.getVerticalBar();
+		if (vBar != null) {
+			vBar.removeListener(SWT.Selection, resizeListener);
+		}
 	}
-}
 
-void keyDown(Event event) {
-	if (row == null) return;
-	switch (event.character) {
-		case SWT.CR :
-			notifyListeners(SWT.DefaultSelection, new Event());
+	void treeCursorKeyDown(Event event) {
+		if (row == null)
 			return;
-	}
-	int rowIndex = tree.indexOf(row);
-	int columnIndex = column == null ? 0 : tree.indexOf(column);
-	switch (event.keyCode) {
-		case SWT.ARROW_UP :
-			setRowColumn(Math.max(0, rowIndex - 1), columnIndex, true);
-			break;
-		case SWT.ARROW_DOWN :
-			setRowColumn(Math.min(rowIndex + 1, tree.getItemCount() - 1), columnIndex, true);
-			break;
-        case SWT.ARROW_LEFT :
-        case SWT.ARROW_RIGHT :
-        	{	
-        		int columnCount = tree.getColumnCount();
-        		if (columnCount == 0) break;
-        		int[] order = tree.getColumnOrder();
-        		int index = 0;
-        		while (index < order.length) {
-        			if (order[index] == columnIndex) break;
-        			index++;
+		switch (event.character) {
+			case SWT.CR:
+				notifyListeners(SWT.DefaultSelection, new Event());
+				return;
+		}
+		int rowIndex= tree.indexOf(row);
+		int columnIndex= column == null ? 0 : tree.indexOf(column);
+		switch (event.keyCode) {
+			case SWT.ARROW_UP:
+				setRowColumn(Math.max(0, rowIndex - 1), columnIndex, true);
+				break;
+			case SWT.ARROW_DOWN:
+				setRowColumn(Math.min(rowIndex + 1, tree.getItemCount() - 1), columnIndex, true);
+				break;
+			case SWT.ARROW_LEFT:
+			case SWT.ARROW_RIGHT: {
+				int columnCount= tree.getColumnCount();
+				if (columnCount == 0)
+					break;
+				int[] order= tree.getColumnOrder();
+				int index= 0;
+				while (index < order.length) {
+					if (order[index] == columnIndex)
+						break;
+					index++;
 				}
-				if (index == order.length) index = 0;
-		        int leadKey = (getStyle() & SWT.RIGHT_TO_LEFT) != 0 ? SWT.ARROW_RIGHT : SWT.ARROW_LEFT;
-		        if (event.keyCode == leadKey) {
-		           setRowColumn(rowIndex, order[Math.max(0, index - 1)], true);
-		        } else {
-		           setRowColumn(rowIndex, order[Math.min(columnCount - 1, index + 1)], true);
-		        }
-		        break;
-        	}
-		case SWT.HOME :
-			setRowColumn(0, columnIndex, true);
-			break;
-		case SWT.END :
-			{
-				int i = tree.getItemCount() - 1;
+				if (index == order.length)
+					index= 0;
+				int leadKey= (getStyle() & SWT.RIGHT_TO_LEFT) != 0 ? SWT.ARROW_RIGHT : SWT.ARROW_LEFT;
+				if (event.keyCode == leadKey) {
+					setRowColumn(rowIndex, order[Math.max(0, index - 1)], true);
+				} else {
+					setRowColumn(rowIndex, order[Math.min(columnCount - 1, index + 1)], true);
+				}
+				break;
+			}
+			case SWT.HOME:
+				setRowColumn(0, columnIndex, true);
+				break;
+			case SWT.END: {
+				int i= tree.getItemCount() - 1;
 				setRowColumn(i, columnIndex, true);
 				break;
 			}
-		case SWT.PAGE_UP :
-			{
-				int index = tree.indexOf(tree.getTopItem());
+			case SWT.PAGE_UP: {
+				int index= tree.indexOf(tree.getTopItem());
 				if (index == rowIndex) {
-					Rectangle rect = tree.getClientArea();
-					TreeItem item = tree.getItem(index);
-					Rectangle itemRect = item.getBounds(0);
-					rect.height -= itemRect.y;
-					int height = tree.getItemHeight();
-					int page = Math.max(1, rect.height / height);
-					index = Math.max(0, index - page + 1);
+					Rectangle rect= tree.getClientArea();
+					TreeItem item= tree.getItem(index);
+					Rectangle itemRect= item.getBounds(0);
+					rect.height-= itemRect.y;
+					int height= tree.getItemHeight();
+					int page= Math.max(1, rect.height / height);
+					index= Math.max(0, index - page + 1);
 				}
 				setRowColumn(index, columnIndex, true);
 				break;
 			}
-		case SWT.PAGE_DOWN :
-			{
-				int index = tree.indexOf(tree.getTopItem());
-				Rectangle rect = tree.getClientArea();
-				TreeItem item = tree.getItem(index);
-				Rectangle itemRect = item.getBounds(0);
-				rect.height -= itemRect.y;
-				int height = tree.getItemHeight();
-				int page = Math.max(1, rect.height / height);
-				int end = tree.getItemCount() - 1;
-				index = Math.min(end, index + page - 1);
+			case SWT.PAGE_DOWN: {
+				int index= tree.indexOf(tree.getTopItem());
+				Rectangle rect= tree.getClientArea();
+				TreeItem item= tree.getItem(index);
+				Rectangle itemRect= item.getBounds(0);
+				rect.height-= itemRect.y;
+				int height= tree.getItemHeight();
+				int page= Math.max(1, rect.height / height);
+				int end= tree.getItemCount() - 1;
+				index= Math.min(end, index + page - 1);
 				if (index == rowIndex) {
-					index = Math.min(end, index + page - 1);
+					index= Math.min(end, index + page - 1);
 				}
 				setRowColumn(index, columnIndex, true);
 				break;
 			}
+		}
 	}
-}
 
-void paint(Event event) {
-	if (row == null) return;
-	int columnIndex = column == null ? 0 : tree.indexOf(column);
-	GC gc = event.gc;
-	Display display = getDisplay();
-	gc.setBackground(getBackground());
-	gc.setForeground(getForeground());
-	gc.fillRectangle(event.x, event.y, event.width, event.height);
-	int x = 0;
-	Point size = getSize();
-	Image image = row.getImage(columnIndex);
-	if (image != null) {
-		Rectangle imageSize = image.getBounds();
-		int imageY = (size.y - imageSize.height) / 2;
-		gc.drawImage(image, x, imageY);
-		x += imageSize.width;
-	}
-	String text = row.getText(columnIndex);
-	if (text != IInternalDebugCoreConstants.EMPTY_STRING) {
-		Rectangle bounds = row.getBounds(columnIndex);
-		Point extent = gc.stringExtent(text);
-		// Temporary code - need a better way to determine table trim
-		String platform = SWT.getPlatform();
-		if ("win32".equals(platform)) { //$NON-NLS-1$
-			if (tree.getColumnCount() == 0 || columnIndex == 0) {
-				x += 2; 
-			} else {
-				int alignmnent = column.getAlignment();
-				switch (alignmnent) {
-					case SWT.LEFT:
-						x += 6;
-						break;
-					case SWT.RIGHT:
-						x = bounds.width - extent.x - 6;
-						break;
-					case SWT.CENTER:
-						x += (bounds.width - x - extent.x) / 2;
-						break;
+	void treeCursorPaint(Event event) {
+		if (row == null)
+			return;
+		int columnIndex= column == null ? 0 : tree.indexOf(column);
+		GC gc= event.gc;
+		Display display= getDisplay();
+		gc.setBackground(getBackground());
+		gc.setForeground(getForeground());
+		gc.fillRectangle(event.x, event.y, event.width, event.height);
+		int x= 0;
+		Point size= getSize();
+		Image image= row.getImage(columnIndex);
+		if (image != null) {
+			Rectangle imageSize= image.getBounds();
+			int imageY= (size.y - imageSize.height) / 2;
+			gc.drawImage(image, x, imageY);
+			x+= imageSize.width;
+		}
+		String text= row.getText(columnIndex);
+		if (text != IInternalDebugCoreConstants.EMPTY_STRING) {
+			Rectangle bounds= row.getBounds(columnIndex);
+			Point extent= gc.stringExtent(text);
+			// Temporary code - need a better way to determine table trim
+			String platform= SWT.getPlatform();
+			if ("win32".equals(platform)) { //$NON-NLS-1$
+				if (tree.getColumnCount() == 0 || columnIndex == 0) {
+					x+= 2;
+				} else {
+					int alignmnent= column.getAlignment();
+					switch (alignmnent) {
+						case SWT.LEFT:
+							x+= 6;
+							break;
+						case SWT.RIGHT:
+							x= bounds.width - extent.x - 6;
+							break;
+						case SWT.CENTER:
+							x+= (bounds.width - x - extent.x) / 2;
+							break;
+					}
 				}
-			}
-		}  else {
-			if (tree.getColumnCount() == 0) {
-				x += 5; 
 			} else {
-				int alignmnent = column.getAlignment();
-				switch (alignmnent) {
-					case SWT.LEFT:
-						x += 5;
-						break;
-					case SWT.RIGHT:
-						x = bounds.width- extent.x - 2;
-						break;
-					case SWT.CENTER:
-						x += (bounds.width - x - extent.x) / 2 + 2;
-						break;
+				if (tree.getColumnCount() == 0) {
+					x+= 5;
+				} else {
+					int alignmnent= column.getAlignment();
+					switch (alignmnent) {
+						case SWT.LEFT:
+							x+= 5;
+							break;
+						case SWT.RIGHT:
+							x= bounds.width - extent.x - 2;
+							break;
+						case SWT.CENTER:
+							x+= (bounds.width - x - extent.x) / 2 + 2;
+							break;
+					}
 				}
 			}
+			int textY= (size.y - extent.y) / 2;
+			gc.drawString(text, x, textY);
+		}
+		if (isFocusControl()) {
+			gc.setBackground(display.getSystemColor(SWT.COLOR_BLACK));
+			gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
+			gc.drawFocus(0, 0, size.x, size.y);
 		}
-		int textY = (size.y - extent.y) / 2;
-		gc.drawString(text, x, textY);
-	}
-	if (isFocusControl()) {
-		gc.setBackground(display.getSystemColor(SWT.COLOR_BLACK));
-		gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
-		gc.drawFocus(0, 0, size.x, size.y);
 	}
-}
 
-/**
- * @param event  
- */
-void tableFocusIn(Event event) {
-	if (isDisposed())
-		return;
-	if (isVisible())
-		setFocus();
-}
+	/**
+	 * @param event
+	 */
+	void tableFocusIn(Event event) {
+		if (isDisposed())
+			return;
+		if (isVisible())
+			setFocus();
+	}
 
-void tableMouseDown(Event event) {
-	if (isDisposed() || !isVisible()) return;
-	Point pt = new Point(event.x, event.y);
-	int lineWidth = tree.getLinesVisible() ? tree.getGridLineWidth() : 0;
-	TreeItem item = tree.getItem(pt);
-	if ((tree.getStyle() & SWT.FULL_SELECTION) != 0) {
-		if (item == null) return;
-	} else {
-		int start = item != null ? tree.indexOf(item) : tree.indexOf(tree.getTopItem());
-		int end = tree.getItemCount();
-		Rectangle clientRect = tree.getClientArea();
-		for (int i = start; i < end; i++) {
-			TreeItem nextItem = tree.getItem(i);
-			Rectangle rect = nextItem.getBounds(0);
-			if (pt.y >= rect.y && pt.y < rect.y + rect.height + lineWidth) {
-				item = nextItem;
-				break;
+	void tableMouseDown(Event event) {
+		if (isDisposed() || !isVisible())
+			return;
+		Point pt= new Point(event.x, event.y);
+		int lineWidth= tree.getLinesVisible() ? tree.getGridLineWidth() : 0;
+		TreeItem item= tree.getItem(pt);
+		if ((tree.getStyle() & SWT.FULL_SELECTION) != 0) {
+			if (item == null)
+				return;
+		} else {
+			int start= item != null ? tree.indexOf(item) : tree.indexOf(tree.getTopItem());
+			int end= tree.getItemCount();
+			Rectangle clientRect= tree.getClientArea();
+			for (int i= start; i < end; i++) {
+				TreeItem nextItem= tree.getItem(i);
+				Rectangle rect= nextItem.getBounds(0);
+				if (pt.y >= rect.y && pt.y < rect.y + rect.height + lineWidth) {
+					item= nextItem;
+					break;
+				}
+				if (rect.y > clientRect.y + clientRect.height)
+					return;
 			}
-			if (rect.y > clientRect.y + clientRect.height) 	return;
+			if (item == null)
+				return;
 		}
-		if (item == null) return;
-	}
-	TreeColumn newColumn = null;
-	int columnCount = tree.getColumnCount();
-	if (columnCount > 0) {
-		for (int i = 0; i < columnCount; i++) {
-			Rectangle rect = item.getBounds(i);
-			rect.width += lineWidth;
-			rect.height += lineWidth;
-			if (rect.contains(pt)) {
-				newColumn = tree.getColumn(i);
-				break;
+		TreeColumn newColumn= null;
+		int columnCount= tree.getColumnCount();
+		if (columnCount > 0) {
+			for (int i= 0; i < columnCount; i++) {
+				Rectangle rect= item.getBounds(i);
+				rect.width+= lineWidth;
+				rect.height+= lineWidth;
+				if (rect.contains(pt)) {
+					newColumn= tree.getColumn(i);
+					break;
+				}
+			}
+			if (newColumn == null) {
+				newColumn= tree.getColumn(0);
 			}
 		}
-		if (newColumn == null) {
-			newColumn = tree.getColumn(0);
-		}
+		setRowColumn(item, newColumn, true);
+		setFocus();
+		return;
 	}
-	setRowColumn(item, newColumn, true);
-	setFocus();
-	return;
-}
 
-void traverse(Event event) {
-	switch (event.detail) {
-		case SWT.TRAVERSE_ARROW_NEXT :
-		case SWT.TRAVERSE_ARROW_PREVIOUS :
-		case SWT.TRAVERSE_RETURN :
-			event.doit = false;
-			return;
+	void treeCursorTraverse(Event event) {
+		switch (event.detail) {
+			case SWT.TRAVERSE_ARROW_NEXT:
+			case SWT.TRAVERSE_ARROW_PREVIOUS:
+			case SWT.TRAVERSE_RETURN:
+				event.doit= false;
+				return;
+		}
+		event.doit= true;
 	}
-	event.doit = true;
-}
-void setRowColumn(int row, int column, boolean notify) {
-	TreeItem item = row == -1 ? null : tree.getItem(row);
-	TreeColumn col = column == -1 || tree.getColumnCount() == 0 ? null : tree.getColumn(column);
-	setRowColumn(item, col, notify);
-}
-void setRowColumn(TreeItem row, TreeColumn column, boolean notify) {
-	if (this.row == row && this.column == column) {
-		return;
+
+	void setRowColumn(int row, int column, boolean notify) {
+		TreeItem item= row == -1 ? null : tree.getItem(row);
+		TreeColumn col= column == -1 || tree.getColumnCount() == 0 ? null : tree.getColumn(column);
+		setRowColumn(item, col, notify);
 	}
-	if (this.row != null && this.row != row) {
-		this.row.removeListener(SWT.Dispose, disposeItemListener);
-		this.row = null;
+
+	void setRowColumn(TreeItem row, TreeColumn column, boolean notify) {
+		if (this.row == row && this.column == column) {
+			return;
+		}
+		if (this.row != null && this.row != row) {
+			this.row.removeListener(SWT.Dispose, disposeItemListener);
+			this.row= null;
+		}
+		if (this.column != null && this.column != column) {
+			this.column.removeListener(SWT.Dispose, disposeColumnListener);
+			this.column.removeListener(SWT.Move, resizeListener);
+			this.column.removeListener(SWT.Resize, resizeListener);
+			this.column= null;
+		}
+		if (row != null) {
+			if (this.row != row) {
+				this.row= row;
+				row.addListener(SWT.Dispose, disposeItemListener);
+				tree.showItem(row);
+			}
+			if (this.column != column && column != null) {
+				this.column= column;
+				column.addListener(SWT.Dispose, disposeColumnListener);
+				column.addListener(SWT.Move, resizeListener);
+				column.addListener(SWT.Resize, resizeListener);
+				tree.showColumn(column);
+			}
+			int columnIndex= column == null ? 0 : tree.indexOf(column);
+			setBounds(row.getBounds(columnIndex));
+			redraw();
+			if (notify) {
+				notifyListeners(SWT.Selection, new Event());
+			}
+		}
 	}
-	if (this.column != null && this.column != column) {
-		this.column.removeListener(SWT.Dispose, disposeColumnListener);
-		this.column.removeListener(SWT.Move, resizeListener);
-		this.column.removeListener(SWT.Resize, resizeListener);
-		this.column = null;
+
+	public void setVisible(boolean visible) {
+		checkWidget();
+		if (visible)
+			_resize();
+		super.setVisible(visible);
 	}
-	if (row != null) {
-		if (this.row != row) {
-			this.row = row;
-			row.addListener(SWT.Dispose, disposeItemListener);
-			tree.showItem(row);
+
+	/**
+	 * Removes the listener from the collection of listeners who will be notified when the
+	 * receiver's selection changes.
+	 * 
+	 * @param listener the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created
+	 *                the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener(SelectionListener)
+	 * 
+	 * @since 3.0
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
 		}
-		if (this.column != column && column != null) {
-			this.column = column;
-			column.addListener(SWT.Dispose, disposeColumnListener);
-			column.addListener(SWT.Move, resizeListener);
-			column.addListener(SWT.Resize, resizeListener);
-			tree.showColumn(column);
+		removeListener(SWT.Selection, listener);
+		removeListener(SWT.DefaultSelection, listener);
+	}
+
+	void _resize() {
+		if (row == null) {
+			setBounds(-200, -200, 0, 0);
+		} else {
+			int columnIndex= column == null ? 0 : tree.indexOf(column);
+			setBounds(row.getBounds(columnIndex));
 		}
-		int columnIndex = column == null ? 0 : tree.indexOf(column);
-		setBounds(row.getBounds(columnIndex));
+	}
+
+	/**
+	 * Returns the column over which the TreeCursor is positioned.
+	 * 
+	 * @return the column for the current position
+	 * 
+	 * @exception SWTException <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created
+	 *                the receiver</li>
+	 *                </ul>
+	 */
+	public int getColumn() {
+		checkWidget();
+		return column == null ? 0 : tree.indexOf(column);
+	}
+
+	/**
+	 * Returns the row over which the TreeCursor is positioned.
+	 * 
+	 * @return the item for the current position
+	 * 
+	 * @exception SWTException <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created
+	 *                the receiver</li>
+	 *                </ul>
+	 */
+	public TreeItem getRow() {
+		checkWidget();
+		return row;
+	}
+
+	public void setBackground(Color color) {
+		if (color == null)
+			color= getDisplay().getSystemColor(BACKGROUND);
+		super.setBackground(color);
 		redraw();
-		if (notify) {
-			notifyListeners(SWT.Selection, new Event());
-		}
 	}
-}
 
-public void setVisible(boolean visible) {
-	checkWidget();
-	if (visible) _resize();
-	super.setVisible(visible);
-}
+	public void setForeground(Color color) {
+		if (color == null)
+			color= getDisplay().getSystemColor(FOREGROUND);
+		super.setForeground(color);
+		redraw();
+	}
 
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the receiver's selection changes.
- *
- * @param listener the listener which should no longer be notified
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see SelectionListener
- * @see #addSelectionListener(SelectionListener)
- * 
- * @since 3.0
- */
-public void removeSelectionListener(SelectionListener listener) {
-	checkWidget();
-	if (listener == null) {
-		SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	/**
+	 * Positions the TreeCursor over the cell at the given row and column in the parent table.
+	 * 
+	 * @param row the index of the row for the cell to select
+	 * @param column the index of column for the cell to select
+	 * 
+	 * @exception SWTException <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created
+	 *                the receiver</li>
+	 *                </ul>
+	 * 
+	 */
+	public void setSelection(int row, int column) {
+		checkWidget();
+		int columnCount= tree.getColumnCount();
+		int maxColumnIndex= columnCount == 0 ? 0 : columnCount - 1;
+		if (row < 0 || row >= tree.getItemCount() || column < 0 || column > maxColumnIndex)
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		setRowColumn(row, column, false);
 	}
-	removeListener(SWT.Selection, listener);
-	removeListener(SWT.DefaultSelection, listener);	
-}
 
-void _resize() {
-	if (row == null) {
-		setBounds(-200, -200, 0, 0);
-	} else {
-		int columnIndex = column == null ? 0 : tree.indexOf(column);
-		setBounds(row.getBounds(columnIndex));
+	/**
+	 * Positions the TreeCursor over the cell at the given row and column in the parent table.
+	 * 
+	 * @param row the TreeItem of the row for the cell to select
+	 * @param column the index of column for the cell to select
+	 * 
+	 * @exception SWTException <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created
+	 *                the receiver</li>
+	 *                </ul>
+	 * 
+	 */
+	public void setSelection(TreeItem row, int column) {
+		checkWidget();
+		int columnCount= tree.getColumnCount();
+		int maxColumnIndex= columnCount == 0 ? 0 : columnCount - 1;
+		if (row == null || row.isDisposed() || column < 0 || column > maxColumnIndex)
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		setRowColumn(tree.indexOf(row), column, false);
 	}
 }
-/**
- * Returns the column over which the TreeCursor is positioned.
- *
- * @return the column for the current position
- *
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public int getColumn() {
-	checkWidget();
-	return column == null ? 0 : tree.indexOf(column);
-}
-/**
- * Returns the row over which the TreeCursor is positioned.
- *
- * @return the item for the current position
- *
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public TreeItem getRow() {
-	checkWidget();
-	return row;
-}
-public void setBackground (Color color) {
-	if (color == null) color = getDisplay().getSystemColor(BACKGROUND);
-	super.setBackground(color);
-	redraw();
-}
-public void setForeground (Color color) {
-	if (color == null) color = getDisplay().getSystemColor(FOREGROUND);
-	super.setForeground(color);
-	redraw();
-}
-/**
- * Positions the TreeCursor over the cell at the given row and column in the parent table. 
- *
- * @param row the index of the row for the cell to select
- * @param column the index of column for the cell to select
- *
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- */
-public void setSelection(int row, int column) {
-	checkWidget();
-	int columnCount = tree.getColumnCount();
-	int maxColumnIndex =  columnCount == 0 ? 0 : columnCount - 1;
-	if (row < 0
-	    || row >= tree.getItemCount()
-		|| column < 0
-		|| column > maxColumnIndex)
-		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	setRowColumn(row, column, false);
-}
-/**
- * Positions the TreeCursor over the cell at the given row and column in the parent table. 
- *
- * @param row the TreeItem of the row for the cell to select
- * @param column the index of column for the cell to select
- *
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- */
-public void setSelection(TreeItem row, int column) {
-	checkWidget();
-	int columnCount = tree.getColumnCount();
-	int maxColumnIndex =  columnCount == 0 ? 0 : columnCount - 1;
-	if (row == null
-		|| row.isDisposed()
-		|| column < 0
-		|| column > maxColumnIndex)
-		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	setRowColumn(tree.indexOf(row), column, false);
-}
-}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
index 86eaba6..aa1e21d 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,18 +9,22 @@
  *     IBM Corporation - initial API and implementation
  *     Wind River Systems - Fix for viewer state save/restore [188704] 
  *     Pawel Piech (Wind River) - added support for a virtual tree model viewer (Bug 242489)
+ *     Dorin Ciuca - Top index fix (Bug 324100)
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.viewers.model;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeSelection;
 import org.eclipse.jface.viewers.TreePath;
 import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.swt.widgets.Display;
 
 /**
  * Content provider for a virtual tree.
@@ -439,24 +443,22 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT
 		
 		// Add memento for top item if it is mapped to an element.  The reveal memento
 		// is in its own path to avoid requesting unnecessary data when restoring it.
-		if (viewer.getInput() != null) {
-    		TreePath topElementPath = viewer.getTopElementPath();
-    		if (topElementPath != null) {
-    			ModelDelta parentDelta = delta;
-    			TreePath parentPath = EMPTY_TREE_PATH;
-    			for (int i = 0; i < topElementPath.getSegmentCount(); i++) {
-    			    Object element = topElementPath.getSegment(i);
-    			    int index = viewer.findElementIndex(parentPath, element);
-                    ModelDelta childDelta = parentDelta.getChildDelta(element);
-                    if (childDelta == null) {
-                        parentDelta = parentDelta.addNode(element, index, IModelDelta.NO_CHANGE);
-                    } else {
-                        parentDelta = childDelta;
-                    }
-                    parentPath = parentPath.createChildPath(element);
-    			}
-                parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.REVEAL);
-    		}
+		TreePath topElementPath = viewer.getTopElementPath();
+		if (topElementPath != null) {
+			ModelDelta parentDelta = delta;
+			TreePath parentPath = EMPTY_TREE_PATH;
+			for (int i = 0; i < topElementPath.getSegmentCount(); i++) {
+			    Object element = topElementPath.getSegment(i);
+			    int index = viewer.findElementIndex(parentPath, element);
+                ModelDelta childDelta = parentDelta.getChildDelta(element);
+                if (childDelta == null) {
+                    parentDelta = parentDelta.addNode(element, index, IModelDelta.NO_CHANGE);
+                } else {
+                    parentDelta = childDelta;
+                }
+                parentPath = parentPath.createChildPath(element);
+			}
+            parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.REVEAL);
 		}
 	}
 
@@ -560,9 +562,9 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT
 	/**
 	 * @param delta
 	 */
-	void restorePendingStateNode(ModelDelta delta, boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized) {
-		TreePath treePath = getViewerTreePath(delta);
-		ITreeModelContentProviderTarget viewer = getViewer();
+	void restorePendingStateNode(final ModelDelta delta, boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized) {
+		final TreePath treePath = getViewerTreePath(delta);
+		final ITreeModelContentProviderTarget viewer = getViewer();
 
         // Attempt to expand the node only if the children are known.
 		if (knowsHasChildren) {
@@ -577,7 +579,11 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT
                 if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
                     System.out.println("\tRESTORE COLLAPSE: " + treePath.getLastSegment()); //$NON-NLS-1$
                 }
-                getViewer().setExpandedState(treePath, false);
+                // Check auto-expand before collapsing an element (bug 335734)
+                int autoexpand = getViewer().getAutoExpandLevel();
+                if (autoexpand != ITreeModelViewer.ALL_LEVELS && autoexpand < (treePath.getSegmentCount() + 1)) {
+                    getViewer().setExpandedState(treePath, false);
+                }
                 delta.setFlags(delta.getFlags() & ~IModelDelta.COLLAPSE);
             }
 		}
@@ -627,15 +633,89 @@ public class TreeModelContentProvider extends ModelContentProvider implements IT
             }
             
             if (setTopItem) { 
-                TreePath parentPath = treePath.getParentPath();
-                int index = viewer.findElementIndex(parentPath, treePath.getLastSegment());
-                if (index >= 0) { 
-                    if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
-                        System.out.println("\tRESTORE REVEAL: " + treePath.getLastSegment()); //$NON-NLS-1$
+            	Assert.isTrue(fPendingSetTopItem == null);
+                final TreePath parentPath = treePath.getParentPath();
+                
+                // listen when current updates are complete and only 
+                // then do the REVEAL
+                fPendingSetTopItem = new IPendingRevealDelta() {
+                	// Revealing some elements can trigger expanding some of elements
+                	// that have been just revealed. Therefore, we have to check one 
+                	// more time after the new triggered updates are completed if we
+                	// have to set again the top index
+                	private int counter = 0;
+                	private Object modelInput = fPendingState.getElement();
+                	
+					public void viewerUpdatesBegin() {
+					}
+
+					public void viewerUpdatesComplete() {
+						// assume that fRequestsInProgress is empty if we got here
+						Assert.isTrue(fRequestsInProgress.isEmpty());
+                    	
+						final Display viewerDisplay = viewer.getDisplay();
+                    	if (fWaitingRequests.isEmpty() && !viewerDisplay.isDisposed()) {
+                    		viewerDisplay.asyncExec(new Runnable() {
+		                        public void run() {
+		                        	if (TreeModelContentProvider.this.isDisposed()) {
+		                        		return;
+		                        	}
+		                        	
+		                        	TreePath topPath = viewer.getTopElementPath();
+		                        	if (!treePath.equals(topPath)) {
+						                int index = viewer.findElementIndex(parentPath, treePath.getLastSegment());
+						                if (index >= 0) { 
+						                    if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+						                        System.out.println("\tRESTORE REVEAL: " + treePath.getLastSegment()); //$NON-NLS-1$
+						                    }
+						                    viewer.reveal(parentPath, index);
+						                    
+						                }
+		                        	}
+		                        }
+		                    });
+                    		
+							counter++;
+							// in case the pending state was already set to null, we assume that
+							// all others elements are restored, so we don't expect that REVEAL will
+							// trigger other updates
+							if (counter > 1 || fPendingState == null) {
+		                        dispose();		                        
+							}
+                    	}
+
+					}
+
+					public void updateStarted(IViewerUpdate update) {
+					}
+
+					public void updateComplete(IViewerUpdate update) {
+					}
+					
+					public ModelDelta getDelta() {
+						return delta;
+					}
+
+					public void dispose() {
+						// remove myself as viewer update listener
+                        viewer.removeViewerUpdateListener(this);
+                        
+                        // top item is set
+                        fPendingSetTopItem = null;
+                        
+                        if (fPendingState == null) {
+                            if (DEBUG_STATE_SAVE_RESTORE && DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+                                System.out.println("STATE RESTORE COMPELTE: " + fPendingState); //$NON-NLS-1$
+                            }
+                            notifyStateUpdate(modelInput, STATE_RESTORE_SEQUENCE_COMPLETE, null);
+                        } else {
+                            checkIfRestoreComplete();
+                        }
                     }
-                    viewer.reveal(parentPath, index);
-                }
-            }
+                	
+                };
+                viewer.addViewerUpdateListener(fPendingSetTopItem);
+            }            
 		}
 
         // If we know the child count of the element, look for the reveal 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java
index aac13da..8331248 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java
@@ -28,6 +28,10 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -44,7 +48,9 @@ import org.eclipse.ui.progress.UIJob;
 /**
  * @since 3.3
  */
-public class TreeModelLabelProvider extends ColumnLabelProvider implements ITreeModelLabelProvider {
+public class TreeModelLabelProvider extends ColumnLabelProvider 
+    implements ITreeModelLabelProvider, IModelChangedListener 
+{
 	
 	private ITreeModelLabelProviderTarget fViewer;
 	private List fComplete;
@@ -101,11 +107,37 @@ public class TreeModelLabelProvider extends ColumnLabelProvider implements ITree
 	 */
 	private List fUpdatesInProgress = new ArrayList();
 	
+    /**
+     * Delta visitor actively cancels the outstanding label updates for 
+     * elements that are changed and are about to be updated.
+     */
+    class Visitor implements IModelDeltaVisitor {
+        /* (non-Javadoc)
+         * @see org.eclipse.debug.internal.ui.viewers.provisional.IModelDeltaVisitor#visit(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta, int)
+         */
+        public boolean visit(IModelDelta delta, int depth) {
+            if ((delta.getFlags() & IModelDelta.CONTENT) > 0) {
+                cancelElementUpdates(delta.getElement(), true);
+                return false;
+            } else if ((delta.getFlags() & IModelDelta.STATE) > 0) {
+                cancelElementUpdates(delta.getElement(), false);
+                return true;
+            } 
+            return true;
+        }
+    }
+
+    /**
+     * Delta visitor
+     */
+    private Visitor fVisitor = new Visitor();
+	
 	/**
 	 * Constructs a new label provider on the given display
 	 */
 	public TreeModelLabelProvider(ITreeModelLabelProviderTarget viewer) {
 		fViewer = viewer;
+		fViewer.addModelChangedListener(this);
 	}
 	
 	/**
@@ -178,6 +210,7 @@ public class TreeModelLabelProvider extends ColumnLabelProvider implements ITree
 	 * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
 	 */
 	public void dispose() {
+	    fViewer.removeModelChangedListener(this);
 		synchronized (fUpdatesInProgress) {
 			Iterator updatesInProgress = fUpdatesInProgress.iterator();
 			while (updatesInProgress.hasNext()) {
@@ -231,7 +264,7 @@ public class TreeModelLabelProvider extends ColumnLabelProvider implements ITree
 		        updates = new LinkedList();
 		        fPendingUpdates.put(presentation, updates);
 		    }
-		    updates.add(new LabelUpdate(fViewer.getInput(), elementPath, this, fViewer, visibleColumns, fViewer.getPresentationContext()));
+		    updates.add(new LabelUpdate(fViewer.getInput(), elementPath, this, visibleColumns, fViewer.getPresentationContext()));
 		    if (fPendingUpdatesJob != null) {
 		    	fPendingUpdatesJob.cancel();
 		    }
@@ -263,7 +296,23 @@ public class TreeModelLabelProvider extends ColumnLabelProvider implements ITree
             }
         }
     }
-	
+
+    /**
+     * Sets the element's display information in the viewer.
+     * 
+     * @see ITreeModelLabelProviderTarget#setElementData(TreePath, int, String[], ImageDescriptor[], FontData[], RGB[], RGB[])
+     * @see ITreeModelCheckProviderTarget#setElementChecked(TreePath, boolean, boolean)
+     */
+    protected void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images,
+        FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds, boolean checked, boolean grayed) 
+    {
+        fViewer.setElementData(path, numColumns, labels, images, fontDatas, foregrounds, backgrounds);
+        
+        if (fViewer instanceof ITreeModelCheckProviderTarget)
+            ((ITreeModelCheckProviderTarget) fViewer).setElementChecked(path, checked, grayed);
+    }
+
+    
 	private void startRequests(UIJob updateJob) {
 	    // Avoid calling providers inside a synchronized section.  Instead 
 	    // copy the updates map into a new variable. 
@@ -288,6 +337,41 @@ public class TreeModelLabelProvider extends ColumnLabelProvider implements ITree
 	    }
 	}
 	
+    /**
+    * Cancels all running updates for the given element.  If seachFullPath is true,
+    * all updtes will be canceled which have the given element anywhere in their 
+    * patch.   
+    * @param element element to search for.
+    * @param searchFullPath flag whether to look for the element in the full path
+    * of the update
+    */
+   protected void cancelElementUpdates(Object element, boolean searchFullPath) {
+       synchronized (fUpdatesInProgress) {
+           Iterator updatesInProgress = fUpdatesInProgress.iterator();
+             while (updatesInProgress.hasNext()) {
+                ILabelUpdate currentUpdate = (ILabelUpdate) updatesInProgress.next();
+                
+                if (searchFullPath) {
+                    if (element.equals(fViewer.getInput())) {
+                        currentUpdate.cancel();
+                    } else {
+                        TreePath updatePath = currentUpdate.getElementPath();
+                        for (int i = 0; i < updatePath.getSegmentCount(); i++) {
+                            if (element.equals(updatePath.getSegment(i))) {
+                                currentUpdate.cancel();
+                                break; // Exit the for loop, stay in the while loop
+                            }                         
+                        }
+                    }
+                } else {
+                    if (element.equals(currentUpdate.getElement())) {
+                        currentUpdate.cancel();
+                    }
+                }
+            }
+        }
+    }
+
 	/**
 	 * Returns the presentation context for this label provider.
 	 * 
@@ -315,7 +399,6 @@ public class TreeModelLabelProvider extends ColumnLabelProvider implements ITree
 							updates = (LabelUpdate[]) fComplete.toArray(new LabelUpdate[fComplete.size()]);
 							fComplete = null;
 						}
-						//System.out.println("Changed Labels: " + updates.length);
 						for (int i = 0; i < updates.length; i++) {
 							updates[i].update();
 						}
@@ -413,4 +496,9 @@ public class TreeModelLabelProvider extends ColumnLabelProvider implements ITree
 		}
 	}
 
+ 
+	public void modelChanged(IModelDelta delta, IModelProxy proxy) {
+	    delta.accept(fVisitor);
+    }
+	
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualItem.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualItem.java
index e5e022e..1365c5f 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualItem.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Wind River Systems and others.
+ * Copyright (c) 2008, 2009 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualTree.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualTree.java
index 89c2f36..9cd9933 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualTree.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Wind River Systems and others.
+ * Copyright (c) 2008, 2009 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IColumnPresentation2.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IColumnPresentation2.java
new file mode 100644
index 0000000..d7b59f7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IColumnPresentation2.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Texas Instruments and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Texas Instruments - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.debug.internal.ui.viewers.model.provisional;
+
+/**
+ * Extension to allow column presentation to specify initial column sizes in a 
+ * TreeModelViewer.
+ * 
+ * @since 3.7
+ * 
+ * @see TreeModelViewer
+ */
+public interface IColumnPresentation2 extends IColumnPresentation {
+	
+	/**
+	 * Returns the initial column width for the column with the given identifier.
+	 * 
+	 * @param id a column identifier included in <code>getAvailableColumns()</code>
+	 * @param treeWidgetWidth tree widget width
+	 * @param visibleColumnIds identifiers of visible columns 
+	 * @return initial column width. Return -1 if this implementation does not decide the width
+	 *         and let the caller to decide the width. The caller may make the initial width
+	 *         be treeWidgetWidth / visibleColumnIds.length
+	 */
+	public int getInitialColumnWidth(String id, int treeWidgetWidth, String[] visibleColumnIds);
+
+}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java
index f8050d9..1a4b033 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java
@@ -47,8 +47,8 @@ public class PresentationContext implements IPresentationContext {
     final private String fId;
     final private ListenerList fListeners = new ListenerList();
     final private Map fProperties = new HashMap();
-    final private IWorkbenchWindow fWindow;
-    final private IWorkbenchPart fPart;
+    private IWorkbenchWindow fWindow;
+    private IWorkbenchPart fPart;
 
     /**
      * Constructs a presentation context for the given id.
@@ -143,6 +143,9 @@ public class PresentationContext implements IPresentationContext {
         fProperties.clear();
         setProperty(PROPERTY_DISPOSED, Boolean.TRUE);
 		fListeners.clear();
+		// Free the reference to fWindow (Bug 321658).
+		fWindow = null;
+		fPart = null;
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java
index 15d1995..af173fe 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java
@@ -164,7 +164,7 @@ public class TreeModelViewer extends InternalTreeModelViewer {
 	 * Sets the visible columns for this viewer. Id's correspond to 
 	 * column identifiers from a column presentation. Use <code>null</code>
 	 * or an empty collection to display default columns for the current
-	 * column presentation. Only effects the current column presentation.
+	 * column presentation. Only affects the current column presentation.
 	 * 
 	 * @param ids column identifiers or <code>null</code>
 	 */
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java
index 3134ab2..7db158d 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Wind River Systems and others.
+ * Copyright (c) 2008, 2010 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Wind River Systems - initial API and implementation
+ *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.viewers.model.provisional;
 
@@ -156,7 +157,7 @@ public class VirtualTreeModelViewer extends InternalVirtualTreeModelViewer {
      * Sets the visible columns for this viewer. Id's correspond to 
      * column identifiers from a column presentation. Use <code>null</code>
      * or an empty collection to display default columns for the current
-     * column presentation. Only effects the current column presentation.
+     * column presentation. Only affects the current column presentation.
      * 
      * @param ids column identifiers or <code>null</code>
      */
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractColumnPresentation.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractColumnPresentation.java
index 1467375..ddaf0f5 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractColumnPresentation.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/provisional/AbstractColumnPresentation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.viewers.provisional;
 
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation2;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.jface.resource.ImageDescriptor;
 
@@ -21,7 +21,7 @@ import org.eclipse.jface.resource.ImageDescriptor;
  * </p>
  * @since 3.2
  */
-public abstract class AbstractColumnPresentation implements IColumnPresentation {
+public abstract class AbstractColumnPresentation implements IColumnPresentation2 {
 	
 	private IPresentationContext fContext;
 	
@@ -59,4 +59,11 @@ public abstract class AbstractColumnPresentation implements IColumnPresentation
 	protected IPresentationContext getPresentationContext() {
 		return fContext;
 	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation2#getInitialColumnWidth(java.lang.String, int, java.lang.String[])
+	 */
+	public int getInitialColumnWidth(String id, int treeWidgetWidth, String[] visibleColumnIds) {
+		return -1;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/BreakpointManagerProxy.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/BreakpointManagerProxy.java
index 570eaec..639872c 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/BreakpointManagerProxy.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/BreakpointManagerProxy.java
@@ -1,182 +1,182 @@
-/*****************************************************************
- * Copyright (c) 2009 Texas Instruments and others
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956)
- *     Wind River Systems - ongoing enhancements and bug fixing
- *****************************************************************/
-package org.eclipse.debug.internal.ui.viewers.update;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.internal.ui.elements.adapters.DefaultBreakpointsViewInput;
-import org.eclipse.debug.internal.ui.model.elements.BreakpointManagerContentProvider;
-import org.eclipse.debug.internal.ui.viewers.model.ViewerAdapterService;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
-import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.progress.WorkbenchJob;
-
-/**
- * Breakpoint manager model proxy.
- * 
- * @since 3.6
- */
-public class BreakpointManagerProxy extends AbstractModelProxy {
-	/**
-	 * The breakpoint manager content provider for this model proxy
-	 */
-	final private BreakpointManagerContentProvider fProvider;
-	
-	/**
-	 * The breakpoint manager input for this model proxy
-	 */
-	final private DefaultBreakpointsViewInput fInput;
-	
-	/**
-	 * Job to fire posted deltas.
-	 */
-    private Job fFireModelChangedJob;
-    
-    /**
-     * Object used for describing a posted delta.
-     */
-    private static class DeltaInfo {
-        final boolean fSelect;
-        final IModelDelta fDelta;
-
-        DeltaInfo(boolean selectDelta, IModelDelta delta) {
-            fSelect = selectDelta;
-            fDelta = delta;
-        }
-    }
-    
-    /**
-     * List of posted deltas ready to be fired.
-     */
-    private List/*<DeltaInfo>*/ fPendingDeltas = new LinkedList();
-    
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param input the breakpoint manager input
-	 * @param context the presentation context for this model proxy
-	 */
-	public BreakpointManagerProxy(Object input, IPresentationContext context) {
-		super();
-				
-		DefaultBreakpointsViewInput bpmInput = null;
-		BreakpointManagerContentProvider bpmProvider = null;
-		if (input instanceof DefaultBreakpointsViewInput) {
-			bpmInput = (DefaultBreakpointsViewInput) input;
-			
-			// cache the required data and pass to the provider when this model is installed
-			IElementContentProvider provider = ViewerAdapterService.getContentProvider(input);
-			if (provider instanceof BreakpointManagerContentProvider) {
-				bpmProvider = (BreakpointManagerContentProvider) provider;
-			}
-		}
-		fInput = bpmInput;
-		fProvider = bpmProvider;
-	}
-	
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy#installed(org.eclipse.jface.viewers.Viewer)
-	 */
-	public void installed(Viewer viewer) {
-		super.installed(viewer);
-		if (fProvider != null) {
-			fProvider.registerModelProxy(fInput, this);
-		}
-	}
-	
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy#dispose()
-	 */
-	public void dispose() {
-	    fProvider.unregisterModelProxy(fInput, this);
-	    synchronized(this) {
-	        if (fFireModelChangedJob != null) {
-                fFireModelChangedJob.cancel();
-                fFireModelChangedJob = null;
-	        }
-            fPendingDeltas.clear();
-	    }
-        
-		super.dispose();		
-	}
-	
-	/**
-	 * Posts a given delta to be fired by the proxy.  Posting a delta places it 
-	 * in a queue which is later emptied by a job that fires the deltas.
-	 * <p>
-	 * If the delta is used only to select a breakpiont and does not change the
-	 * viewer content, the caller should set the <code>select</code> parameter 
-	 * to <code>true</code>.  When a select delta is added to the delta queue, 
-	 * any previous select deltas are removed. 
-	 * 
-	 * @param delta Delta to be posted to the viewer.
-	 * @param select Flag indicating that the delta is only to change the
-	 * viewer selection.
-	 */
-	public synchronized void postModelChanged(IModelDelta delta, boolean select) {
-        // Check for proxy being disposed.
-        if (isDisposed()) {
-            return;
-        }
-        // Check for viewer being disposed.
-        Widget viewerControl = getViewer().getControl();
-        if (viewerControl == null) {
-            return;
-        }
-        
-        // If we are processing a select delta, remove the previous select delta.
-        if (select) {
-            for (Iterator itr = fPendingDeltas.iterator(); itr.hasNext(); ) {
-                if ( ((DeltaInfo)itr.next()).fSelect ) {
-                    itr.remove();
-                }
-            }
-        }
-        fPendingDeltas.add(new DeltaInfo(select, delta));
-        
-        if (fFireModelChangedJob == null) {
-	        fFireModelChangedJob = new WorkbenchJob(viewerControl.getDisplay(), "Select Breakpoint Job") { //$NON-NLS-1$
-	            {
-	                setSystem(true);
-	            }
-	            
-	            public IStatus runInUIThread(IProgressMonitor monitor) {
-                    Object[] deltas; 
-                    synchronized(BreakpointManagerProxy.this) {
-                        deltas = fPendingDeltas.toArray();
-                        fPendingDeltas.clear();
-                        fFireModelChangedJob = null;
-                    }
-                    for (int i = 0; i < deltas.length; i++) {
-                        fireModelChanged( ((DeltaInfo)deltas[i]).fDelta );
-                    }
-                    return Status.OK_STATUS;
-                }
-            };
-            fFireModelChangedJob.schedule();
-	    }
-	}
-
-}
+/*****************************************************************
+ * Copyright (c) 2009, 2010 Texas Instruments and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956)
+ *     Wind River Systems - ongoing enhancements and bug fixing
+ *****************************************************************/
+package org.eclipse.debug.internal.ui.viewers.update;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.debug.internal.ui.elements.adapters.DefaultBreakpointsViewInput;
+import org.eclipse.debug.internal.ui.model.elements.BreakpointManagerContentProvider;
+import org.eclipse.debug.internal.ui.viewers.model.ViewerAdapterService;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.progress.WorkbenchJob;
+
+/**
+ * Breakpoint manager model proxy.
+ * 
+ * @since 3.6
+ */
+public class BreakpointManagerProxy extends AbstractModelProxy {
+	/**
+	 * The breakpoint manager content provider for this model proxy
+	 */
+	final private BreakpointManagerContentProvider fProvider;
+	
+	/**
+	 * The breakpoint manager input for this model proxy
+	 */
+	final private DefaultBreakpointsViewInput fInput;
+	
+	/**
+	 * Job to fire posted deltas.
+	 */
+    private Job fFireModelChangedJob;
+    
+    /**
+     * Object used for describing a posted delta.
+     */
+    private static class DeltaInfo {
+        final boolean fSelect;
+        final IModelDelta fDelta;
+
+        DeltaInfo(boolean selectDelta, IModelDelta delta) {
+            fSelect = selectDelta;
+            fDelta = delta;
+        }
+    }
+    
+    /**
+     * List of posted deltas ready to be fired.
+     */
+    private List/*<DeltaInfo>*/ fPendingDeltas = new LinkedList();
+    
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param input the breakpoint manager input
+	 * @param context the presentation context for this model proxy
+	 */
+	public BreakpointManagerProxy(Object input, IPresentationContext context) {
+		super();
+				
+		DefaultBreakpointsViewInput bpmInput = null;
+		BreakpointManagerContentProvider bpmProvider = null;
+		if (input instanceof DefaultBreakpointsViewInput) {
+			bpmInput = (DefaultBreakpointsViewInput) input;
+			
+			// cache the required data and pass to the provider when this model is installed
+			IElementContentProvider provider = ViewerAdapterService.getContentProvider(input);
+			if (provider instanceof BreakpointManagerContentProvider) {
+				bpmProvider = (BreakpointManagerContentProvider) provider;
+			}
+		}
+		fInput = bpmInput;
+		fProvider = bpmProvider;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy#installed(org.eclipse.jface.viewers.Viewer)
+	 */
+	public void installed(Viewer viewer) {
+		super.installed(viewer);
+		if (fProvider != null) {
+			fProvider.registerModelProxy(fInput, this);
+		}
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy#dispose()
+	 */
+	public void dispose() {
+	    fProvider.unregisterModelProxy(fInput, this);
+	    synchronized(this) {
+	        if (fFireModelChangedJob != null) {
+                fFireModelChangedJob.cancel();
+                fFireModelChangedJob = null;
+	        }
+            fPendingDeltas.clear();
+	    }
+        
+		super.dispose();		
+	}
+	
+	/**
+	 * Posts a given delta to be fired by the proxy.  Posting a delta places it 
+	 * in a queue which is later emptied by a job that fires the deltas.
+	 * <p>
+	 * If the delta is used only to select a breakpiont and does not change the
+	 * viewer content, the caller should set the <code>select</code> parameter 
+	 * to <code>true</code>.  When a select delta is added to the delta queue, 
+	 * any previous select deltas are removed. 
+	 * 
+	 * @param delta Delta to be posted to the viewer.
+	 * @param select Flag indicating that the delta is only to change the
+	 * viewer selection.
+	 */
+	public synchronized void postModelChanged(IModelDelta delta, boolean select) {
+        // Check for proxy being disposed.
+        if (isDisposed()) {
+            return;
+        }
+        // Check for viewer being disposed.
+        Widget viewerControl = getViewer().getControl();
+        if (viewerControl == null) {
+            return;
+        }
+        
+        // If we are processing a select delta, remove the previous select delta.
+        if (select) {
+            for (Iterator itr = fPendingDeltas.iterator(); itr.hasNext(); ) {
+                if ( ((DeltaInfo)itr.next()).fSelect ) {
+                    itr.remove();
+                }
+            }
+        }
+        fPendingDeltas.add(new DeltaInfo(select, delta));
+        
+        if (fFireModelChangedJob == null) {
+	        fFireModelChangedJob = new WorkbenchJob(viewerControl.getDisplay(), "Select Breakpoint Job") { //$NON-NLS-1$
+	            {
+	                setSystem(true);
+	            }
+	            
+	            public IStatus runInUIThread(IProgressMonitor monitor) {
+                    Object[] deltas; 
+                    synchronized(BreakpointManagerProxy.this) {
+                        deltas = fPendingDeltas.toArray();
+                        fPendingDeltas.clear();
+                        fFireModelChangedJob = null;
+                    }
+                    for (int i = 0; i < deltas.length; i++) {
+                        fireModelChanged( ((DeltaInfo)deltas[i]).fDelta );
+                    }
+                    return Status.OK_STATUS;
+                }
+            };
+            fFireModelChangedJob.schedule();
+	    }
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultSelectionPolicy.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultSelectionPolicy.java
index a19cf97..655fad9 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultSelectionPolicy.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultSelectionPolicy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Pawel Piech (Wind River) - added a breadcrumb mode to Debug view (Bug 252677)
+ *     Pawel Piech (Wind River) - Bug fixing
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.viewers.update;
 
@@ -35,7 +35,7 @@ public class DefaultSelectionPolicy implements IModelSelectionPolicy {
 	 * Constructs a new selection policy for the given debug
 	 * element.
 	 * 
-	 * @param element
+	 * @param element the backing debug element
 	 */
 	public DefaultSelectionPolicy(IDebugElement element) {
 		fDebugElement = element;
@@ -99,10 +99,15 @@ public class DefaultSelectionPolicy implements IModelSelectionPolicy {
 		return false;
 	}
 	
+	/**
+	 * Returns if the selection should remain on the given selection
+	 * @param element the element to check
+	 * @return <code>true</code> if the selection should remain on the given element <code>false</code> otherwise
+	 */
 	protected boolean isSticky(Object element) {
 		if (element instanceof IStackFrame) {
 			IStackFrame frame = (IStackFrame) element;
-			return frame.isSuspended();
+			return frame.isSuspended() || frame.isStepping();
 		}
 		return false;
 	}
@@ -112,7 +117,11 @@ public class DefaultSelectionPolicy implements IModelSelectionPolicy {
      * currently selected element was removed from the model.  Instead of leaving the 
      * selection empty, attempt to select the parent element instead.
      * 
-     * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IModelSelectionPolicy#handleInvalidSelection(org.eclipse.jface.viewers.ISelection, org.eclipse.jface.viewers.ISelection)
+     * @param selection the selection to replace
+     * @param newSelection the selection to use if the given selection is not an {@link ITreeSelection}
+     * @return the replaced selection or <code>newSelection</code> if the given selection is not an {@link ITreeSelection}
+     * 
+     * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IModelSelectionPolicy#replaceInvalidSelection(ISelection, ISelection)
      */
     public ISelection replaceInvalidSelection(ISelection selection, ISelection newSelection) {
         if (selection instanceof ITreeSelection) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextManager.java
index 06d4604..a5674d0 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
-  * Copyright (c) 2008 IBM Corporation and others.
+  * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,6 +75,7 @@ public class ViewContextManager implements IWindowListener {
 	public void windowClosed(IWorkbenchWindow window) {
 		ViewContextService service = (ViewContextService) fWindowToService.get(window);
 		if (service != null) {
+			fWindowToService.remove(window);
 			service.dispose();
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextService.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextService.java
index 8a62fa8..96cda05 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextService.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/ViewContextService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2006, 2010 IBM Corporation and others.
+ *  Copyright (c) 2006, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -369,6 +369,10 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
          * Set of perspectives this view was closed in by the user
          */
         private Set fUserClosed = new HashSet();
+        /**
+         * Set of perspectives this view was auto-opened by view management.
+         */
+        private Set fAutoOpened = new HashSet();
         
         public ViewBinding(IConfigurationElement element) {
             fElement = element;
@@ -438,6 +442,7 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
         protected void userOpened() {
             if (isTrackingViews()) {
                 String id = getActivePerspective().getId();
+                fAutoOpened.remove(id);
                 fUserOpened.add(id);
                 fUserClosed.remove(id);
                 saveViewBindings();
@@ -447,6 +452,7 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
         protected void userClosed() {
             if (isTrackingViews()) {
                 String id = getActivePerspective().getId();
+                fAutoOpened.remove(id);
                 fUserClosed.add(id);
                 fUserOpened.remove(id);
                 saveViewBindings();
@@ -472,6 +478,11 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
                 if (isAutoOpen()) {
                     try {
                         fIgnoreChanges = true;
+                        // Remember whether the view was opened by view management.
+                        // (Bug 128065)
+                        if (page.findViewReference(getViewId()) == null) {
+                            fAutoOpened.add(perspective.getId());
+                        }
                         page.showView(getViewId(), null, IWorkbenchPage.VIEW_CREATE);
                     } catch (PartInitException e) {
                         DebugUIPlugin.log(e);
@@ -519,7 +530,7 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
          */
         public void deactivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) {
             if (!isUserOpened(perspective)) {
-                if (isAutoClose() && !isDefault(perspective)) {
+                if (fAutoOpened.remove(perspective.getId()) && isAutoClose() && !isDefault(perspective)) {
                     IViewReference reference = page.findViewReference(getViewId());
                     if (reference != null) {
                         try {
@@ -604,14 +615,17 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
 		getDebugContextService().addDebugContextListener(this);
 		DebugUIPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(this);
 		fContextService.addContextManagerListener(this);
-	    IWorkbenchPage page = fWindow.getActivePage();
-	    if (page != null) {
-	        fActivePerspective = page.getPerspective();
-	    }
+		if (fWindow != null) {
+		    IWorkbenchPage page = fWindow.getActivePage();
+		    if (page != null) {
+		        fActivePerspective = page.getPerspective();
+		    }
+		}
 	}
 	
 	public void dispose() {
 		fWindow.removePerspectiveListener(this);
+		fWindow = null;  // avoid leaking a window reference (bug 321658).
 		getDebugContextService().removeDebugContextListener(this);
 		DebugUIPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(this);
 		fContextService.removeContextManagerListener(this);
@@ -726,6 +740,10 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
 	 * @return active perspective or <code>null</code>
 	 */
 	private IPerspectiveDescriptor getActivePerspective() {
+        if (fWindow == null) {
+            return null;
+        }
+
         return fActivePerspective;
 	}
 	
@@ -926,11 +944,18 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
 		if (!fIgnoreChanges && page.getWorkbenchWindow().equals(fWindow)) {
 			if(partRef != null) {
                 if (IWorkbenchPage.CHANGE_VIEW_SHOW == changeId || IWorkbenchPage.CHANGE_VIEW_HIDE == changeId) {
-                	Iterator iterator = fContextIdsToBindings.values().iterator();
-                	while (iterator.hasNext()) {
-                		DebugContextViewBindings bindings = (DebugContextViewBindings) iterator.next();
-                		bindings.setViewOpened(IWorkbenchPage.CHANGE_VIEW_SHOW == changeId, partRef.getId());
-                	}
+                    // Update only the contexts which are currently active (Bug 128065)
+                    Set activatedContexts = (Set)fPerspectiveToActivatedContexts.get(perspective);
+                    if (activatedContexts != null) {
+                    	Iterator iterator = activatedContexts.iterator();
+                    	while (iterator.hasNext()) {
+                    	    DebugContextViewBindings bindings = 
+                    	        (DebugContextViewBindings)fContextIdsToBindings.get(iterator.next());
+                    	    if (bindings != null) {
+                    	        bindings.setViewOpened(IWorkbenchPage.CHANGE_VIEW_SHOW == changeId, partRef.getId());
+                    	    }
+                    	}
+                    }
                 }
 			}
         }	
@@ -961,6 +986,8 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
 	 * @param contextId
 	 */
 	private void activateChain(String contextId, IPerspectiveDescriptor perspective) {
+	    if (fWindow == null) return; // disposed
+	    
 		IWorkbenchPage page = fWindow.getActivePage();
 		if (page != null) {
 			DebugContextViewBindings bindings= (DebugContextViewBindings) fContextIdsToBindings.get(contextId);
@@ -1028,6 +1055,8 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
 	}
 	
 	private void deactivate(String contextId, IPerspectiveDescriptor perspective) {
+	    if (fWindow == null) return;  // disposed
+	    
 		IWorkbenchPage page = fWindow.getActivePage();
 		if (page != null) {
 			DebugContextViewBindings bindings = (DebugContextViewBindings) fContextIdsToBindings.get(contextId);
@@ -1105,6 +1134,8 @@ public class ViewContextService implements IDebugContextListener, IPerspectiveLi
      * @param viewId
      */
     public void showViewQuiet(String viewId) {
+        if (fWindow == null) return;  // disposed;
+        
 		IWorkbenchPage page = fWindow.getActivePage();
 		if (page != null) {
 			try {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java
index 81bd9bf..53fd622 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainer.java
@@ -306,7 +306,7 @@ public class BreakpointContainer extends ElementContentProvider implements IAdap
         } else {
         	// TODO [pchuong]: There seems to be some kind of problem when the INSERTED flag is used, 
         	//				   there is a additional checkbox added to the end of the tree.
-        	//				   Also the tree seems to have a strange visual affect when using the INSERTED
+        	//				   Also the tree seems to have a strange visual effect when using the INSERTED
         	//				   flag for the child node instead of ADDED flag. Note: all breakpoint delta
         	//				   is using the ADDED flag in this class.
        		rootDelta.addNode(breakpoint, bpIndex, IModelDelta.ADDED|IModelDelta.INSTALL, 0);
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java
index 565da9a..ee1034f 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java
@@ -1,5 +1,5 @@
 /*****************************************************************
- * Copyright (c) 2009, 2010 Texas Instruments and others
+ * Copyright (c) 2009, 2011 Texas Instruments and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,41 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.TreeItem;
+
+import org.eclipse.core.commands.operations.IUndoContext;
+
 import org.eclipse.core.runtime.IStatus;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchCommandConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.SelectionListenerAction;
+import org.eclipse.ui.operations.RedoActionHandler;
+import org.eclipse.ui.operations.UndoActionHandler;
+
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.IBreakpointManagerListener;
 import org.eclipse.debug.core.model.IBreakpoint;
@@ -47,33 +81,11 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelV
 import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages;
 import org.eclipse.debug.internal.ui.views.variables.VariablesView;
 import org.eclipse.debug.internal.ui.views.variables.details.AvailableDetailPanesAction;
+
+import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.IBreakpointOrganizerDelegateExtension;
 import org.eclipse.debug.ui.IDebugModelPresentation;
 import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.util.LocalSelectionTransfer;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.actions.SelectionListenerAction;
 
 /**
  * This class implements the breakpoints view.
@@ -97,10 +109,18 @@ public class BreakpointsView extends VariablesView implements IBreakpointManager
 	 */
 	private boolean fFirstInputSet = false;
 	
+	private UndoActionHandler fUndoAction;
+	private RedoActionHandler fRedoAction;
+
+
 	public void dispose() {
 		if (fClipboard != null)
 			fClipboard.dispose();		
 		DebugPlugin.getDefault().getBreakpointManager().removeBreakpointManagerListener(this);
+
+		fUndoAction.dispose();
+		fRedoAction.dispose();
+
 		super.dispose();
 	}
 	
@@ -225,11 +245,12 @@ public class BreakpointsView extends VariablesView implements IBreakpointManager
         DebugPlugin.getDefault().getBreakpointManager().addBreakpointManagerListener(this);
 
 		fClipboard = new Clipboard(getSite().getShell().getDisplay());
+		IActionBars actionBars= getViewSite().getActionBars();
 		        
 		PasteBreakpointsAction paste = new PasteBreakpointsAction(this);
 		setAction(PASTE_ACTION, paste);
 		paste.setActionDefinitionId(ActionFactory.PASTE.getCommandId());
-        getViewSite().getActionBars().setGlobalActionHandler(ActionFactory.PASTE.getId(), paste);
+		actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), paste);
         getViewer().addSelectionChangedListener(paste);
         paste.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));
 		        
@@ -237,6 +258,14 @@ public class BreakpointsView extends VariablesView implements IBreakpointManager
 		setAction(ACTION_REMOVE_FROM_GROUP, remove);
 		getViewer().addSelectionChangedListener(remove);
 		
+		IUndoContext undoContext= DebugUITools.getBreakpointsUndoContext();
+		fUndoAction= new UndoActionHandler(getSite(), undoContext);
+		fUndoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_UNDO);
+		fRedoAction= new RedoActionHandler(getSite(), undoContext);
+		fRedoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_REDO);
+		actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), fUndoAction);
+		actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), fRedoAction);
+
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionDropAdapter.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionDropAdapter.java
index cbaced5..b63b1c8 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.ui.IWorkbenchPartSite;
 
 /**
  * Drop Adapter allowing expressions, variables and text to be dropped in the Expression View.
@@ -54,7 +55,8 @@ import org.eclipse.swt.dnd.TransferData;
  */
 public class ExpressionDropAdapter extends ViewerDropAdapter {
 
-	private TransferData fCurrentTransferType = null;
+    private IWorkbenchPartSite fSite;
+    private TransferData fCurrentTransferType = null;
 	private boolean fInsertBefore;
 	private int fDropType;
 	
@@ -67,8 +69,9 @@ public class ExpressionDropAdapter extends ViewerDropAdapter {
      * Constructor takes the viewer this drop adapter applies to.
      * @param viewer the viewer to add drop to
      */
-    protected ExpressionDropAdapter(TreeModelViewer viewer) {
+    protected ExpressionDropAdapter(IWorkbenchPartSite site, TreeModelViewer viewer) {
         super(viewer);
+        fSite = site;
         setFeedbackEnabled(true);
         setSelectionFeedbackEnabled(false);
         setScrollExpandEnabled(false);
@@ -473,7 +476,7 @@ public class ExpressionDropAdapter extends ViewerDropAdapter {
      */
     private IExpression createExpression(String exp) {
         IWatchExpression expression = DebugPlugin.getDefault().getExpressionManager().newWatchExpression(exp);
-        IAdaptable object = DebugUITools.getDebugContext();
+        IAdaptable object = DebugUITools.getPartDebugContext(fSite);
         IDebugElement context = null;
         if (object instanceof IDebugElement) {
             context = (IDebugElement) object;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
index bcf9c86..5cc4ef9 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.model.IDebugElement;
 import org.eclipse.debug.core.model.IWatchExpression;
 import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
+import org.eclipse.debug.internal.ui.actions.expressions.EditWatchExpressinInPlaceAction;
 import org.eclipse.debug.internal.ui.actions.expressions.PasteWatchExpressionsAction;
 import org.eclipse.debug.internal.ui.actions.variables.ChangeVariableValueAction;
 import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
@@ -49,6 +50,7 @@ import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
  
 /**
  * Displays expressions and their values with a detail
@@ -57,6 +59,7 @@ import org.eclipse.ui.PlatformUI;
 public class ExpressionView extends VariablesView {
 	
     private PasteWatchExpressionsAction fPasteAction;
+    private EditWatchExpressinInPlaceAction fEditInPlaceAction;
     
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.internal.ui.views.variables.VariablesView#getHelpContextId()
@@ -155,7 +158,7 @@ public class ExpressionView extends VariablesView {
      */
     protected void initDragAndDrop(TreeModelViewer viewer) {
         viewer.addDragSupport(DND.DROP_MOVE, new Transfer[] {LocalSelectionTransfer.getTransfer()}, new SelectionDragAdapter(viewer));
-        viewer.addDropSupport(DND.DROP_MOVE|DND.DROP_COPY, new Transfer[] {LocalSelectionTransfer.getTransfer(), TextTransfer.getInstance()}, new ExpressionDropAdapter(viewer));
+        viewer.addDropSupport(DND.DROP_MOVE|DND.DROP_COPY, new Transfer[] {LocalSelectionTransfer.getTransfer(), TextTransfer.getInstance()}, new ExpressionDropAdapter(getSite(), viewer));
     }
     
     /* (non-Javadoc)
@@ -165,6 +168,14 @@ public class ExpressionView extends VariablesView {
     	super.createActions();
     	fPasteAction = new PasteWatchExpressionsAction(this);
     	configure(fPasteAction, IWorkbenchCommandConstants.EDIT_PASTE, PASTE_ACTION, ISharedImages.IMG_TOOL_PASTE);
+    	fEditInPlaceAction = new EditWatchExpressinInPlaceAction(this);
+        configure(fEditInPlaceAction, IWorkbenchCommandConstants.FILE_RENAME, ActionFactory.RENAME.getId(), null);
+    	
+    }
+    
+    public void dispose() {
+        fEditInPlaceAction.dispose();
+        super.dispose();
     }
     
     /**
@@ -185,15 +196,15 @@ public class ExpressionView extends VariablesView {
     	setAction(defId, action);
     	action.setActionDefinitionId(defId);
     	getViewSite().getActionBars().setGlobalActionHandler(globalId, action);
-    	action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(imgId));
+    	if (imgId != null) {
+    	    action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(imgId));
+    	}
     }
     
     /**
      * Returns whether the given selection can be pasted into the expressions
      * view.
      * 
-     * @param selection
-     * 		the selection to paste
      * @return whether the given selection can be pasted into the given target
      */
     public boolean canPaste() {
@@ -207,8 +218,6 @@ public class ExpressionView extends VariablesView {
     /**
      * Pastes the selection into the given target
      * 
-     * @param selection
-     * 		breakpoints
      * @return whether successful
      */
     public boolean performPaste() {
@@ -226,7 +235,7 @@ public class ExpressionView extends VariablesView {
     
     // TODO: duplicate code from WatchExpressionAction
     protected IDebugElement getContext() {
-        IAdaptable object = DebugUITools.getDebugContext();
+        IAdaptable object = DebugUITools.getPartDebugContext(getSite());
         IDebugElement context = null;
         if (object instanceof IDebugElement) {
             context = (IDebugElement) object;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java
index 8527fce..ced87df 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -156,6 +156,8 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
 
     private static final String RESTART = "restart"; //$NON-NLS-1$
 
+    private static final int BREADCRUMB_TRIGGER_HEIGHT_DEFAULT = 30; // pixels
+    
     private static final int BREADCRUMB_TRIGGER_RANGE = 5; // pixels
     
     private static final int BREADCRUMB_STICKY_RANGE = 20; // pixels
@@ -264,6 +266,10 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
 	    int getHeight() {
 	        return fCrumb.getHeight();
 	    }
+	    
+	    public void dispose() {
+	        fCrumb.dispose();
+	    }
 	}
 
 	private BreadcrumbPage fBreadcrumbPage;
@@ -749,6 +755,11 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
     */
    private void autoSelectViewPage(Composite parent) {
        int breadcrumbHeight = fBreadcrumbPage.getHeight();
+       // Breadcrumb may report size 0 if it hasn't been shown yet.
+       // Bug 335536.
+       if (breadcrumbHeight == 0) {
+           breadcrumbHeight = BREADCRUMB_TRIGGER_HEIGHT_DEFAULT;
+       }
        if (parent.getClientArea().height < breadcrumbHeight + BREADCRUMB_TRIGGER_RANGE) {
            showBreadcrumbPage();
        } 
@@ -977,6 +988,7 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
         disposeCommandAction(TERMINATE_AND_RELAUNCH);
         disposeCommandAction(RESTART);
         disposeCommandAction(TERMINATE_ALL);
+        disposeCommandAction(TOGGLE_STEP_FILTERS);
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewCopyToClipboardActionDelegate.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewCopyToClipboardActionDelegate.java
index 424c88b..bcd222e 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewCopyToClipboardActionDelegate.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewCopyToClipboardActionDelegate.java
@@ -15,7 +15,6 @@ import org.eclipse.debug.internal.ui.viewers.model.VirtualCopyToClipboardActionD
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ITreeSelection;
 import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.swt.widgets.Widget;
@@ -30,10 +29,11 @@ public class LaunchViewCopyToClipboardActionDelegate extends VirtualCopyToClipbo
         if (view.isBreadcrumbVisible()) {
             ISelection selection = getSelection();
             if (selection instanceof ITreeSelection && getViewer() instanceof InternalTreeModelViewer) {
-                if (selection.isEmpty()) {
-                    selection = new TreeSelection(TreePath.EMPTY);
+                TreePath path = TreePath.EMPTY;
+                if (!selection.isEmpty()) {
+                    path = ((ITreeSelection)selection).getPaths()[0];
                 }
-                return getSelectedItems((InternalTreeModelViewer)getViewer(), ((ITreeSelection)selection).getPaths()[0]);
+                return getSelectedItems((InternalTreeModelViewer)getViewer(), path);
             }
             return new TreeItem[0];
         } else {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewMessages.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewMessages.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewMessages.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java
index 6dad2ff..791dd71 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AbstractMemoryViewPane.java
@@ -115,8 +115,8 @@ public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, IS
 		
 		addListeners();
 		
-		Object context = DebugUITools.getDebugContext();
-		if (context != null)
+		Object context = DebugUITools.getPartDebugContext(fParent.getSite());
+        if (context != null) 
 		{
 			IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(context);
 			if (retrieval != null)
@@ -132,7 +132,7 @@ public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, IS
 	{
 		MemoryViewUtil.getMemoryBlockManager().addListener(this);
 		fParent.getViewSite().getPage().addSelectionListener(this);
-		DebugUITools.getDebugContextManager().getContextService(fParent.getSite().getWorkbenchWindow()).addDebugContextListener(this);
+		DebugUITools.addPartDebugContextListener(fParent.getSite(), this);
 		DebugPlugin.getDefault().addDebugEventListener(this);
 	}
 	
@@ -140,8 +140,7 @@ public abstract class AbstractMemoryViewPane implements IMemoryBlockListener, IS
 	{
 		MemoryViewUtil.getMemoryBlockManager().removeListener(this);
 		fParent.getViewSite().getPage().removeSelectionListener(this);
-		DebugUITools.getDebugContextManager().getContextService(fParent.getSite().getWorkbenchWindow()).removeDebugContextListener(this);
-		
+        DebugUITools.removePartDebugContextListener(fParent.getSite(), this);
 		if (fStackLayout.topControl != null)
 		{
 			CTabFolder old = (CTabFolder)fStackLayout.topControl;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryBlockAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryBlockAction.java
index c018845..0ebcbb4 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryBlockAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryBlockAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,11 +104,11 @@ public class AddMemoryBlockAction extends Action implements IDebugContextListene
 		setDisabledImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_MONITOR_EXPRESSION));
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IDebugUIConstants.PLUGIN_ID + ".addMemoryMonitorAction_context"); //$NON-NLS-1$		
 		
-		// listen for context changed
-		DebugUITools.getDebugContextManager().getContextService(site.getSite().getWorkbenchWindow()).addDebugContextListener(this);
+        // listen for context changed
+        DebugUITools.addPartDebugContextListener(fSite.getSite(), this);
 		
 		// get current context
-		fCurrentContext = DebugUITools.getDebugContext();
+		fCurrentContext = DebugUITools.getPartDebugContext(site.getSite());
 		
 		// set up enablement based on current selection
 		updateAction(fCurrentContext);
@@ -127,7 +127,7 @@ public class AddMemoryBlockAction extends Action implements IDebugContextListene
 		{
 			exit = true;
 			
-			Object elem = DebugUITools.getDebugContext();
+			Object elem = fCurrentContext;
 			
 			IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(elem);
 			
@@ -347,7 +347,7 @@ public class AddMemoryBlockAction extends Action implements IDebugContextListene
 		
 		// remove listeners
 		DebugPlugin.getDefault().removeDebugEventListener(this);
-		DebugUITools.getDebugContextManager().getContextService(fSite.getSite().getWorkbenchWindow()).removeDebugContextListener(this);
+		DebugUITools.removePartDebugContextListener(fSite.getSite(), this);
 	}
 	
 	private void addDefaultRenderings(IMemoryBlock memoryBlock)
@@ -422,7 +422,7 @@ public class AddMemoryBlockAction extends Action implements IDebugContextListene
 	 */
 	public void debugContextChanged(DebugContextEvent event) {
 		if ((event.getFlags() & DebugContextEvent.ACTIVATED) > 0) {
-			IAdaptable context = DebugUITools.getDebugContext();
+			IAdaptable context = DebugUITools.getPartDebugContext(fSite.getSite());
 			updateAction(context);
 			fCurrentContext = context;			
 		}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryRenderingDialog.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryRenderingDialog.java
index 3eef011..9e57d14 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryRenderingDialog.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/AddMemoryRenderingDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -432,7 +432,7 @@ public class AddMemoryRenderingDialog extends SelectionDialog {
 			
 			if (element == null)
 			{
-				IAdaptable context = DebugUITools.getDebugContext();	
+				IAdaptable context = DebugUITools.getPartDebugContext(fSite.getSite());	
 				
 				if (context != null)
 				{
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlocksTreeViewPane.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlocksTreeViewPane.java
index eeba2d9..2e41795 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlocksTreeViewPane.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlocksTreeViewPane.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -296,7 +296,7 @@ public class MemoryBlocksTreeViewPane implements ISelectionListener, ISelectionC
 		fPresentationContext = new MemoryViewPresentationContext(site, this, null);
 		fTreeViewer = new MemoryViewTreeViewer(parent, style, fPresentationContext);
 		
-		IAdaptable context = DebugUITools.getDebugContext();
+		IAdaptable context = DebugUITools.getPartDebugContext(fParent.getSite());
 		IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(context);
 		if (retrieval != null)
 			fTreeViewer.setInput(retrieval);
@@ -307,7 +307,7 @@ public class MemoryBlocksTreeViewPane implements ISelectionListener, ISelectionC
 		fParent.getViewSite().getPage().addSelectionListener(this);
 		
 		fDebugContextListener = new TreeViewPaneContextListener();
-		DebugUITools.getDebugContextManager().getContextService(fParent.getSite().getWorkbenchWindow()).addDebugContextListener(fDebugContextListener);
+		DebugUITools.addPartDebugContextListener(fParent.getSite(), fDebugContextListener);
 		
 		fTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 
@@ -342,7 +342,7 @@ public class MemoryBlocksTreeViewPane implements ISelectionListener, ISelectionC
 	 */
 	private void updateRetrieval() {
 		
-		Object context = DebugUITools.getDebugContext();
+		Object context = DebugUITools.getPartDebugContext(fParent.getSite());
 		fRetrieval = MemoryViewUtil.getMemoryBlockRetrieval(context);
 	}
 
@@ -367,7 +367,7 @@ public class MemoryBlocksTreeViewPane implements ISelectionListener, ISelectionC
 		fParent.getViewSite().getSelectionProvider().removeSelectionChangedListener(this);
 		fParent.getViewSite().getPage().removeSelectionListener(this); 
 		fAddMemoryBlockAction.dispose();
-		DebugUITools.getDebugContextManager().getContextService(fParent.getSite().getWorkbenchWindow()).removeDebugContextListener(fDebugContextListener);
+		DebugUITools.removePartDebugContextListener(fParent.getSite(), fDebugContextListener);
 		fEvtHandler.dispose();	
         fPresentationContext.dispose();
 	}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java
index 5e8333b..bccaccc 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -352,7 +352,7 @@ public class MemoryView extends ViewPart implements IMemoryRenderingSite {
 				
 			fAddHandler = new AbstractHandler() {
 					public Object execute(ExecutionEvent event) throws ExecutionException {
-						IAdaptable context = DebugUITools.getDebugContext();
+						IAdaptable context = DebugUITools.getPartDebugContext(getSite());
 						if (context != null && MemoryViewUtil.isValidSelection(new StructuredSelection(context)))
 						{
 							RetargetAddMemoryBlockAction action = new RetargetAddMemoryBlockAction(MemoryView.this);
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java
index 137e5b0..d45f55b 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RenderingViewPane.java
@@ -821,7 +821,7 @@ public class RenderingViewPane extends AbstractMemoryViewPane implements IMemory
 		if (memoryBlock == null)
 		{
 			// get a memory block from current debug context
-			IAdaptable context = DebugUITools.getDebugContext();
+			IAdaptable context = DebugUITools.getPartDebugContext(fParent.getSite());
 			if (context != null)
 			{
 				IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(context);
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RetargetAddMemoryBlockAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RetargetAddMemoryBlockAction.java
index dfa60c0..a066781 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RetargetAddMemoryBlockAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/RetargetAddMemoryBlockAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ public class RetargetAddMemoryBlockAction extends AddMemoryBlockAction {
 
 	public void run() {
 		//	get current selection from Debug View
-		Object debugContext = DebugUITools.getDebugContext();
+		Object debugContext = DebugUITools.getPartDebugContext(fSite.getSite());
 		IAddMemoryBlocksTarget target = getAddMemoryBlocksTarget(debugContext);
 		
 		if (target != null)
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SwitchMemoryBlockAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SwitchMemoryBlockAction.java
index a6d1357..3ce6175 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SwitchMemoryBlockAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SwitchMemoryBlockAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,7 +74,7 @@ public class SwitchMemoryBlockAction extends Action implements IViewActionDelega
 		 */
 		public IStatus runInUIThread(IProgressMonitor monitor) {
 			if (fAction != null) {
-				IAdaptable context = DebugUITools.getDebugContext();
+				IAdaptable context = getDebugContext();
 				if (context != null) {
 					IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(context);
 					
@@ -229,7 +229,7 @@ public class SwitchMemoryBlockAction extends Action implements IViewActionDelega
 				// get selection from memory view
 				IMemoryBlock memoryBlock = getCurrentMemoryBlock();
 			
-				Object context = DebugUITools.getDebugContext();
+				Object context = getDebugContext();
 				IMemoryBlockRetrieval retrieval =  MemoryViewUtil.getMemoryBlockRetrieval(context);
 				if (retrieval != null) {
 					allMemoryBlocks = DebugPlugin.getDefault().getMemoryBlockManager().getMemoryBlocks(retrieval);
@@ -299,7 +299,7 @@ public class SwitchMemoryBlockAction extends Action implements IViewActionDelega
 	}
 
 	private void switchToNext() {		
-		IAdaptable context = DebugUITools.getDebugContext();
+		IAdaptable context = getDebugContext();
 		if (context instanceof IDebugElement) {
 			IDebugElement debugContext = (IDebugElement)context;
 			IMemoryBlockRetrieval retrieval = MemoryViewUtil.getMemoryBlockRetrieval(debugContext);
@@ -407,4 +407,11 @@ public class SwitchMemoryBlockAction extends Action implements IViewActionDelega
 		return label;
 	}
 
+	private IAdaptable getDebugContext() {
+        if (fView != null) {
+            return DebugUITools.getPartDebugContext(fView.getSite());
+        } else {
+            return DebugUITools.getDebugContext();
+        }
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressAction.java
index c078b7a..690b788 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.debug.ui.memory.AbstractMemoryRendering;
 import org.eclipse.debug.ui.memory.IMemoryRendering;
+import org.eclipse.debug.ui.memory.IMemoryRenderingContainer;
 import org.eclipse.debug.ui.memory.IMemoryRenderingType;
 import org.eclipse.debug.ui.memory.IRepositionableMemoryRendering;
 import org.eclipse.jface.action.Action;
@@ -43,11 +44,13 @@ import org.eclipse.ui.PlatformUI;
  */
 public class GoToAddressAction extends Action
 {
+    private IMemoryRenderingContainer fContainer;
 	private IRepositionableMemoryRendering fRendering;
 	
-	public GoToAddressAction(IRepositionableMemoryRendering rendering)
+	public GoToAddressAction(IMemoryRenderingContainer container, IRepositionableMemoryRendering rendering)
 	{		
 		super(DebugUIMessages.GoToAddressAction_title);
+		fContainer = container;
 		setToolTipText(DebugUIMessages.GoToAddressAction_title);
 		
 		fRendering = rendering;
@@ -166,7 +169,7 @@ public class GoToAddressAction extends Action
 	
 	private void addNewMemoryBlock(String expression, IMemoryBlockRetrievalExtension retrieval)
 	{
-		Object elem = DebugUITools.getDebugContext();
+		Object elem = DebugUITools.getPartDebugContext(fContainer.getMemoryRenderingSite().getSite());
 		
 		if (!(elem instanceof IDebugElement))
 			return;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingContentProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingContentProvider.java
index 639a1d2..5a7402e 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingContentProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -489,7 +489,7 @@ public class TableRenderingContentProvider extends BasicDebugViewContentProvider
 			String tmpAddress = address.toUpperCase();
 			if (tmpAddress.length() < addressLength)
 			{
-				for (int j = 0; tmpAddress.length() < addressLength; j++)
+				while  (tmpAddress.length() < addressLength)
 				{
 					tmpAddress = "0" + tmpAddress; //$NON-NLS-1$
 				}
@@ -959,7 +959,7 @@ public class TableRenderingContentProvider extends BasicDebugViewContentProvider
 			String tmpAddress = address.toUpperCase();
 			if (tmpAddress.length() < addressLength)
 			{
-				for (int j = 0; tmpAddress.length() < addressLength; j++)
+				while (tmpAddress.length() < addressLength)
 				{
 					tmpAddress = "0" + tmpAddress; //$NON-NLS-1$
 				}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/modules/ModulesViewMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/modules/ModulesViewMessages.properties
index b8c3458..c275074 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/modules/ModulesViewMessages.properties
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/modules/ModulesViewMessages.properties
@@ -1,5 +1,5 @@
 #########################################################################
-# Copyright (c) 2004, 2008 QNX Software Systems and others.
+# Copyright (c) 2004, 2010 QNX Software Systems and others.
 # All rights reserved.   This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersView.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersView.java
index acee47c..d0fa27a 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersView.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersView.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004, 2005 QNX Software Systems and others.
+ * Copyright (c) 2004, 2006 QNX Software Systems and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersViewMessages.properties b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersViewMessages.properties
index b6d1858..f7c8e34 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersViewMessages.properties
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/registers/RegistersViewMessages.properties
@@ -1,5 +1,5 @@
 #########################################################################
-# Copyright (c) 2004, 2005 QNX Software Systems and others.
+# Copyright (c) 2004, 2010 QNX Software Systems and others.
 # All rights reserved.   This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java
index 1473e28..6d00761 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,6 +14,8 @@
  *     Wind River - Pawel Piech - Fix viewer input race condition (Bug 234908)
  *     Wind River - Anton Leherbauer - Fix selection provider (Bug 254442)
  *     Patrick Chuong (Texas Instruments) - Improve usability of the breakpoint view (Bug 238956)
+ *     Patrick Chuong (Texas Instruments) and Pawel Piech (Wind River) - 
+ *     		Allow multiple debug views and multiple debug context providers (Bug 327263)
  *******************************************************************************/
 package org.eclipse.debug.internal.ui.views.variables;
 
@@ -23,47 +25,31 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.DelegatingModelPresentation;
-import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
-import org.eclipse.debug.internal.ui.LazyModelPresentation;
-import org.eclipse.debug.internal.ui.SWTFactory;
-import org.eclipse.debug.internal.ui.VariablesViewModelPresentation;
-import org.eclipse.debug.internal.ui.actions.CollapseAllAction;
-import org.eclipse.debug.internal.ui.actions.ConfigureColumnsAction;
-import org.eclipse.debug.internal.ui.actions.variables.ChangeVariableValueAction;
-import org.eclipse.debug.internal.ui.actions.variables.ShowTypesAction;
-import org.eclipse.debug.internal.ui.actions.variables.ToggleDetailPaneAction;
-import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
-import org.eclipse.debug.internal.ui.viewers.model.VirtualFindAction;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputRequestor;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputUpdate;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.ViewerInputService;
-import org.eclipse.debug.internal.ui.views.DebugModelPresentationContext;
-import org.eclipse.debug.internal.ui.views.IDebugExceptionHandler;
-import org.eclipse.debug.internal.ui.views.variables.details.AvailableDetailPanesAction;
-import org.eclipse.debug.internal.ui.views.variables.details.DetailPaneProxy;
-import org.eclipse.debug.internal.ui.views.variables.details.IDetailPaneContainer2;
-import org.eclipse.debug.ui.AbstractDebugView;
-import org.eclipse.debug.ui.DebugUITools;
-import org.eclipse.debug.ui.IDebugModelPresentation;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.contexts.DebugContextEvent;
-import org.eclipse.debug.ui.contexts.IDebugContextListener;
+
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
@@ -88,30 +74,13 @@ import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.swt.widgets.Widget;
+
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IPerspectiveDescriptor;
 import org.eclipse.ui.IPerspectiveListener;
 import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.ISaveablePart;
+import org.eclipse.ui.ISaveablePart2;
 import org.eclipse.ui.IViewSite;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.IWorkbenchPage;
@@ -124,15 +93,55 @@ import org.eclipse.ui.handlers.CollapseAllHandler;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
 import org.eclipse.ui.progress.UIJob;
+
 import org.eclipse.ui.texteditor.IUpdate;
 
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.DelegatingModelPresentation;
+import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
+import org.eclipse.debug.internal.ui.LazyModelPresentation;
+import org.eclipse.debug.internal.ui.SWTFactory;
+import org.eclipse.debug.internal.ui.VariablesViewModelPresentation;
+import org.eclipse.debug.internal.ui.actions.CollapseAllAction;
+import org.eclipse.debug.internal.ui.actions.ConfigureColumnsAction;
+import org.eclipse.debug.internal.ui.actions.variables.ChangeVariableValueAction;
+import org.eclipse.debug.internal.ui.actions.variables.ShowTypesAction;
+import org.eclipse.debug.internal.ui.actions.variables.ToggleDetailPaneAction;
+import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants;
+import org.eclipse.debug.internal.ui.viewers.model.VirtualFindAction;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputRequestor;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputUpdate;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ViewerInputService;
+import org.eclipse.debug.internal.ui.views.DebugModelPresentationContext;
+import org.eclipse.debug.internal.ui.views.IDebugExceptionHandler;
+import org.eclipse.debug.internal.ui.views.variables.details.AvailableDetailPanesAction;
+import org.eclipse.debug.internal.ui.views.variables.details.DetailPaneProxy;
+import org.eclipse.debug.internal.ui.views.variables.details.IDetailPaneContainer2;
+
+import org.eclipse.debug.ui.AbstractDebugView;
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.IDebugModelPresentation;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.debug.ui.contexts.DebugContextEvent;
+import org.eclipse.debug.ui.contexts.IDebugContextListener;
+import org.eclipse.debug.ui.contexts.IDebugContextService;
+
 /**
  * This view shows variables and their values for a particular stack frame
  */
 public class VariablesView extends AbstractDebugView implements IDebugContextListener,
 	IPropertyChangeListener, IDebugExceptionHandler,
 	IPerspectiveListener, IModelChangedListener,
-	IViewerUpdateListener, IDetailPaneContainer2, ISaveablePart {
+		IViewerUpdateListener, IDetailPaneContainer2, ISaveablePart2 {
 	
 	/**
 	 * Selection provider wrapping an exchangeable active selection provider.
@@ -418,7 +427,7 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 	 */
 	public void dispose() {
 		
-		DebugUITools.getDebugContextManager().getContextService(getSite().getWorkbenchWindow()).removeDebugContextListener(this);
+        DebugUITools.removePartDebugContextListener(getSite(), this);
 		getSite().getWorkbenchWindow().removePerspectiveListener(this);
 		DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
 		JFaceResources.getFontRegistry().removeListener(this);
@@ -675,7 +684,10 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 			}
 			
 			public void focusLost(FocusEvent e){
-				fSelectionProvider.setActiveProvider(null);
+			    // Do not reset the selection provider with the provider proxy.
+			    // This should allow toolbar actions to remain active when the view
+			    // is de-activated but still visible.
+			    // Bug 316850.
 				setAction(SELECT_ALL_ACTION, null);
 				setAction(COPY_ACTION,null);
 				setAction(FIND_ACTION, null);
@@ -696,10 +708,25 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 				});
 		
 		variablesViewer.addPostSelectionChangedListener(getTreeSelectionChangedListener());
-		DebugUITools.getDebugContextManager().getContextService(getSite().getWorkbenchWindow()).addDebugContextListener(this);
+		DebugUITools.addPartDebugContextListener(getSite(), this);
+				
 		return variablesViewer;
 	}
 
+	
+	
+	/**
+	 * Returns the active debug context for this view based on the view's 
+	 * site IDs.
+	 * 
+	 * @since 3.7
+	 */
+	protected ISelection getDebugContext() {
+	    IViewSite site = (IViewSite)getSite();
+		IDebugContextService contextService = DebugUITools.getDebugContextManager().getContextService(site.getWorkbenchWindow());
+		return contextService.getActiveContext(site.getId(), site.getSecondaryId());
+	}
+	
 	/**
 	 * Returns the presentation context id for this view.
 	 * 
@@ -707,6 +734,15 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 	 */
 	protected String getPresentationContextId() {
 		return IDebugUIConstants.ID_VARIABLE_VIEW;
+	}	
+	
+	/**
+	 * Returns the presentation context secondary id for this view.
+	 * 
+	 * @return context secondary id.
+	 */
+	protected String getPresentationContextSecondaryId() {
+		return ((IViewSite)getSite()).getSecondaryId();
 	}
 	
 	/**
@@ -779,6 +815,7 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 				
 			}
 			buildDetailPane(vertOrHoriz);
+			revealTreeSelection();
 		}
 	}
 	
@@ -829,7 +866,6 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 		fSashForm.setMaximizedControl(null);
 		fSashForm.setWeights(getLastSashWeights());
 		refreshDetailPaneContents();
-		revealTreeSelection();
 		fToggledDetailOnce = true;
 	}
 
@@ -1291,7 +1327,7 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 	 */
 	protected void becomesVisible() {
 		super.becomesVisible();
-		ISelection selection = DebugUITools.getDebugContextManager().getContextService(getSite().getWorkbenchWindow()).getActiveContext();
+		ISelection selection = getDebugContext();
 		contextActivated(selection);
 	}
 
@@ -1449,4 +1485,12 @@ public class VariablesView extends AbstractDebugView implements IDebugContextLis
 	public boolean isSaveOnCloseNeeded() {
 		return fDetailPane.isSaveOnCloseNeeded();
 	}
+
+	/*
+	 * @see org.eclipse.ui.ISaveablePart2#promptToSaveOnClose()
+	 * @since 3.7
+	 */
+	public int promptToSaveOnClose() {
+		return ISaveablePart2.YES;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/details/DetailPaneManager.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/details/DetailPaneManager.java
index 2ea40e9..324c299 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/details/DetailPaneManager.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/details/DetailPaneManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,11 +18,10 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.StringTokenizer;
-import java.util.Map.Entry;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.EvaluationResult;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.ExpressionConverter;
@@ -154,7 +153,7 @@ public class DetailPaneManager {
 			Expression expression = getEnablementExpression();
 			if (expression != null) {
 				List list = selection.toList();
-				IEvaluationContext context = new EvaluationContext(null, list);
+				IEvaluationContext context = DebugUIPlugin.createEvaluationContext(list);
 				context.addVariable("selection", list); //$NON-NLS-1$
 				enabled = evalEnablementExpression(context, expression);
 			} else {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/AbstractLaunchConfigurationTab.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/AbstractLaunchConfigurationTab.java
index 051ebd3..e75331a 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/AbstractLaunchConfigurationTab.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/AbstractLaunchConfigurationTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,13 @@ public abstract class AbstractLaunchConfigurationTab implements ILaunchConfigura
 	 * the user is typing.
 	 */
 	private Job fRereshJob;	
+	
+	/**
+	 * The set help context id
+	 * 
+	 * @since 3.7
+	 */
+	private String fHelpContextId = null;
 		
 	/**
 	 * Returns the dialog this tab is contained in, or
@@ -441,5 +448,28 @@ public abstract class AbstractLaunchConfigurationTab implements ILaunchConfigura
 		return 200;
 	}	
 
+	/**
+	 * Sets the help context id for this tab. 
+	 * <p>
+	 * Not all tabs honor this setting, but if this method is called prior
+	 * to {@link #createControl(Composite)}, a tab implementation may use this
+	 * to set the context help associated with this tab.
+	 * </p>
+	 * @param id help context id
+	 * @since 3.7
+	 */
+	public void setHelpContextId(String id) {
+		fHelpContextId = id;
+	}
+	
+	/**
+	 * Returns the help context id for this tab or <code>null</code>.
+	 * 
+	 * @return the help context for this tab or <code>null</code> if unknown.
+	 * @since 3.7
+	 */
+	public String getHelpContextId() {
+		return fHelpContextId;
+	}
 }
 
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java
index 8c8df2f..d4eadad 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 package org.eclipse.debug.ui;
 
  
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -53,6 +55,8 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.accessibility.AccessibleAdapter;
 import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -83,6 +87,10 @@ import com.ibm.icu.text.MessageFormat;
  * is stored in, whether it should appear in the favorites list, and perspective
  * switching behavior for an associated launch.
  * <p>
+ * Clients may call {@link #setHelpContextId(String)} on this tab prior to control
+ * creation to alter the default context help associated with this tab. 
+ * </p>
+ * <p>
  * Clients may instantiate this class.
  * </p>
  * @since 2.0
@@ -137,14 +145,22 @@ public class CommonTab extends AbstractLaunchConfigurationTab {
 			scheduleUpdateJob();
 		}
 	};
-    
+	
+    /**
+	 * Constructs a new tab with default context help.
+	 */
+	public CommonTab() {
+		setHelpContextId(IDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_COMMON_TAB);
+	}
+	
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
 	 */
 	public void createControl(Composite parent) {		
 		Composite comp = new Composite(parent, SWT.NONE);
 		setControl(comp);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_COMMON_TAB);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), getHelpContextId());
 		comp.setLayout(new GridLayout(2, true));
 		comp.setFont(parent.getFont());
 		
@@ -372,7 +388,7 @@ public class CommonTab extends AbstractLaunchConfigurationTab {
 	    fAltEncodingButton = createRadioButton(group, LaunchConfigurationsMessages.CommonTab_3);  
 	    fAltEncodingButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
 	    
-	    fEncodingCombo = new Combo(group, SWT.READ_ONLY);
+	    fEncodingCombo = new Combo(group, SWT.NONE);
 	    fEncodingCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 	    fEncodingCombo.setFont(parent.getFont());
 	    List allEncodings = IDEEncoding.getIDEEncodings();
@@ -403,6 +419,33 @@ public class CommonTab extends AbstractLaunchConfigurationTab {
 	    fAltEncodingButton.addSelectionListener(listener);
 	    fDefaultEncodingButton.addSelectionListener(listener);
 	    fEncodingCombo.addSelectionListener(listener);
+	    fEncodingCombo.addKeyListener(new KeyAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.swt.events.KeyListener#keyReleased(org.eclipse.swt.events.KeyEvent)
+			 */
+			public void keyReleased(KeyEvent e) {
+				scheduleUpdateJob();
+			}
+		});
+	}
+    
+	/**
+	 * Returns whether or not the given encoding is valid.
+	 * 
+	 * @param enc
+	 *            the encoding to validate
+	 * @return <code>true</code> if the encoding is valid, <code>false</code>
+	 *         otherwise
+	 */
+	private boolean isValidEncoding(String enc) {
+		try {
+			return Charset.isSupported(enc);
+		} catch (IllegalCharsetNameException e) {
+			// This is a valid exception
+			return false;
+		}
 	}
 
 	/**
@@ -739,8 +782,10 @@ public class CommonTab extends AbstractLaunchConfigurationTab {
     private boolean validateEncoding() {
         if (fAltEncodingButton.getSelection()) {
             if (fEncodingCombo.getSelectionIndex() == -1) {
-                setErrorMessage(LaunchConfigurationsMessages.CommonTab_No_Encoding_Selected);
-                return false;
+            	if (!isValidEncoding(fEncodingCombo.getText().trim())) {
+                	setErrorMessage(LaunchConfigurationsMessages.CommonTab_15);
+                	return false;
+                }
             }
         }
         return true;
@@ -797,7 +842,7 @@ public class CommonTab extends AbstractLaunchConfigurationTab {
 		setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, configuration, fLaunchInBackgroundButton.getSelection(), true);
 		String encoding = null;
 		if(fAltEncodingButton.getSelection()) {
-		    encoding = fEncodingCombo.getText();
+		    encoding = fEncodingCombo.getText().trim();
 		}
 		configuration.setAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, encoding);
 		boolean captureOutput = false;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugPopup.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugPopup.java
index 124bd97..442eb0d 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugPopup.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugPopup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public abstract class DebugPopup extends PopupDialog {
      *  the dialog, or <code>null</code>
      */
     public DebugPopup(Shell parent, Point anchor, String commandId) {
-        super(parent, PopupDialog.INFOPOPUPRESIZE_SHELLSTYLE, true, false, true, true, false, null, null);
+        super(parent, PopupDialog.INFOPOPUPRESIZE_SHELLSTYLE, true, true, false, true, false, null, null);
         fAnchor = anchor;
         fCommandId = commandId;
     }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugUITools.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugUITools.java
index e7cac3b..bc97021 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugUITools.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/DebugUITools.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,18 @@ package org.eclipse.debug.ui;
 
 import java.util.Set;
 
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IResource;
+import org.eclipse.core.commands.operations.IOperationHistory;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.core.commands.operations.ObjectUndoContext;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -24,11 +33,32 @@ import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.ide.undo.DeleteMarkersOperation;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
+
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationType;
 import org.eclipse.debug.core.ILaunchDelegate;
+import org.eclipse.debug.core.model.IBreakpoint;
 import org.eclipse.debug.core.model.IDebugElement;
 import org.eclipse.debug.core.model.IDebugTarget;
 import org.eclipse.debug.core.model.IProcess;
@@ -39,6 +69,7 @@ import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.DefaultLabelProvider;
 import org.eclipse.debug.internal.ui.DelegatingModelPresentation;
 import org.eclipse.debug.internal.ui.LazyModelPresentation;
+import org.eclipse.debug.internal.ui.actions.ActionMessages;
 import org.eclipse.debug.internal.ui.contexts.DebugContextManager;
 import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationDialog;
 import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager;
@@ -49,23 +80,14 @@ import org.eclipse.debug.internal.ui.memory.MemoryRenderingManager;
 import org.eclipse.debug.internal.ui.sourcelookup.SourceLookupFacility;
 import org.eclipse.debug.internal.ui.sourcelookup.SourceLookupUIUtils;
 import org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager;
+
+import org.eclipse.debug.ui.contexts.IDebugContextListener;
 import org.eclipse.debug.ui.contexts.IDebugContextManager;
+import org.eclipse.debug.ui.contexts.IDebugContextService;
 import org.eclipse.debug.ui.memory.IMemoryRenderingManager;
 import org.eclipse.debug.ui.sourcelookup.ISourceContainerBrowser;
 import org.eclipse.debug.ui.sourcelookup.ISourceLookupResult;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.console.IConsole;
-import org.eclipse.ui.handlers.HandlerUtil;
+
 
 /**
  * This class provides utilities for clients of the debug UI.
@@ -79,6 +101,13 @@ import org.eclipse.ui.handlers.HandlerUtil;
 public class DebugUITools {
 	
 	/**
+	 * The undo context for breakpoints.
+	 * 
+	 * @since 3.7
+	 */
+	private static ObjectUndoContext fgBreakpointsUndoContext;
+
+	/**
 	 * Returns the shared image managed under the given key, or <code>null</code>
 	 * if none.
 	 * <p>
@@ -112,8 +141,10 @@ public class DebugUITools {
 	}
 		
 	/**
-	 * Returns the default image descriptor for the given element
-	 * or <code>null</code> if none is defined.
+	 * Returns the default image descriptor for the given element.
+	 * 
+	 * @param element the element
+	 * @return the image descriptor or <code>null</code> if none
 	 */
 	public static ImageDescriptor getDefaultImageDescriptor(Object element) {
 		String imageKey= getDefaultImageKey(element);
@@ -184,10 +215,9 @@ public class DebugUITools {
 	}	
 	
 	/**
-	 * Returns the currently selected element in the 
-	 * debug view of the current workbench page,
-	 * or <code>null</code> if there is no current
-	 * debug context.
+	 * Returns the element of the currently selected context in the 
+	 * active workbench window. Returns <code>null</code> if there is no 
+	 * current debug context.
 	 * <p>
 	 * This method used to return <code>null</code> when called from a non-UI thread,
 	 * but since 3.1, this methods also works when called from a non-UI thread.
@@ -199,20 +229,171 @@ public class DebugUITools {
 	    IWorkbenchWindow activeWindow = SelectedResourceManager.getDefault().getActiveWindow();
 	    if (activeWindow != null) {
 	    	ISelection activeContext = DebugUITools.getDebugContextManager().getContextService(activeWindow).getActiveContext();
-	    	if (activeContext instanceof IStructuredSelection) {
-	    		IStructuredSelection selection = (IStructuredSelection) activeContext;
-	    		if (!selection.isEmpty()) {
-	    			Object firstElement = selection.getFirstElement();
-	    			if (firstElement instanceof IAdaptable) {
-						return (IAdaptable) firstElement;
-					}
-	    		}
-	    	}
+	    	return getDebugContextElementForSelection(activeContext);
 	    }
 	    return null;
 	}
 
 	/**
+	 * Return the undo context that should be used for operations involving breakpoints.
+	 * 
+	 * @return the undo context for breakpoints
+	 * @since 3.7
+	 */
+	public static synchronized IUndoContext getBreakpointsUndoContext() {
+		if (fgBreakpointsUndoContext == null) {
+			fgBreakpointsUndoContext= new ObjectUndoContext(new Object(), "Breakpoints Context"); //$NON-NLS-1$
+			fgBreakpointsUndoContext.addMatch(WorkspaceUndoUtil.getWorkspaceUndoContext());
+		}
+		return fgBreakpointsUndoContext;
+	}
+
+	/**
+	 * Deletes the given breakpoints using the operation history, which allows to undo the deletion.
+	 * 
+	 * @param breakpoints the breakpoints to delete
+	 * @param shell the shell used for potential user interactions, or <code>null</code> if unknown
+	 * @param progressMonitor the progress monitor
+	 * @throws CoreException if the deletion fails
+	 * @since 3.7
+	 */
+	public static void deleteBreakpoints(IBreakpoint[] breakpoints, final Shell shell, IProgressMonitor progressMonitor) throws CoreException {
+		IMarker[] markers= new IMarker[breakpoints.length];
+		int markerCount;
+		for (markerCount= 0; markerCount < breakpoints.length; markerCount++) {
+			if (!breakpoints[markerCount].isRegistered())
+				break;
+			markers[markerCount]= breakpoints[markerCount].getMarker();
+			if (markers[markerCount] == null)
+				break;
+		}
+
+		// We only offer undo support if all breakpoints are registered and have associated markers
+		boolean allowUndo= markerCount == breakpoints.length;
+
+		DebugPlugin.getDefault().getBreakpointManager().removeBreakpoints(breakpoints, !allowUndo);
+
+		if (allowUndo) {
+
+			for (int i= 0; i < markers.length; i++)
+				markers[i].setAttribute(DebugPlugin.ATTR_BREAKPOINT_IS_DELETED, true);
+
+			IAdaptable context= null;
+			if (shell != null) {
+				context= new IAdaptable() {
+					public Object getAdapter(Class adapter) {
+						if (adapter == Shell.class)
+							return shell;
+						return null;
+					}
+				};
+			}
+
+			String operationName= markers.length == 1 ? ActionMessages.DeleteBreakpointOperationName : ActionMessages.DeleteBreakpointsOperationName;
+			IUndoableOperation deleteMarkerOperation= new DeleteMarkersOperation(markers, operationName);
+			deleteMarkerOperation.removeContext(WorkspaceUndoUtil.getWorkspaceUndoContext());
+			deleteMarkerOperation.addContext(DebugUITools.getBreakpointsUndoContext());
+			IOperationHistory operationHistory= PlatformUI.getWorkbench().getOperationSupport().getOperationHistory();
+			try {
+				operationHistory.execute(deleteMarkerOperation, progressMonitor, context);
+			} catch (ExecutionException e) {
+				throw new CoreException(DebugUIPlugin.newErrorStatus("Exception while deleting breakpoint markers", e)); //$NON-NLS-1$
+			}
+		}
+	}
+
+    /**
+     * Returns the currently active context for the given workbench part. Returns <code>null</code>
+     * if there is no current debug context.</p>
+     * 
+     * @param site the part's site where to look up the active context
+     * @return the currently active debug context in the given part, or <code>null</code>
+     * @since 3.7
+     */
+    public static IAdaptable getPartDebugContext(IWorkbenchPartSite site) {
+        IDebugContextService service = DebugUITools.getDebugContextManager().getContextService(site.getWorkbenchWindow());
+        String id = null;
+        String secondaryId = null;
+        id = site.getId();
+        if (site instanceof IViewSite) {
+            secondaryId = ((IViewSite)site).getSecondaryId();
+        }
+        ISelection activeContext = service.getActiveContext(id, secondaryId); 
+        return getDebugContextElementForSelection(activeContext);
+    }
+
+    /**
+     * Adds the given debug context listener as a listener to the debug context changed events, in
+     * the context of the given workbench part.
+     * <p>
+     * This method is a utility method which ultimately calls
+     * {@link IDebugContextService#addDebugContextListener(IDebugContextListener, String, String)}
+     * using the part id parameters extracted from the given part parameter.
+     * </p>
+     * 
+     * @param site the part's site to get the part ID and part secondary ID from
+     * @param listener Debug context listener to add
+     * 
+     * @see IDebugContextService#addDebugContextListener(IDebugContextListener, String, String)
+     * @see IDebugContextManager#addDebugContextListener(IDebugContextListener)
+     * @since 3.7
+     */
+    public static void addPartDebugContextListener(IWorkbenchPartSite site, IDebugContextListener listener) {
+        IDebugContextService service = DebugUITools.getDebugContextManager().getContextService(site.getWorkbenchWindow());
+        String id = site.getId();
+        String secondaryId = null;
+        if (site instanceof IViewSite) {
+            secondaryId = ((IViewSite)site).getSecondaryId();
+        }
+        service.addDebugContextListener(listener, id, secondaryId);
+    }
+
+    /**
+     * Removes the given debug context listener as a listener to the debug context changed events,
+     * in the context of the given workbench part.
+     * <p>
+     * This method is a utility method which ultimately calls
+     * {@link IDebugContextService#removeDebugContextListener(IDebugContextListener, String, String)}
+     * using the part id parameters extracted from the given part parameter.
+     * </p>
+     * 
+     * @param site the part's site to get the part ID and part secondary ID from
+     * @param listener Debug context listener to remove
+     * 
+     * @see IDebugContextService#removeDebugContextListener(IDebugContextListener, String, String)
+     * @see IDebugContextManager#removeDebugContextListener(IDebugContextListener)
+     * @since 3.7
+     */
+    public static void removePartDebugContextListener(IWorkbenchPartSite site, IDebugContextListener listener) {
+        IDebugContextService service = DebugUITools.getDebugContextManager().getContextService(site.getWorkbenchWindow());
+        String id = site.getId();
+        String secondaryId = null;
+        if (site instanceof IViewSite) {
+            secondaryId = ((IViewSite)site).getSecondaryId();
+        }
+        service.removeDebugContextListener(listener, id, secondaryId);
+    }
+    
+    /**
+	 * Extracts the first element from the given selection and casts it to IAdaptable.
+	 * 
+	 * @param activeContext the selection
+	 * @return an adaptable
+	 */
+    private static IAdaptable getDebugContextElementForSelection(ISelection activeContext) {
+        if (activeContext instanceof IStructuredSelection) {
+            IStructuredSelection selection = (IStructuredSelection) activeContext;
+            if (!selection.isEmpty()) {
+                Object firstElement = selection.getFirstElement();
+                if (firstElement instanceof IAdaptable) {
+                    return (IAdaptable) firstElement;
+                }
+            }
+        }
+        return null;
+    }
+    
+	/**
 	 * Returns the currently selected resource in the active workbench window,
 	 * or <code>null</code> if none. If an editor is active, the resource adapter
 	 * associated with the editor is returned, if any.
@@ -488,13 +669,13 @@ public class DebugUITools {
 	 * Saves all dirty editors and builds the workspace according to current
 	 * preference settings, and returns whether a launch should proceed.
 	 * <p>
-	 * The following preferences effect whether dirty editors are saved,
+	 * The following preferences affect whether dirty editors are saved,
 	 * and/or if the user is prompted to save dirty editors:<ul>
 	 * <li>PREF_NEVER_SAVE_DIRTY_EDITORS_BEFORE_LAUNCH</li>
 	 * <li>PREF_PROMPT_SAVE_DIRTY_EDITORS_BEFORE_LAUNCH</li>
 	 * <li>PREF_AUTOSAVE_DIRTY_EDITORS_BEFORE_LAUNCH</li>
 	 * </ul>
-	 * The following preference effects whether a build is performed before
+	 * The following preference affects whether a build is performed before
 	 * launching (if required):<ul>
 	 * <li>PREF_BUILD_BEFORE_LAUNCH</li>
 	 * </ul>
@@ -513,7 +694,7 @@ public class DebugUITools {
 	 * Saves all dirty editors according to current
 	 * preference settings, and returns whether a launch should proceed.
 	 * <p>
-	 * The following preferences effect whether dirty editors are saved,
+	 * The following preferences affect whether dirty editors are saved,
 	 * and/or if the user is prompted to save dirty editors:<ul>
 	 * <li>PREF_NEVER_SAVE_DIRTY_EDITORS_BEFORE_LAUNCH</li>
 	 * <li>PREF_PROMPT_SAVE_DIRTY_EDITORS_BEFORE_LAUNCH</li>
@@ -561,7 +742,7 @@ public class DebugUITools {
 	 * the given configuration in the specified mode, returning the resulting launch
 	 * object.
 	 * <p>
-	 * The following preference effects whether a build is performed before
+	 * The following preference affects whether a build is performed before
 	 * launching (if required):<ul>
 	 * <li>PREF_BUILD_BEFORE_LAUNCH</li>
 	 * </ul>
@@ -744,13 +925,13 @@ public class DebugUITools {
 	}
 	
 	/**
-	 * Returns the launch group that the given launch configuration belongs
-	 * to, for the specified mode, or <code>null</code> if none.
+	 * Returns the launch group that the given launch configuration belongs to, for the specified
+	 * mode, or <code>null</code> if none.
 	 * 
-	 * @param configuration
-	 * @param mode
-	 * @return the launch group the given launch configuration belongs to, for
-	 * the specified mode, or <code>null</code> if none
+	 * @param configuration the launch configuration
+	 * @param mode the mode
+	 * @return the launch group the given launch configuration belongs to, for the specified mode,
+	 *         or <code>null</code> if none
 	 * @since 3.0
 	 */
 	public static ILaunchGroup getLaunchGroup(ILaunchConfiguration configuration, String mode) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/EnvironmentTab.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/EnvironmentTab.java
index ab22caf..fe32eaf 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/EnvironmentTab.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/EnvironmentTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 Keith Seitz and others.
+ * Copyright (c) 2000, 2010 Keith Seitz and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,10 @@ import com.ibm.icu.text.MessageFormat;
  * Launch configuration tab for configuring the environment passed
  * into Runtime.exec(...) when a config is launched.
  * <p>
+ * Clients may call {@link #setHelpContextId(String)} on this tab prior to control
+ * creation to alter the default context help associated with this tab. 
+ * </p>
+ * <p>
  * This class may be instantiated.
  * </p> 
  * @since 3.0
@@ -176,6 +180,13 @@ public class EnvironmentTab extends AbstractLaunchConfigurationTab {
 		}
 	}
 
+	/**
+	 * Constructs a new tab with default context help.
+	 */
+	public EnvironmentTab() {
+		setHelpContextId(IDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_ENVIRONMENT_TAB);
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
 	 */
@@ -183,7 +194,7 @@ public class EnvironmentTab extends AbstractLaunchConfigurationTab {
 		// Create main composite
 		Composite mainComposite = SWTFactory.createComposite(parent, 2, 1, GridData.FILL_HORIZONTAL);
 		setControl(mainComposite);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_ENVIRONMENT_TAB);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), getHelpContextId());
 		
 		createEnvironmentTable(mainComposite);
 		createTableButtons(mainComposite);
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDetailPane3.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDetailPane3.java
index fd299c9..ae16374 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDetailPane3.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/IDetailPane3.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ public interface IDetailPane3 extends IDetailPane, ISaveablePart {
 	
 	/**
 	 * Removes the given property listener from this workbench part.
-	 * Has no affect if an identical listener is not registered.
+	 * Has no effect if an identical listener is not registered.
 	 *
 	 * @param listener a property listener
 	 */
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/StringVariableSelectionDialog.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/StringVariableSelectionDialog.java
index 74c2fb3..e51c52c 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/StringVariableSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/StringVariableSelectionDialog.java
@@ -21,11 +21,17 @@ import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
 import org.eclipse.debug.internal.ui.SWTFactory;
+import org.eclipse.debug.internal.ui.preferences.StringVariablePreferencePage;
 import org.eclipse.debug.internal.ui.stringsubstitution.IArgumentSelector;
 import org.eclipse.debug.internal.ui.stringsubstitution.StringSubstitutionMessages;
 import org.eclipse.debug.internal.ui.stringsubstitution.StringVariableLabelProvider;
 import org.eclipse.debug.internal.ui.stringsubstitution.StringVariablePresentationManager;
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.preference.PreferenceNode;
+import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -59,7 +65,6 @@ public class StringVariableSelectionDialog extends ElementListSelectionDialog {
 	// the argument value
 	private Text fArgumentText;
 	private String fArgumentValue;
-	private Button fEditVariablesButton;
 	private Button fShowAllButton;
 	private Label fShowAllDescription;
 
@@ -255,8 +260,8 @@ public class StringVariableSelectionDialog extends ElementListSelectionDialog {
 			SWTFactory.createHorizontalSpacer(btnContainer, 2);
 		}
 		
-		fEditVariablesButton = SWTFactory.createPushButton(btnContainer, StringSubstitutionMessages.StringVariableSelectionDialog_0, null, GridData.HORIZONTAL_ALIGN_END);
-		fEditVariablesButton.addSelectionListener(new SelectionAdapter() {
+		Button editButton = SWTFactory.createPushButton(btnContainer, StringSubstitutionMessages.StringVariableSelectionDialog_0, null, GridData.HORIZONTAL_ALIGN_END);
+		editButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				editVariables();
 			}
@@ -295,16 +300,42 @@ public class StringVariableSelectionDialog extends ElementListSelectionDialog {
 		final Display display = DebugUIPlugin.getStandardDisplay();
 		BusyIndicator.showWhile(display, new Runnable() {
 			public void run() {
-				SWTFactory.showPreferencePage("org.eclipse.debug.ui.StringVariablePreferencePage"); //$NON-NLS-1$
-				final IStringVariable[] elements = VariablesPlugin.getDefault().getStringVariableManager().getVariables();
-				display.asyncExec(new Runnable() {
-					public void run() {
-						setListElements(elements);
-					}
-				});
+				// show the preference page in a new dialog rather than using the utility method to re-use a
+				// preference page, in case this dialog is being opened from a preference page
+				if (showVariablesPage()) {
+					final IStringVariable[] elements = VariablesPlugin.getDefault().getStringVariableManager().getVariables();
+					display.asyncExec(new Runnable() {
+						public void run() {
+							setListElements(elements);
+						}
+					});
+				}
 			}
 		});		
 	}
+	
+	/**
+	 * Shows the string variables preference page and returns <code>true</code> if OK was pressed.
+	 * 
+	 * @return whether OK was pressed
+	 */
+	private boolean showVariablesPage() {
+		StringVariablePreferencePage page = new StringVariablePreferencePage();
+		page.setTitle(StringSubstitutionMessages.StringVariableSelectionDialog_1);
+		final IPreferenceNode targetNode = new PreferenceNode("org.eclipse.debug.ui.StringVariablePreferencePage", page); //$NON-NLS-1$
+		PreferenceManager manager = new PreferenceManager();
+		manager.addToRoot(targetNode);
+		final PreferenceDialog dialog = new PreferenceDialog(DebugUIPlugin.getShell(), manager);
+		final boolean [] result = new boolean[] { false };
+		BusyIndicator.showWhile(DebugUIPlugin.getStandardDisplay(), new Runnable() {
+			public void run() {
+				dialog.create();
+				dialog.setMessage(targetNode.getLabelText());
+				result[0]= (dialog.open() == Window.OK);
+			}
+		});	
+		return result[0];
+	}	
 
 	/**
 	 * Configures the argument for the selected variable.
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java
index 7575041..03715ae 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/AbstractLaunchHistoryAction.java
@@ -385,7 +385,7 @@ public abstract class AbstractLaunchHistoryAction implements IActionDelegate2, I
 	 * @since 3.6
 	 */
 	public void runWithEvent(IAction action, Event event) {
-		if((event.stateMask & SWT.MOD1) > 0) {
+		if(((event.stateMask & SWT.MOD1) > 0) && (event.type != SWT.KeyDown)) {
 			ILaunchConfiguration configuration = null;
 			if(LaunchingResourceManager.isContextLaunchEnabled(getLaunchGroupIdentifier())) {
 				configuration = resolveContextConfiguration();
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ContextualLaunchAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ContextualLaunchAction.java
index 58fce27..3a412cd 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ContextualLaunchAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ContextualLaunchAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.runtime.CoreException;
@@ -208,7 +207,7 @@ public abstract class ContextualLaunchAction implements IObjectActionDelegate, I
 		if(o instanceof IEditorPart) {
 			selection.set(0, ((IEditorPart)o).getEditorInput());
 		}
-		IEvaluationContext context = new EvaluationContext(null, selection);
+		IEvaluationContext context = DebugUIPlugin.createEvaluationContext(selection);
 		context.setAllowPluginActivation(true);
 		context.addVariable("selection", selection); //$NON-NLS-1$
 		while (iter.hasNext()) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java
index fe0869b..8ffe1c3 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/DebugCommandAction.java
@@ -227,8 +227,7 @@ public abstract class DebugCommandAction extends Action implements IDebugContext
      * but subclasses may override as required.
      * 
      * @return the context this action operates on
-     * @nooverride This method is not intended to be re-implemented or extended by clients.
-     * @noreference This method is not intended to be referenced by clients.
+     * @since 3.7
      */
     protected ISelection getContext() {
 		if (fPart != null) {
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ILaunchable.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ILaunchable.java
index 1fa3abc..6c46794 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ILaunchable.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/ILaunchable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,35 @@ package org.eclipse.debug.ui.actions;
  * an adapter of this type will be considered by the contextual
  * launch support. 
  * <p>
+ * The debug platform uses the {@link ILaunchable} interface as a tag for
+ * objects that can be launched via the context menu 'Run As / Debug As' actions
+ * and run/debug tool bar buttons. The platform checks if an {@link ILaunchable}
+ * adapter is available from the selection/active editor to determine if it
+ * should be considered for launching. However, the platform never actually
+ * retrieves the adapter or calls any methods on it (the interface is, in fact, empty).
+ * </p>
+ * <p>The debug platform performs the following test:</p>
+ * <ul>
+ * <li>
+ * <code>Platform.getAdapterManager().hasAdapter(X, ILaunchable.class.getName());</code>
+ * </li>
+ * </ul>
+ * <p>
+ * Thus objects that can be launched need to register {@link ILaunchable} adapters, but
+ * don't have to provide implementations. There is also no harm in implementing the interface
+ * or providing the adapter. For example, JDT contributes an adapter as follows. Although
+ * no adapter is actually provided the platform will answer <code>true</code> to 
+ * <code>hasAdapter(...)</code>.
+ * </p>
+ * <pre>
+ * <extension point="org.eclipse.core.runtime.adapters">
+ *    <factory 
+ *       class="" 
+ *       adaptableType="org.eclipse.jdt.core.IJavaElement">
+ *       <adapter type="org.eclipse.debug.ui.actions.ILaunchable"/>
+ *   </factory>
+ * </pre>
+ * <p>
  * Clients may contribute an adapter of this type for launchable objects
  * via the <code>org.eclipse.core.runtime.adapters</code> extension
  * point. A factory and implementation of this interface are not actually
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java
index 620654d..a596253 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/actions/LaunchShortcutsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.runtime.CoreException;
@@ -144,7 +143,7 @@ public class LaunchShortcutsAction extends Action implements IMenuCreator, IWork
 		else {
 			list.addAll(ss.toList());
 		}
-		IEvaluationContext context = new EvaluationContext(null, list);
+		IEvaluationContext context = DebugUIPlugin.createEvaluationContext(list);
 		context.setAllowPluginActivation(true);
 		context.addVariable("selection", list); //$NON-NLS-1$
 		return context;
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextProvider2.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextProvider2.java
new file mode 100644
index 0000000..48c8b16
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextProvider2.java
@@ -0,0 +1,44 @@
+/*****************************************************************
+ * Copyright (c) 2010, 2011 Texas Instruments and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Patrick Chuong (Texas Instruments) - Allow multiple debug views and 
+ *     		multiple debug context providers (Bug 327263)
+ *****************************************************************/
+package org.eclipse.debug.ui.contexts;
+
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+
+
+/**
+ * This extension to {@link IDebugContextProvider} allows clients to specify the scope that the context 
+ * provider will apply to. With {@link IDebugContextProvider2}, a provider indicate if it should be a context
+ * provider for the entire {@link IWorkbenchWindow} or only for is given {@link IWorkbenchPart}. 
+ * 
+ * <p>
+ * This interface is intended to be implemented by clients
+ * </p>
+ * 
+ * @since 3.7
+ */
+public interface IDebugContextProvider2 extends IDebugContextProvider {
+	/**
+	 * Return whether the provider can be set as an active provider for the 
+	 * window.  
+	 * <p>
+	 * If <code>true</code>, when the provider's part is 
+	 * activated this provider will become the active debug context provider
+	 * for the whole window.  If <code>false</code>, this provider will
+	 * only set the active context in a given workbench part.
+	 *  
+	 * @return <code>true</code> if this provider can act as the provider for the entire window, <code>false</code> if it can
+	 * only be the provider for its given part.
+	 * provider for a window.
+	 */
+	boolean isWindowContextProvider();
+}
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextService.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextService.java
index 0d2eac2..7b2a5d7 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextService.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Patrick Chuong (Texas Instruments) - Allow multiple debug views and 
+ *     		multiple debug context providers (Bug 327263)
  *******************************************************************************/
 package org.eclipse.debug.ui.contexts;
 
@@ -124,4 +126,59 @@ public interface IDebugContextService {
 	 */
 	public void removeDebugContextProvider(IDebugContextProvider provider);
 	
+	/**
+	 * Returns the active context in the specified part of this service's window
+	 * or <code>null</code> if none.
+	 * 
+	 * @param partId part identifier
+	 * @param partSecondaryId part secondary identifier
+	 * @return active context or <code>null</code>
+	 * @since 3.7
+	 */
+	ISelection getActiveContext(String partId, String partSecondaryId);
+	
+	/**
+	 * Registers for the given debug context listener for context notification
+	 * from the specified part in this service's window.
+	 * 
+	 * @param listener debug context listener
+	 * @param partId part identifier
+	 * @param partSecondaryId part secondary identifier
+	 * @since 3.7
+	 */
+	void addDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId);
+	
+	/**
+	 * Unregisters the given debug context listener for context change notification
+	 * from the specified part in this service's window.
+	 * 
+	 * @param listener debug context listener
+	 * @param partId part identifier
+	 * @param partSecondaryId part secondary identifier
+	 * @since 3.7
+	 */
+	void removeDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId);
+	
+	/**
+	 * Registers the given debug context listener for post context change notification
+	 * in the specified part of this service's window. Post listeners are notified of
+	 * context changes after all non-post listeners are notified. 
+	 * 
+	 * @param listener debug context listener
+	 * @param partSecondaryId part secondary identifier
+	 * @param partId part identifier
+	 * @since 3.7
+	 */
+	void addPostDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId);
+	
+	/**
+	 * Unregisters the given debug context listener for post context change notification
+	 * in the specified part of this service's window.
+	 * 
+	 * @param listener debug context listener
+	 * @param partSecondaryId part secondary identifier
+	 * @param partId part identifier
+	 * @since 3.7
+	 */
+	void removePostDebugContextListener(IDebugContextListener listener, String partId, String partSecondaryId);
 }
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java
index c1283d3..8d7399f 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/AbstractTableRendering.java
@@ -2485,7 +2485,7 @@ public abstract class AbstractTableRendering extends AbstractBaseTableRendering
 	 */
 	protected void createActions() {
 		fCopyToClipboardAction = new CopyTableRenderingToClipboardAction(this, fTableViewer);
-		fGoToAddressAction = new GoToAddressAction(this);
+		fGoToAddressAction = new GoToAddressAction(getMemoryRenderingContainer(), this);
 		fResetMemoryBlockAction = new ResetToBaseAddressAction(this);
 		fPrintViewTabAction = new PrintTableRenderingAction(this, fTableViewer);
 		
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/IMemoryRenderingBindingsProvider.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/IMemoryRenderingBindingsProvider.java
index 68455f3..e70659f 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/IMemoryRenderingBindingsProvider.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/memory/IMemoryRenderingBindingsProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public interface IMemoryRenderingBindingsProvider {
      * Adds a listener to this binding provider.  The listener will be notified
      * when rendering bindings change.
      * <p>
-     * Has no affect if an identical listener is already registered.
+     * Has no effect if an identical listener is already registered.
      * </p>
      * @param listener listener to add
      */
@@ -71,7 +71,7 @@ public interface IMemoryRenderingBindingsProvider {
     /**
      * Removes a listener from this binding provider.  
      * <p>
-     * Has no affect if an identical listener is not already registered.
+     * Has no effect if an identical listener is not already registered.
      * </p>
      * @param listener listener to remove
      */
diff --git a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/sourcelookup/SourceLookupTab.java b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/sourcelookup/SourceLookupTab.java
index c52d81c..26cb0af 100644
--- a/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/sourcelookup/SourceLookupTab.java
+++ b/eclipse/plugins/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/sourcelookup/SourceLookupTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,10 @@ import org.eclipse.ui.PlatformUI;
  * debug platform source lookup facilities - a source lookup director
  * with associated participants and source containers.
  * <p>
+ * Clients may call {@link #setHelpContextId(String)} on this tab prior to control
+ * creation to alter the default context help associated with this tab. 
+ * </p>
+ * <p>
  * This tab may be instantiated. 
  * </p>
  * @since 3.0	 
@@ -42,13 +46,20 @@ public class SourceLookupTab extends AbstractLaunchConfigurationTab {
 	//the panel displaying the containers
 	private SourceLookupPanel fSourceLookupPanel;
 		
+	/**
+	 * Constructs a new tab with default context help.
+	 */
+	public SourceLookupTab() {
+		setHelpContextId(IDebugHelpContextIds.SOURCELOOKUP_TAB);
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
 	 */
 	public void createControl(Composite parent) {
 		Composite comp = new Composite(parent, SWT.NONE);
 		setControl(comp);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IDebugHelpContextIds.SOURCELOOKUP_TAB);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), getHelpContextId());
 		GridLayout topLayout = new GridLayout();
 		topLayout.marginWidth = 0;
 		topLayout.marginHeight = 0;
diff --git a/eclipse/plugins/org.eclipse.ecf.identity/plugin.properties b/eclipse/plugins/org.eclipse.ecf.identity/plugin.properties
index eba4079..aeebc90 100644
--- a/eclipse/plugins/org.eclipse.ecf.identity/plugin.properties
+++ b/eclipse/plugins/org.eclipse.ecf.identity/plugin.properties
@@ -6,5 +6,5 @@
 # http://www.eclipse.org/legal/epl-v10.html
 #
 ############################################################################
-plugin.name=ECF Identity API
+plugin.name=ECF Core Identity API
 plugin.provider=Eclipse.org - ECF
diff --git a/eclipse/plugins/org.eclipse.ecf/javadoc.xml b/eclipse/plugins/org.eclipse.ecf/javadoc.xml
index fed9d0c..f07b473 100644
--- a/eclipse/plugins/org.eclipse.ecf/javadoc.xml
+++ b/eclipse/plugins/org.eclipse.ecf/javadoc.xml
@@ -15,7 +15,7 @@
         	author="false" 
         	classpathref="files.classpath" 
         	destdir="${output}" 
-        	doctitle="Eclipse Communication Framework (ECF) 3.4.0" 
+        	doctitle="Eclipse Communication Framework (ECF) 3.5.0" 
         	nodeprecated="false" 
         	nodeprecatedlist="false" 
         	noindex="false" 
@@ -28,15 +28,20 @@
         	
         	<fileset dir="${source}" defaultexcludes="true">
 	        	<include name="**/*.java"/>
-	        	<exclude name="**/util/**"/>
 	        	<exclude name="**/ui/**"/>
-	        	<exclude name="**/provider/**"/>
 	        	<exclude name="**/smack/**"/>
 	        	<exclude name="**/incubation/**"/>
 	        	<exclude name="**/internal/**"/>
 	        	<exclude name="**/ch/**"/>
 	        	<exclude name="**/jmdns/**"/>
 	        	<exclude name="**/tests/**"/>
+	        	<exclude name="**/sdo/**"/>
+	        	<exclude name="**/tutorial/**"/>
+	        	<exclude name="**/twitter/**"/>
+	        	<exclude name="**/jivesoftware/**"/>
+	        	<exclude name="**/pubsub/**"/>
+	        	<exclude name="**/collab/**"/>
+	        	<exclude name="**/osgi/services/discovery/**"/>
         	</fileset>
     	</javadoc>
     </target>
diff --git a/eclipse/plugins/org.eclipse.ecf/src/org/eclipse/ecf/core/provider/BaseContainerInstantiator.java b/eclipse/plugins/org.eclipse.ecf/src/org/eclipse/ecf/core/provider/BaseContainerInstantiator.java
index 7519cef..9525df2 100644
--- a/eclipse/plugins/org.eclipse.ecf/src/org/eclipse/ecf/core/provider/BaseContainerInstantiator.java
+++ b/eclipse/plugins/org.eclipse.ecf/src/org/eclipse/ecf/core/provider/BaseContainerInstantiator.java
@@ -44,9 +44,8 @@ public class BaseContainerInstantiator implements IContainerInstantiator {
 
 	protected Set getInterfacesForClass(Class clazz) {
 		Set clazzes = getInterfacesForClass(new HashSet(), clazz);
-		int index = 0;
 		Set result = new HashSet();
-		for (Iterator i = clazzes.iterator(); i.hasNext(); index++)
+		for (Iterator i = clazzes.iterator(); i.hasNext();)
 			result.add(((Class) i.next()).getName());
 		return result;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.app/.classpath b/eclipse/plugins/org.eclipse.equinox.app/.classpath
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/.project b/eclipse/plugins/org.eclipse.equinox.app/.project
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.core.resources.prefs b/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.core.resources.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.jdt.core.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.jdt.ui.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.app/.settings/org.eclipse.pde.core.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index 01e74ee..b7dbd6b
--- a/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.app/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.app; singleton:=true
-Bundle-Version: 1.3.1.qualifier
+Bundle-Version: 1.3.100.qualifier
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.equinox.internal.app.Activator
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.app/about.html b/eclipse/plugins/org.eclipse.equinox.app/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/build.properties b/eclipse/plugins/org.eclipse.equinox.app/build.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/plugin.properties b/eclipse/plugins/org.eclipse.equinox.app/plugin.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/plugin.xml b/eclipse/plugins/org.eclipse.equinox.app/plugin.xml
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/schema/applications.exsd b/eclipse/plugins/org.eclipse.equinox.app/schema/applications.exsd
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java
old mode 100644
new mode 100755
index cfea0f5..78fb61f
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ package org.eclipse.equinox.app;
 /**
  * Bootstrap type for an application.  An IApplication represent executable 
  * entry points into an application.  An IApplication can be configured into 
- * the Platform's <code>org.eclipse.equinox.applications</code> extension-point.
+ * the Platform's <code>org.eclipse.core.runtime.applications</code> extension-point.
  *
  * <p>
  * Clients may implement this interface.
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Activator.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Activator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java
old mode 100644
new mode 100755
index fa3f406..2a2db26
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
 package org.eclipse.equinox.internal.app;
 
 import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.equinox.app.IApplicationContext;
 import org.eclipse.osgi.framework.console.CommandInterpreter;
 import org.eclipse.osgi.framework.console.CommandProvider;
@@ -23,6 +24,11 @@ public class AppCommands implements CommandProvider {
 	private final static String LAUNCHABLE_APP_FILTER = "(&(application.locked=false)(application.launchable=true)(application.visible=true))"; //$NON-NLS-1$
 	private final static String ACTIVE_APP_FILTER = "(!(application.state=STOPPING))"; //$NON-NLS-1$
 	private final static String LOCKED_APP_FILTER = "(application.locked=true)"; //$NON-NLS-1$
+	private final static String NEW_LINE = "\r\n"; //$NON-NLS-1$
+	private final static String TAB = "\t"; //$NON-NLS-1$
+
+	// holds the mappings from command name to command arguments and command description
+	private Map commandsHelp = null;
 
 	private static AppCommands instance;
 	private BundleContext context;
@@ -81,19 +87,88 @@ public class AppCommands implements CommandProvider {
 	}
 
 	public String getHelp() {
+		return getHelp(null);
+	}
+
+	/*
+	 * This method either returns the help message for a particular command, 
+	 * or returns the help messages for all commands (if commandName is null)
+	 */
+	private String getHelp(String commandName) {
 		StringBuffer sb = new StringBuffer();
-		sb.append("\n---Application Admin Commands---\n"); //$NON-NLS-1$
-		sb.append("\tactiveApps - lists all running application IDs\n"); //$NON-NLS-1$
-		sb.append("\tapps - lists all installed application IDs\n"); //$NON-NLS-1$
-		sb.append("\tlockApp <application id> - locks the specified application ID\n"); //$NON-NLS-1$
-		sb.append("\tschedApp <application id> <time filter> [true|false] - schedules the specified application id to launch at the specified time filter.  Can optionally make the schedule recurring.\n"); //$NON-NLS-1$
-		sb.append("\tstartApp <application id> - starts the specified application ID\n"); //$NON-NLS-1$
-		sb.append("\tstopApp <application id> - stops the specified running application ID\n"); //$NON-NLS-1$
-		sb.append("\tunlockApp <application id> - unlocks the specified application ID\n"); //$NON-NLS-1$
-		sb.append("\tunschedApp <application id> - unschedules all scheduled applications with the specified application ID\n"); //$NON-NLS-1$
+
+		if (commandsHelp == null) {
+			initializeCommandsHelp();
+		}
+
+		if (commandName != null) {
+			if (commandsHelp.containsKey(commandName)) {
+				addCommand(commandName, (String[]) commandsHelp.get(commandName), sb);
+			}
+			return sb.toString();
+		}
+
+		addHeader(Messages.console_help_app_commands_header, sb);
+		Iterator i = commandsHelp.entrySet().iterator();
+		while (i.hasNext()) {
+			Entry entry = (Entry) i.next();
+			String command = (String) entry.getKey();
+			String[] attributes = (String[]) entry.getValue();
+			addCommand(command, attributes, sb);
+		}
+
 		return sb.toString();
 	}
 
+	private void initializeCommandsHelp() {
+		commandsHelp = new LinkedHashMap();
+		commandsHelp.put("activeApps", new String[] {Messages.console_help_activeapps_description}); //$NON-NLS-1$
+		commandsHelp.put("apps", new String[] {Messages.console_help_apps_description}); //$NON-NLS-1$
+		commandsHelp.put("lockApp", new String[] {Messages.console_help_arguments, Messages.console_help_lockapp_description}); //$NON-NLS-1$
+		commandsHelp.put("schedApp", new String[] {Messages.console_help_schedapp_arguments, Messages.console_help_schedapp_description}); //$NON-NLS-1$
+		commandsHelp.put("startApp", new String[] {Messages.console_help_arguments, Messages.console_help_startapp_description}); //$NON-NLS-1$
+		commandsHelp.put("stopApp", new String[] {Messages.console_help_arguments, Messages.console_help_stopapp_description}); //$NON-NLS-1$
+		commandsHelp.put("unlockApp", new String[] {Messages.console_help_arguments, Messages.console_help_unlockapp_description}); //$NON-NLS-1$
+		commandsHelp.put("unschedApp", new String[] {Messages.console_help_arguments, Messages.console_help_unschedapp_description}); //$NON-NLS-1$
+	}
+
+	/** Private helper method for getHelp.  Formats the help headers. */
+	private void addHeader(String header, StringBuffer help) {
+		help.append("---"); //$NON-NLS-1$
+		help.append(header);
+		help.append("---"); //$NON-NLS-1$
+		help.append(NEW_LINE);
+	}
+
+	/** Private helper method for getHelp.  Formats the command descriptions. */
+	private void addCommand(String command, String description, StringBuffer help) {
+		help.append(TAB);
+		help.append(command);
+		help.append(" - "); //$NON-NLS-1$
+		help.append(description);
+		help.append(NEW_LINE);
+	}
+
+	/** Private helper method for getHelp.  Formats the command descriptions with command arguments. */
+	private void addCommand(String command, String parameters, String description, StringBuffer help) {
+		help.append(TAB);
+		help.append(command);
+		help.append(" "); //$NON-NLS-1$
+		help.append(parameters);
+		help.append(" - "); //$NON-NLS-1$
+		help.append(description);
+		help.append(NEW_LINE);
+	}
+
+	/** Private helper method for getHelp. According to its arguments chooses which one of the above addCommand methods to use. */
+	private void addCommand(String command, String[] attributes, StringBuffer help) {
+		if (attributes.length == 1) {
+			addCommand(command, attributes[0], help);
+		} else if (attributes.length == 2) {
+			addCommand(command, attributes[0], attributes[1], help);
+		}
+	}
+
 	private Dictionary getServiceProps(ServiceReference ref) {
 		String[] keys = ref.getPropertyKeys();
 		Hashtable props = new Hashtable(keys.length);
@@ -281,4 +356,23 @@ public class AppCommands implements CommandProvider {
 			}
 		}
 	}
+
+	/**
+	 * Handles the help command
+	 * 
+	 * @param intp
+	 * @return description for a particular command or false if there is no command with the specified name
+	 */
+	public Object _help(CommandInterpreter intp) {
+		String commandName = intp.nextArgument();
+		if (commandName == null) {
+			return Boolean.FALSE;
+		}
+		String help = getHelp(commandName);
+
+		if (help.length() > 0) {
+			return help;
+		}
+		return Boolean.FALSE;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppDescriptor.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppDescriptor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseScheduledApplication.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseScheduledApplication.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/ErrorApplication.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/ErrorApplication.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java
old mode 100644
new mode 100755
index dd53d48..7b3a927
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,19 @@ public class Messages extends NLS {
 	public static String main_running;
 	public static String max_running;
 
+	// console
+	public static String console_help_app_commands_header;
+	public static String console_help_activeapps_description;
+	public static String console_help_apps_description;
+	public static String console_help_arguments;
+	public static String console_help_lockapp_description;
+	public static String console_help_schedapp_arguments;
+	public static String console_help_schedapp_description;
+	public static String console_help_startapp_description;
+	public static String console_help_stopapp_description;
+	public static String console_help_unlockapp_description;
+	public static String console_help_unschedapp_description;
+
 	static {
 		// load message values from bundle file
 		reloadMessages();
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties
old mode 100644
new mode 100755
index 66bdefb..270ed86
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -37,4 +37,17 @@ persistence_error_saving=An error occurred while saving: {0}
 singleton_running=A singleton application instance is already running: {0}
 apps_running=One or more applications are already running
 max_running=The application instance maximum has been reached: {0}
-main_running=An application instance is already running on the main thread: {0} 
+main_running=An application instance is already running on the main thread: {0}
+
+### console
+console_help_app_commands_header=Application Admin Commands
+console_help_activeapps_description=lists all running application IDs
+console_help_apps_description=lists all installed application IDs
+console_help_arguments=<application id>
+console_help_lockapp_description=locks the specified application ID
+console_help_schedapp_arguments=<application id> <time filter> [true|false]
+console_help_schedapp_description=schedules the specified application id to launch at the specified time filter.  Can optionally make the schedule recurring.
+console_help_startapp_description=starts the specified application ID
+console_help_stopapp_description=stops the specified running application ID
+console_help_unlockapp_description=unlocks the specified application ID
+console_help_unschedapp_description=unschedules all scheduled applications with the specified application ID
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
old mode 100644
new mode 100755
index 1993330..9d96d98
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,11 +33,11 @@ import org.osgi.framework.InvalidSyntaxException;
  * specified filter.
  * <P>
  * ApplicationAdminPermission may be granted for different actions:
- * <code>lifecycle</code>, <code>schedule</code> and <code>lock</code>. The
- * permission <code>schedule</code> implies the permission
- * <code>lifecycle</code>.
+ * {@code lifecycle}, {@code schedule} and {@code lock}. The
+ * permission {@code schedule} implies the permission
+ * {@code lifecycle}.
  * 
- * @version $Revision: 6860 $
+ * @version $Id: 8c7941578972d6f61ed9aeffac374a0b8c294056 $
  */
 public class ApplicationAdminPermission extends Permission {
 	private static final long serialVersionUID = 1L;
@@ -50,8 +50,8 @@ public class ApplicationAdminPermission extends Permission {
 	/**
 	 * Allows scheduling of the target applications. The permission to
 	 * schedule an application implies that the scheduler can also 
-	 * manage the lifecycle of that application i.e. <code>schedule</code>
-	 * implies <code>lifecycle</code>
+	 * manage the lifecycle of that application i.e. {@code schedule}
+	 * implies {@code lifecycle}
 	 */
 	public static final String SCHEDULE_ACTION = "schedule";
 
@@ -63,35 +63,35 @@ public class ApplicationAdminPermission extends Permission {
 	private ApplicationDescriptor	applicationDescriptor;
 
 	/**
-	 * Constructs an ApplicationAdminPermission. The <code>filter</code>
-	 * specifies the target application. The <code>filter</code> is an
-	 * LDAP-style filter, the recognized properties are <code>signer</code>
-	 * and <code>pid</code>. The pattern specified in the <code>signer</code>
+	 * Constructs an ApplicationAdminPermission. The {@code filter}
+	 * specifies the target application. The {@code filter} is an
+	 * LDAP-style filter, the recognized properties are {@code signer}
+	 * and {@code pid}. The pattern specified in the {@code signer}
 	 * is matched with the Distinguished Name chain used to sign the application. 
 	 * Wildcards in a DN are not matched according to the filter string rules, 
 	 * but according to the rules defined for a DN chain. The attribute 
-	 * <code>pid</code> is matched with the PID of the application according to
+	 * {@code pid} is matched with the PID of the application according to
 	 * the filter string rules. 
 	 * <p>
-	 * If the <code>filter</code> is <code>null</code> then it matches 
-	 * <code>"*"</code>. If
-	 * <code>actions</code> is <code>"*"</code> then it identifies all the
+	 * If the {@code filter} is {@code null} then it matches 
+	 * {@code "*"}. If
+	 * {@code actions} is {@code "*"} then it identifies all the
 	 * possible actions.
 	 * 
 	 * @param filter
-	 *            filter to identify application. The value <code>null</code>
-	 *            is equivalent to <code>"*"</code> and it indicates "all application".
+	 *            filter to identify application. The value {@code null}
+	 *            is equivalent to {@code "*"} and it indicates "all application".
 	 * @param actions
 	 *            comma-separated list of the desired actions granted on the
 	 *            applications or "*" means all the actions. It must not be
-	 *            <code>null</code>. The order of the actions in the list is
+	 *            {@code null}. The order of the actions in the list is
 	 *            not significant.
 	 * @throws InvalidSyntaxException 
-	 *            is thrown if the specified <code>filter</code> is not syntactically
+	 *            is thrown if the specified {@code filter} is not syntactically
 	 *            correct.
 	 * 
 	 * @exception NullPointerException
-	 *                is thrown if the actions parameter is <code>null</code>
+	 *                is thrown if the actions parameter is {@code null}
 	 * 
 	 * @see ApplicationDescriptor
 	 * @see org.osgi.framework.AdminPermission
@@ -115,10 +115,10 @@ public class ApplicationAdminPermission extends Permission {
 	}
 	
 	/**
-	 * This contructor should be used when creating <code>ApplicationAdminPermission</code>
-	 * instance for <code>checkPermission</code> call. 
-	 * @param application the tareget of the operation, it must not be <code>null</code>
-	 * @param actions the required operation. it must not be <code>null</code>
+	 * This contructor should be used when creating {@code ApplicationAdminPermission}
+	 * instance for {@code checkPermission} call. 
+	 * @param application the tareget of the operation, it must not be {@code null}
+	 * @param actions the required operation. it must not be {@code null}
 	 * @throws NullPointerException if any of the arguments is null. 
 	 */
 	public ApplicationAdminPermission(ApplicationDescriptor application, String actions) {
@@ -136,10 +136,10 @@ public class ApplicationAdminPermission extends Permission {
 	
 	/**
 	 * This method can be used in the {@link java.security.ProtectionDomain}
-	 * implementation in the <code>implies</code> method to insert the
+	 * implementation in the {@code implies} method to insert the
 	 * application ID of the current application into the permission being
 	 * checked. This enables the evaluation of the 
-	 * <code><<SELF>></code> pseudo targets.
+	 * {@code <<SELF>>} pseudo targets.
 	 * @param applicationId the ID of the current application.
 	 * @return the permission updated with the ID of the current application
 	 */
@@ -162,23 +162,23 @@ public class ApplicationAdminPermission extends Permission {
 	}
 
 	/**
-	 * Checks if the specified <code>permission</code> is implied by this permission.
+	 * Checks if the specified {@code permission} is implied by this permission.
 	 * The method returns true under the following conditions:
 	 * <UL>
 	 * <LI> This permission was created by specifying a filter (see {@link #ApplicationAdminPermission(String, String)})
-	 * <LI> The implied <code>otherPermission</code> was created for a particular {@link ApplicationDescriptor}
+	 * <LI> The implied {@code otherPermission} was created for a particular {@link ApplicationDescriptor}
 	 *      (see {@link #ApplicationAdminPermission(ApplicationDescriptor, String)})
-	 * <LI> The <code>filter</code> of this permission mathes the <code>ApplicationDescriptor</code> specified
-	 *      in the <code>otherPermission</code>. If the filter in this permission is the 
-	 *      <code><<SELF>></code> pseudo target, then the currentApplicationId set in the 
-	 *      <code>otherPermission</code> is compared to the application Id of the target 
-	 *      <code>ApplicationDescriptor</code>.
+	 * <LI> The {@code filter} of this permission mathes the {@code ApplicationDescriptor} specified
+	 *      in the {@code otherPermission}. If the filter in this permission is the 
+	 *      {@code <<SELF>>} pseudo target, then the currentApplicationId set in the 
+	 *      {@code otherPermission} is compared to the application Id of the target 
+	 *      {@code ApplicationDescriptor}.
 	 * <LI> The list of permitted actions in this permission contains all actions required in the 
-	 *      <code>otherPermission</code>  
+	 *      {@code otherPermission}  
 	 * </UL> 
 	 * Otherwise the method returns false.
 	 * @param otherPermission the implied permission
-	 * @return true if this permission implies the <code>otherPermission</code>, false otherwise.
+	 * @return true if this permission implies the {@code otherPermission}, false otherwise.
 	 */
   public boolean implies(Permission otherPermission) {
   	  if( otherPermission == null )
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
old mode 100644
new mode 100755
index d9ea020..eb0fa80
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@ import org.osgi.framework.InvalidSyntaxException;
  * information about it. The application descriptor can be used for instance
  * creation.
  * 
- * @version $Revision: 1.13 $
+ * @version $Revision: 1.14 $
  */
 
 public abstract class ApplicationDescriptor {
@@ -114,14 +114,14 @@ public abstract class ApplicationDescriptor {
 	private final boolean[] locked = {false};
 
 	/**
-	 * Constructs the <code>ApplicationDescriptor</code>.
+	 * Constructs the {@code ApplicationDescriptor}.
 	 *
 	 * @param applicationId
 	 *            The identifier of the application. Its value is also available
-	 *            as the <code>service.pid</code> service property of this 
-	 *            <code>ApplicationDescriptor</code> service. This parameter must not
-	 *            be <code>null</code>.
-	 * @throws NullPointerException if the specified <code>applicationId</code> is null.
+	 *            as the {@code service.pid} service property of this 
+	 *            {@code ApplicationDescriptor} service. This parameter must not
+	 *            be {@code null}.
+	 * @throws NullPointerException if the specified {@code applicationId} is null.
 	 */
 	protected ApplicationDescriptor(String applicationId) {
 		if (null == applicationId) {
@@ -142,21 +142,21 @@ public abstract class ApplicationDescriptor {
 	}
 
 	/**
-	 * This method verifies whether the specified <code>pattern</code>
+	 * This method verifies whether the specified {@code pattern}
 	 * matches the Distinguished Names of any of the certificate chains
 	 * used to authenticate this application.
 	 * <P>
-	 * The <code>pattern</code> must adhere to the 
+	 * The {@code pattern} must adhere to the 
 	 * syntax defined in {@link org.osgi.service.application.ApplicationAdminPermission}
 	 * for signer attributes. 
 	 * <p>
 	 * This method is used by {@link ApplicationAdminPermission#implies(java.security.Permission)} method
-	 * to match target <code>ApplicationDescriptor</code> and filter. 
+	 * to match target {@code ApplicationDescriptor} and filter. 
 	 * 
 	 * @param pattern a pattern for a chain of Distinguished Names. It must not be null.
-	 * @return <code>true</code> if the specified pattern matches at least
+	 * @return {@code true} if the specified pattern matches at least
 	 *   one of the certificate chains used to authenticate this application 
-	 * @throws NullPointerException if the specified <code>pattern</code> is null.
+	 * @throws NullPointerException if the specified {@code pattern} is null.
 	 * @throws IllegalStateException if the application descriptor was
 	 *   unregistered
 	 */
@@ -165,10 +165,10 @@ public abstract class ApplicationDescriptor {
 	/**
 	 * Returns the properties of the application descriptor as key-value pairs.
 	 * The return value contains the locale aware and unaware properties as
-	 * well. The returned <code>Map</code> will include the service
-	 * properties of this <code>ApplicationDescriptor</code> as well.
+	 * well. The returned {@code Map} will include the service
+	 * properties of this {@code ApplicationDescriptor} as well.
 	 * <p>
-	 * This method will call the <code>getPropertiesSpecific</code> method
+	 * This method will call the {@code getPropertiesSpecific} method
 	 * to enable the container implementation to insert application model and/or
 	 * container implementation specific properties.
 	 * <P>
@@ -183,7 +183,7 @@ public abstract class ApplicationDescriptor {
 	 * @param locale
 	 *            the locale string, it may be null, the value null means the
 	 *            default locale. If the provided locale is the empty String 
-	 *            (<code>""</code>)then raw (non-localized) values are returned.
+	 *            ({@code ""})then raw (non-localized) values are returned.
 	 * 
 	 * @return copy of the service properties of this application descriptor service,
 	 *         according to the specified locale. If locale is null then the
@@ -215,22 +215,22 @@ public abstract class ApplicationDescriptor {
 	 * method. 
 	 * 
 	 * Localizable properties must be returned localized if the provided
-	 * <code>locale</code> argument is not the empty String. The value
-	 * <code>null</code> indicates to use the default locale, for other
+	 * {@code locale} argument is not the empty String. The value
+	 * {@code null} indicates to use the default locale, for other
 	 * values the specified locale should be used.
 	 *  
 	 * The returned {@link java.util.Map} must contain the standard OSGi service 
 	 * properties as well
 	 * (e.g. service.id, service.vendor etc.) and specialized application
 	 * descriptors may offer further service properties. 
-	 * The returned <code>Map</code>
+	 * The returned {@code Map}
 	 * contains a snapshot of the properties. It will not reflect further changes in the
 	 * property values nor will the update of the Map change the corresponding
 	 * service property.
 
 	 * @param locale the locale to be used for localizing the properties.
-	 * If <code>null</code> the default locale should be used. If it is
-	 * the empty String (<code>""</code>) then raw (non-localized) values
+	 * If {@code null} the default locale should be used. If it is
+	 * the empty String ({@code ""}) then raw (non-localized) values
 	 * should be returned.
 	 * 
 	 * @return the application model specific and/or container implementation
@@ -242,63 +242,59 @@ public abstract class ApplicationDescriptor {
 	protected abstract Map getPropertiesSpecific(String locale);
 
 	/**
-	 * Launches a new instance of an application. The <code>args</code> parameter specifies
-	 * the startup parameters for the instance to be launched, it may be null.
+	 * Launches a new instance of an application. The {@code args} parameter
+	 * specifies the startup parameters for the instance to be launched, it may
+	 * be null.
 	 * <p>
 	 * The following steps are made:
 	 * <UL>
 	 * <LI>Check for the appropriate permission.
-	 * <LI>Check the locking state of the application. If locked then throw
-	 *     an {@link ApplicationException} with the reason code 
-	 *     {@link ApplicationException#APPLICATION_LOCKED}.
-	 * <LI>Calls the <code>launchSpecific()</code> method to create and start an application
-	 * instance.
-	 * <LI>Returns the <code>ApplicationHandle</code> returned by the 
+	 * <LI>Check the locking state of the application. If locked then throw an
+	 * {@link ApplicationException} with the reason code
+	 * {@link ApplicationException#APPLICATION_LOCKED}.
+	 * <LI>Calls the {@code launchSpecific()} method to create and start an
+	 * application instance.
+	 * <LI>Returns the {@code ApplicationHandle} returned by the
 	 * launchSpecific()
 	 * </UL>
 	 * The caller has to have ApplicationAdminPermission(applicationPID,
 	 * "launch") in order to be able to perform this operation.
 	 * <P>
-	 * The <code>Map</code> argument of the launch method contains startup 
-	 * arguments for the
-	 * application. The keys used in the Map must be non-null, non-empty <code>String<code>
-	 * objects. They can be standard or application
-	 * specific. OSGi defines the <code>org.osgi.triggeringevent</code>
-	 * key to be used to
-	 * pass the triggering event to a scheduled application, however
-	 * in the future it is possible that other well-known keys will be defined.
-	 * To avoid unwanted clashes of keys, the following rules should be applied:
+	 * The {@code Map} argument of the launch method contains startup arguments
+	 * for the application. The keys used in the Map must be non-null, non-empty
+	 * {@code String} objects. They can be standard or application specific.
+	 * OSGi defines the {@code org.osgi.triggeringevent} key to be used to pass
+	 * the triggering event to a scheduled application, however in the future it
+	 * is possible that other well-known keys will be defined. To avoid unwanted
+	 * clashes of keys, the following rules should be applied:
 	 * <ul>
-	 *   <li>The keys starting with the dash (-) character are application
-	 *       specific, no well-known meaning should be associated with them.</li>
-	 *   <li>Well-known keys should follow the reverse domain name based naming.
-	 *       In particular, the keys standardized in OSGi should start with
-	 *       <code>org.osgi.</code>.</li>
+	 * <li>The keys starting with the dash (-) character are application
+	 * specific, no well-known meaning should be associated with them.</li>
+	 * <li>Well-known keys should follow the reverse domain name based naming.
+	 * In particular, the keys standardized in OSGi should start with
+	 * {@code org.osgi.}.</li>
 	 * </ul>
 	 * <P>
-	 * The method is synchronous, it return only when the application instance was
-	 * successfully started or the attempt to start it failed.
+	 * The method is synchronous, it return only when the application instance
+	 * was successfully started or the attempt to start it failed.
 	 * <P>
-	 * This method never returns <code>null</code>. If launching an application fails,
-	 * the appropriate exception is thrown.
+	 * This method never returns {@code null}. If launching an application
+	 * fails, the appropriate exception is thrown.
 	 * 
-	 * @param arguments
-	 *            Arguments for the newly launched application, may be null
+	 * @param arguments Arguments for the newly launched application, may be
+	 *        null
 	 * 
-	 * @return the registered ApplicationHandle, which represents the newly 
-	 *         launched application instance. Never returns <code>null</code>.
+	 * @return the registered ApplicationHandle, which represents the newly
+	 *         launched application instance. Never returns {@code null}.
 	 * 
-	 * @throws SecurityException
-	 *             if the caller doesn't have "lifecycle"
-	 *             ApplicationAdminPermission for the application.
-	 * @throws ApplicationException
-	 *             if starting the application failed
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 * @throws IllegalArgumentException 
-	 *             if the specified <code>Map</code> contains invalid keys
-	 *             (null objects, empty <code>String</code> or a key that is not
-	 *              <code>String</code>)
+	 * @throws SecurityException if the caller doesn't have "lifecycle"
+	 *         ApplicationAdminPermission for the application.
+	 * @throws ApplicationException if starting the application failed
+	 * @throws IllegalStateException if the application descriptor is
+	 *         unregistered
+	 * @throws IllegalArgumentException if the specified {@code Map} contains
+	 *         invalid keys (null objects, empty {@code String} or a key that is
+	 *         not {@code String})
 	 */
 	public final ApplicationHandle launch(Map arguments) throws ApplicationException {
 		SecurityManager sm = System.getSecurityManager();
@@ -328,10 +324,10 @@ public abstract class ApplicationDescriptor {
 	 * Called by launch() to create and start a new instance in an application
 	 * model specific way. It also creates and registeres the application handle
 	 * to represent the newly created and started instance and registeres it.
-	 * The method is synchonous, it return only when the application instance was
+	 * The method is synchronous, it return only when the application instance was
 	 * successfully started or the attempt to start it failed.
 	 * <P>
-	 * This method must not return <code>null</code>. If launching the application
+	 * This method must not return {@code null}. If launching the application
 	 * failed, and exception must be thrown.
 	 * 
 	 * @param arguments
@@ -345,7 +341,7 @@ public abstract class ApplicationDescriptor {
 	 * @throws IllegalStateException
 	 *             if the application descriptor is unregistered
 	 * @throws Exception
-	 *             if any problem occures.
+	 *             if any problem occurs.
 	 */
 	protected abstract ApplicationHandle launchSpecific(Map arguments) throws Exception;
 
@@ -368,65 +364,58 @@ public abstract class ApplicationDescriptor {
 	 * {@link ScheduledApplication} service in Service Registry, representing
 	 * the created schedule.
 	 * <p>
-	 * The <code>Map</code> argument of the  method contains startup 
-	 * arguments for the application. The keys used in the Map must be non-null, 
-	 * non-empty <code>String<code> objects. The argument values must be
-	 * of primitive types, wrapper classes of primitive types, <code>String</code>
-	 * or arrays or collections of these.
+	 * The {@code Map} argument of the method contains startup arguments for the
+	 * application. The keys used in the Map must be non-null, non-empty
+	 * {@code String} objects. The argument values must be of primitive types,
+	 * wrapper classes of primitive types, {@code String} or arrays or
+	 * collections of these.
 	 * <p>
 	 * The created schedules have a unique identifier within the scope of this
-	 * <code>ApplicationDescriptor</code>. This identifier can be specified
-	 * in the <code>scheduleId</code> argument. If this argument is <code>null</code>,
-	 * the identifier is automatically generated.
+	 * {@code ApplicationDescriptor}. This identifier can be specified in the
+	 * {@code scheduleId} argument. If this argument is {@code null}, the
+	 * identifier is automatically generated.
 	 * 
-	 * @param scheduleId 
-	 *             the identifier of the created schedule. It can be <code>null</code>,
-	 *             in this case the identifier is automatically generated.
-	 * @param arguments
-	 *            the startup arguments for the scheduled application, may be
-	 *            null
-	 * @param topic
-	 *            specifies the topic of the triggering event, it may contain a
-	 *            trailing asterisk as wildcard, the empty string is treated as
-	 *            "*", must not be null
-	 * @param eventFilter
-	 *            specifies and LDAP filter to filter on the properties of the
-	 *            triggering event, may be null
-	 * @param recurring
-	 *            if the recurring parameter is false then the application will
-	 *            be launched only once, when the event firstly occurs. If the
-	 *            parameter is true then scheduling will take place for every
-	 *            event occurrence; i.e. it is a recurring schedule
+	 * @param scheduleId the identifier of the created schedule. It can be
+	 *        {@code null}, in this case the identifier is automatically
+	 *        generated.
+	 * @param arguments the startup arguments for the scheduled application, may
+	 *        be null
+	 * @param topic specifies the topic of the triggering event, it may contain
+	 *        a trailing asterisk as wildcard, the empty string is treated as
+	 *        "*", must not be null
+	 * @param eventFilter specifies and LDAP filter to filter on the properties
+	 *        of the triggering event, may be null
+	 * @param recurring if the recurring parameter is false then the application
+	 *        will be launched only once, when the event firstly occurs. If the
+	 *        parameter is true then scheduling will take place for every event
+	 *        occurrence; i.e. it is a recurring schedule
 	 * 
 	 * @return the registered scheduled application service
 	 * 
-	 * @throws NullPointerException
-	 *             if the topic is <code>null</code>
-	 * @throws InvalidSyntaxException 
-	 * 			   if the specified <code>eventFilter</code> is not syntactically correct
-	 * @throws ApplicationException
-	 *              if the schedule couldn't be created. The possible error
-	 *              codes are 
-	 *              <ul>
-	 *               <li> {@link ApplicationException#APPLICATION_DUPLICATE_SCHEDULE_ID}
-	 *                 if the specified <code>scheduleId</code> is already used
-	 *                 for this <code>ApplicationDescriptor</code>
-	 *               <li> {@link ApplicationException#APPLICATION_SCHEDULING_FAILED}
-	 *                 if the scheduling failed due to some internal reason
-	 *                 (e.g. persistent storage error).
-	 *               <li> {@link ApplicationException#APPLICATION_INVALID_STARTUP_ARGUMENT}
-	 *                 if the specified startup argument doesn't satisfy the 
-	 *                 type or value constraints of startup arguments.
-	 *              </ul>
-	 * @throws SecurityException
-	 *             if the caller doesn't have "schedule"
-	 *             ApplicationAdminPermission for the application.
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 * @throws IllegalArgumentException
-	 *             if the specified <code>Map</code> contains invalid keys
-	 *             (null objects, empty <code>String</code> or a key that is not
-	 *              <code>String</code>)
+	 * @throws NullPointerException if the topic is {@code null}
+	 * @throws InvalidSyntaxException if the specified {@code eventFilter} is
+	 *         not syntactically correct
+	 * @throws ApplicationException if the schedule couldn't be created. The
+	 *         possible error codes are
+	 *         <ul>
+	 *         <li>
+	 *         {@link ApplicationException#APPLICATION_DUPLICATE_SCHEDULE_ID} if
+	 *         the specified {@code scheduleId} is already used for this
+	 *         {@code ApplicationDescriptor} <li>
+	 *         {@link ApplicationException#APPLICATION_SCHEDULING_FAILED} if the
+	 *         scheduling failed due to some internal reason (e.g. persistent
+	 *         storage error). <li>
+	 *         {@link ApplicationException#APPLICATION_INVALID_STARTUP_ARGUMENT}
+	 *         if the specified startup argument doesn't satisfy the type or
+	 *         value constraints of startup arguments.
+	 *         </ul>
+	 * @throws SecurityException if the caller doesn't have "schedule"
+	 *         ApplicationAdminPermission for the application.
+	 * @throws IllegalStateException if the application descriptor is
+	 *         unregistered
+	 * @throws IllegalArgumentException if the specified {@code Map} contains
+	 *         invalid keys (null objects, empty {@code String} or a key that is
+	 *         not {@code String})
 	 */
 	public final ScheduledApplication schedule(String scheduleId, Map arguments, String topic, String eventFilter, boolean recurring) throws InvalidSyntaxException, ApplicationException {
 		SecurityManager sm = System.getSecurityManager();
@@ -464,7 +453,7 @@ public abstract class ApplicationDescriptor {
 	/**
 	 * This method is used to notify the container implementation that the
 	 * corresponding application has been locked and it should update the
-	 * <code>application.locked</code> service property accordingly.
+	 * {@code application.locked} service property accordingly.
 	 * @throws IllegalStateException
 	 *             if the application descriptor is unregistered
 	 */
@@ -495,7 +484,7 @@ public abstract class ApplicationDescriptor {
 	/**
 	 * This method is used to notify the container implementation that the
 	 * corresponding application has been unlocked and it should update the
-	 * <code>application.locked</code> service property accordingly.
+	 * {@code application.locked} service property accordingly.
 
 	 * @throws IllegalStateException
 	 *             if the application descriptor is unregistered
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
old mode 100644
new mode 100755
index 485f71d..3de2f4f
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,10 +20,10 @@ package org.osgi.service.application;
  * This exception is used to indicate problems related to application lifecycle
  * management.
  * 
- * <code>ApplicationException</code> object is created by the Application Admin
+ * {@code ApplicationException} object is created by the Application Admin
  * to denote an exception condition in the lifecycle of an application.
- * <code>ApplicationException</code>s should not be created by developers. <br/>
- * <code>ApplicationException</code>s are associated with an error code. This
+ * {@code ApplicationException}s should not be created by developers. <br/>
+ * {@code ApplicationException}s are associated with an error code. This
  * code describes the type of problem reported in this exception. The possible
  * codes are:
  * <ul>
@@ -44,7 +44,7 @@ package org.osgi.service.application;
  * startup arguments is invalid, for example its type is not permitted.
  * </ul>
  * 
- * @version $Revision: 6083 $
+ * @version $Id: be377d8ecd052974b3c5952c95af5c3df7334759 $
  */
 public class ApplicationException extends Exception {
 	private static final long serialVersionUID = -7173190453622508207L;
@@ -64,7 +64,7 @@ public class ApplicationException extends Exception {
 
 	/**
 	 * An exception was thrown by the application or the corresponding container
-	 * during launch. The exception is available from <code>getCause()</code>.
+	 * during launch. The exception is available from {@code getCause()}.
 	 */
 	public static final int APPLICATION_INTERNAL_ERROR = 0x03;
     
@@ -98,7 +98,7 @@ public class ApplicationException extends Exception {
     public static final int APPLICATION_INVALID_STARTUP_ARGUMENT = 0x07;
 
 	/**
-	 * Creates an <code>ApplicationException</code> with the specified error code.
+	 * Creates an {@code ApplicationException} with the specified error code.
 	 * @param errorCode The code of the error 
 	 */
 	public ApplicationException(int errorCode) {
@@ -107,7 +107,7 @@ public class ApplicationException extends Exception {
 	}
 	
 	/**
-	 * Creates a <code>ApplicationException</code> that wraps another exception.
+	 * Creates a {@code ApplicationException} that wraps another exception.
 	 * 
 	 * @param errorCode The code of the error 
 	 * @param cause The cause of this exception.
@@ -118,7 +118,7 @@ public class ApplicationException extends Exception {
 	}
 
 	/**
-	 * Creates an <code>ApplicationException</code> with the specified error code.
+	 * Creates an {@code ApplicationException} with the specified error code.
 	 * @param errorCode The code of the error 
 	 * @param message The associated message
 	 */
@@ -128,7 +128,7 @@ public class ApplicationException extends Exception {
 	}
 
 	/**
-	 * Creates a <code>ApplicationException</code> that wraps another exception.
+	 * Creates a {@code ApplicationException} that wraps another exception.
 	 * 
 	 * @param errorCode The code of the error 
 	 * @param message The associated message.
@@ -140,10 +140,10 @@ public class ApplicationException extends Exception {
 	}
 
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * set.
 	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
+	 * @return The cause of this exception or {@code null} if no cause was
 	 *         set.
 	 */
 	public Throwable getCause() {
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
old mode 100644
new mode 100755
index 15acaec..71e606d
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@ import org.osgi.framework.Constants;
  * lifecycle state of the represented application instance. It defines constants
  * for the lifecycle states.
  * 
- * @version $Revision: 1.6 $
+ * @version $Revision: 1.7 $
  */
 public abstract class ApplicationHandle {
 	/*
@@ -39,16 +39,16 @@ public abstract class ApplicationHandle {
 	 * instance.
 	 */
 	public static final String APPLICATION_PID = Constants.SERVICE_PID;
-	
+
 	/**
 	 * The property key for the pid of the corresponding application descriptor.
 	 */
-	public final static String APPLICATION_DESCRIPTOR	= "application.descriptor";
-	
+	public final static String APPLICATION_DESCRIPTOR = "application.descriptor";
+
 	/**
 	 * The property key for the state of this application instance.
 	 */
-	public final static String APPLICATION_STATE		= "application.state";
+	public final static String APPLICATION_STATE = "application.state";
 
 	/**
 	 * The property key for the supports exit value property of this application
@@ -63,30 +63,30 @@ public abstract class ApplicationHandle {
 	 * created application instance.
 	 */
 	public final static String RUNNING = "RUNNING";
-	
-  /**
-   * The application instance is being stopped. This is the state of the
-   * application instance during the execution of the <code>destroy()</code>
-   * method.
-   */
+
+	/**
+	 * The application instance is being stopped. This is the state of the
+	 * application instance during the execution of the {@code destroy()}
+	 * method.
+	 */
 	public final static String STOPPING = "STOPPING";
 
 	private final String instanceId;
-	
-	private final ApplicationDescriptor	descriptor;
+
+	private final ApplicationDescriptor descriptor;
 
 	/**
 	 * Application instance identifier is specified by the container when the
 	 * instance is created. The instance identifier must remain static for the 
 	 * lifetime of the instance, it must remain the same even across framework
 	 * restarts for the same application instance. This value must be the same
-	 * as the <code>service.pid</code> service property of this application
+	 * as the {@code service.pid} service property of this application
 	 * handle.
 	 * <p>
 	 * The instance identifier should follow the following scheme: 
 	 * <<i>application descriptor PID</i>>.<<i>index</i>>
 	 * where <<i>application descriptor PID</i>> is the PID of the 
-	 * corresponding <code>ApplicationDescriptor</code> and <<i>index</i>>
+	 * corresponding {@code ApplicationDescriptor} and <<i>index</i>>
 	 * is a unique integer index assigned by the application container. 
 	 * Even after destroying the application index the same index value should not
 	 * be reused in a reasonably long timeframe.
@@ -94,25 +94,25 @@ public abstract class ApplicationHandle {
 	 * @param instanceId the instance identifier of the represented application
 	 * instance. It must not be null.
 	 * 
-	 * @param descriptor the <code>ApplicationDescriptor</code> of the represented
+	 * @param descriptor the {@code ApplicationDescriptor} of the represented
 	 * application instance. It must not be null.
 	 * 
 	 * @throws NullPointerException if any of the arguments is null.
 	 */
-	protected ApplicationHandle(String instanceId, ApplicationDescriptor descriptor ) {
-		if( (null == instanceId) || (null == descriptor) ) {
+	protected ApplicationHandle(String instanceId, ApplicationDescriptor descriptor) {
+		if ((null == instanceId) || (null == descriptor)) {
 			throw new NullPointerException("Parameters must not be null!");
 		}
-		
-		this.instanceId	= instanceId;
+
+		this.instanceId = instanceId;
 		this.descriptor = descriptor;
 	}
 
 	/**
-	 * Retrieves the <code>ApplicationDescriptor</code> to which this 
-	 * <code>ApplicationHandle</code> belongs. 
+	 * Retrieves the {@code ApplicationDescriptor} to which this 
+	 * {@code ApplicationHandle} belongs. 
 	 * 
-	 * @return The corresponding <code>ApplicationDescriptor</code>
+	 * @return The corresponding {@code ApplicationDescriptor}
 	 */
 	public final ApplicationDescriptor getApplicationDescriptor() {
 		return descriptor;
@@ -134,18 +134,18 @@ public abstract class ApplicationHandle {
 	 * terminated. A negative, zero or positive value may be used.
 	 * <ul>
 	 * <li> negative - The method does not wait for termination. If the
-	 * application has not terminated then an <code>ApplicationException</code>
+	 * application has not terminated then an {@code ApplicationException}
 	 * is thrown.</li>
 	 * 
 	 * <li> zero - The method waits until the application terminates.</li>
 	 * 
 	 * <li> positive - The method waits until the application terminates or the
 	 * timeout expires. If the timeout expires and the application has not
-	 * terminated then an <code>ApplicationException</code> is thrown.</li>
+	 * terminated then an {@code ApplicationException} is thrown.</li>
 	 * </ul>
 	 * <p>
 	 * The default implementation throws an
-	 * <code>UnsupportedOperationException</code>. The application model should
+	 * {@code UnsupportedOperationException}. The application model should
 	 * override this method if exit values are supported.
 	 * </p>
 	 * 
@@ -163,7 +163,7 @@ public abstract class ApplicationHandle {
 	 * 
 	 * @since 1.1
 	 */
-	public Object getExitValue(long timeout) throws ApplicationException, InterruptedException{
+	public Object getExitValue(long timeout) throws ApplicationException, InterruptedException {
 		throw new UnsupportedOperationException();
 	}
 
@@ -189,9 +189,9 @@ public abstract class ApplicationHandle {
 	 * perform any application model specific steps for safe stopping of the
 	 * represented application instance.
 	 * <p>
-	 * At the end the <code>ApplicationHandle</code> must be unregistered. 
+	 * At the end the {@code ApplicationHandle} must be unregistered. 
 	 * This method should  free all the resources related to this 
-	 * <code>ApplicationHandle</code>.
+	 * {@code ApplicationHandle}.
 	 * <p>
 	 * When this method is completed the application instance has already made
 	 * its operations for safe stopping, the ApplicationHandle has been
@@ -201,7 +201,7 @@ public abstract class ApplicationHandle {
 	 * 
 	 * @throws SecurityException
 	 *             if the caller doesn't have "lifecycle"
-	 *             <code>ApplicationAdminPermission</code> for the corresponding application.
+	 *             {@code ApplicationAdminPermission} for the corresponding application.
 	 * 
 	 * @throws IllegalStateException
 	 *             if the application handle is unregistered
@@ -223,6 +223,5 @@ public abstract class ApplicationHandle {
 	 *             if the application handle is unregistered
 	 */
 	protected abstract void destroySpecific();
-	
 
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
old mode 100644
new mode 100755
index 02d776f..f09fa82
--- a/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,15 +24,15 @@ import java.util.Map;
  * specified event is fired a new instance must be launched. Note that launching
  * operation may fail because e.g. the application is locked.
  * <p>
- * Each <code>ScheduledApplication</code> instance has an identifier which is
+ * Each {@code ScheduledApplication} instance has an identifier which is
  * unique within the scope of the application being scheduled.
  * <p>
- * <code>ScheduledApplication</code> instances are registered as services. The
+ * {@code ScheduledApplication} instances are registered as services. The
  * {@link #APPLICATION_PID} service property contains the PID of the application
  * being scheduled, the {@link #SCHEDULE_ID} service property contains the
  * schedule identifier.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: f3385ad4cf9ce8f802ab44bd9bc76f865960b6e0 $
  */
 public interface ScheduledApplication {
     
diff --git a/eclipse/plugins/org.eclipse.equinox.cm/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.cm/META-INF/MANIFEST.MF
index abc08c6..f48d842 100644
--- a/eclipse/plugins/org.eclipse.equinox.cm/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.cm/META-INF/MANIFEST.MF
@@ -4,10 +4,10 @@ Bundle-Name: %bundleName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.equinox.cm
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.cm.Activator
 Import-Package: org.osgi.framework;version="1.3.0",
- org.osgi.service.cm;version="1.2.0",
+ org.osgi.service.cm;version="[1.3,1.4)",
  org.osgi.service.log;version="1.3.0",
  org.osgi.service.event;version="1.0"; resolution:=optional,
  org.osgi.util.tracker;version="1.3.1"
diff --git a/eclipse/plugins/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/SerializedTaskQueue.java b/eclipse/plugins/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/SerializedTaskQueue.java
index 89a5760..7e221ad 100644
--- a/eclipse/plugins/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/SerializedTaskQueue.java
+++ b/eclipse/plugins/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/SerializedTaskQueue.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 Cognos Incorporated
+ * Copyright (c) 2006, 2008 Cognos Incorporated
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.common/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.common/META-INF/MANIFEST.MF
index 6f1a9d5..a3d3181 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.common/META-INF/MANIFEST.MF
@@ -18,15 +18,17 @@ Export-Package: org.eclipse.core.internal.boot;x-friends:="org.eclipse.core.reso
  org.eclipse.equinox.events;version="1.0.0"
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.core.internal.runtime.Activator
-Import-Package: org.eclipse.osgi.framework.log,
+Import-Package: org.eclipse.equinox.log;version="[1.0,2.0)",
+ org.eclipse.osgi.framework.log;version="[1.1, 2.0)",
  org.eclipse.osgi.service.datalocation,
  org.eclipse.osgi.service.debug,
  org.eclipse.osgi.service.localization,
  org.eclipse.osgi.service.urlconversion,
- org.osgi.service.url,
  org.eclipse.osgi.util,
  org.osgi.framework,
+ org.osgi.service.log;version="[1.3.0, 2.0)",
  org.osgi.service.packageadmin,
+ org.osgi.service.url,
  org.osgi.util.tracker
 Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,
  J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java
index 66da77d..a8707e3 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,8 @@ import java.util.*;
 import org.eclipse.core.internal.boot.PlatformURLBaseConnection;
 import org.eclipse.core.internal.boot.PlatformURLHandler;
 import org.eclipse.core.runtime.IAdapterManager;
+import org.eclipse.equinox.log.ExtendedLogReaderService;
+import org.eclipse.equinox.log.ExtendedLogService;
 import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.service.debug.DebugOptions;
@@ -75,6 +77,7 @@ public class Activator implements BundleActivator {
 	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
 	 */
 	public void start(BundleContext context) throws Exception {
+		RuntimeLog.setLogWriter(getPlatformWriter(context));
 		bundleContext = context;
 		singleton = this;
 		Dictionary urlProperties = new Hashtable();
@@ -84,6 +87,22 @@ public class Activator implements BundleActivator {
 		installPlatformURLSupport();
 	}
 
+	private PlatformLogWriter getPlatformWriter(BundleContext context) {
+		ServiceReference logRef = context.getServiceReference(ExtendedLogService.class.getName());
+		ServiceReference readerRef = context.getServiceReference(ExtendedLogReaderService.class.getName());
+		ServiceReference packageAdminRef = context.getServiceReference(PackageAdmin.class.getName());
+		if (logRef == null || readerRef == null || packageAdminRef == null)
+			return null;
+		ExtendedLogService logService = (ExtendedLogService) context.getService(logRef);
+		ExtendedLogReaderService readerService = (ExtendedLogReaderService) context.getService(readerRef);
+		PackageAdmin packageAdmin = (PackageAdmin) context.getService(packageAdminRef);
+		if (logService == null || readerService == null || packageAdmin == null)
+			return null;
+		PlatformLogWriter writer = new PlatformLogWriter(logService, packageAdmin, context.getBundle());
+		readerService.addLogListener(writer, writer);
+		return writer;
+	}
+
 	/*
 	 * Return the configuration location service, if available.
 	 */
@@ -280,6 +299,7 @@ public class Activator implements BundleActivator {
 		}
 		bundleContext = null;
 		singleton = null;
+		RuntimeLog.setLogWriter(null);
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformLogWriter.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformLogWriter.java
new file mode 100755
index 0000000..1153a42
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformLogWriter.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.internal.runtime;
+
+import java.util.ArrayList;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.log.*;
+import org.eclipse.osgi.framework.log.FrameworkLogEntry;
+import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogService;
+import org.osgi.service.packageadmin.PackageAdmin;
+
+/**
+ * A log writer that writes log entries.  
+ * <p>
+ * Note that this class just provides a bridge from the old ILog interface
+ * to the new extended log service
+ */
+public class PlatformLogWriter implements SynchronousLogListener, LogFilter {
+	public static final String EQUINOX_LOGGER_NAME = "org.eclipse.equinox.logger"; //$NON-NLS-1$
+	private final ExtendedLogService logService;
+	private final PackageAdmin packageAdmin;
+	private final Bundle bundle;
+
+	public PlatformLogWriter(ExtendedLogService logService, PackageAdmin packageAdmin, Bundle bundle) {
+		this.logService = logService;
+		this.packageAdmin = packageAdmin;
+		this.bundle = bundle;
+	}
+
+	void logging(IStatus status) {
+		Bundle b = getBundle(status);
+		Logger equinoxLog = logService.getLogger(b, EQUINOX_LOGGER_NAME);
+		equinoxLog.log(getLog(status), getLevel(status), status.getMessage(), status.getException());
+	}
+
+	public static int getLevel(IStatus status) {
+		switch (status.getSeverity()) {
+			case IStatus.ERROR :
+				return LogService.LOG_ERROR;
+			case IStatus.WARNING :
+				return LogService.LOG_WARNING;
+			case IStatus.INFO :
+				return LogService.LOG_INFO;
+			case IStatus.OK :
+				return LogService.LOG_DEBUG;
+			case IStatus.CANCEL :
+			default :
+				return 32; // unknown
+		}
+	}
+
+	public static FrameworkLogEntry getLog(IStatus status) {
+		Throwable t = status.getException();
+		ArrayList childlist = new ArrayList();
+
+		int stackCode = t instanceof CoreException ? 1 : 0;
+		// ensure a substatus inside a CoreException is properly logged 
+		if (stackCode == 1) {
+			IStatus coreStatus = ((CoreException) t).getStatus();
+			if (coreStatus != null) {
+				childlist.add(getLog(coreStatus));
+			}
+		}
+
+		if (status.isMultiStatus()) {
+			IStatus[] children = status.getChildren();
+			for (int i = 0; i < children.length; i++) {
+				childlist.add(getLog(children[i]));
+			}
+		}
+
+		FrameworkLogEntry[] children = (FrameworkLogEntry[]) (childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()]));
+
+		return new FrameworkLogEntry(status, status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), stackCode, t, children);
+	}
+
+	private Bundle getBundle(IStatus status) {
+		String pluginID = status.getPlugin();
+		if (pluginID == null)
+			return bundle;
+		Bundle[] bundles = packageAdmin.getBundles(pluginID, null);
+		return bundles == null || bundles.length == 0 ? bundle : bundles[0];
+	}
+
+	public boolean isLoggable(Bundle bundle, String loggerName, int logLevel) {
+		return EQUINOX_LOGGER_NAME.equals(loggerName) && RuntimeLog.hasListeners();
+	}
+
+	public void logged(LogEntry entry) {
+		RuntimeLog.logToListeners(convertToStatus(entry));
+	}
+
+	public static IStatus convertToStatus(LogEntry logEntry) {
+		Object context = null;
+		if (logEntry instanceof ExtendedLogEntry)
+			context = ((ExtendedLogEntry) logEntry).getContext();
+		if (context instanceof IStatus)
+			return (IStatus) context;
+		if (context instanceof FrameworkLogEntry) {
+			FrameworkLogEntry fLogEntry = (FrameworkLogEntry) context;
+			context = fLogEntry.getContext();
+			if (context instanceof IStatus)
+				return (IStatus) context;
+			return convertToStatus(fLogEntry);
+		}
+		return convertRawEntryToStatus(logEntry);
+	}
+
+	private static IStatus convertToStatus(FrameworkLogEntry entry) {
+		FrameworkLogEntry[] children = entry.getChildren();
+		if (children != null) {
+			IStatus[] statusChildren = new Status[children.length];
+			for (int i = 0; i < statusChildren.length; i++)
+				statusChildren[i] = convertToStatus(children[i]);
+			return new MultiStatus(entry.getEntry(), entry.getBundleCode(), statusChildren, entry.getMessage(), entry.getThrowable());
+		}
+		return new Status(entry.getSeverity(), entry.getEntry(), entry.getBundleCode(), entry.getMessage(), entry.getThrowable());
+	}
+
+	private static IStatus convertRawEntryToStatus(LogEntry logEntry) {
+		int severity;
+		switch (logEntry.getLevel()) {
+			case LogService.LOG_ERROR :
+				severity = IStatus.ERROR;
+				break;
+			case LogService.LOG_WARNING :
+				severity = IStatus.WARNING;
+				break;
+			case LogService.LOG_INFO :
+				severity = IStatus.INFO;
+				break;
+			case LogService.LOG_DEBUG :
+				severity = IStatus.OK;
+				break;
+			default :
+				severity = -1;
+				break;
+		}
+		Bundle bundle = logEntry.getBundle();
+		return new Status(severity, bundle == null ? null : bundle.getSymbolicName(), logEntry.getMessage(), logEntry.getException());
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java
index 62190be..03957ac 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,6 @@
 package org.eclipse.core.internal.runtime;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import org.eclipse.core.runtime.*;
 
 /**
@@ -20,7 +19,6 @@ import org.eclipse.core.runtime.*;
  * 
  * @since org.eclipse.equinox.common 3.2
  */
-// XXX this must be removed and replaced with something more reasonable
 public final class RuntimeLog {
 
 	private static ArrayList logListeners = new ArrayList(5);
@@ -33,29 +31,29 @@ public final class RuntimeLog {
 	 */
 	private static ArrayList queuedMessages = new ArrayList(5);
 
+	private static PlatformLogWriter logWriter;
+
+	static void setLogWriter(PlatformLogWriter logWriter) {
+		synchronized (logListeners) {
+			boolean firstListener = isEmpty();
+			RuntimeLog.logWriter = logWriter;
+			if (firstListener && logWriter != null)
+				emptyQueuedMessages();
+		}
+	}
+
 	/**
 	 * See org.eclipse.core.runtime.Platform#addLogListener(ILogListener)
 	 */
 	public static void addLogListener(ILogListener listener) {
 		synchronized (logListeners) {
-			boolean firstListener = (logListeners.size() == 0);
+			boolean firstListener = isEmpty();
 			// replace if already exists (Set behaviour but we use an array
 			// since we want to retain order)
 			logListeners.remove(listener);
 			logListeners.add(listener);
-			if (firstListener) {
-				for (Iterator i = queuedMessages.iterator(); i.hasNext();) {
-					try {
-						IStatus recordedMessage = (IStatus) i.next();
-						listener.logging(recordedMessage, IRuntimeConstants.PI_RUNTIME);
-					} catch (Exception e) {
-						handleException(e);
-					} catch (LinkageError e) {
-						handleException(e);
-					}
-				}
-				queuedMessages.clear();
-			}
+			if (firstListener)
+				emptyQueuedMessages();
 		}
 	}
 
@@ -82,21 +80,31 @@ public final class RuntimeLog {
 	 */
 	public static void log(final IStatus status) {
 		// create array to avoid concurrent access
-		ILogListener[] listeners;
+		ILogListener[] listeners = null;
+		PlatformLogWriter writer;
 		synchronized (logListeners) {
-			listeners = (ILogListener[]) logListeners.toArray(new ILogListener[logListeners.size()]);
-			if (listeners.length == 0) {
-				queuedMessages.add(status);
-				return;
+			writer = logWriter;
+			if (writer == null) {
+				if (logListeners.isEmpty()) {
+					queuedMessages.add(status);
+					return;
+				}
+				listeners = (ILogListener[]) logListeners.toArray(new ILogListener[logListeners.size()]);
 			}
 		}
-		for (int i = 0; i < listeners.length; i++) {
-			try {
-				listeners[i].logging(status, IRuntimeConstants.PI_RUNTIME);
-			} catch (Exception e) {
-				handleException(e);
-			} catch (LinkageError e) {
-				handleException(e);
+		if (writer != null) {
+			writer.logging(status);
+			return;
+		}
+		if (listeners != null) {
+			for (int i = 0; i < listeners.length; i++) {
+				try {
+					listeners[i].logging(status, IRuntimeConstants.PI_RUNTIME);
+				} catch (Exception e) {
+					handleException(e);
+				} catch (LinkageError e) {
+					handleException(e);
+				}
 			}
 		}
 	}
@@ -109,12 +117,52 @@ public final class RuntimeLog {
 	}
 
 	/**
-	 * Helps determine if any listeners are registered with the logging mechanism.
-	 * @return true if no listeners are registered
+	 * Helps determine if the logging mechanism is ready for logging.
+	 * @return true the logging mechanism is ready for logging.
 	 */
 	public static boolean isEmpty() {
 		synchronized (logListeners) {
-			return (logListeners.size() == 0);
+			return (logListeners.isEmpty()) && (logWriter == null);
+		}
+	}
+
+	/**
+	 * Determines if there are any listeners
+	 * @return true if there is at least one listener.
+	 */
+	public static boolean hasListeners() {
+		synchronized (logListeners) {
+			return (!logListeners.isEmpty());
+		}
+	}
+
+	private static void emptyQueuedMessages() {
+		IStatus[] queued;
+		synchronized (logListeners) {
+			if (queuedMessages.isEmpty())
+				return;
+			queued = (IStatus[]) queuedMessages.toArray(new IStatus[queuedMessages.size()]);
+			queuedMessages.clear();
+		}
+		for (int i = 0; i < queued.length; i++) {
+			log(queued[i]);
+		}
+	}
+
+	static void logToListeners(IStatus status) {
+		// create array to avoid concurrent access
+		ILogListener[] listeners;
+		synchronized (logListeners) {
+			listeners = (ILogListener[]) logListeners.toArray(new ILogListener[logListeners.size()]);
+		}
+		for (int i = 0; i < listeners.length; i++) {
+			try {
+				listeners[i].logging(status, IRuntimeConstants.PI_RUNTIME);
+			} catch (Exception e) {
+				handleException(e);
+			} catch (LinkageError e) {
+				handleException(e);
+			}
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java
index ea2a756..36fb697 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java
index 999b808..a746b74 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,13 +49,13 @@ public class ListenerList {
 
 	/**
 	 * Mode constant (value 0) indicating that listeners should be considered
-	 * the <a href="#same">same</a> if they are equal.
+	 * the <a href="ListenerList.html#same">same</a> if they are equal.
 	 */
 	public static final int EQUALITY = 0;
 
 	/**
 	 * Mode constant (value 1) indicating that listeners should be considered
-	 * the <a href="#same">same</a> if they are identical.
+	 * the <a href="ListenerList.html#same">same</a> if they are identical.
 	 */
 	public static final int IDENTITY = 1;
 
@@ -82,7 +82,7 @@ public class ListenerList {
 	/**
 	 * Creates a listener list using the provided comparison mode.
 	 * 
-	 * @param mode The mode used to determine if listeners are the <a href="#same">same</a>.
+	 * @param mode The mode used to determine if listeners are the <a href="ListenerList.html#same">same</a>.
 	 */
 	public ListenerList(int mode) {
 		if (mode != EQUALITY && mode != IDENTITY)
@@ -91,7 +91,7 @@ public class ListenerList {
 	}
 
 	/**
-	 * Adds a listener to this list. This method has no effect if the <a href="#same">same</a>
+	 * Adds a listener to this list. This method has no effect if the <a href="ListenerList.html#same">same</a>
 	 * listener is already registered.
 	 * 
 	 * @param listener the non-<code>null</code> listener to add
@@ -143,7 +143,7 @@ public class ListenerList {
 	}
 
 	/**
-	 * Removes a listener from this list. Has no effect if the <a href="#same">same</a> 
+	 * Removes a listener from this list. Has no effect if the <a href="ListenerList.html#same">same</a> 
 	 * listener was not already registered.
 	 *
 	 * @param listener the non-<code>null</code> listener to remove
@@ -180,11 +180,11 @@ public class ListenerList {
 	public int size() {
 		return listeners.length;
 	}
-	
-    /**
-     * Removes all listeners from this list.
-     */
-    public synchronized void clear() {
-            listeners = EmptyArray;
-    }
+
+	/**
+	 * Removes all listeners from this list.
+	 */
+	public synchronized void clear() {
+		listeners = EmptyArray;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java
index e8d999c..bd7aa78 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java
index dfeb2af..096a766 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@ import org.eclipse.core.internal.runtime.AdapterManager;
  * to the platform's adapter manager.
  * <p>
  * Note: In situations where it would be awkward to subclass this
- * class, the same affect can be achieved simply by implementing
+ * class, the same effect can be achieved simply by implementing
  * the {@link IAdaptable} interface and explicitly forwarding
  * the <code>getAdapter</code> request to an implementation
  * of the {@link IAdapterManager} service. The method would look like:
diff --git a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/URIUtil.java b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/URIUtil.java
index 284e181..a568942 100644
--- a/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/URIUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.common/src/org/eclipse/core/runtime/URIUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public final class URIUtil {
 			//if the base is already a directory then resolve will just do the right thing
 			URI result;
 			if (path.endsWith("/")) {//$NON-NLS-1$
-				result = base.resolve(new URI(null, extension, null));
+				result = base.resolve(new URI(null, null, extension, null));
 				if (decodeResolved) {
 					//see bug 267219 - Java 1.4 implementation of URI#resolve incorrectly encoded the ssp
 					result = new URI(toUnencodedString(result));
@@ -370,7 +370,7 @@ public final class URIUtil {
 		if (relativePath == originalPath)
 			return original;
 		try {
-			return new URI(null, relativePath.toString(), null);
+			return new URI(null, null, relativePath.toString(), original.getFragment());
 		} catch (URISyntaxException e) {
 			//cannot make a relative path, just return the original
 			return original;
diff --git a/eclipse/plugins/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF
index a4c3382..c9b2ed2 100644
--- a/eclipse/plugins/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.concurrent/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.concurrent
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.0.200.qualifier
 Bundle-Vendor: %pluginProvider
 Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
  J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.equinox.concurrent/plugin.properties b/eclipse/plugins/org.eclipse.equinox.concurrent/plugin.properties
index 927e0ac..af4fdbb 100644
--- a/eclipse/plugins/org.eclipse.equinox.concurrent/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.concurrent/plugin.properties
@@ -1,5 +1,5 @@
 #################################################################################
-# Copyright (c) 2008 EclipseSource and others. All rights reserved. This
+# Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
 # program and the accompanying materials are made available under the terms of
 # the Eclipse Public License v1.0 which accompanies this distribution, and is
 #
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/.classpath b/eclipse/plugins/org.eclipse.equinox.coordinator/.classpath
new file mode 100644
index 0000000..45f024e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/.project b/eclipse/plugins/org.eclipse.equinox.coordinator/.project
new file mode 100644
index 0000000..4ca4a58
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/.project
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.coordinator</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/.api_filters b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/.api_filters
new file mode 100644
index 0000000..7986d14
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/.api_filters
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.equinox.coordinator" version="2">
+    <resource path="src/org/eclipse/equinox/coordinator/LogTracker.java" type="org.eclipse.equinox.coordinator.LogTracker">
+        <filter id="574619656">
+            <message_arguments>
+                <message_argument value="LogService"/>
+                <message_argument value="LogTracker"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.core.resources.prefs b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..9b85d9d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Dec 17 10:42:20 CST 2010
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..565e65c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,331 @@
+#Mon Oct 04 18:15:32 EDT 2010
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=jsr14
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.incompleteClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.lineSplit=800
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.pde.api.tools.prefs b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..8c861f9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Fri Oct 22 19:46:45 EDT 2010
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+invalid_since_tag_version=Error
+LEAK_METHOD_RETURN_TYPE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+ILLEGAL_INSTANTIATE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ILLEGAL_IMPLEMENT=Warning
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+LEAK_EXTEND=Warning
+INVALID_JAVADOC_TAG=Ignore
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+ILLEGAL_REFERENCE=Warning
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+LEAK_METHOD_PARAM=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+incompatible_api_component_version=Error
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ILLEGAL_OVERRIDE=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+malformed_since_tag=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+automatically_removed_unused_problem_filters=false
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+report_api_breakage_when_major_version_incremented=Disabled
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+eclipse.preferences.version=1
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+missing_since_tag=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+UNUSED_PROBLEM_FILTERS=Warning
+ILLEGAL_EXTEND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+LEAK_FIELD_DECL=Warning
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+LEAK_IMPLEMENT=Warning
+report_resolution_errors_api_component=Warning
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..6a525b1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,5 @@
+#Mon Oct 25 14:04:15 EDT 2010
+pluginProject.equinox=false
+eclipse.preferences.version=1
+resolve.requirebundle=false
+pluginProject.extensions=false
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.coordinator/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..894afde
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %bundleName
+Bundle-SymbolicName: org.eclipse.equinox.coordinator
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.equinox.coordinator.Activator
+Bundle-Vendor: %bundleVendor
+Import-Package: org.eclipse.osgi.util;version="[1.1,2.0)",
+ org.osgi.framework;version="[1.6,2.0)",
+ org.osgi.service.component;version="[1.1,2.0)";resolution:=optional,
+ org.osgi.service.coordinator;version="[1.0,1.1)",
+ org.osgi.service.log;version="[1.3,2.0)",
+ org.osgi.util.tracker;version="[1.5,2.0)"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ OSGi/Minimum-1.2
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.equinox.coordinator;version="1.0.0";x-internal:=true,
+ org.osgi.service.coordinator;version="1.0.0"
+Service-Component: OSGI-INF/component.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/OSGI-INF/component.xml b/eclipse/plugins/org.eclipse.equinox.coordinator/OSGI-INF/component.xml
new file mode 100644
index 0000000..d52c9f0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/OSGI-INF/component.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" immediate="false" name="org.eclipse.equinox.coordinator">
+   <implementation class="org.eclipse.equinox.coordinator.CoordinatorComponent"/>
+   <service servicefactory="true">
+      <provide interface="org.osgi.service.coordinator.Coordinator"/>
+   </service>
+</scr:component>
diff --git a/eclipse/plugins/org.eclipse.equinox.app/about.html b/eclipse/plugins/org.eclipse.equinox.coordinator/about.html
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.app/about.html
copy to eclipse/plugins/org.eclipse.equinox.coordinator/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.app/about_files/LICENSE-2.0.txt b/eclipse/plugins/org.eclipse.equinox.coordinator/about_files/LICENSE-2.0.txt
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.app/about_files/LICENSE-2.0.txt
copy to eclipse/plugins/org.eclipse.equinox.coordinator/about_files/LICENSE-2.0.txt
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/build.properties b/eclipse/plugins/org.eclipse.equinox.coordinator/build.properties
new file mode 100644
index 0000000..4b514ad
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/build.properties
@@ -0,0 +1,27 @@
+###############################################################################
+# Copyright (c) 2010, 2011 IBM Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               about.html,\
+               .,\
+               OSGI-INF/,\
+               plugin.properties,\
+               about_files/
+src.includes = about.html,\
+               about_files/
+
+jre.compilation.profile = J2SE-1.5
+
+javacSource=1.5
+javacTarget=jsr14
+
+javacWarnings..=-unchecked
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/plugin.properties b/eclipse/plugins/org.eclipse.equinox.coordinator/plugin.properties
new file mode 100644
index 0000000..c9a864c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bundleVendor = Eclipse.org - Equinox
+bundleName = Coordinator
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/Activator.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/Activator.java
new file mode 100644
index 0000000..eceb8dc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/Activator.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.coordinator.Coordinator;
+
+public class Activator implements BundleActivator {
+	// Static so the factory can be used by both DS and standard OSGi.
+	static volatile CoordinatorServiceFactory factory;
+
+	private ServiceRegistration<Coordinator> registration;
+
+	public void start(BundleContext bundleContext) throws Exception {
+		// Instantiate the factory to be used by both DS and standard OSGi. In the case of DS, the
+		// start method is guaranteed to be called before any components are created.
+		factory = new CoordinatorServiceFactory(bundleContext);
+		if (Boolean.valueOf(bundleContext.getProperty("equinox.use.ds")).booleanValue()) //$NON-NLS-1$
+			return; // If this property is set we assume DS is being used.
+		Dictionary<String, Object> properties = new Hashtable<String, Object>();
+		// TODO Add desired properties (bundle vendor, etc.).
+		@SuppressWarnings({"unchecked"})
+		// Use local variable to avoid suppressing unchecked warnings at method level.
+		ServiceRegistration<Coordinator> reg = (ServiceRegistration<Coordinator>) bundleContext.registerService(Coordinator.class.getName(), factory, properties);
+		this.registration = reg;
+	}
+
+	public void stop(BundleContext bundleContext) throws Exception {
+		// Will be null when using DS.
+		if (registration != null)
+			registration.unregister();
+		factory.shutdown();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinationImpl.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinationImpl.java
new file mode 100644
index 0000000..bfc2839
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinationImpl.java
@@ -0,0 +1,387 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import java.lang.ref.Reference;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TimerTask;
+
+import org.osgi.framework.Bundle;
+import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.coordinator.CoordinationException;
+import org.osgi.service.coordinator.CoordinationPermission;
+import org.osgi.service.coordinator.Participant;
+import org.osgi.service.log.LogService;
+
+public class CoordinationImpl implements Coordination {
+	private volatile Throwable failure;
+	private volatile boolean terminated;
+	
+	private Date deadline;
+	private Reference<CoordinationImpl> enclosingCoordination;
+	private Thread thread;
+	private TimerTask timerTask;
+	
+	private final CoordinatorImpl coordinator;
+	private final long id;
+	private final String name;
+	private final List<Participant> participants;
+	private final Map<Class<?>, Object> variables;
+
+	public CoordinationImpl(long id, String name, long timeout, CoordinatorImpl coordinator) {
+		validateName(name);
+		validateTimeout(timeout);
+		this.id = id;
+		this.name = name;
+		this.deadline = new Date(System.currentTimeMillis() + timeout);
+		this.coordinator = coordinator;
+		participants = Collections.synchronizedList(new ArrayList<Participant>());
+		variables = new HashMap<Class<?>, Object>();
+	}
+
+	public void addParticipant(Participant participant) throws CoordinationException {
+		// This method requires the PARTICIPATE permission.
+		coordinator.checkPermission(CoordinationPermission.PARTICIPATE, name);
+		if (participant == null)
+			throw new NullPointerException(Messages.CoordinationImpl_15);
+		/* The caller has permission. Check to see if the participant is already 
+		 * participating in another coordination. Do this in a loop in case the 
+		 * participant must wait for the other coordination to finish. The loop 
+		 * will exit under the following circumstances.
+		 * 
+		 * (1) This coordination is terminated.
+		 * (2) The participant is already participating in another coordination
+		 * using the same thread as this one.
+		 * (3) This thread is interrupted.
+		 * (4) The participant is not participating in another coordination.
+		 */
+		while (true) {
+			CoordinationImpl coordination;
+			synchronized (this) {
+				// Check to see if this coordination has already terminated. If so, 
+				// throw the appropriate exception.
+				checkTerminated();
+				coordination = coordinator.addParticipant(participant, this);
+				if (coordination == null) {
+					// The same participant is not currently participating in 
+					// any coordination. Add it to this coordination and break 
+					// out of the loop.
+					participants.add(participant);
+					break;
+				} else if (coordination == this) {
+					// The same participant is being added twice to this 
+					// coordination. Nothing to do.
+					break;
+				} else {
+					// This means the participant is already participating in another
+					// coordination. Check to see if it's on the same thread.
+					Thread t = coordination.getThread();
+					// If thread is null, the coordination is not associated with
+					// any thread, and there's nothing to compare. If the coordination 
+					// is using this thread, then we can't block due to risk of deadlock.
+					if (t == Thread.currentThread()) {
+						throw new CoordinationException(Messages.CoordinationImpl_1, CoordinationImpl.this, CoordinationException.DEADLOCK_DETECTED);
+					}
+				}
+			}
+			// The participant is already participating in another coordination 
+			// that's not using this thread. Block until that coordination has
+			// finished. A decision was made here to use a timeout and incur the
+			// expense of waking up and rejoining in order to make a reasonably 
+			// timely exit if this coordination terminates.
+			try {
+				coordination.join(1000);
+			} catch (InterruptedException e) {
+				coordinator.getLogService().log(LogService.LOG_DEBUG, Messages.CoordinationImpl_2, e);
+				// This thread was interrupted while waiting for the coordination
+				// to terminate.
+				throw new CoordinationException(Messages.CoordinationImpl_3, CoordinationImpl.this, CoordinationException.LOCK_INTERRUPTED, e);
+			}
+		}
+	}
+
+	public void end() throws CoordinationException {
+		coordinator.checkPermission(CoordinationPermission.INITIATE, name);
+		// Terminating the coordination must be atomic.
+		synchronized (this) {
+			// If this coordination is associated with a thread, an additional
+			// check is required.
+			if (thread != null) {
+				// Coordinations may only be ended by the same thread that
+				// pushed them onto the stack, if any.
+				if (thread != Thread.currentThread()) {
+					throw new CoordinationException(Messages.CoordinationImpl_14, this, CoordinationException.WRONG_THREAD);
+				}
+				// Unwind the stack in case there are other coordinations higher
+				// up than this one.
+				while (coordinator.peek() != this) {
+					try {
+						coordinator.peek().end();
+					} catch (CoordinationException e) {
+						coordinator.peek().fail(e);
+					}
+				}
+				// A coordination is removed from the thread local stack only when being ended.
+				// This must occur even if the coordination is already terminated due to a
+				// failure.
+				coordinator.pop();
+			}
+			terminate();
+		}
+		// Notify participants this coordination has ended. Track whether or
+		// not a partial ending has occurred.
+		Exception exception = null;
+		// No additional synchronization is needed here because the participant
+		// list will not be modified post termination.
+		for (Participant participant : participants) {
+			try {
+				participant.ended(this);
+			} catch (Exception e) {
+				coordinator.getLogService().log(LogService.LOG_WARNING, Messages.CoordinationImpl_4, e);
+				// Only the first exception will be propagated.
+				if (exception == null)
+					exception = e;
+			}
+		}
+		synchronized (this) {
+			// Notify everything joined to this coordination that it has finished.
+			notifyAll();
+		}
+		// If a partial ending has occurred, throw the required exception.
+		if (exception != null) {
+			throw new CoordinationException(Messages.CoordinationImpl_5, this, CoordinationException.PARTIALLY_ENDED, exception);
+		}
+	}
+
+	public long extendTimeout(long timeInMillis) throws CoordinationException {
+		coordinator.checkPermission(CoordinationPermission.PARTICIPATE, name);
+		validateTimeout(timeInMillis);
+		// We don't want this coordination to terminate before the new timer is 
+		// in place.
+		synchronized (this) {
+			// Check to see if this coordination has already terminated. If so, 
+			// throw the appropriate exception.
+			checkTerminated();
+			// If there was no previous timeout set, return 0 indicating that no
+			// extension has taken place.
+			if (timerTask == null)
+				return 0;
+			// Passing anything less than zero as well as zero itself will return the
+			// existing deadline. The deadline will not be null if timerTask is not null.
+			if (timeInMillis == 0)
+				return deadline.getTime();
+			// Cancel the current timeout.
+			boolean cancelled = timerTask.cancel();
+			if (!cancelled) {
+				// This means the previous task has run and is waiting to get a lock on
+				// this coordination. We can't throw an exception yet because we can't
+				// know which one to use (ALREADY_ENDED or FAILED). Once the lock is
+				// released, the running task may fail this coordination due to a timeout, 
+				// or something else might be waiting to fail this coordination for other
+				// reasons or to end it. We simply don't know who will win the race.
+				try {
+					// Wait until this coordination terminates.
+					join(0);
+					// Now determine how it terminated and throw the appropriate exception.
+					checkTerminated();
+				}
+				catch (InterruptedException e) {
+					throw new CoordinationException(Messages.CoordinationImpl_13, this, CoordinationException.UNKNOWN, e);
+				}
+			}
+			// Create the new timeout.
+			timerTask = new CoordinationTimerTask(this);
+			// Extend the current deadline.
+			deadline = new Date(deadline.getTime() + timeInMillis);
+			// Schedule the new timeout.
+			coordinator.schedule(timerTask, deadline);
+			// Return the new deadline.
+			return deadline.getTime();
+		}
+	}
+
+	public boolean fail(Throwable reason) {
+		coordinator.checkPermission(CoordinationPermission.PARTICIPATE, name);
+		// The reason must not be null.
+		if (reason == null)
+			throw new NullPointerException(Messages.CoordinationImpl_11);
+		// Terminating the coordination must be atomic.
+		synchronized (this) {
+			// If this coordination is terminated, return false. Do not throw a
+			// CoordinationException as in other methods.
+			if (terminated)
+				return false;
+			// This coordination has not already terminated, so terminate now.
+			terminate();
+			// Store the reason for the failure.
+			failure = reason;
+		}
+		// Notify participants this coordination has failed.
+		// No additional synchronization is needed here because the participant
+		// list will not be modified post termination.
+		for (Participant participant : participants) {
+			try {
+				participant.failed(this);
+			} catch (Exception e) {
+				coordinator.getLogService().log(LogService.LOG_WARNING, Messages.CoordinationImpl_6, e);
+			}
+		}
+		synchronized (this) {
+			// Notify everything joined to this coordination that it has finished.
+			notifyAll();
+		}
+		// Return true to indicate this call resulted in the coordination's failure.
+		return true;
+	}
+	
+	public Bundle getBundle() {
+		coordinator.checkPermission(CoordinationPermission.ADMIN, name);
+		return coordinator.getBundle();
+	}
+	
+	public synchronized Coordination getEnclosingCoordination() {
+		coordinator.checkPermission(CoordinationPermission.ADMIN, name);
+		return enclosingCoordination == null ? null : enclosingCoordination.get();
+	}
+
+	public Throwable getFailure() {
+		coordinator.checkPermission(CoordinationPermission.INITIATE, name);
+		return failure;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public List<Participant> getParticipants() {
+		// This method requires the ADMIN permission.
+		coordinator.checkPermission(CoordinationPermission.INITIATE, name);
+		// Return a mutable snapshot.
+		synchronized (participants) {
+			return new ArrayList<Participant>(participants);
+		}
+	}
+
+	public synchronized Thread getThread() {
+		coordinator.checkPermission(CoordinationPermission.ADMIN, name);
+		return thread;
+	}
+
+	public Map<Class<?>, Object> getVariables() {
+		coordinator.checkPermission(CoordinationPermission.PARTICIPATE, name);
+		return variables;
+	}
+
+	public boolean isTerminated() {
+		return terminated;
+	}
+
+	public void join(long timeInMillis) throws InterruptedException {
+		coordinator.checkPermission(CoordinationPermission.PARTICIPATE, name);
+		long start = System.currentTimeMillis();
+		// Wait until this coordination has terminated. Guard against spurious
+		// wakeups using isTerminated().
+		synchronized (this) {
+			while (!terminated) {
+				wait(timeInMillis);
+				long elapsed = System.currentTimeMillis() - start;
+				if (elapsed > timeInMillis)
+					break;
+			}
+		}
+	}
+
+	public Coordination push() throws CoordinationException {
+		coordinator.checkPermission(CoordinationPermission.INITIATE, name);
+		synchronized (this) {
+			checkTerminated();
+			coordinator.push(this);
+		}
+		return this;
+	}
+
+	synchronized Date getDeadline() {
+		return deadline;
+	}
+
+	LogService getLogService() {
+		return coordinator.getLogService();
+	}
+
+	synchronized void setTimerTask(TimerTask timerTask) {
+		this.timerTask = timerTask;
+	}
+	
+	synchronized void setThreadAndEnclosingCoordination(Thread t, Reference<CoordinationImpl> c) {
+		thread = t;
+		enclosingCoordination = c;
+	}
+
+	private void checkTerminated() throws CoordinationException {
+		// If this coordination is not terminated, simply return.
+		if (!terminated)
+			return;
+		// The coordination has terminated. Figure out which type of exception
+		// must be thrown.
+		if (failure != null) {
+			// The fail() method was called indicating the coordination failed.
+			throw new CoordinationException(Messages.CoordinationImpl_7, this, CoordinationException.FAILED, failure);
+		}
+		// The coordination did not fail, so it either partially ended or 
+		// ended successfully.
+		throw new CoordinationException(Messages.CoordinationImpl_8, CoordinationImpl.this, CoordinationException.ALREADY_ENDED);
+	}
+
+	private void terminate() throws CoordinationException {
+		checkTerminated();
+		terminated = true;
+		// Cancel the timeout. Purge the task if it was, in fact, canceled.
+		if (timerTask != null && timerTask.cancel()) {
+			coordinator.purge();
+		}
+		coordinator.terminate(this, participants);
+	}
+
+	private static void validateName(String name) {
+		boolean valid = true;
+		if (name == null || name.length() == 0)
+			valid = false;
+		else {
+			boolean period = false;
+			for (char c : name.toCharArray()) {
+				if (Character.isLetterOrDigit(c) || c == '_' || c == '-') {
+					period = false;
+				} else if (c == '.' && !period) {
+					period = true;
+				} else {
+					valid = false;
+					break;
+				}
+			}
+		}
+		if (!valid)
+			throw new IllegalArgumentException(Messages.CoordinationImpl_10);
+	}
+
+	private static void validateTimeout(long timeout) {
+		if (timeout < 0)
+			throw new IllegalArgumentException(Messages.CoordinationImpl_12);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinationTimerTask.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinationTimerTask.java
new file mode 100644
index 0000000..8c243d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinationTimerTask.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import java.util.TimerTask;
+
+import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.log.LogService;
+
+public class CoordinationTimerTask extends TimerTask {
+	private final CoordinationImpl coordination;
+
+	public CoordinationTimerTask(CoordinationImpl coordination) {
+		if (coordination == null)
+			throw new IllegalArgumentException(Messages.CoordinationImpl_0);
+		this.coordination = coordination;
+	}
+
+	@Override
+	public void run() {
+		// Catch all exceptions and errors in order to prevent the timer 
+		// thread from stopping.
+		try {
+			coordination.fail(Coordination.TIMEOUT);
+		} catch (Throwable t) {
+			coordination.getLogService().log(LogService.LOG_ERROR, Messages.CoordinationImpl_9, t);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorComponent.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorComponent.java
new file mode 100644
index 0000000..31b8e3e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorComponent.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import java.util.Collection;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.coordinator.CoordinationException;
+import org.osgi.service.coordinator.Coordinator;
+import org.osgi.service.coordinator.Participant;
+
+public class CoordinatorComponent implements Coordinator {
+	private volatile Coordinator coordinator;
+
+	public boolean addParticipant(Participant participant) throws CoordinationException {
+		return coordinator.addParticipant(participant);
+	}
+
+	public Coordination begin(String name, long timeout) {
+		return coordinator.begin(name, timeout);
+	}
+
+	public Coordination create(String name, long timeout) {
+		return coordinator.create(name, timeout);
+	}
+
+	public boolean fail(Throwable reason) {
+		return coordinator.fail(reason);
+	}
+
+	public Coordination getCoordination(long id) {
+		return coordinator.getCoordination(id);
+	}
+
+	public Collection<Coordination> getCoordinations() {
+		return coordinator.getCoordinations();
+	}
+
+	public Coordination peek() {
+		return coordinator.peek();
+	}
+
+	public Coordination pop() {
+		return coordinator.pop();
+	}
+
+	void activate(ComponentContext componentContext) {
+		coordinator = Activator.factory.getService(componentContext.getUsingBundle(), null);
+	}
+
+	void deactivate(BundleContext context) {
+		((CoordinatorImpl) coordinator).shutdown();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorImpl.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorImpl.java
new file mode 100644
index 0000000..4060b66
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorImpl.java
@@ -0,0 +1,292 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.security.Permission;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.osgi.framework.Bundle;
+import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.coordinator.CoordinationException;
+import org.osgi.service.coordinator.CoordinationPermission;
+import org.osgi.service.coordinator.Coordinator;
+import org.osgi.service.coordinator.Participant;
+import org.osgi.service.log.LogService;
+
+public class CoordinatorImpl implements Coordinator {
+	// IDs must be positive integers and monotonically increasing.
+	private static long lastId;
+
+	private synchronized static long getNextId() {
+		if (Long.MAX_VALUE == lastId)
+			throw new IllegalStateException(Messages.CoordinatorImpl_0);
+		// First ID will be 1.
+		return ++lastId;
+	}
+
+	// Coordination IDs must be unique across all using bundles.
+	private static final Map<Long, CoordinationImpl> idToCoordination = new HashMap<Long, CoordinationImpl>();
+	// Coordination participation must be tracked across all using bundles.
+	private static final Map<Participant, CoordinationImpl> participantToCoordination = new IdentityHashMap<Participant, CoordinationImpl>();
+
+	private static ThreadLocal<WeakCoordinationStack> coordinationStack = new ThreadLocal<WeakCoordinationStack>() {
+		@Override 
+		protected WeakCoordinationStack initialValue() {
+			return new WeakCoordinationStack();
+		}
+	};
+	
+	private static class WeakCoordinationStack {
+		private final LinkedList<Reference<CoordinationImpl>> coordinations = new LinkedList<Reference<CoordinationImpl>>();
+		private final ReferenceQueue<CoordinationImpl> queue = new ReferenceQueue<CoordinationImpl>();
+		
+		public WeakCoordinationStack() {
+		}
+
+		public boolean contains(CoordinationImpl c) {
+			purge();
+			for (Reference<CoordinationImpl> r : coordinations) {
+				if (c.equals(r.get()))
+					return true;
+			}
+			return false;
+		}
+		
+		public CoordinationImpl peek() {
+			purge();
+			if (coordinations.isEmpty())
+				return null;
+			return coordinations.getFirst().get();
+		}
+		
+		public CoordinationImpl pop() {
+			purge();
+			if (coordinations.isEmpty())
+				return null;
+			CoordinationImpl c = coordinations.removeFirst().get();
+			if (c != null)
+				c.setThreadAndEnclosingCoordination(null, null);
+			return c;
+		}
+		
+		public void push(CoordinationImpl c) {
+			purge();
+			if (contains(c))
+				throw new CoordinationException(Messages.CoordinatorImpl_3, c, CoordinationException.ALREADY_PUSHED);
+			Reference<CoordinationImpl> r = new WeakReference<CoordinationImpl>(c, queue);
+			c.setThreadAndEnclosingCoordination(Thread.currentThread(), coordinations.isEmpty() ? null : coordinations.getFirst());
+			coordinations.addFirst(r);
+		}
+		
+		private void purge() {
+			Reference<? extends CoordinationImpl> r;
+			while ((r = queue.poll()) != null) {
+				int index = coordinations.indexOf(r);
+				coordinations.remove(r);
+				if (index > 0) {
+					r = coordinations.get(index - 1);
+					CoordinationImpl c = r.get();
+					if (c != null)
+						c.setThreadAndEnclosingCoordination(Thread.currentThread(), coordinations.get(index));
+				}
+			}
+		}
+	}
+	
+	private final Bundle bundle;
+	private final List<CoordinationImpl> coordinations;
+	private final LogService logService;
+	private final Timer timer;
+
+	private boolean shutdown;
+
+	public CoordinatorImpl(Bundle bundle, LogService logService, Timer timer) {
+		this.bundle = bundle;
+		this.logService = logService;
+		this.timer = timer;
+		coordinations = new ArrayList<CoordinationImpl>();
+	}
+
+	public boolean addParticipant(Participant participant) throws CoordinationException {
+		Coordination coordination = peek();
+		if (coordination == null)
+			return false;
+		coordination.addParticipant(participant);
+		return true;
+	}
+
+	public Coordination begin(String name, long timeout) {
+		CoordinationImpl coordination = (CoordinationImpl) create(name, timeout);
+		coordination.push();
+		return coordination;
+	}
+
+	public Coordination create(String name, long timeout) {
+		// This method requires the INITIATE permission. No bundle check is done.
+		checkPermission(CoordinationPermission.INITIATE, name);
+		CoordinationImpl coordination = new CoordinationImpl(getNextId(), name, timeout, this);
+		synchronized (this) {
+			if (shutdown)
+				throw new IllegalStateException(Messages.CoordinatorImpl_2);
+			synchronized (CoordinatorImpl.class) {
+				coordinations.add(coordination);
+				idToCoordination.put(new Long(coordination.getId()), coordination);
+			}
+		}
+		if (timeout > 0) {
+			TimerTask timerTask = new CoordinationTimerTask(coordination);
+			coordination.setTimerTask(timerTask);
+			schedule(timerTask, coordination.getDeadline());
+		}
+		return coordination;
+	}
+
+	public boolean fail(Throwable reason) {
+		Coordination coordination = peek();
+		if (coordination == null)
+			return false;
+		return coordination.fail(reason);
+	}
+
+	public Coordination getCoordination(long id) {
+		CoordinationImpl result = null;
+		synchronized (CoordinatorImpl.class) {
+			result = idToCoordination.get(new Long(id));
+		}
+		if (result != null && !result.isTerminated()) {
+			try {
+				checkPermission(CoordinationPermission.ADMIN, result.getName());
+			} catch (SecurityException e) {
+				logService.log(LogService.LOG_DEBUG, Messages.CoordinatorImpl_1, e);
+				result = null;
+			}
+		}
+		return result;
+	}
+
+	public Collection<Coordination> getCoordinations() {
+		ArrayList<Coordination> result;
+		synchronized (CoordinatorImpl.class) {
+			result = new ArrayList<Coordination>(idToCoordination.size());
+			for (CoordinationImpl coordination : idToCoordination.values()) {
+				// Ideally, we're only interested in coordinations that have not terminated.
+				// It's okay, however, if the coordination terminates from this point forward.
+				if (coordination.isTerminated())
+					continue;
+				try {
+					checkPermission(CoordinationPermission.ADMIN, coordination.getName());
+					result.add(coordination);
+				} catch (SecurityException e) {
+					logService.log(LogService.LOG_DEBUG, Messages.CoordinatorImpl_1, e);
+				}
+			}
+		}
+		result.trimToSize();
+		return result;
+	}
+
+	public Coordination peek() {
+		return coordinationStack.get().peek();
+	}
+
+	public Coordination pop() {
+		Coordination c = coordinationStack.get().peek();
+		if (c == null) return null;
+		checkPermission(CoordinationPermission.INITIATE, c.getName());
+		return coordinationStack.get().pop();
+	}
+
+	CoordinationImpl addParticipant(Participant participant, CoordinationImpl coordination) {
+		CoordinationImpl result = null;
+		synchronized (participantToCoordination) {
+			result = participantToCoordination.get(participant);
+			if (result == null) {
+				participantToCoordination.put(participant, coordination);
+			}
+		}
+		return result;
+	}
+
+	void checkPermission(String permissionType, String coordinationName) {
+		checkPermission(new CoordinationPermission(coordinationName, bundle, permissionType));
+	}
+
+	void checkPermission(Permission permission) {
+		SecurityManager securityManager = System.getSecurityManager();
+		if (securityManager == null)
+			return;
+		securityManager.checkPermission(permission);
+	}
+
+	Bundle getBundle() {
+		return bundle;
+	}
+
+	LogService getLogService() {
+		return logService;
+	}
+
+	void purge() {
+		// Purge the timer of all canceled tasks if we're running on a supportive JCL.
+		try {
+			Timer.class.getMethod("purge", (Class<?>[]) null).invoke(timer, (Object[]) null); //$NON-NLS-1$
+		} catch (Exception e) {
+			logService.log(LogService.LOG_DEBUG, Messages.CoordinatorImpl_4, e);
+		}
+	}
+
+	void push(CoordinationImpl coordination) throws CoordinationException {
+		coordinationStack.get().push(coordination);
+	}
+
+	void schedule(TimerTask task, Date deadline) {
+		timer.schedule(task, deadline);
+	}
+
+	void shutdown() {
+		List<Coordination> coords;
+		synchronized (this) {
+			shutdown = true;
+			// Make a copy so the removal of the coordination from the list during
+			// termination does not interfere with the iteration.
+			coords = new ArrayList<Coordination>(this.coordinations);
+		}
+		for (Coordination coordination : coords) {
+			coordination.fail(Coordination.RELEASED);
+		}
+	}
+
+	/*
+	 * This procedure must occur when a coordination is being failed or ended.
+	 */
+	void terminate(Coordination coordination, List<Participant> participants) {
+		// A coordination has been terminated and needs to be removed from the thread local stack.
+		synchronized (this) {
+			synchronized (CoordinatorImpl.class) {
+				this.coordinations.remove(coordination);
+				idToCoordination.remove(new Long(coordination.getId()));
+				participantToCoordination.keySet().removeAll(participants);
+			}
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorServiceFactory.java
new file mode 100644
index 0000000..86dee19
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/CoordinatorServiceFactory.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import java.util.Timer;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.coordinator.Coordinator;
+
+public class CoordinatorServiceFactory implements ServiceFactory<Coordinator> {
+	private final LogTracker logTracker;
+	private final Timer timer = new Timer(true);
+
+	public CoordinatorServiceFactory(BundleContext bundleContext) {
+		logTracker = new LogTracker(bundleContext, System.out);
+	}
+
+	public Coordinator getService(Bundle bundle, ServiceRegistration<Coordinator> registration) {
+		return new CoordinatorImpl(bundle, logTracker, timer);
+	}
+
+	public void ungetService(Bundle bundle, ServiceRegistration<Coordinator> registration, Coordinator service) {
+		((CoordinatorImpl) service).shutdown();
+	}
+
+	void shutdown() {
+		timer.cancel();
+//		CoordinatorImpl.reset();
+		logTracker.close();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogMessages.properties b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogMessages.properties
new file mode 100644
index 0000000..55d4784
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogMessages.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2005, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# NLS_MESSAGEFORMAT_ALL 
+
+Unknown_Log_level=Unknown Log Level
+Info=Log Info
+Warning=Log Warning
+Error=Log Error
+Debug=Log Debug
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogTracker.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogTracker.java
new file mode 100644
index 0000000..2bd60a0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogTracker.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 1998, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import java.io.PrintStream;
+import java.util.Calendar;
+import java.util.Date;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * LogTracker class. This class encapsulates the LogService
+ * and handles all issues such as the service coming and going.
+ */
+
+public class LogTracker extends ServiceTracker<LogService, LogService> implements LogService {
+	/** LogService interface class name */
+	protected final static String clazz = "org.osgi.service.log.LogService"; //$NON-NLS-1$
+
+	/** PrintStream to use if LogService is unavailable */
+	private final PrintStream out;
+
+	/**
+	 * Create new LogTracker.
+	 *
+	 * @param context BundleContext of parent bundle.
+	 * @param out Default PrintStream to use if LogService is unavailable.
+	 */
+	public LogTracker(BundleContext context, PrintStream out) {
+		super(context, clazz, null);
+		this.out = out;
+	}
+
+	/*
+	 * ----------------------------------------------------------------------
+	 *      LogService Interface implementation
+	 * ----------------------------------------------------------------------
+	 */
+
+	public void log(int level, String message) {
+		log(null, level, message, null);
+	}
+
+	public void log(int level, String message, Throwable exception) {
+		log(null, level, message, exception);
+	}
+
+	public void log(@SuppressWarnings("rawtypes")
+	ServiceReference reference, int level, String message) {
+		log(reference, level, message, null);
+	}
+
+	public synchronized void log(@SuppressWarnings("rawtypes")
+	ServiceReference reference, int level, String message, Throwable exception) {
+		ServiceReference<LogService>[] references = getServiceReferences();
+
+		if (references != null) {
+			int size = references.length;
+
+			for (int i = 0; i < size; i++) {
+				LogService service = getService(references[i]);
+				if (service != null) {
+					try {
+						service.log(reference, level, message, exception);
+					} catch (Exception e) {
+						// TODO: consider printing to System Error
+					}
+				}
+			}
+
+			return;
+		}
+
+		noLogService(level, message, exception, reference);
+	}
+
+	/**
+	 * The LogService is not available so we write the message to a PrintStream.
+	 *
+	 * @param level Logging level
+	 * @param message Log message.
+	 * @param throwable Log exception or null if none.
+	 * @param reference ServiceReference associated with message or null if none.
+	 */
+	protected void noLogService(int level, String message, Throwable throwable, ServiceReference<?> reference) {
+		if (out != null) {
+			synchronized (out) {
+				// Bug #113286.  If no log service present and messages are being
+				// printed to stdout, prepend message with a timestamp.
+				String timestamp = getDate(new Date());
+				out.print(timestamp + " "); //$NON-NLS-1$
+
+				switch (level) {
+					case LOG_DEBUG : {
+						out.print(LogTrackerMsg.Debug);
+
+						break;
+					}
+					case LOG_INFO : {
+						out.print(LogTrackerMsg.Info);
+
+						break;
+					}
+					case LOG_WARNING : {
+						out.print(LogTrackerMsg.Warning);
+
+						break;
+					}
+					case LOG_ERROR : {
+						out.print(LogTrackerMsg.Error);
+
+						break;
+					}
+					default : {
+						out.print("["); //$NON-NLS-1$
+						out.print(LogTrackerMsg.Unknown_Log_level);
+						out.print("]: "); //$NON-NLS-1$
+
+						break;
+					}
+				}
+
+				out.println(message);
+
+				if (reference != null) {
+					out.println(reference);
+				}
+
+				if (throwable != null) {
+					throwable.printStackTrace(out);
+				}
+			}
+		}
+	}
+
+	// from EclipseLog to avoid using DateFormat -- see bug 149892#c10
+	private String getDate(Date date) {
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		StringBuffer sb = new StringBuffer();
+		appendPaddedInt(c.get(Calendar.YEAR), 4, sb).append('-');
+		appendPaddedInt(c.get(Calendar.MONTH) + 1, 2, sb).append('-');
+		appendPaddedInt(c.get(Calendar.DAY_OF_MONTH), 2, sb).append(' ');
+		appendPaddedInt(c.get(Calendar.HOUR_OF_DAY), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.MINUTE), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.SECOND), 2, sb).append('.');
+		appendPaddedInt(c.get(Calendar.MILLISECOND), 3, sb);
+		return sb.toString();
+	}
+
+	private StringBuffer appendPaddedInt(int value, int pad, StringBuffer buffer) {
+		pad = pad - 1;
+		if (pad == 0)
+			return buffer.append(Integer.toString(value));
+		int padding = (int) Math.pow(10, pad);
+		if (value >= padding)
+			return buffer.append(Integer.toString(value));
+		while (padding > value && padding > 1) {
+			buffer.append('0');
+			padding = padding / 10;
+		}
+		buffer.append(value);
+		return buffer;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogTrackerMsg.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogTrackerMsg.java
new file mode 100644
index 0000000..33ea3d0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/LogTrackerMsg.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import org.eclipse.osgi.util.NLS;
+
+public class LogTrackerMsg extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.event.LogMessages"; //$NON-NLS-1$
+
+	public static String Unknown_Log_level;
+	public static String Info;
+	public static String Warning;
+	public static String Error;
+	public static String Debug;
+
+	static {
+		// initialize resource bundles
+		NLS.initializeMessages(BUNDLE_NAME, LogTrackerMsg.class);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/Messages.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/Messages.java
new file mode 100644
index 0000000..bb52058
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/Messages.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.coordinator;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.coordinator.messages"; //$NON-NLS-1$
+	public static String CoordinationImpl_0;
+	public static String CoordinationImpl_1;
+	public static String CoordinationImpl_10;
+	public static String CoordinationImpl_11;
+	public static String CoordinationImpl_12;
+	public static String CoordinationImpl_13;
+	public static String CoordinationImpl_14;
+	public static String CoordinationImpl_15;
+	public static String CoordinationImpl_2;
+	public static String CoordinationImpl_3;
+	public static String CoordinationImpl_4;
+	public static String CoordinationImpl_5;
+	public static String CoordinationImpl_6;
+	public static String CoordinationImpl_7;
+	public static String CoordinationImpl_8;
+	public static String CoordinationImpl_9;
+	public static String CoordinatorImpl_0;
+	public static String CoordinatorImpl_1;
+	public static String CoordinatorImpl_2;
+	public static String CoordinatorImpl_3;
+	public static String CoordinatorImpl_4;
+
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+		// noop
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/messages.properties b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/messages.properties
new file mode 100644
index 0000000..bf1e76e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/eclipse/equinox/coordinator/messages.properties
@@ -0,0 +1,31 @@
+###############################################################################
+# Copyright (c) 2010, 2011 IBM Corporation.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+CoordinationImpl_0=Parameter must not be null: coordination
+CoordinationImpl_1=Deadlock detected
+CoordinationImpl_10=The coordination name does not match the Bundle Symbolic Name pattern
+CoordinationImpl_11=A reason must be specified when failing a coordination
+CoordinationImpl_12=A timeout must be a non-negative integer
+CoordinationImpl_13=The timeout could not be extended because the previous one had already expired. The current thread was interrupted before it was possible to determine how this coordination terminated.
+CoordinationImpl_14=Coordinations may only be ended by the same thread that pushed them onto the thread local stack
+CoordinationImpl_15=The participant to add was null
+CoordinationImpl_2=The lock was interrupted
+CoordinationImpl_3=The lock was interrupted
+CoordinationImpl_4=A participant indicated an error occurred while the coordination was ending
+CoordinationImpl_5=Partially ended
+CoordinationImpl_6=A participant indicated an error occurred while the coordination was failing
+CoordinationImpl_7=Coordination has failed
+CoordinationImpl_8=Coordination has already ended
+CoordinationImpl_9=An unexpected exception occurred while failing a coordination. This will not stop the timer thread.
+CoordinatorImpl_0=The next Coordinator ID would exceed the maximum possible value
+CoordinatorImpl_1=A requestor did not have permission to view a coordination
+CoordinatorImpl_2=This coordinator has been shutdown
+CoordinatorImpl_3=Coordination already exists
+CoordinatorImpl_4=Unable to purge the canceled task
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Coordination.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Coordination.java
new file mode 100644
index 0000000..3d93637
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Coordination.java
@@ -0,0 +1,398 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.coordinator;
+
+import java.util.List;
+import java.util.Map;
+
+import org.osgi.framework.Bundle;
+
+/**
+ * A Coordination object is used to coordinate a number of independent
+ * Participants.
+ * 
+ * <p>
+ * Once a Coordination is {@link Coordinator#create(String, long) created}, it
+ * can be used to add {@link Participant} objects. When the Coordination is
+ * ended, the participants are {@link Participant#ended(Coordination) notified}.
+ * A Coordination can also fail for various reasons. When this occurs, the
+ * participants are {@link Participant#failed(Coordination) notified} of the
+ * failure.
+ * 
+ * <p>
+ * A Coordination must be in one of two states, either ACTIVE or TERMINATED. The
+ * transition between ACTIVE and TERMINATED must be atomic, ensuring that a
+ * Participant can be guaranteed of either receiving an exception when adding
+ * itself to a Coordination or of receiving notification the Coordination has
+ * terminated.
+ * 
+ * <p>
+ * A Coordination object is thread safe and can be passed as a parameter to
+ * other parties regardless of the threads these parties use.
+ * 
+ * <p>
+ * The following example code shows how a Coordination should be used.
+ * 
+ * <pre>
+ * void foo() {
+ *   Coordination c = coordinator.create("work", 0);
+ * 	 try {
+ * 	   doWork(c);
+ * 	 }
+ * 	 catch (Exception e) {
+ *     c.fail(e);
+ * 	 }
+ * 	 finally {
+ * 	   c.end();
+ * 	 }
+ * }
+ * </pre>
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 5381fdd48301865d24eabcf57ff81aee9eb6a159 $
+ */
+
+public interface Coordination {
+
+	/**
+	 * A singleton exception that will be the failure cause when a Coordination
+	 * times out.
+	 */
+	Exception	TIMEOUT		= new Exception("TIMEOUT");
+
+	/**
+	 * A singleton exception that will be the failure cause when the
+	 * Coordinations created by a bundle are terminated because the bundle
+	 * released the Coordinator service.
+	 */
+	Exception	RELEASED	= new Exception("RELEASED");
+
+	/**
+	 * Returns the id assigned to this Coordination.
+	 * 
+	 * The id is assigned by the {@link Coordinator} service which created this
+	 * Coordination and is unique among all the Coordinations created by the
+	 * Coordinator service and must not be reused as long as the Coordinator
+	 * service remains registered. The id must be positive and monotonically
+	 * increases for each Coordination created by the Coordinator service.
+	 * 
+	 * @return The id assigned to this Coordination.
+	 */
+	long getId();
+
+	/**
+	 * Returns the name of this Coordination.
+	 * 
+	 * The name is specified when this Coordination was created.
+	 * 
+	 * @return The name of this Coordination.
+	 * 
+	 */
+	String getName();
+
+	/**
+	 * Terminate this Coordination normally.
+	 * 
+	 * <p>
+	 * If this Coordination has been {@link #push() pushed} on the thread local
+	 * Coordination stack of another thread, this method does nothing except
+	 * throw a CoordinationException of type
+	 * {@link CoordinationException#WRONG_THREAD}.
+	 * 
+	 * <p>
+	 * If this Coordination has been {@link #push() pushed} on the thread local
+	 * Coordination stack of this thread but is not the
+	 * {@link Coordinator#peek() current Coordination}, then the Coordinations
+	 * on the thread local Coordination stack above this Coordination must be
+	 * terminated and removed from the thread local Coordination stack before
+	 * this Coordination is terminated. Each of these Coordinations, starting
+	 * with the current Coordination, will be {@link #end() terminated normally}
+	 * . If the termination throws a {@link CoordinationException}, then the
+	 * next Coordination on the thread local Coordination stack will be
+	 * {@link #fail(Throwable) terminated as a failure} with a failure cause of
+	 * the thrown CoordinationException. At the end of this process, this
+	 * Coordination will be the current Coordination and will have been
+	 * terminated as a failure if any of the terminated Coordinations threw a
+	 * CoordinationException
+	 * 
+	 * <p>
+	 * If this Coordination is the {@link Coordinator#peek() current
+	 * Coordination}, then it will be {@link Coordinator#pop() removed} from the
+	 * thread local Coordination stack.
+	 * 
+	 * <p>
+	 * If this Coordination is already terminated, a CoordinationException is
+	 * thrown. If this Coordination was terminated as a failure, the
+	 * {@link #getFailure() failure cause} will be the cause of the thrown
+	 * CoordinationException.
+	 * 
+	 * <p>
+	 * Otherwise, this Coordination is terminated normally and then all
+	 * registered {@link #getParticipants() Participants} are
+	 * {@link Participant#ended(Coordination) notified}. Participants should
+	 * finalize any work associated with this Coordination. The successful
+	 * return of this method indicates that the Coordination has terminated
+	 * normally and all registered Participants have been notified of the normal
+	 * termination.
+	 * 
+	 * <p>
+	 * It is possible that one of the Participants throws an exception during
+	 * notification. If this happens, this Coordination is considered to have
+	 * partially failed and this method must throw a CoordinationException of
+	 * type {@link CoordinationException#PARTIALLY_ENDED} after all the
+	 * registered Participants have been notified.
+	 * 
+	 * @throws CoordinationException If this Coordination has failed, including
+	 *         timed out, or partially failed or this Coordination is on the
+	 *         thread local Coordination stack of another thread.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[INITIATE]} for this Coordination.
+	 */
+	void end();
+
+	/**
+	 * Terminate this Coordination as a failure with the specified failure
+	 * cause.
+	 * 
+	 * <p>
+	 * If this Coordination is already {@link #isTerminated() terminated}, this
+	 * method does nothing and returns {@code false}.
+	 * 
+	 * <p>
+	 * Otherwise, this Coordination is terminated as a failure with the
+	 * specified failure cause and then all registered
+	 * {@link #getParticipants() Participants} are
+	 * {@link Participant#failed(Coordination) notified}. Participants should
+	 * discard any work associated with this Coordination. This method will
+	 * return {@code true}.
+	 * 
+	 * <p>
+	 * If this Coordination has been {@link #push() pushed} onto a thread local
+	 * Coordination stack, this Coordination is not removed from the stack. The
+	 * creator of this Coordination must still call {@link #end()} on this
+	 * Coordination to cause it to be removed from the thread local Coordination
+	 * stack.
+	 * 
+	 * @param cause The failure cause. The failure cause must not be
+	 *        {@code null}.
+	 * @return {@code true} if this Coordination was active and was terminated
+	 *         by this method, otherwise {@code false}.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[PARTICIPATE]} for this Coordination.
+	 */
+	boolean fail(Throwable cause);
+
+	/**
+	 * Returns the failure cause of this Coordination.
+	 * 
+	 * <p>
+	 * If this Coordination has {@link #fail(Throwable) failed}, then this
+	 * method will return the failure cause.
+	 * 
+	 * <p>
+	 * If this Coordination timed out, this method will return {@link #TIMEOUT}
+	 * as the failure cause. If this Coordination was active when the bundle
+	 * that created it released the {@link Coordinator} service, this method
+	 * will return {@link #RELEASED} as the failure cause.
+	 * 
+	 * @return The failure cause of this Coordination or {@code null} if this
+	 *         Coordination has not terminated as a failure.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[INITIATE]} for this Coordination.
+	 */
+	Throwable getFailure();
+
+	/**
+	 * Returns whether this Coordination is terminated.
+	 * 
+	 * @return {@code true} if this Coordination is terminated, otherwise
+	 *         {@code false} if this Coordination is active.
+	 */
+	boolean isTerminated();
+
+	/**
+	 * Register a Participant with this Coordination.
+	 * 
+	 * <p>
+	 * Once a Participant is registered with this Coordination, it is guaranteed
+	 * to receive a notification for either
+	 * {@link Participant#ended(Coordination) normal} or
+	 * {@link Participant#failed(Coordination) failure} termination when this
+	 * Coordination is terminated.
+	 * 
+	 * <p>
+	 * Participants are registered using their object identity. Once a
+	 * Participant is registered with this Coordination, subsequent attempts to
+	 * register the Participant again with this Coordination are ignored and the
+	 * Participant is only notified once when this Coordination is terminated.
+	 * 
+	 * <p>
+	 * A Participant can only be registered with a single active Coordination at
+	 * a time. If a Participant is already registered with an active
+	 * Coordination, attempts to register the Participation with another active
+	 * Coordination will block until the Coordination the Participant is
+	 * registered with terminates. Notice that in edge cases the notification to
+	 * the Participant that this Coordination has terminated can happen before
+	 * this method returns.
+	 * 
+	 * <p>
+	 * Attempting to register a Participant with a {@link #isTerminated()
+	 * terminated} Coordination will result in a CoordinationException being
+	 * thrown.
+	 * 
+	 * <p>
+	 * The ordering of notifying Participants must follow the order in which the
+	 * Participants were registered.
+	 * 
+	 * @param participant The Participant to register with this Coordination.
+	 *        The participant must not be {@code null}.
+	 * @throws CoordinationException If the Participant could not be registered
+	 *         with this Coordination. This exception should normally not be
+	 *         caught by the caller but allowed to be caught by the initiator of
+	 *         this Coordination.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[PARTICIPATE]} for this Coordination.
+	 */
+	void addParticipant(Participant participant);
+
+	/**
+	 * Returns a snapshot of the Participants registered with this Coordination.
+	 * 
+	 * @return A snapshot of the Participants registered with this Coordination.
+	 *         If no Participants are registered with this Coordination, the
+	 *         returned list will be empty. The list is ordered in the order the
+	 *         Participants were registered. The returned list is the property
+	 *         of the caller and can be modified by the caller.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[INITIATE]} for this Coordination.
+	 */
+	List<Participant> getParticipants();
+
+	/**
+	 * Returns the variable map associated with this Coordination.
+	 * 
+	 * Each Coordination has a map that can be used for communicating between
+	 * different Participants. The key of the map is a class, allowing for
+	 * private data to be stored in the map by using implementation classes or
+	 * shared data by using shared interfaces.
+	 * 
+	 * The returned map is not synchronized. Users of the map must synchronize
+	 * on the Map object while making changes.
+	 * 
+	 * @return The variable map associated with this Coordination.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[PARTICIPANT]} for this Coordination.
+	 */
+	Map<Class< ? >, Object> getVariables();
+
+	/**
+	 * Extend the time out of this Coordination.
+	 * 
+	 * <p>
+	 * Participants can call this method to extend the timeout of this
+	 * Coordination with at least the specified time. This can be done by
+	 * Participants when they know a task will take more than normal time.
+	 * 
+	 * This method returns the new deadline. Specifying a timeout extension of 0
+	 * will return the existing deadline.
+	 * 
+	 * @param timeMillis The time in milliseconds to extend the current timeout.
+	 *        If the initial timeout was specified as 0, no extension must take
+	 *        place. A zero must have no effect.
+	 * @return The new deadline in milliseconds. If the specified time is 0, the
+	 *         existing deadline is returned. If this Coordination was created
+	 *         with an initial timeout of 0, no timeout is set and 0 is
+	 *         returned.
+	 * @throws CoordinationException If this Coordination
+	 *         {@link #isTerminated() is terminated}.
+	 * @throws IllegalArgumentException If the specified time is negative.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[PARTICIPATE]} for this Coordination.
+	 */
+	long extendTimeout(long timeMillis);
+
+	/**
+	 * Wait until this Coordination is terminated and all registered
+	 * Participants have been notified.
+	 * 
+	 * @param timeMillis Maximum time in milliseconds to wait. Specifying a time
+	 *        of 0 will wait until this Coordination is terminated.
+	 * @throws InterruptedException If the wait is interrupted.
+	 * @throws IllegalArgumentException If the specified time is negative.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[PARTICIPATE]} for this Coordination.
+	 */
+
+	void join(long timeMillis) throws InterruptedException;
+
+	/**
+	 * Push this Coordination object onto the thread local Coordination stack to
+	 * make it the {@link Coordinator#peek() current Coordination}.
+	 * 
+	 * @return This Coordination.
+	 * @throws CoordinationException If this Coordination is already on the any
+	 *         thread's thread local Coordination stack or this Coordination
+	 *         {@link #isTerminated() is terminated}.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[INITIATE]} for this Coordination.
+	 */
+	Coordination push();
+
+	/**
+	 * Returns the thread in whose thread local Coordination stack this
+	 * Coordination has been {@link #push() pushed}.
+	 * 
+	 * @return The thread in whose thread local Coordination stack this
+	 *         Coordination has been pushed or {@code null} if this Coordination
+	 *         is not in any thread local Coordination stack.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[ADMIN]} for this Coordination.
+	 */
+	Thread getThread();
+
+	/**
+	 * Returns the bundle that created this Coordination. This is the bundle
+	 * that obtained the {@link Coordinator} service that was used to create
+	 * this Coordination.
+	 * 
+	 * @return The bundle that created this Coordination.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[ADMIN]} for this Coordination.
+	 */
+	Bundle getBundle();
+
+	/**
+	 * Returns the Coordination enclosing this Coordination if this Coordination
+	 * is on the thread local Coordination stack.
+	 * 
+	 * <p>
+	 * When a Coordination is {@link #push() pushed} onto the thread local
+	 * Coordination stack, the former {@link Coordinator#peek() current
+	 * Coordination}, if any, is the enclosing Coordination of this
+	 * Coordination. When this Coordination is {@link Coordinator#pop() removed}
+	 * from the thread local Coordination stack, this Coordination no longer has
+	 * an enclosing Coordination.
+	 * 
+	 * @return The Coordination enclosing this Coordination if this Coordination
+	 *         is on the thread local Coordination stack or {@code null} if this
+	 *         Coordination is not on the thread local Coordination stack or has
+	 *         no enclosing Coordination.
+	 * @throws SecurityException If the caller does not have {@code
+	 *         CoordinationPermission[ADMIN]} for this Coordination.
+	 */
+	Coordination getEnclosingCoordination();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/CoordinationException.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/CoordinationException.java
new file mode 100644
index 0000000..9ceb78e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/CoordinationException.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.coordinator;
+
+/**
+ * Unchecked exception which may be thrown by a Coordinator implementation.
+ * 
+ * @version $Id: 9813b5b25a0572e81529626cb162f88bd005c707 $
+ */
+public class CoordinationException extends RuntimeException {
+	private static final long	serialVersionUID	= 1L;
+
+	/**
+	 * Unknown reason for this exception.
+	 */
+	public final static int		UNKNOWN				= 0;
+
+	/**
+	 * Registering a Participant with a Coordination would have resulted in a
+	 * deadlock.
+	 */
+	public final static int		DEADLOCK_DETECTED	= 1;
+
+	/**
+	 * The Coordination has terminated as a failure with
+	 * {@link Coordination#fail(Throwable)}. When this exception type is used,
+	 * the {@link #getCause()} method must return a non-null value.
+	 */
+	public final static int		FAILED				= 2;
+
+	/**
+	 * The Coordination has partially ended.
+	 */
+	public final static int		PARTIALLY_ENDED		= 3;
+
+	/**
+	 * The Coordination has already terminated normally.
+	 */
+	public final static int		ALREADY_ENDED		= 4;
+
+	/**
+	 * The Coordination was already on a thread's thread local Coordination
+	 * stack.
+	 */
+	public final static int		ALREADY_PUSHED		= 5;
+
+	/**
+	 * The current thread was interrupted while waiting to register a
+	 * Participant with a Coordination.
+	 */
+	public final static int		LOCK_INTERRUPTED	= 6;
+
+	/**
+	 * The Coordination cannot be ended by the calling thread since the
+	 * Coordination is on the thread local Coordination stack of another thread.
+	 */
+	public final static int		WRONG_THREAD		= 7;
+
+	private final String		name;
+	private final int			type;
+	private final long			id;
+
+	/**
+	 * Create a new Coordination Exception with a cause.
+	 * 
+	 * @param message The detail message for this exception.
+	 * @param coordination The Coordination associated with this exception.
+	 * @param cause The cause associated with this exception.
+	 * @param type The type of this exception.
+	 */
+	public CoordinationException(String message, Coordination coordination,
+			int type, Throwable cause) {
+		super(message, cause);
+		this.type = type;
+		if (coordination == null) {
+			this.id = -1L;
+			this.name = "<>";
+		}
+		else {
+			this.id = coordination.getId();
+			this.name = coordination.getName();
+		}
+		if ((type == FAILED) && (cause == null)) {
+			throw new IllegalArgumentException(
+					"A cause must be specified for type FAILED");
+		}
+	}
+
+	/**
+	 * Create a new Coordination Exception.
+	 * 
+	 * @param message The detail message for this exception.
+	 * @param coordination The Coordination associated with this exception.
+	 * @param type The type of this exception.
+	 */
+	public CoordinationException(String message, Coordination coordination,
+			int type) {
+		super(message);
+		this.type = type;
+		if (coordination == null) {
+			this.id = -1L;
+			this.name = "<>";
+		}
+		else {
+			this.id = coordination.getId();
+			this.name = coordination.getName();
+		}
+		if (type == FAILED) {
+			throw new IllegalArgumentException(
+					"A cause must be specified for type FAILED");
+		}
+	}
+
+	/**
+	 * Returns the name of the {@link Coordination} associated with this
+	 * exception.
+	 * 
+	 * @return The name of the Coordination associated with this exception or
+	 *         {@code "<>"} if no Coordination is associated with this
+	 *         exception.
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Returns the type for this exception.
+	 * 
+	 * @return The type of this exception.
+	 */
+	public int getType() {
+		return type;
+	}
+
+	/**
+	 * Returns the id of the {@link Coordination} associated with this
+	 * exception.
+	 * 
+	 * @return The id of the Coordination associated with this exception or
+	 *         {@code -1} if no Coordination is associated with this exception.
+	 */
+
+	public long getId() {
+		return id;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/CoordinationPermission.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/CoordinationPermission.java
new file mode 100644
index 0000000..9495956
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/CoordinationPermission.java
@@ -0,0 +1,808 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.coordinator;
+
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.security.AccessController;
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.PrivilegedAction;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+
+/**
+ * A bundle's authority to create or use a {@link Coordination}.
+ * 
+ * <p>
+ * {@code CoordinationPermission} has three actions: {@code initiate},
+ * {@code participate} and {@code admin}.
+ * 
+ * @ThreadSafe
+ * @version $Id: 5c0e011abe0732906361e08819354ec794e1e2fd $
+ */
+public class CoordinationPermission extends BasicPermission {
+
+	private static final long	serialVersionUID	= 1L;
+
+	/**
+	 * The action string {@code initiate}.
+	 */
+	public final static String	INITIATE			= "initiate";
+	/**
+	 * The action string {@code participate}.
+	 */
+	public final static String	PARTICIPATE			= "participate";
+	/**
+	 * The action string {@code admin}.
+	 */
+	public final static String	ADMIN				= "admin";
+
+	private final static int						ACTION_INITIATE		= 0x00000001;
+	private final static int						ACTION_PARTICIPATE	= 0x00000002;
+	private final static int						ACTION_ADMIN		= 0x00000004;
+	private final static int						ACTION_ALL			= ACTION_INITIATE
+																				| ACTION_PARTICIPATE
+																				| ACTION_ADMIN;
+	final static int								ACTION_NONE			= 0;
+
+	/**
+	 * The actions mask.
+	 */
+	transient int									action_mask;
+
+	/**
+	 * The actions in canonical form.
+	 * 
+	 * @serial
+	 */
+	private volatile String							actions				= null;
+
+	/**
+	 * The bundle used by this CoordinationPermission.
+	 */
+	transient final Bundle							bundle;
+
+	/**
+	 * If this CoordinationPermission was constructed with a filter, this holds
+	 * a Filter matching object used to evaluate the filter in implies.
+	 */
+	transient Filter								filter;
+
+	/**
+	 * This map holds the properties of the permission, used to match a filter
+	 * in implies. This is not initialized until necessary, and then cached in
+	 * this object.
+	 */
+	private transient volatile Map<String, Object>	properties;
+
+	/**
+	 * Creates a new granted {@code CoordinationPermission} object.
+	 * 
+	 * This constructor must only be used to create a permission that is going
+	 * to be checked.
+	 * <p>
+	 * Examples:
+	 * 
+	 * <pre>
+	 * (coordination.name=com.acme.*)
+	 * (&(signer=\*,o=ACME,c=US)(coordination.name=com.acme.*))
+	 * (signer=\*,o=ACME,c=US)
+	 * </pre>
+	 * 
+	 * <p>
+	 * When a signer key is used within the filter expression the signer value
+	 * must escape the special filter chars ('*', '(', ')').
+	 * <p>
+	 * The name is specified as a filter expression. The filter gives access to
+	 * the following attributes:
+	 * <ul>
+	 * <li>signer - A Distinguished Name chain used to sign the exporting
+	 * bundle. Wildcards in a DN are not matched according to the filter string
+	 * rules, but according to the rules defined for a DN chain.</li>
+	 * <li>location - The location of the exporting bundle.</li>
+	 * <li>id - The bundle ID of the exporting bundle.</li>
+	 * <li>name - The symbolic name of the exporting bundle.</li>
+	 * <li>coordination.name - The name of the requested coordination.</li>
+	 * </ul>
+	 * Filter attribute names are processed in a case sensitive manner.
+	 * 
+	 * @param filter A filter expression. Filter attribute names are processed
+	 *        in a case sensitive manner. A special value of {@code "*"} can be
+	 *        used to match all coordinations.
+	 * @param actions {@code admin}, {@code initiate} or {@code participate}
+	 *        (canonical order).
+	 * @throws IllegalArgumentException If the filter has an invalid syntax.
+	 */
+	public CoordinationPermission(String filter, String actions) {
+		this(parseFilter(filter), parseActions(actions));
+	}
+
+	/**
+	 * Creates a new requested {@code CoordinationPermission} object to be used
+	 * by the code that must perform {@code checkPermission}.
+	 * {@code CoordinationPermission} objects created with this constructor
+	 * cannot be added to an {@code CoordinationPermission} permission
+	 * collection.
+	 * 
+	 * @param coordinationName The name of the requested Coordination.
+	 * @param coordinationBundle The bundle which
+	 *        {@link Coordination#getBundle() created} the requested
+	 *        Coordination.
+	 * @param actions {@code admin}, {@code initiate} or {@code participate}
+	 *        (canonical order).
+	 */
+	public CoordinationPermission(String coordinationName,
+			Bundle coordinationBundle, String actions) {
+		super(coordinationName);
+		setTransients(null, parseActions(actions));
+		this.bundle = coordinationBundle;
+		if (coordinationName == null) {
+			throw new NullPointerException("coordinationName must not be null");
+		}
+		if (coordinationBundle == null) {
+			throw new NullPointerException(
+					"coordinationBundle must not be null");
+		}
+	}
+
+	/**
+	 * Package private constructor used by CoordinationPermissionCollection.
+	 * 
+	 * @param filter name filter
+	 * @param mask action mask
+	 */
+	CoordinationPermission(Filter filter, int mask) {
+		super((filter == null) ? "*" : filter.toString());
+		setTransients(filter, mask);
+		this.bundle = null;
+	}
+
+	/**
+	 * Called by constructors and when deserialized.
+	 * 
+	 * @param filter Permission's filter or {@code null} for wildcard.
+	 * @param mask action mask
+	 */
+	private void setTransients(Filter filter, int mask) {
+		this.filter = filter;
+		if ((mask == ACTION_NONE) || ((mask & ACTION_ALL) != mask)) {
+			throw new IllegalArgumentException("invalid action string");
+		}
+		this.action_mask = mask;
+	}
+
+	/**
+	 * Parse action string into action mask.
+	 * 
+	 * @param actions Action string.
+	 * @return action mask.
+	 */
+	private static int parseActions(String actions) {
+		boolean seencomma = false;
+
+		int mask = ACTION_NONE;
+
+		if (actions == null) {
+			return mask;
+		}
+
+		char[] a = actions.toCharArray();
+
+		int i = a.length - 1;
+		if (i < 0)
+			return mask;
+
+		while (i != -1) {
+			char c;
+
+			// skip whitespace
+			while ((i != -1)
+					&& ((c = a[i]) == ' ' || c == '\r' || c == '\n'
+							|| c == '\f' || c == '\t'))
+				i--;
+
+			// check for the known strings
+			int matchlen;
+
+			if (i >= 4 && (a[i - 4] == 'a' || a[i - 4] == 'A')
+					&& (a[i - 3] == 'd' || a[i - 3] == 'D')
+					&& (a[i - 2] == 'm' || a[i - 2] == 'M')
+					&& (a[i - 1] == 'i' || a[i - 1] == 'I')
+					&& (a[i] == 'n' || a[i] == 'N')) {
+				matchlen = 5;
+				mask |= ACTION_ADMIN;
+
+			}
+			else
+				if (i >= 7 && (a[i - 7] == 'i' || a[i - 7] == 'I')
+						&& (a[i - 6] == 'n' || a[i - 6] == 'N')
+						&& (a[i - 5] == 'i' || a[i - 5] == 'I')
+						&& (a[i - 4] == 't' || a[i - 4] == 'T')
+						&& (a[i - 3] == 'i' || a[i - 3] == 'I')
+						&& (a[i - 2] == 'a' || a[i - 2] == 'A')
+						&& (a[i - 1] == 't' || a[i - 1] == 'T')
+						&& (a[i] == 'e' || a[i] == 'E')) {
+					matchlen = 8;
+					mask |= ACTION_INITIATE;
+
+				}
+				else {
+					if (i >= 10 && (a[i - 10] == 'p' || a[i - 10] == 'P')
+							&& (a[i - 9] == 'a' || a[i - 9] == 'A')
+							&& (a[i - 8] == 'r' || a[i - 8] == 'R')
+							&& (a[i - 7] == 't' || a[i - 7] == 'T')
+							&& (a[i - 6] == 'i' || a[i - 6] == 'I')
+							&& (a[i - 5] == 'c' || a[i - 5] == 'C')
+							&& (a[i - 4] == 'i' || a[i - 4] == 'I')
+							&& (a[i - 3] == 'p' || a[i - 3] == 'P')
+							&& (a[i - 2] == 'a' || a[i - 2] == 'A')
+							&& (a[i - 1] == 't' || a[i - 1] == 'T')
+							&& (a[i] == 'e' || a[i] == 'E')) {
+						matchlen = 11;
+						mask |= ACTION_PARTICIPATE;
+
+					}
+					else {
+						// parse error
+						throw new IllegalArgumentException(
+								"invalid permission: " + actions);
+					}
+				}
+
+			// make sure we didn't just match the tail of a word
+			// like "ackbarfadmin". Also, skip to the comma.
+			seencomma = false;
+			while (i >= matchlen && !seencomma) {
+				switch (a[i - matchlen]) {
+					case ',' :
+						seencomma = true;
+						/* FALLTHROUGH */
+					case ' ' :
+					case '\r' :
+					case '\n' :
+					case '\f' :
+					case '\t' :
+						break;
+					default :
+						throw new IllegalArgumentException(
+								"invalid permission: " + actions);
+				}
+				i--;
+			}
+
+			// point i at the location of the comma minus one (or -1).
+			i -= matchlen;
+		}
+
+		if (seencomma) {
+			throw new IllegalArgumentException("invalid permission: " + actions);
+		}
+
+		return mask;
+	}
+
+	/**
+	 * Parse filter string into a Filter object.
+	 * 
+	 * @param filterString The filter string to parse.
+	 * @return a Filter for this bundle.
+	 * @throws IllegalArgumentException If the filter syntax is invalid.
+	 */
+	private static Filter parseFilter(String filterString) {
+		filterString = filterString.trim();
+		if (filterString.equals("*")) {
+			return null;
+		}
+		try {
+			return FrameworkUtil.createFilter(filterString);
+		}
+		catch (InvalidSyntaxException e) {
+			IllegalArgumentException iae = new IllegalArgumentException(
+					"invalid filter");
+			iae.initCause(e);
+			throw iae;
+		}
+	}
+
+	/**
+	 * Determines if the specified permission is implied by this object.
+	 * 
+	 * <p>
+	 * This method checks that the filter of the target is implied by the
+	 * coordination name of this object. The list of
+	 * {@code CoordinationPermission} actions must either match or allow for the
+	 * list of the target object to imply the target
+	 * {@code CoordinationPermission} action.
+	 * <p>
+	 * 
+	 * @param p The requested permission.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
+	 */
+	public boolean implies(Permission p) {
+		if (!(p instanceof CoordinationPermission)) {
+			return false;
+		}
+		CoordinationPermission requested = (CoordinationPermission) p;
+		if (bundle != null) {
+			return false;
+		}
+		// if requested permission has a filter, then it is an invalid argument
+		if (requested.filter != null) {
+			return false;
+		}
+		return implies0(requested, ACTION_NONE);
+	}
+
+	/**
+	 * Internal implies method. Used by the implies and the permission
+	 * collection implies methods.
+	 * 
+	 * @param requested The requested CoordinationPermission which has already
+	 *        be validated as a proper argument. The requested
+	 *        CoordinationPermission must not have a filter expression.
+	 * @param effective The effective actions with which to start.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
+	 */
+	boolean implies0(CoordinationPermission requested, int effective) {
+		/* check actions first - much faster */
+		effective |= action_mask;
+		final int desired = requested.action_mask;
+		if ((effective & desired) != desired) {
+			return false;
+		}
+		/* Get filter */
+		Filter f = filter;
+		if (f == null) {
+			// it's "*"
+			return true;
+		}
+		return f.matches(requested.getProperties());
+	}
+
+	/**
+	 * Returns the canonical string representation of the
+	 * {@code CoordinationPermission} actions.
+	 * 
+	 * <p>
+	 * Always returns present {@code CoordinationPermission} actions in the
+	 * following order: {@code admin}, {@code initiate}, {@code participate}.
+	 * 
+	 * @return Canonical string representation of the
+	 *         {@code CoordinationPermission} actions.
+	 */
+	public String getActions() {
+		String result = actions;
+		if (result == null) {
+			StringBuffer sb = new StringBuffer();
+			boolean comma = false;
+
+			int mask = action_mask;
+			if ((mask & ACTION_ADMIN) == ACTION_ADMIN) {
+				sb.append(ADMIN);
+				comma = true;
+			}
+
+			if ((mask & ACTION_INITIATE) == ACTION_INITIATE) {
+				if (comma)
+					sb.append(',');
+				sb.append(INITIATE);
+				comma = true;
+			}
+
+			if ((mask & ACTION_PARTICIPATE) == ACTION_PARTICIPATE) {
+				if (comma)
+					sb.append(',');
+				sb.append(PARTICIPATE);
+				comma = true;
+			}
+
+			actions = result = sb.toString();
+		}
+		return result;
+	}
+
+	/**
+	 * Returns a new {@code PermissionCollection} object suitable for storing
+	 * {@code CoordinationPermission} objects.
+	 * 
+	 * @return A new {@code PermissionCollection} object.
+	 */
+	public PermissionCollection newPermissionCollection() {
+		return new CoordinationPermissionCollection();
+	}
+
+	/**
+	 * Determines the equality of two {@code CoordinationPermission} objects.
+	 * 
+	 * This method checks that specified permission has the same name and
+	 * {@code CoordinationPermission} actions as this
+	 * {@code CoordinationPermission} object.
+	 * 
+	 * @param obj The object to test for equality with this
+	 *        {@code CoordinationPermission} object.
+	 * @return {@code true} if {@code obj} is a {@code CoordinationPermission},
+	 *         and has the same name and actions as this
+	 *         {@code CoordinationPermission} object; {@code false} otherwise.
+	 */
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+
+		if (!(obj instanceof CoordinationPermission)) {
+			return false;
+		}
+
+		CoordinationPermission cp = (CoordinationPermission) obj;
+
+		return (action_mask == cp.action_mask)
+				&& getName().equals(cp.getName())
+				&& ((bundle == cp.bundle) || ((bundle != null) && bundle
+						.equals(cp.bundle)));
+	}
+
+	/**
+	 * Returns the hash code value for this object.
+	 * 
+	 * @return A hash code value for this object.
+	 */
+	public int hashCode() {
+		int h = 31 * 17 + getName().hashCode();
+		h = 31 * h + getActions().hashCode();
+		if (bundle != null) {
+			h = 31 * h + bundle.hashCode();
+		}
+		return h;
+	}
+
+	/**
+	 * WriteObject is called to save the state of this permission object to a
+	 * stream. The actions are serialized, and the superclass takes care of the
+	 * name.
+	 */
+	private synchronized void writeObject(java.io.ObjectOutputStream s)
+			throws IOException {
+		if (bundle != null) {
+			throw new NotSerializableException("cannot serialize");
+		}
+		// Write out the actions. The superclass takes care of the name
+		// call getActions to make sure actions field is initialized
+		if (actions == null)
+			getActions();
+		s.defaultWriteObject();
+	}
+
+	/**
+	 * readObject is called to restore the state of this permission from a
+	 * stream.
+	 */
+	private synchronized void readObject(java.io.ObjectInputStream s)
+			throws IOException, ClassNotFoundException {
+		// Read in the action, then initialize the rest
+		s.defaultReadObject();
+		setTransients(parseFilter(getName()), parseActions(actions));
+	}
+
+	/**
+	 * Called by {@code <@link CoordinationPermission#implies(Permission)>}.
+	 * This method is only called on a requested permission which cannot have a
+	 * filter set.
+	 * 
+	 * @return a map of properties for this permission.
+	 */
+	private Map<String, Object> getProperties() {
+		Map<String, Object> result = properties;
+		if (result != null) {
+			return result;
+		}
+		final Map<String, Object> map = new HashMap<String, Object>(5);
+		map.put("coordination.name", getName());
+		if (bundle != null) {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
+				public Object run() {
+					map.put("id", new Long(bundle.getBundleId()));
+					map.put("location", bundle.getLocation());
+					String name = bundle.getSymbolicName();
+					if (name != null) {
+						map.put("name", name);
+					}
+					SignerProperty signer = new SignerProperty(bundle);
+					if (signer.isBundleSigned()) {
+						map.put("signer", signer);
+					}
+					return null;
+				}
+			});
+		}
+		return properties = map;
+	}
+}
+
+/**
+ * Package private class used for filter matching on signer key during filter
+ * expression evaluation in the permission implies method.
+ * 
+ * @Immutable
+ */
+final class SignerProperty {
+	private final Bundle	bundle;
+	private final String	pattern;
+
+	/**
+	 * String constructor used by the filter matching algorithm to construct
+	 * a SignerProperty from the attribute value in a filter expression.
+	 * 
+	 * @param pattern Attribute value in the filter expression.
+	 */
+	public SignerProperty(String pattern) {
+		this.pattern = pattern;
+		this.bundle = null;
+	}
+
+	/**
+	 * Used by the permission implies method to build the properties for a
+	 * filter match.
+	 * 
+	 * @param bundle The bundle whose signers are to be matched.
+	 */
+	SignerProperty(Bundle bundle) {
+		this.bundle = bundle;
+		this.pattern = null;
+	}
+
+	/**
+	 * Used by the filter matching algorithm. This methods does NOT satisfy
+	 * the normal equals contract. Since the class is only used in filter
+	 * expression evaluations, it only needs to support comparing an
+	 * instance created with a Bundle to an instance created with a pattern
+	 * string from the filter expression.
+	 * 
+	 * @param o SignerProperty to compare against.
+	 * @return true if the DN name chain matches the pattern.
+	 */
+	public boolean equals(Object o) {
+		if (!(o instanceof SignerProperty))
+			return false;
+		SignerProperty other = (SignerProperty) o;
+		Bundle matchBundle = bundle != null ? bundle : other.bundle;
+		String matchPattern = bundle != null ? other.pattern : pattern;
+		Map<X509Certificate, List<X509Certificate>> signers = matchBundle
+				.getSignerCertificates(Bundle.SIGNERS_TRUSTED);
+		for (List<X509Certificate> signerCerts : signers.values()) {
+			List<String> dnChain = new ArrayList<String>(signerCerts.size());
+			for (X509Certificate signerCert : signerCerts) {
+				dnChain.add(signerCert.getSubjectDN().getName());
+			}
+			try {
+				if (FrameworkUtil.matchDistinguishedNameChain(matchPattern,
+						dnChain)) {
+					return true;
+				}
+			}
+			catch (IllegalArgumentException e) {
+				continue; // bad pattern
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Since the equals method does not obey the general equals contract,
+	 * this method cannot generate hash codes which obey the equals
+	 * contract.
+	 */
+	public int hashCode() {
+		return 31;
+	}
+
+	/**
+	 * Check if the bundle is signed.
+	 * 
+	 * @return true if constructed with a bundle that is signed.
+	 */
+	boolean isBundleSigned() {
+		if (bundle == null) {
+			return false;
+		}
+		Map<X509Certificate, List<X509Certificate>> signers = bundle
+				.getSignerCertificates(Bundle.SIGNERS_TRUSTED);
+		return !signers.isEmpty();
+	}
+}
+
+/**
+ * Stores a set of {@code CoordinationPermission} permissions.
+ * 
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.security.PermissionCollection
+ */
+
+final class CoordinationPermissionCollection extends PermissionCollection {
+	static final long										serialVersionUID	= -3350758995234427603L;
+	/**
+	 * Collection of permissions.
+	 * 
+	 * @serial
+	 * @GuardedBy this
+	 */
+	private Map<String, CoordinationPermission>	permissions;
+
+	/**
+	 * Boolean saying if "*" is in the collection.
+	 * 
+	 * @serial
+	 * @GuardedBy this
+	 */
+	private boolean								all_allowed;
+
+	/**
+	 * Create an empty CoordinationPermissions object.
+	 */
+	public CoordinationPermissionCollection() {
+		permissions = new HashMap<String, CoordinationPermission>();
+		all_allowed = false;
+	}
+
+	/**
+	 * Adds a permission to this permission collection.
+	 * 
+	 * @param permission The {@code CoordinationPermission} object to add.
+	 * @throws IllegalArgumentException If the specified permission is not a
+	 *         {@code CoordinationPermission} instance or was constructed with a
+	 *         Bundle object.
+	 * @throws SecurityException If this
+	 *         {@code CoordinationPermissionCollection} object has been marked
+	 *         read-only.
+	 */
+	public void add(final Permission permission) {
+		if (!(permission instanceof CoordinationPermission)) {
+			throw new IllegalArgumentException("invalid permission: "
+					+ permission);
+		}
+		if (isReadOnly()) {
+			throw new SecurityException("attempt to add a Permission to a "
+					+ "readonly PermissionCollection");
+		}
+
+		final CoordinationPermission cp = (CoordinationPermission) permission;
+		if (cp.bundle != null) {
+			throw new IllegalArgumentException("cannot add to collection: "
+					+ cp);
+		}
+
+		final String name = cp.getName();
+		synchronized (this) {
+			Map<String, CoordinationPermission> pc = permissions;
+			final CoordinationPermission existing = pc.get(name);
+			if (existing != null) {
+				final int oldMask = existing.action_mask;
+				final int newMask = cp.action_mask;
+				if (oldMask != newMask) {
+					pc.put(name, new CoordinationPermission(existing.filter,
+							oldMask
+							| newMask));
+
+				}
+			}
+			else {
+				pc.put(name, cp);
+			}
+
+			if (!all_allowed) {
+				if (name.equals("*")) {
+					all_allowed = true;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Determines if the specified permissions implies the permissions expressed
+	 * in {@code permission}.
+	 * 
+	 * @param permission The Permission object to compare with this
+	 *        {@code CoordinationPermission} object.
+	 * @return {@code true} if {@code permission} is a proper subset of a
+	 *         permission in the set; {@code false} otherwise.
+	 */
+	public boolean implies(final Permission permission) {
+		if (!(permission instanceof CoordinationPermission)) {
+			return false;
+		}
+		final CoordinationPermission requested = (CoordinationPermission) permission;
+		/* if requested permission has a filter, then it is an invalid argument */
+		if (requested.filter != null) {
+			return false;
+		}
+
+		int effective = CoordinationPermission.ACTION_NONE;
+
+		Collection<CoordinationPermission> perms;
+		synchronized (this) {
+			Map<String, CoordinationPermission> pc = permissions;
+			/* short circuit if the "*" Permission was added */
+			if (all_allowed) {
+				CoordinationPermission cp = pc.get("*");
+				if (cp != null) {
+					effective |= cp.action_mask;
+					final int desired = requested.action_mask;
+					if ((effective & desired) == desired) {
+						return true;
+					}
+				}
+			}
+			perms = pc.values();
+		}
+		/* iterate one by one over filteredPermissions */
+		for (CoordinationPermission perm : perms) {
+			if (perm.implies0(requested, effective)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns an enumeration of all {@code CoordinationPermission} objects in
+	 * the container.
+	 * 
+	 * @return Enumeration of all {@code CoordinationPermission} objects.
+	 */
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		return Collections.enumeration(all);
+	}
+
+	/* serialization logic */
+	private static final ObjectStreamField[]	serialPersistentFields	= {
+			new ObjectStreamField("permissions", HashMap.class),
+			new ObjectStreamField("all_allowed", Boolean.TYPE)			};
+
+	private synchronized void writeObject(ObjectOutputStream out)
+			throws IOException {
+		ObjectOutputStream.PutField pfields = out.putFields();
+		pfields.put("permissions", permissions);
+		pfields.put("all_allowed", all_allowed);
+		out.writeFields();
+	}
+
+	private synchronized void readObject(java.io.ObjectInputStream in)
+			throws IOException, ClassNotFoundException {
+		ObjectInputStream.GetField gfields = in.readFields();
+		permissions = (HashMap<String, CoordinationPermission>) gfields.get(
+				"permissions", null);
+		all_allowed = gfields.get("all_allowed", false);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Coordinator.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Coordinator.java
new file mode 100644
index 0000000..4defe54
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Coordinator.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.coordinator;
+
+import java.util.Collection;
+
+/**
+ * A Coordinator service coordinates activities between different parties.
+ * 
+ * <p>
+ * A bundle can use the Coordinator service to create {@link Coordination}
+ * objects. Once a Coordination object is created, it can be
+ * {@link Coordination#push() pushed} on the thread local Coordination stack to
+ * be an implicit parameter as the current Coordination for calls to other
+ * parties, or it can be passed directly to other parties as an argument. The
+ * current Coordination, which is on the top of the current thread's thread
+ * local Coordination stack, can be obtained with {@link #peek()}.
+ * 
+ * <p>
+ * Any active Coordinations created by a bundle must be terminated when the
+ * bundle releases the Coordinator service. The Coordinator service must
+ * {@link Coordination#fail(Throwable) fail} these Coordinations with the
+ * {@link Coordination#RELEASED RELEASED} exception.
+ * 
+ * <p>
+ * A {@link Participant} can {@link Coordination#addParticipant(Participant)
+ * register} to participate in a Coordination and receive notification of the
+ * termination of the Coordination.
+ * 
+ * <p>
+ * The following example code shows a example usage of the Coordinator service.
+ * 
+ * <pre>
+ * void foo() {
+ *   Coordination c = coordinator.begin("work", 0);
+ *   try {
+ *     doWork();
+ *   } catch (Exception e) {
+ *     c.fail(e);
+ *   } finally {
+ *     c.end();
+ *   }
+ * }
+ * </pre>
+ * 
+ * In the {@code doWork} method, code can be called that requires notification
+ * of the termination of the Coordination. The {@code doWork} method can then
+ * register a Participant with the Coordination.
+ * 
+ * <pre>
+ * void doWork() {
+ *   if (coordinator.addParticipant(this)) {
+ *      beginWork();
+ *   } else {
+ *     beginWork();
+ *     finishWork();
+ *   }
+ * }
+ * 
+ * void ended(Coordination c) {
+ *   finishWork();
+ * }
+ * 
+ * void failed(Coordination c) {
+ *   undoWork();
+ * }
+ * </pre>
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 3c784ae44a1e93f4841d38f65894fef179f01a91 $
+ */
+public interface Coordinator {
+
+	/**
+	 * Create a new Coordination.
+	 * 
+	 * @param name The name of this coordination. The name does not have to be
+	 *        unique but must follow the {@code symbolic-name} syntax from the
+	 *        Core specification.
+	 * @param timeMillis Timeout in milliseconds. A value of 0 means no timeout.
+	 *        If the Coordination is not terminated within the timeout, the
+	 *        Coordinator service will {@link Coordination#fail(Throwable) fail}
+	 *        the Coordination with a {@link Coordination#TIMEOUT TIMEOUT}
+	 *        exception.
+	 * @return The new Coordination object.
+	 * @throws IllegalArgumentException If the specified name does not follow
+	 *         the {@code symbolic-name} syntax or the specified time is
+	 *         negative.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code CoordinationPermission[INITIATE]} for the specified name
+	 *         and creating bundle.
+	 */
+	Coordination create(String name, long timeMillis);
+
+	/**
+	 * Create a new Coordination and make it the {@link #peek() current
+	 * Coordination}.
+	 * 
+	 * <p>
+	 * This method does that same thing as calling {@link #create(String, long)
+	 * create(name, timeMillis)}.{@link Coordination#push() push()}
+	 * 
+	 * @param name The name of this coordination. The name does not have to be
+	 *        unique but must follow the {@code symbolic-name} syntax from the
+	 *        Core specification.
+	 * @param timeMillis Timeout in milliseconds. A value of 0 means no timeout.
+	 *        If the Coordination is not terminated within the timeout, the
+	 *        Coordinator service will {@link Coordination#fail(Throwable) fail}
+	 *        the Coordination with a {@link Coordination#TIMEOUT TIMEOUT}
+	 *        exception.
+	 * @return A new Coordination object
+	 * @throws IllegalArgumentException If the specified name does not follow
+	 *         the {@code symbolic-name} syntax or the specified time is
+	 *         negative.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code CoordinationPermission[INITIATE]} for the specified name
+	 *         and creating bundle.
+	 */
+	Coordination begin(String name, long timeMillis);
+
+	/**
+	 * Returns the current Coordination.
+	 * 
+	 * <p>
+	 * The current Coordination is the Coordination at the top of the thread
+	 * local Coordination stack. If the thread local Coordination stack is
+	 * empty, there is no current Coordination. Each Coordinator service
+	 * maintains thread local Coordination stacks.
+	 * 
+	 * <p>
+	 * This method does not alter the thread local Coordination stack.
+	 * 
+	 * @return The current Coordination or {@code null} if the thread local
+	 *         Coordination stack is empty.
+	 */
+	Coordination peek();
+
+	/**
+	 * Remove the current Coordination from the thread local Coordination stack.
+	 * 
+	 * <p>
+	 * The current Coordination is the Coordination at the top of the thread
+	 * local Coordination stack. If the thread local Coordination stack is
+	 * empty, there is no current Coordination. Each Coordinator service
+	 * maintains its own thread local Coordination stacks.
+	 * 
+	 * <p>
+	 * This method alters the thread local Coordination stack, if it is not
+	 * empty, by removing the Coordination at the top of the thread local
+	 * Coordination stack.
+	 * 
+	 * @return The Coordination that was the current Coordination or
+	 *         {@code null} if the thread local Coordination stack is empty.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code CoordinationPermission[INITIATE]} for the current
+	 *         Coordination.
+	 */
+	Coordination pop();
+
+	/**
+	 * Terminate the {@link #peek() current Coordination} as a failure with the
+	 * specified failure cause.
+	 * 
+	 * <p>
+	 * If there is no current Coordination, this method does nothing and returns
+	 * {@code false}.
+	 * 
+	 * <p>
+	 * Otherwise, this method returns the result from calling
+	 * {@link Coordination#fail(Throwable)} with the specified failure cause on
+	 * the current Coordination.
+	 * 
+	 * @param cause The failure cause. The failure cause must not be
+	 *        {@code null} .
+	 * @return {@code false} if there was no current Coordination, otherwise
+	 *         returns the result from calling
+	 *         {@link Coordination#fail(Throwable)} on the current Coordination.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code CoordinationPermission[PARTICIPATE]} for the current
+	 *         Coordination.
+	 * @see Coordination#fail(Throwable)
+	 */
+	boolean fail(Throwable cause);
+
+	/**
+	 * Register a Participant with the {@link #peek() current Coordination}.
+	 * 
+	 * <p>
+	 * If there is no current Coordination, this method does nothing and returns
+	 * {@code false}.
+	 * 
+	 * <p>
+	 * Otherwise, this method calls
+	 * {@link Coordination#addParticipant(Participant)} with the specified
+	 * Participant on the current Coordination and returns {@code true}.
+	 * 
+	 * @param participant The Participant to register with the current
+	 *        Coordination. The participant must not be {@code null}.
+	 * @return {@code false} if there was no current Coordination, otherwise
+	 *         returns {@code true}.
+	 * @throws CoordinationException If the Participant could not be registered
+	 *         with the current Coordination. This exception should normally not
+	 *         be caught by the caller but allowed to be caught by the initiator
+	 *         of this Coordination.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code CoordinationPermission[PARTICIPATE]} for the current
+	 *         Coordination.
+	 * @see Coordination#addParticipant(Participant)
+	 */
+	boolean addParticipant(Participant participant);
+
+	/**
+	 * Returns a snapshot of all active Coordinations.
+	 * 
+	 * <p>
+	 * Since Coordinations can be terminated at any time, Coordinations in the
+	 * returned collection can be terminated before the caller examines the
+	 * returned collection.
+	 * 
+	 * <p>
+	 * The returned collection must only contain the Coordinations for which the
+	 * caller has {@code CoordinationPermission[ADMIN]}.
+	 * 
+	 * @return A snapshot of all active Coordinations. If there are no active
+	 *         Coordinations, the returned list will be empty. The returned
+	 *         collection is the property of the caller and can be modified by
+	 *         the caller.
+	 */
+	Collection<Coordination> getCoordinations();
+
+	/**
+	 * Returns the Coordination with the specified id.
+	 * 
+	 * @param id The id of the requested Coordination.
+	 * @return A Coordination having with specified id or {@code null} if no
+	 *         Coordination with the specified id exists, the Coordination with
+	 *         the specified id is {@link Coordination#isTerminated()
+	 *         terminated} or the caller does not have
+	 *         {@code CoordinationPermission[ADMIN]} for the Coordination with
+	 *         the specified id.
+	 */
+	Coordination getCoordination(long id);
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Participant.java b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Participant.java
new file mode 100644
index 0000000..5eafbc2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.coordinator/src/org/osgi/service/coordinator/Participant.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.coordinator;
+
+/**
+ * A Participant participates in a Coordination.
+ * 
+ * <p>
+ * A Participant can participate in a Coordination by
+ * {@link Coordination#addParticipant(Participant) registering} itself with the
+ * Coordination. After successfully registering itself, the Participant is
+ * notified when the Coordination is terminated.
+ * 
+ * <p>
+ * If a Coordination terminates {@link Coordination#end() normally}, then all
+ * registered Participants are notified on their {@link #ended(Coordination)}
+ * method. If the Coordination terminates as a
+ * {@link Coordination#fail(Throwable) failure}, then all registered
+ * Participants are notified on their {@link #failed(Coordination)} method.
+ * 
+ * <p>
+ * Participants are required to be thread safe as notification can be made on
+ * any thread.
+ * 
+ * <p>
+ * A Participant can only be registered with a single active Coordination at a
+ * time. If a Participant is already registered with an active Coordination,
+ * attempts to register the Participation with another active Coordination will
+ * block until the Coordination the Participant is registered with terminates.
+ * Notice that in edge cases the notification to the Participant that the
+ * Coordination has terminated can happen before the registration method
+ * returns.
+ * 
+ * @ThreadSafe
+ * @version $Id: 52e3d84eb0cb8a8cc04c4ca787dde8db81c0140d $
+ */
+public interface Participant {
+	/**
+	 * Notification that a Coordination has terminated
+	 * {@link Coordination#end() normally}.
+	 * 
+	 * <p>
+	 * This Participant should finalize any work associated with the specified
+	 * Coordination.
+	 * 
+	 * @param coordination The Coordination that has terminated normally.
+	 * @throws Exception If this Participant throws an exception, the
+	 *         {@link Coordinator} service should log the exception. The
+	 *         {@link Coordination#end()} method which is notifying this
+	 *         Participant must continue notification of other registered
+	 *         Participants. When this is completed, the
+	 *         {@link Coordination#end()} method must throw a
+	 *         CoordinationException of type
+	 *         {@link CoordinationException#PARTIALLY_ENDED}.
+	 */
+	void ended(Coordination coordination) throws Exception;
+
+	/**
+	 * Notification that a Coordination has terminated as a
+	 * {@link Coordination#fail(Throwable) failure}.
+	 * 
+	 * <p>
+	 * This Participant should discard any work associated with the specified
+	 * Coordination.
+	 * 
+	 * @param coordination The Coordination that has terminated as a failure.
+	 * @throws Exception If this Participant throws an exception, the
+	 *         {@link Coordinator} service should log the exception. The
+	 *         {@link Coordination#fail(Throwable)} method which is notifying
+	 *         this Participant must continue notification of other registered
+	 *         Participants.
+	 */
+	void failed(Coordination coordination) throws Exception;
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.device/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.device/META-INF/MANIFEST.MF
index 3ea648e..121cd64 100644
--- a/eclipse/plugins/org.eclipse.equinox.device/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.device/META-INF/MANIFEST.MF
@@ -1,14 +1,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.device.Activator
 Bundle-SymbolicName: org.eclipse.equinox.device
 Bundle-Vendor: %bundleVendor
-Bundle-Copyright: %bundleCopyright
 Bundle-Localization: plugin
 Import-Service: org.osgi.service.log.LogService
 Import-Package: org.osgi.framework;version="1.2",
- org.osgi.service.device,
+ org.osgi.service.device;version="[1.1,1.2)",
  org.osgi.service.log;version="1.2",
  org.osgi.util.tracker,
  org.eclipse.osgi.util
diff --git a/eclipse/plugins/org.eclipse.equinox.device/plugin.properties b/eclipse/plugins/org.eclipse.equinox.device/plugin.properties
index ac3eb95..a7f4f8d 100644
--- a/eclipse/plugins/org.eclipse.equinox.device/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.device/plugin.properties
@@ -10,4 +10,3 @@
 ###############################################################################
 bundleVendor = Eclipse.org - Equinox
 bundleName = Device Access Service
-bundleCopyright = Copyright (c) IBM Corp. 1999, 2005
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/.settings/.api_filters b/eclipse/plugins/org.eclipse.equinox.ds/.settings/.api_filters
index ebd5b7c..f6e3924 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/.settings/.api_filters
+++ b/eclipse/plugins/org.eclipse.equinox.ds/.settings/.api_filters
@@ -8,17 +8,43 @@
 </filter>
 </resource>
 <resource path="src/org/apache/felix/scr/Reference.java" type="org.apache.felix.scr.Reference">
+<filter comment="Ignore apache API" id="403804204">
+<message_arguments>
+<message_argument value="org.apache.felix.scr.Reference"/>
+<message_argument value="getUpdatedMethodName()"/>
+</message_arguments>
+</filter>
 <filter id="1110441988">
 <message_arguments>
 <message_argument value="org.apache.felix.scr.Reference"/>
 </message_arguments>
 </filter>
+<filter comment="Ignore apache API" id="1209008130">
+<message_arguments>
+<message_argument value="1.4"/>
+<message_argument value="1.3"/>
+<message_argument value="getUpdatedMethodName()"/>
+</message_arguments>
+</filter>
 </resource>
 <resource path="src/org/apache/felix/scr/ScrService.java" type="org.apache.felix.scr.ScrService">
+<filter comment="Ignore apache API" id="403804204">
+<message_arguments>
+<message_argument value="org.apache.felix.scr.ScrService"/>
+<message_argument value="getComponents(String)"/>
+</message_arguments>
+</filter>
 <filter id="1110441988">
 <message_arguments>
 <message_argument value="org.apache.felix.scr.ScrService"/>
 </message_arguments>
 </filter>
+<filter comment="Ignore apache API" id="1209008130">
+<message_arguments>
+<message_argument value="1.5 (Apache Felix Declarative Services 1.4.2)"/>
+<message_argument value="1.3 (Apache Felix Declarative Services 1.4.2)"/>
+<message_argument value="getComponents(String)"/>
+</message_arguments>
+</filter>
 </resource>
 </component>
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
index 44733c9..b48e7c8 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.ds;singleton:=true
-Bundle-Version: 1.2.1.qualifier
+Bundle-Version: 1.3.0.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-Activator: org.eclipse.equinox.internal.ds.Activator
 Bundle-Description: This bundle provides support for OSGi 
@@ -21,10 +21,10 @@ Import-Package:
  org.eclipse.osgi.util,
  org.osgi.framework;version="1.3",
  org.osgi.service.cm;version="1.2",
- org.osgi.service.component;version="1.1",
+ org.osgi.service.component;version="[1.1,1.2)",
  org.osgi.service.log;version="1.3.0",
- org.osgi.service.metatype;version="1.1",
- org.osgi.util.tracker;version="1.3"
+ org.osgi.util.tracker;version="1.3",
+ org.apache.felix.scr; version="[1.6,1.7)"
 Export-Package: 
  org.eclipse.equinox.internal.ds;x-internal:=true,
  org.eclipse.equinox.internal.ds.impl;x-internal:=true,
@@ -34,7 +34,7 @@ Export-Package:
  org.eclipse.equinox.internal.util.xml;x-internal:=true,
  org.eclipse.equinox.internal.util.xml.impl;x-internal:=true,
  org.eclipse.equinox.internal.util.string;x-internal:=true,
- org.apache.felix.scr;version="1.2"
+ org.apache.felix.scr;version="1.6"
 Bundle-RequiredExecutionEnvironment: OSGi/Minimum-1.2,
  CDC-1.1/Foundation-1.1,
  J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/about.html b/eclipse/plugins/org.eclipse.equinox.ds/about.html
index 264e635..14b9be4 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/about.html
+++ b/eclipse/plugins/org.eclipse.equinox.ds/about.html
@@ -53,7 +53,7 @@ terms and conditions of use.</p>
 <p>Your use of the Felix SCR API code is subject to the terms and conditions of the Apache License, Version 2.0.  A copy of the license is contained
 in the file <a href="about_files/LICENSE-2.0.txt" target="_blank">LICENSE-2.0.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.</p>
 
-<p>The Apache attribution notice file <a href="about_files/NOTICE.TXT" target="_blank">NOTICE.TXT</a> is included with the Content in accordance with 4d of the Apache License, Version 2.0
+<p>The Apache attribution notice file <a href="about_files/NOTICE.txt" target="_blank">NOTICE.txt</a> is included with the Content in accordance with 4d of the Apache License, Version 2.0
 
 <p>The names "Felix" and "Apache Software Foundation" must not be used to endorse or promote products derived from this 
 software without prior written permission.  For written permission, please contact <a href="mailto:apache at apache.org">apache at apache.org</a>.</p>
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Component.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Component.java
index 5d72153..ea54064 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Component.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Component.java
@@ -80,9 +80,11 @@ public interface Component {
 	static final int STATE_REGISTERED = 32;
 
 	/**
-	 * The Component is a Component Factory ready to manage Component instances
-	 * from configuration data received from the Configuration Admin Service
-	 * (value is 64).
+	 * The Component is a Component Factory ready to create Component instances
+	 * with the <code>ComponentFactory.newInstance(Dictionary)</code> method
+	 * or (if enabled with the <code>ds.factory.enabled</code> configuration) to
+	 * manage Component instances from configuration data received from the
+	 * Configuration Admin Service (value is 64).
 	 */
 	static final int STATE_FACTORY = 64;
 
@@ -128,7 +130,9 @@ public interface Component {
 
 	/**
 	 * Returns the component ID of this component. This ID is managed by the
-	 * SCR.
+	 * SCR. If the component is not currently enabled the ID might not be
+	 * assigned to the component (yet) and this method will return -1 in this
+	 * case.
 	 */
 	long getId();
 
@@ -214,6 +218,8 @@ public interface Component {
 	 * Returns the <code>org.osgi.service.component.ComponentInstance</code>
 	 * representing this component or <code>null</code> if this component
 	 * is not been activated yet.
+	 *
+	 * @since 1.2
 	 */
 	ComponentInstance getComponentInstance();
 
@@ -224,6 +230,8 @@ public interface Component {
 	 * This method never returns <code>null</code>, that is, if this method is
 	 * not declared in the component descriptor this method returns the
 	 * default value <i>activate</i>.
+	 *
+	 * @since 1.2
 	 */
 	String getActivate();
 
@@ -234,6 +242,8 @@ public interface Component {
 	 * <p>
 	 * For a component declared in a Declarative Services 1.0 descriptor, this
 	 * method always returns <code>false</code>.
+	 *
+	 * @since 1.2
 	 */
 	boolean isActivateDeclared();
 
@@ -244,6 +254,8 @@ public interface Component {
 	 * This method never returns <code>null</code>, that is, if this method is
 	 * not declared in the component descriptor this method returns the
 	 * default value <i>deactivate</i>.
+	 *
+	 * @since 1.2
 	 */
 	String getDeactivate();
 
@@ -254,6 +266,8 @@ public interface Component {
 	 * <p>
 	 * For a component declared in a Declarative Services 1.0 descriptor, this
 	 * method always returns <code>false</code>.
+	 *
+	 * @since 1.2
 	 */
 	boolean isDeactivateDeclared();
 
@@ -264,6 +278,8 @@ public interface Component {
 	 * <p>
 	 * For a component declared in a Declarative Services 1.0 descriptor, this
 	 * method always returns <code>null</code>.
+	 *
+	 * @since 1.2
 	 */
 	String getModified();
 
@@ -280,7 +296,7 @@ public interface Component {
 	 * <dd>Configuration from the Configuration Admin service is supplied to
 	 * the component if available. Otherwise the component is activated without
 	 * Configuration Admin configuration. This is the default value reflecting
-	 * the behaviour of Declarative Services 1.0</dd>
+	 * the behavior of Declarative Services 1.0</dd>
 	 * <dt>require</dt>
 	 * <dd>Configuration is required. The component remains unsatisfied until
 	 * configuration is available from the Configuration Admin service.</dd>
@@ -288,6 +304,8 @@ public interface Component {
 	 * <dd>Configuration is ignored. No Configuration Admin service
 	 * configuration is supplied to the component.</dd>
 	 * </dl>
+	 *
+	 * @since 1.2
 	 */
 	String getConfigurationPolicy();
 
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Reference.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Reference.java
index b20f667..786d4f0 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Reference.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/Reference.java
@@ -103,4 +103,17 @@ public interface Reference {
 	 */
 	String getUnbindMethodName();
 
+	/**
+	 * Returns the name of the method called if a bound service updates its
+	 * service registration properties or <code>null</code> if no such method
+	 * is configured. This method provides access to the <code>updated</code>
+	 * attribute of the <code>reference</code> element.
+	 * <p>
+	 * For a component declared in a Declarative Services 1.0 and 1.1
+	 * descriptor, this method always returns <code>null</code>.
+	 *
+	 * @since 1.4
+	 */
+	String getUpdatedMethodName();
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/ScrService.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/ScrService.java
index 71fa155..385b2d1 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/ScrService.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/ScrService.java
@@ -50,6 +50,23 @@ public interface ScrService {
 	Component getComponent(long componentId);
 
 	/**
+	 * Returns the components whose <code>component.name</code> matches the
+	 * given <code>componentName</code> or <code>null</code> if no component
+	 * with the given name is currently managed.
+	 * <p>
+	 * If the component name refers to a component factory component or a
+	 * component configured with multiple factory configurations this method
+	 * returns multiple component instances.
+	 *
+	 * @param componentName The name of the component to return
+	 *
+	 * @return The indicated components or <code>null</code> if no such
+	 *      component exists.
+	 * @since 1.5 (Apache Felix Declarative Services 1.4.2)
+	 */
+	Component[] getComponents(String componentName);
+
+	/**
 	 * Returns an array of all components managed by this SCR instance on
 	 * behalf of the given bundle. The components are returned in ascending
 	 * order of their component.id. If there are no components managed by the
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/package.html b/eclipse/plugins/org.eclipse.equinox.ds/src/org/apache/felix/scr/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java
index 95cbe47..add5e01 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/CircularityException.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/CircularityException.java
index 9073f4b..094a2ed 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/CircularityException.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/CircularityException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ComponentStorage.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ComponentStorage.java
index 0f6dd69..7993524 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ComponentStorage.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ComponentStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2011 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -14,10 +14,13 @@ package org.eclipse.equinox.internal.ds;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.*;
+import java.util.Enumeration;
+import java.util.Vector;
 import org.eclipse.equinox.internal.ds.model.DeclarationParser;
+import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.Bundle;
+import org.osgi.service.component.ComponentConstants;
 import org.osgi.service.log.LogService;
 
 /**
@@ -52,13 +55,16 @@ public abstract class ComponentStorage {
 
 	protected Vector parseXMLDeclaration(Bundle bundle, String dsHeader) throws Exception {
 		Vector components = new Vector();
-		if (dsHeader != null) {
-			StringTokenizer tok = new StringTokenizer(dsHeader, ","); //$NON-NLS-1$
-			// the parser is not thread safe!!!
-			synchronized (parser) {
-				// process all definition file
-				while (tok.hasMoreElements()) {
-					String definitionFile = tok.nextToken().trim();
+		if (dsHeader == null)
+			return components;
+		ManifestElement[] elements = ManifestElement.parseHeader(ComponentConstants.SERVICE_COMPONENT, dsHeader);
+		// the parser is not thread safe!!!
+		synchronized (parser) {
+			// process all definition file
+			for (int i = 0; i < elements.length; i++) {
+				String[] definitionFiles = elements[i].getValueComponents();
+				for (int j = 0; j < definitionFiles.length; j++) {
+					String definitionFile = definitionFiles[j];
 					int ind = definitionFile.lastIndexOf('/');
 					String path = ind != -1 ? definitionFile.substring(0, ind) : "/"; //$NON-NLS-1$
 					InputStream is = null;
@@ -98,15 +104,14 @@ public abstract class ComponentStorage {
 								is.close();
 							}
 						}
-					}
-				} // end while
-
-				components = parser.components;
-				// make sure the clean-up the parser cache, for the next bundle to
-				// work properly!!!
-				parser.components = null;
-			}
+					} // end while
+				} // end for definitionFiles
+			} // end for elements
 
+			components = parser.components;
+			// make sure the clean-up the parser cache, for the next bundle to
+			// work properly!!!
+			parser.components = null;
 		}
 		return components;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java
index 9127d65..16c93b6 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/InstanceProcess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Messages.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Messages.java
index 531b6c0..bbc3c0e 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Reference.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Reference.java
index d32ddbb..c38adb8 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Reference.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Reference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -30,6 +30,10 @@ import org.osgi.service.log.LogService;
  * @author Stoyan Boshev
  * @author Pavlin Dobrev
  */
+/**
+ * @author stoyan
+ *
+ */
 public final class Reference implements org.apache.felix.scr.Reference {
 
 	public ComponentReference reference;
@@ -456,4 +460,12 @@ public final class Reference implements org.apache.felix.scr.Reference {
 		return policy == ComponentReference.POLICY_STATIC;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.apache.felix.scr.Reference#getUpdatedMethodName()
+	 */
+	public String getUpdatedMethodName() {
+		// DS specification does not specify this method yet
+		return null;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java
index 45d5979..cdcb43f 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/Resolver.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRCommandProvider.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRCommandProvider.java
index 3713b2b..5598a4a 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRCommandProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRCommandProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2011 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -9,10 +9,15 @@
  * Contributors:
  *    ProSyst Software GmbH - initial API and implementation
  *    Simon Archer		 	- bug.id = 288783
+ *    Lazar Kirchev		 	- bug.id = 320377
  *******************************************************************************/
 package org.eclipse.equinox.internal.ds;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
 import java.util.*;
+import org.eclipse.equinox.internal.ds.impl.ComponentInstanceImpl;
 import org.eclipse.equinox.internal.ds.model.*;
 import org.eclipse.osgi.framework.console.CommandInterpreter;
 import org.eclipse.osgi.framework.console.CommandProvider;
@@ -40,18 +45,41 @@ public class SCRCommandProvider implements CommandProvider {
 	}
 
 	public String getHelp() {
+		return getHelp(null);
+	}
+
+	/*
+	 * This method either returns the help message for a particular command, 
+	 * or returns the help messages for all commands (if commandName is null)
+	 */
+	private String getHelp(String commandName) {
+		boolean all = commandName == null;
 		StringBuffer res = new StringBuffer(1000);
-		res.append("---").append(Messages.SCR).append("---\n"); //$NON-NLS-1$ //$NON-NLS-2$
-		res.append("\tlist/ls [-c] [bundle id] - ").append(Messages.LIST_ALL_COMPONENTS); //$NON-NLS-1$
-		res.append("\n\t\t\t").append(Messages.LIST_ALL_BUNDLE_COMPONENTS); //$NON-NLS-1$
-		res.append("\n\tcomponent/comp <component id> - ").append(Messages.PRINT_COMPONENT_INFO); //$NON-NLS-1$
-		res.append("\n\t\t\t<component id> - ").append(Messages.COMPONENT_ID_DEFINIED_BY_LIST_COMMAND); //$NON-NLS-1$
-		res.append("\n\tenable/en <component id> - ").append(Messages.ENABLE_COMPONENT); //$NON-NLS-1$
-		res.append("\n\t\t\t<component id> - ").append(Messages.COMPONENT_ID_DEFINIED_BY_LIST_COMMAND); //$NON-NLS-1$
-		res.append("\n\tdisable/dis <component id> - ").append(Messages.DISABLE_COMPONENT); //$NON-NLS-1$
-		res.append("\n\t\t\t<component id> - ").append(Messages.COMPONENT_ID_DEFINIED_BY_LIST_COMMAND); //$NON-NLS-1$
-		res.append("\n\tenableAll/enAll [bundle id] - ").append(Messages.ENABLE_ALL_COMPONENTS); //$NON-NLS-1$
-		res.append("\n\tdisableAll/disAll [bundle id] - ").append(Messages.DISABLE_ALL_COMPONENTS).append("\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (all) {
+			res.append("---").append(Messages.SCR).append("---\r\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (all || "list".equals(commandName) || "ls".equals(commandName)) { //$NON-NLS-1$ //$NON-NLS-2$
+			res.append("\tlist/ls [-c] [bundle id] - ").append(Messages.LIST_ALL_COMPONENTS); //$NON-NLS-1$
+			res.append("\r\n\t\t\t").append(Messages.LIST_ALL_BUNDLE_COMPONENTS); //$NON-NLS-1$
+		}
+		if (all || "component".equals(commandName) || "comp".equals(commandName)) { //$NON-NLS-1$ //$NON-NLS-2$
+			res.append("\r\n\tcomponent/comp <component id> - ").append(Messages.PRINT_COMPONENT_INFO); //$NON-NLS-1$
+			res.append("\r\n\t\t\t<component id> - ").append(Messages.COMPONENT_ID_DEFINIED_BY_LIST_COMMAND); //$NON-NLS-1$
+		}
+		if (all || "enable".equals(commandName) || "en".equals(commandName)) { //$NON-NLS-1$ //$NON-NLS-2$
+			res.append("\r\n\tenable/en <component id> - ").append(Messages.ENABLE_COMPONENT); //$NON-NLS-1$
+			res.append("\r\n\t\t\t<component id> - ").append(Messages.COMPONENT_ID_DEFINIED_BY_LIST_COMMAND); //$NON-NLS-1$
+		}
+		if (all || "disable".equals(commandName) || "dis".equals(commandName)) { //$NON-NLS-1$ //$NON-NLS-2$
+			res.append("\n\tdisable/dis <component id> - ").append(Messages.DISABLE_COMPONENT); //$NON-NLS-1$
+			res.append("\n\t\t\t<component id> - ").append(Messages.COMPONENT_ID_DEFINIED_BY_LIST_COMMAND); //$NON-NLS-1$
+		}
+		if (all || "enableAll".equals(commandName) || "enAll".equals(commandName)) { //$NON-NLS-1$ //$NON-NLS-2$
+			res.append("\r\n\tenableAll/enAll [bundle id] - ").append(Messages.ENABLE_ALL_COMPONENTS); //$NON-NLS-1$
+		}
+		if (all || "disableAll".equals(commandName) || "disAll".equals(commandName)) { //$NON-NLS-1$ //$NON-NLS-2$
+			res.append("\n\tdisableAll/disAll [bundle id] - ").append(Messages.DISABLE_ALL_COMPONENTS).append("\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		return res.toString();
 	}
 
@@ -234,6 +262,25 @@ public class SCRCommandProvider implements CommandProvider {
 		_disableAll(intp);
 	}
 
+	/**
+	 * Handles the help command
+	 * 
+	 * @param intp
+	 * @return description for a particular command or false if there is no command with the specified name
+	 */
+	public Object _help(CommandInterpreter intp) {
+		String commandName = intp.nextArgument();
+		if (commandName == null) {
+			return Boolean.FALSE;
+		}
+		String help = getHelp(commandName);
+
+		if (help.length() > 0) {
+			return help;
+		}
+		return Boolean.FALSE;
+	}
+
 	private String[] getParams(CommandInterpreter intp) {
 		Vector arguments = new Vector();
 		String arg = intp.nextArgument();
@@ -355,8 +402,29 @@ public class SCRCommandProvider implements CommandProvider {
 			intp.println();
 		}
 		intp.println("    Instances:"); //$NON-NLS-1$
-		for (int i = 0; i < scp.instances.size(); i++) {
-			intp.println("      " + scp.instances.elementAt(i)); //$NON-NLS-1$
+		if (scp.instances.size() > 0) {
+			ComponentInstanceImpl instance = null;
+			for (int i = 0; i < scp.instances.size(); i++) {
+				instance = (ComponentInstanceImpl) scp.instances.elementAt(i);
+				intp.println("      " + instance); //$NON-NLS-1$
+				if (instance.bindedServices.size() > 0) {
+					intp.println("    	Bound References:"); //$NON-NLS-1$
+					Enumeration refs = instance.bindedServices.keys();
+					ServiceReference sr = null;
+					while (refs.hasMoreElements()) {
+						sr = (ServiceReference) refs.nextElement();
+						Object interfaces = sr.getProperty(Constants.OBJECTCLASS);
+						intp.println("        " + SCRUtil.getStringRepresentation(interfaces)); //$NON-NLS-1$
+						intp.println("      		-> " + instance.bindedServices.get(sr)); //$NON-NLS-1$
+					}
+				}
+			}
+		} else {
+			// there are no instances either because the references are not satisfied or because some runtime issues appear; for example the bind method was not found in the class
+			String issues = scp.serviceComponent.getComponentIssues();
+			if (issues != null) {
+				intp.println("    No instances were created because: " + issues); //$NON-NLS-1$	
+			}
 		}
 	}
 
@@ -520,17 +588,21 @@ public class SCRCommandProvider implements CommandProvider {
 		} else {
 			intp.println(Messages.ALL_COMPONENTS);
 		}
-		intp.print("ID"); //$NON-NLS-1$
-		if (completeInfo) {
-			intp.println(Messages.COMPONENT_DETAILS);
-		} else {
-			intp.print(Messages.STATE);
-			intp.print(Messages.COMPONENT_NAME);
-			intp.println(Messages.LOCATED_IN_BUNDLE);
+
+		if (b == null || scrManager.bundleToServiceComponents != null && scrManager.bundleToServiceComponents.get(b) != null) {
+			intp.print("ID"); //$NON-NLS-1$
+			if (completeInfo) {
+				intp.println(Messages.COMPONENT_DETAILS);
+			} else {
+				intp.print(Messages.STATE);
+				intp.print(Messages.COMPONENT_NAME);
+				intp.println(Messages.LOCATED_IN_BUNDLE);
+			}
 		}
 
 		if (b != null) {
 			if (scrManager.bundleToServiceComponents != null) {
+
 				Vector components = (Vector) scrManager.bundleToServiceComponents.get(b);
 				if (components != null) {
 					for (int i = 0; i < components.size(); i++) {
@@ -554,6 +626,29 @@ public class SCRCommandProvider implements CommandProvider {
 						}
 					}
 				}
+
+				// check the bundle for issues during components resolving
+				// first check for service component header in this bundle
+				String dsHeader = null;
+				Dictionary allHeaders = b.getHeaders(""); //$NON-NLS-1$
+
+				if (!((dsHeader = (String) allHeaders.get(ComponentConstants.SERVICE_COMPONENT)) != null)) {
+					// no component descriptions in this bundle
+					intp.println("No ServiceComponent header was found in bundle " + b.toString()); //$NON-NLS-1$
+					return;
+				}
+
+				// second check if the ds xml is correct
+				Vector issues = parseXMLDeclaration(b, dsHeader);
+				if (issues.size() > 0) {
+					intp.println();
+					intp.println("Issues encountered when parsing components xml declarations"); //$NON-NLS-1$
+					for (int i = 0; i < issues.size(); i++) {
+						intp.println("\t" + issues.get(i)); //$NON-NLS-1$
+						intp.println();
+					}
+				}
+
 			}
 
 		} else {
@@ -622,6 +717,69 @@ public class SCRCommandProvider implements CommandProvider {
 		return curID++;
 	}
 
+	protected Vector parseXMLDeclaration(Bundle bundle, String dsHeader) {
+		Vector componentsIssues = new Vector();
+		Vector components = new Vector();
+		try {
+			if (dsHeader != null) {
+				StringTokenizer tok = new StringTokenizer(dsHeader, ","); //$NON-NLS-1$
+				DeclarationParser parser = new DeclarationParser(true);
+				// process all definition file
+				while (tok.hasMoreElements()) {
+					String definitionFile = tok.nextToken().trim();
+					int ind = definitionFile.lastIndexOf('/');
+					String path = ind != -1 ? definitionFile.substring(0, ind) : "/"; //$NON-NLS-1$
+					InputStream is = null;
+
+					Enumeration urls = bundle.findEntries(path, ind != -1 ? definitionFile.substring(ind + 1) : definitionFile, false);
+					if (urls == null || !urls.hasMoreElements()) {
+						componentsIssues.add(NLS.bind(Messages.COMPONENT_XML_NOT_FOUND, bundle.getSymbolicName(), definitionFile));
+						continue;
+					}
+
+					// illegal components are ignored, but framework event is posted for
+					// them; however, it will continue and try to load any legal
+					// definitions
+					URL url;
+					while (urls.hasMoreElements()) {
+						url = (URL) urls.nextElement();
+						if (Activator.DEBUG) {
+							Activator.log.debug("ComponentStorage.parseXMLDeclaration(): loading " + url.toString(), null); //$NON-NLS-1$
+						}
+						try {
+							is = url.openStream();
+							if (is == null) {
+								componentsIssues.add(NLS.bind(Messages.CANT_OPEN_STREAM_TO_COMPONENT_XML, url));
+							} else {
+								try {
+									parser.parse(is, bundle, components, url.toString());
+								} catch (Exception e) {
+									componentsIssues.add(e.getMessage());
+								}
+							}
+						} catch (IOException ie) {
+							componentsIssues.add(NLS.bind(Messages.ERROR_OPENING_COMP_XML, url) + "\n\t" + ie); //$NON-NLS-1$
+						} catch (Throwable t) {
+							componentsIssues.add(NLS.bind(Messages.ILLEGAL_DEFINITION_FILE, url) + "\n\t" + t); //$NON-NLS-1$
+						} finally {
+							if (is != null) {
+								is.close();
+							}
+						}
+					}
+				} // end while
+
+				components = parser.components;
+				// make sure the clean-up the parser cache, for the next bundle to
+				// work properly!!!
+				parser.components = null;
+			}
+		} catch (Exception e) {
+			componentsIssues.add("Exception [" + e + "] while parsing DS xml definition."); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return componentsIssues;
+	}
+
 	private static class ComponentRef {
 		////the ID of the bundle holding this service component
 		long bid;
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRManager.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRManager.java
index 209d49b..f53b965 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -895,7 +895,7 @@ public class SCRManager implements ServiceListener, SynchronousBundleListener, C
 		return null;
 	}
 
-	public Component[] getComponent(Bundle bundle) {
+	public Component[] getComponents(Bundle bundle) {
 		if (bundleToServiceComponents == null || bundleToServiceComponents.isEmpty()) {
 			// no components found till now
 			return null;
@@ -921,4 +921,37 @@ public class SCRManager implements ServiceListener, SynchronousBundleListener, C
 		}
 		return null;
 	}
+
+	public Component[] getComponents(String componentName) {
+		if (bundleToServiceComponents == null || bundleToServiceComponents.isEmpty()) {
+			// no components found till now
+			return null;
+		}
+		Vector result = new Vector();
+		Enumeration en = bundleToServiceComponents.keys();
+		while (en.hasMoreElements()) {
+			Bundle b = (Bundle) en.nextElement();
+			Vector serviceComponents = (Vector) bundleToServiceComponents.get(b);
+			for (int i = 0; i < serviceComponents.size(); i++) {
+				ServiceComponent sc = (ServiceComponent) serviceComponents.elementAt(i);
+				if (sc.getName().equals(componentName)) {
+					if (sc.componentProps != null && !sc.componentProps.isEmpty()) {
+						// add the created runtime components props
+						result.addAll(sc.componentProps);
+					} else {
+						// add the declared component itself
+						result.add(sc);
+					}
+					break;
+				}
+			}
+		}
+		if (!result.isEmpty()) {
+			Component[] res = new Component[result.size()];
+			result.copyInto(res);
+			return res;
+		}
+		return null;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRUtil.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRUtil.java
index 0d3fd86..5315dbf 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRmessages.properties b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRmessages.properties
index ad7c639..2ab77c6 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRmessages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/SCRmessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 1997-2009 by ProSyst Software GmbH
+# Copyright (c) 1997, 2010 by ProSyst Software GmbH
 # http://www.prosyst.com
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ScrServiceImpl.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ScrServiceImpl.java
index dc51f3a..9632568 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ScrServiceImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ScrServiceImpl.java
@@ -35,7 +35,7 @@ public class ScrServiceImpl implements ScrService {
 
 	public Component[] getComponents(Bundle bundle) {
 		if (!disposed && InstanceProcess.resolver != null) {
-			return InstanceProcess.resolver.mgr.getComponent(bundle);
+			return InstanceProcess.resolver.mgr.getComponents(bundle);
 		}
 		return null;
 	}
@@ -44,4 +44,11 @@ public class ScrServiceImpl implements ScrService {
 		disposed = true;
 	}
 
+	public Component[] getComponents(String componentName) {
+		if (!disposed && InstanceProcess.resolver != null) {
+			return InstanceProcess.resolver.mgr.getComponents(componentName);
+		}
+		return null;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ServiceReg.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ServiceReg.java
index ee20284..053ade2 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ServiceReg.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/ServiceReg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkPerformer.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkPerformer.java
index c4197c1..0a1791b 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkPerformer.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkPerformer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkThread.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkThread.java
index fdc9971..ea50ef3 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkThread.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/WorkThread.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentContextImpl.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentContextImpl.java
index 4885649..5862042 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentContextImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentContextImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2011 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -12,7 +12,8 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.ds.impl;
 
-import java.util.*;
+import java.util.Dictionary;
+import java.util.Vector;
 import org.eclipse.equinox.internal.ds.*;
 import org.eclipse.equinox.internal.ds.model.*;
 import org.eclipse.osgi.util.NLS;
@@ -51,7 +52,7 @@ public class ComponentContextImpl implements ComponentContext {
 	 * @see org.osgi.service.component.ComponentContext#getProperties()
 	 */
 	public Dictionary getProperties() {
-		return (Dictionary) ((Hashtable) scp.getProperties()).clone();
+		return scp.getProperties();
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java
index 5f28eab..9a3d8e2 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentFactoryImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2011 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -58,7 +58,7 @@ public class ComponentFactoryImpl implements ComponentFactory {
 			}
 
 			// merge properties
-			Hashtable props = (Hashtable) ((Hashtable) sci.getProperties()).clone();
+			Hashtable props = new Hashtable((Map) sci.getProperties());
 			SCRUtil.copyTo(props, additionalProps);
 
 			// create a new SCP (adds to resolver scpEnabled list)
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentInstanceImpl.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentInstanceImpl.java
index 611ee0f..74477e0 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentInstanceImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ComponentInstanceImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ReadOnlyDictionary.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ReadOnlyDictionary.java
new file mode 100644
index 0000000..422739d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/impl/ReadOnlyDictionary.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 1997-2011 by ProSyst Software GmbH
+ * http://www.prosyst.com
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    ProSyst Software GmbH - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.ds.impl;
+
+import java.util.*;
+
+/**
+ * This is an utility class to provide a read-only dictionary.
+ * 
+ * @author Stoyan Boshev
+ */
+public class ReadOnlyDictionary extends Dictionary implements Map {
+
+	Map delegate;
+
+	/**
+	 * Creates a new ReadOnlyDictionary with initial set of properties
+	 * 
+	 * @param initialProps the initialProperties for this hashtable
+	 */
+	public ReadOnlyDictionary(Map initialProps) {
+		this.delegate = initialProps;
+	}
+
+	public void updateDelegate(Map newDelegate) {
+		this.delegate = newDelegate;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Dictionary#put(K, V)
+	 */
+	public Object put(Object key, Object value) {
+		// do not modify - this is read only
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Dictionary#remove(java.lang.Object)
+	 */
+	public Object remove(Object key) {
+		// do not modify - this is read only
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Dictionary#size()
+	 */
+	public int size() {
+		return delegate.size();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Dictionary#isEmpty()
+	 */
+	public boolean isEmpty() {
+		return delegate.isEmpty();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Dictionary#keys()
+	 */
+	public Enumeration keys() {
+		return Collections.enumeration(delegate.keySet());
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Dictionary#elements()
+	 */
+	public Enumeration elements() {
+		return Collections.enumeration(delegate.values());
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Dictionary#get(java.lang.Object)
+	 */
+	public Object get(Object key) {
+		return delegate.get(key);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Map#containsKey(java.lang.Object)
+	 */
+	public boolean containsKey(Object key) {
+		return delegate.containsKey(key);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Map#containsValue(java.lang.Object)
+	 */
+	public boolean containsValue(Object value) {
+		return delegate.containsValue(value);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Map#clear()
+	 */
+	public void clear() {
+		// do not modify - this is read only
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Map#putAll(java.util.Map)
+	 */
+	public void putAll(Map arg0) {
+		// do not modify - this is read only
+		throw new UnsupportedOperationException();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Map#values()
+	 */
+	public Collection values() {
+		return Collections.unmodifiableCollection(delegate.values());
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Map#keySet()
+	 */
+	public Set keySet() {
+		return Collections.unmodifiableSet(delegate.keySet());
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.Map#entrySet()
+	 */
+	public Set entrySet() {
+		return Collections.unmodifiableSet(delegate.entrySet());
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ComponentReference.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ComponentReference.java
index 7285442..6652973 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ComponentReference.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ComponentReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -10,12 +10,12 @@
  *    ProSyst Software GmbH - initial API and implementation
  *    Jeremy Volkman 		- bug.id = 182560
  *    Simon Archer 		    - bug.id = 223454
+ *    Lazar Kirchev		 	- bug.id = 320377
  *******************************************************************************/
 package org.eclipse.equinox.internal.ds.model;
 
 import java.io.*;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import java.lang.reflect.*;
 import java.util.*;
 import org.eclipse.equinox.internal.ds.*;
 import org.eclipse.equinox.internal.ds.impl.ComponentInstanceImpl;
@@ -233,6 +233,7 @@ public class ComponentReference implements Externalizable, org.apache.felix.scr.
 		}
 		buffer.append(')');
 		buffer.append(" is not accessible!"); //$NON-NLS-1$
+		component.componentIssues.add("Method [" + methodName + "]  is not accessible in " + componentInstance.getInstance().getClass());
 		appendDetails(buffer, reference);
 		String message = buffer.toString();
 		Activator.log(reference.reference.component.bc, LogService.LOG_ERROR, message, null);
@@ -245,6 +246,7 @@ public class ComponentReference implements Externalizable, org.apache.felix.scr.
 		buffer.append('(');
 		buffer.append("..."); //$NON-NLS-1$
 		buffer.append(')');
+		component.componentIssues.add("Method [" + methodName + "] was not found in " + componentInstance.getInstance().getClass());
 		appendDetails(buffer, reference);
 		String message = buffer.toString();
 		Activator.log(reference.reference.component.bc, LogService.LOG_ERROR, message, null);
@@ -284,6 +286,11 @@ public class ComponentReference implements Externalizable, org.apache.felix.scr.
 	private void logError(String message, Throwable t, Reference reference) {
 		StringBuffer buffer = createBuffer();
 		buffer.append(message);
+		String cause = t.toString();
+		if (t instanceof InvocationTargetException) {
+			cause = "The called method throws: " + t.getCause().toString();
+		}
+		component.componentIssues.add(message + " Root Cause [" + cause + "]");
 		appendDetails(buffer, reference);
 		Activator.log(reference.reference.component.bc, LogService.LOG_ERROR, buffer.toString(), t);
 	}
@@ -663,4 +670,12 @@ public class ComponentReference implements Externalizable, org.apache.felix.scr.
 		return policy == ComponentReference.POLICY_STATIC;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.apache.felix.scr.Reference#getUpdatedMethodName()
+	 */
+	public String getUpdatedMethodName() {
+		// DS specification does not specify this method yet
+		return null;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java
index 2c1e206..86444a8 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/DeclarationParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
  *
  * Contributors:
  *    ProSyst Software GmbH - initial API and implementation
+ *    Lazar Kirchev		 	- bug.id = 320377
  *******************************************************************************/
 package org.eclipse.equinox.internal.ds.model;
 
@@ -21,7 +22,6 @@ import org.eclipse.equinox.internal.util.xml.*;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
 import org.osgi.service.log.LogService;
-import org.osgi.service.metatype.AttributeDefinition;
 
 /**
  * Processes the parsing of the component description XMLs
@@ -72,8 +72,29 @@ public class DeclarationParser implements ExTagListener {
 	private static final String ATTR_BIND = "bind"; //$NON-NLS-1$
 	private static final String ATTR_UNBIND = "unbind"; //$NON-NLS-1$
 
+	/** Constant for String property type */
+	public static final int STRING = 1;
+	/** Constant for Long property type */
+	public static final int LONG = 2;
+	/** Constant for Integer property type */
+	public static final int INTEGER = 3;
+	/** Constant for Short property type */
+	public static final int SHORT = 4;
+	/** Constant for Char property type */
+	public static final int CHARACTER = 5;
+	/** Constant for Byte property type */
+	public static final int BYTE = 6;
+	/** Constant for Double property type */
+	public static final int DOUBLE = 7;
+	/** Constant for Float property type */
+	public static final int FLOAT = 8;
+	/** Constant for Boolean property type */
+	public static final int BOOLEAN = 11;
+
 	public Vector components;
 
+	private boolean throwErrors = false;
+
 	private Bundle bundle;
 	private BundleContext bc;
 	private ServiceComponent currentComponent;
@@ -83,6 +104,14 @@ public class DeclarationParser implements ExTagListener {
 	private boolean rootPassed = false;
 	private String currentURL = null;
 
+	public DeclarationParser() {
+		this(false);
+	}
+
+	public DeclarationParser(boolean toThrowErrors) {
+		this.throwErrors = toThrowErrors;
+	}
+
 	/**
 	 * This method parses an XML file read from the given stream and converts
 	 * the components definitions into a java object.
@@ -134,8 +163,14 @@ public class DeclarationParser implements ExTagListener {
 			if (Activator.DEBUG) {
 				Activator.log.debug("[SCR] Tracing the last exception", iae); //$NON-NLS-1$
 			}
+			if (throwErrors) {
+				throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_START_TAG, currentURL, bundle) + iae.getMessage(), iae);
+			}
 		} catch (Throwable e) {
 			Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_START_TAG, currentURL, bundle), e);
+			if (throwErrors) {
+				throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_START_TAG, currentURL, bundle) + e.getMessage(), e);
+			}
 		} finally {
 			if (!rootPassed) {
 				rootPassed = true;
@@ -197,10 +232,16 @@ public class DeclarationParser implements ExTagListener {
 			if (Activator.DEBUG) {
 				Activator.log.debug("[SCR] Tracing the last exception", iae); //$NON-NLS-1$
 			}
+			if (throwErrors) {
+				throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_END_TAG, currentURL, bundle) + iae.getMessage(), iae);
+			}
 		} catch (Throwable e) {
 			currentComponent = null;
 			closeTag = null;
 			Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_END_TAG, currentURL, bundle), e);
+			if (throwErrors) {
+				throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_END_TAG, currentURL, bundle) + e.getMessage(), e);
+			}
 		}
 	}
 
@@ -247,7 +288,7 @@ public class DeclarationParser implements ExTagListener {
 				throw e;
 			}
 		} // if null - default cardinality is already initialized in
-		// constructor
+			// constructor
 
 		String policyS = tag.getAttribute(ATTR_POLICY);
 		int policy = ComponentReference.POLICY_STATIC; // default
@@ -358,23 +399,23 @@ public class DeclarationParser implements ExTagListener {
 			String type = tag.getAttribute(ATTR_TYPE);
 			int mtType;
 			if (type == null || "String".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.STRING;
+				mtType = STRING;
 			} else if ("Boolean".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.BOOLEAN;
+				mtType = BOOLEAN;
 			} else if ("Integer".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.INTEGER;
+				mtType = INTEGER;
 			} else if ("Long".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.LONG;
+				mtType = LONG;
 			} else if ("Char".equals(type) || "Character".equals(type)) { //$NON-NLS-1$ //$NON-NLS-2$
-				mtType = AttributeDefinition.CHARACTER;
+				mtType = CHARACTER;
 			} else if ("Double".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.DOUBLE;
+				mtType = DOUBLE;
 			} else if ("Float".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.FLOAT;
+				mtType = FLOAT;
 			} else if ("Byte".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.BYTE;
+				mtType = BYTE;
 			} else if ("Short".equals(type)) { //$NON-NLS-1$
-				mtType = AttributeDefinition.SHORT;
+				mtType = SHORT;
 			} else {
 				IllegalArgumentException e = new IllegalArgumentException(NLS.bind(Messages.INVALID_PROPERTY_TYPE, type, Integer.toString(tag.getLine())));
 				throw e;
@@ -416,9 +457,15 @@ public class DeclarationParser implements ExTagListener {
 			if (Activator.DEBUG) {
 				Activator.log.debug("[SCR] Tracing the last exception", iae); //$NON-NLS-1$
 			}
+			if (throwErrors) {
+				throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_PROPERTY, name, currentURL) + iae.getMessage(), iae);
+			}
 		} catch (Throwable e) {
 			//logging unrecognized exception
 			Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, NLS.bind(Messages.ERROR_PROCESSING_PROPERTY, name, currentURL), e);
+			if (throwErrors) {
+				throw new RuntimeException(NLS.bind(Messages.ERROR_PROCESSING_PROPERTY, name, currentURL) + e.getMessage(), e);
+			}
 		}
 	}
 
@@ -451,6 +498,9 @@ public class DeclarationParser implements ExTagListener {
 				invalid = false;
 			} catch (IOException e) {
 				Activator.log(bundle.getBundleContext(), LogService.LOG_ERROR, Messages.ERROR_LOADING_PROPERTIES_FILE, e);
+				if (throwErrors) {
+					throw new RuntimeException(Messages.ERROR_LOADING_PROPERTIES_FILE + e, e);
+				}
 			}
 		}
 
@@ -553,62 +603,53 @@ public class DeclarationParser implements ExTagListener {
 	}
 
 	/**
-	 * Creates an object from a <code>String</code> value and a type, as
-	 * returned by the corresponding {@link AttributeDefinition#getType()}
-	 * method.
-	 * 
-	 * @param string
-	 *            The <code>String</code> value representation of the object.
-	 * @param syntax
-	 *            The object's type as defined by
-	 *            <code>AttributeDefinition</code>.
-	 * 
-	 * @return an Object, which is of a type, corresponding to the given, and
-	 *         value - got from the string parameter. E.g. if syntax is equal to
-	 *         <code>AttributeDefinition.INTEGER</code> and string is "1",
-	 *         then the value returned should be Integer("1").
-	 * 
-	 * @exception IllegalArgumentException
-	 *                if a proper object can not be created due to
-	 *                incompatibility of syntax and value or if the parameters
-	 *                are not correct (e.g. syntax is not a valid
-	 *                <code>AttributeDefinition</code> constant).
+	 * Creates an object from a <code>String</code> value and a type, as defined by the objectType parameter.
+	 *
+	 * @param string The <code>String</code> value representation of the object. 
+	 * @param objectType Defines the type of the object to be generated
+	 *
+	 * @return an Object, which is of a type, corresponding to the given,
+	 * and value - got from the string parameter.
+	 *
+	 * @exception IllegalArgumentException if a proper object can not be created 
+	 * due to incompatibility of objectType and value or if the parameters are not correct
+	 * (e.g. objectType is not a valid constant).
 	 */
-	public static Object makeObject(String string, int syntax) throws IllegalArgumentException {
+	public static Object makeObject(String string, int objectType) throws IllegalArgumentException {
 		try {
-			switch (syntax) {
-				case AttributeDefinition.STRING : {
+			switch (objectType) {
+				case STRING : {
 					return string;
 				}
-				case AttributeDefinition.INTEGER : {
+				case INTEGER : {
 					return new Integer(string);
 				}
-				case AttributeDefinition.LONG : {
+				case LONG : {
 					return new Long(string);
 				}
-				case AttributeDefinition.FLOAT : {
+				case FLOAT : {
 					return new Float(string);
 				}
-				case AttributeDefinition.DOUBLE : {
+				case DOUBLE : {
 					return new Double(string);
 				}
-				case AttributeDefinition.BYTE : {
+				case BYTE : {
 					return new Byte(string);
 				}
-				case AttributeDefinition.SHORT : {
+				case SHORT : {
 					return new Short(string);
 				}
-				case AttributeDefinition.CHARACTER : {
+				case CHARACTER : {
 					if (string.length() == 0) {
 						throw new IllegalArgumentException(Messages.MISSING_CHARACTER);
 					}
 					return new Character(string.charAt(0));
 				}
-				case AttributeDefinition.BOOLEAN : {
+				case BOOLEAN : {
 					return Boolean.valueOf(string);
 				}
 				default : {
-					throw new IllegalArgumentException(NLS.bind(Messages.UNSUPPORTED_TYPE, String.valueOf(syntax)));
+					throw new IllegalArgumentException(NLS.bind(Messages.UNSUPPORTED_TYPE, String.valueOf(objectType)));
 				}
 			}
 		} catch (NumberFormatException ex) {
@@ -617,80 +658,72 @@ public class DeclarationParser implements ExTagListener {
 	}
 
 	/**
-	 * Makes an array from the string array value and the syntax.
-	 * 
-	 * @param array
-	 *            <code>String</code> array representation of an array, which
-	 *            follows the rules defined by <code>AttributeDefinition</code>.
-	 * @param syntax
-	 *            The array's type as defined by
-	 *            <code>AttributeDefinition</code>.
-	 * 
-	 * @return an arary of primitives or objects, whose component type
-	 *         corresponds to <code>syntax</code>, and value build from the
-	 *         string array passed.
-	 * 
-	 * @exception IllegalArgumentException
-	 *                if any of the elements in the string array can not be
-	 *                converted to a proper object or primitive, or if the
-	 *                <code>syntax</code> is not a valid
-	 *                <code>AttributeDefinition</code> type constant.
+	 * Makes an array from the string array value and the object type.
+	 *
+	 * @param array <code>String</code> array representation of an array.
+	 * @param objectType The array's object type.
+	 *
+	 * @return an array of primitives or objects, whose component type corresponds to <code>objectType</code>,
+	 * and value build from the string array passed.
+	 *
+	 * @exception IllegalArgumentException  if any of the elements in the string array
+	 * can not be converted to a proper object or primitive, or if the <code>objectType</code> is not a valid constant.
 	 */
-	public static Object makeArr(String[] array, int syntax) throws IllegalArgumentException {
-		switch (syntax) {
-			case AttributeDefinition.STRING : {
+	public static Object makeArr(String[] array, int objectType) throws IllegalArgumentException {
+		switch (objectType) {
+			case STRING : {
 				return array;
 			}
-			case AttributeDefinition.INTEGER : {
+			case INTEGER : {
 				int[] ints = new int[array.length];
 				for (int i = 0; i < array.length; i++) {
 					ints[i] = Integer.parseInt(array[i]);
 				}
 				return ints;
 			}
-			case AttributeDefinition.LONG : {
+			case LONG : {
 				long[] longs = new long[array.length];
 				for (int i = 0; i < array.length; i++) {
 					longs[i] = Long.parseLong(array[i]);
 				}
 				return longs;
 			}
-			case AttributeDefinition.FLOAT : {
+			case FLOAT : {
 				float[] floats = new float[array.length];
 				for (int i = 0; i < array.length; i++) {
 					floats[i] = Float.valueOf(array[i]).floatValue();
 				}
 				return floats;
 			}
-			case AttributeDefinition.DOUBLE : {
+			case DOUBLE : {
 				double[] doubles = new double[array.length];
 				for (int i = 0; i < array.length; i++) {
 					doubles[i] = Double.valueOf(array[i]).doubleValue();
 				}
 				return doubles;
 			}
-			case AttributeDefinition.BYTE : {
+			case BYTE : {
 				byte[] bytes = new byte[array.length];
 				for (int i = 0; i < array.length; i++) {
 					bytes[i] = Byte.parseByte(array[i]);
 				}
 				return bytes;
 			}
-			case AttributeDefinition.SHORT : {
+			case SHORT : {
 				short[] shorts = new short[array.length];
 				for (int i = 0; i < array.length; i++) {
 					shorts[i] = Short.parseShort(array[i]);
 				}
 				return shorts;
 			}
-			case AttributeDefinition.CHARACTER : {
+			case CHARACTER : {
 				char[] chars = new char[array.length];
 				for (int i = 0; i < array.length; i++) {
 					chars[i] = array[i].charAt(0);
 				}
 				return chars;
 			}
-			case AttributeDefinition.BOOLEAN : {
+			case BOOLEAN : {
 				boolean[] booleans = new boolean[array.length];
 				for (int i = 0; i < array.length; i++) {
 					booleans[i] = Boolean.valueOf(array[i]).booleanValue();
@@ -698,7 +731,7 @@ public class DeclarationParser implements ExTagListener {
 				return booleans;
 			}
 			default : {
-				throw new IllegalArgumentException(NLS.bind(Messages.UNSUPPORTED_TYPE, String.valueOf(syntax)));
+				throw new IllegalArgumentException(NLS.bind(Messages.UNSUPPORTED_TYPE, String.valueOf(objectType)));
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponent.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponent.java
index fa3bb61..f059617 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponent.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2011 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -10,16 +10,17 @@
  *    ProSyst Software GmbH - initial API and implementation
  *    Simon Archer 		    - bug.id = 225624 
  *    Bryan Hunt 		    - bug.id = 275997 
+ *    Lazar Kirchev		 	- bug.id = 320377
  *******************************************************************************/
 package org.eclipse.equinox.internal.ds.model;
 
 import java.io.*;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import java.lang.reflect.*;
 import java.util.*;
 import org.apache.felix.scr.Component;
 import org.apache.felix.scr.Reference;
 import org.eclipse.equinox.internal.ds.*;
+import org.eclipse.equinox.internal.ds.impl.ReadOnlyDictionary;
 import org.eclipse.equinox.internal.util.io.Externalizable;
 import org.eclipse.equinox.internal.util.io.ExternalizableDictionary;
 import org.eclipse.osgi.util.NLS;
@@ -83,6 +84,21 @@ public class ServiceComponent implements Externalizable, Component {
 	int state = Component.STATE_UNSATISFIED;
 	// --- end: model
 
+	public HashSet componentIssues = new HashSet(1, 1);
+	private ReadOnlyDictionary readOnlyProps;
+
+	public String getComponentIssues() {
+		if (!componentIssues.isEmpty()) {
+			String result = ""; //$NON-NLS-1$
+			Object[] issues = componentIssues.toArray();
+			for (int i = 0; i < issues.length; i++) {
+				result += issues[i] + "\n"; //$NON-NLS-1$
+			}
+			return result;
+		}
+		return null;
+	}
+
 	private static final Class ACTIVATE_METHODS_PARAMETERS[] = new Class[] {ComponentContext.class};
 
 	public ServiceComponent() {
@@ -134,6 +150,7 @@ public class ServiceComponent implements Externalizable, Component {
 						if (!SCRUtil.checkMethodAccess(instance.getClass(), clazz, method, false)) {
 							//the method is not accessible. Stop the search
 							Activator.log(bc, LogService.LOG_WARNING, NLS.bind(Messages.METHOD_UNACCESSABLE, methodName, clazz), null);
+							componentIssues.add(NLS.bind(Messages.METHOD_UNACCESSABLE, methodName, clazz));
 							method = null;
 							break;
 						}
@@ -217,6 +234,7 @@ public class ServiceComponent implements Externalizable, Component {
 					if (activateMethodName != "activate") { //$NON-NLS-1$
 						//the activate method is specified in the component description XML by the user.
 						//It is expected to find it in the implementation class
+						componentIssues.add("Can not activate instance of component " + this.implementation + ". The specified activate method [" + activateMethodName + "] was not found."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 						throw new ComponentException(NLS.bind(Messages.SPECIFIED_ACTIVATE_METHOD_NOT_FOUND, instance, this));
 					}
 				}
@@ -241,6 +259,11 @@ public class ServiceComponent implements Externalizable, Component {
 			if (t instanceof ComponentException) {
 				throw (ComponentException) t;
 			}
+			String cause = t.toString();
+			if (t instanceof InvocationTargetException) {
+				cause = t.getCause().toString();
+			}
+			componentIssues.add("Can not activate instance of component " + this.implementation + ". The activation throws: " + cause); //$NON-NLS-1$ //$NON-NLS-2$ 
 			throw new ComponentException(NLS.bind(Messages.EXCEPTION_ACTIVATING_INSTANCE, instance, name), t);
 			// rethrow exception so resolver is eventually notified that
 			// the processed SCP is bad
@@ -838,7 +861,14 @@ public class ServiceComponent implements Externalizable, Component {
 	}
 
 	public Dictionary getProperties() {
-		return properties;
+		if (readOnlyProps == null) {
+			readOnlyProps = new ReadOnlyDictionary(properties);
+		} else {
+			// the scp properties may have been modified by configuration
+			// update the instance with the current properties
+			readOnlyProps.updateDelegate(properties);
+		}
+		return readOnlyProps;
 	}
 
 	public Reference[] getReferences() {
@@ -889,4 +919,4 @@ public class ServiceComponent implements Externalizable, Component {
 	public void setState(int newState) {
 		state = newState;
 	}
-}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java
index 42e1d21..d6d444a 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/model/ServiceComponentProp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997-2011 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -16,8 +16,7 @@ import java.security.*;
 import java.util.*;
 import org.apache.felix.scr.Component;
 import org.eclipse.equinox.internal.ds.*;
-import org.eclipse.equinox.internal.ds.impl.ComponentContextImpl;
-import org.eclipse.equinox.internal.ds.impl.ComponentInstanceImpl;
+import org.eclipse.equinox.internal.ds.impl.*;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
 import org.osgi.service.component.*;
@@ -70,6 +69,7 @@ public class ServiceComponentProp implements Component, PrivilegedExceptionActio
 	protected Vector delayActivateSCPNames;
 
 	private SCRManager mgr;
+	private ReadOnlyDictionary readOnlyProps;
 
 	// next free component id
 	private static long componentid = 0;
@@ -113,7 +113,14 @@ public class ServiceComponentProp implements Component, PrivilegedExceptionActio
 	 * @return Dictionary properties
 	 */
 	public Dictionary getProperties() {
-		return properties != null ? properties : serviceComponent.properties;
+		if (readOnlyProps == null) {
+			readOnlyProps = new ReadOnlyDictionary(properties != null ? properties : serviceComponent.properties);
+		} else {
+			// the scp properties may have been modified by configuration
+			// update the instance with the current properties
+			readOnlyProps.updateDelegate(properties != null ? properties : serviceComponent.properties);
+		}
+		return readOnlyProps;
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/storage/file/FileStorage.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/storage/file/FileStorage.java
index 69129ae..dbad5fa 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/storage/file/FileStorage.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/ds/storage/file/FileStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/Externalizable.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/Externalizable.java
index e2e8dc4..8ab19fa 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/Externalizable.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/Externalizable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/ExternalizableDictionary.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/ExternalizableDictionary.java
index b8c2cb1..fad6625 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/ExternalizableDictionary.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/ExternalizableDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/PDataStream.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/PDataStream.java
index bdcff9b..f3e17b9 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/PDataStream.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/io/PDataStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/string/CharBuffer.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/string/CharBuffer.java
index c0f7d6d..e34b323 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/string/CharBuffer.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/string/CharBuffer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/ExTagListener.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/ExTagListener.java
index c332b9a..9ef3056 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/ExTagListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/ExTagListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/Tag.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/Tag.java
index 613fbe5..c850f13 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/Tag.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/Tag.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagClass.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagClass.java
index 8634d65..b2a4059 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagClass.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagClass.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagListener.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagListener.java
index df623e7..4c1e8cd 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/TagListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLParser.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLParser.java
index 86c7606..3b36d30 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLReader.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLReader.java
index d19c74b..e324bd5 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLReader.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLUtil.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLUtil.java
index 96f188f..30f9a39 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XMLUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XmlSerializer.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XmlSerializer.java
index 80a9fff..e1b1b92 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XmlSerializer.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/XmlSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/TagImpl.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/TagImpl.java
index 2ecd239..ca3e01f 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/TagImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/TagImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/XMLParserImpl.java b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/XMLParserImpl.java
index 4b82393..7384a78 100644
--- a/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/XMLParserImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.ds/src/org/eclipse/equinox/internal/util/xml/impl/XMLParserImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2010 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.event/.classpath b/eclipse/plugins/org.eclipse.equinox.event/.classpath
index 866a165..472ee29 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/.classpath
+++ b/eclipse/plugins/org.eclipse.equinox.event/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSGi%Minimum-1.1"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs
index f31f250..937e9d3 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs
@@ -1,331 +1,331 @@
-#Tue Aug 21 11:27:47 CDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=error
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+#Mon Oct 04 18:15:32 EDT 2010
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=jsr14
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
 org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
 org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
 org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
 org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.incompleteClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
 org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
 org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
diff --git a/eclipse/plugins/org.eclipse.equinox.event/.settings/org.eclipse.pde.api.tools.prefs b/eclipse/plugins/org.eclipse.equinox.event/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..ceb4af0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.event/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Fri Oct 22 19:46:45 EDT 2010
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+invalid_since_tag_version=Error
+LEAK_METHOD_RETURN_TYPE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+ILLEGAL_INSTANTIATE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ILLEGAL_IMPLEMENT=Warning
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+LEAK_EXTEND=Warning
+INVALID_JAVADOC_TAG=Ignore
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+ILLEGAL_REFERENCE=Warning
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+LEAK_METHOD_PARAM=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+incompatible_api_component_version=Error
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ILLEGAL_OVERRIDE=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+malformed_since_tag=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+automatically_removed_unused_problem_filters=false
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+report_api_breakage_when_major_version_incremented=Disabled
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+eclipse.preferences.version=1
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+missing_since_tag=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+UNUSED_PROBLEM_FILTERS=Warning
+ILLEGAL_EXTEND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+LEAK_FIELD_DECL=Warning
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+LEAK_IMPLEMENT=Warning
+report_resolution_errors_api_component=Warning
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
diff --git a/eclipse/plugins/org.eclipse.equinox.event/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.event/META-INF/MANIFEST.MF
index 0650f19..84089a6 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.event/META-INF/MANIFEST.MF
@@ -1,20 +1,19 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.100.qualifier
 Bundle-SymbolicName: org.eclipse.equinox.event
 Bundle-Activator: org.eclipse.equinox.internal.event.Activator
-Bundle-Copyright: %bundleCopyright
 Import-Package: org.eclipse.osgi.framework.eventmgr;version="1.1.0",
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.event,
- org.osgi.service.log,
- org.osgi.util.tracker
+ org.eclipse.osgi.util;version="1.1.0",
+ org.osgi.framework;version="1.6.0",
+ org.osgi.service.event;version="[1.3,1.4)",
+ org.osgi.service.log;version="1.3.0",
+ org.osgi.util.tracker;version="1.5.0"
 Export-Package: org.eclipse.equinox.internal.event;x-internal:=true,
  org.eclipse.equinox.internal.event.mapper;x-internal:=true
 Bundle-Vendor: %bundleVendor
-Export-Service: org.osgi.service.event.EventAdmin
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: OSGi/Minimum-1.1
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ OSGi/Minimum-1.2
 Service-Component: OSGI-INF/component.xml
 Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.equinox.event/build.properties b/eclipse/plugins/org.eclipse.equinox.event/build.properties
index 5423d1d..a373285 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.event/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                plugin*.properties,\
                about.html,\
@@ -6,3 +16,8 @@ bin.includes = META-INF/,\
 output.. = bin/
 src.includes = about.html
 source.. = src/
+
+jre.compilation.profile = J2SE-1.5
+
+javacSource=1.5
+javacTarget=jsr14
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.event/plugin.properties b/eclipse/plugins/org.eclipse.equinox.event/plugin.properties
index 4d7601a..c01dc70 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.event/plugin.properties
@@ -10,4 +10,3 @@
 ###############################################################################
 bundleVendor = Eclipse.org - Equinox
 bundleName = Event Admin
-bundleCopyright = Copyright (c) IBM Corp. 2005
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/Activator.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/Activator.java
index 975ee97..a48d39d 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@ import org.osgi.service.event.EventAdmin;
 
 public class Activator implements BundleActivator {
 	private static final String PROP_USE_DS = "equinox.use.ds"; //$NON-NLS-1$
-	private ServiceRegistration eventAdminService;
+	private ServiceRegistration<EventAdmin> eventAdminService;
 	private EventComponent eventAdmin;
 
 	public void start(BundleContext bundleContext) throws InvalidSyntaxException {
@@ -25,7 +25,7 @@ public class Activator implements BundleActivator {
 		String serviceName = EventAdmin.class.getName();
 		Filter serviceFilter = bundleContext.createFilter("(objectclass=" + serviceName + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		//don't register the service if this bundle has already registered it declaratively
-		ServiceReference[] refs = bundleContext.getBundle().getRegisteredServices();
+		ServiceReference<?>[] refs = bundleContext.getBundle().getRegisteredServices();
 		if (refs != null) {
 			for (int i = 0; i < refs.length; i++)
 				if (serviceFilter.match(refs[i]))
@@ -34,7 +34,7 @@ public class Activator implements BundleActivator {
 
 		eventAdmin = new EventComponent();
 		eventAdmin.activate(bundleContext);
-		eventAdminService = bundleContext.registerService(serviceName, eventAdmin, null);
+		eventAdminService = bundleContext.registerService(EventAdmin.class, eventAdmin, null);
 	}
 
 	public void stop(BundleContext bundleContext) {
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminImpl.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminImpl.java
index af85e53..67a89d0 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@
 package org.eclipse.equinox.internal.event;
 
 import java.security.Permission;
-import java.util.Iterator;
+import java.util.Map;
 import java.util.Set;
 import org.eclipse.osgi.framework.eventmgr.*;
 import org.eclipse.osgi.util.NLS;
@@ -22,13 +22,13 @@ import org.osgi.service.log.LogService;
 
 /**
  * Implementation of org.osgi.service.event.EventAdmin. EventAdminImpl uses
- * org.eclipse.osgi.framework.eventmgr.EventManager. It is assumeed
+ * org.eclipse.osgi.framework.eventmgr.EventManager. It is assumed
  * org.eclipse.osgi.framework.eventmgr package is exported by some other bundle.
  */
 public class EventAdminImpl implements EventAdmin {
 	private final LogTracker log;
 	private final EventHandlerTracker handlers;
-	private volatile EventManager		eventManager;
+	private volatile EventManager eventManager;
 
 	/**
 	 * Constructor for EventAdminImpl.
@@ -40,7 +40,7 @@ public class EventAdminImpl implements EventAdmin {
 		log = new LogTracker(context, System.out);
 		handlers = new EventHandlerTracker(context, log);
 	}
-	
+
 	/**
 	 * This method should be called before registering EventAdmin service
 	 */
@@ -58,7 +58,7 @@ public class EventAdminImpl implements EventAdmin {
 	void stop() {
 		handlers.close();
 		eventManager.close();
-		eventManager = null;	// signify we have stopped
+		eventManager = null; // signify we have stopped
 		log.close();
 	}
 
@@ -84,8 +84,8 @@ public class EventAdminImpl implements EventAdmin {
 	 * LogEntry.
 	 * 
 	 * @param event to be delivered
-	 * @param isAsync must be set to true for syncronous event delivery, false
-	 *        for asyncronous delivery.
+	 * @param isAsync must be set to true for synchronous event delivery, false
+	 *        for asynchronous delivery.
 	 */
 	private void dispatchEvent(Event event, boolean isAsync) {
 		// keep a local copy in case we are stopped in the middle of dispatching
@@ -98,9 +98,9 @@ public class EventAdminImpl implements EventAdmin {
 			log.log(LogService.LOG_ERROR, EventAdminMsg.EVENT_NULL_EVENT);
 			// continue from here will result in an NPE below; the spec for EventAdmin does not allow for null here
 		}
-		
+
 		String topic = event.getTopic();
-		
+
 		try {
 			checkTopicPermissionPublish(topic);
 		} catch (SecurityException e) {
@@ -109,33 +109,29 @@ public class EventAdminImpl implements EventAdmin {
 			// must throw a security exception here according to the EventAdmin spec
 			throw e;
 		}
-		
-		Set eventHandlers = handlers.getHandlers(topic);
+
+		Set<EventHandlerWrapper> eventHandlers = handlers.getHandlers(topic);
 		// If there are no handlers, then we are done
-		if (eventHandlers.size() == 0) {
+		if (eventHandlers.isEmpty()) {
 			return;
 		}
-		
+
 		SecurityManager sm = System.getSecurityManager();
 		Permission perm = (sm == null) ? null : new TopicPermission(topic, TopicPermission.SUBSCRIBE);
-		
-		EventListeners listeners = new EventListeners();
-		Iterator iter = eventHandlers.iterator();
-		while (iter.hasNext()) {
-			EventHandlerWrapper wrapper = (EventHandlerWrapper) iter.next();
-			listeners.addListener(wrapper, perm);
-		}
-		
+
+		Map<EventHandlerWrapper, Permission> listeners = new CopyOnWriteIdentityMap<EventHandlerWrapper, Permission>();
+		for (EventHandlerWrapper wrapper : eventHandlers)
+			listeners.put(wrapper, perm);
+
 		// Create the listener queue for this event delivery
-		ListenerQueue listenerQueue = new ListenerQueue(currentManager);
+		ListenerQueue<EventHandlerWrapper, Permission, Event> listenerQueue = new ListenerQueue<EventHandlerWrapper, Permission, Event>(currentManager);
 		// Add the listeners to the queue and associate them with the event
 		// dispatcher
-		listenerQueue.queueListeners(listeners, handlers);
+		listenerQueue.queueListeners(listeners.entrySet(), handlers);
 		// Deliver the event to the listeners.
 		if (isAsync) {
 			listenerQueue.dispatchEventAsynchronous(0, event);
-		}
-		else {
+		} else {
 			listenerQueue.dispatchEventSynchronous(0, event);
 		}
 	}
@@ -146,7 +142,7 @@ public class EventAdminImpl implements EventAdmin {
 	 * @param topic
 	 * @throws SecurityException if the caller does not have the right to PUBLISH TopicPermission
 	 */
-	private void checkTopicPermissionPublish(String topic) throws SecurityException{
+	private void checkTopicPermissionPublish(String topic) throws SecurityException {
 		SecurityManager sm = System.getSecurityManager();
 		if (sm == null)
 			return;
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminMsg.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminMsg.java
index 33c7244..9342ff1 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminMsg.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventAdminMsg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1999, 2008 IBM Corporation and others.
+ * Copyright (c) 1999, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ public class EventAdminMsg extends NLS {
 	public static String EVENT_NO_TOPICPERMISSION_PUBLISH;
 	public static String EVENT_DISPATCH_HANDLER_EXCEPTION;
 	public static String EVENT_INVALID_HANDLER_FILTER;
+	public static String EVENT_INVALID_HANDLER_TOPICS;
 
 	static {
 		// initialize resource bundles
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerTracker.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerTracker.java
index 5d288df..23bb0ba 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerTracker.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,24 +21,25 @@ import org.osgi.service.event.EventHandler;
 import org.osgi.service.log.LogService;
 import org.osgi.util.tracker.ServiceTracker;
 
-public class EventHandlerTracker extends ServiceTracker implements EventDispatcher {
+public class EventHandlerTracker extends ServiceTracker<EventHandler, EventHandlerWrapper> implements EventDispatcher<EventHandlerWrapper, Permission, Event> {
+
 	private final LogService log;
 	//* List<EventHandlerWrapper> of all handlers with topic of "*"
-	private final List globalWildcard;
+	private final List<EventHandlerWrapper> globalWildcard;
 	// Map<String,List<EventHandlerWrapper>> key is topic prefix of partial wildcard
-	private final Map partialWildcard;
+	private final Map<String, List<EventHandlerWrapper>> partialWildcard;
 	// Map<String,List<EventHandlerWrapper>> key is topic name
-	private final Map topicName;
+	private final Map<String, List<EventHandlerWrapper>> topicName;
 
 	public EventHandlerTracker(BundleContext context, LogService log) {
 		super(context, EventHandler.class.getName(), null);
 		this.log = log;
-		globalWildcard = new ArrayList();
-		partialWildcard = new HashMap();
-		topicName = new HashMap();
+		globalWildcard = new ArrayList<EventHandlerWrapper>();
+		partialWildcard = new HashMap<String, List<EventHandlerWrapper>>();
+		topicName = new HashMap<String, List<EventHandlerWrapper>>();
 	}
 
-	public Object addingService(ServiceReference reference) {
+	public EventHandlerWrapper addingService(ServiceReference<EventHandler> reference) {
 		EventHandlerWrapper wrapper = new EventHandlerWrapper(reference, context, log);
 		synchronized (this) {
 			if (wrapper.init()) {
@@ -48,25 +49,23 @@ public class EventHandlerTracker extends ServiceTracker implements EventDispatch
 		return wrapper;
 	}
 
-	public void modifiedService(ServiceReference reference, Object service) {
-		EventHandlerWrapper wrapper = (EventHandlerWrapper) service;
+	public void modifiedService(ServiceReference<EventHandler> reference, EventHandlerWrapper service) {
 		synchronized (this) {
-			unbucket(wrapper);
-			if (wrapper.init()) {
-				bucket(wrapper);
+			unbucket(service);
+			if (service.init()) {
+				bucket(service);
 				return;
 			}
 		}
 
-		wrapper.flush(); // needs to be called outside sync region
+		service.flush(); // needs to be called outside sync region
 	}
 
-	public void removedService(ServiceReference reference, Object service) {
-		EventHandlerWrapper wrapper = (EventHandlerWrapper) service;
+	public void removedService(ServiceReference<EventHandler> reference, EventHandlerWrapper service) {
 		synchronized (this) {
-			unbucket(wrapper);
+			unbucket(service);
 		}
-		wrapper.flush(); // needs to be called outside sync region
+		service.flush(); // needs to be called outside sync region
 	}
 
 	/**
@@ -88,18 +87,18 @@ public class EventHandlerTracker extends ServiceTracker implements EventDispatch
 			// partial wildcard
 			else if (topic.endsWith("/*")) { //$NON-NLS-1$
 				String key = topic.substring(0, topic.length() - 2); // Strip off "/*" from the end
-				List wrappers = (List) partialWildcard.get(key);
+				List<EventHandlerWrapper> wrappers = partialWildcard.get(key);
 				if (wrappers == null) {
-					wrappers = new ArrayList();
+					wrappers = new ArrayList<EventHandlerWrapper>();
 					partialWildcard.put(key, wrappers);
 				}
 				wrappers.add(wrapper);
 			}
 			// simple topic name
 			else {
-				List wrappers = (List) topicName.get(topic);
+				List<EventHandlerWrapper> wrappers = topicName.get(topic);
 				if (wrappers == null) {
-					wrappers = new ArrayList();
+					wrappers = new ArrayList<EventHandlerWrapper>();
 					topicName.put(topic, wrappers);
 				}
 				wrappers.add(wrapper);
@@ -125,20 +124,20 @@ public class EventHandlerTracker extends ServiceTracker implements EventDispatch
 			// partial wildcard
 			else if (topic.endsWith("/*")) { //$NON-NLS-1$
 				String key = topic.substring(0, topic.length() - 2); // Strip off "/*" from the end
-				List wrappers = (List) partialWildcard.get(key);
+				List<EventHandlerWrapper> wrappers = partialWildcard.get(key);
 				if (wrappers != null) {
 					wrappers.remove(wrapper);
-					if (wrappers.size() == 0) {
+					if (wrappers.isEmpty()) {
 						partialWildcard.remove(key);
 					}
 				}
 			}
 			// simple topic name
 			else {
-				List wrappers = (List) topicName.get(topic);
+				List<EventHandlerWrapper> wrappers = topicName.get(topic);
 				if (wrappers != null) {
 					wrappers.remove(wrapper);
-					if (wrappers.size() == 0) {
+					if (wrappers.isEmpty()) {
 						topicName.remove(topic);
 					}
 				}
@@ -153,19 +152,19 @@ public class EventHandlerTracker extends ServiceTracker implements EventDispatch
 	 * @param topic
 	 * @return a set of handlers
 	 */
-	public synchronized Set getHandlers(final String topic) {
+	public synchronized Set<EventHandlerWrapper> getHandlers(final String topic) {
 		// Use a set to remove duplicates
-		Set handlers = new HashSet();
+		Set<EventHandlerWrapper> handlers = new HashSet<EventHandlerWrapper>();
 
 		// Add the "*" handlers
 		handlers.addAll(globalWildcard);
 
 		// Add the handlers with partial matches
 		if (partialWildcard.size() > 0) {
-			int index = topic.length();
+			int index = topic.lastIndexOf('/');
 			while (index >= 0) {
-				String subTopic = topic.substring(0, index); // First subtopic is the complete topic.
-				List wrappers = (List) partialWildcard.get(subTopic);
+				String subTopic = topic.substring(0, index);
+				List<EventHandlerWrapper> wrappers = partialWildcard.get(subTopic);
 				if (wrappers != null) {
 					handlers.addAll(wrappers);
 				}
@@ -176,7 +175,7 @@ public class EventHandlerTracker extends ServiceTracker implements EventDispatch
 		}
 
 		// Add the handlers for matching topic names
-		List wrappers = (List) topicName.get(topic);
+		List<EventHandlerWrapper> wrappers = topicName.get(topic);
 		if (wrappers != null) {
 			handlers.addAll(wrappers);
 		}
@@ -194,7 +193,7 @@ public class EventHandlerTracker extends ServiceTracker implements EventDispatch
 	 * @see org.eclipse.osgi.framework.eventmgr.EventDispatcher#dispatchEvent(java.lang.Object,
 	 *      java.lang.Object, int, java.lang.Object)
 	 */
-	public void dispatchEvent(Object eventListener, Object listenerObject, int eventAction, Object eventObject) {
-		((EventHandlerWrapper) eventListener).handleEvent((Event) eventObject, (Permission) listenerObject);
+	public void dispatchEvent(EventHandlerWrapper eventListener, Permission listenerObject, int eventAction, Event eventObject) {
+		eventListener.handleEvent(eventObject, listenerObject);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerWrapper.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerWrapper.java
index c74d2dc..efcc845 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventHandlerWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
 package org.eclipse.equinox.internal.event;
 
 import java.security.Permission;
+import java.util.Collection;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
 import org.osgi.service.event.*;
@@ -23,7 +24,7 @@ import org.osgi.service.log.LogService;
  *
  */
 public class EventHandlerWrapper {
-	private final ServiceReference reference;
+	private final ServiceReference<EventHandler> reference;
 	private final LogService log;
 	private final BundleContext context;
 	private EventHandler handler;
@@ -37,7 +38,7 @@ public class EventHandlerWrapper {
 	 * @param context Bundle Context of the Event Admin bundle
 	 * @param log LogService object for logging
 	 */
-	public EventHandlerWrapper(ServiceReference reference, BundleContext context, LogService log) {
+	public EventHandlerWrapper(ServiceReference<EventHandler> reference, BundleContext context, LogService log) {
 		this.reference = reference;
 		this.context = context;
 		this.log = log;
@@ -58,6 +59,14 @@ public class EventHandlerWrapper {
 			topics = new String[] {(String) o};
 		} else if (o instanceof String[]) {
 			topics = (String[]) o;
+		} else if (o instanceof Collection) {
+			try {
+				@SuppressWarnings("unchecked")
+				Collection<String> c = (Collection<String>) o;
+				topics = c.toArray(new String[c.size()]);
+			} catch (ArrayStoreException e) {
+				log.log(LogService.LOG_ERROR, NLS.bind(EventAdminMsg.EVENT_INVALID_HANDLER_TOPICS, o), e);
+			}
 		}
 
 		if (topics == null) {
@@ -119,7 +128,7 @@ public class EventHandlerWrapper {
 		// we don't have the handler, so lets get it outside the sync region
 		EventHandler tempHandler = null;
 		try {
-			tempHandler = (EventHandler) context.getService(reference);
+			tempHandler = context.getService(reference);
 		} catch (IllegalStateException e) {
 			// ignore; event admin may have stopped
 		}
@@ -187,8 +196,23 @@ public class EventHandlerWrapper {
 		try {
 			handlerService.handleEvent(event);
 		} catch (Throwable t) {
+			if (event.getTopic().startsWith("org/osgi/service/log/LogEntry")) { //$NON-NLS-1$
+				Object exception = event.getProperty("exception"); //$NON-NLS-1$
+				if (exception instanceof LogTopicException)
+					return; // avoid endless event dispatching
+				// wrap exception in a LogTopicException to detect endless event dispatching
+				t = new LogTopicException(t);
+			}
 			// log/handle any Throwable thrown by the listener
 			log.log(LogService.LOG_ERROR, NLS.bind(EventAdminMsg.EVENT_DISPATCH_HANDLER_EXCEPTION, event, handlerService), t);
 		}
 	}
+
+	static class LogTopicException extends RuntimeException {
+		private static final long serialVersionUID = -2386940335620739632L;
+
+		public LogTopicException(Throwable cause) {
+			super(cause);
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/ExternalMessages.properties b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/ExternalMessages.properties
index 005c438..f84754b 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/ExternalMessages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/ExternalMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2008 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -14,4 +14,5 @@ EVENT_ASYNC_THREAD_NAME=EventAdmin Async Event Dispatcher Thread
 EVENT_NULL_EVENT=Null event is passed to EventAdmin. Ignored.
 EVENT_NO_TOPICPERMISSION_PUBLISH=Caller bundle does not have TopicPermission to publish topic {0}
 EVENT_DISPATCH_HANDLER_EXCEPTION=Exception while dispatching event {0} to handler {1}
-EVENT_INVALID_HANDLER_FILTER=Invalid handler filter {0}
\ No newline at end of file
+EVENT_INVALID_HANDLER_FILTER=Invalid handler filter {0}
+EVENT_INVALID_HANDLER_TOPICS=Invalid handler topics {0}
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/LogTracker.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/LogTracker.java
index 62908b5..aa105da 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/LogTracker.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/LogTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2008 IBM Corporation and others.
+ * Copyright (c) 1998, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@ package org.eclipse.equinox.internal.event;
 import java.io.PrintStream;
 import java.util.Calendar;
 import java.util.Date;
-
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.log.LogService;
@@ -24,7 +23,7 @@ import org.osgi.util.tracker.ServiceTracker;
  * and handles all issues such as the service coming and going.
  */
 
-public class LogTracker extends ServiceTracker implements LogService {
+public class LogTracker extends ServiceTracker<LogService, LogService> implements LogService {
 	/** LogService interface class name */
 	protected final static String clazz = "org.osgi.service.log.LogService"; //$NON-NLS-1$
 
@@ -56,18 +55,22 @@ public class LogTracker extends ServiceTracker implements LogService {
 		log(null, level, message, exception);
 	}
 
+	// Must suppress warnings here because the log service is not
+	@SuppressWarnings("rawtypes")
 	public void log(ServiceReference reference, int level, String message) {
 		log(reference, level, message, null);
 	}
 
+	// Must suppress warnings here because the log service is not
+	@SuppressWarnings("rawtypes")
 	public synchronized void log(ServiceReference reference, int level, String message, Throwable exception) {
-		ServiceReference[] references = getServiceReferences();
+		ServiceReference<LogService>[] references = getServiceReferences();
 
 		if (references != null) {
 			int size = references.length;
 
 			for (int i = 0; i < size; i++) {
-				LogService service = (LogService) getService(references[i]);
+				LogService service = getService(references[i]);
 				if (service != null) {
 					try {
 						service.log(reference, level, message, exception);
@@ -91,7 +94,7 @@ public class LogTracker extends ServiceTracker implements LogService {
 	 * @param throwable Log exception or null if none.
 	 * @param reference ServiceReference associated with message or null if none.
 	 */
-	protected void noLogService(int level, String message, Throwable throwable, ServiceReference reference) {
+	protected void noLogService(int level, String message, Throwable throwable, ServiceReference<?> reference) {
 		if (out != null) {
 			synchronized (out) {
 				// Bug #113286.  If no log service present and messages are being
@@ -106,7 +109,7 @@ public class LogTracker extends ServiceTracker implements LogService {
 						break;
 					}
 					case LOG_INFO : {
-						out.print(LogTrackerMsg.Info); 
+						out.print(LogTrackerMsg.Info);
 
 						break;
 					}
@@ -122,7 +125,7 @@ public class LogTracker extends ServiceTracker implements LogService {
 					}
 					default : {
 						out.print("["); //$NON-NLS-1$
-						out.print(LogTrackerMsg.Unknown_Log_level);         
+						out.print(LogTrackerMsg.Unknown_Log_level);
 						out.print("]: "); //$NON-NLS-1$
 
 						break;
@@ -141,20 +144,20 @@ public class LogTracker extends ServiceTracker implements LogService {
 			}
 		}
 	}
-	
+
 	// from EclipseLog to avoid using DateFormat -- see bug 149892#c10
 	private String getDate(Date date) {
-			Calendar c = Calendar.getInstance();
-			c.setTime(date);
-			StringBuffer sb = new StringBuffer();
-			appendPaddedInt(c.get(Calendar.YEAR), 4, sb).append('-');
-			appendPaddedInt(c.get(Calendar.MONTH) + 1, 2, sb).append('-');
-			appendPaddedInt(c.get(Calendar.DAY_OF_MONTH), 2, sb).append(' ');
-			appendPaddedInt(c.get(Calendar.HOUR_OF_DAY), 2, sb).append(':');
-			appendPaddedInt(c.get(Calendar.MINUTE), 2, sb).append(':');
-			appendPaddedInt(c.get(Calendar.SECOND), 2, sb).append('.');
-			appendPaddedInt(c.get(Calendar.MILLISECOND), 3, sb);
-			return sb.toString();
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		StringBuffer sb = new StringBuffer();
+		appendPaddedInt(c.get(Calendar.YEAR), 4, sb).append('-');
+		appendPaddedInt(c.get(Calendar.MONTH) + 1, 2, sb).append('-');
+		appendPaddedInt(c.get(Calendar.DAY_OF_MONTH), 2, sb).append(' ');
+		appendPaddedInt(c.get(Calendar.HOUR_OF_DAY), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.MINUTE), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.SECOND), 2, sb).append('.');
+		appendPaddedInt(c.get(Calendar.MILLISECOND), 3, sb);
+		return sb.toString();
 	}
 
 	private StringBuffer appendPaddedInt(int value, int pad, StringBuffer buffer) {
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/BundleEventAdapter.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/BundleEventAdapter.java
index 6b2d9db..78e66c0 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/BundleEventAdapter.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/BundleEventAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation.
+ * Copyright (c) 2005, 2010 IBM Corporation.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,15 +10,15 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.event.mapper;
 
-import java.util.Dictionary;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleEvent;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 
 /**
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.4 $
  */
 public class BundleEventAdapter extends EventAdapter {
 	// constants for Event topic substring
@@ -70,14 +70,14 @@ public class BundleEventAdapter extends EventAdapter {
 				typename = Integer.toString(event.getType());
 		}
 		String topic = HEADER + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
+		Map<String, Object> properties = new HashMap<String, Object>();
 		Bundle bundle = event.getBundle();
 		if (bundle == null) {
 			throw new RuntimeException("BundleEvent.getBundle() returns null"); //$NON-NLS-1$
 		}
 		putBundleProperties(properties, bundle);
 		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, (Dictionary) properties);
+		Event converted = new Event(topic, properties);
 		return converted;
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventAdapter.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventAdapter.java
index b052572..92d4eab 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventAdapter.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,14 +11,14 @@
 
 package org.eclipse.equinox.internal.event.mapper;
 
-import java.util.Hashtable;
+import java.util.Map;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 
 /**
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.5 $
  */
 public abstract class EventAdapter {
 	final EventAdmin eventAdmin;
@@ -50,7 +50,7 @@ public abstract class EventAdapter {
 		eventAdmin.postEvent(converted);
 	}
 
-	public void putBundleProperties(Hashtable properties, Bundle bundle) {
+	public void putBundleProperties(Map<String, Object> properties, Bundle bundle) {
 		// assertion bundle != null
 		properties.put(Constants.BUNDLE_ID, new Long(bundle.getBundleId()));
 		String symbolicName = bundle.getSymbolicName();
@@ -60,7 +60,7 @@ public abstract class EventAdapter {
 		properties.put(Constants.BUNDLE, bundle);
 	}
 
-	public void putExceptionProperties(Hashtable properties, Throwable t) {
+	public void putExceptionProperties(Map<String, Object> properties, Throwable t) {
 		// assertion t != null
 		properties.put(Constants.EXCEPTION, t);
 		properties.put(Constants.EXCEPTION_CLASS, t.getClass().getName());
@@ -70,7 +70,7 @@ public abstract class EventAdapter {
 		}
 	}
 
-	public void putServiceReferenceProperties(Hashtable properties, ServiceReference ref) {
+	public void putServiceReferenceProperties(Map<String, Object> properties, ServiceReference<?> ref) {
 		// assertion ref != null
 		properties.put(Constants.SERVICE, ref);
 		properties.put(Constants.SERVICE_ID, ref.getProperty(org.osgi.framework.Constants.SERVICE_ID));
@@ -87,7 +87,7 @@ public abstract class EventAdapter {
 	/*
 	 * Utility function for converting classes into strings
 	 */
-	public String[] classes2strings(Class classes[]) {
+	public String[] classes2strings(Class<?>[] classes) {
 		if ((classes == null) || (classes.length == 0))
 			return null;
 		String[] strings = new String[classes.length];
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
index 3b74778..4b1e773 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
@@ -18,16 +18,16 @@ import org.osgi.util.tracker.ServiceTracker;
 /**
  * Main class for redeliver special events like FrameworkEvents via EventAdmin.
  * 
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
  */
 public class EventRedeliverer implements FrameworkListener, BundleListener, ServiceListener {
-	private final ServiceTracker eventAdminTracker;
+	private final ServiceTracker<EventAdmin, EventAdmin> eventAdminTracker;
 	private final static boolean DEBUG = false;
 	private BundleContext bc;
 
 	public EventRedeliverer(BundleContext bc) {
 		this.bc = bc;
-		this.eventAdminTracker = new ServiceTracker(bc, EventAdmin.class.getName(), null);
+		this.eventAdminTracker = new ServiceTracker<EventAdmin, EventAdmin>(bc, EventAdmin.class.getName(), null);
 	}
 
 	public void close() {
@@ -52,7 +52,7 @@ public class EventRedeliverer implements FrameworkListener, BundleListener, Serv
 	}
 
 	private EventAdmin getEventAdmin() {
-		return (EventAdmin) eventAdminTracker.getService();
+		return eventAdminTracker.getService();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/FrameworkEventAdapter.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/FrameworkEventAdapter.java
index d1755d0..dca1a97 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/FrameworkEventAdapter.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/FrameworkEventAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation.
+ * Copyright (c) 2005, 2010 IBM Corporation.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,15 +11,15 @@
 
 package org.eclipse.equinox.internal.event.mapper;
 
-import java.util.Dictionary;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 
 /**
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.4 $
  */
 public class FrameworkEventAdapter extends EventAdapter {
 	// constants for Event topic substring
@@ -57,7 +57,7 @@ public class FrameworkEventAdapter extends EventAdapter {
 				return null;
 		}
 		String topic = HEADER + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
+		Map<String, Object> properties = new HashMap<String, Object>();
 		Bundle bundle = event.getBundle();
 		if (bundle != null) {
 			putBundleProperties(properties, bundle);
@@ -67,7 +67,7 @@ public class FrameworkEventAdapter extends EventAdapter {
 			putExceptionProperties(properties, t);
 		}
 		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, (Dictionary) properties);
+		Event converted = new Event(topic, properties);
 		return converted;
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/ServiceEventAdapter.java b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/ServiceEventAdapter.java
index 813d0fb..ceffc2f 100644
--- a/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/ServiceEventAdapter.java
+++ b/eclipse/plugins/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/ServiceEventAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation.
+ * Copyright (c) 2005, 2010 IBM Corporation.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,15 +11,15 @@
 
 package org.eclipse.equinox.internal.event.mapper;
 
-import java.util.Dictionary;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
 import org.osgi.framework.ServiceEvent;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 
 /**
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.4 $
  */
 public class ServiceEventAdapter extends EventAdapter {
 	// constants for Event topic substring
@@ -53,13 +53,13 @@ public class ServiceEventAdapter extends EventAdapter {
 				return null;
 		}
 		String topic = HEADER + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
-		ServiceReference ref = event.getServiceReference();
+		Map<String, Object> properties = new HashMap<String, Object>();
+		ServiceReference<?> ref = event.getServiceReference();
 		if (ref != null) {
 			putServiceReferenceProperties(properties, ref);
 		}
 		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, (Dictionary) properties);
+		Event converted = new Event(topic, properties);
 		return converted;
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/META-INF/MANIFEST.MF
index 07e9fa7..1708736 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.frameworkadmin.equinox;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Import-Package: org.eclipse.core.runtime.internal.adaptor,
@@ -19,7 +19,7 @@ Import-Package: org.eclipse.core.runtime.internal.adaptor,
  org.osgi.service.log;version="1.3.0",
  org.osgi.service.startlevel;version="1.0.0",
  org.osgi.util.tracker;version="1.3.0"
-Export-Package: org.eclipse.equinox.internal.frameworkadmin.equinox;x-friends:="org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.metadata.generator,org.eclipse.equinox.simpleconfigurator.manipulator",
+Export-Package: org.eclipse.equinox.internal.frameworkadmin.equinox;x-friends:="org.eclipse.equinox.p2.publisher,org.eclipse.equinox.simpleconfigurator.manipulator",
  org.eclipse.equinox.internal.frameworkadmin.equinox.utils;x-internal:=true
 Require-Bundle: org.eclipse.equinox.common
 Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/build.properties b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/build.properties
index db8ea72..3d6e998 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/pom.xml b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/pom.xml
index 3ee50ae..b8cb5b7 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.frameworkadmin.equinox</artifactId>
-  <version>1.0.200.qualifier</version>
+  <version>1.0.300.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EclipseLauncherParser.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EclipseLauncherParser.java
index 38eb443..b714e8e 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EclipseLauncherParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EclipseLauncherParser.java
@@ -27,8 +27,13 @@ public class EclipseLauncherParser {
 	private static final String CONFIGURATION_FOLDER = "configuration"; //$NON-NLS-1$
 
 	//this figures out the location of the data area on partial data read from the <eclipse>.ini
-	private URI getOSGiInstallArea(List lines, URI base) {
+	private URI getOSGiInstallArea(List lines, URI base, LauncherData launcherData) {
+		//does the eclipse.ini say anything for osgi.install.area?
 		File osgiInstallArea = ParserUtils.getOSGiInstallArea(lines, null, base);
+		if (osgiInstallArea == null) {
+			//otherwise use the launcherData to figure it out
+			osgiInstallArea = ParserUtils.getOSGiInstallArea(lines, null, launcherData);
+		}
 		if (osgiInstallArea != null)
 			return URIUtil.makeAbsolute(osgiInstallArea.toURI(), base);
 		return null;
@@ -58,7 +63,7 @@ public class EclipseLauncherParser {
 		URI launcherFolder = launcherData.getLauncher().getParentFile().toURI();
 		getStartup(lines, launcherFolder);
 		getFrameworkJar(lines, launcherFolder, launcherData);
-		URI osgiInstallArea = getOSGiInstallArea(lines, launcherFolder);
+		URI osgiInstallArea = getOSGiInstallArea(lines, launcherFolder, launcherData);
 		if (osgiInstallArea == null) {
 			osgiInstallArea = launcherData.getFwJar() != null ? ParserUtils.fromOSGiJarToOSGiInstallArea(launcherData.getFwJar().getAbsolutePath()).toURI() : launcherFolder;
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java
index a96127e..6186e7d 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -513,6 +513,13 @@ public class EquinoxFwConfigFileParser {
 				continue;
 			}
 
+			// never write out the osgi.framework property in the user's local config.ini
+			// See https://bugs.eclipse.org/329583
+			if (key.equals(EquinoxConstants.PROP_OSGI_FW)) {
+				configProps.remove(key);
+				continue;
+			}
+
 			if (key.equals(EquinoxConstants.PROP_BUNDLES) && equalBundleLists(manipulator, value, sharedValue)) {
 				configProps.remove(key);
 				continue;
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java
index abde19f..ff4c32b 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java
@@ -144,8 +144,11 @@ public class ParserUtils {
 			if (args.get(i) == null)
 				continue;
 			if (((String) args.get(i)).equalsIgnoreCase(arg)) {
-				if (i + 1 < args.size() && args.get(i + 1) != null && ((String) args.get(i + 1)).charAt(0) != '-')
-					return (String) args.get(i + 1);
+				if (i + 1 < args.size()) {
+					String value = (String) args.get(i + 1);
+					if (value != null && value.length() > 0 && value.charAt(0) != '-')
+						return value;
+				}
 			}
 		}
 		return null;
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF
index c1bde7c..1806faf 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/META-INF/MANIFEST.MF
@@ -11,13 +11,11 @@ Import-Package: org.eclipse.osgi.service.pluginconversion;version="1.0.0",
 Export-Package: org.eclipse.equinox.frameworkadmin;version="2.0.0",
  org.eclipse.equinox.internal.frameworkadmin.utils;
   x-friends:="org.eclipse.equinox.frameworkadmin.equinox,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.publisher,
    org.eclipse.equinox.simpleconfigurator.manipulator",
  org.eclipse.equinox.internal.provisional.configuratormanipulator;x-friends:="org.eclipse.equinox.frameworkadmin.equinox,org.eclipse.equinox.simpleconfigurator.manipulator",
  org.eclipse.equinox.internal.provisional.frameworkadmin;
   x-friends:="org.eclipse.equinox.frameworkadmin.equinox,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.publisher,
    org.eclipse.equinox.p2.touchpoint.eclipse,
    org.eclipse.equinox.simpleconfigurator.manipulator,
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/SimpleBundlesState.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/SimpleBundlesState.java
index 2d257a5..3d95433 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/SimpleBundlesState.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/SimpleBundlesState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/Utils.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/Utils.java
index 375622c..6aaf2af 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/Utils.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/frameworkadmin/utils/Utils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulator.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulator.java
index dfc6b43..1dea78b 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulator.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulatorFactory.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulatorFactory.java
index 7ff1253..a8817a7 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulatorFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/configuratormanipulator/ConfiguratorManipulatorFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundlesState.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundlesState.java
index bbd261c..bcad476 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundlesState.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/BundlesState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/ConfigData.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/ConfigData.java
index 33a80f4..9a15b65 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/ConfigData.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/ConfigData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/FrameworkAdmin.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/FrameworkAdmin.java
index fdadaf3..b9d0752 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/FrameworkAdmin.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/FrameworkAdmin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/LauncherData.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/LauncherData.java
index 09d03cb..6fcfb65 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/LauncherData.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/LauncherData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/Manipulator.java b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/Manipulator.java
index 463b352..65cd758 100644
--- a/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/Manipulator.java
+++ b/eclipse/plugins/org.eclipse.equinox.frameworkadmin/src/org/eclipse/equinox/internal/provisional/frameworkadmin/Manipulator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.jetty_1.1.100/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java b/eclipse/plugins/org.eclipse.equinox.http.jetty_1.1.100/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java
index b2a4785..e1ec84d 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.jetty_1.1.100/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.jetty_1.1.100/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -231,7 +231,6 @@ public class HttpServerManager implements ManagedServiceFactory {
 	}
 
 	public static class InternalHttpServiceServlet implements Servlet {
-		private static final long serialVersionUID = 7477982882399972088L;
 		private Servlet httpServiceServlet = new HttpServiceServlet();
 		private ClassLoader contextLoader;
 
diff --git a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/META-INF/MANIFEST.MF
index caf242f..208f79c 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %bundleName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.equinox.http.jetty
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.100.qualifier
 Bundle-Activator: org.eclipse.equinox.http.jetty.internal.Activator
 Import-Package: javax.servlet;version="[2.5.0,2.6.0)",
  javax.servlet.http;version="[2.5.0,2.6.0)",
diff --git a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/OSGI-INF/metatype/config.xml b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/OSGI-INF/metatype/config.xml
index cb766a9..9aded57 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/OSGI-INF/metatype/config.xml
+++ b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/OSGI-INF/metatype/config.xml
@@ -1,26 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <MetaData xmlns="http://www.osgi.org/xmlns/metatype/v1.0.0">
-	<OCD name="%configurationName" id="server.config" description="%configurationDescription">
-		<AD id="http.enabled" type="Boolean" default="true"/>
-		<AD id="http.port" type="Integer" default="0"/>
-		<AD id="http.host" type="String" cardinality="1"/>
-		<AD id="http.nio"  type="Boolean" default="true"/>
-		<AD id="https.enabled" type="Boolean" default="false"/>
-		<AD id="https.port" type="Integer" default="0"/>
-		<AD id="https.host" type="String" cardinality="1"/>
-		<AD id="ssl.keystore" type="String" cardinality="1"/>
-		<AD id="ssl.password" type="String" cardinality="1"/>
-		<AD id="ssl.keypassword" type="String" cardinality="1"/>
-		<AD id="ssl.needclientauth" type="Boolean" cardinality="1"/>
-		<AD id="ssl.wantclientauth" type="Boolean" cardinality="1"/>
-		<AD id="ssl.protocol" type="String" cardinality="1"/>
-		<AD id="ssl.algorithm" type="String" cardinality="1"/>
-		<AD id="ssl.keystoretype" type="String" cardinality="1"/>
-		<AD id="context.path" type="String" cardinality="1"/>
-		<AD id="context.sessioninactiveinterval" type="Integer" cardinality="1"/>
-		<AD id="other.info" type="String" cardinality="1"/>
+	<OCD name="%configurationName" id="org.eclipse.equinox.http.jetty.config" description="%configurationDescription">
+		<AD id="http.enabled" type="Boolean" default="true" name="%httpEnabledName" description="%httpEnabledDescription"/>
+		<AD id="http.port" type="Integer" default="0" name="%httpPortName" description="%httpPortDescription"/>
+		<AD id="http.host" type="String" default="0.0.0.0" name="%httpHostName" description="%httpHostDescription"/>
+		<AD id="http.nio"  type="Boolean" default="true" name="%httpNioName" description="%httpNioDescription"/>
+		<AD id="https.enabled" type="Boolean" default="false" name="%httpsEnabledName" description="%httpsEnabledDescription"/>
+		<AD id="https.port" type="Integer" default="0" name="%httpsPortName" description="%httpsPortDescription"/>
+		<AD id="https.host" type="String" default="0.0.0.0" name="%httpsHostName" description="%httpsHostDescription"/>
+		<AD id="ssl.keystore" type="String" default="." name="%sslKeystoreName" description="%sslKeystoreDescription"/>
+		<AD id="ssl.password" type="String" name="%sslPasswordName" description="%sslPasswordDescription" required="false"/>
+		<AD id="ssl.keypassword" type="String" name="%sslKeyPasswordName" description="%sslKeyPasswordDescription" required="false"/>
+		<AD id="ssl.needclientauth" type="Boolean" default="false" name="%sslNeedClientAuthName" description="%sslNeedClientAuthDescription"/>
+		<AD id="ssl.wantclientauth" type="Boolean" default="false" name="%sslWantClientAuthName" description="%sslWantClientAuthDescription"/>
+		<AD id="ssl.protocol" type="String" default="TLS" name="%sslProtocolName" description="%sslProtocolDescription"/>
+		<AD id="ssl.algorithm" type="String" default="SunX509" name="%sslAlgorithmName" description="%sslAlgorithmDescription"/>
+		<AD id="ssl.keystoretype" type="String" default="JKS" name="%sslKeystoreTypeName" description="%sslKeystoreTypeDescription"/>
+		<AD id="context.path" type="String" default="" name="%contextPathName" description="%contextPathDescription"/>
+		<AD id="context.sessioninactiveinterval" type="Integer" default="600" name="%contextSessionInactiveIntervalName" description="%contextSessionInactiveIntervalDescription"/>
+		<AD id="other.info" type="String" name="%otherInfoName" description="%otherInfoDescription" required="false"/>
 	</OCD>
-	<Designate pid="org.eclipse.equinox.http.jetty.config.designate" factoryPid="org.eclipse.equinox.http.jetty.config" bundle="*">
-		<Object ocdref="server.config"/>
+	<Designate pid="org.eclipse.equinox.http.jetty.config" factoryPid="org.eclipse.equinox.http.jetty.config" bundle="*">
+		<Object ocdref="org.eclipse.equinox.http.jetty.config"/>
 	</Designate>
 </MetaData>
diff --git a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/plugin.properties b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/plugin.properties
index aae3bad..27003b7 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2009 IBM Corporation and others.
+# Copyright (c) 2005, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,5 +10,41 @@
 ###############################################################################
 bundleName = Jetty Http Service
 providerName = Eclipse.org - Equinox
-configurationName = Http Server Configuration
-configurationDescription = Provides Http Server Configuration Parameters
\ No newline at end of file
+configurationDescription = Provides HTTP server configuration parameters.
+configurationName = HTTP Server Configuration
+contextPathDescription=The URL context path.
+contextPathName=Context Path
+contextSessionInactiveIntervalDescription=The maximum session inactive interval in seconds.
+contextSessionInactiveIntervalName=Session Inactive Interval
+httpEnabledDescription=Enable or disable unsecured connections.
+httpEnabledName= HTTP Enabled
+httpHostDescription=The host for unsecured connections.
+httpHostName=HTTP Host
+httpNioDescription=Enable or disable NIO.
+httpNioName=NIO
+httpPortDescription=The port for unsecured connections.
+httpPortName=HTTP Port
+httpsEnabledDescription=Enable or disable secured connections.
+httpsEnabledName=HTTPS Enabled
+httpsHostDescription=The host for secured connections.
+httpsHostName=HTTPS Host
+httpsPortDescription=The port for secured connections.
+httpsPortName=HTTPS Port
+otherInfoDescription=Passed as a servlet init parameter.
+otherInfoName=Other Info
+sslAlgorithmDescription=The algorithm to use for SSL.
+sslAlgorithmName=SSL Algorithm
+sslKeyPasswordDescription=The password for the SSL certificate.
+sslKeyPasswordName=SSL Key Password
+sslKeystoreDescription=The location of the SSL certificate keystore.
+sslKeystoreName=SSL Keystore
+sslKeystoreTypeDescription=The type of keystore.
+sslKeystoreTypeName=SSL Keystore Type
+sslNeedClientAuthDescription=Enable or disable required client authentication.
+sslNeedClientAuthName=SSL Need Client Authorization
+sslPasswordDescription=The password for the SSL certificate keystore.
+sslPasswordName=SSL Password
+sslProtocolDescription=The protocol to use.
+sslProtocolName=SSL Protocol
+sslWantClientAuthDescription=Enable or disable requested client authentication.
+sslWantClientAuthName=SSL Want Client Authorization
diff --git a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/JettyConfigurator.java b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/JettyConfigurator.java
index 45f4490..4e62395 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/JettyConfigurator.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/JettyConfigurator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others
+ * Copyright (c) 2007, 2010 IBM Corporation and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java
index 017f1d8..5c4850e 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.jetty_2.0.0/src/org/eclipse/equinox/http/jetty/internal/HttpServerManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -280,7 +280,6 @@ public class HttpServerManager implements ManagedServiceFactory {
 	}
 
 	public static class InternalHttpServiceServlet implements Servlet {
-		private static final long serialVersionUID = 7477982882399972088L;
 		private Servlet httpServiceServlet = new HttpServiceServlet();
 		private ClassLoader contextLoader;
 
diff --git a/eclipse/plugins/org.eclipse.equinox.http.registry/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.http.registry/META-INF/MANIFEST.MF
index 1ee48fb..15f4163 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.registry/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.http.registry/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.http.registry;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.100.qualifier
 Bundle-Activator: org.eclipse.equinox.http.registry.internal.Activator
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.equinox.common,
diff --git a/eclipse/plugins/org.eclipse.equinox.http.registry/plugin.properties b/eclipse/plugins/org.eclipse.equinox.http.registry/plugin.properties
index 7f1e11f..0721546 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.registry/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.http.registry/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/DefaultRegistryHttpContext.java b/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/DefaultRegistryHttpContext.java
index 5a63923..5250434 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/DefaultRegistryHttpContext.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/DefaultRegistryHttpContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others
+ * Copyright (c) 2007, 2010 IBM Corporation and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/FilterManager.java b/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/FilterManager.java
index d20e7f9..87b3b62 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/FilterManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/FilterManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/HttpRegistryManager.java b/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/HttpRegistryManager.java
index 68b73fb..0266209 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/HttpRegistryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.registry/src/org/eclipse/equinox/http/registry/internal/HttpRegistryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.http.servlet/META-INF/MANIFEST.MF
index cbcf911..fd5454c 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.http.servlet
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.200.qualifier
 Bundle-Activator: org.eclipse.equinox.http.servlet.internal.Activator
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
@@ -12,7 +12,7 @@ Export-Package: org.eclipse.equinox.http.servlet;version="1.1.0"
 Import-Package: javax.servlet;version="2.3",
  javax.servlet.http;version="2.3",
  org.osgi.framework;version="1.3.0",
- org.osgi.service.http;version="1.2.0"
+ org.osgi.service.http;version="[1.2,1.3)"
 Comment-Header: Both Eclipse-LazyStart and Bundle-ActivationPolicy are specified for compatibility with 3.2
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/ExtendedHttpService.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/ExtendedHttpService.java
index d270f7e..bcb586f 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/ExtendedHttpService.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/ExtendedHttpService.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.http.servlet;
 
 import java.util.Dictionary;
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java
index 25f8aee..99ab714 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2011 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public class Activator implements BundleActivator {
 			ServiceRegistration registration = (ServiceRegistration) serviceRegistrations.put(proxyServlets[i], null);
 			registration.unregister();
 		}
+		serviceRegistrations.clear();
 		context = null;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterChainImpl.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterChainImpl.java
index 49b5062..159fb2d 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterChainImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterChainImpl.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.http.servlet.internal;
 
 import java.io.IOException;
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterRegistration.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterRegistration.java
index 0faa00d..a976f27 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterRegistration.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/FilterRegistration.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.http.servlet.internal;
 
 import java.io.IOException;
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceFactory.java
index 3e147a4..e473c9d 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyContext.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyContext.java
index 20236fd..9e2896e 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyContext.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2011 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ public class ProxyContext {
 			proxyContextTempDir.mkdirs();
 		}
 	}
-	
+
 	public void destroy() {
 		if (proxyContextTempDir != null)
 			deleteDirectory(proxyContextTempDir);
@@ -52,7 +52,7 @@ public class ProxyContext {
 	}
 
 	synchronized String getServletPath() {
-		return servletPath;
+		return (servletPath == null ? "" : servletPath); //$NON-NLS-1$
 	}
 
 	synchronized void createContextAttributes(HttpContext httpContext) {
@@ -61,7 +61,7 @@ public class ProxyContext {
 			attributes = new ContextAttributes(httpContext);
 			attributesMap.put(httpContext, attributes);
 		}
-		attributes.addReference();	
+		attributes.addReference();
 	}
 
 	synchronized void destroyContextAttributes(HttpContext httpContext) {
@@ -72,11 +72,11 @@ public class ProxyContext {
 			attributes.destroy();
 		}
 	}
-	
+
 	synchronized Dictionary getContextAttributes(HttpContext httpContext) {
 		return (Dictionary) attributesMap.get(httpContext);
 	}
-	
+
 	/**
 	 * deleteDirectory is a convenience method to recursively delete a directory
 	 * @param directory - the directory to delete.
@@ -95,7 +95,7 @@ public class ProxyContext {
 		}
 		return directory.delete();
 	}
-	
+
 	public class ContextAttributes extends Hashtable {
 		private static final long serialVersionUID = 1916670423277243587L;
 		private int referenceCount;
@@ -107,19 +107,19 @@ public class ProxyContext {
 				put(JAVAX_SERVLET_CONTEXT_TEMPDIR, contextTempDir);
 			}
 		}
-		
+
 		public void destroy() {
 			File contextTempDir = (File) get(JAVAX_SERVLET_CONTEXT_TEMPDIR);
 			if (contextTempDir != null)
 				deleteDirectory(contextTempDir);
 		}
-				
+
 		public void addReference() {
-			referenceCount++;			
+			referenceCount++;
 		}
 
 		public void removeReference() {
-			referenceCount--;			
+			referenceCount--;
 		}
 
 		public int referenceCount() {
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java
index dae31f9..59a6834 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Registration.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Registration.java
index 155346a..52ab0d5 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Registration.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/Registration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ResourceServlet.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ResourceServlet.java
index fa1ab23..acb468a 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ResourceServlet.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ResourceServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005-2007 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ServletRegistration.java b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ServletRegistration.java
index 84cf5da..f3fae94 100644
--- a/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ServletRegistration.java
+++ b/eclipse/plugins/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ServletRegistration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005-2007 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.http/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.http/META-INF/MANIFEST.MF
index 48716c7..8b76fdc 100644
--- a/eclipse/plugins/org.eclipse.equinox.http/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.http/META-INF/MANIFEST.MF
@@ -1,8 +1,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Vendor: %bundleVendor
-Bundle-Version: 1.0.400.qualifier
+Bundle-Version: 1.0.500.qualifier
 Bundle-Activator: org.eclipse.equinox.http.Activator
-Bundle-Copyright: %bundleCopyright
 Bundle-SymbolicName: org.eclipse.equinox.http
 Bundle-Name: %bundleName
 Import-Package: javax.servlet,
@@ -10,7 +9,7 @@ Import-Package: javax.servlet,
  javax.net; resolution:="optional",
  org.osgi.framework;version="1.0",
  org.osgi.service.cm;version="1.0",
- org.osgi.service.http;version="1.1",
+ org.osgi.service.http;version="[1.2,1.3)",
  org.osgi.service.log;version="1.0",
  org.osgi.util.tracker;version="1.1",
  org.eclipse.osgi.util
diff --git a/eclipse/plugins/org.eclipse.equinox.http/plugin.properties b/eclipse/plugins/org.eclipse.equinox.http/plugin.properties
index 7ffabac..41bef12 100644
--- a/eclipse/plugins/org.eclipse.equinox.http/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.http/plugin.properties
@@ -10,4 +10,3 @@
 ###############################################################################
 bundleVendor = Eclipse.org - Equinox
 bundleName = HTTP Service
-bundleCopyright = Copyright (c) IBM Corp. 1999, 2005
diff --git a/eclipse/plugins/org.eclipse.equinox.io/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.io/META-INF/MANIFEST.MF
index cc865d4..8ed407f 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.io/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.io
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-Activator: org.eclipse.equinox.internal.io.impl.Activator
 Bundle-Description: This bundle contains service for creating connections. 
@@ -12,7 +12,7 @@ Import-Package:
  org.eclipse.equinox.internal.util.pool;version="1.0.0",
  org.eclipse.equinox.internal.util.ref;version="1.0.0",
  org.osgi.framework;version="1.0",
- org.osgi.service.io;version="1.0",
+ org.osgi.service.io;version="[1.0,1.1)",
  org.osgi.service.log;version="1.0.0",
  org.osgi.util.tracker;version="1.2"
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connection.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connection.java
index 1d5fffd..1a996bb 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ConnectionNotFoundException.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ConnectionNotFoundException.java
index 68a9016..736fd39 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ConnectionNotFoundException.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ConnectionNotFoundException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connector.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connector.java
index dceb48e..b204050 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connector.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Connector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ContentConnection.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ContentConnection.java
index 8064b2f..6091636 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ContentConnection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/ContentConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Datagram.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Datagram.java
index b59b5bf..b40914d 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Datagram.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/Datagram.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/DatagramConnection.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/DatagramConnection.java
index b97d452..3b504e8 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/DatagramConnection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/DatagramConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/HttpConnection.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/HttpConnection.java
index 6a3bb45..c4e47e5 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/HttpConnection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/HttpConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/InputConnection.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/InputConnection.java
index c738f18..c2aa93e 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/InputConnection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/InputConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/OutputConnection.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/OutputConnection.java
index e03cbea..0891582 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/OutputConnection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/OutputConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnection.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnection.java
index aecb893..c3939e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnectionNotifier.java b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnectionNotifier.java
index 9b718bf..b458912 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnectionNotifier.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/javax/microedition/io/StreamConnectionNotifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionListener.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionListener.java
index c698fe2..dc933b4 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionNotifier.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionNotifier.java
index 86029c6..7aabd91 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionNotifier.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/ConnectionNotifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/RandomAccessConnection.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/RandomAccessConnection.java
index c550e5e..f0ad611 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/RandomAccessConnection.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/RandomAccessConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/Activator.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/Activator.java
index f159f87..99924d7 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionFactoryListener.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionFactoryListener.java
index bdce47f..1cce918 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionFactoryListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionFactoryListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionNotifierImpl.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionNotifierImpl.java
index c5fbf4a..89bfefa 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionNotifierImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectionNotifierImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectorServiceImpl.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectorServiceImpl.java
index e9217f9..34cd718 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectorServiceImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/ConnectorServiceImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/PrivilegedRunner.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/PrivilegedRunner.java
index c92783a..70fbd8f 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/PrivilegedRunner.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/PrivilegedRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -148,7 +148,7 @@ public final class PrivilegedRunner implements ObjectCreator {
 	 * action type and using the given job parameters.
 	 * 
 	 * @author Valentin Valchev
-	 * @version $Revision: 1.1 $
+	 * @version $Revision: 1.2 $
 	 */
 	public static interface PrivilegedDispatcher {
 
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/TracerConfigConnector.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/TracerConfigConnector.java
index caa5445..8a3daa8 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/TracerConfigConnector.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/impl/TracerConfigConnector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractConnectionNotifier.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractConnectionNotifier.java
index 5cf2968..ab0a181 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractConnectionNotifier.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractConnectionNotifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractDatagram.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractDatagram.java
index 4f81da4..da3a38b 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractDatagram.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/AbstractDatagram.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/URI.java b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/URI.java
index 3cfdfd7..f477b75 100644
--- a/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/URI.java
+++ b/eclipse/plugins/org.eclipse.equinox.io/src/org/eclipse/equinox/internal/io/util/URI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.ip/META-INF/MANIFEST.MF
index 9f9cd51..72ecd15 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.ip/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.ip
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 1.1.200.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-Description: Provides implementation of the Intial Provisioning service
  defined by OSGi specification release 4.
@@ -17,7 +17,7 @@ Import-Package:
  org.osgi.service.cm;version="1.2.0",
  org.osgi.service.http;version="1.0",
  org.osgi.service.log;version="1.3.0",
- org.osgi.service.provisioning;version="1.0",
+ org.osgi.service.provisioning;version="[1.2,1.3)",
  org.osgi.service.useradmin;version="1.0",
  org.osgi.util.tracker;version="1.3.2"
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningInfoProvider.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningInfoProvider.java
index f5ba4f8..06612c4 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningInfoProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningInfoProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningStorage.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningStorage.java
index 1d78207..5dcd979 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningStorage.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/ProvisioningStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/dscagent/DiscoveryAgent.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/dscagent/DiscoveryAgent.java
index c6c9ca4..8c21188 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/dscagent/DiscoveryAgent.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/dscagent/DiscoveryAgent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/Log.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/Log.java
index bf97d6e..76450a3 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/Log.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/Log.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningAgent.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningAgent.java
index 377ef67..47e60c4 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningAgent.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningAgent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2009 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningData.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningData.java
index b66672b..6e23606 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningData.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/impl/ProvisioningData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/BaseProvider.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/BaseProvider.java
index 43d4091..d003c2d 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/BaseProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/BaseProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/env/EnvironmentInfoProvider.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/env/EnvironmentInfoProvider.java
index 17667d7..7c3c358 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/env/EnvironmentInfoProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/env/EnvironmentInfoProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/file/FileProvider.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/file/FileProvider.java
index 38a871c..e4c44f0 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/file/FileProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/file/FileProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/Context.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/Context.java
index 2b439c6..124548a 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/Context.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/Context.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/HttpProvider.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/HttpProvider.java
index 3531d43..2062521 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/HttpProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/provider/http/HttpProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/cm/CMStorage.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/cm/CMStorage.java
index 1e06e4b..66ca827 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/cm/CMStorage.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/cm/CMStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/file/FileStorage.java b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/file/FileStorage.java
index 9b4cb64..264f39c 100644
--- a/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/file/FileStorage.java
+++ b/eclipse/plugins/org.eclipse.equinox.ip/src/org/eclipse/equinox/internal/ip/storage/file/FileStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.project b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.project
deleted file mode 100644
index 0bfe663..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.client.rmi</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 782a579..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,308 +0,0 @@
-#Thu May 10 18:06:28 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 04b8fd2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-#Mon Feb 26 11:26:35 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/META-INF/MANIFEST.MF
deleted file mode 100644
index 838beef..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,12 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: RMI Transport Client Plug-in (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.client.rmi;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
-Import-Package: javax.management.remote,
- org.eclipse.equinox.jmx.client
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/build.properties
deleted file mode 100644
index 63a8afd..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/plugin.xml b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/plugin.xml
deleted file mode 100644
index 2042c17..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
-<plugin>
-   <extension
-         point="org.eclipse.equinox.jmx.client.transport">
-      <transport
-            class="org.eclipse.equinox.jmx.client.rmi.RMIConnectorProvider"
-            protocol="rmi"/>
-   </extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/src/org/eclipse/equinox/jmx/client/rmi/RMIConnectorProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/src/org/eclipse/equinox/jmx/client/rmi/RMIConnectorProvider.java
deleted file mode 100644
index 8ebabce..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.rmi/src/org/eclipse/equinox/jmx/client/rmi/RMIConnectorProvider.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.rmi;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-import javax.management.remote.*;
-import org.eclipse.equinox.jmx.client.IJMXConnectorProvider;
-
-public class RMIConnectorProvider implements IJMXConnectorProvider {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.client.IJMXConnectorProvider#getJMXServiceURL(java.lang.String, int, java.lang.String, java.lang.String)
-	 */
-	public JMXServiceURL getJMXServiceURL(String host, int port, String protocol, String domain) throws MalformedURLException {
-		return new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/" + domain);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorProvider#newJMXConnector(javax.management.remote.JMXServiceURL, java.util.Map)
-	 */
-	public JMXConnector newJMXConnector(JMXServiceURL arg0, Map arg1) throws IOException {
-		return JMXConnectorFactory.newJMXConnector(arg0, arg1);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.project b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.project
deleted file mode 100644
index 4f6a4f3..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.client.xmlrpc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index cee7412..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,309 +0,0 @@
-#Mon Feb 26 13:38:25 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index b5f8efc..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:26:45 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/META-INF/MANIFEST.MF
deleted file mode 100644
index 16c0ca7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: XMLRPC Transport Client Plug-in (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.client.xmlrpc;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
-Import-Package: javax.management,
- javax.management.remote,
- javax.security.auth,
- org.apache.xmlrpc,
- org.apache.xmlrpc.client,
- org.eclipse.equinox.jmx.client,
- org.eclipse.equinox.jmx.client.remote,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.common.util
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/build.properties
deleted file mode 100644
index 63a8afd..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/plugin.xml b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/plugin.xml
deleted file mode 100644
index 3f57b89..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
-<plugin>
-   <extension
-         point="org.eclipse.equinox.jmx.client.transport">
-      <transport
-            class="org.eclipse.equinox.jmx.client.internal.xmlrpc.XMLRPCJMXConnectorProvider"
-            protocol="xmlrpc"/>
-   </extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/ClientTransportProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/ClientTransportProvider.java
deleted file mode 100644
index 35ce2c9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/ClientTransportProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.internal.xmlrpc;
-
-import org.apache.xmlrpc.client.*;
-
-/**
- * Interface for implementors that wish to provider their own xml-rpc transport layer.
- */
-public abstract class ClientTransportProvider {
-
-	/**
-	 * Implementor's are required to supply their specific transport layer
-	 * factory which is used by the client to communicate with the server.
-	 * 
-	 * @return An instance of <code>XmlRpcTransportFactory<code>.
-	 */
-	public abstract XmlRpcTransportFactory getXmlRpcTransportFactory(XmlRpcClient client);
-
-	public abstract XmlRpcClientConfigImpl getConfig();
-
-	/**
-	 * Return the xml-rpc client configured with the implementor's
-	 * transport layer.
-	 * 
-	 * @return A new <code>XmlRpcClient</code>
-	 */
-	public XmlRpcClient getXmlRpcClient() {
-		XmlRpcClient result = new XmlRpcClient();
-		result.setConfig(getConfig());
-		result.setTransportFactory(getXmlRpcTransportFactory(result));
-		return result;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/WebServerTransportProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/WebServerTransportProvider.java
deleted file mode 100644
index 78966cc..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/WebServerTransportProvider.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.internal.xmlrpc;
-
-import java.net.URL;
-import org.apache.xmlrpc.client.*;
-
-public class WebServerTransportProvider extends ClientTransportProvider {
-
-	private URL serverUrl;
-
-	public WebServerTransportProvider(URL serverUrl) {
-		this.serverUrl = serverUrl;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.client.internal.xmlrpc.ClientTransportProvider#getXmlRpcTransportFactory(org.apache.xmlrpc.client.XmlRpcClient)
-	 */
-	public XmlRpcTransportFactory getXmlRpcTransportFactory(XmlRpcClient client) {
-		return new XmlRpcCommonsTransportFactory(client);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.client.internal.xmlrpc.ClientTransportProvider#getConfig()
-	 */
-	public XmlRpcClientConfigImpl getConfig() {
-		XmlRpcClientConfigImpl result = new XmlRpcClientConfigImpl();
-		result.setContentLengthOptional(true);
-		result.setEnabledForExtensions(true);
-		result.setServerURL(serverUrl);
-		return result;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCJMXConnector.java b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCJMXConnector.java
deleted file mode 100644
index 812e59b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCJMXConnector.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.internal.xmlrpc;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Map;
-import javax.management.*;
-import javax.management.remote.JMXConnector;
-import javax.security.auth.Subject;
-
-public class XMLRPCJMXConnector implements JMXConnector {
-
-	private final String host;
-	private final int port;
-	private ClientTransportProvider clientProvider;
-	private MBeanServerConnection mbeanServer;
-
-	public XMLRPCJMXConnector(String host, int port) {
-		this.host = host;
-		this.port = port;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#connect()
-	 */
-	public void connect() throws IOException {
-		connect(null);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#connect(java.util.Map)
-	 */
-	public void connect(Map arg0) throws IOException {
-		clientProvider = new WebServerTransportProvider(new URL("http://" + host + ":" + port));
-		mbeanServer = new XMLRPCMBeanServerConnection(clientProvider.getXmlRpcClient());
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#getMBeanServerConnection()
-	 */
-	public MBeanServerConnection getMBeanServerConnection() throws IOException {
-		return mbeanServer;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#getMBeanServerConnection(javax.security.auth.Subject)
-	 */
-	public MBeanServerConnection getMBeanServerConnection(Subject delegationSubject) throws IOException {
-		return mbeanServer;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#close()
-	 */
-	public void close() throws IOException {
-		// the xmlrpc http transport creates a new connection for each remote operation
-		// thus there is no global close ability associated with this provider
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#addConnectionNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void addConnectionNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#removeConnectionNotificationListener(javax.management.NotificationListener)
-	 */
-	public void removeConnectionNotificationListener(NotificationListener listener) throws ListenerNotFoundException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#removeConnectionNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void removeConnectionNotificationListener(NotificationListener l, NotificationFilter f, Object handback) throws ListenerNotFoundException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnector#getConnectionId()
-	 */
-	public String getConnectionId() throws IOException {
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCJMXConnectorProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCJMXConnectorProvider.java
deleted file mode 100644
index 6ccfddb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCJMXConnectorProvider.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.internal.xmlrpc;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXServiceURL;
-import org.eclipse.equinox.jmx.client.IJMXConnectorProvider;
-
-public class XMLRPCJMXConnectorProvider implements IJMXConnectorProvider {
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorProvider#newJMXConnector(javax.management.remote.JMXServiceURL, java.util.Map)
-	 */
-	public JMXConnector newJMXConnector(JMXServiceURL arg0, Map arg1) throws IOException {
-		if (!arg0.getProtocol().equals("xmlrpc")) {
-			throw new IOException("Invalid protocol"); // FIXME
-		}
-		return new XMLRPCJMXConnector(arg0.getHost(), arg0.getPort());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.client.IJMXConnectorProvider#getJMXServiceURL(java.lang.String, int, java.lang.String, java.lang.String)
-	 */
-	public JMXServiceURL getJMXServiceURL(String host, int port, String protocol, String domain) throws MalformedURLException {
-		return new JMXServiceURL("service:jmx:xmlrpc://" + host + ":" + port);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCMBeanServerConnection.java b/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCMBeanServerConnection.java
deleted file mode 100644
index 72f47bb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client.xmlrpc/src/org/eclipse/equinox/jmx/client/internal/xmlrpc/XMLRPCMBeanServerConnection.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.internal.xmlrpc;
-
-import java.io.IOException;
-import java.util.Set;
-import javax.management.*;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClient;
-import org.eclipse.equinox.jmx.client.remote.RemoteMBeanConnection;
-import org.eclipse.equinox.jmx.client.remote.RemoteNotificationHandler;
-import org.eclipse.equinox.jmx.common.NamedNotification;
-
-/**
- * A <code>XMLRPCMBeanServerConnection</code> provides an implementation of 
- * <code>MBeanServerConnection</code> that utilizes xml-rpc as a transport
- * provider. 
- */
-public class XMLRPCMBeanServerConnection implements MBeanServerConnection, RemoteMBeanConnection {
-
-	private static final String CREATE_MBEAN = "createMBean"; //$NON-NLS-1$
-	private XmlRpcClient clientConnection;
-	private RemoteNotificationHandler notificationHandler;
-
-	public XMLRPCMBeanServerConnection(XmlRpcClient clientConnection) {
-		this.clientConnection = clientConnection;
-		this.notificationHandler = new RemoteNotificationHandler(this);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#createMBean(java.lang.String, javax.management.ObjectName)
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, IOException {
-		try {
-			return (ObjectInstance) clientConnection.execute(CREATE_MBEAN, new Object[] {className, name});
-		} catch (XmlRpcException e) {
-			throw new MBeanException(e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#createMBean(java.lang.String, javax.management.ObjectName, javax.management.ObjectName)
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException, IOException {
-		try {
-			return (ObjectInstance) clientConnection.execute(CREATE_MBEAN, new Object[] {className, name, loaderName});
-		} catch (XmlRpcException e) {
-			throw new MBeanException(e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#createMBean(java.lang.String, javax.management.ObjectName, java.lang.Object[], java.lang.String[])
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, IOException {
-		try {
-			return (ObjectInstance) clientConnection.execute(CREATE_MBEAN, new Object[] {className, name, params, signature});
-		} catch (XmlRpcException e) {
-			throw new MBeanException(e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#createMBean(java.lang.String, javax.management.ObjectName, javax.management.ObjectName, java.lang.Object[], java.lang.String[])
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException, IOException {
-		try {
-			return (ObjectInstance) clientConnection.execute(CREATE_MBEAN, new Object[] {className, name, loaderName, params, signature});
-		} catch (XmlRpcException e) {
-			throw new MBeanException(e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#unregisterMBean(javax.management.ObjectName)
-	 */
-	public void unregisterMBean(ObjectName name) throws InstanceNotFoundException, MBeanRegistrationException, IOException {
-		try {
-			clientConnection.execute("unregisterMBean", new Object[] {name});
-		} catch (XmlRpcException e) {
-			throw new MBeanRegistrationException(e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#getObjectInstance(javax.management.ObjectName)
-	 */
-	public ObjectInstance getObjectInstance(ObjectName name) throws InstanceNotFoundException, IOException {
-		try {
-			return (ObjectInstance) clientConnection.execute("getObjectInstance", new Object[] {name});
-		} catch (XmlRpcException e) {
-			throw new IOException(e.getMessage());
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#queryMBeans(javax.management.ObjectName, javax.management.QueryExp)
-	 */
-	public Set queryMBeans(ObjectName name, QueryExp query) throws IOException {
-		try {
-			return (Set) clientConnection.execute("queryMBeans", new Object[] {name, query});
-		} catch (XmlRpcException e) {
-			throw new IOException(e.getMessage());
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#queryNames(javax.management.ObjectName, javax.management.QueryExp)
-	 */
-	public Set queryNames(ObjectName name, QueryExp query) throws IOException {
-		try {
-			return (Set) clientConnection.execute("queryNames", new Object[] {name, query});
-		} catch (XmlRpcException e) {
-			throw new IOException(e.getMessage());
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#isRegistered(javax.management.ObjectName)
-	 */
-	public boolean isRegistered(ObjectName name) throws IOException {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#getMBeanCount()
-	 */
-	public Integer getMBeanCount() throws IOException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#getAttribute(javax.management.ObjectName, java.lang.String)
-	 */
-	public Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException, IOException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#getAttributes(javax.management.ObjectName, java.lang.String[])
-	 */
-	public AttributeList getAttributes(ObjectName name, String[] attributes) throws InstanceNotFoundException, ReflectionException, IOException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#setAttribute(javax.management.ObjectName, javax.management.Attribute)
-	 */
-	public void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException, IOException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#setAttributes(javax.management.ObjectName, javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(ObjectName name, AttributeList attributes) throws InstanceNotFoundException, ReflectionException, IOException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException, IOException {
-		try {
-			// split class name from object name to prepend with method name
-			return clientConnection.execute(name + "|" + operationName, params == null ? new Object[0] : params);
-		} catch (Exception e) {
-			throw new IOException(e.getMessage());
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#getDefaultDomain()
-	 */
-	public String getDefaultDomain() throws IOException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#getDomains()
-	 */
-	public String[] getDomains() throws IOException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#addNotificationListener(javax.management.ObjectName, javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, IOException {
-		notificationHandler.addNotificationListener(name, listener, filter, handback);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#addNotificationListener(javax.management.ObjectName, javax.management.ObjectName, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, IOException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#removeNotificationListener(javax.management.ObjectName, javax.management.ObjectName)
-	 */
-	public void removeNotificationListener(ObjectName name, ObjectName listener) throws InstanceNotFoundException, ListenerNotFoundException, IOException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#removeNotificationListener(javax.management.ObjectName, javax.management.ObjectName, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void removeNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException, IOException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#removeNotificationListener(javax.management.ObjectName, javax.management.NotificationListener)
-	 */
-	public void removeNotificationListener(ObjectName name, NotificationListener listener) throws InstanceNotFoundException, ListenerNotFoundException, IOException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#removeNotificationListener(javax.management.ObjectName, javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void removeNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException, IOException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#getMBeanInfo(javax.management.ObjectName)
-	 */
-	public MBeanInfo getMBeanInfo(ObjectName name) throws InstanceNotFoundException, IntrospectionException, ReflectionException, IOException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServerConnection#isInstanceOf(javax.management.ObjectName, java.lang.String)
-	 */
-	public boolean isInstanceOf(ObjectName name, String className) throws InstanceNotFoundException, IOException {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.client.remote.RemoteMBeanConnection#retrieveNotifications(long)
-	 */
-	public NamedNotification[] retrieveNotifications(long startId) {
-		try {
-			Object obj = clientConnection.execute("retrieveNotifications", new Object[] {new Long(startId)});
-			if (obj instanceof Object[]) {
-				Object[] objs = (Object[]) obj;
-				NamedNotification[] result = new NamedNotification[objs.length];
-				for (int i = 0; i < objs.length; i++) {
-					if (objs[i] instanceof NamedNotification) {
-						result[i] = (NamedNotification) objs[i];
-					}
-				}
-				return result;
-
-			}
-		} catch (XmlRpcException e) {
-		}
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.client/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/.project b/eclipse/plugins/org.eclipse.equinox.jmx.client/.project
deleted file mode 100644
index 079e304..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.client</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.client/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 60f5598..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,309 +0,0 @@
-#Thu May 10 14:05:31 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.client/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 381b003..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:26:20 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/JMX Client.launch b/eclipse/plugins/org.eclipse.equinox.jmx.client/JMX Client.launch
deleted file mode 100644
index c4544f1..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/JMX Client.launch	
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
-<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
-<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8"?>
<sourceLookupDirector>
<sourceContainers duplicates="true">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;External Plug-in Libraries&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.apache.commons.codec&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.commons.codec/commons-codec-1.2.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.apache.commons.httpclient&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.commons.httpclient/commons-httpclient-3.0-rc2.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.apache.commons.logging&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.commons.logging/commons-logging.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.commons.logging/commons-logging-api.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.apache.ws.commons.util&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.ws.commons.util/commons-util.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.apache.ws.jaxme&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.ws.jaxme/jaxme2-0.5.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.ws.jaxme/jaxme2-rt-0.5.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.ws.jaxme/jaxmeapi-0.5.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.ws.jaxme/jaxmejs-0.5.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.ws.jaxme/jaxmepm-0.5.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.ws.jaxme/jaxmexs-0.5.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.apache.xmlrpc&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=org.apache.xmlrpc/xmlrpc-3.0a1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.core.resources.jmx&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.client&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.client.rmi&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.client.xmlrpc&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.common&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.server&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.server.rmi&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.server.xmlrpc&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.jmx.vm&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.equinox.preferences.jmx&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.osgi.jmx&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;org.eclipse.swt.jmx&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;classpathContainer path=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.5.0_03&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.classpathContainer"/>
</sourceContainers>
</sourceLookupDirector>
"/>
-<booleanAttribute key="usefeatures" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<booleanAttribute key="useProduct" value="true"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.eclipse.equinox.jmx.server.xmlrpc,org.eclipse.swt.jmx,org.eclipse.equinox.jmx.server,org.eclipse.osgi.jmx,org.eclipse.equinox.preferences.jmx,org.eclipse.equinox.jmx.server.rmi,org.eclipse.core.resources.jmx,org.eclipse.equinox.jmx.vm"/>
-<stringAttribute key="vminstall" value="jdk1.5.0_06"/>
-<booleanAttribute key="tracing" value="false"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-</listAttribute>
-<stringAttribute key="selected_target_plugins" value="com.example.ps,com.ibm.icu,com.ibm.icu.source,com.ibm.jxesupport,com.jcraft.jsch,com.teaminabox.eclipse.sortit,org.apache.ant,org.apache.lucene,org.eclipse.ant.core,org.eclipse.ant.ui,org.eclipse.compare,org.eclipse.core.boot,org.eclipse.core.commands,org.eclipse.core.contenttype,org.eclipse.core.expressions,org.eclipse.core.filebuffers,org.eclipse.core.filesystem,org.eclipse.core.filesystem.win32.x86,org.eclipse.core.jobs,org.eclipse.core.resources,org.eclipse.core.resources.compatibility,org.eclipse.core.resources.spysupport,org.eclipse.core.resources.win32,org.eclipse.core.runtime,org.eclipse.core.runtime.compatibility,org.eclipse.core.runtime.compatibility.auth,org.eclipse.core.runtime.compatibility.registry,org.eclipse.core.tools,org.eclipse.core.tools.resources,org.eclipse.core.variables,org.eclipse.debug.core,org.eclipse.debug.ui,org.eclipse.equinox.common,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.help,org.eclipse.help.appserver,org.eclipse.help.base,org.eclipse.help.ui,org.eclipse.help.webapp,org.eclipse.html.editor,org.eclipse.jdt,org.eclipse.jdt.apt.core,org.eclipse.jdt.apt.ui,org.eclipse.jdt.core,org.eclipse.jdt.core.manipulation,org.eclipse.jdt.debug,org.eclipse.jdt.debug.ui,org.eclipse.jdt.doc.isv,org.eclipse.jdt.doc.user,org.eclipse.jdt.junit,org.eclipse.jdt.junit.runtime,org.eclipse.jdt.junit4.runtime,org.eclipse.jdt.launching,org.eclipse.jdt.launching.j9,org.eclipse.jdt.source,org.eclipse.jdt.ui,org.eclipse.jface,org.eclipse.jface.databinding,org.eclipse.jface.text,org.eclipse.ltk.core.refactoring,org.eclipse.ltk.ui.refactoring,org.eclipse.osgi,org.eclipse.osgi.services,org.eclipse.osgi.util,org.eclipse.pde,org.eclipse.pde.build,org.eclipse.pde.core,org.eclipse.pde.doc.user,org.eclipse.pde.junit.runtime,org.eclipse.pde.runtime,org.eclipse.pde.source,org.eclipse.pde.ui,org.eclipse.platform,org.eclipse.platform.doc.isv,org.eclipse.platform.doc.user,org.eclipse.platform.source,org.eclipse.platform.source.win32.win32.x86,org.eclipse.rcp,org.eclipse.rcp.source,org.eclipse.rcp.source.win32.win32.x86,org.eclipse.releng.tools,org.eclipse.sdk,org.eclipse.search,org.eclipse.swt,org.eclipse.swt.win32.win32.x86,org.eclipse.team.core,org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui,org.eclipse.text,org.eclipse.tomcat,org.eclipse.ui,org.eclipse.ui.browser,org.eclipse.ui.cheatsheets,org.eclipse.ui.console,org.eclipse.ui.editors,org.eclipse.ui.externaltools,org.eclipse.ui.forms,org.eclipse.ui.ide,org.eclipse.ui.intro,org.eclipse.ui.intro.universal,org.eclipse.ui.navigator,org.eclipse.ui.navigator.resources,org.eclipse.ui.presentations.r21,org.eclipse.ui.views,org.eclipse.ui.views.properties.tabbed,org.eclipse.ui.win32,org.eclipse.ui.workbench,org.eclipse.ui.workbench.compatibility,org.eclipse.ui.workbench.texteditor,org.eclipse.update.configurator,org.eclipse.update.core,org.eclipse.update.core.win32,org.eclipse.update.scheduler,org.eclipse.update.ui,org.junit,org.junit4,org.klomp.eclipse.formatjava"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<booleanAttribute key="automaticAdd" value="true"/>
-<stringAttribute key="checked" value="[NONE]"/>
-<stringAttribute key="location" value="${system_property:user.home}/runtime-JMX_Client"/>
-<stringAttribute key="configLocation" value=""/>
-<booleanAttribute key="clearws" value="false"/>
-<stringAttribute key="pde.version" value="3.2a"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-consoleLog -nosplash -console"/>
-<stringAttribute key="templateConfig" value=""/>
-<booleanAttribute key="default" value="false"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="includeOptional" value="true"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.client/META-INF/MANIFEST.MF
deleted file mode 100644
index c8cc967..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,28 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring Client Plug-in (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.client;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.equinox.jmx.internal.client.Activator
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.ui.forms
-Eclipse-LazyStart: true
-Bundle-Vendor: Eclipse.org
-Import-Package: javax.management,
- javax.management.loading,
- javax.management.modelmbean,
- javax.management.monitor,
- javax.management.openmbean,
- javax.management.relation,
- javax.management.remote,
- javax.management.remote.rmi,
- javax.management.timer,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.common.util
-Export-Package: org.eclipse.equinox.jmx.client,
- org.eclipse.equinox.jmx.client.remote
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.client/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.client/build.properties
deleted file mode 100644
index 0c8e2cc..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/build.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               plugin.properties,\
-               icons/,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/contribution_desc_view.gif b/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/contribution_desc_view.gif
deleted file mode 100644
index e4c2a83..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/contribution_desc_view.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/contributions_view.gif b/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/contributions_view.gif
deleted file mode 100644
index 6fe6f0e..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/contributions_view.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/perspective.gif b/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/perspective.gif
deleted file mode 100644
index ec6cca4..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.client/icons/perspective.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/plugin.properties b/eclipse/plugins/org.eclipse.equinox.jmx.client/plugin.properties
deleted file mode 100644
index 8cff7c6..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/plugin.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-clientPerspectiveName = JMX Resource Management
-# Connection action set and menu labels
-connectionActionSet = JMX Servers
-connectionMenu = JMX Server
-newConnectionAction = Open Connection
-# View names
-contributionsViewName = Contributions
-mbeanInfoViewName = Contribution MBean Description
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/plugin.xml b/eclipse/plugins/org.eclipse.equinox.jmx.client/plugin.xml
deleted file mode 100644
index 1be9f3f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/plugin.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension-point id="transport" name="JMX Transport" schema="schema/transport.exsd"/>
-   <extension
-         point="org.eclipse.ui.perspectives">
-      <perspective
-            class="org.eclipse.equinox.jmx.internal.client.ui.ClientPerspectiveFactory"
-            fixed="true"
-            icon="icons/perspective.gif"
-            id="org.eclipse.equinox.jmx.client.ui.ClientPerspectiveFactory"
-            name="%clientPerspectiveName"/>
-   </extension>
-   <!-- Perspective extensions -->
-    <extension
-         point="org.eclipse.ui.perspectiveExtensions">
-      <perspectiveExtension targetID="org.eclipse.equinox.jmx.client.ui.ClientPerspectiveFactory">
-    	 	 <!-- Load perspective specific action set -->
-         <actionSet id="org.eclipse.equinox.jmx.client.ui.actions.ClientActionSet"/>
-      </perspectiveExtension>
-   </extension>
-   <!-- UI Action sets -->
-   <extension
-         point="org.eclipse.ui.actionSets">
-      <actionSet
-            description="Manage JMX Connections"
-            id="org.eclipse.equinox.jmx.client.ui.actions.ClientActionSet"
-            label="%connectionActionSet"
-            visible="false">
-         <menu
-               id="jmxclient.main"
-               label="%connectionMenu"
-               path="additions">
-            <separator name="group1"/>
-         </menu>
-         <action
-               class="org.eclipse.equinox.jmx.internal.client.ui.actions.NewConnectionAction"
-               id="org.eclipse.equinox.jmx.client.ui.actions.NewConnectionAction"
-               label="%newConnectionAction"
-               menubarPath="jmxclient.main/group1"
-               style="push"/>
-      </actionSet>
-   </extension>
-   <extension
-         point="org.eclipse.ui.views">
-      <view
-            allowMultiple="false"
-            class="org.eclipse.equinox.jmx.internal.client.ui.contributionsview.ContributionsViewPart"
-            icon="icons/contributions_view.gif"
-            id="org.eclipse.equinox.jmx.client.ui.contributionsview"
-            name="%contributionsViewName">
-      </view>
-      <view
-            allowMultiple="false"
-            class="org.eclipse.equinox.jmx.internal.client.ui.mbeaninfoview.MBeanInfoViewPart"
-            icon="icons/contribution_desc_view.gif"
-            id="org.eclipse.equinox.jmx.client.ui.mbeaninfoview"
-            name="%mbeanInfoViewName"/>
-      <view
-            allowMultiple="false"
-            class="org.eclipse.equinox.jmx.internal.client.ui.invocationView.InvocationView"
-            icon="icons/perspective.gif"
-            id="org.eclipse.equinox.jmx.client.ui.invocationView"
-            name="Invocation View"/>
-   </extension>
-  
- </plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/schema/transport.exsd b/eclipse/plugins/org.eclipse.equinox.jmx.client/schema/transport.exsd
deleted file mode 100644
index 6bf155a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/schema/transport.exsd
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.equinox.jmx.client">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.equinox.jmx.client" id="transport" name="JMX Transport"/>
-      </appInfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence minOccurs="0" maxOccurs="unbounded">
-            <element ref="transport"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="transport">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.equinox.jmx.client.IJMXConnectorProvider"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="protocol" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/IJMXConnectorProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/IJMXConnectorProvider.java
deleted file mode 100644
index 1744414..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/IJMXConnectorProvider.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client;
-
-import java.net.MalformedURLException;
-import javax.management.remote.JMXConnectorProvider;
-import javax.management.remote.JMXServiceURL;
-
-public interface IJMXConnectorProvider extends JMXConnectorProvider {
-	public JMXServiceURL getJMXServiceURL(String host, int port, String protocol, String domain) throws MalformedURLException;
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/remote/RemoteMBeanConnection.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/remote/RemoteMBeanConnection.java
deleted file mode 100644
index 72d498e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/remote/RemoteMBeanConnection.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.remote;
-
-import java.io.IOException;
-import org.eclipse.equinox.jmx.common.NamedNotification;
-
-public interface RemoteMBeanConnection {
-	public NamedNotification[] retrieveNotifications(long startId) throws IOException;
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/remote/RemoteNotificationHandler.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/remote/RemoteNotificationHandler.java
deleted file mode 100644
index 559765a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/client/remote/RemoteNotificationHandler.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.client.remote;
-
-import java.util.*;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.NamedNotification;
-import org.eclipse.equinox.jmx.internal.client.Activator;
-
-public class RemoteNotificationHandler {
-
-	private int NOTIFICATION_RETRIEVAL_INTERVAL = 5000;
-
-	private final Map objectNameListeners = new HashMap();
-	private final NotificationRetriever retriever = new NotificationRetriever();
-	private final NotificationDispatcher dispatcher = new NotificationDispatcher();
-	private final RemoteMBeanConnection connection;
-	private boolean started;
-
-	public RemoteNotificationHandler(RemoteMBeanConnection connection) {
-		this.connection = connection;
-	}
-
-	public void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) {
-		if (!started) {
-			start();
-		}
-		synchronized (objectNameListeners) {
-			List listeners = null;
-			if ((listeners = (List) objectNameListeners.get(name)) == null) {
-				listeners = new ArrayList();
-				objectNameListeners.put(name, listeners);
-			}
-			listeners.add(listener);
-		}
-	}
-
-	public synchronized void start() {
-		if (started) {
-			return;
-		}
-		started = true;
-		retriever.start();
-		dispatcher.start();
-	}
-
-	public synchronized void stop() {
-		started = false;
-	}
-
-	private void dispatchNotification(NamedNotification notification) {
-		ObjectName name = notification.getObjectName();
-		synchronized (objectNameListeners) {
-			List listeners = (List) objectNameListeners.get(name);
-			if (listeners != null) {
-				Iterator iter = listeners.iterator();
-				while (iter.hasNext()) {
-					((NotificationListener) iter.next()).handleNotification(notification, null);
-				}
-			}
-		}
-	}
-
-	private class NotificationRetriever extends Thread {
-
-		private long startId;
-
-		public NotificationRetriever() {
-			super();
-		}
-
-		public void run() {
-			while (started) {
-				try {
-					NamedNotification[] result = connection.retrieveNotifications(startId);
-					if (result.length > 0) {
-						dispatcher.dispatchNotifications(result);
-						startId = result[result.length - 1].getNotificationId() + 1;
-						synchronized (this) {
-							this.wait(NOTIFICATION_RETRIEVAL_INTERVAL);
-						}
-					}
-				} catch (Exception e) {
-					Activator.log(e);
-					break;
-				}
-			}
-			started = false;
-		}
-	}
-
-	private class NotificationDispatcher extends Thread {
-
-		private List notificationQueue = new ArrayList();
-
-		public NotificationDispatcher() {
-			super();
-		}
-
-		public void dispatchNotifications(NamedNotification[] notifications) {
-			synchronized (notificationQueue) {
-				boolean added = false;
-				for (int i = 0; i < notifications.length; i++) {
-					if (notifications[i] != null) {
-						added |= notificationQueue.add(notifications[i]);
-					}
-				}
-				if (added) {
-					notificationQueue.notifyAll();
-				}
-			}
-		}
-
-		public void run() {
-			outer: while (started && !Thread.currentThread().isInterrupted()) {
-				synchronized (notificationQueue) {
-					while (notificationQueue.isEmpty()) {
-						try {
-							notificationQueue.wait();
-						} catch (InterruptedException e) {
-							Activator.log(e);
-							Thread.currentThread().interrupt();
-							continue outer;
-						}
-					}
-					while (notificationQueue.size() > 0) {
-						NamedNotification nn = (NamedNotification) notificationQueue.remove(0);
-						dispatchNotification(nn);
-					}
-				}
-			}
-			started = false;
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/Activator.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/Activator.java
deleted file mode 100644
index e77f414..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/Activator.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client;
-
-import java.util.StringTokenizer;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.equinox.jmx.common.JMXConstants;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator for this bundle.
- */
-public class Activator extends AbstractUIPlugin {
-
-	public static final String PI_NAMESPACE = "org.eclipse.equinox.jmx.client"; //$NON-NLS-1$
-	public static final String PT_TRANSPORT = "transport"; //$NON-NLS-1$
-
-	static final String CONNECTION_PREFERENCE_DELIMITER = ","; //$NON-NLS-1$
-	static final String CONNECTION_PREFERENCE_NAME = "jmxserviceurl"; //$NON-NLS-1$
-	static final String DELIM = ":"; //$NON-NLS-1$
-
-	//The shared instance.
-	private static Activator singleton;
-
-	/**
-	 * The constructor.
-	 */
-	public Activator() {
-		singleton = this;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-		singleton = null;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 *
-	 * @return the shared instance.
-	 */
-	public static Activator getDefault() {
-		return singleton;
-	}
-
-	/**
-	 * Returns an image descriptor for the image file at the given
-	 * bundle relative path.
-	 *
-	 * @param path the path
-	 * @return the image descriptor
-	 */
-	public static ImageDescriptor getImageDescriptor(String path) {
-		return AbstractUIPlugin.imageDescriptorFromPlugin(PI_NAMESPACE, path);
-	}
-
-	/**
-	 * Log to this bundle's log file.
-	 * 
-	 * @param message The message to log.
-	 * @param exception The exception to log.
-	 * @param iStatusSeverity The <code>IStatus</code> severity level.
-	 */
-	public static void log(String message, Throwable exception, int iStatusSeverity) {
-		getDefault().getLog().log(new Status(iStatusSeverity, PI_NAMESPACE, 0, message, exception));
-	}
-
-	/**
-	 * Logs the message to this bundle's log file with
-	 * status <code>IStatus.ERROR</code>.
-	 * 
-	 * @param message The message to log.
-	 * @param exception The thrown exception.
-	 */
-	public static void logError(String message, Throwable exception) {
-		log(message, exception, IStatus.ERROR);
-	}
-
-	/**
-	 * Logs the message to this bundle's log file with
-	 * status <code>IStatus.ERROR</code>.
-	 * 
-	 * @param exception The thrown exception.
-	 */
-	public static void logError(Throwable exception) {
-		String message = exception.getMessage();
-		if (message == null)
-			message = "Exception occurred.";
-		log(message, exception, IStatus.ERROR);
-	}
-
-	/**
-	 * Logs the message to this bundle's log file with
-	 * status <code>IStatus.INFO</code>.
-	 * 
-	 * @param message The message to log.
-	 */
-	public static void log(String message) {
-		log(message, null, IStatus.INFO);
-	}
-
-	/**
-	 * Logs the throwable to this bundle's log file with
-	 * status <code>IStatus.INFO</code>.
-	 * 
-	 * @param exception The thrown exception.
-	 */
-	public static void log(Throwable exception) {
-		logError(exception.getMessage(), exception);
-	}
-
-	public String[] getConnectionPreference() {
-		return convertConnectionPreference();
-	}
-
-	private String[] convertConnectionPreference() {
-		StringTokenizer st = new StringTokenizer(getPreferenceStore().getString(CONNECTION_PREFERENCE_NAME), CONNECTION_PREFERENCE_DELIMITER);
-		String[] ret = new String[st.countTokens()];
-		for (int i = 0; i < ret.length; i++) {
-			ret[i] = st.nextToken();
-		}
-		return ret;
-	}
-
-	public String getDefaultConnectionPreference() {
-		return getPreferenceStore().getDefaultString(CONNECTION_PREFERENCE_NAME);
-	}
-
-	public void setConnectionPreferences(String[] connections) {
-		StringBuffer sbuf = new StringBuffer();
-		for (int i = 0; i < connections.length; i++) {
-			sbuf.append(connections[i]).append(CONNECTION_PREFERENCE_DELIMITER);
-		}
-		getPreferenceStore().setValue(CONNECTION_PREFERENCE_NAME, sbuf.toString());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeDefaultPreferences(org.eclipse.jface.preference.IPreferenceStore)
-	 */
-	protected void initializeDefaultPreferences(IPreferenceStore store) {
-		store.setDefault(CONNECTION_PREFERENCE_NAME, "service:jmx:rmi:///jndi/rmi://127.0.0.1:8118/" + JMXConstants.DEFAULT_DOMAIN);
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/MBeanServerProxy.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/MBeanServerProxy.java
deleted file mode 100644
index a8a779f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/MBeanServerProxy.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client;
-
-import java.io.IOException;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.ContributionProxy;
-import org.eclipse.equinox.jmx.common.RootContribution;
-
-/**
- * Provides a more generic and user-friendly interface
- * to the operations exposed by the jmx server.
- * 
- * @since 1.0
- */
-public class MBeanServerProxy {
-
-	private final MBeanServerConnection server;
-
-	/**
-	 * Allocate a <code>ServiceContributionProxy</code> which interfaces with the provided <code>server</code>.
-	 * 
-	 * @param server The <code>JMXConnectorServer</code> this proxy interfaces with.
-	 */
-	public MBeanServerProxy(MBeanServerConnection server) {
-		this.server = server;
-	}
-
-	/**
-	 * Get the <code>MBeanServerConnection</code> associated with this proxy.
-	 * 
-	 * @return The <code>MBeanServerConnection</code>.
-	 */
-	public MBeanServerConnection getMBeanServerConnection() {
-		return server;
-	}
-
-	/**
-	 * Convenience method for retrieving the <code>ContributionProxy</code> objects which form the root level
-	 * of the contribution view.
-	 * 
-	 * @return The root <code>ContributionProxy</code> objects.
-	 * @throws InstanceNotFoundException
-	 * @throws MBeanException
-	 * @throws ReflectionException
-	 * @throws IOException
-	 */
-	public ContributionProxy[] getRootContributions() throws InstanceNotFoundException, MBeanException, ReflectionException, IOException {
-		Object result = getMBeanServerConnection().invoke(RootContribution.OBJECT_NAME, RootContribution.OP_GET_ROOT_CONTRIBUTIONS, null, null);
-		if (result instanceof ContributionProxy[]) {
-			return (ContributionProxy[]) result;
-		} else if (result instanceof Object[]) {
-			Object objProxies[] = (Object[]) result;
-			ContributionProxy[] proxies = new ContributionProxy[objProxies.length];
-			for (int i = 0; i < objProxies.length; i++) {
-				if (objProxies[i] instanceof ContributionProxy) {
-					proxies[i] = (ContributionProxy) objProxies[i];
-				}
-			}
-			return proxies;
-		}
-		return null;
-	}
-
-	public RootContribution getRootContribution() throws InstanceNotFoundException, MBeanException, ReflectionException, IOException {
-		return (RootContribution) getMBeanServerConnection().invoke(RootContribution.OBJECT_NAME, RootContribution.OP_GET_ROOT_CONTRIBUTION, null, null);
-	}
-
-	/**
-	 * Convenience method for invoking a method on the <code>Contribution</code> resource on the server.  The object name
-	 * of the <code>Contribution</code> mbean is contained within the <code>ContributionProxy</code> that is supplied
-	 * as an argument.
-	 * 
-	 * @param contribution The <code>ContributionProxy</code> which provides the <code>ObjectName</code> of the <code>Contribution</code>
-	 * mbean to invoke.
-	 * @param methodName The name of the method to invoke.
-	 * @param args The list of arguments to the method to invoke.
-	 * @param argsSignature The list of argument types that are provided to the method to invoke.
-	 * @return The <code>Object</code> returned by the method or null if none.
-	 * @throws InstanceNotFoundException
-	 * @throws MBeanException
-	 * @throws ReflectionException
-	 * @throws IOException
-	 * @throws NotCompliantMBeanException
-	 */
-	public Object invokeContributionOperation(ContributionProxy contribution, String methodName, Object[] args, String[] argsSignature) throws InstanceNotFoundException, MBeanException, ReflectionException, IOException, NotCompliantMBeanException {
-		return getMBeanServerConnection().invoke(contribution.getObjectName(), methodName, args, argsSignature);
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/ClientPerspectiveFactory.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/ClientPerspectiveFactory.java
deleted file mode 100644
index be5f375..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/ClientPerspectiveFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui;
-
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-/**
- * @since 1.0
- */
-public class ClientPerspectiveFactory implements IPerspectiveFactory {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
-	 */
-	public void createInitialLayout(IPageLayout layout) {
-		layout.setEditorAreaVisible(false);
-
-		layout.addView(ClientUI.VIEWID_CONTRIBUTIONS, IPageLayout.LEFT, 0.3f, layout.getEditorArea());
-		layout.addView(ClientUI.VIEWID_MBEANINFO, IPageLayout.TOP, 0.75f, layout.getEditorArea());
-		layout.addView(ClientUI.VIEWID_INVOCATION, IPageLayout.BOTTOM, 0.25f, layout.getEditorArea());
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/ClientUI.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/ClientUI.java
deleted file mode 100644
index 484b81c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/ClientUI.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui;
-
-/**
- * <p>
- * This class provides static methods and fields only; it is not intended to be
- * instantiated or subclassed by clients.
- * </p>
- * 
- * @since 1.0
- */
-public final class ClientUI {
-
-	// disallow instantiations
-	private ClientUI() {
-		super();
-	}
-
-	//view ids
-	public static final String VIEWID_CONTRIBUTIONS = "org.eclipse.equinox.jmx.client.ui.contributionsview"; //$NON-NLS-1$
-	public static final String VIEWID_MBEANINFO = "org.eclipse.equinox.jmx.client.ui.mbeaninfoview"; //$NON-NLS-1$
-	public static final String VIEWID_INVOCATION = "org.eclipse.equinox.jmx.client.ui.invocationView"; //$NON-NLS-1$
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ActionMessages.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ActionMessages.java
deleted file mode 100644
index 913cf17..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ActionMessages.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.actions;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public class ActionMessages extends NLS {
-
-	public static String disconnect_action;
-	public static String openconnection_action;
-	public static String connection_closed;
-	public static String server_closed_connection;
-	public static String error_message;
-	public static String info_message;
-	public static String local_mbean_server;
-	public static String host;
-	public static String port;
-	public static String invalid_host;
-	public static String invalid_port;
-	public static String no_url_selected;
-	public static String add_jmx_service_url;
-	public static String url_exists;
-	public static String remove_jmx_service_url;
-	public static String connect_host;
-	public static String connection_selection_dialog_title;
-	public static String no_transports_available;
-
-	// disallow instantiations
-	private ActionMessages() {
-		super();
-	}
-
-	static {
-		NLS.initializeMessages(ActionMessages.class.getName(), ActionMessages.class);
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ActionMessages.properties b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ActionMessages.properties
deleted file mode 100644
index 6186897..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ActionMessages.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-disconnect_action = Disconnect
-openconnection_action = Open Connection
-connection_closed = Connection closed.
-server_closed_connection = Server closed the connection.
-host = Host
-port = Port
-invalid_host = Invalid host.
-invalid_port = Invalid port number.
-local_mbean_server = A JMX server has been located in the current VM, connect to this server?
-add_jmx_service_url = Add URL
-url_exists = JMX Service URL exists.
-no_url_selected = No URL selected.
-remove_jmx_service_url = Remove URL
-connect_host = Connect
-error_message = Error
-info_message = Information
-connection_selection_dialog_title = Connect to JMX Server
-no_transports_available = No transports available.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ConnectionSelectionDialog.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ConnectionSelectionDialog.java
deleted file mode 100644
index 4f6f954..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/ConnectionSelectionDialog.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.actions;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Iterator;
-import java.util.Map;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXServiceURL;
-import org.eclipse.equinox.jmx.client.IJMXConnectorProvider;
-import org.eclipse.equinox.jmx.common.JMXConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.dialogs.SelectionDialog;
-
-/**
- * @since 1.0
- */
-public class ConnectionSelectionDialog extends SelectionDialog {
-
-	// sizing constants
-	private final static int SIZING_SELECTION_WIDGET_HEIGHT = 250;
-	private final static int SIZING_SELECTION_WIDGET_WIDTH = 300;
-
-	private JMXConnector connector;
-
-	private Text hostText, portText;
-	private Combo transport;
-	private Shell parent;
-	private final Map transports;
-
-	public ConnectionSelectionDialog(Shell parentShell, Map transports) {
-		super(parentShell);
-		this.transports = transports;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.dialogs.SelectionDialog#configureShell(org.eclipse.swt.widgets.Shell)
-	 */
-	protected void configureShell(Shell shell) {
-		super.configureShell(shell);
-		shell.setText(ActionMessages.connection_selection_dialog_title);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
-	 */
-	protected Control createDialogArea(final Composite parent) {
-		this.parent = parent.getShell();
-		Composite composite = (Composite) super.createDialogArea(parent);
-		Font font = parent.getFont();
-		composite.setFont(font);
-
-		createMessageArea(composite);
-
-		GridData data = new GridData(GridData.FILL_BOTH);
-		data.heightHint = SIZING_SELECTION_WIDGET_HEIGHT;
-		data.widthHint = SIZING_SELECTION_WIDGET_WIDTH;
-
-		Composite fieldComposite = new Composite(composite, SWT.NULL);
-		fieldComposite.setLayout(new GridLayout(5, false));
-		// 1 host label
-		Label label = new Label(fieldComposite, SWT.CENTER);
-		label.setText(ActionMessages.host);
-		// 2 host text entry
-		hostText = new Text(fieldComposite, SWT.BORDER);
-		hostText.setText("localhost");
-		hostText.selectAll();
-		data = new GridData();
-		data.widthHint = convertWidthInCharsToPixels(25);
-		hostText.setLayoutData(data);
-		// 3 port label
-		label = new Label(fieldComposite, SWT.CENTER);
-		label.setText(ActionMessages.port);
-		// 4 port text entry
-		portText = new Text(fieldComposite, SWT.BORDER);
-		portText.setTextLimit(5);
-		portText.setText(JMXConstants.DEFAULT_PORT);
-		data = new GridData();
-		data.widthHint = convertWidthInCharsToPixels(6);
-		portText.setLayoutData(data);
-		// 5 protocol selection combo box
-		transport = new Combo(fieldComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		// add transport provided as extensions to supported list
-		Iterator iter = transports.keySet().iterator();
-		while (iter.hasNext()) {
-			transport.add((String) iter.next());
-		}
-		transport.select(0);
-		return composite;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
-	 */
-	protected void okPressed() {
-		if (hostText.getText().equals("")) { //$NON-NLS-1$
-			MessageDialog.openError(parent.getShell(), ActionMessages.error_message, ActionMessages.invalid_host);
-			return;
-		}
-		try {
-			InetAddress.getByName(hostText.getText());
-		} catch (UnknownHostException e) {
-			MessageDialog.openError(parent.getShell(), ActionMessages.error_message, ActionMessages.invalid_host);
-			return;
-		}
-		if (portText.getText().equals("")) { //$NON-NLS-1$
-			MessageDialog.openError(parent.getShell(), ActionMessages.error_message, ActionMessages.invalid_port);
-			return;
-		}
-		int port;
-		try {
-			port = Integer.parseInt(portText.getText());
-			if (port < 1 || port > 0xffff) {
-				throw new NumberFormatException();
-			}
-		} catch (NumberFormatException e) {
-			MessageDialog.openError(parent.getShell(), ActionMessages.error_message, ActionMessages.invalid_port);
-			return;
-		}
-		try {
-			IJMXConnectorProvider ctorp = (IJMXConnectorProvider) transports.get(transport.getText());
-			JMXServiceURL url = ctorp.getJMXServiceURL(hostText.getText(), port, transport.getText(), JMXConstants.DEFAULT_DOMAIN);
-			connector = ctorp.newJMXConnector(url, null);
-		} catch (Exception e) {
-			MessageDialog.openError(null, ActionMessages.error_message, e.getMessage());
-			super.cancelPressed();
-			return;
-		}
-		super.okPressed();
-	}
-
-	public JMXConnector getJMXConnector() {
-		return connector;
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/NewConnectionAction.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/NewConnectionAction.java
deleted file mode 100644
index 224f966..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/actions/NewConnectionAction.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.actions;
-
-import java.io.IOException;
-import java.util.*;
-import javax.management.*;
-import javax.management.remote.JMXConnector;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.client.IJMXConnectorProvider;
-import org.eclipse.equinox.jmx.common.JMXConstants;
-import org.eclipse.equinox.jmx.internal.client.Activator;
-import org.eclipse.equinox.jmx.internal.client.MBeanServerProxy;
-import org.eclipse.equinox.jmx.internal.client.ui.ClientUI;
-import org.eclipse.equinox.jmx.internal.client.ui.contributionsview.ContributionsViewPart;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.ui.*;
-
-/**
- * @since 1.0
- */
-public class NewConnectionAction implements IWorkbenchWindowActionDelegate {
-
-	protected IWorkbenchWindow window;
-	protected JMXConnector connector;
-	private MBeanServerProxy serverProxy;
-	private boolean connected;
-	private boolean isClosing;
-	private boolean isConnecting;
-	//container for available transports
-	private static Map transports;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
-	 */
-	public void init(IWorkbenchWindow window) {
-		this.window = window;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
-	 */
-	public void run(final IAction action) {
-		// invalidate the server proxy
-		serverProxy = null;
-		if (!connected) {
-			MBeanServer mbeanServer = findLocalMBeanServer();
-			if (mbeanServer != null) {
-				// ask if user wishes to connect to local server
-				if (MessageDialog.openConfirm(window.getShell(), ActionMessages.info_message, ActionMessages.local_mbean_server)) {
-					serverProxy = new MBeanServerProxy(mbeanServer);
-					action.setText(ActionMessages.connect_host);
-					connected = false;
-					loadContributionsView();
-					return;
-				}
-			}
-			// if we did not locate the server locally, prompt for location
-			if (serverProxy == null) {
-				loadTransportExtensions();
-				if (transports.size() == 0) {
-					MessageDialog.openInformation(null, ActionMessages.info_message, ActionMessages.no_transports_available);
-					return;
-				}
-				ConnectionSelectionDialog dialog = new ConnectionSelectionDialog(window.getShell(), transports);
-				if (dialog.open() != Window.OK) {
-					return;
-				}
-				try {
-					connector = dialog.getJMXConnector();
-					isConnecting = true;
-					connector.addConnectionNotificationListener(new NotificationListener() {
-						public void handleNotification(Notification notification, Object handback) {
-							if (isClosing || isConnecting) {
-								// receiving callback from user action
-								return;
-							}
-							connected = false;
-							connector = null;
-							serverProxy = null;
-							action.setText(ActionMessages.connect_host);
-							window.getShell().getDisplay().asyncExec(new Runnable() {
-								public void run() {
-									MessageDialog.openError(window.getShell(), ActionMessages.info_message, ActionMessages.server_closed_connection);
-								}
-							});
-						}
-					}, null, null);
-					connector.connect();
-					isConnecting = false;
-					serverProxy = new MBeanServerProxy(connector.getMBeanServerConnection());
-				} catch (Exception e) {
-					Activator.logError(e.getMessage(), e);
-					MessageDialog.openError(window.getShell(), ActionMessages.error_message, e.getMessage());
-				}
-			}
-			loadContributionsView();
-			connected = true;
-			action.setText(ActionMessages.disconnect_action);
-		} else {
-			// check if we must close a remote conneciton
-			if (connector != null) {
-				try {
-					isClosing = true;
-					connector.close();
-					isClosing = false;
-					connector = null;
-				} catch (IOException e) {
-					MessageDialog.openError(window.getShell(), ActionMessages.error_message, e.getMessage());
-					Activator.log(e);
-				}
-			}
-			connected = false;
-			serverProxy = null;
-			loadContributionsView();
-			action.setText(ActionMessages.connect_host);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
-	 */
-	public void selectionChanged(IAction action, ISelection selection) {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
-	 */
-	public void dispose() {
-	}
-
-	private MBeanServer findLocalMBeanServer() {
-		// null returns all mbeans servers in this vm, we do this because otherwise
-		// we would have to specify an agentID that is the domain name appended with
-		// the timestamp that the server was started.
-		ArrayList mbeanServers = MBeanServerFactory.findMBeanServer(null);
-		Iterator iter = mbeanServers.iterator();
-		while (iter.hasNext()) {
-			MBeanServer mbeanServer = (MBeanServer) iter.next();
-			if (mbeanServer.getDefaultDomain().equals(JMXConstants.DEFAULT_DOMAIN)) {
-				return mbeanServer;
-			}
-		}
-		return null;
-	}
-
-	private void loadContributionsView() {
-		try {
-			ContributionsViewPart contributionsView = (ContributionsViewPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ClientUI.VIEWID_CONTRIBUTIONS);
-			if (contributionsView != null) {
-				contributionsView.setMBeanServerProxy(serverProxy);
-			}
-		} catch (PartInitException e) {
-			Activator.log(e);
-		}
-	}
-
-	private static void loadTransportExtensions() {
-		if (transports == null) {
-			transports = new HashMap();
-		}
-		IExtensionPoint point = RegistryFactory.getRegistry().getExtensionPoint(Activator.PI_NAMESPACE, Activator.PT_TRANSPORT);
-		IExtension[] types = point.getExtensions();
-		for (int i = 0; i < types.length; i++) {
-			loadTransportConfigurationElements(types[i].getConfigurationElements());
-		}
-	}
-
-	private static void loadTransportConfigurationElements(IConfigurationElement[] configElems) {
-		for (int j = 0; j < configElems.length; j++) {
-			IConfigurationElement element = configElems[j];
-			final String elementName = element.getName();
-			String transport;
-			if (elementName.equals(Activator.PT_TRANSPORT) && null != element.getAttribute("class") //$NON-NLS-1$
-					&& null != (transport = element.getAttribute("protocol"))) //$NON-NLS-1$
-			{
-				try {
-					Object obj = element.createExecutableExtension("class"); //$NON-NLS-1$
-					if (obj instanceof IJMXConnectorProvider) {
-						transports.put(transport, obj);
-					}
-				} catch (CoreException e) {
-					Activator.log(e);
-				}
-			}
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/BundleStatusLabelDecorator.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/BundleStatusLabelDecorator.java
deleted file mode 100644
index 8138ff4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/BundleStatusLabelDecorator.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.contributionsview;
-
-import org.eclipse.equinox.jmx.internal.client.ui.viewsupport.*;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.graphics.*;
-
-/**
- * @since 1.0
- */
-public class BundleStatusLabelDecorator implements ILabelDecorator {
-
-	// don't worry about lazy-initialization as bundles are always in a state
-	private ImageRegistry registry = new ImageRegistry();
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt.graphics.Image, java.lang.Object)
-	 */
-	public Image decorateImage(Image image, Object element) {
-		int bundleState;
-		if ((bundleState = computeAdornments(element)) == 0) {
-			return image;
-		}
-		ImageDescriptor desc = new ImageImageDescriptor(image);
-		Rectangle rect = image.getBounds();
-		return registry.get(new BundleImageDescriptor(desc, bundleState, new Point(rect.width, rect.height)));
-	}
-
-	private int computeAdornments(Object element) {
-		return 0;//return (element instanceof ManagedBundleMBean) ? ((ManagedBundleMBean)element).getBundleState() : 0;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String, java.lang.Object)
-	 */
-	public String decorateText(String text, Object element) {
-		return text;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
-	 */
-	public void addListener(ILabelProviderListener listener) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
-	 */
-	public void dispose() {
-		// TODO Auto-generated method stub
-
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
-	 */
-	public boolean isLabelProperty(Object element, String property) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
-	 */
-	public void removeListener(ILabelProviderListener listener) {
-		// TODO Auto-generated method stub
-
-	}
-
-	public void decorate(Object element, IDecoration decoration) {
-		// TODO Auto-generated method stub
-
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionContentProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionContentProvider.java
deleted file mode 100644
index 52f2bd9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionContentProvider.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.contributionsview;
-
-import java.io.IOException;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.*;
-import org.eclipse.equinox.jmx.internal.client.Activator;
-import org.eclipse.equinox.jmx.internal.client.MBeanServerProxy;
-import org.eclipse.equinox.jmx.internal.client.ui.ClientUI;
-import org.eclipse.equinox.jmx.internal.client.ui.mbeaninfoview.MBeanInfoViewPart;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * @since 1.0
- */
-public class ContributionContentProvider implements ITreeContentProvider, NotificationListener {
-
-	private static final Object[] NO_CHILDS = new Object[0];
-	private MBeanServerProxy serverProxy;
-	private TreeViewer viewer;
-	private Hashtable objNameProxies = new Hashtable();
-
-	/**
-	 * Allocate and a <code>ContributionContentProvider</code>.
-	 */
-	public ContributionContentProvider(TreeViewer viewer, MBeanServerProxy serverProxy) {
-		super();
-		this.viewer = viewer;
-		this.serverProxy = serverProxy;
-	}
-
-	public void setServerContributionProxy(MBeanServerProxy serverProxy) {
-		// receiving updated proxy, clear current objectname table
-		removeListeners();
-		objNameProxies.clear();
-		this.serverProxy = serverProxy;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
-	 */
-	public Object[] getChildren(Object parentElement) {
-		if (parentElement instanceof ContributionProxy) {
-			ContributionProxy parentProxy = (ContributionProxy) parentElement;
-			try {
-				monitorProxies(new ContributionProxy[] {parentProxy});
-				MBeanServerConnection mbServer = serverProxy.getMBeanServerConnection();
-				ContributionProxy[] contribs = parentProxy.getChildContributions(mbServer);
-				monitorProxies(contribs);
-				Object[] ret = null;
-				if (contribs != null && contribs.length > 0) {
-					ret = new Object[contribs.length];
-					System.arraycopy(contribs, 0, ret, 0, ret.length);
-					return ret;
-				}
-			} catch (Exception e) {
-				Activator.logError(e);
-			}
-		} else if (parentElement instanceof ContributionProxy[]) {
-			try {
-				monitorProxies((ContributionProxy[]) parentElement);
-			} catch (Exception e) {
-				Activator.logError(e);
-			}
-			return (ContributionProxy[]) parentElement;
-		}
-		return NO_CHILDS;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
-	 */
-	public Object getParent(Object element) {
-		return element;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
-	 */
-	public boolean hasChildren(Object element) {
-		if (element instanceof ContributionProxyMBean && serverProxy != null) {
-			try {
-				ContributionProxy[] contribs = ((ContributionProxy) element).getChildContributions(serverProxy.getMBeanServerConnection());
-				return (contribs != null && contribs.length > 0);
-			} catch (Exception e) {
-				Activator.logError(e);
-			}
-		}
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-	 */
-	public Object[] getElements(Object inputElement) {
-		if (inputElement instanceof RootContribution) {
-			RootContribution rc = (RootContribution) inputElement;
-			try {
-				monitorProxies(new ContributionProxy[] {rc});
-			} catch (Exception e) {
-				Activator.log(e);
-			}
-			return getChildren(rc.queryRootContributions());
-		}
-		return getChildren(inputElement);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-	 */
-	public void dispose() {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-	 */
-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.NotificationListener#handleNotification(javax.management.Notification, java.lang.Object)
-	 */
-	public synchronized void handleNotification(Notification notification, Object handback) {
-		Object obj = notification.getSource();
-		if (!(obj instanceof ObjectName) || serverProxy == null) {
-			return;
-		}
-		final ObjectName objectName = (ObjectName) obj;
-		List proxiesRef = (List) objNameProxies.get(objectName);
-		if (proxiesRef == null) {
-			return;
-		}
-		final List proxies = new ArrayList(proxiesRef);
-		final Iterator iter = proxies.iterator();
-		String type = notification.getType();
-		if (type.equals(ContributionNotificationEvent.NOTIFICATION_UPDATED) || type.equals(ContributionNotificationEvent.NOTIFICATION_ADDED)) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					// check if updating the root contribution
-					if (proxies.size() == 1 && proxies.get(0) instanceof RootContribution) {
-						try {
-							// remove the previous root proxy from the list of monitored proxies
-							objNameProxies.remove(((RootContribution) viewer.getInput()).getObjectName());
-							viewer.setInput(serverProxy.getRootContribution());
-						} catch (Exception e) {
-							Activator.log(e);
-						}
-						return;
-					}
-					// not updating the root, therefore refresh all nodes
-					// that are references by the same object name
-					while (iter.hasNext()) {
-						ContributionProxy proxy = (ContributionProxy) iter.next();
-						try {
-							proxy.refresh(serverProxy.getMBeanServerConnection());
-							viewer.update(proxy, null);
-							viewer.refresh(proxy);
-						} catch (Exception e) {
-							Activator.log(e);
-						}
-					}
-				}
-			});
-		} else if (type.equals(ContributionNotificationEvent.NOTIFICATION_REMOVED)) {
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					objNameProxies.remove(objectName);
-					MBeanInfoViewPart vp = getMBeanInfoViewPart();
-					while (iter.hasNext()) {
-						ContributionProxy proxy = (ContributionProxy) iter.next();
-						// why doesnt remove emit a selection notification for the viewers...
-						// i am required to explicitly close the relevant views
-						viewer.remove(proxy);
-						// if viewing object that was removed, clear ui
-						if (vp != null) {
-							vp.contributionRemoved(proxy);
-						}
-					}
-				}
-
-				private MBeanInfoViewPart getMBeanInfoViewPart() {
-					return (MBeanInfoViewPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ClientUI.VIEWID_MBEANINFO);
-				}
-			});
-		}
-	}
-
-	private void monitorProxies(ContributionProxy[] proxies) throws InstanceNotFoundException, IOException {
-		for (int i = 0; i < proxies.length; i++) {
-			ObjectName name = proxies[i].getObjectName();
-			List l = null;
-			if ((l = (List) objNameProxies.get(name)) == null) {
-				l = new Vector(2);
-				serverProxy.getMBeanServerConnection().addNotificationListener(name, this, null, null);
-				objNameProxies.put(name, l);
-			}
-			l.add(proxies[i]);
-		}
-	}
-
-	private void removeListeners() {
-		if (serverProxy == null) {
-			return;
-		}
-		Iterator iter = objNameProxies.keySet().iterator();
-		try {
-			while (iter.hasNext()) {
-				ObjectName name = (ObjectName) iter.next();
-				serverProxy.getMBeanServerConnection().removeNotificationListener(name, this);
-			}
-		} catch (Exception e) {
-			Activator.log(e);
-		}
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionLabelProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionLabelProvider.java
deleted file mode 100644
index ac9d23a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionLabelProvider.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.contributionsview;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import javax.management.MBeanInfo;
-import javax.management.MBeanOperationInfo;
-import org.eclipse.equinox.jmx.common.ContributionProxy;
-import org.eclipse.equinox.jmx.common.ContributionProxyMBean;
-import org.eclipse.equinox.jmx.common.util.ByteArrayHolder;
-import org.eclipse.equinox.jmx.internal.client.Activator;
-import org.eclipse.equinox.jmx.internal.client.ui.util.ByteImageRegistry;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * @since 1.0
- */
-public class ContributionLabelProvider implements ILabelProvider {
-
-	private ArrayList labelDecorators;
-	private BundleStatusLabelDecorator bundleStatusDecorator = new BundleStatusLabelDecorator();
-	private ByteImageRegistry imageRegistry = new ByteImageRegistry();
-
-	public ContributionLabelProvider() {
-		addLabelDecorator(bundleStatusDecorator);
-	}
-
-	/**
-	 * Add a decorator to this label provider.
-	 */
-	public void addLabelDecorator(ILabelDecorator decorator) {
-		if (labelDecorators == null) {
-			labelDecorators = new ArrayList(2);
-		}
-		labelDecorators.add(decorator);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
-	 */
-	public Image getImage(Object element) {
-		if (element instanceof ContributionProxy) {
-			ByteArrayHolder holder = ((ContributionProxy) element).getImageData();
-			byte[] imageData;
-			if (holder != null && (imageData = holder.value) != null) {
-				try {
-					return decorateImage(imageRegistry.getImage(imageData), element);
-				} catch (IOException e) {
-					Activator.log(e);
-				}
-			}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
-	 */
-	public String getText(Object element) {
-		if (element instanceof ContributionProxyMBean) {
-			return decorateText(((ContributionProxyMBean) element).getName(), element);
-		} else if (element instanceof MBeanInfo) {
-			return decorateText(ContributionViewMessages.operations, element);
-		} else if (element instanceof MBeanOperationInfo) {
-			return ((MBeanOperationInfo) element).getName();
-		}
-		return decorateText(element.toString(), element);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
-	 */
-	public void addListener(ILabelProviderListener listener) {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
-	 */
-	public void dispose() {
-		imageRegistry.dispose();
-		labelDecorators.clear();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
-	 */
-	public boolean isLabelProperty(Object element, String property) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
-	 */
-	public void removeListener(ILabelProviderListener listener) {
-	}
-
-	protected String decorateText(String text, Object element) {
-		if (labelDecorators != null && text.length() > 0) {
-			Iterator iter = labelDecorators.iterator();
-			while (iter.hasNext()) {
-				ILabelDecorator decorator = (ILabelDecorator) iter.next();
-				text = decorator.decorateText(text, element);
-			}
-		}
-		return text;
-	}
-
-	protected Image decorateImage(Image image, Object element) {
-		if (labelDecorators != null && image != null) {
-			Iterator iter = labelDecorators.iterator();
-			while (iter.hasNext()) {
-				ILabelDecorator decorator = (ILabelDecorator) iter.next();
-				image = decorator.decorateImage(image, element);
-			}
-		}
-		return image;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionViewMessages.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionViewMessages.java
deleted file mode 100644
index 2ff186d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionViewMessages.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.contributionsview;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public class ContributionViewMessages extends NLS {
-
-	public static String operations;
-	public static String error_message;
-
-	// disallow instantiations
-	private ContributionViewMessages() {
-		super();
-	}
-
-	static {
-		NLS.initializeMessages(ContributionViewMessages.class.getName(), ContributionViewMessages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionViewMessages.properties b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionViewMessages.properties
deleted file mode 100644
index e2fc87b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionViewMessages.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-operations = Operations
-error_message = Error
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionsViewPart.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionsViewPart.java
deleted file mode 100644
index acdd291..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/contributionsview/ContributionsViewPart.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.contributionsview;
-
-import java.io.IOException;
-import javax.management.*;
-import org.eclipse.equinox.jmx.internal.client.Activator;
-import org.eclipse.equinox.jmx.internal.client.MBeanServerProxy;
-import org.eclipse.equinox.jmx.internal.client.ui.actions.ActionMessages;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-/**
- * @since 1.0
- */
-public class ContributionsViewPart extends ViewPart {
-
-	protected TreeViewer viewer;
-	protected ContributionContentProvider contentProvider;
-	protected ContributionLabelProvider labelProvider;
-	protected MBeanServerProxy serverProxy;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
-	 */
-	public void createPartControl(Composite parent) {
-		viewer = new TreeViewer(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
-		viewer.setUseHashlookup(true);
-		viewer.setSorter(new ViewerSorter());
-		setProviders();
-		getSite().setSelectionProvider(viewer);
-	}
-
-	protected ContributionContentProvider createContentProvider() {
-		return new ContributionContentProvider(viewer, null);
-	}
-
-	protected ContributionLabelProvider createLabelProvider() {
-		return new ContributionLabelProvider();
-	}
-
-	protected void setProviders() {
-		contentProvider = createContentProvider();
-		viewer.setContentProvider(contentProvider);
-		labelProvider = createLabelProvider();
-		viewer.setLabelProvider(labelProvider);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
-	 */
-	public void setFocus() {
-		viewer.getTree().setFocus();
-	}
-
-	public void setMBeanServerProxy(MBeanServerProxy proxy) {
-		this.serverProxy = proxy;
-		try {
-			contentProvider.setServerContributionProxy(proxy);
-			updateViewer();
-		} catch (Exception e) {
-			Activator.logError(e);
-		}
-	}
-
-	public MBeanServerProxy getMBeanServerProxy() {
-		return serverProxy;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
-	 */
-	public void dispose() {
-		super.dispose();
-	}
-
-	public void connectionClosed(String message) {
-		MessageDialog.openInformation(viewer.getControl().getShell(), ActionMessages.info_message, message);
-	}
-
-	private void updateViewer() throws InstanceNotFoundException, MBeanException, ReflectionException, IOException, NotCompliantMBeanException {
-		if (serverProxy == null) {
-			viewer.setSelection(null);
-			viewer.setInput(null);
-			return;
-		}
-		viewer.setInput(serverProxy.getRootContribution());
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/invocationView/InvocationView.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/invocationView/InvocationView.java
deleted file mode 100644
index f369c53..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/invocationView/InvocationView.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.invocationView;
-
-import javax.management.MBeanOperationInfo;
-import javax.management.MBeanParameterInfo;
-import org.eclipse.equinox.jmx.common.ContributionProxy;
-import org.eclipse.equinox.jmx.common.util.MBeanUtils;
-import org.eclipse.equinox.jmx.internal.client.Activator;
-import org.eclipse.equinox.jmx.internal.client.MBeanServerProxy;
-import org.eclipse.equinox.jmx.internal.client.ui.ClientUI;
-import org.eclipse.equinox.jmx.internal.client.ui.contributionsview.ContributionsViewPart;
-import org.eclipse.equinox.jmx.internal.client.ui.mbeaninfoview.MBeanInfoViewMessages;
-import org.eclipse.equinox.jmx.internal.client.ui.viewsupport.ViewUtil;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.ISelectionListener;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.forms.ManagedForm;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.part.ViewPart;
-
-public class InvocationView extends ViewPart implements ISelectionListener {
-
-	private Composite fInvocationComposite;
-	private ManagedForm fManagedForm;
-	private MBeanOperationInfo fSelectedOperation;
-	private Font fItalicFont;
-	protected ContributionProxy fSelectedContribution;
-	private Composite parentComp;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
-	 */
-	public void createPartControl(Composite parent) {
-		parentComp = parent;
-		FontData fd[] = parent.getFont().getFontData();
-		fItalicFont = new Font(parent.getDisplay(), fd[0].getName(), fd[0].getHeight(), SWT.ITALIC);
-		getSite().getPage().addSelectionListener(this);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
-	 */
-	public void dispose() {
-		fItalicFont.dispose();
-		if (fManagedForm != null)
-			fManagedForm.dispose();
-		getSite().getPage().removePostSelectionListener(this);
-		super.dispose();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
-	 */
-	public void setFocus() {
-		if (fManagedForm != null)
-			fManagedForm.setFocus();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
-	 */
-	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-		if (!(selection instanceof IStructuredSelection))
-			return;
-
-		Object obj = ((IStructuredSelection) selection).getFirstElement();
-		String id = part.getSite().getId();
-		if (id.equals(ClientUI.VIEWID_MBEANINFO) && obj instanceof MBeanOperationInfo) {
-			MBeanOperationInfo contrib = (MBeanOperationInfo) obj;
-			if (contrib == fSelectedOperation) {
-				return;
-			}
-			// update the currently selected contribution to the one to be displayed, if null
-			// the controls displayed are still disposed, this is to reflect a removed contribution
-			fSelectedOperation = contrib;
-			drawInvocationDetails(contrib);
-		} else if (id.equals(ClientUI.VIEWID_CONTRIBUTIONS) && obj instanceof ContributionProxy) {
-			fSelectedContribution = (ContributionProxy) obj;
-			clear();
-		}
-	}
-
-	public void clear() {
-		drawInvocationDetails(null);
-	}
-
-	protected void drawInvocationDetails(MBeanOperationInfo opInfo) {
-		if (parentComp != null && !parentComp.isDisposed()) {
-			// remove any controls created from prior selections
-			Control[] childs = parentComp.getChildren();
-			if (childs.length > 0) {
-				for (int i = 0; i < childs.length; i++) {
-					childs[i].dispose();
-				}
-			}
-		}
-		if (opInfo == null) {
-			return;
-		}
-		if (fManagedForm != null) {
-			fManagedForm.dispose();
-		}
-		fManagedForm = new ManagedForm(parentComp);
-		Composite body = fManagedForm.getForm().getBody();
-		body.setLayout(new GridLayout());
-		body.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		fInvocationComposite = ViewUtil.createSection(MBeanInfoViewMessages.InvocationView_0, null, fManagedForm, body, 1, true, false);
-
-		FormToolkit toolkit = fManagedForm.getToolkit();
-		String desc = opInfo.getDescription();
-		if (desc != null && desc.length() > 0) {
-			Composite c = toolkit.createComposite(fInvocationComposite, SWT.NONE);
-			c.setLayout(new GridLayout());
-			toolkit.createLabel(c, desc);
-		}
-		// composite for method signature [ return type | name | Composite(1..n parameters) | invoke button ] 
-		Composite c = toolkit.createComposite(fInvocationComposite, SWT.NONE);
-		c.setLayout(new GridLayout(4, false));
-		// return type
-		toolkit.createLabel(c, opInfo.getReturnType() != null ? opInfo.getReturnType() : "void"); //$NON-NLS-1$
-		// method name
-		toolkit.createLabel(c, opInfo.getName() + ' ').setFont(fItalicFont);
-		// parameters
-		final MBeanParameterInfo[] params = opInfo.getSignature();
-		Text[] textParams = null;
-		if (params.length > 0) {
-			Composite paramsComposite = toolkit.createComposite(c, SWT.NONE);
-			paramsComposite.setLayout(new GridLayout(params.length + 1 /* button */, false));
-			textParams = new Text[params.length];
-			for (int j = 0; j < params.length; j++) {
-				MBeanParameterInfo param = params[j];
-				textParams[j] = new Text(paramsComposite, SWT.SINGLE | SWT.BORDER);
-				textParams[j].setText(param.getType() + "(" + param.getName() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				textParams[j].setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
-			}
-			paramsComposite.pack();
-		}
-		new InvokeOperationButton(opInfo.getName(), textParams, params, c, SWT.PUSH);
-		fInvocationComposite.pack();
-		parentComp.layout();
-	}
-
-	private class InvokeOperationButton extends SelectionAdapter {
-
-		private String fMethodName;
-		private Text[] fTextParams;
-		private MBeanParameterInfo[] fParamTypes;
-		private Button fButton;
-
-		public InvokeOperationButton(String methodName, Text[] textParams, MBeanParameterInfo[] paramTypes, Composite parent, int style) {
-			fMethodName = methodName;
-			fTextParams = textParams;
-			fParamTypes = paramTypes;
-			fButton = fManagedForm.getToolkit().createButton(parent, MBeanInfoViewMessages.button_invoke, style);
-			fButton.addSelectionListener(this);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-		 */
-		public void widgetSelected(SelectionEvent event) {
-			try {
-				Object[] paramList = null;
-				if (fTextParams != null) {
-					String[] strs = new String[fTextParams.length];
-					for (int i = 0; i < strs.length; i++) {
-						strs[i] = fTextParams[i].getText();
-					}
-					paramList = MBeanUtils.getParameters(strs, fParamTypes);
-				}
-				// invoke operation
-				ContributionsViewPart contribsViewPart = ViewUtil.getContributionsView();
-				if (contribsViewPart != null) {
-					MBeanServerProxy serverProxy = contribsViewPart.getMBeanServerProxy();
-					Object result;
-					if (paramList != null) {
-						String[] paramSig = new String[fParamTypes.length];
-						for (int i = 0; i < paramSig.length; i++) {
-							paramSig[i] = fParamTypes[i].getType();
-						}
-						result = serverProxy.invokeContributionOperation(fSelectedContribution, fMethodName, paramList, paramSig);
-					} else {
-						result = serverProxy.invokeContributionOperation(fSelectedContribution, fMethodName, new Object[0], new String[0]);
-					}
-					if (result != null) {
-						String message = result.toString();
-						MessageDialog.openInformation(fManagedForm.getForm().getShell(), MBeanInfoViewMessages.invoke_result, message);
-					}
-				}
-			} catch (Exception e) {
-				Activator.logError(e);
-				MessageDialog.openError(null, MBeanInfoViewMessages.error, e.getMessage());
-			}
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewMessages.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewMessages.java
deleted file mode 100644
index d8a33e7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewMessages.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.mbeaninfoview;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public class MBeanInfoViewMessages extends NLS {
-
-	public static String invoke_result;
-	public static String contribution_name;
-	public static String description;
-	public static String mbean_description;
-	public static String error;
-	public static String button_invoke;
-	public static String MBeanOpTable_returnType;
-	public static String MBeanOpTable_name;
-	public static String MBeanOpTable_params;
-	public static String InvocationView_0;
-	public static String MBeanInfoViewPart_0;
-	public static String MBeanInfoViewPart_1;
-	public static String MBeanInfoViewPart_6;
-	public static String MBeanInfoViewPart_7;
-	public static String MBeanInfoViewPart_8;
-	public static String MBeanInfoViewPart_11;
-
-	private MBeanInfoViewMessages() {
-		// disallow instantiations
-	}
-
-	static {
-		NLS.initializeMessages(MBeanInfoViewMessages.class.getName(), MBeanInfoViewMessages.class);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewMessages.properties b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewMessages.properties
deleted file mode 100644
index 53ef1ce..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewMessages.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-invoke_result = Result
-contribution_name = Contribution Name:
-description = Attributes:
-mbean_description = Contribution Description:
-button_invoke = Invoke
-error = Error
-
-MBeanOpTable_returnType=Return Type
-MBeanOpTable_name=Name
-MBeanOpTable_params=Parameters
-MBeanInfoViewPart_0=Contributor
-MBeanInfoViewPart_1=Properties
-MBeanInfoViewPart_11=Contribution Summary of {0}
-MBeanInfoViewPart_6=Operations
-MBeanInfoViewPart_7=A table of available operations, select one to display invocation options.
-MBeanInfoViewPart_8=Contribution Summary
-InvocationView_0=Invocation Details
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewPart.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewPart.java
deleted file mode 100644
index 0ba3e17..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanInfoViewPart.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.mbeaninfoview;
-
-import java.util.Iterator;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.ContributionProxy;
-import org.eclipse.equinox.jmx.common.IContributionStateChangeListener;
-import org.eclipse.equinox.jmx.internal.client.ui.ClientUI;
-import org.eclipse.equinox.jmx.internal.client.ui.invocationView.InvocationView;
-import org.eclipse.equinox.jmx.internal.client.ui.viewsupport.ViewUtil;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.forms.ManagedForm;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.part.ViewPart;
-
-/**
- * @since 1.0
- */
-public class MBeanInfoViewPart extends ViewPart implements ISelectionListener, IContributionStateChangeListener {
-
-	protected ContributionProxy fSelectedContribution;
-	private ManagedForm fManagedForm;
-	private MBeanOpTable fOpTable;
-	private Font fBFont;
-	private Text fPropertiesText;
-	private Section fContributionSection;
-	private Section fPropertiesSection;
-	private Section fOperationsSection;
-	private Label fC_title;
-	private Label fC_desc;
-	private Text fAttributesText;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
-	 */
-	public void createPartControl(Composite parent) {
-		FontData fd[] = parent.getFont().getFontData();
-		fBFont = new Font(parent.getDisplay(), fd[0].getName(), fd[0].getHeight(), SWT.BOLD);
-		fManagedForm = new ManagedForm(parent);
-		fManagedForm.getForm().setText(MBeanInfoViewMessages.MBeanInfoViewPart_8);
-
-		Composite body = fManagedForm.getForm().getBody();
-		body.setLayout(new GridLayout());
-		body.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		createContributionTitleArea(body);
-		createContributionPropertiesArea(body);
-		createOperationsArea(body);
-
-		getSite().getPage().addSelectionListener(this);
-	}
-
-	protected FormToolkit getToolkit() {
-		return fManagedForm.getToolkit();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
-	 */
-	public void dispose() {
-		fBFont.dispose();
-		fManagedForm.dispose();
-		getSite().getPage().removePostSelectionListener(this);
-		super.dispose();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
-	 */
-	public void setFocus() {
-		fManagedForm.setFocus();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
-	 */
-	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-		if (!(selection instanceof IStructuredSelection))
-			return;
-
-		Object obj = ((IStructuredSelection) selection).getFirstElement();
-
-		String id = part.getSite().getId();
-		if (id.equals(ClientUI.VIEWID_CONTRIBUTIONS)) {
-			if (obj instanceof ContributionProxy) {
-				ContributionProxy contrib = (ContributionProxy) obj;
-				if (contrib == fSelectedContribution) {
-					return;
-				} else if (fSelectedContribution != null) {
-					// remove listener from previously selected proxy
-					fSelectedContribution.removeStateChangeListener(this);
-				}
-				// update the currently selected contribution to the one to be displayed, if null
-				// the controls displayed are still disposed, this is to reflect a removed contribution
-				fSelectedContribution = contrib;
-				updateContributionTitle(true);
-				updateProperties(true);
-				updateOperations(true);
-				if (fSelectedContribution == null)
-					return;
-				fSelectedContribution.addStateChangeListener(this);
-			} else if (obj == null) {
-				contributionRemoved(fSelectedContribution = null);
-			}
-		}
-	}
-
-	private void createContributionTitleArea(Composite parent) {
-		Composite comp = ViewUtil.createSection(MBeanInfoViewMessages.MBeanInfoViewPart_0, null, fManagedForm, parent, 2, false, true);
-		FormToolkit toolkit = fManagedForm.getToolkit();
-		fContributionSection = (Section) comp.getParent();
-
-		toolkit.createLabel(comp, MBeanInfoViewMessages.contribution_name);
-		fC_title = toolkit.createLabel(comp, ""); //$NON-NLS-1$
-		fC_title.setFont(fBFont);
-		fC_title.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		toolkit.createLabel(comp, MBeanInfoViewMessages.mbean_description);
-		fC_desc = toolkit.createLabel(comp, ""); //$NON-NLS-1$
-		fC_desc.setFont(fBFont);
-		fC_desc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-	}
-
-	private void updateContributionTitle(boolean forceExpand) {
-		boolean enabled = fSelectedContribution != null;
-
-		fContributionSection.setEnabled(enabled);
-		if (!fContributionSection.isEnabled() || forceExpand)
-			fContributionSection.setExpanded(enabled);
-		if (!enabled)
-			return;
-
-		String name = fSelectedContribution.getName();
-		fC_title.setText(name);
-		fManagedForm.getForm().setText(NLS.bind(MBeanInfoViewMessages.MBeanInfoViewPart_11, name));
-
-		MBeanInfo info = fSelectedContribution.getMBeanInfo();
-		if (info.getDescription() != null)
-			fC_desc.setText(info.getDescription());
-		else
-			fC_desc.setText(""); //$NON-NLS-1$
-	}
-
-	private void createContributionPropertiesArea(Composite parent) {
-		FormToolkit toolkit = fManagedForm.getToolkit();
-		Composite comp = ViewUtil.createSection(MBeanInfoViewMessages.MBeanInfoViewPart_1, null, fManagedForm, parent, 1, false, true);
-		fPropertiesSection = (Section) comp.getParent();
-		fPropertiesText = toolkit.createText(comp, "", SWT.MULTI | SWT.H_SCROLL | SWT.READ_ONLY | SWT.BORDER); //$NON-NLS-1$
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
-		gd.widthHint = 100;
-		fPropertiesText.setLayoutData(gd);
-	}
-
-	private void updateProperties(boolean forceExpand) {
-		boolean enabled = fSelectedContribution != null && fSelectedContribution.getContributionProperties() != null && fSelectedContribution.getContributionProperties().iterator().hasNext();
-
-		fPropertiesSection.setEnabled(enabled);
-		if (!fPropertiesSection.isEnabled() || forceExpand)
-			fPropertiesSection.setExpanded(enabled);
-		if (!enabled)
-			return;
-
-		Iterator iter = fSelectedContribution.getContributionProperties().iterator();
-		StringBuffer sb = new StringBuffer();
-		while (iter.hasNext())
-			sb.append(iter.next().toString() + (iter.hasNext() ? "\n" : "")); //$NON-NLS-1$ //$NON-NLS-2$
-		fPropertiesText.setText(sb.toString());
-	}
-
-	private void createOperationsArea(Composite parent) {
-		Composite comp = ViewUtil.createSection(MBeanInfoViewMessages.MBeanInfoViewPart_6, MBeanInfoViewMessages.MBeanInfoViewPart_7, fManagedForm, parent, 1, true, true);
-		fOperationsSection = (Section) comp.getParent();
-
-		fOpTable = new MBeanOpTable(comp, this);
-
-		FormToolkit toolkit = fManagedForm.getToolkit();
-		toolkit.createLabel(comp, MBeanInfoViewMessages.description);
-		fAttributesText = toolkit.createText(comp, "", SWT.MULTI | SWT.H_SCROLL | SWT.READ_ONLY | SWT.BORDER); //$NON-NLS-1$
-		GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
-		gd.widthHint = 100;
-		gd.heightHint = 30;
-		fAttributesText.setLayoutData(gd);
-	}
-
-	private void updateOperations(boolean forceExpand) {
-		boolean enabled = fSelectedContribution != null && fSelectedContribution.getMBeanInfo() != null && (fSelectedContribution.getMBeanInfo().getOperations().length > 2 || fSelectedContribution.getMBeanInfo().getAttributes().length > 0);
-
-		fOperationsSection.setEnabled(enabled);
-		if (!fOperationsSection.isEnabled() || forceExpand)
-			fOperationsSection.setExpanded(enabled);
-		if (!enabled)
-			return;
-
-		MBeanInfo info = fSelectedContribution.getMBeanInfo();
-
-		MBeanOperationInfo[] ops = info.getOperations();
-		if (ops.length > 0)
-			fOpTable.setInput(fSelectedContribution);
-
-		StringBuffer sb = new StringBuffer();
-		MBeanAttributeInfo[] attrs = info.getAttributes();
-		for (int i = 0; i < attrs.length; i++) {
-			if (i != 0)
-				sb.append('\n');
-			sb.append(attrs[i].getName());
-			sb.append(':');
-			sb.append(' ');
-			sb.append(attrs[i].getDescription());
-		}
-	}
-
-	/**
-	 * This is called when the mbean contribution resource associated with the proxy
-	 * has been removed, it proceeds to invalidate the view.
-	 * 
-	 * @param contribution The contribution proxy that represents the contribution resource removed.
-	 */
-	public void contributionRemoved(ContributionProxy contribution) {
-		fContributionSection.setEnabled(false);
-		fContributionSection.setExpanded(false);
-		fPropertiesSection.setEnabled(false);
-		fPropertiesSection.setExpanded(false);
-		fOperationsSection.setEnabled(false);
-		fOperationsSection.setExpanded(false);
-		InvocationView iv = (InvocationView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ClientUI.VIEWID_INVOCATION);
-		if (iv != null) {
-			iv.clear();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.common.IContributionStateChangeListener#stateChanged(org.eclipse.equinox.jmx.common.ContributionProxy)
-	 */
-	public void stateChanged(final ContributionProxy source) {
-		fManagedForm.getForm().getDisplay().asyncExec(new Runnable() {
-			public void run() {
-				fSelectedContribution = source;
-				// only updating properties on state change
-				updateProperties(false);
-			}
-		});
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanOpTable.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanOpTable.java
deleted file mode 100644
index 5052a62..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/mbeaninfoview/MBeanOpTable.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.mbeaninfoview;
-
-import javax.management.MBeanOperationInfo;
-import javax.management.MBeanParameterInfo;
-import org.eclipse.equinox.jmx.common.ContributionProxy;
-import org.eclipse.equinox.jmx.internal.client.ui.invocationView.InvocationView;
-import org.eclipse.equinox.jmx.internal.client.ui.viewsupport.ViewUtil;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.*;
-
-public class MBeanOpTable {
-
-	protected class MBeanOpContentProvider implements IStructuredContentProvider {
-		private MBeanOperationInfo[] fOps;
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-		 */
-		public Object[] getElements(Object inputElement) {
-			if (fOps == null)
-				return new Object[0];
-			return fOps;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-		 */
-		public void dispose() {
-			// nothing needs to be disposed
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-		 */
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			fOps = (MBeanOperationInfo[]) newInput;
-		}
-	}
-
-	protected class MBeanOpLabelProvider extends LabelProvider implements ITableLabelProvider {
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
-		 */
-		public Image getColumnImage(Object element, int columnIndex) {
-			return null;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
-		 */
-		public String getColumnText(Object element, int columnIndex) {
-			if (!(element instanceof MBeanOperationInfo))
-				return super.getText(element);
-
-			MBeanOperationInfo info = (MBeanOperationInfo) element;
-			switch (columnIndex) {
-				case 0 :
-					return ""; //$NON-NLS-1$
-				case 1 :
-					return info.getReturnType() != null ? info.getReturnType() : "void"; //$NON-NLS-1$
-				case 2 :
-					return info.getName();
-				case 3 :
-					MBeanParameterInfo[] params = info.getSignature();
-					StringBuffer sb = new StringBuffer();
-					for (int j = 0; j < params.length; j++) {
-						String type = params[j].getType();
-						if (j != 0)
-							sb.append(", "); //$NON-NLS-1$
-						sb.append(type);
-						sb.append('(');
-						sb.append(params[j].getName());
-						sb.append(')');
-					}
-					return sb.toString();
-			}
-			return getText(element);
-		}
-	}
-
-	protected class MBeanOpViewerFilter extends ViewerFilter {
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-		 */
-		public boolean select(Viewer viewer, Object parentElement, Object element) {
-			if (element instanceof MBeanOperationInfo) {
-				MBeanOperationInfo info = (MBeanOperationInfo) element;
-				return !info.getName().equals("getChildContributions") && !info.getName().equals("createProxy"); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			return false;
-		}
-	}
-
-	protected class MBeanOpViewerSorter extends ViewerSorter {
-		int fDirection, fIndex;
-
-		protected MBeanOpViewerSorter(int direction, int index) {
-			fDirection = direction == SWT.UP ? -1 : 1;
-			fIndex = index;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-		 */
-		public int compare(Viewer viewer, Object e1, Object e2) {
-			if (e1 instanceof MBeanOperationInfo && e2 instanceof MBeanOperationInfo) {
-				MBeanOperationInfo op1 = (MBeanOperationInfo) e1;
-				MBeanOperationInfo op2 = (MBeanOperationInfo) e2;
-				switch (fIndex) {
-					case 1 :
-						String a1 = op1.getReturnType();
-						String a2 = op2.getReturnType();
-						int p = a1.lastIndexOf('.');
-						if (p != -1)
-							a1 = a1.substring(p + 1);
-						p = a2.lastIndexOf('.');
-						if (p != -1)
-							a2 = a2.substring(p + 1);
-						return fDirection * a1.compareTo(a2);
-					case 2 :
-						return fDirection * op1.getName().compareTo(op2.getName());
-					case 3 :
-						MBeanParameterInfo[] info1 = op1.getSignature();
-						MBeanParameterInfo[] info2 = op2.getSignature();
-						if (info2.length == 0)
-							return fDirection;
-						if (info1.length == 0)
-							return -fDirection;
-
-						return fDirection * (info1[0].getType().compareTo(info2[0].getType()));
-				}
-			}
-			return fDirection * super.compare(viewer, e1, e2);
-		}
-	}
-
-	private TableViewer fViewer;
-
-	public MBeanOpTable(Composite parent, final MBeanInfoViewPart beanView) {
-		final Table opTable = beanView.getToolkit().createTable(parent, SWT.BORDER | SWT.SINGLE | SWT.FLAT | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL);
-		createColumns(opTable);
-		opTable.setLayoutData(new GridData(GridData.FILL_BOTH));
-		opTable.setLinesVisible(true);
-		opTable.setHeaderVisible(true);
-		opTable.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if (e.item == null || e.item.getData() == null)
-					return;
-				InvocationView view = ViewUtil.getInvocationView();
-				view.selectionChanged(beanView, new StructuredSelection(e.item.getData()));
-			}
-		});
-
-		fViewer = new TableViewer(opTable);
-		fViewer.setContentProvider(new MBeanOpContentProvider());
-		fViewer.setLabelProvider(new MBeanOpLabelProvider());
-		fViewer.addFilter(new MBeanOpViewerFilter());
-	}
-
-	private void createColumns(final Table opTable) {
-		TableColumn blankCol = new TableColumn(opTable, SWT.NONE);
-		blankCol.setText(""); //$NON-NLS-1$
-		blankCol.setWidth(20);
-		final TableColumn returnType = new TableColumn(opTable, SWT.NONE);
-		returnType.setText(MBeanInfoViewMessages.MBeanOpTable_returnType);
-		returnType.setWidth(100);
-		final TableColumn opName = new TableColumn(opTable, SWT.NONE);
-		opName.setText(MBeanInfoViewMessages.MBeanOpTable_name);
-		opName.setWidth(150);
-		final TableColumn params = new TableColumn(opTable, SWT.NONE);
-		params.setText(MBeanInfoViewMessages.MBeanOpTable_params);
-		params.setWidth(300);
-
-		Listener sortListener = new Listener() {
-			public void handleEvent(Event e) {
-				// determine new sort column and direction
-				TableColumn sortColumn = opTable.getSortColumn();
-				TableColumn currentColumn = (TableColumn) e.widget;
-
-				int dir = opTable.getSortDirection();
-				if (sortColumn == currentColumn) {
-					dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
-				} else {
-					opTable.setSortColumn(currentColumn);
-					dir = SWT.UP;
-				}
-				int colIndex;
-				if (currentColumn == returnType)
-					colIndex = 1;
-				else if (currentColumn == opName)
-					colIndex = 2;
-				else if (currentColumn == params)
-					colIndex = 3;
-				else
-					return;
-
-				// sort the data based on column and direction
-				opTable.setSortDirection(dir);
-				fViewer.setSorter(new MBeanOpViewerSorter(dir, colIndex));
-			}
-		};
-		returnType.addListener(SWT.Selection, sortListener);
-		opName.addListener(SWT.Selection, sortListener);
-		params.addListener(SWT.Selection, sortListener);
-		opTable.setSortColumn(opName);
-		opTable.setSortDirection(SWT.UP);
-	}
-
-	protected void setInput(ContributionProxy input) {
-		if (input == null || input.getMBeanInfo() == null)
-			fViewer.setInput(null);
-		else
-			fViewer.setInput(input.getMBeanInfo().getOperations());
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/util/ByteImageRegistry.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/util/ByteImageRegistry.java
deleted file mode 100644
index d4c4746..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/util/ByteImageRegistry.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.equinox.jmx.internal.client.ui.viewsupport.ImageRegistry;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-
-/**
- * Extended image registry to support byte array keys.
- * 
- * @since 1.0
- */
-public class ByteImageRegistry extends ImageRegistry {
-
-	Map cache;
-
-	public Image getImage(byte[] imageData) throws IOException {
-		Image result = (Image) getCache().get(imageData);
-		if (result == null) {
-			getCache().put(imageData, result = super.get(createImageDescriptorFromByteArray(imageData)));
-		}
-		return result;
-	}
-
-	public Map getCache() {
-		if (cache == null) {
-			cache = new HashMap(10);
-		}
-		return cache;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.internal.client.ui.viewsupport.ImageRegistry#dispose()
-	 */
-	public void dispose() {
-		getCache().clear();
-		super.dispose();
-	}
-
-	public static ImageDescriptor createImageDescriptorFromByteArray(byte[] imageData) throws IOException {
-		ByteArrayInputStream is = new ByteArrayInputStream(imageData);
-		ImageDescriptor desc = ImageDescriptor.createFromImageData(new ImageData(is));
-		is.close();
-		return desc;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/BundleImageDescriptor.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/BundleImageDescriptor.java
deleted file mode 100644
index ef2b5eb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/BundleImageDescriptor.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.viewsupport;
-
-import org.eclipse.jface.resource.CompositeImageDescriptor;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-import org.osgi.framework.Bundle;
-
-/**
- * @since 1.0
- */
-public class BundleImageDescriptor extends CompositeImageDescriptor {
-
-	private ImageDescriptor baseDescriptor;
-	private int bundleState;
-	private Point size;
-
-	public BundleImageDescriptor(ImageDescriptor baseDescriptor, int bundleState, Point size) {
-		this.baseDescriptor = baseDescriptor;
-		this.bundleState = bundleState;
-		this.size = size;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int, int)
-	 */
-	protected void drawCompositeImage(int width, int height) {
-		ImageData bg = getImageData(baseDescriptor);
-		// draw the base image as background
-		drawImage(bg, 0, 0);
-		// draw the status overlay in the bottom left
-		drawBottomLeft();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize()
-	 */
-	protected Point getSize() {
-		return size;
-	}
-
-	private void drawBottomLeft() {
-		Point size = getSize();
-		int x = 0; // apply additional icons?
-		ImageData data = null;
-		switch (bundleState) {
-			case Bundle.ACTIVE :
-				data = getImageData(JMXPluginImages.IMGDESC_OVR_BUNDLE_ACTIVE);
-				break;
-			case Bundle.INSTALLED :
-				data = getImageData(JMXPluginImages.IMGDESC_OVR_BUNDLE_INSTALLED);
-				break;
-			case Bundle.RESOLVED :
-				data = getImageData(JMXPluginImages.IMGDESC_OVR_BUNDLE_RESOLVED);
-				break;
-			default :
-				return;
-		}
-		drawImage(data, x, size.y - data.height);
-		x += data.width;
-	}
-
-	private ImageData getImageData(ImageDescriptor descriptor) {
-		ImageData data = descriptor.getImageData();
-		if (data == null) {
-			data = DEFAULT_IMAGE_DATA;
-		}
-		return data;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ImageImageDescriptor.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ImageImageDescriptor.java
deleted file mode 100644
index 0cbd671..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ImageImageDescriptor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.viewsupport;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-
-/**
- * @since 1.0
- */
-public class ImageImageDescriptor extends ImageDescriptor {
-
-	private Image image;
-
-	/**
-	 * Constructor for ImagImageDescriptor.
-	 */
-	public ImageImageDescriptor(Image image) {
-		super();
-		this.image = image;
-	}
-
-	/* (non-Javadoc)
-	 * @see ImageDescriptor#getImageData()
-	 */
-	public ImageData getImageData() {
-		return image.getImageData();
-	}
-
-	/* (non-Javadoc)
-	 * @see Object#equals(Object)
-	 */
-	public boolean equals(Object obj) {
-		return (obj != null) && getClass().equals(obj.getClass()) && image.equals(((ImageImageDescriptor) obj).image);
-	}
-
-	/* (non-Javadoc)
-	 * @see Object#hashCode()
-	 */
-	public int hashCode() {
-		return image.hashCode();
-	}
-
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ImageRegistry.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ImageRegistry.java
deleted file mode 100644
index 3854c63..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ImageRegistry.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.viewsupport;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * A registry that maps <code>ImageDescriptors</code> to <code>Image</code>.
- * 
- * @since 1.0
- */
-public class ImageRegistry {
-
-	private HashMap registry = new HashMap(10);
-	private Display display;
-
-	/**
-	 * Creates a new image descriptor registry for the current or default display,
-	 * respectively.
-	 */
-	public ImageRegistry() {
-		this(getStandardDisplay());
-	}
-
-	/**
-	 * Creates a new image descriptor registry for the given display. All images
-	 * managed by this registry will be disposed when the display gets disposed.
-	 * 
-	 * @param display the display the images managed by this registry are allocated for 
-	 */
-	public ImageRegistry(Display display) {
-		this.display = display;
-		Assert.isNotNull(display);
-		hookDisplay();
-	}
-
-	/**
-	 * Returns the image associated with the given image descriptor.
-	 * 
-	 * @param descriptor the image descriptor for which the registry manages an image
-	 * @return the image associated with the image descriptor or <code>null</code>
-	 *  if the image descriptor can't create the requested image.
-	 */
-	public Image get(ImageDescriptor descriptor) {
-		Image result = (Image) registry.get(descriptor);
-		if (result != null) {
-			return result;
-		}
-		Assert.isTrue(display == getStandardDisplay(), "Allocating image for wrong display."); //$NON-NLS-1$
-		result = descriptor.createImage();
-		if (result != null) {
-			registry.put(descriptor, result);
-		}
-		return result;
-	}
-
-	/**
-	 * Disposes all images managed by this registry.
-	 */
-	public void dispose() {
-		for (Iterator iter = registry.values().iterator(); iter.hasNext();) {
-			Image image = (Image) iter.next();
-			image.dispose();
-		}
-		registry.clear();
-	}
-
-	// free all image resources on dispose
-	private void hookDisplay() {
-		display.disposeExec(new Runnable() {
-			public void run() {
-				dispose();
-			}
-		});
-	}
-
-	/**
-	 * Returns the standard display to be used. The method first checks, if
-	 * the thread calling this method has an associated disaply. If so, this
-	 * display is returned. Otherwise the method returns the default display.
-	 */
-	public static Display getStandardDisplay() {
-		Display display;
-		display = Display.getCurrent();
-		if (display == null)
-			display = Display.getDefault();
-		return display;
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/JMXPluginImages.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/JMXPluginImages.java
deleted file mode 100644
index 07647d1..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/JMXPluginImages.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.viewsupport;
-
-import java.net.URL;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.internal.client.Activator;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.graphics.Image;
-import org.osgi.framework.Bundle;
-
-/**
- * @since 1.0
- */
-public class JMXPluginImages {
-
-	public static final IPath ICONS_PATH = new Path("$nl$/icons/"); //$NON-NLS-1$
-	public static final IPath ICONS_MB_PATH = new Path(ICONS_PATH.append("mb/").toString()); //$NON-NLS-1$
-
-	private static ImageRegistry registry;
-
-	public static final Image IMG_MANAGED_BUNDLE = createManaged(ICONS_MB_PATH, "bundle.gif"); //$NON-NLS-1$
-	public static final Image IMG_MANAGED_COMPONENT = createManaged(ICONS_MB_PATH, "component.gif"); //$NON-NLS-1$
-	public static final Image IMG_MBEAN_OPERATION = createManaged(ICONS_MB_PATH, "mbean_operation.gif"); //$NON-NLS-1$
-	public static final Image IMG_MBEAN_OPERATIONS = createManaged(ICONS_MB_PATH, "mbean_operations.gif"); //$NON-NLS-1$
-	public static final Image IMG_MBEAN_OPERATIONS_NONE = createManaged(ICONS_MB_PATH, "mbean_operation_none.gif"); //$NON-NLS-1$
-
-	public static final ImageDescriptor IMGDESC_OVR_BUNDLE_ACTIVE = create("mb/", "ovr_bundle_active.gif", true); //$NON-NLS-1$ //$NON-NLS-2$
-	public static final ImageDescriptor IMGDESC_OVR_BUNDLE_INSTALLED = create("mb/", "ovr_bundle_installed.gif", true); //$NON-NLS-1$ //$NON-NLS-2$
-	public static final ImageDescriptor IMGDESC_OVR_BUNDLE_RESOLVED = create("mb/", "ovr_bundle_resolved.gif", true); //$NON-NLS-1$ //$NON-NLS-2$
-
-	public static Image createManaged(IPath path, String name) {
-		ImageDescriptor desc = createImageDescriptor(Activator.getDefault().getBundle(), path.append(name), true);
-		if (registry == null) {
-			registry = new ImageRegistry();
-		}
-		return registry.get(desc);
-	}
-
-	public Image getImage(ImageDescriptor descriptor) {
-		return registry.get(descriptor);
-	}
-
-	public static ImageDescriptor createImageDescriptor(Bundle bundle, IPath path, boolean useMissingImageDescriptor) {
-		URL url = FileLocator.find(bundle, path, null);
-		if (url != null) {
-			return ImageDescriptor.createFromURL(url);
-		}
-		if (useMissingImageDescriptor) {
-			return ImageDescriptor.getMissingImageDescriptor();
-		}
-		return null;
-	}
-
-	private static ImageDescriptor create(String prefix, String name, boolean useMissingImageDescriptor) {
-		IPath path = ICONS_PATH.append(prefix).append(name);
-		return createImageDescriptor(Activator.getDefault().getBundle(), path, useMissingImageDescriptor);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ViewUtil.java b/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ViewUtil.java
deleted file mode 100644
index 791bac2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.client/src/org/eclipse/equinox/jmx/internal/client/ui/viewsupport/ViewUtil.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.client.ui.viewsupport;
-
-import org.eclipse.equinox.jmx.internal.client.ui.ClientUI;
-import org.eclipse.equinox.jmx.internal.client.ui.contributionsview.ContributionsViewPart;
-import org.eclipse.equinox.jmx.internal.client.ui.invocationView.InvocationView;
-import org.eclipse.equinox.jmx.internal.client.ui.mbeaninfoview.MBeanInfoViewPart;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.SectionPart;
-import org.eclipse.ui.forms.widgets.*;
-
-public class ViewUtil {
-
-	public static Composite createSection(String sectionTitle, String description, IManagedForm form, Composite parent, int cols, boolean fillBoth, boolean twistie) {
-		FormToolkit toolkit = form.getToolkit();
-		int flags = ExpandableComposite.TITLE_BAR;
-		if (twistie)
-			flags |= ExpandableComposite.TWISTIE;
-		if (description != null)
-			flags |= Section.DESCRIPTION;
-		SectionPart sectionPart = new SectionPart(parent, toolkit, flags);
-		sectionPart.initialize(form);
-		Section section = sectionPart.getSection();
-		section.setText(sectionTitle);
-		if (description != null)
-			section.setDescription(description);
-		flags = fillBoth ? GridData.FILL_BOTH : GridData.FILL_HORIZONTAL;
-		section.setLayoutData(new GridData(flags));
-		Composite composite = toolkit.createComposite(section);
-		composite.setLayout(new GridLayout(cols, false));
-		composite.setLayoutData(new GridData(flags));
-		section.setClient(composite);
-		if (twistie) {
-			section.setEnabled(false);
-			section.setExpanded(false);
-		}
-		return composite;
-	}
-
-	public static ContributionsViewPart getContributionsView() {
-		return (ContributionsViewPart) getView(ClientUI.VIEWID_CONTRIBUTIONS);
-	}
-
-	public static InvocationView getInvocationView() {
-		return (InvocationView) getView(ClientUI.VIEWID_INVOCATION);
-	}
-
-	public static MBeanInfoViewPart getBeanInfoView() {
-		return (MBeanInfoViewPart) getView(ClientUI.VIEWID_MBEANINFO);
-	}
-
-	private static IViewPart getView(String viewId) {
-		return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(viewId);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.common/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/.project b/eclipse/plugins/org.eclipse.equinox.jmx.common/.project
deleted file mode 100644
index 0defb80..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.common</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index d2a885b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,320 +0,0 @@
-#Thu May 10 14:06:58 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 7320514..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:26:55 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.pde.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index f686ed5..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,13 +0,0 @@
-#Wed Mar 01 09:39:29 EST 2006
-compilers.p.build=1
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=1
-compilers.p.unknown-class=1
-compilers.p.unknown-element=1
-compilers.p.unknown-resource=1
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.common/META-INF/MANIFEST.MF
deleted file mode 100644
index 83c8bd9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,28 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring Common Bundle (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.common
-Bundle-Version: 1.0.100.qualifier
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Bundle-Activator: org.eclipse.equinox.jmx.internal.common.Activator
-Bundle-Vendor: Eclipse.org
-Export-Package: org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.common.util
-Import-Package: javax.management,
- javax.management.loading,
- javax.management.modelmbean,
- javax.management.monitor,
- javax.management.openmbean,
- javax.management.relation,
- javax.management.remote,
- javax.management.remote.rmi,
- javax.management.timer,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.log,
- org.osgi.util.tracker,
- org.eclipse.core.runtime; common=split
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.common/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.common/build.properties
deleted file mode 100644
index 09cab8e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionNotificationEvent.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionNotificationEvent.java
deleted file mode 100644
index 4470082..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionNotificationEvent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-public class ContributionNotificationEvent {
-
-	public static final String NOTIFICATION_REMOVED = "contribution.removed"; //$NON-NLS-1$
-	public static final String NOTIFICATION_ADDED = "contribution.added";//$NON-NLS-1$
-	public static final String NOTIFICATION_UPDATED = "contribution.updated";//$NON-NLS-1$
-
-	private final String eventType;
-
-	public ContributionNotificationEvent(String eventType) {
-		this.eventType = eventType;
-	}
-
-	public String getType() {
-		return eventType;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionProxy.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionProxy.java
deleted file mode 100644
index e1b9d84..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionProxy.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.util.ByteArrayHolder;
-
-/**
- * The <code>ContributionProxy</code> provides a interface for operating on, and querying
- * the <code>Contribution</code> which it is a proxy for.  
- * 
- * <p>
- * This proxy is required because of its <code>Serializable</code> properties which cannot be expected
- * from concrete <code>Contribution</code> objects.  The object name associated
- * with this proxy is the same as the object name of the <code>Contribution</code>
- * resource registered with the server.
- * </p>
- * 
- * @see org.eclipse.equinox.jmx.server.Contribution
- */
-public class ContributionProxy extends NotificationBroadcasterSupport implements ContributionProxyMBean, IContributionStateChangedDispatcher, Serializable {
-
-	private static final long serialVersionUID = 2259045008283911348L;
-
-	// methods of the server contribution resource this proxy invokes
-	public static final String OP_REFRESH_PROXY = "createProxy"; //$NON-NLS-1$
-	public static final String OP_GET_CHILD_CONTRIBUTIONS = "getChildContributions"; //$NON-NLS-1$
-	public static final String OP_GET_CONTRIBUTION_UI_URL = "getContributionUIUrl"; //$NON-NLS-1$
-
-	private String name;
-	private Set contributionProperties;
-	private ObjectName objectName;
-	private MBeanInfo info;
-	private Set listeners;
-	private ByteArrayHolder imageData;
-
-	public ContributionProxy() {
-	}
-
-	public ContributionProxy(String name, Set contributionProperties, ByteArrayHolder imageData, ObjectName objectName, MBeanInfo info) {
-		this.name = name;
-		this.contributionProperties = contributionProperties;
-		this.objectName = objectName;
-		this.info = info;
-		this.imageData = imageData;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.common.contrib.ContributionProxyMBean#getObjectName()
-	 */
-	public ObjectName getObjectName() {
-		return objectName;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.common.contrib.ContributionProxyMBean#getName()
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.common.contrib.ContributionProxyMBean#getMBeanInfo()
-	 */
-	public MBeanInfo getMBeanInfo() {
-		return info;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.common.contrib.ContributionProxyMBean#getContributionProperties()
-	 */
-	public Set getContributionProperties() {
-		return contributionProperties;
-	}
-
-	/**
-	 * Get the <code>ByteArrayHolder</code> containing the raw image data, or null if no image.
-	 * 
-	 * @return The <code>ByteArrayHolder</code> for this contribution or null if no image.
-	 */
-	public ByteArrayHolder getImageData() {
-		return imageData;
-	}
-
-	public ContributionProxy[] getChildContributions(MBeanServerConnection server) throws InstanceNotFoundException, NotCompliantMBeanException, MBeanException, ReflectionException, IOException {
-		Object obj = server.invoke(getObjectName(), ContributionProxy.OP_GET_CHILD_CONTRIBUTIONS, null, null);
-		if (obj instanceof ContributionProxy[]) {
-			return (ContributionProxy[]) obj;
-		} else if (obj instanceof Object[]) {
-			Object[] objs = (Object[]) obj;
-			ContributionProxy[] proxies = new ContributionProxy[objs.length];
-			for (int i = 0; i < objs.length; i++) {
-				if (objs[i] instanceof ContributionProxy) {
-					proxies[i] = (ContributionProxy) objs[i];
-				}
-			}
-			return proxies;
-		}
-		return null;
-	}
-
-	public void refresh(MBeanServerConnection server) throws InstanceNotFoundException, MBeanException, ReflectionException, IOException {
-		ContributionProxy updatedProxy = (ContributionProxy) server.invoke(getObjectName(), OP_REFRESH_PROXY, null, null);
-		mirror(updatedProxy);
-		stateChanged();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.common.contrib.IContributionStateChangedDispatcher#stateChanged()
-	 */
-	public void stateChanged() {
-		if (listeners == null) {
-			return;
-		}
-		Iterator iter = listeners.iterator();
-		while (iter.hasNext()) {
-			IContributionStateChangeListener listener = (IContributionStateChangeListener) iter.next();
-			listener.stateChanged(this);
-		}
-	}
-
-	/**
-	 * Add a listener which will receive state change events from this <code>ContributionProxy</code>.
-	 * 
-	 * @param listener The listener to add.
-	 */
-	public void addStateChangeListener(IContributionStateChangeListener listener) {
-		if (listeners == null) {
-			listeners = new HashSet(2);
-		}
-		listeners.add(listener);
-	}
-
-	/**
-	 * Remove the provided listener from this <code>ContributionProxy</code>s list of registered
-	 * listeners.
-	 * 
-	 * @param listener The listener to add.
-	 */
-	public void removeStateChangeListener(IContributionStateChangeListener listener) {
-		if (listeners != null) {
-			listeners.remove(listener);
-		}
-	}
-
-	/**
-	 * Update the <code>ContributionProxy</code>.
-	 * 
-	 * @param name The updated name.
-	 * @param contributionProperties The updated properties.
-	 * @param imageData The updated image data.
-	 * @param objectName The updated object name.
-	 * @param info The updated info.
-	 */
-	public void update(String name, Set contributionProperties, ByteArrayHolder imageData, ObjectName objectName, MBeanInfo info) {
-		this.name = name;
-		this.contributionProperties = contributionProperties;
-		this.objectName = objectName;
-		this.info = info;
-		this.imageData = imageData;
-	}
-
-	private void mirror(ContributionProxy contribution) {
-		this.name = contribution.getName();
-		this.contributionProperties = contribution.getContributionProperties();
-		this.objectName = contribution.getObjectName();
-		this.info = contribution.getMBeanInfo();
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionProxyMBean.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionProxyMBean.java
deleted file mode 100644
index 4f30fa4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/ContributionProxyMBean.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-import java.util.Set;
-import javax.management.MBeanInfo;
-import javax.management.ObjectName;
-
-public interface ContributionProxyMBean {
-
-	/**
-	 * Get the <code>ObjectName</code> for the resource
-	 * which the implementing <code>ContributionProxy</code>
-	 * is a proxy for.
-	 * 
-	 * @return The <code>ObjectName</code> which identifies this resource on the server.
-	 */
-	public ObjectName getObjectName();
-
-	/**
-	 * A concise name which is used to identify this contribution in the UI.
-	 * 
-	 * @return The name of this contribution.
-	 */
-	public String getName();
-
-	/**
-	 * Return the <code>MBeanInfo</code> which describes the operations this contribution
-	 * exposes to clients.
-	 * 
-	 * @return The <code>MBeanInfo</code> associated with this contribution.
-	 */
-	public MBeanInfo getMBeanInfo();
-
-	/**
-	 * Get the properties of which describe the contribution. 
-	 * The element[i][1..n] entries are to be interpreted as 
-	 * values for the property name at element[i][0].
-	 * 
-	 * @return The properties of the contribution to be displayed in the ui.
-	 */
-	public Set getContributionProperties();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/IContributionStateChangeListener.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/IContributionStateChangeListener.java
deleted file mode 100644
index 5368cb9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/IContributionStateChangeListener.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-public interface IContributionStateChangeListener {
-	public void stateChanged(ContributionProxy source);
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/IContributionStateChangedDispatcher.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/IContributionStateChangedDispatcher.java
deleted file mode 100644
index 6d7cb88..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/IContributionStateChangedDispatcher.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-public interface IContributionStateChangedDispatcher {
-	public void stateChanged();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/JMXConstants.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/JMXConstants.java
deleted file mode 100644
index ae71d4a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/JMXConstants.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-public final class JMXConstants {
-	public static final String DEFAULT_DOMAIN = "jmxserver"; //$NON-NLS-1$
-	public static final String DEFAULT_PORT = "8118"; //$NON-NLS-1$
-	public static final String DEFAULT_PROTOCOL = "rmi"; //$NON-NLS-1$
-	//	public static final String DEFAULT_PROTOCOL = "xmlrpc"; //$NON-NLS-1$
-	public static final int DEFAULT_PORT_AS_INT = Integer.parseInt(DEFAULT_PORT);
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/NamedNotification.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/NamedNotification.java
deleted file mode 100644
index 4db7b41..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/NamedNotification.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-import javax.management.Notification;
-import javax.management.ObjectName;
-
-public class NamedNotification extends Notification implements Comparable {
-
-	private static final long serialVersionUID = 5605927554935255591L;
-
-	private static long notificationCounter;
-	private final long notificationId;
-	private ObjectName name;
-
-	public NamedNotification(ObjectName name, Notification notification) {
-		super(notification.getType(), name, notification.getSequenceNumber(), notification.getTimeStamp(), notification.getMessage());
-		this.notificationId = notificationCounter++;
-		this.name = name;
-	}
-
-	public ObjectName getObjectName() {
-		return name;
-	}
-
-	public long getNotificationId() {
-		return notificationId;
-	}
-
-	/* (non-Javadoc)
-	 * @see java.lang.Comparable#compareTo(T)
-	 */
-	public int compareTo(Object obj) {
-		if (!(obj instanceof NamedNotification)) {
-			if (obj instanceof Comparable) {
-				return ((Comparable) obj).compareTo(this);
-			}
-			throw new ClassCastException();
-		}
-		NamedNotification nn = (NamedNotification) obj;
-		int ret = getObjectName().toString().compareTo(nn.getObjectName().toString());
-		return ret;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/RootContribution.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/RootContribution.java
deleted file mode 100644
index 42df4fa..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/RootContribution.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-import java.util.*;
-import javax.management.ObjectName;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.equinox.jmx.internal.common.Activator;
-
-public class RootContribution extends ContributionProxy implements RootContributionMBean {
-	private static final long serialVersionUID = 7227341044245163642L;
-
-	public static final String CLASS_NAME = RootContribution.class.getName();
-	public static final String NOTIFICATION_TYPE = "contributions"; //$NON-NLS-1$
-	public static final String DEFAULT_DOMAIN = Activator.DEFAULT_DOMAIN;
-	public static final String OBJECT_NAME_STR = DEFAULT_DOMAIN + ":type=" + CLASS_NAME; //$NON-NLS-1$
-	public static ObjectName OBJECT_NAME;
-	static {
-		try {
-			OBJECT_NAME = ObjectName.getInstance(OBJECT_NAME_STR);
-		} catch (Exception e) {
-			Activator.logError(e);
-		}
-	}
-	private final Set contributions;
-
-	/**
-	 * Default constructor for root contribution item.
-	 */
-	public RootContribution() {
-		this(new ContributionProxy[0]);
-	}
-
-	/**
-	 * Constructor for allocating a new <code>RootContributions</code> object which
-	 * contains the provided contributions as children.
-	 * 
-	 * @param rootContributionProxies The immediate children of this contribution.
-	 */
-	public RootContribution(ContributionProxy[] rootContributionProxies) {
-		super("root", null, null, OBJECT_NAME, null); //$NON-NLS-1$
-		this.contributions = new HashSet();
-		updateContributionProxies(rootContributionProxies);
-	}
-
-	public void registerContributionProxy(ContributionProxy proxy) {
-		Iterator iter = contributions.iterator();
-		boolean addproxy = true;
-		while (iter.hasNext()) {
-			ContributionProxy rootProxy = (ContributionProxy) iter.next();
-			if (rootProxy.getName().equals(proxy.getName())) {
-				addproxy |= false;
-				break;
-			}
-		}
-		if (addproxy) {
-			contributions.add(proxy);
-		}
-	}
-
-	public void unregisterContributionProxy(ContributionProxy proxy) {
-		Iterator iter = contributions.iterator();
-		while (iter.hasNext()) {
-			ContributionProxy rootProxy = (ContributionProxy) iter.next();
-			if (rootProxy.getName().equals(proxy.getName())) {
-				iter.remove();
-				break;
-			}
-		}
-	}
-
-	public void updateContributionProxies(ContributionProxy[] proxies) {
-		Assert.isNotNull(proxies);
-		contributions.clear();
-		for (int i = 0; i < proxies.length; i++) {
-			this.contributions.add(proxies[i]);
-		}
-	}
-
-	public Set getRootContributionProxies() {
-		return contributions;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.common.RootContributionMBean#queryRootContribution()
-	 */
-	public RootContribution queryRootContribution() {
-		return this;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.common.contrib.RootContributionMBean#getRootContributions()
-	 */
-	public ContributionProxy[] queryRootContributions() {
-		return (ContributionProxy[]) contributions.toArray(new ContributionProxy[contributions.size()]);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/RootContributionMBean.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/RootContributionMBean.java
deleted file mode 100644
index e39359b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/RootContributionMBean.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common;
-
-public interface RootContributionMBean {
-
-	public static final String OP_GET_ROOT_CONTRIBUTIONS = "queryRootContributions";//$NON-NLS-1$
-	public static final String OP_GET_ROOT_CONTRIBUTION = "queryRootContribution";//$NON-NLS-1$
-
-	/**
-	 * Get the list of root <code>ContributionProxy</code>s.
-	 * 
-	 * @return The list of root contributions.
-	 */
-	public ContributionProxy[] queryRootContributions();
-
-	public RootContribution queryRootContribution();
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/ByteArrayHolder.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/ByteArrayHolder.java
deleted file mode 100644
index 28d7723..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/ByteArrayHolder.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common.util;
-
-import java.io.Serializable;
-
-/**
- * Holder for <code>bytes</code>s.
- */
-public final class ByteArrayHolder implements Serializable {
-
-	private static final long serialVersionUID = 7212161648975273292L;
-
-	/**
-	 * The <code>byte</code>s held by this holder.
-	 */
-	public byte[] value;
-
-	/**
-	 * Default constructor.
-	 */
-	public ByteArrayHolder() {
-		this(null);
-	}
-
-	/**
-	 * Allocate a new <code>ByteArrayHolder</code>.
-	 * 
-	 * @param value The <code>byte<code>s to hold, <code>null</code> if none.
-	 */
-	public ByteArrayHolder(byte[] value) {
-		this.value = value;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/MBeanInfoWrapper.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/MBeanInfoWrapper.java
deleted file mode 100644
index 995d6e0..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/MBeanInfoWrapper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import javax.management.*;
-
-/**
- * Utility class for creating <code>MBeanInfo</code> objects
- * from a specified class.
- */
-public class MBeanInfoWrapper {
-
-	public static MBeanInfo createMBeanInfo(Class cls, String description, MBeanAttributeInfo[] attributes, MBeanNotificationInfo[] notifications) {
-		return new MBeanInfo(cls.getName(), description, attributes, createMBeanConstructorInfoAry(cls), createMBeanOperationInfoAry(cls), notifications);
-	}
-
-	public static MBeanConstructorInfo[] createMBeanConstructorInfoAry(Class cls) {
-		MBeanConstructorInfo[] ret = new MBeanConstructorInfo[cls.getConstructors().length];
-		Constructor[] constructors = cls.getConstructors();
-		for (int i = 0; i < ret.length; i++) {
-			Constructor c = constructors[i];
-			ret[i] = createMBeanConstructorInfo(c);
-		}
-		return ret;
-	}
-
-	public static MBeanConstructorInfo createMBeanConstructorInfo(Constructor c) {
-		return new MBeanConstructorInfo("", c); //$NON-NLS-1$ //TODO request description
-	}
-
-	public static MBeanOperationInfo[] createMBeanOperationInfoAry(Class cls) {
-		MBeanOperationInfo[] ret = new MBeanOperationInfo[cls.getMethods().length];
-		Method[] methods = cls.getMethods();
-		for (int i = 0; i < ret.length; i++) {
-			Method m = methods[i];
-			ret[i] = createMBeanOperationInfo(m);
-		}
-		return ret;
-	}
-
-	public static MBeanOperationInfo createMBeanOperationInfo(Method method) {
-		return new MBeanOperationInfo("", method); //$NON-NLS-1$ //TODO request description
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/MBeanUtils.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/MBeanUtils.java
deleted file mode 100644
index e766c8f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/MBeanUtils.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common.util;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import javax.management.MBeanParameterInfo;
-
-public class MBeanUtils {
-	public static Object[] getParameters(String[] textParams, MBeanParameterInfo[] params) throws ClassNotFoundException {
-		if (textParams == null || params == null) {
-			return null;
-		}
-		Object[] ret = new Object[textParams.length];
-		for (int i = 0; i < ret.length && i < params.length; i++) {
-			MBeanParameterInfo param = params[i];
-			String texti = textParams[i];
-			if (texti.length() == 0) {
-				ret[i] = null;
-			} else if (param.getType().equals("byte")) { //$NON-NLS-1$
-				ret[i] = new Byte(texti);
-			} else if (param.getType().equals("short")) {//$NON-NLS-1$
-				ret[i] = new Short(texti);
-			} else if (param.getType().equals("java.lang.Short")) {//$NON-NLS-1$
-				ret[i] = new Short(texti);
-			} else if (param.getType().equals("int")) {//$NON-NLS-1$
-				ret[i] = new Integer(texti);
-			} else if (param.getType().equals("java.lang.Integer")) {//$NON-NLS-1$
-				ret[i] = new Integer(texti);
-			} else if (param.getType().equals("long")) {//$NON-NLS-1$
-				ret[i] = new Long(texti);
-			} else if (param.getType().equals("java.lang.Long")) {//$NON-NLS-1$
-				ret[i] = new Long(texti);
-			} else if (param.getType().equals("float")) {//$NON-NLS-1$
-				ret[i] = new Float(texti);
-			} else if (param.getType().equals("java.lang.Float")) {//$NON-NLS-1$
-				ret[i] = new Float(texti);
-			} else if (param.getType().equals("double")) {//$NON-NLS-1$
-				ret[i] = new Double(texti);
-			} else if (param.getType().equals("java.lang.Double")) {//$NON-NLS-1$
-				ret[i] = new Double(texti);
-			} else if (param.getType().equals("char")) {//$NON-NLS-1$
-				ret[i] = new Character(texti.charAt(0));
-			} else if (param.getType().equals("boolean")) {//$NON-NLS-1$
-				ret[i] = new Boolean(texti);
-			} else if (MBeanUtils.class.getClassLoader().loadClass("java.lang.Number").isAssignableFrom(MBeanUtils.class.getClassLoader().loadClass(param.getType()))) {//$NON-NLS-1$
-				ret[i] = createNumber(texti);
-			} else {
-				ret[i] = texti;
-			}
-		}
-		return ret;
-	}
-
-	public static Number createNumber(String val) {
-		try {
-			return new Byte(val);
-		} catch (NumberFormatException e) {
-		}
-		try {
-			return new BigDecimal(val);
-		} catch (NumberFormatException e) {
-		}
-		try {
-			return new BigInteger(val);
-		} catch (NumberFormatException e) {
-		}
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/RingBuffer.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/RingBuffer.java
deleted file mode 100644
index 0d96087..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/RingBuffer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common.util;
-
-public class RingBuffer {
-
-	private Object[] buffer;
-	private int next = 0;
-	private int size;
-
-	public RingBuffer(int size) {
-		buffer = new Object[this.size = Math.max(1, size)];
-	}
-
-	public synchronized int add(Object obj) {
-		next %= size;
-		buffer[next] = obj;
-		return next++;
-	}
-
-	public synchronized Object[] subset(int start, int end) {
-		start = start >= 0 ? start : 0;
-		end = end <= next ? end : next;
-		if (start >= end) {
-			return null;
-		}
-		Object[] result = new Object[end - start];
-		for (int i = 0; i < result.length; i++) {
-			result[i] = buffer[start++];
-		}
-		return result;
-	}
-
-	public Object[] subset(int start) {
-		return subset(start, next);
-	}
-
-	public synchronized Object getObject(int idx) {
-		if (idx < 0 || next == 0) {
-			return null;
-		}
-		return buffer[idx < next ? idx : next - 1];
-	}
-
-	public int getNextPosition() {
-		return next;
-	}
-
-	public int getSize() {
-		return size;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/TextUtils.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/TextUtils.java
deleted file mode 100644
index d9346bd..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/common/util/TextUtils.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.common.util;
-
-public class TextUtils {
-
-	static final String QUOTE = """; //$NON-NLS-1$
-	static final String LESS_THAN = "<"; //$NON-NLS-1$
-	static final String GREATER_THAN = ">"; //$NON-NLS-1$
-	static final String AMPERSAND = "&"; //$NON-NLS-1$
-
-	public static String escapeForMarkup(String strin) {
-		return escapeForMarkup(new StringBuffer(strin));
-	}
-
-	/**
-	 * Return a valid UTF8 xml encoded string from the input string buffer 
-	 * provided.
-	 * 
-	 * @param buffer The <code>StringBuffer</code> to encode.
-	 * @return The encoded string.
-	 */
-	public static String escapeForMarkup(StringBuffer buffer) {
-		if (buffer == null) {
-			return null;
-		}
-		final StringBuffer result = new StringBuffer();
-		char c;
-		int len = buffer.length();
-		for (int i = 0; i < len; i++) {
-			c = buffer.charAt(i);
-			switch (c) {
-				case '"' :
-					result.append(QUOTE);
-					break;
-				case '<' :
-					result.append(LESS_THAN);
-					break;
-				case '>' :
-					result.append(GREATER_THAN);
-					break;
-				case '&' :
-					result.append(AMPERSAND);
-					break;
-				case '\r' :
-					result.append(c);
-					break;
-				case '\n' :
-					result.append(c);
-					break;
-				case '\t' :
-					result.append(c);
-					break;
-				default :
-					if (c > 0x20 && c < 0x7f) {
-						result.append(c);
-					}
-			}
-		}
-		return result.toString();
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/Activator.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/Activator.java
deleted file mode 100644
index 04ceec3..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/Activator.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.common;
-
-import org.eclipse.core.runtime.IStatus;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class Activator implements BundleActivator {
-
-	// default server settings
-	public static final String DEFAULT_DOMAIN = "jmxserver"; //$NON-NLS-1$
-	public static final String DEFAULT_PORT = "3600"; //$NON-NLS-1$
-	public static final int DEFAULT_PORT_AS_INT = 3600;
-	public static final String DEFAULT_HOST_PORT = "127.0.0.1:" + DEFAULT_PORT; //$NON-NLS-1$
-
-	public static final String PLUGIN_ID = "org.eclipse.equinox.jmx.common"; //$NON-NLS-1$
-
-	// id constants of available extension points
-	public static final String PT_CONTRIBUTIONUI = "contributionui"; //$NON-NLS-1$
-
-	//The shared instance.
-	private static Activator instance;
-	private static BundleContext bundleContext;
-	private static ServiceTracker logService;
-
-	/**
-	 * The constructor.
-	 */
-	public Activator() {
-		instance = this;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		bundleContext = context;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		instance = null;
-		if (logService != null) {
-			logService.close();
-			logService = null;
-		}
-	}
-
-	/**
-	 * Return this bundle's context.
-	 * 
-	 * @return the bundle context
-	 */
-	public BundleContext getBundleContext() {
-		return bundleContext;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static Activator getDefault() {
-		return instance;
-	}
-
-	/**
-	 * Log the given message and exception to the log file.
-	 * 
-	 * @param message The message to log.
-	 * @param exception The exception to log.
-	 * @param iStatusSeverity The <code>IStatus</code> severity level.
-	 */
-	public static void log(String message, Throwable exception, int iStatusSeverity) {
-		if (message == null) {
-			message = exception.getMessage();
-			if (message == null)
-				message = CommonMessages.exception_occurred;
-		}
-		if (logService == null) {
-			logService = new ServiceTracker(bundleContext, LogService.class.getName(), null);
-			logService.open();
-		}
-		LogService log = (LogService) logService.getService();
-		int severity = LogService.LOG_INFO;
-		switch (iStatusSeverity) {
-			case IStatus.ERROR :
-				severity = LogService.LOG_ERROR;
-				break;
-			case IStatus.WARNING :
-				severity = LogService.LOG_WARNING;
-				break;
-			case IStatus.INFO :
-			default :
-				severity = LogService.LOG_INFO;
-				break;
-		}
-		if (log == null) {
-			System.out.println(PLUGIN_ID);
-			System.out.println(severity);
-			System.out.println(message);
-			if (exception != null)
-				exception.printStackTrace(System.out);
-		} else
-			log.log(severity, message, exception);
-	}
-
-	/**
-	 * Log the given message and exception to the log file with a
-	 * status code of <code>IStatus.ERROR</code>.
-	 * 
-	 * @param message The message to log.
-	 * @param exception The thrown exception.
-	 */
-	public static void logError(String message, Throwable exception) {
-		log(message, exception, IStatus.ERROR);
-	}
-
-	/**
-	 * Log the given exception to the log file with a
-	 * status code of <code>IStatus.ERROR</code>.
-	 *
-	 * @param exception The thrown exception.
-	 */
-	public static void logError(Throwable exception) {
-		log(exception.getMessage(), exception, IStatus.ERROR);
-	}
-
-	/**
-	 * Log the given message to the log file with a
-	 * status code of <code>IStatus.INFO</code>.
-	 * 
-	 * @param message The message to log.
-	 */
-	public static void log(String message) {
-		log(message, null, IStatus.INFO);
-	}
-
-	/**
-	 * Log the given exception to the log file with a
-	 * status code of <code>IStatus.INFO</code>.
-	 * 
-	 * @param exception The thrown exception.
-	 */
-	public static void log(Throwable exception) {
-		log(exception.getMessage(), exception, IStatus.INFO);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/CommonMessages.java b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/CommonMessages.java
deleted file mode 100644
index c843db9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/CommonMessages.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.common;
-
-import org.eclipse.osgi.util.NLS;
-
-public class CommonMessages extends NLS {
-
-	public static String invalid_server_type;
-	public static String contribution_instance_not_found;
-	public static String exception_occurred;
-
-	private CommonMessages() {
-		// disallow instantiations
-	}
-
-	static {
-		NLS.initializeMessages("org.eclipse.equinox.jmx.common.CommonMessages", CommonMessages.class); //$NON-NLS-1$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/CommonMessages.properties b/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/CommonMessages.properties
deleted file mode 100644
index 6a2c11d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.common/src/org/eclipse/equinox/jmx/internal/common/CommonMessages.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-invalid_server_type = Invalid server type.
-contribution_instance_not_found = Contribution not found on server.
-exception_occurred = An exception occurred.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.project b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.project
deleted file mode 100644
index fc2cf9f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.server.rmi</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8dac44b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,309 +0,0 @@
-#Thu May 10 13:52:24 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index f3694a5..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Thu Feb 22 14:20:17 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/META-INF/MANIFEST.MF
deleted file mode 100644
index 1ec702c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,17 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: RMI Transport Server Plug-in (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.server.rmi;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Import-Package: javax.management,
- javax.management.remote,
- org.eclipse.core.runtime;common=split,
- org.osgi.framework,
- org.eclipse.equinox.jmx.server
-Eclipse-LazyStart: true
-Bundle-Activator: org.eclipse.equinox.jmx.internal.rmi.Activator
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
-Bundle-Vendor: Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/build.properties
deleted file mode 100644
index 3a4d457..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               server.policy,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/plugin.xml b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/plugin.xml
deleted file mode 100644
index af780d6..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
-<plugin>
-   <extension
-         point="org.eclipse.equinox.jmx.server.provider">
-      <provider
-            class="org.eclipse.equinox.jmx.internal.rmi.RMIServer"
-            protocol="rmi"/>
-   </extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/server.policy b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/server.policy
deleted file mode 100644
index a5709c0..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/server.policy
+++ /dev/null
@@ -1 +0,0 @@
-grant { permission java.security.AllPermission; };
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/src/org/eclipse/equinox/jmx/internal/rmi/Activator.java b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/src/org/eclipse/equinox/jmx/internal/rmi/Activator.java
deleted file mode 100644
index 9a40603..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/src/org/eclipse/equinox/jmx/internal/rmi/Activator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.rmi;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-
-	private static BundleContext context;
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext bundleContext) throws Exception {
-		Activator.context = bundleContext;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext bundleContext) throws Exception {
-		Activator.context = null;
-	}
-
-	public static BundleContext getBundleContext() {
-		return context;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/src/org/eclipse/equinox/jmx/internal/rmi/RMIServer.java b/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/src/org/eclipse/equinox/jmx/internal/rmi/RMIServer.java
deleted file mode 100644
index f940d05..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.rmi/src/org/eclipse/equinox/jmx/internal/rmi/RMIServer.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.rmi;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.rmi.RMISecurityManager;
-import java.rmi.registry.LocateRegistry;
-import java.util.Map;
-import javax.management.MBeanServer;
-import javax.management.remote.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.IJMXConnectorServerProvider;
-
-public class RMIServer implements IJMXConnectorServerProvider {
-
-	private int port;
-
-	public JMXServiceURL getJMXServiceURL(String host, int port, String protocol, String domain) throws MalformedURLException {
-		this.port = port;
-		return new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/" + domain);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorServerProvider#newJMXConnectorServer(javax.management.remote.JMXServiceURL, java.util.Map, javax.management.MBeanServer)
-	 */
-	public JMXConnectorServer newJMXConnectorServer(JMXServiceURL arg0, Map arg1, MBeanServer arg2) throws IOException {
-		initialize();
-		return JMXConnectorServerFactory.newJMXConnectorServer(arg0, arg1, arg2);
-	}
-
-	private void initialize() throws IOException {
-		// load the security policy from the bundle install location
-		IPath serverPolicyFileName = new Path("server.policy"); //$NON-NLS-1$
-		URL serverPolicyBundleURL = FileLocator.find(Activator.getBundleContext().getBundle(), serverPolicyFileName, null);
-		if (serverPolicyBundleURL == null)
-			throw new FileNotFoundException("Unable to find server policy file.");
-		serverPolicyBundleURL = FileLocator.toFileURL(serverPolicyBundleURL);
-		System.setProperty("java.security.policy", serverPolicyBundleURL.getFile()); //$NON-NLS-1$
-		// must register port and rmi security manager
-		LocateRegistry.createRegistry(port);
-		System.setSecurityManager(new RMISecurityManager());
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.project b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.project
deleted file mode 100644
index a121d9c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.server.xmlrpc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 1e525e6..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,311 +0,0 @@
-#Mon Feb 26 11:27:25 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
-org.eclipse.jdt.core.compiler.compliance=1.3
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 5da134c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:27:25 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/META-INF/MANIFEST.MF
deleted file mode 100644
index 2303527..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,24 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: XMLRPC Transport Server Plug-in (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.server.xmlrpc;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-ClassPath: .
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
-Import-Package: javax.management,
- javax.management.loading,
- javax.management.remote,
- org.apache.xmlrpc,
- org.apache.xmlrpc.server,
- org.apache.xmlrpc.webserver,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.common.util,
- org.eclipse.equinox.jmx.server,
- javax.servlet;version="[2.4.0,2.5.0)",
- javax.servlet.http;version="[2.4.0,2.5.0)",
- org.mortbay.http;version="[5.1.0,6.0.0)",
- org.mortbay.jetty.servlet;version="[5.1.0,6.0.0)",
- org.mortbay.util;version="[5.1.0,6.0.0)"
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/build.properties
deleted file mode 100644
index cd0aa26..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/plugin.xml b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/plugin.xml
deleted file mode 100644
index 5ff3aab..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
-<plugin>
-   <extension
-         point="org.eclipse.equinox.jmx.server.provider">
-      <provider
-            class="org.eclipse.equinox.jmx.server.internal.xmlrpc.XMLRPCServer"
-            protocol="xmlrpc"/>
-   </extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCJMXConnectorServer.java b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCJMXConnectorServer.java
deleted file mode 100644
index 16e2f6e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCJMXConnectorServer.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.server.internal.xmlrpc;
-
-import java.io.IOException;
-import java.util.Map;
-import javax.management.MBeanServer;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXServiceURL;
-
-public class XMLRPCJMXConnectorServer extends JMXConnectorServer {
-
-	private JMXServiceURL url;
-	private XMLRPCMBeanServerAdapter xmlrpcServer;
-
-	public XMLRPCJMXConnectorServer(JMXServiceURL url, MBeanServer mbeanServer) {
-		this.url = url;
-		xmlrpcServer = new XMLRPCMBeanServerAdapter(url.getPort(), mbeanServer);
-		super.setMBeanServerForwarder(xmlrpcServer);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorServerMBean#start()
-	 */
-	public synchronized void start() throws IOException {
-		if (!xmlrpcServer.isActive()) {
-			xmlrpcServer.start();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorServerMBean#stop()
-	 */
-	public synchronized void stop() throws IOException {
-		xmlrpcServer.stop();
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorServerMBean#isActive()
-	 */
-	public synchronized boolean isActive() {
-		return xmlrpcServer.isActive();
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorServerMBean#getAddress()
-	 */
-	public JMXServiceURL getAddress() {
-		return url;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorServerMBean#getAttributes()
-	 */
-	public Map getAttributes() {
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCMBeanServerAdapter.java b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCMBeanServerAdapter.java
deleted file mode 100644
index 4d96b53..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCMBeanServerAdapter.java
+++ /dev/null
@@ -1,538 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.server.internal.xmlrpc;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.lang.reflect.Method;
-import java.util.*;
-import javax.management.*;
-import javax.management.loading.ClassLoaderRepository;
-import javax.management.remote.MBeanServerForwarder;
-import javax.servlet.*;
-import org.apache.xmlrpc.*;
-import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
-import org.apache.xmlrpc.server.XmlRpcNoSuchHandlerException;
-import org.apache.xmlrpc.webserver.XmlRpcServlet;
-import org.eclipse.equinox.jmx.common.NamedNotification;
-import org.eclipse.equinox.jmx.common.util.RingBuffer;
-import org.mortbay.http.*;
-import org.mortbay.jetty.servlet.ServletHandler;
-import org.mortbay.jetty.servlet.ServletHolder;
-
-public class XMLRPCMBeanServerAdapter implements MBeanServerForwarder, NotificationListener {
-
-	private static final int NOTIFICATIONS_BUFFER_SIZE = 100;
-	private static final String INTERNAL_CONTEXT_CLASSLOADER = "internal.ContextClassLoader"; //$NON-NLS-1$
-	private static final String INTERNAL_MAPPING = "internal.Mapping"; //$NON-NLS-1$
-
-	final Map notificationBroadcasters = new HashMap();
-	private final RingBuffer notificationsBuffer = new RingBuffer(NOTIFICATIONS_BUFFER_SIZE);
-	private final HttpServer webServer;
-	static XmlRpcHandlerMappingImpl mapping;
-	private MBeanServer mbs;
-	private boolean started;
-
-	/**
-	 * XML-RPC Web server adapter that allows for dynamic adding of handlers.  It
-	 * is important to note that any handler mapping registered with the server
-	 * is replaced with our custom handler mapping implementation.
-	 * 
-	 * @param port The port for the web server to listen on.
-	 * @param mbs The <code>MBeanServer</code> which stores the registered mbeans.
-	 */
-	public XMLRPCMBeanServerAdapter(int port, MBeanServer mbs) {
-		this.webServer = new HttpServer();
-		this.mbs = mbs;
-		mapping = new XmlRpcHandlerMappingImpl();
-		// support retrieval of notifications from clients
-		mapping.addNameHandler("retrieveNotifications"); //$NON-NLS-1$
-		SocketListener httpListener = new SocketListener();
-		httpListener.setPort(port);
-		if (httpListener != null)
-			webServer.addListener(httpListener);
-
-		ServletHandler servlets = new ServletHandler();
-		servlets.setAutoInitializeServlets(true);
-
-		ServletHolder holder = servlets.addServlet("/", InternalHttpServiceServlet.class.getName()); //$NON-NLS-1$
-		holder.setInitOrder(0);
-		holder.setInitParameter("enabledForExtensions", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-
-		HttpContext httpContext = new HttpContext();
-		httpContext.setAttribute(INTERNAL_CONTEXT_CLASSLOADER, Thread.currentThread().getContextClassLoader());
-		httpContext.setAttribute(INTERNAL_MAPPING, mapping);
-		httpContext.setClassLoader(this.getClass().getClassLoader());
-		httpContext.setContextPath("/"); //$NON-NLS-1$
-		httpContext.addHandler(servlets);
-
-		webServer.addContext(httpContext);
-	}
-
-	public void start() throws IOException {
-		if (!started) {
-			try {
-				webServer.start();
-			} catch (IOException e) {
-				throw e;
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-	public void stop() {
-		if (webServer.isStarted()) {
-			try {
-				webServer.stop();
-			} catch (InterruptedException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-	public boolean isActive() {
-		return webServer.isStarted();
-	}
-
-	public static class InternalHttpServiceServlet extends XmlRpcServlet {
-		private static final long serialVersionUID = 6297772804215794345L;
-		private ClassLoader contextLoader;
-
-		public void init(ServletConfig config) throws ServletException {
-			ServletContext context = config.getServletContext();
-			contextLoader = (ClassLoader) context.getAttribute(INTERNAL_CONTEXT_CLASSLOADER);
-			mapping = (XmlRpcHandlerMappingImpl) context.getAttribute(INTERNAL_MAPPING);
-
-			Thread thread = Thread.currentThread();
-			ClassLoader current = thread.getContextClassLoader();
-			thread.setContextClassLoader(contextLoader);
-			try {
-				super.init(config);
-			} finally {
-				thread.setContextClassLoader(current);
-			}
-		}
-
-		public void destroy() {
-			Thread thread = Thread.currentThread();
-			ClassLoader current = thread.getContextClassLoader();
-			thread.setContextClassLoader(contextLoader);
-			try {
-				super.destroy();
-			} finally {
-				thread.setContextClassLoader(current);
-			}
-			contextLoader = null;
-		}
-
-		public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
-			Thread thread = Thread.currentThread();
-			ClassLoader current = thread.getContextClassLoader();
-			thread.setContextClassLoader(contextLoader);
-			try {
-				super.service(req, res);
-			} finally {
-				thread.setContextClassLoader(current);
-			}
-		}
-		
-		protected XmlRpcHandlerMapping newXmlRpcHandlerMapping() {
-			return mapping;
-		}
-		
-	}
-	
-	protected class XmlRpcHandlerMappingImpl implements XmlRpcHandlerMapping {
-
-		// use hashtable as synchronization is required
-		private final Map handlerMap = new Hashtable();
-		private final Handler handler = new Handler();
-
-		public void addNameHandler(String name) {
-			handlerMap.put(name, handler);
-		}
-
-		public void addObjectHandler(ObjectName name, Object obj) {
-			handlerMap.put(name.toString(), handler);
-			// if we are to handle the object, we must attempt to register with it 
-			// to receive notifications so we are able to forward them to connected clients.
-			if (obj instanceof NotificationBroadcaster) {
-				((NotificationBroadcaster) obj).addNotificationListener(XMLRPCMBeanServerAdapter.this, null, null);
-				// cache the broadcaster and its associated object name 
-				notificationBroadcasters.put(obj, name);
-			}
-		}
-
-		/* (non-Javadoc)
-		 * @see org.apache.xmlrpc.server.XmlRpcHandlerMapping#getHandler(java.lang.String)
-		 */
-		public XmlRpcHandler getHandler(String handlerName) throws XmlRpcNoSuchHandlerException, XmlRpcException {
-			XmlRpcHandler result = (XmlRpcHandler) handlerMap.get(parseRequest(handlerName)[0]);
-			return result;
-		}
-
-		private String[] parseRequest(String requestName) {
-			int delimIdx = requestName.indexOf('|');
-			String[] result = null;
-			if (delimIdx != -1) {
-				result = new String[2];
-				result[0] = requestName.substring(0, delimIdx);
-				result[1] = requestName.substring(delimIdx + 1);
-			} else {
-				result = new String[] {requestName};
-			}
-			return result;
-		}
-
-		private class Handler implements XmlRpcHandler {
-
-			public Object execute(XmlRpcRequest pRequest) throws XmlRpcException {
-				String request[] = parseRequest(pRequest.getMethodName());
-				String methodName = null;
-				if (request.length == 1) {
-					// mbean server request
-					methodName = request[0];
-				} else if (request.length == 2) {
-					// mbean request
-					methodName = request[1];
-				} else {
-					// unsupported request format
-					return null;
-				}
-				int nParams = pRequest.getParameterCount();
-				Class paramTypes[] = new Class[nParams];
-				Object params[] = new Object[nParams];
-				String signature[] = new String[nParams];
-				for (int i = 0; i < nParams; i++) {
-					Object iParam = pRequest.getParameter(i);
-					paramTypes[i] = iParam.getClass();
-					params[i] = iParam;
-					signature[i] = iParam.getClass().getName();
-				}
-				try {
-					if (request.length == 1) {
-						Method method = XMLRPCMBeanServerAdapter.this.getClass().getMethod(methodName, paramTypes);
-						return method.invoke(XMLRPCMBeanServerAdapter.this, params);
-					}
-					// invoke operation on object instance
-					return invoke(ObjectName.getInstance(request[0]), methodName, params, signature);
-				} catch (Exception e) {
-					throw new XmlRpcException(e.getMessage(), e);
-				}
-			}
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.MBeanServerForwarder#getMBeanServer()
-	 */
-	public MBeanServer getMBeanServer() {
-		return this;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.MBeanServerForwarder#setMBeanServer(javax.management.MBeanServer)
-	 */
-	public void setMBeanServer(MBeanServer mbs) {
-		if (this.mbs == null) {
-			this.mbs = mbs;
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#createMBean(java.lang.String, javax.management.ObjectName)
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException {
-		return mbs.createMBean(className, name);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#createMBean(java.lang.String, javax.management.ObjectName, javax.management.ObjectName)
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException {
-		return mbs.createMBean(className, name, loaderName);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#createMBean(java.lang.String, javax.management.ObjectName, java.lang.Object[], java.lang.String[])
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException {
-		return mbs.createMBean(className, name, params, signature);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#createMBean(java.lang.String, javax.management.ObjectName, javax.management.ObjectName, java.lang.Object[], java.lang.String[])
-	 */
-	public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException {
-		return mbs.createMBean(className, name, loaderName, params, signature);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#registerMBean(java.lang.Object, javax.management.ObjectName)
-	 */
-	public ObjectInstance registerMBean(Object object, ObjectName name) throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
-		mapping.addObjectHandler(name, object);
-		return mbs.registerMBean(object, name);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#unregisterMBean(javax.management.ObjectName)
-	 */
-	public void unregisterMBean(ObjectName name) throws InstanceNotFoundException, MBeanRegistrationException {
-		mbs.unregisterMBean(name);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getObjectInstance(javax.management.ObjectName)
-	 */
-	public ObjectInstance getObjectInstance(ObjectName name) throws InstanceNotFoundException {
-		return mbs.getObjectInstance(name);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#queryMBeans(javax.management.ObjectName, javax.management.QueryExp)
-	 */
-	public Set queryMBeans(ObjectName name, QueryExp query) {
-		return mbs.queryMBeans(name, query);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#queryNames(javax.management.ObjectName, javax.management.QueryExp)
-	 */
-	public Set queryNames(ObjectName name, QueryExp query) {
-		return mbs.queryNames(name, query);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#isRegistered(javax.management.ObjectName)
-	 */
-	public boolean isRegistered(ObjectName name) {
-		return mbs.isRegistered(name);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getMBeanCount()
-	 */
-	public Integer getMBeanCount() {
-		return mbs.getMBeanCount();
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getAttribute(javax.management.ObjectName, java.lang.String)
-	 */
-	public Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException {
-		return mbs.getAttribute(name, attribute);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getAttributes(javax.management.ObjectName, java.lang.String[])
-	 */
-	public AttributeList getAttributes(ObjectName name, String[] attributes) throws InstanceNotFoundException, ReflectionException {
-		return mbs.getAttributes(name, attributes);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#setAttribute(javax.management.ObjectName, javax.management.Attribute)
-	 */
-	public void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-		mbs.setAttribute(name, attribute);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#setAttributes(javax.management.ObjectName, javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(ObjectName name, AttributeList attributes) throws InstanceNotFoundException, ReflectionException {
-		return mbs.setAttributes(name, attributes);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException {
-		return mbs.invoke(name, operationName, params, signature);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getDefaultDomain()
-	 */
-	public String getDefaultDomain() {
-		return mbs.getDefaultDomain();
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getDomains()
-	 */
-	public String[] getDomains() {
-		return mbs.getDomains();
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#addNotificationListener(javax.management.ObjectName, javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException {
-		mbs.addNotificationListener(name, listener, filter, handback);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#addNotificationListener(javax.management.ObjectName, javax.management.ObjectName, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException {
-		mbs.addNotificationListener(name, listener, filter, handback);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#removeNotificationListener(javax.management.ObjectName, javax.management.ObjectName)
-	 */
-	public void removeNotificationListener(ObjectName name, ObjectName listener) throws InstanceNotFoundException, ListenerNotFoundException {
-		mbs.removeNotificationListener(name, listener);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#removeNotificationListener(javax.management.ObjectName, javax.management.ObjectName, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void removeNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException {
-		mbs.removeNotificationListener(name, listener, filter, handback);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#removeNotificationListener(javax.management.ObjectName, javax.management.NotificationListener)
-	 */
-	public void removeNotificationListener(ObjectName name, NotificationListener listener) throws InstanceNotFoundException, ListenerNotFoundException {
-		mbs.removeNotificationListener(name, listener);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#removeNotificationListener(javax.management.ObjectName, javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
-	 */
-	public void removeNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException {
-		mbs.removeNotificationListener(name, listener, filter, handback);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getMBeanInfo(javax.management.ObjectName)
-	 */
-	public MBeanInfo getMBeanInfo(ObjectName name) throws InstanceNotFoundException, IntrospectionException, ReflectionException {
-		return mbs.getMBeanInfo(name);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#isInstanceOf(javax.management.ObjectName, java.lang.String)
-	 */
-	public boolean isInstanceOf(ObjectName name, String className) throws InstanceNotFoundException {
-		return mbs.isInstanceOf(name, className);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#instantiate(java.lang.String)
-	 */
-	public Object instantiate(String className) throws ReflectionException, MBeanException {
-		return mbs.instantiate(className);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#instantiate(java.lang.String, javax.management.ObjectName)
-	 */
-	public Object instantiate(String className, ObjectName loaderName) throws ReflectionException, MBeanException, InstanceNotFoundException {
-		return mbs.instantiate(className, loaderName);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#instantiate(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	public Object instantiate(String className, Object[] params, String[] signature) throws ReflectionException, MBeanException {
-		return mbs.instantiate(className, params, signature);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#instantiate(java.lang.String, javax.management.ObjectName, java.lang.Object[], java.lang.String[])
-	 */
-	public Object instantiate(String className, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, MBeanException, InstanceNotFoundException {
-		return mbs.instantiate(className, loaderName, params, signature);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#deserialize(javax.management.ObjectName, byte[])
-	 */
-	public ObjectInputStream deserialize(ObjectName name, byte[] data) throws InstanceNotFoundException, OperationsException {
-		return mbs.deserialize(name, data);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#deserialize(java.lang.String, byte[])
-	 */
-	public ObjectInputStream deserialize(String className, byte[] data) throws OperationsException, ReflectionException {
-		return mbs.deserialize(className, data);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#deserialize(java.lang.String, javax.management.ObjectName, byte[])
-	 */
-	public ObjectInputStream deserialize(String className, ObjectName loaderName, byte[] data) throws InstanceNotFoundException, OperationsException, ReflectionException {
-		return mbs.deserialize(className, loaderName, data);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getClassLoaderFor(javax.management.ObjectName)
-	 */
-	public ClassLoader getClassLoaderFor(ObjectName mbeanName) throws InstanceNotFoundException {
-		return mbs.getClassLoaderFor(mbeanName);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getClassLoader(javax.management.ObjectName)
-	 */
-	public ClassLoader getClassLoader(ObjectName loaderName) throws InstanceNotFoundException {
-		return mbs.getClassLoader(loaderName);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.MBeanServer#getClassLoaderRepository()
-	 */
-	public ClassLoaderRepository getClassLoaderRepository() {
-		return mbs.getClassLoaderRepository();
-	}
-
-	public synchronized NamedNotification[] retrieveNotifications(Long startId) {
-		int nextPos = notificationsBuffer.getNextPosition();
-		if (nextPos == 0) {
-			return new NamedNotification[0];
-		}
-		NamedNotification lastNotification = (NamedNotification) notificationsBuffer.getObject(nextPos - 1);
-		long pStartId = startId.longValue();
-		if (lastNotification.getNotificationId() < pStartId) {
-			return new NamedNotification[0];
-		}
-		pStartId %= notificationsBuffer.getSize();
-		List result = new ArrayList(1);
-		for (; pStartId != nextPos; pStartId++) {
-			NamedNotification nn = (NamedNotification) notificationsBuffer.getObject((int) pStartId);
-			if (pStartId == notificationsBuffer.getSize()) {
-				pStartId %= notificationsBuffer.getSize();
-			}
-			result.add(nn);
-		}
-		return (NamedNotification[]) result.toArray(new NamedNotification[result.size()]);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.NotificationListener#handleNotification(javax.management.Notification, java.lang.Object)
-	 */
-	public synchronized void handleNotification(Notification notification, Object handback) {
-		// if the source of the notification is registered as a known broadcaster
-		// we store this notification and its object name for requesting clients
-		Object source = notification.getSource();
-		ObjectName broadcasterName = null;
-		if (source != null && (broadcasterName = (ObjectName) notificationBroadcasters.get(source)) != null) {
-			notificationsBuffer.add(new NamedNotification(broadcasterName, notification));
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCServer.java b/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCServer.java
deleted file mode 100644
index 461f158..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server.xmlrpc/src/org/eclipse/equinox/jmx/server/internal/xmlrpc/XMLRPCServer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.server.internal.xmlrpc;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-import javax.management.MBeanServer;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXServiceURL;
-import org.eclipse.equinox.jmx.server.IJMXConnectorServerProvider;
-
-public class XMLRPCServer implements IJMXConnectorServerProvider {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.IJMXConnectorServerProvider#getJMXServiceURL(java.lang.String, int, java.lang.String, java.lang.String)
-	 */
-	public JMXServiceURL getJMXServiceURL(String host, int port, String protocol, String domain) throws MalformedURLException {
-		return new JMXServiceURL("service:jmx:xmlrpc://" + host + ":" + port + "/" + (domain == null ? "" : domain));
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.remote.JMXConnectorServerProvider#newJMXConnectorServer(javax.management.remote.JMXServiceURL, java.util.Map, javax.management.MBeanServer)
-	 */
-	public JMXConnectorServer newJMXConnectorServer(JMXServiceURL arg0, Map arg1, MBeanServer arg2) throws IOException {
-		return new XMLRPCJMXConnectorServer(arg0, arg2);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.server/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/.project b/eclipse/plugins/org.eclipse.equinox.jmx.server/.project
deleted file mode 100644
index 12e9097..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.server</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.server/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 3cb7d5a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,313 +0,0 @@
-#Thu May 10 13:52:46 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.server/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 53164af..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Thu Feb 22 14:20:16 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/JMX Server n Client.launch b/eclipse/plugins/org.eclipse.equinox.jmx.server/JMX Server n Client.launch
deleted file mode 100644
index 07ea160..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/JMX Server n Client.launch	
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
-<stringAttribute key="product" value="org.eclipse.platform.ide"/>
-<booleanAttribute key="usefeatures" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<booleanAttribute key="useProduct" value="true"/>
-<stringAttribute key="vminstall" value="jdk1.5.0_06"/>
-<booleanAttribute key="tracing" value="true"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-</listAttribute>
-<mapAttribute key="tracingOptions">
-<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
-<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
-<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
-<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
-<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
-<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/packages" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
-<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
-<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/showSystemJobs" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
-<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug" value="true"/>
-<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
-<mapEntry key="org.eclipse.team.core/streams" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
-<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
-<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
-<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
-<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
-<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
-<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
-<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug" value="true"/>
-<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
-<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
-<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
-<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
-<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
-<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
-<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
-<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
-<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
-<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
-<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
-<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
-<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewer_cache_debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
-<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
-<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
-<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
-<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
-<mapEntry key="org.eclipse.team.core/threading" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/packageadmin/timing" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
-<mapEntry key="org.eclipse.help/debug/context" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
-<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
-<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
-<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
-<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
-<mapEntry key="org.eclipse.help/debug/protocols" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
-<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
-<mapEntry key="org.eclipse.help.base/debug/search" value="false"/>
-<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
-<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
-<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
-<mapEntry key="org.eclipse.team.core/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
-<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/monitorbundles" value="false"/>
-<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
-<mapEntry key="org.eclipse.help.base/debug" value="true"/>
-<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
-<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
-<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
-<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
-<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
-<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
-<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
-<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
-<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
-<mapEntry key="org.eclipse.core.resources/history" value="false"/>
-<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
-<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
-<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
-<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
-<mapEntry key="org.eclipse.help/debug" value="true"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
-<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
-<mapEntry key="org.eclipse.ui/debug" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
-<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
-<mapEntry key="org.eclipse.osgi/trace/classLoading" value="true"/>
-<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
-<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
-<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
-<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
-<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/formatter/enable_new" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
-<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
-<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
-<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
-</mapAttribute>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="selectedPlugin" value="org.eclipse.osgi"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<stringAttribute key="checked" value="[NONE]"/>
-<stringAttribute key="location" value="${system_property:user.home}/runtime-JMX_Server"/>
-<stringAttribute key="configLocation" value=""/>
-<booleanAttribute key="clearws" value="false"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-console -consoleLog -nosplash"/>
-<stringAttribute key="templateConfig" value=""/>
-<booleanAttribute key="default" value="true"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="includeOptional" value="false"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/JMX Server.launch b/eclipse/plugins/org.eclipse.equinox.jmx.server/JMX Server.launch
deleted file mode 100644
index 4f9c757..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/JMX Server.launch	
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
-<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8"?>
<sourceLookupDirector>
<sourceContainers duplicates="false">
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;classpathContainer path=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/j2sdk1.4.2_09&quot;/&gt;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.classpathContainer"/>
<container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;default/&gt;&#10;" typeId="org.eclipse.debug.core.containerType.default"/>
</sourceContainers>
</sourceLookupDirector>
"/>
-<stringAttribute key="product" value="org.eclipse.platform.ide"/>
-<booleanAttribute key="usefeatures" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<booleanAttribute key="useProduct" value="true"/>
-<stringAttribute key="vminstall" value="jdk1.5.0_06"/>
-<booleanAttribute key="tracing" value="true"/>
-<stringAttribute key="deselected_workspace_plugins" value="com.example.jmx.client,org.eclipsercp.jury,com.example.jmx.server,org.eclipse.core.resource.jmx.common,org.eclipse.core.runtime.jmx.server,org.eclipse.core.resource.jmx.client,org.eclipse.core.runtime.jmx.client,com.example.jmx.common,org.eclipse.core.resource.jmx.server,org.eclipse.core.runtime.jmx.common"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-</listAttribute>
-<stringAttribute key="selected_target_plugins" value="com.example.ps,com.ibm.icu,com.ibm.icu.source,com.ibm.jxesupport,com.jcraft.jsch,com.teaminabox.eclipse.sortit,org.apache.ant,org.apache.lucene,org.eclipse.ant.core,org.eclipse.ant.ui,org.eclipse.compare,org.eclipse.core.boot,org.eclipse.core.commands,org.eclipse.core.contenttype,org.eclipse.core.expressions,org.eclipse.core.filebuffers,org.eclipse.core.filesystem,org.eclipse.core.filesystem.win32.x86,org.eclipse.core.jobs,org.eclipse.core.resources,org.eclipse.core.resources.compatibility,org.eclipse.core.resources.spysupport,org.eclipse.core.resources.win32,org.eclipse.core.runtime,org.eclipse.core.runtime.compatibility,org.eclipse.core.runtime.compatibility.auth,org.eclipse.core.runtime.compatibility.registry,org.eclipse.core.tools,org.eclipse.core.tools.resources,org.eclipse.core.variables,org.eclipse.debug.core,org.eclipse.debug.ui,org.eclipse.equinox.common,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.help,org.eclipse.help.appserver,org.eclipse.help.base,org.eclipse.help.ui,org.eclipse.help.webapp,org.eclipse.html.editor,org.eclipse.jdt,org.eclipse.jdt.apt.core,org.eclipse.jdt.apt.ui,org.eclipse.jdt.core,org.eclipse.jdt.core.manipulation,org.eclipse.jdt.debug,org.eclipse.jdt.debug.ui,org.eclipse.jdt.doc.isv,org.eclipse.jdt.doc.user,org.eclipse.jdt.junit,org.eclipse.jdt.junit.runtime,org.eclipse.jdt.junit4.runtime,org.eclipse.jdt.launching,org.eclipse.jdt.launching.j9,org.eclipse.jdt.source,org.eclipse.jdt.ui,org.eclipse.jface,org.eclipse.jface.databinding,org.eclipse.jface.text,org.eclipse.ltk.core.refactoring,org.eclipse.ltk.ui.refactoring,org.eclipse.osgi,org.eclipse.osgi.services,org.eclipse.osgi.util,org.eclipse.pde,org.eclipse.pde.build,org.eclipse.pde.core,org.eclipse.pde.doc.user,org.eclipse.pde.junit.runtime,org.eclipse.pde.runtime,org.eclipse.pde.source,org.eclipse.pde.ui,org.eclipse.platform,org.eclipse.platform.doc.isv,org.eclipse.platform.doc.user,org.eclipse.platform.source,org.eclipse.platform.source.win32.win32.x86,org.eclipse.rcp,org.eclipse.rcp.source,org.eclipse.rcp.source.win32.win32.x86,org.eclipse.releng.tools,org.eclipse.sdk,org.eclipse.search,org.eclipse.swt,org.eclipse.swt.win32.win32.x86,org.eclipse.team.core,org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui,org.eclipse.text,org.eclipse.tomcat,org.eclipse.ui,org.eclipse.ui.browser,org.eclipse.ui.cheatsheets,org.eclipse.ui.console,org.eclipse.ui.editors,org.eclipse.ui.externaltools,org.eclipse.ui.forms,org.eclipse.ui.ide,org.eclipse.ui.intro,org.eclipse.ui.intro.universal,org.eclipse.ui.navigator,org.eclipse.ui.navigator.resources,org.eclipse.ui.presentations.r21,org.eclipse.ui.views,org.eclipse.ui.views.properties.tabbed,org.eclipse.ui.win32,org.eclipse.ui.workbench,org.eclipse.ui.workbench.compatibility,org.eclipse.ui.workbench.texteditor,org.eclipse.update.configurator,org.eclipse.update.core,org.eclipse.update.core.win32,org.eclipse.update.scheduler,org.eclipse.update.ui,org.junit,org.junit4,org.klomp.eclipse.formatjava"/>
-<mapAttribute key="tracingOptions">
-<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
-<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
-<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
-<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
-<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
-<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
-<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
-<mapEntry key="org.eclipse.osgi/debug/packages" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
-<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/showSystemJobs" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
-<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug" value="true"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
-<mapEntry key="org.eclipse.team.core/streams" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
-<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
-<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
-<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
-<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
-<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
-<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
-<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
-<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug" value="true"/>
-<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
-<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
-<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
-<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
-<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
-<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
-<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
-<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
-<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
-<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
-<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
-<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
-<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
-<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug/viewer_cache_debug" value="false"/>
-<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
-<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
-<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
-<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
-<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
-<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
-<mapEntry key="org.eclipse.team.core/threading" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/packageadmin/timing" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
-<mapEntry key="org.eclipse.help/debug/context" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
-<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
-<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
-<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
-<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
-<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
-<mapEntry key="org.eclipse.help/debug/protocols" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
-<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
-<mapEntry key="org.eclipse.help.base/debug/search" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
-<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
-<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
-<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
-<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
-<mapEntry key="org.eclipse.team.core/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
-<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/monitorbundles" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
-<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
-<mapEntry key="org.eclipse.help.base/debug" value="true"/>
-<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
-<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
-<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
-<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
-<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
-<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
-<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
-<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
-<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
-<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
-<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
-<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
-<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
-<mapEntry key="org.eclipse.core.resources/history" value="false"/>
-<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
-<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
-<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
-<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
-<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
-<mapEntry key="org.eclipse.help/debug" value="true"/>
-<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
-<mapEntry key="org.eclipse.ui/debug" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
-<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
-<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
-<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
-<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
-<mapEntry key="org.eclipse.osgi/trace/classLoading" value="true"/>
-<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
-<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
-<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
-<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
-<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
-<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
-<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
-<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
-<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
-<mapEntry key="org.eclipse.osgi/resolver/grouping" value="false"/>
-<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
-<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
-<mapEntry key="org.eclipse.jdt.core/formatter/enable_new" value="false"/>
-<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
-<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
-<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
-<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
-</mapAttribute>
-<booleanAttribute key="automaticValidate" value="true"/>
-<stringAttribute key="selectedPlugin" value="org.eclipse.osgi"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<stringAttribute key="checked" value="[NONE]"/>
-<stringAttribute key="location" value="${system_property:user.home}/runtime-JMX_Server5"/>
-<stringAttribute key="selected_workspace_plugins" value="org.apache.commons.codec,org.apache.xmlrpc,org.eclipse.equinox.jmx.server.xmlrpc,org.eclipse.swt.jmx,org.eclipse.equinox.jmx.server,org.apache.commons.logging,org.apache.ws.commons.util,org.eclipse.osgi.jmx,org.eclipse.equinox.preferences.jmx,org.eclipse.equinox.jmx.server.rmi,org.eclipse.core.resources.jmx,org.apache.commons.httpclient,org.eclipse.equinox.jmx.common,org.eclipse.equinox.jmx.vm,org.apache.ws.jaxme"/>
-<stringAttribute key="configLocation" value=""/>
-<booleanAttribute key="clearws" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-console -consoleLog -nosplash -clean"/>
-<stringAttribute key="pde.version" value="3.2a"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.eclipse.equinox.jmx.server.protocol2=xmlrpc"/>
-<stringAttribute key="templateConfig" value=""/>
-<booleanAttribute key="default" value="false"/>
-<booleanAttribute key="clearConfig" value="false"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="askclear" value="false"/>
-<booleanAttribute key="includeOptional" value="true"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.server/META-INF/MANIFEST.MF
deleted file mode 100644
index 3618ce8..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,33 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring Server Bundle (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.server;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Export-Package: org.eclipse.equinox.jmx.server
-Bundle-Activator: org.eclipse.equinox.jmx.internal.server.Activator
-Bundle-Vendor: Eclipse.org
-Import-Package: javax.management,
- javax.management.loading,
- javax.management.modelmbean,
- javax.management.monitor,
- javax.management.openmbean,
- javax.management.relation,
- javax.management.remote,
- javax.management.remote.rmi,
- javax.management.timer,
- org.eclipse.core.runtime,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.common.util,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.log,
- org.osgi.util.tracker,
- org.xml.sax,
- org.xml.sax.ext,
- org.xml.sax.helpers
-Require-Bundle: org.eclipse.ui;resolution:=optional
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.server/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.server/build.properties
deleted file mode 100644
index fe07776..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/build.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html,\
-               readme.txt
-src.includes = about.html,\
-               schema/
-javacSource=1.3
-javacTarget=1.1
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/plugin.xml b/eclipse/plugins/org.eclipse.equinox.jmx.server/plugin.xml
deleted file mode 100644
index fe129ca..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/plugin.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-	<extension-point id="contribution" name="Contribution" schema="schema/contribution.exsd"/>
-	<extension-point id="provider" name="provider" schema="schema/provider.exsd"/>
-	<extension point="org.eclipse.ui.startup">
-		<startup class="org.eclipse.equinox.jmx.internal.server.UIStarter"/>
-	</extension>
-	<extension
-			id="application"
-			point="org.eclipse.core.runtime.applications">
-		<application>
-			<run class="org.eclipse.equinox.jmx.internal.server.Application"/>
-		</application>
-	</extension>
-	<extension
-			id="product"
-			point="org.eclipse.core.runtime.products">
-		<product
-			application="org.eclipse.equinox.jmx.server.application"
-			name="JMX Server">
-		</product>
-	</extension>
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/readme.txt b/eclipse/plugins/org.eclipse.equinox.jmx.server/readme.txt
deleted file mode 100644
index f9ba117..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/readme.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Server Readme
--------------------
-
-By default the server starts on port 8118 and uses RMI as its transport. Both of
-these values can be changed via the following system properties:
-	org.eclipse.equinox.jmx.server.protocol
-	org.eclipse.equinox.jmx.server.port
-
-Currently you can only have one server running at a time, either RMI or XMLRPC.
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/schema/contribution.exsd b/eclipse/plugins/org.eclipse.equinox.jmx.server/schema/contribution.exsd
deleted file mode 100644
index e79dbdf..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/schema/contribution.exsd
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.equinox.jmx.server.core">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.equinox.jmx.server.core" id="contribution" name="Contribution"/>
-      </appInfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="contribution" minOccurs="1" maxOccurs="unbounded"/>
-            <sequence>
-               <element ref="extendsClass" minOccurs="0" maxOccurs="unbounded"/>
-            </sequence>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="contribution">
-      <complexType>
-         <sequence>
-            <element ref="extendsClass" minOccurs="0" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The class name of the contribution.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.equinox.jmx.server.core.ContributionProvider"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="isroot" type="boolean">
-            <annotation>
-               <documentation>
-                  Contribution extensions declare providers for specific class types.  The class attribute specifies the class that the provider is to be associated with.  The isroot attribute describes whether this provider is to be included as a root contribution, typically this would be set to true if the provider contributes child contributions; by default, if not set, it is assumed this provider does not contribute child contributions.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="extendsClass">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/schema/provider.exsd b/eclipse/plugins/org.eclipse.equinox.jmx.server/schema/provider.exsd
deleted file mode 100644
index b4d5802..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/schema/provider.exsd
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.equinox.jmx.server">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.equinox.jmx.server" id="provider" name="provider"/>
-      </appInfo>
-      <documentation>
-         JMX protocol provider extension point.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="provider"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="provider">
-      <complexType>
-         <attribute name="class" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.equinox.jmx.server.IJMXConnectorServerProvider"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="protocol" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/server-1.4.product b/eclipse/plugins/org.eclipse.equinox.jmx.server/server-1.4.product
deleted file mode 100644
index fa8fb2c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/server-1.4.product
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?pde version="3.1"?>
-
-<product name="JMX Server" id="org.eclipse.equinox.jmx.server.product" application="org.eclipse.equinox.jmx.server.application" useFeatures="false">
-
-   <configIni use="default"/>
-
-   <launcherArgs>
-   </launcherArgs>
-
-   <windowImages/>
-
-   <launcher>
-      <solaris/>
-      <win useIco="false">
-         <bmp/>
-      </win>
-   </launcher>
-
-   <vm>
-   </vm>
-
-   <plugins>
-      <plugin id="javax.servlet"/>
-      <plugin id="net.sourceforge.mx4j"/>
-      <plugin id="org.apache.commons.codec"/>
-      <plugin id="org.apache.commons.httpclient"/>
-      <plugin id="org.apache.commons.logging"/>
-      <plugin id="org.apache.ws.commons.util"/>
-      <plugin id="org.apache.ws.jaxme"/>
-      <plugin id="org.apache.xmlrpc"/>
-      <plugin id="org.eclipse.ant.core"/>
-      <plugin id="org.eclipse.core.contenttype"/>
-      <plugin id="org.eclipse.core.expressions"/>
-      <plugin id="org.eclipse.core.filesystem"/>
-      <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.jobs"/>
-      <plugin id="org.eclipse.core.resources"/>
-      <plugin id="org.eclipse.core.resources.jmx"/>
-      <plugin id="org.eclipse.core.resources.win32" fragment="true"/>
-      <plugin id="org.eclipse.core.runtime"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
-      <plugin id="org.eclipse.equinox.app"/>
-      <plugin id="org.eclipse.equinox.common"/>
-      <plugin id="org.eclipse.equinox.jmx.common"/>
-      <plugin id="org.eclipse.equinox.jmx.server"/>
-      <plugin id="org.eclipse.equinox.jmx.server.rmi"/>
-      <plugin id="org.eclipse.equinox.jmx.server.xmlrpc"/>
-      <plugin id="org.eclipse.equinox.preferences"/>
-      <plugin id="org.eclipse.equinox.preferences.jmx"/>
-      <plugin id="org.eclipse.equinox.registry"/>
-      <plugin id="org.eclipse.equinox.registry.jmx"/>
-      <plugin id="org.eclipse.osgi"/>
-      <plugin id="org.eclipse.osgi.jmx"/>
-      <plugin id="org.eclipse.osgi.services"/>
-      <plugin id="org.mortbay.jetty"/>
-   </plugins>
-
-</product>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/server-1.5.product b/eclipse/plugins/org.eclipse.equinox.jmx.server/server-1.5.product
deleted file mode 100644
index 02dcb24..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/server-1.5.product
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?pde version="3.1"?>
-
-<product name="JMX Server" id="org.eclipse.equinox.jmx.server.product" application="org.eclipse.equinox.jmx.server.application" useFeatures="false">
-
-   <configIni use="default"/>
-
-   <launcherArgs>
-   </launcherArgs>
-
-   <windowImages/>
-
-   <launcher>
-      <solaris/>
-      <win useIco="false">
-         <bmp/>
-      </win>
-   </launcher>
-
-   <vm>
-   </vm>
-
-   <plugins>
-      <plugin id="javax.servlet"/>
-      <plugin id="org.apache.commons.codec"/>
-      <plugin id="org.apache.commons.httpclient"/>
-      <plugin id="org.apache.commons.logging"/>
-      <plugin id="org.apache.ws.commons.util"/>
-      <plugin id="org.apache.ws.jaxme"/>
-      <plugin id="org.apache.xmlrpc"/>
-      <plugin id="org.eclipse.ant.core"/>
-      <plugin id="org.eclipse.core.contenttype"/>
-      <plugin id="org.eclipse.core.expressions"/>
-      <plugin id="org.eclipse.core.filesystem"/>
-      <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.jobs"/>
-      <plugin id="org.eclipse.core.resources"/>
-      <plugin id="org.eclipse.core.resources.jmx"/>
-      <plugin id="org.eclipse.core.resources.win32" fragment="true"/>
-      <plugin id="org.eclipse.core.runtime"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
-      <plugin id="org.eclipse.equinox.app"/>
-      <plugin id="org.eclipse.equinox.common"/>
-      <plugin id="org.eclipse.equinox.jmx.common"/>
-      <plugin id="org.eclipse.equinox.jmx.server"/>
-      <plugin id="org.eclipse.equinox.jmx.server.rmi"/>
-      <plugin id="org.eclipse.equinox.jmx.server.xmlrpc"/>
-      <plugin id="org.eclipse.equinox.preferences"/>
-      <plugin id="org.eclipse.equinox.preferences.jmx"/>
-      <plugin id="org.eclipse.equinox.registry"/>
-      <plugin id="org.eclipse.equinox.registry.jmx"/>
-      <plugin id="org.eclipse.osgi"/>
-      <plugin id="org.eclipse.osgi.jmx"/>
-      <plugin id="org.eclipse.osgi.services"/>
-      <plugin id="org.mortbay.jetty"/>
-   </plugins>
-
-</product>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/server-ppro.product b/eclipse/plugins/org.eclipse.equinox.jmx.server/server-ppro.product
deleted file mode 100644
index f147117..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/server-ppro.product
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?pde version="3.1"?>
-
-<product name="JMX Server" id="org.eclipse.equinox.jmx.server.product" application="org.eclipse.equinox.jmx.server.application" useFeatures="false">
-
-
-   <configIni use="default"/>
-
-   <launcherArgs>
-   </launcherArgs>
-
-   <windowImages/>
-
-
-   <launcher>
-      <solaris/>
-      <win useIco="false">
-         <bmp/>
-      </win>
-   </launcher>
-
-
-   <vm>
-   </vm>
-
-   <plugins>
-      <plugin id="javax.servlet"/>
-      <plugin id="net.sourceforge.mx4j"/>
-      <plugin id="org.apache.commons.codec"/>
-      <plugin id="org.apache.commons.httpclient"/>
-      <plugin id="org.apache.commons.logging"/>
-      <plugin id="org.apache.ws.commons.util"/>
-      <plugin id="org.apache.ws.jaxme"/>
-      <plugin id="org.apache.xmlrpc"/>
-      <plugin id="org.eclipse.core.contenttype"/>
-      <plugin id="org.eclipse.core.jobs"/>
-      <plugin id="org.eclipse.core.runtime"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
-      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
-      <plugin id="org.eclipse.equinox.app"/>
-      <plugin id="org.eclipse.equinox.common"/>
-      <plugin id="org.eclipse.equinox.http.jetty"/>
-      <plugin id="org.eclipse.equinox.http.servlet"/>
-      <plugin id="org.eclipse.equinox.jmx.common"/>
-      <plugin id="org.eclipse.equinox.jmx.server"/>
-      <plugin id="org.eclipse.equinox.jmx.server.xmlrpc"/>
-      <plugin id="org.eclipse.equinox.launcher"/>
-      <plugin id="org.eclipse.equinox.preferences"/>
-      <plugin id="org.eclipse.equinox.preferences.jmx"/>
-      <plugin id="org.eclipse.equinox.registry"/>
-      <plugin id="org.eclipse.equinox.registry.jmx"/>
-      <plugin id="org.eclipse.ercp.xml" fragment="true"/>
-      <plugin id="org.eclipse.ercp.xmlParserAPIs" fragment="true"/>
-      <plugin id="org.eclipse.osgi"/>
-      <plugin id="org.eclipse.osgi.jmx"/>
-      <plugin id="org.eclipse.osgi.services"/>
-      <plugin id="org.mortbay.jetty"/>
-      <plugin id="org.mortbay.jetty.security" fragment="true"/>
-   </plugins>
-
-</product>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/Activator.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/Activator.java
deleted file mode 100644
index cbed865..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/Activator.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import java.util.*;
-import javax.management.*;
-import javax.management.remote.JMXConnectorServer;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.equinox.jmx.common.*;
-import org.eclipse.equinox.jmx.internal.server.ServerExtensionManager.ContributionExtensionDefinition;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * The plug-in startup class for the jmx server plug-in.
- * 
- * @since 1.0
- */
-public class Activator implements BundleActivator {
-
-	static final String PLUGIN_ID = "org.eclipse.equinox.jmx.server"; //$NON-NLS-1$;
-	static final String PI_NAMESPACE = PLUGIN_ID;
-	static final String PT_CONTRIBUTION = "contribution"; //$NON-NLS-1$
-	static final String PT_PROVIDER = "provider"; //$NON-NLS-1$
-
-	static final String PROTOCOL_PROPERTY_KEY = PI_NAMESPACE + ".protocol"; //$NON-NLS-1$
-	static final String PORT_PROPERTY_KEY = PI_NAMESPACE + ".port"; //$NON-NLS-1$
-	static final String DOMAIN_PROPERTY_KEY = PI_NAMESPACE + ".domain"; //$NON-NLS-1$
-
-	//The shared instance.
-	private static Activator instance;
-	private static BundleContext bundleContext;
-	private static JMXConnectorServer jmxServer;
-	private static RootContribution rootContribution;
-	private static ServiceTracker logService;
-
-	/**
-	 * The constructor.
-	 */
-	public Activator() {
-		instance = this;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		bundleContext = context;
-		if (jmxServer == null) {
-			createServer();
-		}
-		jmxServer.start();
-	}
-
-	/**
-	 * Create the jmx server.  This should only be invoked once - the first time this bundle is started.
-	 * 
-	 * @throws Exception If an exception occurs when attempting to start the server.
-	 */
-	public void createServer() throws Exception {
-		// determine which protocol to use
-		String protocol = System.getProperty(PROTOCOL_PROPERTY_KEY);
-		if (protocol == null) {
-			protocol = JMXConstants.DEFAULT_PROTOCOL;
-		}
-		// determine port to listen on
-		int port;
-		String strPort = System.getProperty(PORT_PROPERTY_KEY);
-		if (strPort == null) {
-			port = JMXConstants.DEFAULT_PORT_AS_INT;
-		} else {
-			try {
-				port = Integer.parseInt(strPort);
-			} catch (NumberFormatException nfe) {
-				log(nfe);
-				port = JMXConstants.DEFAULT_PORT_AS_INT;
-			}
-		}
-		String domain = System.getProperty(DOMAIN_PROPERTY_KEY);
-		if (domain == null) {
-			domain = JMXConstants.DEFAULT_DOMAIN;
-		}
-		jmxServer = JMXServerFactory.createJMXServer("127.0.0.1", port, protocol, JMXConstants.DEFAULT_DOMAIN, null);
-		registerContributions();
-	}
-
-	private void registerContributions() throws IntrospectionException, ReflectionException, MBeanRegistrationException, NotCompliantMBeanException {
-		final MBeanServer mbeanServer = jmxServer.getMBeanServer();
-		try {
-			mbeanServer.getMBeanInfo(RootContribution.OBJECT_NAME);
-		} catch (Exception e) {
-			//load extensions and add to contribution model
-			Collection providers = ServerExtensionManager.getInstance().getContributionExtensionDefinitions();
-			Iterator iter = providers.iterator();
-			List proxiesToRegister = new ArrayList();
-			while (iter.hasNext()) {
-				ContributionExtensionDefinition defn = (ContributionExtensionDefinition) iter.next();
-				ContributionProvider provider = defn.getContributionProvider();
-				// register the providers with the mbean server
-				provider.registerContribution(mbeanServer);
-				if (defn.isRootProvider()) {
-					proxiesToRegister.add(provider.createProxy());
-				}
-			}
-			rootContribution = new RootContribution((ContributionProxy[]) proxiesToRegister.toArray(new ContributionProxy[proxiesToRegister.size()]));
-			try {
-				mbeanServer.registerMBean(rootContribution, RootContribution.OBJECT_NAME);
-			} catch (Exception e1) {
-				// should not occur since we previously checked for existence
-			}
-			ServerExtensionManager.getInstance().addObserver(new Observer() {
-				public void update(Observable o, Object arg) {
-					if (!(arg instanceof ContributionExtensionDefinition)) {
-						return;
-					}
-					ContributionExtensionDefinition defn = (ContributionExtensionDefinition) arg;
-					ContributionProvider rootProvider = defn.getContributionProvider();
-					if (ServerExtensionManager.getInstance().getContributionExtensionDefinition(defn.getProviderClassName()) == null) {
-						// root provider has been removed
-						rootContribution.unregisterContributionProxy(rootProvider.createProxy());
-						rootProvider.sendNotification(new Notification(ContributionNotificationEvent.NOTIFICATION_REMOVED, rootProvider, 0));
-					} else {
-						// new root provider installed or updated
-						try {
-							rootProvider.registerContribution(mbeanServer);
-							rootContribution.registerContributionProxy(rootProvider.createProxy());
-							rootContribution.sendNotification(new Notification(ContributionNotificationEvent.NOTIFICATION_UPDATED, rootContribution, 0));
-						} catch (Exception e) {
-							log(e);
-						}
-					}
-				}
-			});
-		}
-	}
-
-	public static RootContribution getRootContribution() {
-		return rootContribution;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		jmxServer.stop();
-		if (logService != null) {
-			logService.close();
-			logService = null;
-		}
-		instance = null;
-	}
-
-	/**
-	 * @return The bundle context.
-	 */
-	public BundleContext getBundleContext() {
-		return bundleContext;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static Activator getDefault() {
-		return instance;
-	}
-
-	/**
-	 * Return the underlying <code>Server</code> which provides an interface to the jmx agent.
-	 * 
-	 * @return The server.
-	 */
-	public MBeanServer getServer() {
-		return jmxServer.getMBeanServer();
-	}
-
-	/**
-	 * Log the given message and exception to the log file.
-	 * 
-	 * @param message The message to log.
-	 * @param exception The exception to log.
-	 * @param iStatusSeverity The <code>IStatus</code> severity level.
-	 */
-	public static void log(String message, Throwable exception, int iStatusSeverity) {
-		if (message == null) {
-			message = exception.getMessage();
-			if (message == null)
-				message = ServerMessages.exception_occurred;
-		}
-		if (logService == null) {
-			logService = new ServiceTracker(bundleContext, LogService.class.getName(), null);
-			logService.open();
-		}
-		LogService log = (LogService) logService.getService();
-		int severity = LogService.LOG_INFO;
-		switch (iStatusSeverity) {
-			case IStatus.ERROR :
-				severity = LogService.LOG_ERROR;
-				break;
-			case IStatus.WARNING :
-				severity = LogService.LOG_WARNING;
-				break;
-			case IStatus.INFO :
-			default :
-				severity = LogService.LOG_INFO;
-				break;
-		}
-		if (log == null) {
-			System.out.println(PLUGIN_ID);
-			System.out.println(severity);
-			System.out.println(message);
-			if (exception != null)
-				exception.printStackTrace(System.out);
-		} else
-			log.log(severity, message, exception);
-	}
-
-	/**
-	 * Log the given message and exception to the log file with a
-	 * status code of <code>IStatus.ERROR</code>.
-	 * 
-	 * @param message The message to log.
-	 * @param exception The thrown exception.
-	 */
-	public static void logError(String message, Throwable exception) {
-		log(message, exception, IStatus.ERROR);
-	}
-
-	/**
-	 * Log the given exception to the log file with a
-	 * status code of <code>IStatus.ERROR</code>.
-	 * 
-	 * @param exception The thrown exception.
-	 */
-	public static void logError(Throwable exception) {
-		log(exception.getMessage(), exception, IStatus.ERROR);
-	}
-
-	/**
-	 * Log the given message to the log file with a
-	 * status code of <code>IStatus.INFO</code>.
-	 * 
-	 * @param message The message to log.
-	 */
-	public static void log(String message) {
-		log(message, null, IStatus.INFO);
-	}
-
-	/**
-	 * Log the given exception to the log file with a
-	 * status code of <code>IStatus.INFO</code>.
-	 * 
-	 * @param exception The thrown exception.
-	 */
-	public static void log(Throwable exception) {
-		log(exception.getMessage(), exception, IStatus.INFO);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/Application.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/Application.java
deleted file mode 100644
index 73c2fae..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/Application.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import org.eclipse.core.runtime.IPlatformRunnable;
-
-/**
- * This class controls all aspects of the application's execution
- */
-public class Application implements IPlatformRunnable {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IPlatformRunnable#run(java.lang.Object)
-	 */
-	public Object run(Object args) throws Exception {
-		// our bundle should already be started if we are running this 
-		// code, so just loop
-		while (true) {
-			Thread.sleep(1000);
-		}
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ContributionMessages.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ContributionMessages.java
deleted file mode 100644
index 2f6dff2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ContributionMessages.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public class ContributionMessages extends NLS {
-
-	public static String desc_getcontribs;
-
-	// exceptions
-	public static String excep_typeprovider_exists;
-	public static String excep_null_mbeanserver;
-	public static String excep_null_server_on_createself;
-	public static String excep_contrib_reg_with_diff_server;
-	public static String excep_contrib_delegate_exists;
-
-	// disallow instantiations
-	private ContributionMessages() {
-		super();
-	}
-
-	static {
-		NLS.initializeMessages(ContributionMessages.class.getName(), ContributionMessages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ContributionMessages.properties b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ContributionMessages.properties
deleted file mode 100644
index ecfd583..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ContributionMessages.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-desc_getcontribs = Get contributions.
-
-# exceptions
-excep_null_mbeanserver = Expected non-null mbean server.
-excep_contrib_reg_with_diff_server = Attempt to register contribution with another mbean server.
-excep_contrib_delegate_exists = Contribution delegate exists.
-excep_typeprovider_exists = Provider for type exists.
-excep_null_server_on_createself = Expected non-null MBean server.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/IJMXServer.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/IJMXServer.java
deleted file mode 100644
index ceeda46..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/IJMXServer.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import javax.management.remote.JMXConnectorServer;
-
-/**
- * Required interface for supported JMX server types.
- * 
- * @since 1.0
- */
-public interface IJMXServer {
-
-	/**
-	 * Initialize the JMX server prior to startup.
-	 * 
-	 * @param host The hostname or ip address of the server.
-	 * @param port The port to listen on.
-	 * @param domain The jmx service url domain.
-	 * @throws Exception If an exception occurs during initialization.
-	 */
-	public void initialize(String host, int port, String domain) throws Exception;
-
-	/**
-	 * Start the JMX Server.
-	 * 
-	 * @throws Exception If an exception occurs when attempting to start the server.
-	 */
-	public void start() throws Exception;
-
-	/**
-	 * Stop the JMX Server.
-	 * 
-	 * @throws Exception If an exception occurs when attempting to stop the server.
-	 */
-	public void stop() throws Exception;
-
-	/**
-	 * Get the <code>JMXConnectorServer</code> associated with the JMX server.
-	 * 
-	 * @return The <code>JMXConnectorServer</code>
-	 */
-	public JMXConnectorServer getJMXConnectorServer();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/JMXServerFactory.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/JMXServerFactory.java
deleted file mode 100644
index e5efe28..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/JMXServerFactory.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXServiceURL;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.IJMXConnectorServerProvider;
-import org.eclipse.osgi.util.NLS;
-
-public class JMXServerFactory {
-
-	private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_INITIALIZER_CLASS = "initializerClass"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_PROTOCOL = "protocol"; //$NON-NLS-1$
-
-	private static Map jmxProviderCache;
-
-	private JMXServerFactory() {
-		super();
-	}
-
-	/**
-	 * Create and return a new JMXConnectorServer instance with the given parameters.
-	 * Throw an exception if there is an error or if the given protocol doesn't have a valid 
-	 * registered transport extension.
-	 */
-	public static JMXConnectorServer createJMXServer(String host, int port, String protocol, String domain, Map environment) throws IOException {
-		IJMXConnectorServerProvider provider = getProvider(protocol);
-		if (provider == null)
-			throw new IOException(NLS.bind(ServerMessages.protocol_not_available, protocol));
-		MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer(domain);
-		JMXServiceURL providerURL = provider.getJMXServiceURL(host, port, protocol, domain);
-		if (providerURL == null)
-			providerURL = new JMXServiceURL(protocol, host, port);
-		return provider.newJMXConnectorServer(providerURL, environment, mbeanServer);
-	}
-
-	private static IJMXConnectorServerProvider getProvider(String protocol) {
-		final Class providerClass = (Class) getJMXProviderCache().get(protocol);
-		if (providerClass != null) {
-			try {
-				return (IJMXConnectorServerProvider) providerClass.newInstance();
-			} catch (Exception e) {
-				Activator.log(e);
-			}
-		}
-		return null;
-	}
-
-	private static void loadProviderExtensions() {
-		IExtensionPoint point = RegistryFactory.getRegistry().getExtensionPoint(Activator.PI_NAMESPACE, Activator.PT_PROVIDER);
-		IExtension[] types = point.getExtensions();
-		for (int i = 0; i < types.length; i++) {
-			loadProviderConfigurationElements(types[i].getConfigurationElements());
-		}
-	}
-
-	private static void loadProviderConfigurationElements(IConfigurationElement[] configElems) {
-		for (int j = 0; j < configElems.length; j++) {
-			IConfigurationElement element = configElems[j];
-			final String elementName = element.getName();
-			String className, protocol;
-			if (elementName.equals(Activator.PT_PROVIDER) && null != (className = element.getAttribute(ATTRIBUTE_CLASS)) && null != (protocol = element.getAttribute(ATTRIBUTE_PROTOCOL))) {
-				try {
-					// attempt to load initializer before instantiating provider class
-					String initializer = element.getAttribute(ATTRIBUTE_INITIALIZER_CLASS);
-					if (initializer != null)
-						element.createExecutableExtension(ATTRIBUTE_INITIALIZER_CLASS);
-					Object obj = element.createExecutableExtension(ATTRIBUTE_CLASS);
-					// cache provider class name for protocol
-					if (jmxProviderCache.containsKey(protocol)) {
-						Activator.log(NLS.bind(ServerMessages.duplicate_protocol_provider, className));
-						continue;
-					}
-					jmxProviderCache.put(protocol, obj.getClass());
-				} catch (CoreException e) {
-					Activator.log(e);
-				}
-			}
-		}
-	}
-
-	private static Map getJMXProviderCache() {
-		if (jmxProviderCache == null) {
-			jmxProviderCache = new HashMap();
-			loadProviderExtensions();
-			RegistryFactory.getRegistry().addRegistryChangeListener(new JMXProviderExtensionListener(), Activator.PI_NAMESPACE + "." + Activator.PT_PROVIDER);
-		}
-		return jmxProviderCache;
-	}
-
-	private static class JMXProviderExtensionListener implements IRegistryChangeListener {
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.core.runtime.IRegistryChangeListener#registryChanged(org.eclipse.core.runtime.IRegistryChangeEvent)
-		 */
-		public void registryChanged(IRegistryChangeEvent event) {
-			IExtensionDelta[] deltas = event.getExtensionDeltas(Activator.PI_NAMESPACE, Activator.PT_PROVIDER);
-			for (int i = 0; i < deltas.length; i++) {
-				IExtensionDelta delta = deltas[i];
-				loadProviderConfigurationElements(delta.getExtensionPoint().getConfigurationElements());
-			}
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerExtensionManager.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerExtensionManager.java
deleted file mode 100644
index a7ba13d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerExtensionManager.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-
-public class ServerExtensionManager extends Observable implements IRegistryChangeListener {
-
-	public static class ContributionExtensionDefinition {
-
-		private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
-		private static final String ATTRIBUTE_IS_ROOT = "isroot"; //$NON-NLS-1$
-		private static final String ELEMENT_CONTRIBUTION = "contribution"; //$NON-NLS-1$
-		private static final String ELEMENT_EXTENDS_CLASS = "extendsClass"; //$NON-NLS-1$
-
-		private String providerClassName;
-		private boolean isRootProvider;
-		private Set extendsClasses;
-		private ContributionProvider provider;
-
-		ContributionExtensionDefinition(final IConfigurationElement contribElem) {
-			final String elementName = contribElem.getName();
-			// check for require mbean element and associated class attribute
-			if (elementName.equalsIgnoreCase(ELEMENT_CONTRIBUTION) && (providerClassName = contribElem.getAttribute(ATTRIBUTE_CLASS)) != null) {
-				try {
-					Object obj = contribElem.createExecutableExtension(ATTRIBUTE_CLASS);
-					if (obj instanceof ContributionProvider) {
-						provider = (ContributionProvider) obj;
-						// check if provider is a root provider and set flag appropriately
-						String attrIsRoot = null;
-						if ((attrIsRoot = contribElem.getAttribute(ATTRIBUTE_IS_ROOT)) != null) {
-							isRootProvider = attrIsRoot.equals("true"); //$NON-NLS-1$
-						}
-						// cache any types which this provider extends
-						IConfigurationElement[] extendsElems = contribElem.getChildren(ELEMENT_EXTENDS_CLASS);
-						extendsClasses = new TreeSet();
-						for (int j = 0; j < extendsElems.length; j++) {
-							IConfigurationElement extendsElem = extendsElems[j];
-							extendsClasses.add(extendsElem.getAttribute(ATTRIBUTE_CLASS));
-						}
-					}
-				} catch (CoreException e) {
-					Activator.logError(e);
-				}
-			} else {
-				throw new IllegalArgumentException();
-			}
-		}
-
-		public String getProviderClassName() {
-			return providerClassName;
-		}
-
-		public boolean isRootProvider() {
-			return isRootProvider;
-		}
-
-		public ContributionProvider getContributionProvider() {
-			return provider;
-		}
-
-		public Set getExtendsClasses() {
-			return extendsClasses;
-		}
-	}
-
-	private static Map providers;
-	private static ServerExtensionManager instance;
-
-	private ServerExtensionManager() {
-		providers = new Hashtable();
-		initExtensions();
-	}
-
-	public static ServerExtensionManager getInstance() {
-		if (instance == null) {
-			instance = new ServerExtensionManager();
-		}
-		return instance;
-	}
-
-	public Collection getContributionExtensionDefinitions() {
-		return providers.values();
-	}
-
-	public ContributionExtensionDefinition getContributionExtensionDefinition(String providerClassName) {
-		return (ContributionExtensionDefinition) providers.get(providerClassName);
-	}
-
-	private void initExtensions() {
-		registerContributions();
-		RegistryFactory.getRegistry().addRegistryChangeListener(this);
-	}
-
-	private void registerContributions() {
-		IExtensionPoint point = RegistryFactory.getRegistry().getExtensionPoint(Activator.PI_NAMESPACE, Activator.PT_CONTRIBUTION);
-		IExtension[] types = point.getExtensions();
-		for (int i = 0; i < types.length; i++) {
-			registerContribution(types[i]);
-		}
-	}
-
-	private void registerContribution(IExtension ext) {
-		IConfigurationElement[] configElems = ext.getConfigurationElements();
-		for (int j = 0; j < configElems.length; j++) {
-			ContributionExtensionDefinition defn = new ContributionExtensionDefinition(configElems[j]);
-			if (defn.getContributionProvider() == null) {
-				// extension was removed or an error loading the class occurred
-				// remove from map if exists
-				defn = (ContributionExtensionDefinition) providers.remove(defn.getProviderClassName());
-			} else {
-				providers.put(defn.getProviderClassName(), defn);
-			}
-			setChanged();
-			notifyObservers(defn);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IRegistryChangeListener#registryChanged(org.eclipse.core.runtime.IRegistryChangeEvent)
-	 */
-	public void registryChanged(IRegistryChangeEvent event) {
-		IExtensionDelta[] deltas = event.getExtensionDeltas(Activator.PI_NAMESPACE, Activator.PT_CONTRIBUTION);
-		for (int i = 0; i < deltas.length; i++) {
-			IExtensionDelta delta = deltas[i];
-			registerContribution(delta.getExtension());
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerMessages.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerMessages.java
deleted file mode 100644
index 120f376..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerMessages.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public final class ServerMessages extends NLS {
-
-	public static String server_started;
-	public static String server_stopped;
-	public static String invalid_port;
-	public static String invalid_jmx_server;
-	public static String expected_non_null_jmxconnector;
-	public static String duplicate_protocol_provider;
-	public static String exception_occurred;
-	public static String protocol_not_available;
-
-	private ServerMessages() {
-		// disallow instantiations
-	}
-
-	static {
-		NLS.initializeMessages(ServerMessages.class.getName(), ServerMessages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerMessages.properties b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerMessages.properties
deleted file mode 100644
index 91456b1..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/ServerMessages.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-server_started = Server started, JMX service url: {0}
-server_stopped = Server stopped.
-invalid_jmx_server = Invalid JMX server:
-invalid_port = Invalid port.
-expected_non_null_jmxconnector = Expected non-null JMX connector server.
-duplicate_protocol_provider = Duplicate protocol provider class: {0}
-exception_occurred = An exception occurred.
-protocol_not_available = The protocol \"{0}\" is not registered as a valid transport.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/UIStarter.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/UIStarter.java
deleted file mode 100644
index 8d74d2f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/internal/server/UIStarter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.server;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.ui.IStartup;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleException;
-
-public class UIStarter implements IStartup {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IStartup#earlyStartup()
-	 */
-	public void earlyStartup() {
-		// we really don't need to do anything as the plugin.xml is configured such that
-		// the Activator's start() has is invoked (before earlyStartup()) when a class belonging 
-		// to this plugin is loaded, but we will make sure that no one has disabled that option and perform
-		// the check...
-		Bundle bundle = Activator.getDefault().getBundleContext().getBundle();
-		Assert.isNotNull(bundle); // this should not be null as this code exists within the referenced bundle
-		if ((bundle.getState() & (Bundle.STARTING | Bundle.ACTIVE)) == 0) {
-			// start the bundle
-			try {
-				bundle.start();
-			} catch (BundleException e) {
-				Activator.log(e);
-			}
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/Contribution.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/Contribution.java
deleted file mode 100644
index 9341291..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/Contribution.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.server;
-
-import java.io.*;
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.*;
-import org.eclipse.equinox.jmx.common.util.ByteArrayHolder;
-import org.eclipse.equinox.jmx.internal.server.Activator;
-import org.eclipse.equinox.jmx.internal.server.ContributionMessages;
-
-/**
- * A <code>Contribution</code> acts as a mediator between the objects which users would like to
- * provide, and the server which exposes those objects.  To expose the contribution to clients,
- * a <code>ContributionProxy</code> is created which encapsulates all the required information
- * in order for this contribution to be used remotely.  This proxy, which is implemented
- * as a standard mbean exposes an operation to retrieve the <code>ObjectName</code> of this
- * contribution.  Succinctly, the <code>ContributionProxy</code> delegates all operations
- * to the <code>Contribution</code> associated with it's <code>ObjectName</code> on
- * the server.
- * 
- * @see com.jmx.common.ContributionProvider
- * @since 1.0
- */
-
-public abstract class Contribution extends NotificationBroadcasterSupport implements DynamicMBean {
-
-	private static long sequenceNumber;
-
-	// container for all contributions' delegate objects, weak insurance for contributions
-	// attempting to utilize the same delegate
-	private static Map contributionDelegates = new Hashtable();
-
-	// contribution image cache
-	private static Map imageCache = new Hashtable();
-
-	// current proxy for this contribution which is exposed to clients
-	private ContributionProxy proxy;
-
-	// set true when the implementing contribution fires a state changed event, calling create proxy with this set to true would result in a new proxy being allocated
-	private boolean stateChanged;
-
-	// the unique object name of this contribution that is registered with the server
-	private ObjectName objectName;
-
-	/**
-	 * The <code>Object</code> delegate that is associated with this <code>Contribution</code>.
-	 * <p>
-	 * The delegate is provided in the constructor by implementing classes, and is accessible by
-	 * those classes for use.  The delegate is declared as final to enforce and make 
-	 * explicit its consistency.
-	 */
-	protected final Object contributionDelegate;
-
-	/**
-	 * Default constructor.
-	 * 
-	 * @see Contribution#Contribution(Object) where <code>Object</code> is null.
-	 */
-	public Contribution() {
-		this(null);
-	}
-
-	/**
-	 * Allocate a <code>Contribution</code> which provides an interface to the
-	 * operations provided by the <code>contributionDelegate</code>.  The 
-	 * <code>contributionDelegate</code> may be null, this is typical of 
-	 * <code>ContributionProvider</code>s who usually don't manipulate
-	 * any underlying resource.
-	 * 
-	 * @param contributionDelegate The object which the contribution delegates its operations, null if not applicable.
-	 */
-	public Contribution(Object contributionDelegate) {
-		this.contributionDelegate = contributionDelegate;
-		Contribution priorContrib = null;
-		if (contributionDelegate != null) {
-			priorContrib = (Contribution) contributionDelegates.get(contributionDelegate);
-		}
-		if (priorContrib != null) {
-			objectName = priorContrib.getObjectName();
-		} else {
-			try {
-				String objectNameStr = JMXConstants.DEFAULT_DOMAIN + ":type=" + getClass().getName() + hashCode(); //$NON-NLS-1$
-				objectName = ObjectName.getInstance(objectNameStr);
-			} catch (MalformedObjectNameException e) {
-				Activator.logError(e);
-			}
-			if (contributionDelegate != null) {
-				contributionDelegates.put(this.contributionDelegate, this);
-			}
-		}
-	}
-
-	/**
-	 * Get the name of this contribution.
-	 * 
-	 * @return The name of this contribution.
-	 */
-	protected abstract String getName();
-
-	/**
-	 * Get the list of objects which this <code>Contribution</code>
-	 * wishes to contribute as sub-contributions.  The objects 
-	 * returned may or may not be available to clients; their availability depends
-	 * on a supporting <code>ContributionProvider</code> existing.
-	 * 
-	 * @return The objects this <code>Contribution</code> wishes to contribute.
-	 */
-	protected abstract Object[] getChildren();
-
-	/**
-	 * Derived classes have the option to provide list of properties
-	 * associated with this contribution to be displayed in the UI.
-	 * 
-	 * @return The properties of the contribution to be displayed in the UI, or <code>null</code> if none.
-	 */
-	protected abstract Set getProperties();
-
-	/**
-	 * Get the location for the image to be associated with this contribution.
-	 * 
-	 * @return The location of the image.
-	 */
-	protected abstract URL getImageLocation();
-
-	/**
-	 * Derived classes must return an <code>MBeanInfo</code> object 
-	 * which contains the operations intended to be exposed.  The object
-	 * returned is manipulated to include <code>Contribution</code> specific
-	 * operations to support traversal.
-	 * 
-	 * @param delegate The delegate object associated with this contribution.
-	 * @return The MBeanInfo object which encapsulates the functionality of the derived contribution.
-	 */
-	protected abstract MBeanInfo getMBeanInfo(Object delegate);
-
-	/**
-	 * This method is forwarded by the contribution to the derived <code>Contribution</code> when a operation
-	 * is to be invoked.
-	 * 
-	 * @param operationName The name of the operation to invoke.
-	 * @param args List of arguments of the operation to invoke.
-	 * @param argTypes List of argument types of the operation to invoke.
-	 * @return The Object result of the operation, null if not relevant.
-	 */
-	protected abstract Object invokeOperation(String operationName, Object[] args, String[] argTypes);
-
-	/**
-	 * Gets the <code>Contribution</code> instance that was constructed with the provided
-	 * <code>contributionDelegate</code> or null if no such <code>Contribution</code> was created.
-	 * @param contributionDelegate The object used during construction of the <code>Contribution</code>.
-	 * @return The <code>Contribution</code>, or null if not found.
-	 */
-	public static final Contribution getContribution(final Object contributionDelegate) {
-		return (Contribution)contributionDelegates.get(contributionDelegate);
-	}
-	
-	/**
-	 * Get the object delegate that is associated with this contribution.  The
-	 * delegate may be null; this is typical for provider contributions..
-	 * 
-	 * @return The object delegate for this contribution, may be null.
-	 */
-	public Object getContributionDelegate() {
-		return contributionDelegate;
-	}
-
-	/**
-	 * Allocate a <code>ContributionProxy</code> from this <code>Contribution</code>.
-	 * 
-	 * @see org.eclipse.equinox.jmx.common.ContributionProxy
-	 * @return A newly allocated <code>ContributionProxy</code>.
-	 */
-	public final ContributionProxy createProxy() {
-		if (proxy == null || stateChanged) {
-			ByteArrayHolder holder = null;
-			URL imageUrl = getImageLocation();
-			// image URL may be null depending on contribution state
-			if (imageUrl != null) {
-				if ((holder = (ByteArrayHolder) imageCache.get(imageUrl)) == null) {
-					// create byte array holder from image data and add to cache
-					InputStream in = null;
-					try {
-						in = imageUrl.openStream();
-						ByteArrayOutputStream bout = new ByteArrayOutputStream();
-						byte[] buf = new byte[512];
-						int nread;
-						while ((nread = in.read(buf)) != -1) {
-							bout.write(buf, 0, nread);
-						}
-						holder = new ByteArrayHolder(bout.toByteArray());
-						imageCache.put(imageUrl, holder);
-					} catch (IOException e) {
-						Activator.logError(e);
-					} finally {
-						if (in != null) {
-							try {
-								in.close();
-							} catch (IOException e) {
-								Activator.logError(e);
-							}
-						}
-					}
-				}
-			}
-			proxy = new ContributionProxy(getName(), getProperties(), holder, getObjectName(), getMBeanInfo());
-			stateChanged = false;
-		}
-		return proxy;
-	}
-
-	/**
-	 * Get this contribution's list of child contributions as type <code>ContributionProxy</code>.
-	 * A <code>Contribution</code>s children are only registered with the server if
-	 * <code>ContributionProvider</code> exists which can wrap each child returned by
-	 * the <code>Contribution</code>.
-	 * 
-	 * @return The list of child contributions, null if no children.
-	 */
-	public final ContributionProxy[] getChildContributions() {
-		ContributionProxy[] result = getChildContributionProxies();
-		if (!(this instanceof ContributionProvider)) {
-			// attempt to locate any providers which may also contribute to
-			// this contributions's delegate.
-			if (contributionDelegate != null) {
-				ContributionProxy[] delegateProxies = null;
-				ContributionProvider[] delegateProviders = ContributionProvider.getExtendingProviders(contributionDelegate);
-				if (delegateProviders != null) {
-					delegateProxies = getChildContributions(delegateProviders);
-				}
-				if (delegateProxies != null) {
-					ContributionProxy[] oldResult = (result == null ? (result = new ContributionProxy[0]) : result);
-					result = new ContributionProxy[result.length + delegateProxies.length];
-					System.arraycopy(oldResult, 0, result, 0, oldResult.length);
-					System.arraycopy(delegateProxies, 0, result, oldResult.length, delegateProxies.length);
-				}
-			}
-		}
-		return result;
-	}
-
-	private ContributionProxy[] getChildContributionProxies() {
-		List proxies = null;
-		Object[] childs = getChildren();
-		if (childs != null) {
-			for (int i = 0; i < childs.length; i++) {
-				ContributionProvider provider = null;
-				if (this instanceof ContributionProvider && ((ContributionProvider) this).contributesType(childs[i])) {
-					provider = (ContributionProvider) this;
-				} else {
-					provider = ContributionProvider.getProvider(childs[i]);
-				}
-				if (provider == null) {
-					continue;
-				}
-				try {
-					Contribution contrib = provider.createContribution(childs[i]);
-					contrib.registerContribution(Activator.getDefault().getServer());
-					if (proxies == null) {
-						proxies = new ArrayList();
-					}
-					proxies.add(contrib.createProxy());
-				} catch (Exception e) {
-					Activator.log(e);
-				}
-			}
-		}
-		return proxies == null ? null : (ContributionProxy[]) proxies.toArray(new ContributionProxy[proxies.size()]);
-	}
-
-	/**
-	 * Register this contribution with the <code>server</code> provided.
-	 * 
-	 * @param server The server to register this contribution with.
-	 * @throws InstanceAlreadyExistsException If the contribution's object name has already been registered with the server.
-	 * @throws MBeanRegistrationException
-	 * @throws NotCompliantMBeanException
-	 */
-	public final void registerContribution(MBeanServer mbeanServer) throws MBeanRegistrationException, NotCompliantMBeanException {
-		if (!mbeanServer.isRegistered(getObjectName())) {
-			try {
-				mbeanServer.registerMBean(this, getObjectName());
-			} catch (InstanceAlreadyExistsException e) {
-				// previously checked for registration, this should not occur
-				Activator.logError(e);
-			}
-		}
-	}
-
-	/**
-	 * Invoked by the underlying <code>Contribution</code> when its internal state
-	 * has changed and a new <code>ContributionProxy</code> should be created
-	 * to reflect this change.
-	 * 
-	 * @param event The event describing the state transition.
-	 */
-	protected void contributionStateChanged(ContributionNotificationEvent event) {
-		if (event == null) {
-			return;
-		}
-		if (event.getType().equals(ContributionNotificationEvent.NOTIFICATION_REMOVED)) {
-			// self from currently contributed objects and release hold on delegate
-			contributionDelegates.remove(contributionDelegate);
-		} else if (event.getType().equals(ContributionNotificationEvent.NOTIFICATION_ADDED)) {
-			// not required to add contribution and delegate to map, this is handled in getChildren
-		} else if (event.getType().equals(ContributionNotificationEvent.NOTIFICATION_UPDATED)) {
-			// currently not required to perform any operations
-		}
-		stateChanged = true;
-		sendNotification(new Notification(event.getType(), this, sequenceNumber++, new Date().getTime()));
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getMBeanInfo()
-	 */
-	public MBeanInfo getMBeanInfo() {
-		// retrieve implementors exposed operations
-		MBeanInfo info = getMBeanInfo(contributionDelegate);
-		if (info != null) {
-			// insert our required getContributions() operation
-			MBeanOperationInfo[] ops = info.getOperations();
-			MBeanOperationInfo[] opsNew = new MBeanOperationInfo[ops.length + 2];
-			System.arraycopy(ops, 0, opsNew, 0, ops.length);
-			try {
-				opsNew[opsNew.length - 2] = new MBeanOperationInfo(ContributionMessages.desc_getcontribs, Contribution.class.getMethod("getChildContributions", new Class[0])); //$NON-NLS-1$
-				opsNew[opsNew.length - 1] = new MBeanOperationInfo("", Contribution.class.getMethod("createProxy", new Class[0])); //$NON-NLS-1$ //$NON-NLS-2$
-				return new MBeanInfo(info.getClassName(), info.getDescription(), info.getAttributes(), info.getConstructors(), opsNew /* our customized operations */, info.getNotifications());
-			} catch (Exception e) {
-				Activator.logError(e);
-			}
-		} else {
-			info = new MBeanInfo(getClass().getName(), getName(), new MBeanAttributeInfo[0], new MBeanConstructorInfo[0], new MBeanOperationInfo[0], new MBeanNotificationInfo[0]);
-		}
-		return info;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#invoke(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	public Object invoke(String arg0, Object[] arg1, String[] arg2) throws MBeanException, ReflectionException {
-		if (arg0.equals(ContributionProxy.OP_GET_CHILD_CONTRIBUTIONS)) {
-			return getChildContributions();
-		} else if (arg0.equals(ContributionProxy.OP_REFRESH_PROXY)) {
-			return createProxy();
-		} else if (arg0.equals(ContributionProxy.OP_GET_CONTRIBUTION_UI_URL)) {
-			//return UIContributionRegistry.getInstance().getContributionUIUrl(contributionDelegate.getClass());
-		}
-		// delegate to implementing class
-		return invokeOperation(arg0, arg1, arg2);
-	}
-	
-	protected ObjectName getObjectName() {
-		return objectName;
-	}
-	
-	private final ContributionProxy[] getChildContributions(ContributionProvider[] delegateProviders) {
-		try {
-			List delegateProviderList = new ArrayList();
-			for (int i = 0; i < delegateProviders.length; i++) {
-				ContributionProvider delegateProvider = delegateProviders[i];
-				ContributionProxy[] proxies = delegateProvider.getChildContributions();
-				if (proxies != null && proxies.length > 0) {
-					delegateProvider.registerContribution(Activator.getDefault().getServer());
-					delegateProviderList.add(delegateProvider.createProxy());
-				}
-			}
-			if (delegateProviderList.size() == 0) {
-				return null;
-			}
-			return (ContributionProxy[]) delegateProviderList.toArray(new ContributionProxy[delegateProviderList.size()]);
-		} catch (Exception e) {
-			Activator.logError(e);
-		}
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/ContributionProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/ContributionProvider.java
deleted file mode 100644
index fa2f9af..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/ContributionProvider.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.server;
-
-import java.util.*;
-import javax.management.MalformedObjectNameException;
-import org.eclipse.equinox.jmx.internal.server.ServerExtensionManager;
-import org.eclipse.equinox.jmx.internal.server.ServerExtensionManager.ContributionExtensionDefinition;
-
-/**
- * Required base class for all classes extending the <code>org.eclipse.equinox.jmx.server.contribution</code> extension point.
- * <p>
- * A <code>ContributionProvider</code> has the ability to create concrete <code>Contribution</code>s
- * from a given <code>Object</code> type.  After creation, the <code>ContributionProvider</code> is added
- * to an internal registry of known providers.  Any <code>Object</code>s wishing to be contributed must
- * first locate a supported provider. 
- * 
- * @see Contribution
- * @since 1.0
- */
-public abstract class ContributionProvider extends Contribution {
-
-	/**
-	 * Default constructor for all derived <code>ContributionProviders</code>.  Adds
-	 * this provider to the list of available contribution providers.
-	 * 
-	 * @param contributionDelegate
-	 */
-	public ContributionProvider() {
-		super();
-	}
-
-	/**
-	 * Returns <code>true</code> if this provider supports creating a <code>Contribution</code>
-	 * from the provided object.
-	 * 
-	 * @param obj The object to contribute.
-	 * @return <code>true</code> if the object is supported by this provider and 
-	 * 	<code>false</code> otherwise
-	 */
-	protected abstract boolean contributesType(Object obj);
-
-	/**
-	 * Returns <code>true</code> if this provider supports the {@link #createProvider(Object)} operation
-	 * for the supplied object.  Providing a type typically implies that the provider
-	 * bases its decision on which objects to return as children using logic associated
-	 * with the object provided.
-	 * 
-	 * @param obj The object to provide for.
-	 * @return <code>true</code> if the object is provided by this provider and
-	 * 	<code>false</code> otherwise
-	 */
-	protected abstract boolean providesType(Object obj);
-
-	/**
-	 * Allocate a <code>ContributionProvider</code> that is specialized 
-	 * with the provided object.
-	 * 
-	 * @param obj The object to associate the allocated provider with.
-	 * @return The newly allocated specialized provider.
-	 */
-	protected abstract ContributionProvider createProvider(Object obj);
-
-	/**
-	 * Allocate a <code>Contribution</code> from the object provided. If the 
-	 * implementing <code>ContributionProvider</code> does not support the 
-	 * type of object provided, <code>null</code> is returned.
-	 * 
-	 * @param obj The object to to contribute.
-	 * @return A <code>Contribution</code> object or null if the object type is not supported.
-	 * @throws MalformedObjectNameException
-	 */
-	protected abstract Contribution createContribution(Object obj) throws MalformedObjectNameException;
-
-	/**
-	 * Convenience method for classes to query the provider registry to determine
-	 * if a <code>ContributionProvider</code> exists for the object provided.  The first
-	 * provider found that supports contributing the object type is returned.
-	 * 
-	 * @param obj The object to located a provider for.
-	 * @return A <code>ContributionProvider</code> which supports the provided object, null if no such provider exists.
-	 */
-	public static ContributionProvider getProvider(Object obj) {
-		Collection contribDefns = ServerExtensionManager.getInstance().getContributionExtensionDefinitions();
-		Iterator iter = contribDefns.iterator();
-		while (iter.hasNext()) {
-			ContributionProvider provider = ((ContributionExtensionDefinition) iter.next()).getContributionProvider();
-			if (provider.contributesType(obj)) {
-				return provider;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Returns a list of the <code>ContributionProvider</code>s that supports the {@link #providesType(Object)}
-	 * method for the supplied object.
-	 * 
-	 * @param obj The object for which to locate a <code>ContributionProvider</code>.
-	 * @return The list of identified providers.
-	 */
-	public static ContributionProvider[] getExtendingProviders(Object obj) {
-		Collection contribDefns = ServerExtensionManager.getInstance().getContributionExtensionDefinitions();
-		Iterator iter = contribDefns.iterator();
-		List providers = null;
-		while (iter.hasNext()) {
-			ContributionExtensionDefinition defn = (ContributionExtensionDefinition) iter.next();
-			// iterate over definitions list of supported class types and for assignable match
-			ContributionProvider provider = defn.getContributionProvider();
-			if (provider.providesType(obj)) {
-				if (providers == null) {
-					providers = new ArrayList(2);
-				}
-				providers.add(provider.createProvider(obj));
-			}
-		}
-		ContributionProvider[] ret = null;
-		if (providers != null) {
-			ret = (ContributionProvider[]) providers.toArray(new ContributionProvider[providers.size()]);
-		}
-		return ret;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/IJMXConnectorServerProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/IJMXConnectorServerProvider.java
deleted file mode 100644
index d5c209e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.server/src/org/eclipse/equinox/jmx/server/IJMXConnectorServerProvider.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.server;
-
-import java.net.MalformedURLException;
-import javax.management.remote.JMXConnectorServerProvider;
-import javax.management.remote.JMXServiceURL;
-
-public interface IJMXConnectorServerProvider extends JMXConnectorServerProvider {
-	public JMXServiceURL getJMXServiceURL(String host, int port, String protocol, String domain) throws MalformedURLException;
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.classpath b/eclipse/plugins/org.eclipse.equinox.jmx.vm/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.project b/eclipse/plugins/org.eclipse.equinox.jmx.vm/.project
deleted file mode 100644
index a82fbe1..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.jmx.vm</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.vm/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index bac21c0..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,311 +0,0 @@
-#Tue May 15 09:10:53 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.jmx.vm/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 399679b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-#Tue May 15 09:10:53 EDT 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jmx.vm/META-INF/MANIFEST.MF
deleted file mode 100644
index 343343c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring VM Extensions (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.jmx.vm;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Import-Package: javax.management,
- javax.management.remote,
- org.eclipse.core.runtime; common=split,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.common.util,
- org.eclipse.equinox.jmx.server,
- org.eclipse.osgi.util,
- org.osgi.framework
-Bundle-Vendor: Eclipse.org
-Eclipse-LazyStart: true
-Bundle-Activator: org.eclipse.equinox.jmx.internal.vm.Activator
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/about.html b/eclipse/plugins/org.eclipse.equinox.jmx.vm/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/build.properties b/eclipse/plugins/org.eclipse.equinox.jmx.vm/build.properties
deleted file mode 100644
index f57342a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               icons/,\
-               about.html
-src.includes = about.html
-javacSource=1.5
-javacTarget=1.5
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/classloading.gif b/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/classloading.gif
deleted file mode 100644
index f1ee8cf..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/classloading.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/compilation.gif b/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/compilation.gif
deleted file mode 100644
index 7134210..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/compilation.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/memory.gif b/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/memory.gif
deleted file mode 100644
index 7ce1112..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/memory.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/os.gif b/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/os.gif
deleted file mode 100644
index 9d70301..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/os.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/runtime.gif b/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/runtime.gif
deleted file mode 100644
index 95f87ea..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/runtime.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/vmstats.gif b/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/vmstats.gif
deleted file mode 100644
index a598f60..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.jmx.vm/icons/vmstats.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/plugin.xml b/eclipse/plugins/org.eclipse.equinox.jmx.vm/plugin.xml
deleted file mode 100644
index d4b1d6d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension
-         point="org.eclipse.equinox.jmx.server.contribution">
-      <contribution
-            class="org.eclipse.equinox.jmx.internal.vm.VMStatsProvider"
-            isroot="true"/>
-   </extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/Activator.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/Activator.java
deleted file mode 100644
index fed88af..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/Activator.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import java.net.URL;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-
-	private static BundleContext context;
-
-	static URL getImageLocation(String path) {
-		return FileLocator.find(context.getBundle(), new Path(path), null);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext bundleContext) throws Exception {
-		Activator.context = bundleContext;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext bundleContext) throws Exception {
-		Activator.context = null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/ClassLoadingContribution.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/ClassLoadingContribution.java
deleted file mode 100644
index 4f83004..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/ClassLoadingContribution.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import java.lang.management.ClassLoadingMXBean;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.util.MBeanInfoWrapper;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-public class ClassLoadingContribution extends Contribution {
-
-	private static final String ICON_PATH = "icons/classloading.gif"; //$NON-NLS-1$
-	private MBeanInfo mbeanInfo;
-
-	public ClassLoadingContribution(ClassLoadingMXBean delegate) {
-		super(delegate);
-		mbeanInfo = MBeanInfoWrapper.createMBeanInfo(delegate.getClass(), delegate.toString(), new MBeanAttributeInfo[0], new MBeanNotificationInfo[0]);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return VMStatsMessages.cl_title;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set<String> getProperties() {
-		Set<String> result = new HashSet<String>();
-		ClassLoadingMXBean mbean = (ClassLoadingMXBean) contributionDelegate;
-		result.add(VMStatsMessages.cl_loadedclscnt + ": " + mbean.getLoadedClassCount()); //$NON-NLS-1$
-		result.add(VMStatsMessages.cl_totloadedclscnt + ": " + mbean.getTotalLoadedClassCount()); //$NON-NLS-1$
-		result.add(VMStatsMessages.cl_totunloadedclscnt + ": " + mbean.getUnloadedClassCount()); //$NON-NLS-1$
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return mbeanInfo;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/CompilationContribution.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/CompilationContribution.java
deleted file mode 100644
index c34bee0..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/CompilationContribution.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import java.lang.management.CompilationMXBean;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.util.MBeanInfoWrapper;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-public class CompilationContribution extends Contribution {
-
-	private static final String ICON_PATH = "icons/compilation.gif"; //$NON-NLS-1$
-	private MBeanInfo mbeanInfo;
-
-	public CompilationContribution(CompilationMXBean delegate) {
-		super(delegate);
-		mbeanInfo = MBeanInfoWrapper.createMBeanInfo(delegate.getClass(), delegate.toString(), new MBeanAttributeInfo[0], new MBeanNotificationInfo[0]);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return VMStatsMessages.cmp_title;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set<String> getProperties() {
-		Set<String> result = new HashSet<String>();
-		CompilationMXBean mbean = (CompilationMXBean) contributionDelegate;
-		result.add(VMStatsMessages.cmp_jitname + ": " + mbean.getName()); //$NON-NLS-1$
-		result.add(VMStatsMessages.cmp_tottime + ": " + mbean.getTotalCompilationTime()); //$NON-NLS-1$
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return mbeanInfo;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/MemoryContribution.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/MemoryContribution.java
deleted file mode 100644
index 92115d2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/MemoryContribution.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import java.lang.management.MemoryMXBean;
-import java.lang.management.MemoryUsage;
-import java.net.URL;
-import java.util.Set;
-import java.util.TreeSet;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.ContributionNotificationEvent;
-import org.eclipse.equinox.jmx.common.util.MBeanInfoWrapper;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-public class MemoryContribution extends Contribution implements NotificationListener {
-
-	private static final String ICON_PATH = "icons/memory.gif"; //$NON-NLS-1$
-	private long heapCommited, heapInit, heapMax, heapUsed;
-	private long nonHeapCommited, nonHeapInit, nonHeapMax, nonHeapUsed;
-	private MBeanInfo mbeanInfo;
-
-	public MemoryContribution(MemoryMXBean delegate) {
-		super(delegate);
-		NotificationEmitter emitter = (NotificationEmitter) delegate;
-		emitter.addNotificationListener(this, null, null);
-		mbeanInfo = MBeanInfoWrapper.createMBeanInfo(delegate.getClass(), delegate.toString(), new MBeanAttributeInfo[0], new MBeanNotificationInfo[0]);
-
-		new Thread() {
-			public void run() {
-				while (true) {
-					if (MemoryContribution.this.memUsageChanged()) {
-						MemoryContribution.this.contributionStateChanged(new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_UPDATED));
-					}
-					try {
-						sleep(1500);
-					} catch (InterruptedException e) {
-					}
-				}
-			}
-		}.start();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return VMStatsMessages.mem_title;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set<String> getProperties() {
-		Set<String> result = new TreeSet<String>();
-		MemoryMXBean memDelegate = (MemoryMXBean) contributionDelegate;
-
-		MemoryUsage mu = memDelegate.getHeapMemoryUsage();
-		result.add(VMStatsMessages.mem_heapusage);
-		result.add(VMStatsMessages.mem_commited + ": " + (mu.getCommitted() >> 10) + "KB"); //$NON-NLS-1$ //$NON-NLS-2$
-		result.add(VMStatsMessages.mem_initreq + ": " + (mu.getInit() >> 10) + "KB");  //$NON-NLS-1$//$NON-NLS-2$
-		result.add(VMStatsMessages.mem_max + ": " + (mu.getMax() >> 10) + "KB"); //$NON-NLS-1$ //$NON-NLS-2$
-		result.add(VMStatsMessages.mem_used + ": " + (mu.getUsed() >> 10) + "KB"); //$NON-NLS-1$ //$NON-NLS-2$
-
-		mu = memDelegate.getNonHeapMemoryUsage();
-		result.add(VMStatsMessages.mem_noheapusage);
-		result.add(VMStatsMessages.mem_commited + ": " + (mu.getCommitted() >> 10) + "KB"); //$NON-NLS-1$ //$NON-NLS-2$
-		result.add(VMStatsMessages.mem_initreq + ": " + (mu.getInit() >> 10) + "KB"); //$NON-NLS-1$ //$NON-NLS-2$
-		result.add(VMStatsMessages.mem_max + ": " + (mu.getMax() >> 10) + "KB"); //$NON-NLS-1$ //$NON-NLS-2$
-		result.add(VMStatsMessages.mem_used + ": " + (mu.getUsed() >> 10) + "KB"); //$NON-NLS-1$ //$NON-NLS-2$
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return mbeanInfo;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.NotificationListener#handleNotification(javax.management.Notification, java.lang.Object)
-	 */
-	public void handleNotification(Notification notification, Object handback) {
-		super.contributionStateChanged(new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_UPDATED));
-	}
-
-	private boolean memUsageChanged() {
-		MemoryMXBean mbean = (MemoryMXBean) contributionDelegate;
-		MemoryUsage m = mbean.getHeapMemoryUsage();
-		boolean changed = false;
-		if (m.getCommitted() != heapCommited || m.getInit() != heapInit || m.getMax() != heapMax || m.getUsed() != heapUsed) {
-			changed = true;
-			heapCommited = m.getCommitted();
-			heapInit = m.getInit();
-			heapMax = m.getMax();
-			heapUsed = m.getUsed();
-		}
-		m = mbean.getNonHeapMemoryUsage();
-		if (m.getCommitted() != nonHeapCommited || m.getInit() != nonHeapInit || m.getMax() != nonHeapMax || m.getUsed() != nonHeapUsed) {
-			changed = true;
-			nonHeapCommited = m.getCommitted();
-			nonHeapInit = m.getInit();
-			nonHeapMax = m.getMax();
-			nonHeapUsed = m.getUsed();
-		}
-		return changed;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/OperatingSystemContribution.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/OperatingSystemContribution.java
deleted file mode 100644
index 98eb89a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/OperatingSystemContribution.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import java.lang.management.OperatingSystemMXBean;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.util.MBeanInfoWrapper;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-public class OperatingSystemContribution extends Contribution {
-
-	private static final String ICON_PATH = "icons/os.gif"; //$NON-NLS-1$
-	private MBeanInfo mbeanInfo;
-
-	public OperatingSystemContribution(OperatingSystemMXBean delegate) {
-		super(delegate);
-		mbeanInfo = MBeanInfoWrapper.createMBeanInfo(delegate.getClass(), delegate.toString(), new MBeanAttributeInfo[0], new MBeanNotificationInfo[0]);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return VMStatsMessages.os_title;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set<String> getProperties() {
-		Set<String> result = new HashSet<String>();
-		OperatingSystemMXBean mbean = (OperatingSystemMXBean) contributionDelegate;
-		result.add(VMStatsMessages.os_name + ": " + mbean.getName()); //$NON-NLS-1$
-		result.add(VMStatsMessages.os_version + ": " + mbean.getVersion()); //$NON-NLS-1$
-		result.add(VMStatsMessages.os_arch + ": " + mbean.getArch()); //$NON-NLS-1$
-		result.add(VMStatsMessages.os_ncpus + ": " + mbean.getAvailableProcessors()); //$NON-NLS-1$
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return mbeanInfo;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/RuntimeContribution.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/RuntimeContribution.java
deleted file mode 100644
index 3cfa0f2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/RuntimeContribution.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import java.lang.management.RuntimeMXBean;
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.equinox.jmx.common.util.MBeanInfoWrapper;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-public class RuntimeContribution extends Contribution {
-
-	private static final String ICON_PATH = "icons/runtime.gif"; //$NON-NLS-1$
-	private MBeanInfo mbeanInfo;
-
-	public RuntimeContribution(RuntimeMXBean delegate) {
-		super(delegate);
-		mbeanInfo = MBeanInfoWrapper.createMBeanInfo(delegate.getClass(), delegate.toString(), new MBeanAttributeInfo[0], new MBeanNotificationInfo[0]);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return VMStatsMessages.rt_title;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set<String> getProperties() {
-		Set<String> result = new HashSet<String>();
-		RuntimeMXBean mbean = (RuntimeMXBean) contributionDelegate;
-		result.add(VMStatsMessages.rt_vmname + ": " + mbean.getVmName()); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_vmvendor + ": " + mbean.getVmVendor()); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_vmversion + ": " + mbean.getVmVersion()); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_starttime + ": " + new Date(mbean.getStartTime())); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_uptime + ": " + new Date(mbean.getUptime())); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_bootclasspath + ": " + mbean.getBootClassPath()); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_systemclasspath + ": " + mbean.getClassPath()); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_inputargs + ": " + Arrays.toString(mbean.getInputArguments().toArray())); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_ldpath + ": " + mbean.getLibraryPath()); //$NON-NLS-1$
-		result.add(VMStatsMessages.rt_mgmtspecver + ": " + mbean.getManagementSpecVersion()); //$NON-NLS-1$
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return mbeanInfo;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsMessages.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsMessages.java
deleted file mode 100644
index 2cc9c9f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsMessages.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import org.eclipse.osgi.util.NLS;
-
-public class VMStatsMessages extends NLS {
-
-	public static String title;
-
-	// memory mbean data
-	public static String mem_title;
-	public static String mem_heapusage;
-	public static String mem_noheapusage;
-	public static String mem_commited;
-	public static String mem_initreq;
-	public static String mem_max;
-	public static String mem_used;
-
-	// classloading mbean data
-	public static String cl_title;
-	public static String cl_loadedclscnt;
-	public static String cl_totloadedclscnt;
-	public static String cl_totunloadedclscnt;
-
-	// operating system mbean data
-	public static String os_title;
-	public static String os_arch;
-	public static String os_ncpus;
-	public static String os_name;
-	public static String os_version;
-
-	// compilation mbean data
-	public static String cmp_title;
-	public static String cmp_tottime;
-	public static String cmp_jitname;
-
-	// runtime mbean data
-	public static String rt_title;
-	public static String rt_bootclasspath;
-	public static String rt_systemclasspath;
-	public static String rt_inputargs;
-	public static String rt_ldpath;
-	public static String rt_mgmtspecver;
-	public static String rt_vmname;
-	public static String rt_vmvendor;
-	public static String rt_vmversion;
-	public static String rt_starttime;
-	public static String rt_uptime;
-
-	private VMStatsMessages() {
-		// prevent instantiation
-	}
-
-	static {
-		NLS.initializeMessages(VMStatsMessages.class.getName(), VMStatsMessages.class);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsMessages.properties b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsMessages.properties
deleted file mode 100644
index 90d1e1b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsMessages.properties
+++ /dev/null
@@ -1,51 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-title = VM Stats
-
-# memory contribution
-mem_title = Memory Usage
-mem_heapusage = Heap Memory Usage
-mem_noheapusage = Non-Heap Memory Usage
-mem_commited = Commited
-mem_initreq = Initially Requested
-mem_max = Max
-mem_used = Used
-
-# classloading contribution
-cl_title = ClassLoading Stats.
-cl_loadedclscnt = Currently Loaded Class Count
-cl_totloadedclscnt = Total Number of Classes Loaded
-cl_totunloadedclscnt = Total Number of Classes Unloaded.
-
-# os contribution
-os_title = Operating System
-os_name = Name
-os_version = Version
-os_arch = Archtype
-os_ncpus = Available CPUs
-
-# compilation contribution
-cmp_title = Compilation Stats
-cmp_tottime = Total Elapsed Compilation Time (in millis)
-cmp_jitname = JIT Name
-
-# runtime contribution
-rt_title = Runtime
-rt_bootclasspath = Boot ClassPath
-rt_systemclasspath = System ClassPath
-rt_inputargs = Input Args
-rt_ldpath = Library Path
-rt_mgmtspecver = Managment Spec. Version
-rt_vmname = VM Name
-rt_vmvendor = VM Vendor
-rt_vmversion = VM Version
-rt_starttime = Start Time
-rt_uptime = Uptime
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsProvider.java b/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsProvider.java
deleted file mode 100644
index 20e0915..0000000
--- a/eclipse/plugins/org.eclipse.equinox.jmx.vm/src/org/eclipse/equinox/jmx/internal/vm/VMStatsProvider.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.jmx.internal.vm;
-
-import java.lang.management.*;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-
-public class VMStatsProvider extends ContributionProvider {
-
-	static final String BUNDLE_NAME = "org.eclipse.equinox.jmx.vm"; //$NON-NLS-1$
-	private static final String ICON_PATH = "icons/vmstats.gif"; //$NON-NLS-1$
-
-	public VMStatsProvider() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof ClassLoadingMXBean || obj instanceof CompilationMXBean || obj instanceof MemoryMXBean || obj instanceof OperatingSystemMXBean || obj instanceof RuntimeMXBean;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) {
-		if (contributesType(obj)) {
-			if (obj instanceof ClassLoadingMXBean) {
-				return new ClassLoadingContribution(ManagementFactory.getClassLoadingMXBean());
-			} else if (obj instanceof CompilationMXBean) {
-				return new CompilationContribution(ManagementFactory.getCompilationMXBean());
-			} else if (obj instanceof MemoryMXBean) {
-				return new MemoryContribution(ManagementFactory.getMemoryMXBean());
-			} else if (obj instanceof OperatingSystemMXBean) {
-				return new OperatingSystemContribution(ManagementFactory.getOperatingSystemMXBean());
-			} else if (obj instanceof RuntimeMXBean) {
-				return new RuntimeContribution(ManagementFactory.getRuntimeMXBean());
-			}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return VMStatsMessages.title;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return new Object[] {ManagementFactory.getClassLoadingMXBean(), ManagementFactory.getCompilationMXBean(), ManagementFactory.getMemoryMXBean(), ManagementFactory.getOperatingSystemMXBean(), ManagementFactory.getRuntimeMXBean()};
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set<String> getProperties() {
-		return new HashSet<String>();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return new MBeanInfo(getClass().getName(), null, null, null, null, null);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return Activator.getImageLocation(ICON_PATH);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.jsp.jasper/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.jsp.jasper/META-INF/MANIFEST.MF
index 05fb0e2..2e46923 100644
--- a/eclipse/plugins/org.eclipse.equinox.jsp.jasper/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.jsp.jasper/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %bundleName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.equinox.jsp.jasper
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.jsp.jasper.Activator
 Import-Package: javax.servlet;version="[2.4, 3.0)",
  javax.servlet.http;version="[2.4, 3.0)",
diff --git a/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/internal/jsp/jasper/JspClassLoader.java b/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/internal/jsp/jasper/JspClassLoader.java
index 3303026..cc1c97b 100644
--- a/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/internal/jsp/jasper/JspClassLoader.java
+++ b/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/internal/jsp/jasper/JspClassLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/jsp/jasper/JspServlet.java b/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/jsp/jasper/JspServlet.java
index 5792818..0ffb1e2 100644
--- a/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/jsp/jasper/JspServlet.java
+++ b/eclipse/plugins/org.eclipse.equinox.jsp.jasper/src/org/eclipse/equinox/jsp/jasper/JspServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,14 @@ package org.eclipse.equinox.jsp.jasper;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Set;
@@ -61,6 +65,29 @@ import org.osgi.framework.Bundle;
  */
 
 public class JspServlet extends HttpServlet {
+
+	private static class BundlePermissionCollection extends PermissionCollection {
+		private static final long serialVersionUID = -6365478608043900677L;
+		private Bundle bundle;
+
+		public BundlePermissionCollection(Bundle bundle) {
+			this.bundle = bundle;
+			super.setReadOnly();
+		}
+
+		public void add(Permission permission) {
+			throw new SecurityException();
+		}
+
+		public boolean implies(Permission permission) {
+			return bundle.hasPermission(permission);
+		}
+
+		public Enumeration elements() {
+			return Collections.enumeration(Collections.EMPTY_LIST);
+		}
+	}
+
 	private static final long serialVersionUID = -4110476909131707652L;
 	private Servlet jspServlet = new org.apache.jasper.servlet.JspServlet();
 	Bundle bundle;
@@ -84,6 +111,20 @@ public class JspServlet extends HttpServlet {
 		try {
 			Thread.currentThread().setContextClassLoader(jspLoader);
 			jspServlet.init(new ServletConfigAdaptor(config));
+
+			// If a SecurityManager is set we need to override the permissions collection set in Jasper's JSPRuntimeContext
+			if (System.getSecurityManager() != null) {
+				try {
+					Field jspRuntimeContextField = jspServlet.getClass().getDeclaredField("rctxt"); //$NON-NLS-1$
+					jspRuntimeContextField.setAccessible(true);
+					Object jspRuntimeContext = jspRuntimeContextField.get(jspServlet);
+					Field permissionCollectionField = jspRuntimeContext.getClass().getDeclaredField("permissionCollection"); //$NON-NLS-1$
+					permissionCollectionField.setAccessible(true);
+					permissionCollectionField.set(jspRuntimeContext, new BundlePermissionCollection(bundle));
+				} catch (Exception e) {
+					throw new ServletException("Cannot initialize JSPServlet. Failed to set JSPRuntimeContext permission collection."); //$NON-NLS-1$
+				}
+			}
 		} finally {
 			Thread.currentThread().setContextClassLoader(original);
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
index 069a235..e8fac1a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.carbon.macosx;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=carbon) (osgi.os=macosx) (|(osgi.arch=x86)(osgi.arch=ppc)) )
 Bundle-Localization: launcher.carbon.macosx
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/build.properties
index d6d2e53..3517b49 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.carbon.macosx.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties
index 8b6f73f..f158577 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
index c7df9b3..6ba1260 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx.x86_64;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) )
 Bundle-Localization: launcher.cocoa.macosx.x86_64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties
index f0642e7..d4388e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.cocoa.macosx.x86_64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties
index b49be95..eea3f37 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
index a284c15..67d1f9b 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (|(osgi.arch=x86)(osgi.arch=ppc)) )
 Bundle-Localization: launcher.cocoa.macosx
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/build.properties
index d0fa255..43ad0fd 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.cocoa.macosx.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties
index b49be95..eea3f37 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/.project b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/.project
new file mode 100644
index 0000000..699e953
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.launcher.gtk.aix.ppc</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..bd14c50
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Tue Oct 19 13:23:50 EDT 2010
+eclipse.preferences.version=1
+resolve.requirebundle=false
+pluginProject.extensions=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a2c00a3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.aix.ppc
+Bundle-Version: 1.1.0.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
+Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=aix) (osgi.arch=ppc))
+Bundle-Localization: launcher.gtk.aix.ppc
+Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/about.html b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/about.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/about.html
rename to eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/build.properties
new file mode 100644
index 0000000..9441f1c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = META-INF/,\
+               eclipse_*.so,\
+               launcher.gtk.aix.ppc.properties,\
+               about.html
+               
+customBuildCallbacks=customBuildCallbacks.xml
+generateSourceBundle=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/customBuildCallbacks.xml
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/customBuildCallbacks.xml
rename to eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/customBuildCallbacks.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/launcher.gtk.aix.ppc.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/launcher.gtk.aix.ppc.properties
new file mode 100644
index 0000000..2dcd7a3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc/launcher.gtk.aix.ppc.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Equinox Launcher GTK AIX PPC Fragment
+providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF
index 9b58379..6a2df16 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.aix.ppc64
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.1.0.qualifier
 Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=aix) (osgi.arch=ppc64))
 Bundle-Localization: launcher.gtk.aix.ppc64
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties
index 7be314c..f3b9256 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.aix.ppc64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.project b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.project
new file mode 100644
index 0000000..5a170fc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.launcher.gtk.hpux.ia64_32</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..db68ec3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Tue Nov 16 14:45:38 EST 2010
+eclipse.preferences.version=1
+resolve.requirebundle=false
+pluginProject.extensions=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6697f25
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.hpux.ia64_32
+Bundle-Version: 1.0.0.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
+Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=hpux) (osgi.arch=ia64_32))
+Bundle-Localization: launcher.gtk.hpux.ia64_32
+Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/about.html b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/about.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/about.html
rename to eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/build.properties
new file mode 100644
index 0000000..a5820c7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = META-INF/,\
+               eclipse_*.so,\
+               launcher.gtk.hpux.ia64_32.properties,\
+               about.html
+               
+customBuildCallbacks=customBuildCallbacks.xml
+generateSourceBundle=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/customBuildCallbacks.xml
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/customBuildCallbacks.xml
rename to eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/customBuildCallbacks.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/launcher.gtk.hpux.ia64_32.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/launcher.gtk.hpux.ia64_32.properties
new file mode 100644
index 0000000..ae7515a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/launcher.gtk.hpux.ia64_32.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Equinox Launcher GTK HPUX IA64_32 Fragment
+providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
index 90d6f67..984d192 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.ppc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc))
 Bundle-Localization: launcher.gtk.linux.ppc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties
index d44532b..75b6eb9 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.ppc.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties
index 2eb47e4..363bf74 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
index 1df2f3e..915f19c 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.ppc64;singleton:=true
-Bundle-Version: 1.0.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.0.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc64))
 Bundle-Localization: launcher.gtk.linux.ppc64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
index 8356be9..b206422 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.ppc64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
index b0663ec..6240308 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
index 57288ac..e8f7b5e 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.s390;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.100.qualifier
 Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390))
 Bundle-Localization: launcher.gtk.linux.s390
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties
index f3c0662..2a5549d 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.s390.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties
index 3782298..92b1db4 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
index 28fa3d0..8dd8c8a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.s390x;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.100.qualifier
 Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390x))
 Bundle-Localization: launcher.gtk.linux.s390x
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties
index 2213963..d712268 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.s390x.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties
index 810b0a3..fcb4371 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
index 1ce7aa5..aefb9e7 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.x86;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86))
 Bundle-Localization: launcher.gtk.linux.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties
index 768196b..664e8b4 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.x86.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties
index 120c5fb..122990b 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
index 364f608..a473576 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.x86_64;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86_64))
 Bundle-Localization: launcher.gtk.linux.x86_64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties
index dfd3714..d6e6597 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.x86_64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties
index e95b2fd..9b101ff 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
index c60d378..611d6c6 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.solaris.sparc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=sparc))
 Bundle-Localization: launcher.gtk.solaris.sparc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties
index b7ee51b..a721a4a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.solaris.sparc.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties
index 3bfebde..17f4d5d 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
index f988fc0..8851515 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.solaris.x86;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=x86))
 Bundle-Localization: launcher.gtk.solaris.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties
index 0d65502..05ac485 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.solaris.x86.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties
index 936bdec..d5d3b33 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/.project b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/.project
deleted file mode 100644
index 3be3164..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.launcher.motif.aix.ppc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/.settings/org.eclipse.pde.core.prefs
deleted file mode 100644
index 8e93962..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/.settings/org.eclipse.pde.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Wed Dec 06 11:41:27 EST 2006
-eclipse.preferences.version=1
-pluginProject.extensions=false
-resolve.requirebundle=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
index 497120a..3b7c640 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.aix.ppc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=aix) (osgi.arch=ppc))
 Bundle-Localization: launcher.motif.aix.ppc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/build.properties
deleted file mode 100644
index e890e22..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-bin.includes = META-INF/,\
-               eclipse_*.so,\
-               libeclipse-motif.so, \
-               launcher.motif.aix.ppc.properties,\
-               about.html
-               
-customBuildCallbacks=customBuildCallbacks.xml
-generateSourceBundle=false               
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/launcher.motif.aix.ppc.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/launcher.motif.aix.ppc.properties
deleted file mode 100644
index 95c4a79..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.aix.ppc/launcher.motif.aix.ppc.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Equinox Launcher AIX PPC Fragment
-providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/.project b/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/.project
deleted file mode 100644
index 5bbcd80..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.launcher.motif.hpux.ia64_32</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
index 5fda8d5..3f0eddd 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.hpux.ia64_32;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Bundle-Vendor: %providerName
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=hpux) (osgi.arch=ia64_32) )
 Bundle-Localization: launcher.motif.hpux.ia64_32
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/build.properties
deleted file mode 100644
index 408b84c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-bin.includes = META-INF/,\
-               eclipse_*.so,\
-               launcher.motif.hpux.ia64_32.properties,\
-               about.html
-               
-customBuildCallbacks=customBuildCallbacks.xml
-generateSourceBundle=false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/launcher.motif.hpux.ia64_32.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/launcher.motif.hpux.ia64_32.properties
deleted file mode 100644
index 4fd387b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.hpux.ia64_32/launcher.motif.hpux.ia64_32.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Equinox Launcher HPUX IA64_32 Fragment
-providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/.project b/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/.project
deleted file mode 100644
index a592cb0..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.launcher.motif.linux.x86</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index bcd19b5..25d172f
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.linux.x86;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=linux) (osgi.arch=x86))
 Bundle-Localization: launcher.motif.linux.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/build.properties
deleted file mode 100644
index 7879894..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-bin.includes = META-INF/,\
-               eclipse_*.so,\
-               launcher.motif.linux.x86.properties,\
-               about.html
-               
-customBuildCallbacks=customBuildCallbacks.xml
-generateSourceBundle=false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/launcher.motif.linux.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/launcher.motif.linux.x86.properties
deleted file mode 100644
index b82bb9c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/launcher.motif.linux.x86.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Equinox Launcher Motif Linux X86 Fragment
-providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/.project b/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/.project
deleted file mode 100644
index 0d55c5b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.launcher.motif.solaris.sparc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
index 705be99..a9560bc 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Sparc Fragment
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.solaris.sparc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=solaris) (osgi.arch=sparc))
 Bundle-Localization: launcher.motif.solaris.sparc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/build.properties
deleted file mode 100644
index 1848bce..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-bin.includes = META-INF/,\
-               eclipse_*.so,\
-               launcher.motif.solaris.sparc.properties,\
-               about.html
-               
-customBuildCallbacks=customBuildCallbacks.xml
-generateSourceBundle=false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/launcher.motif.solaris.sparc.properties b/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/launcher.motif.solaris.sparc.properties
deleted file mode 100644
index dd11a28..0000000
--- a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/launcher.motif.solaris.sparc.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Equinox Launcher Motif Solaris Sparc Fragment
-providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
index bf49462..240083b 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.ia64;singleton:=true
-Bundle-Version: 1.2.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.2.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=ia64))
 Bundle-Localization: launcher.win32.win32.ia64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
index ba4014b..81d05d6 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.x86; singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))
 Bundle-Localization: launcher.win32.win32.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/build.properties
index 199f7ee..c00bedb 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.dll,\
                launcher.win32.win32.x86.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties
index c5ca613..b58bc5c 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
index 1f8f59e..f9c0708 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.x86_64;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86_64))
 Bundle-Localization: launcher.win32.win32.x86_64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties
index f64240c..340c186 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.dll,\
                launcher.win32.win32.x86_64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties
index 4940a45..6bb1696 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
index 62809da..9135757 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.wpf.win32.x86; singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=wpf) (osgi.os=win32) (osgi.arch=x86))
 Bundle-Localization: launcher.wpf.win32.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/META-INF/MANIFEST.MF
index 2b676ce..0e97e38 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.launcher;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.2.0.qualifier
 Main-Class: org.eclipse.equinox.launcher.Main
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/build.properties
index c7e3014..24623af 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
index 57288ac..e8f7b5e 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.s390;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.100.qualifier
 Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390))
 Bundle-Localization: launcher.gtk.linux.s390
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties
index f3c0662..2a5549d 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.s390.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties
index 3782298..92b1db4 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390/launcher.gtk.linux.s390.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
index 28fa3d0..8dd8c8a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.s390x;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.100.qualifier
 Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=s390x))
 Bundle-Localization: launcher.gtk.linux.s390x
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties
index 2213963..d712268 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.s390x.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties
index 810b0a3..fcb4371 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x/launcher.gtk.linux.s390x.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
index f988fc0..8851515 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.solaris.x86;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=x86))
 Bundle-Localization: launcher.gtk.solaris.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties
index 0d65502..05ac485 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.solaris.x86.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties
index 936bdec..d5d3b33 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86/launcher.gtk.solaris.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
index 069a235..e8fac1a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.carbon.macosx;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=carbon) (osgi.os=macosx) (|(osgi.arch=x86)(osgi.arch=ppc)) )
 Bundle-Localization: launcher.carbon.macosx
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/build.properties
index d6d2e53..3517b49 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.carbon.macosx.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties
index 8b6f73f..f158577 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx/launcher.carbon.macosx.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
index c7df9b3..6ba1260 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx.x86_64;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) )
 Bundle-Localization: launcher.cocoa.macosx.x86_64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties
index f0642e7..d4388e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.cocoa.macosx.x86_64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties
index b49be95..eea3f37 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64/launcher.cocoa.macosx.x86_64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
index a284c15..67d1f9b 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.cocoa.macosx;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (|(osgi.arch=x86)(osgi.arch=ppc)) )
 Bundle-Localization: launcher.cocoa.macosx
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/build.properties
index d0fa255..43ad0fd 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.cocoa.macosx.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties
index b49be95..eea3f37 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx/launcher.cocoa.macosx.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
+# Copyright (c) 2008, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/.project b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/.project
new file mode 100644
index 0000000..699e953
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.launcher.gtk.aix.ppc</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..bd14c50
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Tue Oct 19 13:23:50 EDT 2010
+eclipse.preferences.version=1
+resolve.requirebundle=false
+pluginProject.extensions=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a2c00a3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.aix.ppc
+Bundle-Version: 1.1.0.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
+Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=aix) (osgi.arch=ppc))
+Bundle-Localization: launcher.gtk.aix.ppc
+Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/about.html b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/about.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/about.html
rename to eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/build.properties
new file mode 100644
index 0000000..9441f1c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = META-INF/,\
+               eclipse_*.so,\
+               launcher.gtk.aix.ppc.properties,\
+               about.html
+               
+customBuildCallbacks=customBuildCallbacks.xml
+generateSourceBundle=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/customBuildCallbacks.xml
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.linux.x86/customBuildCallbacks.xml
rename to eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/customBuildCallbacks.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/launcher.gtk.aix.ppc.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/launcher.gtk.aix.ppc.properties
new file mode 100644
index 0000000..2dcd7a3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc/launcher.gtk.aix.ppc.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Equinox Launcher GTK AIX PPC Fragment
+providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF
index 9b58379..6a2df16 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.aix.ppc64
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.1.0.qualifier
 Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=aix) (osgi.arch=ppc64))
 Bundle-Localization: launcher.gtk.aix.ppc64
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties
index 7be314c..f3b9256 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.aix.ppc64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.project b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.project
new file mode 100644
index 0000000..5a170fc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.launcher.gtk.hpux.ia64_32</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..db68ec3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Tue Nov 16 14:45:38 EST 2010
+eclipse.preferences.version=1
+resolve.requirebundle=false
+pluginProject.extensions=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6697f25
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.hpux.ia64_32
+Bundle-Version: 1.0.0.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="1.0.0"
+Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=hpux) (osgi.arch=ia64_32))
+Bundle-Localization: launcher.gtk.hpux.ia64_32
+Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/about.html b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/about.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/about.html
rename to eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/build.properties
new file mode 100644
index 0000000..a5820c7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = META-INF/,\
+               eclipse_*.so,\
+               launcher.gtk.hpux.ia64_32.properties,\
+               about.html
+               
+customBuildCallbacks=customBuildCallbacks.xml
+generateSourceBundle=false
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/customBuildCallbacks.xml
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.launcher.motif.solaris.sparc/customBuildCallbacks.xml
rename to eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/customBuildCallbacks.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/launcher.gtk.hpux.ia64_32.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/launcher.gtk.hpux.ia64_32.properties
new file mode 100644
index 0000000..ae7515a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32/launcher.gtk.hpux.ia64_32.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Equinox Launcher GTK HPUX IA64_32 Fragment
+providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
index 90d6f67..984d192 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.ppc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc))
 Bundle-Localization: launcher.gtk.linux.ppc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties
index d44532b..75b6eb9 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.ppc.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties
index 2eb47e4..363bf74 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc/launcher.gtk.linux.ppc.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
index 1df2f3e..915f19c 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.ppc64;singleton:=true
-Bundle-Version: 1.0.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.0.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc64))
 Bundle-Localization: launcher.gtk.linux.ppc64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
index 8356be9..b206422 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.ppc64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
index b0663ec..6240308 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64/launcher.gtk.linux.ppc64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
index 1ce7aa5..aefb9e7 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.x86;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86))
 Bundle-Localization: launcher.gtk.linux.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties
index 768196b..664e8b4 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.x86.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties
index 120c5fb..122990b 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86/launcher.gtk.linux.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
index 364f608..a473576 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.linux.x86_64;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=x86_64))
 Bundle-Localization: launcher.gtk.linux.x86_64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties
index dfd3714..d6e6597 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.linux.x86_64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties
index e95b2fd..9b101ff 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64/launcher.gtk.linux.x86_64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
index c60d378..611d6c6 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.gtk.solaris.sparc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=solaris) (osgi.arch=sparc))
 Bundle-Localization: launcher.gtk.solaris.sparc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties
index b7ee51b..a721a4a 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.gtk.solaris.sparc.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties
index 3bfebde..17f4d5d 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc/launcher.gtk.solaris.sparc.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
index 497120a..3b7c640 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.aix.ppc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=aix) (osgi.arch=ppc))
 Bundle-Localization: launcher.motif.aix.ppc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/build.properties
index e890e22..8c53745 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                libeclipse-motif.so, \
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/launcher.motif.aix.ppc.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/launcher.motif.aix.ppc.properties
index 95c4a79..8ed6011 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/launcher.motif.aix.ppc.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc/launcher.motif.aix.ppc.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
index 5fda8d5..3f0eddd 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.hpux.ia64_32;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Bundle-Vendor: %providerName
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=hpux) (osgi.arch=ia64_32) )
 Bundle-Localization: launcher.motif.hpux.ia64_32
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/build.properties
index 408b84c..17c084b 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.motif.hpux.ia64_32.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/launcher.motif.hpux.ia64_32.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/launcher.motif.hpux.ia64_32.properties
index 4fd387b..708e975 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/launcher.motif.hpux.ia64_32.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32/launcher.motif.hpux.ia64_32.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/.project b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/.project
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index bcd19b5..25d172f
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.linux.x86;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=linux) (osgi.arch=x86))
 Bundle-Localization: launcher.motif.linux.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/about.html b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/build.properties
old mode 100644
new mode 100755
index 7879894..09165f3
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.motif.linux.x86.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/customBuildCallbacks.xml
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/launcher.motif.linux.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/launcher.motif.linux.x86.properties
index b82bb9c..0d455fe 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/launcher.motif.linux.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86/launcher.motif.linux.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
index 705be99..a9560bc 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/META-INF/MANIFEST.MF
@@ -2,8 +2,8 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Sparc Fragment
 Bundle-SymbolicName: org.eclipse.equinox.launcher.motif.solaris.sparc;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=solaris) (osgi.arch=sparc))
 Bundle-Localization: launcher.motif.solaris.sparc
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/build.properties
index 1848bce..19ae5ce 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.so,\
                launcher.motif.solaris.sparc.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/launcher.motif.solaris.sparc.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/launcher.motif.solaris.sparc.properties
index dd11a28..6dbb9ca 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/launcher.motif.solaris.sparc.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc/launcher.motif.solaris.sparc.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
index bf49462..240083b 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.ia64;singleton:=true
-Bundle-Version: 1.2.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.2.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=ia64))
 Bundle-Localization: launcher.win32.win32.ia64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/build.properties
index b489f85..b6e846f 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.dll,\
                launcher.win32.win32.ia64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/launcher.win32.win32.ia64.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/launcher.win32.win32.ia64.properties
index 56553cf..1d21387 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/launcher.win32.win32.ia64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64/launcher.win32.win32.ia64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
index ba4014b..81d05d6 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.x86; singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))
 Bundle-Localization: launcher.win32.win32.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/build.properties
index 199f7ee..c00bedb 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.dll,\
                launcher.win32.win32.x86.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties
index c5ca613..b58bc5c 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86/launcher.win32.win32.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
index 1f8f59e..f9c0708 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.win32.win32.x86_64;singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86_64))
 Bundle-Localization: launcher.win32.win32.x86_64
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties
index f64240c..340c186 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.dll,\
                launcher.win32.win32.x86_64.properties,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties
index 4940a45..6bb1696 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64/launcher.win32.win32.x86_64.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
index 62809da..9135757 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/META-INF/MANIFEST.MF
@@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.launcher.wpf.win32.x86; singleton:=true
-Bundle-Version: 1.1.2.qualifier
-Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.2.0)"
+Bundle-Version: 1.1.100.qualifier
+Fragment-Host: org.eclipse.equinox.launcher;bundle-version="[1.0.0,1.3.0)"
 Eclipse-PlatformFilter: (& (osgi.ws=wpf) (osgi.os=win32) (osgi.arch=x86))
 Bundle-Localization: launcher.wpf.win32.x86
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/build.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/build.properties
index adb8345..1156ad9 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 bin.includes = META-INF/,\
                eclipse_*.dll,\
                com_*.dll,\
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/launcher.wpf.win32.x86.properties b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/launcher.wpf.win32.x86.properties
index 253aace..3b83095 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/launcher.wpf.win32.x86.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86/launcher.wpf.win32.x86.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/launcher.properties b/eclipse/plugins/org.eclipse.equinox.launcher/launcher.properties
index 6493c8f..d6ef7bb0 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/launcher.properties
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/launcher.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java b/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
index c98f7ef..58482bb 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java b/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
index 82a5b3f..6471de9 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
@@ -139,6 +139,8 @@ public class Main {
 	private static final String NAME = "-name"; //$NON-NLS-1$
 	private static final String LAUNCHER = "-launcher"; //$NON-NLS-1$
 	private static final String LIBRARY = "--launcher.library"; //$NON-NLS-1$
+	private static final String APPEND_VMARGS = "--launcher.appendVmargs"; //$NON-NLS-1$
+	private static final String OVERRIDE_VMARGS = "--launcher.overrideVmargs"; //$NON-NLS-1$
 	private static final String NL = "-nl"; //$NON-NLS-1$
 	private static final String ENDSPLASH = "-endsplash"; //$NON-NLS-1$
 	private static final String SPLASH_IMAGE = "splash.bmp"; //$NON-NLS-1$
@@ -1491,6 +1493,11 @@ public class Main {
 				found = true;
 			}
 
+			//just consume the --launcher.overrideVmargs and --launcher.appendVmargs
+			if (args[i].equalsIgnoreCase(APPEND_VMARGS) || args[i].equalsIgnoreCase(OVERRIDE_VMARGS)) {
+				found = true;
+			}
+
 			// check if this is initialization pass
 			if (args[i].equalsIgnoreCase(INITIALIZE)) {
 				initialize = true;
diff --git a/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java b/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java
index c4c7440..98e9ad1 100644
--- a/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java
+++ b/eclipse/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/.settings/.api_filters b/eclipse/plugins/org.eclipse.equinox.log/.settings/.api_filters
new file mode 100644
index 0000000..0eb5bad
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.log/.settings/.api_filters
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component id="org.eclipse.equinox.log" version="2">
+<resource path="src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java" type="org.eclipse.equinox.log.internal.ExtendedLogEntryImpl">
+<filter comment="Only called if method is available." id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.equinox.log.internal.ExtendedLogEntryImpl.getId(Thread)"/>
+<message_argument value="Thread"/>
+<message_argument value="getId()"/>
+<message_argument value="J2SE-1.4"/>
+</message_arguments>
+</filter>
+</resource>
+</component>
diff --git a/eclipse/plugins/org.eclipse.equinox.log/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.log/META-INF/MANIFEST.MF
index dfa64ac..216b462 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.log/META-INF/MANIFEST.MF
@@ -2,12 +2,13 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.log
-Bundle-Version: 1.2.100.qualifier
+Bundle-Version: 1.2.200.qualifier
 Bundle-Localization: plugin
-Import-Package: org.osgi.framework;version="1.3.0",
- org.osgi.service.event;version="1.0.0",
- org.osgi.service.log;version="1.3.0",
- org.osgi.util.tracker;version="1.3.0"
+Import-Package: org.osgi.framework;version="[1.3,2.0)",
+ org.osgi.service.event;version="[1.0,2.0)",
+ org.osgi.service.log;version="[1.3,1.4)",
+ org.osgi.util.tracker;version="[1.3,2.0)",
+ org.eclipse.equinox.log; version="[1.0,1.1)"
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.equinox.log.internal.Activator
 Export-Package: org.eclipse.equinox.log;version="1.0.0",
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogPermissionCollection.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogPermissionCollection.java
index df45d54..b738771 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogPermissionCollection.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogPermissionCollection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others
+ * Copyright (c) 2009, 2010 IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/SynchronousLogListener.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/SynchronousLogListener.java
index 807a1d5..339fa1f 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/SynchronousLogListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/SynchronousLogListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others
+ * Copyright (c) 2008, 2009 IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/Activator.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/Activator.java
index afe35f1..afc88c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
@@ -26,6 +26,13 @@ public class Activator implements BundleActivator, BundleListener, FrameworkList
 	private ExtendedLogServiceFactory logServiceFactory;
 
 	public void start(BundleContext context) throws Exception {
+		ServiceReference[] logRef = context.getServiceReferences(ExtendedLogService.class.getName(), null);
+		if (logRef != null)
+			for (int i = 0; i < logRef.length; i++) {
+				Bundle provider = logRef[i].getBundle();
+				if (provider != null && provider.getBundleId() == 0)
+					return;
+			}
 		logReaderServiceFactory = new ExtendedLogReaderServiceFactory();
 		context.addBundleListener(this);
 		context.addServiceListener(this);
@@ -42,6 +49,8 @@ public class Activator implements BundleActivator, BundleListener, FrameworkList
 	}
 
 	public void stop(BundleContext context) throws Exception {
+		if (logServiceRegistration == null)
+			return;
 		logServiceRegistration.unregister();
 		logServiceRegistration = null;
 		logReaderServiceRegistration.unregister();
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/BasicReadWriteLock.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/BasicReadWriteLock.java
index 9e1ac0c..cbffaf7 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/BasicReadWriteLock.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/BasicReadWriteLock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others
+ * Copyright (c) 2008, 2009 IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java
index 674754e..56c1394 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceFactory.java
index bfe46e7..a34f3b2 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceImpl.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceImpl.java
index ad7f953..fc1c526 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceFactory.java
index 60b307b..4da1dfd 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceImpl.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceImpl.java
index 33e064b..6a9dd75 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/ExtendedLogServiceImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/LoggerImpl.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/LoggerImpl.java
index ea4196f..b5d52f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/LoggerImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/LoggerImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/SerializedTaskQueue.java b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/SerializedTaskQueue.java
index 9ef5d40..6dbe6fe 100644
--- a/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/SerializedTaskQueue.java
+++ b/eclipse/plugins/org.eclipse.equinox.log/src/org/eclipse/equinox/log/internal/SerializedTaskQueue.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others
+ * Copyright (c) 2006, 2009 Cognos Incorporated, IBM Corporation and others
  * All rights reserved. This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/.classpath b/eclipse/plugins/org.eclipse.equinox.metatype/.classpath
index 2fbb7a2..64c5e31 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/.classpath
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/.settings/.api_filters b/eclipse/plugins/org.eclipse.equinox.metatype/.settings/.api_filters
new file mode 100644
index 0000000..0da0b7a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/.settings/.api_filters
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.equinox.metatype" version="2">
+    <resource path="src/org/eclipse/equinox/metatype/LogTracker.java" type="org.eclipse.equinox.metatype.LogTracker">
+        <filter id="574619656">
+            <message_arguments>
+                <message_argument value="LogService"/>
+                <message_argument value="LogTracker"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs
index 14b2048..530b30d 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs
@@ -1,329 +1,329 @@
-#Fri Jan 23 14:41:48 CST 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=error
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+#Fri Oct 08 17:00:03 EDT 2010
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=jsr14
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
 org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
 org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
 org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
 org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.incompleteClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
 org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
 org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/.settings/org.eclipse.pde.api.tools.prefs b/eclipse/plugins/org.eclipse.equinox.metatype/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..782b112
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,94 @@
+#Mon Oct 18 20:11:27 EDT 2010
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+invalid_since_tag_version=Error
+LEAK_METHOD_RETURN_TYPE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+ILLEGAL_INSTANTIATE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ILLEGAL_IMPLEMENT=Warning
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+LEAK_EXTEND=Warning
+INVALID_JAVADOC_TAG=Ignore
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+ILLEGAL_REFERENCE=Warning
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+LEAK_METHOD_PARAM=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+incompatible_api_component_version=Error
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ILLEGAL_OVERRIDE=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+malformed_since_tag=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+automatically_removed_unused_problem_filters=false
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+report_api_breakage_when_major_version_incremented=Disabled
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+eclipse.preferences.version=1
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+missing_since_tag=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+UNUSED_PROBLEM_FILTERS=Warning
+ILLEGAL_EXTEND=Warning
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+LEAK_FIELD_DECL=Warning
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+LEAK_IMPLEMENT=Warning
+report_resolution_errors_api_component=Warning
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
index 5eb3e47..448fdf8 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
@@ -1,21 +1,20 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.1.0.qualifier
 Bundle-SymbolicName: org.eclipse.equinox.metatype
 Bundle-Activator: org.eclipse.equinox.metatype.Activator
-Import-Package: org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.cm,
- org.osgi.service.metatype,
- org.osgi.service.packageadmin,
- org.osgi.util.tracker,
- javax.xml.parsers,
+Import-Package: javax.xml.parsers,
+ org.eclipse.osgi.util;version="[1.1,2.0)",
+ org.osgi.framework;version="[1.6,2.0)",
+ org.osgi.framework.wiring;version="[1.0,2.0)",
+ org.osgi.service.cm;version="[1.2.1,2.0)",
+ org.osgi.service.log;version="[1.3,2.0)",
+ org.osgi.service.metatype;version="[1.2,1.3)",
+ org.osgi.util.tracker;version="[1.5,2.0)",
  org.xml.sax,
  org.xml.sax.helpers
 Export-Package: org.eclipse.equinox.metatype;x-internal:=true
 Bundle-Vendor: %bundleVendor
-Bundle-Copyright: %bundleCopyright
 Bundle-Localization: plugin
-Export-Service: org.osgi.service.metatype.MetaTypeService
-Bundle-RequiredExecutionEnvironment: J2SE-1.4,
- OSGi/Minimum-1.1
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ OSGi/Minimum-1.2
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/build.properties b/eclipse/plugins/org.eclipse.equinox.metatype/build.properties
index 8732619..24cc552 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005 IBM Corporation.
+# Copyright (c) 2005, 2010 IBM Corporation.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -15,3 +15,8 @@ bin.includes = META-INF/,\
 src.includes = about.html
 source.. = src/
 output.. = bin/
+
+jre.compilation.profile = J2SE-1.5
+
+javacSource=1.5
+javacTarget=jsr14
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/plugin.properties b/eclipse/plugins/org.eclipse.equinox.metatype/plugin.properties
index a6ab5cf..09659fd 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/plugin.properties
@@ -10,4 +10,3 @@
 ###############################################################################
 bundleVendor = Eclipse.org - Equinox
 bundleName = Meta Type
-bundleCopyright = Copyright (c) IBM Corp. 2005
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java
index 2dab4e0..813289d 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,148 +10,179 @@
  *******************************************************************************/
 package org.eclipse.equinox.metatype;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
+import java.util.Dictionary;
 import java.util.Hashtable;
 import javax.xml.parsers.SAXParserFactory;
 import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.service.cm.ManagedService;
+import org.osgi.service.log.LogService;
+import org.osgi.service.metatype.MetaTypeProvider;
+import org.osgi.service.metatype.MetaTypeService;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 /**
  * MetaType Activator
  */
-public class Activator implements BundleActivator, ServiceTrackerCustomizer {
-
-	protected final String mtsClazz = "org.osgi.service.metatype.MetaTypeService"; //$NON-NLS-1$
-	protected final String mtsPid = "org.osgi.impl.service.metatype.MetaTypeService"; //$NON-NLS-1$
-	protected final static String saxFactoryClazz = "javax.xml.parsers.SAXParserFactory"; //$NON-NLS-1$
-
-	private ServiceTracker _parserTracker;
-	BundleContext _context;
-	ServiceRegistration _mtsReg;
-	MetaTypeServiceImpl _mts = null;
-
-	/**
-	 * The current SaxParserFactory being used by the WebContainer
-	 */
-	private SAXParserFactory _currentParserFactory = null;
-
-	/**
-	 * The lock used when modifying the currentParserFactory
-	 */
-	private Object lock = new Object();
-
+public class Activator implements BundleActivator {
 	/*
-	 * (non-Javadoc)
+	 * The following filter guarantees only services meeting the following
+	 * criteria will be tracked.
+	 * 
+	 * (1) A ManagedService or ManagedServiceFactory registered with a
+	 * SERVICE_PID property. May also be registered as a MetaTypeProvider.
+	 * (2) A MetaTypeProvider registered with a METATYPE_PID or
+	 * METATYPE_FACTORY_PID property.
 	 * 
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 * Note that it's still necessary to inspect a ManagedService or
+	 * ManagedServiceFactory to ensure it also implements MetaTypeProvider.
 	 */
-	public void start(BundleContext context) throws Exception {
-
-		this._context = context;
-		_parserTracker = new ServiceTracker(context, saxFactoryClazz, this);
-		_parserTracker.open();
-		ServiceReference ref = context.getServiceReference(PackageAdmin.class.getName());
-		FragmentUtils.packageAdmin = ref == null ? null : (PackageAdmin) context.getService(ref);
-		Logging.debug("====== Meta Type Service starting ! ====="); //$NON-NLS-1$
+	private static final String FILTER = "(|(&(" + Constants.OBJECTCLASS + '=' + ManagedService.class.getName() + "*)(" + Constants.SERVICE_PID + "=*))(&(" + Constants.OBJECTCLASS + '=' + MetaTypeProvider.class.getName() + ")(|(" + MetaTypeProvider.METATYPE_PID + "=*)(" + MetaTypeProvider.METATYPE_FACTORY_PID + "=*))))"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+	private static final String SERVICE_PID = "org.osgi.impl.service.metatype.MetaTypeService"; //$NON-NLS-1$
+
+	private LogTracker logServiceTracker;
+	// Could be ManagedService, ManagedServiceFactory, or MetaTypeProvider.
+	// The tracker tracks all services regardless of bundle. Services are
+	// filtered by bundle later in the MetaTypeProviderTracker class. It may 
+	// therefore be shared among multiple instances of that class.
+	private ServiceTracker<Object, Object> metaTypeProviderTracker;
+	private ServiceTracker<SAXParserFactory, SAXParserFactory> saxParserFactoryTracker;
+
+	public void start(BundleContext context) throws InvalidSyntaxException {
+		LogTracker lsTracker;
+		ServiceTracker<Object, Object> mtpTracker;
+		ServiceTracker<SAXParserFactory, SAXParserFactory> spfTracker;
+		Filter filter = context.createFilter(FILTER);
+		synchronized (this) {
+			lsTracker = logServiceTracker = new LogTracker(context, System.out);
+			mtpTracker = metaTypeProviderTracker = new ServiceTracker<Object, Object>(context, filter, null);
+			spfTracker = saxParserFactoryTracker = new ServiceTracker<SAXParserFactory, SAXParserFactory>(context, SAXParserFactory.class, new SAXParserFactoryTrackerCustomizer(context, lsTracker, mtpTracker));
+		}
+		// Do this first to make logging available as early as possible.
+		lsTracker.open();
+		lsTracker.log(LogService.LOG_DEBUG, "====== Meta Type Service starting ! ====="); //$NON-NLS-1$
+		// Do this next to make MetaTypeProviders available as early as possible.
+		mtpTracker.open();
+		// Do this last because it may result in the MetaTypeService being registered.
+		spfTracker.open();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
+	public void stop(BundleContext context) {
+		ServiceTracker<SAXParserFactory, SAXParserFactory> spfTracker;
+		ServiceTracker<Object, Object> mtpTracker;
+		LogTracker lsTracker;
+		synchronized (this) {
+			spfTracker = saxParserFactoryTracker;
+			// Set this to null so the SAXParserFactoryTrackerCustomizer knows
+			// not to register a new MetaTypeService when removedService() is
+			// called while the tracker is closing.
+			saxParserFactoryTracker = null;
+			mtpTracker = metaTypeProviderTracker;
+			lsTracker = logServiceTracker;
+		}
+		lsTracker.log(LogService.LOG_DEBUG, "====== Meta Type Service stopping ! ====="); //$NON-NLS-1$
+		spfTracker.close();
+		mtpTracker.close();
+		// Do this last to leave logging available as long as possible.
+		lsTracker.close();
+	}
 
-		Logging.debug("====== Meta Type Service stoping ! ====="); //$NON-NLS-1$
-		_parserTracker.close();
-		_parserTracker = null;
-		FragmentUtils.packageAdmin = null;
-		context = null;
+	synchronized ServiceTracker<SAXParserFactory, SAXParserFactory> getSAXParserFactoryTracker() {
+		return saxParserFactoryTracker;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#addingService(org.osgi.framework.ServiceReference)
-	 */
-	public Object addingService(ServiceReference ref) {
+	private class SAXParserFactoryTrackerCustomizer implements ServiceTrackerCustomizer<SAXParserFactory, SAXParserFactory> {
+		private final BundleContext bundleCtx;
+		private final LogService logService;
+		private final ServiceTracker<Object, Object> mtpTracker;
+
+		private MetaTypeServiceImpl metaTypeService;
+		private ServiceRegistration<MetaTypeService> metaTypeServiceRegistration;
+		private SAXParserFactory saxParserFactory;
 
-		SAXParserFactory parserFactory = (SAXParserFactory) _context.getService(ref);
-		synchronized (lock) {
-			if (_mts == null) {
-				// Save this parserFactory as the currently used parserFactory
-				_currentParserFactory = parserFactory;
+		public SAXParserFactoryTrackerCustomizer(BundleContext bundleContext, LogService logService, ServiceTracker<Object, Object> metaTypeProviderTracker) {
+			this.bundleCtx = bundleContext;
+			this.logService = logService;
+			this.mtpTracker = metaTypeProviderTracker;
+		}
+
+		public SAXParserFactory addingService(ServiceReference<SAXParserFactory> ref) {
+			SAXParserFactory parserFactory = bundleCtx.getService(ref);
+			if (parserFactory == null)
+				return null;
+			boolean register = false;
+			synchronized (this) {
+				if (saxParserFactory == null) {
+					// Save this parserFactory as the currently used parserFactory
+					saxParserFactory = parserFactory;
+					register = true;
+				}
+			}
+			if (register) {
 				registerMetaTypeService();
 			}
+			return parserFactory;
 		}
-		return parserFactory;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#modifiedService(org.osgi.framework.ServiceReference,
-	 *      java.lang.Object)
-	 */
-	public void modifiedService(ServiceReference ref, Object object) {
-		// do nothing
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#removedService(org.osgi.framework.ServiceReference,
-	 *      java.lang.Object)
-	 */
-	public void removedService(ServiceReference ref, Object object) {
 
-		if (object == _currentParserFactory) {
-			// This means that this SAXParserFactory was used to start the
-			// MetaType Service.
-			synchronized (lock) {
-				_currentParserFactory = null;
+		public void modifiedService(ServiceReference<SAXParserFactory> ref, SAXParserFactory object) {
+			// noop
+		}
 
-				if (_mtsReg != null) {
-					_mtsReg.unregister();
-					_mtsReg = null;
-					_context.removeBundleListener(_mts);
-					_mts = null;
+		public void removedService(ServiceReference<SAXParserFactory> ref, SAXParserFactory object) {
+			ServiceRegistration<MetaTypeService> registration = null;
+			MetaTypeServiceImpl service = null;
+			synchronized (this) {
+				if (object == saxParserFactory) {
+					// This means that this SAXParserFactory was used to start the
+					// MetaTypeService. Set to null to indicate a new MetaTypeService
+					// needs to be registered.
+					saxParserFactory = null;
+					registration = metaTypeServiceRegistration;
+					service = metaTypeService;
 				}
+			}
+			if (registration != null) {
+				registration.unregister();
+				bundleCtx.removeBundleListener(service);
 				// See if another factory is available
-				Object[] parsers = _parserTracker.getServices();
-				if (parsers != null && parsers.length > 0) {
-					_currentParserFactory = (SAXParserFactory) parsers[0];
-					// We have another parser so lets restart the MetaType
-					// Service
-					registerMetaTypeService();
+				ServiceTracker<SAXParserFactory, SAXParserFactory> tracker = getSAXParserFactoryTracker();
+				// If the SAXParserFactory tracker is null, the bundle is stopping, and we
+				// shouldn't register a new MetaTypeService to avoid unnecessary churn.
+				if (tracker != null) {
+					SAXParserFactory factory = tracker.getService();
+					if (factory != null) {
+						// We have another parser so lets restart the MetaTypeService
+						boolean register = false;
+						synchronized (this) {
+							if (saxParserFactory == null) {
+								saxParserFactory = factory;
+								register = true;
+							}
+						}
+						if (register) {
+							registerMetaTypeService();
+						}
+					}
 				}
 			}
+			bundleCtx.ungetService(ref);
 		}
-		_context.ungetService(ref);
-	}
-
-	/**
-	 * Internal method in MetaTypeActivator for implementing
-	 * ServiceTrackerCustomizer.
-	 */
-	private void registerMetaTypeService() {
 
-		final Hashtable properties = new Hashtable(7);
-
-		properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-		properties.put(Constants.SERVICE_DESCRIPTION, MetaTypeMsg.SERVICE_DESCRIPTION);
-		properties.put(Constants.SERVICE_PID, mtsPid);
-
-		_mts = new MetaTypeServiceImpl(_context, _currentParserFactory);
-		AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				_context.addBundleListener(_mts);
-				_mtsReg = _context.registerService(mtsClazz, _mts, properties);
-				return null;
+		private void registerMetaTypeService() {
+			Dictionary<String, Object> properties = new Hashtable<String, Object>(7);
+			properties = new Hashtable<String, Object>(7);
+			properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
+			properties.put(Constants.SERVICE_DESCRIPTION, MetaTypeMsg.SERVICE_DESCRIPTION);
+			properties.put(Constants.SERVICE_PID, SERVICE_PID);
+			MetaTypeServiceImpl service;
+			synchronized (this) {
+				service = metaTypeService = new MetaTypeServiceImpl(saxParserFactory, logService, mtpTracker);
 			}
-		});
+			bundleCtx.addBundleListener(service);
+			ServiceRegistration<MetaTypeService> registration = bundleCtx.registerService(MetaTypeService.class, service, properties);
+			synchronized (this) {
+				metaTypeServiceRegistration = registration;
+			}
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java
index 5174fdd..a9d8bab 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,10 @@
  *******************************************************************************/
 package org.eclipse.equinox.metatype;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
 import java.util.Enumeration;
 import java.util.Vector;
 import org.eclipse.osgi.util.NLS;
+import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.AttributeDefinition;
 
 /**
@@ -32,14 +31,15 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Attr
 	boolean _isRequired = true;
 
 	String[] _defaults = null;
-	Vector _dfts_vector = new Vector(7);
-	Vector _values = new Vector(7);
-	Vector _labels = new Vector(7);
+	Vector<String> _values = new Vector<String>(7);
+	Vector<String> _labels = new Vector<String>(7);
+
+	private final LogService logger;
 
 	/**
 	 * Constructor of class AttributeDefinitionImpl.
 	 */
-	public AttributeDefinitionImpl(String id, String name, String description, int type, int cardinality, Object min, Object max, boolean isRequired, String localization) {
+	public AttributeDefinitionImpl(String id, String name, String description, int type, int cardinality, Object min, Object max, boolean isRequired, String localization, LogService logger) {
 
 		this._id = id;
 		this._name = name;
@@ -50,6 +50,7 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Attr
 		this._maxValue = max;
 		this._isRequired = isRequired;
 		this._localization = localization;
+		this.logger = logger;
 	}
 
 	/*
@@ -57,13 +58,17 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Attr
 	 */
 	public synchronized Object clone() {
 
-		AttributeDefinitionImpl ad = new AttributeDefinitionImpl(_id, _name, _description, _dataType, _cardinality, _minValue, _maxValue, _isRequired, _localization);
+		AttributeDefinitionImpl ad = new AttributeDefinitionImpl(_id, _name, _description, _dataType, _cardinality, _minValue, _maxValue, _isRequired, _localization, logger);
 
 		if (_defaults != null) {
-			ad.setDefaultValue((String[]) _defaults.clone(), false);
+			ad.setDefaultValue(_defaults.clone());
 		}
 		if ((_labels != null) && (_values != null)) {
-			ad.setOption((Vector) _labels.clone(), (Vector) _values.clone(), false);
+			@SuppressWarnings("unchecked")
+			Vector<String> labels = (Vector<String>) _labels.clone();
+			@SuppressWarnings("unchecked")
+			Vector<String> values = (Vector<String>) _values.clone();
+			ad.setOption(labels, values, false);
 		}
 
 		return ad;
@@ -175,10 +180,10 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Attr
 		}
 
 		String[] returnedLabels = new String[_labels.size()];
-		Enumeration labelKeys = _labels.elements();
+		Enumeration<String> labelKeys = _labels.elements();
 		int i = 0;
 		while (labelKeys.hasMoreElements()) {
-			String labelKey = (String) labelKeys.nextElement();
+			String labelKey = labelKeys.nextElement();
 			returnedLabels[i] = getLocalized(labelKey);
 			i++;
 		}
@@ -196,42 +201,30 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Attr
 			return null;
 		}
 
-		String[] returnedValues = new String[_values.size()];
-		Enumeration valueKeys = _values.elements();
-		int i = 0;
-		while (valueKeys.hasMoreElements()) {
-			String valueKey = (String) valueKeys.nextElement();
-			returnedValues[i] = getLocalized(valueKey);
-			i++;
-		}
-		return returnedValues;
+		return _values.toArray(new String[_values.size()]);
 	}
 
 	/**
 	 * Method to set the Option values of AttributeDefinition.
 	 */
-	void setOption(Vector labels, Vector values, boolean needValidation) {
-
+	void setOption(Vector<String> labels, Vector<String> values, boolean needValidation) {
 		if ((labels == null) || (values == null)) {
-			Logging.log(Logging.ERROR, this, "setOption(Vector, Vector, boolean)", //$NON-NLS-1$
-					MetaTypeMsg.NULL_OPTIONS);
+			logger.log(LogService.LOG_ERROR, "AttributeDefinitionImpl.setOption(Vector, Vector, boolean) " + MetaTypeMsg.NULL_OPTIONS); //$NON-NLS-1$
 			return;
 		}
-
 		if (labels.size() != values.size()) {
-			Logging.log(Logging.ERROR, this, "setOption(Vector, Vector, boolean)", //$NON-NLS-1$
-					MetaTypeMsg.INCONSISTENT_OPTIONS);
+			logger.log(LogService.LOG_ERROR, "AttributeDefinitionImpl.setOption(Vector, Vector, boolean) " + MetaTypeMsg.INCONSISTENT_OPTIONS); //$NON-NLS-1$
 			return;
 		}
-
 		_labels = labels;
 		_values = values;
-
 		if (needValidation) {
-			for (int index = 0; index < _labels.size(); index++) {
-				String reason = validate((String) _values.get(index));
+			for (int index = 0; index < _values.size(); index++) {
+				ValueTokenizer vt = new ValueTokenizer(_values.get(index), logger);
+				_values.set(index, vt.getValuesAsString());
+				String reason = vt.validate(this);
 				if ((reason != null) && reason.length() > 0) {
-					Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.INVALID_OPTIONS, _values.get(index), reason));
+					logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.INVALID_OPTIONS, _values.get(index), reason));
 					_labels.remove(index);
 					_values.remove(index);
 					index--; // Because this one has been removed.
@@ -254,19 +247,21 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Attr
 	 * The given parameter is a comma delimited list needed to be parsed.
 	 */
 	void setDefaultValue(String defaults_str, boolean needValidation) {
-
-		ValueTokenizer vt = new ValueTokenizer(defaults_str);
-		setDefaultValue(vt.getValuesAsArray(), needValidation);
+		ValueTokenizer vt = new ValueTokenizer(defaults_str, logger);
+		String reason = vt.validate(this);
+		if ((reason != null) && reason.length() > 0) {
+			logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.INVALID_DEFAULTS, vt.getValuesAsString(), reason));
+			return;
+		}
+		setDefaultValue(vt.getValuesAsArray());
 	}
 
 	/**
 	 * Method to set the default value of AttributeDefinition.
 	 * The given parameter is a String array of multi values.
 	 */
-	void setDefaultValue(String[] defaults, boolean needValidation) {
-
+	void setDefaultValue(String[] defaults) {
 		_defaults = defaults;
-		// Do we also need to make sure if defaults are validated?
 	}
 
 	/**
@@ -285,202 +280,19 @@ public class AttributeDefinitionImpl extends LocalizationElement implements Attr
 
 	/*
 	 * (non-Javadoc)
+	 * In order to be valid, a value must pass all of the following tests.
+	 * (1) The value must not be null.
+	 * (2) The value must be convertible into the attribute definition's type.
+	 * (3) The following relation must hold: min <= value <= max, if either min or max was specified.
+	 * (4) If options were specified, the value must be equal to one of them.
+	 * 
+	 * Note this method will never return null to indicate there's no validation
+	 * present. The type compatibility check can always be performed.
 	 * 
 	 * @see org.osgi.service.metatype.AttributeDefinition#validate(java.lang.String)
 	 */
 	public String validate(String value) {
-
-		if (value == null) {
-			return MetaTypeMsg.NULL_IS_INVALID;
-		}
-		if ((_minValue == null) && (_maxValue == null)) {
-			if (_dataType != STRING) {
-				// No validation present
-				return null;
-			}
-			if (_values.size() < 1)
-				// No validation present
-				return null;
-		}
-
-		// Addtional validation for STRING.
-		if (_dataType == STRING && _values.size() > 0 && !_values.contains(value)) {
-			return NLS.bind(MetaTypeMsg.VALUE_OUT_OF_OPTION, value);
-		}
-
-		try {
-			if (_cardinality != 0) {
-				ValueTokenizer vt = new ValueTokenizer(value);
-				Vector value_vector = vt.getValuesAsVector();
-
-				if (value_vector.size() > Math.abs(_cardinality)) {
-					return NLS.bind(MetaTypeMsg.TOO_MANY_VALUES, value, new Integer(Math.abs(_cardinality)));
-				}
-				for (int i = 0; i < value_vector.size(); i++) {
-					String return_msg = validateRange((String) value_vector.get(i));
-					if (!"".equals(return_msg)) { //$NON-NLS-1$
-						// Returned String states why the value is invalid.
-						return return_msg;
-					}
-				}
-				// No problems detected
-				return ""; //$NON-NLS-1$
-			}
-			// Only when cardinality is '0', it comes here.
-			String return_msg = validateRange(value);
-			return return_msg;
-		} catch (Throwable t) {
-			return NLS.bind(MetaTypeMsg.EXCEPTION_MESSAGE, t.getClass().getName(), t.getMessage());
-		}
-	}
-
-	/**
-	 * Internal Method - to validate data in range.
-	 */
-	private String validateRange(String value) {
-
-		boolean rangeError = false;
-
-		switch (_dataType) {
-			case STRING :
-				if ((_minValue != null) && (_maxValue != null)) {
-					if (value.length() > ((Integer) _maxValue).intValue() || value.length() < ((Integer) _minValue).intValue()) {
-						rangeError = true;
-					}
-				}
-				break;
-			case LONG :
-				Long longVal = new Long(value);
-				if (_minValue != null && longVal.compareTo((Long) _minValue) < 0) {
-					rangeError = true;
-				} else if (_maxValue != null && longVal.compareTo((Long) _maxValue) > 0) {
-					rangeError = true;
-				}
-				break;
-			case INTEGER :
-				Integer intVal = new Integer(value);
-				if (_minValue != null && intVal.compareTo((Integer) _minValue) < 0) {
-					rangeError = true;
-				} else if (_maxValue != null && intVal.compareTo((Integer) _maxValue) > 0) {
-					rangeError = true;
-				}
-				break;
-			case SHORT :
-				Short shortVal = new Short(value);
-				if (_minValue != null && shortVal.compareTo((Short) _minValue) < 0) {
-					rangeError = true;
-				} else if (_maxValue != null && shortVal.compareTo((Short) _maxValue) > 0) {
-					rangeError = true;
-				}
-				break;
-			case CHARACTER :
-				Character charVal = new Character(value.charAt(0));
-				if (_minValue != null && charVal.compareTo((Character) _minValue) < 0) {
-					rangeError = true;
-				} else if (_maxValue != null && charVal.compareTo((Character) _maxValue) > 0) {
-					rangeError = true;
-				}
-				break;
-			case BYTE :
-				Byte byteVal = new Byte(value);
-				if (_minValue != null && byteVal.compareTo((Byte) _minValue) < 0) {
-					rangeError = true;
-				} else if (_maxValue != null && byteVal.compareTo((Byte) _maxValue) > 0) {
-					rangeError = true;
-				}
-				break;
-			case DOUBLE :
-				Double doubleVal = new Double(value);
-				if (_minValue != null && doubleVal.compareTo((Double) _minValue) < 0) {
-					rangeError = true;
-				} else if (_maxValue != null && doubleVal.compareTo((Double) _maxValue) > 0) {
-					rangeError = true;
-				}
-				break;
-			case FLOAT :
-				Float floatVal = new Float(value);
-				if (_minValue != null && floatVal.compareTo((Float) _minValue) < 0) {
-					rangeError = true;
-				} else if (_maxValue != null && floatVal.compareTo((Float) _maxValue) > 0) {
-					rangeError = true;
-				}
-				break;
-			case BIGINTEGER :
-				try {
-					Class bigIntClazz = Class.forName("java.math.BigInteger"); //$NON-NLS-1$
-					Constructor bigIntConstructor = bigIntClazz.getConstructor(new Class[] {String.class});
-					Comparable bigIntObject = (Comparable) bigIntConstructor.newInstance(new Object[] {value});
-					if (_minValue != null && bigIntObject.compareTo(_minValue) < 0) {
-						rangeError = true;
-					} else if (_maxValue != null && bigIntObject.compareTo(_maxValue) > 0) {
-						rangeError = true;
-					}
-				} catch (ClassNotFoundException e) {
-					e.printStackTrace();
-					return null;
-				} catch (SecurityException e) {
-					e.printStackTrace();
-					return null;
-				} catch (NoSuchMethodException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalArgumentException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InstantiationException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalAccessException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InvocationTargetException e) {
-					e.printStackTrace();
-					return null;
-				}
-				break;
-			case BIGDECIMAL :
-				try {
-					Class bigDecimalClazz = Class.forName("java.math.BigDecimal"); //$NON-NLS-1$
-					Constructor bigDecimalConstructor = bigDecimalClazz.getConstructor(new Class[] {String.class});
-					Comparable bigDecimalObject = (Comparable) bigDecimalConstructor.newInstance(new Object[] {value});
-					if (_minValue != null && bigDecimalObject.compareTo(_minValue) < 0) {
-						rangeError = true;
-					} else if (_maxValue != null && bigDecimalObject.compareTo(_maxValue) > 0) {
-						rangeError = true;
-					}
-				} catch (ClassNotFoundException e) {
-					e.printStackTrace();
-					return null;
-				} catch (SecurityException e) {
-					e.printStackTrace();
-					return null;
-				} catch (NoSuchMethodException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalArgumentException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InstantiationException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalAccessException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InvocationTargetException e) {
-					e.printStackTrace();
-					return null;
-				}
-				break;
-			case BOOLEAN :
-				// shouldn't ever get boolean - this is a range validation
-			default :
-				return null;
-		}
-
-		if (rangeError) {
-			return (NLS.bind(MetaTypeMsg.VALUE_OUT_OF_RANGE, value));
-		}
-		// No problems detected
-		return (""); //$NON-NLS-1$
+		ValueTokenizer vt = new ValueTokenizer(value, logger);
+		return vt.validate(this);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java
index 990966e..7e33617 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,13 +11,14 @@
 package org.eclipse.equinox.metatype;
 
 import java.io.*;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.net.URL;
 import java.util.*;
 import javax.xml.parsers.*;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.AttributeDefinition;
 import org.xml.sax.*;
 import org.xml.sax.helpers.DefaultHandler;
@@ -66,6 +67,7 @@ public class DataParser {
 	private static final String CHAR = "Char"; //$NON-NLS-1$
 	private static final String BOOLEAN = "Boolean"; //$NON-NLS-1$
 	private static final String SHORT = "Short"; //$NON-NLS-1$
+	private static final String PASSWORD = "Password"; //$NON-NLS-1$
 
 	protected Bundle _dp_bundle;
 	protected URL _dp_url;
@@ -73,29 +75,32 @@ public class DataParser {
 	protected XMLReader _dp_xmlReader;
 
 	// DesignateHanders in DataParser class
-	Vector _dp_designateHandlers = new Vector(7);
+	Vector<DesignateHandler> _dp_designateHandlers = new Vector<DesignateHandler>(7);
 	// ObjectClassDefinitions in DataParser class w/ corresponding reference keys
-	Hashtable _dp_OCDs = new Hashtable(7);
-	// pid to ObjectClassDefinitions in DataParser class as a Hashtable
-	Hashtable _dp_pid_to_OCDs_ = new Hashtable(7);
+	Hashtable<String, ObjectClassDefinitionImpl> _dp_OCDs = new Hashtable<String, ObjectClassDefinitionImpl>(7);
 	// Localization in DataParser class
 	String _dp_localization;
 
+	// Default visibility to avoid a plethora of synthetic accessor method warnings.
+	final LogService logger;
+	final Collection<Designate> designates = new ArrayList<Designate>(7);
+
 	/*
 	 * Constructor of class DataParser.
 	 */
-	public DataParser(Bundle bundle, URL url, SAXParserFactory parserFactory) {
+	public DataParser(Bundle bundle, URL url, SAXParserFactory parserFactory, LogService logger) {
 
 		this._dp_bundle = bundle;
 		this._dp_url = url;
 		this._dp_parserFactory = parserFactory;
 		parserFactory.setValidating(false);
+		this.logger = logger;
 	}
 
 	/*
 	 * Main method to parse specific MetaData file.
 	 */
-	public Hashtable doParse() {
+	public Collection<Designate> doParse() {
 
 		try {
 			SAXParser saxParser = _dp_parserFactory.newSAXParser();
@@ -104,7 +109,7 @@ public class DataParser {
 			_dp_xmlReader.setErrorHandler(new MyErrorHandler(System.err));
 			InputStream is = _dp_url.openStream();
 			InputSource isource = new InputSource(is);
-			Logging.log(Logging.DEBUG, "Starting to parse " + _dp_url); //$NON-NLS-1$					
+			logger.log(LogService.LOG_DEBUG, "Starting to parse " + _dp_url); //$NON-NLS-1$					
 			_dp_xmlReader.parse(isource);
 		} catch (ParserConfigurationException pce) {
 			pce.printStackTrace();
@@ -116,7 +121,7 @@ public class DataParser {
 			ioe.printStackTrace();
 			return null;
 		}
-		return _dp_pid_to_OCDs_;
+		return designates;
 	}
 
 	/*
@@ -129,6 +134,8 @@ public class DataParser {
 		}
 
 		switch (type) {
+		// PASSWORD should be treated like STRING.
+			case AttributeDefinition.PASSWORD :
 			case AttributeDefinition.STRING :
 				// Both the min and max of STRING are Integers.
 				return new Integer(value);
@@ -147,59 +154,9 @@ public class DataParser {
 			case AttributeDefinition.FLOAT :
 				return new Float(value);
 			case AttributeDefinition.BIGINTEGER :
-				try {
-					Class bigIntClazz = Class.forName("java.math.BigInteger");//$NON-NLS-1$
-					Constructor bigIntConstructor = bigIntClazz.getConstructor(new Class[] {String.class});
-					return bigIntConstructor.newInstance(new Object[] {value});
-				} catch (ClassNotFoundException e) {
-					e.printStackTrace();
-					return null;
-				} catch (SecurityException e) {
-					e.printStackTrace();
-					return null;
-				} catch (NoSuchMethodException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalArgumentException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InstantiationException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalAccessException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InvocationTargetException e) {
-					e.printStackTrace();
-					return null;
-				}
+				return new BigInteger(value);
 			case AttributeDefinition.BIGDECIMAL :
-				try {
-					Class bigDecimalClazz = Class.forName("java.math.BigDecimal");//$NON-NLS-1$
-					Constructor bigDecimalConstructor = bigDecimalClazz.getConstructor(new Class[] {String.class});
-					return bigDecimalConstructor.newInstance(new Object[] {value});
-				} catch (ClassNotFoundException e) {
-					e.printStackTrace();
-					return null;
-				} catch (SecurityException e) {
-					e.printStackTrace();
-					return null;
-				} catch (NoSuchMethodException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalArgumentException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InstantiationException e) {
-					e.printStackTrace();
-					return null;
-				} catch (IllegalAccessException e) {
-					e.printStackTrace();
-					return null;
-				} catch (InvocationTargetException e) {
-					e.printStackTrace();
-					return null;
-				}
+				return new BigDecimal(value);
 			case AttributeDefinition.BOOLEAN :
 				return new Boolean(value);
 			default :
@@ -239,11 +196,11 @@ public class DataParser {
 		 * Called when this element and all elements nested into it have been
 		 * handled.
 		 */
-		protected void finished() throws SAXException {
+		protected void finished() {
 			// do nothing by default
 		}
 
-		public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
+		public void endElement(String namespaceURI, String localName, String qName) {
 
 			finished();
 			// Let parent resume handling SAX events
@@ -260,15 +217,15 @@ public class DataParser {
 			super();
 		}
 
-		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+		public void startElement(String uri, String localName, String qName, Attributes attributes) {
 
-			Logging.log(Logging.TRACE, "Here is AbstractHandler:startElement():" //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is AbstractHandler:startElement():" //$NON-NLS-1$
 					+ qName);
 			String name = getName(localName, qName);
 			if (name.equalsIgnoreCase(METADATA)) {
 				new MetaDataHandler(this).init(name, attributes);
 			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
+				logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
 			}
 		}
 
@@ -286,9 +243,9 @@ public class DataParser {
 			super(handler);
 		}
 
-		public void init(String name, Attributes attributes) throws SAXException {
+		public void init(String name, Attributes attributes) {
 
-			Logging.log(Logging.TRACE, "Here is MetaDataHandler():init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is MetaDataHandler():init()"); //$NON-NLS-1$
 			_dp_localization = attributes.getValue(LOCALIZATION);
 			if (_dp_localization == null) {
 				// Not a problem, because LOCALIZATION is an optional attribute.
@@ -297,9 +254,9 @@ public class DataParser {
 			// OcdHandler and AttributeDefinitionHandler later.
 		}
 
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+		public void startElement(String uri, String localName, String qName, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is MetaDataHandler:startElement():" //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is MetaDataHandler:startElement():" //$NON-NLS-1$
 					+ qName);
 			String name = getName(localName, qName);
 			if (name.equalsIgnoreCase(DESIGNATE)) {
@@ -312,36 +269,29 @@ public class DataParser {
 				OcdHandler ocdHandler = new OcdHandler(this);
 				ocdHandler.init(name, atts, _dp_OCDs);
 			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
+				logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
 			}
 		}
 
-		protected void finished() throws SAXException {
+		protected void finished() {
 
-			Logging.log(Logging.TRACE, "Here is MetaDataHandler():finished()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is MetaDataHandler():finished()"); //$NON-NLS-1$
 			if (_dp_designateHandlers.size() == 0) {
 				// Schema defines at least one DESIGNATE is required.
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "finished()", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ELEMENT, DESIGNATE));
+				logger.log(LogService.LOG_ERROR, "DataParser.finished() " + NLS.bind(MetaTypeMsg.MISSING_ELEMENT, DESIGNATE)); //$NON-NLS-1$
 				return;
 			}
-			Enumeration designateHandlerKeys = _dp_designateHandlers.elements();
+			Enumeration<DesignateHandler> designateHandlerKeys = _dp_designateHandlers.elements();
 			while (designateHandlerKeys.hasMoreElements()) {
-				DesignateHandler designateHandler = (DesignateHandler) designateHandlerKeys.nextElement();
+				DesignateHandler dh = designateHandlerKeys.nextElement();
 
-				ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) _dp_OCDs.get(designateHandler._ocdref);
+				ObjectClassDefinitionImpl ocd = _dp_OCDs.get(dh._ocdref);
 				if (ocd != null) {
-					if (designateHandler._factory_val == null) {
-						ocd.setType(ObjectClassDefinitionImpl.PID);
-						_dp_pid_to_OCDs_.put(designateHandler._pid_val, ocd);
-					} else {
-						ocd.setType(ObjectClassDefinitionImpl.FPID);
-						_dp_pid_to_OCDs_.put(designateHandler._factory_val, ocd);
-					}
+					designates.add(new Designate.Builder(ocd).bundle(dh._bundle_val).factoryPid(dh._factory_val).merge(dh._merge_val).pid(dh._pid_val).optional(dh._optional_val).build());
 				} else {
-					Logging.log(Logging.ERROR, this, "finished()", //$NON-NLS-1$
-							NLS.bind(MetaTypeMsg.OCD_ID_NOT_FOUND, designateHandler._ocdref));
+					logger.log(LogService.LOG_ERROR, "DataParser.finished() " + NLS.bind(MetaTypeMsg.OCD_ID_NOT_FOUND, dh._ocdref)); //$NON-NLS-1$
+
 				}
 			}
 		}
@@ -352,27 +302,26 @@ public class DataParser {
 	 */
 	private class OcdHandler extends AbstractHandler {
 
-		Hashtable _parent_OCDs_hashtable;
+		Hashtable<String, ObjectClassDefinitionImpl> _parent_OCDs_hashtable;
 		// This ID "_refID" is only used for reference by Designate element,
 		// not the PID or FPID of this OCD.
 		String _refID;
 		ObjectClassDefinitionImpl _ocd;
-		Vector _ad_vector = new Vector(7);
+		Vector<AttributeDefinitionImpl> _ad_vector = new Vector<AttributeDefinitionImpl>(7);
 
 		public OcdHandler(ContentHandler handler) {
 			super(handler);
 		}
 
-		public void init(String name, Attributes atts, Hashtable ocds_hashtable) throws SAXException {
+		public void init(String name, Attributes atts, Hashtable<String, ObjectClassDefinitionImpl> ocds_hashtable) {
 
-			Logging.log(Logging.TRACE, "Here is OcdHandler():init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is OcdHandler():init()"); //$NON-NLS-1$
 			_parent_OCDs_hashtable = ocds_hashtable;
 
 			String ocd_name_val = atts.getValue(NAME);
 			if (ocd_name_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes, Hashtable)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, NAME, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes, Hashtable) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, NAME, name)); //$NON-NLS-1$
 				return;
 			}
 
@@ -384,17 +333,16 @@ public class DataParser {
 			_refID = atts.getValue(ID);
 			if (_refID == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes, Hashtable)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, ID, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes, Hashtable) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, ID, name)); //$NON-NLS-1$
 				return;
 			}
 
 			_ocd = new ObjectClassDefinitionImpl(ocd_name_val, ocd_description_val, _refID, _dp_localization);
 		}
 
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+		public void startElement(String uri, String localName, String qName, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is OcdHandler:startElement():" //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is OcdHandler:startElement():" //$NON-NLS-1$
 					+ qName);
 			if (!_isParsedDataValid)
 				return;
@@ -413,27 +361,26 @@ public class DataParser {
 					_ocd.setIcon(iconHandler._icon);
 				}
 			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
+				logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
 			}
 		}
 
-		protected void finished() throws SAXException {
+		protected void finished() {
 
-			Logging.log(Logging.TRACE, "Here is OcdHandler():finished()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is OcdHandler():finished()"); //$NON-NLS-1$
 			if (!_isParsedDataValid)
 				return;
 
 			if (_ad_vector.size() == 0) {
 				// Schema defines at least one AD is required.
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "finished()", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ELEMENT, AD, _refID));
+				logger.log(LogService.LOG_ERROR, "DataParser.finished() " + NLS.bind(MetaTypeMsg.MISSING_ELEMENT, AD, _refID)); //$NON-NLS-1$
 				return;
 			}
 			// OCD gets all parsed ADs.
-			Enumeration adKey = _ad_vector.elements();
+			Enumeration<AttributeDefinitionImpl> adKey = _ad_vector.elements();
 			while (adKey.hasMoreElements()) {
-				AttributeDefinitionImpl ad = (AttributeDefinitionImpl) adKey.nextElement();
+				AttributeDefinitionImpl ad = adKey.nextElement();
 				_ocd.addAttributeDefinition(ad, ad._isRequired);
 			}
 
@@ -452,14 +399,13 @@ public class DataParser {
 			super(handler);
 		}
 
-		public void init(String name, Attributes atts) throws SAXException {
+		public void init(String name, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is IconHandler:init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is IconHandler:init()"); //$NON-NLS-1$
 			String icon_resource_val = atts.getValue(RESOURCE);
 			if (icon_resource_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, RESOURCE, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, RESOURCE, name)); //$NON-NLS-1$
 				return;
 			}
 
@@ -483,17 +429,17 @@ public class DataParser {
 		AttributeDefinitionImpl _ad;
 		int _dataType;
 
-		Vector _parent_ADs_vector;
-		Vector _optionLabel_vector = new Vector(7);
-		Vector _optionValue_vector = new Vector(7);
+		Vector<AttributeDefinitionImpl> _parent_ADs_vector;
+		Vector<String> _optionLabel_vector = new Vector<String>(7);
+		Vector<String> _optionValue_vector = new Vector<String>(7);
 
 		public AttributeDefinitionHandler(ContentHandler handler) {
 			super(handler);
 		}
 
-		public void init(String name, Attributes atts, Vector ad_vector) throws SAXException {
+		public void init(String name, Attributes atts, Vector<AttributeDefinitionImpl> ad_vector) {
 
-			Logging.log(Logging.TRACE, "Here is AttributeDefinitionHandler():init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is AttributeDefinitionHandler():init()"); //$NON-NLS-1$
 			_parent_ADs_vector = ad_vector;
 
 			String ad_name_val = atts.getValue(NAME);
@@ -509,8 +455,7 @@ public class DataParser {
 			String ad_id_val = atts.getValue(ID);
 			if (ad_id_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes, Vector)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, ID, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes, Vector) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, ID, name)); //$NON-NLS-1$
 				return;
 			}
 
@@ -533,10 +478,11 @@ public class DataParser {
 				_dataType = AttributeDefinition.BOOLEAN;
 			} else if (ad_type_val.equalsIgnoreCase(SHORT)) {
 				_dataType = AttributeDefinition.SHORT;
+			} else if (ad_type_val.equalsIgnoreCase(PASSWORD)) {
+				_dataType = AttributeDefinition.PASSWORD;
 			} else {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes, Vector)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, TYPE, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes, Vector) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, TYPE, name)); //$NON-NLS-1$
 				return;
 
 			}
@@ -563,13 +509,6 @@ public class DataParser {
 			String ad_defaults_str = atts.getValue(DEFAULT);
 			if (ad_defaults_str == null) {
 				// Not a problem, because DEFAULT is an optional attribute.
-				if (ad_cardinality_val == 0) {
-					// But when it is not assigned, CARDINALITY cannot be '0'.
-					_isParsedDataValid = false;
-					Logging.log(Logging.ERROR, this, "init(String, Attributes, Vector)", //$NON-NLS-1$
-							MetaTypeMsg.NULL_DEFAULTS);
-					return;
-				}
 			}
 
 			String ad_required_val = atts.getValue(REQUIRED);
@@ -579,20 +518,16 @@ public class DataParser {
 				ad_required_val = Boolean.TRUE.toString();
 			}
 
-			_ad = new AttributeDefinitionImpl(ad_id_val, ad_name_val, ad_description_val, _dataType, ad_cardinality_val, convert(ad_min_val, _dataType), convert(ad_max_val, _dataType), Boolean.valueOf(ad_required_val).booleanValue(), _dp_localization);
+			_ad = new AttributeDefinitionImpl(ad_id_val, ad_name_val, ad_description_val, _dataType, ad_cardinality_val, convert(ad_min_val, _dataType), convert(ad_max_val, _dataType), Boolean.valueOf(ad_required_val).booleanValue(), _dp_localization, logger);
 
-			if (ad_cardinality_val == 0) {
-				// Attribute DEFAULT has one and only one occurance.
-				_ad.setDefaultValue(new String[] {ad_defaults_str}, false);
-			} else {
-				// Attribute DEFAULT is a comma delimited list.
-				_ad.setDefaultValue(ad_defaults_str, false);
+			if (ad_defaults_str != null) {
+				_ad.setDefaultValue(ad_defaults_str, true);
 			}
 		}
 
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+		public void startElement(String uri, String localName, String qName, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is AttributeDefinitionHandler:startElement():" //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is AttributeDefinitionHandler:startElement():" //$NON-NLS-1$
 					+ qName);
 			if (!_isParsedDataValid)
 				return;
@@ -607,13 +542,13 @@ public class DataParser {
 					_optionValue_vector.addElement(optionHandler._value_val);
 				}
 			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
+				logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
 			}
 		}
 
-		protected void finished() throws SAXException {
+		protected void finished() {
 
-			Logging.log(Logging.TRACE, "Here is AttributeDefinitionHandler():finished()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is AttributeDefinitionHandler():finished()"); //$NON-NLS-1$
 			if (!_isParsedDataValid)
 				return;
 
@@ -634,22 +569,20 @@ public class DataParser {
 			super(handler);
 		}
 
-		public void init(String name, Attributes atts) throws SAXException {
+		public void init(String name, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is OptionHandler:init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is OptionHandler:init()"); //$NON-NLS-1$
 			_label_val = atts.getValue(LABEL);
 			if (_label_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, LABEL, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, LABEL, name)); //$NON-NLS-1$
 				return;
 			}
 
 			_value_val = atts.getValue(VALUE);
 			if (_value_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, VALUE, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, VALUE, name)); //$NON-NLS-1$
 				return;
 			}
 		}
@@ -671,7 +604,7 @@ public class DataParser {
 	//		public void init(String name, Attributes atts, Vector value_vector)
 	//				throws SAXException {
 	//
-	//			Logging.log(Logging.TRACE,
+	//			Logging.log(LogService.LOG_DEBUG,
 	//					"Here is SimpleValueHandler():init()"); //$NON-NLS-1$
 	//			_elementName = name;
 	//			_parent_value_vector = value_vector;
@@ -679,7 +612,7 @@ public class DataParser {
 	//
 	//		protected void finished() throws SAXException {
 	//
-	//			Logging.log(Logging.TRACE,
+	//			Logging.log(LogService.LOG_DEBUG,
 	//					"Here is SimpleValueHandler():finished()"); //$NON-NLS-1$
 	//			if (_parent_value_vector != null) {
 	//				_parent_value_vector.addElement(_buffer.toString());
@@ -689,7 +622,7 @@ public class DataParser {
 	//		public void characters(char buf[], int offset, int len)
 	//				throws SAXException {
 	//
-	//			Logging.log(Logging.TRACE,
+	//			Logging.log(LogService.LOG_DEBUG,
 	//					"Here is SimpleValueHandler(" //$NON-NLS-1$
 	//					+ _elementName
 	//					+ "):characters():[" //$NON-NLS-1$
@@ -717,17 +650,16 @@ public class DataParser {
 			super(handler);
 		}
 
-		public void init(String name, Attributes atts) throws SAXException {
+		public void init(String name, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is DesignateHandler():init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is DesignateHandler():init()"); //$NON-NLS-1$
 			_pid_val = atts.getValue(PID);
-			if (_pid_val == null) {
+			_factory_val = atts.getValue(FACTORY);
+			if (_pid_val == null && _factory_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, PID, name));
+				logger.log(LogService.LOG_ERROR, MetaTypeMsg.MISSING_DESIGNATE_PID_AND_FACTORYPID);
 				return;
 			}
-			_factory_val = atts.getValue(FACTORY);
 
 			_bundle_val = atts.getValue(BUNDLE);
 			if (_bundle_val == null) {
@@ -753,9 +685,9 @@ public class DataParser {
 			}
 		}
 
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+		public void startElement(String uri, String localName, String qName, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is DesignateHandler:startElement():" //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is DesignateHandler:startElement():" //$NON-NLS-1$
 					+ qName);
 			if (!_isParsedDataValid)
 				return;
@@ -768,21 +700,20 @@ public class DataParser {
 					_ocdref = objectHandler._ocdref;
 				}
 			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
+				logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
 			}
 		}
 
-		protected void finished() throws SAXException {
+		protected void finished() {
 
-			Logging.log(Logging.TRACE, "Here is DesignateHandler():finished()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is DesignateHandler():finished()"); //$NON-NLS-1$
 			if (!_isParsedDataValid)
 				return;
 
 			if (_ocdref == null) {
 				_isParsedDataValid = false;
 				// Schema defines at least one OBJECT is required.
-				Logging.log(Logging.ERROR, this, "finished()", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ELEMENT, OBJECT, _pid_val));
+				logger.log(LogService.LOG_ERROR, "DataParser.finished() " + NLS.bind(MetaTypeMsg.MISSING_ELEMENT, OBJECT, _pid_val)); //$NON-NLS-1$
 				return;
 
 			}
@@ -800,21 +731,20 @@ public class DataParser {
 			super(handler);
 		}
 
-		public void init(String name, Attributes atts) throws SAXException {
+		public void init(String name, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is ObjectHandler():init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is ObjectHandler():init()"); //$NON-NLS-1$
 			_ocdref = atts.getValue(OCDREF);
 			if (_ocdref == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, OCDREF, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, OCDREF, name)); //$NON-NLS-1$
 				return;
 			}
 		}
 
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+		public void startElement(String uri, String localName, String qName, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is ObjectHandler:startElement():" //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is ObjectHandler:startElement():" //$NON-NLS-1$
 					+ qName);
 			if (!_isParsedDataValid)
 				return;
@@ -825,7 +755,7 @@ public class DataParser {
 				attributeHandler.init(name, atts);
 				// The ATTRIBUTE element is only used by RFC94, do nothing for it here.
 			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
+				logger.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
 			}
 		}
 	}
@@ -844,22 +774,20 @@ public class DataParser {
 			super(handler);
 		}
 
-		public void init(String name, Attributes atts) throws SAXException {
+		public void init(String name, Attributes atts) {
 
-			Logging.log(Logging.TRACE, "Here is AttributeHandler():init()"); //$NON-NLS-1$
+			logger.log(LogService.LOG_DEBUG, "Here is AttributeHandler():init()"); //$NON-NLS-1$
 			_adref_val = atts.getValue(ADREF);
 			if (_adref_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, ADREF, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, ADREF, name)); //$NON-NLS-1$
 				return;
 			}
 
 			_content_val = atts.getValue(CONTENT);
 			if (_content_val == null) {
 				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, CONTENT, name));
+				logger.log(LogService.LOG_ERROR, "DataParser.init(String, Attributes) " + NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, CONTENT, name)); //$NON-NLS-1$
 				return;
 			}
 		}
@@ -895,7 +823,7 @@ public class DataParser {
 		// The following methods are standard SAX ErrorHandler methods.
 		// See SAX documentation for more info.
 
-		public void warning(SAXParseException spe) throws SAXException {
+		public void warning(SAXParseException spe) {
 			_out.println("Warning: " + getParseExceptionInfo(spe)); //$NON-NLS-1$
 		}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Designate.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Designate.java
new file mode 100644
index 0000000..4b448e6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Designate.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.metatype;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Designate {
+	public static class Builder {
+		String bundle;
+		String factoryPid;
+		boolean merge;
+		ObjectClassDefinitionImpl ocd;
+		boolean optional;
+		String pid;
+
+		public Builder(ObjectClassDefinitionImpl ocd) {
+			if (ocd == null) {
+				throw new IllegalArgumentException(NLS.bind(MetaTypeMsg.MISSING_REQUIRED_PARAMETER, "ocd")); //$NON-NLS-1$
+			}
+			this.ocd = ocd;
+		}
+
+		public Designate build() {
+			return new Designate(this);
+		}
+
+		public Builder bundle(String value) {
+			bundle = value;
+			return this;
+		}
+
+		public Builder factoryPid(String value) {
+			factoryPid = value;
+			return this;
+		}
+
+		public Builder merge(boolean value) {
+			merge = value;
+			return this;
+		}
+
+		public Builder optional(boolean value) {
+			optional = value;
+			return this;
+		}
+
+		public Builder pid(String value) {
+			pid = value;
+			return this;
+		}
+	}
+
+	private final String bundle;
+	private final String factoryPid;
+	private final boolean merge;
+	private final ObjectClassDefinitionImpl ocd;
+	private final boolean optional;
+	private final String pid;
+
+	Designate(Builder b) {
+		bundle = b.bundle;
+		factoryPid = b.factoryPid;
+		merge = b.merge;
+		ocd = b.ocd;
+		optional = b.optional;
+		pid = b.pid;
+	}
+
+	public String getBundle() {
+		return bundle;
+	}
+
+	public String getFactoryPid() {
+		return factoryPid;
+	}
+
+	public boolean isFactory() {
+		return factoryPid != null && factoryPid.length() != 0;
+	}
+
+	public boolean isMerge() {
+		return merge;
+	}
+
+	public ObjectClassDefinitionImpl getObjectClassDefinition() {
+		return ocd;
+	}
+
+	public boolean isOptional() {
+		return optional;
+	}
+
+	public String getPid() {
+		return pid;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties
index 9bcf925..0122026 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005 IBM Corporation.
+# Copyright (c) 2005, 2011 IBM Corporation.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -14,15 +14,15 @@ SERVICE_DESCRIPTION=OSGi Metatype Service - IBM Implementation
 UNEXPECTED_ELEMENT=Unexpected element {0}.
 UNEXPECTED_TEXT=Unexpected text {0}.
 MISSING_ATTRIBUTE=Missing attribute {0} in tag {1}.
+MISSING_DESIGNATE_PID_AND_FACTORYPID=A <Designate> element must specify either the 'pid' or 'factoryPid' attribute.
 OCD_ID_NOT_FOUND=Object Class Definition ID not found {0}.
-NULL_DEFAULTS=Default value cannot be null when cardinality is zero.
 MISSING_ELEMENT=Missing element {0} (Reference ID = {1}.
 
 EXCEPTION_MESSAGE=Unexpected exception {0} with message {1}.
 NULL_IS_INVALID=Cannot validate a null.
 VALUE_OUT_OF_RANGE=Value {0} is out of range.
 VALUE_OUT_OF_OPTION=Value {0} is out of Option.
-TOO_MANY_VALUES=Found too many values in {0} when expecting {1} values.
+CARDINALITY_VIOLATION=Cardinality violation: \"{0}\" has {1} value(s) but must have between {2} and {3} value(s).
 NULL_OPTIONS=Cannot set Option labels or values as null.
 INCONSISTENT_OPTIONS=Labels and Values of Option have different sizes.
 INVALID_OPTIONS=Option value {0} is invalid because of {1}.
@@ -30,4 +30,6 @@ INVALID_DEFAULTS=Dafaults value {0} is invalid because of {1}.
 
 METADATA_NOT_FOUND=Bundle(ID=\"{0}\", name=\"{1}\") has no MetaData file.
 ASK_INVALID_LOCALE=OCD(ID=\"{0}\") cannot support this locale \"{1}\".
-TOKENIZER_GOT_INVALID_DATA=The Tokenizer got invalid data.
\ No newline at end of file
+MISSING_REQUIRED_PARAMETER=Missing required parameter: {0}
+TOKENIZER_GOT_INVALID_DATA=The Tokenizer got invalid data.
+INVALID_PID_METATYPE_PROVIDER_IGNORED=Bundle {0} with ID {1} provided a MetaTypeProvider with an invalid property. Property {2} with value {3} was not of the expected type (String, String[], or Collection<String>) and will be ignored.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java
index 10c464e..0253eaa 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation.
+ * Copyright (c) 2005, 2011 IBM Corporation.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,75 +11,48 @@
 package org.eclipse.equinox.metatype;
 
 import java.net.URL;
-import java.util.*;
+import java.util.List;
 import org.osgi.framework.Bundle;
-import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.framework.wiring.BundleWiring;
 
 /*
  * Fragment Utilities
  */
 public class FragmentUtils {
-	static PackageAdmin packageAdmin;
 
 	/*
 	 * 
 	 */
 	public static boolean isFragment(Bundle bundle) {
-
-		if (packageAdmin == null)
-			return false;
-		return (packageAdmin.getBundleType(bundle) & PackageAdmin.BUNDLE_TYPE_FRAGMENT) != 0;
-	}
-
-	/*
-	 * Find all the paths to entries for the bundle and its fragments.
-	 * Returned data is got by Bundle.getEntryPaths().
-	 */
-	public static Enumeration findEntryPaths(Bundle bundle, String path) {
-
-		Bundle[] fragments = packageAdmin == null ? null : packageAdmin.getFragments(bundle);
-		Vector result = new Vector();
-		addEntryPaths(bundle.getEntryPaths(path), result);
-		if (fragments != null) {
-			for (int i = 0; i < fragments.length; i++)
-				addEntryPaths(fragments[i].getEntryPaths(path), result);
-		}
-		return result.size() == 0 ? null : result.elements();
-	}
-
-	/*
-	 * Internal method - add an path to vector, and check for duplucate.
-	 */
-	private static void addEntryPaths(Enumeration ePaths, Vector pathList) {
-
-		if (ePaths == null)
-			return;
-		while (ePaths.hasMoreElements()) {
-			Object path = ePaths.nextElement();
-			if (!pathList.contains(path))
-				pathList.add(path);
-		}
+		return (bundle.adapt(BundleRevision.class).getTypes() & BundleRevision.TYPE_FRAGMENT) != 0;
 	}
 
 	/*
 	 * Find all the URLs to entries for the bundle and its fragments.
-	 * Returned data is got by Bundle.getEntry().
 	 */
 	public static URL[] findEntries(Bundle bundle, String path) {
-
-		Bundle[] fragments = packageAdmin == null ? null : packageAdmin.getFragments(bundle);
-		URL url = bundle.getEntry(path);
-		if (fragments == null || fragments.length == 0)
-			return url == null ? null : new URL[] {url};
-		ArrayList result = new ArrayList();
-		if (url != null)
-			result.add(url);
-
-		for (int i = 0; i < fragments.length; i++) {
-			URL fragUrl = fragments[i].getEntry(path);
-			if (fragUrl != null)
-				result.add(fragUrl);
+		BundleWiring wiring = bundle.adapt(BundleWiring.class);
+		if (wiring == null)
+			return null;
+		String directory = "/"; //$NON-NLS-1$
+		String file = "*"; //$NON-NLS-1$
+		int index = path.lastIndexOf(MetaTypeProviderImpl.DIRECTORY_SEP);
+		switch (index) {
+			case -1 :
+				file = path;
+				break;
+			case 0 :
+				if (path.length() > 1)
+					file = path.substring(1);
+				break;
+			default :
+				directory = path.substring(0, index);
+				file = path.substring(index + 1);
 		}
-		return result.size() == 0 ? null : (URL[]) result.toArray(new URL[result.size()]);
+		List<URL> entries = wiring.findEntries(directory, file, 0);
+		if (entries == null)
+			return null;
+		return entries.toArray(new URL[entries.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java
index 6b3bda4..a440439 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ public class LocalizationElement {
 			return null;
 		}
 
-		if ((key.charAt(0) == KEY_SIGN) && (key.length() > 1)) {
+		if ((key.length() > 1) && (key.charAt(0) == KEY_SIGN)) {
 			if (_rb != null) {
 				try {
 					String transfered = _rb.getString(key.substring(1));
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogMessages.properties b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogMessages.properties
new file mode 100644
index 0000000..cf8d9a4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogMessages.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2005, 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# NLS_MESSAGEFORMAT_ALL 
+
+Unknown_Log_level=Unknown Log Level
+Info=Log Info
+Warning=Log Warning
+Error=Log Error
+Debug=Log Debug
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogTracker.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogTracker.java
new file mode 100644
index 0000000..2ba9185
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogTracker.java
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 1998, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.metatype;
+
+import java.io.PrintStream;
+import java.util.Calendar;
+import java.util.Date;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * LogTracker class. This class encapsulates the LogService
+ * and handles all issues such as the service coming and going.
+ */
+
+public class LogTracker extends ServiceTracker<LogService, LogService> implements LogService {
+	/** LogService interface class name */
+	protected final static String clazz = "org.osgi.service.log.LogService"; //$NON-NLS-1$
+
+	/** PrintStream to use if LogService is unavailable */
+	private final PrintStream out;
+
+	/**
+	 * Create new LogTracker.
+	 *
+	 * @param context BundleContext of parent bundle.
+	 * @param out Default PrintStream to use if LogService is unavailable.
+	 */
+	public LogTracker(BundleContext context, PrintStream out) {
+		super(context, clazz, null);
+		this.out = out;
+	}
+
+	/*
+	 * ----------------------------------------------------------------------
+	 *      LogService Interface implementation
+	 * ----------------------------------------------------------------------
+	 */
+
+	public void log(int level, String message) {
+		log(null, level, message, null);
+	}
+
+	public void log(int level, String message, Throwable exception) {
+		log(null, level, message, exception);
+	}
+
+	// Must suppress warnings here because the log service is not
+	@SuppressWarnings("rawtypes")
+	public void log(ServiceReference reference, int level, String message) {
+		log(reference, level, message, null);
+	}
+
+	// Must suppress warnings here because the log service is not
+	@SuppressWarnings("rawtypes")
+	public synchronized void log(ServiceReference reference, int level, String message, Throwable exception) {
+		ServiceReference<LogService>[] references = getServiceReferences();
+
+		if (references != null) {
+			int size = references.length;
+
+			for (int i = 0; i < size; i++) {
+				LogService service = getService(references[i]);
+				if (service != null) {
+					try {
+						service.log(reference, level, message, exception);
+					} catch (Exception e) {
+						// TODO: consider printing to System Error
+					}
+				}
+			}
+
+			return;
+		}
+
+		noLogService(level, message, exception, reference);
+	}
+
+	/**
+	 * The LogService is not available so we write the message to a PrintStream.
+	 *
+	 * @param level Logging level
+	 * @param message Log message.
+	 * @param throwable Log exception or null if none.
+	 * @param reference ServiceReference associated with message or null if none.
+	 */
+	protected void noLogService(int level, String message, Throwable throwable, ServiceReference<?> reference) {
+		if (out != null) {
+			synchronized (out) {
+				// Bug #113286.  If no log service present and messages are being
+				// printed to stdout, prepend message with a timestamp.
+				String timestamp = getDate(new Date());
+				out.print(timestamp + " "); //$NON-NLS-1$
+
+				switch (level) {
+					case LOG_DEBUG : {
+						out.print(LogTrackerMsg.Debug);
+
+						break;
+					}
+					case LOG_INFO : {
+						out.print(LogTrackerMsg.Info);
+
+						break;
+					}
+					case LOG_WARNING : {
+						out.print(LogTrackerMsg.Warning);
+
+						break;
+					}
+					case LOG_ERROR : {
+						out.print(LogTrackerMsg.Error);
+
+						break;
+					}
+					default : {
+						out.print("["); //$NON-NLS-1$
+						out.print(LogTrackerMsg.Unknown_Log_level);
+						out.print("]: "); //$NON-NLS-1$
+
+						break;
+					}
+				}
+
+				out.println(message);
+
+				if (reference != null) {
+					out.println(reference);
+				}
+
+				if (throwable != null) {
+					throwable.printStackTrace(out);
+				}
+			}
+		}
+	}
+
+	// from EclipseLog to avoid using DateFormat -- see bug 149892#c10
+	private String getDate(Date date) {
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		StringBuffer sb = new StringBuffer();
+		appendPaddedInt(c.get(Calendar.YEAR), 4, sb).append('-');
+		appendPaddedInt(c.get(Calendar.MONTH) + 1, 2, sb).append('-');
+		appendPaddedInt(c.get(Calendar.DAY_OF_MONTH), 2, sb).append(' ');
+		appendPaddedInt(c.get(Calendar.HOUR_OF_DAY), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.MINUTE), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.SECOND), 2, sb).append('.');
+		appendPaddedInt(c.get(Calendar.MILLISECOND), 3, sb);
+		return sb.toString();
+	}
+
+	private StringBuffer appendPaddedInt(int value, int pad, StringBuffer buffer) {
+		pad = pad - 1;
+		if (pad == 0)
+			return buffer.append(Integer.toString(value));
+		int padding = (int) Math.pow(10, pad);
+		if (value >= padding)
+			return buffer.append(Integer.toString(value));
+		while (padding > value && padding > 1) {
+			buffer.append('0');
+			padding = padding / 10;
+		}
+		buffer.append(value);
+		return buffer;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogTrackerMsg.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogTrackerMsg.java
new file mode 100644
index 0000000..1cf0e38
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LogTrackerMsg.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.metatype;
+
+import org.eclipse.osgi.util.NLS;
+
+public class LogTrackerMsg extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.metatype.LogMessages"; //$NON-NLS-1$
+
+	public static String Unknown_Log_level;
+	public static String Info;
+	public static String Warning;
+	public static String Error;
+	public static String Debug;
+
+	static {
+		// initialize resource bundles
+		NLS.initializeMessages(BUNDLE_NAME, LogTrackerMsg.class);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Logging.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Logging.java
deleted file mode 100644
index cf26501..0000000
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Logging.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.metatype;
-
-import java.io.PrintStream;
-
-/**
- * Temporary Logging class
- */
-public class Logging {
-
-	public static final int TRACE = 0;
-	public static final int DEBUG = 1;
-	public static final int WARN = 2;
-	public static final int ERROR = 3;
-
-	private static int _logging_level = WARN;
-	private static PrintStream out = System.out;
-
-	/*
-	 * 
-	 */
-	public static void log(int type, String message) {
-		log(type, null, null, message);
-	}
-
-	/*
-	 * Main method to print log message
-	 */
-	public static void log(int type, Object obj, String method, String message) {
-
-		if (type >= _logging_level) {
-
-			switch (type) {
-				case TRACE :
-					out.println("[Trace log]"); //$NON-NLS-1$
-					break;
-				case DEBUG :
-					out.println("[Debug log]"); //$NON-NLS-1$
-					break;
-				case WARN :
-					out.println("[Warning log]"); //$NON-NLS-1$
-					break;
-				default :
-					out.println("[Error log]"); //$NON-NLS-1$
-			}
-
-			if (obj != null) {
-				out.println("\tObject:  " + obj.getClass().getName()); //$NON-NLS-1$
-			}
-			if (method != null) {
-				out.println("\tMethod:  " + method); //$NON-NLS-1$
-			}
-			out.println("\tMessage: " + message); //$NON-NLS-1$
-		}
-	}
-
-	/*
-	 * 
-	 */
-	public static void debug(String message) {
-
-		log(DEBUG, null, null, message);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java
index 546026b..ce860e4 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.util.Enumeration;
 import java.util.Vector;
 import javax.xml.parsers.SAXParserFactory;
 import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.MetaTypeInformation;
 
 /**
@@ -31,8 +32,8 @@ public class MetaTypeInformationImpl extends MetaTypeProviderImpl implements Met
 	/**
 	 * Constructor of class MetaTypeInformationImpl.
 	 */
-	MetaTypeInformationImpl(Bundle bundle, SAXParserFactory parserFactory) throws java.io.IOException {
-		super(bundle, parserFactory);
+	MetaTypeInformationImpl(Bundle bundle, SAXParserFactory parserFactory, LogService logger) throws java.io.IOException {
+		super(bundle, parserFactory, logger);
 	}
 
 	/*
@@ -46,8 +47,8 @@ public class MetaTypeInformationImpl extends MetaTypeProviderImpl implements Met
 			return new String[0];
 		}
 
-		Vector pids = new Vector(7);
-		Enumeration e = _allPidOCDs.keys();
+		Vector<String> pids = new Vector<String>(7);
+		Enumeration<String> e = _allPidOCDs.keys();
 		while (e.hasMoreElements()) {
 			pids.addElement(e.nextElement());
 		}
@@ -66,8 +67,8 @@ public class MetaTypeInformationImpl extends MetaTypeProviderImpl implements Met
 		if (_allFPidOCDs.size() == 0) {
 			return new String[0];
 		}
-		Vector fpids = new Vector(7);
-		Enumeration e = _allFPidOCDs.keys();
+		Vector<String> fpids = new Vector<String>(7);
+		Enumeration<String> e = _allFPidOCDs.keys();
 		while (e.hasMoreElements()) {
 			fpids.addElement(e.nextElement());
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java
index b3ffee6..6cace56 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation.
+ * Copyright (c) 2005, 2011 IBM Corporation.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,15 +20,15 @@ public class MetaTypeMsg extends NLS {
 	public static String UNEXPECTED_ELEMENT;
 	public static String UNEXPECTED_TEXT;
 	public static String MISSING_ATTRIBUTE;
+	public static String MISSING_DESIGNATE_PID_AND_FACTORYPID;
 	public static String OCD_ID_NOT_FOUND;
-	public static String NULL_DEFAULTS;
 	public static String MISSING_ELEMENT;
 
 	public static String EXCEPTION_MESSAGE;
 	public static String NULL_IS_INVALID;
 	public static String VALUE_OUT_OF_RANGE;
 	public static String VALUE_OUT_OF_OPTION;
-	public static String TOO_MANY_VALUES;
+	public static String CARDINALITY_VIOLATION;
 	public static String NULL_OPTIONS;
 	public static String INCONSISTENT_OPTIONS;
 	public static String INVALID_OPTIONS;
@@ -36,7 +36,11 @@ public class MetaTypeMsg extends NLS {
 
 	public static String METADATA_NOT_FOUND;
 	public static String ASK_INVALID_LOCALE;
+
+	public static String MISSING_REQUIRED_PARAMETER;
+
 	public static String TOKENIZER_GOT_INVALID_DATA;
+	public static String INVALID_PID_METATYPE_PROVIDER_IGNORED;
 
 	static {
 		// initialize resource bundles
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java
index 61527c0..f1cfeda 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,11 +11,14 @@
 package org.eclipse.equinox.metatype;
 
 import java.io.IOException;
+import java.net.URL;
 import java.util.*;
 import javax.xml.parsers.SAXParserFactory;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.*;
 
 /**
@@ -34,24 +37,28 @@ public class MetaTypeProviderImpl implements MetaTypeProvider {
 
 	Bundle _bundle;
 
-	Hashtable _allPidOCDs = new Hashtable(7);
-	Hashtable _allFPidOCDs = new Hashtable(7);
+	Hashtable<String, ObjectClassDefinitionImpl> _allPidOCDs = new Hashtable<String, ObjectClassDefinitionImpl>(7);
+	Hashtable<String, ObjectClassDefinitionImpl> _allFPidOCDs = new Hashtable<String, ObjectClassDefinitionImpl>(7);
 
 	String[] _locales;
 	boolean _isThereMeta = false;
 
+	// Give access to subclasses.
+	protected final LogService logger;
+
 	/**
 	 * Constructor of class MetaTypeProviderImpl.
 	 */
-	MetaTypeProviderImpl(Bundle bundle, SAXParserFactory parserFactory) throws IOException {
+	MetaTypeProviderImpl(Bundle bundle, SAXParserFactory parserFactory, LogService logger) throws IOException {
 
 		this._bundle = bundle;
+		this.logger = logger;
 
 		// read all bundle's metadata files and build internal data structures
 		_isThereMeta = readMetaFiles(bundle, parserFactory);
 
 		if (!_isThereMeta) {
-			Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.METADATA_NOT_FOUND, new Long(bundle.getBundleId()), bundle.getSymbolicName()));
+			logger.log(LogService.LOG_DEBUG, NLS.bind(MetaTypeMsg.METADATA_NOT_FOUND, new Long(bundle.getBundleId()), bundle.getSymbolicName()));
 		}
 	}
 
@@ -77,56 +84,30 @@ public class MetaTypeProviderImpl implements MetaTypeProvider {
 	 * @throws IOException If there are errors accessing the metadata.xml file
 	 */
 	private boolean readMetaFiles(Bundle bundle, SAXParserFactory parserFactory) throws IOException {
-
-		boolean isThereMetaHere = false;
-
-		Enumeration allFileKeys = FragmentUtils.findEntryPaths(bundle, MetaTypeService.METATYPE_DOCUMENTS_LOCATION);
-		if (allFileKeys == null)
-			return isThereMetaHere;
-
-		while (allFileKeys.hasMoreElements()) {
-			boolean _isMetaDataFile;
-			String fileName = (String) allFileKeys.nextElement();
-
-			Hashtable pidToOCD = null;
-			java.net.URL[] urls = FragmentUtils.findEntries(bundle, fileName);
-			if (urls != null) {
-				for (int i = 0; i < urls.length; i++) {
-					try {
-						// Assume all XML files are what we want by default.
-						_isMetaDataFile = true;
-						DataParser parser = new DataParser(bundle, urls[i], parserFactory);
-						pidToOCD = parser.doParse();
-						if (pidToOCD == null) {
-							_isMetaDataFile = false;
-						}
-					} catch (Exception e) {
-						// Ok, looks like it is not what we want.
-						_isMetaDataFile = false;
-					}
-
-					if ((_isMetaDataFile) && (pidToOCD != null)) {
-						
-						// We got some OCDs now.
-						Enumeration pids = pidToOCD.keys();
-						while (pids.hasMoreElements()) {
-							String pid = (String)pids.nextElement();
-							ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) pidToOCD.get(pid);
-
-							if (ocd.getType() == ObjectClassDefinitionImpl.PID) {
-								isThereMetaHere = true;
-								_allPidOCDs.put(pid, ocd);
-							} else {
-								isThereMetaHere = true;
-								_allFPidOCDs.put(pid, ocd);
-							}
-						} // End of for
-					}
+		BundleWiring wiring = bundle.adapt(BundleWiring.class);
+		if (wiring == null)
+			return false;
+		List<URL> entries = wiring.findEntries(MetaTypeService.METATYPE_DOCUMENTS_LOCATION, "*", 0); //$NON-NLS-1$
+		if (entries == null)
+			return false;
+		boolean result = false;
+		for (URL entry : entries) {
+			DataParser parser = new DataParser(bundle, entry, parserFactory, logger);
+			try {
+				Collection<Designate> designates = parser.doParse();
+				if (!designates.isEmpty())
+					result = true;
+				for (Designate designate : designates) {
+					if (designate.isFactory())
+						_allFPidOCDs.put(designate.getFactoryPid(), designate.getObjectClassDefinition());
+					else
+						_allPidOCDs.put(designate.getPid(), designate.getObjectClassDefinition());
 				}
-			} // End of if(urls!=null)
-		} // End of while
-
-		return isThereMetaHere;
+			} catch (Exception e) {
+				// ignore
+			}
+		}
+		return result;
 	}
 
 	/*
@@ -143,11 +124,11 @@ public class MetaTypeProviderImpl implements MetaTypeProvider {
 
 		ObjectClassDefinitionImpl ocd;
 		if (_allPidOCDs.containsKey(pid)) {
-			ocd = (ObjectClassDefinitionImpl) ((ObjectClassDefinitionImpl) _allPidOCDs.get(pid)).clone();
+			ocd = (ObjectClassDefinitionImpl) (_allPidOCDs.get(pid)).clone();
 			ocd.setResourceBundle(locale, _bundle);
 			return ocd;
 		} else if (_allFPidOCDs.containsKey(pid)) {
-			ocd = (ObjectClassDefinitionImpl) ((ObjectClassDefinitionImpl) _allFPidOCDs.get(pid)).clone();
+			ocd = (ObjectClassDefinitionImpl) (_allFPidOCDs.get(pid)).clone();
 			ocd.setResourceBundle(locale, _bundle);
 			return ocd;
 		} else {
@@ -184,28 +165,30 @@ public class MetaTypeProviderImpl implements MetaTypeProvider {
 
 		if (_locales != null)
 			return checkForDefault(_locales);
-
-		Vector localizationFiles = new Vector(7);
+		BundleWiring wiring = _bundle.adapt(BundleWiring.class);
+		if (wiring == null)
+			return null;
+		Vector<String> localizationFiles = new Vector<String>(7);
 		// get all the localization resources for PIDS
-		Enumeration ocds = _allPidOCDs.elements();
+		Enumeration<ObjectClassDefinitionImpl> ocds = _allPidOCDs.elements();
 		while (ocds.hasMoreElements()) {
-			ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) ocds.nextElement();
+			ObjectClassDefinitionImpl ocd = ocds.nextElement();
 			if (ocd._localization != null && !localizationFiles.contains(ocd._localization))
 				localizationFiles.add(ocd._localization);
 		}
 		// get all the localization resources for FPIDS
 		ocds = _allFPidOCDs.elements();
 		while (ocds.hasMoreElements()) {
-			ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) ocds.nextElement();
+			ObjectClassDefinitionImpl ocd = ocds.nextElement();
 			if (ocd._localization != null && !localizationFiles.contains(ocd._localization))
 				localizationFiles.add(ocd._localization);
 		}
 		if (localizationFiles.size() == 0)
-			localizationFiles.add(Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME);
-		Vector locales = new Vector(7);
-		Enumeration eLocalizationFiles = localizationFiles.elements();
+			localizationFiles.add(getBundleLocalization(_bundle));
+		Vector<String> locales = new Vector<String>(7);
+		Enumeration<String> eLocalizationFiles = localizationFiles.elements();
 		while (eLocalizationFiles.hasMoreElements()) {
-			String localizationFile = (String) eLocalizationFiles.nextElement();
+			String localizationFile = eLocalizationFiles.nextElement();
 			int iSlash = localizationFile.lastIndexOf(DIRECTORY_SEP);
 			String baseDir;
 			String baseFileName;
@@ -214,20 +197,29 @@ public class MetaTypeProviderImpl implements MetaTypeProvider {
 			} else {
 				baseDir = localizationFile.substring(0, iSlash);
 			}
-			baseFileName = localizationFile + RESOURCE_FILE_CONN;
-			Enumeration resources = FragmentUtils.findEntryPaths(this._bundle, baseDir);
-			if (resources != null) {
-				while (resources.hasMoreElements()) {
-					String resource = (String) resources.nextElement();
-					if (resource.startsWith(baseFileName) && resource.toLowerCase().endsWith(RESOURCE_FILE_EXT))
-						locales.add(resource.substring(baseFileName.length(), resource.length() - RESOURCE_FILE_EXT.length()));
-				}
+			baseFileName = '/' + localizationFile + RESOURCE_FILE_CONN;
+			List<URL> entries = wiring.findEntries(baseDir, "*.properties", 0); //$NON-NLS-1$
+			if (entries == null)
+				continue;
+			for (URL entry : entries) {
+				String resource = entry.getPath();
+				if (resource.startsWith(baseFileName) && resource.toLowerCase().endsWith(RESOURCE_FILE_EXT))
+					locales.add(resource.substring(baseFileName.length(), resource.length() - RESOURCE_FILE_EXT.length()));
 			}
 		}
-		_locales = (String[]) locales.toArray(new String[locales.size()]);
+		_locales = locales.toArray(new String[locales.size()]);
 		return checkForDefault(_locales);
 	}
 
+	static String getBundleLocalization(Bundle bundle) {
+		// Use the Bundle-Localization manifest header value if it exists.
+		String baseName = bundle.getHeaders("").get(Constants.BUNDLE_LOCALIZATION); //$NON-NLS-1$
+		if (baseName == null)
+			// If the manifest header does not exist, use the default.
+			baseName = Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
+		return baseName;
+	}
+
 	/**
 	 * Internal Method - checkForDefault
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java
index 37bacc71..fbdd76e 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,57 +10,44 @@
  *******************************************************************************/
 package org.eclipse.equinox.metatype;
 
-import java.util.ArrayList;
+import java.util.*;
+import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
+import org.osgi.service.cm.ManagedService;
 import org.osgi.service.cm.ManagedServiceFactory;
+import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.*;
 import org.osgi.util.tracker.ServiceTracker;
 
 public class MetaTypeProviderTracker implements MetaTypeInformation {
-	public static final String MANAGED_SERVICE = "org.osgi.service.cm.ManagedService"; //$NON-NLS-1$
-	public static final String MANAGED_SERVICE_FACTORY = "org.osgi.service.cm.ManagedServiceFactory"; //$NON-NLS-1$
-	public static final String FILTER_STRING = "(|(" + Constants.OBJECTCLASS + '=' + MANAGED_SERVICE + ")(" + Constants.OBJECTCLASS + '=' + MANAGED_SERVICE_FACTORY + "))"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
-
-	Bundle _bundle;
-	BundleContext _context;
-	ServiceTracker _tracker;
+	private final Bundle _bundle;
+	private final LogService log;
+	private final ServiceTracker<Object, Object> _tracker;
 
 	/**
 	 * Constructs a MetaTypeProviderTracker which tracks all MetaTypeProviders
 	 * registered by the specified bundle.
 	 * @param context The BundleContext of the MetaTypeService implementation
 	 * @param bundle The bundle to track all MetaTypeProviders for.
+	 * @param log The {@code LogService} to use for logging messages.
 	 */
-	public MetaTypeProviderTracker(BundleContext context, Bundle bundle) {
-		this._context = context;
+	public MetaTypeProviderTracker(Bundle bundle, LogService log, ServiceTracker<Object, Object> tracker) {
 		this._bundle = bundle;
-		// create a filter for ManagedService and ManagedServiceFactory services 
-		try {
-			Filter filter = context.createFilter(FILTER_STRING);
-			// create a service tracker and open it.
-			this._tracker = new ServiceTracker(context, filter, null);
-			// we never close this, but it is no big deal because we
-			// really want to track the services until we are stopped
-			// at that point the framework will remove our listeners.
-			this._tracker.open();
-		} catch (InvalidSyntaxException e) {
-			// This should never happen; it means we have a bug in the filterString
-			e.printStackTrace();
-			throw new IllegalArgumentException(FILTER_STRING);
-		}
+		this._tracker = tracker;
+		this.log = log;
 	}
 
 	private String[] getPids(boolean factory) {
 		if (_bundle.getState() != Bundle.ACTIVE)
 			return new String[0]; // return none if not active
 		MetaTypeProviderWrapper[] wrappers = getMetaTypeProviders();
-		ArrayList results = new ArrayList();
+		ArrayList<String> results = new ArrayList<String>();
 		for (int i = 0; i < wrappers.length; i++) {
 			// return only the correct type of pids (regular or factory)
 			if (factory == wrappers[i].factory)
 				results.add(wrappers[i].pid);
 		}
-		return (String[]) results.toArray(new String[results.size()]);
+		return results.toArray(new String[results.size()]);
 	}
 
 	public String[] getPids() {
@@ -91,7 +78,7 @@ public class MetaTypeProviderTracker implements MetaTypeInformation {
 		if (_bundle.getState() != Bundle.ACTIVE)
 			return new String[0]; // return none if not active
 		MetaTypeProviderWrapper[] wrappers = getMetaTypeProviders();
-		ArrayList locales = new ArrayList();
+		ArrayList<String> locales = new ArrayList<String>();
 		// collect all the unique locales from all providers we found
 		for (int i = 0; i < wrappers.length; i++) {
 			String[] wrappedLocales = wrappers[i].provider.getLocales();
@@ -101,31 +88,71 @@ public class MetaTypeProviderTracker implements MetaTypeInformation {
 				if (!locales.contains(wrappedLocales[j]))
 					locales.add(wrappedLocales[j]);
 		}
-		return (String[]) locales.toArray(new String[locales.size()]);
+		return locales.toArray(new String[locales.size()]);
 	}
 
 	private MetaTypeProviderWrapper[] getMetaTypeProviders() {
-		ServiceReference[] refs = _tracker.getServiceReferences();
-		if (refs == null)
+		Map<ServiceReference<Object>, Object> services = _tracker.getTracked();
+		if (services.isEmpty())
 			return new MetaTypeProviderWrapper[0];
-		ArrayList results = new ArrayList();
-		for (int i = 0; i < refs.length; i++)
-			// search for services registered by the bundle
-			if (refs[i].getBundle() == _bundle) {
-				Object service = _context.getService(refs[i]);
+		Set<ServiceReference<Object>> serviceReferences = services.keySet();
+		Set<MetaTypeProviderWrapper> result = new HashSet<MetaTypeProviderWrapper>();
+		for (ServiceReference<Object> serviceReference : serviceReferences) {
+			if (serviceReference.getBundle() == _bundle) {
+				Object service = services.get(serviceReference);
+				// If the service is not a MetaTypeProvider, we're not interested in it.
 				if (service instanceof MetaTypeProvider) {
-					// found one that implements MetaTypeProvider
-					// wrap its information in a MetaTypeProviderWrapper
-					String pid = (String) refs[i].getProperty(Constants.SERVICE_PID);
-					boolean factory = service instanceof ManagedServiceFactory;
-					results.add(new MetaTypeProviderWrapper((MetaTypeProvider) service, pid, factory));
+					// Include the METATYPE_PID, if present, to return as part of getPids(). Also, include the 
+					// METATYPE_FACTORY_PID, if present, to return as part of getFactoryPids().
+					// The filter ensures at least one of these properties was set for a standalone MetaTypeProvider.
+					addMetaTypeProviderWrappers(MetaTypeProvider.METATYPE_PID, serviceReference, (MetaTypeProvider) service, false, result);
+					addMetaTypeProviderWrappers(MetaTypeProvider.METATYPE_FACTORY_PID, serviceReference, (MetaTypeProvider) service, true, result);
+					// If the service is a ManagedService, include the SERVICE_PID to return as part of getPids().
+					// The filter ensures the SERVICE_PID property was set.
+					if (service instanceof ManagedService) {
+						addMetaTypeProviderWrappers(Constants.SERVICE_PID, serviceReference, (MetaTypeProvider) service, false, result);
+					}
+					// If the service is a ManagedServiceFactory, include the SERVICE_PID to return as part of getFactoryPids().
+					// The filter ensures the SERVICE_PID property was set.
+					else if (service instanceof ManagedServiceFactory) {
+						addMetaTypeProviderWrappers(Constants.SERVICE_PID, serviceReference, (MetaTypeProvider) service, true, result);
+					}
 				}
-				// always unget a service.
-				// this leaves us open for the the service going away but who cares.
-				// we only use the service for a short period of time.
-				_context.ungetService(refs[i]);
 			}
-		return (MetaTypeProviderWrapper[]) results.toArray(new MetaTypeProviderWrapper[results.size()]);
+		}
+		return result.toArray(new MetaTypeProviderWrapper[result.size()]);
+	}
+
+	private void addMetaTypeProviderWrappers(String servicePropertyName, ServiceReference<Object> serviceReference, MetaTypeProvider service, boolean factory, Set<MetaTypeProviderWrapper> wrappers) {
+		String[] pids = getStringProperty(servicePropertyName, serviceReference.getProperty(servicePropertyName));
+		for (String pid : pids) {
+			wrappers.add(new MetaTypeProviderWrapper(service, pid, factory));
+		}
+	}
+
+	private String[] getStringProperty(String name, Object value) {
+		// Don't log a warning if the value is null. The filter guarantees at least one of the necessary properties
+		// is there. If others are not, this method will get called with value equal to null.
+		if (value == null)
+			return new String[0];
+		if (value instanceof String) {
+			return new String[] {(String) value};
+		}
+		if (value instanceof String[]) {
+			return (String[]) value;
+		}
+		Exception e = null;
+		if (value instanceof Collection) {
+			@SuppressWarnings("unchecked")
+			Collection<String> temp = (Collection<String>) value;
+			try {
+				return temp.toArray(new String[temp.size()]);
+			} catch (ArrayStoreException ase) {
+				e = ase;
+			}
+		}
+		log.log(LogService.LOG_WARNING, NLS.bind(MetaTypeMsg.INVALID_PID_METATYPE_PROVIDER_IGNORED, new Object[] {_bundle.getSymbolicName(), _bundle.getBundleId(), name, value}), e);
+		return new String[0];
 	}
 
 	// this is a simple class just used to temporarily store information about a provider
@@ -139,5 +166,24 @@ public class MetaTypeProviderTracker implements MetaTypeInformation {
 			this.pid = pid;
 			this.factory = factory;
 		}
+
+		@Override
+		public boolean equals(Object object) {
+			if (object == this)
+				return true;
+			if (!(object instanceof MetaTypeProviderWrapper))
+				return false;
+			MetaTypeProviderWrapper that = (MetaTypeProviderWrapper) object;
+			return this.provider.equals(that.provider) && this.pid.equals(that.pid) && this.factory == that.factory;
+		}
+
+		@Override
+		public int hashCode() {
+			int result = 17;
+			result = 31 * result + provider.hashCode();
+			result = 31 * result + pid.hashCode();
+			result = 31 * result + (factory ? 1 : 0);
+			return result;
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java
index 7b4db21..4bc0189 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,24 +15,29 @@ import java.security.*;
 import java.util.Hashtable;
 import javax.xml.parsers.SAXParserFactory;
 import org.osgi.framework.*;
+import org.osgi.service.log.LogService;
 import org.osgi.service.metatype.MetaTypeInformation;
 import org.osgi.service.metatype.MetaTypeService;
+import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * Implementation of MetaTypeService
  */
 public class MetaTypeServiceImpl implements MetaTypeService, SynchronousBundleListener {
 
-	BundleContext _context;
 	SAXParserFactory _parserFactory;
-	private Hashtable _mtps = new Hashtable(7);
+	private Hashtable<Long, MetaTypeInformation> _mtps = new Hashtable<Long, MetaTypeInformation>(7);
+
+	private final LogService logger;
+	private final ServiceTracker<Object, Object> metaTypeProviderTracker;
 
 	/**
 	 * Constructor of class MetaTypeServiceImpl.
 	 */
-	public MetaTypeServiceImpl(BundleContext context, SAXParserFactory parserFactory) {
-		this._context = context;
+	public MetaTypeServiceImpl(SAXParserFactory parserFactory, LogService logger, ServiceTracker<Object, Object> metaTypeProviderTracker) {
 		this._parserFactory = parserFactory;
+		this.logger = logger;
+		this.metaTypeProviderTracker = metaTypeProviderTracker;
 	}
 
 	/*
@@ -46,7 +51,7 @@ public class MetaTypeServiceImpl implements MetaTypeService, SynchronousBundleLi
 		try {
 			mti = getMetaTypeProvider(bundle);
 		} catch (IOException e) {
-			Logging.log(Logging.ERROR, "IOException in MetaTypeInformation:getMetaTypeInformation(Bundle bundle)"); //$NON-NLS-1$
+			logger.log(LogService.LOG_ERROR, "IOException in MetaTypeInformation:getMetaTypeInformation(Bundle bundle)"); //$NON-NLS-1$
 			e.printStackTrace();
 			mti = null;
 		}
@@ -62,13 +67,15 @@ public class MetaTypeServiceImpl implements MetaTypeService, SynchronousBundleLi
 			Long bID = new Long(b.getBundleId());
 			synchronized (_mtps) {
 				if (_mtps.containsKey(bID))
-					return (MetaTypeInformation) _mtps.get(bID);
-
-				MetaTypeInformation mti = (MetaTypeInformation) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-					public Object run() throws IOException {
-						MetaTypeInformationImpl impl = new MetaTypeInformationImpl(b, _parserFactory);
+					return _mtps.get(bID);
+				// Avoid synthetic accessor method warnings.
+				final LogService loggerTemp = this.logger;
+				final ServiceTracker<Object, Object> tracker = this.metaTypeProviderTracker;
+				MetaTypeInformation mti = AccessController.doPrivileged(new PrivilegedExceptionAction<MetaTypeInformation>() {
+					public MetaTypeInformation run() throws IOException {
+						MetaTypeInformationImpl impl = new MetaTypeInformationImpl(b, _parserFactory, loggerTemp);
 						if (!impl._isThereMeta)
-							return new MetaTypeProviderTracker(_context, b);
+							return new MetaTypeProviderTracker(b, loggerTemp, tracker);
 						return impl;
 					}
 				});
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java
index 7d70e2a..244412e 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@ import java.io.InputStream;
 import java.net.URL;
 import java.util.*;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
 import org.osgi.service.metatype.AttributeDefinition;
 import org.osgi.service.metatype.ObjectClassDefinition;
 
@@ -24,8 +23,6 @@ import org.osgi.service.metatype.ObjectClassDefinition;
  */
 public class ObjectClassDefinitionImpl extends LocalizationElement implements ObjectClassDefinition, Cloneable {
 
-	public static final int PID = 0;
-	public static final int FPID = 1;
 	public static final char LOCALE_SEP = '_';
 
 	String _name;
@@ -33,8 +30,8 @@ public class ObjectClassDefinitionImpl extends LocalizationElement implements Ob
 	String _description;
 
 	int _type;
-	Vector _required = new Vector(7);
-	Vector _optional = new Vector(7);
+	Vector<AttributeDefinitionImpl> _required = new Vector<AttributeDefinitionImpl>(7);
+	Vector<AttributeDefinitionImpl> _optional = new Vector<AttributeDefinitionImpl>(7);
 	Icon _icon;
 
 	/*
@@ -67,11 +64,11 @@ public class ObjectClassDefinitionImpl extends LocalizationElement implements Ob
 
 		ObjectClassDefinitionImpl ocd = new ObjectClassDefinitionImpl(_name, _description, _id, _type, _localization);
 		for (int i = 0; i < _required.size(); i++) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) _required.elementAt(i);
+			AttributeDefinitionImpl ad = _required.elementAt(i);
 			ocd.addAttributeDefinition((AttributeDefinitionImpl) ad.clone(), true);
 		}
 		for (int i = 0; i < _optional.size(); i++) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) _optional.elementAt(i);
+			AttributeDefinitionImpl ad = _optional.elementAt(i);
 			ocd.addAttributeDefinition((AttributeDefinitionImpl) ad.clone(), false);
 		}
 		if (_icon != null) {
@@ -141,15 +138,15 @@ public class ObjectClassDefinitionImpl extends LocalizationElement implements Ob
 			case ALL :
 			default :
 				atts = new AttributeDefinition[_required.size() + _optional.size()];
-				Enumeration e = _required.elements();
+				Enumeration<AttributeDefinitionImpl> e = _required.elements();
 				int i = 0;
 				while (e.hasMoreElements()) {
-					atts[i] = (AttributeDefinition) e.nextElement();
+					atts[i] = e.nextElement();
 					i++;
 				}
 				e = _optional.elements();
 				while (e.hasMoreElements()) {
-					atts[i] = (AttributeDefinition) e.nextElement();
+					atts[i] = e.nextElement();
 					i++;
 				}
 				return atts;
@@ -159,7 +156,7 @@ public class ObjectClassDefinitionImpl extends LocalizationElement implements Ob
 	/*
 	 * Method to add one new AD to ObjectClassDefinition.
 	 */
-	public void addAttributeDefinition(AttributeDefinition ad, boolean isRequired) {
+	void addAttributeDefinition(AttributeDefinitionImpl ad, boolean isRequired) {
 
 		if (isRequired) {
 			_required.addElement(ad);
@@ -174,8 +171,13 @@ public class ObjectClassDefinitionImpl extends LocalizationElement implements Ob
 	 * @see org.osgi.service.metatype.ObjectClassDefinition#getIcon(int)
 	 */
 	public InputStream getIcon(int sizeHint) throws IOException {
-
-		if ((_icon == null) || (_icon.getIconSize() != sizeHint)) {
+		// The parameter simply represents a requested size. This method should never return null if an
+		// icon exists.
+		// TODO This method may change further depending on the outcome of certain ongoing CPEG discussions.
+		// It is thought that users should be able to specify the same icon multiple times but of different
+		// sizes. This would require a change to the XML schema. This method would then return the icon with
+		// a size closest to the requested size.
+		if ((_icon == null)) {
 			return null;
 		}
 		Bundle b = _icon.getIconBundle();
@@ -189,40 +191,26 @@ public class ObjectClassDefinitionImpl extends LocalizationElement implements Ob
 	/**
 	 * Method to set the icon of ObjectClassDefinition.
 	 */
-	public void setIcon(Icon icon) {
+	void setIcon(Icon icon) {
 		this._icon = icon;
 	}
 
 	/**
-	 * Method to get the type of ObjectClassDefinition.
-	 */
-	int getType() {
-		return _type;
-	}
-
-	/**
-	 * Method to set the type of ObjectClassDefinition.
-	 */
-	void setType(int type) {
-		this._type = type;
-	}
-
-	/**
 	 * Method to set the resource bundle for this OCD and all its ADs.
 	 */
 	void setResourceBundle(String assignedLocale, Bundle bundle) {
 
 		_rb = getResourceBundle(assignedLocale, bundle);
 
-		Enumeration allADReqs = _required.elements();
+		Enumeration<AttributeDefinitionImpl> allADReqs = _required.elements();
 		while (allADReqs.hasMoreElements()) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) allADReqs.nextElement();
+			AttributeDefinitionImpl ad = allADReqs.nextElement();
 			ad.setResourceBundle(_rb);
 		}
 
-		Enumeration allADOpts = _optional.elements();
+		Enumeration<AttributeDefinitionImpl> allADOpts = _optional.elements();
 		while (allADOpts.hasMoreElements()) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) allADOpts.nextElement();
+			AttributeDefinitionImpl ad = allADOpts.nextElement();
 			ad.setResourceBundle(_rb);
 		}
 	}
@@ -231,8 +219,10 @@ public class ObjectClassDefinitionImpl extends LocalizationElement implements Ob
 	 * Internal Method - to get resource bundle.
 	 */
 	private ResourceBundle getResourceBundle(String locale, final Bundle bundle) {
-
-		String resourceBase = (_localization == null ? Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME : _localization);
+		// Determine the base name of the bundle localization property files.
+		// If the <MetaData> 'localization' attribute was not specified,
+		// use the Bundle-Localization manifest header value instead if it exists.
+		String resourceBase = _localization != null ? _localization : MetaTypeProviderImpl.getBundleLocalization(bundle);
 
 		// There are seven searching candidates possible:
 		// baseName + 
diff --git a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java
index 51032b1..da829c5 100644
--- a/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java
+++ b/eclipse/plugins/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,67 +10,265 @@
  *******************************************************************************/
 package org.eclipse.equinox.metatype;
 
-import java.util.Vector;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.*;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.service.log.LogService;
+import org.osgi.service.metatype.AttributeDefinition;
 
 public class ValueTokenizer {
+	private static final char DELIMITER = ',';
+	private static final char ESCAPE = '\\';
 
-	private static final char SEPARATE = ',';
-	private static final char CONTROL = '\\';
-
-	Vector _value_vector = new Vector(7);
+	private final LogService logger;
+	private final List<String> values = new ArrayList<String>();
 
 	/*
 	 * Constructor of class ValueTokenizer
 	 */
-	public ValueTokenizer(String values_str) {
-
-		if (values_str != null) {
-
-			StringBuffer buffer = new StringBuffer(""); //$NON-NLS-1$
-			for (int i = 0; i < values_str.length(); i++) {
-				if (values_str.charAt(i) == CONTROL) {
+	public ValueTokenizer(String values_str, LogService logger) {
+		this.logger = logger;
+		if (values_str == null)
+			return;
+		// The trick is to strip out unescaped whitespace characters before and
+		// after the input string as well as before and after each 
+		// individual token within the input string without losing any escaped 
+		// whitespace characters. Whitespace between two non-whitespace
+		// characters may or may not be escaped. Also, any character may be
+		// escaped. The escape character is '\'. The delimiter is ','.
+		StringBuffer buffer = new StringBuffer();
+		// Loop over the characters within the input string and extract each
+		// value token.
+		for (int i = 0; i < values_str.length(); i++) {
+			char c1 = values_str.charAt(i);
+			switch (c1) {
+				case DELIMITER :
+					// When the delimiter is encountered, add the extracted 
+					// token to the result and prepare the buffer to receive the
+					// next token.
+					values.add(buffer.toString());
+					buffer.delete(0, buffer.length());
+					break;
+				case ESCAPE :
+					// When the escape is encountered, add the immediately
+					// following character to the token, unless the end of the
+					// input has been reached. Note this will result in loop 
+					// counter 'i' being incremented twice, once here and once 
+					// at the end of the loop.
 					if (i + 1 < values_str.length()) {
 						buffer.append(values_str.charAt(++i));
-						continue;
+					} else {
+						// If the ESCAPE character occurs as the last character
+						// of the string, log the error and ignore it.
+						logger.log(LogService.LOG_ERROR, "ValueTokenizer.ValueTokenizer(String) " + MetaTypeMsg.TOKENIZER_GOT_INVALID_DATA); //$NON-NLS-1$
+					}
+					break;
+				default :
+					// For all other characters, add them to the current token
+					// unless dealing with unescaped whitespace at the beginning
+					// or end. We know the whitespace is unescaped because it
+					// would have been handled in the ESCAPE case otherwise.
+					if (Character.isWhitespace(c1)) {
+						// Ignore unescaped whitespace at the beginning of the
+						// token.
+						if (buffer.length() == 0) {
+							continue;
+						}
+						// If the whitespace is not at the beginning, look
+						// forward, starting with the next character, to see if 
+						// it's in the middle or at the end. Unescaped 
+						// whitespace in the middle is okay.
+						for (int j = i + 1; j < values_str.length(); j++) {
+							// Keep looping until the end of the string is
+							// reached or a non-whitespace character other than
+							// the escape is seen.
+							char c2 = values_str.charAt(j);
+							if (!Character.isWhitespace(c2)) {
+								// If the current character is not the DELIMITER, all whitespace 
+								// characters are significant and should be added to the token.
+								// Otherwise, they're at the end and should be ignored. But watch
+								// out for an escape character at the end of the input. Ignore it
+								// and any previous insignificant whitespace if it exists.
+								if (c2 == ESCAPE && j + 1 >= values_str.length()) {
+									continue;
+								}
+								if (c2 != DELIMITER) {
+									buffer.append(values_str.substring(i, j));
+								}
+								// Let loop counter i catch up with the inner loop but keep in
+								// mind it will still be incremented at the end of the outer loop.
+								i = j - 1;
+								break;
+							}
+						}
+					} else {
+						// For non-whitespace characters.
+						buffer.append(c1);
 					}
-					// CONTROL char should not occur in last char.
-					Logging.log(Logging.ERROR, this, "ValueTokenizer(String)", //$NON-NLS-1$
-							MetaTypeMsg.TOKENIZER_GOT_INVALID_DATA);
-					// It's an invalid char, but since it's the last one,
-					// just ignore it.
-					continue;
-				}
-				if (values_str.charAt(i) == SEPARATE) {
-					_value_vector.addElement(buffer.toString().trim());
-					buffer = new StringBuffer(""); //$NON-NLS-1$
-					continue;
-				}
-				buffer.append(values_str.charAt(i));
 			}
-			// Don't forget the final one.
-			_value_vector.addElement(buffer.toString().trim());
 		}
+		// Don't forget to add the last token.
+		values.add(buffer.toString());
 	}
 
 	/*
 	 * Method to return values as Vector.
 	 */
-	public Vector getValuesAsVector() {
-		return _value_vector;
+	public Collection<String> getValues() {
+		return Collections.unmodifiableList(values);
 	}
 
 	/*
 	 * Method to return values as String[] or null.
 	 */
 	public String[] getValuesAsArray() {
+		if (values.isEmpty()) {
+			return null;
+		}
+		return values.toArray(new String[values.size()]);
+	}
 
-		String[] value_array = null;
-		if ((_value_vector != null) && (_value_vector.size() != 0)) {
-
-			value_array = new String[_value_vector.size()];
-			_value_vector.toArray(value_array);
+	public String getValuesAsString() {
+		if (values.isEmpty()) {
+			return null;
+		}
+		if (values.size() == 1) {
+			return values.get(0);
+		}
+		StringBuffer buffer = new StringBuffer(values.get(0));
+		for (int i = 1; i < values.size(); i++) {
+			buffer.append(',');
+			buffer.append(values.get(i));
 		}
+		return buffer.toString();
+	}
 
-		return value_array;
+	public String validate(AttributeDefinitionImpl ad) {
+		// An empty list means the original value was null. Null is never valid.
+		if (values.isEmpty()) {
+			return MetaTypeMsg.NULL_IS_INVALID;
+		}
+		try {
+			// A value must match the cardinality.
+			int cardinality = Math.abs(ad.getCardinality());
+			// If the cardinality is zero, the value must contain one and only one token.
+			if (cardinality == 0) {
+				if (values.size() != 1) {
+					return NLS.bind(MetaTypeMsg.CARDINALITY_VIOLATION, new Object[] {getValuesAsString(), values.size(), 1, 1});
+				}
+			}
+			// Otherwise, the number of tokens must be between 0 and cardinality, inclusive.
+			else if (values.size() > cardinality) {
+				return NLS.bind(MetaTypeMsg.CARDINALITY_VIOLATION, new Object[] {getValuesAsString(), values.size(), 0, cardinality});
+			}
+			// Now inspect each token.
+			for (Iterator<String> i = values.iterator(); i.hasNext();) {
+				String s = i.next();
+				// If options were declared and the value does not match one of them, the value is not valid.
+				if (!ad._values.isEmpty() && !ad._values.contains(s)) {
+					return NLS.bind(MetaTypeMsg.VALUE_OUT_OF_OPTION, s);
+				}
+				// Check the type. Also check the range if min or max were declared.
+				boolean rangeError = false;
+				switch (ad._dataType) {
+					case AttributeDefinition.PASSWORD :
+					case AttributeDefinition.STRING :
+						if (ad._minValue != null && s.length() < (Integer) ad._minValue) {
+							rangeError = true;
+						} else if (ad._maxValue != null && s.length() > (Integer) ad._maxValue) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.INTEGER :
+						Integer intVal = new Integer(s);
+						if (ad._minValue != null && intVal.compareTo((Integer) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && intVal.compareTo((Integer) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.LONG :
+						Long longVal = new Long(s);
+						if (ad._minValue != null && longVal.compareTo((Long) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && longVal.compareTo((Long) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.DOUBLE :
+						Double doubleVal = new Double(s);
+						if (ad._minValue != null && doubleVal.compareTo((Double) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && doubleVal.compareTo((Double) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.BOOLEAN :
+						// Any string can be converted into a boolean via Boolean.valueOf(String).
+						// Seems unnecessary to impose any further restrictions.
+						break;
+					case AttributeDefinition.CHARACTER :
+						Character charVal = new Character(s.charAt(0));
+						if (ad._minValue != null && charVal.compareTo((Character) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && charVal.compareTo((Character) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.FLOAT :
+						Float floatVal = new Float(s);
+						if (ad._minValue != null && floatVal.compareTo((Float) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && floatVal.compareTo((Float) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.SHORT :
+						Short shortVal = new Short(s);
+						if (ad._minValue != null && shortVal.compareTo((Short) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && shortVal.compareTo((Short) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.BYTE :
+						Byte byteVal = new Byte(s);
+						if (ad._minValue != null && byteVal.compareTo((Byte) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && byteVal.compareTo((Byte) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.BIGDECIMAL :
+						BigDecimal bigDecVal = new BigDecimal(s);
+						if (ad._minValue != null && bigDecVal.compareTo((BigDecimal) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && bigDecVal.compareTo((BigDecimal) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					case AttributeDefinition.BIGINTEGER :
+						BigInteger bigIntVal = new BigInteger(s);
+						if (ad._minValue != null && bigIntVal.compareTo((BigInteger) ad._minValue) < 0) {
+							rangeError = true;
+						} else if (ad._maxValue != null && bigIntVal.compareTo((BigInteger) ad._maxValue) > 0) {
+							rangeError = true;
+						}
+						break;
+					default :
+						throw new IllegalStateException();
+				}
+				if (rangeError) {
+					return (NLS.bind(MetaTypeMsg.VALUE_OUT_OF_RANGE, s));
+				}
+			}
+			// No problems detected
+			return ""; //$NON-NLS-1$
+		} catch (Throwable t) {
+			String message = NLS.bind(MetaTypeMsg.EXCEPTION_MESSAGE, t.getClass().getName(), t.getMessage());
+			logger.log(LogService.LOG_DEBUG, message, t);
+			return message;
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF
index 2eb1090..ba932cf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.artifact.repository;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.100.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.artifact.repository.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -10,8 +10,7 @@ Export-Package: org.eclipse.equinox.internal.p2.artifact.processing;x-friends:="
  org.eclipse.equinox.internal.p2.artifact.processors.md5;x-internal:=true,
  org.eclipse.equinox.internal.p2.artifact.processors.pack200;x-friends:="org.eclipse.equinox.p2.artifact.processors,org.eclipse.equinox.p2.artifact.optimizers",
  org.eclipse.equinox.internal.p2.artifact.repository;
-  x-friends:="org.eclipse.equinox.p2.metadata.generator,
-   org.eclipse.equinox.p2.publisher,
+  x-friends:="org.eclipse.equinox.p2.publisher,
    org.eclipse.equinox.p2.reconciler.dropins,
    org.eclipse.equinox.p2.ui,
    org.eclipse.equinox.p2.directorywatcher,
@@ -22,12 +21,12 @@ Export-Package: org.eclipse.equinox.internal.p2.artifact.processing;x-friends:="
    org.eclipse.equinox.p2.directorywatcher,
    org.eclipse.equinox.p2.updatesite,
    org.eclipse.equinox.p2.publisher,
-   org.eclipse.equinox.p2.extensionlocation",
+   org.eclipse.equinox.p2.extensionlocation,
+   org.eclipse.equinox.p2.repository.tools",
  org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing;
   x-friends:="org.eclipse.equinox.p2.artifact.processors,
    org.eclipse.equinox.p2.artifact.optimizers,
    org.eclipse.equinox.p2.artifact.repository,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.ui,
    org.eclipse.equinox.p2.publisher,
    org.eclipse.equinox.p2.updatesite"
@@ -50,6 +49,7 @@ Import-Package: javax.xml.parsers,
  org.eclipse.equinox.p2.repository.artifact.spi;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.spi;version="[2.0.0,3.0.0)",
  org.eclipse.internal.provisional.equinox.p2.jarprocessor;resolution:=optional,
+ org.eclipse.osgi.service.datalocation;version="[1.3.0, 2.0.0)",
  org.eclipse.osgi.signedcontent;version="1.0.0",
  org.eclipse.osgi.util;version="1.1.0",
  org.osgi.framework;version="1.3.0",
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/build.properties
index 57d41dd..4f2941d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/pom.xml
index 1427534..c21afaa 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.artifact.repository</artifactId>
-  <version>1.1.0.qualifier</version>
+  <version>1.1.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processing/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processing/messages.properties
index b95da02..68d5286 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processing/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processing/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2005, 2008 IBM Corporation and others.
+#  Copyright (c) 2005, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -9,5 +9,5 @@
 #      IBM Corporation - initial API and implementation
 ###############################################################################
 Can_not_create_temp_dir=Cannot create temporary working directory {0}.
-Can_not_delete_temp_dir=Cannot create temporary working directory {1}.
+Can_not_delete_temp_dir=Cannot delete temporary working directory {1}.
 Empty_stream=Empty intermediate incoming stream. Probably zero length input.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/MD5Verifier.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/MD5Verifier.java
index 49aa609..36406ca 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/MD5Verifier.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/MD5Verifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 compeople AG and others.
+ * Copyright (c) 2007, 2011 compeople AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.equinox.internal.p2.artifact.repository.Activator;
 import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
 import org.eclipse.equinox.p2.repository.artifact.IProcessingStepDescriptor;
 import org.eclipse.osgi.util.NLS;
@@ -78,7 +79,7 @@ public class MD5Verifier extends ProcessingStep {
 
 		// if the hashes don't line up set the status to error.
 		if (!buf.toString().equals(expectedMD5))
-			setStatus(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.Error_unexpected_hash, expectedMD5, buf)));
+			setStatus(new Status(IStatus.ERROR, Activator.ID, ProvisionException.ARTIFACT_MD5_NOT_MATCH, NLS.bind(Messages.Error_unexpected_hash, expectedMD5, buf), null));
 		super.close();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/Messages.java
index 41616ab..910d4d3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/messages.properties
index f82bb99..ff118a0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/md5/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2008, 2009 IBM Corporation and others.
+#  Copyright (c) 2008, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/pack200/Pack200ProcessorStep.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/pack200/Pack200ProcessorStep.java
index fa96f4b..5397b2c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/pack200/Pack200ProcessorStep.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/processors/pack200/Pack200ProcessorStep.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 compeople AG and others.
+ * Copyright (c) 2007, 2010 compeople AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Activator.java
index 043ba76..3f9a1c5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,14 +10,27 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.artifact.repository;
 
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.osgi.service.datalocation.Location;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
 public class Activator implements BundleActivator {
+
 	public static final String ID = "org.eclipse.equinox.p2.artifact.repository"; //$NON-NLS-1$
+	public static final String ENABLE_ARTIFACT_LOCKING = "eclipse.p2.internal.simple.artifact.repository.locking"; //$NON-NLS-1$
 	public static final String REPO_PROVIDER_XPT = ID + '.' + "artifactRepositories"; //$NON-NLS-1$
 
+	private Map<URI, Location> locationCache = null;
+
 	private static BundleContext context;
+	private static Activator instance;
 
 	public static BundleContext getContext() {
 		return Activator.context;
@@ -25,9 +38,70 @@ public class Activator implements BundleActivator {
 
 	public void start(BundleContext aContext) throws Exception {
 		Activator.context = aContext;
+		Activator.instance = this;
+		this.locationCache = new HashMap<URI, Location>();
 	}
 
 	public void stop(BundleContext aContext) throws Exception {
 		Activator.context = null;
+		Activator.instance = null;
+		this.locationCache = null;
+	}
+
+	public static Activator getInstance() {
+		return Activator.instance;
 	}
+
+	public boolean enableArtifactLocking() {
+		String property = getContext().getProperty(ENABLE_ARTIFACT_LOCKING);
+		if (property == null || property.length() == 0)
+			return false; // return false by default;
+		Boolean valueOf = Boolean.valueOf(property);
+		if (valueOf != null)
+			return valueOf.booleanValue();
+		return false;
+	}
+
+	/**
+	 * Returns the lock location for a given artifact repository
+	 * @param repositoryLocation A URI pointing to an artifact repository.  Currently only
+	 * file:// repositories are supported
+	 * @return The Location that can be locked when using an artifact repository
+	 * @throws IOException Thrown if a Location can not be created
+	 */
+	public synchronized Location getLockLocation(URI repositoryLocation) throws IOException {
+		if (locationCache.containsKey(repositoryLocation)) {
+			return locationCache.get(repositoryLocation);
+		}
+		Location anyLoc = (Location) ServiceHelper.getService(Activator.getContext(), Location.class.getName());
+		File repositoryFile = URIUtil.toFile(repositoryLocation);
+		Location location = anyLoc.createLocation(null, getLockFile(repositoryLocation).toURL(), isReadOnly(repositoryFile));
+		location.set(getLockFile(repositoryLocation).toURL(), false);
+		locationCache.put(repositoryLocation, location);
+		return location;
+	}
+
+	/**
+	 * Determines if a location is read only by checking the file, and looking
+	 * at the parent chain if necessary.
+	 */
+	private boolean isReadOnly(File file) {
+		if (file == null)
+			return true; // If we've reached the root, then return true
+		else if (file.canWrite())
+			return false; // If we can write to this area, then it's not read-only
+		else if (file.exists())
+			return true; // if we can't write && file exists, then this is a read only area
+		else
+			return isReadOnly(file.getParentFile());
+	}
+
+	private File getLockFile(URI repositoryLocation) throws IOException {
+		if (!URIUtil.isFileURI(repositoryLocation)) {
+			throw new IOException("Cannot lock a non file based repository"); //$NON-NLS-1$
+		}
+		URI result = URIUtil.append(repositoryLocation, ".artifactlock"); //$NON-NLS-1$
+		return URIUtil.toFile(result);
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryComponent.java
index 6a0a015..d1576bc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryComponent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryManager.java
index 155f09f..e75e6b4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  *  Contributors:
  *   IBM Corporation - initial API and implementation
  *   Genuitec LLC - various bug fixes
+ *   Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.artifact.repository;
 
@@ -41,7 +42,7 @@ public class ArtifactRepositoryManager extends AbstractRepositoryManager<IArtifa
 	}
 
 	public IArtifactRequest createMirrorRequest(IArtifactKey key, IArtifactRepository destination, Map<String, String> destinationDescriptorProperties, Map<String, String> destinationRepositoryProperties) {
-		return new MirrorRequest(key, destination, destinationDescriptorProperties, destinationRepositoryProperties);
+		return new MirrorRequest(key, destination, destinationDescriptorProperties, destinationRepositoryProperties, getTransport());
 	}
 
 	public IArtifactRepository createRepository(URI location, String name, String type, Map<String, String> properties) throws ProvisionException {
@@ -65,7 +66,7 @@ public class ArtifactRepositoryManager extends AbstractRepositoryManager<IArtifa
 		if (factory == null)
 			return null;
 		factory.setAgent(agent);
-		return factory.load(location, flags, monitor.newChild(10));
+		return factory.load(location, flags, monitor);
 	}
 
 	protected String getBundleId() {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRequest.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRequest.java
index 2248eab..35c0b0a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRequest.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/ArtifactRequest.java
@@ -7,10 +7,12 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.artifact.repository;
 
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.p2.metadata.IArtifactKey;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRequest;
@@ -24,10 +26,11 @@ public abstract class ArtifactRequest implements IArtifactRequest {
 	protected String resolvedKey;
 	protected IArtifactRepository source;
 	protected IStatus result = DEFAULT_STATUS;
+	protected Transport transport = null;
 
-	public ArtifactRequest(IArtifactKey key) {
+	public ArtifactRequest(IArtifactKey key, Transport transport) {
 		artifact = key;
-		// TODO do we need to make this configurable? for now set default request handler to ECF
+		this.transport = transport;
 	}
 
 	public IArtifactKey getArtifactKey() {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java
index 928d34b..68dbd1d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,8 @@ public class CompositeArtifactRepository extends AbstractArtifactRepository impl
 	static final public String JAR_EXTENSION = ".jar"; //$NON-NLS-1$
 	static final public String CONTENT_FILENAME = "compositeArtifacts"; //$NON-NLS-1$
 	public static final String PI_REPOSITORY_TYPE = "compositeArtifactRepository"; //$NON-NLS-1$
+	static final public String PROP_ATOMIC_LOADING = "p2.atomic.composite.loading"; //$NON-NLS-1$
+	static final public boolean ATOMIC_LOADING_DEFAULT = false;
 
 	// keep a list of the child URIs. they can be absolute or relative. they may or may not point
 	// to a valid reachable repo
@@ -83,11 +85,14 @@ public class CompositeArtifactRepository extends AbstractArtifactRepository impl
 	/**
 	 * This is only called by the parser when loading a repository.
 	 */
-	CompositeArtifactRepository(IArtifactRepositoryManager manager, CompositeRepositoryState state) {
+	CompositeArtifactRepository(IArtifactRepositoryManager manager, CompositeRepositoryState state, IProgressMonitor monitor) throws ProvisionException {
 		super(manager.getAgent(), state.getName(), state.getType(), state.getVersion(), state.getLocation(), state.getDescription(), state.getProvider(), state.getProperties());
 		this.manager = manager;
-		for (int i = 0; i < state.getChildren().length; i++)
-			addChild(state.getChildren()[i], false);
+		SubMonitor sub = SubMonitor.convert(monitor, 100 * state.getChildren().length);
+		List<URI> repositoriesToBeRemovedOnFailure = new ArrayList<URI>();
+		boolean failOnChildFailure = shouldFailOnChildFailure(state);
+		for (URI child : state.getChildren())
+			addChild(child, false, sub.newChild(100), failOnChildFailure, repositoriesToBeRemovedOnFailure);
 	}
 
 	/**
@@ -143,21 +148,38 @@ public class CompositeArtifactRepository extends AbstractArtifactRepository impl
 	}
 
 	public void addChild(URI childURI) {
-		addChild(childURI, true);
+		try {
+			addChild(childURI, true, null, false, null);
+		} catch (ProvisionException e) {
+			//already logged
+		}
 	}
 
-	private void addChild(URI childURI, boolean save) {
+	//successfully loaded repo will be added to the list repositoriesToBeRemovedOnFailure if the list is not null and the repo wasn't previously loaded
+	private void addChild(URI childURI, boolean save, IProgressMonitor monitor, boolean propagateException, List<URI> repositoriesToBeRemovedOnFailure) throws ProvisionException {
+		SubMonitor sub = SubMonitor.convert(monitor);
 		URI absolute = URIUtil.makeAbsolute(childURI, getLocation());
-		if (childrenURIs.contains(childURI) || childrenURIs.contains(absolute))
+		if (childrenURIs.contains(childURI) || childrenURIs.contains(absolute)) {
+			sub.done();
 			return;
+		}
 		childrenURIs.add(childURI);
 		if (save)
 			save();
 		try {
-			IArtifactRepository repo = load(childURI);
+			boolean currentLoaded = getManager().contains(absolute);
+			IArtifactRepository repo = load(childURI, sub);
+			if (!currentLoaded && propagateException)
+				repositoriesToBeRemovedOnFailure.add(absolute);
 			loadedRepos.add(new ChildInfo(repo));
 		} catch (ProvisionException e) {
+			//repository failed to load. fall through
 			LogHelper.log(e);
+			if (propagateException) {
+				removeFromRepoManager(repositoriesToBeRemovedOnFailure);
+				String msg = NLS.bind(Messages.io_failedRead, getLocation());
+				throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, e));
+			}
 		}
 	}
 
@@ -183,7 +205,7 @@ public class CompositeArtifactRepository extends AbstractArtifactRepository impl
 		// (absolute/relative) to see if it really is in the list.
 		URI other = childURI.isAbsolute() ? URIUtil.makeRelative(childURI, getLocation()) : URIUtil.makeAbsolute(childURI, getLocation());
 		if (!removed)
-			childrenURIs.remove(other);
+			removed = childrenURIs.remove(other);
 
 		if (removed) {
 			// we removed the child from the list so remove the associated repo object as well
@@ -225,35 +247,49 @@ public class CompositeArtifactRepository extends AbstractArtifactRepository impl
 	/**
 	 * Composite repositories should be unable to directly modify their child repositories
 	 */
-	public synchronized void addDescriptor(IArtifactDescriptor descriptor) {
+	public synchronized void addDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
 		throw new UnsupportedOperationException(Messages.exception_unsupportedAddToComposite);
 	}
 
 	/**
 	 * Composite repositories should be unable to directly modify their child repositories
 	 */
-	public void addDescriptors(IArtifactDescriptor[] descriptors) {
+	public void addDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
 		throw new UnsupportedOperationException(Messages.exception_unsupportedAddToComposite);
 	}
 
 	/**
 	 * Composite repositories should be unable to directly modify their child repositories
 	 */
-	public void removeDescriptor(IArtifactKey key) {
+	public void removeDescriptor(IArtifactKey key, IProgressMonitor monitor) {
 		throw new UnsupportedOperationException(Messages.exception_unsupportedRemoveFromComposite);
 	}
 
 	/**
 	 * Composite repositories should be unable to directly modify their child repositories
 	 */
-	public void removeDescriptor(IArtifactDescriptor descriptor) {
+	public void removeDescriptors(IArtifactKey[] keys, IProgressMonitor monitor) {
 		throw new UnsupportedOperationException(Messages.exception_unsupportedRemoveFromComposite);
 	}
 
 	/**
 	 * Composite repositories should be unable to directly modify their child repositories
 	 */
-	public synchronized void removeAll() {
+	public void removeDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException(Messages.exception_unsupportedRemoveFromComposite);
+	}
+
+	/**
+	 * Composite repositories should be unable to directly modify their child repositories
+	 */
+	public void removeDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException(Messages.exception_unsupportedRemoveFromComposite);
+	}
+
+	/**
+	 * Composite repositories should be unable to directly modify their child repositories
+	 */
+	public synchronized void removeAll(IProgressMonitor monitor) {
 		throw new UnsupportedOperationException(Messages.exception_unsupportedRemoveFromComposite);
 	}
 
@@ -431,11 +467,11 @@ public class CompositeArtifactRepository extends AbstractArtifactRepository impl
 		}
 	}
 
-	private IArtifactRepository load(URI repoURI) throws ProvisionException {
+	private IArtifactRepository load(URI repoURI, IProgressMonitor monitor) throws ProvisionException {
 		// make sure we are dealing with an absolute location
 		repoURI = URIUtil.makeAbsolute(repoURI, getLocation());
 		boolean loaded = getManager().contains(repoURI);
-		IArtifactRepository repo = getManager().loadRepository(repoURI, null);
+		IArtifactRepository repo = getManager().loadRepository(repoURI, monitor);
 		if (!loaded) {
 			//set enabled to false so repositories do not get polled twice
 			getManager().setEnabled(repoURI, false);
@@ -577,4 +613,24 @@ public class CompositeArtifactRepository extends AbstractArtifactRepository impl
 			result = Status.OK_STATUS;
 		return result;
 	}
+
+	private void removeFromRepoManager(List<URI> currentLoadedRepositories) {
+		if (currentLoadedRepositories == null)
+			return;
+		for (URI loadedChild : currentLoadedRepositories) {
+			manager.removeRepository(loadedChild);
+		}
+	}
+
+	private boolean shouldFailOnChildFailure(CompositeRepositoryState state) {
+		Map<String, String> repoProperties = state.getProperties();
+		boolean failOnChildFailure = ATOMIC_LOADING_DEFAULT;
+		if (repoProperties != null) {
+			String value = repoProperties.get(PROP_ATOMIC_LOADING);
+			if (value != null) {
+				failOnChildFailure = Boolean.valueOf(value).booleanValue();
+			}
+		}
+		return failOnChildFailure;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepositoryFactory.java
index 180ed01..78b8be2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,7 +88,7 @@ public class CompositeArtifactRepositoryFactory extends ArtifactRepositoryFactor
 			if (!PROTOCOL_FILE.equals(location.getScheme()) && (flags & IRepositoryManager.REPOSITORY_HINT_MODIFIABLE) > 0)
 				return null;
 
-			File localFile = getLocalFile(location, sub.newChild(300));
+			File localFile = getLocalFile(location, sub.newChild(100));
 			InputStream inStream = new BufferedInputStream(new FileInputStream(localFile));
 			JarInputStream jarStream = null;
 			try {
@@ -106,13 +106,14 @@ public class CompositeArtifactRepositoryFactory extends ArtifactRepositoryFactor
 						throw new IOException(NLS.bind(Messages.io_invalidLocation, location.getPath()));
 				}
 				//parse the repository descriptor file
-				sub.setWorkRemaining(100);
+				sub.setWorkRemaining(300);
 				InputStream descriptorStream = jarStream != null ? jarStream : inStream;
 				CompositeRepositoryIO io = new CompositeRepositoryIO();
 				CompositeRepositoryState resultState = io.read(localFile.toURL(), descriptorStream, CompositeArtifactRepository.PI_REPOSITORY_TYPE, sub.newChild(100));
 				if (resultState.getLocation() == null)
 					resultState.setLocation(location);
-				CompositeArtifactRepository result = new CompositeArtifactRepository(getManager(), resultState);
+				// Spending half the time in creating the repo is due to the loading of the children that happens during that period
+				CompositeArtifactRepository result = new CompositeArtifactRepository(getManager(), resultState, sub.newChild(200));
 				if (Tracing.DEBUG_METADATA_PARSING) {
 					time += System.currentTimeMillis();
 					Tracing.debug(debugMsg + "time (ms): " + time); //$NON-NLS-1$ 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Messages.java
index 72dedad..da8c1f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,8 @@ public class Messages extends NLS {
 
 	public static String retryRequest;
 
+	public static String error_copying_local_file;
+
 	static {
 		// initialize resource bundles
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorRequest.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorRequest.java
index 1262780..873c3ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorRequest.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorRequest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *  	Compeople AG (Stefan Liebig) - various ongoing maintenance
  *   	Genuitec LLC - various bug fixes
+ *      Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.artifact.repository;
 
@@ -20,7 +21,7 @@ import java.util.Map;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactDescriptor;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStepHandler;
 import org.eclipse.equinox.internal.provisional.p2.repository.IStateful;
 import org.eclipse.equinox.p2.core.ProvisionException;
@@ -34,6 +35,12 @@ import org.eclipse.osgi.util.NLS;
  * A request to mirror (copy) an artifact into a given destination artifact repository.
  */
 public class MirrorRequest extends ArtifactRequest {
+
+	/**
+	 * Maximum number of times a request for a single artifact should be tried
+	 */
+	private static final int MAX_RETRY_REQUEST = 200;
+
 	/**
 	 * The name of a repository property on an artifact repository, indicating the base URI
 	 * to be used for reporting download statistics.
@@ -54,8 +61,8 @@ public class MirrorRequest extends ArtifactRequest {
 	private final Map<String, String> targetRepositoryProperties;
 	protected IArtifactDescriptor descriptor;
 
-	public MirrorRequest(IArtifactKey key, IArtifactRepository targetRepository, Map<String, String> targetDescriptorProperties, Map<String, String> targetRepositoryProperties) {
-		super(key);
+	public MirrorRequest(IArtifactKey key, IArtifactRepository targetRepository, Map<String, String> targetDescriptorProperties, Map<String, String> targetRepositoryProperties, Transport transport) {
+		super(key, transport);
 		target = targetRepository;
 		if (targetDescriptorProperties == null || targetDescriptorProperties.isEmpty()) {
 			this.targetDescriptorProperties = null;
@@ -174,10 +181,15 @@ public class MirrorRequest extends ArtifactRequest {
 	protected IStatus transfer(IArtifactDescriptor destinationDescriptor, IArtifactDescriptor sourceDescriptor, IProgressMonitor monitor) {
 		IStatus status = Status.OK_STATUS;
 		// go until we get one (OK), there are no more mirrors to consider or the operation is cancelled.
+		// Put a hard limit of MAX_RETRY_REQUEST so we don't end up in an infinite loop.  
+		// Really, if you've tried MAX_RETRY_REQUEST times without success, it's time to give up
+		// TODO Should we log that we gave up because of the retry count?
 		// TODO this needs to be redone with a much better mirror management scheme.
+
+		int counter = 0;
 		do {
 			status = transferSingle(destinationDescriptor, sourceDescriptor, monitor);
-		} while (status.getSeverity() == IStatus.ERROR && status.getCode() == IArtifactRepository.CODE_RETRY);
+		} while (status.getSeverity() == IStatus.ERROR && status.getCode() == IArtifactRepository.CODE_RETRY && counter++ < MAX_RETRY_REQUEST);
 		if (status.isOK())
 			collectStats(sourceDescriptor, monitor);
 		return status;
@@ -201,7 +213,7 @@ public class MirrorRequest extends ArtifactRequest {
 			return;
 		}
 		try {
-			RepositoryTransport.getInstance().getLastModified(statsURI, monitor);
+			transport.getLastModified(statsURI, monitor);
 		} catch (FileNotFoundException e) {
 			//ignore because it is expected that the statistics URI doesn't represent an existing file
 		} catch (Exception e) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java
index 2d4ca3c..3af237b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/MirrorSelector.java
@@ -21,7 +21,7 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
 import org.eclipse.equinox.internal.p2.core.helpers.Tracing;
 import org.eclipse.equinox.internal.p2.repository.DownloadStatus;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.p2.repository.IRepository;
 import org.w3c.dom.*;
 import org.xml.sax.InputSource;
@@ -153,13 +153,16 @@ public class MirrorSelector {
 
 	private final Random random = new Random();
 
+	private final Transport transport;
+
 	/**
 	 * Constructs a mirror support class for the given repository. Mirrors are
 	 * not contacted and the mirrorsURL document is not parsed until a
 	 * mirror location request is sent.
 	 */
-	public MirrorSelector(IRepository<?> repository) {
+	public MirrorSelector(IRepository<?> repository, Transport transport) {
 		this.repository = repository;
+		this.transport = transport;
 		try {
 			String base = repository.getProperties().get(IRepository.PROP_MIRRORS_BASE_URL);
 			if (base != null) {
@@ -200,7 +203,6 @@ public class MirrorSelector {
 			DocumentBuilder builder = domFactory.newDocumentBuilder();
 			Document document = null;
 			// Use Transport to read the mirrors list (to benefit from proxy support, authentication, etc)
-			RepositoryTransport transport = RepositoryTransport.getInstance();
 			InputSource input = new InputSource(mirrorsURL);
 			input.setByteStream(transport.stream(URIUtil.fromString(mirrorsURL), monitor));
 			document = builder.parse(input);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java
index 740775e..74f18b1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.artifact.repository;
 
@@ -14,6 +15,7 @@ import java.io.OutputStream;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.artifact.processors.md5.MD5Verifier;
 import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep;
 import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStepHandler;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
@@ -23,8 +25,8 @@ import org.eclipse.osgi.util.NLS;
 public class RawMirrorRequest extends MirrorRequest {
 	protected IArtifactDescriptor sourceDescriptor, targetDescriptor;
 
-	public RawMirrorRequest(IArtifactDescriptor sourceDescriptor, IArtifactDescriptor targetDescriptor, IArtifactRepository targetRepository) {
-		super(sourceDescriptor.getArtifactKey(), targetRepository, null, null);
+	public RawMirrorRequest(IArtifactDescriptor sourceDescriptor, IArtifactDescriptor targetDescriptor, IArtifactRepository targetRepository, Transport transport) {
+		super(sourceDescriptor.getArtifactKey(), targetRepository, null, null, transport);
 		this.sourceDescriptor = sourceDescriptor;
 		this.targetDescriptor = targetDescriptor;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/SignatureVerifier.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/SignatureVerifier.java
index 2108b52..e99b808 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/SignatureVerifier.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/SignatureVerifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (c) 2007, 2008 compeople AG and others.
+* Copyright (c) 2007, 2010 compeople AG and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/messages.properties
index 64bf989..9622be2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -51,4 +51,5 @@ exception_unsupportedRemoveFromComposite = Cannot remove descriptors from a comp
 
 exception_unableToCreateParentDir = Unable to create parent directory.
 folder_artifact_not_file_repo=Artifact {0} is a folder but the repository is an archive or remote location.
-retryRequest=Download of {0} failed on repository {1}. Retrying. 
\ No newline at end of file
+retryRequest=Download of {0} failed on repository {1}. Retrying. 
+error_copying_local_file=An error occurred copying file {0}.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/BlobStore.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/BlobStore.java
index bf6fed2..a7c5950 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/BlobStore.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/BlobStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/DownloadJob.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/DownloadJob.java
index 20373a7..dcbac6f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/DownloadJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/DownloadJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Genuitec, LLC and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Genuitec, LLC and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/Mapper.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/Mapper.java
index 80b6b3e..9d38978 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/Mapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/Mapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactDescriptor.java
index baa1886..a48c9a9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
index 329611e..3d7c467 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  * 	Genuitec, LLC - support for multi-threaded downloads
  *  Cloudsmith Inc. - query indexes
  *  Sonatype Inc - ongoing development
+ *  EclipseSource - file locking and ongoing development
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.artifact.repository.simple;
 
@@ -29,7 +30,6 @@ import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
 import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
 import org.eclipse.equinox.internal.p2.metadata.expression.CompoundIterator;
 import org.eclipse.equinox.internal.p2.metadata.index.IndexProvider;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
 import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.*;
 import org.eclipse.equinox.internal.provisional.p2.repository.IStateful;
@@ -39,11 +39,11 @@ import org.eclipse.equinox.p2.metadata.IArtifactKey;
 import org.eclipse.equinox.p2.metadata.index.IIndex;
 import org.eclipse.equinox.p2.metadata.index.IIndexProvider;
 import org.eclipse.equinox.p2.query.*;
-import org.eclipse.equinox.p2.repository.IRepository;
-import org.eclipse.equinox.p2.repository.IRunnableWithProgress;
+import org.eclipse.equinox.p2.repository.*;
 import org.eclipse.equinox.p2.repository.artifact.*;
 import org.eclipse.equinox.p2.repository.artifact.spi.AbstractArtifactRepository;
 import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
+import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.util.NLS;
 
 public class SimpleArtifactRepository extends AbstractArtifactRepository implements IFileArtifactRepository, IIndexProvider<IArtifactKey> {
@@ -68,6 +68,23 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	 */
 	public static final String PROP_FORCE_THREADING = "eclipse.p2.force.threading"; //$NON-NLS-1$
 
+	/**
+	 * Location of the repository lock
+	 */
+	private Location lockLocation = null;
+
+	/**
+	 * Allows an artifact repository to set the name of its blobstore.
+	 */
+	public static final String PROP_BLOBSTORE_NAME = "p2.blobstore.name"; //$NON-NLS-1$
+
+	/**
+	 * Does this instance of the repository currently hold a lock
+	 */
+	private boolean holdsLock = false;
+
+	private long cacheTimestamp = 0l;
+
 	public class ArtifactOutputStream extends OutputStream implements IStateful {
 		private boolean closed;
 		private long count = 0;
@@ -249,8 +266,8 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 		return URIUtil.append(base, CONTENT_FILENAME + extension);
 	}
 
-	public static URI getBlobStoreLocation(URI base) {
-		return URIUtil.append(base, BLOBSTORE);
+	public static URI getBlobStoreLocation(URI base, String suffix) {
+		return URIUtil.append(base, suffix);
 	}
 
 	/*
@@ -305,31 +322,56 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 
 	public SimpleArtifactRepository(IProvisioningAgent agent, String repositoryName, URI location, Map<String, String> properties) {
 		super(agent, repositoryName, REPOSITORY_TYPE, REPOSITORY_VERSION.toString(), location, null, null, properties);
-		initializeAfterLoad(location);
-		if (properties != null) {
-			if (properties.containsKey(PUBLISH_PACK_FILES_AS_SIBLINGS)) {
-				synchronized (this) {
-					String newValue = properties.get(PUBLISH_PACK_FILES_AS_SIBLINGS);
-					if (Boolean.TRUE.toString().equals(newValue)) {
-						mappingRules = PACKED_MAPPING_RULES;
-					} else {
-						mappingRules = DEFAULT_MAPPING_RULES;
+
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(true, new NullProgressMonitor());
+				if (!lockAcquired)
+					throw new IllegalStateException("Cannot acquire the lock for " + location); //$NON-NLS-1$
+			}
+
+			initializeAfterLoad(location, false); // Don't update the timestamp, it will be done during save
+			if (properties != null) {
+				if (properties.containsKey(PUBLISH_PACK_FILES_AS_SIBLINGS)) {
+					synchronized (this) {
+						String newValue = properties.get(PUBLISH_PACK_FILES_AS_SIBLINGS);
+						if (Boolean.TRUE.toString().equals(newValue)) {
+							mappingRules = PACKED_MAPPING_RULES;
+						} else {
+							mappingRules = DEFAULT_MAPPING_RULES;
+						}
+						initializeMapper();
 					}
-					initializeMapper();
 				}
 			}
+			save();
+		} finally {
+			if (lockAcquired)
+				unlock();
 		}
-		save();
 	}
 
-	public synchronized void addDescriptor(IArtifactDescriptor toAdd) {
-		if (artifactDescriptors.contains(toAdd))
-			return;
+	public synchronized void addDescriptor(IArtifactDescriptor toAdd, IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return;
+			}
 
-		SimpleArtifactDescriptor internalDescriptor = createInternalDescriptor(toAdd);
-		artifactDescriptors.add(internalDescriptor);
-		mapDescriptor(internalDescriptor);
-		save();
+			if (artifactDescriptors.contains(toAdd))
+				return;
+
+			SimpleArtifactDescriptor internalDescriptor = createInternalDescriptor(toAdd);
+			artifactDescriptors.add(internalDescriptor);
+			mapDescriptor(internalDescriptor);
+			save();
+		} finally {
+			if (lockAcquired)
+				unlock();
+		}
 	}
 
 	public IArtifactDescriptor createArtifactDescriptor(IArtifactKey key) {
@@ -357,15 +399,27 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 		return internal;
 	}
 
-	public synchronized void addDescriptors(IArtifactDescriptor[] descriptors) {
-		for (int i = 0; i < descriptors.length; i++) {
-			if (artifactDescriptors.contains(descriptors[i]))
-				continue;
-			SimpleArtifactDescriptor internalDescriptor = createInternalDescriptor(descriptors[i]);
-			artifactDescriptors.add(internalDescriptor);
-			mapDescriptor(internalDescriptor);
+	public synchronized void addDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return;
+			}
+
+			for (int i = 0; i < descriptors.length; i++) {
+				if (artifactDescriptors.contains(descriptors[i]))
+					continue;
+				SimpleArtifactDescriptor internalDescriptor = createInternalDescriptor(descriptors[i]);
+				artifactDescriptors.add(internalDescriptor);
+				mapDescriptor(internalDescriptor);
+			}
+			save();
+		} finally {
+			if (lockAcquired)
+				unlock();
 		}
-		save();
 	}
 
 	private synchronized OutputStream addPostSteps(ProcessingStepHandler handler, IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor) {
@@ -417,11 +471,17 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public synchronized boolean contains(IArtifactDescriptor descriptor) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
 		SimpleArtifactDescriptor simpleDescriptor = createInternalDescriptor(descriptor);
 		return artifactDescriptors.contains(simpleDescriptor);
 	}
 
 	public synchronized boolean contains(IArtifactKey key) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
 		return artifactMap.containsKey(key);
 	}
 
@@ -522,8 +582,47 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 		return status.getCode() == CODE_RETRY ? status : result;
 	}
 
+	/**
+	 * Copy a file to an output stream.
+	 * Optionally close the streams when done.
+	 * Notify the monitor about progress we make
+	 * 
+	 * @return the number of bytes written.
+	 */
+	private IStatus copyFileToStream(File in, OutputStream out, IProgressMonitor monitor) {
+		// Buffer filled with contents from the stream at a time
+		int bufferSize = 16 * 1024;
+		byte[] buffer = new byte[bufferSize];
+		// Number of passes in the below loop, convert to integer which is needed in monitor conversion below
+		int expected_loops = new Double(in.length() / bufferSize).intValue() + 1; // +1: also count the initial run
+		SubMonitor sub = SubMonitor.convert(monitor, Messages.downloading + in.getName(), expected_loops);
+		// Be optimistic about the outcome of this...
+		IStatus status = Status.OK_STATUS;
+		try {
+			FileInputStream stream = new FileInputStream(in);
+			try {
+				int len;
+				while ((len = stream.read(buffer)) != -1) {
+					out.write(buffer, 0, len);
+					sub.worked(1);
+				}
+			} finally {
+				stream.close();
+			}
+		} catch (IOException ioe) {
+			status = new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.error_copying_local_file, in.getAbsolutePath()), ioe);
+		}
+		sub.done();
+		return status;
+	}
+
 	private IStatus downloadArtifact(IArtifactDescriptor descriptor, URI mirrorLocation, OutputStream destination, IProgressMonitor monitor) {
-		IStatus result = getTransport().download(mirrorLocation, destination, monitor);
+		//Bug 340352: transport has performance overhead of 100ms and more, bypass it for local copies
+		IStatus result = Status.OK_STATUS;
+		if (mirrorLocation.getScheme().equals(SimpleArtifactRepositoryFactory.PROTOCOL_FILE))
+			result = copyFileToStream(new File(mirrorLocation), destination, monitor);
+		else
+			result = getTransport().download(mirrorLocation, destination, monitor);
 		if (mirrors != null)
 			mirrors.reportResult(mirrorLocation.toString(), result);
 		if (result.isOK() || result.getSeverity() == IStatus.CANCEL)
@@ -548,7 +647,7 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 		if (!MIRRORS_ENABLED || (!isForceThreading() && isLocal()))
 			return baseLocation;
 		if (mirrors == null)
-			mirrors = new MirrorSelector(this);
+			mirrors = new MirrorSelector(this, getTransport());
 		return mirrors.getMirrorLocation(baseLocation, monitor);
 	}
 
@@ -567,6 +666,11 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public IStatus getArtifact(IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
+		if (monitor.isCanceled())
+			return Status.CANCEL_STATUS;
 		ProcessingStepHandler handler = new ProcessingStepHandler();
 		destination = processDestination(handler, descriptor, destination, monitor);
 		IStatus status = ProcessingStepHandler.checkStatus(destination);
@@ -577,10 +681,19 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public IStatus getRawArtifact(IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
+		if (monitor.isCanceled())
+			return Status.CANCEL_STATUS;
 		return downloadArtifact(descriptor, destination, monitor);
 	}
 
 	public synchronized IArtifactDescriptor[] getArtifactDescriptors(IArtifactKey key) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
+
 		List<IArtifactDescriptor> result = artifactMap.get(key);
 		if (result == null)
 			return new IArtifactDescriptor[0];
@@ -603,6 +716,12 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public IStatus getArtifacts(IArtifactRequest[] requests, IProgressMonitor monitor) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
+		if (monitor.isCanceled())
+			return Status.CANCEL_STATUS;
+
 		final MultiStatus overallStatus = new MultiStatus(Activator.ID, IStatus.OK, null, null);
 		LinkedList<IArtifactRequest> requestsPending = new LinkedList<IArtifactRequest>(Arrays.asList(requests));
 
@@ -644,6 +763,9 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public synchronized IArtifactDescriptor getCompleteArtifactDescriptor(IArtifactKey key) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
 		List<IArtifactDescriptor> descriptors = artifactMap.get(key);
 		if (descriptors == null)
 			return null;
@@ -657,6 +779,9 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public synchronized Set<SimpleArtifactDescriptor> getDescriptors() {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
 		return artifactDescriptors;
 	}
 
@@ -744,6 +869,10 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public OutputStream getOutputStream(IArtifactDescriptor descriptor) throws ProvisionException {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
+
 		assertModifiable();
 
 		// Create a copy of the original descriptor that we can manipulate and add to our repo.
@@ -781,7 +910,7 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 			} else {
 				// file based
 				File parent = outputFile.getParentFile();
-				parent.mkdirs();
+				mkdirs(parent);
 				if (!parent.isDirectory())
 					throw failedWrite(new IOException(NLS.bind(Messages.sar_failedMkdir, parent.toString())));
 				target = new FileOutputStream(file);
@@ -816,20 +945,38 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public synchronized String[][] getRules() {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
 		return mappingRules;
 	}
 
 	private Transport getTransport() {
-		return RepositoryTransport.getInstance();
+		return (Transport) getProvisioningAgent().getService(Transport.SERVICE_NAME);
 	}
 
 	// use this method to setup any transient fields etc after the object has been restored from a stream
 	public synchronized void initializeAfterLoad(URI repoLocation) {
+		this.initializeAfterLoad(repoLocation, true);
+	}
+
+	private synchronized void initializeAfterLoad(URI repoLocation, boolean updateTimestamp) {
 		setLocation(repoLocation);
-		blobStore = new BlobStore(getBlobStoreLocation(repoLocation), 128);
+		String suffix = getBlobStoreName(BLOBSTORE);
+		blobStore = new BlobStore(getBlobStoreLocation(repoLocation, suffix), 128);
 		initializeMapper();
 		for (SimpleArtifactDescriptor desc : artifactDescriptors)
 			desc.setRepository(this);
+		if (updateTimestamp)
+			updateTimestamp();
+	}
+
+	private String getBlobStoreName(String defaultValue) {
+		String value = getProperty(PROP_BLOBSTORE_NAME);
+		if (value == null || value.length() == 0) {
+			return defaultValue;
+		}
+		return value;
 	}
 
 	private synchronized void initializeMapper() {
@@ -871,27 +1018,106 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 		return destination;
 	}
 
-	public synchronized void removeAll() {
-		IArtifactDescriptor[] toRemove = artifactDescriptors.toArray(new IArtifactDescriptor[artifactDescriptors.size()]);
-		boolean changed = false;
-		for (int i = 0; i < toRemove.length; i++)
-			changed |= doRemoveArtifact(toRemove[i]);
-		if (changed)
-			save();
+	public synchronized void removeAll(IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return;
+			}
+
+			IArtifactDescriptor[] toRemove = artifactDescriptors.toArray(new IArtifactDescriptor[artifactDescriptors.size()]);
+			boolean changed = false;
+			for (int i = 0; i < toRemove.length; i++)
+				changed |= doRemoveArtifact(toRemove[i]);
+			if (changed)
+				save();
+		} finally {
+			if (lockAcquired)
+				unlock();
+		}
 	}
 
-	public synchronized void removeDescriptor(IArtifactDescriptor descriptor) {
-		if (doRemoveArtifact(descriptor))
-			save();
+	public synchronized void removeDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return;
+			}
+
+			if (doRemoveArtifact(descriptor))
+				save();
+		} finally {
+			if (lockAcquired)
+				unlock();
+		}
 	}
 
-	public synchronized void removeDescriptor(IArtifactKey key) {
-		IArtifactDescriptor[] toRemove = getArtifactDescriptors(key);
-		boolean changed = false;
-		for (int i = 0; i < toRemove.length; i++)
-			changed |= doRemoveArtifact(toRemove[i]);
-		if (changed)
-			save();
+	public synchronized void removeDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return;
+			}
+
+			boolean changed = false;
+			for (IArtifactDescriptor descriptor : descriptors)
+				changed |= doRemoveArtifact(descriptor);
+			if (changed)
+				save();
+		} finally {
+			if (lockAcquired)
+				unlock();
+		}
+	}
+
+	public synchronized void removeDescriptors(IArtifactKey[] keys, IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return;
+			}
+
+			boolean changed = false;
+			for (IArtifactKey key : keys) {
+				IArtifactDescriptor[] descriptors = getArtifactDescriptors(key);
+				for (IArtifactDescriptor descriptor : descriptors)
+					changed |= doRemoveArtifact(descriptor);
+			}
+			if (changed)
+				save();
+		} finally {
+			if (lockAcquired)
+				unlock();
+		}
+	}
+
+	public synchronized void removeDescriptor(IArtifactKey key, IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return;
+			}
+
+			IArtifactDescriptor[] toRemove = getArtifactDescriptors(key);
+			boolean changed = false;
+			for (int i = 0; i < toRemove.length; i++)
+				changed |= doRemoveArtifact(toRemove[i]);
+			if (changed)
+				save();
+		} finally {
+			if (lockAcquired)
+				unlock();
+		}
 	}
 
 	private IStatus reportStatus(IArtifactDescriptor descriptor, OutputStream destination, IStatus status) {
@@ -971,7 +1197,7 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 					jOs.putNextEntry(new JarEntry(new Path(artifactsFile.getAbsolutePath()).lastSegment()));
 					os = jOs;
 				}
-				super.setProperty(IRepository.PROP_TIMESTAMP, Long.toString(System.currentTimeMillis()));
+				super.setProperty(IRepository.PROP_TIMESTAMP, Long.toString(System.currentTimeMillis()), new NullProgressMonitor());
 				new SimpleArtifactRepositoryIO(getProvisioningAgent()).write(this, os);
 			} catch (IOException e) {
 				// TODO proper exception handling
@@ -979,14 +1205,15 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 			} finally {
 				if (os != null)
 					os.close();
+				updateTimestamp();
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
 	}
 
-	public String setProperty(String key, String newValue) {
-		String oldValue = super.setProperty(key, newValue);
+	private String doSetProperty(String key, String newValue, IProgressMonitor monitor, boolean save) {
+		String oldValue = super.setProperty(key, newValue, new NullProgressMonitor());
 		if (oldValue == newValue || (oldValue != null && oldValue.equals(newValue)))
 			return oldValue;
 		if (PUBLISH_PACK_FILES_AS_SIBLINGS.equals(key)) {
@@ -999,14 +1226,26 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 				initializeMapper();
 			}
 		}
-		save();
-		//force repository manager to reload this repository because it caches properties
-		ArtifactRepositoryManager manager = (ArtifactRepositoryManager) getProvisioningAgent().getService(IArtifactRepositoryManager.SERVICE_NAME);
-		if (manager.removeRepository(getLocation()))
-			manager.addRepository(this);
+		if (save)
+			save();
 		return oldValue;
 	}
 
+	public String setProperty(String key, String newValue, IProgressMonitor monitor) {
+		boolean lockAcquired = false;
+		try {
+			if (canLock()) {
+				lockAcquired = lockAndLoad(false, monitor);
+				if (!lockAcquired)
+					return super.getProperty(key);
+			}
+			return doSetProperty(key, newValue, monitor, true);
+		} finally {
+			if (lockAcquired)
+				unlock();
+		}
+	}
+
 	public synchronized void setRules(String[][] rules) {
 		mappingRules = rules;
 	}
@@ -1032,14 +1271,25 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public synchronized Iterator<IArtifactKey> everything() {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
 		snapshotNeeded = true;
 		return artifactMap.keySet().iterator();
 	}
 
 	public IStatus executeBatch(IRunnableWithProgress runnable, IProgressMonitor monitor) {
 		IStatus result = null;
+
+		boolean lockAcquired = false;
 		synchronized (this) {
 			try {
+				if (canLock()) {
+					lockAcquired = lockAndLoad(false, monitor);
+					if (!lockAcquired)
+						return new Status(IStatus.ERROR, Activator.ID, "Could not lock artifact repository for writing", null); //$NON-NLS-1$
+				}
+
 				disableSave = true;
 				runnable.run(monitor);
 			} catch (OperationCanceledException oce) {
@@ -1055,6 +1305,9 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 						result = new MultiStatus(Activator.ID, IStatus.ERROR, new IStatus[] {result}, e.getMessage(), e);
 					else
 						result = new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e);
+				} finally {
+					if (lockAcquired)
+						unlock();
 				}
 			}
 		}
@@ -1064,6 +1317,9 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	}
 
 	public synchronized IIndex<IArtifactKey> getIndex(String memberName) {
+		if (!holdsLock() && URIUtil.isFileURI(getLocation())) {
+			load(new NullProgressMonitor());
+		}
 		if (ArtifactKey.MEMBER_ID.equals(memberName)) {
 			snapshotNeeded = true;
 			if (keyIndex == null)
@@ -1076,4 +1332,214 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
 	public Object getManagedProperty(Object client, String memberName, Object key) {
 		return null;
 	}
+
+	/**
+	 * Locks the location and optionally loads the repository.
+	 * 
+	 * @param ignoreLoad If ignoreLoad is set to true, then the location is locked
+	 *                   but the repository is not loaded.  It is expected
+	 *                   that the caller will load the repository manually
+	 * @return Tue if the lock was acquired, false otherwise
+	 */
+	private synchronized boolean lockAndLoad(boolean ignoreLoad, IProgressMonitor monitor) {
+		if (holdsLock) {
+			throw new IllegalStateException("Locking is not reentrant"); //$NON-NLS-1$
+		}
+		holdsLock = false;
+		boolean success = true;
+
+		try {
+			try {
+				holdsLock = lock(true, monitor);
+			} catch (Exception e) {
+				e.printStackTrace();
+				return false;
+			}
+
+			if (holdsLock) {
+				if (!ignoreLoad) {
+					success = false;
+					doLoad(new NullProgressMonitor());
+					success = true;
+				}
+				return true;
+			}
+			return false;
+		} finally {
+			// If we did not successfully load the repository, make sure we free the lock.
+			// This will only happen if doLoad() throws an exception, otherwise
+			// we will set success to true, and return above
+			if (!success)
+				unlock();
+		}
+	}
+
+	private synchronized boolean canLock() {
+		if (holdsLock())
+			return false;
+		if (!URIUtil.isFileURI(getLocation()))
+			return false;
+
+		try {
+			lockLocation = getLockLocation();
+		} catch (IOException e) {
+			return false;
+		}
+		return !lockLocation.isReadOnly();
+	}
+
+	/**
+	 * Actually lock the location.  This method should only be called
+	 * from LockAndLoad. If you only want to lock the repository and not
+	 * load it, see {@link SimpleArtifactRepository#lockAndLoad(boolean, IProgressMonitor)}.
+	 */
+	private synchronized boolean lock(boolean wait, IProgressMonitor monitor) throws IOException {
+		if (!Activator.getInstance().enableArtifactLocking())
+			return true;
+
+		if (holdsLock()) {
+			throw new IllegalStateException("Locking is not reentrant"); //$NON-NLS-1$
+		}
+
+		lockLocation = getLockLocation();
+		boolean locked = lockLocation.lock();
+		if (locked || !wait)
+			return locked;
+
+		//Someone else must have the directory locked
+		while (true) {
+			if (monitor.isCanceled())
+				return false;
+			try {
+				Thread.sleep(200); // 5x per second
+			} catch (InterruptedException e) {/*ignore*/
+			}
+			locked = lockLocation.lock();
+			if (locked)
+				return true;
+		}
+	}
+
+	/**
+	 * Returns true if this instance of SimpleArtifactRepository holds the lock,
+	 * false otherwise.
+	 */
+	private boolean holdsLock() {
+		return holdsLock;
+	}
+
+	/**URIUtil.toURI(location.toURI()
+	 * Returns the location of the lock file.
+	 */
+	private Location getLockLocation() throws IOException {
+		if (this.lockLocation != null)
+			return this.lockLocation;
+
+		URI repositoryLocation = getLocation();
+		if (!URIUtil.isFileURI(repositoryLocation)) {
+			throw new IOException("Cannot lock a non file based repository"); //$NON-NLS-1$
+		}
+
+		return Activator.getInstance().getLockLocation(repositoryLocation);
+	}
+
+	/**
+	 * Loads the repository from disk. This method will do nothing
+	 * if this instance of SimpleArtifactRepository holds the lock
+	 * because it will have loaded the repo when it acquired the lock.
+	 * 
+	 * @param monitor
+	 */
+	private void load(IProgressMonitor monitor) {
+		if (!holdsLock())
+			doLoad(monitor);
+		else
+			monitor.done();
+	}
+
+	private void updateTimestamp() {
+		if (!isModifiable())
+			return;
+		try {
+			SimpleArtifactRepositoryFactory repositoryFactory = new SimpleArtifactRepositoryFactory();
+			File localFile = repositoryFactory.getLocalFile(getLocation(), new NullProgressMonitor());
+			long lastModified = localFile.lastModified();
+			if (lastModified > 0)
+				cacheTimestamp = lastModified;
+		} catch (Exception e) {
+			// Do nothing
+		}
+	}
+
+	/**
+	 * Loads the repository from disk. If the last modified timestamp on the file <=
+	 * to our cache, then this method does nothing.  Otherwise the artifact repository
+	 * on disk is loaded, and reconciled with this instance of the artifact repository.
+	 * 
+	 * @param monitor
+	 */
+	private void doLoad(IProgressMonitor monitor) {
+
+		SimpleArtifactRepositoryFactory repositoryFactory = new SimpleArtifactRepositoryFactory();
+		IArtifactRepository repositoryOnDisk = null;
+		try {
+			SubMonitor subMonitor = SubMonitor.convert(monitor, 4);
+			try {
+				File localFile = repositoryFactory.getLocalFile(getLocation(), subMonitor.newChild(1));
+				long lastModified = localFile.lastModified();
+				if (lastModified <= cacheTimestamp)
+					return;
+				cacheTimestamp = lastModified;
+			} catch (Exception e) {
+				// Dont'r worry if we can't load
+				return;
+			}
+			try {
+				repositoryOnDisk = repositoryFactory.load(getLocation(), IRepositoryManager.REPOSITORY_HINT_MODIFIABLE, subMonitor.newChild(3), false);
+			} catch (Exception e) {
+				// Don't worry if we can't load
+				return;
+			}
+
+			if (repositoryOnDisk != null && repositoryOnDisk instanceof SimpleArtifactRepository) {
+				setName(repositoryOnDisk.getName());
+				setType(repositoryOnDisk.getType());
+				setVersion(repositoryOnDisk.getVersion());
+				setLocation(repositoryOnDisk.getLocation()); // Will this ever change, should it?
+				setDescription(repositoryOnDisk.getDescription());
+				setProvider(repositoryOnDisk.getProvider());
+				this.mappingRules = ((SimpleArtifactRepository) repositoryOnDisk).mappingRules;
+
+				// Clear the existing properties
+				//				this.setProperties(new OrderedProperties());
+				//
+				Map<String, String> prop = repositoryOnDisk.getProperties();
+				Set<Entry<String, String>> entrySet = prop.entrySet();
+				for (Entry<String, String> entry : entrySet) {
+					doSetProperty(entry.getKey(), entry.getValue(), new NullProgressMonitor(), false);
+				}
+
+				//
+				this.artifactDescriptors = ((SimpleArtifactRepository) repositoryOnDisk).artifactDescriptors;
+				this.artifactMap = ((SimpleArtifactRepository) repositoryOnDisk).artifactMap;
+			}
+		} finally {
+			monitor.done();
+		}
+		return;
+	}
+
+	private void unlock() {
+		if (!Activator.getInstance().enableArtifactLocking()) {
+			holdsLock = false;
+			return;
+		}
+		if (lockLocation != null) {
+			// If we don't have the lock location, then we don't have the lock
+			holdsLock = false;
+			lockLocation.release();
+		}
+		lockLocation = null;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryFactory.java
index 4ebeb06..041e9f6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Sonatype Inc - ongoing development
+ *     EclipseSource - ongoing development
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.artifact.repository.simple;
 
@@ -28,7 +29,7 @@ import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactRepositoryFactory;
 import org.eclipse.osgi.util.NLS;
 
 public class SimpleArtifactRepositoryFactory extends ArtifactRepositoryFactory {
-	private static final String PROTOCOL_FILE = "file"; //$NON-NLS-1$
+	public static final String PROTOCOL_FILE = "file"; //$NON-NLS-1$
 	private static final String JAR_EXTENSION = ".jar"; //$NON-NLS-1$
 	private static final String XML_EXTENSION = ".xml"; //$NON-NLS-1$
 
@@ -40,7 +41,7 @@ public class SimpleArtifactRepositoryFactory extends ArtifactRepositoryFactory {
 	 * Returns a file in the local file system that contains the contents of the
 	 * metadata repository at the given location.
 	 */
-	private File getLocalFile(URI location, IProgressMonitor monitor) throws IOException, ProvisionException {
+	File getLocalFile(URI location, IProgressMonitor monitor) throws IOException, ProvisionException {
 		File localFile = null;
 		URI jarLocation = SimpleArtifactRepository.getActualLocation(location, true);
 		URI xmlLocation = SimpleArtifactRepository.getActualLocation(location, false);
@@ -72,6 +73,10 @@ public class SimpleArtifactRepositoryFactory extends ArtifactRepositoryFactory {
 	}
 
 	public IArtifactRepository load(URI location, int flags, IProgressMonitor monitor) throws ProvisionException {
+		return load(location, flags, monitor, true);
+	}
+
+	IArtifactRepository load(URI location, int flags, IProgressMonitor monitor, boolean acquireLock) throws ProvisionException {
 		long time = 0;
 		final String debugMsg = "Restoring artifact repository "; //$NON-NLS-1$
 		if (Tracing.DEBUG_METADATA_PARSING) {
@@ -100,7 +105,7 @@ public class SimpleArtifactRepositoryFactory extends ArtifactRepositoryFactory {
 				sub.setWorkRemaining(100);
 				InputStream descriptorStream = jarStream != null ? jarStream : inStream;
 				SimpleArtifactRepositoryIO io = new SimpleArtifactRepositoryIO(getAgent());
-				SimpleArtifactRepository result = (SimpleArtifactRepository) io.read(localFile.toURL(), descriptorStream, sub.newChild(100));
+				SimpleArtifactRepository result = (SimpleArtifactRepository) io.read(location, descriptorStream, sub.newChild(100), acquireLock);
 				result.initializeAfterLoad(location);
 				if (result != null && (flags & IRepositoryManager.REPOSITORY_HINT_MODIFIABLE) > 0 && !result.isModifiable())
 					return null;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java
index 06df4e3..12e41b0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.equinox.internal.p2.artifact.repository.simple;
 
 import java.io.*;
-import java.net.URL;
+import java.net.URI;
 import java.util.*;
 import javax.xml.parsers.ParserConfigurationException;
 import org.eclipse.core.runtime.*;
@@ -28,6 +28,7 @@ import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
 import org.eclipse.equinox.p2.repository.artifact.IProcessingStepDescriptor;
 import org.eclipse.equinox.p2.repository.artifact.spi.ProcessingStepDescriptor;
+import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.BundleContext;
 import org.xml.sax.*;
@@ -44,6 +45,7 @@ import org.xml.sax.*;
 public class SimpleArtifactRepositoryIO {
 
 	private final IProvisioningAgent agent;
+	private Location lockLocation = null;
 
 	public SimpleArtifactRepositoryIO(IProvisioningAgent agent) {
 		this.agent = agent;
@@ -77,14 +79,33 @@ public class SimpleArtifactRepositoryIO {
 	 * 
 	 * This method performs buffering, and closes the stream when finished.
 	 */
-	public IArtifactRepository read(URL location, InputStream input, IProgressMonitor monitor) throws ProvisionException {
+	public IArtifactRepository read(URI location, InputStream input, IProgressMonitor monitor, boolean acquireLock) throws ProvisionException {
 		BufferedInputStream bufferedInput = null;
 		try {
 			try {
 				bufferedInput = new BufferedInputStream(input);
 				Parser repositoryParser = new Parser(Activator.getContext(), Activator.ID);
-				repositoryParser.parse(input);
-				IStatus result = repositoryParser.getStatus();
+				repositoryParser.setErrorContext(location.toURL().toExternalForm());
+				IStatus result = null;
+				boolean lock = false;
+				try {
+					if (canLock(location) && acquireLock) {
+						lock = lock(location, true, monitor);
+						if (lock) {
+							repositoryParser.parse(input);
+							result = repositoryParser.getStatus();
+						} else {
+							result = Status.CANCEL_STATUS;
+						}
+					} else {
+						repositoryParser.parse(input);
+						result = repositoryParser.getStatus();
+					}
+				} finally {
+					if (lock)
+						unlock(location);
+				}
+
 				switch (result.getSeverity()) {
 					case IStatus.CANCEL :
 						throw new OperationCanceledException();
@@ -108,6 +129,60 @@ public class SimpleArtifactRepositoryIO {
 		}
 	}
 
+	private synchronized boolean canLock(URI repositoryLocation) {
+		if (!URIUtil.isFileURI(repositoryLocation))
+			return false;
+
+		try {
+			lockLocation = getLockLocation(repositoryLocation);
+		} catch (IOException e) {
+			return false;
+		}
+		return !lockLocation.isReadOnly();
+	}
+
+	private synchronized boolean lock(URI repositoryLocation, boolean wait, IProgressMonitor monitor) throws IOException {
+		if (!Activator.getInstance().enableArtifactLocking())
+			return true; // Don't use locking
+
+		lockLocation = getLockLocation(repositoryLocation);
+		boolean locked = lockLocation.lock();
+		if (locked || !wait)
+			return locked;
+
+		//Someone else must have the directory locked
+		while (true) {
+			if (monitor.isCanceled())
+				return false;
+			try {
+				Thread.sleep(200); // 5x per second
+			} catch (InterruptedException e) {/*ignore*/
+			}
+			locked = lockLocation.lock();
+			if (locked)
+				return true;
+		}
+	}
+
+	private void unlock(URI repositoryLocation) {
+		if (!Activator.getInstance().enableArtifactLocking())
+			return;
+
+		if (lockLocation != null) {
+			lockLocation.release();
+		}
+	}
+
+	/**
+	 * Returns the location of the lock file.
+	 */
+	private Location getLockLocation(URI repositoryLocation) throws IOException {
+		if (!URIUtil.isFileURI(repositoryLocation)) {
+			throw new IOException("Cannot lock a non file based repository"); //$NON-NLS-1$
+		}
+		return Activator.getInstance().getLockLocation(repositoryLocation);
+	}
+
 	private interface XMLConstants extends org.eclipse.equinox.internal.p2.persistence.XMLConstants {
 
 		// Constants defining the structure of the XML for a SimpleArtifactRepository
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStep.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStep.java
index c0e4858..a2f02b1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStep.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStep.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (c) 2007, 2009 compeople AG and others.
+* Copyright (c) 2007, 2010 compeople AG and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStepHandler.java b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStepHandler.java
index e5530e9..feb6bb4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStepHandler.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/processing/ProcessingStepHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (c) 2007, 2009 compeople AG and others.
+* Copyright (c) 2007, 2010 compeople AG and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.console/.settings/org.eclipse.jdt.core.prefs
index f3c4905..1e22349 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.console/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Fri Jan 22 13:20:25 EST 2010
+#Thu Aug 05 08:37:53 CDT 2010
 eclipse.preferences.version=1
 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
@@ -68,10 +68,11 @@ org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.console/META-INF/MANIFEST.MF
index b19c5c7..b2e309d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.console/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.console;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.console.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -22,7 +22,8 @@ Import-Package: org.eclipse.equinox.internal.p2.core.helpers,
  org.eclipse.equinox.p2.repository.metadata;version="[2.0.0,3.0.0)",
  org.eclipse.osgi.framework.console;version="1.0.0";resolution:=optional,
  org.eclipse.osgi.service.environment;version="1.0.0",
- org.osgi.framework;version="1.4.0",
- org.osgi.util.tracker;version="1.3.0"
+ org.eclipse.osgi.util,
+ org.osgi.framework;version="1.6.0",
+ org.osgi.util.tracker;version="1.4.0"
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.equinox.common;bundle-version="3.3.0"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.console/build.properties
index 246ea6c..c9bbc5e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.console/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.console/pom.xml
index f1d09e2..c8e949b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.console/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.console</artifactId>
-  <version>1.0.200.qualifier</version>
+  <version>1.0.300.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/Activator.java
index 10304f9..54bc79f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008, 2009, IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,15 +16,15 @@ import org.osgi.framework.*;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
-public class Activator implements BundleActivator, ServiceTrackerCustomizer {
+public class Activator implements BundleActivator, ServiceTrackerCustomizer<IProvisioningAgent, IProvisioningAgent> {
 	// The plug-in ID
 	public static final String PLUGIN_ID = "org.eclipse.equinox.p2.console"; //$NON-NLS-1$
 	private static final String PROVIDER_NAME = "org.eclipse.osgi.framework.console.CommandProvider"; //$NON-NLS-1$
 	private static BundleContext context;
 
-	private ServiceTracker agentTracker;
+	private ServiceTracker<IProvisioningAgent, IProvisioningAgent> agentTracker;
 	private ProvCommandProvider provider;
-	private ServiceRegistration providerRegistration = null;
+	private ServiceRegistration<?> providerRegistration = null;
 
 	public static BundleContext getContext() {
 		return context;
@@ -44,7 +44,7 @@ public class Activator implements BundleActivator, ServiceTrackerCustomizer {
 		}
 
 		if (registerCommands) {
-			agentTracker = new ServiceTracker(context, IProvisioningAgent.SERVICE_NAME, this);
+			agentTracker = new ServiceTracker<IProvisioningAgent, IProvisioningAgent>(context, IProvisioningAgent.class, this);
 			agentTracker.open();
 		}
 	}
@@ -57,19 +57,19 @@ public class Activator implements BundleActivator, ServiceTrackerCustomizer {
 		Activator.context = null;
 	}
 
-	public Object addingService(ServiceReference reference) {
+	public IProvisioningAgent addingService(ServiceReference<IProvisioningAgent> reference) {
 		BundleContext ctxt = Activator.getContext();
-		IProvisioningAgent agent = (IProvisioningAgent) ctxt.getService(reference);
+		IProvisioningAgent agent = ctxt.getService(reference);
 		provider = new ProvCommandProvider(ctxt.getProperty("eclipse.p2.profile"), agent); //$NON-NLS-1$
 		providerRegistration = ctxt.registerService(PROVIDER_NAME, provider, null);
 		return agent;
 	}
 
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<IProvisioningAgent> reference, IProvisioningAgent service) {
 		// nothing
 	}
 
-	public void removedService(ServiceReference reference, Object service) {
+	public void removedService(ServiceReference<IProvisioningAgent> reference, IProvisioningAgent service) {
 		if (providerRegistration != null)
 			providerRegistration.unregister();
 		providerRegistration = null;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/Messages.java
new file mode 100644
index 0000000..9893523
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/Messages.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ *  Copyright (c) 20011 SAP AG.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.console;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.console.messages"; //$NON-NLS-1$
+
+	private Messages() {
+		// do not instantiate
+	}
+
+	static {
+		// initialize resource bundles
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	public static String Console_help_header;
+	public static String Console_help_repository_header;
+	public static String Console_help_provaddrepo_description;
+	public static String Console_help_provdelrepo_description;
+	public static String Console_help_provaddmetadatarepo_description;
+	public static String Console_help_provdelmetadatarepo_description;
+	public static String Console_help_provaddartifactrepo_description;
+	public static String Console_help_provdelartifactrepo_description;
+	public static String Console_help_provlg_description;
+	public static String Console_help_provlr_description;
+	public static String Console_help_provlar_description;
+	public static String Console_help_provliu_description;
+	public static String Console_help_provlquery_description;
+	public static String Console_help_profile_registry_header;
+	public static String Console_help_provaddprofile_description;
+	public static String Console_help_provdelprofile_description;
+	public static String Console_help_provlp_description;
+	public static String Console_help_provlgp_description;
+	public static String Console_help_provlpts_description;
+	public static String Console_help_provlpquery_description;
+	public static String Console_help_install_header;
+	public static String Console_help_provinstall_description;
+	public static String Console_help_provremove_description;
+	public static String Console_help_provrevert_description;
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvCommandProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvCommandProvider.java
index 3024d11..c9c9ef6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvCommandProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvCommandProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2011 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -8,6 +8,7 @@
  * 	IBM Corporation - initial API and implementation
  * 	Band XI - add more commands
  *		Composent, Inc. - command additions
+ *      SAP - bug fixes
  ******************************************************************************/
 package org.eclipse.equinox.internal.p2.console;
 
@@ -15,6 +16,7 @@ import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
@@ -34,7 +36,13 @@ import org.eclipse.osgi.framework.console.CommandProvider;
  */
 public class ProvCommandProvider implements CommandProvider {
 	private static final String WILDCARD_ANY = "*"; //$NON-NLS-1$
-	public static final String NEW_LINE = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+	public static final String NEW_LINE = "\r\n"; //$NON-NLS-1$
+	public static final String TAB = "\t"; //$NON-NLS-1$
+
+	// holds the mapping between command name and command description
+	private Map<String, String> commandsHelp = null;
+	// hold the mappings between command groups and the command names of the commands in the group
+	private Map<String, String[]> commandGroups = null;
 
 	private final IProvisioningAgent agent;
 
@@ -156,9 +164,18 @@ public class ProvCommandProvider implements CommandProvider {
 			interpreter.println("Installable unit id, version, and profileid must be provided");
 			return;
 		}
+		IProfile profile = ProvisioningHelper.getProfile(agent, profileId);
+		if (profile == null) {
+			if (profileId.equals(IProfileRegistry.SELF)) {
+				interpreter.println("No profile found");
+			} else {
+				interpreter.println("Profile " + profileId + " not found");
+			}
+			return;
+		}
 		IStatus s = null;
 		try {
-			s = ProvisioningHelper.install(agent, iu, version, ProvisioningHelper.getProfile(agent, profileId), new NullProgressMonitor());
+			s = ProvisioningHelper.install(agent, iu, version, profile, new NullProgressMonitor());
 		} catch (ProvisionException e) {
 			interpreter.println("Installation failed with ProvisionException for " + iu + " " + version);
 			interpreter.printStackTrace(e);
@@ -394,6 +411,10 @@ public class ProvCommandProvider implements CommandProvider {
 		String range = processArgument(interpreter.nextArgument());
 		if (profileId == null) {
 			IProfile[] profiles = ProvisioningHelper.getProfiles(agent);
+			if (profiles == null) {
+				interpreter.println("No profile found");
+				return;
+			}
 			for (int i = 0; i < profiles.length; i++)
 				interpreter.println(profiles[i].getProfileId());
 			return;
@@ -403,8 +424,14 @@ public class ProvCommandProvider implements CommandProvider {
 		if (profileId.equals("this")) //$NON-NLS-1$
 			profileId = IProfileRegistry.SELF;
 		target = ProvisioningHelper.getProfile(agent, profileId);
-		if (target == null)
+		if (target == null) {
+			if (profileId.equals(IProfileRegistry.SELF)) {
+				interpreter.println("No profile found");
+			} else {
+				interpreter.println("Profile " + profileId + " not found");
+			}
 			return;
+		}
 
 		// list the profile contents
 		IInstallableUnit[] result = sort(target.query(QueryUtil.createIUQuery(id, new VersionRange(range)), null));
@@ -426,8 +453,12 @@ public class ProvCommandProvider implements CommandProvider {
 		long[] profileTimestamps = ProvisioningHelper.getProfileTimestamps(agent, profileId);
 		// if no profile timestamps for given id, print that out and done
 		if (profileTimestamps == null || profileTimestamps.length == 0) {
-			interpreter.print("No timestamps found for profile ");
-			interpreter.println(profileId);
+			if (profileId.equals(IProfileRegistry.SELF)) {
+				interpreter.println("No profile found");
+			} else {
+				interpreter.print("No timestamps found for profile ");
+				interpreter.println(profileId);
+			}
 			return;
 		}
 		// else if there are some timestamps then print them out on separate line
@@ -461,7 +492,11 @@ public class ProvCommandProvider implements CommandProvider {
 
 		IProfile profile = ProvisioningHelper.getProfile(agent, profileId);
 		if (profile == null) {
-			interpreter.println("Profile " + profileId + " not found");
+			if (profileId.equals(IProfileRegistry.SELF)) {
+				interpreter.println("No profile found");
+			} else {
+				interpreter.println("Profile " + profileId + " not found");
+			}
 			return;
 		}
 		IStatus s = null;
@@ -497,7 +532,11 @@ public class ProvCommandProvider implements CommandProvider {
 		}
 		IProfile profile = ProvisioningHelper.getProfile(agent, profileId);
 		if (profile == null) {
-			interpreter.println("Profile " + profileId + " not found");
+			if (profileId.equals(IProfileRegistry.SELF)) {
+				interpreter.println("No profile found");
+			} else {
+				interpreter.println("Profile " + profileId + " not found");
+			}
 			return;
 		}
 		IInstallableUnit[] units = sort(profile.query(QueryUtil.createIUGroupQuery(), new NullProgressMonitor()));
@@ -531,7 +570,11 @@ public class ProvCommandProvider implements CommandProvider {
 
 		IProfile profile = ProvisioningHelper.getProfile(agent, profileId);
 		if (profile == null) {
-			interpreter.println("Profile " + profileId + " not found");
+			if (profileId.equals(IProfileRegistry.SELF)) {
+				interpreter.println("No profile found");
+			} else {
+				interpreter.println("Profile " + profileId + " not found");
+			}
 			return;
 		}
 		IInstallableUnit[] units = sort(profile.query(query, new NullProgressMonitor()));
@@ -557,9 +600,18 @@ public class ProvCommandProvider implements CommandProvider {
 			interpreter.println("Installable unit id must be provided");
 			return;
 		}
+		IProfile profile = ProvisioningHelper.getProfile(agent, profileId);
+		if (profile == null) {
+			if (profileId.equals(IProfileRegistry.SELF)) {
+				interpreter.println("No profile found");
+			} else {
+				interpreter.println("Profile " + profileId + " not found");
+			}
+			return;
+		}
 		IStatus s = null;
 		try {
-			s = ProvisioningHelper.uninstall(agent, iu, version, ProvisioningHelper.getProfile(agent, profileId), new NullProgressMonitor());
+			s = ProvisioningHelper.uninstall(agent, iu, version, profile, new NullProgressMonitor());
 		} catch (ProvisionException e) {
 			interpreter.println("Remove failed with ProvisionException for " + iu + " " + version);
 			interpreter.printStackTrace(e);
@@ -573,6 +625,22 @@ public class ProvCommandProvider implements CommandProvider {
 		}
 	}
 
+	/**
+	 * Handles the help command
+	 * 
+	 * @param intp
+	 * @return description for a particular command or false if there is no command with the specified name
+	 */
+	public Object _help(CommandInterpreter intp) {
+		String commandName = intp.nextArgument();
+		if (commandName == null) {
+			return false;
+		}
+		String help = getHelp(commandName);
+
+		return help.length() > 0 ? help : false;
+	}
+
 	private void printErrorStatus(CommandInterpreter interpreter, IStatus status) {
 		interpreter.print("--Error status ");
 		interpreter.print("message=" + status.getMessage());
@@ -609,71 +677,98 @@ public class ProvCommandProvider implements CommandProvider {
 	}
 
 	public String getHelp() {
+		return getHelp(null);
+	}
+
+	/*
+	 * Returns either the help message for a particular command, 
+	 * or returns the help messages for all commands (if command is not specified)
+	 */
+	private String getHelp(String commandName) {
 		StringBuffer help = new StringBuffer();
-		help.append(NEW_LINE);
-		help.append("---");
-		help.append("P2 Provisioning Commands");
-		help.append("---");
-		help.append(NEW_LINE);
 
-		help.append("---");
-		help.append("Repository Commands");
-		help.append("---");
-		help.append(NEW_LINE);
-		help.append("\tprovaddrepo <repository URI> - Adds a both a metadata and artifact repository at URI");
-		help.append(NEW_LINE);
-		help.append("\tprovdelrepo <repository URI> - Deletes a metadata and artifact repository at URI");
-		help.append(NEW_LINE);
-		help.append("\tprovaddmetadatarepo <repository URI> - Adds a metadata repository at URI");
-		help.append(NEW_LINE);
-		help.append("\tprovdelmetadatarepo <repository URI> - Deletes a metadata repository at URI");
-		help.append(NEW_LINE);
-		help.append("\tprovaddartifactrepo <repository URI> - Adds an artifact repository at URI");
-		help.append(NEW_LINE);
-		help.append("\tprovdelartifactrepo <repository URI> - Deletes an artifact repository URI");
-		help.append(NEW_LINE);
-		help.append("\tprovlg [<repository URI> <iu id | *> <version range | *>] - Lists all IUs with group capabilities in the given repo or in all repos if URI is omitted");
-		help.append(NEW_LINE);
-		help.append("\tprovlr [<repository URI> <iu id | *> <version range | *>]   - Lists all metadata repositories, or the contents of a given metadata repository");
-		help.append(NEW_LINE);
-		help.append("\tprovlar [<repository URI>] - Lists all artifact repositories, or the contents of a given artifact repository");
-		help.append(NEW_LINE);
-		help.append("\tprovliu [<repository URI | *> <iu id | *> <version range | *>] - Lists the IUs that match the pattern in the given repo.  * matches all");
-		help.append(NEW_LINE);
-		help.append("\tprovlquery <repository URI | *> <expression> [ true | false ] - Lists the IUs that match the query expression in the given repo.  * matches all. The expression is expected to be a boolean match expression unless the third argument is true, in which case the expression is a full query");
-		help.append(NEW_LINE);
+		if (commandsHelp == null) {
+			initializeCommandsHelp();
+		}
 
-		help.append("---");
-		help.append("Profile Registry Commands");
-		help.append("---");
-		help.append(NEW_LINE);
+		if (commandGroups == null) {
+			initializeCommandGroups();
+		}
 
-		help.append("\tprovaddprofile <profileid> <location> <flavor> - Adds a profile with the given profileid, location and flavor");
-		help.append(NEW_LINE);
-		help.append("\tprovdelprofile <profileid> - Deletes a profile with the given profileid");
-		help.append(NEW_LINE);
-		help.append("\tprovlp [<profileid | *>] - Lists all profiles, or the contents of the profile at the given profile");
-		help.append(NEW_LINE);
-		help.append("\tprovlgp [<profileid>] - Lists all IUs with group capabilities in the given profile, or current profile if profileid is omitted");
-		help.append(NEW_LINE);
-		help.append("\tprovlpts [<profileid>] - Lists timestamps for given profile, or if no profileid given then the default profile timestamps are reported");
-		help.append(NEW_LINE);
-		help.append("\tprovlpquery <profileid | this> <expression> [ true | false ] - Lists the IUs that match the query expression in the given profile. The expression is expected to be a boolean match expression unless the third argument is true, in which case the expression is a full query");
-		help.append(NEW_LINE);
+		if (commandName != null) {
+			if (commandsHelp.containsKey(commandName)) {
+				addCommand(commandName, commandsHelp.get(commandName), help);
+			}
+			return help.toString();
+		}
 
-		help.append("---");
-		help.append("Install Commands");
-		help.append("---");
-		help.append(NEW_LINE);
+		addHeader(Messages.Console_help_header, help);
+		for (Entry<String, String[]> groupEntry : commandGroups.entrySet()) {
+			addHeader(groupEntry.getKey(), help);
+			for (String command : groupEntry.getValue()) {
+				addCommand(command, commandsHelp.get(command), help);
+			}
+		}
 
-		help.append("\tprovinstall <InstallableUnit> <version> <profileid> - installs an IU to the profileid.  If no profileid is given, installs into default profile.");
-		help.append(NEW_LINE);
-		help.append("\tprovremove <InstallableUnit> <version> <profileid> - Removes an IU from the profileid.  If no profileid is given, installs into default profile.");
+		return help.toString();
+	}
+
+	private void addHeader(String header, StringBuffer help) {
+		help.append("---"); //$NON-NLS-1$
+		help.append(header);
+		help.append("---"); //$NON-NLS-1$
 		help.append(NEW_LINE);
-		help.append("\tprovrevert <profileTimestamp> <profileid>] - Reverts to a given profileTimestamp for an optional profileId");
+	}
+
+	private void addCommand(String command, String description, StringBuffer help) {
+		help.append(TAB);
+		help.append(command);
+		help.append(" "); //$NON-NLS-1$
+		help.append(description);
 		help.append(NEW_LINE);
+	}
 
-		return help.toString();
+	private void initializeCommandsHelp() {
+		commandsHelp = new HashMap<String, String>();
+
+		// add commands for repository
+		commandsHelp.put("provaddrepo", Messages.Console_help_provaddrepo_description); //$NON-NLS-1$
+		commandsHelp.put("provdelrepo", Messages.Console_help_provdelrepo_description); //$NON-NLS-1$
+		commandsHelp.put("provaddmetadatarepo", Messages.Console_help_provaddmetadatarepo_description); //$NON-NLS-1$
+		commandsHelp.put("provdelmetadatarepo", Messages.Console_help_provdelmetadatarepo_description); //$NON-NLS-1$
+		commandsHelp.put("provaddartifactrepo", Messages.Console_help_provaddartifactrepo_description); //$NON-NLS-1$
+		commandsHelp.put("provdelartifactrepo", Messages.Console_help_provdelartifactrepo_description); //$NON-NLS-1$
+		commandsHelp.put("provlg", Messages.Console_help_provlg_description); //$NON-NLS-1$
+		commandsHelp.put("provlr", Messages.Console_help_provlr_description); //$NON-NLS-1$
+		commandsHelp.put("provlar", Messages.Console_help_provlar_description); //$NON-NLS-1$
+		commandsHelp.put("provliu", Messages.Console_help_provliu_description); //$NON-NLS-1$
+		commandsHelp.put("provlquery", Messages.Console_help_provlquery_description); //$NON-NLS-1$
+
+		// add commands for profiles
+		commandsHelp.put("provaddprofile", Messages.Console_help_provaddprofile_description); //$NON-NLS-1$
+		commandsHelp.put("provdelprofile", Messages.Console_help_provdelprofile_description); //$NON-NLS-1$
+		commandsHelp.put("provlp", Messages.Console_help_provlp_description); //$NON-NLS-1$
+		commandsHelp.put("provlgp", Messages.Console_help_provlgp_description); //$NON-NLS-1$
+		commandsHelp.put("provlpts", Messages.Console_help_provlpts_description); //$NON-NLS-1$
+		commandsHelp.put("provlpquery", Messages.Console_help_provlpquery_description); //$NON-NLS-1$
+
+		// add commands for install/uninstall
+		commandsHelp.put("provinstall", Messages.Console_help_provinstall_description); //$NON-NLS-1$
+		commandsHelp.put("provremove", Messages.Console_help_provremove_description); //$NON-NLS-1$
+		commandsHelp.put("provrevert", Messages.Console_help_provrevert_description); //$NON-NLS-1$
+	}
+
+	private void initializeCommandGroups() {
+		commandGroups = new LinkedHashMap<String, String[]>();
+		commandGroups.put(Messages.Console_help_repository_header, new String[] {"provaddrepo", "provdelrepo", "provaddmetadatarepo", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				"provdelmetadatarepo", "provaddartifactrepo", "provdelartifactrepo", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				"provlg", "provlr", "provlar", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				"provliu", "provlquery"}); //$NON-NLS-1$ //$NON-NLS-2$
+
+		commandGroups.put(Messages.Console_help_profile_registry_header, new String[] {"provaddprofile", "provdelprofile", //$NON-NLS-1$ //$NON-NLS-2$
+				"provlp", "provlgp", "provlpts", "provlpquery"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+		commandGroups.put(Messages.Console_help_install_header, new String[] {"provinstall", "provremove", "provrevert"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvisioningHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvisioningHelper.java
index 883f580..46fe0e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvisioningHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/ProvisioningHelper.java
@@ -17,13 +17,13 @@ import java.util.Map;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
 import org.eclipse.equinox.internal.provisional.p2.director.PlanExecutionHelper;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.engine.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 import org.eclipse.equinox.p2.query.*;
 import org.eclipse.equinox.p2.repository.IRepositoryManager;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
@@ -199,7 +199,7 @@ public class ProvisioningHelper {
 		if (engine == null)
 			throw new ProvisionException("No director service found.");
 		ProvisioningContext context = new ProvisioningContext(agent);
-		ProfileChangeRequest request = new ProfileChangeRequest(profile);
+		IProfileChangeRequest request = planner.createChangeRequest(profile);
 		request.addAll(units.toUnmodifiableSet());
 		IProvisioningPlan result = planner.getProvisioningPlan(request, context, progress);
 		return PlanExecutionHelper.executePlan(result, engine, context, progress);
@@ -299,7 +299,7 @@ public class ProvisioningHelper {
 		if (engine == null)
 			throw new ProvisionException("No engine service found.");
 		ProvisioningContext context = new ProvisioningContext(agent);
-		ProfileChangeRequest request = new ProfileChangeRequest(profile);
+		IProfileChangeRequest request = planner.createChangeRequest(profile);
 		request.removeAll(units.toUnmodifiableSet());
 		IProvisioningPlan result = planner.getProvisioningPlan(request, context, progress);
 		return PlanExecutionHelper.executePlan(result, engine, context, progress);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/messages.properties
new file mode 100644
index 0000000..e422fb2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.console/src/org/eclipse/equinox/internal/p2/console/messages.properties
@@ -0,0 +1,35 @@
+###############################################################################
+# Copyright (c) 2011 SAP AG and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     SAP AG - initial API and implementation
+###############################################################################
+ 
+Console_help_header=p2 Provisioning Commands.
+Console_help_repository_header=Repository Commands.
+Console_help_provaddrepo_description=<repository URI> - Add specified URI as metadata and artifact repository.
+Console_help_provdelrepo_description=<repository URI> - Remove specified metadata and artifact repository.
+Console_help_provaddmetadatarepo_description=<repository URI> - Add specified URI as metadata repository.
+Console_help_provdelmetadatarepo_description=<repository URI> - Remove specified metadata repository.
+Console_help_provaddartifactrepo_description=<repository URI> - Add specified URI as artifact repository.
+Console_help_provdelartifactrepo_description=<repository URI> - Remove specified artifact repository.
+Console_help_provlg_description=[<repository URI> <iu id | *> <version range | *>] - Lists all IUs with group capabilities in the given repo or in all repos if URI is omitted.
+Console_help_provlr_description=[<repository URI> <iu id | *> <version range | *>] - Lists all metadata repositories, or the contents of a given metadata repository.
+Console_help_provlar_description=[<repository URI>] - Lists all artifact repositories, or the content of a given artifact repository.
+Console_help_provliu_description=[<repository URI | *> <iu id | *> <version range | *>] - Lists the IUs that match the pattern in the given repo.  * matches all.
+Console_help_provlquery_description=<repository URI | *> <expression> [ true | false ] - Lists the IUs that match the query expression in the given repo.  * matches all. The expression is expected to be a boolean match expression unless the third argument is true, in which case the expression is a full query.
+Console_help_profile_registry_header=Profile Registry Commands.
+Console_help_provaddprofile_description=<profileid> <location> <flavor> - Add a profile with the given profileid, location and flavor.
+Console_help_provdelprofile_description=<profileid> - Deletes the profile with the given profileid.
+Console_help_provlp_description=[<profileid | *>] - Lists all profiles, or the contents of an individual profile if profileid is specified.
+Console_help_provlgp_description=[<profileid>] - Lists all IUs with group capabilities in the given profile, or current profile if profileid is omitted.
+Console_help_provlpts_description=[<profileid>] - Lists timestamps for given profile, or if no profileid gis iven then the default profile timestamps are reported.
+Console_help_provlpquery_description=<profileid | this> <expression> [ true | false ] - Lists the IUs that match the query expression in the given profile. The expression is expected to be a boolean match expression unless the third argument is true, in which case the expression is a full query.
+Console_help_install_header=Install Commands.
+Console_help_provinstall_description=<InstallableUnit> <version> <profileid> - Install an IU to the profileid.  If no profileid is given, installs into default profile.
+Console_help_provremove_description=<InstallableUnit> <version> <profileid> - Uninstall an IU from the profileid.  If no profileid is given, uninstalls form default profile.
+Console_help_provrevert_description=<profileTimestamp> [<profileid>] - Reverts to a given profileTimestamp for an optional profileId.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/.options b/eclipse/plugins/org.eclipse.equinox.p2.core/.options
index a4d705b..7024ada 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/.options
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/.options
@@ -38,4 +38,7 @@ org.eclipse.equinox.p2.core/reconciler=false
 org.eclipse.equinox.p2.core/publisher=false
 
 #Detailed debugging information about event clients
-org.eclipse.equinox.p2.core/events/client = false
\ No newline at end of file
+org.eclipse.equinox.p2.core/events/client = false
+
+#Information about the use of the default provisioning UI
+org.eclipse.equinox.p2.core/ui/default = false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
index 4b1bcb6..dc3c9e2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/META-INF/MANIFEST.MF
@@ -2,12 +2,12 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.core;singleton:=true
-Bundle-Version: 2.0.3.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.equinox.internal.p2.core.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equinox.p2.metadata.generator,org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.repository",
+Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equinox.p2.publisher,org.eclipse.equinox.p2.repository",
  org.eclipse.equinox.internal.p2.core.helpers;
   x-friends:="org.eclipse.equinox.frameworkadmin.test,
    org.eclipse.equinox.p2.artifact.optimizers,
@@ -23,10 +23,10 @@ Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equ
    org.eclipse.equinox.p2.garbagecollector,
    org.eclipse.equinox.p2.installer,
    org.eclipse.equinox.p2.metadata,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.metadata.repository,
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.publisher,
+   org.eclipse.equinox.p2.publisher.eclipse,
    org.eclipse.equinox.p2.ql,
    org.eclipse.equinox.p2.reconciler.dropins,
    org.eclipse.equinox.p2.repository,
@@ -40,7 +40,8 @@ Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equ
    org.eclipse.equinox.p2.ui.sdk.scheduler,
    org.eclipse.equinox.p2.updatechecker,
    org.eclipse.equinox.p2.updatechecker.app,
-   org.eclipse.equinox.p2.updatesite",
+   org.eclipse.equinox.p2.updatesite,
+   org.eclipse.equinox.p2.transport.ecf",
  org.eclipse.equinox.internal.provisional.p2.core.eventbus;
   x-friends:="org.eclipse.equinox.p2.artifact.repository,
    org.eclipse.equinox.p2.director,
@@ -48,7 +49,6 @@ Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equ
    org.eclipse.equinox.p2.engine,
    org.eclipse.equinox.p2.garbagecollector,
    org.eclipse.equinox.p2.metadata,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.metadata.repository,
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.publisher,
@@ -56,6 +56,7 @@ Export-Package: org.eclipse.equinox.internal.p2.core;x-friends:="org.eclipse.equ
    org.eclipse.equinox.p2.touchpoint.eclipse,
    org.eclipse.equinox.p2.touchpoint.natives,
    org.eclipse.equinox.p2.ui,
+   org.eclipse.equinox.p2.ui.admin,
    org.eclipse.equinox.p2.ui.sdk,
    org.eclipse.equinox.p2.ui.sdk.scheduler,
    org.eclipse.equinox.p2.updatesite",
@@ -71,5 +72,5 @@ Import-Package: org.eclipse.osgi.framework.eventmgr;version="1.2.0",
  org.eclipse.osgi.framework.log;version="1.0.0",
  org.eclipse.osgi.service.debug;version="1.0.0",
  org.eclipse.osgi.util;version="1.0.0",
- org.osgi.framework;version="1.3.0",
- org.osgi.util.tracker;version="1.3.0"
+ org.osgi.framework;version="1.6.0",
+ org.osgi.util.tracker;version="1.5.0"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.core/build.properties
index 98b7174..26802d4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
+# Copyright (c) 2009, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml
index 829e767..1135dcf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.core</artifactId>
-  <version>2.0.2.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/Activator.java
index 8571bc6..bfa77c3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/Activator.java
@@ -45,9 +45,9 @@ public class Activator implements BundleActivator {
 	private static final String VAR_USER_HOME = "@user.home"; //$NON-NLS-1$
 
 	private IProvisioningAgent agent;
-	private ServiceRegistration agentLocationRegistration = null;
+	private ServiceRegistration<IAgentLocation> agentLocationRegistration = null;
 
-	ServiceTracker logTracker;
+	ServiceTracker<FrameworkLog, FrameworkLog> logTracker;
 
 	/**
 	 * NOTE: This method is copied from LocationHelper in org.eclipse.osgi
@@ -106,10 +106,10 @@ public class Activator implements BundleActivator {
 		Activator a = instance;
 		if (a == null)
 			return null;
-		ServiceTracker tracker = a.getLogTracker();
+		ServiceTracker<FrameworkLog, FrameworkLog> tracker = a.getLogTracker();
 		if (tracker == null)
 			return null;
-		return (FrameworkLog) tracker.getService();
+		return tracker.getService();
 	}
 
 	private static String substituteVar(String source, String var, String prop) {
@@ -147,13 +147,13 @@ public class Activator implements BundleActivator {
 		return result;
 	}
 
-	private ServiceTracker getLogTracker() {
+	private ServiceTracker<FrameworkLog, FrameworkLog> getLogTracker() {
 		if (logTracker != null)
 			return logTracker;
 		//lazy init if the bundle has been started
 		if (context == null)
 			return null;
-		logTracker = new ServiceTracker(context, FrameworkLog.class.getName(), null);
+		logTracker = new ServiceTracker<FrameworkLog, FrameworkLog>(context, FrameworkLog.class, null);
 		logTracker.open();
 		return logTracker;
 	}
@@ -167,10 +167,10 @@ public class Activator implements BundleActivator {
 		//no need to register an agent if there is no agent location
 		if (agentDataLocation == null)
 			return;
-		ServiceReference agentProviderRef = context.getServiceReference(IProvisioningAgentProvider.SERVICE_NAME);
+		ServiceReference<IProvisioningAgentProvider> agentProviderRef = context.getServiceReference(IProvisioningAgentProvider.class);
 		IProvisioningAgentProvider provider = null;
 		if (agentProviderRef != null)
-			provider = (IProvisioningAgentProvider) context.getService(agentProviderRef);
+			provider = context.getService(agentProviderRef);
 
 		if (provider == null) {
 			// If we don't have a provider, which could happen if the p2.core bundle is
@@ -195,7 +195,7 @@ public class Activator implements BundleActivator {
 		Dictionary<String, Object> locationProperties = new Hashtable<String, Object>();
 		if (agentDataLocation != null) {
 			locationProperties.put("type", PROP_AGENT_DATA_AREA); //$NON-NLS-1$
-			agentLocationRegistration = aContext.registerService(IAgentLocation.SERVICE_NAME, agentDataLocation, locationProperties);
+			agentLocationRegistration = aContext.registerService(IAgentLocation.class, agentDataLocation, locationProperties);
 		}
 		registerAgent();
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/AgentLocation.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/AgentLocation.java
index 75849e0..2be7743 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/AgentLocation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/AgentLocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/DefaultAgentProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/DefaultAgentProvider.java
index 158e281..d4d11ee 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/DefaultAgentProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/DefaultAgentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ public class DefaultAgentProvider implements IProvisioningAgentProvider {
 			properties.put(Constants.SERVICE_RANKING, new Integer(100));
 			properties.put(IProvisioningAgent.SERVICE_CURRENT, Boolean.TRUE.toString());
 		}
-		ServiceRegistration reg = context.registerService(IProvisioningAgent.SERVICE_NAME, result, properties);
+		ServiceRegistration<IProvisioningAgent> reg = context.registerService(IProvisioningAgent.class, result, properties);
 		result.setServiceRegistration(reg);
 		return result;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningAgent.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningAgent.java
index 20df0d9..32a6a30 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningAgent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningAgent.java
@@ -23,13 +23,13 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
 /**
  * Represents a p2 agent instance.
  */
-public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCustomizer {
+public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCustomizer<IAgentServiceFactory, Object> {
 
 	private final Map<String, Object> agentServices = Collections.synchronizedMap(new HashMap<String, Object>());
 	private BundleContext context;
 	private volatile boolean stopped = false;
-	private ServiceRegistration reg;
-	private final Map<ServiceReference, ServiceTracker> trackers = Collections.synchronizedMap(new HashMap<ServiceReference, ServiceTracker>());
+	private ServiceRegistration<IProvisioningAgent> reg;
+	private final Map<ServiceReference<IAgentServiceFactory>, ServiceTracker<IAgentServiceFactory, Object>> trackers = Collections.synchronizedMap(new HashMap<ServiceReference<IAgentServiceFactory>, ServiceTracker<IAgentServiceFactory, Object>>());
 
 	/**
 	 * Instantiates a provisioning agent.
@@ -51,17 +51,18 @@ public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCust
 			if (service != null)
 				return service;
 			//attempt to get factory service from service registry
-			ServiceReference[] refs;
+			Collection<ServiceReference<IAgentServiceFactory>> refs;
 			try {
-				refs = context.getServiceReferences(IAgentServiceFactory.SERVICE_NAME, "(" + IAgentServiceFactory.PROP_CREATED_SERVICE_NAME + '=' + serviceName + ')'); //$NON-NLS-1$
+				refs = context.getServiceReferences(IAgentServiceFactory.class, "(" + IAgentServiceFactory.PROP_CREATED_SERVICE_NAME + '=' + serviceName + ')'); //$NON-NLS-1$
 			} catch (InvalidSyntaxException e) {
 				e.printStackTrace();
 				return null;
 			}
-			if (refs == null || refs.length == 0)
+			if (refs == null || refs.isEmpty())
 				return null;
+			ServiceReference<IAgentServiceFactory> firstRef = refs.iterator().next();
 			//track the factory so that we can automatically remove the service when the factory goes away
-			ServiceTracker tracker = new ServiceTracker(context, refs[0], this);
+			ServiceTracker<IAgentServiceFactory, Object> tracker = new ServiceTracker<IAgentServiceFactory, Object>(context, firstRef, this);
 			tracker.open();
 			IAgentServiceFactory factory = (IAgentServiceFactory) tracker.getService();
 			if (factory == null) {
@@ -74,7 +75,7 @@ public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCust
 				return null;
 			}
 			registerService(serviceName, service);
-			trackers.put(refs[0], tracker);
+			trackers.put(firstRef, tracker);
 			return service;
 		}
 	}
@@ -99,9 +100,9 @@ public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCust
 		//treat a null location as using the currently running platform
 		IAgentLocation agentLocation = null;
 		if (location == null) {
-			ServiceReference ref = context.getServiceReference(IAgentLocation.SERVICE_NAME);
+			ServiceReference<IAgentLocation> ref = context.getServiceReference(IAgentLocation.class);
 			if (ref != null) {
-				agentLocation = (IAgentLocation) context.getService(ref);
+				agentLocation = context.getService(ref);
 				context.ungetService(ref);
 			}
 		} else {
@@ -135,7 +136,7 @@ public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCust
 		stopped = true;
 		//close all service trackers
 		synchronized (trackers) {
-			for (ServiceTracker t : trackers.values())
+			for (ServiceTracker<IAgentServiceFactory, Object> t : trackers.values())
 				t.close();
 			trackers.clear();
 		}
@@ -145,14 +146,14 @@ public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCust
 		}
 	}
 
-	public void setServiceRegistration(ServiceRegistration reg) {
+	public void setServiceRegistration(ServiceRegistration<IProvisioningAgent> reg) {
 		this.reg = reg;
 	}
 
 	/*(non-Javadoc)
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#addingService(org.osgi.framework.ServiceReference)
 	 */
-	public Object addingService(ServiceReference reference) {
+	public Object addingService(ServiceReference<IAgentServiceFactory> reference) {
 		if (stopped)
 			return null;
 		return context.getService(reference);
@@ -161,14 +162,14 @@ public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCust
 	/*(non-Javadoc)
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#modifiedService(org.osgi.framework.ServiceReference, java.lang.Object)
 	 */
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<IAgentServiceFactory> reference, Object service) {
 		//nothing to do
 	}
 
 	/*(non-Javadoc)
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#removedService(org.osgi.framework.ServiceReference, java.lang.Object)
 	 */
-	public void removedService(ServiceReference reference, Object factoryService) {
+	public void removedService(ServiceReference<IAgentServiceFactory> reference, Object factoryService) {
 		if (stopped)
 			return;
 		String serviceName = (String) reference.getProperty(IAgentServiceFactory.PROP_CREATED_SERVICE_NAME);
@@ -180,7 +181,7 @@ public class ProvisioningAgent implements IProvisioningAgent, ServiceTrackerCust
 		if (FrameworkUtil.getBundle(registered.getClass()) == FrameworkUtil.getBundle(factoryService.getClass())) {
 			//the service we are holding is going away
 			unregisterService(serviceName, registered);
-			ServiceTracker toRemove = trackers.remove(reference);
+			ServiceTracker<IAgentServiceFactory, Object> toRemove = trackers.remove(reference);
 			if (toRemove != null)
 				toRemove.close();
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningEventBus.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningEventBus.java
index eff6881..50448df 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningEventBus.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/ProvisioningEventBus.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,9 +21,9 @@ import org.eclipse.osgi.framework.eventmgr.*;
 /**
  * Default implementation of the {@link IProvisioningEventBus} service.
  */
-public class ProvisioningEventBus implements EventDispatcher, IProvisioningEventBus, IAgentService {
-	private final CopyOnWriteIdentityMap syncListeners = new CopyOnWriteIdentityMap();
-	private final CopyOnWriteIdentityMap asyncListeners = new CopyOnWriteIdentityMap();
+public class ProvisioningEventBus implements EventDispatcher<ProvisioningListener, ProvisioningListener, EventObject>, IProvisioningEventBus, IAgentService {
+	private final CopyOnWriteIdentityMap<ProvisioningListener, ProvisioningListener> syncListeners = new CopyOnWriteIdentityMap<ProvisioningListener, ProvisioningListener>();
+	private final CopyOnWriteIdentityMap<ProvisioningListener, ProvisioningListener> asyncListeners = new CopyOnWriteIdentityMap<ProvisioningListener, ProvisioningListener>();
 	private EventManager eventManager = new EventManager("Provisioning Event Dispatcher"); //$NON-NLS-1$
 
 	private Object dispatchEventLock = new Object();
@@ -75,7 +75,7 @@ public class ProvisioningEventBus implements EventDispatcher, IProvisioningEvent
 				return;
 		}
 		/* queue to hold set of listeners */
-		ListenerQueue listeners = new ListenerQueue(eventManager);
+		ListenerQueue<ProvisioningListener, ProvisioningListener, EventObject> listeners = new ListenerQueue<ProvisioningListener, ProvisioningListener, EventObject>(eventManager);
 
 		/* synchronize while building the listener list */
 		synchronized (syncListeners) {
@@ -85,7 +85,7 @@ public class ProvisioningEventBus implements EventDispatcher, IProvisioningEvent
 			listeners.dispatchEventSynchronous(0, event);
 		}
 
-		listeners = new ListenerQueue(eventManager);
+		listeners = new ListenerQueue<ProvisioningListener, ProvisioningListener, EventObject>(eventManager);
 		synchronized (asyncListeners) {
 			listeners.queueListeners(asyncListeners.entrySet(), this);
 			synchronized (dispatchEventLock) {
@@ -98,14 +98,14 @@ public class ProvisioningEventBus implements EventDispatcher, IProvisioningEvent
 	/* (non-Javadoc)
 	 * @see org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus#dispatchEvent(java.lang.Object, java.lang.Object, int, java.lang.Object)
 	 */
-	public void dispatchEvent(Object eventListener, Object listenerObject, int eventAction, Object eventObject) {
+	public void dispatchEvent(ProvisioningListener eventListener, ProvisioningListener listenerObject, int eventAction, EventObject eventObject) {
 		synchronized (dispatchEventLock) {
 			if (closed)
 				return;
 			dispatchingEvents++;
 		}
 		try {
-			((ProvisioningListener) eventListener).notify((EventObject) eventObject);
+			eventListener.notify(eventObject);
 		} catch (Exception e) {
 			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Exception during event notification", e)); //$NON-NLS-1$
 		} finally {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java
index ded76df..aef923c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/OrderedProperties.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/OrderedProperties.java
index 2520f2d..cf20a74 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/OrderedProperties.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/OrderedProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2008 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/ServiceHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/ServiceHelper.java
index e09fb66..bf06f0c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/ServiceHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/ServiceHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -8,6 +8,7 @@
  ******************************************************************************/
 package org.eclipse.equinox.internal.p2.core.helpers;
 
+import java.util.Collection;
 import org.osgi.framework.*;
 
 public class ServiceHelper {
@@ -17,13 +18,49 @@ public class ServiceHelper {
 	 * system thinks the service is not in use but indeed the caller is about to use the returned 
 	 * service object.  
 	 * @param context
+	 * @param clazz the service class
+	 * @return The requested service
+	 */
+	public static <T> T getService(BundleContext context, Class<T> clazz) {
+		if (context == null)
+			return null;
+		ServiceReference<T> reference = context.getServiceReference(clazz);
+		if (reference == null)
+			return null;
+		T result = context.getService(reference);
+		context.ungetService(reference);
+		return result;
+	}
+
+	public static <T> T getService(BundleContext context, Class<T> clazz, String filter) {
+		Collection<ServiceReference<T>> references;
+		try {
+			references = context.getServiceReferences(clazz, filter);
+		} catch (InvalidSyntaxException e) {
+			// TODO Auto-generated catch block
+			return null;
+		}
+		if (references.isEmpty())
+			return null;
+		final ServiceReference<T> ref = references.iterator().next();
+		T result = context.getService(ref);
+		context.ungetService(ref);
+		return result;
+	}
+
+	/**
+	 * Returns the service described by the given arguments.  Note that this is a helper class
+	 * that <b>immediately</b> ungets the service reference.  This results in a window where the
+	 * system thinks the service is not in use but indeed the caller is about to use the returned 
+	 * service object.  
+	 * @param context
 	 * @param name
 	 * @return The requested service
 	 */
 	public static Object getService(BundleContext context, String name) {
 		if (context == null)
 			return null;
-		ServiceReference reference = context.getServiceReference(name);
+		ServiceReference<?> reference = context.getServiceReference(name);
 		if (reference == null)
 			return null;
 		Object result = context.getService(reference);
@@ -32,7 +69,7 @@ public class ServiceHelper {
 	}
 
 	public static Object getService(BundleContext context, String name, String filter) {
-		ServiceReference[] references;
+		ServiceReference<?>[] references;
 		try {
 			references = context.getServiceReferences(name, filter);
 		} catch (InvalidSyntaxException e) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/StringHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/StringHelper.java
index 2d6a9e5..5a0dbd5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/StringHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/StringHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/TarFile.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/TarFile.java
index 4b49712..56b672d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/TarFile.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/TarFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java
index 7712732..952e425 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/Tracing.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ public class Tracing {
 	public static boolean DEBUG_REMOVE_REPO = false;
 	public static boolean DEBUG_UPDATE_CHECK = false;
 	public static boolean DEBUG_EVENTS_CLIENT = false;
-	public static boolean DEBUG_VERIFIER = false;
+	public static boolean DEBUG_DEFAULT_UI = false;
 
 	static {
 		DebugOptions options = (DebugOptions) ServiceHelper.getService(Activator.context, DebugOptions.class.getName());
@@ -56,7 +56,7 @@ public class Tracing {
 				DEBUG_RECONCILER = options.getBooleanOption(Activator.ID + "/reconciler", false); //$NON-NLS-1$
 				DEBUG_REMOVE_REPO = options.getBooleanOption(Activator.ID + "/core/removeRepo", false); //$NON-NLS-1$
 				DEBUG_UPDATE_CHECK = options.getBooleanOption(Activator.ID + "/updatechecker", false); //$NON-NLS-1$
-				DEBUG_VERIFIER = options.getBooleanOption(Activator.ID + "/verifier", false); //$NON-NLS-1$
+				DEBUG_DEFAULT_UI = options.getBooleanOption(Activator.ID + "/ui/default", false); //$NON-NLS-1$
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/provisional/p2/core/eventbus/IProvisioningEventBus.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/provisional/p2/core/eventbus/IProvisioningEventBus.java
index ee4d7d3..bd2e975 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/provisional/p2/core/eventbus/IProvisioningEventBus.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/provisional/p2/core/eventbus/IProvisioningEventBus.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@ import org.eclipse.osgi.framework.eventmgr.EventDispatcher;
  * The bus for events related to provisioning. This service can be used to register
  * a listener to receive provisioning events, or to broadcast events.
  */
-public interface IProvisioningEventBus extends EventDispatcher {
+public interface IProvisioningEventBus extends EventDispatcher<ProvisioningListener, ProvisioningListener, EventObject> {
 	/**
 	 * The name used for obtaining a reference to the event bus service.
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IAgentLocation.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IAgentLocation.java
index 13b18ab..a3a21c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IAgentLocation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IAgentLocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IPool.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IPool.java
new file mode 100644
index 0000000..849b41d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IPool.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *  Copyright (c) 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.core;
+
+/**
+ * A Pool allows semantically equivalent objects to be shared.  To be useful, objects added to the pool should implement
+ * a meaningful equals() method.
+ * <p>
+ * Care must be taken by users that object sharing is appropriate for their application.  It is easy
+ * to "over share" objects leading to unexpected and difficult to debug behaviour.
+ * </p><p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ * @noimplement This interface is not intended to be implemented by clients. 
+ * @since 2.1
+ */
+public interface IPool<T> {
+
+	/** 
+	 * Returns the first object from this pool which is equal to the given object.  If the pool 
+	 * contains no such object then the object is added to the pool and returned.  If the object is <code>null</code>, 
+	 * <code>null</code> is returned.
+	 * 
+	 * @param newObject the object to add
+	 * @return a shared object that is equal to the given object or <code>null</code>
+	 */
+	public abstract T add(T newObject);
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IProvisioningAgentProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IProvisioningAgentProvider.java
index 11fdd11..67069e0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IProvisioningAgentProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/IProvisioningAgentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/ProvisionException.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/ProvisionException.java
index af5b678..e88fe63 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/ProvisionException.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/ProvisionException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -101,6 +101,13 @@ public class ProvisionException extends CoreException {
 	public static final int ARTIFACT_INCOMPLETE_SIZING = 1202;
 
 	/**
+	 * Status code constant (value 1203) indicating an artifact's md5
+	 * does not match the expected value.
+	 * @since 2.1
+	 */
+	public static final int ARTIFACT_MD5_NOT_MATCH = 1203;
+
+	/**
 	 * Creates a new exception with the given status object.  The message
 	 * of the given status is used as the exception message.
 	 *
@@ -131,4 +138,4 @@ public class ProvisionException extends CoreException {
 		super(new Status(IStatus.ERROR, Activator.ID, message, cause));
 	}
 
-}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/StrongPool.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/StrongPool.java
new file mode 100644
index 0000000..d178038
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/StrongPool.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * An object pool backed by strong references.  Objects stored in this pool
+ * will not be garbage collected as they refer to themselves.  The client is responsible for 
+ * nulling all references to the pool instance when it is no longer needed so that
+ * the contained objects can be garbage collected.  
+ * <p>
+ * If a long lived, memory managed pool is required use {@link org.eclipse.equinox.p2.core.WeakPool}.
+ * </p>
+ * @since 2.1
+ */
+public class StrongPool<T> implements IPool<T> {
+	private Map<T, T> pool = new HashMap<T, T>();
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.core.IPool#add(T)
+	 */
+	public T add(T newObject) {
+		if (newObject == null) {
+			return null;
+		}
+
+		T reference = pool.get(newObject);
+		if (reference == null) {
+			pool.put(newObject, newObject);
+			return newObject;
+		}
+		return reference;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/UIServices.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/UIServices.java
index 2510d4d..00d79e3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/UIServices.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/UIServices.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/WeakPool.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/WeakPool.java
new file mode 100644
index 0000000..3f389fc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/WeakPool.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.core;
+
+import java.lang.ref.WeakReference;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+/**
+ * An object pool backed by weak references.  Objects stored in this pool
+ * will be garbage collected once all strong references to the objects are broken.
+ * <p>
+ * Since {@link WeakReference} are not particularly light-weight, a client could use a {@link StrongPool}
+ * if the pool will be short lived and explicitly nulled by the client.
+ * </p>
+ * @since 2.1
+ */
+public class WeakPool<T> implements IPool<T> {
+	private Map<T, WeakReference<T>> pool = new WeakHashMap<T, WeakReference<T>>();
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.core.IPool#add(T)
+	 */
+	public T add(T newObject) {
+		if (newObject == null) {
+			return null;
+		}
+
+		WeakReference<T> weakReference = pool.get(newObject);
+		if (weakReference != null) {
+			T reference = weakReference.get();
+			if (reference != null) {
+				return reference;
+			}
+		}
+		pool.put(newObject, new WeakReference<T>(newObject));
+		return newObject;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/spi/IAgentServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/spi/IAgentServiceFactory.java
index 0c1b7de..c81b0d5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/spi/IAgentServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/p2/core/spi/IAgentServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.director.app/.settings/org.eclipse.jdt.core.prefs
index f01b97a..61d18f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Fri Jan 22 13:29:43 EST 2010
+#Thu Aug 05 08:38:45 CDT 2010
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -62,15 +62,16 @@ org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=error
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF
index 16245de..99d0b36 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.director.app;singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.director.app.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -14,10 +14,13 @@ Bundle-RequiredExecutionEnvironment: J2SE-1.5,
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.equinox.app,
  org.eclipse.equinox.internal.p2.core.helpers,
+ org.eclipse.equinox.internal.p2.director,
  org.eclipse.equinox.internal.provisional.p2.director,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.engine;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.engine.query;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.metadata;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.metadata.expression;version="2.0.0",
  org.eclipse.equinox.p2.planner;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.query;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository;version="[2.0.0,3.0.0)",
@@ -26,5 +29,5 @@ Import-Package: org.eclipse.equinox.app,
  org.eclipse.osgi.framework.log,
  org.eclipse.osgi.service.environment,
  org.eclipse.osgi.util,
- org.osgi.framework,
+ org.osgi.framework;version="1.6.0",
  org.osgi.service.packageadmin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.director.app/build.properties
index d80a7ff..a3e6754 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/plugin.xml b/eclipse/plugins/org.eclipse.equinox.p2.director.app/plugin.xml
index 6d9af37..4c81301 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/plugin.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/plugin.xml
@@ -1,11 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?>
 <plugin>
-	<extension id="application" point="org.eclipse.core.runtime.applications"> 
-		<application> 
-			<run class="org.eclipse.equinox.internal.p2.director.app.Application"/> 
-		</application> 
-	</extension>
 	<extension id="org.eclipse.equinox.p2.director" point="org.eclipse.core.runtime.applications"> 
 		<application
         cardinality="singleton-global"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.director.app/pom.xml
index 4451f7c..aaa8792 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.director.app</artifactId>
-  <version>1.0.200.qualifier</version>
+  <version>1.0.300.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Application.java b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Application.java
deleted file mode 100644
index 2a16dcc..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Application.java
+++ /dev/null
@@ -1,660 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Cloudsmith - https://bugs.eclipse.org/bugs/show_bug.cgi?id=226401
- *     EclipseSource - ongoing development
- *     Sonatype, Inc. - ongoing development
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.director.app;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.app.IApplication;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.provisional.p2.director.*;
-import org.eclipse.equinox.p2.core.*;
-import org.eclipse.equinox.p2.engine.*;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.planner.IPlanner;
-import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
-import org.eclipse.equinox.p2.query.*;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
-import org.eclipse.osgi.framework.log.FrameworkLog;
-import org.eclipse.osgi.service.environment.EnvironmentInfo;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.ServiceReference;
-
-/**
- * This is the original p2 director application created for the p2 1.0 release. There
- * is a replacement application in {@link DirectorApplication} that should be preferred
- * over this implementation where possible. This implementation remains for backwards
- * compatibility purposes.
- * @deprecated
- */
-public class Application implements IApplication {
-	private static final Integer EXIT_ERROR = new Integer(13);
-	static private final String ANT_PROPERTY_PREFIX = "${"; //$NON-NLS-1$
-	static private final String FLAVOR_DEFAULT = "tooling"; //$NON-NLS-1$
-
-	public static final int COMMAND_INSTALL = 0;
-	public static final int COMMAND_UNINSTALL = 1;
-	public static final int COMMAND_LIST = 2;
-
-	public static final String[] COMMAND_NAMES = {"-installIU", "-uninstallIU", "-list"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
-	private Path destination;
-
-	private URI[] artifactRepositoryLocations;
-	private URI[] metadataRepositoryLocations;
-
-	private URI[] metadataReposForRemoval;
-	private URI[] artifactReposForRemoval;
-	private IArtifactRepositoryManager artifactManager;
-	private IMetadataRepositoryManager metadataManager;
-
-	private String root;
-	private Version version = null;
-	private String flavor;
-	private String profileId;
-	private String profileProperties; // a comma-separated list of property pairs "tag=value"
-	private String bundlePool = null;
-	private String nl;
-	private String os;
-	private String arch;
-	private String ws;
-	private boolean roamingProfile = false;
-	private IPlanner planner;
-	private IEngine engine;
-	private boolean noProfileId = false;
-
-	private int command = -1;
-	protected IProvisioningAgent agent;
-
-	private void ambigousCommand(int cmd1, int cmd2) throws CoreException {
-		throw new CoreException(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.Ambigous_Command, new Object[] {COMMAND_NAMES[cmd1], COMMAND_NAMES[cmd2]})));
-	}
-
-	private ProfileChangeRequest buildProvisioningRequest(IProfile profile, IQueryResult<IInstallableUnit> roots, boolean install) {
-		ProfileChangeRequest request = new ProfileChangeRequest(profile);
-		markRoots(request, roots);
-		if (install) {
-			request.addAll(roots.toUnmodifiableSet());
-		} else {
-			request.removeAll(roots.toUnmodifiableSet());
-		}
-		return request;
-	}
-
-	/*
-	 * Copied from ProvisioningHelper 1.57
-	 */
-	static IProfile addProfile(IProvisioningAgent agent, String profileId, Map<String, String> properties) throws ProvisionException {
-		IProfileRegistry profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
-		if (profileRegistry == null)
-			return null;
-		IProfile profile = profileRegistry.getProfile(profileId);
-		if (profile != null)
-			return profile;
-
-		Map<String, String> profileProperties = new HashMap<String, String>(properties);
-		if (profileProperties.get(IProfile.PROP_ENVIRONMENTS) == null) {
-			EnvironmentInfo info = (EnvironmentInfo) ServiceHelper.getService(Activator.getContext(), EnvironmentInfo.class.getName());
-			if (info != null)
-				profileProperties.put(IProfile.PROP_ENVIRONMENTS, "osgi.os=" + info.getOS() + ",osgi.ws=" + info.getWS() + ",osgi.arch=" + info.getOSArch()); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
-			else
-				profileProperties.put(IProfile.PROP_ENVIRONMENTS, ""); //$NON-NLS-1$
-		}
-		return profileRegistry.addProfile(profileId, profileProperties);
-	}
-
-	/*
-	 * Copied from ProvisioningHelper 1.57
-	 */
-	static IProfile getProfile(IProvisioningAgent agent, String id) {
-		IProfileRegistry profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
-		if (profileRegistry == null)
-			return null;
-		return profileRegistry.getProfile(id);
-	}
-
-	/*
-	 * Copied from ProvisioningHelper 1.57
-	 */
-	static IMetadataRepository getMetadataRepository(IProvisioningAgent agent, URI location) {
-		IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
-		if (manager == null)
-			throw new IllegalStateException("No metadata repository manager found"); //$NON-NLS-1$
-		try {
-			return manager.loadRepository(location, null);
-		} catch (ProvisionException e) {
-			return null;
-		}
-	}
-
-	/*
-	 * Copied from ProvisioningHelper 1.57
-	 */
-	static IQueryResult<IInstallableUnit> getInstallableUnits(IProvisioningAgent agent, URI location, IQuery<IInstallableUnit> query, IProgressMonitor monitor) {
-		IQueryable<IInstallableUnit> queryable = null;
-		if (location == null) {
-			queryable = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
-		} else {
-			queryable = getMetadataRepository(agent, location);
-		}
-		if (queryable != null)
-			return queryable.query(query, monitor);
-		return Collector.emptyCollector();
-	}
-
-	private String getEnvironmentProperty() {
-		Map<String, String> values = new HashMap<String, String>();
-		if (os != null)
-			values.put("osgi.os", os); //$NON-NLS-1$
-		if (nl != null)
-			values.put("osgi.nl", nl); //$NON-NLS-1$
-		if (ws != null)
-			values.put("osgi.ws", ws); //$NON-NLS-1$
-		if (arch != null)
-			values.put("osgi.arch", arch); //$NON-NLS-1$
-		if (values.isEmpty())
-			return null;
-		return toString(values);
-	}
-
-	private IProfile initializeProfile() throws CoreException {
-		if (profileId == null) {
-			profileId = IProfileRegistry.SELF;
-			noProfileId = true;
-		}
-		IProfile profile = getProfile(agent, profileId);
-		if (profile == null) {
-			if (destination == null)
-				missingArgument("destination"); //$NON-NLS-1$
-			if (flavor == null)
-				flavor = System.getProperty("eclipse.p2.configurationFlavor", FLAVOR_DEFAULT); //$NON-NLS-1$
-
-			Map<String, String> props = new HashMap<String, String>();
-			props.put(IProfile.PROP_INSTALL_FOLDER, destination.toOSString());
-			if (bundlePool == null || bundlePool.equals(Messages.destination_commandline))
-				props.put(IProfile.PROP_CACHE, destination.toOSString());
-			else
-				props.put(IProfile.PROP_CACHE, bundlePool);
-			if (roamingProfile)
-				props.put(IProfile.PROP_ROAMING, Boolean.TRUE.toString());
-
-			String env = getEnvironmentProperty();
-			if (env != null)
-				props.put(IProfile.PROP_ENVIRONMENTS, env);
-			if (profileProperties != null) {
-				putProperties(profileProperties, props);
-			}
-			profile = addProfile(agent, profileId, props);
-		}
-		return profile;
-	}
-
-	private void initializeRepositories(boolean throwException) throws CoreException {
-		if (artifactRepositoryLocations == null) {
-			if (throwException)
-				missingArgument("artifactRepository"); //$NON-NLS-1$
-		} else {
-			artifactManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
-			if (artifactManager == null) {
-				if (throwException)
-					throw new ProvisionException(Messages.Application_NoManager);
-			} else {
-				int removalIdx = 0;
-				boolean anyValid = false; // do we have any valid repos or did they all fail to load?
-				artifactReposForRemoval = new URI[artifactRepositoryLocations.length];
-				for (int i = 0; i < artifactRepositoryLocations.length; i++) {
-					try {
-						if (!artifactManager.contains(artifactRepositoryLocations[i])) {
-							artifactManager.loadRepository(artifactRepositoryLocations[i], null);
-							artifactReposForRemoval[removalIdx++] = artifactRepositoryLocations[i];
-						}
-						anyValid = true;
-					} catch (ProvisionException e) {
-						//one of the repositories did not load
-						LogHelper.log(new Status(IStatus.ERROR, Activator.ID, artifactRepositoryLocations[i].toString() + " failed to load", e)); //$NON-NLS-1$
-					}
-				}
-				if (throwException && !anyValid)
-					//all repositories failed to load
-					throw new ProvisionException(Messages.Application_NoRepositories);
-			}
-		}
-
-		if (metadataRepositoryLocations == null) {
-			if (throwException)
-				missingArgument("metadataRepository"); //$NON-NLS-1$
-		} else {
-			metadataManager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
-			if (metadataManager == null) {
-				if (throwException)
-					throw new ProvisionException(Messages.Application_NoManager);
-			} else {
-				int removalIdx = 0;
-				boolean anyValid = false; // do we have any valid repos or did they all fail to load?
-				metadataReposForRemoval = new URI[metadataRepositoryLocations.length];
-				for (int i = 0; i < metadataRepositoryLocations.length; i++) {
-					try {
-						if (!metadataManager.contains(metadataRepositoryLocations[i])) {
-							metadataManager.loadRepository(metadataRepositoryLocations[i], null);
-							metadataReposForRemoval[removalIdx++] = metadataRepositoryLocations[i];
-						}
-						anyValid = true;
-					} catch (ProvisionException e) {
-						//one of the repositories did not load
-						LogHelper.log(new Status(IStatus.ERROR, Activator.ID, metadataRepositoryLocations[i].toString() + " failed to load", e)); //$NON-NLS-1$
-					}
-				}
-				if (throwException && !anyValid)
-					//all repositories failed to load
-					throw new ProvisionException(Messages.Application_NoRepositories);
-			}
-		}
-	}
-
-	private void initializeServices() throws ProvisionException {
-		ServiceReference agentProviderRef = Activator.getContext().getServiceReference(IProvisioningAgentProvider.SERVICE_NAME);
-		IProvisioningAgentProvider provider = (IProvisioningAgentProvider) Activator.getContext().getService(agentProviderRef);
-		agent = provider.createAgent(null);
-
-		IDirector director = (IDirector) agent.getService(IDirector.SERVICE_NAME);
-		if (director == null)
-			throw new RuntimeException(Messages.Missing_director);
-
-		planner = (IPlanner) agent.getService(IPlanner.SERVICE_NAME);
-		if (planner == null)
-			throw new RuntimeException(Messages.Missing_planner);
-
-		engine = (IEngine) agent.getService(IEngine.SERVICE_NAME);
-		if (engine == null)
-			throw new RuntimeException(Messages.Missing_Engine);
-	}
-
-	private void markRoots(IProfileChangeRequest request, IQueryResult<IInstallableUnit> roots) {
-		for (Iterator<IInstallableUnit> iterator = roots.iterator(); iterator.hasNext();) {
-			request.setInstallableUnitProfileProperty(iterator.next(), IProfile.PROP_PROFILE_ROOT_IU, Boolean.TRUE.toString());
-		}
-	}
-
-	private void missingArgument(String argumentName) throws CoreException {
-		throw new CoreException(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.Missing_Required_Argument, argumentName)));
-	}
-
-	private IStatus planAndExecute(IProfile profile, ProvisioningContext context, ProfileChangeRequest request) {
-		IProvisioningPlan result;
-		IStatus operationStatus;
-		result = planner.getProvisioningPlan(request, context, new NullProgressMonitor());
-		if (!result.getStatus().isOK())
-			operationStatus = result.getStatus();
-		else {
-			operationStatus = PlanExecutionHelper.executePlan(result, engine, context, new NullProgressMonitor());
-		}
-		return operationStatus;
-	}
-
-	private void printRequest(ProfileChangeRequest request) {
-		Collection<IInstallableUnit> toAdd = request.getAdditions();
-		Collection<IInstallableUnit> toRemove = request.getRemovals();
-		for (IInstallableUnit added : toAdd) {
-			System.out.println(NLS.bind(Messages.Installing, added.getId(), added.getVersion()));
-		}
-		for (IInstallableUnit removed : toRemove) {
-			System.out.println(NLS.bind(Messages.Uninstalling, removed.getId(), removed.getVersion()));
-		}
-	}
-
-	public void processArguments(String[] args) throws Exception {
-		if (args == null)
-			return;
-		for (int i = 0; i < args.length; i++) {
-
-			String opt = args[i];
-			if (opt.equals("-roaming")) { //$NON-NLS-1$
-				roamingProfile = true;
-			}
-
-			if (opt.equals(COMMAND_NAMES[COMMAND_LIST])) {
-				if (command != -1)
-					ambigousCommand(COMMAND_LIST, command);
-				command = COMMAND_LIST;
-			}
-
-			// check for args without parameters (i.e., a flag arg)
-
-			// check for args with parameters. If we are at the last
-			// argument or
-			// if the next one
-			// has a '-' as the first character, then we can't have an arg
-			// with
-			// a parm so continue.
-			if (i == args.length - 1 || args[i + 1].startsWith("-")) //$NON-NLS-1$
-				continue;
-
-			String arg = args[++i];
-
-			if (opt.equalsIgnoreCase("-profile")) //$NON-NLS-1$
-				profileId = arg;
-
-			if (opt.equalsIgnoreCase("-profileProperties") || opt.equalsIgnoreCase("-props")) //$NON-NLS-1$ //$NON-NLS-2$
-				profileProperties = arg;
-
-			// we create a path object here to handle ../ entries in the middle of paths
-			if (opt.equalsIgnoreCase("-destination") || opt.equalsIgnoreCase("-dest")) { //$NON-NLS-1$ //$NON-NLS-2$
-				if (arg.startsWith("file:")) //$NON-NLS-1$
-					arg = arg.substring(5);
-				destination = new Path(arg);
-			}
-
-			// we create a path object here to handle ../ entries in the middle of paths
-			if (opt.equalsIgnoreCase("-bundlepool") || opt.equalsIgnoreCase("-bp")) { //$NON-NLS-1$ //$NON-NLS-2$
-				if (arg.startsWith("file:")) //$NON-NLS-1$
-					arg = arg.substring(5);
-				bundlePool = new Path(arg).toOSString();
-			}
-
-			if (opt.equalsIgnoreCase("-metadataRepository") || opt.equalsIgnoreCase("-metadataRepositories") || opt.equalsIgnoreCase("-mr")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				metadataRepositoryLocations = getURIs(arg);
-
-			if (opt.equalsIgnoreCase("-artifactRepository") || opt.equalsIgnoreCase("-artifactRepositories") || opt.equalsIgnoreCase("-ar")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				artifactRepositoryLocations = getURIs(arg);
-
-			if (opt.equalsIgnoreCase("-flavor")) //$NON-NLS-1$
-				flavor = arg;
-
-			if (opt.equalsIgnoreCase(COMMAND_NAMES[COMMAND_INSTALL])) {
-				if (command != -1)
-					ambigousCommand(COMMAND_INSTALL, command);
-				root = arg;
-				command = COMMAND_INSTALL;
-			}
-
-			if (opt.equalsIgnoreCase("-version")) { //$NON-NLS-1$
-				if (arg != null && !arg.startsWith(ANT_PROPERTY_PREFIX))
-					version = Version.create(arg);
-			}
-
-			if (opt.equalsIgnoreCase(COMMAND_NAMES[COMMAND_UNINSTALL])) {
-				if (command != -1)
-					ambigousCommand(COMMAND_UNINSTALL, command);
-				root = arg;
-				command = COMMAND_UNINSTALL;
-			}
-
-			if (opt.equalsIgnoreCase("-p2.os")) { //$NON-NLS-1$
-				os = arg;
-			}
-			if (opt.equalsIgnoreCase("-p2.ws")) { //$NON-NLS-1$
-				ws = arg;
-			}
-			if (opt.equalsIgnoreCase("-p2.nl")) { //$NON-NLS-1$
-				nl = arg;
-			}
-			if (opt.equalsIgnoreCase("-p2.arch")) { //$NON-NLS-1$
-				arch = arg;
-			}
-		}
-
-	}
-
-	/**
-	 * @param pairs	a comma separated list of tag=value pairs
-	 * @param properties the collection into which the pairs are put
-	 */
-	private void putProperties(String pairs, Map<String, String> properties) {
-		StringTokenizer tok = new StringTokenizer(pairs, ",", true); //$NON-NLS-1$
-		while (tok.hasMoreTokens()) {
-			String next = tok.nextToken().trim();
-			int i = next.indexOf('=');
-			if (i > 0 && i < next.length() - 1) {
-				String tag = next.substring(0, i).trim();
-				String value = next.substring(i + 1, next.length()).trim();
-				if (tag.length() > 0 && value.length() > 0) {
-					properties.put(tag, value);
-				}
-			}
-		}
-	}
-
-	public Object run(String[] args) throws Exception {
-		System.out.println(Messages.Deprecated_application);
-		long time = -System.currentTimeMillis();
-		initializeServices();
-		processArguments(args);
-
-		IStatus operationStatus = Status.OK_STATUS;
-		IQuery<IInstallableUnit> query;
-		IQueryResult<IInstallableUnit> roots;
-		try {
-			initializeRepositories(command == COMMAND_INSTALL);
-			switch (command) {
-				case COMMAND_INSTALL :
-				case COMMAND_UNINSTALL :
-
-					IProfile profile = initializeProfile();
-					query = QueryUtil.createIUQuery(root, version == null ? VersionRange.emptyRange : new VersionRange(version, true, version, true));
-					roots = collectRootIUs(metadataRepositoryLocations, QueryUtil.createLatestQuery(query));
-					if (roots.isEmpty())
-						roots = profile.query(query, new NullProgressMonitor());
-					if (roots.isEmpty()) {
-						System.out.println(NLS.bind(Messages.Missing_IU, root));
-						logFailure(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.Missing_IU, root)));
-						return EXIT_ERROR;
-					}
-					// keep this result status in case there is a problem so we can report it to the user
-					boolean wasRoaming = Boolean.valueOf(profile.getProperty(IProfile.PROP_ROAMING)).booleanValue();
-					try {
-						IStatus updateRoamStatus = updateRoamingProperties(profile);
-						if (!updateRoamStatus.isOK()) {
-							MultiStatus multi = new MultiStatus(Activator.ID, IStatus.ERROR, NLS.bind(Messages.Cant_change_roaming, profile.getProfileId()), null);
-							multi.add(updateRoamStatus);
-							System.out.println(multi.getMessage());
-							System.out.println(updateRoamStatus.getMessage());
-							logFailure(multi);
-							return EXIT_ERROR;
-						}
-						ProvisioningContext context = new ProvisioningContext(agent);
-						context.setMetadataRepositories(metadataRepositoryLocations);
-						context.setArtifactRepositories(artifactRepositoryLocations);
-						ProfileChangeRequest request = buildProvisioningRequest(profile, roots, command == COMMAND_INSTALL);
-						printRequest(request);
-						operationStatus = planAndExecute(profile, context, request);
-					} finally {
-						// if we were originally were set to be roaming and we changed it, change it back before we return
-						if (wasRoaming && !Boolean.valueOf(profile.getProperty(IProfile.PROP_ROAMING)).booleanValue())
-							setRoaming(profile);
-					}
-					break;
-				case COMMAND_LIST :
-					query = QueryUtil.createIUQuery(null, VersionRange.emptyRange);
-					if (metadataRepositoryLocations == null)
-						missingArgument("metadataRepository"); //$NON-NLS-1$
-
-					roots = collectRootIUs(metadataRepositoryLocations, query);
-					Iterator<IInstallableUnit> unitIterator = roots.iterator();
-					while (unitIterator.hasNext()) {
-						IInstallableUnit iu = unitIterator.next();
-						System.out.println(iu.getId());
-					}
-					break;
-			}
-		} finally {
-			cleanupRepositories();
-		}
-
-		time += System.currentTimeMillis();
-		if (operationStatus.isOK())
-			System.out.println(NLS.bind(Messages.Operation_complete, new Long(time)));
-		else {
-			System.out.println(Messages.Operation_failed);
-			logFailure(operationStatus);
-			return EXIT_ERROR;
-		}
-		return IApplication.EXIT_OK;
-	}
-
-	private void cleanupRepositories() {
-		if (artifactReposForRemoval != null && artifactManager != null) {
-			for (int i = 0; i < artifactReposForRemoval.length && artifactReposForRemoval[i] != null; i++) {
-				artifactManager.removeRepository(artifactReposForRemoval[i]);
-			}
-		}
-		if (metadataReposForRemoval != null && metadataManager != null) {
-			for (int i = 0; i < metadataReposForRemoval.length && metadataReposForRemoval[i] != null; i++) {
-				metadataManager.removeRepository(metadataReposForRemoval[i]);
-			}
-		}
-	}
-
-	class LocationQueryable implements IQueryable<IInstallableUnit> {
-		private URI location;
-
-		public LocationQueryable(URI location) {
-			this.location = location;
-		}
-
-		public IQueryResult<IInstallableUnit> query(IQuery<IInstallableUnit> query, IProgressMonitor monitor) {
-			return getInstallableUnits(agent, location, query, monitor);
-		}
-	}
-
-	private IQueryResult<IInstallableUnit> collectRootIUs(URI[] locations, IQuery<IInstallableUnit> query) {
-		IProgressMonitor nullMonitor = new NullProgressMonitor();
-
-		if (locations == null || locations.length == 0)
-			return getInstallableUnits(agent, (URI) null, query, nullMonitor);
-
-		List<IQueryable<IInstallableUnit>> locationQueryables = new ArrayList<IQueryable<IInstallableUnit>>(locations.length);
-		for (int i = 0; i < locations.length; i++)
-			locationQueryables.add(new LocationQueryable(locations[i]));
-		return QueryUtil.compoundQueryable(locationQueryables).query(query, nullMonitor);
-	}
-
-	public Object start(IApplicationContext context) throws Exception {
-		return run((String[]) context.getArguments().get("application.args")); //$NON-NLS-1$
-	}
-
-	public void stop() {
-		//nothing to do
-	}
-
-	private String toString(Map<String, String> context) {
-		StringBuffer result = new StringBuffer();
-		boolean first = true;
-		for (String key : context.keySet()) {
-			if (first)
-				first = false;
-			else
-				result.append(',');
-			result.append(key);
-			result.append('=');
-			result.append(context.get(key));
-		}
-		return result.toString();
-	}
-
-	private IStatus updateRoamingProperties(IProfile profile) {
-		// if the user didn't specify a destination path on the command-line
-		// then we assume they are installing into the currently running
-		// instance and we don't have anything to update
-		if (destination == null)
-			return Status.OK_STATUS;
-
-		// if the user didn't set a profile id on the command-line this is ok if they
-		// also didn't set the destination path. (handled in the case above) otherwise throw an error.
-		if (noProfileId) // && destination != null
-			return new Status(IStatus.ERROR, Activator.ID, Messages.Missing_profileid);
-
-		// make sure that we are set to be roaming before we update the values
-		if (!Boolean.valueOf(profile.getProperty(IProfile.PROP_ROAMING)).booleanValue())
-			return Status.OK_STATUS;
-
-		ProfileChangeRequest request = new ProfileChangeRequest(profile);
-		File destinationFile = destination.toFile();
-		if (!destinationFile.equals(new File(profile.getProperty(IProfile.PROP_INSTALL_FOLDER))))
-			request.setProfileProperty(IProfile.PROP_INSTALL_FOLDER, destination.toOSString());
-		if (!destinationFile.equals(new File(profile.getProperty(IProfile.PROP_CACHE))))
-			request.setProfileProperty(IProfile.PROP_CACHE, destination.toOSString());
-		if (request.getProfileProperties().size() == 0)
-			return Status.OK_STATUS;
-
-		// otherwise we have to make a change so set the profile to be non-roaming so the 
-		// values don't get recalculated to the wrong thing if we are flushed from memory - we
-		// will set it back later (see bug 269468)
-		request.setProfileProperty(IProfile.PROP_ROAMING, "false"); //$NON-NLS-1$
-
-		ProvisioningContext context = new ProvisioningContext(agent);
-		context.setMetadataRepositories(new URI[0]);
-		context.setArtifactRepositories(new URI[0]);
-		IProvisioningPlan result = planner.getProvisioningPlan(request, context, new NullProgressMonitor());
-		return PlanExecutionHelper.executePlan(result, engine, context, new NullProgressMonitor());
-	}
-
-	/*
-	 * Set the roaming property on the given profile.
-	 */
-	private IStatus setRoaming(IProfile profile) {
-		ProfileChangeRequest request = new ProfileChangeRequest(profile);
-		request.setProfileProperty(IProfile.PROP_ROAMING, "true"); //$NON-NLS-1$
-		ProvisioningContext context = new ProvisioningContext(agent);
-		context.setMetadataRepositories(new URI[0]);
-		context.setArtifactRepositories(new URI[0]);
-		IProvisioningPlan result = planner.getProvisioningPlan(request, context, new NullProgressMonitor());
-		return PlanExecutionHelper.executePlan(result, engine, context, new NullProgressMonitor());
-	}
-
-	private static URI[] getURIs(String spec) {
-		if (spec == null)
-			return null;
-		String[] urlSpecs = getArrayFromString(spec, ","); //$NON-NLS-1$
-		ArrayList<URI> result = new ArrayList<URI>(urlSpecs.length);
-		for (int i = 0; i < urlSpecs.length; i++) {
-			try {
-				result.add(URIUtil.fromString(urlSpecs[i]));
-			} catch (URISyntaxException e) {
-				LogHelper.log(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.Ignored_repo, urlSpecs[i])));
-			}
-		}
-		if (result.size() == 0)
-			return null;
-		return result.toArray(new URI[result.size()]);
-	}
-
-	/**
-	 * Convert a list of tokens into an array. The list separator has to be
-	 * specified.
-	 */
-	public static String[] getArrayFromString(String list, String separator) {
-		if (list == null || list.trim().equals("")) //$NON-NLS-1$
-			return new String[0];
-		List<String> result = new ArrayList<String>();
-		for (StringTokenizer tokens = new StringTokenizer(list, separator); tokens.hasMoreTokens();) {
-			String token = tokens.nextToken().trim();
-			if (!token.equals("")) //$NON-NLS-1$
-				result.add(token);
-		}
-		return result.toArray(new String[result.size()]);
-	}
-
-	private void logFailure(IStatus status) {
-		FrameworkLog log = (FrameworkLog) ServiceHelper.getService(Activator.getContext(), FrameworkLog.class.getName());
-		if (log != null)
-			System.err.println("Application failed, log file location: " + log.getFile()); //$NON-NLS-1$
-		LogHelper.log(status);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
index c7e4be0..654e5d2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,13 +18,17 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.cert.Certificate;
 import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.app.IApplication;
 import org.eclipse.equinox.app.IApplicationContext;
 import org.eclipse.equinox.internal.p2.core.helpers.*;
-import org.eclipse.equinox.internal.provisional.p2.director.*;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.internal.provisional.p2.director.IDirector;
+import org.eclipse.equinox.internal.provisional.p2.director.PlanExecutionHelper;
 import org.eclipse.equinox.p2.core.*;
 import org.eclipse.equinox.p2.engine.*;
+import org.eclipse.equinox.p2.engine.query.UserVisibleRootQuery;
 import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.planner.IPlanner;
@@ -38,12 +42,6 @@ import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
 import org.osgi.service.packageadmin.PackageAdmin;
 
-/**
- * This director implementation is a complete replacement for the old director application. 
- * This implementation has simplified command line 
- * arguments, and doesn't require the user to set system property such as the
- * p2 data location. See bug 268138 for related discussion.
- */
 public class DirectorApplication implements IApplication {
 	class AvoidTrustPromptService extends UIServices {
 		@Override
@@ -112,6 +110,7 @@ public class DirectorApplication implements IApplication {
 
 	private static final CommandLineOption OPTION_HELP = new CommandLineOption(new String[] {"-help", "-h", "-?"}, null, Messages.Help_Prints_this_command_line_help); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	private static final CommandLineOption OPTION_LIST = new CommandLineOption(new String[] {"-list", "-l"}, Messages.Help_lb_lt_comma_separated_list_gt_rb, Messages.Help_List_all_IUs_found_in_repos); //$NON-NLS-1$ //$NON-NLS-2$
+	private static final CommandLineOption OPTION_LIST_INSTALLED = new CommandLineOption(new String[] {"-listInstalledRoots", "-lir"}, null, Messages.Help_List_installed_roots); //$NON-NLS-1$ //$NON-NLS-2$	
 	private static final CommandLineOption OPTION_INSTALL_IU = new CommandLineOption(new String[] {"-installIU", "-installIUs", "-i"}, Messages.Help_lt_comma_separated_list_gt, Messages.Help_Installs_the_listed_IUs); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	private static final CommandLineOption OPTION_UNINSTALL_IU = new CommandLineOption(new String[] {"-uninstallIU", "-uninstallIUs", "-u"}, Messages.Help_lt_comma_separated_list_gt, Messages.Help_Uninstalls_the_listed_IUs); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	private static final CommandLineOption OPTION_REVERT = new CommandLineOption(new String[] {"-revert"}, Messages.Help_lt_comma_separated_list_gt, Messages.Help_Revert_to_previous_state); //$NON-NLS-1$
@@ -124,6 +123,7 @@ public class DirectorApplication implements IApplication {
 	private static final CommandLineOption OPTION_FLAVOR = new CommandLineOption(new String[] {"-flavor", "-f"}, Messages.Help_lt_name_gt, Messages.Help_Defines_flavor_to_use_for_created_profile); //$NON-NLS-1$ //$NON-NLS-2$
 	private static final CommandLineOption OPTION_SHARED = new CommandLineOption(new String[] {"-shared", "-s"}, Messages.Help_lb_lt_path_gt_rb, Messages.Help_Use_a_shared_location_for_the_install); //$NON-NLS-1$ //$NON-NLS-2$
 	private static final CommandLineOption OPTION_BUNDLEPOOL = new CommandLineOption(new String[] {"-bundlepool", "-b"}, Messages.Help_lt_path_gt, Messages.Help_The_location_where_the_plugins_and_features_will_be_stored); //$NON-NLS-1$ //$NON-NLS-2$
+	private static final CommandLineOption OPTION_IU_PROFILE_PROPS = new CommandLineOption(new String[] {"-iuProfileproperties"}, Messages.Help_lt_path_gt, Messages.Help_path_to_IU_profile_properties_file); //$NON-NLS-1$
 	private static final CommandLineOption OPTION_PROFILE_PROPS = new CommandLineOption(new String[] {"-profileproperties"}, Messages.Help_lt_comma_separated_list_gt, Messages.Help_A_list_of_properties_in_the_form_key_value_pairs); //$NON-NLS-1$
 	private static final CommandLineOption OPTION_ROAMING = new CommandLineOption(new String[] {"-roaming"}, null, Messages.Help_Indicates_that_the_product_can_be_moved); //$NON-NLS-1$
 	private static final CommandLineOption OPTION_P2_OS = new CommandLineOption(new String[] {"-p2.os"}, null, Messages.Help_The_OS_when_profile_is_created); //$NON-NLS-1$
@@ -132,6 +132,10 @@ public class DirectorApplication implements IApplication {
 	private static final CommandLineOption OPTION_P2_NL = new CommandLineOption(new String[] {"-p2.nl"}, null, Messages.Help_The_NL_when_profile_is_created); //$NON-NLS-1$
 	private static final CommandLineOption OPTION_PURGEHISTORY = new CommandLineOption(new String[] {"-purgeHistory"}, null, Messages.Help_Purge_the_install_registry); //$NON-NLS-1$
 	private static final CommandLineOption OPTION_FOLLOW_REFERENCES = new CommandLineOption(new String[] {"-followReferences"}, null, Messages.Help_Follow_references); //$NON-NLS-1$
+	private static final CommandLineOption OPTION_TAG = new CommandLineOption(new String[] {"-tag"}, Messages.Help_lt_name_gt, Messages.Help_Defines_a_tag_for_provisioning_session); //$NON-NLS-1$
+	private static final CommandLineOption OPTION_LIST_TAGS = new CommandLineOption(new String[] {"-listTags"}, null, Messages.Help_List_Tags); //$NON-NLS-1$
+	private static final CommandLineOption OPTION_DOWNLOAD_ONLY = new CommandLineOption(new String[] {"-downloadOnly"}, null, Messages.Help_Download_Only); //$NON-NLS-1$
+	private static final CommandLineOption OPTION_IGNORED = new CommandLineOption(new String[] {"-showLocation", "-eclipse.password", "-eclipse.keyring"}, null, ""); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$
 
 	private static final Integer EXIT_ERROR = new Integer(13);
 	static private final String FLAVOR_DEFAULT = "tooling"; //$NON-NLS-1$
@@ -139,6 +143,9 @@ public class DirectorApplication implements IApplication {
 	static private final String NO_ARTIFACT_REPOSITORIES_AVAILABLE = "noArtifactRepositoriesAvailable"; //$NON-NLS-1$
 
 	private static final String FOLLOW_ARTIFACT_REPOSITORY_REFERENCES = "org.eclipse.equinox.p2.director.followArtifactRepositoryReferences"; //$NON-NLS-1$
+	private static final String LIST_GROUPS_SHORTCUT = "Q:GROUP"; //$NON-NLS-1$ 
+	private static final String QUERY_SEPARATOR = "Q:"; //$NON-NLS-1$
+	private static final String QUERY_SEPARATOR_SMALL = "q:"; //$NON-NLS-1$
 
 	public static final String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$
 
@@ -180,10 +187,23 @@ public class DirectorApplication implements IApplication {
 		return null;
 	}
 
-	private static void parseIUsArgument(List<IVersionedId> vnames, String arg) {
+	private static void parseIUsArgument(List<IQuery<IInstallableUnit>> vnames, String arg) {
 		String[] roots = StringHelper.getArrayFromString(arg, ',');
-		for (int i = 0; i < roots.length; ++i)
-			vnames.add(VersionedId.parse(roots[i]));
+		for (int i = 0; i < roots.length; ++i) {
+			if (roots[i].equalsIgnoreCase(LIST_GROUPS_SHORTCUT)) {
+				vnames.add(new PrettyQuery<IInstallableUnit>(QueryUtil.createIUGroupQuery(), "All groups")); //$NON-NLS-1$
+				continue;
+			}
+			if (roots[i].startsWith(QUERY_SEPARATOR) || roots[i].startsWith(QUERY_SEPARATOR_SMALL)) {
+				String queryString = roots[i].substring(2);
+				vnames.add(new PrettyQuery<IInstallableUnit>(QueryUtil.createQuery(queryString, new Object[0]), queryString));
+				continue;
+			}
+			IVersionedId vId = VersionedId.parse(roots[i]);
+			Version v = vId.getVersion();
+			IQuery<IInstallableUnit> query = new PrettyQuery<IInstallableUnit>(QueryUtil.createIUQuery(vId.getId(), Version.emptyVersion.equals(v) ? VersionRange.emptyRange : new VersionRange(v, true, v, true)), roots[i]);
+			vnames.add(query);
+		}
 	}
 
 	private static File processFileArgument(String arg) {
@@ -202,9 +222,9 @@ public class DirectorApplication implements IApplication {
 
 	private final List<URI> artifactRepositoryLocations = new ArrayList<URI>();
 	private final List<URI> metadataRepositoryLocations = new ArrayList<URI>();
-	private final List<IVersionedId> rootsToInstall = new ArrayList<IVersionedId>();
-	private final List<IVersionedId> rootsToUninstall = new ArrayList<IVersionedId>();
-	private final List<IVersionedId> rootsToList = new ArrayList<IVersionedId>();
+	private final List<IQuery<IInstallableUnit>> rootsToInstall = new ArrayList<IQuery<IInstallableUnit>>();
+	private final List<IQuery<IInstallableUnit>> rootsToUninstall = new ArrayList<IQuery<IInstallableUnit>>();
+	private final List<IQuery<IInstallableUnit>> rootsToList = new ArrayList<IQuery<IInstallableUnit>>();
 
 	private File bundlePool = null;
 	private File destination;
@@ -212,23 +232,31 @@ public class DirectorApplication implements IApplication {
 	private String flavor;
 	private boolean printHelpInfo = false;
 	private boolean printIUList = false;
-	private long revertToPreviousState = -1;
+	private boolean printRootIUList = false;
+	private boolean printTags = false;
+
+	private String revertToPreviousState = NOTHING_TO_REVERT_TO;
+	private static String NOTHING_TO_REVERT_TO = "-1"; //$NON-NLS-1$
+	private static String REVERT_TO_PREVIOUS = "0"; //$NON-NLS-1$
 	private boolean verifyOnly = false;
 	private boolean roamingProfile = false;
 	private boolean purgeRegistry = false;
 	private boolean stackTrace = false;
 	private boolean followReferences = false;
+	private boolean downloadOnly = false;
 	private String profileId;
 	private String profileProperties; // a comma-separated list of property pairs "tag=value"
+	private String iuProfileProperties; // path to Properties file with IU profile properties
 	private String ws;
 	private String os;
 	private String arch;
 	private String nl;
+	private String tag;
 
 	private IEngine engine;
 	private boolean noProfileId = false;
 	private PackageAdmin packageAdmin;
-	private ServiceReference packageAdminRef;
+	private ServiceReference<PackageAdmin> packageAdminRef;
 	private IPlanner planner;
 	private ILog log = null;
 
@@ -241,9 +269,116 @@ public class DirectorApplication implements IApplication {
 		markRoots(request, uninstalls);
 		request.addAll(installs);
 		request.removeAll(uninstalls);
+		buildIUProfileProperties(request);
 		return request;
 	}
 
+	// read the given file into a Properties object
+	private Properties loadProperties(File file) {
+		if (!file.exists()) {
+			// log a warning and return
+			logStatus(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.File_does_not_exist, file.getAbsolutePath())));
+			return null;
+		}
+		Properties properties = new Properties();
+		InputStream input = null;
+		try {
+			input = new BufferedInputStream(new FileInputStream(file));
+			properties.load(input);
+		} catch (IOException e) {
+			logFailure(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.Problem_loading_file, file.getAbsolutePath()), e));
+			return null;
+		} finally {
+			if (input != null)
+				try {
+					input.close();
+				} catch (IOException e) {
+					// ignore
+				}
+		}
+		return properties;
+	}
+
+	private void buildIUProfileProperties(IProfileChangeRequest request) {
+		final String KEYWORD_KEY = "key"; //$NON-NLS-1$
+		final String KEYWORD_VALUE = "value"; //$NON-NLS-1$
+		final String KEYWORD_VERSION = "version"; //$NON-NLS-1$
+
+		if (iuProfileProperties == null)
+			return;
+
+		// read the file into a Properties object for easier processing
+		Properties properties = loadProperties(new File(iuProfileProperties));
+		if (properties == null)
+			return;
+
+		// format for a line in the properties input file is <id>.<keyword>.<uniqueNumber>=value
+		// id is the IU id
+		// keyword is either "key" or "value"
+		// uniqueNumber is used to group keys and values together
+		Set<String> alreadyProcessed = new HashSet<String>();
+		for (Iterator<Object> iter = properties.keySet().iterator(); iter.hasNext();) {
+			String line = (String) iter.next();
+			int index = line.lastIndexOf('.');
+			if (index == -1)
+				continue;
+			int num = -1;
+			String id = null;
+			try {
+				num = Integer.parseInt(line.substring(index + 1));
+				line = line.substring(0, index);
+				index = line.lastIndexOf('.');
+				if (index == -1)
+					continue;
+				// skip over the keyword
+				id = line.substring(0, index);
+			} catch (NumberFormatException e) {
+				logStatus(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.Bad_format, line, iuProfileProperties), e));
+				continue;
+			} catch (IndexOutOfBoundsException e) {
+				logStatus(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.Bad_format, line, iuProfileProperties), e));
+				continue;
+			}
+
+			String versionLine = id + '.' + KEYWORD_VERSION + '.' + num;
+			String keyLine = id + '.' + KEYWORD_KEY + '.' + num;
+			String valueLine = id + '.' + KEYWORD_VALUE + '.' + num;
+
+			if (alreadyProcessed.contains(versionLine) || alreadyProcessed.contains(keyLine) || alreadyProcessed.contains(valueLine))
+				continue;
+
+			// skip over this key/value pair next time we see it
+			alreadyProcessed.add(versionLine);
+			alreadyProcessed.add(keyLine);
+			alreadyProcessed.add(valueLine);
+
+			Version version = Version.create((String) properties.get(versionLine)); // it is ok to have a null version
+			String key = (String) properties.get(keyLine);
+			String value = (String) properties.get(valueLine);
+
+			if (key == null || value == null) {
+				String message = NLS.bind(Messages.Unmatched_iu_profile_property_key_value, key + '/' + value);
+				logStatus(new Status(IStatus.WARNING, Activator.ID, message));
+				continue;
+			}
+
+			// lookup the IU - a null version matches all versions
+			IQuery<IInstallableUnit> query = QueryUtil.createIUQuery(id, version);
+			// if we don't have a version the choose the latest. 
+			if (version == null)
+				query = QueryUtil.createLatestQuery(query);
+			IQueryResult<IInstallableUnit> qr = getInstallableUnits(null, query, null);
+			if (qr.isEmpty()) {
+				String msg = NLS.bind(Messages.Cannot_set_iu_profile_property_iu_does_not_exist, id + '/' + version);
+				logStatus(new Status(IStatus.WARNING, Activator.ID, msg));
+				continue;
+			}
+			IInstallableUnit iu = qr.iterator().next();
+			request.setInstallableUnitProfileProperty(iu, key, value);
+		}
+
+	}
+
 	private void cleanupRepositories() {
 		if (artifactReposForRemoval != null && artifactManager != null) {
 			for (int i = 0; i < artifactReposForRemoval.length && artifactReposForRemoval[i] != null; i++) {
@@ -270,23 +405,19 @@ public class DirectorApplication implements IApplication {
 		return QueryUtil.compoundQueryable(locationQueryables).query(query, nullMonitor);
 	}
 
-	private Collection<IInstallableUnit> collectRoots(IProfile profile, List<IVersionedId> rootNames, boolean forInstall) throws CoreException {
+	private Collection<IInstallableUnit> collectRoots(IProfile profile, List<IQuery<IInstallableUnit>> rootNames, boolean forInstall) throws CoreException {
 		ArrayList<IInstallableUnit> allRoots = new ArrayList<IInstallableUnit>();
-		int top = rootNames.size();
-		for (int i = 0; i < top; ++i) {
-			IVersionedId rootName = rootNames.get(i);
-			Version v = rootName.getVersion();
-			IQuery<IInstallableUnit> query = QueryUtil.createIUQuery(rootName.getId(), Version.emptyVersion.equals(v) ? VersionRange.emptyRange : new VersionRange(v, true, v, true));
+		for (IQuery<IInstallableUnit> rootQuery : rootNames) {
 			IQueryResult<IInstallableUnit> roots = null;
 			if (forInstall)
-				roots = collectRootIUs(QueryUtil.createLatestQuery(query));
+				roots = collectRootIUs(QueryUtil.createLatestQuery(rootQuery));
 
 			if (roots == null || roots.isEmpty())
-				roots = profile.query(query, new NullProgressMonitor());
+				roots = profile.query(rootQuery, new NullProgressMonitor());
 
 			Iterator<IInstallableUnit> itor = roots.iterator();
 			if (!itor.hasNext())
-				throw new CoreException(new Status(IStatus.ERROR, org.eclipse.equinox.internal.p2.director.app.Activator.ID, NLS.bind(Messages.Missing_IU, rootName)));
+				throw new CoreException(new Status(IStatus.ERROR, org.eclipse.equinox.internal.p2.director.app.Activator.ID, NLS.bind(Messages.Missing_IU, rootQuery)));
 			do {
 				allRoots.add(itor.next());
 			} while (itor.hasNext());
@@ -360,7 +491,7 @@ public class DirectorApplication implements IApplication {
 	}
 
 	private void initializeRepositories() throws CoreException {
-		if (rootsToInstall.isEmpty() && revertToPreviousState == -1 && !printIUList)
+		if (rootsToInstall.isEmpty() && revertToPreviousState == NOTHING_TO_REVERT_TO && !printIUList)
 			// Not much point initializing repositories if we have nothing to install
 			return;
 		if (artifactRepositoryLocations == null)
@@ -420,10 +551,10 @@ public class DirectorApplication implements IApplication {
 
 	private void initializeServices() throws CoreException {
 		BundleContext context = Activator.getContext();
-		packageAdminRef = context.getServiceReference(PackageAdmin.class.getName());
-		packageAdmin = (PackageAdmin) context.getService(packageAdminRef);
-		ServiceReference agentProviderRef = context.getServiceReference(IProvisioningAgentProvider.SERVICE_NAME);
-		IProvisioningAgentProvider provider = (IProvisioningAgentProvider) context.getService(agentProviderRef);
+		packageAdminRef = context.getServiceReference(PackageAdmin.class);
+		packageAdmin = context.getService(packageAdminRef);
+		ServiceReference<IProvisioningAgentProvider> agentProviderRef = context.getServiceReference(IProvisioningAgentProvider.class);
+		IProvisioningAgentProvider provider = context.getService(agentProviderRef);
 		URI p2DataArea;
 		if (destination != null || sharedLocation != null) {
 			File dataAreaFile = sharedLocation == null ? new File(destination, "p2") : sharedLocation;//$NON-NLS-1$
@@ -522,10 +653,8 @@ public class DirectorApplication implements IApplication {
 			while (roots.hasNext())
 				allRoots.add(roots.next());
 		} else {
-			for (IVersionedId rootName : rootsToList) {
-				Version v = rootName.getVersion();
-				IQuery<IInstallableUnit> query = QueryUtil.createIUQuery(rootName.getId(), Version.emptyVersion.equals(v) ? VersionRange.emptyRange : new VersionRange(v, true, v, true));
-				Iterator<IInstallableUnit> roots = collectRootIUs(query).iterator();
+			for (IQuery<IInstallableUnit> root : rootsToList) {
+				Iterator<IInstallableUnit> roots = collectRootIUs(root).iterator();
 				while (roots.hasNext())
 					allRoots.add(roots.next());
 			}
@@ -572,12 +701,21 @@ public class DirectorApplication implements IApplication {
 	private void executePlan(ProvisioningContext context, IProvisioningPlan result) throws CoreException {
 		IStatus operationStatus;
 		if (!verifyOnly) {
-			operationStatus = PlanExecutionHelper.executePlan(result, engine, context, new NullProgressMonitor());
+			if (!downloadOnly)
+				operationStatus = PlanExecutionHelper.executePlan(result, engine, context, new NullProgressMonitor());
+			else
+				operationStatus = PlanExecutionHelper.executePlan(result, engine, PhaseSetFactory.createPhaseSetIncluding(new String[] {PhaseSetFactory.PHASE_COLLECT, PhaseSetFactory.PHASE_CHECK_TRUST}), context, new NullProgressMonitor());
 			if (!operationStatus.isOK()) {
 				if (noArtifactRepositorySpecified && hasNoRepositoryFound(operationStatus))
 					throw new ProvisionException(Messages.Application_NoRepositories);
 				throw new CoreException(operationStatus);
 			}
+			if (tag != null) {
+				long newState = result.getProfile().getTimestamp();
+				IProfileRegistry registry = (IProfileRegistry) targetAgent.getService(IProfileRegistry.SERVICE_NAME);
+				registry.setProfileStateProperty(result.getProfile().getProfileId(), newState, IProfile.STATE_PROP_TAG, tag);
+			}
+
 		}
 	}
 
@@ -630,6 +768,21 @@ public class DirectorApplication implements IApplication {
 				continue;
 			}
 
+			if (OPTION_LIST_INSTALLED.isOption(opt)) {
+				printRootIUList = true;
+				continue;
+			}
+
+			if (OPTION_LIST_TAGS.isOption(opt)) {
+				printTags = true;
+				continue;
+			}
+
+			if (OPTION_DOWNLOAD_ONLY.isOption(opt)) {
+				downloadOnly = true;
+				continue;
+			}
+
 			if (OPTION_HELP.isOption(opt)) {
 				printHelpInfo = true;
 				continue;
@@ -648,10 +801,10 @@ public class DirectorApplication implements IApplication {
 			if (OPTION_REVERT.isOption(opt)) {
 				String targettedState = getOptionalArgument(args, i);
 				if (targettedState == null) {
-					revertToPreviousState = 0;
+					revertToPreviousState = REVERT_TO_PREVIOUS;
 				} else {
 					i++;
-					revertToPreviousState = Long.valueOf(targettedState).longValue();
+					revertToPreviousState = targettedState;
 				}
 				continue;
 
@@ -712,6 +865,11 @@ public class DirectorApplication implements IApplication {
 				continue;
 			}
 
+			if (OPTION_IU_PROFILE_PROPS.isOption(opt)) {
+				iuProfileProperties = getRequiredArgument(args, ++i);
+				continue;
+			}
+
 			if (OPTION_ROAMING.isOption(opt)) {
 				roamingProfile = true;
 				continue;
@@ -751,10 +909,23 @@ public class DirectorApplication implements IApplication {
 				arch = getRequiredArgument(args, ++i);
 				continue;
 			}
+
+			if (OPTION_TAG.isOption(opt)) {
+				tag = getRequiredArgument(args, ++i);
+				continue;
+			}
+
+			if (OPTION_IGNORED.isOption(opt)) {
+				String optionalArgument = getOptionalArgument(args, i);
+				if (optionalArgument != null) {
+					i++;
+				}
+				continue;
+			}
 			throw new ProvisionException(NLS.bind(Messages.unknown_option_0, opt));
 		}
 
-		if (!printHelpInfo && !printIUList && !purgeRegistry && rootsToInstall.isEmpty() && rootsToUninstall.isEmpty() && revertToPreviousState == -1) {
+		if (!printHelpInfo && !printIUList && !printRootIUList && !printTags && !purgeRegistry && rootsToInstall.isEmpty() && rootsToUninstall.isEmpty() && revertToPreviousState == NOTHING_TO_REVERT_TO) {
 			printMessage(Messages.Help_Missing_argument);
 			printHelpInfo = true;
 		}
@@ -801,12 +972,16 @@ public class DirectorApplication implements IApplication {
 			else {
 				initializeServices();
 				initializeRepositories();
-				if (revertToPreviousState >= 0) {
+				if (revertToPreviousState != NOTHING_TO_REVERT_TO) {
 					revertToPreviousState();
 				} else if (!(rootsToInstall.isEmpty() && rootsToUninstall.isEmpty()))
 					performProvisioningActions();
 				if (printIUList)
 					performList();
+				if (printRootIUList)
+					performListInstalledRoots();
+				if (printTags)
+					performPrintTags();
 				if (purgeRegistry)
 					purgeRegistry();
 				printMessage(NLS.bind(Messages.Operation_complete, new Long(System.currentTimeMillis() - time)));
@@ -841,14 +1016,15 @@ public class DirectorApplication implements IApplication {
 		IProfile profile = initializeProfile();
 		IProfileRegistry profileRegistry = (IProfileRegistry) targetAgent.getService(IProfileRegistry.SERVICE_NAME);
 		IProfile targetProfile = null;
-		if (revertToPreviousState == 0) {
+		if (revertToPreviousState == REVERT_TO_PREVIOUS) {
 			long[] profiles = profileRegistry.listProfileTimestamps(profile.getProfileId());
 			if (profiles.length == 0)
 				return;
 			targetProfile = profileRegistry.getProfile(profile.getProfileId(), profiles[profiles.length - 1]);
 		} else {
-			targetProfile = profileRegistry.getProfile(profile.getProfileId(), revertToPreviousState);
+			targetProfile = profileRegistry.getProfile(profile.getProfileId(), getTimestampToRevertTo(profileRegistry, profile.getProfileId()));
 		}
+
 		if (targetProfile == null)
 			throw new CoreException(new Status(IStatus.ERROR, Activator.ID, Messages.Missing_profile));
 		IProvisioningPlan plan = planner.getDiffPlan(profile, targetProfile, new NullProgressMonitor());
@@ -861,6 +1037,29 @@ public class DirectorApplication implements IApplication {
 		executePlan(context, plan);
 	}
 
+	private long getTimestampToRevertTo(IProfileRegistry profileRegistry, String profId) {
+		long timestampToRevertTo = -1;
+		try {
+			//Deal with the case where the revert points to a timestamp
+			timestampToRevertTo = Long.valueOf(revertToPreviousState).longValue();
+		} catch (NumberFormatException e) {
+			//Deal with the case where the revert points to tag
+			Map<String, String> tags = profileRegistry.getProfileStateProperties(profId, IProfile.STATE_PROP_TAG);
+			Set<Entry<String, String>> entries = tags.entrySet();
+			for (Entry<String, String> entry : entries) {
+				if (entry.getValue().equals(revertToPreviousState))
+					try {
+						long tmp = Long.valueOf(entry.getKey()).longValue();
+						if (tmp > timestampToRevertTo)
+							timestampToRevertTo = tmp;
+					} catch (NumberFormatException e2) {
+						//Not expected since the value is supposed to be a timestamp as per API
+					}
+			}
+		}
+		return timestampToRevertTo;
+	}
+
 	/**
 	 * Sets a system property, using the EnvironmentInfo service if possible.
 	 */
@@ -938,7 +1137,7 @@ public class DirectorApplication implements IApplication {
 	}
 
 	private void performHelpInfo() {
-		CommandLineOption[] allOptions = new CommandLineOption[] {OPTION_HELP, OPTION_LIST, OPTION_INSTALL_IU, OPTION_UNINSTALL_IU, OPTION_REVERT, OPTION_DESTINATION, OPTION_METADATAREPOS, OPTION_ARTIFACTREPOS, OPTION_REPOSITORIES, OPTION_VERIFY_ONLY, OPTION_PROFILE, OPTION_FLAVOR, OPTION_SHARED, OPTION_BUNDLEPOOL, OPTION_PROFILE_PROPS, OPTION_ROAMING, OPTION_P2_OS, OPTION_P2_WS, OPTION_P2_ARCH, OPTION_P2_NL, OPTION_PURGEHISTORY, OPTION_FOLLOW_REFERENCES};
+		CommandLineOption[] allOptions = new CommandLineOption[] {OPTION_HELP, OPTION_LIST, OPTION_LIST_INSTALLED, OPTION_INSTALL_IU, OPTION_UNINSTALL_IU, OPTION_REVERT, OPTION_DESTINATION, OPTION_METADATAREPOS, OPTION_ARTIFACTREPOS, OPTION_REPOSITORIES, OPTION_VERIFY_ONLY, OPTION_PROFILE, OPTION_FLAVOR, OPTION_SHARED, OPTION_BUNDLEPOOL, OPTION_PROFILE_PROPS, OPTION_IU_PROFILE_PROPS, OPTION_ROAMING, OPTION_P2_OS, OPTION_P2_WS, OPTION_P2_ARCH, OPTION_P2_NL, OPTION_PURGEHISTORY, OPTION_FOLLOW_REFERENCES};
 		for (int i = 0; i < allOptions.length; ++i) {
 			allOptions[i].appendHelp(System.out);
 		}
@@ -992,8 +1191,14 @@ public class DirectorApplication implements IApplication {
 		ProfileChangeRequest request = new ProfileChangeRequest(profile);
 		if (!destination.equals(new File(profile.getProperty(IProfile.PROP_INSTALL_FOLDER))))
 			request.setProfileProperty(IProfile.PROP_INSTALL_FOLDER, destination.getAbsolutePath());
-		if (!destination.equals(new File(profile.getProperty(IProfile.PROP_CACHE))))
-			request.setProfileProperty(IProfile.PROP_CACHE, destination.getAbsolutePath());
+
+		File cacheLocation = null;
+		if (bundlePool == null)
+			cacheLocation = sharedLocation == null ? destination.getAbsoluteFile() : sharedLocation.getAbsoluteFile();
+		else
+			cacheLocation = bundlePool.getAbsoluteFile();
+		if (!cacheLocation.equals(new File(profile.getProperty(IProfile.PROP_CACHE))))
+			request.setProfileProperty(IProfile.PROP_CACHE, cacheLocation.getAbsolutePath());
 		if (request.getProfileProperties().size() == 0)
 			return;
 
@@ -1019,4 +1224,24 @@ public class DirectorApplication implements IApplication {
 	public void setLog(ILog log) {
 		this.log = log;
 	}
+
+	private void performListInstalledRoots() throws CoreException {
+		IProfile profile = initializeProfile();
+		IQueryResult<IInstallableUnit> roots = profile.query(new UserVisibleRootQuery(), null);
+		Set<IInstallableUnit> sorted = new TreeSet<IInstallableUnit>(roots.toUnmodifiableSet());
+		for (IInstallableUnit iu : sorted)
+			System.out.println(iu.getId() + '/' + iu.getVersion());
+	}
+
+	private void performPrintTags() throws CoreException {
+		IProfile profile = initializeProfile();
+		IProfileRegistry registry = (IProfileRegistry) targetAgent.getService(IProfileRegistry.SERVICE_NAME);
+		Map<String, String> tags = registry.getProfileStateProperties(profile.getProfileId(), IProfile.STATE_PROP_TAG);
+		//Sort the tags from the most recent to the oldest
+		List<String> timeStamps = new ArrayList<String>(tags.keySet());
+		Collections.sort(timeStamps, Collections.reverseOrder());
+		for (String timestamp : timeStamps) {
+			System.out.println(tags.get(timestamp));
+		}
+	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/ILog.java b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/ILog.java
index 7d12bf3..f707d3a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/ILog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/ILog.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.internal.p2.director.app;
 
 import org.eclipse.core.runtime.IStatus;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java
index 8f3163b..5427148 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2011 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -22,9 +22,13 @@ public class Messages extends NLS {
 	public static String Application_NoManager;
 
 	public static String Application_NoRepositories;
+	public static String Bad_format;
 	public static String Cant_change_roaming;
 	public static String destination_commandline;
 
+	public static String Cannot_set_iu_profile_property_iu_does_not_exist;
+	public static String File_does_not_exist;
+
 	public static String Help_A_list_of_properties_in_the_form_key_value_pairs;
 	public static String Help_A_list_of_URLs_denoting_artifact_repositories;
 	public static String Help_A_list_of_URLs_denoting_colocated_repositories;
@@ -35,12 +39,14 @@ public class Messages extends NLS {
 	public static String Help_Installs_the_listed_IUs;
 	public static String Help_lb_lt_path_gt_rb;
 	public static String Help_List_all_IUs_found_in_repos;
+	public static String Help_List_installed_roots;
 	public static String Help_lt_comma_separated_list_gt;
 	public static String Help_lb_lt_comma_separated_list_gt_rb;
 	public static String Help_lt_name_gt;
 	public static String Help_lt_path_gt;
 	public static String Help_Missing_argument;
 	public static String Help_Only_verify_dont_install;
+	public static String Help_path_to_IU_profile_properties_file;
 	public static String Help_Prints_this_command_line_help;
 	public static String Help_The_ARCH_when_profile_is_created;
 	public static String Help_The_folder_in_which_the_targetd_product_is_located;
@@ -53,6 +59,9 @@ public class Messages extends NLS {
 	public static String Help_Use_a_shared_location_for_the_install;
 	public static String Help_Purge_the_install_registry;
 	public static String Help_Follow_references;
+	public static String Help_Defines_a_tag_for_provisioning_session;
+	public static String Help_List_Tags;
+	public static String Help_Download_Only;
 
 	public static String Ignored_repo;
 	public static String Installing;
@@ -72,8 +81,10 @@ public class Messages extends NLS {
 	public static String unknown_option_0;
 
 	public static String problem_CallingDirector;
+	public static String Problem_loading_file;
 	public static String problem_repoMustBeURI;
 	public static String unableToWriteLogFile;
+	public static String Unmatched_iu_profile_property_key_value;
 
 	static {
 		// initialize resource bundle
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/PrettyQuery.java b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/PrettyQuery.java
new file mode 100644
index 0000000..3dd931a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/PrettyQuery.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Sonatype, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.director.app;
+
+import java.util.Iterator;
+import org.eclipse.equinox.p2.metadata.expression.IExpression;
+import org.eclipse.equinox.p2.query.IQuery;
+import org.eclipse.equinox.p2.query.IQueryResult;
+
+/*
+ * This class is used to keep pretty print a normal query using the information passed in.
+ */
+public class PrettyQuery<T> implements IQuery<T> {
+	private IQuery<T> decorated;
+	private String userString;
+
+	public PrettyQuery(IQuery<T> toDecorate, String userReadable) {
+		decorated = toDecorate;
+		userString = userReadable;
+	}
+
+	public IQueryResult<T> perform(Iterator<T> iterator) {
+		return decorated.perform(iterator);
+	}
+
+	public IExpression getExpression() {
+		return decorated.getExpression();
+	}
+
+	public String toString() {
+		if (userString != null)
+			return userString;
+		return decorated.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties
index ab49951..19e6f49 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2010 IBM Corporation and others.
+# Copyright (c) 2005, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ Help_Use_a_shared_location_for_the_install=Use a shared location for the install
 Ignored_repo=The repository {1} will not be considered.
 Help_lb_lt_path_gt_rb=[ <path> ]
 Help_List_all_IUs_found_in_repos=Lists all IU's found in the given repositories. IUs can optionally be listed.  Each entry in the list is in the form <id> [ '/' <version> ].
+Help_List_installed_roots=Lists all root IU's found in the given profile. Each entry in the list is in the form <id> [ '/' <version> ].
 Help_Revert_to_previous_state=Revert the installation to a previous state [ the number representing the previous state of the profile  as found in p2/org.eclipse.equinox.p2.engine/<profileId>/ ].
 Help_lt_comma_separated_list_gt=<comma separated list>
 Help_lb_lt_comma_separated_list_gt_rb=[ <comma separated list> ]
@@ -55,6 +56,9 @@ Help_The_OS_when_profile_is_created=The OS to use when the profile is created.
 Help_The_WS_when_profile_is_created=The windowing system to use when the profile is created.
 Help_Purge_the_install_registry=Remove the history of the profile registry.
 Help_Follow_references=Follow repository references.
+Help_Defines_a_tag_for_provisioning_session=Tag the provisioning operation for easy referencing when reverting.
+Help_List_Tags=List the tags available
+Help_Download_Only=Only download the artifacts
 unable_to_parse_0_to_uri_1=Unable to parse {0} into an URI: {1}.
 unknown_option_0=Unknown option {0}. Use -help for a list of known options.
 Help_Missing_argument=The argument specifying what to install or uninstall is missing.
@@ -63,3 +67,9 @@ problem_CallingDirector=A problem occured while invoking the director.
 problem_repoMustBeURI = The repository location ({0}) must be a URI.
 unableToWriteLogFile=Unable to write to the log file {0}.
 could_not_remove_initialProfile=Could not remove the initial profile created {0}.
+Help_path_to_IU_profile_properties_file=Path to a properties file containing a list of IU profile properties to set.
+Problem_loading_file=Problem loading file: {0}.
+File_does_not_exist=File does not exist: {0}.
+Cannot_set_iu_profile_property_iu_does_not_exist=Unable to set IU profile properties because the following IU does not exist: {0}.
+Unmatched_iu_profile_property_key_value=Unmatched IU profile property key/value pair: {0}.
+Bad_format=Bad format ({0}) in IU profile properties file: {1}.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF
index e5fb562..4fd5a37 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/META-INF/MANIFEST.MF
@@ -2,31 +2,29 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.director;singleton:=true
-Bundle-Version: 2.0.3.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.equinox.internal.p2.director.DirectorActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.equinox.internal.p2.director;x-friends:="org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.p2.operations,org.eclipse.pde.core",
+Export-Package: org.eclipse.equinox.internal.p2.director;
+  x-friends:="org.eclipse.equinox.p2.operations,
+   org.eclipse.equinox.p2.repository.tools,
+   org.eclipse.pde.core,
+   org.eclipse.equinox.p2.reconciler.dropins,
+   org.eclipse.equinox.p2.ui,
+   org.eclipse.equinox.p2.director.app",
  org.eclipse.equinox.internal.p2.rollback;x-internal:=true,
  org.eclipse.equinox.internal.provisional.p2.director;
   x-friends:="org.eclipse.equinox.p2.console,
    org.eclipse.equinox.p2.director.app,
-   org.eclipse.equinox.p2.installer,
    org.eclipse.equinox.p2.operations,
-   org.eclipse.equinox.p2.reconciler.dropins,
-   org.eclipse.equinox.p2.touchpoint.eclipse,
-   org.eclipse.equinox.p2.ui,
    org.eclipse.equinox.p2.ui.admin,
-   org.eclipse.equinox.p2.ui.sdk,
-   org.eclipse.equinox.p2.ui.sdk.scheduler,
-   org.eclipse.equinox.p2.updatechecker,
-   org.eclipse.pde.core,
-   org.eclipse.pde.ui",
+   org.eclipse.equinox.p2.installer",
  org.eclipse.equinox.p2.planner;version="2.0.0"
 Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.3.0,4.0.0)",
- org.sat4j.core;bundle-version="[2.2.0,2.3.0)",
- org.sat4j.pb;bundle-version="[2.2.0,2.3.0)",
+ org.sat4j.core;bundle-version="[2.2.0,2.4.0)",
+ org.sat4j.pb;bundle-version="[2.2.0,2.4.0)",
  org.eclipse.core.jobs;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.equinox.p2.metadata;bundle-version="[2.0.0,3.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5,
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.director/build.properties
index 9ac550c..3d8e54e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml
index 7977545..f9a289b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.director</artifactId>
-  <version>2.0.2.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/ApplicablePatchQuery.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/ApplicablePatchQuery.java
index bebb503..35aa27c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/ApplicablePatchQuery.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/ApplicablePatchQuery.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/AttachmentHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/AttachmentHelper.java
index fc60f0d..71e6612 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/AttachmentHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/AttachmentHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009 IBM Corporation and others.
+ *  Copyright (c) 2009, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Explanation.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Explanation.java
index 719546c..21116df 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Explanation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Explanation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Daniel Le Berre and others. All rights reserved. This
+ * Copyright (c) 2009, 2010 Daniel Le Berre and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Messages.java
index 7e04e06..2f2ba81 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/OperationGenerator.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/OperationGenerator.java
index bcdc4c0..eb5e64d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/OperationGenerator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/OperationGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PermissiveSlicer.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PermissiveSlicer.java
index 4d42093..44e7973 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PermissiveSlicer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PermissiveSlicer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2009, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java
index 515e795..e42eb0f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/ProfileChangeRequest.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/ProfileChangeRequest.java
new file mode 100644
index 0000000..4621b5d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/ProfileChangeRequest.java
@@ -0,0 +1,279 @@
+/*******************************************************************************
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *      IBM Corporation - initial API and implementation
+ *     Sonatype, Inc. - ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.director;
+
+import java.util.*;
+import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.engine.IProfileRegistry;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.IRequirement;
+import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
+
+/**
+ * @noreference This class was unintentionally left in the provisional API package and
+ * 	is intended to be made internal in Eclipse 3.7. Clients should create and manipulate 
+ * 	profile change requests via the API {@link IPlanner#createChangeRequest(IProfile)}
+ * 	and methods on {@link IProfileChangeRequest}.
+ */
+public class ProfileChangeRequest implements Cloneable, IProfileChangeRequest {
+
+	private final IProfile profile;
+	private ArrayList<IInstallableUnit> iusToRemove = null; // list of ius to remove
+	private ArrayList<IInstallableUnit> iusToAdd = null; // list of ius to add
+	private ArrayList<String> propertiesToRemove = null; // list of keys for properties to be removed
+	private HashMap<String, String> propertiesToAdd = null; // map of key->value for properties to be added
+	private HashMap<IInstallableUnit, Map<String, String>> iuPropertiesToAdd = null; // map iu->map of key->value pairs for properties to be added for an iu
+	private HashMap<IInstallableUnit, List<String>> iuPropertiesToRemove = null; // map of iu->list of property keys to be removed for an iu
+	private ArrayList<IRequirement> additionalRequirements;
+
+	public static ProfileChangeRequest createByProfileId(IProvisioningAgent agent, String profileId) {
+		IProfileRegistry profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
+		if (profileRegistry == null)
+			throw new IllegalStateException(Messages.Planner_no_profile_registry);
+		IProfile profile = profileRegistry.getProfile(profileId);
+		if (profile == null)
+			throw new IllegalArgumentException("Profile id " + profileId + " is not registered."); //$NON-NLS-1$//$NON-NLS-2$
+		return new ProfileChangeRequest(profile);
+	}
+
+	public ProfileChangeRequest(IProfile profile) {
+		this.profile = profile;
+	}
+
+	public void setProfile(IProfile profile) {
+		if (profile == null)
+			throw new IllegalArgumentException("Profile cannot be null."); //$NON-NLS-1$
+	}
+
+	public IProfile getProfile() {
+		return profile;
+	}
+
+	public Map<String, String> getProfileProperties() {
+		Map<String, String> result = new HashMap<String, String>(profile.getProperties());
+		if (propertiesToRemove != null) {
+			for (String key : propertiesToRemove) {
+				result.remove(key);
+			}
+		}
+		if (propertiesToAdd != null)
+			result.putAll(propertiesToAdd);
+
+		return result;
+	}
+
+	//done
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#addInstallableUnit(org.eclipse.equinox.p2.metadata.IInstallableUnit)
+	 */
+	public void add(IInstallableUnit toInstall) {
+		if (iusToAdd == null)
+			iusToAdd = new ArrayList<IInstallableUnit>();
+		iusToAdd.add(toInstall);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#addInstallableUnits(java.util.Collection)
+	 */
+	public void addAll(Collection<IInstallableUnit> toInstall) {
+		for (IInstallableUnit iu : toInstall)
+			add(iu);
+	}
+
+	public void addInstallableUnits(IInstallableUnit... toInstall) {
+		for (int i = 0; i < toInstall.length; i++)
+			add(toInstall[i]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnit(org.eclipse.equinox.p2.metadata.IInstallableUnit)
+	 */
+	public void remove(IInstallableUnit toUninstall) {
+		if (iusToRemove == null)
+			iusToRemove = new ArrayList<IInstallableUnit>();
+		iusToRemove.add(toUninstall);
+	}
+
+	public void removeInstallableUnits(IInstallableUnit[] toUninstall) {
+		for (int i = 0; i < toUninstall.length; i++)
+			remove(toUninstall[i]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnits(java.util.Collection)
+	 */
+	public void removeAll(Collection<IInstallableUnit> toUninstall) {
+		for (IInstallableUnit iu : toUninstall)
+			remove(iu);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#setProfileProperty(java.lang.String, java.lang.String)
+	 */
+	public void setProfileProperty(String key, String value) {
+		if (propertiesToAdd == null)
+			propertiesToAdd = new HashMap<String, String>();
+		propertiesToAdd.put(key, value);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeProfileProperty(java.lang.String)
+	 */
+	public void removeProfileProperty(String key) {
+		if (propertiesToRemove == null)
+			propertiesToRemove = new ArrayList<String>(1);
+		propertiesToRemove.add(key);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#setInstallableUnitProfileProperty(org.eclipse.equinox.p2.metadata.IInstallableUnit, java.lang.String, java.lang.String)
+	 */
+	public void setInstallableUnitProfileProperty(IInstallableUnit iu, String key, String value) {
+		if (iuPropertiesToAdd == null)
+			iuPropertiesToAdd = new HashMap<IInstallableUnit, Map<String, String>>();
+		Map<String, String> properties = iuPropertiesToAdd.get(iu);
+		if (properties == null) {
+			properties = new HashMap<String, String>();
+			iuPropertiesToAdd.put(iu, properties);
+		}
+		properties.put(key, value);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnitProfileProperty(org.eclipse.equinox.p2.metadata.IInstallableUnit, java.lang.String)
+	 */
+	public void removeInstallableUnitProfileProperty(IInstallableUnit iu, String key) {
+		if (iuPropertiesToRemove == null)
+			iuPropertiesToRemove = new HashMap<IInstallableUnit, List<String>>();
+		List<String> keys = iuPropertiesToRemove.get(iu);
+		if (keys == null) {
+			keys = new ArrayList<String>();
+			iuPropertiesToRemove.put(iu, keys);
+		}
+		if (!keys.contains(key))
+			keys.add(key);
+	}
+
+	public Collection<IInstallableUnit> getRemovals() {
+		if (iusToRemove == null)
+			return CollectionUtils.emptyList();
+		return Collections.unmodifiableList(iusToRemove);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#getAddedInstallableUnits()
+	 */
+	public Collection<IInstallableUnit> getAdditions() {
+		if (iusToAdd == null)
+			return CollectionUtils.emptyList();
+		return Collections.unmodifiableList(iusToAdd);
+	}
+
+	// String [key, key, key] names of properties to remove
+	public String[] getPropertiesToRemove() {
+		if (propertiesToRemove == null)
+			return new String[0];
+		return propertiesToRemove.toArray(new String[propertiesToRemove.size()]);
+	}
+
+	// map of key value pairs
+	public Map<String, String> getPropertiesToAdd() {
+		if (propertiesToAdd == null)
+			return CollectionUtils.emptyMap();
+		return propertiesToAdd;
+	}
+
+	// map of iu->list of property keys to be removed for an iu	
+	public Map<IInstallableUnit, List<String>> getInstallableUnitProfilePropertiesToRemove() {
+		if (iuPropertiesToRemove == null)
+			return CollectionUtils.emptyMap();
+		return iuPropertiesToRemove;
+	}
+
+	// TODO This can be represented and returned in whatever way makes most sense for planner/engine
+	// map iu->map of key->value pairs for properties to be added for an iu
+	public Map<IInstallableUnit, Map<String, String>> getInstallableUnitProfilePropertiesToAdd() {
+		if (iuPropertiesToAdd == null)
+			return CollectionUtils.emptyMap();
+		return iuPropertiesToAdd;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#setInstallableUnitInclusionRules(org.eclipse.equinox.p2.metadata.IInstallableUnit, java.lang.String)
+	 */
+	public void setInstallableUnitInclusionRules(IInstallableUnit iu, String value) {
+		setInstallableUnitProfileProperty(iu, SimplePlanner.INCLUSION_RULES, value);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnitInclusionRules(org.eclipse.equinox.p2.metadata.IInstallableUnit)
+	 */
+	public void removeInstallableUnitInclusionRules(IInstallableUnit iu) {
+		removeInstallableUnitProfileProperty(iu, SimplePlanner.INCLUSION_RULES);
+	}
+
+	@SuppressWarnings("unchecked")
+	public Object clone() {
+		ProfileChangeRequest result = new ProfileChangeRequest(profile);
+		result.iusToRemove = iusToRemove == null ? null : (ArrayList<IInstallableUnit>) iusToRemove.clone();
+		result.iusToAdd = iusToAdd == null ? null : (ArrayList<IInstallableUnit>) iusToAdd.clone();
+		result.propertiesToRemove = propertiesToRemove == null ? null : (ArrayList<String>) propertiesToRemove.clone();
+		result.propertiesToAdd = propertiesToAdd == null ? null : (HashMap<String, String>) propertiesToAdd.clone();
+		result.iuPropertiesToAdd = iuPropertiesToAdd == null ? null : (HashMap<IInstallableUnit, Map<String, String>>) iuPropertiesToAdd.clone();
+		result.iuPropertiesToRemove = iuPropertiesToRemove == null ? null : (HashMap<IInstallableUnit, List<String>>) iuPropertiesToRemove.clone();
+		result.additionalRequirements = additionalRequirements == null ? null : (ArrayList<IRequirement>) additionalRequirements.clone();
+		return result;
+	}
+
+	public String toString() {
+		StringBuffer result = new StringBuffer(1000);
+		result.append("==Profile change request for "); //$NON-NLS-1$
+		result.append(profile.getProfileId());
+		result.append('\n');
+		if (iusToAdd != null) {
+			result.append("==Additions=="); //$NON-NLS-1$
+			result.append('\n');
+			for (IInstallableUnit iu : iusToAdd) {
+				result.append('\t');
+				result.append(iu);
+				result.append('\n');
+			}
+		}
+		if (iusToRemove != null) {
+			result.append("==Removals=="); //$NON-NLS-1$
+			result.append('\n');
+			for (IInstallableUnit iu : iusToRemove) {
+				result.append('\t');
+				result.append(iu);
+				result.append('\n');
+			}
+		}
+		return result.toString();
+	}
+
+	public void addExtraRequirements(Collection<IRequirement> requirements) {
+		if (additionalRequirements == null)
+			additionalRequirements = new ArrayList<IRequirement>(requirements.size());
+		additionalRequirements.addAll(requirements);
+	}
+
+	public Collection<IRequirement> getExtraRequirements() {
+		return additionalRequirements;
+	}
+
+	public void clearExtraRequirements() {
+		additionalRequirements = null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java
index 48c0756..db45208 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/Projector.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2011 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
  *
- * Contributors: IBM Corporation - initial API and implementation
- * Daniel Le Berre - Fix in the encoding and the optimization function
- * Alban Browaeys - Optimized string concatenation in bug 251357
- * Jed Anderson - switch from opb files to API calls to DependencyHelper in bug 200380
- *     Sonatype, Inc. - ongoing development
+ * Contributors: 
+ *   IBM Corporation - initial API and implementation
+ *   Daniel Le Berre - Fix in the encoding and the optimization function
+ *   Alban Browaeys - Optimized string concatenation in bug 251357
+ *   Jed Anderson - switch from opb files to API calls to DependencyHelper in bug 200380
+ *   Sonatype, Inc. - ongoing development
  ******************************************************************************/
 package org.eclipse.equinox.internal.p2.director;
 
@@ -177,7 +178,22 @@ public class Projector {
 			} else {
 				solver = SolverFactory.newEclipseP2();
 			}
-			solver.setTimeoutOnConflicts(1000);
+			int timeout = 1000;
+			String timeoutString = null;
+			try {
+				// allow the user to specify a longer timeout. 
+				// only set the value if it is a positive integer larger than the default.
+				// see https://bugs.eclipse.org/336967
+				timeoutString = DirectorActivator.context.getProperty("eclipse.p2.projector.timeout"); //$NON-NLS-1$
+				if (timeoutString != null)
+					timeout = Math.max(timeout, Integer.parseInt(timeoutString));
+			} catch (Exception e) {
+				// intentionally catch all errors (npe, number format, etc)
+				// print out to syserr and fall through
+				System.err.println("Ignoring user-specified 'eclipse.p2.projector.timeout' value of: " + timeoutString); //$NON-NLS-1$
+				e.printStackTrace();
+			}
+			solver.setTimeoutOnConflicts(timeout);
 			IQueryResult<IInstallableUnit> queryResult = picker.query(QueryUtil.createIUAnyQuery(), null);
 			if (DEBUG_ENCODING) {
 				dependencyHelper = new DependencyHelper<Object, Explanation>(solver, false);
@@ -268,23 +284,19 @@ public class Projector {
 
 		BigInteger maxWeight = POWER;
 		for (Entry<String, Map<Version, IInstallableUnit>> entry : s) {
-			Map<Version, IInstallableUnit> conflictingEntries = entry.getValue();
-
-			List<IInstallableUnit> toSort = new ArrayList<IInstallableUnit>(conflictingEntries.values());
+			List<IInstallableUnit> conflictingEntries = new ArrayList<IInstallableUnit>(entry.getValue().values());
 			if (conflictingEntries.size() == 1) {
-				IInstallableUnit iu = toSort.get(0);
+				IInstallableUnit iu = conflictingEntries.get(0);
 				if (iu != metaIu) {
 					weightedObjects.add(WeightedObject.newWO(iu, POWER));
 				}
 				continue;
 			}
-			Collections.sort(toSort, Collections.reverseOrder());
+			Collections.sort(conflictingEntries, Collections.reverseOrder());
 			BigInteger weight = POWER;
-			int count = toSort.size();
 			boolean installedIuMet = false;
 			boolean rootedMet = false;
-			for (int i = 0; i < count; i++) {
-				IInstallableUnit iu = toSort.get(i);
+			for (IInstallableUnit iu : conflictingEntries) {
 				if (!rootedMet && isInstalled(iu) && !transitiveClosure.contains(iu)) {
 					installedIuMet = true;
 					weightedObjects.add(WeightedObject.newWO(iu, BigInteger.ONE));
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/QueryableArray.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/QueryableArray.java
index 671039c..2c8ba97 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/QueryableArray.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/QueryableArray.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java
index ea506ee..adf0fd4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java
@@ -10,13 +10,14 @@
  ******************************************************************************/
 package org.eclipse.equinox.internal.p2.director;
 
-import org.eclipse.equinox.p2.planner.IPlanner;
-
 import java.util.Collection;
 import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.provisional.p2.director.*;
+import org.eclipse.equinox.internal.provisional.p2.director.IDirector;
+import org.eclipse.equinox.internal.provisional.p2.director.PlanExecutionHelper;
 import org.eclipse.equinox.p2.engine.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 import org.eclipse.osgi.util.NLS;
 
 public class SimpleDirector implements IDirector {
@@ -44,8 +45,8 @@ public class SimpleDirector implements IDirector {
 		}
 	}
 
-	public IStatus provision(ProfileChangeRequest request, ProvisioningContext context, IProgressMonitor monitor) {
-		String taskName = NLS.bind(Messages.Director_Task_Installing, request.getProfile().getProperty(IProfile.PROP_INSTALL_FOLDER));
+	public IStatus provision(IProfileChangeRequest request, ProvisioningContext context, IProgressMonitor monitor) {
+		String taskName = NLS.bind(Messages.Director_Task_Installing, ((ProfileChangeRequest) request).getProfile().getProperty(IProfile.PROP_INSTALL_FOLDER));
 		SubMonitor sub = SubMonitor.convert(monitor, taskName, PlanWork + EngineWork);
 		try {
 			Collection<IInstallableUnit> installRoots = request.getAdditions();
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
index 93080db..e8d6be1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
@@ -31,8 +31,6 @@ import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescriptio
 import org.eclipse.equinox.p2.planner.*;
 import org.eclipse.equinox.p2.query.*;
 import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 
 public class SimplePlanner implements IPlanner {
 	private static boolean DEBUG = Tracing.DEBUG_PLANNER_OPERANDS;
@@ -53,7 +51,7 @@ public class SimplePlanner implements IPlanner {
 	private IProvisioningPlan generateProvisioningPlan(Collection<IInstallableUnit> fromState, Collection<IInstallableUnit> toState, ProfileChangeRequest changeRequest, IProvisioningPlan installerPlan, ProvisioningContext context) {
 		IProvisioningPlan plan = engine.createPlan(changeRequest.getProfile(), context);
 		planIUOperations(plan, fromState, toState);
-		planPropertyOperations(plan, changeRequest);
+		planPropertyOperations(plan, changeRequest, toState);
 
 		if (DEBUG) {
 			Object[] operands = new Object[0];
@@ -71,77 +69,13 @@ public class SimplePlanner implements IPlanner {
 		Map<IInstallableUnit, RequestStatus>[] changes = computeActualChangeRequest(toState, changeRequest);
 		Map<IInstallableUnit, RequestStatus> requestChanges = (changes == null) ? null : changes[0];
 		Map<IInstallableUnit, RequestStatus> requestSideEffects = (changes == null) ? null : changes[1];
-
 		QueryableArray plannedState = new QueryableArray(toState.toArray(new IInstallableUnit[toState.size()]));
 		PlannerStatus plannerStatus = new PlannerStatus(Status.OK_STATUS, null, requestChanges, requestSideEffects, plannedState);
-
 		plan.setStatus(plannerStatus);
 		plan.setInstallerPlan(installerPlan);
-
-		IStatus verificationStatus = verifyPlan(plan);
-		if (!verificationStatus.isOK())
-			plan.setStatus(verificationStatus);
-
 		return plan;
 	}
 
-	/*
-	 * Give clients the opportunity to veto the given provisioning plan. Return a status
-	 * indicating the result of the verifier's analysis of the plan. If a verifier is not 
-	 * registered, if verification is disabled, or if the verifier is misbehaving then
-	 * return an OK status and continue with the provisioning operation as if the verifier
-	 * had not run at all. 
-	 */
-	private IStatus verifyPlan(final IProvisioningPlan plan) {
-		final BundleContext context = DirectorActivator.context;
-		if (context == null)
-			return Status.OK_STATUS;
-		String value = context.getProperty("eclipse.p2.verifyPlan"); //$NON-NLS-1$
-		if ("false".equalsIgnoreCase(value)) { //$NON-NLS-1$
-			if (Tracing.DEBUG_VERIFIER)
-				Tracing.debug("Plan verification disabled by user."); //$NON-NLS-1$
-			return Status.OK_STATUS;
-		}
-		ServiceReference ref = context.getServiceReference(PlanVerifier.class.getName());
-		if (ref == null) {
-			if (Tracing.DEBUG_VERIFIER)
-				Tracing.debug("Skipping plan verification. No verifier available."); //$NON-NLS-1$
-			return Status.OK_STATUS;
-		}
-		final PlanVerifier verifier = (PlanVerifier) context.getService(ref);
-		if (verifier == null) {
-			if (Tracing.DEBUG_VERIFIER)
-				Tracing.debug("Skipping plan verification. No verifier available."); //$NON-NLS-1$
-			return Status.OK_STATUS;
-		}
-		final IStatus[] result = new IStatus[1];
-		result[0] = Status.OK_STATUS;
-		ISafeRunnable job = new ISafeRunnable() {
-			public void handleException(Throwable exception) {
-				if (Tracing.DEBUG_VERIFIER)
-					Tracing.debug("Exception while running verifier. Check log for details."); //$NON-NLS-1$
-				// log the exception 
-				LogHelper.log(new Status(IStatus.ERROR, DirectorActivator.PI_DIRECTOR, "Exception while running plan verifier.", exception)); //$NON-NLS-1$
-				// don't let a bad verifier prevent the operation. fall through and return OK so execution of the plan continues
-			}
-
-			public void run() throws Exception {
-				if (Tracing.DEBUG_VERIFIER)
-					Tracing.debug("Running plan verifier."); //$NON-NLS-1$
-				long start = System.currentTimeMillis();
-				result[0] = verifier.verify(plan);
-				if (Tracing.DEBUG_VERIFIER)
-					Tracing.debug("Verification complete in " + (System.currentTimeMillis() - start) + "ms."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		};
-		try {
-			SafeRunner.run(job);
-		} finally {
-			context.ungetService(ref);
-		}
-		return result[0];
-	}
-
 	private Map<IInstallableUnit, RequestStatus>[] buildDetailedErrors(ProfileChangeRequest changeRequest) {
 		Collection<IInstallableUnit> requestedAdditions = changeRequest.getAdditions();
 		Collection<IInstallableUnit> requestedRemovals = changeRequest.getRemovals();
@@ -230,7 +164,7 @@ public class SimplePlanner implements IPlanner {
 		return root;
 	}
 
-	private void planPropertyOperations(IProvisioningPlan plan, ProfileChangeRequest profileChangeRequest) {
+	private void planPropertyOperations(IProvisioningPlan plan, ProfileChangeRequest profileChangeRequest, Collection<IInstallableUnit> toState) {
 
 		// First deal with profile properties to remove.
 		String[] toRemove = profileChangeRequest.getPropertiesToRemove();
@@ -247,6 +181,8 @@ public class SimplePlanner implements IPlanner {
 		Map<IInstallableUnit, Map<String, String>> allIUPropertyChanges = profileChangeRequest.getInstallableUnitProfilePropertiesToAdd();
 		for (Map.Entry<IInstallableUnit, Map<String, String>> entry : allIUPropertyChanges.entrySet()) {
 			IInstallableUnit iu = entry.getKey();
+			if (!toState.contains(iu))
+				continue;
 			for (Map.Entry<String, String> entry2 : entry.getValue().entrySet()) {
 				plan.setInstallableUnitProfileProperty(iu, entry2.getKey(), entry2.getValue());
 			}
@@ -895,5 +831,4 @@ public class SimplePlanner implements IPlanner {
 	public IProfileChangeRequest createChangeRequest(IProfile profileToChange) {
 		return new ProfileChangeRequest(profileToChange);
 	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/messages.properties
index a21c0d0..046e279 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/rollback/FormerState.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/rollback/FormerState.java
index f957427..72c86da 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/rollback/FormerState.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/rollback/FormerState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,15 +11,14 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.rollback;
 
-import org.eclipse.equinox.p2.query.QueryUtil;
-
 import java.util.*;
 import java.util.Map.Entry;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.p2.director.SimplePlanner;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
+import org.eclipse.equinox.p2.query.QueryUtil;
 
 public class FormerState {
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java
index 585c89c..aaa1373 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.engine.ProvisioningContext;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 
 /**
  * Directors are responsible for determining what should be done to a given 
@@ -40,7 +41,7 @@ public interface IDirector {
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting is not desired
 	 */
-	public IStatus provision(ProfileChangeRequest profileChangeRequest, ProvisioningContext context, IProgressMonitor monitor);
+	public IStatus provision(IProfileChangeRequest profileChangeRequest, ProvisioningContext context, IProgressMonitor monitor);
 
 	/**
 	 * Reverts the profile to a previous state described in the target revertProfile.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanExecutionHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanExecutionHelper.java
index ed2d8e3..417806a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanExecutionHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanExecutionHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanVerifier.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanVerifier.java
deleted file mode 100644
index 5231685..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlanVerifier.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.director;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.equinox.p2.engine.IProvisioningPlan;
-
-/**
- * Verifier is responsible for checking plan sanity
- */
-public abstract class PlanVerifier {
-	/**
-	 * Verifies provisioning plan from P2 solver
-	 */
-	public abstract IStatus verify(IProvisioningPlan plan);
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlannerStatus.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlannerStatus.java
index b4b8306..79a481d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlannerStatus.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/PlannerStatus.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.internal.provisional.p2.director;
 
 import java.util.Map;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/ProfileChangeRequest.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/ProfileChangeRequest.java
deleted file mode 100644
index ac2ee18..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/ProfileChangeRequest.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2010 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *     Sonatype, Inc. - ongoing development
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.director;
-
-import java.util.*;
-import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
-import org.eclipse.equinox.internal.p2.director.Messages;
-import org.eclipse.equinox.internal.p2.director.SimplePlanner;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.equinox.p2.engine.IProfileRegistry;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.metadata.IRequirement;
-import org.eclipse.equinox.p2.planner.IPlanner;
-import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
-
-/**
- * @noreference This class was unintentionally left in the provisional API package and
- * 	is intended to be made internal in Eclipse 3.7. Clients should create and manipulate 
- * 	profile change requests via the API {@link IPlanner#createChangeRequest(IProfile)}
- * 	and methods on {@link IProfileChangeRequest}.
- */
-public class ProfileChangeRequest implements Cloneable, IProfileChangeRequest {
-
-	private final IProfile profile;
-	private ArrayList<IInstallableUnit> iusToRemove = null; // list of ius to remove
-	private ArrayList<IInstallableUnit> iusToAdd = null; // list of ius to add
-	private ArrayList<String> propertiesToRemove = null; // list of keys for properties to be removed
-	private HashMap<String, String> propertiesToAdd = null; // map of key->value for properties to be added
-	private HashMap<IInstallableUnit, Map<String, String>> iuPropertiesToAdd = null; // map iu->map of key->value pairs for properties to be added for an iu
-	private HashMap<IInstallableUnit, List<String>> iuPropertiesToRemove = null; // map of iu->list of property keys to be removed for an iu
-	private ArrayList<IRequirement> additionalRequirements;
-
-	public static ProfileChangeRequest createByProfileId(IProvisioningAgent agent, String profileId) {
-		IProfileRegistry profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
-		if (profileRegistry == null)
-			throw new IllegalStateException(Messages.Planner_no_profile_registry);
-		IProfile profile = profileRegistry.getProfile(profileId);
-		if (profile == null)
-			throw new IllegalArgumentException("Profile id " + profileId + " is not registered."); //$NON-NLS-1$//$NON-NLS-2$
-		return new ProfileChangeRequest(profile);
-	}
-
-	public ProfileChangeRequest(IProfile profile) {
-		this.profile = profile;
-	}
-
-	public void setProfile(IProfile profile) {
-		if (profile == null)
-			throw new IllegalArgumentException("Profile cannot be null."); //$NON-NLS-1$
-	}
-
-	public IProfile getProfile() {
-		return profile;
-	}
-
-	public Map<String, String> getProfileProperties() {
-		Map<String, String> result = new HashMap<String, String>(profile.getProperties());
-		if (propertiesToRemove != null) {
-			for (String key : propertiesToRemove) {
-				result.remove(key);
-			}
-		}
-		if (propertiesToAdd != null)
-			result.putAll(propertiesToAdd);
-
-		return result;
-	}
-
-	//done
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#addInstallableUnit(org.eclipse.equinox.p2.metadata.IInstallableUnit)
-	 */
-	public void add(IInstallableUnit toInstall) {
-		if (iusToAdd == null)
-			iusToAdd = new ArrayList<IInstallableUnit>();
-		iusToAdd.add(toInstall);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#addInstallableUnits(java.util.Collection)
-	 */
-	public void addAll(Collection<IInstallableUnit> toInstall) {
-		for (IInstallableUnit iu : toInstall)
-			add(iu);
-	}
-
-	public void addInstallableUnits(IInstallableUnit... toInstall) {
-		for (int i = 0; i < toInstall.length; i++)
-			add(toInstall[i]);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnit(org.eclipse.equinox.p2.metadata.IInstallableUnit)
-	 */
-	public void remove(IInstallableUnit toUninstall) {
-		if (iusToRemove == null)
-			iusToRemove = new ArrayList<IInstallableUnit>();
-		iusToRemove.add(toUninstall);
-	}
-
-	public void removeInstallableUnits(IInstallableUnit[] toUninstall) {
-		for (int i = 0; i < toUninstall.length; i++)
-			remove(toUninstall[i]);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnits(java.util.Collection)
-	 */
-	public void removeAll(Collection<IInstallableUnit> toUninstall) {
-		for (IInstallableUnit iu : toUninstall)
-			remove(iu);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#setProfileProperty(java.lang.String, java.lang.String)
-	 */
-	public void setProfileProperty(String key, String value) {
-		if (propertiesToAdd == null)
-			propertiesToAdd = new HashMap<String, String>();
-		propertiesToAdd.put(key, value);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeProfileProperty(java.lang.String)
-	 */
-	public void removeProfileProperty(String key) {
-		if (propertiesToRemove == null)
-			propertiesToRemove = new ArrayList<String>(1);
-		propertiesToRemove.add(key);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#setInstallableUnitProfileProperty(org.eclipse.equinox.p2.metadata.IInstallableUnit, java.lang.String, java.lang.String)
-	 */
-	public void setInstallableUnitProfileProperty(IInstallableUnit iu, String key, String value) {
-		if (iuPropertiesToAdd == null)
-			iuPropertiesToAdd = new HashMap<IInstallableUnit, Map<String, String>>();
-		Map<String, String> properties = iuPropertiesToAdd.get(iu);
-		if (properties == null) {
-			properties = new HashMap<String, String>();
-			iuPropertiesToAdd.put(iu, properties);
-		}
-		properties.put(key, value);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnitProfileProperty(org.eclipse.equinox.p2.metadata.IInstallableUnit, java.lang.String)
-	 */
-	public void removeInstallableUnitProfileProperty(IInstallableUnit iu, String key) {
-		if (iuPropertiesToRemove == null)
-			iuPropertiesToRemove = new HashMap<IInstallableUnit, List<String>>();
-		List<String> keys = iuPropertiesToRemove.get(iu);
-		if (keys == null) {
-			keys = new ArrayList<String>();
-			iuPropertiesToRemove.put(iu, keys);
-		}
-		if (!keys.contains(key))
-			keys.add(key);
-	}
-
-	public Collection<IInstallableUnit> getRemovals() {
-		if (iusToRemove == null)
-			return CollectionUtils.emptyList();
-		return Collections.unmodifiableList(iusToRemove);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#getAddedInstallableUnits()
-	 */
-	public Collection<IInstallableUnit> getAdditions() {
-		if (iusToAdd == null)
-			return CollectionUtils.emptyList();
-		return Collections.unmodifiableList(iusToAdd);
-	}
-
-	// String [key, key, key] names of properties to remove
-	public String[] getPropertiesToRemove() {
-		if (propertiesToRemove == null)
-			return new String[0];
-		return propertiesToRemove.toArray(new String[propertiesToRemove.size()]);
-	}
-
-	// map of key value pairs
-	public Map<String, String> getPropertiesToAdd() {
-		if (propertiesToAdd == null)
-			return CollectionUtils.emptyMap();
-		return propertiesToAdd;
-	}
-
-	// map of iu->list of property keys to be removed for an iu	
-	public Map<IInstallableUnit, List<String>> getInstallableUnitProfilePropertiesToRemove() {
-		if (iuPropertiesToRemove == null)
-			return CollectionUtils.emptyMap();
-		return iuPropertiesToRemove;
-	}
-
-	// TODO This can be represented and returned in whatever way makes most sense for planner/engine
-	// map iu->map of key->value pairs for properties to be added for an iu
-	public Map<IInstallableUnit, Map<String, String>> getInstallableUnitProfilePropertiesToAdd() {
-		if (iuPropertiesToAdd == null)
-			return CollectionUtils.emptyMap();
-		return iuPropertiesToAdd;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#setInstallableUnitInclusionRules(org.eclipse.equinox.p2.metadata.IInstallableUnit, java.lang.String)
-	 */
-	public void setInstallableUnitInclusionRules(IInstallableUnit iu, String value) {
-		setInstallableUnitProfileProperty(iu, SimplePlanner.INCLUSION_RULES, value);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.director.IPCR#removeInstallableUnitInclusionRules(org.eclipse.equinox.p2.metadata.IInstallableUnit)
-	 */
-	public void removeInstallableUnitInclusionRules(IInstallableUnit iu) {
-		removeInstallableUnitProfileProperty(iu, SimplePlanner.INCLUSION_RULES);
-	}
-
-	@SuppressWarnings("unchecked")
-	public Object clone() {
-		ProfileChangeRequest result = new ProfileChangeRequest(profile);
-		result.iusToRemove = iusToRemove == null ? null : (ArrayList<IInstallableUnit>) iusToRemove.clone();
-		result.iusToAdd = iusToAdd == null ? null : (ArrayList<IInstallableUnit>) iusToAdd.clone();
-		result.propertiesToRemove = propertiesToRemove == null ? null : (ArrayList<String>) propertiesToRemove.clone();
-		result.propertiesToAdd = propertiesToAdd == null ? null : (HashMap<String, String>) propertiesToAdd.clone();
-		result.iuPropertiesToAdd = iuPropertiesToAdd == null ? null : (HashMap<IInstallableUnit, Map<String, String>>) iuPropertiesToAdd.clone();
-		result.iuPropertiesToRemove = iuPropertiesToRemove == null ? null : (HashMap<IInstallableUnit, List<String>>) iuPropertiesToRemove.clone();
-		result.additionalRequirements = additionalRequirements == null ? null : (ArrayList<IRequirement>) additionalRequirements.clone();
-		return result;
-	}
-
-	public String toString() {
-		StringBuffer result = new StringBuffer(1000);
-		result.append("==Profile change request for "); //$NON-NLS-1$
-		result.append(profile.getProfileId());
-		result.append('\n');
-		if (iusToAdd != null) {
-			result.append("==Additions=="); //$NON-NLS-1$
-			result.append('\n');
-			for (IInstallableUnit iu : iusToAdd) {
-				result.append('\t');
-				result.append(iu);
-				result.append('\n');
-			}
-		}
-		if (iusToRemove != null) {
-			result.append("==Removals=="); //$NON-NLS-1$
-			result.append('\n');
-			for (IInstallableUnit iu : iusToRemove) {
-				result.append('\t');
-				result.append(iu);
-				result.append('\n');
-			}
-		}
-		return result.toString();
-	}
-
-	public void addExtraRequirements(Collection<IRequirement> requirements) {
-		if (additionalRequirements == null)
-			additionalRequirements = new ArrayList<IRequirement>(requirements.size());
-		additionalRequirements.addAll(requirements);
-	}
-
-	public Collection<IRequirement> getExtraRequirements() {
-		return additionalRequirements;
-	}
-
-	public void clearExtraRequirements() {
-		additionalRequirements = null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/RequestStatus.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/RequestStatus.java
index b1f6796..55dd3c6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/RequestStatus.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/RequestStatus.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008-2009 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/p2/planner/ProfileInclusionRules.java b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/p2/planner/ProfileInclusionRules.java
index dda4a15..ed9d29d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/p2/planner/ProfileInclusionRules.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/p2/planner/ProfileInclusionRules.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF
index 208e370..e51d43c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.directorywatcher;singleton:=true
-Bundle-Version: 1.0.203.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.provisional.p2.directorywatcher.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/build.properties
index ca50309..aaa11b5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml
index 7cec2ae..602e8d4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.directorywatcher</artifactId>
-  <version>1.0.202.qualifier</version>
+  <version>1.0.300.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/Activator.java
index 05cd04b..bd64fa3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java
index 574a856..937f82b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -93,18 +93,43 @@ public class CachingArtifactRepository implements IArtifactRepository, IFileArti
 			artifactMap.remove(key);
 	}
 
-	public synchronized void addDescriptors(IArtifactDescriptor[] descriptors) {
-		for (int i = 0; i < descriptors.length; i++) {
-			((ArtifactDescriptor) descriptors[i]).setRepository(this);
-			descriptorsToAdd.add(descriptors[i]);
-			mapDescriptor(descriptors[i]);
+	public synchronized void addDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		try {
+			SubMonitor subMonitor = SubMonitor.convert(monitor, descriptors.length);
+			for (int i = 0; i < descriptors.length; i++) {
+				((ArtifactDescriptor) descriptors[i]).setRepository(this);
+				descriptorsToAdd.add(descriptors[i]);
+				mapDescriptor(descriptors[i]);
+				subMonitor.worked(1);
+			}
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
+	}
+
+	@Deprecated
+	public final synchronized void addDescriptors(IArtifactDescriptor[] descriptors) {
+		addDescriptors(descriptors, new NullProgressMonitor());
+	}
+
+	public synchronized void addDescriptor(IArtifactDescriptor toAdd, IProgressMonitor monitor) {
+		try {
+			SubMonitor subMonitor = SubMonitor.convert(monitor, 1);
+
+			((ArtifactDescriptor) toAdd).setRepository(this);
+			descriptorsToAdd.add(toAdd);
+			mapDescriptor(toAdd);
+			subMonitor.worked(1);
+		} finally {
+			if (monitor != null)
+				monitor.done();
 		}
 	}
 
-	public synchronized void addDescriptor(IArtifactDescriptor toAdd) {
-		((ArtifactDescriptor) toAdd).setRepository(this);
-		descriptorsToAdd.add(toAdd);
-		mapDescriptor(toAdd);
+	@Deprecated
+	public final synchronized void addDescriptor(IArtifactDescriptor toAdd) {
+		addDescriptor(toAdd, new NullProgressMonitor());
 	}
 
 	public synchronized IArtifactDescriptor[] getArtifactDescriptors(IArtifactKey key) {
@@ -140,20 +165,93 @@ public class CachingArtifactRepository implements IArtifactRepository, IFileArti
 		return null;
 	}
 
+	public synchronized final void removeAll(IProgressMonitor monitor) {
+		try {
+			SubMonitor subMonitor = SubMonitor.convert(monitor, 1);
+			IArtifactDescriptor[] toRemove = descriptorsToAdd.toArray(new IArtifactDescriptor[descriptorsToAdd.size()]);
+			for (int i = 0; i < toRemove.length; i++)
+				doRemoveArtifact(toRemove[i]);
+			subMonitor.worked(1);
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
+	}
+
+	@Deprecated
 	public synchronized void removeAll() {
-		IArtifactDescriptor[] toRemove = descriptorsToAdd.toArray(new IArtifactDescriptor[descriptorsToAdd.size()]);
-		for (int i = 0; i < toRemove.length; i++)
-			doRemoveArtifact(toRemove[i]);
+		this.removeAll(new NullProgressMonitor());
+	}
+
+	public synchronized void removeDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		try {
+			SubMonitor subMonitor = SubMonitor.convert(monitor, 1);
+			doRemoveArtifact(descriptor);
+			subMonitor.worked(1);
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
+	}
+
+	@Deprecated
+	public final synchronized void removeDescriptor(IArtifactDescriptor descriptor) {
+		removeDescriptor(descriptor, new NullProgressMonitor());
+	}
+
+	public synchronized void removeDescriptor(IArtifactKey key, IProgressMonitor monitor) {
+		try {
+			IArtifactDescriptor[] toRemove = getArtifactDescriptors(key);
+			SubMonitor subMonitor = SubMonitor.convert(monitor, toRemove.length);
+			for (int i = 0; i < toRemove.length; i++) {
+				doRemoveArtifact(toRemove[i]);
+				subMonitor.worked(1);
+			}
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
+	}
+
+	@Deprecated
+	public final synchronized void removeDescriptor(IArtifactKey key) {
+		this.removeDescriptor(key, new NullProgressMonitor());
+	}
+
+	public synchronized void removeDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		try {
+			SubMonitor subMonitor = SubMonitor.convert(monitor, descriptors.length);
+			for (IArtifactDescriptor descriptor : descriptors) {
+				doRemoveArtifact(descriptor);
+				subMonitor.worked(1);
+			}
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
 	}
 
-	public synchronized void removeDescriptor(IArtifactDescriptor descriptor) {
-		doRemoveArtifact(descriptor);
+	@Deprecated
+	public final synchronized void removeDescriptors(IArtifactDescriptor[] descriptors) {
+		removeDescriptors(descriptors, new NullProgressMonitor());
 	}
 
-	public synchronized void removeDescriptor(IArtifactKey key) {
-		IArtifactDescriptor[] toRemove = getArtifactDescriptors(key);
-		for (int i = 0; i < toRemove.length; i++)
-			doRemoveArtifact(toRemove[i]);
+	public synchronized void removeDescriptors(IArtifactKey[] keys, IProgressMonitor monitor) {
+		try {
+			SubMonitor subMonitor = SubMonitor.convert(monitor, keys.length);
+			for (IArtifactKey key : keys) {
+				removeDescriptor(key);
+				subMonitor.worked(1);
+			}
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
+	}
+
+	@Deprecated
+	public final synchronized void removeDescriptors(IArtifactKey[] keys) {
+		removeDescriptors(keys, new NullProgressMonitor());
 	}
 
 	/**
@@ -211,10 +309,19 @@ public class CachingArtifactRepository implements IArtifactRepository, IFileArti
 		return innerRepo.isModifiable();
 	}
 
-	public String setProperty(String key, String value) {
-		String result = getProperties().get(key);
-		propertyChanges.put(key, value == null ? NULL : value);
-		return result;
+	public String setProperty(String key, String value, IProgressMonitor monitor) {
+		try {
+			String result = getProperties().get(key);
+			propertyChanges.put(key, value == null ? NULL : value);
+			return result;
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
+	}
+
+	public final String setProperty(String key, String value) {
+		return setProperty(key, value, new NullProgressMonitor());
 	}
 
 	@SuppressWarnings("rawtypes")
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java
index c47d076..545d1ed 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2008 aQute and others.
+ *  Copyright (c) 2007, 2010 aQute and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/EntryAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/EntryAdvice.java
index 00b12b7..9ac9276 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/EntryAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/EntryAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java
index 721a6d9..132e5f4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java
@@ -25,7 +25,6 @@ import org.eclipse.equinox.p2.publisher.*;
 import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction;
 import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction;
 import org.eclipse.equinox.p2.query.*;
-import org.eclipse.equinox.p2.repository.IRepository;
 import org.eclipse.equinox.p2.repository.artifact.*;
 import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
 import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
@@ -37,8 +36,8 @@ public class RepositoryListener extends DirectoryChangeListener {
 	public static final String ARTIFACT_REFERENCE = "artifact.reference"; //$NON-NLS-1$
 	public static final String FILE_LAST_MODIFIED = "file.lastModified"; //$NON-NLS-1$
 	public static final String FILE_NAME = "file.name"; //$NON-NLS-1$
-	private IMetadataRepository metadataRepository;
-	private CachingArtifactRepository artifactRepository;
+	private final IMetadataRepository metadataRepository;
+	private final CachingArtifactRepository artifactRepository;
 	// at any point in time currentFiles is the list of files/dirs that the watcher has seen and 
 	// believes to be on disk.
 	private final Map<File, Long> currentFiles = new HashMap<File, Long>();
@@ -53,25 +52,12 @@ public class RepositoryListener extends DirectoryChangeListener {
 	 * Create a repository listener that watches the specified folder and generates repositories
 	 * for its content.
 	 * @param repositoryName the repository name to use for the repository
-	 * @param hidden <code>true</code> if the repository should be hidden, <code>false</code> if not.
+	 * @param properties the map of repository properties or <code>null</code>
 	 */
-	public RepositoryListener(String repositoryName, boolean hidden) {
-		Map<String, String> properties = null;
-		if (hidden) {
-			properties = new HashMap<String, String>();
-			properties.put(IRepository.PROP_SYSTEM, Boolean.TRUE.toString());
-		}
-		initialize(repositoryName, properties);
-	}
-
-	public RepositoryListener(String name, Map<String, String> properties) {
-		initialize(name, properties);
-	}
-
-	private void initialize(String name, Map<String, String> properties) {
-		URI location = Activator.getDefaultRepositoryLocation(this, name);
-		metadataRepository = initializeMetadataRepository(name, location, properties);
-		artifactRepository = initializeArtifactRepository(name, location, properties);
+	public RepositoryListener(String repositoryName, Map<String, String> properties) {
+		URI location = Activator.getDefaultRepositoryLocation(this, repositoryName);
+		metadataRepository = initializeMetadataRepository(repositoryName, location, properties);
+		artifactRepository = initializeArtifactRepository(repositoryName, location, properties);
 		initializePublisher();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/META-INF/MANIFEST.MF
index 8382b99..f9cb23c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/META-INF/MANIFEST.MF
@@ -8,7 +8,8 @@ Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.3.0",
  org.eclipse.equinox.p2.core;bundle-version="2.0.0",
  org.eclipse.equinox.p2.discovery;bundle-version="1.0.0",
- org.eclipse.equinox.p2.repository;bundle-version="[2.0.0,2.1.0)"
+ org.eclipse.equinox.p2.repository;bundle-version="2.1.0",
+ org.eclipse.equinox.p2.transport.ecf;bundle-version="1.0.0"
 Export-Package: org.eclipse.equinox.internal.p2.discovery.compatibility;x-friends:="org.eclipse.equinox.p2.ui.discovery",
  org.eclipse.equinox.internal.p2.discovery.compatibility.util;x-friends:="org.eclipse.equinox.p2.ui.discovery"
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/build.properties
index 0f42be3..c142a3b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/plugin.properties
index 38b4c3f..986d9ca 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/pom.xml
index 4b043d7..fa24822 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.discovery.compatiblity</artifactId>
-  <version>1.0.0.qualifier</version>
+  <version>1.0.1.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Activator.java
index 6210e04..9afe76d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 Sonatype, Inc.
+ * Copyright (c) 2010, 2011 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,7 @@ package org.eclipse.equinox.internal.p2.discovery.compatibility;
 
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.equinox.internal.p2.discovery.compatibility.util.CacheManager;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
+import org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport;
 import org.osgi.framework.BundleContext;
 
 public class Activator extends Plugin {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoverySource.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoverySource.java
index b31db64..6e26a7b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoverySource.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoverySource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoveryStrategy.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoveryStrategy.java
index 2629e4b..29e1162 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoveryStrategy.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/BundleDiscoveryStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/ConnectorDiscoveryExtensionReader.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/ConnectorDiscoveryExtensionReader.java
index 84afa69..403d2cd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/ConnectorDiscoveryExtensionReader.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/ConnectorDiscoveryExtensionReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Directory.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Directory.java
index 0432288..0dcc98f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Directory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Directory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DirectoryParser.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DirectoryParser.java
index 539ec4f..5cac98f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DirectoryParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DirectoryParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DiscoveryRegistryStrategy.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DiscoveryRegistryStrategy.java
index b42f33f..c523fb1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DiscoveryRegistryStrategy.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/DiscoveryRegistryStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/JarDiscoverySource.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/JarDiscoverySource.java
index 666cff5..6c6733d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/JarDiscoverySource.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/JarDiscoverySource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Messages.java
index 5626eaa..d19858f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2011 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/RemoteBundleDiscoveryStrategy.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/RemoteBundleDiscoveryStrategy.java
index 707aa94..3af499c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/RemoteBundleDiscoveryStrategy.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/RemoteBundleDiscoveryStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2011 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/SiteVerifier.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/SiteVerifier.java
index 4f6cf71..d4b1aaf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/SiteVerifier.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/SiteVerifier.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.internal.p2.discovery.compatibility;
 
 import java.net.URI;
@@ -28,7 +38,7 @@ public class SiteVerifier {
 
 	/**
 	 * Determine update site availability. This may be performed automatically as part of discovery when
-	 * {@link #isVerifyUpdateSiteAvailability()} is true, or it may be invoked later by calling this method.
+	 * CatalogConfiguration#isVerifyUpdateSiteAvailability() is true, or it may be invoked later by calling this method.
 	 */
 	public void verifySiteAvailability(IProgressMonitor monitor) {
 		// NOTE: we don't put java.net.URLs in the map since it involves DNS activity when
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/messages.properties
index f20bfad..7a7e89b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2011 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/CacheManager.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/CacheManager.java
index adf3b99..ad5330d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/CacheManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/CacheManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@ import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
 import org.eclipse.equinox.internal.p2.discovery.compatibility.Activator;
 import org.eclipse.equinox.internal.p2.discovery.compatibility.Messages;
 import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.provisional.p2.repository.IStateful;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.osgi.util.NLS;
@@ -35,7 +35,7 @@ public class CacheManager {
 
 	private static final String DOWNLOADING = "downloading"; //$NON-NLS-1$
 
-	private final RepositoryTransport transport;
+	private final Transport transport;
 
 	/**
 	 * IStateful implementation of BufferedOutputStream. Class is used to get the status from
@@ -59,7 +59,7 @@ public class CacheManager {
 
 	}
 
-	public CacheManager(RepositoryTransport transport) {
+	public CacheManager(Transport transport) {
 		this.transport = transport;
 	}
 
@@ -84,6 +84,7 @@ public class CacheManager {
 	 * @throws OperationCanceledException - if user cancelled
 	 */
 	public File createCache(URI location, IProgressMonitor monitor) throws IOException, ProvisionException {
+
 		SubMonitor submonitor = SubMonitor.convert(monitor, 1000);
 		try {
 			File cacheFile = getCache(location);
@@ -142,7 +143,6 @@ public class CacheManager {
 	/**
 	 * Determines the local file paths of the locations potential cache file.
 	 * @param location The location to compute the cache for
-	 * @param PREFIX The prefix to use for this location
 	 * @return A {@link File} array with the cache files for JAR and XML extensions.
 	 */
 	private File getCache(URI location) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/DefaultSaxErrorHandler.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/DefaultSaxErrorHandler.java
index 06d2210..bb34990 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/DefaultSaxErrorHandler.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/DefaultSaxErrorHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/IOWithCauseException.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/IOWithCauseException.java
index 89b911b..e38abfa 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/IOWithCauseException.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/IOWithCauseException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/TransportUtil.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/TransportUtil.java
index 59e9892..06968df 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/TransportUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery.compatibility/src/org/eclipse/equinox/internal/p2/discovery/compatibility/util/TransportUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2011 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.discovery.compatibility.Activator;
 import org.eclipse.equinox.internal.p2.discovery.compatibility.Messages;
 import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
+import org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport;
 
 /**
  * A utility for accessing web resources
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.discovery/META-INF/MANIFEST.MF
index c209808..ba0bd32 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.equinox.p2.discovery;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.3.0",
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.discovery/build.properties
index 4057797..cf5a590 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.discovery/plugin.properties
index 38b4c3f..986d9ca 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.discovery/pom.xml
index e306864..f0221f3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.discovery</artifactId>
-  <version>1.0.0.qualifier</version>
+  <version>1.0.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/AbstractDiscoveryStrategy.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/AbstractDiscoveryStrategy.java
index e45cf86..6776673 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/AbstractDiscoveryStrategy.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/AbstractDiscoveryStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Catalog.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Catalog.java
index 411854d..e25b437 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Catalog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Catalog.java
@@ -254,7 +254,9 @@ public class Catalog {
 				boolean match = false;
 				try {
 					Filter filter = FrameworkUtil.createFilter(connector.getPlatformFilter());
-					match = filter.match(environment);
+					// TODO Doing raw conversion here for simplicity; could convert to Dictionary<String, ?>
+					// but the filter impl must still handle cases where non String keys are used.
+					match = filter.match((Dictionary) environment);
 				} catch (InvalidSyntaxException e) {
 					LogHelper.log(new Status(IStatus.ERROR, DiscoveryCore.ID_PLUGIN, NLS.bind(Messages.Catalog_illegal_filter_syntax, new Object[] {connector.getPlatformFilter(), connector.getId(), connector.getSource().getId()})));
 				}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/DiscoveryCore.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/DiscoveryCore.java
index 4f02074..8e6ecdf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/DiscoveryCore.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/DiscoveryCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Messages.java
index a6bbe4f..b42e9df 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Policy.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Policy.java
index 63b3d64..d05ce80 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Policy.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/Policy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/messages.properties
index c0f5d07..2651cbd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogCategory.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogCategory.java
index bb1b636..a8560a6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogCategory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogCategory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogItem.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogItem.java
index 0359f65..5f7e7ec 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogItem.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/CatalogItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Certification.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Certification.java
index 4122aa8..8583881 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Certification.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Certification.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/FeatureFilter.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/FeatureFilter.java
index 4e9d50b..5f9f327 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/FeatureFilter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/FeatureFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Group.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Group.java
index d59aa8e..76151c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Group.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Group.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Task top Technologies and others.
+ * Copyright (c) 2009, 2010 Task top Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Icon.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Icon.java
index dc3edb6..01b691f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Icon.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Icon.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Messages.java
index 3446f4e..40f5dd5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Overview.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Overview.java
index f1ab32c..8fb0790 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Overview.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/Overview.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/ValidationException.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/ValidationException.java
index 2035d22..28804ff 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/ValidationException.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/ValidationException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/messages.properties
index 8b0f428..9f61121 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/model/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogCategoryComparator.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogCategoryComparator.java
index 80e2fc3..f2aa2c0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogCategoryComparator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogCategoryComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogItemComparator.java b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogItemComparator.java
index 116e3d9..e61cc65 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogItemComparator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.discovery/src/org/eclipse/equinox/internal/p2/discovery/util/CatalogItemComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF
index 48d9847..fbc7a34 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.engine;singleton:=true
-Bundle-Version: 2.0.1.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.engine.EngineActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -11,18 +11,15 @@ Export-Package: org.eclipse.equinox.internal.p2.engine;
    org.eclipse.equinox.p2.touchpoint.eclipse,
    org.eclipse.equinox.p2.touchpoint.natives,
    org.eclipse.equinox.p2.ui.sdk.scheduler,
-   org.eclipse.pde.build",
+   org.eclipse.pde.build,
+   org.eclipse.equinox.p2.repository.tools",
  org.eclipse.equinox.internal.p2.engine.phases;x-friends:="org.eclipse.equinox.p2.director.app,org.eclipse.equinox.p2.repository.tools,org.eclipse.equinox.p2.ui.sdk.scheduler",
  org.eclipse.equinox.p2.engine;version="2.0.0",
  org.eclipse.equinox.p2.engine.query;version="2.0.0",
  org.eclipse.equinox.p2.engine.spi;version="2.0.0"
 Require-Bundle: org.eclipse.equinox.common,
  org.eclipse.equinox.registry,
- org.eclipse.equinox.p2.metadata.repository;bundle-version="1.0.100",
- org.eclipse.core.jobs;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.equinox.p2.repository;bundle-version="[2.0.0,2.1.0)",
- org.eclipse.equinox.p2.metadata;bundle-version="[2.0.0,2.1.0)",
- org.eclipse.equinox.p2.core;bundle-version="[2.0.0,2.1.0)"
+ org.eclipse.core.jobs;bundle-version="[3.4.0,4.0.0)"
 Eclipse-RegisterBuddy: org.eclipse.equinox.p2.metadata.repository
 Bundle-RequiredExecutionEnvironment: J2SE-1.5,
  J2SE-1.4,
@@ -32,6 +29,13 @@ Service-Component: OSGI-INF/profileRegistry.xml, OSGI-INF/engine.xml
 Import-Package: javax.xml.parsers,
  org.eclipse.core.internal.preferences,
  org.eclipse.core.runtime.preferences,
+ org.eclipse.equinox.internal.p2.core.helpers,
+ org.eclipse.equinox.internal.p2.metadata,
+ org.eclipse.equinox.internal.p2.metadata.index,
+ org.eclipse.equinox.internal.p2.metadata.repository.io,
+ org.eclipse.equinox.internal.p2.persistence,
+ org.eclipse.equinox.internal.provisional.p2.core.eventbus,
+ org.eclipse.equinox.internal.provisional.p2.repository,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.core.spi;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.metadata;version="[2.0.0,3.0.0)",
@@ -42,13 +46,14 @@ Import-Package: javax.xml.parsers,
  org.eclipse.equinox.p2.repository.artifact;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.metadata;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.metadata.spi;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.repository.spi;version="2.0.0",
  org.eclipse.equinox.security.storage;version="1.0.0",
  org.eclipse.osgi.service.datalocation;version="1.0.0",
  org.eclipse.osgi.service.debug;version="1.1.0",
  org.eclipse.osgi.service.security;version="1.0.0",
  org.eclipse.osgi.signedcontent;version="1.0.0",
  org.eclipse.osgi.util;version="1.0.0",
- org.osgi.framework;version="1.3.0",
+ org.osgi.framework;version="1.6.0",
  org.osgi.service.prefs,
  org.osgi.util.tracker;version="1.4.0",
  org.xml.sax
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.engine/build.properties
index c83017c..31abc78 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.engine/pom.xml
index f3cd327..a51bfb5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.engine</artifactId>
-  <version>2.0.0.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ActionManager.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ActionManager.java
index acbca84..5a9652e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ActionManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ActionManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/BeginOperationEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/BeginOperationEvent.java
index e22bff6..e7cc328 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/BeginOperationEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/BeginOperationEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/CommitOperationEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/CommitOperationEvent.java
index deb496f..39297a4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/CommitOperationEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/CommitOperationEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/DebugHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/DebugHelper.java
index 437b200..c6283ac 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/DebugHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/DebugHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Engine.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Engine.java
index 9536fdb..0b28237 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Engine.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Engine.java
@@ -51,6 +51,8 @@ public class Engine implements IEngine {
 	public IStatus perform(IProfile iprofile, IPhaseSet phases, Operand[] operands, ProvisioningContext context, IProgressMonitor monitor) {
 		PhaseSet phaseSet = (PhaseSet) phases;
 		checkArguments(iprofile, phaseSet, operands, context, monitor);
+		if (operands.length == 0)
+			return Status.OK_STATUS;
 		SimpleProfileRegistry profileRegistry = (SimpleProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
 		IProvisioningEventBus eventBus = (IProvisioningEventBus) agent.getService(IProvisioningEventBus.SERVICE_NAME);
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineActivator.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineActivator.java
index 6aa9710..3a96e85 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineActivator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineSession.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineSession.java
index a5ffc73..f61905e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineSession.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/EngineSession.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ISurrogateProfileHandler.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ISurrogateProfileHandler.java
index e3c55af..36eaee3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ISurrogateProfileHandler.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ISurrogateProfileHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitEvent.java
index 2488c5c..8eb5c0c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitOperand.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitOperand.java
index 25fa41b..94f6135 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitOperand.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitOperand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPhase.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPhase.java
index 3cdb6a7..d2ec316 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPhase.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPhase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPropertyOperand.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPropertyOperand.java
index 39d1bb5..44ab76c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPropertyOperand.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstallableUnitPropertyOperand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstructionParser.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstructionParser.java
index ae44c39..f2de40a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstructionParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/InstructionParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Messages.java
index 94b91b9..453670e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,6 +101,9 @@ public class Messages extends NLS {
 	public static String SimpleProfileRegistry_Profile_in_use;
 	public static String SimpleProfileRegistry_Profile_not_locked;
 	public static String SimpleProfileRegistry_Profile_not_locked_due_to_exception;
+	public static String SimpleProfileRegistry_States_Error_Reading_File;
+	public static String SimpleProfileRegistry_States_Error_Writing_File;
+	public static String SimpleProfileRegistry_state_not_found;
 
 	public static String thread_not_owner;
 	public static String touchpoint_commit_error;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/MissingActionsException.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/MissingActionsException.java
index a8ecbd5..cb086da 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/MissingActionsException.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/MissingActionsException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009 IBM Corporation and others.
+ *  Copyright (c) 2009, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Operand.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Operand.java
index 1d0d5a1..0e793b6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Operand.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Operand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ParameterizedProvisioningAction.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ParameterizedProvisioningAction.java
index 0b73128..8437cb3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ParameterizedProvisioningAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ParameterizedProvisioningAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Phase.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Phase.java
index 99046da..14782d5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Phase.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/Phase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PhaseSet.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PhaseSet.java
index 0f7ec63..d4d1c6c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PhaseSet.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PhaseSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepository.java
index 3dfe7df..39c95fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009 IBM Corporation and others.
+ *  Copyright (c) 2009, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@ import java.net.URISyntaxException;
 import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.metadata.repository.Activator;
 import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
 import org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
@@ -213,10 +212,10 @@ public class ProfileMetadataRepository extends AbstractMetadataRepository {
 		switch (code) {
 			case ProvisionException.REPOSITORY_NOT_FOUND :
 				String msg = NLS.bind(Messages.io_NotFound, location);
-				throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_NOT_FOUND, msg, null));
+				throw new ProvisionException(new Status(IStatus.ERROR, EngineActivator.ID, ProvisionException.REPOSITORY_NOT_FOUND, msg, null));
 			case ProvisionException.REPOSITORY_FAILED_READ :
 				msg = NLS.bind(Messages.io_FailedRead, location);
-				throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_NOT_FOUND, msg, null));
+				throw new ProvisionException(new Status(IStatus.ERROR, EngineActivator.ID, ProvisionException.REPOSITORY_NOT_FOUND, msg, null));
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepositoryFactory.java
index 5d4cd16..54825d8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileMetadataRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileParser.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileParser.java
index 0a6beca..c307420 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfilePreferences.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfilePreferences.java
index ea3831b..dceeffa 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfilePreferences.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfilePreferences.java
@@ -142,16 +142,16 @@ public class ProfilePreferences extends EclipsePreferences {
 	 * Returns a reference to the agent service corresponding to the given encoded
 	 * agent location. Never returns null; throws an exception if the agent could not be found.
 	 */
-	private ServiceReference getAgent(String segment) throws BackingStoreException {
+	private ServiceReference<IProvisioningAgent> getAgent(String segment) throws BackingStoreException {
 		String locationString = EncodingUtils.decodeSlashes(segment);
 		Exception failure = null;
 		try {
 			String filter = "(locationURI=" + encodeForFilter(locationString) + ')'; //$NON-NLS-1$
 			final BundleContext context = EngineActivator.getContext();
 			if (context != null) {
-				ServiceReference[] refs = context.getServiceReferences(IProvisioningAgent.SERVICE_NAME, filter);
-				if (refs != null && refs.length > 0)
-					return refs[0];
+				Collection<ServiceReference<IProvisioningAgent>> refs = context.getServiceReferences(IProvisioningAgent.class, filter);
+				if (!refs.isEmpty())
+					return refs.iterator().next();
 			}
 		} catch (InvalidSyntaxException e) {
 			failure = e;
@@ -237,8 +237,8 @@ public class ProfilePreferences extends EclipsePreferences {
 	 */
 	protected void load() throws BackingStoreException {
 		synchronized (((ProfilePreferences) parent).profileLock) {
-			ServiceReference agentRef = getAgent(getSegment(absolutePath(), 1));
-			IProvisioningAgent agent = (IProvisioningAgent) EngineActivator.getContext().getService(agentRef);
+			ServiceReference<IProvisioningAgent> agentRef = getAgent(getSegment(absolutePath(), 1));
+			IProvisioningAgent agent = EngineActivator.getContext().getService(agentRef);
 			IProfileRegistry registry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
 			try {
 				String profileId = getSegment(absolutePath(), 2);
@@ -277,8 +277,8 @@ public class ProfilePreferences extends EclipsePreferences {
 	 */
 	protected synchronized void save() throws BackingStoreException {
 		try {
-			ServiceReference agentRef = getAgent(getSegment(absolutePath(), 1));
-			IProvisioningAgent agent = (IProvisioningAgent) EngineActivator.getContext().getService(agentRef);
+			ServiceReference<IProvisioningAgent> agentRef = getAgent(getSegment(absolutePath(), 1));
+			IProvisioningAgent agent = EngineActivator.getContext().getService(agentRef);
 			if (saveJob == null || saveJob.agent != agent)
 				saveJob = new SaveJob(agent);
 			EngineActivator.getContext().ungetService(agentRef);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileRegistryComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileRegistryComponent.java
index 7c3bb02..ee2f5dc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileRegistryComponent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileRegistryComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileWriter.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileWriter.java
index 6562cf5..9832bc5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileWriter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileXMLConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileXMLConstants.java
index f28e9e0..735427d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileXMLConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileXMLConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PropertyOperand.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PropertyOperand.java
index 8125ee5..55593dc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PropertyOperand.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/PropertyOperand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProvisioningPlan.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProvisioningPlan.java
index 72f1ade..3ad54c1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProvisioningPlan.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProvisioningPlan.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/RollbackOperationEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/RollbackOperationEvent.java
index 50ef2e1..e2683f0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/RollbackOperationEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/RollbackOperationEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java
index 57aabb9..df8f238 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2011 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -37,6 +37,7 @@ import org.xml.sax.SAXException;
 public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 
 	private static final String PROFILE_REGISTRY = "profile registry"; //$NON-NLS-1$
+	private static final String PROFILE_PROPERTIES_FILE = "state.properties"; //$NON-NLS-1$
 
 	private static final String PROFILE_EXT = ".profile"; //$NON-NLS-1$
 	private static final String PROFILE_GZ_EXT = ".profile.gz"; //$NON-NLS-1$
@@ -61,6 +62,8 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 	ISurrogateProfileHandler surrogateProfileHandler;
 
 	private IProvisioningEventBus eventBus;
+	// cache of last accessed profile state properties
+	private ProfileStateProperties lastAccessedProperties;
 
 	public SimpleProfileRegistry(IProvisioningAgent agent, File registryDirectory) {
 		this(agent, registryDirectory, new SurrogateProfileHandler(agent), true);
@@ -84,10 +87,10 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 		final BundleContext context = EngineActivator.getContext();
 		if (context == null)
 			return;
-		ServiceReference ref = context.getServiceReference(IAgentLocation.SERVICE_NAME);
+		ServiceReference<IAgentLocation> ref = context.getServiceReference(IAgentLocation.class);
 		if (ref == null)
 			return;
-		IAgentLocation location = (IAgentLocation) context.getService(ref);
+		IAgentLocation location = context.getService(ref);
 		if (location == null)
 			return;
 		if (store.equals(getDefaultRegistryDirectory(location))) {
@@ -178,7 +181,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 				return profile;
 		}
 
-		File profileDirectory = new File(store, escape(id) + PROFILE_EXT);
+		File profileDirectory = getProfileFolder(id);
 		if (!profileDirectory.isDirectory())
 			return null;
 
@@ -205,7 +208,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 		if (id == null)
 			return new long[0];
 
-		File profileDirectory = new File(store, escape(id) + PROFILE_EXT);
+		File profileDirectory = getProfileFolder(id);
 		if (!profileDirectory.isDirectory())
 			return new long[0];
 
@@ -369,6 +372,8 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 		}
 		profileMap.remove(profileId);
 		profileLocks.remove(profileId);
+		// deleting the profile removes the folder and subsequently all
+		// the profile state properties as well since they are stored in a file in the folder.
 		deleteProfile(profileId);
 		broadcastChangeEvent(profileId, IProfileEvent.REMOVED);
 	}
@@ -383,7 +388,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 				throw new ProvisionException(Messages.SimpleProfileRegistry_CannotRemoveCurrentSnapshot);
 		}
 
-		File profileDirectory = new File(store, escape(id) + PROFILE_EXT);
+		File profileDirectory = getProfileFolder(id);
 		if (!profileDirectory.isDirectory())
 			return;
 
@@ -394,6 +399,10 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 				return;
 		}
 		FileUtils.deleteAll(profileFile);
+		// Ignore the return value here. If there was a problem removing the profile state
+		// properties we don't want to fail the whole operation since the profile state itself 
+		// was removed successfully
+		removeProfileStateProperties(id, timestamp, null);
 	}
 
 	private void broadcastChangeEvent(String profileId, int reason) {
@@ -415,6 +424,10 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 				return pathname.getName().endsWith(PROFILE_EXT) && pathname.isDirectory();
 			}
 		});
+		// protect against NPE
+		if (profileDirectories == null) {
+			parser.getProfileMap();
+		}
 		for (int i = 0; i < profileDirectories.length; i++) {
 			String directoryName = profileDirectories[i].getName();
 			String profileId = unescape(directoryName.substring(0, directoryName.lastIndexOf(PROFILE_EXT)));
@@ -455,6 +468,9 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 				return (pathname.getName().endsWith(PROFILE_GZ_EXT) || pathname.getName().endsWith(PROFILE_EXT)) && !pathname.isDirectory();
 			}
 		});
+		// protect against NPE
+		if (profileFiles == null)
+			return null;
 		for (int i = 0; i < profileFiles.length; i++) {
 			File profileFile = profileFiles[i];
 			String fileName = profileFile.getName();
@@ -472,7 +488,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 	}
 
 	private void saveProfile(Profile profile) {
-		File profileDirectory = new File(store, escape(profile.getProfileId()) + PROFILE_EXT);
+		File profileDirectory = getProfileFolder(profile.getProfileId());
 		profileDirectory.mkdir();
 
 		long previousTimestamp = profile.getTimestamp();
@@ -528,7 +544,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 	}
 
 	private void deleteProfile(String profileId) {
-		File profileDirectory = new File(store, escape(profileId) + PROFILE_EXT);
+		File profileDirectory = getProfileFolder(profileId);
 		FileUtils.deleteAll(profileDirectory);
 	}
 
@@ -752,7 +768,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 	private boolean internalLockProfile(IProfile profile) {
 		ProfileLock lock = profileLocks.get(profile.getProfileId());
 		if (lock == null) {
-			lock = new ProfileLock(this, new File(store, escape(profile.getProfileId()) + PROFILE_EXT));
+			lock = new ProfileLock(this, getProfileFolder(profile.getProfileId()));
 			profileLocks.put(profile.getProfileId(), lock);
 		}
 		return lock.lock();
@@ -794,7 +810,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 			if (getProfile(id) != null)
 				return true;
 
-		File profileDirectory = new File(store, escape(id) + PROFILE_EXT);
+		File profileDirectory = getProfileFolder(id);
 		if (!profileDirectory.isDirectory())
 			return false;
 		File[] profileFiles = profileDirectory.listFiles(new FileFilter() {
@@ -831,7 +847,7 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 	public synchronized File getProfileDataDirectory(String id) {
 		if (SELF.equals(id))
 			id = self;
-		File profileDirectory = new File(store, escape(id) + PROFILE_EXT);
+		File profileDirectory = getProfileFolder(id);
 		File profileDataArea = new File(profileDirectory, DATA_EXT);
 		if (!profileDataArea.isDirectory() && !profileDataArea.mkdir())
 			throw new IllegalStateException("Could not create profile data area " + profileDataArea.getAbsolutePath() + "for: " + id); //$NON-NLS-1$ //$NON-NLS-2$
@@ -856,4 +872,283 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
 			//ignore
 		}
 	}
+
+	// Class representing a particular instance of a profile's state properties. 
+	// Can be used for caching.
+	class ProfileStateProperties {
+		private String id;
+		private File file;
+		private long timestamp;
+		private Properties properties;
+
+		ProfileStateProperties(String id, File file, Properties properties) {
+			this.id = id;
+			this.file = file;
+			this.properties = properties;
+			this.timestamp = file.lastModified();
+		}
+
+		// return true if the cached timestamp is the same as the one on disk
+		boolean isCurrent() {
+			return file.lastModified() == timestamp;
+		}
+
+		String getId() {
+			return id;
+		}
+
+		Properties getProperties() {
+			return this.properties;
+		}
+	}
+
+	/*
+	 * Return the folder on disk associated with the profile with the given identifier.
+	 */
+	private File getProfileFolder(String id) {
+		return new File(store, escape(id) + PROFILE_EXT);
+	}
+
+	/*
+	 * Read and return the state properties for the profile with the given id.
+	 * If one does not exist, then return an empty Properties file.
+	 * If there were problems reading the file then return throw an exception.
+	 */
+	private Properties readStateProperties(String id) throws ProvisionException {
+		if (SELF.equals(id))
+			id = self;
+
+		// if the last cached value is the one we are interested in and up-to-date 
+		// then don't bother reading from disk
+		if (lastAccessedProperties != null && id.equals(lastAccessedProperties.getId()) && lastAccessedProperties.isCurrent())
+			return lastAccessedProperties.getProperties();
+
+		File profileDirectory = getProfileFolder(id);
+		if (!profileDirectory.isDirectory())
+			throw new ProvisionException(new Status(IStatus.ERROR, EngineActivator.ID, NLS.bind(Messages.SimpleProfileRegistry_Bad_profile_location, profileDirectory.getPath())));
+
+		File file = new File(profileDirectory, PROFILE_PROPERTIES_FILE);
+		Properties properties = new Properties();
+		if (!file.exists())
+			return properties;
+		InputStream input = null;
+		try {
+			input = new BufferedInputStream(new FileInputStream(file));
+			properties.load(input);
+		} catch (IOException e) {
+			throw new ProvisionException(new Status(IStatus.ERROR, EngineActivator.ID, Messages.SimpleProfileRegistry_States_Error_Reading_File, e));
+		} finally {
+			if (input != null)
+				try {
+					input.close();
+				} catch (IOException e) {
+					// Ignore
+				}
+		}
+
+		//cache the value before we return
+		lastAccessedProperties = new ProfileStateProperties(id, file, properties);
+		return properties;
+	}
+
+	/*
+	 * Write the given state properties to disk for the specified profile.
+	 */
+	private IStatus writeStateProperties(String id, Properties properties) {
+		if (SELF.equals(id))
+			id = self;
+
+		File profileDirectory = getProfileFolder(id);
+		File file = new File(profileDirectory, PROFILE_PROPERTIES_FILE);
+		OutputStream output = null;
+		Properties prunedProperties = properties;
+		try {
+			output = new BufferedOutputStream(new FileOutputStream(file));
+			prunedProperties = pruneStateProperties(id, properties);
+			prunedProperties.store(output, null);
+			output.flush();
+		} catch (IOException e) {
+			return new Status(IStatus.ERROR, EngineActivator.ID, Messages.SimpleProfileRegistry_States_Error_Writing_File, e);
+		} finally {
+			try {
+				if (output != null)
+					output.close();
+			} catch (IOException e) {
+				// ignore
+			}
+		}
+		// cache the value
+		lastAccessedProperties = new ProfileStateProperties(id, file, prunedProperties);
+		return Status.OK_STATUS;
+	}
+
+	// Only write state properties for state timestamps that still exist
+	// TODO: Do we want to expose this method as API?
+	// TODO: Do we want to run this method on every write or just after specific elapsed times since the last Prune?
+	private Properties pruneStateProperties(String id, Properties properties) {
+		Properties result = new Properties();
+		long[] timestamps = listProfileTimestamps(id);
+		HashSet<String> timestampsSet = new HashSet<String>(timestamps.length);
+		for (int i = 0; i < timestamps.length; i++) {
+			timestampsSet.add(String.valueOf(timestamps[i]));
+		}
+
+		Enumeration<Object> keys = properties.keys();
+		while (keys.hasMoreElements()) {
+			String key = (String) keys.nextElement();
+			int index = key.indexOf('.');
+			if (index > -1) {
+				String timestamp = key.substring(0, index);
+				if (timestampsSet.contains(timestamp)) {
+					result.put(key, properties.get(key));
+				}
+			}
+		}
+		return result;
+	}
+
+	/*
+	 * Ensure a profile with the given identifier has a state with the specified timestamp. Return
+	 * a status object indicating success or failure.
+	 */
+	private IStatus validateState(String id, long timestamp) {
+		long[] states = listProfileTimestamps(id);
+		for (long ts : states)
+			if (ts == timestamp)
+				return Status.OK_STATUS;
+		return new Status(IStatus.ERROR, EngineActivator.ID, (NLS.bind(Messages.SimpleProfileRegistry_state_not_found, timestamp, id)));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.IProfileRegistry#setProfileStateProperties(java.lang.String, long, java.util.Map)
+	 */
+	public IStatus setProfileStateProperties(String id, long timestamp, Map<String, String> propertiesToAdd) {
+		if (id == null || propertiesToAdd == null)
+			throw new NullPointerException();
+		IStatus result = validateState(id, timestamp);
+		if (!result.isOK())
+			return result;
+		Profile internalProfile = internalGetProfile(id);
+		lockProfile(internalProfile);
+		try {
+			Properties properties = readStateProperties(id);
+			for (Map.Entry<String, String> entry : propertiesToAdd.entrySet()) {
+				// property key format is timestamp.key
+				properties.put(timestamp + "." + entry.getKey(), entry.getValue()); //$NON-NLS-1$
+			}
+			writeStateProperties(id, properties);
+		} catch (ProvisionException e) {
+			return e.getStatus();
+		} finally {
+			unlockProfile(internalProfile);
+		}
+		return Status.OK_STATUS;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.IProfileRegistry#setProfileStateProperty(java.lang.String, long, java.lang.String, java.lang.String)
+	 */
+	public IStatus setProfileStateProperty(String id, long timestamp, String key, String value) {
+		if (id == null || key == null || value == null)
+			throw new NullPointerException();
+		Map<String, String> properties = new HashMap<String, String>();
+		properties.put(key, value);
+		return setProfileStateProperties(id, timestamp, properties);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.IProfileRegistry#getProfileStateProperties(java.lang.String, long)
+	 */
+	public Map<String, String> getProfileStateProperties(String id, long timestamp) {
+		if (id == null)
+			throw new NullPointerException();
+
+		Map<String, String> result = new HashMap<String, String>();
+		String timestampString = String.valueOf(timestamp);
+		int keyOffset = timestampString.length() + 1;
+		Profile internalProfile = internalGetProfile(id);
+		lockProfile(internalProfile);
+		try {
+			Properties properties = readStateProperties(id);
+			Iterator<Object> keys = properties.keySet().iterator();
+			while (keys.hasNext()) {
+				String key = (String) keys.next();
+				if (key.indexOf(timestampString) == 0)
+					result.put(key.substring(keyOffset), properties.getProperty(key));
+			}
+		} catch (ProvisionException e) {
+			LogHelper.log(e);
+		} finally {
+			unlockProfile(internalProfile);
+		}
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.IProfileRegistry#getProfileStateProperties(java.lang.String, java.lang.String)
+	 */
+	public Map<String, String> getProfileStateProperties(String id, String userKey) {
+		if (id == null || userKey == null)
+			throw new NullPointerException();
+
+		Map<String, String> result = new HashMap<String, String>();
+		Profile internalProfile = internalGetProfile(id);
+		lockProfile(internalProfile);
+		try {
+			Properties properties = readStateProperties(id);
+			Iterator<Object> keys = properties.keySet().iterator();
+			while (keys.hasNext()) {
+				// property key format is timestamp.key
+				String key = (String) keys.next();
+				int index = key.indexOf('.');
+				if (index != -1 && index + 1 != key.length() && key.substring(index + 1).equals(userKey)) {
+					result.put(key.substring(0, index), properties.getProperty(key));
+				}
+			}
+		} catch (ProvisionException e) {
+			LogHelper.log(e);
+		} finally {
+			unlockProfile(internalProfile);
+		}
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.IProfileRegistry#removeProfileStateProperties(java.lang.String, long, java.util.Collection)
+	 */
+	public IStatus removeProfileStateProperties(String id, long timestamp, Collection<String> keys) {
+		if (id == null)
+			throw new NullPointerException();
+		// return if there is no work to do
+		if (keys != null && keys.size() == 0)
+			return Status.OK_STATUS;
+
+		Profile internalProfile = internalGetProfile(id);
+		lockProfile(internalProfile);
+		try {
+			Properties properties = readStateProperties(id);
+			String timestampString = String.valueOf(timestamp);
+			if (keys == null) {
+				// remove all keys
+				for (Iterator<Object> already = properties.keySet().iterator(); already.hasNext();) {
+					String key = (String) already.next();
+					// property key is timestamp.key
+					if (key.indexOf(timestampString) == 0)
+						already.remove();
+				}
+			} else {
+				for (String key : keys) {
+					// property key format is timestamp.key
+					if (key != null)
+						properties.remove(timestampString + "." + key); //$NON-NLS-1$
+				}
+			}
+			writeStateProperties(id, properties);
+		} catch (ProvisionException e) {
+			return e.getStatus();
+		} finally {
+			unlockProfile(internalProfile);
+		}
+		return Status.OK_STATUS;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TouchpointManager.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TouchpointManager.java
index fb5e4df..f62f6e1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TouchpointManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TouchpointManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TransactionEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TransactionEvent.java
index 63ba080..65e1ce8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TransactionEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/TransactionEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/messages.properties
index 13784b3..b8e98c0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -41,6 +41,9 @@ SimpleProfileRegistry_Profile_not_locked=The profile is not locked.
 SimpleProfileRegistry_Profile_not_locked_due_to_exception=Profile not locked due to exception: {0}
 SimpleProfileRegistry_Bad_profile_location=Bad profile location: {0}
 SimpleProfileRegistry_CannotRemoveCurrentSnapshot=Cannot remove the current profile timestamp
+SimpleProfileRegistry_States_Error_Reading_File=Error reading profile state properties.
+SimpleProfileRegistry_States_Error_Writing_File=Error writing profile state properties.
+SimpleProfileRegistry_state_not_found=State {0} for profile {1} not found.
 profile_does_not_exist=Profile to be updated does not exist: {0}.
 profile_not_current=Profile {0} is not current. Expected timestamp {1} but was {2}.
 profile_changed=Profile {0} is marked as changed.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CertificateChecker.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CertificateChecker.java
index 6607b5c..397cd6d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CertificateChecker.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CertificateChecker.java
@@ -43,8 +43,8 @@ public class CertificateChecker {
 
 	public IStatus start() {
 		final BundleContext context = EngineActivator.getContext();
-		ServiceReference contentFactoryRef = context.getServiceReference(SignedContentFactory.class.getName());
-		SignedContentFactory verifierFactory = (SignedContentFactory) context.getService(contentFactoryRef);
+		ServiceReference<SignedContentFactory> contentFactoryRef = context.getServiceReference(SignedContentFactory.class);
+		SignedContentFactory verifierFactory = context.getService(contentFactoryRef);
 		try {
 			return checkCertificates(verifierFactory);
 		} finally {
@@ -146,7 +146,7 @@ public class CertificateChecker {
 		if (trustedCertificates == null)
 			// I'm pretty sure this would be a bug; trustedCertificates should never be null here.
 			return new Status(IStatus.INFO, EngineActivator.ID, Messages.CertificateChecker_CertificateRejected);
-		ServiceTracker trustEngineTracker = new ServiceTracker(EngineActivator.getContext(), TrustEngine.class.getName(), null);
+		ServiceTracker<TrustEngine, TrustEngine> trustEngineTracker = new ServiceTracker<TrustEngine, TrustEngine>(EngineActivator.getContext(), TrustEngine.class, null);
 		trustEngineTracker.open();
 		Object[] trustEngines = trustEngineTracker.getServices();
 		try {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CheckTrust.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CheckTrust.java
index 513c0f1..a72af6a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CheckTrust.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/CheckTrust.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Collect.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Collect.java
index af60604..92ad013 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Collect.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Collect.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Configure.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Configure.java
index 165f3af..7d4a834 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Configure.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Configure.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Install.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Install.java
index 9fe045e..60b6c2c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Install.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Install.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Property.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Property.java
index ba69b2c..f1b27fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Property.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Property.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Sizing.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Sizing.java
index 792f04c..be30a8f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Sizing.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Sizing.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Unconfigure.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Unconfigure.java
index d6181ab..8edd542 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Unconfigure.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Unconfigure.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Uninstall.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Uninstall.java
index f0b7adc..5d7c393 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Uninstall.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/phases/Uninstall.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IEngine.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IEngine.java
index fd626d3..9620d7a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IEngine.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Band XI International, LLC and others.
+ * Copyright (c) 2008, 2010 Band XI International, LLC and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IPhaseSet.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IPhaseSet.java
index 0d315e1..46e2b38 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IPhaseSet.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IPhaseSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfile.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfile.java
index aded178..79655db 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfile.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2010 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -101,7 +101,7 @@ public interface IProfile extends IQueryable<IInstallableUnit> {
 	 * May be empty or <code>null</code>, and generally will be for non-top level
 	 * install contexts.
 	 */
-	public static final String PROP_NAME = "org.eclipse.equinox.p2.name"; //$NON-NLS-1$
+	public static final String PROP_NAME = "org.eclipse.equinox.p2.name"; //$NON-NLS-1$	
 	/**
 	 * Profile property constant indicating the list of environments
 	 * (e.g., OS, WS, ...) in which a profile can operate. The value of the property
@@ -131,6 +131,21 @@ public interface IProfile extends IQueryable<IInstallableUnit> {
 	public static final String PROP_INSTALL_FEATURES = "org.eclipse.update.install.features"; //$NON-NLS-1$
 
 	/**
+	  * Profile state meta property key.  Can be used to mark a profile state that should be hidden.
+	  * The value of the property is not relevant as the property's existence is enough.  Although <code>true</code>
+	  * would be a typical value.
+	  * 
+	  * @since 2.1
+	  */
+	public static final String STATE_PROP_HIDDEN = "org.eclipse.equinox.p2.state.hidden"; //$NON-NLS-1$
+
+	/**
+	 * Profile state metadata property key used to associate with a profile state a user readable name.
+	 * @since 2.1
+	 */
+	public static final String STATE_PROP_TAG = "org.eclipse.equinox.p2.state.tag"; //$NON-NLS-1$
+
+	/**
 	 * Returns the provisioning agent that manages this profile
 	 * @return A provisioning agent.
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfileRegistry.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfileRegistry.java
index 3dfaa6e..381a61e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfileRegistry.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/IProfileRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.equinox.p2.engine;
 
+import java.util.Collection;
 import java.util.Map;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.equinox.p2.core.ProvisionException;
 
 /**
@@ -104,7 +106,9 @@ public interface IProfileRegistry {
 	/**
 	 * Remove the given profile snapshot from this profile registry. This method has no effect
 	 * if this registry does not contain a profile with the given id and timestamp.
-	 * The current profile cannot be removed using this method.
+	 * The current profile cannot be removed using this method. When a particular profile state
+	 * is removed from the registry, the corresponding profile state properties for that
+	 * particular state are also removed.
 	 * 
 	 * @param id the profile to remove
 	 * @param timestamp the timestamp of the profile to remove 
@@ -114,7 +118,8 @@ public interface IProfileRegistry {
 
 	/**
 	 * Remove the given profile from this profile registry.  This method has no effect
-	 * if this registry does not contain a profile with the given id.
+	 * if this registry does not contain a profile with the given id. When a profile is removed
+	 * from the registry, all of its associated profile state properties are removed as well.
 	 * 
 	 * @param id the profile to remove
 	 */
@@ -127,4 +132,79 @@ public interface IProfileRegistry {
 	 * @return boolean  true if the profile is current; false otherwise.
 	 */
 	public boolean isCurrent(IProfile profile);
+
+	/**
+	 * Set properties on a specific profile state.  Overwrite existing properties if present.
+	 * 
+	 * @param id the identifier of the profile
+	 * @param timestamp the timestamp of the profile
+	 * @param properties the properties to set on the profile
+	 * @return status object indicating success or failure
+	 * @throws NullPointerException if either id or properties are <code>null</code> 
+	 * @since 2.1
+	 */
+	public IStatus setProfileStateProperties(String id, long timestamp, Map<String, String> properties);
+
+	/**
+	 * Set a specific property on a specific profile state.  Overwrite existing properties if present.
+	 * <p>
+	 * Use of this method is discouraged if multiple properties will be set on the same state since
+	 * the implementation of this method may access the file-system with each call.  Callers should use 
+	 * {@link #setProfileStateProperties(String, long, Map)} instead. 
+	 * </p>
+	 * 
+	 * @param id the profile identifier
+	 * @param timestamp the timestamp of the profile
+	 * @param key the property key to set
+	 * @param value the property value to set
+	 * @return status object indicating success or failure
+	 * @throws NullPointerException if any of id, key or value is <code>null</code>
+	 * @since 2.1
+	 */
+	public IStatus setProfileStateProperty(String id, long timestamp, String key, String value);
+
+	/**
+	 * Return all properties for a particular profile state. Both the key and the values are <code>String</code>.
+	 * Return an empty map if there was a problem accessing the properties.
+	 * <p>
+	 * There is no guarantee that all state timestamps returned will still exist in the registry 
+	 * since the user could delete profile states from the file system.
+	 * </p>
+	 * @param id the profile identifier
+	 * @param timestamp the profile timestamp
+	 * @return a property map of key value pairs.  An empty map if the profile state has no properties or does not exist
+	 * @throws NullPointerException if profile id is <code>null</code>.
+	 * @since 2.1
+	 */
+	public Map<String, String> getProfileStateProperties(String id, long timestamp);
+
+	/**
+	 * Return a map of profile timestamps to values for all profile states that contain the given property key.
+	 * Both the key and value are of type <code>String</code>.
+	 * Return an empty map if there was a problem accessing the properties.
+	 * <p>
+	 * There is no guarantee that all state timestamps returned will still exist in the registry 
+	 * since the user could delete profile states from the file system.
+	 * </p>
+	 * @param id the profile identifier
+	 * @param key the property key
+	 * @return A map of timestamp and values for the given key.  An empty map if no states define the given key.
+	 * @throws NullPointerException if the profile id or key is <code>null</code>.
+	 * @since 2.1
+	 */
+	public Map<String, String> getProfileStateProperties(String id, String key);
+
+	/**
+	 * Remove all properties with matching keys from the given profile state.  Non-existent keys are
+	 * ignored.  If the state does not exist the method performs a no-op and returns normally. If the keys
+	 * parameter is <code>null</code> then remove all properties from the profile state.
+	 * 
+	 * @param id the profile identifier
+	 * @param timestamp the profile timestamp
+	 * @param keys the property keys to remove, or <code>null</code>
+	 * @return a status object indicating success or failure
+	 * @throws NullPointerException if the profile id is <code>null</code>.
+	 * @since 2.1
+	 */
+	public IStatus removeProfileStateProperties(String id, long timestamp, Collection<String> keys);
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/PhaseSetFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/PhaseSetFactory.java
index 75d974c..834f80d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/PhaseSetFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/PhaseSetFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java
index ea11ce4..55dad13 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -369,22 +369,4 @@ public class ProvisioningContext {
 		buffer.append(", properties=" + getProperties() + "}"); //$NON-NLS-1$ //$NON-NLS-2$
 		return buffer.toString();
 	}
-
-	/**
-	 * Return the array of repository locations for artifact repositories.
-	 * @return an array of repository locations.  This is never <code>null</code>.
-	 *
-	 * @deprecated This method will be removed in the next release.  See https://bugs.eclipse.org/bugs/show_bug.cgi?id=305086
-	 * @noreference This method will be removed in the next release.
-	 * 
-	 * @see #getArtifactRepositories()
-	 * @see #getArtifactDescriptors(IProgressMonitor)
-	 * @see #getArtifactKeys(IProgressMonitor)
-	 */
-	public URI[] getArtifactRepositories() {
-		IArtifactRepositoryManager repoManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
-		URI[] repositories = artifactRepositories == null ? repoManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL) : artifactRepositories;
-		Arrays.sort(repositories, LOCAL_FIRST_COMPARATOR);
-		return repositories;
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Memento.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Memento.java
index 3b0ac09..501f04f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Memento.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Memento.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@ import java.util.*;
  * @since 2.0
  */
 public final class Memento {
-	private static final long serialVersionUID = 3257399736837461585L;
 	private static final Collection<Class<?>> simples = Arrays.<Class<?>> asList(String.class, Integer.class, Long.class, Float.class, Double.class, Byte.class, Short.class, Character.class, Boolean.class);
 	private static final Collection<Class<?>> simpleArrays = Arrays.<Class<?>> asList(String[].class, Integer[].class, Long[].class, Float[].class, Double[].class, Byte[].class, Short[].class, Character[].class, Boolean[].class);
 	private static final Collection<Class<?>> primitiveArrays = Arrays.<Class<?>> asList(long[].class, int[].class, short[].class, char[].class, byte[].class, double[].class, float[].class, boolean[].class);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/ProvisioningAction.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/ProvisioningAction.java
index 2154abc..ef88e2a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/ProvisioningAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/ProvisioningAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Touchpoint.java b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Touchpoint.java
index dc2258d..47da6df 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Touchpoint.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/spi/Touchpoint.java
@@ -113,10 +113,10 @@ public abstract class Touchpoint {
 	}
 
 	/**
-	 * This method is called at the beginning of an engine operation before any
-	 * phases have been executed. This is an opportunity to perform precondition
-	 * checks against the profile, or initialize any data structures common to an
-	 * entire execution of the engine.
+	 * This method is called at the end of an engine operation after all phases have 
+	 * been executed but prior to the operation being formally committed/persisted. This is an opportunity to perform any final checks
+	 * against the profile, or log any information that might be needed to recover if the operation fails to complete in a regular
+	 * manner.
 	 * <p>
 	 * The result of this method can be used to abort execution of the entire engine
 	 * operation, by using a severity of {@link IStatus#ERROR} or {@link IStatus#CANCEL}.
@@ -133,9 +133,9 @@ public abstract class Touchpoint {
 
 	/**
 	 * This method is called at the end of an engine operation after all phases have 
-	 * been executed. When this method is invoked, it signals that the engine
-	 * operation was a complete success, and the touchpoint should commit
-	 * or persistent any changes it has made to some persistent storage (for
+	 * been executed and after the touchpoint has had prepare called. When this method is invoked,
+	 * it signals that the engine operation was a complete success, and the touchpoint should commit
+	 * or persist any changes it has made to some persistent storage (for
 	 * example the file system).
 	 * <p>
 	 * The result of this method can be used to report on the success or failure
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF
index 84f75ec..b6b2f1c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/META-INF/MANIFEST.MF
@@ -2,11 +2,11 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.extensionlocation;singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.100.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.extensionlocation.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.equinox.internal.p2.extensionlocation;x-friends:="org.eclipse.equinox.p2.reconciler.dropins"
+Export-Package: org.eclipse.equinox.internal.p2.extensionlocation;x-friends:="org.eclipse.equinox.p2.reconciler.dropins,org.eclipse.equinox.p2.ui.importexport"
 Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.equinox.p2.metadata
 Bundle-RequiredExecutionEnvironment: J2SE-1.5,
@@ -22,6 +22,7 @@ Import-Package: org.eclipse.equinox.internal.p2.artifact.repository.simple,
  org.eclipse.equinox.internal.provisional.p2.directorywatcher,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.engine;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.publisher,
  org.eclipse.equinox.p2.publisher.eclipse,
  org.eclipse.equinox.p2.repository;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.artifact;version="[2.0.0,3.0.0)",
@@ -32,4 +33,4 @@ Import-Package: org.eclipse.equinox.internal.p2.artifact.repository.simple,
  org.eclipse.osgi.service.datalocation;version="1.1.0",
  org.eclipse.osgi.service.resolver;version="1.2.0",
  org.eclipse.osgi.util,
- org.osgi.framework
+ org.osgi.framework;version="1.6.0"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/build.properties
index 6684475..312202b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2008 IBM Corporation and others.
+#  Copyright (c) 2008, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/plugin.properties
index 1f6e623..9570547 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/plugin.properties
@@ -8,5 +8,5 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName = Extension Location Repository Support
+pluginName = Equinox Provisioning Extension Location Repository Support
 providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/pom.xml
index 0f9c3a1..2f15d23 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.extensionlocation</artifactId>
-  <version>1.2.0.qualifier</version>
+  <version>1.2.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/Activator.java
index c05ff68..daa18e9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,10 +69,10 @@ public class Activator implements BundleActivator {
 	}
 
 	public static IProvisioningAgent getCurrentAgent() {
-		ServiceReference reference = bundleContext.getServiceReference(IProvisioningAgent.SERVICE_NAME);
+		ServiceReference<IProvisioningAgent> reference = bundleContext.getServiceReference(IProvisioningAgent.class);
 		if (reference == null)
 			return null;
-		return (IProvisioningAgent) bundleContext.getService(reference);
+		return bundleContext.getService(reference);
 	}
 
 	public static IFileArtifactRepository getBundlePoolRepository() {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/BundlePoolFilteredListener.java b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/BundlePoolFilteredListener.java
index c109aaf..7b818a4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/BundlePoolFilteredListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/BundlePoolFilteredListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
index 984f563..ef67932 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -147,26 +147,69 @@ public class ExtensionLocationArtifactRepository extends AbstractRepository<IArt
 		return plugins.isDirectory() || features.isDirectory();
 	}
 
+	public void addDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Deprecated
 	public void addDescriptor(IArtifactDescriptor descriptor) {
 		throw new UnsupportedOperationException();
 	}
 
+	public void addDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Deprecated
 	public void addDescriptors(IArtifactDescriptor[] descriptors) {
 		throw new UnsupportedOperationException();
 	}
 
+	public void removeAll(IProgressMonitor monitor) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Deprecated
 	public void removeAll() {
 		throw new UnsupportedOperationException();
 	}
 
+	public void removeDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Deprecated
 	public void removeDescriptor(IArtifactDescriptor descriptor) {
 		throw new UnsupportedOperationException();
 	}
 
+	public void removeDescriptor(IArtifactKey key, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Deprecated
 	public void removeDescriptor(IArtifactKey key) {
 		throw new UnsupportedOperationException();
 	}
 
+	public void removeDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Deprecated
+	public void removeDescriptors(IArtifactDescriptor[] descriptors) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void removeDescriptors(IArtifactKey[] keys, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Deprecated
+	public void removeDescriptors(IArtifactKey[] keys) {
+		throw new UnsupportedOperationException();
+	}
+
 	public boolean contains(IArtifactDescriptor descriptor) {
 		ensureInitialized();
 		return artifactRepository.contains(descriptor);
@@ -217,18 +260,23 @@ public class ExtensionLocationArtifactRepository extends AbstractRepository<IArt
 		return artifactRepository.getProperties();
 	}
 
-	public String setProperty(String key, String value) {
-		ensureInitialized();
-		String oldValue = artifactRepository.setProperty(key, value);
-		// if the value didn't really change then just return
-		if (oldValue == value || (oldValue != null && oldValue.equals(value)))
-			return oldValue;
-		// we want to re-initialize if we are changing the site policy or plug-in list
-		if (!SiteListener.SITE_LIST.equals(key) && !SiteListener.SITE_POLICY.equals(key))
+	public String setProperty(String key, String value, IProgressMonitor monitor) {
+		try {
+			ensureInitialized();
+			String oldValue = artifactRepository.setProperty(key, value);
+			// if the value didn't really change then just return
+			if (oldValue == value || (oldValue != null && oldValue.equals(value)))
+				return oldValue;
+			// we want to re-initialize if we are changing the site policy or plug-in list
+			if (!SiteListener.SITE_LIST.equals(key) && !SiteListener.SITE_POLICY.equals(key))
+				return oldValue;
+			state = SiteListener.UNINITIALIZED;
+			ensureInitialized();
 			return oldValue;
-		state = SiteListener.UNINITIALIZED;
-		ensureInitialized();
-		return oldValue;
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
 	}
 
 	public IArtifactDescriptor createArtifactDescriptor(IArtifactKey key) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepositoryFactory.java
index 7b3574c..2aec8e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
index 55f0d0c..fc2a09b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2010 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -207,17 +207,22 @@ public class ExtensionLocationMetadataRepository extends AbstractMetadataReposit
 	 * @see org.eclipse.equinox.p2.repository.spi.AbstractRepository#setProperty(java.lang.String, java.lang.String)
 	 */
 	@Override
-	public String setProperty(String key, String value) {
-		ensureInitialized();
-		String oldValue = metadataRepository.setProperty(key, value);
-		// if the value didn't really change then just return
-		if (oldValue == value || (oldValue != null && oldValue.equals(value)))
-			return oldValue;
-		// we want to re-initialize if we are changing the site policy or plug-in list
-		if (!SiteListener.SITE_LIST.equals(key) && !SiteListener.SITE_POLICY.equals(key))
+	public String setProperty(String key, String value, IProgressMonitor monitor) {
+		try {
+			ensureInitialized();
+			String oldValue = metadataRepository.setProperty(key, value);
+			// if the value didn't really change then just return
+			if (oldValue == value || (oldValue != null && oldValue.equals(value)))
+				return oldValue;
+			// we want to re-initialize if we are changing the site policy or plug-in list
+			if (!SiteListener.SITE_LIST.equals(key) && !SiteListener.SITE_POLICY.equals(key))
+				return oldValue;
+			state = SiteListener.UNINITIALIZED;
+			ensureInitialized();
 			return oldValue;
-		state = SiteListener.UNINITIALIZED;
-		ensureInitialized();
-		return oldValue;
+		} finally {
+			if (monitor != null)
+				monitor.done();
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepositoryFactory.java
index e8e02d3..8f00b92 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/META-INF/MANIFEST.MF
index 3206be5..a3d0a05 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.garbagecollector;singleton:=true
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.0.200.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.garbagecollector.GCActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -21,7 +21,7 @@ Import-Package: org.eclipse.core.runtime.preferences,
  org.eclipse.equinox.p2.repository;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.artifact;version="[2.0.0,3.0.0)",
  org.eclipse.osgi.util;version="1.1.0",
- org.osgi.framework;version="1.4.0",
+ org.osgi.framework;version="1.6.0",
  org.osgi.service.prefs;version="1.1.0"
 Service-Component: OSGI-INF/garbagecollector.xml
 Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/build.properties
index 078feef..ac460c8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/plugin.properties
index 923b284..6764056 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/plugin.properties
@@ -8,5 +8,5 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName = Provisioning Garbage Collector
+pluginName = Equinox Provisioning Garbage Collector
 providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/pom.xml
index 0633ff4..468b523 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.garbagecollector</artifactId>
-  <version>1.0.100.qualifier</version>
+  <version>1.0.200.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/Application.java b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/Application.java
index 7569f22..9b8db90 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/Application.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/Application.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,7 +56,7 @@ public class Application implements IApplication {
 	}
 
 	private void initializeServices() throws ProvisionException {
-		IProvisioningAgentProvider provider = (IProvisioningAgentProvider) GCActivator.getService(IProvisioningAgentProvider.SERVICE_NAME);
+		IProvisioningAgentProvider provider = GCActivator.getService(IProvisioningAgentProvider.class);
 		agent = provider.createAgent(null);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GCActivator.java b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GCActivator.java
index 8392aa7..dcdfbd4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GCActivator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GCActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -21,18 +21,18 @@ public class GCActivator implements BundleActivator {
 
 	static BundleContext context;
 
-	static Object getService(String name) {
-		ServiceReference reference = context.getServiceReference(name);
+	static <T> T getService(Class<T> clazz) {
+		ServiceReference<T> reference = context.getServiceReference(clazz);
 		if (reference == null)
 			return null;
-		Object result = context.getService(reference);
+		T result = context.getService(reference);
 		context.ungetService(reference);
 		return result;
 	}
 
 	public void start(BundleContext inContext) throws Exception {
 		GCActivator.context = inContext;
-		DebugOptions debug = (DebugOptions) getService(DebugOptions.class.getName());
+		DebugOptions debug = getService(DebugOptions.class);
 		if (debug != null) {
 			CoreGarbageCollector.setDebugMode(debug.getBooleanOption(DEBUG_STRING, DEFAULT_DEBUG));
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GarbageCollector.java b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GarbageCollector.java
index b8ba3c8..5f983aa 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GarbageCollector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/GarbageCollector.java
@@ -117,7 +117,7 @@ public class GarbageCollector implements SynchronousProvisioningListener, IAgent
 	}
 
 	protected boolean getBooleanPreference(String key, boolean defaultValue) {
-		IPreferencesService prefService = (IPreferencesService) GCActivator.getService(IPreferencesService.class.getName());
+		IPreferencesService prefService = GCActivator.getService(IPreferencesService.class);
 		if (prefService == null)
 			return defaultValue;
 		List<IEclipsePreferences> nodes = new ArrayList<IEclipsePreferences>();
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSet.java b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSet.java
index 453e0d5..ba13ffc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSet.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSetProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSetProvider.java
index f69716c..4c740da 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSetProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.garbagecollector/src/org/eclipse/equinox/internal/p2/garbagecollector/MarkSetProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.installer/META-INF/MANIFEST.MF
index 0097637..c83f1ca 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/META-INF/MANIFEST.MF
@@ -4,10 +4,10 @@ Bundle-SymbolicName: org.eclipse.equinox.p2.installer;singleton:=true
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.installer.InstallerActivator
 Bundle-ActivationPolicy: lazy
-Require-Bundle: org.eclipse.osgi,
+Require-Bundle: org.eclipse.osgi;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.equinox.app,
  org.eclipse.equinox.common,
  org.eclipse.equinox.p2.director;bundle-version="[2.0.0,3.0.0)",
@@ -18,7 +18,8 @@ Require-Bundle: org.eclipse.osgi,
  org.eclipse.equinox.p2.artifact.repository;bundle-version="1.1.0",
  org.eclipse.swt,
  org.eclipse.core.net;bundle-version="1.1.0",
- org.eclipse.equinox.p2.repository;bundle-version="1.0.0"
+ org.eclipse.equinox.p2.repository;bundle-version="2.1.0",
+ org.eclipse.equinox.p2.transport.ecf;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5,
  J2SE-1.4,
  CDC-1.1/Foundation-1.1
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.installer/build.properties
index f85c9d6..34991e4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2007, 2008 IBM Corporation and others.
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.product b/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.product
index 61ab802..aa1cbd5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.product
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.product
@@ -11,9 +11,6 @@
    </aboutInfo>
 
    <configIni use="default">
-      <linux>/org.eclipse.equinox.p2.installer/config.ini</linux>
-      <solaris>/org.eclipse.equinox.p2.installer/config.ini</solaris>
-      <win32>/org.eclipse.equinox.p2.installer/config.ini</win32>
    </configIni>
 
    <launcherArgs>
@@ -43,9 +40,7 @@
       <plugin id="org.eclipse.core.jobs"/>
       <plugin id="org.eclipse.core.net"/>
       <plugin id="org.eclipse.core.net.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.net.linux.x86_64" fragment="true"/>
       <plugin id="org.eclipse.core.net.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.core.net.win32.x86_64" fragment="true"/>
       <plugin id="org.eclipse.core.runtime"/>
       <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
       <plugin id="org.eclipse.ecf"/>
@@ -62,21 +57,9 @@
       <plugin id="org.eclipse.equinox.frameworkadmin"/>
       <plugin id="org.eclipse.equinox.frameworkadmin.equinox"/>
       <plugin id="org.eclipse.equinox.launcher"/>
-      <plugin id="org.eclipse.equinox.launcher.carbon.macosx" fragment="true"/>
       <plugin id="org.eclipse.equinox.launcher.cocoa.macosx" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.cocoa.macosx.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.linux.ppc" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.linux.ppc64" fragment="true"/>
       <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.gtk.solaris.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.aix.ppc" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.hpux.ia64_32" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.motif.solaris.sparc" fragment="true"/>
       <plugin id="org.eclipse.equinox.launcher.win32.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.equinox.launcher.win32.win32.x86_64" fragment="true"/>
       <plugin id="org.eclipse.equinox.p2.artifact.repository"/>
       <plugin id="org.eclipse.equinox.p2.core"/>
       <plugin id="org.eclipse.equinox.p2.director"/>
@@ -90,6 +73,7 @@
       <plugin id="org.eclipse.equinox.p2.repository"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.eclipse"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.natives"/>
+      <plugin id="org.eclipse.equinox.p2.transport.ecf"/>
       <plugin id="org.eclipse.equinox.preferences"/>
       <plugin id="org.eclipse.equinox.registry"/>
       <plugin id="org.eclipse.equinox.security"/>
@@ -102,22 +86,9 @@
       <plugin id="org.eclipse.osgi"/>
       <plugin id="org.eclipse.osgi.services"/>
       <plugin id="org.eclipse.swt"/>
-      <plugin id="org.eclipse.swt.carbon.macosx" fragment="true"/>
       <plugin id="org.eclipse.swt.cocoa.macosx" fragment="true"/>
-      <plugin id="org.eclipse.swt.cocoa.macosx.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.linux.ppc" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.linux.ppc64" fragment="true"/>
       <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.swt.gtk.solaris.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.aix.ppc" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.hpux.ia64_32" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.linux.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.motif.solaris.sparc" fragment="true"/>
-      <plugin id="org.eclipse.swt.photon.qnx.x86" fragment="true"/>
       <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
-      <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>    
       <plugin id="org.sat4j.core"/>
       <plugin id="org.sat4j.pb"/>
    </plugins>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.properties b/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.properties
index a917f01..08d1a7b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/installer.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 eclipse.p2.metadata=http://download.eclipse.org/eclipse/updates/3.5
 eclipse.p2.artifacts=http://download.eclipse.org/eclipse/updates/3.5
 eclipse.p2.flavor=tooling
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.installer/pom.xml
index 929d3c9..aff45ec 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.installer</artifactId>
-  <version>1.0.200.qualifier</version>
+  <version>1.0.300.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallApplication.java
index 5c376a7..11e1936 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallApplication.java
@@ -63,7 +63,7 @@ public class InstallApplication implements IApplication {
 	public static Object getService(BundleContext context, String name) {
 		if (context == null)
 			return null;
-		ServiceReference reference = context.getServiceReference(name);
+		ServiceReference<?> reference = context.getServiceReference(name);
 		if (reference == null)
 			return null;
 		Object result = context.getService(reference);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallDescriptionParser.java b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallDescriptionParser.java
index ed8e946..6fd6c4e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallDescriptionParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallDescriptionParser.java
@@ -19,10 +19,10 @@ import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
-import org.eclipse.equinox.p2.metadata.VersionedId;
+import org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport;
 import org.eclipse.equinox.internal.provisional.p2.installer.InstallDescription;
 import org.eclipse.equinox.p2.metadata.IVersionedId;
+import org.eclipse.equinox.p2.metadata.VersionedId;
 
 /**
  * This class is responsible for loading install descriptions from a stream.
@@ -65,7 +65,7 @@ public class InstallDescriptionParser {
 		}
 		Map<String, String> properties;
 		try {
-			in = RepositoryTransport.getInstance().stream(propsURI, monitor);
+			in = new RepositoryTransport().stream(propsURI, monitor);
 			properties = CollectionUtils.loadProperties(in);
 		} finally {
 			safeClose(in);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallUpdateProductOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallUpdateProductOperation.java
index bb2477c..85cbf20 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallUpdateProductOperation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/InstallUpdateProductOperation.java
@@ -17,7 +17,6 @@ import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
 import org.eclipse.equinox.internal.provisional.p2.director.IDirector;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.provisional.p2.installer.IInstallOperation;
 import org.eclipse.equinox.internal.provisional.p2.installer.InstallDescription;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
@@ -25,6 +24,8 @@ import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.engine.IProfileRegistry;
 import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 import org.eclipse.equinox.p2.query.*;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
 import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
@@ -93,6 +94,10 @@ public class InstallUpdateProductOperation implements IInstallOperation {
 		return profile;
 	}
 
+	IPlanner getPlanner() {
+		return (IPlanner) agent.getService(IPlanner.SERVICE_NAME);
+	}
+
 	/**
 	 * Performs the actual product install or update.
 	 */
@@ -104,7 +109,7 @@ public class InstallUpdateProductOperation implements IInstallOperation {
 		monitor.worked(5);
 
 		IStatus s;
-		ProfileChangeRequest request = new ProfileChangeRequest(p);
+		IProfileChangeRequest request = getPlanner().createChangeRequest(p);
 		if (isInstall) {
 			monitor.setTaskName(NLS.bind(Messages.Op_Installing, installDescription.getProductName()));
 			request.addAll(toInstall);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/Messages.java
index 82334a8..6209f86 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/messages.properties
index b34f850..07f89e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/InstallDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/InstallDialog.java
index d78406a..e9c91c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/InstallDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/InstallDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java
index 91dc773..d03552a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/provisional/p2/installer/InstallDescription.java b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/provisional/p2/installer/InstallDescription.java
index b8adccc..76e45c4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/provisional/p2/installer/InstallDescription.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/provisional/p2/installer/InstallDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/PackStep.java b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/PackStep.java
index 3d51973..bb4cac8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/PackStep.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/PackStep.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2006, 2008 IBM Corporation and others.
+ *  Copyright (c) 2006, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/Utils.java b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/Utils.java
index d6bbc6a..084cf47 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/Utils.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/Utils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/Verifier.java b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/Verifier.java
index 322d779..3904f32 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/Verifier.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/Verifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/VerifyStep.java b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/VerifyStep.java
index f9b1935..059df37 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/VerifyStep.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/equinox/internal/p2/jarprocessor/verifier/VerifyStep.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/internal/provisional/equinox/p2/jarprocessor/JarProcessor.java b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/internal/provisional/equinox/p2/jarprocessor/JarProcessor.java
index b22bc8e..2359156 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/internal/provisional/equinox/p2/jarprocessor/JarProcessor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src/org/eclipse/internal/provisional/equinox/p2/jarprocessor/JarProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src_ant/org/eclipse/equinox/internal/p2/jarprocessor/ant/JarProcessorTask.java b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src_ant/org/eclipse/equinox/internal/p2/jarprocessor/ant/JarProcessorTask.java
index c8cfbfa..91d2d4e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src_ant/org/eclipse/equinox/internal/p2/jarprocessor/ant/JarProcessorTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.jarprocessor/src_ant/org/eclipse/equinox/internal/p2/jarprocessor/ant/JarProcessorTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.classpath b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.classpath
deleted file mode 100644
index ef37949..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" output="bin_ant" path="src_ant"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.externalToolBuilders/Build Metadata Generator Ant Tasks.launch b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.externalToolBuilders/Build Metadata Generator Ant Tasks.launch
deleted file mode 100644
index 4356918..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.externalToolBuilders/Build Metadata Generator Ant Tasks.launch	
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
-<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
-<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?>
<launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1255396900634_19" label="working set" name="working set">
<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.equinox.p2.metadata.generator" type="4"/>
</launchConfigurationWorkingSet>}"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.equinox.p2.metadata.generator/scripts/buildExtraJAR.xml"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.equinox.p2.metadata.generator"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.equinox.p2.metadata.generator/scripts/buildExtraJAR.xml}"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.project b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.project
deleted file mode 100644
index f1612dd..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.project
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.p2.metadata.generator</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>LaunchConfigHandle</key>
-					<value><project>/.externalToolBuilders/Build Metadata Generator Ant Tasks.launch</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index ce58f5e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,353 +0,0 @@
-#Fri Mar 12 16:58:17 EST 2010
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=error
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=error
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=error
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index f873868..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,60 +0,0 @@
-#Thu Jan 24 12:13:40 EST 2008
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_core
-formatter_settings_version=11
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=3
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_variable_declarations_final=true
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_trailing_whitespaces=false
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/CDC-1.0_Foundation-1.0.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/CDC-1.0_Foundation-1.0.profile
deleted file mode 100644
index dde120a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/CDC-1.0_Foundation-1.0.profile
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.microedition.io
-org.osgi.framework.bootdelegation = \
- javax.microedition.io
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1,\
- CDC-1.0/Foundation-1.0
-osgi.java.profile.name = CDC-1.0/Foundation-1.0
-org.eclipse.jdt.core.compiler.compliance=1.3
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/CDC-1.1_Foundation-1.1.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/CDC-1.1_Foundation-1.1.profile
deleted file mode 100644
index 67b20c7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/CDC-1.1_Foundation-1.1.profile
+++ /dev/null
@@ -1,30 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.microedition.io,\
- javax.microedition.pki,\
- javax.security.auth.x500
-org.osgi.framework.bootdelegation = \
- javax.microedition.io,\
- javax.microedition.pki,\
- javax.security.auth.x500
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1,\
- OSGi/Minimum-1.2,\
- CDC-1.0/Foundation-1.0,\
- CDC-1.1/Foundation-1.1
-osgi.java.profile.name = CDC-1.1/Foundation-1.1
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.2.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.2.profile
deleted file mode 100644
index ab98b67..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.2.profile
+++ /dev/null
@@ -1,47 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.accessibility,\
- javax.swing,\
- javax.swing.border,\
- javax.swing.colorchooser,\
- javax.swing.event,\
- javax.swing.filechooser,\
- javax.swing.plaf,\
- javax.swing.plaf.basic,\
- javax.swing.plaf.metal,\
- javax.swing.plaf.multi,\
- javax.swing.table,\
- javax.swing.text,\
- javax.swing.text.html,\
- javax.swing.text.html.parser,\
- javax.swing.text.rtf,\
- javax.swing.tree,\
- javax.swing.undo,\
- org.omg.CORBA,\
- org.omg.CORBA.DynAnyPackage,\
- org.omg.CORBA.ORBPackage,\
- org.omg.CORBA.portable,\
- org.omg.CORBA.TypeCodePackage,\
- org.omg.CosNaming,\
- org.omg.CosNaming.NamingContextPackage
-org.osgi.framework.bootdelegation = \
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- JRE-1.1,\
- J2SE-1.2
-osgi.java.profile.name = J2SE-1.2
-org.eclipse.jdt.core.compiler.compliance=1.2
-org.eclipse.jdt.core.compiler.source=1.2
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.3.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.3.profile
deleted file mode 100644
index da3538e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.3.profile
+++ /dev/null
@@ -1,68 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.accessibility,\
- javax.naming,\
- javax.naming.directory,\
- javax.naming.event,\
- javax.naming.ldap,\
- javax.naming.spi,\
- javax.rmi,\
- javax.rmi.CORBA,\
- javax.sound.midi,\
- javax.sound.midi.spi,\
- javax.sound.sampled,\
- javax.sound.sampled.spi,\
- javax.swing,\
- javax.swing.border,\
- javax.swing.colorchooser,\
- javax.swing.event,\
- javax.swing.filechooser,\
- javax.swing.plaf,\
- javax.swing.plaf.basic,\
- javax.swing.plaf.metal,\
- javax.swing.plaf.multi,\
- javax.swing.table,\
- javax.swing.text,\
- javax.swing.text.html,\
- javax.swing.text.html.parser,\
- javax.swing.text.rtf,\
- javax.swing.tree,\
- javax.swing.undo,\
- javax.transaction,\
- org.omg.CORBA,\
- org.omg.CORBA_2_3,\
- org.omg.CORBA_2_3.portable,\
- org.omg.CORBA.DynAnyPackage,\
- org.omg.CORBA.ORBPackage,\
- org.omg.CORBA.portable,\
- org.omg.CORBA.TypeCodePackage,\
- org.omg.CosNaming,\
- org.omg.CosNaming.NamingContextPackage,\
- org.omg.SendingContext,\
- org.omg.stub.java.rmi
-org.osgi.framework.bootdelegation = \
- javax.*,\
- org.omg.*,\
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1,\
- JRE-1.1,\
- J2SE-1.2,\
- J2SE-1.3
-osgi.java.profile.name = J2SE-1.3
-org.eclipse.jdt.core.compiler.compliance=1.3
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.4.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.4.profile
deleted file mode 100644
index abaa0c3..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.4.profile
+++ /dev/null
@@ -1,129 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.accessibility,\
- javax.crypto,\
- javax.crypto.interfaces,\
- javax.crypto.spec,\
- javax.imageio,\
- javax.imageio.event,\
- javax.imageio.metadata,\
- javax.imageio.plugins.jpeg,\
- javax.imageio.spi,\
- javax.imageio.stream,\
- javax.naming,\
- javax.naming.directory,\
- javax.naming.event,\
- javax.naming.ldap,\
- javax.naming.spi,\
- javax.net,\
- javax.net.ssl,\
- javax.print,\
- javax.print.attribute,\
- javax.print.attribute.standard,\
- javax.print.event,\
- javax.rmi,\
- javax.rmi.CORBA,\
- javax.security.auth,\
- javax.security.auth.callback,\
- javax.security.auth.kerberos,\
- javax.security.auth.login,\
- javax.security.auth.spi,\
- javax.security.auth.x500,\
- javax.security.cert,\
- javax.sound.midi,\
- javax.sound.midi.spi,\
- javax.sound.sampled,\
- javax.sound.sampled.spi,\
- javax.sql,\
- javax.swing,\
- javax.swing.border,\
- javax.swing.colorchooser,\
- javax.swing.event,\
- javax.swing.filechooser,\
- javax.swing.plaf,\
- javax.swing.plaf.basic,\
- javax.swing.plaf.metal,\
- javax.swing.plaf.multi,\
- javax.swing.table,\
- javax.swing.text,\
- javax.swing.text.html,\
- javax.swing.text.html.parser,\
- javax.swing.text.rtf,\
- javax.swing.tree,\
- javax.swing.undo,\
- javax.transaction,\
- javax.transaction.xa,\
- javax.xml.parsers,\
- javax.xml.transform,\
- javax.xml.transform.dom,\
- javax.xml.transform.sax,\
- javax.xml.transform.stream,\
- org.ietf.jgss,\
- org.omg.CORBA,\
- org.omg.CORBA_2_3,\
- org.omg.CORBA_2_3.portable,\
- org.omg.CORBA.DynAnyPackage,\
- org.omg.CORBA.ORBPackage,\
- org.omg.CORBA.portable,\
- org.omg.CORBA.TypeCodePackage,\
- org.omg.CosNaming,\
- org.omg.CosNaming.NamingContextExtPackage,\
- org.omg.CosNaming.NamingContextPackage,\
- org.omg.Dynamic,\
- org.omg.DynamicAny,\
- org.omg.DynamicAny.DynAnyFactoryPackage,\
- org.omg.DynamicAny.DynAnyPackage,\
- org.omg.IOP,\
- org.omg.IOP.CodecFactoryPackage,\
- org.omg.IOP.CodecPackage,\
- org.omg.Messaging,\
- org.omg.PortableInterceptor,\
- org.omg.PortableInterceptor.ORBInitInfoPackage,\
- org.omg.PortableServer,\
- org.omg.PortableServer.CurrentPackage,\
- org.omg.PortableServer.POAManagerPackage,\
- org.omg.PortableServer.POAPackage,\
- org.omg.PortableServer.portable,\
- org.omg.PortableServer.ServantLocatorPackage,\
- org.omg.SendingContext,\
- org.omg.stub.java.rmi,\
- org.w3c.dom,\
- org.w3c.dom.css,\
- org.w3c.dom.events,\
- org.w3c.dom.html,\
- org.w3c.dom.stylesheets,\
- org.w3c.dom.views ,\
- org.xml.sax,\
- org.xml.sax.ext,\
- org.xml.sax.helpers
-org.osgi.framework.bootdelegation = \
- javax.*,\
- org.ietf.jgss,\
- org.omg.*,\
- org.w3c.*,\
- org.xml.*,\
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1,\
- OSGi/Minimum-1.2,\
- JRE-1.1,\
- J2SE-1.2,\
- J2SE-1.3,\
- J2SE-1.4
-osgi.java.profile.name = J2SE-1.4
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.5.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.5.profile
deleted file mode 100644
index e56a929..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/J2SE-1.5.profile
+++ /dev/null
@@ -1,157 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.accessibility,\
- javax.activity,\
- javax.crypto,\
- javax.crypto.interfaces,\
- javax.crypto.spec,\
- javax.imageio,\
- javax.imageio.event,\
- javax.imageio.metadata,\
- javax.imageio.plugins.bmp,\
- javax.imageio.plugins.jpeg,\
- javax.imageio.spi,\
- javax.imageio.stream,\
- javax.management,\
- javax.management.loading,\
- javax.management.modelmbean,\
- javax.management.monitor,\
- javax.management.openmbean,\
- javax.management.relation,\
- javax.management.remote,\
- javax.management.remote.rmi,\
- javax.management.timer,\
- javax.naming,\
- javax.naming.directory,\
- javax.naming.event,\
- javax.naming.ldap,\
- javax.naming.spi,\
- javax.net,\
- javax.net.ssl,\
- javax.print,\
- javax.print.attribute,\
- javax.print.attribute.standard,\
- javax.print.event,\
- javax.rmi,\
- javax.rmi.CORBA,\
- javax.rmi.ssl,\
- javax.security.auth,\
- javax.security.auth.callback,\
- javax.security.auth.kerberos,\
- javax.security.auth.login,\
- javax.security.auth.spi,\
- javax.security.auth.x500,\
- javax.security.cert,\
- javax.security.sasl,\
- javax.sound.midi,\
- javax.sound.midi.spi,\
- javax.sound.sampled,\
- javax.sound.sampled.spi,\
- javax.sql,\
- javax.sql.rowset,\
- javax.sql.rowset.serial,\
- javax.sql.rowset.spi,\
- javax.swing,\
- javax.swing.border,\
- javax.swing.colorchooser,\
- javax.swing.event,\
- javax.swing.filechooser,\
- javax.swing.plaf,\
- javax.swing.plaf.basic,\
- javax.swing.plaf.metal,\
- javax.swing.plaf.multi,\
- javax.swing.plaf.synth,\
- javax.swing.table,\
- javax.swing.text,\
- javax.swing.text.html,\
- javax.swing.text.html.parser,\
- javax.swing.text.rtf,\
- javax.swing.tree,\
- javax.swing.undo,\
- javax.transaction,\
- javax.transaction.xa,\
- javax.xml,\
- javax.xml.datatype,\
- javax.xml.namespace,\
- javax.xml.parsers,\
- javax.xml.transform,\
- javax.xml.transform.dom,\
- javax.xml.transform.sax,\
- javax.xml.transform.stream,\
- javax.xml.validation,\
- javax.xml.xpath,\
- org.ietf.jgss,\
- org.omg.CORBA,\
- org.omg.CORBA_2_3,\
- org.omg.CORBA_2_3.portable,\
- org.omg.CORBA.DynAnyPackage,\
- org.omg.CORBA.ORBPackage,\
- org.omg.CORBA.portable,\
- org.omg.CORBA.TypeCodePackage,\
- org.omg.CosNaming,\
- org.omg.CosNaming.NamingContextExtPackage,\
- org.omg.CosNaming.NamingContextPackage,\
- org.omg.Dynamic,\
- org.omg.DynamicAny,\
- org.omg.DynamicAny.DynAnyFactoryPackage,\
- org.omg.DynamicAny.DynAnyPackage,\
- org.omg.IOP,\
- org.omg.IOP.CodecFactoryPackage,\
- org.omg.IOP.CodecPackage,\
- org.omg.Messaging,\
- org.omg.PortableInterceptor,\
- org.omg.PortableInterceptor.ORBInitInfoPackage,\
- org.omg.PortableServer,\
- org.omg.PortableServer.CurrentPackage,\
- org.omg.PortableServer.POAManagerPackage,\
- org.omg.PortableServer.POAPackage,\
- org.omg.PortableServer.portable,\
- org.omg.PortableServer.ServantLocatorPackage,\
- org.omg.SendingContext,\
- org.omg.stub.java.rmi,\
- org.w3c.dom,\
- org.w3c.dom.bootstrap,\
- org.w3c.dom.css,\
- org.w3c.dom.events,\
- org.w3c.dom.html,\
- org.w3c.dom.ls,\
- org.w3c.dom.ranges,\
- org.w3c.dom.stylesheets,\
- org.w3c.dom.traversal,\
- org.w3c.dom.views ,\
- org.xml.sax,\
- org.xml.sax.ext,\
- org.xml.sax.helpers
-org.osgi.framework.bootdelegation = \
- javax.*,\
- org.ietf.jgss,\
- org.omg.*,\
- org.w3c.*,\
- org.xml.*,\
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1,\
- OSGi/Minimum-1.2,\
- JRE-1.1,\
- J2SE-1.2,\
- J2SE-1.3,\
- J2SE-1.4,\
- J2SE-1.5
-osgi.java.profile.name = J2SE-1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/JRE-1.1.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/JRE-1.1.profile
deleted file mode 100644
index 7bb8b46..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/JRE-1.1.profile
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = 
-org.osgi.framework.bootdelegation = \
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- JRE-1.1
-osgi.java.profile.name = JRE-1.1
-org.eclipse.jdt.core.compiler.compliance=1.1
-org.eclipse.jdt.core.compiler.source=1.1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/JavaSE-1.6.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/JavaSE-1.6.profile
deleted file mode 100644
index 68e811f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/JavaSE-1.6.profile
+++ /dev/null
@@ -1,194 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.accessibility,\
- javax.activation,\
- javax.activity,\
- javax.annotation,\
- javax.annotation.processing,\
- javax.crypto,\
- javax.crypto.interfaces,\
- javax.crypto.spec,\
- javax.imageio,\
- javax.imageio.event,\
- javax.imageio.metadata,\
- javax.imageio.plugins.bmp,\
- javax.imageio.plugins.jpeg,\
- javax.imageio.spi,\
- javax.imageio.stream,\
- javax.jws,\
- javax.jws.soap,\
- javax.lang.model,\
- javax.lang.model.element,\
- javax.lang.model.type,\
- javax.lang.model.util,\
- javax.management,\
- javax.management.loading,\
- javax.management.modelmbean,\
- javax.management.monitor,\
- javax.management.openmbean,\
- javax.management.relation,\
- javax.management.remote,\
- javax.management.remote.rmi,\
- javax.management.timer,\
- javax.naming,\
- javax.naming.directory,\
- javax.naming.event,\
- javax.naming.ldap,\
- javax.naming.spi,\
- javax.net,\
- javax.net.ssl,\
- javax.print,\
- javax.print.attribute,\
- javax.print.attribute.standard,\
- javax.print.event,\
- javax.rmi,\
- javax.rmi.CORBA,\
- javax.rmi.ssl,\
- javax.script,\
- javax.security.auth,\
- javax.security.auth.callback,\
- javax.security.auth.kerberos,\
- javax.security.auth.login,\
- javax.security.auth.spi,\
- javax.security.auth.x500,\
- javax.security.cert,\
- javax.security.sasl,\
- javax.sound.midi,\
- javax.sound.midi.spi,\
- javax.sound.sampled,\
- javax.sound.sampled.spi,\
- javax.sql,\
- javax.sql.rowset,\
- javax.sql.rowset.serial,\
- javax.sql.rowset.spi,\
- javax.swing,\
- javax.swing.border,\
- javax.swing.colorchooser,\
- javax.swing.event,\
- javax.swing.filechooser,\
- javax.swing.plaf,\
- javax.swing.plaf.basic,\
- javax.swing.plaf.metal,\
- javax.swing.plaf.multi,\
- javax.swing.plaf.synth,\
- javax.swing.table,\
- javax.swing.text,\
- javax.swing.text.html,\
- javax.swing.text.html.parser,\
- javax.swing.text.rtf,\
- javax.swing.tree,\
- javax.swing.undo,\
- javax.tools,\
- javax.transaction,\
- javax.transaction.xa,\
- javax.xml,\
- javax.xml.bind,\
- javax.xml.bind.annotation,\
- javax.xml.bind.annotation.adapters,\
- javax.xml.bind.attachment,\
- javax.xml.bind.helpers,\
- javax.xml.bind.util,\
- javax.xml.crypto,\
- javax.xml.crypto.dom,\
- javax.xml.crypto.dsig,\
- javax.xml.crypto.dsig.dom,\
- javax.xml.crypto.dsig.keyinfo,\
- javax.xml.crypto.dsig.spec,\
- javax.xml.datatype,\
- javax.xml.namespace,\
- javax.xml.parsers,\
- javax.xml.soap,\
- javax.xml.stream,\
- javax.xml.stream.events,\
- javax.xml.stream.util,\
- javax.xml.transform,\
- javax.xml.transform.dom,\
- javax.xml.transform.sax,\
- javax.xml.transform.stax,\
- javax.xml.transform.stream,\
- javax.xml.validation,\
- javax.xml.ws,\
- javax.xml.ws.handler,\
- javax.xml.ws.handler.soap,\
- javax.xml.ws.http,\
- javax.xml.ws.soap,\
- javax.xml.ws.spi,\
- javax.xml.ws.wsaddressing,\
- javax.xml.xpath,\
- org.ietf.jgss,\
- org.omg.CORBA,\
- org.omg.CORBA_2_3,\
- org.omg.CORBA_2_3.portable,\
- org.omg.CORBA.DynAnyPackage,\
- org.omg.CORBA.ORBPackage,\
- org.omg.CORBA.portable,\
- org.omg.CORBA.TypeCodePackage,\
- org.omg.CosNaming,\
- org.omg.CosNaming.NamingContextExtPackage,\
- org.omg.CosNaming.NamingContextPackage,\
- org.omg.Dynamic,\
- org.omg.DynamicAny,\
- org.omg.DynamicAny.DynAnyFactoryPackage,\
- org.omg.DynamicAny.DynAnyPackage,\
- org.omg.IOP,\
- org.omg.IOP.CodecFactoryPackage,\
- org.omg.IOP.CodecPackage,\
- org.omg.Messaging,\
- org.omg.PortableInterceptor,\
- org.omg.PortableInterceptor.ORBInitInfoPackage,\
- org.omg.PortableServer,\
- org.omg.PortableServer.CurrentPackage,\
- org.omg.PortableServer.POAManagerPackage,\
- org.omg.PortableServer.POAPackage,\
- org.omg.PortableServer.portable,\
- org.omg.PortableServer.ServantLocatorPackage,\
- org.omg.SendingContext,\
- org.omg.stub.java.rmi,\
- org.w3c.dom,\
- org.w3c.dom.bootstrap,\
- org.w3c.dom.css,\
- org.w3c.dom.events,\
- org.w3c.dom.html,\
- org.w3c.dom.ls,\
- org.w3c.dom.ranges,\
- org.w3c.dom.stylesheets,\
- org.w3c.dom.traversal,\
- org.w3c.dom.views,\
- org.w3c.dom.xpath,\
- org.xml.sax,\
- org.xml.sax.ext,\
- org.xml.sax.helpers
-org.osgi.framework.bootdelegation = \
- javax.*,\
- org.ietf.jgss,\
- org.omg.*,\
- org.w3c.*,\
- org.xml.*,\
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1,\
- OSGi/Minimum-1.2,\
- JRE-1.1,\
- J2SE-1.2,\
- J2SE-1.3,\
- J2SE-1.4,\
- J2SE-1.5,\
- JavaSE-1.6
-osgi.java.profile.name = JavaSE-1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.source=1.6
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/META-INF/MANIFEST.MF
deleted file mode 100644
index 6dd9150..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,44 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.equinox.p2.metadata.generator;singleton:=true
-Bundle-Version: 1.0.202.qualifier
-Bundle-Activator: org.eclipse.equinox.internal.p2.metadata.generator.Activator
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Export-Package: org.eclipse.equinox.internal.p2.metadata.generator;x-internal:=true,
- org.eclipse.equinox.internal.p2.metadata.generator.features;x-friends:="org.eclipse.equinox.p2.updatesite,org.eclipse.equinox.p2.directorywatcher,org.eclipse.equinox.p2.extensionlocation",
- org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-  x-friends:="org.eclipse.equinox.p2.ui.sdk,
-   org.eclipse.equinox.p2.touchpoint.eclipse,
-   org.eclipse.equinox.p2.directorywatcher,
-   org.eclipse.equinox.p2.extensionlocation,
-   org.eclipse.equinox.p2.updatesite"
-Require-Bundle: org.eclipse.equinox.p2.core,
- org.eclipse.osgi,
- org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.equinox.p2.repository
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Bundle-ActivationPolicy: lazy
-Import-Package: javax.xml.parsers,
- org.eclipse.equinox.app;version="1.0.0",
- org.eclipse.equinox.frameworkadmin;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.internal.frameworkadmin.equinox,
- org.eclipse.equinox.internal.frameworkadmin.utils,
- org.eclipse.equinox.internal.p2.metadata,
- org.eclipse.equinox.internal.p2.metadata.query,
- org.eclipse.equinox.internal.p2.metadata.repository,
- org.eclipse.equinox.internal.p2.repository.helpers,
- org.eclipse.equinox.internal.provisional.frameworkadmin,
- org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing,
- org.eclipse.equinox.p2.metadata;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.metadata.expression;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.query;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.repository;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.repository.artifact;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.repository.artifact.spi;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.repository.metadata;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.simpleconfigurator.manipulator;version="[2.0.0,3.0.0)",
- org.w3c.dom,
- org.xml.sax,
- org.xml.sax.helpers
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator Plugins and Features.launch b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator Plugins and Features.launch
deleted file mode 100644
index 5464e64..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator Plugins and Features.launch	
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<booleanAttribute key="clearConfig" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Metadata Generator Plugins and Features"/>
-<booleanAttribute key="default_auto_start" value="false"/>
-<intAttribute key="default_start_level" value="4"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-console 
-consolelog
-application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator
-metadataRepository file:C:/equinox.p2/servers/
-artifactRepository file:C:/equinox.p2/servers/
-source d:/tmp/orbit/eclipse
-publishArtifacts
-append
-noDefaultIUs"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="org.eclipse.core.runtime.compatibility.registry at default:false,org.eclipse.ant.core at default:default,org.eclipse.osgi.services at default:default,org.eclipse.equinox.app at default:default,org.eclipse.core.jobs at default:default,org.eclipse.equinox.common at default:default,org.eclipse.core.runtime.compatibility.auth at default:default,org.eclipse.equinox.registry at default:default,org.eclipse.core.variables at default:default,org.eclipse.core.contenttype at default:default,org.eclipse.core.runtime at default:true"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useNamedJRE" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.ecf.identity at default:default,org.eclipse.ecf.provider.filetransfer at default:default,org.eclipse.equinox.p2.core at default:default,org.eclipse.equinox.p2.metadata.repository at default:default,org.eclipse.equinox.simpleconfigurator at default:true,org.eclipse.ecf.filetransfer at default:default,org.eclipse.equinox.p2.touchpoint.natives at default:default,org.eclipse.equinox.p2.engine at default:default,org.eclipse.equinox.p2.metadata at default:default,org.eclipse.equinox.simpleconfigurator.manipulator at default:default,org.eclipse.ecf.ssl at default:false,org.eclipse.ecf.provider.filetransfer.ssl at default:false,org.eclipse.equinox.frameworkadmin.equinox at default:default,org.eclipse.equinox.frameworkadmin at default:default,org.eclipse.ecf at default:default,org.eclipse.equinox.p2.artifact.repository at default:default,org.eclipse.equinox.p2.garbagecollector at default:default,org.eclipse.equinox.p2.metadata.generator at default:default,org.eclipse.equinox.p2.touchpoint.eclipse at default:default"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator SDK.launch b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator SDK.launch
deleted file mode 100644
index 2fd1986..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator SDK.launch	
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Metadata Generator SDK"/>
-<booleanAttribute key="default_auto_start" value="false"/>
-<intAttribute key="default_start_level" value="4"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/j2sdk1.4.2_08"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-console 
-consolelog
-application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator
-metadataRepository file:C:/equinox.p2/servers/
-artifactRepository file:C:/equinox.p2/servers/
-source c:\eclipse\latest\eclipse
-root sdk
-rootVersion 3.4.0.I20080212withcopyrightlicensechanges
-flavor tooling
-publishArtifacts
-append"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="com.ibm.icu at default:default,org.eclipse.ant.core at default:default,org.eclipse.core.contenttype at default:default,org.eclipse.core.jobs at default:default,org.eclipse.core.net at default:default,org.eclipse.core.runtime at default:default,org.eclipse.core.runtime.compatibility.auth at default:default,org.eclipse.core.runtime.compatibility.registry at default:false,org.eclipse.core.variables at default:default,org.eclipse.equinox.app at default:true,org.eclipse.equinox.common at default:default,org.eclipse.equinox.launcher at default:default,org.eclipse.equinox.launcher.win32.win32.x86 at default:false,org.eclipse.equinox.preferences at default:default,org.eclipse.equinox.registry at default:default,org.eclipse.osgi@:,org.eclipse.osgi.services at default:default,org.eclipse.update.configurator at default:default"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useNamedJRE" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.apache.xerces at default:default,org.apache.xml.resolver at default:default,org.eclipse.ecf at default:default,org.eclipse.ecf.filetransfer at default:default,org.eclipse.ecf.identity at default:default,org.eclipse.equinox.frameworkadmin at default:default,org.eclipse.equinox.frameworkadmin.equinox at default:true,org.eclipse.equinox.p2.artifact.repository at default:default,org.eclipse.equinox.p2.core at default:default,org.eclipse.equinox.p2.download at default:default,org.eclipse.equinox.p2.engine at default:default,org.eclipse.equinox.p2.metadata at default:default,org.eclipse.equinox.p2.metadata.generator at default:default,org.eclipse.equinox.p2.metadata.repository at default:default"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator Update Site.launch b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator Update Site.launch
deleted file mode 100644
index bb6ef0e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/Metadata Generator Update Site.launch	
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Metadata Generator Update Site"/>
-<booleanAttribute key="default_auto_start" value="false"/>
-<intAttribute key="default_start_level" value="4"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-console 
-consolelog
-application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator
-updateSite d:/ganymedeM5/
-site file:d:/ganymedeM5/site.xml
-metadataRepository file:d:/ganymedeM5/
-metadataRepositoryName "Ganymede Update Site"
-artifactRepository file:d:/ganymedeM5/
-artifactRepositoryName "Ganymede Artifacts"
-append
-compress
-reusePack200Files"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="org.eclipse.core.runtime.compatibility.registry*3.2.200.v20070717 at default:false,org.eclipse.equinox.common*3.4.0.v20080407 at default:default,com.ibm.icu*3.8.1.v20080304 at default:default,org.eclipse.osgi.services*3.1.200.v20071203 at default:default,org.eclipse.equinox.launcher*1.0.100.v20080407 at default:default,org.eclipse.equinox.preferences*3.2.200.v20080201 at default:default,org.eclipse.update.configurator*3.2.200.v20080404 at default:default,org.eclipse.equinox.launcher.win32.win32.x86*1.0.100.v20080407 at default:false,org.eclipse.equinox.app*1.0.100.v20080331 at default:true,org.eclipse.osgi*3.4.0.v20080407@:,org.eclipse.core.runtime.compatibility.auth*3.2.100.v20070502 at default:default,org.eclipse.equinox.security.win32.x86*1.0.0.v20080324 at default:false,org.eclipse.core.jobs*3.4.0.v20080310 at default:default,org.eclipse.equinox.registry*3.4.0.v20080316 at default:default,org.eclipse.equinox.security*1.0.0.v20080407 at default:default,org.eclipse.core.variables*3.2.100.v20080324-1600 at default:default,org.eclipse.core.runtime*3.4.0.v20080324-1725 at default:default,org.eclipse.core.contenttype*3.3.0.v20080407 at default:default,org.eclipse.ant.core*3.2.0.v20080319 at default:default,org.eclipse.core.net*1.0.100.I20080322 at default:default"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useNamedJRE" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.equinox.p2.metadata.generator*0.1.0.qualifier at default:default,org.eclipse.equinox.p2.metadata*0.1.0.qualifier at default:default,org.eclipse.ecf.provider.filetransfer*2.0.0.qualifier at default:default,org.eclipse.ecf*2.0.0.qualifier at default:default,org.eclipse.equinox.p2.artifact.repository*0.1.0.qualifier at default:default,org.eclipse.ecf.filetransfer*2.0.0.qualifier at default:default,org.eclipse.equinox.frameworkadmin*0.1.0.qualifier at default:default,org.eclipse.equinox.p2.core*0.1.0.qualifier at default:default,org.eclipse.equinox.p2.engine*0.1.0.qualifier at default:default,org.eclipse.ecf.identity*2.0.0.qualifier at default:default,org.eclipse.equinox.frameworkadmin.equinox*0.1.0.qualifier at default:true,org.eclipse.equinox.p2.metadata.repository*0.1.0.qualifier at default:default"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.0.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.0.profile
deleted file mode 100644
index 773501a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.0.profile
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = 
-org.osgi.framework.bootdelegation = \
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0
-osgi.java.profile.name = OSGi/Minimum-1.0
-org.eclipse.jdt.core.compiler.compliance=1.3
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.1.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.1.profile
deleted file mode 100644
index 5031392..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.1.profile
+++ /dev/null
@@ -1,23 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = 
-org.osgi.framework.bootdelegation = \
- sun.*,\
- com.sun.*
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1
-osgi.java.profile.name = OSGi/Minimum-1.1
-org.eclipse.jdt.core.compiler.compliance=1.3
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.2.profile b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.2.profile
deleted file mode 100644
index 601b373..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/OSGi_Minimum-1.2.profile
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-org.osgi.framework.system.packages = \
- javax.security.auth.x500
-org.osgi.framework.bootdelegation = \
- javax.security.auth.x500
-org.osgi.framework.executionenvironment = \
- OSGi/Minimum-1.0,\
- OSGi/Minimum-1.1,\
- OSGi/Minimum-1.2
-osgi.java.profile.name = OSGi/Minimum-1.2
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/build.properties
deleted file mode 100644
index ca56ce6..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/build.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-source.ant_tasks/generator-ant.jar=src_ant/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               OSGi_Minimum-1.1.profile,\
-               OSGi_Minimum-1.0.profile,\
-               JavaSE-1.6.profile,\
-               JRE-1.1.profile,\
-               J2SE-1.5.profile,\
-               J2SE-1.4.profile,\
-               J2SE-1.3.profile,\
-               J2SE-1.2.profile,\
-               CDC-1.1_Foundation-1.1.profile,\
-               CDC-1.0_Foundation-1.0.profile,\
-               plugin.xml,\
-               ant_tasks/generator-ant.jar,\
-               plugin.properties
-src.includes = about.html
-jars.compile.order=.,ant_tasks/generator-ant.jar
-extra.ant_tasks/generator-ant.jar = platform:/plugin/org.apache.ant
-jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/config.ini b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/config.ini
deleted file mode 100644
index ec13298..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/config.ini
+++ /dev/null
@@ -1,57 +0,0 @@
-# Eclipse runtime configuration file
-# This file contains a number of key/value pairs that are merged into the 
-# System properties on system startup.  The values control the way the 
-# runtime is structured and runs.
-
-# Note:  Only platform:/base/ and file: URLs are supported.  In general the 
-# URLs given may include a version number (e.g., .../location_1.2.3).  
-# If a version is not specified, the system binds
-# to the location which matches exactly or to the versioned location with the
-# latest version number.  If a version number is given then only exact matches
-# are considered.
-
-# The URL for the runtime entry point.  The default value is
-# platform:/base/plugins/org.eclipse.osgi 
-#osgi.framework=platform:/base/plugins/org.eclipse.osgi
-
-# The classpath for the framework found at the osgi.framework location.  This 
-# comma-separated list contains either URLs or simple element names.  Simple
-# names are assumed to be relative to the framework's install directory.  
-# Typically this value need not be set as it is initialized by the framework itself.
-# Version match searching is not done for URLs listed here.
-#osgi.frameworkClassPath =
-
-# The comma-separated list of locations to search for the splash screen file (splash.bmp).
-# For each list element a subdirectory structure based on the pattern nl/<locale> is searched.
-# The system binds to the first matching file.  There is no default value.
-#osgi.splashPath=
-
-# The location of the splash screen file.  If this value is set at system startup it is used 
-# in favour of the osgi.splashPath searching outlined above.  If the value is not set 
-# the searching is done and this key is bound to the result of the search.
-#osgi.splashLocation =
-
-# The comma-separated list of bundles which are automatically installed and optionally started
-# once the system is up and running.  Each entry if of the form
-#     <URL | simple bundle location>[@ [<startlevel>] [":start"]]
-# If the startlevel is omitted then the framework will use the default start level for the bundle.
-# If the "start" tag is added then the bundle will be marked as started after being installed.
-# Simple bundle locations are interepreted as relative to the framework's parent directory.
-# The startlevel indicates the OSGi start level at which the bundle should run.
-osgi.bundles=org.eclipse.equinox.common at 2:start, org.eclipse.update.configurator at 3:start, org.eclipse.core.runtime at start,org.eclipse.equinox.frameworkadmin.equinox at start
-
-# The product to run.  A given Eclipse configuration may contain many products.
-# The product identified will supply the branding (window icons, title bar text) etc 
-# as well as define the default application to run.  
-#eclipse.product=
-
-# The application to run.  The value specified here is the id of the application extension
-# the runtime will find, instantiate and execute once the system is up.  Note that typically 
-# the identified eclipse.product defines the default application to run.
-#eclipse.application=
-
-# The build identifier
-eclipse.buildId=@build@
-
-# End of file marker - must be here
-eof=eof
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/generator.product b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/generator.product
deleted file mode 100644
index 1e313cd..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/generator.product
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?pde version="3.1"?>
-
-<product name="Equinox Provisioning Metadata Generator" id="org.eclipse.equinox.p2.metadata.generator.product" application="org.eclipse.equinox.p2.metadata.generator.EclipseGenerator" useFeatures="true">
-
-   <configIni use="custom" path="/org.eclipse.equinox.p2.metadata.generator/config.ini"/>
-
-   <launcherArgs>
-      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
-   </launcherArgs>
-
-   <launcher name="eclipse">
-      <solaris/>
-      <win useIco="false">
-         <bmp/>
-      </win>
-   </launcher>
-
-   <vm>
-   </vm>
-
-   <plugins>
-   </plugins>
-
-   <features>
-      <feature id="org.eclipse.equinox.p2.generator.feature" version="0.0.0"/>
-      <feature id="org.eclipse.rcp" version="0.0.0"/>
-   </features>
-
-</product>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/p2-izer update site.launch b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/p2-izer update site.launch
deleted file mode 100644
index 7ad55f2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/p2-izer update site.launch	
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/p2-izer update site"/>
-<booleanAttribute key="default_auto_start" value="false"/>
-<intAttribute key="default_start_level" value="4"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-console 
-consolelog
-application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator
-metadataRepository file:d:/ganymedeM5/
-artifactRepository file:d:/ganymedeM5/
-updateSite d:/ganymedeM5/
-site file:d:/ganymedeM5/site.xml
-flavor tooling
-append
-reusePack200Files
-compress"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="org.eclipse.equinox.app*1.0.100.v20080303 at default:true,org.eclipse.equinox.preferences*3.2.200.v20080201 at default:default,org.eclipse.update.configurator*3.2.200.v20080107 at default:default,org.eclipse.core.runtime.compatibility.registry*3.2.200.v20070717 at default:false,org.eclipse.core.runtime*3.4.0.v20080303 at default:default,org.eclipse.core.jobs*3.3.100.v20080224 at default:default,org.eclipse.equinox.launcher.win32.win32.x86*1.0.100.v20080201a at default:false,com.ibm.icu*3.8.1.v20080103 at default:default,org.eclipse.equinox.launcher*1.0.100.v20080303 at default:default,org.eclipse.equinox.common*3.4.0.v20080201 at default:default,org.eclipse.osgi.services*3.1.200.v20071203 at default:default,org.eclipse.osgi*3.4.0.v20080304@:,org.eclipse.equinox.launcher.win32.win32.x86*1.0.100.v20080201a at default:false,org.eclipse.equinox.registry*3.4.0.v20080201 at default:default,org.eclipse.equinox.launcher*1.0.100.v20080303 at default:default,org.eclipse.core.contenttype*3.3.0.v20080201 at default:default"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useNamedJRE" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.equinox.p2.metadata.generator*0.1.0.qualifier at default:default,org.eclipse.equinox.frameworkadmin*0.1.0.qualifier at default:default,org.eclipse.equinox.p2.core*0.1.0.qualifier at default:default,org.eclipse.equinox.p2.metadata*0.1.0.qualifier at default:default,org.eclipse.ecf*1.4.0.qualifier at default:default,org.eclipse.equinox.p2.artifact.repository*0.1.0.qualifier at default:default,org.eclipse.equinox.frameworkadmin.equinox*0.1.0.qualifier at default:true,org.eclipse.equinox.p2.metadata.repository*0.1.0.qualifier at default:default,org.eclipse.equinox.p2.engine*0.1.0.qualifier at default:default,org.eclipse.ecf.filetransfer*2.0.0.qualifier at default:default,org.eclipse.ecf.identity*1.3.0.qualifier at default:default"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/plugin.properties
deleted file mode 100644
index 0c08404..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-#  Copyright (c) 2007, 2009 IBM Corporation and others.
-#  All rights reserved. This program and the accompanying materials
-#  are made available under the terms of the Eclipse Public License v1.0
-#  which accompanies this distribution, and is available at
-#  http://www.eclipse.org/legal/epl-v10.html
-# 
-#  Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Equinox Provisioning Metadata Generator
-providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/plugin.xml b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/plugin.xml
deleted file mode 100644
index a0e5290..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/plugin.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension
-         id="EclipseGenerator"
-         point="org.eclipse.core.runtime.applications">
-      <application
-            cardinality="1"
-            thread="main"
-            visible="true">
-         <run
-               class="org.eclipse.equinox.internal.p2.metadata.generator.EclipseGeneratorApplication">
-         </run>
-      </application>
-   </extension>
-   <extension
-         id="product"
-         point="org.eclipse.core.runtime.products">
-      <product
-            application="org.eclipse.equinox.p2.metadata.generator.EclipseGenerator"
-            name="Equinox Provisioning Metadata Generator">
-      </product>
-   </extension>
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/pom.xml
deleted file mode 100644
index 53585eb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/pom.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
-    <groupId>org.eclipse</groupId>
-    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
-  </parent>
-  <groupId>org.eclipse</groupId>
-  <artifactId>org.eclipse.equinox.p2.metadata.generator</artifactId>
-  <version>1.0.200.qualifier</version>
-  <packaging>eclipse-plugin</packaging>
-</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/scripts/buildExtraJAR.xml b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/scripts/buildExtraJAR.xml
deleted file mode 100644
index b570060..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/scripts/buildExtraJAR.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.equinox.p2.metadata.generator" default="default" basedir="..">
-
-	<target name="init" depends="properties">
-		<property name="plugin" value="org.eclipse.equinox.p2.metadata.generator"/>
-		<property name="temp.folder" value="${basedir}/temp.folder"/>
-		<property name="plugin.destination" value="${basedir}"/>
-		<property name="build.result.folder" value="${basedir}/ant_tasks"/>
-		<property name="version.suffix" value="_3.1.0"/>
-	</target>
-
-	<target name="properties" if="eclipse.running">
-		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
-	</target>
-
-	<target name="buildScripts" depends="init" description="Build from generated scripts">
-		<tstamp/>
-		<eclipse.buildScript elements="plugin@${plugin}" 
-			buildDirectory="${buildDirectory}" 
-			configInfo="*,*,*" 
-			baseLocation="${baseLocation}" 
-			buildingOSGi="true" 
-			outputUpdateJars="false"
-			pluginpath="${basedir}"
-			forceContextQualifier="z${DSTAMP}${TSTAMP}"
-			/>
-		<delete file="${basedir}/ant_tasks/generator-ant.jar" failonerror="false"/>
-		<ant antfile="${basedir}/build.xml" target="ant_tasks/generator-ant.jar"/>
-	</target>
-
-	<target name="default" description="Jar up the binaries that were compiled by the jdt builder" >
-		<mkdir dir="${basedir}/ant_tasks" />
-		<delete file="${basedir}/ant_tasks/generator-ant.jar" failonerror="false"/>
-		<jar destfile="${basedir}/ant_tasks/generator-ant.jar" basedir="bin_ant"/>
-	</target>
-</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/Activator.java
deleted file mode 100644
index 5c2cb2c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/Activator.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-	public static BundleContext context = null;
-	public static String ID = "org.eclipse.equinox.p2.metadata.generator"; //$NON-NLS-1$
-
-	public static BundleContext getContext() {
-		return context;
-	}
-
-	public void start(BundleContext context) throws Exception {
-		Activator.context = context;
-	}
-
-	public void stop(BundleContext context) throws Exception {
-		Activator.context = null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java
deleted file mode 100644
index 3d2dd9f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/EclipseGeneratorApplication.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.URIUtil;
-import org.eclipse.equinox.app.IApplication;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.EclipseInstallGeneratorInfoProvider;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.Generator;
-import org.eclipse.equinox.p2.core.*;
-import org.eclipse.equinox.p2.repository.IRepository;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.ServiceReference;
-
-public class EclipseGeneratorApplication implements IApplication {
-
-	// The mapping rules for in-place generation need to construct paths into the structure
-	// of an eclipse installation; in the future the default artifact mapping declared in
-	// SimpleArtifactRepository may change, for example, to not have a 'bundles' directory
-	// instead of a 'plugins' directory, so a separate constant is defined and used here.
-	static final private String[][] INPLACE_MAPPING_RULES = { {"(& (classifier=osgi.bundle) (format=packed)", "${repoUrl}/features/${id}_${version}.jar.pack.gz"}, //$NON-NLS-1$//$NON-NLS-2$
-			{"(& (classifier=org.eclipse.update.feature))", "${repoUrl}/features/${id}_${version}.jar"}, //$NON-NLS-1$//$NON-NLS-2$
-			{"(& (classifier=osgi.bundle))", "${repoUrl}/plugins/${id}_${version}.jar"}, //$NON-NLS-1$//$NON-NLS-2$
-			{"(& (classifier=binary))", "${repoUrl}/binary/${id}_${version}"}}; //$NON-NLS-1$//$NON-NLS-2$
-
-	static final public String PUBLISH_PACK_FILES_AS_SIBLINGS = "publishPackFilesAsSiblings"; //$NON-NLS-1$
-
-	private Generator.GeneratorResult incrementalResult = null;
-	private boolean generateRootIU = true;
-	private URI metadataLocation;
-	private String metadataRepoName;
-	private URI artifactLocation;
-	private String artifactRepoName;
-	private String operation;
-	private String argument;
-	private String features;
-	private String bundles;
-	private String base;
-	//whether repository xml files should be compressed
-	private String compress = "false"; //$NON-NLS-1$
-
-	private ServiceReference agentRef;
-	private IProvisioningAgent agent;
-
-	private File getExecutableName(String base, EclipseInstallGeneratorInfoProvider provider) {
-		File location = provider.getExecutableLocation();
-		if (location == null)
-			return new File(base, EclipseInstallGeneratorInfoProvider.getDefaultExecutableName(null));
-		if (location.isAbsolute())
-			return location;
-		return new File(base, location.getPath());
-	}
-
-	private void initialize(EclipseInstallGeneratorInfoProvider provider) throws ProvisionException {
-		if ("-source".equalsIgnoreCase(operation)) //$NON-NLS-1$
-			provider.initialize(new File(argument));
-		else if ("-inplace".equalsIgnoreCase(operation)) { //$NON-NLS-1$
-			provider.initialize(new File(argument));
-			initializeForInplace(provider);
-		} else if ("-config".equalsIgnoreCase(operation)) { //$NON-NLS-1$
-			provider.initialize(new File(argument), new File(argument, "configuration"), getExecutableName(argument, provider), null, null); //$NON-NLS-1$
-		} else if ("-updateSite".equalsIgnoreCase(operation)) { //$NON-NLS-1$
-			provider.setAddDefaultIUs(false);
-			provider.initialize(new File(argument), null, null, new File[] {new File(argument, "plugins")}, new File(argument, "features")); //$NON-NLS-1$ //$NON-NLS-2$
-			initializeForInplace(provider);
-		} else {
-			// base is set but we expect everything else to have been set using 
-			// explicit args.  Note that if we are coming in via an Ant task, we have
-			// to ensure all the values are passed in
-			if (base != null) {
-				File[] bundlesLocation = bundles == null ? null : new File[] {new File(bundles)};
-				File featuresLocation = features == null ? null : new File(features);
-				provider.initialize(new File(base), null, null, bundlesLocation, featuresLocation);
-			}
-		}
-		initializeRepositories(provider);
-	}
-
-	private void initializeArtifactRepository(EclipseInstallGeneratorInfoProvider provider) throws ProvisionException {
-		if (artifactLocation == null)
-			return;
-		IArtifactRepositoryManager manager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
-		URI location = artifactLocation;
-
-		String repositoryName = (artifactRepoName != null && artifactRepoName.length() > 0) ? artifactRepoName : artifactLocation + " - artifacts"; //$NON-NLS-1$
-		Map properties = new HashMap(1);
-		properties.put(IRepository.PROP_COMPRESSED, compress);
-		if (provider.reuseExistingPack200Files())
-			properties.put(PUBLISH_PACK_FILES_AS_SIBLINGS, Boolean.TRUE.toString());
-		IArtifactRepository result = null;
-		try {
-			result = manager.createRepository(location, repositoryName, IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
-			manager.removeRepository(location);
-			provider.setArtifactRepository(result);
-			return;
-		} catch (ProvisionException e) {
-			//fall through a load existing repo
-		}
-
-		IArtifactRepository repository = manager.loadRepository(location, null);
-		if (repository != null) {
-			manager.removeRepository(location);
-			if (!repository.isModifiable())
-				throw new IllegalArgumentException(NLS.bind(Messages.exception_artifactRepoNotWritable, location));
-			provider.setArtifactRepository(repository);
-			if (provider.reuseExistingPack200Files())
-				repository.setProperty(PUBLISH_PACK_FILES_AS_SIBLINGS, "true"); //$NON-NLS-1$
-			if (!provider.append()) {
-				File repoLocation = URIUtil.toFile(location);
-				if (repoLocation.isFile())
-					repoLocation = repoLocation.getParentFile();
-				if (repoLocation.equals(provider.getBaseLocation()))
-					throw new IllegalArgumentException(NLS.bind(Messages.exception_artifactRepoNoAppendDestroysInput, location));
-
-				repository.removeAll();
-			}
-		}
-		return;
-	}
-
-	public void initializeForInplace(EclipseInstallGeneratorInfoProvider provider) {
-		File location = provider.getBaseLocation();
-		if (location == null)
-			location = provider.getBundleLocations()[0];
-		metadataLocation = location.toURI();
-		artifactLocation = location.toURI();
-		provider.setPublishArtifactRepository(true);
-		provider.setPublishArtifacts(false);
-		provider.setAppend(true);
-		provider.setMappingRules(INPLACE_MAPPING_RULES);
-	}
-
-	private void initializeMetadataRepository(EclipseInstallGeneratorInfoProvider provider) throws ProvisionException {
-		if (metadataLocation == null)
-			return;
-		URI location = metadataLocation;
-
-		// 	First try to create a simple repo, this will fail if one already exists
-		//  We try creating a repo first instead of just loading what is there because we don't want a repo based
-		//  on a site.xml if there is one there.
-
-		String repositoryName = (metadataRepoName == null || metadataRepoName.length() == 0) ? metadataLocation + " - metadata" : metadataRepoName; //$NON-NLS-1$
-		Map properties = new HashMap(1);
-		properties.put(IRepository.PROP_COMPRESSED, compress);
-
-		IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
-		try {
-			IMetadataRepository result = manager.createRepository(location, repositoryName, IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
-			manager.removeRepository(location);
-			provider.setMetadataRepository(result);
-			return;
-		} catch (ProvisionException e) {
-			//fall through and load the existing repo
-		}
-
-		IMetadataRepository repository = manager.loadRepository(location, null);
-		if (repository != null) {
-			manager.removeRepository(location);
-			// don't set the compress flag here because we don't want to change the format
-			// of an already existing repository
-			if (!repository.isModifiable())
-				throw new IllegalArgumentException(NLS.bind(Messages.exception_metadataRepoNotWritable, location));
-			provider.setMetadataRepository(repository);
-			if (!provider.append())
-				repository.removeAll();
-			return;
-		}
-	}
-
-	private void initializeRepositories(EclipseInstallGeneratorInfoProvider provider) throws ProvisionException {
-		initializeArtifactRepository(provider);
-		initializeMetadataRepository(provider);
-	}
-
-	public void setCompress(String value) {
-		if (Boolean.valueOf(value).booleanValue())
-			compress = "true"; //$NON-NLS-1$
-	}
-
-	public void processCommandLineArguments(String[] args, EclipseInstallGeneratorInfoProvider provider) throws Exception {
-		if (args == null)
-			return;
-		for (int i = 0; i < args.length; i++) {
-			// check for args without parameters (i.e., a flag arg)
-
-			if (args[i].equalsIgnoreCase("-publishArtifacts") || args[i].equalsIgnoreCase("-pa")) //$NON-NLS-1$ //$NON-NLS-2$
-				provider.setPublishArtifacts(true);
-
-			if (args[i].equalsIgnoreCase("-publishArtifactRepository") || args[i].equalsIgnoreCase("-par")) //$NON-NLS-1$ //$NON-NLS-2$
-				provider.setPublishArtifactRepository(true);
-
-			if (args[i].equalsIgnoreCase("-append")) //$NON-NLS-1$
-				provider.setAppend(true);
-
-			if (args[i].equalsIgnoreCase("-noDefaultIUs")) //$NON-NLS-1$
-				provider.setAddDefaultIUs(false);
-
-			if (args[i].equalsIgnoreCase("-compress")) //$NON-NLS-1$
-				compress = "true"; //$NON-NLS-1$
-
-			if (args[i].equalsIgnoreCase("-reusePack200Files")) //$NON-NLS-1$
-				provider.reuseExistingPack200Files(true);
-
-			// check for args with parameters. If we are at the last argument or if the next one
-			// has a '-' as the first character, then we can't have an arg with a parm so continue.
-			if (i == args.length - 1 || args[i + 1].startsWith("-")) //$NON-NLS-1$
-				continue;
-			String arg = args[++i];
-
-			if (args[i - 1].equalsIgnoreCase("-source")) { //$NON-NLS-1$
-				operation = args[i - 1];
-				argument = arg;
-			}
-
-			if (args[i - 1].equalsIgnoreCase("-inplace")) { //$NON-NLS-1$
-				operation = args[i - 1];
-				argument = arg;
-			}
-
-			if (args[i - 1].equalsIgnoreCase("-config")) { //$NON-NLS-1$
-				operation = args[i - 1];
-				argument = arg;
-			}
-			if (args[i - 1].equalsIgnoreCase("-updateSite")) { //$NON-NLS-1$
-				operation = args[i - 1];
-				argument = arg;
-			}
-
-			if (args[i - 1].equalsIgnoreCase("-exe")) //$NON-NLS-1$
-				provider.setExecutableLocation(arg);
-
-			if (args[i - 1].equalsIgnoreCase("-launcherConfig")) //$NON-NLS-1$
-				provider.setLauncherConfig(arg);
-
-			if (args[i - 1].equalsIgnoreCase("-metadataRepositoryName")) //$NON-NLS-1$
-				metadataRepoName = arg;
-
-			try {
-				if (args[i - 1].equalsIgnoreCase("-metadataRepository") || args[i - 1].equalsIgnoreCase("-mr")) //$NON-NLS-1$ //$NON-NLS-2$
-					metadataLocation = URIUtil.fromString(arg);
-
-				if (args[i - 1].equalsIgnoreCase("-artifactRepository") | args[i - 1].equalsIgnoreCase("-ar")) //$NON-NLS-1$ //$NON-NLS-2$
-					artifactLocation = URIUtil.fromString(arg);
-
-				if (args[i - 1].equalsIgnoreCase("-site")) //$NON-NLS-1$
-					provider.setSiteLocation(URIUtil.fromString(arg));
-			} catch (URISyntaxException e) {
-				throw new IllegalArgumentException("Repository location (" + arg + ") must be a URL."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-
-			if (args[i - 1].equalsIgnoreCase("-artifactRepositoryName")) //$NON-NLS-1$
-				artifactRepoName = arg;
-
-			if (args[i - 1].equalsIgnoreCase("-flavor")) //$NON-NLS-1$
-				provider.setFlavor(arg);
-
-			if (args[i - 1].equalsIgnoreCase("-productFile")) //$NON-NLS-1$
-				provider.setProductFile(arg);
-
-			if (args[i - 1].equalsIgnoreCase("-features")) //$NON-NLS-1$
-				features = arg;
-
-			if (args[i - 1].equalsIgnoreCase("-bundles")) //$NON-NLS-1$
-				bundles = arg;
-
-			if (args[i - 1].equalsIgnoreCase("-base")) //$NON-NLS-1$
-				base = arg;
-
-			if (args[i - 1].equalsIgnoreCase("-root")) //$NON-NLS-1$
-				provider.setRootId(arg);
-
-			if (args[i - 1].equalsIgnoreCase("-rootVersion")) //$NON-NLS-1$
-				provider.setRootVersion(arg);
-
-			if (args[i - 1].equalsIgnoreCase("-p2.os")) //$NON-NLS-1$
-				provider.setOS(arg);
-
-		}
-	}
-
-	public Object run(String args[]) throws Exception {
-		EclipseInstallGeneratorInfoProvider provider = new EclipseInstallGeneratorInfoProvider();
-		processCommandLineArguments(args, provider);
-		Object result = run(provider);
-		if (result != IApplication.EXIT_OK)
-			for (int i = 0; i < args.length; i++)
-				System.out.println(args[i]);
-		return result;
-	}
-
-	public Object run(EclipseInstallGeneratorInfoProvider provider) throws Exception {
-		initializeAgent();
-		initialize(provider);
-
-		if (provider.getBaseLocation() == null && provider.getProductFile() == null && !generateRootIU) {
-			System.out.println(Messages.exception_baseLocationNotSpecified);
-			return new Integer(-1);
-		}
-
-		// if we asked for artifacts to be published in some form, there must be a repo given
-		if ((provider.publishArtifactRepository() || provider.publishArtifacts()) && provider.getArtifactRepository() == null) {
-			System.out.println(Messages.exception_artifactRepoNotSpecified);
-			return new Integer(-1);
-		}
-
-		if (provider.getMetadataRepository() == null) {
-			System.out.println(Messages.exception_metadataRepoNotSpecified);
-			return new Integer(-1);
-		}
-
-		System.out.println(NLS.bind(Messages.message_generatingMetadata, provider.getBaseLocation()));
-
-		long before = System.currentTimeMillis();
-		IStatus result = generate(provider);
-
-		long after = System.currentTimeMillis();
-		if (result.isOK()) {
-			System.out.println(NLS.bind(Messages.message_generationCompleted, String.valueOf((after - before) / 1000)));
-			return IApplication.EXIT_OK;
-		}
-		System.out.println(result);
-		return new Integer(1);
-	}
-
-	private void initializeAgent() throws ProvisionException {
-		agentRef = Activator.getContext().getServiceReference(IProvisioningAgent.SERVICE_NAME);
-		if (agentRef != null) {
-			agent = (IProvisioningAgent) Activator.getContext().getService(agentRef);
-			if (agent != null)
-				return;
-		}
-		ServiceReference providerRef = Activator.getContext().getServiceReference(IProvisioningAgentProvider.SERVICE_NAME);
-		if (providerRef == null)
-			throw new RuntimeException("No provisioning agent provider is available"); //$NON-NLS-1$
-		IProvisioningAgentProvider provider = (IProvisioningAgentProvider) Activator.getContext().getService(providerRef);
-		if (provider == null)
-			throw new RuntimeException("No provisioning agent provider is available"); //$NON-NLS-1$
-		//obtain agent for currently running system
-		agent = provider.createAgent(null);
-		Activator.getContext().ungetService(providerRef);
-	}
-
-	protected IStatus generate(EclipseInstallGeneratorInfoProvider provider) {
-		Generator generator = new Generator(provider);
-		if (incrementalResult != null)
-			generator.setIncrementalResult(incrementalResult);
-		generator.setGenerateRootIU(generateRootIU);
-		IStatus result = generator.generate();
-		incrementalResult = null;
-		return result;
-	}
-
-	public Object start(IApplicationContext context) throws Exception {
-		return run((String[]) context.getArguments().get("application.args")); //$NON-NLS-1$
-	}
-
-	public void stop() {
-		if (agentRef != null) {
-			Activator.getContext().ungetService(agentRef);
-			agentRef = null;
-		}
-	}
-
-	public void setBase(String base) {
-		this.base = base;
-	}
-
-	public void setArtifactLocation(URI location) {
-		this.artifactLocation = location;
-	}
-
-	public void setBundles(String bundles) {
-		this.bundles = bundles;
-	}
-
-	public void setOperation(String operation, String argument) {
-		this.operation = operation;
-		this.argument = argument;
-	}
-
-	public void setFeatures(String features) {
-		this.features = features;
-	}
-
-	public void setMetadataLocation(URI location) {
-		this.metadataLocation = location;
-	}
-
-	public void setMetadataRepositoryName(String name) {
-		this.metadataRepoName = name;
-	}
-
-	public void setArtifactRepositoryName(String name) {
-		this.artifactRepoName = name;
-	}
-
-	public void setIncrementalResult(Generator.GeneratorResult ius) {
-		this.incrementalResult = ius;
-	}
-
-	public void setGeneratorRootIU(boolean b) {
-		this.generateRootIU = b;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/LocalizationHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/LocalizationHelper.java
deleted file mode 100644
index deeae27..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/LocalizationHelper.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator;
-
-import java.io.*;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.*;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-/**
- * 	Helper functions supporting the processing of localized
- * 	property files.
- *
- */
-public final class LocalizationHelper {
-
-	private static final String PROPERTIES_FILE_EXTENSION = ".properties"; //$NON-NLS-1$
-	private static final Locale DEFAULT_LOCALE = new Locale("df", "LT"); //$NON-NLS-1$//$NON-NLS-2$
-	private static LocalizationHelper instance = new LocalizationHelper();
-
-	// Extract the locale string from the properties file with the given filename
-	// where the locale string follows the given prefix. For example, return "zh_HK"
-	// from filename == "plugin_zh_HK.properties" and prefix == "plugin". 
-	static public String getLocaleString(String filename, String prefix) {
-		String localeString = null;
-		if (filename.startsWith(prefix) && filename.endsWith(PROPERTIES_FILE_EXTENSION)) {
-			if (filename.length() > prefix.length() + PROPERTIES_FILE_EXTENSION.length()) {
-				localeString = filename.substring(prefix.length() + 1, filename.length() - PROPERTIES_FILE_EXTENSION.length());
-			} else {
-				localeString = ""; //$NON-NLS-1$
-			}
-		}
-		return localeString;
-	}
-
-	// Get the locale corresponding to the given locale string
-	static public Locale getLocale(String localeString) {
-		Locale locale = DEFAULT_LOCALE;
-		if (localeString.length() == 5 && localeString.indexOf('_') == 2) {
-			locale = new Locale(localeString.substring(0, 2), localeString.substring(3, 5));
-		} else if (localeString.length() == 2) {
-			locale = new Locale(localeString.substring(0, 2));
-		}
-		return locale;
-	}
-
-	// For the given root directory and path to localization files within that directory
-	// get a map from locale to property set for the localization property files.
-	public static Map getDirPropertyLocalizations(File root, String localizationPath, Locale defaultLocale, String[] propertyKeys) {
-		File fullPath = new File(root, localizationPath);
-		File localizationDir = fullPath.getParentFile();
-		final String localizationFile = fullPath.getName();
-		String[] localizationFiles = LocalizationHelper.getLocalizationFiles(localizationDir, localizationFile);
-
-		HashMap localizations = null;
-
-		if (localizationFiles != null) {
-			localizations = new HashMap(localizationFiles.length);
-			for (int i = 0; i < localizationFiles.length; i++) {
-				String nextFile = localizationFiles[i];
-				Locale nextLocale = getLocale(LocalizationHelper.getLocaleString(nextFile, localizationFile));
-
-				try {
-					Properties properties = loadProperties(root, nextFile);
-					Properties localizedStrings = getLocalizedProperties(propertyKeys, properties);
-					if (localizedStrings.size() > 0) {
-						localizations.put(nextLocale, localizedStrings);
-						if (DEFAULT_LOCALE.equals(nextLocale) && defaultLocale != null) {
-							localizations.put(nextLocale, localizedStrings);
-						}
-					}
-				} catch (IOException ioe) {
-					ioe.printStackTrace();
-				}
-			}
-		}
-
-		return localizations;
-	}
-
-	public static Map getJarPropertyLocalizations(File root, String localizationPath, Locale defaultLocale, String[] propertyKeys) {
-		ZipFile jarFile = null;
-		Map localizations = new HashMap(4);
-		try {
-			jarFile = new ZipFile(root, ZipFile.OPEN_READ);
-			for (Enumeration entries = jarFile.entries(); entries.hasMoreElements();) {
-				ZipEntry nextEntry = (ZipEntry) entries.nextElement();
-				String nextName = nextEntry.getName();
-				String localeString = LocalizationHelper.getLocaleString(nextName, localizationPath);
-
-				if (!nextEntry.isDirectory() && localeString != null) {
-					Locale nextLocale = LocalizationHelper.getLocale(localeString);
-					InputStream stream = null;
-					try {
-						stream = jarFile.getInputStream(nextEntry);
-						Properties properties = new Properties();
-						properties.load(stream);
-						Properties localizedStrings = LocalizationHelper.getLocalizedProperties(propertyKeys, properties);
-						if (localizedStrings.size() > 0) {
-							localizations.put(nextLocale, localizedStrings);
-							if (DEFAULT_LOCALE.equals(nextLocale) && defaultLocale != null) {
-								localizations.put(nextLocale, localizedStrings);
-							}
-						}
-					} finally {
-						if (stream != null)
-							stream.close();
-					}
-				}
-			}
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		} finally {
-			if (jarFile != null) {
-				try {
-					jarFile.close();
-				} catch (IOException ioe) {
-					// do nothing
-				}
-			}
-		}
-
-		return localizations;
-	}
-
-	// Load a property set from given root and file with the given name
-	private static Properties loadProperties(File root, String propertyFilename) throws IOException {
-		Properties result = new Properties();
-		InputStream propertyStream = null;
-		try {
-			try {
-				if (root.isDirectory())
-					propertyStream = new FileInputStream(new File(root, propertyFilename));
-				else {
-					URLConnection connection = new URL("jar:" + root.toURL().toExternalForm() + "!/" + propertyFilename).openConnection(); //$NON-NLS-1$ //$NON-NLS-2$
-					connection.setUseCaches(false);
-					propertyStream = connection.getInputStream();
-				}
-			} catch (FileNotFoundException e) {
-				// if there is no messages file then just return;
-				return result;
-			}
-			result.load(propertyStream);
-		} finally {
-			if (propertyStream != null)
-				propertyStream.close();
-		}
-		return result;
-	}
-
-	// Given a list of keys and the corresponding localized property set,
-	// return a new property set with those keys and the localized values. 
-	static public Properties getLocalizedProperties(String[] propertyKeys, Properties properties) {
-		Properties localizedProperties = new Properties();
-		for (int i = 0; i < propertyKeys.length; i++) {
-			String key = propertyKeys[i];
-			if (key != null) {
-				String localizedValue = properties.getProperty(key);
-				if (localizedValue != null)
-					localizedProperties.put(key, localizedValue);
-			}
-		}
-		return localizedProperties;
-	}
-
-	public static String[] getLocalizationFiles(File localizationDir, final String filenamePrefix) {
-		return localizationDir.list(instance.new FileFilter() {
-			public boolean accept(File directory, String filename) {
-				return (getLocaleString(filename, filenamePrefix) != null ? true : false);
-			}
-		});
-	}
-
-	private abstract class FileFilter implements FilenameFilter {
-
-		public FileFilter() {
-			// Nothing to do
-		}
-
-		/* (non-Javadoc)
-		 * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
-		 */
-		public abstract boolean accept(File directory, String filename);
-	}
-
-	private LocalizationHelper() {
-		//
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/Messages.java
deleted file mode 100644
index 8663c54..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/Messages.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: IBM Corporation - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.metadata.generator.messages";//$NON-NLS-1$
-
-	public static String exception_errorConverting;
-	public static String exception_errorParsingUpdateSite;
-	public static String exception_stateAddition;
-	public static String exception_sourceDirectoryInvalid;
-	public static String exception_artifactRepoNotWritable;
-	public static String exception_artifactRepoNotSpecified;
-	public static String exception_metadataRepoNotWritable;
-	public static String exception_metadataRepoNotSpecified;
-	public static String exception_baseLocationNotSpecified;
-	public static String exception_artifactRepoNoAppendDestroysInput;
-
-	public static String message_generatingMetadata;
-	public static String message_generationCompleted;
-
-	static {
-		// load message values from bundle file
-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java
deleted file mode 100644
index 6e9a293..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator;
-
-import java.io.*;
-import java.util.*;
-import org.eclipse.equinox.internal.p2.metadata.generator.features.ProductFile;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.Generator.GeneratorResult;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.MetadataGeneratorHelper;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.query.MatchQuery;
-
-public class ProductQuery extends MatchQuery {
-	private static final String EQUINOX_LAUNCHER = "org.eclipse.equinox.launcher"; //$NON-NLS-1$
-
-	private final ProductFile product;
-	private final String flavor;
-	private final Map children = new HashMap();
-	private final String versionAdvice;
-
-	public ProductQuery(ProductFile product, String flavor, Map configIUs, String versionAdvice) {
-		this.product = product;
-		this.flavor = flavor;
-		this.versionAdvice = versionAdvice;
-		initialize(configIUs);
-	}
-
-	private Properties loadVersions(String location) {
-		Properties properties = new Properties();
-		if (location == null)
-			return properties;
-		File file = new File(location);
-		if (file.exists()) {
-			InputStream stream = null;
-			try {
-				stream = new BufferedInputStream(new FileInputStream(file));
-				properties.load(stream);
-			} catch (IOException e) {
-				// nothing
-			} finally {
-				if (stream != null)
-					try {
-						stream.close();
-					} catch (IOException e) {
-						//nothing
-					}
-			}
-		}
-		return properties;
-	}
-
-	private void initialize(Map configIUs) {
-		boolean features = product.useFeatures();
-		Properties versions = loadVersions(versionAdvice);
-
-		List contents = features ? product.getFeatures() : product.getPlugins();
-		for (Iterator iterator = contents.iterator(); iterator.hasNext();) {
-			String item = (String) iterator.next();
-
-			VersionRange range = VersionRange.emptyRange;
-			if (versions.containsKey(item)) {
-				Version value = Version.create(versions.getProperty(item));
-				range = new VersionRange(value, true, value, true);
-			}
-
-			if (features) // for features we want the group
-				item = MetadataGeneratorHelper.getTransformedId(item, false, true);
-
-			children.put(item, range);
-			if (configIUs.containsKey(item)) {
-				for (Iterator ius = ((Set) configIUs.get(item)).iterator(); ius.hasNext();) {
-					IInstallableUnit object = (IInstallableUnit) ius.next();
-					children.put(object.getId(), new VersionRange(object.getVersion(), true, object.getVersion(), true));
-				}
-			}
-		}
-
-		//also include the launcher CU fragments as a workaround to bug 218890
-		String launcherPrefix = product.getId() + ".launcher"; //$NON-NLS-1$
-		if (configIUs.containsKey(launcherPrefix)) {
-			for (Iterator ius = ((Set) configIUs.get(launcherPrefix)).iterator(); ius.hasNext();) {
-				IInstallableUnit object = (IInstallableUnit) ius.next();
-				children.put(object.getId(), new VersionRange(object.getVersion(), true, object.getVersion(), true));
-			}
-		}
-
-		//also add the launcher.jar
-		if (!children.containsKey(EQUINOX_LAUNCHER)) {
-			children.put(EQUINOX_LAUNCHER, VersionRange.emptyRange);
-			children.put(flavor + EQUINOX_LAUNCHER, VersionRange.emptyRange);
-		}
-
-		// and launcher fragment CUs
-		if (configIUs.containsKey(EQUINOX_LAUNCHER)) {
-			for (Iterator ius = ((Set) configIUs.get(EQUINOX_LAUNCHER)).iterator(); ius.hasNext();) {
-				IInstallableUnit object = (IInstallableUnit) ius.next();
-				children.put(object.getId(), new VersionRange(object.getVersion(), true, object.getVersion(), true));
-			}
-		}
-
-		// feature based product, individual bundle config CUs are under CONFIGURATION_CUS for convenience
-		if (features && configIUs.containsKey(GeneratorResult.CONFIGURATION_CUS)) {
-			for (Iterator ius = ((Set) configIUs.get(GeneratorResult.CONFIGURATION_CUS)).iterator(); ius.hasNext();) {
-				IInstallableUnit object = (IInstallableUnit) ius.next();
-				children.put(object.getId(), new VersionRange(object.getVersion(), true, object.getVersion(), true));
-			}
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.query.Query#isMatch(java.lang.Object)
-	 */
-	public boolean isMatch(Object object) {
-		if (!(object instanceof IInstallableUnit))
-			return false;
-
-		IInstallableUnit candidate = (IInstallableUnit) object;
-		VersionRange range = (VersionRange) children.get(candidate.getId());
-		if (range != null) {
-			return range.isIncluded(candidate.getVersion());
-		}
-
-		return false;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/DefaultSiteParser.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/DefaultSiteParser.java
deleted file mode 100644
index 6552f56..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/DefaultSiteParser.java
+++ /dev/null
@@ -1,731 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.features;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.*;
-import javax.xml.parsers.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.core.helpers.Tracing;
-import org.eclipse.equinox.internal.p2.metadata.repository.Activator;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.URLEntry;
-import org.eclipse.osgi.util.NLS;
-import org.w3c.dom.*;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Parses a site.xml file.
- * This class was initially copied from org.eclipse.update.core.model.DefaultSiteParser.
- */
-public class DefaultSiteParser extends DefaultHandler {
-
-	private static final String ARCHIVE = "archive"; //$NON-NLS-1$
-	private static final String CATEGORY = "category"; //$NON-NLS-1$
-	private static final String CATEGORY_DEF = "category-def"; //$NON-NLS-1$
-
-	private static final String ASSOCIATE_SITES_URL = "associateSitesURL"; //$NON-NLS-1$
-	private static final String ASSOCIATE_SITE = "associateSite"; //$NON-NLS-1$
-	private static final String DEFAULT_INFO_URL = "index.html"; //$NON-NLS-1$
-	private static final String DESCRIPTION = "description"; //$NON-NLS-1$
-	private static final String FEATURE = "feature"; //$NON-NLS-1$
-	private static final String FEATURES = "features/"; //$NON-NLS-1$
-	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-	private static final String PLUGIN_ID = Activator.ID;
-	private static final String SITE = "site"; //$NON-NLS-1$
-
-	private static final int STATE_ARCHIVE = 3;
-	private static final int STATE_CATEGORY = 4;
-	private static final int STATE_CATEGORY_DEF = 5;
-	private static final int STATE_DESCRIPTION_CATEGORY_DEF = 7;
-	private static final int STATE_DESCRIPTION_SITE = 6;
-	private static final int STATE_FEATURE = 2;
-	private static final int STATE_IGNORED_ELEMENT = -1;
-	private static final int STATE_INITIAL = 0;
-	private static final int STATE_SITE = 1;
-
-	private int currentState;
-
-	private boolean DESCRIPTION_SITE_ALREADY_SEEN = false;
-	// Current object stack (used to hold the current object we are
-	// populating in this plugin descriptor
-	Stack objectStack = new Stack();
-
-	private SAXParser parser;
-
-	// Current State Information
-	Stack stateStack = new Stack();
-
-	// List of string keys for translated strings
-	private final List messageKeys = new ArrayList(4);
-
-	private MultiStatus status;
-
-	/*
-	 * 
-	 */
-	private static void debug(String s) {
-		Tracing.debug("DefaultSiteParser: " + s); //$NON-NLS-1$
-	}
-
-	private static URLEntry[] getAssociateSites(String associateSitesURL) {
-
-		try {
-			DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
-			DocumentBuilder builder = domFactory.newDocumentBuilder();
-			Document document = builder.parse(associateSitesURL);
-			if (document == null)
-				return null;
-			NodeList mirrorNodes = document.getElementsByTagName(ASSOCIATE_SITE);
-			URLEntry[] mirrors = new URLEntry[mirrorNodes.getLength()];
-			for (int i = 0; i < mirrorNodes.getLength(); i++) {
-				Element mirrorNode = (Element) mirrorNodes.item(i);
-				mirrors[i] = new URLEntry();
-				String infoURL = mirrorNode.getAttribute("url"); //$NON-NLS-1$
-				String label = mirrorNode.getAttribute("label"); //$NON-NLS-1$
-				mirrors[i].setURL(infoURL);
-				mirrors[i].setAnnotation(label);
-
-				if (Tracing.DEBUG_GENERATOR_PARSING)
-					debug("Processed mirror: url:" + infoURL + " label:" + label); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			return mirrors;
-		} catch (Exception e) {
-			// log if absolute url
-			if (associateSitesURL != null && (associateSitesURL.startsWith("http://") //$NON-NLS-1$
-					|| associateSitesURL.startsWith("https://") //$NON-NLS-1$
-					|| associateSitesURL.startsWith("file://") //$NON-NLS-1$
-					|| associateSitesURL.startsWith("ftp://") //$NON-NLS-1$
-			|| associateSitesURL.startsWith("jar://"))) //$NON-NLS-1$
-				log(Messages.DefaultSiteParser_mirrors, e);
-			return null;
-		}
-	}
-
-	static void log(Exception e) {
-		LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Internal Error", e)); //$NON-NLS-1$
-	}
-
-	static void log(String message) {
-		LogHelper.log(new Status(IStatus.WARNING, Activator.ID, message, null));
-	}
-
-	static void log(String message, Exception e) {
-		LogHelper.log(new Status(IStatus.WARNING, Activator.ID, message, e));
-	}
-
-	/**
-	 * Constructs a site parser.
-	 */
-	public DefaultSiteParser() {
-		super();
-		stateStack = new Stack();
-		objectStack = new Stack();
-		status = null;
-		DESCRIPTION_SITE_ALREADY_SEEN = false;
-		try {
-			parserFactory.setNamespaceAware(true);
-			this.parser = parserFactory.newSAXParser();
-		} catch (ParserConfigurationException e) {
-			log(e);
-		} catch (SAXException e) {
-			log(e);
-		}
-
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			debug("Created"); //$NON-NLS-1$
-	}
-
-	/**
-	 * Handle character text
-	 * @see DefaultHandler#characters(char[], int, int)
-	 * @since 2.0
-	 */
-	public void characters(char[] ch, int start, int length) {
-		String text = new String(ch, start, length);
-		//only push if description
-		int state = ((Integer) stateStack.peek()).intValue();
-		if (state == STATE_DESCRIPTION_SITE || state == STATE_DESCRIPTION_CATEGORY_DEF)
-			objectStack.push(text);
-
-	}
-
-	/**
-	 * Handle end of element tags
-	 * @see DefaultHandler#endElement(String, String, String)
-	 * @since 2.0
-	 */
-	public void endElement(String uri, String localName, String qName) {
-
-		String text = null;
-		URLEntry info = null;
-
-		int state = ((Integer) stateStack.peek()).intValue();
-		switch (state) {
-			case STATE_IGNORED_ELEMENT :
-			case STATE_ARCHIVE :
-			case STATE_CATEGORY :
-				stateStack.pop();
-				break;
-
-			case STATE_INITIAL :
-				internalError(Messages.DefaultSiteParser_ParsingStackBackToInitialState);
-				break;
-
-			case STATE_SITE :
-				stateStack.pop();
-				if (objectStack.peek() instanceof String) {
-					text = (String) objectStack.pop();
-					SiteModel site = (SiteModel) objectStack.peek();
-					site.getDescription().setAnnotation(text);
-				}
-				//do not pop the object
-				break;
-
-			case STATE_FEATURE :
-				stateStack.pop();
-				objectStack.pop();
-				break;
-
-			case STATE_CATEGORY_DEF :
-				stateStack.pop();
-				if (objectStack.peek() instanceof String) {
-					text = (String) objectStack.pop();
-					SiteCategory category = (SiteCategory) objectStack.peek();
-					category.setDescription(text);
-				}
-				objectStack.pop();
-				break;
-
-			case STATE_DESCRIPTION_SITE :
-				stateStack.pop();
-				text = ""; //$NON-NLS-1$
-				while (objectStack.peek() instanceof String) {
-					// add text, preserving at most one space between text fragments
-					String newText = (String) objectStack.pop();
-					if (trailingSpace(newText) && !leadingSpace(text)) {
-						text = " " + text; //$NON-NLS-1$
-					}
-					text = newText.trim() + text;
-					if (leadingSpace(newText) && !leadingSpace(text)) {
-						text = " " + text; //$NON-NLS-1$
-					}
-				}
-				text = text.trim();
-
-				info = (URLEntry) objectStack.pop();
-				if (text != null)
-					info.setAnnotation(text);
-
-				SiteModel siteModel = (SiteModel) objectStack.peek();
-				// override description.
-				// do not raise error as previous description may be default one
-				// when parsing site tag
-				if (DESCRIPTION_SITE_ALREADY_SEEN)
-					debug(NLS.bind(Messages.DefaultSiteParser_ElementAlreadySet, (new String[] {getState(state)})));
-				siteModel.setDescription(info);
-				DESCRIPTION_SITE_ALREADY_SEEN = true;
-				break;
-
-			case STATE_DESCRIPTION_CATEGORY_DEF :
-				stateStack.pop();
-				text = ""; //$NON-NLS-1$
-				while (objectStack.peek() instanceof String) {
-					// add text, preserving at most one space between text fragments
-					String newText = (String) objectStack.pop();
-					if (trailingSpace(newText) && !leadingSpace(text)) {
-						text = " " + text; //$NON-NLS-1$
-					}
-					text = newText.trim() + text;
-					if (leadingSpace(newText) && !leadingSpace(text)) {
-						text = " " + text; //$NON-NLS-1$
-					}
-				}
-				text = text.trim();
-
-				info = (URLEntry) objectStack.pop();
-				if (text != null)
-					info.setAnnotation(text);
-
-				SiteCategory category = (SiteCategory) objectStack.peek();
-				if (category.getDescription() != null)
-					internalError(NLS.bind(Messages.DefaultSiteParser_ElementAlreadySet, (new String[] {getState(state), category.getLabel()})));
-				else
-					category.setDescription(info.getAnnotation());
-				break;
-
-			default :
-				internalError(NLS.bind(Messages.DefaultSiteParser_UnknownEndState, (new String[] {getState(state)})));
-				break;
-		}
-
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			debug("End Element:" + uri + ":" + localName + ":" + qName);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	}
-
-	/*
-	 * Handles an error state specified by the status.  The collection of all logged status
-	 * objects can be accessed using <code>getStatus()</code>.
-	 *
-	 * @param error a status detailing the error condition
-	 */
-	private void error(IStatus error) {
-
-		if (status == null) {
-			status = new MultiStatus(PLUGIN_ID, 0, Messages.DefaultSiteParser_ErrorParsingSite, null);
-		}
-
-		status.add(error);
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			LogHelper.log(error);
-	}
-
-	/**
-	 * Handle errors
-	 * @see DefaultHandler#error(SAXParseException)
-	 * @since 2.0
-	 */
-	public void error(SAXParseException ex) {
-		logStatus(ex);
-	}
-
-	/**
-	 * Handle fatal errors
-	 * @see DefaultHandler#fatalError(SAXParseException)
-	 * @exception SAXException
-	 * @since 2.0
-	 */
-	public void fatalError(SAXParseException ex) throws SAXException {
-		logStatus(ex);
-		throw ex;
-	}
-
-	/*
-	 * return the state as String
-	 */
-	private String getState(int state) {
-
-		switch (state) {
-			case STATE_IGNORED_ELEMENT :
-				return "Ignored"; //$NON-NLS-1$
-
-			case STATE_INITIAL :
-				return "Initial"; //$NON-NLS-1$
-
-			case STATE_SITE :
-				return "Site"; //$NON-NLS-1$
-
-			case STATE_FEATURE :
-				return "Feature"; //$NON-NLS-1$
-
-			case STATE_ARCHIVE :
-				return "Archive"; //$NON-NLS-1$
-
-			case STATE_CATEGORY :
-				return "Category"; //$NON-NLS-1$
-
-			case STATE_CATEGORY_DEF :
-				return "Category Def"; //$NON-NLS-1$
-
-			case STATE_DESCRIPTION_CATEGORY_DEF :
-				return "Description / Category Def"; //$NON-NLS-1$
-
-			case STATE_DESCRIPTION_SITE :
-				return "Description / Site"; //$NON-NLS-1$
-
-			default :
-				return Messages.DefaultSiteParser_UnknownState;
-		}
-	}
-
-	/**
-	 * Returns all status objects accumulated by the parser.
-	 *
-	 * @return multi-status containing accumulated status, or <code>null</code>.
-	 * @since 2.0
-	 */
-	public MultiStatus getStatus() {
-		return status;
-	}
-
-	private void handleCategoryDefState(String elementName, Attributes attributes) {
-		if (elementName.equals(FEATURE)) {
-			stateStack.push(new Integer(STATE_FEATURE));
-			processFeature(attributes);
-		} else if (elementName.equals(ARCHIVE)) {
-			stateStack.push(new Integer(STATE_ARCHIVE));
-			processArchive(attributes);
-		} else if (elementName.equals(CATEGORY_DEF)) {
-			stateStack.push(new Integer(STATE_CATEGORY_DEF));
-			processCategoryDef(attributes);
-		} else if (elementName.equals(DESCRIPTION)) {
-			stateStack.push(new Integer(STATE_DESCRIPTION_CATEGORY_DEF));
-			processInfo(attributes);
-		} else
-			internalErrorUnknownTag(NLS.bind(Messages.DefaultSiteParser_UnknownElement, (new String[] {elementName, getState(currentState)})));
-	}
-
-	private void handleCategoryState(String elementName, Attributes attributes) {
-		if (elementName.equals(DESCRIPTION)) {
-			stateStack.push(new Integer(STATE_DESCRIPTION_SITE));
-			processInfo(attributes);
-		} else if (elementName.equals(FEATURE)) {
-			stateStack.push(new Integer(STATE_FEATURE));
-			processFeature(attributes);
-		} else if (elementName.equals(ARCHIVE)) {
-			stateStack.push(new Integer(STATE_ARCHIVE));
-			processArchive(attributes);
-		} else if (elementName.equals(CATEGORY_DEF)) {
-			stateStack.push(new Integer(STATE_CATEGORY_DEF));
-			processCategoryDef(attributes);
-		} else if (elementName.equals(CATEGORY)) {
-			stateStack.push(new Integer(STATE_CATEGORY));
-			processCategory(attributes);
-		} else
-			internalErrorUnknownTag(NLS.bind(Messages.DefaultSiteParser_UnknownElement, (new String[] {elementName, getState(currentState)})));
-	}
-
-	private void handleFeatureState(String elementName, Attributes attributes) {
-		if (elementName.equals(DESCRIPTION)) {
-			stateStack.push(new Integer(STATE_DESCRIPTION_SITE));
-			processInfo(attributes);
-		} else if (elementName.equals(FEATURE)) {
-			stateStack.push(new Integer(STATE_FEATURE));
-			processFeature(attributes);
-		} else if (elementName.equals(ARCHIVE)) {
-			stateStack.push(new Integer(STATE_ARCHIVE));
-			processArchive(attributes);
-		} else if (elementName.equals(CATEGORY_DEF)) {
-			stateStack.push(new Integer(STATE_CATEGORY_DEF));
-			processCategoryDef(attributes);
-		} else if (elementName.equals(CATEGORY)) {
-			stateStack.push(new Integer(STATE_CATEGORY));
-			processCategory(attributes);
-		} else
-			internalErrorUnknownTag(NLS.bind(Messages.DefaultSiteParser_UnknownElement, (new String[] {elementName, getState(currentState)})));
-	}
-
-	private void handleInitialState(String elementName, Attributes attributes) throws SAXException {
-		if (elementName.equals(SITE)) {
-			stateStack.push(new Integer(STATE_SITE));
-			processSite(attributes);
-		} else {
-			internalErrorUnknownTag(NLS.bind(Messages.DefaultSiteParser_UnknownElement, (new String[] {elementName, getState(currentState)})));
-			// what we received was not a site.xml, no need to continue
-			throw new SAXException(Messages.DefaultSiteParser_InvalidXMLStream);
-		}
-
-	}
-
-	private void handleSiteState(String elementName, Attributes attributes) {
-		if (elementName.equals(DESCRIPTION)) {
-			stateStack.push(new Integer(STATE_DESCRIPTION_SITE));
-			processInfo(attributes);
-		} else if (elementName.equals(FEATURE)) {
-			stateStack.push(new Integer(STATE_FEATURE));
-			processFeature(attributes);
-		} else if (elementName.equals(ARCHIVE)) {
-			stateStack.push(new Integer(STATE_ARCHIVE));
-			processArchive(attributes);
-		} else if (elementName.equals(CATEGORY_DEF)) {
-			stateStack.push(new Integer(STATE_CATEGORY_DEF));
-			processCategoryDef(attributes);
-		} else
-			internalErrorUnknownTag(NLS.bind(Messages.DefaultSiteParser_UnknownElement, (new String[] {elementName, getState(currentState)})));
-	}
-
-	/*
-	 * 
-	 */
-	private void internalError(String message) {
-		error(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, message, null));
-	}
-
-	/*
-	 * 
-	 */
-	private void internalErrorUnknownTag(String msg) {
-		stateStack.push(new Integer(STATE_IGNORED_ELEMENT));
-		internalError(msg);
-	}
-
-	private boolean leadingSpace(String str) {
-		if (str.length() <= 0) {
-			return false;
-		}
-		return Character.isWhitespace(str.charAt(0));
-	}
-
-	/*
-	 * 
-	 */
-	private void logStatus(SAXParseException ex) {
-		String name = ex.getSystemId();
-		if (name == null)
-			name = ""; //$NON-NLS-1$
-		else
-			name = name.substring(1 + name.lastIndexOf("/")); //$NON-NLS-1$
-
-		String msg;
-		if (name.equals("")) //$NON-NLS-1$
-			msg = NLS.bind(Messages.DefaultSiteParser_ErrorParsing, (new String[] {ex.getMessage()}));
-		else {
-			String[] values = new String[] {name, Integer.toString(ex.getLineNumber()), Integer.toString(ex.getColumnNumber()), ex.getMessage()};
-			msg = NLS.bind(Messages.DefaultSiteParser_ErrorlineColumnMessage, values);
-		}
-		error(new Status(IStatus.ERROR, PLUGIN_ID, msg, ex));
-	}
-
-	/**
-	 * Parses the specified input steam and constructs a site model.
-	 * The input stream is not closed as part of this operation.
-	 * 
-	 * @param in input stream
-	 * @return site model
-	 * @exception SAXException
-	 * @exception IOException
-	 * @since 2.0
-	 */
-	public SiteModel parse(InputStream in) throws SAXException, IOException {
-		stateStack.push(new Integer(STATE_INITIAL));
-		currentState = ((Integer) stateStack.peek()).intValue();
-		parser.parse(new InputSource(in), this);
-		if (objectStack.isEmpty())
-			throw new SAXException(Messages.DefaultSiteParser_NoSiteTag);
-		if (objectStack.peek() instanceof SiteModel) {
-			SiteModel site = (SiteModel) objectStack.pop();
-			site.setMessageKeys(messageKeys);
-			return site;
-		}
-		String stack = ""; //$NON-NLS-1$
-		Iterator iter = objectStack.iterator();
-		while (iter.hasNext()) {
-			stack = stack + iter.next().toString() + "\r\n"; //$NON-NLS-1$
-		}
-		throw new SAXException(NLS.bind(Messages.DefaultSiteParser_WrongParsingStack, (new String[] {stack})));
-	}
-
-	/* 
-	 * process archive info
-	 */
-	private void processArchive(Attributes attributes) {
-		URLEntry archive = new URLEntry();
-		String id = attributes.getValue("path"); //$NON-NLS-1$
-		if (id == null || id.trim().equals("")) { //$NON-NLS-1$
-			internalError(NLS.bind(Messages.DefaultSiteParser_Missing, (new String[] {"path", getState(currentState)}))); //$NON-NLS-1$
-		}
-
-		archive.setAnnotation(id);
-
-		String url = attributes.getValue("url"); //$NON-NLS-1$
-		if (url == null || url.trim().equals("")) { //$NON-NLS-1$
-			internalError(NLS.bind(Messages.DefaultSiteParser_Missing, (new String[] {"archive", getState(currentState)}))); //$NON-NLS-1$
-		} else {
-			archive.setURL(url);
-
-			SiteModel site = (SiteModel) objectStack.peek();
-			site.addArchive(archive);
-		}
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			debug("End processing Archive: path:" + id + " url:" + url);//$NON-NLS-1$ //$NON-NLS-2$
-
-	}
-
-	/* 
-	 * process the Category  info
-	 */
-	private void processCategory(Attributes attributes) {
-		String category = attributes.getValue("name"); //$NON-NLS-1$
-		SiteFeature feature = (SiteFeature) objectStack.peek();
-		feature.addCategoryName(category);
-
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			debug("End processing Category: name:" + category); //$NON-NLS-1$
-	}
-
-	/* 
-	 * process category def info
-	 */
-	private void processCategoryDef(Attributes attributes) {
-		SiteCategory category = new SiteCategory();
-		String name = attributes.getValue("name"); //$NON-NLS-1$
-		String label = attributes.getValue("label"); //$NON-NLS-1$
-		checkTranslated(label);
-		category.setName(name);
-		category.setLabel(label);
-
-		SiteModel site = (SiteModel) objectStack.peek();
-		site.addCategory(category);
-		objectStack.push(category);
-
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			debug("End processing CategoryDef: name:" + name + " label:" + label); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	/* 
-	 * process feature info
-	 */
-	private void processFeature(Attributes attributes) {
-		SiteFeature feature = new SiteFeature();
-
-		// feature location on the site
-		String urlInfo = attributes.getValue("url"); //$NON-NLS-1$
-		// identifier and version
-		String id = attributes.getValue("id"); //$NON-NLS-1$
-		String ver = attributes.getValue("version"); //$NON-NLS-1$
-
-		boolean noURL = (urlInfo == null || urlInfo.trim().equals("")); //$NON-NLS-1$
-		boolean noId = (id == null || id.trim().equals("")); //$NON-NLS-1$
-		boolean noVersion = (ver == null || ver.trim().equals("")); //$NON-NLS-1$
-
-		// We need to have id and version, or the url, or both.
-		if (noURL) {
-			if (noId || noVersion)
-				internalError(NLS.bind(Messages.DefaultSiteParser_Missing, (new String[] {"url", getState(currentState)}))); //$NON-NLS-1$
-			else
-				// default url
-				urlInfo = FEATURES + id + '_' + ver; // 
-		}
-
-		feature.setURLString(urlInfo);
-
-		// if one is null, and not the other
-		if (noId ^ noVersion) {
-			String[] values = new String[] {id, ver, getState(currentState)};
-			log(NLS.bind(Messages.DefaultFeatureParser_IdOrVersionInvalid, values));
-		} else {
-			feature.setFeatureIdentifier(id);
-			feature.setFeatureVersion(ver);
-		}
-
-		SiteModel site = (SiteModel) objectStack.peek();
-		site.addFeature(feature);
-
-		objectStack.push(feature);
-
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			debug("End Processing DefaultFeature Tag: url:" + urlInfo); //$NON-NLS-1$
-
-	}
-
-	/* 
-	 * process URL info with element text
-	 */
-	private void processInfo(Attributes attributes) {
-		URLEntry inf = new URLEntry();
-		String infoURL = attributes.getValue("url"); //$NON-NLS-1$
-		inf.setURL(infoURL);
-
-		if (Tracing.DEBUG_GENERATOR_PARSING)
-			debug("Processed Info: url:" + infoURL); //$NON-NLS-1$
-
-		objectStack.push(inf);
-	}
-
-	/* 
-	 * process site info
-	 */
-	private void processSite(Attributes attributes) {
-		// create site map
-		SiteModel site = new SiteModel();
-
-		// provide default description URL
-		// If <description> is specified, for the site,  it takes precedence		
-		URLEntry description = new URLEntry();
-		description.setURL(DEFAULT_INFO_URL);
-		site.setDescription(description);
-
-		// get mirrors, if any
-		String mirrorsURL = attributes.getValue("mirrorsURL"); //$NON-NLS-1$
-		if (mirrorsURL != null && mirrorsURL.trim().length() > 0) {
-			site.setMirrorsURLString(mirrorsURL);
-		}
-
-		if (attributes.getValue(ASSOCIATE_SITES_URL) != null)
-			site.setAssociateSites(getAssociateSites(attributes.getValue(ASSOCIATE_SITES_URL)));
-
-		objectStack.push(site);
-	}
-
-	/**
-	 * Handle start of element tags
-	 * @see DefaultHandler#startElement(String, String, String, Attributes)
-	 * @since 2.0
-	 */
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-
-		if (Tracing.DEBUG_GENERATOR_PARSING) {
-			debug("State: " + currentState); //$NON-NLS-1$
-			debug("Start Element: uri:" + uri + " local Name:" + localName + " qName:" + qName);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-
-		switch (currentState) {
-			case STATE_IGNORED_ELEMENT :
-				internalErrorUnknownTag(NLS.bind(Messages.DefaultSiteParser_UnknownElement, (new String[] {localName, getState(currentState)})));
-				break;
-			case STATE_INITIAL :
-				handleInitialState(localName, attributes);
-				break;
-
-			case STATE_SITE :
-				handleSiteState(localName, attributes);
-				break;
-
-			case STATE_FEATURE :
-				handleFeatureState(localName, attributes);
-				break;
-
-			case STATE_ARCHIVE :
-				handleSiteState(localName, attributes);
-				break;
-
-			case STATE_CATEGORY :
-				handleCategoryState(localName, attributes);
-				break;
-
-			case STATE_CATEGORY_DEF :
-				handleCategoryDefState(localName, attributes);
-				break;
-
-			case STATE_DESCRIPTION_SITE :
-				handleSiteState(localName, attributes);
-				break;
-
-			case STATE_DESCRIPTION_CATEGORY_DEF :
-				handleSiteState(localName, attributes);
-				break;
-
-			default :
-				internalErrorUnknownTag(NLS.bind(Messages.DefaultSiteParser_UnknownStartState, (new String[] {getState(currentState)})));
-				break;
-		}
-		int newState = ((Integer) stateStack.peek()).intValue();
-		if (newState != STATE_IGNORED_ELEMENT)
-			currentState = newState;
-
-	}
-
-	private boolean trailingSpace(String str) {
-		if (str.length() <= 0) {
-			return false;
-		}
-		return Character.isWhitespace(str.charAt(str.length() - 1));
-	}
-
-	// Add translatable strings from the site.xml
-	// to the list of message keys.
-	private void checkTranslated(String value) {
-		if (value != null && value.length() > 1 && value.startsWith("%")) //$NON-NLS-1$
-			messageKeys.add(value.substring(1));
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/FeatureParser.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/FeatureParser.java
deleted file mode 100644
index c6a0627..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/FeatureParser.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.features;
-
-import java.io.*;
-import java.net.URL;
-import java.util.*;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import javax.xml.parsers.*;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.metadata.generator.Activator;
-import org.eclipse.equinox.internal.p2.metadata.generator.LocalizationHelper;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.Feature;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.FeatureEntry;
-import org.eclipse.osgi.util.NLS;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Default feature parser.
- * Parses the feature manifest file as defined by the platform.
- * 
- * @since 3.0
- */
-public class FeatureParser extends DefaultHandler {
-
-	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-	private SAXParser parser;
-	protected Feature result;
-	private URL url;
-	private StringBuffer characters = null;
-
-	private Properties messages = null;
-	private List messageKeys = null;
-
-	public FeatureParser() {
-		this(true);
-	}
-
-	protected FeatureParser(boolean createParser) {
-		super();
-		if (!createParser)
-			return;
-		try {
-			parserFactory.setNamespaceAware(true);
-			this.parser = parserFactory.newSAXParser();
-		} catch (ParserConfigurationException e) {
-			System.out.println(e);
-		} catch (SAXException e) {
-			System.out.println(e);
-		}
-	}
-
-	public void characters(char[] ch, int start, int length) throws SAXException {
-		if (characters == null)
-			return;
-		characters.append(ch, start, length);
-	}
-
-	protected Feature createFeature(String id, String version) {
-		return new Feature(id, version);
-	}
-
-	public void endElement(String uri, String localName, String qName) throws SAXException {
-		if (characters == null)
-			return;
-		if ("description".equals(localName)) { //$NON-NLS-1$
-			result.setDescription(localize(characters.toString().trim()));
-		} else if ("license".equals(localName)) { //$NON-NLS-1$
-			result.setLicense(localize(characters.toString().trim()));
-		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
-			result.setCopyright(localize(characters.toString().trim()));
-		}
-		characters = null;
-	}
-
-	private void loadProperties(File directory, Properties properties) {
-		//skip directories that don't contain a feature.properties file
-		File file = new File(directory, "feature.properties"); //$NON-NLS-1$
-		if (!file.exists())
-			return;
-		try {
-			InputStream input = new BufferedInputStream(new FileInputStream(file));
-			try {
-				properties.load(input);
-			} finally {
-				if (input != null)
-					input.close();
-			}
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	private void loadProperties(JarFile jar, Properties properties) {
-		JarEntry entry = jar.getJarEntry("feature.properties"); //$NON-NLS-1$
-		if (entry == null)
-			return;
-		try {
-			InputStream input = new BufferedInputStream(jar.getInputStream(entry));
-			try {
-				properties.load(input);
-			} finally {
-				if (input != null)
-					input.close();
-			}
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	private String localize(String value) {
-		if (messages == null || value == null)
-			return value;
-		if (!value.startsWith("%")) //$NON-NLS-1$
-			return value;
-		String key = value.substring(1);
-		messageKeys.add(key);
-		return value;
-	}
-
-	/**
-	 * Parses the specified location and constructs a feature. The given location 
-	 * should be either the location of the feature JAR or the directory containing
-	 * the feature.
-	 * 
-	 * @param location the location of the feature to parse.  
-	 */
-	public Feature parse(File location) {
-		if (!location.exists())
-			return null;
-
-		Feature feature = null;
-		Properties properties = new Properties();
-
-		if (location.isDirectory()) {
-			//skip directories that don't contain a feature.xml file
-			File file = new File(location, "feature.xml"); //$NON-NLS-1$
-			if (!file.exists())
-				return null;
-			loadProperties(location, properties);
-			try {
-				InputStream input = new BufferedInputStream(new FileInputStream(file));
-				feature = parse(input, properties);
-				if (feature != null) {
-					String[] keyStrings = (String[]) messageKeys.toArray(new String[messageKeys.size()]);
-					feature.setLocalizations(LocalizationHelper.getDirPropertyLocalizations(location, "feature", null, keyStrings)); //$NON-NLS-1$
-				}
-			} catch (FileNotFoundException e) {
-				e.printStackTrace();
-			}
-		} else if (location.getName().endsWith(".jar")) { //$NON-NLS-1$
-			JarFile jar = null;
-			try {
-				jar = new JarFile(location);
-				loadProperties(jar, properties);
-				JarEntry entry = jar.getJarEntry("feature.xml"); //$NON-NLS-1$
-				if (entry == null)
-					return null;
-				InputStream input = new BufferedInputStream(jar.getInputStream(entry));
-				feature = parse(input, properties);
-				if (feature != null) {
-					String[] keyStrings = (String[]) messageKeys.toArray(new String[messageKeys.size()]);
-					feature.setLocalizations(LocalizationHelper.getJarPropertyLocalizations(location, "feature", null, keyStrings)); //$NON-NLS-1$
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			} catch (SecurityException e) {
-				LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "Exception parsing feature: " + location.getAbsolutePath(), e)); //$NON-NLS-1$
-			} finally {
-				try {
-					if (jar != null)
-						jar.close();
-				} catch (IOException e) {
-					//
-				}
-			}
-		}
-		return feature;
-	}
-
-	/**
-	 * Parse the given input stream and return a feature object
-	 * or null. This method closes the input stream.
-	 */
-	public Feature parse(InputStream in, Properties messages) {
-		this.messages = messages;
-		this.messageKeys = new ArrayList(messages.size());
-		result = null;
-		try {
-			parser.parse(new InputSource(in), this);
-		} catch (SAXException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		} finally {
-			try {
-				in.close();
-			} catch (IOException e1) {
-				//					Utils.log(e1.getLocalizedMessage());
-			}
-		}
-		return result;
-	}
-
-	private void processCopyright(Attributes attributes) {
-		result.setCopyrightURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processDescription(Attributes attributes) {
-		result.setDescriptionURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processDiscoverySite(Attributes attributes) {
-		//ignore discovery sites of type 'web'
-		if ("web".equals(attributes.getValue("type"))) //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		result.addDiscoverySite(attributes.getValue("label"), attributes.getValue("url")); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	protected void processFeature(Attributes attributes) {
-		String id = attributes.getValue("id"); //$NON-NLS-1$
-		String ver = attributes.getValue("version"); //$NON-NLS-1$
-
-		if (id == null || id.trim().equals("") //$NON-NLS-1$
-				|| ver == null || ver.trim().equals("")) { //$NON-NLS-1$
-			//			System.out.println(NLS.bind(Messages.FeatureParser_IdOrVersionInvalid, (new String[] { id, ver})));
-		} else {
-			result = createFeature(id, ver);
-			result.setApplication(attributes.getValue("application")); //$NON-NLS-1$
-			result.setPlugin(attributes.getValue("plugin")); //$NON-NLS-1$
-			result.setExclusive(Boolean.valueOf(attributes.getValue("exclusive")).booleanValue()); //$NON-NLS-1$
-			result.setPrimary(Boolean.valueOf(attributes.getValue("primary")).booleanValue()); //$NON-NLS-1$
-
-			//TODO rootURLs
-			if (url != null && "file".equals(url.getProtocol())) { //$NON-NLS-1$
-				File f = new File(url.getFile().replace('/', File.separatorChar));
-				result.setURL("features" + "/" + f.getParentFile().getName() + "/");// + f.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			} else {
-				// externalized URLs might be in relative form, ensure they are absolute				
-				//				feature.setURL(Utils.makeAbsolute(Utils.getInstallURL(), url).toExternalForm());
-			}
-
-			result.setProviderName(localize(attributes.getValue("provider-name"))); //$NON-NLS-1$
-			result.setLabel(localize(attributes.getValue("label"))); //$NON-NLS-1$
-
-			//			Utils.debug("End process DefaultFeature tag: id:" +id + " ver:" +ver + " url:" + feature.getURL()); 	 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	private void processImport(Attributes attributes) {
-		String id = attributes.getValue("feature"); //$NON-NLS-1$
-		FeatureEntry entry = null;
-		if (id != null) {
-			if ("true".equalsIgnoreCase(attributes.getValue("patch"))) { //$NON-NLS-1$ //$NON-NLS-2$
-				entry = FeatureEntry.createRequires(id, attributes.getValue("version"), "perfect", attributes.getValue("filter"), false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setPatch(true);
-			} else {
-				entry = FeatureEntry.createRequires(id, attributes.getValue("version"), attributes.getValue("match"), attributes.getValue("filter"), false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-		} else {
-			id = attributes.getValue("plugin"); //$NON-NLS-1$
-			entry = FeatureEntry.createRequires(id, attributes.getValue("version"), attributes.getValue("match"), attributes.getValue("filter"), true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		result.addEntry(entry);
-	}
-
-	private void processIncludes(Attributes attributes) {
-		FeatureEntry entry = new FeatureEntry(attributes.getValue("id"), attributes.getValue("version"), false); //$NON-NLS-1$ //$NON-NLS-2$
-		String flag = attributes.getValue("optional"); //$NON-NLS-1$
-		if (flag != null)
-			entry.setOptional(Boolean.valueOf(flag).booleanValue());
-		setEnvironment(attributes, entry);
-		result.addEntry(entry);
-	}
-
-	private void processInstallHandler(Attributes attributes) {
-		result.setInstallHandler(attributes.getValue("handler")); //$NON-NLS-1$
-		result.setInstallHandlerLibrary(attributes.getValue("library")); //$NON-NLS-1$
-		result.setInstallHandlerURL(attributes.getValue("url")); //$NON-NLS-1$
-	}
-
-	private void processLicense(Attributes attributes) {
-		result.setLicenseURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processPlugin(Attributes attributes) {
-		String id = attributes.getValue("id"); //$NON-NLS-1$
-		String version = attributes.getValue("version"); //$NON-NLS-1$
-
-		if (id == null || id.trim().equals("") || version == null || version.trim().equals("")) { //$NON-NLS-1$ //$NON-NLS-2$
-			System.out.println(NLS.bind("FeatureParser#processPlugin, ID {0} or version {1} invalid", (new String[] {id, version}))); //$NON-NLS-1$
-		} else {
-			FeatureEntry plugin = new FeatureEntry(id, version, true);
-			setEnvironment(attributes, plugin);
-			String unpack = attributes.getValue("unpack"); //$NON-NLS-1$
-			if (unpack != null)
-				plugin.setUnpack(Boolean.valueOf(unpack).booleanValue());
-			String fragment = attributes.getValue("fragment"); //$NON-NLS-1$
-			if (fragment != null)
-				plugin.setFragment(Boolean.valueOf(fragment).booleanValue());
-			String filter = attributes.getValue("filter"); //$NON-NLS-1$
-			if (filter != null)
-				plugin.setFilter(filter);
-			result.addEntry(plugin);
-
-			//			Utils.debug("End process DefaultFeature tag: id:" + id + " ver:" + ver + " url:" + feature.getURL()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	private void processUpdateSite(Attributes attributes) {
-		result.setUpdateSiteLabel(attributes.getValue("label")); //$NON-NLS-1$
-		result.setUpdateSiteURL(attributes.getValue("url")); //$NON-NLS-1$
-	}
-
-	private void setEnvironment(Attributes attributes, FeatureEntry entry) {
-		String os = attributes.getValue("os"); //$NON-NLS-1$
-		String ws = attributes.getValue("ws"); //$NON-NLS-1$
-		String nl = attributes.getValue("nl"); //$NON-NLS-1$
-		String arch = attributes.getValue("arch"); //$NON-NLS-1$
-		entry.setEnvironment(os, ws, arch, nl);
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-		//		Utils.debug("Start Element: uri:" + uri + " local Name:" + localName + " qName:" + qName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		if ("plugin".equals(localName)) { //$NON-NLS-1$
-			processPlugin(attributes);
-		} else if ("description".equals(localName)) { //$NON-NLS-1$
-			processDescription(attributes);
-		} else if ("license".equals(localName)) { //$NON-NLS-1$
-			processLicense(attributes);
-		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
-			processCopyright(attributes);
-		} else if ("feature".equals(localName)) { //$NON-NLS-1$
-			processFeature(attributes);
-		} else if ("import".equals(localName)) { //$NON-NLS-1$
-			processImport(attributes);
-		} else if ("includes".equals(localName)) { //$NON-NLS-1$
-			processIncludes(attributes);
-		} else if ("install-handler".equals(localName)) { //$NON-NLS-1$
-			processInstallHandler(attributes);
-		} else if ("update".equals(localName)) { //$NON-NLS-1$
-			processUpdateSite(attributes);
-		} else if ("discovery".equals(localName)) { //$NON-NLS-1$
-			processDiscoverySite(attributes);
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/Messages.java
deleted file mode 100644
index dce8bba..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/Messages.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.features;
-
-import org.eclipse.osgi.util.NLS;
-
-public final class Messages extends NLS {
-
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.metadata.generator.features.messages";//$NON-NLS-1$
-
-	public static String DefaultFeatureParser_IdOrVersionInvalid;
-	public static String DefaultSiteParser_NoSiteTag;
-	public static String DefaultSiteParser_WrongParsingStack;
-	public static String DefaultSiteParser_UnknownElement;
-	public static String DefaultSiteParser_UnknownStartState;
-	public static String DefaultSiteParser_Missing;
-	public static String DefaultSiteParser_ParsingStackBackToInitialState;
-	public static String DefaultSiteParser_ElementAlreadySet;
-	public static String DefaultSiteParser_UnknownEndState;
-	public static String DefaultSiteParser_ErrorParsing;
-	public static String DefaultSiteParser_ErrorlineColumnMessage;
-	public static String DefaultSiteParser_ErrorParsingSite;
-	public static String DefaultSiteParser_UnknownState;
-	public static String DefaultSiteParser_InvalidXMLStream;
-	public static String DefaultSiteParser_mirrors;
-	static {
-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-	}
-
-	private Messages() {
-		// Do not instantiate
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/ProductFile.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/ProductFile.java
deleted file mode 100644
index fd1e550..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/ProductFile.java
+++ /dev/null
@@ -1,514 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.p2.metadata.generator.features;
-
-import java.io.*;
-import java.util.*;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * 
- * @since 3.1
- */
-public class ProductFile extends DefaultHandler {
-	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-
-	private static final String PROGRAM_ARGS = "programArgs"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_LINUX = "programArgsLin"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_MAC = "programArgsMac"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_SOLARIS = "programArgsSol"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_WIN = "programArgsWin"; //$NON-NLS-1$
-	private static final String VM_ARGS = "vmArgs"; //$NON-NLS-1$
-	private static final String VM_ARGS_LINUX = "vmArgsLin"; //$NON-NLS-1$
-	private static final String VM_ARGS_MAC = "vmArgsMac"; //$NON-NLS-1$
-	private static final String VM_ARGS_SOLARIS = "vmArgsSol"; //$NON-NLS-1$
-	private static final String VM_ARGS_WIN = "vmArgsWin"; //$NON-NLS-1$
-
-	private static final String SOLARIS_LARGE = "solarisLarge"; //$NON-NLS-1$
-	private static final String SOLARIS_MEDIUM = "solarisMedium"; //$NON-NLS-1$
-	private static final String SOLARIS_SMALL = "solarisSmall"; //$NON-NLS-1$
-	private static final String SOLARIS_TINY = "solarisTiny"; //$NON-NLS-1$
-	private static final String WIN32_16_LOW = "winSmallLow"; //$NON-NLS-1$
-	private static final String WIN32_16_HIGH = "winSmallHigh"; //$NON-NLS-1$
-	private static final String WIN32_24_LOW = "win24Low"; //$NON-NLS-1$
-	private static final String WIN32_32_LOW = "winMediumLow"; //$NON-NLS-1$
-	private static final String WIN32_32_HIGH = "winMediumHigh"; //$NON-NLS-1$
-	private static final String WIN32_48_LOW = "winLargeLow"; //$NON-NLS-1$
-	private static final String WIN32_48_HIGH = "winLargeHigh"; //$NON-NLS-1$
-
-	private static final String OS_WIN32 = "win32";//$NON-NLS-1$
-	private static final String OS_LINUX = "linux";//$NON-NLS-1$
-	private static final String OS_SOLARIS = "solaris";//$NON-NLS-1$
-	private static final String OS_MACOSX = "macosx";//$NON-NLS-1$
-
-	private static final String PRODUCT = "product"; //$NON-NLS-1$
-	private static final String CONFIG_INI = "configIni"; //$NON-NLS-1$
-	private static final String LAUNCHER = "launcher"; //$NON-NLS-1$
-	private static final String LAUNCHER_ARGS = "launcherArgs"; //$NON-NLS-1$
-	private static final String PLUGINS = "plugins"; //$NON-NLS-1$
-	private static final String FEATURES = "features"; //$NON-NLS-1$
-	private static final String P_USE_ICO = "useIco"; //$NON-NLS-1$
-
-	//These constants form a small state machine to parse the .product file
-	private static final int STATE_START = 0;
-	private static final int STATE_PRODUCT = 1;
-	private static final int STATE_LAUNCHER = 2;
-	private static final int STATE_LAUNCHER_ARGS = 3;
-	private static final int STATE_PLUGINS = 4;
-	private static final int STATE_FEATURES = 5;
-	private static final int STATE_PROGRAM_ARGS = 6;
-	private static final int STATE_PROGRAM_ARGS_LINUX = 7;
-	private static final int STATE_PROGRAM_ARGS_MAC = 8;
-	private static final int STATE_PROGRAM_ARGS_SOLARIS = 9;
-	private static final int STATE_PROGRAM_ARGS_WIN = 10;
-	private static final int STATE_VM_ARGS = 11;
-	private static final int STATE_VM_ARGS_LINUX = 12;
-	private static final int STATE_VM_ARGS_MAC = 13;
-	private static final int STATE_VM_ARGS_SOLARIS = 14;
-	private static final int STATE_VM_ARGS_WIN = 15;
-	private static final int STATE_CONFIG_INI = 16;
-
-	private int state = STATE_START;
-
-	private final SAXParser parser;
-	private String currentOS = null;
-	private boolean useIco = false;
-	private final ArrayList result = new ArrayList(6);
-	private final Map platformSpecificConfigPaths = new HashMap();
-	private String configPlatform = null;
-	private String platformConfigPath = null;
-	private String launcherName = null;
-	private String id = null;
-	private String uid = null;
-	private boolean useFeatures = false;
-	private List plugins = null;
-	private List fragments = null;
-	private List features = null;
-	private String productName = null;
-	private String version = null;
-
-	private Properties launcherArgs = new Properties();
-
-	private static String normalize(String text) {
-		if (text == null || text.trim().length() == 0)
-			return ""; //$NON-NLS-1$
-
-		text = text.replaceAll("\\r|\\n|\\f|\\t", " "); //$NON-NLS-1$ //$NON-NLS-2$
-		return text.replaceAll("\\s+", " "); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	/**
-	 * Constructs a feature parser.
-	 */
-	public ProductFile(String location, String os) throws Exception {
-		super();
-		this.currentOS = os;
-
-		parserFactory.setNamespaceAware(true);
-		parser = parserFactory.newSAXParser();
-		InputStream in = new BufferedInputStream(new FileInputStream(location));
-		try {
-			parser.parse(new InputSource(in), this);
-		} finally {
-			if (in != null)
-				in.close();
-		}
-	}
-
-	public List getPlugins() {
-		return getPlugins(true);
-	}
-
-	public List getPlugins(boolean includeFragments) {
-		List p = plugins != null ? plugins : Collections.EMPTY_LIST;
-		if (!includeFragments)
-			return p;
-
-		List f = fragments != null ? fragments : Collections.EMPTY_LIST;
-		int size = p.size() + f.size();
-		if (size == 0)
-			return Collections.EMPTY_LIST;
-
-		List both = new ArrayList(size);
-		both.addAll(p);
-		both.addAll(f);
-		return both;
-	}
-
-	public List getFeatures() {
-		if (features == null)
-			return Collections.EMPTY_LIST;
-		return features;
-	}
-
-	public String getId() {
-		if (uid != null)
-			return uid;
-		return id;
-	}
-
-	public String getProductId() {
-		return id;
-	}
-
-	public String getProductName() {
-		return productName;
-	}
-
-	public boolean useFeatures() {
-		return useFeatures;
-	}
-
-	public String getVersion() {
-		return (version == null || version.length() == 0) ? "0.0.0" : version; //$NON-NLS-1$
-	}
-
-	public String getLauncherName() {
-		return launcherName;
-	}
-
-	public String getVMArguments(String os) {
-		String key = null;
-		if (os.equals(OS_WIN32)) {
-			key = VM_ARGS_WIN;
-		} else if (os.equals(OS_LINUX)) {
-			key = VM_ARGS_LINUX;
-		} else if (os.equals(OS_MACOSX)) {
-			key = VM_ARGS_MAC;
-		} else if (os.equals(OS_SOLARIS)) {
-			key = VM_ARGS_SOLARIS;
-		}
-
-		String prefix = launcherArgs.getProperty(VM_ARGS);
-		String platform = null, args = null;
-		if (key != null)
-			platform = launcherArgs.getProperty(key);
-		if (prefix != null)
-			args = platform != null ? prefix + " " + platform : prefix; //$NON-NLS-1$
-		else
-			args = platform != null ? platform : ""; //$NON-NLS-1$
-		return normalize(args);
-	}
-
-	public String getProgramArguments(String os) {
-		String key = null;
-		if (os.equals(OS_WIN32)) {
-			key = PROGRAM_ARGS_WIN;
-		} else if (os.equals(OS_LINUX)) {
-			key = PROGRAM_ARGS_LINUX;
-		} else if (os.equals(OS_MACOSX)) {
-			key = PROGRAM_ARGS_MAC;
-		} else if (os.equals(OS_SOLARIS)) {
-			key = PROGRAM_ARGS_SOLARIS;
-		}
-
-		String prefix = launcherArgs.getProperty(PROGRAM_ARGS);
-		String platform = null, args = null;
-		if (key != null)
-			platform = launcherArgs.getProperty(key);
-		if (prefix != null)
-			args = platform != null ? prefix + " " + platform : prefix; //$NON-NLS-1$
-		else
-			args = platform != null ? platform : ""; //$NON-NLS-1$
-		return normalize(args);
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) {
-		switch (state) {
-			case STATE_START :
-				if (PRODUCT.equals(localName)) {
-					processProduct(attributes);
-					state = STATE_PRODUCT;
-				}
-				break;
-
-			case STATE_PRODUCT :
-				if (CONFIG_INI.equals(localName)) {
-					processConfigIni(attributes);
-					state = STATE_CONFIG_INI;
-				} else if (LAUNCHER.equals(localName)) {
-					processLauncher(attributes);
-					state = STATE_LAUNCHER;
-				} else if (PLUGINS.equals(localName)) {
-					state = STATE_PLUGINS;
-				} else if (FEATURES.equals(localName)) {
-					state = STATE_FEATURES;
-				} else if (LAUNCHER_ARGS.equals(localName)) {
-					state = STATE_LAUNCHER_ARGS;
-				}
-				break;
-
-			case STATE_CONFIG_INI :
-				processConfigIniPlatform(localName, true);
-				break;
-
-			case STATE_LAUNCHER :
-				if (OS_SOLARIS.equals(localName)) {
-					processSolaris(attributes);
-				} else if ("win".equals(localName)) { //$NON-NLS-1$
-					processWin(attributes);
-				} else if (OS_LINUX.equals(localName)) {
-					processLinux(attributes);
-				} else if (OS_MACOSX.equals(localName)) {
-					processMac(attributes);
-				}
-				if ("ico".equals(localName)) { //$NON-NLS-1$
-					processIco(attributes);
-				} else if ("bmp".equals(localName)) { //$NON-NLS-1$
-					processBmp(attributes);
-				}
-				break;
-
-			case STATE_LAUNCHER_ARGS :
-				if (PROGRAM_ARGS.equals(localName)) {
-					state = STATE_PROGRAM_ARGS;
-				} else if (PROGRAM_ARGS_LINUX.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_LINUX;
-				} else if (PROGRAM_ARGS_MAC.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_MAC;
-				} else if (PROGRAM_ARGS_SOLARIS.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_SOLARIS;
-				} else if (PROGRAM_ARGS_WIN.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_WIN;
-				} else if (VM_ARGS.equals(localName)) {
-					state = STATE_VM_ARGS;
-				} else if (VM_ARGS_LINUX.equals(localName)) {
-					state = STATE_VM_ARGS_LINUX;
-				} else if (VM_ARGS_MAC.equals(localName)) {
-					state = STATE_VM_ARGS_MAC;
-				} else if (VM_ARGS_SOLARIS.equals(localName)) {
-					state = STATE_VM_ARGS_SOLARIS;
-				} else if (VM_ARGS_WIN.equals(localName)) {
-					state = STATE_VM_ARGS_WIN;
-				}
-				break;
-
-			case STATE_PLUGINS :
-				if ("plugin".equals(localName)) { //$NON-NLS-1$
-					processPlugin(attributes);
-				}
-				break;
-
-			case STATE_FEATURES :
-				if ("feature".equals(localName)) { //$NON-NLS-1$
-					processFeature(attributes);
-				}
-				break;
-		}
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		switch (state) {
-			case STATE_PLUGINS :
-				if (PLUGINS.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_FEATURES :
-				if (FEATURES.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_LAUNCHER_ARGS :
-				if (LAUNCHER_ARGS.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_LAUNCHER :
-				if (LAUNCHER.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-
-			case STATE_PROGRAM_ARGS :
-			case STATE_PROGRAM_ARGS_LINUX :
-			case STATE_PROGRAM_ARGS_MAC :
-			case STATE_PROGRAM_ARGS_SOLARIS :
-			case STATE_PROGRAM_ARGS_WIN :
-			case STATE_VM_ARGS :
-			case STATE_VM_ARGS_LINUX :
-			case STATE_VM_ARGS_MAC :
-			case STATE_VM_ARGS_SOLARIS :
-			case STATE_VM_ARGS_WIN :
-				state = STATE_LAUNCHER_ARGS;
-				break;
-
-			case STATE_CONFIG_INI :
-				if (CONFIG_INI.equals(localName))
-					state = STATE_PRODUCT;
-				else
-					processConfigIniPlatform(localName, false);
-				break;
-		}
-	}
-
-	public void characters(char[] ch, int start, int length) {
-		switch (state) {
-			case STATE_PROGRAM_ARGS :
-				addLaunchArgumentToMap(PROGRAM_ARGS, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_LINUX :
-				addLaunchArgumentToMap(PROGRAM_ARGS_LINUX, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_MAC :
-				addLaunchArgumentToMap(PROGRAM_ARGS_MAC, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_SOLARIS :
-				addLaunchArgumentToMap(PROGRAM_ARGS_SOLARIS, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_WIN :
-				addLaunchArgumentToMap(PROGRAM_ARGS_WIN, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS :
-				addLaunchArgumentToMap(VM_ARGS, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_LINUX :
-				addLaunchArgumentToMap(VM_ARGS_LINUX, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_MAC :
-				addLaunchArgumentToMap(VM_ARGS_MAC, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_SOLARIS :
-				addLaunchArgumentToMap(VM_ARGS_SOLARIS, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_WIN :
-				addLaunchArgumentToMap(VM_ARGS_WIN, String.valueOf(ch, start, length));
-				break;
-			case STATE_CONFIG_INI :
-				if (platformConfigPath != null)
-					platformConfigPath += String.valueOf(ch, start, length);
-				break;
-		}
-	}
-
-	private void addLaunchArgumentToMap(String key, String value) {
-		if (launcherArgs == null)
-			launcherArgs = new Properties();
-
-		String oldValue = launcherArgs.getProperty(key);
-		if (oldValue != null)
-			launcherArgs.setProperty(key, oldValue + value);
-		else
-			launcherArgs.setProperty(key, value);
-	}
-
-	private void processPlugin(Attributes attributes) {
-		String fragment = attributes.getValue("fragment"); //$NON-NLS-1$
-		if (fragment != null && new Boolean(fragment).booleanValue()) {
-			if (fragments == null)
-				fragments = new ArrayList();
-			fragments.add(attributes.getValue("id")); //$NON-NLS-1$
-		} else {
-			if (plugins == null)
-				plugins = new ArrayList();
-			plugins.add(attributes.getValue("id")); //$NON-NLS-1$
-		}
-	}
-
-	private void processFeature(Attributes attributes) {
-		if (features == null)
-			features = new ArrayList();
-		features.add(attributes.getValue("id")); //$NON-NLS-1$
-	}
-
-	private void processProduct(Attributes attributes) {
-		id = attributes.getValue("id"); //$NON-NLS-1$
-		uid = attributes.getValue("uid"); //$NON-NLS-1$
-		productName = attributes.getValue("name"); //$NON-NLS-1$
-		String use = attributes.getValue("useFeatures"); //$NON-NLS-1$
-		if (use != null)
-			useFeatures = Boolean.valueOf(use).booleanValue();
-		version = attributes.getValue("version"); //$NON-NLS-1$
-	}
-
-	private void processConfigIni(Attributes attributes) {
-		String path = null;
-		if ("custom".equals(attributes.getValue("use"))) { //$NON-NLS-1$//$NON-NLS-2$
-			path = attributes.getValue("path"); //$NON-NLS-1$
-		}
-		String os = attributes.getValue("os"); //$NON-NLS-1$
-		if (os != null && os.length() > 0) {
-			// TODO should we allow a platform-specific default to over-ride a custom generic path?
-			if (path != null)
-				platformSpecificConfigPaths.put(os, path);
-		} else if (path != null) {
-			//			configPath = path;
-		}
-	}
-
-	private void processConfigIniPlatform(String key, boolean begin) {
-		if (begin) {
-			configPlatform = key;
-			platformConfigPath = ""; //$NON-NLS-1$
-		} else if (configPlatform.equals(key) && platformConfigPath.length() > 0) {
-			platformSpecificConfigPaths.put(key, platformConfigPath);
-			platformConfigPath = null;
-		}
-	}
-
-	private void processLauncher(Attributes attributes) {
-		launcherName = attributes.getValue("name"); //$NON-NLS-1$
-	}
-
-	private boolean osMatch(String os) {
-		if (os == currentOS)
-			return true;
-		if (os == null)
-			return false;
-		return os.equals(currentOS);
-	}
-
-	private void processSolaris(Attributes attributes) {
-		if (!osMatch(OS_SOLARIS))
-			return;
-		result.add(attributes.getValue(SOLARIS_LARGE));
-		result.add(attributes.getValue(SOLARIS_MEDIUM));
-		result.add(attributes.getValue(SOLARIS_SMALL));
-		result.add(attributes.getValue(SOLARIS_TINY));
-	}
-
-	private void processWin(Attributes attributes) {
-		if (!osMatch(OS_WIN32))
-			return;
-		useIco = Boolean.valueOf(attributes.getValue(P_USE_ICO)).booleanValue();
-	}
-
-	private void processIco(Attributes attributes) {
-		if (!osMatch(OS_WIN32) || !useIco)
-			return;
-		result.add(attributes.getValue("path")); //$NON-NLS-1$
-	}
-
-	private void processBmp(Attributes attributes) {
-		if (!osMatch(OS_WIN32) || useIco)
-			return;
-		result.add(attributes.getValue(WIN32_16_HIGH));
-		result.add(attributes.getValue(WIN32_16_LOW));
-		result.add(attributes.getValue(WIN32_24_LOW));
-		result.add(attributes.getValue(WIN32_32_HIGH));
-		result.add(attributes.getValue(WIN32_32_LOW));
-		result.add(attributes.getValue(WIN32_48_HIGH));
-		result.add(attributes.getValue(WIN32_48_LOW));
-	}
-
-	private void processLinux(Attributes attributes) {
-		if (!osMatch(OS_LINUX))
-			return;
-		result.add(attributes.getValue("icon")); //$NON-NLS-1$
-	}
-
-	private void processMac(Attributes attributes) {
-		if (!osMatch(OS_MACOSX))
-			return;
-		result.add(attributes.getValue("icon")); //$NON-NLS-1$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteCategory.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteCategory.java
deleted file mode 100644
index 8acf123..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteCategory.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.features;
-
-import java.util.Map;
-
-/**
- * A category in an update site.
- * 
- * Based on org.eclipse.update.core.model.CategoryModel.
- */
-public class SiteCategory {
-
-	private String description;
-	private String label;
-	private String name;
-	private Map localizations;
-
-	/**
-	 * Creates an uninitialized model object.
-	 * 
-	 * @since 2.0
-	 */
-	public SiteCategory() {
-		super();
-	}
-
-	/**
-	 * Compare two category models for equality.
-	 * 
-	 * @see Object#equals(Object)
-	 * @since 2.0
-	 */
-	public boolean equals(Object obj) {
-		boolean result = false;
-		if (obj instanceof SiteCategory) {
-			SiteCategory otherCategory = (SiteCategory) obj;
-			result = getName().equalsIgnoreCase(otherCategory.getName());
-		}
-		return result;
-	}
-
-	/**
-	 * Retrieve the detailed category description
-	 * 
-	 * @return category description, or <code>null</code>.
-	 * @since 2.0
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * Retrieve the non-localized displayable label for the category.
-	 * 
-	 * @return non-localized displayable label, or <code>null</code>.
-	 * @since 2.0
-	 */
-	public String getLabel() {
-		return label;
-	}
-
-	/**
-	 * Gets the localizations for the site as a map from locale
-	 * to the set of translated properties for that locale.
-	 * 
-	 * @return a map from locale to property set
-	 * @since 3.4
-	 */
-	public Map getLocalizations() {
-		return this.localizations;
-	}
-
-	/**
-	 * Retrieve the name of the category.
-	 * 
-	 * @return category name, or <code>null</code>.
-	 * @since 2.0
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * Compute hash code for category model.
-	 * 
-	 * @see Object#hashCode()
-	 * @since 2.0
-	 */
-	public int hashCode() {
-		return getName().hashCode();
-	}
-
-	/**
-	 * Sets the category description.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param description category description
-	 * @since 2.0
-	 */
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	/**
-	 * Sets the category displayable label.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param label displayable label, or resource key
-	 * @since 2.0
-	 */
-	public void setLabel(String label) {
-		this.label = label;
-	}
-
-	/**
-	 * Sets the localizations for the site as a map from locale
-	 * to the set of translated properties for that locale.
-	 * 
-	 * @param localizations as a map from locale to property set
-	 * @since 3.4
-	 */
-	public void setLocalizations(Map localizations) {
-		this.localizations = localizations;
-	}
-
-	/**
-	 * Sets the category name.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param name category name
-	 * @since 2.0
-	 */
-	public void setName(String name) {
-		this.name = name;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteFeature.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteFeature.java
deleted file mode 100644
index 5897881..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteFeature.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *     James D Miles (IBM Corp.) - bug 191783, NullPointerException in FeatureDownloader
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.features;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A reference to a feature in an update site.xml file.
- * 
- * Based on org.eclipse.update.core.model.FeatureReferenceModel.
- */
-public class SiteFeature {
-
-	// performance
-	private URL base;
-	private List /* of String*/categoryNames;
-	private String featureId;
-	private String featureVersion;
-
-	private final boolean resolved = false;
-	private URL url;
-	private String urlString;
-
-	/*
-	 * Compares two URL for equality
-	 * Return false if one of them is null
-	 */
-	public static boolean sameURL(URL url1, URL url2) {
-		if (url1 == url2)
-			return true;
-		if (url1 == null ^ url2 == null)
-			return false;
-
-		// check if URL are file: URL as we may
-		// have 2 URL pointing to the same featureReference
-		// but with different representation
-		// (i.e. file:/C;/ and file:C:/)
-		final boolean isFile1 = "file".equalsIgnoreCase(url1.getProtocol());//$NON-NLS-1$
-		final boolean isFile2 = "file".equalsIgnoreCase(url2.getProtocol());//$NON-NLS-1$
-		if (isFile1 && isFile2) {
-			File file1 = new File(url1.getFile());
-			File file2 = new File(url2.getFile());
-			return file1.equals(file2);
-		}
-		// URL1 xor URL2 is a file, return false. (They either both need to be files, or neither)
-		if (isFile1 ^ isFile2)
-			return false;
-		return getExternalForm(url1).equals(getExternalForm(url2));
-	}
-
-	/**
-	 * Gets the external form of this URL. In particular, it trims any white space, 
-	 * removes a trailing slash and creates a lower case string.
-	 */
-	private static String getExternalForm(URL url) {
-		String externalForm = url.toExternalForm();
-		if (externalForm == null)
-			return ""; //$NON-NLS-1$
-		externalForm = externalForm.trim();
-		if (externalForm.endsWith("/")) { //$NON-NLS-1$
-			// Remove the trailing slash
-			externalForm = externalForm.substring(0, externalForm.length() - 1);
-		}
-		return externalForm.toLowerCase();
-	}
-
-	/**
-	 * Creates an uninitialized feature reference model object.
-	 */
-	public SiteFeature() {
-		super();
-	}
-
-	/**
-	 * Adds the name of a category this feature belongs to.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param categoryName category name
-	 */
-	public void addCategoryName(String categoryName) {
-		if (this.categoryNames == null)
-			this.categoryNames = new ArrayList();
-		if (!this.categoryNames.contains(categoryName))
-			this.categoryNames.add(categoryName);
-	}
-
-	private void delayedResolve() {
-
-		// PERF: delay resolution
-		if (resolved)
-			return;
-
-		// resolve local elements
-		try {
-			url = new URL(base, urlString);
-		} catch (MalformedURLException e) {
-			//			UpdateCore.warn("", e); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Compares 2 feature reference models for equality
-	 *  
-	 * @param object feature reference model to compare with
-	 * @return <code>true</code> if the two models are equal, 
-	 * <code>false</code> otherwise
-	 */
-	public boolean equals(Object object) {
-		if (object == null)
-			return false;
-		if (!(object instanceof SiteFeature))
-			return false;
-		SiteFeature that = (SiteFeature) object;
-		if (this.featureId == null) {
-			if (that.featureId != null)
-				return false;
-		} else if (!this.featureId.equals(that.featureId))
-			return false;
-		if (this.featureVersion == null) {
-			if (that.featureVersion != null)
-				return false;
-		} else if (!this.featureVersion.equals(that.featureVersion))
-			return false;
-		return sameURL(this.getURL(), that.getURL());
-	}
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#hashCode()
-	 */
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + (featureId == null ? 0 : featureId.hashCode());
-		result = prime * result + (featureVersion == null ? 0 : featureVersion.hashCode());
-		if (this.getURL() == null)
-			return result;
-
-		if ("file".equalsIgnoreCase(getURL().getProtocol())) {//$NON-NLS-1$ 
-			// If the URL is a file, then create the HashCode from the file
-			File f = new File(getURL().getFile());
-			if (f != null)
-				result = prime * result + f.hashCode();
-		} else
-			// Otherwise create it from the External form of the URL (in lower case)
-			result = prime * result + getExternalForm(this.getURL()).hashCode();
-		return result;
-	}
-
-	/**
-	 * Returns the names of categories the referenced feature belongs to.
-	 * 
-	 * @return an array of names, or an empty array.
-	 */
-	public String[] getCategoryNames() {
-		if (categoryNames == null)
-			return new String[0];
-
-		return (String[]) categoryNames.toArray(new String[0]);
-	}
-
-	/**
-	 * Returns the feature identifier as a string
-	 * 
-	 * @return feature identifier
-	 */
-	public String getFeatureIdentifier() {
-		return featureId;
-	}
-
-	/**
-	 * Returns the feature version as a string
-	 * 
-	 * @return feature version 
-	 */
-	public String getFeatureVersion() {
-		return featureVersion;
-	}
-
-	/**
-	 * Returns the resolved URL for the feature reference.
-	 * 
-	 * @return url string
-	 */
-	public URL getURL() {
-		delayedResolve();
-		return url;
-	}
-
-	/**
-	 * Sets the feature identifier.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param featureId feature identifier
-	 */
-	public void setFeatureIdentifier(String featureId) {
-		this.featureId = featureId;
-	}
-
-	/**
-	 * Sets the feature version.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param featureVersion feature version
-	 */
-	public void setFeatureVersion(String featureVersion) {
-		this.featureVersion = featureVersion;
-	}
-
-	/**
-	 * Sets the unresolved URL for the feature reference.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param urlString unresolved URL string
-	 */
-	public void setURLString(String urlString) {
-		this.urlString = urlString;
-		this.url = null;
-	}
-
-	/**
-	 * @see Object#toString()
-	 */
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(getClass().toString() + " :"); //$NON-NLS-1$
-		buffer.append(" at "); //$NON-NLS-1$
-		if (url != null)
-			buffer.append(url.toExternalForm());
-		return buffer.toString();
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteModel.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteModel.java
deleted file mode 100644
index 8b784ea..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/SiteModel.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.features;
-
-import java.util.*;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.URLEntry;
-
-/**
- * A model of an update site.
- * 
- * Copied from org.eclipse.update.core.model.SiteModel.
- */
-public class SiteModel {
-
-	private List /*of ArchiveReferenceModel*/archiveReferences;
-	/**
-	 * Map of String (category id) -> SiteCategory
-	 */
-	private Map categories;
-	private URLEntry description;
-	/**
-	 * Map of String (feature id) -> SiteFeature
-	 */
-	private List features;
-	private String mirrorsURLString;
-	private URLEntry[] associateSites;
-	private List messageKeys;
-	private Map localizations;
-
-	/**
-	 * Creates an uninitialized site model object.
-	 * 
-	 * @since 2.0
-	 */
-	public SiteModel() {
-		super();
-	}
-
-	/**
-	 * Adds an archive reference model to site.
-	 * Throws a runtime exception if this object is marked read-only.
-	 * 
-	 * @param archiveReference archive reference model
-	 * @since 2.0
-	 */
-	public void addArchive(URLEntry archiveReference) {
-		if (this.archiveReferences == null)
-			this.archiveReferences = new ArrayList();
-		if (!this.archiveReferences.contains(archiveReference))
-			this.archiveReferences.add(archiveReference);
-	}
-
-	/**
-	 * Adds a category to the site.
-	 * 
-	 * @param category category model
-	 */
-	public void addCategory(SiteCategory category) {
-		if (categories == null)
-			categories = new HashMap();
-		if (!categories.containsKey(category.getName())) {
-			categories.put(category.getName(), category);
-			if (localizations != null && !localizations.isEmpty())
-				category.setLocalizations(localizations);
-		}
-	}
-
-	/**
-	 * Adds a feature reference model to site.
-	 * 
-	 * @param featureReference feature reference model
-	 */
-	public void addFeature(SiteFeature featureReference) {
-		if (this.features == null)
-			this.features = new ArrayList();
-		this.features.add(featureReference);
-	}
-
-	public URLEntry[] getAssociatedSites() {
-		return associateSites;
-	}
-
-	/**
-	 * Returns the category with the given name.
-	 * @return the category with the given name, or <code>null</code>
-	 */
-	public SiteCategory getCategory(String name) {
-		return (SiteCategory) (categories == null ? null : categories.get(name));
-	}
-
-	/**
-	 * Returns the site description.
-	 * 
-	 * @return site description, or <code>null</code>.
-	 */
-	public URLEntry getDescription() {
-		return description;
-	}
-
-	/**
-	 * Returns an array of feature reference models on this site.
-	 * 
-	 * @return an array of feature reference models, or an empty array.
-	 */
-	public SiteFeature[] getFeatures() {
-		if (features == null || features.size() == 0)
-			return new SiteFeature[0];
-		return (SiteFeature[]) features.toArray(new SiteFeature[0]);
-	}
-
-	/**
-	 * Return the keys for translatable strings
-	 *
-	 * @return the list of keys for translatable strings; may be null
-	 * @since 3.4
-	 */
-	public List getMessageKeys() {
-		return messageKeys;
-	}
-
-	/**
-	 * Returns the URL from which the list of mirrors of this site can be retrieved.
-	 * 
-	 * @since org.eclipse.equinox.p2.metadata.generator 1.0
-	 */
-	public String getMirrorsURL() {
-		return mirrorsURLString;
-	}
-
-	/**
-	 * Sets the site description.
-	 * 
-	 * @param description site description
-	 * @since 2.0
-	 */
-	public void setDescription(URLEntry description) {
-		this.description = description;
-	}
-
-	/**
-	 * Sets the localizations for the site as a map from locale
-	 * to the set of translated properties for that locale.
-	 * 
-	 * @param localizations as a map from locale to property set
-	 * @since 3.4
-	 */
-	public void setLocalizations(Map localizations) {
-		this.localizations = localizations;
-		if (localizations != null && !localizations.isEmpty() && //
-				categories != null && !categories.isEmpty()) {
-			for (Iterator catIter = categories.entrySet().iterator(); catIter.hasNext();) {
-				Map.Entry entry = (Map.Entry) catIter.next();
-				SiteCategory category = (SiteCategory) entry.getValue();
-				category.setLocalizations(localizations);
-			}
-		}
-	}
-
-	/**
-	 * Sets keys for translatable strings
-	 * 
-	 * @param keys for translatable strings
-	 * @since 3.4
-	 */
-	public void setMessageKeys(List keys) {
-		this.messageKeys = keys;
-	}
-
-	/**
-	 * Sets the mirrors url. Mirror sites will then be obtained from this mirror url later.
-	 * This method is complementary to setMirrorsiteEntryModels(), and only one of these 
-	 * methods should be called.
-	 * 
-	 * @param mirrorsURL additional update site mirrors
-	 * @since 3.1
-	 */
-	public void setMirrorsURLString(String mirrorsURL) {
-		this.mirrorsURLString = mirrorsURL;
-	}
-
-	/**
-	 * Sets the associated sites for this update site.
-	 * 
-	 * @param associateSites the associated sites
-	 */
-	public void setAssociateSites(URLEntry[] associateSites) {
-		this.associateSites = associateSites;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/messages.properties
deleted file mode 100644
index 78bd8ff..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/features/messages.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-# Install Update Core Properties File
-#
-
-DefaultFeatureParser_IdOrVersionInvalid= Error parsing feature stream. The unique identifier or the version is null or empty for the State: \"{2}\": unique identifier=\"{0}\" version=\"{1}\".
-DefaultSiteParser_NoSiteTag= Error parsing site stream. Unable to find root element \"site\" in the stream.
-DefaultSiteParser_WrongParsingStack= Internal Error parsing site stream. Unexpected Parsing Stack: \"{0}\"
-DefaultSiteParser_UnknownElement= Error parsing site stream. Unknown element \"{0}\" in parsing state \"{1}\". Check the validity of the XML file.
-DefaultSiteParser_UnknownStartState= Internal Error parsing site stream. Unknown start state \"{0}\".
-DefaultSiteParser_Missing= Error parsing site stream. The \"{0}\" tag of the element \"{1}\" is null or empty. Value is required.
-DefaultSiteParser_ParsingStackBackToInitialState= Internal Error parsing site stream. Parsing stack back to Initial State.
-DefaultSiteParser_ElementAlreadySet= Error parsing site stream. Element: \"{0}\" already set for the Site.
-DefaultSiteParser_UnknownEndState= Internal Error parsing site stream. Unknown end state \"{0}\".
-DefaultSiteParser_ErrorParsing= Error Parsing site stream. Error: \"{0}\"
-DefaultSiteParser_ErrorlineColumnMessage= Error Parsing site stream. Element \"{0}\" line: \"{1}\" column:\"{2}\". Error: \"{3}\".
-DefaultSiteParser_ErrorParsingSite= Error Parsing site stream.
-DefaultSiteParser_UnknownState= Unknown State \"{0}\".
-DefaultSiteParser_InvalidXMLStream= The XML stream is not a valid default \"site.xml\" file. The root tag is not site.
-DefaultSiteParser_mirrors = Error processing update site mirror.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/messages.properties
deleted file mode 100644
index 348bc1e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/messages.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2007, 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-exception_errorConverting = An error occurred while generating manifest for {0}.
-exception_errorParsingUpdateSite = Error parsing update site: {0}.
-exception_stateAddition = An error has occurred while adding the bundle {0}.
-exception_sourceDirectoryInvalid = Source directory is invalid: {0}.
-exception_artifactRepoNotWritable = Artifact repository is not writable: {0}.
-exception_artifactRepoNotSpecified = An artifact repository was not specified.
-exception_metadataRepoNotWritable = Metadata repository not writable: {0}.
-exception_metadataRepoNotSpecified = A metadata repository location was not specified.
-exception_baseLocationNotSpecified = Eclipse base location not specified.
-exception_artifactRepoNoAppendDestroysInput = Not appending to artifact repository ({0}) will destroy input files.
-message_generatingMetadata = Generating metadata for {0}.
-message_generationCompleted = Generation completed with success [{0} seconds].
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/BundleDescriptionFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/BundleDescriptionFactory.java
deleted file mode 100644
index 218c6fe..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/BundleDescriptionFactory.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import java.io.*;
-import java.util.*;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.metadata.generator.Activator;
-import org.eclipse.equinox.internal.p2.metadata.generator.Messages;
-import org.eclipse.osgi.service.pluginconversion.PluginConversionException;
-import org.eclipse.osgi.service.pluginconversion.PluginConverter;
-import org.eclipse.osgi.service.resolver.*;
-import org.eclipse.osgi.util.ManifestElement;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.BundleException;
-
-/**
- * @deprecated All of the function here has moved to BundlesAction static methods
- */
-public class BundleDescriptionFactory {
-	static final String DIR = "dir"; //$NON-NLS-1$
-	static final String JAR = "jar"; //$NON-NLS-1$
-	private static final String FEATURE_FILENAME_DESCRIPTOR = "feature.xml"; //$NON-NLS-1$
-	private static final String PLUGIN_FILENAME_DESCRIPTOR = "plugin.xml"; //$NON-NLS-1$
-	private static final String FRAGMENT_FILENAME_DESCRIPTOR = "fragment.xml"; //$NON-NLS-1$
-
-	static String BUNDLE_FILE_KEY = "eclipse.p2.bundle.format"; //$NON-NLS-1$
-
-	//	static final String DEFAULT_BUNDLE_LOCALIZATION = "plugin"; //$NON-NLS-1$	
-	//	static final String PROPERTIES_FILE_EXTENSION = ".properties"; //$NON-NLS-1$
-	//	static final String MANIFEST_LOCALIZATIONS = "eclipse.p2.manifest.localizations"; //$NON-NLS-1$
-	//
-	//	static final Locale DEFAULT_LOCALE = new Locale("df", "LT"); //$NON-NLS-1$//$NON-NLS-2$
-	//	static final Locale PSEUDO_LOCALE = new Locale("zz", "ZZ"); //$NON-NLS-1$//$NON-NLS-2$
-
-	StateObjectFactory factory;
-	State state;
-
-	public BundleDescriptionFactory(StateObjectFactory factory, State state) {
-		this.factory = factory;
-		this.state = state;
-		//TODO find a state and a factory when not provided
-	}
-
-	private PluginConverter acquirePluginConverter() {
-		return (PluginConverter) ServiceHelper.getService(Activator.getContext(), PluginConverter.class.getName());
-	}
-
-	private Dictionary convertPluginManifest(File bundleLocation, boolean logConversionException) {
-		PluginConverter converter;
-		try {
-			converter = acquirePluginConverter();
-			if (converter == null) {
-				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Unable to aquire PluginConverter service during generation for: " + bundleLocation));
-				return null;
-			}
-			return converter.convertManifest(bundleLocation, false, null, true, null);
-		} catch (PluginConversionException convertException) {
-			// only log the exception if we had a plugin.xml or fragment.xml and we failed conversion
-			if (bundleLocation.getName().equals(FEATURE_FILENAME_DESCRIPTOR))
-				return null;
-			if (!new File(bundleLocation, PLUGIN_FILENAME_DESCRIPTOR).exists() && !new File(bundleLocation, FRAGMENT_FILENAME_DESCRIPTOR).exists())
-				return null;
-			if (logConversionException) {
-				IStatus status = new Status(IStatus.WARNING, Activator.ID, 0, NLS.bind(Messages.exception_errorConverting, bundleLocation.getAbsolutePath()), convertException);
-				LogHelper.log(status);
-			}
-			return null;
-		}
-	}
-
-	public BundleDescription getBundleDescription(Dictionary enhancedManifest, File bundleLocation) {
-		try {
-			BundleDescription descriptor = factory.createBundleDescription(state, enhancedManifest, bundleLocation != null ? bundleLocation.getAbsolutePath() : null, 1); //TODO Do we need to have a real bundle id
-			descriptor.setUserObject(enhancedManifest);
-			return descriptor;
-		} catch (BundleException e) {
-			String message = NLS.bind(Messages.exception_stateAddition, bundleLocation == null ? null : bundleLocation.getAbsoluteFile());
-			IStatus status = new Status(IStatus.WARNING, Activator.ID, message, e);
-			LogHelper.log(status);
-			return null;
-		}
-	}
-
-	public BundleDescription getBundleDescription(File bundleLocation) {
-		Dictionary manifest = loadManifest(bundleLocation);
-		if (manifest == null)
-			return null;
-		return getBundleDescription(manifest, bundleLocation);
-	}
-
-	public BundleDescription getBundleDescription(InputStream manifestStream, File bundleLocation) {
-		Hashtable entries = new Hashtable();
-		try {
-			ManifestElement.parseBundleManifest(manifestStream, entries);
-			return getBundleDescription(entries, bundleLocation);
-		} catch (IOException e) {
-			String message = "An error occurred while reading the bundle description " + (bundleLocation == null ? "" : bundleLocation.getAbsolutePath() + '.'); //$NON-NLS-1$ //$NON-NLS-2$
-			IStatus status = new Status(IStatus.ERROR, Activator.ID, message, e);
-			LogHelper.log(status);
-		} catch (BundleException e) {
-			String message = "An error occurred while reading the bundle description " + (bundleLocation == null ? "" : bundleLocation.getAbsolutePath() + '.'); //$NON-NLS-1$ //$NON-NLS-2$
-			IStatus status = new Status(IStatus.ERROR, Activator.ID, message, e);
-			LogHelper.log(status);
-		}
-		return null;
-	}
-
-	public Dictionary loadManifest(File bundleLocation) {
-		InputStream manifestStream = null;
-		ZipFile jarFile = null;
-		try {
-			if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && bundleLocation.isFile()) { //$NON-NLS-1$
-				jarFile = new ZipFile(bundleLocation, ZipFile.OPEN_READ);
-				ZipEntry manifestEntry = jarFile.getEntry(JarFile.MANIFEST_NAME);
-				if (manifestEntry != null) {
-					manifestStream = jarFile.getInputStream(manifestEntry);
-				}
-			} else {
-				File manifestFile = new File(bundleLocation, JarFile.MANIFEST_NAME);
-				if (manifestFile.exists())
-					manifestStream = new BufferedInputStream(new FileInputStream(manifestFile));
-			}
-		} catch (IOException e) {
-			//ignore but log
-			LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "An error occurred while loading the bundle manifest " + bundleLocation, e)); //$NON-NLS-1$
-		}
-
-		Dictionary manifest = null;
-		if (manifestStream != null) {
-			try {
-				Map manifestMap = ManifestElement.parseBundleManifest(manifestStream, null);
-				// TODO temporary hack.  We are reading a Map but everyone wants a Dictionary so convert.
-				// real answer is to have people expect a Map but that is a wider change.
-				manifest = new Hashtable(manifestMap);
-			} catch (IOException e) {
-				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "An error occurred while loading the bundle manifest " + bundleLocation, e)); //$NON-NLS-1$
-				return null;
-			} catch (BundleException e) {
-				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "An error occurred while loading the bundle manifest " + bundleLocation, e)); //$NON-NLS-1$
-				return null;
-			} finally {
-				try {
-					if (jarFile != null)
-						jarFile.close();
-				} catch (IOException e2) {
-					//Ignore
-				}
-			}
-		} else {
-			manifest = convertPluginManifest(bundleLocation, true);
-		}
-
-		if (manifest == null)
-			return null;
-
-		//Deal with the pre-3.0 plug-in shape who have a default jar manifest.mf
-		if (manifest.get(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME) == null)
-			manifest = convertPluginManifest(bundleLocation, true);
-
-		if (manifest == null)
-			return null;
-
-		manifest.put(BUNDLE_FILE_KEY, bundleLocation.isDirectory() ? DIR : JAR);
-		return manifest;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java
deleted file mode 100644
index a48dac7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java
+++ /dev/null
@@ -1,538 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.*;
-import java.util.*;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser;
-import org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.metadata.generator.Activator;
-import org.eclipse.equinox.internal.p2.metadata.generator.Messages;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.*;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.simpleconfigurator.manipulator.SimpleConfiguratorManipulator;
-import org.eclipse.osgi.service.environment.EnvironmentInfo;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * @deprecated The function in this class has been refactored into more focused locations
- * such as IPublisherAction and IPublishingAdvice classes.  See the individual method deprecations
- * for more information on where the code has moved.
- */
-public class EclipseInstallGeneratorInfoProvider implements IGeneratorInfo {
-	private final static String FILTER_OBJECTCLASS = "(" + Constants.OBJECTCLASS + "=" + FrameworkAdmin.class.getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
-	private final static String filterFwName = "(" + FrameworkAdmin.SERVICE_PROP_KEY_FW_NAME + "=Equinox)"; //$NON-NLS-1$ //$NON-NLS-2$
-	//String filterFwVersion = "(" + FrameworkAdmin.SERVICE_PROP_KEY_FW_VERSION + "=" + props.getProperty("equinox.fw.version") + ")";
-	private final static String filterLauncherName = "(" + FrameworkAdmin.SERVICE_PROP_KEY_LAUNCHER_NAME + "=Eclipse.exe)"; //$NON-NLS-1$ //$NON-NLS-2$
-	//String filterLauncherVersion = "(" + FrameworkAdmin.SERVICE_PROP_KEY_LAUNCHER_VERSION + "=" + props.getProperty("equinox.launcher.version") + ")";
-	private final static String frameworkAdminFillter = "(&" + FILTER_OBJECTCLASS + filterFwName + filterLauncherName + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-	private static final String ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR = "org.eclipse.equinox.simpleconfigurator"; //$NON-NLS-1$
-	private static final String ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL = "org.eclipse.equinox.simpleconfigurator.configUrl"; //$NON-NLS-1$
-	private static final String ORG_ECLIPSE_EQUINOX_P2_RECONCILER_DROPINS = "org.eclipse.equinox.p2.reconciler.dropins"; //$NON-NLS-1$
-
-	private String os;
-
-	/**
-	 * Returns a default name for the executable.
-	 * @param providedOS The operating system to return the executable for. If null,
-	 * the operating system is determined from the current runtime environment.
-	 */
-	public static String getDefaultExecutableName(String providedOS) {
-		String theOS = providedOS;
-		if (theOS == null) {
-			EnvironmentInfo info = (EnvironmentInfo) ServiceHelper.getService(Activator.getContext(), EnvironmentInfo.class.getName());
-			theOS = info.getOS();
-		}
-		if (theOS.equalsIgnoreCase("win32")) //$NON-NLS-1$
-			return "eclipse.exe"; //$NON-NLS-1$
-		if (theOS.equalsIgnoreCase("macosx")) //$NON-NLS-1$
-			return "Eclipse.app"; //$NON-NLS-1$
-		//FIXME Is this a reasonable default for all non-Windows platforms?
-		return "eclipse"; //$NON-NLS-1$
-	}
-
-	private boolean addDefaultIUs = true;
-
-	private boolean append = false;
-	private IArtifactRepository artifactRepository;
-	private File baseLocation;
-	private File[] bundleLocations;
-	private File configLocation;
-	private ArrayList defaultIUs;
-	private List otherIUs;
-	private File executableLocation;
-	private File featuresLocation;
-	private String flavor;
-	private ServiceTracker frameworkAdminTracker;
-	private Manipulator manipulator;
-	private IMetadataRepository metadataRepository;
-	private boolean publishArtifactRepo = false;
-	private boolean publishArtifacts = false;
-	private String rootId;
-	private String rootVersion;
-	private String productFile = null;
-	private String launcherConfig;
-	private String versionAdvice;
-
-	private URI siteLocation;
-
-	private boolean reuseExistingPack200Files = false;
-
-	public EclipseInstallGeneratorInfoProvider() {
-		super();
-	}
-
-	public boolean addDefaultIUs() {
-		return addDefaultIUs;
-	}
-
-	public boolean append() {
-		return append;
-	}
-
-	/** 
-	 * @deprecated moved to DefaultCUsAction
-	 */
-	protected GeneratorBundleInfo createDefaultConfigurationBundleInfo() {
-		GeneratorBundleInfo result = new GeneratorBundleInfo();
-		result.setSymbolicName("defaultConfigure"); //$NON-NLS-1$
-		result.setVersion("1.0.0"); //$NON-NLS-1$
-		result.setStartLevel(4);
-		// These should just be in the install section now
-		//		result.setSpecialConfigCommands("installBundle(bundle:${artifact});");
-		return result;
-	}
-
-	/** 
-	 * @deprecated moved to DefaultCUsAction
-	 */
-	protected GeneratorBundleInfo createDefaultUnconfigurationBundleInfo() {
-		GeneratorBundleInfo result = new GeneratorBundleInfo();
-		result.setSymbolicName("defaultUnconfigure"); //$NON-NLS-1$
-		result.setVersion("1.0.0"); //$NON-NLS-1$
-		// These should just be in the uninstall section now
-		//		result.setSpecialConfigCommands("uninstallBundle(bundle:${artifact});");
-		return result;
-	}
-
-	/**
-	 * Obtains the framework manipulator instance. Throws an exception
-	 * if it could not be created.
-	 * @deprecated see DataLoader
-	 */
-	private void createFrameworkManipulator() {
-		FrameworkAdmin admin = getFrameworkAdmin();
-		if (admin == null)
-			throw new RuntimeException("Framework admin service not found"); //$NON-NLS-1$
-		manipulator = admin.getManipulator();
-		if (manipulator == null)
-			throw new RuntimeException("Framework manipulator not found"); //$NON-NLS-1$
-	}
-
-	/** 
-	 * @deprecated moved to EquinoxLauncherData
-	 */
-	public static GeneratorBundleInfo createLauncher() {
-		GeneratorBundleInfo result = new GeneratorBundleInfo();
-		result.setSymbolicName("org.eclipse.equinox.launcher"); //$NON-NLS-1$
-		result.setVersion("0.0.0"); //$NON-NLS-1$
-		//result.setSpecialConfigCommands("manipulator.addProgramArgument('-startup'); manipulator.addProgramArgument(artifact);");
-		result.setSpecialConfigCommands("addProgramArg(programArg:-startup);addProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-		result.setSpecialUnconfigCommands("removeProgramArg(programArg:-startup);removeProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-		return result;
-	}
-
-	/** 
-	 * @deprecated moved to EquinoxLauncherCUAction
-	 */
-	private Collection createLauncherBundleInfo(Set ius) {
-		Collection result = new HashSet();
-		Collection launchers = getIUs(ius, "org.eclipse.equinox.launcher."); //$NON-NLS-1$
-		if (launchers.size() > 0) {
-			for (Iterator iterator = launchers.iterator(); iterator.hasNext();) {
-				IInstallableUnit object = (IInstallableUnit) iterator.next();
-				if (object.getId().endsWith(".source")) //$NON-NLS-1$
-					continue;
-				GeneratorBundleInfo temp = new GeneratorBundleInfo();
-				temp.setSymbolicName(object.getId());
-				temp.setVersion(object.getVersion().toString());
-				temp.setSpecialConfigCommands("addProgramArg(programArg:--launcher.library);addProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-				temp.setSpecialUnconfigCommands("removeProgramArg(programArg:--launcher.library);removeProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-				result.add(temp);
-			}
-		} else if (launcherConfig != null) {
-			String[] config = Generator.parseConfigSpec(launcherConfig);
-			//we want ws.os.arch
-			GeneratorBundleInfo temp = new GeneratorBundleInfo();
-			temp.setSymbolicName("org.eclipse.equinox.launcher." + config[1] + '.' + config[0] + '.' + config[2]); //$NON-NLS-1$
-			temp.setSpecialConfigCommands("addProgramArg(programArg:--launcher.library);addProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-			temp.setSpecialUnconfigCommands("removeProgramArg(programArg:--launcher.library);removeProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-			result.add(temp);
-		}
-		return result;
-	}
-
-	/**
-	 * @deprecated moved to EclipseInstallAction (perhaps it will be somewhere more general...)
-	 */
-	private GeneratorBundleInfo createSimpleConfiguratorBundleInfo() {
-		GeneratorBundleInfo result = new GeneratorBundleInfo();
-		result.setSymbolicName(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR);
-		result.setVersion("0.0.0"); //$NON-NLS-1$
-		result.setStartLevel(1);
-		result.setMarkedAsStarted(true);
-		return result;
-	}
-
-	/**
-	 * @deprecated moved to EclipseInstallAction (perhaps it will be somewhere more general...)
-	 */
-	private GeneratorBundleInfo createDropinsReconcilerBundleInfo() {
-		GeneratorBundleInfo result = new GeneratorBundleInfo();
-		result.setSymbolicName(ORG_ECLIPSE_EQUINOX_P2_RECONCILER_DROPINS);
-		result.setVersion("0.0.0"); //$NON-NLS-1$
-		result.setMarkedAsStarted(true);
-		result.setSpecialConfigCommands("mkdir(path:${installFolder}/dropins)"); //$NON-NLS-1$
-		return result;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private void expandBundleLocations() {
-		if (bundleLocations == null) {
-			bundleLocations = new File[] {};
-			return;
-		}
-		ArrayList result = new ArrayList();
-		for (int i = 0; i < bundleLocations.length; i++) {
-			File location = bundleLocations[i];
-			if (location.isDirectory()) {
-				File[] list = location.listFiles();
-				for (int j = 0; j < list.length; j++)
-					result.add(list[j]);
-			} else {
-				result.add(location);
-			}
-		}
-		bundleLocations = (File[]) result.toArray(new File[result.size()]);
-	}
-
-	public IArtifactRepository getArtifactRepository() {
-		return artifactRepository;
-	}
-
-	public File getBaseLocation() {
-		return baseLocation;
-	}
-
-	public File[] getBundleLocations() {
-		return bundleLocations;
-	}
-
-	public ConfigData getConfigData() {
-		return manipulator == null ? null : manipulator.getConfigData();
-	}
-
-	/**
-	 * @deprecated moved to DataLoader
-	 */
-	public ConfigData loadConfigData(File location) {
-		if (manipulator == null)
-			return null;
-
-		EquinoxFwConfigFileParser parser = new EquinoxFwConfigFileParser(Activator.getContext());
-		try {
-			parser.readFwConfig(manipulator, location);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (URISyntaxException e) {
-			e.printStackTrace();
-		}
-
-		ConfigData data = manipulator.getConfigData();
-		String value = data.getProperty(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL);
-		if (value != null) {
-			try {
-				//config.ini uses simpleconfigurator, read the bundles.info and replace the bundle infos
-				SimpleConfiguratorManipulator simpleManipulator = (SimpleConfiguratorManipulator) ServiceHelper.getService(Activator.getContext(), SimpleConfiguratorManipulator.class.getName());
-				BundleInfo[] bundleInfos = simpleManipulator.loadConfiguration(new URL(value).openStream(), null);
-				data.setBundles(bundleInfos);
-			} catch (MalformedURLException e1) {
-				// ignore
-			} catch (IOException e1) {
-				// ignore
-			}
-
-			try {
-				data.setProperty(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL, EquinoxManipulatorImpl.makeRelative(value, configLocation.toURL()));
-			} catch (MalformedURLException e) {
-				//ignore
-			}
-		}
-
-		return data;
-	}
-
-	/**
-	 * @deprecated logic moved to EclipseInstallAction (and related actions)
-	 */
-	public ArrayList getDefaultIUs(Set ius) {
-		if (defaultIUs != null)
-			return defaultIUs;
-		defaultIUs = new ArrayList(5);
-		if (addDefaultIUs) {
-			defaultIUs.addAll(createLauncherBundleInfo(ius));
-			defaultIUs.add(createLauncher());
-			defaultIUs.add(createSimpleConfiguratorBundleInfo());
-			defaultIUs.add(createDropinsReconcilerBundleInfo());
-			//			defaultIUs.add(createDefaultConfigurationBundleInfo());
-			//			defaultIUs.add(createDefaultUnconfigurationBundleInfo());
-		}
-		return defaultIUs;
-	}
-
-	// TODO: This is kind of ugly. It's purpose is to allow us to craft CUs that we know about and need for our build
-	// We should try to replace this with something more generic prior to release
-	/**
-	 * @deprecated this has been replaced with RootIUAdvice and related things
-	 */
-	public Collection getOtherIUs() {
-		if (otherIUs != null)
-			return otherIUs;
-		otherIUs = new ArrayList();
-		otherIUs.add(createDropinsReconcilerBundleInfo());
-		return otherIUs;
-	}
-
-	public File getExecutableLocation() {
-		return executableLocation;
-	}
-
-	public File getFeaturesLocation() {
-		return featuresLocation;
-	}
-
-	public String getFlavor() {
-		//use 'tooling' as default flavor since we are not actively using flavors yet
-		return flavor == null ? "tooling" : flavor; //$NON-NLS-1$
-	}
-
-	/**
-	 * @deprecated moved to DataLoader
-	 */
-	private FrameworkAdmin getFrameworkAdmin() {
-		if (frameworkAdminTracker == null) {
-			try {
-				Filter filter = Activator.getContext().createFilter(frameworkAdminFillter);
-				frameworkAdminTracker = new ServiceTracker(Activator.getContext(), filter, null);
-				frameworkAdminTracker.open();
-			} catch (InvalidSyntaxException e) {
-				// never happens
-				e.printStackTrace();
-			}
-		}
-
-		return (FrameworkAdmin) frameworkAdminTracker.getService();
-	}
-
-	private Collection getIUs(Set ius, String prefix) {
-		Set result = new HashSet();
-		for (Iterator iterator = ius.iterator(); iterator.hasNext();) {
-			IInstallableUnit tmp = (IInstallableUnit) iterator.next();
-			if (tmp.getId().startsWith(prefix))
-				result.add(tmp);
-		}
-		return result;
-	}
-
-	public File getJRELocation() {
-		//assume JRE is relative to install location
-		if (executableLocation == null)
-			return null;
-		return new File(executableLocation.getParentFile(), "jre"); //$NON-NLS-1$
-	}
-
-	public String getLauncherConfig() {
-		return launcherConfig;
-	}
-
-	public LauncherData getLauncherData() {
-		return manipulator == null ? null : manipulator.getLauncherData();
-	}
-
-	public IMetadataRepository getMetadataRepository() {
-		return metadataRepository;
-	}
-
-	public String getRootId() {
-		return rootId;
-	}
-
-	public String getRootVersion() {
-		if (rootVersion == null || rootVersion.length() == 0)
-			return "0.0.0"; //$NON-NLS-1$
-		return rootVersion;
-	}
-
-	public String getProductFile() {
-		return productFile;
-	}
-
-	public URI getSiteLocation() {
-		return siteLocation;
-	}
-
-	public void initialize(File base) {
-		// if the various locations are set in self, use them.  Otherwise compute defaults
-		File[] bundles = bundleLocations == null ? new File[] {new File(base, "plugins")} : bundleLocations; //$NON-NLS-1$
-		File features = featuresLocation == null ? new File(base, "features") : featuresLocation; //$NON-NLS-1$
-		File executable = executableLocation == null ? new File(base, getDefaultExecutableName(os)) : executableLocation;
-		File configuration = configLocation == null ? new File(base, "configuration") : configLocation; //$NON-NLS-1$
-
-		initialize(base, configuration, executable, bundles, features);
-	}
-
-	public void initialize(File base, File config, File executable, File[] bundles, File features) {
-		if (base == null || !base.exists())
-			throw new RuntimeException(NLS.bind(Messages.exception_sourceDirectoryInvalid, base == null ? "null" : base.getAbsolutePath())); //$NON-NLS-1$
-		this.baseLocation = base;
-		if (config == null || config.exists())
-			this.configLocation = config;
-		if (executable == null || executable.exists())
-			this.executableLocation = executable;
-		if (bundles != null)
-			bundleLocations = bundles;
-		if (features != null)
-			featuresLocation = features;
-		expandBundleLocations();
-
-		// if the config or exe are not set then we cannot be generating any data related to the config so 
-		// don't bother setting up the manipulator.  In fact, the manipulator will likely be invalid without
-		// these locations.
-		if (configLocation == null || executableLocation == null)
-			return;
-
-		createFrameworkManipulator();
-
-		LauncherData launcherData = manipulator.getLauncherData();
-		launcherData.setFwPersistentDataLocation(configLocation, true);
-		launcherData.setLauncher(executableLocation);
-		try {
-			manipulator.load();
-		} catch (IllegalStateException e2) {
-			// TODO Auto-generated catch block
-			e2.printStackTrace();
-		} catch (FrameworkAdminRuntimeException e2) {
-			// TODO Auto-generated catch block
-			e2.printStackTrace();
-		} catch (IOException e2) {
-			// TODO Auto-generated catch block
-			e2.printStackTrace();
-		}
-	}
-
-	public boolean publishArtifactRepository() {
-		return publishArtifactRepo;
-	}
-
-	public boolean publishArtifacts() {
-		return publishArtifacts;
-	}
-
-	public boolean reuseExistingPack200Files() {
-		return reuseExistingPack200Files;
-	}
-
-	public void reuseExistingPack200Files(boolean publishPack) {
-		reuseExistingPack200Files = publishPack;
-	}
-
-	public void setAddDefaultIUs(boolean value) {
-		addDefaultIUs = value;
-	}
-
-	public void setAppend(boolean value) {
-		append = value;
-	}
-
-	public void setArtifactRepository(IArtifactRepository value) {
-		artifactRepository = value;
-	}
-
-	public void setExecutableLocation(String value) {
-		executableLocation = new File(value);
-	}
-
-	public void setFlavor(String value) {
-		flavor = value;
-	}
-
-	public void setLauncherConfig(String value) {
-		launcherConfig = value;
-	}
-
-	public void setMappingRules(String[][] value) {
-	}
-
-	public void setMetadataRepository(IMetadataRepository value) {
-		metadataRepository = value;
-	}
-
-	public void setOS(String os) {
-		this.os = os;
-	}
-
-	public void setPublishArtifactRepository(boolean value) {
-		publishArtifactRepo = value;
-	}
-
-	public void setPublishArtifacts(boolean value) {
-		publishArtifacts = value;
-	}
-
-	public void setRootId(String value) {
-		rootId = value;
-	}
-
-	public void setRootVersion(String value) {
-		rootVersion = value;
-	}
-
-	public void setProductFile(String file) {
-		productFile = file;
-	}
-
-	/**
-	 * Sets the location of site.xml if applicable.
-	 */
-	public void setSiteLocation(URI location) {
-		this.siteLocation = location;
-	}
-
-	public String getVersionAdvice() {
-		return versionAdvice;
-	}
-
-	public void setVersionAdvice(String advice) {
-		this.versionAdvice = advice;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Feature.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Feature.java
deleted file mode 100644
index e27ff87..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Feature.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import java.util.ArrayList;
-import java.util.Map;
-
-/**
- * 
- * Feature information
- */
-public class Feature {
-
-	private final String id;
-	private final String version;
-	private String label;
-	private String pluginId;
-	private boolean primary = false;
-	private boolean exclusive = false;
-	private String application;
-
-	private URLEntry description;
-	private URLEntry license;
-	private URLEntry copyright;
-
-	private String installHandler;
-	private String installHandlerURL;
-	private String installHandlerLibrary;
-
-	private URLEntry updateSite;
-	private ArrayList discoverySites;
-
-	private ArrayList entries;
-	private String providerName;
-
-	private String location;
-
-	private Map localizations;
-
-	public Feature(String id, String version) {
-		if (id == null)
-			throw new IllegalArgumentException();
-		this.id = id;
-		this.version = version;
-	}
-
-	public void addDiscoverySite(String siteLabel, String url) {
-		if (siteLabel == null && url == null)
-			return;
-
-		if (this.discoverySites == null)
-			this.discoverySites = new ArrayList();
-
-		URLEntry entry = new URLEntry(url, siteLabel);
-		this.discoverySites.add(entry);
-	}
-
-	public void addEntry(FeatureEntry plugin) {
-		if (entries == null)
-			entries = new ArrayList();
-		entries.add(plugin);
-	}
-
-	public String getApplication() {
-		return application;
-	}
-
-	public String getCopyright() {
-		if (copyright != null)
-			return copyright.getAnnotation();
-		return null;
-	}
-
-	public String getCopyrightURL() {
-		if (copyright != null)
-			return copyright.getURL();
-		return null;
-	}
-
-	public String getDescription() {
-		if (description != null)
-			return description.getAnnotation();
-		return null;
-	}
-
-	public String getDescriptionURL() {
-		if (description != null)
-			return description.getURL();
-		return null;
-	}
-
-	public URLEntry[] getDiscoverySites() {
-		if (discoverySites == null)
-			return new URLEntry[0];
-		return (URLEntry[]) discoverySites.toArray(new URLEntry[discoverySites.size()]);
-	}
-
-	public FeatureEntry[] getEntries() {
-		if (entries == null)
-			return new FeatureEntry[0];
-		return (FeatureEntry[]) entries.toArray(new FeatureEntry[entries.size()]);
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public String getInstallHandler() {
-		return installHandler;
-	}
-
-	public String getInstallHandlerLibrary() {
-		return installHandlerLibrary;
-	}
-
-	public String getInstallHandlerURL() {
-		return installHandlerURL;
-	}
-
-	public String getLabel() {
-		return label;
-	}
-
-	public String getLicense() {
-		if (license != null)
-			return license.getAnnotation();
-		return null;
-	}
-
-	public String getLicenseURL() {
-		if (license != null)
-			return license.getURL();
-		return null;
-	}
-
-	public Map getLocalizations() {
-		return this.localizations;
-	}
-
-	public String getLocation() {
-		return this.location;
-	}
-
-	public String getPlugin() {
-		return pluginId;
-	}
-
-	public String getProviderName() {
-		return providerName;
-	}
-
-	public URLEntry getUpdateSite() {
-		return updateSite;
-	}
-
-	public String getVersion() {
-		return version;
-	}
-
-	public boolean isExclusive() {
-		return exclusive;
-	}
-
-	public boolean isPrimary() {
-		return primary;
-	}
-
-	public void setApplication(String application) {
-		this.application = application;
-	}
-
-	public void setCopyright(String copyright) {
-		if (this.copyright == null)
-			this.copyright = new URLEntry();
-		this.copyright.setAnnotation(copyright);
-	}
-
-	public void setCopyrightURL(String copyrightURL) {
-		if (this.copyright == null)
-			this.copyright = new URLEntry();
-		this.copyright.setURL(copyrightURL);
-	}
-
-	public void setDescription(String description) {
-		if (this.description == null)
-			this.description = new URLEntry();
-		this.description.setAnnotation(description);
-	}
-
-	public void setDescriptionURL(String descriptionURL) {
-		if (this.description == null)
-			this.description = new URLEntry();
-		this.description.setURL(descriptionURL);
-	}
-
-	public void setExclusive(boolean exclusive) {
-		this.exclusive = exclusive;
-	}
-
-	public void setInstallHandler(String installHandler) {
-		this.installHandler = installHandler;
-	}
-
-	public void setInstallHandlerLibrary(String installHandlerLibrary) {
-		this.installHandlerLibrary = installHandlerLibrary;
-	}
-
-	public void setInstallHandlerURL(String installHandlerURL) {
-		this.installHandlerURL = installHandlerURL;
-	}
-
-	public void setLabel(String label) {
-		this.label = label;
-	}
-
-	public void setLicense(String license) {
-		if (this.license == null)
-			this.license = new URLEntry();
-		this.license.setAnnotation(license);
-	}
-
-	public void setLicenseURL(String licenseURL) {
-		if (this.license == null)
-			this.license = new URLEntry();
-		this.license.setURL(licenseURL);
-	}
-
-	public void setLocalizations(Map localizations) {
-		this.localizations = localizations;
-	}
-
-	public void setLocation(String location) {
-		this.location = location;
-	}
-
-	public void setPlugin(String pluginId) {
-		this.pluginId = pluginId;
-	}
-
-	public void setPrimary(boolean primary) {
-		this.primary = primary;
-	}
-
-	public void setProviderName(String value) {
-		providerName = value;
-	}
-
-	public void setUpdateSiteLabel(String updateSiteLabel) {
-		if (this.updateSite == null)
-			this.updateSite = new URLEntry();
-		this.updateSite.setAnnotation(updateSiteLabel);
-	}
-
-	public void setUpdateSiteURL(String updateSiteURL) {
-		if (this.updateSite == null)
-			this.updateSite = new URLEntry();
-		this.updateSite.setURL(updateSiteURL);
-	}
-
-	public void setURL(String value) {
-		//
-	}
-
-	/**
-	 * For debugging purposes only.
-	 */
-	public String toString() {
-		return "Feature " + id + " version: " + version; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/FeatureEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/FeatureEntry.java
deleted file mode 100644
index 870a3b6..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/FeatureEntry.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import org.eclipse.equinox.p2.metadata.Version;
-
-/**
- */
-public class FeatureEntry {
-	private final String id;
-	private final String version;
-	private String os;
-	private String ws;
-	private String arch;
-	private String nl;
-	private String match;
-	private final boolean isPlugin;
-	private boolean isFragment = false;
-	private boolean isRequires = false;
-	private boolean unpack = true;
-	private boolean optional = false;
-	private boolean isPatch = false;
-
-	/**
-	 * Temporary field to add provisioning filters to features
-	 */
-	private String filter;
-
-	public static FeatureEntry createRequires(String id, String version, String match, String filter, boolean isPlugin) {
-		FeatureEntry result = new FeatureEntry(id, version, isPlugin);
-		result.match = match;
-		result.isRequires = true;
-		if (filter != null)
-			result.setFilter(filter);
-		return result;
-	}
-
-	public FeatureEntry(String id, String version, boolean isPlugin) {
-		this.id = id;
-		this.version = Version.parseVersion(version).toString();
-		this.isPlugin = isPlugin;
-	}
-
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		final FeatureEntry other = (FeatureEntry) obj;
-		if (id == null) {
-			if (other.id != null)
-				return false;
-		} else if (!id.equals(other.id))
-			return false;
-		if (version == null) {
-			if (other.version != null)
-				return false;
-		} else if (!version.equals(other.version))
-			return false;
-		return true;
-	}
-
-	public String getArch() {
-		return arch;
-	}
-
-	/**
-	 * Temporary method to add provisioning filters to features
-	 */
-	public String getFilter() {
-		return filter;
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public String getMatch() {
-		return match;
-	}
-
-	public String getNL() {
-		return nl;
-	}
-
-	public String getOS() {
-		return os;
-	}
-
-	public String getVersion() {
-		return version;
-	}
-
-	public String getWS() {
-		return ws;
-	}
-
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((id == null) ? 0 : id.hashCode());
-		result = prime * result + ((version == null) ? 0 : version.hashCode());
-		return result;
-	}
-
-	public boolean isFragment() {
-		return isFragment;
-	}
-
-	public boolean isOptional() {
-		return optional;
-	}
-
-	public boolean isPlugin() {
-		return isPlugin;
-	}
-
-	public boolean isRequires() {
-		return isRequires;
-	}
-
-	public boolean isUnpack() {
-		return unpack;
-	}
-
-	public void setEnvironment(String os, String ws, String arch, String nl) {
-		this.os = os;
-		this.ws = ws;
-		this.arch = arch;
-		this.nl = nl;
-	}
-
-	/**
-	 * Temporary method to add provisioning filters to features
-	 */
-	public void setFilter(String filter) {
-		this.filter = filter;
-
-	}
-
-	public void setFragment(boolean value) {
-		isFragment = value;
-	}
-
-	public void setOptional(boolean value) {
-		optional = value;
-	}
-
-	public void setUnpack(boolean value) {
-		unpack = value;
-	}
-
-	public String toString() {
-		StringBuffer result = new StringBuffer();
-
-		result.append(isPlugin ? "Plugin: " : "Feature: "); //$NON-NLS-1$ //$NON-NLS-2$
-		result.append(id != null ? id.toString() : ""); //$NON-NLS-1$
-		result.append(version != null ? " " + version.toString() : ""); //$NON-NLS-1$ //$NON-NLS-2$
-		return result.toString();
-	}
-
-	public boolean isPatch() {
-		return isPatch;
-	}
-
-	public void setPatch(boolean patch) {
-		this.isPatch = patch;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java
deleted file mode 100644
index f406356..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java
+++ /dev/null
@@ -1,1402 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import java.io.*;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-import java.util.Map.Entry;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxConstants;
-import org.eclipse.equinox.internal.p2.core.helpers.*;
-import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
-import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
-import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
-import org.eclipse.equinox.internal.p2.metadata.generator.*;
-import org.eclipse.equinox.internal.p2.metadata.generator.Messages;
-import org.eclipse.equinox.internal.p2.metadata.generator.features.*;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.LauncherData;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
-import org.eclipse.equinox.p2.metadata.VersionRange;
-import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
-import org.eclipse.equinox.p2.query.*;
-import org.eclipse.equinox.p2.repository.IRepository;
-import org.eclipse.equinox.p2.repository.artifact.*;
-import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.p2.repository.spi.RepositoryReference;
-import org.eclipse.osgi.service.environment.Constants;
-import org.eclipse.osgi.service.resolver.*;
-import org.eclipse.osgi.util.NLS;
-
-public class Generator {
-	/**
-	 * Captures the output of an execution of the generator.
-	 */
-	public static class GeneratorResult {
-		public static final String CONFIGURATION_CUS = "CONFIGURATION_CUS"; //$NON-NLS-1$
-
-		final public Map pluginShape = new HashMap();
-
-		/**
-		 * The set of generated IUs that will be children of the root IU
-		 */
-		final public Set rootIUs = new HashSet();
-		/**
-		 * The set of generated IUs that will not be children of the root IU
-		 */
-		final public Set nonRootIUs = new HashSet();
-
-		/**
-		 * Map of symbolic name to a set of generated CUs for that IU
-		 */
-		final public Map configurationIUs = new HashMap();
-
-		/**
-		 * Map launcherConfig to config.ini ConfigData
-		 */
-		final public Map configData = new HashMap();
-
-		/**
-		 * Returns all IUs generated during this execution of the generator.
-		 */
-		public Set allGeneratedIUs() {
-			HashSet all = new HashSet();
-			all.addAll(rootIUs);
-			all.addAll(nonRootIUs);
-			return all;
-		}
-
-		/**
-		 * Returns the IU in this result with the given id.
-		 */
-		public IInstallableUnit getInstallableUnit(String id) {
-			for (Iterator iterator = rootIUs.iterator(); iterator.hasNext();) {
-				IInstallableUnit tmp = (IInstallableUnit) iterator.next();
-				if (tmp.getId().equals(id))
-					return tmp;
-			}
-			for (Iterator iterator = nonRootIUs.iterator(); iterator.hasNext();) {
-				IInstallableUnit tmp = (IInstallableUnit) iterator.next();
-				if (tmp.getId().equals(id))
-					return tmp;
-			}
-			return null;
-
-		}
-
-		public Map getPluginShapeInfo() {
-			return pluginShape;
-		}
-	}
-
-	private static final String ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR = "org.eclipse.equinox.simpleconfigurator"; //$NON-NLS-1$
-	private static final String ORG_ECLIPSE_UPDATE_CONFIGURATOR = "org.eclipse.update.configurator"; //$NON-NLS-1$
-	private static final String ORG_ECLIPSE_EQUINOX_LAUNCHER = "org.eclipse.equinox.launcher"; //$NON-NLS-1$
-
-	private static final String PRODUCT_CONFIG_SUFFIX = ".config"; //$NON-NLS-1$
-	private static final String PRODUCT_INI_SUFFIX = ".ini"; //$NON-NLS-1$
-	private static final String PRODUCT_LAUCHER_SUFFIX = ".launcher"; //$NON-NLS-1$
-	private static final String CONFIG_ANY = "ANY"; //$NON-NLS-1$
-
-	private static final String PROTOCOL_FILE = "file"; //$NON-NLS-1$
-
-	protected final IGeneratorInfo info;
-
-	private GeneratorResult incrementalResult = null;
-	private ProductFile productFile = null;
-	private boolean generateRootIU = true;
-
-	/**
-	 * Short term fix to ensure IUs that have no corresponding category are not lost.
-	 * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=211521.
-	 */
-	protected final Set rootCategory = new HashSet();
-
-	private StateObjectFactory stateObjectFactory;
-
-	/**
-	 * Convert a list of tokens into an array. The list separator has to be
-	 * specified.
-	 */
-	public static String[] getArrayFromString(String list, String separator) {
-		if (list == null || list.trim().equals("")) //$NON-NLS-1$
-			return new String[0];
-		List result = new ArrayList();
-		for (StringTokenizer tokens = new StringTokenizer(list, separator); tokens.hasMoreTokens();) {
-			String token = tokens.nextToken().trim();
-			if (!token.equals("")) //$NON-NLS-1$
-				result.add(token);
-		}
-		return (String[]) result.toArray(new String[result.size()]);
-	}
-
-	public static String[] parseConfigSpec(String config) {
-		String[] parsed = getArrayFromString(config, "_"); //$NON-NLS-1$
-		for (int i = 0; i < parsed.length; i++) {
-			if (parsed[i].equals("*")) //$NON-NLS-1$
-				parsed[i] = "ANY"; //$NON-NLS-1$
-		}
-		if (parsed.length > 3) {
-			String[] adjusted = new String[] {parsed[0], parsed[1], parsed[2] + '_' + parsed[3]};
-			return adjusted;
-		}
-		return parsed;
-	}
-
-	public Generator(IGeneratorInfo infoProvider) {
-		this.info = infoProvider;
-		// TODO need to figure a better way of configuring the generator...
-		PlatformAdmin platformAdmin = (PlatformAdmin) ServiceHelper.getService(Activator.getContext(), PlatformAdmin.class.getName());
-		if (platformAdmin != null) {
-			stateObjectFactory = platformAdmin.getFactory();
-		}
-	}
-
-	public void setIncrementalResult(GeneratorResult result) {
-		this.incrementalResult = result;
-	}
-
-	private String getProductVersion() {
-		String version = "1.0.0"; //$NON-NLS-1$
-		if (productFile != null && !productFile.getVersion().equals("0.0.0")) //$NON-NLS-1$
-			version = productFile.getVersion();
-		else if (!info.getRootVersion().equals("0.0.0")) //$NON-NLS-1$
-			version = info.getRootVersion();
-		return version;
-	}
-
-	/** 
-	 * @deprecated moved to ProductAction
-	 */
-	protected IInstallableUnit createProductIU(GeneratorResult result) {
-		generateProductConfigCUs(result);
-
-		GeneratorResult productContents = new GeneratorResult();
-
-		ProductQuery productQuery = new ProductQuery(productFile, info.getFlavor(), result.configurationIUs, info.getVersionAdvice());
-		IQuery query = QueryUtil.createLatestQuery(productQuery);
-		IQueryResult queryResult = info.getMetadataRepository().query(query, null);
-		for (Iterator iterator = queryResult.iterator(); iterator.hasNext();) {
-			productContents.rootIUs.add(iterator.next());
-		}
-
-		String version = getProductVersion();
-		VersionRange range = new VersionRange(Version.create(version), true, Version.create(version), true);
-		ArrayList requires = new ArrayList(1);
-		requires.add(MetadataFactory.createRequirement(info.getFlavor() + productFile.getId(), productFile.getId() + PRODUCT_LAUCHER_SUFFIX, range, null, false, true));
-		requires.add(MetadataFactory.createRequirement(info.getFlavor() + productFile.getId(), productFile.getId() + PRODUCT_INI_SUFFIX, range, null, false, false));
-		requires.add(MetadataFactory.createRequirement(info.getFlavor() + productFile.getId(), productFile.getId() + PRODUCT_CONFIG_SUFFIX, range, null, false, false));
-
-		//default CUs		
-		requires.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, MetadataGeneratorHelper.createDefaultConfigUnitId(MetadataGeneratorHelper.OSGI_BUNDLE_CLASSIFIER, info.getFlavor()), VersionRange.emptyRange, null, false, false));
-		requires.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, MetadataGeneratorHelper.createDefaultConfigUnitId("source", info.getFlavor()), VersionRange.emptyRange, null, false, false)); //$NON-NLS-1$
-		if (productFile.useFeatures())
-			requires.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, MetadataGeneratorHelper.createDefaultConfigUnitId(MetadataGeneratorHelper.ECLIPSE_FEATURE_CLASSIFIER, info.getFlavor()), VersionRange.emptyRange, MetadataGeneratorHelper.INSTALL_FEATURES_FILTER, true, false));
-
-		InstallableUnitDescription root = createTopLevelIUDescription(productContents, productFile.getId(), version, productFile.getProductName(), requires, false);
-		return MetadataFactory.createInstallableUnit(root);
-	}
-
-	/**
-	 * @deprecated moved to RootIUAction
-	 */
-	protected IInstallableUnit createTopLevelIU(GeneratorResult result, String configurationIdentification, String configurationVersion) {
-		// TODO, bit of a hack but for now set the name of the IU to the ID.
-		InstallableUnitDescription root = createTopLevelIUDescription(result, configurationIdentification, configurationVersion, configurationIdentification, null, true);
-		return MetadataFactory.createInstallableUnit(root);
-	}
-
-	/**
-	 * @deprecated moved to RootIUAction
-	 */
-	protected InstallableUnitDescription createTopLevelIUDescription(GeneratorResult result, String configurationIdentification, String configurationVersion, String configurationName, List requires, boolean configureLauncherData) {
-		InstallableUnitDescription root = new MetadataFactory.InstallableUnitDescription();
-		root.setSingleton(true);
-		root.setId(configurationIdentification);
-		root.setVersion(Version.create(configurationVersion));
-		root.setProperty(IInstallableUnit.PROP_NAME, configurationName);
-
-		ArrayList reqsConfigurationUnits = new ArrayList(result.rootIUs.size());
-		for (Iterator iterator = result.rootIUs.iterator(); iterator.hasNext();) {
-			IInstallableUnit iu = (IInstallableUnit) iterator.next();
-			VersionRange range = new VersionRange(iu.getVersion(), true, iu.getVersion(), true);
-			//			boolean isOptional = checkOptionalRootDependency(iu);
-			reqsConfigurationUnits.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, iu.getId(), range, iu.getFilter(), false, false));
-		}
-		if (requires != null)
-			reqsConfigurationUnits.addAll(requires);
-		root.setRequirements((IRequirement[]) reqsConfigurationUnits.toArray(new IRequirement[reqsConfigurationUnits.size()]));
-		root.setArtifacts(new IArtifactKey[0]);
-
-		root.setProperty("lineUp", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-		root.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(configurationIdentification, VersionRange.emptyRange, IUpdateDescriptor.NORMAL, null));
-		root.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString());
-		root.setCapabilities(new IProvidedCapability[] {MetadataGeneratorHelper.createSelfCapability(configurationIdentification, Version.create(configurationVersion))});
-		root.setTouchpointType(MetadataGeneratorHelper.TOUCHPOINT_OSGI);
-		Map touchpointData = new HashMap();
-
-		// Publisher refactor - the configdata stuff moved to a distinct IU added by the ConfigCUsAction
-		String configurationData = ""; //$NON-NLS-1$
-		String unconfigurationData = ""; //$NON-NLS-1$
-
-		ConfigData configData = info.getConfigData();
-		if (configData != null) {
-			String[] dataStrings = getConfigurationStrings(configData);
-			configurationData += dataStrings[0];
-			unconfigurationData += dataStrings[1];
-		}
-
-		if (configureLauncherData) {
-			LauncherData launcherData = info.getLauncherData();
-			if (launcherData != null) {
-				String[] dataStrings = getLauncherConfigStrings(launcherData.getJvmArgs(), launcherData.getProgramArgs());
-				configurationData += dataStrings[0];
-				unconfigurationData += dataStrings[1];
-			}
-		}
-		touchpointData.put("configure", configurationData); //$NON-NLS-1$
-		touchpointData.put("unconfigure", unconfigurationData); //$NON-NLS-1$
-		//look for additional touchpoint instructions in a p2.inf file
-		final String productFileLocation = info.getProductFile();
-		if (productFileLocation != null) {
-			File productFilePath = new File(productFileLocation);
-			if (productFilePath.exists()) {
-				Map advice = MetadataGeneratorHelper.getBundleAdvice(productFilePath.getParent(), "p2.inf");//$NON-NLS-1$
-				if (advice != null)
-					MetadataGeneratorHelper.mergeInstructionsAdvice(touchpointData, advice);
-			}
-		}
-
-		root.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		return root;
-	}
-
-	/**
-	 * @deprecated moved to ConfigCUsAction
-	 */
-	private String[] getConfigurationStrings(ConfigData configData) {
-		String configurationData = ""; //$NON-NLS-1$
-		String unconfigurationData = ""; //$NON-NLS-1$
-		for (Iterator iterator = configData.getProperties().entrySet().iterator(); iterator.hasNext();) {
-			Entry aProperty = (Entry) iterator.next();
-			String key = ((String) aProperty.getKey());
-			if (key.equals("osgi.frameworkClassPath") || key.equals("osgi.framework") || key.equals("osgi.bundles") || key.equals("eof")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-				continue;
-			configurationData += "setProgramProperty(propName:" + key + ", propValue:" + ((String) aProperty.getValue()) + ");"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			unconfigurationData += "setProgramProperty(propName:" + key + ", propValue:);"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		for (Iterator iterator = configData.getProperties().entrySet().iterator(); iterator.hasNext();) {
-			Entry aProperty = (Entry) iterator.next();
-			String key = ((String) aProperty.getKey());
-			if (key.equals("osgi.frameworkClassPath") || key.equals("osgi.framework") || key.equals("osgi.bundles") || key.equals("eof")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-				continue;
-			configurationData += "setProgramProperty(propName:" + key + ", propValue:" + ((String) aProperty.getValue()) + ");"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			unconfigurationData += "setProgramProperty(propName:" + key + ", propValue:);"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-
-		return new String[] {configurationData, unconfigurationData};
-	}
-
-	/**
-	 * @deprecated moved to ConfigCUsAction
-	 */
-	private String[] getLauncherConfigStrings(final String[] jvmArgs, final String[] programArgs) {
-		String configurationData = ""; //$NON-NLS-1$
-		String unconfigurationData = ""; //$NON-NLS-1$
-
-		for (int i = 0; i < jvmArgs.length; i++) {
-			configurationData += "addJvmArg(jvmArg:" + jvmArgs[i] + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-			unconfigurationData += "removeJvmArg(jvmArg:" + jvmArgs[i] + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-
-		for (int i = 0; i < programArgs.length; i++) {
-			String programArg = programArgs[i];
-			if (programArg.equals("--launcher.library") || programArg.equals("-startup") || programArg.equals("-configuration")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				i++;
-			configurationData += "addProgramArg(programArg:" + programArg + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-			unconfigurationData += "removeProgramArg(programArg:" + programArg + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		return new String[] {configurationData, unconfigurationData};
-	}
-
-	public IStatus generate() {
-		GeneratorResult result = incrementalResult != null ? incrementalResult : new GeneratorResult();
-
-		if (info.getProductFile() != null) {
-			try {
-				productFile = new ProductFile(info.getProductFile(), null);
-			} catch (Exception e) {
-				//TODO
-			}
-		}
-
-		Feature[] features = getFeatures(info.getFeaturesLocation());
-		generateFeatureIUs(features, result, info.getArtifactRepository());
-
-		BundleDescription[] bundles = getBundleDescriptions(info.getBundleLocations());
-		generateBundleIUs(bundles, result, info.getArtifactRepository());
-
-		generateNativeIUs(info.getExecutableLocation(), result, info.getArtifactRepository());
-
-		generateConfigIUs(result);
-
-		if (info.addDefaultIUs())
-			generateDefaultConfigIU(result.rootIUs);
-
-		if (generateRootIU)
-			generateRootIU(result, info.getRootId(), info.getRootVersion());
-
-		//		persistence.setMappingRules(info.getMappingRules() == null ? defaultMappingRules : info.getMappingRules());
-		//		if (info.publishArtifacts() || info.publishArtifactRepository()) {
-		//			persistence.saveArtifactRepository();
-		//		}
-		IMetadataRepository metadataRepository = info.getMetadataRepository();
-		if (metadataRepository != null) {
-			Set allGeneratedUnits = result.allGeneratedIUs();
-			metadataRepository.addInstallableUnits(allGeneratedUnits);
-		}
-
-		return Status.OK_STATUS;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	protected void generateBundleIUs(BundleDescription[] bundles, GeneratorResult result, IArtifactRepository destination) {
-		// Computing the path for localized property files in a NL fragment bundle
-		// requires the BUNDLE_LOCALIZATION property from the manifest of the host bundle,
-		// so a first pass is done over all the bundles to cache this value as well as the tags
-		// from the manifest for the localizable properties.
-		final int CACHE_PHASE = 0;
-		final int GENERATE_PHASE = 1;
-		Map bundleLocalizationMap = new HashMap(bundles.length);
-		Set localizationIUs = new HashSet(32);
-		for (int phase = CACHE_PHASE; phase <= GENERATE_PHASE; phase++) {
-			for (int i = 0; i < bundles.length; i++) {
-				BundleDescription bd = bundles[i];
-				// A bundle may be null if the associated plug-in does not have a manifest file -
-				// for example, org.eclipse.jdt.launching.j9
-				if (bd != null && bd.getSymbolicName() != null && bd.getVersion() != null) {
-					Map bundleManifest = (Map) bd.getUserObject();
-
-					if (phase == CACHE_PHASE) {
-						if (bundleManifest != null) {
-							String[] cachedValues = MetadataGeneratorHelper.getManifestCachedValues(bundleManifest);
-							bundleLocalizationMap.put(makeSimpleKey(bd), cachedValues);
-						}
-					} else {
-						String format = (String) result.getPluginShapeInfo().get(bd.getSymbolicName() + '_' + bd.getVersion());
-						if (format == null)
-							format = (String) bundleManifest.get(BundleDescriptionFactory.BUNDLE_FILE_KEY);
-						boolean isDir = (format != null && format.equals(BundleDescriptionFactory.DIR) ? true : false);
-
-						IArtifactKey key = new ArtifactKey(MetadataGeneratorHelper.OSGI_BUNDLE_CLASSIFIER, bd.getSymbolicName(), Version.create(bd.getVersion().toString()));
-						IArtifactDescriptor ad = MetadataGeneratorHelper.createArtifactDescriptor(key, new File(bd.getLocation()), true, false);
-						((ArtifactDescriptor) ad).setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP);
-						File bundleFile = new File(bd.getLocation());
-						if (bundleFile.isDirectory())
-							publishArtifact(ad, bundleFile.listFiles(), destination, false, bundleFile);
-						else
-							publishArtifact(ad, new File[] {bundleFile}, destination, true);
-						if (info.reuseExistingPack200Files() && !info.publishArtifacts()) {
-							File packFile = new Path(bd.getLocation()).addFileExtension("pack.gz").toFile(); //$NON-NLS-1$
-							if (packFile.exists()) {
-								IArtifactDescriptor ad200 = MetadataGeneratorHelper.createPack200ArtifactDescriptor(key, packFile, ad.getProperty(IArtifactDescriptor.ARTIFACT_SIZE));
-								publishArtifact(ad200, new File[] {packFile}, destination, true);
-							}
-						}
-
-						IInstallableUnit bundleIU = MetadataGeneratorHelper.createBundleIU(bd, bundleManifest, isDir, key, true);
-
-						if (isFragment(bd)) {
-							// TODO: Can NL fragments be multi-host?  What special handling
-							//		 is required for multi-host fragments in general?
-							String hostId = bd.getHost().getName();
-							String hostKey = makeSimpleKey(hostId);
-							String[] cachedValues = (String[]) bundleLocalizationMap.get(hostKey);
-
-							if (cachedValues != null) {
-								MetadataGeneratorHelper.createHostLocalizationFragment(bundleIU, bd, hostId, cachedValues, localizationIUs);
-							}
-						}
-
-						result.rootIUs.add(bundleIU);
-						result.nonRootIUs.addAll(localizationIUs);
-						localizationIUs.clear();
-					}
-				}
-			}
-		}
-	}
-
-	private static boolean isFragment(BundleDescription bd) {
-		return (bd.getHost() != null ? true : false);
-	}
-
-	private static String makeSimpleKey(BundleDescription bd) {
-		// TODO: can't use the bundle version in the key for the BundleLocalization
-		//		 property map since the host specification for a fragment has a
-		//		 version range, not a version. Hence, this mechanism for finding
-		// 		 manifest localization property files may break under changes
-		//		 to the BundleLocalization property of a bundle.
-		return makeSimpleKey(bd.getSymbolicName() /*, bd.getVersion() */);
-	}
-
-	private static String makeSimpleKey(String id /*, Version version */) {
-		return id; // + '_' + version.toString();
-	}
-
-	/**
-	 * Generates IUs corresponding to update site categories.
-	 * @param categoriesToFeatures Map of SiteCategory ->Set (Feature IUs in that category).
-	 * @param result The generator result being built
-	 * @deprecated moved to SiteXMLAction
-	 */
-	protected void generateCategoryIUs(Map categoriesToFeatures, GeneratorResult result) {
-		for (Iterator it = categoriesToFeatures.keySet().iterator(); it.hasNext();) {
-			SiteCategory category = (SiteCategory) it.next();
-			result.nonRootIUs.add(MetadataGeneratorHelper.createCategoryIU(category, (Set) categoriesToFeatures.get(category), null));
-		}
-	}
-
-	/**
-	 * @deprecated moved to ConfigCUsAction
-	 */
-	private void storeConfigData(GeneratorResult result) {
-		if (result.configData.containsKey(info.getLauncherConfig()))
-			return; //been here, done this
-
-		LauncherData launcherData = info.getLauncherData();
-		if (launcherData == null)
-			return;
-
-		File fwConfigFile = new File(launcherData.getFwConfigLocation(), EquinoxConstants.CONFIG_INI);
-		if (fwConfigFile.exists()) {
-			if (info instanceof EclipseInstallGeneratorInfoProvider) {
-				((EclipseInstallGeneratorInfoProvider) info).loadConfigData(fwConfigFile);
-				ConfigData data = info.getConfigData();
-				result.configData.put(info.getLauncherConfig(), data);
-			}
-		}
-	}
-
-	/**
-	 * @deprecated moved to ConfigCUsAction
-	 */
-	protected GeneratorBundleInfo createGeneratorBundleInfo(BundleInfo bundleInfo, GeneratorResult result) {
-		if (bundleInfo.getLocation() != null)
-			return new GeneratorBundleInfo(bundleInfo);
-
-		String name = bundleInfo.getSymbolicName();
-
-		//easy case: do we have a matching IU?
-		IInstallableUnit iu = result.getInstallableUnit(name);
-		if (iu != null) {
-			bundleInfo.setVersion(iu.getVersion().toString());
-			return new GeneratorBundleInfo(bundleInfo);
-		}
-
-		//harder: try id_version
-		int i = name.indexOf('_');
-		while (i > -1) {
-			Version version = null;
-			try {
-				version = Version.create(name.substring(i));
-				bundleInfo.setSymbolicName(name.substring(0, i));
-				bundleInfo.setVersion(version.toString());
-				return new GeneratorBundleInfo(bundleInfo);
-			} catch (IllegalArgumentException e) {
-				// the '_' found was probably part of the symbolic id
-				i = name.indexOf('_', i);
-			}
-		}
-
-		//Query the repo
-		IQuery query = QueryUtil.createIUQuery(name);
-		Iterator matches = info.getMetadataRepository().query(query, null).iterator();
-		//pick the newest match
-		IInstallableUnit newest = null;
-		while (matches.hasNext()) {
-			IInstallableUnit candidate = (IInstallableUnit) matches.next();
-			if (newest == null || (newest.getVersion().compareTo(candidate.getVersion()) < 0))
-				newest = candidate;
-		}
-		if (newest != null) {
-			bundleInfo.setVersion(newest.getVersion().toString());
-			return new GeneratorBundleInfo(bundleInfo);
-		}
-
-		return null;
-	}
-
-	/** 
-	 * @deprecated moved to ConfigCUsAction
-	 */
-	protected void generateBundleConfigIUs(BundleInfo[] infos, GeneratorResult result, String launcherConfig, int defaultStartLevel) {
-		if (infos == null)
-			return;
-
-		String cuIdPrefix = ""; //$NON-NLS-1$
-		String filter = null;
-		if (launcherConfig != null) {
-			//launcher config is os_ws_arch, we want suffix ws.os.arch
-			String[] config = parseConfigSpec(launcherConfig);
-			cuIdPrefix = config[1] + '.' + config[0] + '.' + config[2];
-
-			filter = "(& (osgi.ws=" + config[1] + ") (osgi.os=" + config[0] + ") (osgi.arch=" + config[2] + "))"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		}
-
-		List allCUs = new ArrayList();
-		for (int i = 0; i < infos.length; i++) {
-			GeneratorBundleInfo bundle = createGeneratorBundleInfo(infos[i], result);
-			if (bundle == null)
-				continue;
-
-			if (bundle.getSymbolicName().equals(ORG_ECLIPSE_EQUINOX_LAUNCHER)) {
-				bundle = EclipseInstallGeneratorInfoProvider.createLauncher();
-			} else if (bundle.getSymbolicName().startsWith(ORG_ECLIPSE_EQUINOX_LAUNCHER + '.')) {
-				//launcher fragments will be handled by generateDefaultConfigIU(Set) for --launcher.library.
-				//they don't need to be started so skip them here to avoid having to merge config commands
-				continue;
-			}
-			if (bundle.getSymbolicName().equals(ORG_ECLIPSE_UPDATE_CONFIGURATOR)) {
-				bundle.setStartLevel(BundleInfo.NO_LEVEL);
-				bundle.setMarkedAsStarted(false);
-				bundle.setSpecialConfigCommands("setProgramProperty(propName:org.eclipse.update.reconcile, propValue:false);"); //$NON-NLS-1$
-				bundle.setSpecialUnconfigCommands("setProgramProperty(propName:org.eclipse.update.reconcile, propValue:);"); //$NON-NLS-1$
-			} else if ((bundle.getStartLevel() == BundleInfo.NO_LEVEL || bundle.getStartLevel() == defaultStartLevel) && !bundle.isMarkedAsStarted()) {
-				// this bundle does not require any particular configuration, the plug-in default IU will handle installing it
-				continue;
-			}
-
-			IInstallableUnit cu = MetadataGeneratorHelper.createBundleConfigurationUnit(bundle.getSymbolicName(), Version.create(bundle.getVersion()), false, bundle, info.getFlavor() + cuIdPrefix, filter);
-			if (cu != null) {
-				allCUs.add(cu);
-				result.rootIUs.add(cu);
-				String key = (productFile != null && productFile.useFeatures()) ? GeneratorResult.CONFIGURATION_CUS : bundle.getSymbolicName();
-				if (result.configurationIUs.containsKey(key)) {
-					((Set) result.configurationIUs.get(key)).add(cu);
-				} else {
-					Set set = new HashSet();
-					set.add(cu);
-					result.configurationIUs.put(key, set);
-				}
-			}
-		}
-		IMetadataRepository metadataRepository = info.getMetadataRepository();
-		if (metadataRepository != null && !allCUs.isEmpty()) {
-			// Product Query will run against the repo later in createProductIU, make sure these CUs are in before then
-			metadataRepository.addInstallableUnits(allCUs);
-		}
-
-	}
-
-	/**
-	 * @deprecated moved to ConfigCUsAction (and perhaps a couple other places...)
-	 */
-	protected void generateConfigIUs(GeneratorResult result) {
-		ConfigData data = info.getConfigData();
-		if ((data == null || data.getBundles().length == 0) && info.getLauncherConfig() != null) {
-			//We have the config.ini but not necessarily all the needed bundle IUs, remember for later
-			storeConfigData(result);
-		} else if (data != null) {
-			// generation against an eclipse install (config.ini + bundles)
-			generateBundleConfigIUs(data.getBundles(), result, info.getLauncherConfig(), data.getInitialBundleStartLevel());
-		} else if (result.configData.size() > 0 && generateRootIU) {
-			// generation from remembered config.ini's
-			// we have N platforms, generate a CU for each
-			// TODO try and find common properties across platforms
-			for (Iterator iterator = result.configData.keySet().iterator(); iterator.hasNext();) {
-				String launcherConfig = (String) iterator.next();
-				data = (ConfigData) result.configData.get(launcherConfig);
-				generateBundleConfigIUs(data.getBundles(), result, launcherConfig, data.getInitialBundleStartLevel());
-			}
-		}
-
-		List bundleInfoList = new ArrayList();
-		List defaults = new ArrayList();
-		if (info.addDefaultIUs())
-			bundleInfoList.addAll(info.getDefaultIUs(result.rootIUs));
-
-		bundleInfoList.addAll(info.getOtherIUs());
-
-		for (Iterator iterator = bundleInfoList.iterator(); iterator.hasNext();) {
-			GeneratorBundleInfo bundle = (GeneratorBundleInfo) iterator.next();
-			IInstallableUnit configuredIU = result.getInstallableUnit(bundle.getSymbolicName());
-			if (configuredIU == null) {
-				if (!generateRootIU && data == null)
-					continue;
-				IQuery query = QueryUtil.createIUQuery(bundle.getSymbolicName());
-				IMetadataRepository metadataRepository = info.getMetadataRepository();
-				if (metadataRepository == null)
-					continue;
-				Iterator matches = metadataRepository.query(query, null).iterator();
-				//pick the newest match
-				IInstallableUnit newest = null;
-				while (matches.hasNext()) {
-					IInstallableUnit candidate = (IInstallableUnit) matches.next();
-					if (newest == null || (newest.getVersion().compareTo(candidate.getVersion()) < 0))
-						newest = candidate;
-				}
-				if (newest != null) {
-					configuredIU = newest;
-				} else {
-					continue;
-				}
-			}
-			bundle.setVersion(configuredIU.getVersion().toString());
-			IMatchExpression filter = configuredIU == null ? null : configuredIU.getFilter();
-			IInstallableUnit cu = MetadataGeneratorHelper.createBundleConfigurationUnit(bundle.getSymbolicName(), Version.create(bundle.getVersion()), false, bundle, info.getFlavor(), filter);
-			//the configuration unit should share the same platform filter as the IU being configured.
-			if (cu != null) {
-				result.rootIUs.add(cu);
-				defaults.add(cu);
-			}
-			String key = null;
-			if (productFile != null && productFile.useFeatures())
-				key = GeneratorResult.CONFIGURATION_CUS;
-			else if (bundle.getSymbolicName().startsWith(ORG_ECLIPSE_EQUINOX_LAUNCHER + '.'))
-				key = ORG_ECLIPSE_EQUINOX_LAUNCHER;
-			else
-				key = bundle.getSymbolicName();
-			if (result.configurationIUs.containsKey(key)) {
-				((Set) result.configurationIUs.get(key)).add(cu);
-			} else {
-				Set set = new HashSet();
-				set.add(cu);
-				result.configurationIUs.put(key, set);
-			}
-		}
-
-		IMetadataRepository metadataRepository = info.getMetadataRepository();
-		if (metadataRepository != null && !defaults.isEmpty()) {
-			// Product Query will run against the repo later in createProductIU, make sure these CUs are in before then
-			metadataRepository.addInstallableUnits(defaults);
-		}
-	}
-
-	/**
-	 * Short term fix to ensure IUs that have no corresponding category are not lost.
-	 * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=211521.
-	 * @deprecated moved to RootIUAction
-	 */
-	private IInstallableUnit generateDefaultCategory(IInstallableUnit rootIU) {
-		rootCategory.add(rootIU);
-
-		InstallableUnitDescription cat = new MetadataFactory.InstallableUnitDescription();
-		cat.setSingleton(true);
-		String categoryId = rootIU.getId() + ".categoryIU"; //$NON-NLS-1$
-		cat.setId(categoryId);
-		cat.setVersion(Version.emptyVersion);
-		cat.setProperty(IInstallableUnit.PROP_NAME, rootIU.getProperty(IInstallableUnit.PROP_NAME));
-		cat.setProperty(IInstallableUnit.PROP_DESCRIPTION, rootIU.getProperty(IInstallableUnit.PROP_DESCRIPTION));
-
-		ArrayList required = new ArrayList(rootCategory.size());
-		for (Iterator iterator = rootCategory.iterator(); iterator.hasNext();) {
-			IInstallableUnit iu = (IInstallableUnit) iterator.next();
-			required.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, iu.getId(), VersionRange.emptyRange, iu.getFilter(), false, false));
-		}
-		cat.setRequirements((IRequirement[]) required.toArray(new IRequirement[required.size()]));
-		cat.setCapabilities(new IProvidedCapability[] {MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, categoryId, Version.emptyVersion)});
-		cat.setArtifacts(new IArtifactKey[0]);
-		cat.setProperty(InstallableUnitDescription.PROP_TYPE_CATEGORY, "true"); //$NON-NLS-1$
-		return MetadataFactory.createInstallableUnit(cat);
-	}
-
-	/** 
-	 * @deprecated moved to DefaultCUsAction
-	 */
-	private void generateDefaultConfigIU(Set ius) {
-		//		TODO this is a bit of a hack.  We need to have the default IU fragment generated with code that configures
-		//		and unconfigures.  The Generator should be decoupled from any particular provider but it is not clear
-		//		that we should add the create* methods to IGeneratorInfo...
-		//		MockBundleDescription bd1 = new MockBundleDescription("defaultConfigure");
-		//		MockBundleDescription bd2 = new MockBundleDescription("defaultUnconfigure");
-		EclipseInstallGeneratorInfoProvider provider = (EclipseInstallGeneratorInfoProvider) info;
-		ius.add(MetadataGeneratorHelper.createDefaultBundleConfigurationUnit(provider.createDefaultConfigurationBundleInfo(), provider.createDefaultUnconfigurationBundleInfo(), info.getFlavor()));
-		ius.add(MetadataGeneratorHelper.createDefaultFeatureConfigurationUnit(info.getFlavor()));
-		ius.add(MetadataGeneratorHelper.createDefaultConfigurationUnitForSourceBundles(info.getFlavor()));
-	}
-
-	/**
-	 * This method generates IUs for the launchers found in the org.eclipse.executable feature, if present.
-	 * @return <code>true</code> if the executable feature was processed successfully,
-	 * and <code>false</code> otherwise.
-	 * @deprecated moved to ExecutablesDescriptor and EquinoxExecutableAction
-	 */
-	private boolean generateExecutableFeatureIUs(GeneratorResult result, IArtifactRepository destination) {
-		File parentDir = info.getFeaturesLocation();
-		if (parentDir == null || !parentDir.exists())
-			return false;
-		File[] featureDirs = parentDir.listFiles();
-		if (featureDirs == null)
-			return false;
-		File executableFeatureDir = null;
-		final String featurePrefix = "org.eclipse.equinox.executable_"; //$NON-NLS-1$
-		for (int i = 0; i < featureDirs.length; i++) {
-			if (featureDirs[i].getName().startsWith(featurePrefix)) {
-				executableFeatureDir = featureDirs[i];
-				break;
-			}
-		}
-		if (executableFeatureDir == null)
-			return false;
-		File binDir = new File(executableFeatureDir, "bin"); //$NON-NLS-1$
-		if (!binDir.exists())
-			return false;
-		//the bin directory is dividing into a directory tree of the form /bin/ws/os/arch
-		File[] wsDirs = binDir.listFiles();
-		if (wsDirs == null)
-			return false;
-		String versionString = executableFeatureDir.getName().substring(featurePrefix.length());
-		for (int wsIndex = 0; wsIndex < wsDirs.length; wsIndex++) {
-			String ws = wsDirs[wsIndex].getName();
-			File[] osDirs = wsDirs[wsIndex].listFiles();
-			if (osDirs == null)
-				continue;
-			for (int osIndex = 0; osIndex < osDirs.length; osIndex++) {
-				String os = osDirs[osIndex].getName();
-				File[] archDirs = osDirs[osIndex].listFiles();
-				if (archDirs == null)
-					continue;
-				for (int archIndex = 0; archIndex < archDirs.length; archIndex++) {
-					String arch = archDirs[archIndex].getName();
-					generateExecutableIUs(ws, os, arch, versionString, archDirs[archIndex], result, destination);
-				}
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Generates IUs and CUs for the files that make up the launcher for a given
-	 * ws/os/arch combination.
-	 * @deprecated moved to EquinoxExecutableAction
-	 */
-	private void generateExecutableIUs(String ws, String os, final String arch, String version, File root, GeneratorResult result, IArtifactRepository destination) {
-		if (root == null)
-			return;
-
-		//Create the IU
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		iu.setSingleton(true);
-		String productNamespace = (productFile != null) ? productFile.getId() : "org.eclipse"; //$NON-NLS-1$
-		String launcherIdPrefix = productNamespace + PRODUCT_LAUCHER_SUFFIX;
-		String launcherId = launcherIdPrefix + '.' + ws + '.' + os + '.' + arch;
-		iu.setId(launcherId);
-		Version launcherVersion = Version.create(version);
-		iu.setVersion(launcherVersion);
-		iu.setSingleton(true);
-		IMatchExpression filter = null;
-		if (!ws.equals(CONFIG_ANY) && !os.equals(CONFIG_ANY) && !arch.equals(CONFIG_ANY)) {
-			filter = InstallableUnit.parseFilter("(& (osgi.ws=" + ws + ") (osgi.os=" + os + ") (osgi.arch=" + arch + "))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			iu.setFilter(filter);
-		}
-
-		IArtifactKey key = MetadataGeneratorHelper.createLauncherArtifactKey(launcherId, launcherVersion);
-		iu.setArtifacts(new IArtifactKey[] {key});
-		iu.setTouchpointType(MetadataGeneratorHelper.TOUCHPOINT_NATIVE);
-		IProvidedCapability launcherCapability = MetadataFactory.createProvidedCapability(info.getFlavor() + productNamespace, launcherIdPrefix, launcherVersion);
-		iu.setCapabilities(new IProvidedCapability[] {MetadataGeneratorHelper.createSelfCapability(launcherId, launcherVersion), launcherCapability});
-
-		String launcherFragment = ORG_ECLIPSE_EQUINOX_LAUNCHER + '.' + ws + '.' + os;
-		if (!(Constants.OS_MACOSX.equals(os) && !Constants.ARCH_X86_64.equals(arch)))
-			launcherFragment += '.' + arch;
-		iu.setRequirements(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, launcherFragment, VersionRange.emptyRange, filter, false, false)});
-		result.rootIUs.add(MetadataFactory.createInstallableUnit(iu));
-
-		//Create the CU
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = info.getFlavor() + launcherId;
-		cu.setId(configUnitId);
-		cu.setVersion(launcherVersion);
-		if (filter != null)
-			cu.setFilter(filter);
-		cu.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, launcherId, new VersionRange(launcherVersion, true, launcherVersion, true), null, false, false)});
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		//TODO bug 218890, would like the fragment to provide the launcher capability as well, but can't right now.
-		cu.setCapabilities(new IProvidedCapability[] {MetadataGeneratorHelper.createSelfCapability(configUnitId, launcherVersion)});
-
-		mungeLauncherFileNames(root);
-
-		cu.setTouchpointType(MetadataGeneratorHelper.TOUCHPOINT_NATIVE);
-		Map touchpointData = new HashMap();
-		String configurationData = "unzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-
-		IInstallableUnit launcherNameIU = null;
-
-		File executableLocation = info.getExecutableLocation();
-		if (executableLocation != null) {
-			if (!executableLocation.exists()) {
-				if (Constants.OS_WIN32.equals(os) && !executableLocation.getName().endsWith(".exe")) { //$NON-NLS-1$
-					executableLocation = new File(executableLocation.getParentFile(), executableLocation.getName() + ".exe"); //$NON-NLS-1$
-				} else if (Constants.OS_MACOSX.equals(os)) {
-					String name = executableLocation.getName();
-					File parent = executableLocation.getParentFile();
-					executableLocation = new File(parent, name + ".app/Contents/MacOS/" + name); //$NON-NLS-1$
-				}
-			}
-
-			if (executableLocation.exists() && executableLocation.isFile())
-				launcherNameIU = MetadataGeneratorHelper.generateLauncherSetter(executableLocation.getName(), launcherId, launcherVersion, os, ws, arch, result.rootIUs);
-		}
-
-		if (launcherNameIU == null && productFile != null && productFile.getLauncherName() != null) {
-			launcherNameIU = MetadataGeneratorHelper.generateLauncherSetter(productFile.getLauncherName(), launcherId, launcherVersion, os, ws, arch, result.rootIUs);
-		}
-
-		if (Constants.OS_MACOSX.equals(os)) {
-			File[] appFolders = root.listFiles(new FilenameFilter() {
-				public boolean accept(File dir, String name) {
-					return name.substring(name.length() - 4, name.length()).equalsIgnoreCase(".app"); //$NON-NLS-1$
-				}
-			});
-			for (int i = 0; appFolders != null && i < appFolders.length; i++) {
-				File macOSFolder = new File(appFolders[i], "Contents/MacOS"); //$NON-NLS-1$
-				if (macOSFolder.exists()) {
-					File[] launcherFiles = macOSFolder.listFiles();
-					for (int j = 0; j < launcherFiles.length; j++) {
-						configurationData += " chmod(targetDir:${installFolder}/" + appFolders[i].getName() + "/Contents/MacOS/, targetFile:" + launcherFiles[j].getName() + ", permissions:755);"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-						if (launcherNameIU == null && launcherFiles[i].isFile() && new Path(launcherFiles[j].getName()).getFileExtension() == null)
-							launcherNameIU = MetadataGeneratorHelper.generateLauncherSetter(launcherFiles[j].getName(), launcherId, launcherVersion, os, ws, arch, result.rootIUs);
-					}
-				}
-			}
-		} else if (!Constants.OS_WIN32.equals(os)) {
-			File[] launcherFiles = root.listFiles();
-			for (int i = 0; launcherFiles != null && i < launcherFiles.length; i++) {
-				configurationData += " chmod(targetDir:${installFolder}, targetFile:" + launcherFiles[i].getName() + ", permissions:755);"; //$NON-NLS-1$ //$NON-NLS-2$
-				if (launcherNameIU == null && launcherFiles[i].isFile() && new Path(launcherFiles[i].getName()).getFileExtension() == null)
-					launcherNameIU = MetadataGeneratorHelper.generateLauncherSetter(launcherFiles[i].getName(), launcherId, launcherVersion, os, ws, arch, result.rootIUs);
-			}
-		} else if (launcherNameIU == null) {
-			//windows
-			File[] launcherFiles = root.listFiles(new FilenameFilter() {
-				public boolean accept(File parent, String name) {
-					return name.endsWith(".exe"); //$NON-NLS-1$
-				}
-			});
-			if (launcherFiles != null && launcherFiles.length > 0)
-				launcherNameIU = MetadataGeneratorHelper.generateLauncherSetter(launcherFiles[0].getName(), launcherId, launcherVersion, os, ws, arch, result.rootIUs);
-		}
-		touchpointData.put("install", configurationData); //$NON-NLS-1$
-		String unConfigurationData = "cleanupzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		touchpointData.put("uninstall", unConfigurationData); //$NON-NLS-1$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		IInstallableUnit unit = MetadataFactory.createInstallableUnit(cu);
-		result.rootIUs.add(unit);
-		//The Product Query will need to include the launcher CU fragments as a workaround to bug 218890
-		if (result.configurationIUs.containsKey(launcherIdPrefix)) {
-			((Set) result.configurationIUs.get(launcherIdPrefix)).add(unit);
-			if (launcherNameIU != null)
-				((Set) result.configurationIUs.get(launcherIdPrefix)).add(launcherNameIU);
-		} else {
-			Set set = new HashSet();
-			set.add(unit);
-			if (launcherNameIU != null)
-				set.add(launcherNameIU);
-			result.configurationIUs.put(launcherIdPrefix, set);
-		}
-
-		//Create the artifact descriptor
-		IArtifactDescriptor descriptor = MetadataGeneratorHelper.createArtifactDescriptor(key, root, false, true);
-		publishArtifact(descriptor, root.listFiles(), destination, false, root);
-	}
-
-	/**
-	 * For each platform, generate a CU containing the information for the config.ini
-	 * @deprecated moved to ProductAction and ConfigCUsAction
-	 */
-	private void generateProductConfigCUs(GeneratorResult result) {
-		for (Iterator iterator = result.configData.keySet().iterator(); iterator.hasNext();) {
-			String launcherConfig = (String) iterator.next();
-			String[] config = parseConfigSpec(launcherConfig);
-			String ws = config[1];
-			String os = config[0];
-			String arch = config[2];
-
-			ConfigData data = (ConfigData) result.configData.get(launcherConfig);
-
-			InstallableUnitDescription cu = new MetadataFactory.InstallableUnitDescription();
-			String configUnitId = info.getFlavor() + productFile.getId() + ".config." + ws + '.' + os + '.' + arch; //$NON-NLS-1$
-
-			String version = getProductVersion();
-			Version cuVersion = Version.create(version);
-			cu.setId(configUnitId);
-			cu.setVersion(cuVersion);
-			cu.setSingleton(true);
-			cu.setFilter("(& (osgi.ws=" + ws + ") (osgi.os=" + os + ") (osgi.arch=" + arch + "))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-
-			IProvidedCapability productConfigCapability = MetadataFactory.createProvidedCapability(info.getFlavor() + productFile.getId(), productFile.getId() + PRODUCT_CONFIG_SUFFIX, cuVersion);
-			IProvidedCapability selfCapability = MetadataGeneratorHelper.createSelfCapability(configUnitId, cuVersion);
-			cu.setCapabilities(new IProvidedCapability[] {selfCapability, productConfigCapability});
-
-			cu.setTouchpointType(MetadataGeneratorHelper.TOUCHPOINT_OSGI);
-			Map touchpointData = new HashMap();
-			String[] dataStrings = getConfigurationStrings(data);
-			touchpointData.put("configure", dataStrings[0]); //$NON-NLS-1$
-			touchpointData.put("unconfigure", dataStrings[1]); //$NON-NLS-1$
-			cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-
-			result.rootIUs.add(MetadataFactory.createInstallableUnit(cu));
-		}
-	}
-
-	/**
-	 * For the given platform (ws, os, arch) generate the CU that will populate the product.ini file 
-	 * @deprecated moved to ProductAction and ConfigCUsAction
-	 */
-	private void generateProductIniCU(String ws, String os, String arch, String version, GeneratorResult result) {
-		if (productFile == null)
-			return;
-
-		//attempt to merge arguments from the launcher data and the product file
-		Set jvmArgs = new LinkedHashSet();
-		Set progArgs = new LinkedHashSet();
-		LauncherData launcherData = info.getLauncherData();
-		if (launcherData != null) {
-			jvmArgs.addAll(Arrays.asList(launcherData.getJvmArgs()));
-			progArgs.addAll(Arrays.asList(launcherData.getProgramArgs()));
-		}
-		progArgs.addAll(Arrays.asList(getArrayFromString(productFile.getProgramArguments(os), " "))); //$NON-NLS-1$
-		jvmArgs.addAll(Arrays.asList(getArrayFromString(productFile.getVMArguments(os), " "))); //$NON-NLS-1$
-
-		String[] dataStrings = getLauncherConfigStrings((String[]) jvmArgs.toArray(new String[jvmArgs.size()]), (String[]) progArgs.toArray(new String[progArgs.size()]));
-		String configurationData = dataStrings[0];
-		String unconfigurationData = dataStrings[1];
-
-		InstallableUnitDescription cu = new MetadataFactory.InstallableUnitDescription();
-		String configUnitId = info.getFlavor() + productFile.getId() + ".ini." + ws + '.' + os + '.' + arch; //$NON-NLS-1$
-		Version cuVersion = Version.create(version);
-		cu.setId(configUnitId);
-		cu.setVersion(cuVersion);
-		cu.setSingleton(true);
-		cu.setFilter("(& (osgi.ws=" + ws + ") (osgi.os=" + os + ") (osgi.arch=" + arch + "))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-
-		IProvidedCapability productIniCapability = MetadataFactory.createProvidedCapability(info.getFlavor() + productFile.getId(), productFile.getId() + PRODUCT_INI_SUFFIX, cuVersion);
-		IProvidedCapability selfCapability = MetadataGeneratorHelper.createSelfCapability(configUnitId, cuVersion);
-		cu.setCapabilities(new IProvidedCapability[] {selfCapability, productIniCapability});
-
-		cu.setTouchpointType(MetadataGeneratorHelper.TOUCHPOINT_OSGI);
-		Map touchpointData = new HashMap();
-		touchpointData.put("configure", configurationData); //$NON-NLS-1$
-		touchpointData.put("unconfigure", unconfigurationData); //$NON-NLS-1$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-
-		result.rootIUs.add(MetadataFactory.createInstallableUnit(cu));
-
-	}
-
-	/**
-	 * Generates metadata for the given features.
-	 * @deprecated moved to FeaturesAction
-	 */
-	protected void generateFeatureIUs(Feature[] features, GeneratorResult result, IArtifactRepository destination) {
-		Map categoriesToFeatureIUs = new HashMap();
-		Map featuresToCategories = getFeatureToCategoryMappings();
-		//Build Feature IUs, and add them to any corresponding categories
-		for (int i = 0; i < features.length; i++) {
-			Feature feature = features[i];
-			//publish feature site references
-			URLEntry updateURL = feature.getUpdateSite();
-			//don't enable feature update sites by default since this results in too many
-			//extra sites being loaded and searched (Bug 234177)
-			if (updateURL != null)
-				generateSiteReference(updateURL.getURL(), updateURL.getAnnotation(), feature.getId(), false);
-			URLEntry[] discoverySites = feature.getDiscoverySites();
-			for (int j = 0; j < discoverySites.length; j++)
-				generateSiteReference(discoverySites[j].getURL(), discoverySites[j].getAnnotation(), feature.getId(), false);
-
-			//generate feature IU
-			String location = feature.getLocation();
-			boolean isExploded = (location.endsWith(".jar") ? false : true); //$NON-NLS-1$
-			IInstallableUnit featureIU = MetadataGeneratorHelper.createFeatureJarIU(feature, true);
-			Collection artifacts = featureIU.getArtifacts();
-			storePluginShape(feature, result);
-			for (Iterator iterator = artifacts.iterator(); iterator.hasNext();) {
-				IArtifactDescriptor ad = MetadataGeneratorHelper.createArtifactDescriptor((IArtifactKey) iterator.next(), new File(location), true, false);
-				if (isExploded)
-					publishArtifact(ad, new File(location).listFiles(), destination, false, new File(location));
-				else
-					publishArtifact(ad, new File[] {new File(location)}, destination, true);
-			}
-			IInstallableUnit generated = MetadataGeneratorHelper.createGroupIU(feature, featureIU);
-			result.rootIUs.add(generated);
-			result.rootIUs.add(featureIU);
-
-			// @deprecated  moved to SiteXMLAction
-			Set categories = getCategories(feature, featuresToCategories);
-			if (categories != null) {
-				for (Iterator it = categories.iterator(); it.hasNext();) {
-					SiteCategory category = (SiteCategory) it.next();
-					Set featureIUs = (Set) categoriesToFeatureIUs.get(category);
-					if (featureIUs == null) {
-						featureIUs = new HashSet();
-						categoriesToFeatureIUs.put(category, featureIUs);
-					}
-					featureIUs.add(generated);
-				}
-			} else {
-				rootCategory.add(generated);
-			}
-		}
-		generateCategoryIUs(categoriesToFeatureIUs, result);
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	private void storePluginShape(Feature feature, GeneratorResult result) {
-		FeatureEntry[] entries = feature.getEntries();
-		for (int i = 0; i < entries.length; i++) {
-			if (entries[i].isPlugin() || entries[i].isFragment()) {
-				result.getPluginShapeInfo().put(entries[i].getId() + '_' + entries[i].getVersion(), entries[i].isUnpack() ? BundleDescriptionFactory.DIR : BundleDescriptionFactory.JAR);
-			}
-		}
-	}
-
-	/**
-	 * @deprecated moved to various other places.  mainly the aggregator actions (e.g., EclipseInstallAction)
-	 */
-	protected void generateNativeIUs(File executableLocation, GeneratorResult result, IArtifactRepository destination) {
-		//generate data for JRE
-		File jreLocation = info.getJRELocation();
-		IArtifactDescriptor artifact = MetadataGeneratorHelper.createJREData(jreLocation, result.rootIUs);
-		publishArtifact(artifact, new File[] {jreLocation}, destination, false);
-
-		if (info.getLauncherConfig() != null) {
-			String[] config = parseConfigSpec(info.getLauncherConfig());
-			String version = getProductVersion();
-			File root = null;
-			if (executableLocation != null)
-				root = executableLocation.getParentFile();
-			else if (info instanceof EclipseInstallGeneratorInfoProvider)
-				root = ((EclipseInstallGeneratorInfoProvider) info).getBaseLocation();
-			generateExecutableIUs(config[1], config[0], config[2], version, root, result, destination);
-			generateProductIniCU(config[1], config[0], config[2], version, result);
-			return;
-		}
-
-		//If the executable feature is present, use it to generate IUs for launchers
-		if (generateExecutableFeatureIUs(result, destination) || executableLocation == null)
-			return;
-
-		//generate data for executable launcher
-		artifact = MetadataGeneratorHelper.createLauncherIU(executableLocation, info.getFlavor(), result.rootIUs);
-		File[] launcherFiles = null;
-		//hard-coded name is ok, since console launcher is not branded, and appears on Windows only
-		File consoleLauncher = new File(executableLocation.getParentFile(), "eclipsec.exe"); //$NON-NLS-1$
-		if (consoleLauncher.exists())
-			launcherFiles = new File[] {executableLocation, consoleLauncher};
-		else
-			launcherFiles = new File[] {executableLocation};
-		publishArtifact(artifact, launcherFiles, destination, false);
-	}
-
-	/**
-	 * @deprecated moved to various other places.  mainly the aggregator actions (e.g., EclipseInstallAction)
-	 */
-	protected void generateRootIU(GeneratorResult result, String rootIUId, String rootIUVersion) {
-		IInstallableUnit rootIU = null;
-
-		if (info.getProductFile() != null)
-			rootIU = createProductIU(result);
-		else if (rootIUId != null)
-			rootIU = createTopLevelIU(result, rootIUId, rootIUVersion);
-
-		if (rootIU == null)
-			return;
-
-		result.nonRootIUs.add(rootIU);
-		result.nonRootIUs.add(generateDefaultCategory(rootIU));
-	}
-
-	/**
-	 * Generates and publishes a reference to an update site location
-	 * @param location The update site location
-	 * @param featureId the identifier of the feature where the error occurred, or null
-	 * @param isEnabled Whether the site should be enabled by default
-	 * @deprecated moved to FeaturesAction
-	 */
-	private void generateSiteReference(String location, String name, String featureId, boolean isEnabled) {
-		IMetadataRepository metadataRepo = info.getMetadataRepository();
-		try {
-			URI associateLocation = URIUtil.fromString(location);
-			int flags = isEnabled ? IRepository.ENABLED : IRepository.NONE;
-			ArrayList refs = new ArrayList();
-			refs.add(new RepositoryReference(associateLocation, name, IRepository.TYPE_METADATA, flags));
-			refs.add(new RepositoryReference(associateLocation, name, IRepository.TYPE_ARTIFACT, flags));
-			metadataRepo.addReferences(refs);
-		} catch (URISyntaxException e) {
-			String message = "Invalid site reference: " + location; //$NON-NLS-1$
-			if (featureId != null)
-				message = message + " in feature: " + featureId; //$NON-NLS-1$
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message));
-		}
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	protected BundleDescription[] getBundleDescriptions(File[] bundleLocations) {
-		if (bundleLocations == null)
-			return new BundleDescription[0];
-		boolean addSimpleConfigurator = false;
-		boolean scIn = false;
-		for (int i = 0; i < bundleLocations.length; i++) {
-			if (!addSimpleConfigurator)
-				addSimpleConfigurator = bundleLocations[i].toString().indexOf(ORG_ECLIPSE_UPDATE_CONFIGURATOR) > 0;
-			if (!scIn) {
-				scIn = bundleLocations[i].toString().indexOf(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR) > 0;
-				if (scIn)
-					break;
-			}
-		}
-		if (scIn)
-			addSimpleConfigurator = false;
-		BundleDescription[] result = new BundleDescription[bundleLocations.length + (addSimpleConfigurator ? 1 : 0)];
-		BundleDescriptionFactory factory = getBundleFactory();
-		for (int i = 0; i < bundleLocations.length; i++) {
-			BundleDescription desc = factory.getBundleDescription(bundleLocations[i]);
-			if (desc != null)
-				result[i] = desc;
-		}
-		if (addSimpleConfigurator) {
-			//Add simple configurator to the list of bundles
-			try {
-				File location = new File(FileLocator.toFileURL(Activator.getContext().getBundle().getEntry(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR + ".jar")).getFile()); //$NON-NLS-1$
-				result[result.length - 1] = factory.getBundleDescription(location);
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	protected BundleDescriptionFactory getBundleFactory() {
-		return new BundleDescriptionFactory(stateObjectFactory, null);
-	}
-
-	/**
-	 * Returns the categories corresponding to the given feature, or null if there
-	 * are no applicable categories.
-	 * @param feature The feature to return categories for
-	 * @param featuresToCategories A map of SiteFeature->Set<SiteCategory>
-	 * @return A Set<SiteCategory> of the categories corresponding to the feature, or <code>null</code>
-	 * @deprecated moved to SiteXMLAction
-	 */
-	private Set getCategories(Feature feature, Map featuresToCategories) {
-		//find the SiteFeature corresponding to the given feature
-		for (Iterator it = featuresToCategories.keySet().iterator(); it.hasNext();) {
-			SiteFeature siteFeature = (SiteFeature) it.next();
-			String siteVersion = siteFeature.getFeatureVersion();
-			if (!siteFeature.getFeatureIdentifier().equals(feature.getId()))
-				continue;
-			if (siteVersion.endsWith("qualifier")) { //$NON-NLS-1$
-				String withoutQualifier = siteVersion.substring(0, siteVersion.lastIndexOf("qualifier")); //$NON-NLS-1$
-				String featureVersion = feature.getVersion();
-				if (featureVersion.length() >= withoutQualifier.length() && featureVersion.substring(0, withoutQualifier.length()).equals(withoutQualifier))
-					return (Set) featuresToCategories.get(siteFeature);
-			} else if (siteFeature.getFeatureVersion().equals(feature.getVersion())) {
-				return (Set) featuresToCategories.get(siteFeature);
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	protected Feature[] getFeatures(File folder) {
-		if (folder == null || !folder.exists())
-			return new Feature[0];
-		File[] locations = folder.listFiles();
-		ArrayList result = new ArrayList(locations.length);
-		for (int i = 0; i < locations.length; i++) {
-			Feature feature = new FeatureParser().parse(locations[i]);
-			if (feature != null) {
-				feature.setLocation(locations[i].getAbsolutePath());
-				result.add(feature);
-			}
-		}
-		return (Feature[]) result.toArray(new Feature[result.size()]);
-	}
-
-	/**
-	 * Computes the mapping of features to categories as defined in the site.xml,
-	 * if available. Returns an empty map if there is not site.xml, or no categories.
-	 * @return A map of SiteFeature -> Set<SiteCategory>.
-	 */
-	protected Map getFeatureToCategoryMappings() {
-		HashMap mappings = new HashMap();
-		URI siteLocation = info.getSiteLocation();
-		if (siteLocation == null)
-			return mappings;
-		InputStream input;
-		SiteModel site = null;
-		try {
-			input = new BufferedInputStream(URIUtil.toURL(siteLocation).openStream());
-			site = new DefaultSiteParser().parse(input);
-		} catch (FileNotFoundException e) {
-			//don't complain if the update site is not present
-		} catch (Exception e) {
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.exception_errorParsingUpdateSite, siteLocation), e));
-		}
-		if (site == null)
-			return mappings;
-
-		//copy mirror information from update site to p2 repositories
-		String mirrors = site.getMirrorsURL();
-		if (mirrors != null) {
-			//remove site.xml file reference
-			int index = mirrors.indexOf("site.xml"); //$NON-NLS-1$
-			if (index != -1)
-				mirrors = mirrors.substring(0, index) + mirrors.substring(index + "site.xml".length()); //$NON-NLS-1$
-			info.getMetadataRepository().setProperty(IRepository.PROP_MIRRORS_URL, mirrors);
-			info.getArtifactRepository().setProperty(IRepository.PROP_MIRRORS_URL, mirrors);
-		}
-
-		//publish associate sites as repository references
-		URLEntry[] associatedSites = site.getAssociatedSites();
-		if (associatedSites != null)
-			for (int i = 0; i < associatedSites.length; i++)
-				generateSiteReference(associatedSites[i].getURL(), associatedSites[i].getAnnotation(), null, true);
-
-		if (PROTOCOL_FILE.equals(siteLocation.getScheme())) {
-			File siteFile = URIUtil.toFile(siteLocation);
-			if (siteFile.exists()) {
-				File siteParent = siteFile.getParentFile();
-
-				List messageKeys = site.getMessageKeys();
-				if (siteParent.isDirectory()) {
-					String[] keyStrings = (String[]) messageKeys.toArray(new String[messageKeys.size()]);
-					site.setLocalizations(LocalizationHelper.getDirPropertyLocalizations(siteParent, "site", null, keyStrings)); //$NON-NLS-1$
-				} else if (siteFile.getName().endsWith(".jar")) { //$NON-NLS-1$
-					String[] keyStrings = (String[]) messageKeys.toArray(new String[messageKeys.size()]);
-					site.setLocalizations(LocalizationHelper.getJarPropertyLocalizations(siteParent, "site", null, keyStrings)); //$NON-NLS-1$
-				}
-			}
-		}
-
-		SiteFeature[] features = site.getFeatures();
-		for (int i = 0; i < features.length; i++) {
-			//add a mapping for each category this feature belongs to
-			String[] categoryNames = features[i].getCategoryNames();
-			for (int j = 0; j < categoryNames.length; j++) {
-				SiteCategory category = site.getCategory(categoryNames[j]);
-				if (category != null) {
-					Set categories = (Set) mappings.get(features[i]);
-					if (categories == null) {
-						categories = new HashSet();
-						mappings.put(features[i], categories);
-					}
-					categories.add(category);
-				}
-			}
-		}
-		return mappings;
-	}
-
-	/**
-	 * @TODO This method is a temporary hack to rename the launcher.exe files
-	 * to eclipse.exe (or "launcher" to "eclipse"). Eventually we will either hand-craft
-	 * metadata/artifacts for launchers, or alter the delta pack to contain eclipse-branded
-	 * launchers.
-	 * @deprecated moved to EquinoxExecutableAction
-	 */
-	private void mungeLauncherFileNames(File root) {
-		if (root.isDirectory()) {
-			File[] children = root.listFiles();
-			for (int i = 0; i < children.length; i++) {
-				mungeLauncherFileNames(children[i]);
-			}
-		} else if (root.isFile()) {
-			if (root.getName().equals("launcher")) //$NON-NLS-1$
-				root.renameTo(new File(root.getParentFile(), "eclipse")); //$NON-NLS-1$
-			else if (root.getName().equals("launcher.exe")) //$NON-NLS-1$
-				root.renameTo(new File(root.getParentFile(), "eclipse.exe")); //$NON-NLS-1$
-		}
-	}
-
-	protected void publishArtifact(IArtifactDescriptor descriptor, File[] files, IArtifactRepository destination, boolean asIs) {
-		publishArtifact(descriptor, files, destination, asIs, null);
-	}
-
-	// Put the artifact on the server
-	/**
-	 * @deprecated moved to AbstractPublishingAction
-	 */
-	protected void publishArtifact(IArtifactDescriptor descriptor, File[] files, IArtifactRepository destination, boolean asIs, File root) {
-		if (descriptor == null || destination == null)
-			return;
-		if (!info.publishArtifacts()) {
-			destination.addDescriptor(descriptor);
-			return;
-		}
-		if (asIs && files.length == 1) {
-			try {
-				if (!destination.contains(descriptor)) {
-					if (destination instanceof IFileArtifactRepository) {
-						//if the file is already in the same location the repo will put it, just add the descriptor and exit
-						File descriptorFile = ((IFileArtifactRepository) destination).getArtifactFile(descriptor);
-						if (files[0].equals(descriptorFile)) {
-							destination.addDescriptor(descriptor);
-							return;
-						}
-					}
-					OutputStream output = new BufferedOutputStream(destination.getOutputStream(descriptor));
-					FileUtils.copyStream(new BufferedInputStream(new FileInputStream(files[0])), true, output, true);
-				}
-			} catch (ProvisionException e) {
-				LogHelper.log(e.getStatus());
-			} catch (IOException e) {
-				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error publishing artifacts", e)); //$NON-NLS-1$
-			}
-		} else {
-			File tempFile = null;
-			try {
-				tempFile = File.createTempFile("p2.generator", ""); //$NON-NLS-1$ //$NON-NLS-2$
-				IPathComputer computer = null;
-				if (root != null)
-					computer = FileUtils.createRootPathComputer(root);
-				else
-					computer = FileUtils.createDynamicPathComputer(1);
-				FileUtils.zip(files, null, tempFile, computer);
-				if (!destination.contains(descriptor)) {
-					destination.setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP);
-					OutputStream output = new BufferedOutputStream(destination.getOutputStream(descriptor));
-					FileUtils.copyStream(new BufferedInputStream(new FileInputStream(tempFile)), true, output, true);
-				}
-			} catch (ProvisionException e) {
-				LogHelper.log(e.getStatus());
-			} catch (IOException e) {
-				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error publishing artifacts", e)); //$NON-NLS-1$
-			} finally {
-				if (tempFile != null)
-					tempFile.delete();
-			}
-		}
-	}
-
-	public void setGenerateRootIU(boolean generateRootIU) {
-		this.generateRootIU = generateRootIU;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/GeneratorBundleInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/GeneratorBundleInfo.java
deleted file mode 100644
index fdfef7d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/GeneratorBundleInfo.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-
-public class GeneratorBundleInfo extends BundleInfo {
-	//	public static final int NO_LEVEL = -1;
-
-	//	private String symbolicName;
-	//	private String version;
-	//	private String location;
-	//	private int expectedState;
-	//	private int startLevel = NO_LEVEL;
-	//	private String manifest;
-
-	private String specialConfigCommands;
-	private String specialUnconfigCommands;
-
-	public GeneratorBundleInfo(BundleInfo bInfo) {
-		super.setBundleId(bInfo.getBundleId());
-		super.setLocation(bInfo.getLocation());
-		super.setManifest(bInfo.getManifest());
-		super.setMarkedAsStarted(bInfo.isMarkedAsStarted());
-		super.setResolved(bInfo.isResolved());
-		super.setStartLevel(bInfo.getStartLevel());
-		super.setSymbolicName(bInfo.getSymbolicName());
-		super.setVersion(bInfo.getVersion());
-	}
-
-	public GeneratorBundleInfo() {
-		// TODO Auto-generated constructor stub
-	}
-
-	//	/* (non-Javadoc)
-	//	 * @see java.lang.Object#hashCode()
-	//	 */
-	//	public int hashCode() {
-	//		int result = symbolicName == null ? 0 : symbolicName.hashCode();
-	//		result = result + (version == null ? 0 : version.hashCode());
-	//		result = result + (location == null ? 0 : location.hashCode());
-	//		return result;
-	//	}
-	//
-	//	public String getSymbolicName() {
-	//		return symbolicName;
-	//	}
-	//
-	//	public String getVersion() {
-	//		return version;
-	//	}
-	//
-	//	public int expectedState() {
-	//		return expectedState;
-	//	}
-	//
-	//	public int getStartLevel() {
-	//		return startLevel;
-	//	}
-	//
-	//	public String getLocation() {
-	//		return location;
-	//	}
-	//
-	//	public void setSymbolicName(String id) {
-	//		symbolicName = id;
-	//	}
-	//
-	//	public void setVersion(String version) {
-	//		this.version = version;
-	//	}
-	//
-	//	public void setExpectedState(int state) {
-	//		expectedState = state;
-	//	}
-	//
-	//	public void setStartLevel(int level) {
-	//		this.startLevel = level;
-	//	}
-	//
-	//	public void setLocation(String location) {
-	//		this.location = location;
-	//	}
-	//
-	//	public void setManifest(String manifest) {
-	//		this.manifest = manifest;
-	//	}
-	//	
-	//	public String getManifest() {
-	//		return manifest;
-	//	}
-	//	
-	public String getSpecialConfigCommands() {
-		return specialConfigCommands;
-	}
-
-	public void setSpecialConfigCommands(String specialConfigCommands) {
-		this.specialConfigCommands = specialConfigCommands;
-	}
-
-	public String getSpecialUnconfigCommands() {
-		return specialUnconfigCommands;
-	}
-
-	public void setSpecialUnconfigCommands(String specialUnconfigCommands) {
-		this.specialUnconfigCommands = specialUnconfigCommands;
-	}
-
-	//	/* (non-Javadoc)
-	//	 * @see java.lang.Object#equals(java.lang.Object)
-	//	 */
-	//	public boolean equals(Object toCompare) {
-	//		if (toCompare instanceof GeneratorBundleInfo) {
-	//			GeneratorBundleInfo info = (GeneratorBundleInfo) toCompare;
-	//			if (info.symbolicName.equals(symbolicName) && info.version.equals(version) && (info.location == null || location == null ? true : info.location.equals(location)))
-	//				return true;
-	//		}
-	//		return false;
-	//	}
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		String superSt = super.toString();
-		if (superSt.length() > 0)
-			buffer.append(superSt.substring(0, superSt.length() - 1));
-		buffer.append(", this.specialConfigCommands="); //$NON-NLS-1$
-		buffer.append(this.specialConfigCommands);
-		buffer.append(')');
-		return buffer.toString();
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java
deleted file mode 100644
index 21dd8e2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import java.io.File;
-import java.net.URI;
-import java.util.*;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.LauncherData;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-
-public interface IGeneratorInfo {
-
-	/**
-	 * Returns whether or not to add the default IUs to the published result.
-	 * The default IUs are typically used to configure bundles, features and 
-	 * source bundles.
-	 * @return whether or not to publish default IUs
-	 */
-	public boolean addDefaultIUs();
-
-	/**
-	 * Returns whether or not to append to existing repositories or overwrite.
-	 * @return whether or not to append to existing repositories or overwrite.
-	 */
-	public boolean append();
-
-	/**
-	 * Returns the artifact repository into which any publishable artifacts are published
-	 * or <code>null</code> if none.
-	 * @return a destination artifact repository or <code>null</code>
-	 */
-	public IArtifactRepository getArtifactRepository();
-
-	/**
-	 * Returns a list of locations in which bundles may be found.  The locations may
-	 * be directories to search or actual bundle files.
-	 * @return the list of locations holding bundles to process.
-	 */
-	public File[] getBundleLocations();
-
-	/** 
-	 * Return the configuration data to use during publishing or <code>null</code> 
-	 * if none.  The configuration data details the framework and launcher setup.
-	 *
-	 * @return the configuration data or <code>null</code>
-	 */
-	public ConfigData getConfigData();
-
-	public ArrayList getDefaultIUs(Set ius);
-
-	public File getExecutableLocation();
-
-	public File getFeaturesLocation();
-
-	public String getFlavor();
-
-	public File getJRELocation();
-
-	/**
-	 * The platform for the data this location
-	 * @return Returns a pde.build style platform config in the form os_ws_arch
-	 */
-	public String getLauncherConfig();
-
-	public LauncherData getLauncherData();
-
-	public IMetadataRepository getMetadataRepository();
-
-	public String getRootId();
-
-	public String getRootVersion();
-
-	public String getProductFile();
-
-	public String getVersionAdvice();
-
-	/**
-	 * Returns the location of the site.xml file, or <code>null</code> if not
-	 * generating for an update site.
-	 * @return The location of site.xml, or <code>null</code>
-	 */
-	public URI getSiteLocation();
-
-	public boolean publishArtifactRepository();
-
-	public boolean publishArtifacts();
-
-	public boolean reuseExistingPack200Files();
-
-	public void reuseExistingPack200Files(boolean publishPack);
-
-	public void setArtifactRepository(IArtifactRepository value);
-
-	public void setFlavor(String value);
-
-	public void setMetadataRepository(IMetadataRepository value);
-
-	public void setPublishArtifacts(boolean value);
-
-	public void setRootId(String value);
-
-	public void setVersionAdvice(String advice);
-
-	// TODO: This is kind of ugly. It's purpose is to allow us to craft CUs that we know about and need for our build
-	// We should try to replace this with something more generic prior to release
-	public Collection getOtherIUs();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IncrementalGenerator.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IncrementalGenerator.java
deleted file mode 100644
index cb90025..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IncrementalGenerator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import org.eclipse.equinox.internal.p2.metadata.generator.EclipseGeneratorApplication;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.Generator.GeneratorResult;
-
-/**
- * A class to enable carrying GeneratorResults across multiple invocations of the Generator.
- * Done here in the bundle instead of in GeneratorTask because of the way org.eclipse.ant.core.AntRunner uses class loaders.
- * @since 1.0
- */
-
-public class IncrementalGenerator {
-	private static String MODE_INCREMENTAL = "incremental"; //$NON-NLS-1$
-	private String mode = null;
-	static private GeneratorResult result = null;
-
-	public void setMode(String mode) {
-		this.mode = mode;
-	}
-
-	public void run(EclipseGeneratorApplication generator, EclipseInstallGeneratorInfoProvider provider) throws Exception {
-		if (MODE_INCREMENTAL.equals(mode)) {
-			if (result == null)
-				result = new GeneratorResult();
-			generator.setIncrementalResult(result);
-			generator.setGeneratorRootIU(false);
-		} else if ("final".equals(mode) && result != null) { //$NON-NLS-1$
-			generator.setIncrementalResult(result);
-			generator.setGeneratorRootIU(true);
-		}
-
-		generator.run(provider);
-
-		if (!MODE_INCREMENTAL.equals(mode)) {
-			result = null;
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/MetadataGeneratorHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/MetadataGeneratorHelper.java
deleted file mode 100644
index 53efbdb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/MetadataGeneratorHelper.java
+++ /dev/null
@@ -1,1434 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Genuitec, LLC - added license support
- *******************************************************************************/
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-import java.io.*;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.*;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.URIUtil;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.metadata.*;
-import org.eclipse.equinox.internal.p2.metadata.generator.Activator;
-import org.eclipse.equinox.internal.p2.metadata.generator.LocalizationHelper;
-import org.eclipse.equinox.internal.p2.metadata.generator.features.SiteCategory;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitPatchDescription;
-import org.eclipse.equinox.p2.metadata.VersionRange;
-import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
-import org.eclipse.equinox.p2.repository.artifact.IProcessingStepDescriptor;
-import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
-import org.eclipse.equinox.p2.repository.artifact.spi.ProcessingStepDescriptor;
-import org.eclipse.osgi.service.environment.EnvironmentInfo;
-import org.eclipse.osgi.service.resolver.*;
-import org.eclipse.osgi.util.ManifestElement;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-
-/**
- * @deprecated this class has been renamed to PublisherHelper and the vast majority
- * of the function has been deprecated and moved elsewhere.  See the deprecation notices there
- * for more information.
- */
-public class MetadataGeneratorHelper {
-	/**
-	 * A capability namespace representing the type of Eclipse resource (bundle, feature, source bundle, etc)
-	 * @see IProvidedCapability#getNamespace()
-	 */
-	public static final String NAMESPACE_ECLIPSE_TYPE = "org.eclipse.equinox.p2.eclipse.type"; //$NON-NLS-1$
-
-	/**
-	 * A capability name in the {@link #NAMESPACE_ECLIPSE_TYPE} namespace
-	 * representing and OSGi bundle resource
-	 * @see IProvidedCapability#getName()
-	 */
-	public static final String TYPE_ECLIPSE_BUNDLE = "bundle"; //$NON-NLS-1$
-	/**
-	 * A capability name in the {@link #NAMESPACE_ECLIPSE_TYPE} namespace
-	 * representing a feature
-	 */
-	public static final String TYPE_ECLIPSE_FEATURE = "feature"; //$NON-NLS-1$
-
-	/**
-	 * A capability name in the {@link #NAMESPACE_ECLIPSE_TYPE} namespace
-	 * representing a source bundle
-	 */
-	public static final String TYPE_ECLIPSE_SOURCE = "source"; //$NON-NLS-1$
-
-	/**
-	 * A capability namespace representing the localization (translation)
-	 * of strings from a specified IU in a specified locale
-	 * @see IProvidedCapability#getNamespace()
-	 * TODO: this should be in API, probably in IInstallableUnit
-	 */
-	public static final String NAMESPACE_IU_LOCALIZATION = "org.eclipse.equinox.p2.localization"; //$NON-NLS-1$
-
-	// Only certain properties in the bundle manifest are assumed to be localized.
-	public static final String[] BUNDLE_LOCALIZED_PROPERTIES = {Constants.BUNDLE_NAME, Constants.BUNDLE_DESCRIPTION, Constants.BUNDLE_VENDOR, Constants.BUNDLE_CONTACTADDRESS, Constants.BUNDLE_DOCURL, Constants.BUNDLE_UPDATELOCATION};
-	public static final int BUNDLE_LOCALIZATION_INDEX = BUNDLE_LOCALIZED_PROPERTIES.length;
-
-	private static final String[] BUNDLE_IU_PROPERTY_MAP = {Constants.BUNDLE_NAME, IInstallableUnit.PROP_NAME, Constants.BUNDLE_DESCRIPTION, IInstallableUnit.PROP_DESCRIPTION, Constants.BUNDLE_VENDOR, IInstallableUnit.PROP_PROVIDER, Constants.BUNDLE_CONTACTADDRESS, IInstallableUnit.PROP_CONTACT, Constants.BUNDLE_DOCURL, IInstallableUnit.PROP_DOC_URL};
-
-	private static final String CAPABILITY_NS_JAVA_PACKAGE = "java.package"; //$NON-NLS-1$
-	private static final String CAPABILITY_NS_OSGI_BUNDLE = "osgi.bundle"; //$NON-NLS-1$
-	private static final String CAPABILITY_NS_OSGI_FRAGMENT = "osgi.fragment"; //$NON-NLS-1$
-
-	private static final String CAPABILITY_NS_UPDATE_FEATURE = "org.eclipse.update.feature"; //$NON-NLS-1$
-
-	private static final Version DEFAULT_JRE_VERSION = Version.create("1.6"); //$NON-NLS-1$
-
-	public static final String ECLIPSE_FEATURE_CLASSIFIER = "org.eclipse.update.feature"; //$NON-NLS-1$
-	public static final String OSGI_BUNDLE_CLASSIFIER = "osgi.bundle"; //$NON-NLS-1$
-	public static final String BINARY_ARTIFACT_CLASSIFIER = "binary"; //$NON-NLS-1$
-
-	public static final IMatchExpression INSTALL_FEATURES_FILTER = InstallableUnit.parseFilter("(org.eclipse.update.install.features=true)"); //$NON-NLS-1$
-
-	private static final String IU_NAMESPACE = IInstallableUnit.NAMESPACE_IU_ID;
-
-	private static final String LAUNCHER_ID_PREFIX = "org.eclipse.launcher"; //$NON-NLS-1$
-
-	private static final String ECLIPSE_INSTALL_HANDLER_PROP = "org.eclipse.update.installHandler"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_APPLICATION_PROP = "org.eclipse.update.feature.application"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_PLUGIN_PROP = "org.eclipse.update.feature.plugin"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_EXCLUSIVE_PROP = "org.eclipse.update.feature.exclusive"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_PRIMARY_PROP = "org.eclipse.update.feature.primary"; //$NON-NLS-1$
-
-	//TODO - need to come up with a way to infer launcher version
-	private static final Version LAUNCHER_VERSION = Version.createOSGi(1, 0, 0);
-
-	public static final ITouchpointType TOUCHPOINT_NATIVE = MetadataFactory.createTouchpointType("org.eclipse.equinox.p2.native", Version.createOSGi(1, 0, 0)); //$NON-NLS-1$
-	public static final ITouchpointType TOUCHPOINT_OSGI = MetadataFactory.createTouchpointType("org.eclipse.equinox.p2.osgi", Version.createOSGi(1, 0, 0)); //$NON-NLS-1$
-
-	public static final IProvidedCapability BUNDLE_CAPABILITY = MetadataFactory.createProvidedCapability(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, Version.createOSGi(1, 0, 0));
-	public static final IProvidedCapability FEATURE_CAPABILITY = MetadataFactory.createProvidedCapability(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_FEATURE, Version.createOSGi(1, 0, 0));
-	public static final IProvidedCapability SOURCE_BUNDLE_CAPABILITY = MetadataFactory.createProvidedCapability(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_SOURCE, Version.createOSGi(1, 0, 0));
-
-	static final String DEFAULT_BUNDLE_LOCALIZATION = "plugin"; //$NON-NLS-1$
-
-	static final String BUNDLE_ADVICE_FILE = "META-INF/p2.inf"; //$NON-NLS-1$
-	static final String ADVICE_INSTRUCTIONS_PREFIX = "instructions."; //$NON-NLS-1$
-
-	static final String NAMESPACE_FLAVOR = "org.eclipse.equinox.p2.flavor"; //$NON-NLS-1$"
-
-	public static IArtifactDescriptor createArtifactDescriptor(IArtifactKey key, File pathOnDisk, boolean asIs, boolean recur) {
-		//TODO this size calculation is bogus
-		ArtifactDescriptor result = new ArtifactDescriptor(key);
-		if (pathOnDisk != null) {
-			result.setProperty(IArtifactDescriptor.ARTIFACT_SIZE, Long.toString(pathOnDisk.length()));
-			// TODO - this is wrong but I'm testing a work-around for bug 205842
-			result.setProperty(IArtifactDescriptor.DOWNLOAD_SIZE, Long.toString(pathOnDisk.length()));
-		}
-		if (asIs) {
-			String md5 = computeMD5(pathOnDisk);
-			if (md5 != null)
-				result.setProperty(IArtifactDescriptor.DOWNLOAD_MD5, md5);
-		}
-		return result;
-	}
-
-	private static String computeMD5(File file) {
-		if (file == null || file.isDirectory() || !file.exists())
-			return null;
-		MessageDigest md5Checker;
-		try {
-			md5Checker = MessageDigest.getInstance("MD5"); //$NON-NLS-1$
-		} catch (NoSuchAlgorithmException e) {
-			return null;
-		}
-		InputStream fis = null;
-		try {
-			fis = new BufferedInputStream(new FileInputStream(file));
-			int read = -1;
-			while ((read = fis.read()) != -1) {
-				md5Checker.update((byte) read);
-			}
-			byte[] digest = md5Checker.digest();
-			StringBuffer buf = new StringBuffer();
-			for (int i = 0; i < digest.length; i++) {
-				if ((digest[i] & 0xFF) < 0x10)
-					buf.append('0');
-				buf.append(Integer.toHexString(digest[i] & 0xFF));
-			}
-			return buf.toString();
-		} catch (FileNotFoundException e) {
-			return null;
-		} catch (IOException e) {
-			return null;
-		} finally {
-			if (fis != null)
-				try {
-					fis.close();
-				} catch (IOException e) {
-					// ignore
-				}
-		}
-	}
-
-	/**
-	 * @deprecated moved to AbstractPublishingAction
-	 */
-	public static IArtifactDescriptor createPack200ArtifactDescriptor(IArtifactKey key, File pathOnDisk, String installSize) {
-		//TODO this size calculation is bogus
-		ArtifactDescriptor result = new ArtifactDescriptor(key);
-		if (pathOnDisk != null) {
-			result.setProperty(IArtifactDescriptor.ARTIFACT_SIZE, installSize);
-			// TODO - this is wrong but I'm testing a work-around for bug 205842
-			result.setProperty(IArtifactDescriptor.DOWNLOAD_SIZE, Long.toString(pathOnDisk.length()));
-		}
-		IProcessingStepDescriptor[] steps = new IProcessingStepDescriptor[] {new ProcessingStepDescriptor("org.eclipse.equinox.p2.processing.Pack200Unpacker", null, true)}; //$NON-NLS-1$
-		result.setProcessingSteps(steps);
-		result.setProperty(IArtifactDescriptor.FORMAT, IArtifactDescriptor.FORMAT_PACKED);
-		return result;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	public static IInstallableUnit createBundleConfigurationUnit(String iuId, Version iuVersion, boolean isBundleFragment, GeneratorBundleInfo configInfo, String configurationFlavor, String ldapFilter) {
-		IMatchExpression filter = ldapFilter == null ? null : InstallableUnit.parseFilter(ldapFilter);
-		return createBundleConfigurationUnit(iuId, iuVersion, isBundleFragment, configInfo, configurationFlavor, filter);
-	}
-
-	public static IInstallableUnit createBundleConfigurationUnit(String iuId, Version iuVersion, boolean isBundleFragment, GeneratorBundleInfo configInfo, String configurationFlavor, IMatchExpression filter) {
-		if (configInfo == null)
-			return null;
-
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = configurationFlavor + iuId;
-		cu.setId(configUnitId);
-		cu.setVersion(iuVersion);
-
-		//Indicate the IU to which this CU apply
-		cu.setHost(new IRequirement[] { //
-				MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, iuId, new VersionRange(iuVersion, true, Version.MAX_VERSION, true), null, false, false, true), //
-						MetadataFactory.createRequirement(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, new VersionRange(Version.createOSGi(1, 0, 0), true, Version.createOSGi(2, 0, 0), false), null, false, false, false)});
-
-		//Adds capabilities for fragment, self, and describing the flavor supported
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {createSelfCapability(configUnitId, iuVersion), MetadataFactory.createProvidedCapability(NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
-
-		Map touchpointData = new HashMap();
-		touchpointData.put("install", "installBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("uninstall", "uninstallBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("configure", createConfigScript(configInfo, isBundleFragment)); //$NON-NLS-1$
-		touchpointData.put("unconfigure", createUnconfigScript(configInfo, isBundleFragment)); //$NON-NLS-1$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		cu.setFilter(filter);
-		return MetadataFactory.createInstallableUnit(cu);
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	public static IInstallableUnit createBundleIU(BundleDescription bd, Map manifest, boolean isFolderPlugin, IArtifactKey key, boolean useNestedAdvice) {
-		Map manifestLocalizations = null;
-		if (manifest != null && bd.getLocation() != null) {
-			manifestLocalizations = getManifestLocalizations(manifest, new File(bd.getLocation()));
-		}
-
-		return createBundleIU(bd, manifest, isFolderPlugin, key, manifestLocalizations, useNestedAdvice);
-	}
-
-	private static VersionRange computeUpdateRange(org.osgi.framework.Version base) {
-		VersionRange updateRange = null;
-		if (!base.equals(org.osgi.framework.Version.emptyVersion)) {
-			updateRange = new VersionRange(Version.emptyVersion, true, fromOSGiVersion(base), false);
-		} else {
-			updateRange = VersionRange.emptyRange;
-		}
-		return updateRange;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	public static IInstallableUnit createBundleIU(BundleDescription bd, Map manifest, boolean isFolderPlugin, IArtifactKey key, Map manifestLocalizations, boolean useNestedAdvice) {
-		boolean isBinaryBundle = true;
-		if (manifest != null && manifest.containsKey("Eclipse-SourceBundle")) { //$NON-NLS-1$
-			isBinaryBundle = false;
-		}
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		iu.setSingleton(bd.isSingleton());
-		iu.setId(bd.getSymbolicName());
-		iu.setVersion(fromOSGiVersion(bd.getVersion()));
-		iu.setFilter(bd.getPlatformFilter());
-
-		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(bd.getSymbolicName(), computeUpdateRange(bd.getVersion()), IUpdateDescriptor.NORMAL, null));
-
-		boolean isFragment = bd.getHost() != null;
-		//		boolean requiresAFragment = isFragment ? false : requireAFragment(bd, manifest);
-
-		//Process the required bundles
-		BundleSpecification requiredBundles[] = bd.getRequiredBundles();
-		ArrayList reqsDeps = new ArrayList();
-		//		if (requiresAFragment)
-		//			reqsDeps.add(MetadataFactory.createRequiredCapability(CAPABILITY_TYPE_OSGI_FRAGMENTS, bd.getSymbolicName(), VersionRange.emptyRange, null, false, false));
-		if (isFragment)
-			reqsDeps.add(MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, bd.getHost().getName(), fromOSGiVersionRange(bd.getHost().getVersionRange()), null, false, false));
-		for (int j = 0; j < requiredBundles.length; j++)
-			reqsDeps.add(MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, requiredBundles[j].getName(), fromOSGiVersionRange(requiredBundles[j].getVersionRange()), null, requiredBundles[j].isOptional(), false));
-
-		// Process the import packages
-		ImportPackageSpecification osgiImports[] = bd.getImportPackages();
-		for (int i = 0; i < osgiImports.length; i++) {
-			// TODO we need to sort out how we want to handle wild-carded dynamic imports - for now we ignore them
-			ImportPackageSpecification importSpec = osgiImports[i];
-			String importPackageName = importSpec.getName();
-			if (importPackageName.indexOf('*') != -1)
-				continue;
-
-			VersionRange versionRange = fromOSGiVersionRange(importSpec.getVersionRange());
-
-			//TODO this needs to be refined to take into account all the attribute handled by imports
-			reqsDeps.add(MetadataFactory.createRequirement(CAPABILITY_NS_JAVA_PACKAGE, importPackageName, versionRange, null, isOptional(importSpec), false));
-		}
-		iu.setRequirements((IRequirement[]) reqsDeps.toArray(new IRequirement[reqsDeps.size()]));
-
-		// Create set of provided capabilities
-		ArrayList providedCapabilities = new ArrayList();
-		providedCapabilities.add(createSelfCapability(bd.getSymbolicName(), fromOSGiVersion(bd.getVersion())));
-		providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_OSGI_BUNDLE, bd.getSymbolicName(), fromOSGiVersion(bd.getVersion())));
-
-		// Process the export package
-		ExportPackageDescription exports[] = bd.getExportPackages();
-		for (int i = 0; i < exports.length; i++) {
-			//TODO make sure that we support all the refinement on the exports
-			providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_JAVA_PACKAGE, exports[i].getName(), fromOSGiVersion(exports[i].getVersion())));
-		}
-		// Here we add a bundle capability to identify bundles
-		if (isBinaryBundle)
-			providedCapabilities.add(BUNDLE_CAPABILITY);
-		else
-			providedCapabilities.add(SOURCE_BUNDLE_CAPABILITY);
-
-		if (isFragment)
-			providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_OSGI_FRAGMENT, bd.getHost().getName(), fromOSGiVersion(bd.getVersion())));
-
-		if (manifestLocalizations != null) {
-			for (Iterator iter = manifestLocalizations.keySet().iterator(); iter.hasNext();) {
-				Locale locale = (Locale) iter.next();
-				Properties translatedStrings = (Properties) manifestLocalizations.get(locale);
-				Enumeration propertyKeys = translatedStrings.propertyNames();
-				while (propertyKeys.hasMoreElements()) {
-					String nextKey = (String) propertyKeys.nextElement();
-					iu.setProperty(locale.toString() + '.' + nextKey, translatedStrings.getProperty(nextKey));
-				}
-				providedCapabilities.add(makeTranslationCapability(bd.getSymbolicName(), locale));
-			}
-		}
-
-		iu.setCapabilities((IProvidedCapability[]) providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-
-		iu.setArtifacts(new IArtifactKey[] {key});
-
-		iu.setTouchpointType(TOUCHPOINT_OSGI);
-
-		// Set certain properties from the manifest header attributes as IU properties.
-		// The values of these attributes may be localized (strings starting with '%')
-		// with the translated values appearing in the localization IU fragments
-		// associated with the bundle IU.
-		if (manifest != null) {
-			int i = 0;
-			while (i < BUNDLE_IU_PROPERTY_MAP.length) {
-				if (manifest.containsKey(BUNDLE_IU_PROPERTY_MAP[i])) {
-					String value = (String) manifest.get(BUNDLE_IU_PROPERTY_MAP[i]);
-					if (value != null && value.length() > 0) {
-						iu.setProperty(BUNDLE_IU_PROPERTY_MAP[i + 1], value);
-					}
-				}
-				i += 2;
-			}
-		}
-
-		// Define the immutable metadata for this IU. In this case immutable means
-		// that this is something that will not impact the configuration.
-		Map touchpointData = new HashMap();
-		if (isFolderPlugin)
-			touchpointData.put("zipped", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("manifest", toManifestString(manifest)); //$NON-NLS-1$
-
-		if (useNestedAdvice)
-			mergeInstructionsAdvice(touchpointData, getBundleAdvice(bd.getLocation(), BUNDLE_ADVICE_FILE));
-
-		iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-
-		return MetadataFactory.createInstallableUnit(iu);
-	}
-
-	/**
-	 * @deprecated moved to AdviceFileAdvice
-	 */
-	public static void mergeInstructionsAdvice(Map touchpointData, Map bundleAdvice) {
-		if (touchpointData == null || bundleAdvice == null)
-			return;
-
-		for (Iterator iterator = bundleAdvice.keySet().iterator(); iterator.hasNext();) {
-			String key = (String) iterator.next();
-			if (key.startsWith(ADVICE_INSTRUCTIONS_PREFIX)) {
-				String phase = key.substring(ADVICE_INSTRUCTIONS_PREFIX.length());
-				String instructions = touchpointData.containsKey(phase) ? (String) touchpointData.get(phase) : ""; //$NON-NLS-1$
-				if (instructions.length() > 0)
-					instructions += ";"; //$NON-NLS-1$
-				instructions += ((String) bundleAdvice.get(key)).trim();
-				touchpointData.put(phase, instructions);
-			}
-		}
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	public static void createHostLocalizationFragment(IInstallableUnit bundleIU, BundleDescription bd, String hostId, String[] hostBundleManifestValues, Set localizationIUs) {
-		Map hostLocalizations = getHostLocalizations(new File(bd.getLocation()), hostBundleManifestValues);
-		if (hostLocalizations != null) {
-			IInstallableUnitFragment localizationFragment = createLocalizationFragmentOfHost(bd, hostId, hostBundleManifestValues, hostLocalizations);
-			localizationIUs.add(localizationFragment);
-		}
-	}
-
-	/*
-	 * @param hostId
-	 * @param bd
-	 * @param locale
-	 * @param localizedStrings
-	 * @return installableUnitFragment
-	 */
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static IInstallableUnitFragment createLocalizationFragmentOfHost(BundleDescription bd, String hostId, String[] hostManifestValues, Map hostLocalizations) {
-		InstallableUnitFragmentDescription fragment = new MetadataFactory.InstallableUnitFragmentDescription();
-		String fragmentId = makeHostLocalizationFragmentId(bd.getSymbolicName());
-		fragment.setId(fragmentId);
-		fragment.setVersion(fromOSGiVersion(bd.getVersion())); // TODO: is this a meaningful version?
-
-		HostSpecification hostSpec = bd.getHost();
-		IRequirement[] hostReqs = new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, hostSpec.getName(), fromOSGiVersionRange(hostSpec.getVersionRange()), null, false, false, false)};
-		fragment.setHost(hostReqs);
-
-		fragment.setSingleton(true);
-		fragment.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-
-		// Create a provided capability for each locale and add the translated properties.
-		ArrayList providedCapabilities = new ArrayList(hostLocalizations.keySet().size());
-		for (Iterator iter = hostLocalizations.keySet().iterator(); iter.hasNext();) {
-			Locale locale = (Locale) iter.next();
-			Properties translatedStrings = (Properties) hostLocalizations.get(locale);
-
-			Enumeration propertyKeys = translatedStrings.propertyNames();
-			while (propertyKeys.hasMoreElements()) {
-				String nextKey = (String) propertyKeys.nextElement();
-				fragment.setProperty(locale.toString() + '.' + nextKey, translatedStrings.getProperty(nextKey));
-			}
-			providedCapabilities.add(makeTranslationCapability(hostId, locale));
-		}
-		fragment.setCapabilities((IProvidedCapability[]) providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-
-		return MetadataFactory.createInstallableUnitFragment(fragment);
-	}
-
-	/**
-	 * @param id
-	 * @return the id for the iu fragment containing the localized properties
-	 * 		   for the bundle with the given id
-	 */
-	//	private static String makeBundleLocalizationFragmentId(String id) {
-	//		return id + ".translated_properties"; //$NON-NLS-1$
-	//	}
-	/**
-	 * @param id
-	 * @return the id for the iu fragment containing localized properties
-	 * 		   for the fragment with the given id.
-	 */
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static String makeHostLocalizationFragmentId(String id) {
-		return id + ".translated_host_properties"; //$NON-NLS-1$
-	}
-
-	private static IProvidedCapability makeTranslationCapability(String hostId, Locale locale) {
-		return MetadataFactory.createProvidedCapability(NAMESPACE_IU_LOCALIZATION, locale.toString(), Version.createOSGi(1, 0, 0));
-	}
-
-	/**
-	 * Creates an IU corresponding to an update site category
-	 * @param category The category descriptor
-	 * @param featureIUs The IUs of the features that belong to the category
-	 * @param parentCategory The parent category, or <code>null</code>
-	 * @return an IU representing the category
-	 * @deprecated moved to SiteXMLAction
-	 */
-	public static IInstallableUnit createCategoryIU(SiteCategory category, Set featureIUs, IInstallableUnit parentCategory) {
-		InstallableUnitDescription cat = new MetadataFactory.InstallableUnitDescription();
-		cat.setSingleton(true);
-		String categoryId = category.getName();
-		cat.setId(categoryId);
-		cat.setVersion(Version.emptyVersion);
-		cat.setProperty(IInstallableUnit.PROP_NAME, category.getLabel());
-		cat.setProperty(IInstallableUnit.PROP_DESCRIPTION, category.getDescription());
-
-		ArrayList reqsConfigurationUnits = new ArrayList(featureIUs.size());
-		for (Iterator iterator = featureIUs.iterator(); iterator.hasNext();) {
-			IInstallableUnit iu = (IInstallableUnit) iterator.next();
-			VersionRange range = new VersionRange(iu.getVersion(), true, iu.getVersion(), true);
-			reqsConfigurationUnits.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, iu.getId(), range, iu.getFilter() == null ? null : iu.getFilter(), false, false));
-		}
-		//note that update sites don't currently support nested categories, but it may be useful to add in the future
-		if (parentCategory != null) {
-			reqsConfigurationUnits.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, parentCategory.getId(), VersionRange.emptyRange, parentCategory.getFilter() == null ? null : parentCategory.getFilter(), false, false));
-		}
-		cat.setRequirements((IRequirement[]) reqsConfigurationUnits.toArray(new IRequirement[reqsConfigurationUnits.size()]));
-
-		// Create set of provided capabilities
-		ArrayList providedCapabilities = new ArrayList();
-		providedCapabilities.add(createSelfCapability(categoryId, Version.emptyVersion));
-
-		Map localizations = category.getLocalizations();
-		if (localizations != null) {
-			for (Iterator iter = localizations.keySet().iterator(); iter.hasNext();) {
-				Locale locale = (Locale) iter.next();
-				Properties translatedStrings = (Properties) localizations.get(locale);
-				Enumeration propertyKeys = translatedStrings.propertyNames();
-				while (propertyKeys.hasMoreElements()) {
-					String nextKey = (String) propertyKeys.nextElement();
-					cat.setProperty(locale.toString() + '.' + nextKey, translatedStrings.getProperty(nextKey));
-				}
-				providedCapabilities.add(makeTranslationCapability(categoryId, locale));
-			}
-		}
-
-		cat.setCapabilities((IProvidedCapability[]) providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-
-		cat.setArtifacts(new IArtifactKey[0]);
-		cat.setProperty(InstallableUnitDescription.PROP_TYPE_CATEGORY, "true"); //$NON-NLS-1$
-		return MetadataFactory.createInstallableUnit(cat);
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static String createConfigScript(GeneratorBundleInfo configInfo, boolean isBundleFragment) {
-		if (configInfo == null)
-			return ""; //$NON-NLS-1$
-
-		String configScript = "";//$NON-NLS-1$
-		if (!isBundleFragment && configInfo.getStartLevel() != BundleInfo.NO_LEVEL) {
-			configScript += "setStartLevel(startLevel:" + configInfo.getStartLevel() + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		if (!isBundleFragment && configInfo.isMarkedAsStarted()) {
-			configScript += "markStarted(started: true);"; //$NON-NLS-1$
-		}
-
-		if (configInfo.getSpecialConfigCommands() != null) {
-			configScript += configInfo.getSpecialConfigCommands();
-		}
-
-		return configScript;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static String createDefaultBundleConfigScript(GeneratorBundleInfo configInfo) {
-		return createConfigScript(configInfo, false);
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	public static IInstallableUnit createDefaultBundleConfigurationUnit(GeneratorBundleInfo configInfo, GeneratorBundleInfo unconfigInfo, String configurationFlavor) {
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = createDefaultConfigUnitId(OSGI_BUNDLE_CLASSIFIER, configurationFlavor);
-		cu.setId(configUnitId);
-		Version configUnitVersion = Version.createOSGi(1, 0, 0);
-		cu.setVersion(configUnitVersion);
-
-		// Add capabilities for fragment, self, and describing the flavor supported
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {createSelfCapability(configUnitId, configUnitVersion), MetadataFactory.createProvidedCapability(NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
-
-		// Create a required capability on bundles
-		IRequirement[] reqs = new IRequirement[] {MetadataFactory.createRequirement(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, VersionRange.emptyRange, null, false, true, false)};
-		cu.setHost(reqs);
-		Map touchpointData = new HashMap();
-
-		touchpointData.put("install", "installBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("uninstall", "uninstallBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("configure", createDefaultBundleConfigScript(configInfo)); //$NON-NLS-1$
-		touchpointData.put("unconfigure", createDefaultBundleUnconfigScript(unconfigInfo)); //$NON-NLS-1$
-
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		return MetadataFactory.createInstallableUnit(cu);
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static String createDefaultBundleUnconfigScript(GeneratorBundleInfo unconfigInfo) {
-		return createUnconfigScript(unconfigInfo, false);
-	}
-
-	public static String createDefaultConfigUnitId(String classifier, String configurationFlavor) {
-		return configurationFlavor + "." + classifier + ".default"; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public static IInstallableUnit createDefaultFeatureConfigurationUnit(String configurationFlavor) {
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = createDefaultConfigUnitId(ECLIPSE_FEATURE_CLASSIFIER, configurationFlavor);
-		cu.setId(configUnitId);
-		Version configUnitVersion = Version.createOSGi(1, 0, 0);
-		cu.setVersion(configUnitVersion);
-
-		// Add capabilities for fragment, self, and describing the flavor supported
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {createSelfCapability(configUnitId, configUnitVersion), MetadataFactory.createProvidedCapability(NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
-
-		// Create a required capability on features
-		IRequirement[] reqs = new IRequirement[] {MetadataFactory.createRequirement(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_FEATURE, VersionRange.emptyRange, null, true, true, false)};
-		cu.setHost(reqs);
-
-		cu.setFilter(INSTALL_FEATURES_FILTER);
-		Map touchpointData = new HashMap();
-		touchpointData.put("install", "installFeature(feature:${artifact},featureId:default,featureVersion:default)"); //$NON-NLS-1$//$NON-NLS-2$
-		touchpointData.put("uninstall", "uninstallFeature(feature:${artifact},featureId:default,featureVersion:default)"); //$NON-NLS-1$//$NON-NLS-2$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-
-		return MetadataFactory.createInstallableUnit(cu);
-	}
-
-	public static IInstallableUnit createDefaultConfigurationUnitForSourceBundles(String configurationFlavor) {
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = createDefaultConfigUnitId("source", configurationFlavor); //$NON-NLS-1$
-		cu.setId(configUnitId);
-		Version configUnitVersion = Version.createOSGi(1, 0, 0);
-		cu.setVersion(configUnitVersion);
-
-		// Add capabilities for fragment, self, and describing the flavor supported
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {createSelfCapability(configUnitId, configUnitVersion), MetadataFactory.createProvidedCapability(NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
-
-		// Create a required capability on source providers
-		IRequirement[] reqs = new IRequirement[] {MetadataFactory.createRequirement(NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_SOURCE, VersionRange.emptyRange, null, true, true, false)};
-		cu.setHost(reqs);
-		Map touchpointData = new HashMap();
-
-		touchpointData.put("install", "addSourceBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("uninstall", "removeSourceBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		return MetadataFactory.createInstallableUnit(cu);
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	public static IArtifactKey createFeatureArtifactKey(String fsn, String version) {
-		return new ArtifactKey(ECLIPSE_FEATURE_CLASSIFIER, fsn, Version.create(version));
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	public static IInstallableUnit createFeatureJarIU(Feature feature, boolean isExploded) {
-		return createFeatureJarIU(feature, isExploded, null);
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	public static IInstallableUnit createFeatureJarIU(Feature feature, boolean isExploded, Properties extraProperties) {
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		String id = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/false);
-		iu.setId(id);
-		Version version = fromOSGiVersion(new org.osgi.framework.Version(feature.getVersion()));
-		iu.setVersion(version);
-		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(id, computeUpdateRange(new org.osgi.framework.Version(feature.getVersion())), IUpdateDescriptor.NORMAL, null));
-		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
-		if (feature.getDescription() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
-		if (feature.getDescriptionURL() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
-		if (feature.getProviderName() != null)
-			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
-		if (feature.getLicense() != null)
-			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
-		if (feature.getCopyright() != null)
-			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
-		if (feature.getApplication() != null)
-			iu.setProperty(UPDATE_FEATURE_APPLICATION_PROP, feature.getApplication());
-		if (feature.getPlugin() != null)
-			iu.setProperty(UPDATE_FEATURE_PLUGIN_PROP, feature.getPlugin());
-		if (feature.isExclusive())
-			iu.setProperty(UPDATE_FEATURE_EXCLUSIVE_PROP, Boolean.TRUE.toString());
-		if (feature.isPrimary())
-			iu.setProperty(UPDATE_FEATURE_PRIMARY_PROP, Boolean.TRUE.toString());
-
-		// The required capabilities are not specified at this level because we don't want the feature jar to be attractive to install.
-
-		iu.setTouchpointType(TOUCHPOINT_OSGI);
-		iu.setFilter(INSTALL_FEATURES_FILTER);
-		iu.setSingleton(true);
-
-		if (feature.getInstallHandler() != null && feature.getInstallHandler().trim().length() > 0) {
-			String installHandlerProperty = "handler=" + feature.getInstallHandler(); //$NON-NLS-1$
-
-			if (feature.getInstallHandlerLibrary() != null)
-				installHandlerProperty += ", library=" + feature.getInstallHandlerLibrary(); //$NON-NLS-1$
-
-			if (feature.getInstallHandlerURL() != null)
-				installHandlerProperty += ", url=" + feature.getInstallHandlerURL(); //$NON-NLS-1$
-
-			iu.setProperty(ECLIPSE_INSTALL_HANDLER_PROP, installHandlerProperty);
-		}
-
-		// Create set of provided capabilities
-		ArrayList providedCapabilities = new ArrayList();
-		providedCapabilities.add(createSelfCapability(id, version));
-		providedCapabilities.add(FEATURE_CAPABILITY);
-		providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_UPDATE_FEATURE, feature.getId(), version));
-
-		iu.setArtifacts(new IArtifactKey[] {createFeatureArtifactKey(feature.getId(), version.toString())});
-
-		if (isExploded) {
-			// Define the immutable metadata for this IU. In this case immutable means
-			// that this is something that will not impact the configuration.
-			Map touchpointData = new HashMap();
-			touchpointData.put("zipped", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-			iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		}
-
-		Map localizations = feature.getLocalizations();
-		if (localizations != null) {
-			for (Iterator iter = localizations.keySet().iterator(); iter.hasNext();) {
-				Locale locale = (Locale) iter.next();
-				Properties translatedStrings = (Properties) localizations.get(locale);
-				Enumeration propertyKeys = translatedStrings.propertyNames();
-				while (propertyKeys.hasMoreElements()) {
-					String nextKey = (String) propertyKeys.nextElement();
-					iu.setProperty(locale.toString() + '.' + nextKey, translatedStrings.getProperty(nextKey));
-				}
-				providedCapabilities.add(makeTranslationCapability(id, locale));
-			}
-		}
-
-		iu.setCapabilities((IProvidedCapability[]) providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-
-		if (extraProperties != null) {
-			Enumeration e = extraProperties.propertyNames();
-			while (e.hasMoreElements()) {
-				String name = (String) e.nextElement();
-				iu.setProperty(name, extraProperties.getProperty(name));
-			}
-		}
-
-		return MetadataFactory.createInstallableUnit(iu);
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	public static IInstallableUnit createGroupIU(Feature feature, IInstallableUnit featureIU) {
-		return createGroupIU(feature, featureIU, null, true);
-	}
-
-	public static IInstallableUnit createGroupIU(Feature feature, IInstallableUnit featureIU, Properties extraProperties, boolean transformIds) {
-		if (isPatch(feature))
-			return createPatchIU(feature, featureIU, extraProperties);
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		String id = feature.getId();
-		if (transformIds)
-			id = getTransformedId(id, /*isPlugin*/false, /*isGroup*/true);
-		iu.setId(id);
-		Version version = fromOSGiVersion(new org.osgi.framework.Version(feature.getVersion()));
-		iu.setVersion(version);
-		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
-		if (feature.getDescription() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
-		if (feature.getDescriptionURL() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
-		if (feature.getProviderName() != null)
-			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
-		if (feature.getLicense() != null)
-			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
-		if (feature.getCopyright() != null)
-			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
-		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(id, computeUpdateRange(new org.osgi.framework.Version(feature.getVersion())), IUpdateDescriptor.NORMAL, null));
-
-		FeatureEntry entries[] = feature.getEntries();
-		IRequirement[] required = new IRequirement[entries.length + (featureIU == null ? 0 : 1)];
-		for (int i = 0; i < entries.length; i++) {
-			VersionRange range = getVersionRange(entries[i]);
-			String requiredId = entries[i].getId();
-			if (transformIds)
-				requiredId = getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true);
-			required[i] = MetadataFactory.createRequirement(IU_NAMESPACE, requiredId, range, getFilter(entries[i]), entries[i].isOptional(), false);
-		}
-		// the feature IU could be null if we are just generating a feature structure rather than
-		// actual features.
-		if (featureIU != null)
-			required[entries.length] = MetadataFactory.createRequirement(IU_NAMESPACE, featureIU.getId(), new VersionRange(featureIU.getVersion(), true, featureIU.getVersion(), true), INSTALL_FEATURES_FILTER, false, false);
-		iu.setRequirements(required);
-		iu.setTouchpointType(ITouchpointType.NONE);
-		iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString());
-		// TODO: shouldn't the filter for the group be constructed from os, ws, arch, nl
-		// 		 of the feature?
-		// iu.setFilter(filter);
-
-		// Create set of provided capabilities
-		ArrayList providedCapabilities = new ArrayList();
-		providedCapabilities.add(createSelfCapability(id, version));
-
-		Map localizations = feature.getLocalizations();
-		if (localizations != null) {
-			for (Iterator iter = localizations.keySet().iterator(); iter.hasNext();) {
-				Locale locale = (Locale) iter.next();
-				Properties translatedStrings = (Properties) localizations.get(locale);
-				Enumeration propertyKeys = translatedStrings.propertyNames();
-				while (propertyKeys.hasMoreElements()) {
-					String nextKey = (String) propertyKeys.nextElement();
-					iu.setProperty(locale.toString() + '.' + nextKey, translatedStrings.getProperty(nextKey));
-				}
-				providedCapabilities.add(makeTranslationCapability(id, locale));
-			}
-		}
-
-		iu.setCapabilities((IProvidedCapability[]) providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-
-		if (extraProperties != null) {
-			Enumeration e = extraProperties.propertyNames();
-			while (e.hasMoreElements()) {
-				String name = (String) e.nextElement();
-				iu.setProperty(name, extraProperties.getProperty(name));
-			}
-		}
-
-		return MetadataFactory.createInstallableUnit(iu);
-	}
-
-	public static IInstallableUnit createPatchIU(Feature feature, IInstallableUnit featureIU, Properties extraProperties) {
-		InstallableUnitPatchDescription iu = new MetadataFactory.InstallableUnitPatchDescription();
-		String id = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/true);
-		iu.setId(id);
-		Version version = fromOSGiVersion(new org.osgi.framework.Version(feature.getVersion()));
-		iu.setVersion(version);
-		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
-		if (feature.getDescription() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
-		if (feature.getDescriptionURL() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
-		if (feature.getProviderName() != null)
-			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
-		if (feature.getLicense() != null)
-			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
-		if (feature.getCopyright() != null)
-			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
-		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(id, computeUpdateRange(new org.osgi.framework.Version(feature.getVersion())), IUpdateDescriptor.NORMAL, null));
-
-		FeatureEntry entries[] = feature.getEntries();
-		ArrayList applicabilityScope = new ArrayList();
-		ArrayList patchRequirements = new ArrayList();
-		ArrayList requirementChanges = new ArrayList();
-		for (int i = 0; i < entries.length; i++) {
-			VersionRange range = getVersionRange(entries[i]);
-			IRequirement req = MetadataFactory.createRequirement(IU_NAMESPACE, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), range, getFilter(entries[i]), entries[i].isOptional(), false);
-			if (entries[i].isRequires()) {
-				applicabilityScope.add(req);
-				if (applicabilityScope.size() == 1) {
-					iu.setLifeCycle(MetadataFactory.createRequirement(IU_NAMESPACE, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), range, null, false, false, false));
-				}
-				continue;
-			}
-			if (entries[i].isPlugin()) {
-				IRequirement from = MetadataFactory.createRequirement(IU_NAMESPACE, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), VersionRange.emptyRange, getFilter(entries[i]), entries[i].isOptional(), false);
-				requirementChanges.add(MetadataFactory.createRequirementChange(from, req));
-				continue;
-			}
-			patchRequirements.add(req);
-		}
-		//Always add a requirement on the IU containing the feature jar
-		patchRequirements.add(MetadataFactory.createRequirement(IU_NAMESPACE, featureIU.getId(), new VersionRange(featureIU.getVersion(), true, featureIU.getVersion(), true), INSTALL_FEATURES_FILTER, false, false));
-		iu.setRequirements((IRequirement[]) patchRequirements.toArray(new IRequirement[patchRequirements.size()]));
-		iu.setApplicabilityScope(new IRequirement[][] {(IRequirement[]) applicabilityScope.toArray(new IRequirement[applicabilityScope.size()])});
-		iu.setRequirementChanges((IRequirementChange[]) requirementChanges.toArray(new IRequirementChange[requirementChanges.size()]));
-
-		//Generate lifecycle
-		//		IRequirement lifeCycle = null;
-		//		if (applicabilityScope.size() > 0) {
-		//			IRequirement req = (IRequirement) applicabilityScope.get(0);
-		//		}
-
-		iu.setTouchpointType(ITouchpointType.NONE);
-		iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString());
-		iu.setProperty(InstallableUnitDescription.PROP_TYPE_PATCH, Boolean.TRUE.toString());
-		// TODO: shouldn't the filter for the group be constructed from os, ws, arch, nl
-		// 		 of the feature?
-		// iu.setFilter(filter);
-
-		// Create set of provided capabilities
-		ArrayList providedCapabilities = new ArrayList();
-		providedCapabilities.add(createSelfCapability(id, version));
-
-		Map localizations = feature.getLocalizations();
-		if (localizations != null) {
-			for (Iterator iter = localizations.keySet().iterator(); iter.hasNext();) {
-				Locale locale = (Locale) iter.next();
-				Properties translatedStrings = (Properties) localizations.get(locale);
-				Enumeration propertyKeys = translatedStrings.propertyNames();
-				while (propertyKeys.hasMoreElements()) {
-					String nextKey = (String) propertyKeys.nextElement();
-					iu.setProperty(locale.toString() + '.' + nextKey, translatedStrings.getProperty(nextKey));
-				}
-				providedCapabilities.add(makeTranslationCapability(id, locale));
-			}
-		}
-
-		iu.setCapabilities((IProvidedCapability[]) providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-
-		if (extraProperties != null) {
-			Enumeration e = extraProperties.propertyNames();
-			while (e.hasMoreElements()) {
-				String name = (String) e.nextElement();
-				iu.setProperty(name, extraProperties.getProperty(name));
-			}
-		}
-
-		return MetadataFactory.createInstallableUnitPatch(iu);
-	}
-
-	private static boolean isPatch(Feature feature) {
-		FeatureEntry[] entries = feature.getEntries();
-		for (int i = 0; i < entries.length; i++) {
-			if (entries[i].isPatch())
-				return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Creates IUs and artifact descriptors for the JRE.  The resulting IUs are added
-	 * to the given set, and the resulting artifact descriptor, if any, is returned.
-	 * If the jreLocation is <code>null</code>, default information is generated.
-	 */
-	/**
-	 * @deprecated moved to JREAction
-	 */
-	public static IArtifactDescriptor createJREData(File jreLocation, Set resultantIUs) {
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		iu.setSingleton(false);
-		String id = "a.jre"; //$NON-NLS-1$
-		Version version = DEFAULT_JRE_VERSION;
-		iu.setId(id);
-		iu.setVersion(version);
-		iu.setTouchpointType(TOUCHPOINT_NATIVE);
-
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configId = "config." + id;//$NON-NLS-1$
-		cu.setId(configId);
-		cu.setVersion(version);
-		cu.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, id, new VersionRange(version, true, Version.MAX_VERSION, true), null, false, false)});
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {createSelfCapability(configId, version)});
-		cu.setTouchpointType(TOUCHPOINT_NATIVE);
-		Map touchpointData = new HashMap();
-
-		if (jreLocation == null || !jreLocation.exists()) {
-			//set some reasonable defaults
-			iu.setVersion(version);
-			iu.setCapabilities(generateJRECapability(id, version, null));
-			resultantIUs.add(MetadataFactory.createInstallableUnit(iu));
-
-			touchpointData.put("install", ""); //$NON-NLS-1$ //$NON-NLS-2$
-			cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-			resultantIUs.add(MetadataFactory.createInstallableUnit(cu));
-			return null;
-		}
-		generateJREIUData(iu, id, version, jreLocation);
-
-		//Generate artifact for JRE
-		IArtifactKey key = new ArtifactKey(BINARY_ARTIFACT_CLASSIFIER, id, version);
-		iu.setArtifacts(new IArtifactKey[] {key});
-		resultantIUs.add(MetadataFactory.createInstallableUnit(iu));
-
-		//Create config info for the CU
-		String configurationData = "unzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		touchpointData.put("install", configurationData); //$NON-NLS-1$
-		String unConfigurationData = "cleanupzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		touchpointData.put("uninstall", unConfigurationData); //$NON-NLS-1$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		resultantIUs.add(MetadataFactory.createInstallableUnit(cu));
-
-		//Create the artifact descriptor
-		return createArtifactDescriptor(key, jreLocation, false, true);
-	}
-
-	public static ArtifactKey createLauncherArtifactKey(String id, Version version) {
-		return new ArtifactKey(BINARY_ARTIFACT_CLASSIFIER, id, version);
-	}
-
-	/**
-	 * Creates IUs and artifacts for the Launcher executable. The resulting IUs are added
-	 * to the given set, and the resulting artifact descriptor is returned.
-	 * @deprecated use the EquinoxExecutablesAction instead
-	 */
-	public static IArtifactDescriptor createLauncherIU(File launcher, String configurationFlavor, Set resultantIUs) {
-		if (launcher == null || !launcher.exists())
-			return null;
-
-		//Create the IU
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		iu.setSingleton(true);
-		String launcherId = LAUNCHER_ID_PREFIX + '_' + launcher.getName();
-		iu.setId(launcherId);
-		iu.setVersion(LAUNCHER_VERSION);
-
-		IArtifactKey key = createLauncherArtifactKey(launcherId, LAUNCHER_VERSION);
-		iu.setArtifacts(new IArtifactKey[] {key});
-		iu.setCapabilities(new IProvidedCapability[] {createSelfCapability(launcherId, LAUNCHER_VERSION)});
-		iu.setTouchpointType(TOUCHPOINT_NATIVE);
-		resultantIUs.add(MetadataFactory.createInstallableUnit(iu));
-
-		//Create the CU
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = configurationFlavor + launcherId;
-		cu.setId(configUnitId);
-		cu.setVersion(LAUNCHER_VERSION);
-		cu.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, launcherId, new VersionRange(LAUNCHER_VERSION, true, Version.MAX_VERSION, true), null, false, false)});
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {createSelfCapability(configUnitId, LAUNCHER_VERSION)});
-		cu.setTouchpointType(TOUCHPOINT_NATIVE);
-		Map touchpointData = new HashMap();
-		String configurationData = "unzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		EnvironmentInfo info = (EnvironmentInfo) ServiceHelper.getService(Activator.getContext(), EnvironmentInfo.class.getName());
-		if (!info.getOS().equals(org.eclipse.osgi.service.environment.Constants.OS_WIN32)) {
-			if (info.getOS().equals(org.eclipse.osgi.service.environment.Constants.OS_MACOSX)) {
-				configurationData += " chmod(targetDir:${installFolder}/Eclipse.app/Contents/MacOS, targetFile:eclipse, permissions:755);"; //$NON-NLS-1$
-				generateLauncherSetter("Eclipse", launcherId, LAUNCHER_VERSION, "macosx", null, null, resultantIUs); //$NON-NLS-1$//$NON-NLS-2$
-			} else
-				configurationData += " chmod(targetDir:${installFolder}, targetFile:" + launcher.getName() + ", permissions:755);"; //$NON-NLS-1$ //$NON-NLS-2$
-		} else {
-			generateLauncherSetter("eclipse", launcherId, LAUNCHER_VERSION, "win32", null, null, resultantIUs); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		touchpointData.put("install", configurationData); //$NON-NLS-1$
-		String unConfigurationData = "cleanupzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		touchpointData.put("uninstall", unConfigurationData); //$NON-NLS-1$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		resultantIUs.add(MetadataFactory.createInstallableUnitFragment(cu));
-
-		//Create the artifact descriptor
-		return createArtifactDescriptor(key, launcher, false, true);
-	}
-
-	/**
-	 * @deprecated moved to EquinoxExecutablesAction
-	 */
-	public static IInstallableUnit generateLauncherSetter(String launcherName, String iuId, Version version, String os, String ws, String arch, Set result) {
-		InstallableUnitDescription iud = new MetadataFactory.InstallableUnitDescription();
-		iud.setId(iuId + '.' + launcherName);
-		iud.setVersion(version);
-		iud.setTouchpointType(MetadataGeneratorHelper.TOUCHPOINT_OSGI);
-		iud.setCapabilities(new IProvidedCapability[] {createSelfCapability(iuId + '.' + launcherName, version)});
-
-		if (os != null || ws != null || arch != null) {
-			String filterOs = os != null ? "(osgi.os=" + os + ")" : ""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			String filterWs = ws != null ? "(osgi.ws=" + ws + ")" : ""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			String filterArch = arch != null ? "(osgi.arch=" + arch + ")" : ""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			iud.setFilter("(& " + filterOs + filterWs + filterArch + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		Map touchpointData = new HashMap();
-		touchpointData.put("configure", "setLauncherName(name:" + launcherName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		touchpointData.put("unconfigure", "setLauncherName()"); //$NON-NLS-1$ //$NON-NLS-2$
-		iud.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-
-		IInstallableUnit iu = MetadataFactory.createInstallableUnit(iud);
-		result.add(iu);
-		return iu;
-	}
-
-	public static IProvidedCapability createSelfCapability(String installableUnitId, Version installableUnitVersion) {
-		return MetadataFactory.createProvidedCapability(IU_NAMESPACE, installableUnitId, installableUnitVersion);
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static String createUnconfigScript(GeneratorBundleInfo unconfigInfo, boolean isBundleFragment) {
-		if (unconfigInfo == null)
-			return ""; //$NON-NLS-1$
-		String unconfigScript = "";//$NON-NLS-1$
-		if (!isBundleFragment && unconfigInfo.getStartLevel() != BundleInfo.NO_LEVEL) {
-			unconfigScript += "setStartLevel(startLevel:" + BundleInfo.NO_LEVEL + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		if (!isBundleFragment && unconfigInfo.isMarkedAsStarted()) {
-			unconfigScript += "markStarted(started: false);"; //$NON-NLS-1$
-		}
-
-		if (unconfigInfo.getSpecialUnconfigCommands() != null) {
-			unconfigScript += unconfigInfo.getSpecialUnconfigCommands();
-		}
-		return unconfigScript;
-
-	}
-
-	/**
-	 * @deprecated moved to JREAction
-	 */
-	private static IProvidedCapability[] generateJRECapability(String installableUnitId, Version installableUnitVersion, InputStream profileStream) {
-		if (profileStream == null) {
-			//use the 1.6 profile stored in the generator bundle
-			try {
-				profileStream = Activator.getContext().getBundle().getEntry("JavaSE-1.6.profile").openStream(); //$NON-NLS-1$
-			} catch (IOException e) {
-				throw new RuntimeException(e);
-			}
-		}
-		Properties p = new Properties();
-		try {
-			p.load(profileStream);
-			ManifestElement[] jrePackages = ManifestElement.parseHeader("org.osgi.framework.system.packages", (String) p.get("org.osgi.framework.system.packages")); //$NON-NLS-1$ //$NON-NLS-2$
-			IProvidedCapability[] exportedPackageAsCapabilities = new IProvidedCapability[jrePackages.length + 1];
-			exportedPackageAsCapabilities[0] = createSelfCapability(installableUnitId, installableUnitVersion);
-			for (int i = 1; i <= jrePackages.length; i++) {
-				exportedPackageAsCapabilities[i] = MetadataFactory.createProvidedCapability(CAPABILITY_NS_JAVA_PACKAGE, jrePackages[i - 1].getValue(), null);
-			}
-			return exportedPackageAsCapabilities;
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (BundleException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} finally {
-			if (profileStream != null) {
-				try {
-					profileStream.close();
-				} catch (IOException e) {
-					//ignore secondary failure
-				}
-			}
-		}
-		return new IProvidedCapability[0];
-	}
-
-	/**
-	 * @deprecated moved to JREAction
-	 */
-	private static void generateJREIUData(InstallableUnitDescription iu, String installableUnitId, Version installableUnitVersion, File jreLocation) {
-		//Look for a JRE profile file to set version and capabilities
-		File[] profiles = jreLocation.listFiles(new FileFilter() {
-			public boolean accept(File pathname) {
-				return pathname.getAbsolutePath().endsWith(".profile"); //$NON-NLS-1$
-			}
-		});
-		if (profiles.length != 1) {
-			iu.setVersion(DEFAULT_JRE_VERSION);
-			iu.setCapabilities(generateJRECapability(installableUnitId, installableUnitVersion, null));
-			return;
-		}
-		String profileName = profiles[0].getAbsolutePath().substring(profiles[0].getAbsolutePath().lastIndexOf('/'));
-		Version version = DEFAULT_JRE_VERSION;
-		//TODO Find a better way to determine JRE version
-		if (profileName.indexOf("1.6") > 0) { //$NON-NLS-1$
-			version = Version.create("1.6"); //$NON-NLS-1$
-		} else if (profileName.indexOf("1.5") > 0) { //$NON-NLS-1$
-			version = Version.create("1.5"); //$NON-NLS-1$
-		} else if (profileName.indexOf("1.4") > 0) { //$NON-NLS-1$
-			version = Version.create("1.4"); //$NON-NLS-1$
-		}
-		iu.setVersion(version);
-		try {
-			iu.setCapabilities(generateJRECapability(installableUnitId, installableUnitVersion, new FileInputStream(profiles[0])));
-		} catch (FileNotFoundException e) {
-			//Shouldn't happen, but ignore and fall through to use default
-		}
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	public static IMatchExpression getFilter(FeatureEntry entry) {
-		StringBuffer result = new StringBuffer();
-		result.append("(&"); //$NON-NLS-1$
-		if (entry.getFilter() != null)
-			result.append(entry.getFilter());
-		if (entry.getOS() != null)
-			result.append("(osgi.os=" + entry.getOS() + ')');//$NON-NLS-1$
-		if (entry.getWS() != null)
-			result.append("(osgi.ws=" + entry.getWS() + ')');//$NON-NLS-1$
-		if (entry.getArch() != null)
-			result.append("(osgi.arch=" + entry.getArch() + ')');//$NON-NLS-1$
-		if (entry.getNL() != null)
-			result.append("(osgi.nl=" + entry.getNL() + ')');//$NON-NLS-1$
-		if (result.length() == 2)
-			return null;
-		result.append(')');
-		return InstallableUnit.parseFilter(result.toString());
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	public static String getTransformedId(String original, boolean isPlugin, boolean isGroup) {
-		return (isPlugin ? original : original + (isGroup ? ".feature.group" : ".feature.jar")); //$NON-NLS-1$//$NON-NLS-2$
-	}
-
-	/**
-	 * @deprecated moved to FeaturesAction
-	 */
-	public static VersionRange getVersionRange(FeatureEntry entry) {
-		String versionSpec = entry.getVersion();
-		if (versionSpec == null)
-			return VersionRange.emptyRange;
-		Version version = Version.create(versionSpec);
-		if (version.equals(Version.emptyVersion))
-			return VersionRange.emptyRange;
-		if (!entry.isRequires())
-			return new VersionRange(version, true, version, true);
-		String match = entry.getMatch();
-
-		org.osgi.framework.Version osgiVersion = toOSGiVersion(version);
-		if (match == null || match.equals("compatible")) { //$NON-NLS-1$
-			Version upper = Version.createOSGi(osgiVersion.getMajor() + 1, 0, 0);
-			return new VersionRange(version, true, upper, false);
-		}
-		if (match.equals("perfect")) //$NON-NLS-1$
-			return new VersionRange(version, true, version, true);
-		if (match.equals("equivalent")) { //$NON-NLS-1$
-			Version upper = Version.createOSGi(osgiVersion.getMajor(), osgiVersion.getMinor() + 1, 0);
-			return new VersionRange(version, true, upper, false);
-		}
-		if (match.equals("greaterOrEqual")) //$NON-NLS-1$
-			return new VersionRange(version, true, new VersionRange(null).getMaximum(), true);
-		return null;
-	}
-
-	/**
-	 * @deprecated moved to AdviceFileAdvice
-	 */
-	public static Map getBundleAdvice(String bundleLocation, String suffixLocation) {
-		if (bundleLocation == null)
-			return Collections.EMPTY_MAP;
-
-		File bundle = new File(bundleLocation);
-		if (!bundle.exists())
-			return Collections.EMPTY_MAP;
-
-		ZipFile jar = null;
-		InputStream stream = null;
-		if (bundle.isDirectory()) {
-			File adviceFile = new File(bundle, suffixLocation);
-			if (adviceFile.exists()) {
-				try {
-					stream = new BufferedInputStream(new FileInputStream(adviceFile));
-				} catch (IOException e) {
-					return Collections.EMPTY_MAP;
-				}
-			}
-		} else if (bundle.isFile()) {
-			try {
-				jar = new ZipFile(bundle);
-				ZipEntry entry = jar.getEntry(suffixLocation);
-				if (entry != null)
-					stream = new BufferedInputStream(jar.getInputStream(entry));
-			} catch (IOException e) {
-				if (jar != null)
-					try {
-						jar.close();
-					} catch (IOException e1) {
-						//boo
-					}
-				return Collections.EMPTY_MAP;
-			}
-		}
-
-		Properties advice = null;
-		if (stream != null) {
-			try {
-				advice = new Properties();
-				advice.load(stream);
-			} catch (IOException e) {
-				return Collections.EMPTY_MAP;
-			} finally {
-				try {
-					stream.close();
-				} catch (IOException e) {
-					//boo
-				}
-			}
-		}
-
-		if (jar != null) {
-			try {
-				jar.close();
-			} catch (IOException e) {
-				// boo
-			}
-		}
-
-		return advice != null ? advice : Collections.EMPTY_MAP;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static boolean isOptional(ImportPackageSpecification importedPackage) {
-		if (importedPackage.getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_DYNAMIC) || importedPackage.getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_OPTIONAL))
-			return true;
-		return false;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static String toManifestString(Map p) {
-		if (p == null)
-			return null;
-		Collection properties = p.entrySet();
-		StringBuffer result = new StringBuffer();
-		for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
-			Map.Entry aProperty = (Map.Entry) iterator.next();
-			if (aProperty.getKey().equals(BundleDescriptionFactory.BUNDLE_FILE_KEY))
-				continue;
-			result.append(aProperty.getKey()).append(": ").append(aProperty.getValue()).append('\n'); //$NON-NLS-1$
-		}
-		return result.toString();
-	}
-
-	/**
-	 * Returns a URI corresponding to the given URL in string form, or null
-	 * if a well formed URI could not be created.
-	 */
-	private static URI toURIOrNull(String url) {
-		if (url == null)
-			return null;
-		try {
-			return URIUtil.fromString(url);
-		} catch (URISyntaxException e) {
-			return null;
-		}
-	}
-
-	// Return a map from locale to property set for the manifest localizations
-	// from the given bundle directory and given bundle localization path/name
-	// manifest property value.
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	private static Map getManifestLocalizations(Map manifest, File bundleLocation) {
-		Map localizations;
-		Locale defaultLocale = null; // = Locale.ENGLISH; // TODO: get this from GeneratorInfo
-		String[] bundleManifestValues = getManifestCachedValues(manifest);
-		String bundleLocalization = bundleManifestValues[BUNDLE_LOCALIZATION_INDEX];
-
-		if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && //$NON-NLS-1$
-				bundleLocation.isFile()) {
-			localizations = LocalizationHelper.getJarPropertyLocalizations(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-			//localizations = getJarManifestLocalization(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-		} else {
-			localizations = LocalizationHelper.getDirPropertyLocalizations(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-			// localizations = getDirManifestLocalization(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-		}
-
-		return localizations;
-	}
-
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	public static String[] getManifestCachedValues(Map manifest) {
-		String[] cachedValues = new String[BUNDLE_LOCALIZED_PROPERTIES.length + 1];
-		for (int j = 0; j < MetadataGeneratorHelper.BUNDLE_LOCALIZED_PROPERTIES.length; j++) {
-			String value = (String) manifest.get(BUNDLE_LOCALIZED_PROPERTIES[j]);
-			if (value != null && value.length() > 1 && value.charAt(0) == '%') {
-				cachedValues[j] = value.substring(1);
-			}
-		}
-		String localizationFile = (String) manifest.get(org.osgi.framework.Constants.BUNDLE_LOCALIZATION);
-		cachedValues[BUNDLE_LOCALIZATION_INDEX] = (localizationFile != null ? localizationFile : DEFAULT_BUNDLE_LOCALIZATION);
-		return cachedValues;
-	}
-
-	// Return a map from locale to property set for the manifest localizations
-	// from the given bundle directory and given bundle localization path/name
-	// manifest property value.
-	/**
-	 * @deprecated moved to BundlesAction
-	 */
-	public static Map getHostLocalizations(File bundleLocation, String[] hostBundleManifestValues) {
-		Map localizations;
-		Locale defaultLocale = null; // = Locale.ENGLISH; // TODO: get this from GeneratorInfo
-		String hostBundleLocalization = hostBundleManifestValues[BUNDLE_LOCALIZATION_INDEX];
-
-		if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && //$NON-NLS-1$
-				bundleLocation.isFile()) {
-			localizations = LocalizationHelper.getJarPropertyLocalizations(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-			//localizations = getJarManifestLocalization(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-		} else {
-			localizations = LocalizationHelper.getDirPropertyLocalizations(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-			// localizations = getDirManifestLocalization(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-		}
-
-		return localizations;
-	}
-
-	/**
-	 * Convert <code>version</code> into its OSGi equivalent if possible.
-	 *
-	 * @param version The version to convert. Can be <code>null</code>
-	 * @return The converted version or <code>null</code> if the argument was <code>null</code>
-	 * @throws UnsupportedOperationException if the version could not be converted into an OSGi version
-	 */
-	public static org.osgi.framework.Version toOSGiVersion(Version version) {
-		if (version == null)
-			return null;
-		if (version == Version.emptyVersion)
-			return org.osgi.framework.Version.emptyVersion;
-		if (version == Version.MAX_VERSION)
-			return new org.osgi.framework.Version(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE);
-
-		BasicVersion bv = (BasicVersion) version;
-		return new org.osgi.framework.Version(bv.getMajor(), bv.getMinor(), bv.getMicro(), bv.getQualifier());
-	}
-
-	/**
-	 * Create an omni version from an OSGi <code>version</code>.
-	 * @param version The OSGi version. Can be <code>null</code>.
-	 * @return The created omni version
-	 */
-	public static Version fromOSGiVersion(org.osgi.framework.Version version) {
-		if (version == null)
-			return null;
-		if (version.getMajor() == Integer.MAX_VALUE && version.getMicro() == Integer.MAX_VALUE && version.getMicro() == Integer.MAX_VALUE)
-			return Version.MAX_VERSION;
-		return Version.createOSGi(version.getMajor(), version.getMinor(), version.getMicro(), version.getQualifier());
-	}
-
-	public static org.eclipse.osgi.service.resolver.VersionRange toOSGiVersionRange(VersionRange range) {
-		if (range.equals(VersionRange.emptyRange))
-			return org.eclipse.osgi.service.resolver.VersionRange.emptyRange;
-		return new org.eclipse.osgi.service.resolver.VersionRange(toOSGiVersion(range.getMinimum()), range.getIncludeMinimum(), toOSGiVersion(range.getMaximum()), range.getIncludeMinimum());
-	}
-
-	public static VersionRange fromOSGiVersionRange(org.eclipse.osgi.service.resolver.VersionRange range) {
-		if (range.equals(org.eclipse.osgi.service.resolver.VersionRange.emptyRange))
-			return VersionRange.emptyRange;
-		return new VersionRange(fromOSGiVersion(range.getMinimum()), range.getIncludeMinimum(), fromOSGiVersion(range.getMaximum()), range.getIncludeMaximum());
-	}
-};
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/URLEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/URLEntry.java
deleted file mode 100644
index 8e928f6..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/URLEntry.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.provisional.p2.metadata.generator;
-
-public class URLEntry {
-	private String annotation;
-	private String url;
-
-	public URLEntry() {
-	}
-
-	public URLEntry(String url, String annotation) {
-		this.url = url;
-		this.annotation = annotation;
-	}
-
-	public void setAnnotation(String annotation) {
-		this.annotation = annotation;
-	}
-
-	public String getAnnotation() {
-		return annotation;
-	}
-
-	public void setURL(String url) {
-		this.url = url;
-	}
-
-	public String getURL() {
-		return url;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java
deleted file mode 100644
index 3301c38..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.ant;
-
-import java.net.URISyntaxException;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.eclipse.core.runtime.URIUtil;
-import org.eclipse.equinox.internal.p2.metadata.generator.EclipseGeneratorApplication;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.EclipseInstallGeneratorInfoProvider;
-import org.eclipse.equinox.internal.provisional.p2.metadata.generator.IncrementalGenerator;
-
-/**
- * An Ant task to call the p2 Metadata Generator application.
- * 
- * @since 1.0
- */
-public class GeneratorTask extends Task {
-
-	protected EclipseInstallGeneratorInfoProvider provider = null;
-	protected EclipseGeneratorApplication generator = null;
-
-	private String mode;
-
-	/* (non-Javadoc)
-	 * @see org.apache.tools.ant.Task#execute()
-	 */
-	public void execute() throws BuildException {
-		try {
-			IncrementalGenerator incremental = new IncrementalGenerator();
-			incremental.setMode(mode);
-			incremental.run(generator, provider);
-
-			if (!"incremental".equals(mode)) { //$NON-NLS-1$
-				provider = null;
-				generator = null;
-			}
-		} catch (Exception e) {
-			throw new BuildException(TaskMessages.exception_errorOccurredCallingGenerator, e);
-		}
-	}
-
-	public void setAppend(String value) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setAppend(Boolean.valueOf(value).booleanValue());
-	}
-
-	public void setArtifactRepository(String location) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		try {
-			generator.setArtifactLocation(URIUtil.fromString(location));
-		} catch (URISyntaxException e) {
-			throw new IllegalArgumentException("Specified artifact repository location (" + location + ") is not a valid URI. ");
-		}
-	}
-
-	public void setArtifactRepositoryName(String name) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setArtifactRepositoryName(name);
-	}
-
-	public void setBase(String value) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setBase(value);
-	}
-
-	public void setBundles(String value) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setBundles(value);
-	}
-
-	public void setCompress(String value) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setCompress(value);
-	}
-
-	public void setConfig(String value) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setOperation("-config", value); //$NON-NLS-1$
-	}
-
-	public void setInplace(String value) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setOperation("-inplace", value); //$NON-NLS-1$
-	}
-
-	public void setSource(String location) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setOperation("-source", location); //$NON-NLS-1$
-	}
-
-	public void setUpdateSite(String value) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setOperation("-updateSite", value); //$NON-NLS-1$
-	}
-
-	public void setExe(String value) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setExecutableLocation(value);
-	}
-
-	public void setFeatures(String value) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setFeatures(value);
-	}
-
-	public void setFlavor(String flavor) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setFlavor(flavor);
-	}
-
-	public void setLauncherConfig(String launcherConfig) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setLauncherConfig(launcherConfig);
-	}
-
-	public void setMetadataRepository(String location) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		try {
-			generator.setMetadataLocation(URIUtil.fromString(location));
-		} catch (URISyntaxException e) {
-			throw new IllegalArgumentException("Specified metadata repository location (" + location + ") is not a valid URI. ");
-		}
-	}
-
-	public void setMetadataRepositoryName(String name) {
-		if (generator == null)
-			generator = new EclipseGeneratorApplication();
-		generator.setMetadataRepositoryName(name);
-	}
-
-	public void setNoDefaultIUs(String value) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setAddDefaultIUs(!Boolean.valueOf(value).booleanValue());
-	}
-
-	public void setP2OS(String value) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setOS(value);
-	}
-
-	public void setProductFile(String file) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setProductFile(file);
-	}
-
-	public void setPublishArtifactRepository(String value) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setPublishArtifactRepository(Boolean.valueOf(value).booleanValue());
-	}
-
-	public void setPublishArtifacts(String value) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setPublishArtifacts(Boolean.valueOf(value).booleanValue());
-	}
-
-	public void setRoot(String root) {
-		if (root == null || root.startsWith("${")) //$NON-NLS-1$
-			return;
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setRootId(root);
-	}
-
-	public void setRootVersion(String rootVersion) {
-		if (rootVersion == null || rootVersion.startsWith("${")) //$NON-NLS-1$
-			return;
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setRootVersion(rootVersion);
-	}
-
-	public void setMode(String mode) {
-		this.mode = mode;
-	}
-
-	public void setVersionAdvice(String advice) {
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		provider.setVersionAdvice(advice);
-	}
-
-	public void setSite(String site) {
-		if (site == null || site.startsWith("${")) //$NON-NLS-1$
-			return;
-		if (provider == null)
-			provider = new EclipseInstallGeneratorInfoProvider();
-		try {
-			provider.setSiteLocation(URIUtil.fromString(site));
-		} catch (URISyntaxException e) {
-			throw new IllegalArgumentException("The specified location (" + site + ") is not a valid URI."); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/TaskMessages.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/TaskMessages.java
deleted file mode 100644
index b9fb849..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/TaskMessages.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.metadata.generator.ant;
-
-import org.eclipse.osgi.util.NLS;
-
-public class TaskMessages extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.metadata.generator.ant.messages";//$NON-NLS-1$
-
-	public static String exception_errorOccurredCallingGenerator;
-
-	static {
-		// load message values from bundle file
-		NLS.initializeMessages(BUNDLE_NAME, TaskMessages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/messages.properties
deleted file mode 100644
index d43b904..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/messages.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-exception_errorOccurredCallingGenerator = An error occurred when calling generator.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/.externalToolBuilders/New_Builder (1).launch b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/.externalToolBuilders/New_Builder (1).launch
new file mode 100644
index 0000000..78e9ab0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/.externalToolBuilders/New_Builder (1).launch	
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
+<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
+<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.equinox.p2.metadata.repository"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.equinox.p2.metadata.repository/buildAntTasks.xml}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
+<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
+</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/.project b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/.project
index 920d1f2..20cdc1b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/.project
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/.project
@@ -36,7 +36,7 @@
 			<arguments>
 				<dictionary>
 					<key>LaunchConfigHandle</key>
-					<value><project>/.externalToolBuilders/org.eclipse.equinox.p2.metadata.reposiroy buildAntTasks.xml.launch</value>
+					<value><project>/.externalToolBuilders/New_Builder (1).launch</value>
 				</dictionary>
 			</arguments>
 		</buildCommand>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/META-INF/MANIFEST.MF
index 6bf168c..114276c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/META-INF/MANIFEST.MF
@@ -2,25 +2,23 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.metadata.repository;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.2.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.metadata.repository.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.equinox.internal.p2.metadata.repository;
   x-friends:="org.eclipse.equinox.p2.engine,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.publisher,
    org.eclipse.equinox.p2.reconciler.dropins,
    org.eclipse.equinox.p2.ui,
    org.eclipse.equinox.p2.updatesite,
    org.eclipse.equinox.p2.extensionlocation,
    org.eclipse.equinox.p2.repository.tools",
- org.eclipse.equinox.internal.p2.metadata.repository.io;x-friends:="org.eclipse.equinox.p2.engine"
+ org.eclipse.equinox.internal.p2.metadata.repository.io;x-friends:="org.eclipse.equinox.p2.engine",
+ org.eclipse.equinox.p2.metadata.io
 Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.equinox.registry,
- org.eclipse.ecf.filetransfer;bundle-version="2.0.0"
+ org.eclipse.equinox.registry
 Import-Package: javax.xml.parsers, 
- org.eclipse.ecf.core.util,
  org.eclipse.equinox.internal.p2.core.helpers,
  org.eclipse.equinox.internal.p2.metadata,
  org.eclipse.equinox.internal.p2.metadata.index,
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/build.properties
index ffda852..cd5634f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/pom.xml
index af77333..5533aae 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/pom.xml
@@ -11,7 +11,7 @@
 	</parent>
 	<groupId>org.eclipse</groupId>
 	<artifactId>org.eclipse.equinox.p2.metadata.repository</artifactId>
-	<version>1.1.0.qualifier</version>
+	<version>1.2.0.qualifier</version>
 	<packaging>eclipse-plugin</packaging>
 	<build>
 		<plugins>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/Activator.java
index 1d92ba7..e8d35ea 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java
index f10a0a0..0201e4e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,8 +21,7 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
 import org.eclipse.equinox.internal.p2.persistence.CompositeRepositoryIO;
 import org.eclipse.equinox.internal.p2.persistence.CompositeRepositoryState;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.core.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.index.IIndex;
 import org.eclipse.equinox.p2.metadata.index.IIndexProvider;
@@ -36,7 +35,10 @@ import org.eclipse.osgi.util.NLS;
 public class CompositeMetadataRepository extends AbstractMetadataRepository implements ICompositeRepository<IInstallableUnit>, IIndexProvider<IInstallableUnit> {
 
 	static final public String REPOSITORY_TYPE = CompositeMetadataRepository.class.getName();
-	public static final String PI_REPOSITORY_TYPE = "compositeMetadataRepository"; //$NON-NLS-1$
+	static final public String PI_REPOSITORY_TYPE = "compositeMetadataRepository"; //$NON-NLS-1$
+	static final public String PROP_ATOMIC_LOADING = "p2.atomic.composite.loading"; //$NON-NLS-1$
+	static final public boolean ATOMIC_LOADING_DEFAULT = false;
+
 	static final private Integer REPOSITORY_VERSION = new Integer(1);
 	static final public String XML_EXTENSION = ".xml"; //$NON-NLS-1$
 	static final private String JAR_EXTENSION = ".jar"; //$NON-NLS-1$
@@ -47,6 +49,7 @@ public class CompositeMetadataRepository extends AbstractMetadataRepository impl
 	// keep a list of the repositories that we have successfully loaded
 	private List<IMetadataRepository> loadedRepos = new ArrayList<IMetadataRepository>();
 	private IMetadataRepositoryManager manager;
+	private IPool<IInstallableUnit> iuPool = new WeakPool<IInstallableUnit>();
 
 	/**
 	 * Create a Composite repository in memory.
@@ -89,21 +92,25 @@ public class CompositeMetadataRepository extends AbstractMetadataRepository impl
 		return isLocal();
 	}
 
-	CompositeMetadataRepository(IMetadataRepositoryManager manager, URI location, String name, Map<String, String> properties) {
-		super(manager.getAgent(), name == null ? (location != null ? location.toString() : "") : name, REPOSITORY_TYPE, REPOSITORY_VERSION.toString(), location, null, null, properties); //$NON-NLS-1$
-		this.manager = manager;
-		//when creating a repository, we must ensure it exists on disk so a subsequent load will succeed
-		save();
-	}
-
 	/*
 	 * This is only called by the parser when loading a repository.
 	 */
-	CompositeMetadataRepository(IMetadataRepositoryManager manager, CompositeRepositoryState state) {
+	CompositeMetadataRepository(IMetadataRepositoryManager manager, CompositeRepositoryState state, IProgressMonitor monitor) throws ProvisionException {
 		super(manager.getAgent(), state.getName(), state.getType(), state.getVersion(), state.getLocation(), state.getDescription(), state.getProvider(), state.getProperties());
 		this.manager = manager;
-		for (int i = 0; i < state.getChildren().length; i++)
-			addChild(state.getChildren()[i], false);
+		SubMonitor sub = SubMonitor.convert(monitor, 100 * state.getChildren().length);
+		List<URI> repositoriesToBeRemovedOnFailure = new ArrayList<URI>();
+		boolean failOnChildFailure = shouldFailOnChildFailure(state);
+		for (URI child : state.getChildren())
+			addChild(child, false, sub.newChild(100), failOnChildFailure, repositoriesToBeRemovedOnFailure);
+
+	}
+
+	CompositeMetadataRepository(IMetadataRepositoryManager manager, URI location, String name, Map<String, String> properties) {
+		super(manager.getAgent(), name == null ? (location != null ? location.toString() : "") : name, REPOSITORY_TYPE, REPOSITORY_VERSION.toString(), location, null, null, properties); //$NON-NLS-1$
+		this.manager = manager;
+		//when creating a repository, we must ensure it exists on disk so a subsequent load will succeed
+		save();
 	}
 
 	/*
@@ -140,28 +147,42 @@ public class CompositeMetadataRepository extends AbstractMetadataRepository impl
 		}
 	}
 
-	private void addChild(URI childURI, boolean save) {
+	//successfully loaded repo will be added to the list repositoriesToBeRemovedOnFailure if the list is not null and the repo wasn't previously loaded
+	private void addChild(URI childURI, boolean save, IProgressMonitor monitor, boolean propagateException, List<URI> repositoriesToBeRemovedOnFailure) throws ProvisionException {
+		SubMonitor sub = SubMonitor.convert(monitor);
 		URI absolute = URIUtil.makeAbsolute(childURI, getLocation());
-		if (childrenURIs.contains(childURI) || childrenURIs.contains(absolute))
+		if (childrenURIs.contains(childURI) || childrenURIs.contains(absolute)) {
+			sub.done();
 			return;
+
+		}
 		// always add the URI to the list of child URIs (even if we can't load it later)
 		childrenURIs.add(childURI);
 		if (save)
 			save();
 		try {
 			boolean currentLoaded = getManager().contains(absolute);
-			IMetadataRepository currentRepo = getManager().loadRepository(absolute, null);
+			IMetadataRepository currentRepo = getManager().loadRepository(absolute, sub);
 			if (!currentLoaded) {
 				//set enabled to false so repositories do not polled twice
 				getManager().setEnabled(absolute, false);
 				//set repository to system to hide from users
 				getManager().setRepositoryProperty(absolute, IRepository.PROP_SYSTEM, String.valueOf(true));
+				if (propagateException)
+					repositoriesToBeRemovedOnFailure.add(absolute);
 			}
+			currentRepo.compress(iuPool); // Share IUs across this CompositeMetadataRepository
 			// we successfully loaded the repo so remember it
 			loadedRepos.add(currentRepo);
+
 		} catch (ProvisionException e) {
 			//repository failed to load. fall through
 			LogHelper.log(e);
+			if (propagateException) {
+				removeFromRepoManager(repositoriesToBeRemovedOnFailure);
+				String msg = NLS.bind(Messages.io_failedRead, getLocation());
+				throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, e));
+			}
 		}
 	}
 
@@ -169,7 +190,11 @@ public class CompositeMetadataRepository extends AbstractMetadataRepository impl
 	 * @see org.eclipse.equinox.p2.repository.ICompositeRepository#addChild(java.net.URI)
 	 */
 	public void addChild(URI childURI) {
-		addChild(childURI, true);
+		try {
+			addChild(childURI, true, null, false, null);
+		} catch (ProvisionException e) {
+			//already logged
+		}
 	}
 
 	/* (non-Javadoc)
@@ -371,4 +396,24 @@ public class CompositeMetadataRepository extends AbstractMetadataRepository impl
 		return null;
 	}
 
+	private void removeFromRepoManager(List<URI> currentLoadedRepositories) {
+		if (currentLoadedRepositories == null)
+			return;
+		for (URI loadedChild : currentLoadedRepositories) {
+			manager.removeRepository(loadedChild);
+		}
+	}
+
+	private boolean shouldFailOnChildFailure(CompositeRepositoryState state) {
+		Map<String, String> repoProperties = state.getProperties();
+		boolean failOnChildFailure = ATOMIC_LOADING_DEFAULT;
+		if (repoProperties != null) {
+			String value = repoProperties.get(PROP_ATOMIC_LOADING);
+			if (value != null) {
+				failOnChildFailure = Boolean.valueOf(value).booleanValue();
+			}
+		}
+		return failOnChildFailure;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepositoryFactory.java
index 0c5d3c3..ea0c053 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/CompositeMetadataRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata.repository;
 
-import org.eclipse.equinox.internal.p2.repository.CacheManager;
-
 import java.io.*;
 import java.net.URI;
 import java.util.Map;
@@ -22,6 +20,7 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.Tracing;
 import org.eclipse.equinox.internal.p2.persistence.CompositeRepositoryIO;
 import org.eclipse.equinox.internal.p2.persistence.CompositeRepositoryState;
+import org.eclipse.equinox.internal.p2.repository.CacheManager;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.repository.IRepositoryManager;
 import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
@@ -96,7 +95,7 @@ public class CompositeMetadataRepositoryFactory extends MetadataRepositoryFactor
 			if (!PROTOCOL_FILE.equals(location.getScheme()) && (flags & IRepositoryManager.REPOSITORY_HINT_MODIFIABLE) > 0)
 				return null;
 
-			File localFile = getLocalFile(location, sub.newChild(300));
+			File localFile = getLocalFile(location, sub.newChild(100));
 			InputStream inStream = new BufferedInputStream(new FileInputStream(localFile));
 			JarInputStream jarStream = null;
 			try {
@@ -113,13 +112,14 @@ public class CompositeMetadataRepositoryFactory extends MetadataRepositoryFactor
 						throw new IOException(NLS.bind(Messages.repoMan_invalidLocation, location));
 				}
 				//parse the repository descriptor file
-				sub.setWorkRemaining(100);
+				sub.setWorkRemaining(300);
 				InputStream descriptorStream = jarStream != null ? jarStream : inStream;
 				CompositeRepositoryIO io = new CompositeRepositoryIO();
 				CompositeRepositoryState resultState = io.read(localFile.toURL(), descriptorStream, CompositeMetadataRepository.PI_REPOSITORY_TYPE, sub.newChild(100));
 				if (resultState.getLocation() == null)
 					resultState.setLocation(location);
-				CompositeMetadataRepository result = new CompositeMetadataRepository(getManager(), resultState);
+				// Spending half the time in creating the repo is due to the loading of the children that happens during that period
+				CompositeMetadataRepository result = new CompositeMetadataRepository(getManager(), resultState, sub.newChild(200));
 				if (Tracing.DEBUG_METADATA_PARSING) {
 					time += System.currentTimeMillis();
 					Tracing.debug(debugMsg + "time (ms): " + time); //$NON-NLS-1$ 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/LocalMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/LocalMetadataRepository.java
index 6f848b1..1eff48b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/LocalMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/LocalMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -23,8 +23,7 @@ import org.eclipse.equinox.internal.p2.metadata.*;
 import org.eclipse.equinox.internal.p2.metadata.index.*;
 import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
 import org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.core.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.KeyWithLocale;
 import org.eclipse.equinox.p2.metadata.index.IIndex;
@@ -118,8 +117,9 @@ public class LocalMetadataRepository extends AbstractMetadataRepository implemen
 	@Override
 	public void addReferences(Collection<? extends IRepositoryReference> references) {
 		assertModifiable();
-		repositories.addAll(references);
-		save();
+		// only write out the repository if we made changes
+		if (repositories.addAll(references))
+			save();
 	}
 
 	/* (non-Javadoc)
@@ -303,7 +303,7 @@ public class LocalMetadataRepository extends AbstractMetadataRepository implemen
 				jOutput.putNextEntry(jarEntry);
 				output = jOutput;
 			}
-			super.setProperty(IRepository.PROP_TIMESTAMP, Long.toString(System.currentTimeMillis()));
+			super.setProperty(IRepository.PROP_TIMESTAMP, Long.toString(System.currentTimeMillis()), new NullProgressMonitor());
 			new MetadataRepositoryIO(getProvisioningAgent()).write(this, output);
 		} catch (IOException e) {
 			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_WRITE, "Error saving metadata repository: " + getLocation(), e)); //$NON-NLS-1$
@@ -314,19 +314,24 @@ public class LocalMetadataRepository extends AbstractMetadataRepository implemen
 	 * @see org.eclipse.equinox.p2.repository.spi.AbstractRepository#setProperty(java.lang.String, java.lang.String)
 	 */
 	@Override
-	public String setProperty(String key, String newValue) {
-		String oldValue = null;
-		synchronized (this) {
-			oldValue = super.setProperty(key, newValue);
-			if (oldValue == newValue || (oldValue != null && oldValue.equals(newValue)))
-				return oldValue;
-			save();
+	public String setProperty(String key, String newValue, IProgressMonitor monitor) {
+		try {
+			String oldValue = null;
+			synchronized (this) {
+				oldValue = super.setProperty(key, newValue, monitor);
+				if (oldValue == newValue || (oldValue != null && oldValue.equals(newValue)))
+					return oldValue;
+				save();
+			}
+			//force repository manager to reload this repository because it caches properties
+			MetadataRepositoryManager manager = (MetadataRepositoryManager) getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
+			if (manager.removeRepository(getLocation()))
+				manager.addRepository(this);
+			return oldValue;
+		} finally {
+			if (monitor != null)
+				monitor.done();
 		}
-		//force repository manager to reload this repository because it caches properties
-		MetadataRepositoryManager manager = (MetadataRepositoryManager) getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
-		if (manager.removeRepository(getLocation()))
-			manager.addRepository(this);
-		return oldValue;
 	}
 
 	public IStatus executeBatch(IRunnableWithProgress runnable, IProgressMonitor monitor) {
@@ -356,4 +361,10 @@ public class LocalMetadataRepository extends AbstractMetadataRepository implemen
 		return result;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.repository.metadata.IMetadataRepository#compress(IPool<IInstallableUnit> iuPool)
+	 */
+	public void compress(IPool<IInstallableUnit> iuPool) {
+		units.compress(iuPool);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryComponent.java
index 7cb5c05..0098f25 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryComponent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java
index afd6a7c..6ee813b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,11 +11,6 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata.repository;
 
-import org.eclipse.equinox.p2.repository.IRepositoryReference;
-
-import org.eclipse.equinox.p2.query.QueryUtil;
-
-
 import java.io.*;
 import java.lang.reflect.Constructor;
 import java.net.MalformedURLException;
@@ -32,6 +27,8 @@ import org.eclipse.equinox.internal.p2.persistence.XMLWriter;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.equinox.p2.repository.IRepositoryReference;
 import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
 import org.eclipse.equinox.p2.repository.metadata.spi.AbstractMetadataRepository;
 import org.eclipse.equinox.p2.repository.metadata.spi.AbstractMetadataRepository.RepositoryState;
@@ -62,6 +59,7 @@ public class MetadataRepositoryIO {
 				bufferedInput = new BufferedInputStream(input);
 
 				Parser repositoryParser = new Parser(Activator.getContext(), Activator.ID);
+				repositoryParser.setErrorContext(location.toExternalForm());
 				repositoryParser.parse(input, monitor);
 				IStatus result = repositoryParser.getStatus();
 				switch (result.getSeverity()) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java
index e1afa91..b58f4bb 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,7 +54,7 @@ public class MetadataRepositoryManager extends AbstractRepositoryManager<IInstal
 		if (factory == null)
 			return null;
 		factory.setAgent(agent);
-		return factory.load(location, flags, monitor.newChild(10));
+		return factory.load(location, flags, monitor);
 	}
 
 	protected String getBundleId() {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/SimpleMetadataRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/SimpleMetadataRepositoryFactory.java
index 4f98f6e..a0aff3e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/SimpleMetadataRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/SimpleMetadataRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java
index c07bf3b..d8479c1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/URLMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/MetadataWriter.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/MetadataWriter.java
index 98ff47f..2d7ae7d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/MetadataWriter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/MetadataWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ import org.eclipse.equinox.internal.p2.persistence.XMLWriter;
 import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.metadata.expression.*;
 
-public abstract class MetadataWriter extends XMLWriter implements XMLConstants {
+public class MetadataWriter extends XMLWriter implements XMLConstants {
 
 	public MetadataWriter(OutputStream output, ProcessingInstruction[] piElements) throws UnsupportedEncodingException {
 		super(output, piElements);
@@ -35,8 +35,8 @@ public abstract class MetadataWriter extends XMLWriter implements XMLConstants {
 	 * @param units An Iterator of {@link IInstallableUnit}.
 	 * @param size The number of units to write
 	 */
-	protected void writeInstallableUnits(Iterator<IInstallableUnit> units, int size) {
-		if (size == 0)
+	public void writeInstallableUnits(Iterator<IInstallableUnit> units, int size) {
+		if (!units.hasNext())
 			return;
 		start(INSTALLABLE_UNITS_ELEMENT);
 
@@ -104,7 +104,7 @@ public abstract class MetadataWriter extends XMLWriter implements XMLConstants {
 					return false;
 			}
 		}
-		
+
 		for (IRequirement r : iu.getMetaRequirements())
 			if (r.getMax() == 0 || !RequiredCapability.isSimpleRequirement(r.getMatches()))
 				return false;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/XMLConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/XMLConstants.java
index 014f1b8..fd7e3ac 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/XMLConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/io/XMLConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/messages.properties
index eae8344..5bff444 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java
new file mode 100644
index 0000000..0f8493b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Sonatype, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sonatype, Inc - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.metadata.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collection;
+import javax.xml.parsers.*;
+import org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataParser;
+import org.eclipse.equinox.internal.p2.persistence.Messages;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.xml.sax.*;
+
+/**
+ * This class allows to deserialize {@link IInstallableUnit}s that have been serialized with {@link IUSerializer}.
+ * The deserializer is able to read data that have been serialized with previous versions of the serializer.
+ * @since 1.2
+ *
+ */
+public class IUDeserializer {
+	private IUDeserializerParser deserializer;
+
+	/**
+	 * Construct a new instance of the deserializer.
+	 */
+	public IUDeserializer() {
+		deserializer = new IUDeserializerParser(SAXParserFactory.newInstance());
+	}
+
+	/**
+	 * Deserialize a set of {@link IInstallableUnit} from the input stream.
+	 * @param input the input stream to deserialize {@link IInstallableUnit}s from. 
+	 * @return the collection of {@link IInstallableUnit}s read from the input stream.
+	 * @throws IOException
+	 */
+	public Collection<IInstallableUnit> read(InputStream input) throws IOException {
+		return deserializer.parse(input);
+	}
+
+	private class IUDeserializerParser extends MetadataParser {
+		private IUOnlyHandler iusHandler;
+		private SAXParserFactory parserFactory;
+
+		public IUDeserializerParser(SAXParserFactory factory) {
+			super(null, null);
+			this.parserFactory = factory;
+		}
+
+		public Collection<IInstallableUnit> parse(InputStream stream) throws IOException {
+			try {
+				getParser();
+				iusHandler = new IUOnlyHandler();
+				xmlReader.setContentHandler(iusHandler);
+				xmlReader.parse(new InputSource(stream));
+				if (isValidXML()) {
+					return Arrays.asList(iusHandler.getInstallableUnits());
+				}
+				throw new IOException(status.toString());
+			} catch (ParserConfigurationException configException) {
+				throw new IOException(configException.getMessage());
+			} catch (SAXException saxException) {
+				throw new IOException(saxException.getMessage());
+			}
+		}
+
+		protected SAXParser getParser() throws ParserConfigurationException, SAXException {
+			if (parserFactory == null) {
+				throw new SAXException(Messages.XMLParser_No_SAX_Parser);
+			}
+			parserFactory.setNamespaceAware(true);
+			parserFactory.setValidating(false);
+			try {
+				parserFactory.setFeature("http://xml.org/sax/features/string-interning", true); //$NON-NLS-1$
+			} catch (SAXException se) {
+				// some parsers may not support string interning
+			}
+			SAXParser theParser = parserFactory.newSAXParser();
+			if (theParser == null) {
+				throw new SAXException(Messages.XMLParser_No_SAX_Parser);
+			}
+			xmlReader = theParser.getXMLReader();
+			return theParser;
+		}
+
+		class IUOnlyHandler extends RootHandler {
+
+			private InstallableUnitsHandler unitsHandler;
+
+			public IUOnlyHandler() {
+				// default
+			}
+
+			protected void handleRootAttributes(Attributes attributes) {
+				//Nothing to do
+			}
+
+			public void startElement(String name, Attributes attributes) {
+				if (INSTALLABLE_UNITS_ELEMENT.equals(name)) {
+					if (unitsHandler == null) {
+						unitsHandler = new InstallableUnitsHandler(this, attributes);
+					} else {
+						duplicateElement(this, name, attributes);
+					}
+				} else {
+					invalidElement(name, attributes);
+				}
+			}
+
+			public IInstallableUnit[] getInstallableUnits() {
+				if (unitsHandler == null)
+					return null;
+				return unitsHandler.getUnits();
+			}
+		}
+
+		@Override
+		protected Object getRootObject() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		protected String getErrorMessage() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUSerializer.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUSerializer.java
new file mode 100644
index 0000000..3983371
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUSerializer.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Sonatype, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sonatype, Inc - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.metadata.io;
+
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Collection;
+import org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataWriter;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+
+/**
+ * This class allows to serialize a collection of {@link IInstallableUnit}s.
+ * These serialized IUs can be read using the {@link IUDeserializer}.
+ * The format in which the IUs are serialized is not API and is subject to change without notice.
+ * @since 1.2
+ */
+public class IUSerializer {
+	MetadataWriter writer;
+
+	/**
+	 * Construct a serializer.
+	 * @param os the output stream against which the serializer will work.
+	 * @throws UnsupportedEncodingException
+	 */
+	public IUSerializer(OutputStream os) throws UnsupportedEncodingException {
+		writer = new MetadataWriter(os, null);
+	}
+
+	/**
+	 * Serialize the given collections of IU.
+	 * @param ius the collection of {@link IInstallableUnit}s to serialize
+	 */
+	public void write(Collection<IInstallableUnit> ius) {
+		writer.writeInstallableUnits(ius.iterator(), ius.size());
+		writer.flush();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/AddChildTask.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/AddChildTask.java
index 96c1400..790f7d0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/AddChildTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/AddChildTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/CreateCompositeMetadataRepositoryTask.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/CreateCompositeMetadataRepositoryTask.java
index 10260fa..a900396 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/CreateCompositeMetadataRepositoryTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/CreateCompositeMetadataRepositoryTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     SAP AG - repository atomic loading
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata.repository.ant;
 
@@ -29,6 +30,7 @@ public class CreateCompositeMetadataRepositoryTask extends AbstractMDRTask {
 
 	URI location; // desired location of the composite repository
 	String name = "Composite Metadata Repository";
+	boolean atomic = false;
 	boolean compressed = true; // compress by default
 	boolean failOnExists = false; // should we fail if one already exists?
 	Map<String, String> properties = new HashMap<String, String>();
@@ -65,6 +67,8 @@ public class CreateCompositeMetadataRepositoryTask extends AbstractMDRTask {
 		// create the properties
 		if (compressed)
 			properties.put(IRepository.PROP_COMPRESSED, Boolean.toString(true));
+		if (atomic)
+			properties.put(CompositeMetadataRepository.PROP_ATOMIC_LOADING, Boolean.toString(true));
 
 		// create the repository
 		try {
@@ -96,6 +100,13 @@ public class CreateCompositeMetadataRepositoryTask extends AbstractMDRTask {
 	}
 
 	/*
+	 * Set a value indicating whether or not the repository should be atomic.
+	 */
+	public void setAtomic(boolean value) {
+		atomic = value;
+	}
+
+	/*
 	 * Set whether or not we should fail the operation if a repository
 	 * already exists at the location.
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/RemoveChildTask.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/RemoveChildTask.java
index 31f6f1c..5beff86 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/RemoveChildTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository/src_ant/org/eclipse/equinox/internal/p2/metadata/repository/ant/RemoveChildTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF
index 52afe4b..04056a5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.metadata;singleton:=true
-Bundle-Version: 2.0.1.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.metadata.MetadataActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -14,13 +14,13 @@ Export-Package: org.eclipse.equinox.internal.p2.metadata;
    org.eclipse.equinox.p2.director.app,
    org.eclipse.equinox.p2.engine,
    org.eclipse.equinox.p2.installer,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.metadata.repository,
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.publisher,
    org.eclipse.equinox.p2.ql,
    org.eclipse.equinox.p2.ui,
-   org.eclipse.equinox.p2.touchpoint.eclipse",
+   org.eclipse.equinox.p2.touchpoint.eclipse,
+   org.eclipse.equinox.p2.repository.tools",
  org.eclipse.equinox.internal.p2.metadata.expression;
   x-friends:="org.eclipse.equinox.p2.artifact.repository,
    org.eclipse.equinox.p2.directorywatcher,
@@ -41,7 +41,8 @@ Export-Package: org.eclipse.equinox.internal.p2.metadata;
    org.eclipse.equinox.p2.ui,
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.tests,
-   org.eclipse.equinox.p2.touchpoint.eclipse",
+   org.eclipse.equinox.p2.touchpoint.eclipse,
+   org.eclipse.equinox.p2.ui.importexport",
  org.eclipse.equinox.internal.p2.metadata.query;
   x-friends:="org.eclipse.equinox.p2.artifact.optimizers,
    org.eclipse.equinox.p2.artifact.processors,
@@ -58,7 +59,6 @@ Export-Package: org.eclipse.equinox.internal.p2.metadata;
    org.eclipse.equinox.p2.installer,
    org.eclipse.equinox.p2.jarprocessor,
    org.eclipse.equinox.p2.metadata,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.metadata.repository,
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.publisher,
@@ -76,7 +76,7 @@ Export-Package: org.eclipse.equinox.internal.p2.metadata;
    org.eclipse.equinox.p2.updatesite,
    org.eclipse.pde.core,
    org.eclipse.pde.ui",
- org.eclipse.equinox.p2.metadata;version="2.0.0",
+ org.eclipse.equinox.p2.metadata;version="2.1.0",
  org.eclipse.equinox.p2.metadata.expression;version="2.0.0",
  org.eclipse.equinox.p2.metadata.index;version="2.0.0",
  org.eclipse.equinox.p2.query;version="2.0.0"
@@ -84,7 +84,7 @@ Require-Bundle: org.eclipse.equinox.common,
  org.eclipse.equinox.p2.core;bundle-version="[2.0.0,3.0.0)"
 Import-Package: org.eclipse.osgi.service.localization;version="1.0.0",
  org.eclipse.osgi.util,
- org.osgi.framework;version="1.3.0"
+ org.osgi.framework;version="1.6.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5,
  J2SE-1.4,
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata/build.properties
index 0feab6a..4cccd09 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.metadata/pom.xml
index 7e143b3..1337539 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.metadata</artifactId>
-  <version>2.0.0.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ArtifactKey.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ArtifactKey.java
index c2021b2..740bcc4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ArtifactKey.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ArtifactKey.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/BasicVersion.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/BasicVersion.java
index 0514284..b3187b3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/BasicVersion.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/BasicVersion.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/EnumDefinition.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/EnumDefinition.java
new file mode 100644
index 0000000..c837738
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/EnumDefinition.java
@@ -0,0 +1,303 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Cloudsmith Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.metadata;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * Instances of this class represents the enum version format.
+ */
+class EnumDefinition implements Comparable<EnumDefinition>, Serializable {
+	static class EnumSegment implements Comparable<EnumSegment>, Serializable {
+		private static final long serialVersionUID = 4737907767214436543L;
+
+		private final int ordinal;
+		private final EnumDefinition definition;
+
+		EnumSegment(int ordinal, EnumDefinition definition) {
+			this.ordinal = ordinal;
+			this.definition = definition;
+		}
+
+		public int compareTo(EnumSegment other) {
+			if (other == this)
+				return 0;
+			if (definition == other.definition)
+				// Same definition. Just compare ordinals
+				return ordinal - other.ordinal;
+
+			String thisId = definition.getIdentifier(ordinal);
+			String otherId = other.definition.getIdentifier(other.ordinal);
+			if (thisId.equals(otherId))
+				return 0;
+
+			int thisOrdinalInOther = other.definition.getOrdinal(thisId);
+			int otherOrdinalInThis = definition.getOrdinal(otherId);
+			if (thisOrdinalInOther >= 0) {
+				if (otherOrdinalInThis >= 0) {
+					// Both identifiers exists in both enums. Let's see if both
+					// enums order them the same way
+					int thisOrder = ordinal - otherOrdinalInThis;
+					int otherOrder = thisOrdinalInOther - other.ordinal;
+					if (thisOrder > 0 && otherOrder > 0)
+						return 1;
+					if (thisOrder < 0 && otherOrder < 0)
+						return -1;
+					// Difference in opinion...
+				} else {
+					// Use the order in other since it has both identifiers and
+					// this enum does not
+					return thisOrdinalInOther - other.ordinal;
+				}
+			} else if (otherOrdinalInThis >= 0) {
+				// Use the order in this since it has both identifiers and the
+				// other does not.
+				return ordinal - otherOrdinalInThis;
+			}
+
+			// We can't compare the enums since neither enum contain both identifiers
+			// or both do, but use different order. Fall back to comparing the definitions
+			return definition.compareTo(other.definition);
+		}
+
+		public boolean equals(Object other) {
+			return other == this || other instanceof EnumSegment && compareTo((EnumSegment) other) == 0;
+		}
+
+		public int hashCode() {
+			return (1 + ordinal) * 31 + definition.getIdentifier(ordinal).hashCode();
+		}
+
+		int getOrdinal() {
+			return ordinal;
+		}
+
+		String getIdentifier() {
+			return definition.getIdentifier(ordinal);
+		}
+
+		void toString(StringBuffer sb) {
+			definition.toString(sb, ordinal);
+		}
+
+		// For ligthweight deserialization
+		private Object readResolve() {
+			return definition.getSegment(ordinal);
+		}
+	}
+
+	private static final long serialVersionUID = 7237775466362654473L;
+	private static final Map<EnumDefinition, EnumSegment[]> enumDefinitionCache = new HashMap<EnumDefinition, EnumSegment[]>();
+
+	private static EnumSegment[] getEnumSegments(EnumDefinition ed) {
+		EnumSegment[] values = enumDefinitionCache.get(ed);
+		if (values == null) {
+			int ordinal = ed.identifiers.length;
+			values = new EnumSegment[ordinal];
+			while (--ordinal >= 0)
+				values[ordinal] = new EnumSegment(ordinal, ed);
+			enumDefinitionCache.put(ed, values);
+		}
+		return values;
+	}
+
+	static EnumDefinition getEnumDefinition(List<List<String>> identifiers) {
+		nextEd: for (EnumDefinition ed : enumDefinitionCache.keySet()) {
+			String[][] defs = ed.identifiers;
+			int ordinal = defs.length;
+			if (ordinal != identifiers.size())
+				continue;
+
+			while (--ordinal >= 0) {
+				String[] def = defs[ordinal];
+				List<String> ldef = identifiers.get(ordinal);
+				int idx = def.length;
+				if (ldef.size() != idx)
+					continue nextEd;
+				while (--idx >= 0)
+					if (!def[idx].equals(ldef.get(idx)))
+						continue nextEd;
+			}
+			return ed;
+		}
+		EnumDefinition ed = new EnumDefinition(identifiers);
+		getEnumSegments(ed);
+		return ed;
+	}
+
+	private final String[][] identifiers;
+	private final int longestLength;
+	private final int shortestLength;
+
+	private EnumDefinition(List<List<String>> identifiers) {
+		int ordinal = identifiers.size();
+		String[][] defs = new String[ordinal][];
+		int minLen = Integer.MAX_VALUE;
+		int maxLen = 0;
+		while (--ordinal >= 0) {
+			List<String> idents = identifiers.get(ordinal);
+			int idx = idents.size();
+			String[] def = idents.toArray(new String[idx]);
+			defs[ordinal] = def;
+			while (--idx >= 0) {
+				int idLen = def[idx].length();
+				if (idLen < minLen)
+					minLen = idLen;
+				if (idLen > maxLen)
+					maxLen = idLen;
+			}
+		}
+		this.shortestLength = minLen;
+		this.longestLength = maxLen;
+		this.identifiers = defs;
+	}
+
+	static EnumSegment getSegment(List<List<String>> identifiers, int ordinal) {
+		return new EnumDefinition(identifiers).getSegment(ordinal);
+	}
+
+	EnumSegment getSegment(int ordinal) {
+		return getEnumSegments(this)[ordinal];
+	}
+
+	/**
+	 * Returns the ordinal for the given identifier
+	 * @param identifier The identifier
+	 * @return The ordinal of the identifier or -1 if it didn't exist.
+	 */
+	int getOrdinal(String identifier) {
+		if (identifier != null) {
+			int ordinal = identifiers.length;
+			while (--ordinal >= 0) {
+				String[] idents = identifiers[ordinal];
+				int idx = idents.length;
+				while (--idx >= 0)
+					if (idents[idx].equals(identifier))
+						return ordinal;
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Returns the canonical identifier for the given ordinal.
+	 * @param ordinal The ordinal number of the desired identifier
+	 * @return The identifier or <code>null</code> if the ordinal is out of bounds
+	 */
+	String getIdentifier(int ordinal) {
+		return ordinal >= 0 && ordinal < identifiers.length ? identifiers[ordinal][0] : null;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = 1;
+		int ordinal = identifiers.length;
+		while (--ordinal > 0) {
+			String[] idents = identifiers[ordinal];
+			int idx = idents.length;
+			while (--idx >= 0)
+				result = 31 * result + idents[idx].hashCode();
+		}
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (o == this)
+			return true;
+		if (!(o instanceof EnumDefinition))
+			return false;
+		String[][] otherIds = ((EnumDefinition) o).identifiers;
+		int ordinal = identifiers.length;
+		if (ordinal != otherIds.length)
+			return false;
+		while (--ordinal >= 0)
+			if (!Arrays.equals(identifiers[ordinal], otherIds[ordinal]))
+				return false;
+		return true;
+	}
+
+	public int compareTo(EnumDefinition o) {
+		if (o == this)
+			return 0;
+
+		int top = identifiers.length;
+		int cmp = top - o.identifiers.length;
+		if (cmp != 0)
+			return cmp;
+
+		for (int idx = 0; idx < top; ++idx) {
+			cmp = identifiers[idx][0].compareTo(o.identifiers[idx][0]);
+			if (cmp != 0)
+				return cmp;
+		}
+		// this should never happen since we use a lightweight pattern
+		return 0;
+	}
+
+	@Override
+	public String toString() {
+		StringBuffer bld = new StringBuffer();
+		toString(bld);
+		return bld.toString();
+	}
+
+	public void toString(StringBuffer bld) {
+		bld.append('{');
+		int top = identifiers.length;
+		for (int ordinal = 0;;) {
+			String[] idents = identifiers[ordinal];
+			int identsTop = idents.length;
+			bld.append(idents[0]);
+			for (int idx = 1; idx < identsTop; ++idx) {
+				bld.append('=');
+				bld.append(idents[idx]);
+			}
+			if (++ordinal == top)
+				break;
+			bld.append(',');
+		}
+		bld.append('}');
+	}
+
+	void toString(StringBuffer bld, int selectedOrdinal) {
+		bld.append('{');
+		int top = identifiers.length;
+		for (int ordinal = 0;;) {
+			if (ordinal == selectedOrdinal)
+				bld.append('^');
+			bld.append(identifiers[ordinal][0]);
+			if (++ordinal == top)
+				break;
+			bld.append(',');
+		}
+		bld.append('}');
+	}
+
+	/**
+	 * Returns the length of the longest identifier. This method is
+	 * used by the parser
+	 * @return The length of the longest identifier
+	 */
+	int getLongestLength() {
+		return longestLength;
+	}
+
+	/**
+	 * Returns the length of the shortest identifier. This method is
+	 * used by the parser
+	 * @return The length of the shortest identifier
+	 */
+	int getShortestLength() {
+		return shortestLength;
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IRequiredCapability.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IRequiredCapability.java
index ef92ee0..b94cc24 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IRequiredCapability.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IRequiredCapability.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2008, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IUMap.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IUMap.java
index 99d7b75..6743879 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IUMap.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/IUMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,9 @@
 package org.eclipse.equinox.internal.p2.metadata;
 
 import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.p2.core.IPool;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.query.*;
@@ -224,4 +226,31 @@ public class IUMap implements Cloneable {
 		for (IInstallableUnit iu : toRemove)
 			remove(iu);
 	}
+
+	/**
+	 * Replace all instances of the IInstallableUnits in the receiver
+	 * with the shared IInstallableUnits from the provided iuPool.
+	 * This operation is a no-op if iuPool is null.
+	 * 
+	 * @param iuPool an IPool containing the shared IInstallableUnits
+	 */
+	public void compress(IPool<IInstallableUnit> iuPool) {
+		if (iuPool == null) {
+			return;
+		}
+
+		Iterator<Entry<String, Object>> entries = units.entrySet().iterator();
+		while (entries.hasNext()) {
+			Entry<String, Object> entry = entries.next();
+			Object value = entry.getValue();
+			if (value.getClass().isArray()) {
+				IInstallableUnit[] array = (IInstallableUnit[]) value;
+				for (int i = 0; i < array.length; i++) {
+					array[i] = iuPool.add(array[i]);
+				}
+			} else {
+				entry.setValue(iuPool.add((IInstallableUnit) value));
+			}
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnit.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnit.java
index 8d564e0..8248f16 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnit.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitFragment.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitFragment.java
index 33e8bb4..426b623 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitFragment.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitPatch.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitPatch.java
index 6b09791..344b6c7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitPatch.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/InstallableUnitPatch.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/License.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/License.java
index 38c62c1..7e3d486 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/License.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/License.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Genuitec, LLC and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Genuitec, LLC and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/Messages.java
index 654d4c0..8b14a6f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009-2011 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     Cloudsmith Inc. - initial API and implementation
+ *     SAP - ongoing development
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata;
 
@@ -23,8 +24,12 @@ public class Messages extends NLS {
 
 	public static String array_can_not_have_character_group;
 
+	public static String array_can_not_have_enum;
+
 	public static String auto_can_not_have_pad_value;
 
+	public static String bad_enum_definition;
+
 	public static String cannot_combine_ignore_with_other_instruction;
 
 	public static String cannot_combine_range_upper_bound_with_pad_value;
@@ -45,6 +50,8 @@ public class Messages extends NLS {
 
 	public static String EOS_after_escape;
 
+	public static String enum_defined_more_then_once;
+
 	public static String expected_orignal_after_colon_0;
 
 	public static String expected_orignal_after_slash_0;
@@ -135,6 +142,10 @@ public class Messages extends NLS {
 
 	public static String no_expression_parser;
 
+	public static String provided_capability_name_not_defined;
+
+	public static String provided_capability_namespace_not_defined;
+
 	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.metadata.messages"; //$NON-NLS-1$
 
 	static {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/MetadataActivator.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/MetadataActivator.java
index 94677c6..e0c57e8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/MetadataActivator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/MetadataActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2008 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OSGiVersion.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OSGiVersion.java
index 5704d4d..728cc75 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OSGiVersion.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OSGiVersion.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OmniVersion.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OmniVersion.java
index 48ca355..5a8e349 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OmniVersion.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/OmniVersion.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java
index eec34bf..8a324a2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     EclipseSource - ongoing development
+ *     SAP - ongoing development
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata;
 
@@ -15,6 +16,7 @@ import org.eclipse.core.runtime.Assert;
 import org.eclipse.equinox.p2.metadata.IProvidedCapability;
 import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.metadata.expression.IMemberProvider;
+import org.eclipse.osgi.util.NLS;
 
 /**
  * Describes a capability as exposed or required by an installable unit
@@ -29,8 +31,8 @@ public class ProvidedCapability implements IProvidedCapability, IMemberProvider
 	private final Version version;
 
 	public ProvidedCapability(String namespace, String name, Version version) {
-		Assert.isNotNull(namespace);
-		Assert.isNotNull(name);
+		Assert.isNotNull(namespace, NLS.bind(Messages.provided_capability_namespace_not_defined, null));
+		Assert.isNotNull(name, NLS.bind(Messages.provided_capability_name_not_defined, namespace));
 		this.namespace = namespace;
 		this.name = name;
 		this.version = version == null ? Version.emptyVersion : version;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequiredCapability.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequiredCapability.java
index 9829dc7..8fedfae 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequiredCapability.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequiredCapability.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequirementChange.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequirementChange.java
index d67a1ca..eb3c5cf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequirementChange.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/RequirementChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ResolvedInstallableUnit.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ResolvedInstallableUnit.java
index bc508ec..f9d98b4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ResolvedInstallableUnit.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ResolvedInstallableUnit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -15,13 +15,17 @@ import java.util.*;
 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
 import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
+import org.eclipse.equinox.p2.metadata.expression.IMemberProvider;
 
-public class ResolvedInstallableUnit implements IInstallableUnit {
+public class ResolvedInstallableUnit implements IInstallableUnit, IMemberProvider {
 	private static IInstallableUnitFragment[] NO_IU = new IInstallableUnitFragment[0];
 
 	private final IInstallableUnitFragment[] fragments;
 	protected final IInstallableUnit original;
 
+	public static final String MEMBER_ORIGINAL = "original"; //$NON-NLS-1$
+	public static final String MEMBER_FRAGMENTS = "fragments"; //$NON-NLS-1$
+
 	public ResolvedInstallableUnit(IInstallableUnit resolved) {
 		this(resolved, null);
 	}
@@ -188,4 +192,41 @@ public class ResolvedInstallableUnit implements IInstallableUnit {
 		return candidate.isMatch(this);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.metadata.expression.IMemberProvider#getMember(java.lang.String)
+	 */
+	public Object getMember(String memberName) {
+		if (MEMBER_FRAGMENTS == memberName)
+			return fragments;
+		if (MEMBER_ORIGINAL == memberName)
+			return original;
+		if (InstallableUnit.MEMBER_PROVIDED_CAPABILITIES == memberName)
+			return getProvidedCapabilities();
+		if (InstallableUnit.MEMBER_ID == memberName)
+			return getId();
+		if (InstallableUnit.MEMBER_VERSION == memberName)
+			return getVersion();
+		if (InstallableUnit.MEMBER_PROPERTIES == memberName)
+			return getProperties();
+		if (InstallableUnit.MEMBER_FILTER == memberName)
+			return getFilter();
+		if (InstallableUnit.MEMBER_ARTIFACTS == memberName)
+			return getArtifacts();
+		if (InstallableUnit.MEMBER_REQUIREMENTS == memberName)
+			return getRequirements();
+		if (InstallableUnit.MEMBER_LICENSES == memberName)
+			return getLicenses();
+		if (InstallableUnit.MEMBER_COPYRIGHT == memberName)
+			return getCopyright();
+		if (InstallableUnit.MEMBER_TOUCHPOINT_DATA == memberName)
+			return getTouchpointData();
+		if (InstallableUnit.MEMBER_TOUCHPOINT_TYPE == memberName)
+			return getTouchpointType();
+		if (InstallableUnit.MEMBER_UPDATE_DESCRIPTOR == memberName)
+			return getUpdateDescriptor();
+		if (InstallableUnit.MEMBER_SINGLETON == memberName)
+			return Boolean.valueOf(isSingleton());
+		throw new IllegalArgumentException("No such member: " + memberName); //$NON-NLS-1$
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointData.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointData.java
index 7bcc16c..fd1896c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointData.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointInstruction.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointInstruction.java
index 44bbe1b..afd14cf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointInstruction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointInstruction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointType.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointType.java
index 86bb05b..42a3294 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointType.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/TouchpointType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/UpdateDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/UpdateDescriptor.java
index eab12ed..8b261fb 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/UpdateDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/UpdateDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormat.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormat.java
index 98bee1a..2fdc5e9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormat.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormat.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -193,7 +193,9 @@ public class VersionFormat implements IVersionFormat, Serializable {
 			sb.append('<');
 			((VersionVector) e).toString(sb, forRange);
 			sb.append('>');
-		} else
+		} else if (e instanceof EnumDefinition.EnumSegment)
+			((EnumDefinition.EnumSegment) e).toString(sb);
+		else
 			sb.append(e);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormatParser.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormatParser.java
index 83170c9..a53ddbd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormatParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionFormatParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,12 +10,11 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata;
 
-import org.eclipse.equinox.p2.metadata.VersionFormatException;
-
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import org.eclipse.equinox.internal.p2.metadata.EnumDefinition.EnumSegment;
 import org.eclipse.equinox.internal.p2.metadata.VersionFormat.TreeInfo;
+import org.eclipse.equinox.p2.metadata.VersionFormatException;
 import org.eclipse.osgi.util.NLS;
 
 /**
@@ -29,6 +28,69 @@ import org.eclipse.osgi.util.NLS;
  */
 class VersionFormatParser {
 
+	private static class EnumInstruction {
+		private final EnumDefinition definition;
+		private final boolean caseSensitive;
+		private final boolean optional;
+		private final boolean begins;
+
+		EnumInstruction(EnumDefinition definition, boolean caseSensitive, boolean optional, boolean begins) {
+			this.definition = definition;
+			this.caseSensitive = caseSensitive;
+			this.optional = optional;
+			this.begins = begins;
+		}
+
+		EnumSegment getEnumSegment(RangeFragment fragment, String version, int[] posHolder, int maxPos) {
+			int pos = posHolder[0];
+			int len = maxPos - pos;
+			int minLen = definition.getShortestLength();
+			if (minLen > len)
+				return null;
+
+			int maxLen = definition.getLongestLength();
+			if (maxLen < len)
+				len = maxLen;
+
+			++len;
+			while (--len >= minLen) {
+				int last = pos + len;
+				if (!begins && last < maxPos) {
+					char c = version.charAt(last);
+					if (VersionParser.isLetter(c) && fragment.isAllowed(c)) {
+						// We are not allowed to truncate at this point
+						continue;
+					}
+				}
+				String identifier = version.substring(pos, last);
+				if (!caseSensitive)
+					identifier = identifier.toLowerCase();
+				int ordinal = definition.getOrdinal(identifier);
+				if (ordinal >= 0) {
+					posHolder[0] = pos + len;
+					return definition.getSegment(ordinal);
+				}
+			}
+			return null;
+		}
+
+		void toString(StringBuffer bld) {
+			bld.append('=');
+			definition.toString(bld);
+			if (begins)
+				bld.append('b');
+			if (!caseSensitive)
+				bld.append('i');
+			if (optional)
+				bld.append('?');
+			bld.append(';');
+		}
+
+		public boolean isOptional() {
+			return optional;
+		}
+	}
+
 	static class Instructions {
 		char[] characters = null;
 		Comparable<?> defaultValue = null;
@@ -39,6 +101,7 @@ class VersionFormatParser {
 		Comparable<?> padValue = null;
 		int rangeMax = Integer.MAX_VALUE;
 		int rangeMin = 0;
+		EnumInstruction enumInstruction = null;
 	}
 
 	static final Qualifier EXACT_ONE_QUALIFIER = new Qualifier(1, 1);
@@ -283,7 +346,7 @@ class VersionFormatParser {
 				return false;
 
 			char c = version.charAt(pos);
-			if (VersionParser.isDigit(c) && isAllowed(c)) {
+			if (VersionParser.isDigit(c) && isAllowed(c) && (enumInstruction == null || enumInstruction.isOptional())) {
 				// Parse to next non-digit
 				//
 				int start = pos;
@@ -305,13 +368,30 @@ class VersionFormatParser {
 				return true;
 			}
 
+			int start = pos;
+			if (enumInstruction != null) {
+				int[] posHolder = new int[] {pos};
+				EnumSegment es = enumInstruction.getEnumSegment(this, version, posHolder, maxPos);
+				if (es != null) {
+					pos = posHolder[0];
+					int len = pos - start;
+					if (rangeMin > len || len > rangeMax)
+						return false;
+					if (!isIgnored())
+						segments.add(es);
+					info.setPosition(pos);
+					return true;
+				}
+				if (!enumInstruction.isOptional())
+					return false;
+			}
+
 			if (!(VersionParser.isLetter(c) && isAllowed(c)))
 				return false;
 
 			// Parse to next non-letter or next delimiter
 			//
-			int start = pos++;
-			for (; pos < maxPos; ++pos) {
+			for (++pos; pos < maxPos; ++pos) {
 				c = version.charAt(pos);
 				if (!(VersionParser.isLetter(c) && isAllowed(c)))
 					break;
@@ -831,6 +911,7 @@ class VersionFormatParser {
 		final boolean inverted;
 		final int rangeMax;
 		final int rangeMin;
+		final EnumInstruction enumInstruction;
 
 		RangeFragment(VersionFormatParser.Instructions instr, Qualifier qualifier) {
 			super(instr, qualifier);
@@ -839,11 +920,13 @@ class VersionFormatParser {
 				inverted = false;
 				rangeMin = 0;
 				rangeMax = Integer.MAX_VALUE;
+				enumInstruction = null;
 			} else {
 				characters = instr.characters;
 				inverted = instr.inverted;
 				rangeMin = instr.rangeMin;
 				rangeMax = instr.rangeMax;
+				enumInstruction = instr.enumInstruction;
 			}
 		}
 
@@ -903,6 +986,8 @@ class VersionFormatParser {
 				sb.append('}');
 				sb.append(';');
 			}
+			if (enumInstruction != null)
+				enumInstruction.toString(sb);
 			super.toString(sb);
 		}
 	}
@@ -986,9 +1071,26 @@ class VersionFormatParser {
 			if (maxPos < 0)
 				return false;
 
+			int start = pos;
+			if (enumInstruction != null) {
+				int[] posHolder = new int[] {pos};
+				EnumSegment es = enumInstruction.getEnumSegment(this, version, posHolder, maxPos);
+				if (es != null) {
+					pos = posHolder[0];
+					int len = pos - start;
+					if (rangeMin > len || len > rangeMax)
+						return false;
+					if (!isIgnored())
+						segments.add(es);
+					info.setPosition(pos);
+					return true;
+				}
+				if (!enumInstruction.isOptional())
+					return false;
+			}
+
 			// Parse to next delimiter or end of string
 			//
-			int start = pos;
 			if (characters != null) {
 				if (anyChar) {
 					// Swallow everything that matches the allowed characters
@@ -1210,6 +1312,78 @@ class VersionFormatParser {
 		currentList.add(createDelimiterFragment(ep, parseQualifier()));
 	}
 
+	private void parseEnum(Instructions processing) throws VersionFormatException {
+		++current;
+		ArrayList<List<String>> identifiers = new ArrayList<List<String>>();
+		ArrayList<String> idents = new ArrayList<String>();
+		StringBuffer sb = new StringBuffer();
+		for (;;) {
+			if (current >= eos)
+				throw formatException(Messages.bad_enum_definition);
+
+			char c = format.charAt(current++);
+			while (c != '}' && c != ',' && c != '=') {
+				if (current >= eos || c <= ' ')
+					throw formatException(Messages.bad_enum_definition);
+				if (c == '\\') {
+					c = format.charAt(current++);
+					if (current >= eos)
+						throw formatException(Messages.bad_enum_definition);
+				}
+				sb.append(c);
+				c = format.charAt(current++);
+			}
+			idents.add(sb.toString());
+			sb.setLength(0);
+			if (c == '=')
+				continue;
+
+			identifiers.add(idents);
+			if (c == '}')
+				break;
+
+			// c must be ',' at this point
+			idents = new ArrayList<String>();
+		}
+
+		boolean enumCaseSensitive = true;
+		boolean enumOptional = false;
+		boolean enumBegins = false;
+		while (current < eos) {
+			char c = format.charAt(current);
+			if (c == 'i') {
+				enumCaseSensitive = false;
+				current++;
+			} else if (c == 'b') {
+				enumBegins = true;
+				current++;
+			} else if (c == '?') {
+				enumOptional = true;
+				current++;
+			} else
+				break;
+		}
+
+		// Ensure that all identifiers are unique and make them
+		// lower case if necessary
+		HashSet<String> unique = new HashSet<String>();
+		int ordinal = identifiers.size();
+		while (--ordinal >= 0) {
+			List<String> ids = identifiers.get(ordinal);
+			int idx = ids.size();
+			while (--idx >= 0) {
+				String id = ids.get(idx);
+				if (!enumCaseSensitive)
+					id = id.toLowerCase();
+				if (!unique.add(id))
+					throw formatException(Messages.bad_enum_definition);
+				ids.set(idx, id);
+			}
+		}
+		EnumDefinition enumDefinition = EnumDefinition.getEnumDefinition(identifiers);
+		processing.enumInstruction = new EnumInstruction(enumDefinition, enumCaseSensitive, enumOptional, enumBegins);
+	}
+
 	private void parseFragment() throws VersionFormatException {
 		if (current == eos)
 			throw formatException(Messages.premature_end_of_format);
@@ -1268,9 +1442,10 @@ class VersionFormatParser {
 		if (ep != null) {
 			if (ep.characters != null)
 				throw formatException(Messages.array_can_not_have_character_group);
-			if (ep.rangeMax != Integer.MAX_VALUE && ep.padValue != null) {
+			if (ep.rangeMax != Integer.MAX_VALUE && ep.padValue != null)
 				throw formatException(Messages.cannot_combine_range_upper_bound_with_pad_value);
-			}
+			if (ep.enumInstruction != null)
+				throw formatException(Messages.array_can_not_have_enum);
 		}
 
 		if (currentList.isEmpty())
@@ -1416,15 +1591,26 @@ class VersionFormatParser {
 				throw formatException(Messages.cannot_combine_ignore_with_other_instruction);
 			parseCharacterGroup(processing);
 		} else if (c == '{') {
-			// ={min,max};
-			//
-			if (processing.rangeMin != 0 || processing.rangeMax != Integer.MAX_VALUE)
-				throw formatException(Messages.range_defined_more_then_once);
-			if (processing.ignore)
-				throw formatException(Messages.cannot_combine_ignore_with_other_instruction);
-			int[] minMax = parseMinMax();
-			processing.rangeMin = minMax[0];
-			processing.rangeMax = minMax[1];
+			if (current + 1 == eos)
+				throw formatException(Messages.premature_end_of_format);
+
+			if (VersionParser.isDigit(format.charAt(current + 1))) {
+				// ={min,max};
+				//
+				if (processing.rangeMin != 0 || processing.rangeMax != Integer.MAX_VALUE)
+					throw formatException(Messages.range_defined_more_then_once);
+				if (processing.ignore)
+					throw formatException(Messages.cannot_combine_ignore_with_other_instruction);
+				int[] minMax = parseMinMax();
+				processing.rangeMin = minMax[0];
+				processing.rangeMax = minMax[1];
+			} else {
+				// ={enum1,enum2,...};
+				//
+				if (processing.enumInstruction != null)
+					throw formatException(Messages.enum_defined_more_then_once);
+				parseEnum(processing);
+			}
 		} else {
 			// =<raw-element>;
 			if (processing.defaultValue != null)
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java
index 49cb031..9b46f07 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import org.eclipse.equinox.p2.metadata.Version;
 import org.eclipse.equinox.p2.metadata.VersionFormatException;
 import org.eclipse.osgi.util.NLS;
@@ -265,6 +264,17 @@ public abstract class VersionParser {
 				v = sb.length() == 0 ? VersionVector.MINS_VALUE : sb.toString();
 				break;
 			}
+			case '{' : {
+				if (++current == maxPos)
+					return null;
+
+				position[0] = current;
+				v = parseRawEnum(value, position, maxPos);
+				if (v == null)
+					return null;
+				current = position[0];
+				break;
+			}
 			case '<' : {
 				if (++current == maxPos)
 					return null;
@@ -366,6 +376,43 @@ public abstract class VersionParser {
 		return new VersionVector(rawList.toArray(new Comparable[rawList.size()]), pad);
 	}
 
+	private static Comparable<?> parseRawEnum(String value, int[] position, int maxPos) {
+		int pos = position[0];
+		ArrayList<List<String>> identifiers = new ArrayList<List<String>>();
+		int ordinal = -1;
+		StringBuffer sb = new StringBuffer();
+		for (;;) {
+			if (pos >= maxPos)
+				return null;
+
+			char c = value.charAt(pos++);
+			while (c != '}' && c != ',') {
+				if (pos == maxPos)
+					return null;
+				if (c <= ' ')
+					return null;
+				if (c == '\\' || c == '^') {
+					if (c == '^')
+						ordinal = identifiers.size();
+					c = value.charAt(pos++);
+					if (pos == maxPos)
+						return null;
+				}
+				sb.append(c);
+				c = value.charAt(pos++);
+			}
+			identifiers.add(Collections.singletonList(sb.toString()));
+			if (c == '}')
+				break;
+			// c must be ',' at this point
+			sb.setLength(0);
+		}
+		if (ordinal == -1)
+			return null;
+		position[0] = pos;
+		return EnumDefinition.getSegment(identifiers, ordinal);
+	}
+
 	public static int skipWhite(String string, int pos) {
 		int top = string.length();
 		while (pos < top && string.charAt(pos) <= ' ')
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionVector.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionVector.java
index 1d1e312..f2d5fec 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionVector.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionVector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ public class VersionVector implements Comparable<VersionVector>, Serializable {
 		}
 
 		public int compareTo(Object o) {
-			return o == this ? 0 : (o == MAX_VALUE || o instanceof Integer || o instanceof VersionVector ? -1 : 1);
+			return o == this ? 0 : (o == MAX_VALUE || o instanceof Integer || o instanceof EnumDefinition.EnumSegment || o instanceof VersionVector ? -1 : 1);
 		}
 
 		// For singleton deserialization
@@ -222,12 +222,17 @@ public class VersionVector implements Comparable<VersionVector>, Serializable {
 			return 1;
 		if (b instanceof Integer)
 			return -1;
+
 		if (a instanceof VersionVector)
 			return (b instanceof VersionVector) ? ((VersionVector) a).compareTo((VersionVector) b) : 1;
-
 		if (b instanceof VersionVector)
 			return -1;
 
+		if (a instanceof EnumDefinition.EnumSegment)
+			return (b instanceof EnumDefinition.EnumSegment) ? ((EnumDefinition.EnumSegment) a).compareTo((EnumDefinition.EnumSegment) b) : 1;
+		if (b instanceof EnumDefinition.EnumSegment)
+			return -1;
+
 		throw new IllegalArgumentException();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/All.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/All.java
index 4de9755..f62e28e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/All.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/All.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Array.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Array.java
index 9095f55..8f0ef70 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Array.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Array.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Assignment.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Assignment.java
index 130f1f5..2724e29 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Assignment.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Assignment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/At.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/At.java
index dddcdb9..794eaf5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/At.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/At.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Collect.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Collect.java
index 5cd8a41..e5d7812 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Collect.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Collect.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CollectionFilter.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CollectionFilter.java
index 5a1e43f..c671214 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CollectionFilter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CollectionFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Condition.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Condition.java
index a2b7cf2..36fb854 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Condition.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Condition.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ContextExpression.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ContextExpression.java
index a574311..abad748 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ContextExpression.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ContextExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CurryedLambdaExpression.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CurryedLambdaExpression.java
index 2de0b95..116b470 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CurryedLambdaExpression.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/CurryedLambdaExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Equals.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Equals.java
index 7452c31..c318776 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Equals.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Equals.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/EvaluationContext.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/EvaluationContext.java
index 49e9bbc..0fa45c8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/EvaluationContext.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/EvaluationContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Everything.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Everything.java
index 0b3a1cf..52758ad 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Everything.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Everything.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Exists.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Exists.java
index 14fbc5d..b2a5f42 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Exists.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Exists.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Expression.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Expression.java
index d8b5ac7..9cdbd52 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Expression.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Expression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ExpressionFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ExpressionFactory.java
index ec8abf2..cfa9e2c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ExpressionFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ExpressionFactory.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Cloudsmith Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Cloudsmith Inc. - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata.expression;
 
 import java.lang.reflect.Constructor;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/FilterFunction.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/FilterFunction.java
index 07fa923..3101ce4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/FilterFunction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/FilterFunction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/First.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/First.java
index de5c8b5..b09056f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/First.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/First.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Flatten.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Flatten.java
index 181caa2..9a4cfd8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Flatten.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Flatten.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Function.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Function.java
index 49908cb..2087ddc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Function.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Function.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IExpressionConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IExpressionConstants.java
index 033a594..c6f945e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IExpressionConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IExpressionConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IRepeatableIterator.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IRepeatableIterator.java
index f20e266..98662a4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IRepeatableIterator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/IRepeatableIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Intersect.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Intersect.java
index 2ebbe0f..048252d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Intersect.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Intersect.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LDAPFilter.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LDAPFilter.java
index b81f1f5..a96fe32 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LDAPFilter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LDAPFilter.java
@@ -1,3 +1,14 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Cloudsmith Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Cloudsmith Inc. - initial API and implementation
+ *     IBM - ongoing development
+ *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata.expression;
 
 import java.util.Dictionary;
@@ -50,7 +61,7 @@ public class LDAPFilter extends Unary implements IFilterExpression {
 		return Boolean.TRUE == operand.evaluate(ctx);
 	}
 
-	public boolean match(ServiceReference reference) {
+	public boolean match(ServiceReference<?> reference) {
 		return isMatch(reference == null ? MemberProvider.emptyProvider() : MemberProvider.create(reference, true));
 	}
 
@@ -58,6 +69,10 @@ public class LDAPFilter extends Unary implements IFilterExpression {
 		return isMatch(map == null ? MemberProvider.emptyProvider() : MemberProvider.create(map, false));
 	}
 
+	public boolean matches(Map<String, ?> map) {
+		return matchCase(map);
+	}
+
 	@SuppressWarnings("rawtypes")
 	public boolean matchCase(Dictionary dictionary) {
 		return isMatch(dictionary == null ? MemberProvider.emptyProvider() : MemberProvider.create(dictionary, false));
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LambdaExpression.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LambdaExpression.java
index f497319..ca5c2f9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LambdaExpression.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/LambdaExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Latest.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Latest.java
index cf96f06..b5e2bf8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Latest.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Latest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Limit.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Limit.java
index d477675..8a02b0e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Limit.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Limit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Literal.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Literal.java
index fffdf96..244b005 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Literal.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Literal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MatchExpression.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MatchExpression.java
index dfdf619..64016e1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MatchExpression.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MatchExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Matches.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Matches.java
index 0c8f0ba..2033b38 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Matches.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Matches.java
@@ -36,6 +36,7 @@ public class Matches extends Binary {
 		return Boolean.valueOf(match(lhs.evaluate(context), rhs.evaluate(context)));
 	}
 
+	@SuppressWarnings({"unchecked", "rawtypes"})
 	protected boolean match(Object lval, Object rval) {
 		if (lval == null || rval == null)
 			return false;
@@ -60,15 +61,17 @@ public class Matches extends Binary {
 		} else if (rval instanceof Filter) {
 			if (lval instanceof IInstallableUnit)
 				return Boolean.valueOf(((Filter) rval).match(new Hashtable<String, String>(((IInstallableUnit) lval).getProperties())));
+			// TODO Below we use raw types for simplicity;
+			// we could convert to Dictionary<String, ?> but that is work and the filter impl
+			// must still handle (and ignore) non String keys.
 			if (lval instanceof Dictionary<?, ?>)
-				return Boolean.valueOf(((Filter) rval).match((Dictionary<?, ?>) lval));
+				return Boolean.valueOf(((Filter) rval).match((Dictionary<String, ?>) lval));
 			if (lval instanceof Map<?, ?>)
-				return Boolean.valueOf(((Filter) rval).match(new Hashtable<Object, Object>((Map<?, ?>) lval)));
+				return Boolean.valueOf(((Filter) rval).match(new Hashtable((Map<?, ?>) lval)));
 		} else if (rval instanceof Locale) {
 			if (lval instanceof String)
 				return Boolean.valueOf(matchLocaleVariants((Locale) rval, (String) lval));
 		} else if (rval instanceof IMatchExpression<?>) {
-			@SuppressWarnings("unchecked")
 			IMatchExpression<Object> me = (IMatchExpression<Object>) rval;
 			return me.isMatch(lval);
 		} else if (rval instanceof IUpdateDescriptor) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Member.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Member.java
index d9a975c..59e82a0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Member.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Member.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MemberProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MemberProvider.java
index c466d99..cc82db7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MemberProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/MemberProvider.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Cloudsmith Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Cloudsmith Inc. - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata.expression;
 
 import java.util.*;
@@ -98,9 +108,9 @@ public abstract class MemberProvider implements IMemberProvider {
 	}
 
 	static class ServiceRefMemberProvider extends MemberProvider {
-		private final ServiceReference serviceRef;
+		private final ServiceReference<?> serviceRef;
 
-		public ServiceRefMemberProvider(ServiceReference serviceRef) {
+		public ServiceRefMemberProvider(ServiceReference<?> serviceRef) {
 			this.serviceRef = serviceRef;
 		}
 
@@ -125,7 +135,7 @@ public abstract class MemberProvider implements IMemberProvider {
 		if (value instanceof Dictionary<?, ?>)
 			return caseInsensitive ? new CIDictionaryMemberProvider((Dictionary<String, ?>) value) : new DictionaryMemberProvider((Dictionary<String, ?>) value);
 		if (value instanceof ServiceReference)
-			return new ServiceRefMemberProvider((ServiceReference) value);
+			return new ServiceRefMemberProvider((ServiceReference<?>) value);
 		throw new IllegalArgumentException();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Not.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Not.java
index 5246859..0058b4e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Not.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Not.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Or.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Or.java
index 3280504..f6d361e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Or.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Or.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Parameter.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Parameter.java
index b4c5634..cc790e3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Parameter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Parameter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Pipe.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Pipe.java
index 6da2c93..9fe5eb3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Pipe.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Pipe.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RangeFunction.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RangeFunction.java
index 068dc13..fecd7d2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RangeFunction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RangeFunction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RepeatableIterator.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RepeatableIterator.java
index 5f94dab..6df6dac 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RepeatableIterator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/RepeatableIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Select.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Select.java
index 771dfeb..59c3d9e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Select.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Select.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/SetFunction.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/SetFunction.java
index fc4bf5a..ee3f09b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/SetFunction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/SetFunction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Traverse.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Traverse.java
index a35e3c7..c94d028 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Traverse.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Traverse.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unary.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unary.java
index 7299a09..c37609d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unary.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/UnaryCollectionFilter.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/UnaryCollectionFilter.java
index dbf141b..061bc6c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/UnaryCollectionFilter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/UnaryCollectionFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Union.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Union.java
index 8c731fd..e667037 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Union.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Union.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unique.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unique.java
index 58d1e5b..94346a9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unique.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Unique.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Variable.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Variable.java
index dc26267..7a4dfad 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Variable.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/Variable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/VersionFunction.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/VersionFunction.java
index afd9099..3c43a73 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/VersionFunction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/VersionFunction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/parser/QLParser.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/parser/QLParser.java
index b82dc65..c3faf8e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/parser/QLParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/parser/QLParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/index/IndexProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/index/IndexProvider.java
index c7899d6..9917f82 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/index/IndexProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/index/IndexProvider.java
@@ -1,3 +1,14 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Cloudsmith Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Cloudsmith Inc. - initial API and implementation
+ *     IBM Corporation - ongoing development and bug fixes
+ *******************************************************************************/
 package org.eclipse.equinox.internal.p2.metadata.index;
 
 import org.eclipse.core.runtime.IProgressMonitor;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/messages.properties
index 540b615..aa3b72b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
- # Copyright (c) 2009 Cloudsmith Inc. and others.
+ # Copyright (c) 2009-2011 Cloudsmith Inc. and others.
  # All rights reserved. This program and the accompanying materials
  # are made available under the terms of the Eclipse Public License v1.0
  # which accompanies this distribution, and is available at
@@ -7,11 +7,14 @@
  #
  # Contributors:
  #     Cloudsmith Inc. - initial API and implementation
+ #     SAP - ongoing development
 ###############################################################################
 _0_is_not_a_valid_qualifier_in_osgi_1=The {0} value is invalid in OSGi version: "{1}"
 array_can_not_be_empty=Array format can not be empty
 array_can_not_have_character_group=Array format can not have a character group
+array_can_not_have_enum=Array format can not have an enum specifier
 auto_can_not_have_pad_value=Auto format can not have a pad value
+bad_enum_definition=Bad definition of enumerator
 cannot_combine_ignore_with_other_instruction=Cannot combine ignore with other instruction
 cannot_combine_range_upper_bound_with_pad_value=Cannot combine range upper bound with pad value
 character_group_defined_more_then_once=Character group was defined more then once
@@ -22,6 +25,7 @@ delimiter_can_not_have_default_value=A delimiter cannot have a default value
 delimiter_can_not_have_pad_value=A delimiter cannot have a pad value
 delimiter_can_not_have_range=A delimiter cannot have a range
 EOS_after_escape=End of string was encountere after the escape character
+enum_defined_more_then_once=Enumeration was defined more then once
 expected_orignal_after_colon_0=An original version was expected after colon: {0}
 expected_orignal_after_slash_0=A format or colon was expected after slash: {0}
 expected_slash_after_raw_vector_0=A slash was expected after a raw version: {0}
@@ -55,6 +59,8 @@ performing_subquery=Performing subquery
 premature_end_of_format=Premature end of format
 premature_end_of_format_expected_0=Premature end of format, "{0}" expected
 premature_EOS_0=Premature end of string in "{0}"
+provided_capability_name_not_defined=the name of provided capability "{0}" is not defined
+provided_capability_namespace_not_defined=the namespace of the provided capabilty is not defined
 range_defined_more_then_once=Range defined more then once
 range_max_cannot_be_less_then_range_min=The range maximum must not be less then its minimum
 range_max_cannot_be_zero=The range maximum cannot be zero
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/query/UpdateQuery.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/query/UpdateQuery.java
index 9ff7248..3d62e11 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/query/UpdateQuery.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/query/UpdateQuery.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitFragment.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitFragment.java
index 1e00481..4268d7e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitFragment.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitPatch.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitPatch.java
index 6f0a029..6e9412e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitPatch.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IInstallableUnitPatch.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ILicense.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ILicense.java
index 5d613ad..72b0401 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ILicense.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ILicense.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2008, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java
index 2d7cc12..f8b8cd1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2008, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IRequirementChange.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IRequirementChange.java
index 27d89bc..e65a9d8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IRequirementChange.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IRequirementChange.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2008, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointData.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointData.java
index 89530b7..5ce97ab 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointData.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointData.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2008, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointInstruction.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointInstruction.java
index e7c9b49..c843a85 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointInstruction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointInstruction.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2008, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointType.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointType.java
index 02218f7..847667d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointType.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/ITouchpointType.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2008, 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2008, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IUpdateDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IUpdateDescriptor.java
index 0fff4eb..6b55e60 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IUpdateDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IUpdateDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionFormat.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionFormat.java
index 5946216..9eec78a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionFormat.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionFormat.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionedId.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionedId.java
index eb8aec3..8e1ac6a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionedId.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IVersionedId.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/MetadataFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/MetadataFactory.java
index dc43ce8..587a1c7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/MetadataFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/MetadataFactory.java
@@ -162,6 +162,14 @@ public final class MetadataFactory {
 		}
 
 		/**
+		 * Returns the UpdateDescriptor for this IU
+		 * @since 2.1
+		 */
+		public IUpdateDescriptor getUpdateDescriptor() {
+			return unit().getUpdateDescriptor();
+		}
+
+		/**
 		 * Set the artifact keys for the installable unit. Previous values will be overwritten.
 		 * @param value the artifacts to the used.
 		 */
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/Version.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/Version.java
index 3b3d1b3..2826375 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/Version.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/Version.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith and others.
+ * Copyright (c) 2009, 2010 Cloudsmith and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionFormatException.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionFormatException.java
index 4585b5c..ed24076 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionFormatException.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionFormatException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java
index 5fde149..1dc0b10 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/expression/IContextExpression.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/expression/IContextExpression.java
index a89e54e..4fb2e4b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/expression/IContextExpression.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/expression/IContextExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/query/IQueryResult.java b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/query/IQueryResult.java
index 0f7ce76..82f3363 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/query/IQueryResult.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/query/IQueryResult.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/.settings/.api_filters b/eclipse/plugins/org.eclipse.equinox.p2.operations/.settings/.api_filters
new file mode 100644
index 0000000..056afbd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/.settings/.api_filters
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.equinox.p2.operations" version="2">
+    <resource path="src/org/eclipse/equinox/p2/operations/ProfileChangeOperation.java" type="org.eclipse.equinox.p2.operations.ProfileChangeOperation">
+        <filter id="338792546">
+            <message_arguments>
+                <message_argument value="org.eclipse.equinox.p2.operations.ProfileChangeOperation"/>
+                <message_argument value="getProfileChangeRequest()"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.operations/META-INF/MANIFEST.MF
index 9acb2cc..acddd86 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.operations;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.operations.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.operations/build.properties
index ca50309..aaa11b5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.operations/plugin.properties
index 3c8feb5..a6c1ce1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2007, 2009 IBM Corporation and others.
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -8,5 +8,5 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName = Equinox Provisioning Update Checker
+pluginName = Equinox Provisioning Operations API
 providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.operations/pom.xml
index 961f543..5277c33 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.operations</artifactId>
-  <version>2.0.0.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Activator.java
index 9580bc9..8d5a2fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/IStatusCodes.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/IStatusCodes.java
index 34f92df..61bdb13 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/IStatusCodes.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/IStatusCodes.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Messages.java
index 55e98c1..b170e41 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,9 @@ public class Messages extends NLS {
 	public static String UpdateOperation_ResolveJobName;
 	public static String UpdateOperation_UpdateJobName;
 
+	public static String OperationFactory_noAgent;
+	public static String OperationFactory_noIUFound;
+
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlanAnalyzer.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlanAnalyzer.java
index 3b2d72a..f32511f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlanAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlanAnalyzer.java
@@ -9,13 +9,14 @@
  *     IBM Corporation - initial API and implementation
  *     Sonatype, Inc. - ongoing development
  ******************************************************************************/
-
 package org.eclipse.equinox.internal.p2.operations;
 
 import java.util.Collection;
 import java.util.Map.Entry;
 import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.provisional.p2.director.*;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.internal.provisional.p2.director.PlannerStatus;
+import org.eclipse.equinox.internal.provisional.p2.director.RequestStatus;
 import org.eclipse.equinox.p2.engine.IProvisioningPlan;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.osgi.util.NLS;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlannerResolutionJob.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlannerResolutionJob.java
index 69c984e..78264ab 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlannerResolutionJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/PlannerResolutionJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.equinox.internal.p2.operations;
 
 import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.IProvisioningPlan;
 import org.eclipse.equinox.p2.engine.ProvisioningContext;
 import org.eclipse.equinox.p2.operations.*;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/ResolutionResult.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/ResolutionResult.java
index 0d0d90b..20c1740 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/ResolutionResult.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/ResolutionResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/SearchForUpdatesResolutionJob.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/SearchForUpdatesResolutionJob.java
index d60e9b3..5fcd8f1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/SearchForUpdatesResolutionJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/SearchForUpdatesResolutionJob.java
@@ -12,7 +12,7 @@ package org.eclipse.equinox.internal.p2.operations;
 
 import java.lang.reflect.InvocationTargetException;
 import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.ProvisioningContext;
 import org.eclipse.equinox.p2.operations.ProvisioningSession;
 import org.eclipse.equinox.p2.operations.UpdateOperation;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/messages.properties
index 1e91ac0..48fa2ae 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
+# Copyright (c) 2009, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -42,3 +42,6 @@ UninstallOperation_ResolveJobName=Calculating Uninstall Validity
 UpdateOperation_ProfileChangeRequestProgress=Computing update request
 UpdateOperation_ResolveJobName=Computing Update Requirements
 UpdateOperation_UpdateJobName=Updating Software
+
+OperationFactory_noAgent=This installation has not been configured properly. No provisioning agent can be found.
+OperationFactory_noIUFound=No IU could be found for {0}.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/IProfileChangeJob.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/IProfileChangeJob.java
index e964169..0432b68 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/IProfileChangeJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/IProfileChangeJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/InstallOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/InstallOperation.java
index 0da9c62..d1dbff9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/InstallOperation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/InstallOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009-2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,14 +9,15 @@
  *     IBM Corporation - initial API and implementation
  *     Sonatype, Inc. - ongoing development
  ******************************************************************************/
-
 package org.eclipse.equinox.p2.operations;
 
 import java.util.Collection;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.director.Explanation;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.p2.operations.*;
-import org.eclipse.equinox.internal.provisional.p2.director.*;
+import org.eclipse.equinox.internal.provisional.p2.director.PlannerStatus;
+import org.eclipse.equinox.internal.provisional.p2.director.RequestStatus;
 import org.eclipse.equinox.p2.engine.*;
 import org.eclipse.equinox.p2.engine.query.UserVisibleRootQuery;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
@@ -45,7 +46,10 @@ import org.eclipse.equinox.p2.query.QueryUtil;
  */
 public class InstallOperation extends ProfileChangeOperation {
 
-	private Collection<IInstallableUnit> toInstall;
+	/**
+	 * @since 2.1
+	 */
+	protected Collection<IInstallableUnit> toInstall;
 
 	/**
 	 * Create an install operation on the specified provisioning session that installs
@@ -166,7 +170,7 @@ public class InstallOperation extends ProfileChangeOperation {
 	}
 
 	// this is very reachy
-	private boolean missingRequirement(IProvisioningPlan failedPlan) {
+	boolean missingRequirement(IProvisioningPlan failedPlan) {
 		IStatus status = failedPlan.getStatus();
 		RequestStatus requestStatus = null;
 		if (status instanceof PlannerStatus)
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/OperationFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/OperationFactory.java
new file mode 100644
index 0000000..cc28e0c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/OperationFactory.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ *  Copyright (c) 2011 Sonatype, Inc. and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     Sonatype, Inc. - initial API and implementation
+ *     IBM Corporation - Ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.p2.operations;
+
+import java.net.URI;
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.operations.Activator;
+import org.eclipse.equinox.internal.p2.operations.Messages;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.engine.*;
+import org.eclipse.equinox.p2.engine.query.UserVisibleRootQuery;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.IVersionedId;
+import org.eclipse.equinox.p2.query.*;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * OperationFactory provides a set of helpers to simplify dealing with the running installation.
+ * Among other things, it simplifies the installation, un-installation and update.
+ * If the system you are trying to modify is not the running one, you need to directly use the various subclass of {@link ProfileChangeOperation}.
+ * @since 2.1  
+ */
+public class OperationFactory {
+
+	private IProvisioningAgent getAgent() {
+		Collection<ServiceReference<IProvisioningAgent>> ref = null;
+		try {
+			ref = Activator.getContext().getServiceReferences(IProvisioningAgent.class, '(' + IProvisioningAgent.SERVICE_CURRENT + '=' + Boolean.TRUE.toString() + ')');
+		} catch (InvalidSyntaxException e) {
+			//ignore can't happen since we write the filter ourselves
+		}
+		if (ref == null || ref.size() == 0)
+			throw new IllegalStateException(Messages.OperationFactory_noAgent);
+		IProvisioningAgent agent = Activator.getContext().getService(ref.iterator().next());
+		Activator.getContext().ungetService(ref.iterator().next());
+		return agent;
+	}
+
+	//Return a list of IUs from the list of versionedIDs originally provided
+	private Collection<IInstallableUnit> gatherIUs(IQueryable<IInstallableUnit> searchContext, Collection<IVersionedId> ius, boolean checkIUs, IProgressMonitor monitor) throws ProvisionException {
+		Collection<IInstallableUnit> gatheredIUs = new ArrayList<IInstallableUnit>(ius.size());
+
+		for (IVersionedId versionedId : ius) {
+			if (!checkIUs && versionedId instanceof IInstallableUnit) {
+				gatheredIUs.add((IInstallableUnit) versionedId);
+				continue;
+			}
+
+			IQuery<IInstallableUnit> installableUnits = QueryUtil.createIUQuery(versionedId.getId(), versionedId.getVersion());
+			IQueryResult<IInstallableUnit> matches = searchContext.query(installableUnits, monitor);
+			if (matches.isEmpty())
+				throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.OperationFactory_noIUFound, versionedId)));
+
+			//Add the first IU
+			Iterator<IInstallableUnit> iuIt = matches.iterator();
+			gatheredIUs.add(iuIt.next());
+		}
+		return gatheredIUs;
+	}
+
+	private ProvisioningContext createProvisioningContext(Collection<URI> repos, IProvisioningAgent agent) {
+		ProvisioningContext ctx = new ProvisioningContext(agent);
+		if (repos != null) {
+			ctx.setMetadataRepositories(repos.toArray(new URI[repos.size()]));
+			ctx.setArtifactRepositories(repos.toArray(new URI[repos.size()]));
+		}
+		return ctx;
+	}
+
+	/**
+	 * This factory method creates an {@link InstallOperation} to install all the elements listed from the specified repositories. 
+	 * @param toInstall the elements to install. This can not be null.
+	 * @param repos the repositories to install the elements from. 
+	 * @param monitor the progress monitor
+	 * @return an operation to install
+	 */
+	public InstallOperation createInstallOperation(Collection<IVersionedId> toInstall, Collection<URI> repos, IProgressMonitor monitor) throws ProvisionException {
+		Assert.isNotNull(toInstall);
+		IProvisioningAgent agent = getAgent();
+
+		//add the repos
+		ProvisioningContext ctx = createProvisioningContext(repos, agent);
+
+		//find the ius to install and create the operation
+		InstallOperation resultingOperation = new InstallOperation(new ProvisioningSession(agent), gatherIUs(ctx.getMetadata(monitor), toInstall, false, monitor));
+		resultingOperation.setProvisioningContext(ctx);
+		resultingOperation.setProfileId(IProfileRegistry.SELF);
+
+		return resultingOperation;
+	}
+
+	/**
+	 * Create an {@link UninstallOperation} that will uninstall the listed elements from the running instance. 
+	 * @param toUninstall the elements to uninstall. This can not be null.
+	 * @param repos the repositories to install the elements from. Passing null will 
+	 * @param monitor the progress monitor
+	 * @return an operation to uninstall
+	 */
+	public UninstallOperation createUninstallOperation(Collection<IVersionedId> toUninstall, Collection<URI> repos, IProgressMonitor monitor) throws ProvisionException {
+		Assert.isNotNull(toUninstall);
+		IProvisioningAgent agent = getAgent();
+		ProvisioningContext ctx = createProvisioningContext(repos, agent);
+
+		//find the ius to uninstall and create the operation
+		UninstallOperation resultingOperation = new UninstallOperation(new ProvisioningSession(agent), gatherIUs(listInstalledElements(false, monitor), toUninstall, true, monitor));
+		resultingOperation.setProvisioningContext(ctx);
+		resultingOperation.setProfileId(IProfileRegistry.SELF);
+
+		return resultingOperation;
+	}
+
+	/**
+	 * Return the {@link IInstallableUnit} that are installed in the running instance of eclipse.
+	 * @param rootsOnly set to true to return only the elements that have been explicitly installed (aka roots).
+	 * @param monitor the progress monitor
+	 * @return the installable units installed
+	 */
+	public IQueryResult<IInstallableUnit> listInstalledElements(boolean rootsOnly, IProgressMonitor monitor) {
+		IProfileRegistry registry = (IProfileRegistry) getAgent().getService(IProfileRegistry.SERVICE_NAME);
+		IProfile profile = registry.getProfile(IProfileRegistry.SELF);
+		if (rootsOnly)
+			return profile.query(new UserVisibleRootQuery(), monitor);
+		return profile.query(QueryUtil.ALL_UNITS, monitor);
+	}
+
+	/**
+	 * Create an {@link UpdateOperation} that will update the elements specified.
+	 * @param toUpdate
+	 * @param repos
+	 * @param monitor
+	 * @return an instance of {@link UpdateOperation}
+	 */
+	public UpdateOperation createUpdateOperation(Collection<IVersionedId> toUpdate, Collection<URI> repos, IProgressMonitor monitor) throws ProvisionException {
+		IProvisioningAgent agent = getAgent();
+		ProvisioningContext ctx = createProvisioningContext(repos, agent);
+
+		//find the ius to update and create the operation
+		UpdateOperation resultingOperation = new UpdateOperation(new ProvisioningSession(agent), toUpdate == null ? null : gatherIUs(listInstalledElements(false, monitor), toUpdate, false, monitor));
+		resultingOperation.setProvisioningContext(ctx);
+		resultingOperation.setProfileId(IProfileRegistry.SELF);
+
+		return resultingOperation;
+	}
+
+	/**
+	 * This factory method creates an {@link SynchronizeOperation} that will cause the current installation to exclusively contain the elements listed once executed.
+	 * @param toInstall the elements to install. This can not be null.
+	 * @param repos the repositories to install the elements from. 
+	 * @param monitor the progress monitor
+	 * @return an instance of {@link SynchronizeOperation}.
+	 */
+	public SynchronizeOperation createSynchronizeOperation(Collection<IVersionedId> toInstall, Collection<URI> repos, IProgressMonitor monitor) throws ProvisionException {
+		IProvisioningAgent agent = getAgent();
+		ProvisioningContext ctx = createProvisioningContext(repos, agent);
+
+		Collection<IInstallableUnit> iusToInstall;
+		if (toInstall == null)
+			iusToInstall = ctx.getMetadata(monitor).query(QueryUtil.createIUGroupQuery(), monitor).toUnmodifiableSet();
+		else
+			iusToInstall = gatherIUs(ctx.getMetadata(monitor), toInstall, false, monitor);
+
+		SynchronizeOperation resultingOperation = new SynchronizeOperation(new ProvisioningSession(agent), iusToInstall);
+		resultingOperation.setProvisioningContext(ctx);
+		resultingOperation.setProfileId(IProfileRegistry.SELF);
+
+		return resultingOperation;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileChangeOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileChangeOperation.java
index 63ed0e2..b05ae81 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileChangeOperation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileChangeOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,15 +8,15 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
-
 package org.eclipse.equinox.p2.operations;
 
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.p2.operations.*;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 
 /**
  * ProfileChangeOperation describes a provisioning operation that modifies a profile.
@@ -112,8 +112,12 @@ public abstract class ProfileChangeOperation implements IProfileChangeJob {
 		prepareToResolve();
 		makeResolveJob(monitor);
 		if (job != null) {
-			job.runModal(monitor);
+			IStatus status = job.runModal(monitor);
+			if (status.getSeverity() == IStatus.CANCEL)
+				return Status.CANCEL_STATUS;
 		}
+		// For anything other than cancellation, we examine the artifacts of the resolution and come
+		// up with an overall summary.
 		return getResolutionResult();
 
 	}
@@ -280,8 +284,9 @@ public abstract class ProfileChangeOperation implements IProfileChangeJob {
 	 * 
 	 * @see #hasResolved()
 	 * @see #getResolutionResult()
+	 * @since 2.1
 	 */
-	public ProfileChangeRequest getProfileChangeRequest() {
+	public IProfileChangeRequest getProfileChangeRequest() {
 		if (job != null)
 			return job.getProfileChangeRequest();
 		return null;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileModificationJob.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileModificationJob.java
index eeeb1de..fbab41a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileModificationJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProfileModificationJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.equinox.p2.operations;
 
-import org.eclipse.equinox.p2.engine.PhaseSetFactory;
-
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.p2.engine.*;
 
@@ -70,6 +68,8 @@ public class ProfileModificationJob extends ProvisioningJob implements IProfileC
 	 * @see org.eclipse.equinox.p2.operations.ProvisioningJob#runModal(org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	public IStatus runModal(IProgressMonitor monitor) {
+		if (monitor == null)
+			monitor = new NullProgressMonitor();
 		String task = taskName;
 		IStatus status = Status.OK_STATUS;
 		if (task == null)
@@ -97,12 +97,22 @@ public class ProfileModificationJob extends ProvisioningJob implements IProfileC
 	 * @see org.eclipse.equinox.p2.operations.ProvisioningJob#getRestartPolicy()
 	 */
 	public int getRestartPolicy() {
-		return restartPolicy;
+		//if we are installing into self we must always use the restart policy
+		if (IProfileRegistry.SELF.equals(profileId))
+			return restartPolicy;
+		//otherwise only apply restart policy if the profile being modified is the one that is currently running
+		IProfile profile = getSession().getProfileRegistry().getProfile(IProfileRegistry.SELF);
+		String id = profile == null ? null : profile.getProfileId();
+		if (id != null && profileId.equals(id)) {
+			return restartPolicy;
+		}
+		return ProvisioningJob.RESTART_NONE;
 	}
 
 	/**
 	 * Set the restart policy that describes whether restart is needed after
-	 * performing this job.
+	 * performing this job.  This policy will be consulted when the 
+	 * profile being changed is the profile of the running system.
 	 * 
 	 * @param policy an integer describing the restart policy
 	 * @see ProvisioningJob#RESTART_NONE
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProvisioningJob.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProvisioningJob.java
index 3e834b4..e0c57a8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProvisioningJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/ProvisioningJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RepositoryTracker.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RepositoryTracker.java
index fd2a99a..4947597 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RepositoryTracker.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RepositoryTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -112,15 +112,29 @@ public abstract class RepositoryTracker {
 		if (!localValidationStatus.isOK())
 			return localValidationStatus;
 
-		// Syntax was ok, now look for duplicates
+		if (contains(location, session))
+			return new Status(IStatus.ERROR, Activator.ID, IStatusCodes.INVALID_REPOSITORY_LOCATION, Messages.RepositoryTracker_DuplicateLocation, null);
+		return Status.OK_STATUS;
+	}
+
+	/**
+	 * Return a boolean indicating whether this tracker already contains the specified
+	 * repository location.
+	 * 
+	 * @param location the location in question
+	 * @param session the provisioning session providing the repository services
+	 * @since 2.1
+	 */
+	protected boolean contains(URI location, ProvisioningSession session) {
+		// This is a fallback implementation in the absence of a repository manager
+		// that would know what to do.
 		URI[] knownRepositories = getKnownRepositories(session);
 		for (int i = 0; i < knownRepositories.length; i++) {
 			if (URIUtil.sameURI(knownRepositories[i], location)) {
-				localValidationStatus = new Status(IStatus.ERROR, Activator.ID, IStatusCodes.INVALID_REPOSITORY_LOCATION, Messages.RepositoryTracker_DuplicateLocation, null);
-				break;
+				return true;
 			}
 		}
-		return localValidationStatus;
+		return false;
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/SynchronizeOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/SynchronizeOperation.java
new file mode 100644
index 0000000..3e9e4c4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/SynchronizeOperation.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ *  Copyright (c) 2011 Sonatype, Inc. and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     Sonatype, Inc. - initial API and implementation
+ *     IBM Corporation - Ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.p2.operations;
+
+import java.util.Collection;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.internal.p2.operations.Messages;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.engine.query.UserVisibleRootQuery;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.planner.ProfileInclusionRules;
+import org.eclipse.equinox.p2.query.QueryUtil;
+
+/**
+ * A {@link SynchronizeOperation} describes an operation that will modify the installation to 
+ * exclusively include the InstallableUnit mentioned. Note that all the Installable Units necessary
+ * to satisfy the dependencies of the Installable Units installed will also be installed.  
+ * 
+ * The following snippet shows how one might use an SynchronizeOperation to perform a synchronous resolution and
+ * then kick off an install in the background:
+ * 
+ * <pre>
+ * SynchronizeOperation op = new SynchronizeOperation(session, new IInstallableUnit [] { myIU });
+ * IStatus result = op.resolveModal(monitor);
+ * if (result.isOK()) {
+ *   op.getProvisioningJob(monitor).schedule();
+ * }
+ * </pre>
+ * 
+ * @since 2.1
+ * @see ProfileChangeOperation
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class SynchronizeOperation extends InstallOperation {
+
+	public SynchronizeOperation(ProvisioningSession session, Collection<IInstallableUnit> toInstall) {
+		super(session, toInstall);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.operations.ProfileChangeOperation#computeProfileChangeRequest(org.eclipse.core.runtime.MultiStatus, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected void computeProfileChangeRequest(MultiStatus status, IProgressMonitor monitor) {
+		request = ProfileChangeRequest.createByProfileId(session.getProvisioningAgent(), profileId);
+		IProfile profile;
+		SubMonitor sub = SubMonitor.convert(monitor, Messages.InstallOperation_ComputeProfileChangeProgress, toInstall.size());
+		profile = session.getProfileRegistry().getProfile(profileId);
+		request.removeAll(profile.query(new UserVisibleRootQuery(), sub).toUnmodifiableSet());
+		request.addAll(toInstall);
+		for (IInstallableUnit entryToInstall : toInstall) {
+			// If the user is installing a patch, we mark it optional.  This allows the patched IU to be updated later by removing the patch.
+			if (QueryUtil.isPatch(entryToInstall))
+				request.setInstallableUnitInclusionRules(entryToInstall, ProfileInclusionRules.createOptionalInclusionRule(entryToInstall));
+			else
+				request.setInstallableUnitProfileProperty(entryToInstall, IProfile.PROP_PROFILE_ROOT_IU, Boolean.toString(true));
+
+			sub.worked(1);
+		}
+		sub.done();
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UninstallOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UninstallOperation.java
index 45a0f03..85c1c02 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UninstallOperation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UninstallOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009-2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,16 +9,15 @@
  *     IBM Corporation - initial API and implementation
  *     Sonatype, Inc. - ongoing development
  ******************************************************************************/
-
 package org.eclipse.equinox.p2.operations;
 
 import java.net.URI;
 import java.util.Collection;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.p2.operations.IFailedStatusEvaluator;
 import org.eclipse.equinox.internal.p2.operations.Messages;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Update.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Update.java
index 8188710..3a071c3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Update.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Update.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UpdateOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UpdateOperation.java
index 03fee84..ba8dc9c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UpdateOperation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/UpdateOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009-2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,15 +9,14 @@
  *     IBM Corporation - initial API and implementation
  *     Sonatype, Inc. - ongoing development
  ******************************************************************************/
-
 package org.eclipse.equinox.p2.operations;
 
 import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.p2.operations.*;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.engine.query.UserVisibleRootQuery;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director.app/.classpath b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.classpath
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.p2.director.app/.classpath
copy to eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.classpath
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.externalToolBuilders/Ant tasks.launch b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.externalToolBuilders/Ant tasks.launch
new file mode 100644
index 0000000..e43662d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.externalToolBuilders/Ant tasks.launch	
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
+<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
+<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
+<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.equinox.p2.publisher.eclipse"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.equinox.p2.publisher.eclipse/scripts/buildExtraJAR.xml}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
+<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/org.eclipse.equinox.p2.publisher.eclipse}"/>
+</launchConfiguration>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.project b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.project
new file mode 100644
index 0000000..38c5955
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.project
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.p2.publisher.eclipse</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+			<triggers>full,incremental,</triggers>
+			<arguments>
+				<dictionary>
+					<key>LaunchConfigHandle</key>
+					<value><project>/.externalToolBuilders/Ant tasks.launch</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..409e92e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,364 @@
+#Thu Feb 17 10:12:47 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=800
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..6cff743
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,62 @@
+#Mon Apr 04 09:29:53 EDT 2011
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_core
+formatter_settings_version=11
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=;
+org.eclipse.jdt.ui.ondemandthreshold=3
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/eclipse/plugins/org.eclipse.pde.build/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.pde.core.prefs
similarity index 100%
copy from eclipse/plugins/org.eclipse.pde.build/.settings/org.eclipse.pde.core.prefs
copy to eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/.settings/org.eclipse.pde.core.prefs
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fde71f4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/META-INF/MANIFEST.MF
@@ -0,0 +1,60 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %bundleName
+Bundle-SymbolicName: org.eclipse.equinox.p2.publisher.eclipse;singleton:=true
+Bundle-ClassPath: pdepublishing.jar
+Eclipse-BundleShape: dir
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.pde.internal.publishing.Activator
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.eclipse.equinox.app;version="[1.0.0,2.0.0)",
+ org.eclipse.equinox.frameworkadmin;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.internal.frameworkadmin.equinox,
+ org.eclipse.equinox.internal.frameworkadmin.utils,
+ org.eclipse.equinox.internal.p2.artifact.repository,
+ org.eclipse.equinox.internal.p2.core.helpers,
+ org.eclipse.equinox.internal.p2.metadata,
+ org.eclipse.equinox.internal.p2.metadata.repository,
+ org.eclipse.equinox.internal.p2.publisher,
+ org.eclipse.equinox.internal.provisional.frameworkadmin,
+ org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.metadata;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.metadata.expression;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.publisher,
+ org.eclipse.equinox.p2.publisher.actions,
+ org.eclipse.equinox.p2.query;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.repository;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.repository.artifact;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.repository.artifact.spi;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.repository.metadata;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.p2.repository.spi;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.simpleconfigurator.manipulator;version="[2.0.0,3.0.0)",
+ org.eclipse.equinox.spi.p2.publisher,
+ org.eclipse.osgi.service.datalocation;version="1.3.0",
+ org.eclipse.osgi.service.environment;version="1.1.0",
+ org.eclipse.osgi.service.pluginconversion;version="1.0.0",
+ org.eclipse.osgi.service.resolver;version="1.5.0",
+ org.eclipse.osgi.util;version="1.1.0",
+ org.osgi.framework;version="1.3.0",
+ org.osgi.service.application;version="1.1.0",
+ org.osgi.service.packageadmin;version="1.2.0"
+Export-Package: org.eclipse.equinox.internal.p2.publisher.compatibility;x-internal:=true,
+ org.eclipse.equinox.internal.p2.publisher.eclipse;
+  x-friends:="org.eclipse.equinox.p2.directorywatcher,
+   org.eclipse.equinox.p2.extensionlocation,
+   org.eclipse.equinox.p2.repository.tools,
+   org.eclipse.equinox.p2.updatesite,
+   org.eclipse.pde.build",
+ org.eclipse.equinox.p2.publisher.eclipse;
+  x-friends:="org.eclipse.equinox.p2.directorywatcher,
+   org.eclipse.equinox.p2.extensionlocation,
+   org.eclipse.equinox.p2.touchpoint.eclipse,
+   org.eclipse.equinox.p2.updatesite,
+   org.eclipse.equinox.p2.repository.tools",
+ org.eclipse.pde.internal.build.publisher;x-friends:="org.eclipse.pde.build",
+ org.eclipse.pde.internal.publishing;x-friends:="org.eclipse.pde.build",
+ org.eclipse.pde.internal.swt.tools;x-internal:=true
+Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)"
diff --git a/eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/about.html b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/about.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.core.filesystem.linux.ppc/about.html
rename to eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/build.properties
new file mode 100644
index 0000000..5cf5c1b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/build.properties
@@ -0,0 +1,26 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+source.pdepublishing.jar = src/
+output.pdepublishing.jar = bin/
+bin.includes = META-INF/,\
+               plugin.properties,\
+               ant_tasks/pdepublishing-ant.jar,\
+               plugin.xml,\
+               about.html
+jars.compile.order = pdepublishing.jar,\
+                     ant_tasks/pdepublishing-ant.jar
+source.ant_tasks/pdepublishing-ant.jar = src_ant/
+output.ant_tasks/pdepublishing-ant.jar = bin_ant/
+extra.ant_tasks/pdepublishing-ant.jar = platform:/plugin/org.apache.ant
+jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar
+javacTarget=jsr14
+javacSource=1.5
+src.includes = about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/plugin.properties
new file mode 100644
index 0000000..bc56591
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/plugin.properties
@@ -0,0 +1,13 @@
+###############################################################################
+#  Copyright (c) 2007, 2011 IBM Corporation and others.
+#  All rights reserved. This program and the accompanying materials
+#  are made available under the terms of the Eclipse Public License v1.0
+#  which accompanies this distribution, and is available at
+#  http://www.eclipse.org/legal/epl-v10.html
+# 
+#  Contributors:
+#     IBM Corporation - initial API and implementation
+#     SAP AG - consolidation of publishers for PDE formats
+###############################################################################
+bundleName = Equinox Provisioning Publisher for Eclipse
+providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/plugin.xml b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/plugin.xml
new file mode 100644
index 0000000..1e90424
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/plugin.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.5"?>
+<plugin>
+	<extension id="org.eclipse.equinox.p2.publisher.InstallPublisher" point="org.eclipse.core.runtime.applications">
+		<application cardinality="1" thread="any" visible="true">
+			<run class="org.eclipse.equinox.p2.publisher.eclipse.InstallPublisherApplication" />
+		</application>
+	</extension>
+	<extension id="org.eclipse.equinox.p2.publisher.EclipseGenerator" point="org.eclipse.core.runtime.applications">
+		<application cardinality="1" thread="main" visible="true">
+			<run class="org.eclipse.equinox.internal.p2.publisher.compatibility.GeneratorApplication" />
+		</application>
+	</extension>
+	<extension id="org.eclipse.equinox.p2.publisher.ProductPublisher" point="org.eclipse.core.runtime.applications">
+		<application cardinality="1" thread="any" visible="true">
+			<run class="org.eclipse.equinox.p2.publisher.eclipse.ProductPublisherApplication" />
+		</application>
+	</extension>
+	<extension id="org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher" point="org.eclipse.core.runtime.applications">
+		<application cardinality="1" thread="any" visible="true">
+			<run class="org.eclipse.equinox.p2.publisher.eclipse.FeaturesAndBundlesPublisherApplication" />
+		</application>
+	</extension>
+
+	<extension point="org.eclipse.ant.core.antTasks">
+		<antTask
+			library="ant_tasks/pdepublishing-ant.jar"
+			name="p2.publisher"
+			class="org.eclipse.equinox.internal.p2.publisher.ant.PublisherTask">
+		</antTask>
+    <antTask
+          class="org.eclipse.equinox.internal.p2.publisher.ant.FeaturesAndBundlesPublisherTask"
+          library="ant_tasks/pdepublishing-ant.jar"
+          name="p2.publish.featuresAndBundles">
+    </antTask>
+    <antTask
+          class="org.eclipse.equinox.internal.p2.publisher.ant.ProductPublisherTask"
+          library="ant_tasks/pdepublishing-ant.jar"
+          name="p2.publish.product">
+    </antTask>
+	</extension>
+
+	<extension point="org.eclipse.ant.core.extraClasspathEntries">
+		<extraClasspathEntry library="ant_tasks/pdepublishing-ant.jar"/>
+	</extension>
+
+</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/pom.xml
new file mode 100644
index 0000000..3e8cfa7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>org.eclipse.equinox.p2-parent</artifactId>
+		<groupId>org.eclipse</groupId>
+		<version>0.0.1-SNAPSHOT</version>
+		<relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+	</parent>
+	
+	<groupId>org.eclipse</groupId>
+	<artifactId>org.eclipse.equinox.p2.publisher.eclipse</artifactId>
+	<version>1.0.0.qualifier</version>
+	<packaging>eclipse-plugin</packaging>
+</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/scripts/buildExtraJAR.xml b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/scripts/buildExtraJAR.xml
new file mode 100644
index 0000000..1c8886a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/scripts/buildExtraJAR.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.metadata.generator" default="default" basedir="..">
+
+	<target name="init" depends="properties">
+		<property name="plugin" value="org.eclipse.equinox.p2.publisher.eclipse"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<property name="build.result.folder" value="${basedir}/ant_tasks"/>
+		<property name="version.suffix" value="_1.0.0"/>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+	</target>
+
+	<target name="buildScripts" depends="init" description="Build from generated scripts">
+		<tstamp/>
+		<eclipse.buildScript elements="plugin@${plugin}" 
+			buildDirectory="${buildDirectory}" 
+			configInfo="*,*,*" 
+			baseLocation="${baseLocation}" 
+			buildingOSGi="true" 
+			outputUpdateJars="false"
+			pluginpath="${basedir}"
+			forceContextQualifier="z${DSTAMP}${TSTAMP}"
+			/>
+		<delete file="${basedir}/ant_tasks/pdepublishing-ant.jar" failonerror="false"/>
+		<ant antfile="${basedir}/build.xml" target="ant_tasks/pdepublishing-ant.jar"/>
+	</target>
+
+	<target name="default" description="Jar up the binaries that were compiled by the jdt builder" >
+		<mkdir dir="${basedir}/ant_tasks" />
+		<delete file="${basedir}/ant_tasks/pdepublishing-ant.jar" failonerror="false"/>
+		<jar destfile="${basedir}/ant_tasks/pdepublishing-ant.jar" basedir="bin_ant"/>
+	</target>
+</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/compatibility/GeneratorApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/compatibility/GeneratorApplication.java
new file mode 100644
index 0000000..9010d6d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/compatibility/GeneratorApplication.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ *  Copyright (c) 2010, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.p2.publisher.compatibility;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.equinox.internal.p2.publisher.Activator;
+import org.osgi.service.application.*;
+
+/**
+ * @since 1.1
+ */
+public class GeneratorApplication implements IApplication {
+	protected static final String APP_ID = "app.id"; //$NON-NLS-1$
+
+	public static final String UPDATE_SITE_APPLICATION = "org.eclipse.equinox.p2.publisher.UpdateSitePublisher"; //$NON-NLS-1$
+	public static final String INSTALL_APPLICATION = "org.eclipse.equinox.p2.publisher.InstallPublisher"; //$NON-NLS-1$
+	public static final String FEATURES_BUNDLES_APPLICATION = "org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher"; //$NON-NLS-1$
+
+	public Object start(IApplicationContext context) throws Exception {
+		return run((String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS));
+	}
+
+	public void stop() {
+		// TODO Auto-generated method stub
+	}
+
+	public Object run(String[] arguments) {
+		Map<String, Object> argumentMap = parseArguments(arguments);
+		return launchApplication(argumentMap);
+	}
+
+	protected Object launchApplication(Map<String, Object> applicationMap) {
+		String applicationId = (String) applicationMap.get(APP_ID);
+		String filter = "(service.pid=" + applicationId + ")"; //$NON-NLS-1$//$NON-NLS-2$
+		ApplicationDescriptor descriptor = (ApplicationDescriptor) ServiceHelper.getService(Activator.getContext(), ApplicationDescriptor.class.getName(), filter);
+		try {
+			ApplicationHandle handle = descriptor.launch(applicationMap);
+			return handle.getExitValue(0);
+		} catch (ApplicationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (InterruptedException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	private Map<String, Object> parseArguments(String[] arguments) {
+		Map<String, Object> applicationMap = new HashMap<String, Object>();
+		Map<String, String> args = new HashMap<String, String>(arguments.length);
+		for (int i = 0; i < arguments.length; i++) {
+			if (i == arguments.length - 1 || arguments[i + 1].startsWith(IGeneratorConstants.DASH))
+				args.put(arguments[i], null);
+			else
+				args.put(arguments[i], arguments[++i]);
+		}
+
+		//adjust the short forms
+		if (args.containsKey(IGeneratorConstants.AR))
+			args.put(IGeneratorConstants.ARTIFACT_REPO, args.remove(IGeneratorConstants.AR));
+		if (args.containsKey(IGeneratorConstants.MR))
+			args.put(IGeneratorConstants.METADATA_REPO, args.remove(IGeneratorConstants.MR));
+		if (args.containsKey(IGeneratorConstants.PA))
+			args.put(IGeneratorConstants.PUBLISH_ARTIFACTS, args.remove(IGeneratorConstants.PA));
+		if (args.containsKey(IGeneratorConstants.PAR))
+			args.put(IGeneratorConstants.PUBLISH_ATIFACT_REPOSITORY, args.remove(IGeneratorConstants.PAR));
+
+		if (args.containsKey(IGeneratorConstants.ROOT)) {
+			String rootId = args.remove(IGeneratorConstants.ROOT);
+			args.put(IGeneratorConstants.IU, rootId);
+			args.put(IGeneratorConstants.ID, rootId);
+		}
+
+		if (args.containsKey(IGeneratorConstants.ROOT_VERSION))
+			args.put(IGeneratorConstants.VERSION, args.remove(IGeneratorConstants.ROOT_VERSION));
+
+		String source = null;
+		// -inplace and -updateSite become -source, and imply -append
+		if (args.containsKey(IGeneratorConstants.UPDATE_SITE))
+			source = args.remove(IGeneratorConstants.UPDATE_SITE);
+		if (args.containsKey(IGeneratorConstants.INPLACE))
+			source = args.remove(IGeneratorConstants.INPLACE);
+		if (source != null) {
+			args.put(IGeneratorConstants.SOURCE, source);
+			args.put(IGeneratorConstants.APPEND, null);
+
+			//if not specified, repo locations are based on source
+			String repoLocation = URIUtil.toUnencodedString(new File(source).toURI());
+			if (!args.containsKey(IGeneratorConstants.ARTIFACT_REPO))
+				args.put(IGeneratorConstants.ARTIFACT_REPO, repoLocation);
+			if (!args.containsKey(IGeneratorConstants.METADATA_REPO))
+				args.put(IGeneratorConstants.METADATA_REPO, repoLocation);
+		}
+
+		File base = new File(args.get(IGeneratorConstants.SOURCE));
+		File configuration = new File(base, "configuration"); //$NON-NLS-1$
+		if (configuration.exists()) {
+			applicationMap.put(APP_ID, INSTALL_APPLICATION);
+		} else if (args.containsKey(IGeneratorConstants.SITE)) {
+			applicationMap.put(APP_ID, UPDATE_SITE_APPLICATION);
+		} else if (args.containsKey(IGeneratorConstants.CONFIG)) {
+			applicationMap.put(APP_ID, INSTALL_APPLICATION);
+		} else {
+			applicationMap.put(APP_ID, FEATURES_BUNDLES_APPLICATION);
+		}
+
+		applicationMap.put(IApplicationContext.APPLICATION_ARGS, flattenMap(args));
+		return applicationMap;
+	}
+
+	private String[] flattenMap(Map<String, String> map) {
+		ArrayList<String> list = new ArrayList<String>(map.size());
+		for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {
+			String key = iterator.next();
+			String value = map.get(key);
+			list.add(key);
+			if (value != null)
+				list.add(value);
+		}
+		return list.toArray(new String[list.size()]);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/compatibility/IGeneratorConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/compatibility/IGeneratorConstants.java
new file mode 100644
index 0000000..473cc00
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/compatibility/IGeneratorConstants.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ *  Copyright (c) 2010, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.p2.publisher.compatibility;
+
+/**
+ * @since 1.1
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IGeneratorConstants {
+	public static final String DASH = "-"; //$NON-NLS-1$
+
+	//arguments understood by the old metadata generator application
+	public static final String PUBLISH_ARTIFACTS = "-publishArtifacts"; //$NON-NLS-1$
+	public static final String PA = "-pa"; //$NON-NLS-1$
+	public static final String PUBLISH_ATIFACT_REPOSITORY = "-publishArtifactRepository"; //$NON-NLS-1$
+	public static final String PAR = "-par"; //$NON-NLS-1$
+	public static final String APPEND = "-append"; //$NON-NLS-1$
+	public static final String NO_DEFAULT_IUS = "-noDefaultIUs"; //$NON-NLS-1$
+	public static final String COMPRESS = "-compress"; //$NON-NLS-1$
+	public static final String REUSE_PACK200 = "-reusePack200Files"; //$NON-NLS-1$
+	public static final String SOURCE = "-source"; //$NON-NLS-1$
+	public static final String INPLACE = "-inplace"; //$NON-NLS-1$
+	public static final String CONFIG = "-config"; //$NON-NLS-1$
+	public static final String UPDATE_SITE = "-updateSite"; //$NON-NLS-1$
+	public static final String EXE = "-exe"; //$NON-NLS-1$
+	public static final String LAUNCHER_CONFIG = "-launcherConfig"; //$NON-NLS-1$
+	public static final String METADATA_REPO_NAME = "-metadataRepositoryName"; //$NON-NLS-1$
+	public static final String METADATA_REPO = "-metadataRepository"; //$NON-NLS-1$
+	public static final String MR = "-mr"; //$NON-NLS-1$
+	public static final String ARTIFACT_REPO = "-artifactRepository"; //$NON-NLS-1$
+	public static final String AR = "-ar"; //$NON-NLS-1$
+	public static final String ARTIFACT_REPO_NAME = "-artifactRepositoryName"; //$NON-NLS-1$
+	public static final String FLAVOR = "-flavor"; //$NON-NLS-1$
+	public static final String PRODUCT_FILE = "-productFile"; //$NON-NLS-1$
+	public static final String FEATURES = "-features"; //$NON-NLS-1$
+	public static final String BUNDLES = "-bundles"; //$NON-NLS-1$
+	public static final String BASE = "-base"; //$NON-NLS-1$
+	public static final String ROOT = "-root"; //$NON-NLS-1$
+	public static final String ROOT_VERSION = "-rootVersion"; //$NON-NLS-1$
+	public static final String P2_OS = "-p2.os"; //$NON-NLS-1$
+	public static final String SITE = "-site"; //$NON-NLS-1$
+	public static final String IU = "-iu"; //$NON-NLS-1$
+	public static final String ID = "-id"; //$NON-NLS-1$
+	public static final String VERSION = "-version"; //$NON-NLS-1$
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java
new file mode 100644
index 0000000..6622fa1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java
@@ -0,0 +1,656 @@
+/*******************************************************************************
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ * 	IBM Corporation - initial API and implementation
+ * 	Code 9 - Additional function and fixes
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import java.io.*;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.pde.internal.publishing.Utils;
+import org.eclipse.pde.internal.swt.tools.IconExe;
+
+/**
+ *
+ */
+public class BrandingIron {
+	private static final String MARKER_NAME = "%EXECUTABLE_NAME%"; //$NON-NLS-1$
+	private static final String BUNDLE_NAME = "%BUNDLE_NAME%"; //$NON-NLS-1$
+	private static final String ICON_NAME = "%ICON_NAME%"; //$NON-NLS-1$
+	private static final String MARKER_KEY = "<key>CFBundleExecutable</key>"; //$NON-NLS-1$
+	private static final String BUNDLE_KEY = "<key>CFBundleName</key>"; //$NON-NLS-1$
+	private static final String BUNDLE_ID_KEY = "<key>CFBundleIdentifier</key>"; //$NON-NLS-1$
+	private static final String BUNDLE_INFO_KEY = "<key>CFBundleGetInfoString</key>"; //$NON-NLS-1$
+	private static final String BUNDLE_VERSION_KEY = "<key>CFBundleVersion</key>"; //$NON-NLS-1$
+	private static final String BUNDLE_SHORT_VERSION_KEY = "<key>CFBundleShortVersionString</key>"; //$NON-NLS-1$
+	private static final String ICON_KEY = "<key>CFBundleIconFile</key>"; //$NON-NLS-1$
+	private static final String STRING_START = "<string>"; //$NON-NLS-1$
+	private static final String STRING_END = "</string>"; //$NON-NLS-1$
+	private static final String XDOC_ICON = "-Xdock:icon=../Resources/Eclipse.icns"; //$NON-NLS-1$
+	private static final String XDOC_ICON_PREFIX = "-Xdock:icon=../Resources/"; //$NON-NLS-1$
+
+	private String[] icons = null;
+	private String name;
+	private String description;
+	private String os = "win32"; //$NON-NLS-1$
+	private boolean brandIcons = true;
+	private String id;
+	private Version version;
+
+	public BrandingIron() {
+	}
+
+	public void setName(String value) {
+		name = value;
+	}
+
+	public void setIcons(String[] value) {
+		icons = (value == null || value.length == 0) ? null : value;
+	}
+
+	public void setIcons(String value) {
+		icons = org.eclipse.equinox.internal.frameworkadmin.utils.Utils.getTokens(value, ",");//$NON-NLS-1$
+		if (icons[0].startsWith("${")) { //$NON-NLS-1$
+			if (icons.length > 1) {
+				String[] temp = new String[icons.length - 1];
+				System.arraycopy(icons, 1, temp, 0, temp.length);
+				icons = temp;
+			} else {
+				icons = null;
+			}
+		}
+		//trim whitespace
+		if (icons != null) {
+			for (int i = 0; i < icons.length; i++) {
+				icons[i] = icons[i].trim();
+			}
+		}
+	}
+
+	public void brand(ExecutablesDescriptor descriptor) throws Exception {
+		// if the name property is not set it will be ${launcher.name} so just bail.
+		if (name.startsWith("${")) //$NON-NLS-1$
+			return;
+
+		if (icons == null || icons[0].startsWith("${")) //$NON-NLS-1$
+			brandIcons = false;
+
+		File root = descriptor.getLocation();
+
+		// if the root does not exists (happens in some packaging cases) or 
+		// there is already a file with target name and we don't need to update its icons, don't do anything
+		String testName = os.equals("win32") ? name + ".exe" : name; //$NON-NLS-1$ //$NON-NLS-2$
+		if (!root.exists() || (!brandIcons && new File(root, testName).exists()))
+			return;
+
+		// make sure the descriptor's location is a canonical path otherwise
+		// removing files from it may fail (this happens notably on Windows)
+		try {
+			root = root.getCanonicalFile();
+		} catch (IOException e) {
+			// try to live with an absolute path
+			root = root.getAbsoluteFile();
+		}
+		descriptor.setLocation(root);
+
+		if ("win32".equals(os)) //$NON-NLS-1$
+			brandWindows(descriptor);
+		else if ("linux".equals(os)) //$NON-NLS-1$
+			brandLinux(descriptor);
+		else if ("solaris".equals(os)) //$NON-NLS-1$
+			brandSolaris(descriptor);
+		else if ("macosx".equals(os)) //$NON-NLS-1$
+			brandMac(descriptor);
+		else if ("aix".equals(os)) //$NON-NLS-1$
+			brandAIX(descriptor);
+		else if ("hpux".equals(os)) //$NON-NLS-1$
+			brandHPUX(descriptor);
+		else
+			renameLauncher(descriptor);
+		descriptor.setExecutableName(name, true);
+	}
+
+	private void brandAIX(ExecutablesDescriptor descriptor) {
+		renameLauncher(descriptor);
+	}
+
+	private void brandHPUX(ExecutablesDescriptor descriptor) {
+		renameLauncher(descriptor);
+	}
+
+	private void brandLinux(ExecutablesDescriptor descriptor) throws Exception {
+		renameLauncher(descriptor);
+		if (brandIcons) {
+			File icon = null;
+			if (icons.length > 0) {
+				for (int i = 0; i < icons.length; i++) {
+					if (icons[i].toLowerCase().endsWith(".xpm")) { //$NON-NLS-1$
+						icon = new File(icons[i]);
+						break;
+					}
+				}
+			}
+			if (icon != null) {
+				File targetIcon = new File(descriptor.getLocation(), "icon.xpm"); //$NON-NLS-1$
+				Utils.copy(icon, targetIcon);
+				descriptor.addFile(targetIcon);
+			}
+		}
+	}
+
+	private void brandSolaris(ExecutablesDescriptor descriptor) throws Exception {
+		renameLauncher(descriptor);
+		if (brandIcons == false)
+			return;
+
+		File root = descriptor.getLocation();
+		for (int i = 0; i < icons.length; i++) {
+			String icon = icons[i];
+
+			int iconNameLength = icon.length();
+			if (iconNameLength < 5)
+				continue;
+			String extension = icon.substring(iconNameLength - 5);
+			// check if the extension is one of: .l.pm, .m.pm, .s.pm, .t.pm
+			if (extension.charAt(0) == '.' && extension.endsWith(".pm") && "lmst".indexOf(extension.charAt(1)) >= 0) { //$NON-NLS-1$ //$NON-NLS-2$
+				File targetIcon = new File(root, name + extension);
+				Utils.copy(new File(icon), targetIcon);
+				descriptor.addFile(targetIcon);
+			}
+		}
+	}
+
+	private void brandMac(ExecutablesDescriptor descriptor) throws Exception {
+		//Initially the files are in: <root>/Eclipse.app/ 
+		//and they must appear in <root>/MyAppName.app/
+		//Because java does not support the rename of a folder, files are copied.
+
+		//Initialize the target folders
+		String appName = name;
+		if (appName.equals("eclipse")) //$NON-NLS-1$
+			appName = "Eclipse"; //$NON-NLS-1$
+		else if (appName.equals("launcher")) //$NON-NLS-1$
+			appName = "Launcher"; //$NON-NLS-1$
+
+		File root = descriptor.getLocation();
+
+		File target = new File(root, appName + ".app/Contents"); //$NON-NLS-1$
+		target.mkdirs();
+		new File(target, "MacOS").mkdirs(); //$NON-NLS-1$
+		new File(target, "Resources").mkdirs(); //$NON-NLS-1$
+
+		File initialRoot = new File(root, "Launcher.app/Contents"); //$NON-NLS-1$
+		if (!initialRoot.exists())
+			initialRoot = new File(root, "launcher.app/Contents"); //$NON-NLS-1$
+		if (!initialRoot.exists())
+			initialRoot = new File(root, "Eclipse.app/Contents"); //$NON-NLS-1$
+		if (!initialRoot.exists())
+			initialRoot = new File(root, "eclipse.app/Contents"); //$NON-NLS-1$
+		if (!initialRoot.exists())
+			throw new FileNotFoundException("cannot find launcher root (Eclipse.app or Launcher.app)"); //$NON-NLS-1$
+		// use the canonical rep to avoid possible issues from case-insensitive file systems
+		initialRoot = initialRoot.getCanonicalFile();
+		copyMacLauncher(descriptor, initialRoot, target);
+		String iconName = ""; //$NON-NLS-1$
+		if (brandIcons) {
+			File icon = null;
+			for (int i = 0; i < icons.length; i++) {
+				if (icons[i].toLowerCase().endsWith(".icns")) { //$NON-NLS-1$
+					icon = new File(icons[i]);
+					if (icon.exists()) {
+						break;
+					}
+				}
+			}
+			if (icon != null) {
+				iconName = icon.getName(); // was previously: name + ".icns"
+				File initialIcon = new File(initialRoot, "Resources/Eclipse.icns"); //$NON-NLS-1$
+				try {
+					// canonicalize to ensure case matches
+					initialIcon = initialIcon.getCanonicalFile();
+				} catch (IOException e) { /*ignore*/
+				}
+				File targetIcon = new File(target, "Resources/" + iconName); //$NON-NLS-1$
+
+				initialIcon.delete();
+				descriptor.removeFile(initialIcon);
+				Utils.copy(icon, targetIcon);
+				descriptor.addFile(targetIcon);
+			}
+		}
+		copyMacIni(descriptor, initialRoot, target, iconName);
+		modifyInfoPListFile(descriptor, initialRoot, target, iconName);
+		File splashApp = new File(initialRoot, "Resources/Splash.app"); //$NON-NLS-1$
+		if (splashApp.exists()) {
+			brandMacSplash(descriptor, initialRoot, target, iconName);
+		}
+
+		// move over any files remaining in the original folder
+		moveContents(descriptor, initialRoot, target);
+		initialRoot.getParentFile().delete(); // initialRoot is xxx.app/Contents
+	}
+
+	/**
+	 * Brand the splash.app Info.plist and  link or copy the mac launcher.
+	 * It is assumed that the mac launcher has been branded already.
+	 * @param descriptor
+	 * @param initialRoot
+	 * @param target
+	 * @param iconName
+	 */
+	private void brandMacSplash(ExecutablesDescriptor descriptor, File initialRoot, File target, String iconName) {
+		String splashContents = "Resources/Splash.app/Contents"; //$NON-NLS-1$
+		modifyInfoPListFile(descriptor, new File(initialRoot, splashContents), new File(target, splashContents), iconName);
+
+		//link the MacOS launcher for the splash app
+		String splashMacOS = splashContents + "/MacOS"; //$NON-NLS-1$
+		File macOSDir = new File(target, "MacOS"); //$NON-NLS-1$
+		File splashMacOSDir = new File(target, splashMacOS);
+
+		splashMacOSDir.mkdirs();
+
+		File targetLauncher = new File(splashMacOSDir, name);
+
+		int result = -1;
+		String osName = System.getProperty("os.name"); //$NON-NLS-1$
+		if (osName != null && !osName.startsWith("Windows")) { //$NON-NLS-1$
+			try {
+				String[] command = new String[] {"ln", "-sf", "../../../MacOS/" + name, name}; //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
+				Process proc = Runtime.getRuntime().exec(command, null, splashMacOSDir);
+				result = proc.waitFor();
+			} catch (IOException e) {
+				// ignore
+			} catch (InterruptedException e) {
+				// ignore
+			}
+		}
+
+		if (result != 0) {
+			//ln failed, or we are on windows, just copy the executable instead
+			try {
+				Utils.copy(new File(macOSDir, name), targetLauncher);
+				try {
+					Runtime.getRuntime().exec(new String[] {"chmod", "755", targetLauncher.getAbsolutePath()}); //$NON-NLS-1$ //$NON-NLS-2$
+				} catch (IOException e) {
+					// ignore
+				}
+			} catch (IOException e) {
+				System.out.println("Could not copy macosx splash launcher"); //$NON-NLS-1$
+			}
+		}
+
+		File initialLauncher = findLauncher(new File(initialRoot, splashMacOS));
+		if (initialLauncher != null) {
+			try {
+				if (!initialLauncher.getCanonicalFile().equals(targetLauncher.getCanonicalFile()))
+					initialLauncher.delete();
+			} catch (IOException e) {
+				// ignore
+			}
+			descriptor.removeFile(initialLauncher);
+		}
+		descriptor.addFile(targetLauncher);
+	}
+
+	private File findLauncher(File root) {
+		for (String launcherName : new String[] {"launcher", "eclipse"}) { //$NON-NLS-1$ //$NON-NLS-2$
+			File launcher = new File(root, launcherName);
+			if (launcher.exists())
+				return launcher;
+		}
+		return null;
+	}
+
+	private void moveContents(ExecutablesDescriptor descriptor, File source, File target) {
+		if (!source.exists())
+			return;
+		try {
+			source = source.getCanonicalFile();
+			target = target.getCanonicalFile();
+		} catch (IOException e) {
+			System.out.println("Could not copy macosx resources."); //$NON-NLS-1$
+			return;
+		}
+		if (source.equals(target))
+			return;
+
+		target.getParentFile().mkdirs();
+		if (source.isDirectory()) {
+			target.mkdirs();
+			File[] contents = source.listFiles();
+			for (int i = 0; i < contents.length; i++) {
+				File dest = new File(target, contents[i].getName());
+				if (contents[i].isFile()) {
+					contents[i].renameTo(dest);
+					descriptor.replace(contents[i], dest);
+				} else
+					moveContents(descriptor, contents[i], dest);
+			}
+			source.delete();
+		} else {
+			source.renameTo(target);
+			descriptor.replace(source, target);
+		}
+	}
+
+	private void brandWindows(ExecutablesDescriptor descriptor) throws Exception {
+		File root = descriptor.getLocation();
+		File templateLauncher = new File(root, name + ".exe"); //$NON-NLS-1$
+		if (!templateLauncher.exists())
+			templateLauncher = new File(root, "launcher.exe"); //$NON-NLS-1$
+		if (!templateLauncher.exists())
+			templateLauncher = new File(root, "eclipse.exe"); //$NON-NLS-1$
+		if (brandIcons) {
+			if (templateLauncher.exists()) {
+				String[] args = new String[icons.length + 1];
+				args[0] = templateLauncher.getAbsolutePath();
+				System.arraycopy(icons, 0, args, 1, icons.length);
+				IconExe.main(args);
+			} else {
+				System.out.println("Could not find executable to brand"); //$NON-NLS-1$
+			}
+		}
+		File targetLauncher = new File(root, name + ".exe"); //$NON-NLS-1$
+		if (templateLauncher.exists() && !templateLauncher.getName().equals(name + ".exe")) { //$NON-NLS-1$
+			templateLauncher.renameTo(targetLauncher);
+			descriptor.replace(templateLauncher, targetLauncher);
+		}
+		descriptor.setExecutableName(name, true);
+	}
+
+	private void renameLauncher(ExecutablesDescriptor descriptor) {
+		File root = descriptor.getLocation();
+		File launcher = findLauncher(root);
+		if (launcher == null)
+			return;
+		File targetLauncher = new File(root, name);
+		launcher.renameTo(targetLauncher);
+		descriptor.replace(launcher, targetLauncher);
+		descriptor.setExecutableName(name, true);
+	}
+
+	private void copyMacLauncher(ExecutablesDescriptor descriptor, File initialRoot, File target) {
+		File launcher = getCanonicalFile(new File(initialRoot, "MacOS/launcher")); //$NON-NLS-1$
+		File eclipseLauncher = getCanonicalFile(new File(initialRoot, "MacOS/eclipse")); //$NON-NLS-1$
+		File targetFile = getCanonicalFile(new File(target, "MacOS/" + name)); //$NON-NLS-1$
+		if (!launcher.exists()) {
+			launcher = eclipseLauncher;
+		} else if (eclipseLauncher.exists() && !targetFile.equals(eclipseLauncher)) {
+			//we may actually have both if exporting from the mac
+			eclipseLauncher.delete();
+			descriptor.removeFile(eclipseLauncher);
+		}
+		if (!targetFile.equals(launcher)) {
+			try {
+				Utils.copy(launcher, targetFile);
+			} catch (IOException e) {
+				System.out.println("Could not copy macosx launcher"); //$NON-NLS-1$
+				return;
+			}
+			launcher.delete();
+			launcher.getParentFile().delete();
+			descriptor.replace(launcher, targetFile);
+		}
+		try {
+			//Force the executable bit on the exe because it has been lost when copying the file
+			Runtime.getRuntime().exec(new String[] {"chmod", "755", targetFile.getAbsolutePath()}); //$NON-NLS-1$ //$NON-NLS-2$
+		} catch (IOException e) {
+			//ignore
+		}
+		descriptor.setExecutableName(name, false);
+	}
+
+	private File getCanonicalFile(File file) {
+		try {
+			return file.getCanonicalFile();
+		} catch (IOException e) {
+			return file;
+		}
+	}
+
+	private void copyMacIni(ExecutablesDescriptor descriptor, File initialRoot, File target, String iconName) {
+		String brandedIniName = "MacOS/" + name + ".ini"; //$NON-NLS-1$//$NON-NLS-2$
+		// 4 possibilities, in order of preference:
+		// rcp.app/Contents/MacOS/rcp.ini   		(targetFile)
+		// Eclipse.app/Contents/MacOS/rcp.ini		(brandedIni)
+		// Eclipse.app/Contents/MacOS/eclipse.ini	(ini)
+		// Eclipse.app/Contents/MacOS/Eclipse.ini	(ini2)
+		File targetFile = getCanonicalFile(new File(target, brandedIniName));
+		File brandedIni = getCanonicalFile(new File(initialRoot, brandedIniName));
+		File ini = getCanonicalFile(new File(initialRoot, "MacOS/eclipse.ini")); //$NON-NLS-1$
+		File ini2 = getCanonicalFile(new File(initialRoot, "MacOS/Eclipse.ini")); //$NON-NLS-1$
+
+		if (targetFile.exists()) {
+			//an ini already exists at the target, use that
+			if (brandedIni.exists() && !brandedIni.equals(targetFile)) {
+				brandedIni.delete();
+				descriptor.removeFile(brandedIni);
+			}
+			if (ini.exists() && !ini.equals(targetFile)) {
+				ini.delete();
+				descriptor.removeFile(ini);
+			}
+			if (ini2.exists() && !ini2.equals(targetFile)) {
+				ini2.delete();
+				descriptor.removeFile(ini2);
+			}
+			ini = targetFile;
+		} else if (brandedIni.exists()) {
+			//take the one that is already branded
+			if (ini.exists() && !ini.equals(brandedIni)) {
+				ini.delete();
+				descriptor.removeFile(ini);
+			}
+			if (ini2.exists() && !ini2.equals(brandedIni)) {
+				ini2.delete();
+				descriptor.removeFile(ini2);
+			}
+			ini = brandedIni;
+		} else {
+			if (ini.exists()) {
+				if (ini2.exists() && !ini2.equals(ini)) {
+					// this should not happen really
+					System.out.printf("Found both %s and %s - discarding the latter", ini.getAbsolutePath(), ini2.getAbsolutePath()); //$NON-NLS-1$
+					ini2.delete();
+					descriptor.removeFile(ini2);
+				}
+			} else if (ini2.exists()) {
+				ini = ini2;
+			} else
+				return;
+		}
+
+		StringBuffer buffer;
+		try {
+			buffer = readFile(ini);
+		} catch (IOException e) {
+			System.out.println("Impossible to brand ini file"); //$NON-NLS-1$
+			return;
+		}
+
+		if (iconName.length() > 0) {
+			int xdoc = scan(buffer, 0, XDOC_ICON);
+			if (xdoc != -1) {
+				String icns = XDOC_ICON_PREFIX + iconName;
+				buffer.replace(xdoc, xdoc + XDOC_ICON.length(), icns);
+			}
+		}
+
+		try {
+			transferStreams(new ByteArrayInputStream(buffer.toString().getBytes()), new FileOutputStream(targetFile));
+			if (!ini.equals(targetFile)) {
+				ini.delete();
+				descriptor.replace(ini, targetFile);
+			}
+		} catch (FileNotFoundException e) {
+			System.out.println("Impossible to brand ini file"); //$NON-NLS-1$
+			return;
+		} catch (IOException e) {
+			System.out.println("Impossible to brand ini file"); //$NON-NLS-1$
+			return;
+		}
+	}
+
+	private void modifyInfoPListFile(ExecutablesDescriptor descriptor, File initialRoot, File targetRoot, String iconName) {
+		File infoPList = new File(initialRoot, "Info.plist"); //$NON-NLS-1$
+		StringBuffer buffer;
+		try {
+			buffer = readFile(infoPList);
+		} catch (IOException e) {
+			System.out.println("Impossible to brand info.plist file"); //$NON-NLS-1$
+			return;
+		}
+		int exePos = scan(buffer, 0, MARKER_NAME);
+		if (exePos != -1)
+			buffer.replace(exePos, exePos + MARKER_NAME.length(), name);
+		else {
+			replacePlistValue(buffer, MARKER_KEY, name);
+		}
+
+		int bundlePos = scan(buffer, 0, BUNDLE_NAME);
+		if (bundlePos != -1)
+			buffer.replace(bundlePos, bundlePos + BUNDLE_NAME.length(), name);
+		else {
+			replacePlistValue(buffer, BUNDLE_KEY, name);
+		}
+
+		replacePlistValue(buffer, BUNDLE_ID_KEY, id);
+		replacePlistValue(buffer, BUNDLE_INFO_KEY, description);
+		if (version != null) {
+			// CFBundleShortVersionString is to be 3 segments only
+			// http://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-111349
+			StringBuffer sv = new StringBuffer(version.getSegment(0).toString());
+			sv.append('.');
+			sv.append(version.getSegmentCount() > 1 ? version.getSegment(1).toString() : "0"); //$NON-NLS-1$
+			sv.append('.');
+			sv.append(version.getSegmentCount() > 2 ? version.getSegment(2).toString() : "0"); //$NON-NLS-1$
+			replacePlistValue(buffer, BUNDLE_VERSION_KEY, version.toString());
+			replacePlistValue(buffer, BUNDLE_SHORT_VERSION_KEY, sv.toString());
+		}
+
+		int iconPos = scan(buffer, 0, ICON_NAME);
+		if (iconPos != -1)
+			buffer.replace(iconPos, iconPos + ICON_NAME.length(), iconName);
+		else {
+			replacePlistValue(buffer, ICON_KEY, iconName);
+		}
+
+		File target = new File(targetRoot, "Info.plist"); //$NON-NLS-1$;
+		try {
+			target.getParentFile().mkdirs();
+			transferStreams(new ByteArrayInputStream(buffer.toString().getBytes()), new FileOutputStream(target));
+		} catch (FileNotFoundException e) {
+			System.out.println("Impossible to brand info.plist file"); //$NON-NLS-1$
+			return;
+		} catch (IOException e) {
+			System.out.println("Impossible to brand info.plist file"); //$NON-NLS-1$
+			return;
+		}
+		try {
+			if (!infoPList.getCanonicalFile().equals(target.getCanonicalFile()))
+				infoPList.delete();
+		} catch (IOException e) {
+			//ignore
+		}
+		descriptor.replace(infoPList, target);
+	}
+
+	private void replacePlistValue(StringBuffer buffer, String key, String value) {
+		if (value == null) {
+			return;
+		}
+		int exePos = scan(buffer, 0, key);
+		if (exePos != -1) {
+			int start = scan(buffer, exePos + key.length(), STRING_START);
+			int end = scan(buffer, start + STRING_START.length(), STRING_END);
+			if (start > -1 && end > start) {
+				buffer.replace(start + STRING_START.length(), end, value);
+			}
+		}
+	}
+
+	private int scan(StringBuffer buf, int start, String targetName) {
+		return scan(buf, start, new String[] {targetName});
+	}
+
+	private int scan(StringBuffer buf, int start, String[] targets) {
+		for (int i = start; i < buf.length(); i++) {
+			for (int j = 0; j < targets.length; j++) {
+				if (i < buf.length() - targets[j].length()) {
+					String match = buf.substring(i, i + targets[j].length());
+					if (targets[j].equalsIgnoreCase(match))
+						return i;
+				}
+			}
+		}
+		return -1;
+	}
+
+	private StringBuffer readFile(File targetName) throws IOException {
+		InputStreamReader reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(targetName)));
+		StringBuffer result = new StringBuffer();
+		char[] buf = new char[4096];
+		int count;
+		try {
+			count = reader.read(buf, 0, buf.length);
+			while (count != -1) {
+				result.append(buf, 0, count);
+				count = reader.read(buf, 0, buf.length);
+			}
+		} finally {
+			try {
+				reader.close();
+			} catch (IOException e) {
+				// ignore exceptions here
+			}
+		}
+		return result;
+	}
+
+	private void transferStreams(InputStream source, OutputStream destination) throws IOException {
+		source = new BufferedInputStream(source);
+		destination = new BufferedOutputStream(destination);
+		try {
+			byte[] buffer = new byte[8192];
+			while (true) {
+				int bytesRead = -1;
+				if ((bytesRead = source.read(buffer)) == -1)
+					break;
+				destination.write(buffer, 0, bytesRead);
+			}
+		} finally {
+			try {
+				source.close();
+			} catch (IOException e) {
+				// ignore
+			}
+			try {
+				destination.close();
+			} catch (IOException e) {
+				// ignore
+			}
+		}
+	}
+
+	public void setOS(String value) {
+		os = value;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public void setVersion(Version version) {
+		this.version = version;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/DataLoader.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/DataLoader.java
new file mode 100644
index 0000000..3ab256e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/DataLoader.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.*;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser;
+import org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.*;
+import org.eclipse.equinox.simpleconfigurator.manipulator.SimpleConfiguratorManipulator;
+import org.eclipse.pde.internal.publishing.Activator;
+import org.osgi.framework.Constants;
+
+public class DataLoader {
+
+	private final static String FILTER_OBJECTCLASS = "(" + Constants.OBJECTCLASS + "=" + FrameworkAdmin.class.getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	private final static String filterFwName = "(" + FrameworkAdmin.SERVICE_PROP_KEY_FW_NAME + "=Equinox)"; //$NON-NLS-1$ //$NON-NLS-2$
+	//String filterFwVersion = "(" + FrameworkAdmin.SERVICE_PROP_KEY_FW_VERSION + "=" + props.getProperty("equinox.fw.version") + ")";
+	private final static String filterLauncherName = "(" + FrameworkAdmin.SERVICE_PROP_KEY_LAUNCHER_NAME + "=Eclipse.exe)"; //$NON-NLS-1$ //$NON-NLS-2$
+	//String filterLauncherVersion = "(" + FrameworkAdmin.SERVICE_PROP_KEY_LAUNCHER_VERSION + "=" + props.getProperty("equinox.launcher.version") + ")";
+	private final static String frameworkAdminFillter = "(&" + FILTER_OBJECTCLASS + filterFwName + filterLauncherName + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+
+	private static final String ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL = "org.eclipse.equinox.simpleconfigurator.configUrl"; //$NON-NLS-1$
+
+	private Manipulator manipulator;
+	private final File configurationLocation;
+
+	/**
+	 * 
+	 * @param configurationLocation configuration file (i.e. config.ini).
+	 * @param executableLocation executable file (i.e. eclipse.exe). 
+	 */
+	public DataLoader(File configurationLocation, File executableLocation) {
+		this.configurationLocation = configurationLocation;
+		initializeFrameworkManipulator(configurationLocation.getParentFile(), executableLocation);
+	}
+
+	private void initializeFrameworkManipulator(File config, File executable) {
+		getFrameworkManipulator();
+
+		LauncherData launcherData = manipulator.getLauncherData();
+		launcherData.setFwPersistentDataLocation(config, true);
+		launcherData.setLauncher(executable);
+		if (executable == null)
+			launcherData.setHome(config.getParentFile());
+		try {
+			manipulator.load();
+		} catch (IllegalStateException e2) {
+			// TODO Auto-generated catch block
+			e2.printStackTrace();
+		} catch (FrameworkAdminRuntimeException e2) {
+			// TODO Auto-generated catch block
+			e2.printStackTrace();
+		} catch (IOException e2) {
+			// TODO Auto-generated catch block
+			e2.printStackTrace();
+		}
+	}
+
+	public ConfigData getConfigData() {
+		if (manipulator == null)
+			return null;
+
+		EquinoxFwConfigFileParser parser = new EquinoxFwConfigFileParser(Activator.getContext());
+		try {
+			if (configurationLocation != null && configurationLocation.exists())
+				parser.readFwConfig(manipulator, configurationLocation);
+		} catch (IOException e) {
+			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error loading config.", e)); //$NON-NLS-1$ //TODO: Fix error string
+		} catch (URISyntaxException e) {
+			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error loading config.", e)); //$NON-NLS-1$ //TODO: Fix error string
+		}
+		ConfigData data = manipulator.getConfigData();
+		String value = data.getProperty(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL);
+		if (value != null) {
+			try {
+				//config.ini uses simpleconfigurator, read the bundles.info and replace the bundle infos
+				SimpleConfiguratorManipulator simpleManipulator = (SimpleConfiguratorManipulator) ServiceHelper.getService(Activator.getContext(), SimpleConfiguratorManipulator.class.getName());
+				//input stream will be buffered and closed for us
+				BundleInfo[] bundleInfos = simpleManipulator.loadConfiguration(new URL(value).openStream(), null);
+				data.setBundles(bundleInfos);
+			} catch (MalformedURLException e1) {
+				// ignore
+			} catch (IOException e1) {
+				// ignore
+			}
+			try {
+				data.setProperty(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL, EquinoxManipulatorImpl.makeRelative(value, configurationLocation.toURL()));
+			} catch (MalformedURLException e) {
+				//ignore
+			}
+		}
+
+		return data;
+	}
+
+	public LauncherData getLauncherData() {
+		return manipulator == null ? null : manipulator.getLauncherData();
+	}
+
+	/**
+	 * Obtains the framework manipulator instance. Throws an exception
+	 * if it could not be created.
+	 */
+	private void getFrameworkManipulator() {
+		FrameworkAdmin admin = getFrameworkAdmin();
+		if (admin == null)
+			throw new RuntimeException("Framework admin service not found"); //$NON-NLS-1$
+		manipulator = admin.getManipulator();
+		if (manipulator == null)
+			throw new RuntimeException("Framework manipulator not found"); //$NON-NLS-1$
+	}
+
+	private FrameworkAdmin getFrameworkAdmin() {
+		return (FrameworkAdmin) ServiceHelper.getService(Activator.getContext(), FrameworkAdmin.class.getName(), frameworkAdminFillter);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java
new file mode 100644
index 0000000..77fb4bd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java
@@ -0,0 +1,265 @@
+/*******************************************************************************
+ *  Copyright (c) 2008, 2011 EclipseSource and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *      Eclipse Source - initial API and implementation
+ *      IBM Corporation - ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import java.io.*;
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.p2.publisher.AbstractPublisherAction;
+import org.eclipse.osgi.service.environment.Constants;
+import org.eclipse.pde.internal.publishing.Activator;
+
+public class ExecutablesDescriptor {
+
+	private File location;
+	private Set<File> files;
+	private String executableName;
+	private boolean temporary = false;
+	private final String os;
+	private File iniFile;
+
+	public static File findExecutable(String os, File root, String baseName) {
+		// TODO this may need to get more intelligent
+		// if MacOS its going to be baseName.app/Contents/MacOS/baseName
+		if (Constants.OS_MACOSX.equals(os)) {
+			return new File(root, baseName + ".app/Contents/MacOS/" + baseName); //$NON-NLS-1$
+		}
+		// if it is not Mac and not Windows it must be a UNIX flavor
+		if (!Constants.OS_WIN32.equals(os)) {
+			return new File(root, baseName);
+		}
+		// otherwise we are left with windows
+		return new File(root, baseName + ".exe"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Return the root directory of the executables folder for the given configSpec.  The folder
+	 * is expected to be part of the standard Eclipse executables feature whose structure is 
+	 * embedded here.
+	 * @param executablesFeatureLocation the location of the executables feature
+	 * @param configSpec the configuration to lookup
+	 * @return the root location of the requested executables
+	 */
+	public static ExecutablesDescriptor createExecutablesFromFeature(File executablesFeatureLocation, String configSpec) {
+		// TODO consider handling JAR'd features here...
+		if (executablesFeatureLocation == null || !executablesFeatureLocation.exists())
+			return null;
+		String[] config = AbstractPublisherAction.parseConfigSpec(configSpec);
+		File result = new File(executablesFeatureLocation, "bin/" + config[0] + "/" + config[1] + "/" + config[2]); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		if (!result.exists())
+			return null;
+		return new ExecutablesDescriptor(config[1], "launcher", result, new File[] {result}); //$NON-NLS-1$
+	}
+
+	/**
+	 * Create an executable descriptor based on the given location, os and name.
+	 * This method is typically used to identify the executable related files in existing
+	 * unmanaged configurations.
+	 * @param os
+	 * @param location
+	 * @param executable
+	 * @return the created descriptor
+	 */
+	public static ExecutablesDescriptor createDescriptor(String os, String executable, File location) {
+		if (Constants.OS_MACOSX.equals(os))
+			return createMacDescriptor(os, executable, location);
+
+		// if it is not Mac and not Windows it must be a UNIX flavor
+		if (!Constants.OS_WIN32.equals(os))
+			return createUnixDescriptor(os, executable, location);
+
+		// Nothing else so it must be Windows
+		return createWindowsDescriptor(os, executable, location);
+	}
+
+	private static ExecutablesDescriptor createWindowsDescriptor(String os, String executable, File location) {
+		ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, null);
+		File file = new File(location, executable + ".exe"); //$NON-NLS-1$
+		if (file.isFile()) {
+			result.addFile(file);
+			result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$
+		}
+		file = new File(location, "eclipsec.exe"); //$NON-NLS-1$
+		if (file.isFile())
+			result.addFile(file);
+		return result;
+	}
+
+	private static ExecutablesDescriptor createUnixDescriptor(String os, String executable, File location) {
+		ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, null);
+		File[] files = location.listFiles();
+		for (int i = 0; files != null && i < files.length; i++) {
+			String extension = new Path(files[i].getName()).getFileExtension();
+			if (files[i].isFile() && (extension == null || extension.equals("so"))) //$NON-NLS-1$
+				result.addFile(files[i]);
+		}
+		result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$
+		return result;
+	}
+
+	private static ExecutablesDescriptor createMacDescriptor(String os, String executable, File location) {
+		File files[] = location.listFiles(new FilenameFilter() {
+			public boolean accept(File dir, String name) {
+				int length = name.length();
+				return length > 3 && name.substring(length - 4, length).equalsIgnoreCase(".app"); //$NON-NLS-1$
+			}
+		});
+		ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, files);
+		result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$
+		return result;
+	}
+
+	public ExecutablesDescriptor(String os, String executable, File location, File[] files) {
+		this.os = os;
+		this.executableName = executable;
+		this.location = location;
+		if (files == null)
+			this.files = new HashSet<File>(11);
+		else {
+			this.files = new HashSet<File>(files.length);
+			for (int i = 0; i < files.length; i++)
+				addAllFiles(files[i]);
+		}
+	}
+
+	public ExecutablesDescriptor(ExecutablesDescriptor descriptor) {
+		this.os = descriptor.os;
+		this.location = descriptor.location;
+		this.executableName = descriptor.executableName;
+		this.temporary = descriptor.temporary;
+		this.files = new HashSet<File>(descriptor.files);
+	}
+
+	public void addAllFiles(File file) {
+		if (file.isFile())
+			files.add(relativize(file));
+		else {
+			File absolute = file.isAbsolute() ? file : new File(location, file.getPath());
+			File[] list = absolute.listFiles();
+			for (int i = 0; i < list.length; i++)
+				addAllFiles(list[i]);
+		}
+	}
+
+	public void addFile(File file) {
+		files.add(relativize(file));
+	}
+
+	// do a simple relativization by removing all the bits before the location
+	private File relativize(File file) {
+		if (!file.isAbsolute())
+			return file;
+		String path = file.getPath();
+		if (!path.startsWith(location.getPath()))
+			throw new IllegalArgumentException(file.toString() + " must be related to " + location); //$NON-NLS-1$
+		path = path.substring(location.getPath().length());
+		// trim off any separator.  This accomodates people who set the location with a trailing /
+		if (path.startsWith("/") || path.startsWith("\\")) //$NON-NLS-1$//$NON-NLS-2$
+			path = path.substring(1);
+		return new File(path);
+	}
+
+	public void removeFile(File file) {
+		files.remove(relativize(file));
+	}
+
+	public void replace(File oldFile, File newFile) {
+		removeFile(oldFile);
+		addFile(newFile);
+	}
+
+	public File[] getFiles() {
+		File[] result = files.toArray(new File[files.size()]);
+		for (int i = 0; i < result.length; i++)
+			result[i] = new File(location, result[i].getPath());
+		return result;
+	}
+
+	public String getExecutableName() {
+		return executableName;
+	}
+
+	public File getExecutable() {
+		return findExecutable(os, location, executableName);
+	}
+
+	public File getIniLocation() {
+		return iniFile;
+	}
+
+	public File getLocation() {
+		return location;
+	}
+
+	public void setLocation(File value) {
+		location = value;
+	}
+
+	public boolean isTemporary() {
+		return temporary;
+	}
+
+	public void setExecutableName(String value, boolean updateFiles) {
+		if (updateFiles)
+			updateExecutableName(value);
+		executableName = value;
+	}
+
+	public void makeTemporaryCopy() {
+		if (isTemporary())
+			return;
+		File tempFile = null;
+		try {
+			tempFile = File.createTempFile("p2.brandingIron", ""); //$NON-NLS-1$ //$NON-NLS-2$
+			tempFile.delete();
+			for (File file : files)
+				FileUtils.copy(location, tempFile, file, true);
+		} catch (IOException e) {
+			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error publishing artifacts", e)); //$NON-NLS-1$
+		}
+		location = tempFile;
+		temporary = true;
+	}
+
+	/**
+	 * If the executable represented by this descriptor has been branded then a mess
+	 * of files have been renamed.  Here scan the descriptor's file list and update the names
+	 * taking into account the different layout on different OSes.
+	 * @param newName the new name of the executable.
+	 */
+	private void updateExecutableName(String newName) {
+		if (newName.equalsIgnoreCase(executableName))
+			return;
+		String targetIni = executableName + ".ini"; //$NON-NLS-1$
+		String targetExecutable = executableName;
+		String executableExtension = Constants.OS_WIN32.equals(os) ? ".exe" : ""; //$NON-NLS-1$ //$NON-NLS-2$
+		targetExecutable = executableName + executableExtension;
+		Set<File> filesCopy = new HashSet<File>(files);
+		for (File file : filesCopy) {
+			String base = file.getParent();
+
+			// use String concatenation here because new File("", "foo") is absolute on at least windows...
+			base = base == null ? "" : base + "/"; //$NON-NLS-1$ //$NON-NLS-2$
+			if (Constants.OS_MACOSX.equals(os) && base.startsWith(executableName + ".app")) //$NON-NLS-1$
+				base = newName + ".app" + base.substring(executableName.length() + 4); //$NON-NLS-1$
+			if (file.getName().equalsIgnoreCase(targetExecutable))
+				replace(file, new File(base + newName + executableExtension));
+			else if (file.getName().equalsIgnoreCase(targetIni))
+				replace(file, new File(base + newName + ".ini")); //$NON-NLS-1$
+			else if (Constants.OS_MACOSX.equals(os))
+				replace(file, new File(base + file.getName()));
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureManifestParser.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureManifestParser.java
new file mode 100644
index 0000000..38d11af
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureManifestParser.java
@@ -0,0 +1,292 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Cloudsmith Inc - split into FeatureParser and FeatureManifestParser
+ *     SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.parsers.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.metadata.VersionRange;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.publishing.*;
+import org.xml.sax.*;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * Parses a feature manifest from a provided stream.
+ */
+public class FeatureManifestParser extends DefaultHandler {
+
+	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
+	private SAXParser parser;
+	protected Feature result;
+	private URL url;
+	private StringBuffer characters = null;
+	private MultiStatus status = null;
+	private boolean hasImports = false;
+
+	private final List<String> messageKeys = new ArrayList<String>();
+
+	public FeatureManifestParser() {
+		this(true);
+	}
+
+	public FeatureManifestParser(boolean createParser) {
+		super();
+		if (!createParser)
+			return;
+		try {
+			parserFactory.setNamespaceAware(true);
+			this.parser = parserFactory.newSAXParser();
+		} catch (ParserConfigurationException e) {
+			System.out.println(e);
+		} catch (SAXException e) {
+			System.out.println(e);
+		}
+	}
+
+	@Override
+	public void characters(char[] ch, int start, int length) {
+		if (characters == null)
+			return;
+		characters.append(ch, start, length);
+	}
+
+	protected Feature createFeature(String id, String version) {
+		return new Feature(id, version);
+	}
+
+	@Override
+	public void endElement(String uri, String localName, String qName) {
+		if ("requires".equals(localName) && !hasImports) { //$NON-NLS-1$
+			error(Messages.feature_parse_emptyRequires);
+		}
+		if (characters == null)
+			return;
+		if ("description".equals(localName)) { //$NON-NLS-1$
+			result.setDescription(localize(characters.toString().trim()));
+		} else if ("license".equals(localName)) { //$NON-NLS-1$
+			result.setLicense(localize(characters.toString().trim()));
+		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
+			result.setCopyright(localize(characters.toString().trim()));
+		}
+		characters = null;
+	}
+
+	private void error(String message) {
+		if (status == null) {
+			String msg = NLS.bind(Messages.exception_featureParse, url.toExternalForm());
+			status = new MultiStatus(Activator.ID, Constants.EXCEPTION_FEATURE_PARSE, msg, null);
+		}
+		status.add(new Status(IStatus.ERROR, Activator.ID, Constants.EXCEPTION_FEATURE_PARSE, message, null));
+	}
+
+	public MultiStatus getStatus() {
+		return status;
+	}
+
+	public List<String> getMessageKeys() {
+		return messageKeys;
+	}
+
+	public Feature getResult() {
+		return result;
+	}
+
+	private String localize(String value) {
+		if (value != null && value.startsWith("%")) { //$NON-NLS-1$
+			String key = value.substring(1);
+			messageKeys.add(key);
+		}
+		return value;
+	}
+
+	/**
+	 * Parse the given input stream and return a feature object
+	 * or null.
+	 */
+	public Feature parse(InputStream in, URL featureURL) throws SAXException, IOException {
+		result = null;
+		url = featureURL;
+		parser.parse(new InputSource(in), this);
+		return result;
+	}
+
+	private void processCopyright(Attributes attributes) {
+		result.setCopyrightURL(attributes.getValue("url")); //$NON-NLS-1$
+		characters = new StringBuffer();
+	}
+
+	private void processDescription(Attributes attributes) {
+		result.setDescriptionURL(attributes.getValue("url")); //$NON-NLS-1$
+		characters = new StringBuffer();
+	}
+
+	private void processDiscoverySite(Attributes attributes) {
+		//ignore discovery sites of type 'web'
+		if ("web".equals(attributes.getValue("type"))) //$NON-NLS-1$ //$NON-NLS-2$
+			return;
+		result.addDiscoverySite(attributes.getValue("label"), attributes.getValue("url")); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	protected void processFeature(Attributes attributes) {
+		String id = attributes.getValue("id"); //$NON-NLS-1$
+		String ver = attributes.getValue("version"); //$NON-NLS-1$
+
+		if (id == null || id.trim().equals("") //$NON-NLS-1$
+				|| ver == null || ver.trim().equals("")) { //$NON-NLS-1$
+			error(NLS.bind(Messages.feature_parse_invalidIdOrVersion, (new String[] {id, ver})));
+		} else {
+			result = createFeature(id, ver);
+
+			String os = attributes.getValue("os"); //$NON-NLS-1$
+			String ws = attributes.getValue("ws"); //$NON-NLS-1$
+			String nl = attributes.getValue("nl"); //$NON-NLS-1$
+			String arch = attributes.getValue("arch"); //$NON-NLS-1$
+			result.setEnvironment(os, ws, arch, nl);
+
+			result.setApplication(attributes.getValue("application")); //$NON-NLS-1$
+			result.setBrandingPlugin(attributes.getValue("plugin")); //$NON-NLS-1$
+			result.setExclusive(Boolean.valueOf(attributes.getValue("exclusive")).booleanValue()); //$NON-NLS-1$
+			result.setPrimary(Boolean.valueOf(attributes.getValue("primary")).booleanValue()); //$NON-NLS-1$
+			result.setColocationAffinity(attributes.getValue("colocation-affinity")); //$NON-NLS-1$
+
+			result.setProviderName(localize(attributes.getValue("provider-name"))); //$NON-NLS-1$
+			result.setLabel(localize(attributes.getValue("label"))); //$NON-NLS-1$
+			result.setImage(attributes.getValue("image")); //$NON-NLS-1$
+			result.setLicenseFeature(attributes.getValue("license-feature")); //$NON-NLS-1$
+			result.setLicenseFeatureVersion(attributes.getValue("license-feature-version")); //$NON-NLS-1$
+
+			//			Utils.debug("End process DefaultFeature tag: id:" +id + " ver:" +ver + " url:" + feature.getURL()); 	 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+	}
+
+	private void processImport(Attributes attributes) {
+		String id = attributes.getValue("feature"); //$NON-NLS-1$
+		boolean isPlugin = false;
+		if (id == null) {
+			id = attributes.getValue("plugin"); //$NON-NLS-1$
+			if (id == null)
+				throw new IllegalStateException();
+			isPlugin = true;
+		}
+		String versionStr = attributes.getValue("version"); //$NON-NLS-1$
+		FeatureEntry entry = null;
+		if ("versionRange".equals(attributes.getValue("match"))) { //$NON-NLS-1$//$NON-NLS-2$
+			VersionRange versionRange = new VersionRange(versionStr);
+			entry = FeatureEntry.createRequires(id, versionRange, attributes.getValue("match"), attributes.getValue("filter"), isPlugin); //$NON-NLS-1$ //$NON-NLS-2$
+		} else {
+			entry = FeatureEntry.createRequires(id, versionStr, attributes.getValue("match"), attributes.getValue("filter"), isPlugin); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (!isPlugin && "true".equalsIgnoreCase(attributes.getValue("patch"))) { //$NON-NLS-1$ //$NON-NLS-2$
+			entry.setPatch(true);
+		}
+		hasImports = true;
+		result.addEntry(entry);
+	}
+
+	private void processIncludes(Attributes attributes) {
+		FeatureEntry entry = new FeatureEntry(attributes.getValue("id"), attributes.getValue("version"), false); //$NON-NLS-1$ //$NON-NLS-2$
+		String unpack = attributes.getValue("unpack"); //$NON-NLS-1$
+		if (unpack != null)
+			entry.setUnpack(Boolean.valueOf(unpack).booleanValue());
+		String optional = attributes.getValue("optional"); //$NON-NLS-1$
+		if (optional != null)
+			entry.setOptional(Boolean.valueOf(optional).booleanValue());
+		setEnvironment(attributes, entry);
+		String filter = attributes.getValue("filter"); //$NON-NLS-1$
+		if (filter != null)
+			entry.setFilter(filter);
+		result.addEntry(entry);
+	}
+
+	private void processInstallHandler(Attributes attributes) {
+		result.setInstallHandler(attributes.getValue("handler")); //$NON-NLS-1$
+		result.setInstallHandlerLibrary(attributes.getValue("library")); //$NON-NLS-1$
+		result.setInstallHandlerURL(attributes.getValue("url")); //$NON-NLS-1$
+	}
+
+	private void processLicense(Attributes attributes) {
+		result.setLicenseURL(attributes.getValue("url")); //$NON-NLS-1$
+		characters = new StringBuffer();
+	}
+
+	private void processPlugin(Attributes attributes) {
+		String id = attributes.getValue("id"); //$NON-NLS-1$
+		String version = attributes.getValue("version"); //$NON-NLS-1$
+
+		if (id == null || id.trim().equals("") || version == null || version.trim().equals("")) { //$NON-NLS-1$ //$NON-NLS-2$
+			error(NLS.bind(Messages.feature_parse_invalidIdOrVersion, (new String[] {id, version})));
+		} else {
+			FeatureEntry plugin = new FeatureEntry(id, version, true);
+			setEnvironment(attributes, plugin);
+			String unpack = attributes.getValue("unpack"); //$NON-NLS-1$
+			if (unpack != null)
+				plugin.setUnpack(Boolean.valueOf(unpack).booleanValue());
+			String fragment = attributes.getValue("fragment"); //$NON-NLS-1$
+			if (fragment != null)
+				plugin.setFragment(Boolean.valueOf(fragment).booleanValue());
+			String filter = attributes.getValue("filter"); //$NON-NLS-1$
+			if (filter != null)
+				plugin.setFilter(filter);
+			result.addEntry(plugin);
+
+			//			Utils.debug("End process DefaultFeature tag: id:" + id + " ver:" + ver + " url:" + feature.getURL()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+	}
+
+	private void processUpdateSite(Attributes attributes) {
+		result.setUpdateSiteLabel(attributes.getValue("label")); //$NON-NLS-1$
+		result.setUpdateSiteURL(attributes.getValue("url")); //$NON-NLS-1$
+	}
+
+	private void setEnvironment(Attributes attributes, FeatureEntry entry) {
+		String os = attributes.getValue("os"); //$NON-NLS-1$
+		String ws = attributes.getValue("ws"); //$NON-NLS-1$
+		String nl = attributes.getValue("nl"); //$NON-NLS-1$
+		String arch = attributes.getValue("arch"); //$NON-NLS-1$
+		entry.setEnvironment(os, ws, arch, nl);
+	}
+
+	@Override
+	public void startElement(String uri, String localName, String qName, Attributes attributes) {
+		//		Utils.debug("Start Element: uri:" + uri + " local Name:" + localName + " qName:" + qName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		if ("plugin".equals(localName)) { //$NON-NLS-1$
+			processPlugin(attributes);
+		} else if ("description".equals(localName)) { //$NON-NLS-1$
+			processDescription(attributes);
+		} else if ("license".equals(localName)) { //$NON-NLS-1$
+			processLicense(attributes);
+		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
+			processCopyright(attributes);
+		} else if ("feature".equals(localName)) { //$NON-NLS-1$
+			processFeature(attributes);
+		} else if ("import".equals(localName)) { //$NON-NLS-1$
+			processImport(attributes);
+		} else if ("includes".equals(localName)) { //$NON-NLS-1$
+			processIncludes(attributes);
+		} else if ("install-handler".equals(localName)) { //$NON-NLS-1$
+			processInstallHandler(attributes);
+		} else if ("update".equals(localName)) { //$NON-NLS-1$
+			processUpdateSite(attributes);
+		} else if ("discovery".equals(localName)) { //$NON-NLS-1$
+			processDiscoverySite(attributes);
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureParser.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureParser.java
new file mode 100644
index 0000000..cc4e224
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureParser.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Cloudsmith Inc - split into FeatureParser and FeatureManifestParser
+ *     SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.spi.p2.publisher.LocalizationHelper;
+import org.eclipse.pde.internal.publishing.Activator;
+import org.xml.sax.SAXException;
+
+/**
+ * The publisher feature parser. This class parses a feature either in jar or folder
+ * form. Feature localization data (feature.properties) is also processed here.
+ */
+public class FeatureParser {
+
+	private final FeatureManifestParser parser = new FeatureManifestParser();
+
+	/**
+	 * Parses the specified location and constructs a feature. The given location 
+	 * should be either the location of the feature JAR or the directory containing
+	 * the feature.
+	 * 
+	 * @param location the location of the feature to parse.  
+	 */
+	public Feature parse(File location) {
+		if (!location.exists())
+			return null;
+
+		Feature feature = null;
+		if (location.isDirectory()) {
+			//skip directories that don't contain a feature.xml file
+			File file = new File(location, "feature.xml"); //$NON-NLS-1$
+			InputStream input = null;
+			try {
+				input = new BufferedInputStream(new FileInputStream(file));
+				feature = parser.parse(input, toURL(location));
+				if (feature != null) {
+					List<String> messageKeys = parser.getMessageKeys();
+					String[] keyStrings = messageKeys.toArray(new String[messageKeys.size()]);
+					feature.setLocalizations(LocalizationHelper.getDirPropertyLocalizations(location, "feature", null, keyStrings)); //$NON-NLS-1$
+				}
+			} catch (FileNotFoundException e) {
+				return null;
+			} catch (SAXException e) {
+				logWarning(location, e);
+			} catch (IOException e) {
+				logWarning(location, e);
+			} finally {
+				if (input != null)
+					try {
+						input.close();
+					} catch (IOException e) {
+						//
+					}
+			}
+		} else if (location.getName().endsWith(".jar")) { //$NON-NLS-1$
+			JarFile jar = null;
+			try {
+				jar = new JarFile(location);
+				JarEntry entry = jar.getJarEntry("feature.xml"); //$NON-NLS-1$
+				if (entry == null)
+					return null;
+
+				InputStream input = new BufferedInputStream(jar.getInputStream(entry));
+				feature = parser.parse(input, toURL(location));
+				if (feature != null) {
+					List<String> messageKeys = parser.getMessageKeys();
+					String[] keyStrings = messageKeys.toArray(new String[messageKeys.size()]);
+					feature.setLocalizations(LocalizationHelper.getJarPropertyLocalizations(location, "feature", null, keyStrings)); //$NON-NLS-1$
+				}
+			} catch (SAXException e) {
+				logWarning(location, e);
+			} catch (IOException e) {
+				logWarning(location, e);
+			} catch (SecurityException e) {
+				logWarning(location, e);
+			} finally {
+				try {
+					if (jar != null)
+						jar.close();
+				} catch (IOException e) {
+					//
+				}
+			}
+		}
+		return feature;
+	}
+
+	private static void logWarning(File location, Exception exception) {
+		LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "Exception parsing feature: " + location.getAbsolutePath(), exception)); //$NON-NLS-1$
+	}
+
+	private static URL toURL(File location) {
+		try {
+			return location.toURI().toURL();
+		} catch (MalformedURLException e) {
+			// not known to happen
+			throw new RuntimeException(e);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/GeneratorBundleInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/GeneratorBundleInfo.java
new file mode 100644
index 0000000..d68c000
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/GeneratorBundleInfo.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ *  Copyright (c) 2006, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+
+public class GeneratorBundleInfo extends BundleInfo {
+	private IInstallableUnit iu = null;
+	private String specialConfigCommands;
+	private String specialUnconfigCommands;
+
+	public GeneratorBundleInfo(BundleInfo bInfo) {
+		super.setBundleId(bInfo.getBundleId());
+		super.setLocation(bInfo.getLocation());
+		super.setManifest(bInfo.getManifest());
+		super.setMarkedAsStarted(bInfo.isMarkedAsStarted());
+		super.setResolved(bInfo.isResolved());
+		super.setStartLevel(bInfo.getStartLevel());
+		super.setSymbolicName(bInfo.getSymbolicName());
+		super.setVersion(bInfo.getVersion());
+	}
+
+	public GeneratorBundleInfo() {
+		super();
+	}
+
+	public String getSpecialConfigCommands() {
+		return specialConfigCommands;
+	}
+
+	public void setSpecialConfigCommands(String specialConfigCommands) {
+		this.specialConfigCommands = specialConfigCommands;
+	}
+
+	public void setIU(IInstallableUnit iu) {
+		this.iu = iu;
+	}
+
+	public IInstallableUnit getIU() {
+		return iu;
+	}
+
+	public String getSpecialUnconfigCommands() {
+		return specialUnconfigCommands;
+	}
+
+	public void setSpecialUnconfigCommands(String specialUnconfigCommands) {
+		this.specialUnconfigCommands = specialUnconfigCommands;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		String superSt = super.toString();
+		if (superSt.length() > 0)
+			buffer.append(superSt.substring(0, superSt.length() - 1));
+		buffer.append(", this.specialConfigCommands="); //$NON-NLS-1$
+		buffer.append(this.specialConfigCommands);
+		buffer.append(')');
+		return buffer.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/IProductDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/IProductDescriptor.java
new file mode 100644
index 0000000..a51236d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/IProductDescriptor.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   EclipseSource - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.p2.metadata.IVersionedId;
+
+/**
+ * Represents a product file.  
+ * 
+ * If getLocation returns null, then config.ini and p2 advice files cannot
+ * be used (since these are both relative to the product location).
+ *
+ */
+public interface IProductDescriptor {
+
+	/**
+	 * Gets the name of the launcher.
+	 */
+	public String getLauncherName();
+
+	/**
+	 * Returns the list of all bundles in this product.
+	 * @param includeFragments whether or not to include the fragments in the return value
+	 * @return the list of bundles in this product
+	 */
+	public List<IVersionedId> getBundles(boolean includeFragments);
+
+	/**
+	 * Returns a list<VersionedName> of fragments that constitute this product.
+	 */
+	public List<IVersionedId> getFragments();
+
+	/**
+	 * Returns a List<VersionedName> of features that constitute this product.
+	 */
+	public List<IVersionedId> getFeatures();
+
+	/**
+	 * Returns the path to the config.ini file as specified in the .product file.
+	 */
+	public String getConfigIniPath(String os);
+
+	/**
+	 * Returns the ID for this product.
+	 */
+	public String getId();
+
+	/**
+	 * Returns the Product extension point ID
+	 */
+	public String getProductId();
+
+	/**
+	 * Returns the Applicaiton extension point ID
+	 */
+	public String getApplication();
+
+	/**
+	 * Returns the ID of the bundle in which the splash screen resides.
+	 */
+	public String getSplashLocation();
+
+	/**
+	 * Returns the name of the product
+	 */
+	public String getProductName();
+
+	/**
+	 * Specifies whether this product was built using features or not.
+	 */
+	public boolean useFeatures();
+
+	/**
+	 * Returns the version of the product.
+	 */
+	public String getVersion();
+
+	/**
+	 * Returns the VM arguments for this product for a given OS.
+	 */
+	public String getVMArguments(String os);
+
+	/**
+	 * Returns the program arguments for this product for a given OS.
+	 */
+	public String getProgramArguments(String os);
+
+	/**
+	 * Returns the properties for a product file.
+	 */
+	public Map<String, String> getConfigurationProperties();
+
+	/**
+	 * Returns a list of icons for this product for a given OS.
+	 */
+	public String[] getIcons(String os);
+
+	/**
+	 * Returns a List<BundleInfo> for each bundle that has custom configuration data.
+	 * @return A List<BundleInfo>
+	 */
+	public List<BundleInfo> getBundleInfos();
+
+	/**
+	 * This is needed for config.ini files and p2 advice
+	 */
+	public File getLocation();
+
+	/**
+	 * Determines if the launchers should be included in the published product
+	 */
+	public boolean includeLaunchers();
+
+	/**
+	 * Returns the license URL for this product
+	 */
+	public String getLicenseURL();
+
+	/**
+	 * Returns the license text for this product
+	 */
+	public String getLicenseText();
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
new file mode 100644
index 0000000..d125381
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
@@ -0,0 +1,885 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Code 9 - Additional function and fixes
+ *     EclipseSource - ongoing development
+ *     Felix Riegger (SAP AG) - consolidation of publishers for PDE formats (bug 331974)
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.p2.publisher.eclipse;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.equinox.internal.p2.core.helpers.URLUtil;
+import org.eclipse.equinox.p2.metadata.IVersionedId;
+import org.eclipse.equinox.p2.metadata.VersionedId;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
+import org.eclipse.osgi.service.datalocation.Location;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.publishing.Activator;
+import org.eclipse.pde.internal.publishing.Messages;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ *  Used to parse a .product file.
+ */
+public class ProductFile extends DefaultHandler implements IProductDescriptor {
+	public final static String GENERIC_VERSION_NUMBER = "0.0.0"; //$NON-NLS-1$
+
+	private static final String ATTRIBUTE_PATH = "path"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_ICON = "icon"; //$NON-NLS-1$
+	protected static final String ATTRIBUTE_FRAGMENT = "fragment"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_APPLICATION = "application"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_INCLUDE_LAUNCHERS = "includeLaunchers"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_VALUE = "value"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_LOCATION = "location"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_AUTO_START = "autoStart"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_START_LEVEL = "startLevel"; //$NON-NLS-1$
+	protected static final String ATTRIBUTE_VERSION = "version"; //$NON-NLS-1$
+	protected static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
+	private static final String ATTRIBUTE_UID = "uid"; //$NON-NLS-1$
+
+	private static final String PROPERTY_ECLIPSE_APPLICATION = "eclipse.application"; //$NON-NLS-1$
+	private static final String PROPERTY_ECLIPSE_PRODUCT = "eclipse.product"; //$NON-NLS-1$
+
+	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
+
+	private static final String PROGRAM_ARGS = "programArgs"; //$NON-NLS-1$
+	private static final String PROGRAM_ARGS_LINUX = "programArgsLin"; //$NON-NLS-1$
+	private static final String PROGRAM_ARGS_MAC = "programArgsMac"; //$NON-NLS-1$
+	private static final String PROGRAM_ARGS_SOLARIS = "programArgsSol"; //$NON-NLS-1$
+	private static final String PROGRAM_ARGS_WIN = "programArgsWin"; //$NON-NLS-1$
+	private static final String VM_ARGS = "vmArgs"; //$NON-NLS-1$
+	private static final String VM_ARGS_LINUX = "vmArgsLin"; //$NON-NLS-1$
+	private static final String VM_ARGS_MAC = "vmArgsMac"; //$NON-NLS-1$
+	private static final String VM_ARGS_SOLARIS = "vmArgsSol"; //$NON-NLS-1$
+	private static final String VM_ARGS_WIN = "vmArgsWin"; //$NON-NLS-1$
+
+	private static final String SOLARIS_LARGE = "solarisLarge"; //$NON-NLS-1$
+	private static final String SOLARIS_MEDIUM = "solarisMedium"; //$NON-NLS-1$
+	private static final String SOLARIS_SMALL = "solarisSmall"; //$NON-NLS-1$
+	private static final String SOLARIS_TINY = "solarisTiny"; //$NON-NLS-1$
+	private static final String WIN32_16_LOW = "winSmallLow"; //$NON-NLS-1$
+	private static final String WIN32_16_HIGH = "winSmallHigh"; //$NON-NLS-1$
+	private static final String WIN32_24_LOW = "win24Low"; //$NON-NLS-1$
+	private static final String WIN32_32_LOW = "winMediumLow"; //$NON-NLS-1$
+	private static final String WIN32_32_HIGH = "winMediumHigh"; //$NON-NLS-1$
+	private static final String WIN32_48_LOW = "winLargeLow"; //$NON-NLS-1$
+	private static final String WIN32_48_HIGH = "winLargeHigh"; //$NON-NLS-1$
+
+	private static final String OS_WIN32 = "win32";//$NON-NLS-1$
+	private static final String OS_LINUX = "linux";//$NON-NLS-1$
+	private static final String OS_SOLARIS = "solaris";//$NON-NLS-1$
+	private static final String OS_MACOSX = "macosx";//$NON-NLS-1$
+
+	//element names
+	private static final String EL_FEATURES = "features"; //$NON-NLS-1$
+	private static final String EL_FEATURE = "feature"; //$NON-NLS-1$
+	private static final String EL_PLUGINS = "plugins"; //$NON-NLS-1$
+	private static final String EL_PLUGIN = "plugin"; //$NON-NLS-1$
+	private static final String EL_PRODUCT = "product"; //$NON-NLS-1$
+	private static final String EL_PROPERTY = "property"; //$NON-NLS-1$
+	private static final String EL_CONFIG_INI = "configIni"; //$NON-NLS-1$
+	private static final String EL_LAUNCHER = "launcher"; //$NON-NLS-1$
+	private static final String EL_LAUNCHER_ARGS = "launcherArgs"; //$NON-NLS-1$
+	private static final String EL_SPLASH = "splash"; //$NON-NLS-1$
+	private static final String EL_CONFIGURATIONS = "configurations"; //$NON-NLS-1$
+	private static final String EL_LICENSE = "license"; //$NON-NLS-1$
+	private static final String EL_URL = "url"; //$NON-NLS-1$
+	private static final String EL_TEXT = "text"; //$NON-NLS-1$
+
+	//These constants form a small state machine to parse the .product file
+	private static final int STATE_START = 0;
+	private static final int STATE_PRODUCT = 1;
+	private static final int STATE_LAUNCHER = 2;
+	private static final int STATE_LAUNCHER_ARGS = 3;
+	private static final int STATE_PLUGINS = 4;
+	private static final int STATE_FEATURES = 5;
+	private static final int STATE_PROGRAM_ARGS = 6;
+	private static final int STATE_PROGRAM_ARGS_LINUX = 7;
+	private static final int STATE_PROGRAM_ARGS_MAC = 8;
+	private static final int STATE_PROGRAM_ARGS_SOLARIS = 9;
+	private static final int STATE_PROGRAM_ARGS_WIN = 10;
+	private static final int STATE_VM_ARGS = 11;
+	private static final int STATE_VM_ARGS_LINUX = 12;
+	private static final int STATE_VM_ARGS_MAC = 13;
+	private static final int STATE_VM_ARGS_SOLARIS = 14;
+	private static final int STATE_VM_ARGS_WIN = 15;
+	private static final int STATE_CONFIG_INI = 16;
+	private static final int STATE_CONFIGURATIONS = 17;
+	private static final int STATE_LICENSE = 18;
+	private static final int STATE_LICENSE_URL = 19;
+	private static final int STATE_LICENSE_TEXT = 20;
+
+	private static final String PI_PDEBUILD = "org.eclipse.pde.build"; //$NON-NLS-1$
+	private final static int EXCEPTION_PRODUCT_FORMAT = 23;
+	private final static int EXCEPTION_PRODUCT_FILE = 24;
+
+	private int state = STATE_START;
+
+	private SAXParser parser;
+	private String launcherName = null;
+	//	private boolean useIco = false;
+	private final Map<String, Collection<String>> icons = new HashMap<String, Collection<String>>(6);
+	private String configPath = null;
+	private final Map<String, String> platformSpecificConfigPaths = new HashMap<String, String>();
+	private String configPlatform = null;
+	private String platformConfigPath = null;
+	private String id = null;
+	private String uid = null;
+	private boolean useFeatures = false;
+	protected List<FeatureEntry> plugins = new ArrayList<FeatureEntry>();
+	protected List<FeatureEntry> fragments = new ArrayList<FeatureEntry>();
+	private final List<FeatureEntry> features = new ArrayList<FeatureEntry>();
+	private String splashLocation = null;
+	private String productName = null;
+	private String application = null;
+	private String version = null;
+	private Properties launcherArgs = new Properties();
+	private final File location;
+	private List<BundleInfo> bundleInfos;
+	private Map<String, String> properties;
+	private boolean includeLaunchers = true;
+	private String licenseURL;
+	private String licenseText = null;
+	private String currentOS;
+
+	private static String normalize(String text) {
+		if (text == null || text.trim().length() == 0)
+			return ""; //$NON-NLS-1$
+
+		StringBuffer result = new StringBuffer(text.length());
+		boolean haveSpace = false;
+		for (int i = 0; i < text.length(); i++) {
+			char c = text.charAt(i);
+			if (Character.isWhitespace(c)) {
+				if (haveSpace)
+					continue;
+				haveSpace = true;
+				result.append(" "); //$NON-NLS-1$
+			} else {
+				haveSpace = false;
+				result.append(c);
+			}
+		}
+		return result.toString();
+	}
+
+	public ProductFile(String location, String os) throws CoreException {
+		super();
+		this.currentOS = os;
+		this.location = new File(location);
+		try {
+			parserFactory.setNamespaceAware(true);
+			parser = parserFactory.newSAXParser();
+			InputStream in = new BufferedInputStream(new FileInputStream(location));
+			try {
+				parser.parse(new InputSource(in), this);
+			} finally {
+				try {
+					in.close();
+				} catch (IOException e) {
+					// ignore exception on close (as it was done by Utils.close() before)
+				}
+			}
+		} catch (ParserConfigurationException e) {
+			throw new CoreException(new Status(IStatus.ERROR, PI_PDEBUILD, EXCEPTION_PRODUCT_FORMAT, NLS.bind(Messages.exception_productParse, location), e));
+		} catch (SAXException e) {
+			throw new CoreException(new Status(IStatus.ERROR, PI_PDEBUILD, EXCEPTION_PRODUCT_FORMAT, NLS.bind(Messages.exception_productParse, location), e));
+		} catch (FileNotFoundException e) {
+			throw new CoreException(new Status(IStatus.ERROR, PI_PDEBUILD, EXCEPTION_PRODUCT_FILE, NLS.bind(Messages.exception_missingElement, location), null));
+		} catch (IOException e) {
+			throw new CoreException(new Status(IStatus.ERROR, PI_PDEBUILD, EXCEPTION_PRODUCT_FORMAT, NLS.bind(Messages.exception_productParse, location), e));
+		}
+	}
+
+	/**
+	 * Constructs a product file parser.
+	 */
+	public ProductFile(String location) throws Exception {
+		super();
+		this.location = new File(location);
+
+		parserFactory.setNamespaceAware(true);
+		parser = parserFactory.newSAXParser();
+		InputStream in = new BufferedInputStream(new FileInputStream(location));
+		try {
+			parser.parse(new InputSource(in), this);
+		} finally {
+			in.close();
+		}
+		parser = null;
+	}
+
+	/**
+	 * Gets the name of the launcher specified in the .product file.
+	 */
+	public String getLauncherName() {
+		return launcherName;
+	}
+
+	/**
+	 * Gets the location of the .product file.
+	 */
+	public File getLocation() {
+		return location;
+	}
+
+	/**
+	 * Returns the properties found in .product file.  Properties
+	 * are located in the <configurations> block of the file
+	 */
+	public Map<String, String> getConfigurationProperties() {
+		Map<String, String> result = properties != null ? properties : new HashMap<String, String>();
+		if (application != null && !result.containsKey(PROPERTY_ECLIPSE_APPLICATION))
+			result.put(PROPERTY_ECLIPSE_APPLICATION, application);
+		if (id != null && !result.containsKey(PROPERTY_ECLIPSE_PRODUCT))
+			result.put(PROPERTY_ECLIPSE_PRODUCT, id);
+
+		return result;
+	}
+
+	/**
+	 * Returns a List<VersionedName> for each bundle that makes up this product.
+	 * @param includeFragments Indicates whether or not fragments should
+	 * be included in the list
+	 */
+	public List<IVersionedId> getBundles(boolean includeFragments) {
+		List<IVersionedId> result = new LinkedList<IVersionedId>();
+
+		for (FeatureEntry plugin : plugins) {
+			result.add(new VersionedId(plugin.getId(), plugin.getVersion()));
+		}
+
+		if (includeFragments) {
+			for (FeatureEntry fragment : fragments) {
+				result.add(new VersionedId(fragment.getId(), fragment.getVersion()));
+			}
+		}
+
+		return result;
+	}
+
+	private List<FeatureEntry> getBundleEntries(boolean includeFragments) {
+		List<FeatureEntry> result = new LinkedList<FeatureEntry>();
+		result.addAll(plugins);
+		if (includeFragments)
+			result.addAll(fragments);
+		return result;
+	}
+
+	/**
+	 * Returns a List<BundleInfo> for each bundle that has custom configuration data
+	 * in the product file.
+	 * @return A List<BundleInfo>
+	 */
+	public List<BundleInfo> getBundleInfos() {
+		return bundleInfos != null ? bundleInfos : CollectionUtils.<BundleInfo> emptyList();
+	}
+
+	/**
+	 * Returns a list<VersionedName> of fragments that constitute this product.
+	 */
+	public List<IVersionedId> getFragments() {
+		List<IVersionedId> result = new LinkedList<IVersionedId>();
+
+		for (FeatureEntry fragment : fragments) {
+			result.add(new VersionedId(fragment.getId(), fragment.getVersion()));
+		}
+
+		return result;
+	}
+
+	/**
+	 * Returns a List<VersionedName> of features that constitute this product.
+	 */
+	public List<IVersionedId> getFeatures() {
+		List<IVersionedId> result = new LinkedList<IVersionedId>();
+
+		for (FeatureEntry feature : features) {
+			result.add(new VersionedId(feature.getId(), feature.getVersion()));
+		}
+
+		return result;
+	}
+
+	public List<FeatureEntry> getProductEntries() {
+		if (useFeatures()) {
+			return features;
+		}
+		return getBundleEntries(true);
+	}
+
+	public boolean containsPlugin(String plugin) {
+		return getBundles(true).contains(plugin);
+	}
+
+	public String[] getIcons() {
+		return getIcons(currentOS);
+	}
+
+	public String[] getIcons(String os) {
+		Collection<String> result = icons.get(os);
+		if (result == null)
+			return new String[0];
+		return result.toArray(new String[result.size()]);
+	}
+
+	public String getConfigIniPath(String os) {
+		String specific = platformSpecificConfigPaths.get(os);
+		return specific == null ? configPath : specific;
+	}
+
+	public String getConfigIniPath() {
+		return configPath;
+	}
+
+	public boolean haveCustomConfig() {
+		return configPath != null || platformSpecificConfigPaths.size() > 0;
+	}
+
+	/**
+	 * Returns the ID for this product.
+	 */
+	public String getId() {
+		if (uid != null)
+			return uid;
+		return id;
+	}
+
+	public String getProductId() {
+		return id;
+	}
+
+	/**
+	 * Returns the location (the bundle) that defines the splash screen
+	 */
+	public String getSplashLocation() {
+		return splashLocation;
+	}
+
+	/**
+	 * Returns the product name.
+	 */
+	public String getProductName() {
+		return productName;
+	}
+
+	/**
+	 * Returns the application identifier for this product.
+	 */
+	public String getApplication() {
+		return application;
+	}
+
+	/**
+	 * Returns true if this product is built using feature, 
+	 * false otherwise.
+	 */
+	public boolean useFeatures() {
+		return useFeatures;
+	}
+
+	/**
+	 * Returns the version of the product
+	 */
+	public String getVersion() {
+		return (version == null || version.length() == 0) ? "0.0.0" : version; //$NON-NLS-1$
+	}
+
+	public boolean includeLaunchers() {
+		return includeLaunchers;
+	}
+
+	public Map<String, BundleInfo> getConfigurationInfo() {
+		Map<String, BundleInfo> result = new HashMap<String, BundleInfo>();
+		for (BundleInfo info : getBundleInfos()) {
+			result.put(info.getSymbolicName(), info);
+		}
+		return result;
+	}
+
+	public Properties getConfigProperties() {
+		Properties props = new Properties();
+		for (Entry<String, String> property : getConfigurationProperties().entrySet()) {
+			props.setProperty(property.getKey(), property.getValue());
+		}
+		return props;
+	}
+
+	/**
+	 * Returns the VM arguments for a specific platform.
+	 * If the empty string is used for the OS, this returns
+	 * the default VM arguments
+	 */
+	public String getVMArguments(String os) {
+		os = os == null ? "" : os; //$NON-NLS-1$
+		String key = null;
+		if (os.equals(OS_WIN32)) {
+			key = VM_ARGS_WIN;
+		} else if (os.equals(OS_LINUX)) {
+			key = VM_ARGS_LINUX;
+		} else if (os.equals(OS_MACOSX)) {
+			key = VM_ARGS_MAC;
+		} else if (os.equals(OS_SOLARIS)) {
+			key = VM_ARGS_SOLARIS;
+		}
+
+		String prefix = launcherArgs.getProperty(VM_ARGS);
+		String platform = null, args = null;
+		if (key != null)
+			platform = launcherArgs.getProperty(key);
+		if (prefix != null)
+			args = platform != null ? prefix + " " + platform : prefix; //$NON-NLS-1$
+		else
+			args = platform != null ? platform : ""; //$NON-NLS-1$
+		return normalize(args);
+	}
+
+	/**
+	 * Returns the program arguments for a specific platform.
+	 * If the empty string is used for the OS, this returns
+	 * the default program arguments
+	 */
+	public String getProgramArguments(String os) {
+		os = os == null ? "" : os; //$NON-NLS-1$
+		String key = null;
+		if (os.equals(OS_WIN32)) {
+			key = PROGRAM_ARGS_WIN;
+		} else if (os.equals(OS_LINUX)) {
+			key = PROGRAM_ARGS_LINUX;
+		} else if (os.equals(OS_MACOSX)) {
+			key = PROGRAM_ARGS_MAC;
+		} else if (os.equals(OS_SOLARIS)) {
+			key = PROGRAM_ARGS_SOLARIS;
+		}
+
+		String prefix = launcherArgs.getProperty(PROGRAM_ARGS);
+		String platform = null, args = null;
+		if (key != null)
+			platform = launcherArgs.getProperty(key);
+		if (prefix != null)
+			args = platform != null ? prefix + " " + platform : prefix; //$NON-NLS-1$
+		else
+			args = platform != null ? platform : ""; //$NON-NLS-1$
+		return normalize(args);
+	}
+
+	public String getLicenseText() {
+		return licenseText;
+	}
+
+	public String getLicenseURL() {
+		return licenseURL;
+	}
+
+	@Override
+	public void startElement(String uri, String localName, String qName, Attributes attributes) {
+		switch (state) {
+			case STATE_START :
+				if (EL_PRODUCT.equals(localName)) {
+					processProduct(attributes);
+					state = STATE_PRODUCT;
+				}
+				break;
+
+			case STATE_PRODUCT :
+				if (EL_CONFIG_INI.equals(localName)) {
+					processConfigIni(attributes);
+					state = STATE_CONFIG_INI;
+				} else if (EL_LAUNCHER.equals(localName)) {
+					processLauncher(attributes);
+					state = STATE_LAUNCHER;
+				} else if (EL_PLUGINS.equals(localName)) {
+					state = STATE_PLUGINS;
+				} else if (EL_FEATURES.equals(localName)) {
+					state = STATE_FEATURES;
+				} else if (EL_LAUNCHER_ARGS.equals(localName)) {
+					state = STATE_LAUNCHER_ARGS;
+				} else if (EL_SPLASH.equals(localName)) {
+					splashLocation = attributes.getValue(ATTRIBUTE_LOCATION);
+				} else if (EL_CONFIGURATIONS.equals(localName)) {
+					state = STATE_CONFIGURATIONS;
+				} else if (EL_LICENSE.equals(localName)) {
+					state = STATE_LICENSE;
+				}
+				break;
+
+			case STATE_CONFIG_INI :
+				processConfigIniPlatform(localName, true);
+				break;
+
+			case STATE_LAUNCHER :
+				if (OS_SOLARIS.equals(localName)) {
+					processSolaris(attributes);
+				} else if ("win".equals(localName)) { //$NON-NLS-1$
+					processWin(attributes);
+				} else if (OS_LINUX.equals(localName)) {
+					processLinux(attributes);
+				} else if (OS_MACOSX.equals(localName)) {
+					processMac(attributes);
+				}
+				if ("ico".equals(localName)) { //$NON-NLS-1$
+					processIco(attributes);
+				} else if ("bmp".equals(localName)) { //$NON-NLS-1$
+					processBmp(attributes);
+				}
+				break;
+
+			case STATE_LAUNCHER_ARGS :
+				if (PROGRAM_ARGS.equals(localName)) {
+					state = STATE_PROGRAM_ARGS;
+				} else if (PROGRAM_ARGS_LINUX.equals(localName)) {
+					state = STATE_PROGRAM_ARGS_LINUX;
+				} else if (PROGRAM_ARGS_MAC.equals(localName)) {
+					state = STATE_PROGRAM_ARGS_MAC;
+				} else if (PROGRAM_ARGS_SOLARIS.equals(localName)) {
+					state = STATE_PROGRAM_ARGS_SOLARIS;
+				} else if (PROGRAM_ARGS_WIN.equals(localName)) {
+					state = STATE_PROGRAM_ARGS_WIN;
+				} else if (VM_ARGS.equals(localName)) {
+					state = STATE_VM_ARGS;
+				} else if (VM_ARGS_LINUX.equals(localName)) {
+					state = STATE_VM_ARGS_LINUX;
+				} else if (VM_ARGS_MAC.equals(localName)) {
+					state = STATE_VM_ARGS_MAC;
+				} else if (VM_ARGS_SOLARIS.equals(localName)) {
+					state = STATE_VM_ARGS_SOLARIS;
+				} else if (VM_ARGS_WIN.equals(localName)) {
+					state = STATE_VM_ARGS_WIN;
+				}
+				break;
+
+			case STATE_PLUGINS :
+				if (EL_PLUGIN.equals(localName)) {
+					processPlugin(attributes);
+				}
+				break;
+
+			case STATE_LICENSE :
+				if (EL_URL.equals(localName)) {
+					state = STATE_LICENSE_URL;
+				} else if (EL_TEXT.equals(localName)) {
+					licenseText = ""; //$NON-NLS-1$
+					state = STATE_LICENSE_TEXT;
+				}
+				break;
+
+			case STATE_FEATURES :
+				if (EL_FEATURE.equals(localName)) {
+					processFeature(attributes);
+				}
+				break;
+			case STATE_CONFIGURATIONS :
+				if (EL_PLUGIN.equals(localName)) {
+					processPluginConfiguration(attributes);
+				} else if (EL_PROPERTY.equals(localName)) {
+					processPropertyConfiguration(attributes);
+				}
+				break;
+		}
+	}
+
+	/**
+	 * Processes the property tag in the .product file.  These tags contain
+	 * a Name and Value pair.  For each tag (with a non-null name), a property 
+	 * is created.
+	 */
+	private void processPropertyConfiguration(Attributes attributes) {
+		String name = attributes.getValue(ATTRIBUTE_NAME);
+		String value = attributes.getValue(ATTRIBUTE_VALUE);
+		if (name == null)
+			return;
+		if (value == null)
+			value = ""; //$NON-NLS-1$
+		if (properties == null)
+			properties = new HashMap<String, String>();
+		properties.put(name, value);
+	}
+
+	private void processPluginConfiguration(Attributes attributes) {
+		BundleInfo info = new BundleInfo();
+		info.setSymbolicName(attributes.getValue(ATTRIBUTE_ID));
+		info.setVersion(attributes.getValue(ATTRIBUTE_VERSION));
+		String value = attributes.getValue(ATTRIBUTE_START_LEVEL);
+		if (value != null) {
+			int startLevel = Integer.parseInt(value);
+			if (startLevel > 0)
+				info.setStartLevel(startLevel);
+		}
+		value = attributes.getValue(ATTRIBUTE_AUTO_START);
+		if (value != null)
+			info.setMarkedAsStarted(Boolean.valueOf(value).booleanValue());
+		if (bundleInfos == null)
+			bundleInfos = new ArrayList<BundleInfo>();
+		bundleInfos.add(info);
+	}
+
+	@Override
+	public void endElement(String uri, String localName, String qName) {
+		switch (state) {
+			case STATE_PLUGINS :
+				if (EL_PLUGINS.equals(localName))
+					state = STATE_PRODUCT;
+				break;
+			case STATE_FEATURES :
+				if (EL_FEATURES.equals(localName))
+					state = STATE_PRODUCT;
+				break;
+			case STATE_LAUNCHER_ARGS :
+				if (EL_LAUNCHER_ARGS.equals(localName))
+					state = STATE_PRODUCT;
+				break;
+			case STATE_LAUNCHER :
+				if (EL_LAUNCHER.equals(localName))
+					state = STATE_PRODUCT;
+				break;
+			case STATE_CONFIGURATIONS :
+				if (EL_CONFIGURATIONS.equals(localName))
+					state = STATE_PRODUCT;
+				break;
+			case STATE_LICENSE :
+				if (EL_LICENSE.equals(localName))
+					state = STATE_PRODUCT;
+				break;
+
+			case STATE_PROGRAM_ARGS :
+			case STATE_PROGRAM_ARGS_LINUX :
+			case STATE_PROGRAM_ARGS_MAC :
+			case STATE_PROGRAM_ARGS_SOLARIS :
+			case STATE_PROGRAM_ARGS_WIN :
+			case STATE_VM_ARGS :
+			case STATE_VM_ARGS_LINUX :
+			case STATE_VM_ARGS_MAC :
+			case STATE_VM_ARGS_SOLARIS :
+			case STATE_VM_ARGS_WIN :
+				state = STATE_LAUNCHER_ARGS;
+				break;
+			case STATE_LICENSE_URL :
+			case STATE_LICENSE_TEXT :
+				state = STATE_LICENSE;
+				break;
+
+			case STATE_CONFIG_INI :
+				if (EL_CONFIG_INI.equals(localName))
+					state = STATE_PRODUCT;
+				else
+					processConfigIniPlatform(localName, false);
+				break;
+		}
+	}
+
+	@Override
+	public void characters(char[] ch, int start, int length) {
+		switch (state) {
+			case STATE_PROGRAM_ARGS :
+				addLaunchArgumentToMap(PROGRAM_ARGS, String.valueOf(ch, start, length));
+				break;
+			case STATE_PROGRAM_ARGS_LINUX :
+				addLaunchArgumentToMap(PROGRAM_ARGS_LINUX, String.valueOf(ch, start, length));
+				break;
+			case STATE_PROGRAM_ARGS_MAC :
+				addLaunchArgumentToMap(PROGRAM_ARGS_MAC, String.valueOf(ch, start, length));
+				break;
+			case STATE_PROGRAM_ARGS_SOLARIS :
+				addLaunchArgumentToMap(PROGRAM_ARGS_SOLARIS, String.valueOf(ch, start, length));
+				break;
+			case STATE_PROGRAM_ARGS_WIN :
+				addLaunchArgumentToMap(PROGRAM_ARGS_WIN, String.valueOf(ch, start, length));
+				break;
+			case STATE_VM_ARGS :
+				addLaunchArgumentToMap(VM_ARGS, String.valueOf(ch, start, length));
+				break;
+			case STATE_VM_ARGS_LINUX :
+				addLaunchArgumentToMap(VM_ARGS_LINUX, String.valueOf(ch, start, length));
+				break;
+			case STATE_VM_ARGS_MAC :
+				addLaunchArgumentToMap(VM_ARGS_MAC, String.valueOf(ch, start, length));
+				break;
+			case STATE_VM_ARGS_SOLARIS :
+				addLaunchArgumentToMap(VM_ARGS_SOLARIS, String.valueOf(ch, start, length));
+				break;
+			case STATE_VM_ARGS_WIN :
+				addLaunchArgumentToMap(VM_ARGS_WIN, String.valueOf(ch, start, length));
+				break;
+			case STATE_CONFIG_INI :
+				if (platformConfigPath != null)
+					platformConfigPath += String.valueOf(ch, start, length);
+				break;
+			case STATE_LICENSE_URL :
+				licenseURL = String.valueOf(ch, start, length);
+				break;
+			case STATE_LICENSE_TEXT :
+				if (licenseText != null)
+					licenseText += String.valueOf(ch, start, length);
+				break;
+
+		}
+	}
+
+	private void addLaunchArgumentToMap(String key, String value) {
+		if (launcherArgs == null)
+			launcherArgs = new Properties();
+
+		String oldValue = launcherArgs.getProperty(key);
+		if (oldValue != null)
+			launcherArgs.setProperty(key, oldValue + value);
+		else
+			launcherArgs.setProperty(key, value);
+	}
+
+	protected void processPlugin(Attributes attributes) {
+		String fragment = attributes.getValue(ATTRIBUTE_FRAGMENT);
+		String pluginId = attributes.getValue(ATTRIBUTE_ID);
+		String pluginVersion = attributes.getValue(ATTRIBUTE_VERSION);
+
+		FeatureEntry entry = new FeatureEntry(pluginId, pluginVersion != null ? pluginVersion : GENERIC_VERSION_NUMBER, true);
+		entry.setFragment(Boolean.valueOf(fragment).booleanValue());
+
+		if (fragment != null && new Boolean(fragment).booleanValue()) {
+			fragments.add(entry);
+		} else {
+			plugins.add(entry);
+		}
+	}
+
+	private void processFeature(Attributes attributes) {
+		String featureId = attributes.getValue(ATTRIBUTE_ID);
+		String featureVersion = attributes.getValue(ATTRIBUTE_VERSION);
+		FeatureEntry featureEntry = new FeatureEntry(featureId, featureVersion != null ? featureVersion : GENERIC_VERSION_NUMBER, false);
+
+		features.add(featureEntry);
+	}
+
+	private void processProduct(Attributes attributes) {
+		id = attributes.getValue(ATTRIBUTE_ID);
+		uid = attributes.getValue(ATTRIBUTE_UID);
+		productName = attributes.getValue(ATTRIBUTE_NAME);
+		application = attributes.getValue(ATTRIBUTE_APPLICATION);
+		if (attributes.getIndex(ATTRIBUTE_INCLUDE_LAUNCHERS) >= 0)
+			includeLaunchers = Boolean.valueOf(attributes.getValue(ATTRIBUTE_INCLUDE_LAUNCHERS));
+		String use = attributes.getValue("useFeatures"); //$NON-NLS-1$
+		if (use != null)
+			useFeatures = Boolean.valueOf(use).booleanValue();
+		version = attributes.getValue(ATTRIBUTE_VERSION);
+	}
+
+	private void processConfigIni(Attributes attributes) {
+		String path = null;
+		if ("custom".equals(attributes.getValue("use"))) { //$NON-NLS-1$//$NON-NLS-2$
+			path = attributes.getValue(ATTRIBUTE_PATH);
+		}
+		String os = attributes.getValue("os"); //$NON-NLS-1$
+		if (os != null && os.length() > 0) {
+			// TODO should we allow a platform-specific default to over-ride a custom generic path?
+			if (path != null)
+				platformSpecificConfigPaths.put(os, path);
+		} else if (path != null) {
+			configPath = path;
+		}
+	}
+
+	private void processConfigIniPlatform(String key, boolean begin) {
+		if (begin) {
+			configPlatform = key;
+			platformConfigPath = ""; //$NON-NLS-1$
+		} else if (configPlatform.equals(key) && platformConfigPath.length() > 0) {
+			platformSpecificConfigPaths.put(key, platformConfigPath);
+			platformConfigPath = null;
+		}
+	}
+
+	private void processLauncher(Attributes attributes) {
+		launcherName = attributes.getValue(ATTRIBUTE_NAME);
+	}
+
+	private void addIcon(String os, String value) {
+		if (value == null)
+			return;
+
+		File iconFile = new File(value);
+		if (!iconFile.isFile()) {
+			//workspace
+			Location instanceLocation = (Location) ServiceHelper.getService(Activator.getContext(), Location.class.getName(), Location.INSTANCE_FILTER);
+			if (instanceLocation != null && instanceLocation.getURL() != null) {
+				File workspace = URLUtil.toFile(instanceLocation.getURL());
+				if (workspace != null)
+					iconFile = new File(workspace, value);
+			}
+		}
+		if (!iconFile.isFile())
+			iconFile = new File(location.getParentFile(), value);
+
+		Collection<String> list = icons.get(os);
+		if (list == null) {
+			list = new ArrayList<String>(6);
+			icons.put(os, list);
+		}
+		list.add(iconFile.getAbsolutePath());
+	}
+
+	private void processSolaris(Attributes attributes) {
+		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_LARGE));
+		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_MEDIUM));
+		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_SMALL));
+		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_TINY));
+	}
+
+	private void processWin(Attributes attributes) {
+		//		useIco = Boolean.valueOf(attributes.getValue(P_USE_ICO)).booleanValue();
+	}
+
+	private void processIco(Attributes attributes) {
+		addIcon(OS_WIN32, attributes.getValue(ATTRIBUTE_PATH));
+	}
+
+	private void processBmp(Attributes attributes) {
+		addIcon(OS_WIN32, attributes.getValue(WIN32_16_HIGH));
+		addIcon(OS_WIN32, attributes.getValue(WIN32_16_LOW));
+		addIcon(OS_WIN32, attributes.getValue(WIN32_24_LOW));
+		addIcon(OS_WIN32, attributes.getValue(WIN32_32_HIGH));
+		addIcon(OS_WIN32, attributes.getValue(WIN32_32_LOW));
+		addIcon(OS_WIN32, attributes.getValue(WIN32_48_HIGH));
+		addIcon(OS_WIN32, attributes.getValue(WIN32_48_LOW));
+	}
+
+	private void processLinux(Attributes attributes) {
+		addIcon(OS_LINUX, attributes.getValue(ATTRIBUTE_ICON));
+	}
+
+	private void processMac(Attributes attributes) {
+		addIcon(OS_MACOSX, attributes.getValue(ATTRIBUTE_ICON));
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/AccumulateConfigDataAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/AccumulateConfigDataAction.java
new file mode 100644
index 0000000..d63f6ea
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/AccumulateConfigDataAction.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.DataLoader;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.LauncherData;
+import org.eclipse.equinox.p2.publisher.*;
+
+public class AccumulateConfigDataAction extends AbstractPublisherAction {
+
+	private String configSpec;
+	private DataLoader loader;
+
+	public AccumulateConfigDataAction(IPublisherInfo info, String configSpec, File configurationLocation, File executableLocation) {
+		this.configSpec = configSpec;
+		loader = new DataLoader(configurationLocation, executableLocation);
+	}
+
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		storeConfigData(publisherInfo, configSpec, results);
+		return Status.OK_STATUS;
+	}
+
+	protected void storeConfigData(IPublisherInfo publisherInfo, String config, IPublisherResult result) {
+		ConfigData data = loader.getConfigData();
+		if (data == null)
+			return;
+		publisherInfo.addAdvice(new ConfigAdvice(data, config));
+		LauncherData launcherData = loader.getLauncherData();
+		if (launcherData == null)
+			return;
+		publisherInfo.addAdvice(new LaunchingAdvice(launcherData, config));
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ApplicationLauncherAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ApplicationLauncherAction.java
new file mode 100644
index 0000000..9af22ce
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ApplicationLauncherAction.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.ExecutablesDescriptor;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.VersionAdvice;
+import org.eclipse.equinox.p2.query.QueryUtil;
+
+/**
+ * Create IUs and CUs that represent the entire launcher for an application.  This includes
+ * the executable, the launcher fragments as well as the CUs required to install and configure
+ * these elements.
+ */
+public class ApplicationLauncherAction extends AbstractPublisherAction {
+
+	private final String flavor;
+	private final String[] configSpecs;
+	private final File location;
+	private final String executableName;
+	private final Version version;
+	private final String id;
+
+	/**
+	 * Returns the id of the top level IU published by this action for the given id and flavor.
+	 * @param id the id of the application being published
+	 * @param flavor the flavor being published
+	 * @return the if for ius published by this action
+	 */
+	public static String computeIUId(String id, String flavor) {
+		return flavor + id + ".application"; //$NON-NLS-1$
+	}
+
+	public ApplicationLauncherAction(String id, Version version, String flavor, String executableName, File location, String[] configSpecs) {
+		this.flavor = flavor;
+		this.configSpecs = configSpecs;
+		this.id = id;
+		this.version = version;
+		this.executableName = executableName;
+		this.location = location;
+	}
+
+	@Override
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		// Create the basic actions and run them putting the IUs in a temporary result
+		Collection<IPublisherAction> actions = createActions(publisherInfo);
+		createAdvice(publisherInfo, results);
+		IPublisherResult innerResult = new PublisherResult();
+		MultiStatus finalStatus = new MultiStatus(ApplicationLauncherAction.class.getName(), 0, "publishing result", null); //$NON-NLS-1$
+		for (IPublisherAction action : actions) {
+			if (monitor.isCanceled())
+				return Status.CANCEL_STATUS;
+			finalStatus.merge(action.perform(publisherInfo, innerResult, monitor));
+		}
+		if (!finalStatus.isOK())
+			return finalStatus;
+		// merge the IUs  into the final result as non-roots and create a parent IU that captures them all
+		results.merge(innerResult, IPublisherResult.MERGE_ALL_NON_ROOT);
+		publishApplicationLauncherIU(innerResult.getIUs(null, IPublisherResult.ROOT), results);
+		return Status.OK_STATUS;
+	}
+
+	/**
+	 * Create advice needed by the actions related to and following this action
+	 */
+	private void createAdvice(IPublisherInfo publisherInfo, IPublisherResult results) {
+		createLauncherAdvice(publisherInfo, results);
+	}
+
+	/**
+	 * Create and register advice that will tell people what versions of the launcher bundle and 
+	 * fragments are in use in this particular result.
+	 */
+	private void createLauncherAdvice(IPublisherInfo publisherInfo, IPublisherResult results) {
+		Collection<IInstallableUnit> ius = getIUs(results.getIUs(null, null), EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER);
+		VersionAdvice advice = new VersionAdvice();
+		boolean found = false;
+		for (IInstallableUnit iu : ius) {
+			// skip over source bundles and fragments
+			// TODO should we use the source property here rather than magic name matching?
+			if (iu.getId().endsWith(".source") || QueryUtil.isFragment(iu)) //$NON-NLS-1$
+				continue;
+			advice.setVersion(IInstallableUnit.NAMESPACE_IU_ID, iu.getId(), iu.getVersion());
+			found = true;
+		}
+		if (found)
+			publisherInfo.addAdvice(advice);
+	}
+
+	private Collection<IInstallableUnit> getIUs(Collection<IInstallableUnit> ius, String prefix) {
+		Set<IInstallableUnit> result = new HashSet<IInstallableUnit>();
+		for (IInstallableUnit tmp : ius) {
+			if (tmp.getId().startsWith(prefix))
+				result.add(tmp);
+		}
+		return result;
+	}
+
+	private void publishApplicationLauncherIU(Collection<? extends IVersionedId> children, IPublisherResult result) {
+		InstallableUnitDescription descriptor = createParentIU(children, computeIUId(id, flavor), version);
+		descriptor.setSingleton(true);
+		IInstallableUnit rootIU = MetadataFactory.createInstallableUnit(descriptor);
+		if (rootIU == null)
+			return;
+		result.addIU(rootIU, IPublisherResult.ROOT);
+	}
+
+	private Collection<IPublisherAction> createActions(IPublisherInfo publisherInfo) {
+		Collection<IPublisherAction> actions = new ArrayList<IPublisherAction>();
+		actions.add(new EquinoxLauncherCUAction(flavor, configSpecs));
+		actions.addAll(createExecutablesActions(configSpecs));
+		return actions;
+	}
+
+	protected Collection<IPublisherAction> createExecutablesActions(String[] configs) {
+		Collection<IPublisherAction> actions = new ArrayList<IPublisherAction>(configs.length);
+		for (int i = 0; i < configs.length; i++) {
+			ExecutablesDescriptor executables = computeExecutables(configs[i]);
+			IPublisherAction action = new EquinoxExecutableAction(executables, configs[i], id, version, flavor);
+			actions.add(action);
+		}
+		return actions;
+	}
+
+	protected ExecutablesDescriptor computeExecutables(String configSpec) {
+		// See if we know about an executables feature then use it as the source
+		ExecutablesDescriptor result = ExecutablesDescriptor.createExecutablesFromFeature(location, configSpec);
+		if (result != null)
+			return result;
+		// otherwise, assume that we are running against an Eclipse install and do the default thing
+		String os = AbstractPublisherAction.parseConfigSpec(configSpec)[1];
+		return ExecutablesDescriptor.createDescriptor(os, executableName, location);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundleShapeAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundleShapeAdvice.java
new file mode 100644
index 0000000..3b30f8e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundleShapeAdvice.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.AbstractAdvice;
+
+public class BundleShapeAdvice extends AbstractAdvice implements IBundleShapeAdvice {
+
+	private String shape;
+	private Version version;
+	private String id;
+
+	public BundleShapeAdvice(String id, Version version, String shape) {
+		this.id = id;
+		this.version = version;
+		this.shape = shape;
+	}
+
+	protected String getId() {
+		return id;
+	}
+
+	protected Version getVersion() {
+		return version;
+	}
+
+	public String getShape() {
+		return shape;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java
new file mode 100644
index 0000000..d03f399
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java
@@ -0,0 +1,824 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.*;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
+import org.eclipse.equinox.internal.p2.publisher.Messages;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.metadata.VersionRange;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.*;
+import org.eclipse.equinox.p2.query.IQueryResult;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
+import org.eclipse.equinox.spi.p2.publisher.LocalizationHelper;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.eclipse.osgi.service.pluginconversion.PluginConversionException;
+import org.eclipse.osgi.service.pluginconversion.PluginConverter;
+import org.eclipse.osgi.service.resolver.*;
+import org.eclipse.osgi.util.ManifestElement;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.publishing.Activator;
+import org.osgi.framework.*;
+import org.osgi.service.packageadmin.PackageAdmin;
+
+/**
+ * Publish IUs for all of the bundles in a given set of locations or described by a set of
+ * bundle descriptions.  The locations can be actual locations of the bundles or folders
+ * of bundles.
+ *
+ * This action consults the following types of advice:
+ * </ul>
+ * <li>{@link IAdditionalInstallableUnitAdvice }</li>
+ * <li>{@link IBundleShapeAdvice}</li>
+ * <li>{@link ICapabilityAdvice}</li>
+ * <li>{@link IPropertyAdvice}</li>
+ * <li>{@link ITouchpointAdvice}</li>
+ * </ul>
+ */
+public class BundlesAction extends AbstractPublisherAction {
+
+	// TODO reconsider the references to these specific ids in the action.  The action should be generic
+	protected static final String ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR = "org.eclipse.equinox.simpleconfigurator"; //$NON-NLS-1$
+	protected static final String ORG_ECLIPSE_UPDATE_CONFIGURATOR = "org.eclipse.update.configurator"; //$NON-NLS-1$
+	/**
+	 * A capability name in the {@link PublisherHelper#NAMESPACE_ECLIPSE_TYPE} namespace
+	 * representing and OSGi bundle resource
+	 * @see IProvidedCapability#getName()
+	 */
+	public static final String TYPE_ECLIPSE_BUNDLE = "bundle"; //$NON-NLS-1$
+
+	/**
+	 * A capability name in the {@link PublisherHelper#NAMESPACE_ECLIPSE_TYPE} namespace
+	 * representing a source bundle
+	 * @see IProvidedCapability#getName()
+	 */
+	public static final String TYPE_ECLIPSE_SOURCE = "source"; //$NON-NLS-1$
+
+	public static final String OSGI_BUNDLE_CLASSIFIER = "osgi.bundle"; //$NON-NLS-1$
+	private static final String CAPABILITY_NS_OSGI_BUNDLE = "osgi.bundle"; //$NON-NLS-1$
+	private static final String CAPABILITY_NS_OSGI_FRAGMENT = "osgi.fragment"; //$NON-NLS-1$
+
+	public static final IProvidedCapability BUNDLE_CAPABILITY = MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, Version.createOSGi(1, 0, 0));
+	public static final IProvidedCapability SOURCE_BUNDLE_CAPABILITY = MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_SOURCE, Version.createOSGi(1, 0, 0));
+
+	static final String DEFAULT_BUNDLE_LOCALIZATION = "OSGI-INF/l10n/bundle"; //$NON-NLS-1$
+
+	private static final String[] BUNDLE_IU_PROPERTY_MAP = {Constants.BUNDLE_NAME, IInstallableUnit.PROP_NAME, Constants.BUNDLE_DESCRIPTION, IInstallableUnit.PROP_DESCRIPTION, Constants.BUNDLE_VENDOR, IInstallableUnit.PROP_PROVIDER, Constants.BUNDLE_CONTACTADDRESS, IInstallableUnit.PROP_CONTACT, Constants.BUNDLE_DOCURL, IInstallableUnit.PROP_DOC_URL, Constants.BUNDLE_UPDATELOCATION, IInstallableUnit.PROP_BUNDLE_LOCALIZATION, Constants.BUNDLE_LOCALIZATION, IInstallableUnit.PROP_BUNDLE_LOCALIZATION};
+	public static final int BUNDLE_LOCALIZATION_INDEX = PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length - 1;
+	public static final String DIR = "dir"; //$NON-NLS-1$
+	public static final String JAR = "jar"; //$NON-NLS-1$
+	private static final String FEATURE_FILENAME_DESCRIPTOR = "feature.xml"; //$NON-NLS-1$
+	private static final String PLUGIN_FILENAME_DESCRIPTOR = "plugin.xml"; //$NON-NLS-1$
+	private static final String FRAGMENT_FILENAME_DESCRIPTOR = "fragment.xml"; //$NON-NLS-1$
+	public static String BUNDLE_SHAPE = "Eclipse-BundleShape"; //$NON-NLS-1$
+
+	private File[] locations;
+	private BundleDescription[] bundles;
+
+	public static IArtifactKey createBundleArtifactKey(String bsn, String version) {
+		return new ArtifactKey(OSGI_BUNDLE_CLASSIFIER, bsn, Version.parseVersion(version));
+	}
+
+	public static IInstallableUnit createBundleConfigurationUnit(String hostId, Version cuVersion, boolean isBundleFragment, GeneratorBundleInfo configInfo, String configurationFlavor, IMatchExpression<IInstallableUnit> filter) {
+		if (configInfo == null)
+			return null;
+
+		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
+		String configUnitId = configurationFlavor + hostId;
+		cu.setId(configUnitId);
+		cu.setVersion(cuVersion);
+
+		//Indicate the IU to which this CU apply
+		Version hostVersion = Version.parseVersion(configInfo.getVersion());
+		VersionRange range = hostVersion == Version.emptyVersion ? VersionRange.emptyRange : new VersionRange(hostVersion, true, Version.MAX_VERSION, true);
+		cu.setHost(new IRequirement[] { //
+		MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, hostId, range, null, false, false, true), //
+				MetadataFactory.createRequirement(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, new VersionRange(Version.createOSGi(1, 0, 0), true, Version.createOSGi(2, 0, 0), false), null, false, false, false)});
+
+		//Adds capabilities for fragment, self, and describing the flavor supported
+		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
+		cu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(configUnitId, cuVersion), MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
+
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		touchpointData.put("install", "installBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
+		touchpointData.put("uninstall", "uninstallBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
+		touchpointData.put("configure", createConfigScript(configInfo, isBundleFragment)); //$NON-NLS-1$
+		touchpointData.put("unconfigure", createUnconfigScript(configInfo, isBundleFragment)); //$NON-NLS-1$
+		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+		cu.setFilter(filter);
+		return MetadataFactory.createInstallableUnit(cu);
+	}
+
+	public static IInstallableUnit createBundleIU(BundleDescription bd, IArtifactKey key, IPublisherInfo info) {
+		@SuppressWarnings("unchecked")
+		Map<String, String> manifest = (Map<String, String>) bd.getUserObject();
+		Map<Locale, Map<String, String>> manifestLocalizations = null;
+		if (manifest != null && bd.getLocation() != null)
+			manifestLocalizations = getManifestLocalizations(manifest, new File(bd.getLocation()));
+		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
+		iu.setSingleton(bd.isSingleton());
+		iu.setId(bd.getSymbolicName());
+		iu.setVersion(PublisherHelper.fromOSGiVersion(bd.getVersion()));
+		iu.setFilter(bd.getPlatformFilter());
+		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(bd.getSymbolicName(), computeUpdateRange(bd.getVersion()), IUpdateDescriptor.NORMAL, null));
+		iu.setArtifacts(new IArtifactKey[] {key});
+		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
+
+		boolean isFragment = bd.getHost() != null;
+		//		boolean requiresAFragment = isFragment ? false : requireAFragment(bd, manifest);
+
+		//Process the required bundles
+		BundleSpecification requiredBundles[] = bd.getRequiredBundles();
+		ArrayList<IRequirement> reqsDeps = new ArrayList<IRequirement>();
+		//		if (requiresAFragment)
+		//			reqsDeps.add(MetadataFactory.createRequiredCapability(CAPABILITY_TYPE_OSGI_FRAGMENTS, bd.getSymbolicName(), VersionRange.emptyRange, null, false, false));
+		if (isFragment)
+			reqsDeps.add(MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, bd.getHost().getName(), PublisherHelper.fromOSGiVersionRange(bd.getHost().getVersionRange()), null, false, false));
+		for (int j = 0; j < requiredBundles.length; j++)
+			reqsDeps.add(MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, requiredBundles[j].getName(), PublisherHelper.fromOSGiVersionRange(requiredBundles[j].getVersionRange()), null, requiredBundles[j].isOptional(), false));
+
+		// Process the import packages
+		ImportPackageSpecification osgiImports[] = bd.getImportPackages();
+		for (int i = 0; i < osgiImports.length; i++) {
+			// TODO we need to sort out how we want to handle wild-carded dynamic imports - for now we ignore them
+			ImportPackageSpecification importSpec = osgiImports[i];
+			String importPackageName = importSpec.getName();
+			if (importPackageName.indexOf('*') != -1)
+				continue;
+			VersionRange versionRange = PublisherHelper.fromOSGiVersionRange(importSpec.getVersionRange());
+			//TODO this needs to be refined to take into account all the attribute handled by imports
+			reqsDeps.add(MetadataFactory.createRequirement(PublisherHelper.CAPABILITY_NS_JAVA_PACKAGE, importPackageName, versionRange, null, isOptional(importSpec), false));
+		}
+		iu.setRequirements(reqsDeps.toArray(new IRequirement[reqsDeps.size()]));
+
+		// Create set of provided capabilities
+		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
+		providedCapabilities.add(PublisherHelper.createSelfCapability(bd.getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion())));
+		providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_OSGI_BUNDLE, bd.getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion())));
+
+		// Process the export package
+		ExportPackageDescription exports[] = bd.getExportPackages();
+		for (int i = 0; i < exports.length; i++) {
+			//TODO make sure that we support all the refinement on the exports
+			providedCapabilities.add(MetadataFactory.createProvidedCapability(PublisherHelper.CAPABILITY_NS_JAVA_PACKAGE, exports[i].getName(), PublisherHelper.fromOSGiVersion(exports[i].getVersion())));
+		}
+		// Here we add a bundle capability to identify bundles
+		if (manifest != null && manifest.containsKey("Eclipse-SourceBundle")) //$NON-NLS-1$
+			providedCapabilities.add(SOURCE_BUNDLE_CAPABILITY);
+		else
+			providedCapabilities.add(BUNDLE_CAPABILITY);
+		if (isFragment)
+			providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_OSGI_FRAGMENT, bd.getHost().getName(), PublisherHelper.fromOSGiVersion(bd.getVersion())));
+
+		if (manifestLocalizations != null) {
+			for (Entry<Locale, Map<String, String>> locEntry : manifestLocalizations.entrySet()) {
+				Locale locale = locEntry.getKey();
+				Map<String, String> translatedStrings = locEntry.getValue();
+				for (Entry<String, String> entry : translatedStrings.entrySet()) {
+					iu.setProperty(locale.toString() + '.' + entry.getKey(), entry.getValue());
+				}
+				providedCapabilities.add(PublisherHelper.makeTranslationCapability(bd.getSymbolicName(), locale));
+			}
+		}
+		iu.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
+		processUpdateDescriptorAdvice(iu, info);
+		processCapabilityAdvice(iu, info);
+
+		// Set certain properties from the manifest header attributes as IU properties.
+		// The values of these attributes may be localized (strings starting with '%')
+		// with the translated values appearing in the localization IU fragments
+		// associated with the bundle IU.
+		if (manifest != null) {
+			int i = 0;
+			while (i < BUNDLE_IU_PROPERTY_MAP.length) {
+				if (manifest.containsKey(BUNDLE_IU_PROPERTY_MAP[i])) {
+					String value = manifest.get(BUNDLE_IU_PROPERTY_MAP[i]);
+					if (value != null && value.length() > 0) {
+						iu.setProperty(BUNDLE_IU_PROPERTY_MAP[i + 1], value);
+					}
+				}
+				i += 2;
+			}
+		}
+
+		// Define the immutable metadata for this IU. In this case immutable means
+		// that this is something that will not impact the configuration.
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		touchpointData.put("manifest", toManifestString(manifest)); //$NON-NLS-1$
+		if (isDir(bd, info))
+			touchpointData.put("zipped", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+		processTouchpointAdvice(iu, touchpointData, info);
+
+		processInstallableUnitPropertiesAdvice(iu, info);
+		return MetadataFactory.createInstallableUnit(iu);
+	}
+
+	static VersionRange computeUpdateRange(org.osgi.framework.Version base) {
+		VersionRange updateRange = null;
+		if (!base.equals(org.osgi.framework.Version.emptyVersion)) {
+			updateRange = new VersionRange(Version.emptyVersion, true, PublisherHelper.fromOSGiVersion(base), false);
+		} else {
+			updateRange = VersionRange.emptyRange;
+		}
+		return updateRange;
+	}
+
+	private IInstallableUnitFragment createHostLocalizationFragment(IInstallableUnit bundleIU, BundleDescription bd, String hostId, String[] hostBundleManifestValues) {
+		Map<Locale, Map<String, String>> hostLocalizations = getHostLocalizations(new File(bd.getLocation()), hostBundleManifestValues);
+		if (hostLocalizations == null || hostLocalizations.isEmpty())
+			return null;
+		return createLocalizationFragmentOfHost(bd, hostId, hostBundleManifestValues, hostLocalizations);
+	}
+
+	/*
+	 * @param hostId
+	 * @param bd
+	 * @param locale
+	 * @param localizedStrings
+	 * @return installableUnitFragment
+	 */
+	private static IInstallableUnitFragment createLocalizationFragmentOfHost(BundleDescription bd, String hostId, String[] hostManifestValues, Map<Locale, Map<String, String>> hostLocalizations) {
+		InstallableUnitFragmentDescription fragment = new MetadataFactory.InstallableUnitFragmentDescription();
+		String fragmentId = makeHostLocalizationFragmentId(bd.getSymbolicName());
+		fragment.setId(fragmentId);
+		fragment.setVersion(PublisherHelper.fromOSGiVersion(bd.getVersion())); // TODO: is this a meaningful version?
+
+		HostSpecification hostSpec = bd.getHost();
+		IRequirement[] hostReqs = new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, hostSpec.getName(), PublisherHelper.fromOSGiVersionRange(hostSpec.getVersionRange()), null, false, false, false)};
+		fragment.setHost(hostReqs);
+
+		fragment.setSingleton(true);
+		fragment.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
+
+		// Create a provided capability for each locale and add the translated properties.
+		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>(hostLocalizations.keySet().size());
+		providedCapabilities.add(PublisherHelper.createSelfCapability(fragmentId, fragment.getVersion()));
+		for (Entry<Locale, Map<String, String>> localeEntry : hostLocalizations.entrySet()) {
+			Locale locale = localeEntry.getKey();
+			Map<String, String> translatedStrings = localeEntry.getValue();
+			for (Entry<String, String> entry : translatedStrings.entrySet()) {
+				fragment.setProperty(locale.toString() + '.' + entry.getKey(), entry.getValue());
+			}
+			providedCapabilities.add(PublisherHelper.makeTranslationCapability(hostId, locale));
+		}
+		fragment.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
+
+		return MetadataFactory.createInstallableUnitFragment(fragment);
+	}
+
+	/**
+	 * @param id
+	 * @return the id for the iu fragment containing localized properties
+	 * 		   for the fragment with the given id.
+	 */
+	private static String makeHostLocalizationFragmentId(String id) {
+		return id + ".translated_host_properties"; //$NON-NLS-1$
+	}
+
+	private static String createConfigScript(GeneratorBundleInfo configInfo, boolean isBundleFragment) {
+		if (configInfo == null)
+			return ""; //$NON-NLS-1$
+
+		String configScript = "";//$NON-NLS-1$
+		if (!isBundleFragment && configInfo.getStartLevel() != BundleInfo.NO_LEVEL) {
+			configScript += "setStartLevel(startLevel:" + configInfo.getStartLevel() + ");"; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (!isBundleFragment && configInfo.isMarkedAsStarted()) {
+			configScript += "markStarted(started: true);"; //$NON-NLS-1$
+		}
+
+		if (configInfo.getSpecialConfigCommands() != null) {
+			configScript += configInfo.getSpecialConfigCommands();
+		}
+
+		return configScript;
+	}
+
+	private static String createDefaultBundleConfigScript(GeneratorBundleInfo configInfo) {
+		return createConfigScript(configInfo, false);
+	}
+
+	public static IInstallableUnit createDefaultBundleConfigurationUnit(GeneratorBundleInfo configInfo, GeneratorBundleInfo unconfigInfo, String configurationFlavor) {
+		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
+		String configUnitId = PublisherHelper.createDefaultConfigUnitId(OSGI_BUNDLE_CLASSIFIER, configurationFlavor);
+		cu.setId(configUnitId);
+		Version configUnitVersion = Version.createOSGi(1, 0, 0);
+		cu.setVersion(configUnitVersion);
+
+		// Add capabilities for fragment, self, and describing the flavor supported
+		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
+		cu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(configUnitId, configUnitVersion), MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
+
+		// Create a required capability on bundles
+		IRequirement[] reqs = new IRequirement[] {MetadataFactory.createRequirement(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, VersionRange.emptyRange, null, false, true, false)};
+		cu.setHost(reqs);
+		Map<String, String> touchpointData = new HashMap<String, String>();
+
+		touchpointData.put("install", "installBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
+		touchpointData.put("uninstall", "uninstallBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
+		touchpointData.put("configure", createDefaultBundleConfigScript(configInfo)); //$NON-NLS-1$
+		touchpointData.put("unconfigure", createDefaultBundleUnconfigScript(unconfigInfo)); //$NON-NLS-1$
+
+		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+		return MetadataFactory.createInstallableUnit(cu);
+	}
+
+	private static String createDefaultBundleUnconfigScript(GeneratorBundleInfo unconfigInfo) {
+		return createUnconfigScript(unconfigInfo, false);
+	}
+
+	private static String createUnconfigScript(GeneratorBundleInfo unconfigInfo, boolean isBundleFragment) {
+		if (unconfigInfo == null)
+			return ""; //$NON-NLS-1$
+		String unconfigScript = "";//$NON-NLS-1$
+		if (!isBundleFragment && unconfigInfo.getStartLevel() != BundleInfo.NO_LEVEL) {
+			unconfigScript += "setStartLevel(startLevel:" + BundleInfo.NO_LEVEL + ");"; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (!isBundleFragment && unconfigInfo.isMarkedAsStarted()) {
+			unconfigScript += "markStarted(started: false);"; //$NON-NLS-1$
+		}
+
+		if (unconfigInfo.getSpecialUnconfigCommands() != null) {
+			unconfigScript += unconfigInfo.getSpecialUnconfigCommands();
+		}
+		return unconfigScript;
+	}
+
+	private static boolean isOptional(ImportPackageSpecification importedPackage) {
+		if (importedPackage.getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_DYNAMIC) || importedPackage.getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_OPTIONAL))
+			return true;
+		return false;
+	}
+
+	private static String toManifestString(Map<String, String> p) {
+		if (p == null)
+			return null;
+		StringBuffer result = new StringBuffer();
+		// See https://bugs.eclipse.org/329386. We are trying to reduce the size of the manifest data in
+		// the eclipse touchpoint. We've removed the code that requires it but in order for old clients
+		// to still be able to use recent repositories, we're going to keep around the manifest properties
+		// they need.
+		final String[] interestingKeys = new String[] {Constants.BUNDLE_SYMBOLICNAME, Constants.BUNDLE_VERSION, Constants.FRAGMENT_HOST};
+		for (String key : interestingKeys) {
+			String value = p.get(key);
+			if (value != null)
+				result.append(key).append(": ").append(value).append('\n'); //$NON-NLS-1$
+		}
+		return result.length() == 0 ? null : result.toString();
+	}
+
+	// Return a map from locale to property set for the manifest localizations
+	// from the given bundle directory and given bundle localization path/name
+	// manifest property value.
+	private static Map<Locale, Map<String, String>> getManifestLocalizations(Map<String, String> manifest, File bundleLocation) {
+		Map<Locale, Map<String, String>> localizations;
+		Locale defaultLocale = null; // = Locale.ENGLISH; // TODO: get this from GeneratorInfo
+		String[] bundleManifestValues = getManifestCachedValues(manifest);
+		String bundleLocalization = bundleManifestValues[BUNDLE_LOCALIZATION_INDEX]; // Bundle localization is the last one in the list
+
+		if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && //$NON-NLS-1$
+				bundleLocation.isFile()) {
+			localizations = LocalizationHelper.getJarPropertyLocalizations(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
+			//localizations = getJarManifestLocalization(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
+		} else {
+			localizations = LocalizationHelper.getDirPropertyLocalizations(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
+			// localizations = getDirManifestLocalization(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
+		}
+
+		return localizations;
+	}
+
+	public static String[] getExternalizedStrings(IInstallableUnit iu) {
+		String[] result = new String[PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length];
+		int j = 0;
+		for (int i = 1; i < BUNDLE_IU_PROPERTY_MAP.length - 1; i += 2) {
+			if (iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]) != null && iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]).length() > 0 && iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]).charAt(0) == '%')
+				result[j++] = iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]).substring(1);
+			else
+				j++;
+		}
+		// The last string is the location 
+		result[BUNDLE_LOCALIZATION_INDEX] = iu.getProperty(IInstallableUnit.PROP_BUNDLE_LOCALIZATION);
+
+		return result;
+	}
+
+	public static String[] getManifestCachedValues(Map<String, String> manifest) {
+		String[] cachedValues = new String[PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length];
+		for (int j = 0; j < PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length; j++) {
+			String value = manifest.get(PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES[j]);
+			if (PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES[j].equals(Constants.BUNDLE_LOCALIZATION)) {
+				if (value == null)
+					value = DEFAULT_BUNDLE_LOCALIZATION;
+				cachedValues[j] = value;
+			} else if (value != null && value.length() > 1 && value.charAt(0) == '%') {
+				cachedValues[j] = value.substring(1);
+			}
+		}
+		return cachedValues;
+	}
+
+	// Return a map from locale to property set for the manifest localizations
+	// from the given bundle directory and given bundle localization path/name
+	// manifest property value.
+	public static Map<Locale, Map<String, String>> getHostLocalizations(File bundleLocation, String[] hostBundleManifestValues) {
+		Map<Locale, Map<String, String>> localizations;
+		Locale defaultLocale = null; // = Locale.ENGLISH; // TODO: get this from GeneratorInfo
+		String hostBundleLocalization = hostBundleManifestValues[BUNDLE_LOCALIZATION_INDEX];
+		if (hostBundleLocalization == null)
+			return null;
+
+		if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && //$NON-NLS-1$
+				bundleLocation.isFile()) {
+			localizations = LocalizationHelper.getJarPropertyLocalizations(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
+			//localizations = getJarManifestLocalization(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
+		} else {
+			localizations = LocalizationHelper.getDirPropertyLocalizations(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
+			// localizations = getDirManifestLocalization(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
+		}
+
+		return localizations;
+	}
+
+	private static PluginConverter acquirePluginConverter() {
+		return (PluginConverter) ServiceHelper.getService(Activator.getContext(), PluginConverter.class.getName());
+	}
+
+	private static Dictionary<String, String> convertPluginManifest(File bundleLocation, boolean logConversionException) {
+		PluginConverter converter;
+		try {
+			converter = acquirePluginConverter();
+			if (converter == null) {
+				String message = NLS.bind(Messages.exception_noPluginConverter, bundleLocation);
+				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message));
+				return null;
+			}
+			return converter.convertManifest(bundleLocation, false, null, true, null);
+		} catch (PluginConversionException convertException) {
+			// only log the exception if we had a plugin.xml or fragment.xml and we failed conversion
+			if (bundleLocation.getName().equals(FEATURE_FILENAME_DESCRIPTOR))
+				return null;
+			if (!new File(bundleLocation, PLUGIN_FILENAME_DESCRIPTOR).exists() && !new File(bundleLocation, FRAGMENT_FILENAME_DESCRIPTOR).exists())
+				return null;
+			if (logConversionException) {
+				IStatus status = new Status(IStatus.WARNING, Activator.ID, 0, NLS.bind(Messages.exception_errorConverting, bundleLocation.getAbsolutePath()), convertException);
+				LogHelper.log(status);
+			}
+			return null;
+		}
+	}
+
+	public static BundleDescription createBundleDescription(Dictionary<String, String> enhancedManifest, File bundleLocation) {
+		try {
+			BundleDescription descriptor = StateObjectFactory.defaultFactory.createBundleDescription(null, enhancedManifest, bundleLocation == null ? null : bundleLocation.getAbsolutePath(), 1); //TODO Do we need to have a real bundle id
+			descriptor.setUserObject(enhancedManifest);
+			return descriptor;
+		} catch (BundleException e) {
+			String message = NLS.bind(Messages.exception_stateAddition, bundleLocation == null ? null : bundleLocation.getAbsoluteFile());
+			IStatus status = new Status(IStatus.WARNING, Activator.ID, message, e);
+			LogHelper.log(status);
+			return null;
+		}
+	}
+
+	public static BundleDescription createBundleDescription(File bundleLocation) {
+		Dictionary<String, String> manifest = loadManifest(bundleLocation);
+		if (manifest == null)
+			return null;
+		return createBundleDescription(manifest, bundleLocation);
+	}
+
+	public static Dictionary<String, String> loadManifest(File bundleLocation) {
+		Dictionary<String, String> manifest = basicLoadManifest(bundleLocation);
+		if (manifest == null)
+			return null;
+		// if the bundle itself does not define its shape, infer the shape from the current form
+		if (manifest.get(BUNDLE_SHAPE) == null)
+			manifest.put(BUNDLE_SHAPE, bundleLocation.isDirectory() ? DIR : JAR);
+		return manifest;
+	}
+
+	public static Dictionary<String, String> basicLoadManifest(File bundleLocation) {
+		InputStream manifestStream = null;
+		ZipFile jarFile = null;
+		try {
+			if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && bundleLocation.isFile()) { //$NON-NLS-1$
+				jarFile = new ZipFile(bundleLocation, ZipFile.OPEN_READ);
+				ZipEntry manifestEntry = jarFile.getEntry(JarFile.MANIFEST_NAME);
+				if (manifestEntry != null) {
+					manifestStream = jarFile.getInputStream(manifestEntry);
+				}
+			} else {
+				File manifestFile = new File(bundleLocation, JarFile.MANIFEST_NAME);
+				if (manifestFile.exists())
+					manifestStream = new BufferedInputStream(new FileInputStream(manifestFile));
+			}
+		} catch (IOException e) {
+			String message = NLS.bind(Messages.exception_errorLoadingManifest, bundleLocation);
+			LogHelper.log(new Status(IStatus.WARNING, Activator.ID, message, e));
+		}
+		Dictionary<String, String> manifest = null;
+		try {
+			if (manifestStream != null) {
+				try {
+					Map<String, String> manifestMap = ManifestElement.parseBundleManifest(manifestStream, null);
+					// TODO temporary hack.  We are reading a Map but everyone wants a Dictionary so convert.
+					// real answer is to have people expect a Map but that is a wider change.
+					manifest = new Hashtable<String, String>(manifestMap);
+				} catch (IOException e) {
+					String message = NLS.bind(Messages.exception_errorReadingManifest, bundleLocation, e.getMessage());
+					LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message, e));
+					return null;
+				} catch (BundleException e) {
+					String message = NLS.bind(Messages.exception_errorReadingManifest, bundleLocation, e.getMessage());
+					LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message, e));
+					return null;
+				}
+			} else {
+				manifest = convertPluginManifest(bundleLocation, true);
+			}
+		} finally {
+			try {
+				if (jarFile != null)
+					jarFile.close();
+			} catch (IOException e2) {
+				//Ignore
+			}
+		}
+
+		if (manifest == null)
+			return null;
+
+		//Deal with the pre-3.0 plug-in shape who have a default jar manifest.mf
+		if (manifest.get(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME) == null)
+			manifest = convertPluginManifest(bundleLocation, true);
+		return manifest;
+
+	}
+
+	public BundlesAction(File[] locations) {
+		this.locations = locations;
+	}
+
+	public BundlesAction(BundleDescription[] bundles) {
+		this.bundles = bundles;
+	}
+
+	@Override
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		if (bundles == null && locations == null)
+			throw new IllegalStateException(Messages.exception_noBundlesOrLocations);
+
+		setPublisherInfo(publisherInfo);
+
+		try {
+			if (bundles == null)
+				bundles = getBundleDescriptions(expandLocations(locations), monitor);
+			generateBundleIUs(bundles, publisherInfo, results, monitor);
+			bundles = null;
+		} catch (OperationCanceledException e) {
+			return Status.CANCEL_STATUS;
+		}
+		return Status.OK_STATUS;
+	}
+
+	protected void publishArtifact(IArtifactDescriptor descriptor, File base, File[] inclusions, IPublisherInfo publisherInfo) {
+		IArtifactRepository destination = publisherInfo.getArtifactRepository();
+		if (descriptor == null || destination == null)
+			return;
+
+		// publish the given files
+		publishArtifact(descriptor, inclusions, null, publisherInfo, createRootPrefixComputer(base));
+	}
+
+	@Override
+	protected void publishArtifact(IArtifactDescriptor descriptor, File jarFile, IPublisherInfo publisherInfo) {
+		// no files to publish so this is done.
+		if (jarFile == null || publisherInfo == null)
+			return;
+
+		// if the destination already contains the descriptor, there is nothing to do.
+		IArtifactRepository destination = publisherInfo.getArtifactRepository();
+		if (destination == null || destination.contains(descriptor))
+			return;
+
+		super.publishArtifact(descriptor, jarFile, publisherInfo);
+
+		// if we are assimilating pack200 files then add the packed descriptor
+		// into the repo assuming it does not already exist.
+		boolean reuse = "true".equals(destination.getProperties().get(AbstractPublisherApplication.PUBLISH_PACK_FILES_AS_SIBLINGS)); //$NON-NLS-1$
+		if (reuse && (publisherInfo.getArtifactOptions() & IPublisherInfo.A_PUBLISH) > 0) {
+			File packFile = new Path(jarFile.getAbsolutePath()).addFileExtension("pack.gz").toFile(); //$NON-NLS-1$
+			if (packFile.exists()) {
+				IArtifactDescriptor ad200 = createPack200ArtifactDescriptor(descriptor.getArtifactKey(), packFile, descriptor.getProperty(IArtifactDescriptor.ARTIFACT_SIZE));
+				publishArtifact(ad200, packFile, publisherInfo);
+			}
+		}
+	}
+
+	private File[] expandLocations(File[] list) {
+		ArrayList<File> result = new ArrayList<File>();
+		expandLocations(list, result);
+		return result.toArray(new File[result.size()]);
+	}
+
+	private void expandLocations(File[] list, ArrayList<File> result) {
+		if (list == null)
+			return;
+		for (int i = 0; i < list.length; i++) {
+			File location = list[i];
+			if (location.isDirectory()) {
+				// if the location is itself a bundle, just add it.  Otherwise r down
+				if (new File(location, JarFile.MANIFEST_NAME).exists())
+					result.add(location);
+				else if (new File(location, "plugin.xml").exists() || new File(location, "fragment.xml").exists()) //$NON-NLS-1$ //$NON-NLS-2$
+					result.add(location); //old style bundle without manifest
+				else
+					expandLocations(location.listFiles(), result);
+			} else {
+				result.add(location);
+			}
+		}
+	}
+
+	//TODO remove this method
+	protected void generateBundleIUs(BundleDescription[] bundleDescriptions, IPublisherResult result, IProgressMonitor monitor) {
+		generateBundleIUs(bundleDescriptions, null, result, monitor);
+	}
+
+	protected void generateBundleIUs(BundleDescription[] bundleDescriptions, IPublisherInfo info, IPublisherResult result, IProgressMonitor monitor) {
+
+		// This assumes that hosts are processed before fragments because for each fragment the host
+		// is queried for the strings that should be translated.
+		for (int i = 0; i < bundleDescriptions.length; i++) {
+			if (monitor.isCanceled())
+				throw new OperationCanceledException();
+
+			BundleDescription bd = bundleDescriptions[i];
+			if (bd != null && bd.getSymbolicName() != null && bd.getVersion() != null) {
+				//First check to see if there is already an IU around for this
+				IInstallableUnit bundleIU = queryForIU(result, bundleDescriptions[i].getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion()));
+				IArtifactKey key = createBundleArtifactKey(bd.getSymbolicName(), bd.getVersion().toString());
+				if (bundleIU == null) {
+					createAdviceFileAdvice(bundleDescriptions[i], info);
+					// Create the bundle IU according to any shape advice we have
+					bundleIU = createBundleIU(bd, key, info);
+				}
+
+				File location = new File(bd.getLocation());
+				IArtifactDescriptor ad = PublisherHelper.createArtifactDescriptor(info, key, location);
+				processArtifactPropertiesAdvice(bundleIU, ad, info);
+
+				// Publish according to the shape on disk
+				File bundleLocation = new File(bd.getLocation());
+				if (bundleLocation.isDirectory())
+					publishArtifact(ad, bundleLocation, bundleLocation.listFiles(), info);
+				else
+					publishArtifact(ad, bundleLocation, info);
+
+				IInstallableUnit fragment = null;
+				if (isFragment(bd)) {
+					// TODO: Need a test case for multiple hosts
+					String hostId = bd.getHost().getName();
+					VersionRange hostVersionRange = PublisherHelper.fromOSGiVersionRange(bd.getHost().getVersionRange());
+					IQueryResult<IInstallableUnit> hosts = queryForIUs(result, hostId, hostVersionRange);
+
+					for (Iterator<IInstallableUnit> itor = hosts.iterator(); itor.hasNext();) {
+						IInstallableUnit host = itor.next();
+						String fragmentId = makeHostLocalizationFragmentId(bd.getSymbolicName());
+						fragment = queryForIU(result, fragmentId, PublisherHelper.fromOSGiVersion(bd.getVersion()));
+						if (fragment == null) {
+							String[] externalizedStrings = getExternalizedStrings(host);
+							fragment = createHostLocalizationFragment(bundleIU, bd, hostId, externalizedStrings);
+						}
+					}
+
+				}
+
+				result.addIU(bundleIU, IPublisherResult.ROOT);
+				if (fragment != null)
+					result.addIU(fragment, IPublisherResult.NON_ROOT);
+
+				InstallableUnitDescription[] others = processAdditionalInstallableUnitsAdvice(bundleIU, info);
+				for (int iuIndex = 0; others != null && iuIndex < others.length; iuIndex++) {
+					result.addIU(MetadataFactory.createInstallableUnit(others[iuIndex]), IPublisherResult.ROOT);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds advice for any p2.inf file found in this bundle.
+	 */
+	private void createAdviceFileAdvice(BundleDescription bundleDescription, IPublisherInfo publisherInfo) {
+		String location = bundleDescription.getLocation();
+		if (location == null)
+			return;
+
+		AdviceFileAdvice advice = new AdviceFileAdvice(bundleDescription.getSymbolicName(), PublisherHelper.fromOSGiVersion(bundleDescription.getVersion()), new Path(location), AdviceFileAdvice.BUNDLE_ADVICE_FILE);
+		if (advice.containsAdvice())
+			publisherInfo.addAdvice(advice);
+
+	}
+
+	private static boolean isDir(BundleDescription bundle, IPublisherInfo info) {
+		Collection<IBundleShapeAdvice> advice = info.getAdvice(null, true, bundle.getSymbolicName(), PublisherHelper.fromOSGiVersion(bundle.getVersion()), IBundleShapeAdvice.class);
+		// if the advice has a shape, use it
+		if (advice != null && !advice.isEmpty()) {
+			// we know there is some advice but if there is more than one, take the first.
+			String shape = advice.iterator().next().getShape();
+			if (shape != null)
+				return shape.equals(IBundleShapeAdvice.DIR);
+		}
+		// otherwise go with whatever we figured out from the manifest or the shape on disk
+		@SuppressWarnings("unchecked")
+		Map<String, String> manifest = (Map<String, String>) bundle.getUserObject();
+		String format = manifest.get(BUNDLE_SHAPE);
+		return DIR.equals(format);
+	}
+
+	private boolean isFragment(BundleDescription bd) {
+		return (bd.getHost() != null ? true : false);
+	}
+
+	// TODO reconsider the special cases here for the configurators.  Perhaps these should be in their own actions.
+	protected BundleDescription[] getBundleDescriptions(File[] bundleLocations, IProgressMonitor monitor) {
+		if (bundleLocations == null)
+			return new BundleDescription[0];
+		boolean addSimpleConfigurator = false;
+		boolean scIn = false;
+		for (int i = 0; i < bundleLocations.length; i++) {
+			if (!addSimpleConfigurator)
+				addSimpleConfigurator = bundleLocations[i].toString().indexOf(ORG_ECLIPSE_UPDATE_CONFIGURATOR) > 0;
+			if (!scIn) {
+				scIn = bundleLocations[i].toString().indexOf(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR) > 0;
+				if (scIn)
+					break;
+			}
+		}
+		if (scIn)
+			addSimpleConfigurator = false;
+		BundleDescription[] result = new BundleDescription[bundleLocations.length + (addSimpleConfigurator ? 1 : 0)];
+		for (int i = 0; i < bundleLocations.length; i++) {
+			if (monitor.isCanceled())
+				throw new OperationCanceledException();
+			result[i] = createBundleDescription(bundleLocations[i]);
+		}
+		if (addSimpleConfigurator) {
+			// Add simple configurator to the list of bundles
+			try {
+				Bundle simpleConfigBundle = getBundle(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR);
+				if (simpleConfigBundle == null)
+					LogHelper.log(new Status(IStatus.INFO, Activator.ID, Messages.message_noSimpleconfigurator));
+				else {
+					File location = FileLocator.getBundleFile(simpleConfigBundle);
+					result[result.length - 1] = createBundleDescription(location);
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return result;
+	}
+
+	// This method is based on core.runtime's InternalPlatform.getBundle(...) with a difference just in how we get PackageAdmin
+	private static Bundle getBundle(String symbolicName) {
+		PackageAdmin packageAdmin = ServiceHelper.getService(Activator.getContext(), PackageAdmin.class);
+		if (packageAdmin == null)
+			return null;
+		Bundle[] matchingBundles = packageAdmin.getBundles(symbolicName, null);
+		if (matchingBundles == null)
+			return null;
+		//Return the first bundle that is not installed or uninstalled
+		for (int i = 0; i < matchingBundles.length; i++) {
+			if ((matchingBundles[i].getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) {
+				return matchingBundles[i];
+			}
+		}
+		return null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigAdvice.java
new file mode 100644
index 0000000..005b305
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigAdvice.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.util.Map;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
+import org.eclipse.equinox.p2.publisher.AbstractAdvice;
+
+public class ConfigAdvice extends AbstractAdvice implements IConfigAdvice {
+
+	private ConfigData data;
+	private String configSpec;
+
+	public ConfigAdvice(ConfigData data, String configSpec) {
+		this.data = data;
+		this.configSpec = configSpec;
+	}
+
+	public BundleInfo[] getBundles() {
+		return data.getBundles();
+	}
+
+	protected String getConfigSpec() {
+		return configSpec;
+	}
+
+	public Map<String, String> getProperties() {
+		return CollectionUtils.toMap(data.getProperties());
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigCUsAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigCUsAction.java
new file mode 100644
index 0000000..e254cb0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigCUsAction.java
@@ -0,0 +1,398 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.util.*;
+import java.util.Map.Entry;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.internal.p2.metadata.TouchpointInstruction;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+
+/**
+ * Publish CUs for all the configuration data in the current result.
+ * This adds config-specific CUs to capture start levels etc found in the config.ini
+ * etc for is os, ws, arch combination seen so far.
+ */
+public class ConfigCUsAction extends AbstractPublisherAction {
+
+	protected static final String ORG_ECLIPSE_UPDATE_CONFIGURATOR = "org.eclipse.update.configurator"; //$NON-NLS-1$
+	protected static final String DEFAULT_START_LEVEL = "osgi.bundles.defaultStartLevel"; //$NON-NLS-1$
+	private static Collection<String> PROPERTIES_TO_SKIP;
+	private static HashSet<String> PROGRAM_ARGS_TO_SKIP;
+	protected Version version;
+	protected String id;
+	protected String flavor;
+	IPublisherResult outerResults = null;
+
+	// TODO consider moving this filtering to the LaunchingAdvice and ConfigAdvice so 
+	// it is not hardcoded in the action.
+	static {
+		PROPERTIES_TO_SKIP = new HashSet<String>();
+		PROPERTIES_TO_SKIP.add("osgi.frameworkClassPath"); //$NON-NLS-1$
+		PROPERTIES_TO_SKIP.add("osgi.framework"); //$NON-NLS-1$
+		PROPERTIES_TO_SKIP.add("osgi.bundles"); //$NON-NLS-1$
+		PROPERTIES_TO_SKIP.add("eof"); //$NON-NLS-1$
+		PROPERTIES_TO_SKIP.add("eclipse.p2.profile"); //$NON-NLS-1$
+		PROPERTIES_TO_SKIP.add("eclipse.p2.data.area"); //$NON-NLS-1$
+		PROPERTIES_TO_SKIP.add("org.eclipse.update.reconcile"); //$NON-NLS-1$
+		PROPERTIES_TO_SKIP.add("org.eclipse.equinox.simpleconfigurator.configUrl"); //$NON-NLS-1$
+
+		PROGRAM_ARGS_TO_SKIP = new HashSet<String>();
+		PROGRAM_ARGS_TO_SKIP.add("--launcher.library"); //$NON-NLS-1$
+		PROGRAM_ARGS_TO_SKIP.add("-startup"); //$NON-NLS-1$
+		PROGRAM_ARGS_TO_SKIP.add("-configuration"); //$NON-NLS-1$
+	}
+
+	public static String getAbstractCUCapabilityNamespace(String id, String type, String flavor, String configSpec) {
+		return flavor + id;
+	}
+
+	public static String getAbstractCUCapabilityId(String id, String type, String flavor, String configSpec) {
+		return id + "." + type; //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the id of the top level IU published by this action for the given id and flavor.
+	 * @param id the id of the application being published
+	 * @param flavor the flavor being published
+	 * @return the if for ius published by this action
+	 */
+	public static String computeIUId(String id, String flavor) {
+		return flavor + id + ".configuration"; //$NON-NLS-1$
+	}
+
+	public ConfigCUsAction(IPublisherInfo info, String flavor, String id, Version version) {
+		this.flavor = flavor;
+		this.id = id;
+		this.version = version;
+	}
+
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		IPublisherResult innerResult = new PublisherResult();
+		this.outerResults = results;
+		this.info = publisherInfo;
+		// we have N platforms, generate a CU for each
+		// TODO try and find common properties across platforms
+		String[] configSpecs = publisherInfo.getConfigurations();
+		for (int i = 0; i < configSpecs.length; i++) {
+			if (monitor.isCanceled())
+				return Status.CANCEL_STATUS;
+			String configSpec = configSpecs[i];
+			Collection<IConfigAdvice> configAdvice = publisherInfo.getAdvice(configSpec, false, id, version, IConfigAdvice.class);
+			BundleInfo[] bundles = fillInBundles(configAdvice, results);
+			publishBundleCUs(publisherInfo, bundles, configSpec, innerResult);
+			publishConfigIUs(configAdvice, innerResult, configSpec);
+			Collection<IExecutableAdvice> launchingAdvice = publisherInfo.getAdvice(configSpec, false, id, version, IExecutableAdvice.class);
+			publishIniIUs(launchingAdvice, innerResult, configSpec);
+		}
+		// merge the IUs  into the final result as non-roots and create a parent IU that captures them all
+		results.merge(innerResult, IPublisherResult.MERGE_ALL_NON_ROOT);
+		publishTopLevelConfigurationIU(innerResult.getIUs(null, IPublisherResult.ROOT), results);
+		return Status.OK_STATUS;
+	}
+
+	private void publishTopLevelConfigurationIU(Collection<? extends IVersionedId> children, IPublisherResult result) {
+		InstallableUnitDescription descriptor = createParentIU(children, computeIUId(id, flavor), version);
+		descriptor.setSingleton(true);
+		IInstallableUnit rootIU = MetadataFactory.createInstallableUnit(descriptor);
+		if (rootIU == null)
+			return;
+		result.addIU(rootIU, IPublisherResult.ROOT);
+	}
+
+	// there seem to be cases where the bundle infos are not filled in with symbolic name and version.
+	// fill in the missing data.
+	private BundleInfo[] fillInBundles(Collection<IConfigAdvice> configAdvice, IPublisherResult results) {
+		ArrayList<BundleInfo> result = new ArrayList<BundleInfo>();
+		for (IConfigAdvice advice : configAdvice) {
+
+			int defaultStart = BundleInfo.NO_LEVEL;
+			Map<String, String> adviceProperties = advice.getProperties();
+			if (adviceProperties.containsKey(DEFAULT_START_LEVEL)) {
+				try {
+					defaultStart = Integer.parseInt(adviceProperties.get(DEFAULT_START_LEVEL));
+				} catch (NumberFormatException e) {
+					//don't know default
+				}
+			}
+
+			BundleInfo[] bundles = advice.getBundles();
+			for (int i = 0; i < bundles.length; i++) {
+				BundleInfo bundleInfo = bundles[i];
+
+				if (bundleInfo.getStartLevel() != BundleInfo.NO_LEVEL && bundleInfo.getStartLevel() == defaultStart) {
+					bundleInfo.setStartLevel(BundleInfo.NO_LEVEL);
+				}
+
+				// prime the result with the current info.  This will be replaced if there is more info...
+				if ((bundleInfo.getSymbolicName() != null && bundleInfo.getVersion() != null) || bundleInfo.getLocation() == null)
+					result.add(bundles[i]);
+				else {
+					try {
+						File location = new File(bundleInfo.getLocation());
+						Dictionary<String, String> manifest = BundlesAction.loadManifest(location);
+						if (manifest == null)
+							continue;
+						GeneratorBundleInfo newInfo = new GeneratorBundleInfo(bundleInfo);
+						ManifestElement[] element = ManifestElement.parseHeader("dummy-bsn", manifest.get(Constants.BUNDLE_SYMBOLICNAME)); //$NON-NLS-1$
+						newInfo.setSymbolicName(element[0].getValue());
+						newInfo.setVersion(manifest.get(Constants.BUNDLE_VERSION));
+						result.add(newInfo);
+					} catch (BundleException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+		return result.toArray(new BundleInfo[result.size()]);
+	}
+
+	/**
+	 * Publish the IUs that capture the eclipse.ini information such as vmargs and program args, etc
+	 */
+	private void publishIniIUs(Collection<IExecutableAdvice> launchingAdvice, IPublisherResult results, String configSpec) {
+		if (launchingAdvice.isEmpty())
+			return;
+
+		String configureData = ""; //$NON-NLS-1$
+		String unconfigureData = ""; //$NON-NLS-1$
+		if (!launchingAdvice.isEmpty()) {
+			String[] dataStrings = getLauncherConfigStrings(launchingAdvice);
+			configureData += dataStrings[0];
+			unconfigureData += dataStrings[1];
+		}
+		// if there is nothing to configure or unconfigure, then don't even bother generating this IU
+		if (configureData.length() == 0 && unconfigureData.length() == 0)
+			return;
+
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		touchpointData.put("configure", configureData); //$NON-NLS-1$
+		touchpointData.put("unconfigure", unconfigureData); //$NON-NLS-1$
+		IInstallableUnit cu = createCU(id, version, "ini", flavor, configSpec, touchpointData); //$NON-NLS-1$
+		results.addIU(cu, IPublisherResult.ROOT);
+	}
+
+	/**
+	 * Publish the IUs that capture the config.ini information such as properties etc
+	 */
+	private void publishConfigIUs(Collection<IConfigAdvice> configAdvice, IPublisherResult results, String configSpec) {
+		if (configAdvice.isEmpty())
+			return;
+
+		String configureData = ""; //$NON-NLS-1$
+		String unconfigureData = ""; //$NON-NLS-1$
+		if (!configAdvice.isEmpty()) {
+			String[] dataStrings = getConfigurationStrings(configAdvice);
+			configureData += dataStrings[0];
+			unconfigureData += dataStrings[1];
+		}
+		// if there is nothing to configure or unconfigure, then don't even bother generating this IU
+		if (configureData.length() == 0 && unconfigureData.length() == 0)
+			return;
+
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		touchpointData.put("configure", configureData); //$NON-NLS-1$
+		touchpointData.put("unconfigure", unconfigureData); //$NON-NLS-1$
+		IInstallableUnit cu = createCU(id, version, "config", flavor, configSpec, touchpointData); //$NON-NLS-1$
+		results.addIU(cu, IPublisherResult.ROOT);
+	}
+
+	/**
+	 * Create a CU whose id is flavor+id.type.configspec with the given version. 
+	 * The resultant IU has the self capability and an abstract capabilty in the flavor+id namespace
+	 * with the name id.type and the given version.  This allows others to create an abstract
+	 * dependency on having one of these things around but not having to list out the configs.
+	 */
+	private IInstallableUnit createCU(String cuId, Version cuVersion, String cuType, String cuFlavor, String configSpec, Map<String, String> touchpointData) {
+		InstallableUnitDescription cu = new InstallableUnitDescription();
+		String resultId = createCUIdString(cuId, cuType, cuFlavor, configSpec);
+		cu.setId(resultId);
+		cu.setVersion(cuVersion);
+		cu.setFilter(createFilterSpec(configSpec));
+		IProvidedCapability selfCapability = PublisherHelper.createSelfCapability(resultId, cuVersion);
+		String namespace = getAbstractCUCapabilityNamespace(cuId, cuType, cuFlavor, configSpec);
+		String abstractId = getAbstractCUCapabilityId(cuId, cuType, cuFlavor, configSpec);
+		IProvidedCapability abstractCapability = MetadataFactory.createProvidedCapability(namespace, abstractId, cuVersion);
+		cu.setCapabilities(new IProvidedCapability[] {selfCapability, abstractCapability});
+		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+		cu.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
+		return MetadataFactory.createInstallableUnit(cu);
+	}
+
+	protected String[] getConfigurationStrings(Collection<IConfigAdvice> configAdvice) {
+		String configurationData = ""; //$NON-NLS-1$
+		String unconfigurationData = ""; //$NON-NLS-1$
+		Set<String> properties = new HashSet<String>();
+		for (IConfigAdvice advice : configAdvice) {
+			for (Entry<String, String> aProperty : advice.getProperties().entrySet()) {
+				String key = aProperty.getKey();
+				if (shouldPublishProperty(key) && !properties.contains(key)) {
+					properties.add(key);
+					Map<String, String> parameters = new LinkedHashMap<String, String>();
+					parameters.put("propName", key); //$NON-NLS-1$
+					parameters.put("propValue", aProperty.getValue()); //$NON-NLS-1$
+					configurationData += TouchpointInstruction.encodeAction("setProgramProperty", parameters); //$NON-NLS-1$
+					parameters.put("propValue", ""); //$NON-NLS-1$//$NON-NLS-2$
+					unconfigurationData += TouchpointInstruction.encodeAction("setProgramProperty", parameters); //$NON-NLS-1$
+				}
+			}
+		}
+		return new String[] {configurationData, unconfigurationData};
+	}
+
+	private boolean shouldPublishProperty(String key) {
+		return !PROPERTIES_TO_SKIP.contains(key);
+	}
+
+	private boolean shouldPublishJvmArg(String key) {
+		return true;
+	}
+
+	private boolean shouldPublishProgramArg(String key) {
+		return !PROGRAM_ARGS_TO_SKIP.contains(key);
+	}
+
+	protected String[] getLauncherConfigStrings(Collection<IExecutableAdvice> launchingAdvice) {
+		String configurationData = ""; //$NON-NLS-1$
+		String unconfigurationData = ""; //$NON-NLS-1$
+
+		Map<String, String> touchpointParameters = new LinkedHashMap<String, String>();
+		Set<String> jvmSet = new HashSet<String>();
+		Set<String> programSet = new HashSet<String>();
+		for (IExecutableAdvice advice : launchingAdvice) {
+			String[] jvmArgs = advice.getVMArguments();
+			for (int i = 0; i < jvmArgs.length; i++)
+				if (shouldPublishJvmArg(jvmArgs[i]) && !jvmSet.contains(jvmArgs[i])) {
+					jvmSet.add(jvmArgs[i]);
+					touchpointParameters.clear();
+					touchpointParameters.put("jvmArg", jvmArgs[i]); //$NON-NLS-1$
+					configurationData += TouchpointInstruction.encodeAction("addJvmArg", touchpointParameters); //$NON-NLS-1$
+					unconfigurationData += TouchpointInstruction.encodeAction("removeJvmArg", touchpointParameters); //$NON-NLS-1$
+				}
+			String[] programArgs = advice.getProgramArguments();
+			for (int i = 0; i < programArgs.length; i++)
+				if (shouldPublishProgramArg(programArgs[i]) && !programSet.contains(programArgs[i])) {
+					if (programArgs[i].startsWith("-")) //$NON-NLS-1$
+						programSet.add(programArgs[i]);
+					touchpointParameters.clear();
+					touchpointParameters.put("programArg", programArgs[i]); //$NON-NLS-1$
+					configurationData += TouchpointInstruction.encodeAction("addProgramArg", touchpointParameters); //$NON-NLS-1$
+					unconfigurationData += TouchpointInstruction.encodeAction("removeProgramArg", touchpointParameters); //$NON-NLS-1$
+				} else if (i + 1 < programArgs.length && !programArgs[i + 1].startsWith("-")) { //$NON-NLS-1$
+					// if we are not publishing then skip over the following arg as it is assumed to be a parameter
+					// to this command line arg.
+					i++;
+				}
+		}
+		return new String[] {configurationData, unconfigurationData};
+	}
+
+	/**
+	 * Publish the CUs related to the given set of bundles.  This generally covers the start-level and 
+	 * and whether or not the bundle is to be started.
+	 */
+	protected void publishBundleCUs(IPublisherInfo publisherInfo, BundleInfo[] bundles, String configSpec, IPublisherResult result) {
+		if (bundles == null)
+			return;
+
+		String cuIdPrefix = ""; //$NON-NLS-1$
+		IMatchExpression<IInstallableUnit> filter = null;
+		if (configSpec != null) {
+			cuIdPrefix = createIdString(configSpec);
+			filter = createFilterSpec(configSpec);
+		}
+
+		for (int i = 0; i < bundles.length; i++) {
+			GeneratorBundleInfo bundle = createGeneratorBundleInfo(bundles[i], result);
+			if (bundle == null)
+				continue;
+
+			IInstallableUnit iu = bundle.getIU();
+
+			// If there is no host, or the filters don't match, skip this one.
+			if (iu == null || !filterMatches(iu.getFilter(), configSpec))
+				continue;
+
+			// TODO need to factor this out into its own action
+			if (bundle.getSymbolicName().equals(ORG_ECLIPSE_UPDATE_CONFIGURATOR)) {
+				bundle.setStartLevel(BundleInfo.NO_LEVEL);
+				bundle.setMarkedAsStarted(false);
+				bundle.setSpecialConfigCommands("setProgramProperty(propName:org.eclipse.update.reconcile, propValue:false);"); //$NON-NLS-1$
+				bundle.setSpecialUnconfigCommands("setProgramProperty(propName:org.eclipse.update.reconcile, propValue:);"); //$NON-NLS-1$
+			} else if (bundle.getStartLevel() == BundleInfo.NO_LEVEL && !bundle.isMarkedAsStarted()) {
+				// this bundle does not require any particular configuration, the plug-in default IU will handle installing it
+				continue;
+			}
+
+			IInstallableUnit cu = null;
+			if (this.version != null && !this.version.equals(Version.emptyVersion))
+				cu = BundlesAction.createBundleConfigurationUnit(bundle.getSymbolicName(), this.version, false, bundle, flavor + cuIdPrefix, filter);
+			else
+				cu = BundlesAction.createBundleConfigurationUnit(bundle.getSymbolicName(), Version.parseVersion(bundle.getVersion()), false, bundle, flavor + cuIdPrefix, filter);
+
+			if (cu != null) {
+				// Product Query will run against the repo, make sure these CUs are in before then
+				// TODO review the aggressive addition to the metadata repo.  perhaps the query can query the result as well.
+				//				IMetadataRepository metadataRepository = info.getMetadataRepository();
+				//				if (metadataRepository != null) {
+				//					metadataRepository.addInstallableUnits(new IInstallableUnit[] {cu});
+				//				}
+				result.addIU(cu, IPublisherResult.ROOT);
+			}
+		}
+	}
+
+	protected GeneratorBundleInfo createGeneratorBundleInfo(BundleInfo bundleInfo, IPublisherResult result) {
+		String name = bundleInfo.getSymbolicName();
+
+		//query for a matching IU
+		IInstallableUnit iu = queryForIU(outerResults, name, Version.create(bundleInfo.getVersion()));
+		if (iu != null) {
+			if (iu.getVersion() == null)
+				bundleInfo.setVersion("0.0.0"); //$NON-NLS-1$
+			else
+				bundleInfo.setVersion(iu.getVersion().toString());
+			GeneratorBundleInfo newInfo = new GeneratorBundleInfo(bundleInfo);
+			newInfo.setIU(iu);
+			return newInfo;
+		}
+
+		if (bundleInfo.getLocation() != null || bundleInfo.getVersion() != null)
+			return new GeneratorBundleInfo(bundleInfo);
+		//harder: try id_version
+		int i = name.indexOf('_');
+		while (i > -1) {
+			try {
+				Version bundleVersion = Version.parseVersion(name.substring(i));
+				bundleInfo.setSymbolicName(name.substring(0, i));
+				bundleInfo.setVersion(bundleVersion.toString());
+				return new GeneratorBundleInfo(bundleInfo);
+			} catch (IllegalArgumentException e) {
+				// the '_' found was probably part of the symbolic id
+				i = name.indexOf('_', i);
+			}
+		}
+
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/DefaultCUsAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/DefaultCUsAction.java
new file mode 100644
index 0000000..d850315
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/DefaultCUsAction.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+
+/**
+ * Publish IUs that install/configure the standard things like bundles, features and source bundles
+ */
+public class DefaultCUsAction extends AbstractPublisherAction {
+
+	private String flavor;
+	private int startLevel;
+	private boolean start;
+
+	public DefaultCUsAction(IPublisherInfo info, String flavor, int startLevel, boolean start) {
+		this.flavor = flavor;
+		this.startLevel = startLevel;
+		this.start = start;
+	}
+
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		setPublisherInfo(publisherInfo);
+		generateDefaultConfigIU(results);
+		return Status.OK_STATUS;
+	}
+
+	protected void generateDefaultConfigIU(IPublisherResult result) {
+		//		TODO this is a bit of a hack.  We need to have the default IU fragment generated with code that configures
+		//		and unconfigures.  The Generator should be decoupled from any particular provider but it is not clear
+		//		that we should add the create* methods to IGeneratorInfo...
+		//		MockBundleDescription bd1 = new MockBundleDescription("defaultConfigure");
+		//		MockBundleDescription bd2 = new MockBundleDescription("defaultUnconfigure");
+		result.addIU(BundlesAction.createDefaultBundleConfigurationUnit(createDefaultConfigurationBundleInfo(), createDefaultUnconfigurationBundleInfo(), flavor), IPublisherResult.ROOT);
+		result.addIU(PublisherHelper.createDefaultFeatureConfigurationUnit(flavor), IPublisherResult.ROOT);
+		result.addIU(PublisherHelper.createDefaultConfigurationUnitForSourceBundles(flavor), IPublisherResult.ROOT);
+	}
+
+	protected GeneratorBundleInfo createDefaultConfigurationBundleInfo() {
+		GeneratorBundleInfo result = new GeneratorBundleInfo();
+		result.setSymbolicName("defaultConfigure"); //$NON-NLS-1$
+		result.setVersion("1.0.0"); //$NON-NLS-1$
+		result.setStartLevel(startLevel);
+		result.setMarkedAsStarted(start);
+		// These should just be in the install section now
+		//		result.setSpecialConfigCommands("installBundle(bundle:${artifact});");
+		return result;
+	}
+
+	protected GeneratorBundleInfo createDefaultUnconfigurationBundleInfo() {
+		GeneratorBundleInfo result = new GeneratorBundleInfo();
+		result.setSymbolicName("defaultUnconfigure"); //$NON-NLS-1$
+		result.setVersion("1.0.0"); //$NON-NLS-1$
+		// These should just be in the uninstall section now
+		//		result.setSpecialConfigCommands("uninstallBundle(bundle:${artifact});");
+		return result;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EclipseInstallAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EclipseInstallAction.java
new file mode 100644
index 0000000..97cb5c1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EclipseInstallAction.java
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.ExecutablesDescriptor;
+import org.eclipse.equinox.p2.metadata.IVersionedId;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.*;
+
+public class EclipseInstallAction extends AbstractPublisherAction {
+	protected String source;
+	protected String id;
+	protected Version version;
+	protected String name;
+	protected String executableName;
+	protected String flavor;
+	protected IVersionedId[] topLevel;
+	protected String[] nonRootFiles;
+	protected boolean start = false;
+
+	protected EclipseInstallAction() {
+		//hidden
+	}
+
+	public EclipseInstallAction(String source, String id, Version version, String name, String executableName, String flavor, IVersionedId[] topLevel, String[] nonRootFiles, boolean start) {
+		this.source = source;
+		this.id = id;
+		this.version = version;
+		this.name = name == null ? id : name;
+		this.executableName = executableName == null ? "eclipse" : executableName; //$NON-NLS-1$
+		this.flavor = flavor;
+		this.topLevel = topLevel;
+		this.nonRootFiles = nonRootFiles;
+		this.start = start;
+	}
+
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		monitor = SubMonitor.convert(monitor);
+		this.info = publisherInfo;
+		IPublisherAction[] actions = createActions();
+		MultiStatus finalStatus = new MultiStatus(EclipseInstallAction.class.getName(), 0, "publishing result", null); //$NON-NLS-1$
+		for (int i = 0; i < actions.length; i++) {
+			if (monitor.isCanceled())
+				return Status.CANCEL_STATUS;
+			finalStatus.merge(actions[i].perform(publisherInfo, results, monitor));
+		}
+		if (!finalStatus.isOK())
+			return finalStatus;
+		return Status.OK_STATUS;
+	}
+
+	protected IPublisherAction[] createActions() {
+		createAdvice();
+		ArrayList<IPublisherAction> actions = new ArrayList<IPublisherAction>();
+		// create an action that just publishes the raw bundles and features
+		IPublisherAction action = new MergeResultsAction(new IPublisherAction[] {createFeaturesAction(), createBundlesAction()}, IPublisherResult.MERGE_ALL_ROOT);
+		actions.add(action);
+		actions.add(createApplicationExecutableAction(info.getConfigurations()));
+		actions.add(createRootFilesAction());
+		actions.addAll(createAccumulateConfigDataActions(info.getConfigurations()));
+		actions.add(createJREAction());
+		actions.add(createConfigCUsAction());
+		actions.add(createDefaultCUsAction());
+		actions.add(createRootIUAction());
+		return actions.toArray(new IPublisherAction[actions.size()]);
+	}
+
+	private void createAdvice() {
+		createRootFilesAdvice();
+		createRootAdvice();
+	}
+
+	protected void createRootAdvice() {
+		if (topLevel != null)
+			info.addAdvice(new RootIUAdvice(getTopLevel()));
+		info.addAdvice(new RootIUResultFilterAdvice(null));
+	}
+
+	protected IPublisherAction createDefaultCUsAction() {
+		return new DefaultCUsAction(info, flavor, 4, start);
+	}
+
+	protected IPublisherAction createRootIUAction() {
+		return new RootIUAction(id, version, name);
+	}
+
+	protected Collection<IVersionedId> getTopLevel() {
+		return Arrays.asList(topLevel);
+	}
+
+	protected IPublisherAction createJREAction() {
+		return new JREAction((File) null);
+	}
+
+	protected IPublisherAction createApplicationExecutableAction(String[] configSpecs) {
+		return new ApplicationLauncherAction(id, version, flavor, executableName, getExecutablesLocation(), configSpecs);
+	}
+
+	protected Collection<IPublisherAction> createAccumulateConfigDataActions(String[] configs) {
+		File configuration = new File(source, "configuration/config.ini"); //$NON-NLS-1$
+		if (!configuration.exists())
+			configuration = null;
+
+		Collection<IPublisherAction> result = new ArrayList<IPublisherAction>(configs.length);
+		for (int i = 0; i < configs.length; i++) {
+			String configSpec = configs[i];
+			String os = AbstractPublisherAction.parseConfigSpec(configSpec)[1];
+			File executable = ExecutablesDescriptor.findExecutable(os, computeExecutableLocation(configSpec), "eclipse"); //$NON-NLS-1$
+			if (!executable.exists())
+				executable = null;
+			IPublisherAction action = new AccumulateConfigDataAction(info, configSpec, configuration, executable);
+			result.add(action);
+		}
+
+		return result;
+	}
+
+	protected IPublisherAction createConfigCUsAction() {
+		return new ConfigCUsAction(info, flavor, id, version);
+	}
+
+	protected IPublisherAction createFeaturesAction() {
+		return new FeaturesAction(new File[] {new File(source, "features")}); //$NON-NLS-1$
+	}
+
+	protected Collection<IPublisherAction> createExecutablesActions(String[] configSpecs) {
+		Collection<IPublisherAction> result = new ArrayList<IPublisherAction>(configSpecs.length);
+		for (int i = 0; i < configSpecs.length; i++) {
+			ExecutablesDescriptor executables = computeExecutables(configSpecs[i]);
+			IPublisherAction action = new EquinoxExecutableAction(executables, configSpecs[i], id, version, flavor);
+			result.add(action);
+		}
+		return result;
+	}
+
+	protected IPublisherAction createRootFilesAction() {
+		return new RootFilesAction(info, id, version, flavor);
+	}
+
+	protected void createRootFilesAdvice() {
+		File[] baseExclusions = computeRootFileExclusions();
+		if (baseExclusions != null)
+			info.addAdvice(new RootFilesAdvice(null, null, baseExclusions, null));
+		String[] configs = info.getConfigurations();
+		for (int i = 0; i < configs.length; i++)
+			info.addAdvice(computeRootFileAdvice(configs[i]));
+	}
+
+	protected IPublisherAdvice computeRootFileAdvice(String configSpec) {
+		File root = computeRootFileRoot(configSpec);
+		File[] inclusions = computeRootFileInclusions(configSpec);
+		File[] exclusions = computeRootFileExclusions(configSpec);
+		return new RootFilesAdvice(root, inclusions, exclusions, configSpec);
+	}
+
+	protected File[] computeRootFileExclusions(String configSpec) {
+		ExecutablesDescriptor executables = computeExecutables(configSpec);
+		File[] files = executables.getFiles();
+		File[] result = new File[files.length + 1];
+		System.arraycopy(files, 0, result, 0, files.length);
+		result[files.length] = executables.getIniLocation();
+		return result;
+	}
+
+	protected File[] computeRootFileExclusions() {
+		if (nonRootFiles == null || nonRootFiles.length == 0)
+			return null;
+		ArrayList<File> result = new ArrayList<File>();
+		for (int i = 0; i < nonRootFiles.length; i++) {
+			String filename = nonRootFiles[i];
+			File file = new File(filename);
+			if (file.isAbsolute())
+				result.add(file);
+			else
+				result.add(new File(source, filename));
+		}
+		return result.toArray(new File[result.size()]);
+	}
+
+	protected ExecutablesDescriptor computeExecutables(String configSpec) {
+		String os = AbstractPublisherAction.parseConfigSpec(configSpec)[1];
+		// TODO here we should not assume that the executable is called "eclipse"
+		return ExecutablesDescriptor.createDescriptor(os, "eclipse", computeExecutableLocation(configSpec)); //$NON-NLS-1$
+	}
+
+	protected File computeRootFileRoot(String configSpec) {
+		return new File(source);
+	}
+
+	protected File[] computeRootFileInclusions(String configSpec) {
+		return new File[] {new File(source)};
+	}
+
+	protected File computeExecutableLocation(String configSpec) {
+		return new File(source);
+	}
+
+	protected File getExecutablesLocation() {
+		return new File(source);
+	}
+
+	protected IPublisherAction createBundlesAction() {
+		// TODO need to add in the simple configorator and reconciler bundle descriptions.
+		// TODO bundles action needs to take bundleDescriptions directly rather than just files.
+		return new BundlesAction(new File[] {new File(source, "plugins")}); //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EclipsePublisherHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EclipsePublisherHelper.java
new file mode 100644
index 0000000..07eeaf0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EclipsePublisherHelper.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Genuitec, LLC - added license support
+ *     Code 9 - Ongoing development
+#      SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
+import org.eclipse.equinox.p2.metadata.IArtifactKey;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.publisher.IPublisherInfo;
+import org.eclipse.equinox.p2.publisher.PublisherInfo;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+
+public class EclipsePublisherHelper {
+	public static IInstallableUnit[] createEclipseIU(BundleDescription bd, boolean isFolderPlugin, IArtifactKey key, Map<String, String> extraProperties) {
+		ArrayList<IInstallableUnit> iusCreated = new ArrayList<IInstallableUnit>(1);
+		IPublisherInfo info = new PublisherInfo();
+		String shape = isFolderPlugin ? IBundleShapeAdvice.DIR : IBundleShapeAdvice.JAR;
+		info.addAdvice(new BundleShapeAdvice(bd.getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion()), shape));
+		IInstallableUnit iu = BundlesAction.createBundleIU(bd, key, info);
+		addExtraProperties(iu, extraProperties);
+		iusCreated.add(iu);
+		return (iusCreated.toArray(new IInstallableUnit[iusCreated.size()]));
+	}
+
+	private static void addExtraProperties(IInstallableUnit iiu, Map<String, String> extraProperties) {
+		if (iiu instanceof InstallableUnit) {
+			InstallableUnit iu = (InstallableUnit) iiu;
+
+			for (Entry<String, String> entry : extraProperties.entrySet()) {
+				iu.setProperty(entry.getKey(), entry.getValue());
+			}
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxExecutableAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxExecutableAction.java
new file mode 100644
index 0000000..36f1af6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxExecutableAction.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.BrandingIron;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.ExecutablesDescriptor;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.eclipse.osgi.service.environment.Constants;
+
+/**
+ * Given the description of an executable, this action publishes optionally 
+ * non-destructively brands the executable, publishes the resultant artifacts
+ * and publishes the required IUs to identify the branded executable, configure
+ * the executable and set it up as the launcher for a profile.
+ * <p>
+ * This action works on one platform configuration only.
+ * <p>
+ * This action consults the following types of advice:
+ * </ul>
+ * <li>{@link IBrandingAdvice}</li>
+ * </ul>
+ */
+public class EquinoxExecutableAction extends AbstractPublisherAction {
+	private static String TYPE = "executable"; //$NON-NLS-1$
+
+	protected String configSpec;
+	protected String idBase;
+	protected Version version;
+	protected ExecutablesDescriptor executables;
+	protected String flavor;
+
+	protected EquinoxExecutableAction() {
+		//hidden
+	}
+
+	public EquinoxExecutableAction(ExecutablesDescriptor executables, String configSpec, String idBase, Version version, String flavor) {
+		this.executables = executables;
+		this.configSpec = configSpec;
+		this.idBase = idBase == null ? "org.eclipse" : idBase; //$NON-NLS-1$
+		this.version = version;
+		this.flavor = flavor;
+	}
+
+	@Override
+	public IStatus perform(IPublisherInfo publisherinfo, IPublisherResult result, IProgressMonitor monitor) {
+		setPublisherInfo(publisherinfo);
+		ExecutablesDescriptor brandedExecutables = brandExecutables(executables);
+		try {
+			if (publishExecutableIU(brandedExecutables, result))
+				publishExecutableCU(brandedExecutables, result);
+			publishExecutableSetter(brandedExecutables, result);
+		} finally {
+			if (brandedExecutables.isTemporary())
+				FileUtils.deleteAll(brandedExecutables.getLocation());
+		}
+		return Status.OK_STATUS;
+	}
+
+	/**
+	 * Publishes the IUs that cause the executable to be actually set as the launcher for 
+	 * the profile
+	 */
+	private void publishExecutableSetter(ExecutablesDescriptor brandedExecutables, IPublisherResult result) {
+		InstallableUnitDescription iud = new MetadataFactory.InstallableUnitDescription();
+		String executableName = brandedExecutables.getExecutableName();
+		String id = getExecutableId() + '.' + executableName;
+		iud.setId(id);
+		iud.setVersion(version);
+		iud.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
+		iud.setCapabilities(new IProvidedCapability[] {createSelfCapability(id, version)});
+		iud.setFilter(createFilterSpec(configSpec));
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		touchpointData.put("configure", "setLauncherName(name:" + executableName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		touchpointData.put("unconfigure", "setLauncherName()"); //$NON-NLS-1$ //$NON-NLS-2$
+		iud.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+		result.addIU(MetadataFactory.createInstallableUnit(iud), IPublisherResult.ROOT);
+	}
+
+	/**
+	 * Publishes IUs and CUs for the files that make up the launcher for a given
+	 * ws/os/arch combination.
+	 */
+	protected boolean publishExecutableIU(ExecutablesDescriptor execDescriptor, IPublisherResult result) {
+		String[] config = parseConfigSpec(configSpec);
+		if (execDescriptor.getFiles().length == 0 && (config.length == 0 || CONFIG_ANY.equalsIgnoreCase(config[0]))) {
+			return false; //no cu required
+		}
+		boolean publishCU = true;
+
+		// Create the IU for the executable
+		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
+		String id = getExecutableId();
+		iu.setId(id);
+		iu.setVersion(version);
+		IMatchExpression<IInstallableUnit> filter = createFilterSpec(configSpec);
+		iu.setFilter(filter);
+		iu.setSingleton(true);
+		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_NATIVE);
+		String namespace = ConfigCUsAction.getAbstractCUCapabilityNamespace(idBase, TYPE, flavor, configSpec);
+		String capabilityId = ConfigCUsAction.getAbstractCUCapabilityId(idBase, TYPE, flavor, configSpec);
+		IProvidedCapability executableCapability = MetadataFactory.createProvidedCapability(namespace, capabilityId, version);
+		IProvidedCapability selfCapability = createSelfCapability(id, version);
+		iu.setCapabilities(new IProvidedCapability[] {selfCapability, executableCapability});
+
+		//Create the artifact descriptor.  we have several files so no path on disk
+		if (execDescriptor.getFiles().length == 0) {
+			publishCU = false;
+		} else {
+			IArtifactKey key = PublisherHelper.createBinaryArtifactKey(id, version);
+			iu.setArtifacts(new IArtifactKey[] {key});
+			IArtifactDescriptor descriptor = PublisherHelper.createArtifactDescriptor(info, key, null);
+			publishArtifact(descriptor, execDescriptor.getFiles(), null, info, createRootPrefixComputer(execDescriptor.getLocation()));
+			if (execDescriptor.isTemporary())
+				FileUtils.deleteAll(execDescriptor.getLocation());
+		}
+		// setup a requirement between the executable and the launcher fragment that has the shared library
+		if (config.length > 0 && !CONFIG_ANY.equalsIgnoreCase(config[0])) {
+			String ws = config[0];
+			String os = config[1];
+			String arch = config[2];
+			String launcherFragment = EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER + '.' + ws + '.' + os;
+			if (!(Constants.OS_MACOSX.equals(os) && !Constants.ARCH_X86_64.equals(arch)))
+				launcherFragment += '.' + arch;
+			iu.setRequirements(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, launcherFragment, VersionRange.emptyRange, filter, false, false)});
+		}
+		result.addIU(MetadataFactory.createInstallableUnit(iu), IPublisherResult.ROOT);
+		return publishCU;
+	}
+
+	private String getExecutableId() {
+		return createCUIdString(idBase, TYPE, "", configSpec); //$NON-NLS-1$
+	}
+
+	// Create the CU that installs (e.g., unzips) the executable
+	private void publishExecutableCU(ExecutablesDescriptor execDescriptor, IPublisherResult result) {
+		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
+		String id = createCUIdString(idBase, TYPE, flavor, configSpec);
+		cu.setId(id);
+		cu.setVersion(version);
+		cu.setFilter(createFilterSpec(configSpec));
+		String executableId = getExecutableId();
+		cu.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, executableId, new VersionRange(version, true, version, true), null, false, false)});
+		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
+		//TODO bug 218890, would like the fragment to provide the launcher capability as well, but can't right now.
+		cu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(id, version)});
+		cu.setTouchpointType(PublisherHelper.TOUCHPOINT_NATIVE);
+		String[] config = parseConfigSpec(configSpec);
+		String os = config[1];
+		Map<String, String> touchpointData = computeInstallActions(execDescriptor, os);
+		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+		IInstallableUnit unit = MetadataFactory.createInstallableUnit(cu);
+		result.addIU(unit, IPublisherResult.ROOT);
+	}
+
+	private Map<String, String> computeInstallActions(ExecutablesDescriptor execDescriptor, String os) {
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		String configurationData = "unzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
+		if (Constants.OS_MACOSX.equals(os)) {
+			String execName = execDescriptor.getExecutableName();
+			configurationData += " chmod(targetDir:${installFolder}/" + execName + ".app/Contents/MacOS/, targetFile:" + execName + ", permissions:755);"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		} else if (!Constants.OS_WIN32.equals(os)) {
+			// We are on linux/unix.  by default set all of the files to be executable.
+			File[] fileList = execDescriptor.getFiles();
+			for (int i = 0; i < fileList.length; i++)
+				configurationData += " chmod(targetDir:${installFolder}, targetFile:" + fileList[i].getName() + ", permissions:755);"; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		touchpointData.put("install", configurationData); //$NON-NLS-1$
+		String unConfigurationData = "cleanupzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
+		touchpointData.put("uninstall", unConfigurationData); //$NON-NLS-1$
+		return touchpointData;
+	}
+
+	/**
+	 * Brands a copy of the given executable descriptor with the information in the 
+	 * current product definition.  The files described in the descriptor are also copied
+	 * to a temporary location to avoid destructive modification.
+	 * 
+	 * @param descriptor the executable descriptor to brand.
+	 * @return the new descriptor
+	 */
+	protected ExecutablesDescriptor brandExecutables(ExecutablesDescriptor descriptor) {
+		ExecutablesDescriptor result = new ExecutablesDescriptor(descriptor);
+		result.makeTemporaryCopy();
+		IBrandingAdvice advice = getBrandingAdvice();
+		if (advice == null)
+			partialBrandExecutables(result);
+		else
+			fullBrandExecutables(result, advice);
+		return result;
+	}
+
+	private IBrandingAdvice getBrandingAdvice() {
+		// there is expected to only be one branding advice for a given configspec so
+		// just return the first one we find.
+		Collection<IBrandingAdvice> advice = info.getAdvice(configSpec, true, null, null, IBrandingAdvice.class);
+		for (Iterator<IBrandingAdvice> i = advice.iterator(); i.hasNext();)
+			return i.next();
+		return null;
+	}
+
+	protected void fullBrandExecutables(ExecutablesDescriptor descriptor, IBrandingAdvice advice) {
+		BrandingIron iron = new BrandingIron();
+		iron.setId(idBase);
+		iron.setVersion(version);
+		iron.setIcons(advice.getIcons());
+		String name = advice.getExecutableName();
+		if (name == null)
+			name = "eclipse"; //$NON-NLS-1$
+		iron.setName(name);
+		iron.setOS(advice.getOS());
+		// FIXME: use product's aboutText as description?
+		// iron.setDescription(advice.getAboutText());
+		try {
+			iron.brand(descriptor);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	protected void partialBrandExecutables(ExecutablesDescriptor descriptor) {
+		File[] list = descriptor.getFiles();
+		for (int i = 0; i < list.length; i++)
+			mungeExecutableFileName(list[i], descriptor);
+		descriptor.setExecutableName("eclipse", true); //$NON-NLS-1$
+	}
+
+	// TODO This method is a temporary hack to rename the launcher.exe files
+	// to eclipse.exe (or "launcher" to "eclipse"). Eventually we will either hand-craft
+	// metadata/artifacts for launchers, or alter the delta pack to contain eclipse-branded
+	// launchers.
+	private void mungeExecutableFileName(File file, ExecutablesDescriptor descriptor) {
+		if (file.getName().equals("launcher")) { //$NON-NLS-1$
+			File newFile = new File(file.getParentFile(), "eclipse"); //$NON-NLS-1$
+			file.renameTo(newFile);
+			descriptor.replace(file, newFile);
+		} else if (file.getName().equals("launcher.exe")) { //$NON-NLS-1$
+			File newFile = new File(file.getParentFile(), "eclipse.exe"); //$NON-NLS-1$
+			file.renameTo(newFile);
+			descriptor.replace(file, newFile);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxLauncherCUAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxLauncherCUAction.java
new file mode 100644
index 0000000..9e41724
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxLauncherCUAction.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.util.Collection;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.frameworkadmin.utils.Utils;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.IVersionAdvice;
+import org.eclipse.osgi.service.environment.Constants;
+
+/**
+ * Create CUs for all Equinox launcher related IUs for the given set of configurations
+ * such that the launcher is configured as the startup code and the fragments
+ * are configured as the launcher.library.  
+ * <p>
+ * This action expects to have find the versions of the launcher and launcher fragments
+ * via IVersionAdvice in the supplied info object.
+ * </p>
+ */
+public class EquinoxLauncherCUAction extends AbstractPublisherAction {
+
+	public static final String ORG_ECLIPSE_EQUINOX_LAUNCHER = "org.eclipse.equinox.launcher"; //$NON-NLS-1$
+
+	private String flavor;
+	private String[] configSpecs;
+
+	public EquinoxLauncherCUAction(String flavor, String[] configSpecs) {
+		this.flavor = flavor;
+		this.configSpecs = configSpecs;
+	}
+
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		setPublisherInfo(publisherInfo);
+		publishCU(ORG_ECLIPSE_EQUINOX_LAUNCHER, null, results);
+		publishLauncherFragmentCUs(results);
+		return Status.OK_STATUS;
+	}
+
+	/**
+	 * For each of the configurations we are publishing, create a launcher fragment
+	 * CU if there is version advice for the fragment.
+	 */
+	private void publishLauncherFragmentCUs(IPublisherResult results) {
+		String id = null;
+		for (int i = 0; i < configSpecs.length; i++) {
+			String configSpec = configSpecs[i];
+			String[] specs = Utils.getTokens(configSpec, "."); //$NON-NLS-1$
+			if (specs.length > 0 && !AbstractPublisherAction.CONFIG_ANY.equalsIgnoreCase(specs[0])) {
+				if (specs.length > 2 && Constants.OS_MACOSX.equals(specs[1]) && !Constants.ARCH_X86_64.equals(specs[2])) {
+					//launcher fragment for mac only has arch for x86_64
+					id = ORG_ECLIPSE_EQUINOX_LAUNCHER + '.' + specs[0] + '.' + specs[1];
+				} else {
+					id = ORG_ECLIPSE_EQUINOX_LAUNCHER + '.' + configSpec;
+				}
+				publishCU(id, configSpec, results);
+			}
+		}
+	}
+
+	/**
+	 * Publish a CU for the IU of the given id in the given config spec.  If the IU is the 
+	 * launcher bundle iu then set it up as the startup JAR.  If it is a launcher fragment then 
+	 * configure it in as the launcher.library for this configuration.
+	 */
+	private void publishCU(String id, String configSpec, IPublisherResult results) {
+		Collection<IVersionAdvice> advice = info.getAdvice(configSpec, true, id, null, IVersionAdvice.class);
+		for (IVersionAdvice versionSpec : advice) {
+			Version version = versionSpec.getVersion(IInstallableUnit.NAMESPACE_IU_ID, id);
+			if (version == null)
+				continue;
+			GeneratorBundleInfo bundle = new GeneratorBundleInfo();
+			bundle.setSymbolicName(id);
+			bundle.setVersion(version.toString());
+			if (id.equals(ORG_ECLIPSE_EQUINOX_LAUNCHER)) {
+				bundle.setSpecialConfigCommands("addProgramArg(programArg:-startup);addProgramArg(programArg:@artifact);"); //$NON-NLS-1$
+				bundle.setSpecialUnconfigCommands("removeProgramArg(programArg:-startup);removeProgramArg(programArg:@artifact);"); //$NON-NLS-1$
+			} else {
+				bundle.setSpecialConfigCommands("addProgramArg(programArg:--launcher.library);addProgramArg(programArg:@artifact);"); //$NON-NLS-1$
+				bundle.setSpecialUnconfigCommands("removeProgramArg(programArg:--launcher.library);removeProgramArg(programArg:@artifact);"); //$NON-NLS-1$
+			}
+			IMatchExpression<IInstallableUnit> filter = configSpec == null ? null : createFilterSpec(configSpec);
+			IInstallableUnit cu = BundlesAction.createBundleConfigurationUnit(id, version, false, bundle, flavor, filter);
+			if (cu != null)
+				results.addIU(cu, IPublisherResult.ROOT);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/Feature.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/Feature.java
new file mode 100644
index 0000000..441b89b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/Feature.java
@@ -0,0 +1,362 @@
+/*******************************************************************************
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.util.ArrayList;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * 
+ * Feature information
+ */
+public class Feature implements IPlatformEntry {
+
+	private final String id;
+	private String version;
+	private String label;
+	private String image;
+	private String brandingPlugin;
+	private boolean primary = false;
+	private boolean exclusive = false;
+	private String application;
+	private String colocationAffinity;
+
+	private URLEntry description;
+	private URLEntry license;
+	private String licenseFeature;
+	private String licenseFeatureVersion;
+	private URLEntry copyright;
+
+	private String installHandler;
+	private String installHandlerURL;
+	private String installHandlerLibrary;
+
+	private URLEntry updateSite;
+	private ArrayList<URLEntry> discoverySites;
+
+	private ArrayList<FeatureEntry> entries;
+	private String providerName;
+	private String os;
+	private String ws;
+	private String arch;
+	private String nl;
+
+	private String location;
+
+	private Map<Locale, Map<String, String>> localizations;
+
+	public Feature(String id, String version) {
+		if (id == null)
+			throw new IllegalArgumentException();
+		this.id = id;
+		this.version = version;
+	}
+
+	public void addDiscoverySite(String siteLabel, String url) {
+		if (siteLabel == null && url == null)
+			return;
+
+		if (this.discoverySites == null)
+			this.discoverySites = new ArrayList<URLEntry>();
+
+		URLEntry entry = new URLEntry(url, siteLabel);
+		this.discoverySites.add(entry);
+	}
+
+	public void addEntry(FeatureEntry plugin) {
+		if (entries == null)
+			entries = new ArrayList<FeatureEntry>();
+		entries.add(plugin);
+	}
+
+	public String getApplication() {
+		return application;
+	}
+
+	public String getArch() {
+		return arch;
+	}
+
+	public String getBrandingPlugin() {
+		return brandingPlugin;
+	}
+
+	public String getColocationAffinity() {
+		return colocationAffinity;
+	}
+
+	public String getCopyright() {
+		if (copyright != null)
+			return copyright.getAnnotation();
+		return null;
+	}
+
+	public String getCopyrightURL() {
+		if (copyright != null)
+			return copyright.getURL();
+		return null;
+	}
+
+	public String getDescription() {
+		if (description != null)
+			return description.getAnnotation();
+		return null;
+	}
+
+	public String getDescriptionURL() {
+		if (description != null)
+			return description.getURL();
+		return null;
+	}
+
+	public URLEntry[] getDiscoverySites() {
+		if (discoverySites == null)
+			return new URLEntry[0];
+		return discoverySites.toArray(new URLEntry[discoverySites.size()]);
+	}
+
+	public FeatureEntry[] getEntries() {
+		if (entries == null)
+			return new FeatureEntry[0];
+		return entries.toArray(new FeatureEntry[entries.size()]);
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public String getImage() {
+		return image;
+	}
+
+	public String getInstallHandler() {
+		return installHandler;
+	}
+
+	public String getInstallHandlerLibrary() {
+		return installHandlerLibrary;
+	}
+
+	public String getInstallHandlerURL() {
+		return installHandlerURL;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public String getLicense() {
+		if (license != null)
+			return license.getAnnotation();
+		return null;
+	}
+
+	public String getLicenseFeature() {
+		return licenseFeature;
+	}
+
+	public String getLicenseFeatureVersion() {
+		return licenseFeatureVersion;
+	}
+
+	public String getLicenseURL() {
+		if (license != null)
+			return license.getURL();
+		return null;
+	}
+
+	public Map<Locale, Map<String, String>> getLocalizations() {
+		return this.localizations;
+	}
+
+	public String getLocation() {
+		return this.location;
+	}
+
+	public String getNL() {
+		return nl;
+	}
+
+	public String getOS() {
+		return os;
+	}
+
+	public String getProviderName() {
+		return providerName;
+	}
+
+	public URLEntry getUpdateSite() {
+		return updateSite;
+	}
+
+	public String getUpdateSiteLabel() {
+		if (updateSite != null)
+			return updateSite.getAnnotation();
+		return null;
+	}
+
+	public String getUpdateSiteURL() {
+		if (updateSite != null)
+			return updateSite.getURL();
+		return null;
+	}
+
+	public String getVersion() {
+		return version;
+	}
+
+	public String getWS() {
+		return ws;
+	}
+
+	public boolean isExclusive() {
+		return exclusive;
+	}
+
+	public boolean isPrimary() {
+		return primary;
+	}
+
+	public boolean removeEntry(FeatureEntry entry) {
+		if (entry == null || entries == null)
+			return false;
+		return entries.remove(entry);
+	}
+
+	public void setApplication(String application) {
+		this.application = application;
+	}
+
+	public void setBrandingPlugin(String brandingPlugin) {
+		this.brandingPlugin = brandingPlugin;
+	}
+
+	public void setColocationAffinity(String colocationAffinity) {
+		this.colocationAffinity = colocationAffinity;
+	}
+
+	public void setCopyright(String copyright) {
+		if (this.copyright == null)
+			this.copyright = new URLEntry();
+		this.copyright.setAnnotation(copyright);
+	}
+
+	public void setCopyrightURL(String copyrightURL) {
+		if (this.copyright == null)
+			this.copyright = new URLEntry();
+		this.copyright.setURL(copyrightURL);
+	}
+
+	public void setDescription(String description) {
+		if (this.description == null)
+			this.description = new URLEntry();
+		this.description.setAnnotation(description);
+	}
+
+	public void setDescriptionURL(String descriptionURL) {
+		if (this.description == null)
+			this.description = new URLEntry();
+		this.description.setURL(descriptionURL);
+	}
+
+	public void setEnvironment(String os, String ws, String arch, String nl) {
+		this.os = os;
+		this.ws = ws;
+		this.arch = arch;
+		this.nl = nl;
+	}
+
+	public void setExclusive(boolean exclusive) {
+		this.exclusive = exclusive;
+	}
+
+	public void setImage(String image) {
+		this.image = image;
+	}
+
+	public void setInstallHandler(String installHandler) {
+		this.installHandler = installHandler;
+	}
+
+	public void setInstallHandlerLibrary(String installHandlerLibrary) {
+		this.installHandlerLibrary = installHandlerLibrary;
+	}
+
+	public void setInstallHandlerURL(String installHandlerURL) {
+		this.installHandlerURL = installHandlerURL;
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	public void setLicense(String license) {
+		if (this.license == null)
+			this.license = new URLEntry();
+		this.license.setAnnotation(license);
+	}
+
+	public void setLicenseFeature(String name) {
+		this.licenseFeature = name;
+	}
+
+	public void setLicenseFeatureVersion(String version) {
+		this.licenseFeatureVersion = version;
+	}
+
+	public void setLicenseURL(String licenseURL) {
+		if (this.license == null)
+			this.license = new URLEntry();
+		this.license.setURL(licenseURL);
+	}
+
+	public void setLocalizations(Map<Locale, Map<String, String>> localizations) {
+		this.localizations = localizations;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
+	public void setPrimary(boolean primary) {
+		this.primary = primary;
+	}
+
+	public void setProviderName(String value) {
+		providerName = value;
+	}
+
+	public void setUpdateSiteLabel(String updateSiteLabel) {
+		if (this.updateSite == null)
+			this.updateSite = new URLEntry();
+		this.updateSite.setAnnotation(updateSiteLabel);
+	}
+
+	public void setUpdateSiteURL(String updateSiteURL) {
+		if (this.updateSite == null)
+			this.updateSite = new URLEntry();
+		this.updateSite.setURL(updateSiteURL);
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	/**
+	 * For debugging purposes only.
+	 */
+	@Override
+	public String toString() {
+		return "Feature " + id + " version: " + version; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeatureEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeatureEntry.java
new file mode 100644
index 0000000..2c47364
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeatureEntry.java
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *      IBM Corporation - initial API and implementation
+ *      Felix Riegger (SAP AG) - consolidation of publishers for PDE formats (bug 331974)
+ *******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.metadata.VersionRange;
+
+/**
+ */
+public class FeatureEntry implements IPlatformEntry {
+	private final String id;
+	private String versionOrRange;
+	private String url;
+	private String os;
+	private String ws;
+	private String arch;
+	private String nl;
+	private String match;
+	private final boolean isPlugin;
+	private boolean isFragment = false;
+	private boolean isRequires = false;
+	private Boolean unpack = null;
+	private boolean optional = false;
+	private boolean isPatch = false;
+	/**
+	 * Temporary field to add provorg.eclipse.pde.internal.publishing.model.filters to features
+	 */
+	private String filter;
+
+	public static FeatureEntry createRequires(String id, String version, String match, String filter, boolean isPlugin) {
+		FeatureEntry result = new FeatureEntry(id, version, isPlugin);
+		result.match = match;
+		result.isRequires = true;
+		// for requires we don't care what the form is so leave it as false (JAR'd)
+		result.unpack = false;
+		if (filter != null)
+			result.setFilter(filter);
+		return result;
+	}
+
+	public static FeatureEntry createRequires(String id, VersionRange versionRange, String match, String filter, boolean isPlugin) {
+		FeatureEntry result = new FeatureEntry(id, versionRange, isPlugin);
+		result.match = match;
+		result.isRequires = true;
+		// for requires we don't care what the form is so leave it as false (JAR'd)
+		result.unpack = false;
+		if (filter != null)
+			result.setFilter(filter);
+		return result;
+	}
+
+	public FeatureEntry(String id, String version, boolean isPlugin) {
+		this.id = id;
+		this.versionOrRange = Version.parseVersion(version).toString();
+		this.isPlugin = isPlugin;
+	}
+
+	public FeatureEntry(String id, VersionRange versionRange, boolean isPlugin) {
+		this.id = id;
+		this.versionOrRange = versionRange.toString();
+		this.isPlugin = isPlugin;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final FeatureEntry other = (FeatureEntry) obj;
+		if (id == null) {
+			if (other.id != null)
+				return false;
+		} else if (!id.equals(other.id))
+			return false;
+		if (versionOrRange == null) {
+			if (other.versionOrRange != null)
+				return false;
+		} else if (!versionOrRange.equals(other.versionOrRange))
+			return false;
+
+		if (isPlugin() != other.isPlugin())
+			return false;
+		if (isRequires() != other.isRequires())
+			return false;
+		return true;
+	}
+
+	public String getArch() {
+		return arch;
+	}
+
+	/**
+	 * Temporary method to add provisioning filters to features
+	 */
+	public String getFilter() {
+		return filter;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public String getMatch() {
+		return match;
+	}
+
+	public String getNL() {
+		return nl;
+	}
+
+	public String getOS() {
+		return os;
+	}
+
+	public String getURL() {
+		return url;
+	}
+
+	public String getVersion() {
+		return versionOrRange;
+	}
+
+	public String getWS() {
+		return ws;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((id == null) ? 0 : id.hashCode());
+		result = prime * result + ((versionOrRange == null) ? 0 : versionOrRange.hashCode());
+		return result;
+	}
+
+	public boolean isFragment() {
+		return isFragment;
+	}
+
+	public boolean isOptional() {
+		return optional;
+	}
+
+	public boolean isPlugin() {
+		return isPlugin;
+	}
+
+	public boolean isRequires() {
+		return isRequires;
+	}
+
+	public boolean isUnpack() {
+		return (unpack == null || unpack.booleanValue());
+	}
+
+	public void setEnvironment(String os, String ws, String arch, String nl) {
+		this.os = os;
+		this.ws = ws;
+		this.arch = arch;
+		this.nl = nl;
+	}
+
+	/**
+	 * Temporary method to add provisioning filters to features
+	 */
+	public void setFilter(String filter) {
+		this.filter = filter;
+
+	}
+
+	public void setFragment(boolean value) {
+		isFragment = value;
+	}
+
+	public void setOptional(boolean value) {
+		optional = value;
+	}
+
+	public void setUnpack(boolean value) {
+		unpack = Boolean.valueOf(value);
+	}
+
+	public void setURL(String value) {
+		url = value;
+	}
+
+	public void setVersion(String value) {
+		versionOrRange = Version.parseVersion(value).toString();
+	}
+
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer();
+		result.append(isRequires ? "Requires: " : ""); //$NON-NLS-1$ //$NON-NLS-2$
+		result.append(isPlugin ? "Plugin: " : "Feature: "); //$NON-NLS-1$ //$NON-NLS-2$
+		result.append(id != null ? id.toString() : ""); //$NON-NLS-1$
+		result.append(versionOrRange != null ? " " + versionOrRange.toString() : ""); //$NON-NLS-1$ //$NON-NLS-2$
+		return result.toString();
+	}
+
+	public boolean unpackSet() {
+		return unpack != null;
+	}
+
+	public boolean isPatch() {
+		return isPatch;
+	}
+
+	public void setPatch(boolean patch) {
+		this.isPatch = patch;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java
new file mode 100644
index 0000000..f2b0120
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java
@@ -0,0 +1,663 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import java.util.Map.Entry;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.core.helpers.*;
+import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
+import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
+import org.eclipse.equinox.internal.p2.publisher.FileSetDescriptor;
+import org.eclipse.equinox.internal.p2.publisher.Messages;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.FeatureParser;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitPatchDescription;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.IFeatureRootAdvice;
+import org.eclipse.equinox.p2.repository.IRepository;
+import org.eclipse.equinox.p2.repository.IRepositoryReference;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
+import org.eclipse.equinox.p2.repository.spi.RepositoryReference;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.publishing.Activator;
+
+/**
+ * Publish IUs for all of the features in the given set of locations.  The locations can
+ * be actual locations of the features or folders of features.
+ */
+public class FeaturesAction extends AbstractPublisherAction {
+	public static final String INSTALL_FEATURES_FILTER = "(org.eclipse.update.install.features=true)"; //$NON-NLS-1$
+	private static final String UPDATE_FEATURE_APPLICATION_PROP = "org.eclipse.update.feature.application"; //$NON-NLS-1$
+	private static final String UPDATE_FEATURE_PLUGIN_PROP = "org.eclipse.update.feature.plugin"; //$NON-NLS-1$
+	private static final String UPDATE_FEATURE_EXCLUSIVE_PROP = "org.eclipse.update.feature.exclusive"; //$NON-NLS-1$
+	private static final String UPDATE_FEATURE_PRIMARY_PROP = "org.eclipse.update.feature.primary"; //$NON-NLS-1$
+
+	protected Feature[] features;
+	private File[] locations;
+
+	public static IArtifactKey createFeatureArtifactKey(String id, String version) {
+		return new ArtifactKey(PublisherHelper.ECLIPSE_FEATURE_CLASSIFIER, id, Version.parseVersion(version));
+	}
+
+	public static IInstallableUnit createFeatureJarIU(Feature feature, IPublisherInfo info) {
+		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
+		String id = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/false);
+		iu.setId(id);
+		Version version = Version.parseVersion(feature.getVersion());
+		iu.setVersion(version);
+
+		// set properties for other feature attributes
+		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
+		if (feature.getDescription() != null)
+			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
+		if (feature.getDescriptionURL() != null)
+			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
+		if (feature.getProviderName() != null)
+			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
+		if (feature.getLicense() != null)
+			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
+		if (feature.getCopyright() != null)
+			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
+		if (feature.getApplication() != null)
+			iu.setProperty(UPDATE_FEATURE_APPLICATION_PROP, feature.getApplication());
+		if (feature.getBrandingPlugin() != null)
+			iu.setProperty(UPDATE_FEATURE_PLUGIN_PROP, feature.getBrandingPlugin());
+		if (feature.isExclusive())
+			iu.setProperty(UPDATE_FEATURE_EXCLUSIVE_PROP, Boolean.TRUE.toString());
+		if (feature.isPrimary())
+			iu.setProperty(UPDATE_FEATURE_PRIMARY_PROP, Boolean.TRUE.toString());
+
+		// The required capabilities are not specified at this level because we don't want the feature jar to be attractive to install.
+		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
+		iu.setFilter(INSTALL_FEATURES_FILTER);
+		iu.setSingleton(true);
+
+		if (feature.getInstallHandler() != null && feature.getInstallHandler().trim().length() > 0) {
+			String installHandlerProperty = "handler=" + feature.getInstallHandler(); //$NON-NLS-1$
+
+			if (feature.getInstallHandlerLibrary() != null)
+				installHandlerProperty += ", library=" + feature.getInstallHandlerLibrary(); //$NON-NLS-1$
+
+			if (feature.getInstallHandlerURL() != null)
+				installHandlerProperty += ", url=" + feature.getInstallHandlerURL(); //$NON-NLS-1$
+
+			iu.setProperty(PublisherHelper.ECLIPSE_INSTALL_HANDLER_PROP, installHandlerProperty);
+		}
+
+		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
+		providedCapabilities.add(PublisherHelper.createSelfCapability(id, version));
+		providedCapabilities.add(PublisherHelper.FEATURE_CAPABILITY);
+		providedCapabilities.add(MetadataFactory.createProvidedCapability(PublisherHelper.CAPABILITY_NS_UPDATE_FEATURE, feature.getId(), version));
+
+		iu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(id, version), PublisherHelper.FEATURE_CAPABILITY, MetadataFactory.createProvidedCapability(PublisherHelper.CAPABILITY_NS_UPDATE_FEATURE, feature.getId(), version)});
+		iu.setArtifacts(new IArtifactKey[] {createFeatureArtifactKey(feature.getId(), version.toString())});
+
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		touchpointData.put("zipped", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+		iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+
+		Map<Locale, Map<String, String>> localizations = feature.getLocalizations();
+		if (localizations != null) {
+			for (Entry<Locale, Map<String, String>> locEntry : localizations.entrySet()) {
+				Locale locale = locEntry.getKey();
+				Map<String, String> translatedStrings = locEntry.getValue();
+				for (Entry<String, String> entry : translatedStrings.entrySet()) {
+					iu.setProperty(locale.toString() + '.' + entry.getKey(), entry.getValue());
+				}
+				providedCapabilities.add(PublisherHelper.makeTranslationCapability(id, locale));
+			}
+		}
+
+		processInstallableUnitPropertiesAdvice(iu, info);
+		return MetadataFactory.createInstallableUnit(iu);
+	}
+
+	private static String getTransformedId(String original, boolean isPlugin, boolean isGroup) {
+		return (isPlugin ? original : original + (isGroup ? ".feature.group" : ".feature.jar")); //$NON-NLS-1$//$NON-NLS-2$
+	}
+
+	/**
+	 * Returns a URI corresponding to the given URL in string form, or null
+	 * if a well formed URI could not be created.
+	 */
+	private static URI toURIOrNull(String url) {
+		if (url == null)
+			return null;
+		try {
+			return URIUtil.fromString(url);
+		} catch (URISyntaxException e) {
+			return null;
+		}
+	}
+
+	public FeaturesAction(Feature[] features) {
+		this.features = features;
+	}
+
+	public FeaturesAction(File[] locations) {
+		this.locations = locations;
+	}
+
+	/**
+	 * Looks for advice in a p2.inf file inside the feature location.
+	 */
+	private void createAdviceFileAdvice(Feature feature, IPublisherInfo publisherInfo) {
+		//assume p2.inf is co-located with feature.xml
+		String location = feature.getLocation();
+		if (location != null) {
+			String groupId = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/true);
+			AdviceFileAdvice advice = new AdviceFileAdvice(groupId, Version.parseVersion(feature.getVersion()), new Path(location), new Path("p2.inf")); //$NON-NLS-1$
+			if (advice.containsAdvice())
+				publisherInfo.addAdvice(advice);
+		}
+	}
+
+	/**
+	 * Gather any advice we can from the given feature.  In particular, it may have
+	 * information about the shape of the bundles it includes.  The discovered advice is
+	 * added to the given result.
+	 * @param feature the feature to process
+	 * @param publisherInfo the publishing info to update
+	 */
+	private void createBundleShapeAdvice(Feature feature, IPublisherInfo publisherInfo) {
+		FeatureEntry entries[] = feature.getEntries();
+		for (int i = 0; i < entries.length; i++) {
+			FeatureEntry entry = entries[i];
+			if (entry.isUnpack() && entry.isPlugin() && !entry.isRequires())
+				publisherInfo.addAdvice(new BundleShapeAdvice(entry.getId(), Version.parseVersion(entry.getVersion()), IBundleShapeAdvice.DIR));
+		}
+	}
+
+	protected IInstallableUnit createFeatureRootFileIU(String featureId, String featureVersion, File location, FileSetDescriptor descriptor) {
+		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
+		iu.setSingleton(true);
+		String id = featureId + '_' + descriptor.getKey();
+		iu.setId(id);
+		Version version = Version.parseVersion(featureVersion);
+		iu.setVersion(version);
+		iu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(id, version)});
+		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_NATIVE);
+		String configSpec = descriptor.getConfigSpec();
+		if (configSpec != null && configSpec.length() > 0)
+			iu.setFilter(createFilterSpec(configSpec));
+
+		Map<String, String> touchpointData = new HashMap<String, String>(2);
+		String configurationData = "unzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
+		touchpointData.put("install", configurationData); //$NON-NLS-1$
+		String unConfigurationData = "cleanupzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
+		touchpointData.put("uninstall", unConfigurationData); //$NON-NLS-1$
+		iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+
+		// prime the IU with an artifact key that will correspond to the zipped up root files.
+		IArtifactKey key = new ArtifactKey(PublisherHelper.BINARY_ARTIFACT_CLASSIFIER, iu.getId(), iu.getVersion());
+		iu.setArtifacts(new IArtifactKey[] {key});
+		setupLinks(iu, descriptor);
+		setupPermissions(iu, descriptor);
+
+		IInstallableUnit iuResult = MetadataFactory.createInstallableUnit(iu);
+		// need to return both the iu and any files.
+		return iuResult;
+	}
+
+	protected IInstallableUnit createGroupIU(Feature feature, List<IInstallableUnit> childIUs, IPublisherInfo publisherInfo) {
+		if (isPatch(feature))
+			return createPatchIU(feature, childIUs, publisherInfo);
+		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
+		String id = getGroupId(feature.getId());
+		iu.setId(id);
+		Version version = PublisherHelper.fromOSGiVersion(new org.osgi.framework.Version(feature.getVersion()));
+		iu.setVersion(version);
+
+		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
+		if (feature.getDescription() != null)
+			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
+		if (feature.getDescriptionURL() != null)
+			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
+		if (feature.getProviderName() != null)
+			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
+		if (feature.getLicense() != null)
+			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
+		if (feature.getCopyright() != null)
+			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
+		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(id, BundlesAction.computeUpdateRange(new org.osgi.framework.Version(feature.getVersion())), IUpdateDescriptor.NORMAL, null));
+
+		FeatureEntry entries[] = feature.getEntries();
+		List<IRequirement> required = new ArrayList<IRequirement>(entries.length + (childIUs == null ? 0 : childIUs.size()));
+		for (int i = 0; i < entries.length; i++) {
+			VersionRange range = getVersionRange(entries[i]);
+			String requiredId = getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true);
+			required.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, requiredId, range, getFilter(entries[i]), entries[i].isOptional(), false));
+		}
+
+		// link in all the children (if any) as requirements.
+		// TODO consider if these should be linked as exact version numbers.  Should be ok but may be brittle.
+		if (childIUs != null) {
+			for (int i = 0; i < childIUs.size(); i++) {
+				IInstallableUnit child = childIUs.get(i);
+				IMatchExpression<IInstallableUnit> filter = child.getFilter();
+				required.add(MetadataFactory.createRequirement(PublisherHelper.IU_NAMESPACE, child.getId(), new VersionRange(child.getVersion(), true, child.getVersion(), true), filter, false, false));
+			}
+		}
+		iu.setRequirements(required.toArray(new IRequirement[required.size()]));
+		iu.setTouchpointType(ITouchpointType.NONE);
+		iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString());
+		processTouchpointAdvice(iu, null, publisherInfo);
+		processInstallableUnitPropertiesAdvice(iu, publisherInfo);
+
+		//Create a fake entry to reuse the logic to create the filters
+		FeatureEntry entry = new FeatureEntry("fake", "0.0.0", false); //$NON-NLS-1$ //$NON-NLS-2$
+		entry.setEnvironment(feature.getOS(), feature.getWS(), feature.getArch(), feature.getNL());
+		iu.setFilter(getFilter(entry));
+
+		// Create set of provided capabilities
+		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
+		providedCapabilities.add(createSelfCapability(id, version));
+
+		Map<Locale, Map<String, String>> localizations = feature.getLocalizations();
+		if (localizations != null) {
+			for (Entry<Locale, Map<String, String>> locEntry : localizations.entrySet()) {
+				Locale locale = locEntry.getKey();
+				Map<String, String> translatedStrings = locEntry.getValue();
+				for (Entry<String, String> e : translatedStrings.entrySet()) {
+					iu.setProperty(locale.toString() + '.' + e.getKey(), e.getValue());
+				}
+				providedCapabilities.add(PublisherHelper.makeTranslationCapability(id, locale));
+			}
+		}
+
+		iu.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
+		processUpdateDescriptorAdvice(iu, info);
+		processCapabilityAdvice(iu, publisherInfo);
+		return MetadataFactory.createInstallableUnit(iu);
+	}
+
+	protected String getGroupId(String featureId) {
+		return getTransformedId(featureId, /*isPlugin*/false, /*isGroup*/true);
+	}
+
+	private IInstallableUnit createPatchIU(Feature feature, List<IInstallableUnit> childIUs, IPublisherInfo publisherInfo) {
+		InstallableUnitPatchDescription iu = new MetadataFactory.InstallableUnitPatchDescription();
+		String id = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/true);
+		iu.setId(id);
+		Version version = Version.parseVersion(feature.getVersion());
+		iu.setVersion(version);
+		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
+		if (feature.getDescription() != null)
+			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
+		if (feature.getDescriptionURL() != null)
+			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
+		if (feature.getProviderName() != null)
+			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
+		if (feature.getLicense() != null)
+			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
+		if (feature.getCopyright() != null)
+			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
+		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(id, BundlesAction.computeUpdateRange(new org.osgi.framework.Version(feature.getVersion())), IUpdateDescriptor.NORMAL, null));
+
+		FeatureEntry entries[] = feature.getEntries();
+		ArrayList<IRequirement> applicabilityScope = new ArrayList<IRequirement>();
+		ArrayList<IRequirement> patchRequirements = new ArrayList<IRequirement>();
+		ArrayList<IRequirementChange> requirementChanges = new ArrayList<IRequirementChange>();
+		for (int i = 0; i < entries.length; i++) {
+			VersionRange range = getVersionRange(entries[i]);
+			IRequirement req = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), range, getFilter(entries[i]), entries[i].isOptional(), false);
+			if (entries[i].isRequires()) {
+				applicabilityScope.add(req);
+				if (applicabilityScope.size() == 1) {
+					iu.setLifeCycle(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), range, null, false, false, false));
+				}
+				continue;
+			}
+			if (entries[i].isPlugin()) {
+				IRequirement from = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), VersionRange.emptyRange, getFilter(entries[i]), entries[i].isOptional(), false);
+				requirementChanges.add(MetadataFactory.createRequirementChange(from, req));
+				continue;
+			}
+			patchRequirements.add(req);
+		}
+
+		//Always add a requirement on the IU containing the feature jar
+		if (childIUs != null) {
+			for (int i = 0; i < childIUs.size(); i++) {
+				IInstallableUnit child = childIUs.get(i);
+				patchRequirements.add(MetadataFactory.createRequirement(PublisherHelper.IU_NAMESPACE, child.getId(), new VersionRange(child.getVersion(), true, child.getVersion(), true), child.getFilter(), false, false));
+			}
+		}
+		iu.setRequirements(patchRequirements.toArray(new IRequirement[patchRequirements.size()]));
+		iu.setApplicabilityScope(new IRequirement[][] {applicabilityScope.toArray(new IRequirement[applicabilityScope.size()])});
+		iu.setRequirementChanges(requirementChanges.toArray(new IRequirementChange[requirementChanges.size()]));
+
+		iu.setTouchpointType(ITouchpointType.NONE);
+		processTouchpointAdvice(iu, null, publisherInfo);
+		processInstallableUnitPropertiesAdvice(iu, publisherInfo);
+		iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString());
+		iu.setProperty(InstallableUnitDescription.PROP_TYPE_PATCH, Boolean.TRUE.toString());
+		// TODO: shouldn't the filter for the group be constructed from os, ws, arch, nl
+		// 		 of the feature?
+		// iu.setFilter(filter);
+
+		// Create set of provided capabilities
+		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
+		providedCapabilities.add(createSelfCapability(id, version));
+
+		Map<Locale, Map<String, String>> localizations = feature.getLocalizations();
+		if (localizations != null) {
+			for (Entry<Locale, Map<String, String>> locEntry : localizations.entrySet()) {
+				Locale locale = locEntry.getKey();
+				Map<String, String> translatedStrings = locEntry.getValue();
+				for (Entry<String, String> e : translatedStrings.entrySet()) {
+					iu.setProperty(locale.toString() + '.' + e.getKey(), e.getValue());
+				}
+				providedCapabilities.add(PublisherHelper.makeTranslationCapability(id, locale));
+			}
+		}
+
+		iu.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
+		processUpdateDescriptorAdvice(iu, info);
+		processCapabilityAdvice(iu, publisherInfo);
+		return MetadataFactory.createInstallableUnitPatch(iu);
+	}
+
+	private File[] expandLocations(File[] list) {
+		ArrayList<File> result = new ArrayList<File>();
+		expandLocations(list, result);
+		return result.toArray(new File[result.size()]);
+	}
+
+	private void expandLocations(File[] list, ArrayList<File> result) {
+		if (list == null)
+			return;
+		for (int i = 0; i < list.length; i++) {
+			File location = list[i];
+			if (location.isDirectory()) {
+				// if the location is itself a feature, just add it.  Otherwise r down
+				if (new File(location, "feature.xml").exists()) //$NON-NLS-1$
+					result.add(location);
+				else
+					expandLocations(location.listFiles(), result);
+			} else {
+				result.add(location);
+			}
+		}
+	}
+
+	protected void generateFeatureIUs(Feature[] featureList, IPublisherResult result) {
+		// Build Feature IUs, and add them to any corresponding categories
+		for (int i = 0; i < featureList.length; i++) {
+			Feature feature = featureList[i];
+			//first gather any advice that might help us
+			createBundleShapeAdvice(feature, info);
+			createAdviceFileAdvice(feature, info);
+
+			ArrayList<IInstallableUnit> childIUs = new ArrayList<IInstallableUnit>();
+
+			IInstallableUnit featureJarIU = queryForIU(result, getTransformedId(feature.getId(), false, false), Version.parseVersion(feature.getVersion()));
+			if (featureJarIU == null)
+				featureJarIU = generateFeatureJarIU(feature, info);
+
+			if (featureJarIU != null) {
+				publishFeatureArtifacts(feature, featureJarIU, info);
+				result.addIU(featureJarIU, IPublisherResult.NON_ROOT);
+				childIUs.add(featureJarIU);
+			}
+
+			IInstallableUnit groupIU = queryForIU(result, getGroupId(feature.getId()), Version.parseVersion(feature.getVersion()));
+			if (groupIU == null) {
+				childIUs.addAll(generateRootFileIUs(feature, result, info));
+				groupIU = createGroupIU(feature, childIUs, info);
+			}
+			if (groupIU != null) {
+				result.addIU(groupIU, IPublisherResult.ROOT);
+				InstallableUnitDescription[] others = processAdditionalInstallableUnitsAdvice(groupIU, info);
+				for (int iuIndex = 0; others != null && iuIndex < others.length; iuIndex++) {
+					result.addIU(MetadataFactory.createInstallableUnit(others[iuIndex]), IPublisherResult.ROOT);
+				}
+			}
+			generateSiteReferences(feature, result, info);
+		}
+	}
+
+	protected IInstallableUnit generateFeatureJarIU(Feature feature, IPublisherInfo publisherInfo) {
+		return createFeatureJarIU(feature, publisherInfo);
+	}
+
+	protected ArrayList<IInstallableUnit> generateRootFileIUs(Feature feature, IPublisherResult result, IPublisherInfo publisherInfo) {
+		ArrayList<IInstallableUnit> ius = new ArrayList<IInstallableUnit>();
+
+		Collection<IFeatureRootAdvice> collection = publisherInfo.getAdvice(null, false, feature.getId(), Version.parseVersion(feature.getVersion()), IFeatureRootAdvice.class);
+		if (collection.size() == 0)
+			return ius;
+
+		IFeatureRootAdvice advice = collection.iterator().next();
+		String[] configs = advice.getConfigurations();
+		for (int i = 0; i < configs.length; i++) {
+			String config = configs[i];
+
+			FileSetDescriptor descriptor = advice.getDescriptor(config);
+			if (descriptor != null && descriptor.size() > 0) {
+				IInstallableUnit iu = createFeatureRootFileIU(feature.getId(), feature.getVersion(), null, descriptor);
+
+				File[] files = descriptor.getFiles();
+				IArtifactKey artifactKey = iu.getArtifacts().iterator().next();
+				ArtifactDescriptor artifactDescriptor = new ArtifactDescriptor(artifactKey);
+				IPathComputer computer = advice.getRootFileComputer(config);
+				if (computer == null)
+					computer = FileUtils.createDynamicPathComputer(1);
+				publishArtifact(artifactDescriptor, files, null, publisherInfo, computer);
+
+				result.addIU(iu, IPublisherResult.NON_ROOT);
+				ius.add(iu);
+			}
+		}
+
+		return ius;
+	}
+
+	/**
+	 * Generates and publishes a reference to an update site location
+	 * @param location The update site location
+	 * @param nickname The update site label
+	 * @param featureId the identifier of the feature where the error occurred, or null
+	 * @param collector The list into which the references are added
+	 */
+	private void generateSiteReference(String location, String nickname, String featureId, List<IRepositoryReference> collector) {
+		if (location == null) {
+			String message = featureId == null ? NLS.bind(Messages.exception_invalidSiteReference, location) : NLS.bind(Messages.exception_invalidSiteReferenceInFeature, location, featureId);
+			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message));
+			return;
+		}
+
+		try {
+			URI associateLocation = new URI(location);
+			collector.add(new RepositoryReference(associateLocation, nickname, IRepository.TYPE_METADATA, IRepository.NONE));
+			collector.add(new RepositoryReference(associateLocation, nickname, IRepository.TYPE_ARTIFACT, IRepository.NONE));
+		} catch (URISyntaxException e) {
+			String message = featureId == null ? NLS.bind(Messages.exception_invalidSiteReference, location) : NLS.bind(Messages.exception_invalidSiteReferenceInFeature, location, featureId);
+			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message));
+		}
+	}
+
+	protected void generateSiteReferences(Feature feature, IPublisherResult result, IPublisherInfo publisherInfo) {
+		if (publisherInfo.getMetadataRepository() == null)
+			return;
+
+		//publish feature site references
+		URLEntry updateURL = feature.getUpdateSite();
+		//don't enable feature update sites by default since this results in too many
+		//extra sites being loaded and searched (Bug 234177)
+		List<IRepositoryReference> collector = new ArrayList<IRepositoryReference>();
+		if (updateURL != null)
+			generateSiteReference(updateURL.getURL(), updateURL.getAnnotation(), feature.getId(), collector);
+		URLEntry[] discoverySites = feature.getDiscoverySites();
+		for (int i = 0; i < discoverySites.length; i++)
+			generateSiteReference(discoverySites[i].getURL(), discoverySites[i].getAnnotation(), feature.getId(), collector);
+		if (!collector.isEmpty())
+			publisherInfo.getMetadataRepository().addReferences(collector);
+	}
+
+	protected Feature[] getFeatures(File[] featureLocations) {
+		ArrayList<Feature> result = new ArrayList<Feature>(featureLocations.length);
+		for (int i = 0; i < featureLocations.length; i++) {
+			Feature feature = new FeatureParser().parse(featureLocations[i]);
+			if (feature != null) {
+				feature.setLocation(featureLocations[i].getAbsolutePath());
+				result.add(feature);
+			}
+		}
+		return result.toArray(new Feature[result.size()]);
+	}
+
+	private IMatchExpression<IInstallableUnit> getFilter(FeatureEntry entry) {
+		StringBuffer result = new StringBuffer();
+		result.append("(&"); //$NON-NLS-1$
+		if (entry.getFilter() != null)
+			result.append(entry.getFilter());
+		expandFilter(entry.getOS(), "osgi.os", result); //$NON-NLS-1$
+		expandFilter(entry.getWS(), "osgi.ws", result); //$NON-NLS-1$
+		expandFilter(entry.getArch(), "osgi.arch", result);//$NON-NLS-1$
+		expandFilter(entry.getNL(), "osgi.nl", result); //$NON-NLS-1$
+		if (result.length() == 2)
+			return null;
+		result.append(')');
+		return InstallableUnit.parseFilter(result.toString());
+	}
+
+	private void expandFilter(String filter, String osgiFilterValue, StringBuffer result) {
+		if (filter != null && filter.length() != 0) {
+			StringTokenizer token = new StringTokenizer(filter, ","); //$NON-NLS-1$
+			if (token.countTokens() == 1)
+				result.append('(' + osgiFilterValue + '=' + filter + ')');
+			else {
+				result.append("(|"); //$NON-NLS-1$
+				while (token.hasMoreElements()) {
+					result.append('(' + osgiFilterValue + '=' + token.nextToken() + ')');
+				}
+				result.append(')');
+			}
+		}
+	}
+
+	protected VersionRange getVersionRange(FeatureEntry entry) {
+		String versionSpec = entry.getVersion();
+		if (versionSpec == null)
+			return VersionRange.emptyRange;
+		String match = entry.getMatch();
+		if ("versionRange".equals(match)) //$NON-NLS-1$
+			return new VersionRange(versionSpec);
+		Version version = Version.parseVersion(versionSpec);
+		if (version.equals(Version.emptyVersion))
+			return VersionRange.emptyRange;
+		if (!entry.isRequires())
+			return new VersionRange(version, true, version, true);
+		if (match == null)
+			// TODO should really be returning VersionRange.emptyRange here...
+			return null;
+		if (match.equals("perfect")) //$NON-NLS-1$
+			return new VersionRange(version, true, version, true);
+
+		org.osgi.framework.Version osgiVersion = PublisherHelper.toOSGiVersion(version);
+		if (match.equals("equivalent")) { //$NON-NLS-1$
+			Version upper = Version.createOSGi(osgiVersion.getMajor(), osgiVersion.getMinor() + 1, 0);
+			return new VersionRange(version, true, upper, false);
+		}
+		if (match.equals("compatible")) { //$NON-NLS-1$
+			Version upper = Version.createOSGi(osgiVersion.getMajor() + 1, 0, 0);
+			return new VersionRange(version, true, upper, false);
+		}
+		if (match.equals("greaterOrEqual")) //$NON-NLS-1$
+			return new VersionRange(version, true, new VersionRange(null).getMaximum(), true);
+		return null;
+	}
+
+	private boolean isPatch(Feature feature) {
+		FeatureEntry[] entries = feature.getEntries();
+		for (int i = 0; i < entries.length; i++) {
+			if (entries[i].isPatch())
+				return true;
+		}
+		return false;
+	}
+
+	@Override
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		if (features == null && locations == null)
+			throw new IllegalStateException(Messages.exception_noFeaturesOrLocations);
+		this.info = publisherInfo;
+		if (features == null)
+			features = getFeatures(expandLocations(locations));
+		generateFeatureIUs(features, results);
+		return Status.OK_STATUS;
+	}
+
+	protected void publishFeatureArtifacts(Feature feature, IInstallableUnit featureIU, IPublisherInfo publisherInfo) {
+		// add all the artifacts associated with the feature
+		// TODO this is a little strange.  If there are several artifacts, how do we know which files go with
+		// which artifacts when we publish them?  For now it would be surprising to have more than one
+		// artifact per feature IU.
+		Collection<IArtifactKey> artifacts = featureIU.getArtifacts();
+		for (IArtifactKey artifactKey : artifacts) {
+			File file = new File(feature.getLocation());
+			ArtifactDescriptor ad = (ArtifactDescriptor) PublisherHelper.createArtifactDescriptor(info, artifactKey, file);
+			processArtifactPropertiesAdvice(featureIU, ad, publisherInfo);
+			ad.setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP);
+			// if the artifact is a dir then zip it up.
+			if (file.isDirectory())
+				publishArtifact(ad, new File[] {file}, null, publisherInfo, createRootPrefixComputer(file));
+			else
+				publishArtifact(ad, file, publisherInfo);
+		}
+	}
+
+	private void setupLinks(InstallableUnitDescription iu, FileSetDescriptor descriptor) {
+		String[] links = getArrayFromString(descriptor.getLinks(), ","); //$NON-NLS-1$
+		StringBuffer linkActions = new StringBuffer();
+
+		int i = 0;
+		while (i < links.length) {
+			//format is [target,name]*
+			String target = links[i++];
+			if (i < links.length) {
+				String name = links[i++];
+				linkActions.append("ln(linkTarget:" + target); //$NON-NLS-1$
+				linkActions.append(",targetDir:${installFolder},linkName:" + name); //$NON-NLS-1$
+				linkActions.append(");"); //$NON-NLS-1$
+			}
+
+		}
+
+		if (linkActions.length() > 0) {
+			Map<String, String> touchpointData = new HashMap<String, String>();
+			//we do ln during configure to avoid complicating branding which uses the install phase
+			touchpointData.put("configure", linkActions.toString()); //$NON-NLS-1$
+			iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+		}
+	}
+
+	private void setupPermissions(InstallableUnitDescription iu, FileSetDescriptor descriptor) {
+		Map<String, String> touchpointData = new HashMap<String, String>();
+		String[][] permsList = descriptor.getPermissions();
+		for (int i = 0; i < permsList.length; i++) {
+			String[] permSpec = permsList[i];
+			String configurationData = " chmod(targetDir:${installFolder}, targetFile:" + permSpec[1] + ", permissions:" + permSpec[0] + ");"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			touchpointData.put("install", configurationData); //$NON-NLS-1$
+			iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAndBundlesPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAndBundlesPublisherApplication.java
new file mode 100644
index 0000000..bba02c0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAndBundlesPublisherApplication.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.RootIUAction;
+import org.eclipse.equinox.p2.publisher.actions.RootIUResultFilterAdvice;
+
+/**
+ * <p>
+ * This application generates meta-data and artifact repositories from a set of features and bundles.
+ * If -source <localdir> parameter is given, it specifies the directory under which to find the features 
+ * and bundles (in the standard "features" and "plugins" sub-directories).
+ * </p><p>
+ * Optionally, the -features <csv of file locations> and -bundles <csv of file locations> arguments can 
+ * be specified.  If given, these override the defaults derived from a supplied -source parameter.
+ * </p>
+ */
+public class FeaturesAndBundlesPublisherApplication extends AbstractPublisherApplication {
+
+	protected File[] features = null;
+	protected File[] bundles = null;
+
+	protected String rootIU = null;
+	protected String rootVersion = null;
+
+	public FeaturesAndBundlesPublisherApplication() {
+		// nothing to do
+	}
+
+	protected void processParameter(String arg, String parameter, PublisherInfo pinfo) throws URISyntaxException {
+		super.processParameter(arg, parameter, pinfo);
+
+		if (arg.equalsIgnoreCase("-features")) //$NON-NLS-1$
+			features = createFiles(parameter);
+
+		if (arg.equalsIgnoreCase("-bundles")) //$NON-NLS-1$
+			bundles = createFiles(parameter);
+
+		if (arg.equalsIgnoreCase("-iu")) //$NON-NLS-1$
+			rootIU = parameter;
+
+		if (arg.equalsIgnoreCase("-version")) //$NON-NLS-1$
+			rootVersion = parameter;
+	}
+
+	private File[] createFiles(String parameter) {
+		String[] filespecs = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
+		File[] result = new File[filespecs.length];
+		for (int i = 0; i < filespecs.length; i++)
+			result[i] = new File(filespecs[i]);
+		return result;
+	}
+
+	protected IPublisherAction[] createActions() {
+		ArrayList<IPublisherAction> result = new ArrayList<IPublisherAction>();
+		if (features == null)
+			features = new File[] {new File(source, "features")}; //$NON-NLS-1$
+		result.add(new FeaturesAction(features));
+		if (bundles == null)
+			bundles = new File[] {new File(source, "plugins")}; //$NON-NLS-1$
+		result.add(new BundlesAction(bundles));
+
+		if (rootIU != null) {
+			result.add(new RootIUAction(rootIU, Version.parseVersion(rootVersion), rootIU));
+			info.addAdvice(new RootIUResultFilterAdvice(null));
+		}
+
+		return result.toArray(new IPublisherAction[result.size()]);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IBrandingAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IBrandingAdvice.java
new file mode 100644
index 0000000..82d41ec
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IBrandingAdvice.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 EclipseSource and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
+
+/**
+ * Advice for branding executables and other element while publishing.
+ */
+public interface IBrandingAdvice extends IPublisherAdvice {
+
+	/**
+	 * Returns the OS that this branding advice is relevant for.
+	 */
+	public String getOS();
+
+	/**
+	 * Returns the list of icon files to be used in branding an executable. 
+	 * The nature of the returned values and the images they represent is
+	 * platform-specific.
+	 * 
+	 * @return the list of icons used in branding an executable or <code>null</code> if none.
+	 */
+	public String[] getIcons();
+
+	/**
+	 * Returns the name of the launcher.  This should be the OS-independent
+	 * name. That is, ".exe" etc. should not be included.
+	 * 
+	 * @return the name of the branded launcher or <code>null</code> if none.
+	 */
+	public String getExecutableName();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IBundleShapeAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IBundleShapeAdvice.java
new file mode 100644
index 0000000..75a45c6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IBundleShapeAdvice.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
+
+public interface IBundleShapeAdvice extends IPublisherAdvice {
+	public static final String DIR = BundlesAction.DIR;
+	public static final String JAR = BundlesAction.JAR;
+
+	public String getShape();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IConfigAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IConfigAdvice.java
new file mode 100644
index 0000000..ed976ee
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IConfigAdvice.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.util.Map;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
+
+public interface IConfigAdvice extends IPublisherAdvice {
+
+	public BundleInfo[] getBundles();
+
+	public Map<String, String> getProperties();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IExecutableAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IExecutableAdvice.java
new file mode 100644
index 0000000..4e61001
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IExecutableAdvice.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   EclipseSource - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
+
+/**
+ * Advice for executables while publishing.
+ */
+public interface IExecutableAdvice extends IPublisherAdvice {
+
+	/**
+	 * Returns the VM arguments for this executable.
+	 * @return The list of VM Arguments for this executable or empty array for none
+	 */
+	public String[] getVMArguments();
+
+	/**
+	 * Returns the program arguments for this executable.
+	 * 
+	 * @return The list of program arguments for tihs executable or empty array for none
+	 */
+	public String[] getProgramArguments();
+
+	/**
+	 * Returns the name of the launcher.  This should be the OS-independent
+	 * name. That is, ".exe" etc. should not be included.
+	 * 
+	 * @return the name of the branded launcher or <code>null</code> if none.
+	 */
+	public String getExecutableName();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IPlatformEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IPlatformEntry.java
new file mode 100644
index 0000000..f113623
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/IPlatformEntry.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+public interface IPlatformEntry {
+	public String getOS();
+
+	public String getWS();
+
+	public String getArch();
+
+	public String getNL();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/InstallPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/InstallPublisherApplication.java
new file mode 100644
index 0000000..383c764
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/InstallPublisherApplication.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.publisher.*;
+
+public class InstallPublisherApplication extends AbstractPublisherApplication {
+
+	protected String id;
+	protected Version version = Version.parseVersion("1.0.0"); //$NON-NLS-1$
+	protected String name;
+	protected String executableName;
+	protected String flavor;
+	protected IVersionedId[] topLevel;
+	protected boolean start;
+	protected String[] rootExclusions;
+
+	public InstallPublisherApplication() {
+		//hidden
+	}
+
+	protected void processFlag(String arg, PublisherInfo publisherInfo) {
+		super.processFlag(arg, publisherInfo);
+
+		if (arg.equalsIgnoreCase("-startAll")) //$NON-NLS-1$
+			start = true;
+	}
+
+	protected void initialize(PublisherInfo publisherInfo) throws ProvisionException {
+		super.initialize(publisherInfo);
+
+		if (publisherInfo.getConfigurations().length == 0)
+			publisherInfo.setConfigurations(new String[] {""}); //$NON-NLS-1$
+	}
+
+	protected void processParameter(String arg, String parameter, PublisherInfo publisherInfo) throws URISyntaxException {
+		super.processParameter(arg, parameter, publisherInfo);
+
+		if (arg.equalsIgnoreCase("-id")) //$NON-NLS-1$
+			id = parameter;
+
+		if (arg.equalsIgnoreCase("-version")) //$NON-NLS-1$
+			version = Version.parseVersion(parameter);
+
+		if (arg.equalsIgnoreCase("-name")) //$NON-NLS-1$
+			name = parameter;
+
+		if (arg.equalsIgnoreCase("-executable")) //$NON-NLS-1$
+			executableName = parameter;
+
+		if (arg.equalsIgnoreCase("-flavor")) //$NON-NLS-1$
+			flavor = parameter;
+
+		if (arg.equalsIgnoreCase("-top")) //$NON-NLS-1$
+			topLevel = createVersionedIdList(parameter);
+
+		if (arg.equalsIgnoreCase("-rootExclusions")) //$NON-NLS-1$
+			rootExclusions = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
+	}
+
+	private IVersionedId[] createVersionedIdList(String parameter) {
+		String[] list = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
+		IVersionedId[] result = new IVersionedId[list.length];
+		for (int i = 0; i < result.length; i++)
+			result[i] = VersionedId.parse(list[i]);
+		return result;
+	}
+
+	protected IPublisherAction[] createActions() {
+		ArrayList<IPublisherAction> result = new ArrayList<IPublisherAction>();
+		result.add(createEclipseInstallAction());
+		return result.toArray(new IPublisherAction[result.size()]);
+	}
+
+	private IPublisherAction createEclipseInstallAction() {
+		String[] exclusions = getBaseExclusions();
+		if (rootExclusions != null) {
+			String[] result = new String[exclusions.length + rootExclusions.length];
+			System.arraycopy(exclusions, 0, result, 0, exclusions.length);
+			System.arraycopy(rootExclusions, 0, result, exclusions.length, rootExclusions.length);
+			exclusions = result;
+		}
+		return new EclipseInstallAction(source, id, version, name, executableName, flavor, topLevel, exclusions, start);
+	}
+
+	protected String[] getBaseExclusions() {
+		return new String[] {"plugins", "features", "configuration", "p2", "artifacts.xml"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/LaunchingAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/LaunchingAdvice.java
new file mode 100644
index 0000000..414a811
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/LaunchingAdvice.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+
+import org.eclipse.equinox.internal.provisional.frameworkadmin.LauncherData;
+import org.eclipse.equinox.p2.publisher.AbstractAdvice;
+
+public class LaunchingAdvice extends AbstractAdvice implements IExecutableAdvice {
+
+	private LauncherData data;
+	private String configSpec;
+
+	public LaunchingAdvice(LauncherData data, String configSpec) {
+		this.data = data;
+		this.configSpec = configSpec;
+	}
+
+	protected String getConfigSpec() {
+		return configSpec;
+	}
+
+	public String[] getProgramArguments() {
+		return data.getProgramArgs();
+	}
+
+	public String[] getVMArguments() {
+		return data.getJvmArgs();
+	}
+
+	public String getExecutableName() {
+		return data.getLauncherName();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java
new file mode 100644
index 0000000..4e0061e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.*;
+
+public class ProductAction extends AbstractPublisherAction {
+	protected String source;
+	protected String id;
+	protected Version version;
+	protected String name;
+	protected String executableName;
+	protected String flavor;
+	protected boolean start = false;
+	//protected String productLocation;
+	protected File executablesFeatureLocation;
+	protected IProductDescriptor product;
+	protected IPublisherResult publisherResults;
+
+	public ProductAction(String source, IProductDescriptor product, String flavor, File executablesFeatureLocation) {
+		super();
+		this.source = source;
+		this.flavor = flavor;
+		this.executablesFeatureLocation = executablesFeatureLocation;
+		this.product = product;
+		//this.productLocation = productLocation;
+	}
+
+	protected IPublisherAction[] createActions(IPublisherResult results) {
+		// generate the advice we can up front.
+		createAdvice();
+
+		// create all the actions needed to publish a product
+		ArrayList<IPublisherAction> actions = new ArrayList<IPublisherAction>();
+		// products include the executable so add actions to publish them
+		if (getExecutablesLocation() != null && this.product.includeLaunchers())
+			actions.add(createApplicationExecutableAction(info.getConfigurations()));
+		// add the actions that just configure things.
+		actions.add(createConfigCUsAction());
+		actions.add(createJREAction());
+		actions.add(createDefaultCUsAction());
+		actions.add(createRootIUAction());
+		return actions.toArray(new IPublisherAction[actions.size()]);
+	}
+
+	protected IPublisherAction createApplicationExecutableAction(String[] configSpecs) {
+		return new ApplicationLauncherAction(id, version, flavor, executableName, getExecutablesLocation(), configSpecs);
+	}
+
+	protected IPublisherAction createDefaultCUsAction() {
+		return new DefaultCUsAction(info, flavor, 4, false);
+	}
+
+	protected IPublisherAction createRootIUAction() {
+		return new RootIUAction(id, version, name);
+	}
+
+	protected IPublisherAction createConfigCUsAction() {
+		return new ConfigCUsAction(info, flavor, id, version);
+	}
+
+	protected IPublisherAction createJREAction() {
+		//TODO set a proper execution environment
+		return new JREAction((String) null);
+	}
+
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		monitor = SubMonitor.convert(monitor);
+		this.info = publisherInfo;
+		publisherResults = results;
+		IPublisherAction[] actions = createActions(results);
+		MultiStatus finalStatus = new MultiStatus(EclipseInstallAction.class.getName(), 0, "publishing result", null); //$NON-NLS-1$
+		for (int i = 0; i < actions.length; i++) {
+			if (monitor.isCanceled())
+				return Status.CANCEL_STATUS;
+			finalStatus.merge(actions[i].perform(publisherInfo, results, monitor));
+		}
+		if (!finalStatus.isOK())
+			return finalStatus;
+
+		return Status.OK_STATUS;
+	}
+
+	private void createAdvice() {
+		executableName = product.getLauncherName();
+		createProductAdvice();
+		createAdviceFileAdvice();
+		createRootAdvice();
+		info.addAdvice(new RootIUResultFilterAdvice(null));
+	}
+
+	/**
+	 * Create advice for a p2.inf file co-located with the product file, if any.
+	 */
+	private void createAdviceFileAdvice() {
+		File productFileLocation = product.getLocation();
+		if (productFileLocation == null)
+			return;
+
+		AdviceFileAdvice advice = new AdviceFileAdvice(product.getId(), Version.parseVersion(product.getVersion()), new Path(productFileLocation.getParent()), new Path("p2.inf")); //$NON-NLS-1$
+		if (advice.containsAdvice())
+			info.addAdvice(advice);
+	}
+
+	private void createRootAdvice() {
+		Collection<IVersionedId> list;
+		if (product.useFeatures())
+			// TODO: We need a real namespace here
+			list = versionElements(listElements(product.getFeatures(), ".feature.group"), IInstallableUnit.NAMESPACE_IU_ID); //$NON-NLS-1$ 
+		else
+			//TODO: We need a real namespace here
+			list = versionElements(listElements(product.getBundles(true), null), IInstallableUnit.NAMESPACE_IU_ID);
+		info.addAdvice(new RootIUAdvice(list));
+	}
+
+	private void createProductAdvice() {
+		id = product.getId();
+		version = Version.parseVersion(product.getVersion());
+		name = product.getProductName();
+		if (name == null || name.length() == 0) // If the name is not defined, use the ID
+			name = product.getId();
+
+		String[] configSpecs = info.getConfigurations();
+		for (int i = 0; i < configSpecs.length; i++)
+			info.addAdvice(new ProductFileAdvice(product, configSpecs[i]));
+	}
+
+	private Collection<IVersionedId> versionElements(Collection<IVersionedId> elements, String namespace) {
+		Collection<IVersionAdvice> versionAdvice = info.getAdvice(null, true, null, null, IVersionAdvice.class);
+		List<IVersionedId> result = new ArrayList<IVersionedId>();
+		for (IVersionedId element : elements) {
+			Version elementVersion = element.getVersion();
+			if (elementVersion == null || Version.emptyVersion.equals(elementVersion)) {
+				Iterator<IVersionAdvice> advice = versionAdvice.iterator();
+				while (advice.hasNext()) {
+					elementVersion = advice.next().getVersion(namespace, element.getId());
+					break;
+				}
+			}
+
+			//	if advisedVersion is null, we get the highest version
+			IInstallableUnit unit = queryForIU(publisherResults, element.getId(), elementVersion);
+			if (unit != null) {
+				result.add(unit);
+			} else if (elementVersion != null) {
+				//best effort
+				result.add(new VersionedId(element.getId(), elementVersion));
+			}
+			//TODO we could still add a requirement on version 0.0.0 to get any version, but if the
+			//bundle is platform specific we will have broken metadata due to a missing filter
+		}
+		return result;
+	}
+
+	private Collection<IVersionedId> listElements(List<IVersionedId> elements, String suffix) {
+		if (suffix == null || suffix.length() == 0)
+			return elements;
+		ArrayList<IVersionedId> result = new ArrayList<IVersionedId>(elements.size());
+		for (IVersionedId elementName : elements) {
+			result.add(new VersionedId(elementName.getId() + suffix, elementName.getVersion()));
+		}
+		return result;
+	}
+
+	protected File getExecutablesLocation() {
+		if (executablesFeatureLocation != null)
+			return executablesFeatureLocation;
+		if (source != null)
+			return new File(source);
+		return null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java
new file mode 100644
index 0000000..b15c9b6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java
@@ -0,0 +1,315 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   EclipseSource - ongoing development
+ *   IBM Corporation - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.DataLoader;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
+import org.eclipse.equinox.p2.metadata.IVersionedId;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.AbstractAdvice;
+import org.eclipse.equinox.p2.publisher.AbstractPublisherAction;
+import org.eclipse.equinox.p2.publisher.actions.ILicenseAdvice;
+
+/**
+ * Provide advice derived from the .product file.  The product can give some info on 
+ * launching as well as the configuration (bundles, properties, ...)
+ */
+public class ProductFileAdvice extends AbstractAdvice implements ILicenseAdvice, IExecutableAdvice, IConfigAdvice, IBrandingAdvice {
+	private final static String OSGI_SPLASH_PATH = "osgi.splashPath"; //$NON-NLS-1$
+	private final static String SPLASH_PREFIX = "platform:/base/plugins/"; //$NON-NLS-1$
+	private IProductDescriptor product;
+	private String configSpec;
+	private String ws;
+	private String os;
+	private String arch;
+	private ConfigData configData = null;
+
+	protected String getId() {
+		return product.getId();
+	}
+
+	protected Version getVersion() {
+		return Version.parseVersion(product.getVersion());
+	}
+
+	/**
+	 * Constructs a new ProductFileAdvice for a given product file and a
+	 * particular configuration. Configurations are 
+	 * specified as: ws.os.arch where:
+	 *  ws is the windowing system
+	 *  os is the operating system
+	 *  arch is the architecture
+	 */
+	public ProductFileAdvice(IProductDescriptor product, String configSpec) {
+		this.product = product;
+		this.configSpec = configSpec;
+
+		String[] config = AbstractPublisherAction.parseConfigSpec(configSpec);
+		ws = config[0];
+		if (ws == null)
+			ws = AbstractPublisherAction.CONFIG_ANY;
+		os = config[1];
+		if (os == null)
+			os = AbstractPublisherAction.CONFIG_ANY;
+		arch = config[2];
+		if (arch == null)
+			arch = AbstractPublisherAction.CONFIG_ANY;
+
+		configData = getConfigData();
+	}
+
+	/**
+	 * Returns the program arguments for this product.  
+	 */
+	public String[] getProgramArguments() {
+		String line = product.getProgramArguments(os);
+		return AbstractPublisherAction.getArrayFromString(line, " "); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the VM arguments for this product.
+	 */
+	public String[] getVMArguments() {
+		String line = product.getVMArguments(os);
+		return AbstractPublisherAction.getArrayFromString(line, " "); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the Bundles that constitute this product.  These
+	 * bundles may be specified in the .product file, .product file configuration
+	 * area, config.ini file, or a combination of these three places.
+	 */
+	public BundleInfo[] getBundles() {
+		return configData.getBundles();
+	}
+
+	/**
+	 * Returns the properties associated with this product.  These
+	 * properties may be defined in the .product file, the config.ini
+	 * file, or both.
+	 */
+	public Map<String, String> getProperties() {
+		Map<String, String> result = new HashMap<String, String>();
+		CollectionUtils.putAll(configData.getProperties(), result);
+		result.putAll(product.getConfigurationProperties());
+		return result;
+	}
+
+	/**
+	 * Returns the name of the launcher.  This should be the OS-independent
+	 * name. That is, ".exe" etc. should not be included.
+	 * 
+	 * @return the name of the branded launcher or <code>null</code> if none.
+	 */
+	public String getExecutableName() {
+		return product.getLauncherName();
+	}
+
+	/**
+	 * Returns the product file parser that this advice is working on
+	 */
+	public IProductDescriptor getProductFile() {
+		return product;
+	}
+
+	/**
+	 * Returns the icons defined for this product
+	 */
+	public String[] getIcons() {
+		return product.getIcons(os);
+	}
+
+	/**
+	 * Returns the operating system that this advice is configured to work with.
+	 */
+	public String getOS() {
+		return this.os;
+	}
+
+	/**
+	 * Returns the license text for this product
+	 */
+	public String getLicenseURL() {
+		return product.getLicenseURL();
+	}
+
+	/**
+	 * Returns the license URL for this product
+	 */
+	public String getLicenseText() {
+		return product.getLicenseText();
+	}
+
+	private ConfigData getConfigData() {
+		DataLoader loader = createDataLoader();
+		ConfigData result;
+		if (loader != null) {
+			result = loader.getConfigData();
+		} else
+			result = generateConfigData();
+
+		addProductFileBundles(result); // these are the bundles specified in the <plugins/> tag
+		addProductFileConfigBundles(result); // these are the bundles specified in the <configurations> tag in the product file
+
+		if (product.getProductId() != null)
+			result.setProperty("eclipse.product", product.getProductId()); //$NON-NLS-1$
+		if (product.getApplication() != null)
+			result.setProperty("eclipse.application", product.getApplication()); //$NON-NLS-1$
+		String location = getSplashLocation();
+		if (location != null)
+			result.setProperty(OSGI_SPLASH_PATH, SPLASH_PREFIX + location);
+		return result;
+	}
+
+	private void addProductFileConfigBundles(ConfigData data) {
+		Set<BundleInfo> versionBoundBundles = new HashSet<BundleInfo>();
+		Map<String, List<BundleInfo>> unboundedBundles = new HashMap<String, List<BundleInfo>>();
+
+		BundleInfo[] bundles = data.getBundles();
+		for (int i = 0; i < bundles.length; i++) {
+			// For each bundle we know about, cache it.  If the bundle doesn't have a version
+			// add it to a list of bundles by name
+			BundleInfo bundleInfo = bundles[i];
+			if (bundleInfo.getVersion().equals(BundleInfo.EMPTY_VERSION)) {
+				addUnboundedBundle(unboundedBundles, bundleInfo);
+			} else {
+				versionBoundBundles.add(bundleInfo);
+				addUnboundedBundle(unboundedBundles, bundleInfo);
+			}
+		}
+
+		List<BundleInfo> bundleInfos = product.getBundleInfos();
+		for (BundleInfo bundleInfo : bundleInfos) {
+			// For each bundle that has configuration information, if the bundle is in the 
+			// bundles bound by version, add the "configured" bundle instead
+			// If the bundle is not bound to a version, then replace all bounded versions
+			// with this one.  Otherwise, just add this one (don't replace)
+			if (versionBoundBundles.contains(bundleInfo)) {
+				// If we found a version with the same name and version, replace it with the "configured" bundle
+				data.removeBundle(bundleInfo);
+				data.addBundle(bundleInfo);
+			} else if (bundleInfo.getVersion().equals(BundleInfo.EMPTY_VERSION)) {
+				// If we don't have a version number, look for all bundles that match by name
+				List<BundleInfo> list = unboundedBundles.get(bundleInfo.getSymbolicName());
+				if (list == null)
+					data.addBundle(bundleInfo);
+				else
+					for (BundleInfo target : list) {
+						target.setStartLevel(bundleInfo.getStartLevel());
+						target.setMarkedAsStarted(bundleInfo.isMarkedAsStarted());
+					}
+			} else {
+				// Otherwise we have a version, but we could not match it, so just add this one.
+				data.addBundle(bundleInfo);
+			}
+
+		}
+	}
+
+	private void addUnboundedBundle(Map<String, List<BundleInfo>> data, BundleInfo bundleInfo) {
+		if (!data.containsKey(bundleInfo.getSymbolicName()))
+			data.put(bundleInfo.getSymbolicName(), new LinkedList<BundleInfo>());
+		data.get(bundleInfo.getSymbolicName()).add(bundleInfo);
+	}
+
+	private void addProductFileBundles(ConfigData data) {
+		List<IVersionedId> bundles = product.getBundles(true);
+		Set<BundleInfo> set = new HashSet<BundleInfo>();
+		set.addAll(Arrays.asList(data.getBundles()));
+
+		for (IVersionedId vid : bundles) {
+			BundleInfo bundleInfo = new BundleInfo();
+			bundleInfo.setSymbolicName(vid.getId());
+			bundleInfo.setVersion(vid.getVersion().toString());
+			if (!set.contains(bundleInfo))
+				data.addBundle(bundleInfo);
+		}
+	}
+
+	private ConfigData generateConfigData() {
+		ConfigData result = new ConfigData(null, null, null, null);
+		if (product.useFeatures())
+			return result;
+
+		// Add all the bundles here.  We replace / update them later
+		// if we find configuration information
+		List<IVersionedId> bundles = product.getBundles(true);
+		for (IVersionedId vid : bundles) {
+			BundleInfo bundleInfo = new BundleInfo();
+			bundleInfo.setSymbolicName(vid.getId());
+			bundleInfo.setVersion(vid.getVersion().toString());
+			result.addBundle(bundleInfo);
+		}
+		return result;
+	}
+
+	private String getSplashLocation() {
+		return product.getSplashLocation();
+	}
+
+	protected String getConfigSpec() {
+		return configSpec;
+	}
+
+	protected boolean matchConfig(String spec, boolean includeDefault) {
+		if (spec != null) {
+			String targetWS = AbstractPublisherAction.parseConfigSpec(spec)[0];
+			if (targetWS == null)
+				targetWS = AbstractPublisherAction.CONFIG_ANY;
+			if (!ws.equals(targetWS) && !ws.equals(AbstractPublisherAction.CONFIG_ANY) && !targetWS.equals(AbstractPublisherAction.CONFIG_ANY)) {
+				return false;
+			}
+
+			String targetOS = AbstractPublisherAction.parseConfigSpec(spec)[1];
+			if (targetOS == null)
+				targetOS = AbstractPublisherAction.CONFIG_ANY;
+			if (!os.equals(targetOS) && !os.equals(AbstractPublisherAction.CONFIG_ANY) && !targetOS.equals(AbstractPublisherAction.CONFIG_ANY)) {
+				return false;
+			}
+
+			String targetArch = AbstractPublisherAction.parseConfigSpec(spec)[2];
+			if (targetArch == null)
+				targetArch = AbstractPublisherAction.CONFIG_ANY;
+			if (!arch.equals(targetArch) && !arch.equals(AbstractPublisherAction.CONFIG_ANY) && !targetArch.equals(AbstractPublisherAction.CONFIG_ANY)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private DataLoader createDataLoader() {
+		String location = product.getConfigIniPath(os);
+		if (location == null)
+			location = product.getConfigIniPath(null);
+		if (location == null)
+			return null;
+
+		File configFile = new File(location);
+		// We are assuming we are always relative from the product file
+		// However PDE tooling puts us relative from the workspace, that "relative" path also looks like an absolute path on linux
+		// Build may have copied the file to the correct place for us
+		if (!configFile.isAbsolute() || !configFile.exists())
+			configFile = new File(product.getLocation().getParentFile(), location);
+
+		//We don't really have an executable location, get something reasonable based on the config.ini location
+		File parent = configFile.getParentFile();
+		if (parent.getName().equals("configuration") && parent.getParentFile() != null) //$NON-NLS-1$
+			parent = parent.getParentFile();
+		return new DataLoader(configFile, parent);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductPublisherApplication.java
new file mode 100644
index 0000000..1b8f339
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductPublisherApplication.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *   Code 9 - initial API and implementation
+ *   IBM - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import org.eclipse.equinox.internal.p2.publisher.Messages;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.VersionAdvice;
+import org.eclipse.osgi.util.NLS;
+
+public class ProductPublisherApplication extends AbstractPublisherApplication {
+
+	private String product;
+	private String executables;
+	private String flavor;
+
+	public ProductPublisherApplication() {
+		//hidden
+	}
+
+	protected IPublisherAction[] createActions() {
+		ArrayList<IPublisherAction> result = new ArrayList<IPublisherAction>();
+		result.add(createProductAction());
+		return result.toArray(new IPublisherAction[result.size()]);
+	}
+
+	private IPublisherAction createProductAction() {
+		IProductDescriptor productDescriptor = null;
+		try {
+			productDescriptor = new ProductFile(product);
+		} catch (Exception e) {
+			throw new IllegalArgumentException(NLS.bind(Messages.exception_errorLoadingProductFile, product, e.toString()));
+		}
+		File executablesFeature = executables == null ? null : new File(executables);
+		return new ProductAction(source, productDescriptor, flavor, executablesFeature);
+	}
+
+	protected void processParameter(String arg, String parameter, PublisherInfo publisherInfo) throws URISyntaxException {
+		super.processParameter(arg, parameter, publisherInfo);
+
+		if (arg.equalsIgnoreCase("-productFile")) //$NON-NLS-1$
+			product = parameter;
+		if (arg.equalsIgnoreCase("-executables")) //$NON-NLS-1$
+			executables = parameter;
+		if (arg.equalsIgnoreCase("-flavor")) //$NON-NLS-1$
+			flavor = parameter;
+		if (arg.equalsIgnoreCase("-pluginVersionsAdvice")) { //$NON-NLS-1$
+			VersionAdvice versionAdvice = new VersionAdvice();
+			versionAdvice.load(IInstallableUnit.NAMESPACE_IU_ID, parameter, null);
+			info.addAdvice(versionAdvice);
+		}
+		if (arg.equalsIgnoreCase("-featureVersionsAdvice")) { //$NON-NLS-1$
+			VersionAdvice versionAdvice = new VersionAdvice();
+			versionAdvice.load(IInstallableUnit.NAMESPACE_IU_ID, parameter, ".feature.group"); //$NON-NLS-1$
+			info.addAdvice(versionAdvice);
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/URLEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/URLEntry.java
new file mode 100644
index 0000000..cbc03aa
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/URLEntry.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.p2.publisher.eclipse;
+
+public class URLEntry {
+	private String annotation;
+	private String url;
+
+	public URLEntry() {
+		//empty
+	}
+
+	public URLEntry(String url, String annotation) {
+		this.url = url;
+		this.annotation = annotation;
+	}
+
+	public void setAnnotation(String annotation) {
+		this.annotation = annotation;
+	}
+
+	public String getAnnotation() {
+		return annotation;
+	}
+
+	public void setURL(String url) {
+		this.url = url;
+	}
+
+	public String getURL() {
+		return url;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/BuildPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/BuildPublisherApplication.java
new file mode 100644
index 0000000..a2e3c6c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/BuildPublisherApplication.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *      IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.build.publisher;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.equinox.p2.publisher.AbstractPublisherApplication;
+import org.eclipse.equinox.p2.publisher.IPublisherAction;
+
+public class BuildPublisherApplication extends AbstractPublisherApplication {
+	private List<IPublisherAction> actions;
+
+	public void addAction(IPublisherAction action) {
+		if (actions == null)
+			actions = new ArrayList<IPublisherAction>(1);
+		actions.add(action);
+	}
+
+	@Override
+	protected IPublisherAction[] createActions() {
+		if (actions == null)
+			return new IPublisherAction[0];
+		return actions.toArray(new IPublisherAction[actions.size()]);
+	}
+
+	public void setAppend(boolean value) {
+		super.append = value;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/FeatureRootAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/FeatureRootAdvice.java
new file mode 100644
index 0000000..bd22206
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/FeatureRootAdvice.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *      IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.build.publisher;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
+import org.eclipse.equinox.internal.p2.publisher.FileSetDescriptor;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.AbstractAdvice;
+import org.eclipse.equinox.p2.publisher.actions.IFeatureRootAdvice;
+
+public class FeatureRootAdvice extends AbstractAdvice implements IFeatureRootAdvice {
+	private static final int IDX_COMPUTER = 0;
+	private static final int IDX_DESCRIPTOR = 1;
+
+	// String config -> Object[] { GatheringComputer, Map: permission -> Set, String }
+	private final Map<String, Object[]> advice = new HashMap<String, Object[]>();
+	private String featureId;
+	private Version featureVersion;
+
+	@Override
+	public boolean isApplicable(String configSpec, boolean includeDefault, String id, Version version) {
+		if (featureId != null && !featureId.equals(id))
+			return false;
+		if (featureVersion != null && !featureVersion.equals(version))
+			return false;
+
+		if (configSpec != null && !advice.containsKey(configSpec))
+			return false;
+
+		return true;
+	}
+
+	/**
+	 * Return the configs for which we have advice
+	 * @return String[]
+	 */
+	public String[] getConfigs() {
+		return advice.keySet().toArray(new String[advice.size()]);
+	}
+
+	/**
+	 * Return the GatheringComputer containing the set of rootfiles to include for the given config
+	 * Returns null if we have no advice for the given config.
+	 * @param config
+	 * @return GatheringComputer
+	 */
+	public IPathComputer getRootFileComputer(String config) {
+		if (advice.containsKey(config))
+			return (GatheringComputer) advice.get(config)[IDX_COMPUTER];
+		return null;
+	}
+
+	public void addRootfiles(String config, GatheringComputer computer) {
+		Object[] configAdvice = getConfigAdvice(config);
+
+		if (configAdvice[IDX_COMPUTER] == null)
+			configAdvice[IDX_COMPUTER] = computer;
+		else {
+			GatheringComputer existing = (GatheringComputer) configAdvice[IDX_COMPUTER];
+			existing.addAll(computer);
+		}
+		FileSetDescriptor descriptor = getDescriptor(config);
+		descriptor.addFiles(computer.getFiles());
+	}
+
+	public void addPermissions(String config, String permissions, String[] files) {
+		FileSetDescriptor descriptor = getDescriptor(config);
+		for (int i = 0; i < files.length; i++) {
+			descriptor.addPermissions(new String[] {permissions, files[i]});
+		}
+	}
+
+	public void addLinks(String config, String links) {
+		FileSetDescriptor descriptor = getDescriptor(config);
+		descriptor.setLinks(links);
+	}
+
+	private Object[] getConfigAdvice(String config) {
+		Object[] configAdvice = advice.get(config);
+		if (configAdvice == null) {
+			configAdvice = new Object[3];
+			advice.put(config, configAdvice);
+		}
+		return configAdvice;
+	}
+
+	public FileSetDescriptor getDescriptor(String config) {
+		Object[] configAdvice = getConfigAdvice(config);
+		FileSetDescriptor descriptor = null;
+
+		if (configAdvice[IDX_DESCRIPTOR] != null)
+			descriptor = (FileSetDescriptor) configAdvice[IDX_DESCRIPTOR];
+		else {
+			String key = "root"; //$NON-NLS-1$
+			if (config.length() > 0)
+				key += "." + config; //$NON-NLS-1$
+			descriptor = new FileSetDescriptor(key, config);
+			configAdvice[IDX_DESCRIPTOR] = descriptor;
+		}
+		return descriptor;
+	}
+
+	public void setFeatureId(String featureId) {
+		this.featureId = featureId;
+	}
+
+	public void setFeatureVersion(Version featureVersion) {
+		this.featureVersion = featureVersion;
+	}
+
+	public String[] getConfigurations() {
+		Set<String> keys = advice.keySet();
+		return keys.toArray(new String[keys.size()]);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatherBundleAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatherBundleAction.java
new file mode 100644
index 0000000..ef8b7ca
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatherBundleAction.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *      IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.build.publisher;
+
+import java.io.File;
+import java.util.Dictionary;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.p2.publisher.IPublisherInfo;
+import org.eclipse.equinox.p2.publisher.IPublisherResult;
+import org.eclipse.equinox.p2.publisher.eclipse.*;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.pde.internal.publishing.Utils;
+
+public class GatherBundleAction extends BundlesAction {
+	private GatheringComputer computer = null;
+	private String unpack = null;
+	private File manifestRoot = null;
+	private File bundleLocation = null;
+
+	/**
+	 * @param location
+	 */
+	public GatherBundleAction(File location, File manifestRoot) {
+		super(new File[] {location});
+		this.manifestRoot = manifestRoot;
+		this.bundleLocation = location;
+	}
+
+	@Override
+	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+		return super.perform(publisherInfo, results, monitor);
+	}
+
+	@Override
+	protected void publishArtifact(IArtifactDescriptor descriptor, File base, File[] inclusions, IPublisherInfo publisherInfo) {
+		//ignore passed in inclusions, publish according to our computer
+		publishArtifact(descriptor, computer.getFiles(), null, publisherInfo, computer);
+	}
+
+	@Override
+	protected BundleDescription[] getBundleDescriptions(File[] bundleLocations, IProgressMonitor monitor) {
+		Dictionary<String, String> manifest = basicLoadManifest(manifestRoot);
+		if (manifest == null)
+			return null;
+
+		BundleDescription bundle = createBundleDescription(manifest, bundleLocation);
+		createShapeAdvice(bundle);
+		return new BundleDescription[] {bundle};
+	}
+
+	protected void createShapeAdvice(BundleDescription bundle) {
+		@SuppressWarnings("unchecked")
+		Dictionary<String, String> manifest = (Dictionary<String, String>) bundle.getUserObject();
+		String shape = manifest.get(BUNDLE_SHAPE);
+		if (shape == null) {
+			if (unpack != null) {
+				shape = Boolean.valueOf(unpack).booleanValue() ? IBundleShapeAdvice.DIR : IBundleShapeAdvice.JAR;
+			} else {
+				shape = Utils.guessUnpack(bundle, Utils.getBundleClasspath(manifest)) ? IBundleShapeAdvice.DIR : IBundleShapeAdvice.JAR;
+			}
+		}
+		BundleShapeAdvice advice = new BundleShapeAdvice(bundle.getSymbolicName(), PublisherHelper.fromOSGiVersion(bundle.getVersion()), shape);
+		info.addAdvice(advice);
+	}
+
+	public void setComputer(GatheringComputer computer) {
+		this.computer = computer;
+	}
+
+	public void setUnpack(String unpack) {
+		this.unpack = unpack;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatherFeatureAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatherFeatureAction.java
new file mode 100644
index 0000000..f328f2d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatherFeatureAction.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.build.publisher;
+
+import java.io.File;
+import java.util.Collection;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.FeatureParser;
+import org.eclipse.equinox.p2.metadata.IArtifactKey;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.IPublisherInfo;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+
+public class GatherFeatureAction extends FeaturesAction {
+	private GatheringComputer computer;
+	private String groupId = null;
+	private FeatureRootAdvice rootAdvice;
+	private final File featureRoot;
+
+	public GatherFeatureAction(File location, File featureRoot) {
+		super(new File[] {location});
+		this.featureRoot = featureRoot;
+	}
+
+	public void setComputer(GatheringComputer computer) {
+		this.computer = computer;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	@Override
+	protected Feature[] getFeatures(File[] locations) {
+		Feature feature = new FeatureParser().parse(featureRoot);
+		if (feature != null) {
+			feature.setLocation(locations[0].getAbsolutePath());
+			rootAdvice.setFeatureId(feature.getId());
+			rootAdvice.setFeatureVersion(Version.parseVersion(feature.getVersion()));
+			return new Feature[] {feature};
+		}
+		return new Feature[0];
+	}
+
+	//	protected ArrayList generateRootFileIUs(Feature feature, IPublisherResult result, IPublisherInfo publisherInfo) {
+	//		ArrayList ius = new ArrayList();
+	//
+	//		Collection collection = publisherInfo.getAdvice(null, false, null, null, FeatureRootAdvice.class);
+	//		if (collection.size() == 0)
+	//			return ius;
+	//
+	//		FeatureRootAdvice advice = (FeatureRootAdvice) collection.iterator().next();
+	//		String[] configs = advice.getConfigs();
+	//		for (int i = 0; i < configs.length; i++) {
+	//			String config = configs[i];
+	//
+	//			GatheringComputer rootComputer = advice.getRootFileComputer(config);
+	//
+	//			if (rootComputer != null) {
+	//				FileSetDescriptor descriptor = advice.getDescriptor(config);
+	//				IInstallableUnit iu = (IInstallableUnit) createFeatureRootFileIU(feature.getId(), feature.getVersion(), null, descriptor)[0];
+	//
+	//				File[] files = rootComputer.getFiles();
+	//				IArtifactKey artifactKey = iu.getArtifacts()[0];
+	//				ArtifactDescriptor artifactDescriptor = new ArtifactDescriptor(artifactKey);
+	//				publishArtifact(artifactDescriptor, files, null, publisherInfo, rootComputer);
+	//
+	//				result.addIU(iu, IPublisherResult.NON_ROOT);
+	//				ius.add(iu);
+	//			}
+	//		}
+	//		return ius;
+	//	}
+
+	@Override
+	protected String getGroupId(String featureId) {
+		if (groupId != null)
+			return groupId;
+		return super.getGroupId(featureId);
+	}
+
+	@Override
+	protected IInstallableUnit generateFeatureJarIU(Feature feature, IPublisherInfo publisherInfo) {
+		if (computer == null)
+			return null;
+		return createFeatureJarIU(feature, publisherInfo);
+	}
+
+	@Override
+	protected void publishFeatureArtifacts(Feature feature, IInstallableUnit featureIU, IPublisherInfo publisherInfo) {
+		if (computer == null)
+			return;
+
+		// add all the artifacts associated with the feature
+		Collection<IArtifactKey> artifacts = featureIU.getArtifacts();
+		if (artifacts.size() > 1) {
+			//boo!
+		}
+
+		ArtifactDescriptor ad = (ArtifactDescriptor) PublisherHelper.createArtifactDescriptor(publisherInfo, artifacts.iterator().next(), null);
+		processArtifactPropertiesAdvice(featureIU, ad, publisherInfo);
+		ad.setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP);
+
+		publishArtifact(ad, computer.getFiles(), null, publisherInfo, computer);
+	}
+
+	public void setRootAdvice(FeatureRootAdvice rootAdvice) {
+		this.rootAdvice = rootAdvice;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatheringComputer.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatheringComputer.java
new file mode 100644
index 0000000..3df09db
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/build/publisher/GatheringComputer.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.pde.internal.build.publisher;
+
+import java.io.File;
+import java.util.LinkedHashMap;
+import java.util.Set;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
+
+public class GatheringComputer implements IPathComputer {
+	private static final String PROVIDED_PATH = ":PROVIDED:"; //$NON-NLS-1$
+	private final LinkedHashMap<File, String> filesMap = new LinkedHashMap<File, String>();
+
+	public IPath computePath(File source) {
+		String prefix = filesMap.get(source);
+
+		IPath result = null;
+		if (prefix.startsWith(PROVIDED_PATH)) {
+			// the desired path is provided in the map
+			result = new Path(prefix.substring(10));
+		} else {
+			//else the map contains a prefix which must be stripped from the path
+			result = new Path(source.getAbsolutePath());
+			IPath rootPath = new Path(prefix);
+			result = result.removeFirstSegments(rootPath.matchingFirstSegments(result));
+		}
+		return result.setDevice(null);
+	}
+
+	public void reset() {
+		// nothing
+
+	}
+
+	public void addAll(GatheringComputer computer) {
+		filesMap.putAll(computer.filesMap);
+	}
+
+	public void addFiles(String prefix, String[] files) {
+		for (int i = 0; i < files.length; i++) {
+			filesMap.put(new File(prefix, files[i]), prefix);
+		}
+	}
+
+	public void addFile(String prefix, String file) {
+		filesMap.put(new File(prefix, file), prefix);
+	}
+
+	public void addFile(String computedPath, File file) {
+		filesMap.put(file, PROVIDED_PATH + computedPath);
+	}
+
+	public File[] getFiles() {
+		Set<File> keys = filesMap.keySet();
+		return keys.toArray(new File[keys.size()]);
+	}
+
+	public int size() {
+		return filesMap.size();
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Activator.java
new file mode 100644
index 0000000..f50a558
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Activator.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+package org.eclipse.pde.internal.publishing;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+	private static BundleContext context;
+	public static String ID = "org.eclipse.equinox.p2.publisher.eclipse"; //$NON-NLS-1$
+
+	public static BundleContext getContext() {
+		return context;
+	}
+
+	public void start(BundleContext bundleContext) throws Exception {
+		Activator.context = bundleContext;
+	}
+
+	public void stop(BundleContext bundleContext) throws Exception {
+		Activator.context = null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Constants.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Constants.java
new file mode 100644
index 0000000..d7efee1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Constants.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2011 SAP AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+
+package org.eclipse.pde.internal.publishing;
+
+public final class Constants {
+
+	public static final String ECLIPSE_BUNDLE_SHAPE = "Eclipse-BundleShape"; //$NON-NLS-1$
+	public static final String BUNDLE_CLASSPATH = org.osgi.framework.Constants.BUNDLE_CLASSPATH;
+
+	public static final String BUNDLE_EQUINOX_LAUNCHER = "org.eclipse.equinox.launcher"; //$NON-NLS-1$
+
+	public static final int EXCEPTION_FEATURE_PARSE = 17;
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Messages.java
new file mode 100644
index 0000000..eb3d5ed
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Messages.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM - Initial API and implementation
+ *    SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+package org.eclipse.pde.internal.publishing;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.publisher.eclipse.messages";//$NON-NLS-1$
+
+	// exception
+	public static String exception_missingElement;
+	public static String exception_featureParse;
+	public static String exception_productParse;
+
+	// feature parsing
+	public static String feature_parse_invalidIdOrVersion;
+	public static String feature_parse_emptyRequires;
+
+	static {
+		// load message values from bundle file
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Utils.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Utils.java
new file mode 100644
index 0000000..1865c04
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/Utils.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *      IBM Corporation - initial API and implementation
+ *      SAP AG - consolidation of publishers for PDE formats
+ *******************************************************************************/
+package org.eclipse.pde.internal.publishing;
+
+import java.io.*;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.BundleException;
+
+public final class Utils {
+
+	static public void copy(File source, File destination) throws IOException {
+		InputStream in = null;
+		OutputStream out = null;
+		try {
+			in = new BufferedInputStream(new FileInputStream(source));
+			out = new BufferedOutputStream(new FileOutputStream(destination));
+			final byte[] buffer = new byte[8192];
+			while (true) {
+				int bytesRead = -1;
+				bytesRead = in.read(buffer);
+				if (bytesRead == -1)
+					break;
+				out.write(buffer, 0, bytesRead);
+			}
+		} finally {
+			try {
+				if (in != null)
+					in.close();
+			} finally {
+				if (out != null)
+					out.close();
+			}
+		}
+	}
+
+	public static boolean guessUnpack(BundleDescription bundle, String[] classpath) {
+		if (bundle == null)
+			return true;
+
+		@SuppressWarnings("unchecked")
+		Dictionary<String, String> properties = (Dictionary<String, String>) bundle.getUserObject();
+		String shape = null;
+		if (properties != null && (shape = properties.get(Constants.ECLIPSE_BUNDLE_SHAPE)) != null) {
+			return shape.equals("dir"); //$NON-NLS-1$
+		}
+
+		// launcher fragments are a special case, they have no bundle-classpath and they must
+		//be unpacked
+		if (bundle.getHost() != null && bundle.getName().startsWith(Constants.BUNDLE_EQUINOX_LAUNCHER))
+			return true;
+
+		if (new File(bundle.getLocation()).isFile())
+			return false;
+
+		if (classpath.length == 0)
+			return false;
+
+		for (int i = 0; i < classpath.length; i++) {
+			if (classpath[i].equals(".")) //$NON-NLS-1$
+				return false;
+		}
+		return true;
+	}
+
+	public static String[] getBundleClasspath(Dictionary<String, String> manifest) {
+		String fullClasspath = getBundleManifestHeader(manifest, Constants.BUNDLE_CLASSPATH);
+		String[] result = new String[0];
+		try {
+			if (fullClasspath != null) {
+				ManifestElement[] classpathEntries;
+				classpathEntries = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, fullClasspath);
+				result = new String[classpathEntries.length];
+				for (int i = 0; i < classpathEntries.length; i++) {
+					result[i] = classpathEntries[i].getValue();
+				}
+			}
+		} catch (BundleException e) {
+			//Ignore
+		}
+		return result;
+	}
+
+	public static String getBundleManifestHeader(Dictionary<String, String> manifest, String header) {
+		String value = manifest.get(header);
+		if (value != null)
+			return value;
+
+		Enumeration<String> keys = manifest.keys();
+		while (keys.hasMoreElements()) {
+			String key = keys.nextElement();
+			if (key.equalsIgnoreCase(header))
+				return manifest.get(key);
+		}
+		return null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/messages.properties
new file mode 100644
index 0000000..f6c98ac
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/publishing/messages.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# Copyright (c) 2003, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+#     SAP AG - consolidation of publishers for PDE formats
+###############################################################################
+### PDE Publishing plugin message catalog
+
+
+### exception
+exception_missingElement = Unable to find element: {0}.
+exception_featureParse = Problems parsing the feature {0}.
+exception_productParse = Problems parsing the product file {0}.
+
+### feature parsing
+feature_parse_invalidIdOrVersion= Invalid ID \"{0}\" or version \"{1}\" encountered.
+feature_parse_emptyRequires = Error parsing feature: \"require\" must include at least one \"import\" element.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/swt/tools/IconExe.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/swt/tools/IconExe.java
new file mode 100644
index 0000000..7aae1ae
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/pde/internal/swt/tools/IconExe.java
@@ -0,0 +1,3351 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.swt.tools;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Customize the icon of a Windows exe
+ * 
+ * WARNING! This class is not part of SWT API. It is NOT API. It is an internal
+ * tool that may be changed or removed at anytime.
+ * 
+ * Based on MSDN "An In-Depth Look into the Win32 Portable Executable File Format".
+ * 
+ * Win x64 support (Bug #238001) based on MSDN "x64 Primer: Everything You Need To 
+ * Know To Start Programming 64-Bit Windows Systems".
+ */
+public class IconExe {
+
+	/**
+	* Replace the Desktop icons provided in the Windows executable program
+	* with matching icons provided by the user.
+	*
+	* Takes 2 arguments
+	* argument 0: the Windows executable e.g c:/eclipse/eclipse.exe
+	* argument 1: The .ico file to write to the given executable e.g. c:/myApp.ico
+	*
+	* Note 1. Write access to the executable program is required. As a result, that
+	* program must not be currently running or edited elsewhere.
+	* 
+	* Note 2. The Eclipse 3.4 launcher requires an .ico file with the following 7 images (in any order).
+	* 1. 48x48, 32 bit (RGB / Alpha Channel)
+	* 2. 32x32, 32 bit (RGB / Alpha Channel)
+	* 3. 16x16, 32 bit (RGB / Alpha Channel)
+	* 4. 48x48, 8 bit (256 colors)
+	* 5. 32x32, 8 bit (256 colors)
+	* 6. 24x24, 8 bit (256 colors)
+	* 7. 16x16, 8 bit (256 colors)	 
+	* A user icon matching exactly the width/height/depth of an executable icon will be written
+	* to the executable and will replace that executable icon. If an executable icon
+	* does not match a user icon, it is silently left as is.
+	* 
+	* Note 3. This function modifies the content of the executable program and may cause
+	* its corruption.
+	*/
+	public static void main(String[] args) throws Exception {
+		if (args.length < 2) {
+			System.err.println("Usage: IconExe <windows executable> <ico file>"); //$NON-NLS-1$
+			return;
+		}
+		ImageLoader loader = new ImageLoader();
+
+		List<ImageData> images = new ArrayList<ImageData>();
+		for (int i = 1; i < args.length; i++) {
+			try {
+				//An ICO should contain 7 images, a BMP will contain 1
+				ImageData[] current = loader.load(args[i]);
+				for (int j = 0; j < current.length; j++) {
+					images.add(current[j]);
+				}
+			} catch (RuntimeException e) {
+				//ignore so that we process the other images
+			}
+		}
+		ImageData[] data = new ImageData[images.size()];
+		data = images.toArray(data);
+
+		int nMissing = unloadIcons(args[0], data);
+		if (nMissing != 0)
+			System.err.println("Error - " + nMissing + " icon(s) not replaced in " + args[0] + " using " + args[1]); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	}
+
+	/* Implementation */
+
+	/** 
+	 * Retrieve the Desktop icons provided in the Windows executable program.
+	 * These icons are typically shown in various places of the Windows desktop.
+	 * 
+	 * Note. The Eclipse 3.4 launcher returns the following 7 images (in any order).
+	 * 1. 48x48, 32 bit (RGB / Alpha Channel)
+	 * 2. 32x32, 32 bit (RGB / Alpha Channel)
+	 * 3. 16x16, 32 bit (RGB / Alpha Channel)
+	 * 4. 48x48, 8 bit (256 colors)
+	 * 5. 32x32, 8 bit (256 colors)
+	 * 6. 24x24, 8 bit (256 colors)
+	 * 7. 16x16, 8 bit (256 colors)
+	 * 
+	 * @param program the Windows executable e.g c:/eclipse/eclipse.exe
+	 */
+	static ImageData[] loadIcons(String program) throws FileNotFoundException, IOException {
+		RandomAccessFile raf = new RandomAccessFile(program, "r"); //$NON-NLS-1$
+		IconExe iconExe = new IconExe();
+		IconResInfo[] iconInfo = iconExe.getIcons(raf);
+		ImageData[] data = new ImageData[iconInfo.length];
+		for (int i = 0; i < data.length; i++)
+			data[i] = iconInfo[i].data;
+		raf.close();
+		return data;
+	}
+
+	/** 
+	 * Replace the Desktop icons provided in the Windows executable program
+	 * with icons provided by the user.
+	 * 
+	 * Note 1. Write access to the executable program is required. As a result, that
+	 * program must not be currently running or edited elsewhere.
+	 * 
+	 * Note 2. Use loadIcons to determine which set of icons (width, height, depth)
+	 * is required to replace the icons in the executable program. A user icon
+	 * matching exactly the width/height/depth of an executable icon will be written
+	 * to the executable and will replace that executable icon. If an executable icon
+	 * does not match a user icon, it is left as is. Verify the return value matches
+	 * the number of icons to write. Finally, use loadIcons after this operation
+	 * to verify the icons have changed as expected.
+	 * 
+	 * Note 3. The Eclipse 3.4 launcher requires the following 7 images (in any order).
+	 * 1. 48x48, 32 bit (RGB / Alpha Channel)
+	 * 2. 32x32, 32 bit (RGB / Alpha Channel)
+	 * 3. 16x16, 32 bit (RGB / Alpha Channel)
+	 * 4. 48x48, 8 bit (256 colors)
+	 * 5. 32x32, 8 bit (256 colors)
+	 * 6. 24x24, 8 bit (256 colors)
+	 * 7. 16x16, 8 bit (256 colors)
+	 * 
+	 * Note 4. This function modifies the content of the executable program and may cause
+	 * its corruption. 
+	 * 
+	 * @param program the Windows executable e.g c:/eclipse/eclipse.exe
+	 * @param icons to write to the given executable
+	 * @return the number of icons from the original program that were not successfully replaced (0 if success)
+	 */
+	static int unloadIcons(String program, ImageData[] icons) throws FileNotFoundException, IOException {
+		RandomAccessFile raf = new RandomAccessFile(program, "rw"); //$NON-NLS-1$
+		IconExe iconExe = new IconExe();
+		IconResInfo[] iconInfo = iconExe.getIcons(raf);
+		// Display an error if  no icons found in target executable.
+		if (iconInfo.length == 0) {
+			System.err.println("Warning - no icons detected in \"" + program + "\"."); //$NON-NLS-1$ //$NON-NLS-2$
+			raf.close();
+			return 0;
+		}
+		int cnt = 0;
+		for (int i = 0; i < iconInfo.length; i++) {
+			for (int j = 0; j < icons.length; j++) {
+				if (icons[j] == null)
+					continue;
+				if (iconInfo[i].data.width == icons[j].width && iconInfo[i].data.height == icons[j].height && iconInfo[i].data.depth == icons[j].depth) {
+					raf.seek(iconInfo[i].offset);
+					unloadIcon(raf, icons[j]);
+					cnt++;
+					break;
+				}
+			}
+		}
+		raf.close();
+		return iconInfo.length - cnt;
+	}
+
+	public static final String VERSION = "20050124"; //$NON-NLS-1$
+
+	static final boolean DEBUG = false;
+
+	public static class IconResInfo {
+		ImageData data;
+		int offset;
+		int size;
+	}
+
+	IconResInfo[] iconInfo = null;
+	int iconCnt;
+
+	IconResInfo[] getIcons(RandomAccessFile raf) throws IOException {
+		iconInfo = new IconResInfo[4];
+		iconCnt = 0;
+		IMAGE_DOS_HEADER imageDosHeader = new IMAGE_DOS_HEADER();
+		read(raf, imageDosHeader);
+		if (imageDosHeader.e_magic != IMAGE_DOS_SIGNATURE)
+			return new IconResInfo[0];
+		int imageNtHeadersOffset = imageDosHeader.e_lfanew;
+		raf.seek(imageNtHeadersOffset);
+		IMAGE_NT_HEADERS imageNtHeaders = new IMAGE_NT_HEADERS();
+		read(raf, imageNtHeaders);
+		if (imageNtHeaders.Signature != IMAGE_NT_SIGNATURE)
+			return new IconResInfo[0];
+		// DumpResources
+		int resourcesRVA = imageNtHeaders.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress;
+		if (resourcesRVA == 0)
+			return new IconResInfo[0];
+		if (DEBUG)
+			System.out.println("* Resources (RVA= " + resourcesRVA + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+		IMAGE_SECTION_HEADER imageSectionHeader = new IMAGE_SECTION_HEADER();
+		int firstSectionOffset = imageNtHeadersOffset + IMAGE_NT_HEADERS.FIELD_OFFSET_OptionalHeader + imageNtHeaders.FileHeader.SizeOfOptionalHeader;
+		raf.seek(firstSectionOffset);
+		boolean found = false;
+		for (int i = 0; i < imageNtHeaders.FileHeader.NumberOfSections; i++) {
+			read(raf, imageSectionHeader);
+			if (resourcesRVA >= imageSectionHeader.VirtualAddress && resourcesRVA < imageSectionHeader.VirtualAddress + imageSectionHeader.Misc_VirtualSize) {
+				// could check the imageSectionHeader name is .rsrc
+				found = true;
+				break;
+			}
+		}
+		if (!found)
+			return new IconResInfo[0];
+		int delta = imageSectionHeader.VirtualAddress - imageSectionHeader.PointerToRawData;
+		int imageResourceDirectoryOffset = resourcesRVA - delta;
+		dumpResourceDirectory(raf, imageResourceDirectoryOffset, imageResourceDirectoryOffset, delta, 0, 0, false);
+		if (iconCnt < iconInfo.length) {
+			IconResInfo[] newArray = new IconResInfo[iconCnt];
+			System.arraycopy(iconInfo, 0, newArray, 0, iconCnt);
+			iconInfo = newArray;
+		}
+		return iconInfo;
+	}
+
+	void dumpResourceDirectory(RandomAccessFile raf, int imageResourceDirectoryOffset, int resourceBase, int delta, int type, int level, boolean rt_icon_root) throws IOException {
+		if (DEBUG)
+			System.out.println("** LEVEL " + level); //$NON-NLS-1$
+
+		IMAGE_RESOURCE_DIRECTORY imageResourceDirectory = new IMAGE_RESOURCE_DIRECTORY();
+		raf.seek(imageResourceDirectoryOffset);
+		read(raf, imageResourceDirectory);
+
+		if (DEBUG) {
+			String sType = "" + type; //$NON-NLS-1$
+			// level 1 resources are resource types
+			if (level == 1) {
+				System.out.println("___________________________"); //$NON-NLS-1$
+				if (type == RT_ICON)
+					sType = "RT_ICON"; //$NON-NLS-1$
+				if (type == RT_GROUP_ICON)
+					sType = "RT_GROUP_ICON"; //$NON-NLS-1$
+			}
+			System.out.println("Resource Directory [" + sType + "]" + " (Named " + imageResourceDirectory.NumberOfNamedEntries + ", ID " + imageResourceDirectory.NumberOfIdEntries + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+		}
+
+		IMAGE_RESOURCE_DIRECTORY_ENTRY[] imageResourceDirectoryEntries = new IMAGE_RESOURCE_DIRECTORY_ENTRY[imageResourceDirectory.NumberOfIdEntries];
+		for (int i = 0; i < imageResourceDirectoryEntries.length; i++) {
+			imageResourceDirectoryEntries[i] = new IMAGE_RESOURCE_DIRECTORY_ENTRY();
+			read(raf, imageResourceDirectoryEntries[i]);
+		}
+		for (int i = 0; i < imageResourceDirectoryEntries.length; i++) {
+			if (imageResourceDirectoryEntries[i].DataIsDirectory) {
+				dumpResourceDirectory(raf, imageResourceDirectoryEntries[i].OffsetToDirectory + resourceBase, resourceBase, delta, imageResourceDirectoryEntries[i].Id, level + 1, rt_icon_root ? true : type == RT_ICON);
+			} else {
+				// Resource found
+				/// pResDirEntry->Name
+				IMAGE_RESOURCE_DIRECTORY_ENTRY irde = imageResourceDirectoryEntries[i];
+				IMAGE_RESOURCE_DATA_ENTRY data = new IMAGE_RESOURCE_DATA_ENTRY();
+				raf.seek(imageResourceDirectoryEntries[i].OffsetToData + resourceBase);
+				read(raf, data);
+				if (DEBUG)
+					System.out.println("Resource Id " + irde.Id + " Data Offset RVA " + data.OffsetToData + ", Size " + data.Size); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				if (rt_icon_root) {
+					if (DEBUG)
+						System.out.println("iconcnt " + iconCnt + " |" + iconInfo.length); //$NON-NLS-1$ //$NON-NLS-2$
+					iconInfo[iconCnt] = new IconResInfo();
+					iconInfo[iconCnt].data = parseIcon(raf, data.OffsetToData - delta, data.Size);
+					iconInfo[iconCnt].offset = data.OffsetToData - delta;
+					iconInfo[iconCnt].size = data.Size;
+					iconCnt++;
+					if (iconCnt == iconInfo.length) {
+						IconResInfo[] newArray = new IconResInfo[iconInfo.length + 4];
+						System.arraycopy(iconInfo, 0, newArray, 0, iconInfo.length);
+						iconInfo = newArray;
+					}
+				}
+			}
+		}
+	}
+
+	static ImageData parseIcon(RandomAccessFile raf, int offset, int size) throws IOException {
+		raf.seek(offset);
+		BITMAPINFO bitmapInfo = new BITMAPINFO();
+		read(raf, bitmapInfo);
+		bitmapInfo.bmiHeader.biHeight /= 2;
+		int width = bitmapInfo.bmiHeader.biWidth;
+		int height = bitmapInfo.bmiHeader.biHeight;
+		int depth = bitmapInfo.bmiHeader.biBitCount;
+
+		PaletteData palette = loadPalette(bitmapInfo.bmiHeader, raf);
+		byte[] shapeData = loadData(bitmapInfo.bmiHeader, raf);
+		bitmapInfo.bmiHeader.biBitCount = 1;
+		byte[] maskData = loadData(bitmapInfo.bmiHeader, raf);
+		maskData = convertPad(maskData, width, height, 1, 4, 2);
+		bitInvertData(maskData, 0, maskData.length);
+		return ImageData.internal_new(width, height, depth, palette, 4, shapeData, 2, maskData, null, -1, -1, SWT.IMAGE_ICO, 0, 0, 0, 0);
+	}
+
+	static byte[] bitInvertData(byte[] data, int startIndex, int endIndex) {
+		// Destructively bit invert data in the given byte array.
+		for (int i = startIndex; i < endIndex; i++) {
+			data[i] = (byte) (255 - data[i - startIndex]);
+		}
+		return data;
+	}
+
+	static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
+		if (pad == newPad)
+			return data;
+		int stride = (width * depth + 7) / 8;
+		int bpl = (stride + (pad - 1)) / pad * pad;
+		int newBpl = (stride + (newPad - 1)) / newPad * newPad;
+		byte[] newData = new byte[height * newBpl];
+		int srcIndex = 0, destIndex = 0;
+		for (int y = 0; y < height; y++) {
+			System.arraycopy(data, srcIndex, newData, destIndex, newBpl);
+			srcIndex += bpl;
+			destIndex += newBpl;
+		}
+		return newData;
+	}
+
+	static PaletteData loadPalette(BITMAPINFOHEADER bih, RandomAccessFile raf) throws IOException {
+		int depth = bih.biBitCount;
+		if (depth <= 8) {
+			int numColors = bih.biClrUsed;
+			if (numColors == 0) {
+				numColors = 1 << depth;
+			} else {
+				if (numColors > 256)
+					numColors = 256;
+			}
+			byte[] buf = new byte[numColors * 4];
+			raf.read(buf);
+			return paletteFromBytes(buf, numColors);
+		}
+		if (depth == 16)
+			return new PaletteData(0x7C00, 0x3E0, 0x1F);
+		if (depth == 24)
+			return new PaletteData(0xFF, 0xFF00, 0xFF0000);
+		return new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
+	}
+
+	static PaletteData paletteFromBytes(byte[] bytes, int numColors) {
+		int bytesOffset = 0;
+		RGB[] colors = new RGB[numColors];
+		for (int i = 0; i < numColors; i++) {
+			colors[i] = new RGB(bytes[bytesOffset + 2] & 0xFF, bytes[bytesOffset + 1] & 0xFF, bytes[bytesOffset] & 0xFF);
+			bytesOffset += 4;
+		}
+		return new PaletteData(colors);
+	}
+
+	static byte[] loadData(BITMAPINFOHEADER bih, RandomAccessFile raf) throws IOException {
+		int stride = (bih.biWidth * bih.biBitCount + 7) / 8;
+		stride = (stride + 3) / 4 * 4; // Round up to 4 byte multiple
+		byte[] data = loadData(bih, raf, stride);
+		flipScanLines(data, stride, bih.biHeight);
+		return data;
+	}
+
+	static void flipScanLines(byte[] data, int stride, int height) {
+		int i1 = 0;
+		int i2 = (height - 1) * stride;
+		for (int i = 0; i < height / 2; i++) {
+			for (int index = 0; index < stride; index++) {
+				byte b = data[index + i1];
+				data[index + i1] = data[index + i2];
+				data[index + i2] = b;
+			}
+			i1 += stride;
+			i2 -= stride;
+		}
+	}
+
+	static byte[] loadData(BITMAPINFOHEADER bih, RandomAccessFile raf, int stride) throws IOException {
+		int dataSize = bih.biHeight * stride;
+		byte[] data = new byte[dataSize];
+		int cmp = bih.biCompression;
+		if (cmp == 0) { // BMP_NO_COMPRESSION
+			raf.read(data);
+		} else {
+			if (DEBUG)
+				System.out.println("ICO cannot be compressed?"); //$NON-NLS-1$
+		}
+		return data;
+	}
+
+	static void unloadIcon(RandomAccessFile raf, ImageData icon) throws IOException {
+		int sizeImage = (((icon.width * icon.depth + 31) / 32 * 4) + ((icon.width + 31) / 32 * 4)) * icon.height;
+		write4(raf, BMPHeaderFixedSize);
+		write4(raf, icon.width);
+		write4(raf, icon.height * 2);
+		writeU2(raf, 1);
+		writeU2(raf, icon.depth);
+		write4(raf, 0);
+		write4(raf, sizeImage);
+		write4(raf, 0);
+		write4(raf, 0);
+		write4(raf, icon.palette.colors != null ? icon.palette.colors.length : 0);
+		write4(raf, 0);
+
+		byte[] rgbs = paletteToBytes(icon.palette);
+		raf.write(rgbs);
+		unloadShapeData(raf, icon);
+		unloadMaskData(raf, icon);
+	}
+
+	static byte[] paletteToBytes(PaletteData pal) {
+		int n = pal.colors == null ? 0 : (pal.colors.length < 256 ? pal.colors.length : 256);
+		byte[] bytes = new byte[n * 4];
+		int offset = 0;
+		for (int i = 0; i < n; i++) {
+			RGB col = pal.colors[i];
+			bytes[offset] = (byte) col.blue;
+			bytes[offset + 1] = (byte) col.green;
+			bytes[offset + 2] = (byte) col.red;
+			offset += 4;
+		}
+		return bytes;
+	}
+
+	static void unloadMaskData(RandomAccessFile raf, ImageData icon) {
+		ImageData mask = icon.getTransparencyMask();
+		int bpl = (icon.width + 7) / 8;
+		int pad = mask.scanlinePad;
+		int srcBpl = (bpl + pad - 1) / pad * pad;
+		int destBpl = (bpl + 3) / 4 * 4;
+		byte[] buf = new byte[destBpl];
+		int offset = (icon.height - 1) * srcBpl;
+		byte[] data = mask.data;
+		try {
+			for (int i = 0; i < icon.height; i++) {
+				System.arraycopy(data, offset, buf, 0, bpl);
+				bitInvertData(buf, 0, bpl);
+				raf.write(buf, 0, destBpl);
+				offset -= srcBpl;
+			}
+		} catch (IOException e) {
+			SWT.error(SWT.ERROR_IO, e);
+		}
+	}
+
+	static void unloadShapeData(RandomAccessFile raf, ImageData icon) {
+		int bpl = (icon.width * icon.depth + 7) / 8;
+		int pad = icon.scanlinePad;
+		int srcBpl = (bpl + pad - 1) / pad * pad;
+		int destBpl = (bpl + 3) / 4 * 4;
+		byte[] buf = new byte[destBpl];
+		int offset = (icon.height - 1) * srcBpl;
+		byte[] data = icon.data;
+		try {
+			for (int i = 0; i < icon.height; i++) {
+				System.arraycopy(data, offset, buf, 0, bpl);
+				raf.write(buf, 0, destBpl);
+				offset -= srcBpl;
+			}
+		} catch (IOException e) {
+			SWT.error(SWT.ERROR_IO, e);
+		}
+	}
+
+	static boolean readIconGroup(RandomAccessFile raf, int offset, int size) throws IOException {
+		raf.seek(offset);
+		NEWHEADER newHeader = new NEWHEADER();
+		read(raf, newHeader);
+		if (newHeader.ResType != RES_ICON)
+			return false;
+		RESDIR[] resDir = new RESDIR[newHeader.ResCount];
+		for (int i = 0; i < newHeader.ResCount; i++) {
+			resDir[i] = new RESDIR();
+			read(raf, resDir[i]);
+		}
+		return true;
+	}
+
+	static void copyFile(String src, String dst) throws FileNotFoundException, IOException {
+		File srcFile = new File(src);
+		File dstFile = new File(dst);
+		InputStream in = new BufferedInputStream(new FileInputStream(srcFile));
+		OutputStream out = new BufferedOutputStream(new FileOutputStream(dstFile));
+		int c;
+		while ((c = in.read()) != -1)
+			out.write(c);
+		in.close();
+		out.close();
+	}
+
+	/* IO utilities to parse Windows executable */
+	static final int IMAGE_DOS_SIGNATURE = 0x5a4d;
+	static final int IMAGE_NT_SIGNATURE = 0x00004550;
+	static final int IMAGE_DIRECTORY_ENTRY_RESOURCE = 2;
+	static final int RES_ICON = 1;
+	static final int RT_ICON = 3;
+	static final int RT_GROUP_ICON = 14;
+	static final int BMPHeaderFixedSize = 40;
+	static final int IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b;
+	static final int IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b;
+
+	public static class IMAGE_DOS_HEADER {
+		int e_magic; // WORD
+		int e_cblp; // WORD
+		int e_cp; // WORD
+		int e_crlc; // WORD
+		int e_cparhdr; // WORD
+		int e_minalloc; // WORD
+		int e_maxalloc; // WORD
+		int e_ss; // WORD
+		int e_sp; // WORD
+		int e_csum; // WORD
+		int e_ip; // WORD
+		int e_cs; // WORD
+		int e_lfarlc; // WORD
+		int e_ovno; // WORD
+		int[] e_res = new int[4]; // WORD[4]
+		int e_oemid; // WORD
+		int e_oeminfo; // WORD
+		int[] e_res2 = new int[10]; // WORD[10]
+		int e_lfanew; // LONG
+	}
+
+	public static class IMAGE_FILE_HEADER {
+		int Machine; // WORD
+		int NumberOfSections; // WORD
+		int TimeDateStamp; // DWORD
+		int PointerToSymbolTable; // DWORD
+		int NumberOfSymbols; // DWORD
+		int SizeOfOptionalHeader; // WORD
+		int Characteristics; // WORD
+	}
+
+	public static class IMAGE_DATA_DIRECTORY {
+		int VirtualAddress; // DWORD
+		int Size; // DWORD
+	}
+
+	public static class IMAGE_OPTIONAL_HEADER {
+		// Allocate enough storage for the 64 bit version of the header.
+		int Magic; // WORD
+		int MajorLinkerVersion; // BYTE
+		int MinorLinkerVersion; // BYTE
+		int SizeOfCode; // DWORD
+		int SizeOfInitializedData; // DWORD
+		int SizeOfUninitializedData; // DWORD
+		int AddressOfEntryPoint; // DWORD
+		int BaseOfCode; // DWORD
+		int BaseOfData; // DWORD
+		long ImageBase; // ULONGLONG
+		int SectionAlignment; // DWORD
+		int FileAlignment; // DWORD
+		int MajorOperatingSystemVersion; // WORD
+		int MinorOperatingSystemVersion; // WORD
+		int MajorImageVersion; // WORD
+		int MinorImageVersion; // WORD
+		int MajorSubsystemVersion; // WORD
+		int MinorSubsystemVersion; // WORD
+		int Win32VersionValue; // DWORD
+		int SizeOfImage; // DWORD
+		int SizeOfHeaders; // DWORD
+		int CheckSum; // DWORD
+		int Subsystem; // WORD
+		int DllCharacteristics; // WORD
+		long SizeOfStackReserve; // ULONGLONG
+		long SizeOfStackCommit; // ULONGLONG
+		long SizeOfHeapReserve; // ULONGLONG
+		long SizeOfHeapCommit; // ULONGLONG
+		int LoaderFlags; // DWORD
+		int NumberOfRvaAndSizes; // DWORD
+		IMAGE_DATA_DIRECTORY[] DataDirectory = new IMAGE_DATA_DIRECTORY[16];
+	}
+
+	public static class IMAGE_NT_HEADERS {
+		int Signature; // DWORD
+		IMAGE_FILE_HEADER FileHeader = new IMAGE_FILE_HEADER();
+		IMAGE_OPTIONAL_HEADER OptionalHeader = new IMAGE_OPTIONAL_HEADER();
+		final static int FIELD_OFFSET_OptionalHeader = 24;
+	}
+
+	public static class IMAGE_SECTION_HEADER {
+		int[] Name = new int[8]; // BYTE[8]
+		int Misc_VirtualSize; // DWORD (union Misc { DWORD PhysicalAddress; DWORD VirtualSize }
+		int VirtualAddress; // DWORD
+		int SizeOfRawData; // DWORD
+		int PointerToRawData; // DWORD
+		int PointerToRelocations; // DWORD
+		int PointerToLinenumbers; // DWORD
+		int NumberOfRelocations; // WORD
+		int NumberOfLinenumbers; // WORD
+		int Characteristics; // DWORD
+	}
+
+	public static class IMAGE_RESOURCE_DIRECTORY {
+		int Characteristics; // DWORD
+		int TimeDateStamp; // DWORD
+		int MajorVersion; // WORD
+		int MinorVersion; // WORD
+		int NumberOfNamedEntries; // WORD - used
+		int NumberOfIdEntries; // WORD - used
+		final static int SIZEOF = 16;
+	}
+
+	public static class IMAGE_RESOURCE_DIRECTORY_ENTRY {
+		// union
+		int NameOffset; // DWORD 31 bits
+		boolean NameIsString; // DWORD 1 bit
+		int Name; // DWORD
+		int Id; // WORD
+		// union
+		int OffsetToData; // DWORD
+		int OffsetToDirectory; // DWORD 31 bits
+		boolean DataIsDirectory; // DWORD 1 bit
+	}
+
+	public static class IMAGE_RESOURCE_DATA_ENTRY {
+		int OffsetToData; // DWORD
+		int Size; // DWORD
+		int CodePage; // DWORD
+		int Reserved; // DWORD
+	}
+
+	public static class NEWHEADER {
+		int Reserved; // WORD
+		int ResType; // WORD
+		int ResCount; // WORD
+	}
+
+	public static class ICONRESDIR {
+		int Width; // BYTE
+		int Height; // BYTE
+		int ColorCount; // BYTE
+		int reserved; // BYTE
+	}
+
+	public static class CURSORDIR {
+		int Width; // WORD
+		int Height; // WORD
+	}
+
+	public static class RESDIR {
+		// union
+		ICONRESDIR Icon = new ICONRESDIR();
+		CURSORDIR Cursor = new CURSORDIR();
+		int Planes; // WORD
+		int BitCount; // WORD
+		int BytesInRes; // DWORD
+		int IconCursorId; // WORD
+	}
+
+	public static class BITMAPINFOHEADER {
+		int biSize; // DWORD
+		int biWidth; // LONG
+		int biHeight; // LONG
+		int biPlanes; // WORD
+		int biBitCount; // WORD
+		int biCompression; // DWORD
+		int biSizeImage; // DWORD
+		int biXPelsPerMeter; // LONG
+		int biYPelsPerMeter; // LONG
+		int biClrUsed; // DWORD
+		int biClrImportant; // DWORD
+	}
+
+	static class RGBQUAD {
+		int rgBlue; // BYTE
+		int rgbGreen; // BYTE
+		int rgbRed; // BYTE
+		int rgbReserved; // BYTE
+	}
+
+	static class BITMAPINFO {
+		BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();
+		RGBQUAD[] bmiColors = null;
+	}
+
+	static void read(RandomAccessFile raf, BITMAPINFOHEADER bih) throws IOException {
+		bih.biSize = read4(raf);
+		bih.biWidth = read4(raf);
+		bih.biHeight = read4(raf);
+		bih.biPlanes = readU2(raf);
+		bih.biBitCount = readU2(raf);
+		bih.biCompression = read4(raf);
+		bih.biSizeImage = read4(raf);
+		bih.biXPelsPerMeter = read4(raf);
+		bih.biYPelsPerMeter = read4(raf);
+		bih.biClrUsed = read4(raf);
+		bih.biClrImportant = read4(raf);
+	}
+
+	static void read(RandomAccessFile raf, BITMAPINFO bi) throws IOException {
+		read(raf, bi.bmiHeader);
+	}
+
+	/* Little Endian helpers */
+	static int readU2(RandomAccessFile raf) throws IOException {
+		int b0 = raf.readByte() & 0xFF;
+		int b1 = raf.readByte() & 0xFF;
+		return (b1 << 8 | b0);
+	}
+
+	static int read4(RandomAccessFile raf) throws IOException {
+		int b0 = raf.readByte() & 0xFF;
+		int b1 = raf.readByte() & 0xFF;
+		int b2 = raf.readByte() & 0xFF;
+		int b3 = raf.readByte() & 0xFF;
+		return b3 << 24 | b2 << 16 | b1 << 8 | b0;
+	}
+
+	static long read8(RandomAccessFile raf) throws IOException {
+		int b0 = raf.readByte() & 0xFF;
+		int b1 = raf.readByte() & 0xFF;
+		int b2 = raf.readByte() & 0xFF;
+		int b3 = raf.readByte() & 0xFF;
+		int b4 = raf.readByte() & 0xFF;
+		int b5 = raf.readByte() & 0xFF;
+		int b6 = raf.readByte() & 0xFF;
+		int b7 = raf.readByte() & 0xFF;
+		return b7 << 56 | b6 << 48 | b5 << 40 | b4 << 32 | b3 << 24 | b2 << 16 | b1 << 8 | b0;
+	}
+
+	static void write4(RandomAccessFile raf, int value) throws IOException {
+		raf.write(value & 0xFF);
+		raf.write((value >> 8) & 0xFF);
+		raf.write((value >> 16) & 0xFF);
+		raf.write((value >> 24) & 0xFF);
+	}
+
+	static void writeU2(RandomAccessFile raf, int value) throws IOException {
+		raf.write(value & 0xFF);
+		raf.write((value >> 8) & 0xFF);
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_DOS_HEADER idh) throws IOException {
+		idh.e_magic = readU2(raf);
+		idh.e_cblp = readU2(raf);
+		idh.e_cp = readU2(raf);
+		idh.e_crlc = readU2(raf);
+		idh.e_cparhdr = readU2(raf);
+		idh.e_minalloc = readU2(raf);
+		idh.e_maxalloc = readU2(raf);
+		idh.e_ss = readU2(raf);
+		idh.e_sp = readU2(raf);
+		idh.e_csum = readU2(raf);
+		idh.e_ip = readU2(raf);
+		idh.e_cs = readU2(raf);
+		idh.e_lfarlc = readU2(raf);
+		idh.e_ovno = readU2(raf);
+		for (int i = 0; i < idh.e_res.length; i++)
+			idh.e_res[i] = readU2(raf);
+		idh.e_oemid = readU2(raf);
+		idh.e_oeminfo = readU2(raf);
+		for (int i = 0; i < idh.e_res2.length; i++)
+			idh.e_res2[i] = readU2(raf);
+		idh.e_lfanew = read4(raf);
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_FILE_HEADER ifh) throws IOException {
+		ifh.Machine = readU2(raf);
+		ifh.NumberOfSections = readU2(raf);
+		ifh.TimeDateStamp = read4(raf);
+		ifh.PointerToSymbolTable = read4(raf);
+		ifh.NumberOfSymbols = read4(raf);
+		ifh.SizeOfOptionalHeader = readU2(raf);
+		ifh.Characteristics = readU2(raf);
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_DATA_DIRECTORY idd) throws IOException {
+		idd.VirtualAddress = read4(raf);
+		idd.Size = read4(raf);
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_OPTIONAL_HEADER ioh) throws IOException {
+		ioh.Magic = readU2(raf);
+
+		// Assume file is 32bit executable unless x64 magic is present
+		boolean is32 = !(ioh.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC);
+
+		ioh.MajorLinkerVersion = raf.read();
+		ioh.MinorLinkerVersion = raf.read();
+		ioh.SizeOfCode = read4(raf);
+		ioh.SizeOfInitializedData = read4(raf);
+		ioh.SizeOfUninitializedData = read4(raf);
+		ioh.AddressOfEntryPoint = read4(raf);
+		ioh.BaseOfCode = read4(raf);
+
+		if (is32) {
+			ioh.BaseOfData = read4(raf);
+			ioh.ImageBase = read4(raf);
+		} else {
+			// BaseOfData deleted in the 64 bit version PE32+
+			ioh.ImageBase = read8(raf);
+		}
+
+		ioh.SectionAlignment = read4(raf);
+		ioh.FileAlignment = read4(raf);
+		ioh.MajorOperatingSystemVersion = readU2(raf);
+		ioh.MinorOperatingSystemVersion = readU2(raf);
+		ioh.MajorImageVersion = readU2(raf);
+		ioh.MinorImageVersion = readU2(raf);
+		ioh.MajorSubsystemVersion = readU2(raf);
+		ioh.MinorSubsystemVersion = readU2(raf);
+		ioh.Win32VersionValue = read4(raf);
+		ioh.SizeOfImage = read4(raf);
+		ioh.SizeOfHeaders = read4(raf);
+		ioh.CheckSum = read4(raf);
+		ioh.Subsystem = readU2(raf);
+		ioh.DllCharacteristics = readU2(raf);
+
+		if (is32) {
+			ioh.SizeOfStackReserve = read4(raf);
+			ioh.SizeOfStackCommit = read4(raf);
+			ioh.SizeOfHeapReserve = read4(raf);
+			ioh.SizeOfHeapCommit = read4(raf);
+		} else {
+			ioh.SizeOfStackReserve = read8(raf);
+			ioh.SizeOfStackCommit = read8(raf);
+			ioh.SizeOfHeapReserve = read8(raf);
+			ioh.SizeOfHeapCommit = read8(raf);
+		}
+
+		ioh.LoaderFlags = read4(raf);
+		ioh.NumberOfRvaAndSizes = read4(raf);
+		for (int i = 0; i < ioh.DataDirectory.length; i++) {
+			ioh.DataDirectory[i] = new IMAGE_DATA_DIRECTORY();
+			read(raf, ioh.DataDirectory[i]);
+		}
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_NT_HEADERS inh) throws IOException {
+		inh.Signature = read4(raf);
+		read(raf, inh.FileHeader);
+		read(raf, inh.OptionalHeader);
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_SECTION_HEADER ish) throws IOException {
+		for (int i = 0; i < ish.Name.length; i++)
+			ish.Name[i] = raf.read();
+		ish.Misc_VirtualSize = read4(raf);
+		ish.VirtualAddress = read4(raf);
+		ish.SizeOfRawData = read4(raf);
+		ish.PointerToRawData = read4(raf);
+		ish.PointerToRelocations = read4(raf);
+		ish.PointerToLinenumbers = read4(raf);
+		ish.NumberOfRelocations = readU2(raf);
+		ish.NumberOfLinenumbers = readU2(raf);
+		ish.Characteristics = read4(raf);
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_RESOURCE_DIRECTORY ird) throws IOException {
+		ird.Characteristics = read4(raf);
+		ird.TimeDateStamp = read4(raf);
+		ird.MajorVersion = readU2(raf);
+		ird.MinorVersion = readU2(raf);
+		ird.NumberOfNamedEntries = readU2(raf);
+		ird.NumberOfIdEntries = readU2(raf);
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_RESOURCE_DIRECTORY_ENTRY irde) throws IOException {
+		irde.Name = read4(raf);
+		irde.OffsetToData = read4(raf);
+		// construct other union members
+		irde.NameOffset = irde.Name & ~(1 << 31);
+		irde.NameIsString = (irde.Name & (1 << 31)) != 0;
+		irde.Id = irde.Name & 0xFFFF;
+		irde.OffsetToDirectory = irde.OffsetToData & ~(1 << 31);
+		irde.DataIsDirectory = (irde.OffsetToData & (1 << 31)) != 0;
+	}
+
+	static void read(RandomAccessFile raf, IMAGE_RESOURCE_DATA_ENTRY irde) throws IOException {
+		irde.OffsetToData = read4(raf);
+		irde.Size = read4(raf);
+		irde.CodePage = read4(raf);
+		irde.Reserved = read4(raf);
+	}
+
+	static void read(RandomAccessFile raf, NEWHEADER nh) throws IOException {
+		nh.Reserved = readU2(raf);
+		nh.ResType = readU2(raf);
+		nh.ResCount = readU2(raf);
+	}
+
+	static void read(RandomAccessFile raf, ICONRESDIR i) throws IOException {
+		i.Width = raf.read();
+		i.Height = raf.read();
+		i.ColorCount = raf.read();
+		i.reserved = raf.read();
+	}
+
+	static void read(RandomAccessFile raf, CURSORDIR c) throws IOException {
+		c.Width = readU2(raf);
+		c.Height = readU2(raf);
+	}
+
+	static void read(RandomAccessFile raf, RESDIR rs) throws IOException {
+		long start = raf.getFilePointer();
+		read(raf, rs.Icon);
+		raf.seek(start);
+		read(raf, rs.Cursor);
+		rs.Planes = readU2(raf);
+		rs.BitCount = readU2(raf);
+		rs.BytesInRes = read4(raf);
+		rs.IconCursorId = readU2(raf);
+	}
+
+	/* ImageData and Image Decoder inlining to avoid dependency on SWT 
+	 * The following section can be entirely removed if SWT can be used.
+	 */
+
+	static class RGB {
+
+		/**
+		 * the red component of the RGB
+		 */
+		public int red;
+
+		/**
+		 * the green component of the RGB
+		 */
+		public int green;
+
+		/**
+		 * the blue component of the RGB
+		 */
+		public int blue;
+
+		static final long serialVersionUID = 3258415023461249074L;
+
+		/**
+		 * Constructs an instance of this class with the given
+		 * red, green and blue values.
+		 *
+		 * @param red the red component of the new instance
+		 * @param green the green component of the new instance
+		 * @param blue the blue component of the new instance
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue argument is not between 0 and 255</li>
+		 * </ul>
+		 */
+		public RGB(int red, int green, int blue) {
+			if ((red > 255) || (red < 0) || (green > 255) || (green < 0) || (blue > 255) || (blue < 0))
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			this.red = red;
+			this.green = green;
+			this.blue = blue;
+		}
+
+		/**
+		 * Compares the argument to the receiver, and returns true
+		 * if they represent the <em>same</em> object using a class
+		 * specific comparison.
+		 *
+		 * @param object the object to compare with this object
+		 * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+		 *
+		 * @see #hashCode()
+		 */
+		@Override
+		public boolean equals(Object object) {
+			if (object == this)
+				return true;
+			if (!(object instanceof RGB))
+				return false;
+			RGB rgb = (RGB) object;
+			return (rgb.red == this.red) && (rgb.green == this.green) && (rgb.blue == this.blue);
+		}
+
+		/**
+		 * Returns an integer hash code for the receiver. Any two 
+		 * objects which return <code>true</code> when passed to 
+		 * <code>equals</code> must return the same value for this
+		 * method.
+		 *
+		 * @return the receiver's hash
+		 *
+		 * @see #equals(Object)
+		 */
+		@Override
+		public int hashCode() {
+			return (blue << 16) | (green << 8) | red;
+		}
+
+		/**
+		 * Returns a string containing a concise, human-readable
+		 * description of the receiver.
+		 *
+		 * @return a string representation of the <code>RGB</code>
+		 */
+		@Override
+		public String toString() {
+			return "RGB {" + red + ", " + green + ", " + blue + "}"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
+
+			//$NON-NLS-4$
+		}
+
+	}
+
+	static class PaletteData {
+
+		/**
+		 * true if the receiver is a direct palette, 
+		 * and false otherwise
+		 */
+		public boolean isDirect;
+
+		/**
+		 * the RGB values for an indexed palette, where the
+		 * indices of the array correspond to pixel values
+		 */
+		public RGB[] colors;
+
+		/**
+		 * the red mask for a direct palette
+		 */
+		public int redMask;
+
+		/**
+		 * the green mask for a direct palette
+		 */
+		public int greenMask;
+
+		/**
+		 * the blue mask for a direct palette
+		 */
+		public int blueMask;
+
+		/**
+		 * the red shift for a direct palette
+		 */
+		public int redShift;
+
+		/**
+		 * the green shift for a direct palette
+		 */
+		public int greenShift;
+
+		/**
+		 * the blue shift for a direct palette
+		 */
+		public int blueShift;
+
+		/**
+		 * Constructs a new indexed palette given an array of RGB values.
+		 *
+		 * @param colors the array of <code>RGB</code>s for the palette
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+		 * </ul>
+		 */
+		public PaletteData(RGB[] colors) {
+			if (colors == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			this.colors = colors;
+			this.isDirect = false;
+		}
+
+		/**
+		 * Constructs a new direct palette given the red, green and blue masks.
+		 *
+		 * @param redMask the red mask
+		 * @param greenMask the green mask
+		 * @param blueMask the blue mask
+		 */
+		public PaletteData(int redMask, int greenMask, int blueMask) {
+			this.redMask = redMask;
+			this.greenMask = greenMask;
+			this.blueMask = blueMask;
+			this.isDirect = true;
+			this.redShift = shiftForMask(redMask);
+			this.greenShift = shiftForMask(greenMask);
+			this.blueShift = shiftForMask(blueMask);
+		}
+
+		/**
+		 * Returns the pixel value corresponding to the given <code>RBG</code>.
+		 *
+		 * @param rgb the RGB to get the pixel value for
+		 * @return the pixel value for the given RGB
+		 * 
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if the RGB is not found in the palette</li>
+		 * </ul>
+		 */
+		public int getPixel(RGB rgb) {
+			if (rgb == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			if (isDirect) {
+				int pixel = 0;
+				pixel |= (redShift < 0 ? rgb.red << -redShift : rgb.red >>> redShift) & redMask;
+				pixel |= (greenShift < 0 ? rgb.green << -greenShift : rgb.green >>> greenShift) & greenMask;
+				pixel |= (blueShift < 0 ? rgb.blue << -blueShift : rgb.blue >>> blueShift) & blueMask;
+				return pixel;
+			}
+
+			for (int i = 0; i < colors.length; i++) {
+				if (colors[i].equals(rgb))
+					return i;
+			}
+			/* The RGB did not exist in the palette */
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			return 0;
+		}
+
+		/**
+		 * Returns an <code>RGB</code> corresponding to the given pixel value.
+		 *
+		 * @param pixel the pixel to get the RGB value for
+		 * @return the RGB value for the given pixel
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if the pixel does not exist in the palette</li>
+		 * </ul>
+		 */
+		public RGB getRGB(int pixel) {
+			if (isDirect) {
+				int r = pixel & redMask;
+				r = (redShift < 0) ? r >>> -redShift : r << redShift;
+				int g = pixel & greenMask;
+				g = (greenShift < 0) ? g >>> -greenShift : g << greenShift;
+				int b = pixel & blueMask;
+				b = (blueShift < 0) ? b >>> -blueShift : b << blueShift;
+				return new RGB(r, g, b);
+			}
+			if (pixel < 0 || pixel >= colors.length) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			return colors[pixel];
+		}
+
+		/**
+		 * Returns all the RGB values in the receiver if it is an
+		 * indexed palette, or null if it is a direct palette.
+		 *
+		 * @return the <code>RGB</code>s for the receiver or null
+		 */
+		public RGB[] getRGBs() {
+			return colors;
+		}
+
+		/**
+		 * Computes the shift value for a given mask.
+		 *
+		 * @param mask the mask to compute the shift for
+		 * @return the shift amount
+		 *
+		 * @see IconExe.PaletteData
+		 */
+		int shiftForMask(int mask) {
+			for (int i = 31; i >= 0; i--) {
+				if (((mask >> i) & 0x1) != 0)
+					return 7 - i;
+			}
+			return 32;
+		}
+
+	}
+
+	static class ImageLoader {
+
+		/**
+		 * the array of ImageData objects in this ImageLoader.
+		 * This array is read in when the load method is called,
+		 * and it is written out when the save method is called
+		 */
+		public ImageData[] data;
+
+		/**
+		 * the width of the logical screen on which the images
+		 * reside, in pixels (this corresponds to the GIF89a
+		 * Logical Screen Width value)
+		 */
+		public int logicalScreenWidth;
+
+		/**
+		 * the height of the logical screen on which the images
+		 * reside, in pixels (this corresponds to the GIF89a
+		 * Logical Screen Height value)
+		 */
+		public int logicalScreenHeight;
+
+		/**
+		 * the background pixel for the logical screen (this 
+		 * corresponds to the GIF89a Background Color Index value).
+		 * The default is -1 which means 'unspecified background'
+		 * 
+		 */
+		public int backgroundPixel;
+
+		/**
+		 * the number of times to repeat the display of a sequence
+		 * of animated images (this corresponds to the commonly-used
+		 * GIF application extension for "NETSCAPE 2.0 01")
+		 */
+		public int repeatCount;
+
+		/*
+		 * the set of ImageLoader event listeners, created on demand
+		 */
+		@SuppressWarnings("rawtypes")
+		Vector imageLoaderListeners;
+
+		/**
+		 * Construct a new empty ImageLoader.
+		 */
+		public ImageLoader() {
+			reset();
+		}
+
+		/**
+		 * Resets the fields of the ImageLoader, except for the
+		 * <code>imageLoaderListeners</code> field.
+		 */
+		void reset() {
+			data = null;
+			logicalScreenWidth = 0;
+			logicalScreenHeight = 0;
+			backgroundPixel = -1;
+			repeatCount = 1;
+		}
+
+		/**
+		 * Loads an array of <code>ImageData</code> objects from the
+		 * specified input stream. Throws an error if either an error
+		 * occurs while loading the images, or if the images are not
+		 * of a supported type. Returns the loaded image data array.
+		 *
+		 * @param stream the input stream to load the images from
+		 * @return an array of <code>ImageData</code> objects loaded from the specified input stream
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if the stream is null</li>
+		 * </ul>
+		 * @exception RuntimeException <ul>
+		 *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
+		 *    <li>ERROR_IO - if an input/output error occurs while reading data</li>
+		 *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
+		 * </ul>
+		 */
+		public ImageData[] load(InputStream stream) {
+			if (stream == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			reset();
+			data = FileFormat.load(stream, this);
+			return data;
+		}
+
+		/**
+		 * Loads an array of <code>ImageData</code> objects from the
+		 * file with the specified name. Throws an error if either
+		 * an error occurs while loading the images, or if the images are
+		 * not of a supported type. Returns the loaded image data array.
+		 *
+		 * @param filename the name of the file to load the images from
+		 * @return an array of <code>ImageData</code> objects loaded from the specified file
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
+		 * </ul>
+		 * @exception RuntimeException <ul>
+		 *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
+		 *    <li>ERROR_IO - if an IO error occurs while reading data</li>
+		 *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
+		 * </ul>
+		 */
+		public ImageData[] load(String filename) {
+			if (filename == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			InputStream stream = null;
+			try {
+				stream = new BufferedInputStream(new FileInputStream(filename));
+				return load(stream);
+			} catch (IOException e) {
+				SWT.error(SWT.ERROR_IO, e);
+			} finally {
+				try {
+					if (stream != null)
+						stream.close();
+				} catch (IOException e) {
+					// Ignore error
+				}
+			}
+			return null;
+		}
+	}
+
+	static class ImageData {
+
+		/**
+		 * The width of the image, in pixels.
+		 */
+		public int width;
+
+		/**
+		 * The height of the image, in pixels.
+		 */
+		public int height;
+
+		/**
+		 * The color depth of the image, in bits per pixel.
+		 * <p>
+		 * Note that a depth of 8 or less does not necessarily
+		 * mean that the image is palette indexed, or
+		 * conversely that a depth greater than 8 means that
+		 * the image is direct color.  Check the associated
+		 * PaletteData's isDirect field for such determinations.
+		 */
+		public int depth;
+
+		/**
+		 * The scanline padding.
+		 * <p>
+		 * If one scanline of the image is not a multiple of
+		 * this number, it will be padded with zeros until it is.
+		 * </p>
+		 */
+		public int scanlinePad;
+
+		/**
+		 * The number of bytes per scanline.
+		 * <p>
+		 * This is a multiple of the scanline padding.
+		 * </p>
+		 */
+		public int bytesPerLine;
+
+		/**
+		 * The pixel data of the image.
+		 * <p>
+		 * Note that for 16 bit depth images the pixel data is stored
+		 * in least significant byte order; however, for 24bit and
+		 * 32bit depth images the pixel data is stored in most
+		 * significant byte order.
+		 * </p>
+		 */
+		public byte[] data;
+
+		/**
+		 * The color table for the image.
+		 */
+		public PaletteData palette;
+
+		/**
+		 * The transparent pixel.
+		 * <p>
+		 * Pixels with this value are transparent.
+		 * </p><p>
+		 * The default is -1 which means 'no transparent pixel'.
+		 * </p>
+		 */
+		public int transparentPixel;
+
+		/**
+		 * An icon-specific field containing the data from the icon mask.
+		 * <p>
+		 * This is a 1 bit bitmap stored with the most significant
+		 * bit first.  The number of bytes per scanline is
+		 * '((width + 7) / 8 + (maskPad - 1)) / maskPad * maskPad'.
+		 * </p><p>
+		 * The default is null which means 'no transparency mask'.
+		 * </p>
+		 */
+		public byte[] maskData;
+
+		/**
+		 * An icon-specific field containing the scanline pad of the mask.
+		 * <p>
+		 * If one scanline of the transparency mask is not a
+		 * multiple of this number, it will be padded with zeros until
+		 * it is.
+		 * </p>
+		 */
+		public int maskPad;
+
+		/**
+		 * The alpha data of the image.
+		 * <p>
+		 * Every pixel can have an <em>alpha blending</em> value that
+		 * varies from 0, meaning fully transparent, to 255 meaning
+		 * fully opaque.  The number of bytes per scanline is
+		 * 'width'.
+		 * </p>
+		 */
+		public byte[] alphaData;
+
+		/**
+		 * The global alpha value to be used for every pixel.
+		 * <p>
+		 * If this value is set, the <code>alphaData</code> field
+		 * is ignored and when the image is rendered each pixel
+		 * will be blended with the background an amount
+		 * proportional to this value.
+		 * </p><p>
+		 * The default is -1 which means 'no global alpha value'
+		 * </p>
+		 */
+		public int alpha;
+
+		/**
+		 * The type of file from which the image was read.
+		 * 
+		 * It is expressed as one of the following values:
+		 * <dl>
+		 * <dt><code>IMAGE_BMP</code></dt>
+		 * <dd>Windows BMP file format, no compression</dd>
+		 * <dt><code>IMAGE_BMP_RLE</code></dt>
+		 * <dd>Windows BMP file format, RLE compression if appropriate</dd>
+		 * <dt><code>IMAGE_GIF</code></dt>
+		 * <dd>GIF file format</dd>
+		 * <dt><code>IMAGE_ICO</code></dt>
+		 * <dd>Windows ICO file format</dd>
+		 * <dt><code>IMAGE_JPEG</code></dt>
+		 * <dd>JPEG file format</dd>
+		 * <dt><code>IMAGE_PNG</code></dt>
+		 * <dd>PNG file format</dd>
+		 * </dl>
+		 */
+		public int type;
+
+		/**
+		 * The x coordinate of the top left corner of the image
+		 * within the logical screen (this field corresponds to
+		 * the GIF89a Image Left Position value).
+		 */
+		public int x;
+
+		/**
+		 * The y coordinate of the top left corner of the image
+		 * within the logical screen (this field corresponds to
+		 * the GIF89a Image Top Position value).
+		 */
+		public int y;
+
+		/**
+		 * A description of how to dispose of the current image
+		 * before displaying the next.
+		 * 
+		 * It is expressed as one of the following values:
+		 * <dl>
+		 * <dt><code>DM_UNSPECIFIED</code></dt>
+		 * <dd>disposal method not specified</dd>
+		 * <dt><code>DM_FILL_NONE</code></dt>
+		 * <dd>do nothing - leave the image in place</dd>
+		 * <dt><code>DM_FILL_BACKGROUND</code></dt>
+		 * <dd>fill with the background color</dd>
+		 * <dt><code>DM_FILL_PREVIOUS</code></dt>
+		 * <dd>restore the previous picture</dd>
+		 * </dl>
+		 * (this field corresponds to the GIF89a Disposal Method value)
+		 */
+		public int disposalMethod;
+
+		/**
+		 * The time to delay before displaying the next image
+		 * in an animation (this field corresponds to the GIF89a
+		 * Delay Time value).
+		 */
+		public int delayTime;
+
+		/**
+		 * Arbitrary channel width data to 8-bit conversion table.
+		 */
+		static final byte[][] ANY_TO_EIGHT = new byte[9][];
+		static {
+			for (int b = 0; b < 9; ++b) {
+				byte[] data = ANY_TO_EIGHT[b] = new byte[1 << b];
+				if (b == 0)
+					continue;
+				int inc = 0;
+				for (int bit = 0x10000; (bit >>= b) != 0;)
+					inc |= bit;
+				for (int v = 0, p = 0; v < 0x10000; v += inc)
+					data[p++] = (byte) (v >> 8);
+			}
+		}
+		static final byte[] ONE_TO_ONE_MAPPING = ANY_TO_EIGHT[8];
+
+		/**
+		 * Scaled 8x8 Bayer dither matrix.
+		 */
+		static final int[][] DITHER_MATRIX = { {0xfc0000, 0x7c0000, 0xdc0000, 0x5c0000, 0xf40000, 0x740000, 0xd40000, 0x540000}, {0x3c0000, 0xbc0000, 0x1c0000, 0x9c0000, 0x340000, 0xb40000, 0x140000, 0x940000}, {0xcc0000, 0x4c0000, 0xec0000, 0x6c0000, 0xc40000, 0x440000, 0xe40000, 0x640000}, {0x0c0000, 0x8c0000, 0x2c0000, 0xac0000, 0x040000, 0x840000, 0x240000, 0xa40000}, {0xf00000, 0x700000, 0xd00000, 0x500000, 0xf80000, 0x780000, 0xd80000, 0x580000}, {0x300000, 0xb00000, 0x100000, 0x900000, 0x380000, 0xb80000, 0x180000, 0x980000}, {0xc00000, 0x400000, 0xe00000, 0x600000, 0xc80000, 0x480000, 0xe80000, 0x680000}, {0x000000, 0x800000, 0x200000, 0xa00000, 0x080000, 0x880000, 0x280000, 0xa80000}};
+
+		/**
+		 * Constructs a new, empty ImageData with the given width, height,
+		 * depth and palette. The data will be initialized to an (all zero)
+		 * array of the appropriate size.
+		 *
+		 * @param width the width of the image
+		 * @param height the height of the image
+		 * @param depth the depth of the image
+		 * @param palette the palette of the image (must not be null)
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_INVALID_ARGUMENT - if the width or height is negative, or if the depth is not
+		 *        	one of 1, 2, 4, 8, 16, 24 or 32</li>
+		 *    <li>ERROR_NULL_ARGUMENT - if the palette is null</li>
+		 * </ul>
+		 */
+		public ImageData(int width, int height, int depth, PaletteData palette) {
+			this(width, height, depth, palette, 4, null, 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED, 0, 0, 0, 0);
+		}
+
+		/**
+		 * Constructs a new, empty ImageData with the given width, height,
+		 * depth, palette, scanlinePad and data.
+		 *
+		 * @param width the width of the image
+		 * @param height the height of the image
+		 * @param depth the depth of the image
+		 * @param palette the palette of the image
+		 * @param scanlinePad the padding of each line, in bytes
+		 * @param data the data of the image
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_INVALID_ARGUMENT - if the width or height is negative, or if the depth is not
+		 *        	one of 1, 2, 4, 8, 16, 24 or 32</li>
+		 *    <li>ERROR_NULL_ARGUMENT - if the palette or data is null</li>
+		 *    <li>ERROR_CANNOT_BE_ZERO - if the scanlinePad is zero</li>
+		 * </ul>
+		 */
+		public ImageData(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data) {
+			this(width, height, depth, palette, scanlinePad, checkData(data), 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED, 0, 0, 0, 0);
+		}
+
+		/**
+		 * Constructs an <code>ImageData</code> loaded from a file with the
+		 * specified name. Throws an error if an error occurs loading the
+		 * image, or if the image has an unsupported type.
+		 * <p>
+		 * This constructor is provided for convenience when loading a single
+		 * image only. If the file contains multiple images, only the first
+		 * one will be loaded. To load multiple images, use 
+		 * <code>ImageLoader.load()</code>.
+		 * </p>
+		 *
+		 * @param filename the name of the file to load the image from (must not be null)
+		 *
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
+		 * </ul>
+		 * @exception RuntimeException <ul>
+		 *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
+		 *    <li>ERROR_IO if an IO error occurs while reading data</li>
+		 *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
+		 * </ul>
+		 */
+		public ImageData(String filename) {
+			ImageData[] data = new ImageLoader().load(filename);
+			if (data.length < 1)
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			ImageData i = data[0];
+			setAllFields(i.width, i.height, i.depth, i.scanlinePad, i.bytesPerLine, i.data, i.palette, i.transparentPixel, i.maskData, i.maskPad, i.alphaData, i.alpha, i.type, i.x, i.y, i.disposalMethod, i.delayTime);
+		}
+
+		/**
+		 * Prevents uninitialized instances from being created outside the package.
+		 */
+		ImageData() {
+			//empty constructor
+		}
+
+		/**
+		 * Constructs an image data by giving values for all non-computable fields.
+		 * <p>
+		 * This method is for internal use, and is not described further.
+		 * </p>
+		 */
+		ImageData(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data, int maskPad, byte[] maskData, byte[] alphaData, int alpha, int transparentPixel, int type, int x, int y, int disposalMethod, int delayTime) {
+
+			if (palette == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			if (!(depth == 1 || depth == 2 || depth == 4 || depth == 8 || depth == 16 || depth == 24 || depth == 32)) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (width <= 0 || height <= 0) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (scanlinePad == 0)
+				SWT.error(SWT.ERROR_CANNOT_BE_ZERO);
+
+			int bytesPerLine = (((width * depth + 7) / 8) + (scanlinePad - 1)) / scanlinePad * scanlinePad;
+			setAllFields(width, height, depth, scanlinePad, bytesPerLine, data != null ? data : new byte[bytesPerLine * height], palette, transparentPixel, maskData, maskPad, alphaData, alpha, type, x, y, disposalMethod, delayTime);
+		}
+
+		/**
+		 * Initializes all fields in the receiver. This method must be called
+		 * by all public constructors to ensure that all fields are initialized
+		 * for a new ImageData object. If a new field is added to the class,
+		 * then it must be added to this method.
+		 * <p>
+		 * This method is for internal use, and is not described further.
+		 * </p>
+		 */
+		void setAllFields(int width, int height, int depth, int scanlinePad, int bytesPerLine, byte[] data, PaletteData palette, int transparentPixel, byte[] maskData, int maskPad, byte[] alphaData, int alpha, int type, int x, int y, int disposalMethod, int delayTime) {
+
+			this.width = width;
+			this.height = height;
+			this.depth = depth;
+			this.scanlinePad = scanlinePad;
+			this.bytesPerLine = bytesPerLine;
+			this.data = data;
+			this.palette = palette;
+			this.transparentPixel = transparentPixel;
+			this.maskData = maskData;
+			this.maskPad = maskPad;
+			this.alphaData = alphaData;
+			this.alpha = alpha;
+			this.type = type;
+			this.x = x;
+			this.y = y;
+			this.disposalMethod = disposalMethod;
+			this.delayTime = delayTime;
+		}
+
+		/**	 
+		 * Invokes internal SWT functionality to create a new instance of
+		 * this class.
+		 * <p>
+		 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+		 * API for <code>ImageData</code>. It is marked public only so that it
+		 * can be shared within the packages provided by SWT. It is subject
+		 * to change without notice, and should never be called from
+		 * application code.
+		 * </p>
+		 * <p>
+		 * This method is for internal use, and is not described further.
+		 * </p>
+		 */
+		public static ImageData internal_new(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data, int maskPad, byte[] maskData, byte[] alphaData, int alpha, int transparentPixel, int type, int x, int y, int disposalMethod, int delayTime) {
+			return new ImageData(width, height, depth, palette, scanlinePad, data, maskPad, maskData, alphaData, alpha, transparentPixel, type, x, y, disposalMethod, delayTime);
+		}
+
+		ImageData colorMaskImage(int pixel) {
+			ImageData mask = new ImageData(width, height, 1, bwPalette(), 2, null, 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED, 0, 0, 0, 0);
+			int[] row = new int[width];
+			for (int y = 0; y < height; y++) {
+				getPixels(0, y, width, row, 0);
+				for (int i = 0; i < width; i++) {
+					if (pixel != -1 && row[i] == pixel) {
+						row[i] = 0;
+					} else {
+						row[i] = 1;
+					}
+				}
+				mask.setPixels(0, y, width, row, 0);
+			}
+			return mask;
+		}
+
+		static byte[] checkData(byte[] data) {
+			if (data == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			return data;
+		}
+
+		/**
+		 * Returns <code>getWidth</code> pixel values starting at offset
+		 * <code>x</code> in scanline <code>y</code> in the receiver's
+		 * data starting at <code>startIndex</code>.
+		 *
+		 * @param x the x position of the first pixel to get
+		 * @param y the y position of the first pixel to get
+		 * @param getWidth the width of the data to get
+		 * @param pixels the buffer in which to put the pixels
+		 * @param startIndex the offset into the byte array to begin storing pixels
+		 *
+		 * @exception IndexOutOfBoundsException if getWidth is too large
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if getWidth is negative</li>
+		 * </ul>
+		 * @exception RuntimeException <ul>
+		 *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth is not one of 1, 2, 4 or 8
+		 *        (For higher depths, use the int[] version of this method.)</li>
+		 * </ul>
+		 */
+		public void getPixels(int x, int y, int getWidth, byte[] pixels, int startIndex) {
+			if (pixels == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			if (getWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
+				SWT.error
+
+				(SWT.ERROR_INVALID_ARGUMENT);
+			if (getWidth == 0)
+				return;
+			int index;
+			int theByte;
+			int mask = 0;
+			int n = getWidth;
+			int i = startIndex;
+			int srcX = x, srcY = y;
+			if (depth == 1) {
+				index = (y * bytesPerLine) + (x >> 3);
+				theByte = data[index] & 0xFF;
+				while (n > 0) {
+					mask = 1 << (7 - (srcX & 0x7));
+					if ((theByte & mask) == 0) {
+						pixels[i] = 0;
+					} else {
+						pixels[i] = 1;
+					}
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						if (n > 0)
+							theByte = data[index] & 0xFF;
+						srcX = 0;
+					} else {
+						if (mask == 1) {
+							index++;
+							if (n > 0)
+								theByte = data[index] & 0xFF;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 2) {
+				index = (y * bytesPerLine) + (x >> 2);
+				theByte = data[index] & 0xFF;
+				int offset;
+				while (n > 0) {
+					offset = 3 - (srcX % 4);
+					mask = 3 << (offset * 2);
+					pixels[i] = (byte) ((theByte & mask) >> (offset * 2));
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						if (n > 0)
+							theByte = data[index] & 0xFF;
+						srcX = 0;
+					} else {
+						if (offset == 0) {
+							index++;
+							theByte = data[index] & 0xFF;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 4) {
+				index = (y * bytesPerLine) + (x >> 1);
+				if ((x & 0x1) == 1) {
+					theByte = data[index] & 0xFF;
+					pixels[i] = (byte) (theByte & 0x0F);
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index++;
+					}
+				}
+				while (n > 1) {
+					theByte = data[index] & 0xFF;
+					pixels[i] = (byte) (theByte >> 4);
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						pixels[i] = (byte) (theByte & 0x0F);
+						i++;
+						n--;
+						srcX++;
+						if (srcX >= width) {
+							srcY++;
+							index = srcY * bytesPerLine;
+							srcX = 0;
+						} else {
+							index++;
+						}
+					}
+				}
+				if (n > 0) {
+					theByte = data[index] & 0xFF;
+					pixels[i] = (byte) (theByte >> 4);
+				}
+				return;
+			}
+			if (depth == 8) {
+				index = (y * bytesPerLine) + x;
+				for (int j = 0; j < getWidth; j++) {
+					pixels[i] = data[index];
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index++;
+					}
+				}
+				return;
+			}
+			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
+		}
+
+		/**
+		 * Returns <code>getWidth</code> pixel values starting at offset
+		 * <code>x</code> in scanline <code>y</code> in the receiver's
+		 * data starting at <code>startIndex</code>.
+		 *
+		 * @param x the x position of the first pixel to get
+		 * @param y the y position of the first pixel to get
+		 * @param getWidth the width of the data to get
+		 * @param pixels the buffer in which to put the pixels
+		 * @param startIndex the offset into the buffer to begin storing pixels
+		 *
+		 * @exception IndexOutOfBoundsException if getWidth is too large
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if getWidth is negative</li>
+		 * </ul>
+		 * @exception RuntimeException <ul>
+		 *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth is not one of 1, 2, 4, 8, 16, 24 or 32</li>
+		 * </ul>
+		 */
+		public void getPixels(int x, int y, int getWidth, int[] pixels, int startIndex) {
+			if (pixels == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			if (getWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
+				SWT.error
+
+				(SWT.ERROR_INVALID_ARGUMENT);
+			if (getWidth == 0)
+				return;
+			int index;
+			int theByte;
+			int mask;
+			int n = getWidth;
+			int i = startIndex;
+			int srcX = x, srcY = y;
+			if (depth == 1) {
+				index = (y * bytesPerLine) + (x >> 3);
+				theByte = data[index] & 0xFF;
+				while (n > 0) {
+					mask = 1 << (7 - (srcX & 0x7));
+					if ((theByte & mask) == 0) {
+						pixels[i] = 0;
+					} else {
+						pixels[i] = 1;
+					}
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						if (n > 0)
+							theByte = data[index] & 0xFF;
+						srcX = 0;
+					} else {
+						if (mask == 1) {
+							index++;
+							if (n > 0)
+								theByte = data[index] & 0xFF;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 2) {
+				index = (y * bytesPerLine) + (x >> 2);
+				theByte = data[index] & 0xFF;
+				int offset;
+				while (n > 0) {
+					offset = 3 - (srcX % 4);
+					mask = 3 << (offset * 2);
+					pixels[i] = (byte) ((theByte & mask) >> (offset * 2));
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						if (n > 0)
+							theByte = data[index] & 0xFF;
+						srcX = 0;
+					} else {
+						if (offset == 0) {
+							index++;
+							theByte = data[index] & 0xFF;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 4) {
+				index = (y * bytesPerLine) + (x >> 1);
+				if ((x & 0x1) == 1) {
+					theByte = data[index] & 0xFF;
+					pixels[i] = theByte & 0x0F;
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index++;
+					}
+				}
+				while (n > 1) {
+					theByte = data[index] & 0xFF;
+					pixels[i] = theByte >> 4;
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						pixels[i] = theByte & 0x0F;
+						i++;
+						n--;
+						srcX++;
+						if (srcX >= width) {
+							srcY++;
+							index = srcY * bytesPerLine;
+							srcX = 0;
+						} else {
+							index++;
+						}
+					}
+				}
+				if (n > 0) {
+					theByte = data[index] & 0xFF;
+					pixels[i] = theByte >> 4;
+				}
+				return;
+			}
+			if (depth == 8) {
+				index = (y * bytesPerLine) + x;
+				for (int j = 0; j < getWidth; j++) {
+					pixels[i] = data[index] & 0xFF;
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index++;
+					}
+				}
+				return;
+			}
+			if (depth == 16) {
+				index = (y * bytesPerLine) + (x * 2);
+				for (int j = 0; j < getWidth; j++) {
+					pixels[i] = ((data[index + 1] & 0xFF) << 8) + (data[index] & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index += 2;
+					}
+				}
+				return;
+			}
+			if (depth == 24) {
+				index = (y * bytesPerLine) + (x * 3);
+				for (int j = 0; j < getWidth; j++) {
+					pixels[i] = ((data[index] & 0xFF) << 16) | ((data[index + 1] & 0xFF) << 8) | (data[index + 2] & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index += 3;
+					}
+				}
+				return;
+			}
+			if (depth == 32) {
+				index = (y * bytesPerLine) + (x * 4);
+				i = startIndex;
+				for (int j = 0; j < getWidth; j++) {
+					pixels[i] = ((data[index] & 0xFF) << 24) | ((data[index + 1] & 0xFF) << 16) | ((data[index + 2] & 0xFF) << 8) | (data[index + 3] & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index += 4;
+					}
+				}
+				return;
+			}
+			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
+		}
+
+		/**
+		 * Returns an array of <code>RGB</code>s which comprise the
+		 * indexed color table of the receiver, or null if the receiver
+		 * has a direct color model.
+		 *
+		 * @return the RGB values for the image or null if direct color
+		 *
+		 * @see IconExe.PaletteData#getRGBs()
+		 */
+		public RGB[] getRGBs() {
+			return palette.getRGBs();
+		}
+
+		/**
+		 * Returns an <code>ImageData</code> which specifies the
+		 * transparency mask information for the receiver, or null if the
+		 * receiver has no transparency and is not an icon.
+		 *
+		 * @return the transparency mask or null if none exists
+		 */
+		public ImageData getTransparencyMask() {
+			if (getTransparencyType() == SWT.TRANSPARENCY_MASK) {
+				return new ImageData(width, height, 1, bwPalette(), maskPad, maskData);
+			}
+			return colorMaskImage(transparentPixel);
+		}
+
+		/**
+		 * Returns the image transparency type.
+		 *
+		 * @return the receiver's transparency type
+		 */
+		public int getTransparencyType() {
+			if (maskData != null)
+				return SWT.TRANSPARENCY_MASK;
+			if (transparentPixel != -1)
+				return SWT.TRANSPARENCY_PIXEL;
+			if (alphaData != null)
+				return SWT.TRANSPARENCY_ALPHA;
+			return SWT.TRANSPARENCY_NONE;
+		}
+
+		/**
+		 * Returns the byte order of the receiver.
+		 * 
+		 * @return MSB_FIRST or LSB_FIRST
+		 */
+		int getByteOrder() {
+			return depth != 16 ? MSB_FIRST : LSB_FIRST;
+		}
+
+		/**
+		 * Sets the pixel values starting at offset <code>x</code> in
+		 * scanline <code>y</code> in the receiver's data to the
+		 * values from the array <code>pixels</code> starting at
+		 * <code>startIndex</code>.
+		 *
+		 * @param x the x position of the pixel to set
+		 * @param y the y position of the pixel to set
+		 * @param putWidth the width of the pixels to set
+		 * @param pixels the pixels to set
+		 * @param startIndex the index at which to begin setting
+		 *
+		 * @exception IndexOutOfBoundsException if putWidth is too large
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if putWidth is negative</li>
+		 * </ul>
+		 * @exception RuntimeException <ul>
+		 *    <li>ERROR_UNSUPPORTED_DEPTH if the depth is not one of 1, 2, 4, 8
+		 *        (For higher depths, use the int[] version of this method.)</li>
+		 * </ul>
+		 */
+		public void setPixels(int x, int y, int putWidth, byte[] pixels, int startIndex) {
+			if (pixels == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			if (putWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			if (putWidth == 0)
+				return;
+			int index;
+			int theByte;
+			int mask;
+			int n = putWidth;
+			int i = startIndex;
+			int srcX = x, srcY = y;
+			if (depth == 1) {
+				index = (y * bytesPerLine) + (x >> 3);
+				while (n > 0) {
+					mask = 1 << (7 - (srcX & 0x7));
+					if ((pixels[i] & 0x1) == 1) {
+						data[index] = (byte) ((data[index] & 0xFF) | mask);
+					} else {
+						data[index] = (byte) ((data[index] & 0xFF) & (mask ^ -1));
+					}
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						if (mask == 1) {
+							index++;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 2) {
+				byte[] masks = {(byte) 0xFC, (byte) 0xF3, (byte) 0xCF, (byte) 0x3F};
+				index = (y * bytesPerLine) + (x >> 2);
+				int offset = 3 - (x % 4);
+				while (n > 0) {
+					theByte = pixels[i] & 0x3;
+					data[index] = (byte) ((data[index] & masks[offset]) | (theByte << (offset * 2)));
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						offset = 0;
+						srcX = 0;
+					} else {
+						if (offset == 0) {
+							index++;
+							offset = 3;
+						} else {
+							offset--;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 4) {
+				index = (y * bytesPerLine) + (x >> 1);
+				boolean high = (x & 0x1) == 0;
+				while (n > 0) {
+					theByte = pixels[i] & 0x0F;
+					if (high) {
+						data[index] = (byte) ((data[index] & 0x0F) | (theByte << 4));
+					} else {
+						data[index] = (byte) ((data[index] & 0xF0) | theByte);
+					}
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						high = true;
+						srcX = 0;
+					} else {
+						if (!high)
+							index++;
+						high = !high;
+					}
+				}
+				return;
+			}
+			if (depth == 8) {
+				index = (y * bytesPerLine) + x;
+				for (int j = 0; j < putWidth; j++) {
+					data[index] = (byte) (pixels[i] & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index++;
+					}
+				}
+				return;
+			}
+			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
+		}
+
+		/**
+		 * Sets the pixel values starting at offset <code>x</code> in
+		 * scanline <code>y</code> in the receiver's data to the
+		 * values from the array <code>pixels</code> starting at
+		 * <code>startIndex</code>.
+		 *
+		 * @param x the x position of the pixel to set
+		 * @param y the y position of the pixel to set
+		 * @param putWidth the width of the pixels to set
+		 * @param pixels the pixels to set
+		 * @param startIndex the index at which to begin setting
+		 *
+		 * @exception IndexOutOfBoundsException if putWidth is too large
+		 * @exception IllegalArgumentException <ul>
+		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
+		 *    <li>ERROR_INVALID_ARGUMENT - if putWidth is negative</li>
+		 * </ul>
+		 * @exception RuntimeException <ul>
+		 *    <li>ERROR_UNSUPPORTED_DEPTH if the depth is not one of 1, 2, 4, 8, 16, 24 or 32</li>
+		 * </ul>
+		 */
+		public void setPixels(int x, int y, int putWidth, int[] pixels, int startIndex) {
+			if (pixels == null)
+				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			if (putWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			if (putWidth == 0)
+				return;
+			int index;
+			int theByte;
+			int mask;
+			int n = putWidth;
+			int i = startIndex;
+			int pixel;
+			int srcX = x, srcY = y;
+			if (depth == 1) {
+				index = (y * bytesPerLine) + (x >> 3);
+				while (n > 0) {
+					mask = 1 << (7 - (srcX & 0x7));
+					if ((pixels[i] & 0x1) == 1) {
+						data[index] = (byte) ((data[index] & 0xFF) | mask);
+					} else {
+						data[index] = (byte) ((data[index] & 0xFF) & (mask ^ -1));
+					}
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						if (mask == 1) {
+							index++;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 2) {
+				byte[] masks = {(byte) 0xFC, (byte) 0xF3, (byte) 0xCF, (byte) 0x3F};
+				index = (y * bytesPerLine) + (x >> 2);
+				int offset = 3 - (x % 4);
+				while (n > 0) {
+					theByte = pixels[i] & 0x3;
+					data[index] = (byte) ((data[index] & masks[offset]) | (theByte << (offset * 2)));
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						offset = 3;
+						srcX = 0;
+					} else {
+						if (offset == 0) {
+							index++;
+							offset = 3;
+						} else {
+							offset--;
+						}
+					}
+				}
+				return;
+			}
+			if (depth == 4) {
+				index = (y * bytesPerLine) + (x >> 1);
+				boolean high = (x & 0x1) == 0;
+				while (n > 0) {
+					theByte = pixels[i] & 0x0F;
+					if (high) {
+						data[index] = (byte) ((data[index] & 0x0F) | (theByte << 4));
+					} else {
+						data[index] = (byte) ((data[index] & 0xF0) | theByte);
+					}
+					i++;
+					n--;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						high = true;
+						srcX = 0;
+					} else {
+						if (!high)
+							index++;
+						high = !high;
+					}
+				}
+				return;
+			}
+			if (depth == 8) {
+				index = (y * bytesPerLine) + x;
+				for (int j = 0; j < putWidth; j++) {
+					data[index] = (byte) (pixels[i] & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index++;
+					}
+				}
+				return;
+
+			}
+			if (depth == 16) {
+				index = (y * bytesPerLine) + (x * 2);
+				for (int j = 0; j < putWidth; j++) {
+					pixel = pixels[i];
+					data[index] = (byte) (pixel & 0xFF);
+					data[index + 1] = (byte) ((pixel >> 8) & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index += 2;
+					}
+				}
+				return;
+			}
+			if (depth == 24) {
+				index = (y * bytesPerLine) + (x * 3);
+				for (int j = 0; j < putWidth; j++) {
+					pixel = pixels[i];
+					data[index] = (byte) ((pixel >> 16) & 0xFF);
+					data[index + 1] = (byte) ((pixel >> 8) & 0xFF);
+					data[index + 2] = (byte) (pixel & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index += 3;
+					}
+				}
+				return;
+			}
+			if (depth == 32) {
+				index = (y * bytesPerLine) + (x * 4);
+				for (int j = 0; j < putWidth; j++) {
+					pixel = pixels[i];
+					data[index] = (byte) ((pixel >> 24) & 0xFF);
+					data[index + 1] = (byte) ((pixel >> 16) & 0xFF);
+					data[index + 2] = (byte) ((pixel >> 8) & 0xFF);
+					data[index + 3] = (byte) (pixel & 0xFF);
+					i++;
+					srcX++;
+					if (srcX >= width) {
+						srcY++;
+						index = srcY * bytesPerLine;
+						srcX = 0;
+					} else {
+						index += 4;
+					}
+				}
+				return;
+			}
+			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
+		}
+
+		/**
+		 * Returns a palette with 2 colors: black & white.
+		 */
+		static PaletteData bwPalette() {
+			return new PaletteData(new RGB[] {new RGB(0, 0, 0), new RGB(255, 255, 255)});
+		}
+
+		/**
+		 * Gets the offset of the most significant bit for
+		 * the given mask.
+		 */
+		static int getMSBOffset(int mask) {
+			for (int i = 31; i >= 0; i--) {
+				if (((mask >> i) & 0x1) != 0)
+					return i + 1;
+			}
+			return 0;
+		}
+
+		/**
+		 * Finds the closest match.
+		 */
+		static int closestMatch(int depth, byte red, byte green, byte blue, int redMask, int greenMask, int blueMask, byte[] reds, byte[] greens, byte[] blues) {
+			if (depth > 8) {
+				int rshift = 32 - getMSBOffset(redMask);
+				int gshift = 32 - getMSBOffset(greenMask);
+				int bshift = 32 - getMSBOffset(blueMask);
+				return (((red << 24) >>> rshift) & redMask) | (((green << 24) >>> gshift) & greenMask) | (((blue << 24) >>> bshift) & blueMask);
+			}
+			int r, g, b;
+			int minDistance = 0x7fffffff;
+			int nearestPixel = 0;
+			int n = reds.length;
+			for (int j = 0; j < n; j++) {
+				r = (reds[j] & 0xFF) - (red & 0xFF);
+				g = (greens[j] & 0xFF) - (green & 0xFF);
+				b = (blues[j] & 0xFF) - (blue & 0xFF);
+				int distance = r * r + g * g + b * b;
+				if (distance < minDistance) {
+					nearestPixel = j;
+					if (distance == 0)
+						break;
+					minDistance = distance;
+				}
+			}
+			return nearestPixel;
+		}
+
+		static final ImageData convertMask(ImageData mask) {
+			if (mask.depth == 1)
+				return mask;
+			PaletteData palette = new PaletteData(new RGB[] {new RGB(0, 0, 0), new RGB(255, 255, 255)});
+			ImageData newMask = new ImageData(mask.width, mask.height, 1, palette);
+			/* Find index of black in mask palette */
+			int blackIndex = 0;
+			RGB[] rgbs = mask.getRGBs();
+			if (rgbs != null) {
+				while (blackIndex < rgbs.length) {
+					if (rgbs[blackIndex].equals(palette.colors[0]))
+						break;
+					blackIndex++;
+				}
+			}
+			int[] pixels = new int[mask.width];
+			for (int y = 0; y < mask.height; y++) {
+				mask.getPixels(0, y, mask.width, pixels, 0);
+				for (int i = 0; i < pixels.length; i++) {
+					if (pixels[i] == blackIndex) {
+						pixels[i] = 0;
+					} else {
+						pixels[i] = 1;
+					}
+				}
+				newMask.setPixels(0, y, mask.width, pixels, 0);
+			}
+			return newMask;
+		}
+
+		static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
+			if (pad == newPad)
+				return data;
+			int stride = (width * depth + 7) / 8;
+			int bpl = (stride + (pad - 1)) / pad * pad;
+			int newBpl = (stride + (newPad - 1)) / newPad * newPad;
+			byte[] newData = new byte[height * newBpl];
+			int srcIndex = 0, destIndex = 0;
+			for (int y = 0; y < height; y++) {
+				System.arraycopy(data, srcIndex, newData, destIndex, stride);
+				srcIndex += bpl;
+				destIndex += newBpl;
+			}
+			return newData;
+		}
+
+		/**
+		 * Blit operation bits to be OR'ed together to specify the desired operation.
+		 */
+		static final int BLIT_SRC = 1, // copy source directly, else applies logic operations
+				BLIT_ALPHA = 2, // enable alpha blending
+				BLIT_DITHER = 4; // enable dithering in low color modes
+
+		/**
+		 * Alpha mode, values 0 - 255 specify global alpha level
+		 */
+		static final int ALPHA_OPAQUE = 255, // Fully opaque (ignores any alpha data)
+				ALPHA_TRANSPARENT = 0, // Fully transparent (ignores any alpha data)
+				ALPHA_CHANNEL_SEPARATE = -1, // Use alpha channel from separate alphaData
+				ALPHA_CHANNEL_SOURCE = -2, // Use alpha channel embedded in sourceData
+				ALPHA_MASK_UNPACKED = -3, // Use transparency mask formed by bytes in alphaData (non-zero is opaque)
+				ALPHA_MASK_PACKED = -4, // Use transparency mask formed by packed bits in alphaData
+				ALPHA_MASK_INDEX = -5, // Consider source palette indices transparent if in alphaData array
+				ALPHA_MASK_RGB = -6; // Consider source RGBs transparent if in RGB888 format alphaData array
+
+		/**
+		 * Byte and bit order constants.
+		 */
+		static final int LSB_FIRST = 0;
+		static final int MSB_FIRST = 1;
+
+		/**
+		 * Data types (internal)
+		 */
+		/*
+		private static final int
+			// direct / true color formats with arbitrary masks & shifts
+			TYPE_GENERIC_8 = 0,
+			TYPE_GENERIC_16_MSB = 1,
+			TYPE_GENERIC_16_LSB = 2,
+			TYPE_GENERIC_24 = 3,
+			TYPE_GENERIC_32_MSB = 4,
+			TYPE_GENERIC_32_LSB = 5,
+			// palette indexed color formats
+			TYPE_INDEX_8 = 6,
+			TYPE_INDEX_4 = 7,
+			TYPE_INDEX_2 = 8,
+			TYPE_INDEX_1_MSB = 9,
+			TYPE_INDEX_1_LSB = 10;
+		*/
+		/**
+		 * Computes the required channel shift from a mask.
+		 */
+		static int getChannelShift(int mask) {
+			if (mask == 0)
+				return 0;
+			int i;
+			for (i = 0; ((mask & 1) == 0) && (i < 32); ++i) {
+				mask >>>= 1;
+			}
+			return i;
+		}
+
+		/**
+		 * Computes the required channel width (depth) from a mask.
+		 */
+		static int getChannelWidth(int mask, int shift) {
+			if (mask == 0)
+				return 0;
+			int i;
+			mask >>>= shift;
+			for (i = shift; ((mask & 1) != 0) && (i < 32); ++i) {
+				mask >>>= 1;
+			}
+			return i - shift;
+		}
+
+		/**
+		 * Extracts a field from packed RGB data given a mask for that field.
+		 */
+		static byte getChannelField(int data, int mask) {
+			final int shift = getChannelShift(mask);
+			return ANY_TO_EIGHT[getChannelWidth(mask, shift)][(data & mask) >>> shift];
+		}
+
+		/* 
+		 * Fill in dithered gradated values for a color channel
+		 */
+		static final void buildDitheredGradientChannel(int from, int to, int steps, int bandWidth, int bandHeight, boolean vertical, byte[] bitmapData, int dp, int bytesPerLine, int bits) {
+			final int mask = 0xff00 >>> bits;
+			int val = from << 16;
+			final int inc = ((to << 16) - val) / steps + 1;
+			if (vertical) {
+				for (int dy = 0; dy < bandHeight; ++dy, dp += bytesPerLine) {
+					for (int dx = 0, dptr = dp; dx < bandWidth; ++dx, dptr += 4) {
+						final int thresh = DITHER_MATRIX[dy & 7][dx] >>> bits;
+						int temp = val + thresh;
+						if (temp > 0xffffff)
+							bitmapData[dptr] = -1;
+						else
+							bitmapData[dptr] = (byte) ((temp >>> 16) & mask);
+					}
+					val += inc;
+				}
+			} else {
+				for (int dx = 0; dx < bandWidth; ++dx, dp += 4) {
+					for (int dy = 0, dptr = dp; dy < bandHeight; ++dy, dptr += bytesPerLine) {
+						final int thresh = DITHER_MATRIX[dy][dx & 7] >>> bits;
+						int temp = val + thresh;
+						if (temp > 0xffffff)
+							bitmapData[dptr] = -1;
+						else
+							bitmapData[dptr] = (byte) ((temp >>> 16) & mask);
+					}
+					val += inc;
+				}
+			}
+		}
+	}
+
+	static class LEDataInputStream extends InputStream {
+		int position;
+		InputStream in;
+
+		/**
+		 * The byte array containing the bytes to read.
+		 */
+		protected byte[] buf;
+
+		/**
+		 * The current position within the byte array <code>buf</code>. A value
+		 * equal to buf.length indicates no bytes available.  A value of
+		 * 0 indicates the buffer is full.
+		 */
+		protected int pos;
+
+		public LEDataInputStream(InputStream input) {
+			this(input, 512);
+		}
+
+		public LEDataInputStream(InputStream input, int bufferSize) {
+			this.in = input;
+			if (bufferSize > 0) {
+				buf = new byte[bufferSize];
+				pos = bufferSize;
+			} else
+				throw new IllegalArgumentException();
+		}
+
+		@Override
+		public void close() throws IOException {
+			buf = null;
+			if (in != null) {
+				in.close();
+				in = null;
+			}
+		}
+
+		/**
+		 * Answer how many bytes were read.
+		 */
+		public int getPosition() {
+			return position;
+		}
+
+		/**
+		 * Answers how many bytes are available for reading without blocking
+		 */
+		@Override
+		public int available() throws IOException {
+			if (buf == null)
+				throw new IOException();
+			return (buf.length - pos) + in.available();
+		}
+
+		/**
+		 * Answer the next byte of the input stream.
+		 */
+		@Override
+		public int read() throws IOException {
+			if (buf == null)
+				throw new IOException();
+			position++;
+			if (pos < buf.length)
+				return (buf[pos++] & 0xFF);
+			return in.read();
+		}
+
+		/**
+		 * Don't imitate the JDK behaviour of reading a random number
+		 * of bytes when you can actually read them all.
+		 */
+		@Override
+		public int read(byte b[], int off, int len) throws IOException {
+			int result;
+			int left = len;
+			result = readData(b, off, len);
+			while (true) {
+				if (result == -1)
+					return -1;
+				position += result;
+				if (result == left)
+					return len;
+				left -= result;
+				off += result;
+				result = readData(b, off, left);
+			}
+		}
+
+		/**
+		 * Reads at most <code>length</code> bytes from this LEDataInputStream and 
+		 * stores them in byte array <code>buffer</code> starting at <code>offset</code>.
+		 * <p>
+		 * Answer the number of bytes actually read or -1 if no bytes were read and 
+		 * end of stream was encountered.  This implementation reads bytes from 
+		 * the pushback buffer first, then the target stream if more bytes are required
+		 * to satisfy <code>count</code>.
+		 * </p>
+		 * @param buffer the byte array in which to store the read bytes.
+		 * @param offset the offset in <code>buffer</code> to store the read bytes.
+		 * @param length the maximum number of bytes to store in <code>buffer</code>.
+		 *
+		 * @return int the number of bytes actually read or -1 if end of stream.
+		 *
+		 * @exception java.io.IOException if an IOException occurs.
+		 */
+		private int readData(byte[] buffer, int offset, int length) throws IOException {
+			if (buf == null)
+				throw new IOException();
+			if (offset < 0 || offset > buffer.length || length < 0 || (length > buffer.length - offset)) {
+				throw new ArrayIndexOutOfBoundsException();
+			}
+
+			int cacheCopied = 0;
+			int newOffset = offset;
+
+			// Are there pushback bytes available?
+			int available = buf.length - pos;
+			if (available > 0) {
+				cacheCopied = (available >= length) ? length : available;
+				System.arraycopy(buf, pos, buffer, newOffset, cacheCopied);
+				newOffset += cacheCopied;
+				pos += cacheCopied;
+			}
+
+			// Have we copied enough?
+			if (cacheCopied == length)
+				return length;
+
+			int inCopied = in.read(buffer, newOffset, length - cacheCopied);
+
+			if (inCopied > 0)
+				return inCopied + cacheCopied;
+			if (cacheCopied == 0)
+				return inCopied;
+			return cacheCopied;
+		}
+
+		/**
+		 * Answer an integer comprised of the next
+		 * four bytes of the input stream.
+		 */
+		public int readInt() throws IOException {
+			byte[] buf = new byte[4];
+			read(buf);
+			return ((((((buf[3] & 0xFF) << 8) | (buf[2] & 0xFF)) << 8) | (buf[1] & 0xFF)) << 8) | (buf[0] & 0xFF);
+		}
+
+		/**
+		 * Answer a short comprised of the next
+		 * two bytes of the input stream.
+		 */
+		public short readShort() throws IOException {
+			byte[] buf = new byte[2];
+			read(buf);
+			return (short) (((buf[1] & 0xFF) << 8) | (buf[0] & 0xFF));
+		}
+
+		/**
+		 * Push back the entire content of the given buffer <code>b</code>.
+		 * <p>
+		 * The bytes are pushed so that they would be read back b[0], b[1], etc. 
+		 * If the push back buffer cannot handle the bytes copied from <code>b</code>, 
+		 * an IOException will be thrown and no byte will be pushed back.
+		 * </p>
+		 * 
+		 * @param b the byte array containing bytes to push back into the stream
+		 *
+		 * @exception 	java.io.IOException if the pushback buffer is too small
+		 */
+		public void unread(byte[] b) throws IOException {
+			int length = b.length;
+			if (length > pos)
+				throw new IOException();
+			position -= length;
+			pos -= length;
+			System.arraycopy(b, 0, buf, pos, length);
+		}
+	}
+
+	public static abstract class FileFormat {
+		LEDataInputStream inputStream;
+		ImageLoader loader;
+		int compression;
+
+		byte[] bitInvertData(byte[] data, int startIndex, int endIndex) {
+			// Destructively bit invert data in the given byte array.
+			for (int i = startIndex; i < endIndex; i++) {
+				data[i] = (byte) (255 - data[i - startIndex]);
+			}
+			return data;
+		}
+
+		/**
+		 * Return whether or not the specified input stream
+		 * represents a supported file format.
+		 */
+		abstract boolean isFileFormat(LEDataInputStream stream);
+
+		abstract ImageData[] loadFromByteStream();
+
+		public ImageData[] loadFromStream(LEDataInputStream stream) {
+			try {
+				inputStream = stream;
+				return loadFromByteStream();
+			} catch (Exception e) {
+				SWT.error(SWT.ERROR_IO, e);
+				return null;
+			}
+		}
+
+		public static ImageData[] load(InputStream is, ImageLoader loader) {
+			LEDataInputStream stream = new LEDataInputStream(is);
+			boolean isSupported = false;
+			FileFormat fileFormat = new WinICOFileFormat();
+			if (fileFormat.isFileFormat(stream))
+				isSupported = true;
+			else {
+				fileFormat = new WinBMPFileFormat();
+				if (fileFormat.isFileFormat(stream))
+					isSupported = true;
+			}
+			if (!isSupported)
+				SWT.error(SWT.ERROR_UNSUPPORTED_FORMAT);
+			fileFormat.loader = loader;
+			return fileFormat.loadFromStream(stream);
+		}
+	}
+
+	static class WinBMPFileFormat extends FileFormat {
+		static final int BMPFileHeaderSize = 14;
+		static final int BMPHeaderFixedSize = 40;
+		int importantColors;
+
+		void decompressData(byte[] src, byte[] dest, int stride, int cmp) {
+			if (cmp == 1) { // BMP_RLE8_COMPRESSION
+				if (decompressRLE8Data(src, src.length, stride, dest, dest.length) <= 0)
+					SWT.error(SWT.ERROR_INVALID_IMAGE);
+				return;
+			}
+			if (cmp == 2) { // BMP_RLE4_COMPRESSION
+				if (decompressRLE4Data(src, src.length, stride, dest, dest.length) <= 0)
+					SWT.error(SWT.ERROR_INVALID_IMAGE);
+				return;
+			}
+			SWT.error(SWT.ERROR_INVALID_IMAGE);
+		}
+
+		int decompressRLE4Data(byte[] src, int numBytes, int stride, byte[] dest, int destSize) {
+			int sp = 0;
+			int se = numBytes;
+			int dp = 0;
+			int de = destSize;
+			int x = 0, y = 0;
+			while (sp < se) {
+				int len = src[sp] & 0xFF;
+				sp++;
+				if (len == 0) {
+					len = src[sp] & 0xFF;
+					sp++;
+					switch (len) {
+						case 0 : /* end of line */
+							y++;
+							x = 0;
+							dp = y * stride;
+							if (dp >= de)
+								return -1;
+							break;
+						case 1 : /* end of bitmap */
+							return 1;
+						case 2 : /* delta */
+							x += src[sp] & 0xFF;
+							sp++;
+							y += src[sp] & 0xFF;
+							sp++;
+							dp = y * stride + x / 2;
+							if (dp >= de)
+								return -1;
+							break;
+						default : /* absolute mode run */
+							if ((len & 1) != 0) /* odd run lengths not currently supported */
+								return -1;
+							x += len;
+							len = len / 2;
+							if (len > (se - sp))
+								return -1;
+							if (len > (de - dp))
+								return -1;
+							for (int i = 0; i < len; i++) {
+								dest[dp] = src[sp];
+								dp++;
+								sp++;
+							}
+							if ((sp & 1) != 0)
+								sp++; /* word align sp? */
+							break;
+					}
+				} else {
+					if ((len & 1) != 0)
+						return -1;
+					x += len;
+					len = len / 2;
+					byte theByte = src[sp];
+					sp++;
+					if (len > (de - dp))
+						return -1;
+					for (int i = 0; i < len; i++) {
+						dest[dp] = theByte;
+						dp++;
+					}
+				}
+			}
+			return 1;
+		}
+
+		int decompressRLE8Data(byte[] src, int numBytes, int stride, byte[] dest, int destSize) {
+			int sp = 0;
+			int se = numBytes;
+			int dp = 0;
+			int de = destSize;
+			int x = 0, y = 0;
+			while (sp < se) {
+				int len = src[sp] & 0xFF;
+				sp++;
+				if (len == 0) {
+					len = src[sp] & 0xFF;
+					sp++;
+					switch (len) {
+						case 0 : /* end of line */
+							y++;
+							x = 0;
+							dp = y * stride;
+							if (dp >= de)
+								return -1;
+							break;
+						case 1 : /* end of bitmap */
+							return 1;
+						case 2 : /* delta */
+							x += src[sp] & 0xFF;
+							sp++;
+							y += src[sp] & 0xFF;
+							sp++;
+							dp = y * stride + x;
+							if (dp >= de)
+								return -1;
+							break;
+						default : /* absolute mode run */
+							if (len > (se - sp))
+								return -1;
+							if (len > (de - dp))
+								return -1;
+							for (int i = 0; i < len; i++) {
+								dest[dp] = src[sp];
+								dp++;
+								sp++;
+							}
+							if ((sp & 1) != 0)
+								sp++; /* word align sp? */
+							x += len;
+							break;
+					}
+				} else {
+					byte theByte = src[sp];
+					sp++;
+					if (len > (de - dp))
+						return -1;
+					for (int i = 0; i < len; i++) {
+						dest[dp] = theByte;
+						dp++;
+					}
+					x += len;
+				}
+			}
+			return 1;
+		}
+
+		@Override
+		boolean isFileFormat(LEDataInputStream stream) {
+			try {
+				byte[] header = new byte[18];
+				stream.read(header);
+				stream.unread(header);
+				int infoHeaderSize = (header[14] & 0xFF) | ((header[15] & 0xFF) << 8) | ((header[16] & 0xFF) << 16) | ((header[17] & 0xFF) << 24);
+				return header[0] == 0x42 && header[1] == 0x4D && infoHeaderSize >= BMPHeaderFixedSize;
+			} catch (Exception e) {
+				return false;
+			}
+		}
+
+		byte[] loadData(byte[] infoHeader) {
+			int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
+			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
+			int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
+			int stride = (width * bitCount + 7) / 8;
+			stride = (stride + 3) / 4 * 4; // Round up to 4 byte multiple
+			byte[] data = loadData(infoHeader, stride);
+			flipScanLines(data, stride, height);
+			return data;
+		}
+
+		byte[] loadData(byte[] infoHeader, int stride) {
+			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
+			int dataSize = height * stride;
+			byte[] data = new byte[dataSize];
+			int cmp = (infoHeader[16] & 0xFF) | ((infoHeader[17] & 0xFF) << 8) | ((infoHeader[18] & 0xFF) << 16) | ((infoHeader[19] & 0xFF) << 24);
+			if (cmp == 0) { // BMP_NO_COMPRESSION
+				try {
+					if (inputStream.read(data) != dataSize)
+						SWT.error(SWT.ERROR_INVALID_IMAGE);
+				} catch (IOException e) {
+					SWT.error(SWT.ERROR_IO, e);
+				}
+			} else {
+				int compressedSize = (infoHeader[20] & 0xFF) | ((infoHeader[21] & 0xFF) << 8) | ((infoHeader[22] & 0xFF) << 16) | ((infoHeader[23] & 0xFF) << 24);
+				byte[] compressed = new byte[compressedSize];
+				try {
+					if (inputStream.read(compressed) != compressedSize)
+						SWT.error(SWT.ERROR_INVALID_IMAGE);
+				} catch (IOException e) {
+					SWT.error(SWT.ERROR_IO, e);
+				}
+				decompressData(compressed, data, stride, cmp);
+			}
+			return data;
+		}
+
+		int[] loadFileHeader() {
+			int[] header = new int[5];
+			try {
+				header[0] = inputStream.readShort();
+				header[1] = inputStream.readInt();
+				header[2] = inputStream.readShort();
+				header[3] = inputStream.readShort();
+				header[4] = inputStream.readInt();
+			} catch (IOException e) {
+				SWT.error(SWT.ERROR_IO, e);
+			}
+			if (header[0] != 0x4D42)
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			return header;
+		}
+
+		@Override
+		ImageData[] loadFromByteStream() {
+			int[] fileHeader = loadFileHeader();
+			byte[] infoHeader = new byte[BMPHeaderFixedSize];
+			try {
+				inputStream.read(infoHeader);
+			} catch (Exception e) {
+				SWT.error(SWT.ERROR_IO, e);
+			}
+			int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
+			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
+			int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
+			PaletteData palette = loadPalette(infoHeader);
+			if (inputStream.getPosition() < fileHeader[4]) {
+				// Seek to the specified offset
+				try {
+					inputStream.skip(fileHeader[4] - inputStream.getPosition());
+				} catch (IOException e) {
+					SWT.error(SWT.ERROR_IO, e);
+				}
+			}
+			byte[] data = loadData(infoHeader);
+			this.compression = (infoHeader[16] & 0xFF) | ((infoHeader[17] & 0xFF) << 8) | ((infoHeader[18] & 0xFF) << 16) | ((infoHeader[19] & 0xFF) << 24);
+			this.importantColors = (infoHeader[36] & 0xFF) | ((infoHeader[37] & 0xFF) << 8) | ((infoHeader[38] & 0xFF) << 16) | ((infoHeader[39] & 0xFF) << 24);
+			//	int xPelsPerMeter = (infoHeader[24] & 0xFF) | ((infoHeader[25] & 0xFF) << 8) | ((infoHeader[26] & 0xFF) << 16) | ((infoHeader[27] & 0xFF) << 24);
+			//	int yPelsPerMeter = (infoHeader[28] & 0xFF) | ((infoHeader[29] & 0xFF) << 8) | ((infoHeader[30] & 0xFF) << 16) | ((infoHeader[31] & 0xFF) << 24);
+			int type = (this.compression == 1 /*BMP_RLE8_COMPRESSION*/) || (this.compression == 2 /*BMP_RLE4_COMPRESSION*/) ? SWT.IMAGE_BMP_RLE : SWT.IMAGE_BMP;
+			return new ImageData[] {ImageData.internal_new(width, height, bitCount, palette, 4, data, 0, null, null, -1, -1, type, 0, 0, 0, 0)};
+		}
+
+		PaletteData loadPalette(byte[] infoHeader) {
+			int depth = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
+			if (depth <= 8) {
+				int numColors = (infoHeader[32] & 0xFF) | ((infoHeader[33] & 0xFF) << 8) | ((infoHeader[34] & 0xFF) << 16) | ((infoHeader[35] & 0xFF) << 24);
+				if (numColors == 0) {
+					numColors = 1 << depth;
+				} else {
+					if (numColors > 256)
+						numColors = 256;
+				}
+				byte[] buf = new byte[numColors * 4];
+				try {
+					if (inputStream.read(buf) != buf.length)
+						SWT.error(SWT.ERROR_INVALID_IMAGE);
+				} catch (IOException e) {
+					SWT.error(SWT.ERROR_IO, e);
+				}
+				return paletteFromBytes(buf, numColors);
+			}
+			if (depth == 16)
+				return new PaletteData(0x7C00, 0x3E0, 0x1F);
+			if (depth == 24)
+				return new PaletteData(0xFF, 0xFF00, 0xFF0000);
+			return new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
+		}
+
+		PaletteData paletteFromBytes(byte[] bytes, int numColors) {
+			int bytesOffset = 0;
+			RGB[] colors = new RGB[numColors];
+			for (int i = 0; i < numColors; i++) {
+				colors[i] = new RGB(bytes[bytesOffset + 2] & 0xFF, bytes[bytesOffset + 1] & 0xFF, bytes[bytesOffset] & 0xFF);
+				bytesOffset += 4;
+			}
+			return new PaletteData(colors);
+		}
+
+		/**
+		 * Answer a byte array containing the BMP representation of
+		 * the given device independent palette.
+		 */
+		static byte[] paletteToBytes(PaletteData pal) {
+			int n = pal.colors == null ? 0 : (pal.colors.length < 256 ? pal.colors.length : 256);
+			byte[] bytes = new byte[n * 4];
+			int offset = 0;
+			for (int i = 0; i < n; i++) {
+				RGB col = pal.colors[i];
+				bytes[offset] = (byte) col.blue;
+				bytes[offset + 1] = (byte) col.green;
+				bytes[offset + 2] = (byte) col.red;
+				offset += 4;
+			}
+			return bytes;
+		}
+
+		void flipScanLines(byte[] data, int stride, int height) {
+			int i1 = 0;
+			int i2 = (height - 1) * stride;
+			for (int i = 0; i < height / 2; i++) {
+				for (int index = 0; index < stride; index++) {
+					byte b = data[index + i1];
+					data[index + i1] = data[index + i2];
+					data[index + i2] = b;
+				}
+				i1 += stride;
+				i2 -= stride;
+			}
+		}
+
+	}
+
+	static class WinICOFileFormat extends FileFormat {
+
+		static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
+			if (pad == newPad)
+				return data;
+			int stride = (width * depth + 7) / 8;
+			int bpl = (stride + (pad - 1)) / pad * pad;
+			int newBpl = (stride + (newPad - 1)) / newPad * newPad;
+			byte[] newData = new byte[height * newBpl];
+			int srcIndex = 0, destIndex = 0;
+			for (int y = 0; y < height; y++) {
+				System.arraycopy(data, srcIndex, newData, destIndex, newBpl);
+				srcIndex += bpl;
+				destIndex += newBpl;
+			}
+			return newData;
+		}
+
+		/**
+		 * Answer the size in bytes of the file representation of the given
+		 * icon
+		 */
+		int iconSize(ImageData i) {
+			int shapeDataStride = (i.width * i.depth + 31) / 32 * 4;
+			int maskDataStride = (i.width + 31) / 32 * 4;
+			int dataSize = (shapeDataStride + maskDataStride) * i.height;
+			int paletteSize = i.palette.colors != null ? i.palette.colors.length * 4 : 0;
+			return WinBMPFileFormat.BMPHeaderFixedSize + paletteSize + dataSize;
+		}
+
+		@Override
+		boolean isFileFormat(LEDataInputStream stream) {
+			try {
+				byte[] header = new byte[4];
+				stream.read(header);
+				stream.unread(header);
+				return header[0] == 0 && header[1] == 0 && header[2] == 1 && header[3] == 0;
+			} catch (Exception e) {
+				return false;
+			}
+		}
+
+		boolean isValidIcon(ImageData i) {
+			switch (i.depth) {
+				case 1 :
+				case 4 :
+				case 8 :
+					if (i.palette.isDirect)
+						return false;
+					int size = i.palette.colors.length;
+					return size == 2 || size == 16 || size == 32 || size == 256;
+				case 24 :
+				case 32 :
+					return i.palette.isDirect;
+			}
+			return false;
+		}
+
+		int loadFileHeader(LEDataInputStream byteStream) {
+			int[] fileHeader = new int[3];
+			try {
+				fileHeader[0] = byteStream.readShort();
+				fileHeader[1] = byteStream.readShort();
+				fileHeader[2] = byteStream.readShort();
+			} catch (IOException e) {
+				SWT.error(SWT.ERROR_IO, e);
+			}
+			if ((fileHeader[0] != 0) || (fileHeader[1] != 1))
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			int numIcons = fileHeader[2];
+			if (numIcons <= 0)
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			return numIcons;
+		}
+
+		int loadFileHeader(LEDataInputStream byteStream, boolean hasHeader) {
+			int[] fileHeader = new int[3];
+			try {
+				if (hasHeader) {
+					fileHeader[0] = byteStream.readShort();
+					fileHeader[1] = byteStream.readShort();
+				} else {
+					fileHeader[0] = 0;
+					fileHeader[1] = 1;
+				}
+				fileHeader[2] = byteStream.readShort();
+			} catch (IOException e) {
+				SWT.error(SWT.ERROR_IO, e);
+			}
+			if ((fileHeader[0] != 0) || (fileHeader[1] != 1))
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			int numIcons = fileHeader[2];
+			if (numIcons <= 0)
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			return numIcons;
+		}
+
+		@Override
+		ImageData[] loadFromByteStream() {
+			int numIcons = loadFileHeader(inputStream);
+			int[][] headers = loadIconHeaders(numIcons);
+			ImageData[] icons = new ImageData[headers.length];
+			for (int i = 0; i < icons.length; i++) {
+				icons[i] = loadIcon(headers[i]);
+			}
+			return icons;
+		}
+
+		/**
+		 * Load one icon from the byte stream.
+		 */
+		ImageData loadIcon(int[] iconHeader) {
+			byte[] infoHeader = loadInfoHeader(iconHeader);
+			WinBMPFileFormat bmpFormat = new WinBMPFileFormat();
+			bmpFormat.inputStream = inputStream;
+			PaletteData palette = bmpFormat.loadPalette(infoHeader);
+			byte[] shapeData = bmpFormat.loadData(infoHeader);
+			int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
+			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
+			int depth = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
+			infoHeader[14] = 1;
+			infoHeader[15] = 0;
+			byte[] maskData = bmpFormat.loadData(infoHeader);
+			maskData = convertPad(maskData, width, height, 1, 4, 2);
+			bitInvertData(maskData, 0, maskData.length);
+			return ImageData.internal_new(width, height, depth, palette, 4, shapeData, 2, maskData, null, -1, -1, SWT.IMAGE_ICO, 0, 0, 0, 0);
+		}
+
+		int[][] loadIconHeaders(int numIcons) {
+			int[][] headers = new int[numIcons][7];
+			try {
+				for (int i = 0; i < numIcons; i++) {
+					headers[i][0] = inputStream.read();
+					headers[i][1] = inputStream.read();
+					headers[i][2] = inputStream.readShort();
+					headers[i][3] = inputStream.readShort();
+					headers[i][4] = inputStream.readShort();
+					headers[i][5] = inputStream.readInt();
+					headers[i][6] = inputStream.readInt();
+				}
+			} catch (IOException e) {
+				SWT.error(SWT.ERROR_IO, e);
+			}
+			return headers;
+		}
+
+		byte[] loadInfoHeader(int[] iconHeader) {
+			int width = iconHeader[0];
+			int height = iconHeader[1];
+			int numColors = iconHeader[2]; // the number of colors is in the low byte, but the high byte must be 0
+			if (numColors == 0)
+				numColors = 256; // this is specified: '00' represents '256' (0x100) colors
+			if ((numColors != 2) && (numColors != 8) && (numColors != 16) && (numColors != 32) && (numColors != 256))
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			if (inputStream.getPosition() < iconHeader[6]) {
+				// Seek to the specified offset
+				try {
+					inputStream.skip(iconHeader[6] - inputStream.getPosition());
+				} catch (IOException e) {
+					SWT.error(SWT.ERROR_IO, e);
+					return null;
+				}
+			}
+			byte[] infoHeader = new byte[WinBMPFileFormat.BMPHeaderFixedSize];
+			try {
+				inputStream.read(infoHeader);
+			} catch (IOException e) {
+				SWT.error(SWT.ERROR_IO, e);
+			}
+			if (((infoHeader[12] & 0xFF) | ((infoHeader[13] & 0xFF) << 8)) != 1)
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			int infoWidth = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
+			int infoHeight = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
+			int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
+			if (height == infoHeight && bitCount == 1)
+				height /= 2;
+			if (!((width == infoWidth) && (height * 2 == infoHeight) && (bitCount == 1 || bitCount == 4 || bitCount == 8 || bitCount == 24 || bitCount == 32)))
+				SWT.error(SWT.ERROR_INVALID_IMAGE);
+			infoHeader[8] = (byte) (height & 0xFF);
+			infoHeader[9] = (byte) ((height >> 8) & 0xFF);
+			infoHeader[10] = (byte) ((height >> 16) & 0xFF);
+			infoHeader[11] = (byte) ((height >> 24) & 0xFF);
+			return infoHeader;
+		}
+	}
+
+	static class SWT {
+		public static final int IMAGE_ICO = 3;
+		public static final int ERROR_IO = 39;
+		public static final int ERROR_INVALID_IMAGE = 40;
+		public static final int ERROR_NULL_ARGUMENT = 4;
+		public static final int ERROR_INVALID_ARGUMENT = 5;
+		public static final int ERROR_CANNOT_BE_ZERO = 7;
+		public static final int IMAGE_UNDEFINED = -1;
+		public static final int ERROR_UNSUPPORTED_DEPTH = 38;
+		public static final int TRANSPARENCY_MASK = 1 << 1;
+		public static final int ERROR_UNSUPPORTED_FORMAT = 42;
+		public static final int TRANSPARENCY_ALPHA = 1 << 0;
+		public static final int TRANSPARENCY_NONE = 0x0;
+		public static final int TRANSPARENCY_PIXEL = 1 << 2;
+		public static final int IMAGE_BMP = 0;
+		public static final int IMAGE_BMP_RLE = 1;
+
+		public static void error(int code) {
+			throw new RuntimeException("Error " + code); //$NON-NLS-1$
+		}
+
+		public static void error(int code, Throwable t) {
+			throw new RuntimeException(t);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/AbstractPublishTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/AbstractPublishTask.java
new file mode 100644
index 0000000..5f6d3f7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/AbstractPublishTask.java
@@ -0,0 +1,214 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM - Initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.ant;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.tools.ant.Task;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository;
+import org.eclipse.equinox.internal.p2.publisher.Messages;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.metadata.IArtifactKey;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.query.IQueryResult;
+import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.equinox.p2.repository.artifact.ArtifactKeyQuery;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.publishing.Activator;
+
+public abstract class AbstractPublishTask extends Task {
+	protected static final String ANT_PROPERTY_PREFIX = "${"; //$NON-NLS-1$
+
+	/**
+	 * Support nested repository elements that looking something like
+	 *    <repo location="file:/foo" metadata="true" artifact="true" />
+	 * Both metadata and artifact are optional:
+	 *  1) if neither are set, the repo is used for both metadata and artifacts
+	 *  2) if only one is true, the repo is that type and not the other 
+	 */
+	static public class RepoEntry {
+		private URI repoLocation;
+		private Boolean metadata = null;
+		private Boolean artifact = null;
+
+		/**
+		 * If not set, default is true if we aren't set as an artifact repo 
+		 */
+		public boolean isMetadataRepository() {
+			if (metadata != null)
+				return metadata.booleanValue();
+			return !Boolean.TRUE.equals(artifact);
+		}
+
+		/**
+		 * If not set, default is true if we aren't set as an metadata repo 
+		 */
+		public boolean isArtifactRepository() {
+			if (artifact != null)
+				return artifact.booleanValue();
+			return !Boolean.TRUE.equals(metadata);
+		}
+
+		public URI getRepositoryLocation() {
+			return repoLocation;
+		}
+
+		public void setLocation(String location) {
+			try {
+				repoLocation = URIUtil.fromString(location);
+			} catch (URISyntaxException e) {
+				throw new IllegalArgumentException("Repository location (" + location + ") must be a URL."); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		}
+
+		public void setMetadata(boolean metadata) {
+			this.metadata = Boolean.valueOf(metadata);
+		}
+
+		public void setArtifact(boolean artifact) {
+			this.artifact = Boolean.valueOf(artifact);
+		}
+	}
+
+	protected boolean compress = false;
+	protected boolean reusePackedFiles = false;
+	protected boolean append = true;
+	protected boolean publish = true;
+	protected String source = null;
+	protected URI metadataLocation;
+	protected String metadataRepoName;
+	protected URI artifactLocation;
+	protected String artifactRepoName;
+	protected PublisherInfo provider = null;
+	protected List<RepoEntry> contextRepositories = new ArrayList<RepoEntry>();
+
+	protected IProvisioningAgent getProvisioningAgent() {
+		return (IProvisioningAgent) ServiceHelper.getService(Activator.getContext(), IProvisioningAgent.SERVICE_NAME);
+	}
+
+	protected IStatus createConfigurationEror(String message) {
+		return new Status(IStatus.ERROR, "org.eclipse.equinox.p2.publisher", message); //$NON-NLS-1$
+	}
+
+	private boolean isEmpty(IArtifactRepository repo) {
+		IQueryResult<IArtifactKey> result = repo.query(QueryUtil.createLimitQuery(ArtifactKeyQuery.ALL_KEYS, 1), null);
+		return result.isEmpty();
+	}
+
+	protected void initializeRepositories(PublisherInfo info) throws ProvisionException {
+		if (artifactLocation != null) {
+			IArtifactRepository repo = Publisher.createArtifactRepository(getProvisioningAgent(), artifactLocation, artifactRepoName, compress, reusePackedFiles);
+			if (!append && !isEmpty(repo)) {
+				File repoLocation = URIUtil.toFile(artifactLocation);
+				if (repoLocation != null && source != null) {
+					if (repoLocation.isFile())
+						repoLocation = repoLocation.getParentFile();
+					if (repoLocation.equals(new File(source)))
+						throw new IllegalArgumentException(NLS.bind(Messages.exception_artifactRepoNoAppendDestroysInput, URIUtil.toUnencodedString(artifactLocation)));
+				}
+				repo.removeAll(new NullProgressMonitor());
+			}
+			info.setArtifactRepository(repo);
+		} else if ((info.getArtifactOptions() & IPublisherInfo.A_PUBLISH) > 0)
+			throw new ProvisionException(createConfigurationEror(Messages.exception_noArtifactRepo));
+		if (metadataLocation == null)
+			throw new ProvisionException(createConfigurationEror(Messages.exception_noMetadataRepo));
+		info.setMetadataRepository(Publisher.createMetadataRepository(getProvisioningAgent(), metadataLocation, metadataRepoName, append, compress));
+
+		if (contextRepositories.size() > 0) {
+			CompositeMetadataRepository contextMetadata = CompositeMetadataRepository.createMemoryComposite(getProvisioningAgent());
+			CompositeArtifactRepository contextArtifact = CompositeArtifactRepository.createMemoryComposite(getProvisioningAgent());
+
+			for (RepoEntry entry : contextRepositories) {
+				if (contextMetadata != null && entry.isMetadataRepository())
+					contextMetadata.addChild(entry.getRepositoryLocation());
+				if (contextArtifact != null && entry.isArtifactRepository())
+					contextArtifact.addChild(entry.getRepositoryLocation());
+			}
+
+			if (contextMetadata != null && contextMetadata.getChildren().size() > 0)
+				info.setContextMetadataRepository(contextMetadata);
+
+			if (contextArtifact != null && contextArtifact.getChildren().size() > 0)
+				info.setContextArtifactRepository(contextArtifact);
+		}
+	}
+
+	protected PublisherInfo getInfo() {
+		if (provider == null)
+			provider = new PublisherInfo();
+
+		if (publish)
+			provider.setArtifactOptions(provider.getArtifactOptions() | IPublisherInfo.A_PUBLISH);
+		return provider;
+	}
+
+	public void setCompress(String value) {
+		compress = Boolean.valueOf(value).booleanValue();
+	}
+
+	public void setReusePackedFiles(String value) {
+		reusePackedFiles = Boolean.valueOf(value).booleanValue();
+	}
+
+	public void setAppend(String value) {
+		append = Boolean.valueOf(value).booleanValue();
+	}
+
+	public void setPublishArtifacts(String value) {
+		publish = Boolean.valueOf(value).booleanValue();
+	}
+
+	public void setArtifactRepository(String location) {
+		try {
+			artifactLocation = URIUtil.fromString(location);
+		} catch (URISyntaxException e) {
+			throw new IllegalArgumentException("Artifact repository location (" + location + ") must be a URL."); //$NON-NLS-1$//$NON-NLS-2$
+		}
+	}
+
+	public void setArtifactRepositoryName(String value) {
+		artifactRepoName = value;
+	}
+
+	public void setMetadataRepository(String location) {
+		try {
+			metadataLocation = URIUtil.fromString(location);
+		} catch (URISyntaxException e) {
+			throw new IllegalArgumentException("Metadata repository location (" + location + ") must be a URL."); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	public void setMetadataRepositoryName(String value) {
+		metadataRepoName = value;
+	}
+
+	public void setRepository(String location) {
+		setArtifactRepository(location);
+		setMetadataRepository(location);
+	}
+
+	public void setRepositoryName(String name) {
+		setArtifactRepositoryName(name);
+		setMetadataRepositoryName(name);
+	}
+
+	// nested <contextRepository/> elements
+	public void addConfiguredContextRepository(RepoEntry repo) {
+		contextRepositories.add(repo);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/FeaturesAndBundlesPublisherTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/FeaturesAndBundlesPublisherTask.java
new file mode 100644
index 0000000..b293fa2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/FeaturesAndBundlesPublisherTask.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM - Initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.ant;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.types.FileSet;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.publisher.IPublisherAction;
+import org.eclipse.equinox.p2.publisher.Publisher;
+import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction;
+import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction;
+
+public class FeaturesAndBundlesPublisherTask extends AbstractPublishTask {
+	private ArrayList<Object> features = new ArrayList<Object>();
+	private ArrayList<Object> bundles = new ArrayList<Object>();
+
+	public void execute() throws BuildException {
+		try {
+			initializeRepositories(getInfo());
+		} catch (ProvisionException e) {
+			throw new BuildException("Unable to configure repositories", e); //$NON-NLS-1$
+		}
+
+		File[] f = getLocations(features);
+		File[] b = getLocations(bundles);
+
+		ArrayList<IPublisherAction> actions = new ArrayList<IPublisherAction>();
+		if (f.length > 0)
+			actions.add(new FeaturesAction(f));
+		if (b.length > 0)
+			actions.add(new BundlesAction(b));
+
+		if (actions.size() > 0)
+			new Publisher(getInfo()).publish(actions.toArray(new IPublisherAction[actions.size()]), new NullProgressMonitor());
+	}
+
+	private File[] getLocations(List<Object> collection) {
+		ArrayList<Object> results = new ArrayList<Object>();
+		for (Object obj : collection) {
+			if (obj instanceof FileSet) {
+				FileSet set = (FileSet) obj;
+
+				DirectoryScanner scanner = set.getDirectoryScanner(getProject());
+				String[][] elements = new String[][] {scanner.getIncludedDirectories(), scanner.getIncludedFiles()};
+				for (int i = 0; i < 2; i++) {
+					for (int j = 0; j < elements[i].length; j++) {
+						results.add(new File(set.getDir(), elements[i][j]));
+					}
+				}
+			} else if (obj instanceof File) {
+				results.add(obj);
+			}
+		}
+		return results.toArray(new File[results.size()]);
+	}
+
+	public FileSet createFeatures() {
+		FileSet set = new FileSet();
+		features.add(set);
+		return set;
+	}
+
+	public FileSet createBundles() {
+		FileSet set = new FileSet();
+		bundles.add(set);
+		return set;
+	}
+
+	public void setSource(String source) {
+		super.source = source;
+		features.add(new File(source, "features")); //$NON-NLS-1$
+		bundles.add(new File(source, "plugins")); //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/ProductPublisherTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/ProductPublisherTask.java
new file mode 100644
index 0000000..541fe4c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/ProductPublisherTask.java
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM - Initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.ant;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.tools.ant.BuildException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.actions.VersionAdvice;
+import org.eclipse.equinox.p2.publisher.eclipse.ProductAction;
+
+public class ProductPublisherTask extends AbstractPublishTask {
+
+	public static class ConfigElement {
+		public String os;
+		public String ws;
+		public String arch;
+
+		public void setOs(String os) {
+			this.os = os;
+		}
+
+		public void setWs(String ws) {
+			this.ws = ws;
+		}
+
+		public void setArch(String arch) {
+			this.arch = arch;
+		}
+
+		public String toString() {
+			return ws + '.' + os + '.' + arch;
+		}
+	}
+
+	public static class AdviceElement {
+		public String kind;
+		public String file;
+
+		public void setKind(String kind) {
+			this.kind = kind;
+		}
+
+		public void setFile(String file) {
+			this.file = file;
+		}
+	}
+
+	private String flavor;
+	private String productFile;
+	private String executables;
+	private List<ConfigElement> configurations = new ArrayList<ConfigElement>(3);
+	private List<AdviceElement> advice = new ArrayList<AdviceElement>(3);
+
+	public void execute() throws BuildException {
+		try {
+			initializeRepositories(getInfo());
+		} catch (ProvisionException e) {
+			throw new BuildException("Unable to configure repositories", e); //$NON-NLS-1$
+		}
+
+		IProductDescriptor productDescriptor = null;
+		try {
+			productDescriptor = new ProductFile(productFile);
+		} catch (Exception e) {
+			if (productFile == null)
+				throw new IllegalArgumentException("unable to load product file"); //$NON-NLS-1$
+		}
+
+		if (flavor == null || flavor.startsWith(ANT_PROPERTY_PREFIX))
+			flavor = "tooling"; //$NON-NLS-1$
+
+		IPublisherAction action = new ProductAction(source, productDescriptor, flavor, executables != null ? new File(executables) : null);
+		new Publisher(getInfo()).publish(new IPublisherAction[] {action}, new NullProgressMonitor());
+	}
+
+	protected PublisherInfo getInfo() {
+		String[] configStrings = new String[configurations.size()];
+		for (int i = 0; i < configurations.size(); i++) {
+			configStrings[i] = configurations.get(i).toString();
+		}
+
+		PublisherInfo info = super.getInfo();
+		info.setConfigurations(configStrings);
+		processAdvice(info);
+		return info;
+	}
+
+	protected void processAdvice(PublisherInfo info) {
+		for (AdviceElement element : advice) {
+			if (element.kind == null || element.file == null)
+				continue;
+
+			if (element.kind.equals("featureVersions") || element.kind.equals("pluginVersions")) { //$NON-NLS-1$ //$NON-NLS-2$
+				VersionAdvice versionAdvice = new VersionAdvice();
+				versionAdvice.load(IInstallableUnit.NAMESPACE_IU_ID, element.file, element.kind.startsWith("features") ? ".feature.group" : null); //$NON-NLS-1$ //$NON-NLS-2$
+				info.addAdvice(versionAdvice);
+			}
+		}
+	}
+
+	public void setFlavor(String flavor) {
+		this.flavor = flavor;
+	}
+
+	public void setProductFile(String productFile) {
+		this.productFile = productFile;
+	}
+
+	public void setExecutables(String executables) {
+		this.executables = executables;
+	}
+
+	public void setSource(String source) {
+		super.source = source;
+	}
+
+	public void addConfiguredConfig(ConfigElement config) {
+		this.configurations.add(config);
+	}
+
+	public void addConfiguredAdvice(AdviceElement element) {
+		this.advice.add(element);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/PublisherTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/PublisherTask.java
new file mode 100644
index 0000000..b0671ef
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/PublisherTask.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.ant;
+
+import java.io.File;
+import org.apache.tools.ant.BuildException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.metadata.IVersionedId;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.publisher.eclipse.EclipseInstallAction;
+
+/**
+ * An Ant task to call the p2 publisher application.
+ * 
+ * @since 1.0
+ */
+public class PublisherTask extends AbstractPublishTask {
+
+	protected boolean inplace = false;
+	protected String[] configurations;
+	protected String mode;
+	private String flavor;
+	private String operation;
+	private String operationValue;
+	private String root;
+	private String rootVersion;
+	private String versionAdvice;
+	private String rootName;
+	private String executableName;
+	private IVersionedId[] topLevel;
+	private boolean start;
+	private String[] nonRootFiles;
+
+	/* (non-Javadoc)
+	 * @see org.apache.tools.ant.Task#execute()
+	 */
+	public void execute() throws BuildException {
+		try {
+			initialize(getInfo());
+		} catch (ProvisionException e) {
+			throw new BuildException("Unable to configure repositories", e); //$NON-NLS-1$
+		}
+		createVersionAdvice();
+		IPublisherAction[] actions = createActions();
+		//TODO Do something with publisher result
+		new Publisher(getInfo()).publish(actions, new NullProgressMonitor());
+	}
+
+	private IPublisherAction[] createActions() {
+		if (operation == null)
+			// TODO what to do in this case?
+			return new IPublisherAction[] {};
+		if (operation.equals("-update")) //$NON-NLS-1$
+			// TODO fix this up.  watch for circularities
+			//			return new IPublishingAction[] {new LocalUpdateSiteAction(operationValue)};
+			return new IPublisherAction[] {};
+		if (operation.equals("-source")) //$NON-NLS-1$
+			// TODO what to do in this case?
+			return new IPublisherAction[] {new EclipseInstallAction(operationValue, root, Version.parseVersion(rootVersion), rootName, executableName, flavor, topLevel, nonRootFiles, start)};
+		// TODO what to do in this case?
+		return new IPublisherAction[] {};
+	}
+
+	private void createVersionAdvice() {
+		if (versionAdvice == null)
+			return;
+		// TODO read the version advice and add the IVersionAdvice
+	}
+
+	protected void initialize(PublisherInfo info) throws ProvisionException {
+		if (inplace) {
+			File sourceLocation = new File(source);
+			if (metadataLocation == null)
+				metadataLocation = sourceLocation.toURI();
+			if (artifactLocation == null)
+				artifactLocation = sourceLocation.toURI();
+			info.setArtifactOptions(info.getArtifactOptions() | IPublisherInfo.A_INDEX | IPublisherInfo.A_PUBLISH);
+		} else
+			info.setArtifactOptions(info.getArtifactOptions() | IPublisherInfo.A_INDEX | IPublisherInfo.A_PUBLISH | IPublisherInfo.A_OVERWRITE);
+		initializeRepositories(info);
+	}
+
+	public void setBase(String value) {
+		source = value;
+	}
+
+	public void setBundles(String value) {
+		//TODO Remove - currently exists for compatibility with generator task
+	}
+
+	public void setConfig(String value) {
+		operation = "-config"; //$NON-NLS-1$
+		operationValue = value;
+	}
+
+	public void setInplace(String value) {
+		operation = "-inplace"; //$NON-NLS-1$
+		operationValue = value;
+	}
+
+	public void setSource(String location) {
+		super.source = location;
+		operation = "-source"; //$NON-NLS-1$
+		operationValue = location;
+	}
+
+	public void setUpdateSite(String value) {
+		operation = "-update"; //$NON-NLS-1$
+		operationValue = value;
+	}
+
+	/**
+	 * @deprecated
+	 */
+	public void setExe(String value) {
+		executableName = value;
+	}
+
+	public void setFeatures(String value) {
+		//TODO Remove - currently exists for compatibility with generator task
+	}
+
+	public void setFlavor(String value) {
+		flavor = value;
+	}
+
+	/**
+	 * @deprecated
+	 */
+	public void setLauncherConfig(String value) {
+		//TODO Remove - currently exists for compatibility with generator task
+	}
+
+	public void setNoDefaultIUs(String value) {
+		//TODO Remove - currently exists for compatibility with generator task
+	}
+
+	/**
+	 * @deprecated
+	 */
+	public void setP2OS(String value) {
+		//TODO Remove - currently exists for compatibility with generator task
+	}
+
+	public void setProductFile(String file) {
+		//TODO Remove - currently exists for compatibility with generator task
+	}
+
+	public void setPublishArtifactRepository(String value) {
+		getInfo().setArtifactOptions(getInfo().getArtifactOptions() | IPublisherInfo.A_INDEX);
+	}
+
+	public void setPublishArtifacts(String value) {
+		getInfo().setArtifactOptions(getInfo().getArtifactOptions() | IPublisherInfo.A_PUBLISH);
+	}
+
+	public void setRoot(String value) {
+		root = value;
+	}
+
+	public void setRootVersion(String value) {
+		rootVersion = value;
+	}
+
+	public void setMode(String value) {
+		mode = value;
+	}
+
+	public void setVersionAdvice(String value) {
+		versionAdvice = value;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/TaskMessages.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/TaskMessages.java
new file mode 100644
index 0000000..4001473
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/TaskMessages.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.publisher.ant;
+
+import org.eclipse.osgi.util.NLS;
+
+public class TaskMessages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.publisher.ant.messages";//$NON-NLS-1$
+
+	public static String exception_errorOccurredCallingGenerator;
+	public static String exception_errorArtifactRepo;
+	public static String exception_errorMetadataRepo;
+
+	static {
+		// load message values from bundle file
+		NLS.initializeMessages(BUNDLE_NAME, TaskMessages.class);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/messages.properties
new file mode 100644
index 0000000..7af715a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher.eclipse/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/messages.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2008, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+exception_errorOccurredCallingGenerator = An error occurred when calling generator.
+exception_errorArtifactRepo = Error setting artifact repository {0}.
+exception_errorMetadataRepo = Error setting metadata repository {0}.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.classpath b/eclipse/plugins/org.eclipse.equinox.p2.publisher/.classpath
index 834ea83..64c5e31 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.classpath
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/.classpath
@@ -3,6 +3,5 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" output="bin_ant" path="src_ant"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.externalToolBuilders/Build Metadata Generator Ant Tasks.launch b/eclipse/plugins/org.eclipse.equinox.p2.publisher/.externalToolBuilders/Build Metadata Generator Ant Tasks.launch
deleted file mode 100644
index ec9c3e8..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.externalToolBuilders/Build Metadata Generator Ant Tasks.launch	
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
-<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
-<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.equinox.p2.metadata.generator"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="4"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.equinox.p2.metadata.generator"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.equinox.p2.metadata.generator/scripts/buildExtraJAR.xml}"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value=""/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.externalToolBuilders/Build Publisher Ant Tasks.launch b/eclipse/plugins/org.eclipse.equinox.p2.publisher/.externalToolBuilders/Build Publisher Ant Tasks.launch
deleted file mode 100644
index 3c6003b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.externalToolBuilders/Build Publisher Ant Tasks.launch	
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
-<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
-<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?>
<launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1255396868921_12" label="working set" name="working set">
<item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.equinox.p2.publisher" type="4"/>
</launchConfigurationWorkingSet>}"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.equinox.p2.publisher/scripts/buildExtraJAR.xml"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.equinox.p2.publisher"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="true"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.equinox.p2.publisher/scripts/buildExtraJAR.xml}"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.project b/eclipse/plugins/org.eclipse.equinox.p2.publisher/.project
index 20aa4f4..b096e65 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/.project
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/.project
@@ -21,16 +21,6 @@
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>LaunchConfigHandle</key>
-					<value><project>/.externalToolBuilders/Build Publisher Ant Tasks.launch</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
 			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
 			<arguments>
 			</arguments>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF
index aae9cab..677b675 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.p2.publisher;singleton:=true
-Bundle-Version: 1.1.2.qualifier
+Bundle-Version: 1.2.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.publisher.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -10,33 +10,17 @@ Export-Package: org.eclipse.equinox.internal.p2.publisher;
   x-friends:="org.eclipse.equinox.p2.directorywatcher,
    org.eclipse.equinox.p2.touchpoint.eclipse,
    org.eclipse.equinox.p2.ui.sdk,
-   org.eclipse.equinox.p2.updatesite",
- org.eclipse.equinox.internal.p2.publisher.compatibility;x-internal:=true,
- org.eclipse.equinox.internal.p2.publisher.eclipse;
-  x-friends:="org.eclipse.equinox.p2.directorywatcher,
-   org.eclipse.equinox.p2.extensionlocation,
-   org.eclipse.equinox.p2.repository.tools,
-   org.eclipse.equinox.p2.updatesite",
- org.eclipse.equinox.internal.p2.swt.tools;x-internal:=true,
- org.eclipse.equinox.p2.publisher;x-friends:="org.eclipse.equinox.p2.directorywatcher,org.eclipse.equinox.p2.touchpoint.eclipse,org.eclipse.equinox.p2.updatesite",
- org.eclipse.equinox.p2.publisher.actions;x-friends:="org.eclipse.equinox.p2.updatesite,org.eclipse.equinox.p2.directorywatcher",
- org.eclipse.equinox.p2.publisher.eclipse;
-  x-friends:="org.eclipse.equinox.p2.directorywatcher,
-   org.eclipse.equinox.p2.extensionlocation,
-   org.eclipse.equinox.p2.touchpoint.eclipse,
    org.eclipse.equinox.p2.updatesite,
-   org.eclipse.equinox.p2.repository.tools",
+   org.eclipse.equinox.p2.publisher.eclipse",
+ org.eclipse.equinox.p2.publisher;x-friends:="org.eclipse.equinox.p2.directorywatcher,org.eclipse.equinox.p2.touchpoint.eclipse,org.eclipse.equinox.p2.updatesite,org.eclipse.pde.publishing",
+ org.eclipse.equinox.p2.publisher.actions;x-friends:="org.eclipse.equinox.p2.updatesite,org.eclipse.equinox.p2.directorywatcher,org.eclipse.pde.publishing",
  org.eclipse.equinox.spi.p2.publisher;x-friends:="org.eclipse.equinox.p2.updatesite"
 Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5,
  J2SE-1.4,
  CDC-1.1/Foundation-1.1
 Bundle-ActivationPolicy: lazy
-Import-Package: javax.xml.parsers,
- org.eclipse.equinox.app;version="1.0.0";resolution:=optional,
- org.eclipse.equinox.frameworkadmin;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.internal.frameworkadmin.equinox,
- org.eclipse.equinox.internal.frameworkadmin.utils,
+Import-Package: org.eclipse.equinox.app;version="1.0.0";resolution:=optional,
  org.eclipse.equinox.internal.p2.artifact.repository,
  org.eclipse.equinox.internal.p2.artifact.repository.simple,
  org.eclipse.equinox.internal.p2.core.helpers,
@@ -44,7 +28,6 @@ Import-Package: javax.xml.parsers,
  org.eclipse.equinox.internal.p2.metadata.expression,
  org.eclipse.equinox.internal.p2.metadata.index,
  org.eclipse.equinox.internal.p2.metadata.repository,
- org.eclipse.equinox.internal.provisional.frameworkadmin,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.metadata;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.metadata.expression;version="[2.0.0,3.0.0)",
@@ -54,15 +37,7 @@ Import-Package: javax.xml.parsers,
  org.eclipse.equinox.p2.repository.artifact;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.artifact.spi;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.metadata;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.simpleconfigurator.manipulator;version="[2.0.0,3.0.0)",
- org.eclipse.equinox.p2.repository.spi,
- org.eclipse.osgi.service.datalocation;version="1.2.0",
- org.eclipse.osgi.service.environment;version="1.1.0",
- org.eclipse.osgi.service.pluginconversion;version="1.0.0",
  org.eclipse.osgi.service.resolver;version="1.2.0",
  org.eclipse.osgi.util;version="1.1.0",
- org.osgi.framework;version="1.4.0",
- org.osgi.service.application;version="1.1.0",
- org.osgi.service.packageadmin;version="1.2.0",
- org.xml.sax,
- org.xml.sax.helpers
+ org.osgi.framework;version="1.6.0",
+ org.osgi.service.application;version="1.1.0"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher/build.properties
index cf42581..719d06a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2005, 2010 EclipseSource and others.
+#  Copyright (c) 2005, 2011 EclipseSource and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -10,20 +10,14 @@
 ###############################################################################
 source.. = src/
 output.. = bin/
-source.ant_tasks/publisher-ant.jar = src_ant/
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
                about.html,\
                profiles/,\
                plugin.xml,\
-               ant_tasks/publisher-ant.jar,\
                plugin.properties
 src.includes = about.html
-jars.compile.order = .,\
-                     ant_tasks/publisher-ant.jar
 javacWarnings..=+unusedThrown
-extra.ant_tasks/publisher-ant.jar = platform:/plugin/org.apache.ant
-jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar
 javacTarget=jsr14
 javacSource=1.5
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher/plugin.properties
index bdeeb80..dd1cf4e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/plugin.properties
@@ -8,5 +8,5 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-bundleName = Equinox Provisioning Publisher
+bundleName = Equinox Provisioning Publisher Infrastructure
 providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/plugin.xml b/eclipse/plugins/org.eclipse.equinox.p2.publisher/plugin.xml
deleted file mode 100644
index 210c1d9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/plugin.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.5"?>
-<plugin>
-	<extension id="InstallPublisher" point="org.eclipse.core.runtime.applications">
-		<application cardinality="1" thread="any" visible="true">
-			<run class="org.eclipse.equinox.p2.publisher.eclipse.InstallPublisherApplication" />
-		</application>
-	</extension>
-	<extension id="org.eclipse.equinox.p2.publisher.EclipseGenerator" point="org.eclipse.core.runtime.applications">
-		<application cardinality="1" thread="main" visible="true">
-			<run class="org.eclipse.equinox.internal.p2.publisher.compatibility.GeneratorApplication" />
-		</application>
-	</extension>
-	<extension id="ProductPublisher" point="org.eclipse.core.runtime.applications">
-		<application cardinality="1" thread="any" visible="true">
-			<run class="org.eclipse.equinox.p2.publisher.eclipse.ProductPublisherApplication" />
-		</application>
-	</extension>
-	<extension id="FeaturesAndBundlesPublisher" point="org.eclipse.core.runtime.applications">
-		<application cardinality="1" thread="any" visible="true">
-			<run class="org.eclipse.equinox.p2.publisher.eclipse.FeaturesAndBundlesPublisherApplication" />
-		</application>
-	</extension>
-
-	<extension point="org.eclipse.ant.core.antTasks">
-		<antTask
-			library="ant_tasks/publisher-ant.jar"
-			name="p2.publisher"
-			class="org.eclipse.equinox.internal.p2.publisher.ant.PublisherTask">
-		</antTask>
-    <antTask
-          class="org.eclipse.equinox.internal.p2.publisher.ant.FeaturesAndBundlesPublisherTask"
-          library="ant_tasks/publisher-ant.jar"
-          name="p2.publish.featuresAndBundles">
-    </antTask>
-    <antTask
-          class="org.eclipse.equinox.internal.p2.publisher.ant.ProductPublisherTask"
-          library="ant_tasks/publisher-ant.jar"
-          name="p2.publish.product">
-    </antTask>
-	</extension>
-
-	<extension point="org.eclipse.ant.core.extraClasspathEntries">
-		<extraClasspathEntry library="ant_tasks/publisher-ant.jar"/>
-	</extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml
index 745ba5c..7b068e9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.publisher</artifactId>
-  <version>1.1.2.qualifier</version>
+  <version>1.2.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/scripts/buildExtraJAR.xml b/eclipse/plugins/org.eclipse.equinox.p2.publisher/scripts/buildExtraJAR.xml
deleted file mode 100644
index a34be7a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/scripts/buildExtraJAR.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.equinox.p2.metadata.generator" default="default" basedir="..">
-
-	<target name="init" depends="properties">
-		<property name="plugin" value="org.eclipse.equinox.p2.publisher"/>
-		<property name="temp.folder" value="${basedir}/temp.folder"/>
-		<property name="plugin.destination" value="${basedir}"/>
-		<property name="build.result.folder" value="${basedir}/ant_tasks"/>
-		<property name="version.suffix" value="_1.0.0"/>
-	</target>
-
-	<target name="properties" if="eclipse.running">
-		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
-	</target>
-
-	<target name="buildScripts" depends="init" description="Build from generated scripts">
-		<tstamp/>
-		<eclipse.buildScript elements="plugin@${plugin}" 
-			buildDirectory="${buildDirectory}" 
-			configInfo="*,*,*" 
-			baseLocation="${baseLocation}" 
-			buildingOSGi="true" 
-			outputUpdateJars="false"
-			pluginpath="${basedir}"
-			forceContextQualifier="z${DSTAMP}${TSTAMP}"
-			/>
-		<delete file="${basedir}/ant_tasks/publisher-ant.jar" failonerror="false"/>
-		<ant antfile="${basedir}/build.xml" target="ant_tasks/publisher-ant.jar"/>
-	</target>
-
-	<target name="default" description="Jar up the binaries that were compiled by the jdt builder" >
-		<mkdir dir="${basedir}/ant_tasks" />
-		<delete file="${basedir}/ant_tasks/publisher-ant.jar" failonerror="false"/>
-		<jar destfile="${basedir}/ant_tasks/publisher-ant.jar" basedir="bin_ant"/>
-	</target>
-</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Activator.java
index 80380db..46297fe 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -13,7 +13,7 @@ import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
 public class Activator implements BundleActivator {
-	public static BundleContext context = null;
+	private static BundleContext context = null;
 	public static String ID = "org.eclipse.equinox.p2.publisher"; //$NON-NLS-1$
 
 	public static BundleContext getContext() {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/FileSetDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/FileSetDescriptor.java
index aa1c2d2..64527f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/FileSetDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/FileSetDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Messages.java
index 52637b1..af8eeb7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -17,6 +17,7 @@ public class Messages extends NLS {
 	public static String exception_stateAddition;
 	public static String exception_errorReadingManifest;
 	public static String exception_errorLoadingManifest;
+	public static String exception_errorLoadingProductFile;
 	public static String exception_noPluginConverter;
 	public static String exception_noArtifactRepo;
 	public static String exception_noMetadataRepo;
@@ -30,6 +31,8 @@ public class Messages extends NLS {
 	public static String message_generatingMetadata;
 	public static String message_generationCompleted;
 	public static String message_noSimpleconfigurator;
+	public static String message_resultException;
+	public static String message_publisherArguments;
 
 	public static String exception_artifactRepoNoAppendDestroysInput;
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/QuotedTokenizer.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/QuotedTokenizer.java
index d66af45..ff7ba9d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/QuotedTokenizer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/QuotedTokenizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2009, 2010 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/compatibility/GeneratorApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/compatibility/GeneratorApplication.java
deleted file mode 100644
index f7bed22..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/compatibility/GeneratorApplication.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2010 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.p2.publisher.compatibility;
-
-import java.io.File;
-import java.util.*;
-import org.eclipse.core.runtime.URIUtil;
-import org.eclipse.equinox.app.IApplication;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.osgi.service.application.*;
-
-/**
- * @since 1.1
- */
-public class GeneratorApplication implements IApplication {
-	protected static final String APP_ID = "app.id"; //$NON-NLS-1$
-
-	public static final String UPDATE_SITE_APPLICATION = "org.eclipse.equinox.p2.publisher.UpdateSitePublisher"; //$NON-NLS-1$
-	public static final String INSTALL_APPLICATION = "org.eclipse.equinox.p2.publisher.InstallPublisher"; //$NON-NLS-1$
-	public static final String FEATURES_BUNDLES_APPLICATION = "org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher"; //$NON-NLS-1$
-
-	public Object start(IApplicationContext context) throws Exception {
-		return run((String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS));
-	}
-
-	public void stop() {
-		// TODO Auto-generated method stub
-	}
-
-	public Object run(String[] arguments) {
-		Map<String, Object> argumentMap = parseArguments(arguments);
-		return launchApplication(argumentMap);
-	}
-
-	protected Object launchApplication(Map<String, Object> applicationMap) {
-		String applicationId = (String) applicationMap.get(APP_ID);
-		String filter = "(service.pid=" + applicationId + ")"; //$NON-NLS-1$//$NON-NLS-2$
-		ApplicationDescriptor descriptor = (ApplicationDescriptor) ServiceHelper.getService(Activator.getContext(), ApplicationDescriptor.class.getName(), filter);
-		try {
-			ApplicationHandle handle = descriptor.launch(applicationMap);
-			return handle.getExitValue(0);
-		} catch (ApplicationException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	private Map<String, Object> parseArguments(String[] arguments) {
-		Map<String, Object> applicationMap = new HashMap<String, Object>();
-		Map<String, String> args = new HashMap<String, String>(arguments.length);
-		for (int i = 0; i < arguments.length; i++) {
-			if (i == arguments.length - 1 || arguments[i + 1].startsWith(IGeneratorConstants.DASH))
-				args.put(arguments[i], null);
-			else
-				args.put(arguments[i], arguments[++i]);
-		}
-
-		//adjust the short forms
-		if (args.containsKey(IGeneratorConstants.AR))
-			args.put(IGeneratorConstants.ARTIFACT_REPO, args.remove(IGeneratorConstants.AR));
-		if (args.containsKey(IGeneratorConstants.MR))
-			args.put(IGeneratorConstants.METADATA_REPO, args.remove(IGeneratorConstants.MR));
-		if (args.containsKey(IGeneratorConstants.PA))
-			args.put(IGeneratorConstants.PUBLISH_ARTIFACTS, args.remove(IGeneratorConstants.PA));
-		if (args.containsKey(IGeneratorConstants.PAR))
-			args.put(IGeneratorConstants.PUBLISH_ATIFACT_REPOSITORY, args.remove(IGeneratorConstants.PAR));
-
-		if (args.containsKey(IGeneratorConstants.ROOT)) {
-			String rootId = args.remove(IGeneratorConstants.ROOT);
-			args.put(IGeneratorConstants.IU, rootId);
-			args.put(IGeneratorConstants.ID, rootId);
-		}
-
-		if (args.containsKey(IGeneratorConstants.ROOT_VERSION))
-			args.put(IGeneratorConstants.VERSION, args.remove(IGeneratorConstants.ROOT_VERSION));
-
-		String source = null;
-		// -inplace and -updateSite become -source, and imply -append
-		if (args.containsKey(IGeneratorConstants.UPDATE_SITE))
-			source = args.remove(IGeneratorConstants.UPDATE_SITE);
-		if (args.containsKey(IGeneratorConstants.INPLACE))
-			source = args.remove(IGeneratorConstants.INPLACE);
-		if (source != null) {
-			args.put(IGeneratorConstants.SOURCE, source);
-			args.put(IGeneratorConstants.APPEND, null);
-
-			//if not specified, repo locations are based on source
-			String repoLocation = URIUtil.toUnencodedString(new File(source).toURI());
-			if (!args.containsKey(IGeneratorConstants.ARTIFACT_REPO))
-				args.put(IGeneratorConstants.ARTIFACT_REPO, repoLocation);
-			if (!args.containsKey(IGeneratorConstants.METADATA_REPO))
-				args.put(IGeneratorConstants.METADATA_REPO, repoLocation);
-		}
-
-		File base = new File(args.get(IGeneratorConstants.SOURCE));
-		File configuration = new File(base, "configuration"); //$NON-NLS-1$
-		if (configuration.exists()) {
-			applicationMap.put(APP_ID, INSTALL_APPLICATION);
-		} else if (args.containsKey(IGeneratorConstants.SITE)) {
-			applicationMap.put(APP_ID, UPDATE_SITE_APPLICATION);
-		} else if (args.containsKey(IGeneratorConstants.CONFIG)) {
-			applicationMap.put(APP_ID, INSTALL_APPLICATION);
-		} else {
-			applicationMap.put(APP_ID, FEATURES_BUNDLES_APPLICATION);
-		}
-
-		applicationMap.put(IApplicationContext.APPLICATION_ARGS, flattenMap(args));
-		return applicationMap;
-	}
-
-	private String[] flattenMap(Map<String, String> map) {
-		ArrayList<String> list = new ArrayList<String>(map.size());
-		for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {
-			String key = iterator.next();
-			String value = map.get(key);
-			list.add(key);
-			if (value != null)
-				list.add(value);
-		}
-		return list.toArray(new String[list.size()]);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/compatibility/IGeneratorConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/compatibility/IGeneratorConstants.java
deleted file mode 100644
index 30bd49c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/compatibility/IGeneratorConstants.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2010 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.p2.publisher.compatibility;
-
-/**
- * @since 1.1
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface IGeneratorConstants {
-	public static final String DASH = "-"; //$NON-NLS-1$
-
-	//arguments understood by the old metadata generator application
-	public static final String PUBLISH_ARTIFACTS = "-publishArtifacts"; //$NON-NLS-1$
-	public static final String PA = "-pa"; //$NON-NLS-1$
-	public static final String PUBLISH_ATIFACT_REPOSITORY = "-publishArtifactRepository"; //$NON-NLS-1$
-	public static final String PAR = "-par"; //$NON-NLS-1$
-	public static final String APPEND = "-append"; //$NON-NLS-1$
-	public static final String NO_DEFAULT_IUS = "-noDefaultIUs"; //$NON-NLS-1$
-	public static final String COMPRESS = "-compress"; //$NON-NLS-1$
-	public static final String REUSE_PACK200 = "-reusePack200Files"; //$NON-NLS-1$
-	public static final String SOURCE = "-source"; //$NON-NLS-1$
-	public static final String INPLACE = "-inplace"; //$NON-NLS-1$
-	public static final String CONFIG = "-config"; //$NON-NLS-1$
-	public static final String UPDATE_SITE = "-updateSite"; //$NON-NLS-1$
-	public static final String EXE = "-exe"; //$NON-NLS-1$
-	public static final String LAUNCHER_CONFIG = "-launcherConfig"; //$NON-NLS-1$
-	public static final String METADATA_REPO_NAME = "-metadataRepositoryName"; //$NON-NLS-1$
-	public static final String METADATA_REPO = "-metadataRepository"; //$NON-NLS-1$
-	public static final String MR = "-mr"; //$NON-NLS-1$
-	public static final String ARTIFACT_REPO = "-artifactRepository"; //$NON-NLS-1$
-	public static final String AR = "-ar"; //$NON-NLS-1$
-	public static final String ARTIFACT_REPO_NAME = "-artifactRepositoryName"; //$NON-NLS-1$
-	public static final String FLAVOR = "-flavor"; //$NON-NLS-1$
-	public static final String PRODUCT_FILE = "-productFile"; //$NON-NLS-1$
-	public static final String FEATURES = "-features"; //$NON-NLS-1$
-	public static final String BUNDLES = "-bundles"; //$NON-NLS-1$
-	public static final String BASE = "-base"; //$NON-NLS-1$
-	public static final String ROOT = "-root"; //$NON-NLS-1$
-	public static final String ROOT_VERSION = "-rootVersion"; //$NON-NLS-1$
-	public static final String P2_OS = "-p2.os"; //$NON-NLS-1$
-	public static final String SITE = "-site"; //$NON-NLS-1$
-	public static final String IU = "-iu"; //$NON-NLS-1$
-	public static final String ID = "-id"; //$NON-NLS-1$
-	public static final String VERSION = "-version"; //$NON-NLS-1$
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java
deleted file mode 100644
index 5878b64..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/BrandingIron.java
+++ /dev/null
@@ -1,544 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- * 	IBM Corporation - initial API and implementation
- * 	Code 9 - Additional function and fixes
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import java.io.*;
-import org.eclipse.equinox.internal.frameworkadmin.utils.Utils;
-import org.eclipse.equinox.internal.p2.swt.tools.IconExe;
-
-/**
- *
- */
-public class BrandingIron {
-	private static final String MARKER_NAME = "%EXECUTABLE_NAME%"; //$NON-NLS-1$
-	private static final String BUNDLE_NAME = "%BUNDLE_NAME%"; //$NON-NLS-1$
-	private static final String ICON_NAME = "%ICON_NAME%"; //$NON-NLS-1$
-	private static final String MARKER_KEY = "<key>CFBundleExecutable</key>"; //$NON-NLS-1$
-	private static final String BUNDLE_KEY = "<key>CFBundleName</key>"; //$NON-NLS-1$
-	private static final String ICON_KEY = "<key>CFBundleIconFile</key>"; //$NON-NLS-1$
-	private static final String STRING_START = "<string>"; //$NON-NLS-1$
-	private static final String STRING_END = "</string>"; //$NON-NLS-1$
-	private static final String XDOC_ICON = "-Xdock:icon=../Resources/Eclipse.icns"; //$NON-NLS-1$
-	private static final String XDOC_ICON_PREFIX = "-Xdock:icon=../Resources/"; //$NON-NLS-1$
-
-	private String[] icons = null;
-	private String root;
-	private String name;
-	private String os = "win32"; //$NON-NLS-1$
-	private boolean brandIcons = true;
-
-	public void setName(String value) {
-		name = value;
-	}
-
-	public void setIcons(String[] value) {
-		icons = value;
-	}
-
-	public void setIcons(String value) {
-		icons = Utils.getTokens(value, ",");//$NON-NLS-1$
-		if (icons[0].startsWith("${")) { //$NON-NLS-1$
-			if (icons.length > 1) {
-				String[] temp = new String[icons.length - 1];
-				System.arraycopy(icons, 1, temp, 0, temp.length);
-				icons = temp;
-			} else {
-				icons = null;
-			}
-		}
-		//trim whitespace
-		if (icons != null) {
-			for (int i = 0; i < icons.length; i++) {
-				icons[i] = icons[i].trim();
-			}
-		}
-	}
-
-	public void setRoot(String value) {
-		root = value;
-	}
-
-	public void brand() throws Exception {
-		// if the name property is not set it will be ${launcher.name} so just bail.
-		if (name.startsWith("${")) //$NON-NLS-1$
-			return;
-
-		if (icons == null || icons[0].startsWith("${")) //$NON-NLS-1$
-			brandIcons = false;
-
-		// if the root does not exists (happens in some packaging cases) or 
-		// there is already a file with target name and we don't need to update its icons, don't do anything
-		String testName = os.equals("win32") ? name + ".exe" : name; //$NON-NLS-1$ //$NON-NLS-2$
-		if (!new File(root).exists() || (!brandIcons && new File(root, testName).exists()))
-			return;
-
-		if ("win32".equals(os)) //$NON-NLS-1$
-			brandWindows();
-		else if ("linux".equals(os)) //$NON-NLS-1$
-			brandLinux();
-		else if ("solaris".equals(os)) //$NON-NLS-1$
-			brandSolaris();
-		else if ("macosx".equals(os)) //$NON-NLS-1$
-			brandMac();
-		else if ("aix".equals(os)) //$NON-NLS-1$
-			brandAIX();
-		else if ("hpux".equals(os)) //$NON-NLS-1$
-			brandHPUX();
-		else
-			renameLauncher();
-	}
-
-	private void brandAIX() {
-		renameLauncher();
-	}
-
-	private void brandHPUX() {
-		renameLauncher();
-	}
-
-	private void brandLinux() throws Exception {
-		renameLauncher();
-		if (brandIcons)
-			copy(new File(icons[0]), new File(root, "icon.xpm")); //$NON-NLS-1$
-	}
-
-	private void brandSolaris() throws Exception {
-		renameLauncher();
-		if (brandIcons == false)
-			return;
-
-		for (int i = 0; i < icons.length; i++) {
-			String icon = icons[i];
-			if (icon.endsWith(".l.pm")) //$NON-NLS-1$
-				copy(new File(icon), new File(root, name + ".l.pm")); //$NON-NLS-1$
-			if (icon.endsWith(".m.pm")) //$NON-NLS-1$
-				copy(new File(icon), new File(root, name + ".m.pm")); //$NON-NLS-1$
-			if (icon.endsWith(".s.pm")) //$NON-NLS-1$
-				copy(new File(icon), new File(root, name + ".s.pm")); //$NON-NLS-1$
-			if (icon.endsWith(".t.pm")) //$NON-NLS-1$
-				copy(new File(icon), new File(root, name + ".t.pm")); //$NON-NLS-1$
-		}
-	}
-
-	private void brandMac() throws Exception {
-		//Initially the files are in: <root>/Eclipse.app/ 
-		//and they must appear in <root>/MyAppName.app/
-		//Because java does not support the rename of a folder, files are copied.
-
-		//Initialize the target folders
-		String appName = name;
-		if (appName.equals("eclipse")) //$NON-NLS-1$
-			appName = "Eclipse"; //$NON-NLS-1$
-		else if (appName.equals("launcher")) //$NON-NLS-1$
-			appName = "Launcher"; //$NON-NLS-1$
-
-		String target = root + '/' + appName + ".app/Contents"; //$NON-NLS-1$
-		new File(target).mkdirs();
-		new File(target + "/MacOS").mkdirs(); //$NON-NLS-1$
-		new File(target + "/Resources").mkdirs(); //$NON-NLS-1$
-
-		String initialRoot = root + "/Launcher.app/Contents"; //$NON-NLS-1$
-		if (!new File(initialRoot).exists())
-			initialRoot = root + "/Eclipse.app/Contents"; //$NON-NLS-1$
-		copyMacLauncher(initialRoot, target);
-		String iconName = ""; //$NON-NLS-1$
-		File splashApp = new File(initialRoot, "Resources/Splash.app"); //$NON-NLS-1$
-		if (brandIcons) {
-			File icon = new File(icons[0]);
-			iconName = icon.getName();
-			copy(icon, new File(target + "/Resources/" + icon.getName())); //$NON-NLS-1$
-			new File(initialRoot + "/Resources/Eclipse.icns").delete(); //$NON-NLS-1$
-			if (!splashApp.exists())
-				new File(initialRoot + "/Resources/").delete(); //$NON-NLS-1$
-		}
-		copyMacIni(initialRoot, target, iconName);
-		modifyInfoPListFile(initialRoot, target, iconName);
-		if (splashApp.exists()) {
-			brandMacSplash(initialRoot, target, iconName);
-		}
-
-		File rootFolder = getCanonicalFile(new File(initialRoot));
-		File targetFolder = getCanonicalFile(new File(target));
-		if (!rootFolder.equals(targetFolder)) {
-			rootFolder.delete();
-			if (rootFolder.exists()) {
-				//if the rootFolder still exists, its because there were other files that need to be moved over
-				moveContents(rootFolder, targetFolder);
-			}
-			rootFolder.getParentFile().delete();
-		}
-	}
-
-	/**
-	 * Brand the splash.app Info.plist and  link or copy the mac launcher.
-	 * It is assumed that the mac launcher has been branded already.
-	 * @param initialRoot
-	 * @param target
-	 * @param iconName
-	 */
-	private void brandMacSplash(String initialRoot, String target, String iconName) {
-		String splashContents = "/Resources/Splash.app/Contents"; //$NON-NLS-1$
-		modifyInfoPListFile(initialRoot + splashContents, target + splashContents, iconName);
-
-		//link the MacOS launcher for the splash app
-		int result = -1;
-		String osName = System.getProperty("os.name"); //$NON-NLS-1$
-		if (osName != null && !osName.startsWith("Windows")) { //$NON-NLS-1$
-			try {
-				String[] command = new String[] {"ln", "-sf", "../../../MacOS/" + name, "MacOS/" + name}; //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
-				File linkDir = new File(target, splashContents);
-				Process proc = Runtime.getRuntime().exec(command, null, linkDir);
-				result = proc.waitFor();
-			} catch (IOException e) {
-				// ignore
-			} catch (InterruptedException e) {
-				// ignore
-			}
-		}
-
-		if (result != 0) {
-			//ln failed, or we are on windows, just copy the executable instead
-			File macOSDir = new File(target, "MacOS"); //$NON-NLS-1$
-			File splashMacOSDir = new File(target, splashContents + "/MacOS"); //$NON-NLS-1$
-			splashMacOSDir.mkdirs();
-			try {
-				File targetFile = new File(splashMacOSDir, name);
-				copy(new File(macOSDir, name), targetFile);
-				try {
-					Runtime.getRuntime().exec(new String[] {"chmod", "755", targetFile.getAbsolutePath()}); //$NON-NLS-1$ //$NON-NLS-2$
-				} catch (IOException e) {
-					// ignore
-				}
-			} catch (IOException e) {
-				System.out.println("Could not copy macosx splash launcher"); //$NON-NLS-1$
-			}
-		}
-	}
-
-	private void moveContents(File source, File target) {
-		if (!source.exists())
-			return;
-
-		try {
-			if (source.getCanonicalFile().equals(target.getCanonicalFile()))
-				return;
-		} catch (IOException e) {
-			System.out.println("Could not copy macosx resources."); //$NON-NLS-1$
-			return;
-		}
-
-		target.getParentFile().mkdirs();
-		if (source.isDirectory()) {
-			target.mkdirs();
-			File[] contents = source.listFiles();
-			for (int i = 0; i < contents.length; i++) {
-				File dest = new File(target, contents[i].getName());
-				if (contents[i].isFile())
-					contents[i].renameTo(dest);
-				else
-					moveContents(contents[i], dest);
-			}
-			source.delete();
-		} else {
-			source.renameTo(target);
-		}
-	}
-
-	private void brandWindows() throws Exception {
-		File templateLauncher = new File(root, name + ".exe"); //$NON-NLS-1$
-		if (!templateLauncher.exists())
-			templateLauncher = new File(root, "launcher.exe"); //$NON-NLS-1$
-		if (!templateLauncher.exists())
-			templateLauncher = new File(root, "eclipse.exe"); //$NON-NLS-1$
-		if (brandIcons) {
-			if (templateLauncher.exists()) {
-				String[] args = new String[icons.length + 1];
-				args[0] = templateLauncher.getAbsolutePath();
-				System.arraycopy(icons, 0, args, 1, icons.length);
-				IconExe.main(args);
-			}
-		}
-		if (templateLauncher.exists() && !templateLauncher.getName().equals(name + ".exe")) //$NON-NLS-1$
-			templateLauncher.renameTo(new File(root, name + ".exe")); //$NON-NLS-1$
-	}
-
-	private void renameLauncher() {
-		if (!new File(root, "launcher").renameTo(new File(root, name))) //$NON-NLS-1$
-			new File(root, "eclipse").renameTo(new File(root, name)); //$NON-NLS-1$
-	}
-
-	private void copyMacLauncher(String initialRoot, String target) {
-		String targetLauncher = target + "/MacOS/"; //$NON-NLS-1$
-		File launcher = getCanonicalFile(new File(initialRoot + "/MacOS/launcher")); //$NON-NLS-1$
-		File eclipseLauncher = getCanonicalFile(new File(initialRoot + "/MacOS/eclipse")); //$NON-NLS-1$
-		File targetFile = getCanonicalFile(new File(targetLauncher, name));
-		if (!launcher.exists()) {
-			launcher = eclipseLauncher;
-		} else if (eclipseLauncher.exists() && !targetFile.equals(eclipseLauncher)) {
-			//we may actually have both if exporting from the mac
-			eclipseLauncher.delete();
-		}
-		try {
-			if (targetFile.equals(launcher)) {
-				try {
-					//Force the executable bit on the exe because it has been lost when copying the file
-					Runtime.getRuntime().exec(new String[] {"chmod", "755", targetFile.getAbsolutePath()}); //$NON-NLS-1$ //$NON-NLS-2$
-				} catch (IOException e) {
-					//ignore
-				}
-				return;
-			}
-			copy(launcher, targetFile);
-		} catch (IOException e) {
-			System.out.println("Could not copy macosx launcher"); //$NON-NLS-1$
-			return;
-		}
-		try {
-			//Force the executable bit on the exe because it has been lost when copying the file
-			Runtime.getRuntime().exec(new String[] {"chmod", "755", targetFile.getAbsolutePath()}); //$NON-NLS-1$ //$NON-NLS-2$
-		} catch (IOException e) {
-			//ignore
-		}
-		launcher.delete();
-		launcher.getParentFile().delete();
-	}
-
-	private File getCanonicalFile(File file) {
-		try {
-			return file.getCanonicalFile();
-		} catch (IOException e) {
-			return file;
-		}
-	}
-
-	private void copyMacIni(String initialRoot, String target, String iconName) {
-		// 3 possibilities, in order of preference:
-		// rcp.app/Contents/MacOS/rcp.ini   		(targetFile)
-		// Eclipse.app/Contents/MacOS/rcp.ini		(brandedIni)
-		// Eclipse.app/Contents/MacOs/eclipse.ini	(ini)
-		File targetFile = getCanonicalFile(new File(target, "/MacOS/" + name + ".ini")); //$NON-NLS-1$//$NON-NLS-2$
-		File brandedIni = getCanonicalFile(new File(initialRoot, "/MacOS/" + name + ".ini")); //$NON-NLS-1$ //$NON-NLS-2$
-		File ini = getCanonicalFile(new File(initialRoot, "/MacOS/eclipse.ini")); //$NON-NLS-1$
-
-		if (targetFile.exists()) {
-			//an ini already exists at the target, use that
-			if (brandedIni.exists() && !brandedIni.equals(targetFile))
-				brandedIni.delete();
-			if (ini.exists() && !ini.equals(targetFile))
-				ini.delete();
-			ini = targetFile;
-		} else if (brandedIni.exists()) {
-			//take the one that is already branded
-			if (ini.exists() && !ini.equals(brandedIni))
-				ini.delete();
-			ini = brandedIni;
-		} else if (!ini.exists()) {
-			return;
-		}
-
-		StringBuffer buffer;
-		try {
-			buffer = readFile(ini);
-		} catch (IOException e) {
-			System.out.println("Impossible to brand ini file"); //$NON-NLS-1$
-			return;
-		}
-
-		if (iconName.length() > 0) {
-			int xdoc = scan(buffer, 0, XDOC_ICON);
-			if (xdoc != -1) {
-				String icns = XDOC_ICON_PREFIX + iconName;
-				buffer.replace(xdoc, xdoc + XDOC_ICON.length(), icns);
-			}
-		}
-
-		try {
-			transferStreams(new ByteArrayInputStream(buffer.toString().getBytes()), new FileOutputStream(targetFile));
-			if (!ini.equals(targetFile))
-				ini.delete();
-		} catch (FileNotFoundException e) {
-			System.out.println("Impossible to brand ini file"); //$NON-NLS-1$
-			return;
-		} catch (IOException e) {
-			System.out.println("Impossible to brand ini file"); //$NON-NLS-1$
-			return;
-		}
-	}
-
-	private void modifyInfoPListFile(String initialRoot, String targetRoot, String iconName) {
-		File infoPList = new File(initialRoot, "Info.plist"); //$NON-NLS-1$
-		StringBuffer buffer;
-		try {
-			buffer = readFile(infoPList);
-		} catch (IOException e) {
-			System.out.println("Impossible to brand info.plist file"); //$NON-NLS-1$
-			return;
-		}
-		int exePos = scan(buffer, 0, MARKER_NAME);
-		if (exePos != -1)
-			buffer.replace(exePos, exePos + MARKER_NAME.length(), name);
-		else {
-			exePos = scan(buffer, 0, MARKER_KEY);
-			if (exePos != -1) {
-				int start = scan(buffer, exePos + MARKER_KEY.length(), STRING_START);
-				int end = scan(buffer, start + STRING_START.length(), STRING_END);
-				if (start > -1 && end > start) {
-					buffer.replace(start + STRING_START.length(), end, name);
-				}
-			}
-		}
-
-		int bundlePos = scan(buffer, 0, BUNDLE_NAME);
-		if (bundlePos != -1)
-			buffer.replace(bundlePos, bundlePos + BUNDLE_NAME.length(), name);
-		else {
-			exePos = scan(buffer, 0, BUNDLE_KEY);
-			if (exePos != -1) {
-				int start = scan(buffer, exePos + BUNDLE_KEY.length(), STRING_START);
-				int end = scan(buffer, start + STRING_START.length(), STRING_END);
-				if (start > -1 && end > start) {
-					buffer.replace(start + STRING_START.length(), end, name);
-				}
-			}
-		}
-
-		int iconPos = scan(buffer, 0, ICON_NAME);
-		if (iconPos != -1)
-			buffer.replace(iconPos, iconPos + ICON_NAME.length(), iconName);
-		else {
-			exePos = scan(buffer, 0, ICON_KEY);
-			if (exePos != -1) {
-				int start = scan(buffer, exePos + ICON_KEY.length(), STRING_START);
-				int end = scan(buffer, start + STRING_START.length(), STRING_END);
-				if (start > -1 && end > start) {
-					buffer.replace(start + STRING_START.length(), end, iconName);
-				}
-			}
-		}
-
-		File target = null;
-		try {
-			target = new File(targetRoot, "Info.plist"); //$NON-NLS-1$
-			target.getParentFile().mkdirs();
-			transferStreams(new ByteArrayInputStream(buffer.toString().getBytes()), new FileOutputStream(target));
-		} catch (FileNotFoundException e) {
-			System.out.println("Impossible to brand info.plist file"); //$NON-NLS-1$
-			return;
-		} catch (IOException e) {
-			System.out.println("Impossible to brand info.plist file"); //$NON-NLS-1$
-			return;
-		}
-		try {
-			if (!infoPList.getCanonicalFile().equals(target.getCanonicalFile()))
-				infoPList.delete();
-		} catch (IOException e) {
-			//ignore
-		}
-	}
-
-	/**
-	 * Transfers all available bytes from the given input stream to the given output stream. 
-	 * Regardless of failure, this method closes both streams.
-	 * @throws IOException 
-	 */
-	public void copy(File source, File destination) throws IOException {
-		InputStream in = null;
-		OutputStream out = null;
-		try {
-			in = new BufferedInputStream(new FileInputStream(source));
-			out = new BufferedOutputStream(new FileOutputStream(destination));
-			final byte[] buffer = new byte[8192];
-			while (true) {
-				int bytesRead = -1;
-				bytesRead = in.read(buffer);
-				if (bytesRead == -1)
-					break;
-				out.write(buffer, 0, bytesRead);
-			}
-		} finally {
-			try {
-				if (in != null)
-					in.close();
-			} finally {
-				if (out != null)
-					out.close();
-			}
-		}
-	}
-
-	private int scan(StringBuffer buf, int start, String targetName) {
-		return scan(buf, start, new String[] {targetName});
-	}
-
-	private int scan(StringBuffer buf, int start, String[] targets) {
-		for (int i = start; i < buf.length(); i++) {
-			for (int j = 0; j < targets.length; j++) {
-				if (i < buf.length() - targets[j].length()) {
-					String match = buf.substring(i, i + targets[j].length());
-					if (targets[j].equalsIgnoreCase(match))
-						return i;
-				}
-			}
-		}
-		return -1;
-	}
-
-	private StringBuffer readFile(File targetName) throws IOException {
-		InputStreamReader reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(targetName)));
-		StringBuffer result = new StringBuffer();
-		char[] buf = new char[4096];
-		int count;
-		try {
-			count = reader.read(buf, 0, buf.length);
-			while (count != -1) {
-				result.append(buf, 0, count);
-				count = reader.read(buf, 0, buf.length);
-			}
-		} finally {
-			try {
-				reader.close();
-			} catch (IOException e) {
-				// ignore exceptions here
-			}
-		}
-		return result;
-	}
-
-	private void transferStreams(InputStream source, OutputStream destination) throws IOException {
-		source = new BufferedInputStream(source);
-		destination = new BufferedOutputStream(destination);
-		try {
-			byte[] buffer = new byte[8192];
-			while (true) {
-				int bytesRead = -1;
-				if ((bytesRead = source.read(buffer)) == -1)
-					break;
-				destination.write(buffer, 0, bytesRead);
-			}
-		} finally {
-			try {
-				source.close();
-			} catch (IOException e) {
-				// ignore
-			}
-			try {
-				destination.close();
-			} catch (IOException e) {
-				// ignore
-			}
-		}
-	}
-
-	public void setOS(String value) {
-		os = value;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/DataLoader.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/DataLoader.java
deleted file mode 100644
index b6244ce..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/DataLoader.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.*;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser;
-import org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.*;
-import org.eclipse.equinox.simpleconfigurator.manipulator.SimpleConfiguratorManipulator;
-import org.osgi.framework.Constants;
-
-public class DataLoader {
-
-	private final static String FILTER_OBJECTCLASS = "(" + Constants.OBJECTCLASS + "=" + FrameworkAdmin.class.getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	private final static String filterFwName = "(" + FrameworkAdmin.SERVICE_PROP_KEY_FW_NAME + "=Equinox)"; //$NON-NLS-1$ //$NON-NLS-2$
-	//String filterFwVersion = "(" + FrameworkAdmin.SERVICE_PROP_KEY_FW_VERSION + "=" + props.getProperty("equinox.fw.version") + ")";
-	private final static String filterLauncherName = "(" + FrameworkAdmin.SERVICE_PROP_KEY_LAUNCHER_NAME + "=Eclipse.exe)"; //$NON-NLS-1$ //$NON-NLS-2$
-	//String filterLauncherVersion = "(" + FrameworkAdmin.SERVICE_PROP_KEY_LAUNCHER_VERSION + "=" + props.getProperty("equinox.launcher.version") + ")";
-	private final static String frameworkAdminFillter = "(&" + FILTER_OBJECTCLASS + filterFwName + filterLauncherName + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-
-	private static final String ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL = "org.eclipse.equinox.simpleconfigurator.configUrl"; //$NON-NLS-1$
-
-	private Manipulator manipulator;
-	private File configurationLocation;
-
-	/**
-	 * 
-	 * @param configurationLocation configuration file (i.e. config.ini).
-	 * @param executableLocation executable file (i.e. eclipse.exe). 
-	 */
-	public DataLoader(File configurationLocation, File executableLocation) {
-		this.configurationLocation = configurationLocation;
-		initializeFrameworkManipulator(configurationLocation.getParentFile(), executableLocation);
-	}
-
-	private void initializeFrameworkManipulator(File config, File executable) {
-		getFrameworkManipulator();
-
-		LauncherData launcherData = manipulator.getLauncherData();
-		launcherData.setFwPersistentDataLocation(config, true);
-		launcherData.setLauncher(executable);
-		if (executable == null)
-			launcherData.setHome(config.getParentFile());
-		try {
-			manipulator.load();
-		} catch (IllegalStateException e2) {
-			// TODO Auto-generated catch block
-			e2.printStackTrace();
-		} catch (FrameworkAdminRuntimeException e2) {
-			// TODO Auto-generated catch block
-			e2.printStackTrace();
-		} catch (IOException e2) {
-			// TODO Auto-generated catch block
-			e2.printStackTrace();
-		}
-	}
-
-	public ConfigData getConfigData() {
-		if (manipulator == null)
-			return null;
-
-		EquinoxFwConfigFileParser parser = new EquinoxFwConfigFileParser(Activator.getContext());
-		try {
-			if (configurationLocation != null && configurationLocation.exists())
-				parser.readFwConfig(manipulator, configurationLocation);
-		} catch (IOException e) {
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error loading config.", e)); //$NON-NLS-1$ //TODO: Fix error string
-		} catch (URISyntaxException e) {
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error loading config.", e)); //$NON-NLS-1$ //TODO: Fix error string
-		}
-		ConfigData data = manipulator.getConfigData();
-		String value = data.getProperty(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL);
-		if (value != null) {
-			try {
-				//config.ini uses simpleconfigurator, read the bundles.info and replace the bundle infos
-				SimpleConfiguratorManipulator simpleManipulator = (SimpleConfiguratorManipulator) ServiceHelper.getService(Activator.getContext(), SimpleConfiguratorManipulator.class.getName());
-				//input stream will be buffered and closed for us
-				BundleInfo[] bundleInfos = simpleManipulator.loadConfiguration(new URL(value).openStream(), null);
-				data.setBundles(bundleInfos);
-			} catch (MalformedURLException e1) {
-				// ignore
-			} catch (IOException e1) {
-				// ignore
-			}
-			try {
-				data.setProperty(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR_CONFIGURL, EquinoxManipulatorImpl.makeRelative(value, configurationLocation.toURL()));
-			} catch (MalformedURLException e) {
-				//ignore
-			}
-		}
-
-		return data;
-	}
-
-	public LauncherData getLauncherData() {
-		return manipulator == null ? null : manipulator.getLauncherData();
-	}
-
-	/**
-	 * Obtains the framework manipulator instance. Throws an exception
-	 * if it could not be created.
-	 */
-	private void getFrameworkManipulator() {
-		FrameworkAdmin admin = getFrameworkAdmin();
-		if (admin == null)
-			throw new RuntimeException("Framework admin service not found"); //$NON-NLS-1$
-		manipulator = admin.getManipulator();
-		if (manipulator == null)
-			throw new RuntimeException("Framework manipulator not found"); //$NON-NLS-1$
-	}
-
-	private FrameworkAdmin getFrameworkAdmin() {
-		return (FrameworkAdmin) ServiceHelper.getService(Activator.getContext(), FrameworkAdmin.class.getName(), frameworkAdminFillter);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java
deleted file mode 100644
index e10b6c5..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ExecutablesDescriptor.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2009 EclipseSource and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      Eclipse Source - initial API and implementation
- *      IBM Corporation - ongoing development
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import java.io.*;
-import java.util.HashSet;
-import java.util.Set;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.eclipse.equinox.p2.publisher.AbstractPublisherAction;
-import org.eclipse.osgi.service.environment.Constants;
-
-public class ExecutablesDescriptor {
-
-	private File location;
-	private Set<File> files;
-	private String executableName;
-	private boolean temporary = false;
-	private String os;
-	private File iniFile;
-
-	public static File findExecutable(String os, File root, String baseName) {
-		// TODO this may need to get more intelligent
-		// if MacOS its going to be baseName.app/Contents/MacOS/baseName
-		if (Constants.OS_MACOSX.equals(os)) {
-			return new File(root, baseName + ".app/Contents/MacOS/" + baseName); //$NON-NLS-1$
-		}
-		// if it is not Mac and not Windows it must be a UNIX flavor
-		if (!Constants.OS_WIN32.equals(os)) {
-			return new File(root, baseName);
-		}
-		// otherwise we are left with windows
-		return new File(root, baseName + ".exe"); //$NON-NLS-1$
-	}
-
-	/**
-	 * Return the root directory of the executables folder for the given configSpec.  The folder
-	 * is expected to be part of the standard Eclipse executables feature whose structure is 
-	 * embedded here.
-	 * @param executablesFeatureLocation the location of the executables feature
-	 * @param configSpec the configuration to lookup
-	 * @return the root location of the requested executables
-	 */
-	public static ExecutablesDescriptor createExecutablesFromFeature(File executablesFeatureLocation, String configSpec) {
-		// TODO consider handling JAR'd features here...
-		if (executablesFeatureLocation == null || !executablesFeatureLocation.exists())
-			return null;
-		String[] config = AbstractPublisherAction.parseConfigSpec(configSpec);
-		File result = new File(executablesFeatureLocation, "bin/" + config[0] + "/" + config[1] + "/" + config[2]); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		if (!result.exists())
-			return null;
-		return new ExecutablesDescriptor(config[1], "launcher", result, new File[] {result}); //$NON-NLS-1$
-	}
-
-	/**
-	 * Create an executable descriptor based on the given location, os and name.
-	 * This method is typically used to identify the executable related files in existing
-	 * unmanaged configurations.
-	 * @param os
-	 * @param location
-	 * @param executable
-	 * @return the created descriptor
-	 */
-	public static ExecutablesDescriptor createDescriptor(String os, String executable, File location) {
-		if (Constants.OS_MACOSX.equals(os))
-			return createMacDescriptor(os, executable, location);
-
-		// if it is not Mac and not Windows it must be a UNIX flavor
-		if (!Constants.OS_WIN32.equals(os))
-			return createUnixDescriptor(os, executable, location);
-
-		// Nothing else so it must be Windows
-		return createWindowsDescriptor(os, executable, location);
-	}
-
-	private static ExecutablesDescriptor createWindowsDescriptor(String os, String executable, File location) {
-		ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, null);
-		File file = new File(location, executable + ".exe"); //$NON-NLS-1$
-		if (file.isFile()) {
-			result.addFile(file);
-			result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$
-		}
-		file = new File(location, "eclipsec.exe"); //$NON-NLS-1$
-		if (file.isFile())
-			result.addFile(file);
-		return result;
-	}
-
-	private static ExecutablesDescriptor createUnixDescriptor(String os, String executable, File location) {
-		ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, null);
-		File[] files = location.listFiles();
-		for (int i = 0; files != null && i < files.length; i++) {
-			String extension = new Path(files[i].getName()).getFileExtension();
-			if (files[i].isFile() && (extension == null || extension.equals("so"))) //$NON-NLS-1$
-				result.addFile(files[i]);
-		}
-		result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$
-		return result;
-	}
-
-	private static ExecutablesDescriptor createMacDescriptor(String os, String executable, File location) {
-		File files[] = location.listFiles(new FilenameFilter() {
-			public boolean accept(File dir, String name) {
-				int length = name.length();
-				return length > 3 && name.substring(length - 4, length).equalsIgnoreCase(".app"); //$NON-NLS-1$
-			}
-		});
-		ExecutablesDescriptor result = new ExecutablesDescriptor(os, executable, location, files);
-		result.iniFile = new File(location, executable + ".ini"); //$NON-NLS-1$
-		return result;
-	}
-
-	public ExecutablesDescriptor(String os, String executable, File location, File[] files) {
-		this.os = os;
-		this.executableName = executable;
-		this.location = location;
-		if (files == null)
-			this.files = new HashSet<File>(11);
-		else {
-			this.files = new HashSet<File>(files.length);
-			for (int i = 0; i < files.length; i++)
-				addAllFiles(files[i]);
-		}
-	}
-
-	public ExecutablesDescriptor(ExecutablesDescriptor descriptor) {
-		this.os = descriptor.os;
-		this.location = descriptor.location;
-		this.executableName = descriptor.executableName;
-		this.temporary = descriptor.temporary;
-		this.files = new HashSet<File>(descriptor.files);
-	}
-
-	public void addAllFiles(File file) {
-		if (file.isFile())
-			files.add(relativize(file));
-		else {
-			File absolute = file.isAbsolute() ? file : new File(location, file.getPath());
-			File[] list = absolute.listFiles();
-			for (int i = 0; i < list.length; i++)
-				addAllFiles(list[i]);
-		}
-	}
-
-	public void addFile(File file) {
-		files.add(relativize(file));
-	}
-
-	// do a simple relativization by removing all the bits before the location
-	private File relativize(File file) {
-		if (!file.isAbsolute())
-			return file;
-		String path = file.getPath();
-		if (!path.startsWith(location.getPath()))
-			throw new IllegalArgumentException(file.toString() + " must be related to " + location); //$NON-NLS-1$
-		path = path.substring(location.getPath().length());
-		// trim off any separator.  This accomodates people who set the location with a trailing /
-		if (path.startsWith("/") || path.startsWith("\\")) //$NON-NLS-1$//$NON-NLS-2$
-			path = path.substring(1);
-		return new File(path);
-	}
-
-	public void removeFile(File file) {
-		files.remove(relativize(file));
-	}
-
-	public void replace(File oldFile, File newFile) {
-		removeFile(oldFile);
-		addFile(newFile);
-	}
-
-	public File[] getFiles() {
-		File[] result = files.toArray(new File[files.size()]);
-		for (int i = 0; i < result.length; i++)
-			result[i] = new File(location, result[i].getPath());
-		return result;
-	}
-
-	public String getExecutableName() {
-		return executableName;
-	}
-
-	public File getExecutable() {
-		return findExecutable(os, location, executableName);
-	}
-
-	public File getIniLocation() {
-		return iniFile;
-	}
-
-	public File getLocation() {
-		return location;
-	}
-
-	public void setLocation(File value) {
-		location = value;
-	}
-
-	public boolean isTemporary() {
-		return temporary;
-	}
-
-	public void setExecutableName(String value, boolean updateFiles) {
-		if (updateFiles)
-			updateExecutableName(value);
-		executableName = value;
-	}
-
-	public void makeTemporaryCopy() {
-		if (isTemporary())
-			return;
-		File tempFile = null;
-		try {
-			tempFile = File.createTempFile("p2.brandingIron", ""); //$NON-NLS-1$ //$NON-NLS-2$
-			tempFile.delete();
-			for (File file : files)
-				FileUtils.copy(location, tempFile, file, true);
-		} catch (IOException e) {
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Error publishing artifacts", e)); //$NON-NLS-1$
-		}
-		location = tempFile;
-		temporary = true;
-	}
-
-	/**
-	 * If the executable represented by this descriptor has been branded then a mess
-	 * of files have been renamed.  Here scan the descriptor's file list and update the names
-	 * taking into account the different layout on different OSes.
-	 * @param newName the new name of the executable.
-	 */
-	private void updateExecutableName(String newName) {
-		if (newName.equalsIgnoreCase(executableName))
-			return;
-		String targetIni = executableName + ".ini"; //$NON-NLS-1$
-		String targetExecutable = executableName;
-		String executableExtension = Constants.OS_WIN32.equals(os) ? ".exe" : ""; //$NON-NLS-1$ //$NON-NLS-2$
-		targetExecutable = executableName + executableExtension;
-		Set<File> filesCopy = new HashSet<File>(files);
-		for (File file : filesCopy) {
-			String base = file.getParent();
-
-			// use String concatenation here because new File("", "foo") is absolute on at least windows...
-			base = base == null ? "" : base + "/"; //$NON-NLS-1$ //$NON-NLS-2$
-			if (Constants.OS_MACOSX.equals(os) && base.startsWith(executableName + ".app")) //$NON-NLS-1$
-				base = newName + ".app" + base.substring(executableName.length() + 4); //$NON-NLS-1$
-			if (file.getName().equalsIgnoreCase(targetExecutable))
-				replace(file, new File(base + newName + executableExtension));
-			else if (file.getName().equalsIgnoreCase(targetIni))
-				replace(file, new File(base + newName + ".ini")); //$NON-NLS-1$
-			else if (Constants.OS_MACOSX.equals(os))
-				replace(file, new File(base + file.getName()));
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureManifestParser.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureManifestParser.java
deleted file mode 100644
index 3e51ed2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureManifestParser.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Cloudsmith Inc - split into FeatureParser and FeatureManifestParser
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import java.io.*;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import javax.xml.parsers.*;
-import org.eclipse.equinox.p2.publisher.eclipse.Feature;
-import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
-import org.eclipse.osgi.util.NLS;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Parses a feature manifest from a provided stream.
- */
-public class FeatureManifestParser extends DefaultHandler {
-
-	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-	private SAXParser parser;
-	protected Feature result;
-	private URL url;
-	private StringBuffer characters = null;
-
-	private List<String> messageKeys = new ArrayList<String>();
-
-	public FeatureManifestParser() {
-		this(true);
-	}
-
-	public FeatureManifestParser(boolean createParser) {
-		super();
-		if (!createParser)
-			return;
-		try {
-			parserFactory.setNamespaceAware(true);
-			this.parser = parserFactory.newSAXParser();
-		} catch (ParserConfigurationException e) {
-			System.out.println(e);
-		} catch (SAXException e) {
-			System.out.println(e);
-		}
-	}
-
-	public void characters(char[] ch, int start, int length) {
-		if (characters == null)
-			return;
-		characters.append(ch, start, length);
-	}
-
-	protected Feature createFeature(String id, String version) {
-		return new Feature(id, version);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		if (characters == null)
-			return;
-		if ("description".equals(localName)) { //$NON-NLS-1$
-			result.setDescription(localize(characters.toString().trim()));
-		} else if ("license".equals(localName)) { //$NON-NLS-1$
-			result.setLicense(localize(characters.toString().trim()));
-		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
-			result.setCopyright(localize(characters.toString().trim()));
-		}
-		characters = null;
-	}
-
-	public Feature getResult() {
-		return result;
-	}
-
-	private String localize(String value) {
-		if (value != null && value.startsWith("%")) { //$NON-NLS-1$
-			String key = value.substring(1);
-			messageKeys.add(key);
-		}
-		return value;
-	}
-
-	/**
-	 * Parse the given input stream and return a feature object
-	 * or null.
-	 */
-	public Feature parse(InputStream in) {
-		result = null;
-		try {
-			parser.parse(new InputSource(in), this);
-		} catch (SAXException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return result;
-	}
-
-	public List<String> getMessageKeys() {
-		return messageKeys;
-	}
-
-	private void processCopyright(Attributes attributes) {
-		result.setCopyrightURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processDescription(Attributes attributes) {
-		result.setDescriptionURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processDiscoverySite(Attributes attributes) {
-		//ignore discovery sites of type 'web'
-		if ("web".equals(attributes.getValue("type"))) //$NON-NLS-1$ //$NON-NLS-2$
-			return;
-		result.addDiscoverySite(attributes.getValue("label"), attributes.getValue("url")); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	protected void processFeature(Attributes attributes) {
-		String id = attributes.getValue("id"); //$NON-NLS-1$
-		String ver = attributes.getValue("version"); //$NON-NLS-1$
-
-		if (id == null || id.trim().equals("") //$NON-NLS-1$
-				|| ver == null || ver.trim().equals("")) { //$NON-NLS-1$
-			//			System.out.println(NLS.bind(Messages.FeatureParser_IdOrVersionInvalid, (new String[] { id, ver})));
-		} else {
-			result = createFeature(id, ver);
-
-			String os = attributes.getValue("os"); //$NON-NLS-1$
-			String ws = attributes.getValue("ws"); //$NON-NLS-1$
-			String nl = attributes.getValue("nl"); //$NON-NLS-1$
-			String arch = attributes.getValue("arch"); //$NON-NLS-1$
-			result.setEnvironment(os, ws, arch, nl);
-
-			result.setApplication(attributes.getValue("application")); //$NON-NLS-1$
-			result.setPlugin(attributes.getValue("plugin")); //$NON-NLS-1$
-			result.setExclusive(Boolean.valueOf(attributes.getValue("exclusive")).booleanValue()); //$NON-NLS-1$
-			result.setPrimary(Boolean.valueOf(attributes.getValue("primary")).booleanValue()); //$NON-NLS-1$
-			result.setColocationAffinity(attributes.getValue("colocation-affinity")); //$NON-NLS-1$
-
-			//TODO rootURLs
-			if (url != null && "file".equals(url.getProtocol())) { //$NON-NLS-1$
-				File f = new File(url.getFile().replace('/', File.separatorChar));
-				result.setURL("features" + "/" + f.getParentFile().getName() + "/");// + f.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			} else {
-				// externalized URLs might be in relative form, ensure they are absolute				
-				//				feature.setURL(Utils.makeAbsolute(Utils.getInstallURL(), url).toExternalForm());
-			}
-
-			result.setProviderName(localize(attributes.getValue("provider-name"))); //$NON-NLS-1$
-			result.setLabel(localize(attributes.getValue("label"))); //$NON-NLS-1$
-			result.setImage(attributes.getValue("image")); //$NON-NLS-1$
-
-			//			Utils.debug("End process DefaultFeature tag: id:" +id + " ver:" +ver + " url:" + feature.getURL()); 	 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	private void processImport(Attributes attributes) {
-		String id = attributes.getValue("feature"); //$NON-NLS-1$
-		FeatureEntry entry = null;
-		if (id != null) {
-			if ("true".equalsIgnoreCase(attributes.getValue("patch"))) { //$NON-NLS-1$ //$NON-NLS-2$
-				entry = FeatureEntry.createRequires(id, attributes.getValue("version"), "perfect", attributes.getValue("filter"), false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				entry.setPatch(true);
-			} else {
-				entry = FeatureEntry.createRequires(id, attributes.getValue("version"), attributes.getValue("match"), attributes.getValue("filter"), false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-		} else {
-			id = attributes.getValue("plugin"); //$NON-NLS-1$
-			entry = FeatureEntry.createRequires(id, attributes.getValue("version"), attributes.getValue("match"), attributes.getValue("filter"), true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		result.addEntry(entry);
-	}
-
-	private void processIncludes(Attributes attributes) {
-		FeatureEntry entry = new FeatureEntry(attributes.getValue("id"), attributes.getValue("version"), false); //$NON-NLS-1$ //$NON-NLS-2$
-		String flag = attributes.getValue("optional"); //$NON-NLS-1$
-		if (flag != null)
-			entry.setOptional(Boolean.valueOf(flag).booleanValue());
-		setEnvironment(attributes, entry);
-		String filter = attributes.getValue("filter"); //$NON-NLS-1$
-		if (filter != null)
-			entry.setFilter(filter);
-		result.addEntry(entry);
-	}
-
-	private void processInstallHandler(Attributes attributes) {
-		result.setInstallHandler(attributes.getValue("handler")); //$NON-NLS-1$
-		result.setInstallHandlerLibrary(attributes.getValue("library")); //$NON-NLS-1$
-		result.setInstallHandlerURL(attributes.getValue("url")); //$NON-NLS-1$
-	}
-
-	private void processLicense(Attributes attributes) {
-		result.setLicenseURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processPlugin(Attributes attributes) {
-		String id = attributes.getValue("id"); //$NON-NLS-1$
-		String version = attributes.getValue("version"); //$NON-NLS-1$
-
-		if (id == null || id.trim().equals("") || version == null || version.trim().equals("")) { //$NON-NLS-1$ //$NON-NLS-2$
-			System.out.println(NLS.bind("FeatureParser#processPlugin, ID {0} or version {1} invalid", (new String[] {id, version}))); //$NON-NLS-1$
-		} else {
-			FeatureEntry plugin = new FeatureEntry(id, version, true);
-			setEnvironment(attributes, plugin);
-			String unpack = attributes.getValue("unpack"); //$NON-NLS-1$
-			if (unpack != null)
-				plugin.setUnpack(Boolean.valueOf(unpack).booleanValue());
-			String fragment = attributes.getValue("fragment"); //$NON-NLS-1$
-			if (fragment != null)
-				plugin.setFragment(Boolean.valueOf(fragment).booleanValue());
-			String filter = attributes.getValue("filter"); //$NON-NLS-1$
-			if (filter != null)
-				plugin.setFilter(filter);
-			result.addEntry(plugin);
-
-			//			Utils.debug("End process DefaultFeature tag: id:" + id + " ver:" + ver + " url:" + feature.getURL()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	private void processUpdateSite(Attributes attributes) {
-		result.setUpdateSiteLabel(attributes.getValue("label")); //$NON-NLS-1$
-		result.setUpdateSiteURL(attributes.getValue("url")); //$NON-NLS-1$
-	}
-
-	private void setEnvironment(Attributes attributes, FeatureEntry entry) {
-		String os = attributes.getValue("os"); //$NON-NLS-1$
-		String ws = attributes.getValue("ws"); //$NON-NLS-1$
-		String nl = attributes.getValue("nl"); //$NON-NLS-1$
-		String arch = attributes.getValue("arch"); //$NON-NLS-1$
-		entry.setEnvironment(os, ws, arch, nl);
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) {
-		//		Utils.debug("Start Element: uri:" + uri + " local Name:" + localName + " qName:" + qName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		if ("plugin".equals(localName)) { //$NON-NLS-1$
-			processPlugin(attributes);
-		} else if ("description".equals(localName)) { //$NON-NLS-1$
-			processDescription(attributes);
-		} else if ("license".equals(localName)) { //$NON-NLS-1$
-			processLicense(attributes);
-		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
-			processCopyright(attributes);
-		} else if ("feature".equals(localName)) { //$NON-NLS-1$
-			processFeature(attributes);
-		} else if ("import".equals(localName)) { //$NON-NLS-1$
-			processImport(attributes);
-		} else if ("includes".equals(localName)) { //$NON-NLS-1$
-			processIncludes(attributes);
-		} else if ("install-handler".equals(localName)) { //$NON-NLS-1$
-			processInstallHandler(attributes);
-		} else if ("update".equals(localName)) { //$NON-NLS-1$
-			processUpdateSite(attributes);
-		} else if ("discovery".equals(localName)) { //$NON-NLS-1$
-			processDiscoverySite(attributes);
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureParser.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureParser.java
deleted file mode 100644
index 08fd6a8..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/FeatureParser.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Cloudsmith Inc - split into FeatureParser and FeatureManifestParser
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import java.io.*;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.eclipse.equinox.p2.publisher.eclipse.Feature;
-import org.eclipse.equinox.spi.p2.publisher.LocalizationHelper;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * The publisher feature parser. This class parses a feature either in jar or folder
- * form. Feature localization data (feature.properties) is also processed here.
- */
-public class FeatureParser extends DefaultHandler {
-
-	private FeatureManifestParser parser = new FeatureManifestParser();
-
-	/**
-	 * Parses the specified location and constructs a feature. The given location 
-	 * should be either the location of the feature JAR or the directory containing
-	 * the feature.
-	 * 
-	 * @param location the location of the feature to parse.  
-	 */
-	public Feature parse(File location) {
-		if (!location.exists())
-			return null;
-
-		Feature feature = null;
-		if (location.isDirectory()) {
-			//skip directories that don't contain a feature.xml file
-			File file = new File(location, "feature.xml"); //$NON-NLS-1$
-			InputStream input = null;
-			try {
-				input = new BufferedInputStream(new FileInputStream(file));
-				feature = parser.parse(input);
-				if (feature != null) {
-					List<String> messageKeys = parser.getMessageKeys();
-					String[] keyStrings = messageKeys.toArray(new String[messageKeys.size()]);
-					feature.setLocalizations(LocalizationHelper.getDirPropertyLocalizations(location, "feature", null, keyStrings)); //$NON-NLS-1$
-				}
-			} catch (FileNotFoundException e) {
-				return null;
-			} finally {
-				if (input != null)
-					try {
-						input.close();
-					} catch (IOException e) {
-						//
-					}
-			}
-		} else if (location.getName().endsWith(".jar")) { //$NON-NLS-1$
-			JarFile jar = null;
-			try {
-				jar = new JarFile(location);
-				JarEntry entry = jar.getJarEntry("feature.xml"); //$NON-NLS-1$
-				if (entry == null)
-					return null;
-
-				InputStream input = new BufferedInputStream(jar.getInputStream(entry));
-				feature = parser.parse(input);
-				if (feature != null) {
-					List<String> messageKeys = parser.getMessageKeys();
-					String[] keyStrings = messageKeys.toArray(new String[messageKeys.size()]);
-					feature.setLocalizations(LocalizationHelper.getJarPropertyLocalizations(location, "feature", null, keyStrings)); //$NON-NLS-1$
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			} catch (SecurityException e) {
-				LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "Exception parsing feature: " + location.getAbsolutePath(), e)); //$NON-NLS-1$
-			} finally {
-				try {
-					if (jar != null)
-						jar.close();
-				} catch (IOException e) {
-					//
-				}
-			}
-		}
-		return feature;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/GeneratorBundleInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/GeneratorBundleInfo.java
deleted file mode 100644
index 4c55a27..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/GeneratorBundleInfo.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2006, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-
-public class GeneratorBundleInfo extends BundleInfo {
-	private IInstallableUnit iu = null;
-	private String specialConfigCommands;
-	private String specialUnconfigCommands;
-
-	public GeneratorBundleInfo(BundleInfo bInfo) {
-		super.setBundleId(bInfo.getBundleId());
-		super.setLocation(bInfo.getLocation());
-		super.setManifest(bInfo.getManifest());
-		super.setMarkedAsStarted(bInfo.isMarkedAsStarted());
-		super.setResolved(bInfo.isResolved());
-		super.setStartLevel(bInfo.getStartLevel());
-		super.setSymbolicName(bInfo.getSymbolicName());
-		super.setVersion(bInfo.getVersion());
-	}
-
-	public GeneratorBundleInfo() {
-		super();
-	}
-
-	public String getSpecialConfigCommands() {
-		return specialConfigCommands;
-	}
-
-	public void setSpecialConfigCommands(String specialConfigCommands) {
-		this.specialConfigCommands = specialConfigCommands;
-	}
-
-	public void setIU(IInstallableUnit iu) {
-		this.iu = iu;
-	}
-
-	public IInstallableUnit getIU() {
-		return iu;
-	}
-
-	public String getSpecialUnconfigCommands() {
-		return specialUnconfigCommands;
-	}
-
-	public void setSpecialUnconfigCommands(String specialUnconfigCommands) {
-		this.specialUnconfigCommands = specialUnconfigCommands;
-	}
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		String superSt = super.toString();
-		if (superSt.length() > 0)
-			buffer.append(superSt.substring(0, superSt.length() - 1));
-		buffer.append(", this.specialConfigCommands="); //$NON-NLS-1$
-		buffer.append(this.specialConfigCommands);
-		buffer.append(')');
-		return buffer.toString();
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/IProductDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/IProductDescriptor.java
deleted file mode 100644
index 56b46ab..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/IProductDescriptor.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   EclipseSource - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.p2.metadata.IVersionedId;
-
-/**
- * Represents a product file.  
- * 
- * If getLocation returns null, then config.ini and p2 advice files cannot
- * be used (since these are both relative to the product location).
- *
- */
-public interface IProductDescriptor {
-
-	/**
-	 * Gets the name of the launcher.
-	 */
-	public String getLauncherName();
-
-	/**
-	 * Returns the list of all bundles in this product.
-	 * @param includeFragments whether or not to include the fragments in the return value
-	 * @return the list of bundles in this product
-	 */
-	public List<IVersionedId> getBundles(boolean includeFragments);
-
-	/**
-	 * Returns a list<VersionedName> of fragments that constitute this product.
-	 */
-	public List<IVersionedId> getFragments();
-
-	/**
-	 * Returns a List<VersionedName> of features that constitute this product.
-	 */
-	public List<IVersionedId> getFeatures();
-
-	/**
-	 * Returns the path to the config.ini file as specified in the .product file.
-	 */
-	public String getConfigIniPath(String os);
-
-	/**
-	 * Returns the ID for this product.
-	 */
-	public String getId();
-
-	/**
-	 * Returns the Product extension point ID
-	 */
-	public String getProductId();
-
-	/**
-	 * Returns the Applicaiton extension point ID
-	 */
-	public String getApplication();
-
-	/**
-	 * Returns the ID of the bundle in which the splash screen resides.
-	 */
-	public String getSplashLocation();
-
-	/**
-	 * Returns the name of the product
-	 */
-	public String getProductName();
-
-	/**
-	 * Specifies whether this product was built using features or not.
-	 */
-	public boolean useFeatures();
-
-	/**
-	 * Returns the version of the product.
-	 */
-	public String getVersion();
-
-	/**
-	 * Returns the VM arguments for this product for a given OS.
-	 */
-	public String getVMArguments(String os);
-
-	/**
-	 * Returns the program arguments for this product for a given OS.
-	 */
-	public String getProgramArguments(String os);
-
-	/**
-	 * Returns the properties for a product file.
-	 */
-	public Map<String, String> getConfigurationProperties();
-
-	/**
-	 * Returns a list of icons for this product for a given OS.
-	 */
-	public String[] getIcons(String os);
-
-	/**
-	 * Returns a List<BundleInfo> for each bundle that has custom configuration data.
-	 * @return A List<BundleInfo>
-	 */
-	public List<BundleInfo> getBundleInfos();
-
-	/**
-	 * This is needed for config.ini files and p2 advice
-	 */
-	public File getLocation();
-
-	/**
-	 * Returns the license URL for this product
-	 */
-	public String getLicenseURL();
-
-	/**
-	 * Returns the license text for this product
-	 */
-	public String getLicenseText();
-
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
deleted file mode 100644
index 6fac40d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/eclipse/ProductFile.java
+++ /dev/null
@@ -1,760 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Code 9 - Additional function and fixes
- *     EclipseSource - ongoing development
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.p2.publisher.eclipse;
-
-import java.io.*;
-import java.util.*;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.p2.core.helpers.*;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.eclipse.equinox.p2.metadata.IVersionedId;
-import org.eclipse.equinox.p2.metadata.VersionedId;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- *  Used to parse a .product file.
- */
-public class ProductFile extends DefaultHandler implements IProductDescriptor {
-	private static final String ATTRIBUTE_PATH = "path"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_ICON = "icon"; //$NON-NLS-1$
-	protected static final String ATTRIBUTE_FRAGMENT = "fragment"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_APPLICATION = "application"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_VALUE = "value"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_LOCATION = "location"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_AUTO_START = "autoStart"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_START_LEVEL = "startLevel"; //$NON-NLS-1$
-	protected static final String ATTRIBUTE_VERSION = "version"; //$NON-NLS-1$
-	protected static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_UID = "uid"; //$NON-NLS-1$
-
-	private static final String PROPERTY_ECLIPSE_APPLICATION = "eclipse.application"; //$NON-NLS-1$
-	private static final String PROPERTY_ECLIPSE_PRODUCT = "eclipse.product"; //$NON-NLS-1$
-
-	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-
-	private static final String PROGRAM_ARGS = "programArgs"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_LINUX = "programArgsLin"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_MAC = "programArgsMac"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_SOLARIS = "programArgsSol"; //$NON-NLS-1$
-	private static final String PROGRAM_ARGS_WIN = "programArgsWin"; //$NON-NLS-1$
-	private static final String VM_ARGS = "vmArgs"; //$NON-NLS-1$
-	private static final String VM_ARGS_LINUX = "vmArgsLin"; //$NON-NLS-1$
-	private static final String VM_ARGS_MAC = "vmArgsMac"; //$NON-NLS-1$
-	private static final String VM_ARGS_SOLARIS = "vmArgsSol"; //$NON-NLS-1$
-	private static final String VM_ARGS_WIN = "vmArgsWin"; //$NON-NLS-1$
-
-	private static final String SOLARIS_LARGE = "solarisLarge"; //$NON-NLS-1$
-	private static final String SOLARIS_MEDIUM = "solarisMedium"; //$NON-NLS-1$
-	private static final String SOLARIS_SMALL = "solarisSmall"; //$NON-NLS-1$
-	private static final String SOLARIS_TINY = "solarisTiny"; //$NON-NLS-1$
-	private static final String WIN32_16_LOW = "winSmallLow"; //$NON-NLS-1$
-	private static final String WIN32_16_HIGH = "winSmallHigh"; //$NON-NLS-1$
-	private static final String WIN32_24_LOW = "win24Low"; //$NON-NLS-1$
-	private static final String WIN32_32_LOW = "winMediumLow"; //$NON-NLS-1$
-	private static final String WIN32_32_HIGH = "winMediumHigh"; //$NON-NLS-1$
-	private static final String WIN32_48_LOW = "winLargeLow"; //$NON-NLS-1$
-	private static final String WIN32_48_HIGH = "winLargeHigh"; //$NON-NLS-1$
-
-	private static final String OS_WIN32 = "win32";//$NON-NLS-1$
-	private static final String OS_LINUX = "linux";//$NON-NLS-1$
-	private static final String OS_SOLARIS = "solaris";//$NON-NLS-1$
-	private static final String OS_MACOSX = "macosx";//$NON-NLS-1$
-
-	//element names
-	private static final String EL_FEATURES = "features"; //$NON-NLS-1$
-	private static final String EL_FEATURE = "feature"; //$NON-NLS-1$
-	private static final String EL_PLUGINS = "plugins"; //$NON-NLS-1$
-	private static final String EL_PLUGIN = "plugin"; //$NON-NLS-1$
-	private static final String EL_PRODUCT = "product"; //$NON-NLS-1$
-	private static final String EL_PROPERTY = "property"; //$NON-NLS-1$
-	private static final String EL_CONFIG_INI = "configIni"; //$NON-NLS-1$
-	private static final String EL_LAUNCHER = "launcher"; //$NON-NLS-1$
-	private static final String EL_LAUNCHER_ARGS = "launcherArgs"; //$NON-NLS-1$
-	private static final String EL_SPLASH = "splash"; //$NON-NLS-1$
-	private static final String EL_CONFIGURATIONS = "configurations"; //$NON-NLS-1$
-	private static final String EL_LICENSE = "license"; //$NON-NLS-1$
-	private static final String EL_URL = "url"; //$NON-NLS-1$
-	private static final String EL_TEXT = "text"; //$NON-NLS-1$
-
-	//These constants form a small state machine to parse the .product file
-	private static final int STATE_START = 0;
-	private static final int STATE_PRODUCT = 1;
-	private static final int STATE_LAUNCHER = 2;
-	private static final int STATE_LAUNCHER_ARGS = 3;
-	private static final int STATE_PLUGINS = 4;
-	private static final int STATE_FEATURES = 5;
-	private static final int STATE_PROGRAM_ARGS = 6;
-	private static final int STATE_PROGRAM_ARGS_LINUX = 7;
-	private static final int STATE_PROGRAM_ARGS_MAC = 8;
-	private static final int STATE_PROGRAM_ARGS_SOLARIS = 9;
-	private static final int STATE_PROGRAM_ARGS_WIN = 10;
-	private static final int STATE_VM_ARGS = 11;
-	private static final int STATE_VM_ARGS_LINUX = 12;
-	private static final int STATE_VM_ARGS_MAC = 13;
-	private static final int STATE_VM_ARGS_SOLARIS = 14;
-	private static final int STATE_VM_ARGS_WIN = 15;
-	private static final int STATE_CONFIG_INI = 16;
-	private static final int STATE_CONFIGURATIONS = 17;
-	private static final int STATE_LICENSE = 18;
-	private static final int STATE_LICENSE_URL = 19;
-	private static final int STATE_LICENSE_TEXT = 20;
-
-	private int state = STATE_START;
-
-	private SAXParser parser;
-	private String launcherName = null;
-	//	private boolean useIco = false;
-	private Map<String, Collection<String>> icons = new HashMap<String, Collection<String>>(6);
-	private String configPath = null;
-	private final Map<String, String> platformSpecificConfigPaths = new HashMap<String, String>();
-	private String configPlatform = null;
-	private String platformConfigPath = null;
-	private String id = null;
-	private String uid = null;
-	private boolean useFeatures = false;
-	protected List<IVersionedId> plugins = null;
-	protected List<IVersionedId> fragments = null;
-	private List<IVersionedId> features = null;
-	private String splashLocation = null;
-	private String productName = null;
-	private String application = null;
-	private String version = null;
-	private Properties launcherArgs = new Properties();
-	private File location;
-	private List<BundleInfo> bundleInfos;
-	private Map<String, String> properties;
-	private String licenseURL;
-	private String licenseText = null;
-
-	private static String normalize(String text) {
-		if (text == null || text.trim().length() == 0)
-			return ""; //$NON-NLS-1$
-
-		StringBuffer result = new StringBuffer(text.length());
-		boolean haveSpace = false;
-		for (int i = 0; i < text.length(); i++) {
-			char c = text.charAt(i);
-			if (Character.isWhitespace(c)) {
-				if (haveSpace)
-					continue;
-				haveSpace = true;
-				result.append(" "); //$NON-NLS-1$
-			} else {
-				haveSpace = false;
-				result.append(c);
-			}
-		}
-		return result.toString();
-	}
-
-	/**
-	 * Constructs a product file parser.
-	 */
-	public ProductFile(String location) throws Exception {
-		super();
-		this.location = new File(location);
-
-		parserFactory.setNamespaceAware(true);
-		parser = parserFactory.newSAXParser();
-		InputStream in = new BufferedInputStream(new FileInputStream(location));
-		try {
-			parser.parse(new InputSource(in), this);
-		} finally {
-			if (in != null)
-				in.close();
-		}
-		parser = null;
-	}
-
-	/**
-	 * Gets the name of the launcher specified in the .product file.
-	 */
-	public String getLauncherName() {
-		return launcherName;
-	}
-
-	/**
-	 * Gets the location of the .product file.
-	 */
-	public File getLocation() {
-		return location;
-	}
-
-	/**
-	 * Returns the properties found in .product file.  Properties
-	 * are located in the <configurations> block of the file
-	 */
-	public Map<String, String> getConfigurationProperties() {
-		Map<String, String> result = properties != null ? properties : new HashMap<String, String>();
-		if (application != null && !result.containsKey(PROPERTY_ECLIPSE_APPLICATION))
-			result.put(PROPERTY_ECLIPSE_APPLICATION, application);
-		if (id != null && !result.containsKey(PROPERTY_ECLIPSE_PRODUCT))
-			result.put(PROPERTY_ECLIPSE_PRODUCT, id);
-
-		return result;
-	}
-
-	/**
-	 * Returns a List<VersionedName> for each bundle that makes up this product.
-	 * @param includeFragments Indicates whether or not fragments should
-	 * be included in the list
-	 */
-	public List<IVersionedId> getBundles(boolean includeFragments) {
-		List<IVersionedId> p = plugins != null ? plugins : CollectionUtils.<IVersionedId> emptyList();
-		if (!includeFragments)
-			return p;
-
-		List<IVersionedId> f = fragments != null ? fragments : CollectionUtils.<IVersionedId> emptyList();
-		int size = p.size() + f.size();
-		if (size == 0)
-			return CollectionUtils.emptyList();
-
-		List<IVersionedId> both = new ArrayList<IVersionedId>(size);
-		both.addAll(p);
-		both.addAll(f);
-		return both;
-	}
-
-	/**
-	 * Returns a List<BundleInfo> for each bundle that has custom configuration data
-	 * in the product file.
-	 * @return A List<BundleInfo>
-	 */
-	public List<BundleInfo> getBundleInfos() {
-		return bundleInfos != null ? bundleInfos : CollectionUtils.<BundleInfo> emptyList();
-	}
-
-	/**
-	 * Returns a list<VersionedName> of fragments that constitute this product.
-	 */
-	public List<IVersionedId> getFragments() {
-		return fragments != null ? fragments : CollectionUtils.<IVersionedId> emptyList();
-	}
-
-	/**
-	 * Returns a List<VersionedName> of features that constitute this product.
-	 */
-	public List<IVersionedId> getFeatures() {
-		return features != null ? features : CollectionUtils.<IVersionedId> emptyList();
-	}
-
-	public String[] getIcons(String os) {
-		Collection<String> result = icons.get(os);
-		if (result == null)
-			return null;
-		return result.toArray(new String[result.size()]);
-	}
-
-	public String getConfigIniPath(String os) {
-		String specific = platformSpecificConfigPaths.get(os);
-		return specific == null ? configPath : specific;
-	}
-
-	public String getConfigIniPath() {
-		return configPath;
-	}
-
-	/**
-	 * Returns the ID for this product.
-	 */
-	public String getId() {
-		if (uid != null)
-			return uid;
-		return id;
-	}
-
-	public String getProductId() {
-		return id;
-	}
-
-	/**
-	 * Returns the location (the bundle) that defines the splash screen
-	 */
-	public String getSplashLocation() {
-		return splashLocation;
-	}
-
-	/**
-	 * Returns the product name.
-	 */
-	public String getProductName() {
-		return productName;
-	}
-
-	/**
-	 * Returns the application identifier for this product.
-	 */
-	public String getApplication() {
-		return application;
-	}
-
-	/**
-	 * Returns true if this product is built using feature, 
-	 * false otherwise.
-	 */
-	public boolean useFeatures() {
-		return useFeatures;
-	}
-
-	/**
-	 * Returns the version of the product
-	 */
-	public String getVersion() {
-		return (version == null || version.length() == 0) ? "0.0.0" : version; //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the VM arguments for a specific platform.
-	 * If the empty string is used for the OS, this returns
-	 * the default VM arguments
-	 */
-	public String getVMArguments(String os) {
-		os = os == null ? "" : os; //$NON-NLS-1$
-		String key = null;
-		if (os.equals(OS_WIN32)) {
-			key = VM_ARGS_WIN;
-		} else if (os.equals(OS_LINUX)) {
-			key = VM_ARGS_LINUX;
-		} else if (os.equals(OS_MACOSX)) {
-			key = VM_ARGS_MAC;
-		} else if (os.equals(OS_SOLARIS)) {
-			key = VM_ARGS_SOLARIS;
-		}
-
-		String prefix = launcherArgs.getProperty(VM_ARGS);
-		String platform = null, args = null;
-		if (key != null)
-			platform = launcherArgs.getProperty(key);
-		if (prefix != null)
-			args = platform != null ? prefix + " " + platform : prefix; //$NON-NLS-1$
-		else
-			args = platform != null ? platform : ""; //$NON-NLS-1$
-		return normalize(args);
-	}
-
-	/**
-	 * Returns the program arguments for a specific platform.
-	 * If the empty string is used for the OS, this returns
-	 * the default program arguments
-	 */
-	public String getProgramArguments(String os) {
-		os = os == null ? "" : os; //$NON-NLS-1$
-		String key = null;
-		if (os.equals(OS_WIN32)) {
-			key = PROGRAM_ARGS_WIN;
-		} else if (os.equals(OS_LINUX)) {
-			key = PROGRAM_ARGS_LINUX;
-		} else if (os.equals(OS_MACOSX)) {
-			key = PROGRAM_ARGS_MAC;
-		} else if (os.equals(OS_SOLARIS)) {
-			key = PROGRAM_ARGS_SOLARIS;
-		}
-
-		String prefix = launcherArgs.getProperty(PROGRAM_ARGS);
-		String platform = null, args = null;
-		if (key != null)
-			platform = launcherArgs.getProperty(key);
-		if (prefix != null)
-			args = platform != null ? prefix + " " + platform : prefix; //$NON-NLS-1$
-		else
-			args = platform != null ? platform : ""; //$NON-NLS-1$
-		return normalize(args);
-	}
-
-	public String getLicenseText() {
-		return licenseText;
-	}
-
-	public String getLicenseURL() {
-		return licenseURL;
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) {
-		switch (state) {
-			case STATE_START :
-				if (EL_PRODUCT.equals(localName)) {
-					processProduct(attributes);
-					state = STATE_PRODUCT;
-				}
-				break;
-
-			case STATE_PRODUCT :
-				if (EL_CONFIG_INI.equals(localName)) {
-					processConfigIni(attributes);
-					state = STATE_CONFIG_INI;
-				} else if (EL_LAUNCHER.equals(localName)) {
-					processLauncher(attributes);
-					state = STATE_LAUNCHER;
-				} else if (EL_PLUGINS.equals(localName)) {
-					state = STATE_PLUGINS;
-				} else if (EL_FEATURES.equals(localName)) {
-					state = STATE_FEATURES;
-				} else if (EL_LAUNCHER_ARGS.equals(localName)) {
-					state = STATE_LAUNCHER_ARGS;
-				} else if (EL_SPLASH.equals(localName)) {
-					splashLocation = attributes.getValue(ATTRIBUTE_LOCATION);
-				} else if (EL_CONFIGURATIONS.equals(localName)) {
-					state = STATE_CONFIGURATIONS;
-				} else if (EL_LICENSE.equals(localName)) {
-					state = STATE_LICENSE;
-				}
-				break;
-
-			case STATE_CONFIG_INI :
-				processConfigIniPlatform(localName, true);
-				break;
-
-			case STATE_LAUNCHER :
-				if (OS_SOLARIS.equals(localName)) {
-					processSolaris(attributes);
-				} else if ("win".equals(localName)) { //$NON-NLS-1$
-					processWin(attributes);
-				} else if (OS_LINUX.equals(localName)) {
-					processLinux(attributes);
-				} else if (OS_MACOSX.equals(localName)) {
-					processMac(attributes);
-				}
-				if ("ico".equals(localName)) { //$NON-NLS-1$
-					processIco(attributes);
-				} else if ("bmp".equals(localName)) { //$NON-NLS-1$
-					processBmp(attributes);
-				}
-				break;
-
-			case STATE_LAUNCHER_ARGS :
-				if (PROGRAM_ARGS.equals(localName)) {
-					state = STATE_PROGRAM_ARGS;
-				} else if (PROGRAM_ARGS_LINUX.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_LINUX;
-				} else if (PROGRAM_ARGS_MAC.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_MAC;
-				} else if (PROGRAM_ARGS_SOLARIS.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_SOLARIS;
-				} else if (PROGRAM_ARGS_WIN.equals(localName)) {
-					state = STATE_PROGRAM_ARGS_WIN;
-				} else if (VM_ARGS.equals(localName)) {
-					state = STATE_VM_ARGS;
-				} else if (VM_ARGS_LINUX.equals(localName)) {
-					state = STATE_VM_ARGS_LINUX;
-				} else if (VM_ARGS_MAC.equals(localName)) {
-					state = STATE_VM_ARGS_MAC;
-				} else if (VM_ARGS_SOLARIS.equals(localName)) {
-					state = STATE_VM_ARGS_SOLARIS;
-				} else if (VM_ARGS_WIN.equals(localName)) {
-					state = STATE_VM_ARGS_WIN;
-				}
-				break;
-
-			case STATE_PLUGINS :
-				if (EL_PLUGIN.equals(localName)) {
-					processPlugin(attributes);
-				}
-				break;
-
-			case STATE_LICENSE :
-				if (EL_URL.equals(localName)) {
-					state = STATE_LICENSE_URL;
-				} else if (EL_TEXT.equals(localName)) {
-					licenseText = ""; //$NON-NLS-1$
-					state = STATE_LICENSE_TEXT;
-				}
-				break;
-
-			case STATE_FEATURES :
-				if (EL_FEATURE.equals(localName)) {
-					processFeature(attributes);
-				}
-				break;
-			case STATE_CONFIGURATIONS :
-				if (EL_PLUGIN.equals(localName)) {
-					processPluginConfiguration(attributes);
-				} else if (EL_PROPERTY.equals(localName)) {
-					processPropertyConfiguration(attributes);
-				}
-				break;
-		}
-	}
-
-	/**
-	 * Processes the property tag in the .product file.  These tags contain
-	 * a Name and Value pair.  For each tag (with a non-null name), a property 
-	 * is created.
-	 */
-	private void processPropertyConfiguration(Attributes attributes) {
-		String name = attributes.getValue(ATTRIBUTE_NAME);
-		String value = attributes.getValue(ATTRIBUTE_VALUE);
-		if (name == null)
-			return;
-		if (value == null)
-			value = ""; //$NON-NLS-1$
-		if (properties == null)
-			properties = new HashMap<String, String>();
-		properties.put(name, value);
-	}
-
-	private void processPluginConfiguration(Attributes attributes) {
-		BundleInfo info = new BundleInfo();
-		info.setSymbolicName(attributes.getValue(ATTRIBUTE_ID));
-		info.setVersion(attributes.getValue(ATTRIBUTE_VERSION));
-		String value = attributes.getValue(ATTRIBUTE_START_LEVEL);
-		if (value != null) {
-			int startLevel = Integer.parseInt(value);
-			if (startLevel > 0)
-				info.setStartLevel(startLevel);
-		}
-		value = attributes.getValue(ATTRIBUTE_AUTO_START);
-		if (value != null)
-			info.setMarkedAsStarted(Boolean.valueOf(value).booleanValue());
-		if (bundleInfos == null)
-			bundleInfos = new ArrayList<BundleInfo>();
-		bundleInfos.add(info);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		switch (state) {
-			case STATE_PLUGINS :
-				if (EL_PLUGINS.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_FEATURES :
-				if (EL_FEATURES.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_LAUNCHER_ARGS :
-				if (EL_LAUNCHER_ARGS.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_LAUNCHER :
-				if (EL_LAUNCHER.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_CONFIGURATIONS :
-				if (EL_CONFIGURATIONS.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-			case STATE_LICENSE :
-				if (EL_LICENSE.equals(localName))
-					state = STATE_PRODUCT;
-				break;
-
-			case STATE_PROGRAM_ARGS :
-			case STATE_PROGRAM_ARGS_LINUX :
-			case STATE_PROGRAM_ARGS_MAC :
-			case STATE_PROGRAM_ARGS_SOLARIS :
-			case STATE_PROGRAM_ARGS_WIN :
-			case STATE_VM_ARGS :
-			case STATE_VM_ARGS_LINUX :
-			case STATE_VM_ARGS_MAC :
-			case STATE_VM_ARGS_SOLARIS :
-			case STATE_VM_ARGS_WIN :
-				state = STATE_LAUNCHER_ARGS;
-				break;
-			case STATE_LICENSE_URL :
-			case STATE_LICENSE_TEXT :
-				state = STATE_LICENSE;
-				break;
-
-			case STATE_CONFIG_INI :
-				if (EL_CONFIG_INI.equals(localName))
-					state = STATE_PRODUCT;
-				else
-					processConfigIniPlatform(localName, false);
-				break;
-		}
-	}
-
-	public void characters(char[] ch, int start, int length) {
-		switch (state) {
-			case STATE_PROGRAM_ARGS :
-				addLaunchArgumentToMap(PROGRAM_ARGS, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_LINUX :
-				addLaunchArgumentToMap(PROGRAM_ARGS_LINUX, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_MAC :
-				addLaunchArgumentToMap(PROGRAM_ARGS_MAC, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_SOLARIS :
-				addLaunchArgumentToMap(PROGRAM_ARGS_SOLARIS, String.valueOf(ch, start, length));
-				break;
-			case STATE_PROGRAM_ARGS_WIN :
-				addLaunchArgumentToMap(PROGRAM_ARGS_WIN, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS :
-				addLaunchArgumentToMap(VM_ARGS, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_LINUX :
-				addLaunchArgumentToMap(VM_ARGS_LINUX, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_MAC :
-				addLaunchArgumentToMap(VM_ARGS_MAC, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_SOLARIS :
-				addLaunchArgumentToMap(VM_ARGS_SOLARIS, String.valueOf(ch, start, length));
-				break;
-			case STATE_VM_ARGS_WIN :
-				addLaunchArgumentToMap(VM_ARGS_WIN, String.valueOf(ch, start, length));
-				break;
-			case STATE_CONFIG_INI :
-				if (platformConfigPath != null)
-					platformConfigPath += String.valueOf(ch, start, length);
-				break;
-			case STATE_LICENSE_URL :
-				licenseURL = String.valueOf(ch, start, length);
-				break;
-			case STATE_LICENSE_TEXT :
-				if (licenseText != null)
-					licenseText += String.valueOf(ch, start, length);
-				break;
-
-		}
-	}
-
-	private void addLaunchArgumentToMap(String key, String value) {
-		if (launcherArgs == null)
-			launcherArgs = new Properties();
-
-		String oldValue = launcherArgs.getProperty(key);
-		if (oldValue != null)
-			launcherArgs.setProperty(key, oldValue + value);
-		else
-			launcherArgs.setProperty(key, value);
-	}
-
-	protected void processPlugin(Attributes attributes) {
-		String fragment = attributes.getValue(ATTRIBUTE_FRAGMENT);
-		IVersionedId name = new VersionedId(attributes.getValue(ATTRIBUTE_ID), attributes.getValue(ATTRIBUTE_VERSION));
-		if (fragment != null && new Boolean(fragment).booleanValue()) {
-			if (fragments == null)
-				fragments = new ArrayList<IVersionedId>();
-			fragments.add(name);
-		} else {
-			if (plugins == null)
-				plugins = new ArrayList<IVersionedId>();
-			plugins.add(name);
-		}
-	}
-
-	private void processFeature(Attributes attributes) {
-		IVersionedId name = new VersionedId(attributes.getValue(ATTRIBUTE_ID), attributes.getValue(ATTRIBUTE_VERSION));
-		if (features == null)
-			features = new ArrayList<IVersionedId>();
-		features.add(name);
-	}
-
-	private void processProduct(Attributes attributes) {
-		id = attributes.getValue(ATTRIBUTE_ID);
-		uid = attributes.getValue(ATTRIBUTE_UID);
-		productName = attributes.getValue(ATTRIBUTE_NAME);
-		application = attributes.getValue(ATTRIBUTE_APPLICATION);
-		String use = attributes.getValue("useFeatures"); //$NON-NLS-1$
-		if (use != null)
-			useFeatures = Boolean.valueOf(use).booleanValue();
-		version = attributes.getValue(ATTRIBUTE_VERSION);
-	}
-
-	private void processConfigIni(Attributes attributes) {
-		String path = null;
-		if ("custom".equals(attributes.getValue("use"))) { //$NON-NLS-1$//$NON-NLS-2$
-			path = attributes.getValue(ATTRIBUTE_PATH);
-		}
-		String os = attributes.getValue("os"); //$NON-NLS-1$
-		if (os != null && os.length() > 0) {
-			// TODO should we allow a platform-specific default to over-ride a custom generic path?
-			if (path != null)
-				platformSpecificConfigPaths.put(os, path);
-		} else if (path != null) {
-			configPath = path;
-		}
-	}
-
-	private void processConfigIniPlatform(String key, boolean begin) {
-		if (begin) {
-			configPlatform = key;
-			platformConfigPath = ""; //$NON-NLS-1$
-		} else if (configPlatform.equals(key) && platformConfigPath.length() > 0) {
-			platformSpecificConfigPaths.put(key, platformConfigPath);
-			platformConfigPath = null;
-		}
-	}
-
-	private void processLauncher(Attributes attributes) {
-		launcherName = attributes.getValue(ATTRIBUTE_NAME);
-	}
-
-	private void addIcon(String os, String value) {
-		if (value == null)
-			return;
-
-		File iconFile = new File(value);
-		if (!iconFile.isFile()) {
-			//workspace
-			Location instanceLocation = (Location) ServiceHelper.getService(Activator.getContext(), Location.class.getName(), Location.INSTANCE_FILTER);
-			if (instanceLocation != null && instanceLocation.getURL() != null) {
-				File workspace = URLUtil.toFile(instanceLocation.getURL());
-				if (workspace != null)
-					iconFile = new File(workspace, value);
-			}
-		}
-		if (!iconFile.isFile())
-			iconFile = new File(location.getParentFile(), value);
-
-		Collection<String> list = icons.get(os);
-		if (list == null) {
-			list = new ArrayList<String>(6);
-			icons.put(os, list);
-		}
-		list.add(iconFile.getAbsolutePath());
-	}
-
-	private void processSolaris(Attributes attributes) {
-		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_LARGE));
-		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_MEDIUM));
-		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_SMALL));
-		addIcon(OS_SOLARIS, attributes.getValue(SOLARIS_TINY));
-	}
-
-	private void processWin(Attributes attributes) {
-		//		useIco = Boolean.valueOf(attributes.getValue(P_USE_ICO)).booleanValue();
-	}
-
-	private void processIco(Attributes attributes) {
-		addIcon(OS_WIN32, attributes.getValue(ATTRIBUTE_PATH));
-	}
-
-	private void processBmp(Attributes attributes) {
-		addIcon(OS_WIN32, attributes.getValue(WIN32_16_HIGH));
-		addIcon(OS_WIN32, attributes.getValue(WIN32_16_LOW));
-		addIcon(OS_WIN32, attributes.getValue(WIN32_24_LOW));
-		addIcon(OS_WIN32, attributes.getValue(WIN32_32_HIGH));
-		addIcon(OS_WIN32, attributes.getValue(WIN32_32_LOW));
-		addIcon(OS_WIN32, attributes.getValue(WIN32_48_HIGH));
-		addIcon(OS_WIN32, attributes.getValue(WIN32_48_LOW));
-	}
-
-	private void processLinux(Attributes attributes) {
-		addIcon(OS_LINUX, attributes.getValue(ATTRIBUTE_ICON));
-	}
-
-	private void processMac(Attributes attributes) {
-		addIcon(OS_MACOSX, attributes.getValue(ATTRIBUTE_ICON));
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/messages.properties
index fb2d606..0b7a169 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/publisher/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -24,5 +24,8 @@ exception_sourcePath=Source location ({0}) must be a valid file-system path.
 message_generatingMetadata = Generating metadata for {0}.
 message_generationCompleted = Generation completed with success [{0} seconds].
 message_noSimpleconfigurator = Could not find simpleconfigurator bundle.
+message_resultException=Product publishing ended with the following exception:
+message_publisherArguments=Product publisher application was executed with the following arguments:
 exception_artifactRepoNoAppendDestroysInput = Not appending to artifact repository ({0}) may destroy input files.
-error_rootIU_generation = Could not generate root IU {0}, {1}, {2}..
\ No newline at end of file
+error_rootIU_generation = Could not generate root IU {0}, {1}, {2}..
+exception_errorLoadingProductFile = An error has occurred while loading product file {0}. Exception details: {1}.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/swt/tools/IconExe.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/swt/tools/IconExe.java
deleted file mode 100644
index 6367a40..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/internal/p2/swt/tools/IconExe.java
+++ /dev/null
@@ -1,3339 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.swt.tools;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Customize the icon of a Windows exe
- * 
- * WARNING! This class is not part of SWT API. It is NOT API. It is an internal
- * tool that may be changed or removed at anytime.
- * 
- * Based on MSDN "An In-Depth Look into the Win32 Portable Executable File Format".
- * 
- * Win x64 support (Bug #238001) based on MSDN "x64 Primer: Everything You Need To 
- * Know To Start Programming 64-Bit Windows Systems".
- */
-public class IconExe {
-
-	/**
-	* Replace the Desktop icons provided in the Windows executable program
-	* with matching icons provided by the user.
-	*
-	* Takes 2 arguments
-	* argument 0: the Windows executable e.g c:/eclipse/eclipse.exe
-	* argument 1: The .ico file to write to the given executable e.g. c:/myApp.ico
-	*
-	* Note 1. Write access to the executable program is required. As a result, that
-	* program must not be currently running or edited elsewhere.
-	* 
-	* Note 2. The Eclipse 3.4 launcher requires an .ico file with the following 7 images (in any order).
-	* 1. 48x48, 32 bit (RGB / Alpha Channel)
-	* 2. 32x32, 32 bit (RGB / Alpha Channel)
-	* 3. 16x16, 32 bit (RGB / Alpha Channel)
-	* 4. 48x48, 8 bit (256 colors)
-	* 5. 32x32, 8 bit (256 colors)
-	* 6. 24x24, 8 bit (256 colors)
-	* 7. 16x16, 8 bit (256 colors)	 
-	* A user icon matching exactly the width/height/depth of an executable icon will be written
-	* to the executable and will replace that executable icon. If an executable icon
-	* does not match a user icon, it is silently left as is.
-	* 
-	* Note 3. This function modifies the content of the executable program and may cause
-	* its corruption.
-	*/
-	public static void main(String[] args) throws Exception {
-		if (args.length < 2) {
-			System.err.println("Usage: IconExe <windows executable> <ico file>"); //$NON-NLS-1$
-			return;
-		}
-		ImageLoader loader = new ImageLoader();
-
-		List<ImageData> images = new ArrayList<ImageData>();
-		for (int i = 1; i < args.length; i++) {
-			try {
-				//An ICO should contain 7 images, a BMP will contain 1
-				ImageData[] current = loader.load(args[i]);
-				for (int j = 0; j < current.length; j++) {
-					images.add(current[j]);
-				}
-			} catch (RuntimeException e) {
-				//ignore so that we process the other images
-			}
-		}
-		ImageData[] data = new ImageData[images.size()];
-		data = images.toArray(data);
-
-		int nMissing = unloadIcons(args[0], data);
-		if (nMissing != 0)
-			System.err.println("Error - " + nMissing + " icon(s) not replaced in " + args[0] + " using " + args[1]); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	}
-
-	/* Implementation */
-
-	/** 
-	 * Retrieve the Desktop icons provided in the Windows executable program.
-	 * These icons are typically shown in various places of the Windows desktop.
-	 * 
-	 * Note. The Eclipse 3.4 launcher returns the following 7 images (in any order).
-	 * 1. 48x48, 32 bit (RGB / Alpha Channel)
-	 * 2. 32x32, 32 bit (RGB / Alpha Channel)
-	 * 3. 16x16, 32 bit (RGB / Alpha Channel)
-	 * 4. 48x48, 8 bit (256 colors)
-	 * 5. 32x32, 8 bit (256 colors)
-	 * 6. 24x24, 8 bit (256 colors)
-	 * 7. 16x16, 8 bit (256 colors)
-	 * 
-	 * @param program the Windows executable e.g c:/eclipse/eclipse.exe
-	 */
-	static ImageData[] loadIcons(String program) throws FileNotFoundException, IOException {
-		RandomAccessFile raf = new RandomAccessFile(program, "r"); //$NON-NLS-1$
-		IconExe iconExe = new IconExe();
-		IconResInfo[] iconInfo = iconExe.getIcons(raf);
-		ImageData[] data = new ImageData[iconInfo.length];
-		for (int i = 0; i < data.length; i++)
-			data[i] = iconInfo[i].data;
-		raf.close();
-		return data;
-	}
-
-	/** 
-	 * Replace the Desktop icons provided in the Windows executable program
-	 * with icons provided by the user.
-	 * 
-	 * Note 1. Write access to the executable program is required. As a result, that
-	 * program must not be currently running or edited elsewhere.
-	 * 
-	 * Note 2. Use loadIcons to determine which set of icons (width, height, depth)
-	 * is required to replace the icons in the executable program. A user icon
-	 * matching exactly the width/height/depth of an executable icon will be written
-	 * to the executable and will replace that executable icon. If an executable icon
-	 * does not match a user icon, it is left as is. Verify the return value matches
-	 * the number of icons to write. Finally, use loadIcons after this operation
-	 * to verify the icons have changed as expected.
-	 * 
-	 * Note 3. The Eclipse 3.4 launcher requires the following 7 images (in any order).
-	 * 1. 48x48, 32 bit (RGB / Alpha Channel)
-	 * 2. 32x32, 32 bit (RGB / Alpha Channel)
-	 * 3. 16x16, 32 bit (RGB / Alpha Channel)
-	 * 4. 48x48, 8 bit (256 colors)
-	 * 5. 32x32, 8 bit (256 colors)
-	 * 6. 24x24, 8 bit (256 colors)
-	 * 7. 16x16, 8 bit (256 colors)
-	 * 
-	 * Note 4. This function modifies the content of the executable program and may cause
-	 * its corruption. 
-	 * 
-	 * @param program the Windows executable e.g c:/eclipse/eclipse.exe
-	 * @param icons to write to the given executable
-	 * @return the number of icons from the original program that were not successfully replaced (0 if success)
-	 */
-	static int unloadIcons(String program, ImageData[] icons) throws FileNotFoundException, IOException {
-		RandomAccessFile raf = new RandomAccessFile(program, "rw"); //$NON-NLS-1$
-		IconExe iconExe = new IconExe();
-		IconResInfo[] iconInfo = iconExe.getIcons(raf);
-		// Display an error if  no icons found in target executable.
-		if (iconInfo.length == 0) {
-			System.err.println("Warning - no icons detected in \"" + program + "\"."); //$NON-NLS-1$ //$NON-NLS-2$
-			raf.close();
-			return 0;
-		}
-		int cnt = 0;
-		for (int i = 0; i < iconInfo.length; i++) {
-			for (int j = 0; j < icons.length; j++) {
-				if (icons[j] == null)
-					continue;
-				if (iconInfo[i].data.width == icons[j].width && iconInfo[i].data.height == icons[j].height && iconInfo[i].data.depth == icons[j].depth) {
-					raf.seek(iconInfo[i].offset);
-					unloadIcon(raf, icons[j]);
-					cnt++;
-					break;
-				}
-			}
-		}
-		raf.close();
-		return iconInfo.length - cnt;
-	}
-
-	public static final String VERSION = "20050124"; //$NON-NLS-1$
-
-	static final boolean DEBUG = false;
-
-	public static class IconResInfo {
-		ImageData data;
-		int offset;
-		int size;
-	}
-
-	IconResInfo[] iconInfo = null;
-	int iconCnt;
-
-	IconResInfo[] getIcons(RandomAccessFile raf) throws IOException {
-		iconInfo = new IconResInfo[4];
-		iconCnt = 0;
-		IMAGE_DOS_HEADER imageDosHeader = new IMAGE_DOS_HEADER();
-		read(raf, imageDosHeader);
-		if (imageDosHeader.e_magic != IMAGE_DOS_SIGNATURE)
-			return new IconResInfo[0];
-		int imageNtHeadersOffset = imageDosHeader.e_lfanew;
-		raf.seek(imageNtHeadersOffset);
-		IMAGE_NT_HEADERS imageNtHeaders = new IMAGE_NT_HEADERS();
-		read(raf, imageNtHeaders);
-		if (imageNtHeaders.Signature != IMAGE_NT_SIGNATURE)
-			return new IconResInfo[0];
-		// DumpResources
-		int resourcesRVA = imageNtHeaders.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress;
-		if (resourcesRVA == 0)
-			return new IconResInfo[0];
-		if (DEBUG)
-			System.out.println("* Resources (RVA= " + resourcesRVA + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-		IMAGE_SECTION_HEADER imageSectionHeader = new IMAGE_SECTION_HEADER();
-		int firstSectionOffset = imageNtHeadersOffset + IMAGE_NT_HEADERS.FIELD_OFFSET_OptionalHeader + imageNtHeaders.FileHeader.SizeOfOptionalHeader;
-		raf.seek(firstSectionOffset);
-		boolean found = false;
-		for (int i = 0; i < imageNtHeaders.FileHeader.NumberOfSections; i++) {
-			read(raf, imageSectionHeader);
-			if (resourcesRVA >= imageSectionHeader.VirtualAddress && resourcesRVA < imageSectionHeader.VirtualAddress + imageSectionHeader.Misc_VirtualSize) {
-				// could check the imageSectionHeader name is .rsrc
-				found = true;
-				break;
-			}
-		}
-		if (!found)
-			return new IconResInfo[0];
-		int delta = imageSectionHeader.VirtualAddress - imageSectionHeader.PointerToRawData;
-		int imageResourceDirectoryOffset = resourcesRVA - delta;
-		dumpResourceDirectory(raf, imageResourceDirectoryOffset, imageResourceDirectoryOffset, delta, 0, 0, false);
-		if (iconCnt < iconInfo.length) {
-			IconResInfo[] newArray = new IconResInfo[iconCnt];
-			System.arraycopy(iconInfo, 0, newArray, 0, iconCnt);
-			iconInfo = newArray;
-		}
-		return iconInfo;
-	}
-
-	void dumpResourceDirectory(RandomAccessFile raf, int imageResourceDirectoryOffset, int resourceBase, int delta, int type, int level, boolean rt_icon_root) throws IOException {
-		if (DEBUG)
-			System.out.println("** LEVEL " + level); //$NON-NLS-1$
-
-		IMAGE_RESOURCE_DIRECTORY imageResourceDirectory = new IMAGE_RESOURCE_DIRECTORY();
-		raf.seek(imageResourceDirectoryOffset);
-		read(raf, imageResourceDirectory);
-
-		if (DEBUG) {
-			String sType = "" + type; //$NON-NLS-1$
-			// level 1 resources are resource types
-			if (level == 1) {
-				System.out.println("___________________________"); //$NON-NLS-1$
-				if (type == RT_ICON)
-					sType = "RT_ICON"; //$NON-NLS-1$
-				if (type == RT_GROUP_ICON)
-					sType = "RT_GROUP_ICON"; //$NON-NLS-1$
-			}
-			System.out.println("Resource Directory [" + sType + "]" + " (Named " + imageResourceDirectory.NumberOfNamedEntries + ", ID " + imageResourceDirectory.NumberOfIdEntries + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		}
-
-		IMAGE_RESOURCE_DIRECTORY_ENTRY[] imageResourceDirectoryEntries = new IMAGE_RESOURCE_DIRECTORY_ENTRY[imageResourceDirectory.NumberOfIdEntries];
-		for (int i = 0; i < imageResourceDirectoryEntries.length; i++) {
-			imageResourceDirectoryEntries[i] = new IMAGE_RESOURCE_DIRECTORY_ENTRY();
-			read(raf, imageResourceDirectoryEntries[i]);
-		}
-		for (int i = 0; i < imageResourceDirectoryEntries.length; i++) {
-			if (imageResourceDirectoryEntries[i].DataIsDirectory) {
-				dumpResourceDirectory(raf, imageResourceDirectoryEntries[i].OffsetToDirectory + resourceBase, resourceBase, delta, imageResourceDirectoryEntries[i].Id, level + 1, rt_icon_root ? true : type == RT_ICON);
-			} else {
-				// Resource found
-				/// pResDirEntry->Name
-				IMAGE_RESOURCE_DIRECTORY_ENTRY irde = imageResourceDirectoryEntries[i];
-				IMAGE_RESOURCE_DATA_ENTRY data = new IMAGE_RESOURCE_DATA_ENTRY();
-				raf.seek(imageResourceDirectoryEntries[i].OffsetToData + resourceBase);
-				read(raf, data);
-				if (DEBUG)
-					System.out.println("Resource Id " + irde.Id + " Data Offset RVA " + data.OffsetToData + ", Size " + data.Size); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				if (rt_icon_root) {
-					if (DEBUG)
-						System.out.println("iconcnt " + iconCnt + " |" + iconInfo.length); //$NON-NLS-1$ //$NON-NLS-2$
-					iconInfo[iconCnt] = new IconResInfo();
-					iconInfo[iconCnt].data = parseIcon(raf, data.OffsetToData - delta, data.Size);
-					iconInfo[iconCnt].offset = data.OffsetToData - delta;
-					iconInfo[iconCnt].size = data.Size;
-					iconCnt++;
-					if (iconCnt == iconInfo.length) {
-						IconResInfo[] newArray = new IconResInfo[iconInfo.length + 4];
-						System.arraycopy(iconInfo, 0, newArray, 0, iconInfo.length);
-						iconInfo = newArray;
-					}
-				}
-			}
-		}
-	}
-
-	static ImageData parseIcon(RandomAccessFile raf, int offset, int size) throws IOException {
-		raf.seek(offset);
-		BITMAPINFO bitmapInfo = new BITMAPINFO();
-		read(raf, bitmapInfo);
-		bitmapInfo.bmiHeader.biHeight /= 2;
-		int width = bitmapInfo.bmiHeader.biWidth;
-		int height = bitmapInfo.bmiHeader.biHeight;
-		int depth = bitmapInfo.bmiHeader.biBitCount;
-
-		PaletteData palette = loadPalette(bitmapInfo.bmiHeader, raf);
-		byte[] shapeData = loadData(bitmapInfo.bmiHeader, raf);
-		bitmapInfo.bmiHeader.biBitCount = 1;
-		byte[] maskData = loadData(bitmapInfo.bmiHeader, raf);
-		maskData = convertPad(maskData, width, height, 1, 4, 2);
-		bitInvertData(maskData, 0, maskData.length);
-		return ImageData.internal_new(width, height, depth, palette, 4, shapeData, 2, maskData, null, -1, -1, SWT.IMAGE_ICO, 0, 0, 0, 0);
-	}
-
-	static byte[] bitInvertData(byte[] data, int startIndex, int endIndex) {
-		// Destructively bit invert data in the given byte array.
-		for (int i = startIndex; i < endIndex; i++) {
-			data[i] = (byte) (255 - data[i - startIndex]);
-		}
-		return data;
-	}
-
-	static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
-		if (pad == newPad)
-			return data;
-		int stride = (width * depth + 7) / 8;
-		int bpl = (stride + (pad - 1)) / pad * pad;
-		int newBpl = (stride + (newPad - 1)) / newPad * newPad;
-		byte[] newData = new byte[height * newBpl];
-		int srcIndex = 0, destIndex = 0;
-		for (int y = 0; y < height; y++) {
-			System.arraycopy(data, srcIndex, newData, destIndex, newBpl);
-			srcIndex += bpl;
-			destIndex += newBpl;
-		}
-		return newData;
-	}
-
-	static PaletteData loadPalette(BITMAPINFOHEADER bih, RandomAccessFile raf) throws IOException {
-		int depth = bih.biBitCount;
-		if (depth <= 8) {
-			int numColors = bih.biClrUsed;
-			if (numColors == 0) {
-				numColors = 1 << depth;
-			} else {
-				if (numColors > 256)
-					numColors = 256;
-			}
-			byte[] buf = new byte[numColors * 4];
-			raf.read(buf);
-			return paletteFromBytes(buf, numColors);
-		}
-		if (depth == 16)
-			return new PaletteData(0x7C00, 0x3E0, 0x1F);
-		if (depth == 24)
-			return new PaletteData(0xFF, 0xFF00, 0xFF0000);
-		return new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
-	}
-
-	static PaletteData paletteFromBytes(byte[] bytes, int numColors) {
-		int bytesOffset = 0;
-		RGB[] colors = new RGB[numColors];
-		for (int i = 0; i < numColors; i++) {
-			colors[i] = new RGB(bytes[bytesOffset + 2] & 0xFF, bytes[bytesOffset + 1] & 0xFF, bytes[bytesOffset] & 0xFF);
-			bytesOffset += 4;
-		}
-		return new PaletteData(colors);
-	}
-
-	static byte[] loadData(BITMAPINFOHEADER bih, RandomAccessFile raf) throws IOException {
-		int stride = (bih.biWidth * bih.biBitCount + 7) / 8;
-		stride = (stride + 3) / 4 * 4; // Round up to 4 byte multiple
-		byte[] data = loadData(bih, raf, stride);
-		flipScanLines(data, stride, bih.biHeight);
-		return data;
-	}
-
-	static void flipScanLines(byte[] data, int stride, int height) {
-		int i1 = 0;
-		int i2 = (height - 1) * stride;
-		for (int i = 0; i < height / 2; i++) {
-			for (int index = 0; index < stride; index++) {
-				byte b = data[index + i1];
-				data[index + i1] = data[index + i2];
-				data[index + i2] = b;
-			}
-			i1 += stride;
-			i2 -= stride;
-		}
-	}
-
-	static byte[] loadData(BITMAPINFOHEADER bih, RandomAccessFile raf, int stride) throws IOException {
-		int dataSize = bih.biHeight * stride;
-		byte[] data = new byte[dataSize];
-		int cmp = bih.biCompression;
-		if (cmp == 0) { // BMP_NO_COMPRESSION
-			raf.read(data);
-		} else {
-			if (DEBUG)
-				System.out.println("ICO cannot be compressed?"); //$NON-NLS-1$
-		}
-		return data;
-	}
-
-	static void unloadIcon(RandomAccessFile raf, ImageData icon) throws IOException {
-		int sizeImage = (((icon.width * icon.depth + 31) / 32 * 4) + ((icon.width + 31) / 32 * 4)) * icon.height;
-		write4(raf, BMPHeaderFixedSize);
-		write4(raf, icon.width);
-		write4(raf, icon.height * 2);
-		writeU2(raf, 1);
-		writeU2(raf, icon.depth);
-		write4(raf, 0);
-		write4(raf, sizeImage);
-		write4(raf, 0);
-		write4(raf, 0);
-		write4(raf, icon.palette.colors != null ? icon.palette.colors.length : 0);
-		write4(raf, 0);
-
-		byte[] rgbs = paletteToBytes(icon.palette);
-		raf.write(rgbs);
-		unloadShapeData(raf, icon);
-		unloadMaskData(raf, icon);
-	}
-
-	static byte[] paletteToBytes(PaletteData pal) {
-		int n = pal.colors == null ? 0 : (pal.colors.length < 256 ? pal.colors.length : 256);
-		byte[] bytes = new byte[n * 4];
-		int offset = 0;
-		for (int i = 0; i < n; i++) {
-			RGB col = pal.colors[i];
-			bytes[offset] = (byte) col.blue;
-			bytes[offset + 1] = (byte) col.green;
-			bytes[offset + 2] = (byte) col.red;
-			offset += 4;
-		}
-		return bytes;
-	}
-
-	static void unloadMaskData(RandomAccessFile raf, ImageData icon) {
-		ImageData mask = icon.getTransparencyMask();
-		int bpl = (icon.width + 7) / 8;
-		int pad = mask.scanlinePad;
-		int srcBpl = (bpl + pad - 1) / pad * pad;
-		int destBpl = (bpl + 3) / 4 * 4;
-		byte[] buf = new byte[destBpl];
-		int offset = (icon.height - 1) * srcBpl;
-		byte[] data = mask.data;
-		try {
-			for (int i = 0; i < icon.height; i++) {
-				System.arraycopy(data, offset, buf, 0, bpl);
-				bitInvertData(buf, 0, bpl);
-				raf.write(buf, 0, destBpl);
-				offset -= srcBpl;
-			}
-		} catch (IOException e) {
-			SWT.error(SWT.ERROR_IO, e);
-		}
-	}
-
-	static void unloadShapeData(RandomAccessFile raf, ImageData icon) {
-		int bpl = (icon.width * icon.depth + 7) / 8;
-		int pad = icon.scanlinePad;
-		int srcBpl = (bpl + pad - 1) / pad * pad;
-		int destBpl = (bpl + 3) / 4 * 4;
-		byte[] buf = new byte[destBpl];
-		int offset = (icon.height - 1) * srcBpl;
-		byte[] data = icon.data;
-		try {
-			for (int i = 0; i < icon.height; i++) {
-				System.arraycopy(data, offset, buf, 0, bpl);
-				raf.write(buf, 0, destBpl);
-				offset -= srcBpl;
-			}
-		} catch (IOException e) {
-			SWT.error(SWT.ERROR_IO, e);
-		}
-	}
-
-	static boolean readIconGroup(RandomAccessFile raf, int offset, int size) throws IOException {
-		raf.seek(offset);
-		NEWHEADER newHeader = new NEWHEADER();
-		read(raf, newHeader);
-		if (newHeader.ResType != RES_ICON)
-			return false;
-		RESDIR[] resDir = new RESDIR[newHeader.ResCount];
-		for (int i = 0; i < newHeader.ResCount; i++) {
-			resDir[i] = new RESDIR();
-			read(raf, resDir[i]);
-		}
-		return true;
-	}
-
-	static void copyFile(String src, String dst) throws FileNotFoundException, IOException {
-		File srcFile = new File(src);
-		File dstFile = new File(dst);
-		InputStream in = new BufferedInputStream(new FileInputStream(srcFile));
-		OutputStream out = new BufferedOutputStream(new FileOutputStream(dstFile));
-		int c;
-		while ((c = in.read()) != -1)
-			out.write(c);
-		in.close();
-		out.close();
-	}
-
-	/* IO utilities to parse Windows executable */
-	static final int IMAGE_DOS_SIGNATURE = 0x5a4d;
-	static final int IMAGE_NT_SIGNATURE = 0x00004550;
-	static final int IMAGE_DIRECTORY_ENTRY_RESOURCE = 2;
-	static final int RES_ICON = 1;
-	static final int RT_ICON = 3;
-	static final int RT_GROUP_ICON = 14;
-	static final int BMPHeaderFixedSize = 40;
-	static final int IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b;
-	static final int IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b;
-
-	public static class IMAGE_DOS_HEADER {
-		int e_magic; // WORD
-		int e_cblp; // WORD
-		int e_cp; // WORD
-		int e_crlc; // WORD
-		int e_cparhdr; // WORD
-		int e_minalloc; // WORD
-		int e_maxalloc; // WORD
-		int e_ss; // WORD
-		int e_sp; // WORD
-		int e_csum; // WORD
-		int e_ip; // WORD
-		int e_cs; // WORD
-		int e_lfarlc; // WORD
-		int e_ovno; // WORD
-		int[] e_res = new int[4]; // WORD[4]
-		int e_oemid; // WORD
-		int e_oeminfo; // WORD
-		int[] e_res2 = new int[10]; // WORD[10]
-		int e_lfanew; // LONG
-	}
-
-	public static class IMAGE_FILE_HEADER {
-		int Machine; // WORD
-		int NumberOfSections; // WORD
-		int TimeDateStamp; // DWORD
-		int PointerToSymbolTable; // DWORD
-		int NumberOfSymbols; // DWORD
-		int SizeOfOptionalHeader; // WORD
-		int Characteristics; // WORD
-	}
-
-	public static class IMAGE_DATA_DIRECTORY {
-		int VirtualAddress; // DWORD
-		int Size; // DWORD
-	}
-
-	public static class IMAGE_OPTIONAL_HEADER {
-		// Allocate enough storage for the 64 bit version of the header.
-		int Magic; // WORD
-		int MajorLinkerVersion; // BYTE
-		int MinorLinkerVersion; // BYTE
-		int SizeOfCode; // DWORD
-		int SizeOfInitializedData; // DWORD
-		int SizeOfUninitializedData; // DWORD
-		int AddressOfEntryPoint; // DWORD
-		int BaseOfCode; // DWORD
-		int BaseOfData; // DWORD
-		long ImageBase; // ULONGLONG
-		int SectionAlignment; // DWORD
-		int FileAlignment; // DWORD
-		int MajorOperatingSystemVersion; // WORD
-		int MinorOperatingSystemVersion; // WORD
-		int MajorImageVersion; // WORD
-		int MinorImageVersion; // WORD
-		int MajorSubsystemVersion; // WORD
-		int MinorSubsystemVersion; // WORD
-		int Win32VersionValue; // DWORD
-		int SizeOfImage; // DWORD
-		int SizeOfHeaders; // DWORD
-		int CheckSum; // DWORD
-		int Subsystem; // WORD
-		int DllCharacteristics; // WORD
-		long SizeOfStackReserve; // ULONGLONG
-		long SizeOfStackCommit; // ULONGLONG
-		long SizeOfHeapReserve; // ULONGLONG
-		long SizeOfHeapCommit; // ULONGLONG
-		int LoaderFlags; // DWORD
-		int NumberOfRvaAndSizes; // DWORD
-		IMAGE_DATA_DIRECTORY[] DataDirectory = new IMAGE_DATA_DIRECTORY[16];
-	}
-
-	public static class IMAGE_NT_HEADERS {
-		int Signature; // DWORD
-		IMAGE_FILE_HEADER FileHeader = new IMAGE_FILE_HEADER();
-		IMAGE_OPTIONAL_HEADER OptionalHeader = new IMAGE_OPTIONAL_HEADER();
-		final static int FIELD_OFFSET_OptionalHeader = 24;
-	}
-
-	public static class IMAGE_SECTION_HEADER {
-		int[] Name = new int[8]; // BYTE[8]
-		int Misc_VirtualSize; // DWORD (union Misc { DWORD PhysicalAddress; DWORD VirtualSize }
-		int VirtualAddress; // DWORD
-		int SizeOfRawData; // DWORD
-		int PointerToRawData; // DWORD
-		int PointerToRelocations; // DWORD
-		int PointerToLinenumbers; // DWORD
-		int NumberOfRelocations; // WORD
-		int NumberOfLinenumbers; // WORD
-		int Characteristics; // DWORD
-	}
-
-	public static class IMAGE_RESOURCE_DIRECTORY {
-		int Characteristics; // DWORD
-		int TimeDateStamp; // DWORD
-		int MajorVersion; // WORD
-		int MinorVersion; // WORD
-		int NumberOfNamedEntries; // WORD - used
-		int NumberOfIdEntries; // WORD - used
-		final static int SIZEOF = 16;
-	}
-
-	public static class IMAGE_RESOURCE_DIRECTORY_ENTRY {
-		// union
-		int NameOffset; // DWORD 31 bits
-		boolean NameIsString; // DWORD 1 bit
-		int Name; // DWORD
-		int Id; // WORD
-		// union
-		int OffsetToData; // DWORD
-		int OffsetToDirectory; // DWORD 31 bits
-		boolean DataIsDirectory; // DWORD 1 bit
-	}
-
-	public static class IMAGE_RESOURCE_DATA_ENTRY {
-		int OffsetToData; // DWORD
-		int Size; // DWORD
-		int CodePage; // DWORD
-		int Reserved; // DWORD
-	}
-
-	public static class NEWHEADER {
-		int Reserved; // WORD
-		int ResType; // WORD
-		int ResCount; // WORD
-	}
-
-	public static class ICONRESDIR {
-		int Width; // BYTE
-		int Height; // BYTE
-		int ColorCount; // BYTE
-		int reserved; // BYTE
-	}
-
-	public static class CURSORDIR {
-		int Width; // WORD
-		int Height; // WORD
-	}
-
-	public static class RESDIR {
-		// union
-		ICONRESDIR Icon = new ICONRESDIR();
-		CURSORDIR Cursor = new CURSORDIR();
-		int Planes; // WORD
-		int BitCount; // WORD
-		int BytesInRes; // DWORD
-		int IconCursorId; // WORD
-	}
-
-	public static class BITMAPINFOHEADER {
-		int biSize; // DWORD
-		int biWidth; // LONG
-		int biHeight; // LONG
-		int biPlanes; // WORD
-		int biBitCount; // WORD
-		int biCompression; // DWORD
-		int biSizeImage; // DWORD
-		int biXPelsPerMeter; // LONG
-		int biYPelsPerMeter; // LONG
-		int biClrUsed; // DWORD
-		int biClrImportant; // DWORD
-	}
-
-	static class RGBQUAD {
-		int rgBlue; // BYTE
-		int rgbGreen; // BYTE
-		int rgbRed; // BYTE
-		int rgbReserved; // BYTE
-	}
-
-	static class BITMAPINFO {
-		BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();
-		RGBQUAD[] bmiColors = null;
-	}
-
-	static void read(RandomAccessFile raf, BITMAPINFOHEADER bih) throws IOException {
-		bih.biSize = read4(raf);
-		bih.biWidth = read4(raf);
-		bih.biHeight = read4(raf);
-		bih.biPlanes = readU2(raf);
-		bih.biBitCount = readU2(raf);
-		bih.biCompression = read4(raf);
-		bih.biSizeImage = read4(raf);
-		bih.biXPelsPerMeter = read4(raf);
-		bih.biYPelsPerMeter = read4(raf);
-		bih.biClrUsed = read4(raf);
-		bih.biClrImportant = read4(raf);
-	}
-
-	static void read(RandomAccessFile raf, BITMAPINFO bi) throws IOException {
-		read(raf, bi.bmiHeader);
-	}
-
-	/* Little Endian helpers */
-	static int readU2(RandomAccessFile raf) throws IOException {
-		int b0 = raf.readByte() & 0xFF;
-		int b1 = raf.readByte() & 0xFF;
-		return (b1 << 8 | b0);
-	}
-
-	static int read4(RandomAccessFile raf) throws IOException {
-		int b0 = raf.readByte() & 0xFF;
-		int b1 = raf.readByte() & 0xFF;
-		int b2 = raf.readByte() & 0xFF;
-		int b3 = raf.readByte() & 0xFF;
-		return b3 << 24 | b2 << 16 | b1 << 8 | b0;
-	}
-
-	static long read8(RandomAccessFile raf) throws IOException {
-		int b0 = raf.readByte() & 0xFF;
-		int b1 = raf.readByte() & 0xFF;
-		int b2 = raf.readByte() & 0xFF;
-		int b3 = raf.readByte() & 0xFF;
-		int b4 = raf.readByte() & 0xFF;
-		int b5 = raf.readByte() & 0xFF;
-		int b6 = raf.readByte() & 0xFF;
-		int b7 = raf.readByte() & 0xFF;
-		return b7 << 56 | b6 << 48 | b5 << 40 | b4 << 32 | b3 << 24 | b2 << 16 | b1 << 8 | b0;
-	}
-
-	static void write4(RandomAccessFile raf, int value) throws IOException {
-		raf.write(value & 0xFF);
-		raf.write((value >> 8) & 0xFF);
-		raf.write((value >> 16) & 0xFF);
-		raf.write((value >> 24) & 0xFF);
-	}
-
-	static void writeU2(RandomAccessFile raf, int value) throws IOException {
-		raf.write(value & 0xFF);
-		raf.write((value >> 8) & 0xFF);
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_DOS_HEADER idh) throws IOException {
-		idh.e_magic = readU2(raf);
-		idh.e_cblp = readU2(raf);
-		idh.e_cp = readU2(raf);
-		idh.e_crlc = readU2(raf);
-		idh.e_cparhdr = readU2(raf);
-		idh.e_minalloc = readU2(raf);
-		idh.e_maxalloc = readU2(raf);
-		idh.e_ss = readU2(raf);
-		idh.e_sp = readU2(raf);
-		idh.e_csum = readU2(raf);
-		idh.e_ip = readU2(raf);
-		idh.e_cs = readU2(raf);
-		idh.e_lfarlc = readU2(raf);
-		idh.e_ovno = readU2(raf);
-		for (int i = 0; i < idh.e_res.length; i++)
-			idh.e_res[i] = readU2(raf);
-		idh.e_oemid = readU2(raf);
-		idh.e_oeminfo = readU2(raf);
-		for (int i = 0; i < idh.e_res2.length; i++)
-			idh.e_res2[i] = readU2(raf);
-		idh.e_lfanew = read4(raf);
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_FILE_HEADER ifh) throws IOException {
-		ifh.Machine = readU2(raf);
-		ifh.NumberOfSections = readU2(raf);
-		ifh.TimeDateStamp = read4(raf);
-		ifh.PointerToSymbolTable = read4(raf);
-		ifh.NumberOfSymbols = read4(raf);
-		ifh.SizeOfOptionalHeader = readU2(raf);
-		ifh.Characteristics = readU2(raf);
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_DATA_DIRECTORY idd) throws IOException {
-		idd.VirtualAddress = read4(raf);
-		idd.Size = read4(raf);
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_OPTIONAL_HEADER ioh) throws IOException {
-		ioh.Magic = readU2(raf);
-
-		// Assume file is 32bit executable unless x64 magic is present
-		boolean is32 = !(ioh.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC);
-
-		ioh.MajorLinkerVersion = raf.read();
-		ioh.MinorLinkerVersion = raf.read();
-		ioh.SizeOfCode = read4(raf);
-		ioh.SizeOfInitializedData = read4(raf);
-		ioh.SizeOfUninitializedData = read4(raf);
-		ioh.AddressOfEntryPoint = read4(raf);
-		ioh.BaseOfCode = read4(raf);
-
-		if (is32) {
-			ioh.BaseOfData = read4(raf);
-			ioh.ImageBase = read4(raf);
-		} else {
-			// BaseOfData deleted in the 64 bit version PE32+
-			ioh.ImageBase = read8(raf);
-		}
-
-		ioh.SectionAlignment = read4(raf);
-		ioh.FileAlignment = read4(raf);
-		ioh.MajorOperatingSystemVersion = readU2(raf);
-		ioh.MinorOperatingSystemVersion = readU2(raf);
-		ioh.MajorImageVersion = readU2(raf);
-		ioh.MinorImageVersion = readU2(raf);
-		ioh.MajorSubsystemVersion = readU2(raf);
-		ioh.MinorSubsystemVersion = readU2(raf);
-		ioh.Win32VersionValue = read4(raf);
-		ioh.SizeOfImage = read4(raf);
-		ioh.SizeOfHeaders = read4(raf);
-		ioh.CheckSum = read4(raf);
-		ioh.Subsystem = readU2(raf);
-		ioh.DllCharacteristics = readU2(raf);
-
-		if (is32) {
-			ioh.SizeOfStackReserve = read4(raf);
-			ioh.SizeOfStackCommit = read4(raf);
-			ioh.SizeOfHeapReserve = read4(raf);
-			ioh.SizeOfHeapCommit = read4(raf);
-		} else {
-			ioh.SizeOfStackReserve = read8(raf);
-			ioh.SizeOfStackCommit = read8(raf);
-			ioh.SizeOfHeapReserve = read8(raf);
-			ioh.SizeOfHeapCommit = read8(raf);
-		}
-
-		ioh.LoaderFlags = read4(raf);
-		ioh.NumberOfRvaAndSizes = read4(raf);
-		for (int i = 0; i < ioh.DataDirectory.length; i++) {
-			ioh.DataDirectory[i] = new IMAGE_DATA_DIRECTORY();
-			read(raf, ioh.DataDirectory[i]);
-		}
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_NT_HEADERS inh) throws IOException {
-		inh.Signature = read4(raf);
-		read(raf, inh.FileHeader);
-		read(raf, inh.OptionalHeader);
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_SECTION_HEADER ish) throws IOException {
-		for (int i = 0; i < ish.Name.length; i++)
-			ish.Name[i] = raf.read();
-		ish.Misc_VirtualSize = read4(raf);
-		ish.VirtualAddress = read4(raf);
-		ish.SizeOfRawData = read4(raf);
-		ish.PointerToRawData = read4(raf);
-		ish.PointerToRelocations = read4(raf);
-		ish.PointerToLinenumbers = read4(raf);
-		ish.NumberOfRelocations = readU2(raf);
-		ish.NumberOfLinenumbers = readU2(raf);
-		ish.Characteristics = read4(raf);
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_RESOURCE_DIRECTORY ird) throws IOException {
-		ird.Characteristics = read4(raf);
-		ird.TimeDateStamp = read4(raf);
-		ird.MajorVersion = readU2(raf);
-		ird.MinorVersion = readU2(raf);
-		ird.NumberOfNamedEntries = readU2(raf);
-		ird.NumberOfIdEntries = readU2(raf);
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_RESOURCE_DIRECTORY_ENTRY irde) throws IOException {
-		irde.Name = read4(raf);
-		irde.OffsetToData = read4(raf);
-		// construct other union members
-		irde.NameOffset = irde.Name & ~(1 << 31);
-		irde.NameIsString = (irde.Name & (1 << 31)) != 0;
-		irde.Id = irde.Name & 0xFFFF;
-		irde.OffsetToDirectory = irde.OffsetToData & ~(1 << 31);
-		irde.DataIsDirectory = (irde.OffsetToData & (1 << 31)) != 0;
-	}
-
-	static void read(RandomAccessFile raf, IMAGE_RESOURCE_DATA_ENTRY irde) throws IOException {
-		irde.OffsetToData = read4(raf);
-		irde.Size = read4(raf);
-		irde.CodePage = read4(raf);
-		irde.Reserved = read4(raf);
-	}
-
-	static void read(RandomAccessFile raf, NEWHEADER nh) throws IOException {
-		nh.Reserved = readU2(raf);
-		nh.ResType = readU2(raf);
-		nh.ResCount = readU2(raf);
-	}
-
-	static void read(RandomAccessFile raf, ICONRESDIR i) throws IOException {
-		i.Width = raf.read();
-		i.Height = raf.read();
-		i.ColorCount = raf.read();
-		i.reserved = raf.read();
-	}
-
-	static void read(RandomAccessFile raf, CURSORDIR c) throws IOException {
-		c.Width = readU2(raf);
-		c.Height = readU2(raf);
-	}
-
-	static void read(RandomAccessFile raf, RESDIR rs) throws IOException {
-		long start = raf.getFilePointer();
-		read(raf, rs.Icon);
-		raf.seek(start);
-		read(raf, rs.Cursor);
-		rs.Planes = readU2(raf);
-		rs.BitCount = readU2(raf);
-		rs.BytesInRes = read4(raf);
-		rs.IconCursorId = readU2(raf);
-	}
-
-	/* ImageData and Image Decoder inlining to avoid dependency on SWT 
-	 * The following section can be entirely removed if SWT can be used.
-	 */
-
-	static class RGB {
-
-		/**
-		 * the red component of the RGB
-		 */
-		public int red;
-
-		/**
-		 * the green component of the RGB
-		 */
-		public int green;
-
-		/**
-		 * the blue component of the RGB
-		 */
-		public int blue;
-
-		static final long serialVersionUID = 3258415023461249074L;
-
-		/**
-		 * Constructs an instance of this class with the given
-		 * red, green and blue values.
-		 *
-		 * @param red the red component of the new instance
-		 * @param green the green component of the new instance
-		 * @param blue the blue component of the new instance
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue argument is not between 0 and 255</li>
-		 * </ul>
-		 */
-		public RGB(int red, int green, int blue) {
-			if ((red > 255) || (red < 0) || (green > 255) || (green < 0) || (blue > 255) || (blue < 0))
-				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-			this.red = red;
-			this.green = green;
-			this.blue = blue;
-		}
-
-		/**
-		 * Compares the argument to the receiver, and returns true
-		 * if they represent the <em>same</em> object using a class
-		 * specific comparison.
-		 *
-		 * @param object the object to compare with this object
-		 * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
-		 *
-		 * @see #hashCode()
-		 */
-		public boolean equals(Object object) {
-			if (object == this)
-				return true;
-			if (!(object instanceof RGB))
-				return false;
-			RGB rgb = (RGB) object;
-			return (rgb.red == this.red) && (rgb.green == this.green) && (rgb.blue == this.blue);
-		}
-
-		/**
-		 * Returns an integer hash code for the receiver. Any two 
-		 * objects which return <code>true</code> when passed to 
-		 * <code>equals</code> must return the same value for this
-		 * method.
-		 *
-		 * @return the receiver's hash
-		 *
-		 * @see #equals(Object)
-		 */
-		public int hashCode() {
-			return (blue << 16) | (green << 8) | red;
-		}
-
-		/**
-		 * Returns a string containing a concise, human-readable
-		 * description of the receiver.
-		 *
-		 * @return a string representation of the <code>RGB</code>
-		 */
-		public String toString() {
-			return "RGB {" + red + ", " + green + ", " + blue + "}"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
-
-			//$NON-NLS-4$
-		}
-
-	}
-
-	static class PaletteData {
-
-		/**
-		 * true if the receiver is a direct palette, 
-		 * and false otherwise
-		 */
-		public boolean isDirect;
-
-		/**
-		 * the RGB values for an indexed palette, where the
-		 * indices of the array correspond to pixel values
-		 */
-		public RGB[] colors;
-
-		/**
-		 * the red mask for a direct palette
-		 */
-		public int redMask;
-
-		/**
-		 * the green mask for a direct palette
-		 */
-		public int greenMask;
-
-		/**
-		 * the blue mask for a direct palette
-		 */
-		public int blueMask;
-
-		/**
-		 * the red shift for a direct palette
-		 */
-		public int redShift;
-
-		/**
-		 * the green shift for a direct palette
-		 */
-		public int greenShift;
-
-		/**
-		 * the blue shift for a direct palette
-		 */
-		public int blueShift;
-
-		/**
-		 * Constructs a new indexed palette given an array of RGB values.
-		 *
-		 * @param colors the array of <code>RGB</code>s for the palette
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
-		 * </ul>
-		 */
-		public PaletteData(RGB[] colors) {
-			if (colors == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			this.colors = colors;
-			this.isDirect = false;
-		}
-
-		/**
-		 * Constructs a new direct palette given the red, green and blue masks.
-		 *
-		 * @param redMask the red mask
-		 * @param greenMask the green mask
-		 * @param blueMask the blue mask
-		 */
-		public PaletteData(int redMask, int greenMask, int blueMask) {
-			this.redMask = redMask;
-			this.greenMask = greenMask;
-			this.blueMask = blueMask;
-			this.isDirect = true;
-			this.redShift = shiftForMask(redMask);
-			this.greenShift = shiftForMask(greenMask);
-			this.blueShift = shiftForMask(blueMask);
-		}
-
-		/**
-		 * Returns the pixel value corresponding to the given <code>RBG</code>.
-		 *
-		 * @param rgb the RGB to get the pixel value for
-		 * @return the pixel value for the given RGB
-		 * 
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if the RGB is not found in the palette</li>
-		 * </ul>
-		 */
-		public int getPixel(RGB rgb) {
-			if (rgb == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			if (isDirect) {
-				int pixel = 0;
-				pixel |= (redShift < 0 ? rgb.red << -redShift : rgb.red >>> redShift) & redMask;
-				pixel |= (greenShift < 0 ? rgb.green << -greenShift : rgb.green >>> greenShift) & greenMask;
-				pixel |= (blueShift < 0 ? rgb.blue << -blueShift : rgb.blue >>> blueShift) & blueMask;
-				return pixel;
-			}
-
-			for (int i = 0; i < colors.length; i++) {
-				if (colors[i].equals(rgb))
-					return i;
-			}
-			/* The RGB did not exist in the palette */
-			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-			return 0;
-		}
-
-		/**
-		 * Returns an <code>RGB</code> corresponding to the given pixel value.
-		 *
-		 * @param pixel the pixel to get the RGB value for
-		 * @return the RGB value for the given pixel
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if the pixel does not exist in the palette</li>
-		 * </ul>
-		 */
-		public RGB getRGB(int pixel) {
-			if (isDirect) {
-				int r = pixel & redMask;
-				r = (redShift < 0) ? r >>> -redShift : r << redShift;
-				int g = pixel & greenMask;
-				g = (greenShift < 0) ? g >>> -greenShift : g << greenShift;
-				int b = pixel & blueMask;
-				b = (blueShift < 0) ? b >>> -blueShift : b << blueShift;
-				return new RGB(r, g, b);
-			}
-			if (pixel < 0 || pixel >= colors.length) {
-				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-			}
-			return colors[pixel];
-		}
-
-		/**
-		 * Returns all the RGB values in the receiver if it is an
-		 * indexed palette, or null if it is a direct palette.
-		 *
-		 * @return the <code>RGB</code>s for the receiver or null
-		 */
-		public RGB[] getRGBs() {
-			return colors;
-		}
-
-		/**
-		 * Computes the shift value for a given mask.
-		 *
-		 * @param mask the mask to compute the shift for
-		 * @return the shift amount
-		 *
-		 * @see IconExe.PaletteData
-		 */
-		int shiftForMask(int mask) {
-			for (int i = 31; i >= 0; i--) {
-				if (((mask >> i) & 0x1) != 0)
-					return 7 - i;
-			}
-			return 32;
-		}
-
-	}
-
-	static class ImageLoader {
-
-		/**
-		 * the array of ImageData objects in this ImageLoader.
-		 * This array is read in when the load method is called,
-		 * and it is written out when the save method is called
-		 */
-		public ImageData[] data;
-
-		/**
-		 * the width of the logical screen on which the images
-		 * reside, in pixels (this corresponds to the GIF89a
-		 * Logical Screen Width value)
-		 */
-		public int logicalScreenWidth;
-
-		/**
-		 * the height of the logical screen on which the images
-		 * reside, in pixels (this corresponds to the GIF89a
-		 * Logical Screen Height value)
-		 */
-		public int logicalScreenHeight;
-
-		/**
-		 * the background pixel for the logical screen (this 
-		 * corresponds to the GIF89a Background Color Index value).
-		 * The default is -1 which means 'unspecified background'
-		 * 
-		 */
-		public int backgroundPixel;
-
-		/**
-		 * the number of times to repeat the display of a sequence
-		 * of animated images (this corresponds to the commonly-used
-		 * GIF application extension for "NETSCAPE 2.0 01")
-		 */
-		public int repeatCount;
-
-		/*
-		 * the set of ImageLoader event listeners, created on demand
-		 */
-		Vector<?> imageLoaderListeners;
-
-		/**
-		 * Construct a new empty ImageLoader.
-		 */
-		public ImageLoader() {
-			reset();
-		}
-
-		/**
-		 * Resets the fields of the ImageLoader, except for the
-		 * <code>imageLoaderListeners</code> field.
-		 */
-		void reset() {
-			data = null;
-			logicalScreenWidth = 0;
-			logicalScreenHeight = 0;
-			backgroundPixel = -1;
-			repeatCount = 1;
-		}
-
-		/**
-		 * Loads an array of <code>ImageData</code> objects from the
-		 * specified input stream. Throws an error if either an error
-		 * occurs while loading the images, or if the images are not
-		 * of a supported type. Returns the loaded image data array.
-		 *
-		 * @param stream the input stream to load the images from
-		 * @return an array of <code>ImageData</code> objects loaded from the specified input stream
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if the stream is null</li>
-		 * </ul>
-		 * @exception RuntimeException <ul>
-		 *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
-		 *    <li>ERROR_IO - if an input/output error occurs while reading data</li>
-		 *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
-		 * </ul>
-		 */
-		public ImageData[] load(InputStream stream) {
-			if (stream == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			reset();
-			data = FileFormat.load(stream, this);
-			return data;
-		}
-
-		/**
-		 * Loads an array of <code>ImageData</code> objects from the
-		 * file with the specified name. Throws an error if either
-		 * an error occurs while loading the images, or if the images are
-		 * not of a supported type. Returns the loaded image data array.
-		 *
-		 * @param filename the name of the file to load the images from
-		 * @return an array of <code>ImageData</code> objects loaded from the specified file
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
-		 * </ul>
-		 * @exception RuntimeException <ul>
-		 *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
-		 *    <li>ERROR_IO - if an IO error occurs while reading data</li>
-		 *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
-		 * </ul>
-		 */
-		public ImageData[] load(String filename) {
-			if (filename == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			InputStream stream = null;
-			try {
-				stream = new BufferedInputStream(new FileInputStream(filename));
-				return load(stream);
-			} catch (IOException e) {
-				SWT.error(SWT.ERROR_IO, e);
-			} finally {
-				try {
-					if (stream != null)
-						stream.close();
-				} catch (IOException e) {
-					// Ignore error
-				}
-			}
-			return null;
-		}
-	}
-
-	static class ImageData {
-
-		/**
-		 * The width of the image, in pixels.
-		 */
-		public int width;
-
-		/**
-		 * The height of the image, in pixels.
-		 */
-		public int height;
-
-		/**
-		 * The color depth of the image, in bits per pixel.
-		 * <p>
-		 * Note that a depth of 8 or less does not necessarily
-		 * mean that the image is palette indexed, or
-		 * conversely that a depth greater than 8 means that
-		 * the image is direct color.  Check the associated
-		 * PaletteData's isDirect field for such determinations.
-		 */
-		public int depth;
-
-		/**
-		 * The scanline padding.
-		 * <p>
-		 * If one scanline of the image is not a multiple of
-		 * this number, it will be padded with zeros until it is.
-		 * </p>
-		 */
-		public int scanlinePad;
-
-		/**
-		 * The number of bytes per scanline.
-		 * <p>
-		 * This is a multiple of the scanline padding.
-		 * </p>
-		 */
-		public int bytesPerLine;
-
-		/**
-		 * The pixel data of the image.
-		 * <p>
-		 * Note that for 16 bit depth images the pixel data is stored
-		 * in least significant byte order; however, for 24bit and
-		 * 32bit depth images the pixel data is stored in most
-		 * significant byte order.
-		 * </p>
-		 */
-		public byte[] data;
-
-		/**
-		 * The color table for the image.
-		 */
-		public PaletteData palette;
-
-		/**
-		 * The transparent pixel.
-		 * <p>
-		 * Pixels with this value are transparent.
-		 * </p><p>
-		 * The default is -1 which means 'no transparent pixel'.
-		 * </p>
-		 */
-		public int transparentPixel;
-
-		/**
-		 * An icon-specific field containing the data from the icon mask.
-		 * <p>
-		 * This is a 1 bit bitmap stored with the most significant
-		 * bit first.  The number of bytes per scanline is
-		 * '((width + 7) / 8 + (maskPad - 1)) / maskPad * maskPad'.
-		 * </p><p>
-		 * The default is null which means 'no transparency mask'.
-		 * </p>
-		 */
-		public byte[] maskData;
-
-		/**
-		 * An icon-specific field containing the scanline pad of the mask.
-		 * <p>
-		 * If one scanline of the transparency mask is not a
-		 * multiple of this number, it will be padded with zeros until
-		 * it is.
-		 * </p>
-		 */
-		public int maskPad;
-
-		/**
-		 * The alpha data of the image.
-		 * <p>
-		 * Every pixel can have an <em>alpha blending</em> value that
-		 * varies from 0, meaning fully transparent, to 255 meaning
-		 * fully opaque.  The number of bytes per scanline is
-		 * 'width'.
-		 * </p>
-		 */
-		public byte[] alphaData;
-
-		/**
-		 * The global alpha value to be used for every pixel.
-		 * <p>
-		 * If this value is set, the <code>alphaData</code> field
-		 * is ignored and when the image is rendered each pixel
-		 * will be blended with the background an amount
-		 * proportional to this value.
-		 * </p><p>
-		 * The default is -1 which means 'no global alpha value'
-		 * </p>
-		 */
-		public int alpha;
-
-		/**
-		 * The type of file from which the image was read.
-		 * 
-		 * It is expressed as one of the following values:
-		 * <dl>
-		 * <dt><code>IMAGE_BMP</code></dt>
-		 * <dd>Windows BMP file format, no compression</dd>
-		 * <dt><code>IMAGE_BMP_RLE</code></dt>
-		 * <dd>Windows BMP file format, RLE compression if appropriate</dd>
-		 * <dt><code>IMAGE_GIF</code></dt>
-		 * <dd>GIF file format</dd>
-		 * <dt><code>IMAGE_ICO</code></dt>
-		 * <dd>Windows ICO file format</dd>
-		 * <dt><code>IMAGE_JPEG</code></dt>
-		 * <dd>JPEG file format</dd>
-		 * <dt><code>IMAGE_PNG</code></dt>
-		 * <dd>PNG file format</dd>
-		 * </dl>
-		 */
-		public int type;
-
-		/**
-		 * The x coordinate of the top left corner of the image
-		 * within the logical screen (this field corresponds to
-		 * the GIF89a Image Left Position value).
-		 */
-		public int x;
-
-		/**
-		 * The y coordinate of the top left corner of the image
-		 * within the logical screen (this field corresponds to
-		 * the GIF89a Image Top Position value).
-		 */
-		public int y;
-
-		/**
-		 * A description of how to dispose of the current image
-		 * before displaying the next.
-		 * 
-		 * It is expressed as one of the following values:
-		 * <dl>
-		 * <dt><code>DM_UNSPECIFIED</code></dt>
-		 * <dd>disposal method not specified</dd>
-		 * <dt><code>DM_FILL_NONE</code></dt>
-		 * <dd>do nothing - leave the image in place</dd>
-		 * <dt><code>DM_FILL_BACKGROUND</code></dt>
-		 * <dd>fill with the background color</dd>
-		 * <dt><code>DM_FILL_PREVIOUS</code></dt>
-		 * <dd>restore the previous picture</dd>
-		 * </dl>
-		 * (this field corresponds to the GIF89a Disposal Method value)
-		 */
-		public int disposalMethod;
-
-		/**
-		 * The time to delay before displaying the next image
-		 * in an animation (this field corresponds to the GIF89a
-		 * Delay Time value).
-		 */
-		public int delayTime;
-
-		/**
-		 * Arbitrary channel width data to 8-bit conversion table.
-		 */
-		static final byte[][] ANY_TO_EIGHT = new byte[9][];
-		static {
-			for (int b = 0; b < 9; ++b) {
-				byte[] data = ANY_TO_EIGHT[b] = new byte[1 << b];
-				if (b == 0)
-					continue;
-				int inc = 0;
-				for (int bit = 0x10000; (bit >>= b) != 0;)
-					inc |= bit;
-				for (int v = 0, p = 0; v < 0x10000; v += inc)
-					data[p++] = (byte) (v >> 8);
-			}
-		}
-		static final byte[] ONE_TO_ONE_MAPPING = ANY_TO_EIGHT[8];
-
-		/**
-		 * Scaled 8x8 Bayer dither matrix.
-		 */
-		static final int[][] DITHER_MATRIX = { {0xfc0000, 0x7c0000, 0xdc0000, 0x5c0000, 0xf40000, 0x740000, 0xd40000, 0x540000}, {0x3c0000, 0xbc0000, 0x1c0000, 0x9c0000, 0x340000, 0xb40000, 0x140000, 0x940000}, {0xcc0000, 0x4c0000, 0xec0000, 0x6c0000, 0xc40000, 0x440000, 0xe40000, 0x640000}, {0x0c0000, 0x8c0000, 0x2c0000, 0xac0000, 0x040000, 0x840000, 0x240000, 0xa40000}, {0xf00000, 0x700000, 0xd00000, 0x500000, 0xf80000, 0x780000, 0xd80000, 0x580000}, {0x300000, 0xb00000, 0x100000, 0x900000, 0x380000, 0xb80000, 0x180000, 0x980000}, {0xc00000, 0x400000, 0xe00000, 0x600000, 0xc80000, 0x480000, 0xe80000, 0x680000}, {0x000000, 0x800000, 0x200000, 0xa00000, 0x080000, 0x880000, 0x280000, 0xa80000}};
-
-		/**
-		 * Constructs a new, empty ImageData with the given width, height,
-		 * depth and palette. The data will be initialized to an (all zero)
-		 * array of the appropriate size.
-		 *
-		 * @param width the width of the image
-		 * @param height the height of the image
-		 * @param depth the depth of the image
-		 * @param palette the palette of the image (must not be null)
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_INVALID_ARGUMENT - if the width or height is negative, or if the depth is not
-		 *        	one of 1, 2, 4, 8, 16, 24 or 32</li>
-		 *    <li>ERROR_NULL_ARGUMENT - if the palette is null</li>
-		 * </ul>
-		 */
-		public ImageData(int width, int height, int depth, PaletteData palette) {
-			this(width, height, depth, palette, 4, null, 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED, 0, 0, 0, 0);
-		}
-
-		/**
-		 * Constructs a new, empty ImageData with the given width, height,
-		 * depth, palette, scanlinePad and data.
-		 *
-		 * @param width the width of the image
-		 * @param height the height of the image
-		 * @param depth the depth of the image
-		 * @param palette the palette of the image
-		 * @param scanlinePad the padding of each line, in bytes
-		 * @param data the data of the image
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_INVALID_ARGUMENT - if the width or height is negative, or if the depth is not
-		 *        	one of 1, 2, 4, 8, 16, 24 or 32</li>
-		 *    <li>ERROR_NULL_ARGUMENT - if the palette or data is null</li>
-		 *    <li>ERROR_CANNOT_BE_ZERO - if the scanlinePad is zero</li>
-		 * </ul>
-		 */
-		public ImageData(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data) {
-			this(width, height, depth, palette, scanlinePad, checkData(data), 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED, 0, 0, 0, 0);
-		}
-
-		/**
-		 * Constructs an <code>ImageData</code> loaded from a file with the
-		 * specified name. Throws an error if an error occurs loading the
-		 * image, or if the image has an unsupported type.
-		 * <p>
-		 * This constructor is provided for convenience when loading a single
-		 * image only. If the file contains multiple images, only the first
-		 * one will be loaded. To load multiple images, use 
-		 * <code>ImageLoader.load()</code>.
-		 * </p>
-		 *
-		 * @param filename the name of the file to load the image from (must not be null)
-		 *
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
-		 * </ul>
-		 * @exception RuntimeException <ul>
-		 *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
-		 *    <li>ERROR_IO if an IO error occurs while reading data</li>
-		 *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
-		 * </ul>
-		 */
-		public ImageData(String filename) {
-			ImageData[] data = new ImageLoader().load(filename);
-			if (data.length < 1)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			ImageData i = data[0];
-			setAllFields(i.width, i.height, i.depth, i.scanlinePad, i.bytesPerLine, i.data, i.palette, i.transparentPixel, i.maskData, i.maskPad, i.alphaData, i.alpha, i.type, i.x, i.y, i.disposalMethod, i.delayTime);
-		}
-
-		/**
-		 * Prevents uninitialized instances from being created outside the package.
-		 */
-		ImageData() {
-			//empty constructor
-		}
-
-		/**
-		 * Constructs an image data by giving values for all non-computable fields.
-		 * <p>
-		 * This method is for internal use, and is not described further.
-		 * </p>
-		 */
-		ImageData(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data, int maskPad, byte[] maskData, byte[] alphaData, int alpha, int transparentPixel, int type, int x, int y, int disposalMethod, int delayTime) {
-
-			if (palette == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			if (!(depth == 1 || depth == 2 || depth == 4 || depth == 8 || depth == 16 || depth == 24 || depth == 32)) {
-				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-			}
-			if (width <= 0 || height <= 0) {
-				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-			}
-			if (scanlinePad == 0)
-				SWT.error(SWT.ERROR_CANNOT_BE_ZERO);
-
-			int bytesPerLine = (((width * depth + 7) / 8) + (scanlinePad - 1)) / scanlinePad * scanlinePad;
-			setAllFields(width, height, depth, scanlinePad, bytesPerLine, data != null ? data : new byte[bytesPerLine * height], palette, transparentPixel, maskData, maskPad, alphaData, alpha, type, x, y, disposalMethod, delayTime);
-		}
-
-		/**
-		 * Initializes all fields in the receiver. This method must be called
-		 * by all public constructors to ensure that all fields are initialized
-		 * for a new ImageData object. If a new field is added to the class,
-		 * then it must be added to this method.
-		 * <p>
-		 * This method is for internal use, and is not described further.
-		 * </p>
-		 */
-		void setAllFields(int width, int height, int depth, int scanlinePad, int bytesPerLine, byte[] data, PaletteData palette, int transparentPixel, byte[] maskData, int maskPad, byte[] alphaData, int alpha, int type, int x, int y, int disposalMethod, int delayTime) {
-
-			this.width = width;
-			this.height = height;
-			this.depth = depth;
-			this.scanlinePad = scanlinePad;
-			this.bytesPerLine = bytesPerLine;
-			this.data = data;
-			this.palette = palette;
-			this.transparentPixel = transparentPixel;
-			this.maskData = maskData;
-			this.maskPad = maskPad;
-			this.alphaData = alphaData;
-			this.alpha = alpha;
-			this.type = type;
-			this.x = x;
-			this.y = y;
-			this.disposalMethod = disposalMethod;
-			this.delayTime = delayTime;
-		}
-
-		/**	 
-		 * Invokes internal SWT functionality to create a new instance of
-		 * this class.
-		 * <p>
-		 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
-		 * API for <code>ImageData</code>. It is marked public only so that it
-		 * can be shared within the packages provided by SWT. It is subject
-		 * to change without notice, and should never be called from
-		 * application code.
-		 * </p>
-		 * <p>
-		 * This method is for internal use, and is not described further.
-		 * </p>
-		 */
-		public static ImageData internal_new(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data, int maskPad, byte[] maskData, byte[] alphaData, int alpha, int transparentPixel, int type, int x, int y, int disposalMethod, int delayTime) {
-			return new ImageData(width, height, depth, palette, scanlinePad, data, maskPad, maskData, alphaData, alpha, transparentPixel, type, x, y, disposalMethod, delayTime);
-		}
-
-		ImageData colorMaskImage(int pixel) {
-			ImageData mask = new ImageData(width, height, 1, bwPalette(), 2, null, 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED, 0, 0, 0, 0);
-			int[] row = new int[width];
-			for (int y = 0; y < height; y++) {
-				getPixels(0, y, width, row, 0);
-				for (int i = 0; i < width; i++) {
-					if (pixel != -1 && row[i] == pixel) {
-						row[i] = 0;
-					} else {
-						row[i] = 1;
-					}
-				}
-				mask.setPixels(0, y, width, row, 0);
-			}
-			return mask;
-		}
-
-		static byte[] checkData(byte[] data) {
-			if (data == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			return data;
-		}
-
-		/**
-		 * Returns <code>getWidth</code> pixel values starting at offset
-		 * <code>x</code> in scanline <code>y</code> in the receiver's
-		 * data starting at <code>startIndex</code>.
-		 *
-		 * @param x the x position of the first pixel to get
-		 * @param y the y position of the first pixel to get
-		 * @param getWidth the width of the data to get
-		 * @param pixels the buffer in which to put the pixels
-		 * @param startIndex the offset into the byte array to begin storing pixels
-		 *
-		 * @exception IndexOutOfBoundsException if getWidth is too large
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if getWidth is negative</li>
-		 * </ul>
-		 * @exception RuntimeException <ul>
-		 *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth is not one of 1, 2, 4 or 8
-		 *        (For higher depths, use the int[] version of this method.)</li>
-		 * </ul>
-		 */
-		public void getPixels(int x, int y, int getWidth, byte[] pixels, int startIndex) {
-			if (pixels == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			if (getWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
-				SWT.error
-
-				(SWT.ERROR_INVALID_ARGUMENT);
-			if (getWidth == 0)
-				return;
-			int index;
-			int theByte;
-			int mask = 0;
-			int n = getWidth;
-			int i = startIndex;
-			int srcX = x, srcY = y;
-			if (depth == 1) {
-				index = (y * bytesPerLine) + (x >> 3);
-				theByte = data[index] & 0xFF;
-				while (n > 0) {
-					mask = 1 << (7 - (srcX & 0x7));
-					if ((theByte & mask) == 0) {
-						pixels[i] = 0;
-					} else {
-						pixels[i] = 1;
-					}
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						if (n > 0)
-							theByte = data[index] & 0xFF;
-						srcX = 0;
-					} else {
-						if (mask == 1) {
-							index++;
-							if (n > 0)
-								theByte = data[index] & 0xFF;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 2) {
-				index = (y * bytesPerLine) + (x >> 2);
-				theByte = data[index] & 0xFF;
-				int offset;
-				while (n > 0) {
-					offset = 3 - (srcX % 4);
-					mask = 3 << (offset * 2);
-					pixels[i] = (byte) ((theByte & mask) >> (offset * 2));
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						if (n > 0)
-							theByte = data[index] & 0xFF;
-						srcX = 0;
-					} else {
-						if (offset == 0) {
-							index++;
-							theByte = data[index] & 0xFF;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 4) {
-				index = (y * bytesPerLine) + (x >> 1);
-				if ((x & 0x1) == 1) {
-					theByte = data[index] & 0xFF;
-					pixels[i] = (byte) (theByte & 0x0F);
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index++;
-					}
-				}
-				while (n > 1) {
-					theByte = data[index] & 0xFF;
-					pixels[i] = (byte) (theByte >> 4);
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						pixels[i] = (byte) (theByte & 0x0F);
-						i++;
-						n--;
-						srcX++;
-						if (srcX >= width) {
-							srcY++;
-							index = srcY * bytesPerLine;
-							srcX = 0;
-						} else {
-							index++;
-						}
-					}
-				}
-				if (n > 0) {
-					theByte = data[index] & 0xFF;
-					pixels[i] = (byte) (theByte >> 4);
-				}
-				return;
-			}
-			if (depth == 8) {
-				index = (y * bytesPerLine) + x;
-				for (int j = 0; j < getWidth; j++) {
-					pixels[i] = data[index];
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index++;
-					}
-				}
-				return;
-			}
-			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-		}
-
-		/**
-		 * Returns <code>getWidth</code> pixel values starting at offset
-		 * <code>x</code> in scanline <code>y</code> in the receiver's
-		 * data starting at <code>startIndex</code>.
-		 *
-		 * @param x the x position of the first pixel to get
-		 * @param y the y position of the first pixel to get
-		 * @param getWidth the width of the data to get
-		 * @param pixels the buffer in which to put the pixels
-		 * @param startIndex the offset into the buffer to begin storing pixels
-		 *
-		 * @exception IndexOutOfBoundsException if getWidth is too large
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if getWidth is negative</li>
-		 * </ul>
-		 * @exception RuntimeException <ul>
-		 *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth is not one of 1, 2, 4, 8, 16, 24 or 32</li>
-		 * </ul>
-		 */
-		public void getPixels(int x, int y, int getWidth, int[] pixels, int startIndex) {
-			if (pixels == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			if (getWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
-				SWT.error
-
-				(SWT.ERROR_INVALID_ARGUMENT);
-			if (getWidth == 0)
-				return;
-			int index;
-			int theByte;
-			int mask;
-			int n = getWidth;
-			int i = startIndex;
-			int srcX = x, srcY = y;
-			if (depth == 1) {
-				index = (y * bytesPerLine) + (x >> 3);
-				theByte = data[index] & 0xFF;
-				while (n > 0) {
-					mask = 1 << (7 - (srcX & 0x7));
-					if ((theByte & mask) == 0) {
-						pixels[i] = 0;
-					} else {
-						pixels[i] = 1;
-					}
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						if (n > 0)
-							theByte = data[index] & 0xFF;
-						srcX = 0;
-					} else {
-						if (mask == 1) {
-							index++;
-							if (n > 0)
-								theByte = data[index] & 0xFF;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 2) {
-				index = (y * bytesPerLine) + (x >> 2);
-				theByte = data[index] & 0xFF;
-				int offset;
-				while (n > 0) {
-					offset = 3 - (srcX % 4);
-					mask = 3 << (offset * 2);
-					pixels[i] = (byte) ((theByte & mask) >> (offset * 2));
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						if (n > 0)
-							theByte = data[index] & 0xFF;
-						srcX = 0;
-					} else {
-						if (offset == 0) {
-							index++;
-							theByte = data[index] & 0xFF;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 4) {
-				index = (y * bytesPerLine) + (x >> 1);
-				if ((x & 0x1) == 1) {
-					theByte = data[index] & 0xFF;
-					pixels[i] = theByte & 0x0F;
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index++;
-					}
-				}
-				while (n > 1) {
-					theByte = data[index] & 0xFF;
-					pixels[i] = theByte >> 4;
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						pixels[i] = theByte & 0x0F;
-						i++;
-						n--;
-						srcX++;
-						if (srcX >= width) {
-							srcY++;
-							index = srcY * bytesPerLine;
-							srcX = 0;
-						} else {
-							index++;
-						}
-					}
-				}
-				if (n > 0) {
-					theByte = data[index] & 0xFF;
-					pixels[i] = theByte >> 4;
-				}
-				return;
-			}
-			if (depth == 8) {
-				index = (y * bytesPerLine) + x;
-				for (int j = 0; j < getWidth; j++) {
-					pixels[i] = data[index] & 0xFF;
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index++;
-					}
-				}
-				return;
-			}
-			if (depth == 16) {
-				index = (y * bytesPerLine) + (x * 2);
-				for (int j = 0; j < getWidth; j++) {
-					pixels[i] = ((data[index + 1] & 0xFF) << 8) + (data[index] & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index += 2;
-					}
-				}
-				return;
-			}
-			if (depth == 24) {
-				index = (y * bytesPerLine) + (x * 3);
-				for (int j = 0; j < getWidth; j++) {
-					pixels[i] = ((data[index] & 0xFF) << 16) | ((data[index + 1] & 0xFF) << 8) | (data[index + 2] & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index += 3;
-					}
-				}
-				return;
-			}
-			if (depth == 32) {
-				index = (y * bytesPerLine) + (x * 4);
-				i = startIndex;
-				for (int j = 0; j < getWidth; j++) {
-					pixels[i] = ((data[index] & 0xFF) << 24) | ((data[index + 1] & 0xFF) << 16) | ((data[index + 2] & 0xFF) << 8) | (data[index + 3] & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index += 4;
-					}
-				}
-				return;
-			}
-			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-		}
-
-		/**
-		 * Returns an array of <code>RGB</code>s which comprise the
-		 * indexed color table of the receiver, or null if the receiver
-		 * has a direct color model.
-		 *
-		 * @return the RGB values for the image or null if direct color
-		 *
-		 * @see IconExe.PaletteData#getRGBs()
-		 */
-		public RGB[] getRGBs() {
-			return palette.getRGBs();
-		}
-
-		/**
-		 * Returns an <code>ImageData</code> which specifies the
-		 * transparency mask information for the receiver, or null if the
-		 * receiver has no transparency and is not an icon.
-		 *
-		 * @return the transparency mask or null if none exists
-		 */
-		public ImageData getTransparencyMask() {
-			if (getTransparencyType() == SWT.TRANSPARENCY_MASK) {
-				return new ImageData(width, height, 1, bwPalette(), maskPad, maskData);
-			}
-			return colorMaskImage(transparentPixel);
-		}
-
-		/**
-		 * Returns the image transparency type.
-		 *
-		 * @return the receiver's transparency type
-		 */
-		public int getTransparencyType() {
-			if (maskData != null)
-				return SWT.TRANSPARENCY_MASK;
-			if (transparentPixel != -1)
-				return SWT.TRANSPARENCY_PIXEL;
-			if (alphaData != null)
-				return SWT.TRANSPARENCY_ALPHA;
-			return SWT.TRANSPARENCY_NONE;
-		}
-
-		/**
-		 * Returns the byte order of the receiver.
-		 * 
-		 * @return MSB_FIRST or LSB_FIRST
-		 */
-		int getByteOrder() {
-			return depth != 16 ? MSB_FIRST : LSB_FIRST;
-		}
-
-		/**
-		 * Sets the pixel values starting at offset <code>x</code> in
-		 * scanline <code>y</code> in the receiver's data to the
-		 * values from the array <code>pixels</code> starting at
-		 * <code>startIndex</code>.
-		 *
-		 * @param x the x position of the pixel to set
-		 * @param y the y position of the pixel to set
-		 * @param putWidth the width of the pixels to set
-		 * @param pixels the pixels to set
-		 * @param startIndex the index at which to begin setting
-		 *
-		 * @exception IndexOutOfBoundsException if putWidth is too large
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if putWidth is negative</li>
-		 * </ul>
-		 * @exception RuntimeException <ul>
-		 *    <li>ERROR_UNSUPPORTED_DEPTH if the depth is not one of 1, 2, 4, 8
-		 *        (For higher depths, use the int[] version of this method.)</li>
-		 * </ul>
-		 */
-		public void setPixels(int x, int y, int putWidth, byte[] pixels, int startIndex) {
-			if (pixels == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			if (putWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
-				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-			if (putWidth == 0)
-				return;
-			int index;
-			int theByte;
-			int mask;
-			int n = putWidth;
-			int i = startIndex;
-			int srcX = x, srcY = y;
-			if (depth == 1) {
-				index = (y * bytesPerLine) + (x >> 3);
-				while (n > 0) {
-					mask = 1 << (7 - (srcX & 0x7));
-					if ((pixels[i] & 0x1) == 1) {
-						data[index] = (byte) ((data[index] & 0xFF) | mask);
-					} else {
-						data[index] = (byte) ((data[index] & 0xFF) & (mask ^ -1));
-					}
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						if (mask == 1) {
-							index++;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 2) {
-				byte[] masks = {(byte) 0xFC, (byte) 0xF3, (byte) 0xCF, (byte) 0x3F};
-				index = (y * bytesPerLine) + (x >> 2);
-				int offset = 3 - (x % 4);
-				while (n > 0) {
-					theByte = pixels[i] & 0x3;
-					data[index] = (byte) ((data[index] & masks[offset]) | (theByte << (offset * 2)));
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						offset = 0;
-						srcX = 0;
-					} else {
-						if (offset == 0) {
-							index++;
-							offset = 3;
-						} else {
-							offset--;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 4) {
-				index = (y * bytesPerLine) + (x >> 1);
-				boolean high = (x & 0x1) == 0;
-				while (n > 0) {
-					theByte = pixels[i] & 0x0F;
-					if (high) {
-						data[index] = (byte) ((data[index] & 0x0F) | (theByte << 4));
-					} else {
-						data[index] = (byte) ((data[index] & 0xF0) | theByte);
-					}
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						high = true;
-						srcX = 0;
-					} else {
-						if (!high)
-							index++;
-						high = !high;
-					}
-				}
-				return;
-			}
-			if (depth == 8) {
-				index = (y * bytesPerLine) + x;
-				for (int j = 0; j < putWidth; j++) {
-					data[index] = (byte) (pixels[i] & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index++;
-					}
-				}
-				return;
-			}
-			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-		}
-
-		/**
-		 * Sets the pixel values starting at offset <code>x</code> in
-		 * scanline <code>y</code> in the receiver's data to the
-		 * values from the array <code>pixels</code> starting at
-		 * <code>startIndex</code>.
-		 *
-		 * @param x the x position of the pixel to set
-		 * @param y the y position of the pixel to set
-		 * @param putWidth the width of the pixels to set
-		 * @param pixels the pixels to set
-		 * @param startIndex the index at which to begin setting
-		 *
-		 * @exception IndexOutOfBoundsException if putWidth is too large
-		 * @exception IllegalArgumentException <ul>
-		 *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
-		 *    <li>ERROR_INVALID_ARGUMENT - if putWidth is negative</li>
-		 * </ul>
-		 * @exception RuntimeException <ul>
-		 *    <li>ERROR_UNSUPPORTED_DEPTH if the depth is not one of 1, 2, 4, 8, 16, 24 or 32</li>
-		 * </ul>
-		 */
-		public void setPixels(int x, int y, int putWidth, int[] pixels, int startIndex) {
-			if (pixels == null)
-				SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			if (putWidth < 0 || x >= width || y >= height || x < 0 || y < 0)
-				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-			if (putWidth == 0)
-				return;
-			int index;
-			int theByte;
-			int mask;
-			int n = putWidth;
-			int i = startIndex;
-			int pixel;
-			int srcX = x, srcY = y;
-			if (depth == 1) {
-				index = (y * bytesPerLine) + (x >> 3);
-				while (n > 0) {
-					mask = 1 << (7 - (srcX & 0x7));
-					if ((pixels[i] & 0x1) == 1) {
-						data[index] = (byte) ((data[index] & 0xFF) | mask);
-					} else {
-						data[index] = (byte) ((data[index] & 0xFF) & (mask ^ -1));
-					}
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						if (mask == 1) {
-							index++;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 2) {
-				byte[] masks = {(byte) 0xFC, (byte) 0xF3, (byte) 0xCF, (byte) 0x3F};
-				index = (y * bytesPerLine) + (x >> 2);
-				int offset = 3 - (x % 4);
-				while (n > 0) {
-					theByte = pixels[i] & 0x3;
-					data[index] = (byte) ((data[index] & masks[offset]) | (theByte << (offset * 2)));
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						offset = 3;
-						srcX = 0;
-					} else {
-						if (offset == 0) {
-							index++;
-							offset = 3;
-						} else {
-							offset--;
-						}
-					}
-				}
-				return;
-			}
-			if (depth == 4) {
-				index = (y * bytesPerLine) + (x >> 1);
-				boolean high = (x & 0x1) == 0;
-				while (n > 0) {
-					theByte = pixels[i] & 0x0F;
-					if (high) {
-						data[index] = (byte) ((data[index] & 0x0F) | (theByte << 4));
-					} else {
-						data[index] = (byte) ((data[index] & 0xF0) | theByte);
-					}
-					i++;
-					n--;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						high = true;
-						srcX = 0;
-					} else {
-						if (!high)
-							index++;
-						high = !high;
-					}
-				}
-				return;
-			}
-			if (depth == 8) {
-				index = (y * bytesPerLine) + x;
-				for (int j = 0; j < putWidth; j++) {
-					data[index] = (byte) (pixels[i] & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index++;
-					}
-				}
-				return;
-
-			}
-			if (depth == 16) {
-				index = (y * bytesPerLine) + (x * 2);
-				for (int j = 0; j < putWidth; j++) {
-					pixel = pixels[i];
-					data[index] = (byte) (pixel & 0xFF);
-					data[index + 1] = (byte) ((pixel >> 8) & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index += 2;
-					}
-				}
-				return;
-			}
-			if (depth == 24) {
-				index = (y * bytesPerLine) + (x * 3);
-				for (int j = 0; j < putWidth; j++) {
-					pixel = pixels[i];
-					data[index] = (byte) ((pixel >> 16) & 0xFF);
-					data[index + 1] = (byte) ((pixel >> 8) & 0xFF);
-					data[index + 2] = (byte) (pixel & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index += 3;
-					}
-				}
-				return;
-			}
-			if (depth == 32) {
-				index = (y * bytesPerLine) + (x * 4);
-				for (int j = 0; j < putWidth; j++) {
-					pixel = pixels[i];
-					data[index] = (byte) ((pixel >> 24) & 0xFF);
-					data[index + 1] = (byte) ((pixel >> 16) & 0xFF);
-					data[index + 2] = (byte) ((pixel >> 8) & 0xFF);
-					data[index + 3] = (byte) (pixel & 0xFF);
-					i++;
-					srcX++;
-					if (srcX >= width) {
-						srcY++;
-						index = srcY * bytesPerLine;
-						srcX = 0;
-					} else {
-						index += 4;
-					}
-				}
-				return;
-			}
-			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-		}
-
-		/**
-		 * Returns a palette with 2 colors: black & white.
-		 */
-		static PaletteData bwPalette() {
-			return new PaletteData(new RGB[] {new RGB(0, 0, 0), new RGB(255, 255, 255)});
-		}
-
-		/**
-		 * Gets the offset of the most significant bit for
-		 * the given mask.
-		 */
-		static int getMSBOffset(int mask) {
-			for (int i = 31; i >= 0; i--) {
-				if (((mask >> i) & 0x1) != 0)
-					return i + 1;
-			}
-			return 0;
-		}
-
-		/**
-		 * Finds the closest match.
-		 */
-		static int closestMatch(int depth, byte red, byte green, byte blue, int redMask, int greenMask, int blueMask, byte[] reds, byte[] greens, byte[] blues) {
-			if (depth > 8) {
-				int rshift = 32 - getMSBOffset(redMask);
-				int gshift = 32 - getMSBOffset(greenMask);
-				int bshift = 32 - getMSBOffset(blueMask);
-				return (((red << 24) >>> rshift) & redMask) | (((green << 24) >>> gshift) & greenMask) | (((blue << 24) >>> bshift) & blueMask);
-			}
-			int r, g, b;
-			int minDistance = 0x7fffffff;
-			int nearestPixel = 0;
-			int n = reds.length;
-			for (int j = 0; j < n; j++) {
-				r = (reds[j] & 0xFF) - (red & 0xFF);
-				g = (greens[j] & 0xFF) - (green & 0xFF);
-				b = (blues[j] & 0xFF) - (blue & 0xFF);
-				int distance = r * r + g * g + b * b;
-				if (distance < minDistance) {
-					nearestPixel = j;
-					if (distance == 0)
-						break;
-					minDistance = distance;
-				}
-			}
-			return nearestPixel;
-		}
-
-		static final ImageData convertMask(ImageData mask) {
-			if (mask.depth == 1)
-				return mask;
-			PaletteData palette = new PaletteData(new RGB[] {new RGB(0, 0, 0), new RGB(255, 255, 255)});
-			ImageData newMask = new ImageData(mask.width, mask.height, 1, palette);
-			/* Find index of black in mask palette */
-			int blackIndex = 0;
-			RGB[] rgbs = mask.getRGBs();
-			if (rgbs != null) {
-				while (blackIndex < rgbs.length) {
-					if (rgbs[blackIndex].equals(palette.colors[0]))
-						break;
-					blackIndex++;
-				}
-			}
-			int[] pixels = new int[mask.width];
-			for (int y = 0; y < mask.height; y++) {
-				mask.getPixels(0, y, mask.width, pixels, 0);
-				for (int i = 0; i < pixels.length; i++) {
-					if (pixels[i] == blackIndex) {
-						pixels[i] = 0;
-					} else {
-						pixels[i] = 1;
-					}
-				}
-				newMask.setPixels(0, y, mask.width, pixels, 0);
-			}
-			return newMask;
-		}
-
-		static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
-			if (pad == newPad)
-				return data;
-			int stride = (width * depth + 7) / 8;
-			int bpl = (stride + (pad - 1)) / pad * pad;
-			int newBpl = (stride + (newPad - 1)) / newPad * newPad;
-			byte[] newData = new byte[height * newBpl];
-			int srcIndex = 0, destIndex = 0;
-			for (int y = 0; y < height; y++) {
-				System.arraycopy(data, srcIndex, newData, destIndex, stride);
-				srcIndex += bpl;
-				destIndex += newBpl;
-			}
-			return newData;
-		}
-
-		/**
-		 * Blit operation bits to be OR'ed together to specify the desired operation.
-		 */
-		static final int BLIT_SRC = 1, // copy source directly, else applies logic operations
-				BLIT_ALPHA = 2, // enable alpha blending
-				BLIT_DITHER = 4; // enable dithering in low color modes
-
-		/**
-		 * Alpha mode, values 0 - 255 specify global alpha level
-		 */
-		static final int ALPHA_OPAQUE = 255, // Fully opaque (ignores any alpha data)
-				ALPHA_TRANSPARENT = 0, // Fully transparent (ignores any alpha data)
-				ALPHA_CHANNEL_SEPARATE = -1, // Use alpha channel from separate alphaData
-				ALPHA_CHANNEL_SOURCE = -2, // Use alpha channel embedded in sourceData
-				ALPHA_MASK_UNPACKED = -3, // Use transparency mask formed by bytes in alphaData (non-zero is opaque)
-				ALPHA_MASK_PACKED = -4, // Use transparency mask formed by packed bits in alphaData
-				ALPHA_MASK_INDEX = -5, // Consider source palette indices transparent if in alphaData array
-				ALPHA_MASK_RGB = -6; // Consider source RGBs transparent if in RGB888 format alphaData array
-
-		/**
-		 * Byte and bit order constants.
-		 */
-		static final int LSB_FIRST = 0;
-		static final int MSB_FIRST = 1;
-
-		/**
-		 * Data types (internal)
-		 */
-		/*
-		private static final int
-			// direct / true color formats with arbitrary masks & shifts
-			TYPE_GENERIC_8 = 0,
-			TYPE_GENERIC_16_MSB = 1,
-			TYPE_GENERIC_16_LSB = 2,
-			TYPE_GENERIC_24 = 3,
-			TYPE_GENERIC_32_MSB = 4,
-			TYPE_GENERIC_32_LSB = 5,
-			// palette indexed color formats
-			TYPE_INDEX_8 = 6,
-			TYPE_INDEX_4 = 7,
-			TYPE_INDEX_2 = 8,
-			TYPE_INDEX_1_MSB = 9,
-			TYPE_INDEX_1_LSB = 10;
-		*/
-		/**
-		 * Computes the required channel shift from a mask.
-		 */
-		static int getChannelShift(int mask) {
-			if (mask == 0)
-				return 0;
-			int i;
-			for (i = 0; ((mask & 1) == 0) && (i < 32); ++i) {
-				mask >>>= 1;
-			}
-			return i;
-		}
-
-		/**
-		 * Computes the required channel width (depth) from a mask.
-		 */
-		static int getChannelWidth(int mask, int shift) {
-			if (mask == 0)
-				return 0;
-			int i;
-			mask >>>= shift;
-			for (i = shift; ((mask & 1) != 0) && (i < 32); ++i) {
-				mask >>>= 1;
-			}
-			return i - shift;
-		}
-
-		/**
-		 * Extracts a field from packed RGB data given a mask for that field.
-		 */
-		static byte getChannelField(int data, int mask) {
-			final int shift = getChannelShift(mask);
-			return ANY_TO_EIGHT[getChannelWidth(mask, shift)][(data & mask) >>> shift];
-		}
-
-		/* 
-		 * Fill in dithered gradated values for a color channel
-		 */
-		static final void buildDitheredGradientChannel(int from, int to, int steps, int bandWidth, int bandHeight, boolean vertical, byte[] bitmapData, int dp, int bytesPerLine, int bits) {
-			final int mask = 0xff00 >>> bits;
-			int val = from << 16;
-			final int inc = ((to << 16) - val) / steps + 1;
-			if (vertical) {
-				for (int dy = 0; dy < bandHeight; ++dy, dp += bytesPerLine) {
-					for (int dx = 0, dptr = dp; dx < bandWidth; ++dx, dptr += 4) {
-						final int thresh = DITHER_MATRIX[dy & 7][dx] >>> bits;
-						int temp = val + thresh;
-						if (temp > 0xffffff)
-							bitmapData[dptr] = -1;
-						else
-							bitmapData[dptr] = (byte) ((temp >>> 16) & mask);
-					}
-					val += inc;
-				}
-			} else {
-				for (int dx = 0; dx < bandWidth; ++dx, dp += 4) {
-					for (int dy = 0, dptr = dp; dy < bandHeight; ++dy, dptr += bytesPerLine) {
-						final int thresh = DITHER_MATRIX[dy][dx & 7] >>> bits;
-						int temp = val + thresh;
-						if (temp > 0xffffff)
-							bitmapData[dptr] = -1;
-						else
-							bitmapData[dptr] = (byte) ((temp >>> 16) & mask);
-					}
-					val += inc;
-				}
-			}
-		}
-	}
-
-	static class LEDataInputStream extends InputStream {
-		int position;
-		InputStream in;
-
-		/**
-		 * The byte array containing the bytes to read.
-		 */
-		protected byte[] buf;
-
-		/**
-		 * The current position within the byte array <code>buf</code>. A value
-		 * equal to buf.length indicates no bytes available.  A value of
-		 * 0 indicates the buffer is full.
-		 */
-		protected int pos;
-
-		public LEDataInputStream(InputStream input) {
-			this(input, 512);
-		}
-
-		public LEDataInputStream(InputStream input, int bufferSize) {
-			this.in = input;
-			if (bufferSize > 0) {
-				buf = new byte[bufferSize];
-				pos = bufferSize;
-			} else
-				throw new IllegalArgumentException();
-		}
-
-		public void close() throws IOException {
-			buf = null;
-			if (in != null) {
-				in.close();
-				in = null;
-			}
-		}
-
-		/**
-		 * Answer how many bytes were read.
-		 */
-		public int getPosition() {
-			return position;
-		}
-
-		/**
-		 * Answers how many bytes are available for reading without blocking
-		 */
-		public int available() throws IOException {
-			if (buf == null)
-				throw new IOException();
-			return (buf.length - pos) + in.available();
-		}
-
-		/**
-		 * Answer the next byte of the input stream.
-		 */
-		public int read() throws IOException {
-			if (buf == null)
-				throw new IOException();
-			position++;
-			if (pos < buf.length)
-				return (buf[pos++] & 0xFF);
-			return in.read();
-		}
-
-		/**
-		 * Don't imitate the JDK behaviour of reading a random number
-		 * of bytes when you can actually read them all.
-		 */
-		public int read(byte b[], int off, int len) throws IOException {
-			int result;
-			int left = len;
-			result = readData(b, off, len);
-			while (true) {
-				if (result == -1)
-					return -1;
-				position += result;
-				if (result == left)
-					return len;
-				left -= result;
-				off += result;
-				result = readData(b, off, left);
-			}
-		}
-
-		/**
-		 * Reads at most <code>length</code> bytes from this LEDataInputStream and 
-		 * stores them in byte array <code>buffer</code> starting at <code>offset</code>.
-		 * <p>
-		 * Answer the number of bytes actually read or -1 if no bytes were read and 
-		 * end of stream was encountered.  This implementation reads bytes from 
-		 * the pushback buffer first, then the target stream if more bytes are required
-		 * to satisfy <code>count</code>.
-		 * </p>
-		 * @param buffer the byte array in which to store the read bytes.
-		 * @param offset the offset in <code>buffer</code> to store the read bytes.
-		 * @param length the maximum number of bytes to store in <code>buffer</code>.
-		 *
-		 * @return int the number of bytes actually read or -1 if end of stream.
-		 *
-		 * @exception java.io.IOException if an IOException occurs.
-		 */
-		private int readData(byte[] buffer, int offset, int length) throws IOException {
-			if (buf == null)
-				throw new IOException();
-			if (offset < 0 || offset > buffer.length || length < 0 || (length > buffer.length - offset)) {
-				throw new ArrayIndexOutOfBoundsException();
-			}
-
-			int cacheCopied = 0;
-			int newOffset = offset;
-
-			// Are there pushback bytes available?
-			int available = buf.length - pos;
-			if (available > 0) {
-				cacheCopied = (available >= length) ? length : available;
-				System.arraycopy(buf, pos, buffer, newOffset, cacheCopied);
-				newOffset += cacheCopied;
-				pos += cacheCopied;
-			}
-
-			// Have we copied enough?
-			if (cacheCopied == length)
-				return length;
-
-			int inCopied = in.read(buffer, newOffset, length - cacheCopied);
-
-			if (inCopied > 0)
-				return inCopied + cacheCopied;
-			if (cacheCopied == 0)
-				return inCopied;
-			return cacheCopied;
-		}
-
-		/**
-		 * Answer an integer comprised of the next
-		 * four bytes of the input stream.
-		 */
-		public int readInt() throws IOException {
-			byte[] buf = new byte[4];
-			read(buf);
-			return ((((((buf[3] & 0xFF) << 8) | (buf[2] & 0xFF)) << 8) | (buf[1] & 0xFF)) << 8) | (buf[0] & 0xFF);
-		}
-
-		/**
-		 * Answer a short comprised of the next
-		 * two bytes of the input stream.
-		 */
-		public short readShort() throws IOException {
-			byte[] buf = new byte[2];
-			read(buf);
-			return (short) (((buf[1] & 0xFF) << 8) | (buf[0] & 0xFF));
-		}
-
-		/**
-		 * Push back the entire content of the given buffer <code>b</code>.
-		 * <p>
-		 * The bytes are pushed so that they would be read back b[0], b[1], etc. 
-		 * If the push back buffer cannot handle the bytes copied from <code>b</code>, 
-		 * an IOException will be thrown and no byte will be pushed back.
-		 * </p>
-		 * 
-		 * @param b the byte array containing bytes to push back into the stream
-		 *
-		 * @exception 	java.io.IOException if the pushback buffer is too small
-		 */
-		public void unread(byte[] b) throws IOException {
-			int length = b.length;
-			if (length > pos)
-				throw new IOException();
-			position -= length;
-			pos -= length;
-			System.arraycopy(b, 0, buf, pos, length);
-		}
-	}
-
-	public static abstract class FileFormat {
-		LEDataInputStream inputStream;
-		ImageLoader loader;
-		int compression;
-
-		byte[] bitInvertData(byte[] data, int startIndex, int endIndex) {
-			// Destructively bit invert data in the given byte array.
-			for (int i = startIndex; i < endIndex; i++) {
-				data[i] = (byte) (255 - data[i - startIndex]);
-			}
-			return data;
-		}
-
-		/**
-		 * Return whether or not the specified input stream
-		 * represents a supported file format.
-		 */
-		abstract boolean isFileFormat(LEDataInputStream stream);
-
-		abstract ImageData[] loadFromByteStream();
-
-		public ImageData[] loadFromStream(LEDataInputStream stream) {
-			try {
-				inputStream = stream;
-				return loadFromByteStream();
-			} catch (Exception e) {
-				SWT.error(SWT.ERROR_IO, e);
-				return null;
-			}
-		}
-
-		public static ImageData[] load(InputStream is, ImageLoader loader) {
-			LEDataInputStream stream = new LEDataInputStream(is);
-			boolean isSupported = false;
-			FileFormat fileFormat = new WinICOFileFormat();
-			if (fileFormat.isFileFormat(stream))
-				isSupported = true;
-			else {
-				fileFormat = new WinBMPFileFormat();
-				if (fileFormat.isFileFormat(stream))
-					isSupported = true;
-			}
-			if (!isSupported)
-				SWT.error(SWT.ERROR_UNSUPPORTED_FORMAT);
-			fileFormat.loader = loader;
-			return fileFormat.loadFromStream(stream);
-		}
-	}
-
-	static class WinBMPFileFormat extends FileFormat {
-		static final int BMPFileHeaderSize = 14;
-		static final int BMPHeaderFixedSize = 40;
-		int importantColors;
-
-		void decompressData(byte[] src, byte[] dest, int stride, int cmp) {
-			if (cmp == 1) { // BMP_RLE8_COMPRESSION
-				if (decompressRLE8Data(src, src.length, stride, dest, dest.length) <= 0)
-					SWT.error(SWT.ERROR_INVALID_IMAGE);
-				return;
-			}
-			if (cmp == 2) { // BMP_RLE4_COMPRESSION
-				if (decompressRLE4Data(src, src.length, stride, dest, dest.length) <= 0)
-					SWT.error(SWT.ERROR_INVALID_IMAGE);
-				return;
-			}
-			SWT.error(SWT.ERROR_INVALID_IMAGE);
-		}
-
-		int decompressRLE4Data(byte[] src, int numBytes, int stride, byte[] dest, int destSize) {
-			int sp = 0;
-			int se = numBytes;
-			int dp = 0;
-			int de = destSize;
-			int x = 0, y = 0;
-			while (sp < se) {
-				int len = src[sp] & 0xFF;
-				sp++;
-				if (len == 0) {
-					len = src[sp] & 0xFF;
-					sp++;
-					switch (len) {
-						case 0 : /* end of line */
-							y++;
-							x = 0;
-							dp = y * stride;
-							if (dp >= de)
-								return -1;
-							break;
-						case 1 : /* end of bitmap */
-							return 1;
-						case 2 : /* delta */
-							x += src[sp] & 0xFF;
-							sp++;
-							y += src[sp] & 0xFF;
-							sp++;
-							dp = y * stride + x / 2;
-							if (dp >= de)
-								return -1;
-							break;
-						default : /* absolute mode run */
-							if ((len & 1) != 0) /* odd run lengths not currently supported */
-								return -1;
-							x += len;
-							len = len / 2;
-							if (len > (se - sp))
-								return -1;
-							if (len > (de - dp))
-								return -1;
-							for (int i = 0; i < len; i++) {
-								dest[dp] = src[sp];
-								dp++;
-								sp++;
-							}
-							if ((sp & 1) != 0)
-								sp++; /* word align sp? */
-							break;
-					}
-				} else {
-					if ((len & 1) != 0)
-						return -1;
-					x += len;
-					len = len / 2;
-					byte theByte = src[sp];
-					sp++;
-					if (len > (de - dp))
-						return -1;
-					for (int i = 0; i < len; i++) {
-						dest[dp] = theByte;
-						dp++;
-					}
-				}
-			}
-			return 1;
-		}
-
-		int decompressRLE8Data(byte[] src, int numBytes, int stride, byte[] dest, int destSize) {
-			int sp = 0;
-			int se = numBytes;
-			int dp = 0;
-			int de = destSize;
-			int x = 0, y = 0;
-			while (sp < se) {
-				int len = src[sp] & 0xFF;
-				sp++;
-				if (len == 0) {
-					len = src[sp] & 0xFF;
-					sp++;
-					switch (len) {
-						case 0 : /* end of line */
-							y++;
-							x = 0;
-							dp = y * stride;
-							if (dp >= de)
-								return -1;
-							break;
-						case 1 : /* end of bitmap */
-							return 1;
-						case 2 : /* delta */
-							x += src[sp] & 0xFF;
-							sp++;
-							y += src[sp] & 0xFF;
-							sp++;
-							dp = y * stride + x;
-							if (dp >= de)
-								return -1;
-							break;
-						default : /* absolute mode run */
-							if (len > (se - sp))
-								return -1;
-							if (len > (de - dp))
-								return -1;
-							for (int i = 0; i < len; i++) {
-								dest[dp] = src[sp];
-								dp++;
-								sp++;
-							}
-							if ((sp & 1) != 0)
-								sp++; /* word align sp? */
-							x += len;
-							break;
-					}
-				} else {
-					byte theByte = src[sp];
-					sp++;
-					if (len > (de - dp))
-						return -1;
-					for (int i = 0; i < len; i++) {
-						dest[dp] = theByte;
-						dp++;
-					}
-					x += len;
-				}
-			}
-			return 1;
-		}
-
-		boolean isFileFormat(LEDataInputStream stream) {
-			try {
-				byte[] header = new byte[18];
-				stream.read(header);
-				stream.unread(header);
-				int infoHeaderSize = (header[14] & 0xFF) | ((header[15] & 0xFF) << 8) | ((header[16] & 0xFF) << 16) | ((header[17] & 0xFF) << 24);
-				return header[0] == 0x42 && header[1] == 0x4D && infoHeaderSize >= BMPHeaderFixedSize;
-			} catch (Exception e) {
-				return false;
-			}
-		}
-
-		byte[] loadData(byte[] infoHeader) {
-			int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-			int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-			int stride = (width * bitCount + 7) / 8;
-			stride = (stride + 3) / 4 * 4; // Round up to 4 byte multiple
-			byte[] data = loadData(infoHeader, stride);
-			flipScanLines(data, stride, height);
-			return data;
-		}
-
-		byte[] loadData(byte[] infoHeader, int stride) {
-			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-			int dataSize = height * stride;
-			byte[] data = new byte[dataSize];
-			int cmp = (infoHeader[16] & 0xFF) | ((infoHeader[17] & 0xFF) << 8) | ((infoHeader[18] & 0xFF) << 16) | ((infoHeader[19] & 0xFF) << 24);
-			if (cmp == 0) { // BMP_NO_COMPRESSION
-				try {
-					if (inputStream.read(data) != dataSize)
-						SWT.error(SWT.ERROR_INVALID_IMAGE);
-				} catch (IOException e) {
-					SWT.error(SWT.ERROR_IO, e);
-				}
-			} else {
-				int compressedSize = (infoHeader[20] & 0xFF) | ((infoHeader[21] & 0xFF) << 8) | ((infoHeader[22] & 0xFF) << 16) | ((infoHeader[23] & 0xFF) << 24);
-				byte[] compressed = new byte[compressedSize];
-				try {
-					if (inputStream.read(compressed) != compressedSize)
-						SWT.error(SWT.ERROR_INVALID_IMAGE);
-				} catch (IOException e) {
-					SWT.error(SWT.ERROR_IO, e);
-				}
-				decompressData(compressed, data, stride, cmp);
-			}
-			return data;
-		}
-
-		int[] loadFileHeader() {
-			int[] header = new int[5];
-			try {
-				header[0] = inputStream.readShort();
-				header[1] = inputStream.readInt();
-				header[2] = inputStream.readShort();
-				header[3] = inputStream.readShort();
-				header[4] = inputStream.readInt();
-			} catch (IOException e) {
-				SWT.error(SWT.ERROR_IO, e);
-			}
-			if (header[0] != 0x4D42)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			return header;
-		}
-
-		ImageData[] loadFromByteStream() {
-			int[] fileHeader = loadFileHeader();
-			byte[] infoHeader = new byte[BMPHeaderFixedSize];
-			try {
-				inputStream.read(infoHeader);
-			} catch (Exception e) {
-				SWT.error(SWT.ERROR_IO, e);
-			}
-			int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-			int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-			PaletteData palette = loadPalette(infoHeader);
-			if (inputStream.getPosition() < fileHeader[4]) {
-				// Seek to the specified offset
-				try {
-					inputStream.skip(fileHeader[4] - inputStream.getPosition());
-				} catch (IOException e) {
-					SWT.error(SWT.ERROR_IO, e);
-				}
-			}
-			byte[] data = loadData(infoHeader);
-			this.compression = (infoHeader[16] & 0xFF) | ((infoHeader[17] & 0xFF) << 8) | ((infoHeader[18] & 0xFF) << 16) | ((infoHeader[19] & 0xFF) << 24);
-			this.importantColors = (infoHeader[36] & 0xFF) | ((infoHeader[37] & 0xFF) << 8) | ((infoHeader[38] & 0xFF) << 16) | ((infoHeader[39] & 0xFF) << 24);
-			//	int xPelsPerMeter = (infoHeader[24] & 0xFF) | ((infoHeader[25] & 0xFF) << 8) | ((infoHeader[26] & 0xFF) << 16) | ((infoHeader[27] & 0xFF) << 24);
-			//	int yPelsPerMeter = (infoHeader[28] & 0xFF) | ((infoHeader[29] & 0xFF) << 8) | ((infoHeader[30] & 0xFF) << 16) | ((infoHeader[31] & 0xFF) << 24);
-			int type = (this.compression == 1 /*BMP_RLE8_COMPRESSION*/) || (this.compression == 2 /*BMP_RLE4_COMPRESSION*/) ? SWT.IMAGE_BMP_RLE : SWT.IMAGE_BMP;
-			return new ImageData[] {ImageData.internal_new(width, height, bitCount, palette, 4, data, 0, null, null, -1, -1, type, 0, 0, 0, 0)};
-		}
-
-		PaletteData loadPalette(byte[] infoHeader) {
-			int depth = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-			if (depth <= 8) {
-				int numColors = (infoHeader[32] & 0xFF) | ((infoHeader[33] & 0xFF) << 8) | ((infoHeader[34] & 0xFF) << 16) | ((infoHeader[35] & 0xFF) << 24);
-				if (numColors == 0) {
-					numColors = 1 << depth;
-				} else {
-					if (numColors > 256)
-						numColors = 256;
-				}
-				byte[] buf = new byte[numColors * 4];
-				try {
-					if (inputStream.read(buf) != buf.length)
-						SWT.error(SWT.ERROR_INVALID_IMAGE);
-				} catch (IOException e) {
-					SWT.error(SWT.ERROR_IO, e);
-				}
-				return paletteFromBytes(buf, numColors);
-			}
-			if (depth == 16)
-				return new PaletteData(0x7C00, 0x3E0, 0x1F);
-			if (depth == 24)
-				return new PaletteData(0xFF, 0xFF00, 0xFF0000);
-			return new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
-		}
-
-		PaletteData paletteFromBytes(byte[] bytes, int numColors) {
-			int bytesOffset = 0;
-			RGB[] colors = new RGB[numColors];
-			for (int i = 0; i < numColors; i++) {
-				colors[i] = new RGB(bytes[bytesOffset + 2] & 0xFF, bytes[bytesOffset + 1] & 0xFF, bytes[bytesOffset] & 0xFF);
-				bytesOffset += 4;
-			}
-			return new PaletteData(colors);
-		}
-
-		/**
-		 * Answer a byte array containing the BMP representation of
-		 * the given device independent palette.
-		 */
-		static byte[] paletteToBytes(PaletteData pal) {
-			int n = pal.colors == null ? 0 : (pal.colors.length < 256 ? pal.colors.length : 256);
-			byte[] bytes = new byte[n * 4];
-			int offset = 0;
-			for (int i = 0; i < n; i++) {
-				RGB col = pal.colors[i];
-				bytes[offset] = (byte) col.blue;
-				bytes[offset + 1] = (byte) col.green;
-				bytes[offset + 2] = (byte) col.red;
-				offset += 4;
-			}
-			return bytes;
-		}
-
-		void flipScanLines(byte[] data, int stride, int height) {
-			int i1 = 0;
-			int i2 = (height - 1) * stride;
-			for (int i = 0; i < height / 2; i++) {
-				for (int index = 0; index < stride; index++) {
-					byte b = data[index + i1];
-					data[index + i1] = data[index + i2];
-					data[index + i2] = b;
-				}
-				i1 += stride;
-				i2 -= stride;
-			}
-		}
-
-	}
-
-	static class WinICOFileFormat extends FileFormat {
-
-		static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
-			if (pad == newPad)
-				return data;
-			int stride = (width * depth + 7) / 8;
-			int bpl = (stride + (pad - 1)) / pad * pad;
-			int newBpl = (stride + (newPad - 1)) / newPad * newPad;
-			byte[] newData = new byte[height * newBpl];
-			int srcIndex = 0, destIndex = 0;
-			for (int y = 0; y < height; y++) {
-				System.arraycopy(data, srcIndex, newData, destIndex, newBpl);
-				srcIndex += bpl;
-				destIndex += newBpl;
-			}
-			return newData;
-		}
-
-		/**
-		 * Answer the size in bytes of the file representation of the given
-		 * icon
-		 */
-		int iconSize(ImageData i) {
-			int shapeDataStride = (i.width * i.depth + 31) / 32 * 4;
-			int maskDataStride = (i.width + 31) / 32 * 4;
-			int dataSize = (shapeDataStride + maskDataStride) * i.height;
-			int paletteSize = i.palette.colors != null ? i.palette.colors.length * 4 : 0;
-			return WinBMPFileFormat.BMPHeaderFixedSize + paletteSize + dataSize;
-		}
-
-		boolean isFileFormat(LEDataInputStream stream) {
-			try {
-				byte[] header = new byte[4];
-				stream.read(header);
-				stream.unread(header);
-				return header[0] == 0 && header[1] == 0 && header[2] == 1 && header[3] == 0;
-			} catch (Exception e) {
-				return false;
-			}
-		}
-
-		boolean isValidIcon(ImageData i) {
-			switch (i.depth) {
-				case 1 :
-				case 4 :
-				case 8 :
-					if (i.palette.isDirect)
-						return false;
-					int size = i.palette.colors.length;
-					return size == 2 || size == 16 || size == 32 || size == 256;
-				case 24 :
-				case 32 :
-					return i.palette.isDirect;
-			}
-			return false;
-		}
-
-		int loadFileHeader(LEDataInputStream byteStream) {
-			int[] fileHeader = new int[3];
-			try {
-				fileHeader[0] = byteStream.readShort();
-				fileHeader[1] = byteStream.readShort();
-				fileHeader[2] = byteStream.readShort();
-			} catch (IOException e) {
-				SWT.error(SWT.ERROR_IO, e);
-			}
-			if ((fileHeader[0] != 0) || (fileHeader[1] != 1))
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			int numIcons = fileHeader[2];
-			if (numIcons <= 0)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			return numIcons;
-		}
-
-		int loadFileHeader(LEDataInputStream byteStream, boolean hasHeader) {
-			int[] fileHeader = new int[3];
-			try {
-				if (hasHeader) {
-					fileHeader[0] = byteStream.readShort();
-					fileHeader[1] = byteStream.readShort();
-				} else {
-					fileHeader[0] = 0;
-					fileHeader[1] = 1;
-				}
-				fileHeader[2] = byteStream.readShort();
-			} catch (IOException e) {
-				SWT.error(SWT.ERROR_IO, e);
-			}
-			if ((fileHeader[0] != 0) || (fileHeader[1] != 1))
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			int numIcons = fileHeader[2];
-			if (numIcons <= 0)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			return numIcons;
-		}
-
-		ImageData[] loadFromByteStream() {
-			int numIcons = loadFileHeader(inputStream);
-			int[][] headers = loadIconHeaders(numIcons);
-			ImageData[] icons = new ImageData[headers.length];
-			for (int i = 0; i < icons.length; i++) {
-				icons[i] = loadIcon(headers[i]);
-			}
-			return icons;
-		}
-
-		/**
-		 * Load one icon from the byte stream.
-		 */
-		ImageData loadIcon(int[] iconHeader) {
-			byte[] infoHeader = loadInfoHeader(iconHeader);
-			WinBMPFileFormat bmpFormat = new WinBMPFileFormat();
-			bmpFormat.inputStream = inputStream;
-			PaletteData palette = bmpFormat.loadPalette(infoHeader);
-			byte[] shapeData = bmpFormat.loadData(infoHeader);
-			int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-			int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-			int depth = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-			infoHeader[14] = 1;
-			infoHeader[15] = 0;
-			byte[] maskData = bmpFormat.loadData(infoHeader);
-			maskData = convertPad(maskData, width, height, 1, 4, 2);
-			bitInvertData(maskData, 0, maskData.length);
-			return ImageData.internal_new(width, height, depth, palette, 4, shapeData, 2, maskData, null, -1, -1, SWT.IMAGE_ICO, 0, 0, 0, 0);
-		}
-
-		int[][] loadIconHeaders(int numIcons) {
-			int[][] headers = new int[numIcons][7];
-			try {
-				for (int i = 0; i < numIcons; i++) {
-					headers[i][0] = inputStream.read();
-					headers[i][1] = inputStream.read();
-					headers[i][2] = inputStream.readShort();
-					headers[i][3] = inputStream.readShort();
-					headers[i][4] = inputStream.readShort();
-					headers[i][5] = inputStream.readInt();
-					headers[i][6] = inputStream.readInt();
-				}
-			} catch (IOException e) {
-				SWT.error(SWT.ERROR_IO, e);
-			}
-			return headers;
-		}
-
-		byte[] loadInfoHeader(int[] iconHeader) {
-			int width = iconHeader[0];
-			int height = iconHeader[1];
-			int numColors = iconHeader[2]; // the number of colors is in the low byte, but the high byte must be 0
-			if (numColors == 0)
-				numColors = 256; // this is specified: '00' represents '256' (0x100) colors
-			if ((numColors != 2) && (numColors != 8) && (numColors != 16) && (numColors != 32) && (numColors != 256))
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			if (inputStream.getPosition() < iconHeader[6]) {
-				// Seek to the specified offset
-				try {
-					inputStream.skip(iconHeader[6] - inputStream.getPosition());
-				} catch (IOException e) {
-					SWT.error(SWT.ERROR_IO, e);
-					return null;
-				}
-			}
-			byte[] infoHeader = new byte[WinBMPFileFormat.BMPHeaderFixedSize];
-			try {
-				inputStream.read(infoHeader);
-			} catch (IOException e) {
-				SWT.error(SWT.ERROR_IO, e);
-			}
-			if (((infoHeader[12] & 0xFF) | ((infoHeader[13] & 0xFF) << 8)) != 1)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			int infoWidth = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-			int infoHeight = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-			int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-			if (height == infoHeight && bitCount == 1)
-				height /= 2;
-			if (!((width == infoWidth) && (height * 2 == infoHeight) && (bitCount == 1 || bitCount == 4 || bitCount == 8 || bitCount == 24 || bitCount == 32)))
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-			infoHeader[8] = (byte) (height & 0xFF);
-			infoHeader[9] = (byte) ((height >> 8) & 0xFF);
-			infoHeader[10] = (byte) ((height >> 16) & 0xFF);
-			infoHeader[11] = (byte) ((height >> 24) & 0xFF);
-			return infoHeader;
-		}
-	}
-
-	static class SWT {
-		public static final int IMAGE_ICO = 3;
-		public static final int ERROR_IO = 39;
-		public static final int ERROR_INVALID_IMAGE = 40;
-		public static final int ERROR_NULL_ARGUMENT = 4;
-		public static final int ERROR_INVALID_ARGUMENT = 5;
-		public static final int ERROR_CANNOT_BE_ZERO = 7;
-		public static final int IMAGE_UNDEFINED = -1;
-		public static final int ERROR_UNSUPPORTED_DEPTH = 38;
-		public static final int TRANSPARENCY_MASK = 1 << 1;
-		public static final int ERROR_UNSUPPORTED_FORMAT = 42;
-		public static final int TRANSPARENCY_ALPHA = 1 << 0;
-		public static final int TRANSPARENCY_NONE = 0x0;
-		public static final int TRANSPARENCY_PIXEL = 1 << 2;
-		public static final int IMAGE_BMP = 0;
-		public static final int IMAGE_BMP_RLE = 1;
-
-		public static void error(int code) {
-			throw new RuntimeException("Error " + code); //$NON-NLS-1$
-		}
-
-		public static void error(int code, Throwable t) {
-			throw new RuntimeException(t);
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractAdvice.java
index 457323f..d12288b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherAction.java
index 5c2aa81..9145b2a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -268,6 +268,26 @@ public abstract class AbstractPublisherAction implements IPublisherAction {
 	}
 
 	/**
+	 * Add any update descriptor advice to the given IU
+	 * @param iu the IU to decorate
+	 * @param info the publisher info supplying the advice
+	 */
+	protected static void processUpdateDescriptorAdvice(InstallableUnitDescription iu, IPublisherInfo info) {
+		Collection<IUpdateDescriptorAdvice> advice = info.getAdvice(null, false, iu.getId(), iu.getVersion(), IUpdateDescriptorAdvice.class);
+
+		if (advice.isEmpty())
+			return;
+
+		for (IUpdateDescriptorAdvice entry : advice) {
+			//process the IU Descriptor
+			IUpdateDescriptor updateDescriptor = entry.getUpdateDescriptor(iu);
+			if (updateDescriptor != null) {
+				iu.setUpdateDescriptor(updateDescriptor);
+			}
+		}
+	}
+
+	/**
 	 * Add all of the advised provided and required capabilities for the given installable unit.
 	 * @param iu the IU to decorate
 	 * @param info the publisher info supplying the advice
@@ -278,7 +298,6 @@ public abstract class AbstractPublisherAction implements IPublisherAction {
 			return;
 
 		for (ICapabilityAdvice entry : advice) {
-
 			//process required capabilities
 			IRequirement[] requiredAdvice = entry.getRequiredCapabilities(iu);
 			if (requiredAdvice != null) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java
index 99410f0..6e3385e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AbstractPublisherApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,7 +61,7 @@ public abstract class AbstractPublisherApplication implements IApplication {
 	protected String[] configurations;
 	private IStatus status;
 
-	private ServiceReference agentRef;
+	private ServiceReference<IProvisioningAgent> agentRef;
 
 	protected IProvisioningAgent agent;
 
@@ -229,16 +229,16 @@ public abstract class AbstractPublisherApplication implements IApplication {
 	}
 
 	private void setupAgent() throws ProvisionException {
-		agentRef = Activator.getContext().getServiceReference(IProvisioningAgent.SERVICE_NAME);
+		agentRef = Activator.getContext().getServiceReference(IProvisioningAgent.class);
 		if (agentRef != null) {
-			agent = (IProvisioningAgent) Activator.getContext().getService(agentRef);
+			agent = Activator.getContext().getService(agentRef);
 			if (agent != null)
 				return;
 		}
-		ServiceReference providerRef = Activator.getContext().getServiceReference(IProvisioningAgentProvider.SERVICE_NAME);
+		ServiceReference<IProvisioningAgentProvider> providerRef = Activator.getContext().getServiceReference(IProvisioningAgentProvider.class);
 		if (providerRef == null)
 			throw new RuntimeException("No provisioning agent provider is available"); //$NON-NLS-1$
-		IProvisioningAgentProvider provider = (IProvisioningAgentProvider) Activator.getContext().getService(providerRef);
+		IProvisioningAgentProvider provider = Activator.getContext().getService(providerRef);
 		if (provider == null)
 			throw new RuntimeException("No provisioning agent provider is available"); //$NON-NLS-1$
 		//obtain agent for currently running system
@@ -251,9 +251,11 @@ public abstract class AbstractPublisherApplication implements IApplication {
 			info = createPublisherInfo();
 			processCommandLineArguments(args, info);
 			Object result = run(info);
-			if (result != IApplication.EXIT_OK)
+			if (result != IApplication.EXIT_OK) {
+				System.out.println(NLS.bind(Messages.message_publisherArguments, null));
 				for (int i = 0; i < args.length; i++)
 					System.out.println(args[i]);
+			}
 			return result;
 		} catch (Exception e) {
 			if (e.getMessage() != null)
@@ -285,7 +287,15 @@ public abstract class AbstractPublisherApplication implements IApplication {
 				System.out.println(NLS.bind(Messages.message_generationCompleted, String.valueOf((after - before) / 1000)));
 				return IApplication.EXIT_OK;
 			}
+			// TODO: improve the string representation of the result
 			System.out.println(result);
+			Throwable th = result.getException();
+			if (th != null) {
+				System.out.println();
+				System.out.println(NLS.bind(Messages.message_resultException, null));
+				th.printStackTrace(System.out);
+				System.out.println();
+			}
 		} catch (ProvisionException e) {
 			status = e.getStatus();
 			if (status.getSeverity() == IStatus.ERROR && status.getMessage() != null) {
@@ -328,6 +338,10 @@ public abstract class AbstractPublisherApplication implements IApplication {
 		reusePackedFiles = value;
 	}
 
+	public void setCompress(boolean value) {
+		compress = value;
+	}
+
 	public void setContextRepositories(URI[] metadata, URI[] artifacts) {
 		this.contextMetadataRepositories = metadata;
 		this.contextArtifactRepositories = artifacts;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AdviceFileAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AdviceFileAdvice.java
new file mode 100644
index 0000000..3e872c2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AdviceFileAdvice.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *      IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.publisher;
+
+import java.io.*;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.publisher.Activator;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.publisher.actions.*;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+
+/**
+ * Publishing advice from a p2 advice file. An advice file (p2.inf) can be embedded
+ * in the source of a bundle, feature, or product to specify additional advice to be
+ * added to the {@link IInstallableUnit} corresponding to the bundle, feature, or product.
+ */
+public class AdviceFileAdvice extends AbstractAdvice implements ITouchpointAdvice, ICapabilityAdvice, IUpdateDescriptorAdvice, IPropertyAdvice, IAdditionalInstallableUnitAdvice {
+
+	/**
+	 * The location of the bundle advice file, relative to the bundle root location.
+	 */
+	public static final IPath BUNDLE_ADVICE_FILE = new Path("META-INF/p2.inf"); //$NON-NLS-1$
+
+	private final String id;
+	private final Version version;
+
+	private Map<String, ITouchpointInstruction> touchpointInstructions;
+	private IProvidedCapability[] providedCapabilities;
+	private IRequirement[] requiredCapabilities;
+	private IRequirement[] metaRequiredCapabilities;
+	private Map<String, String> iuProperties;
+	private InstallableUnitDescription[] additionalIUs;
+	private IUpdateDescriptor updateDescriptor;
+	private boolean containsAdvice = false;
+
+	/**
+	 * Creates advice for an advice file at the given location. If <tt>basePath</tt>
+	 * is a directory, then <tt>adviceFilePath</tt> is appended to this location to
+	 * obtain the location of the advice file. If <tt>basePath</tt> is a file, then
+	 * <tt>adviceFilePath</tt> is used to 
+	 * @param id The symbolic id of the installable unit this advice applies to
+	 * @param version The version of the installable unit this advice applies to
+	 * @param basePath The root location of the the advice file. This is either the location of
+	 * the jar containing the advice, or a directory containing the advice file
+	 * @param adviceFilePath The location of the advice file within the base path. This is
+	 * either the path of a jar entry, or the path of the advice file within the directory
+	 * specified by the base path.
+	 */
+	public AdviceFileAdvice(String id, Version version, IPath basePath, IPath adviceFilePath) {
+		Assert.isNotNull(id);
+		Assert.isNotNull(version);
+		Assert.isNotNull(basePath);
+		Assert.isNotNull(adviceFilePath);
+		this.id = id;
+		this.version = version;
+
+		Map<String, String> advice = loadAdviceMap(basePath, adviceFilePath);
+		if (advice.isEmpty())
+			return;
+
+		AdviceFileParser parser = new AdviceFileParser(id, version, advice);
+		try {
+			parser.parse();
+		} catch (Exception e) {
+			String message = "An error occured while parsing advice file: basePath=" + basePath + ", adviceFilePath=" + adviceFilePath + "."; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			IStatus status = new Status(IStatus.ERROR, Activator.ID, message, e);
+			LogHelper.log(status);
+			return;
+		}
+		touchpointInstructions = parser.getTouchpointInstructions();
+		providedCapabilities = parser.getProvidedCapabilities();
+		requiredCapabilities = parser.getRequiredCapabilities();
+		metaRequiredCapabilities = parser.getMetaRequiredCapabilities();
+		iuProperties = parser.getProperties();
+		additionalIUs = parser.getAdditionalInstallableUnitDescriptions();
+		updateDescriptor = parser.getUpdateDescriptor();
+		containsAdvice = true;
+	}
+
+	public boolean containsAdvice() {
+		return containsAdvice;
+	}
+
+	/**
+	 * Loads the advice file and returns it in map form.
+	 */
+	private static Map<String, String> loadAdviceMap(IPath basePath, IPath adviceFilePath) {
+		File location = basePath.toFile();
+		if (location == null || !location.exists())
+			return CollectionUtils.emptyMap();
+
+		ZipFile jar = null;
+		InputStream stream = null;
+		try {
+			if (location.isDirectory()) {
+				File adviceFile = new File(location, adviceFilePath.toString());
+				if (!adviceFile.isFile())
+					return CollectionUtils.emptyMap();
+				stream = new BufferedInputStream(new FileInputStream(adviceFile));
+			} else if (location.isFile()) {
+				jar = new ZipFile(location);
+				ZipEntry entry = jar.getEntry(adviceFilePath.toString());
+				if (entry == null)
+					return CollectionUtils.emptyMap();
+
+				stream = new BufferedInputStream(jar.getInputStream(entry));
+			}
+			return CollectionUtils.loadProperties(stream);
+		} catch (IOException e) {
+			String message = "An error occured while reading advice file: basePath=" + basePath + ", adviceFilePath=" + adviceFilePath + "."; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+			IStatus status = new Status(IStatus.ERROR, Activator.ID, message, e);
+			LogHelper.log(status);
+			return CollectionUtils.emptyMap();
+		} finally {
+			if (stream != null)
+				try {
+					stream.close();
+				} catch (IOException e) {
+					// ignore secondary failure
+				}
+			if (jar != null)
+				try {
+					jar.close();
+				} catch (IOException e) {
+					// ignore secondary failure
+				}
+		}
+	}
+
+	@Override
+	public boolean isApplicable(String configSpec, boolean includeDefault, String candidateId, Version candidateVersion) {
+		return id.equals(candidateId) && version.equals(candidateVersion);
+	}
+
+	/*(non-Javadoc)
+	 * @see org.eclipse.equinox.p2.publisher.eclipse.ITouchpointAdvice#getTouchpointData()
+	 */
+	public ITouchpointData getTouchpointData(ITouchpointData existing) {
+		return MetadataFactory.mergeTouchpointData(existing, touchpointInstructions);
+	}
+
+	public IProvidedCapability[] getProvidedCapabilities(InstallableUnitDescription iu) {
+		return providedCapabilities;
+	}
+
+	public IRequirement[] getRequiredCapabilities(InstallableUnitDescription iu) {
+		return requiredCapabilities;
+	}
+
+	public IRequirement[] getMetaRequiredCapabilities(InstallableUnitDescription iu) {
+		return metaRequiredCapabilities;
+	}
+
+	public InstallableUnitDescription[] getAdditionalInstallableUnitDescriptions(IInstallableUnit iu) {
+		return additionalIUs;
+	}
+
+	public IUpdateDescriptor getUpdateDescriptor(InstallableUnitDescription iu) {
+		return updateDescriptor;
+	}
+
+	public Map<String, String> getArtifactProperties(IInstallableUnit iu, IArtifactDescriptor descriptor) {
+		return null;
+	}
+
+	public Map<String, String> getInstallableUnitProperties(InstallableUnitDescription iu) {
+		return iuProperties;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AdviceFileParser.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AdviceFileParser.java
new file mode 100644
index 0000000..7453ee6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/AdviceFileParser.java
@@ -0,0 +1,592 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.p2.publisher;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import java.util.Map.Entry;
+import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+
+public class AdviceFileParser {
+
+	private static final String ADVICE_VERSION = "advice.version"; //$NON-NLS-1$
+
+	private static final String QUALIFIER_SUBSTITUTION = "$qualifier$"; //$NON-NLS-1$
+	private static final String VERSION_SUBSTITUTION = "$version$"; //$NON-NLS-1$
+
+	private static final String UPDATE_DESCRIPTION = "update.description"; //$NON-NLS-1$
+	private static final String UPDATE_SEVERITY = "update.severity"; //$NON-NLS-1$
+	private static final String UPDATE_RANGE = "update.range"; //$NON-NLS-1$
+	private static final String UPDATE_ID = "update.id"; //$NON-NLS-1$
+	private static final String CLASSIFIER = "classifier"; //$NON-NLS-1$
+	private static final String TOUCHPOINT_VERSION = "touchpoint.version"; //$NON-NLS-1$
+	private static final String TOUCHPOINT_ID = "touchpoint.id"; //$NON-NLS-1$
+	private static final String COPYRIGHT_LOCATION = "copyright.location"; //$NON-NLS-1$
+	private static final String COPYRIGHT = "copyright"; //$NON-NLS-1$
+	private static final String ID = "id"; //$NON-NLS-1$
+	private static final String SINGLETON = "singleton"; //$NON-NLS-1$
+	private static final String IMPORT = "import"; //$NON-NLS-1$
+	private static final String RANGE = "range"; //$NON-NLS-1$
+	private static final String FILTER = "filter"; //$NON-NLS-1$
+	private static final String MULTIPLE = "multiple"; //$NON-NLS-1$
+	private static final String OPTIONAL = "optional"; //$NON-NLS-1$
+	private static final String GREEDY = "greedy"; //$NON-NLS-1$
+	private static final String VERSION = "version"; //$NON-NLS-1$
+	private static final String NAMESPACE = "namespace"; //$NON-NLS-1$
+	private static final String NAME = "name"; //$NON-NLS-1$
+	private static final String LOCATION = "location"; //$NON-NLS-1$
+	private static final String VALUE = "value"; //$NON-NLS-1$
+
+	private static final String UNITS_PREFIX = "units."; //$NON-NLS-1$
+	private static final String INSTRUCTIONS_PREFIX = "instructions."; //$NON-NLS-1$
+	private static final String REQUIRES_PREFIX = "requires."; //$NON-NLS-1$
+	private static final String META_REQUIREMENTS_PREFIX = "metaRequirements."; //$NON-NLS-1$
+	private static final String PROVIDES_PREFIX = "provides."; //$NON-NLS-1$
+	private static final String PROPERTIES_PREFIX = "properties."; //$NON-NLS-1$
+	private static final String LICENSES_PREFIX = "licenses."; //$NON-NLS-1$
+	private static final String ARTIFACTS_PREFIX = "artifacts."; //$NON-NLS-1$
+	private static final String HOST_REQUIREMENTS_PREFIX = "hostRequirements."; //$NON-NLS-1$
+	private static final String UPDATE_DESCRIPTOR_PREFIX = "update."; //$NON-NLS-1$
+
+	public static final Version COMPATIBLE_VERSION = Version.createOSGi(1, 0, 0);
+	public static final VersionRange VERSION_TOLERANCE = new VersionRange(COMPATIBLE_VERSION, true, Version.createOSGi(2, 0, 0), false);
+
+	private Map<String, String> adviceProperties = new HashMap<String, String>();
+	private List<IProvidedCapability> adviceProvides = new ArrayList<IProvidedCapability>();
+	private List<IRequirement> adviceRequires = new ArrayList<IRequirement>();
+	private List<IRequirement> adviceMetaRequires = new ArrayList<IRequirement>();
+	private IUpdateDescriptor adviceUpdateDescriptor = null;
+	private Map<String, ITouchpointInstruction> adviceInstructions = new HashMap<String, ITouchpointInstruction>();
+	private List<InstallableUnitDescription> adviceOtherIUs = new ArrayList<InstallableUnitDescription>();
+
+	private final Map<String, String> advice;
+	private Iterator<String> keysIterator;
+	private String current;
+	private String hostId;
+	private Version hostVersion;
+
+	public AdviceFileParser(String id, Version version, Map<String, String> advice) {
+		this.hostId = id;
+		this.hostVersion = version;
+		this.advice = advice;
+	}
+
+	public void parse() {
+		String adviceVersion = advice.get(ADVICE_VERSION);
+		if (adviceVersion != null)
+			checkAdviceVersion(adviceVersion);
+
+		List<String> keys = new ArrayList<String>(advice.keySet());
+		Collections.sort(keys);
+
+		keysIterator = keys.iterator();
+		next();
+
+		while (current != null) {
+			if (current.startsWith(PROPERTIES_PREFIX))
+				parseProperties(PROPERTIES_PREFIX, adviceProperties);
+			else if (current.startsWith(UPDATE_DESCRIPTOR_PREFIX))
+				this.adviceUpdateDescriptor = parseUpdateDescriptor(UPDATE_DESCRIPTOR_PREFIX, hostId);
+			else if (current.startsWith(PROVIDES_PREFIX))
+				parseProvides(PROVIDES_PREFIX, adviceProvides);
+			else if (current.startsWith(REQUIRES_PREFIX))
+				parseRequires(REQUIRES_PREFIX, adviceRequires);
+			else if (current.startsWith(META_REQUIREMENTS_PREFIX))
+				parseRequires(META_REQUIREMENTS_PREFIX, adviceMetaRequires);
+			else if (current.startsWith(INSTRUCTIONS_PREFIX))
+				parseInstructions(INSTRUCTIONS_PREFIX, adviceInstructions);
+			else if (current.startsWith(UNITS_PREFIX))
+				parseUnits(UNITS_PREFIX, adviceOtherIUs);
+			else if (current.equals(ADVICE_VERSION)) {
+				next();
+			} else {
+				// we ignore elements we do not understand
+				next();
+			}
+		}
+	}
+
+	private void checkAdviceVersion(String adviceVersion) {
+		Version version = Version.parseVersion(adviceVersion);
+		if (!VERSION_TOLERANCE.isIncluded(version))
+			throw new IllegalStateException("bad version: " + version + ". Expected range was " + VERSION_TOLERANCE); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	private void next() {
+		current = keysIterator.hasNext() ? keysIterator.next() : null;
+	}
+
+	private String currentValue() {
+		return advice.get(current).trim();
+	}
+
+	private void parseProperties(String prefix, Map<String, String> properties) {
+		while (current != null && current.startsWith(prefix)) {
+			int dotIndex = current.indexOf('.', prefix.length());
+			if (dotIndex == -1)
+				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
+
+			parseProperty(current.substring(0, dotIndex + 1), properties);
+		}
+	}
+
+	private void parseProperty(String prefix, Map<String, String> properties) {
+		String propertyName = null;
+		String propertyValue = null;
+		while (current != null && current.startsWith(prefix)) {
+			String token = current.substring(prefix.length());
+			if (token.equals(NAME)) {
+				propertyName = currentValue();
+			} else if (token.equals(VALUE)) {
+				propertyValue = currentValue();
+			} else {
+				// we ignore elements we do not understand
+			}
+			next();
+		}
+
+		properties.put(propertyName, propertyValue);
+	}
+
+	private IUpdateDescriptor parseUpdateDescriptor(String prefix, String id) {
+		String name = id;
+		String description = null;
+		String range = "[0.0.0,$version$)"; //$NON-NLS-1$ 
+		String severity = "0"; //$NON-NLS-1$
+
+		while (current != null && current.startsWith(prefix)) {
+			String token = current;
+			if (token.equals(UPDATE_ID)) {
+				name = currentValue();
+			} else if (token.equals(UPDATE_DESCRIPTION)) {
+				description = currentValue();
+			} else if (token.equals(UPDATE_RANGE)) {
+				range = currentValue();
+			} else if (token.equals(UPDATE_SEVERITY)) {
+				severity = currentValue();
+			} else {
+				// ignore
+			}
+			next();
+		}
+
+		range = substituteVersionAndQualifier(range);
+		VersionRange versionRange = new VersionRange(range);
+		return MetadataFactory.createUpdateDescriptor(name, versionRange, Integer.valueOf(severity), description);
+	}
+
+	private void parseProvides(String prefix, List<IProvidedCapability> provides) {
+		while (current != null && current.startsWith(prefix)) {
+			int dotIndex = current.indexOf('.', prefix.length());
+			if (dotIndex == -1)
+				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
+
+			parseProvided(current.substring(0, dotIndex + 1), provides);
+		}
+	}
+
+	private void parseProvided(String prefix, List<IProvidedCapability> provides) {
+		String namespace = null;
+		String name = null;
+		Version capabilityVersion = null;
+		while (current != null && current.startsWith(prefix)) {
+			String token = current.substring(prefix.length());
+			if (token.equals(NAME)) {
+				name = currentValue();
+			} else if (token.equals(NAMESPACE)) {
+				namespace = currentValue();
+			} else if (token.equals(VERSION)) {
+				capabilityVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
+			} else {
+				// we ignore elements we do not understand
+			}
+			next();
+		}
+
+		IProvidedCapability capability = MetadataFactory.createProvidedCapability(namespace, name, capabilityVersion);
+		provides.add(capability);
+	}
+
+	private void parseRequires(String prefix, List<IRequirement> requires) {
+		while (current != null && current.startsWith(prefix)) {
+			int dotIndex = current.indexOf('.', prefix.length());
+			if (dotIndex == -1)
+				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
+
+			parseRequired(current.substring(0, dotIndex + 1), requires);
+		}
+	}
+
+	private void parseRequired(String prefix, List<IRequirement> requires) {
+
+		String namespace = null;
+		String name = null;
+		VersionRange range = null;
+		String filter = null;
+		boolean optional = false;
+		boolean multiple = false;
+		boolean greedy = true;
+
+		while (current != null && current.startsWith(prefix)) {
+			String token = current.substring(prefix.length());
+			if (token.equals(GREEDY)) {
+				greedy = Boolean.valueOf(currentValue()).booleanValue();
+			} else if (token.equals(OPTIONAL)) {
+				optional = Boolean.valueOf(currentValue()).booleanValue();
+			} else if (token.equals(MULTIPLE)) {
+				multiple = Boolean.valueOf(currentValue()).booleanValue();
+			} else if (token.equals(FILTER)) {
+				filter = currentValue();
+			} else if (token.equals(NAME)) {
+				name = currentValue();
+			} else if (token.equals(NAMESPACE)) {
+				namespace = currentValue();
+			} else if (token.equals(RANGE)) {
+				range = new VersionRange(substituteVersionAndQualifier(currentValue()));
+			} else {
+				// we ignore elements we do not understand
+			}
+			next();
+		}
+		IRequirement capability = MetadataFactory.createRequirement(namespace, name, range, filter, optional, multiple, greedy);
+		requires.add(capability);
+	}
+
+	private void parseInstructions(String prefix, Map<String, ITouchpointInstruction> instructions) {
+		while (current != null && current.startsWith(prefix)) {
+			int dotIndex = current.indexOf('.', prefix.length());
+			if (dotIndex != -1)
+				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
+
+			parseInstruction(current, instructions);
+		}
+	}
+
+	private void parseInstruction(String prefix, Map<String, ITouchpointInstruction> instructions) {
+		String phase = current.substring(current.lastIndexOf('.') + 1);
+		String body = currentValue();
+		next();
+
+		prefix += '.';
+		String importAttribute = null;
+		if (current != null && current.startsWith(prefix)) {
+			if (current.substring(prefix.length()).equals(IMPORT)) {
+				importAttribute = currentValue();
+			} else {
+				// we ignore elements we do not understand
+			}
+			next();
+		}
+		ITouchpointInstruction instruction = MetadataFactory.createTouchpointInstruction(body, importAttribute);
+		instructions.put(phase, instruction);
+	}
+
+	private void parseUnits(String prefix, List<InstallableUnitDescription> ius) {
+		while (current != null && current.startsWith(prefix)) {
+			int dotIndex = current.indexOf('.', prefix.length());
+			if (dotIndex == -1)
+				throw new IllegalStateException("bad token: " + current + " = " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
+
+			parseUnit(current.substring(0, dotIndex + 1), ius);
+		}
+	}
+
+	private void parseUnit(String prefix, List<InstallableUnitDescription> units) {
+		String unitId = null;
+		Version unitVersion = null;
+		boolean unitSingleton = false;
+		String unitFilter = null;
+		String unitCopyright = null;
+		String unitCopyrightLocation = null;
+		String unitTouchpointId = null;
+		Version unitTouchpointVersion = null;
+
+		String unitUpdateId = null;
+		VersionRange unitUpdateRange = null;
+		int unitUpdateSeverity = 0;
+		String unitUpdateDescription = null;
+
+		List<IArtifactKey> unitArtifacts = new ArrayList<IArtifactKey>();
+		Map<String, String> unitProperties = new HashMap<String, String>();
+		List<IRequirement> unitHostRequirements = new ArrayList<IRequirement>();
+		List<IProvidedCapability> unitProvides = new ArrayList<IProvidedCapability>();
+		List<IRequirement> unitRequires = new ArrayList<IRequirement>();
+		List<IRequirement> unitMetaRequirements = new ArrayList<IRequirement>();
+		List<ILicense> unitLicenses = new ArrayList<ILicense>();
+		Map<String, ITouchpointInstruction> unitInstructions = new HashMap<String, ITouchpointInstruction>();
+		//		updatedescriptor ??
+
+		while (current != null && current.startsWith(prefix)) {
+			String token = current.substring(prefix.length());
+			if (token.equals(ID)) {
+				unitId = currentValue();
+				next();
+			} else if (token.equals(VERSION)) {
+				unitVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
+				next();
+			} else if (token.equals(SINGLETON)) {
+				unitSingleton = Boolean.valueOf(currentValue()).booleanValue();
+				next();
+			} else if (token.equals(FILTER)) {
+				unitFilter = currentValue();
+				next();
+			} else if (token.equals(COPYRIGHT)) {
+				unitCopyright = currentValue();
+				next();
+			} else if (token.equals(COPYRIGHT_LOCATION)) {
+				unitCopyrightLocation = currentValue();
+				next();
+			} else if (token.equals(TOUCHPOINT_ID)) {
+				unitTouchpointId = currentValue();
+				next();
+			} else if (token.equals(TOUCHPOINT_VERSION)) {
+				unitTouchpointVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
+				next();
+			} else if (token.equals(UPDATE_ID)) {
+				unitUpdateId = currentValue();
+				next();
+			} else if (token.equals(UPDATE_RANGE)) {
+				unitUpdateRange = new VersionRange(substituteVersionAndQualifier(currentValue()));
+				next();
+			} else if (token.equals(UPDATE_SEVERITY)) {
+				unitUpdateSeverity = Integer.parseInt(currentValue());
+				next();
+			} else if (token.equals(UPDATE_DESCRIPTION)) {
+				unitUpdateDescription = currentValue();
+				next();
+			} else if (token.startsWith(HOST_REQUIREMENTS_PREFIX))
+				parseRequires(prefix + HOST_REQUIREMENTS_PREFIX, unitHostRequirements);
+			else if (token.startsWith(ARTIFACTS_PREFIX))
+				parseArtifacts(prefix + ARTIFACTS_PREFIX, unitArtifacts);
+			else if (token.startsWith(LICENSES_PREFIX))
+				parseLicenses(prefix + LICENSES_PREFIX, unitLicenses);
+			else if (token.startsWith(PROPERTIES_PREFIX))
+				parseProperties(prefix + PROPERTIES_PREFIX, unitProperties);
+			else if (token.startsWith(PROVIDES_PREFIX))
+				parseProvides(prefix + PROVIDES_PREFIX, unitProvides);
+			else if (token.startsWith(REQUIRES_PREFIX))
+				parseRequires(prefix + REQUIRES_PREFIX, unitRequires);
+			else if (token.startsWith(META_REQUIREMENTS_PREFIX))
+				parseRequires(prefix + META_REQUIREMENTS_PREFIX, unitMetaRequirements);
+			else if (token.startsWith(INSTRUCTIONS_PREFIX))
+				parseInstructions(prefix + INSTRUCTIONS_PREFIX, unitInstructions);
+			else {
+				// we ignore elements we do not understand
+				next();
+			}
+		}
+
+		InstallableUnitDescription description = unitHostRequirements.isEmpty() ? new InstallableUnitDescription() : new InstallableUnitFragmentDescription();
+		description.setId(unitId);
+		description.setVersion(unitVersion);
+		description.setSingleton(unitSingleton);
+		description.setFilter(unitFilter);
+		if (unitCopyright != null || unitCopyrightLocation != null) {
+			try {
+				URI uri = unitCopyrightLocation != null ? new URI(unitCopyrightLocation) : null;
+				description.setCopyright(MetadataFactory.createCopyright(uri, unitCopyright));
+			} catch (URISyntaxException e) {
+				throw new IllegalStateException("bad copyright URI at token: " + current + ", " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		}
+		if (unitTouchpointId != null)
+			description.setTouchpointType(MetadataFactory.createTouchpointType(unitTouchpointId, unitTouchpointVersion));
+
+		if (unitUpdateId != null)
+			description.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(unitUpdateId, unitUpdateRange, unitUpdateSeverity, unitUpdateDescription));
+
+		if (!unitLicenses.isEmpty())
+			description.setLicenses(unitLicenses.toArray(new ILicense[unitLicenses.size()]));
+
+		if (!unitArtifacts.isEmpty())
+			description.setArtifacts(unitArtifacts.toArray(new IArtifactKey[unitArtifacts.size()]));
+
+		if (!unitHostRequirements.isEmpty())
+			((InstallableUnitFragmentDescription) description).setHost(unitHostRequirements.toArray(new IRequirement[unitHostRequirements.size()]));
+
+		if (!unitProperties.isEmpty()) {
+			for (Entry<String, String> entry : unitProperties.entrySet()) {
+				description.setProperty(entry.getKey(), entry.getValue());
+			}
+		}
+
+		if (!unitProvides.isEmpty())
+			description.setCapabilities(unitProvides.toArray(new IProvidedCapability[unitProvides.size()]));
+
+		if (!unitRequires.isEmpty())
+			description.setRequirements(unitRequires.toArray(new IRequirement[unitRequires.size()]));
+
+		if (!unitMetaRequirements.isEmpty())
+			description.setMetaRequirements(unitMetaRequirements.toArray(new IRequirement[unitMetaRequirements.size()]));
+
+		if (!unitInstructions.isEmpty())
+			description.addTouchpointData(MetadataFactory.createTouchpointData(unitInstructions));
+
+		adviceOtherIUs.add(description);
+	}
+
+	private void parseLicenses(String prefix, List<ILicense> licenses) {
+		while (current != null && current.startsWith(prefix)) {
+			int dotIndex = current.indexOf('.', prefix.length());
+			if (dotIndex != -1)
+				throw new IllegalStateException("bad token: " + current + " = " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
+
+			parseLicense(current, licenses);
+		}
+	}
+
+	private void parseLicense(String prefix, List<ILicense> licenses) {
+		String body = currentValue();
+		next();
+
+		prefix += '.';
+		String location = null;
+		if (current != null && current.startsWith(prefix)) {
+			if (current.substring(prefix.length()).equals(LOCATION)) {
+				location = currentValue();
+			} else {
+				// we ignore elements we do not understand
+			}
+			next();
+		}
+
+		try {
+			URI uri = location != null ? new URI(location) : null;
+			ILicense license = MetadataFactory.createLicense(uri, body);
+			licenses.add(license);
+		} catch (URISyntaxException e) {
+			throw new IllegalStateException("bad license URI at token: " + current + ", " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	private void parseArtifacts(String prefix, List<IArtifactKey> artifacts) {
+		while (current != null && current.startsWith(prefix)) {
+			int dotIndex = current.indexOf('.', prefix.length());
+			if (dotIndex == -1)
+				throw new IllegalStateException("bad token: " + current + " = " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
+
+			parseArtifact(current.substring(0, dotIndex + 1), artifacts);
+		}
+	}
+
+	private void parseArtifact(String prefix, List<IArtifactKey> artifacts) {
+		String artifactClassifier = null;
+		String artifactId = null;
+		Version artifactVersion = null;
+		while (current != null && current.startsWith(prefix)) {
+			String token = current.substring(prefix.length());
+			if (token.equals(CLASSIFIER)) {
+				artifactClassifier = currentValue();
+			} else if (token.equals(ID)) {
+				artifactId = currentValue();
+			} else if (token.equals(VERSION)) {
+				artifactVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
+			} else {
+				// we ignore elements we do not understand
+			}
+
+			next();
+		}
+		IArtifactKey artifactKey = new ArtifactKey(artifactClassifier, artifactId, artifactVersion);
+		artifacts.add(artifactKey);
+	}
+
+	private String substituteVersionAndQualifier(String version) {
+		if (version.indexOf(VERSION_SUBSTITUTION) != -1) {
+			version = replace(version, VERSION_SUBSTITUTION, hostVersion.toString());
+		}
+
+		if (version.indexOf(QUALIFIER_SUBSTITUTION) != -1) {
+			try {
+				String qualifier = PublisherHelper.toOSGiVersion(hostVersion).getQualifier();
+				if (qualifier == null)
+					qualifier = ""; //$NON-NLS-1$
+				if (qualifier.length() == 0) {
+					// Note: this works only for OSGi versions and version ranges
+					// where the qualifier if present must be at the end of a version string
+					version = replace(version, "." + QUALIFIER_SUBSTITUTION, ""); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				version = replace(version, QUALIFIER_SUBSTITUTION, qualifier);
+			} catch (UnsupportedOperationException e) {
+				// Version cannot be converted to OSGi
+			}
+		}
+		return version;
+	}
+
+	// originally from org.eclipse.core.internal.net.StringUtil
+	public static String replace(String source, String from, String to) {
+		if (from.length() == 0)
+			return source;
+		StringBuffer buffer = new StringBuffer();
+		int current = 0;
+		int pos = 0;
+		while (pos != -1) {
+			pos = source.indexOf(from, current);
+			if (pos == -1) {
+				buffer.append(source.substring(current));
+			} else {
+				buffer.append(source.substring(current, pos));
+				buffer.append(to);
+				current = pos + from.length();
+			}
+		}
+		return buffer.toString();
+	}
+
+	public Map<String, String> getProperties() {
+		if (adviceProperties.isEmpty())
+			return null;
+		return adviceProperties;
+	}
+
+	public IRequirement[] getRequiredCapabilities() {
+		if (adviceRequires.isEmpty())
+			return null;
+
+		return adviceRequires.toArray(new IRequirement[adviceRequires.size()]);
+	}
+
+	public IProvidedCapability[] getProvidedCapabilities() {
+		if (adviceProvides.isEmpty())
+			return null;
+
+		return adviceProvides.toArray(new IProvidedCapability[adviceProvides.size()]);
+	}
+
+	public IUpdateDescriptor getUpdateDescriptor() {
+		return adviceUpdateDescriptor;
+	}
+
+	public Map<String, ITouchpointInstruction> getTouchpointInstructions() {
+		if (adviceInstructions.isEmpty())
+			return null;
+
+		return adviceInstructions;
+	}
+
+	public InstallableUnitDescription[] getAdditionalInstallableUnitDescriptions() {
+		if (adviceOtherIUs.isEmpty())
+			return null;
+
+		return adviceOtherIUs.toArray(new InstallableUnitDescription[adviceOtherIUs.size()]);
+	}
+
+	public IRequirement[] getMetaRequiredCapabilities() {
+		if (adviceMetaRequires.isEmpty())
+			return null;
+
+		return adviceMetaRequires.toArray(new IRequirement[adviceMetaRequires.size()]);
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherAdvice.java
index a0777d4..2ccbef6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java
index bba320f..b8e8e8d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherResult.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherResult.java
index 44a56d4..6563c7c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherResult.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/IPublisherResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/PublisherInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/PublisherInfo.java
index a72a78a..9276875 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/PublisherInfo.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/PublisherInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IAdditionalInstallableUnitAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IAdditionalInstallableUnitAdvice.java
index 583cd33..ba0865b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IAdditionalInstallableUnitAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IAdditionalInstallableUnitAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ICapabilityAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ICapabilityAdvice.java
index 11366d3..897d6eb 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ICapabilityAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ICapabilityAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 EclipseSource and others.
+ *  Copyright (c) 2008, 2010 EclipseSource and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IFilterAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IFilterAdvice.java
index b26edb4..e6f55c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IFilterAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IFilterAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+ * Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ILicenseAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ILicenseAdvice.java
index a6deae3..ac40b76 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ILicenseAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ILicenseAdvice.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IPropertyAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IPropertyAdvice.java
index 5874881..e0c6952 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IPropertyAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IPropertyAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IRootIUAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IRootIUAdvice.java
index 9cd432b..d1fd698 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IRootIUAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IRootIUAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ITouchpointAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ITouchpointAdvice.java
index 1551b72..0c4ece2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ITouchpointAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/ITouchpointAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IUpdateDescriptorAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IUpdateDescriptorAdvice.java
new file mode 100644
index 0000000..92a5d12
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IUpdateDescriptorAdvice.java
@@ -0,0 +1,23 @@
+/******************************************************************************* 
+* Copyright (c) 2010 EclipseSource and others. All rights reserved. This
+* program and the accompanying materials are made available under the terms of
+* the Eclipse Public License v1.0 which accompanies this distribution, and is
+* available at http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*   EclipseSource - initial API and implementation
+******************************************************************************/
+package org.eclipse.equinox.p2.publisher.actions;
+
+import org.eclipse.equinox.p2.metadata.IUpdateDescriptor;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
+
+/**
+ * Advice to set the update descriptor on an IU
+ * @author Ian Bull
+ */
+public interface IUpdateDescriptorAdvice extends IPublisherAdvice {
+
+	public IUpdateDescriptor getUpdateDescriptor(InstallableUnitDescription iu);
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IVersionAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IVersionAdvice.java
index b2e0d1d..91f6a94 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IVersionAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/IVersionAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java
index feb7f3f..4869699 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -104,7 +104,7 @@ public class JREAction extends AbstractPublisherAction {
 		results.addIU(MetadataFactory.createInstallableUnit(cu), IPublisherResult.ROOT);
 
 		//Create the artifact descriptor
-		return PublisherHelper.createArtifactDescriptor(info.getArtifactRepository(), key, jreLocation);
+		return PublisherHelper.createArtifactDescriptor(info, key, jreLocation);
 	}
 
 	private IProvidedCapability[] generateJRECapability(String id, Version version) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/MergeResultsAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/MergeResultsAction.java
index e43e0d0..ab1ca6f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/MergeResultsAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/MergeResultsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/QueryableFilterAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/QueryableFilterAdvice.java
index b06a1ac..7d63730 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/QueryableFilterAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/QueryableFilterAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+ * Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootFilesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootFilesAction.java
index 9a585ff..6bfdcf1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootFilesAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootFilesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -122,7 +122,7 @@ public class RootFilesAction extends AbstractPublisherAction {
 
 		if ((info.getArtifactOptions() & (IPublisherInfo.A_INDEX | IPublisherInfo.A_PUBLISH)) > 0) {
 			// Create the artifact descriptor.  we have several files so no path on disk
-			IArtifactDescriptor descriptor = PublisherHelper.createArtifactDescriptor(info.getArtifactRepository(), key, null);
+			IArtifactDescriptor descriptor = PublisherHelper.createArtifactDescriptor(info, key, null);
 			IRootFilesAdvice advice = getAdvice(configSpec);
 			publishArtifact(descriptor, advice.getIncludedFiles(), advice.getExcludedFiles(), info, createPrefixComputer(advice.getRoot()));
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAction.java
index 00dd7b5..4c87ddc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -10,9 +10,6 @@
  ******************************************************************************/
 package org.eclipse.equinox.p2.publisher.actions;
 
-import org.eclipse.equinox.p2.metadata.MetadataFactory;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Collection;
@@ -21,6 +18,7 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.publisher.Activator;
 import org.eclipse.equinox.internal.p2.publisher.Messages;
 import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
 import org.eclipse.equinox.p2.publisher.*;
 import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
 import org.eclipse.osgi.util.NLS;
@@ -50,6 +48,7 @@ public class RootIUAction extends AbstractPublisherAction {
 	protected IStatus generateRootIU(IPublisherResult result) {
 		Collection<? extends IVersionedId> children = getChildren(result);
 		InstallableUnitDescription descriptor = createTopLevelIUDescription(children, null, false);
+		processUpdateDescriptorAdvice(descriptor, info);
 		processCapabilityAdvice(descriptor, info);
 		processTouchpointAdvice(descriptor, null, info);
 		processInstallableUnitPropertiesAdvice(descriptor, info);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAdvice.java
index 5dbfb52..d3479bf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUResultFilterAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUResultFilterAdvice.java
index bb858bc..8b25e11 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUResultFilterAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/RootIUResultFilterAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/VersionAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/VersionAdvice.java
index 491c40f..2a63f5a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/VersionAdvice.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/VersionAdvice.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AccumulateConfigDataAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AccumulateConfigDataAction.java
deleted file mode 100644
index a135377..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AccumulateConfigDataAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.DataLoader;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.LauncherData;
-import org.eclipse.equinox.p2.publisher.*;
-
-public class AccumulateConfigDataAction extends AbstractPublisherAction {
-
-	private String configSpec;
-	private DataLoader loader;
-
-	public AccumulateConfigDataAction(IPublisherInfo info, String configSpec, File configurationLocation, File executableLocation) {
-		this.configSpec = configSpec;
-		loader = new DataLoader(configurationLocation, executableLocation);
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		storeConfigData(publisherInfo, configSpec, results);
-		return Status.OK_STATUS;
-	}
-
-	protected void storeConfigData(IPublisherInfo publisherInfo, String config, IPublisherResult result) {
-		ConfigData data = loader.getConfigData();
-		if (data == null)
-			return;
-		publisherInfo.addAdvice(new ConfigAdvice(data, config));
-		LauncherData launcherData = loader.getLauncherData();
-		if (launcherData == null)
-			return;
-		publisherInfo.addAdvice(new LaunchingAdvice(launcherData, config));
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AdviceFileAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AdviceFileAdvice.java
deleted file mode 100644
index b1ab0c1..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AdviceFileAdvice.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.equinox.p2.metadata.MetadataFactory;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-
-import java.io.*;
-import java.util.Map;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.publisher.AbstractAdvice;
-import org.eclipse.equinox.p2.publisher.actions.*;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
-
-/**
- * Publishing advice from a p2 advice file. An advice file (p2.inf) can be embedded
- * in the source of a bundle, feature, or product to specify additional advice to be
- * added to the {@link IInstallableUnit} corresponding to the bundle, feature, or product.
- */
-public class AdviceFileAdvice extends AbstractAdvice implements ITouchpointAdvice, ICapabilityAdvice, IPropertyAdvice, IAdditionalInstallableUnitAdvice {
-
-	/**
-	 * The location of the bundle advice file, relative to the bundle root location.
-	 */
-	public static final IPath BUNDLE_ADVICE_FILE = new Path("META-INF/p2.inf"); //$NON-NLS-1$
-
-	private final String id;
-	private final Version version;
-
-	private Map<String, ITouchpointInstruction> touchpointInstructions;
-	private IProvidedCapability[] providedCapabilities;
-	private IRequirement[] requiredCapabilities;
-	private IRequirement[] metaRequiredCapabilities;
-	private Map<String, String> iuProperties;
-	private InstallableUnitDescription[] additionalIUs;
-	private boolean containsAdvice = false;
-
-	/**
-	 * Creates advice for an advice file at the given location. If <tt>basePath</tt>
-	 * is a directory, then <tt>adviceFilePath</tt> is appended to this location to
-	 * obtain the location of the advice file. If <tt>basePath</tt> is a file, then
-	 * <tt>adviceFilePath</tt> is used to 
-	 * @param id The symbolic id of the installable unit this advice applies to
-	 * @param version The version of the installable unit this advice applies to
-	 * @param basePath The root location of the the advice file. This is either the location of
-	 * the jar containing the advice, or a directory containing the advice file
-	 * @param adviceFilePath The location of the advice file within the base path. This is
-	 * either the path of a jar entry, or the path of the advice file within the directory
-	 * specified by the base path.
-	 */
-	public AdviceFileAdvice(String id, Version version, IPath basePath, IPath adviceFilePath) {
-		Assert.isNotNull(id);
-		Assert.isNotNull(version);
-		Assert.isNotNull(basePath);
-		Assert.isNotNull(adviceFilePath);
-		this.id = id;
-		this.version = version;
-
-		Map<String, String> advice = loadAdviceMap(basePath, adviceFilePath);
-		if (advice.isEmpty())
-			return;
-
-		AdviceFileParser parser = new AdviceFileParser(id, version, advice);
-		try {
-			parser.parse();
-		} catch (Exception e) {
-			String message = "An error occured while parsing advice file: basePath=" + basePath + ", adviceFilePath=" + adviceFilePath + "."; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			IStatus status = new Status(IStatus.ERROR, Activator.ID, message, e);
-			LogHelper.log(status);
-			return;
-		}
-		touchpointInstructions = parser.getTouchpointInstructions();
-		providedCapabilities = parser.getProvidedCapabilities();
-		requiredCapabilities = parser.getRequiredCapabilities();
-		metaRequiredCapabilities = parser.getMetaRequiredCapabilities();
-		iuProperties = parser.getProperties();
-		additionalIUs = parser.getAdditionalInstallableUnitDescriptions();
-		containsAdvice = true;
-	}
-
-	public boolean containsAdvice() {
-		return containsAdvice;
-	}
-
-	/**
-	 * Loads the advice file and returns it in map form.
-	 */
-	private static Map<String, String> loadAdviceMap(IPath basePath, IPath adviceFilePath) {
-		File location = basePath.toFile();
-		if (location == null || !location.exists())
-			return CollectionUtils.emptyMap();
-
-		ZipFile jar = null;
-		InputStream stream = null;
-		try {
-			if (location.isDirectory()) {
-				File adviceFile = new File(location, adviceFilePath.toString());
-				if (!adviceFile.isFile())
-					return CollectionUtils.emptyMap();
-				stream = new BufferedInputStream(new FileInputStream(adviceFile));
-			} else if (location.isFile()) {
-				jar = new ZipFile(location);
-				ZipEntry entry = jar.getEntry(adviceFilePath.toString());
-				if (entry == null)
-					return CollectionUtils.emptyMap();
-
-				stream = new BufferedInputStream(jar.getInputStream(entry));
-			}
-			return CollectionUtils.loadProperties(stream);
-		} catch (IOException e) {
-			String message = "An error occured while reading advice file: basePath=" + basePath + ", adviceFilePath=" + adviceFilePath + "."; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
-			IStatus status = new Status(IStatus.ERROR, Activator.ID, message, e);
-			LogHelper.log(status);
-			return CollectionUtils.emptyMap();
-		} finally {
-			if (stream != null)
-				try {
-					stream.close();
-				} catch (IOException e) {
-					// ignore secondary failure
-				}
-			if (jar != null)
-				try {
-					jar.close();
-				} catch (IOException e) {
-					// ignore secondary failure
-				}
-		}
-	}
-
-	public boolean isApplicable(String configSpec, boolean includeDefault, String candidateId, Version candidateVersion) {
-		return id.equals(candidateId) && version.equals(candidateVersion);
-	}
-
-	/*(non-Javadoc)
-	 * @see org.eclipse.equinox.p2.publisher.eclipse.ITouchpointAdvice#getTouchpointData()
-	 */
-	public ITouchpointData getTouchpointData(ITouchpointData existing) {
-		return MetadataFactory.mergeTouchpointData(existing, touchpointInstructions);
-	}
-
-	public IProvidedCapability[] getProvidedCapabilities(InstallableUnitDescription iu) {
-		return providedCapabilities;
-	}
-
-	public IRequirement[] getRequiredCapabilities(InstallableUnitDescription iu) {
-		return requiredCapabilities;
-	}
-
-	public IRequirement[] getMetaRequiredCapabilities(InstallableUnitDescription iu) {
-		return metaRequiredCapabilities;
-	}
-
-	public InstallableUnitDescription[] getAdditionalInstallableUnitDescriptions(IInstallableUnit iu) {
-		return additionalIUs;
-	}
-
-	public Map<String, String> getArtifactProperties(IInstallableUnit iu, IArtifactDescriptor descriptor) {
-		return null;
-	}
-
-	public Map<String, String> getInstallableUnitProperties(InstallableUnitDescription iu) {
-		return iuProperties;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AdviceFileParser.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AdviceFileParser.java
deleted file mode 100644
index 703c7c5..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/AdviceFileParser.java
+++ /dev/null
@@ -1,557 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: IBM Corporation - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-import java.util.Map.Entry;
-import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-
-public class AdviceFileParser {
-
-	private static final String ADVICE_VERSION = "advice.version"; //$NON-NLS-1$
-
-	private static final String QUALIFIER_SUBSTITUTION = "$qualifier$"; //$NON-NLS-1$
-	private static final String VERSION_SUBSTITUTION = "$version$"; //$NON-NLS-1$
-
-	private static final String UPDATE_DESCRIPTION = "update.description"; //$NON-NLS-1$
-	private static final String UPDATE_SEVERITY = "update.severity"; //$NON-NLS-1$
-	private static final String UPDATE_RANGE = "update.range"; //$NON-NLS-1$
-	private static final String UPDATE_ID = "update.id"; //$NON-NLS-1$
-	private static final String CLASSIFIER = "classifier"; //$NON-NLS-1$
-	private static final String TOUCHPOINT_VERSION = "touchpoint.version"; //$NON-NLS-1$
-	private static final String TOUCHPOINT_ID = "touchpoint.id"; //$NON-NLS-1$
-	private static final String COPYRIGHT_LOCATION = "copyright.location"; //$NON-NLS-1$
-	private static final String COPYRIGHT = "copyright"; //$NON-NLS-1$
-	private static final String ID = "id"; //$NON-NLS-1$
-	private static final String SINGLETON = "singleton"; //$NON-NLS-1$
-	private static final String IMPORT = "import"; //$NON-NLS-1$
-	private static final String RANGE = "range"; //$NON-NLS-1$
-	private static final String FILTER = "filter"; //$NON-NLS-1$
-	private static final String MULTIPLE = "multiple"; //$NON-NLS-1$
-	private static final String OPTIONAL = "optional"; //$NON-NLS-1$
-	private static final String GREEDY = "greedy"; //$NON-NLS-1$
-	private static final String VERSION = "version"; //$NON-NLS-1$
-	private static final String NAMESPACE = "namespace"; //$NON-NLS-1$
-	private static final String NAME = "name"; //$NON-NLS-1$
-	private static final String LOCATION = "location"; //$NON-NLS-1$
-	private static final String VALUE = "value"; //$NON-NLS-1$
-
-	private static final String UNITS_PREFIX = "units."; //$NON-NLS-1$
-	private static final String INSTRUCTIONS_PREFIX = "instructions."; //$NON-NLS-1$
-	private static final String REQUIRES_PREFIX = "requires."; //$NON-NLS-1$
-	private static final String META_REQUIREMENTS_PREFIX = "metaRequirements."; //$NON-NLS-1$
-	private static final String PROVIDES_PREFIX = "provides."; //$NON-NLS-1$
-	private static final String PROPERTIES_PREFIX = "properties."; //$NON-NLS-1$
-	private static final String LICENSES_PREFIX = "licenses."; //$NON-NLS-1$
-	private static final String ARTIFACTS_PREFIX = "artifacts."; //$NON-NLS-1$
-	private static final String HOST_REQUIREMENTS_PREFIX = "hostRequirements."; //$NON-NLS-1$
-
-	public static final Version COMPATIBLE_VERSION = Version.createOSGi(1, 0, 0);
-	public static final VersionRange VERSION_TOLERANCE = new VersionRange(COMPATIBLE_VERSION, true, Version.createOSGi(2, 0, 0), false);
-
-	private Map<String, String> adviceProperties = new HashMap<String, String>();
-	private List<IProvidedCapability> adviceProvides = new ArrayList<IProvidedCapability>();
-	private List<IRequirement> adviceRequires = new ArrayList<IRequirement>();
-	private List<IRequirement> adviceMetaRequires = new ArrayList<IRequirement>();
-	private Map<String, ITouchpointInstruction> adviceInstructions = new HashMap<String, ITouchpointInstruction>();
-	private List<InstallableUnitDescription> adviceOtherIUs = new ArrayList<InstallableUnitDescription>();
-
-	private final Map<String, String> advice;
-	private Iterator<String> keysIterator;
-	private String current;
-	//	private String hostId; not currently used
-	private Version hostVersion;
-
-	public AdviceFileParser(String id, Version version, Map<String, String> advice) {
-		// this.hostId = id; not currently used
-		this.hostVersion = version;
-		this.advice = advice;
-	}
-
-	public void parse() {
-		String adviceVersion = advice.get(ADVICE_VERSION);
-		if (adviceVersion != null)
-			checkAdviceVersion(adviceVersion);
-
-		List<String> keys = new ArrayList<String>(advice.keySet());
-		Collections.sort(keys);
-
-		keysIterator = keys.iterator();
-		next();
-
-		while (current != null) {
-			if (current.startsWith(PROPERTIES_PREFIX))
-				parseProperties(PROPERTIES_PREFIX, adviceProperties);
-			else if (current.startsWith(PROVIDES_PREFIX))
-				parseProvides(PROVIDES_PREFIX, adviceProvides);
-			else if (current.startsWith(REQUIRES_PREFIX))
-				parseRequires(REQUIRES_PREFIX, adviceRequires);
-			else if (current.startsWith(META_REQUIREMENTS_PREFIX))
-				parseRequires(META_REQUIREMENTS_PREFIX, adviceMetaRequires);
-			else if (current.startsWith(INSTRUCTIONS_PREFIX))
-				parseInstructions(INSTRUCTIONS_PREFIX, adviceInstructions);
-			else if (current.startsWith(UNITS_PREFIX))
-				parseUnits(UNITS_PREFIX, adviceOtherIUs);
-			else if (current.equals(ADVICE_VERSION)) {
-				next();
-			} else {
-				// we ignore elements we do not understand
-				next();
-			}
-		}
-	}
-
-	private void checkAdviceVersion(String adviceVersion) {
-		Version version = Version.parseVersion(adviceVersion);
-		if (!VERSION_TOLERANCE.isIncluded(version))
-			throw new IllegalStateException("bad version: " + version + ". Expected range was " + VERSION_TOLERANCE); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	private void next() {
-		current = keysIterator.hasNext() ? keysIterator.next() : null;
-	}
-
-	private String currentValue() {
-		return advice.get(current).trim();
-	}
-
-	private void parseProperties(String prefix, Map<String, String> properties) {
-		while (current != null && current.startsWith(prefix)) {
-			int dotIndex = current.indexOf('.', prefix.length());
-			if (dotIndex == -1)
-				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
-
-			parseProperty(current.substring(0, dotIndex + 1), properties);
-		}
-	}
-
-	private void parseProperty(String prefix, Map<String, String> properties) {
-		String propertyName = null;
-		String propertyValue = null;
-		while (current != null && current.startsWith(prefix)) {
-			String token = current.substring(prefix.length());
-			if (token.equals(NAME)) {
-				propertyName = currentValue();
-			} else if (token.equals(VALUE)) {
-				propertyValue = currentValue();
-			} else {
-				// we ignore elements we do not understand
-			}
-			next();
-		}
-
-		properties.put(propertyName, propertyValue);
-	}
-
-	private void parseProvides(String prefix, List<IProvidedCapability> provides) {
-		while (current != null && current.startsWith(prefix)) {
-			int dotIndex = current.indexOf('.', prefix.length());
-			if (dotIndex == -1)
-				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
-
-			parseProvided(current.substring(0, dotIndex + 1), provides);
-		}
-	}
-
-	private void parseProvided(String prefix, List<IProvidedCapability> provides) {
-		String namespace = null;
-		String name = null;
-		Version capabilityVersion = null;
-		while (current != null && current.startsWith(prefix)) {
-			String token = current.substring(prefix.length());
-			if (token.equals(NAME)) {
-				name = currentValue();
-			} else if (token.equals(NAMESPACE)) {
-				namespace = currentValue();
-			} else if (token.equals(VERSION)) {
-				capabilityVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
-			} else {
-				// we ignore elements we do not understand
-			}
-			next();
-		}
-
-		IProvidedCapability capability = MetadataFactory.createProvidedCapability(namespace, name, capabilityVersion);
-		provides.add(capability);
-	}
-
-	private void parseRequires(String prefix, List<IRequirement> requires) {
-		while (current != null && current.startsWith(prefix)) {
-			int dotIndex = current.indexOf('.', prefix.length());
-			if (dotIndex == -1)
-				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
-
-			parseRequired(current.substring(0, dotIndex + 1), requires);
-		}
-	}
-
-	private void parseRequired(String prefix, List<IRequirement> requires) {
-
-		String namespace = null;
-		String name = null;
-		VersionRange range = null;
-		String filter = null;
-		boolean optional = false;
-		boolean multiple = false;
-		boolean greedy = true;
-
-		while (current != null && current.startsWith(prefix)) {
-			String token = current.substring(prefix.length());
-			if (token.equals(GREEDY)) {
-				greedy = Boolean.valueOf(currentValue()).booleanValue();
-			} else if (token.equals(OPTIONAL)) {
-				optional = Boolean.valueOf(currentValue()).booleanValue();
-			} else if (token.equals(MULTIPLE)) {
-				multiple = Boolean.valueOf(currentValue()).booleanValue();
-			} else if (token.equals(FILTER)) {
-				filter = currentValue();
-			} else if (token.equals(NAME)) {
-				name = currentValue();
-			} else if (token.equals(NAMESPACE)) {
-				namespace = currentValue();
-			} else if (token.equals(RANGE)) {
-				range = new VersionRange(substituteVersionAndQualifier(currentValue()));
-			} else {
-				// we ignore elements we do not understand
-			}
-			next();
-		}
-		IRequirement capability = MetadataFactory.createRequirement(namespace, name, range, filter, optional, multiple, greedy);
-		requires.add(capability);
-	}
-
-	private void parseInstructions(String prefix, Map<String, ITouchpointInstruction> instructions) {
-		while (current != null && current.startsWith(prefix)) {
-			int dotIndex = current.indexOf('.', prefix.length());
-			if (dotIndex != -1)
-				throw new IllegalStateException("bad token: " + current); //$NON-NLS-1$
-
-			parseInstruction(current, instructions);
-		}
-	}
-
-	private void parseInstruction(String prefix, Map<String, ITouchpointInstruction> instructions) {
-		String phase = current.substring(current.lastIndexOf('.') + 1);
-		String body = currentValue();
-		next();
-
-		prefix += '.';
-		String importAttribute = null;
-		if (current != null && current.startsWith(prefix)) {
-			if (current.substring(prefix.length()).equals(IMPORT)) {
-				importAttribute = currentValue();
-			} else {
-				// we ignore elements we do not understand
-			}
-			next();
-		}
-		ITouchpointInstruction instruction = MetadataFactory.createTouchpointInstruction(body, importAttribute);
-		instructions.put(phase, instruction);
-	}
-
-	private void parseUnits(String prefix, List<InstallableUnitDescription> ius) {
-		while (current != null && current.startsWith(prefix)) {
-			int dotIndex = current.indexOf('.', prefix.length());
-			if (dotIndex == -1)
-				throw new IllegalStateException("bad token: " + current + " = " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
-
-			parseUnit(current.substring(0, dotIndex + 1), ius);
-		}
-	}
-
-	private void parseUnit(String prefix, List<InstallableUnitDescription> units) {
-		String unitId = null;
-		Version unitVersion = null;
-		boolean unitSingleton = false;
-		String unitFilter = null;
-		String unitCopyright = null;
-		String unitCopyrightLocation = null;
-		String unitTouchpointId = null;
-		Version unitTouchpointVersion = null;
-
-		String unitUpdateId = null;
-		VersionRange unitUpdateRange = null;
-		int unitUpdateSeverity = 0;
-		String unitUpdateDescription = null;
-
-		List<IArtifactKey> unitArtifacts = new ArrayList<IArtifactKey>();
-		Map<String, String> unitProperties = new HashMap<String, String>();
-		List<IRequirement> unitHostRequirements = new ArrayList<IRequirement>();
-		List<IProvidedCapability> unitProvides = new ArrayList<IProvidedCapability>();
-		List<IRequirement> unitRequires = new ArrayList<IRequirement>();
-		List<IRequirement> unitMetaRequirements = new ArrayList<IRequirement>();
-		List<ILicense> unitLicenses = new ArrayList<ILicense>();
-		Map<String, ITouchpointInstruction> unitInstructions = new HashMap<String, ITouchpointInstruction>();
-		//		updatedescriptor ??
-
-		while (current != null && current.startsWith(prefix)) {
-			String token = current.substring(prefix.length());
-			if (token.equals(ID)) {
-				unitId = currentValue();
-				next();
-			} else if (token.equals(VERSION)) {
-				unitVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
-				next();
-			} else if (token.equals(SINGLETON)) {
-				unitSingleton = Boolean.valueOf(currentValue()).booleanValue();
-				next();
-			} else if (token.equals(FILTER)) {
-				unitFilter = currentValue();
-				next();
-			} else if (token.equals(COPYRIGHT)) {
-				unitCopyright = currentValue();
-				next();
-			} else if (token.equals(COPYRIGHT_LOCATION)) {
-				unitCopyrightLocation = currentValue();
-				next();
-			} else if (token.equals(TOUCHPOINT_ID)) {
-				unitTouchpointId = currentValue();
-				next();
-			} else if (token.equals(TOUCHPOINT_VERSION)) {
-				unitTouchpointVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
-				next();
-			} else if (token.equals(UPDATE_ID)) {
-				unitUpdateId = currentValue();
-				next();
-			} else if (token.equals(UPDATE_RANGE)) {
-				unitUpdateRange = new VersionRange(substituteVersionAndQualifier(currentValue()));
-				next();
-			} else if (token.equals(UPDATE_SEVERITY)) {
-				unitUpdateSeverity = Integer.parseInt(currentValue());
-				next();
-			} else if (token.equals(UPDATE_DESCRIPTION)) {
-				unitUpdateDescription = currentValue();
-				next();
-			} else if (token.startsWith(HOST_REQUIREMENTS_PREFIX))
-				parseRequires(prefix + HOST_REQUIREMENTS_PREFIX, unitHostRequirements);
-			else if (token.startsWith(ARTIFACTS_PREFIX))
-				parseArtifacts(prefix + ARTIFACTS_PREFIX, unitArtifacts);
-			else if (token.startsWith(LICENSES_PREFIX))
-				parseLicenses(prefix + LICENSES_PREFIX, unitLicenses);
-			else if (token.startsWith(PROPERTIES_PREFIX))
-				parseProperties(prefix + PROPERTIES_PREFIX, unitProperties);
-			else if (token.startsWith(PROVIDES_PREFIX))
-				parseProvides(prefix + PROVIDES_PREFIX, unitProvides);
-			else if (token.startsWith(REQUIRES_PREFIX))
-				parseRequires(prefix + REQUIRES_PREFIX, unitRequires);
-			else if (token.startsWith(META_REQUIREMENTS_PREFIX))
-				parseRequires(prefix + META_REQUIREMENTS_PREFIX, unitMetaRequirements);
-			else if (token.startsWith(INSTRUCTIONS_PREFIX))
-				parseInstructions(prefix + INSTRUCTIONS_PREFIX, unitInstructions);
-			else {
-				// we ignore elements we do not understand
-				next();
-			}
-		}
-
-		InstallableUnitDescription description = unitHostRequirements.isEmpty() ? new InstallableUnitDescription() : new InstallableUnitFragmentDescription();
-		description.setId(unitId);
-		description.setVersion(unitVersion);
-		description.setSingleton(unitSingleton);
-		description.setFilter(unitFilter);
-		if (unitCopyright != null || unitCopyrightLocation != null) {
-			try {
-				URI uri = unitCopyrightLocation != null ? new URI(unitCopyrightLocation) : null;
-				description.setCopyright(MetadataFactory.createCopyright(uri, unitCopyright));
-			} catch (URISyntaxException e) {
-				throw new IllegalStateException("bad copyright URI at token: " + current + ", " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		}
-		if (unitTouchpointId != null)
-			description.setTouchpointType(MetadataFactory.createTouchpointType(unitTouchpointId, unitTouchpointVersion));
-
-		if (unitUpdateId != null)
-			description.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(unitUpdateId, unitUpdateRange, unitUpdateSeverity, unitUpdateDescription));
-
-		if (!unitLicenses.isEmpty())
-			description.setLicenses(unitLicenses.toArray(new ILicense[unitLicenses.size()]));
-
-		if (!unitArtifacts.isEmpty())
-			description.setArtifacts(unitArtifacts.toArray(new IArtifactKey[unitArtifacts.size()]));
-
-		if (!unitHostRequirements.isEmpty())
-			((InstallableUnitFragmentDescription) description).setHost(unitHostRequirements.toArray(new IRequirement[unitHostRequirements.size()]));
-
-		if (!unitProperties.isEmpty()) {
-			for (Entry<String, String> entry : unitProperties.entrySet()) {
-				description.setProperty(entry.getKey(), entry.getValue());
-			}
-		}
-
-		if (!unitProvides.isEmpty())
-			description.setCapabilities(unitProvides.toArray(new IProvidedCapability[unitProvides.size()]));
-
-		if (!unitRequires.isEmpty())
-			description.setRequirements(unitRequires.toArray(new IRequirement[unitRequires.size()]));
-
-		if (!unitMetaRequirements.isEmpty())
-			description.setMetaRequirements(unitMetaRequirements.toArray(new IRequirement[unitMetaRequirements.size()]));
-
-		if (!unitInstructions.isEmpty())
-			description.addTouchpointData(MetadataFactory.createTouchpointData(unitInstructions));
-
-		adviceOtherIUs.add(description);
-	}
-
-	private void parseLicenses(String prefix, List<ILicense> licenses) {
-		while (current != null && current.startsWith(prefix)) {
-			int dotIndex = current.indexOf('.', prefix.length());
-			if (dotIndex != -1)
-				throw new IllegalStateException("bad token: " + current + " = " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
-
-			parseLicense(current, licenses);
-		}
-	}
-
-	private void parseLicense(String prefix, List<ILicense> licenses) {
-		String body = currentValue();
-		next();
-
-		prefix += '.';
-		String location = null;
-		if (current != null && current.startsWith(prefix)) {
-			if (current.substring(prefix.length()).equals(LOCATION)) {
-				location = currentValue();
-			} else {
-				// we ignore elements we do not understand
-			}
-			next();
-		}
-
-		try {
-			URI uri = location != null ? new URI(location) : null;
-			ILicense license = MetadataFactory.createLicense(uri, body);
-			licenses.add(license);
-		} catch (URISyntaxException e) {
-			throw new IllegalStateException("bad license URI at token: " + current + ", " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-
-	private void parseArtifacts(String prefix, List<IArtifactKey> artifacts) {
-		while (current != null && current.startsWith(prefix)) {
-			int dotIndex = current.indexOf('.', prefix.length());
-			if (dotIndex == -1)
-				throw new IllegalStateException("bad token: " + current + " = " + currentValue()); //$NON-NLS-1$ //$NON-NLS-2$
-
-			parseArtifact(current.substring(0, dotIndex + 1), artifacts);
-		}
-	}
-
-	private void parseArtifact(String prefix, List<IArtifactKey> artifacts) {
-		String artifactClassifier = null;
-		String artifactId = null;
-		Version artifactVersion = null;
-		while (current != null && current.startsWith(prefix)) {
-			String token = current.substring(prefix.length());
-			if (token.equals(CLASSIFIER)) {
-				artifactClassifier = currentValue();
-			} else if (token.equals(ID)) {
-				artifactId = currentValue();
-			} else if (token.equals(VERSION)) {
-				artifactVersion = Version.parseVersion(substituteVersionAndQualifier(currentValue()));
-			} else {
-				// we ignore elements we do not understand
-			}
-
-			next();
-		}
-		IArtifactKey artifactKey = new ArtifactKey(artifactClassifier, artifactId, artifactVersion);
-		artifacts.add(artifactKey);
-	}
-
-	private String substituteVersionAndQualifier(String version) {
-		if (version.indexOf(VERSION_SUBSTITUTION) != -1) {
-			version = replace(version, VERSION_SUBSTITUTION, hostVersion.toString());
-		}
-
-		if (version.indexOf(QUALIFIER_SUBSTITUTION) != -1) {
-			try {
-				String qualifier = PublisherHelper.toOSGiVersion(hostVersion).getQualifier();
-				if (qualifier == null)
-					qualifier = ""; //$NON-NLS-1$
-				if (qualifier.length() == 0) {
-					// Note: this works only for OSGi versions and version ranges
-					// where the qualifier if present must be at the end of a version string
-					version = replace(version, "." + QUALIFIER_SUBSTITUTION, ""); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-				version = replace(version, QUALIFIER_SUBSTITUTION, qualifier);
-			} catch (UnsupportedOperationException e) {
-				// Version cannot be converted to OSGi
-			}
-		}
-		return version;
-	}
-
-	// originally from org.eclipse.core.internal.net.StringUtil
-	public static String replace(String source, String from, String to) {
-		if (from.length() == 0)
-			return source;
-		StringBuffer buffer = new StringBuffer();
-		int current = 0;
-		int pos = 0;
-		while (pos != -1) {
-			pos = source.indexOf(from, current);
-			if (pos == -1) {
-				buffer.append(source.substring(current));
-			} else {
-				buffer.append(source.substring(current, pos));
-				buffer.append(to);
-				current = pos + from.length();
-			}
-		}
-		return buffer.toString();
-	}
-
-	public Map<String, String> getProperties() {
-		if (adviceProperties.isEmpty())
-			return null;
-		return adviceProperties;
-	}
-
-	public IRequirement[] getRequiredCapabilities() {
-		if (adviceRequires.isEmpty())
-			return null;
-
-		return adviceRequires.toArray(new IRequirement[adviceRequires.size()]);
-	}
-
-	public IProvidedCapability[] getProvidedCapabilities() {
-		if (adviceProvides.isEmpty())
-			return null;
-
-		return adviceProvides.toArray(new IProvidedCapability[adviceProvides.size()]);
-	}
-
-	public Map<String, ITouchpointInstruction> getTouchpointInstructions() {
-		if (adviceInstructions.isEmpty())
-			return null;
-
-		return adviceInstructions;
-	}
-
-	public InstallableUnitDescription[] getAdditionalInstallableUnitDescriptions() {
-		if (adviceOtherIUs.isEmpty())
-			return null;
-
-		return adviceOtherIUs.toArray(new InstallableUnitDescription[adviceOtherIUs.size()]);
-	}
-
-	public IRequirement[] getMetaRequiredCapabilities() {
-		if (adviceMetaRequires.isEmpty())
-			return null;
-
-		return adviceMetaRequires.toArray(new IRequirement[adviceMetaRequires.size()]);
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ApplicationLauncherAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ApplicationLauncherAction.java
deleted file mode 100644
index 3c5497a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ApplicationLauncherAction.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.equinox.p2.metadata.MetadataFactory;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-
-import org.eclipse.equinox.p2.query.QueryUtil;
-
-import java.io.File;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.ExecutablesDescriptor;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.VersionAdvice;
-
-/**
- * Create IUs and CUs that represent the entire launcher for an application.  This includes
- * the executable, the launcher fragments as well as the CUs required to install and configure
- * these elements.
- */
-public class ApplicationLauncherAction extends AbstractPublisherAction {
-
-	private String flavor;
-	private String[] configSpecs;
-	private File location;
-	private String executableName;
-	private Version version;
-	private String id;
-
-	/**
-	 * Returns the id of the top level IU published by this action for the given id and flavor.
-	 * @param id the id of the application being published
-	 * @param flavor the flavor being published
-	 * @return the if for ius published by this action
-	 */
-	public static String computeIUId(String id, String flavor) {
-		return flavor + id + ".application"; //$NON-NLS-1$
-	}
-
-	public ApplicationLauncherAction(String id, Version version, String flavor, String executableName, File location, String[] configSpecs) {
-		this.flavor = flavor;
-		this.configSpecs = configSpecs;
-		this.id = id;
-		this.version = version;
-		this.executableName = executableName;
-		this.location = location;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		// Create the basic actions and run them putting the IUs in a temporary result
-		Collection<IPublisherAction> actions = createActions(publisherInfo);
-		createAdvice(publisherInfo, results);
-		IPublisherResult innerResult = new PublisherResult();
-		MultiStatus finalStatus = new MultiStatus(ApplicationLauncherAction.class.getName(), 0, "publishing result", null); //$NON-NLS-1$
-		for (IPublisherAction action : actions) {
-			if (monitor.isCanceled())
-				return Status.CANCEL_STATUS;
-			finalStatus.merge(action.perform(publisherInfo, innerResult, monitor));
-		}
-		if (!finalStatus.isOK())
-			return finalStatus;
-		// merge the IUs  into the final result as non-roots and create a parent IU that captures them all
-		results.merge(innerResult, IPublisherResult.MERGE_ALL_NON_ROOT);
-		publishApplicationLauncherIU(innerResult.getIUs(null, IPublisherResult.ROOT), results);
-		return Status.OK_STATUS;
-	}
-
-	/**
-	 * Create advice needed by the actions related to and following this action
-	 */
-	private void createAdvice(IPublisherInfo publisherInfo, IPublisherResult results) {
-		createLauncherAdvice(publisherInfo, results);
-	}
-
-	/**
-	 * Create and register advice that will tell people what versions of the launcher bundle and 
-	 * fragments are in use in this particular result.
-	 */
-	private void createLauncherAdvice(IPublisherInfo publisherInfo, IPublisherResult results) {
-		Collection<IInstallableUnit> ius = getIUs(results.getIUs(null, null), EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER);
-		VersionAdvice advice = new VersionAdvice();
-		boolean found = false;
-		for (IInstallableUnit iu : ius) {
-			// skip over source bundles and fragments
-			// TODO should we use the source property here rather than magic name matching?
-			if (iu.getId().endsWith(".source") || QueryUtil.isFragment(iu)) //$NON-NLS-1$
-				continue;
-			advice.setVersion(IInstallableUnit.NAMESPACE_IU_ID, iu.getId(), iu.getVersion());
-			found = true;
-		}
-		if (found)
-			publisherInfo.addAdvice(advice);
-	}
-
-	private Collection<IInstallableUnit> getIUs(Collection<IInstallableUnit> ius, String prefix) {
-		Set<IInstallableUnit> result = new HashSet<IInstallableUnit>();
-		for (IInstallableUnit tmp : ius) {
-			if (tmp.getId().startsWith(prefix))
-				result.add(tmp);
-		}
-		return result;
-	}
-
-	private void publishApplicationLauncherIU(Collection<? extends IVersionedId> children, IPublisherResult result) {
-		InstallableUnitDescription descriptor = createParentIU(children, computeIUId(id, flavor), version);
-		descriptor.setSingleton(true);
-		IInstallableUnit rootIU = MetadataFactory.createInstallableUnit(descriptor);
-		if (rootIU == null)
-			return;
-		result.addIU(rootIU, IPublisherResult.ROOT);
-	}
-
-	private Collection<IPublisherAction> createActions(IPublisherInfo publisherInfo) {
-		Collection<IPublisherAction> actions = new ArrayList<IPublisherAction>();
-		actions.add(new EquinoxLauncherCUAction(flavor, configSpecs));
-		actions.addAll(createExecutablesActions(configSpecs));
-		return actions;
-	}
-
-	protected Collection<IPublisherAction> createExecutablesActions(String[] configs) {
-		Collection<IPublisherAction> actions = new ArrayList<IPublisherAction>(configs.length);
-		for (int i = 0; i < configs.length; i++) {
-			ExecutablesDescriptor executables = computeExecutables(configs[i]);
-			IPublisherAction action = new EquinoxExecutableAction(executables, configs[i], id, version, flavor);
-			actions.add(action);
-		}
-		return actions;
-	}
-
-	protected ExecutablesDescriptor computeExecutables(String configSpec) {
-		// See if we know about an executables feature then use it as the source
-		ExecutablesDescriptor result = ExecutablesDescriptor.createExecutablesFromFeature(location, configSpec);
-		if (result != null)
-			return result;
-		// otherwise, assume that we are running against an Eclipse install and do the default thing
-		String os = AbstractPublisherAction.parseConfigSpec(configSpec)[1];
-		return ExecutablesDescriptor.createDescriptor(os, executableName, location);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundleShapeAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundleShapeAdvice.java
deleted file mode 100644
index 510da51..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundleShapeAdvice.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.AbstractAdvice;
-
-public class BundleShapeAdvice extends AbstractAdvice implements IBundleShapeAdvice {
-
-	private String shape;
-	private Version version;
-	private String id;
-
-	public BundleShapeAdvice(String id, Version version, String shape) {
-		this.id = id;
-		this.version = version;
-		this.shape = shape;
-	}
-
-	protected String getId() {
-		return id;
-	}
-
-	protected Version getVersion() {
-		return version;
-	}
-
-	public String getShape() {
-		return shape;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java
deleted file mode 100644
index 3da9abb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java
+++ /dev/null
@@ -1,818 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.*;
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.eclipse.equinox.internal.p2.publisher.Messages;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.metadata.VersionRange;
-import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.*;
-import org.eclipse.equinox.p2.query.IQueryResult;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
-import org.eclipse.equinox.spi.p2.publisher.LocalizationHelper;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-import org.eclipse.osgi.service.pluginconversion.PluginConversionException;
-import org.eclipse.osgi.service.pluginconversion.PluginConverter;
-import org.eclipse.osgi.service.resolver.*;
-import org.eclipse.osgi.util.ManifestElement;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-/**
- * Publish IUs for all of the bundles in a given set of locations or described by a set of
- * bundle descriptions.  The locations can be actual locations of the bundles or folders
- * of bundles.
- *
- * This action consults the following types of advice:
- * </ul>
- * <li>{@link IAdditionalInstallableUnitAdvice }</li>
- * <li>{@link IBundleShapeAdvice}</li>
- * <li>{@link ICapabilityAdvice}</li>
- * <li>{@link IPropertyAdvice}</li>
- * <li>{@link ITouchpointAdvice}</li>
- * </ul>
- */
-public class BundlesAction extends AbstractPublisherAction {
-
-	// TODO reconsider the references to these specific ids in the action.  The action should be generic
-	protected static final String ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR = "org.eclipse.equinox.simpleconfigurator"; //$NON-NLS-1$
-	protected static final String ORG_ECLIPSE_UPDATE_CONFIGURATOR = "org.eclipse.update.configurator"; //$NON-NLS-1$
-	/**
-	 * A capability name in the {@link PublisherHelper#NAMESPACE_ECLIPSE_TYPE} namespace
-	 * representing and OSGi bundle resource
-	 * @see IProvidedCapability#getName()
-	 */
-	public static final String TYPE_ECLIPSE_BUNDLE = "bundle"; //$NON-NLS-1$
-
-	/**
-	 * A capability name in the {@link PublisherHelper#NAMESPACE_ECLIPSE_TYPE} namespace
-	 * representing a source bundle
-	 * @see IProvidedCapability#getName()
-	 */
-	public static final String TYPE_ECLIPSE_SOURCE = "source"; //$NON-NLS-1$
-
-	public static final String OSGI_BUNDLE_CLASSIFIER = "osgi.bundle"; //$NON-NLS-1$
-	private static final String CAPABILITY_NS_OSGI_BUNDLE = "osgi.bundle"; //$NON-NLS-1$
-	private static final String CAPABILITY_NS_OSGI_FRAGMENT = "osgi.fragment"; //$NON-NLS-1$
-
-	public static final IProvidedCapability BUNDLE_CAPABILITY = MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, Version.createOSGi(1, 0, 0));
-	public static final IProvidedCapability SOURCE_BUNDLE_CAPABILITY = MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_SOURCE, Version.createOSGi(1, 0, 0));
-
-	static final String DEFAULT_BUNDLE_LOCALIZATION = "OSGI-INF/l10n/bundle"; //$NON-NLS-1$
-
-	private static final String[] BUNDLE_IU_PROPERTY_MAP = {Constants.BUNDLE_NAME, IInstallableUnit.PROP_NAME, Constants.BUNDLE_DESCRIPTION, IInstallableUnit.PROP_DESCRIPTION, Constants.BUNDLE_VENDOR, IInstallableUnit.PROP_PROVIDER, Constants.BUNDLE_CONTACTADDRESS, IInstallableUnit.PROP_CONTACT, Constants.BUNDLE_DOCURL, IInstallableUnit.PROP_DOC_URL, Constants.BUNDLE_UPDATELOCATION, IInstallableUnit.PROP_BUNDLE_LOCALIZATION, Constants.BUNDLE_LOCALIZATION, IInstallableUnit.PROP_BUNDLE_LOCALIZATION};
-	public static final int BUNDLE_LOCALIZATION_INDEX = PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length - 1;
-	public static final String DIR = "dir"; //$NON-NLS-1$
-	public static final String JAR = "jar"; //$NON-NLS-1$
-	private static final String FEATURE_FILENAME_DESCRIPTOR = "feature.xml"; //$NON-NLS-1$
-	private static final String PLUGIN_FILENAME_DESCRIPTOR = "plugin.xml"; //$NON-NLS-1$
-	private static final String FRAGMENT_FILENAME_DESCRIPTOR = "fragment.xml"; //$NON-NLS-1$
-	public static String BUNDLE_SHAPE = "Eclipse-BundleShape"; //$NON-NLS-1$
-
-	private File[] locations;
-	private BundleDescription[] bundles;
-
-	public static IArtifactKey createBundleArtifactKey(String bsn, String version) {
-		return new ArtifactKey(OSGI_BUNDLE_CLASSIFIER, bsn, Version.parseVersion(version));
-	}
-
-	public static IInstallableUnit createBundleConfigurationUnit(String hostId, Version cuVersion, boolean isBundleFragment, GeneratorBundleInfo configInfo, String configurationFlavor, IMatchExpression<IInstallableUnit> filter) {
-		if (configInfo == null)
-			return null;
-
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = configurationFlavor + hostId;
-		cu.setId(configUnitId);
-		cu.setVersion(cuVersion);
-
-		//Indicate the IU to which this CU apply
-		Version hostVersion = Version.parseVersion(configInfo.getVersion());
-		VersionRange range = hostVersion == Version.emptyVersion ? VersionRange.emptyRange : new VersionRange(hostVersion, true, Version.MAX_VERSION, true);
-		cu.setHost(new IRequirement[] { //
-		MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, hostId, range, null, false, false, true), //
-				MetadataFactory.createRequirement(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, new VersionRange(Version.createOSGi(1, 0, 0), true, Version.createOSGi(2, 0, 0), false), null, false, false, false)});
-
-		//Adds capabilities for fragment, self, and describing the flavor supported
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(configUnitId, cuVersion), MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
-
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		touchpointData.put("install", "installBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("uninstall", "uninstallBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("configure", createConfigScript(configInfo, isBundleFragment)); //$NON-NLS-1$
-		touchpointData.put("unconfigure", createUnconfigScript(configInfo, isBundleFragment)); //$NON-NLS-1$
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		cu.setFilter(filter);
-		return MetadataFactory.createInstallableUnit(cu);
-	}
-
-	public static IInstallableUnit createBundleIU(BundleDescription bd, IArtifactKey key, IPublisherInfo info) {
-		@SuppressWarnings("unchecked")
-		Map<String, String> manifest = (Map<String, String>) bd.getUserObject();
-		Map<Locale, Map<String, String>> manifestLocalizations = null;
-		if (manifest != null && bd.getLocation() != null)
-			manifestLocalizations = getManifestLocalizations(manifest, new File(bd.getLocation()));
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		iu.setSingleton(bd.isSingleton());
-		iu.setId(bd.getSymbolicName());
-		iu.setVersion(PublisherHelper.fromOSGiVersion(bd.getVersion()));
-		iu.setFilter(bd.getPlatformFilter());
-		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(bd.getSymbolicName(), computeUpdateRange(bd.getVersion()), IUpdateDescriptor.NORMAL, null));
-		iu.setArtifacts(new IArtifactKey[] {key});
-		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
-
-		boolean isFragment = bd.getHost() != null;
-		//		boolean requiresAFragment = isFragment ? false : requireAFragment(bd, manifest);
-
-		//Process the required bundles
-		BundleSpecification requiredBundles[] = bd.getRequiredBundles();
-		ArrayList<IRequirement> reqsDeps = new ArrayList<IRequirement>();
-		//		if (requiresAFragment)
-		//			reqsDeps.add(MetadataFactory.createRequiredCapability(CAPABILITY_TYPE_OSGI_FRAGMENTS, bd.getSymbolicName(), VersionRange.emptyRange, null, false, false));
-		if (isFragment)
-			reqsDeps.add(MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, bd.getHost().getName(), PublisherHelper.fromOSGiVersionRange(bd.getHost().getVersionRange()), null, false, false));
-		for (int j = 0; j < requiredBundles.length; j++)
-			reqsDeps.add(MetadataFactory.createRequirement(CAPABILITY_NS_OSGI_BUNDLE, requiredBundles[j].getName(), PublisherHelper.fromOSGiVersionRange(requiredBundles[j].getVersionRange()), null, requiredBundles[j].isOptional(), false));
-
-		// Process the import packages
-		ImportPackageSpecification osgiImports[] = bd.getImportPackages();
-		for (int i = 0; i < osgiImports.length; i++) {
-			// TODO we need to sort out how we want to handle wild-carded dynamic imports - for now we ignore them
-			ImportPackageSpecification importSpec = osgiImports[i];
-			String importPackageName = importSpec.getName();
-			if (importPackageName.indexOf('*') != -1)
-				continue;
-			VersionRange versionRange = PublisherHelper.fromOSGiVersionRange(importSpec.getVersionRange());
-			//TODO this needs to be refined to take into account all the attribute handled by imports
-			reqsDeps.add(MetadataFactory.createRequirement(PublisherHelper.CAPABILITY_NS_JAVA_PACKAGE, importPackageName, versionRange, null, isOptional(importSpec), false));
-		}
-		iu.setRequirements(reqsDeps.toArray(new IRequirement[reqsDeps.size()]));
-
-		// Create set of provided capabilities
-		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
-		providedCapabilities.add(PublisherHelper.createSelfCapability(bd.getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion())));
-		providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_OSGI_BUNDLE, bd.getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion())));
-
-		// Process the export package
-		ExportPackageDescription exports[] = bd.getExportPackages();
-		for (int i = 0; i < exports.length; i++) {
-			//TODO make sure that we support all the refinement on the exports
-			providedCapabilities.add(MetadataFactory.createProvidedCapability(PublisherHelper.CAPABILITY_NS_JAVA_PACKAGE, exports[i].getName(), PublisherHelper.fromOSGiVersion(exports[i].getVersion())));
-		}
-		// Here we add a bundle capability to identify bundles
-		if (manifest != null && manifest.containsKey("Eclipse-SourceBundle")) //$NON-NLS-1$
-			providedCapabilities.add(SOURCE_BUNDLE_CAPABILITY);
-		else
-			providedCapabilities.add(BUNDLE_CAPABILITY);
-		if (isFragment)
-			providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_OSGI_FRAGMENT, bd.getHost().getName(), PublisherHelper.fromOSGiVersion(bd.getVersion())));
-
-		if (manifestLocalizations != null) {
-			for (Entry<Locale, Map<String, String>> locEntry : manifestLocalizations.entrySet()) {
-				Locale locale = locEntry.getKey();
-				Map<String, String> translatedStrings = locEntry.getValue();
-				for (Entry<String, String> entry : translatedStrings.entrySet()) {
-					iu.setProperty(locale.toString() + '.' + entry.getKey(), entry.getValue());
-				}
-				providedCapabilities.add(PublisherHelper.makeTranslationCapability(bd.getSymbolicName(), locale));
-			}
-		}
-		iu.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-		processCapabilityAdvice(iu, info);
-
-		// Set certain properties from the manifest header attributes as IU properties.
-		// The values of these attributes may be localized (strings starting with '%')
-		// with the translated values appearing in the localization IU fragments
-		// associated with the bundle IU.
-		if (manifest != null) {
-			int i = 0;
-			while (i < BUNDLE_IU_PROPERTY_MAP.length) {
-				if (manifest.containsKey(BUNDLE_IU_PROPERTY_MAP[i])) {
-					String value = manifest.get(BUNDLE_IU_PROPERTY_MAP[i]);
-					if (value != null && value.length() > 0) {
-						iu.setProperty(BUNDLE_IU_PROPERTY_MAP[i + 1], value);
-					}
-				}
-				i += 2;
-			}
-		}
-
-		// Define the immutable metadata for this IU. In this case immutable means
-		// that this is something that will not impact the configuration.
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		touchpointData.put("manifest", toManifestString(manifest)); //$NON-NLS-1$
-		if (isDir(bd, info))
-			touchpointData.put("zipped", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-		processTouchpointAdvice(iu, touchpointData, info);
-
-		processInstallableUnitPropertiesAdvice(iu, info);
-		return MetadataFactory.createInstallableUnit(iu);
-	}
-
-	static VersionRange computeUpdateRange(org.osgi.framework.Version base) {
-		VersionRange updateRange = null;
-		if (!base.equals(org.osgi.framework.Version.emptyVersion)) {
-			updateRange = new VersionRange(Version.emptyVersion, true, PublisherHelper.fromOSGiVersion(base), false);
-		} else {
-			updateRange = VersionRange.emptyRange;
-		}
-		return updateRange;
-	}
-
-	private IInstallableUnitFragment createHostLocalizationFragment(IInstallableUnit bundleIU, BundleDescription bd, String hostId, String[] hostBundleManifestValues) {
-		Map<Locale, Map<String, String>> hostLocalizations = getHostLocalizations(new File(bd.getLocation()), hostBundleManifestValues);
-		if (hostLocalizations == null || hostLocalizations.isEmpty())
-			return null;
-		return createLocalizationFragmentOfHost(bd, hostId, hostBundleManifestValues, hostLocalizations);
-	}
-
-	/*
-	 * @param hostId
-	 * @param bd
-	 * @param locale
-	 * @param localizedStrings
-	 * @return installableUnitFragment
-	 */
-	private static IInstallableUnitFragment createLocalizationFragmentOfHost(BundleDescription bd, String hostId, String[] hostManifestValues, Map<Locale, Map<String, String>> hostLocalizations) {
-		InstallableUnitFragmentDescription fragment = new MetadataFactory.InstallableUnitFragmentDescription();
-		String fragmentId = makeHostLocalizationFragmentId(bd.getSymbolicName());
-		fragment.setId(fragmentId);
-		fragment.setVersion(PublisherHelper.fromOSGiVersion(bd.getVersion())); // TODO: is this a meaningful version?
-
-		HostSpecification hostSpec = bd.getHost();
-		IRequirement[] hostReqs = new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, hostSpec.getName(), PublisherHelper.fromOSGiVersionRange(hostSpec.getVersionRange()), null, false, false, false)};
-		fragment.setHost(hostReqs);
-
-		fragment.setSingleton(true);
-		fragment.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-
-		// Create a provided capability for each locale and add the translated properties.
-		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>(hostLocalizations.keySet().size());
-		providedCapabilities.add(PublisherHelper.createSelfCapability(fragmentId, fragment.getVersion()));
-		for (Entry<Locale, Map<String, String>> localeEntry : hostLocalizations.entrySet()) {
-			Locale locale = localeEntry.getKey();
-			Map<String, String> translatedStrings = localeEntry.getValue();
-			for (Entry<String, String> entry : translatedStrings.entrySet()) {
-				fragment.setProperty(locale.toString() + '.' + entry.getKey(), entry.getValue());
-			}
-			providedCapabilities.add(PublisherHelper.makeTranslationCapability(hostId, locale));
-		}
-		fragment.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-
-		return MetadataFactory.createInstallableUnitFragment(fragment);
-	}
-
-	/**
-	 * @param id
-	 * @return the id for the iu fragment containing localized properties
-	 * 		   for the fragment with the given id.
-	 */
-	private static String makeHostLocalizationFragmentId(String id) {
-		return id + ".translated_host_properties"; //$NON-NLS-1$
-	}
-
-	private static String createConfigScript(GeneratorBundleInfo configInfo, boolean isBundleFragment) {
-		if (configInfo == null)
-			return ""; //$NON-NLS-1$
-
-		String configScript = "";//$NON-NLS-1$
-		if (!isBundleFragment && configInfo.getStartLevel() != BundleInfo.NO_LEVEL) {
-			configScript += "setStartLevel(startLevel:" + configInfo.getStartLevel() + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		if (!isBundleFragment && configInfo.isMarkedAsStarted()) {
-			configScript += "markStarted(started: true);"; //$NON-NLS-1$
-		}
-
-		if (configInfo.getSpecialConfigCommands() != null) {
-			configScript += configInfo.getSpecialConfigCommands();
-		}
-
-		return configScript;
-	}
-
-	private static String createDefaultBundleConfigScript(GeneratorBundleInfo configInfo) {
-		return createConfigScript(configInfo, false);
-	}
-
-	public static IInstallableUnit createDefaultBundleConfigurationUnit(GeneratorBundleInfo configInfo, GeneratorBundleInfo unconfigInfo, String configurationFlavor) {
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String configUnitId = PublisherHelper.createDefaultConfigUnitId(OSGI_BUNDLE_CLASSIFIER, configurationFlavor);
-		cu.setId(configUnitId);
-		Version configUnitVersion = Version.createOSGi(1, 0, 0);
-		cu.setVersion(configUnitVersion);
-
-		// Add capabilities for fragment, self, and describing the flavor supported
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		cu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(configUnitId, configUnitVersion), MetadataFactory.createProvidedCapability(PublisherHelper.NAMESPACE_FLAVOR, configurationFlavor, Version.createOSGi(1, 0, 0))});
-
-		// Create a required capability on bundles
-		IRequirement[] reqs = new IRequirement[] {MetadataFactory.createRequirement(PublisherHelper.NAMESPACE_ECLIPSE_TYPE, TYPE_ECLIPSE_BUNDLE, VersionRange.emptyRange, null, false, true, false)};
-		cu.setHost(reqs);
-		Map<String, String> touchpointData = new HashMap<String, String>();
-
-		touchpointData.put("install", "installBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("uninstall", "uninstallBundle(bundle:${artifact})"); //$NON-NLS-1$ //$NON-NLS-2$
-		touchpointData.put("configure", createDefaultBundleConfigScript(configInfo)); //$NON-NLS-1$
-		touchpointData.put("unconfigure", createDefaultBundleUnconfigScript(unconfigInfo)); //$NON-NLS-1$
-
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		return MetadataFactory.createInstallableUnit(cu);
-	}
-
-	private static String createDefaultBundleUnconfigScript(GeneratorBundleInfo unconfigInfo) {
-		return createUnconfigScript(unconfigInfo, false);
-	}
-
-	private static String createUnconfigScript(GeneratorBundleInfo unconfigInfo, boolean isBundleFragment) {
-		if (unconfigInfo == null)
-			return ""; //$NON-NLS-1$
-		String unconfigScript = "";//$NON-NLS-1$
-		if (!isBundleFragment && unconfigInfo.getStartLevel() != BundleInfo.NO_LEVEL) {
-			unconfigScript += "setStartLevel(startLevel:" + BundleInfo.NO_LEVEL + ");"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		if (!isBundleFragment && unconfigInfo.isMarkedAsStarted()) {
-			unconfigScript += "markStarted(started: false);"; //$NON-NLS-1$
-		}
-
-		if (unconfigInfo.getSpecialUnconfigCommands() != null) {
-			unconfigScript += unconfigInfo.getSpecialUnconfigCommands();
-		}
-		return unconfigScript;
-	}
-
-	private static boolean isOptional(ImportPackageSpecification importedPackage) {
-		if (importedPackage.getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_DYNAMIC) || importedPackage.getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_OPTIONAL))
-			return true;
-		return false;
-	}
-
-	private static String toManifestString(Map<String, String> p) {
-		if (p == null)
-			return null;
-		StringBuffer result = new StringBuffer();
-		for (Entry<String, String> aProperty : p.entrySet()) {
-			if (aProperty.getKey().equals(BUNDLE_SHAPE))
-				continue;
-			result.append(aProperty.getKey()).append(": ").append(aProperty.getValue()).append('\n'); //$NON-NLS-1$
-		}
-		return result.toString();
-	}
-
-	// Return a map from locale to property set for the manifest localizations
-	// from the given bundle directory and given bundle localization path/name
-	// manifest property value.
-	private static Map<Locale, Map<String, String>> getManifestLocalizations(Map<String, String> manifest, File bundleLocation) {
-		Map<Locale, Map<String, String>> localizations;
-		Locale defaultLocale = null; // = Locale.ENGLISH; // TODO: get this from GeneratorInfo
-		String[] bundleManifestValues = getManifestCachedValues(manifest);
-		String bundleLocalization = bundleManifestValues[BUNDLE_LOCALIZATION_INDEX]; // Bundle localization is the last one in the list
-
-		if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && //$NON-NLS-1$
-				bundleLocation.isFile()) {
-			localizations = LocalizationHelper.getJarPropertyLocalizations(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-			//localizations = getJarManifestLocalization(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-		} else {
-			localizations = LocalizationHelper.getDirPropertyLocalizations(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-			// localizations = getDirManifestLocalization(bundleLocation, bundleLocalization, defaultLocale, bundleManifestValues);
-		}
-
-		return localizations;
-	}
-
-	public static String[] getExternalizedStrings(IInstallableUnit iu) {
-		String[] result = new String[PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length];
-		int j = 0;
-		for (int i = 1; i < BUNDLE_IU_PROPERTY_MAP.length - 1; i += 2) {
-			if (iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]) != null && iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]).length() > 0 && iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]).charAt(0) == '%')
-				result[j++] = iu.getProperty(BUNDLE_IU_PROPERTY_MAP[i]).substring(1);
-			else
-				j++;
-		}
-		// The last string is the location 
-		result[BUNDLE_LOCALIZATION_INDEX] = iu.getProperty(IInstallableUnit.PROP_BUNDLE_LOCALIZATION);
-
-		return result;
-	}
-
-	public static String[] getManifestCachedValues(Map<String, String> manifest) {
-		String[] cachedValues = new String[PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length];
-		for (int j = 0; j < PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES.length; j++) {
-			String value = manifest.get(PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES[j]);
-			if (PublisherHelper.BUNDLE_LOCALIZED_PROPERTIES[j].equals(Constants.BUNDLE_LOCALIZATION)) {
-				if (value == null)
-					value = DEFAULT_BUNDLE_LOCALIZATION;
-				cachedValues[j] = value;
-			} else if (value != null && value.length() > 1 && value.charAt(0) == '%') {
-				cachedValues[j] = value.substring(1);
-			}
-		}
-		return cachedValues;
-	}
-
-	// Return a map from locale to property set for the manifest localizations
-	// from the given bundle directory and given bundle localization path/name
-	// manifest property value.
-	public static Map<Locale, Map<String, String>> getHostLocalizations(File bundleLocation, String[] hostBundleManifestValues) {
-		Map<Locale, Map<String, String>> localizations;
-		Locale defaultLocale = null; // = Locale.ENGLISH; // TODO: get this from GeneratorInfo
-		String hostBundleLocalization = hostBundleManifestValues[BUNDLE_LOCALIZATION_INDEX];
-		if (hostBundleLocalization == null)
-			return null;
-
-		if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && //$NON-NLS-1$
-				bundleLocation.isFile()) {
-			localizations = LocalizationHelper.getJarPropertyLocalizations(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-			//localizations = getJarManifestLocalization(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-		} else {
-			localizations = LocalizationHelper.getDirPropertyLocalizations(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-			// localizations = getDirManifestLocalization(bundleLocation, hostBundleLocalization, defaultLocale, hostBundleManifestValues);
-		}
-
-		return localizations;
-	}
-
-	private static PluginConverter acquirePluginConverter() {
-		return (PluginConverter) ServiceHelper.getService(Activator.getContext(), PluginConverter.class.getName());
-	}
-
-	@SuppressWarnings("unchecked")
-	private static Dictionary<String, String> convertPluginManifest(File bundleLocation, boolean logConversionException) {
-		PluginConverter converter;
-		try {
-			converter = acquirePluginConverter();
-			if (converter == null) {
-				String message = NLS.bind(Messages.exception_noPluginConverter, bundleLocation);
-				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message));
-				return null;
-			}
-			return converter.convertManifest(bundleLocation, false, null, true, null);
-		} catch (PluginConversionException convertException) {
-			// only log the exception if we had a plugin.xml or fragment.xml and we failed conversion
-			if (bundleLocation.getName().equals(FEATURE_FILENAME_DESCRIPTOR))
-				return null;
-			if (!new File(bundleLocation, PLUGIN_FILENAME_DESCRIPTOR).exists() && !new File(bundleLocation, FRAGMENT_FILENAME_DESCRIPTOR).exists())
-				return null;
-			if (logConversionException) {
-				IStatus status = new Status(IStatus.WARNING, Activator.ID, 0, NLS.bind(Messages.exception_errorConverting, bundleLocation.getAbsolutePath()), convertException);
-				LogHelper.log(status);
-			}
-			return null;
-		}
-	}
-
-	public static BundleDescription createBundleDescription(Dictionary<String, String> enhancedManifest, File bundleLocation) {
-		try {
-			BundleDescription descriptor = StateObjectFactory.defaultFactory.createBundleDescription(null, enhancedManifest, bundleLocation == null ? null : bundleLocation.getAbsolutePath(), 1); //TODO Do we need to have a real bundle id
-			descriptor.setUserObject(enhancedManifest);
-			return descriptor;
-		} catch (BundleException e) {
-			String message = NLS.bind(Messages.exception_stateAddition, bundleLocation == null ? null : bundleLocation.getAbsoluteFile());
-			IStatus status = new Status(IStatus.WARNING, Activator.ID, message, e);
-			LogHelper.log(status);
-			return null;
-		}
-	}
-
-	public static BundleDescription createBundleDescription(File bundleLocation) {
-		Dictionary<String, String> manifest = loadManifest(bundleLocation);
-		if (manifest == null)
-			return null;
-		return createBundleDescription(manifest, bundleLocation);
-	}
-
-	public static Dictionary<String, String> loadManifest(File bundleLocation) {
-		Dictionary<String, String> manifest = basicLoadManifest(bundleLocation);
-		if (manifest == null)
-			return null;
-		// if the bundle itself does not define its shape, infer the shape from the current form
-		if (manifest.get(BUNDLE_SHAPE) == null)
-			manifest.put(BUNDLE_SHAPE, bundleLocation.isDirectory() ? DIR : JAR);
-		return manifest;
-	}
-
-	public static Dictionary<String, String> basicLoadManifest(File bundleLocation) {
-		InputStream manifestStream = null;
-		ZipFile jarFile = null;
-		try {
-			if ("jar".equalsIgnoreCase(new Path(bundleLocation.getName()).getFileExtension()) && bundleLocation.isFile()) { //$NON-NLS-1$
-				jarFile = new ZipFile(bundleLocation, ZipFile.OPEN_READ);
-				ZipEntry manifestEntry = jarFile.getEntry(JarFile.MANIFEST_NAME);
-				if (manifestEntry != null) {
-					manifestStream = jarFile.getInputStream(manifestEntry);
-				}
-			} else {
-				File manifestFile = new File(bundleLocation, JarFile.MANIFEST_NAME);
-				if (manifestFile.exists())
-					manifestStream = new BufferedInputStream(new FileInputStream(manifestFile));
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(Messages.exception_errorLoadingManifest, bundleLocation);
-			LogHelper.log(new Status(IStatus.WARNING, Activator.ID, message, e));
-		}
-		Dictionary<String, String> manifest = null;
-		try {
-			if (manifestStream != null) {
-				try {
-					@SuppressWarnings("unchecked")
-					Map<String, String> manifestMap = ManifestElement.parseBundleManifest(manifestStream, null);
-					// TODO temporary hack.  We are reading a Map but everyone wants a Dictionary so convert.
-					// real answer is to have people expect a Map but that is a wider change.
-					manifest = new Hashtable<String, String>(manifestMap);
-				} catch (IOException e) {
-					String message = NLS.bind(Messages.exception_errorReadingManifest, bundleLocation, e.getMessage());
-					LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message, e));
-					return null;
-				} catch (BundleException e) {
-					String message = NLS.bind(Messages.exception_errorReadingManifest, bundleLocation, e.getMessage());
-					LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message, e));
-					return null;
-				}
-			} else {
-				manifest = convertPluginManifest(bundleLocation, true);
-			}
-		} finally {
-			try {
-				if (jarFile != null)
-					jarFile.close();
-			} catch (IOException e2) {
-				//Ignore
-			}
-		}
-
-		if (manifest == null)
-			return null;
-
-		//Deal with the pre-3.0 plug-in shape who have a default jar manifest.mf
-		if (manifest.get(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME) == null)
-			manifest = convertPluginManifest(bundleLocation, true);
-		return manifest;
-
-	}
-
-	public BundlesAction(File[] locations) {
-		this.locations = locations;
-	}
-
-	public BundlesAction(BundleDescription[] bundles) {
-		this.bundles = bundles;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		if (bundles == null && locations == null)
-			throw new IllegalStateException(Messages.exception_noBundlesOrLocations);
-
-		setPublisherInfo(publisherInfo);
-
-		try {
-			if (bundles == null)
-				bundles = getBundleDescriptions(expandLocations(locations), monitor);
-			generateBundleIUs(bundles, publisherInfo, results, monitor);
-			bundles = null;
-		} catch (OperationCanceledException e) {
-			return Status.CANCEL_STATUS;
-		}
-		return Status.OK_STATUS;
-	}
-
-	protected void publishArtifact(IArtifactDescriptor descriptor, File base, File[] inclusions, IPublisherInfo publisherInfo) {
-		IArtifactRepository destination = publisherInfo.getArtifactRepository();
-		if (descriptor == null || destination == null)
-			return;
-
-		// publish the given files
-		publishArtifact(descriptor, inclusions, null, publisherInfo, createRootPrefixComputer(base));
-	}
-
-	protected void publishArtifact(IArtifactDescriptor descriptor, File jarFile, IPublisherInfo publisherInfo) {
-		// no files to publish so this is done.
-		if (jarFile == null || publisherInfo == null)
-			return;
-
-		// if the destination already contains the descriptor, there is nothing to do.
-		IArtifactRepository destination = publisherInfo.getArtifactRepository();
-		if (destination == null || destination.contains(descriptor))
-			return;
-
-		super.publishArtifact(descriptor, jarFile, publisherInfo);
-
-		// if we are assimilating pack200 files then add the packed descriptor
-		// into the repo assuming it does not already exist.
-		boolean reuse = "true".equals(destination.getProperties().get(AbstractPublisherApplication.PUBLISH_PACK_FILES_AS_SIBLINGS)); //$NON-NLS-1$
-		if (reuse && (publisherInfo.getArtifactOptions() & IPublisherInfo.A_PUBLISH) > 0) {
-			File packFile = new Path(jarFile.getAbsolutePath()).addFileExtension("pack.gz").toFile(); //$NON-NLS-1$
-			if (packFile.exists()) {
-				IArtifactDescriptor ad200 = createPack200ArtifactDescriptor(descriptor.getArtifactKey(), packFile, descriptor.getProperty(IArtifactDescriptor.ARTIFACT_SIZE));
-				publishArtifact(ad200, packFile, publisherInfo);
-			}
-		}
-	}
-
-	private File[] expandLocations(File[] list) {
-		ArrayList<File> result = new ArrayList<File>();
-		expandLocations(list, result);
-		return result.toArray(new File[result.size()]);
-	}
-
-	private void expandLocations(File[] list, ArrayList<File> result) {
-		if (list == null)
-			return;
-		for (int i = 0; i < list.length; i++) {
-			File location = list[i];
-			if (location.isDirectory()) {
-				// if the location is itself a bundle, just add it.  Otherwise r down
-				if (new File(location, JarFile.MANIFEST_NAME).exists())
-					result.add(location);
-				else if (new File(location, "plugin.xml").exists() || new File(location, "fragment.xml").exists()) //$NON-NLS-1$ //$NON-NLS-2$
-					result.add(location); //old style bundle without manifest
-				else
-					expandLocations(location.listFiles(), result);
-			} else {
-				result.add(location);
-			}
-		}
-	}
-
-	//TODO remove this method
-	protected void generateBundleIUs(BundleDescription[] bundleDescriptions, IPublisherResult result, IProgressMonitor monitor) {
-		generateBundleIUs(bundleDescriptions, null, result, monitor);
-	}
-
-	protected void generateBundleIUs(BundleDescription[] bundleDescriptions, IPublisherInfo info, IPublisherResult result, IProgressMonitor monitor) {
-
-		// This assumes that hosts are processed before fragments because for each fragment the host
-		// is queried for the strings that should be translated.
-		for (int i = 0; i < bundleDescriptions.length; i++) {
-			if (monitor.isCanceled())
-				throw new OperationCanceledException();
-
-			BundleDescription bd = bundleDescriptions[i];
-			if (bd != null && bd.getSymbolicName() != null && bd.getVersion() != null) {
-				//First check to see if there is already an IU around for this
-				IInstallableUnit bundleIU = queryForIU(result, bundleDescriptions[i].getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion()));
-				IArtifactKey key = createBundleArtifactKey(bd.getSymbolicName(), bd.getVersion().toString());
-				if (bundleIU == null) {
-					createAdviceFileAdvice(bundleDescriptions[i], info);
-					// Create the bundle IU according to any shape advice we have
-					bundleIU = createBundleIU(bd, key, info);
-				}
-
-				File location = new File(bd.getLocation());
-				IArtifactDescriptor ad = PublisherHelper.createArtifactDescriptor(info, key, location);
-				processArtifactPropertiesAdvice(bundleIU, ad, info);
-
-				// Publish according to the shape on disk
-				File bundleLocation = new File(bd.getLocation());
-				if (bundleLocation.isDirectory())
-					publishArtifact(ad, bundleLocation, bundleLocation.listFiles(), info);
-				else
-					publishArtifact(ad, bundleLocation, info);
-
-				IInstallableUnit fragment = null;
-				if (isFragment(bd)) {
-					// TODO: Need a test case for multiple hosts
-					String hostId = bd.getHost().getName();
-					VersionRange hostVersionRange = PublisherHelper.fromOSGiVersionRange(bd.getHost().getVersionRange());
-					IQueryResult<IInstallableUnit> hosts = queryForIUs(result, hostId, hostVersionRange);
-
-					for (Iterator<IInstallableUnit> itor = hosts.iterator(); itor.hasNext();) {
-						IInstallableUnit host = itor.next();
-						String fragmentId = makeHostLocalizationFragmentId(bd.getSymbolicName());
-						fragment = queryForIU(result, fragmentId, PublisherHelper.fromOSGiVersion(bd.getVersion()));
-						if (fragment == null) {
-							String[] externalizedStrings = getExternalizedStrings(host);
-							fragment = createHostLocalizationFragment(bundleIU, bd, hostId, externalizedStrings);
-						}
-					}
-
-				}
-
-				result.addIU(bundleIU, IPublisherResult.ROOT);
-				if (fragment != null)
-					result.addIU(fragment, IPublisherResult.NON_ROOT);
-
-				InstallableUnitDescription[] others = processAdditionalInstallableUnitsAdvice(bundleIU, info);
-				for (int iuIndex = 0; others != null && iuIndex < others.length; iuIndex++) {
-					result.addIU(MetadataFactory.createInstallableUnit(others[iuIndex]), IPublisherResult.ROOT);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Adds advice for any p2.inf file found in this bundle.
-	 */
-	private void createAdviceFileAdvice(BundleDescription bundleDescription, IPublisherInfo publisherInfo) {
-		String location = bundleDescription.getLocation();
-		if (location == null)
-			return;
-
-		AdviceFileAdvice advice = new AdviceFileAdvice(bundleDescription.getSymbolicName(), PublisherHelper.fromOSGiVersion(bundleDescription.getVersion()), new Path(location), AdviceFileAdvice.BUNDLE_ADVICE_FILE);
-		if (advice.containsAdvice())
-			publisherInfo.addAdvice(advice);
-
-	}
-
-	private static boolean isDir(BundleDescription bundle, IPublisherInfo info) {
-		Collection<IBundleShapeAdvice> advice = info.getAdvice(null, true, bundle.getSymbolicName(), PublisherHelper.fromOSGiVersion(bundle.getVersion()), IBundleShapeAdvice.class);
-		// if the advice has a shape, use it
-		if (advice != null && !advice.isEmpty()) {
-			// we know there is some advice but if there is more than one, take the first.
-			String shape = advice.iterator().next().getShape();
-			if (shape != null)
-				return shape.equals(IBundleShapeAdvice.DIR);
-		}
-		// otherwise go with whatever we figured out from the manifest or the shape on disk
-		@SuppressWarnings("unchecked")
-		Map<String, String> manifest = (Map<String, String>) bundle.getUserObject();
-		String format = manifest.get(BUNDLE_SHAPE);
-		return DIR.equals(format);
-	}
-
-	private boolean isFragment(BundleDescription bd) {
-		return (bd.getHost() != null ? true : false);
-	}
-
-	// TODO reconsider the special cases here for the configurators.  Perhaps these should be in their own actions.
-	protected BundleDescription[] getBundleDescriptions(File[] bundleLocations, IProgressMonitor monitor) {
-		if (bundleLocations == null)
-			return new BundleDescription[0];
-		boolean addSimpleConfigurator = false;
-		boolean scIn = false;
-		for (int i = 0; i < bundleLocations.length; i++) {
-			if (!addSimpleConfigurator)
-				addSimpleConfigurator = bundleLocations[i].toString().indexOf(ORG_ECLIPSE_UPDATE_CONFIGURATOR) > 0;
-			if (!scIn) {
-				scIn = bundleLocations[i].toString().indexOf(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR) > 0;
-				if (scIn)
-					break;
-			}
-		}
-		if (scIn)
-			addSimpleConfigurator = false;
-		BundleDescription[] result = new BundleDescription[bundleLocations.length + (addSimpleConfigurator ? 1 : 0)];
-		for (int i = 0; i < bundleLocations.length; i++) {
-			if (monitor.isCanceled())
-				throw new OperationCanceledException();
-			result[i] = createBundleDescription(bundleLocations[i]);
-		}
-		if (addSimpleConfigurator) {
-			// Add simple configurator to the list of bundles
-			try {
-				Bundle simpleConfigBundle = getBundle(ORG_ECLIPSE_EQUINOX_SIMPLECONFIGURATOR);
-				if (simpleConfigBundle == null)
-					LogHelper.log(new Status(IStatus.INFO, Activator.ID, Messages.message_noSimpleconfigurator));
-				else {
-					File location = FileLocator.getBundleFile(simpleConfigBundle);
-					result[result.length - 1] = createBundleDescription(location);
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		return result;
-	}
-
-	// This method is based on core.runtime's InternalPlatform.getBundle(...) with a difference just in how we get PackageAdmin
-	private static Bundle getBundle(String symbolicName) {
-		PackageAdmin packageAdmin = (PackageAdmin) ServiceHelper.getService(Activator.getContext(), PackageAdmin.class.getName());
-		if (packageAdmin == null)
-			return null;
-		Bundle[] matchingBundles = packageAdmin.getBundles(symbolicName, null);
-		if (matchingBundles == null)
-			return null;
-		//Return the first bundle that is not installed or uninstalled
-		for (int i = 0; i < matchingBundles.length; i++) {
-			if ((matchingBundles[i].getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) {
-				return matchingBundles[i];
-			}
-		}
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigAdvice.java
deleted file mode 100644
index a095a55..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigAdvice.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.util.Map;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
-import org.eclipse.equinox.p2.publisher.AbstractAdvice;
-
-public class ConfigAdvice extends AbstractAdvice implements IConfigAdvice {
-
-	private ConfigData data;
-	private String configSpec;
-
-	public ConfigAdvice(ConfigData data, String configSpec) {
-		this.data = data;
-		this.configSpec = configSpec;
-	}
-
-	public BundleInfo[] getBundles() {
-		return data.getBundles();
-	}
-
-	protected String getConfigSpec() {
-		return configSpec;
-	}
-
-	public Map<String, String> getProperties() {
-		return CollectionUtils.toMap(data.getProperties());
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigCUsAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigCUsAction.java
deleted file mode 100644
index 3d77fde..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ConfigCUsAction.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.util.*;
-import java.util.Map.Entry;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.p2.metadata.TouchpointInstruction;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-import org.eclipse.osgi.util.ManifestElement;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-
-/**
- * Publish CUs for all the configuration data in the current result.
- * This adds config-specific CUs to capture start levels etc found in the config.ini
- * etc for is os, ws, arch combination seen so far.
- */
-public class ConfigCUsAction extends AbstractPublisherAction {
-
-	protected static final String ORG_ECLIPSE_UPDATE_CONFIGURATOR = "org.eclipse.update.configurator"; //$NON-NLS-1$
-	protected static final String DEFAULT_START_LEVEL = "osgi.bundles.defaultStartLevel"; //$NON-NLS-1$
-	private static Collection<String> PROPERTIES_TO_SKIP;
-	private static HashSet<String> PROGRAM_ARGS_TO_SKIP;
-	protected Version version;
-	protected String id;
-	protected String flavor;
-	IPublisherResult outerResults = null;
-
-	// TODO consider moving this filtering to the LaunchingAdvice and ConfigAdvice so 
-	// it is not hardcoded in the action.
-	static {
-		PROPERTIES_TO_SKIP = new HashSet<String>();
-		PROPERTIES_TO_SKIP.add("osgi.frameworkClassPath"); //$NON-NLS-1$
-		PROPERTIES_TO_SKIP.add("osgi.framework"); //$NON-NLS-1$
-		PROPERTIES_TO_SKIP.add("osgi.bundles"); //$NON-NLS-1$
-		PROPERTIES_TO_SKIP.add("eof"); //$NON-NLS-1$
-		PROPERTIES_TO_SKIP.add("eclipse.p2.profile"); //$NON-NLS-1$
-		PROPERTIES_TO_SKIP.add("eclipse.p2.data.area"); //$NON-NLS-1$
-		PROPERTIES_TO_SKIP.add("org.eclipse.update.reconcile"); //$NON-NLS-1$
-		PROPERTIES_TO_SKIP.add("org.eclipse.equinox.simpleconfigurator.configUrl"); //$NON-NLS-1$
-
-		PROGRAM_ARGS_TO_SKIP = new HashSet<String>();
-		PROGRAM_ARGS_TO_SKIP.add("--launcher.library"); //$NON-NLS-1$
-		PROGRAM_ARGS_TO_SKIP.add("-startup"); //$NON-NLS-1$
-		PROGRAM_ARGS_TO_SKIP.add("-configuration"); //$NON-NLS-1$
-	}
-
-	public static String getAbstractCUCapabilityNamespace(String id, String type, String flavor, String configSpec) {
-		return flavor + id;
-	}
-
-	public static String getAbstractCUCapabilityId(String id, String type, String flavor, String configSpec) {
-		return id + "." + type; //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the id of the top level IU published by this action for the given id and flavor.
-	 * @param id the id of the application being published
-	 * @param flavor the flavor being published
-	 * @return the if for ius published by this action
-	 */
-	public static String computeIUId(String id, String flavor) {
-		return flavor + id + ".configuration"; //$NON-NLS-1$
-	}
-
-	public ConfigCUsAction(IPublisherInfo info, String flavor, String id, Version version) {
-		this.flavor = flavor;
-		this.id = id;
-		this.version = version;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		IPublisherResult innerResult = new PublisherResult();
-		this.outerResults = results;
-		this.info = publisherInfo;
-		// we have N platforms, generate a CU for each
-		// TODO try and find common properties across platforms
-		String[] configSpecs = publisherInfo.getConfigurations();
-		for (int i = 0; i < configSpecs.length; i++) {
-			if (monitor.isCanceled())
-				return Status.CANCEL_STATUS;
-			String configSpec = configSpecs[i];
-			Collection<IConfigAdvice> configAdvice = publisherInfo.getAdvice(configSpec, false, id, version, IConfigAdvice.class);
-			BundleInfo[] bundles = fillInBundles(configAdvice, results);
-			publishBundleCUs(publisherInfo, bundles, configSpec, innerResult);
-			publishConfigIUs(configAdvice, innerResult, configSpec);
-			Collection<IExecutableAdvice> launchingAdvice = publisherInfo.getAdvice(configSpec, false, id, version, IExecutableAdvice.class);
-			publishIniIUs(launchingAdvice, innerResult, configSpec);
-		}
-		// merge the IUs  into the final result as non-roots and create a parent IU that captures them all
-		results.merge(innerResult, IPublisherResult.MERGE_ALL_NON_ROOT);
-		publishTopLevelConfigurationIU(innerResult.getIUs(null, IPublisherResult.ROOT), results);
-		return Status.OK_STATUS;
-	}
-
-	private void publishTopLevelConfigurationIU(Collection<? extends IVersionedId> children, IPublisherResult result) {
-		InstallableUnitDescription descriptor = createParentIU(children, computeIUId(id, flavor), version);
-		descriptor.setSingleton(true);
-		IInstallableUnit rootIU = MetadataFactory.createInstallableUnit(descriptor);
-		if (rootIU == null)
-			return;
-		result.addIU(rootIU, IPublisherResult.ROOT);
-	}
-
-	// there seem to be cases where the bundle infos are not filled in with symbolic name and version.
-	// fill in the missing data.
-	private BundleInfo[] fillInBundles(Collection<IConfigAdvice> configAdvice, IPublisherResult results) {
-		ArrayList<BundleInfo> result = new ArrayList<BundleInfo>();
-		for (IConfigAdvice advice : configAdvice) {
-
-			int defaultStart = BundleInfo.NO_LEVEL;
-			Map<String, String> adviceProperties = advice.getProperties();
-			if (adviceProperties.containsKey(DEFAULT_START_LEVEL)) {
-				try {
-					defaultStart = Integer.parseInt(adviceProperties.get(DEFAULT_START_LEVEL));
-				} catch (NumberFormatException e) {
-					//don't know default
-				}
-			}
-
-			BundleInfo[] bundles = advice.getBundles();
-			for (int i = 0; i < bundles.length; i++) {
-				BundleInfo bundleInfo = bundles[i];
-
-				if (bundleInfo.getStartLevel() != BundleInfo.NO_LEVEL && bundleInfo.getStartLevel() == defaultStart) {
-					bundleInfo.setStartLevel(BundleInfo.NO_LEVEL);
-				}
-
-				// prime the result with the current info.  This will be replaced if there is more info...
-				if ((bundleInfo.getSymbolicName() != null && bundleInfo.getVersion() != null) || bundleInfo.getLocation() == null)
-					result.add(bundles[i]);
-				else {
-					try {
-						File location = new File(bundleInfo.getLocation());
-						Dictionary<String, String> manifest = BundlesAction.loadManifest(location);
-						if (manifest == null)
-							continue;
-						GeneratorBundleInfo newInfo = new GeneratorBundleInfo(bundleInfo);
-						ManifestElement[] element = ManifestElement.parseHeader("dummy-bsn", manifest.get(Constants.BUNDLE_SYMBOLICNAME)); //$NON-NLS-1$
-						newInfo.setSymbolicName(element[0].getValue());
-						newInfo.setVersion(manifest.get(Constants.BUNDLE_VERSION));
-						result.add(newInfo);
-					} catch (BundleException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-				}
-			}
-		}
-		return result.toArray(new BundleInfo[result.size()]);
-	}
-
-	/**
-	 * Publish the IUs that capture the eclipse.ini information such as vmargs and program args, etc
-	 */
-	private void publishIniIUs(Collection<IExecutableAdvice> launchingAdvice, IPublisherResult results, String configSpec) {
-		if (launchingAdvice.isEmpty())
-			return;
-
-		String configureData = ""; //$NON-NLS-1$
-		String unconfigureData = ""; //$NON-NLS-1$
-		if (!launchingAdvice.isEmpty()) {
-			String[] dataStrings = getLauncherConfigStrings(launchingAdvice);
-			configureData += dataStrings[0];
-			unconfigureData += dataStrings[1];
-		}
-		// if there is nothing to configure or unconfigure, then don't even bother generating this IU
-		if (configureData.length() == 0 && unconfigureData.length() == 0)
-			return;
-
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		touchpointData.put("configure", configureData); //$NON-NLS-1$
-		touchpointData.put("unconfigure", unconfigureData); //$NON-NLS-1$
-		IInstallableUnit cu = createCU(id, version, "ini", flavor, configSpec, touchpointData); //$NON-NLS-1$
-		results.addIU(cu, IPublisherResult.ROOT);
-	}
-
-	/**
-	 * Publish the IUs that capture the config.ini information such as properties etc
-	 */
-	private void publishConfigIUs(Collection<IConfigAdvice> configAdvice, IPublisherResult results, String configSpec) {
-		if (configAdvice.isEmpty())
-			return;
-
-		String configureData = ""; //$NON-NLS-1$
-		String unconfigureData = ""; //$NON-NLS-1$
-		if (!configAdvice.isEmpty()) {
-			String[] dataStrings = getConfigurationStrings(configAdvice);
-			configureData += dataStrings[0];
-			unconfigureData += dataStrings[1];
-		}
-		// if there is nothing to configure or unconfigure, then don't even bother generating this IU
-		if (configureData.length() == 0 && unconfigureData.length() == 0)
-			return;
-
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		touchpointData.put("configure", configureData); //$NON-NLS-1$
-		touchpointData.put("unconfigure", unconfigureData); //$NON-NLS-1$
-		IInstallableUnit cu = createCU(id, version, "config", flavor, configSpec, touchpointData); //$NON-NLS-1$
-		results.addIU(cu, IPublisherResult.ROOT);
-	}
-
-	/**
-	 * Create a CU whose id is flavor+id.type.configspec with the given version. 
-	 * The resultant IU has the self capability and an abstract capabilty in the flavor+id namespace
-	 * with the name id.type and the given version.  This allows others to create an abstract
-	 * dependency on having one of these things around but not having to list out the configs.
-	 */
-	private IInstallableUnit createCU(String cuId, Version cuVersion, String cuType, String cuFlavor, String configSpec, Map<String, String> touchpointData) {
-		InstallableUnitDescription cu = new InstallableUnitDescription();
-		String resultId = createCUIdString(cuId, cuType, cuFlavor, configSpec);
-		cu.setId(resultId);
-		cu.setVersion(cuVersion);
-		cu.setFilter(createFilterSpec(configSpec));
-		IProvidedCapability selfCapability = PublisherHelper.createSelfCapability(resultId, cuVersion);
-		String namespace = getAbstractCUCapabilityNamespace(cuId, cuType, cuFlavor, configSpec);
-		String abstractId = getAbstractCUCapabilityId(cuId, cuType, cuFlavor, configSpec);
-		IProvidedCapability abstractCapability = MetadataFactory.createProvidedCapability(namespace, abstractId, cuVersion);
-		cu.setCapabilities(new IProvidedCapability[] {selfCapability, abstractCapability});
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		cu.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
-		return MetadataFactory.createInstallableUnit(cu);
-	}
-
-	protected String[] getConfigurationStrings(Collection<IConfigAdvice> configAdvice) {
-		String configurationData = ""; //$NON-NLS-1$
-		String unconfigurationData = ""; //$NON-NLS-1$
-		Set<String> properties = new HashSet<String>();
-		for (IConfigAdvice advice : configAdvice) {
-			for (Entry<String, String> aProperty : advice.getProperties().entrySet()) {
-				String key = aProperty.getKey();
-				if (shouldPublishProperty(key) && !properties.contains(key)) {
-					properties.add(key);
-					Map<String, String> parameters = new LinkedHashMap<String, String>();
-					parameters.put("propName", key); //$NON-NLS-1$
-					parameters.put("propValue", aProperty.getValue()); //$NON-NLS-1$
-					configurationData += TouchpointInstruction.encodeAction("setProgramProperty", parameters); //$NON-NLS-1$
-					parameters.put("propValue", ""); //$NON-NLS-1$//$NON-NLS-2$
-					unconfigurationData += TouchpointInstruction.encodeAction("setProgramProperty", parameters); //$NON-NLS-1$
-				}
-			}
-		}
-		return new String[] {configurationData, unconfigurationData};
-	}
-
-	private boolean shouldPublishProperty(String key) {
-		return !PROPERTIES_TO_SKIP.contains(key);
-	}
-
-	private boolean shouldPublishJvmArg(String key) {
-		return true;
-	}
-
-	private boolean shouldPublishProgramArg(String key) {
-		return !PROGRAM_ARGS_TO_SKIP.contains(key);
-	}
-
-	protected String[] getLauncherConfigStrings(Collection<IExecutableAdvice> launchingAdvice) {
-		String configurationData = ""; //$NON-NLS-1$
-		String unconfigurationData = ""; //$NON-NLS-1$
-
-		Map<String, String> touchpointParameters = new LinkedHashMap<String, String>();
-		Set<String> jvmSet = new HashSet<String>();
-		Set<String> programSet = new HashSet<String>();
-		for (IExecutableAdvice advice : launchingAdvice) {
-			String[] jvmArgs = advice.getVMArguments();
-			for (int i = 0; i < jvmArgs.length; i++)
-				if (shouldPublishJvmArg(jvmArgs[i]) && !jvmSet.contains(jvmArgs[i])) {
-					jvmSet.add(jvmArgs[i]);
-					touchpointParameters.clear();
-					touchpointParameters.put("jvmArg", jvmArgs[i]); //$NON-NLS-1$
-					configurationData += TouchpointInstruction.encodeAction("addJvmArg", touchpointParameters); //$NON-NLS-1$
-					unconfigurationData += TouchpointInstruction.encodeAction("removeJvmArg", touchpointParameters); //$NON-NLS-1$
-				}
-			String[] programArgs = advice.getProgramArguments();
-			for (int i = 0; i < programArgs.length; i++)
-				if (shouldPublishProgramArg(programArgs[i]) && !programSet.contains(programArgs[i])) {
-					if (programArgs[i].startsWith("-")) //$NON-NLS-1$
-						programSet.add(programArgs[i]);
-					touchpointParameters.clear();
-					touchpointParameters.put("programArg", programArgs[i]); //$NON-NLS-1$
-					configurationData += TouchpointInstruction.encodeAction("addProgramArg", touchpointParameters); //$NON-NLS-1$
-					unconfigurationData += TouchpointInstruction.encodeAction("removeProgramArg", touchpointParameters); //$NON-NLS-1$
-				} else if (i + 1 < programArgs.length && !programArgs[i + 1].startsWith("-")) { //$NON-NLS-1$
-					// if we are not publishing then skip over the following arg as it is assumed to be a parameter
-					// to this command line arg.
-					i++;
-				}
-		}
-		return new String[] {configurationData, unconfigurationData};
-	}
-
-	/**
-	 * Publish the CUs related to the given set of bundles.  This generally covers the start-level and 
-	 * and whether or not the bundle is to be started.
-	 */
-	protected void publishBundleCUs(IPublisherInfo publisherInfo, BundleInfo[] bundles, String configSpec, IPublisherResult result) {
-		if (bundles == null)
-			return;
-
-		String cuIdPrefix = ""; //$NON-NLS-1$
-		IMatchExpression<IInstallableUnit> filter = null;
-		if (configSpec != null) {
-			cuIdPrefix = createIdString(configSpec);
-			filter = createFilterSpec(configSpec);
-		}
-
-		for (int i = 0; i < bundles.length; i++) {
-			GeneratorBundleInfo bundle = createGeneratorBundleInfo(bundles[i], result);
-			if (bundle == null)
-				continue;
-
-			IInstallableUnit iu = bundle.getIU();
-
-			// If there is no host, or the filters don't match, skip this one.
-			if (iu == null || !filterMatches(iu.getFilter(), configSpec))
-				continue;
-
-			// TODO need to factor this out into its own action
-			if (bundle.getSymbolicName().equals(ORG_ECLIPSE_UPDATE_CONFIGURATOR)) {
-				bundle.setStartLevel(BundleInfo.NO_LEVEL);
-				bundle.setMarkedAsStarted(false);
-				bundle.setSpecialConfigCommands("setProgramProperty(propName:org.eclipse.update.reconcile, propValue:false);"); //$NON-NLS-1$
-				bundle.setSpecialUnconfigCommands("setProgramProperty(propName:org.eclipse.update.reconcile, propValue:);"); //$NON-NLS-1$
-			} else if (bundle.getStartLevel() == BundleInfo.NO_LEVEL && !bundle.isMarkedAsStarted()) {
-				// this bundle does not require any particular configuration, the plug-in default IU will handle installing it
-				continue;
-			}
-
-			IInstallableUnit cu = null;
-			if (this.version != null && !this.version.equals(Version.emptyVersion))
-				cu = BundlesAction.createBundleConfigurationUnit(bundle.getSymbolicName(), this.version, false, bundle, flavor + cuIdPrefix, filter);
-			else
-				cu = BundlesAction.createBundleConfigurationUnit(bundle.getSymbolicName(), Version.parseVersion(bundle.getVersion()), false, bundle, flavor + cuIdPrefix, filter);
-
-			if (cu != null) {
-				// Product Query will run against the repo, make sure these CUs are in before then
-				// TODO review the aggressive addition to the metadata repo.  perhaps the query can query the result as well.
-				//				IMetadataRepository metadataRepository = info.getMetadataRepository();
-				//				if (metadataRepository != null) {
-				//					metadataRepository.addInstallableUnits(new IInstallableUnit[] {cu});
-				//				}
-				result.addIU(cu, IPublisherResult.ROOT);
-			}
-		}
-	}
-
-	protected GeneratorBundleInfo createGeneratorBundleInfo(BundleInfo bundleInfo, IPublisherResult result) {
-		String name = bundleInfo.getSymbolicName();
-
-		//query for a matching IU
-		IInstallableUnit iu = queryForIU(outerResults, name, Version.create(bundleInfo.getVersion()));
-		if (iu != null) {
-			if (iu.getVersion() == null)
-				bundleInfo.setVersion("0.0.0"); //$NON-NLS-1$
-			else
-				bundleInfo.setVersion(iu.getVersion().toString());
-			GeneratorBundleInfo newInfo = new GeneratorBundleInfo(bundleInfo);
-			newInfo.setIU(iu);
-			return newInfo;
-		}
-
-		if (bundleInfo.getLocation() != null || bundleInfo.getVersion() != null)
-			return new GeneratorBundleInfo(bundleInfo);
-		//harder: try id_version
-		int i = name.indexOf('_');
-		while (i > -1) {
-			try {
-				Version bundleVersion = Version.parseVersion(name.substring(i));
-				bundleInfo.setSymbolicName(name.substring(0, i));
-				bundleInfo.setVersion(bundleVersion.toString());
-				return new GeneratorBundleInfo(bundleInfo);
-			} catch (IllegalArgumentException e) {
-				// the '_' found was probably part of the symbolic id
-				i = name.indexOf('_', i);
-			}
-		}
-
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/DefaultCUsAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/DefaultCUsAction.java
deleted file mode 100644
index 30734f3..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/DefaultCUsAction.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-
-/**
- * Publish IUs that install/configure the standard things like bundles, features and source bundles
- */
-public class DefaultCUsAction extends AbstractPublisherAction {
-
-	private String flavor;
-	private int startLevel;
-	private boolean start;
-
-	public DefaultCUsAction(IPublisherInfo info, String flavor, int startLevel, boolean start) {
-		this.flavor = flavor;
-		this.startLevel = startLevel;
-		this.start = start;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		setPublisherInfo(publisherInfo);
-		generateDefaultConfigIU(results);
-		return Status.OK_STATUS;
-	}
-
-	protected void generateDefaultConfigIU(IPublisherResult result) {
-		//		TODO this is a bit of a hack.  We need to have the default IU fragment generated with code that configures
-		//		and unconfigures.  The Generator should be decoupled from any particular provider but it is not clear
-		//		that we should add the create* methods to IGeneratorInfo...
-		//		MockBundleDescription bd1 = new MockBundleDescription("defaultConfigure");
-		//		MockBundleDescription bd2 = new MockBundleDescription("defaultUnconfigure");
-		result.addIU(BundlesAction.createDefaultBundleConfigurationUnit(createDefaultConfigurationBundleInfo(), createDefaultUnconfigurationBundleInfo(), flavor), IPublisherResult.ROOT);
-		result.addIU(PublisherHelper.createDefaultFeatureConfigurationUnit(flavor), IPublisherResult.ROOT);
-		result.addIU(PublisherHelper.createDefaultConfigurationUnitForSourceBundles(flavor), IPublisherResult.ROOT);
-	}
-
-	protected GeneratorBundleInfo createDefaultConfigurationBundleInfo() {
-		GeneratorBundleInfo result = new GeneratorBundleInfo();
-		result.setSymbolicName("defaultConfigure"); //$NON-NLS-1$
-		result.setVersion("1.0.0"); //$NON-NLS-1$
-		result.setStartLevel(startLevel);
-		result.setMarkedAsStarted(start);
-		// These should just be in the install section now
-		//		result.setSpecialConfigCommands("installBundle(bundle:${artifact});");
-		return result;
-	}
-
-	protected GeneratorBundleInfo createDefaultUnconfigurationBundleInfo() {
-		GeneratorBundleInfo result = new GeneratorBundleInfo();
-		result.setSymbolicName("defaultUnconfigure"); //$NON-NLS-1$
-		result.setVersion("1.0.0"); //$NON-NLS-1$
-		// These should just be in the uninstall section now
-		//		result.setSpecialConfigCommands("uninstallBundle(bundle:${artifact});");
-		return result;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EclipseInstallAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EclipseInstallAction.java
deleted file mode 100644
index 184714a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EclipseInstallAction.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.ExecutablesDescriptor;
-import org.eclipse.equinox.p2.metadata.IVersionedId;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.*;
-
-public class EclipseInstallAction extends AbstractPublisherAction {
-	protected String source;
-	protected String id;
-	protected Version version;
-	protected String name;
-	protected String executableName;
-	protected String flavor;
-	protected IVersionedId[] topLevel;
-	protected String[] nonRootFiles;
-	protected boolean start = false;
-
-	protected EclipseInstallAction() {
-		//hidden
-	}
-
-	public EclipseInstallAction(String source, String id, Version version, String name, String executableName, String flavor, IVersionedId[] topLevel, String[] nonRootFiles, boolean start) {
-		this.source = source;
-		this.id = id;
-		this.version = version;
-		this.name = name == null ? id : name;
-		this.executableName = executableName == null ? "eclipse" : executableName; //$NON-NLS-1$
-		this.flavor = flavor;
-		this.topLevel = topLevel;
-		this.nonRootFiles = nonRootFiles;
-		this.start = start;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		monitor = SubMonitor.convert(monitor);
-		this.info = publisherInfo;
-		IPublisherAction[] actions = createActions();
-		MultiStatus finalStatus = new MultiStatus(EclipseInstallAction.class.getName(), 0, "publishing result", null); //$NON-NLS-1$
-		for (int i = 0; i < actions.length; i++) {
-			if (monitor.isCanceled())
-				return Status.CANCEL_STATUS;
-			finalStatus.merge(actions[i].perform(publisherInfo, results, monitor));
-		}
-		if (!finalStatus.isOK())
-			return finalStatus;
-		return Status.OK_STATUS;
-	}
-
-	protected IPublisherAction[] createActions() {
-		createAdvice();
-		ArrayList<IPublisherAction> actions = new ArrayList<IPublisherAction>();
-		// create an action that just publishes the raw bundles and features
-		IPublisherAction action = new MergeResultsAction(new IPublisherAction[] {createFeaturesAction(), createBundlesAction()}, IPublisherResult.MERGE_ALL_ROOT);
-		actions.add(action);
-		actions.add(createApplicationExecutableAction(info.getConfigurations()));
-		actions.add(createRootFilesAction());
-		actions.addAll(createAccumulateConfigDataActions(info.getConfigurations()));
-		actions.add(createJREAction());
-		actions.add(createConfigCUsAction());
-		actions.add(createDefaultCUsAction());
-		actions.add(createRootIUAction());
-		return actions.toArray(new IPublisherAction[actions.size()]);
-	}
-
-	private void createAdvice() {
-		createRootFilesAdvice();
-		createRootAdvice();
-	}
-
-	protected void createRootAdvice() {
-		if (topLevel != null)
-			info.addAdvice(new RootIUAdvice(getTopLevel()));
-		info.addAdvice(new RootIUResultFilterAdvice(null));
-	}
-
-	protected IPublisherAction createDefaultCUsAction() {
-		return new DefaultCUsAction(info, flavor, 4, start);
-	}
-
-	protected IPublisherAction createRootIUAction() {
-		return new RootIUAction(id, version, name);
-	}
-
-	protected Collection<IVersionedId> getTopLevel() {
-		return Arrays.asList(topLevel);
-	}
-
-	protected IPublisherAction createJREAction() {
-		return new JREAction((File) null);
-	}
-
-	protected IPublisherAction createApplicationExecutableAction(String[] configSpecs) {
-		return new ApplicationLauncherAction(id, version, flavor, executableName, getExecutablesLocation(), configSpecs);
-	}
-
-	protected Collection<IPublisherAction> createAccumulateConfigDataActions(String[] configs) {
-		File configuration = new File(source, "configuration/config.ini"); //$NON-NLS-1$
-		if (!configuration.exists())
-			configuration = null;
-
-		Collection<IPublisherAction> result = new ArrayList<IPublisherAction>(configs.length);
-		for (int i = 0; i < configs.length; i++) {
-			String configSpec = configs[i];
-			String os = AbstractPublisherAction.parseConfigSpec(configSpec)[1];
-			File executable = ExecutablesDescriptor.findExecutable(os, computeExecutableLocation(configSpec), "eclipse"); //$NON-NLS-1$
-			if (!executable.exists())
-				executable = null;
-			IPublisherAction action = new AccumulateConfigDataAction(info, configSpec, configuration, executable);
-			result.add(action);
-		}
-
-		return result;
-	}
-
-	protected IPublisherAction createConfigCUsAction() {
-		return new ConfigCUsAction(info, flavor, id, version);
-	}
-
-	protected IPublisherAction createFeaturesAction() {
-		return new FeaturesAction(new File[] {new File(source, "features")}); //$NON-NLS-1$
-	}
-
-	protected Collection<IPublisherAction> createExecutablesActions(String[] configSpecs) {
-		Collection<IPublisherAction> result = new ArrayList<IPublisherAction>(configSpecs.length);
-		for (int i = 0; i < configSpecs.length; i++) {
-			ExecutablesDescriptor executables = computeExecutables(configSpecs[i]);
-			IPublisherAction action = new EquinoxExecutableAction(executables, configSpecs[i], id, version, flavor);
-			result.add(action);
-		}
-		return result;
-	}
-
-	protected IPublisherAction createRootFilesAction() {
-		return new RootFilesAction(info, id, version, flavor);
-	}
-
-	protected void createRootFilesAdvice() {
-		File[] baseExclusions = computeRootFileExclusions();
-		if (baseExclusions != null)
-			info.addAdvice(new RootFilesAdvice(null, null, baseExclusions, null));
-		String[] configs = info.getConfigurations();
-		for (int i = 0; i < configs.length; i++)
-			info.addAdvice(computeRootFileAdvice(configs[i]));
-	}
-
-	protected IPublisherAdvice computeRootFileAdvice(String configSpec) {
-		File root = computeRootFileRoot(configSpec);
-		File[] inclusions = computeRootFileInclusions(configSpec);
-		File[] exclusions = computeRootFileExclusions(configSpec);
-		return new RootFilesAdvice(root, inclusions, exclusions, configSpec);
-	}
-
-	protected File[] computeRootFileExclusions(String configSpec) {
-		ExecutablesDescriptor executables = computeExecutables(configSpec);
-		File[] files = executables.getFiles();
-		File[] result = new File[files.length + 1];
-		System.arraycopy(files, 0, result, 0, files.length);
-		result[files.length] = executables.getIniLocation();
-		return result;
-	}
-
-	protected File[] computeRootFileExclusions() {
-		if (nonRootFiles == null || nonRootFiles.length == 0)
-			return null;
-		ArrayList<File> result = new ArrayList<File>();
-		for (int i = 0; i < nonRootFiles.length; i++) {
-			String filename = nonRootFiles[i];
-			File file = new File(filename);
-			if (file.isAbsolute())
-				result.add(file);
-			else
-				result.add(new File(source, filename));
-		}
-		return result.toArray(new File[result.size()]);
-	}
-
-	protected ExecutablesDescriptor computeExecutables(String configSpec) {
-		String os = AbstractPublisherAction.parseConfigSpec(configSpec)[1];
-		// TODO here we should not assume that the executable is called "eclipse"
-		return ExecutablesDescriptor.createDescriptor(os, "eclipse", computeExecutableLocation(configSpec)); //$NON-NLS-1$
-	}
-
-	protected File computeRootFileRoot(String configSpec) {
-		return new File(source);
-	}
-
-	protected File[] computeRootFileInclusions(String configSpec) {
-		return new File[] {new File(source)};
-	}
-
-	protected File computeExecutableLocation(String configSpec) {
-		return new File(source);
-	}
-
-	protected File getExecutablesLocation() {
-		return new File(source);
-	}
-
-	protected IPublisherAction createBundlesAction() {
-		// TODO need to add in the simple configorator and reconciler bundle descriptions.
-		// TODO bundles action needs to take bundleDescriptions directly rather than just files.
-		return new BundlesAction(new File[] {new File(source, "plugins")}); //$NON-NLS-1$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxExecutableAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxExecutableAction.java
deleted file mode 100644
index fe3e0b7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxExecutableAction.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.BrandingIron;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.ExecutablesDescriptor;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
-import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-import org.eclipse.osgi.service.environment.Constants;
-
-/**
- * Given the description of an executable, this action publishes optionally 
- * non-destructively brands the executable, publishes the resultant artifacts
- * and publishes the required IUs to identify the branded executable, configure
- * the executable and set it up as the launcher for a profile.
- * <p>
- * This action works on one platform configuration only.
- * <p>
- * This action consults the following types of advice:
- * </ul>
- * <li>{@link IBrandingAdvice}</li>
- * </ul>
- */
-public class EquinoxExecutableAction extends AbstractPublisherAction {
-	private static String TYPE = "executable"; //$NON-NLS-1$
-
-	protected String configSpec;
-	protected String idBase;
-	protected Version version;
-	protected ExecutablesDescriptor executables;
-	protected String flavor;
-
-	protected EquinoxExecutableAction() {
-		//hidden
-	}
-
-	public EquinoxExecutableAction(ExecutablesDescriptor executables, String configSpec, String idBase, Version version, String flavor) {
-		this.executables = executables;
-		this.configSpec = configSpec;
-		this.idBase = idBase == null ? "org.eclipse" : idBase; //$NON-NLS-1$
-		this.version = version;
-		this.flavor = flavor;
-	}
-
-	public IStatus perform(IPublisherInfo publisherinfo, IPublisherResult result, IProgressMonitor monitor) {
-		setPublisherInfo(publisherinfo);
-		ExecutablesDescriptor brandedExecutables = brandExecutables(executables);
-		try {
-			if (publishExecutableIU(brandedExecutables, result))
-				publishExecutableCU(brandedExecutables, result);
-			publishExecutableSetter(brandedExecutables, result);
-		} finally {
-			if (brandedExecutables.isTemporary())
-				FileUtils.deleteAll(brandedExecutables.getLocation());
-		}
-		return Status.OK_STATUS;
-	}
-
-	/**
-	 * Publishes the IUs that cause the executable to be actually set as the launcher for 
-	 * the profile
-	 */
-	private void publishExecutableSetter(ExecutablesDescriptor brandedExecutables, IPublisherResult result) {
-		InstallableUnitDescription iud = new MetadataFactory.InstallableUnitDescription();
-		String executableName = brandedExecutables.getExecutableName();
-		String id = getExecutableId() + '.' + executableName;
-		iud.setId(id);
-		iud.setVersion(version);
-		iud.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
-		iud.setCapabilities(new IProvidedCapability[] {createSelfCapability(id, version)});
-		iud.setFilter(createFilterSpec(configSpec));
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		touchpointData.put("configure", "setLauncherName(name:" + executableName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		touchpointData.put("unconfigure", "setLauncherName()"); //$NON-NLS-1$ //$NON-NLS-2$
-		iud.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		result.addIU(MetadataFactory.createInstallableUnit(iud), IPublisherResult.ROOT);
-	}
-
-	/**
-	 * Publishes IUs and CUs for the files that make up the launcher for a given
-	 * ws/os/arch combination.
-	 */
-	protected boolean publishExecutableIU(ExecutablesDescriptor execDescriptor, IPublisherResult result) {
-		String[] config = parseConfigSpec(configSpec);
-		if (execDescriptor.getFiles().length == 0 && (config.length == 0 || CONFIG_ANY.equalsIgnoreCase(config[0]))) {
-			return false; //no cu required
-		}
-		boolean publishCU = true;
-
-		// Create the IU for the executable
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		String id = getExecutableId();
-		iu.setId(id);
-		iu.setVersion(version);
-		IMatchExpression<IInstallableUnit> filter = createFilterSpec(configSpec);
-		iu.setFilter(filter);
-		iu.setSingleton(true);
-		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_NATIVE);
-		String namespace = ConfigCUsAction.getAbstractCUCapabilityNamespace(idBase, TYPE, flavor, configSpec);
-		String capabilityId = ConfigCUsAction.getAbstractCUCapabilityId(idBase, TYPE, flavor, configSpec);
-		IProvidedCapability executableCapability = MetadataFactory.createProvidedCapability(namespace, capabilityId, version);
-		IProvidedCapability selfCapability = createSelfCapability(id, version);
-		iu.setCapabilities(new IProvidedCapability[] {selfCapability, executableCapability});
-
-		//Create the artifact descriptor.  we have several files so no path on disk
-		if (execDescriptor.getFiles().length == 0) {
-			publishCU = false;
-		} else {
-			IArtifactKey key = PublisherHelper.createBinaryArtifactKey(id, version);
-			iu.setArtifacts(new IArtifactKey[] {key});
-			IArtifactDescriptor descriptor = PublisherHelper.createArtifactDescriptor(info.getArtifactRepository(), key, null);
-			publishArtifact(descriptor, execDescriptor.getFiles(), null, info, createRootPrefixComputer(execDescriptor.getLocation()));
-			if (execDescriptor.isTemporary())
-				FileUtils.deleteAll(execDescriptor.getLocation());
-		}
-		// setup a requirement between the executable and the launcher fragment that has the shared library
-		if (config.length > 0 && !CONFIG_ANY.equalsIgnoreCase(config[0])) {
-			String ws = config[0];
-			String os = config[1];
-			String arch = config[2];
-			String launcherFragment = EquinoxLauncherCUAction.ORG_ECLIPSE_EQUINOX_LAUNCHER + '.' + ws + '.' + os;
-			if (!(Constants.OS_MACOSX.equals(os) && !Constants.ARCH_X86_64.equals(arch)))
-				launcherFragment += '.' + arch;
-			iu.setRequirements(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, launcherFragment, VersionRange.emptyRange, filter, false, false)});
-		}
-		result.addIU(MetadataFactory.createInstallableUnit(iu), IPublisherResult.ROOT);
-		return publishCU;
-	}
-
-	private String getExecutableId() {
-		return createCUIdString(idBase, TYPE, "", configSpec); //$NON-NLS-1$
-	}
-
-	// Create the CU that installs (e.g., unzips) the executable
-	private void publishExecutableCU(ExecutablesDescriptor execDescriptor, IPublisherResult result) {
-		InstallableUnitFragmentDescription cu = new InstallableUnitFragmentDescription();
-		String id = createCUIdString(idBase, TYPE, flavor, configSpec);
-		cu.setId(id);
-		cu.setVersion(version);
-		cu.setFilter(createFilterSpec(configSpec));
-		String executableId = getExecutableId();
-		cu.setHost(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, executableId, new VersionRange(version, true, version, true), null, false, false)});
-		cu.setProperty(InstallableUnitDescription.PROP_TYPE_FRAGMENT, Boolean.TRUE.toString());
-		//TODO bug 218890, would like the fragment to provide the launcher capability as well, but can't right now.
-		cu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(id, version)});
-		cu.setTouchpointType(PublisherHelper.TOUCHPOINT_NATIVE);
-		String[] config = parseConfigSpec(configSpec);
-		String os = config[1];
-		Map<String, String> touchpointData = computeInstallActions(execDescriptor, os);
-		cu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		IInstallableUnit unit = MetadataFactory.createInstallableUnit(cu);
-		result.addIU(unit, IPublisherResult.ROOT);
-	}
-
-	private Map<String, String> computeInstallActions(ExecutablesDescriptor execDescriptor, String os) {
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		String configurationData = "unzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		if (Constants.OS_MACOSX.equals(os)) {
-			String execName = execDescriptor.getExecutableName();
-			configurationData += " chmod(targetDir:${installFolder}/" + execName + ".app/Contents/MacOS/, targetFile:" + execName + ", permissions:755);"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		} else if (!Constants.OS_WIN32.equals(os)) {
-			// We are on linux/unix.  by default set all of the files to be executable.
-			File[] fileList = execDescriptor.getFiles();
-			for (int i = 0; i < fileList.length; i++)
-				configurationData += " chmod(targetDir:${installFolder}, targetFile:" + fileList[i].getName() + ", permissions:755);"; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		touchpointData.put("install", configurationData); //$NON-NLS-1$
-		String unConfigurationData = "cleanupzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		touchpointData.put("uninstall", unConfigurationData); //$NON-NLS-1$
-		return touchpointData;
-	}
-
-	/**
-	 * Brands a copy of the given executable descriptor with the information in the 
-	 * current product definition.  The files described in the descriptor are also copied
-	 * to a temporary location to avoid destructive modification.
-	 * 
-	 * @param descriptor the executable descriptor to brand.
-	 * @return the new descriptor
-	 */
-	protected ExecutablesDescriptor brandExecutables(ExecutablesDescriptor descriptor) {
-		ExecutablesDescriptor result = new ExecutablesDescriptor(descriptor);
-		result.makeTemporaryCopy();
-		IBrandingAdvice advice = getBrandingAdvice();
-		if (advice == null)
-			partialBrandExecutables(result);
-		else
-			fullBrandExecutables(result, advice);
-		return result;
-	}
-
-	private IBrandingAdvice getBrandingAdvice() {
-		// there is expected to only be one branding advice for a given configspec so
-		// just return the first one we find.
-		Collection<IBrandingAdvice> advice = info.getAdvice(configSpec, true, null, null, IBrandingAdvice.class);
-		for (Iterator<IBrandingAdvice> i = advice.iterator(); i.hasNext();)
-			return i.next();
-		return null;
-	}
-
-	protected void fullBrandExecutables(ExecutablesDescriptor descriptor, IBrandingAdvice advice) {
-		BrandingIron iron = new BrandingIron();
-		iron.setIcons(advice.getIcons());
-		String name = advice.getExecutableName();
-		if (name == null)
-			name = "eclipse"; //$NON-NLS-1$
-		iron.setName(name);
-		iron.setOS(advice.getOS());
-		iron.setRoot(descriptor.getLocation().getAbsolutePath());
-		try {
-			iron.brand();
-			descriptor.setExecutableName(name, true);
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-
-	protected void partialBrandExecutables(ExecutablesDescriptor descriptor) {
-		File[] list = descriptor.getFiles();
-		for (int i = 0; i < list.length; i++)
-			mungeExecutableFileName(list[i], descriptor);
-		descriptor.setExecutableName("eclipse", true); //$NON-NLS-1$
-	}
-
-	// TODO This method is a temporary hack to rename the launcher.exe files
-	// to eclipse.exe (or "launcher" to "eclipse"). Eventually we will either hand-craft
-	// metadata/artifacts for launchers, or alter the delta pack to contain eclipse-branded
-	// launchers.
-	private void mungeExecutableFileName(File file, ExecutablesDescriptor descriptor) {
-		if (file.getName().equals("launcher")) { //$NON-NLS-1$
-			File newFile = new File(file.getParentFile(), "eclipse"); //$NON-NLS-1$
-			file.renameTo(newFile);
-			descriptor.replace(file, newFile);
-		} else if (file.getName().equals("launcher.exe")) { //$NON-NLS-1$
-			File newFile = new File(file.getParentFile(), "eclipse.exe"); //$NON-NLS-1$
-			file.renameTo(newFile);
-			descriptor.replace(file, newFile);
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxLauncherCUAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxLauncherCUAction.java
deleted file mode 100644
index abcafe7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/EquinoxLauncherCUAction.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.util.Collection;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.frameworkadmin.utils.Utils;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.IVersionAdvice;
-import org.eclipse.osgi.service.environment.Constants;
-
-/**
- * Create CUs for all Equinox launcher related IUs for the given set of configurations
- * such that the launcher is configured as the startup code and the fragments
- * are configured as the launcher.library.  
- * <p>
- * This action expects to have find the versions of the launcher and launcher fragments
- * via IVersionAdvice in the supplied info object.
- * </p>
- */
-public class EquinoxLauncherCUAction extends AbstractPublisherAction {
-
-	public static final String ORG_ECLIPSE_EQUINOX_LAUNCHER = "org.eclipse.equinox.launcher"; //$NON-NLS-1$
-
-	private String flavor;
-	private String[] configSpecs;
-
-	public EquinoxLauncherCUAction(String flavor, String[] configSpecs) {
-		this.flavor = flavor;
-		this.configSpecs = configSpecs;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		setPublisherInfo(publisherInfo);
-		publishCU(ORG_ECLIPSE_EQUINOX_LAUNCHER, null, results);
-		publishLauncherFragmentCUs(results);
-		return Status.OK_STATUS;
-	}
-
-	/**
-	 * For each of the configurations we are publishing, create a launcher fragment
-	 * CU if there is version advice for the fragment.
-	 */
-	private void publishLauncherFragmentCUs(IPublisherResult results) {
-		String id = null;
-		for (int i = 0; i < configSpecs.length; i++) {
-			String configSpec = configSpecs[i];
-			String[] specs = Utils.getTokens(configSpec, "."); //$NON-NLS-1$
-			if (specs.length > 0 && !AbstractPublisherAction.CONFIG_ANY.equalsIgnoreCase(specs[0])) {
-				if (specs.length > 2 && Constants.OS_MACOSX.equals(specs[1]) && !Constants.ARCH_X86_64.equals(specs[2])) {
-					//launcher fragment for mac only has arch for x86_64
-					id = ORG_ECLIPSE_EQUINOX_LAUNCHER + '.' + specs[0] + '.' + specs[1];
-				} else {
-					id = ORG_ECLIPSE_EQUINOX_LAUNCHER + '.' + configSpec;
-				}
-				publishCU(id, configSpec, results);
-			}
-		}
-	}
-
-	/**
-	 * Publish a CU for the IU of the given id in the given config spec.  If the IU is the 
-	 * launcher bundle iu then set it up as the startup JAR.  If it is a launcher fragment then 
-	 * configure it in as the launcher.library for this configuration.
-	 */
-	private void publishCU(String id, String configSpec, IPublisherResult results) {
-		Collection<IVersionAdvice> advice = info.getAdvice(configSpec, true, id, null, IVersionAdvice.class);
-		for (IVersionAdvice versionSpec : advice) {
-			Version version = versionSpec.getVersion(IInstallableUnit.NAMESPACE_IU_ID, id);
-			if (version == null)
-				continue;
-			GeneratorBundleInfo bundle = new GeneratorBundleInfo();
-			bundle.setSymbolicName(id);
-			bundle.setVersion(version.toString());
-			if (id.equals(ORG_ECLIPSE_EQUINOX_LAUNCHER)) {
-				bundle.setSpecialConfigCommands("addProgramArg(programArg:-startup);addProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-				bundle.setSpecialUnconfigCommands("removeProgramArg(programArg:-startup);removeProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-			} else {
-				bundle.setSpecialConfigCommands("addProgramArg(programArg:--launcher.library);addProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-				bundle.setSpecialUnconfigCommands("removeProgramArg(programArg:--launcher.library);removeProgramArg(programArg:@artifact);"); //$NON-NLS-1$
-			}
-			IMatchExpression<IInstallableUnit> filter = configSpec == null ? null : createFilterSpec(configSpec);
-			IInstallableUnit cu = BundlesAction.createBundleConfigurationUnit(id, version, false, bundle, flavor, filter);
-			if (cu != null)
-				results.addIU(cu, IPublisherResult.ROOT);
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/Feature.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/Feature.java
deleted file mode 100644
index b57f0ea..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/Feature.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.util.*;
-
-/**
- * 
- * Feature information
- */
-public class Feature {
-
-	private final String id;
-	private String version;
-	private String label;
-	private String image;
-	private String pluginId;
-	private boolean primary = false;
-	private boolean exclusive = false;
-	private String application;
-	private String colocationAffinity;
-
-	private URLEntry description;
-	private URLEntry license;
-	private URLEntry copyright;
-
-	private String installHandler;
-	private String installHandlerURL;
-	private String installHandlerLibrary;
-
-	private URLEntry updateSite;
-	private ArrayList<URLEntry> discoverySites;
-
-	private ArrayList<FeatureEntry> entries;
-	private String providerName;
-	private String os;
-	private String ws;
-	private String arch;
-	private String nl;
-
-	private String location;
-
-	private Map<Locale, Map<String, String>> localizations;
-
-	public Feature(String id, String version) {
-		if (id == null)
-			throw new IllegalArgumentException();
-		this.id = id;
-		this.version = version;
-	}
-
-	public void addDiscoverySite(String siteLabel, String url) {
-		if (siteLabel == null && url == null)
-			return;
-
-		if (this.discoverySites == null)
-			this.discoverySites = new ArrayList<URLEntry>();
-
-		URLEntry entry = new URLEntry(url, siteLabel);
-		this.discoverySites.add(entry);
-	}
-
-	public void addEntry(FeatureEntry plugin) {
-		if (entries == null)
-			entries = new ArrayList<FeatureEntry>();
-		entries.add(plugin);
-	}
-
-	public String getApplication() {
-		return application;
-	}
-
-	public String getArch() {
-		return arch;
-	}
-
-	public String getColocationAffinity() {
-		return colocationAffinity;
-	}
-
-	public String getCopyright() {
-		if (copyright != null)
-			return copyright.getAnnotation();
-		return null;
-	}
-
-	public String getCopyrightURL() {
-		if (copyright != null)
-			return copyright.getURL();
-		return null;
-	}
-
-	public String getDescription() {
-		if (description != null)
-			return description.getAnnotation();
-		return null;
-	}
-
-	public String getDescriptionURL() {
-		if (description != null)
-			return description.getURL();
-		return null;
-	}
-
-	public URLEntry[] getDiscoverySites() {
-		if (discoverySites == null)
-			return new URLEntry[0];
-		return discoverySites.toArray(new URLEntry[discoverySites.size()]);
-	}
-
-	public FeatureEntry[] getEntries() {
-		if (entries == null)
-			return new FeatureEntry[0];
-		return entries.toArray(new FeatureEntry[entries.size()]);
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public String getImage() {
-		return image;
-	}
-
-	public String getInstallHandler() {
-		return installHandler;
-	}
-
-	public String getInstallHandlerLibrary() {
-		return installHandlerLibrary;
-	}
-
-	public String getInstallHandlerURL() {
-		return installHandlerURL;
-	}
-
-	public String getLabel() {
-		return label;
-	}
-
-	public String getLicense() {
-		if (license != null)
-			return license.getAnnotation();
-		return null;
-	}
-
-	public String getLicenseURL() {
-		if (license != null)
-			return license.getURL();
-		return null;
-	}
-
-	public Map<Locale, Map<String, String>> getLocalizations() {
-		return this.localizations;
-	}
-
-	public String getLocation() {
-		return this.location;
-	}
-
-	public String getNL() {
-		return nl;
-	}
-
-	public String getOS() {
-		return os;
-	}
-
-	public String getPlugin() {
-		return pluginId;
-	}
-
-	public String getProviderName() {
-		return providerName;
-	}
-
-	public URLEntry getUpdateSite() {
-		return updateSite;
-	}
-
-	public String getVersion() {
-		return version;
-	}
-
-	public String getWS() {
-		return ws;
-	}
-
-	public boolean isExclusive() {
-		return exclusive;
-	}
-
-	public boolean isPrimary() {
-		return primary;
-	}
-
-	public void setApplication(String application) {
-		this.application = application;
-	}
-
-	public void setColocationAffinity(String colocationAffinity) {
-		this.colocationAffinity = colocationAffinity;
-	}
-
-	public void setCopyright(String copyright) {
-		if (this.copyright == null)
-			this.copyright = new URLEntry();
-		this.copyright.setAnnotation(copyright);
-	}
-
-	public void setCopyrightURL(String copyrightURL) {
-		if (this.copyright == null)
-			this.copyright = new URLEntry();
-		this.copyright.setURL(copyrightURL);
-	}
-
-	public void setDescription(String description) {
-		if (this.description == null)
-			this.description = new URLEntry();
-		this.description.setAnnotation(description);
-	}
-
-	public void setDescriptionURL(String descriptionURL) {
-		if (this.description == null)
-			this.description = new URLEntry();
-		this.description.setURL(descriptionURL);
-	}
-
-	public void setEnvironment(String os, String ws, String arch, String nl) {
-		this.os = os;
-		this.ws = ws;
-		this.arch = arch;
-		this.nl = nl;
-	}
-
-	public void setExclusive(boolean exclusive) {
-		this.exclusive = exclusive;
-	}
-
-	public void setImage(String image) {
-		this.image = image;
-	}
-
-	public void setInstallHandler(String installHandler) {
-		this.installHandler = installHandler;
-	}
-
-	public void setInstallHandlerLibrary(String installHandlerLibrary) {
-		this.installHandlerLibrary = installHandlerLibrary;
-	}
-
-	public void setInstallHandlerURL(String installHandlerURL) {
-		this.installHandlerURL = installHandlerURL;
-	}
-
-	public void setLabel(String label) {
-		this.label = label;
-	}
-
-	public void setLicense(String license) {
-		if (this.license == null)
-			this.license = new URLEntry();
-		this.license.setAnnotation(license);
-	}
-
-	public void setLicenseURL(String licenseURL) {
-		if (this.license == null)
-			this.license = new URLEntry();
-		this.license.setURL(licenseURL);
-	}
-
-	public void setLocalizations(Map<Locale, Map<String, String>> localizations) {
-		this.localizations = localizations;
-	}
-
-	public void setLocation(String location) {
-		this.location = location;
-	}
-
-	public void setPlugin(String pluginId) {
-		this.pluginId = pluginId;
-	}
-
-	public void setPrimary(boolean primary) {
-		this.primary = primary;
-	}
-
-	public void setProviderName(String value) {
-		providerName = value;
-	}
-
-	public void setUpdateSiteLabel(String updateSiteLabel) {
-		if (this.updateSite == null)
-			this.updateSite = new URLEntry();
-		this.updateSite.setAnnotation(updateSiteLabel);
-	}
-
-	public void setUpdateSiteURL(String updateSiteURL) {
-		if (this.updateSite == null)
-			this.updateSite = new URLEntry();
-		this.updateSite.setURL(updateSiteURL);
-	}
-
-	public void setURL(String value) {
-		//
-	}
-
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-	/**
-	 * For debugging purposes only.
-	 */
-	public String toString() {
-		return "Feature " + id + " version: " + version; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeatureEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeatureEntry.java
deleted file mode 100644
index 53c8656..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeatureEntry.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.equinox.p2.metadata.Version;
-
-/**
- */
-public class FeatureEntry {
-	private final String id;
-	private String version;
-	private String url;
-	private String os;
-	private String ws;
-	private String arch;
-	private String nl;
-	private String match;
-	private final boolean isPlugin;
-	private boolean isFragment = false;
-	private boolean isRequires = false;
-	private boolean unpack = true;
-	private boolean optional = false;
-	private boolean isPatch = false;
-	private String filter;
-
-	public static FeatureEntry createRequires(String id, String version, String match, String filter, boolean isPlugin) {
-		FeatureEntry result = new FeatureEntry(id, version, isPlugin);
-		result.match = match;
-		result.isRequires = true;
-		// for requires we don't care what the form is so leave it as false (JAR'd)
-		result.unpack = false;
-		if (filter != null)
-			result.setFilter(filter);
-		return result;
-	}
-
-	public FeatureEntry(String id, String version, boolean isPlugin) {
-		this.id = id;
-		this.version = Version.parseVersion(version).toString();
-		this.isPlugin = isPlugin;
-	}
-
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		final FeatureEntry other = (FeatureEntry) obj;
-		if (id == null) {
-			if (other.id != null)
-				return false;
-		} else if (!id.equals(other.id))
-			return false;
-		if (version == null) {
-			if (other.version != null)
-				return false;
-		} else if (!version.equals(other.version))
-			return false;
-
-		if (isPlugin() != other.isPlugin())
-			return false;
-		if (isRequires() != other.isRequires())
-			return false;
-		return true;
-	}
-
-	public String getArch() {
-		return arch;
-	}
-
-	public String getFilter() {
-		return filter;
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public String getMatch() {
-		return match;
-	}
-
-	public String getNL() {
-		return nl;
-	}
-
-	public String getOS() {
-		return os;
-	}
-
-	public String getURL() {
-		return url;
-	}
-
-	public String getVersion() {
-		return version;
-	}
-
-	public String getWS() {
-		return ws;
-	}
-
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((id == null) ? 0 : id.hashCode());
-		result = prime * result + ((version == null) ? 0 : version.hashCode());
-		return result;
-	}
-
-	public boolean isFragment() {
-		return isFragment;
-	}
-
-	public boolean isOptional() {
-		return optional;
-	}
-
-	public boolean isPlugin() {
-		return isPlugin;
-	}
-
-	public boolean isRequires() {
-		return isRequires;
-	}
-
-	public boolean isUnpack() {
-		return unpack;
-	}
-
-	public void setEnvironment(String os, String ws, String arch, String nl) {
-		this.os = os;
-		this.ws = ws;
-		this.arch = arch;
-		this.nl = nl;
-	}
-
-	public void setFilter(String filter) {
-		this.filter = filter;
-
-	}
-
-	public void setFragment(boolean value) {
-		isFragment = value;
-	}
-
-	public void setOptional(boolean value) {
-		optional = value;
-	}
-
-	public void setUnpack(boolean value) {
-		unpack = value;
-	}
-
-	public void setURL(String value) {
-		url = value;
-	}
-
-	public void setVersion(String value) {
-		version = Version.parseVersion(value).toString();
-	}
-
-	public String toString() {
-		StringBuffer result = new StringBuffer();
-		result.append(isRequires ? "Requires: " : ""); //$NON-NLS-1$ //$NON-NLS-2$
-		result.append(isPlugin ? "Plugin: " : "Feature: "); //$NON-NLS-1$ //$NON-NLS-2$
-		result.append(id != null ? id.toString() : ""); //$NON-NLS-1$
-		result.append(version != null ? " " + version.toString() : ""); //$NON-NLS-1$ //$NON-NLS-2$
-		return result.toString();
-	}
-
-	public boolean isPatch() {
-		return isPatch;
-	}
-
-	public void setPatch(boolean patch) {
-		this.isPatch = patch;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java
deleted file mode 100644
index 72f059c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAction.java
+++ /dev/null
@@ -1,654 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-import java.util.Map.Entry;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.core.helpers.*;
-import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
-import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
-import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
-import org.eclipse.equinox.internal.p2.publisher.*;
-import org.eclipse.equinox.internal.p2.publisher.Messages;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.FeatureParser;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitPatchDescription;
-import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.IFeatureRootAdvice;
-import org.eclipse.equinox.p2.repository.IRepository;
-import org.eclipse.equinox.p2.repository.IRepositoryReference;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
-import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
-import org.eclipse.equinox.p2.repository.spi.RepositoryReference;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Publish IUs for all of the features in the given set of locations.  The locations can
- * be actual locations of the features or folders of features.
- */
-public class FeaturesAction extends AbstractPublisherAction {
-	public static final String INSTALL_FEATURES_FILTER = "(org.eclipse.update.install.features=true)"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_APPLICATION_PROP = "org.eclipse.update.feature.application"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_PLUGIN_PROP = "org.eclipse.update.feature.plugin"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_EXCLUSIVE_PROP = "org.eclipse.update.feature.exclusive"; //$NON-NLS-1$
-	private static final String UPDATE_FEATURE_PRIMARY_PROP = "org.eclipse.update.feature.primary"; //$NON-NLS-1$
-
-	protected Feature[] features;
-	private File[] locations;
-
-	public static IArtifactKey createFeatureArtifactKey(String id, String version) {
-		return new ArtifactKey(PublisherHelper.ECLIPSE_FEATURE_CLASSIFIER, id, Version.parseVersion(version));
-	}
-
-	public static IInstallableUnit createFeatureJarIU(Feature feature, IPublisherInfo info) {
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		String id = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/false);
-		iu.setId(id);
-		Version version = Version.parseVersion(feature.getVersion());
-		iu.setVersion(version);
-
-		// set properties for other feature attributes
-		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
-		if (feature.getDescription() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
-		if (feature.getDescriptionURL() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
-		if (feature.getProviderName() != null)
-			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
-		if (feature.getLicense() != null)
-			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
-		if (feature.getCopyright() != null)
-			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
-		if (feature.getApplication() != null)
-			iu.setProperty(UPDATE_FEATURE_APPLICATION_PROP, feature.getApplication());
-		if (feature.getPlugin() != null)
-			iu.setProperty(UPDATE_FEATURE_PLUGIN_PROP, feature.getPlugin());
-		if (feature.isExclusive())
-			iu.setProperty(UPDATE_FEATURE_EXCLUSIVE_PROP, Boolean.TRUE.toString());
-		if (feature.isPrimary())
-			iu.setProperty(UPDATE_FEATURE_PRIMARY_PROP, Boolean.TRUE.toString());
-
-		// The required capabilities are not specified at this level because we don't want the feature jar to be attractive to install.
-		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_OSGI);
-		iu.setFilter(INSTALL_FEATURES_FILTER);
-		iu.setSingleton(true);
-
-		if (feature.getInstallHandler() != null && feature.getInstallHandler().trim().length() > 0) {
-			String installHandlerProperty = "handler=" + feature.getInstallHandler(); //$NON-NLS-1$
-
-			if (feature.getInstallHandlerLibrary() != null)
-				installHandlerProperty += ", library=" + feature.getInstallHandlerLibrary(); //$NON-NLS-1$
-
-			if (feature.getInstallHandlerURL() != null)
-				installHandlerProperty += ", url=" + feature.getInstallHandlerURL(); //$NON-NLS-1$
-
-			iu.setProperty(PublisherHelper.ECLIPSE_INSTALL_HANDLER_PROP, installHandlerProperty);
-		}
-
-		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
-		providedCapabilities.add(PublisherHelper.createSelfCapability(id, version));
-		providedCapabilities.add(PublisherHelper.FEATURE_CAPABILITY);
-		providedCapabilities.add(MetadataFactory.createProvidedCapability(PublisherHelper.CAPABILITY_NS_UPDATE_FEATURE, feature.getId(), version));
-
-		iu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(id, version), PublisherHelper.FEATURE_CAPABILITY, MetadataFactory.createProvidedCapability(PublisherHelper.CAPABILITY_NS_UPDATE_FEATURE, feature.getId(), version)});
-		iu.setArtifacts(new IArtifactKey[] {createFeatureArtifactKey(feature.getId(), version.toString())});
-
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		touchpointData.put("zipped", "true"); //$NON-NLS-1$ //$NON-NLS-2$
-		iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-
-		Map<Locale, Map<String, String>> localizations = feature.getLocalizations();
-		if (localizations != null) {
-			for (Entry<Locale, Map<String, String>> locEntry : localizations.entrySet()) {
-				Locale locale = locEntry.getKey();
-				Map<String, String> translatedStrings = locEntry.getValue();
-				for (Entry<String, String> entry : translatedStrings.entrySet()) {
-					iu.setProperty(locale.toString() + '.' + entry.getKey(), entry.getValue());
-				}
-				providedCapabilities.add(PublisherHelper.makeTranslationCapability(id, locale));
-			}
-		}
-
-		processInstallableUnitPropertiesAdvice(iu, info);
-		return MetadataFactory.createInstallableUnit(iu);
-	}
-
-	private static String getTransformedId(String original, boolean isPlugin, boolean isGroup) {
-		return (isPlugin ? original : original + (isGroup ? ".feature.group" : ".feature.jar")); //$NON-NLS-1$//$NON-NLS-2$
-	}
-
-	/**
-	 * Returns a URI corresponding to the given URL in string form, or null
-	 * if a well formed URI could not be created.
-	 */
-	private static URI toURIOrNull(String url) {
-		if (url == null)
-			return null;
-		try {
-			return URIUtil.fromString(url);
-		} catch (URISyntaxException e) {
-			return null;
-		}
-	}
-
-	public FeaturesAction(Feature[] features) {
-		this.features = features;
-	}
-
-	public FeaturesAction(File[] locations) {
-		this.locations = locations;
-	}
-
-	/**
-	 * Looks for advice in a p2.inf file inside the feature location.
-	 */
-	private void createAdviceFileAdvice(Feature feature, IPublisherInfo publisherInfo) {
-		//assume p2.inf is co-located with feature.xml
-		String location = feature.getLocation();
-		if (location != null) {
-			String groupId = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/true);
-			AdviceFileAdvice advice = new AdviceFileAdvice(groupId, Version.parseVersion(feature.getVersion()), new Path(location), new Path("p2.inf")); //$NON-NLS-1$
-			if (advice.containsAdvice())
-				publisherInfo.addAdvice(advice);
-		}
-	}
-
-	/**
-	 * Gather any advice we can from the given feature.  In particular, it may have
-	 * information about the shape of the bundles it includes.  The discovered advice is
-	 * added to the given result.
-	 * @param feature the feature to process
-	 * @param publisherInfo the publishing info to update
-	 */
-	private void createBundleShapeAdvice(Feature feature, IPublisherInfo publisherInfo) {
-		FeatureEntry entries[] = feature.getEntries();
-		for (int i = 0; i < entries.length; i++) {
-			FeatureEntry entry = entries[i];
-			if (entry.isUnpack() && entry.isPlugin() && !entry.isRequires())
-				publisherInfo.addAdvice(new BundleShapeAdvice(entry.getId(), Version.parseVersion(entry.getVersion()), IBundleShapeAdvice.DIR));
-		}
-	}
-
-	protected IInstallableUnit createFeatureRootFileIU(String featureId, String featureVersion, File location, FileSetDescriptor descriptor) {
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		iu.setSingleton(true);
-		String id = featureId + '_' + descriptor.getKey();
-		iu.setId(id);
-		Version version = Version.parseVersion(featureVersion);
-		iu.setVersion(version);
-		iu.setCapabilities(new IProvidedCapability[] {PublisherHelper.createSelfCapability(id, version)});
-		iu.setTouchpointType(PublisherHelper.TOUCHPOINT_NATIVE);
-		String configSpec = descriptor.getConfigSpec();
-		if (configSpec != null && configSpec.length() > 0)
-			iu.setFilter(createFilterSpec(configSpec));
-
-		Map<String, String> touchpointData = new HashMap<String, String>(2);
-		String configurationData = "unzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		touchpointData.put("install", configurationData); //$NON-NLS-1$
-		String unConfigurationData = "cleanupzip(source:@artifact, target:${installFolder});"; //$NON-NLS-1$
-		touchpointData.put("uninstall", unConfigurationData); //$NON-NLS-1$
-		iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-
-		// prime the IU with an artifact key that will correspond to the zipped up root files.
-		IArtifactKey key = new ArtifactKey(PublisherHelper.BINARY_ARTIFACT_CLASSIFIER, iu.getId(), iu.getVersion());
-		iu.setArtifacts(new IArtifactKey[] {key});
-		setupLinks(iu, descriptor);
-		setupPermissions(iu, descriptor);
-
-		IInstallableUnit iuResult = MetadataFactory.createInstallableUnit(iu);
-		// need to return both the iu and any files.
-		return iuResult;
-	}
-
-	protected IInstallableUnit createGroupIU(Feature feature, List<IInstallableUnit> childIUs, IPublisherInfo publisherInfo) {
-		if (isPatch(feature))
-			return createPatchIU(feature, childIUs, publisherInfo);
-		InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
-		String id = getGroupId(feature.getId());
-		iu.setId(id);
-		Version version = PublisherHelper.fromOSGiVersion(new org.osgi.framework.Version(feature.getVersion()));
-		iu.setVersion(version);
-
-		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
-		if (feature.getDescription() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
-		if (feature.getDescriptionURL() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
-		if (feature.getProviderName() != null)
-			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
-		if (feature.getLicense() != null)
-			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
-		if (feature.getCopyright() != null)
-			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
-		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(id, BundlesAction.computeUpdateRange(new org.osgi.framework.Version(feature.getVersion())), IUpdateDescriptor.NORMAL, null));
-
-		FeatureEntry entries[] = feature.getEntries();
-		List<IRequirement> required = new ArrayList<IRequirement>(entries.length + (childIUs == null ? 0 : childIUs.size()));
-		for (int i = 0; i < entries.length; i++) {
-			VersionRange range = getVersionRange(entries[i]);
-			String requiredId = getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true);
-			required.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, requiredId, range, getFilter(entries[i]), entries[i].isOptional(), false));
-		}
-
-		// link in all the children (if any) as requirements.
-		// TODO consider if these should be linked as exact version numbers.  Should be ok but may be brittle.
-		if (childIUs != null) {
-			for (int i = 0; i < childIUs.size(); i++) {
-				IInstallableUnit child = childIUs.get(i);
-				IMatchExpression<IInstallableUnit> filter = child.getFilter();
-				required.add(MetadataFactory.createRequirement(PublisherHelper.IU_NAMESPACE, child.getId(), new VersionRange(child.getVersion(), true, child.getVersion(), true), filter, false, false));
-			}
-		}
-		iu.setRequirements(required.toArray(new IRequirement[required.size()]));
-		iu.setTouchpointType(ITouchpointType.NONE);
-		iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString());
-		processTouchpointAdvice(iu, null, publisherInfo);
-		processInstallableUnitPropertiesAdvice(iu, publisherInfo);
-
-		//Create a fake entry to reuse the logic to create the filters
-		FeatureEntry entry = new FeatureEntry("fake", "0.0.0", false); //$NON-NLS-1$ //$NON-NLS-2$
-		entry.setEnvironment(feature.getOS(), feature.getWS(), feature.getArch(), feature.getNL());
-		iu.setFilter(getFilter(entry));
-
-		// Create set of provided capabilities
-		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
-		providedCapabilities.add(createSelfCapability(id, version));
-
-		Map<Locale, Map<String, String>> localizations = feature.getLocalizations();
-		if (localizations != null) {
-			for (Entry<Locale, Map<String, String>> locEntry : localizations.entrySet()) {
-				Locale locale = locEntry.getKey();
-				Map<String, String> translatedStrings = locEntry.getValue();
-				for (Entry<String, String> e : translatedStrings.entrySet()) {
-					iu.setProperty(locale.toString() + '.' + e.getKey(), e.getValue());
-				}
-				providedCapabilities.add(PublisherHelper.makeTranslationCapability(id, locale));
-			}
-		}
-
-		iu.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-		processCapabilityAdvice(iu, publisherInfo);
-		return MetadataFactory.createInstallableUnit(iu);
-	}
-
-	protected String getGroupId(String featureId) {
-		return getTransformedId(featureId, /*isPlugin*/false, /*isGroup*/true);
-	}
-
-	private IInstallableUnit createPatchIU(Feature feature, List<IInstallableUnit> childIUs, IPublisherInfo publisherInfo) {
-		InstallableUnitPatchDescription iu = new MetadataFactory.InstallableUnitPatchDescription();
-		String id = getTransformedId(feature.getId(), /*isPlugin*/false, /*isGroup*/true);
-		iu.setId(id);
-		Version version = Version.parseVersion(feature.getVersion());
-		iu.setVersion(version);
-		iu.setProperty(IInstallableUnit.PROP_NAME, feature.getLabel());
-		if (feature.getDescription() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION, feature.getDescription());
-		if (feature.getDescriptionURL() != null)
-			iu.setProperty(IInstallableUnit.PROP_DESCRIPTION_URL, feature.getDescriptionURL());
-		if (feature.getProviderName() != null)
-			iu.setProperty(IInstallableUnit.PROP_PROVIDER, feature.getProviderName());
-		if (feature.getLicense() != null)
-			iu.setLicenses(new ILicense[] {MetadataFactory.createLicense(toURIOrNull(feature.getLicenseURL()), feature.getLicense())});
-		if (feature.getCopyright() != null)
-			iu.setCopyright(MetadataFactory.createCopyright(toURIOrNull(feature.getCopyrightURL()), feature.getCopyright()));
-		iu.setUpdateDescriptor(MetadataFactory.createUpdateDescriptor(id, BundlesAction.computeUpdateRange(new org.osgi.framework.Version(feature.getVersion())), IUpdateDescriptor.NORMAL, null));
-
-		FeatureEntry entries[] = feature.getEntries();
-		ArrayList<IRequirement> applicabilityScope = new ArrayList<IRequirement>();
-		ArrayList<IRequirement> patchRequirements = new ArrayList<IRequirement>();
-		ArrayList<IRequirementChange> requirementChanges = new ArrayList<IRequirementChange>();
-		for (int i = 0; i < entries.length; i++) {
-			VersionRange range = getVersionRange(entries[i]);
-			IRequirement req = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), range, getFilter(entries[i]), entries[i].isOptional(), false);
-			if (entries[i].isRequires()) {
-				applicabilityScope.add(req);
-				if (applicabilityScope.size() == 1) {
-					iu.setLifeCycle(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), range, null, false, false, false));
-				}
-				continue;
-			}
-			if (entries[i].isPlugin()) {
-				IRequirement from = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, getTransformedId(entries[i].getId(), entries[i].isPlugin(), /*isGroup*/true), VersionRange.emptyRange, getFilter(entries[i]), entries[i].isOptional(), false);
-				requirementChanges.add(MetadataFactory.createRequirementChange(from, req));
-				continue;
-			}
-			patchRequirements.add(req);
-		}
-
-		//Always add a requirement on the IU containing the feature jar
-		if (childIUs != null) {
-			for (int i = 0; i < childIUs.size(); i++) {
-				IInstallableUnit child = childIUs.get(i);
-				patchRequirements.add(MetadataFactory.createRequirement(PublisherHelper.IU_NAMESPACE, child.getId(), new VersionRange(child.getVersion(), true, child.getVersion(), true), child.getFilter(), false, false));
-			}
-		}
-		iu.setRequirements(patchRequirements.toArray(new IRequirement[patchRequirements.size()]));
-		iu.setApplicabilityScope(new IRequirement[][] {applicabilityScope.toArray(new IRequirement[applicabilityScope.size()])});
-		iu.setRequirementChanges(requirementChanges.toArray(new IRequirementChange[requirementChanges.size()]));
-
-		iu.setTouchpointType(ITouchpointType.NONE);
-		processTouchpointAdvice(iu, null, publisherInfo);
-		processInstallableUnitPropertiesAdvice(iu, publisherInfo);
-		iu.setProperty(InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString());
-		iu.setProperty(InstallableUnitDescription.PROP_TYPE_PATCH, Boolean.TRUE.toString());
-		// TODO: shouldn't the filter for the group be constructed from os, ws, arch, nl
-		// 		 of the feature?
-		// iu.setFilter(filter);
-
-		// Create set of provided capabilities
-		ArrayList<IProvidedCapability> providedCapabilities = new ArrayList<IProvidedCapability>();
-		providedCapabilities.add(createSelfCapability(id, version));
-
-		Map<Locale, Map<String, String>> localizations = feature.getLocalizations();
-		if (localizations != null) {
-			for (Entry<Locale, Map<String, String>> locEntry : localizations.entrySet()) {
-				Locale locale = locEntry.getKey();
-				Map<String, String> translatedStrings = locEntry.getValue();
-				for (Entry<String, String> e : translatedStrings.entrySet()) {
-					iu.setProperty(locale.toString() + '.' + e.getKey(), e.getValue());
-				}
-				providedCapabilities.add(PublisherHelper.makeTranslationCapability(id, locale));
-			}
-		}
-
-		iu.setCapabilities(providedCapabilities.toArray(new IProvidedCapability[providedCapabilities.size()]));
-		processCapabilityAdvice(iu, publisherInfo);
-		return MetadataFactory.createInstallableUnitPatch(iu);
-	}
-
-	private File[] expandLocations(File[] list) {
-		ArrayList<File> result = new ArrayList<File>();
-		expandLocations(list, result);
-		return result.toArray(new File[result.size()]);
-	}
-
-	private void expandLocations(File[] list, ArrayList<File> result) {
-		if (list == null)
-			return;
-		for (int i = 0; i < list.length; i++) {
-			File location = list[i];
-			if (location.isDirectory()) {
-				// if the location is itself a feature, just add it.  Otherwise r down
-				if (new File(location, "feature.xml").exists()) //$NON-NLS-1$
-					result.add(location);
-				else
-					expandLocations(location.listFiles(), result);
-			} else {
-				result.add(location);
-			}
-		}
-	}
-
-	protected void generateFeatureIUs(Feature[] featureList, IPublisherResult result) {
-		// Build Feature IUs, and add them to any corresponding categories
-		for (int i = 0; i < featureList.length; i++) {
-			Feature feature = featureList[i];
-			//first gather any advice that might help us
-			createBundleShapeAdvice(feature, info);
-			createAdviceFileAdvice(feature, info);
-
-			ArrayList<IInstallableUnit> childIUs = new ArrayList<IInstallableUnit>();
-
-			IInstallableUnit featureJarIU = queryForIU(result, getTransformedId(feature.getId(), false, false), Version.parseVersion(feature.getVersion()));
-			if (featureJarIU == null)
-				featureJarIU = generateFeatureJarIU(feature, info);
-
-			if (featureJarIU != null) {
-				publishFeatureArtifacts(feature, featureJarIU, info);
-				result.addIU(featureJarIU, IPublisherResult.NON_ROOT);
-				childIUs.add(featureJarIU);
-			}
-
-			IInstallableUnit groupIU = queryForIU(result, getGroupId(feature.getId()), Version.parseVersion(feature.getVersion()));
-			if (groupIU == null) {
-				childIUs.addAll(generateRootFileIUs(feature, result, info));
-				groupIU = createGroupIU(feature, childIUs, info);
-			}
-			if (groupIU != null) {
-				result.addIU(groupIU, IPublisherResult.ROOT);
-				InstallableUnitDescription[] others = processAdditionalInstallableUnitsAdvice(groupIU, info);
-				for (int iuIndex = 0; others != null && iuIndex < others.length; iuIndex++) {
-					result.addIU(MetadataFactory.createInstallableUnit(others[iuIndex]), IPublisherResult.ROOT);
-				}
-			}
-			generateSiteReferences(feature, result, info);
-		}
-	}
-
-	protected IInstallableUnit generateFeatureJarIU(Feature feature, IPublisherInfo publisherInfo) {
-		return createFeatureJarIU(feature, publisherInfo);
-	}
-
-	protected ArrayList<IInstallableUnit> generateRootFileIUs(Feature feature, IPublisherResult result, IPublisherInfo publisherInfo) {
-		ArrayList<IInstallableUnit> ius = new ArrayList<IInstallableUnit>();
-
-		Collection<IFeatureRootAdvice> collection = publisherInfo.getAdvice(null, false, feature.getId(), Version.parseVersion(feature.getVersion()), IFeatureRootAdvice.class);
-		if (collection.size() == 0)
-			return ius;
-
-		IFeatureRootAdvice advice = collection.iterator().next();
-		String[] configs = advice.getConfigurations();
-		for (int i = 0; i < configs.length; i++) {
-			String config = configs[i];
-
-			FileSetDescriptor descriptor = advice.getDescriptor(config);
-			if (descriptor != null && descriptor.size() > 0) {
-				IInstallableUnit iu = createFeatureRootFileIU(feature.getId(), feature.getVersion(), null, descriptor);
-
-				File[] files = descriptor.getFiles();
-				IArtifactKey artifactKey = iu.getArtifacts().iterator().next();
-				ArtifactDescriptor artifactDescriptor = new ArtifactDescriptor(artifactKey);
-				IPathComputer computer = advice.getRootFileComputer(config);
-				if (computer == null)
-					computer = FileUtils.createDynamicPathComputer(1);
-				publishArtifact(artifactDescriptor, files, null, publisherInfo, computer);
-
-				result.addIU(iu, IPublisherResult.NON_ROOT);
-				ius.add(iu);
-			}
-		}
-
-		return ius;
-	}
-
-	/**
-	 * Generates and publishes a reference to an update site location
-	 * @param location The update site location
-	 * @param nickname The update site label
-	 * @param featureId the identifier of the feature where the error occurred, or null
-	 * @param collector The list into which the references are added
-	 */
-	private void generateSiteReference(String location, String nickname, String featureId, List<IRepositoryReference> collector) {
-		if (location == null) {
-			String message = featureId == null ? NLS.bind(Messages.exception_invalidSiteReference, location) : NLS.bind(Messages.exception_invalidSiteReferenceInFeature, location, featureId);
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message));
-			return;
-		}
-
-		try {
-			URI associateLocation = new URI(location);
-			collector.add(new RepositoryReference(associateLocation, nickname, IRepository.TYPE_METADATA, IRepository.NONE));
-			collector.add(new RepositoryReference(associateLocation, nickname, IRepository.TYPE_ARTIFACT, IRepository.NONE));
-		} catch (URISyntaxException e) {
-			String message = featureId == null ? NLS.bind(Messages.exception_invalidSiteReference, location) : NLS.bind(Messages.exception_invalidSiteReferenceInFeature, location, featureId);
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, message));
-		}
-	}
-
-	protected void generateSiteReferences(Feature feature, IPublisherResult result, IPublisherInfo publisherInfo) {
-		//publish feature site references
-		URLEntry updateURL = feature.getUpdateSite();
-		//don't enable feature update sites by default since this results in too many
-		//extra sites being loaded and searched (Bug 234177)
-		List<IRepositoryReference> collector = new ArrayList<IRepositoryReference>();
-		if (updateURL != null)
-			generateSiteReference(updateURL.getURL(), updateURL.getAnnotation(), feature.getId(), collector);
-		URLEntry[] discoverySites = feature.getDiscoverySites();
-		for (int i = 0; i < discoverySites.length; i++)
-			generateSiteReference(discoverySites[i].getURL(), discoverySites[i].getAnnotation(), feature.getId(), collector);
-		if (!collector.isEmpty())
-			publisherInfo.getMetadataRepository().addReferences(collector);
-	}
-
-	protected Feature[] getFeatures(File[] featureLocations) {
-		ArrayList<Feature> result = new ArrayList<Feature>(featureLocations.length);
-		for (int i = 0; i < featureLocations.length; i++) {
-			Feature feature = new FeatureParser().parse(featureLocations[i]);
-			if (feature != null) {
-				feature.setLocation(featureLocations[i].getAbsolutePath());
-				result.add(feature);
-			}
-		}
-		return result.toArray(new Feature[result.size()]);
-	}
-
-	private IMatchExpression<IInstallableUnit> getFilter(FeatureEntry entry) {
-		StringBuffer result = new StringBuffer();
-		result.append("(&"); //$NON-NLS-1$
-		if (entry.getFilter() != null)
-			result.append(entry.getFilter());
-		expandFilter(entry.getOS(), "osgi.os", result); //$NON-NLS-1$
-		expandFilter(entry.getWS(), "osgi.ws", result); //$NON-NLS-1$
-		expandFilter(entry.getArch(), "osgi.arch", result);//$NON-NLS-1$
-		expandFilter(entry.getNL(), "osgi.nl", result); //$NON-NLS-1$
-		if (result.length() == 2)
-			return null;
-		result.append(')');
-		return InstallableUnit.parseFilter(result.toString());
-	}
-
-	private void expandFilter(String filter, String osgiFilterValue, StringBuffer result) {
-		if (filter != null && filter.length() != 0) {
-			StringTokenizer token = new StringTokenizer(filter, ","); //$NON-NLS-1$
-			if (token.countTokens() == 1)
-				result.append('(' + osgiFilterValue + '=' + filter + ')');
-			else {
-				result.append("(|"); //$NON-NLS-1$
-				while (token.hasMoreElements()) {
-					result.append('(' + osgiFilterValue + '=' + token.nextToken() + ')');
-				}
-				result.append(')');
-			}
-		}
-	}
-
-	protected VersionRange getVersionRange(FeatureEntry entry) {
-		String versionSpec = entry.getVersion();
-		if (versionSpec == null)
-			return VersionRange.emptyRange;
-		Version version = Version.parseVersion(versionSpec);
-		if (version.equals(Version.emptyVersion))
-			return VersionRange.emptyRange;
-		if (!entry.isRequires())
-			return new VersionRange(version, true, version, true);
-		String match = entry.getMatch();
-		if (match == null)
-			// TODO should really be returning VersionRange.emptyRange here...
-			return null;
-		if (match.equals("perfect")) //$NON-NLS-1$
-			return new VersionRange(version, true, version, true);
-
-		org.osgi.framework.Version osgiVersion = PublisherHelper.toOSGiVersion(version);
-		if (match.equals("equivalent")) { //$NON-NLS-1$
-			Version upper = Version.createOSGi(osgiVersion.getMajor(), osgiVersion.getMinor() + 1, 0);
-			return new VersionRange(version, true, upper, false);
-		}
-		if (match.equals("compatible")) { //$NON-NLS-1$
-			Version upper = Version.createOSGi(osgiVersion.getMajor() + 1, 0, 0);
-			return new VersionRange(version, true, upper, false);
-		}
-		if (match.equals("greaterOrEqual")) //$NON-NLS-1$
-			return new VersionRange(version, true, new VersionRange(null).getMaximum(), true);
-		return null;
-	}
-
-	private boolean isPatch(Feature feature) {
-		FeatureEntry[] entries = feature.getEntries();
-		for (int i = 0; i < entries.length; i++) {
-			if (entries[i].isPatch())
-				return true;
-		}
-		return false;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		if (features == null && locations == null)
-			throw new IllegalStateException(Messages.exception_noFeaturesOrLocations);
-		this.info = publisherInfo;
-		if (features == null)
-			features = getFeatures(expandLocations(locations));
-		generateFeatureIUs(features, results);
-		return Status.OK_STATUS;
-	}
-
-	protected void publishFeatureArtifacts(Feature feature, IInstallableUnit featureIU, IPublisherInfo publisherInfo) {
-		// add all the artifacts associated with the feature
-		// TODO this is a little strange.  If there are several artifacts, how do we know which files go with
-		// which artifacts when we publish them?  For now it would be surprising to have more than one
-		// artifact per feature IU.
-		Collection<IArtifactKey> artifacts = featureIU.getArtifacts();
-		for (IArtifactKey artifactKey : artifacts) {
-			File file = new File(feature.getLocation());
-			ArtifactDescriptor ad = (ArtifactDescriptor) PublisherHelper.createArtifactDescriptor(info, artifactKey, file);
-			processArtifactPropertiesAdvice(featureIU, ad, publisherInfo);
-			ad.setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP);
-			// if the artifact is a dir then zip it up.
-			if (file.isDirectory())
-				publishArtifact(ad, new File[] {file}, null, publisherInfo, createRootPrefixComputer(file));
-			else
-				publishArtifact(ad, file, publisherInfo);
-		}
-	}
-
-	private void setupLinks(InstallableUnitDescription iu, FileSetDescriptor descriptor) {
-		String[] links = getArrayFromString(descriptor.getLinks(), ","); //$NON-NLS-1$
-		StringBuffer linkActions = new StringBuffer();
-
-		int i = 0;
-		while (i < links.length) {
-			//format is [target,name]*
-			String target = links[i++];
-			if (i < links.length) {
-				String name = links[i++];
-				linkActions.append("ln(linkTarget:" + target); //$NON-NLS-1$
-				linkActions.append(",targetDir:${installFolder},linkName:" + name); //$NON-NLS-1$
-				linkActions.append(");"); //$NON-NLS-1$
-			}
-
-		}
-
-		if (linkActions.length() > 0) {
-			Map<String, String> touchpointData = new HashMap<String, String>();
-			//we do ln during configure to avoid complicating branding which uses the install phase
-			touchpointData.put("configure", linkActions.toString()); //$NON-NLS-1$
-			iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		}
-	}
-
-	private void setupPermissions(InstallableUnitDescription iu, FileSetDescriptor descriptor) {
-		Map<String, String> touchpointData = new HashMap<String, String>();
-		String[][] permsList = descriptor.getPermissions();
-		for (int i = 0; i < permsList.length; i++) {
-			String[] permSpec = permsList[i];
-			String configurationData = " chmod(targetDir:${installFolder}, targetFile:" + permSpec[1] + ", permissions:" + permSpec[0] + ");"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			touchpointData.put("install", configurationData); //$NON-NLS-1$
-			iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAndBundlesPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAndBundlesPublisherApplication.java
deleted file mode 100644
index 516cb99..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/FeaturesAndBundlesPublisherApplication.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.RootIUAction;
-import org.eclipse.equinox.p2.publisher.actions.RootIUResultFilterAdvice;
-
-/**
- * <p>
- * This application generates meta-data and artifact repositories from a set of features and bundles.
- * If -source <localdir> parameter is given, it specifies the directory under which to find the features 
- * and bundles (in the standard "features" and "plugins" sub-directories).
- * </p><p>
- * Optionally, the -features <csv of file locations> and -bundles <csv of file locations> arguments can 
- * be specified.  If given, these override the defaults derived from a supplied -source parameter.
- * </p>
- */
-public class FeaturesAndBundlesPublisherApplication extends AbstractPublisherApplication {
-
-	protected File[] features = null;
-	protected File[] bundles = null;
-
-	protected String rootIU = null;
-	protected String rootVersion = null;
-
-	public FeaturesAndBundlesPublisherApplication() {
-		// nothing to do
-	}
-
-	protected void processParameter(String arg, String parameter, PublisherInfo pinfo) throws URISyntaxException {
-		super.processParameter(arg, parameter, pinfo);
-
-		if (arg.equalsIgnoreCase("-features")) //$NON-NLS-1$
-			features = createFiles(parameter);
-
-		if (arg.equalsIgnoreCase("-bundles")) //$NON-NLS-1$
-			bundles = createFiles(parameter);
-
-		if (arg.equalsIgnoreCase("-iu")) //$NON-NLS-1$
-			rootIU = parameter;
-
-		if (arg.equalsIgnoreCase("-version")) //$NON-NLS-1$
-			rootVersion = parameter;
-	}
-
-	private File[] createFiles(String parameter) {
-		String[] filespecs = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
-		File[] result = new File[filespecs.length];
-		for (int i = 0; i < filespecs.length; i++)
-			result[i] = new File(filespecs[i]);
-		return result;
-	}
-
-	protected IPublisherAction[] createActions() {
-		ArrayList<IPublisherAction> result = new ArrayList<IPublisherAction>();
-		if (features == null)
-			features = new File[] {new File(source, "features")}; //$NON-NLS-1$
-		result.add(new FeaturesAction(features));
-		if (bundles == null)
-			bundles = new File[] {new File(source, "plugins")}; //$NON-NLS-1$
-		result.add(new BundlesAction(bundles));
-
-		if (rootIU != null) {
-			result.add(new RootIUAction(rootIU, Version.parseVersion(rootVersion), rootIU));
-			info.addAdvice(new RootIUResultFilterAdvice(null));
-		}
-
-		return result.toArray(new IPublisherAction[result.size()]);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IBrandingAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IBrandingAdvice.java
deleted file mode 100644
index 6f49520..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IBrandingAdvice.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 EclipseSource and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   EclipseSource - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
-
-/**
- * Advice for branding executables and other element while publishing.
- */
-public interface IBrandingAdvice extends IPublisherAdvice {
-
-	/**
-	 * Returns the OS that this branding advice is relevant for.
-	 */
-	public String getOS();
-
-	/**
-	 * Returns the list of icon files to be used in branding an executable. 
-	 * The nature of the returned values and the images they represent is
-	 * platform-specific.
-	 * 
-	 * @return the list of icons used in branding an executable or <code>null</code> if none.
-	 */
-	public String[] getIcons();
-
-	/**
-	 * Returns the name of the launcher.  This should be the OS-independent
-	 * name. That is, ".exe" etc. should not be included.
-	 * 
-	 * @return the name of the branded launcher or <code>null</code> if none.
-	 */
-	public String getExecutableName();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IBundleShapeAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IBundleShapeAdvice.java
deleted file mode 100644
index 8ad1bad..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IBundleShapeAdvice.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
-
-public interface IBundleShapeAdvice extends IPublisherAdvice {
-	public static final String DIR = BundlesAction.DIR;
-	public static final String JAR = BundlesAction.JAR;
-
-	public String getShape();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IConfigAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IConfigAdvice.java
deleted file mode 100644
index 6c8eefd..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IConfigAdvice.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.util.Map;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
-
-public interface IConfigAdvice extends IPublisherAdvice {
-
-	public BundleInfo[] getBundles();
-
-	public Map<String, String> getProperties();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IExecutableAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IExecutableAdvice.java
deleted file mode 100644
index 7d46675..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/IExecutableAdvice.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   EclipseSource - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import org.eclipse.equinox.p2.publisher.IPublisherAdvice;
-
-/**
- * Advice for executables while publishing.
- */
-public interface IExecutableAdvice extends IPublisherAdvice {
-
-	/**
-	 * Returns the VM arguments for this executable.
-	 * @return The list of VM Arguments for this executable or empty array for none
-	 */
-	public String[] getVMArguments();
-
-	/**
-	 * Returns the program arguments for this executable.
-	 * 
-	 * @return The list of program arguments for tihs executable or empty array for none
-	 */
-	public String[] getProgramArguments();
-
-	/**
-	 * Returns the name of the launcher.  This should be the OS-independent
-	 * name. That is, ".exe" etc. should not be included.
-	 * 
-	 * @return the name of the branded launcher or <code>null</code> if none.
-	 */
-	public String getExecutableName();
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/InstallPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/InstallPublisherApplication.java
deleted file mode 100644
index ae180c2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/InstallPublisherApplication.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.publisher.*;
-
-public class InstallPublisherApplication extends AbstractPublisherApplication {
-
-	protected String id;
-	protected Version version = Version.parseVersion("1.0.0"); //$NON-NLS-1$
-	protected String name;
-	protected String executableName;
-	protected String flavor;
-	protected IVersionedId[] topLevel;
-	protected boolean start;
-	protected String[] rootExclusions;
-
-	public InstallPublisherApplication() {
-		//hidden
-	}
-
-	protected void processFlag(String arg, PublisherInfo publisherInfo) {
-		super.processFlag(arg, publisherInfo);
-
-		if (arg.equalsIgnoreCase("-startAll")) //$NON-NLS-1$
-			start = true;
-	}
-
-	protected void initialize(PublisherInfo publisherInfo) throws ProvisionException {
-		super.initialize(publisherInfo);
-
-		if (publisherInfo.getConfigurations().length == 0)
-			publisherInfo.setConfigurations(new String[] {""}); //$NON-NLS-1$
-	}
-
-	protected void processParameter(String arg, String parameter, PublisherInfo publisherInfo) throws URISyntaxException {
-		super.processParameter(arg, parameter, publisherInfo);
-
-		if (arg.equalsIgnoreCase("-id")) //$NON-NLS-1$
-			id = parameter;
-
-		if (arg.equalsIgnoreCase("-version")) //$NON-NLS-1$
-			version = Version.parseVersion(parameter);
-
-		if (arg.equalsIgnoreCase("-name")) //$NON-NLS-1$
-			name = parameter;
-
-		if (arg.equalsIgnoreCase("-executable")) //$NON-NLS-1$
-			executableName = parameter;
-
-		if (arg.equalsIgnoreCase("-flavor")) //$NON-NLS-1$
-			flavor = parameter;
-
-		if (arg.equalsIgnoreCase("-top")) //$NON-NLS-1$
-			topLevel = createVersionedIdList(parameter);
-
-		if (arg.equalsIgnoreCase("-rootExclusions")) //$NON-NLS-1$
-			rootExclusions = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
-	}
-
-	private IVersionedId[] createVersionedIdList(String parameter) {
-		String[] list = AbstractPublisherAction.getArrayFromString(parameter, ","); //$NON-NLS-1$
-		IVersionedId[] result = new IVersionedId[list.length];
-		for (int i = 0; i < result.length; i++)
-			result[i] = VersionedId.parse(list[i]);
-		return result;
-	}
-
-	protected IPublisherAction[] createActions() {
-		ArrayList<IPublisherAction> result = new ArrayList<IPublisherAction>();
-		result.add(createEclipseInstallAction());
-		return result.toArray(new IPublisherAction[result.size()]);
-	}
-
-	private IPublisherAction createEclipseInstallAction() {
-		String[] exclusions = getBaseExclusions();
-		if (rootExclusions != null) {
-			String[] result = new String[exclusions.length + rootExclusions.length];
-			System.arraycopy(exclusions, 0, result, 0, exclusions.length);
-			System.arraycopy(rootExclusions, 0, result, exclusions.length, rootExclusions.length);
-			exclusions = result;
-		}
-		return new EclipseInstallAction(source, id, version, name, executableName, flavor, topLevel, exclusions, start);
-	}
-
-	protected String[] getBaseExclusions() {
-		return new String[] {"plugins", "features", "configuration", "p2", "artifacts.xml"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/LaunchingAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/LaunchingAdvice.java
deleted file mode 100644
index 7264782..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/LaunchingAdvice.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-
-import org.eclipse.equinox.internal.provisional.frameworkadmin.LauncherData;
-import org.eclipse.equinox.p2.publisher.AbstractAdvice;
-
-public class LaunchingAdvice extends AbstractAdvice implements IExecutableAdvice {
-
-	private LauncherData data;
-	private String configSpec;
-
-	public LaunchingAdvice(LauncherData data, String configSpec) {
-		this.data = data;
-		this.configSpec = configSpec;
-	}
-
-	protected String getConfigSpec() {
-		return configSpec;
-	}
-
-	public String[] getProgramArguments() {
-		return data.getProgramArgs();
-	}
-
-	public String[] getVMArguments() {
-		return data.getJvmArgs();
-	}
-
-	public String getExecutableName() {
-		return data.getLauncherName();
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java
deleted file mode 100644
index 2f803f4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.p2.metadata.VersionedId;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.*;
-
-public class ProductAction extends AbstractPublisherAction {
-	protected String source;
-	protected String id;
-	protected Version version;
-	protected String name;
-	protected String executableName;
-	protected String flavor;
-	protected boolean start = false;
-	//protected String productLocation;
-	protected File executablesFeatureLocation;
-	protected IProductDescriptor product;
-	protected IPublisherResult publisherResults;
-
-	public ProductAction(String source, IProductDescriptor product, String flavor, File executablesFeatureLocation) {
-		super();
-		this.source = source;
-		this.flavor = flavor;
-		this.executablesFeatureLocation = executablesFeatureLocation;
-		this.product = product;
-		//this.productLocation = productLocation;
-	}
-
-	protected IPublisherAction[] createActions(IPublisherResult results) {
-		// generate the advice we can up front.
-		createAdvice();
-
-		// create all the actions needed to publish a product
-		ArrayList<IPublisherAction> actions = new ArrayList<IPublisherAction>();
-		// products include the executable so add actions to publish them
-		if (getExecutablesLocation() != null)
-			actions.add(createApplicationExecutableAction(info.getConfigurations()));
-		// add the actions that just configure things.
-		actions.add(createConfigCUsAction());
-		actions.add(createJREAction());
-		actions.add(createDefaultCUsAction());
-		actions.add(createRootIUAction());
-		return actions.toArray(new IPublisherAction[actions.size()]);
-	}
-
-	protected IPublisherAction createApplicationExecutableAction(String[] configSpecs) {
-		return new ApplicationLauncherAction(id, version, flavor, executableName, getExecutablesLocation(), configSpecs);
-	}
-
-	protected IPublisherAction createDefaultCUsAction() {
-		return new DefaultCUsAction(info, flavor, 4, false);
-	}
-
-	protected IPublisherAction createRootIUAction() {
-		return new RootIUAction(id, version, name);
-	}
-
-	protected IPublisherAction createConfigCUsAction() {
-		return new ConfigCUsAction(info, flavor, id, version);
-	}
-
-	protected IPublisherAction createJREAction() {
-		//TODO set a proper execution environment
-		return new JREAction((String) null);
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		monitor = SubMonitor.convert(monitor);
-		this.info = publisherInfo;
-		publisherResults = results;
-		IPublisherAction[] actions = createActions(results);
-		MultiStatus finalStatus = new MultiStatus(EclipseInstallAction.class.getName(), 0, "publishing result", null); //$NON-NLS-1$
-		for (int i = 0; i < actions.length; i++) {
-			if (monitor.isCanceled())
-				return Status.CANCEL_STATUS;
-			finalStatus.merge(actions[i].perform(publisherInfo, results, monitor));
-		}
-		if (!finalStatus.isOK())
-			return finalStatus;
-
-		return Status.OK_STATUS;
-	}
-
-	private void createAdvice() {
-		executableName = product.getLauncherName();
-		createProductAdvice();
-		createAdviceFileAdvice();
-		createRootAdvice();
-		info.addAdvice(new RootIUResultFilterAdvice(null));
-	}
-
-	/**
-	 * Create advice for a p2.inf file co-located with the product file, if any.
-	 */
-	private void createAdviceFileAdvice() {
-		File productFileLocation = product.getLocation();
-		if (productFileLocation == null)
-			return;
-
-		AdviceFileAdvice advice = new AdviceFileAdvice(product.getId(), Version.parseVersion(product.getVersion()), new Path(productFileLocation.getParent()), new Path("p2.inf")); //$NON-NLS-1$
-		if (advice.containsAdvice())
-			info.addAdvice(advice);
-	}
-
-	private void createRootAdvice() {
-		Collection<IVersionedId> list;
-		if (product.useFeatures())
-			// TODO: We need a real namespace here
-			list = versionElements(listElements(product.getFeatures(), ".feature.group"), IInstallableUnit.NAMESPACE_IU_ID); //$NON-NLS-1$ 
-		else
-			//TODO: We need a real namespace here
-			list = versionElements(listElements(product.getBundles(true), null), IInstallableUnit.NAMESPACE_IU_ID);
-		info.addAdvice(new RootIUAdvice(list));
-	}
-
-	private void createProductAdvice() {
-		id = product.getId();
-		version = Version.parseVersion(product.getVersion());
-		name = product.getProductName();
-		if (name == null || name.length() == 0) // If the name is not defined, use the ID
-			name = product.getId();
-
-		String[] configSpecs = info.getConfigurations();
-		for (int i = 0; i < configSpecs.length; i++)
-			info.addAdvice(new ProductFileAdvice(product, configSpecs[i]));
-	}
-
-	private Collection<IVersionedId> versionElements(Collection<IVersionedId> elements, String namespace) {
-		Collection<IVersionAdvice> versionAdvice = info.getAdvice(null, true, null, null, IVersionAdvice.class);
-		List<IVersionedId> result = new ArrayList<IVersionedId>();
-		for (IVersionedId element : elements) {
-			Version elementVersion = element.getVersion();
-			if (elementVersion == null || Version.emptyVersion.equals(elementVersion)) {
-				Iterator<IVersionAdvice> advice = versionAdvice.iterator();
-				while (advice.hasNext()) {
-					elementVersion = advice.next().getVersion(namespace, element.getId());
-					break;
-				}
-			}
-
-			//	if advisedVersion is null, we get the highest version
-			IInstallableUnit unit = queryForIU(publisherResults, element.getId(), elementVersion);
-			if (unit != null) {
-				result.add(unit);
-			} else if (elementVersion != null) {
-				//best effort
-				result.add(new VersionedId(element.getId(), elementVersion));
-			}
-			//TODO we could still add a requirement on version 0.0.0 to get any version, but if the
-			//bundle is platform specific we will have broken metadata due to a missing filter
-		}
-		return result;
-	}
-
-	private Collection<IVersionedId> listElements(List<IVersionedId> elements, String suffix) {
-		if (suffix == null || suffix.length() == 0)
-			return elements;
-		ArrayList<IVersionedId> result = new ArrayList<IVersionedId>(elements.size());
-		for (IVersionedId elementName : elements) {
-			result.add(new VersionedId(elementName.getId() + suffix, elementName.getVersion()));
-		}
-		return result;
-	}
-
-	protected File getExecutablesLocation() {
-		if (executablesFeatureLocation != null)
-			return executablesFeatureLocation;
-		if (source != null)
-			return new File(source);
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java
deleted file mode 100644
index e054e7f..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   EclipseSource - ongoing development
- *   IBM Corporation - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.util.*;
-import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.DataLoader;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
-import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
-import org.eclipse.equinox.p2.metadata.IVersionedId;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.AbstractAdvice;
-import org.eclipse.equinox.p2.publisher.AbstractPublisherAction;
-import org.eclipse.equinox.p2.publisher.actions.ILicenseAdvice;
-
-/**
- * Provide advice derived from the .product file.  The product can give some info on 
- * launching as well as the configuration (bundles, properties, ...)
- */
-public class ProductFileAdvice extends AbstractAdvice implements ILicenseAdvice, IExecutableAdvice, IConfigAdvice, IBrandingAdvice {
-	private final static String OSGI_SPLASH_PATH = "osgi.splashPath"; //$NON-NLS-1$
-	private final static String SPLASH_PREFIX = "platform:/base/plugins/"; //$NON-NLS-1$
-	private IProductDescriptor product;
-	private String configSpec;
-	private String ws;
-	private String os;
-	private String arch;
-	private ConfigData configData = null;
-
-	protected String getId() {
-		return product.getId();
-	}
-
-	protected Version getVersion() {
-		return Version.parseVersion(product.getVersion());
-	}
-
-	/**
-	 * Constructs a new ProductFileAdvice for a given product file and a
-	 * particular configuration. Configurations are 
-	 * specified as: ws.os.arch where:
-	 *  ws is the windowing system
-	 *  os is the operating system
-	 *  arch is the architecture
-	 */
-	public ProductFileAdvice(IProductDescriptor product, String configSpec) {
-		this.product = product;
-		this.configSpec = configSpec;
-
-		String[] config = AbstractPublisherAction.parseConfigSpec(configSpec);
-		ws = config[0];
-		if (ws == null)
-			ws = AbstractPublisherAction.CONFIG_ANY;
-		os = config[1];
-		if (os == null)
-			os = AbstractPublisherAction.CONFIG_ANY;
-		arch = config[2];
-		if (arch == null)
-			arch = AbstractPublisherAction.CONFIG_ANY;
-
-		configData = getConfigData();
-	}
-
-	/**
-	 * Returns the program arguments for this product.  
-	 */
-	public String[] getProgramArguments() {
-		String line = product.getProgramArguments(os);
-		return AbstractPublisherAction.getArrayFromString(line, " "); //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the VM arguments for this product.
-	 */
-	public String[] getVMArguments() {
-		String line = product.getVMArguments(os);
-		return AbstractPublisherAction.getArrayFromString(line, " "); //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the Bundles that constitute this product.  These
-	 * bundles may be specified in the .product file, .product file configuration
-	 * area, config.ini file, or a combination of these three places.
-	 */
-	public BundleInfo[] getBundles() {
-		return configData.getBundles();
-	}
-
-	/**
-	 * Returns the properties associated with this product.  These
-	 * properties may be defined in the .product file, the config.ini
-	 * file, or both.
-	 */
-	public Map<String, String> getProperties() {
-		Map<String, String> result = new HashMap<String, String>();
-		CollectionUtils.putAll(configData.getProperties(), result);
-		result.putAll(product.getConfigurationProperties());
-		return result;
-	}
-
-	/**
-	 * Returns the name of the launcher.  This should be the OS-independent
-	 * name. That is, ".exe" etc. should not be included.
-	 * 
-	 * @return the name of the branded launcher or <code>null</code> if none.
-	 */
-	public String getExecutableName() {
-		return product.getLauncherName();
-	}
-
-	/**
-	 * Returns the product file parser that this advice is working on
-	 */
-	public IProductDescriptor getProductFile() {
-		return product;
-	}
-
-	/**
-	 * Returns the icons defined for this product
-	 */
-	public String[] getIcons() {
-		return product.getIcons(os);
-	}
-
-	/**
-	 * Returns the operating system that this advice is configured to work with.
-	 */
-	public String getOS() {
-		return this.os;
-	}
-
-	/**
-	 * Returns the license text for this product
-	 */
-	public String getLicenseURL() {
-		return product.getLicenseURL();
-	}
-
-	/**
-	 * Returns the license URL for this product
-	 */
-	public String getLicenseText() {
-		return product.getLicenseText();
-	}
-
-	private ConfigData getConfigData() {
-		DataLoader loader = createDataLoader();
-		ConfigData result;
-		if (loader != null) {
-			result = loader.getConfigData();
-		} else
-			result = generateConfigData();
-
-		addProductFileBundles(result); // these are the bundles specified in the <plugins/> tag
-		addProductFileConfigBundles(result); // these are the bundles specified in the <configurations> tag in the product file
-
-		if (product.getProductId() != null)
-			result.setProperty("eclipse.product", product.getProductId()); //$NON-NLS-1$
-		if (product.getApplication() != null)
-			result.setProperty("eclipse.application", product.getApplication()); //$NON-NLS-1$
-		String location = getSplashLocation();
-		if (location != null)
-			result.setProperty(OSGI_SPLASH_PATH, SPLASH_PREFIX + location);
-		return result;
-	}
-
-	private void addProductFileConfigBundles(ConfigData data) {
-		Set<BundleInfo> versionBoundBundles = new HashSet<BundleInfo>();
-		Map<String, List<BundleInfo>> unboundedBundles = new HashMap<String, List<BundleInfo>>();
-
-		BundleInfo[] bundles = data.getBundles();
-		for (int i = 0; i < bundles.length; i++) {
-			// For each bundle we know about, cache it.  If the bundle doesn't have a version
-			// add it to a list of bundles by name
-			BundleInfo bundleInfo = bundles[i];
-			if (bundleInfo.getVersion().equals(BundleInfo.EMPTY_VERSION)) {
-				addUnboundedBundle(unboundedBundles, bundleInfo);
-			} else {
-				versionBoundBundles.add(bundleInfo);
-				addUnboundedBundle(unboundedBundles, bundleInfo);
-			}
-		}
-
-		List<BundleInfo> bundleInfos = product.getBundleInfos();
-		for (BundleInfo bundleInfo : bundleInfos) {
-			// For each bundle that has configuration information, if the bundle is in the 
-			// bundles bound by version, add the "configured" bundle instead
-			// If the bundle is not bound to a version, then replace all bounded versions
-			// with this one.  Otherwise, just add this one (don't replace)
-			if (versionBoundBundles.contains(bundleInfo)) {
-				// If we found a version with the same name and version, replace it with the "configured" bundle
-				data.removeBundle(bundleInfo);
-				data.addBundle(bundleInfo);
-			} else if (bundleInfo.getVersion().equals(BundleInfo.EMPTY_VERSION)) {
-				// If we don't have a version number, look for all bundles that match by name
-				List<BundleInfo> list = unboundedBundles.get(bundleInfo.getSymbolicName());
-				if (list == null)
-					data.addBundle(bundleInfo);
-				else
-					for (BundleInfo target : list) {
-						target.setStartLevel(bundleInfo.getStartLevel());
-						target.setMarkedAsStarted(bundleInfo.isMarkedAsStarted());
-					}
-			} else {
-				// Otherwise we have a version, but we could not match it, so just add this one.
-				data.addBundle(bundleInfo);
-			}
-
-		}
-	}
-
-	private void addUnboundedBundle(Map<String, List<BundleInfo>> data, BundleInfo bundleInfo) {
-		if (!data.containsKey(bundleInfo.getSymbolicName()))
-			data.put(bundleInfo.getSymbolicName(), new LinkedList<BundleInfo>());
-		data.get(bundleInfo.getSymbolicName()).add(bundleInfo);
-	}
-
-	private void addProductFileBundles(ConfigData data) {
-		List<IVersionedId> bundles = product.getBundles(true);
-		Set<BundleInfo> set = new HashSet<BundleInfo>();
-		set.addAll(Arrays.asList(data.getBundles()));
-
-		for (IVersionedId vid : bundles) {
-			BundleInfo bundleInfo = new BundleInfo();
-			bundleInfo.setSymbolicName(vid.getId());
-			bundleInfo.setVersion(vid.getVersion().toString());
-			if (!set.contains(bundleInfo))
-				data.addBundle(bundleInfo);
-		}
-	}
-
-	private ConfigData generateConfigData() {
-		ConfigData result = new ConfigData(null, null, null, null);
-		if (product.useFeatures())
-			return result;
-
-		// Add all the bundles here.  We replace / update them later
-		// if we find configuration information
-		List<IVersionedId> bundles = product.getBundles(true);
-		for (IVersionedId vid : bundles) {
-			BundleInfo bundleInfo = new BundleInfo();
-			bundleInfo.setSymbolicName(vid.getId());
-			bundleInfo.setVersion(vid.getVersion().toString());
-			result.addBundle(bundleInfo);
-		}
-		return result;
-	}
-
-	private String getSplashLocation() {
-		return product.getSplashLocation();
-	}
-
-	protected String getConfigSpec() {
-		return configSpec;
-	}
-
-	protected boolean matchConfig(String spec, boolean includeDefault) {
-		if (spec != null) {
-			String targetWS = AbstractPublisherAction.parseConfigSpec(spec)[0];
-			if (targetWS == null)
-				targetWS = AbstractPublisherAction.CONFIG_ANY;
-			if (!ws.equals(targetWS) && !ws.equals(AbstractPublisherAction.CONFIG_ANY) && !targetWS.equals(AbstractPublisherAction.CONFIG_ANY)) {
-				return false;
-			}
-
-			String targetOS = AbstractPublisherAction.parseConfigSpec(spec)[1];
-			if (targetOS == null)
-				targetOS = AbstractPublisherAction.CONFIG_ANY;
-			if (!os.equals(targetOS) && !os.equals(AbstractPublisherAction.CONFIG_ANY) && !targetOS.equals(AbstractPublisherAction.CONFIG_ANY)) {
-				return false;
-			}
-
-			String targetArch = AbstractPublisherAction.parseConfigSpec(spec)[2];
-			if (targetArch == null)
-				targetArch = AbstractPublisherAction.CONFIG_ANY;
-			if (!arch.equals(targetArch) && !arch.equals(AbstractPublisherAction.CONFIG_ANY) && !targetArch.equals(AbstractPublisherAction.CONFIG_ANY)) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	private DataLoader createDataLoader() {
-		String location = product.getConfigIniPath(os);
-		if (location == null)
-			location = product.getConfigIniPath(null);
-		if (location == null)
-			return null;
-
-		File configFile = new File(location);
-		// We are assuming we are always relative from the product file
-		// However PDE tooling puts us relative from the workspace, that "relative" path also looks like an absolute path on linux
-		// Build may have copied the file to the correct place for us
-		if (!configFile.isAbsolute() || !configFile.exists())
-			configFile = new File(product.getLocation().getParentFile(), location);
-
-		//We don't really have an executable location, get something reasonable based on the config.ini location
-		File parent = configFile.getParentFile();
-		if (parent.getName().equals("configuration") && parent.getParentFile() != null) //$NON-NLS-1$
-			parent = parent.getParentFile();
-		return new DataLoader(configFile, parent);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductPublisherApplication.java
deleted file mode 100644
index dc365e7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductPublisherApplication.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: 
- *   Code 9 - initial API and implementation
- *   IBM - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-import java.io.File;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.VersionAdvice;
-
-public class ProductPublisherApplication extends AbstractPublisherApplication {
-
-	private String product;
-	private String executables;
-	private String flavor;
-
-	public ProductPublisherApplication() {
-		//hidden
-	}
-
-	protected IPublisherAction[] createActions() {
-		ArrayList<IPublisherAction> result = new ArrayList<IPublisherAction>();
-		result.add(createProductAction());
-		return result.toArray(new IPublisherAction[result.size()]);
-	}
-
-	private IPublisherAction createProductAction() {
-		IProductDescriptor productDescriptor = null;
-		try {
-			productDescriptor = new ProductFile(product);
-		} catch (Exception e) {
-			if (product == null)
-				throw new IllegalArgumentException("unable to load product file"); //$NON-NLS-1$
-		}
-		File executablesFeature = executables == null ? null : new File(executables);
-		return new ProductAction(source, productDescriptor, flavor, executablesFeature);
-	}
-
-	protected void processParameter(String arg, String parameter, PublisherInfo publisherInfo) throws URISyntaxException {
-		super.processParameter(arg, parameter, publisherInfo);
-
-		if (arg.equalsIgnoreCase("-productFile")) //$NON-NLS-1$
-			product = parameter;
-		if (arg.equalsIgnoreCase("-executables")) //$NON-NLS-1$
-			executables = parameter;
-		if (arg.equalsIgnoreCase("-flavor")) //$NON-NLS-1$
-			flavor = parameter;
-		if (arg.equalsIgnoreCase("-pluginVersionsAdvice")) { //$NON-NLS-1$
-			VersionAdvice versionAdvice = new VersionAdvice();
-			versionAdvice.load(IInstallableUnit.NAMESPACE_IU_ID, parameter, null);
-			info.addAdvice(versionAdvice);
-		}
-		if (arg.equalsIgnoreCase("-featureVersionsAdvice")) { //$NON-NLS-1$
-			VersionAdvice versionAdvice = new VersionAdvice();
-			versionAdvice.load(IInstallableUnit.NAMESPACE_IU_ID, parameter, ".feature.group"); //$NON-NLS-1$
-			info.addAdvice(versionAdvice);
-		}
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/URLEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/URLEntry.java
deleted file mode 100644
index b9566e8..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/URLEntry.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.p2.publisher.eclipse;
-
-public class URLEntry {
-	private String annotation;
-	private String url;
-
-	public URLEntry() {
-		//empty
-	}
-
-	public URLEntry(String url, String annotation) {
-		this.url = url;
-		this.annotation = annotation;
-	}
-
-	public void setAnnotation(String annotation) {
-		this.annotation = annotation;
-	}
-
-	public String getAnnotation() {
-		return annotation;
-	}
-
-	public void setURL(String url) {
-		this.url = url;
-	}
-
-	public String getURL() {
-		return url;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/LocalizationHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/LocalizationHelper.java
index 32d1e2e..1d36e0c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/LocalizationHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/LocalizationHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java
index 9136fa8..67abd74 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/spi/p2/publisher/PublisherHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Genuitec, LLC - added license support
  *     Code 9 - Ongoing development
+#      SAP AG - consolidation of publishers for PDE formats
  *******************************************************************************/
 package org.eclipse.equinox.spi.p2.publisher;
 
@@ -16,24 +17,20 @@ import java.io.*;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.*;
-import java.util.Map.Entry;
-import org.eclipse.equinox.internal.p2.metadata.*;
+import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
+import org.eclipse.equinox.internal.p2.metadata.BasicVersion;
 import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
 import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitFragmentDescription;
 import org.eclipse.equinox.p2.publisher.IPublisherInfo;
-import org.eclipse.equinox.p2.publisher.PublisherInfo;
-import org.eclipse.equinox.p2.publisher.eclipse.*;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
 import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
-import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.osgi.framework.Constants;
 
 /**
  * This class was originally the MetadataGeneratorHelper from the Generator.
  * Much of the code has been deprecated and will be removed.
- *
  */
 public class PublisherHelper {
 	/**
@@ -91,11 +88,6 @@ public class PublisherHelper {
 		return createArtifactDescriptor(null, null, key, pathOnDisk);
 	}
 
-	//TODO remove because the method with IPublisherInfo is more powerful
-	public static IArtifactDescriptor createArtifactDescriptor(IArtifactRepository artifactRepo, IArtifactKey key, File pathOnDisk) {
-		return createArtifactDescriptor(null, artifactRepo, key, pathOnDisk);
-	}
-
 	/**
 	 * Creates an artifact descriptor for the given key and path.
 	 * @param info the publisher info
@@ -216,27 +208,6 @@ public class PublisherHelper {
 		return MetadataFactory.createInstallableUnit(cu);
 	}
 
-	private static void addExtraProperties(IInstallableUnit iiu, Map<String, String> extraProperties) {
-		if (iiu instanceof InstallableUnit) {
-			InstallableUnit iu = (InstallableUnit) iiu;
-
-			for (Entry<String, String> entry : extraProperties.entrySet()) {
-				iu.setProperty(entry.getKey(), entry.getValue());
-			}
-		}
-	}
-
-	public static IInstallableUnit[] createEclipseIU(BundleDescription bd, boolean isFolderPlugin, IArtifactKey key, Map<String, String> extraProperties) {
-		ArrayList<IInstallableUnit> iusCreated = new ArrayList<IInstallableUnit>(1);
-		IPublisherInfo info = new PublisherInfo();
-		String shape = isFolderPlugin ? IBundleShapeAdvice.DIR : IBundleShapeAdvice.JAR;
-		info.addAdvice(new BundleShapeAdvice(bd.getSymbolicName(), fromOSGiVersion(bd.getVersion()), shape));
-		IInstallableUnit iu = BundlesAction.createBundleIU(bd, key, info);
-		addExtraProperties(iu, extraProperties);
-		iusCreated.add(iu);
-		return (iusCreated.toArray(new IInstallableUnit[iusCreated.size()]));
-	}
-
 	public static ArtifactKey createBinaryArtifactKey(String id, Version version) {
 		return new ArtifactKey(BINARY_ARTIFACT_CLASSIFIER, id, version);
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/AbstractPublishTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/AbstractPublishTask.java
deleted file mode 100644
index 04f18eb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/AbstractPublishTask.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: IBM - Initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.ant;
-
-import org.eclipse.equinox.p2.query.QueryUtil;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.tools.ant.Task;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository;
-import org.eclipse.equinox.internal.p2.publisher.Activator;
-import org.eclipse.equinox.internal.p2.publisher.Messages;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.metadata.IArtifactKey;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.query.IQueryResult;
-import org.eclipse.equinox.p2.repository.artifact.ArtifactKeyQuery;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
-import org.eclipse.osgi.util.NLS;
-
-public abstract class AbstractPublishTask extends Task {
-	protected static final String ANT_PROPERTY_PREFIX = "${"; //$NON-NLS-1$
-
-	/**
-	 * Support nested repository elements that looking something like
-	 *    <repo location="file:/foo" metadata="true" artifact="true" />
-	 * Both metadata and artifact are optional:
-	 *  1) if neither are set, the repo is used for both metadata and artifacts
-	 *  2) if only one is true, the repo is that type and not the other 
-	 */
-	static public class RepoEntry {
-		private URI repoLocation;
-		private Boolean metadata = null;
-		private Boolean artifact = null;
-
-		/**
-		 * If not set, default is true if we aren't set as an artifact repo 
-		 */
-		public boolean isMetadataRepository() {
-			if (metadata != null)
-				return metadata.booleanValue();
-			return !Boolean.TRUE.equals(artifact);
-		}
-
-		/**
-		 * If not set, default is true if we aren't set as an metadata repo 
-		 */
-		public boolean isArtifactRepository() {
-			if (artifact != null)
-				return artifact.booleanValue();
-			return !Boolean.TRUE.equals(metadata);
-		}
-
-		public URI getRepositoryLocation() {
-			return repoLocation;
-		}
-
-		public void setLocation(String location) {
-			try {
-				repoLocation = URIUtil.fromString(location);
-			} catch (URISyntaxException e) {
-				throw new IllegalArgumentException("Repository location (" + location + ") must be a URL."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		}
-
-		public void setMetadata(boolean metadata) {
-			this.metadata = Boolean.valueOf(metadata);
-		}
-
-		public void setArtifact(boolean artifact) {
-			this.artifact = Boolean.valueOf(artifact);
-		}
-	}
-
-	protected boolean compress = false;
-	protected boolean reusePackedFiles = false;
-	protected boolean append = true;
-	protected boolean publish = true;
-	protected String source = null;
-	protected URI metadataLocation;
-	protected String metadataRepoName;
-	protected URI artifactLocation;
-	protected String artifactRepoName;
-	protected PublisherInfo provider = null;
-	protected List<RepoEntry> contextRepositories = new ArrayList<RepoEntry>();
-
-	protected IProvisioningAgent getProvisioningAgent() {
-		return (IProvisioningAgent) ServiceHelper.getService(Activator.context, IProvisioningAgent.SERVICE_NAME);
-	}
-
-	protected IStatus createConfigurationEror(String message) {
-		return new Status(IStatus.ERROR, "org.eclipse.equinox.p2.publisher", message); //$NON-NLS-1$
-	}
-
-	private boolean isEmpty(IArtifactRepository repo) {
-		IQueryResult<IArtifactKey> result = repo.query(QueryUtil.createLimitQuery(ArtifactKeyQuery.ALL_KEYS, 1), null);
-		return result.isEmpty();
-	}
-
-	protected void initializeRepositories(PublisherInfo info) throws ProvisionException {
-		if (artifactLocation != null) {
-			IArtifactRepository repo = Publisher.createArtifactRepository(getProvisioningAgent(), artifactLocation, artifactRepoName, compress, reusePackedFiles);
-			if (!append && !isEmpty(repo)) {
-				File repoLocation = URIUtil.toFile(artifactLocation);
-				if (repoLocation != null && source != null) {
-					if (repoLocation.isFile())
-						repoLocation = repoLocation.getParentFile();
-					if (repoLocation.equals(new File(source)))
-						throw new IllegalArgumentException(NLS.bind(Messages.exception_artifactRepoNoAppendDestroysInput, URIUtil.toUnencodedString(artifactLocation)));
-				}
-				repo.removeAll();
-			}
-			info.setArtifactRepository(repo);
-		} else if ((info.getArtifactOptions() & IPublisherInfo.A_PUBLISH) > 0)
-			throw new ProvisionException(createConfigurationEror(Messages.exception_noArtifactRepo));
-		if (metadataLocation == null)
-			throw new ProvisionException(createConfigurationEror(Messages.exception_noMetadataRepo));
-		info.setMetadataRepository(Publisher.createMetadataRepository(getProvisioningAgent(), metadataLocation, metadataRepoName, append, compress));
-
-		if (contextRepositories.size() > 0) {
-			CompositeMetadataRepository contextMetadata = CompositeMetadataRepository.createMemoryComposite(getProvisioningAgent());
-			CompositeArtifactRepository contextArtifact = CompositeArtifactRepository.createMemoryComposite(getProvisioningAgent());
-
-			for (RepoEntry entry : contextRepositories) {
-				if (contextMetadata != null && entry.isMetadataRepository())
-					contextMetadata.addChild(entry.getRepositoryLocation());
-				if (contextArtifact != null && entry.isArtifactRepository())
-					contextArtifact.addChild(entry.getRepositoryLocation());
-			}
-
-			if (contextMetadata != null && contextMetadata.getChildren().size() > 0)
-				info.setContextMetadataRepository(contextMetadata);
-
-			if (contextArtifact != null && contextArtifact.getChildren().size() > 0)
-				info.setContextArtifactRepository(contextArtifact);
-		}
-	}
-
-	protected PublisherInfo getInfo() {
-		if (provider == null)
-			provider = new PublisherInfo();
-
-		if (publish)
-			provider.setArtifactOptions(provider.getArtifactOptions() | IPublisherInfo.A_PUBLISH);
-		return provider;
-	}
-
-	public void setCompress(String value) {
-		compress = Boolean.valueOf(value).booleanValue();
-	}
-
-	public void setReusePackedFiles(String value) {
-		reusePackedFiles = Boolean.valueOf(value).booleanValue();
-	}
-
-	public void setAppend(String value) {
-		append = Boolean.valueOf(value).booleanValue();
-	}
-
-	public void setPublishArtifacts(String value) {
-		publish = Boolean.valueOf(value).booleanValue();
-	}
-
-	public void setArtifactRepository(String location) {
-		try {
-			artifactLocation = URIUtil.fromString(location);
-		} catch (URISyntaxException e) {
-			throw new IllegalArgumentException("Artifact repository location (" + location + ") must be a URL."); //$NON-NLS-1$//$NON-NLS-2$
-		}
-	}
-
-	public void setArtifactRepositoryName(String value) {
-		artifactRepoName = value;
-	}
-
-	public void setMetadataRepository(String location) {
-		try {
-			metadataLocation = URIUtil.fromString(location);
-		} catch (URISyntaxException e) {
-			throw new IllegalArgumentException("Metadata repository location (" + location + ") must be a URL."); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-
-	public void setMetadataRepositoryName(String value) {
-		metadataRepoName = value;
-	}
-
-	public void setRepository(String location) {
-		setArtifactRepository(location);
-		setMetadataRepository(location);
-	}
-
-	public void setRepositoryName(String name) {
-		setArtifactRepositoryName(name);
-		setMetadataRepositoryName(name);
-	}
-
-	// nested <contextRepository/> elements
-	public void addConfiguredContextRepository(RepoEntry repo) {
-		contextRepositories.add(repo);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/FeaturesAndBundlesPublisherTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/FeaturesAndBundlesPublisherTask.java
deleted file mode 100644
index 0c8bcab..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/FeaturesAndBundlesPublisherTask.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: IBM - Initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.ant;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.publisher.IPublisherAction;
-import org.eclipse.equinox.p2.publisher.Publisher;
-import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction;
-import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction;
-
-public class FeaturesAndBundlesPublisherTask extends AbstractPublishTask {
-	private ArrayList<Object> features = new ArrayList<Object>();
-	private ArrayList<Object> bundles = new ArrayList<Object>();
-
-	public void execute() throws BuildException {
-		try {
-			initializeRepositories(getInfo());
-		} catch (ProvisionException e) {
-			throw new BuildException("Unable to configure repositories", e); //$NON-NLS-1$
-		}
-
-		File[] f = getLocations(features);
-		File[] b = getLocations(bundles);
-
-		ArrayList<IPublisherAction> actions = new ArrayList<IPublisherAction>();
-		if (f.length > 0)
-			actions.add(new FeaturesAction(f));
-		if (b.length > 0)
-			actions.add(new BundlesAction(b));
-
-		if (actions.size() > 0)
-			new Publisher(getInfo()).publish(actions.toArray(new IPublisherAction[actions.size()]), new NullProgressMonitor());
-	}
-
-	private File[] getLocations(List<Object> collection) {
-		ArrayList<Object> results = new ArrayList<Object>();
-		for (Object obj : collection) {
-			if (obj instanceof FileSet) {
-				FileSet set = (FileSet) obj;
-
-				DirectoryScanner scanner = set.getDirectoryScanner(getProject());
-				String[][] elements = new String[][] {scanner.getIncludedDirectories(), scanner.getIncludedFiles()};
-				for (int i = 0; i < 2; i++) {
-					for (int j = 0; j < elements[i].length; j++) {
-						results.add(new File(set.getDir(), elements[i][j]));
-					}
-				}
-			} else if (obj instanceof File) {
-				results.add(obj);
-			}
-		}
-		return results.toArray(new File[results.size()]);
-	}
-
-	public FileSet createFeatures() {
-		FileSet set = new FileSet();
-		features.add(set);
-		return set;
-	}
-
-	public FileSet createBundles() {
-		FileSet set = new FileSet();
-		bundles.add(set);
-		return set;
-	}
-
-	public void setSource(String source) {
-		super.source = source;
-		features.add(new File(source, "features")); //$NON-NLS-1$
-		bundles.add(new File(source, "plugins")); //$NON-NLS-1$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/ProductPublisherTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/ProductPublisherTask.java
deleted file mode 100644
index 2a4af02..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/ProductPublisherTask.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: IBM - Initial API and implementation
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.ant;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.tools.ant.BuildException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.actions.VersionAdvice;
-import org.eclipse.equinox.p2.publisher.eclipse.ProductAction;
-
-public class ProductPublisherTask extends AbstractPublishTask {
-
-	public static class ConfigElement {
-		public String os;
-		public String ws;
-		public String arch;
-
-		public void setOs(String os) {
-			this.os = os;
-		}
-
-		public void setWs(String ws) {
-			this.ws = ws;
-		}
-
-		public void setArch(String arch) {
-			this.arch = arch;
-		}
-
-		public String toString() {
-			return ws + '.' + os + '.' + arch;
-		}
-	}
-
-	public static class AdviceElement {
-		public String kind;
-		public String file;
-
-		public void setKind(String kind) {
-			this.kind = kind;
-		}
-
-		public void setFile(String file) {
-			this.file = file;
-		}
-	}
-
-	private String flavor;
-	private String productFile;
-	private String executables;
-	private List<ConfigElement> configurations = new ArrayList<ConfigElement>(3);
-	private List<AdviceElement> advice = new ArrayList<AdviceElement>(3);
-
-	public void execute() throws BuildException {
-		try {
-			initializeRepositories(getInfo());
-		} catch (ProvisionException e) {
-			throw new BuildException("Unable to configure repositories", e); //$NON-NLS-1$
-		}
-
-		IProductDescriptor productDescriptor = null;
-		try {
-			productDescriptor = new ProductFile(productFile);
-		} catch (Exception e) {
-			if (productFile == null)
-				throw new IllegalArgumentException("unable to load product file"); //$NON-NLS-1$
-		}
-
-		if (flavor == null || flavor.startsWith(ANT_PROPERTY_PREFIX))
-			flavor = "tooling"; //$NON-NLS-1$
-
-		IPublisherAction action = new ProductAction(source, productDescriptor, flavor, executables != null ? new File(executables) : null);
-		new Publisher(getInfo()).publish(new IPublisherAction[] {action}, new NullProgressMonitor());
-	}
-
-	protected PublisherInfo getInfo() {
-		String[] configStrings = new String[configurations.size()];
-		for (int i = 0; i < configurations.size(); i++) {
-			configStrings[i] = configurations.get(i).toString();
-		}
-
-		PublisherInfo info = super.getInfo();
-		info.setConfigurations(configStrings);
-		processAdvice(info);
-		return info;
-	}
-
-	protected void processAdvice(PublisherInfo info) {
-		for (AdviceElement element : advice) {
-			if (element.kind == null || element.file == null)
-				continue;
-
-			if (element.kind.equals("featureVersions") || element.kind.equals("pluginVersions")) { //$NON-NLS-1$ //$NON-NLS-2$
-				VersionAdvice versionAdvice = new VersionAdvice();
-				versionAdvice.load(IInstallableUnit.NAMESPACE_IU_ID, element.file, element.kind.startsWith("features") ? ".feature.group" : null); //$NON-NLS-1$ //$NON-NLS-2$
-				info.addAdvice(versionAdvice);
-			}
-		}
-	}
-
-	public void setFlavor(String flavor) {
-		this.flavor = flavor;
-	}
-
-	public void setProductFile(String productFile) {
-		this.productFile = productFile;
-	}
-
-	public void setExecutables(String executables) {
-		this.executables = executables;
-	}
-
-	public void setSource(String source) {
-		super.source = source;
-	}
-
-	public void addConfiguredConfig(ConfigElement config) {
-		this.configurations.add(config);
-	}
-
-	public void addConfiguredAdvice(AdviceElement element) {
-		this.advice.add(element);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/PublisherTask.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/PublisherTask.java
deleted file mode 100644
index d25b041..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/PublisherTask.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.ant;
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.metadata.IVersionedId;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.*;
-import org.eclipse.equinox.p2.publisher.eclipse.EclipseInstallAction;
-
-/**
- * An Ant task to call the p2 publisher application.
- * 
- * @since 1.0
- */
-public class PublisherTask extends AbstractPublishTask {
-
-	protected boolean inplace = false;
-	protected String[] configurations;
-	protected String mode;
-	private String flavor;
-	private String operation;
-	private String operationValue;
-	private String root;
-	private String rootVersion;
-	private String versionAdvice;
-	private String rootName;
-	private String executableName;
-	private IVersionedId[] topLevel;
-	private boolean start;
-	private String[] nonRootFiles;
-
-	/* (non-Javadoc)
-	 * @see org.apache.tools.ant.Task#execute()
-	 */
-	public void execute() throws BuildException {
-		try {
-			initialize(getInfo());
-		} catch (ProvisionException e) {
-			throw new BuildException("Unable to configure repositories", e); //$NON-NLS-1$
-		}
-		createVersionAdvice();
-		IPublisherAction[] actions = createActions();
-		//TODO Do something with publisher result
-		new Publisher(getInfo()).publish(actions, new NullProgressMonitor());
-	}
-
-	private IPublisherAction[] createActions() {
-		if (operation == null)
-			// TODO what to do in this case?
-			return new IPublisherAction[] {};
-		if (operation.equals("-update")) //$NON-NLS-1$
-			// TODO fix this up.  watch for circularities
-			//			return new IPublishingAction[] {new LocalUpdateSiteAction(operationValue)};
-			return new IPublisherAction[] {};
-		if (operation.equals("-source")) //$NON-NLS-1$
-			// TODO what to do in this case?
-			return new IPublisherAction[] {new EclipseInstallAction(operationValue, root, Version.parseVersion(rootVersion), rootName, executableName, flavor, topLevel, nonRootFiles, start)};
-		// TODO what to do in this case?
-		return new IPublisherAction[] {};
-	}
-
-	private void createVersionAdvice() {
-		if (versionAdvice == null)
-			return;
-		// TODO read the version advice and add the IVersionAdvice
-	}
-
-	protected void initialize(PublisherInfo info) throws ProvisionException {
-		if (inplace) {
-			File sourceLocation = new File(source);
-			if (metadataLocation == null)
-				metadataLocation = sourceLocation.toURI();
-			if (artifactLocation == null)
-				artifactLocation = sourceLocation.toURI();
-			info.setArtifactOptions(info.getArtifactOptions() | IPublisherInfo.A_INDEX | IPublisherInfo.A_PUBLISH);
-		} else
-			info.setArtifactOptions(info.getArtifactOptions() | IPublisherInfo.A_INDEX | IPublisherInfo.A_PUBLISH | IPublisherInfo.A_OVERWRITE);
-		initializeRepositories(info);
-	}
-
-	public void setBase(String value) {
-		source = value;
-	}
-
-	public void setBundles(String value) {
-		//TODO Remove - currently exists for compatibility with generator task
-	}
-
-	public void setConfig(String value) {
-		operation = "-config"; //$NON-NLS-1$
-		operationValue = value;
-	}
-
-	public void setInplace(String value) {
-		operation = "-inplace"; //$NON-NLS-1$
-		operationValue = value;
-	}
-
-	public void setSource(String location) {
-		super.source = location;
-		operation = "-source"; //$NON-NLS-1$
-		operationValue = location;
-	}
-
-	public void setUpdateSite(String value) {
-		operation = "-update"; //$NON-NLS-1$
-		operationValue = value;
-	}
-
-	/**
-	 * @deprecated
-	 */
-	public void setExe(String value) {
-		executableName = value;
-	}
-
-	public void setFeatures(String value) {
-		//TODO Remove - currently exists for compatibility with generator task
-	}
-
-	public void setFlavor(String value) {
-		flavor = value;
-	}
-
-	/**
-	 * @deprecated
-	 */
-	public void setLauncherConfig(String value) {
-		//TODO Remove - currently exists for compatibility with generator task
-	}
-
-	public void setNoDefaultIUs(String value) {
-		//TODO Remove - currently exists for compatibility with generator task
-	}
-
-	/**
-	 * @deprecated
-	 */
-	public void setP2OS(String value) {
-		//TODO Remove - currently exists for compatibility with generator task
-	}
-
-	public void setProductFile(String file) {
-		//TODO Remove - currently exists for compatibility with generator task
-	}
-
-	public void setPublishArtifactRepository(String value) {
-		getInfo().setArtifactOptions(getInfo().getArtifactOptions() | IPublisherInfo.A_INDEX);
-	}
-
-	public void setPublishArtifacts(String value) {
-		getInfo().setArtifactOptions(getInfo().getArtifactOptions() | IPublisherInfo.A_PUBLISH);
-	}
-
-	public void setRoot(String value) {
-		root = value;
-	}
-
-	public void setRootVersion(String value) {
-		rootVersion = value;
-	}
-
-	public void setMode(String value) {
-		mode = value;
-	}
-
-	public void setVersionAdvice(String value) {
-		versionAdvice = value;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/TaskMessages.java b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/TaskMessages.java
deleted file mode 100644
index 6893edd..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/TaskMessages.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.publisher.ant;
-
-import org.eclipse.osgi.util.NLS;
-
-public class TaskMessages extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.metadata.generator.ant.messages";//$NON-NLS-1$
-
-	public static String exception_errorOccurredCallingGenerator;
-	public static String exception_errorArtifactRepo;
-	public static String exception_errorMetadataRepo;
-
-	static {
-		// load message values from bundle file
-		NLS.initializeMessages(BUNDLE_NAME, TaskMessages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/messages.properties
deleted file mode 100644
index 2c2eb1c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.publisher/src_ant/org/eclipse/equinox/internal/p2/publisher/ant/messages.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-exception_errorOccurredCallingGenerator = An error occurred when calling generator.
-exception_errorArtifactRepo = Error setting artifact repository {0}.
-exception_errorMetadataRepo = Error setting metadata repository {0}.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ql/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ql/META-INF/MANIFEST.MF
index 072c165..c7c8465 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ql/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ql/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.ql;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.100.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ql/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.ql/build.properties
index 315ede3..8833e4b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ql/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ql/build.properties
@@ -1,8 +1,18 @@
+###############################################################################
+# Copyright (c) 2011 Cloudsmith Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Cloudsmith Inc. - initial API and implementation
+###############################################################################
 
 # <copyright>
 # </copyright>
 #
-# $Id: build.properties,v 1.4 2010/02/19 12:13:14 thallgren Exp $
+# $Id: build.properties,v 1.5 2011/05/02 22:47:26 irbull Exp $
 
 bin.includes = .,\
                META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ql/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.ql/plugin.properties
index 01d48c6..30760eb 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ql/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ql/plugin.properties
@@ -1,8 +1,18 @@
+###############################################################################
+# Copyright (c) 2011 Cloudsmith Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Cloudsmith Inc. - initial API and implementation
+###############################################################################
 
 # <copyright>
 # </copyright>
 #
-# $Id: plugin.properties,v 1.2 2010/02/08 04:22:38 johna Exp $
+# $Id: plugin.properties,v 1.4 2011/05/08 23:17:42 prapicau Exp $
 
-pluginName =p2 query language
+pluginName = Equinox Provisioning p2 query language
 providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ql/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ql/pom.xml
index cffd94b..af8396b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ql/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ql/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.ql</artifactId>
-  <version>2.0.0.qualifier</version>
+  <version>2.0.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLExpression.java b/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLExpression.java
index 60b277c..4e25f1f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLExpression.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLFactory.java
index b87c009..05e0a7b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ql/src/org/eclipse/equinox/p2/ql/IQLFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/Bootstrap.product b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/Bootstrap.product
index 2d2a9af..0fc475c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/Bootstrap.product
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/Bootstrap.product
@@ -55,6 +55,7 @@
       <plugin id="org.eclipse.equinox.p2.repository"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.eclipse"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.natives"/>
+      <plugin id="org.eclipse.equinox.p2.transport.ecf"/>
       <plugin id="org.eclipse.equinox.preferences"/>
       <plugin id="org.eclipse.equinox.registry"/>
       <plugin id="org.eclipse.equinox.security"/>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF
index b6cae71..7140a1f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.reconciler.dropins;singleton:=true
-Bundle-Version: 1.1.2.qualifier
+Bundle-Version: 1.1.100.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.reconciler.dropins.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -15,11 +15,11 @@ Bundle-RequiredExecutionEnvironment: J2SE-1.5,
 Import-Package: org.eclipse.equinox.app;version="1.0.0",
  org.eclipse.equinox.internal.p2.artifact.repository,
  org.eclipse.equinox.internal.p2.core.helpers,
+ org.eclipse.equinox.internal.p2.director,
  org.eclipse.equinox.internal.p2.extensionlocation,
  org.eclipse.equinox.internal.p2.metadata.repository,
  org.eclipse.equinox.internal.p2.update,
  org.eclipse.equinox.internal.provisional.configurator,
- org.eclipse.equinox.internal.provisional.p2.director,
  org.eclipse.equinox.internal.provisional.p2.directorywatcher,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.engine;version="[2.0.0,3.0.0)",
@@ -35,5 +35,5 @@ Import-Package: org.eclipse.equinox.app;version="1.0.0",
  org.eclipse.osgi.service.datalocation;version="1.0.0",
  org.eclipse.osgi.service.environment;version="1.1.0",
  org.eclipse.osgi.util;version="1.1.0",
- org.osgi.framework;version="1.3.0",
+ org.osgi.framework;version="1.6.0",
  org.osgi.service.packageadmin;version="1.2.0"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/build.properties
index 3a99d7d..6a838e7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/plugin.properties
index deacb73..c5c5330 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/plugin.properties
@@ -8,5 +8,5 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName = Dropin Reconciler Plug-in
+pluginName = Equinox Provisioning Drop-in
 providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/pom.xml
index a9d7831..c8de1f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.reconciler.dropins</artifactId>
-  <version>1.1.0.qualifier</version>
+  <version>1.1.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
index 8abde42..d8da4f5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
@@ -18,6 +18,7 @@ import org.eclipse.equinox.internal.p2.artifact.repository.ArtifactRepositoryMan
 import org.eclipse.equinox.internal.p2.core.helpers.*;
 import org.eclipse.equinox.internal.p2.extensionlocation.*;
 import org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager;
+import org.eclipse.equinox.internal.p2.reconciler.dropins.DropinsRepositoryListener.LinkedRepository;
 import org.eclipse.equinox.internal.p2.update.Configuration;
 import org.eclipse.equinox.internal.p2.update.PathUtil;
 import org.eclipse.equinox.internal.provisional.p2.directorywatcher.DirectoryWatcher;
@@ -48,6 +49,7 @@ public class Activator implements BundleActivator {
 	private static final String DIR_PLUGINS = "plugins"; //$NON-NLS-1$
 	private static final String DIR_FEATURES = "features"; //$NON-NLS-1$
 	private static final String EXT_LINK = ".link"; //$NON-NLS-1$
+	public static final String TRACING_PREFIX = "[reconciler] "; //$NON-NLS-1$
 	private static BundleContext bundleContext;
 	private final static Set<IMetadataRepository> repositories = new HashSet<IMetadataRepository>();
 	private Collection<File> filesToCheck = null;
@@ -68,7 +70,6 @@ public class Activator implements BundleActivator {
 			throw new IllegalStateException("MetadataRepositoryManager not registered."); //$NON-NLS-1$
 		ExtensionLocationMetadataRepositoryFactory factory = new ExtensionLocationMetadataRepositoryFactory();
 		factory.setAgent(agent);
-
 		// always compress repositories that we are creating.
 		Map<String, String> repositoryProperties = new HashMap<String, String>();
 		repositoryProperties.put(IRepository.PROP_COMPRESSED, Boolean.TRUE.toString());
@@ -116,7 +117,6 @@ public class Activator implements BundleActivator {
 			throw new IllegalStateException("ArtifactRepositoryManager not registered."); //$NON-NLS-1$
 		ExtensionLocationArtifactRepositoryFactory factory = new ExtensionLocationArtifactRepositoryFactory();
 		factory.setAgent(agent);
-
 		// always compress repositories that we are creating.
 		Map<String, String> repositoryProperties = new HashMap<String, String>();
 		repositoryProperties.put(IRepository.PROP_COMPRESSED, Boolean.TRUE.toString());
@@ -222,12 +222,18 @@ public class Activator implements BundleActivator {
 	 */
 	private boolean isUpToDate() {
 		// the user might want to force a reconciliation
-		if ("true".equals(getContext().getProperty("osgi.checkConfiguration"))) //$NON-NLS-1$//$NON-NLS-2$
+		if ("true".equals(getContext().getProperty("osgi.checkConfiguration"))) { //$NON-NLS-1$//$NON-NLS-2$
+			trace("User requested forced reconciliation via \"osgi.checkConfiguration=true\" System property."); //$NON-NLS-1$
+			trace("Performing reconciliation."); //$NON-NLS-1$
 			return false;
+		}
 		// read timestamps
 		Properties timestamps = readTimestamps();
-		if (timestamps.isEmpty())
+		if (timestamps.isEmpty()) {
+			trace("Cached timestamp file empty."); //$NON-NLS-1$
+			trace("Performing reconciliation."); //$NON-NLS-1$
 			return false;
+		}
 
 		// gather the list of files/folders that we need to check
 		Collection<File> files = getFilesToCheck();
@@ -235,16 +241,35 @@ public class Activator implements BundleActivator {
 			File file = iter.next();
 			String key = file.getAbsolutePath();
 			String timestamp = timestamps.getProperty(key);
-			if (timestamp == null)
+			if (timestamp == null) {
+				trace("Missing timestamp for file: " + key); //$NON-NLS-1$
+				trace("Performing reconciliation."); //$NON-NLS-1$
 				return false;
-			if (!Long.toString(file.lastModified()).equals(timestamp))
+			}
+			long lastModified = file.lastModified();
+			if (!Long.toString(lastModified).equals(timestamp)) {
+				trace("Timestamp has been updated for file: " + key + ", expected: " + timestamp + ", actual: " + lastModified); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				trace("Performing reconciliation."); //$NON-NLS-1$
 				return false;
+			}
 			timestamps.remove(key);
 		}
 
 		// if we had some extra timestamps in the file, then signal that something has
 		// changed and we need to reconcile
-		return timestamps.isEmpty();
+		boolean result = timestamps.isEmpty();
+		if (result) {
+			trace("Cached timestamp values up to date."); //$NON-NLS-1$
+			trace("Reconciliation skipped."); //$NON-NLS-1$
+		} else {
+			if (Tracing.DEBUG_RECONCILER) {
+				trace("Found extra values in cached timestamp file: "); //$NON-NLS-1$
+				for (Iterator<Object> iter = timestamps.keySet().iterator(); iter.hasNext();)
+					trace(iter.next());
+				trace("Performing reconciliation. "); //$NON-NLS-1$
+			}
+		}
+		return result;
 	}
 
 	/*
@@ -255,6 +280,7 @@ public class Activator implements BundleActivator {
 		File file = Activator.getContext().getDataFile(CACHE_FILENAME);
 		if (!file.exists())
 			return result;
+		trace("Reading timestamps from file: " + file.getAbsolutePath()); //$NON-NLS-1$
 		InputStream input = null;
 		try {
 			input = new BufferedInputStream(new FileInputStream(file));
@@ -269,6 +295,13 @@ public class Activator implements BundleActivator {
 				// ignore
 			}
 		}
+		if (Tracing.DEBUG_RECONCILER) {
+			for (Iterator<Object> iter = result.keySet().iterator(); iter.hasNext();) {
+				Object key = iter.next();
+				Object value = result.get(key);
+				trace(key.toString() + '=' + value);
+			}
+		}
 		return result;
 	}
 
@@ -335,9 +368,10 @@ public class Activator implements BundleActivator {
 				File child = children[inner];
 				if (child.isFile() && child.getName().toLowerCase().endsWith(EXT_LINK)) {
 					// if we have a link file then add the link file and its target
-					File target = DropinsRepositoryListener.getLinkedFile(child);
-					if (target == null || !target.exists())
+					LinkedRepository repo = DropinsRepositoryListener.getLinkedRepository(child);
+					if (repo == null || !repo.exists())
 						continue;
+					File target = repo.getLocation();
 					result.add(child);
 					result.add(target);
 					File eclipse = new File(target, DIR_ECLIPSE);
@@ -390,11 +424,19 @@ public class Activator implements BundleActivator {
 
 		// write out the file
 		File file = Activator.getContext().getDataFile(CACHE_FILENAME);
+		trace("Writing out timestamps to file : " + file.getAbsolutePath()); //$NON-NLS-1$
 		OutputStream output = null;
 		try {
 			file.delete();
 			output = new BufferedOutputStream(new FileOutputStream(file));
 			timestamps.store(output, null);
+			if (Tracing.DEBUG_RECONCILER) {
+				for (Iterator<Object> iter = timestamps.keySet().iterator(); iter.hasNext();) {
+					Object key = iter.next();
+					Object value = timestamps.get(key);
+					trace(key.toString() + '=' + value);
+				}
+			}
 		} catch (IOException e) {
 			LogHelper.log(new Status(IStatus.ERROR, ID, "Error occurred while writing cache timestamps for reconciliation.", e)); //$NON-NLS-1$
 		} finally {
@@ -486,6 +528,7 @@ public class Activator implements BundleActivator {
 		Map<String, String> properties = new HashMap<String, String>();
 		properties.put(IRepository.PROP_COMPRESSED, Boolean.TRUE.toString());
 		properties.put(IRepository.PROP_SYSTEM, Boolean.TRUE.toString());
+
 		DropinsRepositoryListener listener = new DropinsRepositoryListener(getAgent(), DROPINS, properties);
 		DirectoryWatcher watcher = new DirectoryWatcher(directories.toArray(new File[directories.size()]));
 		watcher.addListener(listener);
@@ -553,6 +596,32 @@ public class Activator implements BundleActivator {
 	}
 
 	/*
+	 * Perform variable substitution on the given string. Replace vars in the form %foo%
+	 * with the equivalent property set in the System properties.
+	 */
+	public static String substituteVariables(String path) {
+		if (path == null)
+			return path;
+		int beginIndex = path.indexOf('%');
+		// no variable
+		if (beginIndex == -1)
+			return path;
+		beginIndex++;
+		int endIndex = path.indexOf('%', beginIndex);
+		// no matching end % to indicate variable
+		if (endIndex == -1)
+			return path;
+		// get the variable name and do a lookup
+		String var = path.substring(beginIndex, endIndex);
+		if (var.length() == 0 || var.indexOf(File.pathSeparatorChar) != -1)
+			return path;
+		var = getContext().getProperty(var);
+		if (var == null)
+			return path;
+		return path.substring(0, beginIndex - 1) + var + path.substring(endIndex + 1);
+	}
+
+	/*
 	 * Helper method to return the eclipse.home location. Return
 	 * null if it is unavailable.
 	 */
@@ -631,28 +700,11 @@ public class Activator implements BundleActivator {
 	}
 
 	/*
-	  * Perform variable substitution on the given string. Replace vars in the form %foo%
-	  * with the equivalent property set in the System properties.
-	  */
-	public static String substituteVariables(String path) {
-		if (path == null)
-			return path;
-		int beginIndex = path.indexOf('%');
-		// no variable
-		if (beginIndex == -1)
-			return path;
-		beginIndex++;
-		int endIndex = path.indexOf('%', beginIndex);
-		// no matching end % to indicate variable
-		if (endIndex == -1)
-			return path;
-		// get the variable name and do a lookup
-		String var = path.substring(beginIndex, endIndex);
-		if (var.length() == 0 || var.indexOf(File.pathSeparatorChar) != -1)
-			return path;
-		var = getContext().getProperty(var);
-		if (var == null)
-			return path;
-		return path.substring(0, beginIndex - 1) + var + path.substring(endIndex + 1);
+	 * If tracing is enabled, then write out the given message.
+	 */
+	public static void trace(Object message) {
+		if (Tracing.DEBUG_RECONCILER)
+			Tracing.debug(TRACING_PREFIX + message);
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/DropinsRepositoryListener.java b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/DropinsRepositoryListener.java
index a6f63d2..96a6f86 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/DropinsRepositoryListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/DropinsRepositoryListener.java
@@ -42,6 +42,7 @@ public class DropinsRepositoryListener extends RepositoryListener {
 	private static final String LINK = ".link"; //$NON-NLS-1$
 	private static final String ZIP = ".zip"; //$NON-NLS-1$
 	private static final String LINKS_PATH = "path"; //$NON-NLS-1$
+	private static final String LINK_IS_OPTIONAL = "optional"; //$NON-NLS-1$
 	private static final String DROPIN_ARTIFACT_REPOSITORIES = "dropin.artifactRepositories"; //$NON-NLS-1$
 	private static final String DROPIN_METADATA_REPOSITORIES = "dropin.metadataRepositories"; //$NON-NLS-1$
 	private static final String PIPE = "|"; //$NON-NLS-1$
@@ -49,6 +50,34 @@ public class DropinsRepositoryListener extends RepositoryListener {
 	private List<IMetadataRepository> metadataRepositories = new ArrayList<IMetadataRepository>();
 	private List<IArtifactRepository> artifactRepositories = new ArrayList<IArtifactRepository>();
 
+	static class LinkedRepository {
+		LinkedRepository(File location) {
+			super();
+			if (location == null)
+				throw new IllegalArgumentException("Repository location cannot be null."); //$NON-NLS-1$
+			this.location = location;
+		}
+
+		boolean exists() {
+			return location.exists();
+		}
+
+		File getLocation() {
+			return location;
+		}
+
+		boolean isOptional() {
+			return optional;
+		}
+
+		void setOptional(boolean optional) {
+			this.optional = optional;
+		}
+
+		private File location;
+		private boolean optional = false;
+	}
+
 	public DropinsRepositoryListener(IProvisioningAgent agent, String repositoryName, Map<String, String> properties) {
 		super(repositoryName, properties);
 		this.agent = agent;
@@ -80,6 +109,8 @@ public class DropinsRepositoryListener extends RepositoryListener {
 
 	private void addRepository(File file) {
 		URI repoLocation = createRepositoryLocation(file);
+		if (repoLocation == null)
+			return;
 		Map<String, String> properties = new HashMap<String, String>();
 		// if the file pointed to a link file, keep track of the attribute
 		// so we can add it to the repo later
@@ -88,17 +119,15 @@ public class DropinsRepositoryListener extends RepositoryListener {
 			if (linkLocation != null)
 				properties.put(Site.PROP_LINK_FILE, file.getAbsolutePath());
 		}
-		if (repoLocation != null) {
-			getMetadataRepository(repoLocation, properties);
-			getArtifactRepository(repoLocation, properties);
-		}
+		getMetadataRepository(repoLocation, properties);
+		getArtifactRepository(repoLocation, properties);
 	}
 
 	/*
 	 * Return the file pointed to by the given link file. Return null if there is a problem
 	 * reading the file or resolving the location.
 	 */
-	static File getLinkedFile(File file) {
+	static LinkedRepository getLinkedRepository(File file) {
 		Properties links = new Properties();
 		try {
 			InputStream input = new BufferedInputStream(new FileInputStream(file));
@@ -133,7 +162,13 @@ public class DropinsRepositoryListener extends RepositoryListener {
 				linkedFile = new File(root, path);
 		}
 		try {
-			return linkedFile.getCanonicalFile();
+			LinkedRepository result = new LinkedRepository(linkedFile.getCanonicalFile());
+			// Check if the link target is marked as optional.
+			// If link is optional, then the link target may not exist.
+			// So IF link is marked as optional AND does not exist, simply ignore it.
+			String optional = links.getProperty(LINK_IS_OPTIONAL);
+			result.setOptional(Boolean.valueOf(optional).booleanValue());
+			return result;
 		} catch (IOException e) {
 			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.error_resolving_link, linkedFile.getAbsolutePath(), file.getAbsolutePath()), e));
 			return null;
@@ -179,13 +214,13 @@ public class DropinsRepositoryListener extends RepositoryListener {
 	}
 
 	private URI getLinkRepository(File file, boolean logMissingLink) {
-		File repo = getLinkedFile(file);
+		LinkedRepository repo = getLinkedRepository(file);
 		if (repo == null) {
 			if (logMissingLink)
 				LogHelper.log(new Status(IStatus.ERROR, Activator.ID, "Unable to determine link location from file: " + file.getAbsolutePath())); //$NON-NLS-1$
 			return null;
 		}
-		return repo.toURI();
+		return repo.isOptional() && !repo.exists() ? null : repo.getLocation().toURI();
 	}
 
 	public void getMetadataRepository(URI repoURL, Map<String, String> properties) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/ProfileSynchronizer.java b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/ProfileSynchronizer.java
index bfdc05e..e09138b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/ProfileSynchronizer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/ProfileSynchronizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2007, 2011 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -17,9 +17,9 @@ import java.util.*;
 import java.util.Map.Entry;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.*;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.p2.extensionlocation.Constants;
 import org.eclipse.equinox.internal.provisional.configurator.Configurator;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.core.ProvisionException;
@@ -131,7 +131,23 @@ public class ProfileSynchronizer {
 
 		// write out the new timestamps (for caching) and apply the configuration
 		writeTimestamps();
-		return applyConfiguration(false);
+		IStatus applyResult = applyConfiguration(false);
+
+		// Mark the state update as hidden so it does not appear in the Installation History UI list
+		// TODO We need to determine if it is ok to use this copy of the profile.
+		// See https://bugs.eclipse.org/334670
+		IProfileRegistry profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
+		if (profileRegistry != null) {
+			IStatus result = profileRegistry.setProfileStateProperty(profile.getProfileId(), profile.getTimestamp(), IProfile.STATE_PROP_HIDDEN, Boolean.TRUE.toString());
+			if (!result.isOK()) {
+				// we don't get here but if we do, we will ignore the problem and continue. We
+				// still want the install operation to succeed. The consequence of this failure is the
+				// profile state appears in the UI in the Install History page, which isn't horrible.
+				LogHelper.log(result);
+			}
+		}
+
+		return applyResult;
 	}
 
 	/*
@@ -179,61 +195,61 @@ public class ProfileSynchronizer {
 		// if we don't have any removals then we don't have to worry about potentially
 		// invalidating things we already have installed, removal of roots, etc so just 
 		// create a regular plan.
-		IProvisioningPlan plan = null;
 		if (removals.isEmpty()) {
-			plan = createProvisioningPlan(request, context, monitor);
-			debug(request, plan);
-		} else {
-			// We are now creating a backup of the original request that will be used to create the final plan (where no optional magic is used)
-			ProfileChangeRequest finalRequest = (ProfileChangeRequest) request.clone();
-
-			// otherwise collect the roots, pretend they are optional, and see
-			// if the resulting plan affects them
-			Set<IInstallableUnit> strictRoots = getStrictRoots().toUnmodifiableSet();
-			Collection<IRequirement> forceNegation = new ArrayList<IRequirement>(removals.size());
-			for (IInstallableUnit iu : removals)
-				forceNegation.add(createNegation(iu));
-			request.addExtraRequirements(forceNegation);
-
-			// set all the profile roots to be optional to see how they would be effected by the plan
-			for (IInstallableUnit iu : strictRoots)
-				request.setInstallableUnitProfileProperty(iu, INCLUSION_RULES, INCLUSION_OPTIONAL);
-
-			// get the tentative plan back from the planner
-			plan = createProvisioningPlan(request, context, monitor);
+			IProvisioningPlan plan = createProvisioningPlan(request, context, monitor);
 			debug(request, plan);
-			if (!plan.getStatus().isOK())
-				return plan.getStatus();
-
-			// Analyze the plan to see if any of the strict roots are being uninstalled.
-			int removedRoots = 0;
-			for (IInstallableUnit initialRoot : strictRoots) {
-				// if the root wasn't uninstalled, then continue
-				if (plan.getRemovals().query(QueryUtil.createIUQuery(initialRoot), null).isEmpty())
-					continue;
-				// otherwise add its removal to the change request, along with a negation and 
-				// change of strict to optional for their inclusion rule.
-				finalRequest.remove(initialRoot);
-				finalRequest.setInstallableUnitProfileProperty(initialRoot, INCLUSION_RULES, INCLUSION_OPTIONAL);
-				IRequirement negation = createNegation(initialRoot);
-				Collection<IRequirement> extra = new ArrayList<IRequirement>();
-				extra.add(negation);
-				request.addExtraRequirements(extra);
-				LogHelper.log(new Status(IStatus.INFO, Activator.ID, NLS.bind(Messages.remove_root, initialRoot.getId(), initialRoot.getVersion())));
-				removedRoots++;
-			}
+			return executePlan(plan, context, monitor);
+		}
 
-			// Check for the case where all the strict roots are being removed.
-			if (removedRoots == strictRoots.size())
-				return new Status(IStatus.ERROR, Activator.ID, Messages.remove_all_roots);
-			plan = createProvisioningPlan(finalRequest, context, monitor);
-			if (!plan.getStatus().isOK()) {
-				System.out.println("original request"); //$NON-NLS-1$
-				System.out.println(request);
-				System.out.println("final request"); //$NON-NLS-1$
-				System.out.println(finalRequest);
-				throw new IllegalStateException("The second plan is not resolvable."); //$NON-NLS-1$
-			}
+		// We are now creating a backup of the original request that will be used to create the final plan (where no optional magic is used)
+		ProfileChangeRequest finalRequest = (ProfileChangeRequest) request.clone();
+
+		// otherwise collect the roots, pretend they are optional, and see
+		// if the resulting plan affects them
+		Set<IInstallableUnit> strictRoots = getStrictRoots().toUnmodifiableSet();
+		Collection<IRequirement> forceNegation = new ArrayList<IRequirement>(removals.size());
+		for (IInstallableUnit iu : removals)
+			forceNegation.add(createNegation(iu));
+		request.addExtraRequirements(forceNegation);
+
+		// set all the profile roots to be optional to see how they would be effected by the plan
+		for (IInstallableUnit iu : strictRoots)
+			request.setInstallableUnitProfileProperty(iu, INCLUSION_RULES, INCLUSION_OPTIONAL);
+
+		// get the tentative plan back from the planner
+		IProvisioningPlan plan = createProvisioningPlan(request, context, monitor);
+		debug(request, plan);
+		if (!plan.getStatus().isOK())
+			return plan.getStatus();
+
+		// Analyze the plan to see if any of the strict roots are being uninstalled.
+		int removedRoots = 0;
+		for (IInstallableUnit initialRoot : strictRoots) {
+			// if the root wasn't uninstalled, then continue
+			if (plan.getRemovals().query(QueryUtil.createIUQuery(initialRoot), null).isEmpty())
+				continue;
+			// otherwise add its removal to the change request, along with a negation and 
+			// change of strict to optional for their inclusion rule.
+			finalRequest.remove(initialRoot);
+			finalRequest.setInstallableUnitProfileProperty(initialRoot, INCLUSION_RULES, INCLUSION_OPTIONAL);
+			IRequirement negation = createNegation(initialRoot);
+			Collection<IRequirement> extra = new ArrayList<IRequirement>();
+			extra.add(negation);
+			request.addExtraRequirements(extra);
+			LogHelper.log(new Status(IStatus.INFO, Activator.ID, NLS.bind(Messages.remove_root, initialRoot.getId(), initialRoot.getVersion())));
+			removedRoots++;
+		}
+
+		// Check for the case where all the strict roots are being removed.
+		if (removedRoots == strictRoots.size())
+			return new Status(IStatus.ERROR, Activator.ID, Messages.remove_all_roots);
+		plan = createProvisioningPlan(finalRequest, context, monitor);
+		if (!plan.getStatus().isOK()) {
+			System.out.println("original request"); //$NON-NLS-1$
+			System.out.println(request);
+			System.out.println("final request"); //$NON-NLS-1$
+			System.out.println(finalRequest);
+			throw new IllegalStateException("The second plan is not resolvable."); //$NON-NLS-1$
 		}
 
 		// execute the plan and return the status
@@ -277,9 +293,17 @@ public class ProfileSynchronizer {
 
 		try {
 			File file = Activator.getContext().getDataFile(TIMESTAMPS_FILE_PREFIX + profile.getProfileId().hashCode());
+			Activator.trace("Writing timestamp file to : " + file.getAbsolutePath()); //$NON-NLS-1$
 			OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
 			try {
 				CollectionUtils.storeProperties(timestamps, os, "Timestamps for " + profile.getProfileId()); //$NON-NLS-1$
+				if (Tracing.DEBUG_RECONCILER) {
+					for (Iterator<String> iter = timestamps.keySet().iterator(); iter.hasNext();) {
+						String key = iter.next();
+						Object value = timestamps.get(key);
+						Activator.trace(key + '=' + value);
+					}
+				}
 			} finally {
 				if (os != null)
 					os.close();
@@ -297,14 +321,24 @@ public class ProfileSynchronizer {
 	 */
 	private boolean isUpToDate() {
 		// the user might want to force a reconciliation
-		if ("true".equals(Activator.getContext().getProperty("osgi.checkConfiguration"))) //$NON-NLS-1$//$NON-NLS-2$
+		if ("true".equals(Activator.getContext().getProperty("osgi.checkConfiguration"))) { //$NON-NLS-1$//$NON-NLS-2$
+			Activator.trace("User requested forced reconciliation via \"osgi.checkConfiguration=true\" System property."); //$NON-NLS-1$
+			Activator.trace("Performing reconciliation."); //$NON-NLS-1$
 			return false;
+		}
 
 		String lastKnownProfileTimeStamp = timestamps.remove(PROFILE_TIMESTAMP);
-		if (lastKnownProfileTimeStamp == null)
+		if (lastKnownProfileTimeStamp == null) {
+			Activator.trace("Profile timestamp not found in cache."); //$NON-NLS-1$
+			Activator.trace("Performing reconciliation."); //$NON-NLS-1$
 			return false;
-		if (!lastKnownProfileTimeStamp.equals(Long.toString(profile.getTimestamp())))
+		}
+		String currentProfileTimestamp = Long.toString(profile.getTimestamp());
+		if (!lastKnownProfileTimeStamp.equals(currentProfileTimestamp)) {
+			Activator.trace("Profile timestamps not equal, expected: " + lastKnownProfileTimeStamp + ", actual=" + currentProfileTimestamp); //$NON-NLS-1$ //$NON-NLS-2$
+			Activator.trace("Performing reconciliation."); //$NON-NLS-1$
 			return false;
+		}
 
 		//When we get here the timestamps map only contains information related to repos
 		for (Entry<String, IMetadataRepository> entry : repositoryMap.entrySet()) {
@@ -318,19 +352,34 @@ public class ProfileSynchronizer {
 			if (currentTimestamp == null)
 				currentTimestamp = NO_TIMESTAMP;
 
-			String lastKnownTimestamp = timestamps.remove(entry.getKey());
+			String key = entry.getKey();
+			String lastKnownTimestamp = timestamps.remove(key);
 			//A repo has been added 
-			if (lastKnownTimestamp == null)
+			if (lastKnownTimestamp == null) {
+				Activator.trace("No cached timestamp found for: " + key); //$NON-NLS-1$
+				Activator.trace("Performing reconciliation."); //$NON-NLS-1$
 				return false;
+			}
 			if (!lastKnownTimestamp.equals(currentTimestamp)) {
+				Activator.trace("Timestamps not equal for file: " + key + ", expected: " + lastKnownTimestamp + ", actual: " + currentTimestamp); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				Activator.trace("Performing reconciliation."); //$NON-NLS-1$
 				return false;
 			}
 		}
-		//A repo has been removed
-		if (timestamps.size() != 0)
-			return false;
+		if (timestamps.size() == 0) {
+			Activator.trace("Timestamps valid."); //$NON-NLS-1$
+			Activator.trace("Skipping reconciliation."); //$NON-NLS-1$
+			return true;
+		}
 
-		return true;
+		//A repo has been removed
+		if (Tracing.DEBUG_RECONCILER) {
+			Activator.trace("Extra values in timestamp file:"); //$NON-NLS-1$
+			for (Iterator<String> iter = timestamps.keySet().iterator(); iter.hasNext();)
+				Activator.trace(iter.next());
+			Activator.trace("Performing reconciliation."); //$NON-NLS-1$
+		}
+		return false;
 	}
 
 	/*
@@ -347,11 +396,15 @@ public class ProfileSynchronizer {
 					is.close();
 			}
 		} catch (FileNotFoundException e) {
-			timestamps = new HashMap<String, String>();
 			//Ignore
+			timestamps = new HashMap<String, String>();
+			Activator.trace("Timestamp file does not exist."); //$NON-NLS-1$
+			Activator.trace("Performing reconciliation."); //$NON-NLS-1$
 		} catch (IOException e) {
 			//Ignore
 			timestamps = new HashMap<String, String>();
+			Activator.trace("Exception loading timestamp file: " + e.getMessage()); //$NON-NLS-1$
+			Activator.trace("Performing reconciliation."); //$NON-NLS-1$
 		}
 	}
 
@@ -702,11 +755,6 @@ public class ProfileSynchronizer {
 	 * Execute the given plan.
 	 */
 	private IStatus executePlan(IProvisioningPlan plan, ProvisioningContext provisioningContext, IProgressMonitor monitor) {
-		// the plan verifier has been given the opportunity to veto the plan. check to see if that was the case.
-		// warnings are ignored
-		if (plan.getStatus().getSeverity() == IStatus.ERROR)
-			return plan.getStatus();
-
 		IEngine engine = (IEngine) agent.getService(IEngine.SERVICE_NAME);
 		IPhaseSet phaseSet = PhaseSetFactory.createDefaultPhaseSetExcluding(new String[] {PhaseSetFactory.PHASE_COLLECT, PhaseSetFactory.PHASE_CHECK_TRUST});
 
@@ -727,8 +775,8 @@ public class ProfileSynchronizer {
 		if (!isInstaller && isReconciliationApplicationRunning())
 			return Status.OK_STATUS;
 		BundleContext context = Activator.getContext();
-		ServiceReference reference = context.getServiceReference(Configurator.class.getName());
-		Configurator configurator = (Configurator) context.getService(reference);
+		ServiceReference<Configurator> reference = context.getServiceReference(Configurator.class);
+		Configurator configurator = context.getService(reference);
 		try {
 			configurator.applyConfiguration();
 		} catch (IOException e) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF
index ba0b5d4..8ecfc1d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.p2.repository.tools;singleton:=true
-Bundle-Version: 2.0.1.qualifier
+Bundle-Version: 2.0.100.qualifier
 Bundle-Activator: org.eclipse.equinox.p2.internal.repository.tools.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -28,6 +28,7 @@ Import-Package: org.eclipse.equinox.app;version="1.0.0",
  org.eclipse.equinox.internal.p2.metadata.repository,
  org.eclipse.equinox.internal.p2.persistence,
  org.eclipse.equinox.internal.p2.publisher.eclipse,
+ org.eclipse.equinox.internal.p2.repository,
  org.eclipse.equinox.internal.p2.repository.helpers,
  org.eclipse.equinox.internal.provisional.p2.director,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/build.properties
index bea6eba..12ada42 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
+# Copyright (c) 2009, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/plugin.properties
index 9d171a8..7bb038d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/plugin.properties
@@ -10,4 +10,4 @@
 ###############################################################################
 
 providerName = Eclipse.org - Equinox
-bundleName=Equinox p2 repository tools.
+bundleName=Equinox Provisioning Repository Tools
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/pom.xml
index cbea1ab..a186451 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.repository.tools</artifactId>
-  <version>2.0.0.qualifier</version>
+  <version>2.0.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/JarComparator.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/JarComparator.java
index 8ee9b8e..d79bc00 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/JarComparator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/JarComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,50 @@ import org.eclipse.osgi.util.NLS;
 
 public class JarComparator implements IArtifactComparator {
 
+	private static class FeatureEntryWrapper {
+		private FeatureEntry entry;
+
+		public FeatureEntryWrapper(FeatureEntry entry) {
+			this.entry = entry;
+		}
+
+		@Override
+		public boolean equals(Object o) {
+			FeatureEntry otherEntry = (o instanceof FeatureEntryWrapper) ? ((FeatureEntryWrapper) o).getEntry() : null;
+
+			if (otherEntry == null || !entry.equals(otherEntry))
+				return false;
+
+			String arch = otherEntry.getArch();
+			if (arch == null ? entry.getArch() != null : !arch.equals(entry.getArch()))
+				return false;
+			String os = otherEntry.getOS();
+			if (os == null ? entry.getOS() != null : !os.equals(entry.getOS()))
+				return false;
+			String ws = otherEntry.getWS();
+			if (ws == null ? entry.getWS() != null : !ws.equals(entry.getWS()))
+				return false;
+
+			return true;
+		}
+
+		@Override
+		public int hashCode() {
+			int hash = entry.hashCode();
+			if (entry.getArch() != null)
+				hash += entry.getArch().hashCode();
+			if (entry.getOS() != null)
+				hash += entry.getOS().hashCode();
+			if (entry.getWS() != null)
+				hash += entry.getWS().hashCode();
+			return hash;
+		}
+
+		public FeatureEntry getEntry() {
+			return entry;
+		}
+	}
+
 	private static final String LINE_SEPARATOR = "\n"; //$NON-NLS-1$
 	private static final String CLASS_EXTENSION = ".class"; //$NON-NLS-1$
 	private static final String JAR_EXTENSION = ".jar"; //$NON-NLS-1$
@@ -91,28 +135,29 @@ public class JarComparator implements IArtifactComparator {
 		if (!feature1.getVersion().equals(feature2.getVersion()))
 			parent.add(newErrorStatus(NLS.bind(Messages.featureVersionsDontMatch, feature1.getVersion(), feature2.getVersion())));
 
-		Map<FeatureEntry, FeatureEntry> entryMap = new HashMap<FeatureEntry, FeatureEntry>();
-		FeatureEntry[] entries = feature1.getEntries();
-		for (int i = 0; i < entries.length; i++)
-			entryMap.put(entries[i], entries[i]);
+		Map<FeatureEntryWrapper, FeatureEntry> entryMap = new HashMap<FeatureEntryWrapper, FeatureEntry>();
+		FeatureEntry[] entries1 = feature1.getEntries();
+		FeatureEntry[] entries2 = feature2.getEntries();
 
-		entries = feature2.getEntries();
-		if (entries.length != entryMap.size())
+		if (entries1.length != entries2.length)
 			parent.add(newErrorStatus(Messages.featureSize));
 
-		for (int i = 0; i < entries.length; i++) {
-			FeatureEntry firstEntry = entryMap.get(entries[i]);
+		for (int i = 0; i < entries1.length; i++)
+			entryMap.put(new FeatureEntryWrapper(entries1[i]), entries1[i]);
+
+		for (int i = 0; i < entries2.length; i++) {
+			FeatureEntry firstEntry = entryMap.get(new FeatureEntryWrapper(entries2[i]));
 			if (firstEntry == null)
-				parent.add(newErrorStatus(NLS.bind(Messages.featureEntry, entries[i])));
+				parent.add(newErrorStatus(NLS.bind(Messages.featureEntry, entries2[i])));
 			else {
-				if (firstEntry.isOptional() != entries[i].isOptional())
-					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryOptional, entries[i])));
-				if (firstEntry.isUnpack() != entries[i].isUnpack())
-					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryUnpack, entries[i])));
-				if (firstEntry.isRequires() && firstEntry.getMatch() != null && !firstEntry.getMatch().equals(entries[i].getMatch()))
-					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryMatch, entries[i])));
-				if (firstEntry.getFilter() != null && !firstEntry.getFilter().equals(entries[i].getFilter()))
-					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryFilter, entries[i])));
+				if (firstEntry.isOptional() != entries2[i].isOptional())
+					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryOptional, entries2[i])));
+				if (firstEntry.isUnpack() != entries2[i].isUnpack())
+					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryUnpack, entries2[i])));
+				if (firstEntry.isRequires() && firstEntry.getMatch() != null && !firstEntry.getMatch().equals(entries2[i].getMatch()))
+					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryMatch, entries2[i])));
+				if (firstEntry.getFilter() != null && !firstEntry.getFilter().equals(entries2[i].getFilter()))
+					parent.add(newErrorStatus(NLS.bind(Messages.featureEntryFilter, entries2[i])));
 			}
 		}
 
@@ -150,11 +195,7 @@ public class JarComparator implements IArtifactComparator {
 						firstStream = new BufferedInputStream(firstFile.getInputStream(entry));
 						secondStream = new BufferedInputStream(secondFile.getInputStream(entry2));
 						if (lowerCase.endsWith(CLASS_EXTENSION)) {
-							try {
-								result = compareClasses(entryName, firstStream, entry.getSize(), secondStream, entry2.getSize());
-							} catch (ClassFormatException e) {
-								result = newErrorStatus(NLS.bind(Messages.differentEntry, new String[] {entryName, descriptorString, sourceLocation}), e);
-							}
+							result = compareClasses(entryName, firstStream, entry.getSize(), secondStream, entry2.getSize());
 						} else if (lowerCase.endsWith(JAR_EXTENSION)) {
 							result = compareNestedJars(firstStream, entry.getSize(), secondStream, entry2.getSize(), entryName);
 						} else if (lowerCase.endsWith(PROPERTIES_EXTENSION) || lowerCase.endsWith(MAPPINGS_EXTENSION)) {
@@ -216,15 +257,42 @@ public class JarComparator implements IArtifactComparator {
 		return Status.OK_STATUS;
 	}
 
-	private IStatus compareClasses(String entryName, InputStream stream1, long size1, InputStream stream2, long size2) throws ClassFormatException, IOException {
+	private IStatus compareClasses(String entryName, InputStream stream1, long size1, InputStream stream2, long size2) throws IOException {
 		Disassembler disassembler = new Disassembler();
 		byte[] firstEntryClassFileBytes = Utility.getInputStreamAsByteArray(stream1, (int) size1);
 		byte[] secondEntryClassFileBytes = Utility.getInputStreamAsByteArray(stream2, (int) size2);
 
-		String contentsFile1 = disassembler.disassemble(firstEntryClassFileBytes, LINE_SEPARATOR, Disassembler.DETAILED | Disassembler.COMPACT);
-		String contentsFile2 = disassembler.disassemble(secondEntryClassFileBytes, LINE_SEPARATOR, Disassembler.DETAILED | Disassembler.COMPACT);
-		if (!contentsFile1.equals(contentsFile2))
+		String contentsFile1 = null;
+		try {
+			contentsFile1 = disassembler.disassemble(firstEntryClassFileBytes, LINE_SEPARATOR, Disassembler.DETAILED | Disassembler.COMPACT);
+		} catch (ClassFormatException e) {
+			// ignore
+		}
+		String contentsFile2 = null;
+		try {
+			contentsFile2 = disassembler.disassemble(secondEntryClassFileBytes, LINE_SEPARATOR, Disassembler.DETAILED | Disassembler.COMPACT);
+		} catch (ClassFormatException e) {
+			// ignore
+		}
+		if (contentsFile1 == null || contentsFile2 == null) {
+			// one of the two .class file (or both) is corrupted
+			if (contentsFile1 == null) {
+				if (contentsFile2 != null) {
+					// first .class file is corrupted and not the second one
+					return newErrorStatus(NLS.bind(Messages.classesDifferent, entryName));
+				}
+				// both .class files are corrupted and we need to do a byte comparison in case the .class file is corrupted on purpose
+				if (!Arrays.equals(firstEntryClassFileBytes, secondEntryClassFileBytes)) {
+					return newErrorStatus(NLS.bind(Messages.binaryFilesDifferent, entryName));
+				}
+				return Status.OK_STATUS;
+			}
+			// first .class file is not corrupted but the second one is
+			return newErrorStatus(NLS.bind(Messages.classesDifferent, entryName));
+		}
+		if (!contentsFile1.equals(contentsFile2)) {
 			return newErrorStatus(NLS.bind(Messages.classesDifferent, entryName));
+		}
 		return Status.OK_STATUS;
 	}
 
@@ -256,15 +324,44 @@ public class JarComparator implements IArtifactComparator {
 			String prop1 = props1.getProperty(key);
 			String prop2 = props2.getProperty(key);
 			if (!prop1.equals(prop2)) {
-				if (prop1.length() < 10 && prop2.length() < 10)
+				if (prop1.length() < 15 && prop2.length() < 15)
 					return newErrorStatus(NLS.bind(Messages.differentPropertyValueFull, new String[] {entryName, key, prop1, prop2}));
-				return newErrorStatus(NLS.bind(Messages.differentPropertyValueFull, entryName, key));
+				// strings are too long, report the first bit that is different
+				String[] diff = extractDifference(prop1, prop2);
+				return newErrorStatus(NLS.bind(Messages.differentPropertyValueFull, new String[] {entryName, key, diff[0], diff[1]}));
 			}
 
 		}
 		return Status.OK_STATUS;
 	}
 
+	/*
+	 * Given two different strings return the first segments of those
+	 * strings that illustrate the differences.
+	 */
+	private String[] extractDifference(String s1, String s2) {
+		for (int i = 0; i < s1.length() && i < s2.length(); i++) {
+			if (s1.charAt(i) != s2.charAt(i)) {
+				String result1, result2;
+				boolean truncated;
+				if (i > 3) {
+					truncated = (i + 7) < s1.length();
+					result1 = "..." + s1.substring(i - 3, truncated ? i + 7 : s1.length()) + (truncated ? "..." : ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					truncated = (i + 7) < s2.length();
+					result2 = "..." + s2.substring(i - 3, truncated ? i + 7 : s2.length()) + (truncated ? "..." : ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				} else {
+					truncated = (i + 10) < s1.length();
+					result1 = s1.substring(0, truncated ? i + 10 : s1.length()) + (truncated ? "..." : ""); //$NON-NLS-1$ //$NON-NLS-2$
+					truncated = (i + 10) < s2.length();
+					result2 = s2.substring(0, truncated ? i + 10 : s2.length()) + (truncated ? "..." : ""); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				return new String[] {result1, result2};
+			}
+		}
+		//no differences?
+		return new String[] {s1, s2};
+	}
+
 	private IStatus compareBytes(String entryName, InputStream firstStream, long size1, InputStream secondStream, long size2) throws IOException {
 		byte[] firstBytes = Utility.getInputStreamAsByteArray(firstStream, (int) size1);
 		byte[] secondBytes = Utility.getInputStreamAsByteArray(secondStream, (int) size2);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/MD5ArtifactComparator.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/MD5ArtifactComparator.java
index 754aeb2..44e3471 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/MD5ArtifactComparator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/MD5ArtifactComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Annotation.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Annotation.java
index db3fea4..a17f7a5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Annotation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Annotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponent.java
index 7a1922d..343d0a3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponentValue.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponentValue.java
index 74a2644..d229508 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponentValue.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationComponentValue.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationDefaultAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationDefaultAttribute.java
index 638adb1..c25f013 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationDefaultAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AnnotationDefaultAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AttributeNamesConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AttributeNamesConstants.java
index f4d03fc..c97cc49 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AttributeNamesConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/AttributeNamesConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CharOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CharOperation.java
index 246c66d..2b51674 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CharOperation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CharOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileAttribute.java
index bcc92e7..9d3ee22 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileReader.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileReader.java
index dea13cc..ddefde3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileReader.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -308,7 +308,10 @@ public class ClassFileReader extends ClassFileStruct {
 			}
 		} catch (ClassFormatException e) {
 			throw e;
+		} catch (ArrayIndexOutOfBoundsException e) {
+			throw new ClassFormatException(ClassFormatException.ERROR_TRUNCATED_INPUT);
 		} catch (Exception e) {
+			// need to know what kind of exception can be thrown
 			e.printStackTrace();
 			throw new ClassFormatException(ClassFormatException.ERROR_TRUNCATED_INPUT);
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileStruct.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileStruct.java
index 24e4f64..50fef5c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileStruct.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFileStruct.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFormatException.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFormatException.java
index 32d0542..eb712d6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFormatException.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ClassFormatException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CodeAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CodeAttribute.java
index 70f5f3d..e6c50a7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CodeAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/CodeAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPool.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPool.java
index a6c585a..82eedce 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPool.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPool.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolConstant.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolConstant.java
index abc13b2..2470b25 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolConstant.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolConstant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolEntry.java
index 881356f..21b6f64 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolEntry.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantPoolEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantValueAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantValueAttribute.java
index cfc20ec..5a33f60 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantValueAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ConstantValueAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/DefaultBytecodeVisitor.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/DefaultBytecodeVisitor.java
index 90b8599..b3b532a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/DefaultBytecodeVisitor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/DefaultBytecodeVisitor.java
@@ -1,5 +1,5 @@
 /******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java
index 0572230..2077d8a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Disassembler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/EnclosingMethodAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/EnclosingMethodAttribute.java
index a7daac7..fe8d29b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/EnclosingMethodAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/EnclosingMethodAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionAttribute.java
index 7883c09..74f62af 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionTableEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionTableEntry.java
index 0598acf..4fbb440 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionTableEntry.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ExceptionTableEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/FieldInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/FieldInfo.java
index 46b79c6..aa176ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/FieldInfo.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/FieldInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IModifierConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IModifierConstants.java
index b869fdb..fe6ea83 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IModifierConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IModifierConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IOpcodeMnemonics.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IOpcodeMnemonics.java
index a6de65d..f241243 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IOpcodeMnemonics.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/IOpcodeMnemonics.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttribute.java
index a9202fe..23b71e0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttributeEntry.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttributeEntry.java
index 2c63c8a..d8adcec 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttributeEntry.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/InnerClassesAttributeEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Messages.java
index c190e0b..bc9cd70 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/MethodInfo.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/MethodInfo.java
index 14d57c2..ad5f052 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/MethodInfo.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/MethodInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/OpcodeStringValues.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/OpcodeStringValues.java
index dbc879e..074f7e2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/OpcodeStringValues.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/OpcodeStringValues.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ParameterAnnotation.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ParameterAnnotation.java
index 8f08991..b4d0b7f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ParameterAnnotation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/ParameterAnnotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleAnnotationsAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleAnnotationsAttribute.java
index ef3244b..217628c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleAnnotationsAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleAnnotationsAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleParameterAnnotationsAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleParameterAnnotationsAttribute.java
index b9f4891..0c12b33 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleParameterAnnotationsAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeInvisibleParameterAnnotationsAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleAnnotationsAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleAnnotationsAttribute.java
index 00306e2..d8e90ed 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleAnnotationsAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleAnnotationsAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleParameterAnnotationsAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleParameterAnnotationsAttribute.java
index 1f2b840..4d4ebf2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleParameterAnnotationsAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/RuntimeVisibleParameterAnnotationsAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Signature.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Signature.java
index 7b855bb..e1aa315 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Signature.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Signature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -729,8 +729,17 @@ public final class Signature {
 		// parameters
 		buffer.append('(');
 		char[][] pts = getParameterTypes(methodSignature);
-		for (int i = 0, max = pts.length; i < max; i++) {
-			if (i == max - 1) {
+		// search for the last array in the signature
+		int max = pts.length;
+		int index = max - 1;
+		loop: for (int i = index; i >= 0; i--) {
+			if (pts[i][0] == Signature.C_ARRAY) {
+				break loop;
+			}
+			index--;
+		}
+		for (int i = 0; i < max; i++) {
+			if (i == index) {
 				appendTypeSignature(pts[i], 0, fullyQualifyTypeNames, buffer, isVargArgs);
 			} else {
 				appendTypeSignature(pts[i], 0, fullyQualifyTypeNames, buffer);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SignatureAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SignatureAttribute.java
index f186ca6..81ce793 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SignatureAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SignatureAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SourceFileAttribute.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SourceFileAttribute.java
index 1d51be9..01a01b6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SourceFileAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/SourceFileAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/TypeConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/TypeConstants.java
index 99e3e78..d9c7f4b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/TypeConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/TypeConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Utility.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Utility.java
index 4a982de..41d5fa6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Utility.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/Utility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/messages.properties
index 09a283e..6778600 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/comparator/java/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
+# Copyright (c) 2009, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/FileMirrorLog.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/FileMirrorLog.java
index 8ea5bfa..90995f9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/FileMirrorLog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/FileMirrorLog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/IArtifactMirrorLog.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/IArtifactMirrorLog.java
index 727929d..b138f4f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/IArtifactMirrorLog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/IArtifactMirrorLog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java
index a6a0dc5..dcc6fec 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *  	Compeople AG (Stefan Liebig) - various ongoing maintenance
+ *      Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.p2.internal.repository.mirroring;
 
@@ -15,6 +16,7 @@ import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.artifact.repository.RawMirrorRequest;
 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.internal.repository.tools.Activator;
 import org.eclipse.equinox.p2.internal.repository.tools.Messages;
@@ -43,6 +45,7 @@ public class Mirroring {
 	private String comparatorID;
 	private List<IArtifactKey> keysToMirror;
 	private IArtifactMirrorLog comparatorLog;
+	private Transport transport;
 
 	private IArtifactComparator getComparator() {
 		if (comparator == null)
@@ -192,7 +195,7 @@ public class Mirroring {
 	 * Create, and execute a MirrorRequest for a given descriptor.
 	 */
 	private IStatus downloadArtifact(IArtifactRepository sourceRepo, IArtifactDescriptor destDescriptor, IArtifactDescriptor srcDescriptor) {
-		RawMirrorRequest request = new RawMirrorRequest(srcDescriptor, destDescriptor, destination);
+		RawMirrorRequest request = new RawMirrorRequest(srcDescriptor, destDescriptor, destination, transport);
 		request.perform(sourceRepo, new NullProgressMonitor());
 
 		return request.getResult();
@@ -306,4 +309,8 @@ public class Mirroring {
 	public void setCompareExclusions(IQuery<IArtifactDescriptor> excludedKeys) {
 		compareExclusionQuery = excludedKeys;
 	}
+
+	public void setTransport(Transport transport) {
+		this.transport = transport;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/XMLMirrorLog.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/XMLMirrorLog.java
index 0b488f7..2715fb7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/XMLMirrorLog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/XMLMirrorLog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/AbstractApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/AbstractApplication.java
index 6f4db17..6b3ee5d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/AbstractApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/AbstractApplication.java
@@ -58,17 +58,17 @@ public abstract class AbstractApplication {
 	private void setupAgent() throws ProvisionException {
 		//note if we ever wanted these applications to act on a different agent than
 		//the currently running system we would need to set it here
-		ServiceReference agentRef = Activator.getBundleContext().getServiceReference(IProvisioningAgent.SERVICE_NAME);
+		ServiceReference<IProvisioningAgent> agentRef = Activator.getBundleContext().getServiceReference(IProvisioningAgent.class);
 		if (agentRef != null) {
-			agent = (IProvisioningAgent) Activator.getBundleContext().getService(agentRef);
+			agent = Activator.getBundleContext().getService(agentRef);
 			if (agent != null)
 				return;
 		}
 		//there is no agent around so we need to create one
-		ServiceReference providerRef = Activator.getBundleContext().getServiceReference(IProvisioningAgentProvider.SERVICE_NAME);
+		ServiceReference<IProvisioningAgentProvider> providerRef = Activator.getBundleContext().getServiceReference(IProvisioningAgentProvider.class);
 		if (providerRef == null)
 			throw new RuntimeException("No provisioning agent provider is available"); //$NON-NLS-1$
-		IProvisioningAgentProvider provider = (IProvisioningAgentProvider) Activator.getBundleContext().getService(providerRef);
+		IProvisioningAgentProvider provider = Activator.getBundleContext().getService(providerRef);
 		if (provider == null)
 			throw new RuntimeException("No provisioning agent provider is available"); //$NON-NLS-1$
 		//obtain agent for currently running system
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Activator.java
index 7d0c203..5dac08c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/ArtifactRepositoryValidator.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/ArtifactRepositoryValidator.java
index 3748fc1..72c0211 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/ArtifactRepositoryValidator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/ArtifactRepositoryValidator.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.p2.internal.repository.tools;
 
 import org.eclipse.equinox.p2.repository.tools.comparator.ArtifactComparatorFactory;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java
index 6945445..03d3a1f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository;
+import org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository;
 import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
@@ -121,6 +122,8 @@ public class CompositeRepositoryApplication extends AbstractApplication {
 			//No existing repository; create a new repository at destinationLocation but with source's attributes.
 			IArtifactRepository repo = mgr.createRepository(toInit.getRepoLocation(), toInit.getName() != null ? toInit.getName() : (source != null ? source.getName() : Messages.CompositeRepository_default_artifactRepo_name), IArtifactRepositoryManager.TYPE_COMPOSITE_REPOSITORY, source != null ? source.getProperties() : null);
 			initRepository(repo, toInit);
+			if (toInit.getAtomic() != null)
+				repo.setProperty(CompositeMetadataRepository.PROP_ATOMIC_LOADING, Boolean.toString(Boolean.valueOf(toInit.getAtomic())));
 			return repo;
 		} catch (IllegalStateException e) {
 			mgr.removeRepository(toInit.getRepoLocation());
@@ -159,6 +162,8 @@ public class CompositeRepositoryApplication extends AbstractApplication {
 			//No existing repository; create a new repository at destinationLocation but with source's attributes.
 			IMetadataRepository repo = mgr.createRepository(toInit.getRepoLocation(), toInit.getName() != null ? toInit.getName() : (source != null ? source.getName() : Messages.CompositeRepository_default_metadataRepo_name), IMetadataRepositoryManager.TYPE_COMPOSITE_REPOSITORY, source != null ? source.getProperties() : null);
 			initRepository(repo, toInit);
+			if (toInit.getAtomic() != null)
+				repo.setProperty(CompositeMetadataRepository.PROP_ATOMIC_LOADING, Boolean.toString(Boolean.valueOf(toInit.getAtomic())));
 			return repo;
 		} catch (IllegalStateException e) {
 			mgr.removeRepository(toInit.getRepoLocation());
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java
index d3c0aaf..47cc723 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
index 30fca24..10aebd4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,10 +19,14 @@ import org.eclipse.equinox.app.IApplication;
 import org.eclipse.equinox.app.IApplicationContext;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
 import org.eclipse.equinox.internal.p2.director.PermissiveSlicer;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper;
 import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.engine.*;
 import org.eclipse.equinox.p2.internal.repository.mirroring.*;
 import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 import org.eclipse.equinox.p2.query.*;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
@@ -211,6 +215,7 @@ public class MirrorApplication extends AbstractApplication implements IApplicati
 		mirror.setBaseline(initializeBaseline());
 		mirror.setValidate(validate);
 		mirror.setCompareExclusions(compareExclusions);
+		mirror.setTransport((Transport) agent.getService(Transport.SERVICE_NAME));
 
 		// If IUs have been specified then only they should be mirrored, otherwise mirror everything.
 		if (keys.size() > 0)
@@ -318,9 +323,31 @@ public class MirrorApplication extends AbstractApplication implements IApplicati
 		return new FileMirrorLog(absolutePath, 0, root);
 	}
 
+	private IQueryable<IInstallableUnit> performResolution(IProgressMonitor monitor) throws ProvisionException {
+		IProfileRegistry registry = Activator.getProfileRegistry();
+		String profileId = "MirrorApplication-" + System.currentTimeMillis(); //$NON-NLS-1$
+		IProfile profile = registry.addProfile(profileId, slicingOptions.getFilter());
+		IPlanner planner = (IPlanner) Activator.getAgent().getService(IPlanner.SERVICE_NAME);
+		if (planner == null)
+			throw new IllegalStateException();
+		IProfileChangeRequest pcr = planner.createChangeRequest(profile);
+		pcr.addAll(sourceIUs);
+		IProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, monitor);
+		registry.removeProfile(profileId);
+		@SuppressWarnings("unchecked")
+		IQueryable<IInstallableUnit>[] arr = new IQueryable[plan.getInstallerPlan() == null ? 1 : 2];
+		arr[0] = plan.getAdditions();
+		if (plan.getInstallerPlan() != null)
+			arr[1] = plan.getInstallerPlan().getAdditions();
+		return new CompoundQueryable<IInstallableUnit>(arr);
+	}
+
 	private IQueryable<IInstallableUnit> slice(IProgressMonitor monitor) throws ProvisionException {
 		if (slicingOptions == null)
 			slicingOptions = new SlicingOptions();
+		if (slicingOptions.getInstallTimeLikeResolution())
+			return performResolution(monitor);
+
 		PermissiveSlicer slicer = new PermissiveSlicer(getCompositeMetadataRepository(), slicingOptions.getFilter(), slicingOptions.includeOptionalDependencies(), slicingOptions.isEverythingGreedy(), slicingOptions.forceFilterTo(), slicingOptions.considerStrictDependencyOnly(), slicingOptions.followOnlyFilteredRequirements());
 		IQueryable<IInstallableUnit> slice = slicer.slice(sourceIUs.toArray(new IInstallableUnit[sourceIUs.size()]), monitor);
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RecreateRepositoryApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RecreateRepositoryApplication.java
index bd2a2b8..7aea221 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RecreateRepositoryApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RecreateRepositoryApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -127,11 +127,11 @@ public class RecreateRepositoryApplication extends AbstractApplication {
 					unpackedSize = size;
 				}
 
-				repository.addDescriptor(newDescriptor);
+				repository.addDescriptor(newDescriptor, null);
 			}
 			if (packFile != null && !files.contains(packFile) && packFile.length() > 0) {
 				ArtifactDescriptor packDescriptor = createPack200ArtifactDescriptor(key, packFile, unpackedSize);
-				repository.addDescriptor(packDescriptor);
+				repository.addDescriptor(packDescriptor, null);
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RepositoryDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RepositoryDescriptor.java
index 01dd76f..6b1d9c0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RepositoryDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/RepositoryDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class RepositoryDescriptor {
 	private int kind = TYPE_BOTH;
 	private URI originalLocation = null;
 	private boolean optional = false;
+	private String atomic = null;
 
 	public void setCompressed(boolean compress) {
 		compressed = compress;
@@ -103,6 +104,14 @@ public class RepositoryDescriptor {
 		kind = determineKind(repoKind);
 	}
 
+	public void setAtomic(String booleanForAtomic) {
+		atomic = booleanForAtomic;
+	}
+
+	public String getAtomic() {
+		return atomic;
+	}
+
 	/*
 	 * Determine the repository type
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java
index 4909ca8..b38d811 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,8 @@ public class SlicingOptions {
 	private boolean considerStrictDependencyOnly = false;
 	private boolean followOnlyFilteredRequirements = false;
 	private boolean latestVersion = false;
+	private boolean resolve = false;
+
 	private Map<String, String> filter = null;
 
 	public boolean includeOptionalDependencies() {
@@ -79,4 +81,12 @@ public class SlicingOptions {
 	public void latestVersionOnly(boolean latest) {
 		this.latestVersion = latest;
 	}
+
+	public void installTimeLikeResolution(boolean resolve) {
+		this.resolve = resolve;
+	}
+
+	public boolean getInstallTimeLikeResolution() {
+		return resolve;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/HostCheckAnalyzer.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/HostCheckAnalyzer.java
index 4930df9..51c2640 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/HostCheckAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/HostCheckAnalyzer.java
@@ -1,11 +1,12 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2011 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   EclipseSource - initial API and implementation
+*   IBM Corporation - Ongoing development
 ******************************************************************************/
 package org.eclipse.equinox.p2.internal.repository.tools.analyzer;
 
@@ -34,7 +35,7 @@ public class HostCheckAnalyzer extends IUAnalyzer {
 			for (IRequirement req : hosts) {
 				IMatchExpression<IInstallableUnit> hostMatch = req.getMatches();
 				String namespace = RequiredCapability.extractNamespace(hostMatch);
-				if ("osgi.bundle".equals(namespace)) {
+				if ("osgi.bundle".equals(namespace)) { //$NON-NLS-1$
 					String name = RequiredCapability.extractName(hostMatch);
 					VersionRange range = RequiredCapability.extractRange(hostMatch);
 					IQueryResult<IInstallableUnit> results = repository.query(QueryUtil.createIUQuery(name, range), new NullProgressMonitor());
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/IUCounting.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/IUCounting.java
index 79d53cd..9acf6bf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/IUCounting.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/IUCounting.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/LicenseAnalyzer.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/LicenseAnalyzer.java
index 9931553..313f5b0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/LicenseAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/LicenseAnalyzer.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
- * Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+ * Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UniqueIUAnalyzer.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UniqueIUAnalyzer.java
index 8e589bf..a81f8bd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UniqueIUAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UniqueIUAnalyzer.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UnzipFeatureJarAnalyzer.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UnzipFeatureJarAnalyzer.java
index 07b44f2..3a34675 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UnzipFeatureJarAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/UnzipFeatureJarAnalyzer.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/VersionAnalyzer.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/VersionAnalyzer.java
index a43a106..4c3ac95 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/VersionAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/analyzer/VersionAnalyzer.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties
index 49f3791..aef9767 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
+# Copyright (c) 2009, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/repository/tools/analyzer/IIUAnalyzer.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/repository/tools/analyzer/IIUAnalyzer.java
index 2e5ddc4..bc7f4d6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/repository/tools/analyzer/IIUAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/repository/tools/analyzer/IIUAnalyzer.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/AntMirrorLog.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/AntMirrorLog.java
index 5c7d04d..4b05b05 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/AntMirrorLog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/AntMirrorLog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java
index ed43072..9ff4e3d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.p2.internal.repository.tools.tasks;
 
 import java.util.HashMap;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java
index 023ce05..6b576a2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,21 @@ public class CompositeRepositoryTask extends AbstractRepositoryTask {
 	 * Add the listed repositories to the composite repository
 	 */
 	public void addConfiguredAdd(RepositoryList list) {
+		if (list.getRepoLocation() != null) {
+			RepositoryDescriptor descriptor = new RepositoryDescriptor();
+			//don't use RepositoryList#getRepoLocationURI() because we want relative URIs if they were specified
+			try {
+				descriptor.setLocation(URIUtil.fromString(list.getRepoLocation()));
+				descriptor.setOptional(list.isOptional());
+				if (!list.isBoth()) {
+					descriptor.setKind(list.isArtifact() ? RepositoryDescriptor.KIND_ARTIFACT : RepositoryDescriptor.KIND_METADATA);
+				}
+				((CompositeRepositoryApplication) application).addChild(descriptor);
+			} catch (URISyntaxException e) {
+				//no good
+			}
+		}
+
 		for (DestinationRepository repo : list.getRepositoryList()) {
 			((CompositeRepositoryApplication) application).addChild(repo.getDescriptor());
 		}
@@ -54,6 +69,20 @@ public class CompositeRepositoryTask extends AbstractRepositoryTask {
 	 * Remove the listed repositories from the composite repository
 	 */
 	public void addConfiguredRemove(RepositoryList list) {
+		if (list.getRepoLocation() != null) {
+			RepositoryDescriptor descriptor = new RepositoryDescriptor();
+			try {
+				//don't use RepositoryList#getRepoLocationURI() because we want relative URIs if they were specified
+				descriptor.setLocation(URIUtil.fromString(list.getRepoLocation()));
+				descriptor.setOptional(list.isOptional());
+				if (!list.isBoth()) {
+					descriptor.setKind(list.isArtifact() ? RepositoryDescriptor.KIND_ARTIFACT : RepositoryDescriptor.KIND_METADATA);
+				}
+				((CompositeRepositoryApplication) application).removeChild(descriptor);
+			} catch (URISyntaxException e) {
+				// no good, don't remove
+			}
+		}
 		for (DestinationRepository repo : list.getRepositoryList()) {
 			((CompositeRepositoryApplication) application).removeChild(repo.getDescriptor());
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CreateCompositeArtifactRepositoryTask.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CreateCompositeArtifactRepositoryTask.java
index cac2fd1..5cfac91 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CreateCompositeArtifactRepositoryTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CreateCompositeArtifactRepositoryTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     SAP AG - repository atomic loading
  *******************************************************************************/
 package org.eclipse.equinox.p2.internal.repository.tools.tasks;
 
@@ -30,6 +31,7 @@ public class CreateCompositeArtifactRepositoryTask extends Task {
 
 	URI location; // desired location of the composite repository
 	String name = "Composite Artifact Repository";
+	boolean atomic = false;
 	boolean compressed = true;
 	boolean failOnExists = false; // should we fail if a repo already exists?
 	Map<String, String> properties = new HashMap<String, String>();
@@ -67,6 +69,8 @@ public class CreateCompositeArtifactRepositoryTask extends Task {
 		// set the properties
 		if (compressed)
 			properties.put(IRepository.PROP_COMPRESSED, Boolean.toString(true));
+		if (atomic)
+			properties.put(CompositeArtifactRepository.PROP_ATOMIC_LOADING, Boolean.toString(true));
 
 		// create the repository
 		try {
@@ -108,6 +112,13 @@ public class CreateCompositeArtifactRepositoryTask extends Task {
 	}
 
 	/*
+	 * Set a value indicating whether or not the repository should be atomic.
+	 */
+	public void setAtomic(boolean value) {
+		atomic = value;
+	}
+
+	/*
 	 * Set whether or not we should fail the operation if a repository
 	 * already exists at the location.
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/DestinationRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/DestinationRepository.java
index 71602d5..6c520f1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/DestinationRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/DestinationRepository.java
@@ -52,6 +52,10 @@ public class DestinationRepository extends DataType {
 		descriptor.setKind(repoKind);
 	}
 
+	public void setAtomic(String atomicAsBoolean) {
+		descriptor.setAtomic(atomicAsBoolean);
+	}
+
 	RepositoryDescriptor getDescriptor() {
 		return descriptor;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java
index dc5ffe5..abee0f0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java
index d9ccbfc..902cf3d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java
index 07f1bcb..3fd6fec 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java
index 8221b13..6368f01 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ProcessRepoTask.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ProcessRepoTask.java
index aa069e1..2cc28cb 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ProcessRepoTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ProcessRepoTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java
index f0af711..a25b594 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryFileSet.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryFileSet.java
index 2abccae..b2cb9b3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryFileSet.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryFileSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryList.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryList.java
index 8f31ce3..7d51e93 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryList.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/RepositoryList.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java
index fe94b51..ca62720 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class SlicingOption extends Task {
 		options.everythingGreedy(true);
 		options.includeOptionalDependencies(true);
 		options.followOnlyFilteredRequirements(false);
+		options.installTimeLikeResolution(false);
 		setIncludeFeatures(true);
 	}
 
@@ -104,7 +105,12 @@ public class SlicingOption extends Task {
 		options.latestVersionOnly(latest);
 	}
 
+	public void setResolve(boolean resolve) {
+		options.installTimeLikeResolution(resolve);
+	}
+
 	public SlicingOptions getOptions() {
 		return options;
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/TaskHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/TaskHelper.java
index 72d051e..7c6a3d9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/TaskHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/TaskHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009 IBM Corporation and others.
+ *  Copyright (c) 2009, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
index 2212b0d..692c9c6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/META-INF/MANIFEST.MF
@@ -2,16 +2,25 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.repository;singleton:=true
-Bundle-Version: 2.0.2.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.repository.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.equinox.internal.p2.persistence;x-friends:="org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.engine,org.eclipse.equinox.p2.metadata.repository",
- org.eclipse.equinox.internal.p2.repository;x-friends:="org.eclipse.equinox.p2.artifact.repository,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.updatesite",
+Export-Package: org.eclipse.equinox.internal.p2.persistence;
+  x-friends:="org.eclipse.equinox.p2.artifact.repository,
+   org.eclipse.equinox.p2.engine,
+   org.eclipse.equinox.p2.metadata.repository,
+   org.eclipse.equinox.p2.ui.importexport,
+   org.eclipse.equinox.p2.repository.tools",
+ org.eclipse.equinox.internal.p2.repository;
+  x-friends:="org.eclipse.equinox.p2.artifact.repository,
+   org.eclipse.equinox.p2.metadata.repository,
+   org.eclipse.equinox.p2.updatesite,
+   org.eclipse.equinox.p2.repository.tools,
+   org.eclipse.equinox.p2.transport.ecf",
  org.eclipse.equinox.internal.p2.repository.helpers;
   x-friends:="org.eclipse.equinox.p2.artifact.repository,
    org.eclipse.equinox.p2.exemplarysetup,
-   org.eclipse.equinox.p2.metadata.generator,
    org.eclipse.equinox.p2.metadata.repository,
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.repository.tools,
@@ -25,10 +34,7 @@ Export-Package: org.eclipse.equinox.internal.p2.persistence;x-friends:="org.ecli
  org.eclipse.equinox.p2.repository.metadata.spi;version="2.0.0",
  org.eclipse.equinox.p2.repository.spi;version="2.0.0"
 Require-Bundle: org.eclipse.equinox.common,
- org.eclipse.ecf.filetransfer,
- org.eclipse.ecf,
- org.eclipse.equinox.registry;bundle-version="3.3.0",
- org.eclipse.ecf.provider.filetransfer;bundle-version="3.0.1"
+ org.eclipse.equinox.registry;bundle-version="3.3.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5,
  J2SE-1.4,
  CDC-1.1/Foundation-1.1
@@ -49,10 +55,10 @@ Import-Package: javax.xml.parsers,
  org.eclipse.equinox.security.storage,
  org.eclipse.osgi.service.debug,
  org.eclipse.osgi.util;version="1.1.0",
- org.osgi.framework;version="1.3.0",
+ org.osgi.framework;version="1.6.0",
  org.osgi.service.packageadmin;version="1.2.0",
  org.osgi.service.prefs;version="1.0.0",
- org.osgi.util.tracker;version="1.3.0",
+ org.osgi.util.tracker;version="1.4.0",
  org.xml.sax,
  org.xml.sax.helpers
 Service-Component: OSGI-INF/cacheManager.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.repository/build.properties
index 82222b8..3da448f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.repository/pom.xml
index 3e15abe..df8ce6c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.repository</artifactId>
-  <version>2.0.0.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java
index c3d91c1..a112f8b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,15 +10,14 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.persistence;
 
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.metadata.VersionRange;
-
 import java.io.*;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 import javax.xml.parsers.ParserConfigurationException;
 import org.eclipse.equinox.internal.p2.core.helpers.OrderedProperties;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.metadata.VersionRange;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.BundleContext;
 import org.xml.sax.*;
@@ -170,6 +169,9 @@ public class CompositeParser extends XMLParser implements XMLConstants {
 	}
 
 	public void parse(File file) throws IOException {
+		// don't overwrite if we already have a filename/location
+		if (errorContext == null)
+			setErrorContext(file.getAbsolutePath());
 		parse(new FileInputStream(file));
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryIO.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryIO.java
index 2a5b167..5b14902 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryIO.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryIO.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,13 +10,12 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.persistence;
 
-import org.eclipse.equinox.p2.core.ProvisionException;
-
 import java.io.*;
 import java.net.URL;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.Activator;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.osgi.util.NLS;
 
 /**
@@ -61,6 +60,7 @@ public class CompositeRepositoryIO {
 			try {
 				bufferedInput = new BufferedInputStream(input);
 				CompositeParser repositoryParser = new CompositeParser(Activator.getContext(), Activator.ID, type);
+				repositoryParser.setErrorContext(location.toExternalForm());
 				repositoryParser.parse(input);
 				IStatus result = repositoryParser.getStatus();
 				switch (result.getSeverity()) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryState.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryState.java
index 8a5fe98..985370b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryState.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeRepositoryState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeWriter.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeWriter.java
index 81d064f..c48b7bc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeWriter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLConstants.java
index c0849e3..f1af9f1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLParser.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLParser.java
index f34da70..01aa1a3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLParser.java
@@ -39,13 +39,14 @@ public abstract class XMLParser extends DefaultHandler implements XMLConstants {
 	protected String bundleId; // parser class bundle id
 
 	protected XMLReader xmlReader; // the XML reader for the parser
+	protected String errorContext; // some context of what we are parsing in case there is an error
 
 	protected MultiStatus status = null; // accumulation of non-fatal errors
 	protected Locator locator = null; // document locator, if supported by the parser
 
 	private IProgressMonitor monitor;
 
-	private static ServiceTracker xmlTracker = null;
+	private static ServiceTracker<SAXParserFactory, SAXParserFactory> xmlTracker = null;
 
 	public XMLParser(BundleContext context, String pluginId) {
 		super();
@@ -66,10 +67,10 @@ public abstract class XMLParser extends DefaultHandler implements XMLConstants {
 
 	private synchronized static SAXParserFactory acquireXMLParsing(BundleContext context) {
 		if (xmlTracker == null) {
-			xmlTracker = new ServiceTracker(context, SAXParserFactory.class.getName(), null);
+			xmlTracker = new ServiceTracker<SAXParserFactory, SAXParserFactory>(context, SAXParserFactory.class, null);
 			xmlTracker.open();
 		}
-		return (SAXParserFactory) xmlTracker.getService();
+		return xmlTracker.getService();
 	}
 
 	protected synchronized static void releaseXMLParsing() {
@@ -527,6 +528,8 @@ public abstract class XMLParser extends DefaultHandler implements XMLConstants {
 				: " (" + getRootObject() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		if (this.locator != null) {
 			String name = this.locator.getSystemId();
+			if (errorContext != null && (name == null || name.trim().length() == 0))
+				name = errorContext;
 			line = this.locator.getLineNumber();
 			column = this.locator.getColumnNumber();
 			if (line > 0) {
@@ -724,6 +727,10 @@ public abstract class XMLParser extends DefaultHandler implements XMLConstants {
 		return -1;
 	}
 
+	public void setErrorContext(String errorContext) {
+		this.errorContext = errorContext;
+	}
+
 	//	public class BadStateError extends AssertionError {
 	//		private static final long serialVersionUID = 1L; // not serialized
 	//
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java
index af517d1..69fd8e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/XMLWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Activator.java
index 695e287..196f09f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -9,15 +9,12 @@
  * 	Cloudsmith Inc - initial API and implementation
  * 	IBM Corporation - ongoing development
  * 	Genuitec - Bug 291926
+ *  Sonatype, Inc. - transport split
  ******************************************************************************/
 package org.eclipse.equinox.internal.p2.repository;
 
-import org.eclipse.ecf.filetransfer.service.IRetrieveFileTransferFactory;
-import org.eclipse.ecf.provider.filetransfer.IFileTransferProtocolToFactoryMapper;
-import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
 
 /**
  * The activator class controls the plug-in life cycle.
@@ -27,143 +24,19 @@ import org.osgi.util.tracker.ServiceTracker;
 public class Activator implements BundleActivator {
 
 	public static final String ID = "org.eclipse.equinox.p2.repository"; //$NON-NLS-1$
-	private static final String HTTP = "http"; //$NON-NLS-1$
-	private static final String HTTPS = "https"; //$NON-NLS-1$
 
 	private static BundleContext context;
-	// tracker for ECF service
-	private ServiceTracker retrievalFactoryTracker;
-
-	// tracker for protocolToFactoryMapperTracker
-	private ServiceTracker protocolToFactoryMapperTracker = null;
-
-	// The shared instance
-	private static Activator plugin;
 
 	public void start(BundleContext aContext) throws Exception {
 		Activator.context = aContext;
-		Activator.plugin = this;
 	}
 
 	public void stop(BundleContext aContext) throws Exception {
-		Activator.context = null;
-		Activator.plugin = null;
-		if (retrievalFactoryTracker != null) {
-			retrievalFactoryTracker.close();
-			retrievalFactoryTracker = null;
-		}
-		if (protocolToFactoryMapperTracker != null) {
-			protocolToFactoryMapperTracker.close();
-			protocolToFactoryMapperTracker = null;
-		}
-
+		Activator.context = aContext;
 	}
 
 	public static BundleContext getContext() {
 		return Activator.context;
 	}
 
-	/**
-	 * Get singleton instance.
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns a {@link IRetrieveFileTransferFactory} using a {@link ServiceTracker} after having attempted
-	 * to start the bundle "org.eclipse.ecf.provider.filetransfer". If something is wrong with the configuration
-	 * this method returns null.
-	 * @return a factory, or null, if configuration is incorrect
-	 */
-	public IRetrieveFileTransferFactory getRetrieveFileTransferFactory() {
-		return (IRetrieveFileTransferFactory) getFileTransferServiceTracker().getService();
-	}
-
-	public synchronized void useJREHttpClient() {
-		IFileTransferProtocolToFactoryMapper mapper = getProtocolToFactoryMapper();
-		if (mapper != null) {
-			// remove http
-			// Remove browse provider
-			String providerId = mapper.getBrowseFileTransferFactoryId(HTTP);
-			if (providerId != null) {
-				mapper.removeBrowseFileTransferFactory(providerId);
-			}
-			// Remove retrieve provider
-			providerId = mapper.getRetrieveFileTransferFactoryId(HTTP);
-			if (providerId != null) {
-				mapper.removeRetrieveFileTransferFactory(providerId);
-			}
-			// Remove send provider
-			providerId = mapper.getSendFileTransferFactoryId(HTTP);
-			if (providerId != null) {
-				mapper.removeSendFileTransferFactory(providerId);
-			}
-			// remove https
-			// Remove browse provider
-			providerId = mapper.getBrowseFileTransferFactoryId(HTTPS);
-			if (providerId != null) {
-				mapper.removeBrowseFileTransferFactory(providerId);
-			}
-			// Remove retrieve provider
-			providerId = mapper.getRetrieveFileTransferFactoryId(HTTPS);
-			if (providerId != null) {
-				mapper.removeRetrieveFileTransferFactory(providerId);
-			}
-			// Remove send provider
-			providerId = mapper.getSendFileTransferFactoryId(HTTPS);
-			if (providerId != null) {
-				mapper.removeSendFileTransferFactory(providerId);
-			}
-		}
-	}
-
-	/**
-	 * Gets the singleton ServiceTracker for the IRetrieveFileTransferFactory and starts the bundles
-	 * "org.eclipse.ecf" and
-	 * "org.eclipse.ecf.provider.filetransfer" on first call.
-	 * @return  ServiceTracker
-	 */
-	private synchronized ServiceTracker getFileTransferServiceTracker() {
-		if (retrievalFactoryTracker == null) {
-			retrievalFactoryTracker = new ServiceTracker(Activator.getContext(), IRetrieveFileTransferFactory.class.getName(), null);
-			retrievalFactoryTracker.open();
-			startBundle("org.eclipse.ecf"); //$NON-NLS-1$
-			startBundle("org.eclipse.ecf.provider.filetransfer"); //$NON-NLS-1$
-		}
-		return retrievalFactoryTracker;
-	}
-
-	private IFileTransferProtocolToFactoryMapper getProtocolToFactoryMapper() {
-		if (protocolToFactoryMapperTracker == null) {
-			protocolToFactoryMapperTracker = new ServiceTracker(context, IFileTransferProtocolToFactoryMapper.class.getName(), null);
-			protocolToFactoryMapperTracker.open();
-		}
-		return (IFileTransferProtocolToFactoryMapper) protocolToFactoryMapperTracker.getService();
-	}
-
-	private boolean startBundle(String bundleId) {
-		PackageAdmin packageAdmin = (PackageAdmin) ServiceHelper.getService(Activator.getContext(), PackageAdmin.class.getName());
-		if (packageAdmin == null)
-			return false;
-
-		Bundle[] bundles = packageAdmin.getBundles(bundleId, null);
-		if (bundles != null && bundles.length > 0) {
-			for (int i = 0; i < bundles.length; i++) {
-				try {
-					if ((bundles[i].getState() & Bundle.INSTALLED) == 0) {
-						bundles[i].start(Bundle.START_ACTIVATION_POLICY);
-						bundles[i].start(Bundle.START_TRANSIENT);
-						return true;
-					}
-				} catch (BundleException e) {
-					// failed, try next bundle
-				}
-			}
-		}
-		return false;
-	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
index a772bee..234b974 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@ import java.net.URI;
 import java.util.EventObject;
 import java.util.HashSet;
 import org.eclipse.core.runtime.*;
-import org.eclipse.ecf.filetransfer.UserCancelledException;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
 import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
 import org.eclipse.equinox.internal.provisional.p2.core.eventbus.SynchronousProvisioningListener;
@@ -44,6 +43,8 @@ public class CacheManager {
 
 	private final IAgentLocation agentLocation;
 
+	private final Transport transport;
+
 	/**
 	 * IStateful implementation of BufferedOutputStream. Class is used to get the status from
 	 * a download operation.
@@ -66,8 +67,9 @@ public class CacheManager {
 
 	}
 
-	public CacheManager(IAgentLocation agentLocation) {
+	public CacheManager(IAgentLocation agentLocation, Transport transport) {
 		this.agentLocation = agentLocation;
+		this.transport = transport;
 	}
 
 	private static SynchronousProvisioningListener busListener;
@@ -129,7 +131,7 @@ public class CacheManager {
 			// bug 269588 - server may return 0 when file exists, so extra flag is needed
 			boolean useJar = true;
 			try {
-				lastModifiedRemote = getTransport().getLastModified(jarLocation, submonitor.newChild(1));
+				lastModifiedRemote = transport.getLastModified(jarLocation, submonitor.newChild(1));
 				if (lastModifiedRemote <= 0)
 					LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "Server returned lastModified <= 0 for " + jarLocation)); //$NON-NLS-1$
 			} catch (AuthenticationFailedException e) {
@@ -160,21 +162,19 @@ public class CacheManager {
 				// There is a jar, and it should be used - cache is stale if it is xml based or
 				// if older (irrespective of jar or xml).
 				// Bug 269588 - also stale if remote reports 0
-				stale = lastModifiedRemote > lastModified || (name != null && name.endsWith(XML_EXTENSION) || lastModifiedRemote <= 0);
+				stale = lastModifiedRemote != lastModified || (name != null && name.endsWith(XML_EXTENSION) || lastModifiedRemote <= 0);
 			} else {
 				// Also need to check remote XML file, and handle cancel, and errors
 				// (Status is reported based on finding the XML file as giving up on certain errors
 				// when checking for the jar may not be correct).
 				try {
-					lastModifiedRemote = getTransport().getLastModified(xmlLocation, submonitor.newChild(1));
+					lastModifiedRemote = transport.getLastModified(xmlLocation, submonitor.newChild(1));
 					// if lastModifiedRemote is 0 - something is wrong in the communication stack, as 
 					// a FileNotFound exception should have been thrown.
 					// bug 269588 - server may return 0 when file exists - site is not correctly configured
 					if (lastModifiedRemote <= 0)
 						LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "Server returned lastModified <= 0 for " + xmlLocation)); //$NON-NLS-1$
 
-				} catch (UserCancelledException e) {
-					throw new OperationCanceledException();
 				} catch (FileNotFoundException e) {
 					throw new FileNotFoundException(NLS.bind(Messages.CacheManager_Neither_0_nor_1_found, jarLocation, xmlLocation));
 				} catch (AuthenticationFailedException e) {
@@ -192,7 +192,7 @@ public class CacheManager {
 				// There is an xml, and it should be used - cache is stale if it is jar based or
 				// if older (irrespective of jar or xml).
 				// bug 269588 - server may return 0 when file exists - assume it is stale
-				stale = lastModifiedRemote > lastModified || (name != null && name.endsWith(JAR_EXTENSION) || lastModifiedRemote <= 0);
+				stale = lastModifiedRemote != lastModified || (name != null && name.endsWith(JAR_EXTENSION) || lastModifiedRemote <= 0);
 				useExtension = XML_EXTENSION;
 				remoteFile = xmlLocation;
 			}
@@ -261,10 +261,6 @@ public class CacheManager {
 		return files;
 	}
 
-	private RepositoryTransport getTransport() {
-		return RepositoryTransport.getInstance();
-	}
-
 	/**
 	 * Adds a {@link SynchronousProvisioningListener} to the event bus for
 	 * deleting cache files when the corresponding repository is deleted.
@@ -334,7 +330,7 @@ public class CacheManager {
 		IStatus result = null;
 		try {
 			submonitor.setWorkRemaining(1000);
-			result = getTransport().download(remoteFile, stream, submonitor.newChild(1000));
+			result = transport.download(remoteFile, stream, submonitor.newChild(1000));
 		} catch (OperationCanceledException e) {
 			// need to pick up the status - a new operation canceled exception is thrown at the end
 			// as status will be CANCEL.
@@ -348,8 +344,14 @@ public class CacheManager {
 		if (result.isOK()) {
 			if (cacheFile.exists())
 				safeDelete(cacheFile);
-			if (tempFile.renameTo(cacheFile))
+			if (tempFile.renameTo(cacheFile)) {
+				if (lastModifiedRemote != -1 && lastModifiedRemote != 0) {
+					//local cache file should have the same lastModified as the server's file. bug 324200
+					cacheFile.setLastModified(lastModifiedRemote);
+				}
 				return;
+			}
+			result = new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.CacheManage_ErrorRenamingCache, new Object[] {remoteFile.toString(), tempFile.getAbsolutePath(), cacheFile.getAbsolutePath()}));
 		}
 
 		if (result.getSeverity() == IStatus.CANCEL || submonitor.isCanceled())
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManagerComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManagerComponent.java
index 26d5851..5c617e4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManagerComponent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManagerComponent.java
@@ -19,7 +19,7 @@ public class CacheManagerComponent implements IAgentServiceFactory {
 
 	public Object createService(IProvisioningAgent agent) {
 		final IProvisioningEventBus eventBus = (IProvisioningEventBus) agent.getService(IProvisioningEventBus.SERVICE_NAME);
-		CacheManager cache = new CacheManager((IAgentLocation) agent.getService(IAgentLocation.SERVICE_NAME));
+		CacheManager cache = new CacheManager((IAgentLocation) agent.getService(IAgentLocation.SERVICE_NAME), (Transport) agent.getService(Transport.SERVICE_NAME));
 		cache.setEventBus(eventBus);
 		return cache;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Credentials.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Credentials.java
index 0a9bb7e..3097572 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Credentials.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Credentials.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009,2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * The code, documentation and other materials contained herein have been
  * licensed under the Eclipse Public License - v 1.0 by the copyright holder
  * listed above, as the Initial Contributor under such license. The text of
@@ -18,11 +18,9 @@ import java.net.URI;
 import java.net.URLEncoder;
 import java.util.*;
 import org.eclipse.core.runtime.*;
-import org.eclipse.ecf.filetransfer.UserCancelledException;
 import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
 import org.eclipse.equinox.internal.p2.repository.helpers.DebugHelper;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.core.UIServices;
+import org.eclipse.equinox.p2.core.*;
 import org.eclipse.equinox.p2.repository.IRepository;
 import org.eclipse.equinox.security.storage.*;
 
@@ -65,7 +63,7 @@ public class Credentials {
 	 * @param prompt - use <code>true</code> to prompt the user instead of
 	 * looking at the secure preference store for login, use <code>false</code>
 	 * to only try the secure preference store
-	 * @throws UserCancelledException when the user cancels the login prompt
+	 * @throws LoginCanceledException when the user cancels the login prompt
 	 * @throws CoreException if the password cannot be read or saved
 	 * @return The authentication info.
 	 */
@@ -88,7 +86,7 @@ public class Credentials {
 	 * @param prompt - if true, user will be prompted for information
 	 * @param lastUsed - optional information used in an previous attempt to login
 	 * @return AuthenticationInfo, or null if there was no information available
-	 * @throws UserCancelledException - user canceled the prompt for name/password
+	 * @throws LoginCanceledException - user canceled the prompt for name/password
 	 * @throws CoreException if there is an error
 	 */
 	public static UIServices.AuthenticationInfo forLocation(URI location, boolean prompt, UIServices.AuthenticationInfo lastUsed) throws LoginCanceledException, CoreException {
@@ -106,7 +104,7 @@ public class Credentials {
 					throw new UnsupportedEncodingException("No UTF-8 encoding and missing system property: file.encoding"); //$NON-NLS-1$
 				nodeKey = URLEncoder.encode(host, enc);
 			} catch (UnsupportedEncodingException e) {
-				throw RepositoryStatusHelper.internalError(e);
+				throw internalError(e);
 			}
 		}
 		if (DebugHelper.DEBUG_REPOSITORY_CREDENTIALS) {
@@ -148,10 +146,10 @@ public class Credentials {
 						prefNode = securePreferences.node(nodeName);
 				} catch (IllegalArgumentException e) {
 					// if the node name is illegal/malformed (should not happen).
-					throw RepositoryStatusHelper.internalError(e);
+					throw internalError(e);
 				} catch (IllegalStateException e) {
 					// thrown if preference store has been tampered with
-					throw RepositoryStatusHelper.internalError(e);
+					throw internalError(e);
 				}
 				if (!prompt) {
 					try {
@@ -175,7 +173,7 @@ public class Credentials {
 						}
 						return restoreFromMemory(nodeName);
 					} catch (StorageException e) {
-						throw RepositoryStatusHelper.internalError(e);
+						throw internalError(e);
 					}
 				}
 				// need to prompt user for user name and password
@@ -258,9 +256,9 @@ public class Credentials {
 									prefNode.put(IRepository.PROP_PASSWORD, loginDetails.getPassword(), true);
 									prefNode.flush();
 								} catch (StorageException e1) {
-									throw RepositoryStatusHelper.internalError(e1);
+									throw internalError(e1);
 								} catch (IOException e) {
-									throw RepositoryStatusHelper.internalError(e);
+									throw internalError(e);
 								}
 							} else {
 								// if persisted earlier - the preference should be removed
@@ -275,7 +273,7 @@ public class Credentials {
 									try {
 										prefNode.flush();
 									} catch (IOException e) {
-										throw RepositoryStatusHelper.internalError(e);
+										throw internalError(e);
 									}
 								}
 							}
@@ -481,4 +479,14 @@ public class Credentials {
 			timestamp = System.currentTimeMillis();
 		}
 	}
+
+	/**
+	 * Get default "InternalError" ProvisionException.
+	 * @param t
+	 * @return a default "InternalError"
+	 */
+	public static ProvisionException internalError(Throwable t) {
+		return new ProvisionException(new Status(IStatus.ERROR, Activator.ID, //
+				ProvisionException.INTERNAL_ERROR, Messages.repoMan_internalError, t));
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/FileInfoReader.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/FileInfoReader.java
deleted file mode 100644
index c84d4e2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/FileInfoReader.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, IBM Corporation, and others.
- * The code, documentation and other materials contained herein have been
- * licensed under the Eclipse Public License - v 1.0 by the copyright holder
- * listed above, as the Initial Contributor under such license. The text of
- * such license is available at www.eclipse.org.
- * Contributors:
- * 	IBM Corporation - initial implementation
- * 	Cloudsmith Inc - modified API, and implementation
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.repository;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URI;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.ecf.core.*;
-import org.eclipse.ecf.core.security.IConnectContext;
-import org.eclipse.ecf.filetransfer.*;
-import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemBrowseEvent;
-import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemEvent;
-import org.eclipse.ecf.filetransfer.identity.*;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * The FileInfoReader is a {@link Job} similar to {@link FileReader}, but without the support
- * from ECF (there is currently no way to wait on a BrowseRequest job, as this is internal to
- * ECF). If such support is added, this class is easily modified.
- * 
- */
-public class FileInfoReader extends Job implements IRemoteFileSystemListener {
-	private Exception exception;
-	private IProgressMonitor theMonitor;
-	private final int connectionRetryCount;
-	private final long connectionRetryDelay;
-	private final IConnectContext connectContext;
-	final Boolean[] barrier = new Boolean[1];
-	private IRemoteFile[] remoteFiles;
-	private IRemoteFileSystemRequest browseRequest;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	protected IStatus run(IProgressMonitor monitor) {
-		synchronized (barrier) {
-			while (barrier[0] == null) {
-				try {
-					barrier.wait(1000);
-					if (theMonitor.isCanceled() && browseRequest != null)
-						browseRequest.cancel();
-				} catch (InterruptedException e) {
-					//ignore
-				}
-			}
-		}
-		return Status.OK_STATUS;
-	}
-
-	/**
-	 * Waits until request is processed (barrier[0] is non null).
-	 * This is a bit of a hack, as it would be better if the ECFBrowser worked in similar fashion to
-	 * file transfer were a custom job can be supplied.
-	 * TODO: log an issue for ECF.
-	 */
-	private void waitOnSelf() {
-		schedule();
-		while (barrier[0] == null) {
-			boolean logged = false;
-			try {
-				join();
-			} catch (InterruptedException e) {
-				if (!logged)
-					LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "Unexpected interrupt while waiting on ECF browse request", e)); //$NON-NLS-1$
-			}
-		}
-	}
-
-	/**
-	 * Create a new FileInfoReader that will retry failed connection attempts and sleep some amount of time between each
-	 * attempt.
-	 */
-	public FileInfoReader(IConnectContext aConnectContext) {
-		super(Messages.repo_loading); // job label - TODO: this is a bad label
-		barrier[0] = null;
-		// Hide this job.
-		setSystem(true);
-		setUser(false);
-		connectionRetryCount = RepositoryPreferences.getConnectionRetryCount();
-		connectionRetryDelay = RepositoryPreferences.getConnectionMsRetryDelay();
-		connectContext = aConnectContext;
-	}
-
-	/**
-	 * Get the requested information.
-	 * @return IRemoteFile[] or null if there was an error.
-	 * @throws CoreException 
-	 * @throws FileNotFoundException 
-	 * @throws AuthenticationFailedException 
-	 * @throws JREHttpClientRequiredException 
-	 */
-	public IRemoteFile[] getRemoteFiles(URI location, IProgressMonitor monitor) throws AuthenticationFailedException, FileNotFoundException, CoreException, JREHttpClientRequiredException {
-		if (monitor != null)
-			monitor.beginTask(location.toString(), 1);
-		try {
-			sendBrowseRequest(location, monitor);
-			waitOnSelf();
-			// throw any exception received in a callback
-			checkException(location, connectionRetryCount);
-
-			return remoteFiles;
-		} finally {
-			if (monitor != null) {
-				monitor.done();
-			}
-		}
-
-	}
-
-	public IRemoteFile getRemoteFile(URI location, IProgressMonitor monitor) throws AuthenticationFailedException, FileNotFoundException, CoreException, JREHttpClientRequiredException {
-
-		getRemoteFiles(location, monitor);
-		return remoteFiles != null && remoteFiles.length > 0 ? remoteFiles[0] : null;
-	}
-
-	public long getLastModified(URI location, IProgressMonitor monitor) throws AuthenticationFailedException, FileNotFoundException, CoreException, JREHttpClientRequiredException {
-		IRemoteFile file = getRemoteFile(location, monitor);
-		if (file == null)
-			throw new FileNotFoundException(location.toString());
-		return file.getInfo().getLastModified();
-	}
-
-	public void handleRemoteFileEvent(IRemoteFileSystemEvent event) {
-		exception = event.getException();
-		if (exception != null) {
-			synchronized (barrier) {
-				barrier[0] = Boolean.TRUE;
-				barrier.notify();
-			}
-		} else if (event instanceof IRemoteFileSystemBrowseEvent) {
-			IRemoteFileSystemBrowseEvent fsbe = (IRemoteFileSystemBrowseEvent) event;
-			remoteFiles = fsbe.getRemoteFiles();
-			if (theMonitor != null)
-				theMonitor.worked(1);
-			synchronized (barrier) {
-				barrier[0] = Boolean.TRUE;
-				barrier.notify();
-			}
-		} else {
-			synchronized (barrier) {
-				barrier[0] = Boolean.FALSE; // ended by unknown reason
-				barrier.notify();
-			}
-		}
-	}
-
-	protected void sendBrowseRequest(URI uri, IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
-		IContainer container;
-		try {
-			container = ContainerFactory.getDefault().createContainer();
-		} catch (ContainerCreateException e) {
-			throw RepositoryStatusHelper.fromMessage(Messages.ecf_configuration_error);
-		}
-
-		IRemoteFileSystemBrowserContainerAdapter adapter = (IRemoteFileSystemBrowserContainerAdapter) container.getAdapter(IRemoteFileSystemBrowserContainerAdapter.class);
-		if (adapter == null) {
-			throw RepositoryStatusHelper.fromMessage(Messages.ecf_configuration_error);
-		}
-
-		adapter.setConnectContextForAuthentication(connectContext);
-
-		this.exception = null;
-		this.theMonitor = monitor;
-		for (int retryCount = 0;; retryCount++) {
-			if (monitor != null && monitor.isCanceled())
-				throw new OperationCanceledException();
-
-			try {
-				IFileID fileID = FileIDFactory.getDefault().createFileID(adapter.getBrowseNamespace(), uri.toString());
-				browseRequest = adapter.sendBrowseRequest(fileID, this);
-			} catch (RemoteFileSystemException e) {
-				exception = e;
-			} catch (FileCreateException e) {
-				exception = e;
-			}
-			if (checkException(uri, retryCount))
-				break;
-		}
-	}
-
-	protected Exception getException() {
-		return exception;
-	}
-
-	/**
-	 * Utility method to check exception condition and determine if retry should be done.
-	 * If there was an exception it is translated into one of the specified exceptions and thrown.
-	 * 
-	 * @param uri the URI being read - used for logging purposes
-	 * @param attemptCounter - the current attempt number (start with 0)
-	 * @return true if the exception is an IOException and attemptCounter < connectionRetryCount, false otherwise
-	 * @throws CoreException
-	 * @throws FileNotFoundException
-	 * @throws AuthenticationFailedException
-	 * @throws JREHttpClientRequiredException 
-	 */
-	private boolean checkException(URI uri, int attemptCounter) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
-		// note that 'exception' could have been captured in a callback
-		if (exception != null) {
-			// check if HTTP client needs to be changed
-			RepositoryStatusHelper.checkJREHttpClientRequired(exception);
-
-			// if this is a authentication failure - it is not meaningful to continue
-			RepositoryStatusHelper.checkPermissionDenied(exception);
-
-			// if this is a file not found - it is not meaningful to continue
-			RepositoryStatusHelper.checkFileNotFound(exception, uri);
-
-			Throwable t = RepositoryStatusHelper.unwind(exception);
-			if (t instanceof CoreException)
-				throw RepositoryStatusHelper.unwindCoreException((CoreException) t);
-
-			if (t instanceof IOException && attemptCounter < connectionRetryCount) {
-				// TODO: Retry only certain exceptions or filter out
-				// some exceptions not worth retrying
-				//
-				exception = null;
-				try {
-					LogHelper.log(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.connection_to_0_failed_on_1_retry_attempt_2, new String[] {uri.toString(), t.getMessage(), String.valueOf(attemptCounter)}), t));
-
-					Thread.sleep(connectionRetryDelay);
-					return false;
-				} catch (InterruptedException e) {
-					/* ignore */
-				}
-			}
-			throw RepositoryStatusHelper.wrap(exception);
-		}
-		return true;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/FileReader.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/FileReader.java
deleted file mode 100644
index fcc92c2..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/FileReader.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Cloudsmith Inc.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- * 	Cloudsmith Inc - initial API and implementation
- * 	IBM Corporation - ongoing development
- *  Sonatype Inc - ongoing development
- ******************************************************************************/
-package org.eclipse.equinox.internal.p2.repository;
-
-import java.io.*;
-import java.net.SocketTimeoutException;
-import java.net.URI;
-import java.util.Date;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.ecf.core.security.IConnectContext;
-import org.eclipse.ecf.filetransfer.*;
-import org.eclipse.ecf.filetransfer.events.*;
-import org.eclipse.ecf.filetransfer.identity.*;
-import org.eclipse.ecf.filetransfer.service.IRetrieveFileTransferFactory;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * FileReader is an ECF FileTransferJob implementation.
- */
-public final class FileReader extends FileTransferJob implements IFileTransferListener {
-	/**
-	 * Class used to suppress warnings about a job being blocked by another job.
-	 * Since we are running a job that will always be blocked by another job that
-	 * is actually performing the transfer, these messages are unnecessary and ugly.
-	 */
-	static class SuppressBlockedMonitor extends SubProgressMonitor {
-		public SuppressBlockedMonitor(IProgressMonitor monitor, int ticks) {
-			super(monitor, ticks);
-		}
-
-		public void setBlocked(IStatus reason) {
-			//do nothing
-		}
-
-		public void clearBlocked() {
-			//do nothing
-		}
-	}
-
-	private static IFileReaderProbe testProbe;
-	private boolean closeStreamWhenFinished = false;
-	private Exception exception;
-	private FileInfo fileInfo;
-	private long lastProgressCount;
-	private long lastStatsCount;
-	protected IProgressMonitor theMonitor;
-	private OutputStream theOutputStream;
-	private ProgressStatistics statistics;
-	private final int connectionRetryCount;
-	private final long connectionRetryDelay;
-	private final IConnectContext connectContext;
-	private URI requestUri;
-	protected IFileTransferConnectStartEvent connectEvent;
-	private Job cancelJob;
-	private boolean monitorStarted;
-
-	/**
-	 * Create a new FileReader that will retry failed connection attempts and sleep some amount of time between each
-	 * attempt.
-	 */
-	public FileReader(IConnectContext aConnectContext) {
-		super(Messages.FileTransport_reader); // job label
-
-		// Hide this job.
-		setSystem(true);
-		setUser(false);
-		connectionRetryCount = RepositoryPreferences.getConnectionRetryCount();
-		connectionRetryDelay = RepositoryPreferences.getConnectionMsRetryDelay();
-		connectContext = aConnectContext;
-	}
-
-	public FileInfo getLastFileInfo() {
-		return fileInfo;
-	}
-
-	/**
-	 * A job to handle cancelation when trying to establish a socket connection.
-	 * At this point we don't have a transfer job running yet, so we need a separate
-	 * job to monitor for cancelation.
-	 */
-	protected class CancelHandler extends Job {
-		private boolean done = false;
-
-		protected CancelHandler() {
-			super(Messages.FileTransport_cancelCheck);
-			setSystem(true);
-		}
-
-		public IStatus run(IProgressMonitor jobMonitor) {
-			while (!done && !jobMonitor.isCanceled()) {
-				try {
-					Thread.sleep(1000);
-				} catch (InterruptedException e) {
-					return Status.CANCEL_STATUS;
-				}
-				if (theMonitor != null && theMonitor.isCanceled())
-					if (connectEvent != null)
-						connectEvent.cancel();
-			}
-			return Status.OK_STATUS;
-		}
-
-		protected void canceling() {
-			//wake up from sleep in run method
-			Thread t = getThread();
-			if (t != null)
-				t.interrupt();
-		}
-
-	}
-
-	public synchronized void handleTransferEvent(IFileTransferEvent event) {
-		if (event instanceof IFileTransferConnectStartEvent) {
-			// keep the connect event to be able to cancel the transfer
-			connectEvent = (IFileTransferConnectStartEvent) event;
-			cancelJob = new CancelHandler();
-			//schedule with a delay to avoid the overhead of an extra job on a fast connection
-			cancelJob.schedule(500);
-		} else if (event instanceof IIncomingFileTransferReceiveStartEvent) {
-			//we no longer need the cancel handler because we are about to fork the transfer job
-			if (cancelJob != null)
-				cancelJob.cancel();
-			IIncomingFileTransfer source = ((IIncomingFileTransferEvent) event).getSource();
-			try {
-				FileInfo fi = new FileInfo();
-				Date lastModified = source.getRemoteLastModified();
-				if (lastModified != null)
-					fi.setLastModified(lastModified.getTime());
-				fi.setName(source.getRemoteFileName());
-				fi.setSize(source.getFileLength());
-				fileInfo = fi;
-
-				((IIncomingFileTransferReceiveStartEvent) event).receive(theOutputStream, this);
-			} catch (IOException e) {
-				exception = e;
-				return;
-			}
-			long fileLength = source.getFileLength();
-			ProgressStatistics stats = new ProgressStatistics(requestUri, source.getRemoteFileName(), fileLength);
-			setStatistics(stats);
-
-			if (theMonitor != null) {
-				theMonitor.beginTask(null, 1000);
-				monitorStarted = true;
-				theMonitor.subTask(stats.report());
-				lastStatsCount = 0;
-				lastProgressCount = 0;
-			}
-			onStart(source);
-		} else if (event instanceof IIncomingFileTransferReceiveDataEvent) {
-			IIncomingFileTransfer source = ((IIncomingFileTransferEvent) event).getSource();
-			if (theMonitor != null) {
-				if (theMonitor.isCanceled()) {
-					source.cancel();
-					return;
-				}
-
-				long br = source.getBytesReceived();
-				long count = br - lastStatsCount;
-				lastStatsCount = br;
-				ProgressStatistics stats = getStatistics();
-				if (stats != null) {
-					stats.increase(count);
-					fileInfo.setAverageSpeed(stats.getAverageSpeed());
-					if (stats.shouldReport()) {
-						count = br - lastProgressCount;
-						lastProgressCount = br;
-						theMonitor.subTask(stats.report());
-						theMonitor.worked((int) (1000 * count / stats.getTotal()));
-					}
-				}
-			}
-			onData(source);
-		} else if (event instanceof IIncomingFileTransferReceiveDoneEvent) {
-			if (closeStreamWhenFinished)
-				hardClose(theOutputStream);
-
-			if (exception == null)
-				exception = ((IIncomingFileTransferReceiveDoneEvent) event).getException();
-			onDone(((IIncomingFileTransferReceiveDoneEvent) event).getSource());
-		}
-	}
-
-	public InputStream read(URI url, final IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
-		final PipedInputStream input = new PipedInputStream();
-		PipedOutputStream output;
-		try {
-			output = new PipedOutputStream(input);
-		} catch (IOException e) {
-			throw RepositoryStatusHelper.wrap(e);
-		}
-		RepositoryTracing.debug("Downloading {0}", url); //$NON-NLS-1$
-
-		sendRetrieveRequest(url, output, null, true, monitor);
-
-		return new InputStream() {
-			public int available() throws IOException {
-				checkException();
-				return input.available();
-			}
-
-			public void close() throws IOException {
-				hardClose(input);
-				checkException();
-			}
-
-			public void mark(int readlimit) {
-				input.mark(readlimit);
-			}
-
-			public boolean markSupported() {
-				return input.markSupported();
-			}
-
-			public int read() throws IOException {
-				checkException();
-				return input.read();
-			}
-
-			public int read(byte b[]) throws IOException {
-				checkException();
-				return input.read(b);
-			}
-
-			public int read(byte b[], int off, int len) throws IOException {
-				checkException();
-				return input.read(b, off, len);
-			}
-
-			public void reset() throws IOException {
-				checkException();
-				input.reset();
-			}
-
-			public long skip(long n) throws IOException {
-				checkException();
-				return input.skip(n);
-			}
-
-			private void checkException() throws IOException {
-				if (getException() == null)
-					return;
-
-				IOException e;
-				Throwable t = RepositoryStatusHelper.unwind(getException());
-				if (t instanceof IOException)
-					e = (IOException) t;
-				else {
-					if (t instanceof UserCancelledException) {
-						Throwable cause = t;
-						t = new OperationCanceledException(t.getMessage());
-						t.initCause(cause);
-					}
-					e = new IOException(t.getMessage());
-					e.initCause(t);
-				}
-				throw e;
-			}
-		};
-	}
-
-	public void readInto(URI uri, OutputStream anOutputStream, IProgressMonitor monitor) //
-			throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
-		readInto(uri, anOutputStream, -1, monitor);
-	}
-
-	public boolean belongsTo(Object family) {
-		return family == this;
-	}
-
-	public void readInto(URI uri, OutputStream anOutputStream, long startPos, IProgressMonitor monitor) //
-			throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
-		if (monitor == null)
-			monitor = new NullProgressMonitor();
-		try {
-			sendRetrieveRequest(uri, anOutputStream, (startPos != -1 ? new DownloadRange(startPos) : null), false, monitor);
-			Job.getJobManager().join(this, new SuppressBlockedMonitor(monitor, 0));
-			if (monitor.isCanceled() && connectEvent != null)
-				connectEvent.cancel();
-			// check and throw exception if received in callback
-			checkException(uri, connectionRetryCount);
-		} catch (InterruptedException e) {
-			monitor.setCanceled(true);
-			throw new OperationCanceledException();
-		} finally {
-			// kill the cancelJob, if there is one
-			if (cancelJob != null) {
-				cancelJob.cancel();
-				cancelJob = null;
-			}
-			// If monitor was never started, make sure it is balanced
-			if (!monitorStarted)
-				monitor.beginTask(null, 1);
-			monitorStarted = false;
-			monitor.done();
-		}
-	}
-
-	protected void sendRetrieveRequest(URI uri, OutputStream outputStream, DownloadRange range, boolean closeStreamOnFinish, //
-			IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
-
-		IRetrieveFileTransferFactory factory = Activator.getDefault().getRetrieveFileTransferFactory();
-		if (factory == null) {
-			throw RepositoryStatusHelper.fromMessage(Messages.ecf_configuration_error);
-		}
-		IRetrieveFileTransferContainerAdapter adapter = factory.newInstance();
-
-		adapter.setConnectContextForAuthentication(connectContext);
-
-		this.exception = null;
-		this.closeStreamWhenFinished = closeStreamOnFinish;
-		this.fileInfo = null;
-		this.statistics = null;
-		this.lastProgressCount = 0L;
-		this.lastStatsCount = 0L;
-		this.theMonitor = monitor;
-		this.monitorStarted = false;
-		this.theOutputStream = outputStream;
-		this.requestUri = uri;
-
-		for (int retryCount = 0;; retryCount++) {
-			if (monitor != null && monitor.isCanceled())
-				throw new OperationCanceledException();
-
-			try {
-				IFileID fileID = FileIDFactory.getDefault().createFileID(adapter.getRetrieveNamespace(), uri.toString());
-				if (range != null)
-					adapter.sendRetrieveRequest(fileID, range, this, null);
-				else
-					adapter.sendRetrieveRequest(fileID, this, null);
-			} catch (IncomingFileTransferException e) {
-				exception = e;
-			} catch (FileCreateException e) {
-				exception = e;
-			} catch (Throwable t) {
-				if (exception != null)
-					exception.printStackTrace();
-			}
-			if (checkException(uri, retryCount))
-				break;
-		}
-	}
-
-	/**
-	 * Utility method to check exception condition and determine if retry should be done.
-	 * If there was an exception it is translated into one of the specified exceptions and thrown.
-	 * 
-	 * @param uri the URI being read - used for logging purposes
-	 * @param attemptCounter - the current attempt number (start with 0)
-	 * @return true if the exception is an IOException and attemptCounter < connectionRetryCount, false otherwise
-	 * @throws CoreException
-	 * @throws FileNotFoundException
-	 * @throws AuthenticationFailedException
-	 */
-	private boolean checkException(URI uri, int attemptCounter) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
-		// note that 'exception' could have been captured in a callback
-		if (exception != null) {
-			// check if HTTP client needs to be changed
-			RepositoryStatusHelper.checkJREHttpClientRequired(exception);
-
-			// if this is an 'authentication failure' - it is not meaningful to continue
-			RepositoryStatusHelper.checkPermissionDenied(exception);
-
-			// if this is a 'file not found' - it is not meaningful to continue
-			RepositoryStatusHelper.checkFileNotFound(exception, uri);
-
-			Throwable t = RepositoryStatusHelper.unwind(exception);
-			if (t instanceof CoreException)
-				throw RepositoryStatusHelper.unwindCoreException((CoreException) t);
-
-			// not meaningful to try 'timeout again' - if a server is that busy, we
-			// need to wait for quite some time before retrying- it is not likely it is
-			// just a temporary network thing.
-			if (t instanceof SocketTimeoutException)
-				throw RepositoryStatusHelper.wrap(t);
-
-			if (t instanceof IOException && attemptCounter < connectionRetryCount) {
-				// TODO: Retry only certain exceptions or filter out
-				// some exceptions not worth retrying
-				//
-				exception = null;
-				try {
-					LogHelper.log(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.connection_to_0_failed_on_1_retry_attempt_2, new String[] {uri.toString(), t.getMessage(), String.valueOf(attemptCounter)}), t));
-
-					Thread.sleep(connectionRetryDelay);
-					return false;
-				} catch (InterruptedException e) {
-					/* ignore */
-				}
-			}
-			throw RepositoryStatusHelper.wrap(exception);
-		}
-		return true;
-	}
-
-	protected Exception getException() {
-		return exception;
-	}
-
-	/**
-	 * Closes input and output streams
-	 * @param aStream
-	 */
-	public static void hardClose(Object aStream) {
-		if (aStream != null) {
-			try {
-				if (aStream instanceof OutputStream)
-					((OutputStream) aStream).close();
-				else if (aStream instanceof InputStream)
-					((InputStream) aStream).close();
-			} catch (IOException e) { /* ignore */
-			}
-		}
-	}
-
-	private static class DownloadRange implements IFileRangeSpecification {
-
-		private long startPosition;
-
-		public DownloadRange(long startPos) {
-			startPosition = startPos;
-		}
-
-		public long getEndPosition() {
-			return -1;
-		}
-
-		public long getStartPosition() {
-			return startPosition;
-		}
-
-	}
-
-	private void onDone(IIncomingFileTransfer source) {
-		if (testProbe != null)
-			testProbe.onDone(this, source, theMonitor);
-	}
-
-	private void onStart(IIncomingFileTransfer source) {
-		if (testProbe != null)
-			testProbe.onStart(this, source, theMonitor);
-	}
-
-	private void onData(IIncomingFileTransfer source) {
-		if (testProbe != null)
-			testProbe.onData(this, source, theMonitor);
-	}
-
-	/**
-	 * Sets a testing probe that can intercept events on the file reader for testing purposes.
-	 * This method should only ever be called from automated test suites.
-	 */
-	public static void setTestProbe(IFileReaderProbe probe) {
-		testProbe = probe;
-	}
-
-	/**
-	 * Sets the progress statistics. This method is synchronized because the field
-	 * is accessed from both the transfer thread and the thread initiating the transfer
-	 * and we need to ensure field values are consistent across threads.
-	 * 
-	 * @param statistics the statistics to set, or <code>null</code>
-	 */
-	private synchronized void setStatistics(ProgressStatistics statistics) {
-		this.statistics = statistics;
-	}
-
-	/**
-	 * Returns the progress statistics. This method is synchronized because the field
-	 * is accessed from both the transfer thread and the thread initiating the transfer
-	 * and we need to ensure field values are consistent across threads.
-	 * 
-	 * @return the statistics, or <code>null</code>
-	 */
-	private synchronized ProgressStatistics getStatistics() {
-		return statistics;
-	}
-
-	/**
-	 * An interface to allow automated tests to hook into file reader events
-	 * @see #setTestProbe
-	 */
-	public interface IFileReaderProbe {
-		public void onStart(FileReader reader, IIncomingFileTransfer source, IProgressMonitor monitor);
-
-		public void onData(FileReader reader, IIncomingFileTransfer source, IProgressMonitor monitor);
-
-		public void onDone(FileReader reader, IIncomingFileTransfer source, IProgressMonitor monitor);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Messages.java
index ccdee42..61d8912 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2011 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ public class Messages extends NLS {
 	public static String CacheManager_AuthenticationFaileFor_0;
 	public static String CacheManager_FailedCommunicationWithRepo_0;
 	public static String CacheManager_Neither_0_nor_1_found;
+	public static String CacheManage_ErrorRenamingCache;
 
 	public static String artifact_not_found;
 	public static String io_failedRead;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/ProgressStatistics.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/ProgressStatistics.java
index 6b740e4..6169fb3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/ProgressStatistics.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/ProgressStatistics.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 Cloudsmith Inc.
+ * Copyright (c) 2006, 2011 Cloudsmith Inc.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -98,9 +98,11 @@ public class ProgressStatistics {
 		long amount = 0L;
 		SortedMap<Long, Long> relevantData = m_recentSpeedMap.headMap(new Long(m_recentSpeedMapKey));
 
-		for (Long rl : relevantData.values()) {
-			dur += SPEED_RESOLUTION;
-			amount += rl.longValue();
+		if (!relevantData.isEmpty()) {
+			for (Long rl : relevantData.values()) {
+				dur += SPEED_RESOLUTION;
+				amount += rl.longValue();
+			}
 		}
 
 		if (dur >= 1000)
@@ -123,7 +125,10 @@ public class ProgressStatistics {
 	}
 
 	public synchronized String report() {
-		return m_total != -1 ? NLS.bind(Messages.fetching_0_from_1_2_of_3_at_4, new String[] {m_fileName, m_uri.toString(), convert(m_current), convert(m_total), convert(getRecentSpeed())}) : NLS.bind(Messages.fetching_0_from_1_2_at_3, new String[] {m_fileName, m_uri.toString(), convert(m_current), convert(getRecentSpeed())});
+		String uriString = m_uri.toString();
+		if (m_fileName != null && uriString.endsWith(m_fileName))
+			uriString = uriString.substring(0, uriString.lastIndexOf(m_fileName));
+		return m_total != -1 ? NLS.bind(Messages.fetching_0_from_1_2_of_3_at_4, new String[] {m_fileName, uriString, convert(m_current), convert(m_total), convert(getRecentSpeed())}) : NLS.bind(Messages.fetching_0_from_1_2_at_3, new String[] {m_fileName, uriString, convert(m_current), convert(getRecentSpeed())});
 	}
 
 	public void setReportInterval(int reportInterval) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryStatus.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryStatus.java
deleted file mode 100644
index aae393d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryStatus.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cloudsmith Inc. - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.p2.repository;
-
-import org.eclipse.equinox.p2.core.ProvisionException;
-
-import java.io.FileNotFoundException;
-import java.net.*;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.ecf.core.identity.IDCreateException;
-import org.eclipse.ecf.filetransfer.BrowseFileTransferException;
-import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Utility class to transform transport errors into error messages.
- *
- */
-public class RepositoryStatus {
-
-	public static String codeToMessage(int code, String toDownload) {
-		switch (code) {
-			case 400 :
-				return NLS.bind(Messages.TransportErrorTranslator_400, toDownload);
-			case 401 :
-				return NLS.bind(Messages.TransportErrorTranslator_401, toDownload);
-			case 402 :
-				return NLS.bind(Messages.TransportErrorTranslator_402, toDownload);
-			case 403 :
-				return NLS.bind(Messages.TransportErrorTranslator_403, toDownload);
-			case 404 :
-				return NLS.bind(Messages.TransportErrorTranslator_404, toDownload);
-			case 405 :
-				return NLS.bind(Messages.TransportErrorTranslator_405, toDownload);
-			case 406 :
-				return NLS.bind(Messages.TransportErrorTranslator_406, toDownload);
-			case 407 :
-				return NLS.bind(Messages.TransportErrorTranslator_407, toDownload);
-			case 408 :
-				return NLS.bind(Messages.TransportErrorTranslator_408, toDownload);
-			case 409 :
-				return NLS.bind(Messages.TransportErrorTranslator_409, toDownload);
-			case 410 :
-				return NLS.bind(Messages.TransportErrorTranslator_410, toDownload);
-			case 411 :
-				return NLS.bind(Messages.TransportErrorTranslator_411, toDownload);
-			case 412 :
-				return NLS.bind(Messages.TransportErrorTranslator_412, toDownload);
-			case 413 :
-				return NLS.bind(Messages.TransportErrorTranslator_413, toDownload);
-			case 414 :
-				return NLS.bind(Messages.TransportErrorTranslator_414, toDownload);
-			case 415 :
-				return NLS.bind(Messages.TransportErrorTranslator_415, toDownload);
-			case 416 :
-				return NLS.bind(Messages.TransportErrorTranslator_416, toDownload);
-			case 417 :
-				return NLS.bind(Messages.TransportErrorTranslator_417, toDownload);
-			case 418 :
-				return NLS.bind(Messages.TransportErrorTranslator_418, toDownload);
-			case 422 :
-				return NLS.bind(Messages.TransportErrorTranslator_422, toDownload);
-			case 423 :
-				return NLS.bind(Messages.TransportErrorTranslator_423, toDownload);
-			case 424 :
-				return NLS.bind(Messages.TransportErrorTranslator_424, toDownload);
-			case 425 :
-				return NLS.bind(Messages.TransportErrorTranslator_425, toDownload);
-			case 426 :
-				return NLS.bind(Messages.TransportErrorTranslator_426, toDownload);
-			case 449 :
-				return NLS.bind(Messages.TransportErrorTranslator_449, toDownload);
-			case 450 :
-				return NLS.bind(Messages.TransportErrorTranslator_450, toDownload);
-
-			case 500 :
-				return NLS.bind(Messages.TransportErrorTranslator_500, toDownload);
-			case 501 :
-				return NLS.bind(Messages.TransportErrorTranslator_501, toDownload);
-			case 502 :
-				return NLS.bind(Messages.TransportErrorTranslator_502, toDownload);
-			case 503 :
-				return NLS.bind(Messages.TransportErrorTranslator_503, toDownload);
-			case 504 :
-				return NLS.bind(Messages.TransportErrorTranslator_504, toDownload);
-			case 505 :
-				return NLS.bind(Messages.TransportErrorTranslator_505, toDownload);
-			case 506 :
-				return NLS.bind(Messages.TransportErrorTranslator_506, toDownload);
-			case 507 :
-				return NLS.bind(Messages.TransportErrorTranslator_507, toDownload);
-			case 508 :
-				return NLS.bind(Messages.TransportErrorTranslator_508, toDownload);
-			case 510 :
-				return NLS.bind(Messages.TransportErrorTranslator_510, toDownload);
-
-			default :
-				return NLS.bind(Messages.TransportErrorTranslator_UnknownErrorCode, Integer.toString(code), toDownload);
-		}
-	}
-
-	public static DownloadStatus forStatus(IStatus original, URI toDownload) {
-		Throwable t = original.getException();
-		return forException(t, toDownload);
-	}
-
-	public static DownloadStatus forException(Throwable t, URI toDownload) {
-		if (t instanceof FileNotFoundException || (t instanceof IncomingFileTransferException && ((IncomingFileTransferException) t).getErrorCode() == 404))
-			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.ARTIFACT_NOT_FOUND, NLS.bind(Messages.artifact_not_found, toDownload), t);
-		if (t instanceof ConnectException)
-			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, NLS.bind(Messages.TransportErrorTranslator_UnableToConnectToRepository_0, toDownload), t);
-		if (t instanceof UnknownHostException)
-			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_UnknownHost, toDownload), t);
-		if (t instanceof IDCreateException) {
-			IStatus status = ((IDCreateException) t).getStatus();
-			if (status != null && status.getException() != null)
-				t = status.getException();
-
-			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_MalformedRemoteFileReference, toDownload), t);
-		}
-		int code = 0;
-
-		// default to report as read repository error
-		int provisionCode = ProvisionException.REPOSITORY_FAILED_READ;
-
-		if (t instanceof IncomingFileTransferException)
-			code = ((IncomingFileTransferException) t).getErrorCode();
-		else if (t instanceof BrowseFileTransferException)
-			code = ((BrowseFileTransferException) t).getErrorCode();
-
-		// Switch on error codes in the HTTP error code range. 
-		// Note that 404 uses ARTIFACT_NOT_FOUND (as opposed to REPOSITORY_NOT_FOUND, which
-		// is determined higher up in the calling chain).
-		if (code == 401)
-			provisionCode = ProvisionException.REPOSITORY_FAILED_AUTHENTICATION;
-		else if (code == 404)
-			provisionCode = ProvisionException.ARTIFACT_NOT_FOUND;
-
-		// Add more specific translation here
-
-		return new DownloadStatus(IStatus.ERROR, Activator.ID, provisionCode, //
-				code == 0 ? NLS.bind(Messages.io_failedRead, toDownload) //
-						: codeToMessage(code, toDownload.toString()), t);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryStatusHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryStatusHelper.java
deleted file mode 100644
index ac3d66b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryStatusHelper.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc, and other.
- * The code, documentation and other materials contained herein have been
- * licensed under the Eclipse Public License - v 1.0 by the individual
- * copyright holders listed above, as Initial Contributors under such license.
- * The text of such license is available at www.eclipse.org.
- * Contributors:
- * 	Cloudsmith Inc. - Initial API and implementation
- *  IBM Corporation - Original Implementation of checkPermissionDenied
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.repository;
-
-import org.eclipse.equinox.p2.core.ProvisionException;
-
-import java.io.*;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
-import org.eclipse.core.runtime.*;
-import org.eclipse.ecf.filetransfer.BrowseFileTransferException;
-import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * RepositoryStatusHelper is a utility class for processing of exceptions and status.
- */
-public abstract class RepositoryStatusHelper {
-
-	private static final long serialVersionUID = 1L;
-	protected static final String SERVER_REDIRECT = "Server redirected too many times"; //$NON-NLS-1$
-
-	public static IStatus createStatus(String nlsMessage, Object arg) {
-		return createExceptionStatus(null, nlsMessage, new Object[] {arg});
-	}
-
-	public static IStatus createStatus(String nlsMessage, Object arg1, Object arg2) {
-		return createExceptionStatus(null, nlsMessage, new Object[] {arg1, arg2});
-	}
-
-	public static IStatus createStatus(String nlsMessage, Object arg1, Object arg2, Object arg3) {
-		return createExceptionStatus(null, nlsMessage, new Object[] {arg1, arg2, arg3});
-	}
-
-	public static IStatus createStatus(String nlsMessage, Object[] args) {
-		return createExceptionStatus(null, nlsMessage, args);
-	}
-
-	public static IStatus createStatus(String nlsMessage) {
-		return createExceptionStatus(null, nlsMessage, new Object[] {});
-	}
-
-	public static IStatus createExceptionStatus(Throwable cause) {
-		return (cause instanceof CoreException) ? ((CoreException) cause).getStatus() : new Status(IStatus.ERROR, Activator.ID, IStatus.OK, cause.getMessage(), cause);
-	}
-
-	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object[] args) {
-		if (args != null && args.length > 0)
-			nlsMessage = NLS.bind(nlsMessage, args);
-		return new Status(IStatus.ERROR, Activator.ID, IStatus.OK, nlsMessage, cause);
-	}
-
-	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object arg1, Object arg2, Object arg3) {
-		return createExceptionStatus(cause, nlsMessage, new Object[] {arg1, arg2, arg3});
-	}
-
-	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object arg1, Object arg2) {
-		return createExceptionStatus(cause, nlsMessage, new Object[] {arg1, arg2});
-	}
-
-	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object arg1) {
-		return createExceptionStatus(cause, nlsMessage, new Object[] {arg1});
-	}
-
-	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage) {
-		return createExceptionStatus(cause, nlsMessage, new Object[] {});
-	}
-
-	public static void deeplyPrint(Throwable e, PrintStream strm, boolean stackTrace) {
-		deeplyPrint(e, strm, stackTrace, 0);
-	}
-
-	public static CoreException fromMessage(String nlsMessage, Object[] args) {
-		return fromExceptionMessage(null, nlsMessage, args);
-	}
-
-	public static CoreException fromMessage(String nlsMessage, Object arg1) {
-		return fromExceptionMessage(null, nlsMessage, new Object[] {arg1});
-	}
-
-	public static CoreException fromMessage(String nlsMessage, Object arg1, Object arg2) {
-		return fromExceptionMessage(null, nlsMessage, new Object[] {arg1, arg2});
-	}
-
-	public static CoreException fromMessage(String nlsMessage, Object arg1, Object arg2, Object arg3) {
-		return fromExceptionMessage(null, nlsMessage, new Object[] {arg1, arg2, arg3});
-	}
-
-	public static CoreException fromMessage(String nlsMessage) {
-		return fromExceptionMessage(null, nlsMessage, new Object[] {});
-	}
-
-	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object[] args) {
-		CoreException ce = new CoreException(createExceptionStatus(cause, nlsMessage, args));
-		if (cause != null)
-			ce.initCause(cause);
-		return ce;
-	}
-
-	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object arg1, Object arg2, Object arg3) {
-		return fromExceptionMessage(cause, nlsMessage, new Object[] {arg1, arg2, arg3});
-	}
-
-	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object arg1, Object arg2) {
-		return fromExceptionMessage(cause, nlsMessage, new Object[] {arg1, arg2});
-	}
-
-	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object arg1) {
-		return fromExceptionMessage(cause, nlsMessage, new Object[] {arg1});
-	}
-
-	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage) {
-		return fromExceptionMessage(cause, nlsMessage, new Object[] {});
-	}
-
-	public static Throwable unwind(Throwable t) {
-		for (;;) {
-			Class<? extends Throwable> tc = t.getClass();
-
-			// We don't use instanceof operator since we want
-			// the explicit class, not subclasses.
-			//
-			if (tc != RuntimeException.class && tc != InvocationTargetException.class && tc != IOException.class)
-				break;
-
-			Throwable cause = t.getCause();
-			if (cause == null)
-				break;
-
-			String msg = t.getMessage();
-			if (msg != null && !msg.equals(cause.toString()))
-				break;
-
-			t = cause;
-		}
-		return t;
-	}
-
-	public static CoreException unwindCoreException(CoreException exception) {
-		IStatus status = exception.getStatus();
-		while (status != null && status.getException() instanceof CoreException) {
-			exception = (CoreException) status.getException();
-			status = exception.getStatus();
-		}
-		return exception;
-	}
-
-	public static CoreException wrap(IStatus status) {
-		CoreException e = new CoreException(status);
-		Throwable t = status.getException();
-		if (t != null)
-			e.initCause(t);
-		return e;
-	}
-
-	public static CoreException wrap(Throwable t) {
-		t = unwind(t);
-		if (t instanceof CoreException)
-			return unwindCoreException((CoreException) t);
-
-		if (t instanceof OperationCanceledException || t instanceof InterruptedException)
-			return new CoreException(Status.CANCEL_STATUS);
-
-		String msg = t.toString();
-		return fromExceptionMessage(t, msg);
-	}
-
-	private static void appendLevelString(PrintStream strm, int level) {
-		if (level > 0) {
-			strm.print("[0"); //$NON-NLS-1$
-			for (int idx = 1; idx < level; ++idx) {
-				strm.print('.');
-				strm.print(level);
-			}
-			strm.print(']');
-		}
-	}
-
-	private static void deeplyPrint(CoreException ce, PrintStream strm, boolean stackTrace, int level) {
-		appendLevelString(strm, level);
-		if (stackTrace)
-			ce.printStackTrace(strm);
-		deeplyPrint(ce.getStatus(), strm, stackTrace, level);
-	}
-
-	private static void deeplyPrint(IStatus status, PrintStream strm, boolean stackTrace, int level) {
-		appendLevelString(strm, level);
-		String msg = status.getMessage();
-		strm.println(msg);
-		Throwable cause = status.getException();
-		if (cause != null) {
-			strm.print("Caused by: "); //$NON-NLS-1$
-			if (stackTrace || !(msg.equals(cause.getMessage()) || msg.equals(cause.toString())))
-				deeplyPrint(cause, strm, stackTrace, level);
-		}
-
-		if (status.isMultiStatus()) {
-			IStatus[] children = status.getChildren();
-			for (int i = 0; i < children.length; i++)
-				deeplyPrint(children[i], strm, stackTrace, level + 1);
-		}
-	}
-
-	private static void deeplyPrint(Throwable t, PrintStream strm, boolean stackTrace, int level) {
-		if (t instanceof CoreException)
-			deeplyPrint((CoreException) t, strm, stackTrace, level);
-		else {
-			appendLevelString(strm, level);
-			if (stackTrace)
-				t.printStackTrace(strm);
-			else {
-				strm.println(t.toString());
-				Throwable cause = t.getCause();
-				if (cause != null) {
-					strm.print("Caused by: "); //$NON-NLS-1$
-					deeplyPrint(cause, strm, stackTrace, level);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Check if the given exception represents that a switch to the JRE HTTP Client 
-	 * is required. ECF sets the HTTP status code 477 to indicate this.
-	 * If the JRE HTTP client is required a JREHttpClientRequiredException is thrown.
-	 */
-	public static void checkJREHttpClientRequired(Throwable t) throws JREHttpClientRequiredException {
-		if (t instanceof IncomingFileTransferException) {
-			if (((IncomingFileTransferException) t).getErrorCode() == 477)
-				throw new JREHttpClientRequiredException();
-		} else if (t instanceof BrowseFileTransferException) {
-			if (((BrowseFileTransferException) t).getErrorCode() == 477)
-				throw new JREHttpClientRequiredException();
-		}
-
-	}
-
-	/**
-	 * Check if the given exception represents a permission failure (401 for HTTP),
-	 * and throw a AuthenticationFailedException if a permission failure was encountered.
-	 */
-	public static void checkPermissionDenied(Throwable t) throws AuthenticationFailedException {
-		// From Use of File Transfer
-		if (t instanceof IncomingFileTransferException) {
-			if (((IncomingFileTransferException) t).getErrorCode() == 401)
-				throw new AuthenticationFailedException();
-			IStatus status = ((IncomingFileTransferException) t).getStatus();
-			t = status == null ? t : status.getException();
-			// From Use of Browse
-		} else if (t instanceof BrowseFileTransferException) {
-			if (((BrowseFileTransferException) t).getErrorCode() == 401)
-				throw new AuthenticationFailedException();
-			IStatus status = ((BrowseFileTransferException) t).getStatus();
-			t = status == null ? t : status.getException();
-		}
-
-		if (t == null || !(t instanceof IOException))
-			return;
-
-		// TODO: is this needed (for 401) now that ECF throws exceptions with codes?
-		// try to figure out if we have a 401 by parsing the exception message
-		// There is unfortunately no specific (general) exception for "redirected too many times" - which is commonly
-		// caused by a failed login. The message and exception are different in different implementations
-		// of http client.
-		String m = t.getMessage();
-		if (m != null && (m.indexOf(" 401 ") != -1 || m.indexOf(SERVER_REDIRECT) != -1)) //$NON-NLS-1$
-			throw new AuthenticationFailedException();
-		if ("org.apache.commons.httpclient.RedirectException".equals(t.getClass().getName())) //$NON-NLS-1$
-			throw new AuthenticationFailedException();
-	}
-
-	/**
-	 * Translates exceptions representing "FileNotFound" into FileNotFoundException.
-	 * @param t the throwable to check
-	 * @param toDownload the URI the exception was thrown for
-	 * @throws FileNotFoundException if 't' represents a file not found
-	 */
-	public static void checkFileNotFound(Throwable t, URI toDownload) throws FileNotFoundException {
-		if (t instanceof IncomingFileTransferException) {
-			IncomingFileTransferException e = (IncomingFileTransferException) t;
-			if (e.getErrorCode() == 404 || e.getErrorCode() == 403 || e.getErrorCode() == 300)
-				throw new FileNotFoundException(toDownload.toString());
-		}
-		if (t instanceof BrowseFileTransferException) {
-			BrowseFileTransferException e = (BrowseFileTransferException) t;
-			if (e.getErrorCode() == 404 || e.getErrorCode() == 403 || e.getErrorCode() == 300)
-				throw new FileNotFoundException(toDownload.toString());
-		}
-
-		if (t instanceof FileNotFoundException)
-			throw (FileNotFoundException) t;
-		if (t instanceof CoreException) {
-			IStatus status = ((CoreException) t).getStatus();
-			Throwable e = status == null ? null : status.getException();
-			if (e instanceof FileNotFoundException)
-				throw (FileNotFoundException) e;
-		}
-	}
-
-	/**
-	 * Get default "InternalError" ProvisionException.
-	 * @param t
-	 * @return a default "InternalError"
-	 */
-	public static ProvisionException internalError(Throwable t) {
-		return new ProvisionException(new Status(IStatus.ERROR, Activator.ID, //
-				ProvisionException.INTERNAL_ERROR, Messages.repoMan_internalError, t));
-	}
-
-	public static IStatus malformedAddressStatus(String address, Throwable t) {
-		return new Status(IStatus.ERROR, Activator.ID, //
-				ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.exception_malformedRepoURI, address), t);
-
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryTransport.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryTransport.java
deleted file mode 100644
index e2a825a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/RepositoryTransport.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2011 IBM Corporation and other.
- * The code, documentation and other materials contained herein have been
- * licensed under the Eclipse Public License - v 1.0 by the copyright holder
- * listed above, as the Initial Contributor under such license. The text of
- * such license is available at www.eclipse.org.
- * 
- * Contributors
- * 	IBM Corporation - Initial API and implementation.
- *  Cloudsmith Inc - Implementation
- ******************************************************************************/
-
-package org.eclipse.equinox.internal.p2.repository;
-
-import java.io.*;
-import java.net.URI;
-import org.eclipse.core.runtime.*;
-import org.eclipse.ecf.core.security.ConnectContextFactory;
-import org.eclipse.ecf.core.security.IConnectContext;
-import org.eclipse.ecf.filetransfer.UserCancelledException;
-import org.eclipse.equinox.internal.p2.repository.Credentials.LoginCanceledException;
-import org.eclipse.equinox.internal.provisional.p2.repository.IStateful;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.core.UIServices.AuthenticationInfo;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * RepositoryTransport adapts p2 to ECF file download and file browsing.
- * Download is performed by {@link FileReader}, and file browsing is performed by
- * {@link FileInfoReader}.
- */
-public class RepositoryTransport extends Transport {
-	private static RepositoryTransport instance;
-
-	/**
-	 * Returns an shared instance of Generic Transport
-	 */
-	public static synchronized RepositoryTransport getInstance() {
-		if (instance == null) {
-			instance = new RepositoryTransport();
-		}
-		return instance;
-	}
-
-	/**
-	 * Perform a download, writing into the target output stream. Progress is reported on the
-	 * monitor. If the <code>target</code> is an instance of {@link IStateful} the resulting status
-	 * is also set on the target. An IStateful target is updated with status even if this methods
-	 * throws {@link OperationCanceledException}.
-	 * 
-	 * @returns IStatus, that is a {@link DownloadStatus} on success.
-	 * @param toDownload URI of file to download
-	 * @param target OutputStream where result is written
-	 * @param startPos the starting position of the download, or -1 for from start
-	 * @param monitor where progress should be reported
-	 * @throws OperationCanceledException if the operation was canceled.
-	 */
-	public IStatus download(URI toDownload, OutputStream target, long startPos, IProgressMonitor monitor) {
-
-		boolean promptUser = false;
-		boolean useJREHttp = false;
-		AuthenticationInfo loginDetails = null;
-		for (int i = RepositoryPreferences.getLoginRetryCount(); i > 0; i--) {
-			FileReader reader = null;
-			try {
-				loginDetails = Credentials.forLocation(toDownload, promptUser, loginDetails);
-				IConnectContext context = (loginDetails == null) ? null : ConnectContextFactory.createUsernamePasswordConnectContext(loginDetails.getUserName(), loginDetails.getPassword());
-
-				// perform the download
-				reader = new FileReader(context);
-				reader.readInto(toDownload, target, startPos, monitor);
-
-				// check that job ended ok - throw exceptions otherwise
-				IStatus result = reader.getResult();
-				if (result == null) {
-					String msg = NLS.bind(Messages.RepositoryTransport_failedReadRepo, toDownload);
-					DownloadStatus ds = new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, null);
-					return statusOn(target, ds, reader);
-				}
-				if (result.getSeverity() == IStatus.CANCEL)
-					throw new UserCancelledException();
-				if (!result.isOK())
-					throw new CoreException(result);
-
-				// Download status is expected on success
-				DownloadStatus status = new DownloadStatus(IStatus.OK, Activator.ID, Status.OK_STATUS.getMessage());
-				return statusOn(target, status, reader);
-			} catch (UserCancelledException e) {
-				statusOn(target, new DownloadStatus(IStatus.CANCEL, Activator.ID, 1, "", null), reader); //$NON-NLS-1$
-				throw new OperationCanceledException();
-			} catch (OperationCanceledException e) {
-				statusOn(target, new DownloadStatus(IStatus.CANCEL, Activator.ID, 1, "", null), reader); //$NON-NLS-1$
-				throw e;
-			} catch (CoreException e) {
-				if (e.getStatus().getException() == null)
-					return statusOn(target, RepositoryStatus.forException(e, toDownload), reader);
-				return statusOn(target, RepositoryStatus.forStatus(e.getStatus(), toDownload), reader);
-			} catch (FileNotFoundException e) {
-				return statusOn(target, RepositoryStatus.forException(e, toDownload), reader);
-			} catch (AuthenticationFailedException e) {
-				promptUser = true;
-			} catch (Credentials.LoginCanceledException e) {
-				DownloadStatus status = new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_AUTHENTICATION, //
-						NLS.bind(Messages.UnableToRead_0_UserCanceled, toDownload), null);
-				return statusOn(target, status, null);
-			} catch (JREHttpClientRequiredException e) {
-				if (!useJREHttp) {
-					useJREHttp = true; // only do this once
-					i++; // need an extra retry
-					Activator.getDefault().useJREHttpClient();
-				}
-			}
-		}
-		// reached maximum number of retries without success
-		DownloadStatus status = new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_AUTHENTICATION, //
-				NLS.bind(Messages.UnableToRead_0_TooManyAttempts, toDownload), null);
-		return statusOn(target, status, null);
-	}
-
-	/**
-	 * Perform a download, writing into the target output stream. Progress is reported on the
-	 * monitor. If the <code>target</code> is an instance of {@link IStateful} the resulting status
-	 * is also set on the target.
-	 * 
-	 * @returns IStatus, that is a {@link DownloadStatus} on success.
-	 * @param toDownload URI of file to download
-	 * @param target OutputStream where result is written
-	 * @param monitor where progress should be reported
-	 * @throws OperationCanceledException if the operation was canceled.
-	 */
-	public IStatus download(URI toDownload, OutputStream target, IProgressMonitor monitor) {
-		return download(toDownload, target, -1, monitor);
-	}
-
-	/**
-	 * Perform a stream download, writing into an InputStream that is returned. Performs authentication if needed.
-	 * 
-	 * @returns InputStream a stream with the content from the toDownload URI, or null
-	 * @param toDownload URI of file to download
-	 * @param monitor monitor checked for cancellation
-	 * @throws OperationCanceledException if the operation was canceled.
-	 * @throws AuthenticationFailedException if authentication failed, or too many attempt were made
-	 * @throws FileNotFoundException if the toDownload was reported as non existing
-	 * @throws CoreException on errors
-	 */
-	public InputStream stream(URI toDownload, IProgressMonitor monitor) throws FileNotFoundException, CoreException, AuthenticationFailedException {
-
-		boolean promptUser = false;
-		boolean useJREHttp = false;
-		AuthenticationInfo loginDetails = null;
-		for (int i = RepositoryPreferences.getLoginRetryCount(); i > 0; i--) {
-			FileReader reader = null;
-			try {
-				loginDetails = Credentials.forLocation(toDownload, promptUser, loginDetails);
-				IConnectContext context = (loginDetails == null) ? null : ConnectContextFactory.createUsernamePasswordConnectContext(loginDetails.getUserName(), loginDetails.getPassword());
-
-				// perform the streamed download
-				reader = new FileReader(context);
-				return reader.read(toDownload, monitor);
-			} catch (UserCancelledException e) {
-				throw new OperationCanceledException();
-			} catch (AuthenticationFailedException e) {
-				promptUser = true;
-			} catch (CoreException e) {
-				// must translate this core exception as it is most likely not informative to a user
-				if (e.getStatus().getException() == null)
-					throw new CoreException(RepositoryStatus.forException(e, toDownload));
-				throw new CoreException(RepositoryStatus.forStatus(e.getStatus(), toDownload));
-			} catch (LoginCanceledException e) {
-				// i.e. same behavior when user cancels as when failing n attempts.
-				throw new AuthenticationFailedException();
-			} catch (JREHttpClientRequiredException e) {
-				if (!useJREHttp) {
-					useJREHttp = true; // only do this once
-					i++; // need an extra retry
-					Activator.getDefault().useJREHttpClient();
-				}
-			}
-		}
-		throw new AuthenticationFailedException();
-	}
-
-	/**
-	 * Set the status on the output stream if it implements IStateful. 
-	 * Update the DownloadStatus with information from FileReader.
-	 * @param target an OutputStream possibly implementing IStateful
-	 * @param status a DownloadStatus configured with status message, code, etc
-	 * @param reader a FileReade that was used to download (or null if not known).
-	 * @throws OperationCanceledException if the operation was canceled by the user.
-	 * @return the configured DownloadStatus status.
-	 */
-	private static DownloadStatus statusOn(OutputStream target, DownloadStatus status, FileReader reader) {
-		if (reader != null) {
-			FileInfo fi = reader.getLastFileInfo();
-			if (fi != null) {
-				status.setFileSize(fi.getSize());
-				status.setLastModified(fi.getLastModified());
-				status.setTransferRate(fi.getAverageSpeed());
-			}
-		}
-		if (target instanceof IStateful)
-			((IStateful) target).setStatus(status);
-		return status;
-	}
-
-	/**
-	 * Returns the last modified date for a URI. A last modified of 0 typically indicates that
-	 * the server response is wrong, but should not be interpreted as a file not found.
-	 * @param toDownload
-	 * @param monitor
-	 * @throws OperationCanceledException if the operation was canceled by the user.
-	 * @return last modified date (possibly 0)
-	 */
-	public long getLastModified(URI toDownload, IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException {
-		boolean promptUser = false;
-		boolean useJREHttp = false;
-		AuthenticationInfo loginDetails = null;
-		for (int i = RepositoryPreferences.getLoginRetryCount(); i > 0; i--) {
-			try {
-				loginDetails = Credentials.forLocation(toDownload, promptUser, loginDetails);
-				IConnectContext context = (loginDetails == null) ? null : ConnectContextFactory.createUsernamePasswordConnectContext(loginDetails.getUserName(), loginDetails.getPassword());
-				// get the remote info
-				FileInfoReader reader = new FileInfoReader(context);
-				return reader.getLastModified(toDownload, monitor);
-			} catch (UserCancelledException e) {
-				throw new OperationCanceledException();
-			} catch (CoreException e) {
-				// must translate this core exception as it is most likely not informative to a user
-				if (e.getStatus().getException() == null)
-					throw new CoreException(RepositoryStatus.forException(e, toDownload));
-				throw new CoreException(RepositoryStatus.forStatus(e.getStatus(), toDownload));
-			} catch (AuthenticationFailedException e) {
-				promptUser = true;
-			} catch (LoginCanceledException e) {
-				// same behavior as if user failed n attempts.
-				throw new AuthenticationFailedException();
-			} catch (JREHttpClientRequiredException e) {
-				if (!useJREHttp) {
-					useJREHttp = true; // only do this once
-					i++; // need an extra retry
-					Activator.getDefault().useJREHttpClient();
-				}
-			}
-
-		}
-		// reached maximum number of authentication retries without success
-		throw new AuthenticationFailedException();
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Transport.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Transport.java
index 6eba11a..e57216c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Transport.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/Transport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,21 +7,68 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.repository;
 
-import java.io.OutputStream;
+import java.io.*;
 import java.net.URI;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.provisional.p2.repository.IStateful;
 
 public abstract class Transport {
 
+	public static final String SERVICE_NAME = Transport.class.getName();
+
+	/**
+	 * Perform a download, writing into the target output stream. Progress is reported on the
+	 * monitor. If the <code>target</code> is an instance of {@link IStateful} the resulting status
+	 * is also set on the target. An IStateful target is updated with status even if this methods
+	 * throws {@link OperationCanceledException}.
+	 * 
+	 * @returns IStatus, that is a {@link DownloadStatus} on success.
+	 * @param toDownload URI of file to download
+	 * @param target OutputStream where result is written
+	 * @param startPos the starting position of the download, or -1 for from start
+	 * @param monitor where progress should be reported
+	 * @throws OperationCanceledException if the operation was canceled.
+	 */
+	public abstract IStatus download(URI toDownload, OutputStream target, long startPos, IProgressMonitor monitor);
+
 	/**
+	 * Perform a download, writing into the target output stream. Progress is reported on the
+	 * monitor. If the <code>target</code> is an instance of {@link IStateful} the resulting status
+	 * is also set on the target.
+	 * 
+	 * @returns IStatus, that is a {@link DownloadStatus} on success.
+	 * @param toDownload URI of file to download
+	 * @param target OutputStream where result is written
+	 * @param monitor where progress should be reported
+	 * @throws OperationCanceledException if the operation was canceled.
+	 */
+	public abstract IStatus download(URI toDownload, OutputStream target, IProgressMonitor monitor);
+
+	/**
+	 * Perform a stream download, writing into an InputStream that is returned. Performs authentication if needed.
+	 * 
+	 * @returns InputStream a stream with the content from the toDownload URI, or null
+	 * @param toDownload URI of file to download
+	 * @param monitor monitor checked for cancellation
+	 * @throws OperationCanceledException if the operation was canceled.
+	 * @throws AuthenticationFailedException if authentication failed, or too many attempt were made
+	 * @throws FileNotFoundException if the toDownload was reported as non existing
+	 * @throws CoreException on errors
+	 */
+	public abstract InputStream stream(URI toDownload, IProgressMonitor monitor) throws FileNotFoundException, CoreException, AuthenticationFailedException;
+
+	/**
+	 * Returns the last modified date for a URI. A last modified of 0 typically indicates that
+	 * the server response is wrong, but should not be interpreted as a file not found.
 	 * @param toDownload
-	 * @param target
-	 * @param pm
-	 * @return IStatus describing outcome of the download
+	 * @param monitor
+	 * @throws OperationCanceledException if the operation was canceled by the user.
+	 * @return last modified date (possibly 0)
 	 */
-	public abstract IStatus download(URI toDownload, OutputStream target, IProgressMonitor pm);
+	public abstract long getLastModified(URI toDownload, IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException;
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java
index 4eeed0b..01b2602 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Wind River - fix for bug 299227
+ *     Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.repository.helpers;
 
@@ -18,7 +19,8 @@ import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.preferences.IPreferencesService;
 import org.eclipse.equinox.internal.p2.core.helpers.*;
-import org.eclipse.equinox.internal.p2.repository.*;
+import org.eclipse.equinox.internal.p2.repository.Activator;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
 import org.eclipse.equinox.internal.provisional.p2.core.eventbus.ProvisioningListener;
 import org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent;
@@ -621,13 +623,12 @@ public abstract class AbstractRepositoryManager<T> implements IRepositoryManager
 
 	protected IRepository<T> loadRepository(URI location, IProgressMonitor monitor, String type, int flags) throws ProvisionException {
 		checkValidLocation(location);
-		if (monitor == null)
-			monitor = new NullProgressMonitor();
+		SubMonitor sub = SubMonitor.convert(monitor, 100);
 		boolean added = false;
 		IRepository<T> result = null;
 
 		try {
-			enterLoad(location, monitor);
+			enterLoad(location, sub.newChild(5));
 			result = basicGetRepository(location);
 			if (result != null)
 				return result;
@@ -636,12 +637,11 @@ public abstract class AbstractRepositoryManager<T> implements IRepositoryManager
 			//add the repository first so that it will be enabled, but don't send add event until after the load
 			added = addRepository(location, true, false);
 
-			LocationProperties indexFile = loadIndexFile(location, monitor);
-
+			LocationProperties indexFile = loadIndexFile(location, sub.newChild(15));
 			String[] preferredOrder = getPreferredRepositorySearchOrder(indexFile);
 			String[] suffixes = sortSuffixes(getAllSuffixes(), location, preferredOrder);
 
-			SubMonitor sub = SubMonitor.convert(monitor, NLS.bind(Messages.repoMan_adding, location), suffixes.length * 100);
+			sub = SubMonitor.convert(sub, NLS.bind(Messages.repoMan_adding, location), suffixes.length * 100);
 			ProvisionException failure = null;
 			try {
 				for (int i = 0; i < suffixes.length; i++) {
@@ -690,6 +690,9 @@ public abstract class AbstractRepositoryManager<T> implements IRepositoryManager
 	private LocationProperties loadIndexFile(URI location, IProgressMonitor monitor) {
 		LocationProperties locationProperties = LocationProperties.createEmptyIndexFile();
 		//Handle the case of local repos
+		if ("memory".equals(location.getScheme())) //$NON-NLS-1$
+			return locationProperties;
+
 		if ("file".equals(location.getScheme())) { //$NON-NLS-1$ 
 			InputStream localStream = null;
 			try {
@@ -1166,7 +1169,17 @@ public abstract class AbstractRepositoryManager<T> implements IRepositoryManager
 		return new URI(spec);
 	}
 
-	private Transport getTransport() {
-		return RepositoryTransport.getInstance();
+	protected Transport getTransport() {
+		return (Transport) agent.getService(Transport.SERVICE_NAME);
+	}
+
+	public void flushCache() {
+		synchronized (repositories) {
+			Collection<RepositoryInfo<T>> repos = repositories.values();
+			for (Iterator<RepositoryInfo<T>> iterator = repos.iterator(); iterator.hasNext();) {
+				RepositoryInfo<T> repositoryInfo = iterator.next();
+				repositoryInfo.repository = null;
+			}
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/DebugHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/DebugHelper.java
index b2f599b..e2f29b7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/DebugHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/DebugHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/RepositoryHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/RepositoryHelper.java
index 050693f..bb24659 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/RepositoryHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/helpers/RepositoryHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/messages.properties
index 092c168..4e59267 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2007, 2011 IBM Corporation and others.
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ repo_loading = Loading the repository {0}
 CacheManager_Neither_0_nor_1_found=Neither {0} nor {1} found.
 CacheManager_AuthenticationFaileFor_0=Authentication failed for {0}.
 CacheManager_FailedCommunicationWithRepo_0=Communication with repository at {0} failed.
+CacheManage_ErrorRenamingCache=An error occurred while downloading {0}. The cache file {1} could not be renamed to {1}.
 
 exception_malformedRepoURI = The repository location ({0}) must be a URI.
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepository.java
index 35a722a..f4403e3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.equinox.p2.repository;
 import java.net.URI;
 import java.util.Map;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.query.IQueryable;
 
@@ -204,4 +205,18 @@ public interface IRepository<T> extends IAdaptable, IQueryable<T> {
 	 * @return The old property value, or <code>null</code> if there was no old value
 	 */
 	public String setProperty(String key, String value);
+
+	/**
+	 * Sets the value of the property with the given key. Returns the old property
+	 * associated with that key, if any.  Setting a value of <code>null</code> will
+	 * remove the corresponding key from the properties of this repository.
+	 * 
+	 * @param key The property key
+	 * @param value The new property value, or <code>null</code> to remove the key
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @return The old property value, or <code>null</code> if there was no old value
+	 * @since 2.1
+	 */
+	public String setProperty(String key, String value, IProgressMonitor monitor);
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepositoryManager.java
index 2cb3d22..45be579 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,7 +112,7 @@ public interface IRepositoryManager<T> extends IQueryable<T> {
 	public IProvisioningAgent getAgent();
 
 	/**
-	 * Returns the artifact repository locations known to the repository manager.
+	 * Returns the repository locations known to the repository manager.
 	 * <p>
 	 * Note that the repository manager does not guarantee that a valid repository
 	 * exists at any of the returned locations at any particular moment in time.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRunnableWithProgress.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRunnableWithProgress.java
index b4b7344..27f118a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRunnableWithProgress.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/IRunnableWithProgress.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.p2.repository;
 
 import java.lang.reflect.InvocationTargetException;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactDescriptor.java
index db3c2eb..81557cf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java
index ae46654..07a3559 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -62,15 +62,38 @@ public interface IArtifactRepository extends IRepository<IArtifactKey> {
 	 * content is in this repository and the given descriptor accurately describes 
 	 * that content.
 	 * @param descriptor the descriptor to add.
+	 * @deprecated See {{@link #addDescriptor(IArtifactDescriptor, IProgressMonitor)}
 	 */
 	public void addDescriptor(IArtifactDescriptor descriptor);
 
 	/**
+	 * Add the given descriptor to the set of descriptors in this repository.  This is 
+	 * a relatively low-level operation that should be used only when the actual related 
+	 * content is in this repository and the given descriptor accurately describes 
+	 * that content.
+	 * @param descriptor the descriptor to add.
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @since 2.1
+	 */
+	public void addDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor);
+
+	/**
 	 * Add the given artifact descriptors to this repository
 	 * @param descriptors the artifact descriptors to add
+	 * @deprecated See {{@link #addDescriptors(IArtifactDescriptor[], IProgressMonitor)}
 	 */
 	public void addDescriptors(IArtifactDescriptor[] descriptors);
 
+	/**
+	 * Add the given artifact descriptors to this repository
+	 * @param descriptors the artifact descriptors to add
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @since 2.1
+	 */
+	public void addDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor);
+
 	/** 
 	 * Returns true if this repository contains the given descriptor.
 	 * @param descriptor the descriptor to query
@@ -151,22 +174,89 @@ public interface IArtifactRepository extends IRepository<IArtifactKey> {
 
 	/**
 	 * Remove the all keys, descriptors, and contents from this repository.
+	 * @deprecated See {@link #removeAll(IProgressMonitor)}
 	 */
 	public void removeAll();
 
 	/**
+	 * Remove the all keys, descriptors, and contents from this repository.
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @since 2.1
+	 */
+	public void removeAll(IProgressMonitor monitor);
+
+	/**
 	 * Remove the given descriptor and its corresponding content in this repository.  
 	 * @param descriptor the descriptor to remove.
+	 * @deprecated See {@link #removeDescriptor(IArtifactDescriptor, IProgressMonitor)}
 	 */
 	public void removeDescriptor(IArtifactDescriptor descriptor);
 
 	/**
+	 * Remove the given descriptor and its corresponding content in this repository.  
+	 * @param descriptor the descriptor to remove.
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @since 2.1
+	 */
+	public void removeDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor);
+
+	/**
 	 * Remove the given key and all related content and descriptors from this repository.  
 	 * @param key the key to remove.
+	 * @deprecated See {@link #removeDescriptor(IArtifactKey, IProgressMonitor)}
 	 */
 	public void removeDescriptor(IArtifactKey key);
 
 	/**
+	 * Remove the given key and all related content and descriptors from this repository.  
+	 * @param key the key to remove.
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @since 2.1
+	 */
+	public void removeDescriptor(IArtifactKey key, IProgressMonitor monitor);
+
+	/**
+	 * Remove the given list of artifact descriptors and their corresponding content
+	 * in this repository.
+	 * @param descriptors the list of descriptors to remove
+	 * @since 2.1
+	 * @deprecated See {@link #removeDescriptors(IArtifactDescriptor[], IProgressMonitor)}
+	 */
+	public void removeDescriptors(IArtifactDescriptor[] descriptors);
+
+	/**
+	 * Remove the given list of artifact descriptors and their corresponding content
+	 * in this repository.
+	 * @param descriptors the list of descriptors to remove
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @since 2.1
+	 */
+	public void removeDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor);
+
+	/**
+	 * Remove the given list of keys and all related content and descriptors from this
+	 * repository.
+	 * @param keys
+	 * @since 2.1
+	 * @deprecated See {@link #removeDescriptors(IArtifactKey[], IProgressMonitor)}
+	 */
+	public void removeDescriptors(IArtifactKey[] keys);
+
+	/**
+	 * Remove the given list of keys and all related content and descriptors from this
+	 * repository.
+	 * @param keys
+	 * @param monitor A progress monitor use to track progress and cancel the operation.  This may
+	 * be a long running operation if another process holds the lock on this location
+	 * @since 2.1
+	 */
+	public void removeDescriptors(IArtifactKey[] keys, IProgressMonitor monitor);
+
+	/**
 	 * Executes a runnable against this repository. It is up to the repository
 	 * implementor to determine what "batch process" means, for example, it may mean
 	 * that the repository index is not stored until after the runnable completes.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepositoryManager.java
index 45d2a54..c11690b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java
index 692c66f..a4f2838 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -51,26 +51,113 @@ public abstract class AbstractArtifactRepository extends AbstractRepository<IArt
 
 	public abstract OutputStream getOutputStream(IArtifactDescriptor descriptor) throws ProvisionException;
 
+	/**
+	 * @since 2.1
+	 */
+	public void addDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		assertModifiable();
+	}
+
+	/**
+	 * @deprecated 
+	 */
 	public void addDescriptor(IArtifactDescriptor descriptor) {
+		this.addDescriptor(descriptor, new NullProgressMonitor());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * @since 2.1
+	 */
+	public void addDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
 		assertModifiable();
 	}
 
+	/**
+	 * @deprecated 
+	 */
 	public void addDescriptors(IArtifactDescriptor[] descriptors) {
+		this.addDescriptors(descriptors, new NullProgressMonitor());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * @since 2.1
+	 */
+	public void removeDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
 		assertModifiable();
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public void removeDescriptor(IArtifactDescriptor descriptor) {
+		this.removeDescriptor(descriptor, new NullProgressMonitor());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * @since 2.1
+	 */
+	public void removeDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		assertModifiable();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * @since 2.1
+	 * @deprecated ?? Strange that we added an API and then deprecated it
+	 */
+	public void removeDescriptors(IArtifactDescriptor[] descriptors) {
+		this.removeDescriptors(descriptors, new NullProgressMonitor());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * @since 2.1
+	 */
+	public void removeDescriptor(IArtifactKey key, IProgressMonitor monitor) {
 		assertModifiable();
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public void removeDescriptor(IArtifactKey key) {
+		this.removeDescriptor(key, new NullProgressMonitor());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * @since 2.1
+	 */
+	public void removeDescriptors(IArtifactKey[] keys, IProgressMonitor monitor) {
 		assertModifiable();
 	}
 
-	public void removeAll() {
+	/**
+	 * {@inheritDoc}
+	 * @since 2.1
+	 * @deprecated ?? Strange that we added an API and then deprecated it
+	 */
+	public void removeDescriptors(IArtifactKey[] keys) {
+		this.removeDescriptors(keys, new NullProgressMonitor());
+	}
+
+	/**
+	 * @since 2.1
+	 */
+	public void removeAll(IProgressMonitor monitor) {
 		assertModifiable();
 	}
 
+	/**
+	 * @deprecated
+	 */
+	public void removeAll() {
+		this.removeAll(new NullProgressMonitor());
+	}
+
 	public boolean equals(Object o) {
 		if (this == o) {
 			return true;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactDescriptor.java
index 350e17b..38a8d34 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactRepositoryFactory.java
index ead8d66..32ce0ca 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ArtifactRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ProcessingStepDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ProcessingStepDescriptor.java
index 3587ec6..ba7e4aa 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ProcessingStepDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/ProcessingStepDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (c) 2007, 2009 compeople AG and others.
+* Copyright (c) 2007, 2010 compeople AG and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepository.java
index e6633c3..54654f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.equinox.p2.repository.metadata;
 import java.util.Collection;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.p2.core.IPool;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.repository.*;
 import org.eclipse.equinox.p2.repository.metadata.spi.AbstractMetadataRepository;
@@ -81,4 +82,17 @@ public interface IMetadataRepository extends IRepository<IInstallableUnit> {
 	 * the execution will be returned in the status.
 	 */
 	public IStatus executeBatch(IRunnableWithProgress runnable, IProgressMonitor monitor);
+
+	/**
+	 * Cause semantically equivalent IInstallableUnits in the receiver to be
+	 * replaced with a shared object from the provided {@link IPool}.  New objects are
+	 * added to the {@link IPool} as required.
+	 * <p>
+	 * While the {@link IPool} should be retained to increase the scope of sharing when
+	 * calling {@link #compress(IPool)} on subsequent repositories, the {@link IPool} can 
+	 * be discarded without adversely effecting the receiver.
+	 * </p>
+	 * @since 2.1
+	 */
+	public void compress(IPool<IInstallableUnit> iuPool);
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepositoryManager.java
index 7e76515..18fb958 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/IMetadataRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/AbstractMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/AbstractMetadataRepository.java
index b526bb8..92cae17 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/AbstractMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/AbstractMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.Collection;
 import java.util.Map;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.repository.Activator;
+import org.eclipse.equinox.p2.core.IPool;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.Version;
@@ -151,4 +152,14 @@ public abstract class AbstractMetadataRepository extends AbstractRepository<IIns
 		return Status.OK_STATUS;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.repository.metadata.IMetadataRepository#compress(IPool<IInstallableUnit> iuPool)
+	 */
+	/**
+	 * @since 2.1
+	 */
+	public void compress(IPool<IInstallableUnit> iuPool) {
+		// Default no-op.  Subclasses should override as appropriate
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/MetadataRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/MetadataRepositoryFactory.java
index 0518b80..ff63e10 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/MetadataRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/metadata/spi/MetadataRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/spi/AbstractRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/spi/AbstractRepository.java
index e833c1c..3f3ce4a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/spi/AbstractRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/spi/AbstractRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,12 +7,13 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     EclipseSource   - Ongoing development
  *******************************************************************************/
 package org.eclipse.equinox.p2.repository.spi;
 
 import java.net.URI;
 import java.util.Map;
-import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.OrderedProperties;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.repository.IRepository;
@@ -171,8 +172,9 @@ public abstract class AbstractRepository<T> extends PlatformObject implements IR
 
 	/**
 	 * {@inheritDoc}
+	 * @since 2.1
 	 */
-	public synchronized String setProperty(String key, String value) {
+	public synchronized String setProperty(String key, String value, IProgressMonitor monitor) {
 		assertModifiable();
 		if (key.equals(IRepository.PROP_NAME)) {
 			String oldName = getName();
@@ -183,6 +185,13 @@ public abstract class AbstractRepository<T> extends PlatformObject implements IR
 	}
 
 	/**
+	 * {@inheritDoc}
+	 */
+	public synchronized String setProperty(String key, String value) {
+		return this.setProperty(key, value, new NullProgressMonitor());
+	}
+
+	/**
 	 * Sets the provider of this repository
 	 * 
 	 * @param provider the repository provider
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
index 62fcbed..bac57f5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.touchpoint.eclipse;singleton:=true
-Bundle-Version: 2.0.3.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.touchpoint.eclipse.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -22,7 +22,6 @@ Import-Package: javax.xml.parsers,
  org.eclipse.equinox.internal.p2.garbagecollector,
  org.eclipse.equinox.internal.p2.metadata,
  org.eclipse.equinox.internal.provisional.frameworkadmin,
- org.eclipse.equinox.internal.provisional.p2.director;resolution:=optional,
  org.eclipse.equinox.internal.provisional.p2.repository,
  org.eclipse.equinox.internal.simpleconfigurator.manipulator,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
@@ -45,6 +44,6 @@ Import-Package: javax.xml.parsers,
  org.eclipse.osgi.util;version="1.1.0",
  org.osgi.framework;version="1.3.0",
  org.osgi.service.prefs;version="1.1.1",
- org.osgi.util.tracker;version="1.3.0",
+ org.osgi.util.tracker;version="1.4.0",
  org.w3c.dom,
  org.xml.sax
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/build.properties
index 0328daa..167d8e3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/plugin.xml b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/plugin.xml
index ab256c1..d0559af 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/plugin.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/plugin.xml
@@ -30,6 +30,16 @@
  <extension
        point="org.eclipse.equinox.p2.engine.actions">
     <action
+          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.AddProgramPropertyAction"
+          name="addProgramProperty"
+          touchpointType="org.eclipse.equinox.p2.osgi"
+          touchpointVersion="1.0.0"
+          version="1.0.0">
+    </action>
+ </extension>
+ <extension
+       point="org.eclipse.equinox.p2.engine.actions">
+    <action
           class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.AddRepositoryAction"
           name="addRepository"
           touchpointType="org.eclipse.equinox.p2.osgi"
@@ -140,6 +150,16 @@
  <extension
        point="org.eclipse.equinox.p2.engine.actions">
     <action
+          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.RemoveProgramPropertyAction"
+          name="removeProgramProperty"
+          touchpointType="org.eclipse.equinox.p2.osgi"
+          touchpointVersion="1.0.0"
+          version="1.0.0">
+    </action>
+ </extension>
+ <extension
+       point="org.eclipse.equinox.p2.engine.actions">
+    <action
           class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.RemoveRepositoryAction"
           name="removeRepository"
           touchpointType="org.eclipse.equinox.p2.osgi"
@@ -160,6 +180,16 @@
  <extension
        point="org.eclipse.equinox.p2.engine.actions">
     <action
+          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetJvmAction"
+          name="setJvm"
+          touchpointType="org.eclipse.equinox.p2.osgi"
+          touchpointVersion="1.0.0"
+          version="1.0.0">
+    </action>
+ </extension>
+ <extension
+       point="org.eclipse.equinox.p2.engine.actions">
+    <action
           class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetProgramPropertyAction"
           name="setFrameworkDependentProperty"
           touchpointType="org.eclipse.equinox.p2.osgi"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
index 7c7fef2..a16ea9b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.touchpoint.eclipse</artifactId>
-  <version>2.0.2.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/AggregatedBundleRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/AggregatedBundleRepository.java
index b268d65..8e422c5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/AggregatedBundleRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/AggregatedBundleRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/DirectorUtil.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/DirectorUtil.java
index 42c022e..683d1a6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/DirectorUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/DirectorUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009-2010 IBM Corporation and others.
+ *  Copyright (c) 2009, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,18 +13,18 @@ package org.eclipse.equinox.internal.p2.touchpoint.eclipse;
 
 import java.net.URI;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.engine.ProvisioningContext;
 import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 
 public class DirectorUtil {
 
 	public static IStatus validateProfile(IProfile profile) {
-		ProfileChangeRequest pcr = new ProfileChangeRequest(profile);
+		IPlanner planner = (IPlanner) profile.getProvisioningAgent().getService(IPlanner.SERVICE_NAME);
+		IProfileChangeRequest pcr = planner.createChangeRequest(profile);
 		ProvisioningContext ctx = new ProvisioningContext(profile.getProvisioningAgent());
 		ctx.setMetadataRepositories(new URI[0]);
-		IPlanner planner = (IPlanner) profile.getProvisioningAgent().getService(IPlanner.SERVICE_NAME);
 		return planner.getProvisioningPlan(pcr, ctx, null).getStatus();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
index cfa60c0..d9ac525 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/LazyManipulator.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/LazyManipulator.java
index 4303c60..cafd922 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/LazyManipulator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/LazyManipulator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,12 +68,12 @@ public class LazyManipulator implements Manipulator {
 	}
 
 	public static FrameworkAdmin getFrameworkAdmin() {
-		ServiceTracker fwAdminTracker = null;
+		ServiceTracker<FrameworkAdmin, FrameworkAdmin> fwAdminTracker = null;
 		try {
 			Filter filter = Activator.getContext().createFilter(filterFwAdmin);
-			fwAdminTracker = new ServiceTracker(Activator.getContext(), filter, null);
+			fwAdminTracker = new ServiceTracker<FrameworkAdmin, FrameworkAdmin>(Activator.getContext(), filter, null);
 			fwAdminTracker.open();
-			FrameworkAdmin fwAdmin = (FrameworkAdmin) fwAdminTracker.getService();
+			FrameworkAdmin fwAdmin = fwAdminTracker.getService();
 			return fwAdmin;
 		} catch (InvalidSyntaxException e) {
 			//Can't happen we are writing the filter ourselves
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/PublisherUtil.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/PublisherUtil.java
index 1f6151b..fa186ea 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/PublisherUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/PublisherUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009 IBM Corporation and others.
+ *  Copyright (c) 2009, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.equinox.internal.p2.touchpoint.eclipse;
 import java.io.File;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.publisher.AdviceFileAdvice;
 import org.eclipse.equinox.p2.publisher.PublisherInfo;
 import org.eclipse.equinox.p2.publisher.eclipse.*;
 import org.eclipse.osgi.service.resolver.BundleDescription;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/WhatIsRunning.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/WhatIsRunning.java
index 28ea863..1901f52 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/WhatIsRunning.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/WhatIsRunning.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ActionConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ActionConstants.java
index f0201a7..27bd0f6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ActionConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ActionConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008-2009 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2011 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -20,6 +20,7 @@ public class ActionConstants {
 	public static final String PARM_FEATURE_VERSION = "featureVersion"; //$NON-NLS-1$
 	public static final String PARM_IGNORE = "@ignore"; //$NON-NLS-1$
 	public static final String PARM_IU = "iu"; //$NON-NLS-1$
+	public static final String PARM_JVM = "jvm"; //$NON-NLS-1$
 	public static final String PARM_JVM_ARG = "jvmArg"; //$NON-NLS-1$
 	public static final String PARM_PREVIOUS_START_LEVEL = "previousStartLevel"; //$NON-NLS-1$
 	public static final String PARM_PREVIOUS_STARTED = "previousStarted"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddJVMArgumentAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddJVMArgumentAction.java
index 9268549..33f1a02 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddJVMArgumentAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddJVMArgumentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008-2009 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddProgramArgumentAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddProgramArgumentAction.java
index b44806f..9cc7f6b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddProgramArgumentAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddProgramArgumentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddProgramPropertyAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddProgramPropertyAction.java
new file mode 100644
index 0000000..48d9ba9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddProgramPropertyAction.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions;
+
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
+import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.Manipulator;
+import org.eclipse.equinox.p2.engine.spi.ProvisioningAction;
+import org.eclipse.osgi.util.NLS;
+
+public class AddProgramPropertyAction extends ProvisioningAction {
+	public static final String ID = "addProgramProperty"; //$NON-NLS-1$
+
+	// treat the given string as a comma-separated list and parse and 
+	// convert it to a real list
+	protected static List<String> convertToList(String value) {
+		List<String> result = new ArrayList<String>();
+		for (StringTokenizer tokenizer = new StringTokenizer(value, ","); tokenizer.hasMoreTokens();) //$NON-NLS-1$
+			result.add(tokenizer.nextToken());
+		return result;
+	}
+
+	// convert the given list to a comma-separated string
+	protected static String convertToString(List<String> list) {
+		StringBuffer buffer = new StringBuffer();
+		for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
+			buffer.append(iter.next());
+			if (iter.hasNext())
+				buffer.append(',');
+		}
+		return buffer.toString();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.spi.ProvisioningAction#execute(java.util.Map)
+	 */
+	public IStatus execute(Map<String, Object> parameters) {
+		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
+		String propName = (String) parameters.get(ActionConstants.PARM_PROP_NAME);
+		if (propName == null)
+			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_PROP_NAME, ID));
+		String propValue = (String) parameters.get(ActionConstants.PARM_PROP_VALUE);
+		if (propValue == null)
+			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_PROP_VALUE, ID));
+		if (propValue != null && propValue.equals(ActionConstants.PARM_AT_ARTIFACT)) {
+			try {
+				propValue = Util.resolveArtifactParam(parameters);
+			} catch (CoreException e) {
+				return e.getStatus();
+			}
+		}
+
+		// if there was no value previously, then just set our key/value pair and return.
+		// otherwise we have to merge. 
+		ConfigData data = manipulator.getConfigData();
+		String previous = data.getProperty(propName);
+		// make a backup - even if it is null 
+		getMemento().put(ActionConstants.PARM_PREVIOUS_VALUE, previous);
+		// assume the value is a comma-separated list and just add ourselves to the end
+		if (previous != null)
+			propValue = previous + ',' + propValue;
+		data.setProperty(propName, propValue);
+		return Status.OK_STATUS;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.spi.ProvisioningAction#undo(java.util.Map)
+	 */
+	public IStatus undo(Map<String, Object> parameters) {
+		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
+		String propName = (String) parameters.get(ActionConstants.PARM_PROP_NAME);
+		if (propName == null)
+			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_PROP_NAME, ID));
+		String previous = (String) getMemento().get(ActionConstants.PARM_PREVIOUS_VALUE);
+		manipulator.getConfigData().setProperty(propName, previous);
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddSourceBundleAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddSourceBundleAction.java
index 640132e..f61e1bb 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddSourceBundleAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/AddSourceBundleAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CheckTrustAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CheckTrustAction.java
index 7139777..7942881 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CheckTrustAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CheckTrustAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ChmodAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ChmodAction.java
index 6b49224..89d80c1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ChmodAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/ChmodAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CollectAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CollectAction.java
index fac3590..5fe41c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CollectAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/CollectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallFeatureAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallFeatureAction.java
index b9d55ba..38daa59 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallFeatureAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallFeatureAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/LinkAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/LinkAction.java
index fa8825e..494ccb5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/LinkAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/LinkAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveJVMArgumentAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveJVMArgumentAction.java
index 10d00d6..d027218 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveJVMArgumentAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveJVMArgumentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008-2009 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveProgramArgumentAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveProgramArgumentAction.java
index e61c386..a6a1330 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveProgramArgumentAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveProgramArgumentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveProgramPropertyAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveProgramPropertyAction.java
new file mode 100644
index 0000000..18b3a67
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveProgramPropertyAction.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions;
+
+import java.util.List;
+import java.util.Map;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
+import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.Manipulator;
+import org.eclipse.equinox.p2.engine.spi.ProvisioningAction;
+import org.eclipse.osgi.util.NLS;
+
+public class RemoveProgramPropertyAction extends ProvisioningAction {
+	public static final String ID = "removeProgramProperty"; //$NON-NLS-1$
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.spi.ProvisioningAction#execute(java.util.Map)
+	 */
+	public IStatus execute(Map<String, Object> parameters) {
+		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
+		String propName = (String) parameters.get(ActionConstants.PARM_PROP_NAME);
+		if (propName == null)
+			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_PROP_NAME, ID));
+		String propValue = (String) parameters.get(ActionConstants.PARM_PROP_VALUE);
+
+		ConfigData data = manipulator.getConfigData();
+		String previous = data.getProperty(propName);
+		if (previous == null)
+			return Status.OK_STATUS;
+		// make a backup - even if it is null 
+		getMemento().put(ActionConstants.PARM_PREVIOUS_VALUE, previous);
+		// if the value is null, remove the key/value pair. 
+		if (propValue == null) {
+			data.setProperty(propName, null);
+			return Status.OK_STATUS;
+		}
+		// Otherwise treat the current value as a comma-separated list and remove 
+		// just the one value that was specified.
+		List<String> list = AddProgramPropertyAction.convertToList(previous);
+		// if the value wasn't in the list, then just return
+		if (!list.remove(propValue))
+			return Status.OK_STATUS;
+		// otherwise set the property to the new value, or remove it if it is now empty
+		propValue = list.isEmpty() ? null : AddProgramPropertyAction.convertToString(list);
+		data.setProperty(propName, propValue);
+		return Status.OK_STATUS;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.spi.ProvisioningAction#undo(java.util.Map)
+	 */
+	public IStatus undo(Map<String, Object> parameters) {
+		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
+		String propName = (String) parameters.get(ActionConstants.PARM_PROP_NAME);
+		if (propName == null)
+			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_PROP_NAME, ID));
+		String previous = (String) getMemento().get(ActionConstants.PARM_PREVIOUS_VALUE);
+		manipulator.getConfigData().setProperty(propName, previous);
+		return Status.OK_STATUS;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveSourceBundleAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveSourceBundleAction.java
index c944904..861e5ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveSourceBundleAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/RemoveSourceBundleAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetJvmAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetJvmAction.java
new file mode 100644
index 0000000..7b5a643
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetJvmAction.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others. All rights reserved. This
+ * program and the accompanying materials are made available under the terms of
+ * the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: 
+ *    IBM Corporation - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions;
+
+import java.io.File;
+import java.util.Map;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
+import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.LauncherData;
+import org.eclipse.equinox.internal.provisional.frameworkadmin.Manipulator;
+import org.eclipse.equinox.p2.engine.spi.ProvisioningAction;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Touchpoint action which allows the user to set the -vm parameter in the 
+ * eclipse.ini file.
+ *
+ */
+public class SetJvmAction extends ProvisioningAction {
+	public static final String ID = "setJvm"; //$NON-NLS-1$
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.spi.ProvisioningAction#execute(java.util.Map)
+	 */
+	public IStatus execute(Map<String, Object> parameters) {
+		String jvmArg = (String) parameters.get(ActionConstants.PARM_JVM);
+		if (jvmArg == null)
+			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_JVM, ID));
+		LauncherData launcherData = ((Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR)).getLauncherData();
+		File previous = launcherData.getJvm();
+		File jvm = "null".equals(jvmArg) ? null : new File(jvmArg); //$NON-NLS-1$
+		// make a backup - even if it is null 
+		getMemento().put(ActionConstants.PARM_PREVIOUS_VALUE, previous == null ? null : previous.getPath());
+		launcherData.setJvm(jvm);
+		return Status.OK_STATUS;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.engine.spi.ProvisioningAction#undo(java.util.Map)
+	 */
+	public IStatus undo(Map<String, Object> parameters) {
+		String jvmArg = (String) parameters.get(ActionConstants.PARM_JVM);
+		if (jvmArg == null)
+			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_JVM, ID));
+		// make a backup - even if it is null 
+		String previous = (String) getMemento().get(ActionConstants.PARM_PREVIOUS_VALUE);
+		LauncherData launcherData = ((Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR)).getLauncherData();
+		launcherData.setJvm(previous == null ? null : new File(previous));
+		return Status.OK_STATUS;
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetLauncherNameAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetLauncherNameAction.java
index c9101fe..c6ae609 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetLauncherNameAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetLauncherNameAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetProgramPropertyAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetProgramPropertyAction.java
index e334402..5408227 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetProgramPropertyAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetProgramPropertyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallFeatureAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallFeatureAction.java
index 33bee8e..10f2163 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallFeatureAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallFeatureAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Configuration.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Configuration.java
index 588a5c7..820f9ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Configuration.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Configuration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationCache.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationCache.java
index 53c5c65..039af84 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationCache.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationCache.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationIO.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationIO.java
index 44dfae1..d83d715 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationIO.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/ConfigurationIO.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Site.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Site.java
index 10411b2..fa28bc9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Site.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/Site.java
@@ -38,6 +38,17 @@ public class Site {
 		this.list.add(plugin);
 	}
 
+	public boolean removePlugin(String plugin) {
+		return this.list.remove(plugin);
+	}
+
+	public void setPluginList(List<String> plugins) {
+		if (plugins == null)
+			this.list = new ArrayList<String>();
+		else
+			this.list = plugins;
+	}
+
 	public Feature[] getFeatures() {
 		return features.toArray(new Feature[features.size()]);
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java
index 192f1d7..59f1b2c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/update/XMLWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/META-INF/MANIFEST.MF
index 98ee2c4..518dec9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.touchpoint.natives;singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.touchpoint.natives.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/build.properties
index 0328daa..167d8e3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/pom.xml
index 1d86bdb..32cc7c5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.touchpoint.natives</artifactId>
-  <version>1.0.200.qualifier</version>
+  <version>1.0.300.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/BackupStore.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/BackupStore.java
index 82a3503..0125ce0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/BackupStore.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/BackupStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2011 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     Cloudsmith Inc. - initial API and implementation
+ *     SAP AG - Ongoing development
  *******************************************************************************/
 
 package org.eclipse.equinox.internal.p2.touchpoint.natives;
@@ -225,26 +226,41 @@ public class BackupStore implements IBackupStore {
 		if (file.isDirectory())
 			return backupDirectory(file);
 		file = makeParentCanonical(file);
-		File buRoot = backupRoot;
-		// File buRoot = findBackupRoot(file);
-		File buDir = new File(buRoot, backupName);
-		// move the file
-		// create the relative path from root and use that in buDir
-		File buFile = new File(buDir, makeRelativeFromRoot(file).getPath());
+		File buFile = getBackupFile(file);
 		// already backed up, but was a directory = wrong usage
 		if (buFile.isDirectory())
 			throw new IllegalArgumentException(NLS.bind(Messages.BackupStore_directory_file_mismatch, buFile.getAbsolutePath()));
 		// has already been backed up - can only be done once with one BackupStore
-		if (buFile.exists())
+		if (buFile.exists()) {
+			// although backed up, the file can be still on the file system when, for example,
+			// two IUs are unzipping their contents to the same location and share a few common file,
+			// which have to be removed twice
+			if (file.exists() && !file.delete())
+				throw new IOException(NLS.bind(Messages.BackupStore_can_not_remove, file.getAbsolutePath()));
 			return false;
+		}
+
+		moveToBackup(file, buFile);
+
+		return true;
+	}
 
+	/**
+	 * Move/rename file to a backup file. Callers of the method must have ensured that the source file exists and the
+	 * backup file has not been created yet.
+	 * 
+	 * @param file source file to move; should already exist and must not be directory
+	 * @param buFile destination backup file to move to; should not exist and must be a directory
+	 * @throws IOException if the backup operation fails
+	 */
+	private void moveToBackup(File file, File buFile) throws IOException {
 		// make sure all of the directories exist / gets created
 		buFile.getParentFile().mkdirs();
 		if (buFile.getParentFile().exists() && !buFile.getParentFile().isDirectory())
 			throw new IllegalArgumentException(NLS.bind(Messages.BackupStore_file_directory_mismatch, buFile.getParentFile().getAbsolutePath()));
 		if (file.renameTo(buFile)) {
 			backupCounter++;
-			return true;
+			return;
 		}
 		// could not move - this can happen because source and target are on different volumes, or
 		// that source is locked "in use" on a windows machine. The copy will work across volumes,
@@ -256,8 +272,14 @@ public class BackupStore implements IBackupStore {
 		// need to remove the backed up file
 		if (!file.delete())
 			throw new IOException(NLS.bind(Messages.BackupStore_can_not_delete_after_copy_0, file));
+	}
 
-		return true;
+	private File getBackupFile(File file) {
+		File buRoot = backupRoot;
+		File buDir = new File(buRoot, backupName);
+		// create the relative path from root and use that in buDir
+		File buFile = new File(buDir, makeRelativeFromRoot(file).getPath());
+		return buFile;
 	}
 
 	/**
@@ -366,7 +388,7 @@ public class BackupStore implements IBackupStore {
 	 * A call to backup a directory is really only needed for empty directories as a restore
 	 * of a file will also restore all of its parent directories.
 	 * @param file - the (empty) directory to back up
-	 * @return true if the directory was moved to backup. false if the directory was already backed up and remains.
+	 * @return true if the directory was moved to backup. false if the directory was already backed up
 	 * @throws IllegalArgumentException if file is not a directory, or is not empty.
 	 * @throws IOException if directory can not be moved to the backup store, or if the directory is not writeable
 	 */
@@ -376,15 +398,25 @@ public class BackupStore implements IBackupStore {
 		file = makeParentCanonical(file);
 		if (file.list().length != 0)
 			throw new IllegalArgumentException(NLS.bind(Messages.BackupStore_directory_not_empty, file.getAbsolutePath()));
-		// the easiest is to create a dummy file and back that up (the dummy is simply ignored when restoring).
+		// the easiest way is to create a dummy file and back that up (the dummy is simply ignored when restoring).
 		File dummy = new File(file, dummyName);
-		if (!dummy.createNewFile())
-			throw new IOException(NLS.bind(Messages.BackupStore_can_not_create_dummy, dummy.getAbsolutePath()));
-		boolean result = backup(dummy);
-		// if already backed up - do not delete the directory
-		if (result && !file.delete())
+		dummy = makeParentCanonical(dummy);
+		File buFile = getBackupFile(dummy);
+		boolean backedUp = buFile.exists();
+		// backup only if the folder has not been already backed up;
+		// this can happen if, for example, two IUs unzip to the same folder and then want to delete it
+		if (!backedUp) {
+			if (closed)
+				throw new ClosedBackupStoreException("Can not perform backup()"); //$NON-NLS-1$
+			if (!dummy.createNewFile())
+				throw new IOException(NLS.bind(Messages.BackupStore_can_not_create_dummy, dummy.getAbsolutePath()));
+			moveToBackup(dummy, buFile);
+		}
+		// previous checks have verified that the directory exists
+		if (!file.delete())
 			throw new IOException(NLS.bind(Messages.BackupStore_can_not_remove, dummy.getAbsolutePath()));
-		return result;
+		// will return true if the directory was already backed up at the beginning of the operation and false otherwise
+		return !backedUp;
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/NativeTouchpoint.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/NativeTouchpoint.java
index cd8eef4..75a0241 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/NativeTouchpoint.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/NativeTouchpoint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.touchpoint.natives;
 
-import org.eclipse.equinox.p2.core.ProvisionException;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.Map;
@@ -19,6 +17,7 @@ import java.util.WeakHashMap;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.touchpoint.natives.actions.ActionConstants;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.engine.spi.Touchpoint;
 import org.eclipse.equinox.p2.metadata.IArtifactKey;
@@ -70,6 +69,7 @@ public class NativeTouchpoint extends Touchpoint {
 	public IStatus commit(IProfile profile) {
 		IBackupStore store = getBackupStore(profile);
 		store.discard();
+		clearProfileState(profile);
 		return Status.OK_STATUS;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java
index 60c1c0a..432dad5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ActionConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ActionConstants.java
index a3357eb..0818a1e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ActionConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ActionConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ChmodAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ChmodAction.java
index 5de59d2..321258d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ChmodAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/ChmodAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupcopyAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupcopyAction.java
index b394f0a..1aa0389 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupcopyAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupcopyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupzipAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupzipAction.java
index 7ef7d54..61a2acf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupzipAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CleanupzipAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,10 +102,10 @@ public class CleanupzipAction extends ProvisioningAction {
 				if (f1 == null)
 					return 1;
 				try {
-					return Integer.valueOf(f2.getCanonicalPath().length()).compareTo(f1.getCanonicalPath().length());
+					return new Integer(f2.getCanonicalPath().length()).compareTo(f1.getCanonicalPath().length());
 				} catch (IOException e) {
 					// did our best. try an absolute path compare
-					return Integer.valueOf(f2.getAbsolutePath().length()).compareTo(f1.getAbsolutePath().length());
+					return new Integer(f2.getAbsolutePath().length()).compareTo(f1.getAbsolutePath().length());
 				}
 			}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CollectAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CollectAction.java
index 21c3cf1..7dd742b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CollectAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CollectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CopyAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CopyAction.java
index d9dab3c..51915e7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CopyAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/CopyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/LinkAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/LinkAction.java
index a27777c..4b99ed7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/LinkAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/LinkAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/MkdirAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/MkdirAction.java
index bea5668..b98cfc7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/MkdirAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/MkdirAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/RemoveAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/RemoveAction.java
index c820a9b..141d52b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/RemoveAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/RemoveAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Cloudsmith Inc. and others.
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/UnzipAction.java b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/UnzipAction.java
index 1081616..c2a9150 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/UnzipAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/actions/UnzipAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.classpath b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.project b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.project
new file mode 100644
index 0000000..fb4698e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.p2.transport.ecf</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3a159d8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Dec 24 16:24:53 EST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..0f5d304
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Fri Dec 24 16:24:53 EST 2010
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..620a225
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.equinox.p2.transport.ecf
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ J2SE-1.4
+Require-Bundle: org.eclipse.ecf;bundle-version="3.1.0",
+ org.eclipse.ecf.filetransfer;bundle-version="4.0.0",
+ org.eclipse.ecf.provider.filetransfer;bundle-version="3.1.0",
+ org.eclipse.equinox.p2.core;bundle-version="2.0.100",
+ org.eclipse.equinox.p2.repository;bundle-version="2.1.0",
+ org.eclipse.equinox.common;bundle-version="3.6.0",
+ org.eclipse.osgi;bundle-version="3.7.0",
+ org.eclipse.core.jobs;bundle-version="3.5.100"
+Service-Component: OSGI-INF/ecfTransport.xml
+Bundle-Activator: org.eclipse.equinox.internal.p2.transport.ecf.Activator
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.equinox.internal.p2.transport.ecf
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/OSGI-INF/ecfTransport.xml b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/OSGI-INF/ecfTransport.xml
new file mode 100644
index 0000000..d83b000
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/OSGI-INF/ecfTransport.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.equinox.p2.transport.ecf">
+   <implementation class="org.eclipse.equinox.internal.p2.transport.ecf.ECFTransportComponent"/>
+   <service>
+      <provide interface="org.eclipse.equinox.p2.core.spi.IAgentServiceFactory"/>
+   </service>
+   <property name="p2.agent.servicename" type="String" value="org.eclipse.equinox.internal.p2.repository.Transport"/>
+</scr:component>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/about.html b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/about.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/about.html
rename to eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/build.properties
new file mode 100644
index 0000000..2b7b8ce
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/build.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2011 Sonatype Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sonatype Corporation - initial API and implementation
+#     IBM Corporation - ongoing development
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               OSGI-INF/,\
+               about.html,\
+               plugin.properties
+src.includes = about.html
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/plugin.properties
new file mode 100644
index 0000000..d6b5466
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+#  Copyright (c) 2010 - 2011 Sonatype, Inc. and others.
+#  All rights reserved. This program and the accompanying materials
+#  are made available under the terms of the Eclipse Public License v1.0
+#  which accompanies this distribution, and is available at
+#  http://www.eclipse.org/legal/epl-v10.html
+# 
+#  Contributors:
+#     Sonatype, Inc. - initial API and implementation
+###############################################################################
+pluginName = Equinox Provisioning ECF based Transport
+providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/pom.xml
new file mode 100644
index 0000000..8325c35
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
+    <groupId>org.eclipse</groupId>
+    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+  </parent>
+  <groupId>org.eclipse</groupId>
+  <artifactId>org.eclipse.equinox.p2.transport.ecf</artifactId>
+  <version>1.0.0.qualifier</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/Activator.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/Activator.java
new file mode 100644
index 0000000..0cb1a8a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/Activator.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Cloudsmith Inc and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ * 	Cloudsmith Inc - initial API and implementation
+ * 	IBM Corporation - ongoing development
+ * 	Genuitec - Bug 291926
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import org.eclipse.ecf.filetransfer.service.IRetrieveFileTransferFactory;
+import org.eclipse.ecf.provider.filetransfer.IFileTransferProtocolToFactoryMapper;
+import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
+import org.osgi.framework.*;
+import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ * This activator has helper methods to get file transfer service tracker, and
+ * for making sure required ECF bundles are started.
+ */
+public class Activator implements BundleActivator {
+
+	public static final String ID = "org.eclipse.equinox.p2.transport.ecf"; //$NON-NLS-1$
+	private static final String HTTP = "http"; //$NON-NLS-1$
+	private static final String HTTPS = "https"; //$NON-NLS-1$
+
+	private static BundleContext context;
+	// tracker for ECF service
+	private ServiceTracker<IRetrieveFileTransferFactory, IRetrieveFileTransferFactory> retrievalFactoryTracker;
+
+	// tracker for protocolToFactoryMapperTracker
+	private ServiceTracker<IFileTransferProtocolToFactoryMapper, IFileTransferProtocolToFactoryMapper> protocolToFactoryMapperTracker = null;
+
+	// The shared instance
+	private static Activator plugin;
+
+	public void start(BundleContext aContext) throws Exception {
+		Activator.context = aContext;
+		Activator.plugin = this;
+	}
+
+	public void stop(BundleContext aContext) throws Exception {
+		Activator.context = null;
+		Activator.plugin = null;
+		if (retrievalFactoryTracker != null) {
+			retrievalFactoryTracker.close();
+			retrievalFactoryTracker = null;
+		}
+		if (protocolToFactoryMapperTracker != null) {
+			protocolToFactoryMapperTracker.close();
+			protocolToFactoryMapperTracker = null;
+		}
+
+	}
+
+	public static BundleContext getContext() {
+		return Activator.context;
+	}
+
+	/**
+	 * Get singleton instance.
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns a {@link IRetrieveFileTransferFactory} using a {@link ServiceTracker} after having attempted
+	 * to start the bundle "org.eclipse.ecf.provider.filetransfer". If something is wrong with the configuration
+	 * this method returns null.
+	 * @return a factory, or null, if configuration is incorrect
+	 */
+	public IRetrieveFileTransferFactory getRetrieveFileTransferFactory() {
+		return getFileTransferServiceTracker().getService();
+	}
+
+	public synchronized void useJREHttpClient() {
+		IFileTransferProtocolToFactoryMapper mapper = getProtocolToFactoryMapper();
+		if (mapper != null) {
+			// remove http
+			// Remove browse provider
+			String providerId = mapper.getBrowseFileTransferFactoryId(HTTP);
+			if (providerId != null) {
+				mapper.removeBrowseFileTransferFactory(providerId);
+			}
+			// Remove retrieve provider
+			providerId = mapper.getRetrieveFileTransferFactoryId(HTTP);
+			if (providerId != null) {
+				mapper.removeRetrieveFileTransferFactory(providerId);
+			}
+			// Remove send provider
+			providerId = mapper.getSendFileTransferFactoryId(HTTP);
+			if (providerId != null) {
+				mapper.removeSendFileTransferFactory(providerId);
+			}
+			// remove https
+			// Remove browse provider
+			providerId = mapper.getBrowseFileTransferFactoryId(HTTPS);
+			if (providerId != null) {
+				mapper.removeBrowseFileTransferFactory(providerId);
+			}
+			// Remove retrieve provider
+			providerId = mapper.getRetrieveFileTransferFactoryId(HTTPS);
+			if (providerId != null) {
+				mapper.removeRetrieveFileTransferFactory(providerId);
+			}
+			// Remove send provider
+			providerId = mapper.getSendFileTransferFactoryId(HTTPS);
+			if (providerId != null) {
+				mapper.removeSendFileTransferFactory(providerId);
+			}
+		}
+	}
+
+	/**
+	 * Gets the singleton ServiceTracker for the IRetrieveFileTransferFactory and starts the bundles
+	 * "org.eclipse.ecf" and
+	 * "org.eclipse.ecf.provider.filetransfer" on first call.
+	 * @return  ServiceTracker
+	 */
+	private synchronized ServiceTracker<IRetrieveFileTransferFactory, IRetrieveFileTransferFactory> getFileTransferServiceTracker() {
+		if (retrievalFactoryTracker == null) {
+			retrievalFactoryTracker = new ServiceTracker<IRetrieveFileTransferFactory, IRetrieveFileTransferFactory>(Activator.getContext(), IRetrieveFileTransferFactory.class, null);
+			retrievalFactoryTracker.open();
+			startBundle("org.eclipse.ecf"); //$NON-NLS-1$
+			startBundle("org.eclipse.ecf.provider.filetransfer"); //$NON-NLS-1$
+		}
+		return retrievalFactoryTracker;
+	}
+
+	private IFileTransferProtocolToFactoryMapper getProtocolToFactoryMapper() {
+		if (protocolToFactoryMapperTracker == null) {
+			protocolToFactoryMapperTracker = new ServiceTracker<IFileTransferProtocolToFactoryMapper, IFileTransferProtocolToFactoryMapper>(context, IFileTransferProtocolToFactoryMapper.class, null);
+			protocolToFactoryMapperTracker.open();
+		}
+		return protocolToFactoryMapperTracker.getService();
+	}
+
+	private boolean startBundle(String bundleId) {
+		PackageAdmin packageAdmin = (PackageAdmin) ServiceHelper.getService(Activator.getContext(), PackageAdmin.class.getName());
+		if (packageAdmin == null)
+			return false;
+
+		Bundle[] bundles = packageAdmin.getBundles(bundleId, null);
+		if (bundles != null && bundles.length > 0) {
+			for (int i = 0; i < bundles.length; i++) {
+				try {
+					if ((bundles[i].getState() & Bundle.INSTALLED) == 0) {
+						bundles[i].start(Bundle.START_ACTIVATION_POLICY);
+						bundles[i].start(Bundle.START_TRANSIENT);
+						return true;
+					}
+				} catch (BundleException e) {
+					// failed, try next bundle
+				}
+			}
+		}
+		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/ECFTransportComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/ECFTransportComponent.java
new file mode 100644
index 0000000..fac6c24
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/ECFTransportComponent.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory;
+
+public class ECFTransportComponent implements IAgentServiceFactory {
+
+	public Object createService(IProvisioningAgent agent) {
+		return new RepositoryTransport();
+	}
+	
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileInfoReader.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileInfoReader.java
new file mode 100644
index 0000000..52bfacb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileInfoReader.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010, IBM Corporation, and others.
+ * The code, documentation and other materials contained herein have been
+ * licensed under the Eclipse Public License - v 1.0 by the copyright holder
+ * listed above, as the Initial Contributor under such license. The text of
+ * such license is available at www.eclipse.org.
+ * Contributors:
+ * 	IBM Corporation - initial implementation
+ * 	Cloudsmith Inc - modified API, and implementation
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URI;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.ecf.core.*;
+import org.eclipse.ecf.core.security.IConnectContext;
+import org.eclipse.ecf.filetransfer.*;
+import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemBrowseEvent;
+import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemEvent;
+import org.eclipse.ecf.filetransfer.identity.*;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.repository.Activator;
+import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
+import org.eclipse.equinox.internal.p2.repository.JREHttpClientRequiredException;
+import org.eclipse.equinox.internal.p2.repository.Messages;
+import org.eclipse.equinox.internal.p2.repository.RepositoryPreferences;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * The FileInfoReader is a {@link Job} similar to {@link FileReader}, but without the support
+ * from ECF (there is currently no way to wait on a BrowseRequest job, as this is internal to
+ * ECF). If such support is added, this class is easily modified.
+ * 
+ */
+public class FileInfoReader extends Job implements IRemoteFileSystemListener {
+	private Exception exception;
+	private IProgressMonitor theMonitor;
+	private final int connectionRetryCount;
+	private final long connectionRetryDelay;
+	private final IConnectContext connectContext;
+	final Boolean[] barrier = new Boolean[1];
+	private IRemoteFile[] remoteFiles;
+	private IRemoteFileSystemRequest browseRequest;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected IStatus run(IProgressMonitor monitor) {
+		synchronized (barrier) {
+			while (barrier[0] == null) {
+				try {
+					barrier.wait(1000);
+					if (theMonitor.isCanceled() && browseRequest != null)
+						browseRequest.cancel();
+				} catch (InterruptedException e) {
+					//ignore
+				}
+			}
+		}
+		return Status.OK_STATUS;
+	}
+
+	/**
+	 * Waits until request is processed (barrier[0] is non null).
+	 * This is a bit of a hack, as it would be better if the ECFBrowser worked in similar fashion to
+	 * file transfer were a custom job can be supplied.
+	 * TODO: log an issue for ECF.
+	 */
+	private void waitOnSelf() {
+		schedule();
+		while (barrier[0] == null) {
+			boolean logged = false;
+			try {
+				join();
+			} catch (InterruptedException e) {
+				if (!logged)
+					LogHelper.log(new Status(IStatus.WARNING, Activator.ID, "Unexpected interrupt while waiting on ECF browse request", e)); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * Create a new FileInfoReader that will retry failed connection attempts and sleep some amount of time between each
+	 * attempt.
+	 */
+	public FileInfoReader(IConnectContext aConnectContext) {
+		super(Messages.repo_loading); // job label - TODO: this is a bad label
+		barrier[0] = null;
+		// Hide this job.
+		setSystem(true);
+		setUser(false);
+		connectionRetryCount = RepositoryPreferences.getConnectionRetryCount();
+		connectionRetryDelay = RepositoryPreferences.getConnectionMsRetryDelay();
+		connectContext = aConnectContext;
+	}
+
+	/**
+	 * Get the requested information.
+	 * @return IRemoteFile[] or null if there was an error.
+	 * @throws CoreException 
+	 * @throws FileNotFoundException 
+	 * @throws AuthenticationFailedException 
+	 * @throws JREHttpClientRequiredException 
+	 */
+	public IRemoteFile[] getRemoteFiles(URI location, IProgressMonitor monitor) throws AuthenticationFailedException, FileNotFoundException, CoreException, JREHttpClientRequiredException {
+		if (monitor != null)
+			monitor.beginTask(location.toString(), 1);
+		try {
+			sendBrowseRequest(location, monitor);
+			waitOnSelf();
+			// throw any exception received in a callback
+			checkException(location, connectionRetryCount);
+
+			return remoteFiles;
+		} finally {
+			if (monitor != null) {
+				monitor.done();
+			}
+		}
+
+	}
+
+	public IRemoteFile getRemoteFile(URI location, IProgressMonitor monitor) throws AuthenticationFailedException, FileNotFoundException, CoreException, JREHttpClientRequiredException {
+
+		getRemoteFiles(location, monitor);
+		return remoteFiles != null && remoteFiles.length > 0 ? remoteFiles[0] : null;
+	}
+
+	public long getLastModified(URI location, IProgressMonitor monitor) throws AuthenticationFailedException, FileNotFoundException, CoreException, JREHttpClientRequiredException {
+		IRemoteFile file = getRemoteFile(location, monitor);
+		if (file == null)
+			throw new FileNotFoundException(location.toString());
+		return file.getInfo().getLastModified();
+	}
+
+	public void handleRemoteFileEvent(IRemoteFileSystemEvent event) {
+		exception = event.getException();
+		if (exception != null) {
+			synchronized (barrier) {
+				barrier[0] = Boolean.TRUE;
+				barrier.notify();
+			}
+		} else if (event instanceof IRemoteFileSystemBrowseEvent) {
+			IRemoteFileSystemBrowseEvent fsbe = (IRemoteFileSystemBrowseEvent) event;
+			remoteFiles = fsbe.getRemoteFiles();
+			if (theMonitor != null)
+				theMonitor.worked(1);
+			synchronized (barrier) {
+				barrier[0] = Boolean.TRUE;
+				barrier.notify();
+			}
+		} else {
+			synchronized (barrier) {
+				barrier[0] = Boolean.FALSE; // ended by unknown reason
+				barrier.notify();
+			}
+		}
+	}
+
+	protected void sendBrowseRequest(URI uri, IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
+		IContainer container;
+		try {
+			container = ContainerFactory.getDefault().createContainer();
+		} catch (ContainerCreateException e) {
+			throw RepositoryStatusHelper.fromMessage(Messages.ecf_configuration_error);
+		}
+
+		IRemoteFileSystemBrowserContainerAdapter adapter = (IRemoteFileSystemBrowserContainerAdapter) container.getAdapter(IRemoteFileSystemBrowserContainerAdapter.class);
+		if (adapter == null) {
+			throw RepositoryStatusHelper.fromMessage(Messages.ecf_configuration_error);
+		}
+
+		adapter.setConnectContextForAuthentication(connectContext);
+
+		this.exception = null;
+		this.theMonitor = monitor;
+		for (int retryCount = 0;; retryCount++) {
+			if (monitor != null && monitor.isCanceled())
+				throw new OperationCanceledException();
+
+			try {
+				IFileID fileID = FileIDFactory.getDefault().createFileID(adapter.getBrowseNamespace(), uri.toString());
+				browseRequest = adapter.sendBrowseRequest(fileID, this);
+			} catch (RemoteFileSystemException e) {
+				exception = e;
+			} catch (FileCreateException e) {
+				exception = e;
+			}
+			if (checkException(uri, retryCount))
+				break;
+		}
+	}
+
+	protected Exception getException() {
+		return exception;
+	}
+
+	/**
+	 * Utility method to check exception condition and determine if retry should be done.
+	 * If there was an exception it is translated into one of the specified exceptions and thrown.
+	 * 
+	 * @param uri the URI being read - used for logging purposes
+	 * @param attemptCounter - the current attempt number (start with 0)
+	 * @return true if the exception is an IOException and attemptCounter < connectionRetryCount, false otherwise
+	 * @throws CoreException
+	 * @throws FileNotFoundException
+	 * @throws AuthenticationFailedException
+	 * @throws JREHttpClientRequiredException 
+	 */
+	private boolean checkException(URI uri, int attemptCounter) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
+		// note that 'exception' could have been captured in a callback
+		if (exception != null) {
+			// check if HTTP client needs to be changed
+			RepositoryStatusHelper.checkJREHttpClientRequired(exception);
+
+			// if this is a authentication failure - it is not meaningful to continue
+			RepositoryStatusHelper.checkPermissionDenied(exception);
+
+			// if this is a file not found - it is not meaningful to continue
+			RepositoryStatusHelper.checkFileNotFound(exception, uri);
+
+			Throwable t = RepositoryStatusHelper.unwind(exception);
+			if (t instanceof CoreException)
+				throw RepositoryStatusHelper.unwindCoreException((CoreException) t);
+
+			if (t instanceof IOException && attemptCounter < connectionRetryCount) {
+				// TODO: Retry only certain exceptions or filter out
+				// some exceptions not worth retrying
+				//
+				exception = null;
+				try {
+					LogHelper.log(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.connection_to_0_failed_on_1_retry_attempt_2, new String[] {uri.toString(), t.getMessage(), String.valueOf(attemptCounter)}), t));
+
+					Thread.sleep(connectionRetryDelay);
+					return false;
+				} catch (InterruptedException e) {
+					/* ignore */
+				}
+			}
+			throw RepositoryStatusHelper.wrap(exception);
+		}
+		return true;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileReader.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileReader.java
new file mode 100644
index 0000000..d1760c6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/FileReader.java
@@ -0,0 +1,509 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 Cloudsmith Inc.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ * 	Cloudsmith Inc - initial API and implementation
+ * 	IBM Corporation - ongoing development
+ *  Sonatype Inc - ongoing development
+ ******************************************************************************/
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import java.io.*;
+import java.net.SocketTimeoutException;
+import java.net.URI;
+import java.util.Date;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.ecf.core.security.IConnectContext;
+import org.eclipse.ecf.filetransfer.*;
+import org.eclipse.ecf.filetransfer.events.*;
+import org.eclipse.ecf.filetransfer.identity.*;
+import org.eclipse.ecf.filetransfer.service.IRetrieveFileTransferFactory;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
+import org.eclipse.equinox.internal.p2.repository.FileInfo;
+import org.eclipse.equinox.internal.p2.repository.JREHttpClientRequiredException;
+import org.eclipse.equinox.internal.p2.repository.Messages;
+import org.eclipse.equinox.internal.p2.repository.ProgressStatistics;
+import org.eclipse.equinox.internal.p2.repository.RepositoryPreferences;
+import org.eclipse.equinox.internal.p2.repository.RepositoryTracing;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * FileReader is an ECF FileTransferJob implementation.
+ */
+public final class FileReader extends FileTransferJob implements IFileTransferListener {
+	/**
+	 * Class used to suppress warnings about a job being blocked by another job.
+	 * Since we are running a job that will always be blocked by another job that
+	 * is actually performing the transfer, these messages are unnecessary and ugly.
+	 */
+	static class SuppressBlockedMonitor extends SubProgressMonitor {
+		public SuppressBlockedMonitor(IProgressMonitor monitor, int ticks) {
+			super(monitor, ticks);
+		}
+
+		public void setBlocked(IStatus reason) {
+			//do nothing
+		}
+
+		public void clearBlocked() {
+			//do nothing
+		}
+	}
+
+	private static IFileReaderProbe testProbe;
+	private boolean closeStreamWhenFinished = false;
+	private Exception exception;
+	private FileInfo fileInfo;
+	private long lastProgressCount;
+	private long lastStatsCount;
+	protected IProgressMonitor theMonitor;
+	private OutputStream theOutputStream;
+	private ProgressStatistics statistics;
+	private final int connectionRetryCount;
+	private final long connectionRetryDelay;
+	private final IConnectContext connectContext;
+	private URI requestUri;
+	protected IFileTransferConnectStartEvent connectEvent;
+	private Job cancelJob;
+	private boolean monitorStarted;
+
+	/**
+	 * Create a new FileReader that will retry failed connection attempts and sleep some amount of time between each
+	 * attempt.
+	 */
+	public FileReader(IConnectContext aConnectContext) {
+		super(Messages.FileTransport_reader); // job label
+
+		// Hide this job.
+		setSystem(true);
+		setUser(false);
+		connectionRetryCount = RepositoryPreferences.getConnectionRetryCount();
+		connectionRetryDelay = RepositoryPreferences.getConnectionMsRetryDelay();
+		connectContext = aConnectContext;
+	}
+
+	public FileInfo getLastFileInfo() {
+		return fileInfo;
+	}
+
+	/**
+	 * A job to handle cancelation when trying to establish a socket connection.
+	 * At this point we don't have a transfer job running yet, so we need a separate
+	 * job to monitor for cancelation.
+	 */
+	protected class CancelHandler extends Job {
+		private boolean done = false;
+
+		protected CancelHandler() {
+			super(Messages.FileTransport_cancelCheck);
+			setSystem(true);
+		}
+
+		public IStatus run(IProgressMonitor jobMonitor) {
+			while (!done && !jobMonitor.isCanceled()) {
+				try {
+					Thread.sleep(1000);
+				} catch (InterruptedException e) {
+					return Status.CANCEL_STATUS;
+				}
+				if (theMonitor != null && theMonitor.isCanceled())
+					if (connectEvent != null)
+						connectEvent.cancel();
+			}
+			return Status.OK_STATUS;
+		}
+
+		protected void canceling() {
+			//wake up from sleep in run method
+			Thread t = getThread();
+			if (t != null)
+				t.interrupt();
+		}
+
+	}
+
+	public synchronized void handleTransferEvent(IFileTransferEvent event) {
+		if (event instanceof IFileTransferConnectStartEvent) {
+			// keep the connect event to be able to cancel the transfer
+			connectEvent = (IFileTransferConnectStartEvent) event;
+			cancelJob = new CancelHandler();
+			//schedule with a delay to avoid the overhead of an extra job on a fast connection
+			cancelJob.schedule(500);
+		} else if (event instanceof IIncomingFileTransferReceiveStartEvent) {
+			//we no longer need the cancel handler because we are about to fork the transfer job
+			if (cancelJob != null)
+				cancelJob.cancel();
+			IIncomingFileTransfer source = ((IIncomingFileTransferEvent) event).getSource();
+			try {
+				FileInfo fi = new FileInfo();
+				Date lastModified = source.getRemoteLastModified();
+				if (lastModified != null)
+					fi.setLastModified(lastModified.getTime());
+				fi.setName(source.getRemoteFileName());
+				fi.setSize(source.getFileLength());
+				fileInfo = fi;
+
+				((IIncomingFileTransferReceiveStartEvent) event).receive(theOutputStream, this);
+			} catch (IOException e) {
+				exception = e;
+				return;
+			}
+			long fileLength = source.getFileLength();
+			ProgressStatistics stats = new ProgressStatistics(requestUri, source.getRemoteFileName(), fileLength);
+			setStatistics(stats);
+
+			if (theMonitor != null) {
+				theMonitor.beginTask(null, 1000);
+				monitorStarted = true;
+				theMonitor.subTask(stats.report());
+				lastStatsCount = 0;
+				lastProgressCount = 0;
+			}
+			onStart(source);
+		} else if (event instanceof IIncomingFileTransferReceiveDataEvent) {
+			IIncomingFileTransfer source = ((IIncomingFileTransferEvent) event).getSource();
+			if (theMonitor != null) {
+				if (theMonitor.isCanceled()) {
+					source.cancel();
+					return;
+				}
+
+				long br = source.getBytesReceived();
+				long count = br - lastStatsCount;
+				lastStatsCount = br;
+				ProgressStatistics stats = getStatistics();
+				if (stats != null) {
+					stats.increase(count);
+					fileInfo.setAverageSpeed(stats.getAverageSpeed());
+					if (stats.shouldReport()) {
+						count = br - lastProgressCount;
+						lastProgressCount = br;
+						theMonitor.subTask(stats.report());
+						theMonitor.worked((int) (1000 * count / stats.getTotal()));
+					}
+				}
+			}
+			onData(source);
+		} else if (event instanceof IIncomingFileTransferReceiveDoneEvent) {
+			if (closeStreamWhenFinished)
+				hardClose(theOutputStream);
+
+			if (exception == null)
+				exception = ((IIncomingFileTransferReceiveDoneEvent) event).getException();
+			onDone(((IIncomingFileTransferReceiveDoneEvent) event).getSource());
+		}
+	}
+
+	public InputStream read(URI url, final IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
+		final PipedInputStream input = new PipedInputStream();
+		PipedOutputStream output;
+		try {
+			output = new PipedOutputStream(input);
+		} catch (IOException e) {
+			throw RepositoryStatusHelper.wrap(e);
+		}
+		RepositoryTracing.debug("Downloading {0}", url); //$NON-NLS-1$
+
+		sendRetrieveRequest(url, output, null, true, monitor);
+
+		return new InputStream() {
+			public int available() throws IOException {
+				checkException();
+				return input.available();
+			}
+
+			public void close() throws IOException {
+				hardClose(input);
+				checkException();
+			}
+
+			public void mark(int readlimit) {
+				input.mark(readlimit);
+			}
+
+			public boolean markSupported() {
+				return input.markSupported();
+			}
+
+			public int read() throws IOException {
+				checkException();
+				return input.read();
+			}
+
+			public int read(byte b[]) throws IOException {
+				checkException();
+				return input.read(b);
+			}
+
+			public int read(byte b[], int off, int len) throws IOException {
+				checkException();
+				return input.read(b, off, len);
+			}
+
+			public void reset() throws IOException {
+				checkException();
+				input.reset();
+			}
+
+			public long skip(long n) throws IOException {
+				checkException();
+				return input.skip(n);
+			}
+
+			private void checkException() throws IOException {
+				if (getException() == null)
+					return;
+
+				IOException e;
+				Throwable t = RepositoryStatusHelper.unwind(getException());
+				if (t instanceof IOException)
+					e = (IOException) t;
+				else {
+					if (t instanceof UserCancelledException) {
+						Throwable cause = t;
+						t = new OperationCanceledException(t.getMessage());
+						t.initCause(cause);
+					}
+					e = new IOException(t.getMessage());
+					e.initCause(t);
+				}
+				throw e;
+			}
+		};
+	}
+
+	public void readInto(URI uri, OutputStream anOutputStream, IProgressMonitor monitor) //
+			throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
+		readInto(uri, anOutputStream, -1, monitor);
+	}
+
+	public boolean belongsTo(Object family) {
+		return family == this;
+	}
+
+	public void readInto(URI uri, OutputStream anOutputStream, long startPos, IProgressMonitor monitor) //
+			throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
+		if (monitor == null)
+			monitor = new NullProgressMonitor();
+		try {
+			sendRetrieveRequest(uri, anOutputStream, (startPos != -1 ? new DownloadRange(startPos) : null), false, monitor);
+			Job.getJobManager().join(this, new SuppressBlockedMonitor(monitor, 0));
+			if (monitor.isCanceled() && connectEvent != null)
+				connectEvent.cancel();
+			// check and throw exception if received in callback
+			checkException(uri, connectionRetryCount);
+		} catch (InterruptedException e) {
+			monitor.setCanceled(true);
+			throw new OperationCanceledException();
+		} finally {
+			// kill the cancelJob, if there is one
+			if (cancelJob != null) {
+				cancelJob.cancel();
+				cancelJob = null;
+			}
+			// If monitor was never started, make sure it is balanced
+			if (!monitorStarted)
+				monitor.beginTask(null, 1);
+			monitorStarted = false;
+			monitor.done();
+		}
+	}
+
+	protected void sendRetrieveRequest(URI uri, OutputStream outputStream, DownloadRange range, boolean closeStreamOnFinish, //
+			IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
+
+		IRetrieveFileTransferFactory factory = Activator.getDefault().getRetrieveFileTransferFactory();
+		if (factory == null) {
+			throw RepositoryStatusHelper.fromMessage(Messages.ecf_configuration_error);
+		}
+		IRetrieveFileTransferContainerAdapter adapter = factory.newInstance();
+
+		adapter.setConnectContextForAuthentication(connectContext);
+
+		this.exception = null;
+		this.closeStreamWhenFinished = closeStreamOnFinish;
+		this.fileInfo = null;
+		this.statistics = null;
+		this.lastProgressCount = 0L;
+		this.lastStatsCount = 0L;
+		this.theMonitor = monitor;
+		this.monitorStarted = false;
+		this.theOutputStream = outputStream;
+		this.requestUri = uri;
+
+		for (int retryCount = 0;; retryCount++) {
+			if (monitor != null && monitor.isCanceled())
+				throw new OperationCanceledException();
+
+			try {
+				IFileID fileID = FileIDFactory.getDefault().createFileID(adapter.getRetrieveNamespace(), uri.toString());
+				if (range != null)
+					adapter.sendRetrieveRequest(fileID, range, this, null);
+				else
+					adapter.sendRetrieveRequest(fileID, this, null);
+			} catch (IncomingFileTransferException e) {
+				exception = e;
+			} catch (FileCreateException e) {
+				exception = e;
+			} catch (Throwable t) {
+				if (exception != null)
+					exception.printStackTrace();
+			}
+			if (checkException(uri, retryCount))
+				break;
+		}
+	}
+
+	/**
+	 * Utility method to check exception condition and determine if retry should be done.
+	 * If there was an exception it is translated into one of the specified exceptions and thrown.
+	 * 
+	 * @param uri the URI being read - used for logging purposes
+	 * @param attemptCounter - the current attempt number (start with 0)
+	 * @return true if the exception is an IOException and attemptCounter < connectionRetryCount, false otherwise
+	 * @throws CoreException
+	 * @throws FileNotFoundException
+	 * @throws AuthenticationFailedException
+	 */
+	private boolean checkException(URI uri, int attemptCounter) throws CoreException, FileNotFoundException, AuthenticationFailedException, JREHttpClientRequiredException {
+		// note that 'exception' could have been captured in a callback
+		if (exception != null) {
+			// check if HTTP client needs to be changed
+			RepositoryStatusHelper.checkJREHttpClientRequired(exception);
+
+			// if this is an 'authentication failure' - it is not meaningful to continue
+			RepositoryStatusHelper.checkPermissionDenied(exception);
+
+			// if this is a 'file not found' - it is not meaningful to continue
+			RepositoryStatusHelper.checkFileNotFound(exception, uri);
+
+			Throwable t = RepositoryStatusHelper.unwind(exception);
+			if (t instanceof CoreException)
+				throw RepositoryStatusHelper.unwindCoreException((CoreException) t);
+
+			// not meaningful to try 'timeout again' - if a server is that busy, we
+			// need to wait for quite some time before retrying- it is not likely it is
+			// just a temporary network thing.
+			if (t instanceof SocketTimeoutException)
+				throw RepositoryStatusHelper.wrap(t);
+
+			if (t instanceof IOException && attemptCounter < connectionRetryCount) {
+				// TODO: Retry only certain exceptions or filter out
+				// some exceptions not worth retrying
+				//
+				exception = null;
+				try {
+					LogHelper.log(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.connection_to_0_failed_on_1_retry_attempt_2, new String[] {uri.toString(), t.getMessage(), String.valueOf(attemptCounter)}), t));
+
+					Thread.sleep(connectionRetryDelay);
+					return false;
+				} catch (InterruptedException e) {
+					/* ignore */
+				}
+			}
+			throw RepositoryStatusHelper.wrap(exception);
+		}
+		return true;
+	}
+
+	protected Exception getException() {
+		return exception;
+	}
+
+	/**
+	 * Closes input and output streams
+	 * @param aStream
+	 */
+	public static void hardClose(Object aStream) {
+		if (aStream != null) {
+			try {
+				if (aStream instanceof OutputStream)
+					((OutputStream) aStream).close();
+				else if (aStream instanceof InputStream)
+					((InputStream) aStream).close();
+			} catch (IOException e) { /* ignore */
+			}
+		}
+	}
+
+	private static class DownloadRange implements IFileRangeSpecification {
+
+		private long startPosition;
+
+		public DownloadRange(long startPos) {
+			startPosition = startPos;
+		}
+
+		public long getEndPosition() {
+			return -1;
+		}
+
+		public long getStartPosition() {
+			return startPosition;
+		}
+
+	}
+
+	private void onDone(IIncomingFileTransfer source) {
+		if (testProbe != null)
+			testProbe.onDone(this, source, theMonitor);
+	}
+
+	private void onStart(IIncomingFileTransfer source) {
+		if (testProbe != null)
+			testProbe.onStart(this, source, theMonitor);
+	}
+
+	private void onData(IIncomingFileTransfer source) {
+		if (testProbe != null)
+			testProbe.onData(this, source, theMonitor);
+	}
+
+	/**
+	 * Sets a testing probe that can intercept events on the file reader for testing purposes.
+	 * This method should only ever be called from automated test suites.
+	 */
+	public static void setTestProbe(IFileReaderProbe probe) {
+		testProbe = probe;
+	}
+
+	/**
+	 * Sets the progress statistics. This method is synchronized because the field
+	 * is accessed from both the transfer thread and the thread initiating the transfer
+	 * and we need to ensure field values are consistent across threads.
+	 * 
+	 * @param statistics the statistics to set, or <code>null</code>
+	 */
+	private synchronized void setStatistics(ProgressStatistics statistics) {
+		this.statistics = statistics;
+	}
+
+	/**
+	 * Returns the progress statistics. This method is synchronized because the field
+	 * is accessed from both the transfer thread and the thread initiating the transfer
+	 * and we need to ensure field values are consistent across threads.
+	 * 
+	 * @return the statistics, or <code>null</code>
+	 */
+	private synchronized ProgressStatistics getStatistics() {
+		return statistics;
+	}
+
+	/**
+	 * An interface to allow automated tests to hook into file reader events
+	 * @see #setTestProbe
+	 */
+	public interface IFileReaderProbe {
+		public void onStart(FileReader reader, IIncomingFileTransfer source, IProgressMonitor monitor);
+
+		public void onData(FileReader reader, IIncomingFileTransfer source, IProgressMonitor monitor);
+
+		public void onDone(FileReader reader, IIncomingFileTransfer source, IProgressMonitor monitor);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/Messages.java
new file mode 100644
index 0000000..8d51aaa
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/Messages.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Cloudsmith Inc - additional messages
+ *     Sonatype Inc - ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.p2.repository.messages"; //$NON-NLS-1$
+
+	public static String CacheManager_AuthenticationFaileFor_0;
+	public static String CacheManager_FailedCommunicationWithRepo_0;
+	public static String CacheManager_Neither_0_nor_1_found;
+	public static String CacheManage_ErrorRenamingCache;
+
+	public static String artifact_not_found;
+	public static String io_failedRead;
+	public static String ecf_configuration_error;
+	public static String repoMan_internalError;
+	public static String repo_loading;
+
+	public static String exception_malformedRepoURI;
+	public static String TransportErrorTranslator_400;
+	public static String TransportErrorTranslator_401;
+	public static String TransportErrorTranslator_402;
+	public static String TransportErrorTranslator_403;
+	public static String TransportErrorTranslator_404;
+	public static String TransportErrorTranslator_405;
+	public static String TransportErrorTranslator_406;
+	public static String TransportErrorTranslator_407;
+	public static String TransportErrorTranslator_408;
+	public static String TransportErrorTranslator_409;
+	public static String TransportErrorTranslator_410;
+	public static String TransportErrorTranslator_411;
+	public static String TransportErrorTranslator_412;
+	public static String TransportErrorTranslator_413;
+	public static String TransportErrorTranslator_414;
+	public static String TransportErrorTranslator_415;
+	public static String TransportErrorTranslator_416;
+	public static String TransportErrorTranslator_417;
+	public static String TransportErrorTranslator_418;
+	public static String TransportErrorTranslator_422;
+	public static String TransportErrorTranslator_423;
+	public static String TransportErrorTranslator_424;
+	public static String TransportErrorTranslator_425;
+	public static String TransportErrorTranslator_426;
+	public static String TransportErrorTranslator_449;
+	public static String TransportErrorTranslator_450;
+	public static String TransportErrorTranslator_500;
+	public static String TransportErrorTranslator_501;
+	public static String TransportErrorTranslator_502;
+	public static String TransportErrorTranslator_503;
+	public static String TransportErrorTranslator_504;
+	public static String TransportErrorTranslator_505;
+	public static String TransportErrorTranslator_506;
+	public static String TransportErrorTranslator_507;
+	public static String TransportErrorTranslator_508;
+	public static String TransportErrorTranslator_510;
+	public static String TransportErrorTranslator_MalformedRemoteFileReference;
+	public static String TransportErrorTranslator_UnableToConnectToRepository_0;
+
+	public static String TransportErrorTranslator_UnknownErrorCode;
+	public static String TransportErrorTranslator_UnknownHost;
+
+	public static String fetching_0_from_1_2_at_3;
+	public static String fetching_0_from_1_2_of_3_at_4;
+	public static String connection_to_0_failed_on_1_retry_attempt_2;
+
+	public static String FileTransport_reader;
+	public static String FileTransport_cancelCheck;
+
+	public static String UnableToRead_0_TooManyAttempts;
+	public static String UnableToRead_0_UserCanceled;
+
+	public static String RepositoryTransport_failedReadRepo;
+
+	static {
+		// initialize resource bundles
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+		// Do not instantiate
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java
new file mode 100644
index 0000000..cc68acb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatus.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Cloudsmith Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import org.eclipse.equinox.internal.p2.repository.DownloadStatus;
+import org.eclipse.equinox.p2.core.ProvisionException;
+
+import java.io.FileNotFoundException;
+import java.net.*;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.ecf.core.identity.IDCreateException;
+import org.eclipse.ecf.filetransfer.BrowseFileTransferException;
+import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Utility class to transform transport errors into error messages.
+ *
+ */
+public class RepositoryStatus {
+
+	public static String codeToMessage(int code, String toDownload) {
+		switch (code) {
+			case 400 :
+				return NLS.bind(Messages.TransportErrorTranslator_400, toDownload);
+			case 401 :
+				return NLS.bind(Messages.TransportErrorTranslator_401, toDownload);
+			case 402 :
+				return NLS.bind(Messages.TransportErrorTranslator_402, toDownload);
+			case 403 :
+				return NLS.bind(Messages.TransportErrorTranslator_403, toDownload);
+			case 404 :
+				return NLS.bind(Messages.TransportErrorTranslator_404, toDownload);
+			case 405 :
+				return NLS.bind(Messages.TransportErrorTranslator_405, toDownload);
+			case 406 :
+				return NLS.bind(Messages.TransportErrorTranslator_406, toDownload);
+			case 407 :
+				return NLS.bind(Messages.TransportErrorTranslator_407, toDownload);
+			case 408 :
+				return NLS.bind(Messages.TransportErrorTranslator_408, toDownload);
+			case 409 :
+				return NLS.bind(Messages.TransportErrorTranslator_409, toDownload);
+			case 410 :
+				return NLS.bind(Messages.TransportErrorTranslator_410, toDownload);
+			case 411 :
+				return NLS.bind(Messages.TransportErrorTranslator_411, toDownload);
+			case 412 :
+				return NLS.bind(Messages.TransportErrorTranslator_412, toDownload);
+			case 413 :
+				return NLS.bind(Messages.TransportErrorTranslator_413, toDownload);
+			case 414 :
+				return NLS.bind(Messages.TransportErrorTranslator_414, toDownload);
+			case 415 :
+				return NLS.bind(Messages.TransportErrorTranslator_415, toDownload);
+			case 416 :
+				return NLS.bind(Messages.TransportErrorTranslator_416, toDownload);
+			case 417 :
+				return NLS.bind(Messages.TransportErrorTranslator_417, toDownload);
+			case 418 :
+				return NLS.bind(Messages.TransportErrorTranslator_418, toDownload);
+			case 422 :
+				return NLS.bind(Messages.TransportErrorTranslator_422, toDownload);
+			case 423 :
+				return NLS.bind(Messages.TransportErrorTranslator_423, toDownload);
+			case 424 :
+				return NLS.bind(Messages.TransportErrorTranslator_424, toDownload);
+			case 425 :
+				return NLS.bind(Messages.TransportErrorTranslator_425, toDownload);
+			case 426 :
+				return NLS.bind(Messages.TransportErrorTranslator_426, toDownload);
+			case 449 :
+				return NLS.bind(Messages.TransportErrorTranslator_449, toDownload);
+			case 450 :
+				return NLS.bind(Messages.TransportErrorTranslator_450, toDownload);
+
+			case 500 :
+				return NLS.bind(Messages.TransportErrorTranslator_500, toDownload);
+			case 501 :
+				return NLS.bind(Messages.TransportErrorTranslator_501, toDownload);
+			case 502 :
+				return NLS.bind(Messages.TransportErrorTranslator_502, toDownload);
+			case 503 :
+				return NLS.bind(Messages.TransportErrorTranslator_503, toDownload);
+			case 504 :
+				return NLS.bind(Messages.TransportErrorTranslator_504, toDownload);
+			case 505 :
+				return NLS.bind(Messages.TransportErrorTranslator_505, toDownload);
+			case 506 :
+				return NLS.bind(Messages.TransportErrorTranslator_506, toDownload);
+			case 507 :
+				return NLS.bind(Messages.TransportErrorTranslator_507, toDownload);
+			case 508 :
+				return NLS.bind(Messages.TransportErrorTranslator_508, toDownload);
+			case 510 :
+				return NLS.bind(Messages.TransportErrorTranslator_510, toDownload);
+
+			default :
+				return NLS.bind(Messages.TransportErrorTranslator_UnknownErrorCode, Integer.toString(code), toDownload);
+		}
+	}
+
+	public static DownloadStatus forStatus(IStatus original, URI toDownload) {
+		Throwable t = original.getException();
+		return forException(t, toDownload);
+	}
+
+	public static DownloadStatus forException(Throwable t, URI toDownload) {
+		if (t instanceof FileNotFoundException || (t instanceof IncomingFileTransferException && ((IncomingFileTransferException) t).getErrorCode() == 404))
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.ARTIFACT_NOT_FOUND, NLS.bind(Messages.artifact_not_found, toDownload), t);
+		if (t instanceof ConnectException)
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, NLS.bind(Messages.TransportErrorTranslator_UnableToConnectToRepository_0, toDownload), t);
+		if (t instanceof UnknownHostException)
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_UnknownHost, toDownload), t);
+		if (t instanceof IDCreateException) {
+			IStatus status = ((IDCreateException) t).getStatus();
+			if (status != null && status.getException() != null)
+				t = status.getException();
+
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_MalformedRemoteFileReference, toDownload), t);
+		}
+		int code = 0;
+
+		// default to report as read repository error
+		int provisionCode = ProvisionException.REPOSITORY_FAILED_READ;
+
+		if (t instanceof IncomingFileTransferException)
+			code = ((IncomingFileTransferException) t).getErrorCode();
+		else if (t instanceof BrowseFileTransferException)
+			code = ((BrowseFileTransferException) t).getErrorCode();
+
+		// Switch on error codes in the HTTP error code range. 
+		// Note that 404 uses ARTIFACT_NOT_FOUND (as opposed to REPOSITORY_NOT_FOUND, which
+		// is determined higher up in the calling chain).
+		if (code == 401)
+			provisionCode = ProvisionException.REPOSITORY_FAILED_AUTHENTICATION;
+		else if (code == 404)
+			provisionCode = ProvisionException.ARTIFACT_NOT_FOUND;
+
+		// Add more specific translation here
+
+		return new DownloadStatus(IStatus.ERROR, Activator.ID, provisionCode, //
+				code == 0 ? NLS.bind(Messages.io_failedRead, toDownload) //
+						: codeToMessage(code, toDownload.toString()), t);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatusHelper.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatusHelper.java
new file mode 100644
index 0000000..e7813aa
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryStatusHelper.java
@@ -0,0 +1,320 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 Cloudsmith Inc, and other.
+ * The code, documentation and other materials contained herein have been
+ * licensed under the Eclipse Public License - v 1.0 by the individual
+ * copyright holders listed above, as Initial Contributors under such license.
+ * The text of such license is available at www.eclipse.org.
+ * Contributors:
+ * 	Cloudsmith Inc. - Initial API and implementation
+ *  IBM Corporation - Original Implementation of checkPermissionDenied
+ *  IBM Corportaion - Ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ecf.filetransfer.BrowseFileTransferException;
+import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
+import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
+import org.eclipse.equinox.internal.p2.repository.JREHttpClientRequiredException;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * RepositoryStatusHelper is a utility class for processing of exceptions and status.
+ */
+public abstract class RepositoryStatusHelper {
+
+	protected static final String SERVER_REDIRECT = "Server redirected too many times"; //$NON-NLS-1$
+
+	public static IStatus createStatus(String nlsMessage, Object arg) {
+		return createExceptionStatus(null, nlsMessage, new Object[] {arg});
+	}
+
+	public static IStatus createStatus(String nlsMessage, Object arg1, Object arg2) {
+		return createExceptionStatus(null, nlsMessage, new Object[] {arg1, arg2});
+	}
+
+	public static IStatus createStatus(String nlsMessage, Object arg1, Object arg2, Object arg3) {
+		return createExceptionStatus(null, nlsMessage, new Object[] {arg1, arg2, arg3});
+	}
+
+	public static IStatus createStatus(String nlsMessage, Object[] args) {
+		return createExceptionStatus(null, nlsMessage, args);
+	}
+
+	public static IStatus createStatus(String nlsMessage) {
+		return createExceptionStatus(null, nlsMessage, new Object[] {});
+	}
+
+	public static IStatus createExceptionStatus(Throwable cause) {
+		return (cause instanceof CoreException) ? ((CoreException) cause).getStatus() : new Status(IStatus.ERROR, Activator.ID, IStatus.OK, cause.getMessage(), cause);
+	}
+
+	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object[] args) {
+		if (args != null && args.length > 0)
+			nlsMessage = NLS.bind(nlsMessage, args);
+		return new Status(IStatus.ERROR, Activator.ID, IStatus.OK, nlsMessage, cause);
+	}
+
+	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object arg1, Object arg2, Object arg3) {
+		return createExceptionStatus(cause, nlsMessage, new Object[] {arg1, arg2, arg3});
+	}
+
+	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object arg1, Object arg2) {
+		return createExceptionStatus(cause, nlsMessage, new Object[] {arg1, arg2});
+	}
+
+	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage, Object arg1) {
+		return createExceptionStatus(cause, nlsMessage, new Object[] {arg1});
+	}
+
+	public static IStatus createExceptionStatus(Throwable cause, String nlsMessage) {
+		return createExceptionStatus(cause, nlsMessage, new Object[] {});
+	}
+
+	public static void deeplyPrint(Throwable e, PrintStream strm, boolean stackTrace) {
+		deeplyPrint(e, strm, stackTrace, 0);
+	}
+
+	public static CoreException fromMessage(String nlsMessage, Object[] args) {
+		return fromExceptionMessage(null, nlsMessage, args);
+	}
+
+	public static CoreException fromMessage(String nlsMessage, Object arg1) {
+		return fromExceptionMessage(null, nlsMessage, new Object[] {arg1});
+	}
+
+	public static CoreException fromMessage(String nlsMessage, Object arg1, Object arg2) {
+		return fromExceptionMessage(null, nlsMessage, new Object[] {arg1, arg2});
+	}
+
+	public static CoreException fromMessage(String nlsMessage, Object arg1, Object arg2, Object arg3) {
+		return fromExceptionMessage(null, nlsMessage, new Object[] {arg1, arg2, arg3});
+	}
+
+	public static CoreException fromMessage(String nlsMessage) {
+		return fromExceptionMessage(null, nlsMessage, new Object[] {});
+	}
+
+	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object[] args) {
+		CoreException ce = new CoreException(createExceptionStatus(cause, nlsMessage, args));
+		if (cause != null)
+			ce.initCause(cause);
+		return ce;
+	}
+
+	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object arg1, Object arg2, Object arg3) {
+		return fromExceptionMessage(cause, nlsMessage, new Object[] {arg1, arg2, arg3});
+	}
+
+	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object arg1, Object arg2) {
+		return fromExceptionMessage(cause, nlsMessage, new Object[] {arg1, arg2});
+	}
+
+	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage, Object arg1) {
+		return fromExceptionMessage(cause, nlsMessage, new Object[] {arg1});
+	}
+
+	public static CoreException fromExceptionMessage(Throwable cause, String nlsMessage) {
+		return fromExceptionMessage(cause, nlsMessage, new Object[] {});
+	}
+
+	public static Throwable unwind(Throwable t) {
+		for (;;) {
+			Class<? extends Throwable> tc = t.getClass();
+
+			// We don't use instanceof operator since we want
+			// the explicit class, not subclasses.
+			//
+			if (tc != RuntimeException.class && tc != InvocationTargetException.class && tc != IOException.class)
+				break;
+
+			Throwable cause = t.getCause();
+			if (cause == null)
+				break;
+
+			String msg = t.getMessage();
+			if (msg != null && !msg.equals(cause.toString()))
+				break;
+
+			t = cause;
+		}
+		return t;
+	}
+
+	public static CoreException unwindCoreException(CoreException exception) {
+		IStatus status = exception.getStatus();
+		while (status != null && status.getException() instanceof CoreException) {
+			exception = (CoreException) status.getException();
+			status = exception.getStatus();
+		}
+		return exception;
+	}
+
+	public static CoreException wrap(IStatus status) {
+		CoreException e = new CoreException(status);
+		Throwable t = status.getException();
+		if (t != null)
+			e.initCause(t);
+		return e;
+	}
+
+	public static CoreException wrap(Throwable t) {
+		t = unwind(t);
+		if (t instanceof CoreException)
+			return unwindCoreException((CoreException) t);
+
+		if (t instanceof OperationCanceledException || t instanceof InterruptedException)
+			return new CoreException(Status.CANCEL_STATUS);
+
+		String msg = t.toString();
+		return fromExceptionMessage(t, msg);
+	}
+
+	private static void appendLevelString(PrintStream strm, int level) {
+		if (level > 0) {
+			strm.print("[0"); //$NON-NLS-1$
+			for (int idx = 1; idx < level; ++idx) {
+				strm.print('.');
+				strm.print(level);
+			}
+			strm.print(']');
+		}
+	}
+
+	private static void deeplyPrint(CoreException ce, PrintStream strm, boolean stackTrace, int level) {
+		appendLevelString(strm, level);
+		if (stackTrace)
+			ce.printStackTrace(strm);
+		deeplyPrint(ce.getStatus(), strm, stackTrace, level);
+	}
+
+	private static void deeplyPrint(IStatus status, PrintStream strm, boolean stackTrace, int level) {
+		appendLevelString(strm, level);
+		String msg = status.getMessage();
+		strm.println(msg);
+		Throwable cause = status.getException();
+		if (cause != null) {
+			strm.print("Caused by: "); //$NON-NLS-1$
+			if (stackTrace || !(msg.equals(cause.getMessage()) || msg.equals(cause.toString())))
+				deeplyPrint(cause, strm, stackTrace, level);
+		}
+
+		if (status.isMultiStatus()) {
+			IStatus[] children = status.getChildren();
+			for (int i = 0; i < children.length; i++)
+				deeplyPrint(children[i], strm, stackTrace, level + 1);
+		}
+	}
+
+	private static void deeplyPrint(Throwable t, PrintStream strm, boolean stackTrace, int level) {
+		if (t instanceof CoreException)
+			deeplyPrint((CoreException) t, strm, stackTrace, level);
+		else {
+			appendLevelString(strm, level);
+			if (stackTrace)
+				t.printStackTrace(strm);
+			else {
+				strm.println(t.toString());
+				Throwable cause = t.getCause();
+				if (cause != null) {
+					strm.print("Caused by: "); //$NON-NLS-1$
+					deeplyPrint(cause, strm, stackTrace, level);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Check if the given exception represents that a switch to the JRE HTTP Client 
+	 * is required. ECF sets the HTTP status code 477 to indicate this.
+	 * If the JRE HTTP client is required a JREHttpClientRequiredException is thrown.
+	 */
+	public static void checkJREHttpClientRequired(Throwable t) throws JREHttpClientRequiredException {
+		if (t instanceof IncomingFileTransferException) {
+			if (((IncomingFileTransferException) t).getErrorCode() == 477)
+				throw new JREHttpClientRequiredException();
+		} else if (t instanceof BrowseFileTransferException) {
+			if (((BrowseFileTransferException) t).getErrorCode() == 477)
+				throw new JREHttpClientRequiredException();
+		}
+
+	}
+
+	/**
+	 * Check if the given exception represents a permission failure (401 for HTTP),
+	 * and throw a AuthenticationFailedException if a permission failure was encountered.
+	 */
+	public static void checkPermissionDenied(Throwable t) throws AuthenticationFailedException {
+		// From Use of File Transfer
+		if (t instanceof IncomingFileTransferException) {
+			if (((IncomingFileTransferException) t).getErrorCode() == 401)
+				throw new AuthenticationFailedException();
+			IStatus status = ((IncomingFileTransferException) t).getStatus();
+			t = status == null ? t : status.getException();
+			// From Use of Browse
+		} else if (t instanceof BrowseFileTransferException) {
+			if (((BrowseFileTransferException) t).getErrorCode() == 401)
+				throw new AuthenticationFailedException();
+			IStatus status = ((BrowseFileTransferException) t).getStatus();
+			t = status == null ? t : status.getException();
+		}
+
+		if (t == null || !(t instanceof IOException))
+			return;
+
+		// TODO: is this needed (for 401) now that ECF throws exceptions with codes?
+		// try to figure out if we have a 401 by parsing the exception message
+		// There is unfortunately no specific (general) exception for "redirected too many times" - which is commonly
+		// caused by a failed login. The message and exception are different in different implementations
+		// of http client.
+		String m = t.getMessage();
+		if (m != null && (m.indexOf(" 401 ") != -1 || m.indexOf(SERVER_REDIRECT) != -1)) //$NON-NLS-1$
+			throw new AuthenticationFailedException();
+		if ("org.apache.commons.httpclient.RedirectException".equals(t.getClass().getName())) //$NON-NLS-1$
+			throw new AuthenticationFailedException();
+	}
+
+	/**
+	 * Translates exceptions representing "FileNotFound" into FileNotFoundException.
+	 * @param t the throwable to check
+	 * @param toDownload the URI the exception was thrown for
+	 * @throws FileNotFoundException if 't' represents a file not found
+	 */
+	public static void checkFileNotFound(Throwable t, URI toDownload) throws FileNotFoundException {
+		if (t instanceof IncomingFileTransferException) {
+			IncomingFileTransferException e = (IncomingFileTransferException) t;
+			if (e.getErrorCode() == 404 || e.getErrorCode() == 403 || e.getErrorCode() == 300)
+				throw new FileNotFoundException(toDownload.toString());
+		}
+		if (t instanceof BrowseFileTransferException) {
+			BrowseFileTransferException e = (BrowseFileTransferException) t;
+			if (e.getErrorCode() == 404 || e.getErrorCode() == 403 || e.getErrorCode() == 300)
+				throw new FileNotFoundException(toDownload.toString());
+		}
+
+		if (t instanceof FileNotFoundException)
+			throw (FileNotFoundException) t;
+		if (t instanceof CoreException) {
+			IStatus status = ((CoreException) t).getStatus();
+			Throwable e = status == null ? null : status.getException();
+			if (e instanceof FileNotFoundException)
+				throw (FileNotFoundException) e;
+		}
+	}
+
+	public static IStatus malformedAddressStatus(String address, Throwable t) {
+		return new Status(IStatus.ERROR, Activator.ID, //
+				ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.exception_malformedRepoURI, address), t);
+
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryTransport.java b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryTransport.java
new file mode 100644
index 0000000..bef589f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/RepositoryTransport.java
@@ -0,0 +1,278 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011, IBM Corporation and other.
+ * The code, documentation and other materials contained herein have been
+ * licensed under the Eclipse Public License - v 1.0 by the copyright holder
+ * listed above, as the Initial Contributor under such license. The text of
+ * such license is available at www.eclipse.org.
+ * 
+ * Contributors
+ * 	IBM Corporation - Initial API and implementation.
+ *  Cloudsmith Inc - Implementation
+ ******************************************************************************/
+
+package org.eclipse.equinox.internal.p2.transport.ecf;
+
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ConnectException;
+import java.net.URI;
+import java.net.UnknownHostException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ecf.core.identity.IDCreateException;
+import org.eclipse.ecf.core.security.ConnectContextFactory;
+import org.eclipse.ecf.core.security.IConnectContext;
+import org.eclipse.ecf.filetransfer.BrowseFileTransferException;
+import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
+import org.eclipse.ecf.filetransfer.UserCancelledException;
+import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
+import org.eclipse.equinox.internal.p2.repository.Credentials;
+import org.eclipse.equinox.internal.p2.repository.Credentials.LoginCanceledException;
+import org.eclipse.equinox.internal.p2.repository.DownloadStatus;
+import org.eclipse.equinox.internal.p2.repository.FileInfo;
+import org.eclipse.equinox.internal.p2.repository.JREHttpClientRequiredException;
+import org.eclipse.equinox.internal.p2.repository.Messages;
+import org.eclipse.equinox.internal.p2.repository.RepositoryPreferences;
+import org.eclipse.equinox.internal.p2.repository.Transport;
+import org.eclipse.equinox.internal.provisional.p2.repository.IStateful;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.core.UIServices.AuthenticationInfo;
+import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * RepositoryTransport adapts p2 to ECF file download and file browsing.
+ * Download is performed by {@link FileReader}, and file browsing is performed by
+ * {@link FileInfoReader}.
+ */
+public class RepositoryTransport extends Transport implements IAgentServiceFactory {
+	private static RepositoryTransport instance;
+
+	/**
+	 * Returns an shared instance of Generic Transport
+	 */
+	//	public static synchronized RepositoryTransport getInstance() {
+	//		if (instance == null) {
+	//			instance = new RepositoryTransport();
+	//		}
+	//		return instance;
+	//	}
+
+	public IStatus download(URI toDownload, OutputStream target, long startPos, IProgressMonitor monitor) {
+
+		boolean promptUser = false;
+		boolean useJREHttp = false;
+		AuthenticationInfo loginDetails = null;
+		for (int i = RepositoryPreferences.getLoginRetryCount(); i > 0; i--) {
+			FileReader reader = null;
+			try {
+				loginDetails = Credentials.forLocation(toDownload, promptUser, loginDetails);
+				IConnectContext context = (loginDetails == null) ? null : ConnectContextFactory.createUsernamePasswordConnectContext(loginDetails.getUserName(), loginDetails.getPassword());
+
+				// perform the download
+				reader = new FileReader(context);
+				reader.readInto(toDownload, target, startPos, monitor);
+
+				// check that job ended ok - throw exceptions otherwise
+				IStatus result = reader.getResult();
+				if (result == null) {
+					String msg = NLS.bind(Messages.RepositoryTransport_failedReadRepo, toDownload);
+					DownloadStatus ds = new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, null);
+					return statusOn(target, ds, reader);
+				}
+				if (result.getSeverity() == IStatus.CANCEL)
+					throw new OperationCanceledException();
+				if (!result.isOK())
+					throw new CoreException(result);
+
+				// Download status is expected on success
+				DownloadStatus status = new DownloadStatus(IStatus.OK, Activator.ID, Status.OK_STATUS.getMessage());
+				return statusOn(target, status, reader);
+			} catch (UserCancelledException e) {
+				statusOn(target, new DownloadStatus(IStatus.CANCEL, Activator.ID, 1, "", null), reader); //$NON-NLS-1$
+				throw new OperationCanceledException();
+			} catch (OperationCanceledException e) {
+				statusOn(target, new DownloadStatus(IStatus.CANCEL, Activator.ID, 1, "", null), reader); //$NON-NLS-1$
+				throw e;
+			} catch (CoreException e) {
+				if (e.getStatus().getException() == null)
+					return statusOn(target, forException(e, toDownload), reader);
+				return statusOn(target, forStatus(e.getStatus(), toDownload), reader);
+			} catch (FileNotFoundException e) {
+				return statusOn(target, forException(e, toDownload), reader);
+			} catch (AuthenticationFailedException e) {
+				promptUser = true;
+			} catch (Credentials.LoginCanceledException e) {
+				DownloadStatus status = new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_AUTHENTICATION, //
+						NLS.bind(Messages.UnableToRead_0_UserCanceled, toDownload), null);
+				return statusOn(target, status, null);
+			} catch (JREHttpClientRequiredException e) {
+				if (!useJREHttp) {
+					useJREHttp = true; // only do this once
+					i++; // need an extra retry
+					Activator.getDefault().useJREHttpClient();
+				}
+			}
+		}
+		// reached maximum number of retries without success
+		DownloadStatus status = new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_AUTHENTICATION, //
+				NLS.bind(Messages.UnableToRead_0_TooManyAttempts, toDownload), null);
+		return statusOn(target, status, null);
+	}
+
+	public IStatus download(URI toDownload, OutputStream target, IProgressMonitor monitor) {
+		return download(toDownload, target, -1, monitor);
+	}
+
+	public InputStream stream(URI toDownload, IProgressMonitor monitor) throws FileNotFoundException, CoreException, AuthenticationFailedException {
+
+		boolean promptUser = false;
+		boolean useJREHttp = false;
+		AuthenticationInfo loginDetails = null;
+		for (int i = RepositoryPreferences.getLoginRetryCount(); i > 0; i--) {
+			FileReader reader = null;
+			try {
+				loginDetails = Credentials.forLocation(toDownload, promptUser, loginDetails);
+				IConnectContext context = (loginDetails == null) ? null : ConnectContextFactory.createUsernamePasswordConnectContext(loginDetails.getUserName(), loginDetails.getPassword());
+
+				// perform the streamed download
+				reader = new FileReader(context);
+				return reader.read(toDownload, monitor);
+			} catch (UserCancelledException e) {
+				throw new OperationCanceledException();
+			} catch (AuthenticationFailedException e) {
+				promptUser = true;
+			} catch (CoreException e) {
+				// must translate this core exception as it is most likely not informative to a user
+				if (e.getStatus().getException() == null)
+					throw new CoreException(RepositoryStatus.forException(e, toDownload));
+				throw new CoreException(RepositoryStatus.forStatus(e.getStatus(), toDownload));
+			} catch (LoginCanceledException e) {	
+				// i.e. same behavior when user cancels as when failing n attempts.
+				throw new AuthenticationFailedException();
+			} catch (JREHttpClientRequiredException e) {
+				if (!useJREHttp) {
+					useJREHttp = true; // only do this once
+					i++; // need an extra retry
+					Activator.getDefault().useJREHttpClient();
+				}
+			}
+		}
+		throw new AuthenticationFailedException();
+	}
+
+	/**
+	 * Set the status on the output stream if it implements IStateful. 
+	 * Update the DownloadStatus with information from FileReader.
+	 * @param target an OutputStream possibly implementing IStateful
+	 * @param status a DownloadStatus configured with status message, code, etc
+	 * @param reader a FileReade that was used to download (or null if not known).
+	 * @throws OperationCanceledException if the operation was canceled by the user.
+	 * @return the configured DownloadStatus status.
+	 */
+	private static DownloadStatus statusOn(OutputStream target, DownloadStatus status, FileReader reader) {
+		if (reader != null) {
+			FileInfo fi = reader.getLastFileInfo();
+			if (fi != null) {
+				status.setFileSize(fi.getSize());
+				status.setLastModified(fi.getLastModified());
+				status.setTransferRate(fi.getAverageSpeed());
+			}
+		}
+		if (target instanceof IStateful)
+			((IStateful) target).setStatus(status);
+		return status;
+	}
+
+	public long getLastModified(URI toDownload, IProgressMonitor monitor) throws CoreException, FileNotFoundException, AuthenticationFailedException {
+		boolean promptUser = false;
+		boolean useJREHttp = false;
+		AuthenticationInfo loginDetails = null;
+		for (int i = RepositoryPreferences.getLoginRetryCount(); i > 0; i--) {
+			try {
+				loginDetails = Credentials.forLocation(toDownload, promptUser, loginDetails);
+				IConnectContext context = (loginDetails == null) ? null : ConnectContextFactory.createUsernamePasswordConnectContext(loginDetails.getUserName(), loginDetails.getPassword());
+				// get the remote info
+				FileInfoReader reader = new FileInfoReader(context);
+				return reader.getLastModified(toDownload, monitor);
+			} catch (UserCancelledException e) {
+				throw new OperationCanceledException();
+			} catch (CoreException e) {
+				// must translate this core exception as it is most likely not informative to a user
+				if (e.getStatus().getException() == null)
+					throw new CoreException(RepositoryStatus.forException(e, toDownload));
+				throw new CoreException(RepositoryStatus.forStatus(e.getStatus(), toDownload));
+			} catch (AuthenticationFailedException e) {
+				promptUser = true;
+			} catch (LoginCanceledException e) {
+				// same behavior as if user failed n attempts.
+				throw new AuthenticationFailedException();
+			} catch (JREHttpClientRequiredException e) {
+				if (!useJREHttp) {
+					useJREHttp = true; // only do this once
+					i++; // need an extra retry
+					Activator.getDefault().useJREHttpClient();
+				}
+			}
+
+		}
+		// reached maximum number of authentication retries without success
+		throw new AuthenticationFailedException();
+	}
+
+	public static DownloadStatus forStatus(IStatus original, URI toDownload) {
+		Throwable t = original.getException();
+		return forException(t, toDownload);
+	}
+
+	public static DownloadStatus forException(Throwable t, URI toDownload) {
+		if (t instanceof FileNotFoundException || (t instanceof IncomingFileTransferException && ((IncomingFileTransferException) t).getErrorCode() == 404))
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.ARTIFACT_NOT_FOUND, NLS.bind(Messages.artifact_not_found, toDownload), t);
+		if (t instanceof ConnectException)
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, NLS.bind(Messages.TransportErrorTranslator_UnableToConnectToRepository_0, toDownload), t);
+		if (t instanceof UnknownHostException)
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_UnknownHost, toDownload), t);
+		if (t instanceof IDCreateException) {
+			IStatus status = ((IDCreateException) t).getStatus();
+			if (status != null && status.getException() != null)
+				t = status.getException();
+
+			return new DownloadStatus(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_INVALID_LOCATION, NLS.bind(Messages.TransportErrorTranslator_MalformedRemoteFileReference, toDownload), t);
+		}
+		int code = 0;
+
+		// default to report as read repository error
+		int provisionCode = ProvisionException.REPOSITORY_FAILED_READ;
+
+		if (t instanceof IncomingFileTransferException)
+			code = ((IncomingFileTransferException) t).getErrorCode();
+		else if (t instanceof BrowseFileTransferException)
+			code = ((BrowseFileTransferException) t).getErrorCode();
+
+		// Switch on error codes in the HTTP error code range. 
+		// Note that 404 uses ARTIFACT_NOT_FOUND (as opposed to REPOSITORY_NOT_FOUND, which
+		// is determined higher up in the calling chain).
+		if (code == 401)
+			provisionCode = ProvisionException.REPOSITORY_FAILED_AUTHENTICATION;
+		else if (code == 404)
+			provisionCode = ProvisionException.ARTIFACT_NOT_FOUND;
+
+		// Add more specific translation here
+
+		return new DownloadStatus(IStatus.ERROR, Activator.ID, provisionCode, //
+				code == 0 ? NLS.bind(Messages.io_failedRead, toDownload) //
+						: RepositoryStatus.codeToMessage(code, toDownload.toString()), t);
+	}
+
+	public Object createService(IProvisioningAgent agent) {
+		if (instance ==  null)
+			return instance;
+		return instance;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/messages.properties
new file mode 100644
index 0000000..4e59267
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.transport.ecf/src/org/eclipse/equinox/internal/p2/transport/ecf/messages.properties
@@ -0,0 +1,76 @@
+###############################################################################
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
+#  All rights reserved. This program and the accompanying materials
+#  are made available under the terms of the Eclipse Public License v1.0
+#  which accompanies this distribution, and is available at
+#  http://www.eclipse.org/legal/epl-v10.html
+# 
+#  Contributors:
+#     IBM Corporation - initial API and implementation
+#     Cloudsmith Inc - additional messages
+#     Sonatype Inc - ongoing implementation
+###############################################################################
+artifact_not_found=Artifact not found: {0}.
+
+io_failedRead=Unable to read repository at {0}.
+ecf_configuration_error=Transport initialization error.
+
+
+repoMan_internalError=Internal error.
+repo_loading = Loading the repository {0}
+
+CacheManager_Neither_0_nor_1_found=Neither {0} nor {1} found.
+CacheManager_AuthenticationFaileFor_0=Authentication failed for {0}.
+CacheManager_FailedCommunicationWithRepo_0=Communication with repository at {0} failed.
+CacheManage_ErrorRenamingCache=An error occurred while downloading {0}. The cache file {1} could not be renamed to {1}.
+
+exception_malformedRepoURI = The repository location ({0}) must be a URI.
+
+TransportErrorTranslator_400=Bad HTTP Request: {0}
+TransportErrorTranslator_401=Authentication Failed - Unauthorized: {0}
+TransportErrorTranslator_402=HTTP Payment Required: {0}
+TransportErrorTranslator_403=HTTP Access Forbidden: {0}
+TransportErrorTranslator_404=HTTP Remote File Not Found: {0}
+TransportErrorTranslator_405=HTTP Method Not Allowed: {0}
+TransportErrorTranslator_406=HTTP Request Not Acceptable: {0}
+TransportErrorTranslator_407=HTTP Proxy Authentication Required: {0}
+TransportErrorTranslator_408=HTTP Request Timeout: {0}
+TransportErrorTranslator_409=HTTP Conflict In Request: {0}
+TransportErrorTranslator_410=HTTP Remote File Permanently Removed: {0}
+TransportErrorTranslator_411=HTTP Length Required: {0}
+TransportErrorTranslator_412=HTTP Precondition Failed: {0}
+TransportErrorTranslator_413=HTTP Requested Entity Too Large: {0}
+TransportErrorTranslator_414=HTTP Request URI Too Long: {0}
+TransportErrorTranslator_415=HTTP Unsupported Media Type: {0}
+TransportErrorTranslator_416=HTTP Requested Range Not Satisfiable: {0}
+TransportErrorTranslator_417=HTTP Expectation Failed: {0}
+TransportErrorTranslator_418=HTTP Cannot provision coffee from a tea pot: {0}
+TransportErrorTranslator_422=HTTP (WebDav) Unprocessable Entity: {0}
+TransportErrorTranslator_423=HTTP (WebDAV) Locked: {0}
+TransportErrorTranslator_424=HTTP (WebDAV) Failed Dependency: {0}
+TransportErrorTranslator_425=HTTP Unordered Collection: {0}
+TransportErrorTranslator_426=HTTP Upgrade Required: {0}
+TransportErrorTranslator_449=HTTP Retry With Response: {0}
+TransportErrorTranslator_450=HTTP Blocked By Parental Control: {0}
+TransportErrorTranslator_500=HTTP Server ''Internal Error'': {0}
+TransportErrorTranslator_501=HTTP Server ''Not Implemented'': {0}
+TransportErrorTranslator_502=HTTP Server ''Bad Gateway'' : {0}
+TransportErrorTranslator_503=HTTP Server ''Service Unavailable'': {0}
+TransportErrorTranslator_504=HTTP Server ''Gateway Timeout'': {0}
+TransportErrorTranslator_505=HTTP Server ''HTTP Version Not Supported'': {0}
+TransportErrorTranslator_506=HTTP Server ''Variant Also Negotiates'': {0}
+TransportErrorTranslator_507=HTTP (WebDAV) ''Insufficient Storage'': {0}
+TransportErrorTranslator_508=HTTP Server ''Bandwidth Limit Exceeded'': {0}
+TransportErrorTranslator_510=HTTP Server ''Not Extended'': {0}
+TransportErrorTranslator_MalformedRemoteFileReference=Malformed reference to remote file: {0}
+TransportErrorTranslator_UnableToConnectToRepository_0=Unable to connect to repository {0}
+TransportErrorTranslator_UnknownErrorCode=HTTP Server Unknown HTTP Response Code ({0}):{1}
+TransportErrorTranslator_UnknownHost=Unknown Host: {0}
+fetching_0_from_1_2_at_3=Fetching {0} ({2} at {3}/s) from {1}
+fetching_0_from_1_2_of_3_at_4=Fetching {0} ({2} of {3} at {4}/s) from {1}
+FileTransport_reader=File Transport Reader
+FileTransport_cancelCheck=File Transport Cancel Handler
+connection_to_0_failed_on_1_retry_attempt_2=Connection to {0} failed on {1}. Retry attempt {2} started
+UnableToRead_0_TooManyAttempts=Unable to read repository at: {0}. Too many failed login attempts.
+UnableToRead_0_UserCanceled=Unable to read repository at: {0}. Login canceled by user.
+RepositoryTransport_failedReadRepo=Error while reading from repository: {0}.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF
index 4474697..ecd2f38 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@ Bundle-Name: %bundleName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.equinox.p2.ui.admin.rcp; singleton:=true
-Bundle-Version: 1.0.101.qualifier
+Bundle-Version: 1.0.200.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.ui.admin.rcp.Activator
 Bundle-RequiredExecutionEnvironment: J2SE-1.4,
  CDC-1.1/Foundation-1.1
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/config.ini b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/config.ini
deleted file mode 100644
index 7126f90..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/config.ini
+++ /dev/null
@@ -1,49 +0,0 @@
-osgi.bundles=\
-	com.ibm.icu,\
-	org.eclipse.core.commands,\
-	org.eclipse.core.contenttype,\
-	org.eclipse.core.databinding,\
-	org.eclipse.core.expressions,\
-	org.eclipse.core.jobs,\
-	org.eclipse.core.runtime,\
-	org.eclipse.ecf,\
-	org.eclipse.ecf.filetransfer,\
-	org.eclipse.ecf.identity,\
-	org.eclipse.ecf.provider.filetransfer,\
-	org.eclipse.equinox.app at start,\
-	org.eclipse.equinox.common,\
-	org.eclipse.equinox.frameworkadmin,\
-	org.eclipse.equinox.frameworkadmin.equinox at start,\
-	org.eclipse.equinox.launcher,\
-	org.eclipse.equinox.launcher.win32.win32.x86,\
-	org.eclipse.equinox.preferences,\
-	org.eclipse.equinox.p2.jarprocessor,\
-	org.eclipse.equinox.p2.artifact.repository,\
-	org.eclipse.equinox.p2.console,\
-	org.eclipse.equinox.p2.core,\
-	org.eclipse.equinox.p2.director,\
-	org.eclipse.equinox.p2.download,\
-	org.eclipse.equinox.p2.engine,\
-	org.eclipse.equinox.p2.metadata,\
-	org.eclipse.equinox.p2.metadata.repository,\
-	org.eclipse.equinox.p2.touchpoint.eclipse,\
-	org.eclipse.equinox.p2.touchpoint.natives,\
-	org.eclipse.equinox.p2.ui,\
-	org.eclipse.equinox.p2.ui.admin,\
-	org.eclipse.equinox.p2.ui.admin.rcp,\
-	org.eclipse.equinox.registry,\
-	org.eclipse.equinox.simpleconfigurator at 1:start,\
-	org.eclipse.equinox.simpleconfigurator.manipulator at start,\
-	org.eclipse.help,\
-	org.eclipse.jface,\
-	org.eclipse.jface.databinding,\
-	org.eclipse.osgi.services,\
-	org.eclipse.swt,\
-	org.eclipse.swt.win32.win32.x86,\
-	org.eclipse.ui,\
-	org.eclipse.ui.workbench,\
-	org.sat4j.core,\
-	org.sat4j.pb
-eclipse.product=org.eclipse.equinox.p2.ui.admin.rcp.product
-org.eclipse.equinox.simpleconfigurator.useReference=true
-org.eclipse.update.reconcile=false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/plugin.properties
index f90be3c..3935dcd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2007, 2009 IBM Corporation and others.
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -18,4 +18,4 @@ appName=Eclipse Provisioning Admin UI
 perspectiveName=Eclipse Provisioning
 Views.Progress=Progress View
 aboutText= Eclipse Provisioning Admin UI \n\n\
-(c) Copyright Eclipse contributors and others 2007-2009.  All rights reserved.\n
+(c) Copyright Eclipse contributors and others 2007-2010.  All rights reserved.\n
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml
index a2ffba8..9252d7a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.ui.admin.rcp</artifactId>
-  <version>1.0.100.qualifier</version>
+  <version>1.0.200.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/rcp.product b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/rcp.product
index 4bea2a8..3c0b299 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/rcp.product
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/rcp.product
@@ -185,6 +185,7 @@ Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in t
       <plugin id="org.eclipse.equinox.p2.repository.tools"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.eclipse"/>
       <plugin id="org.eclipse.equinox.p2.touchpoint.natives"/>
+      <plugin id="org.eclipse.equinox.p2.transport.ecf"/>
       <plugin id="org.eclipse.equinox.p2.ui"/>
       <plugin id="org.eclipse.equinox.p2.ui.admin"/>
       <plugin id="org.eclipse.equinox.p2.ui.admin.rcp"/>
@@ -210,6 +211,7 @@ Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in t
       <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
       <plugin id="org.eclipse.text"/>
       <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.cocoa" fragment="true"/>
       <plugin id="org.eclipse.ui.editors"/>
       <plugin id="org.eclipse.ui.forms"/>
       <plugin id="org.eclipse.ui.ide"/>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationActionBarAdvisor.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationActionBarAdvisor.java
index 2612358..43b3175 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationActionBarAdvisor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationActionBarAdvisor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.equinox.internal.p2.ui.admin.rcp;
 
 import org.eclipse.jface.action.*;
+import org.eclipse.jface.util.Util;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.application.ActionBarAdvisor;
@@ -33,11 +34,15 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
 	protected void fillMenuBar(IMenuManager menuBar) {
 		IMenuManager fileMenu = new MenuManager(ProvAdminUIMessages.ApplicationActionBarAdvisor_FileMenuName, "file"); //$NON-NLS-1$
 		menuBar.add(fileMenu);
-		fileMenu.add(quitAction);
+		ActionContributionItem quitItem = new ActionContributionItem(quitAction);
+		quitItem.setVisible(!Util.isMac());
+		fileMenu.add(quitItem);
 
 		IMenuManager windowMenu = new MenuManager(ProvAdminUIMessages.ApplicationActionBarAdvisor_WindowMenuName, "window"); //$NON-NLS-1$
 		menuBar.add(windowMenu);
-		windowMenu.add(prefsAction);
+		ActionContributionItem prefsItem = new ActionContributionItem(prefsAction);
+		prefsItem.setVisible(!Util.isMac());
+		windowMenu.add(prefsItem);
 
 		IMenuManager helpMenu = new MenuManager(ProvAdminUIMessages.ApplicationActionBarAdvisor_HelpMenuName, "help"); //$NON-NLS-1$
 		menuBar.add(helpMenu);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationWorkbenchAdvisor.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationWorkbenchAdvisor.java
index dc31db1..6c2efc4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationWorkbenchAdvisor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin.rcp/src/org/eclipse/equinox/internal/p2/ui/admin/rcp/ApplicationWorkbenchAdvisor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/META-INF/MANIFEST.MF
index 5b61245..a11cc40 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.p2.ui.admin;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.ui.admin.ProvAdminUIActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/build.properties
index b7d66df..d491f0a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/pom.xml
index c329656..68cd981 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.ui.admin</artifactId>
-  <version>1.0.0.qualifier</version>
+  <version>1.0.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddProfileJob.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddProfileJob.java
index ecc86f0..120f0d3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddProfileJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/AddProfileJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java
index a2bdc4e..dcd0d1c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoriesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoryTracker.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoryTracker.java
index ba8ce8d..105880b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoryTracker.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ArtifactRepositoryTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,4 +82,9 @@ public class ArtifactRepositoryTracker extends RepositoryTracker {
 	IArtifactRepositoryManager getArtifactRepositoryManager() {
 		return ProvUI.getArtifactRepositoryManager(ui.getSession());
 	}
+
+	@Override
+	protected boolean contains(URI location, ProvisioningSession session) {
+		return ProvUI.getArtifactRepositoryManager(session).contains(location);
+	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/InstallAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/InstallAction.java
new file mode 100644
index 0000000..f19ec30
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/InstallAction.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Sonatype, Inc. - ongoing development
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.p2.ui.admin;
+
+import java.util.Collection;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.actions.ProfileModificationAction;
+import org.eclipse.equinox.internal.p2.ui.admin.dialogs.AddProfileDialog;
+import org.eclipse.equinox.internal.p2.ui.model.*;
+import org.eclipse.equinox.internal.p2.ui.viewers.ProvElementContentProvider;
+import org.eclipse.equinox.internal.p2.ui.viewers.ProvElementLabelProvider;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.engine.IProfileRegistry;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.operations.InstallOperation;
+import org.eclipse.equinox.p2.operations.ProfileChangeOperation;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.ui.dialogs.ListDialog;
+
+public class InstallAction extends ProfileModificationAction {
+
+	String userChosenProfileId;
+
+	public InstallAction(ProvisioningUI ui, ISelectionProvider selectionProvider) {
+		super(ui, ProvUI.INSTALL_COMMAND_LABEL, selectionProvider, null);
+		setToolTipText(ProvUI.INSTALL_COMMAND_TOOLTIP);
+		userChosenProfileId = ui.getProfileId();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.ui.actions.ProfileModificationAction#isEnabledFor(java.lang.Object[])
+	 */
+	protected boolean isEnabledFor(Object[] selectionArray) {
+		if (selectionArray.length == 0)
+			return false;
+		// We allow non-IU's to be selected at this point, but there
+		// must be at least one installable unit selected that is
+		// selectable
+		for (int i = 0; i < selectionArray.length; i++) {
+			if (selectionArray[i] instanceof InstalledIUElement && isSelectable((IIUElement) selectionArray[i]))
+				return true;
+			IInstallableUnit iu = ProvUI.getAdapter(selectionArray[i], IInstallableUnit.class);
+			if (iu != null && isSelectable(iu))
+				return true;
+		}
+		return false;
+	}
+
+	/*
+	 * Overridden to reject categories and nested IU's (parent is a non-category IU)
+	 * (non-Javadoc)
+	 * @see org.eclipse.equinox.internal.provisional.p2.ui.actions.ProfileModificationAction#isSelectable(org.eclipse.equinox.internal.p2.ui.model.IUElement)
+	 */
+	protected boolean isSelectable(IIUElement element) {
+		return super.isSelectable(element) && !(element.getParent(element) instanceof AvailableIUElement);
+	}
+
+	protected int performAction(ProfileChangeOperation operation, Collection<IInstallableUnit> ius) {
+		ProvisioningUI ui = ProvAdminUIActivator.getDefault().getProvisioningUI(userChosenProfileId);
+		operation.setProfileId(userChosenProfileId);
+		int ret = ui.openInstallWizard(ius, (InstallOperation) operation, null);
+		userChosenProfileId = null;
+		return ret;
+	}
+
+	protected ProfileChangeOperation getProfileChangeOperation(Collection<IInstallableUnit> ius) {
+		InstallOperation op = new InstallOperation(getSession(), ius);
+		op.setProfileId(userChosenProfileId);
+		return op;
+	}
+
+	protected boolean isInvalidProfileId() {
+		if (userChosenProfileId == null) {
+			userChosenProfileId = getUserChosenProfileId();
+		}
+		return userChosenProfileId == null;
+	}
+
+	private String getUserChosenProfileId() {
+		IProfileRegistry registry = ProvAdminUIActivator.getDefault().getProfileRegistry();
+		if (registry.getProfiles().length == 0) {
+			AddProfileDialog dialog = new AddProfileDialog(getShell(), new String[0]);
+			if (dialog.open() == Window.OK) {
+				return dialog.getAddedProfileId();
+			}
+			return null;
+		}
+
+		ListDialog dialog = new ListDialog(getShell());
+		dialog.setTitle("Choose a Profile");
+		dialog.setLabelProvider(new ProvElementLabelProvider());
+		dialog.setInput(new Profiles(getProvisioningUI()));
+		dialog.setContentProvider(new ProvElementContentProvider());
+		dialog.open();
+		Object[] result = dialog.getResult();
+		if (result != null && result.length > 0) {
+			IProfile profile = ProvUI.getAdapter(result[0], IProfile.class);
+			if (profile != null)
+				return profile.getProfileId();
+		}
+		return null;
+	}
+
+	protected void runCanceled() {
+		super.runCanceled();
+		userChosenProfileId = null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/InstallIUDropAdapter.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/InstallIUDropAdapter.java
new file mode 100644
index 0000000..6b00dee
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/InstallIUDropAdapter.java
@@ -0,0 +1,212 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.ui.admin;
+
+import java.util.*;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.ui.*;
+import org.eclipse.equinox.internal.p2.ui.model.InstalledIUElement;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.dnd.*;
+
+/**
+ * Defines drop behavior for selected IUs to mean install the IU on the target
+ * profile.
+ * 
+ * @since 3.4
+ * 
+ */
+public class InstallIUDropAdapter extends ViewerDropAdapter {
+
+	static boolean DEBUG = false;
+
+	/**
+	 * Constructs a new drop adapter.
+	 * 
+	 * @param viewer
+	 *            the navigator's viewer
+	 */
+	public InstallIUDropAdapter(StructuredViewer viewer) {
+		super(viewer);
+	}
+
+	/**
+	 * Returns an error status with the given info.
+	 */
+	IStatus error(String message) {
+		return error(message, null);
+	}
+
+	/**
+	 * Returns an error status with the given info.
+	 */
+	IStatus error(String message, Throwable exception) {
+		return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, 0, message, exception);
+	}
+
+	/**
+	 * Returns the target profile id for the drop. If the drop is positioned on an
+	 * IU, return its parent profile id.
+	 */
+	private String getProfileTarget(Object mouseTarget) {
+		IProfile profile = ProvUI.getAdapter(mouseTarget, IProfile.class);
+		if (profile != null) {
+			return profile.getProfileId();
+		}
+
+		if (mouseTarget instanceof InstalledIUElement) {
+			return ((InstalledIUElement) mouseTarget).getProfileId();
+		}
+		return null;
+	}
+
+	/**
+	 * Returns an status indicating success.
+	 */
+	private IStatus ok() {
+		return new Status(IStatus.OK, ProvUIActivator.PLUGIN_ID, 0, null, null);
+	}
+
+	/**
+	 * Perform the drop.
+	 * 
+	 * @see org.eclipse.swt.dnd.DropTargetListener#drop(org.eclipse.swt.dnd.DropTargetEvent)
+	 */
+	public boolean performDrop(final Object data) {
+		if (DEBUG) {
+			System.out.println("Perform drop on target: " + getCurrentTarget() + " with data: " + data); //$NON-NLS-1$//$NON-NLS-2$
+		}
+		if (getCurrentTarget() == null || data == null)
+			return false;
+
+		ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
+		if (!(selection instanceof IStructuredSelection) || selection.isEmpty())
+			return false;
+
+		String profileId = getProfileTarget(getCurrentTarget());
+		if (getCurrentOperation() == DND.DROP_COPY && profileId != null) {
+			final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			ISelectionProvider selectionProvider = new ISelectionProvider() {
+
+				/* (non-Javadoc)
+				 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+				 */
+				public void addSelectionChangedListener(ISelectionChangedListener listener) {
+					// Ignore because the selection won't change 
+				}
+
+				/* (non-Javadoc)
+				 * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
+				 */
+				public ISelection getSelection() {
+					if (DEBUG) {
+						System.out.println("Selection was queried by action"); //$NON-NLS-1$
+						System.out.println(structuredSelection.toString());
+					}
+					return structuredSelection;
+				}
+
+				/* (non-Javadoc)
+				 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+				 */
+				public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+					// ignore because the selection is static
+				}
+
+				/* (non-Javadoc)
+				 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+				 */
+				public void setSelection(ISelection sel) {
+					throw new UnsupportedOperationException("This ISelectionProvider is static, and cannot be modified."); //$NON-NLS-1$
+				}
+			};
+			InstallAction action = new InstallAction(ProvAdminUIActivator.getDefault().getProvisioningUI(profileId), selectionProvider);
+			if (DEBUG)
+				System.out.println("Running install action"); //$NON-NLS-1$
+			action.run();
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Validate whether the drop is valid for the target
+	 */
+	public boolean validateDrop(Object target, int dragOperation, TransferData transferType) {
+
+		if (LocalSelectionTransfer.getTransfer().isSupportedType(transferType)) {
+			IStatus status = validateTarget(target, transferType);
+			if (DEBUG) {
+				System.out.println("Validate target: " + status); //$NON-NLS-1$
+			}
+			return status.isOK();
+		}
+		return false;
+	}
+
+	/*
+	 * Overridden to force a copy when the drag is valid.
+	 * 
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragEnter(org.eclipse.swt.dnd.DropTargetEvent)
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		event.detail = DND.DROP_COPY;
+		super.dragEnter(event);
+	}
+
+	/**
+	 * Ensures that the drop target meets certain criteria
+	 */
+	private IStatus validateTarget(Object target, TransferData transferType) {
+		if (LocalSelectionTransfer.getTransfer().isSupportedType(transferType)) {
+			IInstallableUnit[] ius = getSelectedIUs();
+
+			if (ius.length == 0) {
+				return error(ProvUIMessages.ProvDropAdapter_NoIUsToDrop);
+			}
+			if (getProfileTarget(target) != null) {
+				return ok();
+			}
+			return error(ProvUIMessages.ProvDropAdapter_InvalidDropTarget);
+		}
+		return error(ProvUIMessages.ProvDropAdapter_UnsupportedDropOperation);
+	}
+
+	/**
+	 * Returns the resource selection from the LocalSelectionTransfer.
+	 * 
+	 * @return the resource selection from the LocalSelectionTransfer
+	 */
+	private IInstallableUnit[] getSelectedIUs() {
+		ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
+		List<IInstallableUnit> ius = new ArrayList<IInstallableUnit>();
+
+		if (!(selection instanceof IStructuredSelection) || selection.isEmpty()) {
+			return null;
+		}
+		IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+
+		Iterator<?> iter = structuredSelection.iterator();
+		while (iter.hasNext()) {
+			IInstallableUnit iu = ProvUI.getAdapter(iter.next(), IInstallableUnit.class);
+			if (iu != null) {
+				ius.add(iu);
+			}
+		}
+		return ius.toArray(new IInstallableUnit[ius.size()]);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoriesView.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoriesView.java
index d4092e1..f0388fd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoriesView.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoriesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@ package org.eclipse.equinox.internal.p2.ui.admin;
 import java.util.List;
 import org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener;
 import org.eclipse.equinox.internal.p2.ui.QueryableMetadataRepositoryManager;
-import org.eclipse.equinox.internal.p2.ui.actions.InstallAction;
 import org.eclipse.equinox.internal.p2.ui.admin.dialogs.AddMetadataRepositoryDialog;
 import org.eclipse.equinox.internal.p2.ui.admin.preferences.PreferenceConstants;
 import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositories;
@@ -81,7 +80,7 @@ public class MetadataRepositoriesView extends RepositoriesView {
 
 	protected void makeActions() {
 		super.makeActions();
-		installAction = new InstallAction(getProvisioningUI(), viewer, null);
+		installAction = new InstallAction(getProvisioningUI(), viewer);
 	}
 
 	protected void fillContextMenu(IMenuManager manager) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoryTracker.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoryTracker.java
index 107a531..efe7fc9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoryTracker.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/MetadataRepositoryTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,4 +83,9 @@ public class MetadataRepositoryTracker extends RepositoryTracker {
 	IMetadataRepositoryManager getMetadataRepositoryManager() {
 		return ProvUI.getMetadataRepositoryManager(ui.getSession());
 	}
+
+	@Override
+	protected boolean contains(URI location, ProvisioningSession session) {
+		return ProvUI.getMetadataRepositoryManager(session).contains(location);
+	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfileFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfileFactory.java
index 831213f..e584c76 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfileFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfileFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java
index 7272c67..b9a91fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProfilesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -19,7 +19,8 @@ import org.eclipse.equinox.internal.p2.ui.actions.UpdateAction;
 import org.eclipse.equinox.internal.p2.ui.admin.dialogs.AddProfileDialog;
 import org.eclipse.equinox.internal.p2.ui.admin.preferences.PreferenceConstants;
 import org.eclipse.equinox.internal.p2.ui.model.*;
-import org.eclipse.equinox.internal.p2.ui.viewers.*;
+import org.eclipse.equinox.internal.p2.ui.viewers.ProvElementContentProvider;
+import org.eclipse.equinox.internal.p2.ui.viewers.StructuredViewerProvisioningListener;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.ui.ProvisioningUI;
 import org.eclipse.jface.action.*;
@@ -81,18 +82,18 @@ public class ProfilesView extends ProvView {
 
 	protected void addListeners() {
 		super.addListeners();
-		listener = new StructuredViewerProvisioningListener(getClass().getName(), viewer, ProvUIProvisioningListener.PROV_EVENT_IU | ProvUIProvisioningListener.PROV_EVENT_PROFILE);
-		ProvUI.addProvisioningListener(listener);
+		listener = new StructuredViewerProvisioningListener(getClass().getName(), viewer, ProvUIProvisioningListener.PROV_EVENT_IU | ProvUIProvisioningListener.PROV_EVENT_PROFILE, ui.getOperationRunner());
+		ProvUI.getProvisioningEventBus(ui.getSession()).addListener(listener);
 	}
 
 	protected void removeListeners() {
 		super.removeListeners();
-		ProvUI.removeProvisioningListener(listener);
+		ProvUI.getProvisioningEventBus(ui.getSession()).removeListener(listener);
 	}
 
 	protected void configureViewer(TreeViewer treeViewer) {
 		super.configureViewer(treeViewer);
-		InstallIUDropAdapter adapter = new InstallIUDropAdapter(getProvisioningUI(), treeViewer);
+		InstallIUDropAdapter adapter = new InstallIUDropAdapter(treeViewer);
 		adapter.setFeedbackEnabled(false);
 		Transfer[] transfers = new Transfer[] {org.eclipse.jface.util.LocalSelectionTransfer.getTransfer()};
 		treeViewer.addDropSupport(DND.DROP_COPY, transfers, adapter);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java
index 0b93343..e79b334 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.equinox.internal.p2.ui.admin;
 
 import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
 import org.eclipse.equinox.internal.p2.ui.admin.preferences.PreferenceConstants;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.engine.IProfileRegistry;
@@ -26,7 +25,6 @@ import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
 
 /**
  * Activator class for the admin UI.
@@ -39,7 +37,6 @@ public class ProvAdminUIActivator extends AbstractUIPlugin {
 	public static final String PLUGIN_ID = "org.eclipse.equinox.internal.provisional.p2.ui.admin"; //$NON-NLS-1$
 	public static final String PERSPECTIVE_ID = "org.eclipse.equinox.internal.provisional.p2.ui.admin.ProvisioningPerspective"; //$NON-NLS-1$
 
-	private ServiceRegistration certificateUIRegistration;
 	private IPropertyChangeListener preferenceListener;
 
 	Policy policy;
@@ -88,7 +85,6 @@ public class ProvAdminUIActivator extends AbstractUIPlugin {
 
 	public void stop(BundleContext bundleContext) throws Exception {
 		plugin = null;
-		certificateUIRegistration.unregister();
 		getPreferenceStore().removePropertyChangeListener(preferenceListener);
 		super.stop(bundleContext);
 		policy = null;
@@ -130,7 +126,7 @@ public class ProvAdminUIActivator extends AbstractUIPlugin {
 	}
 
 	private RepositoryTracker getRepositoryTracker() {
-		return (RepositoryTracker) ServiceHelper.getService(ProvUIActivator.getContext(), RepositoryTracker.class.getName());
+		return ProvisioningUI.getDefaultUI().getRepositoryTracker();
 	}
 
 	void initializePolicy() {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIMessages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIMessages.java
index b915027..416a0ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIMessages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvAdminUIMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -78,7 +78,6 @@ public class ProvAdminUIMessages extends NLS {
 	public static String ProfileGroup_Browse;
 	public static String ProfileGroup_Browse2;
 	public static String ProfileGroup_Environments;
-	public static String ProfileGroup_Flavor;
 	public static String ProfileGroup_ID;
 	public static String ProfileGroup_Cache;
 	public static String ProfileGroup_InstallFolder;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java
index 63a30fd..a58bacf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/ProvView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,12 +13,9 @@ package org.eclipse.equinox.internal.p2.ui.admin;
 import java.util.ArrayList;
 import java.util.List;
 import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.equinox.internal.p2.ui.ProvUI;
-import org.eclipse.equinox.internal.p2.ui.QueryProvider;
 import org.eclipse.equinox.internal.p2.ui.actions.RefreshAction;
 import org.eclipse.equinox.internal.p2.ui.admin.preferences.PreferenceConstants;
 import org.eclipse.equinox.internal.p2.ui.viewers.*;
-import org.eclipse.equinox.p2.engine.IProfileRegistry;
 import org.eclipse.equinox.p2.operations.ProvisioningJob;
 import org.eclipse.equinox.p2.ui.ProvisioningUI;
 import org.eclipse.jface.action.*;
@@ -44,7 +41,7 @@ abstract class ProvView extends ViewPart {
 	RefreshAction refreshAction;
 	private IPropertyChangeListener preferenceListener;
 	protected Display display;
-	private ProvisioningUI ui;
+	protected ProvisioningUI ui;
 
 	/**
 	 * The constructor.
@@ -246,13 +243,12 @@ abstract class ProvView extends ViewPart {
 	}
 
 	protected String getProfileId() {
-		return IProfileRegistry.SELF;
+		return null;
 	}
 
 	protected ProvisioningUI getProvisioningUI() {
 		if (ui == null) {
 			ui = ProvAdminUIActivator.getDefault().getProvisioningUI(getProfileId());
-			ProvUI.setQueryProvider(new QueryProvider(ui));
 		}
 		return ui;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RemoveProfilesJob.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RemoveProfilesJob.java
index b43a74c..0e6bdd9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RemoveProfilesJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RemoveProfilesJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java
index 08af6d0..7d887f2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/RepositoriesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -96,17 +96,17 @@ abstract class RepositoriesView extends ProvView {
 
 	protected void addListeners() {
 		super.addListeners();
-		listener = new StructuredViewerProvisioningListener(getClass().getName(), viewer, getListenerEventTypes()) {
+		listener = new StructuredViewerProvisioningListener(getClass().getName(), viewer, getListenerEventTypes(), ui.getOperationRunner()) {
 			protected void refreshViewer() {
 				RepositoriesView.this.refreshAll(false);
 			}
 		};
-		ProvUI.addProvisioningListener(listener);
+		ProvUI.getProvisioningEventBus(ui.getSession()).addListener(listener);
 	}
 
 	protected void removeListeners() {
 		super.removeListeners();
-		ProvUI.removeProvisioningListener(listener);
+		ProvUI.getProvisioningEventBus(ui.getSession()).removeListener(listener);
 	}
 
 	protected void fillLocalPullDown(IMenuManager manager) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddArtifactRepositoryDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddArtifactRepositoryDialog.java
index e94be5a..f92ea85 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddArtifactRepositoryDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddArtifactRepositoryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddMetadataRepositoryDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddMetadataRepositoryDialog.java
index 8281f22..be6d580 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddMetadataRepositoryDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddMetadataRepositoryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddProfileDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddProfileDialog.java
index 7d5d88c..9b454cf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddProfileDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/AddProfileDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUGroup.java
index e372987..8978226 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationGroup.java
index 7f971df..7e12cf2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationPropertyPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationPropertyPage.java
index 04a751e..f948966 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUImplementationPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUProfilePropertiesGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUProfilePropertiesGroup.java
index db4f4c6..5704e64 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUProfilePropertiesGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUProfilePropertiesGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUPropertiesGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUPropertiesGroup.java
index ac7b808..82ba933 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUPropertiesGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/IUPropertiesGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/InstalledIUPropertyPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/InstalledIUPropertyPage.java
index 7694a01..3952100 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/InstalledIUPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/InstalledIUPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfileGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfileGroup.java
index 07f5460..5292e73 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfileGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfileGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -118,9 +118,6 @@ public class ProfileGroup {
 		setEditable(description, profile == null, listener);
 
 		label = new Label(composite, SWT.NONE);
-		label.setText(ProvAdminUIMessages.ProfileGroup_Flavor);
-
-		label = new Label(composite, SWT.NONE);
 		label.setText(ProvAdminUIMessages.ProfileGroup_Environments);
 		environments = new Text(composite, SWT.BORDER);
 		environments.setLayoutData(gd);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfilePropertyPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfilePropertyPage.java
index cea15ad..b3200c7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfilePropertyPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/ProfilePropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java
index 7c28fc1..d1c7909 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/dialogs/RepositoryImplementationPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/messages.properties
index a818c8b..3ee41bc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.admin/src/org/eclipse/equinox/internal/p2/ui/admin/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2007, 2009 IBM Corporation and others.
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -59,7 +59,6 @@ ProfileGroup_SelectProfileMessage=Select an installation directory:
 ProfileGroup_SelectBundlePoolCache=Select a bundle pool directory:
 ProfileGroup_Name=&Name:
 ProfileGroup_Description=&Description:
-ProfileGroup_Flavor=&Flavor:
 ProfileGroup_NL=N&L:
 ProfileGroup_Cache=Bundle &pool location:
 ProfileGroup_InstallFolder=Install f&older:
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/build.properties
index 2aa561f..d4b87d9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/plugin.properties
index 6868258..2aec827 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryImages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryImages.java
index cb9cbd0..fefafbc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryImages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryImages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryUi.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryUi.java
index e6edb58..f1b7bea 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryUi.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/DiscoveryUi.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/Messages.java
index e8b663a..2dea0a6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/messages.properties
index ec058da..d304396 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/commands/messages.properties
@@ -1,2 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 Tasktop Technologies and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Tasktop Technologies - initial API and implementation
+###############################################################################
 ShowRepositoryCatalogCommandHandler_Location_not_valid_Error=Repository location is not a valid URI
 ShowRepositoryCatalogCommandHandler_Required_parameter_not_specified_Error=Required parameter {0} not specified.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/operations/DiscoveryInstallOperation.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/operations/DiscoveryInstallOperation.java
index 0013101..cbeb286 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/operations/DiscoveryInstallOperation.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/operations/DiscoveryInstallOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/CommonColors.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/CommonColors.java
index 65abd87..425d418 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/CommonColors.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/CommonColors.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListItem.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListItem.java
index c66e167..68917b4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListItem.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListViewer.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListViewer.java
index fc5a6ea..befaded 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListViewer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/ControlListViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/FilteredViewer.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/FilteredViewer.java
index 6b78e39..330fbe5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/FilteredViewer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/FilteredViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     Jacek Pospychala - bug 187762
  *     Mohamed Tarief - tarief at eg.ibm.com - IBM - Bug 174481
  *     Tasktop Technologies - generalized filter code for structured viewers
+ *     Benjamin Muskalla, Tasktop Technologies - bug 342164 
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.discovery.util;
 
@@ -204,6 +205,13 @@ public abstract class FilteredViewer {
 		return filterText == null ? null : filterText.getTextControl().getText();
 	}
 
+	protected void setFilterText(String newFilter) {
+		if (filterText == null) {
+			throw new IllegalStateException("Needs be invoked after controls are created"); //$NON-NLS-1$
+		}
+		filterText.getTextControl().setText(newFilter);
+	}
+
 	public Control getControl() {
 		return container;
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/GradientToolTip.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/GradientToolTip.java
index 4f97659..62a0842 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/GradientToolTip.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/GradientToolTip.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/Messages.java
index 94b3574..34a1a62 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
+ * Copyright (c) 2004, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/PatternFilter.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/PatternFilter.java
index 8c20dab..d16f57b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/PatternFilter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/PatternFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/SelectionProviderAdapter.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/SelectionProviderAdapter.java
index e77d259..65355cc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/SelectionProviderAdapter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/SelectionProviderAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/WorkbenchUtil.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/WorkbenchUtil.java
index abb2a69..e8e4027 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/WorkbenchUtil.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/WorkbenchUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 Tasktop Technologies and others.
+ * Copyright (c) 2004, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/messages.properties
index 565b48d..5242234 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/util/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogPage.java
index d1d31b3..c546f0d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogViewer.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogViewer.java
index 6f7d1b9..b096f83 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogViewer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/CatalogViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/DiscoveryWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/DiscoveryWizard.java
index 708f786..e1e9606 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/DiscoveryWizard.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/DiscoveryWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/Messages.java
index 91a02be..53ff2f9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/OverviewToolTip.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/OverviewToolTip.java
index c0c17f6..4d6b206 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/OverviewToolTip.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/OverviewToolTip.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Tasktop Technologies and others.
+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/messages.properties
index 6eb5285..e565769 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.discovery/src/org/eclipse/equinox/internal/p2/ui/discovery/wizards/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 Tasktop Technologies and others.
+# Copyright (c) 2009, 2010 Tasktop Technologies and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.log/.classpath b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.classpath
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.log/.classpath
copy to eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.classpath
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.project b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.project
new file mode 100755
index 0000000..253aaf9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.project
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.p2.importexport</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ds.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.settings/org.eclipse.jdt.core.prefs
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.p2.director/.settings/org.eclipse.jdt.core.prefs
copy to eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.settings/org.eclipse.jdt.core.prefs
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.director/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.settings/org.eclipse.jdt.ui.prefs
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.p2.director/.settings/org.eclipse.jdt.ui.prefs
copy to eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.settings/org.eclipse.jdt.ui.prefs
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.settings/org.eclipse.pde.core.prefs
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/plugins/org.eclipse.equinox.p2.metadata.generator/.settings/org.eclipse.pde.core.prefs
rename to eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/.settings/org.eclipse.pde.core.prefs
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..aca95f5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/META-INF/MANIFEST.MF
@@ -0,0 +1,39 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.equinox.p2.ui.importexport;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.equinox.p2.ui,
+ org.eclipse.equinox.p2.extensionlocation,
+ org.eclipse.equinox.p2.metadata;bundle-version="2.1.0",
+ org.eclipse.ui.forms;bundle-version="3.5.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ J2SE-1.4,
+ CDC-1.1/Foundation-1.1
+Bundle-Localization: plugin
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.equinox.internal.p2.metadata.repository.io,
+ org.eclipse.equinox.internal.p2.persistence,
+ org.eclipse.equinox.internal.p2.ui,
+ org.eclipse.equinox.internal.p2.ui.dialogs,
+ org.eclipse.equinox.internal.p2.ui.model,
+ org.eclipse.equinox.internal.p2.ui.viewers,
+ org.eclipse.equinox.internal.provisional.p2.director,
+ org.eclipse.equinox.p2.core;version="2.0.0",
+ org.eclipse.equinox.p2.engine;version="2.0.0",
+ org.eclipse.equinox.p2.engine.query;version="2.0.0",
+ org.eclipse.equinox.p2.metadata;version="2.0.0",
+ org.eclipse.equinox.p2.operations;version="2.0.0",
+ org.eclipse.equinox.p2.planner;version="2.0.0",
+ org.eclipse.equinox.p2.query;version="2.0.0",
+ org.eclipse.equinox.p2.repository;version="2.0.0",
+ org.eclipse.equinox.p2.repository.artifact;version="2.0.0",
+ org.eclipse.equinox.p2.repository.artifact.spi;version="2.0.0",
+ org.eclipse.equinox.p2.repository.metadata;version="2.0.0",
+ org.eclipse.equinox.p2.repository.metadata.spi;version="2.0.0"
+Service-Component: OSGI-INF/importexport.xml
+Export-Package: org.eclipse.equinox.internal.p2.importexport;version="1.3.0";x-friends:="org.eclipse.equinox.p2.tests",
+ org.eclipse.equinox.internal.p2.importexport.internal;x-friends:="org.eclipse.equinox.p2.tests"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/OSGI-INF/importexport.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/OSGI-INF/importexport.xml
new file mode 100755
index 0000000..e8b40f2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/OSGI-INF/importexport.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="P2 Import and Export">
+   <implementation class="org.eclipse.equinox.internal.p2.importexport.internal.ImportExportImpl"/>
+   <service>
+      <provide interface="org.eclipse.equinox.internal.p2.importexport.P2ImportExport"/>
+   </service>
+   <reference bind="bind" cardinality="1..1" interface="org.eclipse.equinox.p2.core.IProvisioningAgent" name="IProvisioningAgent" policy="static" unbind="unbind"/>
+</scr:component>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/P2 Replication.launch b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/P2 Replication.launch
new file mode 100755
index 0000000..70bf678
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/P2 Replication.launch	
@@ -0,0 +1,429 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/P2 Replication"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="generateProfile" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/runtime-New_configuration"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:MaxPermSize=256m
-Declipse.p2.profile=SDKProfile
-Declipse.p2.data.area=${target_home}/p2"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="org.eclipse.cdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.cdt.core/debug/ASTCache" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/deltaprocessor" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/formatter" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/index/locks" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/activity" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems/inclusion" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems/scanner" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems/syntax" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/statistics" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/matchlocator" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/model" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/parser" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/parser/exceptions" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/scanner" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/typeresolver" value="false"/>
+<mapEntry key="org.eclipse.cdt.debug.mi.core/debug" value="true"/>
+<mapEntry key="org.eclipse.cdt.dsf.gdb/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/disassembly" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/stepping" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/atomicUpdate" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/cache" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/delta" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/presentationId" value=""/>
+<mapEntry key="org.eclipse.cdt.dsf/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/executor" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/executorName" value=""/>
+<mapEntry key="org.eclipse.cdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.cdt.ui/debug/SemanticHighlighting" value="false"/>
+<mapEntry key="org.eclipse.cdt.ui/debug/contentassist" value="false"/>
+<mapEntry key="org.eclipse.cdt.ui/debug/folding" value="false"/>
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/debug/TypeExtensionManager" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/breadcrumb" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/presentationId" value=""/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/stateSaveRestore" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.equinox.ds/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.ds/instantiate_all" value="false"/>
+<mapEntry key="org.eclipse.equinox.ds/performance" value="true"/>
+<mapEntry key="org.eclipse.equinox.ds/print_on_console" value="true"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/engine/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/enginesession/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/profileregistry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.equinox.security.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.security.ui/debug/storage" value="false"/>
+<mapEntry key="org.eclipse.equinox.security/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.security/debug/loginFramework" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.help/debug/search" value="false"/>
+<mapEntry key="org.eclipse.help/debug/toc" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/compilationEnv" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFileMaps" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFiles" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.pluggable.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder/stats" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/failure" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/formatter" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/BreadcrumbItemDropDown" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.jem.util/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.jface.text/assert/TextSelection/validConstructorArguments" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AbstractInformationControlManager" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/uses" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/debug" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.ssh/ssh_protocol" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/markers" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/debug/toolbar" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/dnd" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/setup" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/sort" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/viewermap" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebugglobal" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug" value="true"/>
+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/command" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/data" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/emitter" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/error" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/info" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/warning" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_ant" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_framework" value="true"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/actionSorting" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/activation" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/delegate/calls" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/events/project" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/events/project/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.wst.dtd.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time/criteria" value="10"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/leaks" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/modelmanagement" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/format" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structureddocument" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/locks" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/modelmanager" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/state" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/detection" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/job" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/overalltime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/preferences" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/registry" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/actioncontributor/debugstatusfields" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/contentOutline" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling/showProblems" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerValidators" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerjob" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/contributetime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugmenu" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugpopup" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugtoolbar" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/readtime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/lifecyclelistener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/modelstatelistener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/gotoNextAnnotation" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/preferences-properties" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertyChangeUpdateActionContributionItem" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertySheet" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/elementstatelistener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/structuredPresentationReconciler" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/structuredPresentationReconciler/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/transferbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.wst.validation/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.validation/extraValDetail" value=""/>
+<mapEntry key="org.eclipse.wst.validation/filter/allExcept" value=""/>
+<mapEntry key="org.eclipse.wst.validation/timings" value="false"/>
+<mapEntry key="org.eclipse.wst.validation/timings/tracefile" value=""/>
+<mapEntry key="org.eclipse.wst.validation/timings/useDoubles" value="false"/>
+<mapEntry key="org.eclipse.wst.validation/trace/level" value=""/>
+<mapEntry key="org.eclipse.wst.validation/v1" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentcache" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentmanager" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wst.xml.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtracefile" value="false"/>
+</mapAttribute>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.compare.core/about.html b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/about.html
similarity index 100%
copy from eclipse/plugins/org.eclipse.compare.core/about.html
copy to eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/build.properties
new file mode 100755
index 0000000..d4ba3a8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               icons/,\
+               about.html,\
+               OSGI-INF/
+source.. = src/
+javacTarget = jsr14
+src.includes = about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/icons/wizban/install_wiz.gif b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/icons/install_wiz.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.p2.ui/icons/wizban/install_wiz.gif
copy to eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/icons/install_wiz.gif
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/plugin.properties
new file mode 100755
index 0000000..c45c420
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/plugin.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sonatype - initial API and implementation
+###############################################################################
+pluginName=Equinox Provisioning Import and Export
+providerName=Eclipse.org - Equinox
+category.name=Install
+export.name=Installed Software Items to File
+import.name=Install Software Items from File
+importfrominstallation.name=From Existing Installation
+export.description=Export the list of your installed software to the local file system.
+import.description=Install a set of software from a description file.
+importfrominstance.description=Install software from another product.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/plugin.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/plugin.xml
new file mode 100755
index 0000000..7b9ace0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/plugin.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.ui.exportWizards">
+      <category
+            id="org.eclipse.equinox.p2.category"
+            name="%category.name">
+      </category>
+      <wizard
+            category="org.eclipse.equinox.p2.category"
+            class="org.eclipse.equinox.internal.p2.importexport.internal.wizard.ExportWizard"
+            icon="icons/install_wiz.gif"
+            id="org.eclipse.equinox.p2.replication.export"
+            name="%export.name">
+            <description>
+            	%export.description
+            </description>
+      </wizard>
+   </extension>
+   <extension
+         point="org.eclipse.ui.importWizards">
+      <category
+            id="org.eclipse.equinox.p2.category"
+            name="%category.name">
+      </category>
+      <wizard
+            category="org.eclipse.equinox.p2.category"
+            class="org.eclipse.equinox.internal.p2.importexport.internal.wizard.ImportWizard"
+            icon="icons/install_wiz.gif"
+            id="org.eclipse.equinox.p2.replication.import"
+            name="%import.name">
+            <description>
+            	%import.description
+            </description>            
+      </wizard>
+      <wizard
+            category="org.eclipse.equinox.p2.category"
+            class="org.eclipse.equinox.internal.p2.importexport.internal.wizard.ImportFromInstallationWizard"
+            icon="icons/install_wiz.gif"
+            id="org.eclipse.equinox.p2.replication.importfrominstallation"
+            name="%importfrominstallation.name">
+         <description>
+            %importfrominstance.description
+         </description>
+      </wizard>
+   </extension>
+
+</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/pom.xml
new file mode 100644
index 0000000..fa53b1e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
+    <groupId>org.eclipse</groupId>
+    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+  </parent>
+  <groupId>org.eclipse</groupId>
+  <artifactId>org.eclipse.equinox.p2.ui.importexport</artifactId>
+  <version>1.0.0.qualifier</version>
+  <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/IUDetail.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/IUDetail.java
new file mode 100644
index 0000000..18f3735
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/IUDetail.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport;
+
+import java.net.URI;
+import java.util.List;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+
+public class IUDetail implements IAdaptable{
+
+	private final IInstallableUnit iu;
+	private final List<URI> referredRepo;
+
+	public IUDetail(IInstallableUnit iu, List<URI> uris) {
+		this.iu = iu;
+		referredRepo = uris;
+	}
+
+	public IInstallableUnit getIU() {
+		return iu;
+	}
+
+	public List<URI> getReferencedRepositories() {
+		return referredRepo;
+	}
+
+	public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
+		if (IInstallableUnit.class.equals(adapter))
+			return iu;
+		return null;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj instanceof IUDetail) {
+			if (iu.equals(((IUDetail)obj).getIU()))
+				return true;
+		}
+		return false;
+	}
+
+	@Override
+	public int hashCode() {
+		return iu.hashCode();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/P2ImportExport.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/P2ImportExport.java
new file mode 100755
index 0000000..1c19bb4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/P2ImportExport.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport;
+
+import java.io.*;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+
+public interface P2ImportExport {
+	/**
+	 * 
+	 * @param input
+	 * @return iu listed in the file
+	 * @throws IOException
+	 * @throws VersionIncompatibleException if the given file version is not supported
+	 */
+	List<IUDetail> importP2F(InputStream input) throws IOException;
+
+	IStatus exportP2F(OutputStream output, IInstallableUnit[] ius, IProgressMonitor monitor);
+
+	IStatus exportP2F(OutputStream output, List<IUDetail> ius, IProgressMonitor monitor);
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/VersionIncompatibleException.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/VersionIncompatibleException.java
new file mode 100644
index 0000000..4a5493b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/VersionIncompatibleException.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport;
+
+public class VersionIncompatibleException extends RuntimeException {
+
+	public VersionIncompatibleException(String message) {
+		super(message);
+	}
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -7584242899366859010L;
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/Constants.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/Constants.java
new file mode 100755
index 0000000..558afa1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/Constants.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal;
+
+public interface Constants {
+	public final static String Bundle_ID = "org.eclipse.equinox.p2.ui.importexport"; //$NON-NLS-1$
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/ImportExportImpl.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/ImportExportImpl.java
new file mode 100755
index 0000000..accbfa7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/ImportExportImpl.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal;
+
+import java.io.*;
+import java.net.URI;
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.importexport.IUDetail;
+import org.eclipse.equinox.internal.p2.importexport.P2ImportExport;
+import org.eclipse.equinox.internal.p2.importexport.persistence.*;
+import org.eclipse.equinox.internal.p2.persistence.XMLWriter.ProcessingInstruction;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.VersionRange;
+import org.eclipse.equinox.p2.query.IQueryResult;
+import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.equinox.p2.repository.IRepositoryManager;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
+import org.eclipse.osgi.util.NLS;
+
+public class ImportExportImpl implements P2ImportExport {
+
+	private static final String SCHEME_FILE = "file"; //$NON-NLS-1$
+	public static final int IGNORE_LOCAL_REPOSITORY = 1;
+	public static final int CANNOT_FIND_REPOSITORY = 2;
+
+	private IProvisioningAgent agent = null;
+
+	public void bind(IProvisioningAgent agt) {
+		this.agent = agt;
+	}
+
+	public void unbind(IProvisioningAgent agt) {
+		if (this.agent == agt) {
+			this.agent = null;
+		}
+	}
+
+	public List<IUDetail> importP2F(InputStream input) throws IOException {
+		P2FParser parser = new P2FParser(Platform.getBundle(Constants.Bundle_ID).getBundleContext(), Constants.Bundle_ID);
+		parser.parse(input);
+		return parser.getIUs();
+	}
+
+	public IStatus exportP2F(OutputStream output, IInstallableUnit[] ius, IProgressMonitor monitor) {
+		if (monitor == null)
+			monitor = new NullProgressMonitor();
+		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.Replicator_ExportJobName, 1000);
+		IMetadataRepositoryManager repoManager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
+		URI[] uris = repoManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
+		Arrays.sort(uris, new Comparator<URI>() {
+			public int compare(URI o1, URI o2) {
+				String scheme1 = o1.getScheme();
+				String scheme2 = o2.getScheme();
+				if (scheme1.equals(scheme2))
+					return 0;
+				if (SCHEME_FILE.equals(scheme1)) {
+					return 1;
+				} else if (SCHEME_FILE.equals(scheme2)) {
+					return -1;
+				}
+				return 0;
+			}
+		});
+		List<IMetadataRepository> repos = new ArrayList<IMetadataRepository>(uris.length);
+		for (URI uri : uris) {
+			try {
+				IMetadataRepository repo = repoManager.loadRepository(uri, subMonitor.newChild(500 / uris.length, SubMonitor.SUPPRESS_ALL_LABELS));
+				repos.add(repo);
+			} catch (ProvisionException e) {
+				// ignore
+			}
+		}
+		subMonitor.setWorkRemaining(500);
+		List<IUDetail> features = new ArrayList<IUDetail>(ius.length);
+		SubMonitor sub2 = subMonitor.newChild(450, SubMonitor.SUPPRESS_ALL_LABELS);
+		sub2.setWorkRemaining(ius.length * 100);
+		MultiStatus queryRepoResult = new MultiStatus(Constants.Bundle_ID, 0, null, null);
+		for (IInstallableUnit iu : ius) {
+			List<URI> referredRepos = new ArrayList<URI>(1);
+			if (sub2.isCanceled())
+				throw new OperationCanceledException();
+			SubMonitor sub3 = sub2.newChild(100);
+			sub3.setWorkRemaining(repos.size() * 100);
+			for (IMetadataRepository repo : repos) {
+				if (SCHEME_FILE.equals(repo.getLocation().getScheme()) && referredRepos.size() > 0)
+					break;
+				IQueryResult<IInstallableUnit> result = repo.query(QueryUtil.createIUQuery(iu.getId(), new VersionRange(iu.getVersion(), true, null, true)), sub3.newChild(100));
+				if (!result.isEmpty())
+					referredRepos.add(repo.getLocation());
+			}
+			sub3.setWorkRemaining(1).worked(1);
+			if (referredRepos.size() == 0) {
+				queryRepoResult.add(new Status(IStatus.WARNING, Constants.Bundle_ID, CANNOT_FIND_REPOSITORY, NLS.bind(Messages.Replicator_NotFoundInRepository, iu.getProperty(IInstallableUnit.PROP_NAME, Locale.getDefault().toString())), null));
+			} else {
+				if (SCHEME_FILE.equals(referredRepos.get(0).getScheme()))
+					queryRepoResult.add(new Status(IStatus.INFO, Constants.Bundle_ID, IGNORE_LOCAL_REPOSITORY, NLS.bind(Messages.Replicator_InstallFromLocal, iu.getProperty(IInstallableUnit.PROP_NAME, Locale.getDefault().toString())), null));
+				else {
+					IUDetail feature = new IUDetail(iu, referredRepos);
+					features.add(feature);
+				}
+			}
+		}
+		subMonitor.setWorkRemaining(50);
+		IStatus status = exportP2F(output, features, subMonitor);
+		if (status.isOK() && queryRepoResult.isOK())
+			return status;
+		MultiStatus rt = new MultiStatus(Constants.Bundle_ID, 0, new IStatus[] {queryRepoResult, status}, null, null);
+		return rt;
+	}
+
+	public IStatus exportP2F(OutputStream output, List<IUDetail> features, IProgressMonitor monitor) {
+		if (monitor == null)
+			monitor = new NullProgressMonitor();
+		SubMonitor sub = SubMonitor.convert(monitor, Messages.Replicator_SaveJobName, 100);
+		if (sub.isCanceled())
+			throw new OperationCanceledException();
+		try {
+			P2FWriter writer = new P2FWriter(output, new ProcessingInstruction[] {ProcessingInstruction.makeTargetVersionInstruction(P2FConstants.P2F_ELEMENT, P2FConstants.CURRENT_VERSION)});
+			writer.write(features);
+			return Status.OK_STATUS;
+		} catch (UnsupportedEncodingException e) {
+			return new Status(IStatus.ERROR, Constants.Bundle_ID, e.getMessage(), e);
+		} finally {
+			sub.worked(100);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/Messages.java
new file mode 100755
index 0000000..b09a6c5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/Messages.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	public static String Column_Id;
+	public static String Column_Name;
+	public static String Column_Version;
+	public static String ExportPage_Title;
+	public static String ExportPage_TryAgainQuestion;
+	public static String ExportPage_Description;
+	public static String ExportPage_Label;
+	public static String ExportPage_DEST_ERRORMESSAGE;
+	public static String ExportPage_ERROR_CONFIG;
+	public static String ExportPage_Fail;
+	public static String ExportPage_FILEDIALOG_TITLE;
+	public static String ExportPage_FixSuggestion;
+	public static String EXTENSION_ALL;
+	public static String EXTENSION_ALL_NAME;
+	public static String EXTENSION_p2F_NAME;
+	public static String EXTENSION_p2F;
+	public static String ExportPage_LABEL_EXPORTFILE;
+	public static String ExportPage_SuccessWithProblems;
+	public static String ExportWizard_ConfirmDialogTitle;
+	public static String ExportWizard_OverwriteConfirm;
+	public static String ExportWizard_WizardTitle;
+	public static String ImportPage_DESCRIPTION;
+	public static String ImportPage_DEST_ERROR;
+	public static String ImportPage_DESTINATION_LABEL;
+	public static String ImportPage_FILEDIALOG_TITLE;
+	public static String ImportPage_FILENOTFOUND;
+	public static String AbstractImportPage_HigherVersionInstalled;
+	public static String ImportPage_InstallLatestVersion;
+	public static String ImportPage_QueryFeaturesJob;
+	public static String AbstractImportPage_SameVersionInstalled;
+	public static String AbstractPage_ButtonDeselectAll;
+	public static String AbstractPage_ButtonSelectAll;
+	public static String ImportPage_TITLE;
+	public static String ImportWizard_WINDOWTITLE;
+	public static String Page_BUTTON_BROWSER;
+	public static String PAGE_NOINSTALLTION_ERROR;
+	public static String ImportFromInstallationPage_DESTINATION_LABEL;
+	public static String ImportFromInstallationPage_DIALOG_TITLE;
+	public static String ImportFromInstallationPage_INVALID_DESTINATION;
+	public static String ImportFromInstallationPage_DIALOG_DESCRIPTION;
+	public static String ImportFromInstallationPage_SELECT_COMPONENT;
+
+	public static String io_IncompatibleVersion;
+	public static String io_parseError;
+	public static String Replicator_ExportJobName;
+	public static String Replicator_InstallFromLocal;
+	public static String Replicator_NotFoundInRepository;
+	public static String Replicator_SaveJobName;
+
+	static {
+		NLS.initializeMessages("org.eclipse.equinox.internal.p2.importexport.internal.messages", Messages.class); //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/messages.properties
new file mode 100755
index 0000000..4d27fc9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/messages.properties
@@ -0,0 +1,59 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     Sonatype - initial API and implementation
+###############################################################################
+Column_Id=Id
+Column_Name=Name
+Column_Version=Version
+ExportPage_Title=Export Software Configuration
+ExportPage_TryAgainQuestion=<p>Do you want to try again?</p></form>
+ExportPage_Description=Export a list of installed software and their repositories to the local file system.
+ExportPage_Label=Select the software items to export:
+EXTENSION_ALL=*.*
+EXTENSION_ALL_NAME=All files (*.*)
+EXTENSION_p2F=*.p2f
+EXTENSION_p2F_NAME=Description files (*.p2f)
+Page_BUTTON_BROWSER=B&rowse...
+ExportPage_DEST_ERRORMESSAGE=Description file is not set, or is not a normal file.
+ExportPage_ERROR_CONFIG=Your application is not properly configured.
+ExportPage_Fail=<form><p>Selected installed software failed to be export. See problems below:<br/></p>
+ExportPage_FILEDIALOG_TITLE=Export to File
+ExportPage_FixSuggestion=<p>Try to enable the software sites in the <a href="pref://org.eclipse.equinox.internal.p2.ui.sdk.SitesPreferencePage">preference page</a>.</p>
+ExportPage_LABEL_EXPORTFILE=To d&escription file:
+ExportPage_SuccessWithProblems=<form><p>The export partially succeeded. The following elements failed to be exported:<br/></p>
+ExportWizard_ConfirmDialogTitle=Question
+ExportWizard_OverwriteConfirm=The file {0} already exists, do you want to overwrite it?
+ExportWizard_WizardTitle=Export
+PAGE_NOINSTALLTION_ERROR=Select at least one available element to be installed.
+ImportPage_DESCRIPTION=Install the software mentioned in the description file.
+ImportPage_DEST_ERROR=Specified file doesn't exist or can't be read.
+ImportPage_DESTINATION_LABEL=From &description file:
+ImportPage_FILEDIALOG_TITLE=Import from Description File
+ImportPage_FILENOTFOUND=The specified file doesn't exist.
+AbstractImportPage_HigherVersionInstalled={0} (Disabled because a higher version is already installed)
+ImportPage_InstallLatestVersion=Install &latest version of selected software.
+ImportPage_QueryFeaturesJob=Query selected software...
+AbstractImportPage_SameVersionInstalled={0} (Disabled due to it has been already installed)
+AbstractPage_ButtonDeselectAll=&Deselect All
+AbstractPage_ButtonSelectAll=&Select All
+ImportPage_TITLE=Import Software Configuration
+ImportWizard_WINDOWTITLE=Import
+ImportFromInstallationPage_DESTINATION_LABEL=From &application installation:
+ImportFromInstallationPage_DIALOG_TITLE=Import from Application
+ImportFromInstallationPage_DIALOG_DESCRIPTION=Import software items from the existing application installation.
+ImportFromInstallationPage_INVALID_DESTINATION=Specify the path to a valid application installation.
+ImportFromInstallationPage_SELECT_COMPONENT=Select at least one available element to be installed.
+io_IncompatibleVersion=\
+This file is incompatible with this version of the application. Version {0}; expected {1}.
+io_parseError=\
+Error parsing description file
+Replicator_ExportJobName=Exporting selected software...
+Replicator_InstallFromLocal=Aborted exporting software \"{0}\" because it can not be found in remote repositories.
+Replicator_NotFoundInRepository=No enabled repository can find \"{0}\" or that repository cannot be loaded due to network issues.
+Replicator_SaveJobName=Exporting selected software to file...
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractImportPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractImportPage.java
new file mode 100644
index 0000000..8c15840
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractImportPage.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.VersionRange;
+import org.eclipse.equinox.p2.query.IQueryResult;
+import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+import org.eclipse.jface.viewers.ICheckStateProvider;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.*;
+
+public abstract class AbstractImportPage extends AbstractPage {
+
+	IProfile profile = null;
+	private final ProvisioningOperationWizard wizard;
+	private final ProvisioningUI ui;
+
+	public AbstractImportPage(String pageName, ProvisioningUI ui, ProvisioningOperationWizard wizard) {
+		super(pageName);
+		this.wizard = wizard;
+		this.ui = ui;
+		profile = getSelfProfile();
+	}
+
+	protected ProvisioningOperationWizard getProvisioningWizard() {
+		return wizard;
+	}
+
+	protected ProvisioningUI getProvisioningUI() {
+		return ui;
+	}
+
+	@Override
+	protected void createInstallationTable(Composite parent) {
+		super.createInstallationTable(parent);
+		viewer.getTable().addListener(SWT.Selection, new Listener() {
+
+			public void handleEvent(Event event) {
+				if (event.detail == SWT.CHECK) {
+					if (hasInstalled(ProvUI.getAdapter(event.item.getData(), IInstallableUnit.class))) {
+						viewer.getTable().setRedraw(false);
+						((TableItem) event.item).setChecked(false);
+						viewer.getTable().setRedraw(true);
+					}
+				}
+				updatePageCompletion();
+			}
+		});
+	}
+
+	public boolean hasInstalled(IInstallableUnit iu) {
+		IQueryResult<IInstallableUnit> results = profile.query(QueryUtil.createIUQuery(iu.getId(), new VersionRange(iu.getVersion(), true, null, false)), null);
+		return !results.isEmpty();
+	}
+
+	public String getIUNameWithDetail(IInstallableUnit iu) {
+		IQueryResult<IInstallableUnit> results = profile.query(QueryUtil.createIUQuery(iu.getId(), new VersionRange(iu.getVersion(), true, null, false)), null);
+		final String text = iu.getProperty(IProfile.PROP_NAME, null);
+		if (!results.isEmpty()) {
+			boolean hasHigherVersion = false;
+			boolean hasEqualVersion = false;
+			for (IInstallableUnit installedIU : results.toSet()) {
+				int compareValue = installedIU.getVersion().compareTo(iu.getVersion());
+				if (compareValue > 0) {
+					hasHigherVersion = true;
+					break;
+				} else if (compareValue == 0)
+					hasEqualVersion = true;
+			}
+			if (hasHigherVersion)
+				return NLS.bind(Messages.AbstractImportPage_HigherVersionInstalled, text);
+			else if (hasEqualVersion)
+				return NLS.bind(Messages.AbstractImportPage_SameVersionInstalled, text);
+		}
+		return text;
+	}
+
+	@Override
+	protected ICheckStateProvider getViewerDefaultState() {
+		return new ICheckStateProvider() {
+
+			public boolean isGrayed(Object element) {
+				return false;
+			}
+
+			public boolean isChecked(Object element) {
+				if (profile != null) {
+					IInstallableUnit iu = ProvUI.getAdapter(element, IInstallableUnit.class);
+					IQueryResult<IInstallableUnit> collector = profile.query(QueryUtil.createIUQuery(iu.getId(), new VersionRange(iu.getVersion(), true, null, false)), new NullProgressMonitor());
+					if (collector.isEmpty()) {
+						return true;
+					}
+				}
+				return false;
+			}
+		};
+	}
+
+	@Override
+	protected void doFinish() throws Exception {
+		// do nothing
+	}
+
+	@Override
+	public boolean canFlipToNextPage() {
+		return isPageComplete();
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractPage.java
new file mode 100644
index 0000000..218a6c5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractPage.java
@@ -0,0 +1,486 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *     IBM Corporation - Ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.io.File;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.internal.p2.importexport.P2ImportExport;
+import org.eclipse.equinox.internal.p2.importexport.internal.Constants;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ILayoutConstants;
+import org.eclipse.equinox.internal.p2.ui.viewers.*;
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.engine.IProfileRegistry;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
+
+public abstract class AbstractPage extends WizardPage implements Listener {
+
+	protected String currentMessage;
+	protected Button destinationBrowseButton;
+	protected Combo destinationNameField;
+	protected P2ImportExport importexportService = null;
+	protected CheckboxTableViewer viewer = null;
+	protected Exception finishException;
+	protected static IProfileRegistry profileRegistry = null;
+	protected static IProvisioningAgent agent = null;
+
+	class TableViewerComparator extends ViewerComparator {
+		private int sortColumn = 0;
+		private int lastSortColumn = 0;
+		private boolean ascending = false;
+		private boolean lastAscending = false;
+
+		@Override
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			IInstallableUnit iu1 = ProvUI.getAdapter(e1, IInstallableUnit.class);
+			IInstallableUnit iu2 = ProvUI.getAdapter(e2, IInstallableUnit.class);
+			if (iu1 != null && iu2 != null) {
+				if (viewer instanceof TableViewer) {
+					TableViewer tableViewer = (TableViewer) viewer;
+					IBaseLabelProvider baseLabel = tableViewer.getLabelProvider();
+					if (baseLabel instanceof ITableLabelProvider) {
+						ITableLabelProvider tableProvider = (ITableLabelProvider) baseLabel;
+						String e1p = tableProvider.getColumnText(e1, getSortColumn());
+						String e2p = tableProvider.getColumnText(e2, getSortColumn());
+						@SuppressWarnings("unchecked")
+						int result = getComparator().compare(e1p, e2p);
+						// Secondary column sort
+						if (result == 0) {
+							e1p = tableProvider.getColumnText(e1, lastSortColumn);
+							e2p = tableProvider.getColumnText(e2, lastSortColumn);
+							@SuppressWarnings("unchecked")
+							int result2 = getComparator().compare(e1p, e2p);
+							return lastAscending ? result2 : (-1) * result2;
+						}
+						return isAscending() ? result : (-1) * result;
+					}
+				}
+				// we couldn't determine a secondary sort, call it equal
+				return 0;
+			}
+			return super.compare(viewer, e1, e2);
+		}
+
+		/**
+		 * @return Returns the sortColumn.
+		 */
+		public int getSortColumn() {
+			return sortColumn;
+		}
+
+		/**
+		 * @param sortColumn
+		 *            The sortColumn to set.
+		 */
+		public void setSortColumn(int sortColumn) {
+			if (this.sortColumn != sortColumn) {
+				lastSortColumn = this.sortColumn;
+				lastAscending = this.ascending;
+				this.sortColumn = sortColumn;
+			}
+		}
+
+		/**
+		 * @return Returns the ascending.
+		 */
+		public boolean isAscending() {
+			return ascending;
+		}
+
+		/**
+		 * @param ascending
+		 *            The ascending to set.
+		 */
+		public void setAscending(boolean ascending) {
+			this.ascending = ascending;
+		}
+	}
+
+	static {
+		BundleContext context = Platform.getBundle(Constants.Bundle_ID).getBundleContext();
+		ServiceTracker<IProvisioningAgent, IProvisioningAgent> tracker = new ServiceTracker<IProvisioningAgent, IProvisioningAgent>(context, IProvisioningAgent.class, null);
+		tracker.open();
+		agent = tracker.getService();
+		tracker.close();
+		if (agent != null)
+			profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
+	}
+
+	public AbstractPage(String pageName) {
+		super(pageName);
+	}
+
+	public AbstractPage(String pageName, String title, ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+
+	protected IProfile getSelfProfile() {
+		if (profileRegistry != null) {
+			String selfID = System.getProperty("eclipse.p2.profile"); //$NON-NLS-1$
+			if (selfID == null)
+				selfID = IProfileRegistry.SELF;
+			return profileRegistry.getProfile(selfID);
+		}
+		return null;
+	}
+
+	private void createColumns(TableViewer viewer) {
+		String[] titles = {Messages.Column_Name, Messages.Column_Version, Messages.Column_Id};
+		for (int i = 0; i < titles.length; i++) {
+			TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
+			column.getColumn().setText(titles[i]);
+			column.getColumn().setResizable(true);
+			column.getColumn().setMoveable(true);
+			if (Messages.Column_Name.equals(titles[i]))
+				updateTableSorting(i);
+			final int columnIndex = i;
+			column.getColumn().addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					updateTableSorting(columnIndex);
+				}
+			});
+		}
+	}
+
+	protected void updateTableSorting(int columnIndex) {
+		TableViewerComparator comparator = (TableViewerComparator) viewer.getComparator();
+		// toggle direction if it's the same column
+		if (columnIndex == comparator.getSortColumn()) {
+			comparator.setAscending(!comparator.isAscending());
+		}
+		comparator.setSortColumn(columnIndex);
+		viewer.getTable().setSortColumn(viewer.getTable().getColumn(columnIndex));
+		viewer.getTable().setSortDirection(comparator.isAscending() ? SWT.UP : SWT.DOWN);
+		viewer.refresh(false);
+	}
+
+	protected abstract void createContents(Composite composite);
+
+	public void createControl(Composite parent) {
+		initializeDialogUnits(parent);
+		initializeService();
+		Composite composite = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout(1, true);
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 5;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+
+		createContents(composite);
+
+		// can not finish initially, but don't want to start with an error
+		// message either
+		if (!(validDestination() && validateOptionsGroup())) {
+			setPageComplete(false);
+		}
+
+		setControl(composite);
+		giveFocusToDestination();
+		Dialog.applyDialogFont(composite);
+	}
+
+	protected void createDestinationGroup(Composite parent) {
+		Composite composite = new Composite(parent, SWT.BORDER);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
+
+		Label label = new Label(composite, SWT.NONE);
+		label.setText(getDestinationLabel());
+
+		destinationNameField = new Combo(composite, SWT.SINGLE | SWT.BORDER);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
+		destinationNameField.setLayoutData(data);
+		destinationNameField.addListener(SWT.Modify, this);
+		destinationNameField.addListener(SWT.Selection, this);
+		destinationNameField.addListener(SWT.FocusIn, new Listener() {
+
+			public void handleEvent(Event event) {
+				destinationNameField.clearSelection();
+			}
+		});
+		destinationBrowseButton = new Button(composite, SWT.PUSH);
+		destinationBrowseButton.setText(Messages.Page_BUTTON_BROWSER);
+		destinationBrowseButton.addListener(SWT.Selection, this);
+		destinationBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+	}
+
+	protected IUColumnConfig[] getColumnConfig() {
+		return new IUColumnConfig[] {new IUColumnConfig(ProvUIMessages.ProvUI_NameColumnTitle, IUColumnConfig.COLUMN_NAME, ILayoutConstants.DEFAULT_PRIMARY_COLUMN_WIDTH), new IUColumnConfig(ProvUIMessages.ProvUI_VersionColumnTitle, IUColumnConfig.COLUMN_VERSION, ILayoutConstants.DEFAULT_SMALL_COLUMN_WIDTH), new IUColumnConfig(ProvUIMessages.ProvUI_IdColumnTitle, IUColumnConfig.COLUMN_ID, ILayoutConstants.DEFAULT_COLUMN_WIDTH)};
+	}
+
+	protected void createInstallationTable(final Composite parent) {
+		Group group = new Group(parent, SWT.NONE);
+		GridData griddata = new GridData(GridData.FILL, GridData.FILL, true, true);
+		griddata.verticalSpan = griddata.horizontalSpan = 0;
+		group.setLayoutData(griddata);
+		group.setLayout(new GridLayout(1, false));
+		viewer = CheckboxTableViewer.newCheckList(group, SWT.MULTI | SWT.BORDER);
+		final Table table = viewer.getTable();
+		table.setHeaderVisible(true);
+		table.setLinesVisible(false);
+		viewer.setComparator(new TableViewerComparator());
+		createColumns(viewer);
+		viewer.setContentProvider(getContentProvider());
+		viewer.setLabelProvider(getLabelProvider());
+		parent.addControlListener(new ControlAdapter() {
+			private final int[] columnRate = new int[] {6, 2, 2};
+
+			@Override
+			public void controlResized(ControlEvent e) {
+				Rectangle area = parent.getClientArea();
+				Point size = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+				ScrollBar vBar = table.getVerticalBar();
+				int width = area.width - table.computeTrim(0, 0, 0, 0).width - vBar.getSize().x;
+				if (size.y > area.height + table.getHeaderHeight()) {
+					// Subtract the scrollbar width from the total column width
+					// if a vertical scrollbar will be required
+					Point vBarSize = vBar.getSize();
+					width -= vBarSize.x;
+				}
+				Point oldSize = table.getSize();
+				TableColumn[] columns = table.getColumns();
+				int hasUsed = 0, i = 0;
+				if (oldSize.x > area.width) {
+					// table is getting smaller so make the columns 
+					// smaller first and then resize the table to
+					// match the client area width
+					for (; i < columns.length - 1; i++) {
+						columns[i].setWidth(width * columnRate[i] / 10);
+						hasUsed += columns[i].getWidth();
+					}
+					columns[columns.length - 1].setWidth(width - hasUsed);
+					table.setSize(area.width, area.height);
+				} else {
+					// table is getting bigger so make the table 
+					// bigger first and then make the columns wider
+					// to match the client area width
+					table.setSize(area.width, area.height);
+					for (; i < columns.length - 1; i++) {
+						columns[i].setWidth(width * columnRate[i] / 10);
+						hasUsed += columns[i].getWidth();
+					}
+					columns[columns.length - 1].setWidth(width - hasUsed);
+				}
+			}
+		});
+		ICheckStateProvider provider = getViewerDefaultState();
+		if (provider != null)
+			viewer.setCheckStateProvider(provider);
+		else
+			viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				public void selectionChanged(SelectionChangedEvent event) {
+					updatePageCompletion();
+				}
+			});
+		viewer.getControl().setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
+		viewer.getControl().setSize(300, 200);
+		viewer.setInput(getInput());
+		Composite buttons = new Composite(group, SWT.NONE);
+		buttons.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
+		buttons.setLayout(new RowLayout(SWT.HORIZONTAL));
+		Button selectAll = new Button(buttons, SWT.PUSH);
+		selectAll.setText(Messages.AbstractPage_ButtonSelectAll);
+		selectAll.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				for (TableItem item : viewer.getTable().getItems()) {
+					if (!item.getChecked()) {
+						item.setChecked(true);
+						Event event = new Event();
+						event.widget = item.getParent();
+						event.detail = SWT.CHECK;
+						event.item = item;
+						event.type = SWT.Selection;
+						viewer.getTable().notifyListeners(SWT.Selection, event);
+					}
+				}
+				updatePageCompletion();
+			}
+		});
+		Button deselectAll = new Button(buttons, SWT.PUSH);
+		deselectAll.setText(Messages.AbstractPage_ButtonDeselectAll);
+		deselectAll.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				viewer.setAllChecked(false);
+				updatePageCompletion();
+			}
+		});
+	}
+
+	protected ICheckStateProvider getViewerDefaultState() {
+		return null;
+	}
+
+	protected ITableLabelProvider getLabelProvider() {
+		return new IUDetailsLabelProvider(null, getColumnConfig(), null);
+	}
+
+	protected IContentProvider getContentProvider() {
+		return new DeferredQueryContentProvider();
+	}
+
+	protected boolean determinePageCompletion() {
+		currentMessage = null;
+		// validate groups in order of priority so error message is the most important one
+		boolean complete = validateDestinationGroup() && validateOptionsGroup();
+
+		// Avoid draw flicker by not clearing the error
+		// message unless all is valid.
+		if (complete) {
+			setErrorMessage(null);
+		} else {
+			setErrorMessage(currentMessage);
+		}
+
+		return complete;
+	}
+
+	protected abstract void doFinish() throws Exception;
+
+	protected int getBrowseDialogStyle() {
+		return SWT.OPEN;
+	}
+
+	/**
+	 * returns the destination label
+	 * @return non null string
+	 */
+	protected abstract String getDestinationLabel();
+
+	/**
+	 * Answer the contents of self's destination specification widget
+	 * 
+	 * @return java.lang.String
+	 */
+	protected String getDestinationValue() {
+		return destinationNameField.getText().trim();
+	}
+
+	/**
+	 * return the title of dialog
+	 * @return non null string
+	 */
+	protected abstract String getDialogTitle();
+
+	protected abstract Object getInput();
+
+	protected abstract String getInvalidDestinationMessage();
+
+	protected String getNoOptionsMessage() {
+		return Messages.PAGE_NOINSTALLTION_ERROR;
+	}
+
+	protected abstract void giveFocusToDestination();
+
+	/**
+	 * Open an appropriate destination browser so that the user can specify a
+	 * source to import from
+	 */
+	protected void handleDestinationBrowseButtonPressed() {
+		FileDialog dialog = new FileDialog(getContainer().getShell(), getBrowseDialogStyle() | SWT.SHEET);
+		dialog.setText(getDialogTitle());
+		dialog.setFilterPath(getDestinationValue());
+		dialog.setFilterExtensions(new String[] {Messages.EXTENSION_p2F, Messages.EXTENSION_ALL});
+		dialog.setFilterNames(new String[] {Messages.EXTENSION_p2F_NAME, Messages.EXTENSION_ALL_NAME});
+		String selectedFileName = dialog.open();
+
+		if (selectedFileName != null) {
+			if (!selectedFileName.endsWith(Messages.EXTENSION_p2F.substring(1)))
+				selectedFileName += Messages.EXTENSION_p2F.substring(1);
+			setDestinationValue(selectedFileName);
+		}
+	}
+
+	public void handleEvent(Event event) {
+		Widget source = event.widget;
+
+		if (source == destinationBrowseButton) {
+			handleDestinationBrowseButtonPressed();
+		} else
+			handleDestinationChanged(getDestinationValue());
+		updatePageCompletion();
+	}
+
+	protected void handleDestinationChanged(String newDestination) {
+		// do nothing
+	}
+
+	protected void initializeService() {
+		ServiceTracker<P2ImportExport, P2ImportExport> tracker = new ServiceTracker<P2ImportExport, P2ImportExport>(Platform.getBundle(Constants.Bundle_ID).getBundleContext(), P2ImportExport.class.getName(), null);
+		tracker.open();
+		importexportService = tracker.getService();
+		tracker.close();
+	}
+
+	protected void setDestinationValue(String selectedFileName) {
+		destinationNameField.setText(selectedFileName);
+	}
+
+	/**
+	 * Determine if the page is complete and update the page appropriately.
+	 */
+	protected void updatePageCompletion() {
+		boolean pageComplete = determinePageCompletion();
+		setPageComplete(pageComplete);
+		if (pageComplete) {
+			setMessage(null);
+		}
+	}
+
+	/**
+	 * Validate the destination group.
+	 * @return <code>true</code> if the group is valid. If
+	 * not set the error message and return <code>false</code>.
+	 */
+	protected boolean validateDestinationGroup() {
+		if (!validDestination()) {
+			currentMessage = getInvalidDestinationMessage();
+			return false;
+		}
+
+		return true;
+	}
+
+	protected boolean validateOptionsGroup() {
+		if (viewer == null || viewer.getCheckedElements().length > 0)
+			return true;
+
+		currentMessage = getNoOptionsMessage();
+		return false;
+	}
+
+	protected boolean validDestination() {
+		if (this.destinationNameField == null)
+			return true;
+		File file = new File(getDestinationValue());
+		return !(file.getPath().length() <= 0 || file.isDirectory());
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractWizard.java
new file mode 100755
index 0000000..46e7c48
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/AbstractWizard.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.importexport.internal.Constants;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.MessageBox;
+
+public abstract class AbstractWizard extends Wizard {
+
+	protected AbstractPage mainPage = null;
+
+	public AbstractWizard() {
+		super();
+	}
+
+	@Override
+	public boolean performFinish() {
+		try {
+			mainPage.doFinish();
+		} catch (InterruptedException e) {
+			// cancelled by user
+			return false;
+		} catch (Exception e) {
+			Platform.getLog(Platform.getBundle(Constants.Bundle_ID)).log(new Status(IStatus.ERROR, Constants.Bundle_ID, e.getMessage(), e));
+			MessageBox messageBox = new MessageBox(this.getShell(), SWT.ICON_ERROR);
+			messageBox.setMessage(e.getMessage() == null ? "Unknown error" : e.getMessage()); //$NON-NLS-1$
+			messageBox.open();
+			return false;
+		}
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ExportPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ExportPage.java
new file mode 100755
index 0000000..0388e60
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ExportPage.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.io.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.model.ProfileElement;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.PlatformUI;
+
+public class ExportPage extends AbstractPage {
+
+	public ExportPage(String pageName) {
+		super(pageName);
+		setTitle(Messages.ExportPage_Title);
+		setDescription(Messages.ExportPage_Description);
+	}
+
+	@Override
+	protected void createContents(Composite composite) {
+		Label label = new Label(composite, SWT.NONE);
+		label.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
+		if (getSelfProfile() == null) {
+			label.setText(Messages.ExportPage_ERROR_CONFIG);
+		} else {
+			label.setText(Messages.ExportPage_Label);
+
+			createInstallationTable(composite);
+			createDestinationGroup(composite);
+		}
+	}
+
+	@Override
+	public void doFinish() throws Exception {
+		finishException = null;
+		if (viewer == null)
+			return;
+		final Object[] checked = viewer.getCheckedElements();
+		OutputStream stream = null;
+		try {
+			File target = new File(ExportPage.this.destinationNameField.getText());
+			if (!target.exists())
+				target.createNewFile();
+			stream = new BufferedOutputStream(new FileOutputStream(target));
+			final OutputStream out = stream;
+			getContainer().run(true, true, new IRunnableWithProgress() {
+
+				public void run(IProgressMonitor monitor) throws InterruptedException {
+					try {
+						IInstallableUnit[] units = new IInstallableUnit[checked.length];
+						for (int i = 0; i < units.length; i++)
+							units[i] = ProvUI.getAdapter(checked[i], IInstallableUnit.class);
+						IStatus status = importexportService.exportP2F(out, units, monitor);
+						if (status.isMultiStatus()) {
+							final StringBuilder sb = new StringBuilder();
+							for (IStatus child : status.getChildren()) {
+								if (child.isMultiStatus()) {
+									for (IStatus grandchild : child.getChildren())
+										sb.append("<li>").append(grandchild.getMessage()).append("</li>"); //$NON-NLS-1$ //$NON-NLS-2$
+								} else if (child.isOK())
+									sb.insert(0, Messages.ExportPage_SuccessWithProblems);
+								else {
+									sb.insert(0, Messages.ExportPage_Fail);
+									sb.append(status.getMessage());
+								}
+							}
+							sb.append(Messages.ExportPage_FixSuggestion);
+							sb.append(Messages.ExportPage_TryAgainQuestion);
+							Runnable runnable = new Runnable() {
+
+								public void run() {
+									String title = Messages.ExportPage_Title;
+									tryAgain = StyledErrorDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), title, sb.toString());
+								}
+							};
+							Display.getDefault().syncExec(runnable);
+							if (tryAgain)
+								throw new OperationCanceledException("User chosed try again."); //$NON-NLS-1$
+						}
+					} catch (OperationCanceledException e) {
+						throw new InterruptedException(e.getMessage());
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+
+				boolean tryAgain = false;
+			});
+		} finally {
+			if (stream != null) {
+				try {
+					stream.close();
+				} catch (IOException e) {
+					// do nothing
+				}
+			}
+			if (finishException != null)
+				throw finishException;
+		}
+	}
+
+	@Override
+	protected String getDialogTitle() {
+		return Messages.ExportPage_FILEDIALOG_TITLE;
+	}
+
+	@Override
+	protected Object getInput() {
+		ProfileElement element = new ProfileElement(null, getSelfProfile().getProfileId());
+		return element;
+	}
+
+	@Override
+	protected String getInvalidDestinationMessage() {
+		return Messages.ExportPage_DEST_ERRORMESSAGE;
+	}
+
+	@Override
+	protected void giveFocusToDestination() {
+		if (viewer != null)
+			viewer.getControl().setFocus();
+	}
+
+	@Override
+	protected String getDestinationLabel() {
+		return Messages.ExportPage_LABEL_EXPORTFILE;
+	}
+
+	@Override
+	protected int getBrowseDialogStyle() {
+		return SWT.SAVE;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ExportWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ExportWizard.java
new file mode 100755
index 0000000..5a18d53
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ExportWizard.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.io.File;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.internal.p2.importexport.internal.Constants;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.IExportWizard;
+import org.eclipse.ui.IWorkbench;
+
+public class ExportWizard extends AbstractWizard implements IExportWizard {
+
+	public ExportWizard() {
+	}
+
+	@Override
+	public void addPages() {
+		super.addPages();
+		mainPage = new ExportPage("mainPage"); //$NON-NLS-1$
+		addPage(mainPage);
+	}
+
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		setWindowTitle(Messages.ExportWizard_WizardTitle);
+		setDefaultPageImageDescriptor(ImageDescriptor.createFromURL(Platform.getBundle(Constants.Bundle_ID).getEntry("icons/install_wiz.gif"))); //$NON-NLS-1$
+		setNeedsProgressMonitor(true);
+	}
+
+	@Override
+	public boolean performFinish() {
+		File file = new File(((ExportPage) mainPage).getDestinationValue());
+		if (file.exists()) {
+			if (!MessageDialog.openConfirm(this.getShell(), Messages.ExportWizard_ConfirmDialogTitle, NLS.bind(Messages.ExportWizard_OverwriteConfirm, file.getAbsolutePath())))
+				return false;
+		}
+		return super.performFinish();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportFromInstallationPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportFromInstallationPage.java
new file mode 100644
index 0000000..cfb451d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportFromInstallationPage.java
@@ -0,0 +1,355 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.util.concurrent.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.extensionlocation.ExtensionLocationArtifactRepositoryFactory;
+import org.eclipse.equinox.internal.p2.extensionlocation.ExtensionLocationMetadataRepositoryFactory;
+import org.eclipse.equinox.internal.p2.importexport.internal.Constants;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ISelectableIUsPage;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard;
+import org.eclipse.equinox.internal.p2.ui.model.ProfileElement;
+import org.eclipse.equinox.internal.p2.ui.viewers.IUDetailsLabelProvider;
+import org.eclipse.equinox.p2.core.*;
+import org.eclipse.equinox.p2.engine.*;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
+import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactRepositoryFactory;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
+import org.eclipse.equinox.p2.repository.metadata.spi.MetadataRepositoryFactory;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.*;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class ImportFromInstallationPage extends AbstractImportPage implements ISelectableIUsPage {
+
+	protected IProvisioningAgent otherInstanceAgent = null;
+	private File instancePath = null;
+	private URI[] metaURIs = null;
+	private URI[] artiURIs = null;
+	private IProvisioningAgentProvider agentProvider;
+
+	public ImportFromInstallationPage(ProvisioningUI ui, ProvisioningOperationWizard wizard) {
+		super("importfrominstancepage", ui, wizard); //$NON-NLS-1$
+		setTitle(Messages.ImportFromInstallationPage_DIALOG_TITLE);
+		setDescription(Messages.ImportFromInstallationPage_DIALOG_DESCRIPTION);
+	}
+
+	@Override
+	protected void createContents(Composite composite) {
+		createDestinationGroup(composite);
+		createInstallationTable(composite);
+	}
+
+	@Override
+	protected String getDestinationLabel() {
+		return Messages.ImportFromInstallationPage_DESTINATION_LABEL;
+	}
+
+	@Override
+	protected String getDialogTitle() {
+		return Messages.ImportFromInstallationPage_DIALOG_TITLE;
+	}
+
+	@Override
+	protected Object getInput() {
+		return new IInstallableUnit[0];
+	}
+
+	@Override
+	protected String getInvalidDestinationMessage() {
+		return Messages.ImportFromInstallationPage_INVALID_DESTINATION;
+	}
+
+	@Override
+	protected String getNoOptionsMessage() {
+		return Messages.ImportFromInstallationPage_SELECT_COMPONENT;
+	}
+
+	@Override
+	protected boolean validateDestinationGroup() {
+		return validateDestinationGroup(new NullProgressMonitor());
+	}
+
+	private IProvisioningAgentProvider getAgentProvider() {
+		if (agentProvider == null) {
+			ServiceTracker<IProvisioningAgentProvider, IProvisioningAgentProvider> tracker = new ServiceTracker<IProvisioningAgentProvider, IProvisioningAgentProvider>(Platform.getBundle(Constants.Bundle_ID).getBundleContext(), IProvisioningAgentProvider.class, null);
+			tracker.open();
+			agentProvider = tracker.getService();
+			tracker.close();
+		}
+		return agentProvider;
+	}
+
+	boolean validateDestinationGroup(IProgressMonitor monitor) {
+		SubMonitor progress = SubMonitor.convert(monitor, 100);
+
+		boolean rt;
+		if (Display.findDisplay(Thread.currentThread()) == null) {
+			Callable<Boolean> getSuperValidateDest = new Callable<Boolean>() {
+				Boolean validated;
+
+				public Boolean call() throws Exception {
+					Display.getDefault().syncExec(new Runnable() {
+						public void run() {
+							validated = ImportFromInstallationPage.super.validateDestinationGroup();
+						}
+					});
+					return validated;
+				}
+			};
+			ExecutorService executor = Executors.newSingleThreadScheduledExecutor();
+			Future<Boolean> getSuperDestTask = executor.submit(getSuperValidateDest);
+
+			try {
+				rt = getSuperDestTask.get().booleanValue();
+			} catch (Exception e) {
+				return false;
+			} finally {
+				executor.shutdown();
+			}
+		} else
+			rt = super.validateDestinationGroup();
+
+		if (rt) {
+			try {
+				String destinate;
+				if (Display.findDisplay(Thread.currentThread()) == null) {
+					Callable<String> getDestinationValue = new Callable<String>() {
+						String destination;
+
+						public String call() throws Exception {
+							if (Display.findDisplay(Thread.currentThread()) == null) {
+								Display.getDefault().syncExec(new Runnable() {
+									public void run() {
+										destination = getDestinationValue();
+									}
+								});
+							} else
+								destination = getDestinationValue();
+							return destination;
+						}
+					};
+					ExecutorService executor = Executors.newSingleThreadScheduledExecutor();
+					Future<String> getDestTask = executor.submit(getDestinationValue);
+					try {
+						destinate = getDestTask.get();
+					} finally {
+						executor.shutdown();
+					}
+				} else
+					destinate = getDestinationValue();
+				try {
+					File p2 = new File(destinate, "p2"); //$NON-NLS-1$
+					if (p2.exists()) {
+						boolean createAgent = true;
+						if (otherInstanceAgent != null) {
+							// don't create agent again if the selection is not changed
+							if (!p2.equals(instancePath)) {
+								otherInstanceAgent.stop();
+								otherInstanceAgent = null;
+								// update cached specified path by users
+								instancePath = p2;
+								cleanLocalRepository();
+							} else
+								createAgent = false;
+						}
+						if (createAgent)
+							otherInstanceAgent = getAgentProvider().createAgent(p2.toURI());
+						ArtifactRepositoryFactory factory = new ExtensionLocationArtifactRepositoryFactory();
+						factory.setAgent(agent);
+						IArtifactRepository artiRepo = factory.load(new File(destinate).toURI(), 0, progress.newChild(50));
+						artiURIs = new URI[] {artiRepo.getLocation()};
+						MetadataRepositoryFactory metaFatory = new ExtensionLocationMetadataRepositoryFactory();
+						metaFatory.setAgent(agent);
+						IMetadataRepository metaRepo = metaFatory.load(new File(destinate).toURI(), 0, progress.newChild(50));
+						metaURIs = new URI[] {metaRepo.getLocation()};
+
+					} else
+						throw new FileNotFoundException();
+				} catch (ProvisionException e) {
+					if (otherInstanceAgent != null) {
+						IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
+						IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
+						IProfile profile = ((IProfileRegistry) otherInstanceAgent.getService(IProfileRegistry.SERVICE_NAME)).getProfiles()[0];
+						IAgentLocation location = (IAgentLocation) otherInstanceAgent.getService(IAgentLocation.SERVICE_NAME);
+						URI engineDataArea = location.getDataArea("org.eclipse.equinox.p2.engine"); //$NON-NLS-1$
+						progress.setWorkRemaining(50);
+						IMetadataRepository metaRepo = manager.loadRepository(engineDataArea.resolve("profileRegistry/" + profile.getProfileId() + ".profile"), progress.newChild(25)); //$NON-NLS-1$//$NON-NLS-2$
+						metaURIs = new URI[] {metaRepo.getLocation()};
+						IArtifactRepository artiRepo = artifactManager.loadRepository(new File(destinate).toURI(), progress.newChild(25));
+						artiURIs = new URI[] {artiRepo.getLocation()};
+					} else
+						throw new Exception();
+				}
+			} catch (Exception e) {
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						setErrorMessage(getInvalidDestinationMessage());
+					}
+				});
+				rt = false;
+				if (otherInstanceAgent != null)
+					otherInstanceAgent.stop();
+				otherInstanceAgent = null;
+				cleanLocalRepository();
+			} finally {
+				monitor.done();
+			}
+		}
+		return rt;
+	}
+
+	@Override
+	protected void giveFocusToDestination() {
+		destinationBrowseButton.setFocus();
+	}
+
+	@Override
+	protected void handleDestinationBrowseButtonPressed() {
+		DirectoryDialog dialog = new DirectoryDialog(getContainer().getShell());
+		dialog.setText(getDialogTitle());
+		dialog.setFilterPath(getDestinationValue());
+		final String selectedFileName = dialog.open();
+
+		if (selectedFileName != null) {
+			setDestinationValue(selectedFileName);
+		}
+	}
+
+	@Override
+	protected void handleDestinationChanged(String newDestination) {
+		try {
+			getContainer().run(true, false, new IRunnableWithProgress() {
+
+				public void run(IProgressMonitor monitor) {
+					Object input = null;
+					if (validateDestinationGroup(monitor)) {
+						IProfileRegistry registry = (IProfileRegistry) otherInstanceAgent.getService(IProfileRegistry.SERVICE_NAME);
+						final IProfile currentProfile = registry.getProfiles()[0];
+						final ProfileElement element = new ProfileElement(null, currentProfile.getProfileId()) {
+							@Override
+							public org.eclipse.equinox.p2.query.IQueryable<?> getQueryable() {
+								return currentProfile;
+							}
+						};
+						element.setQueryable(currentProfile);
+						input = element;
+
+					}
+					final Object viewerInput = input;
+					Display.getDefault().asyncExec(new Runnable() {
+
+						public void run() {
+							viewer.setInput(viewerInput);
+							updatePageCompletion();
+						}
+					});
+				}
+			});
+		} catch (InvocationTargetException e) {
+			setErrorMessage(e.getLocalizedMessage());
+			setPageComplete(false);
+		} catch (InterruptedException e) {
+			// won't happen
+		}
+	}
+
+	@Override
+	protected boolean validDestination() {
+		if (this.destinationNameField == null)
+			return true;
+		File file = new File(getDestinationValue());
+		return file.exists() && file.isDirectory();
+	}
+
+	class ImportFromInstallationLabelProvider extends IUDetailsLabelProvider {
+		@Override
+		public String getColumnText(Object element, int columnIndex) {
+			String text = super.getColumnText(element, columnIndex);
+			// it's the order of label provider
+			if (columnIndex == 0) {
+				IInstallableUnit iu = ProvUI.getAdapter(element, IInstallableUnit.class);
+				return getIUNameWithDetail(iu);
+			}
+			return text;
+		}
+
+		@Override
+		public Color getForeground(Object element) {
+			IInstallableUnit iu = ProvUI.getAdapter(element, IInstallableUnit.class);
+			if (hasInstalled(iu))
+				return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
+			return super.getForeground(element);
+		}
+	}
+
+	@Override
+	protected ITableLabelProvider getLabelProvider() {
+		return new ImportFromInstallationLabelProvider();
+	}
+
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (otherInstanceAgent != null) {
+			otherInstanceAgent.stop();
+			otherInstanceAgent = null;
+		}
+		if (getWizard().performCancel())
+			cleanLocalRepository();
+	}
+
+	public void cleanLocalRepository() {
+		if (metaURIs != null && metaURIs.length > 0) {
+			IProvisioningAgent agent = getProvisioningUI().getSession().getProvisioningAgent();
+			IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
+			for (URI uri : metaURIs)
+				manager.removeRepository(uri);
+			IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
+			for (URI uri : artiURIs)
+				artifactManager.removeRepository(uri);
+		}
+	}
+
+	public Object[] getCheckedIUElements() {
+		return viewer.getCheckedElements();
+	}
+
+	public Object[] getSelectedIUElements() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void setCheckedElements(Object[] elements) {
+		new UnsupportedOperationException();
+	}
+
+	public ProvisioningContext getProvisioningContext() {
+		ProvisioningContext context = new ProvisioningContext(getProvisioningUI().getSession().getProvisioningAgent());
+		context.setArtifactRepositories(artiURIs);
+		context.setMetadataRepositories(metaURIs);
+		return context;
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportFromInstallationWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportFromInstallationWizard.java
new file mode 100644
index 0000000..38ccc62
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportFromInstallationWizard.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.util.Collection;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.internal.p2.importexport.internal.Constants;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ISelectableIUsPage;
+import org.eclipse.equinox.internal.p2.ui.dialogs.InstallWizard;
+import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
+import org.eclipse.equinox.p2.engine.ProvisioningContext;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.operations.InstallOperation;
+import org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+public class ImportFromInstallationWizard extends InstallWizard implements IImportWizard {
+
+	public ImportFromInstallationWizard() {
+		this(ProvisioningUI.getDefaultUI(), null, null, null);
+	}
+
+	public ImportFromInstallationWizard(ProvisioningUI ui, InstallOperation operation, Collection<IInstallableUnit> initialSelections, LoadMetadataRepositoryJob preloadJob) {
+		super(ui, operation, initialSelections, preloadJob);
+	}
+
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		setWindowTitle(Messages.ImportWizard_WINDOWTITLE);
+		setDefaultPageImageDescriptor(ImageDescriptor.createFromURL(Platform.getBundle(Constants.Bundle_ID).getEntry("icons/install_wiz.gif"))); //$NON-NLS-1$
+		setNeedsProgressMonitor(true);
+	}
+
+	@Override
+	protected ISelectableIUsPage createMainPage(IUElementListRoot input,
+			Object[] selections) {
+		return new ImportFromInstallationPage(ui, this);
+	}
+
+	@Override
+	protected ProvisioningContext getProvisioningContext() {
+		return ((ImportFromInstallationPage) mainPage).getProvisioningContext();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportPage.java
new file mode 100644
index 0000000..e00f55f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportPage.java
@@ -0,0 +1,348 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *     IBM Corporation - Ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.io.*;
+import java.net.URI;
+import java.util.*;
+import java.util.List;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.importexport.IUDetail;
+import org.eclipse.equinox.internal.p2.importexport.VersionIncompatibleException;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ISelectableIUsPage;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard;
+import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.engine.ProvisioningContext;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.VersionRange;
+import org.eclipse.equinox.p2.query.CompoundQueryable;
+import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.equinox.p2.repository.IRepository;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+
+public class ImportPage extends AbstractImportPage implements ISelectableIUsPage {
+
+	private class InstallationContentProvider implements IStructuredContentProvider {
+
+		public void dispose() {
+			//
+		}
+
+		public Object[] getElements(Object inputElement) {
+			return (Object[]) inputElement;
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			//
+		}
+
+	}
+
+	private class InstallationLabelProvider extends LabelProvider implements ITableLabelProvider, IColorProvider {
+
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
+
+		public String getColumnText(Object element, int columnIndex) {
+			IInstallableUnit iu = ((IUDetail) element).getIU();
+			switch (columnIndex) {
+				case 0 :
+					return getIUNameWithDetail(iu);
+				case 1 :
+					return iu.getVersion().toString();
+				case 2 :
+					return iu.getId();
+				default :
+					throw new RuntimeException("Should not happen"); //$NON-NLS-1$
+			}
+
+		}
+
+		public Color getForeground(Object element) {
+			if (hasInstalled(ProvUI.getAdapter(element, IInstallableUnit.class)))
+				return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
+			return null;
+		}
+
+		public Color getBackground(Object element) {
+			return null;
+		}
+	}
+
+	private List<IUDetail> features;
+	private final List<URI> loadRepos = new ArrayList<URI>();
+	private final Map<IUDetail, IUDetail[]> newProposedFeature = new HashMap<IUDetail, IUDetail[]>();
+	private Button contactAll;
+	private Button installLatest;
+	private String oldDestination;
+
+	public ImportPage(ProvisioningUI ui, ProvisioningOperationWizard wizard) {
+		super("importpage", ui, wizard); //$NON-NLS-1$
+		setTitle(Messages.ImportPage_TITLE);
+		setDescription(Messages.ImportPage_DESCRIPTION);
+	}
+
+	@Override
+	protected void createContents(Composite composite) {
+		createDestinationGroup(composite);
+		createInstallationTable(composite);
+		createAdditionOptions(composite);
+	}
+
+	private void createAdditionOptions(Composite parent) {
+		Composite composite = new Composite(parent, SWT.BORDER);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 1;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
+
+		contactAll = new Button(composite, SWT.CHECK);
+		contactAll.setText(ProvUIMessages.AvailableIUsPage_ResolveAllCheckbox);
+
+		installLatest = new Button(composite, SWT.CHECK);
+		installLatest.setText(Messages.ImportPage_InstallLatestVersion);
+		installLatest.setSelection(true);
+	}
+
+	@Override
+	protected IContentProvider getContentProvider() {
+		return new InstallationContentProvider();
+	}
+
+	@Override
+	protected ITableLabelProvider getLabelProvider() {
+		return new InstallationLabelProvider();
+	}
+
+	@Override
+	protected int getBrowseDialogStyle() {
+		return SWT.OPEN;
+	}
+
+	@Override
+	protected String getDestinationLabel() {
+		return Messages.ImportPage_DESTINATION_LABEL;
+	}
+
+	@Override
+	protected String getDialogTitle() {
+		return Messages.ImportPage_FILEDIALOG_TITLE;
+	}
+
+	@Override
+	protected IUDetail[] getInput() {
+		return new IUDetail[0];
+	}
+
+	@Override
+	protected String getInvalidDestinationMessage() {
+		return Messages.ImportPage_DEST_ERROR;
+	}
+
+	@Override
+	protected void giveFocusToDestination() {
+		destinationNameField.setFocus();
+	}
+
+	@Override
+	protected void updatePageCompletion() {
+		super.updatePageCompletion();
+		if (isPageComplete())
+			getProvisioningWizard().operationSelectionsChanged(this);
+	}
+
+	@Override
+	protected void handleDestinationChanged(String newDestination) {
+		if (validateDestinationGroup()) {
+			// p2f file is changed, update the cached data
+			if (!newDestination.equals(oldDestination)) {
+				loadRepos.clear();
+				newProposedFeature.clear();
+			}
+			InputStream input = null;
+			try {
+				input = new BufferedInputStream(new FileInputStream(getDestinationValue()));
+				features = importexportService.importP2F(input);
+				viewer.setInput(features.toArray(new IUDetail[features.size()]));
+				input.close();
+			} catch (VersionIncompatibleException e) {
+				MessageDialog.openWarning(getShell(), Messages.ImportPage_TITLE, e.getMessage());
+			} catch (FileNotFoundException e) {
+				MessageDialog.openError(getShell(), Messages.ImportPage_TITLE, Messages.ImportPage_FILENOTFOUND);
+			} catch (IOException e) {
+				MessageDialog.openError(getShell(), Messages.ImportPage_TITLE, e.getLocalizedMessage());
+			}
+		} else
+			viewer.setInput(null);
+	}
+
+	@Override
+	protected void setDestinationValue(String selectedFileName) {
+		oldDestination = getDestinationValue();
+		super.setDestinationValue(selectedFileName);
+	}
+
+	@Override
+	protected boolean validDestination() {
+		File target = new File(getDestinationValue());
+		return super.validDestination() && target.exists() && target.canRead();
+	}
+
+	public Object[] getCheckedIUElements() {
+		Object[] checked = viewer.getCheckedElements();
+		List<IUDetail> features = new ArrayList<IUDetail>(checked.length);
+		for (int i = 0; i < checked.length; i++) {
+			IUDetail feature = (IUDetail) checked[i];
+			IUDetail[] existingFeatures = newProposedFeature.get(feature);
+			if (existingFeatures == null)
+				features.add(feature);
+			else {
+				IUDetail matchPolicy = null;
+				for (IUDetail f : existingFeatures) {
+					if (matchPolicy == null)
+						matchPolicy = f;
+					// here use exact match
+					else if (matchPolicy.getIU().getVersion().compareTo(f.getIU().getVersion()) < 0) {
+						if (installLatest.getSelection())
+							matchPolicy = f;
+						else
+							continue;
+					} else
+						matchPolicy = f;
+				}
+				if (matchPolicy != null)
+					features.add(matchPolicy);
+			}
+		}
+		return features.toArray(new IUDetail[features.size()]);
+	}
+
+	public Object[] getSelectedIUElements() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void setCheckedElements(Object[] elements) {
+		new UnsupportedOperationException();
+	}
+
+	public ProvisioningContext getProvisioningContext() {
+		if (agent != null) {
+			Object[] checked = viewer.getCheckedElements();
+			List<URI> referredRepos = new ArrayList<URI>(checked.length);
+			for (Object checkItem : checked) {
+				IUDetail feature = (IUDetail) checkItem;
+				for (URI uri : feature.getReferencedRepositories()) {
+					referredRepos.add(uri);
+				}
+			}
+			ProvisioningContext context = new ProvisioningContext(agent);
+			if (!contactAll.getSelection()) {
+				context.setArtifactRepositories(referredRepos.toArray(new URI[referredRepos.size()]));
+				context.setMetadataRepositories(referredRepos.toArray(new URI[referredRepos.size()]));
+			}
+			return context;
+		}
+		return null;
+	}
+
+	public boolean hasUnloadedRepo() {
+		for (Object checked : viewer.getCheckedElements()) {
+			IUDetail feature = (IUDetail) checked;
+			for (URI uri : feature.getReferencedRepositories())
+				if (!loadRepos.contains(uri))
+					return true;
+		}
+		return false;
+	}
+
+	class GetCheckedElement implements Runnable {
+		Object[] checkedElements = null;
+
+		public void run() {
+			checkedElements = viewer.getCheckedElements();
+		}
+	}
+
+	public Object[] getChecked() {
+		if (Display.findDisplay(Thread.currentThread()) != null)
+			return viewer.getCheckedElements();
+		GetCheckedElement get = new GetCheckedElement();
+		Display.getDefault().syncExec(get);
+		return get.checkedElements;
+	}
+
+	public void recompute(IProgressMonitor monitor) throws InterruptedException {
+		SubMonitor sub = SubMonitor.convert(monitor, Messages.ImportPage_QueryFeaturesJob, 1000);
+		if (agent != null) {
+			IMetadataRepositoryManager metaManager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
+			IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.SERVICE_NAME);
+			Object[] checked = getChecked();
+			sub.setWorkRemaining(100 * checked.length);
+			for (Object item : checked) {
+				IUDetail feature = (IUDetail) item;
+				if (!newProposedFeature.containsKey(feature)) {
+					if (sub.isCanceled())
+						throw new InterruptedException();
+					SubMonitor sub2 = sub.newChild(100, SubMonitor.SUPPRESS_ALL_LABELS);
+					sub2.setWorkRemaining(feature.getReferencedRepositories().size() * 500 + 100);
+					List<IRepository<IInstallableUnit>> repos = new ArrayList<IRepository<IInstallableUnit>>();
+					for (URI uri : feature.getReferencedRepositories()) {
+						if (!metaManager.contains(uri)) {
+							metaManager.addRepository(uri);
+						}
+						metaManager.setEnabled(uri, true);
+						try {
+							repos.add(metaManager.loadRepository(uri, sub2.newChild(500)));
+						} catch (ProvisionException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						} catch (OperationCanceledException e) {
+							throw new InterruptedException(e.getLocalizedMessage());
+						}
+						if (!artifactManager.contains(uri)) {
+							artifactManager.addRepository(uri);
+						}
+						artifactManager.setEnabled(uri, true);
+					}
+					if (sub2.isCanceled())
+						throw new InterruptedException();
+					@SuppressWarnings("unchecked")
+					Set<IInstallableUnit> result = new CompoundQueryable<IInstallableUnit>(repos.toArray(new IRepository[repos.size()])).query(QueryUtil.createIUQuery(feature.getIU().getId(), new VersionRange(feature.getIU().getVersion(), true, null, false)), sub2.newChild(100)).toSet();
+					List<IUDetail> existingFeatures = new ArrayList<IUDetail>(result.size());
+					for (IInstallableUnit iu : result) {
+						existingFeatures.add(new IUDetail(iu, feature.getReferencedRepositories()));
+					}
+					newProposedFeature.put(feature, existingFeatures.toArray(new IUDetail[existingFeatures.size()]));
+				} else {
+					if (sub.isCanceled())
+						throw new InterruptedException();
+					sub.worked(100);
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportWizard.java
new file mode 100644
index 0000000..1fc36a8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/ImportWizard.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *     IBM Corporation - Ongoing development
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.importexport.internal.Constants;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
+import org.eclipse.equinox.internal.p2.ui.dialogs.ISelectableIUsPage;
+import org.eclipse.equinox.internal.p2.ui.dialogs.InstallWizard;
+import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
+import org.eclipse.equinox.p2.engine.ProvisioningContext;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.operations.InstallOperation;
+import org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+public class ImportWizard extends InstallWizard implements IImportWizard {
+
+	public ImportWizard() {
+		this(ProvisioningUI.getDefaultUI(), null, null, null);
+	}
+
+	public ImportWizard(ProvisioningUI ui, InstallOperation operation, Collection<IInstallableUnit> initialSelections, LoadMetadataRepositoryJob preloadJob) {
+		super(ui, operation, initialSelections, preloadJob);
+	}
+
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		setWindowTitle(Messages.ImportWizard_WINDOWTITLE);
+		setDefaultPageImageDescriptor(ImageDescriptor.createFromURL(Platform.getBundle(Constants.Bundle_ID).getEntry("icons/install_wiz.gif"))); //$NON-NLS-1$
+		setNeedsProgressMonitor(true);
+	}
+
+	@Override
+	protected ISelectableIUsPage createMainPage(IUElementListRoot input, Object[] selections) {
+		return new ImportPage(ui, this);
+	}
+
+	@Override
+	protected ProvisioningContext getProvisioningContext() {
+		return ((ImportPage) mainPage).getProvisioningContext();
+	}
+
+	/**
+	 * Recompute the provisioning plan based on the items in the IUElementListRoot and the given provisioning context.
+	 * Report progress using the specified runnable context.  This method may be called before the page is created.
+	 * 
+	 * @param runnableContext
+	 */
+	@Override
+	public void recomputePlan(IRunnableContext runnableContext) {
+		if (((ImportPage) mainPage).hasUnloadedRepo()) {
+			try {
+				runnableContext.run(true, true, new IRunnableWithProgress() {
+					public void run(IProgressMonitor monitor) throws InterruptedException {
+						SubMonitor sub = SubMonitor.convert(monitor, 1000);
+						((ImportPage) mainPage).recompute(sub.newChild(800));
+						if (sub.isCanceled())
+							throw new InterruptedException();
+						Display.getDefault().syncExec(new Runnable() {
+
+							public void run() {
+								ProvisioningContext context = getProvisioningContext();
+								initializeResolutionModelElements(getOperationSelections());
+								if (planSelections.length == 0) {
+									operation = null;
+									unableToResolve(ProvUIMessages.ResolutionWizardPage_NoSelections);
+								} else {
+									operation = getProfileChangeOperation(planSelections);
+									operation.setProvisioningContext(context);
+								}
+							}
+						});
+						if (sub.isCanceled())
+							throw new InterruptedException();
+						operation.resolveModal(sub.newChild(200));
+						Display.getDefault().asyncExec(new Runnable() {
+
+							public void run() {
+								planChanged();
+							}
+						});
+					}
+				});
+			} catch (InterruptedException e) {
+				// Nothing to report if thread was interrupted
+			} catch (InvocationTargetException e) {
+				ProvUI.handleException(e.getCause(), null, StatusManager.SHOW | StatusManager.LOG);
+				unableToResolve(null);
+			}
+		} else
+			super.recomputePlan(runnableContext);
+	}
+
+	void unableToResolve(String message) {
+		IStatus couldNotResolveStatus;
+		if (message != null) {
+			couldNotResolveStatus = new Status(IStatus.ERROR, Constants.Bundle_ID, message, null);
+		} else {
+			couldNotResolveStatus = new Status(IStatus.ERROR, Constants.Bundle_ID, ProvUIMessages.ProvisioningOperationWizard_UnexpectedFailureToResolve, null);
+		}
+		StatusManager.getManager().handle(couldNotResolveStatus, StatusManager.LOG);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/StyledErrorDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/StyledErrorDialog.java
new file mode 100644
index 0000000..1c6782b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/internal/wizard/StyledErrorDialog.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.core.commands.*;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.importexport.internal.Constants;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.IWorkbenchCommandConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormText;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+public class StyledErrorDialog extends MessageDialog {
+
+	public static boolean openQuestion(Shell parent, String title, String message) {
+		return open(QUESTION, parent, title, message, SWT.NONE);
+	}
+
+	public static void openInformation(Shell parent, String title, String message) {
+		open(INFORMATION, parent, title, message, SWT.NONE);
+	}
+
+	public static void openWarning(Shell parent, String title, String message) {
+		open(WARNING, parent, title, message, SWT.NONE);
+	}
+
+	public static boolean open(int kind, Shell parent, String title, String message, int style) {
+		StyledErrorDialog dialog = new StyledErrorDialog(parent, title, null, message, kind, getButtonLabels(kind), 0);
+		int style2 = style & SWT.SHEET;
+		dialog.setShellStyle(dialog.getShellStyle() | style2);
+		return dialog.open() == 0;
+	}
+
+	/**
+	 * @param kind
+	 */
+	static String[] getButtonLabels(int kind) {
+		String[] dialogButtonLabels;
+		switch (kind) {
+			case ERROR :
+			case INFORMATION :
+			case WARNING : {
+				dialogButtonLabels = new String[] {IDialogConstants.OK_LABEL};
+				break;
+			}
+			case CONFIRM : {
+				dialogButtonLabels = new String[] {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL};
+				break;
+			}
+			case QUESTION : {
+				dialogButtonLabels = new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL};
+				break;
+			}
+			case QUESTION_WITH_CANCEL : {
+				dialogButtonLabels = new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL};
+				break;
+			}
+			default : {
+				throw new IllegalArgumentException("Illegal value for kind in MessageDialog.open()"); //$NON-NLS-1$
+			}
+		}
+		return dialogButtonLabels;
+	}
+
+	public StyledErrorDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, int imageType, String[] buttonLabels, int defaultIndex) {
+		super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, imageType, buttonLabels, defaultIndex);
+	}
+
+	@Override
+	protected Control createMessageArea(Composite composite) {
+		// create composite
+		// create image
+		Image image = getImage();
+		if (image != null) {
+			imageLabel = new Label(composite, SWT.NULL);
+			image.setBackground(imageLabel.getBackground());
+			imageLabel.setImage(image);
+			addAccessibleListeners(imageLabel, image);
+			GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING).applyTo(imageLabel);
+		}
+		// create message
+		if (message != null) {
+			FormToolkit toolkit = new FormToolkit(Display.getDefault());
+			Composite toolkitComp = toolkit.createComposite(composite);
+			toolkitComp.setLayout(new FillLayout(SWT.HORIZONTAL | SWT.VERTICAL));
+			FormText text = toolkit.createFormText(toolkitComp, false);
+			text.setText(message, true, true);
+			text.setBackground(composite.getBackground());
+			GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).grab(true, false).hint(convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH), SWT.DEFAULT).applyTo(toolkitComp);
+			text.addHyperlinkListener(new HyperlinkAdapter() {
+				public void linkActivated(HyperlinkEvent event) {
+					try {
+						URI uri = URI.create((String) event.data);
+						if ("pref".equals(uri.getScheme())) { //$NON-NLS-1$
+							Map<String, String> para = new HashMap<String, String>();
+							para.put(IWorkbenchCommandConstants.WINDOW_PREFERENCES_PARM_PAGEID, uri.getAuthority());
+							Command prefCommand = ((ICommandService) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(ICommandService.class)).getCommand(IWorkbenchCommandConstants.WINDOW_PREFERENCES);
+							prefCommand.executeWithChecks(new ExecutionEvent(prefCommand, para, null, null));
+						}
+					} catch (ExecutionException e) {
+						Platform.getLog(Platform.getBundle(Constants.Bundle_ID)).log(new Status(IStatus.ERROR, Constants.Bundle_ID, e.getMessage(), e));
+					} catch (NotDefinedException e) {
+						Platform.getLog(Platform.getBundle(Constants.Bundle_ID)).log(new Status(IStatus.ERROR, Constants.Bundle_ID, e.getMessage(), e));
+					} catch (NotEnabledException e) {
+						Platform.getLog(Platform.getBundle(Constants.Bundle_ID)).log(new Status(IStatus.ERROR, Constants.Bundle_ID, e.getMessage(), e));
+					} catch (NotHandledException e) {
+						Platform.getLog(Platform.getBundle(Constants.Bundle_ID)).log(new Status(IStatus.ERROR, Constants.Bundle_ID, e.getMessage(), e));
+					}
+				}
+			});
+		}
+		return composite;
+	}
+
+	private void addAccessibleListeners(Label label, final Image image) {
+		label.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			@Override
+			public void getName(AccessibleEvent event) {
+				final String accessibleMessage = getAccessibleMessageFor(image);
+				if (accessibleMessage == null) {
+					return;
+				}
+				event.result = accessibleMessage;
+			}
+		});
+	}
+
+	private String getAccessibleMessageFor(Image image) {
+		if (image.equals(getErrorImage())) {
+			return JFaceResources.getString("error");//$NON-NLS-1$
+		}
+
+		if (image.equals(getWarningImage())) {
+			return JFaceResources.getString("warning");//$NON-NLS-1$
+		}
+
+		if (image.equals(getInfoImage())) {
+			return JFaceResources.getString("info");//$NON-NLS-1$
+		}
+
+		if (image.equals(getQuestionImage())) {
+			return JFaceResources.getString("question"); //$NON-NLS-1$
+		}
+
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FConstants.java
new file mode 100644
index 0000000..295414d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FConstants.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.persistence;
+
+import org.eclipse.equinox.p2.metadata.Version;
+
+public interface P2FConstants {
+
+	public static final Version CURRENT_VERSION = Version.createOSGi(1, 0, 0);
+
+	public static final String P2F_ELEMENT = "p2f"; //$NON-NLS-1$
+	public static final String IUS_ELEMENT = "ius"; //$NON-NLS-1$
+	public static final String IU_ELEMENT = "iu"; //$NON-NLS-1$
+
+	public static final String REPOSITORIES_ELEMENT = "repositories"; //$NON-NLS-1$
+	public static final String REPOSITORY_ELEMENT = "repository"; //$NON-NLS-1$
+	public static final String P2FURI_ATTRIBUTE = "uri"; //$NON-NLS-1$
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java
new file mode 100644
index 0000000..24c2f74
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.persistence;
+
+import java.io.*;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.parsers.ParserConfigurationException;
+import org.eclipse.equinox.internal.p2.importexport.IUDetail;
+import org.eclipse.equinox.internal.p2.importexport.VersionIncompatibleException;
+import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
+import org.eclipse.equinox.internal.p2.persistence.XMLParser;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.BundleContext;
+import org.xml.sax.*;
+
+public class P2FParser extends XMLParser implements P2FConstants {
+	static final VersionRange XML_TOLERANCE = new VersionRange(Version.createOSGi(1, 0, 0), true, Version.createOSGi(2, 0, 0), false);
+
+	List<IUDetail> iusListed;
+
+	protected class RepositoryHandler extends AbstractHandler {
+
+		private final String[] required = new String[] {LOCATION_ELEMENT};
+		private final String[] optional = new String[] {};
+		private URI referredRepo;
+		private List<URI> uri;
+
+		public RepositoryHandler(AbstractHandler parentHandler, Attributes attributes, List<URI> uri) {
+			super(parentHandler, REPOSITORY_ELEMENT);
+			String[] values = parseAttributes(attributes, required, optional);
+			//skip entire subrepository if the location is missing
+			if (values[0] == null)
+				return;
+			this.uri = uri;
+			referredRepo = checkURI(REPOSITORY_ELEMENT, LOCATION_ELEMENT, values[0]);
+		}
+
+		@Override
+		public void startElement(String name, Attributes attributes) {
+			checkCancel();
+		}
+
+		@Override
+		protected void finished() {
+			if (referredRepo != null)
+				uri.add(referredRepo);
+		}
+	}
+
+	protected class RepositoriesHandler extends AbstractHandler {
+
+		List<URI> uris;
+
+		public RepositoriesHandler(AbstractHandler parentHandler, Attributes attributes) {
+			super(parentHandler, REPOSITORIES_ELEMENT);
+			String size = parseOptionalAttribute(attributes, COLLECTION_SIZE_ATTRIBUTE);
+			uris = (size == null) ? new ArrayList<URI>() : new ArrayList<URI>(new Integer(size).intValue());
+		}
+
+		@Override
+		public void startElement(String name, Attributes attributes) {
+			if (name.equals(REPOSITORY_ELEMENT)) {
+				new RepositoryHandler(this, attributes, uris);
+			}
+		}
+
+		public List<URI> getRepositories() {
+			return uris;
+		}
+	}
+
+	protected class IUHandler extends AbstractHandler {
+		private final String[] required = new String[] {ID_ATTRIBUTE, NAME_ATTRIBUTE, VERSION_ATTRIBUTE};
+		private final String[] optional = new String[] {};
+
+		IInstallableUnit iu = null;
+		private RepositoriesHandler repositoriesHandler;
+		private List<IUDetail> ius;
+
+		public IUHandler(AbstractHandler parentHandler, Attributes attributes, List<IUDetail> ius) {
+			super(parentHandler, IU_ELEMENT);
+			String[] values = parseAttributes(attributes, required, optional);
+			//skip entire record if the id is missing
+			if (values[0] == null)
+				return;
+			MetadataFactory.InstallableUnitDescription desc = new MetadataFactory.InstallableUnitDescription();
+			desc.setId(values[0]);
+			desc.setProperty(IInstallableUnit.PROP_NAME, values[1]);
+			desc.setVersion(Version.create(values[2]));
+			iu = MetadataFactory.createInstallableUnit(desc);
+			this.ius = ius;
+		}
+
+		@Override
+		public void startElement(String name, Attributes attributes) {
+			if (name.equals(REPOSITORIES_ELEMENT)) {
+				repositoriesHandler = new RepositoriesHandler(this, attributes);
+			}
+		}
+
+		@Override
+		protected void finished() {
+			if (isValidXML()) {
+				ius.add(new IUDetail(iu, repositoriesHandler.getRepositories()));
+			}
+		}
+	}
+
+	protected class IUsHandler extends AbstractHandler {
+
+		private final List<IUDetail> ius;
+
+		public IUsHandler(ContentHandler parentHandler, Attributes attributes) {
+			super(parentHandler, IUS_ELEMENT);
+			String size = parseOptionalAttribute(attributes, COLLECTION_SIZE_ATTRIBUTE);
+			ius = (size != null ? new ArrayList<IUDetail>(new Integer(size).intValue()) : new ArrayList<IUDetail>());
+		}
+
+		@Override
+		public void startElement(String name, Attributes attributes) {
+			if (name.equals(IU_ELEMENT)) {
+				new IUHandler(this, attributes, ius);
+			} else {
+				invalidElement(name, attributes);
+			}
+		}
+
+		public List<IUDetail> getIUs() {
+			return ius;
+		}
+	}
+
+	private final class P2FDocHandler extends DocHandler {
+
+		public P2FDocHandler(String rootName, RootHandler rootHandler) {
+			super(rootName, rootHandler);
+		}
+
+		@Override
+		public void processingInstruction(String target, String data) {
+			if (P2F_ELEMENT.equals(target)) {
+				Version repositoryVersion = extractPIVersion(target, data);
+				if (!XML_TOLERANCE.isIncluded(repositoryVersion)) {
+					throw new VersionIncompatibleException(NLS.bind(Messages.io_IncompatibleVersion, repositoryVersion, XML_TOLERANCE));
+				}
+			}
+		}
+	}
+
+	final class P2FHandler extends RootHandler {
+		private final String[] required = new String[] {};
+		private final String[] optional = new String[] {};
+		private IUsHandler iusHandler;
+
+		@Override
+		protected void handleRootAttributes(Attributes attributes) {
+			parseAttributes(attributes, required, optional);
+		}
+
+		@Override
+		public void startElement(String name, Attributes attributes) {
+			if (IUS_ELEMENT.equals(name)) {
+				if (iusHandler == null) {
+					iusHandler = new IUsHandler(this, attributes);
+				} else {
+					duplicateElement(this, name, attributes);
+				}
+			} else {
+				invalidElement(name, attributes);
+			}
+		}
+
+		@Override
+		protected void finished() {
+			if (isValidXML()) {
+				if (iusHandler != null)
+					iusListed = iusHandler.getIUs();
+			}
+		}
+	}
+
+	public P2FParser(BundleContext context, String pluginId) {
+		super(context, pluginId);
+	}
+
+	public void parse(File file) throws IOException {
+		// don't overwrite if we already have a filename/location
+		if (errorContext == null)
+			setErrorContext(file.getAbsolutePath());
+		parse(new FileInputStream(file));
+	}
+
+	public synchronized void parse(InputStream stream) throws IOException {
+		this.status = null;
+		try {
+			// TODO: currently not caching the parser since we make no assumptions
+			//		 or restrictions on concurrent parsing
+			getParser();
+			P2FHandler p2fHandler = new P2FHandler();
+			xmlReader.setContentHandler(new P2FDocHandler(P2F_ELEMENT, p2fHandler));
+			xmlReader.parse(new InputSource(stream));
+		} catch (SAXException e) {
+			throw new IOException(e.getMessage());
+		} catch (ParserConfigurationException e) {
+			throw new IOException(e.getMessage());
+		} finally {
+			stream.close();
+		}
+	}
+
+	public List<IUDetail> getIUs() {
+		if (iusListed == null) {
+			iusListed = new ArrayList<IUDetail>();
+		}
+		return iusListed;
+	}
+
+	@Override
+	protected Object getRootObject() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	protected String getErrorMessage() {
+		return Messages.io_parseError;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FWriter.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FWriter.java
new file mode 100755
index 0000000..13c5dc6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FWriter.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2011 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     WindRiver Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.importexport.persistence;
+
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.util.List;
+import java.util.Locale;
+import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.equinox.internal.p2.importexport.IUDetail;
+import org.eclipse.equinox.internal.p2.persistence.XMLWriter;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+
+public class P2FWriter extends XMLWriter implements P2FConstants {
+
+	public P2FWriter(OutputStream output, ProcessingInstruction[] piElements) throws UnsupportedEncodingException {
+		super(output, piElements);
+	}
+
+	public void write(List<IUDetail> features) {
+		start(P2F_ELEMENT);
+		attribute(VERSION_ATTRIBUTE, CURRENT_VERSION);
+		writeFeatures(features);
+		end(P2F_ELEMENT);
+		flush();
+	}
+
+	private void writeFeatures(List<IUDetail> features) {
+		start(IUS_ELEMENT);
+		attributeOptional(COLLECTION_SIZE_ATTRIBUTE, String.valueOf(features.size()));
+		for (IUDetail feature : features)
+			writeFeature(feature);
+		end(IUS_ELEMENT);
+	}
+
+	private void writeFeature(IUDetail feature) {
+		IInstallableUnit unit = feature.getIU();
+		start(IU_ELEMENT);
+		attribute(ID_ATTRIBUTE, unit.getId());
+		attribute(NAME_ATTRIBUTE, unit.getProperty(IInstallableUnit.PROP_NAME, Locale.getDefault().toString()));
+		attribute(VERSION_ATTRIBUTE, unit.getVersion().toString());
+		start(REPOSITORIES_ELEMENT);
+		attribute(COLLECTION_SIZE_ATTRIBUTE, feature.getReferencedRepositories().size());
+		for (URI uri : feature.getReferencedRepositories()) {
+			start(REPOSITORY_ELEMENT);
+			String unencoded = URIUtil.toUnencodedString(uri);
+			attribute(LOCATION_ELEMENT, unencoded);
+			end(REPOSITORY_ELEMENT);
+		}
+		end(REPOSITORIES_ELEMENT);
+		end(IU_ELEMENT);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/META-INF/MANIFEST.MF
index db8df9b..8c03c32 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.p2.ui.sdk.scheduler;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdatePlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -23,7 +23,6 @@ Import-Package: com.ibm.icu.util;version="4.0.1",
  org.eclipse.equinox.internal.p2.ui.actions,
  org.eclipse.equinox.internal.p2.ui.query,
  org.eclipse.equinox.internal.provisional.p2.core.eventbus,
- org.eclipse.equinox.internal.provisional.p2.director,
  org.eclipse.equinox.internal.provisional.p2.repository,
  org.eclipse.equinox.internal.provisional.p2.updatechecker,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
@@ -35,5 +34,5 @@ Import-Package: com.ibm.icu.util;version="4.0.1",
  org.eclipse.equinox.p2.ui;version="[2.0.0,3.0.0)",
  org.eclipse.osgi.service.resolver;version="1.1.0",
  org.eclipse.osgi.util;version="1.1.0",
- org.osgi.framework;version="1.3.0",
+ org.osgi.framework;version="1.6.0",
  org.osgi.service.packageadmin;version="1.2.0"
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/build.properties
index 2d22063..a59b9a8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2007, 2008 IBM Corporation and others.
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/pom.xml
index 5689df8..9bc5d81 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.ui.sdk.scheduler</artifactId>
-  <version>1.0.0.qualifier</version>
+  <version>1.0.100.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatePlugin.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatePlugin.java
index 8b5a97e..25bd314 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatePlugin.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatePlugin.java
@@ -120,7 +120,7 @@ public class AutomaticUpdatePlugin extends AbstractUIPlugin {
 	}
 
 	public IProvisioningEventBus getProvisioningEventBus() {
-		ServiceReference busReference = context.getServiceReference(IProvisioningEventBus.SERVICE_NAME);
+		ServiceReference<?> busReference = context.getServiceReference(IProvisioningEventBus.SERVICE_NAME);
 		if (busReference == null)
 			return null;
 		return (IProvisioningEventBus) context.getService(busReference);
@@ -143,7 +143,7 @@ public class AutomaticUpdatePlugin extends AbstractUIPlugin {
 	}
 
 	public IAgentLocation getAgentLocation() {
-		ServiceReference ref = getContext().getServiceReference(IAgentLocation.SERVICE_NAME);
+		ServiceReference<?> ref = getContext().getServiceReference(IAgentLocation.SERVICE_NAME);
 		if (ref == null)
 			return null;
 		IAgentLocation location = (IAgentLocation) getContext().getService(ref);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java
index d6adf26..63d13d3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdater.java
@@ -68,7 +68,7 @@ public class AutomaticUpdater implements IUpdateListener {
 		getProvisioningEventBus().addListener(profileListener);
 	}
 
-	private boolean sameProfile(String another) {
+	boolean sameProfile(String another) {
 		if (another.equals(IProfileRegistry.SELF)) {
 			another = getProfileRegistry().getProfile(another).getProfileId();
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPopup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPopup.java
index af7b276..1b8acef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPopup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPopup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Michler <orgler at gmail.com> - Bug 321568 -  [ui] Preference for automatic-update-reminder doesn't work in multilanguage-environments
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.sdk.scheduler;
 
@@ -37,7 +38,8 @@ import org.eclipse.ui.progress.WorkbenchJob;
  * @since 3.4
  */
 public class AutomaticUpdatesPopup extends PopupDialog {
-	public static final String[] ELAPSED = {AutomaticUpdateMessages.AutomaticUpdateScheduler_30Minutes, AutomaticUpdateMessages.AutomaticUpdateScheduler_60Minutes, AutomaticUpdateMessages.AutomaticUpdateScheduler_240Minutes};
+	public static final String[] ELAPSED_VALUES = {PreferenceConstants.PREF_REMIND_30Minutes, PreferenceConstants.PREF_REMIND_60Minutes, PreferenceConstants.PREF_REMIND_240Minutes};
+	public static final String[] ELAPSED_LOCALIZED_STRINGS = {AutomaticUpdateMessages.AutomaticUpdateScheduler_30Minutes, AutomaticUpdateMessages.AutomaticUpdateScheduler_60Minutes, AutomaticUpdateMessages.AutomaticUpdateScheduler_240Minutes};
 	private static final long MINUTE = 60 * 1000L;
 	private static final String PREFS_HREF = "PREFS"; //$NON-NLS-1$
 	private static final String DIALOG_SETTINGS_SECTION = "AutomaticUpdatesPopup"; //$NON-NLS-1$
@@ -102,7 +104,7 @@ public class AutomaticUpdatesPopup extends PopupDialog {
 
 	private void updateRemindText() {
 		if (prefs.getBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE))
-			remindLink.setText(NLS.bind(AutomaticUpdateMessages.AutomaticUpdatesPopup_RemindAndPrefLink, new String[] {prefs.getString(PreferenceConstants.PREF_REMIND_ELAPSED), PREFS_HREF}));
+			remindLink.setText(NLS.bind(AutomaticUpdateMessages.AutomaticUpdatesPopup_RemindAndPrefLink, new String[] {getElapsedTimeString(prefs.getString(PreferenceConstants.PREF_REMIND_ELAPSED)), PREFS_HREF}));
 		else
 			remindLink.setText(AutomaticUpdateMessages.AutomaticUpdatesPopup_PrefLinkOnly);
 		remindLink.getParent().layout(true);
@@ -172,8 +174,8 @@ public class AutomaticUpdatesPopup extends PopupDialog {
 	long computeRemindDelay() {
 		if (prefs.getBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE)) {
 			String elapsed = prefs.getString(PreferenceConstants.PREF_REMIND_ELAPSED);
-			for (int d = 0; d < ELAPSED.length; d++)
-				if (ELAPSED[d].equals(elapsed))
+			for (int d = 0; d < ELAPSED_VALUES.length; d++)
+				if (ELAPSED_VALUES[d].equals(elapsed))
 					switch (d) {
 						case 0 :
 							// 30 minutes
@@ -291,4 +293,12 @@ public class AutomaticUpdatesPopup extends PopupDialog {
 		}
 		return control;
 	}
+
+	public static String getElapsedTimeString(String elapsedTimeKey) {
+		for (int i = 0; i < AutomaticUpdatesPopup.ELAPSED_VALUES.length; i++) {
+			if (AutomaticUpdatesPopup.ELAPSED_VALUES[i].equals(elapsedTimeKey))
+				return AutomaticUpdatesPopup.ELAPSED_LOCALIZED_STRINGS[i];
+		}
+		return AutomaticUpdatesPopup.ELAPSED_LOCALIZED_STRINGS[0];
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPreferencePage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPreferencePage.java
index 6fd1078..db60287 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/AutomaticUpdatesPreferencePage.java
@@ -7,6 +7,7 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Michler <orgler at gmail.com> - Bug 321568 -  [ui] Preference for automatic-update-reminder doesn't work in multilanguage-environments
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.sdk.scheduler;
 
@@ -171,7 +172,7 @@ public class AutomaticUpdatesPreferencePage extends PreferencePage implements IW
 		});
 
 		remindElapseCombo = new Combo(remindGroup, SWT.READ_ONLY);
-		remindElapseCombo.setItems(AutomaticUpdatesPopup.ELAPSED);
+		remindElapseCombo.setItems(AutomaticUpdatesPopup.ELAPSED_LOCALIZED_STRINGS);
 
 		gd = new GridData();
 		gd.widthHint = 200;
@@ -207,7 +208,7 @@ public class AutomaticUpdatesPreferencePage extends PreferencePage implements IW
 
 		remindScheduleRadio.setSelection(pref.getBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
 		remindOnceRadio.setSelection(!pref.getBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
-		remindElapseCombo.setText(pref.getString(PreferenceConstants.PREF_REMIND_ELAPSED));
+		remindElapseCombo.setText(AutomaticUpdatesPopup.getElapsedTimeString(pref.getString(PreferenceConstants.PREF_REMIND_ELAPSED)));
 		searchOnlyRadio.setSelection(!pref.getBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));
 		searchAndDownloadRadio.setSelection(pref.getBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));
 
@@ -251,7 +252,7 @@ public class AutomaticUpdatesPreferencePage extends PreferencePage implements IW
 
 		remindOnceRadio.setSelection(!pref.getDefaultBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
 		remindScheduleRadio.setSelection(pref.getDefaultBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE));
-		remindElapseCombo.setText(pref.getDefaultString(PreferenceConstants.PREF_REMIND_ELAPSED));
+		remindElapseCombo.setText(AutomaticUpdatesPopup.getElapsedTimeString(pref.getDefaultString(PreferenceConstants.PREF_REMIND_ELAPSED)));
 
 		searchOnlyRadio.setSelection(!pref.getDefaultBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));
 		searchAndDownloadRadio.setSelection(pref.getDefaultBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY));
@@ -271,7 +272,7 @@ public class AutomaticUpdatesPreferencePage extends PreferencePage implements IW
 
 		if (remindScheduleRadio.getSelection()) {
 			pref.setValue(PreferenceConstants.PREF_REMIND_SCHEDULE, true);
-			pref.setValue(PreferenceConstants.PREF_REMIND_ELAPSED, remindElapseCombo.getText());
+			pref.setValue(PreferenceConstants.PREF_REMIND_ELAPSED, AutomaticUpdatesPopup.ELAPSED_VALUES[remindElapseCombo.getSelectionIndex()]);
 		} else {
 			pref.setValue(PreferenceConstants.PREF_REMIND_SCHEDULE, false);
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceConstants.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceConstants.java
index 0a9e74c..6f2de2b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Michler <orgler at gmail.com> - Bug 321568 -  [ui] Preference for automatic-update-reminder doesn't work in multilanguage-environments
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.sdk.scheduler;
 
@@ -22,6 +23,9 @@ public class PreferenceConstants {
 	public static final String PREF_DOWNLOAD_ONLY = "download"; // value is true or false, default is false //$NON-NLS-1$
 	public static final String PREF_REMIND_SCHEDULE = "remindOnSchedule"; // value is true or false //$NON-NLS-1$
 	public static final String PREF_REMIND_ELAPSED = "remindElapsedTime";//$NON-NLS-1$
+	public static final String PREF_REMIND_30Minutes = "30 minutes";//$NON-NLS-1$
+	public static final String PREF_REMIND_60Minutes = "Hour";//$NON-NLS-1$
+	public static final String PREF_REMIND_240Minutes = "4 Hours";//$NON-NLS-1$
 	public static final String PREF_AUTO_UPDATE_INIT = "autoUpdateInit"; //$NON-NLS-1$
 	public static final String PREF_MIGRATED_34 = "migrated34Prefs"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceInitializer.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceInitializer.java
index 6bb840b..eeca576 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk.scheduler/src/org/eclipse/equinox/internal/p2/ui/sdk/scheduler/PreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Michler <orgler at gmail.com> - Bug 321568 -  [ui] Preference for automatic-update-reminder doesn't work in multilanguage-environments
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.sdk.scheduler;
 
@@ -31,6 +32,8 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 		// scope (final 3.5 format)
 		// 2) if applicable, migrate from 3.4 prefs kept in a different bundle
 		// 3) if applicable, migrate from 3.3 prefs known by Update Manager
+		// 4) check value of auto update reminder time and if it is a localized string, change it to the english string
+		// (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=321568)
 		final IAgentLocation agentLocation = AutomaticUpdatePlugin.getDefault().getAgentLocation();
 		if (agentLocation == null)
 			return;
@@ -84,7 +87,7 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 				}
 				if (pref.get(PreferenceConstants.PREF_REMIND_ELAPSED, null) == null && node34.get("remindElapsedTime", null) != null) { //$NON-NLS-1$
 					pref.put(PreferenceConstants.PREF_REMIND_ELAPSED, node34.get("remindElapsedTime", //$NON-NLS-1$
-							AutomaticUpdateMessages.AutomaticUpdateScheduler_30Minutes));
+							PreferenceConstants.PREF_REMIND_30Minutes));
 				}
 			}
 			// mark the pref that says we've migrated
@@ -127,6 +130,31 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 				handleException(e, AutomaticUpdateMessages.ErrorSavingClassicPreferences);
 			}
 		}
+
+		// All migration is done, check that the value of the auto update reminder time is *not* localized
+		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=321568
+		String value = pref.get(PreferenceConstants.PREF_REMIND_ELAPSED, PreferenceConstants.PREF_REMIND_30Minutes);
+		for (int i = 0; i < AutomaticUpdatesPopup.ELAPSED_VALUES.length; i++)
+			if (AutomaticUpdatesPopup.ELAPSED_VALUES[i].equals(value))
+				// it's a known value, all is well, no need to go further.
+				return;
+		try {
+			// The stored value is not a known value.  See if it is a localized value and if so, use the corresponding value string instead.
+			for (int i = 0; i < AutomaticUpdatesPopup.ELAPSED_LOCALIZED_STRINGS.length; i++)
+				if (AutomaticUpdatesPopup.ELAPSED_LOCALIZED_STRINGS[i].equals(value)) {
+					pref.put(PreferenceConstants.PREF_REMIND_ELAPSED, AutomaticUpdatesPopup.ELAPSED_VALUES[i]);
+					pref.flush();
+					return;
+				}
+			// The string does not reflect a known value, nor does it reflect the current locale.
+			// Set it to the default value.  Note that we've never handled a change of locale properly in the
+			// preference migration, so losing a not known setting is not a regression.  At least we tried to 
+			// handle the current locale...
+			pref.put(PreferenceConstants.PREF_REMIND_ELAPSED, PreferenceConstants.PREF_REMIND_30Minutes);
+			pref.flush();
+		} catch (BackingStoreException e) {
+			handleException(e, AutomaticUpdateMessages.ErrorSavingPreferences);
+		}
 	}
 
 	private static void handleException(Exception e, String message) {
@@ -140,6 +168,6 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 		node.put(PreferenceConstants.PREF_AUTO_UPDATE_SCHEDULE, PreferenceConstants.PREF_UPDATE_ON_STARTUP);
 		node.putBoolean(PreferenceConstants.PREF_DOWNLOAD_ONLY, false);
 		node.putBoolean(PreferenceConstants.PREF_REMIND_SCHEDULE, false);
-		node.put(PreferenceConstants.PREF_REMIND_ELAPSED, AutomaticUpdateMessages.AutomaticUpdateScheduler_30Minutes);
+		node.put(PreferenceConstants.PREF_REMIND_ELAPSED, PreferenceConstants.PREF_REMIND_30Minutes);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/.settings/.api_filters b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/.settings/.api_filters
index 69033c6..268debc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/.settings/.api_filters
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/.settings/.api_filters
@@ -8,6 +8,14 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/equinox/internal/p2/ui/sdk/RevertProfilePageExtensionFactory.java" type="org.eclipse.equinox.internal.p2.ui.sdk.RevertProfilePageExtensionFactory">
+        <filter id="572522506">
+            <message_arguments>
+                <message_argument value="RevertProfilePage"/>
+                <message_argument value="RevertProfilePageExtensionFactory"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/equinox/internal/p2/ui/sdk/RevertProfilePageWithCompare.java" type="org.eclipse.equinox.internal.p2.ui.sdk.RevertProfilePageWithCompare">
         <filter id="571473929">
             <message_arguments>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/META-INF/MANIFEST.MF
index 4f5e0f9..36dcf11 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.p2.ui.sdk;singleton:=true
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.0.200.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.ui.sdk.ProvSDKUIActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -11,7 +11,7 @@ Export-Package: org.eclipse.equinox.internal.p2.ui.sdk;x-internal:=true,
 Require-Bundle: org.eclipse.ui;bundle-version="3.6.0",
  org.eclipse.core.runtime,
  org.eclipse.equinox.p2.ui,
- org.eclipse.compare
+ org.eclipse.compare;resolution:=optional
 Import-Package: javax.xml.parsers,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.engine;version="[2.0.0,3.0.0)",
@@ -20,7 +20,7 @@ Import-Package: javax.xml.parsers,
  org.eclipse.equinox.p2.operations;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.query;version="[2.0.0,3.0.0)",
  org.eclipse.osgi.util;version="1.1.0",
- org.osgi.framework;version="1.3.0",
+ org.osgi.framework;version="1.6.0",
  org.w3c.dom,
  org.xml.sax
 Service-Component: OSGI-INF/policy_component.xml, OSGI-INF/licenseManager_component.xml
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/META-INF/p2.inf b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/META-INF/p2.inf
new file mode 100644
index 0000000..c98287b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/META-INF/p2.inf
@@ -0,0 +1,4 @@
+ requires.0.namespace = osgi.bundle
+ requires.0.name = org.eclipse.compare
+ requires.0.greedy = false
+ requires.0.optional = true
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/build.properties
index 8be3e84..549e0e1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.properties
index c25e1e6..73ad9ec 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.xml
index 8722ca9..f542dcd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/plugin.xml
@@ -115,7 +115,7 @@
           </page>
           <page
             name="%installHistoryPage"
-            class="org.eclipse.equinox.internal.p2.ui.sdk.RevertProfilePageWithCompare"
+            class="org.eclipse.equinox.internal.p2.ui.sdk.RevertProfilePageExtensionFactory"
             id="11.org.eclipse.equinox.internal.p2.ui.sdk.RevertProfilePage">
           </page>
           
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/pom.xml
index b57ed50..f782c0d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/pom.xml
@@ -1,14 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>org.eclipse.equinox.p2-parent</artifactId>
-    <groupId>org.eclipse</groupId>
-    <version>0.0.1-SNAPSHOT</version><relativePath>../org.eclipse.equinox.p2-parent</relativePath>
-  </parent>
-  <groupId>org.eclipse</groupId>
-  <artifactId>org.eclipse.equinox.p2.ui.sdk</artifactId>
-  <version>1.0.100.qualifier</version>
-  <packaging>eclipse-plugin</packaging>
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>org.eclipse.equinox.p2-parent</artifactId>
+		<groupId>org.eclipse</groupId>
+		<version>0.0.1-SNAPSHOT</version>
+		<relativePath>../org.eclipse.equinox.p2-parent</relativePath>
+	</parent>
+	<groupId>org.eclipse</groupId>
+	<artifactId>org.eclipse.equinox.p2.ui.sdk</artifactId>
+	<version>1.0.200.qualifier</version>
+	<packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKMessages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKMessages.java
index 022c13c..01d537a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKMessages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKMessages.java
@@ -35,6 +35,7 @@ public class ProvSDKMessages extends NLS {
 	public static String ProvisioningPreferencePage_NeverOpenWizard;
 	public static String ProvisioningPreferencePage_OpenWizardIfInvalid;
 	public static String ProvisioningPreferencePage_PromptToOpenWizard;
+	public static String ProvisioningPreferencePage_UninstallUpdateLink;
 	public static String ProvSDKUIActivator_ErrorSavingPrefs;
 	public static String ProvSDKUIActivator_NoSelfProfile;
 	public static String ProvSDKUIActivator_OpenWizardAnyway;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKUIActivator.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKUIActivator.java
index 1fd23f0..61ea6c7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKUIActivator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/ProvSDKUIActivator.java
@@ -101,7 +101,7 @@ public class ProvSDKUIActivator extends AbstractUIPlugin {
 		return ProvisioningUI.getDefaultUI();
 	}
 
-	private Policy getPolicy() {
+	Policy getPolicy() {
 		return getProvisioningUI().getPolicy();
 	}
 
@@ -140,7 +140,7 @@ public class ProvSDKUIActivator extends AbstractUIPlugin {
 	}
 
 	private IAgentLocation getAgentLocation() {
-		ServiceReference ref = getContext().getServiceReference(IAgentLocation.SERVICE_NAME);
+		ServiceReference<?> ref = getContext().getServiceReference(IAgentLocation.SERVICE_NAME);
 		if (ref == null)
 			return null;
 		IAgentLocation location = (IAgentLocation) getContext().getService(ref);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/RevertProfilePageExtensionFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/RevertProfilePageExtensionFactory.java
new file mode 100644
index 0000000..74824d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/RevertProfilePageExtensionFactory.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.ui.sdk;
+
+import org.eclipse.core.runtime.IExecutableExtensionFactory;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.p2.ui.RevertProfilePage;
+import org.osgi.framework.Bundle;
+
+public class RevertProfilePageExtensionFactory implements IExecutableExtensionFactory {
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.IExecutableExtensionFactory#create()
+	 */
+	public Object create() {
+		Bundle bundle = Platform.getBundle("org.eclipse.compare"); //$NON-NLS-1$
+		if (bundle == null) {
+			return new RevertProfilePage();
+		}
+		return new RevertProfilePageWithCompare();
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties
index 03d9528..19395ce 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/messages.properties
@@ -24,6 +24,7 @@ ProvisioningPreferencePage_ShowAllVersions=Show all &versions of available softw
 ProvisioningPreferencePage_NeverOpenWizard=&Report the problems and do not open the wizard
 ProvisioningPreferencePage_OpenWizardIfInvalid=When software selected for an install wizard may not be compatible
 ProvisioningPreferencePage_PromptToOpenWizard=As&k me what to do when it happens
+ProvisioningPreferencePage_UninstallUpdateLink=<a>Uninstall or update</a> software that is already installed
 SDKPolicy_PrefPageName=Available Software Sites
 UpdateHandler_NoSitesMessage=There are no update sites to search.  Do you wish to open the "Available Software Sites" preferences?
 UpdateHandler_NoSitesTitle=No Updates Found
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/PreferenceInitializer.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/PreferenceInitializer.java
index 3c63cf0..d1bfc9b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/PreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/PreferenceInitializer.java
@@ -57,7 +57,7 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 	}
 
 	private static IAgentLocation getDefaultAgentLocation() {
-		ServiceReference reference = ProvSDKUIActivator.getContext().getServiceReference(IAgentLocation.SERVICE_NAME);
+		ServiceReference<?> reference = ProvSDKUIActivator.getContext().getServiceReference(IAgentLocation.SERVICE_NAME);
 		if (reference == null)
 			return null;
 		IAgentLocation result = (IAgentLocation) ProvSDKUIActivator.getContext().getService(reference);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/ProvisioningPreferencePage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/ProvisioningPreferencePage.java
index 0df8aa8..7a49f11 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/ProvisioningPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui.sdk/src/org/eclipse/equinox/internal/p2/ui/sdk/prefs/ProvisioningPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.equinox.internal.p2.ui.sdk.prefs;
 
 import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
 import org.eclipse.equinox.internal.p2.ui.sdk.*;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialogWithToggle;
@@ -91,6 +92,16 @@ public class ProvisioningPreferencePage extends PreferencePage implements IWorkb
 		gd.horizontalSpan = 3;
 		promptOnFailedPlan.setLayoutData(gd);
 
+		//Link to installed software page
+		//See https://bugs.eclipse.org/bugs/show_bug.cgi?id=313242
+		Link link = new Link(container, SWT.PUSH);
+		link.setText(ProvSDKMessages.ProvisioningPreferencePage_UninstallUpdateLink);
+		link.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				ProvUI.openInstallationDialog(event);
+			}
+		});
+
 		initialize();
 
 		Dialog.applyDialogFont(container);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.ui/META-INF/MANIFEST.MF
index 938ba4b..87e9e31 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/META-INF/MANIFEST.MF
@@ -2,20 +2,24 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.p2.ui;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.ui.ProvUIActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.equinox.internal.p2.ui;x-friends:="org.eclipse.equinox.p2.ui.admin,org.eclipse.pde.ui,org.eclipse.equinox.p2.ui.sdk",
+Export-Package: org.eclipse.equinox.internal.p2.ui;
+  x-friends:="org.eclipse.equinox.p2.ui.admin,
+   org.eclipse.pde.ui,
+   org.eclipse.equinox.p2.ui.sdk,
+   org.eclipse.equinox.p2.ui.rcp, org.eclipse.equinox.p2.ui.importexport",
  org.eclipse.equinox.internal.p2.ui.actions;x-friends:="org.eclipse.equinox.p2.ui.admin,org.eclipse.equinox.p2.ui.sdk.scheduler",
- org.eclipse.equinox.internal.p2.ui.dialogs;x-friends:="org.eclipse.equinox.p2.ui.admin,org.eclipse.equinox.p2.ui.sdk.scheduler,org.eclipse.pde.ui",
+ org.eclipse.equinox.internal.p2.ui.dialogs;x-friends:="org.eclipse.equinox.p2.ui.admin,org.eclipse.equinox.p2.ui.sdk.scheduler,org.eclipse.pde.ui,org.eclipse.equinox.p2.ui.importexport",
  org.eclipse.equinox.internal.p2.ui.model;
   x-friends:="org.eclipse.equinox.internal.p2.ui.analysis,
    org.eclipse.equinox.p2.ui.admin,
    org.eclipse.equinox.p2.ui.sdk.scheduler,
-   org.eclipse.equinox.p2.ui.sdk",
+   org.eclipse.equinox.p2.ui.sdk, org.eclipse.equinox.p2.ui.importexport",
  org.eclipse.equinox.internal.p2.ui.query;x-friends:="org.eclipse.equinox.internal.p2.ui.analysis,org.eclipse.equinox.p2.ui.admin",
- org.eclipse.equinox.internal.p2.ui.viewers;x-friends:="org.eclipse.equinox.p2.ui.admin,org.eclipse.equinox.p2.ui.sdk.scheduler",
+ org.eclipse.equinox.internal.p2.ui.viewers;x-friends:="org.eclipse.equinox.p2.ui.admin,org.eclipse.equinox.p2.ui.sdk.scheduler,org.eclipse.equinox.p2.ui.importexport",
  org.eclipse.equinox.p2.ui;version="2.0.0"
 Require-Bundle: org.eclipse.ui;bundle-version="3.6.0",
  org.eclipse.core.runtime,
@@ -25,12 +29,12 @@ Import-Package: com.ibm.icu.text,
  javax.xml.parsers,
  org.eclipse.equinox.internal.p2.artifact.repository,
  org.eclipse.equinox.internal.p2.core.helpers,
+ org.eclipse.equinox.internal.p2.director,
  org.eclipse.equinox.internal.p2.metadata,
  org.eclipse.equinox.internal.p2.metadata.repository,
  org.eclipse.equinox.internal.p2.repository.helpers,
  org.eclipse.equinox.internal.provisional.configurator,
  org.eclipse.equinox.internal.provisional.p2.core.eventbus,
- org.eclipse.equinox.internal.provisional.p2.director,
  org.eclipse.equinox.internal.provisional.p2.repository,
  org.eclipse.equinox.p2.core;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.core.spi;version="[2.0.0,3.0.0)",
@@ -45,7 +49,7 @@ Import-Package: com.ibm.icu.text,
  org.eclipse.equinox.p2.repository.artifact;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.p2.repository.metadata;version="[2.0.0,3.0.0)",
  org.eclipse.osgi.util;version="1.1.0",
- org.osgi.framework;version="1.3.0",
+ org.osgi.framework;version="1.6.0",
  org.osgi.service.packageadmin;version="1.2.0",
  org.w3c.dom,
  org.xml.sax
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/OSGI-INF/repositoryTracker_component.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui/OSGI-INF/repositoryTracker_component.xml
index f4c2c73..89704e4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/OSGI-INF/repositoryTracker_component.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/OSGI-INF/repositoryTracker_component.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.equinox.p2.ui.repositoryTracker">
-   <implementation class="org.eclipse.equinox.internal.p2.ui.ColocatedRepositoryTracker"/>
+   <implementation class="org.eclipse.equinox.internal.p2.ui.RepositoryTrackerComponent"/>
    <service>
-      <provide interface="org.eclipse.equinox.p2.operations.RepositoryTracker"/>
+      <provide interface="org.eclipse.equinox.p2.core.spi.IAgentServiceFactory"/>
    </service>
+   <property name="p2.agent.servicename" type="String" value="org.eclipse.equinox.p2.operations.RepositoryTracker"/>
 </scr:component>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui/build.properties
index fb8111b..246d747 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/icons/obj/iu_disabled_patch_obj.gif b/eclipse/plugins/org.eclipse.equinox.p2.ui/icons/obj/iu_disabled_patch_obj.gif
new file mode 100644
index 0000000..196b83d
Binary files /dev/null and b/eclipse/plugins/org.eclipse.equinox.p2.ui/icons/obj/iu_disabled_patch_obj.gif differ
diff --git a/eclipse/plugins/org.eclipse.update.ui/icons/obj16/efix_obj.gif b/eclipse/plugins/org.eclipse.equinox.p2.ui/icons/obj/iu_patch_obj.gif
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/plugins/org.eclipse.update.ui/icons/obj16/efix_obj.gif
copy to eclipse/plugins/org.eclipse.equinox.p2.ui/icons/obj/iu_patch_obj.gif
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui/plugin.properties
index f8416d6..47e53fd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2007, 2009 IBM Corporation and others.
+#  Copyright (c) 2007, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.ui/pom.xml
index f0b782e..dc127af 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.ui</artifactId>
-  <version>2.0.0.qualifier</version>
+  <version>2.1.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ColocatedRepositoryTracker.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ColocatedRepositoryTracker.java
index 81e40fd..6ae05ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ColocatedRepositoryTracker.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ColocatedRepositoryTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -43,10 +43,6 @@ public class ColocatedRepositoryTracker extends RepositoryTracker {
 	String parsedNickname;
 	URI parsedLocation;
 
-	public ColocatedRepositoryTracker() {
-		this(ProvisioningUI.getDefaultUI());
-	}
-
 	public ColocatedRepositoryTracker(ProvisioningUI ui) {
 		this.ui = ui;
 		setArtifactRepositoryFlags(IRepositoryManager.REPOSITORIES_NON_SYSTEM);
@@ -216,17 +212,8 @@ public class ColocatedRepositoryTracker extends RepositoryTracker {
 		return null;
 	}
 
-	/*
-	 * Overridden to do a better job of finding duplicates
-	 * (non-Javadoc)
-	 * @see org.eclipse.equinox.p2.operations.RepositoryTracker#validateRepositoryLocation(org.eclipse.equinox.p2.operations.ProvisioningSession, java.net.URI, boolean, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public IStatus validateRepositoryLocation(ProvisioningSession session, URI location, boolean contactRepositories, IProgressMonitor monitor) {
-		IStatus status = super.validateRepositoryLocation(session, location, contactRepositories, monitor);
-		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=268580
-		if (status.isOK() && getMetadataRepositoryManager().contains(location))
-			return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, STATUS_INVALID_REPOSITORY_LOCATION, ProvUIMessages.RepositoryTracker_DuplicateLocation, null);
-		return status;
-
+	@Override
+	protected boolean contains(URI location, ProvisioningSession session) {
+		return ProvUI.getMetadataRepositoryManager(session).contains(location);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementQueryDescriptor.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementQueryDescriptor.java
index 986578d..224479d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementQueryDescriptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementQueryDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementWrapper.java
index df4ebf7..c8a5622 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ElementWrapper.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/IProvHelpContextIds.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/IProvHelpContextIds.java
index 4a11ad1..6112ef2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/IProvHelpContextIds.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/IProvHelpContextIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUI.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUI.java
index edbfb0b..e37c2ff 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUI.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -68,7 +68,6 @@ public class ProvUI {
 	public static final long SIZE_UNKNOWN = -1L;
 
 	private static IUColumnConfig[] columnConfig;
-	private static QueryProvider queryProvider;
 
 	// These values rely on the command markup in org.eclipse.ui.ide that defines the update commands
 	private static final String UPDATE_MANAGER_FIND_AND_INSTALL = "org.eclipse.ui.update.findAndInstallUpdates"; //$NON-NLS-1$
@@ -125,6 +124,7 @@ public class ProvUI {
 		queryContext.setShowInstallChildren(policy.getShowDrilldownRequirements());
 		queryContext.setShowProvisioningPlanChildren(policy.getShowDrilldownRequirements());
 		queryContext.setUseCategories(policy.getGroupByCategory());
+		queryContext.setFilterOnEnv(policy.getFilterOnEnv());
 		return queryContext;
 	}
 
@@ -149,14 +149,6 @@ public class ProvUI {
 		return PlatformUI.getWorkbench().getModalDialogShellProvider().getShell();
 	}
 
-	public static void addProvisioningListener(ProvUIProvisioningListener listener) {
-		ProvUIActivator.getDefault().addProvisioningListener(listener);
-	}
-
-	public static void removeProvisioningListener(ProvUIProvisioningListener listener) {
-		ProvUIActivator.getDefault().removeProvisioningListener(listener);
-	}
-
 	public static void openUpdateManagerInstaller(Event event) {
 		runCommand(UPDATE_MANAGER_FIND_AND_INSTALL, ProvUIMessages.UpdateManagerCompatibility_UnableToOpenFindAndInstall, event);
 	}
@@ -175,12 +167,6 @@ public class ProvUI {
 		return command.isDefined();
 	}
 
-	public static QueryProvider getQueryProvider() {
-		if (queryProvider == null)
-			queryProvider = new QueryProvider(ProvUIActivator.getDefault().getProvisioningUI());
-		return queryProvider;
-	}
-
 	private static void runCommand(String commandId, String errorMessage, Event event) {
 		ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
 		Command command = commandService.getCommand(commandId);
@@ -211,15 +197,6 @@ public class ProvUI {
 	}
 
 	/**
-	 * For testing only
-	 * @noreference
-	 * @param provider
-	 */
-	public static void setQueryProvider(QueryProvider provider) {
-		queryProvider = provider;
-	}
-
-	/**
 	 * Get sizing information about the specified plan.
 	 * 
 	 * @param engine the engine 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIActivator.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIActivator.java
index 9075aa4..6341f41 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIActivator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ import java.net.URL;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
-import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
+import org.eclipse.equinox.internal.p2.core.helpers.Tracing;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.engine.IProfileRegistry;
 import org.eclipse.equinox.p2.operations.ProvisioningSession;
@@ -33,7 +33,7 @@ import org.osgi.service.packageadmin.PackageAdmin;
 public class ProvUIActivator extends AbstractUIPlugin {
 	private static BundleContext context;
 	private static PackageAdmin packageAdmin = null;
-	private static ServiceReference packageAdminRef = null;
+	private static ServiceReference<?> packageAdminRef = null;
 	private static ProvUIActivator plugin;
 	public static final String PLUGIN_ID = "org.eclipse.equinox.p2.ui"; //$NON-NLS-1$
 
@@ -102,24 +102,14 @@ public class ProvUIActivator extends AbstractUIPlugin {
 		}
 	}
 
-	public void addProvisioningListener(ProvUIProvisioningListener listener) {
-		getProvisioningEventBus().addListener(listener);
-	}
-
-	public IProvisioningEventBus getProvisioningEventBus() {
-		return ProvUI.getProvisioningEventBus(getSession());
-	}
-
-	public void removeProvisioningListener(ProvUIProvisioningListener listener) {
-		getProvisioningEventBus().removeListener(listener);
-	}
-
 	protected void initializeImageRegistry(ImageRegistry reg) {
 		createImageDescriptor(ProvUIImages.IMG_METADATA_REPOSITORY, reg);
 		createImageDescriptor(ProvUIImages.IMG_ARTIFACT_REPOSITORY, reg);
 		createImageDescriptor(ProvUIImages.IMG_IU, reg);
 		createImageDescriptor(ProvUIImages.IMG_DISABLED_IU, reg);
 		createImageDescriptor(ProvUIImages.IMG_UPDATED_IU, reg);
+		createImageDescriptor(ProvUIImages.IMG_PATCH_IU, reg);
+		createImageDescriptor(ProvUIImages.IMG_DISABLED_PATCH_IU, reg);
 		createImageDescriptor(ProvUIImages.IMG_CATEGORY, reg);
 		createImageDescriptor(ProvUIImages.IMG_PROFILE, reg);
 		createImageDescriptor(ProvUIImages.WIZARD_BANNER_INSTALL, reg);
@@ -138,6 +128,9 @@ public class ProvUIActivator extends AbstractUIPlugin {
 	}
 
 	public ProvisioningUI getProvisioningUI() {
+		if (Tracing.DEBUG_DEFAULT_UI)
+			Tracing.debug("Falling back to default provisioning UI"); //$NON-NLS-1$
+
 		if (ui == null) {
 			IProvisioningAgent agent = (IProvisioningAgent) ServiceHelper.getService(getContext(), IProvisioningAgent.SERVICE_NAME);
 			session = new ProvisioningSession(agent);
@@ -148,8 +141,4 @@ public class ProvUIActivator extends AbstractUIPlugin {
 		}
 		return ui;
 	}
-
-	public ProvisioningSession getSession() {
-		return session;
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIAdapterFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIAdapterFactory.java
index 922e739..6faac08 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIImages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIImages.java
index 40ab3fe..050ce6b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIImages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIImages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -39,6 +39,8 @@ public class ProvUIImages {
 	public final static String IMG_IU = "obj/iu_obj.gif"; //$NON-NLS-1$
 	public final static String IMG_DISABLED_IU = "obj/iu_disabled_obj.gif"; //$NON-NLS-1$
 	public final static String IMG_UPDATED_IU = "obj/iu_update_obj.gif"; //$NON-NLS-1$
+	public final static String IMG_PATCH_IU = "obj/iu_patch_obj.gif"; //$NON-NLS-1$
+	public final static String IMG_DISABLED_PATCH_IU = "obj/iu_disabled_patch_obj.gif"; //$NON-NLS-1$
 	public final static String IMG_PROFILE = "obj/profile_obj.gif"; //$NON-NLS-1$
 	public final static String IMG_CATEGORY = "obj/category_obj.gif"; //$NON-NLS-1$
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
index 8a0fb51..bd31e0a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,8 @@ public class ProvUIMessages extends NLS {
 	public static String RevertProfilePage_RevertTooltip;
 	public static String RevertProfilePage_CompareLabel;
 	public static String RevertProfilePage_CompareTooltip;
+	public static String RevertProfilePage_ProfileTagColumn;
+	public static String RevertProfilePage_ProfileTimestampColumn;
 	public static String IUCopyrightPropertyPage_NoCopyright;
 	public static String IUCopyrightPropertyPage_ViewLinkLabel;
 	public static String IUDetailsLabelProvider_KB;
@@ -156,6 +158,7 @@ public class ProvUIMessages extends NLS {
 	public static String ResolutionWizardPage_ErrorStatus;
 	public static String ResolutionWizardPage_NoSelections;
 	public static String ResolutionWizardPage_WarningInfoStatus;
+	public static String ResolutionStatusPage_ErrorIULocked;
 
 	// Dialogs
 	public static String AddRepositoryDialog_InvalidURL;
@@ -170,6 +173,7 @@ public class ProvUIMessages extends NLS {
 	public static String AvailableIUsPage_AddButton;
 	public static String AvailableIUsPage_AllSites;
 	public static String AvailableIUsPage_Description;
+	public static String AvailableIUsPage_FilterOnEnvCheckBox;
 	public static String AvailableIUsPage_GotoInstallInfo;
 	public static String AvailableIUsPage_GotoProperties;
 	public static String AvailableIUsPage_GroupByCategory;
@@ -206,6 +210,7 @@ public class ProvUIMessages extends NLS {
 	public static String ProvUI_InstallDialogError;
 	public static String ProvUI_NameColumnTitle;
 	public static String ProvUI_IdColumnTitle;
+	public static String ProvUI_ProviderColumnTitle;
 	public static String ProvUI_VersionColumnTitle;
 	public static String ProvUI_WarningTitle;
 	public static String ProvUIMessages_NotAccepted_EnterFor_0;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIProvisioningListener.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIProvisioningListener.java
index 05972f6..c490287 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIProvisioningListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIProvisioningListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@ import org.eclipse.equinox.internal.provisional.p2.core.eventbus.SynchronousProv
 import org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent;
 import org.eclipse.equinox.p2.engine.IProfileEvent;
 import org.eclipse.equinox.p2.repository.IRepository;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
 
 /**
  * ProvisioningListener which handles event batching and other
@@ -35,10 +34,12 @@ public abstract class ProvUIProvisioningListener implements SynchronousProvision
 
 	int eventTypes = 0;
 	String name;
+	private ProvisioningOperationRunner runner;
 
-	public ProvUIProvisioningListener(String name, int eventTypes) {
+	public ProvUIProvisioningListener(String name, int eventTypes, ProvisioningOperationRunner runner) {
 		this.name = name;
 		this.eventTypes = eventTypes;
+		this.runner = runner;
 	}
 
 	public void notify(EventObject o) {
@@ -51,7 +52,7 @@ public abstract class ProvUIProvisioningListener implements SynchronousProvision
 			if (Tracing.DEBUG_EVENTS_CLIENT)
 				Tracing.debug("Batch Eventing:  Batch Ended. " + getReceiverString()); //$NON-NLS-1$
 			// A batch operation completed.  Refresh.
-			if (ProvisioningUI.getDefaultUI().getOperationRunner().eventBatchCount <= 0) {
+			if (runner.eventBatchCount <= 0) {
 				if (Tracing.DEBUG_EVENTS_CLIENT)
 					Tracing.debug("Batch Eventing Complete." + getReceiverString()); //$NON-NLS-1$
 				if (event.getEvent() == null && event.update()) {
@@ -78,7 +79,7 @@ public abstract class ProvUIProvisioningListener implements SynchronousProvision
 					handleRepositoryEvent(innerEvent);
 				}
 			}
-		} else if (ProvisioningUI.getDefaultUI().getOperationRunner().eventBatchCount > 0) {
+		} else if (runner.eventBatchCount > 0) {
 			// ignore raw events during a batch
 			if (Tracing.DEBUG_EVENTS_CLIENT)
 				Tracing.debug(name + " Ignoring: " + o.toString()); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningOperationRunner.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningOperationRunner.java
index 0abe634..3ae621e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningOperationRunner.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvisioningOperationRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -8,7 +8,6 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.equinox.internal.p2.ui;
 
 import java.io.IOException;
@@ -68,7 +67,7 @@ public class ProvisioningOperationRunner {
 	 * 
 	 * @param restartPolicy
 	 */
-	private void requestRestart(final int restartPolicy) {
+	void requestRestart(final int restartPolicy) {
 		// Global override of restart (used in test cases).
 		if (suppressRestart)
 			return;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryProvider.java
index 8223eb2..3bee4d9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,8 @@
 package org.eclipse.equinox.internal.p2.ui;
 
 import java.net.URI;
-import java.util.Collection;
+import java.util.*;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
 import org.eclipse.equinox.internal.p2.ui.model.*;
 import org.eclipse.equinox.internal.p2.ui.query.*;
 import org.eclipse.equinox.p2.engine.IProfile;
@@ -47,6 +48,39 @@ public class QueryProvider {
 		this.ui = ui;
 	}
 
+	/*
+	 * Return a map of key/value pairs which are set to the environment settings
+	 * for the given profile. May return <code>null</code> or an empty <code>Map</code>
+	 * if the settings cannot be obtained.
+	 */
+	private static Map<String, String> getEnvFromProfile(IProfile profile) {
+		String environments = profile.getProperty(IProfile.PROP_ENVIRONMENTS);
+		if (environments == null)
+			return null;
+		Map<String, String> result = new HashMap<String, String>();
+		for (StringTokenizer tokenizer = new StringTokenizer(environments, ","); tokenizer.hasMoreElements();) { //$NON-NLS-1$
+			String entry = tokenizer.nextToken();
+			int i = entry.indexOf('=');
+			String key = entry.substring(0, i).trim();
+			String value = entry.substring(i + 1).trim();
+			result.put(key, value);
+		}
+		return result;
+	}
+
+	// If we are supposed to filter out the results based on the environment settings in
+	// the target profile then create a compound query otherwise just return the given query
+	private IQuery<IInstallableUnit> createEnvironmentFilterQuery(IUViewQueryContext context, IProfile profile, IQuery<IInstallableUnit> query) {
+		if (!context.getFilterOnEnv())
+			return query;
+		Map<String, String> environment = getEnvFromProfile(profile);
+		if (environment == null)
+			return query;
+		IInstallableUnit envIU = InstallableUnit.contextIU(environment);
+		IQuery<IInstallableUnit> filterQuery = QueryUtil.createMatchQuery("filter == null || $0 ~= filter", envIU); //$NON-NLS-1$
+		return QueryUtil.createCompoundQuery(query, filterQuery, true);
+	}
+
 	public ElementQueryDescriptor getQueryDescriptor(final QueriedElement element) {
 		// Initialize queryable, queryContext, and queryType from the element.
 		// In some cases we override this.
@@ -79,6 +113,9 @@ public class QueryProvider {
 				IQuery<IInstallableUnit> topLevelQuery = policy.getVisibleAvailableIUQuery();
 				IQuery<IInstallableUnit> categoryQuery = QueryUtil.createIUCategoryQuery();
 
+				topLevelQuery = createEnvironmentFilterQuery(context, targetProfile, topLevelQuery);
+				categoryQuery = createEnvironmentFilterQuery(context, targetProfile, categoryQuery);
+
 				// Showing child IU's of a group of repositories, or of a single repository
 				if (element instanceof MetadataRepositories || element instanceof MetadataRepositoryElement) {
 					if (context.getViewType() == IUViewQueryContext.AVAILABLE_VIEW_FLAT || !context.getUseCategories()) {
@@ -108,6 +145,7 @@ public class QueryProvider {
 					} else {
 						memberOfCategoryQuery = QueryUtil.createIUCategoryMemberQuery(((IIUElement) element).getIU());
 					}
+					memberOfCategoryQuery = createEnvironmentFilterQuery(context, targetProfile, memberOfCategoryQuery);
 					availableIUWrapper = new AvailableIUWrapper(queryable, element, true, drillDownTheChildren);
 					if (targetProfile != null)
 						availableIUWrapper.markInstalledIUs(targetProfile, hideInstalled);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableArtifactRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableArtifactRepositoryManager.java
index a2e5087..0ec3ee9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableArtifactRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableArtifactRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableMetadataRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableMetadataRepositoryManager.java
index bdfef68..7338078 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableMetadataRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableMetadataRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableRepositoryManager.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableRepositoryManager.java
index 5b1d675..d066bb3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableRepositoryManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/QueryableRepositoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryLocationQuery.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryLocationQuery.java
index 43f016b..aefb10b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryLocationQuery.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryLocationQuery.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationBeginningEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationBeginningEvent.java
index 66aca16..bea3712 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationBeginningEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationBeginningEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationEndingEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationEndingEvent.java
index ec3b13a..b730682 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationEndingEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryOperationEndingEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryTrackerComponent.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryTrackerComponent.java
new file mode 100644
index 0000000..fa416c2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/RepositoryTrackerComponent.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2011 EclipseSource Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     EclipseSource Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.p2.ui;
+
+import org.eclipse.equinox.p2.core.IProvisioningAgent;
+import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory;
+import org.eclipse.equinox.p2.operations.RepositoryTracker;
+import org.eclipse.equinox.p2.ui.ProvisioningUI;
+
+/**
+ * Component that provides a factory that can create and initialize
+ * {@link RepositoryTracker} instances.
+ */
+public class RepositoryTrackerComponent implements IAgentServiceFactory {
+
+	public Object createService(IProvisioningAgent agent) {
+		ProvisioningUI ui = (ProvisioningUI) agent.getService(ProvisioningUI.class.getName());
+		if (ui == null)
+			return null;
+		return new ColocatedRepositoryTracker(ui);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/UpdateManagerCompatibility.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/UpdateManagerCompatibility.java
index 1effbe3..7b1b9a3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/UpdateManagerCompatibility.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/UpdateManagerCompatibility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ValidationDialogServiceUI.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ValidationDialogServiceUI.java
index fe2d060..b731d0e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ValidationDialogServiceUI.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ValidationDialogServiceUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ColocatedRepositoryAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ColocatedRepositoryAction.java
index 2bbcacc..c83d12e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ColocatedRepositoryAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ColocatedRepositoryAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ExistingIUInProfileAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ExistingIUInProfileAction.java
index 2fd5970..58aeec6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ExistingIUInProfileAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ExistingIUInProfileAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/InstallAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/InstallAction.java
deleted file mode 100644
index 8d91332..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/InstallAction.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *     IBM Corporation - initial API and implementation
- *     Sonatype, Inc. - ongoing development
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.p2.ui.actions;
-
-import java.util.Collection;
-import org.eclipse.equinox.internal.p2.ui.ProvUI;
-import org.eclipse.equinox.internal.p2.ui.model.*;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.operations.InstallOperation;
-import org.eclipse.equinox.p2.operations.ProfileChangeOperation;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
-import org.eclipse.jface.viewers.ISelectionProvider;
-
-public class InstallAction extends ProfileModificationAction {
-
-	public InstallAction(ProvisioningUI ui, ISelectionProvider selectionProvider, String profileId) {
-		super(ui, ProvUI.INSTALL_COMMAND_LABEL, selectionProvider, profileId);
-		setToolTipText(ProvUI.INSTALL_COMMAND_TOOLTIP);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.ui.actions.ProfileModificationAction#isEnabledFor(java.lang.Object[])
-	 */
-	protected boolean isEnabledFor(Object[] selectionArray) {
-		if (selectionArray.length == 0)
-			return false;
-		// We allow non-IU's to be selected at this point, but there
-		// must be at least one installable unit selected that is
-		// selectable
-		for (int i = 0; i < selectionArray.length; i++) {
-			if (selectionArray[i] instanceof InstalledIUElement && isSelectable((IIUElement) selectionArray[i]))
-				return true;
-			IInstallableUnit iu = ProvUI.getAdapter(selectionArray[i], IInstallableUnit.class);
-			if (iu != null && isSelectable(iu))
-				return true;
-		}
-		return false;
-	}
-
-	/*
-	 * Overridden to reject categories and nested IU's (parent is a non-category IU)
-	 * (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.provisional.p2.ui.actions.ProfileModificationAction#isSelectable(org.eclipse.equinox.internal.p2.ui.model.IUElement)
-	 */
-	protected boolean isSelectable(IIUElement element) {
-		return super.isSelectable(element) && !(element.getParent(element) instanceof AvailableIUElement);
-	}
-
-	protected int performAction(ProfileChangeOperation operation, Collection<IInstallableUnit> ius) {
-		return getProvisioningUI().openInstallWizard(ius, (InstallOperation) operation, null);
-	}
-
-	protected ProfileChangeOperation getProfileChangeOperation(Collection<IInstallableUnit> ius) {
-		InstallOperation op = new InstallOperation(getSession(), ius);
-		op.setProfileId(profileId);
-		//		op.setRootMarkerKey(getPolicy().getQueryContext().getVisibleInstalledIUProperty());
-		return op;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProfileModificationAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProfileModificationAction.java
index 8231c4b..31d2fa5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProfileModificationAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProfileModificationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2010 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -35,7 +35,6 @@ import org.eclipse.ui.statushandlers.StatusManager;
 public abstract class ProfileModificationAction extends ProvisioningAction {
 	public static final int ACTION_NOT_RUN = -1;
 	String profileId;
-	String userChosenProfileId;
 	int result = ACTION_NOT_RUN;
 
 	protected ProfileModificationAction(ProvisioningUI ui, String text, ISelectionProvider selectionProvider, String profileId) {
@@ -48,7 +47,7 @@ public abstract class ProfileModificationAction extends ProvisioningAction {
 	public void run() {
 		Collection<IInstallableUnit> ius = getSelectedIUs();
 		// No ius or no profile?
-		if (profileId == null || ius.size() == 0) {
+		if (isInvalidProfileId() || ius.size() == 0) {
 			ProvUI.reportStatus(getNoProfileOrSelectionStatus(profileId, ius), StatusManager.BLOCK);
 			runCanceled();
 			return;
@@ -56,6 +55,10 @@ public abstract class ProfileModificationAction extends ProvisioningAction {
 		run(ius, profileId);
 	}
 
+	protected boolean isInvalidProfileId() {
+		return profileId == null;
+	}
+
 	public IProfile getProfile() {
 		String id = profileId == null ? ui.getProfileId() : profileId;
 		return ProvUI.getProfileRegistry(ui.getSession()).getProfile(id);
@@ -81,7 +84,6 @@ public abstract class ProfileModificationAction extends ProvisioningAction {
 							public void run() {
 								if (validateOperation(operation))
 									performAction(operation, ius);
-								userChosenProfileId = null;
 							}
 						});
 					}
@@ -170,10 +172,6 @@ public abstract class ProfileModificationAction extends ProvisioningAction {
 		return getProvisioningUI().getLicenseManager();
 	}
 
-	protected QueryProvider getQueryProvider() {
-		return ProvUI.getQueryProvider();
-	}
-
 	protected final void checkEnablement(Object[] selections) {
 		if (isEnabledFor(selections)) {
 			setEnabled(!getProvisioningUI().hasScheduledOperations());
@@ -202,10 +200,9 @@ public abstract class ProfileModificationAction extends ProvisioningAction {
 		return profile.getInstallableUnitProperty(iu, propertyName);
 	}
 
-	private void runCanceled() {
+	protected void runCanceled() {
 		// The action was canceled, do any cleanup needed before
 		// it is run again.
-		userChosenProfileId = null;
 		result = Window.CANCEL;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/PropertyDialogAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/PropertyDialogAction.java
index b521e17..003a4e7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/PropertyDialogAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/PropertyDialogAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProvisioningAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProvisioningAction.java
index 00a40e2..f9568e2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProvisioningAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/ProvisioningAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2008 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RefreshAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RefreshAction.java
index d3061ac..06bed4a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RefreshAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RefreshAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RemoveColocatedRepositoryAction.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RemoveColocatedRepositoryAction.java
index f794bb9..2b92fb3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RemoveColocatedRepositoryAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/actions/RemoveColocatedRepositoryAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java
index 4f3fc87..e956b04 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AddRepositoryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ApplyProfileChangesDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ApplyProfileChangesDialog.java
index 57cd024..7e91542 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ApplyProfileChangesDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ApplyProfileChangesDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUGroup.java
index aab30eb..abce9dd 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2010 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -131,6 +131,9 @@ public class AvailableIUGroup extends StructuredIUGroup {
 		filteredTree = new DelayedFilterCheckboxTree(parent, SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, filter, getPreFilterJobProvider());
 		final TreeViewer availableIUViewer = filteredTree.getViewer();
 
+		availableIUViewer.getTree().setFont(parent.getFont());
+		filteredTree.getFilterControl().setFont(parent.getFont());
+
 		// If the user expanded or collapsed anything while we were loading a repo
 		// in the background, we would not want to disrupt their work by making
 		// a newly loaded visible and expanding it.  Setting the load job to null 
@@ -168,7 +171,7 @@ public class AvailableIUGroup extends StructuredIUGroup {
 		// after content has been retrieved.
 		filteredTree.contentProviderSet(contentProvider);
 
-		final StructuredViewerProvisioningListener listener = new StructuredViewerProvisioningListener(getClass().getName(), availableIUViewer, ProvUIProvisioningListener.PROV_EVENT_METADATA_REPOSITORY) {
+		final StructuredViewerProvisioningListener listener = new StructuredViewerProvisioningListener(getClass().getName(), availableIUViewer, ProvUIProvisioningListener.PROV_EVENT_METADATA_REPOSITORY, getProvisioningUI().getOperationRunner()) {
 			protected void repositoryAdded(final RepositoryEvent event) {
 				makeRepositoryVisible(event.getRepositoryLocation());
 			}
@@ -185,11 +188,11 @@ public class AvailableIUGroup extends StructuredIUGroup {
 
 			}
 		};
-		ProvUIActivator.getDefault().addProvisioningListener(listener);
+		ProvUI.getProvisioningEventBus(getProvisioningUI().getSession()).addListener(listener);
 
 		availableIUViewer.getControl().addDisposeListener(new DisposeListener() {
 			public void widgetDisposed(DisposeEvent e) {
-				ProvUIActivator.getDefault().removeProvisioningListener(listener);
+				ProvUI.getProvisioningEventBus(getProvisioningUI().getSession()).removeListener(listener);
 			}
 		});
 		updateAvailableViewState();
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUPatternFilter.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUPatternFilter.java
index 502f86a..d663c37 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUPatternFilter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUPatternFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java
index a2fa766..84f5e93 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/AvailableIUsPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,7 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
 	AvailableIUGroup availableIUGroup;
 	Composite availableIUButtonBar;
 	Link installLink;
-	Button useCategoriesCheckbox, hideInstalledCheckbox, showLatestVersionsCheckbox, resolveAllCheckbox;
+	Button useCategoriesCheckbox, hideInstalledCheckbox, showLatestVersionsCheckbox, resolveAllCheckbox, filterOnEnvCheckBox;
 	SashForm sashForm;
 	IUColumnConfig nameColumn, versionColumn;
 	StructuredViewerProvisioningListener profileListener;
@@ -277,6 +277,20 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
 		}, ProvUIMessages.AvailableIUsPage_GotoInstallInfo);
 		installLink.setLayoutData(gd);
 
+		filterOnEnvCheckBox = new Button(parent, SWT.CHECK);
+		filterOnEnvCheckBox.setText(ProvUIMessages.AvailableIUsPage_FilterOnEnvCheckBox);
+		filterOnEnvCheckBox.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+				updateQueryContext();
+				availableIUGroup.updateAvailableViewState();
+			}
+
+			public void widgetSelected(SelectionEvent e) {
+				updateQueryContext();
+				availableIUGroup.updateAvailableViewState();
+			}
+		});
+
 		if (getPolicy().getRepositoriesVisible()) {
 			// Checkbox
 			resolveAllCheckbox = new Button(parent, SWT.CHECK);
@@ -349,6 +363,7 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
 			queryContext.setViewType(IUViewQueryContext.AVAILABLE_VIEW_BY_CATEGORY);
 		else
 			queryContext.setViewType(IUViewQueryContext.AVAILABLE_VIEW_FLAT);
+		queryContext.setFilterOnEnv(filterOnEnvCheckBox.getSelection());
 	}
 
 	private Link createLink(Composite parent, IAction action, String text) {
@@ -389,6 +404,7 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
 		hideInstalledCheckbox.setSelection(queryContext.getHideAlreadyInstalled());
 		showLatestVersionsCheckbox.setSelection(queryContext.getShowLatestVersionsOnly());
 		useCategoriesCheckbox.setSelection(queryContext.shouldGroupByCategories());
+		filterOnEnvCheckBox.setSelection(queryContext.getFilterOnEnv());
 		availableIUGroup.updateAvailableViewState();
 		if (initialSelections != null)
 			availableIUGroup.setChecked(initialSelections);
@@ -617,7 +633,7 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
 		// We might need to adjust the content of the available IU group's viewer
 		// according to installation changes.  We want to be very selective about refreshing,
 		// because the viewer has its own listeners installed.
-		profileListener = new StructuredViewerProvisioningListener(getClass().getName(), availableIUGroup.getStructuredViewer(), ProvUIProvisioningListener.PROV_EVENT_PROFILE) {
+		profileListener = new StructuredViewerProvisioningListener(getClass().getName(), availableIUGroup.getStructuredViewer(), ProvUIProvisioningListener.PROV_EVENT_PROFILE, getProvisioningUI().getOperationRunner()) {
 			protected void profileAdded(String id) {
 				// do nothing
 			}
@@ -633,12 +649,12 @@ public class AvailableIUsPage extends ProvisioningWizardPage implements ISelecta
 			}
 		};
 
-		ProvUI.addProvisioningListener(profileListener);
+		ProvUI.getProvisioningEventBus(getProvisioningUI().getSession()).addListener(profileListener);
 	}
 
 	void removeProvisioningListeners() {
 		if (profileListener != null) {
-			ProvUI.removeProvisioningListener(profileListener);
+			ProvUI.getProvisioningEventBus(getProvisioningUI().getSession()).removeListener(profileListener);
 			profileListener = null;
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ComboAutoCompleteField.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ComboAutoCompleteField.java
index 62d1124..bfd8b4a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ComboAutoCompleteField.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ComboAutoCompleteField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ContainerCheckedTreeViewer.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ContainerCheckedTreeViewer.java
index fef8274..a523de8 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ContainerCheckedTreeViewer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ContainerCheckedTreeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyHandler.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyHandler.java
index 6502568..20253df 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyHandler.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyPopup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyPopup.java
index daa80f7..14b63d7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyPopup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyPopup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyUtils.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyUtils.java
index d3e03e5..4446eba 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyUtils.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/CopyUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/DelayedFilterCheckboxTree.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/DelayedFilterCheckboxTree.java
index 296faa0..ea3bbc2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/DelayedFilterCheckboxTree.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/DelayedFilterCheckboxTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IRepositorySelectionListener.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IRepositorySelectionListener.java
index fdbdd19..a0ec961 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IRepositorySelectionListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IRepositorySelectionListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java
index 9b62a6c..bed2843 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IResolutionErrorReportingPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUDetailsGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUDetailsGroup.java
index 8ae5ffe..bae73f2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUDetailsGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUDetailsGroup.java
@@ -1,5 +1,5 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUGeneralInfoPropertyPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUGeneralInfoPropertyPage.java
index cca8915..37f70c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUGeneralInfoPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUGeneralInfoPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IULicensePropertyPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IULicensePropertyPage.java
index 2f773c7..d5755af 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IULicensePropertyPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IULicensePropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUPropertyPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUPropertyPage.java
index 5109868..c4cbaf5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/IUPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java
index 8c26069..d50b2f6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstallWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstalledIUGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstalledIUGroup.java
index d944f93..fda7156 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstalledIUGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/InstalledIUGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.dialogs;
 
-import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
 import org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener;
 import org.eclipse.equinox.internal.p2.ui.model.ProfileElement;
 import org.eclipse.equinox.internal.p2.ui.viewers.*;
@@ -45,7 +45,7 @@ public class InstalledIUGroup extends StructuredIUGroup {
 	public InstalledIUGroup(ProvisioningUI ui, final Composite parent, Font font, String profileId, IUColumnConfig[] columnConfig) {
 		super(ui, parent, font, columnConfig);
 		if (profileId == null)
-			this.profileId = ProvisioningUI.getDefaultUI().getProfileId();
+			this.profileId = ui.getProfileId();
 		else
 			this.profileId = profileId;
 		createGroupComposite(parent);
@@ -71,11 +71,11 @@ public class InstalledIUGroup extends StructuredIUGroup {
 		// Input last.
 		installedIUViewer.setInput(getInput());
 
-		final StructuredViewerProvisioningListener listener = new StructuredViewerProvisioningListener(getClass().getName(), installedIUViewer, ProvUIProvisioningListener.PROV_EVENT_IU | ProvUIProvisioningListener.PROV_EVENT_PROFILE);
-		ProvUIActivator.getDefault().addProvisioningListener(listener);
+		final StructuredViewerProvisioningListener listener = new StructuredViewerProvisioningListener(getClass().getName(), installedIUViewer, ProvUIProvisioningListener.PROV_EVENT_IU | ProvUIProvisioningListener.PROV_EVENT_PROFILE, getProvisioningUI().getOperationRunner());
+		ProvUI.getProvisioningEventBus(getProvisioningUI().getSession()).addListener(listener);
 		installedIUViewer.getControl().addDisposeListener(new DisposeListener() {
 			public void widgetDisposed(DisposeEvent e) {
-				ProvUIActivator.getDefault().removeProvisioningListener(listener);
+				ProvUI.getProvisioningEventBus(getProvisioningUI().getSession()).removeListener(listener);
 			}
 		});
 		return installedIUViewer;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java
index e178986..a3366da 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/PreselectedIUInstallWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,7 +79,6 @@ public class PreselectedIUInstallWizard extends WizardWithLicenses {
 		InstallOperation op = new InstallOperation(ui.getSession(), ElementUtils.elementsToIUs(elements));
 		op.setProfileId(getProfileId());
 		//		op.setRootMarkerKey(getRootMarkerKey());
-		op.setProvisioningContext(getProvisioningContext());
 		return op;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java
index 3175aa5..10e05ff 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningOperationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -60,6 +60,9 @@ public abstract class ProvisioningOperationWizard extends Wizard {
 		this.repoPreloadJob = job;
 		setForcePreviousAndNextButtons(true);
 		setNeedsProgressMonitor(true);
+		if (operation != null) {
+			provisioningContext = operation.getProvisioningContext();
+		}
 	}
 
 	/*
@@ -182,6 +185,9 @@ public abstract class ProvisioningOperationWizard extends Wizard {
 	protected abstract void initializeResolutionModelElements(Object[] selectedElements);
 
 	protected ProvisioningContext getProvisioningContext() {
+		if (operation != null) {
+			return operation.getProvisioningContext();
+		}
 		return new ProvisioningContext(ui.getSession().getProvisioningAgent());
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardDialog.java
index 4f650b6..1a8a4ea 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardPage.java
index 4418a01..b5759fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ProvisioningWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryManipulatorDropTarget.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryManipulatorDropTarget.java
index a44ee11..87d5b47 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryManipulatorDropTarget.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryManipulatorDropTarget.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryNameAndLocationDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryNameAndLocationDialog.java
index d1f31d6..5a1949b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryNameAndLocationDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositoryNameAndLocationDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java
index 80616b1..d2263fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/RepositorySelectionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,7 +95,7 @@ public class RepositorySelectionGroup {
 	}
 
 	protected void createControl(Composite parent) {
-		final RepositoryTracker tracker = ProvisioningUI.getDefaultUI().getRepositoryTracker();
+		final RepositoryTracker tracker = ui.getRepositoryTracker();
 		// Get the possible field error indicators
 		info = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage();
 		warning = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_WARNING).getImage();
@@ -110,9 +110,11 @@ public class RepositorySelectionGroup {
 		comboComposite.setLayout(layout);
 		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false);
 		comboComposite.setLayoutData(gd);
+		comboComposite.setFont(parent.getFont());
 
 		Label label = new Label(comboComposite, SWT.NONE);
 		label.setText(ProvUIMessages.AvailableIUsPage_RepoFilterLabel);
+		label.setFont(comboComposite.getFont());
 
 		repoCombo = new Combo(comboComposite, SWT.DROP_DOWN);
 		repoCombo.addSelectionListener(new SelectionListener() {
@@ -151,6 +153,7 @@ public class RepositorySelectionGroup {
 		// breathing room for info dec
 		gd.horizontalIndent = DEC_MARGIN_WIDTH * 2;
 		repoCombo.setLayoutData(gd);
+		repoCombo.setFont(comboComposite.getFont());
 		repoCombo.addModifyListener(new ModifyListener() {
 			public void modifyText(ModifyEvent event) {
 				URI location = null;
@@ -201,6 +204,7 @@ public class RepositorySelectionGroup {
 			}
 		});
 		setButtonLayoutData(button);
+		button.setFont(comboComposite.getFont());
 
 		// Link to repository manipulator
 		repoManipulatorLink = createLink(comboComposite, new Action() {
@@ -215,6 +219,7 @@ public class RepositorySelectionGroup {
 		gd = new GridData(SWT.END, SWT.FILL, true, false);
 		gd.horizontalSpan = 3;
 		repoManipulatorLink.setLayoutData(gd);
+		repoManipulatorLink.setFont(comboComposite.getFont());
 
 		addComboProvisioningListeners();
 		parent.addDisposeListener(new DisposeListener() {
@@ -487,7 +492,7 @@ public class RepositorySelectionGroup {
 
 	void addComboProvisioningListeners() {
 		// We need to monitor repository events so that we can adjust the repo combo.
-		comboRepoListener = new ProvUIProvisioningListener(getClass().getName(), ProvUIProvisioningListener.PROV_EVENT_METADATA_REPOSITORY) {
+		comboRepoListener = new ProvUIProvisioningListener(getClass().getName(), ProvUIProvisioningListener.PROV_EVENT_METADATA_REPOSITORY, ui.getOperationRunner()) {
 			protected void repositoryAdded(RepositoryEvent e) {
 				fillRepoCombo(getSiteString(e.getRepositoryLocation()));
 			}
@@ -500,12 +505,12 @@ public class RepositorySelectionGroup {
 				fillRepoCombo(null);
 			}
 		};
-		ProvUI.addProvisioningListener(comboRepoListener);
+		ProvUI.getProvisioningEventBus(ui.getSession()).addListener(comboRepoListener);
 	}
 
 	void removeProvisioningListeners() {
 		if (comboRepoListener != null) {
-			ProvUI.removeProvisioningListener(comboRepoListener);
+			ProvUI.getProvisioningEventBus(ui.getSession()).removeListener(comboRepoListener);
 			comboRepoListener = null;
 		}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java
index ffbb09b..556f299 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionResultsWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,8 @@
 package org.eclipse.equinox.internal.p2.ui.dialogs;
 
 import java.util.Collection;
-import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
 import org.eclipse.equinox.internal.p2.ui.model.*;
 import org.eclipse.equinox.internal.p2.ui.viewers.*;
 import org.eclipse.equinox.p2.engine.IProvisioningPlan;
@@ -23,6 +24,7 @@ import org.eclipse.equinox.p2.operations.ProvisioningJob;
 import org.eclipse.equinox.p2.query.IQueryable;
 import org.eclipse.equinox.p2.ui.ProvisioningUI;
 import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.SashForm;
@@ -52,16 +54,11 @@ public abstract class ResolutionResultsWizardPage extends ResolutionStatusPage {
 
 	protected ResolutionResultsWizardPage(ProvisioningUI ui, ProvisioningOperationWizard wizard, IUElementListRoot input, ProfileChangeOperation operation) {
 		super("ResolutionPage", ui, wizard); //$NON-NLS-1$
-		// We can exist as an empty page, but if there is an operation, we need to know that it's resolved.
-		if (operation != null && !operation.hasResolved()) {
-			operation.resolveModal(null);
-		}
 		this.resolvedOperation = operation;
 		if (input == null)
 			this.input = new IUElementListRoot();
 		else
 			this.input = input;
-		updateStatus(input, resolvedOperation);
 	}
 
 	/*
@@ -99,12 +96,6 @@ public abstract class ResolutionResultsWizardPage extends ResolutionStatusPage {
 			tc.setWidth(columns[i].getWidthInPixels(tree));
 		}
 
-		treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				setDetailText(resolvedOperation);
-			}
-		});
-
 		// Filters and sorters before establishing content, so we don't refresh unnecessarily.
 		IUComparator comparator = new IUComparator(IUComparator.IU_NAME);
 		comparator.useColumnConfig(getColumnConfig());
@@ -116,19 +107,43 @@ public abstract class ResolutionResultsWizardPage extends ResolutionStatusPage {
 		labelProvider = new IUDetailsLabelProvider(null, getColumnConfig(), getShell());
 		treeViewer.setLabelProvider(labelProvider);
 
-		setDrilldownElements(input, resolvedOperation);
-		treeViewer.setInput(input);
-
 		// Optional area to show the size
 		createSizingInfo(composite);
 
 		// The text area shows a description of the selected IU, or error detail if applicable.
 		iuDetailsGroup = new IUDetailsGroup(sashForm, treeViewer, convertWidthInCharsToPixels(ILayoutConstants.DEFAULT_TABLE_WIDTH), true);
 
-		updateStatus(input, resolvedOperation);
 		setControl(sashForm);
 		sashForm.setWeights(getSashWeights());
 		Dialog.applyDialogFont(sashForm);
+
+		final Runnable runnable = new Runnable() {
+			public void run() {
+				treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+					public void selectionChanged(SelectionChangedEvent event) {
+						setDetailText(resolvedOperation);
+					}
+				});
+				updateStatus(input, resolvedOperation);
+				setDrilldownElements(input, resolvedOperation);
+				treeViewer.setInput(input);
+			}
+		};
+
+		if (resolvedOperation != null && !resolvedOperation.hasResolved()) {
+			try {
+				getContainer().run(true, false, new IRunnableWithProgress() {
+					public void run(IProgressMonitor monitor) {
+						resolvedOperation.resolveModal(monitor);
+						display.asyncExec(runnable);
+					}
+				});
+			} catch (Exception e) {
+				StatusManager.getManager().handle(new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, e.getMessage(), e));
+			}
+		} else {
+			runnable.run();
+		}
 	}
 
 	protected void createSizingInfo(Composite parent) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java
index f1af3f8..ffb344c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/ResolutionStatusPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,13 +13,14 @@ package org.eclipse.equinox.internal.p2.ui.dialogs;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.equinox.internal.p2.ui.*;
-import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
+import org.eclipse.equinox.internal.p2.ui.model.*;
 import org.eclipse.equinox.internal.p2.ui.viewers.IUColumnConfig;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.operations.ProfileChangeOperation;
 import org.eclipse.equinox.p2.ui.ProvisioningUI;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.custom.SashForm;
 import org.eclipse.ui.statushandlers.StatusManager;
 
@@ -60,6 +61,8 @@ public abstract class ResolutionStatusPage extends ProvisioningWizardPage {
 
 	protected abstract IInstallableUnit getSelectedIU();
 
+	protected abstract Object[] getSelectedElements();
+
 	/**
 	 * Update the status area of the wizard to report the results of the operation.
 	 * 
@@ -110,6 +113,17 @@ public abstract class ResolutionStatusPage extends ProvisioningWizardPage {
 		return description;
 	}
 
+	protected String getIUDescription(AvailableIUElement element) {
+		IInstallableUnit iu = element.getIU();
+
+		String description = getIUDescription(iu);
+
+		if (isLocked(element)) {
+			description = NLS.bind(ProvUIMessages.ResolutionStatusPage_ErrorIULocked, description);
+		}
+		return description;
+	}
+
 	String getMessageText(IStatus currentStatus) {
 		if (currentStatus == null || currentStatus.isOK())
 			return getDescription();
@@ -122,7 +136,8 @@ public abstract class ResolutionStatusPage extends ProvisioningWizardPage {
 
 	void setDetailText(ProfileChangeOperation resolvedOperation) {
 		String detail = null;
-		IInstallableUnit selectedIU = getSelectedIU();
+		AvailableIUElement selectedElement = (AvailableIUElement) getSelectedElement();
+		IInstallableUnit selectedIU = ElementUtils.elementToIU(selectedElement);
 		IUDetailsGroup detailsGroup = getDetailsGroup();
 
 		// We either haven't resolved, or we failed to resolve and reported some error
@@ -134,7 +149,7 @@ public abstract class ResolutionStatusPage extends ProvisioningWizardPage {
 				detail = currentStatus.getMessage();
 				detailsGroup.enablePropertyLink(false);
 			} else if (selectedIU != null) {
-				detail = getIUDescription(selectedIU);
+				detail = getIUDescription(selectedElement);
 				detailsGroup.enablePropertyLink(true);
 			} else {
 				detail = ""; //$NON-NLS-1$
@@ -165,7 +180,7 @@ public abstract class ResolutionStatusPage extends ProvisioningWizardPage {
 			// The overall status is not an error, or else there was no explanatory text for an error.
 			// We may as well just show info about this iu.
 			detailsGroup.enablePropertyLink(true);
-			detailsGroup.setDetailText(getIUDescription(selectedIU));
+			detailsGroup.setDetailText(getIUDescription(selectedElement));
 			return;
 		}
 
@@ -177,6 +192,13 @@ public abstract class ResolutionStatusPage extends ProvisioningWizardPage {
 		detailsGroup.setDetailText(detail);
 	}
 
+	private Object getSelectedElement() {
+		Object[] elements = getSelectedElements();
+		if (elements.length == 0)
+			return null;
+		return elements[0];
+	}
+
 	protected abstract String getDialogSettingsName();
 
 	protected abstract SashForm getSashForm();
@@ -269,4 +291,10 @@ public abstract class ResolutionStatusPage extends ProvisioningWizardPage {
 		getColumnWidthsFromSettings();
 		return new IUColumnConfig[] {nameColumn, versionColumn, idColumn};
 	}
+
+	private boolean isLocked(AvailableIUElement elementToBeUpdated) {
+		if (elementToBeUpdated instanceof AvailableUpdateElement)
+			return ((AvailableUpdateElement) elementToBeUpdated).isLockedForUpdate();
+		return false;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java
index 6817c76..16dfec2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SelectableIUsPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,10 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.dialogs;
 
+import java.util.ArrayList;
 import org.eclipse.equinox.internal.p2.ui.ProvUI;
 import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
-import org.eclipse.equinox.internal.p2.ui.model.ElementUtils;
-import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
+import org.eclipse.equinox.internal.p2.ui.model.*;
 import org.eclipse.equinox.internal.p2.ui.viewers.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.operations.ProfileChangeOperation;
@@ -109,6 +109,24 @@ public class SelectableIUsPage extends ResolutionStatusPage implements IResoluti
 
 		tableViewer.addCheckStateListener(new ICheckStateListener() {
 			public void checkStateChanged(CheckStateChangedEvent event) {
+				// If the checkEvent is on a locked update element, uncheck it and select it.
+				if (event.getElement() instanceof AvailableUpdateElement) {
+					AvailableUpdateElement checkedElement = (AvailableUpdateElement) event.getElement();
+					if (checkedElement.isLockedForUpdate()) {
+						event.getCheckable().setChecked(checkedElement, false);
+						// Select the element so that the locked description is displayed
+						CheckboxTableViewer viewer = ((CheckboxTableViewer) event.getSource());
+						int itemCount = viewer.getTable().getItemCount();
+						for (int i = 0; i < itemCount; i++) {
+							if (viewer.getElementAt(i).equals(checkedElement)) {
+								viewer.getTable().deselectAll();
+								viewer.getTable().select(i);
+								setDetailText(resolvedOperation);
+								break;
+							}
+						}
+					}
+				}
 				updateSelection();
 			}
 		});
@@ -210,8 +228,22 @@ public class SelectableIUsPage extends ResolutionStatusPage implements IResoluti
 	}
 
 	protected void setInitialCheckState() {
-		if (initialSelections != null)
-			tableViewer.setCheckedElements(initialSelections);
+		if (initialSelections == null) {
+			return;
+		}
+
+		ArrayList<Object> selections = new ArrayList<Object>(initialSelections.length);
+
+		for (int i = 0; i < initialSelections.length; i++) {
+			if (initialSelections[i] instanceof AvailableUpdateElement) {
+				AvailableUpdateElement element = (AvailableUpdateElement) initialSelections[i];
+				if (element.isLockedForUpdate()) {
+					continue;
+				}
+			}
+			selections.add(initialSelections[i]);
+		}
+		tableViewer.setCheckedElements(selections.toArray(new Object[selections.size()]));
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java
index cffaa32..d1ee90d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/SizeComputingWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/StructuredIUGroup.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/StructuredIUGroup.java
index c298a72..72a89e5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/StructuredIUGroup.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/StructuredIUGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@ package org.eclipse.equinox.internal.p2.ui.dialogs;
 
 import java.util.List;
 import org.eclipse.equinox.internal.p2.ui.ProvUI;
-import org.eclipse.equinox.internal.p2.ui.QueryProvider;
 import org.eclipse.equinox.internal.p2.ui.model.ElementUtils;
 import org.eclipse.equinox.internal.p2.ui.viewers.IUColumnConfig;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
@@ -42,7 +41,6 @@ public abstract class StructuredIUGroup {
 	private Composite composite;
 	private ProvisioningUI ui;
 	private IUColumnConfig[] columnConfig;
-	private QueryProvider queryProvider;
 
 	/**
 	 * Create a group that represents the available IU's.
@@ -76,9 +74,9 @@ public abstract class StructuredIUGroup {
 		layout.marginWidth = 0;
 		layout.marginHeight = 0;
 		composite.setLayout(layout);
+		composite.setFont(parent.getFont());
 
 		viewer = createViewer(composite);
-
 		viewer.getControl().setLayoutData(getViewerGridData());
 	}
 
@@ -131,12 +129,6 @@ public abstract class StructuredIUGroup {
 		return Dialog.convertHeightInCharsToPixels(fm, dlus);
 	}
 
-	protected QueryProvider getQueryProvider() {
-		if (queryProvider == null)
-			queryProvider = new QueryProvider(ui);
-		return queryProvider;
-	}
-
 	protected Policy getPolicy() {
 		return ui.getPolicy();
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java
index f5afea5..db6f78b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java
index 376bbed..8dea4ef 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UninstallWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateSingleIUPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateSingleIUPage.java
index 26f230c..5152bb5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateSingleIUPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateSingleIUPage.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.dialogs;
 
 import java.net.MalformedURLException;
@@ -12,6 +22,7 @@ import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWTError;
 import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.statushandlers.StatusManager;
 
@@ -47,6 +58,10 @@ public class UpdateSingleIUPage extends ProvisioningWizardPage {
 				browser = new Browser(parent, SWT.NONE);
 				browser.setUrl(url);
 				browser.setBackground(parent.getBackground());
+				Point size = getProvisioningUI().getPolicy().getUpdateDetailsPreferredSize();
+				if (size != null) {
+					browser.setSize(size);
+				}
 				setControl(browser);
 				return;
 			} catch (SWTError e) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java
index ee3c10e..47281e6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,8 @@ import org.eclipse.equinox.internal.p2.ui.ProvUIImages;
 import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
 import org.eclipse.equinox.internal.p2.ui.model.AvailableUpdateElement;
 import org.eclipse.equinox.internal.p2.ui.model.IUElementListRoot;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.engine.IProfileRegistry;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.operations.*;
 import org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob;
@@ -31,6 +33,7 @@ public class UpdateWizard extends WizardWithLicenses {
 	IInstallableUnit[] iusToReplace;
 	boolean skipSelectionsPage = false;
 	IUElementListRoot firstPageRoot;
+	Update[] initialSelections;
 
 	public static Collection<IInstallableUnit> getIUsToReplace(Object[] elements) {
 		Set<IInstallableUnit> iusToReplace = new HashSet<IInstallableUnit>();
@@ -73,11 +76,31 @@ public class UpdateWizard extends WizardWithLicenses {
 	 */
 	public UpdateWizard(ProvisioningUI ui, UpdateOperation operation, Object[] initialSelections, LoadMetadataRepositoryJob preloadJob) {
 		super(ui, operation, initialSelections, preloadJob);
+		this.initialSelections = (Update[]) initialSelections;
 		Assert.isLegal(operation.hasResolved(), "Cannot create an update wizard on an unresolved operation"); //$NON-NLS-1$
 		setWindowTitle(ProvUIMessages.UpdateAction_UpdatesAvailableTitle);
 		setDefaultPageImageDescriptor(ProvUIImages.getImageDescriptor(ProvUIImages.WIZARD_BANNER_UPDATE));
 	}
 
+	private boolean isLocked(IProfile profile, IInstallableUnit iuToBeUpdated) {
+		return Boolean.valueOf(profile.getInstallableUnitProperty(iuToBeUpdated, IProfile.PROP_PROFILE_LOCKED_IU)).booleanValue();
+	}
+
+	public void deselectLockedIUs() {
+		IProfileRegistry profileRegistry = (IProfileRegistry) ui.getSession().getProvisioningAgent().getService(IProfileRegistry.SERVICE_NAME);
+		IProfile profile = profileRegistry.getProfile(ui.getProfileId());
+
+		ArrayList<Update> newSelection = new ArrayList<Update>(initialSelections.length);
+		for (int i = 0; i < initialSelections.length; i++) {
+			if (!isLocked(profile, initialSelections[i].toUpdate)) {
+				newSelection.add(initialSelections[i]);
+			}
+		}
+
+		((UpdateOperation) operation).setSelectedUpdates(newSelection.toArray(new Update[newSelection.size()]));
+		recomputePlan(getContainer());
+	}
+
 	protected ISelectableIUsPage createMainPage(IUElementListRoot input, Object[] selections) {
 		mainPage = new SelectableIUsPage(ui, this, getAllPossibleUpdatesRoot(), selections);
 		mainPage.setTitle(ProvUIMessages.UpdateAction_UpdatesAvailableTitle);
@@ -137,8 +160,6 @@ public class UpdateWizard extends WizardWithLicenses {
 			operation = new UpdateOperation(ui.getSession(), getIUsToReplace(elements));
 			operation.setProfileId(getProfileId());
 			//			operation.setRootMarkerKey(getRootMarkerKey());
-			operation.setProvisioningContext(getProvisioningContext());
-
 		} else {
 			((UpdateOperation) operation).setSelectedUpdates(makeUpdatesFromElements(elements));
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java
index c8bf6dd..81f34fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UpdateWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UserValidationDialog.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UserValidationDialog.java
index 9f2045c..c2cda21 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UserValidationDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/UserValidationDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java
index 8f5765b..f8d42d9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/dialogs/WizardWithLicenses.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
index 7a35c6f..03126b7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -91,8 +91,8 @@ RepositoryManipulationPage_Remove=&Remove
 RepositoryManipulationPage_RemoveConfirmMessage=Are you sure you want to remove the selected items?
 RepositoryManipulationPage_RemoveConfirmSingleMessage=Are you sure you want to remove {0}?
 RepositoryManipulationPage_RemoveConfirmTitle=Remove Sites
-RepositoryManipulationPage_TestConnectionSuccess={0} is available.
-RepositoryManipulationPage_TestConnectionTitle=Test Connection
+RepositoryManipulationPage_TestConnectionSuccess=Information for "{0}" has been reloaded from the server.
+RepositoryManipulationPage_TestConnectionTitle=Reload
 RepositoryManipulationPage_Title=Available Software Sites
 RepositoryManipulatorDropTarget_DragAndDropJobLabel=Drag and Drop Operation
 RepositoryManipulatorDropTarget_DragSourceNotValid={0} was not accepted as a valid software site location.  Check the details.
@@ -106,6 +106,7 @@ ResolutionWizardPage_Canceled=The operation was cancelled.
 ResolutionWizardPage_ErrorStatus=The operation cannot be completed.  See the details.
 ResolutionWizardPage_NoSelections=There were no installable units selected when the plan was computed.
 ResolutionWizardPage_WarningInfoStatus=Your original request has been modified.  See the details.
+ResolutionStatusPage_ErrorIULocked=Insufficient access privileges to apply this update.\n\n{0}
 
 AcceptLicensesWizardPage_AcceptMultiple=I &accept the terms of the license agreements
 AcceptLicensesWizardPage_AcceptSingle=I &accept the terms of the license agreement
@@ -152,6 +153,8 @@ RevertProfilePage_RevertLabel=Re&vert
 RevertProfilePage_RevertTooltip=Revert to the selected install configuration.
 RevertProfilePage_CompareLabel=Co&mpare
 RevertProfilePage_CompareTooltip=Compare selected install configurations.
+RevertProfilePage_ProfileTagColumn=Tag
+RevertProfilePage_ProfileTimestampColumn=Date
 InstallWizardPage_NoCheckboxDescription=Review the items to be installed.
 InstallWizardPage_Title=Install Details
 PreselectedIUInstallWizard_Title=Install
@@ -170,6 +173,7 @@ ProvUI_InstallDialogError=Unable to open the Installation Information.
 ProvUI_NameColumnTitle=Name
 ProvUI_IdColumnTitle=Id
 ProvUI_VersionColumnTitle=Version
+ProvUI_ProviderColumnTitle=Provider
 ProvUI_WarningTitle=Warning
 ProvUIMessages_NotAccepted_EnterFor_0=Login details were not accepted. Please provide login details for {0}
 ProvUIMessages_SavedNotAccepted_EnterFor_0=Saved login details were not accepted. Please provide login details for {0}
@@ -190,6 +194,7 @@ AvailableIUGroup_NoSitesExplanation=There is no site selected.
 AvailableIUsPage_AddButton=&Add...
 AvailableIUsPage_AllSites=--All Available Sites--
 AvailableIUsPage_Description=Check the items that you wish to install.
+AvailableIUsPage_FilterOnEnvCheckBox=Show only software applicable to target environment
 AvailableIUsPage_GotoInstallInfo=What is <a>already installed</a>?
 AvailableIUsPage_GotoProperties=<a>More...</a>
 AvailableIUsPage_GroupByCategory=&Group items by category
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactElement.java
index 9ba9f4a..dbc4807 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositories.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositories.java
index 4b12392..5ad41d3 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositories.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositories.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java
index 0466578..db6d050 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ArtifactRepositoryElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -19,7 +19,6 @@ import org.eclipse.equinox.p2.query.IQueryable;
 import org.eclipse.equinox.p2.repository.IRepository;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
 
 /**
  * Element wrapper class for a artifact repository that gets its
@@ -32,7 +31,6 @@ public class ArtifactRepositoryElement extends RemoteQueriedElement implements I
 	URI location;
 	IArtifactRepository repo;
 	boolean isEnabled;
-	ProvisioningUI ui;
 
 	public ArtifactRepositoryElement(Object parent, URI location) {
 		this(parent, location, true);
@@ -42,7 +40,6 @@ public class ArtifactRepositoryElement extends RemoteQueriedElement implements I
 		super(parent);
 		this.location = location;
 		this.isEnabled = isEnabled;
-		ui = ProvUIActivator.getDefault().getProvisioningUI();
 	}
 
 	@SuppressWarnings("rawtypes")
@@ -71,7 +68,7 @@ public class ArtifactRepositoryElement extends RemoteQueriedElement implements I
 			try {
 				repo = getArtifactRepositoryManager().loadRepository(location, monitor);
 			} catch (ProvisionException e) {
-				ui.getRepositoryTracker().reportLoadFailure(location, e);
+				getProvisioningUI().getRepositoryTracker().reportLoadFailure(location, e);
 			} catch (OperationCanceledException e) {
 				// nothing to report
 			}
@@ -103,7 +100,7 @@ public class ArtifactRepositoryElement extends RemoteQueriedElement implements I
 	 * @see org.eclipse.equinox.internal.provisional.p2.ui.model.RepositoryElement#getDescription()
 	 */
 	public String getDescription() {
-		if (ui.getRepositoryTracker().hasNotFoundStatusBeenReported(location))
+		if (getProvisioningUI().getRepositoryTracker().hasNotFoundStatusBeenReported(location))
 			return ProvUIMessages.RepositoryElement_NotFound;
 		String description = getArtifactRepositoryManager().getRepositoryProperty(location, IRepository.PROP_DESCRIPTION);
 		if (description == null)
@@ -144,6 +141,6 @@ public class ArtifactRepositoryElement extends RemoteQueriedElement implements I
 	}
 
 	IArtifactRepositoryManager getArtifactRepositoryManager() {
-		return ProvUI.getArtifactRepositoryManager(ui.getSession());
+		return ProvUI.getArtifactRepositoryManager(getProvisioningUI().getSession());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java
index 097d40e..96972fa 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableIUElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -15,12 +15,13 @@ import java.net.URI;
 import java.util.Collection;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.internal.p2.ui.*;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
 import org.eclipse.equinox.p2.engine.*;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.metadata.IRequirement;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
 import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 import org.eclipse.equinox.p2.repository.IRepository;
 
 /**
@@ -36,6 +37,7 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
 	boolean shouldShowChildren;
 	boolean isInstalled = false;
 	boolean isUpdate = false;
+	boolean isPatch = false;
 
 	// Currently this variable is not settable due to the
 	// poor performance of sizing, but it is kept here for future improvement.
@@ -51,6 +53,7 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
 		this.iu = iu;
 		this.profileID = profileID;
 		this.shouldShowChildren = showChildren;
+		this.isPatch = iu == null ? false : Boolean.valueOf(iu.getProperty(InstallableUnitDescription.PROP_TYPE_PATCH));
 	}
 
 	/*
@@ -61,6 +64,8 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
 	protected String getImageId(Object obj) {
 		if (isUpdate)
 			return ProvUIImages.IMG_UPDATED_IU;
+		else if (isPatch)
+			return isInstalled ? ProvUIImages.IMG_DISABLED_PATCH_IU : ProvUIImages.IMG_PATCH_IU;
 		else if (isInstalled)
 			return ProvUIImages.IMG_DISABLED_IU;
 		return ProvUIImages.IMG_IU;
@@ -94,9 +99,10 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
 	}
 
 	protected IProvisioningPlan getSizingPlan(IProgressMonitor monitor) {
-		ProfileChangeRequest request = ProfileChangeRequest.createByProfileId(getProvisioningUI().getSession().getProvisioningAgent(), profileID);
+		IPlanner planner = getPlanner();
+		IProfileChangeRequest request = ProfileChangeRequest.createByProfileId(getProvisioningUI().getSession().getProvisioningAgent(), profileID);
 		request.add(getIU());
-		return getPlanner().getProvisioningPlan(request, getProvisioningContext(), monitor);
+		return planner.getProvisioningPlan(request, getProvisioningContext(), monitor);
 	}
 
 	IEngine getEngine() {
@@ -184,6 +190,14 @@ public class AvailableIUElement extends QueriedElement implements IIUElement {
 		return isUpdate;
 	}
 
+	public void setIsPatch(boolean isPatch) {
+		this.isPatch = isPatch;
+	}
+
+	public boolean isPatch() {
+		return isPatch;
+	}
+
 	private ProvisioningContext getProvisioningContext() {
 		ProvisioningContext context = new ProvisioningContext(getProvisioningUI().getSession().getProvisioningAgent());
 		if (hasQueryable() && getQueryable() instanceof IRepository<?>) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableUpdateElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableUpdateElement.java
index cf3db66..d89fcab 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableUpdateElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/AvailableUpdateElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,11 +12,13 @@
 package org.eclipse.equinox.internal.p2.ui.model;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
-import org.eclipse.equinox.p2.engine.IProvisioningPlan;
-import org.eclipse.equinox.p2.engine.ProvisioningContext;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.internal.p2.ui.ProvUIImages;
+import org.eclipse.equinox.p2.engine.*;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.operations.Update;
+import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
 
 /**
  * Element wrapper class for IU's that are available for installation.
@@ -28,11 +30,29 @@ import org.eclipse.equinox.p2.operations.Update;
 public class AvailableUpdateElement extends AvailableIUElement {
 
 	IInstallableUnit iuToBeUpdated;
+	boolean isLockedForUpdate = false;
 
 	public AvailableUpdateElement(Object parent, IInstallableUnit iu, IInstallableUnit iuToBeUpdated, String profileID, boolean shouldShowChildren) {
 		super(parent, iu, profileID, shouldShowChildren);
 		setIsInstalled(false);
 		this.iuToBeUpdated = iuToBeUpdated;
+		init();
+
+	}
+
+	private void init() {
+		IProfileRegistry profileRegistry = (IProfileRegistry) getProvisioningUI().getSession().getProvisioningAgent().getService(IProfileRegistry.SERVICE_NAME);
+		IProfile profile = profileRegistry.getProfile(profileID);
+		String property = profile.getInstallableUnitProperty(iuToBeUpdated, IProfile.PROP_PROFILE_LOCKED_IU);
+		try {
+			isLockedForUpdate = property == null ? false : (Integer.parseInt(property) & IProfile.LOCK_UPDATE) > 0;
+		} catch (NumberFormatException e) {
+			isLockedForUpdate = false;
+		}
+	}
+
+	public boolean isLockedForUpdate() {
+		return isLockedForUpdate;
 	}
 
 	public IInstallableUnit getIUToBeUpdated() {
@@ -40,11 +60,12 @@ public class AvailableUpdateElement extends AvailableIUElement {
 	}
 
 	protected IProvisioningPlan getSizingPlan(IProgressMonitor monitor) {
-		ProfileChangeRequest request = ProfileChangeRequest.createByProfileId(getProvisioningUI().getSession().getProvisioningAgent(), profileID);
+		IPlanner planner = getPlanner();
+		IProfileChangeRequest request = ProfileChangeRequest.createByProfileId(getProvisioningUI().getSession().getProvisioningAgent(), profileID);
 		if (iuToBeUpdated.getId().equals(getIU().getId()))
 			request.remove(iuToBeUpdated);
 		request.add(getIU());
-		return getPlanner().getProvisioningPlan(request, new ProvisioningContext(getProvisioningUI().getSession().getProvisioningAgent()), monitor);
+		return planner.getProvisioningPlan(request, new ProvisioningContext(getProvisioningUI().getSession().getProvisioningAgent()), monitor);
 	}
 
 	public boolean equals(Object obj) {
@@ -73,4 +94,11 @@ public class AvailableUpdateElement extends AvailableIUElement {
 	public Update getUpdate() {
 		return new Update(iuToBeUpdated, getIU());
 	}
+
+	protected String getImageId(Object obj) {
+		String imageId = super.getImageId(obj);
+		if (ProvUIImages.IMG_IU.equals(imageId) && isLockedForUpdate())
+			return ProvUIImages.IMG_DISABLED_IU;
+		return imageId;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/CategoryElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/CategoryElement.java
index f343af3..e76c8ce 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/CategoryElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/CategoryElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java
index f6a5ab2..3ad63b4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ElementUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@ import java.net.URI;
 import java.util.*;
 import org.eclipse.core.runtime.URIUtil;
 import org.eclipse.equinox.internal.p2.ui.ProvUI;
-import org.eclipse.equinox.internal.p2.ui.ProvUIActivator;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.repository.IRepository;
 import org.eclipse.equinox.p2.repository.IRepositoryManager;
@@ -33,8 +32,7 @@ import org.eclipse.swt.widgets.Shell;
  */
 public class ElementUtils {
 
-	public static void updateRepositoryUsingElements(final MetadataRepositoryElement[] elements, final Shell shell) {
-		final ProvisioningUI ui = ProvUIActivator.getDefault().getProvisioningUI();
+	public static void updateRepositoryUsingElements(final ProvisioningUI ui, final MetadataRepositoryElement[] elements, final Shell shell) {
 		ui.signalRepositoryOperationStart();
 		IMetadataRepositoryManager metaManager = ProvUI.getMetadataRepositoryManager(ui.getSession());
 		IArtifactRepositoryManager artManager = ProvUI.getArtifactRepositoryManager(ui.getSession());
@@ -93,8 +91,8 @@ public class ElementUtils {
 	}
 
 	private static void setColocatedRepositoryEnablement(ProvisioningUI ui, URI location, boolean enable) {
-		ProvUI.getArtifactRepositoryManager(ProvUIActivator.getDefault().getSession()).setEnabled(location, enable);
-		ProvUI.getMetadataRepositoryManager(ProvUIActivator.getDefault().getSession()).setEnabled(location, enable);
+		ProvUI.getArtifactRepositoryManager(ui.getSession()).setEnabled(location, enable);
+		ProvUI.getMetadataRepositoryManager(ui.getSession()).setEnabled(location, enable);
 	}
 
 	public static IInstallableUnit getIU(Object element) {
@@ -115,6 +113,10 @@ public class ElementUtils {
 		return theIUs;
 	}
 
+	public static IInstallableUnit elementToIU(Object selectedElement) {
+		return ProvUI.getAdapter(selectedElement, IInstallableUnit.class);
+	}
+
 	static boolean containsURI(URI[] locations, URI url) {
 		for (int i = 0; i < locations.length; i++)
 			if (locations[i].equals(url))
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IIUElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IIUElement.java
index 06f419b..1324ce0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IIUElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IIUElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IRepositoryElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IRepositoryElement.java
index f2890b7..049e059 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IRepositoryElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IRepositoryElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IUElementListRoot.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IUElementListRoot.java
index 5689bee..efe0cc9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IUElementListRoot.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/IUElementListRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/InstalledIUElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/InstalledIUElement.java
index d4e5072..e251968 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/InstalledIUElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/InstalledIUElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,8 +13,8 @@ package org.eclipse.equinox.internal.p2.ui.model;
 import java.util.Collection;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.equinox.internal.p2.ui.*;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.metadata.IRequirement;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
 
 /**
  * Element wrapper class for installed IU's. Used instead of the plain IU when
@@ -26,11 +26,13 @@ public class InstalledIUElement extends QueriedElement implements IIUElement {
 
 	String profileId;
 	IInstallableUnit iu;
+	boolean isPatch = false;
 
 	public InstalledIUElement(Object parent, String profileId, IInstallableUnit iu) {
 		super(parent);
 		this.profileId = profileId;
 		this.iu = iu;
+		this.isPatch = iu == null ? false : Boolean.valueOf(iu.getProperty(InstallableUnitDescription.PROP_TYPE_PATCH));
 	}
 
 	/*
@@ -39,7 +41,7 @@ public class InstalledIUElement extends QueriedElement implements IIUElement {
 	 * @see org.eclipse.equinox.internal.provisional.p2.ui.model.ProvElement#getImageID(java.lang.Object)
 	 */
 	protected String getImageId(Object obj) {
-		return ProvUIImages.IMG_IU;
+		return isPatch ? ProvUIImages.IMG_PATCH_IU : ProvUIImages.IMG_IU;
 	}
 
 	public String getLabel(Object o) {
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositories.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositories.java
index df87eea..bdc8bdf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositories.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositories.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java
index 0892b28..89b7fcc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/MetadataRepositoryElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,14 +39,14 @@ public class MetadataRepositoryElement extends RootElement implements IRepositor
 	String name;
 
 	public MetadataRepositoryElement(Object parent, URI location, boolean isEnabled) {
-		this(parent, null, ProvisioningUI.getDefaultUI(), location, isEnabled);
+		this(parent, null, null, location, isEnabled);
 	}
 
 	public MetadataRepositoryElement(IUViewQueryContext queryContext, ProvisioningUI ui, URI location, boolean isEnabled) {
 		this(null, queryContext, ui, location, isEnabled);
 	}
 
-	private MetadataRepositoryElement(Object parent, IUViewQueryContext queryContext, ProvisioningUI ui, URI location, boolean isEnabled) {
+	public MetadataRepositoryElement(Object parent, IUViewQueryContext queryContext, ProvisioningUI ui, URI location, boolean isEnabled) {
 		super(parent, queryContext, ui);
 		this.location = location;
 		this.isEnabled = isEnabled;
@@ -222,7 +222,7 @@ public class MetadataRepositoryElement extends RootElement implements IRepositor
 			return super.getPolicy();
 		if (parent instanceof QueriedElement)
 			return ((QueriedElement) parent).getPolicy();
-		return ProvisioningUI.getDefaultUI().getPolicy();
+		return getProvisioningUI().getPolicy();
 	}
 
 	public String toString() {
@@ -239,4 +239,21 @@ public class MetadataRepositoryElement extends RootElement implements IRepositor
 	IMetadataRepositoryManager getMetadataRepositoryManager() {
 		return ProvUI.getMetadataRepositoryManager(getProvisioningUI().getSession());
 	}
+
+	/**
+	 * MetadataRepositoryElements can sometimes be roots and sometimes children.
+	 * When they are roots the should have a ui set directly.  As children they should
+	 * defer to the parent to get the ui.
+	 */
+	public ProvisioningUI getProvisioningUI() {
+		ProvisioningUI ui = super.getProvisioningUI();
+		if (ui != null)
+			return ui;
+		Object parent = getParent(this);
+		if (parent != null && parent instanceof QueriedElement)
+			return ((QueriedElement) parent).getProvisioningUI();
+		// if all else fails get the global UI.  This should not really happen but 
+		// we need to account for some possible historical cases.
+		return ProvisioningUI.getDefaultUI();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileElement.java
index 35a17d3..e206ab6 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileSnapshots.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileSnapshots.java
index 12a24b5..c8c8a1a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileSnapshots.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProfileSnapshots.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,9 +10,14 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.ui.model;
 
+import java.util.*;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.equinox.internal.p2.ui.*;
+import org.eclipse.equinox.internal.p2.ui.ProvUI;
+import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
+import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.equinox.p2.engine.IProfileRegistry;
+import org.eclipse.equinox.p2.operations.ProvisioningSession;
 import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
 import org.eclipse.ui.progress.IElementCollector;
 
@@ -24,10 +29,12 @@ import org.eclipse.ui.progress.IElementCollector;
 public class ProfileSnapshots extends ProvElement implements IDeferredWorkbenchAdapter {
 
 	String profileId;
+	ProvisioningSession session;
 
-	public ProfileSnapshots(String profileId) {
+	public ProfileSnapshots(String profileId, ProvisioningSession session) {
 		super(null);
 		this.profileId = profileId;
+		this.session = session;
 	}
 
 	public String getProfileId() {
@@ -38,27 +45,36 @@ public class ProfileSnapshots extends ProvElement implements IDeferredWorkbenchA
 	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
 	 */
 	public Object[] getChildren(Object o) {
-		long[] timestamps = ProvUI.getProfileRegistry(ProvUIActivator.getDefault().getSession()).listProfileTimestamps(profileId);
-		RollbackProfileElement[] elements = new RollbackProfileElement[timestamps.length];
-		boolean skipFirst = false;
+		IProfileRegistry registry = ProvUI.getProfileRegistry(session);
+		long[] timestamps = registry.listProfileTimestamps(profileId);
+
+		// find out which profile states we should hide
+		Map<String, String> hidden = registry.getProfileStateProperties(profileId, IProfile.STATE_PROP_HIDDEN);
+		Map<String, String> tag = registry.getProfileStateProperties(profileId, IProfile.STATE_PROP_TAG);
+		List<RollbackProfileElement> elements = new ArrayList<RollbackProfileElement>();
+
 		for (int i = 0; i < timestamps.length; i++) {
-			elements[i] = new RollbackProfileElement(this, profileId, timestamps[i]);
+			if (hidden.containsKey(String.valueOf(timestamps[i])))
+				continue;
+			RollbackProfileElement element = null;
+			String timestamp = String.valueOf(timestamps[i]);
+			if (!tag.containsKey(timestamp)) {
+				element = new RollbackProfileElement(this, profileId, timestamps[i]);
+			} else {
+				element = new RollbackProfileElement(this, profileId, timestamps[i], tag.get(timestamp));
+			}
+			elements.add(element);
+
 			// Eliminate the first in the list (earliest) if there was no content at all.
 			// This doesn't always happen, but can, and we don't want to offer the user an empty profile to
-			// revert to.
-			if (i == 0) {
-				skipFirst = elements[0].getChildren(elements[0]).length == 0;
-			}
-			if (i == timestamps.length - 1) {
-				elements[i].setIsCurrentProfile(true);
-			}
-		}
-		if (skipFirst) {
-			RollbackProfileElement[] elementsWithoutFirst = new RollbackProfileElement[elements.length - 1];
-			System.arraycopy(elements, 1, elementsWithoutFirst, 0, elements.length - 1);
-			return elementsWithoutFirst;
+			// revert to. Just reset the list since it only has one element.
+			if (i == 0 && element.getChildren(element).length == 0)
+				elements.clear();
 		}
-		return elements;
+		// current profile is the last one in the list
+		if (elements.size() > 0)
+			elements.get(elements.size() - 1).setIsCurrentProfile(true);
+		return elements.toArray(new RollbackProfileElement[elements.size()]);
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Profiles.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Profiles.java
index 3af9eb4..6f95407 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Profiles.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Profiles.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProvElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProvElement.java
index 047bd70..5f5b156 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProvElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/ProvElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java
index f4bb6a8..a478e68 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,8 @@ import java.util.*;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
-import org.eclipse.equinox.internal.p2.ui.*;
+import org.eclipse.equinox.internal.p2.ui.ElementQueryDescriptor;
+import org.eclipse.equinox.internal.p2.ui.QueryProvider;
 import org.eclipse.equinox.internal.p2.ui.query.IUViewQueryContext;
 import org.eclipse.equinox.p2.query.IQueryable;
 import org.eclipse.equinox.p2.ui.Policy;
@@ -43,14 +44,17 @@ public abstract class QueriedElement extends ProvElement {
 		Object parent = getParent(this);
 		if (parent instanceof QueriedElement)
 			return ((QueriedElement) parent).getPolicy();
-		return ProvUIActivator.getDefault().getProvisioningUI().getPolicy();
+		return getProvisioningUI().getPolicy();
 	}
 
 	public ProvisioningUI getProvisioningUI() {
 		Object parent = getParent(this);
 		if (parent instanceof QueriedElement)
 			return ((QueriedElement) parent).getProvisioningUI();
-		return ProvUIActivator.getDefault().getProvisioningUI();
+		// if we really can't find a UI then get the default. In general this should
+		// not happen though.  Turn on tracing in getDefaultUI() to see places where 
+		// it is happening.
+		return ProvisioningUI.getDefaultUI();
 
 	}
 
@@ -65,10 +69,6 @@ public abstract class QueriedElement extends ProvElement {
 		return fetchChildren(o, new NullProgressMonitor());
 	}
 
-	public QueryProvider getQueryProvider() {
-		return ProvUI.getQueryProvider();
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object)
@@ -97,9 +97,8 @@ public abstract class QueriedElement extends ProvElement {
 
 	protected Object[] fetchChildren(Object o, IProgressMonitor monitor) {
 		cachedChildren = CollectionUtils.emptyList();
-		if (getQueryProvider() == null)
-			return new Object[0];
-		ElementQueryDescriptor queryDescriptor = getQueryProvider().getQueryDescriptor(this);
+		QueryProvider provider = new QueryProvider(getProvisioningUI());
+		ElementQueryDescriptor queryDescriptor = provider.getQueryDescriptor(this);
 		if (queryDescriptor == null)
 			return new Object[0];
 		Collection<?> results = queryDescriptor.performQuery(monitor);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElementWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElementWrapper.java
index e5085ab..f3a43e0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElementWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/QueriedElementWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,6 @@ import org.eclipse.equinox.internal.p2.ui.query.IUViewQueryContext;
 import org.eclipse.equinox.p2.operations.RepositoryTracker;
 import org.eclipse.equinox.p2.query.Collector;
 import org.eclipse.equinox.p2.query.IQueryable;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
 import org.eclipse.osgi.util.NLS;
 
 /**
@@ -66,8 +65,8 @@ public abstract class QueriedElementWrapper extends ElementWrapper {
 			// is empty and the parent is an IU, then being empty is not a big deal, it means
 			// we are in drilldown.
 			if (parent instanceof MetadataRepositoryElement) {
-				RepositoryTracker manipulator = ProvisioningUI.getDefaultUI().getRepositoryTracker();
 				MetadataRepositoryElement repo = (MetadataRepositoryElement) parent;
+				RepositoryTracker manipulator = repo.getProvisioningUI().getRepositoryTracker();
 				if (manipulator.hasNotFoundStatusBeenReported(repo.getLocation())) {
 					return emptyExplanation(IStatus.ERROR, NLS.bind(ProvUIMessages.QueriedElementWrapper_SiteNotFound, URIUtil.toUnencodedString(repo.getLocation())), ""); //$NON-NLS-1$
 				}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RemoteQueriedElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RemoteQueriedElement.java
index b84c78b..65e39d2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RemoteQueriedElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RemoteQueriedElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RollbackProfileElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RollbackProfileElement.java
index d474a73..b0bfb80 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RollbackProfileElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RollbackProfileElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -29,11 +29,17 @@ public class RollbackProfileElement extends RemoteQueriedElement {
 	private long timestamp;
 	private IProfile snapshot;
 	private boolean isCurrent = false;
+	private String profileTag;
 
 	public RollbackProfileElement(Object parent, String profileId, long timestamp) {
+		this(parent, profileId, timestamp, null);
+	}
+
+	public RollbackProfileElement(Object parent, String profileId, long timestamp, String profileTag) {
 		super(parent);
 		this.timestamp = timestamp;
 		this.profileId = profileId;
+		this.profileTag = profileTag;
 	}
 
 	/*
@@ -78,6 +84,18 @@ public class RollbackProfileElement extends RemoteQueriedElement {
 		return isCurrent;
 	}
 
+	public String getProfileId() {
+		return profileId;
+	}
+
+	public String getProfileTag() {
+		return profileTag;
+	}
+
+	public void setProfileTag(String profileTag) {
+		this.profileTag = profileTag;
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.equinox.internal.p2.ui.model.QueriedElement#getDefaultQueryType()
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RootElement.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RootElement.java
index a9574e8..134baed 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RootElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/RootElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Updates.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Updates.java
index 3f227d0..a563b78 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Updates.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/model/Updates.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactKeyWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactKeyWrapper.java
index 27a4304..0cc55e9 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactKeyWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactKeyWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactRepositoryElementWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactRepositoryElementWrapper.java
index a81b6bc..bd6ea58 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactRepositoryElementWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ArtifactRepositoryElementWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,9 @@ package org.eclipse.equinox.internal.p2.ui.query;
 
 import java.net.URI;
 import org.eclipse.equinox.internal.p2.ui.ProvUI;
-import org.eclipse.equinox.internal.p2.ui.model.ArtifactRepositoryElement;
-import org.eclipse.equinox.internal.p2.ui.model.QueriedElementWrapper;
+import org.eclipse.equinox.internal.p2.ui.model.*;
+import org.eclipse.equinox.p2.operations.ProvisioningSession;
 import org.eclipse.equinox.p2.query.IQueryable;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
 
 /**
  * ElementWrapper that wraps a URI with an ArtifactRepositoryElement.
@@ -46,6 +45,13 @@ public class ArtifactRepositoryElementWrapper extends QueriedElementWrapper {
 	 * Transforms the item to a UI element
 	 */
 	protected Object wrap(Object item) {
-		return super.wrap(new ArtifactRepositoryElement(parent, (URI) item, ProvUI.getArtifactRepositoryManager(ProvisioningUI.getDefaultUI().getSession()).isEnabled((URI) item)));
+		// Assume the item is enabled
+		boolean enabled = true;
+		// if the parent is a queried element then use its provisioning UI to find out about enablement
+		if (parent instanceof QueriedElement) {
+			ProvisioningSession session = ((QueriedElement) parent).getProvisioningUI().getSession();
+			enabled = ProvUI.getArtifactRepositoryManager(session).isEnabled((URI) item);
+		}
+		return super.wrap(new ArtifactRepositoryElement(parent, (URI) item, enabled));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/AvailableIUWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/AvailableIUWrapper.java
index 3c6ec29..1bc569d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/AvailableIUWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/AvailableIUWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
 import org.eclipse.equinox.internal.p2.ui.model.*;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
 import org.eclipse.equinox.p2.query.*;
 
 /**
@@ -48,11 +49,13 @@ public class AvailableIUWrapper extends QueriedElementWrapper {
 		Object item = null;
 		boolean isUpdate = false;
 		boolean isInstalled = false;
+		boolean isPatch = false;
 
-		public InformationCache(Object item, boolean isUpdate, boolean isInstalled) {
+		public InformationCache(Object item, boolean isUpdate, boolean isInstalled, boolean isPatch) {
 			this.item = item;
 			this.isUpdate = isUpdate;
 			this.isInstalled = isInstalled;
+			this.isPatch = isPatch;
 		}
 	}
 
@@ -79,6 +82,7 @@ public class AvailableIUWrapper extends QueriedElementWrapper {
 	private InformationCache computeIUInformation(IInstallableUnit iu) {
 		boolean isUpdate = false;
 		boolean isInstalled = false;
+		boolean isPatch = iu == null ? false : Boolean.valueOf(iu.getProperty(InstallableUnitDescription.PROP_TYPE_PATCH));
 		if (profile != null && iu != null) {
 			IQueryResult<IInstallableUnit> queryResult = profile.query(QueryUtil.createIUQuery(iu.getId()), null);
 			Iterator<IInstallableUnit> iter = queryResult.iterator();
@@ -93,28 +97,31 @@ public class AvailableIUWrapper extends QueriedElementWrapper {
 				}
 			}
 		}
-		return new InformationCache(iu, isUpdate, isInstalled);
-
+		return new InformationCache(iu, isUpdate, isInstalled, isPatch);
 	}
 
 	protected Object wrap(Object item) {
 		IInstallableUnit iu = ProvUI.getAdapter(item, IInstallableUnit.class);
 		boolean isUpdate = false;
 		boolean isInstalled = false;
+		boolean isPatch = false;
 		if (cache != null && cache.item == item) {
 			// This cache should always be valide, since accept is called before transformItem
 			isUpdate = cache.isUpdate;
 			isInstalled = cache.isInstalled;
+			isPatch = cache.isPatch;
 		} else {
 			InformationCache iuInformation = computeIUInformation(iu);
 			isUpdate = iuInformation.isUpdate;
 			isInstalled = iuInformation.isInstalled;
+			isPatch = iuInformation.isPatch;
 		}
 		// subclass already made this an element, just set the install flag
 		if (item instanceof AvailableIUElement) {
 			AvailableIUElement element = (AvailableIUElement) item;
 			element.setIsInstalled(isInstalled);
 			element.setIsUpdate(isUpdate);
+			element.setIsPatch(isPatch);
 			return super.wrap(item);
 		}
 		// If it's not an IU or element, we have nothing to do here
@@ -130,6 +137,7 @@ public class AvailableIUWrapper extends QueriedElementWrapper {
 			AvailableIUElement availableElement = (AvailableIUElement) element;
 			availableElement.setIsInstalled(isInstalled);
 			availableElement.setIsUpdate(isUpdate);
+			availableElement.setIsPatch(isPatch);
 		}
 		return super.wrap(element);
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/CategoryElementWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/CategoryElementWrapper.java
index e66e85b..0b8248f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/CategoryElementWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/CategoryElementWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/IUViewQueryContext.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/IUViewQueryContext.java
index 0aa3daf..8f36fb5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/IUViewQueryContext.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/IUViewQueryContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -44,6 +44,8 @@ public class IUViewQueryContext {
 	private boolean showAvailableChildren = false;
 	// Whether to drill down into items in a provisioning plan
 	private boolean showProvisioningPlanChildren = true;
+	// Whether to filter out IUs based on the environment settings of the target profile
+	private boolean filterOnEnv = false;
 
 	private String profileId = null;
 
@@ -100,6 +102,14 @@ public class IUViewQueryContext {
 		this.profileId = profileId;
 	}
 
+	public void setFilterOnEnv(boolean filterOnEnv) {
+		this.filterOnEnv = filterOnEnv;
+	}
+
+	public boolean getFilterOnEnv() {
+		return filterOnEnv;
+	}
+
 	/**
 	 * Set a boolean that indicates whether categories should be used when
 	 * viewing by repository.
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/InstalledIUElementWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/InstalledIUElementWrapper.java
index 9e465a8..5d6bf3c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/InstalledIUElementWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/InstalledIUElementWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementWrapper.java
index 3718ba1..70487fc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/MetadataRepositoryElementWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,9 @@ package org.eclipse.equinox.internal.p2.ui.query;
 
 import java.net.URI;
 import org.eclipse.equinox.internal.p2.ui.ProvUI;
-import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement;
-import org.eclipse.equinox.internal.p2.ui.model.QueriedElementWrapper;
+import org.eclipse.equinox.internal.p2.ui.model.*;
+import org.eclipse.equinox.p2.operations.ProvisioningSession;
 import org.eclipse.equinox.p2.query.IQueryable;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
 
 /**
  * ElementWrapper that accepts the matched repo URLs and
@@ -47,6 +46,14 @@ public class MetadataRepositoryElementWrapper extends QueriedElementWrapper {
 	 * Transforms the item to a UI element
 	 */
 	protected Object wrap(Object item) {
-		return super.wrap(new MetadataRepositoryElement(parent, (URI) item, ProvUI.getMetadataRepositoryManager(ProvisioningUI.getDefaultUI().getSession()).isEnabled((URI) item)));
+		// Assume the item is enabled
+		boolean enabled = true;
+		// if the parent is a queried element then use its provisioning UI to find out about enablement
+		if (parent instanceof QueriedElement) {
+			ProvisioningSession session = ((QueriedElement) parent).getProvisioningUI().getSession();
+			enabled = ProvUI.getMetadataRepositoryManager(session).isEnabled((URI) item);
+		} 
+		return super.wrap(new MetadataRepositoryElement(parent, (URI) item, enabled));
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ProfileElementWrapper.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ProfileElementWrapper.java
index d102baf..973efa2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ProfileElementWrapper.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/ProfileElementWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableProfileRegistry.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableProfileRegistry.java
index 4d787c0..7e37c4c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableProfileRegistry.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableProfileRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableUpdates.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableUpdates.java
index 82c8d4f..6c7f9c2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableUpdates.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/query/QueryableUpdates.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java
index 338acc2..1e77c1f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/DeferredQueryContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUColumnConfig.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUColumnConfig.java
index c5d8be5..9a5a819 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUColumnConfig.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUColumnConfig.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -43,6 +43,11 @@ public class IUColumnConfig {
 	 */
 	public final static int COLUMN_SIZE = 3;
 
+	/**
+	 * Constant indicating that the column represents an IInstallableUnit's provider
+	 */
+	public final static int COLUMN_PROVIDER = 4;
+
 	private String columnTitle;
 	private int columnType;
 	private int columnWidth;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUComparator.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUComparator.java
index e742aec..35204f4 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUComparator.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDetailsLabelProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDetailsLabelProvider.java
index 3903e0d..02fa62a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDetailsLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDetailsLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -109,7 +109,8 @@ public class IUDetailsLabelProvider extends ColumnLabelProvider implements ITabl
 				}
 				// It's a raw IU, return the version
 				return iu.getVersion().toString();
-
+			case IUColumnConfig.COLUMN_PROVIDER :
+				return iu.getProperty(IInstallableUnit.PROP_PROVIDER, null);
 			case IUColumnConfig.COLUMN_SIZE :
 				if (element instanceof IIUElement && ((IIUElement) element).shouldShowSize())
 					return getIUSize((IIUElement) element);
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDragAdapter.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDragAdapter.java
index 57e1630..2caaacf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDragAdapter.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/IUDragAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/InstallIUDropAdapter.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/InstallIUDropAdapter.java
deleted file mode 100644
index bb09719..0000000
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/InstallIUDropAdapter.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.p2.ui.viewers;
-
-import java.util.*;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.equinox.internal.p2.ui.*;
-import org.eclipse.equinox.internal.p2.ui.actions.InstallAction;
-import org.eclipse.equinox.internal.p2.ui.model.InstalledIUElement;
-import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.p2.ui.ProvisioningUI;
-import org.eclipse.jface.util.LocalSelectionTransfer;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.dnd.*;
-
-/**
- * Defines drop behavior for selected IUs to mean install the IU on the target
- * profile.
- * 
- * @since 3.4
- * 
- */
-public class InstallIUDropAdapter extends ViewerDropAdapter {
-
-	static boolean DEBUG = false;
-	ProvisioningUI ui;
-
-	/**
-	 * Constructs a new drop adapter.
-	 * 
-	 * @param viewer
-	 *            the navigator's viewer
-	 */
-	public InstallIUDropAdapter(ProvisioningUI ui, StructuredViewer viewer) {
-		super(viewer);
-		this.ui = ui;
-	}
-
-	/**
-	 * Returns an error status with the given info.
-	 */
-	IStatus error(String message) {
-		return error(message, null);
-	}
-
-	/**
-	 * Returns an error status with the given info.
-	 */
-	IStatus error(String message, Throwable exception) {
-		return new Status(IStatus.ERROR, ProvUIActivator.PLUGIN_ID, 0, message, exception);
-	}
-
-	/**
-	 * Returns the target profile id for the drop. If the drop is positioned on an
-	 * IU, return its parent profile id.
-	 */
-	private String getProfileTarget(Object mouseTarget) {
-		IProfile profile = ProvUI.getAdapter(mouseTarget, IProfile.class);
-		if (profile != null) {
-			return profile.getProfileId();
-		}
-
-		if (mouseTarget instanceof InstalledIUElement) {
-			return ((InstalledIUElement) mouseTarget).getProfileId();
-		}
-		return null;
-	}
-
-	/**
-	 * Returns an status indicating success.
-	 */
-	private IStatus ok() {
-		return new Status(IStatus.OK, ProvUIActivator.PLUGIN_ID, 0, null, null);
-	}
-
-	/**
-	 * Perform the drop.
-	 * 
-	 * @see org.eclipse.swt.dnd.DropTargetListener#drop(org.eclipse.swt.dnd.DropTargetEvent)
-	 */
-	public boolean performDrop(final Object data) {
-		if (DEBUG) {
-			System.out.println("Perform drop on target: " + getCurrentTarget() + " with data: " + data); //$NON-NLS-1$//$NON-NLS-2$
-		}
-		if (getCurrentTarget() == null || data == null)
-			return false;
-
-		ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
-		if (!(selection instanceof IStructuredSelection) || selection.isEmpty())
-			return false;
-
-		String profileId = getProfileTarget(getCurrentTarget());
-		if (getCurrentOperation() == DND.DROP_COPY && profileId != null) {
-			final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-			ISelectionProvider selectionProvider = new ISelectionProvider() {
-
-				/* (non-Javadoc)
-				 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
-				 */
-				public void addSelectionChangedListener(ISelectionChangedListener listener) {
-					// Ignore because the selection won't change 
-				}
-
-				/* (non-Javadoc)
-				 * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
-				 */
-				public ISelection getSelection() {
-					if (DEBUG) {
-						System.out.println("Selection was queried by action"); //$NON-NLS-1$
-						System.out.println(structuredSelection.toString());
-					}
-					return structuredSelection;
-				}
-
-				/* (non-Javadoc)
-				 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
-				 */
-				public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-					// ignore because the selection is static
-				}
-
-				/* (non-Javadoc)
-				 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
-				 */
-				public void setSelection(ISelection sel) {
-					throw new UnsupportedOperationException("This ISelectionProvider is static, and cannot be modified."); //$NON-NLS-1$
-				}
-			};
-			InstallAction action = new InstallAction(ui, selectionProvider, profileId);
-			if (DEBUG)
-				System.out.println("Running install action"); //$NON-NLS-1$
-			action.run();
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Validate whether the drop is valid for the target
-	 */
-	public boolean validateDrop(Object target, int dragOperation, TransferData transferType) {
-
-		if (LocalSelectionTransfer.getTransfer().isSupportedType(transferType)) {
-			IStatus status = validateTarget(target, transferType);
-			if (DEBUG) {
-				System.out.println("Validate target: " + status); //$NON-NLS-1$
-			}
-			return status.isOK();
-		}
-		return false;
-	}
-
-	/*
-	 * Overridden to force a copy when the drag is valid.
-	 * 
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragEnter(org.eclipse.swt.dnd.DropTargetEvent)
-	 */
-	public void dragEnter(DropTargetEvent event) {
-		event.detail = DND.DROP_COPY;
-		super.dragEnter(event);
-	}
-
-	/**
-	 * Ensures that the drop target meets certain criteria
-	 */
-	private IStatus validateTarget(Object target, TransferData transferType) {
-		if (LocalSelectionTransfer.getTransfer().isSupportedType(transferType)) {
-			IInstallableUnit[] ius = getSelectedIUs();
-
-			if (ius.length == 0) {
-				return error(ProvUIMessages.ProvDropAdapter_NoIUsToDrop);
-			}
-			if (getProfileTarget(target) != null) {
-				return ok();
-			}
-			return error(ProvUIMessages.ProvDropAdapter_InvalidDropTarget);
-		}
-		return error(ProvUIMessages.ProvDropAdapter_UnsupportedDropOperation);
-	}
-
-	/**
-	 * Returns the resource selection from the LocalSelectionTransfer.
-	 * 
-	 * @return the resource selection from the LocalSelectionTransfer
-	 */
-	private IInstallableUnit[] getSelectedIUs() {
-		ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
-		List<IInstallableUnit> ius = new ArrayList<IInstallableUnit>();
-
-		if (!(selection instanceof IStructuredSelection) || selection.isEmpty()) {
-			return null;
-		}
-		IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-
-		Iterator<?> iter = structuredSelection.iterator();
-		while (iter.hasNext()) {
-			IInstallableUnit iu = ProvUI.getAdapter(iter.next(), IInstallableUnit.class);
-			if (iu != null) {
-				ius.add(iu);
-			}
-		}
-		return ius.toArray(new IInstallableUnit[ius.size()]);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementComparer.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementComparer.java
index 7eddb3b..850e15c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementComparer.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementComparer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementContentProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementContentProvider.java
index 533fba2..0bf4635 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementContentProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -8,7 +8,6 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.equinox.internal.p2.ui.viewers;
 
 import java.util.ArrayList;
@@ -30,7 +29,7 @@ import org.eclipse.ui.progress.*;
 public class ProvElementContentProvider implements ITreeContentProvider {
 
 	private boolean fetchInBackground = false;
-	private Viewer viewer;
+	Viewer viewer;
 	private Job fetchJob;
 	// family is used by test cases
 	Object fetchFamily = new Object();
@@ -151,8 +150,8 @@ public class ProvElementContentProvider implements ITreeContentProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		this.viewer = viewer;
+	public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) {
+		this.viewer = aViewer;
 		if (fetchJob != null) {
 			fetchJob.cancel();
 			fetchJob = null;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementLabelProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementLabelProvider.java
index e82f5f8..f8e2041 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/ProvElementLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -43,6 +43,9 @@ public class ProvElementLabelProvider extends LabelProvider implements ITableLab
 			return ((ProvElement) obj).getLabel(obj);
 		}
 		if (obj instanceof IProfile) {
+			String name = ((IProfile) obj).getProperty(IProfile.PROP_NAME);
+			if (name != null && name.length() > 0)
+				return name;
 			return ((IProfile) obj).getProfileId();
 		}
 		if (obj instanceof IInstallableUnit) {
@@ -115,13 +118,21 @@ public class ProvElementLabelProvider extends LabelProvider implements ITableLab
 			case 0 :
 				return getText(element);
 			case 1 :
+				if (element instanceof ProfileElement)
+					element = ((ProfileElement) element).getAdapter(IProfile.class);
+
 				if (element instanceof IProfile) {
-					return ((IProfile) element).getProperty(IProfile.PROP_NAME);
+					return ((IProfile) element).getProperty(IProfile.PROP_DESCRIPTION);
 				}
 				if (element instanceof IIUElement) {
 					if (((IIUElement) element).shouldShowVersion())
 						return ((IIUElement) element).getIU().getVersion().toString();
 				}
+				if (element instanceof RollbackProfileElement) {
+					if (((RollbackProfileElement) element).getProfileTag() != null) {
+						return ((RollbackProfileElement) element).getProfileTag();
+					}
+				}
 				IInstallableUnit iu = ProvUI.getAdapter(element, IInstallableUnit.class);
 				if (iu != null) {
 					return iu.getVersion().toString();
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryContentProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryContentProvider.java
index 1aa1088..41e3160 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryContentProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryDetailsLabelProvider.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryDetailsLabelProvider.java
index 6247d7d..086aa41 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryDetailsLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/RepositoryDetailsLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/StructuredViewerProvisioningListener.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/StructuredViewerProvisioningListener.java
index 733fd9e..ea51d5b 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/StructuredViewerProvisioningListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/viewers/StructuredViewerProvisioningListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
 package org.eclipse.equinox.internal.p2.ui.viewers;
 
 import org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener;
+import org.eclipse.equinox.internal.p2.ui.ProvisioningOperationRunner;
 import org.eclipse.equinox.internal.p2.ui.model.ProfileElement;
 import org.eclipse.equinox.internal.provisional.p2.repository.RepositoryEvent;
 import org.eclipse.jface.viewers.StructuredViewer;
@@ -33,8 +34,8 @@ public class StructuredViewerProvisioningListener extends ProvUIProvisioningList
 	StructuredViewer viewer;
 	Display display;
 
-	public StructuredViewerProvisioningListener(String name, StructuredViewer viewer, int eventTypes) {
-		super(name, eventTypes);
+	public StructuredViewerProvisioningListener(String name, StructuredViewer viewer, int eventTypes, ProvisioningOperationRunner runner) {
+		super(name, eventTypes, runner);
 		this.viewer = viewer;
 		this.display = viewer.getControl().getDisplay();
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/AcceptLicensesWizardPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/AcceptLicensesWizardPage.java
index 6bba705..88a77ab 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/AcceptLicensesWizardPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/AcceptLicensesWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -357,6 +357,8 @@ public class AcceptLicensesWizardPage extends WizardPage {
 		if (getControl() != null) {
 			Composite parent = getControl().getParent();
 			getControl().dispose();
+			iuViewer = null;
+			sashForm = null;
 			createControl(parent);
 			parent.layout(true);
 		}
@@ -485,4 +487,15 @@ public class AcceptLicensesWizardPage extends WizardPage {
 		}
 		return new int[] {55, 45};
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
+	 */
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible && hasLicensesToAccept() && iuViewer != null) {
+			iuViewer.setSelection(new StructuredSelection(iuViewer.getTree().getItem(0).getData()), true);
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ICopyable.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ICopyable.java
index 70f2d10..2295ce1 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ICopyable.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ICopyable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/InstalledSoftwarePage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/InstalledSoftwarePage.java
index 906213e..c8c3903 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/InstalledSoftwarePage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/InstalledSoftwarePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -68,10 +68,9 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable
 		initializeDialogUnits(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IProvHelpContextIds.INSTALLED_SOFTWARE);
 
-		ui = ProvisioningUI.getDefaultUI();
-		profileId = ui.getProfileId();
+		profileId = getProvisioningUI().getProfileId();
 		if (profileId == null) {
-			IStatus status = ui.getPolicy().getNoProfileChosenStatus();
+			IStatus status = getProvisioningUI().getPolicy().getNoProfileChosenStatus();
 			if (status != null)
 				ProvUI.reportStatus(status, StatusManager.LOG);
 			Text text = new Text(parent, SWT.WRAP | SWT.READ_ONLY);
@@ -92,7 +91,7 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable
 		composite.setLayout(layout);
 
 		// Table of installed IU's
-		installedIUGroup = new InstalledIUGroup(ui, composite, JFaceResources.getDialogFont(), profileId, getColumnConfig());
+		installedIUGroup = new InstalledIUGroup(getProvisioningUI(), composite, JFaceResources.getDialogFont(), profileId, getColumnConfig());
 		// we hook selection listeners on the viewer in createPageButtons because we
 		// rely on the actions we create there getting selection events before we use
 		// them to update button enablement.
@@ -123,7 +122,7 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable
 		// if we successfully try to resolve.  This is done to ensure that progress
 		// is shown properly.
 		// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=236495
-		UpdateAction updateAction = new UpdateAction(ui, new ISelectionProvider() {
+		UpdateAction updateAction = new UpdateAction(getProvisioningUI(), new ISelectionProvider() {
 			public void addSelectionChangedListener(ISelectionChangedListener listener) {
 				installedIUGroup.getStructuredViewer().addSelectionChangedListener(listener);
 			}
@@ -156,7 +155,7 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable
 		updateButton = createButton(parent, UPDATE_ID, updateAction.getText());
 		updateButton.setData(BUTTON_ACTION, updateAction);
 		// Uninstall action
-		Action uninstallAction = new UninstallAction(ui, installedIUGroup.getStructuredViewer(), profileId) {
+		Action uninstallAction = new UninstallAction(getProvisioningUI(), installedIUGroup.getStructuredViewer(), profileId) {
 			public void run() {
 				super.run();
 				if (getReturnCode() == Window.OK)
@@ -211,7 +210,7 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable
 	}
 
 	private IUColumnConfig[] getColumnConfig() {
-		return new IUColumnConfig[] {new IUColumnConfig(ProvUIMessages.ProvUI_NameColumnTitle, IUColumnConfig.COLUMN_NAME, ILayoutConstants.DEFAULT_PRIMARY_COLUMN_WIDTH), new IUColumnConfig(ProvUIMessages.ProvUI_VersionColumnTitle, IUColumnConfig.COLUMN_VERSION, ILayoutConstants.DEFAULT_SMALL_COLUMN_WIDTH), new IUColumnConfig(ProvUIMessages.ProvUI_IdColumnTitle, IUColumnConfig.COLUMN_ID, ILayoutConstants.DEFAULT_COLUMN_WIDTH)};
+		return new IUColumnConfig[] {new IUColumnConfig(ProvUIMessages.ProvUI_NameColumnTitle, IUColumnConfig.COLUMN_NAME, ILayoutConstants.DEFAULT_PRIMARY_COLUMN_WIDTH), new IUColumnConfig(ProvUIMessages.ProvUI_VersionColumnTitle, IUColumnConfig.COLUMN_VERSION, ILayoutConstants.DEFAULT_SMALL_COLUMN_WIDTH), new IUColumnConfig(ProvUIMessages.ProvUI_IdColumnTitle, IUColumnConfig.COLUMN_ID, ILayoutConstants.DEFAULT_COLUMN_WIDTH), new IUColumnConfig(ProvUIMessages.ProvUI_ProviderColumnTitle, IUColumnConfig.COLUMN_PROVIDER, ILayoutConstants.DEFAULT_COLUMN_WIDTH)};
 	}
 
 	private int getDefaultWidth(Control control) {
@@ -253,4 +252,22 @@ public class InstalledSoftwarePage extends InstallationPage implements ICopyable
 				break;
 		}
 	}
+
+	ProvisioningUI getProvisioningUI() {
+		// if a UI has not been set then assume that the current default UI is the right thing
+		if (ui == null)
+			return ui = ProvisioningUI.getDefaultUI();
+		return ui;
+	}
+
+	/**
+	 * Set the provisioning UI to use with this page
+	 * 
+	 * @param value the provisioning ui to use
+	 * @since 2.1
+	 */
+	public void setProvisioningUI(ProvisioningUI value) {
+		ui = value;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LicenseManager.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LicenseManager.java
index 792297f..de836a0 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LicenseManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LicenseManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LoadMetadataRepositoryJob.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LoadMetadataRepositoryJob.java
index 8d67bdb..bae1955 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LoadMetadataRepositoryJob.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/LoadMetadataRepositoryJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009,2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -93,15 +93,17 @@ public class LoadMetadataRepositoryJob extends ProvisioningJob {
 		if (locations == null || locations.length == 0)
 			return Status.OK_STATUS;
 
+		IStatus status;
+
 		// We batch all the time as a way of distinguishing client-initiated repository 
 		// jobs from low level repository manipulation.
 		ui.signalRepositoryOperationStart();
 		try {
-			doLoad(monitor);
+			status = doLoad(monitor);
 		} finally {
 			ui.signalRepositoryOperationComplete(null, getProperty(SUPPRESS_REPOSITORY_EVENTS) == null);
 		}
-		return Status.OK_STATUS;
+		return status;
 	}
 
 	private IStatus doLoad(IProgressMonitor monitor) {
@@ -115,6 +117,8 @@ public class LoadMetadataRepositoryJob extends ProvisioningJob {
 				repoCache.add(ProvUI.getMetadataRepositoryManager(ui.getSession()).loadRepository(locations[i], sub.newChild(100)));
 			} catch (ProvisionException e) {
 				handleLoadFailure(e, locations[i]);
+			} catch (OperationCanceledException e) {
+				return Status.CANCEL_STATUS;
 			}
 		}
 		return getCurrentStatus();
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/Policy.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/Policy.java
index 71e68ea..5e62d5f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/Policy.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/Policy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import org.eclipse.equinox.p2.operations.ProfileChangeOperation;
 import org.eclipse.equinox.p2.operations.UpdateOperation;
 import org.eclipse.equinox.p2.query.IQuery;
 import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.statushandlers.StatusManager;
 
@@ -69,6 +70,30 @@ public class Policy {
 	 */
 	public static final int RESTART_POLICY_PROMPT_RESTART_OR_APPLY = 4;
 
+	/**
+	 * A constant indicating that the user should be presented with an
+	 * update wizard that shows a list of IUs that can be updated.
+	 * Even when only one update is available, a list showing the single
+	 * update will be used.  This option is recommended when the user's view
+	 * of the system is a set of component updates and the user is expected
+	 * to have knowledge of the composition of the system.
+	 * 
+	 * @since 2.1
+	 */
+	public static final int UPDATE_STYLE_MULTIPLE_IUS = 1;
+
+	/**
+	 * A constant indicating that the user should be presented with an
+	 * update wizard that shows detail about a single IU that can be
+	 * updated.  If more than one IU can be updated, the user will be shown
+	 * a list; however, this option is recommended to be used only when
+	 * the user's view of the system is a single application that can be 
+	 * updated, and only one IU is expected to be available for update.
+	 * 
+	 * @since 2.1
+	 */
+	public static final int UPDATE_STYLE_SINGLE_IUS = 2;
+
 	private IQuery<IInstallableUnit> visibleAvailableIUQuery = QueryUtil.createIUGroupQuery();
 	private IQuery<IInstallableUnit> visibleInstalledIUQuery = new UserVisibleRootQuery();
 	private boolean groupByCategory = true;
@@ -78,6 +103,9 @@ public class Policy {
 	private int restartPolicy = RESTART_POLICY_PROMPT_RESTART_OR_APPLY;
 	private String repoPrefPageId;
 	private String repoPrefPageName;
+	private boolean filterOnEnv = false;
+	private int updateWizardStyle = UPDATE_STYLE_MULTIPLE_IUS;
+	private Point wizardDetailsPreferredSize = null;
 
 	/**
 	 * Answer a boolean indicating whether the caller should continue to work with the
@@ -261,6 +289,30 @@ public class Policy {
 	}
 
 	/**
+	 * Return a boolean value indicating whether or not the list of available
+	 * software should be filtered based on the environment settings of the profile.
+	 * 
+	 * @return <code>true</code> if the results should be filtered 
+	 * and <code>false</code> otherwise.
+	 * @since 2.1
+	 */
+	public boolean getFilterOnEnv() {
+		return filterOnEnv;
+	}
+
+	/**
+	 * Set a boolean value indicating whether or not the list of available
+	 * software should be filtered based on the environment settings of the profile.
+	 * 
+	 * @param filterOnEnv <code>true</code> if the results should be filtered 
+	 * and <code>false</code> otherwise.
+	 * @since 2.1
+	 */
+	public void setFilterOnEnv(boolean filterOnEnv) {
+		this.filterOnEnv = filterOnEnv;
+	}
+
+	/**
 	 * Return a boolean indicating whether available software should be
 	 * grouped by category.
 	 * 
@@ -330,4 +382,69 @@ public class Policy {
 	public void setRepositoryPreferencePageName(String name) {
 		this.repoPrefPageName = name;
 	}
+
+	/**
+	 * Get the update wizard style that should be used to determine
+	 * what to show the user when updates are available.
+	 * 
+	 * @return an integer constant describing the update wizard style
+	 * 
+	 * @see #UPDATE_STYLE_SINGLE_IUS
+	 * @see #UPDATE_STYLE_MULTIPLE_IUS
+	 * 
+	 * @since 2.1
+	 */
+
+	public int getUpdateWizardStyle() {
+		return updateWizardStyle;
+	}
+
+	/**
+	 * Get the update wizard style that should be used to determine
+	 * what to show the user when updates are available.
+	 * 
+	 * @param updateWizardStyle an integer constant describing the update wizard style
+	 * 
+	 * @see #UPDATE_STYLE_SINGLE_IUS
+	 * @see #UPDATE_STYLE_MULTIPLE_IUS
+	 * 
+	 * @since 2.1
+	 */
+
+	public void setUpdateWizardStyle(int updateWizardStyle) {
+		this.updateWizardStyle = updateWizardStyle;
+	}
+
+	/**
+	 * Get a point describing the preferred size of the details area
+	 * shown in single IU update wizards.  This value may be null, in which case
+	 * the wizard may compute a default size.  
+	 * 
+	 * @return a Point describing the preferred size of the update wizard details area.
+	 * 
+	 * @see #UPDATE_STYLE_SINGLE_IUS
+	 *
+	 * @since 2.1
+	 */
+
+	public Point getUpdateDetailsPreferredSize() {
+		return wizardDetailsPreferredSize;
+	}
+
+	/**
+	 * Set the preferred size of the details area shown in update wizards which
+	 * notify the user of a single update.  Clients can use this value to ensure
+	 * that their product's branded update notifier is sized to fit the expected
+	 * content.
+	 * 
+	 * @param preferredSize a Point describing the preferred size
+	 * 
+	 * @see #UPDATE_STYLE_SINGLE_IUS
+	 * 
+	 * @since 2.1
+	 */
+
+	public void setUpdateDetailsPreferredSize(Point preferredSize) {
+		this.wizardDetailsPreferredSize = preferredSize;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvisioningUI.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvisioningUI.java
index d918a69..6b86256 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvisioningUI.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/ProvisioningUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ package org.eclipse.equinox.p2.ui;
 import java.net.URI;
 import java.util.Collection;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
 import org.eclipse.equinox.internal.p2.core.helpers.Tracing;
@@ -76,6 +77,8 @@ public class ProvisioningUI {
 			this.profileId = IProfileRegistry.SELF;
 		this.session = session;
 		this.runner = new ProvisioningOperationRunner(this);
+		// register this UI with the agent so other UI related agent services can find it
+		session.getProvisioningAgent().registerService(ProvisioningUI.class.getName(), this);
 	}
 
 	/**
@@ -114,7 +117,7 @@ public class ProvisioningUI {
 	 * @return the repository tracker, must not be <code>null</code>
 	 */
 	public RepositoryTracker getRepositoryTracker() {
-		return (RepositoryTracker) ServiceHelper.getService(ProvUIActivator.getContext(), RepositoryTracker.class.getName());
+		return (RepositoryTracker) session.getProvisioningAgent().getService(RepositoryTracker.class.getName());
 	}
 
 	/**
@@ -224,12 +227,23 @@ public class ProvisioningUI {
 	 * @return the wizard return code
 	 */
 	public int openUpdateWizard(boolean skipSelectionsPage, UpdateOperation operation, LoadMetadataRepositoryJob job) {
+		if (getPolicy().getUpdateWizardStyle() == Policy.UPDATE_STYLE_SINGLE_IUS && UpdateSingleIUWizard.validFor(operation)) {
+			UpdateSingleIUWizard wizard = new UpdateSingleIUWizard(this, operation);
+			WizardDialog dialog = new WizardDialog(ProvUI.getDefaultParentShell(), wizard);
+			dialog.create();
+			// TODO do we need a hook for providing custom help?  Or would this just be shown in the update browser?
+			return dialog.open();
+		}
 		UpdateWizard wizard = new UpdateWizard(this, operation, operation.getSelectedUpdates(), job);
 		wizard.setSkipSelectionsPage(skipSelectionsPage);
 		WizardDialog dialog = new ProvisioningWizardDialog(ProvUI.getDefaultParentShell(), wizard);
 		dialog.create();
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), IProvHelpContextIds.UPDATE_WIZARD);
+		if (wizard.getCurrentStatus().getSeverity() == IStatus.ERROR) {
+			wizard.deselectLockedIUs();
+		}
 		return dialog.open();
+
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RepositoryManipulationPage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RepositoryManipulationPage.java
index e1f2935..843cfc5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RepositoryManipulationPage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RepositoryManipulationPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -374,10 +374,10 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb
 			verticalButtonBar.setLayoutData(data);
 			listener = getViewerProvisioningListener();
 
-			ProvUI.addProvisioningListener(listener);
+			ProvUI.getProvisioningEventBus(ui.getSession()).addListener(listener);
 			composite.addDisposeListener(new DisposeListener() {
 				public void widgetDisposed(DisposeEvent event) {
-					ProvUI.removeProvisioningListener(listener);
+					ProvUI.getProvisioningEventBus(ui.getSession()).removeListener(listener);
 				}
 			});
 
@@ -540,12 +540,12 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb
 	 */
 	public boolean performOk() {
 		if (changed)
-			ElementUtils.updateRepositoryUsingElements(getElements(), getShell());
+			ElementUtils.updateRepositoryUsingElements(ui, getElements(), getShell());
 		return super.performOk();
 	}
 
 	private StructuredViewerProvisioningListener getViewerProvisioningListener() {
-		return new StructuredViewerProvisioningListener(RepositoryManipulationPage.this.getClass().getName(), repositoryViewer, ProvUIProvisioningListener.PROV_EVENT_METADATA_REPOSITORY) {
+		return new StructuredViewerProvisioningListener(RepositoryManipulationPage.this.getClass().getName(), repositoryViewer, ProvUIProvisioningListener.PROV_EVENT_METADATA_REPOSITORY, ui.getOperationRunner()) {
 			protected void repositoryDiscovered(RepositoryEvent e) {
 				RepositoryManipulationPage.this.safeRefresh(null);
 			}
@@ -868,7 +868,7 @@ public class RepositoryManipulationPage extends PreferencePage implements IWorkb
 				public void addRepository(URI location, String nickname, ProvisioningSession session) {
 					MetadataRepositoryElement element = getInput().get(location);
 					if (element == null) {
-						element = new MetadataRepositoryElement(getInput(), location, true);
+						element = new MetadataRepositoryElement(getInput(), null, ui, location, true);
 						getInput().put(element);
 					}
 					if (nickname != null)
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RevertProfilePage.java b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RevertProfilePage.java
index 8d95e0f..d85252c 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RevertProfilePage.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/p2/ui/RevertProfilePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.equinox.p2.ui;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
 import java.util.Iterator;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.ui.*;
@@ -66,6 +67,52 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 	InstalledIUGroup installedIUGroup;
 	ProvisioningUI ui;
 
+	private static class TagEditingSuport extends EditingSupport {
+
+		private ProvisioningUI ui;
+
+		public TagEditingSuport(TableViewer viewer, ProvisioningUI ui) {
+			super(viewer);
+			this.ui = ui;
+		}
+
+		protected CellEditor getCellEditor(Object element) {
+			return new TextCellEditor(((TableViewer) getViewer()).getTable());
+		}
+
+		protected boolean canEdit(Object element) {
+			return element instanceof RollbackProfileElement;
+		}
+
+		protected Object getValue(Object element) {
+			if (element instanceof RollbackProfileElement) {
+				return ((RollbackProfileElement) element).getProfileTag() != null ? ((RollbackProfileElement) element).getProfileTag() : ""; //$NON-NLS-1$
+			}
+			return null;
+		}
+
+		protected void setValue(Object element, Object value) {
+			if (element instanceof RollbackProfileElement && value instanceof String) {
+				RollbackProfileElement ele = ((RollbackProfileElement) element);
+				ele.setProfileTag((String) value);
+				// save
+				IProfileRegistry registry = ProvUI.getProfileRegistry(ui.getSession());
+				if (registry != null) {
+					IStatus status;
+					if (((String) value).length() > 0) {
+						status = registry.setProfileStateProperty(ele.getProfileId(), ele.getTimestamp(), IProfile.STATE_PROP_TAG, (String) value);
+					} else {
+						status = registry.removeProfileStateProperties(ele.getProfileId(), ele.getTimestamp(), Collections.singleton(IProfile.STATE_PROP_TAG));
+					}
+					if (!status.isOK()) {
+						StatusManager.getManager().handle(status);
+					}
+				}
+				getViewer().update(element, null);
+			}
+		}
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.ui.about.InstallationPage#createPageButtons(org.eclipse.swt.widgets.Composite)
@@ -86,10 +133,9 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
 	public void createControl(Composite parent) {
-		ui = ProvisioningUI.getDefaultUI();
-		profileId = ui.getProfileId();
+		profileId = getProvisioningUI().getProfileId();
 		if (profileId == null) {
-			IStatus status = ui.getPolicy().getNoProfileChosenStatus();
+			IStatus status = getProvisioningUI().getPolicy().getNoProfileChosenStatus();
 			if (status != null)
 				ProvUI.reportStatus(status, StatusManager.LOG);
 			Text text = new Text(parent, SWT.WRAP | SWT.READ_ONLY);
@@ -127,7 +173,7 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 
 		Label label = new Label(composite, SWT.NONE);
 		label.setText(ProvUIMessages.RevertDialog_ConfigsLabel);
-		configsViewer = new TableViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+		configsViewer = new TableViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
 		ProvElementContentProvider provider = new ProvElementContentProvider() {
 			protected void finishedFetchingElements(Object o) {
 				Object element = configsViewer.getElementAt(0);
@@ -135,6 +181,8 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 					configsViewer.setSelection(new StructuredSelection(element));
 			}
 		};
+		setConfigsColumns(configsViewer);
+
 		// Use deferred fetch because getting snapshots is expensive.
 		provider.setFetchInBackground(true);
 		configsViewer.setContentProvider(provider);
@@ -168,6 +216,23 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 		configsViewer.getControl().setLayoutData(gd);
 	}
 
+	private void setConfigsColumns(TableViewer tableViewer) {
+		tableViewer.getTable().setHeaderVisible(true);
+		TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
+		TableColumn tc = column.getColumn();
+		tc.setResizable(true);
+		tc.setText(ProvUIMessages.RevertProfilePage_ProfileTimestampColumn);
+		tc.setWidth(175);
+
+		column = new TableViewerColumn(tableViewer, SWT.NONE);
+		tc = column.getColumn();
+		tc.setResizable(true);
+		tc.setText(ProvUIMessages.RevertProfilePage_ProfileTagColumn);
+		tc.setWidth(200);
+
+		column.setEditingSupport(new TagEditingSuport(tableViewer, ui));
+	}
+
 	private void createContentsSection(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
@@ -213,7 +278,7 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 	}
 
 	private Object getInput() {
-		ProfileSnapshots element = new ProfileSnapshots(profileId);
+		ProfileSnapshots element = new ProfileSnapshots(profileId, getProvisioningUI().getSession());
 		return element;
 	}
 
@@ -335,7 +400,7 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 				ProfileModificationJob op = new ProfileModificationJob(ProvUIMessages.RevertDialog_RevertOperationLabel, getSession(), profileId, plan[0], new ProvisioningContext(getSession().getProvisioningAgent()));
 				// we want to force a restart (not allow apply changes)
 				op.setRestartPolicy(ProvisioningJob.RESTART_ONLY);
-				ui.schedule(op, StatusManager.SHOW | StatusManager.LOG);
+				getProvisioningUI().schedule(op, StatusManager.SHOW | StatusManager.LOG);
 				reverted = true;
 			} else if (plan[0].getStatus().getSeverity() != IStatus.CANCEL) {
 				ProvUI.reportStatus(plan[0].getStatus(), StatusManager.LOG | StatusManager.SHOW);
@@ -391,13 +456,13 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 					if (registry != null) {
 						try {
 							registry.removeProfile(profileId, snapshot.getTimestamp());
-							configsViewer.refresh();
 						} catch (ProvisionException e) {
 							ProvUI.handleException(e, null, StatusManager.SHOW | StatusManager.LOG);
 						}
 					}
 				}
 			}
+			configsViewer.refresh();
 		}
 	}
 
@@ -406,11 +471,23 @@ public class RevertProfilePage extends InstallationPage implements ICopyable {
 	}
 
 	ProvisioningUI getProvisioningUI() {
-		return ProvisioningUI.getDefaultUI();
+		// if a UI has not been set then assume that the current default UI is the right thing
+		if (ui == null)
+			return ui = ProvisioningUI.getDefaultUI();
+		return ui;
 	}
 
 	protected IStructuredSelection getSelection() {
 		return (IStructuredSelection) configsViewer.getSelection();
 	}
 
+	/**
+	 * Set the provisioning UI to use with this page
+	 * 
+	 * @param value the provisioning ui to use
+	 * @since 2.1
+	 */
+	public void setProvisioningUI(ProvisioningUI value) {
+		ui = value;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF
index 3f610cf..1efcb2e 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.updatechecker;singleton:=true
-Bundle-Version: 1.1.101.qualifier
+Bundle-Version: 1.1.200.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.equinox.internal.p2.updatechecker;x-internal:=true,
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/build.properties b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/build.properties
index c15f3da..a11f370 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml
index fe21958..69b0527 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.updatechecker</artifactId>
-  <version>1.1.100.qualifier</version>
+  <version>1.1.200.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java
index 31c6e56..4d54e71 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/IUpdateChecker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/UpdateEvent.java b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/UpdateEvent.java
index 7c4a388..5ee04e7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/UpdateEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatechecker/src/org/eclipse/equinox/internal/provisional/p2/updatechecker/UpdateEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF
index d1ca6b1..0c80433 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.updatesite;singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.updatesite.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/plugin.properties b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/plugin.properties
index 1c5d9c0..9ccbb8d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/plugin.properties
@@ -8,5 +8,5 @@
 #  Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName = Update site repository adapter bundle (Incubation)
+pluginName = Equinox Provisioning Legacy Update Site Support
 providerName = Eclipse.org - Equinox
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/pom.xml b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/pom.xml
index 7bf1c8a..465e97f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/pom.xml
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/pom.xml
@@ -9,6 +9,6 @@
   </parent>
   <groupId>org.eclipse</groupId>
   <artifactId>org.eclipse.equinox.p2.updatesite</artifactId>
-  <version>1.0.200.qualifier</version>
+  <version>1.0.300.qualifier</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryPublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryPublisherApplication.java
index 4f5346e..28f0525 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryPublisherApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryPublisherApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+ * Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryXMLAction.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryXMLAction.java
index 8a48a09..2f6eaa2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryXMLAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/CategoryXMLAction.java
@@ -1,18 +1,18 @@
 /******************************************************************************* 
-* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
+* Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   EclipseSource - initial API and implementation
+*   Sonatype, Inc. - transport split
 ******************************************************************************/
 package org.eclipse.equinox.internal.p2.updatesite;
 
-import org.eclipse.equinox.p2.core.ProvisionException;
-
 import java.net.URI;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.publisher.IPublisherInfo;
 import org.eclipse.equinox.p2.publisher.IPublisherResult;
 
@@ -28,7 +28,7 @@ public class CategoryXMLAction extends SiteXMLAction {
 
 	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
 		try {
-			updateSite = UpdateSite.loadCategoryFile(location, monitor);
+			updateSite = UpdateSite.loadCategoryFile(location, getTransport(publisherInfo), monitor);
 		} catch (ProvisionException e) {
 			return new Status(IStatus.ERROR, Activator.ID, Messages.Error_generating_category, e);
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DefaultSiteParser.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DefaultSiteParser.java
index cdc70b7..0338fdc 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DefaultSiteParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DefaultSiteParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -481,11 +481,9 @@ public class DefaultSiteParser extends DefaultHandler {
 
 		String msg;
 		if (name.equals("")) //$NON-NLS-1$
-			msg = NLS.bind(Messages.DefaultSiteParser_ErrorParsing, (new String[] {ex.getMessage()}));
-		else {
-			String[] values = new String[] {name, Integer.toString(ex.getLineNumber()), Integer.toString(ex.getColumnNumber()), ex.getMessage()};
-			msg = NLS.bind(Messages.DefaultSiteParser_ErrorlineColumnMessage, values);
-		}
+			name = siteLocation.toString();
+		String[] values = new String[] {name, Integer.toString(ex.getLineNumber()), Integer.toString(ex.getColumnNumber()), ex.getMessage()};
+		msg = NLS.bind(Messages.DefaultSiteParser_ErrorlineColumnMessage, values);
 		error(new Status(IStatus.ERROR, PLUGIN_ID, msg, ex));
 	}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DigestParser.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DigestParser.java
index 9a08094..86fabf2 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DigestParser.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/DigestParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/LocalUpdateSiteAction.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/LocalUpdateSiteAction.java
index 6f4545f..251f31d 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/LocalUpdateSiteAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/LocalUpdateSiteAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/Messages.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/Messages.java
index 8fb8851..fc2de79 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/Messages.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteFeaturesAction.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteFeaturesAction.java
index 26434ef..a66fd64 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteFeaturesAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteFeaturesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2011 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -10,15 +10,13 @@
  ******************************************************************************/
 package org.eclipse.equinox.internal.p2.updatesite;
 
-import org.eclipse.equinox.p2.core.ProvisionException;
-
 import java.util.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.metadata.IArtifactKey;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.publisher.*;
 import org.eclipse.equinox.p2.publisher.eclipse.*;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.util.NLS;
 
@@ -64,7 +62,7 @@ public class RemoteFeaturesAction extends FeaturesAction {
 					mockManifest.put("Bundle-Version", entry.getVersion()); //$NON-NLS-1$
 					BundleDescription bundleDescription = BundlesAction.createBundleDescription(mockManifest, null);
 					IArtifactKey key = BundlesAction.createBundleArtifactKey(entry.getId(), entry.getVersion());
-					IInstallableUnit[] bundleIUs = PublisherHelper.createEclipseIU(bundleDescription, entry.isUnpack(), key, extraProperties);
+					IInstallableUnit[] bundleIUs = EclipsePublisherHelper.createEclipseIU(bundleDescription, entry.isUnpack(), key, extraProperties);
 					for (int n = 0; n < bundleIUs.length; n++)
 						result.addIU(bundleIUs[n], IPublisherResult.ROOT);
 				}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteUpdateSiteAction.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteUpdateSiteAction.java
index f7278e2..bd983ae 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteUpdateSiteAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/RemoteUpdateSiteAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteCategory.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteCategory.java
index 06ed2a9..2a76d39 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteCategory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteCategory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteFeature.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteFeature.java
index 0a70eba..d720c20 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteFeature.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteFeature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteModel.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteModel.java
index 9beaa9f..e45f08f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteModel.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -222,7 +222,6 @@ public class SiteModel {
 	/**
 	 * Returns the URI from which the list of mirrors of this site can be retrieved.
 	 * 
-	 * @since org.eclipse.equinox.p2.metadata.generator 1.0
 	 */
 	public String getMirrorsURI() {
 		return mirrorsURIString;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteXMLAction.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteXMLAction.java
index 4d5bd40..c11ac07 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteXMLAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/SiteXMLAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -7,6 +7,7 @@
  * Contributors: 
  *   Code 9 - initial API and implementation
  *   IBM - ongoing development
+ *   Sonatype, Inc. - transport split
  ******************************************************************************/
 package org.eclipse.equinox.internal.p2.updatesite;
 
@@ -18,6 +19,7 @@ import java.util.Map.Entry;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
@@ -88,7 +90,7 @@ public class SiteXMLAction extends AbstractPublisherAction {
 	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
 		if (updateSite == null) {
 			try {
-				updateSite = UpdateSite.load(location, monitor);
+				updateSite = UpdateSite.load(location, (Transport) publisherInfo.getMetadataRepository().getProvisioningAgent().getService(Transport.SERVICE_NAME), monitor);
 			} catch (ProvisionException e) {
 				return new Status(IStatus.ERROR, Activator.ID, Messages.Error_generating_siteXML, e);
 			} catch (OperationCanceledException e) {
@@ -408,4 +410,14 @@ public class SiteXMLAction extends AbstractPublisherAction {
 			return URIUtil.toUnencodedString(updateSite.getLocation()) + "." + categoryName; //$NON-NLS-1$
 		return categoryName;
 	}
+
+	protected Transport getTransport(IPublisherInfo info) {
+		@SuppressWarnings("rawtypes")
+		IRepository repo = info.getMetadataRepository();
+		if (repo == null)
+			repo = info.getArtifactRepository();
+		if (repo == null)
+			throw new IllegalStateException("The transport service can not be found."); //$NON-NLS-1$
+		return (Transport) repo.getProvisioningAgent().getService(Transport.SERVICE_NAME);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSite.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSite.java
index 6c09b54..00a37b5 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSite.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.updatesite;
 
@@ -19,7 +20,7 @@ import java.util.zip.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
 import org.eclipse.equinox.internal.p2.publisher.eclipse.FeatureParser;
-import org.eclipse.equinox.internal.p2.repository.RepositoryTransport;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.publisher.eclipse.*;
 import org.eclipse.osgi.util.NLS;
@@ -54,6 +55,7 @@ public class UpdateSite {
 	private static Map<String, SoftReference<UpdateSite>> categoryCache = new HashMap<String, SoftReference<UpdateSite>>();
 	// map of String (featureID_featureVersion) to Feature
 	private Map<String, Feature> featureCache = new HashMap<String, Feature>();
+	private Transport transport;
 
 	/*
 	 * Return a URI based on the given URI, which points to a site.xml file.
@@ -79,7 +81,7 @@ public class UpdateSite {
 	 * @return A CategoryFile
 	 * @throws ProvisionException
 	 */
-	public static synchronized UpdateSite loadCategoryFile(URI location, IProgressMonitor monitor) throws ProvisionException {
+	public static synchronized UpdateSite loadCategoryFile(URI location, Transport transport, IProgressMonitor monitor) throws ProvisionException {
 		if (location == null)
 			return null;
 		UpdateSite result = null;
@@ -92,14 +94,14 @@ public class UpdateSite {
 		}
 
 		InputStream input = null;
-		File siteFile = loadActualSiteFile(location, location, monitor);
+		File siteFile = loadActualSiteFile(location, location, transport, monitor);
 		try {
 			CategoryParser siteParser = new CategoryParser(location);
 			Checksum checksum = new CRC32();
 			input = new CheckedInputStream(new BufferedInputStream(new FileInputStream(siteFile)), checksum);
 			SiteModel siteModel = siteParser.parse(input);
 			String checksumString = Long.toString(checksum.getValue());
-			result = new UpdateSite(siteModel, location, checksumString);
+			result = new UpdateSite(siteModel, location, transport, checksumString);
 			if (!PROTOCOL_FILE.equals(location.getScheme()))
 				categoryCache.put(location.toString(), new SoftReference<UpdateSite>(result));
 			return result;
@@ -124,7 +126,7 @@ public class UpdateSite {
 	/*
 	 * Load and return an update site object from the given location.
 	 */
-	public static synchronized UpdateSite load(URI location, IProgressMonitor monitor) throws ProvisionException {
+	public static synchronized UpdateSite load(URI location, Transport transport, IProgressMonitor monitor) throws ProvisionException {
 		if (location == null)
 			return null;
 
@@ -139,14 +141,14 @@ public class UpdateSite {
 		}
 
 		InputStream input = null;
-		File siteFile = loadSiteFile(location, monitor);
+		File siteFile = loadActualSiteFile(location, getSiteURI(location), transport, monitor);
 		try {
 			DefaultSiteParser siteParser = new DefaultSiteParser(location);
 			Checksum checksum = new CRC32();
 			input = new CheckedInputStream(new BufferedInputStream(new FileInputStream(siteFile)), checksum);
 			SiteModel siteModel = siteParser.parse(input);
 			String checksumString = Long.toString(checksum.getValue());
-			result = new UpdateSite(siteModel, getSiteURI(location), checksumString);
+			result = new UpdateSite(siteModel, getSiteURI(location), transport, checksumString);
 			if (!PROTOCOL_FILE.equals(location.getScheme()))
 				siteCache.put(location.toString(), new SoftReference<UpdateSite>(result));
 			return result;
@@ -168,14 +170,10 @@ public class UpdateSite {
 		}
 	}
 
-	private static File loadSiteFile(URI location, IProgressMonitor monitor) throws ProvisionException {
-		return loadActualSiteFile(location, getSiteURI(location), monitor);
-	}
-
 	/**
 	 * Returns a local file containing the contents of the update site at the given location.
 	 */
-	private static File loadActualSiteFile(URI location, URI actualLocation, IProgressMonitor monitor) throws ProvisionException {
+	private static File loadActualSiteFile(URI location, URI actualLocation, Transport transport, IProgressMonitor monitor) throws ProvisionException {
 		SubMonitor submonitor = SubMonitor.convert(monitor, 1000);
 		try {
 			File siteFile = null;
@@ -201,7 +199,7 @@ public class UpdateSite {
 						throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.INTERNAL_ERROR, "Can not create tempfile for site.xml", e)); //$NON-NLS-1$
 					}
 					try {
-						transferResult = getTransport().download(actualLocation, destination, submonitor.newChild(999));
+						transferResult = transport.download(actualLocation, destination, submonitor.newChild(999));
 					} finally {
 						try {
 							destination.close();
@@ -248,7 +246,7 @@ public class UpdateSite {
 	 * Parse the feature.xml specified by the given input stream and return the feature object.
 	 * In case of failure, the failure is logged and null is returned
 	 */
-	private static Feature parseFeature(FeatureParser featureParser, URI featureURI, IProgressMonitor monitor) {
+	private Feature parseFeature(FeatureParser featureParser, URI featureURI, IProgressMonitor monitor) {
 		File featureFile = null;
 		if (PROTOCOL_FILE.equals(featureURI.getScheme())) {
 			featureFile = URIUtil.toFile(featureURI);
@@ -263,7 +261,7 @@ public class UpdateSite {
 					throw new OperationCanceledException();
 				OutputStream destination = new BufferedOutputStream(new FileOutputStream(featureFile));
 				try {
-					transferResult = getTransport().download(featureURI, destination, monitor);
+					transferResult = transport.download(featureURI, destination, monitor);
 				} finally {
 					try {
 						destination.close();
@@ -294,13 +292,13 @@ public class UpdateSite {
 	/*
 	 * Constructor for the class.
 	 */
-	private UpdateSite(SiteModel site, URI location, String checksum) {
+	private UpdateSite(SiteModel site, URI location, Transport transport, String checksum) {
 		super();
 		this.site = site;
 		this.location = location;
 		this.checksum = checksum;
 		this.rootLocation = getRootLocation();
-
+		this.transport = transport;
 	}
 
 	private URI getRootLocation() {
@@ -458,7 +456,7 @@ public class UpdateSite {
 				BufferedOutputStream destination = new BufferedOutputStream(new FileOutputStream(digestFile));
 				IStatus result = null;
 				try {
-					result = getTransport().download(digestURI, destination, monitor);
+					result = transport.download(digestURI, destination, monitor);
 				} finally {
 					try {
 						destination.close();
@@ -572,8 +570,4 @@ public class UpdateSite {
 			}
 		}
 	}
-
-	private static RepositoryTransport getTransport() {
-		return RepositoryTransport.getInstance();
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java
index 6997734..928fdaf 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 Code 9 and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -60,5 +60,4 @@ public class UpdateSitePublisherApplication extends AbstractPublisherApplication
 			addJRE = true;
 		}
 	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java
index 414c284..2387b40 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,8 +13,7 @@ package org.eclipse.equinox.internal.p2.updatesite.artifact;
 import java.io.OutputStream;
 import java.net.URI;
 import java.util.Map;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.metadata.IArtifactKey;
@@ -36,10 +35,20 @@ public class UpdateSiteArtifactRepository implements IArtifactRepository {
 		this.delegate = repository;
 	}
 
+	public void addDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	@Deprecated
 	public void addDescriptor(IArtifactDescriptor descriptor) {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
 
+	public void addDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	@Deprecated
 	public void addDescriptors(IArtifactDescriptor[] descriptors) {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
@@ -63,7 +72,7 @@ public class UpdateSiteArtifactRepository implements IArtifactRepository {
 	public IStatus getArtifacts(IArtifactRequest[] requests, IProgressMonitor monitor) {
 		return delegate.getArtifacts(requests, monitor);
 	}
-
+	
 	public OutputStream getOutputStream(IArtifactDescriptor descriptor) throws ProvisionException {
 		// TODO Auto-generated method stub
 		return null;
@@ -73,18 +82,51 @@ public class UpdateSiteArtifactRepository implements IArtifactRepository {
 		return delegate.getRawArtifact(descriptor, destination, monitor);
 	}
 
+	public void removeAll(IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	@Deprecated
 	public void removeAll() {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
 
+	public void removeDescriptor(IArtifactDescriptor descriptor, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	@Deprecated
 	public void removeDescriptor(IArtifactDescriptor descriptor) {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
 
+	public void removeDescriptors(IArtifactDescriptor[] descriptors, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	@Deprecated
+	public void removeDescriptors(IArtifactDescriptor[] descriptors) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	public void removeDescriptor(IArtifactKey key, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	@Deprecated
 	public void removeDescriptor(IArtifactKey key) {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
 
+	public void removeDescriptors(IArtifactKey[] keys, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	@Deprecated
+	public void removeDescriptors(IArtifactKey[] keys) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
 	public String getDescription() {
 		return delegate.getDescription();
 	}
@@ -133,6 +175,10 @@ public class UpdateSiteArtifactRepository implements IArtifactRepository {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
 
+	public String setProperty(String key, String value, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
 	public String setProperty(String key, String value) {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepositoryFactory.java
index 8a65d2d..ca6343a 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Code 9 - ongoing development
+ *     Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.updatesite.artifact;
 
@@ -16,6 +17,7 @@ import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactDescriptor;
 import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepositoryFactory;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.p2.updatesite.*;
 import org.eclipse.equinox.internal.p2.updatesite.metadata.UpdateSiteMetadataRepositoryFactory;
 import org.eclipse.equinox.p2.core.ProvisionException;
@@ -83,7 +85,7 @@ public class UpdateSiteArtifactRepositoryFactory extends ArtifactRepositoryFacto
 	}
 
 	public void initializeRepository(IArtifactRepository repository, URI location, IProgressMonitor monitor) throws ProvisionException {
-		UpdateSite updateSite = UpdateSite.load(location, monitor);
+		UpdateSite updateSite = UpdateSite.load(location, (Transport) getAgent().getService(Transport.SERVICE_NAME), monitor);
 		String savedChecksum = repository.getProperties().get(PROP_SITE_CHECKSUM);
 		if (savedChecksum != null && savedChecksum.equals(updateSite.getChecksum()))
 			return;
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/messages.properties b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/messages.properties
index 3f4b29b..7845a97 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2009 IBM Corporation and others.
+# Copyright (c) 2008, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java
index 3dcdc6b..e28cef7 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2010 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.Collection;
 import java.util.Map;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.p2.core.IPool;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.query.IQuery;
@@ -165,6 +166,13 @@ public class UpdateSiteMetadataRepository implements IMetadataRepository {
 	/* (non-Javadoc)
 	 * @see org.eclipse.equinox.p2.repository.IRepository#setProperty(java.lang.String, java.lang.String)
 	 */
+	public String setProperty(String key, String value, IProgressMonitor monitor) {
+		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.repository.IRepository#setProperty(java.lang.String, java.lang.String)
+	 */
 	public String setProperty(String key, String value) {
 		throw new UnsupportedOperationException("Repository not modifiable: " + location); //$NON-NLS-1$
 	}
@@ -194,4 +202,11 @@ public class UpdateSiteMetadataRepository implements IMetadataRepository {
 	public IStatus executeBatch(IRunnableWithProgress runnable, IProgressMonitor monitor) {
 		return delegate.executeBatch(runnable, monitor);
 	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.p2.repository.metadata.IMetadataRepository#compress(IPool<IInstallableUnit> iuPool)
+	 */
+	public void compress(IPool<IInstallableUnit> iuPool) {
+		delegate.compress(iuPool);
+	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepositoryFactory.java b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepositoryFactory.java
index 7a91126..d92c82f 100644
--- a/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepositoryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/metadata/UpdateSiteMetadataRepositoryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Ray Braithwood (ray at genuitec.com) - fix for bug 220605
  *     Code 9 - ongoing development
+ *     Sonatype, Inc. - transport split
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.updatesite.metadata;
 
@@ -18,6 +19,7 @@ import java.util.Map;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository;
 import org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory;
+import org.eclipse.equinox.internal.p2.repository.Transport;
 import org.eclipse.equinox.internal.p2.updatesite.*;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.publisher.*;
@@ -82,7 +84,7 @@ public class UpdateSiteMetadataRepositoryFactory extends MetadataRepositoryFacto
 	}
 
 	public void initializeRepository(IMetadataRepository repository, URI location, IProgressMonitor monitor) throws ProvisionException {
-		UpdateSite updateSite = UpdateSite.load(location, monitor);
+		UpdateSite updateSite = UpdateSite.load(location, (Transport) getAgent().getService(Transport.SERVICE_NAME), monitor);
 		String savedChecksum = repository.getProperties().get(PROP_SITE_CHECKSUM);
 		if (savedChecksum != null && savedChecksum.equals(updateSite.getChecksum()))
 			return;
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.classpath b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.project b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.project
deleted file mode 100644
index b781b8d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.preferences.jmx</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 3ac334b..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,309 +0,0 @@
-#Thu May 10 13:52:09 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index d38f664..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:27:46 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/META-INF/MANIFEST.MF
deleted file mode 100644
index 5765d4c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,24 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring Preferences Extensions (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.preferences.jmx;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Vendor: Eclipse.org
-Eclipse-LazyStart: true
-Bundle-Localization: plugin
-Bundle-Activator: org.eclipse.equinox.internal.preferences.jmx.Activator
-Import-Package: javax.management,
- javax.management.remote,
- org.eclipse.core.runtime; common=split,
- org.eclipse.core.runtime.preferences,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.server,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.log,
- org.osgi.service.prefs,
- org.osgi.util.tracker
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
-
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/about.html b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/build.properties b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/build.properties
deleted file mode 100644
index d6c916d..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               icons/,\
-               about.html
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/kvp.gif b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/kvp.gif
deleted file mode 100644
index 33be7d8..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/kvp.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/node.gif b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/node.gif
deleted file mode 100644
index 51e703b..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/node.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/preferences.gif b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/preferences.gif
deleted file mode 100644
index 33be7d8..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/icons/preferences.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/plugin.xml b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/plugin.xml
deleted file mode 100644
index 9a212c1..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/plugin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-	<extension point="org.eclipse.equinox.jmx.server.contribution">
-		<contribution
-        class="org.eclipse.equinox.internal.preferences.jmx.PreferenceContributionProvider"
-        isroot="true">
-     <extendsClass class="org.osgi.service.prefs.Preferences"/>
-  </contribution>
-		<contribution
-        class="org.eclipse.equinox.internal.preferences.jmx.KVPContributionProvider"
-        isroot="false">
-     <extendsClass class="org.eclipse.equinox.internal.preferences.jmx.KVP"/>
-  </contribution>
-	</extension>
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/Activator.java b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/Activator.java
deleted file mode 100644
index 8d8f75a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/Activator.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.preferences.jmx;
-
-import org.eclipse.core.runtime.preferences.IPreferencesService;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * @since 1.0
- */
-public class Activator implements BundleActivator {
-
-	static final String BUNDLE_NAME = "org.eclipse.equinox.preferences.jmx"; //$NON-NLS-1$
-
-	private static BundleContext context = null;
-	private static ServiceTracker preferenceService = null;
-	private static ServiceTracker logService = null;
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext bundleContext) throws Exception {
-		context = bundleContext;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext bundleContext) throws Exception {
-		if (preferenceService != null) {
-			preferenceService.close();
-			preferenceService = null;
-		}
-		if (logService != null) {
-			logService.close();
-			logService = null;
-		}
-		context = null;
-	}
-
-	/*
-	 * Return the preference service, if available.
-	 */
-	public static IPreferencesService getPreferenceService() {
-		if (preferenceService == null) {
-			preferenceService = new ServiceTracker(context, IPreferencesService.class.getName(), null);
-			preferenceService.open();
-		}
-		return (IPreferencesService) preferenceService.getService();
-	}
-
-	/*
-	 * Log the given error.
-	 */
-	public static void log(String message, Exception exception) {
-		if (logService == null) {
-			logService = new ServiceTracker(context, LogService.class.getName(), null);
-			logService.open();
-		}
-		LogService log = (LogService) logService.getService();
-		if (log == null) {
-			System.out.println(message);
-			if (exception != null)
-				exception.printStackTrace(System.out);
-		} else
-			log.log(LogService.LOG_ERROR, message, exception);
-	}
-
-	public static BundleContext getContext() {
-		return context;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KVP.java b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KVP.java
deleted file mode 100644
index fba4ac7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KVP.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.preferences.jmx;
-
-import org.osgi.service.prefs.Preferences;
-
-/**
- * This class represents a key/value pair in the preferences.
- * 
- * @since 1.0
- */
-public class KVP {
-
-	private Preferences node;
-	private String key;
-	private String value;
-
-	/*
-	 * Constructor. Make a new key/value pair with the given values.
-	 */
-	public KVP(Preferences node, String key, String value) {
-		super();
-		this.node = node;
-		this.key = key;
-		this.value = value;
-	}
-
-	/*
-	 * Return the key.
-	 */
-	public String getKey() {
-		return this.key;
-	}
-
-	/*
-	 * Return the value.
-	 */
-	public String getValue() {
-		return this.value;
-	}
-
-	/*
-	 * Return the preference node which is associated with this key/value pair.
-	 */
-	public Preferences getNode() {
-		return this.node;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KVPContributionProvider.java b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KVPContributionProvider.java
deleted file mode 100644
index ce0a48a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KVPContributionProvider.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.preferences.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-
-/**
- * @since 1.0
- */
-public class KVPContributionProvider extends ContributionProvider {
-
-	public KVPContributionProvider() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) {
-		return contributesType(obj) ? new KeyValuePairContribution((KVP) obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return providesType(obj) ? new KVPContributionProvider() : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return Messages.kvpContributionName;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return new MBeanInfo(getClass().getName(), null, null, null, null, null);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		// do nothing
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof KVP;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return obj instanceof KVP;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KeyValuePairContribution.java b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KeyValuePairContribution.java
deleted file mode 100644
index 726eb83..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/KeyValuePairContribution.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.preferences.jmx;
-
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.equinox.jmx.common.JMXConstants;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * @since 1.0
- */
-public class KeyValuePairContribution extends Contribution {
-
-	private static final String KVP_IMAGE_PATH = "icons/kvp.gif"; //$NON-NLS-1$
-	private static final String METHOD_REMOVE = "remove"; //$NON-NLS-1$
-
-	public KeyValuePairContribution(KVP delegate) {
-		super(delegate);
-	}
-
-    /* (non-Javadoc)
-     * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-     */
-    protected ObjectName getObjectName() {
-        try {
-            return new ObjectName(JMXConstants.DEFAULT_DOMAIN + ":type=KVPair,Preference=" + getDelegate().getNode().name() //$NON-NLS-1$
-            		+ "name=" + getDelegate().getKey()); //$NON-NLS-1$
-        } catch (Exception e) {
-            return super.getObjectName();
-        }
-    }
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return getDelegate().getKey() + '=' + getDelegate().getValue();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return new MBeanInfo(getClass().getName(), null, null, null, createOperations(), null);
-	}
-
-	/*
-	 * Return the list of operations available to this contribution.
-	 */
-	private MBeanOperationInfo[] createOperations() {
-		List result = new ArrayList();
-		result.add(createRemoveOperation());
-		return (MBeanOperationInfo[]) result.toArray(new MBeanOperationInfo[result.size()]);
-	}
-
-	/*
-	 * Create and return an operation to delete this key/value pair.
-	 */
-	private MBeanOperationInfo createRemoveOperation() {
-		return new MBeanOperationInfo(METHOD_REMOVE, Messages.operation_removeKVP, null, Void.TYPE.getName(), 0);
-	}
-
-	/*
-	 * Return this contribution's delegate.
-	 */
-	private KVP getDelegate() {
-		return (KVP) contributionDelegate;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		if (METHOD_REMOVE.equals(operationName)) {
-			Preferences node = getDelegate().getNode();
-			node.remove(getDelegate().getKey());
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path(KVP_IMAGE_PATH), null);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/Messages.java b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/Messages.java
deleted file mode 100644
index 9d0b91e..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/Messages.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.preferences.jmx;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public class Messages extends NLS {
-	public static String preferenceContributionName;
-	public static String kvpContributionName;
-
-	public static String operation_addChild;
-	public static String operation_put;
-	public static String operation_removeNode;
-	public static String operation_removeKVP;
-
-	public static String parm_childName_desc;
-	public static String parm_key_desc;
-	public static String parm_value_desc;
-
-	private Messages() {
-		// prevent instantiation
-	}
-
-	// initialize resource bundle
-	static {
-		NLS.initializeMessages("org.eclipse.equinox.internal.preferences.jmx.messages", Messages.class); //$NON-NLS-1$
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/PreferenceContribution.java b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/PreferenceContribution.java
deleted file mode 100644
index 953e05c..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/PreferenceContribution.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.preferences.jmx;
-
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.equinox.jmx.common.JMXConstants;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * @since 1.0
- */
-public class PreferenceContribution extends Contribution {
-
-	// path to the icon
-	private static final String IMAGE_PATH = "icons/node.gif"; //$NON-NLS-1$
-	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
-	private static final String METHOD_ADD_CHILD = "addChild"; //$NON-NLS-1$
-	private static final String METHOD_PUT = "put"; //$NON-NLS-1$
-	private static final String METHOD_REMOVE_NODE = "removeNode"; //$NON-NLS-1$
-
-	private static final String PARM_NAME = "name"; //$NON-NLS-1$
-	private static final String PARM_KEY = "key"; //$NON-NLS-1$
-	private static final String PARM_VALUE = "value"; //$NON-NLS-1$
-
-	private static final String TYPE_STRING = "java.lang.String"; //$NON-NLS-1$
-
-	/*
-	 * Constructor for the class. Create a contribution for the given preference node.
-	 */
-	public PreferenceContribution(Preferences delegate) {
-		super(delegate.absolutePath());
-	}
-
-    /* (non-Javadoc)
-     * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-     */
-    protected ObjectName getObjectName() {
-        try {
-            return new ObjectName(JMXConstants.DEFAULT_DOMAIN + ":type=Preferences,name=" + contributionDelegate); //$NON-NLS-1$
-        } catch (Exception e) {
-            return super.getObjectName();
-        }
-    }
-
-	/*
-	 * Return the delegate associated with this contribution.
-	 */
-	private Preferences getDeletgate() {
-		return Activator.getPreferenceService().getRootNode().node((String) contributionDelegate);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return getDeletgate().name();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		String[] children = new String[0];
-		try {
-			children = getDeletgate().childrenNames();
-		} catch (BackingStoreException e) {
-			// ignore and try and add the key/value pairs
-		}
-
-		String[] keys = new String[0];
-		try {
-			keys = getDeletgate().keys();
-		} catch (BackingStoreException e) {
-			// ignore
-		}
-		Object[] result = new Object[children.length + keys.length];
-		for (int i = 0; i < children.length; i++)
-			result[i] = getDeletgate().node(children[i]);
-		for (int i = children.length; i < keys.length; i++)
-			result[i] = new KVP(getDeletgate(), keys[i], getDeletgate().get(keys[i], EMPTY_STRING));
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return new MBeanInfo(getClass().getName(), null, null, null, createOperations(), null);
-	}
-
-	/*
-	 * Return an array of operations which are applicable to this contribution.
-	 */
-	private MBeanOperationInfo[] createOperations() {
-		List result = new ArrayList();
-		result.add(createAddChildOperation());
-		result.add(createRemoveNodeOperation());
-		result.add(createPutOperation());
-		return (MBeanOperationInfo[]) result.toArray(new MBeanOperationInfo[result.size()]);
-	}
-
-	/*
-	 * Create and return an MBean operation that adds a key/value pair
-	 * to the current preference node.
-	 */
-	private MBeanOperationInfo createPutOperation() {
-		MBeanParameterInfo[] parms = new MBeanParameterInfo[] { //
-		new MBeanParameterInfo(PARM_KEY, TYPE_STRING, Messages.parm_key_desc), //
-				new MBeanParameterInfo(PARM_VALUE, TYPE_STRING, Messages.parm_value_desc) //
-		};
-		return new MBeanOperationInfo(METHOD_PUT, Messages.operation_put, parms, Void.TYPE.getName(), 0);
-	}
-
-	/*
-	 * Create and return an MBean operation that will remove the current preference node.
-	 */
-	private MBeanOperationInfo createRemoveNodeOperation() {
-		return new MBeanOperationInfo(METHOD_REMOVE_NODE, Messages.operation_removeNode, null, Void.TYPE.getName(), 0);
-	}
-
-	/*
-	 * Create and return an MBean operation that will add a child to the current preference node.
-	 */
-	private MBeanOperationInfo createAddChildOperation() {
-		MBeanParameterInfo[] parms = new MBeanParameterInfo[] { //
-		new MBeanParameterInfo(PARM_NAME, TYPE_STRING, Messages.parm_childName_desc) //
-		};
-		return new MBeanOperationInfo(METHOD_ADD_CHILD, Messages.operation_addChild, parms, Void.TYPE.getName(), 0);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		if (METHOD_ADD_CHILD.equals(operationName)) {
-			handleAddChildOperation(args);
-		} else if (METHOD_REMOVE_NODE.equals(operationName)) {
-			handleRemoveNodeOperation();
-		} else if (METHOD_PUT.equals(operationName)) {
-			handlePutOperation(args);
-		}
-		return null;
-	}
-
-	/*
-	 * Add the given key/value pair to the current preference node.
-	 */
-	private void handlePutOperation(Object[] args) {
-		if (args == null || args.length != 2)
-			return;
-		if (!(args[0] instanceof String) || !(args[1] instanceof String))
-			return;
-		getDeletgate().put((String) args[0], (String) args[1]);
-	}
-
-	/*
-	 * Add a child with the given name to the current preference node.
-	 */
-	private void handleAddChildOperation(Object[] args) {
-		if (args == null || args.length != 1)
-			return;
-		if (!(args[0] instanceof String))
-			return;
-		getDeletgate().node((String) args[0]);
-	}
-
-	/*
-	 * Remove this preference node.
-	 */
-	private void handleRemoveNodeOperation() {
-		try {
-			getDeletgate().removeNode();
-		} catch (BackingStoreException e) {
-			Activator.log(e.getMessage(), e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path(IMAGE_PATH), null);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/PreferenceContributionProvider.java b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/PreferenceContributionProvider.java
deleted file mode 100644
index 8231c79..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/PreferenceContributionProvider.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.preferences.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.preferences.IPreferencesService;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * @since 1.0
- */
-public class PreferenceContributionProvider extends ContributionProvider {
-
-	// path to the icon
-	private static final String ICON_PATH = "icons/preferences.gif"; //$NON-NLS-1$
-
-	/*
-	 * Constructor for this provider.
-	 */
-	public PreferenceContributionProvider() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) {
-		return contributesType(obj) ? new PreferenceContribution((Preferences) obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return providesType(obj) ? new PreferenceContributionProvider() : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return Messages.preferenceContributionName;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		IPreferencesService service = Activator.getPreferenceService();
-		if (service == null)
-			return new Object[0];
-		Preferences root = service.getRootNode();
-		String[] children;
-		try {
-			children = root.childrenNames();
-		} catch (BackingStoreException e) {
-			return new Preferences[0];
-		}
-		Preferences[] result = new Preferences[children.length];
-		for (int i = 0; i < children.length; i++)
-			result[i] = root.node(children[i]);
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return new MBeanInfo(getClass().getName(), null, null, null, null, null);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		// do nothing
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof Preferences;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path(ICON_PATH), null);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/messages.properties b/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/messages.properties
deleted file mode 100644
index 57ef960..0000000
--- a/eclipse/plugins/org.eclipse.equinox.preferences.jmx/src/org/eclipse/equinox/internal/preferences/jmx/messages.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-preferenceContributionName=Preferences
-kvpContributionName=Key/Value pair
-
-operation_addChild=Add a child node with the given name.
-operation_put=Add the given key/value pair to this node.
-operation_removeNode=Remove this node.
-operation_removeKVP=Remove this key/value pair.
-
-parm_childName_desc=Child name.
-parm_key_desc=Preference key.
-parm_value_desc=Preference value.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/.settings/.api_filters b/eclipse/plugins/org.eclipse.equinox.preferences/.settings/.api_filters
new file mode 100644
index 0000000..e5d9db6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/.settings/.api_filters
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component id="org.eclipse.equinox.preferences" version="2">
+<resource path="src/org/osgi/service/prefs/Preferences.java" type="org.osgi.service.prefs.Preferences">
+<filter comment="Ignore OSGi API." id="403853384">
+<message_arguments>
+<message_argument value="org.osgi.service.prefs.Preferences"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="src/org/osgi/service/prefs/PreferencesService.java" type="org.osgi.service.prefs.PreferencesService">
+<filter comment="Ignore OSGi API." id="403853384">
+<message_arguments>
+<message_argument value="org.osgi.service.prefs.PreferencesService"/>
+</message_arguments>
+</filter>
+</resource>
+</component>
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
index df5f555..c4c4d76 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.preferences; singleton:=true
-Bundle-Version: 3.3.0.qualifier
+Bundle-Version: 3.4.0.qualifier
 Bundle-Activator: org.eclipse.core.internal.preferences.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -22,6 +22,7 @@ Import-Package: org.eclipse.osgi.framework.log,
  org.eclipse.osgi.util,
  org.osgi.framework,
  org.osgi.service.packageadmin,
- org.osgi.util.tracker
+ org.osgi.util.tracker,
+ org.osgi.service.prefs;version="[1.1.1,1.2)"
 Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,
  J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java
index 3c60b76..0358b4f 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@ public class Activator implements BundleActivator, ServiceTrackerCustomizer {
 	private static final String PROP_REGISTER_PERF_SERVICE = "eclipse.service.pref"; //$NON-NLS-1$
 	// the system property
 	private static final String PROP_CUSTOMIZATION = "eclipse.pluginCustomization"; //$NON-NLS-1$
-	
+
 	/**
 	 * Track the registry service - only register preference service if the registry is 
 	 * available
@@ -64,7 +64,7 @@ public class Activator implements BundleActivator, ServiceTrackerCustomizer {
 		// Open the services first before processing the command-line args, order is important! (Bug 150288)
 		PreferencesOSGiUtils.getDefault().openServices();
 		processCommandLine();
-		
+
 		boolean shouldRegister = !"false".equalsIgnoreCase(context.getProperty(PROP_REGISTER_PERF_SERVICE)); //$NON-NLS-1$
 		if (shouldRegister) {
 			preferencesService = bundleContext.registerService(IPreferencesService.class.getName(), PreferencesService.getDefault(), new Hashtable());
@@ -130,6 +130,7 @@ public class Activator implements BundleActivator, ServiceTrackerCustomizer {
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#modifiedService(org.osgi.framework.ServiceReference, java.lang.Object)
 	 */
 	public void modifiedService(ServiceReference reference, Object service) {
+		// nothing to do
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java
index 2941f23..dd3a0cf 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
index c71c1fd..2ccdf28 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,7 @@ public class EclipsePreferences implements IEclipsePreferences, IScope {
 		super();
 		this.parent = parent;
 		this.name = name;
+		this.cachedPath = null; // make sure the cached path is cleared after setting the parent
 	}
 
 	/*
@@ -238,7 +239,7 @@ public class EclipsePreferences implements IEclipsePreferences, IScope {
 				String oldValue = childNode.internalPut(key, value);
 				// notify listeners if applicable
 				if (notify && !value.equals(oldValue))
-					node.firePreferenceEvent(key, oldValue, value);
+					childNode.firePreferenceEvent(key, oldValue, value);
 			}
 		}
 		PreferencesService.getDefault().shareStrings();
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java
index c9efe5e..7e5744c 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.internal.preferences;
 
-import org.eclipse.core.internal.preferences.StringPool;
 
 /**
  * Hash table of {String --> String}.
@@ -179,7 +178,7 @@ public abstract class ImmutableMap implements Cloneable {
 		public ImmutableMap removeKey(String key) {
 			return this;
 		}
-		
+
 		protected void internalPut(String key, String value) {
 			throw new IllegalStateException();//cannot put elements in the empty map
 		}
@@ -214,7 +213,7 @@ public abstract class ImmutableMap implements Cloneable {
 	 * @return The value associated with this key, or <code>null</code>
 	 */
 	public abstract String get(String key);
-	
+
 	protected static ImmutableMap createMap(int i) {
 		if (i <= 0)
 			return EMPTY;
@@ -257,6 +256,7 @@ public abstract class ImmutableMap implements Cloneable {
 	 * Method declared on IStringPoolParticipant
 	 */
 	public void shareStrings(StringPool set) {
+		// nothing to do
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java
index 685bd89..20d5338 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java
index 09ab503..28e506c 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,17 +53,15 @@ public class OSGiPreferencesServiceImpl implements PreferencesService {
 		 * If pathName is relative, just return it
 		 */
 		private String fixPath(String pathName) {
-			if (pathName.startsWith("/")) {
-				if (pathName.equals("/")) {
+			if (pathName.startsWith("/")) { //$NON-NLS-1$
+				if (pathName.equals("/")) { //$NON-NLS-1$
 					return root.absolutePath();
-				} else {
-					//fix absolute path
-					return root.absolutePath().concat(pathName);
 				}
-			} else {
-				//pass-through relative path
-				return pathName;
+				//fix absolute path
+				return root.absolutePath().concat(pathName);
 			}
+			//pass-through relative path
+			return pathName;
 		}
 
 		/**
@@ -112,16 +110,15 @@ public class OSGiPreferencesServiceImpl implements PreferencesService {
 		public Preferences parent() {
 			if (wrapped == root) {
 				try {
-					if (!wrapped.nodeExists("")) {
+					if (!wrapped.nodeExists("")) { //$NON-NLS-1$
 						throw new IllegalStateException();
 					}
 				} catch (BackingStoreException e) {
 					//best effort
 				}
 				return null;
-			} else {
-				return new OSGiLocalRootPreferences(wrapped.parent(), root);
 			}
+			return new OSGiLocalRootPreferences(wrapped.parent(), root);
 		}
 
 		public boolean nodeExists(String pathName) throws BackingStoreException {
@@ -130,18 +127,16 @@ public class OSGiPreferencesServiceImpl implements PreferencesService {
 
 		public String absolutePath() {
 			if (wrapped == root) {
-				return "/";
-			} else {
-				return wrapped.absolutePath().substring(root.absolutePath().length(), wrapped.absolutePath().length());
+				return "/"; //$NON-NLS-1$
 			}
+			return wrapped.absolutePath().substring(root.absolutePath().length(), wrapped.absolutePath().length());
 		}
 
 		public String name() {
 			if (wrapped == root) {
-				return "";
-			} else {
-				return wrapped.name();
+				return ""; //$NON-NLS-1$
 			}
+			return wrapped.name();
 		}
 
 		//delegate to wrapped preference
@@ -234,17 +229,17 @@ public class OSGiPreferencesServiceImpl implements PreferencesService {
 	}
 
 	public Preferences getSystemPreferences() {
-		return new OSGiLocalRootPreferences(bundlePreferences.node("system"));
+		return new OSGiLocalRootPreferences(bundlePreferences.node("system")); //$NON-NLS-1$
 	}
 
 	public Preferences getUserPreferences(String name) {
-		return new OSGiLocalRootPreferences(bundlePreferences.node("user/" + name));
+		return new OSGiLocalRootPreferences(bundlePreferences.node("user/" + name)); //$NON-NLS-1$
 	}
 
 	public String[] getUsers() {
 		String[] users = null;
 		try {
-			users = bundlePreferences.node("user").childrenNames();
+			users = bundlePreferences.node("user").childrenNames(); //$NON-NLS-1$
 		} catch (BackingStoreException e) {
 			//best effort
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java
index c09c0ba..6178193 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ public class OSGiPreferencesServiceManager implements ServiceFactory, BundleList
 		context.addBundleListener(this);
 
 		//prefBundles = new InstanceScope().getNode(ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI);
-		prefBundles = new ConfigurationScope().getNode(ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI);
+		prefBundles = ConfigurationScope.INSTANCE.getNode(ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI);
 
 		//clean up prefs for bundles that have been uninstalled
 		try {
@@ -81,7 +81,7 @@ public class OSGiPreferencesServiceManager implements ServiceFactory, BundleList
 			//best effort
 		}
 		//return new OSGiPreferencesServiceImpl(new InstanceScope().getNode(getQualifier(bundle)));
-		return new OSGiPreferencesServiceImpl(new ConfigurationScope().getNode(getQualifier(bundle)));
+		return new OSGiPreferencesServiceImpl(ConfigurationScope.INSTANCE.getNode(getQualifier(bundle)));
 	}
 
 	/**
@@ -98,7 +98,7 @@ public class OSGiPreferencesServiceManager implements ServiceFactory, BundleList
 	public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
 		try {
 			//new InstanceScope().getNode(getQualifier(bundle)).flush();
-			new ConfigurationScope().getNode(getQualifier(bundle)).flush();
+			ConfigurationScope.INSTANCE.getNode(getQualifier(bundle)).flush();
 		} catch (BackingStoreException e) {
 			//best effort
 		}
@@ -121,18 +121,18 @@ public class OSGiPreferencesServiceManager implements ServiceFactory, BundleList
 	protected void removePrefs(String qualifier) throws BackingStoreException {
 		//remove bundle's prefs
 		//new InstanceScope().getNode(qualifier).removeNode();
-		new ConfigurationScope().getNode(qualifier).removeNode();
+		ConfigurationScope.INSTANCE.getNode(qualifier).removeNode();
 
 		//remove from our list of bundles with prefs
 		Preferences bundlesNode = getBundlesNode();
 		bundlesNode.remove(qualifier);
 		bundlesNode.flush();
 	}
-	
+
 	private Preferences getBundlesNode() {
 		try {
 			if (prefBundles == null || !prefBundles.nodeExists("")) { //$NON-NLS-1$
-				prefBundles = new ConfigurationScope().getNode(ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI);
+				prefBundles = ConfigurationScope.INSTANCE.getNode(ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI);
 			}
 			return prefBundles;
 		} catch (BackingStoreException e) {
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java
index 01bceb6..a4dee27 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java
index 56b773c..f6bc34c 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,10 +34,9 @@ public class PreferencesService implements IPreferencesService {
 	private static final long STRING_SHARING_INTERVAL = 300000;
 	private static final String MATCH_TYPE_PREFIX = "prefix"; //$NON-NLS-1$
 
-	// cheat here and add "project" even though we really shouldn't know about it
-	// because of plug-in dependencies and it being defined in the resources plug-in
-	private static final String[] DEFAULT_DEFAULT_LOOKUP_ORDER = new String[] {"project", //$NON-NLS-1$ 
-			InstanceScope.SCOPE, //
+	// the order of search scopes when people don't have a specific order set
+	private static String[] DEFAULT_DEFAULT_LOOKUP_ORDER = new String[] { //
+	InstanceScope.SCOPE, //
 			ConfigurationScope.SCOPE, //
 			DefaultScope.SCOPE};
 	private static final char EXPORT_ROOT_PREFIX = '!';
@@ -1104,4 +1103,23 @@ public class PreferencesService implements IPreferencesService {
 		return result;
 	}
 
+	/*
+	 * Return the default search lookup order for when nothing is set.
+	*/
+	public String[] getDefaultDefaultLookupOrder() {
+		return DEFAULT_DEFAULT_LOOKUP_ORDER;
+	}
+
+	/*
+	  * Set the default search order to use when there is nothing else set. Clients should not
+	  * call this method because it is in an internal class and has been created solely for use by
+	  * the org.eclipse.core.resources bundle in response to this bug:
+	  *     https://bugs.eclipse.org/330320
+	  */
+	public void setDefaultDefaultLookupOrder(String[] order) {
+		// shouldn't happen but let's protect against an NPE.
+		if (order == null)
+			order = new String[0];
+		DEFAULT_DEFAULT_LOOKUP_ORDER = order;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/BundleDefaultsScope.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/BundleDefaultsScope.java
index 73d3eb4..a182239 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/BundleDefaultsScope.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/BundleDefaultsScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,16 @@ public final class BundleDefaultsScope extends AbstractScope {
 	public static final String SCOPE = "bundle_defaults"; //$NON-NLS-1$
 
 	/**
+	 * Singleton instance of a Bundle Defaults Scope object. Typical usage is:
+	 * <code>BundleDefaultsScope.INSTANCE.getNode(...);</code>
+	 * 
+	 * @since 3.4
+	 */
+	public static final IScopeContext INSTANCE = new BundleDefaultsScope();
+
+	/**
 	 * Create and return a new default scope instance.
+	 * @deprecated use <code>BundleDefaultsScope.INSTANCE</code> instead
 	 */
 	public BundleDefaultsScope() {
 		super();
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java
index 2c964d3..c04be6e 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,16 @@ public final class ConfigurationScope extends AbstractScope {
 	public static final String SCOPE = "configuration"; //$NON-NLS-1$
 
 	/**
+	 * Singleton instance of a Configuration Scope object. Typical usage is:
+	 * <code>ConfigurationScope.INSTANCE.getNode(...);</code>
+	 * 
+	 * @since 3.4
+	 */
+	public static final IScopeContext INSTANCE = new ConfigurationScope();
+
+	/**
 	 * Create and return a new configuration scope instance.
+	 * @deprecated use <code>ConfigurationScope.INSTANCE</code> instead
 	 */
 	public ConfigurationScope() {
 		super();
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java
index 9506d00..6ba52f8 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,16 @@ public final class DefaultScope extends AbstractScope {
 	public static final String SCOPE = "default"; //$NON-NLS-1$
 
 	/**
+	 * Singleton instance of a Default Scope object. Typical usage is:
+	 * <code>DefaultScope.INSTANCE.getNode(...);</code>
+	 * 
+	 * @since 3.4
+	 */
+	public static final IScopeContext INSTANCE = new DefaultScope();
+
+	/**
 	 * Create and return a new default scope instance.
+	 * @deprecated use <code>DefaultScope.INSTANCE</code> instead
 	 */
 	public DefaultScope() {
 		super();
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java
index 86649a2..55e17af 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java
index 109f5dd..cc0ce84 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,16 @@ public final class InstanceScope extends AbstractScope {
 	public static final String SCOPE = "instance"; //$NON-NLS-1$
 
 	/**
+	 * Singleton instance of an Instance Scope object. Typical usage is:
+	 * <code>InstanceScope.INSTANCE.getNode(...);</code>
+	 * 
+	 * @since 3.4
+	 */
+	public static final IScopeContext INSTANCE = new InstanceScope();
+
+	/**
 	 * Create and return a new instance scope instance.
+	 * @deprecated call <code>InstanceScope.INSTANCE</code> instead.
 	 */
 	public InstanceScope() {
 		super();
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java
index 08b5e95..169b87b 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java
index 0f15919..9f4bca2 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,13 +19,13 @@ package org.osgi.service.prefs;
  * Thrown to indicate that a preferences operation could not complete because of
  * a failure in the backing store, or a failure to contact the backing store.
  * 
- * @version $Revision: 6083 $
+ * @version $Id: 86f6e3cc926b2ea3875e000e90b0700a75f2a7c7 $
  */
 public class BackingStoreException extends Exception {
     static final long serialVersionUID = -1415637364122829574L;
 
 	/**
-	 * Constructs a <code>BackingStoreException</code> with the specified detail
+	 * Constructs a {@code BackingStoreException} with the specified detail
 	 * message.
 	 * 
 	 * @param message The detail message.
@@ -35,11 +35,11 @@ public class BackingStoreException extends Exception {
 	}
 	
 	/**
-	 * Constructs a <code>BackingStoreException</code> with the specified detail
+	 * Constructs a {@code BackingStoreException} with the specified detail
 	 * message.
 	 * 
 	 * @param message The detail message.
-	 * @param cause The cause of the exception. May be <code>null</code>.
+	 * @param cause The cause of the exception. May be {@code null}.
 	 * @since 1.1 
 	 */
 	public BackingStoreException(String message, Throwable cause) {
@@ -47,10 +47,10 @@ public class BackingStoreException extends Exception {
 	}
 
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * set.
 	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
+	 * @return The cause of this exception or {@code null} if no cause was
 	 *         set.
 	 * @since 1.1
 	 */
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java
index 8ffad3f..513d6cd 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,16 +40,16 @@ package org.osgi.service.prefs;
  * and a path name <i>relative </i> to each ancestor including itself.
  * 
  * <p>
- * The root node has a node name of the empty <code>String</code> object ("").
+ * The root node has a node name of the empty {@code String} object ("").
  * Every other node has an arbitrary node name, specified at the time it is
  * created. The only restrictions on this name are that it cannot be the empty
  * string, and it cannot contain the slash character ('/').
  * 
  * <p>
- * The root node has an absolute path name of <code>"/"</code>. Children of the
- * root node have absolute path names of <code>"/" + </code> <i><node name>
+ * The root node has an absolute path name of {@code "/"}. Children of the
+ * root node have absolute path names of {@code "/" + } <i><node name>
  * </i>. All other nodes have absolute path names of <i><parent's absolute
- * path name> </i> <code> + "/" + </code> <i><node name> </i>. Note that
+ * path name> </i> {@code  + "/" + } <i><node name> </i>. Note that
  * all absolute path names begin with the slash character.
  * 
  * <p>
@@ -76,12 +76,12 @@ package org.osgi.service.prefs;
  * </ul>
  * 
  * <p>
- * Each <code>Preference</code> node has zero or more properties associated with
+ * Each {@code Preference} node has zero or more properties associated with
  * it, where a property consists of a name and a value. The bundle writer is
  * free to choose any appropriate names for properties. Their values can be of
- * type <code>String</code>,<code>long</code>,<code>int</code>,<code>boolean</code>,
- * <code>byte[]</code>,<code>float</code>, or <code>double</code> but they can
- * always be accessed as if they were <code>String</code> objects.
+ * type {@code String},{@code long},{@code int},{@code boolean},
+ * {@code byte[]},{@code float}, or {@code double} but they can
+ * always be accessed as if they were {@code String} objects.
  * 
  * <p>
  * All node name and property name comparisons are case-sensitive.
@@ -90,7 +90,7 @@ package org.osgi.service.prefs;
  * All of the methods that modify preference data are permitted to operate
  * asynchronously; they may return immediately, and changes will eventually
  * propagate to the persistent backing store, with an implementation-dependent
- * delay. The <code>flush</code> method may be used to synchronously force updates
+ * delay. The {@code flush} method may be used to synchronously force updates
  * to the backing store.
  * 
  * <p>
@@ -107,8 +107,8 @@ package org.osgi.service.prefs;
  * corrupted, but no other guarantees are made concerning the consistency of the
  * preference data.
  * 
- * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 481de91d7ba8a3274ad7ded1ea26f254564baea0 $
  */
 public interface Preferences {
 	/**
@@ -116,33 +116,33 @@ public interface Preferences {
 	 * 
 	 * @param key key with which the specified value is to be associated.
 	 * @param value value to be associated with the specified key.
-	 * @throws NullPointerException if <code>key</code> or <code>value</code> is
-	 *         <code>null</code>.
+	 * @throws NullPointerException if {@code key} or {@code value} is
+	 *         {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 */
 	public void put(String key, String value);
 
 	/**
-	 * Returns the value associated with the specified <code>key</code> in this
+	 * Returns the value associated with the specified {@code key} in this
 	 * node. Returns the specified default if there is no value associated with
-	 * the <code>key</code>, or the backing store is inaccessible.
+	 * the {@code key}, or the backing store is inaccessible.
 	 * 
 	 * @param key key whose associated value is to be returned.
 	 * @param def the value to be returned in the event that this node has no
-	 *        value associated with <code>key</code> or the backing store is
+	 *        value associated with {@code key} or the backing store is
 	 *        inaccessible.
-	 * @return the value associated with <code>key</code>, or <code>def</code> if
-	 *         no value is associated with <code>key</code>.
+	 * @return the value associated with {@code key}, or {@code def} if
+	 *         no value is associated with {@code key}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>. (A
-	 *         <code>null</code> default <i>is </i> permitted.)
+	 * @throws NullPointerException if {@code key} is {@code null}. (A
+	 *         {@code null} default <i>is </i> permitted.)
 	 */
 	public String get(String key, String def);
 
 	/**
-	 * Removes the value associated with the specified <code>key</code> in this
+	 * Removes the value associated with the specified {@code key} in this
 	 * node, if any.
 	 * 
 	 * @param key key whose mapping is to be removed from this node.
@@ -166,25 +166,25 @@ public interface Preferences {
 	public void clear() throws BackingStoreException;
 
 	/**
-	 * Associates a <code>String</code> object representing the specified
-	 * <code>int</code> value with the specified <code>key</code> in this node. The
-	 * associated string is the one that would be returned if the <code>int</code>
-	 * value were passed to <code>Integer.toString(int)</code>. This method is
+	 * Associates a {@code String} object representing the specified
+	 * {@code int} value with the specified {@code key} in this node. The
+	 * associated string is the one that would be returned if the {@code int}
+	 * value were passed to {@code Integer.toString(int)}. This method is
 	 * intended for use in conjunction with {@link #getInt} method.
 	 * 
 	 * <p>
 	 * Implementor's note: it is <i>not </i> necessary that the property value
-	 * be represented by a <code>String</code> object in the backing store. If the
+	 * be represented by a {@code String} object in the backing store. If the
 	 * backing store supports integer values, it is not unreasonable to use
 	 * them. This implementation detail is not visible through the
-	 * <code>Preferences</code> API, which allows the value to be read as an
-	 * <code>int</code> (with <code>getInt</code> or a <code>String</code> (with
-	 * <code>get</code>) type.
+	 * {@code Preferences} API, which allows the value to be read as an
+	 * {@code int} (with {@code getInt} or a {@code String} (with
+	 * {@code get}) type.
 	 * 
 	 * @param key key with which the string form of value is to be associated.
-	 * @param value <code>value</code> whose string form is to be associated with
-	 *        <code>key</code>.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 * @param value {@code value} whose string form is to be associated with
+	 *        {@code key}.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #getInt(String,int)
@@ -192,27 +192,27 @@ public interface Preferences {
 	public void putInt(String key, int value);
 
 	/**
-	 * Returns the <code>int</code> value represented by the <code>String</code>
-	 * object associated with the specified <code>key</code> in this node. The
-	 * <code>String</code> object is converted to an <code>int</code> as by
-	 * <code>Integer.parseInt(String)</code>. Returns the specified default if
-	 * there is no value associated with the <code>key</code>, the backing store
-	 * is inaccessible, or if <code>Integer.parseInt(String)</code> would throw a
-	 * <code>NumberFormatException</code> if the associated <code>value</code> were
+	 * Returns the {@code int} value represented by the {@code String}
+	 * object associated with the specified {@code key} in this node. The
+	 * {@code String} object is converted to an {@code int} as by
+	 * {@code Integer.parseInt(String)}. Returns the specified default if
+	 * there is no value associated with the {@code key}, the backing store
+	 * is inaccessible, or if {@code Integer.parseInt(String)} would throw a
+	 * {@code NumberFormatException} if the associated {@code value} were
 	 * passed. This method is intended for use in conjunction with the
 	 * {@link #putInt} method.
 	 * 
 	 * @param key key whose associated value is to be returned as an
-	 *        <code>int</code>.
+	 *        {@code int}.
 	 * @param def the value to be returned in the event that this node has no
-	 *        value associated with <code>key</code> or the associated value
-	 *        cannot be interpreted as an <code>int</code> or the backing store is
+	 *        value associated with {@code key} or the associated value
+	 *        cannot be interpreted as an {@code int} or the backing store is
 	 *        inaccessible.
-	 * @return the <code>int</code> value represented by the <code>String</code>
-	 *         object associated with <code>key</code> in this node, or
-	 *         <code>def</code> if the associated value does not exist or cannot
-	 *         be interpreted as an <code>int</code> type.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 * @return the {@code int} value represented by the {@code String}
+	 *         object associated with {@code key} in this node, or
+	 *         {@code def} if the associated value does not exist or cannot
+	 *         be interpreted as an {@code int} type.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #putInt(String,int)
@@ -221,27 +221,27 @@ public interface Preferences {
 	public int getInt(String key, int def);
 
 	/**
-	 * Associates a <code>String</code> object representing the specified
-	 * <code>long</code> value with the specified <code>key</code> in this node. The
-	 * associated <code>String</code> object is the one that would be returned if
-	 * the <code>long</code> value were passed to <code>Long.toString(long)</code>.
+	 * Associates a {@code String} object representing the specified
+	 * {@code long} value with the specified {@code key} in this node. The
+	 * associated {@code String} object is the one that would be returned if
+	 * the {@code long} value were passed to {@code Long.toString(long)}.
 	 * This method is intended for use in conjunction with the {@link #getLong}
 	 * method.
 	 * 
 	 * <p>
-	 * Implementor's note: it is <i>not </i> necessary that the <code>value</code>
-	 * be represented by a <code>String</code> type in the backing store. If the
-	 * backing store supports <code>long</code> values, it is not unreasonable to
-	 * use them. This implementation detail is not visible through the <code>
-	 * Preferences</code> API, which allows the value to be read as a
-	 * <code>long</code> (with <code>getLong</code> or a <code>String</code> (with
-	 * <code>get</code>) type.
-	 * 
-	 * @param key <code>key</code> with which the string form of <code>value</code>
+	 * Implementor's note: it is <i>not </i> necessary that the {@code value}
+	 * be represented by a {@code String} type in the backing store. If the
+	 * backing store supports {@code long} values, it is not unreasonable to
+	 * use them. This implementation detail is not visible through the {@code 
+	 * Preferences} API, which allows the value to be read as a
+	 * {@code long} (with {@code getLong} or a {@code String} (with
+	 * {@code get}) type.
+	 * 
+	 * @param key {@code key} with which the string form of {@code value}
 	 *        is to be associated.
-	 * @param value <code>value</code> whose string form is to be associated with
-	 *        <code>key</code>.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 * @param value {@code value} whose string form is to be associated with
+	 *        {@code key}.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #getLong(String,long)
@@ -249,27 +249,27 @@ public interface Preferences {
 	public void putLong(String key, long value);
 
 	/**
-	 * Returns the <code>long</code> value represented by the <code>String</code>
-	 * object associated with the specified <code>key</code> in this node. The
-	 * <code>String</code> object is converted to a <code>long</code> as by
-	 * <code>Long.parseLong(String)</code>. Returns the specified default if
-	 * there is no value associated with the <code>key</code>, the backing store
-	 * is inaccessible, or if <code>Long.parseLong(String)</code> would throw a
-	 * <code>NumberFormatException</code> if the associated <code>value</code> were
+	 * Returns the {@code long} value represented by the {@code String}
+	 * object associated with the specified {@code key} in this node. The
+	 * {@code String} object is converted to a {@code long} as by
+	 * {@code Long.parseLong(String)}. Returns the specified default if
+	 * there is no value associated with the {@code key}, the backing store
+	 * is inaccessible, or if {@code Long.parseLong(String)} would throw a
+	 * {@code NumberFormatException} if the associated {@code value} were
 	 * passed. This method is intended for use in conjunction with the
 	 * {@link #putLong} method.
 	 * 
-	 * @param key <code>key</code> whose associated value is to be returned as a
-	 *        <code>long</code> value.
+	 * @param key {@code key} whose associated value is to be returned as a
+	 *        {@code long} value.
 	 * @param def the value to be returned in the event that this node has no
-	 *        value associated with <code>key</code> or the associated value
-	 *        cannot be interpreted as a <code>long</code> type or the backing
+	 *        value associated with {@code key} or the associated value
+	 *        cannot be interpreted as a {@code long} type or the backing
 	 *        store is inaccessible.
-	 * @return the <code>long</code> value represented by the <code>String</code>
-	 *         object associated with <code>key</code> in this node, or
-	 *         <code>def</code> if the associated value does not exist or cannot
-	 *         be interpreted as a <code>long</code> type.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 * @return the {@code long} value represented by the {@code String}
+	 *         object associated with {@code key} in this node, or
+	 *         {@code def} if the associated value does not exist or cannot
+	 *         be interpreted as a {@code long} type.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #putLong(String,long)
@@ -278,26 +278,26 @@ public interface Preferences {
 	public long getLong(String key, long def);
 
 	/**
-	 * Associates a <code>String</code> object representing the specified
-	 * <code>boolean</code> value with the specified key in this node. The
-	 * associated string is "true" if the value is <code>true</code>, and "false"
-	 * if it is <code>false</code>. This method is intended for use in
+	 * Associates a {@code String} object representing the specified
+	 * {@code boolean} value with the specified key in this node. The
+	 * associated string is "true" if the value is {@code true}, and "false"
+	 * if it is {@code false}. This method is intended for use in
 	 * conjunction with the {@link #getBoolean} method.
 	 * 
 	 * <p>
 	 * Implementor's note: it is <i>not </i> necessary that the value be
 	 * represented by a string in the backing store. If the backing store
-	 * supports <code>boolean</code> values, it is not unreasonable to use them.
-	 * This implementation detail is not visible through the <code>Preferences
-	 * </code> API, which allows the value to be read as a <code>boolean</code>
-	 * (with <code>getBoolean</code>) or a <code>String</code> (with <code>get</code>)
+	 * supports {@code boolean} values, it is not unreasonable to use them.
+	 * This implementation detail is not visible through the {@code Preferences
+	 * } API, which allows the value to be read as a {@code boolean}
+	 * (with {@code getBoolean}) or a {@code String} (with {@code get})
 	 * type.
 	 * 
-	 * @param key <code>key</code> with which the string form of value is to be
+	 * @param key {@code key} with which the string form of value is to be
 	 *        associated.
 	 * @param value value whose string form is to be associated with
-	 *        <code>key</code>.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 *        {@code key}.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #getBoolean(String,boolean)
@@ -306,29 +306,29 @@ public interface Preferences {
 	public void putBoolean(String key, boolean value);
 
 	/**
-	 * Returns the <code>boolean</code> value represented by the <code>String</code>
-	 * object associated with the specified <code>key</code> in this node. Valid
-	 * strings are "true", which represents <code>true</code>, and "false", which
-	 * represents <code>false</code>. Case is ignored, so, for example, "TRUE"
+	 * Returns the {@code boolean} value represented by the {@code String}
+	 * object associated with the specified {@code key} in this node. Valid
+	 * strings are "true", which represents {@code true}, and "false", which
+	 * represents {@code false}. Case is ignored, so, for example, "TRUE"
 	 * and "False" are also valid. This method is intended for use in
 	 * conjunction with the {@link #putBoolean} method.
 	 * 
 	 * <p>
 	 * Returns the specified default if there is no value associated with the
-	 * <code>key</code>, the backing store is inaccessible, or if the associated
+	 * {@code key}, the backing store is inaccessible, or if the associated
 	 * value is something other than "true" or "false", ignoring case.
 	 * 
-	 * @param key <code>key</code> whose associated value is to be returned as a
-	 *        <code>boolean</code>.
+	 * @param key {@code key} whose associated value is to be returned as a
+	 *        {@code boolean}.
 	 * @param def the value to be returned in the event that this node has no
-	 *        value associated with <code>key</code> or the associated value
-	 *        cannot be interpreted as a <code>boolean</code> or the backing store
+	 *        value associated with {@code key} or the associated value
+	 *        cannot be interpreted as a {@code boolean} or the backing store
 	 *        is inaccessible.
-	 * @return the <code>boolean</code> value represented by the <code>String</code>
-	 *         object associated with <code>key</code> in this node, or
-	 *         <code>null</code> if the associated value does not exist or cannot
-	 *         be interpreted as a <code>boolean</code>.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 * @return the {@code boolean} value represented by the {@code String}
+	 *         object associated with {@code key} in this node, or
+	 *         {@code null} if the associated value does not exist or cannot
+	 *         be interpreted as a {@code boolean}.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #get(String,String)
@@ -337,26 +337,26 @@ public interface Preferences {
 	public boolean getBoolean(String key, boolean def);
 
 	/**
-	 * Associates a <code>String</code> object representing the specified
-	 * <code>float</code> value with the specified <code>key</code> in this node.
-	 * The associated <code>String</code> object is the one that would be returned
-	 * if the <code>float</code> value were passed to
-	 * <code>Float.toString(float)</code>. This method is intended for use in
+	 * Associates a {@code String} object representing the specified
+	 * {@code float} value with the specified {@code key} in this node.
+	 * The associated {@code String} object is the one that would be returned
+	 * if the {@code float} value were passed to
+	 * {@code Float.toString(float)}. This method is intended for use in
 	 * conjunction with the {@link #getFloat} method.
 	 * 
 	 * <p>
 	 * Implementor's note: it is <i>not </i> necessary that the value be
 	 * represented by a string in the backing store. If the backing store
-	 * supports <code>float</code> values, it is not unreasonable to use them.
-	 * This implementation detail is not visible through the <code>Preferences
-	 * </code> API, which allows the value to be read as a <code>float</code> (with
-	 * <code>getFloat</code>) or a <code>String</code> (with <code>get</code>) type.
+	 * supports {@code float} values, it is not unreasonable to use them.
+	 * This implementation detail is not visible through the {@code Preferences
+	 * } API, which allows the value to be read as a {@code float} (with
+	 * {@code getFloat}) or a {@code String} (with {@code get}) type.
 	 * 
-	 * @param key <code>key</code> with which the string form of value is to be
+	 * @param key {@code key} with which the string form of value is to be
 	 *        associated.
 	 * @param value value whose string form is to be associated with
-	 *        <code>key</code>.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 *        {@code key}.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #getFloat(String,float)
@@ -364,56 +364,56 @@ public interface Preferences {
 	public void putFloat(String key, float value);
 
 	/**
-	 * Returns the float <code>value</code> represented by the <code>String</code>
-	 * object associated with the specified <code>key</code> in this node. The
-	 * <code>String</code> object is converted to a <code>float</code> value as by
-	 * <code>Float.parseFloat(String)</code>. Returns the specified default if
-	 * there is no value associated with the <code>key</code>, the backing store
-	 * is inaccessible, or if <code>Float.parseFloat(String)</code> would throw a
-	 * <code>NumberFormatException</code> if the associated value were passed.
+	 * Returns the float {@code value} represented by the {@code String}
+	 * object associated with the specified {@code key} in this node. The
+	 * {@code String} object is converted to a {@code float} value as by
+	 * {@code Float.parseFloat(String)}. Returns the specified default if
+	 * there is no value associated with the {@code key}, the backing store
+	 * is inaccessible, or if {@code Float.parseFloat(String)} would throw a
+	 * {@code NumberFormatException} if the associated value were passed.
 	 * This method is intended for use in conjunction with the {@link #putFloat}
 	 * method.
 	 * 
-	 * @param key <code>key</code> whose associated value is to be returned as a
-	 *        <code>float</code> value.
+	 * @param key {@code key} whose associated value is to be returned as a
+	 *        {@code float} value.
 	 * @param def the value to be returned in the event that this node has no
-	 *        value associated with <code>key</code> or the associated value
-	 *        cannot be interpreted as a <code>float</code> type or the backing
+	 *        value associated with {@code key} or the associated value
+	 *        cannot be interpreted as a {@code float} type or the backing
 	 *        store is inaccessible.
-	 * @return the <code>float</code> value represented by the string associated
-	 *         with <code>key</code> in this node, or <code>def</code> if the
+	 * @return the {@code float} value represented by the string associated
+	 *         with {@code key} in this node, or {@code def} if the
 	 *         associated value does not exist or cannot be interpreted as a
-	 *         <code>float</code> type.
+	 *         {@code float} type.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @see #putFloat(String,float)
 	 * @see #get(String,String)
 	 */
 	public float getFloat(String key, float def);
 
 	/**
-	 * Associates a <code>String</code> object representing the specified
-	 * <code>double</code> value with the specified <code>key</code> in this node.
-	 * The associated <code>String</code> object is the one that would be returned
-	 * if the <code>double</code> value were passed to
-	 * <code>Double.toString(double)</code>. This method is intended for use in
+	 * Associates a {@code String} object representing the specified
+	 * {@code double} value with the specified {@code key} in this node.
+	 * The associated {@code String} object is the one that would be returned
+	 * if the {@code double} value were passed to
+	 * {@code Double.toString(double)}. This method is intended for use in
 	 * conjunction with the {@link #getDouble} method
 	 * 
 	 * <p>
 	 * Implementor's note: it is <i>not </i> necessary that the value be
 	 * represented by a string in the backing store. If the backing store
-	 * supports <code>double</code> values, it is not unreasonable to use them.
-	 * This implementation detail is not visible through the <code>Preferences
-	 * </code> API, which allows the value to be read as a <code>double</code> (with
-	 * <code>getDouble</code>) or a <code>String</code> (with <code>get</code>)
+	 * supports {@code double} values, it is not unreasonable to use them.
+	 * This implementation detail is not visible through the {@code Preferences
+	 * } API, which allows the value to be read as a {@code double} (with
+	 * {@code getDouble}) or a {@code String} (with {@code get})
 	 * type.
 	 * 
-	 * @param key <code>key</code> with which the string form of value is to be
+	 * @param key {@code key} with which the string form of value is to be
 	 *        associated.
 	 * @param value value whose string form is to be associated with
-	 *        <code>key</code>.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 *        {@code key}.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #getDouble(String,double)
@@ -421,39 +421,39 @@ public interface Preferences {
 	public void putDouble(String key, double value);
 
 	/**
-	 * Returns the <code>double</code> value represented by the <code>String</code>
-	 * object associated with the specified <code>key</code> in this node. The
-	 * <code>String</code> object is converted to a <code>double</code> value as by
-	 * <code>Double.parseDouble(String)</code>. Returns the specified default if
-	 * there is no value associated with the <code>key</code>, the backing store
-	 * is inaccessible, or if <code>Double.parseDouble(String)</code> would throw
-	 * a <code>NumberFormatException</code> if the associated value were passed.
+	 * Returns the {@code double} value represented by the {@code String}
+	 * object associated with the specified {@code key} in this node. The
+	 * {@code String} object is converted to a {@code double} value as by
+	 * {@code Double.parseDouble(String)}. Returns the specified default if
+	 * there is no value associated with the {@code key}, the backing store
+	 * is inaccessible, or if {@code Double.parseDouble(String)} would throw
+	 * a {@code NumberFormatException} if the associated value were passed.
 	 * This method is intended for use in conjunction with the
 	 * {@link #putDouble} method.
 	 * 
-	 * @param key <code>key</code> whose associated value is to be returned as a
-	 *        <code>double</code> value.
+	 * @param key {@code key} whose associated value is to be returned as a
+	 *        {@code double} value.
 	 * @param def the value to be returned in the event that this node has no
-	 *        value associated with <code>key</code> or the associated value
-	 *        cannot be interpreted as a <code>double</code> type or the backing
+	 *        value associated with {@code key} or the associated value
+	 *        cannot be interpreted as a {@code double} type or the backing
 	 *        store is inaccessible.
-	 * @return the <code>double</code> value represented by the <code>String</code>
-	 *         object associated with <code>key</code> in this node, or
-	 *         <code>def</code> if the associated value does not exist or cannot
-	 *         be interpreted as a <code>double</code> type.
+	 * @return the {@code double} value represented by the {@code String}
+	 *         object associated with {@code key} in this node, or
+	 *         {@code def} if the associated value does not exist or cannot
+	 *         be interpreted as a {@code double} type.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the the {@link #removeNode()} method.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>.
+	 * @throws NullPointerException if {@code key} is {@code null}.
 	 * @see #putDouble(String,double)
 	 * @see #get(String,String)
 	 */
 	public double getDouble(String key, double def);
 
 	/**
-	 * Associates a <code>String</code> object representing the specified
-	 * <code>byte[]</code> with the specified <code>key</code> in this node. The
-	 * associated <code>String</code> object the <i>Base64 </i> encoding of the
-	 * <code>byte[]</code>, as defined in <a
+	 * Associates a {@code String} object representing the specified
+	 * {@code byte[]} with the specified {@code key} in this node. The
+	 * associated {@code String} object the <i>Base64 </i> encoding of the
+	 * {@code byte[]}, as defined in <a
 	 * href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 </a>, Section 6.8,
 	 * with one minor change: the string will consist solely of characters from
 	 * the <i>Base64 Alphabet </i>; it will not contain any newline characters.
@@ -462,19 +462,19 @@ public interface Preferences {
 	 * 
 	 * <p>
 	 * Implementor's note: it is <i>not </i> necessary that the value be
-	 * represented by a <code>String</code> type in the backing store. If the
-	 * backing store supports <code>byte[]</code> values, it is not unreasonable
-	 * to use them. This implementation detail is not visible through the <code>
-	 * Preferences</code> API, which allows the value to be read as an a
-	 * <code>byte[]</code> object (with <code>getByteArray</code>) or a
-	 * <code>String</code> object (with <code>get</code>).
-	 * 
-	 * @param key <code>key</code> with which the string form of <code>value</code>
+	 * represented by a {@code String} type in the backing store. If the
+	 * backing store supports {@code byte[]} values, it is not unreasonable
+	 * to use them. This implementation detail is not visible through the {@code 
+	 * Preferences} API, which allows the value to be read as an a
+	 * {@code byte[]} object (with {@code getByteArray}) or a
+	 * {@code String} object (with {@code get}).
+	 * 
+	 * @param key {@code key} with which the string form of {@code value}
 	 *        is to be associated.
-	 * @param value <code>value</code> whose string form is to be associated with
-	 *        <code>key</code>.
-	 * @throws NullPointerException if <code>key</code> or <code>value</code> is
-	 *         <code>null</code>.
+	 * @param value {@code value} whose string form is to be associated with
+	 *        {@code key}.
+	 * @throws NullPointerException if {@code key} or {@code value} is
+	 *         {@code null}.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #getByteArray(String,byte[])
@@ -483,9 +483,9 @@ public interface Preferences {
 	public void putByteArray(String key, byte[] value);
 
 	/**
-	 * Returns the <code>byte[]</code> value represented by the <code>String</code>
-	 * object associated with the specified <code>key</code> in this node. Valid
-	 * <code>String</code> objects are <i>Base64 </i> encoded binary data, as
+	 * Returns the {@code byte[]} value represented by the {@code String}
+	 * object associated with the specified {@code key} in this node. Valid
+	 * {@code String} objects are <i>Base64 </i> encoded binary data, as
 	 * defined in <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 </a>,
 	 * Section 6.8, with one minor change: the string must consist solely of
 	 * characters from the <i>Base64 Alphabet </i>; no newline characters or
@@ -494,21 +494,21 @@ public interface Preferences {
 	 * 
 	 * <p>
 	 * Returns the specified default if there is no value associated with the
-	 * <code>key</code>, the backing store is inaccessible, or if the associated
+	 * {@code key}, the backing store is inaccessible, or if the associated
 	 * value is not a valid Base64 encoded byte array (as defined above).
 	 * 
-	 * @param key <code>key</code> whose associated value is to be returned as a
-	 *        <code>byte[]</code> object.
+	 * @param key {@code key} whose associated value is to be returned as a
+	 *        {@code byte[]} object.
 	 * @param def the value to be returned in the event that this node has no
-	 *        value associated with <code>key</code> or the associated value
-	 *        cannot be interpreted as a <code>byte[]</code> type, or the backing
+	 *        value associated with {@code key} or the associated value
+	 *        cannot be interpreted as a {@code byte[]} type, or the backing
 	 *        store is inaccessible.
-	 * @return the <code>byte[]</code> value represented by the <code>String</code>
-	 *         object associated with <code>key</code> in this node, or
-	 *         <code>def</code> if the associated value does not exist or cannot
-	 *         be interpreted as a <code>byte[]</code>.
-	 * @throws NullPointerException if <code>key</code> is <code>null</code>. (A
-	 *         <code>null</code> value for <code>def</code> <i>is </i> permitted.)
+	 * @return the {@code byte[]} value represented by the {@code String}
+	 *         object associated with {@code key} in this node, or
+	 *         {@code def} if the associated value does not exist or cannot
+	 *         be interpreted as a {@code byte[]}.
+	 * @throws NullPointerException if {@code key} is {@code null}. (A
+	 *         {@code null} value for {@code def} <i>is </i> permitted.)
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
 	 * @see #get(String,String)
@@ -519,7 +519,7 @@ public interface Preferences {
 	/**
 	 * Returns all of the keys that have an associated value in this node. (The
 	 * returned array will be of size zero if this node has no preferences and
-	 * not <code>null</code>!)
+	 * not {@code null}!)
 	 * 
 	 * @return an array of the keys that have an associated value in this node.
 	 * @throws BackingStoreException if this operation cannot be completed due
@@ -532,7 +532,7 @@ public interface Preferences {
 
 	/**
 	 * Returns the names of the children of this node. (The returned array will
-	 * be of size zero if this node has no children and not <code>null</code>!)
+	 * be of size zero if this node has no children and not {@code null}!)
 	 * 
 	 * @return the names of the children of this node.
 	 * @throws BackingStoreException if this operation cannot be completed due
@@ -544,7 +544,7 @@ public interface Preferences {
 	public String[] childrenNames() throws BackingStoreException;
 
 	/**
-	 * Returns the parent of this node, or <code>null</code> if this is the root.
+	 * Returns the parent of this node, or {@code null} if this is the root.
 	 * 
 	 * @return the parent of this node.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
@@ -553,45 +553,45 @@ public interface Preferences {
 	public Preferences parent();
 
 	/**
-	 * Returns a named <code>Preferences</code> object (node), creating it and any
+	 * Returns a named {@code Preferences} object (node), creating it and any
 	 * of its ancestors if they do not already exist. Accepts a relative or
-	 * absolute pathname. Absolute pathnames (which begin with <code>'/'</code>)
+	 * absolute pathname. Absolute pathnames (which begin with {@code '/'})
 	 * are interpreted relative to the root of this node. Relative pathnames
-	 * (which begin with any character other than <code>'/'</code>) are
-	 * interpreted relative to this node itself. The empty string (<code>""</code>)
+	 * (which begin with any character other than {@code '/'}) are
+	 * interpreted relative to this node itself. The empty string ({@code ""})
 	 * is a valid relative pathname, referring to this node itself.
 	 * 
 	 * <p>
 	 * If the returned node did not exist prior to this call, this node and any
 	 * ancestors that were created by this call are not guaranteed to become
-	 * persistent until the <code>flush</code> method is called on the returned
+	 * persistent until the {@code flush} method is called on the returned
 	 * node (or one of its descendants).
 	 * 
-	 * @param pathName the path name of the <code>Preferences</code> object to
+	 * @param pathName the path name of the {@code Preferences} object to
 	 *        return.
-	 * @return the specified <code>Preferences</code> object.
+	 * @return the specified {@code Preferences} object.
 	 * @throws IllegalArgumentException if the path name is invalid.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method.
-	 * @throws NullPointerException if path name is <code>null</code>.
+	 * @throws NullPointerException if path name is {@code null}.
 	 * @see #flush()
 	 */
 	public Preferences node(String pathName);
 
 	/**
 	 * Returns true if the named node exists. Accepts a relative or absolute
-	 * pathname. Absolute pathnames (which begin with <code>'/'</code>) are
+	 * pathname. Absolute pathnames (which begin with {@code '/'}) are
 	 * interpreted relative to the root of this node. Relative pathnames (which
-	 * begin with any character other than <code>'/'</code>) are interpreted
-	 * relative to this node itself. The pathname <code>""</code> is valid, and
+	 * begin with any character other than {@code '/'}) are interpreted
+	 * relative to this node itself. The pathname {@code ""} is valid, and
 	 * refers to this node itself.
 	 * 
 	 * <p>
 	 * If this node (or an ancestor) has already been removed with the
 	 * {@link #removeNode()} method, it <i>is </i> legal to invoke this method,
-	 * but only with the pathname <code>""</code>; the invocation will return
-	 * <code>false</code>. Thus, the idiom <code>p.nodeExists("")</code> may be
-	 * used to test whether <code>p</code> has been removed.
+	 * but only with the pathname {@code ""}; the invocation will return
+	 * {@code false}. Thus, the idiom {@code p.nodeExists("")} may be
+	 * used to test whether {@code p} has been removed.
 	 * 
 	 * @param pathName the path name of the node whose existence is to be
 	 *        checked.
@@ -601,7 +601,7 @@ public interface Preferences {
 	 *         with it.
 	 * @throws IllegalStateException if this node (or an ancestor) has been
 	 *         removed with the {@link #removeNode()} method and
-	 *         <code>pathname</code> is not the empty string (<code>""</code>).
+	 *         {@code pathname} is not the empty string ({@code ""}).
 	 * @throws IllegalArgumentException if the path name is invalid (i.e., it
 	 *         contains multiple consecutive slash characters, or ends with a
 	 *         slash character and is more than one character long).
@@ -612,14 +612,14 @@ public interface Preferences {
 	/**
 	 * Removes this node and all of its descendants, invalidating any properties
 	 * contained in the removed nodes. Once a node has been removed, attempting
-	 * any method other than <code>name()</code>,<code>absolutePath()</code> or
-	 * <code>nodeExists("")</code> on the corresponding <code>Preferences</code>
-	 * instance will fail with an <code>IllegalStateException</code>. (The
-	 * methods defined on <code>Object</code> can still be invoked on a node after
-	 * it has been removed; they will not throw <code>IllegalStateException</code>.)
+	 * any method other than {@code name()},{@code absolutePath()} or
+	 * {@code nodeExists("")} on the corresponding {@code Preferences}
+	 * instance will fail with an {@code IllegalStateException}. (The
+	 * methods defined on {@code Object} can still be invoked on a node after
+	 * it has been removed; they will not throw {@code IllegalStateException}.)
 	 * 
 	 * <p>
-	 * The removal is not guaranteed to be persistent until the <code>flush</code>
+	 * The removal is not guaranteed to be persistent until the {@code flush}
 	 * method is called on the parent of this node.
 	 * 
 	 * @throws IllegalStateException if this node (or an ancestor) has already
@@ -641,10 +641,10 @@ public interface Preferences {
 	/**
 	 * Returns this node's absolute path name. Note that:
 	 * <ul>
-	 * <li>Root node - The path name of the root node is <code>"/"</code>.
+	 * <li>Root node - The path name of the root node is {@code "/"}.
 	 * <li>Slash at end - Path names other than that of the root node may not
-	 * end in slash (<code>'/'</code>).
-	 * <li>Unusual names -<code>"."</code> and <code>".."</code> have <i>no </i>
+	 * end in slash ({@code '/'}).
+	 * <li>Unusual names -{@code "."} and {@code ".."} have <i>no </i>
 	 * special significance in path names.
 	 * <li>Illegal names - The only illegal path names are those that contain
 	 * multiple consecutive slashes, or that end in slash and are not the root.
@@ -685,9 +685,9 @@ public interface Preferences {
 	/**
 	 * Ensures that future reads from this node and its descendants reflect any
 	 * changes that were committed to the persistent store (from any VM) prior
-	 * to the <code>sync</code> invocation. As a side-effect, forces any changes
+	 * to the {@code sync} invocation. As a side-effect, forces any changes
 	 * in the contents of this node and its descendants to the persistent store,
-	 * as if the <code>flush</code> method had been invoked on this node.
+	 * as if the {@code flush} method had been invoked on this node.
 	 * 
 	 * @throws BackingStoreException if this operation cannot be completed due
 	 *         to a failure in the backing store, or inability to communicate
diff --git a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java
index a9d99a4..6371dbf 100644
--- a/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java
+++ b/eclipse/plugins/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,11 +23,13 @@ package org.osgi.service.prefs;
  * system preferences, and one for each user.
  * 
  * <p>
- * A <code>PreferencesService</code> object is specific to the bundle which
+ * A {@code PreferencesService} object is specific to the bundle which
  * obtained it from the service registry. If a bundle wishes to allow another
  * bundle to access its preferences, it should pass its
- * <code>PreferencesService</code> object to that bundle.
+ * {@code PreferencesService} object to that bundle.
  *  
+ * @noimplement
+ * @version $Id: bcb430ac769863b4239575c1edeedc23fc5ab097 $
  */
 public interface PreferencesService {
 	/**
diff --git a/eclipse/plugins/org.eclipse.equinox.region/.classpath b/eclipse/plugins/org.eclipse.equinox.region/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.region/.project b/eclipse/plugins/org.eclipse.equinox.region/.project
new file mode 100644
index 0000000..269c1e5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.region</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.core.resources.prefs b/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.core.resources.prefs
similarity index 100%
copy from eclipse/plugins/org.eclipse.core.contenttype/.settings/org.eclipse.core.resources.prefs
copy to eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.core.resources.prefs
diff --git a/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..60fec9e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,329 @@
+#Fri Apr 08 08:55:56 CDT 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=false
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=800
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..7e465c0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,61 @@
+#Tue Apr 19 11:17:06 CDT 2011
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_core
+formatter_settings_version=11
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=;
+org.eclipse.jdt.ui.ondemandthreshold=3
+org.eclipse.jdt.ui.staticondemandthreshold=99
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..cd216df
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Wed Mar 23 12:53:23 CDT 2011
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/eclipse/plugins/org.eclipse.equinox.region/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.region/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..98e21c2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.equinox.region
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: javax.management,
+ org.eclipse.osgi.service.resolver;version="1.5.0";resolution:=optional,
+ org.osgi.framework;version="1.6.0",
+ org.osgi.framework.hooks.bundle;version="1.0.0",
+ org.osgi.framework.hooks.resolver;version="1.0.0",
+ org.osgi.framework.hooks.service;version="1.1.0",
+ org.osgi.framework.wiring;version="1.0.0",
+ org.osgi.util.tracker;version="1.5.0"
+Bundle-Activator: org.eclipse.equinox.internal.region.RegionManager
+Export-Package: org.eclipse.equinox.region;version="1.0.0"
+Bundle-Vendor: %Bundle-Vendor
diff --git a/eclipse/plugins/org.eclipse.equinox.region/OSGI-INF/l10n/bundle.properties b/eclipse/plugins/org.eclipse.equinox.region/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..4d75fd9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+Bundle-Vendor = Eclipse.org - Equinox
+Bundle-Name = Region Digraph
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.compare.core/about.html b/eclipse/plugins/org.eclipse.equinox.region/about.html
similarity index 100%
copy from eclipse/plugins/org.eclipse.compare.core/about.html
copy to eclipse/plugins/org.eclipse.equinox.region/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.region/build.properties b/eclipse/plugins/org.eclipse.equinox.region/build.properties
new file mode 100644
index 0000000..5a0da90
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/build.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               about.html,\
+               OSGI-INF/
+src.includes = about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/BundleIdBasedRegion.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/BundleIdBasedRegion.java
new file mode 100644
index 0000000..db539e3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/BundleIdBasedRegion.java
@@ -0,0 +1,260 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicLong;
+import org.eclipse.equinox.region.*;
+import org.eclipse.equinox.region.RegionDigraph.FilteredRegion;
+import org.osgi.framework.*;
+
+/**
+ * {@link BundleIdBasedRegion} is an implementation of {@link Region} which keeps a track of the bundles in the region
+ * by recording their bundle identifiers.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+final class BundleIdBasedRegion implements Region {
+
+	private static final String REGION_LOCATION_DELIMITER = "#"; //$NON-NLS-1$
+
+	private static final String FILE_SCHEME = "file:"; //$NON-NLS-1$
+
+	// Note that this global digraph monitor locks modifications and read operations on the RegionDigraph
+	// This includes modifying and reading the bunlde ids included in this region
+	// It should be considered a global lock on the complete digraph.
+	private final Object globalUpdateMonitor;
+	private final AtomicLong globalTimeStamp;
+	private final Map<Long, Region> globalBundleToRegion;
+
+	private final String regionName;
+
+	private final RegionDigraph regionDigraph;
+
+	private final BundleContext bundleContext;
+
+	private final ThreadLocal<Region> threadLocal;
+
+	BundleIdBasedRegion(String regionName, RegionDigraph regionDigraph, BundleContext bundleContext, ThreadLocal<Region> threadLocal, Object globalUpdateMonitor, AtomicLong globalTimeStamp, Map<Long, Region> globalBundleToRegion) {
+		if (regionName == null)
+			throw new IllegalArgumentException("The region name must not be null"); //$NON-NLS-1$
+		if (regionDigraph == null)
+			throw new IllegalArgumentException("The region digraph must not be null"); //$NON-NLS-1$
+		if (globalUpdateMonitor == null)
+			throw new IllegalArgumentException("The global update monitor must not be null"); //$NON-NLS-1$
+		if (globalBundleToRegion == null)
+			throw new IllegalArgumentException("The global bundle to region must not be null"); //$NON-NLS-1$
+		this.regionName = regionName;
+		this.regionDigraph = regionDigraph;
+		this.bundleContext = bundleContext;
+		this.threadLocal = threadLocal;
+		this.globalUpdateMonitor = globalUpdateMonitor;
+		this.globalTimeStamp = globalTimeStamp;
+		this.globalBundleToRegion = globalBundleToRegion;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public String getName() {
+		return this.regionName;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void addBundle(Bundle bundle) throws BundleException {
+		addBundle(bundle.getBundleId());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	// There is a global lock obtained to ensure consistency across the complete digraph
+	public void addBundle(long bundleId) throws BundleException {
+		synchronized (this.globalUpdateMonitor) {
+			Region r = this.globalBundleToRegion.get(bundleId);
+			if (r != null && r != this) {
+				throw new BundleException("Bundle '" + bundleId + "' is already associated with region '" + r + "'", BundleException.INVALID_OPERATION); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			this.globalBundleToRegion.put(bundleId, this);
+			this.globalTimeStamp.incrementAndGet();
+		}
+
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Bundle installBundle(String location, InputStream input) throws BundleException {
+		if (this.bundleContext == null)
+			throw new BundleException("This region is not connected to an OSGi Framework.", BundleException.INVALID_OPERATION); //$NON-NLS-1$
+		setRegionThreadLocal();
+		try {
+			input = checkFileProtocol(location, input);
+			return this.bundleContext.installBundle(location + REGION_LOCATION_DELIMITER + this.regionName, input);
+		} finally {
+			removeRegionThreadLocal();
+		}
+	}
+
+	private InputStream checkFileProtocol(String location, InputStream input) throws BundleException {
+		if (input != null || location.startsWith(FILE_SCHEME))
+			return input;
+		try {
+			return new URL(location).openStream();
+		} catch (MalformedURLException e) {
+			throw new BundleException("The location resulted in an invalid bundle URI: " + location, e); //$NON-NLS-1$
+		} catch (IOException e) {
+			throw new BundleException("The location referred to an invalid bundle at URI: " + location, e); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Bundle installBundle(String location) throws BundleException {
+		return installBundle(location, null);
+	}
+
+	private void setRegionThreadLocal() {
+		if (this.threadLocal != null)
+			this.threadLocal.set(this);
+	}
+
+	private void removeRegionThreadLocal() {
+		if (this.threadLocal != null)
+			this.threadLocal.remove();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Bundle getBundle(String symbolicName, Version version) {
+		if (bundleContext == null)
+			return null; // this region is not connected to an OSGi framework
+
+		Set<Long> bundleIds = getBundleIds();
+		for (long bundleId : bundleIds) {
+			Bundle bundle = bundleContext.getBundle(bundleId);
+			if (bundle != null && symbolicName.equals(bundle.getSymbolicName()) && version.equals(bundle.getVersion())) {
+				return bundle;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void connectRegion(Region headRegion, RegionFilter filter) throws BundleException {
+		this.regionDigraph.connect(this, filter, headRegion);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public boolean contains(long bundleId) {
+		synchronized (globalUpdateMonitor) {
+			return globalBundleToRegion.get(bundleId) == this;
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public boolean contains(Bundle bundle) {
+		return contains(bundle.getBundleId());
+	}
+
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + this.regionName.hashCode();
+		return result;
+	}
+
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (!(obj instanceof BundleIdBasedRegion)) {
+			return false;
+		}
+		BundleIdBasedRegion other = (BundleIdBasedRegion) obj;
+		return this.regionName.equals(other.regionName);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void removeBundle(Bundle bundle) {
+		removeBundle(bundle.getBundleId());
+
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void removeBundle(long bundleId) {
+		synchronized (this.globalUpdateMonitor) {
+			this.globalBundleToRegion.remove(bundleId);
+			this.globalTimeStamp.incrementAndGet();
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public String toString() {
+		return getName();
+	}
+
+	public Set<Long> getBundleIds() {
+		Set<Long> bundleIds = new HashSet<Long>();
+		synchronized (this.globalUpdateMonitor) {
+			for (Map.Entry<Long, Region> entry : globalBundleToRegion.entrySet()) {
+				if (entry.getValue() == this) {
+					bundleIds.add(entry.getKey());
+				}
+			}
+		}
+		return bundleIds;
+	}
+
+	public Set<FilteredRegion> getEdges() {
+		return this.regionDigraph.getEdges(this);
+	}
+
+	public void visitSubgraph(RegionDigraphVisitor visitor) {
+		this.regionDigraph.visitSubgraph(this, visitor);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public RegionDigraph getRegionDigraph() {
+		return this.regionDigraph;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/EquinoxStateHelper.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/EquinoxStateHelper.java
new file mode 100644
index 0000000..75d42e8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/EquinoxStateHelper.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.region;
+
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.PlatformAdmin;
+import org.osgi.framework.*;
+import org.osgi.framework.wiring.BundleRevision;
+
+/**
+ * Isolates all equinox specific code to a specific class to allow the equinox packages to be optional.
+ */
+public class EquinoxStateHelper {
+	static final Worker equinoxSupport;
+
+	static {
+		Worker result = null;
+		try {
+			Class.forName("org.eclipse.osgi.service.resolver.BundleDescription"); //$NON-NLS-1$
+			result = new Worker();
+		} catch (ClassNotFoundException e) {
+			// nothing
+		}
+		equinoxSupport = result;
+	}
+
+	static final class Worker {
+		final Long getBundleId(BundleRevision revision) {
+			if (revision instanceof BundleDescription) {
+				return ((BundleDescription) revision).getBundleId();
+			}
+			return null;
+		}
+
+		public long getStateTimeStamp(BundleContext context) {
+			ServiceReference<PlatformAdmin> ref = context.getServiceReference(PlatformAdmin.class);
+			if (ref == null)
+				return -1;
+			PlatformAdmin pa = context.getService(ref);
+			if (pa == null)
+				return -1;
+			try {
+				return pa.getState(false).getTimeStamp();
+			} finally {
+				context.ungetService(ref);
+			}
+		}
+	}
+
+	public static final long getBundleId(BundleRevision revision) {
+		// For testability, use the bundle revision's bundle before casting to ResolverBundle.
+		Bundle bundle = revision.getBundle();
+		if (bundle != null) {
+			return bundle.getBundleId();
+		}
+		Long result = equinoxSupport == null ? null : equinoxSupport.getBundleId(revision);
+		if (result == null)
+			throw new RuntimeException(String.format("Cannot determine bundle id of BundleRevision '%s'", revision)); //$NON-NLS-1$
+		return result;
+	}
+
+	public static final long getStateTimeStamp(BundleContext context) {
+		return equinoxSupport == null ? -1 : equinoxSupport.getStateTimeStamp(context);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/RegionLifecycleListener.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/RegionLifecycleListener.java
new file mode 100644
index 0000000..79568e6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/RegionLifecycleListener.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import org.eclipse.equinox.region.Region;
+
+/**
+ * {@link RegionLifecycleListener} is a service interface to listen for regions being added to and deleted from the
+ * region digraph.
+ * <p />
+ * Note that this is an internal interface and is not intended for external use.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Implementations of this interface must be thread safe.
+ */
+public interface RegionLifecycleListener {
+
+	/**
+	 * Called after the given region is added to the digraph.
+	 * 
+	 * @param region the region which has been added
+	 */
+	void regionAdded(Region region);
+
+	/**
+	 * Called before the given region is removed from the digraph.
+	 * 
+	 * @param region the region which is about to be removed
+	 */
+	void regionRemoving(Region region);
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/RegionManager.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/RegionManager.java
new file mode 100644
index 0000000..685534b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/RegionManager.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import org.eclipse.equinox.internal.region.management.StandardManageableRegionDigraph;
+import org.eclipse.equinox.region.Region;
+import org.eclipse.equinox.region.RegionDigraph;
+import org.osgi.framework.*;
+import org.osgi.framework.hooks.bundle.EventHook;
+import org.osgi.framework.hooks.bundle.FindHook;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+
+/**
+ * Creates and manages the {@link RegionDigraph} associated
+ * with the running framework.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Threadsafe.
+ * 
+ */
+public final class RegionManager implements BundleActivator {
+
+	private static final String REGION_KERNEL = "org.eclipse.equinox.region.kernel"; //$NON-NLS-1$
+	private static final String REGION_DOMAIN_PROP = "org.eclipse.equinox.region.domain"; //$NON-NLS-1$
+	private static final String DIGRAPH_FILE = "digraph"; //$NON-NLS-1$
+
+	Collection<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
+
+	private BundleContext bundleContext;
+
+	private final ThreadLocal<Region> threadLocal = new ThreadLocal<Region>();
+
+	private String domain;
+
+	private RegionDigraph digraph;
+
+	private StandardManageableRegionDigraph digraphMBean;
+
+	public void start(BundleContext bc) throws BundleException, IOException, InvalidSyntaxException {
+		this.bundleContext = bc;
+		this.domain = bc.getProperty(REGION_DOMAIN_PROP);
+		if (this.domain == null)
+			this.domain = REGION_DOMAIN_PROP;
+		digraph = loadRegionDigraph();
+		registerRegionHooks(digraph);
+		digraphMBean = registerDigraphMbean(digraph);
+		registerRegionDigraph(digraph);
+	}
+
+	public void stop(BundleContext bc) throws IOException {
+		digraphMBean.unregisterMbean();
+		for (ServiceRegistration<?> registration : registrations)
+			registration.unregister();
+		saveDigraph();
+	}
+
+	private RegionDigraph loadRegionDigraph() throws BundleException, IOException, InvalidSyntaxException {
+		File digraphFile = bundleContext.getDataFile(DIGRAPH_FILE);
+		if (digraphFile == null || !digraphFile.exists()) {
+			// no persistent digraph available, create a new one
+			return createRegionDigraph();
+		}
+		FileInputStream in = new FileInputStream(digraphFile);
+		try {
+			// TODO need to validate bundle IDs to make sure they are consistent with current bundles
+			return StandardRegionDigraphPersistence.readRegionDigraph(new DataInputStream(in), this.bundleContext, this.threadLocal);
+		} finally {
+			try {
+				in.close();
+			} catch (IOException e) {
+				// We tried our best to clean up
+			}
+		}
+	}
+
+	private RegionDigraph createRegionDigraph() throws BundleException {
+		RegionDigraph regionDigraph = new StandardRegionDigraph(this.bundleContext, this.threadLocal);
+		Region kernelRegion = regionDigraph.createRegion(REGION_KERNEL);
+		for (Bundle bundle : this.bundleContext.getBundles()) {
+			kernelRegion.addBundle(bundle);
+		}
+		return regionDigraph;
+	}
+
+	private void saveDigraph() throws IOException {
+		FileOutputStream digraphFile = new FileOutputStream(bundleContext.getDataFile(DIGRAPH_FILE));
+		try {
+			digraph.getRegionDigraphPersistence().save(digraph, digraphFile);
+		} finally {
+			try {
+				digraphFile.close();
+			} catch (IOException e) {
+				// ignore;
+			}
+		}
+
+	}
+
+	private StandardManageableRegionDigraph registerDigraphMbean(RegionDigraph regionDigraph) {
+		StandardManageableRegionDigraph standardManageableRegionDigraph = new StandardManageableRegionDigraph(regionDigraph, this.domain, this.bundleContext);
+		standardManageableRegionDigraph.registerMBean();
+		return standardManageableRegionDigraph;
+	}
+
+	private void registerRegionHooks(RegionDigraph regionDigraph) {
+		registerResolverHookFactory(regionDigraph.getResolverHookFactory());
+
+		registerBundleFindHook(regionDigraph.getBundleFindHook());
+		registerBundleEventHook(regionDigraph.getBundleEventHook());
+
+		registerServiceFindHook(regionDigraph.getServiceFindHook());
+		registerServiceEventHook(regionDigraph.getServiceEventHook());
+	}
+
+	private void registerRegionDigraph(RegionDigraph regionDigraph) {
+		this.registrations.add(this.bundleContext.registerService(RegionDigraph.class, regionDigraph, null));
+	}
+
+	private void registerServiceFindHook(org.osgi.framework.hooks.service.FindHook serviceFindHook) {
+		this.registrations.add(this.bundleContext.registerService(org.osgi.framework.hooks.service.FindHook.class, serviceFindHook, null));
+	}
+
+	@SuppressWarnings("deprecation")
+	private void registerServiceEventHook(org.osgi.framework.hooks.service.EventHook serviceEventHook) {
+		this.registrations.add(this.bundleContext.registerService(org.osgi.framework.hooks.service.EventHook.class, serviceEventHook, null));
+	}
+
+	private void registerBundleFindHook(FindHook findHook) {
+		this.registrations.add(this.bundleContext.registerService(FindHook.class, findHook, null));
+	}
+
+	private void registerBundleEventHook(EventHook eventHook) {
+		this.registrations.add(this.bundleContext.registerService(EventHook.class, eventHook, null));
+
+	}
+
+	private void registerResolverHookFactory(ResolverHookFactory resolverHookFactory) {
+		this.registrations.add(this.bundleContext.registerService(ResolverHookFactory.class, resolverHookFactory, null));
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraph.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraph.java
new file mode 100644
index 0000000..b0151cc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraph.java
@@ -0,0 +1,449 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SpringSource, a division of VMware - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import java.util.*;
+import java.util.concurrent.atomic.AtomicLong;
+import org.eclipse.equinox.internal.region.hook.*;
+import org.eclipse.equinox.region.*;
+import org.osgi.framework.*;
+import org.osgi.framework.hooks.bundle.EventHook;
+import org.osgi.framework.hooks.bundle.FindHook;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+
+/**
+ * {@link StandardRegionDigraph} is the default implementation of {@link RegionDigraph}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Thread safe.
+ * 
+ */
+public final class StandardRegionDigraph implements RegionDigraph {
+
+	private static final Set<FilteredRegion> EMPTY_EDGE_SET = Collections.unmodifiableSet(new HashSet<FilteredRegion>());
+
+	// This monitor guards the modifications and read operations on the digraph as well as 
+	// bundle id modifications of all regions in this digraph
+	private final Object monitor = new Object();
+
+	private final Set<Region> regions = new HashSet<Region>();
+
+	/*
+	 * bundleToRegion maps a given bundle id to the region for which it belongs.
+	 * this is a global map for all regions in the digraph
+	 */
+	private final Map<Long, Region> bundleToRegion = new HashMap<Long, Region>();
+
+	/* edges maps a given region to an immutable set of edges with their tail at the given region. To update
+	 * the edges for a region, the corresponding immutable set is replaced atomically. */
+	private final Map<Region, Set<FilteredRegion>> edges = new HashMap<Region, Set<FilteredRegion>>();
+
+	private final BundleContext bundleContext;
+
+	private final ThreadLocal<Region> threadLocal;
+
+	private final SubgraphTraverser subgraphTraverser;
+
+	private final org.osgi.framework.hooks.bundle.EventHook bundleEventHook;
+	private final org.osgi.framework.hooks.bundle.FindHook bundleFindHook;
+	@SuppressWarnings("deprecation")
+	private final org.osgi.framework.hooks.service.EventHook serviceEventHook;
+	private final org.osgi.framework.hooks.service.FindHook serviceFindHook;
+	private final ResolverHookFactory resolverHookFactory;
+	private final StandardRegionDigraph origin;
+	// Guarded by the origin monitor
+	private long originTimeStamp;
+	private final AtomicLong timeStamp = new AtomicLong();
+
+	StandardRegionDigraph(StandardRegionDigraph origin) throws BundleException {
+		this(null, null, origin);
+
+	}
+
+	public StandardRegionDigraph(BundleContext bundleContext, ThreadLocal<Region> threadLocal) throws BundleException {
+		this(bundleContext, threadLocal, null);
+	}
+
+	private StandardRegionDigraph(BundleContext bundleContext, ThreadLocal<Region> threadLocal, StandardRegionDigraph origin) throws BundleException {
+		this.subgraphTraverser = new SubgraphTraverser();
+		this.bundleContext = bundleContext;
+		this.threadLocal = threadLocal;
+
+		// Note we are safely escaping this only because we know the hook impls
+		// do not escape the digraph to other threads on construction.
+		this.resolverHookFactory = new RegionResolverHookFactory(this);
+		this.bundleFindHook = new RegionBundleFindHook(this, bundleContext == null ? 0 : bundleContext.getBundle().getBundleId());
+		this.bundleEventHook = new RegionBundleEventHook(this, this.bundleFindHook, this.threadLocal);
+
+		this.serviceFindHook = new RegionServiceFindHook(this);
+		this.serviceEventHook = new RegionServiceEventHook(serviceFindHook);
+		this.origin = origin;
+		if (origin != null) {
+			synchronized (origin.monitor) {
+				this.originTimeStamp = origin.timeStamp.get();
+				this.replace(origin, false);
+			}
+		} else {
+			this.originTimeStamp = -1;
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Region createRegion(String regionName) throws BundleException {
+		Region region = new BundleIdBasedRegion(regionName, this, this.bundleContext, this.threadLocal, this.monitor, this.timeStamp, this.bundleToRegion);
+		synchronized (this.monitor) {
+			if (getRegion(regionName) != null) {
+				throw new BundleException("Region '" + regionName + "' already exists", BundleException.UNSUPPORTED_OPERATION); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			this.regions.add(region);
+			this.edges.put(region, EMPTY_EDGE_SET);
+			this.timeStamp.incrementAndGet();
+		}
+		notifyAdded(region);
+		return region;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void connect(Region tailRegion, RegionFilter filter, Region headRegion) throws BundleException {
+		if (tailRegion == null)
+			throw new IllegalArgumentException("The tailRegion must not be null."); //$NON-NLS-1$
+		if (filter == null)
+			throw new IllegalArgumentException("The filter must not be null."); //$NON-NLS-1$
+		if (headRegion == null)
+			throw new IllegalArgumentException("The headRegion must not be null."); //$NON-NLS-1$
+		if (headRegion.equals(tailRegion)) {
+			throw new BundleException("Cannot connect region '" + headRegion + "' to itself", BundleException.UNSUPPORTED_OPERATION); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (tailRegion.getRegionDigraph() != this)
+			throw new IllegalArgumentException("The tailRegion does not belong to this digraph."); //$NON-NLS-1$
+		if (headRegion.getRegionDigraph() != this)
+			throw new IllegalArgumentException("The headRegion does not belong to this digraph."); //$NON-NLS-1$
+
+		boolean tailAdded = false;
+		boolean headAdded = false;
+		synchronized (this.monitor) {
+			Set<FilteredRegion> connections = this.edges.get(tailRegion);
+			if (connections == null) {
+				connections = new HashSet<FilteredRegion>();
+			} else {
+				connections = new HashSet<FilteredRegion>(connections);
+				for (FilteredRegion edge : connections) {
+					if (headRegion.equals(edge.getRegion())) {
+						throw new BundleException("Region '" + tailRegion + "' is already connected to region '" + headRegion, BundleException.UNSUPPORTED_OPERATION); //$NON-NLS-1$ //$NON-NLS-2$
+					}
+				}
+			}
+
+			checkFilterDoesNotAllowExistingBundle(tailRegion, filter);
+			tailAdded = this.regions.add(tailRegion);
+			headAdded = this.regions.add(headRegion);
+			connections.add(new StandardFilteredRegion(headRegion, filter));
+			this.edges.put(tailRegion, Collections.unmodifiableSet(connections));
+			this.timeStamp.incrementAndGet();
+		}
+		if (tailAdded) {
+			notifyAdded(tailRegion);
+		}
+		if (headAdded) {
+			notifyAdded(headRegion);
+		}
+	}
+
+	private void checkFilterDoesNotAllowExistingBundle(Region tailRegion, RegionFilter filter) {
+		// TODO: enumerate the bundles in the region and check the filter does not allow any of them
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Iterator<Region> iterator() {
+		synchronized (this.monitor) {
+			Set<Region> snapshot = new HashSet<Region>(this.regions.size());
+			snapshot.addAll(this.regions);
+			return snapshot.iterator();
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Set<FilteredRegion> getEdges(Region tailRegion) {
+		synchronized (this.monitor) {
+			// Cope with the case where tailRegion is not in the digraph
+			Set<FilteredRegion> edgeSet = this.edges.get(tailRegion);
+			return edgeSet == null ? EMPTY_EDGE_SET : edgeSet;
+		}
+	}
+
+	static class StandardFilteredRegion implements FilteredRegion {
+
+		private Region region;
+
+		private RegionFilter regionFilter;
+
+		StandardFilteredRegion(Region region, RegionFilter regionFilter) {
+			this.region = region;
+			this.regionFilter = regionFilter;
+		}
+
+		public Region getRegion() {
+			return this.region;
+		}
+
+		public RegionFilter getFilter() {
+			return this.regionFilter;
+		}
+
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Region getRegion(String regionName) {
+		synchronized (this.monitor) {
+			for (Region region : this) {
+				if (regionName.equals(region.getName())) {
+					return region;
+				}
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Region getRegion(Bundle bundle) {
+		return getRegion(bundle.getBundleId());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public Region getRegion(long bundleId) {
+		synchronized (this.monitor) {
+			return bundleToRegion.get(bundleId);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void removeRegion(Region region) {
+		if (region == null)
+			throw new IllegalArgumentException("The region cannot be null."); //$NON-NLS-1$
+		notifyRemoving(region);
+		synchronized (this.monitor) {
+			this.regions.remove(region);
+			this.edges.remove(region);
+			for (Region r : this.edges.keySet()) {
+				Set<FilteredRegion> edgeSet = this.edges.get(r);
+				for (FilteredRegion edge : edgeSet) {
+					if (region.equals(edge.getRegion())) {
+						Set<FilteredRegion> mutableEdgeSet = new HashSet<FilteredRegion>(edgeSet);
+						mutableEdgeSet.remove(edge);
+						this.edges.put(r, Collections.unmodifiableSet(mutableEdgeSet));
+						break;
+					}
+				}
+			}
+			this.timeStamp.incrementAndGet();
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public String toString() {
+		synchronized (this.monitor) {
+			StringBuffer s = new StringBuffer();
+			boolean first = true;
+			s.append("RegionDigraph{"); //$NON-NLS-1$
+			for (Region r : this) {
+				if (!first) {
+					s.append(", "); //$NON-NLS-1$
+				}
+				s.append(r);
+				first = false;
+			}
+			s.append("}"); //$NON-NLS-1$
+
+			s.append("["); //$NON-NLS-1$
+			first = true;
+			for (Region r : this) {
+				Set<FilteredRegion> edgeSet = this.edges.get(r);
+				if (edgeSet != null) {
+					for (FilteredRegion filteredRegion : edgeSet) {
+						if (!first) {
+							s.append(", "); //$NON-NLS-1$
+						}
+						s.append(r + "->" + filteredRegion.getRegion()); //$NON-NLS-1$
+						first = false;
+					}
+				}
+			}
+			s.append("]"); //$NON-NLS-1$
+			return s.toString();
+		}
+	}
+
+	public Set<Region> getRegions() {
+		Set<Region> result = new HashSet<Region>();
+		synchronized (this.monitor) {
+			result.addAll(this.regions);
+		}
+		return result;
+	}
+
+	public RegionFilterBuilder createRegionFilterBuilder() {
+		return new StandardRegionFilterBuilder();
+	}
+
+	private void notifyAdded(Region region) {
+		Set<RegionLifecycleListener> listeners = getListeners();
+		for (RegionLifecycleListener listener : listeners) {
+			listener.regionAdded(region);
+		}
+	}
+
+	private void notifyRemoving(Region region) {
+		Set<RegionLifecycleListener> listeners = getListeners();
+		for (RegionLifecycleListener listener : listeners) {
+			listener.regionRemoving(region);
+		}
+	}
+
+	private Set<RegionLifecycleListener> getListeners() {
+		Set<RegionLifecycleListener> listeners = new HashSet<RegionLifecycleListener>();
+		if (this.bundleContext == null)
+			return listeners;
+		try {
+			Collection<ServiceReference<RegionLifecycleListener>> listenerServiceReferences = this.bundleContext.getServiceReferences(RegionLifecycleListener.class, null);
+			for (ServiceReference<RegionLifecycleListener> listenerServiceReference : listenerServiceReferences) {
+				RegionLifecycleListener regionLifecycleListener = this.bundleContext.getService(listenerServiceReference);
+				if (regionLifecycleListener != null) {
+					listeners.add(regionLifecycleListener);
+				}
+			}
+		} catch (InvalidSyntaxException e) {
+			e.printStackTrace();
+		}
+		return listeners;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void visitSubgraph(Region startingRegion, RegionDigraphVisitor visitor) {
+		this.subgraphTraverser.visitSubgraph(startingRegion, visitor);
+	}
+
+	/**
+	 * Returns a snapshot of filtered regions
+	 * 
+	 * @return a snapshot of filtered regions
+	 */
+	Map<Region, Set<FilteredRegion>> getFilteredRegions() {
+		synchronized (this.monitor) {
+			return new HashMap<Region, Set<FilteredRegion>>(this.edges);
+		}
+	}
+
+	/** 
+	 * {@inheritDoc}
+	 */
+	public RegionDigraphPersistence getRegionDigraphPersistence() {
+		return new StandardRegionDigraphPersistence();
+	}
+
+	/** 
+	 * {@inheritDoc}
+	 */
+	@Override
+	public RegionDigraph copy() throws BundleException {
+		return new StandardRegionDigraph(this);
+	}
+
+	/** 
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void replace(RegionDigraph digraph) throws BundleException {
+		replace(digraph, true);
+	}
+
+	private void replace(RegionDigraph digraph, boolean check) throws BundleException {
+		if (!(digraph instanceof StandardRegionDigraph))
+			throw new IllegalArgumentException("Only digraphs of type '" + StandardRegionDigraph.class.getName() + "' are allowed: " + digraph.getClass().getName()); //$NON-NLS-1$ //$NON-NLS-2$
+		StandardRegionDigraph replacement = (StandardRegionDigraph) digraph;
+		if (check && replacement.origin != this)
+			throw new IllegalArgumentException("The replacement digraph is not a copy of this digraph."); //$NON-NLS-1$
+		Map<Region, Set<FilteredRegion>> filteredRegions = replacement.getFilteredRegions();
+		synchronized (this.monitor) {
+			if (check && this.timeStamp.get() != replacement.originTimeStamp) {
+				throw new BundleException("The origin timestamp has changed since the replacement copy was created.", BundleException.INVALID_OPERATION); //$NON-NLS-1$
+			}
+			this.regions.clear();
+			this.edges.clear();
+			this.bundleToRegion.clear();
+			for (Region original : filteredRegions.keySet()) {
+				Region copy = this.createRegion(original.getName());
+				for (Long id : original.getBundleIds()) {
+					copy.addBundle(id);
+				}
+			}
+			for (Map.Entry<Region, Set<FilteredRegion>> connection : filteredRegions.entrySet()) {
+				Region tailRegion = this.getRegion(connection.getKey().getName());
+				for (FilteredRegion headFilter : connection.getValue()) {
+					Region headRegion = this.getRegion(headFilter.getRegion().getName());
+					this.connect(tailRegion, headFilter.getFilter(), headRegion);
+				}
+			}
+			this.timeStamp.incrementAndGet();
+			if (check) {
+				replacement.originTimeStamp = this.timeStamp.get();
+			}
+		}
+	}
+
+	@Override
+	public ResolverHookFactory getResolverHookFactory() {
+		return resolverHookFactory;
+	}
+
+	@Override
+	public EventHook getBundleEventHook() {
+		return bundleEventHook;
+	}
+
+	@Override
+	public FindHook getBundleFindHook() {
+		return bundleFindHook;
+	}
+
+	@SuppressWarnings("deprecation")
+	@Override
+	public org.osgi.framework.hooks.service.EventHook getServiceEventHook() {
+		return serviceEventHook;
+	}
+
+	@Override
+	public org.osgi.framework.hooks.service.FindHook getServiceFindHook() {
+		return serviceFindHook;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraphPersistence.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraphPersistence.java
new file mode 100644
index 0000000..1ff2180
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraphPersistence.java
@@ -0,0 +1,197 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import java.io.*;
+import java.util.*;
+import org.eclipse.equinox.region.*;
+import org.eclipse.equinox.region.RegionDigraph.FilteredRegion;
+import org.osgi.framework.*;
+
+/**
+ * 
+ * Class used for reading and writing a region digraph to persistent storage.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+final class StandardRegionDigraphPersistence implements RegionDigraphPersistence {
+
+	private static final String PERSISTENT_NAME = "equinox region digraph"; //$NON-NLS-1$
+
+	private static final int PERSISTENT_VERSION = 1;
+
+	static void writeRegionDigraph(DataOutputStream out, RegionDigraph digraph) throws IOException {
+		if (!(digraph instanceof StandardRegionDigraph))
+			throw new IllegalArgumentException("Only digraphs of type '" + StandardRegionDigraph.class.getName() + "' are allowed: " + digraph.getClass().getName()); //$NON-NLS-1$ //$NON-NLS-2$
+		Map<Region, Set<FilteredRegion>> filteredRegions = ((StandardRegionDigraph) digraph).getFilteredRegions();
+
+		try {
+			// write the persistent name and version
+			out.writeUTF(PERSISTENT_NAME);
+			out.writeInt(PERSISTENT_VERSION);
+			// write the number of regions
+			out.writeInt(filteredRegions.size());
+			// write each region
+			for (Region region : filteredRegions.keySet()) {
+				writeRegion(out, region);
+			}
+			// write each edge
+			// write number of tail regions
+			out.writeInt(filteredRegions.size());
+			for (Map.Entry<Region, Set<FilteredRegion>> edges : filteredRegions.entrySet()) {
+				// write the number of edges for this tail
+				out.writeInt(edges.getValue().size());
+				for (FilteredRegion edge : edges.getValue()) {
+					writeEdge(out, edges.getKey(), edge.getFilter(), edge.getRegion());
+				}
+			}
+		} finally {
+			// note that the output is flushed even on exception
+			out.flush();
+		}
+	}
+
+	private static void writeRegion(DataOutputStream out, Region region) throws IOException {
+		// write region name
+		out.writeUTF(region.getName());
+
+		Set<Long> ids = region.getBundleIds();
+		// write number of bundles
+		out.writeInt(ids.size());
+		for (Long id : ids) {
+			// write each bundle id
+			out.writeLong(id);
+		}
+	}
+
+	private static void writeEdge(DataOutputStream out, Region tail, RegionFilter filter, Region head) throws IOException {
+		// write tail region name
+		out.writeUTF(tail.getName());
+		// write head region name
+		out.writeUTF(head.getName());
+		// save the sharing policy
+		Map<String, Collection<String>> policy = filter.getSharingPolicy();
+		// write the number of name spaces
+		out.writeInt(policy.size());
+		// write each name space policy
+		for (Map.Entry<String, Collection<String>> namespace : policy.entrySet()) {
+			// write the name space name
+			out.writeUTF(namespace.getKey());
+			Collection<String> filters = namespace.getValue();
+			// write the number of filters
+			out.writeInt(filters.size());
+			for (String filterSpec : filters) {
+				// write each filter
+				out.writeUTF(filterSpec);
+			}
+		}
+	}
+
+	static RegionDigraph readRegionDigraph(DataInputStream in, BundleContext bundleContext, ThreadLocal<Region> threadLocal) throws IOException, InvalidSyntaxException, BundleException {
+		RegionDigraph digraph = new StandardRegionDigraph(bundleContext, threadLocal);
+
+		// Read and check the persistent name and version
+		String persistentName = in.readUTF();
+		if (!PERSISTENT_NAME.equals(persistentName)) {
+			throw new IllegalArgumentException("Input stream does not represent a digraph"); //$NON-NLS-1$
+		}
+		int persistentVersion = in.readInt();
+		if (PERSISTENT_VERSION != persistentVersion) {
+			throw new IllegalArgumentException("Input stream contains a digraph with an incompatible version '" + persistentVersion + "'"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		// read the number of regions
+		int numRegions = in.readInt();
+		for (int i = 0; i < numRegions; i++) {
+			readRegion(in, digraph);
+		}
+		// read each edge
+		// read number of tail regions
+		int numTails = in.readInt();
+		for (int i = 0; i < numTails; i++) {
+			// read the number of edges for this tail
+			int numEdges = in.readInt();
+			for (int j = 0; j < numEdges; j++) {
+				readEdge(in, digraph);
+			}
+		}
+
+		return digraph;
+	}
+
+	private static Region readRegion(DataInputStream in, RegionDigraph digraph) throws IOException, BundleException {
+		// read region name
+		String name = in.readUTF();
+		Region region = digraph.createRegion(name);
+
+		// read number of bundles
+		int numIds = in.readInt();
+		for (int i = 0; i < numIds; i++) {
+			region.addBundle(in.readLong());
+		}
+		return region;
+	}
+
+	private static void readEdge(DataInputStream in, RegionDigraph digraph) throws IOException, InvalidSyntaxException, BundleException {
+		// read tail region name
+		String tailName = in.readUTF();
+		Region tail = digraph.getRegion(tailName);
+		if (tail == null)
+			throw new IOException("Could not find tail region: " + tailName); //$NON-NLS-1$
+		// read head region name
+		String headName = in.readUTF();
+		Region head = digraph.getRegion(headName);
+		if (head == null)
+			throw new IOException("Could not find head region: " + headName); //$NON-NLS-1$
+		// read the sharing policy
+		RegionFilterBuilder builder = digraph.createRegionFilterBuilder();
+		// read the number of name spaces
+		int numSpaces = in.readInt();
+		// read each name space policy
+		for (int i = 0; i < numSpaces; i++) {
+			// read the name space name
+			String namespace = in.readUTF();
+			// read the number of filters
+			int numFilters = in.readInt();
+			for (int j = 0; j < numFilters; j++) {
+				String filter = in.readUTF();
+				builder.allow(namespace, filter);
+			}
+		}
+		digraph.connect(tail, builder.build(), head);
+	}
+
+	/** 
+	 * {@inheritDoc}
+	 */
+	public RegionDigraph load(InputStream input) throws IOException {
+		try {
+			return readRegionDigraph(new DataInputStream(input), null, null);
+		} catch (InvalidSyntaxException e) {
+			// This should never happen since the filters were valid on save
+			// propagate as IllegalStateException
+			throw new IllegalStateException("Internal error reading a filter", e); //$NON-NLS-1$
+		} catch (BundleException e) {
+			// This should never happen since the digraph was valid on save
+			// propagate as IllegalStateException
+			throw new IllegalStateException("Internal error creating the digraph", e); //$NON-NLS-1$
+		}
+	}
+
+	/** 
+	 * {@inheritDoc}
+	 */
+	public void save(RegionDigraph digraph, OutputStream output) throws IOException {
+		writeRegionDigraph(new DataOutputStream(output), digraph);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilter.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilter.java
new file mode 100644
index 0000000..16e7aba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilter.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import java.util.*;
+import org.eclipse.equinox.region.RegionFilter;
+import org.osgi.framework.*;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRevision;
+
+final class StandardRegionFilter implements RegionFilter {
+	private static final String BUNDLE_ID_ATTR = "id"; //$NON-NLS-1$
+	private final Map<String, Collection<Filter>> filters;
+
+	StandardRegionFilter(Map<String, Collection<Filter>> filters) {
+		if (filters == null) {
+			throw new IllegalArgumentException("filters must not be null."); //$NON-NLS-1$
+		}
+		// must perform deep copy to avoid external changes
+		this.filters = new HashMap<String, Collection<Filter>>((int) ((filters.size() / 0.75) + 1));
+		for (Map.Entry<String, Collection<Filter>> namespace : filters.entrySet()) {
+			Collection<Filter> namespaceFilters = new ArrayList<Filter>(namespace.getValue());
+			this.filters.put(namespace.getKey(), namespaceFilters);
+		}
+	}
+
+	/**
+	 * Determines whether this filter allows the given bundle
+	 * 
+	 * @param bundle the bundle
+	 * @return <code>true</code> if the bundle is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(Bundle bundle) {
+		HashMap<String, Object> attrs = new HashMap<String, Object>(3);
+		String bsn = bundle.getSymbolicName();
+		if (bsn != null)
+			attrs.put(VISIBLE_BUNDLE_NAMESPACE, bsn);
+		attrs.put(org.osgi.framework.Constants.BUNDLE_VERSION_ATTRIBUTE, bundle.getVersion());
+		attrs.put(BUNDLE_ID_ATTR, bundle.getBundleId());
+		return isBundleAllowed(attrs);
+	}
+
+	/**
+	 * Determines whether this filter allows the given bundle
+	 * 
+	 * @param bundle the bundle revision
+	 * @return <code>true</code> if the bundle is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(BundleRevision bundle) {
+		HashMap<String, Object> attrs = new HashMap<String, Object>(3);
+		String bsn = bundle.getSymbolicName();
+		if (bsn != null)
+			attrs.put(VISIBLE_BUNDLE_NAMESPACE, bsn);
+		attrs.put(org.osgi.framework.Constants.BUNDLE_VERSION_ATTRIBUTE, bundle.getVersion());
+		attrs.put(BUNDLE_ID_ATTR, getBundleId(bundle));
+		return isBundleAllowed(attrs);
+	}
+
+	/**
+	 * Determines whether this filter allows the bundle with the given attributes
+	 * 
+	 * @param bundleAttributes the bundle attributes
+	 * @return <code>true</code> if the bundle is allowed and <code>false</code>otherwise
+	 */
+	private boolean isBundleAllowed(Map<String, ?> bundleAttributes) {
+		if (match(filters.get(VISIBLE_BUNDLE_NAMESPACE), bundleAttributes))
+			return true;
+		return match(filters.get(VISIBLE_ALL_NAMESPACE), bundleAttributes);
+	}
+
+	private static boolean match(Collection<Filter> filters, Map<String, ?> attrs) {
+		if (filters == null)
+			return false;
+		for (Filter filter : filters) {
+			if (filter.matches(attrs))
+				return true;
+		}
+		return false;
+	}
+
+	private static boolean match(Collection<Filter> filters, ServiceReference<?> service) {
+		if (filters == null)
+			return false;
+		for (Filter filter : filters) {
+			if (filter.match(service))
+				return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Determines whether this filter allows the given service reference.
+	 * 
+	 * @param service the service reference of the service
+	 * @return <code>true</code> if the service is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(ServiceReference<?> service) {
+		if (match(filters.get(VISIBLE_SERVICE_NAMESPACE), service))
+			return true;
+		return match(filters.get(VISIBLE_ALL_NAMESPACE), service);
+	}
+
+	/**
+	 * Determines whether this filter allows the given capability.
+	 * 
+	 * @param capability the bundle capability
+	 * @return <code>true</code> if the capability is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(BundleCapability capability) {
+		String namespace = capability.getNamespace();
+		Map<String, ?> attrs = capability.getAttributes();
+		if (match(filters.get(namespace), attrs))
+			return true;
+		return match(filters.get(VISIBLE_ALL_NAMESPACE), attrs);
+	}
+
+	public Map<String, Collection<String>> getSharingPolicy() {
+		Map<String, Collection<String>> result = new HashMap<String, Collection<String>>((int) ((filters.size() / 0.75) + 1));
+		for (Map.Entry<String, Collection<Filter>> namespace : filters.entrySet()) {
+			result.put(namespace.getKey(), getFilters(namespace.getValue()));
+		}
+		return result;
+	}
+
+	private static Collection<String> getFilters(Collection<Filter> filters) {
+		Collection<String> result = new ArrayList<String>(filters.size());
+		for (Filter filter : filters) {
+			result.add(filter.toString());
+		}
+		return result;
+	}
+
+	public String toString() {
+		return getSharingPolicy().toString();
+	}
+
+	private Long getBundleId(BundleRevision bundleRevision) {
+		return EquinoxStateHelper.getBundleId(bundleRevision);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java
new file mode 100644
index 0000000..2e28f7c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import org.eclipse.equinox.region.RegionFilter;
+import org.eclipse.equinox.region.RegionFilterBuilder;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+
+final class StandardRegionFilterBuilder implements RegionFilterBuilder {
+
+	private final static String ALL_SPEC = "(|(!(all=*))(all=*))"; //$NON-NLS-1$
+
+	private final static Filter ALL;
+	static {
+		try {
+			ALL = FrameworkUtil.createFilter(ALL_SPEC);
+		} catch (InvalidSyntaxException e) {
+			// should never happen!
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+	}
+
+	private final Object monitor = new Object();
+
+	private final Map<String, Collection<Filter>> policy = new HashMap<String, Collection<Filter>>();
+
+	public RegionFilterBuilder allow(String namespace, String filter) throws InvalidSyntaxException {
+		if (namespace == null)
+			throw new IllegalArgumentException("The namespace must not be null."); //$NON-NLS-1$
+		if (filter == null)
+			throw new IllegalArgumentException("The filter must not be null."); //$NON-NLS-1$
+		synchronized (this.monitor) {
+			Collection<Filter> namespaceFilters = policy.get(namespace);
+			if (namespaceFilters == null) {
+				namespaceFilters = new ArrayList<Filter>();
+				policy.put(namespace, namespaceFilters);
+			}
+			// TODO need to use BundleContext.createFilter here
+			namespaceFilters.add(FrameworkUtil.createFilter(filter));
+		}
+		return this;
+	}
+
+	public RegionFilterBuilder allowAll(String namespace) {
+		if (namespace == null)
+			throw new IllegalArgumentException("The namespace must not be null."); //$NON-NLS-1$
+		synchronized (this.monitor) {
+			Collection<Filter> namespaceFilters = policy.get(namespace);
+			if (namespaceFilters == null) {
+				namespaceFilters = new ArrayList<Filter>();
+				policy.put(namespace, namespaceFilters);
+			}
+			// remove any other filters since this will override them all.
+			namespaceFilters.clear();
+			namespaceFilters.add(ALL);
+		}
+		return this;
+	}
+
+	public RegionFilter build() {
+		synchronized (this.monitor) {
+			return new StandardRegionFilter(policy);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/SubgraphTraverser.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/SubgraphTraverser.java
new file mode 100644
index 0000000..9934e4c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/SubgraphTraverser.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SpringSource, a division of VMware - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region;
+
+import org.eclipse.equinox.region.Region;
+import org.eclipse.equinox.region.RegionDigraphVisitor;
+import org.eclipse.equinox.region.RegionDigraph.FilteredRegion;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * {@link SubgraphTraverser} is a utility for traversing a subgraph of a {@link RegionDigraph} calling a
+ * {@link RegionDigraphVisitor} on the way.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+final class SubgraphTraverser {
+
+	void visitSubgraph(Region startingRegion, RegionDigraphVisitor visitor) {
+		visitRemainingSubgraph(startingRegion, visitor, new HashSet<Region>());
+	}
+
+	private void visitRemainingSubgraph(Region r, RegionDigraphVisitor visitor, Set<Region> path) {
+		if (!path.contains(r)) {
+			if (visitor.visit(r)) {
+				traverseEdges(r, visitor, path);
+			}
+		}
+	}
+
+	private void traverseEdges(Region r, RegionDigraphVisitor visitor, Set<Region> path) {
+		for (FilteredRegion fr : r.getEdges()) {
+			if (visitor.preEdgeTraverse(fr.getFilter())) {
+				try {
+					visitRemainingSubgraph(fr.getRegion(), visitor, extendPath(r, path));
+				} finally {
+					visitor.postEdgeTraverse(fr.getFilter());
+				}
+			}
+		}
+	}
+
+	private Set<Region> extendPath(Region r, Set<Region> path) {
+		Set<Region> newPath = new HashSet<Region>(path);
+		newPath.add(r);
+		return newPath;
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionBundleEventHook.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionBundleEventHook.java
new file mode 100644
index 0000000..d9b3476
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionBundleEventHook.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.hook;
+
+import java.util.*;
+import org.eclipse.equinox.region.Region;
+import org.eclipse.equinox.region.RegionDigraph;
+import org.osgi.framework.*;
+import org.osgi.framework.hooks.bundle.EventHook;
+import org.osgi.framework.hooks.bundle.FindHook;
+
+/**
+ * {@link RegionBundleEventHook} manages the visibility of bundle events across regions according to the
+ * {@link RegionDigraph}.
+ * <p>
+ * The current implementation delegates to {@link RegionBundleFindHook}. This is likely to perform adequately because of
+ * the low frequency of bundle events and the typically small number of bundle listeners.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+public final class RegionBundleEventHook implements EventHook {
+
+	private final RegionDigraph regionDigraph;
+
+	private final FindHook bundleFindHook;
+
+	private final ThreadLocal<Region> threadLocal;
+
+	public RegionBundleEventHook(RegionDigraph regionDigraph, FindHook bundleFindBook, ThreadLocal<Region> threadLocal) {
+		this.regionDigraph = regionDigraph;
+		this.bundleFindHook = bundleFindBook;
+		this.threadLocal = threadLocal;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void event(BundleEvent event, Collection<BundleContext> contexts) {
+		Bundle eventBundle = event.getBundle();
+		if (event.getType() == BundleEvent.INSTALLED) {
+			bundleInstalled(eventBundle, event.getOrigin());
+		}
+		Iterator<BundleContext> i = contexts.iterator();
+		while (i.hasNext()) {
+			if (!find(i.next(), eventBundle)) {
+				i.remove();
+			}
+		}
+		if (event.getType() == BundleEvent.UNINSTALLED) {
+			bundleUninstalled(eventBundle);
+		}
+	}
+
+	private boolean find(BundleContext finderBundleContext, Bundle candidateBundle) {
+		Collection<Bundle> candidates = new ArrayList<Bundle>(1);
+		candidates.add(candidateBundle);
+		this.bundleFindHook.find(finderBundleContext, candidates);
+		return !candidates.isEmpty();
+	}
+
+	private void bundleInstalled(Bundle eventBundle, Bundle originBundle) {
+		/*
+		 * BundleIdBasedRegion sets thread local to install bundles into arbitrary regions. If this is not set, the
+		 * bundle inherits the region of the origin bundle.
+		 */
+		Region installRegion = this.threadLocal.get();
+		if (installRegion != null) {
+			try {
+				installRegion.addBundle(eventBundle);
+			} catch (BundleException e) {
+				e.printStackTrace();
+				throw new RuntimeException("Bundle could not be added to region", e); //$NON-NLS-1$
+			}
+		} else {
+			Region originRegion = this.regionDigraph.getRegion(originBundle);
+			if (originRegion != null) {
+				try {
+					originRegion.addBundle(eventBundle);
+				} catch (BundleException e) {
+					e.printStackTrace();
+					throw new RuntimeException("Bundle could not be added to region", e); //$NON-NLS-1$
+				}
+			}
+		}
+	}
+
+	private void bundleUninstalled(Bundle eventBundle) {
+		Region region = this.regionDigraph.getRegion(eventBundle);
+		if (region != null) {
+			region.removeBundle(eventBundle);
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionBundleFindHook.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionBundleFindHook.java
new file mode 100644
index 0000000..3d09e62
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionBundleFindHook.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.hook;
+
+import java.util.Collection;
+import org.eclipse.equinox.region.*;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.hooks.bundle.FindHook;
+
+/**
+ * {@link RegionBundleFindHook} manages the visibility of bundles across regions according to the {@link RegionDigraph}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+public final class RegionBundleFindHook implements FindHook {
+
+	private final RegionDigraph regionDigraph;
+
+	private final long hookImplID;
+
+	public RegionBundleFindHook(RegionDigraph regionDigraph, long hookImplID) {
+		this.regionDigraph = regionDigraph;
+		this.hookImplID = hookImplID;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void find(BundleContext context, Collection<Bundle> bundles) {
+		long bundleID = context.getBundle().getBundleId();
+
+		if (bundleID == 0 || bundleID == hookImplID) {
+			// The system bundle and the hook impl bundle can see all bundles
+			return;
+		}
+
+		Region finderRegion = getRegion(context);
+		if (finderRegion == null) {
+			bundles.clear();
+			return;
+		}
+
+		Visitor visitor = new Visitor(bundles);
+		finderRegion.visitSubgraph(visitor);
+		Collection<Bundle> allowed = visitor.getAllowed();
+
+		bundles.retainAll(allowed);
+	}
+
+	class Visitor extends RegionDigraphVisitorBase<Bundle> {
+
+		Visitor(Collection<Bundle> candidates) {
+			super(candidates);
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		protected boolean contains(Region region, Bundle candidate) {
+			return region.contains(candidate);
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		protected boolean isAllowed(Bundle candidate, RegionFilter filter) {
+			return filter.isAllowed(candidate);
+		}
+
+	}
+
+	private Region getRegion(BundleContext context) {
+		return this.regionDigraph.getRegion(context.getBundle());
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionDigraphVisitorBase.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionDigraphVisitorBase.java
new file mode 100644
index 0000000..d9f94d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionDigraphVisitorBase.java
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SpringSource, a division of VMware - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.hook;
+
+import java.util.*;
+import org.eclipse.equinox.region.*;
+
+/**
+ * {@link RegionDigraphVisitorBase} is an abstract base class for {@link RegionDigraphVisitor} implementations in the
+ * framework hooks.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * This class is thread safe.
+ */
+abstract class RegionDigraphVisitorBase<C> implements RegionDigraphVisitor {
+
+	private final Collection<C> allCandidates;
+
+	private final Stack<Set<C>> allowedStack = new Stack<Set<C>>();
+	private final Stack<Collection<C>> filteredStack = new Stack<Collection<C>>();
+
+	private Object monitor = new Object();
+
+	private Set<C> allowed;
+
+	protected RegionDigraphVisitorBase(Collection<C> candidates) {
+		this.allCandidates = candidates;
+		synchronized (this.monitor) {
+			this.allowed = new HashSet<C>();
+		}
+	}
+
+	Collection<C> getAllowed() {
+		synchronized (this.monitor) {
+			return this.allowed;
+		}
+	}
+
+	private void allow(C candidate) {
+		synchronized (this.monitor) {
+			this.allowed.add(candidate);
+		}
+	}
+
+	private void allow(Collection<C> candidates) {
+		synchronized (this.monitor) {
+			this.allowed.addAll(candidates);
+		}
+	}
+
+	private void pushAllowed() {
+		synchronized (this.monitor) {
+			this.allowedStack.push(this.allowed);
+			this.allowed = new HashSet<C>();
+		}
+	}
+
+	private Collection<C> popAllowed() {
+		synchronized (this.monitor) {
+			Collection<C> a = this.allowed;
+			this.allowed = this.allowedStack.pop();
+			return a;
+		}
+	}
+
+	private void pushFiltered(Collection<C> filtered) {
+		synchronized (this.monitor) {
+			this.filteredStack.push(filtered);
+		}
+	}
+
+	private Collection<C> popFiltered() {
+		synchronized (this.monitor) {
+			return this.filteredStack.isEmpty() ? allCandidates : this.filteredStack.pop();
+		}
+	}
+
+	private Collection<C> peekFiltered() {
+		synchronized (this.monitor) {
+			return this.filteredStack.isEmpty() ? allCandidates : this.filteredStack.peek();
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean visit(Region region) {
+		Collection<C> candidates = peekFiltered();
+		for (C candidate : candidates) {
+			if (contains(region, candidate)) {
+				allow(candidate);
+			}
+		}
+		if (allowed.containsAll(candidates)) {
+			// there is no need to traverse edges of this region,
+			// it contains all the remaining filtered candidates
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Determines whether the given region contains the given candidate.
+	 * 
+	 * @param region the {@link Region}
+	 * @param candidate the candidate
+	 * @return <code>true</code> if and only if the given region contains the given candidate
+	 */
+	protected abstract boolean contains(Region region, C candidate);
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean preEdgeTraverse(RegionFilter regionFilter) {
+		// Find the candidates filtered by the previous edge
+		Collection<C> candidates = new ArrayList<C>(peekFiltered());
+		// remove any candidates contained in the current region
+		candidates.removeAll(allowed);
+		// apply the filter across remaining candidates
+		filter(candidates, regionFilter);
+		if (candidates.isEmpty())
+			return false; // this filter does not apply; avoid traversing this edge
+		// push the filtered candidates for the next region
+		pushFiltered(candidates);
+		// push the allowed
+		pushAllowed();
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void postEdgeTraverse(RegionFilter regionFilter) {
+		popFiltered();
+		Collection<C> candidates = popAllowed();
+		allow(candidates);
+	}
+
+	private void filter(Collection<C> candidates, RegionFilter filter) {
+		Iterator<C> i = candidates.iterator();
+		while (i.hasNext()) {
+			C candidate = i.next();
+			if (!isAllowed(candidate, filter)) {
+				i.remove();
+			}
+		}
+	}
+
+	/**
+	 * Determines whether the given candidate is allowed by the given {@link RegionFilter}.
+	 * 
+	 * @param candidate the candidate
+	 * @param filter the filter
+	 * @return <code>true</code> if and only if the given candidate is allowed by the given filter
+	 */
+	protected abstract boolean isAllowed(C candidate, RegionFilter filter);
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionResolverHook.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionResolverHook.java
new file mode 100644
index 0000000..5435aa1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionResolverHook.java
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.hook;
+
+import java.util.Collection;
+import java.util.Iterator;
+import org.eclipse.equinox.internal.region.EquinoxStateHelper;
+import org.eclipse.equinox.region.*;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.hooks.resolver.ResolverHook;
+import org.osgi.framework.wiring.*;
+
+/**
+ * {@link RegionResolverHook} manages the visibility of bundles across regions according to the {@link RegionDigraph}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+final class RegionResolverHook implements ResolverHook {
+
+	private static final Boolean DEBUG = false;
+
+	private final RegionDigraph regionDigraph;
+
+	RegionResolverHook(RegionDigraph regionDigraph) {
+		this.regionDigraph = regionDigraph;
+	}
+
+	@Override
+	public void filterMatches(BundleRequirement requirement, Collection<BundleCapability> candidates) {
+		filterCandidates(requirement.getRevision(), candidates, false);
+	}
+
+	private void filterCandidates(BundleRevision requirer, Collection<BundleCapability> candidates, boolean singleton) {
+		try {
+			if (DEBUG) {
+				debugEntry(requirer, candidates, singleton);
+			}
+
+			if (getBundleId(requirer) == 0L) {
+				return;
+			}
+
+			Region requirerRegion = getRegion(requirer);
+			if (requirerRegion == null) {
+				// for singleton check; keep all collisions
+				if (!singleton) {
+					candidates.clear();
+				}
+				return;
+			}
+
+			Visitor visitor = new Visitor(candidates);
+			requirerRegion.visitSubgraph(visitor);
+			Collection<BundleCapability> allowed = visitor.getAllowed();
+
+			candidates.retainAll(allowed);
+		} finally {
+			if (DEBUG) {
+				debugExit(requirer, candidates);
+			}
+		}
+	}
+
+	class Visitor extends RegionDigraphVisitorBase<BundleCapability> {
+
+		Visitor(Collection<BundleCapability> candidates) {
+			super(candidates);
+		}
+
+		@Override
+		protected boolean contains(Region region, BundleCapability candidate) {
+			return region.equals(getRegion(candidate.getRevision()));
+		}
+
+		@Override
+		protected boolean isAllowed(BundleCapability candidate, RegionFilter filter) {
+			return filter.isAllowed(candidate) || filter.isAllowed(candidate.getRevision());
+		}
+
+	}
+
+	Region getRegion(BundleRevision bundleRevision) {
+		Bundle bundle = bundleRevision.getBundle();
+		if (bundle != null) {
+			return getRegion(bundle);
+		}
+		Long bundleId = getBundleId(bundleRevision);
+		return getRegion(bundleId);
+	}
+
+	private Region getRegion(Long bundleId) {
+		return this.regionDigraph.getRegion(bundleId);
+	}
+
+	private Long getBundleId(BundleRevision bundleRevision) {
+		return EquinoxStateHelper.getBundleId(bundleRevision);
+	}
+
+	private Region getRegion(Bundle bundle) {
+		return this.regionDigraph.getRegion(bundle);
+	}
+
+	@Override
+	public void end() {
+		// do nothing
+	}
+
+	@Override
+	public void filterResolvable(Collection<BundleRevision> candidates) {
+		// do nothing
+		// may want to consider only allowing candidates contained in the region of the trigger revisions?
+	}
+
+	@Override
+	public void filterSingletonCollisions(BundleCapability singleton, Collection<BundleCapability> collisionCandidates) {
+		filterCandidates(singleton.getRevision(), collisionCandidates, true);
+	}
+
+	private void debugEntry(BundleRevision requirer, Collection<BundleCapability> candidates, boolean singleton) {
+		System.out.println((singleton ? "Singleton" : "Requirer: ") + requirer.getSymbolicName() + "_" + requirer.getVersion() + "[" + getBundleId(requirer) + "]"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		System.out.println("  Candidates: "); //$NON-NLS-1$
+		Iterator<BundleCapability> i = candidates.iterator();
+		while (i.hasNext()) {
+			BundleCapability c = i.next();
+			String namespace = c.getNamespace();
+			if (BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) {
+				BundleRevision providerRevision = c.getRevision();
+				String pkg = (String) c.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE);
+				System.out.println("    Package " + pkg + " from provider " + providerRevision.getSymbolicName() + "_" + providerRevision.getVersion() + "[" + getBundleId(providerRevision) + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+				if (pkg.equals("slow")) { //$NON-NLS-1$
+					System.out.println(">>> put breakpoint here <<<"); //$NON-NLS-1$
+				}
+			} else {
+				BundleRevision providerRevision = c.getRevision();
+				System.out.println("    Bundle from provider " + providerRevision.getSymbolicName() + "_" + providerRevision.getVersion() + "[" + getBundleId(providerRevision) + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			}
+		}
+	}
+
+	private void debugExit(BundleRevision requirer, Collection<BundleCapability> candidates) {
+		System.out.println("  Filtered candidates: "); //$NON-NLS-1$
+		Iterator<BundleCapability> i = candidates.iterator();
+		while (i.hasNext()) {
+			BundleCapability c = i.next();
+			String namespace = c.getNamespace();
+			if (BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) {
+				BundleRevision providerRevision = c.getRevision();
+				String pkg = (String) c.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE);
+				System.out.println("    Package " + pkg + " from provider " + providerRevision.getSymbolicName() + "_" + providerRevision.getVersion() + "[" + getBundleId(providerRevision) + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+				if (pkg.equals("slow")) { //$NON-NLS-1$
+					System.out.println(">>> put breakpoint here <<<"); //$NON-NLS-1$
+				}
+			} else {
+				BundleRevision providerRevision = c.getRevision();
+				System.out.println("    Bundle from provider " + providerRevision.getSymbolicName() + "_" + providerRevision.getVersion() + "[" + getBundleId(providerRevision) + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			}
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionResolverHookFactory.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionResolverHookFactory.java
new file mode 100644
index 0000000..5cbe9bc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionResolverHookFactory.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SpringSource, a division of VMware - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.hook;
+
+import org.eclipse.equinox.region.RegionDigraph;
+
+import java.util.Collection;
+
+import org.osgi.framework.hooks.resolver.ResolverHook;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+import org.osgi.framework.wiring.BundleRevision;
+
+/**
+ * {@link RegionResolverHook} constructs an instance of {@link RegionResolverHook} for a particular resolution
+ * operation.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Thread safe.
+ */
+public final class RegionResolverHookFactory implements ResolverHookFactory {
+
+	private final RegionDigraph regionDigraph;
+
+	public RegionResolverHookFactory(RegionDigraph regionDigraph) {
+		this.regionDigraph = regionDigraph;
+	}
+
+	public ResolverHook begin(Collection<BundleRevision> triggers) {
+		return new RegionResolverHook(this.regionDigraph);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionServiceEventHook.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionServiceEventHook.java
new file mode 100644
index 0000000..7dc742e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionServiceEventHook.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.hook;
+
+import java.util.*;
+import org.eclipse.equinox.region.RegionDigraph;
+import org.osgi.framework.*;
+import org.osgi.framework.hooks.service.EventHook;
+import org.osgi.framework.hooks.service.FindHook;
+
+/**
+ * {@link RegionServiceEventHook} manages the visibility of service events across regions according to the
+ * {@link RegionDigraph}.
+ * <p>
+ * The current implementation delegates to {@link RegionServiceFindHook}. This is likely to perform adequately because
+ * of the relatively low frequency (compared to service lookups) of service events and the typically small number of
+ * service listeners.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+ at SuppressWarnings("deprecation")
+public final class RegionServiceEventHook implements EventHook {
+
+	private final FindHook serviceFindHook;
+
+	public RegionServiceEventHook(FindHook bundleFindBook) {
+		this.serviceFindHook = bundleFindBook;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void event(ServiceEvent event, Collection<BundleContext> contexts) {
+		ServiceReference<?> eventBundle = event.getServiceReference();
+		Iterator<BundleContext> i = contexts.iterator();
+		while (i.hasNext()) {
+			if (!find(i.next(), eventBundle)) {
+				i.remove();
+			}
+		}
+	}
+
+	private boolean find(BundleContext finderBundleContext, ServiceReference<?> candidateServiceReference) {
+		Collection<ServiceReference<?>> candidates = new ArrayList<ServiceReference<?>>();
+		candidates.add(candidateServiceReference);
+		this.serviceFindHook.find(finderBundleContext, "", "", false, candidates); //$NON-NLS-1$ //$NON-NLS-2$
+		return !candidates.isEmpty();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionServiceFindHook.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionServiceFindHook.java
new file mode 100644
index 0000000..2eb7ea9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/hook/RegionServiceFindHook.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.hook;
+
+import java.util.Collection;
+import org.eclipse.equinox.region.*;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.hooks.service.FindHook;
+
+/**
+ * {@link RegionServiceFindHook} manages the visibility of services across regions according to the
+ * {@link RegionDigraph}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+public final class RegionServiceFindHook implements FindHook {
+
+	private final RegionDigraph regionDigraph;
+
+	public RegionServiceFindHook(RegionDigraph regionDigraph) {
+		this.regionDigraph = regionDigraph;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public void find(BundleContext context, String name, String filter, boolean allServices, Collection<ServiceReference<?>> references) {
+		if (context.getBundle().getBundleId() == 0L) {
+			return;
+		}
+
+		Region finderRegion = getRegion(context);
+		if (finderRegion == null) {
+			references.clear();
+			return;
+		}
+
+		Visitor visitor = new Visitor(references);
+		finderRegion.visitSubgraph(visitor);
+		Collection<ServiceReference<?>> allowed = visitor.getAllowed();
+
+		references.retainAll(allowed);
+	}
+
+	class Visitor extends RegionDigraphVisitorBase<ServiceReference<?>> {
+
+		Visitor(Collection<ServiceReference<?>> candidates) {
+			super(candidates);
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		protected boolean contains(Region region, ServiceReference<?> candidate) {
+			return region.contains(candidate.getBundle());
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		protected boolean isAllowed(ServiceReference<?> candidate, RegionFilter filter) {
+			return filter.isAllowed(candidate) || filter.isAllowed(candidate.getBundle());
+		}
+
+	}
+
+	private Region getRegion(BundleContext context) {
+		return this.regionDigraph.getRegion(context.getBundle());
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/RegionObjectNameCreator.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/RegionObjectNameCreator.java
new file mode 100644
index 0000000..09fb6af
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/RegionObjectNameCreator.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.management;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import org.eclipse.equinox.region.management.ManageableRegion;
+
+/**
+ * {@link RegionObjectNameCreator} is responsible for creating {@link ObjectName}s for {@link ManageableRegion}s.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+final class RegionObjectNameCreator {
+
+	private final String domain;
+	private final String frameworkUUID;
+
+	RegionObjectNameCreator(String domain, String frameworkUUID) {
+		this.domain = domain;
+		this.frameworkUUID = frameworkUUID;
+	}
+
+	ObjectName getRegionObjectName(String regionName) {
+		try {
+			String name = this.domain + ":type=Region,name=" + regionName; //$NON-NLS-1$
+			if (frameworkUUID != null)
+				name += ",frameworkUUID=" + frameworkUUID; //$NON-NLS-1$
+			return new ObjectName(name);
+		} catch (MalformedObjectNameException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/StandardManageableRegion.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/StandardManageableRegion.java
new file mode 100644
index 0000000..b941aae
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/StandardManageableRegion.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.management;
+
+import org.eclipse.equinox.region.Region;
+import org.eclipse.equinox.region.RegionDigraph;
+import org.eclipse.equinox.region.RegionDigraph.FilteredRegion;
+import org.eclipse.equinox.region.management.ManageableRegion;
+import org.eclipse.equinox.region.management.ManageableRegionDigraph;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * {@link StandardManageableRegion} is the default implementation of {@link ManageableRegion}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+public class StandardManageableRegion implements ManageableRegion {
+
+	private final Region region;
+
+	private final ManageableRegionDigraph manageableRegionDigraph;
+
+	private final RegionDigraph regionDigraph;
+
+	public StandardManageableRegion(Region region, ManageableRegionDigraph manageableRegionDigraph, RegionDigraph regionDigraph) {
+		this.region = region;
+		this.manageableRegionDigraph = manageableRegionDigraph;
+		this.regionDigraph = regionDigraph;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public String getName() {
+		return region.getName();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public ManageableRegion[] getDependencies() {
+		Set<FilteredRegion> edges = this.regionDigraph.getEdges(this.region);
+		List<ManageableRegion> dependencies = new ArrayList<ManageableRegion>();
+		for (FilteredRegion edge : edges) {
+			ManageableRegion manageableRegion = this.manageableRegionDigraph.getRegion(edge.getRegion().getName());
+			if (manageableRegion != null) {
+				dependencies.add(manageableRegion);
+			}
+		}
+		return dependencies.toArray(new ManageableRegion[dependencies.size()]);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public long[] getBundleIds() {
+		Set<Long> bundleIds = this.region.getBundleIds();
+		long[] result = new long[bundleIds.size()];
+		int i = 0;
+		for (Long bundleId : bundleIds) {
+			result[i++] = bundleId;
+		}
+		return result;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/StandardManageableRegionDigraph.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/StandardManageableRegionDigraph.java
new file mode 100644
index 0000000..f399952
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/management/StandardManageableRegionDigraph.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.internal.region.management;
+
+import java.lang.management.ManagementFactory;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.management.*;
+import org.eclipse.equinox.internal.region.RegionLifecycleListener;
+import org.eclipse.equinox.region.Region;
+import org.eclipse.equinox.region.RegionDigraph;
+import org.eclipse.equinox.region.management.ManageableRegion;
+import org.eclipse.equinox.region.management.ManageableRegionDigraph;
+import org.osgi.framework.*;
+
+/**
+ * {@link StandardManageableRegionDigraph} is a {@link ManageableRegionDigraph} that delegates to the
+ * {@link RegionDigraph}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+public final class StandardManageableRegionDigraph implements ManageableRegionDigraph {
+
+	private final RegionDigraph regionDigraph;
+
+	private final String domain;
+
+	private final RegionObjectNameCreator regionObjectNameCreator;
+
+	private final Map<String, ManageableRegion> manageableRegions = new ConcurrentHashMap<String, ManageableRegion>();
+
+	private final BundleContext bundleContext;
+
+	private final Object monitor = new Object();
+
+	private final MBeanServer mbeanServer;
+
+	private final ObjectName mbeanName;
+
+	private ServiceRegistration<RegionLifecycleListener> listenerRegistration;
+
+	private final String frameworkUUID;
+
+	private final RegionLifecycleListener regionLifecycleListener = new RegionLifecycleListener() {
+
+		public void regionAdded(Region region) {
+			addRegion(region);
+		}
+
+		public void regionRemoving(Region region) {
+			removeRegion(region);
+		}
+
+	};
+
+	public StandardManageableRegionDigraph(RegionDigraph regionDigraph, String domain, BundleContext bundleContext) {
+		this.regionDigraph = regionDigraph;
+		this.domain = domain;
+		this.bundleContext = bundleContext;
+		this.mbeanServer = ManagementFactory.getPlatformMBeanServer();
+		this.frameworkUUID = bundleContext.getProperty(Constants.FRAMEWORK_UUID);
+		this.regionObjectNameCreator = new RegionObjectNameCreator(domain, this.frameworkUUID);
+		try {
+			String name = this.domain + ":type=RegionDigraph"; //$NON-NLS-1$
+			if (frameworkUUID != null)
+				name += ",frameworkUUID=" + frameworkUUID; //$NON-NLS-1$
+			mbeanName = new ObjectName(name);
+		} catch (MalformedObjectNameException e) {
+			e.printStackTrace();
+			throw new RuntimeException("Invalid domain name '" + this.domain + "'", e); //$NON-NLS-1$//$NON-NLS-2$
+		}
+
+	}
+
+	private void registerRegionLifecycleListener() {
+		synchronized (this.monitor) {
+			listenerRegistration = this.bundleContext.registerService(RegionLifecycleListener.class, regionLifecycleListener, null);
+		}
+	}
+
+	private void unregisterRegionLifecycleListener() {
+		synchronized (this.monitor) {
+			listenerRegistration.unregister();
+		}
+	}
+
+	public void registerMBean() {
+		registerRegionLifecycleListener();
+		synchronized (this.monitor) {
+			// The following alien call is unavoidable to ensure consistency.
+			Set<Region> regions = this.regionDigraph.getRegions();
+			for (Region region : regions) {
+				addRegion(region);
+			}
+		}
+
+		safelyRegisterMBean(this, mbeanName);
+	}
+
+	public void unregisterMbean() {
+		unregisterRegionLifecycleListener();
+		Collection<String> currentRegionNames;
+		synchronized (this.monitor) {
+			currentRegionNames = new ArrayList<String>(this.manageableRegions.keySet());
+		}
+		for (String regionName : currentRegionNames) {
+			removeRegion(regionName);
+		}
+		try {
+			this.mbeanServer.unregisterMBean(this.mbeanName);
+		} catch (MBeanRegistrationException e) {
+			e.printStackTrace();
+			throw new RuntimeException("Problem unregistering mbean", e); //$NON-NLS-1$
+		} catch (InstanceNotFoundException e) {
+			// Something else unregistered the bean
+		}
+	}
+
+	private void safelyRegisterMBean(Object mbean, ObjectName name) {
+		try {
+			try {
+				this.mbeanServer.registerMBean(mbean, name);
+			} catch (InstanceAlreadyExistsException e) {
+				// Recover as this happens when a JVM is reused.
+				this.mbeanServer.unregisterMBean(name);
+				this.mbeanServer.registerMBean(mbean, name);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw new RuntimeException("MBean registration failed", e); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public ManageableRegion[] getRegions() {
+		List<ManageableRegion> regions = new ArrayList<ManageableRegion>();
+		synchronized (this.monitor) {
+			for (ManageableRegion manageableRegion : this.manageableRegions.values()) {
+				regions.add(manageableRegion);
+			}
+		}
+		return regions.toArray(new ManageableRegion[regions.size()]);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public ManageableRegion getRegion(String regionName) {
+		return this.manageableRegions.get(regionName);
+	}
+
+	void addRegion(Region region) {
+		StandardManageableRegion manageableRegion = new StandardManageableRegion(region, this, this.regionDigraph);
+		safelyRegisterMBean(manageableRegion, this.regionObjectNameCreator.getRegionObjectName(region.getName()));
+		synchronized (this.monitor) {
+			this.manageableRegions.put(region.getName(), manageableRegion);
+		}
+	}
+
+	void removeRegion(Region region) {
+		removeRegion(region.getName());
+	}
+
+	private void removeRegion(String regionName) {
+		synchronized (this.monitor) {
+			this.manageableRegions.remove(regionName);
+		}
+		try {
+			this.mbeanServer.unregisterMBean(this.regionObjectNameCreator.getRegionObjectName(regionName));
+		} catch (MBeanRegistrationException e) {
+			e.printStackTrace();
+			throw new RuntimeException("Problem unregistering mbean", e); //$NON-NLS-1$
+		} catch (InstanceNotFoundException e) {
+			// Something else unregistered the bean
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/Region.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/Region.java
new file mode 100644
index 0000000..c9d17d6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/Region.java
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.region;
+
+import java.io.InputStream;
+import java.util.Set;
+import org.eclipse.equinox.region.RegionDigraph.FilteredRegion;
+import org.osgi.framework.*;
+
+/**
+ * A <i>region</i> is a subset of the bundles of an OSGi framework. A regions is "weakly" isolated from other regions
+ * except that is has full visibility of certain (subject to a {@link RegionFilter}) bundles, packages, and services
+ * from other regions to which it is connected. However a bundle running in a region is not protected from discovering
+ * bundles in other regions, e.g. by following wires using Wire Admin or similar services, so this is why regions are
+ * only weakly isolated from each other.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Implementations must be thread safe.
+ * 
+ */
+public interface Region {
+
+	/**
+	 * Returns the name of the region.
+	 * 
+	 * @return the region name
+	 */
+	String getName();
+
+	/**
+	 * Associates a given bundle, which has therefore already been installed, with this region.
+	 * <p>
+	 * This method is typically used to associate the system bundle with a region. Note that the system bundle is not
+	 * treated specially and in order to be fully visible in a region, it must either be associated with the region or
+	 * imported from another region via a connection.
+	 * <p>
+	 * If the bundle is already associated with this region, takes no action and returns normally.
+	 * <p>
+	 * If the bundle is already associated with another region, throws BundleException with exception type
+	 * INVALID_OPERATION.
+	 *
+	 * @param bundle the bundle to be associated with this region
+	 * @throws BundleException if the bundle cannot be associated with the region
+	 */
+	void addBundle(Bundle bundle) throws BundleException;
+
+	/**
+	 * Associates the given bundle id with this region. If the given bundle id is already associated with this region,
+	 * this is not an error and there is no effect.
+	 * <p>
+	 * If the bundle is already associated with another region, throws BundleException with exception type
+	 * INVALID_OPERATION.
+	 * <p>
+	 * This is useful when manipulating offline resolver states and bundle descriptions which do not correspond to
+	 * bundles.
+	 * 
+	 * @param bundleId the bundle id to be associated with this region
+	 * @throws BundleException if the bundle cannot be associated with the region
+	 */
+	void addBundle(long bundleId) throws BundleException;
+
+	/**
+	 * Installs a bundle and associates the bundle with this region. The bundle's location will have the region name
+	 * appended to the given location to ensure the location is unique across regions.
+	 * 
+	 * @param location the bundle location string
+	 * @param input a stream of the bundle's contents or <code>null</code>
+	 * @return the installed Bundle
+	 * @throws BundleException if the install fails
+	 * @see BundleContext#installBundle(String, InputStream)
+	 */
+	Bundle installBundle(String location, InputStream input) throws BundleException;
+
+	/**
+	 * Installs a bundle and associates the bundle with this region. The bundle's location will have the region name
+	 * appended to the given location to ensure the location is unique across regions.
+	 * 
+	 * @param location the bundle location string
+	 * @return the installed Bundle
+	 * @throws BundleException if the install fails
+	 * @see BundleContext#installBundle(String)
+	 */
+	Bundle installBundle(String location) throws BundleException;
+
+	/**
+	 * 
+	 * Gets the bundle ids of the bundles associated with this region.
+	 * 
+	 * @return a set of bundle ids
+	 */
+	Set<Long> getBundleIds();
+
+	/**
+	 * Returns <code>true</code> if and only if the given bundle belongs to this region.
+	 * 
+	 * @param bundle a {@link Bundle}
+	 * @return <code>true</code> if the given bundle belongs to this region and <code>false</code> otherwise
+	 */
+	boolean contains(Bundle bundle);
+
+	/**
+	 * Returns <code>true</code> if and only if a bundle with the given bundle id belongs to this region.
+	 * 
+	 * @param bundleId a bundle id
+	 * @return <code>true</code> if a bundle with the given bundle id belongs to this region and <code>false</code>
+	 *         otherwise
+	 */
+	boolean contains(long bundleId);
+
+	/**
+	 * Get the bundle in this region with the given symbolic name and version.
+	 * 
+	 * @param symbolicName
+	 * @param version
+	 * @return the bundle or <code>null</code> if there is no such bundle
+	 */
+	Bundle getBundle(String symbolicName, Version version);
+
+	/**
+	 * Connects this region to the given head region and associates the given {@link RegionFilter} with the connection.
+	 * This region may then, subject to the region filter, see bundles, packages, and services visible in the head
+	 * region.
+	 * <p>
+	 * If the filter allows the same bundle symbolic name and version as a bundle already present in this region or a
+	 * filter connecting this region to a region other than the tail region, then BundleException with exception type
+	 * DUPLICATE_BUNDLE_ERROR is thrown.
+	 * <p>
+	 * If the given source region is already connected to the given tail region, then BundleException with exception
+	 * type UNSUPPORTED_OPERATION is thrown.
+	 * 
+	 * @param headRegion the region to connect this region to
+	 * @param filter a {@link RegionFilter} which controls what is visible across the connection
+	 * @throws BundleException if the connection was not created
+	 */
+	void connectRegion(Region headRegion, RegionFilter filter) throws BundleException;
+
+	/**
+	 * Removes the given bundle from this region. If the given bundle does not belong to this region, this is not an
+	 * error and there is no effect.
+	 * 
+	 * @param bundle the bundle to be removed
+	 */
+	void removeBundle(Bundle bundle);
+
+	/**
+	 * Removes the given bundle id from this region. If the given bundle id is not associated with this region, this is
+	 * not an error and there is no effect.
+	 * 
+	 * @param bundleId the bundle id to be removed
+	 */
+	void removeBundle(long bundleId);
+
+	/**
+	 * Gets a {@link Set} containing a snapshot of the {@link FilteredRegion FilteredRegions} attached to this tail
+	 * region.
+	 * 
+	 * @return a {@link Set} of {@link FilteredRegion FilteredRegions} of head regions and region filters
+	 */
+	Set<FilteredRegion> getEdges();
+
+	/**
+	 * Visit the subgraph connected to this region.
+	 * 
+	 * @param visitor a {@link RegionDigraphVisitor} to be called as the subgraph is navigated
+	 */
+	void visitSubgraph(RegionDigraphVisitor visitor);
+
+	/**
+	 * Gets the {@link RegionDigraph} this region belongs to.  This method must never return null,
+	 * even when a region is removed from a digraph.
+	 * @return the digraph this region belongs to
+	 */
+	RegionDigraph getRegionDigraph();
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraph.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraph.java
new file mode 100644
index 0000000..5142223
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraph.java
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SpringSource, a division of VMware - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.equinox.region;
+
+import java.util.Set;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+
+/**
+ * {@link RegionDigraph} is a <a href="http://en.wikipedia.org/wiki/Directed_graph">directed graph</a>, or
+ * <i>digraph</i>, of {@link Region Regions}. The regions form the nodes of the graph and the edges connect regions to
+ * other regions.
+ * <p>
+ * Each edge (r, s) of the digraph is directed from region r, known as the <i>tail</i> of the edge, to region s, known
+ * as the <i>head</i> of the edge.
+ * <p>
+ * Each edge is associated with a {@link RegionFilter}, making the digraph a <i>labelled</i> digraph. The region filter
+ * for edge (r, s) allows region r to see certain bundles, packages, and services visible in region s.
+ * <p>
+ * Although the digraph may contain cycles it does not contain any <i>loops</i> which are edges of the form (r, r) for
+ * some region r. Loopless digraphs are known as <i>simple</i> digraphs. So the digraph is a simple, labelled digraph.
+ * <p>
+ * The region digraph extends <code>Iterable<Region></code> and so a foreach statement may be used to iterate over (a
+ * snapshot of) the regions in the digraph, e.g.
+ * 
+ * <pre>
+ * for (Region r : regionDigraph) {
+ *   ...
+ * }
+ * </pre>
+ * <p>
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Implementations of this interface must be thread safe.
+ * 
+ */
+public interface RegionDigraph extends Iterable<Region> {
+	/**
+	 * A {@link FilteredRegion} represents the head region and the {@link RegionFilter} used 
+	 * in a connection with a tail region.
+	 */
+	public interface FilteredRegion {
+		/**
+		 * The head {@link Region} for which the filter is being applied.
+		 * @return the head region.
+		 */
+		Region getRegion();
+
+		/**
+		 * The {@link RegionFilter} used to determine capabilities which are visible from the
+		 * head region.
+		 * @return the region filter.
+		 */
+		RegionFilter getFilter();
+	}
+
+	/**
+	 * Create a {@link Region} with the given name. If a region with the given name already exists, then BundleException
+	 * with exception type UNSUPPORTED_OPERATION is thrown.
+	 * 
+	 * @param regionName the name of the region
+	 * @return the {@link Region} created
+	 * @throws BundleException if the region was not created
+	 */
+	Region createRegion(String regionName) throws BundleException;
+
+	/**
+	 * Create a {@link RegionFilterBuilder} instance.
+	 * 
+	 * @return a region filter builder
+	 */
+	RegionFilterBuilder createRegionFilterBuilder();
+
+	/**
+	 * Removes the given {@link Region} from the digraph along with any edges which have the given region as head or
+	 * tail. If the given region is not present in the digraph, this is not an error and there is no effect.
+	 * 
+	 * @param region the {@link Region} to be removed
+	 */
+	void removeRegion(Region region);
+
+	/**
+	 * Gets all the {@link Region Regions} in the digraph.
+	 * 
+	 * @return a set of {@link Region Regions}
+	 */
+	Set<Region> getRegions();
+
+	/**
+	 * Gets the {@link Region} in the digraph with the given name.
+	 * 
+	 * @param regionName the name of the region
+	 * @return the {@link Region} or <code>null</code> if no such region is present in the digraph
+	 */
+	Region getRegion(String regionName);
+
+	/**
+	 * Gets the {@link Region} in the digraph containing the given bundle.
+	 * 
+	 * @param bundle the bundle to search for
+	 * @return the {@link Region} which contains the given bundle or <code>null</code> if there is no such region
+	 */
+	Region getRegion(Bundle bundle);
+
+	/**
+	 * Gets the {@link Region} in the digraph containing a bundle with the given bundle id.
+	 * 
+	 * @param bundleId the bundleId of the bundle to search for
+	 * @return the {@link Region} which contains a bundle with the given bundle or <code>null</code> if there is no such
+	 *         region
+	 */
+	Region getRegion(long bundleId);
+
+	/**
+	 * Connects a given tail region to a given head region via an edge labelled with the given {@link RegionFilter}. The
+	 * tail region may then, subject to the region filter, see bundles, packages, and services visible in the head
+	 * region.
+	 * <p>
+	 * The given head and tail regions are added to the digraph if they are not already present.
+	 * <p>
+	 * If the given tail region is already connected to the given head region, then BundleException with exception type
+	 * UNSUPPORTED_OPERATION is thrown.
+	 * <p>
+	 * If the given head and the given tail are identical, then BundleException with exception type
+	 * UNSUPPORTED_OPERATION is thrown.
+	 * 
+	 * @param tailRegion the region at the tail of the new edge
+	 * @param filter a {@link RegionFilter} which labels the new edge
+	 * @param headRegion the region at the head of the new edge
+	 * @throws BundleException if the edge was not created
+	 */
+	void connect(Region tailRegion, RegionFilter filter, Region headRegion) throws BundleException;
+
+	/**
+	 * Gets a {@link Set} containing a snapshot of the {@link FilteredRegion FilteredRegions} attached to the given tail
+	 * region.
+	 * 
+	 * @param tailRegion the tail region whose edges are gotten
+	 * @return a {@link Set} of {@link FilteredRegion FilteredRegions} of head regions and region filters
+	 */
+	Set<FilteredRegion> getEdges(Region tailRegion);
+
+	/**
+	 * Visit the subgraph connected to the given region.
+	 * 
+	 * @param startingRegion the region at which to start
+	 * @param visitor a {@link RegionDigraphVisitor} to be called as the subgraph is navigated
+	 */
+	void visitSubgraph(Region startingRegion, RegionDigraphVisitor visitor);
+
+	/**
+	 * Gets a {@link RegionDigraphPersistence} object which can be used to save and load a {@link RegionDigraph} to and
+	 * from persistent storage.
+	 * 
+	 * @return a {@link RegionDigraphPersistence} object.
+	 */
+	RegionDigraphPersistence getRegionDigraphPersistence();
+
+	/**
+	 * Creates a copy of this {@link RegionDigraph}.  Modifying the returned copy has no effect on this
+	 * digraph.
+	 * @return a copy of this digraph.
+	 * @throws BundleException if the digraph could not be copied
+	 */
+	RegionDigraph copy() throws BundleException;
+
+	/**
+	 * Replaces the content of this digraph with the content of the supplied digraph.
+	 * The supplied digraph must have been returned by a call to this digraph 
+	 * {@link #copy()} method.  If this digraph has been modified between the 
+	 * call to {@link #copy()} and {@link #replace(RegionDigraph)} then an
+	 * exception is thrown.
+	 * @param digraph the digraph to replace this digraph with.
+	 * @throws BundleException if the digraph could not be replaced
+	 */
+	void replace(RegionDigraph digraph) throws BundleException;
+
+	/**
+	 * Gets the resolver hook factory associated with this digraph.
+	 * @return the resolver hook factory
+	 */
+	ResolverHookFactory getResolverHookFactory();
+
+	/**
+	 * Gets the bundle event hook associated with this digraph.
+	 * @return the bundle event hook
+	 */
+	org.osgi.framework.hooks.bundle.EventHook getBundleEventHook();
+
+	/**
+	 * Gets the bundle find hook associated with this digraph.
+	 * @return the bundle find hook
+	 */
+	org.osgi.framework.hooks.bundle.FindHook getBundleFindHook();
+
+	/**
+	 * Gets the service event hook associated with this digraph.
+	 * @return the service event hook
+	 */
+	@SuppressWarnings("deprecation")
+	org.osgi.framework.hooks.service.EventHook getServiceEventHook();
+
+	/**
+	 * Gets the service find hook associated with this digraph.
+	 * @return the service find hook
+	 */
+	org.osgi.framework.hooks.service.FindHook getServiceFindHook();
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraphPersistence.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraphPersistence.java
new file mode 100644
index 0000000..b01e723
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraphPersistence.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.region;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * A region digraph persistence is used to persist the state of a {@link RegionDigraph}.
+ * <p />
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Implementations of this interface must be thread safe.
+ */
+public interface RegionDigraphPersistence {
+
+	/**
+	 * Creates a new digraph and reads the content of the digraph from the provided input. The provided input must have
+	 * been persisted using the {@link #save(RegionDigraph, OutputStream)} method.
+	 * <p />
+	 * Note that the returned digraph is disconnected from the OSGi runtime. Any modifications made to the returned
+	 * digraph will not affect the OSGi runtime behavior of the bundles installed in the running framework.
+	 * <p />
+	 * The specified stream remains open after this method returns.
+	 * 
+	 * @param input an input stream to read a digraph from.
+	 * @return the new digraph
+	 * @throws IOException if error occurs reading the digraph.
+	 * @throws IllegalArgumentException if the input stream is not a digraph or has an incompatible persistent version
+	 */
+	RegionDigraph load(InputStream input) throws IOException;
+
+	/**
+	 * Writes the specified {@link RegionDigraph} to the provided output in a form suitable for using the
+	 * {@link #load(InputStream)} method.
+	 * <p />
+	 * After the digraph has been written, the output stream is flushed. The output stream remains open after this
+	 * method returns.
+	 * 
+	 * @param digraph a digraph to be written.
+	 * @param output an output stream to write a digraph to.
+	 * @throws IOException if error occurs writing the digraph.
+	 */
+	void save(RegionDigraph digraph, OutputStream output) throws IOException;
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraphVisitor.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraphVisitor.java
new file mode 100644
index 0000000..edc264a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionDigraphVisitor.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SpringSource, a division of VMware - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.equinox.region;
+
+/**
+ * {@link RegionDigraphVisitor} is used to traverse a subgraph of a {@link RegionDigraph}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Implementations of this interface must be thread safe.
+ */
+public interface RegionDigraphVisitor {
+
+	/**
+	 * Visits the given region and determines whether or not to continue traversing.
+	 * 
+	 * @param region the region to visit
+	 * @return <code>true</code> if the traversal is to continue and <code>false</code> otherwise
+	 */
+	boolean visit(Region region);
+
+	/**
+	 * Prepares to traverse an edge with the given {@link RegionFilter} and determines whether or not to traverse the
+	 * edge.
+	 * 
+	 * @param regionFilter the {@link RegionFilter} of the edge to be traversed
+	 * @return <code>true</code> if the edge is to be traversed and <code>false</code> otherwise
+	 */
+	boolean preEdgeTraverse(RegionFilter regionFilter);
+
+	/**
+	 * This is called after traversing an edge with the given {@link RegionFilter}.
+	 * 
+	 * @param regionFilter the {@link RegionFilter} of the edge that has just been traversed
+	 */
+	void postEdgeTraverse(RegionFilter regionFilter);
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionFilter.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionFilter.java
new file mode 100644
index 0000000..f8e9f32
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionFilter.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    SpringSource, a division of VMware - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+package org.eclipse.equinox.region;
+
+import java.util.Collection;
+import java.util.Map;
+import org.osgi.framework.*;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRevision;
+
+/**
+ * A {@link RegionFilter} is associated with a connection from one region to another and determines the bundles,
+ * packages, services and other capabilities which are visible across the connection. A region filter is constant; its
+ * sharing policy cannot be changed after construction. Instances of region filters can be created with a
+ * {@link RegionFilterBuilder}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Implementations must be thread safe.
+ * 
+ */
+public interface RegionFilter {
+
+	/**
+	 * Name space for sharing package capabilities.
+	 * 
+	 * @see BundleRevision#PACKAGE_NAMESPACE
+	 */
+	public static final String VISIBLE_PACKAGE_NAMESPACE = BundleRevision.PACKAGE_NAMESPACE;
+
+	/**
+	 * Name space for sharing bundle capabilities for require bundle constraints.
+	 * 
+	 * @see BundleRevision#BUNDLE_NAMESPACE
+	 */
+	public static final String VISIBLE_REQUIRE_NAMESPACE = BundleRevision.BUNDLE_NAMESPACE;
+
+	/**
+	 * Name space for sharing host capabilities.
+	 * 
+	 * @see BundleRevision#HOST_NAMESPACE
+	 */
+	public static final String VISIBLE_HOST_NAMESPACE = BundleRevision.HOST_NAMESPACE;
+
+	/**
+	 * Name space for sharing services. The filters specified in this name space will be used to match
+	 * {@link ServiceReference services}.
+	 */
+	public static final String VISIBLE_SERVICE_NAMESPACE = "org.eclipse.equinox.allow.service"; //$NON-NLS-1$
+
+	/**
+	 * Name space for sharing bundles. The filters specified in this name space will be use to match against a bundle's
+	 * symbolic name and version. The attribute {@link Constants#BUNDLE_SYMBOLICNAME_ATTRIBUTE bundle-symbolic-name} is
+	 * used for the symbolic name and the attribute {@link Constants#BUNDLE_VERSION_ATTRIBUTE bundle-version} is used
+	 * for the bundle version.
+	 */
+	public static final String VISIBLE_BUNDLE_NAMESPACE = "org.eclipse.equinox.allow.bundle"; //$NON-NLS-1$
+
+	/**
+	 * Name space for matching against all capabilities. The filters specified in this name space will be used to match
+	 * all capabilities.
+	 */
+	public static final String VISIBLE_ALL_NAMESPACE = "org.eclipse.equinox.allow.all"; //$NON-NLS-1$
+
+	/**
+	 * Determines whether this filter allows the given bundle
+	 * 
+	 * @param bundle the bundle
+	 * @return <code>true</code> if the bundle is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(Bundle bundle);
+
+	/**
+	 * Determines whether this filter allows the given bundle
+	 * 
+	 * @param bundle the bundle revision
+	 * @return <code>true</code> if the bundle is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(BundleRevision bundle);
+
+	/**
+	 * Determines whether this filter allows the given service reference.
+	 * 
+	 * @param service the service reference of the service
+	 * @return <code>true</code> if the service is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(ServiceReference<?> service);
+
+	/**
+	 * Determines whether this filter allows the given capability.
+	 * 
+	 * @param capability the bundle capability
+	 * @return <code>true</code> if the capability is allowed and <code>false</code>otherwise
+	 */
+	public boolean isAllowed(BundleCapability capability);
+
+	/**
+	 * Returns a map of the filters used by each name space for this region filter. The may key is the name space and
+	 * the value is a collection of filters for the name space. The returned map is a snapshot of the sharing policy.
+	 * Changes made to the returned map have no affect on this region filter.
+	 * 
+	 * @return a map containing the sharing policy used by this region filter
+	 */
+	public Map<String, Collection<String>> getSharingPolicy();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionFilterBuilder.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionFilterBuilder.java
new file mode 100644
index 0000000..bc75c7c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/RegionFilterBuilder.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.region;
+
+import org.osgi.framework.InvalidSyntaxException;
+
+/**
+ * A builder for creating {@link RegionFilter} instances. A builder instance can be obtained from the
+ * {@link RegionDigraph#createRegionFilterBuilder()} method.
+ * <p />
+ * <strong>Concurrent Semantics</strong><br />
+ * 
+ * Implementations of this interface must be thread safe.
+ */
+public interface RegionFilterBuilder {
+
+	/**
+	 * Allow capabilities with the given name space matching the given filter.
+	 * 
+	 * @param namespace the name space of the capabilities to be allowed
+	 * @param filter the filter matching the capabilities to be allowed
+	 * @return this builder (for method chaining)
+	 */
+	RegionFilterBuilder allow(String namespace, String filter) throws InvalidSyntaxException;
+
+	/**
+	 * Allow all capabilities with the given name space.
+	 * 
+	 * @param namespace the name space of the capabilities to be allowed
+	 * @return this builder (for method chaining)
+	 */
+	RegionFilterBuilder allowAll(String namespace);
+
+	/**
+	 * Build a {@link RegionFilter} from the current state of this builder.
+	 * 
+	 * @return the {@link RegionFilter} built
+	 */
+	RegionFilter build();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/management/ManageableRegion.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/management/ManageableRegion.java
new file mode 100644
index 0000000..2067d2c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/management/ManageableRegion.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.region.management;
+
+import org.eclipse.equinox.region.Region;
+
+import javax.management.MXBean;
+
+/**
+ * A {@link ManageableRegion} is a JMX representation of a {@link Region}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+ at MXBean
+public interface ManageableRegion {
+
+	/**
+	 * Returns the region name.
+	 * 
+	 * @return the region name
+	 */
+	String getName();
+
+	/**
+	 * Returns the {@ManageableRegion}s that this region depends upon.
+	 * 
+	 * @return an array of {@link ManageableRegion}s
+	 */
+	ManageableRegion[] getDependencies();
+
+	/**
+	 * Returns the bundle ids belonging to this region.
+	 * 
+	 * @return an array of bundle ids
+	 */
+	long[] getBundleIds();
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/management/ManageableRegionDigraph.java b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/management/ManageableRegionDigraph.java
new file mode 100644
index 0000000..8bba6cc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.region/src/org/eclipse/equinox/region/management/ManageableRegionDigraph.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.equinox.region.management;
+
+import org.eclipse.equinox.region.RegionDigraph;
+
+import javax.management.MXBean;
+
+/**
+ * {@link ManageableRegionDigraph} is a JMX representation of the {@link RegionDigraph}.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+ at MXBean
+public interface ManageableRegionDigraph {
+
+	/**
+	 * Gets the {@link ManageableRegion}s in the digraph.
+	 * 
+	 * @return an array of {@link ManageableRegion}s
+	 */
+	ManageableRegion[] getRegions();
+
+	/**
+	 * Gets the {@link ManageableRegion} with the given name.
+	 * 
+	 * @param regionName the region name
+	 * @return a {@link ManageableRegion} or <code>null</code> if there is no region with the given name
+	 */
+	ManageableRegion getRegion(String regionName);
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.classpath b/eclipse/plugins/org.eclipse.equinox.registry.jmx/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.project b/eclipse/plugins/org.eclipse.equinox.registry.jmx/.project
deleted file mode 100644
index 98cb9b6..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.registry.jmx</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.registry.jmx/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 45e55d9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,259 +0,0 @@
-#Thu May 10 13:51:59 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.equinox.registry.jmx/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 8195fe9..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-#Mon Feb 26 11:27:54 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.registry.jmx/META-INF/MANIFEST.MF
deleted file mode 100644
index 6f9e126..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,16 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring Equinox Registry Extensions (Incubation)
-Bundle-SymbolicName: org.eclipse.equinox.registry.jmx;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.equinox.internal.registry.jmx.Activator
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
-Import-Package: javax.management,
- org.eclipse.core.runtime,
- org.eclipse.equinox.jmx.server,
- org.osgi.framework,
- org.osgi.util.tracker
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/about.html b/eclipse/plugins/org.eclipse.equinox.registry.jmx/about.html
deleted file mode 100644
index 500f996..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>June 9, 2008</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/build.properties b/eclipse/plugins/org.eclipse.equinox.registry.jmx/build.properties
deleted file mode 100644
index 26cc11a..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html,\
-               icons/
-javacSource=1.3
-javacTarget=1.1
-src.includes=about.html
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/ext_point.gif b/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/ext_point.gif
deleted file mode 100644
index 52f4e5e..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/ext_point.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/extension.gif b/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/extension.gif
deleted file mode 100644
index e8abf43..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/extension.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/plugin_registry.gif b/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/plugin_registry.gif
deleted file mode 100644
index eedacd2..0000000
Binary files a/eclipse/plugins/org.eclipse.equinox.registry.jmx/icons/plugin_registry.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/plugin.xml b/eclipse/plugins/org.eclipse.equinox.registry.jmx/plugin.xml
deleted file mode 100644
index fcd4623..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/plugin.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
-<plugin>
-	<extension point="org.eclipse.equinox.jmx.server.contribution">
-		<contribution
-				class="org.eclipse.equinox.internal.registry.jmx.ExtensionRegistryContributionProvider"
-				isroot="false">
-			<extendsClass class="org.eclipse.core.runtime.IExtensionRegistry"/>
-		</contribution>
-		<contribution
-				class="org.eclipse.equinox.internal.registry.jmx.ExtensionPointContributionProvider"
-				isroot="true">
-			<extendsClass class="org.eclipse.core.runtime.IExtensionPoint"/>
-		</contribution>
-		<contribution
-				class="org.eclipse.equinox.internal.registry.jmx.ExtensionContributionProvider"
-				isroot="false">
-			<extendsClass class="org.eclipse.core.runtime.IExtension"/>
-	</contribution>
-	</extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/Activator.java b/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/Activator.java
deleted file mode 100644
index 0c54264..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/Activator.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.registry.jmx;
-
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator implements BundleActivator {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.equinox.registry.jmx"; //$NON-NLS-1$
-
-	// The shared instance
-	private static Activator plugin;
-
-	private static BundleContext context;
-	private ServiceTracker tracker;
-
-	/**
-	 * The constructor
-	 */
-	public Activator() {
-		plugin = this;
-	}
-
-	public static BundleContext getContext() {
-		return context;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext bundleContext) throws Exception {
-		context = bundleContext;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext bundleContext) throws Exception {
-		if (tracker != null) {
-			tracker.close();
-			tracker = null;
-		}
-		plugin = null;
-		context = null;
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
-
-	public IExtensionRegistry getRegistry() {
-		if (tracker == null) {
-			tracker = new ServiceTracker(context, IExtensionRegistry.class.getName(), null);
-			tracker.open();
-		}
-		return (IExtensionRegistry) tracker.getService();
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionContribution.java b/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionContribution.java
deleted file mode 100644
index 4538013..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionContribution.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.registry.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-/**
- * @since 3.2
- */
-public class ExtensionContribution extends Contribution {
-
-	public ExtensionContribution(Object obj) {
-		super(obj);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return new Object[0];
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path("icons/extension.gif"), null); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	private IExtension getDelegate() {
-		return (IExtension) contributionDelegate;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		String name = getDelegate().getUniqueIdentifier();
-		if (name != null)
-			return name;
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("anonymous "); //$NON-NLS-1$
-		IContributor contributor = getDelegate().getContributor();
-		if (contributor != null) {
-			buffer.append('[');
-			buffer.append(contributor.getName());
-			buffer.append(']');
-		}
-		return buffer.toString();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-	 */
-	protected ObjectName getObjectName() {
-		try {
-			return new ObjectName("jmxserver:type=Extension,ExtensionPoint=" + getDelegate().getExtensionPointUniqueIdentifier() //$NON-NLS-1$
-					+ ",name=" + getName()); //$NON-NLS-1$
-		} catch (Exception e) {
-			return super.getObjectName();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute arg0) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList arg0) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionContributionProvider.java b/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionContributionProvider.java
deleted file mode 100644
index 32558d7..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionContributionProvider.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.registry.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-
-/**
- * @since 3.2
- */
-public class ExtensionContributionProvider extends ContributionProvider {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof IExtension;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) {
-		return contributesType(obj) ? new ExtensionContribution(obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return new ExtensionContributionProvider();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path("icons/extension.gif"), null); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return "Extension";
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute arg0) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList arg0) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionPointContribution.java b/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionPointContribution.java
deleted file mode 100644
index 8c01133..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionPointContribution.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.registry.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-/**
- * @since 3.2
- */
-public class ExtensionPointContribution extends Contribution {
-
-	public ExtensionPointContribution(Object obj) {
-		super(obj);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return getDeletgate().getExtensions();
-	}
-
-	private IExtensionPoint getDeletgate() {
-		return (IExtensionPoint) contributionDelegate;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path("icons/ext_point.gif"), null); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return getDeletgate().getUniqueIdentifier();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-	 */
-	protected ObjectName getObjectName() {
-		try {
-			return new ObjectName("jmxserver:type=ExtensionPoint,name=" + getName()); //$NON-NLS-1$
-		} catch (Exception e) {
-			return super.getObjectName();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionPointContributionProvider.java b/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionPointContributionProvider.java
deleted file mode 100644
index 7c7bd84..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionPointContributionProvider.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.registry.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-
-/**
- * @since 3.2
- */
-public class ExtensionPointContributionProvider extends ContributionProvider {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof IExtensionPoint;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) {
-		return contributesType(obj) ? new ExtensionPointContribution(obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return new ExtensionPointContributionProvider();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return Activator.getDefault().getRegistry().getExtensionPoints();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path("icons/plugin_registry.gif"), null); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return "Extension Points";
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute arg0) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList arg0) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionRegistryContribution.java b/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionRegistryContribution.java
deleted file mode 100644
index 4039aca..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionRegistryContribution.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.registry.jmx;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-
-/**
- * @since 3.2
- */
-public class ExtensionRegistryContribution extends Contribution {
-
-	public ExtensionRegistryContribution(Object obj) {
-		super(obj);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		// TODO
-		return new Object[0];
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path("icons/plugin_registry.gif"), null); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return "Extension Registry";
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-	 */
-	protected ObjectName getObjectName() {
-		try {
-			return new ObjectName("jmxserver:type=ExtensionRegistry,name=" + getName()); //$NON-NLS-1$
-		} catch (Exception e) {
-			return super.getObjectName();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionRegistryContributionProvider.java b/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionRegistryContributionProvider.java
deleted file mode 100644
index 22b0ffb..0000000
--- a/eclipse/plugins/org.eclipse.equinox.registry.jmx/src/org/eclipse/equinox/internal/registry/jmx/ExtensionRegistryContributionProvider.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.internal.registry.jmx;
-
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-
-/**
- * @since 3.2
- */
-public class ExtensionRegistryContributionProvider extends ContributionProvider {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof IExtensionRegistry;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) {
-		return contributesType(obj) ? new ExtensionRegistryContribution(obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return new ExtensionRegistryContributionProvider();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return new Object[] {new ExtensionPointContributionProvider(), new ExtensionContributionProvider()};
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getContext().getBundle(), new Path("icons/plugin_registry.gif"), null); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return "Extension Registry";
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute arg0) {
-		//
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList arg0) {
-		return null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
index b9d0c9c..f407036 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.registry;singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Localization: plugin
 Export-Package: org.eclipse.core.internal.adapter;x-internal:=true,
  org.eclipse.core.internal.registry;x-friends:="org.eclipse.core.runtime",
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/about.html b/eclipse/plugins/org.eclipse.equinox.registry/about.html
index 174731c..1ffd5d5 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/about.html
+++ b/eclipse/plugins/org.eclipse.equinox.registry/about.html
@@ -49,7 +49,7 @@ terms and conditions of use.</p>
 <p>Your use of the Jakarta Commons Collections code is subject to the terms and conditions of the Apache License, Version 2.0.  A copy of the license is contained
 in the file <a href="about_files/LICENSE-2.0.txt" target="_blank">LICENSE-2.0.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.</p>
 
-<p>The Apache attribution notice file <a href="about_files/NOTICE.TXT" target="_blank">NOTICE.TXT</a> is included with the Content in accordance with 4d of the Apache License, Version 2.0
+<p>The Apache attribution notice file <a href="about_files/NOTICE.txt" target="_blank">NOTICE.txt</a> is included with the Content in accordance with 4d of the Apache License, Version 2.0
 
 <p>The names "Jakarta" and  "Apache Software Foundation" must not be used to endorse or promote products derived from this 
 software without prior written permission.  For written permission, please contact <a href="mailto:apache at apache.org">apache at apache.org</a>.</p>
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java
index f538a9b..9a17ed1 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java
+++ b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -747,6 +747,7 @@ public class ExtensionRegistry implements IExtensionRegistry, IDynamicExtensionR
 
 		if (!registryObjects.isDirty() || cacheStorageManager.isReadOnly()) {
 			cacheStorageManager.close();
+			theTableReader.close();
 			return;
 		}
 
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java
index 283022a..bd7dc81 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java
+++ b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java
@@ -1,6 +1,6 @@
 /**
  *  Copyright 2001-2004 The Apache Software Foundation
- *  Portions (modifications) Copyright 2004-2005 IBM Corp.
+ *  Portions (modifications) Copyright 2004-2010 IBM Corp.
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -170,8 +170,6 @@ public class ReferenceMap {
 	 */
 	final public static int SOFT = 1;
 
-	private int entryCount;
-
 	/**
 	 *  The threshold variable is calculated by multiplying
 	 *  table.length and loadFactor.  
@@ -307,7 +305,6 @@ public class ReferenceMap {
 	 * @return The new table entry
 	 */
 	private IEntry newEntry(int key, Object value, IEntry next) {
-		entryCount++;
 		switch (valueType) {
 			case HARD :
 				return new HardRef(key, value, next);
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java
index 44cce84..e2c5bee 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -210,45 +210,59 @@ public class EclipseBundleListener implements SynchronousBundleListener {
 				return; // already processed this host
 		}
 
-		if (registry.hasContributor(hostID)) {
-			// get the base localization path from the host
-			Dictionary hostHeaders = host.getHeaders(""); //$NON-NLS-1$
-			String localization = (String) hostHeaders.get(Constants.BUNDLE_LOCALIZATION);
-			if (localization == null)
-				// localization may be empty in which case we should check the default
-				localization = Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
-			// we do a simple check to make sure the default nls path exists in the host; 
-			// this is for performance reasons, but I'm not sure it is valid because a host could ship without the default nls properties file but this seems very unlikely
-			URL baseNLS = host.getEntry(localization + ".properties"); //$NON-NLS-1$
-			if (baseNLS == null)
-				return;
-			int lastSlash = localization.lastIndexOf('/');
-			if (lastSlash == localization.length() - 1)
-				return; // just to be safe
-			String baseDir = lastSlash < 0 ? "" : localization.substring(0, lastSlash); //$NON-NLS-1$
-			String filePattern = (lastSlash < 0 ? localization : localization.substring(lastSlash + 1)) + "_*.properties"; //$NON-NLS-1$
-			Enumeration nlsFiles = fragment.findEntries(baseDir, filePattern, false);
-			if (nlsFiles == null)
-				return; // return without marking as processed
-			synchronized (currentStateStamp) {
-				// mark this host as processed for the current state stamp.
-				dynamicAddStateStamps.put(hostID, new Long(currentStateStamp[0]));
+		Bundle[] fragments = OSGIUtils.getDefault().getFragments(host);
+		boolean refresh = false;
+		// check host first
+		if (hasNLSFilesFor(host, fragment)) {
+			refresh = true;
+		} else {
+			// check other fragments of this host
+			for (int i = 0; i < fragments.length && !refresh; i++) {
+				if (fragment.equals(fragments[i]))
+					continue; // skip fragment that was just resolved; it will be added in by the caller
+				if (hasNLSFilesFor(fragments[i], fragment)) {
+					refresh = true;
+				}
 			}
-			// force the host to be removed and added back
+		}
+		if (refresh) {
+			// force the host and fragments to be removed and added back
 			removeBundle(host);
 			addBundle(host, false);
-		}
-		// check other fragments of this host
-		Bundle[] fragments = OSGIUtils.getDefault().getFragments(host);
-		for (int i = 0; i < fragments.length; i++) {
-			if (fragment.equals(fragments[i]))
-				continue; // skip fragment that was just resolved; it will be added in our caller
-			String fragmentID = Long.toString(fragments[i].getBundleId());
-			if (registry.hasContributor(fragmentID)) {
+			for (int i = 0; i < fragments.length; i++) {
+				if (fragment.equals(fragments[i]))
+					continue; // skip fragment that was just resolved; it will be added in by the caller
 				removeBundle(fragments[i]);
 				addBundle(fragments[i], false);
 			}
 		}
+		synchronized (currentStateStamp) {
+			// mark this host as processed for the current state stamp.
+			dynamicAddStateStamps.put(hostID, new Long(currentStateStamp[0]));
+		}
+	}
+
+	private boolean hasNLSFilesFor(Bundle target, Bundle fragment) {
+		if (!registry.hasContributor(Long.toString(target.getBundleId())))
+			return false;
+		// get the base localization path from the target
+		Dictionary targetHeaders = target.getHeaders(""); //$NON-NLS-1$
+		String localization = (String) targetHeaders.get(Constants.BUNDLE_LOCALIZATION);
+		if (localization == null)
+			// localization may be empty in which case we should check the default
+			localization = Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
+		// we do a simple check to make sure the default nls path exists in the target; 
+		// this is for performance reasons, but I'm not sure it is valid because a target could ship without the default nls properties file but this seems very unlikely
+		URL baseNLS = target.getEntry(localization + ".properties"); //$NON-NLS-1$
+		if (baseNLS == null)
+			return false;
+		int lastSlash = localization.lastIndexOf('/');
+		if (lastSlash == localization.length() - 1)
+			return false; // just to be safe
+		String baseDir = lastSlash < 0 ? "" : localization.substring(0, lastSlash); //$NON-NLS-1$
+		String filePattern = (lastSlash < 0 ? localization : localization.substring(lastSlash + 1)) + "_*.properties"; //$NON-NLS-1$
+		Enumeration nlsFiles = fragment.findEntries(baseDir, filePattern, false);
+		return nlsFiles != null;
 	}
 
 	private static boolean isSingleton(Bundle bundle) {
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java
index ff0365b..b93472f 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,16 +18,36 @@ import org.eclipse.osgi.framework.console.CommandProvider;
 
 public class RegistryCommandProvider implements CommandProvider {
 
-	private final static String helpText = "---Extension Registry Commands---\n" + //$NON-NLS-1$
-			"\tns [-v] [name] - display extension points in the namespace; add -v to display extensions\n" + //$NON-NLS-1$
-			"\tpt [-v] uniqueExtensionPointId - display the extension point and extensions; add -v to display config elements\n"; //$NON-NLS-1$
+	private final static String NEW_LINE = "\r\n"; //$NON-NLS-1$
 
 	private static final String indent = "   "; //$NON-NLS-1$
 
 	private boolean verbose = false; // is command run in a "verbose" mode?
 
 	public String getHelp() {
-		return helpText;
+		return getHelp(null);
+	}
+
+	/*
+	 * This method either returns the help message for a particular command, 
+	 * or returns the help messages for all commands (if commandName is null)
+	 */
+	private String getHelp(String commandName) {
+		boolean all = commandName == null;
+		StringBuffer sb = new StringBuffer();
+		if (all) {
+			sb.append("---Extension Registry Commands---"); //$NON-NLS-1$
+			sb.append(NEW_LINE);
+		}
+		if (all || "ns".equals(commandName)) { //$NON-NLS-1$
+			sb.append("\tns [-v] [name] - display extension points in the namespace; add -v to display extensions"); //$NON-NLS-1$
+			sb.append(NEW_LINE);
+		}
+		if (all || "pt".equals(commandName)) { //$NON-NLS-1$
+			sb.append("\tpt [-v] uniqueExtensionPointId - display the extension point and extensions; add -v to display config elements"); //$NON-NLS-1$
+			sb.append(NEW_LINE);
+		}
+		return sb.toString();
 	}
 
 	public void _ns(CommandInterpreter ci) throws Exception {
@@ -80,6 +100,26 @@ public class RegistryCommandProvider implements CommandProvider {
 		}
 	}
 
+	/**
+	 * Handles the help command
+	 * 
+	 * @param intp
+	 * @return description for a particular command or false if there is no command with the specified name
+	 */
+	public Object _help(CommandInterpreter intp) {
+		String commandName = intp.nextArgument();
+		if (commandName == null) {
+			return Boolean.FALSE;
+		}
+		String help = getHelp(commandName);
+
+		if (help.length() > 0) {
+			return help;
+		}
+
+		return Boolean.FALSE;
+	}
+
 	// This method has a side effect of setting the verbose flag
 	private String getArgument(CommandInterpreter ci) {
 		String firstParm = ci.nextArgument();
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java
index 9b7b069..4a3ed7a 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java
+++ b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java
index ff83482..d8d04f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.security.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.security.ui/META-INF/MANIFEST.MF
index 287b112..27120b3 100644
--- a/eclipse/plugins/org.eclipse.equinox.security.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.security.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.security.ui;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.1.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Import-Package: javax.crypto.spec,
diff --git a/eclipse/plugins/org.eclipse.equinox.security.ui/src/org/eclipse/equinox/internal/security/ui/storage/view/NewNodeDialog.java b/eclipse/plugins/org.eclipse.equinox.security.ui/src/org/eclipse/equinox/internal/security/ui/storage/view/NewNodeDialog.java
index 4cfb1ab..5ec062d 100644
--- a/eclipse/plugins/org.eclipse.equinox.security.ui/src/org/eclipse/equinox/internal/security/ui/storage/view/NewNodeDialog.java
+++ b/eclipse/plugins/org.eclipse.equinox.security.ui/src/org/eclipse/equinox/internal/security/ui/storage/view/NewNodeDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,9 +47,7 @@ public class NewNodeDialog extends TitleAreaDialog {
 	}
 
 	protected Control createDialogArea(Composite parent) {
-		Composite compositeTop = (Composite) super.createDialogArea(parent);
-		Composite composite = new Composite(compositeTop, SWT.NONE);
-
+		Composite composite = (Composite) super.createDialogArea(parent);
 		setMessage(SecUIMessages.newNodeMsg);
 
 		new Label(composite, SWT.LEFT).setText(SecUIMessages.newNodeLabel);
diff --git a/eclipse/plugins/org.eclipse.compare.core/.classpath b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/.classpath
similarity index 100%
copy from eclipse/plugins/org.eclipse.compare.core/.classpath
copy to eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/.classpath
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/.project b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/.project
new file mode 100644
index 0000000..3670828
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.equinox.security.win32.x86_64</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from eclipse/plugins/org.eclipse.equinox.security.win32.x86/.settings/org.eclipse.jdt.core.prefs
copy to eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.jdt.core.prefs
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2e68867
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %fragmentName
+Bundle-SymbolicName: org.eclipse.equinox.security.win32.x86_64;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.equinox.security;bundle-version="[1.0.0,2.0.0)"
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-Localization: fragment
+Eclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86_64))
+Export-Package: org.eclipse.equinox.internal.security.win32;x-internal:=true
diff --git a/eclipse/plugins/org.eclipse.compare.core/about.html b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/about.html
similarity index 100%
copy from eclipse/plugins/org.eclipse.compare.core/about.html
copy to eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/build.properties b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/build.properties
new file mode 100644
index 0000000..a5e5b96
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2005, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#      IBM Corporation - initial API and implementation
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               fragment.properties,\
+               fragment.xml,\
+               about.html,\
+               jnicrypt64.dll
+src.includes = cpp/,\
+               META-INF/,\
+               about.html
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/ReadMe.txt b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/ReadMe.txt
new file mode 100644
index 0000000..072d454
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/ReadMe.txt
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+This is a JNI bridge to access native Windows encryption methods from Java. This version
+works in a 64-bit Windows environment.
+
+The methods perform user-specific encryption of the data. The same user can later decrypt 
+data using methods provided by this DLL. A different user won't be able to decrypt the data. 
+
+If the user has a roaming profile, he can decrypt data on a different computer in the domain.
+
+In the event if stand-alone computer needs to have OS re-installed (or the domain controller
+and the computer in the domain), be sure to create Windows password recovery disk BEFORE 
+re-installing the operating system.
+
+Note that this mechanism is intended to be used with small size data (i.e., passwords). For 
+large amount of data consider encrypting your password using this mechanism and using 
+symmetric encryption to encrypt the data.
+
+To compile this DLL:
+=> JAVA_HOME environment variable needs to be setup so that jni.h can be found
+
+Note C++ projects settings:
+=> Additional include directories - "$(JAVA_HOME)/include";"$(JAVA_HOME)/include/win32"
+=> Additional linker dependency - Crypt32.lib
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.cpp b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.cpp
new file mode 100644
index 0000000..60d680f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.cpp
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+#include <windows.h>
+#include <wincrypt.h>
+#include "jnicrypt.h"
+
+BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
+{
+    return TRUE;
+}
+
+JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_winencrypt
+  (JNIEnv *env, jobject obj, jbyteArray value)
+{
+	jsize size = env->GetArrayLength(value);
+	jbyte *body = env->GetByteArrayElements(value, NULL);
+	if (body == NULL)
+		return NULL;
+
+	DATA_BLOB clearText;
+	DATA_BLOB encryptedText;
+	clearText.pbData = (BYTE*) body;
+	clearText.cbData = (DWORD) size;
+
+	BOOL result = CryptProtectData(&clearText, L"Equinox", NULL, NULL, NULL, 0, &encryptedText);
+
+    // release memory allocated by Java environment
+	env->ReleaseByteArrayElements(value, body, 0);
+
+    if (result == FALSE)
+		return NULL;
+
+    jbyteArray returnArray = env->NewByteArray(encryptedText.cbData);
+	env->SetByteArrayRegion(returnArray, 0, encryptedText.cbData, (jbyte*) encryptedText.pbData);
+	LocalFree(encryptedText.pbData); // no need any more, have Java representation
+
+	return returnArray;
+}
+
+JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_windecrypt
+  (JNIEnv *env, jobject obj, jbyteArray value)
+{
+	jsize size = env->GetArrayLength(value);
+	jbyte *body = env->GetByteArrayElements(value, NULL);
+	if (body == NULL)
+		return NULL;
+
+	DATA_BLOB clearText;
+	DATA_BLOB encryptedText;
+	encryptedText.pbData = (BYTE*) body;
+	encryptedText.cbData = (DWORD) size;
+
+	LPWSTR pDescrOut =  NULL;
+	BOOL result = CryptUnprotectData(&encryptedText, &pDescrOut, NULL, NULL, NULL, 0, &clearText);
+
+	if (pDescrOut != NULL)
+		LocalFree(pDescrOut);
+
+    // release memory allocated by Java environment
+	env->ReleaseByteArrayElements(value, body, 0);
+
+	if (result == FALSE)
+		return NULL;
+
+    jbyteArray returnArray = env->NewByteArray(clearText.cbData);
+	env->SetByteArrayRegion(returnArray, 0, clearText.cbData, (jbyte*) clearText.pbData);
+	LocalFree(clearText.pbData); // no need any more, have Java representation
+
+	return returnArray;
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.h b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.h
new file mode 100644
index 0000000..cd0064f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.h
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+#include <jni.h>
+
+#ifndef EQUINOX_WIN32_CRYPTO
+#define EQUINOX_WIN32_CRYPTO
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_windecrypt(JNIEnv *, jobject, jbyteArray);
+JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_winencrypt(JNIEnv *, jobject, jbyteArray);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // #ifndef EQUINOX_WIN32_CRYPTO
+
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.vcproj b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.vcproj
new file mode 100644
index 0000000..a5db9f5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.vcproj
@@ -0,0 +1,463 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="jnicrypt"
+	ProjectGUID="{A5965BFF-8C30-484F-9EA5-5C23C8A8F327}"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release/jnicrypt.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;JNICRYPT_EXPORTS"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\Release/jnicrypt.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib Crypt32.lib"
+				OutputFile=".\Release/jnicrypt.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\Release/jnicrypt.pdb"
+				ImportLibrary=".\Release/jnicrypt.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release/jnicrypt.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="3"
+				TypeLibraryName=".\Release/jnicrypt.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories=""$(JAVA_HOME)/include";"$(JAVA_HOME)/include/win32""
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;JNICRYPT_EXPORTS"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\Release/jnicrypt.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Crypt32.lib"
+				OutputFile="$(OutDir)\$(ProjectName)64.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\Release/jnicrypt.pdb"
+				ImportLibrary=".\Release/jnicrypt.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release/jnicrypt.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/jnicrypt.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;JNICRYPT_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				PrecompiledHeaderFile=".\Debug/jnicrypt.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib C:/msvs8/VC/PlatformSDK/Lib/Crypt32.lib"
+				OutputFile=".\Debug/jnicrypt.dll"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug/jnicrypt.pdb"
+				ImportLibrary=".\Debug/jnicrypt.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Debug/jnicrypt.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="3"
+				TypeLibraryName=".\Debug/jnicrypt.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories=""$(JAVA_HOME)/include";"$(JAVA_HOME)/include/win32""
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;JNICRYPT_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="0"
+				PrecompiledHeaderFile=".\Debug/jnicrypt.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Crypt32.lib"
+				OutputFile="$(OutDir)\$(ProjectName)64.dll"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug/jnicrypt.pdb"
+				ImportLibrary=".\Debug/jnicrypt.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Debug/jnicrypt.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="jnicrypt.cpp"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="jnicrypt.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/fragment.properties b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/fragment.properties
new file mode 100644
index 0000000..53edcf5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/fragment.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2008, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Windows Data Protection services integration (64 bit)
+providerName = Eclipse.org - Equinox
+windowsModuleName = Windows Integration (64 bit)
+providerDescription = The provider uses Windows APIs to encrypt a randomly generated \'master\' password in a way specific to the login credentials. Users who can log into the Windows account can access contents of the secure storage.
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/fragment.xml b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/fragment.xml
new file mode 100644
index 0000000..c9d4d64
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/fragment.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<fragment>
+   <extension
+         id="WindowsPasswordProvider64bit"
+         name="%windowsModuleName"
+         point="org.eclipse.equinox.security.secureStorage">
+      <provider
+            class="org.eclipse.equinox.internal.security.win32.WinCrypto"
+            description="%providerDescription"
+            priority="5">
+         <hint
+               value="AutomaticPasswordGeneration">
+         </hint>
+      </provider>
+   </extension>
+
+</fragment>
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/WinCrypto.java b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/WinCrypto.java
new file mode 100644
index 0000000..f423ed5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/WinCrypto.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.security.win32;
+
+import java.io.IOException;
+import java.security.SecureRandom;
+
+import javax.crypto.spec.PBEKeySpec;
+
+import org.eclipse.equinox.internal.security.auth.AuthPlugin;
+import org.eclipse.equinox.internal.security.auth.nls.SecAuthMessages;
+import org.eclipse.equinox.internal.security.storage.Base64;
+import org.eclipse.equinox.internal.security.win32.nls.WinCryptoMessages;
+import org.eclipse.equinox.security.storage.ISecurePreferences;
+import org.eclipse.equinox.security.storage.StorageException;
+import org.eclipse.equinox.security.storage.provider.IPreferencesContainer;
+import org.eclipse.equinox.security.storage.provider.PasswordProvider;
+
+/**
+ * Provides interface with native Windows data protection API. This provider
+ * auto-generates separate passwords for each secure preferences tree.
+ */
+public class WinCrypto extends PasswordProvider {
+
+	native public byte[] windecrypt(byte[] encryptedText);
+
+	native public byte[] winencrypt(byte[] clearText);
+
+	static {
+		System.loadLibrary("jnicrypt64");
+	}
+	
+	private final static String WIN_PROVIDER_NODE = "/org.eclipse.equinox.secure.storage/windows64";
+	private final static String PASSWORD_KEY = "encryptedPassword";
+
+	/**
+	 * The length of the randomly generated password in bytes
+	 */
+	private final static int PASSWORD_LENGTH = 250;
+
+	public PBEKeySpec getPassword(IPreferencesContainer container, int passwordType) {
+		byte[] encryptedPassword;
+		if ((passwordType & CREATE_NEW_PASSWORD) == 0)
+			encryptedPassword = getEncryptedPassword(container);
+		else
+			encryptedPassword = null;
+		
+		if (encryptedPassword != null) {
+			byte[] decryptedPassword = windecrypt(encryptedPassword);
+			if (decryptedPassword != null) {
+				String password = new String(decryptedPassword);
+				return new PBEKeySpec(password.toCharArray());
+			} else {
+				StorageException e = new StorageException(StorageException.ENCRYPTION_ERROR, WinCryptoMessages.decryptPasswordFailed);
+				AuthPlugin.getDefault().logError(WinCryptoMessages.decryptPasswordFailed, e);
+				return null;
+			}
+		}
+
+		// add info message in the log
+		AuthPlugin.getDefault().logMessage(WinCryptoMessages.newPasswordGenerated);
+		
+		byte[] rawPassword = new byte[PASSWORD_LENGTH];
+		SecureRandom random = new SecureRandom();
+		random.setSeed(System.currentTimeMillis());
+		random.nextBytes(rawPassword);
+		String password = Base64.encode(rawPassword);
+		if (savePassword(password, container))
+			return new PBEKeySpec(password.toCharArray());
+		else
+			return null;
+	}
+
+	private byte[] getEncryptedPassword(IPreferencesContainer container) {
+		ISecurePreferences node = container.getPreferences().node(WIN_PROVIDER_NODE);
+		String passwordHint; 
+		try {
+			passwordHint = node.get(PASSWORD_KEY, null);
+		} catch (StorageException e) { // should never happen in this scenario
+			AuthPlugin.getDefault().logError(WinCryptoMessages.decryptPasswordFailed, e);
+			return null;
+		}
+		if (passwordHint == null)
+			return null;
+		return Base64.decode(passwordHint);
+	}
+
+	private boolean savePassword(String password, IPreferencesContainer container){
+		byte[] data = winencrypt(password.getBytes());
+		if (data == null) { // this is bad. Something wrong with OS or JNI.
+			StorageException e = new StorageException(StorageException.ENCRYPTION_ERROR, WinCryptoMessages.encryptPasswordFailed);
+			AuthPlugin.getDefault().logError(WinCryptoMessages.encryptPasswordFailed, e);
+			return false;
+		}
+		String encodedEncryptyedPassword = Base64.encode(data);
+		ISecurePreferences node = container.getPreferences().node(WIN_PROVIDER_NODE);
+		try {
+			node.put(PASSWORD_KEY, encodedEncryptyedPassword, false); // note we don't recursively try to encrypt
+		} catch (StorageException e) { // should never happen in this scenario
+			AuthPlugin.getDefault().logError(SecAuthMessages.errorOnSave, e);
+			return false;
+		}
+		try {
+			node.flush(); // save right away
+		} catch (IOException e) {
+			AuthPlugin.getDefault().logError(SecAuthMessages.errorOnSave, e);
+			return false;
+		}
+		return true;
+	}
+
+	public boolean retryOnError(Exception e, IPreferencesContainer container) {
+		// It would be rather dangerous to allow this password to be changed
+		// as it would permanently trash all entries in the secure storage.
+		// Rather applications using get...() should handle exceptions and offer to overwrite 
+		// data on an entry-by-entry scale.
+		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java
new file mode 100644
index 0000000..71735e0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.internal.security.win32.nls;
+
+import org.eclipse.osgi.util.NLS;
+
+public class WinCryptoMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.equinox.internal.security.win32.nls.messages"; //$NON-NLS-1$
+
+	// Windows module
+	public static String encryptPasswordFailed;
+	public static String decryptPasswordFailed;
+	public static String newPasswordGenerated;
+
+	static {
+		// load message values from bundle file
+		reloadMessages();
+	}
+
+	public static void reloadMessages() {
+		NLS.initializeMessages(BUNDLE_NAME, WinCryptoMessages.class);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties
new file mode 100644
index 0000000..f05aba2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2008, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+## Windows module
+encryptPasswordFailed = Unable to encrypt master password for storage.
+decryptPasswordFailed = Secure storage was unable to retrieve the master password. If secure storage was created using a different Windows account, you'll have to switch back to that account. Alternatively, you can use the password recovery, or delete and re-create secure storage.
+newPasswordGenerated = New keyring password generated. 
diff --git a/eclipse/plugins/org.eclipse.equinox.security/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.security/META-INF/MANIFEST.MF
index c19ccd0..e00573c 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.security/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.security;singleton:=true
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.1.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-Activator: org.eclipse.equinox.internal.security.auth.AuthPlugin
diff --git a/eclipse/plugins/org.eclipse.equinox.security/schema/secureStorage.exsd b/eclipse/plugins/org.eclipse.equinox.security/schema/secureStorage.exsd
index 2031ae3..8df2ff8 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/schema/secureStorage.exsd
+++ b/eclipse/plugins/org.eclipse.equinox.security/schema/secureStorage.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.equinox.security" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
-         <meta.schema plugin="org.eclipse.equinox.security" id="secureStorage" name="Secure strorage modules"/>
+         <meta.schema plugin="org.eclipse.equinox.security" id="secureStorage" name="Secure storage modules"/>
       </appinfo>
       <documentation>
          Describes implementation of the Equinox secure storage module.
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/SecAuthMessages.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/SecAuthMessages.java
index 7e3e397..ef12ec6 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/SecAuthMessages.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/SecAuthMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/messages.properties b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/messages.properties
index b4603e1..86a0969 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/messages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/auth/nls/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/PasswordProviderSelector.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/PasswordProviderSelector.java
index bbdf7ed..798d2a8 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/PasswordProviderSelector.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/PasswordProviderSelector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,7 +72,7 @@ public class PasswordProviderSelector implements IRegistryEventListener {
 	public void stop() {
 		if (instance != null) {
 			IExtensionRegistry registry = RegistryFactory.getRegistry();
-			registry.addListener(instance, EXTENSION_POINT);
+			registry.removeListener(instance);
 			instance = null;
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/SecurePreferencesRoot.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/SecurePreferencesRoot.java
index aa777a8..35f4745 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/SecurePreferencesRoot.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/SecurePreferencesRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/LoginContextFactory.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/LoginContextFactory.java
index 371eda7..8aee889 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/LoginContextFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/LoginContextFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,6 @@ import org.eclipse.equinox.internal.security.auth.SecureContext;
  * <p>
  * This class is not intended to be instantiated or extended by clients.
  * </p>
- * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
 final public class LoginContextFactory {
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/credentials/CredentialsFactory.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/credentials/CredentialsFactory.java
index 3329920..8829ea9 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/credentials/CredentialsFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/credentials/CredentialsFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,6 @@ import org.eclipse.equinox.internal.security.credentials.EquinoxPublicCredential
  * <p>  
  * This class is not intended to be instantiated or extended by clients.
  * </p> 
- * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
 final public class CredentialsFactory {
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/module/ExtensionLoginModule.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/module/ExtensionLoginModule.java
index 8eac809..fb5f00d 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/module/ExtensionLoginModule.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/auth/module/ExtensionLoginModule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,6 @@ import org.eclipse.equinox.internal.security.auth.ext.loader.ExtLoginModuleLoade
  * </p><p>
  * This class should not be extended or instantiated directly.
  * </p>
- * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
 final public class ExtensionLoginModule implements LoginModule {
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/EncodingUtils.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/EncodingUtils.java
index b7555fb..ab3a93e 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/EncodingUtils.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/EncodingUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,6 @@ import org.eclipse.equinox.internal.security.storage.SlashEncode;
  * <p>
  * This class is not intended to be instantiated or extended by clients.
  * </p>
- * @noextend This class is not intended to be subclassed by clients.
  */
 final public class EncodingUtils {
 
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/SecurePreferencesFactory.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/SecurePreferencesFactory.java
index 9270754..67839dc 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/SecurePreferencesFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/SecurePreferencesFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,6 @@ import org.eclipse.equinox.security.storage.provider.IProviderHints;
  * <p>
  * This class is not intended to be instantiated or extended by clients.
  * </p>
- * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
 final public class SecurePreferencesFactory {
diff --git a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/StorageException.java b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/StorageException.java
index f03321c..2aa9b38 100644
--- a/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/StorageException.java
+++ b/eclipse/plugins/org.eclipse.equinox.security/src/org/eclipse/equinox/security/storage/StorageException.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,6 @@ package org.eclipse.equinox.security.storage;
  * <p>
  * This class is not intended to be instantiated or extended by clients.
  * </p>
- * @noextend This class is not intended to be subclassed by clients.
  */
 final public class StorageException extends Exception {
 
diff --git a/eclipse/plugins/org.eclipse.equinox.servletbridge/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.servletbridge/META-INF/MANIFEST.MF
index dc797cf..d147dc3 100644
--- a/eclipse/plugins/org.eclipse.equinox.servletbridge/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.servletbridge/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.servletbridge;singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.100.qualifier
 Bundle-Localization: plugin
 Import-Package: javax.servlet;version="2.3.0",
  javax.servlet.http;version="2.3.0"
diff --git a/eclipse/plugins/org.eclipse.equinox.servletbridge/build.properties b/eclipse/plugins/org.eclipse.equinox.servletbridge/build.properties
index 215a3ac..6437fa0 100644
--- a/eclipse/plugins/org.eclipse.equinox.servletbridge/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.servletbridge/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2009 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java b/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java
index a86b091..52e8c53 100644
--- a/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java
+++ b/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2009 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java b/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java
index 598efda..36a7011 100644
--- a/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java
+++ b/eclipse/plugins/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2005, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/build.properties b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/build.properties
index 3d8dfe4..0b3ade2 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java
index 66de400..c6748e9 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorUtils.java b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorUtils.java
index 84c8c7b..9e2ab18 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorUtils.java
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/src/org/eclipse/equinox/internal/simpleconfigurator/manipulator/SimpleConfiguratorManipulatorUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2008, 2010 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/.externalToolBuilders/Copy built version of simple configurator into metadata generator.launch b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/.externalToolBuilders/Copy built version of simple configurator into metadata generator.launch
deleted file mode 100644
index b68ad48..0000000
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/.externalToolBuilders/Copy built version of simple configurator into metadata generator.launch	
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
-<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.equinox.simpleconfigurator"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="4"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.equinox.simpleconfigurator"/>
-<mapAttribute key="org.eclipse.ui.externaltools.ATTR_ANT_PROPERTIES">
-<mapEntry key="buildDirectory" value="${build_project}/trash"/>
-<mapEntry key="targetFolder" value="${resource_loc:/org.eclipse.equinox.p2.metadata.generator}"/>
-<mapEntry key="eclipse.pdebuild.scripts" value="/D:/eclipse/plugins/org.eclipse.pde.build_3.3.0.v20070312/scripts/"/>
-<mapEntry key="eclipse.running" value="true"/>
-<mapEntry key="thisPlugin" value="${resource_loc:/org.eclipse.equinox.simpleconfigurator}"/>
-<mapEntry key="eclipse.pdebuild.templates" value="/D:/eclipse/plugins/org.eclipse.pde.build_3.3.0.v20070312/templates/"/>
-<mapEntry key="eclipse.pdebuild.home" value="/D:/eclipse/plugins/org.eclipse.pde.build_3.3.0.v20070312/./"/>
-<mapEntry key="eclipse.home" value="D:\eclipse"/>
-<mapEntry key="baseLocation" value="${target_home}"/>
-</mapAttribute>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.equinox.simpleconfigurator/localbuild.xml}"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-</launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/.project b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/.project
index b0cc0f9..4ea0bb9 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/.project
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/.project
@@ -21,16 +21,6 @@
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>LaunchConfigHandle</key>
-					<value><project>/.externalToolBuilders/Copy built version of simple configurator into metadata generator.launch</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
 			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
 			<arguments>
 			</arguments>
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/provisional/configurator/Configurator.java b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/provisional/configurator/Configurator.java
index b288327..a436982 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/provisional/configurator/Configurator.java
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/provisional/configurator/Configurator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/SimpleConfiguratorImpl.java b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/SimpleConfiguratorImpl.java
index 6c6f70e..dbd2aec 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/SimpleConfiguratorImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/SimpleConfiguratorImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ApplyCommand.java b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ApplyCommand.java
index b4bb8b0..9f7152f 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ApplyCommand.java
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ApplyCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ConfiguratorCommandProvider.java b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ConfiguratorCommandProvider.java
index 99a667e..77106d2 100644
--- a/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ConfiguratorCommandProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.simpleconfigurator/src/org/eclipse/equinox/internal/simpleconfigurator/console/ConfiguratorCommandProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2008 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@ import org.eclipse.osgi.framework.console.CommandProvider;
 import org.osgi.framework.BundleContext;
 
 public class ConfiguratorCommandProvider implements CommandProvider {
-	public static final String NEW_LINE = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+	public static final String NEW_LINE = "\r\n"; //$NON-NLS-1$
 
 	private BundleContext context;
 
@@ -52,14 +52,44 @@ public class ConfiguratorCommandProvider implements CommandProvider {
 		new ApplyCommand(interpreter, context, configURL).run();
 	}
 
+	/**
+	 * Handles the help command
+	 * 
+	 * @param intp
+	 * @return description for a particular command or false if there is no command with the specified name
+	 */
+	public Object _help(CommandInterpreter intp) {
+		String commandName = intp.nextArgument();
+		if (commandName == null) {
+			return new Boolean(false);
+		}
+		String help = getHelp(commandName);
+
+		if (help.length() > 0) {
+			return help;
+		}
+		return new Boolean(false);
+	}
+
 	public String getHelp() {
+		return getHelp(null);
+	}
+
+	private String getHelp(String commandName) {
 		StringBuffer help = new StringBuffer();
-		help.append("---"); //$NON-NLS-1$
-		help.append("Configurator Commands"); //$NON-NLS-1$
-		help.append("---"); //$NON-NLS-1$
-		help.append(NEW_LINE);
-		help.append("\tconfapply [<config URL>] - Applies a configuration"); //$NON-NLS-1$
-		help.append(NEW_LINE);
+
+		if (commandName == null) {
+			help.append("---"); //$NON-NLS-1$
+			help.append("Configurator Commands"); //$NON-NLS-1$
+			help.append("---"); //$NON-NLS-1$
+			help.append(NEW_LINE);
+		}
+
+		if (commandName == null || "confapply".equals(commandName)) {
+			help.append("\tconfapply [<config URL>] - Applies a configuration"); //$NON-NLS-1$
+			help.append(NEW_LINE);
+		}
+
 		return help.toString();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/.classpath b/eclipse/plugins/org.eclipse.equinox.supplement/.classpath
index ce73933..64c5e31 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/.classpath
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.equinox.supplement/.settings/org.eclipse.jdt.core.prefs
index f31f250..96f55a7 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue Aug 21 11:27:47 CDT 2007
+#Thu Sep 02 15:43:37 CDT 2010
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -7,24 +7,24 @@ org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
 org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=jsr14
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=error
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
@@ -62,7 +62,6 @@ org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
@@ -72,7 +71,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=en
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -144,7 +143,6 @@ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
 org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.supplement/META-INF/MANIFEST.MF
index 0a72e47..0f66899 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/META-INF/MANIFEST.MF
@@ -2,10 +2,12 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.supplement
-Bundle-Version: 1.3.1.qualifier
+Bundle-Version: 1.4.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.osgi.framework.log;version="1.0",
+Export-Package: org.eclipse.equinox.log;version="1.0",
+ org.eclipse.osgi.framework.eventmgr;version="1.2",
+ org.eclipse.osgi.framework.log;version="1.0",
  org.eclipse.osgi.service.datalocation;version="1.3",
  org.eclipse.osgi.service.debug;version="1.1",
  org.eclipse.osgi.service.environment;version="1.3",
@@ -19,11 +21,13 @@ Export-Package: org.eclipse.osgi.framework.log;version="1.0",
  org.eclipse.osgi.framework.internal.core;x-internal:=true,
  org.eclipse.osgi.framework.internal.reliablefile;x-internal:=true,
  org.eclipse.core.runtime.internal.adaptor;x-internal:=true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ OSGi/Minimum-1.2
 Import-Package: org.osgi.framework,
+ org.osgi.service.log,
  org.osgi.util.tracker,
+ org.eclipse.equinox.log,
+ org.eclipse.osgi.framework.eventmgr,
  org.eclipse.osgi.framework.log,
  org.eclipse.osgi.service.datalocation,
  org.eclipse.osgi.service.debug,
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/build.properties b/eclipse/plugins/org.eclipse.equinox.supplement/build.properties
index ae34811..1f31e36 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/build.properties
@@ -1,6 +1,6 @@
 
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -16,5 +16,10 @@ bin.includes = META-INF/,\
                plugin.properties,\
                about.html
 src.includes = about.html
-jre.compilation.profile = J2SE-1.4
 
+jre.compilation.profile = J2SE-1.5
+
+javacSource=1.5
+javacTarget=jsr14
+
+javacWarnings..=-deadCode,-raw,-unchecked
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java
index d73ef47..aa5d1f4 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java
@@ -22,6 +22,9 @@ import org.eclipse.osgi.util.NLS;
  */
 public class BasicLocation implements Location {
 	static class MockLocker implements Locker {
+		/**
+		 * @throws IOException  
+		 */
 		public boolean lock() throws IOException {
 			// locking always successful
 			return true;
@@ -119,6 +122,9 @@ public class BasicLocation implements Location {
 		return isReadOnly;
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public boolean setURL(URL value, boolean lock) throws IllegalStateException {
 		try {
 			return set(value, lock);
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties
index ecb3dba..c90bb88 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties
@@ -1,6 +1,5 @@
-
 ###############################################################################
-# Copyright (c) 2004, 2009 IBM Corporation and others.
+# Copyright (c) 2004, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -31,8 +30,6 @@ ECLIPSE_STARTUP_NOT_RUNNING=Platform not running
 ECLIPSE_STARTUP_STARTUP_ERROR=Startup error
 ECLIPSE_STARTUP_APP_ERROR=Application error
 ECLIPSE_STARTUP_SHUTDOWN_ERROR=Shutdown error
-ECLIPSE_STARTUP_INVALID_PORT=Invalid console port: {0}
-ECLIPSE_STARTUP_FAILED_FIND=Failed to find/start: {0}
 ECLIPSE_STARTUP_FAILED_INSTALL=Error installing bundle: {0}
 ECLIPSE_STARTUP_FAILED_UNINSTALL=Error uninstalling bundle: {0}
 ECLIPSE_STARTUP_FAILED_START=Error starting bundle: {0}
@@ -59,7 +56,6 @@ ECLIPSE_CONSOLE_BUNDLE_DISABLED_MESSAGE=Bundle disabled at console
 ECLIPSE_CONSOLE_DISABLED_COUNT_MESSAGE={0} disabled bundle(s) in the system
 ECLIPSE_CONSOLE_DISABLED_BUNDLE_HEADER=Bundle   :\t{0} (id={1})
 ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON1=Reason(s):\t{0} (policy={1})
-ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON2=\t\t{0} (policy={1})
 
 #Bundle resolution messages
 ECLIPSE_MISSING_OPTIONAL_REQUIRED_BUNDLE=Missing optionally required bundle {0}.
@@ -85,15 +81,12 @@ parse_errorNameLineColumn=Error parsing manifest at \"{0}\" line \"{1}\" column
 ECLIPSE_CLASSLOADER_CANNOT_GET_HEADERS=Error loading bundle manifest for {0}. Using default auto-activation settings.
 ECLIPSE_CLASSLOADER_CONCURRENT_STARTUP=While loading class "{1}", thread "{0}" timed out waiting ({4}ms) for thread "{2}" to finish starting bundle "{3}". To avoid deadlock, thread "{0}" is proceeding but "{1}" may not be fully initialized.
 ECLIPSE_CLASSLOADER_ACTIVATION=An error occurred while automatically activating bundle {0} ({1}).
-ECLIPSE_CLASSLOADER_GENERATED_EXCEPTION=Generated exception.
-ECLIPSE_CLASSLOADER_ALREADY_STOPPED= The class \"{0}\" cannot be loaded because the system is shutting down and the plug-in \"{1}\" has already been stopped.
 
 #CachedManifest messages
 ECLIPSE_CACHEDMANIFEST_UNEXPECTED_EXCEPTION=Unexpected exception occurred loading manifest for bundle at the location: {0}.
 
 #BundleStopper messages
 ECLIPSE_BUNDLESTOPPER_CYCLES_FOUND=Info: cycle(s) found while stopping bundles: {0}.
-ECLIPSE_BUNDLESTOPPER_ERROR_STOPPING_BUNDLE=Error while stopping \"{0}\".
 
 #Location message
 ECLIPSE_CANNOT_CHANGE_LOCATION = Cannot change the location once it is set.
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java
index a89a25a..527f59a 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,6 @@ public class EclipseAdaptorMsg extends NLS {
 	public static String ECLIPSE_MISSING_HOST;
 	public static String ECLIPSE_CANNOT_CHANGE_LOCATION;
 	public static String ECLIPSE_BUNDLESTOPPER_CYCLES_FOUND;
-	public static String ECLIPSE_BUNDLESTOPPER_ERROR_STOPPING_BUNDLE;
 	public static String ECLIPSE_CACHEDMANIFEST_UNEXPECTED_EXCEPTION;
 
 	public static String fileManager_cannotLock;
@@ -42,8 +41,6 @@ public class EclipseAdaptorMsg extends NLS {
 
 	public static String ECLIPSE_CLASSLOADER_CONCURRENT_STARTUP;
 	public static String ECLIPSE_CLASSLOADER_ACTIVATION;
-	public static String ECLIPSE_CLASSLOADER_ALREADY_STOPPED;
-	public static String ECLIPSE_CLASSLOADER_GENERATED_EXCEPTION;
 
 	public static String ECLIPSE_CONSOLE_COMMANDS_HEADER;
 	public static String ECLIPSE_CONSOLE_HELP_DIAG_COMMAND_DESCRIPTION;
@@ -60,7 +57,6 @@ public class EclipseAdaptorMsg extends NLS {
 	public static String ECLIPSE_CONSOLE_DISABLED_COUNT_MESSAGE;
 	public static String ECLIPSE_CONSOLE_DISABLED_BUNDLE_HEADER;
 	public static String ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON1;
-	public static String ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON2;
 
 	public static String ECLIPSE_STARTUP_ALREADY_RUNNING;
 	public static String ECLIPSE_STARTUP_STARTUP_ERROR;
@@ -73,8 +69,6 @@ public class EclipseAdaptorMsg extends NLS {
 	public static String ECLIPSE_STARTUP_ERROR_BUNDLE_NOT_ACTIVE;
 	public static String ECLIPSE_STARTUP_ERROR_BUNDLE_NOT_RESOLVED;
 	public static String ECLIPSE_STARTUP_BUNDLE_NOT_FOUND;
-	public static String ECLIPSE_STARTUP_INVALID_PORT;
-	public static String ECLIPSE_STARTUP_FAILED_FIND;
 	public static String ECLIPSE_STARTUP_FAILED_UNINSTALL;
 	public static String ECLIPSE_STARTUP_FAILED_INSTALL;
 	public static String ECLIPSE_STARTUP_FAILED_START;
@@ -105,8 +99,6 @@ public class EclipseAdaptorMsg extends NLS {
 
 	public static String ECLIPSE_PLUGIN_EXTRACTION_PROBLEM;
 
-	public static final String NEW_LINE = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-
 	static {
 		// initialize resource bundles
 		NLS.initializeMessages(BUNDLE_NAME, EclipseAdaptorMsg.class);
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java
index 3018e60..ed3e6c1 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class LocationHelper {
 	 * @param trailingSlash flag to indicate a trailing slash on the spec
 	 * @return a URL
 	 */
+	@SuppressWarnings("deprecation")
 	public static URL buildURL(String spec, boolean trailingSlash) {
 		if (spec == null)
 			return null;
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java
new file mode 100644
index 0000000..0167337
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogListener;
+
+/**
+ * Extends the OSGi Log Services <code>LogEntry</code> object to provide additional context information.
+ * Otherwise similarly accessible by registering a <code>LogListener</code> object.
+ * 
+ * @ThreadSafe
+ * @see LogListener
+ * @since 3.7
+ */
+public interface ExtendedLogEntry extends LogEntry {
+
+	/**
+	 * Returns the logger name associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>String</code> containing the logger name associated with this
+	 *         <code>LogEntry</code> object;<code>null</code> if no logger name is
+	 *         associated with this <code>LogEntry</code> object.
+	 */
+	String getLoggerName();
+
+	/**
+	 * Returns the context associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>Object</code> containing the context associated with this
+	 *         <code>LogEntry</code> object;<code>null</code> if no context is
+	 *         associated with this <code>LogEntry</code> object.
+	 */
+	Object getContext();
+
+	/**
+	 * Returns the thread id of the logging thread associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>long</code> containing the thread id associated with this
+	 *         <code>LogEntry</code> object.
+	 */
+	long getThreadId();
+
+	/**
+	 * Returns the thread name of the logging thread associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>String</code> containing the message associated with this
+	 *         <code>LogEntry</code> object.
+	 */
+	String getThreadName();
+
+	/**
+	 * Returns the log sequence number associated with this <code>LogEntry</code>
+	 * object. 
+	 * 
+	 * @return <code>long</code> containing the sequence number associated with this
+	 *         <code>LogEntry</code> object.
+	 */
+	long getSequenceNumber();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java
new file mode 100644
index 0000000..91a576b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.service.log.*;
+
+/**
+ * Extends the OSGi Log Service's LogReaderService to allow better control of log listeners.
+ * @ThreadSafe
+ * @see LogListener
+ * @since 3.7
+ */
+public interface ExtendedLogReaderService extends LogReaderService {
+	/**
+	 * Subscribes to <code>LogEntry</code> objects.
+	 * 
+	 * <p>
+	 * This method registers a <code>LogListener</code> object with the Log Reader
+	 * Service with a <code>LogFilter</code> to allow pre-filtering of interesting log entries.
+	 * The <code>LogListener.logged(LogEntry)</code> method will be
+	 * called for each <code>LogEntry</code> object placed into the log that matches the filter.
+	 * 
+	 * @param listener A <code>LogListener</code> object to register; the
+	 *        <code>LogListener</code> object is used to receive <code>LogEntry</code>
+	 *        objects.
+	 * @param filter A <code>LogFilter</code> object to register; the
+	 *        <code>LogFilter</code> object is used to filter <code>LogEntry</code>
+	 *        objects before sending them to the associated <code>LogListener</code>.
+	 * @see LogListener
+	 * @see LogFilter
+	 * @see LogEntry
+	 * @see LogReaderService#addLogListener(LogListener)
+	 */
+	public void addLogListener(LogListener listener, LogFilter filter);
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogService.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogService.java
new file mode 100644
index 0000000..9b9b8f7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/ExtendedLogService.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogService;
+
+/**
+ * Extends the OSGi <code>Log Service</code> to support the use of named loggers that provide
+ * some additional context when logging.
+ * @ThreadSafe
+ * @see Logger
+ * @since 3.7
+ */
+public interface ExtendedLogService extends LogService, Logger {
+
+	/**
+	 * Returns the <code>Logger<code> object associated with this logger name for the bundle that retrieved this log service.
+	 * If loggerName is null the default <code>Logger</code> for this bundle is returned. 
+	 * 
+	 * @param loggerName The logger name. 
+	 * @return <code>Logger</code> associated with the logger name.
+	 */
+	public Logger getLogger(String loggerName);
+
+	/**
+	 * Returns the logger associated with this logger name and bundle.
+	 * 
+	 * @param loggerName The logger name. 
+	 * @param bundle The bundles associated with this logger. If null the bundle that retrieved this log service is used.
+	 * @return <code>Logger</code> associated with the logger name.
+	* @throws SecurityException if the caller does not have <code>LogPermission[*,LOG]</code>.
+	*/
+	public Logger getLogger(Bundle bundle, String loggerName);
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogFilter.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogFilter.java
new file mode 100644
index 0000000..868fe9e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogFilter.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogEntry;
+
+/**
+ * A <code>LogFilter</code> is used to pre-filter log requests before sending events to a <code>LogListener</code>.
+ * @ThreadSafe
+ * @see ExtendedLogReaderService#addLogListener(org.osgi.service.log.LogListener, LogFilter)
+ * @since 3.7
+ */
+public interface LogFilter {
+
+	/**
+	 * @param bundle The logging bundle
+	 * @param loggerName The name of the <code>Logger<code>
+	 * @param logLevel The log level or severity
+	 * @see LogEntry
+	 * @see Logger
+	 * @see ExtendedLogReaderService#addLogListener(org.osgi.service.log.LogListener, LogFilter)
+	 */
+	boolean isLoggable(Bundle bundle, String loggerName, int logLevel);
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogPermission.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogPermission.java
new file mode 100644
index 0000000..83716de
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogPermission.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+
+/**
+ * Indicates a bundle's authority to log on behalf of other bundles.
+ * 
+ * This permission has only a single action: LOG.
+ * 
+ * @ThreadSafe
+ * @since 3.7
+ */
+public class LogPermission extends Permission {
+	private static final long serialVersionUID = -441193976837153362L;
+	private static final String ALL = "*"; //$NON-NLS-1$
+
+	/**
+	 * The action string <code>log</code>.
+	 */
+	public static final String LOG = "log"; //$NON-NLS-1$
+
+	/**
+	 * Create a new LogPermission.
+	 * 
+	 * @param name Name must be "*".
+	 * @param actions <code>log</code> or "*".
+	 */
+	public LogPermission(String name, String actions) {
+		super(name);
+		if (!name.equals(ALL))
+			throw new IllegalArgumentException("name must be *"); //$NON-NLS-1$
+
+		actions = actions.trim();
+		if (!actions.equalsIgnoreCase(LOG) && !actions.equals(ALL))
+			throw new IllegalArgumentException("actions must be * or log"); //$NON-NLS-1$
+	}
+
+	public boolean equals(Object obj) {
+		return obj instanceof LogPermission;
+	}
+
+	public String getActions() {
+		return LOG;
+	}
+
+	public int hashCode() {
+		return LogPermission.class.hashCode();
+	}
+
+	public boolean implies(Permission permission) {
+		return permission instanceof LogPermission;
+	}
+
+	public PermissionCollection newPermissionCollection() {
+		return new LogPermissionCollection();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogPermissionCollection.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogPermissionCollection.java
new file mode 100644
index 0000000..ff47103
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/LogPermissionCollection.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+/**
+ * Stores a set of <code>LogPermission</code> permissions.
+ *
+ * @ThreadSafe
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.security.PermissionCollection
+ * @since 3.7
+ */
+public final class LogPermissionCollection extends PermissionCollection {
+	private static final long serialVersionUID = -1955409691185916778L;
+	LogPermission logPermission;
+
+	public void add(Permission permission) {
+		if (!(permission instanceof LogPermission))
+			throw new IllegalArgumentException("invalid permission: " + permission); //$NON-NLS-1$
+		if (isReadOnly())
+			throw new SecurityException("attempt to add a LogPermission to a readonly LogPermissionCollection"); //$NON-NLS-1$
+		if (permission != null)
+			logPermission = (LogPermission) permission;
+	}
+
+	public Enumeration<Permission> elements() {
+		return new Enumeration<Permission>() {
+			private boolean hasMore = (logPermission != null);
+
+			public boolean hasMoreElements() {
+				return hasMore;
+			}
+
+			public Permission nextElement() {
+				if (hasMore) {
+					hasMore = false;
+					return logPermission;
+				}
+				throw new NoSuchElementException();
+			}
+		};
+	}
+
+	public boolean implies(Permission permission) {
+		return logPermission != null && logPermission.implies(permission);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/Logger.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/Logger.java
new file mode 100644
index 0000000..049e5cc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/Logger.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+
+/**
+  * Provides named logger support for the OSGi LogService. Otherwise very similar to the <code>LogService</code>.
+  * @ThreadSafe
+  * @see LogService
+ * @since 3.7
+ */
+public interface Logger {
+	/**
+	 * @see LogService#log(int, String)
+	 */
+	public void log(int level, String message);
+
+	/**
+	 * @see LogService#log(int, String, Throwable)
+	 */
+	public void log(int level, String message, Throwable exception);
+
+	/**
+	 * @see LogService#log(ServiceReference, int, String)
+	 */
+	public void log(ServiceReference<?> sr, int level, String message);
+
+	/**
+	 * @see LogService#log(ServiceReference, int, String, Throwable)
+	 */
+	public void log(ServiceReference<?> sr, int level, String message, Throwable exception);
+
+	/**
+	 * Extends the <code>LogService</code>
+	 * Logs a message with a context object
+	 * 
+	 * @param context The context object this message is associated with.
+	 * @param level The log level or severity of the message.
+	 * @param message A human readable string to associate with log entry.
+	 * @see LogService#log(int, String)
+	 */
+	public void log(Object context, int level, String message);
+
+	/**
+	 * Logs a message with an exception associated and a
+	 * context object.
+	 * 
+	 * 
+	 * @param context The context object this message is associated with.
+	 * @param level The log level or severity of the message.
+	 * @param message A human readable string to associate with log entry.
+	 * @param exception The exception associated with this entry
+	 * @see LogService#log(int, String, Throwable)
+	 */
+	public void log(Object context, int level, String message, Throwable exception);
+
+	/**
+	 * Pre-checks if there are LogListeners who are listening for a matching log entry from this <code>Logger</code>. 
+	 * 
+	 * @param level The log level or severity of the message.
+	 * @return <code>boolean</code> True if there a LogListener listening that can handle a log entry for this log level; false otherwise. 
+	 * @see ExtendedLogReaderService#addLogListener(org.osgi.service.log.LogListener, LogFilter)
+	 * @see LogFilter
+	 */
+	public boolean isLoggable(int level);
+
+	/**
+	 * Returns the name associated with this <code>Logger</code>
+	 * object.
+	 * 
+	 * @return <code>String</code> containing the name associated with this
+	 *         <code>Logger</code> object;<code>null</code> if no name is
+	 *         associated.
+	 */
+	public String getName();
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/SynchronousLogListener.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/SynchronousLogListener.java
new file mode 100644
index 0000000..2cb99b7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/equinox/log/SynchronousLogListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.service.log.LogListener;
+
+/**
+ * Marker interface to denotes a log listener that should be called on the logging thread
+ * @see LogListener
+ * @since 3.7
+ */
+public interface SynchronousLogListener extends LogListener {
+	//
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/Debug.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/Debug.java
index 237d374..b9443df 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/Debug.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/Debug.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,11 +21,6 @@ import java.lang.reflect.*;
  */
 public class Debug {
 	/**
-	 * DEBUG flag.  If set to false then the debug statements will be optimized out during compilation.
-	 */
-	public static final boolean DEBUG = true;
-
-	/**
 	 * Indicates if tracing is enabled
 	 */
 	public static boolean DEBUG_ENABLED = false;
@@ -50,6 +45,11 @@ public class Debug {
 	 * Services debug flag.
 	 */
 	public static boolean DEBUG_SERVICES = false; // "debug.services"
+
+	/**
+	 * Hooks debug flag.
+	 */
+	public static boolean DEBUG_HOOKS = false; // "debug.hooks"
 	/**
 	 * Packages debug flag.
 	 */
@@ -115,6 +115,10 @@ public class Debug {
 	 */
 	public static final String OPTION_DEBUG_SERVICES = ECLIPSE_OSGI + "/debug/services"; //$NON-NLS-1$
 	/**
+	 * Services Debug option key.
+	 */
+	public static final String OPTION_DEBUG_HOOKS = ECLIPSE_OSGI + "/debug/hooks"; //$NON-NLS-1$
+	/**
 	 * Packages Debug option key.
 	 */
 	public static final String OPTION_DEBUG_PACKAGES = ECLIPSE_OSGI + "/debug/packages"; //$NON-NLS-1$
@@ -160,6 +164,7 @@ public class Debug {
 			DEBUG_LOADER = dbgOptions.getBooleanOption(OPTION_DEBUG_LOADER, false);
 			DEBUG_EVENTS = dbgOptions.getBooleanOption(OPTION_DEBUG_EVENTS, false);
 			DEBUG_SERVICES = dbgOptions.getBooleanOption(OPTION_DEBUG_SERVICES, false);
+			DEBUG_HOOKS = dbgOptions.getBooleanOption(OPTION_DEBUG_HOOKS, false);
 			DEBUG_PACKAGES = dbgOptions.getBooleanOption(OPTION_DEBUG_PACKAGES, false);
 			DEBUG_MANIFEST = dbgOptions.getBooleanOption(OPTION_DEBUG_MANIFEST, false);
 			DEBUG_FILTER = dbgOptions.getBooleanOption(OPTION_DEBUG_FILTER, false);
@@ -333,14 +338,14 @@ public class Debug {
 		Method[] methods = t.getClass().getMethods();
 
 		int size = methods.length;
-		Class throwable = Throwable.class;
+		Class<?> throwable = Throwable.class;
 
 		for (int i = 0; i < size; i++) {
 			Method method = methods[i];
 
 			if (Modifier.isPublic(method.getModifiers()) && method.getName().startsWith("get") && throwable.isAssignableFrom(method.getReturnType()) && (method.getParameterTypes().length == 0)) { //$NON-NLS-1$
 				try {
-					Throwable nested = (Throwable) method.invoke(t, null);
+					Throwable nested = (Throwable) method.invoke(t, (Object[]) null);
 
 					if ((nested != null) && (nested != t)) {
 						out.println("Nested Exception:"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java
index b1f89c9..de13dcd 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java
@@ -64,7 +64,7 @@ class EclipseDebugTrace implements DebugTrace {
 	/** The value written to the trace file if a null object is being traced */
 	private final static String NULL_VALUE = "<null>"; //$NON-NLS-1$
 	/**  */
-	private final static SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	private final static SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 	/** A lock object used to synchronize access to the trace file */
 	private final static Object writeLock = new Object();
 
@@ -117,7 +117,7 @@ class EclipseDebugTrace implements DebugTrace {
 	 * @param debugOptions Used to determine if the specified bundle symbolic name + option-path has tracing enabled
 	 * @param traceClass The class that the client is using to perform trace API calls
 	 */
-	EclipseDebugTrace(final String bundleSymbolicName, final FrameworkDebugOptions debugOptions, final Class traceClass) {
+	EclipseDebugTrace(final String bundleSymbolicName, final FrameworkDebugOptions debugOptions, final Class<?> traceClass) {
 
 		this.traceClass = traceClass != null ? traceClass.getName() : null;
 		this.debugOptions = debugOptions;
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java
index 445ad49..7c245f6 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java
@@ -14,7 +14,6 @@ import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.*;
-import java.util.Map.Entry;
 import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.service.debug.*;
 import org.osgi.framework.*;
@@ -28,7 +27,7 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
  * 
  * @since 3.1
  */
-public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustomizer {
+public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustomizer<DebugOptionsListener, DebugOptionsListener> {
 
 	private static final String OSGI_DEBUG = "osgi.debug"; //$NON-NLS-1$
 	private static final String OSGI_DEBUG_VERBOSE = "osgi.debug.verbose"; //$NON-NLS-1$
@@ -44,13 +43,13 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 	/** The default name of the .options file if loading when the -debug command-line argument is used */
 	private static final String OPTIONS = ".options"; //$NON-NLS-1$
 	/** A cache of all of the bundles <code>DebugTrace</code> in the format <key,value> --> <bundle name, DebugTrace> */
-	protected final static Map debugTraceCache = new HashMap();
+	protected final static Map<String, DebugTrace> debugTraceCache = new HashMap<String, DebugTrace>();
 	/** The File object to store messages.  This value may be null. */
 	protected File outFile = null;
 	/** Is verbose debugging enabled?  Changing this value causes a new tracing session to start. */
 	protected boolean verboseDebug = true;
 	private volatile BundleContext context;
-	private volatile ServiceTracker listenerTracker;
+	private volatile ServiceTracker<DebugOptionsListener, DebugOptionsListener> listenerTracker;
 
 	/**
 	 * Internal constructor to create a <code>FrameworkDebugOptions</code> singleton object. 
@@ -96,15 +95,14 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 			e.printStackTrace(System.out);
 		}
 		// trim off all the blanks since properties files don't do that.
-		for (Iterator i = options.keySet().iterator(); i.hasNext();) {
-			Object key = i.next();
+		for (Object key : options.keySet()) {
 			options.put(key, ((String) options.get(key)).trim());
 		}
 	}
 
 	public void start(BundleContext bc) {
 		this.context = bc;
-		listenerTracker = new ServiceTracker(bc, DebugOptionsListener.class.getName(), this);
+		listenerTracker = new ServiceTracker<DebugOptionsListener, DebugOptionsListener>(bc, DebugOptionsListener.class.getName(), this);
 		listenerTracker.open();
 	}
 
@@ -126,6 +124,7 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		return FrameworkDebugOptions.singleton;
 	}
 
+	@SuppressWarnings("deprecation")
 	private static URL buildURL(String spec, boolean trailingSlash) {
 		if (spec == null)
 			return null;
@@ -194,13 +193,14 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		}
 	}
 
-	public Map getOptions() {
-		Properties snapShot = new Properties();
+	@SuppressWarnings({"unchecked", "rawtypes"})
+	public Map<String, String> getOptions() {
+		Map<String, String> snapShot = new HashMap<String, String>();
 		synchronized (lock) {
 			if (options != null)
-				snapShot.putAll(options);
+				snapShot.putAll((Map) options);
 			else if (disabledOptions != null)
-				snapShot.putAll(disabledOptions);
+				snapShot.putAll((Map) disabledOptions);
 		}
 		return snapShot;
 	}
@@ -215,10 +215,10 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		synchronized (lock) {
 			if (options != null) {
 				optionsArray = new String[options.size()];
-				final Iterator entrySetIterator = options.entrySet().iterator();
+				final Iterator<Map.Entry<Object, Object>> entrySetIterator = options.entrySet().iterator();
 				int i = 0;
 				while (entrySetIterator.hasNext()) {
-					Map.Entry entry = (Map.Entry) entrySetIterator.next();
+					Map.Entry<Object, Object> entry = entrySetIterator.next();
 					optionsArray[i] = ((String) entry.getKey()) + "=" + ((String) entry.getValue()); //$NON-NLS-1$
 					i++;
 				}
@@ -292,17 +292,18 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		return null;
 	}
 
-	public void setOptions(Map ops) {
+	@SuppressWarnings("cast")
+	public void setOptions(Map<String, String> ops) {
 		if (ops == null)
 			throw new IllegalArgumentException("The options must not be null."); //$NON-NLS-1$
 		Properties newOptions = new Properties();
-		for (Iterator entries = ops.entrySet().iterator(); entries.hasNext();) {
-			Entry entry = (Entry) entries.next();
+		for (Iterator<Map.Entry<String, String>> entries = ops.entrySet().iterator(); entries.hasNext();) {
+			Map.Entry<String, String> entry = entries.next();
 			if (!(entry.getKey() instanceof String) || !(entry.getValue() instanceof String))
 				throw new IllegalArgumentException("Option keys and values must be of type String: " + entry.getKey() + "=" + entry.getValue()); //$NON-NLS-1$ //$NON-NLS-2$
-			newOptions.put(entry.getKey(), ((String) entry.getValue()).trim());
+			newOptions.put(entry.getKey(), entry.getValue().trim());
 		}
-		Set fireChangesTo = null;
+		Set<String> fireChangesTo = null;
 
 		synchronized (lock) {
 			if (options == null) {
@@ -310,9 +311,9 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 				// no events to fire
 				return;
 			}
-			fireChangesTo = new HashSet();
+			fireChangesTo = new HashSet<String>();
 			// first check for removals
-			for (Iterator keys = options.keySet().iterator(); keys.hasNext();) {
+			for (Iterator<Object> keys = options.keySet().iterator(); keys.hasNext();) {
 				String key = (String) keys.next();
 				if (!newOptions.containsKey(key)) {
 					String symbolicName = getSymbolicName(key);
@@ -321,8 +322,8 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 				}
 			}
 			// now check for changes to existing values
-			for (Iterator newEntries = newOptions.entrySet().iterator(); newEntries.hasNext();) {
-				Entry entry = (Entry) newEntries.next();
+			for (Iterator<Map.Entry<Object, Object>> newEntries = newOptions.entrySet().iterator(); newEntries.hasNext();) {
+				Map.Entry<Object, Object> entry = newEntries.next();
 				String existingValue = (String) options.get(entry.getKey());
 				if (!entry.getValue().equals(existingValue)) {
 					String symbolicName = getSymbolicName((String) entry.getKey());
@@ -334,8 +335,8 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 			options = newOptions;
 		}
 		if (fireChangesTo != null)
-			for (Iterator iChanges = fireChangesTo.iterator(); iChanges.hasNext();)
-				optionsChanged((String) iChanges.next());
+			for (Iterator<String> iChanges = fireChangesTo.iterator(); iChanges.hasNext();)
+				optionsChanged(iChanges.next());
 	}
 
 	/*
@@ -404,11 +405,11 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 	 * (non-Javadoc)
 	 * @see org.eclipse.osgi.service.debug.DebugOptions#createTrace(java.lang.String, java.lang.Class)
 	 */
-	public final DebugTrace newDebugTrace(String bundleSymbolicName, Class traceEntryClass) {
+	public final DebugTrace newDebugTrace(String bundleSymbolicName, Class<?> traceEntryClass) {
 
 		DebugTrace debugTrace = null;
 		synchronized (FrameworkDebugOptions.debugTraceCache) {
-			debugTrace = (DebugTrace) FrameworkDebugOptions.debugTraceCache.get(bundleSymbolicName);
+			debugTrace = FrameworkDebugOptions.debugTraceCache.get(bundleSymbolicName);
 			if (debugTrace == null) {
 				debugTrace = new EclipseDebugTrace(bundleSymbolicName, FrameworkDebugOptions.singleton, traceEntryClass);
 				FrameworkDebugOptions.debugTraceCache.put(bundleSymbolicName, debugTrace);
@@ -469,7 +470,7 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 			return;
 		// do not use the service tracker because that is only used to call all listeners initially when they are registered
 		// here we only want the services with the specified name.
-		ServiceReference[] listenerRefs = null;
+		ServiceReference<?>[] listenerRefs = null;
 		try {
 			listenerRefs = bc.getServiceReferences(DebugOptionsListener.class.getName(), "(" + DebugOptions.LISTENER_SYMBOLICNAME + "=" + bundleSymbolicName + ")"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
 		} catch (InvalidSyntaxException e) {
@@ -491,17 +492,17 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		}
 	}
 
-	public Object addingService(ServiceReference reference) {
-		DebugOptionsListener listener = (DebugOptionsListener) context.getService(reference);
+	public DebugOptionsListener addingService(ServiceReference<DebugOptionsListener> reference) {
+		DebugOptionsListener listener = context.getService(reference);
 		listener.optionsChanged(this);
 		return listener;
 	}
 
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<DebugOptionsListener> reference, DebugOptionsListener service) {
 		// nothing
 	}
 
-	public void removedService(ServiceReference reference, Object service) {
+	public void removedService(ServiceReference<DebugOptionsListener> reference, DebugOptionsListener service) {
 		context.ungetService(reference);
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
new file mode 100644
index 0000000..9b575fc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
@@ -0,0 +1,652 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.util.*;
+
+/**
+ * A copy-on-write identity map. Write operations result in copying the underlying data so that
+ * simultaneous read operations are not affected.
+ * This allows for safe, unsynchronized traversal.
+ * 
+ * <p>
+ * Note: This class uses identity for key and value comparison, not equals.
+ * 
+ * @since 3.5
+ */
+public class CopyOnWriteIdentityMap<K, V> implements Map<K, V> {
+	/**
+	 * The empty array singleton instance.
+	 */
+	@SuppressWarnings("rawtypes")
+	private static final Entry[] emptyArray = new Entry[0];
+
+	/**
+	 * The array of entries. This field is volatile so it can be 
+	 * accessed from unsynchronized reader methods.
+	 */
+	private volatile Entry<K, V>[] entries;
+
+	/**
+	 * Creates an empty map.
+	 *
+	 */
+	public CopyOnWriteIdentityMap() {
+		entries = empty();
+	}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param source The CopyOnWriteMap to copy.
+	 */
+	public CopyOnWriteIdentityMap(CopyOnWriteIdentityMap<? extends K, ? extends V> source) {
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] toCopy = (Entry<K, V>[]) source.entries();
+		this.entries = toCopy;
+	}
+
+	/* These methods modify the map and are synchronized. */
+
+	/**
+	 * Add a key, value pair to the map.
+	 * If the key object is already in the map, then its value is replaced with the new value.
+	 * Keys are compared using identity.
+	 *
+	 * @param key The key object to be added to the list.
+	 * @param value The value object to be associated with the key.
+	 * This may be null.
+	 * @return <code>null</code> if the specified key was newly added to the map.
+	 * Otherwise the previous value of the key.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public synchronized V put(K key, V value) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		int size = entries.length;
+		for (int i = 0; i < size; i++) {
+			if (entries[i].key == key) {
+				V v = entries[i].value;
+				if (v == value) {
+					return v;
+				}
+				@SuppressWarnings("unchecked")
+				Entry<K, V>[] newEntries = new Entry[size];
+				System.arraycopy(entries, 0, newEntries, 0, size);
+				newEntries[i] = new Entry<K, V>(key, value);
+				entries = newEntries;
+				return v;
+			}
+		}
+
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] newEntries = new Entry[size + 1];
+		if (size > 0) {
+			System.arraycopy(entries, 0, newEntries, 0, size);
+		}
+		newEntries[size] = new Entry<K, V>(key, value);
+		entries = newEntries;
+		return null;
+	}
+
+	/**
+	 * Add all the entries from the specified map to this map.
+	 * 
+	 * @param source The map whose entries are to be added to this map.
+	 */
+	public void putAll(Map<? extends K, ? extends V> source) {
+		int sourceSize = source.size();
+		if (sourceSize == 0) {
+			return;
+		}
+		if (source instanceof CopyOnWriteIdentityMap<?, ?>) {
+			putAll(((CopyOnWriteIdentityMap<? extends K, ? extends V>) source).entries());
+			return;
+		}
+
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] toCopy = new Entry[sourceSize];
+		Iterator<? extends Map.Entry<? extends K, ? extends V>> iter = source.entrySet().iterator();
+		for (int i = 0; i < sourceSize; i++) {
+			Map.Entry<? extends K, ? extends V> mapEntry = iter.next();
+			toCopy[i] = new Entry<K, V>(mapEntry.getKey(), mapEntry.getValue());
+		}
+		putAll(toCopy);
+	}
+
+	/**
+	 * Add all the keys from the specified array to this map with the value
+	 * <code>null</code>.
+	 * 
+	 * @param keys The array of keys to be added to this map.
+	 */
+	public <L extends K> void putAll(L[] keys) {
+		int sourceSize = keys.length;
+		if (sourceSize == 0) {
+			return;
+		}
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] toCopy = new Entry[sourceSize];
+		for (int i = 0; i < sourceSize; i++) {
+			toCopy[i] = new Entry<K, V>(keys[i], null);
+		}
+		putAll(toCopy);
+	}
+
+	/**
+	 * Add all the entries to this map.
+	 * 
+	 * @param toCopy Array of entries to add to this map.
+	 */
+	private synchronized void putAll(Entry<? extends K, ? extends V>[] toCopy) {
+		int sourceSize = toCopy.length;
+		int size = entries.length;
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] newEntries = new Entry[size + sourceSize];
+		System.arraycopy(entries, 0, newEntries, 0, size);
+		copy: for (int n = 0; n < sourceSize; n++) {
+			@SuppressWarnings("unchecked")
+			Entry<K, V> copy = (Entry<K, V>) toCopy[n];
+			for (int i = 0; i < size; i++) {
+				if (newEntries[i].key == copy.key) {
+					newEntries[i] = copy;
+					continue copy;
+				}
+			}
+			newEntries[size] = copy;
+			size++;
+		}
+		if (size == newEntries.length) {
+			entries = newEntries;
+			return;
+		}
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] e = new Entry[size];
+		System.arraycopy(newEntries, 0, e, 0, size);
+		entries = e;
+	}
+
+	/**
+	 * Remove a key from the map and returns the value associated with the key.
+	 * Key objects are compared using identity.
+	 *
+	 * @param key The key object to be removed from the map.
+	 * @return <code>null</code> if the key was not in the list. 
+	 * Otherwise, the value associated with the key.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public synchronized V remove(Object key) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		int size = entries.length;
+		for (int i = 0; i < size; i++) {
+			if (entries[i].key == key) {
+				V v = entries[i].value;
+				entries = removeEntry(entries, i);
+				return v;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Static method used to return an Entry array with the ith entry removed.
+	 */
+	static <K, V> Entry<K, V>[] removeEntry(final Entry<K, V>[] entries, final int i) {
+		int size = entries.length;
+		if (size == 1) {
+			return empty();
+		}
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] newEntries = new Entry[size - 1];
+		if (i > 0) {
+			System.arraycopy(entries, 0, newEntries, 0, i);
+		}
+		int next = size - 1 - i;
+		if (next > 0) {
+			System.arraycopy(entries, i + 1, newEntries, i, next);
+		}
+		return newEntries;
+	}
+
+	/**
+	 * Remove all entries from the map.
+	 * 
+	 */
+	public synchronized void clear() {
+		entries = empty();
+	}
+
+	/* These methods only read the map and are not synchronized. */
+
+	/**
+	 * Accessor for methods which only read the entries.
+	 * @return The array of entries. Callers to this method MUST NOT
+	 * modify the returned array.
+	 */
+	private Entry<K, V>[] entries() {
+		return entries;
+	}
+
+	/**
+	 * Return the static empty array generically type safe.
+	 * @return The empty array of entries.
+	 */
+	@SuppressWarnings("unchecked")
+	static <K, V> Entry<K, V>[] empty() {
+		return emptyArray;
+	}
+
+	/**
+	 * Is the map empty?
+	 * 
+	 * @return <code>true</code> if the list is empty.
+	 */
+	public boolean isEmpty() {
+		return size() == 0;
+	}
+
+	/**
+	 * Return the number of entries in the map.
+	 * 
+	 * @return The number of entries in the map.
+	 */
+	public int size() {
+		return entries().length;
+	}
+
+	/**
+	 * Return the value object for the specified key.
+	 * Keys are compared using identity.
+	 * 
+	 * @param key The key object.
+	 * @return The value object for the specified key.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public V get(Object key) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		Entry<K, V>[] e = entries();
+		for (int i = 0; i < e.length; i++) {
+			if (e[i].key == key) {
+				return e[i].value;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Check if the map contains the specified key.
+	 * Keys are compared using identity.
+	 * 
+	 * @param key The key object.
+	 * @return <code>true</code> if the specified key is in the map.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public boolean containsKey(Object key) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		Entry<K, V>[] e = entries();
+		for (int i = 0; i < e.length; i++) {
+			if (e[i].key == key) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Check if the map contains the specified value.
+	 * Values are compared using identity.
+	 * 
+	 * @param value The value object.
+	 * @return <code>true</code> if the specified value is in the map.
+	 */
+	public boolean containsValue(Object value) {
+		Entry<K, V>[] e = entries();
+		for (int i = 0; i < e.length; i++) {
+			if (e[i].value == value) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns a snapshot of the entries in this map.
+	 * Changes to the returned set or this map will not affect each other.
+	 * 
+	 * @return A Set of Map.Entry for each entry in this map.
+	 * The entries returned by the set cannot be modified.
+	 */
+	public Set<Map.Entry<K, V>> entrySet() {
+		return new Snapshot<K, V>(entries()).entrySet();
+	}
+
+	/**
+	 * Returns a snapshot of the keys in this map.
+	 * Changes to the returned set or this map will not affect each other.
+	 * 
+	 * @return A Set of the key objects in this map
+	 */
+	public Set<K> keySet() {
+		return new Snapshot<K, V>(entries()).keySet();
+	}
+
+	/**
+	 * Returns a snapshot of the values in this map.
+	 * Changes to the returned set or this map will not affect each other.
+	 * 
+	 * @return A Collection of the value objects in this map.
+	 */
+	public Collection<V> values() {
+		return new Snapshot<K, V>(entries()).values();
+	}
+
+	/**
+	 * This class represents the entry in this identity map.
+	 * Entry is immutable.
+	 */
+	static private final class Entry<K, V> implements Map.Entry<K, V> {
+		/**
+		 * Key object.
+		 */
+		final K key;
+
+		/**
+		 * Value object.
+		 */
+		final V value;
+
+		/**
+		 * Constructor for map entry.
+		 * @param key Key object in entry. Used for uniqueness.
+		 * @param value Value object stored with key object.
+		 */
+		Entry(final K key, final V value) {
+			this.key = key;
+			this.value = value;
+		}
+
+		public K getKey() {
+			return key;
+		}
+
+		public V getValue() {
+			return value;
+		}
+
+		public V setValue(V value) {
+			throw new UnsupportedOperationException(); // entries cannot be modified.
+		}
+
+		public String toString() {
+			return key + "=" + value; //$NON-NLS-1$
+		}
+
+		public int hashCode() {
+			return System.identityHashCode(key) ^ System.identityHashCode(value);
+		}
+
+		public boolean equals(Object obj) {
+			if (obj == this) {
+				return true;
+			}
+
+			if (!(obj instanceof Map.Entry)) {
+				return false;
+			}
+
+			Map.Entry<?, ?> e = (Map.Entry<?, ?>) obj;
+			return (key == e.getKey()) && (value == e.getValue());
+		}
+	}
+
+	/**
+	 * A snapshot of the entries in the map. This snapshot used by
+	 * the map collection views. Changes made by the collection 
+	 * views only mutate the snapshot and not the map. The collection
+	 * views only allow removal not addition.
+	 */
+	static private final class Snapshot<K, V> {
+		volatile Entry<K, V>[] entries;
+
+		Snapshot(Entry<K, V>[] e) {
+			entries = e;
+		}
+
+		Entry<K, V>[] entries() {
+			return entries;
+		}
+
+		synchronized void removeEntry(int i) {
+			entries = CopyOnWriteIdentityMap.removeEntry(entries, i);
+		}
+
+		synchronized void clearEntries() {
+			entries = CopyOnWriteIdentityMap.empty();
+		}
+
+		Set<Map.Entry<K, V>> entrySet() {
+			return new EntrySet();
+		}
+
+		Set<K> keySet() {
+			return new KeySet();
+		}
+
+		Collection<V> values() {
+			return new ValueCollection();
+		}
+
+		/**
+		 * Entry set view over the snapshot.
+		 */
+		private final class EntrySet extends AbstractSet<Map.Entry<K, V>> {
+			EntrySet() {
+				super();
+			}
+
+			public Iterator<Map.Entry<K, V>> iterator() {
+				return new EntryIterator();
+			}
+
+			public int size() {
+				return entries().length;
+			}
+
+			public boolean remove(Object o) {
+				if (o == null) {
+					throw new IllegalArgumentException();
+				}
+
+				synchronized (Snapshot.this) {
+					int size = entries.length;
+					for (int i = 0; i < size; i++) {
+						if (entries[i].equals(o)) {
+							removeEntry(i);
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+
+			public void clear() {
+				clearEntries();
+			}
+		}
+
+		/** 
+		 * Entry set iterator over the snapshot.
+		 */
+		private final class EntryIterator extends SnapshotIterator<Map.Entry<K, V>> {
+			EntryIterator() {
+				super();
+			}
+
+			public Map.Entry<K, V> next() {
+				return nextEntry();
+			}
+		}
+
+		/**
+		 * Key set view over the snapshot.
+		 */
+		private final class KeySet extends AbstractSet<K> {
+			KeySet() {
+				super();
+			}
+
+			public Iterator<K> iterator() {
+				return new KeyIterator();
+			}
+
+			public int size() {
+				return entries().length;
+			}
+
+			public boolean remove(Object o) {
+				if (o == null) {
+					throw new IllegalArgumentException();
+				}
+
+				synchronized (Snapshot.this) {
+					int size = entries.length;
+					for (int i = 0; i < size; i++) {
+						if (entries[i].key == o) {
+							removeEntry(i);
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+
+			public void clear() {
+				clearEntries();
+			}
+		}
+
+		/** 
+		 * Key set iterator over the snapshot.
+		 */
+		private final class KeyIterator extends SnapshotIterator<K> {
+			KeyIterator() {
+				super();
+			}
+
+			public K next() {
+				return nextEntry().key;
+			}
+		}
+
+		/**
+		 * Value collection view over the snapshot.
+		 */
+		private final class ValueCollection extends AbstractCollection<V> {
+			ValueCollection() {
+				super();
+			}
+
+			public Iterator<V> iterator() {
+				return new ValueIterator();
+			}
+
+			public int size() {
+				return entries().length;
+			}
+
+			public boolean remove(Object o) {
+				if (o == null) {
+					throw new IllegalArgumentException();
+				}
+
+				synchronized (Snapshot.this) {
+					int size = entries.length;
+					for (int i = 0; i < size; i++) {
+						if (entries[i].value == o) {
+							removeEntry(i);
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+
+			public void clear() {
+				clearEntries();
+			}
+		}
+
+		/** 
+		 * Value collection iterator over the snapshot.
+		 */
+		private final class ValueIterator extends SnapshotIterator<V> {
+			ValueIterator() {
+				super();
+			}
+
+			public V next() {
+				return nextEntry().value;
+			}
+		}
+
+		/** 
+		 * Base iterator class handling removal and concurrent modifications.
+		 */
+		private abstract class SnapshotIterator<E> implements Iterator<E> {
+			private int length;
+			private int cursor;
+
+			SnapshotIterator() {
+				length = entries().length;
+				cursor = 0;
+			}
+
+			public final boolean hasNext() {
+				return cursor < length;
+			}
+
+			protected final Entry<K, V> nextEntry() {
+				Entry<K, V>[] e = entries();
+				if (length != e.length) {
+					throw new ConcurrentModificationException();
+				}
+				if (cursor == length) {
+					throw new NoSuchElementException();
+				}
+				return e[cursor++];
+			}
+
+			public final void remove() {
+				if (length != entries().length) {
+					throw new ConcurrentModificationException();
+				}
+				if (cursor == 0) {
+					throw new IllegalStateException();
+				}
+				cursor--;
+				removeEntry(cursor);
+				length = entries().length;
+			}
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
new file mode 100644
index 0000000..18327d4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+/**
+ * The EventDispatcher interface contains the method that is called by the
+ * Event Manager to complete the event delivery to the event listener.
+ * <p>
+ * Clients may implement this interface.
+ * </p>
+ * @since 3.1
+ */
+public interface EventDispatcher<K, V, E> {
+	/**
+	 * This method is called once for each listener.
+	 * This method must cast the event listener object to the appropriate listener
+	 * class for the event type and call the appropriate listener method.
+	 * 
+	 * <p>The method should properly log/handle any exceptions thrown by the called
+	 * listener. The EventManager will ignore any Throwable thrown by this method
+	 * in order to continue delivery of the event to the next listener.
+	 *
+	 * @param eventListener This is the key in the Map.Entry for the listener.
+	 * The implementation of this method must cast it to the appropriate listener
+	 * class for the event to be delivered and the appropriate listener method
+	 * must then be called.
+	 * @param listenerObject This is the value in the Map.Entry for the listener.
+	 * @param eventAction This value was passed to the ListenerQueue object via one of its
+	 * dispatchEvent* method calls. It can provide information (such
+	 * as which listener method to call) so that the EventDispatcher
+	 * can complete the delivery of the event to the listener.
+	 * @param eventObject This object was passed to the ListenerQueue object via one of its
+	 * dispatchEvent* method calls. This object was created by the event source and
+	 * is passed to this method. It should contain all the necessary information (such
+	 * as what event object to pass) so that this method
+	 * can complete the delivery of the event to the listener.
+	 * This is typically the actual event object.
+	 */
+	public void dispatchEvent(K eventListener, V listenerObject, int eventAction, E eventObject);
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java
new file mode 100644
index 0000000..431e4be
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This class manages a list of listeners. 
+ * 
+ * Listeners may be added or removed as necessary.
+ * 
+ * This class uses identity for comparison, not equals.
+ * 
+ * @since 3.1
+ * @deprecated As of 3.5. Replaced by CopyOnWriteIdentityMap.
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class EventListeners<K, V> {
+	private final CopyOnWriteIdentityMap<K, V> list = new CopyOnWriteIdentityMap<K, V>();
+
+	/**
+	 * Creates an empty listener list.
+	 *
+	 */
+	public EventListeners() {
+		super();
+	}
+
+	/**
+	 * Creates an empty listener list.
+	 *
+	 * @param capacity This argument is ignored.
+	 */
+	public EventListeners(int capacity) {
+		this();
+	}
+
+	/**
+	 * Add a listener to the list.
+	 * If a listener object is already in the list, then it is replaced.
+	 * This method calls the put method.
+	 *
+	 * @param listener This is the listener object to be added to the list.
+	 * @param listenerObject This is an optional listener-specific object.
+	 * This object will be passed to the EventDispatcher along with the listener
+	 * when the listener is to be called. This may be null
+	 * @throws IllegalArgumentException If listener is null.
+	 */
+	public void addListener(K listener, V listenerObject) {
+		list.put(listener, listenerObject);
+	}
+
+	/**
+	 * Remove a listener from the list.
+	 * This method calls the remove method.
+	 *
+	 * @param listener This is the listener object to be removed from the list.
+	 * @throws IllegalArgumentException If listener is null.
+	 */
+	public void removeListener(V listener) {
+		list.remove(listener);
+	}
+
+	/**
+	 * Remove all listeners from the list.
+	 * 
+	 * This method calls the clear method.
+	 */
+	public void removeAllListeners() {
+		list.clear();
+	}
+
+	/**
+	 * Get the entry Set from the internal CopyOnWriteIdentityMap.
+	 * @return The entry Set.
+	 */
+	Set<Map.Entry<K, V>> entrySet() {
+		return list.entrySet();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java
new file mode 100644
index 0000000..9e371ee
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java
@@ -0,0 +1,419 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This class is the central class for the Event Manager. Each
+ * program that wishes to use the Event Manager should construct
+ * an EventManager object and use that object to construct
+ * ListenerQueue for dispatching events. CopyOnWriteIdentityMap objects
+ * must be used to manage listener lists.
+ *
+ * <p>This example uses the fictitious SomeEvent class and shows how to use this package 
+ * to deliver a SomeEvent to a set of SomeEventListeners.  
+ * <pre>
+ *
+ * 	// Create an EventManager with a name for an asynchronous event dispatch thread
+ * 	EventManager eventManager = new EventManager("SomeEvent Async Event Dispatcher Thread");
+ * 	// Create a CopyOnWriteIdentityMap to hold the list of SomeEventListeners
+ *	Map eventListeners = new CopyOnWriteIdentityMap();
+ *
+ *	// Add a SomeEventListener to the listener list
+ *	eventListeners.put(someEventListener, null);
+ *
+ *	// Asynchronously deliver a SomeEvent to registered SomeEventListeners
+ *	// Create the listener queue for this event delivery
+ *	ListenerQueue listenerQueue = new ListenerQueue(eventManager);
+ *	// Add the listeners to the queue and associate them with the event dispatcher
+ *	listenerQueue.queueListeners(eventListeners.entrySet(), new EventDispatcher() {
+ *		public void dispatchEvent(Object eventListener, Object listenerObject, 
+ *                                    int eventAction, Object eventObject) {
+ * 			try {
+ *				(SomeEventListener)eventListener.someEventOccured((SomeEvent)eventObject);
+ * 			} catch (Throwable t) {
+ * 				// properly log/handle any Throwable thrown by the listener
+ * 			}
+ *		}
+ *	});
+ *	// Deliver the event to the listeners. 
+ *	listenerQueue.dispatchEventAsynchronous(0, new SomeEvent());
+ *		
+ *	// Remove the listener from the listener list
+ *	eventListeners.remove(someEventListener);
+ *
+ *	// Close EventManager to clean when done to terminate async event dispatch thread.
+ *	// Note that closing the event manager while asynchronously delivering events 
+ *	// may cause some events to not be delivered before the async event dispatch 
+ *	// thread terminates
+ *	eventManager.close();
+ * </pre>
+ * 
+ * <p>At first glance, this package may seem more complicated than necessary
+ * but it has support for some important features. The listener list supports
+ * companion objects for each listener object. This is used by the OSGi framework
+ * to create wrapper objects for a listener which are passed to the event dispatcher.
+ * The ListenerQueue class is used to build a snap shot of the listeners prior to beginning
+ * event dispatch. 
+ * 
+ * The OSGi framework uses a 2 level listener list for each listener type (4 types). 
+ * Level one is managed per framework instance and contains the list of BundleContexts which have 
+ * registered a listener. Level 2 is managed per BundleContext for the listeners in that 
+ * context. This allows all the listeners of a bundle to be easily and atomically removed from 
+ * the level one list. To use a "flat" list for all bundles would require the list to know which 
+ * bundle registered a listener object so that the list could be traversed when stopping a bundle 
+ * to remove all the bundle's listeners. 
+ * 
+ * When an event is fired, a snapshot list (ListenerQueue) must be made of the current listeners before delivery 
+ * is attempted. The snapshot list is necessary to allow the listener list to be modified while the 
+ * event is being delivered to the snapshot list. The memory cost of the snapshot list is
+ * low since the ListenerQueue object uses the copy-on-write semantics 
+ * of the CopyOnWriteIdentityMap. This guarantees the snapshot list is never modified once created.
+ * 
+ * The OSGi framework also uses a 2 level dispatch technique (EventDispatcher).
+ * Level one dispatch is used by the framework to add the level 2 listener list of each 
+ * BundleContext to the snapshot in preparation for delivery of the event.
+ * Level 2 dispatch is used as the final event deliverer and must cast the listener 
+ * and event objects to the proper type before calling the listener. Level 2 dispatch
+ * will cancel delivery of an event 
+ * to a bundle that has stopped between the time the snapshot was created and the
+ * attempt was made to deliver the event.
+ * 
+ * <p> The highly dynamic nature of the OSGi framework had necessitated these features for 
+ * proper and efficient event delivery.  
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class EventManager {
+	static final boolean DEBUG = false;
+
+	/**
+	 * EventThread for asynchronous dispatch of events.
+	 * Access to this field must be protected by a synchronized region.
+	 */
+	private EventThread<?, ?, ?> thread;
+
+	/** 
+	 * Once closed, an attempt to create a new EventThread will result in an 
+	 * IllegalStateException. 
+	 */
+	private boolean closed;
+
+	/**
+	 * Thread name used for asynchronous event delivery
+	 */
+	protected final String threadName;
+
+	/**
+	 * The thread group used for asynchronous event delivery
+	 */
+	protected final ThreadGroup threadGroup;
+
+	/**
+	 * EventManager constructor. An EventManager object is responsible for
+	 * the delivery of events to listeners via an EventDispatcher.
+	 *
+	 */
+	public EventManager() {
+		this(null, null);
+	}
+
+	/**
+	 * EventManager constructor. An EventManager object is responsible for
+	 * the delivery of events to listeners via an EventDispatcher.
+	 *
+	 * @param threadName The name to give the event thread associated with
+	 * this EventManager.  A <code>null</code> value is allowed.
+	 */
+	public EventManager(String threadName) {
+		this(threadName, null);
+	}
+
+	/**
+	 * EventManager constructor. An EventManager object is responsible for
+	 * the delivery of events to listeners via an EventDispatcher.
+	 *
+	 * @param threadName The name to give the event thread associated with
+	 * this EventManager.  A <code>null</code> value is allowed.
+	 * @param threadGroup The thread group to use for the asynchronous event
+	 * thread associated with this EventManager. A <code>null</code> value is allowed.
+	 * @since 3.4
+	 */
+	public EventManager(String threadName, ThreadGroup threadGroup) {
+		thread = null;
+		closed = false;
+		this.threadName = threadName;
+		this.threadGroup = threadGroup;
+	}
+
+	/**
+	 * This method can be called to release any resources associated with this
+	 * EventManager.
+	 * <p>
+	 * Closing this EventManager while it is asynchronously delivering events 
+	 * may cause some events to not be delivered before the async event dispatch 
+	 * thread terminates.
+	 */
+	public synchronized void close() {
+		if (closed) {
+			return;
+		}
+		if (thread != null) {
+			thread.close();
+			thread = null;
+		}
+		closed = true;
+	}
+
+	/**
+	 * Returns the EventThread to use for dispatching events asynchronously for
+	 * this EventManager.
+	 *
+	 * @return EventThread to use for dispatching events asynchronously for
+	 * this EventManager.
+	 */
+	synchronized <K, V, E> EventThread<K, V, E> getEventThread() {
+		if (closed) {
+			throw new IllegalStateException();
+		}
+		if (thread == null) {
+			/* if there is no thread, then create a new one */
+			thread = AccessController.doPrivileged(new PrivilegedAction<EventThread<K, V, E>>() {
+				public EventThread<K, V, E> run() {
+					EventThread<K, V, E> t = new EventThread<K, V, E>(threadGroup, threadName);
+					return t;
+				}
+			});
+			/* start the new thread */
+			thread.start();
+		}
+
+		@SuppressWarnings("unchecked")
+		EventThread<K, V, E> result = (EventThread<K, V, E>) thread;
+		return result;
+	}
+
+	/**
+	 * This method calls the EventDispatcher object to complete the dispatch of
+	 * the event. If there are more elements in the list, call dispatchEvent
+	 * on the next item on the list.
+	 * This method is package private.
+	 *
+	 * @param listeners A Set of entries from a CopyOnWriteIdentityMap map.
+	 * @param dispatcher Call back object which is called to complete the delivery of
+	 * the event.
+	 * @param eventAction This value was passed by the event source and
+	 * is passed to this method. This is passed on to the call back object.
+	 * @param eventObject This object was created by the event source and
+	 * is passed to this method. This is passed on to the call back object.
+	 */
+	static <K, V, E> void dispatchEvent(Set<Map.Entry<K, V>> listeners, EventDispatcher<K, V, E> dispatcher, int eventAction, E eventObject) {
+		for (Map.Entry<K, V> listener : listeners) { /* iterate over the list of listeners */
+			final K eventListener = listener.getKey();
+			final V listenerObject = listener.getValue();
+			try {
+				/* Call the EventDispatcher to complete the delivery of the event. */
+				dispatcher.dispatchEvent(eventListener, listenerObject, eventAction, eventObject);
+			} catch (Throwable t) {
+				/* Consume and ignore any exceptions thrown by the listener */
+				if (DEBUG) {
+					System.out.println("Exception in " + eventListener); //$NON-NLS-1$
+					t.printStackTrace();
+				}
+			}
+		}
+	}
+
+	/**
+	 * This package private class is used for asynchronously dispatching events.
+	 */
+
+	static class EventThread<K, V, E> extends Thread {
+		private static int nextThreadNumber;
+
+		/**
+		 * Queued is a nested top-level (non-member) class. This class
+		 * represents the items which are placed on the asynch dispatch queue.
+		 * This class is private.
+		 */
+		private static class Queued<K, V, E> {
+			/** listener list for this event */
+			final Set<Map.Entry<K, V>> listeners;
+			/** dispatcher of this event */
+			final EventDispatcher<K, V, E> dispatcher;
+			/** action for this event */
+			final int action;
+			/** object for this event */
+			final E object;
+			/** next item in event queue */
+			Queued<K, V, E> next;
+
+			/**
+			 * Constructor for event queue item
+			 *
+			 * @param l Listener list for this event
+			 * @param d Dispatcher for this event
+			 * @param a Action for this event
+			 * @param o Object for this event
+			 */
+			Queued(Set<Map.Entry<K, V>> l, EventDispatcher<K, V, E> d, int a, E o) {
+				listeners = l;
+				dispatcher = d;
+				action = a;
+				object = o;
+				next = null;
+			}
+		}
+
+		/** item at the head of the event queue */
+		private Queued<K, V, E> head;
+		/** item at the tail of the event queue */
+		private Queued<K, V, E> tail;
+		/** if false the thread must terminate */
+		private volatile boolean running;
+
+		/**
+		 * Constructor for the event thread. 
+		 * @param threadName Name of the EventThread 
+		 */
+		EventThread(ThreadGroup threadGroup, String threadName) {
+			super(threadGroup, threadName == null ? getNextName() : threadName);
+			running = true;
+			head = null;
+			tail = null;
+
+			setDaemon(true); /* Mark thread as daemon thread */
+		}
+
+		private static synchronized String getNextName() {
+			return "EventManagerThread-" + nextThreadNumber++; //$NON-NLS-1$
+		}
+
+		/**
+		 * Constructor for the event thread. 
+		 * @param threadName Name of the EventThread 
+		 */
+		EventThread(String threadName) {
+			this(null, threadName);
+		}
+
+		/**
+		 * Constructor for the event thread.
+		 */
+		EventThread() {
+			this(null, null);
+		}
+
+		/**
+		 * Stop thread.
+		 */
+		void close() {
+			running = false;
+			interrupt();
+		}
+
+		/**
+		 * This method pulls events from
+		 * the queue and dispatches them.
+		 */
+		public void run() {
+			try {
+				while (true) {
+					Queued<K, V, E> item = getNextEvent();
+					if (item == null) {
+						return;
+					}
+					EventManager.dispatchEvent(item.listeners, item.dispatcher, item.action, item.object);
+					// Bug 299589: since the call to getNextEvent() will eventually block for a long time, we need to make sure that the 'item'
+					// variable is cleared of the previous value before the call to getNextEvent(). See VM SPec 2.5.7 for why the compiler 
+					// will not automatically clear this variable for each loop iteration.
+					item = null;
+				}
+			} catch (RuntimeException e) {
+				if (EventManager.DEBUG) {
+					e.printStackTrace();
+				}
+				throw e;
+			} catch (Error e) {
+				if (EventManager.DEBUG) {
+					e.printStackTrace();
+				}
+				throw e;
+			}
+		}
+
+		/**
+		 * This methods takes the input parameters and creates a Queued
+		 * object and queues it.
+		 * The thread is notified.
+		 *
+		 * @param l Listener list for this event
+		 * @param d Dispatcher for this event
+		 * @param a Action for this event
+		 * @param o Object for this event
+		 */
+		synchronized void postEvent(Set<Map.Entry<K, V>> l, EventDispatcher<K, V, E> d, int a, E o) {
+			if (!isAlive()) { /* If the thread is not alive, throw an exception */
+				throw new IllegalStateException();
+			}
+
+			Queued<K, V, E> item = new Queued<K, V, E>(l, d, a, o);
+
+			if (head == null) /* if the queue was empty */
+			{
+				head = item;
+				tail = item;
+			} else /* else add to end of queue */
+			{
+				tail.next = item;
+				tail = item;
+			}
+
+			notify();
+		}
+
+		/**
+		 * This method is called by the thread to remove
+		 * items from the queue so that they can be dispatched to their listeners.
+		 * If the queue is empty, the thread waits.
+		 *
+		 * @return The Queued removed from the top of the queue or null
+		 * if the thread has been requested to stop.
+		 */
+		private synchronized Queued<K, V, E> getNextEvent() {
+			while (running && (head == null)) {
+				try {
+					wait();
+				} catch (InterruptedException e) {
+					// If interrupted, we will loop back up and check running
+				}
+			}
+
+			if (!running) { /* if we are stopping */
+				return null;
+			}
+
+			Queued<K, V, E> item = head;
+			head = item.next;
+			if (head == null) {
+				tail = null;
+			}
+
+			return item;
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
new file mode 100644
index 0000000..40fbf99
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.osgi.framework.eventmgr.EventManager.EventThread;
+
+/**
+ * The ListenerQueue is used to snapshot the list of listeners at the time the event
+ * is fired. The snapshot list is then used to dispatch
+ * events to those listeners. A ListenerQueue object is associated with a
+ * specific EventManager object. ListenerQueue objects constructed with the same
+ * EventManager object will get in-order delivery of events when
+ * using asynchronous delivery. No delivery order is guaranteed for synchronous
+ * delivery to avoid any potential deadly embraces.
+ *
+ * <p>ListenerQueue objects are created as necessary to build a list of listeners
+ * that should receive a specific event or events. Once the list is created, the event
+ * can then be synchronously or asynchronously delivered to the list of
+ * listeners. After the event has been dispatched for delivery, the
+ * ListenerQueue object should be discarded as it is likely the list of listeners is stale.
+ * A new ListenerQueue object should be created when it is time to deliver 
+ * another event. The Sets used to build the list of listeners must not change after being 
+ * added to the list.
+ * @since 3.1
+ */
+public class ListenerQueue<K, V, E> {
+	/**
+	 * EventManager with which this queue is associated.
+	 */
+	protected final EventManager manager;
+	/**
+	 * A list of listener lists.
+	 */
+	private final Map<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>> queue;
+
+	/**
+	 * Once the listener queue has been used to dispatch an event, 
+	 * you cannot add modify the queue.
+	 * Access to this field must be protected by a synchronized region.
+	 */
+	private boolean readOnly;
+
+	/**
+	 * ListenerQueue constructor. This method creates an empty snapshot list.
+	 *
+	 * @param manager The EventManager this queue is associated with.
+	 * @throws IllegalArgumentException If manager is null.
+	 */
+	public ListenerQueue(EventManager manager) {
+		if (manager == null) {
+			throw new IllegalArgumentException();
+		}
+
+		this.manager = manager;
+		queue = new CopyOnWriteIdentityMap<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>>();
+		readOnly = false;
+	}
+
+	/**
+	 * Add a listener list to the snapshot list. This method can be called multiple times, prior to
+	 * calling one of the dispatchEvent methods, to build the set of listeners for the
+	 * delivery of a specific event. The current list of listeners in the specified EventListeners
+	 * object is added to the snapshot list.
+	 *
+	 * @param listeners An EventListeners object to add to the queue. The current listeners
+	 * in the EventListeners object will be called when an event is dispatched.
+	 * @param dispatcher An EventDispatcher object to use when dispatching an event
+	 * to the listeners on the specified EventListeners.
+	 * @throws IllegalStateException If called after one of the dispatch methods has been called.
+	 * @deprecated As of 3.5. Replaced by {@link #queueListeners(Set, EventDispatcher)}.
+	 */
+	public void queueListeners(EventListeners<K, V> listeners, EventDispatcher<K, V, E> dispatcher) {
+		queueListeners(listeners.entrySet(), dispatcher);
+	}
+
+	/**
+	 * Add a set of listeners to the snapshot list. This method can be called multiple times, prior to
+	 * calling one of the dispatchEvent methods, to build the list of listeners for the
+	 * delivery of a specific event. The specified listeners
+	 * are added to the snapshot list.
+	 *
+	 * @param listeners A Set of Map.Entries to add to the queue. This is typically the entrySet
+	 * from a CopyOnWriteIdentityMap object. This set must not change after being added to this
+	 * snapshot list.
+	 * @param dispatcher An EventDispatcher object to use when dispatching an event
+	 * to the specified listeners.
+	 * @throws IllegalStateException If called after one of the dispatch methods has been called.
+	 * @since 3.5
+	 */
+	public synchronized void queueListeners(Set<Map.Entry<K, V>> listeners, EventDispatcher<K, V, E> dispatcher) {
+		if (readOnly) {
+			throw new IllegalStateException();
+		}
+
+		if (!listeners.isEmpty()) {
+			queue.put(listeners, dispatcher); // enqueue the list and its dispatcher
+		}
+	}
+
+	/**
+	 * Asynchronously dispatch an event to the snapshot list. An event dispatch thread
+	 * maintained by the associated EventManager is used to deliver the events.
+	 * This method may return immediately to the caller.
+	 *
+	 * @param eventAction This value is passed to the EventDispatcher.
+	 * @param eventObject This object is passed to the EventDispatcher.
+	 */
+	public void dispatchEventAsynchronous(int eventAction, E eventObject) {
+		synchronized (this) {
+			readOnly = true;
+		}
+		EventThread<K, V, E> eventThread = manager.getEventThread();
+		synchronized (eventThread) { /* synchronize on the EventThread to ensure no interleaving of posting to the event thread */
+			for (Map.Entry<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>> entry : queue.entrySet()) { /* iterate over the list of listener lists */
+				eventThread.postEvent(entry.getKey(), entry.getValue(), eventAction, eventObject);
+			}
+		}
+	}
+
+	/**
+	 * Synchronously dispatch an event to the snapshot list. The event may
+	 * be dispatched on the current thread or an event dispatch thread
+	 * maintained by the associated EventManager.
+	 * This method will not return to the caller until the EventDispatcher
+	 * has been called (and has returned) for each listener on the queue.
+	 *
+	 * @param eventAction This value is passed to the EventDispatcher.
+	 * @param eventObject This object is passed to the EventDispatcher.
+	 */
+	public void dispatchEventSynchronous(int eventAction, E eventObject) {
+		synchronized (this) {
+			readOnly = true;
+		}
+		// We can't guarantee any delivery order for synchronous events.
+		// Attempts to do so result in deadly embraces.
+		for (Map.Entry<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>> entry : queue.entrySet()) { /* iterate over the list of listener lists */
+			EventManager.dispatchEvent(entry.getKey(), entry.getValue(), eventAction, eventObject);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/package.html b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/package.html
similarity index 100%
copy from eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/package.html
copy to eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/eventmgr/package.html
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties
index 1c73f44..4d1897a 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2010 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,10 +10,6 @@
 ###############################################################################
 
 #External Messages for EN locale
-ECLIPSE_OSGI_NAME=Eclipse OSGi Framework
-ECLIPSE_OSGI_VERSION=3.6.0
-OSGI_VERSION=OSGi Service Platform Release 3
-ECLIPSE_COPYRIGHT=Copyright (c) 2003, 2004 IBM Corporation and others. \nAll rights reserved. This program and the accompanying materials \nare made available under the terms of the Eclipse Public License v1.0 \nwhich accompanies this distribution, and is available at \nhttp://www.eclipse.org/legal/epl-v10.html \nContributors: \n     IBM Corporation - initial API and implementation
 OSGI_SYSTEMBUNDLE_CREATE_EXCEPTION=Exception while creating System Bundle: {0}
 OSGI_SYSTEMBUNDLE_DESCRIPTION_ERROR=Unable to construct System Bundle description.
 OSGI_INTERNAL_ERROR=Internal Error in the OSGi framework. Please report this problem.
@@ -30,7 +26,6 @@ BUNDLE_UNRESOLVED_STATE_CONFLICT=The state indicates the bundle is resolved
 BUNDLE_UNRESOLVED_UNSATISFIED_CONSTRAINT_EXCEPTION=The bundle \"{0}\" could not be resolved. Reason: {1}
 BUNDLE_SYSTEMBUNDLE_UNINSTALL_EXCEPTION=The System Bundle cannot be uninstalled
 BUNDLE_READ_EXCEPTION=An error occurred trying to read the bundle
-BUNDLE_CLASSPATH_ENTRY_NOT_FOUND_EXCEPTION=The Bundle-ClassPath entry \"{0}\" was not found in the bundle: {1}
 BUNDLE_NO_CLASSPATH_MATCH=The Bundle-ClassPath does not have any matching entries
 BUNDLE_NOT_IN_FRAMEWORK=The bundle does not exist in the framework: {0}
 BUNDLE_LOADER_ATTACHMENT_ERROR=Cannot attach fragment bundle \"{0}\" to resolved host \"{1}\".  Try refreshing the host bundle.
@@ -38,7 +33,6 @@ BUNDLE_FRAGMENT_CNFE=A fragment bundle cannot load classes: {0}
 BUNDLE_FRAGMENT_START=A fragment bundle cannot be started: {0}
 BUNDLE_FRAGMENT_STOP=A fragment bundle cannot be stopped: {0}
 BUNDLE_TRANSIENT_START_ERROR=The bundle''s start level is not met.  Cannot transient start the bundle: {0}
-BUNDLE_FRAGMENT_IMPORT_CONFLICT=Fragment bundle \"{0}\" attempted to import additional package \"{1}\".  Try refreshing the host bundle \"{2}\".
 BUNDLE_EXTENSION_PERMISSION=Extension bundles must have AllPermission assigned.
 BUNDLE_CNFE_NOT_RESOLVED=Cannot load \"{0}"\ because the bundle \"{1}\" cannot be resolved.
 MANIFEST_INVALID_SPACE=The manifest line \"{0}\" has an invalid leading space '' '' character.
@@ -46,6 +40,7 @@ MANIFEST_INVALID_LINE_NOCOLON=The manifest line \"{0}\" is invalid; it has no co
 MANIFEST_INVALID_HEADER_EXCEPTION=Invalid manifest header {0}: \"{1}\"
 MANIFEST_IOEXCEPTION=An error occurred while reading the manifest file.
 SERVICE_FACTORY_EXCEPTION=Exception in {0}.{1}()
+SERVICE_FACTORY_RECURSION=Recursive ServiceFactory call in {0}.{1}()
 SERVICE_NOT_INSTANCEOF_CLASS_EXCEPTION=The service object is not an instance of the service class {0}
 SERVICE_FACTORY_NOT_INSTANCEOF_CLASS_EXCEPTION={0}.getService() returned a service object that is not an instance of the service class {1}
 SERVICE_OBJECT_NULL_EXCEPTION={0}.getService() returned a null service object
@@ -53,7 +48,6 @@ SERVICE_ARGUMENT_NULL_EXCEPTION=The service parameter is null
 SERVICE_ALREADY_UNREGISTERED_EXCEPTION=The service has been unregistered
 SERVICE_EMPTY_CLASS_LIST_EXCEPTION=The array of service names is empty
 HEADER_DUPLICATE_KEY_EXCEPTION=The key \"{0}\" already exists in another case variation
-FILTER_INVALID=The filter is invalid.
 FILTER_MISSING_LEFTPAREN=Missing ''('' at \"{0}\"
 FILTER_MISSING_RIGHTPAREN=Missing '')'' at \"{0}\"
 FILTER_TRAILING_CHARACTERS=Extraneous trailing characters at \"{0}\"
@@ -65,11 +59,6 @@ FILTER_INVALID_VALUE=Invalid value at \"{0}\"
 STARTLEVEL_EXCEPTION_INVALID_REQUESTED_STARTLEVEL=The requested start level of {0} is invalid.  The value must be a positive integer.
 STARTLEVEL_CANT_CHANGE_SYSTEMBUNDLE_STARTLEVEL=The System Bundle's start level can not be modified.
 
-LAUNCHER_ADAPTOR_ERROR=Unable to create FrameworkAdaptor.
-LAUNCHER_INVALID_PORT=Invalid console port: {0}
-LAUNCHER_COMPONENT_MISSING=Warning: The requested component ''{0}'' is not included in this runtime.
-LAUNCHER_COMPONENT_JAR=Add ''{0}'' to the classpath.
-
 CANNOT_SET_CONTEXTFINDER=The context finder has not been installed.
 
 URL_HANDLER_INCORRECT_TYPE=The service property "{0}" is not the correct type for the service "{1}" registered by the bundle "{2}"
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java
index cb2878b..7cf7336 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2006, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,7 +85,7 @@ public class FrameworkProperties {
 		return properties;
 	}
 
-	public static synchronized void setProperties(Map input) {
+	public static synchronized void setProperties(Map<String, String> input) {
 		if (input == null) {
 			// just use internal props;  note that this will reuse a previous set of properties if they were set
 			internalGetProperties("false"); //$NON-NLS-1$
@@ -93,8 +93,8 @@ public class FrameworkProperties {
 		}
 		properties = null;
 		Properties toSet = internalGetProperties("false"); //$NON-NLS-1$
-		for (Iterator keys = input.keySet().iterator(); keys.hasNext();) {
-			String key = (String) keys.next();
+		for (Iterator<String> keys = input.keySet().iterator(); keys.hasNext();) {
+			String key = keys.next();
 			Object value = input.get(key);
 			if (value instanceof String) {
 				toSet.setProperty(key, (String) value);
@@ -135,7 +135,7 @@ public class FrameworkProperties {
 	public static String decode(String urlString) {
 		//try to use Java 1.4 method if available
 		try {
-			Class clazz = URLDecoder.class;
+			Class<? extends URLDecoder> clazz = URLDecoder.class;
 			Method method = clazz.getDeclaredMethod("decode", new Class[] {String.class, String.class}); //$NON-NLS-1$
 			//first encode '+' characters, because URLDecoder incorrectly converts 
 			//them to spaces on certain class library implementations.
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java
index 88506cf..4ba784d 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@ import org.eclipse.osgi.util.NLS;
 public class Msg extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.osgi.framework.internal.core.ExternalMessages"; //$NON-NLS-1$
 
-	public static String BUNDLE_CLASSPATH_ENTRY_NOT_FOUND_EXCEPTION;
 	public static String MANIFEST_INVALID_HEADER_EXCEPTION;
 	public static String BUNDLE_STATE_CHANGE_EXCEPTION;
 	public static String BUNDLE_UNINSTALLED_EXCEPTION;
@@ -41,9 +40,7 @@ public class Msg extends NLS {
 	public static String BUNDLE_CNFE_NOT_RESOLVED;
 	public static String BUNDLE_LOADER_ATTACHMENT_ERROR;
 
-	public static String BUNDLE_FRAGMENT_IMPORT_CONFLICT;
 	public static String BUNDLE_NO_CLASSPATH_MATCH;
-	public static String FILTER_INVALID;
 
 	public static String FILTER_TERMINATED_ABRUBTLY;
 	public static String FILTER_TRAILING_CHARACTERS;
@@ -58,11 +55,6 @@ public class Msg extends NLS {
 	public static String BUNDLE_INSTALL_RECURSION_EXCEPTION;
 	public static String BUNDLE_INSTALL_SAME_UNIQUEID;
 
-	public static String ECLIPSE_OSGI_NAME;
-	public static String ECLIPSE_OSGI_VERSION;
-	public static String OSGI_VERSION;
-	public static String ECLIPSE_COPYRIGHT;
-
 	public static String OSGI_INTERNAL_ERROR;
 	public static String BUNDLE_NOT_IN_FRAMEWORK;
 	public static String BUNDLE_REFRESH_FAILURE;
@@ -72,17 +64,13 @@ public class Msg extends NLS {
 
 	public static String SERVICE_FACTORY_EXCEPTION;
 	public static String SERVICE_OBJECT_NULL_EXCEPTION;
+	public static String SERVICE_FACTORY_RECURSION;
 
 	public static String STARTLEVEL_EXCEPTION_INVALID_REQUESTED_STARTLEVEL;
 	public static String STARTLEVEL_CANT_CHANGE_SYSTEMBUNDLE_STARTLEVEL;
 
 	public static String BUNDLE_SYSTEMBUNDLE_UNINSTALL_EXCEPTION;
 
-	public static String LAUNCHER_ADAPTOR_ERROR;
-	public static String LAUNCHER_COMPONENT_JAR;
-	public static String LAUNCHER_COMPONENT_MISSING;
-	public static String LAUNCHER_INVALID_PORT;
-
 	public static String HEADER_DUPLICATE_KEY_EXCEPTION;
 	public static String MANIFEST_INVALID_SPACE;
 	public static String MANIFEST_INVALID_LINE_NOCOLON;
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java
index ff4d101..2cbf602 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,9 @@
 
 package org.eclipse.osgi.framework.internal.core;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Simple tokenizer class. Used to parse data.
  */
@@ -62,7 +65,41 @@ public class Tokenizer {
 		return (null);
 	}
 
-	public String getString(String terminals) {
+	public String getEscapedToken(String terminals) {
+		char[] val = value;
+		int cur = cursor;
+		if (cur >= max)
+			return null;
+		StringBuffer sb = new StringBuffer();
+		char c;
+		for (; cur < max; cur++) {
+			c = val[cur];
+			// this is an escaped char
+			if (c == '\\') {
+				cur++; // skip the escape char
+				if (cur == max)
+					break;
+				c = val[cur]; // include the escaped char
+			} else if (terminals.indexOf(c) != -1) {
+				break;
+			}
+			sb.append(c);
+		}
+
+		cursor = cur;
+		return sb.toString();
+	}
+
+	public List<String> getEscapedTokens(String terminals) {
+		List<String> result = new ArrayList<String>();
+		for (String token = getEscapedToken(terminals); token != null; token = getEscapedToken(terminals)) {
+			result.add(token);
+			getChar(); // consume terminal
+		}
+		return result;
+	}
+
+	public String getString(String terminals, String preserveEscapes) {
 		skipWhiteSpace();
 		char[] val = value;
 		int cur = cursor;
@@ -82,6 +119,8 @@ public class Tokenizer {
 						if (cur == max)
 							break;
 						c = val[cur]; // include the escaped char
+						if (preserveEscapes != null && preserveEscapes.indexOf(c) != -1)
+							sb.append('\\'); // must preserve escapes for c
 					} else if (c == '\"') {
 						break;
 					}
@@ -104,6 +143,10 @@ public class Tokenizer {
 		return (null);
 	}
 
+	public String getString(String terminals) {
+		return getString(terminals, null);
+	}
+
 	public char getChar() {
 		int cur = cursor;
 		if (cur < max) {
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
index 1f6ac61..1d6cba7 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -126,7 +126,7 @@ public class ReliableFile {
 	private File referenceFile;
 
 	/** List of checksum file objects: File => specific ReliableFile generation */
-	private static Hashtable cacheFiles = new Hashtable(20);
+	private static Hashtable<File, CacheInfo> cacheFiles = new Hashtable<File, CacheInfo>(20);
 
 	private File inputFile = null;
 	private File outputFile = null;
@@ -193,7 +193,7 @@ public class ReliableFile {
 			String[] files = parent.list();
 			if (files == null)
 				return null;
-			ArrayList list = new ArrayList(defaultMaxGenerations);
+			List<Integer> list = new ArrayList<Integer>(defaultMaxGenerations);
 			if (file.exists())
 				list.add(new Integer(0)); //base file exists
 			for (int i = 0; i < files.length; i++) {
@@ -263,7 +263,7 @@ public class ReliableFile {
 			InputStream is = null;
 			CacheInfo info;
 			synchronized (cacheFiles) {
-				info = (CacheInfo) cacheFiles.get(file);
+				info = cacheFiles.get(file);
 				long timeStamp = file.lastModified();
 				if (info == null || timeStamp != info.timeStamp) {
 					try {
@@ -354,7 +354,7 @@ public class ReliableFile {
 		}
 
 		try {
-			CacheInfo info = (CacheInfo) cacheFiles.get(inputFile);
+			CacheInfo info = cacheFiles.get(inputFile);
 			appendChecksum = info.checksum;
 			OutputStream os = new FileOutputStream(tmpFile);
 			if (info.filetype == FILETYPE_NOSIGNATURE) {
@@ -443,7 +443,7 @@ public class ReliableFile {
 			//  backup files.
 			for (int idx = 0, count = generationCount - rmCount; idx < count; idx++) {
 				File file = new File(parent, name + '.' + generations[idx]);
-				CacheInfo info = (CacheInfo) cacheFiles.get(file);
+				CacheInfo info = cacheFiles.get(file);
 				if (info != null) {
 					if (info.filetype == FILETYPE_CORRUPT)
 						rmCount--;
@@ -623,7 +623,7 @@ public class ReliableFile {
 		if (!directory.isDirectory())
 			throw new IOException("Not a valid directory"); //$NON-NLS-1$
 		String files[] = directory.list();
-		HashSet list = new HashSet(files.length / 2);
+		Set<String> list = new HashSet<String>(files.length / 2);
 		for (int idx = 0; idx < files.length; idx++) {
 			String file = files[idx];
 			int pos = file.lastIndexOf('.');
@@ -642,8 +642,8 @@ public class ReliableFile {
 		}
 		files = new String[list.size()];
 		int idx = 0;
-		for (Iterator iter = list.iterator(); iter.hasNext();) {
-			files[idx++] = (String) iter.next();
+		for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
+			files[idx++] = iter.next();
 		}
 		return files;
 	}
@@ -695,7 +695,7 @@ public class ReliableFile {
 	 */
 	int getSignatureSize() throws IOException {
 		if (inputFile != null) {
-			CacheInfo info = (CacheInfo) cacheFiles.get(inputFile);
+			CacheInfo info = cacheFiles.get(inputFile);
 			if (info != null) {
 				switch (info.filetype) {
 					case FILETYPE_VALID :
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
index a22466d..f177456 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -163,6 +163,7 @@ public class ReliableFileInputStream extends FilterInputStream {
 
 	/**
 	 * Override default available method.
+	 * @throws IOException 
 	 * @see FilterInputStream#available()
 	 */
 	public synchronized int available() throws IOException {
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
index 123894a..638d8ea 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,7 +68,7 @@ public interface FrameworkLog {
 	 * File.
 	 * @throws IOException if any problem occurs while constructing a
 	 * FileWriter from the newFile.  If this exception is thrown the 
-	 * FrameworkLog will not be effected and will continue to use the 
+	 * FrameworkLog will not be affected and will continue to use the 
 	 * current Writer to log messages.
 	 */
 	public void setFile(File newFile, boolean append) throws IOException;
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
index d64a422..5c4a77d 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,15 +55,16 @@ public class FrameworkLogEntry {
 	// It would be nice to rename some of these fields but we cannot change the getter method
 	// names without breaking clients.  Changing only the field names would be confusing.
 	//TODO "entry" has another meaning here - title, summary, tag are better names 
-	private String entry;
-	private String message;
+	private final String entry;
+	private final String message;
 	//TODO get rid of this
-	private int stackCode;
+	private final int stackCode;
 	//TODO: use "reason" or "cause" instead
-	private Throwable throwable;
-	private FrameworkLogEntry[] children;
-	private int severity = 0;
-	private int bundleCode = 0;
+	private final Throwable throwable;
+	private final FrameworkLogEntry[] children;
+	private final int severity;
+	private final int bundleCode;
+	private final Object context;
 
 	/**
 	 * Constructs a new FrameworkLogEntry
@@ -74,11 +75,7 @@ public class FrameworkLogEntry {
 	 * @param children the children
 	 */
 	public FrameworkLogEntry(String entry, String message, int stackCode, Throwable throwable, FrameworkLogEntry[] children) {
-		this.entry = entry;
-		this.message = message;
-		this.stackCode = stackCode;
-		this.throwable = throwable;
-		this.children = children;
+		this(null, entry, 0, 0, message, stackCode, throwable, children);
 	}
 
 	/**
@@ -93,6 +90,23 @@ public class FrameworkLogEntry {
 	 * @since 3.2
 	 */
 	public FrameworkLogEntry(String entry, int severity, int bundleCode, String message, int stackCode, Throwable throwable, FrameworkLogEntry[] children) {
+		this(null, entry, severity, bundleCode, message, stackCode, throwable, children);
+	}
+
+	/**
+	 * Constructs a new FrameworkLogEntry
+	 * @param context the context
+	 * @param entry the entry
+	 * @param severity the severity
+	 * @param bundleCode the bundle code
+	 * @param message the message
+	 * @param stackCode the stack code
+	 * @param throwable the throwable
+	 * @param children the children
+	 * @since 3.7
+	 */
+	public FrameworkLogEntry(Object context, String entry, int severity, int bundleCode, String message, int stackCode, Throwable throwable, FrameworkLogEntry[] children) {
+		this.context = context;
 		this.entry = entry;
 		this.message = message;
 		this.stackCode = stackCode;
@@ -171,4 +185,16 @@ public class FrameworkLogEntry {
 		return bundleCode;
 	}
 
+	/**
+	 * Returns the context associated with this <code>FrameworkLogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>Object</code> containing the context associated with this
+	 *         <code>FrameworkLogEntry</code> object;<code>null</code> if no context is
+	 *         associated with this <code>FrameworkLogEntry</code> object.
+	 * @since 3.7
+	 */
+	public Object getContext() {
+		return context;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/util/SecureAction.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/util/SecureAction.java
index 7a25fb5..2e654b1 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/util/SecureAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/framework/util/SecureAction.java
@@ -30,8 +30,8 @@ public class SecureAction {
 	private AccessControlContext controlContext;
 
 	// This ClassLoader is used in loadSystemClass if System.getClassLoader() returns null
-	static final ClassLoader bootClassLoader = (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-		public Object run() {
+	static final ClassLoader bootClassLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+		public ClassLoader run() {
 			return new ClassLoader(Object.class.getClassLoader()) { /* boot class loader */};
 		}
 	});
@@ -54,9 +54,9 @@ public class SecureAction {
 	 * </pre>
 	 * @return a privileged action object that can be used to construct a SecureAction object.
 	 */
-	public static PrivilegedAction createSecureAction() {
-		return new PrivilegedAction() {
-			public Object run() {
+	public static PrivilegedAction<SecureAction> createSecureAction() {
+		return new PrivilegedAction<SecureAction>() {
+			public SecureAction run() {
 				return new SecureAction();
 			}
 		};
@@ -71,8 +71,8 @@ public class SecureAction {
 	public String getProperty(final String property) {
 		if (System.getSecurityManager() == null)
 			return FrameworkProperties.getProperty(property);
-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<String>() {
+			public String run() {
 				return FrameworkProperties.getProperty(property);
 			}
 		}, controlContext);
@@ -89,8 +89,8 @@ public class SecureAction {
 	public String getProperty(final String property, final String def) {
 		if (System.getSecurityManager() == null)
 			return FrameworkProperties.getProperty(property, def);
-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<String>() {
+			public String run() {
 				return FrameworkProperties.getProperty(property, def);
 			}
 		}, controlContext);
@@ -104,8 +104,8 @@ public class SecureAction {
 	public Properties getProperties() {
 		if (System.getSecurityManager() == null)
 			return FrameworkProperties.getProperties();
-		return (Properties) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Properties>() {
+			public Properties run() {
 				return FrameworkProperties.getProperties();
 			}
 		}, controlContext);
@@ -122,8 +122,8 @@ public class SecureAction {
 		if (System.getSecurityManager() == null)
 			return new FileInputStream(file);
 		try {
-			return (FileInputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws FileNotFoundException {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<FileInputStream>() {
+				public FileInputStream run() throws FileNotFoundException {
 					return new FileInputStream(file);
 				}
 			}, controlContext);
@@ -146,8 +146,8 @@ public class SecureAction {
 		if (System.getSecurityManager() == null)
 			return new FileOutputStream(file.getAbsolutePath(), append);
 		try {
-			return (FileOutputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws FileNotFoundException {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<FileOutputStream>() {
+				public FileOutputStream run() throws FileNotFoundException {
 					return new FileOutputStream(file.getAbsolutePath(), append);
 				}
 			}, controlContext);
@@ -167,11 +167,34 @@ public class SecureAction {
 	public long length(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.length();
-		return ((Long) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Long>() {
+			public Long run() {
 				return new Long(file.length());
 			}
-		}, controlContext)).longValue();
+		}, controlContext).longValue();
+	}
+
+	/**
+	 * Returns the canonical path of a file.  Same as calling
+	 * file.getCanonicalPath().
+	 * @param file a file object
+	 * @return the canonical path of a file.
+	 * @throws IOException on error
+	 */
+	public String getCanonicalPath(final File file) throws IOException {
+		if (System.getSecurityManager() == null)
+			return file.getCanonicalPath();
+		try {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<String>() {
+				public String run() throws IOException {
+					return file.getCanonicalPath();
+				}
+			}, controlContext);
+		} catch (PrivilegedActionException e) {
+			if (e.getException() instanceof IOException)
+				throw (IOException) e.getException();
+			throw (RuntimeException) e.getException();
+		}
 	}
 
 	/**
@@ -183,11 +206,11 @@ public class SecureAction {
 	public boolean exists(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.exists();
-		return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+			public Boolean run() {
 				return file.exists() ? Boolean.TRUE : Boolean.FALSE;
 			}
-		}, controlContext)).booleanValue();
+		}, controlContext).booleanValue();
 	}
 
 	/**
@@ -199,11 +222,11 @@ public class SecureAction {
 	public boolean isDirectory(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.isDirectory();
-		return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+			public Boolean run() {
 				return file.isDirectory() ? Boolean.TRUE : Boolean.FALSE;
 			}
-		}, controlContext)).booleanValue();
+		}, controlContext).booleanValue();
 	}
 
 	/**
@@ -215,11 +238,11 @@ public class SecureAction {
 	public long lastModified(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.lastModified();
-		return ((Long) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Long>() {
+			public Long run() {
 				return new Long(file.lastModified());
 			}
-		}, controlContext)).longValue();
+		}, controlContext).longValue();
 	}
 
 	/**
@@ -231,8 +254,8 @@ public class SecureAction {
 	public String[] list(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.list();
-		return (String[]) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<String[]>() {
+			public String[] run() {
 				return file.list();
 			}
 		}, controlContext);
@@ -250,8 +273,8 @@ public class SecureAction {
 			if (System.getSecurityManager() == null)
 				return new ZipFile(file);
 			try {
-				return (ZipFile) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-					public Object run() throws IOException {
+				return AccessController.doPrivileged(new PrivilegedExceptionAction<ZipFile>() {
+					public ZipFile run() throws IOException {
 						return new ZipFile(file);
 					}
 				}, controlContext);
@@ -286,8 +309,8 @@ public class SecureAction {
 		if (System.getSecurityManager() == null)
 			return new URL(protocol, host, port, file, handler);
 		try {
-			return (URL) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws MalformedURLException {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<URL>() {
+				public URL run() throws MalformedURLException {
 					return new URL(protocol, host, port, file, handler);
 				}
 			}, controlContext);
@@ -309,8 +332,8 @@ public class SecureAction {
 	public Thread createThread(final Runnable target, final String name, final ClassLoader contextLoader) {
 		if (System.getSecurityManager() == null)
 			return createThread0(target, name, contextLoader);
-		return (Thread) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Thread>() {
+			public Thread run() {
 				return createThread0(target, name, contextLoader);
 			}
 		}, controlContext);
@@ -330,11 +353,11 @@ public class SecureAction {
 	 * @param context the BundleContext
 	 * @return a service object
 	 */
-	public Object getService(final ServiceReference reference, final BundleContext context) {
+	public <S> S getService(final ServiceReference<S> reference, final BundleContext context) {
 		if (System.getSecurityManager() == null)
 			return context.getService(reference);
-		return AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<S>() {
+			public S run() {
 				return context.getService(reference);
 			}
 		}, controlContext);
@@ -347,12 +370,12 @@ public class SecureAction {
 	 * @return a Class
 	 * @throws ClassNotFoundException
 	 */
-	public Class forName(final String name) throws ClassNotFoundException {
+	public Class<?> forName(final String name) throws ClassNotFoundException {
 		if (System.getSecurityManager() == null)
 			return Class.forName(name);
 		try {
-			return (Class) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() {
+				public Class<?> run() throws Exception {
 					return Class.forName(name);
 				}
 			}, controlContext);
@@ -370,14 +393,14 @@ public class SecureAction {
 	 * @return a Class
 	 * @throws ClassNotFoundException
 	 */
-	public Class loadSystemClass(final String name) throws ClassNotFoundException {
+	public Class<?> loadSystemClass(final String name) throws ClassNotFoundException {
 		if (System.getSecurityManager() == null) {
 			ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
 			return (systemClassLoader != null) ? systemClassLoader.loadClass(name) : bootClassLoader.loadClass(name);
 		}
 		try {
-			return (Class) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() {
+				public Class<?> run() throws Exception {
 					ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
 					return (systemClassLoader != null) ? systemClassLoader.loadClass(name) : bootClassLoader.loadClass(name);
 				}
@@ -393,12 +416,12 @@ public class SecureAction {
 	 * Opens a ServiceTracker. Same as calling tracker.open()
 	 * @param tracker the ServiceTracker to open.
 	 */
-	public void open(final ServiceTracker tracker) {
+	public void open(final ServiceTracker<?, ?> tracker) {
 		if (System.getSecurityManager() == null) {
 			tracker.open();
 			return;
 		}
-		AccessController.doPrivileged(new PrivilegedAction() {
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
 			public Object run() {
 				tracker.open();
 				return null;
@@ -418,7 +441,7 @@ public class SecureAction {
 			return;
 		}
 		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
+			AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
 				public Object run() throws BundleException {
 					bundle.start(options);
 					return null;
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
index 9e6b3bd..9f9bc25 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
@@ -108,7 +108,7 @@ public interface DebugOptions {
 	 * @return a snapshot of the current options.
 	 * @since 3.6
 	 */
-	public Map /*<String, String>*/getOptions();
+	public Map<String, String> getOptions();
 
 	/**
 	 * Sets the identified option to the identified value.  If debug is 
@@ -134,7 +134,7 @@ public interface DebugOptions {
 	 * @param options the new set of options
 	 * @since 3.6
 	 */
-	public abstract void setOptions(Map /*<String, String>*/options);
+	public abstract void setOptions(Map<String, String> options);
 
 	/**
 	 * Removes the identified option.  If debug is not enabled then
@@ -215,5 +215,5 @@ public interface DebugOptions {
 	 * @return A new or existing <code>DebugTrace</code> object for the specified plug-in ID
 	 * @since 3.5
 	 */
-	public abstract DebugTrace newDebugTrace(String bundleSymbolicName, Class traceEntryClass);
+	public abstract DebugTrace newDebugTrace(String bundleSymbolicName, Class<?> traceEntryClass);
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
index ceda998..3e11409 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,13 +25,14 @@ import org.osgi.framework.Bundle;
 public interface BundleLocalization {
 
 	/**
-	 * The getLocalization method gets a ResourceBundle object for the given
-	 * locale and bundle.
+	 * Returns a <code>ResourceBundle</code> object for the given bundle and locale.
 	 * @param bundle the bundle to get localization for
-	 * @param locale the name of the locale to get
+	 * @param locale the name of the locale to get, or <code>null</code> if
+	 * the default locale is to be used
 	 * 
-	 * @return A <code>ResourceBundle</code> object for the given bundle and locale.
-	 * 		If <code>null</code> is passed for the locale parameter, the default locale is used.
+	 * @return A <code>ResourceBundle</code> object for the given bundle and locale,
+	 * or <code>null</code> is returned if no ResourceBundle object can
+	 * be loaded.
 	 */
 	public ResourceBundle getLocalization(Bundle bundle, String locale);
 }
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
index 3ebfe71..baf06cd 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
@@ -86,7 +86,7 @@ import org.eclipse.osgi.framework.util.SecureAction;
 public final class StorageManager {
 	private static final int FILETYPE_STANDARD = 0;
 	private static final int FILETYPE_RELIABLEFILE = 1;
-	private static final SecureAction secure = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	private static final SecureAction secure = AccessController.doPrivileged(SecureAction.createSecureAction());
 	private static final boolean tempCleanup = Boolean.valueOf(secure.getProperty("osgi.embedded.cleanTempFiles")).booleanValue(); //$NON-NLS-1$
 	private static final boolean openCleanup = Boolean.valueOf(secure.getProperty("osgi.embedded.cleanupOnOpen")).booleanValue(); //$NON-NLS-1$
 	private static final String MANAGER_FOLDER = ".manager"; //$NON-NLS-1$
@@ -320,7 +320,8 @@ public final class StorageManager {
 	public String[] getManagedFiles() {
 		if (!open)
 			return null;
-		Set set = table.keySet();
+		Set<Object> set = table.keySet();
+		@SuppressWarnings("cast")
 		String[] keys = (String[]) set.toArray(new String[set.size()]);
 		String[] result = new String[keys.length];
 		for (int i = 0; i < keys.length; i++)
@@ -494,7 +495,7 @@ public final class StorageManager {
 			}
 		}
 		tableStamp = stamp;
-		for (Enumeration e = diskTable.keys(); e.hasMoreElements();) {
+		for (Enumeration<Object> e = diskTable.keys(); e.hasMoreElements();) {
 			String file = (String) e.nextElement();
 			String value = diskTable.getProperty(file);
 			if (value != null) {
@@ -531,7 +532,7 @@ public final class StorageManager {
 		updateTable();
 
 		Properties props = new Properties();
-		for (Enumeration e = table.keys(); e.hasMoreElements();) {
+		for (Enumeration<Object> e = table.keys(); e.hasMoreElements();) {
 			String file = (String) e.nextElement();
 			Entry entry = (Entry) table.get(file);
 			String value;
@@ -610,9 +611,9 @@ public final class StorageManager {
 
 			//If we are here it is because we are the last instance running. After locking the table and getting its latest content, remove all the backup files and change the table
 			updateTable();
-			Collection managedFiles = table.entrySet();
-			for (Iterator iter = managedFiles.iterator(); iter.hasNext();) {
-				Map.Entry fileEntry = (Map.Entry) iter.next();
+			Collection<Map.Entry<Object, Object>> managedFiles = table.entrySet();
+			for (Iterator<Map.Entry<Object, Object>> iter = managedFiles.iterator(); iter.hasNext();) {
+				Map.Entry<Object, Object> fileEntry = iter.next();
 				String fileName = (String) fileEntry.getKey();
 				Entry info = (Entry) fileEntry.getValue();
 				if (info.getFileType() == FILETYPE_RELIABLEFILE) {
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/ManifestElement.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/ManifestElement.java
index 17e0c48..f19cbd9 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/ManifestElement.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/ManifestElement.java
@@ -86,28 +86,29 @@ public class ManifestElement {
 	/**
 	 * The value of the manifest element.
 	 */
-	protected String value;
+	private final String mainValue;
 
 	/**
 	 * The value components of the manifest element.
 	 */
-	protected String[] valueComponents;
+	private final String[] valueComponents;
 
 	/**
 	 * The table of attributes for the manifest element.
 	 */
-	protected Hashtable attributes;
+	private Hashtable<String, Object> attributes;
 
 	/**
 	 * The table of directives for the manifest element.
 	 */
-	protected Hashtable directives;
+	private Hashtable<String, Object> directives;
 
 	/**
 	 * Constructs an empty manifest element with no value or attributes.
 	 */
-	protected ManifestElement() {
-		super();
+	private ManifestElement(String value, String[] valueComponents) {
+		this.mainValue = value;
+		this.valueComponents = valueComponents;
 	}
 
 	/**
@@ -126,7 +127,7 @@ public class ManifestElement {
 	 * @return the value of the manifest element.
 	 */
 	public String getValue() {
-		return value;
+		return mainValue;
 	}
 
 	/**
@@ -191,7 +192,7 @@ public class ManifestElement {
 	 * 
 	 * @return the enumeration of attribute keys or null if none exist.
 	 */
-	public Enumeration getKeys() {
+	public Enumeration<String> getKeys() {
 		return getTableKeys(attributes);
 	}
 
@@ -201,7 +202,7 @@ public class ManifestElement {
 	 * @param key the key of the attribute
 	 * @param value the value of the attribute
 	 */
-	protected void addAttribute(String key, String value) {
+	private void addAttribute(String key, String value) {
 		attributes = addTableValue(attributes, key, value);
 	}
 
@@ -244,7 +245,7 @@ public class ManifestElement {
 	 * 
 	 * @return the enumeration of directive keys or <code>null</code>
 	 */
-	public Enumeration getDirectiveKeys() {
+	public Enumeration<String> getDirectiveKeys() {
 		return getTableKeys(directives);
 	}
 
@@ -254,14 +255,14 @@ public class ManifestElement {
 	 * @param key the key of the attribute
 	 * @param value the value of the attribute
 	 */
-	protected void addDirective(String key, String value) {
+	private void addDirective(String key, String value) {
 		directives = addTableValue(directives, key, value);
 	}
 
 	/*
 	 * Return the last value associated with the given key in the specified table.
 	 */
-	private String getTableValue(Hashtable table, String key) {
+	private String getTableValue(Hashtable<String, Object> table, String key) {
 		if (table == null)
 			return null;
 		Object result = table.get(key);
@@ -270,15 +271,16 @@ public class ManifestElement {
 		if (result instanceof String)
 			return (String) result;
 
-		ArrayList valueList = (ArrayList) result;
+		@SuppressWarnings("unchecked")
+		List<String> valueList = (List<String>) result;
 		//return the last value
-		return (String) valueList.get(valueList.size() - 1);
+		return valueList.get(valueList.size() - 1);
 	}
 
 	/*
 	 * Return the values associated with the given key in the specified table.
 	 */
-	private String[] getTableValues(Hashtable table, String key) {
+	private String[] getTableValues(Hashtable<String, Object> table, String key) {
 		if (table == null)
 			return null;
 		Object result = table.get(key);
@@ -286,14 +288,15 @@ public class ManifestElement {
 			return null;
 		if (result instanceof String)
 			return new String[] {(String) result};
-		ArrayList valueList = (ArrayList) result;
-		return (String[]) valueList.toArray(new String[valueList.size()]);
+		@SuppressWarnings("unchecked")
+		List<String> valueList = (List<String>) result;
+		return valueList.toArray(new String[valueList.size()]);
 	}
 
 	/*
 	 * Return an enumeration of table keys for the specified table. 
 	 */
-	private Enumeration getTableKeys(Hashtable table) {
+	private Enumeration<String> getTableKeys(Hashtable<String, Object> table) {
 		if (table == null)
 			return null;
 		return table.keys();
@@ -304,19 +307,20 @@ public class ManifestElement {
 	 * for this key, then create an array list from the current value (if necessary) and
 	 * append the new value to the end of the list.
 	 */
-	private Hashtable addTableValue(Hashtable table, String key, String value) {
+	@SuppressWarnings("unchecked")
+	private Hashtable<String, Object> addTableValue(Hashtable<String, Object> table, String key, String value) {
 		if (table == null) {
-			table = new Hashtable(7);
+			table = new Hashtable<String, Object>(7);
 		}
 		Object curValue = table.get(key);
 		if (curValue != null) {
-			ArrayList newList;
+			List<String> newList;
 			// create a list to contain multiple values
-			if (curValue instanceof ArrayList) {
-				newList = (ArrayList) curValue;
+			if (curValue instanceof List) {
+				newList = (List<String>) curValue;
 			} else {
-				newList = new ArrayList(5);
-				newList.add(curValue);
+				newList = new ArrayList<String>(5);
+				newList.add((String) curValue);
 			}
 			newList.add(value);
 			table.put(key, newList);
@@ -341,17 +345,17 @@ public class ManifestElement {
 	public static ManifestElement[] parseHeader(String header, String value) throws BundleException {
 		if (value == null)
 			return (null);
-		ArrayList headerElements = new ArrayList(10);
+		List<ManifestElement> headerElements = new ArrayList<ManifestElement>(10);
 		Tokenizer tokenizer = new Tokenizer(value);
 		parseloop: while (true) {
 			String next = tokenizer.getString(";,"); //$NON-NLS-1$
 			if (next == null)
 				throw new BundleException(NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, header, value), BundleException.MANIFEST_ERROR);
-			ArrayList headerValues = new ArrayList();
+			List<String> headerValues = new ArrayList<String>();
 			StringBuffer headerValue = new StringBuffer(next);
 			headerValues.add(next);
 
-			if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+			if (Debug.DEBUG_MANIFEST)
 				Debug.print("parseHeader: " + next); //$NON-NLS-1$
 			boolean directive = false;
 			char c = tokenizer.getChar();
@@ -375,14 +379,12 @@ public class ManifestElement {
 				if (c == ';' || c == ',' || c == '\0') /* more */{
 					headerValues.add(next);
 					headerValue.append(";").append(next); //$NON-NLS-1$
-					if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+					if (Debug.DEBUG_MANIFEST)
 						Debug.print(";" + next); //$NON-NLS-1$
 				}
 			}
 			// found the header value create a manifestElement for it.
-			ManifestElement manifestElement = new ManifestElement();
-			manifestElement.value = headerValue.toString();
-			manifestElement.valueComponents = (String[]) headerValues.toArray(new String[headerValues.size()]);
+			ManifestElement manifestElement = new ManifestElement(headerValue.toString(), headerValues.toArray(new String[headerValues.size()]));
 
 			// now add any attributes/directives for the manifestElement.
 			while (c == '=' || c == ':') {
@@ -397,11 +399,21 @@ public class ManifestElement {
 					} else
 						directive = true;
 				}
-				String val = tokenizer.getString(";,"); //$NON-NLS-1$
+				// determine if the attribute is the form attr:List<type>
+				String preserveEscapes = null;
+				if (!directive && next.indexOf("List") > 0) { //$NON-NLS-1$
+					Tokenizer listTokenizer = new Tokenizer(next);
+					String attrKey = listTokenizer.getToken(":"); //$NON-NLS-1$
+					if (attrKey != null && listTokenizer.getChar() == ':' && "List".equals(listTokenizer.getToken("<"))) { //$NON-NLS-1$//$NON-NLS-2$
+						// we assume we must preserve escapes for , and "
+						preserveEscapes = "\\,"; //$NON-NLS-1$
+					}
+				}
+				String val = tokenizer.getString(";,", preserveEscapes); //$NON-NLS-1$
 				if (val == null)
 					throw new BundleException(NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, header, value), BundleException.MANIFEST_ERROR);
 
-				if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+				if (Debug.DEBUG_MANIFEST)
 					Debug.print(";" + next + "=" + val); //$NON-NLS-1$ //$NON-NLS-2$
 				try {
 					if (directive)
@@ -421,7 +433,7 @@ public class ManifestElement {
 				}
 			}
 			headerElements.add(manifestElement);
-			if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+			if (Debug.DEBUG_MANIFEST)
 				Debug.println(""); //$NON-NLS-1$
 			if (c == ',') /* another manifest element */
 				continue parseloop;
@@ -433,7 +445,7 @@ public class ManifestElement {
 		if (size == 0)
 			return (null);
 
-		ManifestElement[] result = (ManifestElement[]) headerElements.toArray(new ManifestElement[size]);
+		ManifestElement[] result = headerElements.toArray(new ManifestElement[size]);
 		return (result);
 	}
 
@@ -461,14 +473,14 @@ public class ManifestElement {
 	public static String[] getArrayFromList(String stringList, String separator) {
 		if (stringList == null || stringList.trim().length() == 0)
 			return new String[0];
-		ArrayList list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		StringTokenizer tokens = new StringTokenizer(stringList, separator);
 		while (tokens.hasMoreTokens()) {
 			String token = tokens.nextToken().trim();
 			if (token.length() != 0)
 				list.add(token);
 		}
-		return (String[]) list.toArray(new String[list.size()]);
+		return list.toArray(new String[list.size()]);
 	}
 
 	/**
@@ -486,9 +498,9 @@ public class ManifestElement {
 	 * @throws IOException if an error occurs while reading the manifest
 	 * @return the map with the header/value pairs from the bundle manifest
 	 */
-	public static Map parseBundleManifest(InputStream manifest, Map headers) throws IOException, BundleException {
+	public static Map<String, String> parseBundleManifest(InputStream manifest, Map<String, String> headers) throws IOException, BundleException {
 		if (headers == null)
-			headers = new HashMap();
+			headers = new HashMap<String, String>();
 		BufferedReader br;
 		try {
 			br = new BufferedReader(new InputStreamReader(manifest, "UTF8")); //$NON-NLS-1$
@@ -552,20 +564,20 @@ public class ManifestElement {
 	}
 
 	public String toString() {
-		Enumeration attrKeys = getKeys();
-		Enumeration directiveKeys = getDirectiveKeys();
+		Enumeration<String> attrKeys = getKeys();
+		Enumeration<String> directiveKeys = getDirectiveKeys();
 		if (attrKeys == null && directiveKeys == null)
-			return value;
-		StringBuffer result = new StringBuffer(value);
+			return mainValue;
+		StringBuffer result = new StringBuffer(mainValue);
 		if (attrKeys != null) {
 			while (attrKeys.hasMoreElements()) {
-				String key = (String) attrKeys.nextElement();
+				String key = attrKeys.nextElement();
 				addValues(false, key, getAttributes(key), result);
 			}
 		}
 		if (directiveKeys != null) {
 			while (directiveKeys.hasMoreElements()) {
-				String key = (String) directiveKeys.nextElement();
+				String key = directiveKeys.nextElement();
 				addValues(true, key, getDirectives(key), result);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/NLS.java b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/NLS.java
index 058e4a1..c7776d2 100644
--- a/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/NLS.java
+++ b/eclipse/plugins/org.eclipse.equinox.supplement/src/org/eclipse/osgi/util/NLS.java
@@ -117,19 +117,32 @@ public abstract class NLS {
 	}
 
 	/**
-	 * Initialize the given class with the values from the specified message bundle.
+	 * Initialize the given class with the values from the message properties specified by the
+	 * base name.  The base name specifies a fully qualified base name to a message properties file,
+	 * including the package where the message properties file is located.  The class loader of the 
+	 * specified class will be used to load the message properties resources.
+	 * <p>
+	 * For example, if the locale is set to en_US and <code>org.eclipse.example.nls.messages</code>
+	 * is used as the base name then the following resources will be searched using the class
+	 * loader of the specified class:
+	 * <pre>
+	 *   org/eclipse/example/nls/messages_en_US.properties
+	 *   org/eclipse/example/nls/messages_en.properties
+	 *   org/eclipse/example/nls/messages.properties
+	 * </pre>
+	 * </p>
 	 * 
-	 * @param bundleName fully qualified path of the class name
+	 * @param baseName the base name of a fully qualified message properties file.
 	 * @param clazz the class where the constants will exist
 	 */
-	public static void initializeMessages(final String bundleName, final Class clazz) {
+	public static void initializeMessages(final String baseName, final Class<?> clazz) {
 		if (System.getSecurityManager() == null) {
-			load(bundleName, clazz);
+			load(baseName, clazz);
 			return;
 		}
-		AccessController.doPrivileged(new PrivilegedAction() {
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
 			public Object run() {
-				load(bundleName, clazz);
+				load(baseName, clazz);
 				return null;
 			}
 		});
@@ -231,7 +244,7 @@ public abstract class NLS {
 		if (nlSuffixes == null) {
 			//build list of suffixes for loading resource bundles
 			String nl = Locale.getDefault().toString();
-			ArrayList result = new ArrayList(4);
+			List<String> result = new ArrayList<String>(4);
 			int lastSeparator;
 			while (true) {
 				result.add('_' + nl + EXTENSION);
@@ -242,7 +255,7 @@ public abstract class NLS {
 			}
 			//add the empty suffix last (most general)
 			result.add(EXTENSION);
-			nlSuffixes = (String[]) result.toArray(new String[result.size()]);
+			nlSuffixes = result.toArray(new String[result.size()]);
 		}
 		root = root.replace('.', '/');
 		String[] variants = new String[nlSuffixes.length];
@@ -251,7 +264,7 @@ public abstract class NLS {
 		return variants;
 	}
 
-	private static void computeMissingMessages(String bundleName, Class clazz, Map fieldMap, Field[] fieldArray, boolean isAccessible) {
+	private static void computeMissingMessages(String bundleName, Class<?> clazz, Map<Object, Object> fieldMap, Field[] fieldArray, boolean isAccessible) {
 		// iterate over the fields in the class to make sure that there aren't any empty ones
 		final int MOD_EXPECTED = Modifier.PUBLIC | Modifier.STATIC;
 		final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
@@ -284,7 +297,7 @@ public abstract class NLS {
 	/*
 	 * Load the given resource bundle using the specified class loader.
 	 */
-	static void load(final String bundleName, Class clazz) {
+	static void load(final String bundleName, Class<?> clazz) {
 		long start = System.currentTimeMillis();
 		final Field[] fieldArray = clazz.getDeclaredFields();
 		ClassLoader loader = clazz.getClassLoader();
@@ -293,7 +306,7 @@ public abstract class NLS {
 
 		//build a map of field names to Field objects
 		final int len = fieldArray.length;
-		Map fields = new HashMap(len * 2);
+		Map<Object, Object> fields = new HashMap<Object, Object>(len * 2);
 		for (int i = 0; i < len; i++)
 			fields.put(fieldArray[i].getName(), fieldArray[i]);
 
@@ -374,10 +387,10 @@ public abstract class NLS {
 		private static final long serialVersionUID = 1L;
 
 		private final String bundleName;
-		private final Map fields;
+		private final Map<Object, Object> fields;
 		private final boolean isAccessible;
 
-		public MessagesProperties(Map fieldMap, String bundleName, boolean isAccessible) {
+		public MessagesProperties(Map<Object, Object> fieldMap, String bundleName, boolean isAccessible) {
 			super();
 			this.fields = fieldMap;
 			this.bundleName = bundleName;
diff --git a/eclipse/plugins/org.eclipse.equinox.transforms.hook/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.transforms.hook/META-INF/MANIFEST.MF
index f236b7d..d918465 100644
--- a/eclipse/plugins/org.eclipse.equinox.transforms.hook/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.transforms.hook/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.equinox.transforms.hook
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Fragment-Host: org.eclipse.osgi;bundle-version="[3.2.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: transformsHook
diff --git a/eclipse/plugins/org.eclipse.equinox.transforms.hook/src/org/eclipse/equinox/internal/transforms/TransformedBundleFile.java b/eclipse/plugins/org.eclipse.equinox.transforms.hook/src/org/eclipse/equinox/internal/transforms/TransformedBundleFile.java
index 7f543e1..28e57f6 100644
--- a/eclipse/plugins/org.eclipse.equinox.transforms.hook/src/org/eclipse/equinox/internal/transforms/TransformedBundleFile.java
+++ b/eclipse/plugins/org.eclipse.equinox.transforms.hook/src/org/eclipse/equinox/internal/transforms/TransformedBundleFile.java
@@ -156,7 +156,7 @@ public class TransformedBundleFile extends BundleFile {
 			if (nested != null) {
 				if (nested.exists()) {
 					/* the entry is already cached */
-					if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+					if (Debug.DEBUG_GENERAL)
 						Debug.println("File already present: " + nested.getPath()); //$NON-NLS-1$
 					if (nested.isDirectory())
 						// must ensure the complete directory is extracted (bug
@@ -165,7 +165,7 @@ public class TransformedBundleFile extends BundleFile {
 				} else {
 					if (originalFile.isDirectory()) {
 						if (!nested.mkdirs()) {
-							if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+							if (Debug.DEBUG_GENERAL)
 								Debug.println("Unable to create directory: " + nested.getPath()); //$NON-NLS-1$
 							throw new IOException(NLS.bind(AdaptorMsg.ADAPTOR_DIRECTORY_CREATE_EXCEPTION, nested.getAbsolutePath()));
 						}
@@ -176,12 +176,12 @@ public class TransformedBundleFile extends BundleFile {
 							return null;
 						// if (in instanceof )
 						/* the entry has not been cached */
-						if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+						if (Debug.DEBUG_GENERAL)
 							Debug.println("Creating file: " + nested.getPath()); //$NON-NLS-1$
 						/* create the necessary directories */
 						File dir = new File(nested.getParent());
 						if (!dir.exists() && !dir.mkdirs()) {
-							if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+							if (Debug.DEBUG_GENERAL)
 								Debug.println("Unable to create directory: " + dir.getPath()); //$NON-NLS-1$
 							throw new IOException(NLS.bind(AdaptorMsg.ADAPTOR_DIRECTORY_CREATE_EXCEPTION, dir.getAbsolutePath()));
 						}
@@ -195,7 +195,7 @@ public class TransformedBundleFile extends BundleFile {
 				return nested;
 			}
 		} catch (IOException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+			if (Debug.DEBUG_GENERAL)
 				Debug.printStackTrace(e);
 		}
 		return null;
diff --git a/eclipse/plugins/org.eclipse.equinox.transforms.xslt/about.html b/eclipse/plugins/org.eclipse.equinox.transforms.xslt/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF
index 5d7a387..4807e69 100644
--- a/eclipse/plugins/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF
@@ -1,8 +1,8 @@
+Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Vendor: %bundleVendor
-Bundle-Version: 1.1.200.qualifier
+Bundle-Version: 1.1.300.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.useradmin.Activator
-Bundle-Copyright: %bundleCopyright
 Bundle-SymbolicName: org.eclipse.equinox.useradmin
 Import-Service: org.osgi.service.log.LogService
 Bundle-Name: %bundleName
@@ -13,7 +13,7 @@ Import-Package: org.eclipse.osgi.framework.eventmgr;version="1.1",
  org.osgi.service.event;version="1.0"; resolution:=optional,
  org.osgi.service.log;version="1.0",
  org.osgi.service.prefs;version="1.0",
- org.osgi.service.useradmin;version="1.0",
+ org.osgi.service.useradmin;version="[1.1,1.2)",
  org.osgi.util.tracker;version="1.1"
 Export-Package: org.eclipse.equinox.internal.useradmin;x-internal:=true
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.equinox.useradmin/plugin.properties b/eclipse/plugins/org.eclipse.equinox.useradmin/plugin.properties
index 0c40b74..c3e9f43 100644
--- a/eclipse/plugins/org.eclipse.equinox.useradmin/plugin.properties
+++ b/eclipse/plugins/org.eclipse.equinox.useradmin/plugin.properties
@@ -10,4 +10,3 @@
 ###############################################################################
 bundleVendor = Eclipse.org - Equinox
 bundleName = User Admin Service
-bundleCopyright = Copyright (c) IBM Corp. 2001, 2005
diff --git a/eclipse/plugins/org.eclipse.equinox.util/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.util/META-INF/MANIFEST.MF
index 303ee71..4542d2d 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.util/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-SymbolicName: org.eclipse.equinox.util
 Bundle-Name: %bundleName
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-Activator: org.eclipse.equinox.internal.util.UtilActivator
 Bundle-Description: The Equinox Util Bundle contains services to facilitate bundle developers in their programming, and to lighten resource usage at runtime.
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/TracerMap.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/TracerMap.java
index 08b41fd..ff8634a 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/TracerMap.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/TracerMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/UtilActivator.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/UtilActivator.java
index d971db9..96f989d 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/UtilActivator.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/UtilActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/EventThread.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/EventThread.java
index 34b6386..ffbd7ca 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/EventThread.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/EventThread.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/Queue.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/Queue.java
index e507a9e..0e797dc 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/Queue.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/Queue.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/SystemListener.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/SystemListener.java
index 85bca6a..93034a0 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/SystemListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/event/SystemListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjNS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjNS.java
index 48c2b32..ed361c8 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjNS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjNS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjS.java
index 268db31..2ac35ae 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashIntObjS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjNS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjNS.java
index 175d1eb..be18ecf 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjNS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjNS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjS.java
index 26a380c..dbc299a 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashLongObjS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntNS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntNS.java
index 1b83753..5aaeb4c 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntNS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntNS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntS.java
index 2a7856d..529dbe4 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjIntS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongNS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongNS.java
index b9c3187..d3560aa 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongNS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongNS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongS.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongS.java
index 4e6b039..85c1f09 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongS.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/hash/HashObjLongS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/ServiceFactoryImpl.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/ServiceFactoryImpl.java
index b790426..9a705ea 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/ServiceFactoryImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/ServiceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Executor.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Executor.java
index 1134022..2f6cb2e 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Executor.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Executor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Job.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Job.java
index 1763e24..7aea046 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Job.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/Job.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolFactoryImpl.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolFactoryImpl.java
index 167f00d..a0f4c05 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolFactoryImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolFactoryImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolManagerImpl.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolManagerImpl.java
index 339cb9f..68b826b 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolManagerImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/threadpool/ThreadPoolManagerImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2009 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerFactory.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerFactory.java
index 3dfe75c..9f74366 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerImpl.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerImpl.java
index a8dd50e..839912d 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueue.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueue.java
index 770acae..049eeb6 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueue.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueue.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueueNode.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueueNode.java
index 38b67e5..00ba1f7 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueueNode.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/impl/tpt/timer/TimerQueueNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectCreator.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectCreator.java
index 42c8141..e373feb 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectCreator.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectCreator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectPool.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectPool.java
index 1fa1aab..b7f74fd 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectPool.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/pool/ObjectPool.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/Log.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/Log.java
index 2cc95ff..c58f668 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/Log.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/Log.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/LogInterface.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/LogInterface.java
index c215385..0f55de5 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/LogInterface.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/LogInterface.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/TimerRef.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/TimerRef.java
index ce15746..9e0ec18 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/TimerRef.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/ref/TimerRef.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedAction.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedAction.java
index ca4a309..8bcc46e 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedAction.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedRunner.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedRunner.java
index 1bde9f5..5e3c0f3 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedRunner.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/security/PrivilegedRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -127,7 +127,7 @@ public final class PrivilegedRunner implements ObjectCreator {
 	 * action type and using the given job parameters.
 	 * 
 	 * @author Valentin Valchev
-	 * @version $Revision: 1.1 $
+	 * @version $Revision: 1.2 $
 	 */
 	public static interface PrivilegedDispatcher {
 
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadContext.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadContext.java
index b993951..76cab2c 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadContext.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolFactory.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolFactory.java
index 4f1568e..4056752 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolManager.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolManager.java
index af970e4..d4d6624 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolManager.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/threadpool/ThreadPoolManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/Timer.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/Timer.java
index cd38cf0..e18673d 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/Timer.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/Timer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/TimerListener.java b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/TimerListener.java
index a3d6e4a..cc62b30 100644
--- a/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/TimerListener.java
+++ b/eclipse/plugins/org.eclipse.equinox.util/src/org/eclipse/equinox/internal/util/timer/TimerListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/META-INF/MANIFEST.MF
index 91117e5..ea5cd43 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: WeavingService Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.equinox.weaving.aspectj
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.equinox.weaving.aspectj.AspectJWeavingActivator
 Import-Package: org.aspectj.weaver;version="1.6.3";resolution:=optional,
  org.aspectj.weaver.loadtime;version="1.6.3";resolution:=optional,
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/build.properties b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/build.properties
index 66b927b..f3d682f 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingService.java b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingService.java
index 260387d..780ef81 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingService.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingServiceFactory.java
index 184eb59..805187f 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Martin Lippert and others.
+ * Copyright (c) 2008, 2009 Martin Lippert and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingStarter.java b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingStarter.java
index 1348710..a5dea4a 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingStarter.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/AspectJWeavingStarter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,6 @@
 
 package org.eclipse.equinox.weaving.aspectj;
 
-import java.util.Properties;
-
 import org.eclipse.equinox.service.weaving.IWeavingServiceFactory;
 import org.eclipse.equinox.weaving.aspectj.loadtime.AspectAdminImpl;
 import org.eclipse.osgi.service.debug.DebugOptions;
@@ -79,8 +77,7 @@ public class AspectJWeavingStarter implements BundleActivator {
         final String serviceName = IWeavingServiceFactory.class.getName();
         final IWeavingServiceFactory weavingServiceFactory = new AspectJWeavingServiceFactory(
                 aspectDefinitionRegistry);
-        final Properties props = new Properties();
-        context.registerService(serviceName, weavingServiceFactory, props);
+        context.registerService(serviceName, weavingServiceFactory, null);
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingAdaptor.java b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingAdaptor.java
index 8e6d2ef..03c0136 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingAdaptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingAdaptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingContext.java b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingContext.java
index 6e06d57..7586258 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingContext.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.aspectj/src/org/eclipse/equinox/weaving/aspectj/loadtime/OSGiWeavingContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/META-INF/MANIFEST.MF
index bd21949..6beb7b7 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: J9 CachingService Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.equinox.weaving.caching.j9
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Activator: org.eclipse.equinox.weaving.internal.caching.j9.CachingServicePlugin
 Bundle-ActivationPolicy: lazy
 Import-Package: com.ibm.oti.shared;resolution:=optional,
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/build.properties b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/build.properties
index 02f2e5a..4a6459d 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingService.java b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingService.java
index df3026c..fb3ec85 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingService.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingServicePlugin.java b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingServicePlugin.java
index 3b66cee..5816044 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingServicePlugin.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching.j9/src/org/eclipse/equinox/weaving/internal/caching/j9/CachingServicePlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,7 +75,7 @@ public class CachingServicePlugin implements BundleActivator {
     private void loadOptions(final BundleContext context) {
         // all this is only to get the application args		
         DebugOptions service = null;
-        final ServiceReference reference = context
+        final ServiceReference<?> reference = context
                 .getServiceReference(DebugOptions.class.getName());
         if (reference != null)
             service = (DebugOptions) context.getService(reference);
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.weaving.caching/META-INF/MANIFEST.MF
index bd51e3b..6c5e0eb 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-SymbolicName: org.eclipse.equinox.weaving.caching
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Name: Standard Caching Service for Equinox Aspects (Incubation)
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Activator: org.eclipse.equinox.weaving.internal.caching.Activator
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching/build.properties b/eclipse/plugins/org.eclipse.equinox.weaving.caching/build.properties
index 34d2e4d..67bc05c 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/Activator.java b/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/Activator.java
index fb56c9f..bec6966 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Heiko Seeberger and others.
+ * Copyright (c) 2008, 2010 Heiko Seeberger and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ public class Activator implements BundleActivator {
 
     private CachingServiceFactory cachingServiceFactory;
 
-    private ServiceRegistration cachingServiceFactoryRegistration;
+    private ServiceRegistration<?> cachingServiceFactoryRegistration;
 
     /**
      * Registers a new {@link CachingServiceFactory} instance as OSGi service
@@ -82,7 +82,7 @@ public class Activator implements BundleActivator {
     }
 
     private void setDebugEnabled(final BundleContext bundleContext) {
-        final ServiceReference debugOptionsReference = bundleContext
+        final ServiceReference<?> debugOptionsReference = bundleContext
                 .getServiceReference(DebugOptions.class.getName());
         if (debugOptionsReference != null) {
             final DebugOptions debugOptions = (DebugOptions) bundleContext
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/CachingServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/CachingServiceFactory.java
index 8ff4afc..4a4ef32 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/CachingServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/CachingServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Heiko Seeberger and others.
+ * Copyright (c) 2008, 2009 Heiko Seeberger and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/IBundleConstants.java b/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/IBundleConstants.java
index a77b2e0..abda341 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/IBundleConstants.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.caching/src/org/eclipse/equinox/weaving/internal/caching/IBundleConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Heiko Seeberger and others.
+ * Copyright (c) 2008, 2009 Heiko Seeberger and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.weaving.hook/META-INF/MANIFEST.MF
index e191d0d..c485684 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Aspect Weaving Hooks Plug-in (Incubation)
 Bundle-SymbolicName: org.eclipse.equinox.weaving.hook
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Fragment-Host: org.eclipse.osgi;bundle-version="[3.2.0,4.0.0)"
 Export-Package: org.eclipse.equinox.service.weaving,
  org.eclipse.equinox.weaving.adaptors;x-friends:="org.eclipse.equinox.weaving.tests",
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/build.properties b/eclipse/plugins/org.eclipse.equinox.weaving.hook/build.properties
index 4645e8e..89bb1ad 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/build.properties
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/hookconfigurators.properties b/eclipse/plugins/org.eclipse.equinox.weaving.hook/hookconfigurators.properties
index d3b464c..7cb6ded 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/hookconfigurators.properties
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/hookconfigurators.properties
@@ -1,2 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 hook.configurators= \
  org.eclipse.equinox.weaving.hooks.WeavingHook
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/CacheEntry.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/CacheEntry.java
index ad7ec7c..f30d9b9 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/CacheEntry.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/CacheEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Martin Lippert and others.
+ * Copyright (c) 2008, 2009 Martin Lippert and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingService.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingService.java
index a1865fb..083ffd4 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingService.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingServiceFactory.java
index f917f2f..55a2e8f 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/ICachingServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Martin Lippert and others.
+ * Copyright (c) 2008, 2009 Martin Lippert and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingService.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingService.java
index 76c567e..54d7a2a 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingService.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingServiceFactory.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingServiceFactory.java
index ffdc7fd..480c250 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/service/weaving/IWeavingServiceFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Martin Lippert and others.
+ * Copyright (c) 2008, 2009 Martin Lippert and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/Debug.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/Debug.java
index 74a8fcd..957ff90 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/Debug.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/Debug.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/IWeavingAdaptor.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/IWeavingAdaptor.java
index a1f3627..a92f793 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/IWeavingAdaptor.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/IWeavingAdaptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/WeavingAdaptorFactory.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/WeavingAdaptorFactory.java
index 65dca70..83458bb 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/WeavingAdaptorFactory.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/adaptors/WeavingAdaptorFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/AbstractWeavingHook.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/AbstractWeavingHook.java
index ad1438d..e25d047 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/AbstractWeavingHook.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/AbstractWeavingHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BaseWeavingBundleFile.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BaseWeavingBundleFile.java
index 57bcb24..69be72b 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BaseWeavingBundleFile.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BaseWeavingBundleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BundleAdaptorProvider.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BundleAdaptorProvider.java
index db49cf6..01c934b 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BundleAdaptorProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/BundleAdaptorProvider.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 
 package org.eclipse.equinox.weaving.hooks;
 
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/IAdaptorProvider.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/IAdaptorProvider.java
index 89fdb41..53b7f65 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/IAdaptorProvider.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/IAdaptorProvider.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 
 package org.eclipse.equinox.weaving.hooks;
 
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingBundleFile.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingBundleFile.java
index fe5f47f..782c18d 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingBundleFile.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingBundleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingHook.java b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingHook.java
index a67deae..08ab85e 100644
--- a/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingHook.java
+++ b/eclipse/plugins/org.eclipse.equinox.weaving.hook/src/org/eclipse/equinox/weaving/hooks/WeavingHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF
index 23e0e3c..9b4c347 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.equinox.wireadmin
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-Description: This bundle provides utility classes for Producer and Consumer services.
 Bundle-Activator: org.eclipse.equinox.internal.wireadmin.Activator
@@ -11,7 +11,7 @@ Import-Package: org.eclipse.equinox.internal.util.hash;version="1.0.0",
  org.osgi.framework,
  org.osgi.service.cm;version="1.2",
  org.osgi.service.event;version="1.1",
- org.osgi.service.wireadmin;version="1.0",
+ org.osgi.service.wireadmin;version="[1.0,1.1)",
  org.osgi.util.measurement;version="1.0",
  org.osgi.util.tracker;version="1.3"
 Export-Package: org.eclipse.equinox.internal.wireadmin; x-internal:=true
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/Activator.java b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/Activator.java
index 19e209d..2177c21 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/Activator.java
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java
index 027325f..583eb88 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/EventDispatcher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/NotificationEvent.java b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/NotificationEvent.java
index 679beac..07bd86e 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/NotificationEvent.java
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/NotificationEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/TracerMap.java b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/TracerMap.java
index 8324ac9..bace1d2 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/TracerMap.java
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/TracerMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireAdminImpl.java b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireAdminImpl.java
index b2b5a93..d529235 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireAdminImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireAdminImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2009 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireImpl.java b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireImpl.java
index d039602..cb80b3c 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireImpl.java
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2011 by ProSyst Software GmbH and others.
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
  *
  * Contributors:
  *    ProSyst Software GmbH - initial API and implementation
+ *    IBM Corporation - bug fix 347974
  *******************************************************************************/
 package org.eclipse.equinox.internal.wireadmin;
 
@@ -38,8 +39,10 @@ class WireImpl implements Wire, ServiceListener {
 
 	private Class[] flavors;
 
-	/** Holds the last value passed through this <code>Wire</code>. */
+	/** Holds the last value passed to this <code>Wire</code> by the <code>Producer</code>. */
 	private Object lastValue;
+	/** Holds the previous value passed through this <code>Wire</code> to the <code>Consumer</code>. */
+	private Object previousValue;
 
 	private Vector envelopes;
 
@@ -51,8 +54,8 @@ class WireImpl implements Wire, ServiceListener {
 
 	private Filter filter = null;
 
-	/** Holds the time of last <code>Consumer</code> update in milliseconds */
-	private long lastUpdateTime = -1;
+	/** Holds the time of previous <code>Consumer</code> update in milliseconds */
+	private long previousUpdateTime = -1;
 
 	/** Holds the available wire values (filter attributes) */
 	private Hashtable wireValues;
@@ -150,46 +153,51 @@ class WireImpl implements Wire, ServiceListener {
 			}
 		}
 
-		if (filter != null) {
-
-			wireValues.put(WireConstants.WIREVALUE_CURRENT, value);
-
-			// #3329
-			if (lastValue != null) {
-				wireValues.put(WireConstants.WIREVALUE_PREVIOUS, lastValue);
-				wireValues.put(WireConstants.WIREVALUE_ELAPSED, new Long(System.currentTimeMillis() - lastUpdateTime));
-			}
+		try {
+			if (filter != null) {
+				wireValues.put(WireConstants.WIREVALUE_CURRENT, value);
+
+				// #3329
+				if (previousValue != null) {
+					wireValues.put(WireConstants.WIREVALUE_PREVIOUS, previousValue);
+					wireValues.put(WireConstants.WIREVALUE_ELAPSED, new Long(System.currentTimeMillis() - previousUpdateTime));
+				} else {
+					previousValue = value; // this is to "prime the pump"
+				}
 
-			if (Number.class.isInstance(value) && Number.class.isInstance(lastValue)) {
-				double val = ((Number) value).doubleValue();
-				double lastVal = ((Number) lastValue).doubleValue();
+				if (Number.class.isInstance(value) && Number.class.isInstance(previousValue)) {
+					double val = ((Number) value).doubleValue();
+					double prevVal = ((Number) previousValue).doubleValue();
 
-				wireValues.put(WireConstants.WIREVALUE_DELTA_ABSOLUTE, new Double(Math.abs(val - lastVal)));
-				// #3328
-				wireValues.put(WireConstants.WIREVALUE_DELTA_RELATIVE, new Double(Math.abs(1 - lastVal / val)));
-			} else {
-				wireValues.remove(WireConstants.WIREVALUE_DELTA_ABSOLUTE);
-				wireValues.remove(WireConstants.WIREVALUE_DELTA_RELATIVE);
-			}
+					wireValues.put(WireConstants.WIREVALUE_DELTA_ABSOLUTE, new Double(Math.abs(val - prevVal)));
+					// #3328
+					wireValues.put(WireConstants.WIREVALUE_DELTA_RELATIVE, new Double(Math.abs(1 - prevVal / val)));
+				} else {
+					wireValues.remove(WireConstants.WIREVALUE_DELTA_ABSOLUTE);
+					wireValues.remove(WireConstants.WIREVALUE_DELTA_RELATIVE);
+				}
 
-			if (!filter.match(wireValues)) {
-				if (Activator.LOG_DEBUG) {
-					Activator.log.debug(0, 10012, filter + " / " + value, null, false);
+				if (!filter.match(wireValues)) {
+					if (Activator.LOG_DEBUG) {
+						Activator.log.debug(0, 10012, filter + " / " + value, null, false);
+					}
+					return;
 				}
-				return;
 			}
-		}
 
-		if (consumer != null) {
-			try {
-				consumer.updated(this, value);
-			} catch (Throwable t) {
-				parent.notifyListeners(this, WireAdminEvent.CONSUMER_EXCEPTION, t);
-				return;
+			if (consumer != null) {
+				try {
+					consumer.updated(this, value);
+				} catch (Throwable t) {
+					parent.notifyListeners(this, WireAdminEvent.CONSUMER_EXCEPTION, t);
+				} finally {
+					previousValue = value;
+					previousUpdateTime = System.currentTimeMillis();
+					parent.notifyListeners(this, WireAdminEvent.WIRE_TRACE, null);
+				}
 			}
+		} finally {
 			lastValue = value;
-			lastUpdateTime = System.currentTimeMillis();
-			parent.notifyListeners(this, WireAdminEvent.WIRE_TRACE, null);
 		}
 	}
 
@@ -503,6 +511,7 @@ class WireImpl implements Wire, ServiceListener {
 		consumer = null;
 
 		lastValue = null;
+		previousValue = null;
 		parent = null;
 		filter = null;
 		wireValues = null;
diff --git a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireProperties.java b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireProperties.java
index b5f6115..3bac2ba 100644
--- a/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireProperties.java
+++ b/eclipse/plugins/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/internal/wireadmin/WireProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1997-2007 by ProSyst Software GmbH
+ * Copyright (c) 1997, 2008 by ProSyst Software GmbH
  * http://www.prosyst.com
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.help.base/.settings/.api_filters b/eclipse/plugins/org.eclipse.help.base/.settings/.api_filters
new file mode 100644
index 0000000..1515a50
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/.settings/.api_filters
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.help.base" version="2">
+    <resource path="META-INF/MANIFEST.MF">
+        <filter id="927989779">
+            <message_arguments>
+                <message_argument value="3.6.0"/>
+                <message_argument value="org.apache.lucene"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.de.WordlistLoader">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.de.WordlistLoader"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.de.WordlistLoader"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.standard.CharStream">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.CharStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.CharStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.standard.FastCharStream">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.FastCharStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.FastCharStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.standard.ParseException">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.ParseException"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.ParseException"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.standard.StandardTokenizerConstants">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.StandardTokenizerConstants"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.StandardTokenizerConstants"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.standard.StandardTokenizerTokenManager">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.StandardTokenizerTokenManager"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.StandardTokenizerTokenManager"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.standard.Token">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.Token"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.Token"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.analysis.standard.TokenMgrError">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.TokenMgrError"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.analysis.standard.TokenMgrError"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.index.SegmentTermPositionVector">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.index.SegmentTermPositionVector"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.index.SegmentTermPositionVector"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.search.DateFilter">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.DateFilter"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.DateFilter"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.search.DisjunctionSumScorer">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.DisjunctionSumScorer"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.DisjunctionSumScorer"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.search.PhrasePrefixQuery">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.PhrasePrefixQuery"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.PhrasePrefixQuery"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.search.RemoteSearchable">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.RemoteSearchable"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.RemoteSearchable"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.search.RemoteSearchable_Stub">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.RemoteSearchable_Stub"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.RemoteSearchable_Stub"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.search.ReqExclScorer">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.ReqExclScorer"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.ReqExclScorer"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.search.ReqOptSumScorer">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.ReqOptSumScorer"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305426566">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.search.ReqOptSumScorer"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.store.InputStream">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.store.InputStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.store.InputStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.apache.lucene.store.OutputStream">
+        <filter comment="Suppress API errors which result from changes to classes reexported from Lucene" id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.store.OutputStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.0"/>
+            </message_arguments>
+        </filter>
+        <filter id="305422471">
+            <message_arguments>
+                <message_argument value="org.apache.lucene.store.OutputStream"/>
+                <message_argument value="org.eclipse.help.base_3.5.3"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/eclipse/plugins/org.eclipse.help.base/.settings/org.eclipse.pde.api.tools.prefs b/eclipse/plugins/org.eclipse.help.base/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..e28f4e3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,97 @@
+#Fri May 06 15:07:00 EDT 2011
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Ignore
+automatically_removed_unused_problem_filters=false
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF
index e19251a..9e4937d 100644
--- a/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.help.base/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %help_base_plugin_name
 Bundle-SymbolicName: org.eclipse.help.base; singleton:=true
-Bundle-Version: 3.5.3.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-Activator: org.eclipse.help.internal.base.HelpBasePlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -16,7 +16,7 @@ Export-Package: org.apache.lucene.demo.html;x-internal:=true,
    org.eclipse.ui.intro,
    org.eclipse.ua.tests.doc",
  org.eclipse.help.internal.base.remote;x-friends:="org.eclipse.ua.tests,org.eclipse.help.webapp,org.eclipse.help.ui",
- org.eclipse.help.internal.base.scope;x-friends:="org.eclipse.help.webapp,org.eclipse.ua.tests",
+ org.eclipse.help.internal.base.scope;x-friends:="org.eclipse.help.webapp,org.eclipse.ua.tests,org.eclipse.help.ui",
  org.eclipse.help.internal.base.util;x-friends:="org.eclipse.help.ui,org.eclipse.help.webapp,org.eclipse.ua.tests",
  org.eclipse.help.internal.browser;x-friends:="org.eclipse.help.ui,org.eclipse.ua.tests",
  org.eclipse.help.internal.browser.macosx;x-friends:="org.eclipse.ua.tests",
@@ -39,8 +39,8 @@ Export-Package: org.apache.lucene.demo.html;x-internal:=true,
  org.eclipse.help.search,
  org.eclipse.help.server,
  org.eclipse.help.standalone
-Require-Bundle: org.apache.lucene;bundle-version="[1.9.1,2.0.0)";visibility:=reexport,
- org.apache.lucene.analysis;bundle-version="[1.9.1,2.0.0)";visibility:=reexport,
+Require-Bundle: org.apache.lucene;bundle-version="[2.9.0,3.0.0)";visibility:=reexport,
+ org.apache.lucene.analysis;bundle-version="[2.9.0,3.0.0)";visibility:=reexport,
  org.eclipse.ant.core;bundle-version="3.2.200";resolution:=optional,
  org.eclipse.core.runtime;bundle-version="3.6.0",
  org.eclipse.help;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
diff --git a/eclipse/plugins/org.eclipse.help.base/about.properties b/eclipse/plugins/org.eclipse.help.base/about.properties
index de1090d..0cd5f6c 100644
--- a/eclipse/plugins/org.eclipse.help.base/about.properties
+++ b/eclipse/plugins/org.eclipse.help.base/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Help\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/platform
 
diff --git a/eclipse/plugins/org.eclipse.help.base/plugin.properties b/eclipse/plugins/org.eclipse.help.base/plugin.properties
index 73a5b39..4075894 100644
--- a/eclipse/plugins/org.eclipse.help.base/plugin.properties
+++ b/eclipse/plugins/org.eclipse.help.base/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -25,6 +25,8 @@ defaultBrowser = Default Web Browser (Change in System Preferences)
 preferences = Help System Base Preferences
 
 search_participant_extension_point_name = Lucene Search Participant
+search_processor_extension_point_name = Search Processor
 server_extension_point_name = Help Server
 help_search_participant_extension_point_name = Help Search Participant
-help_scope_extension_point_name = Help Scope
\ No newline at end of file
+help_scope_extension_point_name = Help Scope
+help_display_extension_point_name = Help Display
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.help.base/plugin.xml b/eclipse/plugins/org.eclipse.help.base/plugin.xml
index 45114fb..229fd7b 100644
--- a/eclipse/plugins/org.eclipse.help.base/plugin.xml
+++ b/eclipse/plugins/org.eclipse.help.base/plugin.xml
@@ -21,6 +21,8 @@
    <extension-point id="server" name="%server_extension_point_name" schema="schema/server.exsd"/>
    <extension-point id="searchParticipant" name="%help_search_participant_extension_point_name" schema="schema/searchParticipant.exsd"/>
    <extension-point id="scope" name="%help_scope_extension_point_name" schema="schema/scope.exsd"/>
+   <extension-point id="display" name="%help_display_extension_point_name" schema="schema/display.exsd"/>
+   <extension-point id="searchProcessor" name="%search_processor_extension_point_name" schema="schema/searchProcessor.exsd"/>
 
 <!-- Stand-alone infocenter application -->
    <extension
diff --git a/eclipse/plugins/org.eclipse.help.base/preferences.ini b/eclipse/plugins/org.eclipse.help.base/preferences.ini
index ee19732..a353eb8 100644
--- a/eclipse/plugins/org.eclipse.help.base/preferences.ini
+++ b/eclipse/plugins/org.eclipse.help.base/preferences.ini
@@ -47,6 +47,9 @@ narrow_css=/PRODUCT_PLUGIN/narrow_book.css,/PRODUCT_PLUGIN/${os}_narrow_book.css
 # The css file to include in every disabled page served by help system 
 disabled_css=/PRODUCT_PLUGIN/disabled_book.css
 
+# The css file to include in every page served by the remote help system 
+remote_css
+
 # Set to true or false to control the visibility of the index view.
 indexView=true
 
@@ -210,4 +213,10 @@ maxConnections=10
 # Assign a value no greater than Integer.MAX_VALUE
 # Assign nothing to accept the default settings of the application
 # Example: maxTopics=
-maxTopics=500
\ No newline at end of file
+maxTopics=500
+
+#########################
+# Search Results
+#########################
+showSearchDescription=true
+showSearchCategories=false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.help.base/schema/display.exsd b/eclipse/plugins/org.eclipse.help.base/schema/display.exsd
new file mode 100644
index 0000000..1af779e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/schema/display.exsd
@@ -0,0 +1,113 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.help.base" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.help.base" id="display" name="Help Display"/>
+      </appInfo>
+      <documentation>
+         Support for user defined help display to override the Eclipse Help System UI.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="display"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="display">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A class which implements the methods used to generate the URL for the home page of the help system.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.help.base.AbstractHelpDisplay:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.6
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2010 IBM Corporation and others.<br>
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which accompanies 
+this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/eclipse/plugins/org.eclipse.help.base/schema/scope.exsd b/eclipse/plugins/org.eclipse.help.base/schema/scope.exsd
index 764096c..5f891c2 100644
--- a/eclipse/plugins/org.eclipse.help.base/schema/scope.exsd
+++ b/eclipse/plugins/org.eclipse.help.base/schema/scope.exsd
@@ -18,7 +18,8 @@
       </annotation>
       <complexType>
          <sequence minOccurs="1" maxOccurs="unbounded">
-            <element ref="scope"/>
+            <element ref="scope" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="scopeProducer" minOccurs="0" maxOccurs="1"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -57,10 +58,10 @@
          <attribute name="class" type="string" use="required">
             <annotation>
                <documentation>
-                  
+                  A class which contains methods to determine which elemements should be displayed when the scope is active.
                </documentation>
                <appInfo>
-                  <meta.attribute kind="java"/>
+                  <meta.attribute kind="java" basedOn="org.eclipse.help.base.AbstractHelpScope:"/>
                </appInfo>
             </annotation>
          </attribute>
@@ -74,6 +75,26 @@
       </complexType>
    </element>
 
+   <element name="scopeProducer">
+      <annotation>
+         <documentation>
+            Use a scopeProducer to dynamically generate scopes at runtime
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.help.base.IHelpScopeProducer"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
    <annotation>
       <appInfo>
          <meta.section type="since"/>
@@ -84,14 +105,6 @@
    </annotation>
 
 
-   <annotation>
-      <appInfo>
-         <meta.section type="apiinfo"/>
-      </appInfo>
-      <documentation>
-         A class which implements AbstractScope contains functions to determine which elemements should be displayed when the scope is active. The help UI allows the user to specify any of the predefiend scopes.
-      </documentation>
-   </annotation>
 
 
    <annotation>
diff --git a/eclipse/plugins/org.eclipse.help.base/schema/searchProcessor.exsd b/eclipse/plugins/org.eclipse.help.base/schema/searchProcessor.exsd
new file mode 100644
index 0000000..b95e6dc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/schema/searchProcessor.exsd
@@ -0,0 +1,123 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.help" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.help" id="searchProcessor" name="Search Processor"/>
+      </appInfo>
+      <documentation>
+         This extension point allows for processing steps to be performed when a user submits a help search.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="processor"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="processor">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.help.search.AbstractSearchProcessor:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         Here is a sample directing processing to the class 'com.test.processor.SearchProcessor'
+<p>
+<pre>
+<extension
+      point="org.eclipse.help.searchProcessor">
+   <processor
+         class="com.ibm.test.processor.SearchProcessor">
+   </processor>
+</extension>
+</pre>
+</p>
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         The supplied search processor class must extend the abstract class <samp>org.eclipse.help.AbstractSearchProcessor</samp>.  The processor has the opportunity to modify a search string, provide alternate search expressions, or modify the search result set.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         None.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2011 IBM Corporation and others.<br>
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which accompanies 
+this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/AbstractHelpDisplay.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/AbstractHelpDisplay.java
new file mode 100644
index 0000000..272965f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/AbstractHelpDisplay.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.base;
+
+/**
+ * @since 3.6
+ * Abstract class representing a help display which can be used to override the Eclipse help
+ * system UI using the extension point org.eclipse.help.base.display. Classes extending this
+ * abstract class must be capable of returning the help home page and other help related URLs 
+ */
+
+public abstract class AbstractHelpDisplay {
+	
+	/**
+	 * Returns the URL to the help home page 
+	 * @param hostname the hostname of the Eclipse help system
+	 * @param port the port of the Eclipse help system
+	 * @param tab is one of "search" "toc" "index" "bookmarks" or null, 
+	 * In the Eclipse help webapp these correspond to a tab which is in focus when the help 
+	 * system is started.
+	 * For other help presentations this parameter should be seen as a hint representing 
+	 * an action the user wishes to perform
+	 * @return String help home path
+	 */
+	public abstract String getHelpHome(String hostname, int port, String tab);
+
+	/** 
+	 * Returns the help page, including any frames, for a specific topic.
+	 * @param hostname the hostname of the Eclipse help system
+	 * @param port the port of the Eclipse help system
+	 * @param topic The path of a topic in the help system. May be a relative path,
+	 * representing a topic within the help system or a full URL including protocol.
+	 * @return String URL translated for overriding help system
+	 */
+	public abstract String getHelpForTopic(String topic, String hostname, int port);
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/AbstractHelpScope.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/AbstractHelpScope.java
index 1b9f7f3..62b368b 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/AbstractHelpScope.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/AbstractHelpScope.java
@@ -61,7 +61,7 @@ public abstract class AbstractHelpScope {
      * if it's target is in scope. May be overridden to exclude more IndexSee elements 
      * from the scope
 	 * @param see
-	 * @return
+	 * @return true if the target is in scope
 	 */
 	public boolean inScope(IIndexSee see) {
 		return hasInScopeChildren(see);
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/IHelpScopeProducer.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/IHelpScopeProducer.java
new file mode 100644
index 0000000..5fe3b58
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/IHelpScopeProducer.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.base;
+
+/**
+ * Producer capable of generating or otherwise obtaining AbstractHelpScopes
+ * for filtering the help system.  Scopes can be defined either by adding a
+ * 'scope' or 'scopeProducer' element to the 
+ * <code>"org.eclipse.help.base.scope"</code> extension point.
+ * 
+ * The 'scopeProducer' allows for runtime scopes to be created.
+ * 
+ * 
+ * @since 3.6
+ */
+public interface IHelpScopeProducer {
+	
+	/**
+	 * Obtains a list of IScopeHandles, which in turn will contain
+	 * AbstracHelpScope implementations.  Use this method to create
+	 * or load AbstractHelpScopes at runtime.
+	 * 
+	 * @return an array of the contributed scope handles. May not be <code>null</code>.
+	 */
+	public IScopeHandle[] getScopeHandles();
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/IScopeHandle.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/IScopeHandle.java
new file mode 100644
index 0000000..4ee8a0d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/IScopeHandle.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.base;
+
+
+/**
+ * Container class for associating AbstractHelpScopes with an ID
+ * 
+ * @since 3.6
+ */
+public interface IScopeHandle {
+
+	/**
+	 * Get the AbstractHelpScope associated with this handle
+	 * 
+	 * @return AbstractHelpScope
+	 */
+	public AbstractHelpScope getScope();
+	
+	/**
+	 * Get the String ID associated with this handle
+	 * 
+	 * @return ID
+	 */
+	public String getId();
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/package.html b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/package.html
new file mode 100644
index 0000000..b193cad
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/base/package.html
@@ -0,0 +1,16 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="IBM">
+   <meta name="GENERATOR" content="Mozilla/4.51 [en] (WinNT; U) [Netscape]">
+   <title>Package-level Javadoc</title>
+</head>
+<body>
+Support for help system extension points.
+<h2>
+Package Specification</h2>
+Contains classes which support the extension point org.eclipse.help.base.scope 
+which allow the user to predefine help scopes. 
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BookmarkManager.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BookmarkManager.java
index 1a4d580..dae54fc 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BookmarkManager.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/BookmarkManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -167,7 +167,7 @@ public class BookmarkManager extends Observable {
 			String value = readBookmarks();
 			StringTokenizer tokenizer = new StringTokenizer(value, ","); //$NON-NLS-1$
 			bookmarks = new ArrayList();
-			for (int i = 0; tokenizer.hasMoreTokens(); i++) {
+			while (tokenizer.hasMoreTokens()) {
 				String bookmark = tokenizer.nextToken();
 				// url and title are separated by vertical bar
 				int separator = bookmark.indexOf('|');
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java
index 48fcbf8..7d2aeff 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class HelpApplication implements IApplication, IExecutableExtension {
 	private static final int STATE_RUNNING = 1;
 	private static final int STATE_RESTARTING = 2;
 	private static int status = STATE_RUNNING;
+	private static boolean shutdownOnClose = false; // Shutdown help when the embedded browser is closed
 	private File metadata;
 	private FileLock lock;
 
@@ -167,4 +168,12 @@ public class HelpApplication implements IApplication, IExecutableExtension {
 	public static boolean isRunning() {
 		return status == STATE_RUNNING;
 	}
+
+	public static boolean isShutdownOnClose() {
+		return shutdownOnClose;
+	}
+
+	public static void setShutdownOnClose(boolean shutdownOnClose) {
+		HelpApplication.shutdownOnClose = shutdownOnClose;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java
index 87e4fd0..c5fe3a1 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpDisplay.java
@@ -13,9 +13,14 @@ package org.eclipse.help.internal.base;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.help.IContext;
 import org.eclipse.help.IHelpResource;
+import org.eclipse.help.base.AbstractHelpDisplay;
 import org.eclipse.help.internal.server.WebappManager;
 import org.eclipse.osgi.util.NLS;
 
@@ -26,7 +31,26 @@ import org.eclipse.osgi.util.NLS;
 public class HelpDisplay {
 
 	private String hrefOpenedFromHelpDisplay;
+	private static AbstractHelpDisplay helpDisplay;
+	private static final String HELP_DISPLAY_EXTENSION_ID = "org.eclipse.help.base.display"; //$NON-NLS-1$
+	private static final String HELP_DISPLAY_CLASS_ATTRIBUTE = "class"; //$NON-NLS-1$
+	
+	private static class DefaultDisplay extends AbstractHelpDisplay {
+		
+		public String getHelpHome(String hostname, int port, String tab) {
+			String helpURL = getFramesetURL();	
+			if (tab != null) {
+				helpURL += "?tab=" + tab; //$NON-NLS-1$
+			}
+			return helpURL;
+		}
 
+		public String getHelpForTopic(String topic, String hostname, int port) {
+			return getFramesetURL() + "?topic=" + topic; //$NON-NLS-1$			
+		}
+		
+	}
+	
 	/**
 	 * Constructor.
 	 */
@@ -158,29 +182,16 @@ public class HelpDisplay {
 		}
 
 		try {
-			/*
-			if (helpURL == null || helpURL.length() == 0) {
-				BaseHelpSystem.getHelpBrowser(forceExternal).displayURL(
-						getFramesetURL());
-			} else if (helpURL.startsWith("tab=") //$NON-NLS-1$
-					|| helpURL.startsWith("toc=") //$NON-NLS-1$
-					|| helpURL.startsWith("topic=") //$NON-NLS-1$
-					|| helpURL.startsWith("contextId=")) { //$NON-NLS-1$
-				BaseHelpSystem.getHelpBrowser(forceExternal).displayURL(
-						getFramesetURL() + "?" + helpURL); //$NON-NLS-1$
-			} else {
-				BaseHelpSystem.getHelpBrowser(forceExternal)
-						.displayURL(helpURL);
-			}
-			*/
 			if (helpURL == null || helpURL.length() == 0) {
-				helpURL = getFramesetURL();
-			} else if (helpURL.startsWith("tab=") //$NON-NLS-1$
-					|| helpURL.startsWith("toc=") //$NON-NLS-1$
-					|| helpURL.startsWith("topic=") //$NON-NLS-1$
-					|| helpURL.startsWith("contextId=")) { //$NON-NLS-1$
-				helpURL = getFramesetURL() + "?" + helpURL; //$NON-NLS-1$
-			}
+				helpURL = getHelpDisplay().getHelpHome( WebappManager.getHost(),  WebappManager.getPort(), null);
+			} else if (helpURL.startsWith("tab=")) { //$NON-NLS-1$
+				String tab = helpURL.substring("tab=".length()); //$NON-NLS-1$
+				helpURL = getHelpDisplay().getHelpHome( WebappManager.getHost(),  WebappManager.getPort(), tab);	
+			} else if (helpURL.startsWith("topic=")) { //$NON-NLS-1$
+				String topic = helpURL.substring("topic=".length()); //$NON-NLS-1$
+				helpURL = getHelpDisplay().getHelpForTopic( topic, WebappManager.getHost(),  WebappManager.getPort());	
+			} 
+			
 			BaseHelpSystem.getHelpBrowser(forceExternal)
 						.displayURL(helpURL);
 		} catch (Exception e) {
@@ -202,13 +213,13 @@ public class HelpDisplay {
 	}
 	*/
 
-	private String getBaseURL() {
+	private static String getBaseURL() {
 		return "http://" //$NON-NLS-1$
 				+ WebappManager.getHost() + ":" //$NON-NLS-1$
 				+ WebappManager.getPort() + "/help/"; //$NON-NLS-1$
 	}
 
-	private String getFramesetURL() {
+	private static String getFramesetURL() {
 		return getBaseURL() + "index.jsp"; //$NON-NLS-1$
 	}
 
@@ -257,8 +268,41 @@ public class HelpDisplay {
 		return hrefOpenedFromHelpDisplay;
 	}
 
-	private void setHrefOpenedFromHelpDisplay(String hrefOpenedFromHelpDisplay) {
+	public void setHrefOpenedFromHelpDisplay(String hrefOpenedFromHelpDisplay) {
 		this.hrefOpenedFromHelpDisplay = hrefOpenedFromHelpDisplay;
 	}
+	
+	private static void createHelpDisplay() {
+		IExtensionPoint point = Platform.getExtensionRegistry()
+				.getExtensionPoint(HELP_DISPLAY_EXTENSION_ID );
+		if (point != null) {
+			IExtension[] extensions = point.getExtensions();
+			if (extensions.length != 0) {
+				// We need to pick up the non-default configuration
+				IConfigurationElement[] elements = extensions[0]
+						.getConfigurationElements();
+				if (elements.length == 0) 
+					return;
+				IConfigurationElement displayElement  = elements[0];
+				// Instantiate the help display
+				try {
+					helpDisplay = (AbstractHelpDisplay) (displayElement
+							.createExecutableExtension(HELP_DISPLAY_CLASS_ATTRIBUTE));
+				} catch (CoreException e) {
+					HelpBasePlugin.logStatus(e.getStatus());
+				}
+			}
+		}
+	}
+
+	private static AbstractHelpDisplay getHelpDisplay() {
+    	if (helpDisplay == null) {
+    		createHelpDisplay();
+    	}
+    	if (helpDisplay == null) {
+    		helpDisplay = new DefaultDisplay();
+    	}
+    	return helpDisplay;
+    }
 
 }
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/IHelpBaseConstants.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/IHelpBaseConstants.java
index 7bd701e..aa8d051 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/IHelpBaseConstants.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/IHelpBaseConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,8 @@ public interface IHelpBaseConstants {
 	String P_KEY_REMOTE_HELP_DEFAULT_PORT = "remoteHelpUseDefaultPort"; //$NON-NLS-1$
 	String P_KEY_REMOTE_HELP_PORT = "remoteHelpPort"; //$NON-NLS-1$
 	String P_KEY_REMOTE_HELP_ICEnabled = "remoteHelpICEnabled"; //$NON-NLS-1$
+	String P_KEY_SHOW_SEARCH_DESCRIPTION = "showSearchDescription"; //$NON-NLS-1$
+	String P_KEY_SHOW_SEARCH_CATEGORIES = "showSearchCategories"; //$NON-NLS-1$
     String P_SHOW_BREADCRUMBS = "showBreadcrumbs"; //$NON-NLS-1$
     String P_PAGE_NOT_FOUND = "page_not_found"; //$NON-NLS-1$    
 }
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteHelpInputStream.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteHelpInputStream.java
new file mode 100644
index 0000000..f371d49
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteHelpInputStream.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.internal.base.remote;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * This class is used to identify that an input stream comes from a remote server so appropriate css can
+ * be generated.
+ */
+
+public class RemoteHelpInputStream extends InputStream{
+
+	private InputStream is;
+	
+	public RemoteHelpInputStream(){
+		is=null;
+	}
+	public RemoteHelpInputStream(InputStream is) {
+		this.is=is;	
+	}
+	
+	public InputStream getInputStream(){
+		return this.is;
+	}
+	
+	public int read() throws IOException {
+		return is.read();
+	}
+	
+	public int available() throws IOException {
+		return is.available();
+	}
+	
+	public void close() throws IOException {
+		is.close();
+	}
+	
+	public synchronized void mark(int arg0) {
+		is.mark(arg0);
+	}
+	
+	public boolean markSupported() {
+		return is.markSupported();
+	}
+	
+	public int read(byte[] b) throws IOException {
+		return is.read(b);
+	}
+	
+	public int read(byte[] b, int off, int len) throws IOException {
+		return is.read(b, off, len);
+	}
+	
+	public synchronized void reset() throws IOException {
+		is.reset();
+	}
+	
+	public long skip(long n) throws IOException {
+		return is.skip(n);
+	}
+	
+	
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIC.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIC.java
index 0ecf4c1..ffcb2b0 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIC.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIC.java
@@ -33,7 +33,7 @@ public class RemoteIC {
 	    this.host    = host;
 	    this.path    = path;
 	    this.port    = port;
-	    this.port    = PROTOCOL_HTTP;
+	    this.protocol    = PROTOCOL_HTTP;
 	}
 
 	public RemoteIC(boolean enabled, String name, String host, String path, String protocol, String port){
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java
index 11a65f7..45c73cd 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteSearchManager.java
@@ -30,8 +30,6 @@ public class RemoteSearchManager {
 	private static final String PARAM_PHRASE = "phrase"; //$NON-NLS-1$
 	private static final String PARAM_LANG = "lang"; //$NON-NLS-1$
 	private static final String PROTOCOL_HTTP = "http"; //$NON-NLS-1$
-	
-	private RemoteSearchParser parser;
 
 	/*
 	 * Performs a search for remote content.
@@ -70,9 +68,7 @@ public class RemoteSearchManager {
 								in = HttpsUtility.getHttpsStream(url);
 							}
 							
-							if (parser == null) {
-								parser = new RemoteSearchParser();
-							}
+							RemoteSearchParser parser = new RemoteSearchParser();							
 							// parse the XML-serialized search results
 							List hits = parser.parse(in, new SubProgressMonitor(pm, 100));
 							collector.addHits(hits, null);
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteStatusData.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteStatusData.java
index d494264..0657be9 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteStatusData.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteStatusData.java
@@ -10,22 +10,26 @@
  *******************************************************************************/
 package org.eclipse.help.internal.base.remote;
 
-import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.Hashtable;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.help.internal.base.HelpBasePlugin;
 import org.eclipse.help.internal.base.IHelpBaseConstants;
+import org.eclipse.help.internal.base.util.TestConnectionUtility;
 
 public class RemoteStatusData {
-
-
-	private static final String INDEXJSP = "/index.jsp"; //$NON-NLS-1$
-	private static final String PROTOCOL_HTTP = "http"; //$NON-NLS-1$
+	
+	private static int TIMEOUT = 60 * 1000;
+	
 	
 	/*
-	 * Convience method to see if any remote help
+	 * Convenience method to see if any remote help
 	 * is down
 	 */
 	public static boolean isAnyRemoteHelpUnavailable()
@@ -33,12 +37,12 @@ public class RemoteStatusData {
 		ArrayList sites = getRemoteSites();
 		if (sites.isEmpty())
 			return false;
+
+		for (int s=0;s<sites.size();s++)
+			if (!isConnected((URL)sites.get(s)))
+				return true;
 		
-		ArrayList badSites = checkSitesConnectivity(sites);
-		if (badSites.isEmpty())
-			return false;
-		
-		return true;
+		return false;
 	}
 
 	/*
@@ -54,29 +58,25 @@ public class RemoteStatusData {
 		ArrayList badSites = new ArrayList();
 		
 		for (int i=0;i<sites.size();i++)
+			if (!isConnected((URL)sites.get(i)))
+				badSites.add(sites.get(i));
+		
+		return badSites;
+	}
+	
+	public static boolean isConnected(URL site)
+	{
+		ConnectionCache cache = ConnectionCache.getCache();
+		try{
+			return cache.isConnected(site);
+		}catch(CoreException e)
 		{
-			URL baseURL = (URL)sites.get(i);
-			try{
-				URL indexURL = new URL(baseURL.toExternalForm()+INDEXJSP);
-				InputStream in;
-				if(indexURL.getProtocol().equalsIgnoreCase(PROTOCOL_HTTP))
-				{
-					in = indexURL.openStream();
-					in.close();
-				}
-				else
-				{
-					in = HttpsUtility.getHttpsStream(indexURL);
-					in.close();
-				}
-				
-			
-			}catch(Exception ex)
-			{
-				badSites.add(baseURL);
-			}
+			boolean connected = TestConnectionUtility.testConnection(site.getHost(), 
+					"" + site.getPort(), site.getPath(), site.getProtocol()); //$NON-NLS-1$
+			cache.put(site, connected);
+			cache.resetTimer();
+			return connected;
 		}
-		return badSites;
 	}
 	
 	/*
@@ -123,4 +123,63 @@ public class RemoteStatusData {
 		}
 		return sites;
 	}
+
+	public static void clearCache() {
+		ConnectionCache.clear();
+	}
+	
+	private static class ConnectionCache
+	{
+		private static ConnectionCache instance;
+		
+		private Hashtable cache;
+		private long start;
+		
+		private ConnectionCache(){
+		
+			cache = new Hashtable();
+			resetTimer();
+		}
+		
+		public void resetTimer()
+		{
+			start = new Date().getTime();
+		}
+		
+		public static ConnectionCache getCache()
+		{
+			if (instance==null || instance.isExpired())
+			{
+				instance = new ConnectionCache();
+			}
+			return instance;
+		}
+		
+		public static void clear()
+		{
+			instance = null;
+		}
+		
+		public boolean isExpired()
+		{
+			long now = new Date().getTime();
+			
+			return (now > start + TIMEOUT);
+		}
+		
+		public boolean isConnected(URL url) throws CoreException
+		{
+			Boolean b = (Boolean)cache.get(url);
+			if (b==null)
+				throw new CoreException(new Status(IStatus.ERROR,HelpBasePlugin.PLUGIN_ID,"Cache Unavailable")); //$NON-NLS-1$
+			
+			return b.booleanValue();
+		}
+		
+		public void put(URL url,boolean connected)
+		{
+			cache.put(url,new Boolean(connected));
+		}
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeHandle.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeHandle.java
index c49d530..0465ff5 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeHandle.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeHandle.java
@@ -12,8 +12,9 @@
 package org.eclipse.help.internal.base.scope;
 
 import org.eclipse.help.base.AbstractHelpScope;
+import org.eclipse.help.base.IScopeHandle;
 
-public class ScopeHandle {
+public class ScopeHandle implements IScopeHandle{
 	
 	private AbstractHelpScope scope;	
 	private String id;
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeRegistry.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeRegistry.java
index 30583a2..596f4fe 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeRegistry.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeRegistry.java
@@ -21,6 +21,8 @@ import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.help.base.AbstractHelpScope;
+import org.eclipse.help.base.IHelpScopeProducer;
+import org.eclipse.help.base.IScopeHandle;
 import org.eclipse.help.internal.base.HelpBasePlugin;
 
 public class ScopeRegistry {
@@ -42,9 +44,8 @@ public class ScopeRegistry {
 	}
 	
 	public static ScopeRegistry getInstance() {
-		if (instance == null) {
+		if (instance == null)
 			instance = new ScopeRegistry();
-		}
 		return instance;
 	}
 	
@@ -53,9 +54,11 @@ public class ScopeRegistry {
 			return new UniversalScope();
 		}
 		readScopes();
+		
+		
 		// Lookup in scope registry
 		for (Iterator iter = scopes.iterator(); iter.hasNext();) {
-			ScopeHandle handle = (ScopeHandle) iter.next();
+			IScopeHandle handle = (IScopeHandle) iter.next();
 			if (id.equals(handle.getId())) {
 				return handle.getScope();
 			}
@@ -82,16 +85,22 @@ public class ScopeRegistry {
 			}
 			if (obj instanceof AbstractHelpScope) {
 				String id = elements[i].getAttribute("id"); //$NON-NLS-1$
-				ScopeHandle filter = new ScopeHandle(id, (AbstractHelpScope) obj);
+				IScopeHandle filter = new ScopeHandle(id, (AbstractHelpScope) obj);
 				scopes.add(filter);
 			}
+			else if (obj instanceof IHelpScopeProducer)
+			{
+				IScopeHandle dynamicScopes[] = ((IHelpScopeProducer)obj).getScopeHandles();
+				for (int d=0;d<dynamicScopes.length;d++)
+					scopes.add(dynamicScopes[d]);
+			}
 		}
 		initialized = true;
 	}
 	
-	public ScopeHandle[] getScopes() {
+	public IScopeHandle[] getScopes() {
 		readScopes();
-		return (ScopeHandle[]) scopes.toArray(new ScopeHandle[scopes.size()]);
+		return (IScopeHandle[]) scopes.toArray(new IScopeHandle[scopes.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java
index 75c0f97..cef1482 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/ScopeUtils.java
@@ -66,7 +66,10 @@ public class ScopeUtils {
 	 * An entry with no topic descendants does not display
 	 */
 	public static boolean showInTree(IIndexEntry entry, AbstractHelpScope scope) {
-		return (scope.inScope(entry) || !scope.isHierarchicalScope()) && hasInScopeDescendent(entry, scope);
+		if (scope.isHierarchicalScope() && !scope.inScope(entry)) {
+			return false;
+		}
+		return hasInScopeDescendent(entry, scope);
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/WorkingSetScope.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/WorkingSetScope.java
index 4d64163..ecc9c28 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/WorkingSetScope.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/scope/WorkingSetScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,15 +38,20 @@ public class WorkingSetScope extends AbstractHelpScope {
 	
 	private static final String UNCATEGORIZED = "Uncategorized"; //$NON-NLS-1$
 	
-	private IHelpWorkingSetManager wSetManager;
 	private WorkingSet workingSet;
 	private AdaptableHelpResource[] elements;
 	private CriterionResource[] criteria;
 	private String name;
-	
+
 	public WorkingSetScope(String scope, IHelpWorkingSetManager manager, String name) {
-		wSetManager = manager;
-		workingSet = wSetManager.getWorkingSet(scope); 
+		workingSet = manager.getWorkingSet(scope); 
+		elements = workingSet.getElements();
+		criteria = workingSet.getCriteria();
+		this.name = name;
+	}
+	
+	public WorkingSetScope(WorkingSet wset, String name) {
+		workingSet = wset;
 		elements = workingSet.getElements();
 		criteria = workingSet.getCriteria();
 		this.name = name;
@@ -143,13 +148,7 @@ public class WorkingSetScope extends AbstractHelpScope {
 					toc = (IToc) uae;
 					uae = null;
 				} else if (uae instanceof IIndexEntry) {
-					for (int i = 0; i < elements.length; i++) {
-						AdaptableHelpResource adaptable = elements[i];
-						if (adaptable.getTopic(topic.getHref()) != null) {
-							return true;
-						}
-					}
-					return false;
+					return isHrefInScope(topic.getHref());
 				} else {					
 					if (uae instanceof ITopic) {
 					    topics.add(uae);
@@ -179,6 +178,24 @@ public class WorkingSetScope extends AbstractHelpScope {
 		}
 		return false;
 	}
+
+	private boolean isHrefInScope(String href) {
+		String anchorlessHref;
+		int index = href.indexOf('#');
+		if (index != -1) {
+			anchorlessHref = href.substring(0, index);
+		} else {
+			anchorlessHref = href;
+		}
+
+		for (int i = 0; i < elements.length; i++) {
+			AdaptableHelpResource adaptable = elements[i];
+			if (adaptable.getTopic(anchorlessHref) != null) {
+				return true;
+			}
+		}
+		return false;
+	}
 	
 	private boolean inCriteriaScope(ITopic topic) {
 		if(null == topic){
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/TestConnectionUtility.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/TestConnectionUtility.java
new file mode 100644
index 0000000..7709110
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/base/util/TestConnectionUtility.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+ 
+ package org.eclipse.help.internal.base.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import org.eclipse.help.internal.base.remote.HttpsUtility;
+
+public class TestConnectionUtility {
+
+	//This class provides a utility for testing if a connection
+	//can be made to a given URL
+	private static final String PATH_TOC = "/toc"; //$NON-NLS-1$
+	private static final String PROTOCOL = "http"; //$NON-NLS-1$
+	private static final String PROTOCOL_HTTPS = "https"; //$NON-NLS-1$
+	
+	private final static int SOCKET_TIMEOUT = 5000; //milliseconds
+	
+	public static boolean testConnection(String thisHost, String thisPort,
+			String thisPath, String thisProtocol) {
+
+		boolean validConnection = true;
+		String urlConnection = ""; //$NON-NLS-1$
+
+		// Build connection string
+		if (thisPort.equals("80")) //$NON-NLS-1$
+			urlConnection = thisProtocol + "://" + thisHost + thisPath; //$NON-NLS-1$
+		else
+			urlConnection = thisProtocol + "://" + thisHost + ":" + thisPort + thisPath; //$NON-NLS-1$ //$NON-NLS-2$
+
+		if(thisProtocol.equalsIgnoreCase(PROTOCOL))
+		{
+			// Test Connection. If exception thrown, invalid connection
+			try {
+				// Validate Toc connection...
+				URL testTocURL = new URL(urlConnection + PATH_TOC);
+				validConnection = isValidToc(testTocURL);
+			} catch (MalformedURLException e) {
+				validConnection = false;
+			}
+		}
+		else if(thisProtocol.equalsIgnoreCase(PROTOCOL_HTTPS))
+		{
+			// Validate Toc connection...
+			validConnection = HttpsUtility.canConnectToHttpsURL(urlConnection + PATH_TOC);
+		}
+		return validConnection;
+	}
+	
+	private static boolean isValidToc(URL url)
+	{
+		InputStream in = null;
+		try{
+			URLConnection connection = url.openConnection();
+			setTimeout(connection, SOCKET_TIMEOUT);
+			connection.connect();
+			in = connection.getInputStream();
+			if (in!=null)
+			{
+				BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+				String line;
+				while (( line = reader.readLine())!=null){
+					if (line.indexOf("<tocContributions>")>-1) //$NON-NLS-1$
+						return true;
+				}
+			}
+		}catch (Exception ex){}
+		finally{
+			try {
+				if (in!=null)
+					in.close();
+			} catch (IOException e) {}
+		}
+		return false;
+	}
+
+	private static void setTimeout(URLConnection conn, int milliseconds) {
+		Class conClass = conn.getClass();
+		try {
+			Method timeoutMethod = conClass.getMethod(
+					"setConnectTimeout", new Class[]{ int.class } ); //$NON-NLS-1$
+			timeoutMethod.invoke(conn, new Object[] { new Integer(milliseconds)} );
+		} catch (Exception e) {
+		     // If running on a 1.4 JRE an exception is expected, fall through
+		} 
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
index c32cc60..efa0d8d 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ import org.eclipse.help.internal.base.remote.HttpsUtility;
 import org.eclipse.help.internal.base.remote.PreferenceFileHandler;
 import org.eclipse.help.internal.base.remote.RemoteContentLocator;
 import org.eclipse.help.internal.base.remote.RemoteHelp;
+import org.eclipse.help.internal.base.remote.RemoteHelpInputStream;
 import org.eclipse.help.internal.util.ResourceLocator;
 import org.eclipse.help.internal.util.URLCoder;
 import org.osgi.framework.Bundle;
@@ -135,7 +136,9 @@ public class HelpURLConnection extends URLConnection {
         if (in == null && (helpOption==PreferenceFileHandler.LOCAL_HELP_PRIORITY || helpOption==PreferenceFileHandler.REMOTE_HELP_PRIORITY)) { 
 			
         	in = openFromRemoteServer(getHref(), getLocale());
-        	
+        	if( in != null ){
+        		in = new RemoteHelpInputStream(in);
+        	}
         	if(in==null && plugin!=null && helpOption==PreferenceFileHandler.REMOTE_HELP_PRIORITY) 
         	{
         		in = getLocalHelp(plugin);
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java
index 1ff3019..4a7394a 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLStreamHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
index 4b5450c..d56f0a8 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/Analyzer_en.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.help.internal.search;
 import java.io.*;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.apache.lucene.analysis.*;
 /**
@@ -27,8 +29,21 @@ public class Analyzer_en extends Analyzer {
 	 * Reader.
 	 */
 	public final TokenStream tokenStream(String fieldName, Reader reader) {
-		return new PorterStemFilter(new StopFilter(new LowerCaseAndDigitsTokenizer(reader), STOP_WORDS));
+		return new PorterStemFilter(new StopFilter(false, new LowerCaseAndDigitsTokenizer(reader), getStopWords(), false));
 	}
+	
+	private Set stopWords;
+	
+	private Set getStopWords() {
+		if ( stopWords == null ) {
+			stopWords = new HashSet();
+			for (int i = 0; i < STOP_WORDS.length; i++) {
+			    stopWords.add(STOP_WORDS[i]);
+			}
+		}
+		return stopWords;
+	}
+	
 	/**
 	 * Array of English stop words. Differs from StandardAnalyzer's default stop
 	 * words by not having "for", "if", and "this" that are java keywords.
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java
index 5f745c9..bd8adb5 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,7 +24,8 @@ import java.util.Set;
 import java.util.StringTokenizer;
 
 import org.apache.lucene.document.Document;
-import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.TopDocs;
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProduct;
@@ -143,19 +144,22 @@ public class LocalSearchManager {
 	}
 
 	/**
-	 * Converts the given Hits object into a List of raw SearchHits.
+	 * Converts the given TopDocs object into a List of raw SearchHits.
 	 * Hits objects are immutable and can't be instantiated from outside
 	 * Lucene.
+	 * @param searcher 
 	 * 
-	 * @param hits the Hits object to convert
+	 * @param hits the TopDocs object to convert
 	 * @return a List of raw SearchHits
 	 */
-	public static List asList(Hits hits) {
-		List list = new ArrayList(hits.length());
-		for (int i=0;i<hits.length();++i) {
+
+	public static List asList(TopDocs topDocs, IndexSearcher searcher) {
+		List list = new ArrayList(topDocs.totalHits);
+		
+		for (int i=0; i<topDocs.totalHits; ++i) {
 			try {
-				Document doc = hits.doc(i);
-				float score = hits.score(i);
+				Document doc = searcher.doc(topDocs.scoreDocs[i].doc); 
+				float score = topDocs.scoreDocs[i].score;
 				String href = doc.get("name"); //$NON-NLS-1$
 				String summary = doc.get("summary");			 //$NON-NLS-1$
 				String id = doc.get("id"); //$NON-NLS-1$
@@ -705,4 +709,5 @@ public class LocalSearchManager {
 			}
 		}
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java
index beee870..d5362c0 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/LuceneSearchDocument.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,8 +31,8 @@ public class LuceneSearchDocument implements ISearchDocument {
 	}
 
 	public void setTitle(String title) {
-		doc.add(new Field("title", title, Field.Store.NO, Field.Index.TOKENIZED)); //$NON-NLS-1$
-		doc.add(new Field("exact_title", title, Field.Store.NO, Field.Index.TOKENIZED)); //$NON-NLS-1$
+		doc.add(new Field("title", title, Field.Store.NO, Field.Index.ANALYZED)); //$NON-NLS-1$
+		doc.add(new Field("exact_title", title, Field.Store.NO, Field.Index.ANALYZED)); //$NON-NLS-1$
 		doc.add(new Field("raw_title", title, Field.Store.YES, Field.Index.NO)); //$NON-NLS-1$
 	}
 
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
index 9273e60..239582d 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginIndex.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,7 +129,7 @@ public class PluginIndex {
 		}
 	}
 
-	private boolean isCompatible(Bundle bundle, IPath prefixedPath) {
+	public boolean isCompatible(Bundle bundle, IPath prefixedPath) {
 		URL url = FileLocator.find(bundle, prefixedPath
 				.append(SearchIndex.DEPENDENCIES_VERSION_FILENAME), null);
 		if (url == null) {
@@ -190,11 +190,15 @@ public class PluginIndex {
 	}
 
 	public boolean equals(Object obj) {
-		return pluginId.equals(obj);
+		if ( !(obj instanceof PluginIndex) ) {
+			return false;
+		}
+		PluginIndex index = (PluginIndex) obj;
+		return pluginId.equals(index.pluginId) && path.equals(index.path);
 	}
 
 	public int hashCode() {
-		return pluginId.hashCode();
+		return pluginId.hashCode() + path.hashCode();
 	}
 
 	public String toString() {
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
index a1f31ca..c0fea18 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.Locale;
 import java.util.StringTokenizer;
 
 import org.apache.lucene.analysis.*;
+import org.apache.lucene.analysis.tokenattributes.TermAttribute;
 import org.apache.lucene.index.*;
 import org.apache.lucene.search.*;
 import org.eclipse.help.internal.base.*;
@@ -243,14 +244,18 @@ public class QueryBuilder {
 		List words = new ArrayList(1);
 		Reader reader = new StringReader(text);
 		TokenStream tStream = analyzer.tokenStream(fieldName, reader);
-		Token tok;
+		
+		TermAttribute termAttribute = (TermAttribute) tStream.getAttribute(TermAttribute.class);
+
 		try {
-			while (null != (tok = tStream.next())) {
-				words.add(tok.termText());
+			while (tStream.incrementToken()) {
+				String term = termAttribute.term();
+				words.add(term);
 			}
 			reader.close();
 		} catch (IOException ioe) {
 		}
+		
 		return words;
 	}
 	/**
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
index fb299c7..50930c7 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,12 +37,13 @@ import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermDocs;
+import org.apache.lucene.index.IndexWriter.MaxFieldLength;
 import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Hits;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
@@ -52,6 +53,7 @@ import org.eclipse.core.runtime.InvalidRegistryObjectException;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.help.internal.HelpPlugin;
 import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.base.HelpBasePlugin;
 import org.eclipse.help.internal.base.util.HelpProperties;
@@ -78,6 +80,8 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 	private IndexWriter iw;
 
 	private File indexDir;
+	
+	private Directory luceneDirectory;
 
 	private String locale;
 
@@ -154,10 +158,15 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 		this.analyzerDescriptor = analyzerDesc;
 		this.tocManager = tocManager;
 		this.indexDir = indexDir;
+		
 		this.relativePath = relativePath;
 		// System.out.println("Index for a relative path: "+relativePath);
 		inconsistencyFile = new File(indexDir.getParentFile(), locale + ".inconsistent"); //$NON-NLS-1$
 		htmlSearchParticipant = new HTMLSearchParticipant(indexDir.getAbsolutePath());
+		try {
+			luceneDirectory = new NIOFSDirectory(indexDir);
+		} catch (IOException e) {
+		}
 		if (!exists()) {
 			try {
 				if (tryLock()) {
@@ -188,11 +197,11 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 	public IStatus addDocument(String name, URL url) {
 		try {
 			Document doc = new Document();
-			doc.add(new Field(FIELD_NAME, name, Field.Store.YES, Field.Index.UN_TOKENIZED));
+			doc.add(new Field(FIELD_NAME, name, Field.Store.YES, Field.Index.NOT_ANALYZED));
 			addExtraFields(doc);
 			String pluginId = LocalSearchManager.getPluginId(name);
 			if (relativePath != null) {
-				doc.add(new Field(FIELD_INDEX_ID, relativePath, Field.Store.YES, Field.Index.UN_TOKENIZED));
+				doc.add(new Field(FIELD_INDEX_ID, relativePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
 			}
 			// check for the explicit search participant.
 			SearchParticipant participant = null;
@@ -267,9 +276,9 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 			indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir);
 			indexedDocs.restore();
 			setInconsistent(true);
-			iw = new IndexWriter(indexDir, analyzerDescriptor.getAnalyzer(), create);
+			MaxFieldLength max = new MaxFieldLength(1000000);
+			iw = new IndexWriter(luceneDirectory, analyzerDescriptor.getAnalyzer(), create, max);
 			iw.setMergeFactor(20);
-			iw.setMaxFieldLength(1000000);
 			return true;
 		} catch (IOException e) {
 			HelpBasePlugin.logError("Exception occurred in search indexing at beginAddBatch.", e); //$NON-NLS-1$
@@ -288,7 +297,7 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 			indexedDocs = new HelpProperties(INDEXED_DOCS_FILE, indexDir);
 			indexedDocs.restore();
 			setInconsistent(true);
-			ir = IndexReader.open(indexDir);
+			ir = IndexReader.open(luceneDirectory, false);
 			return true;
 		} catch (IOException e) {
 			HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$
@@ -304,7 +313,7 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 			if (ir != null) {
 				ir.close();
 			}
-			ir = IndexReader.open(indexDir);
+			ir = IndexReader.open(luceneDirectory, false);
 			return true;
 		} catch (IOException e) {
 			HelpBasePlugin.logError("Exception occurred in search indexing at beginDeleteBatch.", e); //$NON-NLS-1$
@@ -450,7 +459,7 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 				String indexId = (String) indexIds.get(i);
 				String indexPath = (String) indexPaths.get(i);
 				try {
-					dirList.add(FSDirectory.getDirectory(indexPath, false));
+					dirList.add(new NIOFSDirectory(new File(indexPath)));
 				} catch (IOException ioe) {
 					HelpBasePlugin
 							.logError(
@@ -496,7 +505,8 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 		}
 		Directory[] luceneDirs = (Directory[]) dirList.toArray(new Directory[dirList.size()]);
 		try {
-			iw.addIndexes(luceneDirs);
+			iw.addIndexesNoOptimize(luceneDirs);
+			iw.optimize();
 		} catch (IOException ioe) {
 			HelpBasePlugin.logError("Merging search indexes failed.", ioe); //$NON-NLS-1$
 			return new HashMap();
@@ -606,13 +616,16 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 			QueryBuilder queryBuilder = new QueryBuilder(searchQuery.getSearchWord(), analyzerDescriptor);
 			Query luceneQuery = queryBuilder.getLuceneQuery(searchQuery.getFieldNames(), searchQuery
 					.isFieldSearch());
+			if (HelpPlugin.DEBUG_SEARCH) {
+				System.out.println("Search Query: " + luceneQuery.toString()); //$NON-NLS-1$
+			}
 			String highlightTerms = queryBuilder.gethighlightTerms();
 			if (luceneQuery != null) {
 				if (searcher == null) {
 					openSearcher();
 				}
-				Hits hits = searcher.search(luceneQuery);
-				collector.addHits(LocalSearchManager.asList(hits), highlightTerms);
+				TopDocs topDocs = searcher.search(luceneQuery, null, 1000);
+				collector.addHits(LocalSearchManager.asList(topDocs, searcher), highlightTerms);	
 			}
 		} catch (BooleanQuery.TooManyClauses tmc) {
 			collector.addQTCException(new QueryTooComplexException());
@@ -692,24 +705,33 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 		return isLuceneCompatible(usedLuceneVersion);
 	}
 
-	public boolean isLuceneCompatible(String luceneVersion) {
-		if (luceneVersion==null) return false;
-		String currentLuceneVersion = ""; //$NON-NLS-1$
+	/**
+	 * Determines whether an index can be read by the Lucene bundle
+	 * @param indexVersionString The version of an Index directory
+	 * @return
+	 */
+	public boolean isLuceneCompatible(String indexVersionString) {
+		if (indexVersionString==null) return false;
+		String luceneVersionString = ""; //$NON-NLS-1$
 		Bundle luceneBundle = Platform.getBundle(LUCENE_BUNDLE_ID);
 		if (luceneBundle != null) {
-			currentLuceneVersion += (String) luceneBundle.getHeaders()
+			luceneVersionString += (String) luceneBundle.getHeaders()
 					.get(Constants.BUNDLE_VERSION);
 		}
-		//Direct comparison
-		if (currentLuceneVersion.equals(luceneVersion))
+		Version luceneVersion = new Version(luceneVersionString);
+		Version indexVersion = new Version(indexVersionString);
+		Version v191 = new Version(1, 9, 1);
+		if (indexVersion.compareTo(v191) < 0) {
+			// index is older than Lucene 1.9.1
+			return false;
+		}
+		if ( luceneVersion.compareTo(indexVersion) >= 0 ) {
+			// Lucene bundle is newer than the index
 			return true;
-		Version version = new Version(currentLuceneVersion);
-		Version currentVersion = new Version(luceneVersion);
-		// must not compare with the qualifier because they
-		// change from build to build
-		return version.getMajor() == currentVersion.getMajor()
-				&& version.getMinor() == currentVersion.getMinor()
-				&& version.getMicro() == currentVersion.getMicro();
+		}
+		return luceneVersion.getMajor() == indexVersion.getMajor()
+				&& luceneVersion.getMinor() == indexVersion.getMinor()
+				&& luceneVersion.getMicro() == indexVersion.getMicro();
 	}
 
 	private boolean isAnalyzerCompatible() {
@@ -770,7 +792,7 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 	public void openSearcher() throws IOException {
 		synchronized (searcherCreateLock) {
 			if (searcher == null) {
-				searcher = new IndexSearcher(indexDir.getAbsolutePath());
+				searcher = new IndexSearcher(luceneDirectory, false);
 			}
 		}
 	}
@@ -866,8 +888,9 @@ public class SearchIndex implements ISearchIndex, IHelpSearchIndex {
 	 */
 	private void cleanOldIndex() {
 		IndexWriter cleaner = null;
+		MaxFieldLength max = new MaxFieldLength(10000);
 		try {
-			cleaner = new IndexWriter(indexDir, analyzerDescriptor.getAnalyzer(), true);
+			cleaner = new IndexWriter(luceneDirectory, analyzerDescriptor.getAnalyzer(), true, max);
 		} catch (IOException ioe) {
 		} finally {
 			try {
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchManager.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchManager.java
index 4c684d5..70f96bc 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchManager.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,8 +16,11 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.core.runtime.jobs.Job;
@@ -26,6 +29,8 @@ import org.eclipse.help.internal.base.remote.RemoteHelp;
 import org.eclipse.help.internal.base.remote.RemoteSearchManager;
 import org.eclipse.help.internal.search.federated.FederatedSearchEntry;
 import org.eclipse.help.internal.search.federated.FederatedSearchJob;
+import org.eclipse.help.search.AbstractSearchProcessor;
+import org.eclipse.help.search.ISearchResult;
 
 /*
  * Manages both local and remote searching, as well as merging of results.
@@ -35,38 +40,46 @@ public class SearchManager {
 	private LocalSearchManager localManager = new LocalSearchManager();
 	private RemoteSearchManager remoteManager = new RemoteSearchManager();
 	
-	private IProgressMonitor localMonitor;
-	private IProgressMonitor remoteMonitor;
-	
-	private ISearchQuery searchQuery;
-	private ISearchHitCollector collector;
-	private BufferedSearchHitCollector bufferedCollector = new BufferedSearchHitCollector();
-	
-	private Job localSearchJob;
-	private Job remoteSearchJob;
+	private class SearchState {
+
+		public IProgressMonitor localMonitor;
+		public IProgressMonitor remoteMonitor;
+
+		public ISearchQuery searchQuery;
+		public BufferedSearchHitCollector bufferedCollector = new BufferedSearchHitCollector();
+
+		public Job localSearchJob;
+		public Job remoteSearchJob;
+
+		public SearchState() {
+			/*
+			 * We use these jobs to perform the local and remote searches in parallel in the
+			 * background.
+			 */
+			localSearchJob = new Job("localSearchJob") { //$NON-NLS-1$
+
+				protected IStatus run(IProgressMonitor monitor) {
+					localManager.search(searchQuery, bufferedCollector, localMonitor);
+					return Status.OK_STATUS;
+				}
+			};
+			remoteSearchJob = new Job("remoteSearchJob") { //$NON-NLS-1$
+
+				protected IStatus run(IProgressMonitor monitor) {
+					remoteManager.search(searchQuery, bufferedCollector, remoteMonitor);
+					return Status.OK_STATUS;
+				}
+			};
+			localSearchJob.setSystem(true);
+			remoteSearchJob.setSystem(true);
+		}
+	}
 
 	/*
 	 * Constructs a new SearchManager.
 	 */
 	public SearchManager() {
-		/*
-		 * We use these jobs to perform the local and remote searches in parallel
-		 * in the background.
-		 */
-		localSearchJob = new Job("localSearchJob") { //$NON-NLS-1$
-			protected IStatus run(IProgressMonitor monitor) {
-				localManager.search(searchQuery, bufferedCollector, localMonitor);
-				return Status.OK_STATUS;
-			}
-		};
-		remoteSearchJob = new Job("remoteSearchJob") { //$NON-NLS-1$
-			protected IStatus run(IProgressMonitor monitor) {
-				remoteManager.search(searchQuery, bufferedCollector, remoteMonitor);
-				return Status.OK_STATUS;
-			}
-		};
-		localSearchJob.setSystem(true);
-		remoteSearchJob.setSystem(true);
+		
 	}
 	
 	/*
@@ -95,23 +108,23 @@ public class SearchManager {
 	 */
 	public void searchLocalAndRemote(ISearchQuery searchQuery, ISearchHitCollector collector, IProgressMonitor pm)
 			throws QueryTooComplexException {
-		this.searchQuery = searchQuery;
-		this.collector = collector;
+		SearchState state = new SearchState();
+		state.searchQuery = searchQuery;
 		
 		pm.beginTask("", 100); //$NON-NLS-1$
 		
 		// allocate half of the progress bar for each
-		localMonitor = new SubProgressMonitor(pm, 50, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
-		remoteMonitor = new SubProgressMonitor(pm, 50, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
+		state.localMonitor = new SubProgressMonitor(pm, 50, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
+		state.remoteMonitor = new SubProgressMonitor(pm, 50, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
 		
 		// start both searches in parallel
-		localSearchJob.schedule();
-		remoteSearchJob.schedule();
+		state.localSearchJob.schedule();
+		state.remoteSearchJob.schedule();
 		
 		// wait until finished
 		try {
-			localSearchJob.join();
-			remoteSearchJob.join();
+			state.localSearchJob.join();
+			state.remoteSearchJob.join();
 		}
 		catch (InterruptedException e) {
 			String msg = "Unexpected InterruptedException while waiting for help search jobs to finish"; //$NON-NLS-1$
@@ -119,7 +132,7 @@ public class SearchManager {
 		}
 
 		// results are in; send them off to the collector
-		bufferedCollector.flush();
+		state.bufferedCollector.flush(collector);
 		pm.done();
 	}
 	
@@ -155,6 +168,81 @@ public class SearchManager {
 	}
 	
 	/*
+	 * Gets the list of registered search processors
+	 */
+	public static AbstractSearchProcessor[] getSearchProcessors()
+	{
+		IConfigurationElement[] configs = 
+			Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.help.base.searchProcessor"); //$NON-NLS-1$
+		
+		ArrayList processors = new ArrayList();
+		
+		for (int c=0;c<configs.length;c++)
+		{
+			try {
+				processors.add(
+						configs[c].createExecutableExtension("class"));//$NON-NLS-1$
+			} catch (CoreException e) {} 
+		}
+		
+		return (AbstractSearchProcessor[])processors.toArray(new AbstractSearchProcessor[processors.size()]);
+	}
+	
+	/*
+	 * Convert Lucene SearchHits to ISearchResults
+	 */
+	public static ISearchResult[] convertHitsToResults(SearchHit hits[]) {
+
+		ISearchResult results[] = new ISearchResult[hits.length];
+		for (int r=0;r<results.length;r++)
+		{
+			SearchResult result = new SearchResult();
+			if (hits[r].getHref()!=null)
+				result.setHref(hits[r].getHref());
+			if (hits[r].getId()!=null)
+				result.setId(hits[r].getId());
+			if (hits[r].getParticipantId()!=null)
+				result.setParticipantId(hits[r].getParticipantId());
+			if (hits[r].getDescription()!=null)
+				result.setDescription(hits[r].getDescription());
+			if (hits[r].getLabel()!=null)
+				result.setLabel(hits[r].getLabel());
+			if (hits[r].getSummary()!=null)
+				result.setSummary(hits[r].getSummary());
+			if (hits[r].getToc()!=null)
+				result.setToc(hits[r].getToc());
+			if (hits[r].getIconURL()!=null)
+				result.setIcon(hits[r].getIconURL());
+			result.setScore(hits[r].getScore());
+			result.setPotentialHit(hits[r].isPotentialHit());
+			results[r] = result;
+		}
+		return results;
+	}
+
+	/*
+	 * Convert ISearchResults to SearchHits
+	 */
+	public static SearchHit[] convertResultsToHits(ISearchResult[] results) {
+
+		SearchHit hits[] = new SearchHit[results.length];
+		for (int r=0;r<results.length;r++)
+		{
+			hits[r] = new SearchHit(
+					results[r].getHref(),
+					results[r].getLabel(),
+					results[r].getSummary(),
+					results[r].getScore(),
+					results[r].getToc(),
+					results[r].getId(),
+					results[r].getParticipantId(),
+					results[r].isPotentialHit());
+		}
+		return hits;
+	}	
+	
+	
+	/*
 	 * Buffers hits, and only sends them off to the wrapped collector
 	 * when flush() is called.
 	 */
@@ -176,7 +264,7 @@ public class SearchManager {
 		 * Send all the buffered hits to the underlying collector,
 		 * and reset the buffers.
 		 */
-		public void flush() {
+		public void flush(ISearchHitCollector collector) {
 			// sort by score
 			List hitsList = new ArrayList(allHits);
 			Collections.sort(hitsList);
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResult.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResult.java
new file mode 100644
index 0000000..cb0127f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResult.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.internal.search;
+
+import java.net.URL;
+
+import org.eclipse.help.IToc;
+import org.eclipse.help.search.ISearchResult;
+
+public class SearchResult implements ISearchResult{
+
+	private String href;
+	private String id;
+	private String participantId;
+	private String description;
+	private String summary;
+	private String label;
+	private URL icon;
+	private float score;
+	private IToc toc;
+	private boolean isPotentialHit;
+	
+	public String getHref() {
+		return href;
+	}
+	
+	public void setHref(String href) {
+		this.href = href;
+	}
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+	
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getSummary() {
+		return summary;
+	}
+	
+	public void setSummary(String summary) {
+		this.summary = summary;
+	}
+	
+	public String getLabel() {
+		return label;
+	}
+	
+	public void setLabel(String label) {
+		this.label = label;
+	}
+	
+	public URL getIcon() {
+		return icon;
+	}
+	
+	public void setIcon(URL icon) {
+		this.icon = icon;
+	}
+	
+	public float getScore() {
+		return score;
+	}
+	
+	public void setScore(float score) {
+		this.score = score;
+	}
+
+	
+	public IToc getToc() {
+		return toc;
+	}
+
+	
+	public void setToc(IToc toc) {
+		this.toc = toc;
+	}
+
+	
+	public String getParticipantId() {
+		return participantId;
+	}
+
+	
+	public void setParticipantId(String participantId) {
+		this.participantId = participantId;
+	}
+
+	public boolean isPotentialHit() {
+		return isPotentialHit;
+	}
+
+	public void setPotentialHit(boolean isPotentialHit) {
+		this.isPotentialHit = isPotentialHit;
+	}
+		
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java
index 07ada38..f00aed0 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.help.IToc;
 import org.eclipse.help.ITopic;
 import org.eclipse.help.base.AbstractHelpScope;
 import org.eclipse.help.internal.HelpPlugin;
+import org.eclipse.help.internal.Topic;
 import org.eclipse.help.internal.base.scope.CriteriaHelpScope;
 import org.eclipse.help.internal.criteria.CriterionResource;
 import org.eclipse.help.internal.util.URLCoder;
@@ -138,6 +139,11 @@ public class SearchResults implements ISearchHitCollector {
 				.toArray(new SearchHit[searchHitList.size()]);
 
 	}
+	
+	public void setHits(SearchHit hits[])
+	{
+		searchHits = hits;
+	}
 	/**
 	 * Finds a topic within a scope
 	 */
@@ -162,7 +168,9 @@ public class SearchResults implements ISearchHitCollector {
 					if (toc != null) {
 						String owningTocHref = toc.getHref();
 						if (owningTocHref == tocRoot.getHref()) {
-							if (filter == null || filter.inScope(inScopeTopic)) {
+							Topic extradirTopic = new Topic();
+							extradirTopic.setHref(href);
+							if (filter == null || filter.inScope(extradirTopic)) {
 								if(!enabled || (enabled && criteriaScope.inScope(inScopeTopic))){
 									return scope;
 								}
@@ -212,13 +220,19 @@ public class SearchResults implements ISearchHitCollector {
 		IToc[] tocs = HelpPlugin.getTocManager().getTocs(locale);
 		boolean foundInToc = false;
 		for (int i = 0; i < tocs.length; i++) {
-			ITopic topic = tocs[i].getTopic(href);
+			IToc nextToc = tocs[i];
+			ITopic topic = nextToc.getTopic(href);
 			if (topic != null) {
 				foundInToc = true;
 				if (filter == null || filter.inScope(topic)) {
-					return tocs[i];
+					return nextToc;
 				}
 			} 
+			// Test for href attached to Toc element
+			topic = nextToc.getTopic(null);
+			if (topic != null && href != null && href.equals(topic.getHref())) {
+				return nextToc;
+			}
 		}
 		if (!foundInToc) {
 			// test to pick up files in extradirs
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/XHTMLSearchParticipant.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/XHTMLSearchParticipant.java
index b14f639..8e9ac86 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/XHTMLSearchParticipant.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/XHTMLSearchParticipant.java
@@ -51,6 +51,9 @@ public class XHTMLSearchParticipant extends SearchParticipantXML {
 	    		if (descriptionAttribute != null) {
 	    			hasDescriptionMetaTag = true;
 		    		data.addToSummary(descriptionAttribute);
+	    			data.addText(" "); //$NON-NLS-1$
+		    		data.addText(descriptionAttribute);
+	    			data.addText(" "); //$NON-NLS-1$
 	    		}
 	    	} else if (KEYWORDS.equalsIgnoreCase(nameAttribute)) {
 	    		String keywordsAttribute = attributes.getValue(CONTENT_ATTRIBUTE);
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/federated/LocalHelp.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/federated/LocalHelp.java
index 29ecc3c..52cb47f 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/federated/LocalHelp.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/search/federated/LocalHelp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,9 +11,12 @@
 package org.eclipse.help.internal.search.federated;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.help.internal.HelpPlugin;
 import org.eclipse.help.internal.base.*;
 import org.eclipse.help.internal.search.*;
 import org.eclipse.help.internal.workingset.WorkingSet;
@@ -25,6 +28,8 @@ import org.eclipse.help.search.*;
 public class LocalHelp implements ISearchEngine2 {
 	private static final int MAX_HITS = 500;
 
+	private List altList;
+	
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -37,6 +42,28 @@ public class LocalHelp implements ISearchEngine2 {
 			final ISearchEngineResultCollector collector,
 			IProgressMonitor monitor) throws CoreException {
 
+		AbstractSearchProcessor processors[] = SearchManager.getSearchProcessors();
+		altList = new ArrayList();
+		for (int p=0;p<processors.length;p++)
+		{
+			SearchProcessorInfo result = 
+				processors[p].preSearch(query);
+			if (result!=null)
+			{
+				String alternates[] = result.getAlternateTerms();
+				if (alternates!=null)
+					for (int a=0;a<alternates.length;a++)
+						if (!altList.contains(alternates[a]))
+							altList.add(alternates[a]);
+
+				String modQuery = result.getQuery();
+				if (modQuery!=null)
+					query = modQuery;
+			}
+		}
+		Collections.sort(altList);
+		
+		
 		SearchQuery searchQuery = new SearchQuery();
 		searchQuery.setSearchWord(query);
 		WorkingSet[] workingSets = null;
@@ -53,6 +80,25 @@ public class LocalHelp implements ISearchEngine2 {
 		}
 		BaseHelpSystem.getSearchManager().search(searchQuery, localResults,
 				monitor);
+
+		ISearchResult results[] = SearchManager.convertHitsToResults(localResults.getSearchHits());
+		boolean reset = false;
+		for (int p=0;p<processors.length;p++)
+		{
+			ISearchResult tmp[] = processors[p].postSearch(query,results);
+			if (tmp!=null)
+			{
+				reset = true;
+				results = tmp;
+			}
+		}
+		
+		if (reset)
+		{
+			SearchHit hits[] = SearchManager.convertResultsToHits(results);
+			localResults.setHits(hits);
+		}
+
 		postResults(localResults, collector, localScope.getCapabilityFiltered());
 	}
 
@@ -63,6 +109,12 @@ public class LocalHelp implements ISearchEngine2 {
 					HelpBaseResources.HelpSearch_QueryTooComplex, results.getException()));
 		}
 		SearchHit[] searchHits = results.getSearchHits();
+		if (HelpPlugin.DEBUG_SEARCH) {
+			for (int i = 0 ; i < 10 && i < searchHits.length; i++) {
+				System.out.println("Score " + searchHits[i].getScore()  //$NON-NLS-1$
+						+ ": " + searchHits[i].getLabel()); //$NON-NLS-1$
+			}
+		}
 		if (!activityFiltering) {
 			collector.accept(searchHits);
 			return;
@@ -89,6 +141,10 @@ public class LocalHelp implements ISearchEngine2 {
 		return null;
 	}
 	
+	public List getAlternates()
+	{
+		return altList;
+	}
 	
 	public boolean open(String id) {
 		int sep = id.indexOf('/');
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
index 68cbcb9..8178edb 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.logging.Logger;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.equinox.http.jetty.JettyConfigurator;
+import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.base.HelpBasePlugin;
 import org.eclipse.help.server.HelpServer;
 import org.osgi.framework.Bundle;
@@ -61,16 +62,15 @@ public class JettyHelpServer extends HelpServer {
 				d.put("http.port", new Integer(getPortParameter())); //$NON-NLS-1$
 
 				// set the base URL
-				d.put("context.path", "/help"); //$NON-NLS-1$ //$NON-NLS-2$
+				d.put("context.path", getContextPath()); //$NON-NLS-1$ 
 				d.put("other.info", getOtherInfo()); //$NON-NLS-1$ 
 
 				// suppress Jetty INFO/DEBUG messages to stderr
 				Logger.getLogger("org.mortbay").setLevel(Level.WARNING); //$NON-NLS-1$	
 
-				String hostCommandLineOverride = HelpBasePlugin.getBundleContext().getProperty("server_host"); //$NON-NLS-1$
-				if (hostCommandLineOverride != null && hostCommandLineOverride.trim().length() > 0) {
-				    d.put("http.host", hostCommandLineOverride); //$NON-NLS-1$
-				}
+				if (bindServerToHostname()) { 
+					d.put("http.host", getHost()); //$NON-NLS-1$
+				}		   
 				
 				JettyConfigurator.startServer(webappName, d);
 			} catch (Throwable t) {
@@ -91,6 +91,7 @@ public class JettyHelpServer extends HelpServer {
 		public void run() {
 			try {
 				JettyConfigurator.stopServer(webappName);
+				port = -1;
 			} catch (Throwable t) {
 				setException(t); 
 			}
@@ -206,5 +207,17 @@ public class JettyHelpServer extends HelpServer {
 	protected String getOtherInfo() {
 		return "org.eclipse.help"; //$NON-NLS-1$
 	}	
+	
+	protected String getContextPath() {
+		return "/help"; //$NON-NLS-1$
+	}
+	
+	public boolean bindServerToHostname() {
+		if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_WORKBENCH) {
+			return true;
+		}
+		String host = HelpBasePlugin.getBundleContext().getProperty("server_host"); //$NON-NLS-1$
+        return host != null && host.trim().length() > 0;
+	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/StandaloneHelp.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/StandaloneHelp.java
index 3b357b3..231b20e 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/StandaloneHelp.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/StandaloneHelp.java
@@ -91,6 +91,20 @@ public class StandaloneHelp extends EclipseController {
 	public void displayHelp(String href) throws Exception {
 		sendHelpCommand("displayHelp", new String[]{"href=" + href}); //$NON-NLS-1$ //$NON-NLS-2$
 	}
+	
+	/**
+	 * @see org.eclipse.help.standalone.Help#displayHelp()
+	 */
+	public void displayHelpWindow() throws Exception {
+		sendHelpCommand("displayHelpWindow", new String[0]); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.help.standalone.Help#displayHelp(java.lang.String)
+	 */
+	public void displayHelpWindow(String href) throws Exception {
+		sendHelpCommand("displayHelpWindow", new String[]{"href=" + href}); //$NON-NLS-1$ //$NON-NLS-2$
+	}
 
 	/**
 	 * @return true if commands contained a known command and it was executed
@@ -115,6 +129,13 @@ public class StandaloneHelp extends EclipseController {
 				displayHelp();
 			}
 			return true;
+		} else if ("displayHelpWindow".equalsIgnoreCase(command)) { //$NON-NLS-1$
+			if (helpCommands.size() >= 2) {
+				displayHelpWindow((String) helpCommands.get(1));
+			} else {
+				displayHelpWindow();
+			}
+			return true;
 		} else if (CMD_INSTALL.equalsIgnoreCase(command)
 				|| CMD_ENABLE.equalsIgnoreCase(command)
 				|| CMD_DISABLE.equalsIgnoreCase(command)
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/AbstractSearchProcessor.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/AbstractSearchProcessor.java
new file mode 100644
index 0000000..5453db5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/AbstractSearchProcessor.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.search;
+
+/**
+ * This class is responsible for handling any pre or post
+ * search processing events, including query manipulation
+ * and output to the search frame.
+ * 
+ * @since 3.6
+ *
+ */
+public abstract class AbstractSearchProcessor {
+	
+	public AbstractSearchProcessor()
+	{
+		
+	}
+	
+	/**
+	 * This method is called before the search is performed.
+	 * 
+	 * See {@link SearchProcessorInfo} for types of information that can be used by
+	 * the search display.
+	 * 
+	 * @return <code>SearchProcessorInfo</code>, or <code>null</code> for no changes.
+	 */
+	public abstract SearchProcessorInfo preSearch(String query);
+	
+	/**
+	 * This method is called after the search is performed.
+	 * 
+	 * Results are stored as an array of ISearchResult containing
+	 * all available data.
+	 * 
+	 * This method can be used to return a modified result set.  For example, one can change the 
+	 * result score of an item, add new results to the top of the list, or remove results.
+	 * 
+	 * @return <code>{@link ISearchResult}[]</code>, or <code>null</code> for no changes.
+	 */
+	public abstract ISearchResult[] postSearch(String query, ISearchResult[] results);
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/ISearchResult.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/ISearchResult.java
new file mode 100644
index 0000000..0caac1d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/ISearchResult.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.search;
+
+import java.net.URL;
+
+import org.eclipse.help.IToc;
+
+/**
+ * This class holds information for a single Search Result
+ * @since 3.6
+ * 
+ */
+public interface ISearchResult {
+	
+	/**
+	 * Get the href of this search result topic
+	 * 
+	 * @return the href of this search result topic
+	 */
+	public String getHref();
+	
+	/**
+	 * Get the description of this search result topic
+	 * 
+	 * @return the description of this search result topic
+	 */
+	public String getDescription();
+	
+	/**
+	 * Gets a summary of this search result
+	 * 
+	 * @return a summary of this search result
+	 */
+	public String getSummary();
+	
+	/**
+	 * Gets the label for this search result
+	 * 
+	 * @return the label for this search result
+	 */
+	public String getLabel();
+
+	/**
+	 * Gets the ID
+	 * 
+	 * @return the ID
+	 */
+	public String getId();
+	
+	/**
+	 * Gets the participant ID
+	 * 
+	 * @return the participant ID
+	 */
+	public String getParticipantId();
+	
+	/**
+	 * Gets the Icon for this topic
+	 * 
+	 * @return the Icon for this topic
+	 */
+	public URL getIcon();
+	
+	/**
+	 * Gets the score float value associated with this search result
+	 * 
+	 * @return the score float value associated with this search result
+	 */
+	public float getScore();
+
+	/**
+	 * Gets the IToc parent of this result
+	 * 
+	 * @return the IToc parent of this result
+	 */
+	public IToc getToc();
+	
+	/**
+	 * Returns whether the result a potential hit
+	 * 
+	 * @return <code>true</code> if the result a potential hit, <code>false</code> otherwise
+	 */
+	public boolean isPotentialHit();
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/LuceneSearchParticipant.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/LuceneSearchParticipant.java
index 7650823..01f929f 100644
--- a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/LuceneSearchParticipant.java
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/LuceneSearchParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,8 +168,8 @@ public abstract class LuceneSearchParticipant {
 	 */
 
 	protected void addTitle(String title, Document doc) {
-		doc.add(new Field("title", title, Field.Store.NO, Field.Index.TOKENIZED)); //$NON-NLS-1$
-		doc.add(new Field("exact_title", title, Field.Store.NO, Field.Index.TOKENIZED)); //$NON-NLS-1$
+		doc.add(new Field("title", title, Field.Store.NO, Field.Index.ANALYZED)); //$NON-NLS-1$
+		doc.add(new Field("exact_title", title, Field.Store.NO, Field.Index.ANALYZED)); //$NON-NLS-1$
 		doc.add(new Field("raw_title", title, Field.Store.YES, Field.Index.NO)); //$NON-NLS-1$
 	}
 
diff --git a/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/SearchProcessorInfo.java b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/SearchProcessorInfo.java
new file mode 100644
index 0000000..d0543b1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.base/src/org/eclipse/help/search/SearchProcessorInfo.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.search;
+
+/**
+ * This class is a storage container for search processing
+ * 
+ * @since 3.6
+ *
+ */
+public class SearchProcessorInfo {
+
+	private String alternateTerms[] = null;
+	private String query = null;
+	
+	/**
+	 * After {@link AbstractSearchProcessor#preSearch(String)} is called, 
+	 * this method can be used to change the search query used.
+	 * 
+	 * @return new search query String, or <code>null</code> for no change.
+	 */
+	public String getQuery() {
+		return query;
+	}
+	
+	/**
+	 * Sets the query to search with.
+	 * 
+	 * @see #getQuery()
+	 * @param query
+	 */
+	public void setQuery(String query) {
+		this.query = query;
+	}
+
+	/** 
+	 * After {@link AbstractSearchProcessor#preSearch(String)} is called, 
+	 * this method can be used to return an array of alternative search terms
+	 * a user may wish to consider.
+	 * 
+	 * @return String[] of alternate terms, or <code>null</code> for no alternate terms.
+	 * An empty array has the same effect as returning <code>null</code>.
+	 */
+	public String[] getAlternateTerms() {
+		return alternateTerms;
+	}
+
+	/**
+	 * Sets the alternate terms to be considered.
+	 * 
+	 * @see #getAlternateTerms()
+	 * @param alternateTerms
+	 */
+	public void setAlternateTerms(String[] alternateTerms) {
+		this.alternateTerms = alternateTerms;
+	}
+	
+}
diff --git a/eclipse/plugins/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java b/eclipse/plugins/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java
index ddbeeee..e04105c 100644
--- a/eclipse/plugins/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java
+++ b/eclipse/plugins/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- *     Copyright (c) 2003, 2009 IBM Corp.
+ *     Copyright (c) 2003, 2010 IBM Corp.
  *     All rights reserved.
  *
  * Contributors:
@@ -140,7 +140,8 @@ InterruptedException {
 
   void addMetaTag() throws IOException {
       metaTags.setProperty(currentMetaTag, currentMetaContent);
-      if (currentMetaTag.equalsIgnoreCase("keywords")) { //$NON-NLS-1$
+      if (currentMetaTag.equalsIgnoreCase("keywords") ||  //$NON-NLS-1$
+    	  currentMetaTag.equalsIgnoreCase("description")) { //$NON-NLS-1$
     	  writer.write(' '); 
           writer.write(currentMetaContent);
     	  writer.write(' '); 
diff --git a/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF
index 44947f2..241b064 100644
--- a/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.help.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %help_system_plugin_name
 Bundle-SymbolicName: org.eclipse.help.ui; singleton:=true
-Bundle-Version: 3.5.3.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Activator: org.eclipse.help.ui.internal.HelpUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/RootScopePage.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/RootScopePage.java
index bd61027..4044c25 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/RootScopePage.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/RootScopePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,10 @@ public abstract class RootScopePage extends PreferencePage implements
 
 	private Hashtable disabledStates = new Hashtable();
 
+	private Label spacer;
+
+	private Composite contentContainer;
+
 	/**
 	 * The default constructor.
 	 */
@@ -82,64 +86,68 @@ public abstract class RootScopePage extends PreferencePage implements
 		initializeDefaults(getPreferenceStore());
     	PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
 	     "org.eclipse.help.ui.searchScope"); //$NON-NLS-1$
-		Composite container = new Composite(parent, SWT.NULL);
+		contentContainer = new Composite(parent, SWT.NULL);
 		GridLayout layout = new GridLayout();
+		GridData gd;
 		//if (ed.isUserDefined())
-			layout.numColumns = 2;
-		container.setLayout(layout);
-		masterButton = new Button(container, SWT.CHECK);
-		masterButton.setText(Messages.RootScopePage_masterButton); 
-		GridData gd = new GridData();
-		gd.horizontalSpan = 2;//ed.isUserDefined() ? 2 : 1;
-		masterButton.setLayoutData(gd);
-		Label spacer = new Label(container, SWT.NULL);
-		gd = new GridData();
-		gd.horizontalSpan = 2;//ed.isUserDefined() ? 2 : 1;
-		spacer.setLayoutData(gd);
-		boolean masterValue = getPreferenceStore().getBoolean(
-				ScopeSet.getMasterKey(ed.getId()));
-		masterButton.setSelection(masterValue);
-		masterButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				masterValueChanged(masterButton.getSelection());
-			}
-		});
-		//if (ed.isUserDefined()) {
-			Label label = new Label(container, SWT.NULL);
+		layout.numColumns = 2;
+		contentContainer.setLayout(layout);		
+		if (isInPreferenceDialog()) {
+			masterButton = new Button(contentContainer, SWT.CHECK);
+			masterButton.setText(Messages.RootScopePage_masterButton);
+			gd = new GridData();
+			gd.horizontalSpan = 2;// ed.isUserDefined() ? 2 : 1;
+			masterButton.setLayoutData(gd);
+
+			spacer = new Label(contentContainer, SWT.NULL);
+			gd = new GridData();
+			gd.horizontalSpan = 2;// ed.isUserDefined() ? 2 : 1;
+			spacer.setLayoutData(gd);
+			boolean masterValue = getPreferenceStore().getBoolean(ScopeSet.getMasterKey(ed.getId()));
+			masterButton.setSelection(masterValue);
+			masterButton.addSelectionListener(new SelectionAdapter() {
+
+				public void widgetSelected(SelectionEvent e) {
+					masterValueChanged(masterButton.getSelection());
+				}
+			});
+
+			Label label = new Label(contentContainer, SWT.NULL);
 			label.setText(Messages.RootScopePage_name);
-			labelText = new Text(container, SWT.BORDER);
+			labelText = new Text(contentContainer, SWT.BORDER);
 			gd = new GridData(GridData.FILL_HORIZONTAL);
 			gd.widthHint = 200;
 			labelText.setLayoutData(gd);
 			labelText.setEditable(ed.isUserDefined());
-			label = new Label(container, SWT.NULL);
+			label = new Label(contentContainer, SWT.NULL);
 			label.setText(Messages.RootScopePage_desc);
 			gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
 			label.setLayoutData(gd);
-			descText = new Text(container, SWT.BORDER | SWT.MULTI | SWT.WRAP);
+			descText = new Text(contentContainer, SWT.BORDER | SWT.MULTI | SWT.WRAP);
 			gd = new GridData(GridData.FILL_HORIZONTAL);
 			descText.setEditable(ed.isUserDefined());
 			gd.widthHint = 200;
 			gd.heightHint = 48;
 			descText.setLayoutData(gd);
-		//}
-		int ccol = createScopeContents(container);
+		}
+
+		int ccol = createScopeContents(contentContainer);
 		// adjust number of columns if needed
-		if (ccol > layout.numColumns) {
+		if (ccol > layout.numColumns && isInPreferenceDialog()) {
 			layout.numColumns = ccol;
 			gd = (GridData) masterButton.getLayoutData();
 			gd.horizontalSpan = layout.numColumns;
 			gd = (GridData) spacer.getLayoutData();
 			gd.horizontalSpan = layout.numColumns;
-			//if (ed.isUserDefined()) {
-				gd = (GridData) labelText.getLayoutData();
-				gd.horizontalSpan = layout.numColumns - 1;
-				gd = (GridData) descText.getLayoutData();
-				gd.horizontalSpan = layout.numColumns - 1;
-			//}
+
+			gd = (GridData) labelText.getLayoutData();
+			gd.horizontalSpan = layout.numColumns - 1;
+			gd = (GridData) descText.getLayoutData();
+			gd.horizontalSpan = layout.numColumns - 1;
+
 		}
 		updateControls(true);
-		return container;
+		return contentContainer;
 	}
 
 	/**
@@ -157,8 +165,7 @@ public abstract class RootScopePage extends PreferencePage implements
 	}
 
 	private void updateEnableState(boolean enabled) {
-		Composite container = masterButton.getParent();
-		Control[] children = container.getChildren();
+		Control[] children = contentContainer.getChildren();
 
 		boolean first = disabledStates.isEmpty();
 		for (int i = 0; i < children.length; i++) {
@@ -206,6 +213,9 @@ public abstract class RootScopePage extends PreferencePage implements
 	 */
 
 	protected boolean isEngineEnabled() {
+		if (!isInPreferenceDialog()) {
+			return true;
+		}
 		return masterButton.getSelection();
 	}
 
@@ -219,7 +229,7 @@ public abstract class RootScopePage extends PreferencePage implements
 
 	public boolean performOk() {
 		getPreferenceStore().setValue(ScopeSet.getMasterKey(ed.getId()),
-				masterButton.getSelection());
+				isEngineEnabled());
 		if (labelText != null) {
 			ed.setLabel(labelText.getText());
 			ed.setDescription(descText.getText());
@@ -238,16 +248,22 @@ public abstract class RootScopePage extends PreferencePage implements
 	}
 
 	private void updateControls(boolean first) {
-		boolean value = getPreferenceStore().getBoolean(
-				ScopeSet.getMasterKey(ed.getId()));
-		boolean cvalue = masterButton.getSelection();
-		if (value != cvalue) {
-			masterButton.setSelection(value);
-			masterValueChanged(value);
-		} else if (first)
-			masterValueChanged(value);
-		labelText.setText(ed.getLabel());
-		descText.setText(ed.getDescription());
+		if (isInPreferenceDialog()) {
+			boolean value = getPreferenceStore().getBoolean(ScopeSet.getMasterKey(ed.getId()));
+			boolean cvalue = masterButton.getSelection();
+			if (value != cvalue) {
+				masterButton.setSelection(value);
+				masterValueChanged(value);
+			} else if (first) {
+				masterValueChanged(value);
+			}
+			labelText.setText(ed.getLabel());
+			descText.setText(ed.getDescription());
+		}
+	}
+
+	private boolean isInPreferenceDialog() {
+		return getContainer() != null;
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ContextHelpDialog.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ContextHelpDialog.java
index 265d0cd..d5982c7 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ContextHelpDialog.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ContextHelpDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -225,8 +225,7 @@ public class ContextHelpDialog {
 		if (context instanceof IContext2) {
 			styledText = ((IContext2) context).getStyledText();
 		}
-		if (styledText == null) {
-			styledText = context.getText();
+		if (styledText == null && context.getText() != null) {
 			styledText = context.getText();
 		    styledText= styledText.replaceAll("<b>","<@#\\$b>"); //$NON-NLS-1$ //$NON-NLS-2$
 		    styledText= styledText.replaceAll("</b>", "</@#\\$b>"); //$NON-NLS-1$ //$NON-NLS-2$	
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/DefaultHelpUI.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/DefaultHelpUI.java
index ff85a44..1638d91 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/DefaultHelpUI.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/DefaultHelpUI.java
@@ -1,5 +1,5 @@
 /***************************************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others. All rights reserved. This program and the
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved. This program and the
  * accompanying materials are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
@@ -150,7 +150,7 @@ public class DefaultHelpUI extends AbstractHelpUI {
 			if (page != null) {
 				IWorkbenchPart activePart = page.getActivePart();
 				try {
-					IViewPart part = page.showView(HELP_VIEW_ID, null, IWorkbenchPage.VIEW_VISIBLE);
+					IViewPart part = page.showView(HELP_VIEW_ID, null, IWorkbenchPage.VIEW_ACTIVATE);
 					if (part != null) {
 						HelpView view = (HelpView) part;
 						view.showDynamicHelp(activePart, c);
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ExecuteCommandAction.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ExecuteCommandAction.java
index 116919f..3de23d1 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ExecuteCommandAction.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/ExecuteCommandAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,7 +112,7 @@ public class ExecuteCommandAction implements ILiveHelpAction {
 			ICommandService commandService = getCommandService();
 			IHandlerService handlerService = getHandlerService();
 			ParameterizedCommand command = commandService.deserialize(serializedCommand);
-			command.executeWithChecks(null, handlerService.getCurrentState());
+			handlerService.executeCommand(command, null);
 		} catch (CommandException ex) {
 			HelpUIPlugin.logError("There was an error executing the command: " + serializedCommand, ex); //$NON-NLS-1$
 		}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/IHelpUIConstants.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/IHelpUIConstants.java
index 85bf988..a6f1a5c 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/IHelpUIConstants.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/IHelpUIConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public interface IHelpUIConstants {
 	
 	public static final String HV_TOPIC_TREE = "topic-tree"; //$NON-NLS-1$
 	public static final String HV_BOOKMARKS_TREE = "bookmarks-tree"; //$NON-NLS-1$
+	public static final String HV_BOOKMARKS_HEADER = "bookmarks-header"; //$NON-NLS-1$
 	public static final String HV_SEE_ALSO = "see-also"; //$NON-NLS-1$
 	public static final String HV_BROWSER = "browser"; //$NON-NLS-1$
 	public static final String HV_CONTEXT_HELP = "context-help"; //$NON-NLS-1$
@@ -76,10 +77,12 @@ public interface IHelpUIConstants {
 	public static final String HV_INDEX = "index"; //$NON-NLS-1$
 	public static final String HV_INDEX_TYPEIN = "index-typein"; //$NON-NLS-1$
 	public static final String HV_INDEX_PAGE = "index-page"; //$NON-NLS-1$
+	public static final String HV_SCOPE_SELECT = "scope-select"; //$NON-NLS-1$
 
 	static final String ENGINE_EXP_ID = "org.eclipse.help.ui.searchEngine"; //$NON-NLS-1$
 	static final String TAG_ENGINE = "engine"; //$NON-NLS-1$
 	static final String ATT_ID = "id"; //$NON-NLS-1$
+	
 	static final String ATT_LABEL ="label"; //$NON-NLS-1$
 	static final String ATT_ICON = "icon";//$NON-NLS-1$
 	static final String ATT_CLASS = "class";//$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.java
index fd61acf..96ec415 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ public final class Messages extends NLS {
 	public static String expression;
 	public static String expression_label;
 	public static String limit_to;
+	public static String ScopeSelect_scope;
 	public static String SeeAlsoPart_search;
 	public static String SeeAlsoPart_allTopics;
 	public static String SeeAlsoPart_goto;
@@ -86,10 +87,12 @@ public final class Messages extends NLS {
 	public static String ScopeSetDialog_edit;
 	public static String ScopeSetDialog_remove;
 	public static String ScopeSetDialog_rename;
+	public static String ScopeSetDialog_defaultName;
 	public static String RenameDialog_wtitle;
 	public static String NewDialog_wtitle;
 	public static String RenameDialog_label;
 	public static String RenameDialog_validationError;
+	public static String RenameDialog_emptyName;
 	public static String EngineResultSection_progress2;
 	public static String EngineResultSection_canceling;
 	public static String EngineResultSection_progressError;
@@ -167,6 +170,8 @@ public final class Messages extends NLS {
 	public static String ReusableHelpPart_internalWebBrowserError;
 	public static String ScopeSet_errorLoading;
 	public static String ScopeSet_errorSaving;
+	public static String ScopeSet_selectAll;
+	public static String ScopeSet_selectWorkingSet;
 	public static String IndexInstructions;
 	public static String IndexButton;
 	
@@ -272,4 +277,6 @@ public final class Messages extends NLS {
 	public static String See;
 	public static String SeeAlso;
 	public static String SeeList;
+	
+	public static String AlternateQueries;
 }
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.properties b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.properties
index 495719a..aad2395 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.properties
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/Messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -51,7 +51,8 @@ HelpView_defaultText=Click on any workbench part to show related help topics.
 
 expression = Search expression:
 expression_label = * = any string, ? = any character, "" = phrase, AND, OR, NOT = boolean operators
-limit_to = Search scope
+limit_to = Scope
+ScopeSelect_scope = Scope: {0}
 remoteHelpUnavailable=Some network help is unavailable.
 
 SeeAlsoPart_search=Search
@@ -88,23 +89,28 @@ SearchPart_potential_hit={0} (potential hit)
 WorkingSetContent = Working set &content:
 WorkingSetCriteria = Working set cr&iteria:
 UncategorizedCriteria=Uncategorized
-selectAll=Sea&rch all topics
-selectWorkingSet=Search only the following &topics
+selectAll=Include a&ll topics
+selectWorkingSet=Include only the following &topics
 FederatedSearchPart_advanced=Advanced Settings
 FederatedSearchPart_changeScopeSet=Change the current scope set
 
 ScopeSet_default=Default
-ScopeSetDialog_wtitle = Select Search Scope Sets
+ScopeSetDialog_wtitle = Select Scope Sets
 ScopeSetDialog_new=&New...
 ScopeSetDialog_edit=&Edit...
 ScopeSetDialog_remove=&Remove
 ScopeSetDialog_rename = Rena&me...
+ScopeSetDialog_defaultName=scope
 ScopeSet_errorLoading=Error loading the scope set: {0}
 ScopeSet_errorSaving=Error saving the scope set: {0}
+ScopeSet_selectAll=Show &all topics
+ScopeSet_selectWorkingSet=Show &only the following &topics:
+
 RenameDialog_wtitle = Rename Scope Set
 NewDialog_wtitle = New Scope Set
 RenameDialog_label = Scope Set &Name:
 RenameDialog_validationError = Name has already been used.
+RenameDialog_emptyName = Name may not be empty.
 
 EngineResultSection_progress2=Search in progress...
 EngineResultSection_canceling=Canceling...
@@ -151,7 +157,7 @@ SearchEmbeddedHelpOnly =  Include local help only
 SearchEmbeddedHelpFirst = Include remote help and give local help priority
 SearchEmbeddedHelpLast =  Include remote help and give it priority
 
-ScopePreferenceDialog_wtitle = Search Scope - {0}
+ScopePreferenceDialog_wtitle = Scope - {0}
 ScopePreferenceDialog_new=&New...
 ScopePreferenceDialog_delete=De&lete
 NewEngineWizard_wtitle=New Search Engine
@@ -248,3 +254,5 @@ ViewICPropsDialog_URL=URL:
 See=See {0}
 SeeAlso=See also {0}
 SeeList={0} / {1}
+
+AlternateQueries=Alternate search expressions
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowser.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowser.java
index 167c451..4bf4ace 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowser.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowser.java
@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.help.internal.base.BaseHelpSystem;
+import org.eclipse.help.internal.base.HelpApplication;
 import org.eclipse.help.internal.util.ProductPreferences;
 import org.eclipse.help.ui.internal.HelpUIPlugin;
 import org.eclipse.help.ui.internal.Messages;
@@ -115,8 +116,12 @@ public class EmbeddedBrowser {
 				prefs.putInt(BROWSER_HEIGTH, h);
 				prefs.putBoolean(BROWSER_MAXIMIZED, (shell.getMaximized()));
 				notifyCloseListners();
+				if (HelpApplication.isShutdownOnClose()) {
+					HelpApplication.stopHelp();
+				}
 			}
 		});
+							
 		browser = new Browser(shell, SWT.NONE);
 		browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 		initialize(browser);
@@ -316,6 +321,7 @@ public class EmbeddedBrowser {
 	private void initializeStatusBar(Browser browser) {
 		browser.addStatusTextListener(new StatusTextListener() {
 			public void changed(StatusTextEvent event) {
+				event.text = event.text.replaceAll("&","&&"); //$NON-NLS-1$ //$NON-NLS-2$
 				if (!event.text.equals(statusText)) {
 					statusText = event.text;
 					statusBarText.setText(statusText);
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserAdapter.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserAdapter.java
index 85c4f20..7c00492 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserAdapter.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/browser/embedded/EmbeddedBrowserAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.help.ui.internal.browser.embedded;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.help.browser.IBrowser;
 import org.eclipse.help.internal.base.BaseHelpSystem;
+import org.eclipse.help.internal.base.HelpApplication;
 import org.eclipse.osgi.service.environment.Constants;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
@@ -86,7 +87,9 @@ public class EmbeddedBrowserAdapter implements IBrowser, IBrowserCloseListener{
 	 * @see IBrowser#displayURL(String)
 	 */
 	public synchronized void displayURL(final String url) {
-		close();
+		if (!HelpApplication.isShutdownOnClose()) {
+			close();
+		}
 		if (getBrowserDisplay() == Display.getCurrent()) {
 			uiDisplayURL(url);
 		} else {
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentBlock.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentBlock.java
index 49c2f1f..9614607 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentBlock.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentBlock.java
@@ -13,6 +13,7 @@ package org.eclipse.help.ui.internal.preferences;
 import java.util.Vector;
 
 import org.eclipse.help.internal.base.remote.RemoteIC;
+import org.eclipse.help.internal.base.util.TestConnectionUtility;
 import org.eclipse.help.ui.internal.Messages;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java
index 703f6cb..42c3f2b 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpContentPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpPreferencePage.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpPreferencePage.java
index 9a1008e..a02558d 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/HelpPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,10 +122,10 @@ public class HelpPreferencePage extends PreferencePage implements
 	}
 
 	private void createOpenContents(Composite mainComposite) {
-		Label isExternalLabel = new Label(mainComposite, SWT.NONE);
-		isExternalLabel.setText(Messages.HelpPreferencePage_openContents);
-		isExternalLabel.setLayoutData(createLabelData());
 		if (BrowserManager.getInstance().isEmbeddedBrowserPresent()) {
+		    Label isExternalLabel = new Label(mainComposite, SWT.NONE);
+		    isExternalLabel.setText(Messages.HelpPreferencePage_openContents);
+		    isExternalLabel.setLayoutData(createLabelData());		
 			useExternalCombo = new Combo(mainComposite, SWT.READ_ONLY);
 			useExternalCombo.add(Messages.HelpPreferencePage_helpBrowser);
 			useExternalCombo.add(Messages.HelpPreferencePage_externalBrowser);
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/TestConnectionUtility.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/TestConnectionUtility.java
deleted file mode 100644
index 21a11ad..0000000
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/TestConnectionUtility.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
- 
- package org.eclipse.help.ui.internal.preferences;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import org.eclipse.help.internal.base.remote.HttpsUtility;
-
-public class TestConnectionUtility {
-
-	//This class provides a utility for testing if a connection
-	//can be made to a given URL
-	private static final String PROTOCOL_HTTPS = "https"; //$NON-NLS-1$
-	
-	private final static int SOCKET_TIMEOUT = 5000; //milliseconds
-	
-	public static boolean testConnection(String thisHost, String thisPort,
-			String thisPath, String thisProtocol) {
-
-		URL testURL;
-		boolean validConnection = true;
-		String urlConnection = ""; //$NON-NLS-1$
-
-		// Build connection string
-		if (thisPort.equals("80")) //$NON-NLS-1$
-			urlConnection = thisProtocol+"://" + thisHost + thisPath; //$NON-NLS-1$
-		else
-			urlConnection = thisProtocol+"://" + thisHost + ":" + thisPort //$NON-NLS-1$ //$NON-NLS-2$
-					+ thisPath;
-
-		if(thisProtocol.equalsIgnoreCase("http")) //$NON-NLS-1$
-		{
-			// Test Connection. If exception thrown, invalid connection
-			try {
-				testURL = new URL(urlConnection);
-	
-				URLConnection testConnect = testURL.openConnection();
-				setTimeout(testConnect,SOCKET_TIMEOUT);
-				testConnect.connect();
-	
-			} catch (MalformedURLException e) {
-				validConnection = false;
-			} catch (IOException e) {
-				validConnection = false;
-			}
-		}
-		else if(thisProtocol.equalsIgnoreCase(PROTOCOL_HTTPS))
-		{
-			validConnection = HttpsUtility.canConnectToHttpsURL(urlConnection);
-		}
-		return validConnection;
-	}
-
-	private static void setTimeout(URLConnection conn, int milliseconds) {
-		Class conClass = conn.getClass();
-		try {
-			Method timeoutMethod = conClass.getMethod(
-					"setConnectTimeout", new Class[]{ int.class } ); //$NON-NLS-1$
-			timeoutMethod.invoke(conn, new Object[] { new Integer(milliseconds)} );
-		} catch (Exception e) {
-		     // If running on a 1.4 JRE an exception is expected, fall through
-		} 
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/ViewICPropsDialog.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/ViewICPropsDialog.java
index dee87dd..0e9f7a4 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/ViewICPropsDialog.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/preferences/ViewICPropsDialog.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.help.ui.internal.preferences;
 
+import org.eclipse.help.internal.base.util.TestConnectionUtility;
 import org.eclipse.help.ui.internal.Messages;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.StatusDialog;
@@ -237,7 +238,8 @@ public class ViewICPropsDialog extends StatusDialog implements IShellProvider {
 		StatusInfo status = new StatusInfo(); 
 		
 		// Check to see if connection is valid
-		boolean isConnection=TestConnectionUtility.testConnection(selectedHost,selectedPort, selectedPath,selectedProtocol);
+		boolean isConnection = TestConnectionUtility.testConnection(selectedHost, 
+				selectedPort, selectedPath, selectedProtocol);
 		
 		if(isConnection)
 			status.setInfo(Messages.ViewICPropsDialog_23);
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java
index 74e32e2..c78339b 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/search/LocalHelpPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -432,4 +432,21 @@ public class LocalHelpPage extends RootScopePage {
 			}
 		}
 	}
+	
+	protected void performDefaults() {
+		searchAll.setSelection(true);
+		searchSelected.setSelection(false);
+		contentTree.setCheckedElements(new Object[0]);
+		if (criteriaTree != null) {
+		    criteriaTree.setCheckedElements(new Object[0]);
+		}
+		super.performDefaults();
+	}
+	
+	protected Label createDescriptionLabel(Composite parent) {
+		if ( getContainer() == null ) {
+			return null;
+		}
+		return super.createDescriptionLabel(parent);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/util/EscapeUtils.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/util/EscapeUtils.java
index 3ddcba9..1114c6a 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/util/EscapeUtils.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/util/EscapeUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,6 +67,9 @@ public class EscapeUtils {
 	}
 
 	private static String escapeSpecialChars(String value, boolean leaveBold) {
+		if (value == null) {
+			return null;
+		}
 		StringBuffer buf = new StringBuffer();
 		for (int i = 0; i < value.length(); i++) {
 			char c = value.charAt(i);
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/AllTopicsPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/AllTopicsPart.java
index 6e2a6f4..e0ebb12 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/AllTopicsPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/AllTopicsPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -274,10 +274,6 @@ public class AllTopicsPart extends HyperlinkTreePart implements IHelpPart {
 			treeViewer.removeFilter(parent.getRoleFilter());
 	}
 
-	public void refilter() {
-		treeViewer.refresh();
-	}
-
 	public void saveState(IMemento memento) {
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/BookmarkHeaderPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/BookmarkHeaderPart.java
new file mode 100644
index 0000000..ac12016
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/BookmarkHeaderPart.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.ui.internal.views;
+
+/**
+ * Creates padding above the bookmarks view
+ */
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+public class BookmarkHeaderPart extends AbstractFormPart implements IHelpPart  {
+
+	private Composite container;
+	private String id;
+
+	public BookmarkHeaderPart(Composite parent, FormToolkit toolkit) {	
+		container = toolkit.createComposite(parent);
+		Composite inner = toolkit.createComposite(container);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 1;
+		container.setLayout(layout);
+		GridData data = new GridData();
+		data.heightHint = 2;
+		inner.setLayoutData(data);
+	}
+	
+	public void init(ReusableHelpPart parent, String id, IMemento memento) {
+		this.id = id;
+	}
+
+	public void saveState(IMemento memento) {
+	}
+
+	public Control getControl() {
+		return container;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setVisible(boolean visible) {
+		container.setVisible(visible);
+	}
+
+	public boolean hasFocusControl(Control control) {
+		return false;
+	}
+
+	public boolean fillContextMenu(IMenuManager manager) {
+		return false;
+	}
+
+	public IAction getGlobalAction(String id) {
+		return null;
+	}
+
+	public void stop() {
+		
+	}
+
+	public void toggleRoleFilter() {
+		
+	}
+
+	public void refilter() {
+			
+	}
+		
+}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java
index 11c6598..08706f1 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -172,7 +172,7 @@ public class ContextHelpPart extends SectionPart implements IHelpPart {
 	}
 
 	private static int getSectionStyle() {
-		int style = Section.EXPANDED | Section.TITLE_BAR;
+		int style = Section.EXPANDED ;
 		if (RelatedTopicsPart.isUseDynamicHelp()) {
 			style = style | Section.TWISTIE;
 		}
@@ -301,6 +301,7 @@ public class ContextHelpPart extends SectionPart implements IHelpPart {
 		if (DefaultHelpUI.isOpeningHelpView()) {
 			return;
 		}
+
 		if (checkForRecentExplicitActivation(isExplicitRequest)) {
 			return;
 		}
@@ -309,15 +310,25 @@ public class ContextHelpPart extends SectionPart implements IHelpPart {
 		lastContext = context;
 		lastPart = part;
 		if (provider!= null && (context==null || ((context instanceof Context) && IWorkbenchHelpContextIds.MISSING.equals(((Context)context).getId())))) {
+			if (HelpPlugin.DEBUG_CONTEXT) {
+			    System.out.println("Getting context from provider"); //$NON-NLS-1$
+		    }
 			lastContext = provider.getContext(c);
 		}
 		updateSearchExpression();
 
 		String helpText;
-		if (lastContext!=null)
+		if (lastContext!=null) {
 			helpText = formatHelpContext(lastContext);
-		else
+			if (HelpPlugin.DEBUG_CONTEXT) {
+			    System.out.println("Context Activation, context =  " + lastContext.getText()); //$NON-NLS-1$
+		    }
+		} else {
+			if (HelpPlugin.DEBUG_CONTEXT) {
+			    System.out.println("Context Activation on control"); //$NON-NLS-1$
+		    }
 			helpText = createContextHelp(c);
+		}
 		updateTitle(c);
 		updateDescription(helpText);
 		if (RelatedTopicsPart.isUseDynamicHelp()) {
@@ -433,10 +444,12 @@ public class ContextHelpPart extends SectionPart implements IHelpPart {
 	 * Used for both dynamic help and to get a useful title
 	 */
 	private String[] computeSearchTerms(Control c) {
-		Composite parent = c.getParent();
+		// Search the control and all ancestors until we find a composite
+		// which we can get a search term from
+		Composite container =  c instanceof Composite ? (Composite)c : c.getParent();
 		SearchTerms searchTerms = new SearchTerms();
-		while (parent != null) {
-			Object data = parent.getData();
+		while (container != null) {
+			Object data = container.getData();
 			if (data instanceof IWizardContainer) {
 				IWizardContainer wc = (IWizardContainer) data;
 				searchTerms.add(wc.getCurrentPage().getTitle());
@@ -481,7 +494,7 @@ public class ContextHelpPart extends SectionPart implements IHelpPart {
 				searchTerms.add(w.getShell().getText());
 				break;
 			}
-			parent = parent.getParent();
+			container = container.getParent();
 		}
 		return (String[]) searchTerms.toArray();
 	}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpSorter.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpSorter.java
index 2728587..0294130 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpSorter.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ContextHelpSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,36 +26,34 @@ public class ContextHelpSorter extends ViewerComparator {
 		list = new LinkedList();
 		this.context = context;
 	}
+	
+	public void sort(Viewer viewer, Object[] elements) {
+		for (int i = 0; i < elements.length; i++) {
+			IHelpResource r1 = (IHelpResource) elements[i];
+			String c1 = context.getCategory(r1);
+			if (!list.contains(c1)) {
+			    list.add(c1);
+			}
+		}
+		super.sort(viewer, elements);
+	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
 	public int compare(Viewer viewer, Object e1, Object e2) {
-		if (!(e2 instanceof IHelpResource))
+		if (!(e2 instanceof IHelpResource)) {
 			return -1;
-		if (!(e1 instanceof IHelpResource))
+		}
+		if (!(e1 instanceof IHelpResource)) {
 			return 1;
+		}
 	    IHelpResource r1 = (IHelpResource) e1;
 	    IHelpResource r2 = (IHelpResource) e2;
 		String c1 = context.getCategory(r1);
 		String c2 = context.getCategory(r2);
 		int i1 = list.indexOf(c1);
 		int i2 = list.indexOf(c2);
-		if (i1 == -1 && i2 == -1) {
-			list.add(c1);
-			i1 = list.indexOf(c1);
-			if (i1 != i2) 
-				list.add(c2);
-			i2 = list.indexOf(c2);
-		}
-		if (i1 == -1) {
-			list.add(c1);
-			return 1;
-		}
-		if (i2 == -1) {
-			list.add(c2);
-			return -1;
-		}
 		return i1 - i2;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/EngineTypeDescriptor.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/EngineTypeDescriptor.java
index e321a0e..3a0781c 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/EngineTypeDescriptor.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/EngineTypeDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ public class EngineTypeDescriptor {
 		image = HelpUIResources.getImage(IHelpUIConstants.IMAGE_HELP_SEARCH);
 		return image;
 	}
+	
 	public String getDescription() {
 		String desc = null;
 		IConfigurationElement [] children = config.getChildren(IHelpUIConstants.TAG_DESC);
@@ -71,13 +72,15 @@ public class EngineTypeDescriptor {
 			desc = children[0].getValue();
 		return desc;
 	}
+	
 	public ImageDescriptor getImageDescriptor() {
 		ImageDescriptor desc=null;
 		String icon = config.getAttribute(IHelpUIConstants.ATT_ICON);
+		String bundleId = config.getContributor().getName();
 		if (icon!=null)
-			desc = HelpUIResources.getImageDescriptor(icon);
+			desc = HelpUIResources.getImageDescriptor(bundleId, icon);
 		else
-			desc = HelpUIResources.getImageDescriptor(IHelpUIConstants.IMAGE_HELP_SEARCH);
+			desc = HelpUIResources.getImageDescriptor(bundleId, IHelpUIConstants.IMAGE_HELP_SEARCH);
 		return desc;
 	}
 	public RootScopePage createRootPage(String scopeSetName) {
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpTray.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpTray.java
index 0fa89e3..e5c68c6 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpTray.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpTray.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,10 +79,7 @@ public class HelpTray extends DialogTray implements IPageChangedListener {
 					public void handleEvent(Event event) {
 						// close the tray
 						TrayDialog dialog = (TrayDialog)shell.getData();
-						dialog.closeTray();
-						
-						// set focus back to shell
-						shell.setFocus();
+						dialog.closeTray();						
 					}
 				});
 			}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpView.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpView.java
index 1916c32..78cae5a 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpView.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HelpView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.help.ui.internal.views;
 
 import org.eclipse.help.*;
+import org.eclipse.help.internal.HelpPlugin;
 import org.eclipse.help.ui.internal.*;
 import org.eclipse.jface.dialogs.IPageChangeProvider;
 import org.eclipse.jface.dialogs.IPageChangedListener;
@@ -56,6 +57,8 @@ public class HelpView extends ViewPart implements IPartListener2,
 		reusableHelpPart.createControl(parent, toolkit);
 		reusableHelpPart.setDefaultContextHelpText(Messages.HelpView_defaultText); 
 		reusableHelpPart.showPage(getFirstPage());
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
+	         "org.eclipse.help.ui.helpView"); //$NON-NLS-1$
 		IWorkbenchWindow window = getSite().getPage().getWorkbenchWindow();
 		if (window == null)
 			return;
@@ -132,6 +135,15 @@ public class HelpView extends ViewPart implements IPartListener2,
 				reusableHelpPart.update(part, c);
 			if (part instanceof IPageChangeProvider)
 				installPageListener(part);
+		} else {
+			if (HelpPlugin.DEBUG_CONTEXT) {
+				if (c == null) {
+				    System.out.println("Context: focus control is null " ); //$NON-NLS-1$			  
+				}
+				if (!c.isVisible()) {
+				    System.out.println("Context: focus control not visible " ); //$NON-NLS-1$
+				}
+		    }
 		}
 	}
 
@@ -210,6 +222,9 @@ public class HelpView extends ViewPart implements IPartListener2,
 			hook(true, partRef);
 			selectionChanged(null);
 		} else {
+			if (HelpPlugin.DEBUG_CONTEXT) {
+			    System.out.println("Help View: activation of " + partRef.getPartName() + " part"); //$NON-NLS-1$ //$NON-NLS-2$
+		    }
 			handlePartActivation(partRef);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HistoryScopeSet.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HistoryScopeSet.java
index c991dc2..da353da 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HistoryScopeSet.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HistoryScopeSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ public class HistoryScopeSet extends ScopeSet {
 	}
 
 	public HistoryScopeSet(HistoryScopeSet set) {
-		super(set);
+		super(set, set.getName());
 		setExpression(set.getExpression());
 	}
 	
@@ -54,22 +54,13 @@ public class HistoryScopeSet extends ScopeSet {
 		StringBuffer buf = new StringBuffer();
 		for (int i = 0; i < name.length(); i++) {
 			char c = name.charAt(i);
-			switch (c) {
-			case '\"':
-				buf.append("QUOTE"); //$NON-NLS-1$
-				break;
-			case ' ':
-				buf.append("_"); //$NON-NLS-1$
-				break;
-			case '?':
-				buf.append("QUESTION"); //$NON-NLS-1$
-				break;
-			case '*':
-				buf.append("STAR"); //$NON-NLS-1$
-				break;
-			default:
+
+			if (c == '_' || Character.isLetterOrDigit(c)) {
 				buf.append(c);
-				break;
+			} else {
+				buf.append('_');
+				buf.append((int) c);
+				buf.append('_');
 			}
 		}
 		return buf.toString();
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HyperlinkTreePart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HyperlinkTreePart.java
index d166b06..a424d89 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HyperlinkTreePart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/HyperlinkTreePart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,16 @@
  *******************************************************************************/
 package org.eclipse.help.ui.internal.views;
 
+import java.util.Observable;
+import java.util.Observer;
+
 import org.eclipse.help.*;
+import org.eclipse.help.base.AbstractHelpScope;
+import org.eclipse.help.internal.base.scope.ScopeUtils;
+import org.eclipse.help.internal.base.scope.WorkingSetScope;
+import org.eclipse.help.internal.search.federated.LocalHelpScope;
+import org.eclipse.help.internal.workingset.WorkingSet;
+import org.eclipse.help.search.ISearchScope;
 import org.eclipse.help.ui.internal.*;
 import org.eclipse.jface.action.*;
 import org.eclipse.jface.viewers.*;
@@ -28,6 +37,42 @@ import org.eclipse.ui.forms.widgets.FormToolkit;
 
 public abstract class HyperlinkTreePart extends AbstractFormPart implements
 		IHelpPart {
+	
+	public class ScopeObserver implements Observer {
+
+		public void update(Observable o, Object arg) {
+			if (o instanceof ScopeSetManager) {
+				refilter();
+			}
+		}
+	}
+	
+	private class ScopeFilter extends ViewerFilter {
+		
+		public ScopeFilter(AbstractHelpScope scope) {
+			this.scope = scope;
+		}
+		
+		AbstractHelpScope scope;
+
+		public boolean select(Viewer viewer, Object parentElement, Object element) {
+			if (element instanceof IToc) {
+				return ScopeUtils.showInTree((IToc)element, scope);
+			}
+			if (element instanceof ITopic) {
+				return ScopeUtils.showInTree((ITopic)element, scope);
+			}
+			if (element instanceof IIndexEntry) {
+				return ScopeUtils.showInTree((IIndexEntry)element, scope);
+			}
+			if (element instanceof IIndexSee) {
+				return ScopeUtils.showInTree((IIndexSee)element, scope);
+			}
+			return true;
+		}
+		
+	}
+
 	protected ReusableHelpPart parent;
 
 	private String id;
@@ -40,6 +85,8 @@ public abstract class HyperlinkTreePart extends AbstractFormPart implements
 
 	private Cursor handCursor;
 
+	private ScopeObserver scopeObserver;
+
 	/**
 	 * @param parent
 	 * @param toolkit
@@ -181,11 +228,16 @@ public abstract class HyperlinkTreePart extends AbstractFormPart implements
 				treeViewer.getTree().setCursor(null);
 			}
 		});
-		contributeToToolBar(tbm);
+		contributeToToolBar(tbm);	
+		scopeObserver = new ScopeObserver();
+		ScopeState.getInstance().getScopeSetManager().addObserver(scopeObserver);
 	}
 
 	public void dispose() {
 		handCursor.dispose();
+		if (scopeObserver != null) {
+			ScopeState.getInstance().getScopeSetManager().deleteObserver(scopeObserver);
+		}
 		super.dispose();
 	}
 
@@ -236,6 +288,7 @@ public abstract class HyperlinkTreePart extends AbstractFormPart implements
 	public void init(ReusableHelpPart parent, String id, IMemento memento) {
 		this.parent = parent;
 		this.id = id;
+	    refilter();
 	}
 
 	public String getId() {
@@ -356,4 +409,27 @@ public abstract class HyperlinkTreePart extends AbstractFormPart implements
 		if (lastItem != null && lastItem.isDisposed())
 			lastItem = null;
 	}
+	
+	public void refilter() {
+		ScopeSetManager manager = ScopeState.getInstance().getScopeSetManager();
+		ScopeSet set = manager.getActiveSet();
+		EngineDescriptor[] engineDescriptors = parent.getEngineManager().getDescriptors();
+		ISearchScope scope = null;
+		for (int i = 0; i < engineDescriptors.length; i++) {
+			final EngineDescriptor ed = engineDescriptors[i];
+			if (ed.getEngineTypeId().equals("org.eclipse.help.ui.localSearch") //$NON-NLS-1$
+				  && ed.getEngine() != null) {
+				scope = ed.createSearchScope(set.getPreferenceStore());
+			}
+		}
+		WorkingSet workingSet = null;
+		LocalHelpScope localScope = (LocalHelpScope) scope;
+		workingSet = localScope.getWorkingSet() ;
+		treeViewer.resetFilters();
+		if (workingSet != null) {
+			WorkingSetScope helpScope = new WorkingSetScope(workingSet, set.getName());
+		    treeViewer.addFilter(new ScopeFilter(helpScope));
+		}
+		treeViewer.refresh();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexPart.java
index 6b20a65..203e66c 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 Intel Corporation and others.
+ * Copyright (c) 2006, 2011 Intel Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -192,10 +192,6 @@ public class IndexPart extends HyperlinkTreePart implements IHelpUIConstants {
 			treeViewer.removeFilter(roleFilter);
 	}
 
-	public void refilter() {
-		treeViewer.refresh();
-	}
-
 	private Object[] getChildren(IIndexEntry entry) {
 		/*
 		 * Index entry has two types of children: topics and subentries.
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexTypeinPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexTypeinPart.java
index 6ab4d00..c676e7c 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexTypeinPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/IndexTypeinPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 Intel Corporation and others.
+ * Copyright (c) 2006, 2008 Intel Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/LocalScopeDialog.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/LocalScopeDialog.java
new file mode 100644
index 0000000..1cb9253
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/LocalScopeDialog.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.ui.internal.views;
+
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class LocalScopeDialog extends TrayDialog {
+
+	private static final String ORG_ECLIPSE_HELP_UI_LOCAL_SEARCH = "org.eclipse.help.ui.localSearch"; //$NON-NLS-1$
+	private EngineDescriptorManager descManager;
+	private IPreferenceStore preferenceStore;
+	private PreferencePage localHelpPage;
+	private ScopeSet scopeSet;
+
+	public LocalScopeDialog(Shell parentShell, PreferenceManager manager, EngineDescriptorManager descManager,
+			ScopeSet set) {
+		super(parentShell);
+		this.descManager = descManager;
+		this.preferenceStore = set.getPreferenceStore();
+		this.scopeSet = set;
+	}
+	
+	protected boolean isResizable() {
+		return true;
+	}
+	
+	protected Control createDialogArea(Composite parent) {
+		EngineDescriptor localSearchDesc = null;
+		for (int i = 0; localSearchDesc == null && i < descManager.getDescriptors().length; i++) {
+			if (ORG_ECLIPSE_HELP_UI_LOCAL_SEARCH.equals(descManager.getDescriptors()[i].getEngineTypeId())) {
+				localSearchDesc = descManager.getDescriptors()[i];
+			}
+		}
+		String id = localSearchDesc.getEngineTypeId();
+		localHelpPage = localSearchDesc.createRootPage(scopeSet.getName());
+    	localHelpPage.setTitle(localSearchDesc.getLabel() + '_' + id);
+    	localHelpPage.setImageDescriptor(localSearchDesc.getImageDescriptor());
+    	localHelpPage.setDescription(localSearchDesc.getDescription());
+    	localHelpPage.setPreferenceStore(preferenceStore);
+    	localHelpPage.createControl(parent);
+		Control helpPageControl = localHelpPage.getControl();
+		GridData layoutData = new GridData(GridData.FILL_BOTH);
+		helpPageControl.setLayoutData(layoutData);
+		return helpPageControl;
+	}
+	
+	protected void okPressed() {
+		localHelpPage.performOk();
+		super.okPressed();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/RenameDialog.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/RenameDialog.java
index 3dbdaf5..bd9851e 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/RenameDialog.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/RenameDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -116,24 +116,35 @@ public class RenameDialog extends SelectionStatusDialog {
 			if((isCaseSensitive && text.equals(oldNames.get(i))) ||
 					(!isCaseSensitive && text.equalsIgnoreCase(oldNames.get(i).toString()))){
 				if (setStatus) {
-				    status =  new Status(
-						IStatus.ERROR,
-						HelpUIPlugin.PLUGIN_ID,
-						IStatus.ERROR,
-						Messages.RenameDialog_validationError, 
-						null);
-				    updateStatus(status);
+					setErrorStatus(Messages.RenameDialog_validationError);
 				}
 				okButton.setEnabled(false);
 				return;
 			}
 		}
+		if (text.length() == 0 ) {
+			if (setStatus) {
+				setErrorStatus(Messages.RenameDialog_emptyName);
+			}
+			okButton.setEnabled(false);
+			return;
+		}
 		okButton.setEnabled(true);
 		if (setStatus) {
 		    setOkStatus();
 		}
 	}
 
+	private void setErrorStatus(String errorMessage) {
+		status =  new Status(
+			IStatus.ERROR,
+			HelpUIPlugin.PLUGIN_ID,
+			IStatus.ERROR,
+			errorMessage, 
+			null);
+		updateStatus(status);
+	}
+
 	private void setOkStatus() {
 		status = new Status(
 			IStatus.OK,
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ReusableHelpPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ReusableHelpPart.java
index 71c8c7c..4d6b1e2 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ReusableHelpPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ReusableHelpPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -547,10 +547,14 @@ public class ReusableHelpPart implements IHelpUIConstants,
 		}
 
 		public void setFocus() {
-			if (partRecs.size() == 0)
-				return;
-			PartRec rec = (PartRec) partRecs.get(0);
-			rec.part.setFocus();
+			// Focus on the first part that is not the see also links
+			for (int focusPart = 0; focusPart < partRecs.size(); focusPart++) {
+				PartRec rec = (PartRec) partRecs.get(focusPart);
+				if ( rec.part.getId() != IHelpUIConstants.HV_SEE_ALSO ) { 
+				    rec.part.setFocus();
+				    return;
+				}
+			}
 		}
 
 	}
@@ -742,9 +746,9 @@ public class ReusableHelpPart implements IHelpUIConstants,
 				Messages.ReusableHelpPart_searchPage_name,
 				IHelpUIConstants.IMAGE_HELP_SEARCH);
 		page.setVerticalSpacing(0);
+		page.addPart(HV_SEE_ALSO, false);
 		page.addPart(HV_FSEARCH, false);
 		page.addPart(HV_FSEARCH_RESULT, true);
-		page.addPart(HV_SEE_ALSO, false);
 		pages.add(page);
 
 		// all topics page
@@ -753,8 +757,9 @@ public class ReusableHelpPart implements IHelpUIConstants,
 				IHelpUIConstants.IMAGE_ALL_TOPICS); 
 		page.setVerticalSpacing(0);
 		page.setHorizontalMargin(0);
-		page.addPart(HV_TOPIC_TREE, true);
 		page.addPart(HV_SEE_ALSO, false);
+		page.addPart(HV_SCOPE_SELECT, false);
+		page.addPart(HV_TOPIC_TREE, true);
 		pages.add(page);
 
 		// bookmarks page
@@ -763,14 +768,15 @@ public class ReusableHelpPart implements IHelpUIConstants,
 				IHelpUIConstants.IMAGE_BOOKMARKS); 
 		page.setVerticalSpacing(0);
 		page.setHorizontalMargin(0);
-		page.addPart(HV_BOOKMARKS_TREE, true);
 		page.addPart(HV_SEE_ALSO, false);
+		page.addPart(HV_BOOKMARKS_HEADER, false);
+		page.addPart(HV_BOOKMARKS_TREE, true);
 		pages.add(page);
 		// browser page
 		page = new HelpPartPage(HV_BROWSER_PAGE, null);
 		page.setVerticalSpacing(0);
-		page.addPart(HV_BROWSER, true);
 		page.addPart(HV_SEE_ALSO, false);
+		page.addPart(HV_BROWSER, true);
 		pages.add(page);
 
 		// context help page
@@ -781,8 +787,8 @@ public class ReusableHelpPart implements IHelpUIConstants,
 		// page.addPart(HV_SEARCH_RESULT, false, true);
 		page.setVerticalSpacing(0);
 		page.setHorizontalMargin(0);
-		page.addPart(HV_RELATED_TOPICS, true);
 		page.addPart(HV_SEE_ALSO, false);
+		page.addPart(HV_RELATED_TOPICS, true);
 		pages.add(page);
 
 		// index page
@@ -790,9 +796,10 @@ public class ReusableHelpPart implements IHelpUIConstants,
 				Messages.ReusableHelpPart_indexPage_name,
 				IHelpUIConstants.IMAGE_INDEX); 
 		page.setVerticalSpacing(0);
+		page.addPart(HV_SEE_ALSO, false);
+		page.addPart(HV_SCOPE_SELECT, false);
 		page.addPart(HV_INDEX_TYPEIN, false);
 		page.addPart(HV_INDEX, true);
-		page.addPart(HV_SEE_ALSO, false);
 		pages.add(page);
 	}
 
@@ -1025,12 +1032,12 @@ public class ReusableHelpPart implements IHelpUIConstants,
 			oldPage.stop();
 			oldPage.setVisible(false);
 		}
-		mform.getForm().setText(newPage.getText());
+		mform.getForm().setText(null); //(newPage.getText());
 		mform.getForm().getForm().setSeparatorVisible(newPage.getText()!=null);
 		Image newImage=null;
-		String iconId = newPage.getIconId();
-		if (iconId != null)
-			newImage = HelpUIResources.getImage(iconId);
+		//String iconId = newPage.getIconId();
+		//if (iconId != null)
+			//newImage = HelpUIResources.getImage(iconId);
 		mform.getForm().setImage(newImage);
 		newPage.setVisible(true);
 		toolBarManager.update(true);
@@ -1068,7 +1075,7 @@ public class ReusableHelpPart implements IHelpUIConstants,
 				history.addEntry(new HistoryEntry(HistoryEntry.URL, url,
 						BaseHelpSystem.unresolve(new URL(url))));
 			} catch (MalformedURLException e) {
-				HelpUIPlugin.logError("Malformed URL: " + url, e); //$NON-NLS-1$
+				// Do not add to history
 			}
 		}
 		updateNavigation();
@@ -1169,10 +1176,14 @@ public class ReusableHelpPart implements IHelpUIConstants,
 			part = new DynamicHelpPart(parent, mform.getToolkit());
 		} else if (id.equals(HV_FSEARCH_RESULT)) {
 			part = new SearchResultsPart(parent, mform.getToolkit(), tbm);
+		} else if (id.equals(HV_SCOPE_SELECT)) {
+			part = new ScopeSelectPart(parent, mform.getToolkit());
 		} else if (id.equals(HV_SEE_ALSO)) {
 			part = new SeeAlsoPart(parent, mform.getToolkit());
 		} else if (id.equals(HV_FSEARCH)) {
 			part = new SearchPart(parent, mform.getToolkit());
+		} else if (id.equals(HV_BOOKMARKS_HEADER)) {
+			part = new BookmarkHeaderPart(parent, mform.getToolkit());
 		} else if (id.equals(HV_BOOKMARKS_TREE)) {
 			part = new BookmarksPart(parent, mform.getToolkit(), tbm);
 		} else if (id.equals(HV_INDEX)) {
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSelectPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSelectPart.java
new file mode 100644
index 0000000..9580b38
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSelectPart.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.ui.internal.views;
+
+import java.util.Observable;
+import java.util.Observer;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.help.ui.internal.Messages;
+import org.eclipse.help.ui.internal.util.EscapeUtils;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormText;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+public class ScopeSelectPart extends AbstractFormPart implements IHelpPart  {
+	
+	
+	public class ScopeObserver implements Observer {
+
+		public void update(Observable o, Object arg) {
+			String name = ScopeState.getInstance().getScopeSetManager().getActiveSet().getName();
+			setScopeLink(name);
+		}
+
+	}
+
+	private FormText scopeSetLink;
+	private Composite container;
+	private String id;
+	private ScopeObserver scopeObserver;
+
+	public ScopeSelectPart(Composite parent, FormToolkit toolkit) {	
+		container = toolkit.createComposite(parent);
+		TableWrapLayout layout = new TableWrapLayout();
+		layout.numColumns = 1;
+		container.setLayout(layout);
+		ScopeSetManager scopeSetManager = ScopeState.getInstance().getScopeSetManager();
+		String name = scopeSetManager.getActiveSet().getName();
+		scopeSetLink = toolkit.createFormText(container, false); 
+		setScopeLink(name);
+		scopeSetLink.addHyperlinkListener(new HyperlinkAdapter() {
+			public void linkActivated(HyperlinkEvent e) {
+			    doChangeScopeSet();
+			}
+		});
+		toolkit.adapt(scopeSetLink, true, true);
+		TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
+		td.valign = TableWrapData.MIDDLE;
+		scopeSetLink.setLayoutData(td);
+		scopeObserver = new ScopeObserver();
+		scopeSetManager.addObserver(scopeObserver);	
+	}
+	
+	private void doChangeScopeSet() {
+		ScopeSetManager scopeSetManager = ScopeState.getInstance().getScopeSetManager();
+		ScopeSetDialog dialog = new ScopeSetDialog(container.getShell(), 
+				scopeSetManager, 
+				ScopeState.getInstance().getEngineManager(), true);
+		dialog.setInput(scopeSetManager);
+		dialog.create();
+		dialog.getShell().setText(Messages.ScopeSetDialog_wtitle);
+		if (dialog.open() == ScopeSetDialog.OK) {
+			ScopeSet set = dialog.getActiveSet();
+			if (set != null) {
+				setActiveScopeSet(set);
+			}
+			scopeSetManager.save();
+			scopeSetManager.notifyObservers();
+		}
+	}
+	
+	private void setActiveScopeSet(ScopeSet set) {
+		setScopeLink(set.getName());
+		ScopeState.getInstance().getScopeSetManager().setActiveSet(set);
+		ScopeState.getInstance().getScopeSetManager().notifyObservers();
+	}
+
+	private void setScopeLink(String name) {
+		StringBuffer buff = new StringBuffer();
+		StringBuffer nameBuff = new StringBuffer();
+		nameBuff.append("</b> <a href=\"rescope\" "); //$NON-NLS-1$
+		if (!Platform.getWS().equals(Platform.WS_GTK)) {
+			nameBuff.append(" alt=\""); //$NON-NLS-1$
+			nameBuff.append(Messages.FederatedSearchPart_changeScopeSet);
+			nameBuff.append("\""); //$NON-NLS-1$
+		}
+			
+		nameBuff.append(">");  //$NON-NLS-1$
+		nameBuff.append(EscapeUtils.escapeSpecialChars(name ));
+		nameBuff.append(" </a><b>"); //$NON-NLS-1$
+		String scopeMessage = NLS.bind(Messages.ScopeSelect_scope, nameBuff.toString());
+		buff.append("<form><p><b>"); //$NON-NLS-1$
+		buff.append(scopeMessage);
+		buff.append("</b></p></form>"); //$NON-NLS-1$
+		scopeSetLink.setText(buff.toString(), true, false);
+	}
+
+	public void init(ReusableHelpPart parent, String id, IMemento memento) {
+		this.id = id;
+		ScopeState.getInstance().setEngineManager(parent.getEngineManager());
+	}
+
+	public void saveState(IMemento memento) {
+	}
+
+	public Control getControl() {
+		return container;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setVisible(boolean visible) {
+		container.setVisible(visible);
+	}
+
+	public boolean hasFocusControl(Control control) {
+		return false;
+	}
+
+	public boolean fillContextMenu(IMenuManager manager) {
+		return false;
+	}
+
+	public IAction getGlobalAction(String id) {
+		return null;
+	}
+
+	public void stop() {
+		
+	}
+
+	public void toggleRoleFilter() {
+		
+	}
+
+	public void refilter() {
+			
+	}
+	
+	public void dispose() {
+		if (scopeObserver != null) {
+		    ScopeState.getInstance().getScopeSetManager().deleteObserver(scopeObserver);
+		}
+		super.dispose();
+	}
+		
+}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSet.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSet.java
index a6e8b0c..e0c3db6 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSet.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,16 @@
  *******************************************************************************/
 package org.eclipse.help.ui.internal.views;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
 
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.help.ui.internal.*;
-import org.eclipse.jface.preference.*;
+import org.eclipse.help.ui.internal.HelpUIPlugin;
+import org.eclipse.help.ui.internal.Messages;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceStore;
 
 /**
  * Federated search scope.
@@ -52,8 +57,8 @@ public class ScopeSet {
 		return false;
 	}
 
-	public ScopeSet(ScopeSet set) {
-		this(set.getName()+"_new"); //$NON-NLS-1$
+	public ScopeSet(ScopeSet set, String name) {
+		this(name); 
 		copyFrom(set);
 	}
 	
@@ -108,7 +113,7 @@ public class ScopeSet {
 			FileInputStream fis = new FileInputStream(file);
 			getPreferenceStore();
 			preferenceStore.load(fis);
-			//when we clone the defult set, we should
+			//when we clone the default set, we should
 			//clear the default marker
 			preferenceStore.setValue(KEY_DEFAULT, false);
 			fis.close();
@@ -138,14 +143,15 @@ public class ScopeSet {
 				// remove the old file, set the new file name,
 				// then save to create the new file
 				oldFile.delete();
-				preferenceStore.setFilename(getFileName(name));
-				try {
-					preferenceStore.save();
-				}
-				catch (IOException e) {
-					String message = Messages.bind(Messages.ScopeSet_errorSaving, name);
-					HelpUIPlugin.logError(message, e);
-				}
+			}
+		}
+		if (preferenceStore != null) {
+			preferenceStore.setFilename(getFileName(name));
+			try {
+				preferenceStore.save();
+			} catch (IOException e) {
+				String message = Messages.bind(Messages.ScopeSet_errorSaving, name);
+				HelpUIPlugin.logError(message, e);
 			}
 		}
 		this.name = name;
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetDialog.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetDialog.java
index 7d155da..ddf8b26 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetDialog.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,23 +11,71 @@
 package org.eclipse.help.ui.internal.views;
 
 import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-import org.eclipse.help.ui.internal.*;
+import org.eclipse.help.ui.internal.HelpUIResources;
+import org.eclipse.help.ui.internal.IHelpUIConstants;
+import org.eclipse.help.ui.internal.Messages;
 import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.preference.*;
-import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.ListDialog;
 
 /**
  * Scope dialog for federated search.
  */
-public class ScopeSetDialog extends ListDialog {
+public class ScopeSetDialog extends TrayDialog  {
+	
+	
+	public class NonDefaultFilter extends ViewerFilter {
+
+		public boolean select(Viewer viewer, Object parentElement, Object element) {
+			if (element instanceof ScopeSet && ((ScopeSet)element).isDefault()) {
+				return false;
+			}
+			return true;
+		}
+
+	}
+
+	public class ShowAllListener implements SelectionListener {
+
+		public void widgetSelected(SelectionEvent e) {
+			enableTable();
+		}
+
+		public void widgetDefaultSelected(SelectionEvent e) {
+		}
+
+	}
+
 	private ScopeSetManager manager;
 	private EngineDescriptorManager descManager;
 	private static final int NEW_ID = IDialogConstants.CLIENT_ID + 1;
@@ -39,6 +87,19 @@ public class ScopeSetDialog extends ListDialog {
 	private Button removeButton;
 	private ArrayList sets;
 	private ArrayList operations;
+	private IStructuredContentProvider contentProvider;
+	
+	private Button showAllRadio;
+	private Button showSelectedRadio;
+
+	private ILabelProvider labelProvider;
+	private Object input;
+	private TableViewer viewer;
+    private int widthInChars = 55;
+    private int heightInChars = 15;
+	private ScopeSet initialSelection;
+	private Object[] result;
+	private boolean localOnly;
 	
 	private abstract class PendingOperation {
 		ScopeSet set;
@@ -138,14 +199,19 @@ public class ScopeSetDialog extends ListDialog {
 	/**
 	 * @param parent
 	 */
-	public ScopeSetDialog(Shell parent, ScopeSetManager manager, EngineDescriptorManager descManager) {
+	public ScopeSetDialog(Shell parent, ScopeSetManager manager, EngineDescriptorManager descManager, boolean localOnly) {
 		super(parent);
 		this.manager = manager;
 		this.descManager = descManager;
 		this.sets = extractSets(manager.getScopeSets(false));
-		setContentProvider(new ScopeContentProvider());
-		setLabelProvider(new ScopeLabelProvider());
-		setInitialSelections(new Object[] { manager.getActiveSet() });
+		this.localOnly = localOnly;
+		contentProvider = new ScopeContentProvider();
+		labelProvider = new ScopeLabelProvider();
+		setInitialSelections( manager.getActiveSet());
+	}
+	
+	private void setInitialSelections(ScopeSet scopeSet) {
+		initialSelection = scopeSet;
 	}
 	
 	private ArrayList extractSets(ScopeSet[] array) {
@@ -157,18 +223,72 @@ public class ScopeSetDialog extends ListDialog {
 	}
 	
     protected Control createDialogArea(Composite container) {
-    	Composite listContainer = (Composite)super.createDialogArea(container);
-    	PlatformUI.getWorkbench().getHelpSystem().setHelp(listContainer,
+    	Composite innerContainer = (Composite)super.createDialogArea(container);
+    	createRadioButtons(innerContainer);
+    	createTable(innerContainer);
+    	enableTable();
+    	PlatformUI.getWorkbench().getHelpSystem().setHelp(innerContainer,
 		     "org.eclipse.help.ui.searchScope"); //$NON-NLS-1$
-    	createEditingButtons(listContainer);
-    	getTableViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+    	createEditingButtons(innerContainer);
+    	viewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
 				updateButtons();
 			}
 		});
-    	return listContainer;
+    	ViewerFilter[] filters = { new NonDefaultFilter() };
+		viewer.setFilters(filters );
+    	return innerContainer;
+    }
+    
+	private void createRadioButtons(Composite parent) {
+		boolean showAll = initialSelection != null  && initialSelection.isDefault();
+		showAllRadio = new Button(parent, SWT.RADIO);
+    	showAllRadio.setText(Messages.ScopeSet_selectAll);
+    	
+    	showSelectedRadio = new Button(parent, SWT.RADIO);
+    	showSelectedRadio.setText(Messages.ScopeSet_selectWorkingSet);
+    	showAllRadio.addSelectionListener(new ShowAllListener());
+    	showAllRadio.setSelection(showAll);
+    	showSelectedRadio.setSelection(!showAll);
+	}
+    
+    private void createTable(Composite parent) {	
+        viewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+        viewer.setContentProvider(contentProvider);
+        viewer.setLabelProvider(labelProvider);
+        viewer.setInput(input);
+        viewer.addDoubleClickListener(new IDoubleClickListener() {
+            public void doubleClick(DoubleClickEvent event) {
+				okPressed();
+            }
+        });
+        if (initialSelection != null) {
+			viewer.setSelection(new StructuredSelection(initialSelection));
+		} 
+        GridData gd = new GridData(GridData.FILL_BOTH);
+        gd.heightHint = convertHeightInCharsToPixels(heightInChars);
+        gd.widthHint = convertWidthInCharsToPixels(widthInChars);
+        Table table = viewer.getTable();
+        table.setLayoutData(gd);
+        table.setFont(parent.getFont());
     }
     
+	private void enableTable() {
+		if (viewer != null) {
+		    boolean showSelected = showSelectedRadio.getSelection();
+			viewer.getTable().setEnabled(showSelected);
+		    viewer.refresh();
+		    // Ensure that a scope is selected unless there are no 
+		    // user defined scopes
+		    if (showSelected && viewer.getSelection().isEmpty()) {
+		    	Object firstElement = viewer.getElementAt(0);
+		    	if ( firstElement != null ) {
+		    		viewer.setSelection(new StructuredSelection(firstElement));
+		    	}
+		    }
+		}
+	}
+    
     private void createEditingButtons(Composite composite) {
 		Composite buttonComposite= new Composite(composite, SWT.RIGHT);
 		GridLayout layout= new GridLayout();
@@ -185,11 +305,11 @@ public class ScopeSetDialog extends ListDialog {
     }
 	
 	public ScopeSet getActiveSet() {
-		Object [] result = getResult();
 		if (result!=null && result.length>0)
 			return (ScopeSet)result[0];
 		return null;
 	}
+	
 	protected void okPressed() {
     	if (operations!=null) {
     		for (int i=0; i<operations.size(); i++) {
@@ -198,9 +318,30 @@ public class ScopeSetDialog extends ListDialog {
     		}
     		operations = null;
     	}
+    	if (showAllRadio.getSelection()) {
+    		setResult(manager.getDefaultScope());
+    	} else {
+            // Build a list of selected children.
+            IStructuredSelection selection = (IStructuredSelection) viewer
+                    .getSelection();
+            setResult(selection.toList());
+    	}
     	super.okPressed();
     }
 	
+	private void setResult(ScopeSet scope) {
+		result = new Object[] { scope };
+	}
+
+	private void setResult(List newResult) {
+		if (newResult == null) {
+			result = null;
+		} else {
+			result = new Object[newResult.size()];
+			newResult.toArray(result);
+		}
+	}
+	
 	protected void cancelPressed() {
     	if (operations!=null) {
     		for (int i=0; i<operations.size(); i++) {
@@ -216,6 +357,7 @@ public class ScopeSetDialog extends ListDialog {
 		switch (buttonId) {
 		case NEW_ID:
 			doNew();
+			doEdit();
 			break;
 		case EDIT_ID:
 			doEdit();
@@ -231,34 +373,58 @@ public class ScopeSetDialog extends ListDialog {
 	}
 	
 	private void doNew() {
-		IStructuredSelection ssel = (IStructuredSelection)getTableViewer().getSelection();
-		ScopeSet set = (ScopeSet)ssel.getFirstElement();
-		ScopeSet newSet = new ScopeSet(set);
+		ScopeSet newSet = new ScopeSet(getDefaultName());
 		String name = getNewName(newSet.getName(), false);
 		if (name!=null) {
 			newSet.setName(name);
 			scheduleOperation(new AddOperation(newSet));
 			sets.add(newSet);
-			getTableViewer().refresh();
+			viewer.refresh();
+			viewer.setSelection(new StructuredSelection(newSet));
 			updateButtons();
 		}
 	}
+	
+	private String getDefaultName() {
+		Set namesInUse = new HashSet();
+		for (int i=0; i<sets.size(); i++) {
+		    ScopeSet set = (ScopeSet)sets.get(i);
+		    namesInUse.add(set.getName().toLowerCase());
+	    }
+		for (int i = 1; i < 1000; i++) {
+			String name = Messages.ScopeSetDialog_defaultName + i; 
+			if (!namesInUse.contains(name.toLowerCase())) {
+				return name;
+			}
+		}
+	    return ""; //$NON-NLS-1$
+	}
+
 
 	private void doEdit() {
-		IStructuredSelection ssel = (IStructuredSelection)getTableViewer().getSelection();
+		IStructuredSelection ssel = (IStructuredSelection)viewer.getSelection();
 		ScopeSet set = (ScopeSet)ssel.getFirstElement();
-		if (set!=null) {
-			PreferenceManager manager = new ScopePreferenceManager(descManager, set);
-			PreferenceDialog dialog = new ScopePreferenceDialog(getShell(), manager, descManager, set.isEditable());
+		if (set==null) {
+			return;
+		}
+		PreferenceManager manager = new ScopePreferenceManager(descManager, set);
+		
+		if (!localOnly) { 
+		    PreferenceDialog dialog = new ScopePreferenceDialog(getShell(), manager, descManager, set.isEditable());
 			dialog.setPreferenceStore(set.getPreferenceStore());
 			dialog.create();
 			dialog.getShell().setText(NLS.bind(Messages.ScopePreferenceDialog_wtitle, set.getName()));
 			dialog.open();
+		} else {
+			LocalScopeDialog localDialog = new LocalScopeDialog(getShell(), manager, descManager, set); 
+			localDialog.create();
+			localDialog.getShell().setText(NLS.bind(Messages.ScopePreferenceDialog_wtitle, set.getName()));
+			localDialog.open();
 		}
 	}
 
 	private void doRename() {
-		IStructuredSelection ssel = (IStructuredSelection)getTableViewer().getSelection();
+		IStructuredSelection ssel = (IStructuredSelection)viewer.getSelection();
 		ScopeSet set = (ScopeSet)ssel.getFirstElement();
 		if (set!=null) {
 			RenameOperation rop = (RenameOperation)findOperation(set, RenameOperation.class);
@@ -269,7 +435,7 @@ public class ScopeSetDialog extends ListDialog {
 					rop.newName = newName;
 				else 
 					scheduleOperation(new RenameOperation(set, newName));
-				getTableViewer().update(set, null);
+				viewer.update(set, null);
 				updateButtons();
 			}
 		}
@@ -292,16 +458,16 @@ public class ScopeSetDialog extends ListDialog {
 	}
 	
 	private void doRemove() {
-		IStructuredSelection ssel = (IStructuredSelection)getTableViewer().getSelection();
+		IStructuredSelection ssel = (IStructuredSelection)viewer.getSelection();
 		ScopeSet set = (ScopeSet)ssel.getFirstElement();
 		if (set!=null) {
 			scheduleOperation(new RemoveOperation(set));
 			sets.remove(set);
-			getTableViewer().refresh();
+			viewer.refresh();
 			// Set the selection to the first remaining element
-			Object element = getTableViewer().getElementAt(0);
+			Object element = viewer.getElementAt(0);
 			if (element != null) {
-				getTableViewer().setSelection(new StructuredSelection(element));
+				viewer.setSelection(new StructuredSelection(element));
 			} 
 			updateButtons();
 		}
@@ -314,15 +480,12 @@ public class ScopeSetDialog extends ListDialog {
 	}
 	
 	private void updateButtons() {
-		IStructuredSelection ssel = (IStructuredSelection)getTableViewer().getSelection();
+		IStructuredSelection ssel = (IStructuredSelection)viewer.getSelection();
 		editButton.setEnabled(ssel.isEmpty()==false);
 		ScopeSet set = (ScopeSet)ssel.getFirstElement();
 		boolean editableSet = set!=null && set.isEditable() && !set.isImplicit();
 		removeButton.setEnabled(editableSet);
 		renameButton.setEnabled(editableSet);
-		Button okButton = getOkButton();
-		if (okButton!=null)
-			okButton.setEnabled(set!=null);
 	}
 	
 	private PendingOperation findOperation(ScopeSet set, Class type) {
@@ -336,5 +499,9 @@ public class ScopeSetDialog extends ListDialog {
 			}
 		}
 		return null;
+	}
+
+	public void setInput(ScopeSetManager scopeSetManager) {
+		input = scopeSetManager;	
 	}	
 }
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetManager.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetManager.java
index c9224d0..88c13b2 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetManager.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeSetManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.help.ui.internal.views;
 
 import java.io.*;
 import java.util.ArrayList;
+import java.util.Observable;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.help.ui.internal.HelpUIPlugin;
@@ -20,7 +21,7 @@ import org.eclipse.jface.dialogs.IDialogSettings;
 /**
  * Manages the scope for the federated search.
  */
-public class ScopeSetManager {
+public class ScopeSetManager extends Observable {
 	private ScopeSet activeSet;
 
 	private ScopeSet lastExplicitSet;
@@ -29,6 +30,8 @@ public class ScopeSetManager {
 
 	private ArrayList sets;
 
+	private ScopeSet defSet;
+
 	public ScopeSetManager() {
 		ensureLocation();
 		loadScopeSets();
@@ -36,11 +39,13 @@ public class ScopeSetManager {
 
 	public void add(ScopeSet set) {
 		sets.add(set);
+		setChanged();
 	}
 
 	public void remove(ScopeSet set) {
 		sets.remove(set);
 		set.dispose();
+		setChanged();
 	}
 
 	public void setActiveSet(ScopeSet set) {
@@ -50,12 +55,14 @@ public class ScopeSetManager {
 		this.activeSet = set;
 		if (!activeSet.isImplicit())
 			lastExplicitSet = set;
+		setChanged();
 	}
 
 	public boolean restoreLastExplicitSet() {
 		if (activeSet != null && activeSet.isImplicit()
 				&& lastExplicitSet != null) {
 			setActiveSet(lastExplicitSet);
+			setChanged();
 			return true;
 		}
 		return false;
@@ -98,7 +105,7 @@ public class ScopeSetManager {
 		IPath location = HelpUIPlugin.getDefault().getStateLocation();
 		location = location.append("scope_sets"); //$NON-NLS-1$
 		File dir = location.toFile();
-		ScopeSet defSet = null;
+		defSet = null;
 		if (dir.exists() && dir.isDirectory()) {
 			File[] files = dir.listFiles(new FilenameFilter() {
 				public boolean accept(File dir, String name) {
@@ -128,8 +135,15 @@ public class ScopeSetManager {
 		if (sets.size() == 1) {
 			activeSet = (ScopeSet) sets.get(0);
 		}
-		if (defSet == null)
-			sets.add(new ScopeSet());
+		if (defSet == null) {
+			defSet = new ScopeSet();
+			sets.add(defSet);
+		}
+
+	}
+	
+	public ScopeSet getDefaultScope() {
+		return defSet;
 	}
 
 	/**
@@ -141,6 +155,9 @@ public class ScopeSetManager {
 					.getDialogSettings();
 			String name = settings.get(ACTIVE_SET);
 			activeSet = findSet(name);
+			if (activeSet == null) {
+				return (ScopeSet) sets.get(0);
+			}
 			if (!activeSet.isImplicit())
 				lastExplicitSet = activeSet;
 		}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeState.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeState.java
new file mode 100644
index 0000000..4b99bd1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/ScopeState.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.ui.internal.views;
+
+public class ScopeState  {
+	
+	private static ScopeState instance;
+	private ScopeSetManager scopeSetManager;
+	private EngineDescriptorManager engineManager;
+	
+	public static synchronized ScopeState getInstance() {		
+		if ( instance == null )
+		{
+			instance = new ScopeState();
+		}
+		return instance;
+	}
+	
+	private ScopeState() {	
+		scopeSetManager = new ScopeSetManager();
+	}
+
+	public ScopeSetManager getScopeSetManager() {
+		return scopeSetManager;
+	}
+
+	public EngineDescriptorManager getEngineManager() {
+		return engineManager;
+	}
+
+	public void setEngineManager(EngineDescriptorManager engineManager) {
+		this.engineManager = engineManager;
+	}
+	
+}
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchPart.java
index 37fe7dc..08ad71a 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.help.ui.internal.views;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Observable;
 import java.util.Observer;
 
@@ -25,6 +26,7 @@ import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.base.remote.RemoteStatusData;
 import org.eclipse.help.internal.search.federated.FederatedSearchEntry;
 import org.eclipse.help.internal.search.federated.FederatedSearchJob;
+import org.eclipse.help.internal.search.federated.LocalHelp;
 import org.eclipse.help.search.ISearchEngineResult;
 import org.eclipse.help.search.ISearchEngineResultCollector;
 import org.eclipse.help.search.ISearchScope;
@@ -52,6 +54,7 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.actions.ActionFactory;
@@ -69,6 +72,20 @@ import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUIConstants {
 
+	
+	public class SearchScopeObserver implements Observer {
+
+		public void update(Observable arg0, Object arg1) {
+			ScopeSet set = scopeSetManager.getActiveSet();
+			scopeSetLink.setText(set.getName());
+			scopeSetManager.setActiveSet(set);
+			scopeSection.layout();
+			if (parent != null)
+				parent.reflow();
+		}
+
+	}
+
 	private ReusableHelpPart parent;
 
 	protected static java.util.List previousSearchQueryData = new java.util.ArrayList(20);
@@ -123,6 +140,14 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 
 	private boolean searchPending;
 
+	private SearchScopeObserver scopeObserver;
+
+	private Section alternateQuerySection;
+
+	private FormToolkit toolkit;
+
+	private Composite alternateQueryComposite;
+
 	private class JobListener implements IJobChangeListener, Runnable {
 
 		private boolean searchInProgress = false;
@@ -181,8 +206,9 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 	 * @param style
 	 */
 	public SearchPart(final Composite parent, FormToolkit toolkit) {
+		this.toolkit = toolkit;
 		container = toolkit.createComposite(parent);
-		scopeSetManager = new ScopeSetManager();
+		scopeSetManager = ScopeState.getInstance().getScopeSetManager();
 		TableWrapLayout layout = new TableWrapLayout();
 		layout.numColumns = 2;
 		container.setLayout(layout);
@@ -243,6 +269,9 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 		createScopeSection(toolkit);
 		
 		createRemoteStatusLink(toolkit);
+		
+//		createAlternateQueriesSection(toolkit);
+		
 		toolkit.paintBordersFor(container);
 		jobListener = new JobListener();
 		Job.getJobManager().addJobChangeListener(jobListener);
@@ -250,9 +279,11 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 	
 	public boolean isStale()
 	{
-		if (wasHelpUnavailable!=RemoteStatusData.isAnyRemoteHelpUnavailable())
+		boolean currentAvailability = RemoteStatusData.isAnyRemoteHelpUnavailable();
+		
+		if (wasHelpUnavailable!=currentAvailability)
 		{
-			wasHelpUnavailable=RemoteStatusData.isAnyRemoteHelpUnavailable();
+			wasHelpUnavailable=currentAvailability;
 			return true;
 		}
 		
@@ -275,6 +306,8 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 		filteringGroup.setLayout(flayout);
 		createScopeSet(scopeSection, toolkit);
 		toolkit.paintBordersFor(filteringGroup);
+		scopeObserver = new SearchScopeObserver();
+		scopeSetManager.addObserver(scopeObserver);
 	}
 	
 	private void createSearchExpressionSection(FormToolkit toolkit) {
@@ -307,7 +340,6 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 	private void createRemoteStatusLink(FormToolkit toolkit){
 		TableWrapData td;
 		
-		
 		Image warningImage = JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING);
 		
 		remoteStatusLink = toolkit.createImageHyperlink(container, SWT.NULL);
@@ -319,17 +351,44 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 				doRemoteStatus();
 			}
 		});
-		
+
+		td = new TableWrapData();
+		td.colspan = 2;
+		td.align = TableWrapData.FILL;
+		remoteStatusLink.setLayoutData(td);
 
 		if (wasHelpUnavailable = RemoteStatusData.isAnyRemoteHelpUnavailable())
+		{
 			remoteStatusLink.setVisible(true);
+		}
 		else
-			remoteStatusLink.setVisible(false);
+		{
+			remoteStatusLink.dispose();
+		}
 		
-		td = new TableWrapData();
+	}	
+	
+	private void createAlternateQueriesSection(FormToolkit toolkit){
+
+		TableWrapData td = new TableWrapData();
 		td.colspan = 2;
 		td.align = TableWrapData.FILL;
-		remoteStatusLink.setLayoutData(td);
+
+		container.setMenu(new Menu(container));
+		
+		alternateQuerySection = toolkit.createSection(container, Section.TWISTIE | Section.COMPACT
+				| Section.LEFT_TEXT_CLIENT_ALIGNMENT);
+		alternateQuerySection.setLayoutData(td);
+		alternateQuerySection.setText(Messages.AlternateQueries);
+		
+		alternateQueryComposite = toolkit.createComposite(alternateQuerySection);
+		alternateQuerySection.setClient(alternateQueryComposite);
+		TableWrapLayout flayout = new TableWrapLayout();
+		flayout.numColumns = 1;
+		alternateQueryComposite.setLayout(flayout);
+		alternateQuerySection.setExpanded(true);
+
+//		alternateQuerySection.setVisible(false);
 	}
 	
 	private void createAdvancedLink(Composite parent, FormToolkit toolkit) {
@@ -584,6 +643,34 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 
 					public void accept(ISearchEngineResult[] searchResults) {
 						results.add(ed, searchResults);
+						if (ed.getEngine() instanceof LocalHelp)
+						{
+							container.getDisplay().asyncExec(new Thread(){
+								public void run(){
+									if (alternateQuerySection!=null)
+									{
+										alternateQuerySection.dispose();
+										alternateQuerySection = null;
+									}
+									List alts = ((LocalHelp)ed.getEngine()).getAlternates();
+									if (!alts.isEmpty())
+									{
+										createAlternateQueriesSection(toolkit);
+										for (int b=0;b<alts.size();b++)
+										{
+											Hyperlink link = toolkit.createHyperlink(alternateQueryComposite, (String)alts.get(b), SWT.NONE);
+											link.addHyperlinkListener(new HyperlinkAdapter(){
+												public void linkActivated(HyperlinkEvent e) {
+
+													searchWordCombo.setText(((Hyperlink)e.getSource()).getText());
+													doSearch(((Hyperlink)e.getSource()).getText());
+												}
+											});
+										}
+									}									
+								}
+							});
+						}						
 					}
 
 					public void error(IStatus status) {
@@ -625,14 +712,17 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 	
 	private void doChangeScopeSet() {
 		ScopeSetDialog dialog = new ScopeSetDialog(container.getShell(), scopeSetManager, parent
-				.getEngineManager());
+				.getEngineManager(), false);
 		dialog.setInput(scopeSetManager);
 		dialog.create();
 		dialog.getShell().setText(Messages.ScopeSetDialog_wtitle);
 		if (dialog.open() == ScopeSetDialog.OK) {
 			ScopeSet set = dialog.getActiveSet();
-			if (set != null)
+			if (set != null) {
 				setActiveScopeSet(set);
+			}
+			scopeSetManager.save();
+			scopeSetManager.notifyObservers();
 		}
 	}
 
@@ -644,6 +734,11 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 			parent.getEngineManager().deleteObserver(engineObserver);
 			engineObserver = null;
 		}
+
+		if (scopeObserver != null) {
+			ScopeState.getInstance().getScopeSetManager().deleteObserver(scopeObserver);
+		}
+
 		Job.getJobManager().removeJobChangeListener(jobListener);
 		stop();
 		super.dispose();
@@ -695,7 +790,10 @@ public class SearchPart extends AbstractFormPart implements IHelpPart, IHelpUICo
 			doSearch(searchWordCombo.getText());
 		}
 		
-		remoteStatusLink.setVisible(RemoteStatusData.isAnyRemoteHelpUnavailable());
+		if(RemoteStatusData.isAnyRemoteHelpUnavailable())
+			createRemoteStatusLink(toolkit);
+		else
+			remoteStatusLink.dispose();
 	}
 
 	public String getId() {
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchResultsPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchResultsPart.java
index b69c543..717e18f 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchResultsPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SearchResultsPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,11 +13,15 @@ package org.eclipse.help.ui.internal.views;
 import java.util.ArrayList;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.help.HelpSystem;
 import org.eclipse.help.IHelpResource;
 import org.eclipse.help.IToc;
+import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.IHelpBaseConstants;
 import org.eclipse.help.search.ISearchEngineResult;
-import org.eclipse.help.ui.internal.HelpUIPlugin;
 import org.eclipse.help.ui.internal.HelpUIResources;
 import org.eclipse.help.ui.internal.IHelpUIConstants;
 import org.eclipse.help.ui.internal.Messages;
@@ -26,7 +30,6 @@ import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -44,10 +47,9 @@ import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.osgi.service.prefs.BackingStoreException;
 
 public class SearchResultsPart extends AbstractFormPart implements IHelpPart {
-	private static final String S_DESCRIPTION_OFF = "no-description"; //$NON-NLS-1$
-	private static final String S_SHOW_CATEGORIES = "show-categories"; //$NON-NLS-1$
 	ReusableHelpPart parent;
 
 	private Composite separator;
@@ -122,13 +124,19 @@ public class SearchResultsPart extends AbstractFormPart implements IHelpPart {
 		 * removeAllAction); tbm.insertAfter("removeAll", new Separator());
 		 */
 
-		IDialogSettings settings = HelpUIPlugin.getDefault().getDialogSettings();
-		boolean descOff = settings.getBoolean(S_DESCRIPTION_OFF);
-		boolean showCategories = settings.getBoolean(S_SHOW_CATEGORIES);
+		boolean descOn = Platform.getPreferencesService().getBoolean
+			    (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_SHOW_SEARCH_DESCRIPTION, false, null);			
+		boolean showCategories = Platform.getPreferencesService().getBoolean
+			    (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_SHOW_SEARCH_CATEGORIES, false, null);			
 		showCategoriesAction = new Action() {
 			public void run() {
 				updateResultSections();
-				HelpUIPlugin.getDefault().getDialogSettings().put(S_SHOW_CATEGORIES, showCategoriesAction.isChecked());
+			    IEclipsePreferences pref = InstanceScope.INSTANCE.getNode(HelpBasePlugin.PLUGIN_ID);
+			    pref.putBoolean(IHelpBaseConstants.P_KEY_SHOW_SEARCH_CATEGORIES, showCategoriesAction.isChecked());
+			    try {
+					pref.flush();
+				} catch (BackingStoreException e) {
+				}
 			}
 		};
 		showCategoriesAction.setImageDescriptor(HelpUIResources
@@ -141,12 +149,17 @@ public class SearchResultsPart extends AbstractFormPart implements IHelpPart {
 		showDescriptionAction = new Action() {
 			public void run() {
 				updateResultSections();
-				HelpUIPlugin.getDefault().getDialogSettings().put(S_DESCRIPTION_OFF, !showDescriptionAction.isChecked());
+				IEclipsePreferences pref = InstanceScope.INSTANCE.getNode(HelpBasePlugin.PLUGIN_ID);
+			    pref.putBoolean(IHelpBaseConstants.P_KEY_SHOW_SEARCH_DESCRIPTION, showDescriptionAction.isChecked());
+			    try {
+					pref.flush();
+				} catch (BackingStoreException e) {
+				}
 			}
 		};
 		showDescriptionAction.setImageDescriptor(HelpUIResources
 				.getImageDescriptor(IHelpUIConstants.IMAGE_SHOW_DESC));
-		showDescriptionAction.setChecked(!descOff);
+		showDescriptionAction.setChecked(descOn);
 		showDescriptionAction.setToolTipText(Messages.SearchResultsPart_showDescriptionAction_tooltip); 
 		showDescriptionAction.setId("description"); //$NON-NLS-1$
 		tbm.insertAfter("categories", showDescriptionAction); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SeeAlsoPart.java b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SeeAlsoPart.java
index ca178dc..8b049ec 100644
--- a/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SeeAlsoPart.java
+++ b/eclipse/plugins/org.eclipse.help.ui/src/org/eclipse/help/ui/internal/views/SeeAlsoPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,25 +15,19 @@ import org.eclipse.help.ui.internal.IHelpUIConstants;
 import org.eclipse.help.ui.internal.Messages;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlAdapter;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.RowData;
 import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.forms.AbstractFormPart;
-import org.eclipse.ui.forms.FormColors;
 import org.eclipse.ui.forms.HyperlinkGroup;
-import org.eclipse.ui.forms.IFormColors;
 import org.eclipse.ui.forms.events.HyperlinkAdapter;
 import org.eclipse.ui.forms.events.HyperlinkEvent;
 import org.eclipse.ui.forms.events.IHyperlinkListener;
@@ -54,36 +48,16 @@ public class SeeAlsoPart extends AbstractFormPart implements IHelpPart {
 	 * @param style
 	 */
 	public SeeAlsoPart(Composite parent, FormToolkit toolkit) {
-		container = new Composite(parent, SWT.NULL);
+		container = toolkit.createComposite(parent);
 		container.setBackgroundMode(SWT.INHERIT_DEFAULT);
-		container.addControlListener(new ControlAdapter() {
-			public void controlResized(ControlEvent e) {
-				updateBackgroundImage();
-			}
-		});
+
 		GridLayout layout = new GridLayout();
 		layout.marginHeight = 0;
 		//layout.marginWidth = 0;
 		layout.verticalSpacing = 0;
 		layout.marginTop = 2;
 		container.setLayout(layout);
-		/*
-		Composite sep = toolkit.createCompositeSeparator(container);
-		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		gd.heightHint = 1;
-		sep.setLayoutData(gd);
-		*/
-		/*
 
-		Composite innerContainer = new Composite(container, SWT.NULL);
-		innerContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
-		layout = new GridLayout();
-		layout.marginHeight = 0;
-		innerContainer.setLayout(layout);
-		*/
-		Label label = toolkit.createLabel(container, Messages.SeeAlsoPart_goto);
-		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
-		label.setBackground(null);
 		linkContainer = new Composite(container, SWT.NULL);
 		linkContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
 		RowLayout rlayout = new RowLayout();
@@ -99,41 +73,18 @@ public class SeeAlsoPart extends AbstractFormPart implements IHelpPart {
 		hyperlinkGroup.setHyperlinkUnderlineMode(toolkit.getHyperlinkGroup().getHyperlinkUnderlineMode());
 	}
 
-	private void updateBackgroundImage() {
-		FormToolkit toolkit = helpPart.getForm().getToolkit();
-		FormColors colors = toolkit.getColors();
-		Rectangle carea = container.getClientArea();
-		Image oldImage = bgImage;
-		if (bgImage!=null) {
-			Rectangle ibounds = bgImage.getBounds();
-			if (carea.height==ibounds.height)
-				return;
-		}
-		bgImage = new Image(container.getDisplay(), 1, carea.height);
-		GC gc = new GC(bgImage);
-		gc.setBackground(colors.getColor(IFormColors.H_GRADIENT_END));
-		gc.setForeground(colors.getColor(IFormColors.H_GRADIENT_START));
-		gc.fillGradientRectangle(0, 0,
-				1,
-				carea.height,
-				true);
-		gc.setForeground(colors.getColor(IFormColors.H_BOTTOM_KEYLINE2));
-		gc.drawLine(0, 0, 1, 0);
-		gc.setForeground(colors.getColor(IFormColors.H_BOTTOM_KEYLINE1));
-		gc.drawLine(0, 1, 1, 1);
-		gc.dispose();
-		container.setBackgroundImage(bgImage);
-		if (oldImage != null && !oldImage.isDisposed()) {
-			oldImage.dispose();
-		}
-	}
-	
 	private void updateLinks(String href) {
 		Control [] children = linkContainer.getChildren();
 		for (int i=0; i<children.length; i++) {
 			ImageHyperlink link = (ImageHyperlink)children[i];
 			RowData data = (RowData)link.getLayoutData();
-			data.exclude = link.getHref().equals(href);
+			boolean isCurrentPage = link.getHref().equals(href);
+			if (isCurrentPage) {
+				link.setFont(JFaceResources.getBannerFont());
+			} else {
+	            link.setFont(JFaceResources.getDefaultFont());
+			}
+			data.exclude = false; 
 			link.setVisible(!data.exclude);
 		}
 		linkContainer.layout();
@@ -209,7 +160,17 @@ public class SeeAlsoPart extends AbstractFormPart implements IHelpPart {
 	public void init(ReusableHelpPart parent, String id, IMemento memento) {
 		this.helpPart = parent;
 		this.id = id;
-		addLinks(linkContainer, helpPart.getForm().getToolkit());
+		FormToolkit toolkit = helpPart.getForm().getToolkit();
+		addLinks(linkContainer, toolkit);
+		Composite padding = toolkit.createComposite(container);
+		GridData paddingData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		paddingData.heightHint = 2;
+		padding.setLayoutData(paddingData);
+		Composite separator = new Composite(container, SWT.NULL);
+		GridData seperatorData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		separator.setBackground(toolkit.getColors().getBorderColor());
+		seperatorData.heightHint = 1;
+		separator.setLayoutData(seperatorData);
 	}
 
 	public String getId() {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF
index e8d69be..4654fcd 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.help.webapp/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %help_webapp_plugin_name
 Bundle-SymbolicName: org.eclipse.help.webapp;singleton:=true
-Bundle-Version: 3.5.3.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-Activator: org.eclipse.help.internal.webapp.HelpWebappPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -14,7 +14,9 @@ Require-Bundle: org.eclipse.help.base;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.expressions;bundle-version="3.4.200"
 Export-Package: org.eclipse.help.internal.webapp;x-friends:="org.eclipse.ua.tests",
  org.eclipse.help.internal.webapp.data;x-friends:="org.eclipse.ua.tests",
+ org.eclipse.help.internal.webapp.service;x-friends:="org.eclipse.ua.tests",
  org.eclipse.help.internal.webapp.servlet;x-friends:="org.eclipse.ua.tests,org.eclipse.ua.tests.doc",
+ org.eclipse.help.internal.webapp.utils;x-friends:="org.eclipse.ua.tests",
  org.eclipse.help.webapp
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Import-Package: com.ibm.icu.text;version="3.8.0",
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/advanced.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/advanced.jsp
index 514a59f..dcb1f81 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/advanced.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/advanced.jsp
@@ -186,7 +186,7 @@ function onloadHandler()
 	<table id="searchTable" width="100%" cellspacing=0 cellpading=0 border=0 align=center >
 		<tr><td style="padding:0px 10px;"><label for="searchWord"><%=ServletResources.getString("SearchExpression", request)%></label>
 		</td></tr>
-		<tr><td style="padding:0px 10px;"><input type="text" id="searchWord" name="searchWord" value="<%=UrlUtil.htmlEncode(data.getSearchWord())%>" maxlength=256 alt='<%=ServletResources.getString("SearchExpression", request)%>' title='<%=ServletResources.getString("SearchExpression", request)%>'>
+		<tr><td style="padding:0px 10px;"><input type="text" id="searchWord" name="searchWord" value="<%=UrlUtil.htmlEncode(data.getSearchWord())%>" maxlength=256 alt="<%=ServletResources.getString("SearchExpression", request)%>" title="<%=ServletResources.getString("SearchExpression", request)%>">
           	  	<input type="hidden" name="maxHits" value="500" >
         </td></tr>
         <tr><td style="padding:0px 10px;"><%=ServletResources.getString("expression_label", request)%>
@@ -218,10 +218,10 @@ for (int i=0; i<tocData.getTocCount(); i++)
   			<table cellspacing=10 cellpading=0 border=0 align=<%=isRTL?"left":"right"%>  style="background:transparent;">
 				<tr>
 					<td>
-						<input id="searchButton" class='button'  type="button" onclick="doAdvancedSearch()" value='<%=ServletResources.getString("SearchLabel", request)%>'  id="go" alt='<%=ServletResources.getString("SearchLabel", request)%>' title='<%=ServletResources.getString("SearchLabel", request)%>'>
+						<input id="searchButton" class='button'  type="button" onclick="doAdvancedSearch()" value="<%=ServletResources.getString("SearchLabel", request)%>"  id="go" alt="<%=ServletResources.getString("SearchLabel", request)%>" title="<%=ServletResources.getString("SearchLabel", request)%>">
 					</td>
 					<td>
-					  	<input class='button' type="button" onclick="window.close()"  type="button"  value='<%=ServletResources.getString("Cancel", request)%>'  id="cancel" alt='<%=ServletResources.getString("Cancel", request)%>' title='<%=ServletResources.getString("Cancel", request)%>'>
+					  	<input class='button' type="button" onclick="window.close()"  type="button"  value="<%=ServletResources.getString("Cancel", request)%>"  id="cancel" alt="<%=ServletResources.getString("Cancel", request)%>" title="<%=ServletResources.getString("Cancel", request)%>">
 					</td>
 				</tr>
   			</table>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/helptree.js b/eclipse/plugins/org.eclipse.help.webapp/advanced/helptree.js
index 6bce19c..283d241 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/helptree.js
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/helptree.js
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -249,6 +249,9 @@ function highlightItem(treeItem) {
 
 // Force an items parents to be visible by expanding if necessary
 function makeVisible(treeItem) {
+    if (treeItem === null) {
+        return;
+    }
     var parent = getTreeItem(treeItem.parentNode);
     if (!parent) {
         return;
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/highlight.js b/eclipse/plugins/org.eclipse.help.webapp/advanced/highlight.js
index 47f9e5d..56e5c64 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/highlight.js
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/highlight.js
@@ -140,16 +140,25 @@ function highlightWordInText(aWord, textNode){
 			replacementNode.appendChild(newBefore);
 			spanNode=document.createElement("span");
 			spanNode.setAttribute("name","resultofMatch");
-
-			if ((defaultHighlight == false) && !document.styleSheets) {
-				if (isIE) spanNode.setAttribute("className",null);
-				else spanNode.setAttribute("class",null);
-			} else {
-				if (isIE) {
-				    spanNode.className ="resultofText";
+			if(isSafari){
+				if (defaultHighlight == true) {
+					spanNode.style.color="#000000";
+					spanNode.style.background="#FFFF66";
 				} else {
-				    spanNode.setAttribute("class","resultofText");
+					spanNode.style.color=null;
+					spanNode.style.background=null;
 				}
+			}else{
+			    if ((defaultHighlight == false) && !document.styleSheets) {
+				    if (isIE) spanNode.setAttribute("className",null);
+				    else spanNode.setAttribute("class",null);
+			    } else {
+				    if (isIE) {
+				        spanNode.className ="resultofText";
+				    } else {
+				        spanNode.setAttribute("class","resultofText");
+				    }
+			    }
 			}
 
 			replacementNode.appendChild(spanNode);
@@ -255,7 +264,24 @@ function toggleHighlight() {
 
 function setHighlight(current) {
 	currentHighlight = (current==true);
-    if (document.styleSheets){
+	if (isSafari) {
+		var color;
+		var backgnd;
+		if (currentHighlight) {
+			color = "#000000";
+			backgnd = "#FFFF66";
+		}
+		else {
+			color = null;
+			backgnd = null;
+		}
+		var elements = document.getElementsByName("resultofMatch");
+		for (var i = 0; i<elements.length; i++){
+			elements[i].style.color=color;
+			elements[i].style.backgroundColor= backgnd;
+		}
+	}
+	else if (document.styleSheets){
 		var text;
 		if (currentHighlight) {
 			text = "COLOR: #000000; BACKGROUND-COLOR: #FFFF66;";
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.css b/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.css
index 83b2f09..7bd31ca 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.css
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.css
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 Intel Corporation and others.
+ * Copyright (c) 2005, 2010 Intel Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     Intel Corporation - initial API and implementation
  *     IBM Corporation 2006, refactored index view into a single frame
  *     IBM Corporation 2009, added style for .see
+ *     IBM Corporation 2010, Added see all link
  *******************************************************************************/
 
 BODY {
@@ -212,4 +213,11 @@ A.nolink:hover {
 	visibility:hidden;
 }
 
+.showall {
+    text-decoration:underline; 
+    color:#0066FF; 
+	cursor:pointer;
+}
+
+
 
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.js b/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.js
index 279eb55..c7a397c 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.js
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.js
@@ -331,6 +331,10 @@ function handleSee(target) {
     typeinChanged();
 }
 
+function repaint() {
+    var href = "indexView.jsp";
+    location.replace(href);
+}
 
 /**
   * Select the corresponding item in the index list on typein value change.
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.jsp
index 897f0cc..1d13a57 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/indexView.jsp
@@ -17,12 +17,15 @@
 
 <%
     RequestData requestData = new ActivitiesData(application,request, response);
+    SearchData searchData = new SearchData(application,request, response);
 	WebappPreferences prefs = requestData.getPrefs();
 %>
 
 <html lang="<%=ServletResources.getString("locale", request)%>">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Pragma" content="no-cache">
+<meta http-equiv="Expires" content="-1">
 
 <title><%=ServletResources.getString("IndexViewTitle", request)%></title>
 
@@ -54,12 +57,26 @@ var loadingMessage = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("Lo
 <script language="JavaScript" src="helptreechildren.js"></script>
 <script language="JavaScript" src="xmlajax.js"></script>
 <script language="JavaScript" src="utils.js"></script>
+<script language="JavaScript" src="view.js"></script>
 </head>
 
 <body dir="<%=direction%>" onload="onloadHandler()" onresize = "sizeList()">
 
 <table id="typeinTable">
 <%if (prefs.isIndexInstruction()) {%>
+<%
+    if (searchData.isScopeActive()) {
+%>
+
+<p>
+<tr>
+		<td colspan="2">
+<%= UrlUtil.htmlEncode(searchData.getScopeActiveMessage()) %>
+<a class="showall" onclick="showAll();" ><%=ServletResources.getString("showAllLink", request)%></a>
+</p></td></tr>
+<%
+    }
+%>
 	<tr>
 		<td colspan="2"><p id="instruction"><%=ServletResources.getString("IndexTypeinInstructions", request)%></p></td>
 	</tr>
@@ -72,6 +89,7 @@ var loadingMessage = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("Lo
 	</tr>
 </table>
 <div id = "indexList">
+
 <DIV class = "group" id = "wai_application">
     <DIV class = "root" id = "tree_root">
     </DIV>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/nav.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/nav.jsp
index 06fd634..c82e7be 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/nav.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/nav.jsp
@@ -57,7 +57,11 @@ function showView(view)
  */
 function displayTocFor(topic, isAutosynch)
 {
+    if (!ViewsFrame || !ViewsFrame.toc) {
+        return;
+    }
 	var tocView = ViewsFrame.toc.tocViewFrame;
+	if (!tocView) return;
 	
 	if (isAutosynch) {
 	    if (!tocView.isAutosynchEnabled()) {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/quickSearch.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/quickSearch.jsp
index 19a7c7b..2ad4bfb 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/quickSearch.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/quickSearch.jsp
@@ -137,8 +137,8 @@ function doQuickSearch(){
     	 <br/>
 		<input type="text" id="searchWord" name="searchWord"
 			value='' size='<%=data.isIE()?"32":"24"%>' maxlength="256"
-			alt='<%=ServletResources.getString("SearchExpression", request)%>'
-			title='<%=ServletResources.getString("SearchExpression", request)%>'/>
+			alt="<%=ServletResources.getString("SearchExpression", request)%>"
+			title="<%=ServletResources.getString("SearchExpression", request)%>"/>
    </div>
 
 	<div id="buttonArea">
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchList.css b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchList.css
index 98a21ce..cb98521 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchList.css
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchList.css
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,13 +49,19 @@ a:hover {
 	margin-top:7px;
 }
 
-.active { 
+.results .active { 
 	background:Highlight;
 	color:HighlightText;
 	width:100%;
 	height:100%;
 }
 
+.showall {
+    text-decoration:underline; 
+    color:#0066FF; 
+	cursor:pointer;
+}
+
 #menu {
 	position:absolute;
 	display:none;
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchScoped.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchScoped.jsp
index c335089..3e569b0 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchScoped.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchScoped.jsp
@@ -206,17 +206,14 @@ function doSearch(query, noRefocus)
 {
 	var workingSet = document.getElementById("scope").firstChild.nodeValue;
 
-	if (!query || query == "")
-	{
-		var form = document.forms["searchForm"];
-		var searchWord = form.searchWord.value;
-		var maxHits = form.maxHits.value;
-		if (!searchWord || searchWord == "")
-			return;
-		query ="searchWord="+encodeURIComponent(searchWord)+"&maxHits="+maxHits;
-		if (workingSet != '<%=UrlUtil.JavaScriptEncode(ServletResources.getString("All", request))%>')
-			query = query +"&scope="+encodeURIComponent(workingSet);
-	}
+	var form = document.forms["searchForm"];
+	var searchWord = form.searchWord.value;
+	var maxHits = form.maxHits.value;
+	if (!searchWord || searchWord == "")
+		return;
+	query ="searchWord="+encodeURIComponent(searchWord)+"&maxHits="+maxHits;
+	if (workingSet != '<%=UrlUtil.JavaScriptEncode(ServletResources.getString("All", request))%>')
+		query = query +"&scope="+encodeURIComponent(workingSet);
 		
 	/******** HARD CODED VIEW NAME *********/
 	// do some tests to ensure the results are available
@@ -235,6 +232,15 @@ function doSearch(query, noRefocus)
 	}
 }
 
+function getSearchWord() {
+    var form = document.forms["searchForm"];
+    var searchWord = form.searchWord.value;
+    if (searchWord ) {
+        return searchWord;
+    }
+    return "";
+}
+
 function rescope() {
     if (parent.parent.HelpFrame && 
 		parent.parent.HelpFrame.NavFrame && 
@@ -246,7 +252,7 @@ function rescope() {
 		}
 		if (viewsFrame.index && viewsFrame.index.indexViewFrame) {
 		    var indexView = viewsFrame.index.indexViewFrame;
-		    indexView.loadCurrentPage();
+		    indexView.repaint();
 		}
 		doSearch(null, true);
 	}
@@ -289,14 +295,16 @@ function onloadHandler(e)
 					</label>
 				</td>
 				<td>
-					<input type="text" id="searchWord" name="searchWord" value='' size="24" maxlength="256" alt='<%=ServletResources.getString("expression_label", request)%>' title='<%=ServletResources.getString("expression_label", request)%>'>
+					<input type="text" id="searchWord" name="searchWord" value='' size="24" maxlength="256" 
+					       alt="<%=UrlUtil.htmlEncode(ServletResources.getString("expression_label", request))%>" 
+					       title="<%=UrlUtil.htmlEncode(ServletResources.getString("expression_label", request))%>">
 				</td>
 				<td >
-					<input type="button" onclick="this.blur();doSearch()" value='<%=ServletResources.getString("GO", request)%>' id="go" alt='<%=ServletResources.getString("GO", request)%>' title='<%=ServletResources.getString("GO", request)%>'>
+					<input type="button" onclick="this.blur();doSearch()" value="<%=ServletResources.getString("GO", request)%>" id="go" alt="<%=ServletResources.getString("GO", request)%>" title="<%=ServletResources.getString("GO", request)%>">
 					<input type="hidden" name="maxHits" value="500" >
 				</td>
 				<td nowrap>
-					<a id="scopeLabel" href="javascript:openAdvanced();" title='<%=ServletResources.getString("ScopeTooltip", request)%>' alt='<%=ServletResources.getString("ScopeTooltip", request)%>' onmouseover="window.status='<%=UrlUtil.JavaScriptEncode(ServletResources.getString("ScopeTooltip", request))%>'; return true;" onmouseout="window.status='';"><%=ServletResources.getLabel("Scope", request)%></a>
+					<a id="scopeLabel" href="javascript:openAdvanced();" title="<%=ServletResources.getString("ScopeTooltip", request)%>" alt="<%=ServletResources.getString("ScopeTooltip", request)%>" onmouseover="window.status='<%=UrlUtil.JavaScriptEncode(ServletResources.getString("ScopeTooltip", request))%>'; return true;" onmouseout="window.status='';"><%=ServletResources.getLabel("Scope", request)%></a>
 				</td>
 				<td nowrap>
 					<input type="hidden" name="workingSet" value='<%=UrlUtil.htmlEncode(data.getScope())%>'>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchSimple.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchSimple.jsp
index de69560..f83b659 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchSimple.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchSimple.jsp
@@ -216,14 +216,14 @@ function onloadHandler(e)
 					</label>
 				</td>
 				<td>
-					<input type="text" id="searchWord" name="searchWord" value='' size="20" maxlength="256" alt='<%=ServletResources.getString("SearchExpression", request)%>' title='<%=ServletResources.getString("SearchExpression", request)%>'>
+					<input type="text" id="searchWord" name="searchWord" value='' size="20" maxlength="256" alt="<%=ServletResources.getString("SearchExpression", request)%>" title="<%=ServletResources.getString("SearchExpression", request)%>">
 				</td>
 				<td >
-					 <input type="button" onclick="this.blur();doSearch()" value='<%=ServletResources.getString("GO", request)%>' id="go" alt='<%=ServletResources.getString("GO", request)%>' title='<%=ServletResources.getString("GO", request)%>'>
+					 <input type="button" onclick="this.blur();doSearch()" value="<%=ServletResources.getString("GO", request)%>" id="go" alt="<%=ServletResources.getString("GO", request)%>" title="<%=ServletResources.getString("GO", request)%>">
 					<input type="hidden" name="maxHits" value="500" >
 				</td>
 				<td nowrap>
-					<a id="advanced" href="javascript:openAdvanced();" alt='<%=ServletResources.getString("Advanced", request)%>' title='<%=ServletResources.getString("Advanced", request)%>' onmouseover="window.status='<%=UrlUtil.JavaScriptEncode(ServletResources.getString("Advanced", request))%>'; return true;" onmouseout="window.status='';"><%=ServletResources.getString("Advanced", request)%></a> 
+					<a id="advanced" href="javascript:openAdvanced();" alt="<%=ServletResources.getString("Advanced", request)%>" title="<%=ServletResources.getString("Advanced", request)%>" onmouseover="window.status='<%=UrlUtil.JavaScriptEncode(ServletResources.getString("Advanced", request))%>'; return true;" onmouseout="window.status='';"><%=ServletResources.getString("Advanced", request)%></a> 
 				</td>
 			</tr>
 
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchView.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchView.jsp
index ba9e1b9..3a70903 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/searchView.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/searchView.jsp
@@ -1,5 +1,5 @@
 <%--
- Copyright (c) 2000, 2010 IBM Corporation and others.
+ Copyright (c) 2000, 2011 IBM Corporation and others.
  All rights reserved. This program and the accompanying materials 
  are made available under the terms of the Eclipse Public License v1.0
  which accompanies this distribution, and is available at
@@ -12,11 +12,6 @@
 
 <% 
 	SearchData data = new SearchData(application, request, response);
-	// After each search we preserve the scope (working set), if any
-	// this need to be at the beginning, otherwise cookie is not written
-	if (data.isSearchRequest())
-		data.saveScope();
-
 	WebappPreferences prefs = data.getPrefs();
 %>
 
@@ -36,33 +31,28 @@
 <base target="ContentViewFrame">
 <script language="JavaScript" src="utils.js"></script>
 <script language="JavaScript" src="list.js"></script>
+<script language="JavaScript" src="view.js"></script>
 <script language="JavaScript">	
 
 var cookiesRequired = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("cookiesRequired", request))%>";	
+var showCategories = <%=data.isShowCategories()%>;
+var scope ="<%=UrlUtil.JavaScriptEncode(data.getScope())%>";
 
 function refresh() { 
 	window.location.replace("searchView.jsp?<%=UrlUtil.JavaScriptEncode(request.getQueryString())%>");
 }
 
-function isShowCategories() {
-	var value = getCookie("showCategories");
-	return value ? value == "true" : false;
-}
-
 function isShowDescriptions() {
 	var value = getCookie("showDescriptions");
 	return value ? value == "true" : true;
 }
 
-function setShowCategories(value) {
-	setCookie("showCategories", value);
-	var newValue = isShowCategories();   	    
-	parent.searchToolbarFrame.setButtonState("show_categories", newValue);
-	if (value != newValue) {
-	    alert(cookiesRequired);
-	} else { 	    
-	    window.location.reload();
-	}
+function setShowCategories(value) { 	    
+	parent.searchToolbarFrame.setButtonState("show_categories", value);
+	var searchWord = "<%=UrlUtil.JavaScriptEncode(data.getSearchWord())%>";
+	    window.location="searchView.jsp?searchWord=" + encodeURIComponent(searchWord) 
+	       + "&showSearchCategories=" + value +
+	       "&scope=" + encodeURIComponent(scope);    
 }
 
 function setShowDescriptions(value) {
@@ -77,7 +67,7 @@ function setShowDescriptions(value) {
 }
 
 function toggleShowCategories() {
-	setShowCategories(!isShowCategories());
+	setShowCategories(!showCategories);
 }
 
 function toggleShowDescriptions() {
@@ -94,6 +84,15 @@ function onShow() {
 <body dir="<%=direction%>">
 
 <%
+	String preResults = data.getPreProcessorResults();
+
+	if (!preResults.equals(""))
+	{
+		out.write(preResults);
+		out.write("<HR/>");
+	}
+
+
 if (!data.isSearchRequest()) {
 	out.write(ServletResources.getString("doSearch", request));
 } else if (data.getQueryExceptionMessage()!=null) {
@@ -122,9 +121,28 @@ setTimeout('refresh()', 2000);
 <%
 	return;
 } else if (data.getResultsCount() == 0){
-	out.write(ServletResources.getString("Nothing_found", request));
-} else {
+	out.write(UrlUtil.htmlEncode(data.getNotFoundMessage()));   
+    if (data.isScopeActive()) {
+%>
+<a class="showall" onclick="showAll();" ><%=ServletResources.getString("showAllLink", request)%></a>
+<%
+    }
+} else { // data.getResultsCount() != 0
+%>
+<p><b><%=UrlUtil.htmlEncode(data.getMatchesInScopeMessage())%></b>
+<%
+    if (data.isScopeActive()) {
 %>
+ <a class="showall" onclick="showAll();" ><%=ServletResources.getString("showAllLink", request)%></a>
+<% 
+    } else {
+%>
+     <a class="showall" onclick="rescope();" ><%=ServletResources.getString("changeScopeLink", request)%></a>
+<%
+    }
+%>
+</p>
+
 
 <table class="results" cellspacing='0'>
 
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/tabs.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/tabs.jsp
index 6ef278e..2ce59f2 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/tabs.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/tabs.jsp
@@ -1,5 +1,5 @@
 <%--
- Copyright (c) 2000, 2010 IBM Corporation and others.
+ Copyright (c) 2000, 2011 IBM Corporation and others.
  All rights reserved. This program and the accompanying materials 
  are made available under the terms of the Eclipse Public License v1.0
  which accompanies this distribution, and is available at
@@ -38,6 +38,10 @@ if (data.isMozilla()){
 %>
 }
 
+a {
+    cursor : default
+}
+
 /* tabs at the bottom */
 .tab {
 	font-size:5px;<%-- needed to verticaly center icon image --%>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/tocTree.css b/eclipse/plugins/org.eclipse.help.webapp/advanced/tocTree.css
index 32bef15..050eb6d 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/tocTree.css
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/tocTree.css
@@ -70,6 +70,12 @@ A {
 	white-space: nowrap;
 }
 
+.showall {
+    text-decoration:underline; 
+    color:#0066FF; 
+	cursor:pointer;
+}
+
 A:hover{
 	text-decoration:underline; 
 }
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/tocView.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/tocView.jsp
index 97ac845..a0e1b9c 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/tocView.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/tocView.jsp
@@ -13,6 +13,7 @@
 <% 
 	RequestData requestData = new RequestData(application,request, response);
 	WebappPreferences prefs = requestData.getPrefs();
+	SearchData searchData = new SearchData(application,request, response);
 %>
 
 <html lang="<%=ServletResources.getString("locale", request)%>">
@@ -31,6 +32,7 @@
 <script language="JavaScript" src="xmlajax.js"></script>
 <script language="JavaScript" src="utils.js"></script>
 <script language="JavaScript" src="tocTree.js"></script>
+<script language="JavaScript" src="view.js"></script>
 
 <script language="JavaScript">
 
@@ -130,6 +132,17 @@ if (requestData.isIE()){
 
 </head>
 <body dir="<%=direction%>" onload="onloadHandler()" onunload="onunloadHandler()">
+<%
+    if (searchData.isScopeActive()) {
+%>
+<p>
+<%= UrlUtil.htmlEncode(searchData.getScopeActiveMessage()) %>
+<a class="showall" onclick="showAll();" ><%=ServletResources.getString("showAllLink", request)%></a>
+</p>
+<%
+    }
+%>
+
   <DIV class = "group" id = "wai_application">
     <DIV class = "root" id = "tree_root">
     </DIV>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/toolbar.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/toolbar.jsp
index 555d4bd..4723436 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/toolbar.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/toolbar.jsp
@@ -1,5 +1,5 @@
 <%--
- Copyright (c) 2000, 2010 IBM Corporation and others.
+ Copyright (c) 2000, 2011 IBM Corporation and others.
  All rights reserved. This program and the accompanying materials 
  are made available under the terms of the Eclipse Public License v1.0
  which accompanies this distribution, and is available at
@@ -38,6 +38,10 @@ BODY {
 	font-weight:bold;
 	color:WindowText;
 }
+
+a {
+    cursor : default
+}
  
 .buttonOn a { 
 	display:block;
@@ -106,9 +110,7 @@ if (data.isIE()){
 <% if (data.isIE() || data.isMozilla() && "1.2.1".compareTo(data.getMozillaVersion()) <=0){
 // maximize (last) button should not jump
 %>
-#b<%=data.getButtons().length-1%>:hover{
-	border:1px solid <%=prefs.getToolbarBackground()%>;
-}
+
 <%}%>
 
 .separator {
@@ -231,7 +233,7 @@ function restore_maximize(button)
 function toggleFrame(){
 	// get to the frameset
 	var p = parent;
-	while (p && !p.toggleFrame) {
+	while (p && !p.toggleFrame)  {	   
 	    if (p === p.parent)  {
 	        return;
         }
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/view.js b/eclipse/plugins/org.eclipse.help.webapp/advanced/view.js
new file mode 100644
index 0000000..e8fea9c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/view.js
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+// Contains functions used by more than one view
+
+function showAll() {
+    var searchFrame = parent.parent.parent.parent.parent.HelpToolbarFrame.SearchFrame;
+    if (searchFrame.getSearchWord) {
+        searchFrame.location.replace("../scopeState.jsp?searchWord=" + searchFrame.getSearchWord() + "&workingSet=");
+    }      
+}
+
+function rescope() {
+    var searchFrame = parent.parent.parent.parent.parent.HelpToolbarFrame.SearchFrame;
+    if (searchFrame.getSearchWord) {
+        searchFrame.openAdvanced();
+    }      
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/views.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/views.jsp
index bcc91cf..8abe0ef 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/views.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/views.jsp
@@ -1,5 +1,5 @@
 <%--
- Copyright (c) 2000, 2010 IBM Corporation and others.
+ Copyright (c) 2000, 2011 IBM Corporation and others.
  All rights reserved. This program and the accompanying materials 
  are made available under the terms of the Eclipse Public License v1.0
  which accompanies this distribution, and is available at
@@ -14,8 +14,6 @@
 	LayoutData data = new LayoutData(application,request, response);
 	WebappPreferences prefs = data.getPrefs();
 	AbstractView[] views = data.getViews();	
-	// Read the scope parameter
-	RequestScope.setScopeFromRequest(request, response);
 %>	
 
 
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSet.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSet.jsp
index 4102335..1def12f 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSet.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSet.jsp
@@ -1,5 +1,5 @@
 <%--
- Copyright (c) 2000, 2010 IBM Corporation and others.
+ Copyright (c) 2000, 2011 IBM Corporation and others.
  All rights reserved. This program and the accompanying materials 
  are made available under the terms of the Eclipse Public License v1.0
  which accompanies this distribution, and is available at
@@ -237,8 +237,8 @@ function doSubmit()
 
 		var criteria = getSelectedCriteriaResources();
 		var query = "operation="+'<%=UrlUtil.JavaScriptEncode(data.getOperation())%>'+"&workingSet="+encodeURIComponent(workingSet)+ hrefs+criteria+"&oldName="+encodeURIComponent(oldName);
-		window.opener.location.replace("workingSetManager.jsp?"+query);
-		window.opener.focus();
+		window.opener.location.replace("../workingSetState.jsp?"+query);
+	    window.opener.focus();
 		window.close();
 	} catch(ex) {alert("Error..." + ex.message)}
 }
@@ -492,7 +492,7 @@ function enableOK() {
 		<tr><td style="padding:5px 10px 0px 10px;"><label for="workingSet" accesskey="<%=ServletResources.getAccessKey("WorkingSetName", request)%>"><%=ServletResources.getLabel("WorkingSetName", request)%></label>
 		</td></tr>
 		<tr><td style="padding:0px 10px;"><input type="text" id="workingSet" name="workingSet" 
-		    value='<%=data.isEditMode()?UrlUtil.htmlEncode(data.getWorkingSetName()):data.getDefaultName()%>' maxlength=256 alt='<%=ServletResources.getString("WorkingSetName", request)%>' title='<%=ServletResources.getString("WorkingSetName", request)%>' onkeyup="enableOK();return true;">
+		    value='<%=data.isEditMode()?UrlUtil.htmlEncode(data.getWorkingSetName()):data.getDefaultName()%>' maxlength=256 alt="<%=ServletResources.getString("WorkingSetName", request)%>" title="<%=ServletResources.getString("WorkingSetName", request)%>" onkeyup="enableOK();return true;">
         </td></tr>
     </table>
     
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSetManager.jsp b/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSetManager.jsp
index 6aa0ae7..4800a89 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSetManager.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/advanced/workingSetManager.jsp
@@ -186,11 +186,7 @@ function selectWorkingSet() {
 	if (searchWord)
 		search += "&searchWord="+encodeURIComponent(searchWord);
 	
-	window.opener.location.replace(
-		window.opener.location.protocol +
-		"//" +
-		window.opener.location.host + 
-		window.opener.location.pathname +
+	window.opener.location.replace("../scopeState.jsp" +
 		search);
    
  	window.close();
@@ -198,7 +194,7 @@ function selectWorkingSet() {
 }
 
 function removeWorkingSet() {
-	window.location.replace("workingSetManager.jsp?operation=remove&workingSet="+encodeURIComponent(getWorkingSet()));
+	window.location.replace("../workingSetState.jsp?operation=remove&workingSet="+encodeURIComponent(getWorkingSet()));
 	if (getWorkingSet()==window.opener.document.getElementById("scope").firstChild.nodeValue){
 		window.opener.document.getElementById("scope").firstChild.nodeValue=
 		    "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("All", request))%>";
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advancedstate/scopeState.jsp b/eclipse/plugins/org.eclipse.help.webapp/advancedstate/scopeState.jsp
new file mode 100644
index 0000000..c9b5b90
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/advancedstate/scopeState.jsp
@@ -0,0 +1,37 @@
+<%--
+ Copyright (c) 2011 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials 
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ 
+ Contributors:
+     IBM Corporation - initial API and implementation
+--%>
+<%@ page import="org.eclipse.help.internal.webapp.data.*" errorPage="/advanced/err.jsp" contentType="text/html; charset=UTF-8"%>
+
+<% 
+   SearchData data = new ScopeSavingSearchData(application, request, response);
+   String workingSet = request.getParameter("workingSet");
+   String args = "?searchWord=" + data.getSearchWord();
+   if (workingSet != null) {
+       args += "&workingSet=" + workingSet;
+   }
+%>
+
+<html lang="<%=ServletResources.getString("locale", request)%>">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title><%=ServletResources.getString("Loading", request)%></title>
+
+<script language="JavaScript">
+	function onloadHandler() { 
+		location.href="advanced/searchScoped.jsp<%=UrlUtil.JavaScriptEncode(args)%>";
+	}
+</script>
+
+</head>
+
+<body onload="onloadHandler()">
+</body>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.help.webapp/advancedstate/workingSetState.jsp b/eclipse/plugins/org.eclipse.help.webapp/advancedstate/workingSetState.jsp
new file mode 100644
index 0000000..9abc5bb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/advancedstate/workingSetState.jsp
@@ -0,0 +1,37 @@
+<%--
+ Copyright (c) 2011 IBM Corporation and others.
+ All rights reserved. This program and the accompanying materials 
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ 
+ Contributors:
+     IBM Corporation - initial API and implementation
+--%>
+<%@ page import="org.eclipse.help.internal.webapp.data.*" errorPage="/advanced/err.jsp" contentType="text/html; charset=UTF-8"%>
+
+<% 
+    new WorkingSetManagerData(application, request, response);
+    String workingSet = request.getParameter("workingSet");
+    String args = "";
+    if (workingSet != null && workingSet.length() > 0) {
+        args = "?workingSet=" + workingSet;
+    }
+%>
+
+<html lang="<%=ServletResources.getString("locale", request)%>">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title><%=ServletResources.getString("Loading", request)%></title>
+
+<script language="JavaScript">
+	function onloadHandler() { 
+		location.href="advanced/workingSetManager.jsp<%=UrlUtil.JavaScriptEncode(args)%>";
+	}
+</script>
+
+</head>
+
+<body onload="onloadHandler()">
+</body>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.help.webapp/basic/advanced.inc b/eclipse/plugins/org.eclipse.help.webapp/basic/advanced.inc
index 91474ee..14e0784 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/basic/advanced.inc
+++ b/eclipse/plugins/org.eclipse.help.webapp/basic/advanced.inc
@@ -1,5 +1,5 @@
 <%--
- Copyright (c) 2000, 2009 IBM Corporation and others.
+ Copyright (c) 2000, 2010 IBM Corporation and others.
  All rights reserved. This program and the accompanying materials 
  are made available under the terms of the Eclipse Public License v1.0
  which accompanies this distribution, and is available at
@@ -18,10 +18,10 @@
 		</tr>
 		<tr>
 			<td nowrap>
-				<input type="text" name="searchWord" id="searchWord" value='<%=UrlUtil.htmlEncode(data.getSearchWord())%>' maxlength=256 alt='<%=ServletResources.getString("SearchExpression", request)%>' title='<%=ServletResources.getString("SearchExpression", request)%>'>
+				<input type="text" name="searchWord" id="searchWord" value='<%=UrlUtil.htmlEncode(data.getSearchWord())%>' maxlength=256 alt="<%=ServletResources.getString("SearchExpression", request)%>" title="<%=ServletResources.getString("SearchExpression", request)%>">
           	  	<input type="hidden" name="maxHits" value="500" >
           	  	<input type="hidden" name="scopedSearch" value="true" >
-				<input type="submit" value='<%=ServletResources.getString("GO", request)%>' alt='<%=ServletResources.getString("GO", request)%>' title='<%=ServletResources.getString("GO", request)%>'>
+				<input type="submit" value="<%=ServletResources.getString("GO", request)%>" alt="<%=ServletResources.getString("GO", request)%>" title="<%=ServletResources.getString("GO", request)%>">
         	</td>
         </tr>
         <tr>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/build.properties b/eclipse/plugins/org.eclipse.help.webapp/build.properties
index 807ba3c..d90d18c 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/build.properties
+++ b/eclipse/plugins/org.eclipse.help.webapp/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ bin.includes = plugin.xml,\
                basic/,\
                advanced/,\
                .options,\
-               web-archive/
+               web-archive/,\
+               advancedstate/
 output.. = bin/
 
diff --git a/eclipse/plugins/org.eclipse.help.webapp/buildJSPs.xml b/eclipse/plugins/org.eclipse.help.webapp/buildJSPs.xml
index 2ed0367..e937069 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/buildJSPs.xml
+++ b/eclipse/plugins/org.eclipse.help.webapp/buildJSPs.xml
@@ -1,4 +1,5 @@
-
<!--
+
+<!--
      Copyright (c) 2005, 2007 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.help.webapp/index.jsp b/eclipse/plugins/org.eclipse.help.webapp/index.jsp
index d006e9b..c8fa901 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/index.jsp
+++ b/eclipse/plugins/org.eclipse.help.webapp/index.jsp
@@ -1,5 +1,5 @@
 <%--
- Copyright (c) 2000, 2010 IBM Corporation and others.
+ Copyright (c) 2000, 2011 IBM Corporation and others.
  All rights reserved. This program and the accompanying materials 
  are made available under the terms of the Eclipse Public License v1.0
  which accompanies this distribution, and is available at
@@ -11,7 +11,9 @@
 <%@ page import="org.eclipse.help.internal.webapp.data.*" errorPage="/advanced/err.jsp" contentType="text/html; charset=UTF-8"%>
 <%
 	request.setCharacterEncoding("UTF-8");
-	ServerState.webappStarted(application,request, response);
+	ServerState.webappStarted(application,request, response);	
+	// Read the scope parameter
+	RequestScope.setScopeFromRequest(request, response);
 	LayoutData data = new LayoutData(application,request, response);
 
 	if (request.getParameter("noscript") != null) {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/plugin.xml b/eclipse/plugins/org.eclipse.help.webapp/plugin.xml
index 33fd4e0..187f3c9 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/plugin.xml
+++ b/eclipse/plugins/org.eclipse.help.webapp/plugin.xml
@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
<!--
-    Copyright (c) 2005, 2010 IBM Corporation and others.
+<?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2005, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
     http://www.eclipse.org/legal/epl-v10.html
-   
+    
     Contributors:
          IBM Corporation - initial API and implementation
  -->
@@ -15,6 +16,7 @@
    <extension-point id="view" name="View" schema="schema/view.exsd"/>
    <extension-point id="frame" name="Webapp Frame" schema="schema/frame.exsd"/> 
    <extension-point id="toolbarButton" name="Toolbar Button" schema="schema/toolbarButton.exsd"/>
+   <extension-point id="validatedServlet" name="Validated Servlet" schema="schema/validatedServlet.exsd"/>
   <extension
          point="org.eclipse.equinox.http.registry.httpcontexts">
       <httpcontext
@@ -27,8 +29,13 @@
    <extension
          point="org.eclipse.equinox.http.registry.resources">
       <resource
-            alias="/"
-            base-name="/"
+            alias="/advanced"
+            base-name="/advanced"
+            httpcontextId="help">
+      </resource>
+      <resource
+            alias="/basic"
+            base-name="/basic"
             httpcontextId="help">
       </resource>
       <serviceSelector
@@ -122,9 +129,39 @@
             class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/"
             httpcontextId="help">
       </servlet>
+      <servlet
+            alias="/index.jsp"
+            class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/index.jsp"
+            httpcontextId="help">
+      </servlet>
+      <servlet
+            alias="/scopeState.jsp"
+            class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/advancedstate/scopeState.jsp"
+            httpcontextId="help">
+      </servlet>
+      <servlet
+            alias="/workingSetState.jsp"
+            class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/advancedstate/workingSetState.jsp"
+            httpcontextId="help">
+      </servlet>
+      <servlet
+            alias="/advanced/*.jsp"
+            class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/advanced/"
+            httpcontextId="help">
+      </servlet>
+      <servlet
+            alias="/basic/*.jsp"
+            class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/basic/"
+            httpcontextId="help">
+      </servlet>
       <serviceSelector
             filter="(other.info=org.eclipse.help)">
       </serviceSelector>
+      <servlet
+            alias="/vs"
+            class="org.eclipse.help.internal.webapp.servlet.ValidatorServlet"
+            httpcontextId="help">
+      </servlet>
    </extension>
    <extension
          id="org.eclipse.help.webapp.remoteStatusProducer"
@@ -134,4 +171,79 @@
             producer="org.eclipse.help.internal.webapp.StatusProducer">
       </contentProducer>
    </extension>
+   <extension
+         point="org.eclipse.help.webapp.validatedServlet">
+      <servlet
+            alias="/service/control"
+            class="org.eclipse.help.internal.webapp.service.ControlService">
+      </servlet>
+      <servlet
+            alias="/service/content"
+            class="org.eclipse.help.internal.webapp.service.ContentService">
+      </servlet>
+      <servlet
+            alias="/service/topic"
+            class="org.eclipse.help.internal.webapp.service.ContentService">
+      </servlet>
+      <servlet
+            alias="/service/nftopic"
+            class="org.eclipse.help.internal.webapp.service.ContentService">
+      </servlet>
+      <servlet
+            alias="/service/ntopic"
+            class="org.eclipse.help.internal.webapp.service.ContentService">
+      </servlet>
+      <servlet
+            alias="/service/rtopic"
+            class="org.eclipse.help.internal.webapp.service.ContentService">
+      </servlet>
+      <servlet
+            alias="/service/nav"
+            class="org.eclipse.help.internal.webapp.service.NavService">
+      </servlet>
+      <servlet
+            alias="/service/livehelp"
+            class="org.eclipse.help.internal.webapp.service.LiveHelpService">
+      </servlet>
+      <servlet
+            alias="/service/toc"
+            class="org.eclipse.help.internal.webapp.service.TocService">
+      </servlet>
+      <servlet
+            alias="/service/tocfragment"
+            class="org.eclipse.help.internal.webapp.service.TocFragmentService">
+      </servlet>
+      <servlet
+            alias="/service/index"
+            class="org.eclipse.help.internal.webapp.service.IndexService">
+      </servlet>
+      <servlet
+            alias="/service/indexfragment"
+            class="org.eclipse.help.internal.webapp.service.IndexFragmentService">
+      </servlet>
+      <servlet
+            alias="/service/advancedsearch"
+            class="org.eclipse.help.internal.webapp.service.AdvancedSearchService">
+      </servlet>
+      <servlet
+            alias="/service/search"
+            class="org.eclipse.help.internal.webapp.service.SearchService">
+      </servlet>
+      <servlet
+            alias="/service/context"
+            class="org.eclipse.help.internal.webapp.service.ContextService">
+      </servlet>
+      <servlet
+            alias="/service/extension"
+            class="org.eclipse.help.internal.webapp.service.ExtensionService">
+      </servlet>
+      <servlet
+            alias="/service/about.html"
+            class="org.eclipse.help.internal.webapp.service.AboutService">
+      </servlet>
+      <servlet
+            alias="/service/state"
+            class="org.eclipse.help.internal.webapp.service.SearchStateService">
+      </servlet>
+   </extension>
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/schema/validatedServlet.exsd b/eclipse/plugins/org.eclipse.help.webapp/schema/validatedServlet.exsd
new file mode 100644
index 0000000..cbad733
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/schema/validatedServlet.exsd
@@ -0,0 +1,120 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.help.webapp" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.help.webapp" id="validatedServlet" name="Validated Servlet"/>
+      </appInfo>
+      <documentation>
+         This extension points implements a webapp security validator around a servlet.  All calls to the servlet are checked for known malicious threats before returning to the client.  Important: All context paths to servlet validator resources must start with /vs.  For example: http://host:port/help/vs/service/toc
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="0" maxOccurs="unbounded">
+            <element ref="servlet"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="servlet">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="javax.servlet.http.HttpServlet:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="alias" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.7
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+      	None provided.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         The supplied servlet class must extend the class <samp>javax.servlet.http.HttpServlet</samp>.  The servlet class should function no differently then general servlets.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         A supplied implementation of this point can be found in <samp>org.eclipse.help.webapp</samp> for any of the services in org.eclipse.help.internal.webapp.services.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2011 IBM Corporation and others.<br>
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which accompanies 
+this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/eclipse/plugins/org.eclipse.help.webapp/schema/view.exsd b/eclipse/plugins/org.eclipse.help.webapp/schema/view.exsd
index 70c86d8..d6c7169 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/schema/view.exsd
+++ b/eclipse/plugins/org.eclipse.help.webapp/schema/view.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.help.webapp" id="view" name="Webapp View"/>
       </appInfo>
       <documentation>
-         The view extension point allows a view to be contributed to the help system webapp. The view area of the webapp is the tabbed area (in the advanced presentation) which contains the table of contents as well as search results and other views. Each view requires two jsp files, a View.jsp file and a Toolbar.jsp file. This extension point uses a class to get all of teh properties of teh view.
+         The view extension point allows a view to be contributed to the help system webapp. The view area of the webapp is the tabbed area (in the advanced presentation) which contains the table of contents as well as search results and other views. Each view requires two jsp files, a View.jsp file and a Toolbar.jsp file. This extension point uses a class to get all of the properties of the view.
       </documentation>
    </annotation>
 
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java
index b76e5c0..ff94689 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/StatusProducer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class StatusProducer implements IHelpContentProducer {
 		// Get all remote sites, and subset of non-working sites
 		ArrayList remoteSites = RemoteStatusData.getRemoteSites();
 		ArrayList badSites = RemoteStatusData.checkSitesConnectivity(remoteSites);
+		RemoteStatusData.clearCache();
 
 		// Check to see if there are any enabled remote sites.
 		// If not, return null - default topic not found will display
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/WebappResources.properties b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/WebappResources.properties
index 0a12255..ef9db7c 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/WebappResources.properties
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/WebappResources.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -39,7 +39,12 @@ QuickSearchTopic=Search selected topic
 QuickSearchToc=Search selected topic and all subtopics
 TocHeading=Contents
 Close=Close
+activeScope=Scope {0}:
+matchesInScope={0} matches in {1}:
+showAllLink=Show all
+changeScopeLink=Change scope
 Nothing_found=Nothing found.
+Nothing_found_in_scope=Nothing found in scope {0}.
 Indexing=Indexing...
 Loading=Loading... please wait
 complete=complete
@@ -79,6 +84,7 @@ ProcessingError=An error occured while processing the requested document:
 
 searchTooComplex=Search request too complex.
 disabledResults=Results from Disabled Capabilities 
+AlternateSearchQueries=Alternate search expressions:
 
 # View names
 toc=Contents
@@ -206,3 +212,10 @@ Uncategorized=Uncategorized
 criterionClosed=Criterion closed
 criterionOpen=Criterion open
 Criteria=Criteria
+
+# Validator Servlet
+cantCreateServlet=Unable to create servlet: {0}
+
+# Service API
+StatusServlet_PARAM_MISSING=The "{0}" parameter is missing from the request.
+
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java
index 06a5602..6247462 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/LayoutData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/PrintData.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/PrintData.java
index ced6d55..2bf324b 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/PrintData.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/PrintData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -375,13 +375,14 @@ public class PrintData extends RequestData {
 	private String getContent(String href, String locale) {
 		InputStream in = HelpSystem.getHelpContent(href, locale);
 		StringBuffer buf = new StringBuffer();
+		InputStream rawInput=null;
 		if (in != null) {
 			try {
 				String charset = HTMLDocParser.getCharsetFromHTML(in);
 				if (charset == null) {
 					charset = "UTF-8"; //$NON-NLS-1$
 				}
-				InputStream rawInput = HelpSystem.getHelpContent(href, locale);
+				rawInput = HelpSystem.getHelpContent(href, locale);
 				boolean filter = BaseHelpSystem.getMode() != BaseHelpSystem.MODE_INFOCENTER;
 				in = DynamicXHTMLProcessor.process(href, rawInput, locale, filter);
 
@@ -405,6 +406,11 @@ public class PrintData extends RequestData {
 					in.close();
 				}
 				catch (Exception e) {}
+				try {
+
+					rawInput.close();
+				}
+				catch (Exception e) {}
 			}
 		}
 		return buf.toString();
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/RequestScope.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/RequestScope.java
index ea87628..f7809e3 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/RequestScope.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/RequestScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -140,9 +140,8 @@ public class RequestScope {
 				CookieUtil.setCookieValue(SCOPE_COOKIE_NAME, URLCoder.compactEncode(scope), request, response);
 			}
 		} else {
-			InstanceScope instanceScope = new InstanceScope();
-			IEclipsePreferences pref = instanceScope.getNode(HelpBasePlugin.PLUGIN_ID);
-			pref.put(IHelpBaseConstants.P_KEY_HELP_SCOPE, scope);
+			IEclipsePreferences pref = InstanceScope.INSTANCE.getNode(HelpBasePlugin.PLUGIN_ID);
+		    pref.put(IHelpBaseConstants.P_KEY_HELP_SCOPE, scope);
 			try {
 				pref.flush();
 			} catch (BackingStoreException e) {
@@ -151,11 +150,15 @@ public class RequestScope {
 	}
 	
 	private static String getScopeFromCookies(HttpServletRequest request) {
+		return getValueFromCookies(request, SCOPE_COOKIE_NAME);
+	}	
+	
+	private static String getValueFromCookies(HttpServletRequest request, String cookieName) {
 		// check if scope was passed earlier in this session
 		Cookie[] cookies = request.getCookies();
 		if (cookies != null) {
 			for (int c = 0; c < cookies.length; c++) {
-				if (SCOPE_COOKIE_NAME.equals(cookies[c].getName())) { 
+				if (cookieName.equals(cookies[c].getName())) { 
 					return URLCoder.decode(cookies[c].getValue());
 				}
 			}
@@ -172,5 +175,37 @@ public class RequestScope {
 	public static boolean filterBySearchScope(HttpServletRequest request) {
         return true;
 	}
+	
+	public static boolean getFlag(HttpServletRequest request, String flagName ) {
+		String value;
+		if (HelpSystem.isShared()) {
+			value = getValueFromCookies(request, flagName);
+		} else {
+			value = Platform.getPreferencesService().getString
+				    (HelpBasePlugin.PLUGIN_ID, flagName + "Webapp", null, null); //$NON-NLS-1$
+		}
+		if (value == null) {
+			return Platform.getPreferencesService().getBoolean
+				    (HelpBasePlugin.PLUGIN_ID, flagName, false, null); 
+		}
+		return "true".equalsIgnoreCase(value); //$NON-NLS-1$
+	}
+	
+	public static void setFlag(HttpServletRequest request, 
+			                   HttpServletResponse response,
+			                   String flagName,
+			                   boolean value) 
+	{
+		if (HelpSystem.isShared()) {
+		  CookieUtil.setCookieValueWithoutPath(flagName, Boolean.toString(value), request, response);
+		} else {
+			IEclipsePreferences pref = InstanceScope.INSTANCE.getNode(HelpBasePlugin.PLUGIN_ID);
+		    pref.putBoolean(flagName  + "Webapp", value ); //$NON-NLS-1$
+		    try {
+				pref.flush();
+			} catch (BackingStoreException e) {
+			}
+		}
+	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/ScopeSavingSearchData.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/ScopeSavingSearchData.java
new file mode 100644
index 0000000..f708105
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/ScopeSavingSearchData.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.help.internal.webapp.data;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ScopeSavingSearchData extends SearchData {
+
+	public ScopeSavingSearchData(ServletContext context,
+			HttpServletRequest request, HttpServletResponse response) {
+		super(context, request, response);
+	}
+	
+	protected boolean canSaveScope() {
+        return true;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/SearchData.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/SearchData.java
index acea7e8..37534a7 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/SearchData.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/SearchData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,15 +13,16 @@ package org.eclipse.help.internal.webapp.data;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
-
 import javax.servlet.ServletContext;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.help.HelpSystem;
 import org.eclipse.help.IHelpResource;
 import org.eclipse.help.IToc;
@@ -30,9 +31,11 @@ import org.eclipse.help.base.AbstractHelpScope;
 import org.eclipse.help.internal.HelpPlugin;
 import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.IHelpBaseConstants;
 import org.eclipse.help.internal.search.ISearchQuery;
 import org.eclipse.help.internal.search.QueryTooComplexException;
 import org.eclipse.help.internal.search.SearchHit;
+import org.eclipse.help.internal.search.SearchManager;
 import org.eclipse.help.internal.search.SearchProgressMonitor;
 import org.eclipse.help.internal.search.SearchQuery;
 import org.eclipse.help.internal.search.SearchResults;
@@ -43,13 +46,19 @@ import org.eclipse.help.internal.workingset.AdaptableSelectedTopic;
 import org.eclipse.help.internal.workingset.AdaptableToc;
 import org.eclipse.help.internal.workingset.AdaptableTopic;
 import org.eclipse.help.internal.workingset.WorkingSet;
+import org.eclipse.help.search.AbstractSearchProcessor;
 import org.eclipse.help.search.ISearchEngineResult;
 import org.eclipse.help.search.ISearchEngineResult2;
+import org.eclipse.help.search.ISearchResult;
+import org.eclipse.help.search.SearchProcessorInfo;
+import org.eclipse.osgi.util.NLS;
 
 /**
  * Helper class for searchView.jsp initialization
  */
 public class SearchData extends ActivitiesData {
+	private static final String SHOW_CATEGORIES = "showSearchCategories"; //$NON-NLS-1$
+
 	private WebappWorkingSetManager wsmgr;
 
 	// Request parameters
@@ -70,6 +79,11 @@ public class SearchData extends ActivitiesData {
 	// QueryException if any
 	private QueryTooComplexException queryException = null;
 
+	// List of alternate search terms
+	private List altList = new ArrayList();
+
+	private boolean showCategories = false;
+
 	/**
 	 * Constructs the xml data for the search results page.
 	 * 
@@ -85,14 +99,70 @@ public class SearchData extends ActivitiesData {
 			topicHref = null;
 
 		searchWord = request.getParameter("searchWord"); //$NON-NLS-1$
+		readDisplayFlags(request, response);
 		
 		if (isScopeRequest()) {
 			workingSetName = request.getParameter("workingSet"); //$NON-NLS-1$
-			saveWorkingSet(workingSetName);
+			if ( canSaveScope() ) {
+			    saveWorkingSet(workingSetName);
+			}
 		} 
+		
+		// try loading search results or get the indexing progress info.
+		readSearchResults();
+	}
+
+	protected boolean canSaveScope() {
+        // Scope is only saved from scopeState.jsp
+		// This prevents cookies from being saved with a /advanced path
+		return false;
+	}
+
+	private void readDisplayFlags(HttpServletRequest request, HttpServletResponse response) {
+		String showCategoriesParam = request.getParameter(SHOW_CATEGORIES); 
+		if (showCategoriesParam != null) {
+			showCategories = "true".equalsIgnoreCase(showCategoriesParam); //$NON-NLS-1$
+			RequestScope.setFlag(request, response, SHOW_CATEGORIES, showCategories);
+		} else {
+			showCategories = RequestScope.getFlag(request, SHOW_CATEGORIES);
+		}
+	}
 
+	public void readSearchResults() {
+		
 		// try loading search results or get the indexing progress info.
 		if (isSearchRequest() && !isScopeRequest()) {
+			
+			altList.clear();
+			
+			AbstractSearchProcessor processors[] = SearchManager.getSearchProcessors();
+			for (int p=0;p<processors.length;p++)
+			{
+				SearchProcessorInfo result = 
+					processors[p].preSearch(searchWord);
+				if (result!=null)
+				{
+					String alternates[] = result.getAlternateTerms();
+					if (alternates!=null)
+					{
+						for (int a=0;a<alternates.length;a++)
+						{
+							String div = 
+									"<div><a target=\"_self\" href=\"./searchView.jsp?searchWord="+alternates[a]+"\">"+ //$NON-NLS-1$ //$NON-NLS-2$
+									alternates[a]+
+									"</a></div>"; //$NON-NLS-1$
+							
+							if (!altList.contains(div))
+								altList.add(div);
+						}
+					}
+					String query = result.getQuery();
+					if (query!=null)
+						searchWord = query;
+				}
+			}
+			Collections.sort(altList);
+			
 			loadSearchResults();
 			if (queryException != null) {
 				return;
@@ -105,6 +175,20 @@ public class SearchData extends ActivitiesData {
 						break;
 					}
 				}
+				
+				ISearchResult results[] = SearchManager.convertHitsToResults(hits);
+				boolean reset= false;
+				for (int p=0;p<processors.length;p++)
+				{
+					ISearchResult tmp[] = processors[p].postSearch(searchWord,results);
+					if (tmp!=null)
+					{
+						reset = true;
+						results = tmp;
+					}
+				}
+				if (reset)
+					hits = SearchManager.convertResultsToHits(results);
 			}
 		}
 	}
@@ -115,7 +199,8 @@ public class SearchData extends ActivitiesData {
 	 * @return boolean
 	 */
 	public boolean isSearchRequest() {
-		return (request.getParameter("searchWord") != null); //$NON-NLS-1$
+		String searchWordParam = request.getParameter("searchWord"); //$NON-NLS-1$
+		return (searchWordParam != null && searchWordParam.length() > 0);
 	}
 
 	/**
@@ -176,6 +261,10 @@ public class SearchData extends ActivitiesData {
 	public int getResultsCount() {
 		return hits.length;
 	}
+	
+	public SearchHit[] getResults() {
+		return hits;
+	}
 
 	public String getSelectedTopicId() {
 		return selectedTopicId;
@@ -226,16 +315,7 @@ public class SearchData extends ActivitiesData {
 	}
 
 	public boolean isShowCategories() {
-		Cookie[] cookies = request.getCookies();
-		if (cookies != null) {
-        		for (int i=0;i<cookies.length;++i) {
-        			if ("showCategories".equals(cookies[i].getName())) { //$NON-NLS-1$
-        				return String.valueOf(true).equals(cookies[i].getValue());
-        			}
-        		}
-		}
-		// default off
-		return false;
+		return showCategories;
 	}
 
 	public boolean isShowDescriptions() {
@@ -247,8 +327,9 @@ public class SearchData extends ActivitiesData {
         			}
         		}
 		}
-		// default on
-		return true;
+		// get default from preferences
+		return Platform.getPreferencesService().getBoolean
+			    (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_SHOW_SEARCH_DESCRIPTION, true, null);
 	}
 
 	/**
@@ -326,16 +407,6 @@ public class SearchData extends ActivitiesData {
 		return workingSetName;
 	}
 
-	/**
-	 * This method is used to persist the working set name and is called from
-	 * the search view, after each search
-	 */
-	public void saveScope() {
-		// if a working set is defined, set it in the preferences
-		String workingSet = request.getParameter("scope"); //$NON-NLS-1$
-		saveWorkingSet(workingSet);
-	}
-
 	private void saveWorkingSet(String workingSet) {
 		String lastWS = wsmgr.getCurrentWorkingSet();
 		if (workingSet != null && !workingSet.equals(lastWS)) {
@@ -537,7 +608,46 @@ public class SearchData extends ActivitiesData {
 		}
 		return ServletResources.getString("searchTooComplex", request); //$NON-NLS-1$
 	}
+	
+	public boolean isScopeActive() {
+		return ! getScope().equals(ServletResources.getString("All", request)); //$NON-NLS-1$		
+	}
 
+	public String getNotFoundMessage() {
+	    String scope = getScope(); 
+	    if (scope.equals(ServletResources.getString("All", request))) { //$NON-NLS-1$
+		    return ServletResources.getString("Nothing_found", request); //$NON-NLS-1$
+		} else {
+		    return NLS.bind(ServletResources.getString("Nothing_found_in_scope", request), scope); //$NON-NLS-1$
+		}
+	}
+
+	public String getScopeActiveMessage() {
+	    String scope = getScope(); 
+		return NLS.bind(ServletResources.getString("activeScope", request), scope); //$NON-NLS-1$ 
+	}
+		
+	public String getMatchesInScopeMessage() {
+	    String scope = getScope(); 
+	    return NLS.bind(ServletResources.getString("matchesInScope", request), "" + getResultsCount(), scope); //$NON-NLS-1$ //$NON-NLS-2$		
+	}
+
+	public String getPreProcessorResults()
+	{
+		if (altList==null || altList.isEmpty())
+			return ""; //$NON-NLS-1$
+
+		StringBuffer result = new StringBuffer();
+		
+		result.append(ServletResources.getString("AlternateSearchQueries", request)); //$NON-NLS-1$
+		result.append("<ul>"); //$NON-NLS-1$
+		for (int a=0;a<altList.size();a++)
+			result.append("<li>"+(String)altList.get(a)+"</li>"); //$NON-NLS-1$ //$NON-NLS-2$
+		result.append("</ul>"); //$NON-NLS-1$
+		
+		return result.toString();
+	}
+	
 	/*
 	 * Filters out results that help doesn't know how to open (i.e. those hits
 	 * that implement ISearchEngineResult2 and canOpen() returns true.
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/ServletResources.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/ServletResources.java
index 4e6cad9..bbf8300 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/ServletResources.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/ServletResources.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,15 +71,7 @@ public class ServletResources {
 			HttpServletRequest request) {
 		String property = WebappResources.getString(name, UrlUtil.getLocaleObj(
 				request, null), replace0);
-		if (property == null || property.length() <= 0) {
-			return property;
-		}
-		int amp = property.indexOf('&');
-		if (amp <0 || amp >= property.length() - 1) {
-			return property;
-		}
-		return property.substring(0, amp - 1)
-				+ property.substring(amp + 1, property.length());
+		return property;
 	}
 	
 	/**
@@ -95,15 +87,7 @@ public class ServletResources {
 			HttpServletRequest request) {
 		String property = WebappResources.getString(name, UrlUtil.getLocaleObj(
 				request, null), args);
-		if (property == null || property.length() <= 0) {
-			return property;
-		}
-		int amp = property.indexOf('&');
-		if (amp <0 || amp >= property.length() - 1) {
-			return property;
-		}
-		return property.substring(0, amp - 1)
-				+ property.substring(amp + 1, property.length());
+		return property;
 	}
 	
 	/**
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java
index 83d0d92..8cebd40 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/data/UrlUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,15 +32,9 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.help.internal.HelpPlugin;
 import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.base.HelpBasePlugin;
-import org.eclipse.help.internal.base.util.TString;
 import org.eclipse.help.internal.util.ProductPreferences;
 
 public class UrlUtil {
-	// XML escaped characters mapping
-	private static final String invalidXML[] = {"&", ">", "<", "\"", "'"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-	// Note that we have to use ' instead of ' because ' does not work in all versions of IE
-	private static final String escapedXML[] = {
-			"&", ">", "<", """, "'"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 
 	// for Safari build 125.1 finds version 125
 	static final Pattern safariPattern = Pattern.compile(
@@ -101,9 +95,33 @@ public class UrlUtil {
 			return null;
 		}
 
-		for (int i = 0; i < invalidXML.length; i++)
-			str = TString.change(str, invalidXML[i], escapedXML[i]);
-		return str;
+		StringBuffer result = new StringBuffer();
+		for (int i = 0 ; i < str.length(); i++) {
+			appendEncodedChar(result, str.charAt(i));
+		}
+		return result.toString();
+	}
+
+	private static void appendEncodedChar(StringBuffer result, char ch) {
+		if (needsEncoding(ch)) {
+			int chInt = ch;
+			result.append("&#" + chInt + ';'); //$NON-NLS-1$
+			return;
+		}
+		result.append(ch);		
+	}
+
+	private static boolean needsEncoding(char ch) {
+		if (ch > 255) {
+			return false;
+		}
+		if (Character.isLetterOrDigit(ch)) {
+			return false;
+		}
+		if ( ch == ' ' || ch == '_' || ch  == '%' || ch == '+') {
+			return false;
+		}
+		return true;
 	}
 
 	public static boolean isLocalRequest(HttpServletRequest request) {
@@ -157,10 +175,11 @@ public class UrlUtil {
 	 */
 	public static boolean isValidTopicParamOrWasOpenedFromHelpDisplay(String path) {
 		// Topics opened via the help display ( including cheat sheets and intro ) 
-		// are always valid
-		if (path.equals(BaseHelpSystem.getHelpDisplay().getHrefOpenedFromHelpDisplay())) {
+		// are are always valid
+		if (wasOpenedFromHelpDisplay(path)) {
 			return true;
 		}
+
 		if (new WebappPreferences().isRestrictTopicParameter()) {
 		    if (path.indexOf("://") >= 0) {  //$NON-NLS-1$
 			    return false;
@@ -168,6 +187,13 @@ public class UrlUtil {
 		}
 		return true;
 	}
+
+	public static boolean wasOpenedFromHelpDisplay(String path) {
+		if (path.equals(BaseHelpSystem.getHelpDisplay().getHrefOpenedFromHelpDisplay())) {
+			return true;
+		}
+		return path.equals(getHelpURL(BaseHelpSystem.getHelpDisplay().getHrefOpenedFromHelpDisplay()));
+	}
 	
 	/**
 	 * Returns a path to the given topic in the form of child indexes. For
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ContextParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ContextParser.java
new file mode 100644
index 0000000..7b4ac5c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ContextParser.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.util.Properties;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.eclipse.help.internal.webapp.utils.XMLHelper;
+import org.xml.sax.Attributes;
+
+public class ContextParser extends ResultParser {
+
+	private ParseElement element = null;
+	private String currentTag;
+
+	public ContextParser() {
+		super(JSonHelper.TITLE);
+	}
+	
+	public void startElement(String uri, String lname, String name, Attributes attrs) {
+		
+		currentTag = name;
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_DESCRIPTION))
+			return;
+		
+		Properties properties = new Properties();
+		properties.put(JSonHelper.PROPERTY_NAME, name);
+		for (int i = 0; i < attrs.getLength(); i++) {
+			String qname = attrs.getQName(i);
+			String val = attrs.getValue(i);
+			properties.put(qname, val);
+		}
+		
+		ParseElement elem = new ParseElement(properties, element);
+		if (element != null)
+			element.addChild(elem);
+		else
+			items.add(elem);
+		
+		element = elem;
+		
+	}
+	
+	public void characters(char[] ch, int start, int length) {
+		
+		if (element != null 
+				&& currentTag.equalsIgnoreCase(
+						XMLHelper.ELEMENT_DESCRIPTION)) {
+			
+			Properties properties = element.getProps();
+			if (properties != null) {
+				
+				String content = new String(ch, start, length);
+				
+				String existing = (String) properties.get(currentTag);
+				if (existing == null)
+					existing = ""; //$NON-NLS-1$
+				
+				content = content.replaceAll("[\\n\\t]", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
+				
+				properties.put(currentTag, existing + content);
+				element.updateParseElement(properties);
+			}
+		}
+	}
+	
+	public void endElement(String uri, String lname, String name) {
+		
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_DESCRIPTION))
+			return;
+		
+		if (element != null) {
+			element = element.getParent();
+		}		
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ExtensionParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ExtensionParser.java
new file mode 100644
index 0000000..12a2e9a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ExtensionParser.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.util.Properties;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.xml.sax.Attributes;
+
+public class ExtensionParser extends ResultParser {
+
+	private ParseElement element = null;
+	private String currentTag;
+
+	public ExtensionParser() {
+		super(JSonHelper.TITLE);
+	}
+	
+	public void startElement(String uri, String lname, String name, Attributes attrs) {
+		
+		currentTag = name;
+		
+		Properties properties = new Properties();
+		properties.put(JSonHelper.PROPERTY_NAME, name);
+		for (int i = 0; i < attrs.getLength(); i++) {
+			String qname = attrs.getQName(i);
+			String val = attrs.getValue(i);
+			properties.put(qname, val);
+		}
+		
+		ParseElement elem = new ParseElement(properties, element);
+		if (element != null)
+			element.addChild(elem);
+		else
+			items.add(elem);
+		
+		element = elem;
+		
+	}
+	
+	public void characters(char[] ch, int start, int length) {
+		
+		if (element != null) {
+			
+			Properties properties = element.getProps();
+			if (properties != null) {
+				
+				String content = new String(ch, start, length);
+				
+				String existing = (String) properties.get(currentTag);
+				if (existing == null)
+					existing = ""; //$NON-NLS-1$
+				
+				content = content.replaceAll("[\\n\\t]", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
+				
+				properties.put(currentTag, existing + content);
+				element.updateParseElement(properties);
+			}
+		}
+	}
+	
+	public void endElement(String uri, String lname, String name) {
+		
+		if (element != null) {
+			element = element.getParent();
+		}		
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/IndexFragmentParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/IndexFragmentParser.java
new file mode 100644
index 0000000..efc9f42
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/IndexFragmentParser.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.util.Properties;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.eclipse.help.internal.webapp.utils.XMLHelper;
+import org.xml.sax.Attributes;
+
+public class IndexFragmentParser extends ResultParser{
+
+	private ParseElement element = null;
+	
+	public IndexFragmentParser() {
+		super(JSonHelper.TITLE);
+	}
+	
+	public void startElement(String uri, String lname, String name, Attributes attrs) {
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_NODE))
+		{
+			Properties properties = new Properties();
+			properties.put(JSonHelper.PROPERTY_NAME, JSonHelper.INDEX);
+			for (int i = 0; i < attrs.getLength(); i++) {
+				String qname = attrs.getQName(i);
+				String val = attrs.getValue(i);
+				properties.put(qname, val);
+			}
+			
+			ParseElement elem = new ParseElement(properties, element);
+			if (element != null)
+				element.addChild(elem);
+			else
+				items.add(elem);
+			
+			element = elem;
+		}
+		
+	}
+	
+	public void endElement(String uri, String lname, String name) {
+		if (element != null 
+				&& name.equalsIgnoreCase(XMLHelper.ELEMENT_NODE)) {
+			element = element.getParent();
+		}		
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/IndexParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/IndexParser.java
new file mode 100644
index 0000000..980867f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/IndexParser.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.util.Properties;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.eclipse.help.internal.webapp.utils.XMLHelper;
+import org.xml.sax.Attributes;
+
+public class IndexParser extends ResultParser {
+
+	private ParseElement element = null;
+
+	public IndexParser() {
+		super(JSonHelper.TITLE);
+	}
+	
+	public void startElement(String uri, String lname, String name, Attributes attrs) {
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_INDEX_CONTRIBUTIONS) 
+				|| name.equalsIgnoreCase(XMLHelper.ELEMENT_INDEX))
+			return;
+		
+		Properties properties = new Properties();
+		properties.put(JSonHelper.PROPERTY_NAME, name);
+		for (int i = 0; i < attrs.getLength(); i++) {
+			String qname = attrs.getQName(i);
+			String val = attrs.getValue(i);
+			properties.put(qname, val);
+		}
+		
+		ParseElement elem = new ParseElement(properties, element);
+		if (element != null)
+			element.addChild(elem);
+		else
+			items.add(elem);
+		
+		element = elem;
+		
+	}
+	
+	public void endElement(String uri, String lname, String name) {
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_INDEX_CONTRIBUTIONS) 
+				|| name.equalsIgnoreCase(XMLHelper.ELEMENT_INDEX))
+			return;
+		
+		if (element != null) {
+			element = element.getParent();
+		}		
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ParseElement.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ParseElement.java
new file mode 100644
index 0000000..152b714
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ParseElement.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+
+public class ParseElement {
+
+	private Properties props;
+	private ArrayList children = new ArrayList();
+	private ParseElement parent;
+
+	public ParseElement(Properties props, ParseElement parent) {
+		this.props = props;
+		this.parent = parent;
+	}
+
+	public ParseElement(Properties props) {
+		this(props, null);
+	}
+	
+	public void updateParseElement(Properties props) {
+		this.props = props;
+	}
+	
+	public Properties getProps() {
+		return props;
+	}
+	
+	public ParseElement getParent() {
+		return parent;
+	}
+	
+	public String getProperty(String key) {
+		return (props != null) ? props.getProperty(key) : ""; //$NON-NLS-1$
+	}
+	
+	public String toString() {
+		return (props != null) ? props.toString() : ""; //$NON-NLS-1$
+	}
+	
+	public void addChild(ParseElement elem) {
+		children.add(elem);
+	}
+	
+	public int getChildrenCount() {
+		return children.size();
+	}
+	
+	public String toJSON(int level) {
+		
+		StringBuffer buff = new StringBuffer();
+		
+		String space = JSonHelper.SPACE;
+		for (int s = 0; s < level; s++) {
+			space += JSonHelper.SPACE;
+		}
+		
+		buff.append(JSonHelper.NEWLINE + space);
+		buff.append(JSonHelper.BEGIN_BRACE);
+		
+		if (props != null) {
+			Enumeration enumObj = props.keys();
+			while (enumObj.hasMoreElements()) {
+				
+				String key = (String) enumObj.nextElement();
+				String val = props.getProperty(key);
+				
+				buff.append(JSonHelper.NEWLINE + space + JSonHelper.SPACE);
+				buff.append(key);
+				buff.append(JSonHelper.COLON);
+				try {
+					val = URLEncoder.encode(val, "UTF-8"); //$NON-NLS-1$
+				} catch (UnsupportedEncodingException e) {
+					e.printStackTrace();
+				}
+				buff.append(JSonHelper.getQuotes(val));
+				buff.append(JSonHelper.COMMA);
+			}
+		}
+		
+		if (children.size() <= 0) {
+			int len = buff.length();
+			char ch = buff.charAt(len - 1);
+			if (ch == ',') {
+				buff.deleteCharAt(len - 1);
+				buff.append(JSonHelper.NEWLINE + space);
+			}
+			
+		} else {
+			
+			buff.append(JSonHelper.NEWLINE + space + JSonHelper.SPACE);
+			buff.append(JSonHelper.CHILDREN);
+			buff.append(JSonHelper.COLON);
+			buff.append(JSonHelper.BEGIN_BRACKET);
+			
+			for (int i = 0; i < children.size(); i++) {
+				
+				if (i > 0)
+					buff.append(JSonHelper.COMMA);
+				
+				ParseElement element = (ParseElement) children.get(i);
+				buff.append(element.toJSON(level + 2));
+			}
+			
+			buff.append(JSonHelper.NEWLINE + space + JSonHelper.SPACE);
+			
+			buff.append(JSonHelper.END_BRACKET);
+			buff.append(JSonHelper.NEWLINE + space);
+		}
+		
+		buff.append(JSonHelper.END_BRACE);
+		
+		return buff.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ResultParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ResultParser.java
new file mode 100644
index 0000000..08c7e86
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ResultParser.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class ResultParser extends DefaultHandler {
+
+	private String label = ""; //$NON-NLS-1$
+	protected ArrayList items = new ArrayList(); //parser populates the items arrayList withe parsed data.
+
+	public ResultParser(String label) {
+		this.label = label;
+	}
+	
+	public void parse(URL tocURL) 
+		throws ParserConfigurationException, SAXException, IOException
+	{
+		parse(tocURL.openStream());
+	}
+	
+	public void parse(InputStream in) 
+		throws ParserConfigurationException, SAXException, IOException
+	{
+		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+		parser.parse(in, this);
+	}
+	
+	public void setLabel(String label) {
+		this.label = label;
+	}
+	
+	public ArrayList getItems()
+	{
+		return items;
+	}
+	
+	public String toString()
+	{
+		return items.toString();
+	}
+	
+	public String toJSON() {
+		
+		StringBuffer buf = new StringBuffer();
+		
+		buf.append(JSonHelper.BEGIN_BRACE);
+		buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE);
+		
+		buf.append(JSonHelper.IDENTIFIER);
+		buf.append(JSonHelper.COLON);
+		buf.append(JSonHelper.getQuotes(JSonHelper.ID));
+		buf.append(JSonHelper.COMMA);
+
+		buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE);
+		buf.append(JSonHelper.LABEL);
+		buf.append(JSonHelper.COLON);
+		buf.append(JSonHelper.getQuotes(label));
+		buf.append(JSonHelper.COMMA);
+
+		buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE);
+		buf.append(JSonHelper.ITEMS);
+		buf.append(JSonHelper.COLON);
+		buf.append(JSonHelper.BEGIN_BRACKET);
+		
+		for (int i = 0; i < items.size(); i++) {
+			
+			if (i > 0)
+				buf.append(JSonHelper.COMMA);
+			
+			ParseElement element = (ParseElement) items.get(i);
+			buf.append(element.toJSON(1));
+		}
+		
+		if (items.size() > 0)
+			buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE);
+		
+		buf.append(JSonHelper.END_BRACKET);
+		buf.append(JSonHelper.NEWLINE);
+		buf.append(JSonHelper.END_BRACE);
+		
+		return buf.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/SearchParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/SearchParser.java
new file mode 100644
index 0000000..f152f47
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/SearchParser.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.util.Properties;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.eclipse.help.internal.webapp.utils.XMLHelper;
+import org.xml.sax.Attributes;
+
+public class SearchParser extends ResultParser {
+
+//	private ParseElement element;
+	private Properties properties;
+	private String currentTag;
+	
+	public SearchParser() {
+		super(JSonHelper.LABEL);
+	}
+
+	public void startElement(String uri, 
+			String lname, String name, Attributes attrs) {
+		
+		currentTag = name;
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_HIT)) {
+			
+			properties = new Properties();
+			properties.put(JSonHelper.PROPERTY_NAME, name);
+			for (int i = 0; i < attrs.getLength(); i++) {
+				String qname = attrs.getQName(i);
+				String val = attrs.getValue(i);
+				properties.put(qname, val);
+			}
+			
+			String id = "" + items.size(); //$NON-NLS-1$
+			properties.put(JSonHelper.ID, id);
+			
+		} else if (name.equalsIgnoreCase(XMLHelper.ELEMENT_CATEGORY)) {
+			for (int i = 0; i < attrs.getLength(); i++) {
+				String qname = attrs.getQName(i);
+				String val = attrs.getValue(i);
+				if (qname.equalsIgnoreCase(XMLHelper.ATTR_HREF))
+					qname = XMLHelper.CATEGORY_HREF;
+				properties.put(qname, val);
+			}
+		}
+	}
+	
+	public void characters(char[] ch, int start, int length) {
+		
+		if (currentTag.equalsIgnoreCase(XMLHelper.ELEMENT_HIT) 
+				|| currentTag.equalsIgnoreCase(XMLHelper.ELEMENT_HITS))
+			return;
+		
+		if (properties != null)
+		{
+			String content = new String(ch, start, length);
+			
+			String existing = (String) properties.get(currentTag);
+			if (existing == null)
+				existing = ""; //$NON-NLS-1$
+			
+			content = content.replaceAll("[\\n\\t]", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
+			
+			properties.put(currentTag, existing + content);
+		}
+	}
+
+	public void endElement(String uri, String lname, String name) {
+
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_HIT)) {
+			ParseElement element = new ParseElement(properties);
+			items.add(element);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocFragmentParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocFragmentParser.java
new file mode 100644
index 0000000..cd5cca6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocFragmentParser.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Properties;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.eclipse.help.internal.webapp.utils.XMLHelper;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class TocFragmentParser extends ResultParser {
+
+	private Properties properties;
+	private String parentId = ""; //$NON-NLS-1$
+	private int tagLevel = -1;
+	private int level = 0;
+	
+	public TocFragmentParser() {
+		super(JSonHelper.TITLE);
+	}
+
+	public void parse(URL tocURL, int level) 
+		throws ParserConfigurationException, SAXException, IOException
+	{
+		parse(tocURL.openStream(), level);
+	}
+	
+	public void parse(InputStream in, int level) 
+		throws ParserConfigurationException, SAXException, IOException
+	{
+		this.level = level;
+		super.parse(in);
+	}
+
+	public void startElement(String uri, 
+			String lname, String name, Attributes attrs) {
+		
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_NODE) 
+				|| name.equalsIgnoreCase(XMLHelper.ELEMENT_NUMERIC_PATH)) {
+			
+			tagLevel++;
+			
+			if (tagLevel == level) {
+				properties = new Properties();
+				if (name.equalsIgnoreCase(XMLHelper.ELEMENT_NUMERIC_PATH)) {
+					setLabel(""); //$NON-NLS-1$
+					properties.put(JSonHelper.PROPERTY_NAME, JSonHelper.NUMERIC_PATH);
+				}
+				else
+					properties.put(JSonHelper.PROPERTY_NAME, JSonHelper.TOPIC);
+				
+				for (int i = 0; i < attrs.getLength(); i++) {
+					String qname = attrs.getQName(i);
+					String val = attrs.getValue(i);
+					if (qname.equals(XMLHelper.ATTR_ID)) {
+						if (parentId.length() > 0)
+							val = parentId + '$' + val;
+					}
+					properties.put(qname, val);
+				}
+			} else if (parentId.length() <= 0) {
+				for (int i = 0; i < attrs.getLength(); i++) {
+					if (attrs.getQName(i).equals(XMLHelper.ATTR_ID))
+						parentId = attrs.getValue(i);
+				}
+			}
+		}
+	}
+
+	public void endElement(String uri, String lname, String name) {
+
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_NODE) 
+				|| name.equalsIgnoreCase(XMLHelper.ELEMENT_NUMERIC_PATH))
+		{
+			if (tagLevel == level && properties != null ) {
+				
+				if (name.equalsIgnoreCase(XMLHelper.ELEMENT_NUMERIC_PATH)) {
+					properties.setProperty("id", "0"); //$NON-NLS-1$ //$NON-NLS-2$
+					properties.setProperty("type", "topic"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+				else
+					properties.setProperty("type", "toc"); //$NON-NLS-1$ //$NON-NLS-2$
+				
+				ParseElement element = new ParseElement(properties);
+				items.add(element);
+				
+				properties = null;
+			}
+			
+			tagLevel--;
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocParser.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocParser.java
new file mode 100644
index 0000000..e7a4529
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/TocParser.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.parser;
+
+import java.util.Properties;
+
+import org.eclipse.help.internal.webapp.utils.JSonHelper;
+import org.eclipse.help.internal.webapp.utils.XMLHelper;
+import org.xml.sax.Attributes;
+
+public class TocParser extends ResultParser {
+
+	private ParseElement element = null;
+
+	public TocParser() {
+		super(JSonHelper.LABEL);
+	}
+	
+	public void startElement(String uri, String lname, String name, Attributes attrs) {
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_TOC_CONTRIBUTIONS))
+			return;
+		
+		Properties properties = new Properties();
+		properties.put(JSonHelper.PROPERTY_NAME, name);
+		for (int i = 0; i < attrs.getLength(); i++) {
+			String qname = attrs.getQName(i);
+			String val = attrs.getValue(i);
+			properties.put(qname, val);
+		}
+		
+		ParseElement elem = new ParseElement(properties, element);
+		if (element != null)
+			element.addChild(elem);
+		else
+			items.add(elem);
+		
+		element = elem;
+		
+	}
+	
+	public void endElement(String uri, String lname, String name) {
+		if (name.equalsIgnoreCase(XMLHelper.ELEMENT_TOC_CONTRIBUTIONS))
+			return;
+		
+		if (element != null) {
+			element = element.getParent();
+		}		
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/AboutService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/AboutService.java
new file mode 100644
index 0000000..7365b1c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/AboutService.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import org.eclipse.help.internal.webapp.servlet.AboutServlet;
+
+/**
+ * Generates an html page having informations about either <code>User-Agent</code>,
+ * Help system <code>preferences</code> or the available plug-ins in Help system
+ * like Provider, Plugin name, Version and PluginId.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.AboutServlet}
+ * servlet.
+ * 
+ * @param show			- (Optional) specifying either <code>agent</code>
+ * 						to view the request's <code>User-Agent</code> info, else
+ * 						<code>preferences</code> to view the Help system preferences.
+ * 						Do not specify any value to show the available plugins in
+ * 						Help web application.
+ * @param sortColumn	- (Optional) specifying the column number over
+ * 						which displayed output needs to be sorted. Applicable only if
+ * 						<code>show</code> parameter is <code>null</code>. 
+ * 
+ * @return		Html page having informations about either <code>User-Agent</code>,
+ * <code>preferences</code> or the available plug-ins.
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class AboutService extends AboutServlet {
+
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/AdvancedSearchService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/AdvancedSearchService.java
new file mode 100644
index 0000000..3bce8e3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/AdvancedSearchService.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.search.SearchHit;
+import org.eclipse.help.internal.search.SearchProgressMonitor;
+import org.eclipse.help.internal.webapp.data.SearchData;
+import org.eclipse.help.internal.webapp.data.UrlUtil;
+import org.eclipse.help.internal.webapp.parser.SearchParser;
+import org.eclipse.help.internal.webapp.utils.Utils;
+import org.eclipse.help.internal.webapp.utils.SearchXMLGenerator;
+
+/**
+ * Returns the search hits in <code>xml</code> or <code>json</code>
+ * form for the query provided in the <code>searchWord</code> parameter.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to retrieve search hits
+ * from the remote help server.
+ * 
+ * <p>Internally reads {@link org.eclipse.help.internal.webapp.data.SearchData}.
+ * 
+ * @param searchWord	- specifies the search keyword
+ * @param quickSearch	- (optional) specifies if it is a quick search. Scopes
+ * 						  is just the selected toc or topic
+ * @param quickSearchType	- (optional) specifies <code>QuickSearchTopic</code> for topic
+ * 							  quick search
+ * @param scope			- (optional) specifies search scope values
+ * @param workingSet	- (optional) specifies the working set for scoped search
+ * @param maxHits		- (optional) specifies the number of hits to return, default value is 500
+ * @param fieldSearch	- (optional) specifies if field only search should be performed;
+ * 						  if set to false, default field "contents" and all other fields will be searched
+ * @param lang			- (optional) specifies the locale
+ * @param returnType	- (Optional) specifies the return type of the servlet.
+ * 						  Accepts either <code>xml</code> (default) or
+ * 						  <code>json</code>
+ * 
+ * @return		The search hits, either as <code>xml</code> (default) or
+ * 				<code>json</code>
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class AdvancedSearchService extends HttpServlet {
+	
+	private static final long serialVersionUID = 1L;
+	public static final String XID = "xid"; //$NON-NLS-1$
+	
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		
+		ServletContext context = req.getSession().getServletContext();
+		SearchData searchData = new SearchData(context, req, resp);
+		
+		String noCat = req.getParameter(Utils.NO_CATEGORY);
+		boolean boolIsCategory = (noCat == null 
+				|| !noCat.equalsIgnoreCase("true")); //$NON-NLS-1$
+		
+		String locale = UrlUtil.getLocale(req, resp);
+		SearchProgressMonitor pm = SearchProgressMonitor
+				.getProgressMonitor(locale);
+		while (!pm.isDone()) {
+			try {
+				Thread.sleep(500); // Sleep for 0.5 sec
+			} catch(InterruptedException ex) {}
+		}
+		
+		// Load search results
+		searchData.readSearchResults();
+		SearchHit[] hits = searchData.getResults();
+		
+		String response = SearchXMLGenerator.serialize(hits, boolIsCategory);
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			response = getJSONResponse(response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+	
+	protected String getJSONResponse(String response)
+			throws IOException {
+		SearchParser searchParser = new SearchParser();
+		
+		InputStream is = null;
+		try {
+			if (response != null) {
+				is = new ByteArrayInputStream(response.getBytes("UTF-8")); //$NON-NLS-1$
+				searchParser.parse(is);
+			}
+			
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+        
+        // Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return searchParser.toJSON();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContentService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContentService.java
new file mode 100644
index 0000000..e1873a6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContentService.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.net.URLConnection;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns an HTML page for the selected topic passed as request path info.
+ * 
+ * <p>Passes the request to {@link org.eclipse.help.internal.webapp.servlet.ContentServlet}
+ * servlet.
+ * 
+ * @param lang	- (optional) specifies the locale
+ * 
+ * @return		An html page for the selected topic
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class ContentService extends HttpServlet {
+
+	private static final long serialVersionUID = 1L;
+	
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		
+		String baseURL = req.getRequestURL().toString();
+		String contentURL = baseURL.replaceFirst(Utils.SERVICE_CONTEXT, ""); //$NON-NLS-1$
+		String query = req.getQueryString();
+		if (query != null)
+			contentURL += '?' + query;
+		
+		URL url = new URL(contentURL);
+		URLConnection con = url.openConnection();
+		con.setAllowUserInteraction(false);
+		con.setDoInput(true);
+		con.connect();
+		
+		String contentType;
+		ServletContext context = getServletContext();
+		String pathInfo = req.getPathInfo();
+		String mimeType = context.getMimeType(pathInfo);
+		if (mimeType != null && !mimeType.equals("application/xhtml+xml")) { //$NON-NLS-1$
+			contentType = mimeType;
+		} else {
+			contentType = con.getContentType();
+		}
+		resp.setContentType(contentType);
+		
+		InputStream is = con.getInputStream();
+		OutputStream out = resp.getOutputStream();
+		if (!contentType.equals("application/xhtml+xml")  //$NON-NLS-1$
+				&& !contentType.equals("text/html")  //$NON-NLS-1$
+				&& !con.getContentType().equals("text/html")) { //$NON-NLS-1$
+			Utils.transferContent(is, out);
+			out.flush();
+		} else {
+			String response = Utils.convertStreamToString(url.openStream());
+			response = Utils.updateResponse(response);
+			PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8")); //$NON-NLS-1$
+			writer.write(response);
+			writer.close();
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContextService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContextService.java
new file mode 100644
index 0000000..8214786
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ContextService.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.parser.ContextParser;
+import org.eclipse.help.internal.webapp.servlet.ContextServlet;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns a context help entry with the id specified in the
+ * <code>id</code> parameter in <code>xml</code> or <code>json</code> form.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to retrieve context help
+ * stored on the remote help server.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.ContextServlet}
+ * servlet.
+ * 
+ * @param id			- A <code>String</code> specifying the context id
+ * 						for the context help entry
+ * @param lang			- (optional) A <code>String</code> specifying the locale
+ * @param returnType	- (Optional) A <code>String</code> specifying the
+ * 						return type of the servlet. Accepts either
+ * 						<code>xml</code> (default) or <code>json</code>
+ * 
+ * @return		A context help entry with the id specified, either as
+ * 				<code>xml</code> (default) or <code>json</code>
+ * 
+ * @exception	400 Error - If context <code>id</code> parameter is missing
+ * @exception	404 Error - If wrong context <code>id</code> parameter
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class ContextService extends ContextServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		
+		String response = processRequest(req, resp);
+		if ("400".equals(response)) { //$NON-NLS-1$
+			resp.sendError(400); // bad request; missing parameter
+			return;
+		} else if ("404".equals(response)) { //$NON-NLS-1$
+			resp.sendError(404); // Wrong context id; not found
+			return;
+		}
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			response = getJSONResponse(response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+
+	protected String getJSONResponse(String response)
+			throws IOException {
+		ContextParser searchParser = new ContextParser();
+		InputStream is = null;
+		try {
+			if (response != null) {
+				is = new ByteArrayInputStream(response.getBytes("UTF-8")); //$NON-NLS-1$
+				searchParser.parse(is);
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+
+		// Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return searchParser.toJSON();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ControlService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ControlService.java
new file mode 100644
index 0000000..df94095
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ControlService.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import org.eclipse.help.internal.webapp.servlet.ControlServlet;
+
+/**
+ * Controls Eclipse help application from standalone application. This
+ * service do not allow remote clients to control Eclipse help application.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.ControlServlet}
+ * servlet.
+ * 
+ * @param command		- specifies the control command. Accepts the following parameters: 
+ * 						displayHelp | displayHelpWindow | shutdown
+ * 						| install | update | enable | disable | uninstall
+ * 						| search | listFeatures | addSite | removeSite
+ * 						| apply
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class ControlService extends ControlServlet {
+
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ExtensionService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ExtensionService.java
new file mode 100644
index 0000000..292e987
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/ExtensionService.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.parser.ExtensionParser;
+import org.eclipse.help.internal.webapp.servlet.ExtensionServlet;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns all topic extensions available on this host in <code>xml</code>
+ * or <code>json</code> form.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to gather all the pieces of
+ * a document.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.ExtensionServlet}
+ * servlet.
+ * 
+ * @param lang			- (optional) specifying the locale
+ * @param returnType	- (Optional) specifying the return type of the servlet.
+ * 						Accepts either <code>xml</code> (default) or
+ * 						<code>json</code>
+ * 
+ * @return		All topic extensions available on this host, either as
+ * 				<code>xml</code> (default) or <code>json</code>
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class ExtensionService extends ExtensionServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		
+		String response = processRequest(req, resp);
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			response = getJSONResponse(response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+
+	protected String getJSONResponse(String response)
+			throws IOException {
+		ExtensionParser searchParser = new ExtensionParser();
+		InputStream is = null;
+		try {
+			if (response != null) {
+				is = new ByteArrayInputStream(response.getBytes("UTF-8")); //$NON-NLS-1$
+				searchParser.parse(is);
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+
+		// Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return searchParser.toJSON();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/IndexFragmentService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/IndexFragmentService.java
new file mode 100644
index 0000000..1fae9c8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/IndexFragmentService.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.parser.IndexFragmentParser;
+import org.eclipse.help.internal.webapp.servlet.IndexFragmentServlet;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns <code>xml</code> or <code>json</code> representing selected parts
+ * of the index.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to gather selected parts of the index.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.IndexFragmentServlet}
+ * servlet.
+ * 
+ * @param start			- (optional) represents the part of the index to
+ * 						  start reading from
+ * @param size			- (optional) indicates the number of entries to read,
+ * 						  no size parameter or a negative size parameter
+ * 						  indicates that all entries which match the start
+ * 						  letters should be displayed
+ * @param mode			- (optional) specifies either <code>next</code> or
+ * 						  <code>previous</code>
+ * @param entry			- (optional) represents the starting point relative
+ * 						  to the start
+ * @param showAll		- (optional) specifies  either <code>on</code> or
+ * 						  <code>off</code> to set filter enablement of 
+ * 						  activity support
+ * @param showconfirm	- (optional) specifies <code>true</code> or
+ * 						  <code>false</code> to show/hide all confirm dialog
+ * @param lang			- (optional) specifies the locale
+ * @param returnType	- (Optional) specifies the return type of the servlet.
+ * 						  Accepts either <code>xml</code> (default) or
+ * 						  <code>json</code>
+ * 
+ * @return		Selected parts of the index, either as <code>xml</code>
+ * 				(default) or <code>json</code>
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class IndexFragmentService extends IndexFragmentServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		
+		String response = processRequest(req, resp);
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			response = getJSONResponse(response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+
+	protected String getJSONResponse(String response)
+			throws IOException {
+		IndexFragmentParser indexParser = new IndexFragmentParser();
+		InputStream is = null;
+		try {
+			if (response != null) {
+				is = new ByteArrayInputStream(response.getBytes("UTF-8")); //$NON-NLS-1$
+				indexParser.parse(is);
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+
+		// Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return indexParser.toJSON();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/IndexService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/IndexService.java
new file mode 100644
index 0000000..6c52ef6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/IndexService.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.parser.IndexParser;
+import org.eclipse.help.internal.webapp.servlet.IndexServlet;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns all available keyword index data in <code>xml</code>
+ * or <code>json</code> form. The data is sent as one large index
+ * contribution that includes all merged contributions from the system.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to gather all the index keywords
+ * and assemble them into a complete index.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.IndexServlet}
+ * servlet.
+ * 
+ * @param lang			- (optional) specifies the locale
+ * @param returnType	- (Optional) specifies the return type of the servlet.
+ * 						  Accepts either <code>xml</code> (default) or
+ * 						  <code>json</code>
+ * 
+ * @return		All available keyword index data, either as <code>xml</code>
+ * 				(default) or <code>json</code>
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class IndexService extends IndexServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		
+		String response = processRequest(req, resp);
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			response = getJSONResponse(response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+
+	protected String getJSONResponse(String response)
+			throws IOException {
+		IndexParser indexParser = new IndexParser();
+		InputStream is = null;
+		try {
+			if (response != null) {
+				is = new ByteArrayInputStream(response.getBytes("UTF-8")); //$NON-NLS-1$
+				indexParser.parse(is);
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+
+		// Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return indexParser.toJSON();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/LiveHelpService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/LiveHelpService.java
new file mode 100644
index 0000000..94f0fa6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/LiveHelpService.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import org.eclipse.help.internal.webapp.servlet.LiveHelpServlet;
+
+/**
+ * Handles the live help action requests with the specified 
+ * <code>pluginID</code>, <code>class</code> and respective <code>args</code>.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.LiveHelpServlet}
+ * servlet.
+ * 
+ * @param pluginID		- specifying the plugin id
+ * @param class			- specifying the class
+ * @param arg			- (Optional) specifying the arguments for the
+ * 						  live help extension
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class LiveHelpService extends LiveHelpServlet {
+
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/NavService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/NavService.java
new file mode 100644
index 0000000..a6ac5eb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/NavService.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.net.URL;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Generates navigation HTML page where topic is not present in the table
+ * of contents for the selected toc passed as request path info. Displays
+ * links to the direct child topics.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to generate the navigation pages.
+ * 
+ * <p>Passes the request to {@link org.eclipse.help.internal.webapp.servlet.NavServlet}
+ * servlet.
+ *  
+ * @return	An html page having the links to the direct child topics for
+ * 			the selected toc
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class NavService extends HttpServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		resp.setContentType("text/html; charset=UTF-8"); //$NON-NLS-1$
+		
+		String baseURL = req.getRequestURL().toString();
+		String navURL = baseURL.replaceFirst(Utils.SERVICE_CONTEXT, ""); //$NON-NLS-1$
+		String query = req.getQueryString();
+		if (query != null)
+			navURL += '?' + query;
+		URL url = new URL(navURL);
+		String response = Utils.convertStreamToString(url.openStream());
+		response = Utils.updateResponse(response);
+		
+		OutputStream out = resp.getOutputStream();
+		PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8")); //$NON-NLS-1$
+		writer.write(response);
+		writer.close();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/SearchService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/SearchService.java
new file mode 100644
index 0000000..4c304e3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/SearchService.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.parser.SearchParser;
+import org.eclipse.help.internal.webapp.servlet.SearchServlet;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns the search hits in <code>xml</code> or <code>json</code>
+ * form for the query provided in the <code>phrase</code> parameter.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to retrieve search hits
+ * from the remote help server.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.SearchServlet}
+ * servlet.
+ * 
+ * @param phrase		- specifies the search keyword
+ * @param lang			- (optional) specifies the locale
+ * @param returnType	- (Optional) specifies the return type of the servlet.
+ * 						  Accepts either <code>xml</code> (default) or
+ * 						  <code>json</code>
+ * 
+ * @return		The search hits, either as <code>xml</code> (default) or
+ * 				<code>json</code>
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class SearchService extends SearchServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		
+		String response = processRequest(req, resp);
+		if ("".equals(response)) { //$NON-NLS-1$
+			resp.sendError(400); // bad request; missing parameter
+			return;
+		}
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			response = getJSONResponse(response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+
+	protected String getJSONResponse(String response)
+			throws IOException {
+		SearchParser searchParser = new SearchParser();
+		InputStream is = null;
+		try {
+			if (response != null) {
+				is = new ByteArrayInputStream(response.getBytes("UTF-8")); //$NON-NLS-1$
+				searchParser.parse(is);
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+
+		// Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return searchParser.toJSON();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/SearchStateService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/SearchStateService.java
new file mode 100644
index 0000000..6183516
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/SearchStateService.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.search.SearchProgressMonitor;
+import org.eclipse.help.internal.webapp.data.UrlUtil;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns <code>xml</code> or <code>String</code> representing search progress monitor
+ * 
+ * @param lang			- (optional) specifies the locale
+ * @param returnType	- (Optional) specifies the return type of the servlet.
+ * 						  Accepts either <code>xml</code> (default) or
+ * 						  <code>json</code>
+ * 
+ * @return		Search progress monitor state, either as <code>xml</code>
+ * or <code>String</code> (default)
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class SearchStateService extends HttpServlet {
+	
+	private static final long serialVersionUID = 1L;
+	private final static String STATE = "state"; //$NON-NLS-1$
+	private final static String PERCENT = "percent"; //$NON-NLS-1$
+	
+	public void init() throws ServletException {
+	}
+
+	/**
+	 * Called by the server (via the <code>service</code> method) to allow a
+	 * Servlet to handle a GET request.
+	 */
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+
+		process(req,resp);
+	}
+
+	/**
+	 *
+	 * Called by the server (via the <code>service</code> method) to allow a
+	 * Servlet to handle a POST request.
+	 *
+	 * Handle the search requests,
+	 *
+	 */
+	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		process(req, resp);
+	}
+
+
+	/**
+	 * Processes all requests to the servlet.
+	 *
+	 */
+	private void process(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); //$NON-NLS-1$ //$NON-NLS-2$
+		resp.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		
+		int indexCompletion = 0;
+		String locale = UrlUtil.getLocale(req, resp);
+		SearchProgressMonitor pm = SearchProgressMonitor
+				.getProgressMonitor(locale);
+		if (pm.isDone()) {
+			indexCompletion = 100;
+		} else {
+			indexCompletion = pm.getPercentage();
+			if (indexCompletion >= 100) {
+				// 38573 We do not have results, so index cannot be 100
+				indexCompletion = 100 - 1;
+			}
+		}
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean isXML = Utils.XML.equalsIgnoreCase(returnType);
+		if (isXML) {
+			resp.setContentType("application/xml"); //$NON-NLS-1$
+			resp.getWriter().write(toXML(indexCompletion));
+		} else {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			resp.getWriter().write(toString(indexCompletion));
+		}
+		resp.getWriter().flush();
+	}
+	
+	public static String toXML(int percent) {
+		String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; //$NON-NLS-1$
+		xml += '<'+STATE+">\n"; //$NON-NLS-1$
+		xml += "	<"+PERCENT+'>'+percent+"</"+PERCENT+">\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		xml += "</"+STATE+">"; //$NON-NLS-1$ //$NON-NLS-2$
+		return xml;
+	}
+	
+	public static String toString(int percent) {
+		return "Percent:" + percent; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/TocFragmentService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/TocFragmentService.java
new file mode 100644
index 0000000..31befb0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/TocFragmentService.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.parser.TocFragmentParser;
+import org.eclipse.help.internal.webapp.servlet.TocFragmentServlet;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns <code>xml</code> or <code>json</code> representing selected parts
+ * of one or more TOCs  depending on the parameters.
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to gather selected parts of the TOCs.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.TocFragmentServlet}
+ * servlet.
+ * 
+ * @param topic			- (optional)
+ * @param toc			- (optional) specifies the toc id value in xml node
+ * @param expandPath	- (optional)
+ * @param anchor		- (optional)
+ * @param path			- (optional) specifies initial root path
+ * @param href			- (optional) specifies
+ * @param errorSuppress - (optional) (default) false
+ * @param lang			- (optional) specifies the locale
+ * @param returnType	- (Optional) specifies the return type of the servlet.
+ * 						  Accepts either <code>xml</code> (default) or
+ * 						  <code>json</code>
+ * 
+ * @return		The selected parts of one or more TOCs, either as <code>xml</code>
+ * (default) or <code>json</code>
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class TocFragmentService extends TocFragmentServlet {
+	
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		
+		String response = processRequest(req, resp);
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			String toc = req.getParameter("toc"); //$NON-NLS-1$
+			String path = req.getParameter("path"); //$NON-NLS-1$
+			response = getJSONResponse(toc, path, response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+	
+	protected String getJSONResponse(String toc, String path, String xmlResource)
+			throws IOException {
+		TocFragmentParser tocParser = new TocFragmentParser();
+		InputStream is = null;
+		try {
+			if (xmlResource != null) {
+	            is = new ByteArrayInputStream(xmlResource.getBytes("UTF-8")); //$NON-NLS-1$
+	            
+	            int level = 0;
+				if (toc != null && toc.length() > 0) {
+					level++;
+					
+					
+					if (path != null && path.length() > 0) {
+						String[] pathIdxs = path.split("_"); //$NON-NLS-1$
+						level += pathIdxs.length;
+					}
+				}
+				
+				tocParser.parse(is, level);
+			}
+			
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+        
+        // Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return tocParser.toJSON();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/TocService.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/TocService.java
new file mode 100644
index 0000000..67f87b6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/service/TocService.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.help.internal.webapp.parser.TocParser;
+import org.eclipse.help.internal.webapp.servlet.TocServlet;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/**
+ * Returns <code>xml</code> or <code>json</code> representing all toc contributions 
+ * available on this host
+ * 
+ * <p>This servlet is called on infocenters by client workbenches
+ * configured for remote help in order to gather all the toc fragments and assemble 
+ * them into a complete toc.
+ * 
+ * <p>Extends the {@link org.eclipse.help.internal.webapp.servlet.TocServlet}
+ * servlet.
+ * 
+ * @param lang			- (optional) specifies the locale
+ * @param returnType	- (Optional) specifies the return type of the servlet.
+ * 						  Accepts either <code>xml</code> (default) or
+ * 						  <code>json</code>
+ * 
+ * @return		Toc contributions available on the host, either as <code>xml</code>
+ * (default) or <code>json</code>
+ * 
+ * @version	$Version$
+ * 
+ **/
+public class TocService extends TocServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		
+		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+		// Set standard HTTP/1.1 no-cache headers.
+		resp.setHeader("Cache-Control",  //$NON-NLS-1$
+				"no-store, no-cache, must-revalidate"); //$NON-NLS-1$
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		
+		String response = processRequest(req, resp);
+		
+		String returnType = req.getParameter(Utils.RETURN_TYPE);
+		boolean boolIsJSON = (returnType != null 
+				&& returnType.equalsIgnoreCase(Utils.JSON));
+		
+		// If JSON output is required
+		if (boolIsJSON) {
+			resp.setContentType("text/plain"); //$NON-NLS-1$
+			response = getJSONResponse(response);
+		}
+		
+		resp.getWriter().write(response);
+	}
+
+	protected String getJSONResponse(String response)
+			throws IOException {
+		TocParser tocParser = new TocParser();
+		InputStream is = null;
+		try {
+			if (response != null) {
+				is = new ByteArrayInputStream(response.getBytes("UTF-8")); //$NON-NLS-1$
+				tocParser.parse(is);
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		if (is != null)
+			is.close();
+
+		// Call after the catch.
+		// An empty JSON is created if any Exception is thrown
+		// Else returns the complete JSON
+		return tocParser.toJSON();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ContextServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ContextServlet.java
index 1e73676..b3c28c4 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ContextServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ContextServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.help.internal.webapp.servlet;
 
 import java.io.IOException;
-import java.io.Writer;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -40,6 +39,17 @@ public class ContextServlet extends HttpServlet {
 	
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
+		String response = processRequest(req, resp);
+		if ("400".equals(response)) //$NON-NLS-1$
+			resp.sendError(400); // bad request; missing parameter
+		else if ("404".equals(response)) //$NON-NLS-1$
+			resp.sendError(404); // Wrong context id; not found
+		else
+			resp.getWriter().write(response);
+	}
+	
+	protected String processRequest(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
 		BaseHelpSystem.checkMode();
 		String locale = UrlUtil.getLocale(req, resp);
 		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
@@ -48,15 +58,13 @@ public class ContextServlet extends HttpServlet {
 		if (id != null) {
 			IContext context = getContext(locale, id);
 			if (context != null) {
-				serialize(context, resp.getWriter());
+				return serialize(context);
 			}
-			else {
-				resp.sendError(404);
-			}
-		}
-		else {
-			resp.sendError(400); // bad request; missing parameter
+			// Wrong context id; not found
+			return "404"; //$NON-NLS-1$
 		}
+		// bad request; missing parameter
+		return "400"; //$NON-NLS-1$
 	}
 
 	protected IContext getContext(String locale, String id) {
@@ -64,29 +72,34 @@ public class ContextServlet extends HttpServlet {
 		return context;
 	}
 	
-	private void serialize(IContext context, Writer out) throws IOException {
-		out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); //$NON-NLS-1$
-		out.write('<' + Context.NAME );
+	private String serialize(IContext context) throws IOException {
+		StringBuffer buff = new StringBuffer();
+		buff.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); //$NON-NLS-1$
+		buff.append('<' + Context.NAME );
 		if (context instanceof IContext2) {
 			String title = ((IContext2)context).getTitle();
 			if (title != null && title.length() > 0) {
-				out.write(" title=\"" + title + "\""); //$NON-NLS-1$ //$NON-NLS-2$			
+				buff.append(" title=\"" + title + "\""); //$NON-NLS-1$ //$NON-NLS-2$			
 			}
 		}
-		out.write(">\n"); //$NON-NLS-1$
-		out.write("   <description>" + context.getText() + "</description>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		buff.append(">\n"); //$NON-NLS-1$
+		String description = context.getText();
+		if (description != null) {
+			buff.append("   <description>" + UrlUtil.htmlEncode(description) + "</description>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		
 		IHelpResource[] topics = context.getRelatedTopics();
 		for (int i=0;i<topics.length;++i) {
-			out.write("   <" + Topic.NAME); //$NON-NLS-1$
+			buff.append("   <" + Topic.NAME); //$NON-NLS-1$
 			if (topics[i].getLabel() != null) {
-				out.write("\n         " + Topic.ATTRIBUTE_LABEL + "=\"" + topics[i].getLabel() + '"'); //$NON-NLS-1$ //$NON-NLS-2$
+				buff.append("\n         " + Topic.ATTRIBUTE_LABEL + "=\"" + topics[i].getLabel() + '"'); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 			if (topics[i].getHref() != null) {
-				out.write("\n         " + Topic.ATTRIBUTE_HREF + "=\"" + topics[i].getHref() + '"'); //$NON-NLS-1$ //$NON-NLS-2$
+				buff.append("\n         " + Topic.ATTRIBUTE_HREF + "=\"" + topics[i].getHref() + '"'); //$NON-NLS-1$ //$NON-NLS-2$
 			}
-			out.write(">\n   </topic>"); //$NON-NLS-1$
+			buff.append(">   </" + Topic.NAME + ">\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-		out.write("</" + Context.NAME + ">\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		buff.append("</" + Context.NAME + ">\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		return buff.toString();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ControlServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ControlServlet.java
index ad5aafe..f258018 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ControlServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ControlServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,8 @@ public class ControlServlet extends HttpServlet {
 	public static final String UPDATE_PLUGIN_ID = "org.eclipse.update.core"; //$NON-NLS-1$
 
 	public static final String CMD_DISPLAYHELP = "displayHelp"; //$NON-NLS-1$
+	
+	public static final String CMD_DISPLAYHELPWINDOW = "displayHelpWindow"; //$NON-NLS-1$
 
 	public static final String CMD_SHUTDOWN = "shutdown"; //$NON-NLS-1$
 
@@ -166,6 +168,11 @@ public class ControlServlet extends HttpServlet {
 			if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_STANDALONE) {
 				displayHelp(req);
 			}
+		} else if (CMD_DISPLAYHELPWINDOW.equalsIgnoreCase(command)) {
+			if (BaseHelpSystem.getMode() == BaseHelpSystem.MODE_STANDALONE) {
+				displayHelp(req);
+				HelpApplication.setShutdownOnClose(true);
+			}
 		} else if (CMD_INSTALL.equalsIgnoreCase(command)
 				|| CMD_ENABLE.equalsIgnoreCase(command)
 				|| CMD_UPDATE.equalsIgnoreCase(command)
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/CookieUtil.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/CookieUtil.java
index 45134be..af6bbe4 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/CookieUtil.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/CookieUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,30 +51,58 @@ public class CookieUtil {
 		}
 		return ret;
 	}
+
 	public static void setCookieValue(String name, String value,
 			HttpServletRequest request, HttpServletResponse response) {
 		Cookie cookie = new Cookie(name, value);
 		cookie.setMaxAge(COOKIE_LIFE);
-		cookie.setPath(getCookiePath(request)); 
+		
+		if ( needsCookiePath(request)) {
+			cookie.setPath(getCookiePath(request)); // Only set path if necessary
+		}
 		response.addCookie(cookie);
 		if (HelpWebappPlugin.DEBUG_WORKINGSETS) {
 			System.out
 					.println("CookieUtil.setCookieValue(" + name + ", " + value + ",...)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 	}
-	protected static String getCookiePath(HttpServletRequest request) {
-		String path = request.getContextPath() + '/';
-		return path;
+	
+	public static void setCookieValueWithoutPath(String name, String value,
+			HttpServletRequest request, HttpServletResponse response ) {
+		Cookie cookie = new Cookie(name, value);
+		cookie.setMaxAge(COOKIE_LIFE);
+		
+		response.addCookie(cookie);
+		if (HelpWebappPlugin.DEBUG_WORKINGSETS) {
+			System.out
+					.println("CookieUtil.setCookieValueWithoutPath(" + name + ", " + value + ",...)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+	}
+	
+	private static boolean needsCookiePath(HttpServletRequest request) {
+		// All cookies should be at the same path level as the context ( /help )
+		// The cookie path needs to be set if there are more path segments
+		// between the context path and file name
+		String requestURI = request.getRequestURI();
+		String contextPath = request.getContextPath();
+		return requestURI.indexOf('/', contextPath.length() + 1) > 0;
+	}
+	
+	private static String getCookiePath(HttpServletRequest request) {
+		return request.getContextPath() + '/';
 	}
 
 	public static void deleteCookie(String name, HttpServletRequest request, HttpServletResponse response) {
-		deleteCookieUsingPath(name, response, getCookiePath(request));
+		deleteCookieUsingPath(name, request, response, getCookiePath(request));
 	}
 	
-	protected static void deleteCookieUsingPath(String name,
+	protected static void deleteCookieUsingPath(String name, HttpServletRequest request, 
 			HttpServletResponse response, String cookiePath) {
 		Cookie cookie = new Cookie(name, ""); //$NON-NLS-1$
-		cookie.setPath(cookiePath); 
+		String requestURI = request.getRequestURI();
+		if (!(requestURI.startsWith(cookiePath) && requestURI.indexOf('/', cookiePath.length() + 1) == -1)) {
+		     cookie.setPath(cookiePath); 
+	    }
 		cookie.setMaxAge(0);
 		response.addCookie(cookie);
 	}
@@ -95,8 +123,8 @@ public class CookieUtil {
 
 			for (Iterator iter = cookiesToDelete.iterator(); iter.hasNext();) {
 				String name = (String) iter.next();
-				deleteCookieUsingPath(name, response, request.getContextPath() + "/advanced/"); //$NON-NLS-1$
-				deleteCookieUsingPath(name, response, "/"); //$NON-NLS-1$
+				deleteCookieUsingPath(name, request, response, request.getContextPath() + "/advanced/"); //$NON-NLS-1$
+				deleteCookieUsingPath(name, request, response, "/"); //$NON-NLS-1$
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java
index 26211e5..3c0b701 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/EclipseConnector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.URIUtil;
 import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.base.HelpBasePlugin;
+import org.eclipse.help.internal.base.remote.RemoteHelpInputStream;
 import org.eclipse.help.internal.base.remote.RemoteStatusData;
 import org.eclipse.help.internal.protocols.HelpURLConnection;
 import org.eclipse.help.internal.protocols.HelpURLStreamHandler;
@@ -55,12 +56,12 @@ public class EclipseConnector {
 			+ "<body><p>\n"; //$NON-NLS-1$
 	private static final String errorPageEnd = "</p></body></html>"; //$NON-NLS-1$
 	private static final IFilter allFilters[] = new IFilter[] {
-			new HighlightFilter(), new FramesetFilter(), new InjectionFilter(),
+			new HighlightFilter(), new FramesetFilter(), new InjectionFilter(false),
 			new DynamicXHTMLFilter(), new BreadcrumbsFilter(), new PluginsRootFilter(),
 			new ShowInTocFilter(), new ExtraFilters() };
 
 	private static final IFilter errorPageFilters[] = new IFilter[] {
-			new FramesetFilter(), new InjectionFilter(),
+			new FramesetFilter(), new InjectionFilter(false),
 			new DynamicXHTMLFilter() };
 
 	private ServletContext context;
@@ -93,7 +94,8 @@ public class EclipseConnector {
 			}
 			String lowerCaseuRL = url.toLowerCase(Locale.ENGLISH);
 			if (lowerCaseuRL.startsWith("jar:") //$NON-NLS-1$
-					|| lowerCaseuRL.startsWith("platform:")) { //$NON-NLS-1$
+					|| lowerCaseuRL.startsWith("platform:") //$NON-NLS-1$
+					|| (lowerCaseuRL.startsWith("file:") && UrlUtil.wasOpenedFromHelpDisplay(url))) { //$NON-NLS-1$
 				int i = url.indexOf('?');
 				if (i != -1)
 					url = url.substring(0, i);
@@ -182,7 +184,14 @@ public class EclipseConnector {
 			IFilter filters[] = pageNotFound ? errorPageFilters : allFilters;
 			if (isProcessingRequired(resp.getContentType())) {
 				for (int i = 0; i < filters.length; i++) {
-					out = filters[i].filter(req, out);
+					// condition for enabling remote css 
+					if((filters[i] instanceof InjectionFilter) && is instanceof RemoteHelpInputStream){
+						InjectionFilter ifilter = new InjectionFilter(true);
+						out=ifilter.filter(req, out);
+					}
+					else{
+						out = filters[i].filter(req, out);
+					}
 				}
 			}
 
@@ -210,6 +219,9 @@ public class EclipseConnector {
 	}
 
 	private boolean isProcessingRequired(String contentType) {
+		if (contentType.equals("application/xhtml+xml")) { //$NON-NLS-1$
+			return true;
+		}
 		if (!contentType.startsWith("text")) {  //$NON-NLS-1$
 				return false;
 	    }
@@ -231,7 +243,7 @@ public class EclipseConnector {
 		// use the context to get the mime type where possible
 		String pathInfo = req.getPathInfo();
 		String mimeType = context.getMimeType(pathInfo);
-		if (mimeType != null && !mimeType.equals("application/xhtml+xml")) { //$NON-NLS-1$
+		if (useMimeType(req, mimeType)) {
 			contentType = mimeType;
 		} else {
 			contentType = con.getContentType();
@@ -253,6 +265,17 @@ public class EclipseConnector {
 		return con;
 	}
 
+
+	private boolean useMimeType(HttpServletRequest req, String mimeType) {
+		if  ( mimeType == null ) {
+	        return false;
+        }
+        if (mimeType.equals("application/xhtml+xml") && !UrlUtil.isMozilla(req)) { //$NON-NLS-1$
+        	return false;
+        }
+        return true;
+	}
+
 	/**
 	 * Write the body to the response
 	 */
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ExtensionServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ExtensionServlet.java
index d58e929..52628b2 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ExtensionServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ExtensionServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,9 +39,15 @@ public class ExtensionServlet extends HttpServlet {
 
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
+		// set the character-set to UTF-8 before calling resp.getWriter()
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		resp.getWriter().write(processRequest(req, resp));
+	}
+	
+	protected String processRequest(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
 		String locale = UrlUtil.getLocale(req, resp);
 		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
-		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
 		
 		if (responseByLocale == null) {
 			responseByLocale = new WeakHashMap();
@@ -57,7 +63,7 @@ public class ExtensionServlet extends HttpServlet {
 			}
 			responseByLocale.put(locale, response);
 		}
-		resp.getWriter().write(response);
+		return response;
 	}
 	
 	private String serialize(ContentExtension[] extensions) throws TransformerException {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexFragmentServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexFragmentServlet.java
index ee29e3b..db713a8 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexFragmentServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexFragmentServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,6 +68,13 @@ public class IndexFragmentServlet extends HttpServlet {
 
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
+		// set the character-set to UTF-8 before calling resp.getWriter()
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		resp.getWriter().write(processRequest(req, resp));
+	}
+	
+	protected String processRequest(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
 		String locale = UrlUtil.getLocale(req, resp);
 		startParameter = req.getParameter("start"); //$NON-NLS-1$
 		if (startParameter != null) {
@@ -100,7 +107,6 @@ public class IndexFragmentServlet extends HttpServlet {
 		}
 		
 		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
-		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
 		// Cache suppression required because the set of in scope
 		// topics could change between requests
 
@@ -112,7 +118,8 @@ public class IndexFragmentServlet extends HttpServlet {
 		Serializer serializer = new Serializer(locale, scope);
 		String response = serializer.generateIndexXml();	
 		locale2Response.put(locale, response);
-		resp.getWriter().write(response);
+		
+		return response;
 	}
 	
 	/*
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexServlet.java
index 3da5a49..7ecc0d2 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/IndexServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,10 +44,16 @@ public class IndexServlet extends HttpServlet {
 
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
+		// set the character-set to UTF-8 before calling resp.getWriter()
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		resp.getWriter().write(processRequest(req, resp));
+	}
+	
+	protected String processRequest(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
 		BaseHelpSystem.checkMode();
 		String locale = UrlUtil.getLocale(req, resp);
 		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
-		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
 		
 		if (responseByLocale == null) {
 			responseByLocale = new WeakHashMap();
@@ -63,7 +69,8 @@ public class IndexServlet extends HttpServlet {
 			}
 			responseByLocale.put(locale, response);
 		}
-		resp.getWriter().write(response);
+		
+		return (response != null) ? response : ""; //$NON-NLS-1$
 	}
 		
 	public String serialize(IndexContribution[] contributions, String locale) throws TransformerException {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/InjectionFilter.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/InjectionFilter.java
index d28d669..3200397 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/InjectionFilter.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/InjectionFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,12 @@ public class InjectionFilter implements IFilter {
 	private final String NAV_CSS   = "nav_css"; //$NON-NLS-1$
 	private final String NARROW_CSS = "narrow_css"; //$NON-NLS-1$
 	private final String DISABLED_CSS = "disabled_css"; //$NON-NLS-1$
+	private final String REMOTE_CSS = "remote_css"; //$NON-NLS-1$
+	private boolean isRemote;
+	
+	public InjectionFilter( boolean isRemote ) {
+		this.isRemote = isRemote;
+	}
 	
 	/*
 	 * @see IFilter#filter(HttpServletRequest, OutputStream)
@@ -68,9 +74,13 @@ public class InjectionFilter implements IFilter {
 		} else {
 			CssUtil.addCssFiles(TOPIC_CSS, cssIncludes);
 		}
+		if(isRemote){
+			CssUtil.addCssFiles(REMOTE_CSS, cssIncludes);
+		}
 		
-		boolean enabled = isUnfiltered || isNav || HelpBasePlugin.getActivitySupport().isRoleEnabled(
-				pathInfo);
+		boolean enabled = isUnfiltered || isNav 
+		    || HelpBasePlugin.getActivitySupport().isRoleEnabled(pathInfo)
+		    || isRemote;
 		if ("/ntopic".equals(req.getServletPath())) { //$NON-NLS-1$
 			addNarrow = true;
 			CssUtil.addCssFiles(NARROW_CSS, cssIncludes);
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java
index f8beaf7..fc3d1cc 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.eclipse.help.ITopic;
 import org.eclipse.help.base.AbstractHelpScope;
 import org.eclipse.help.internal.HelpPlugin;
+import org.eclipse.help.internal.base.scope.ScopeUtils;
 import org.eclipse.help.internal.webapp.WebappResources;
 import org.eclipse.help.internal.webapp.data.RequestScope;
 import org.eclipse.help.internal.webapp.data.UrlUtil;
@@ -44,7 +45,7 @@ public class NavServlet extends HttpServlet {
 	private static final String XHTML_3 = "</body>\n</html>"; //$NON-NLS-1$
 
 	private static final IFilter filters[] = new IFilter[]{
-		new FramesetFilter(), new InjectionFilter(), new BreadcrumbsFilter(), 
+		new FramesetFilter(), new InjectionFilter(false), new BreadcrumbsFilter(), 
 		new ShowInTocFilter(), new ExtraFilters() };
 
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
@@ -108,7 +109,7 @@ public class NavServlet extends HttpServlet {
 		writer.write("<ul class=\"NavList\">\n"); //$NON-NLS-1$
 		ITopic[] subtopics = topic.getSubtopics();
 		for (int i=0;i<subtopics.length;++i) {
-			if (scope.inScope(subtopics[i])) {
+			if (ScopeUtils.showInTree(subtopics[i], scope)) {
 				writer.write("<li><a href=\""); //$NON-NLS-1$
 				String href = subtopics[i].getHref();
 				if (href == null) {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/SearchServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/SearchServlet.java
index b51e8ce..fe9d253 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/SearchServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/SearchServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 
 import javax.servlet.ServletException;
@@ -27,10 +26,10 @@ import org.eclipse.help.internal.base.BaseHelpSystem;
 import org.eclipse.help.internal.search.ISearchHitCollector;
 import org.eclipse.help.internal.search.ISearchQuery;
 import org.eclipse.help.internal.search.QueryTooComplexException;
-import org.eclipse.help.internal.search.SearchHit;
 import org.eclipse.help.internal.search.SearchQuery;
 import org.eclipse.help.internal.util.URLCoder;
 import org.eclipse.help.internal.webapp.data.UrlUtil;
+import org.eclipse.help.internal.webapp.utils.SearchXMLGenerator;
 
 /*
  * Returns the search hits for the query provided in the phrase parameter.
@@ -40,11 +39,9 @@ import org.eclipse.help.internal.webapp.data.UrlUtil;
  */
 public class SearchServlet extends HttpServlet {
 	
-	private static final long serialVersionUID = 1L;
-	private static final String PARAMETER_PHRASE = "phrase"; //$NON-NLS-1$
-	private Collection results = new ArrayList();
-	private QueryTooComplexException searchException;
-	private ISearchHitCollector collector = new ISearchHitCollector() {
+	private final class HitCollector implements ISearchHitCollector {
+		public Collection results = new ArrayList();
+
 		public void addHits(List hits, String wordsSearched) {
 			if (results != null) {
 				results.addAll(hits);
@@ -55,68 +52,42 @@ public class SearchServlet extends HttpServlet {
 				throws QueryTooComplexException {
 			searchException = exception;			
 		}
-	};
+	}
+
+	private static final long serialVersionUID = 1L;
+	private static final String PARAMETER_PHRASE = "phrase"; //$NON-NLS-1$
+	private QueryTooComplexException searchException;
 	
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
+		String response = processRequest(req, resp);
+		if ("".equals(response)) //$NON-NLS-1$
+			resp.sendError(400); // bad request; missing parameter
+		else
+			resp.getWriter().write(response);
+	}
+	
+	protected String processRequest(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
 		BaseHelpSystem.checkMode();
+		HitCollector collector = new HitCollector();
 		String locale = UrlUtil.getLocale(req, resp);
 		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
 		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
-		String phrase = req.getParameter(PARAMETER_PHRASE); 
+		String phrase = req.getParameter(PARAMETER_PHRASE);
 		if (phrase != null) {
 		    phrase = URLCoder.decode(phrase);
 			ISearchQuery query = new SearchQuery(phrase, false, Collections.EMPTY_LIST, locale);
-			results.clear();
+			collector.results.clear();
 			BaseHelpSystem.getSearchManager().search(query, collector, new NullProgressMonitor());
 			if (searchException == null) {
-				String response = serialize(results);
-				resp.getWriter().write(response);
-				return;
+				return serialize(collector.results);
 			}
 		}
-
-		resp.sendError(400); // bad request; missing parameter
-
+		return ""; //$NON-NLS-1$
 	}
 	
 	public static String serialize(Collection results) {
-		StringBuffer buf = new StringBuffer();
-		buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); //$NON-NLS-1$
-		buf.append("<searchHits>\n"); //$NON-NLS-1$
-		Iterator iter = results.iterator();
-		while (iter.hasNext()) {
-			SearchHit hit = (SearchHit)iter.next();
-			serialize(hit, buf, "   "); //$NON-NLS-1$
-		}
-		buf.append("</searchHits>\n"); //$NON-NLS-1$
-		return buf.toString();
-	}
-	
-	private static void serialize(SearchHit hit, StringBuffer buf, String indent) {
-		buf.append(indent + "<hit"); //$NON-NLS-1$
-		if (hit.getHref() != null) {
-			buf.append('\n' + indent	+ "      href=\"" + XMLGenerator.xmlEscape(hit.getHref()) + '"'); //$NON-NLS-1$
-		}
-		if (hit.getLabel() != null) {
-			buf.append('\n' + indent	+ "      label=\"" + XMLGenerator.xmlEscape(hit.getLabel()) + '"'); //$NON-NLS-1$
-		}
-		if (hit.isPotentialHit()) {
-			buf.append('\n' + indent	+ "      isPotentialHit=\"true\""); //$NON-NLS-1$
-		}
-		buf.append('\n' + indent + "      score=\"" + hit.getScore() + '"'); //$NON-NLS-1$
-		buf.append(">\n"); //$NON-NLS-1$
-		
-		String summary = hit.getSummary();
-		if (summary != null) {
-			serialize(summary, buf, indent + "   "); //$NON-NLS-1$
-		}
-		buf.append(indent + "</hit>\n"); //$NON-NLS-1$
-	}
-
-	private static void serialize(String summary, StringBuffer buf, String indent) {
-		buf.append(indent + "<summary>"); //$NON-NLS-1$
-		buf.append(XMLGenerator.xmlEscape(summary));
-		buf.append("</summary>\n"); //$NON-NLS-1$
+		return SearchXMLGenerator.serialize(results);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ServletPrintWriter.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ServletPrintWriter.java
new file mode 100644
index 0000000..e0a6db4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ServletPrintWriter.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.servlet;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+
+public class ServletPrintWriter extends PrintWriter{
+
+	private StringBuffer buffer;
+	
+	public ServletPrintWriter() {
+		super(new ByteArrayOutputStream());
+		buffer = new StringBuffer();
+	}
+	
+    /**
+     * Writes a single character.
+     * @param c int specifying a character to be written.
+     */
+    public void write(int c) {
+	    synchronized (lock) {
+	    	buffer.append((char)(c));
+	    }
+    }
+
+    /**
+     * Writes A Portion of an array of characters.
+     * @param buf Array of characters
+     * @param off Offset from which to start writing characters
+     * @param len Number of characters to write
+     */
+    public void write(char buf[], int off, int len) {
+	    synchronized (lock) {
+	    	buffer.append(buf, off, len);
+	    }
+    }
+
+    /**
+     * Writes an array of characters.  This method cannot be inherited from the
+     * Writer class because it must suppress I/O exceptions.
+     * @param buf Array of characters to be written
+     */
+    public void write(char buf[]) {
+    	write(buf, 0, buf.length);
+    }
+
+    /**
+     * Writes a portion of a string.
+     * @param s A String
+     * @param off Offset from which to start writing characters
+     * @param len Number of characters to write
+     */
+    public void write(String s, int off, int len) {
+	    synchronized (lock) {
+	    	buffer.append(s.toCharArray(), off, off+len);
+	    }
+    }
+
+    /**
+     * Writes a string.  This method cannot be inherited from the Writer class
+     * because it must suppress I/O exceptions.
+     * @param s String to be written
+     */
+    public void write(String s) {
+	write(s, 0, s.length());
+    }
+	
+    public String toString()
+    {
+    	return buffer.toString();
+    }
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocFragmentServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocFragmentServlet.java
index 4b60132..5650ec3 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocFragmentServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocFragmentServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,9 +46,15 @@ public class TocFragmentServlet extends HttpServlet {
 
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
+		// set the character-set to UTF-8 before calling resp.getWriter()
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		resp.getWriter().write(processRequest(req, resp));
+	}
+	
+	protected String processRequest(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
 		String locale = UrlUtil.getLocale(req, resp);
 		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
-		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
 	    resp.setHeader("Cache-Control","no-cache");   //$NON-NLS-1$//$NON-NLS-2$
 	    resp.setHeader("Pragma","no-cache");  //$NON-NLS-1$ //$NON-NLS-2$
 	    resp.setDateHeader ("Expires", 0); 	 //$NON-NLS-1$
@@ -57,10 +63,11 @@ public class TocFragmentServlet extends HttpServlet {
 		readParameters(req);
 		
 		AbstractHelpScope scope = RequestScope.getScope(req, resp, false);
-		Serializer serializer = new Serializer(data, req.getLocale(), scope);
+		Serializer serializer = new Serializer(data, UrlUtil.getLocaleObj(req, resp), scope);
 		String response = serializer.generateTreeXml();	
 		locale2Response.put(locale, response);
-		resp.getWriter().write(response);
+		
+		return response;
 	}
 
 	private void readParameters(HttpServletRequest req) {
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocServlet.java
index 4e99944..5421cdb 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocServlet.java
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/TocServlet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,13 +41,25 @@ public class TocServlet extends HttpServlet {
 	private static final long serialVersionUID = 1L;
 	private Map responseByLocale;
 	private DocumentWriter writer;
-
+	private static boolean clearCache;
+	
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
+		// set the character-set to UTF-8 before calling resp.getWriter()
+		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		resp.getWriter().write(processRequest(req, resp));
+	}
+
+	protected String processRequest(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
 		BaseHelpSystem.checkMode();
 		String locale = UrlUtil.getLocale(req, resp);
 		req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
-		resp.setContentType("application/xml; charset=UTF-8"); //$NON-NLS-1$
+		
+		if (clearCache){
+			responseByLocale = new WeakHashMap();
+			clearCache = false;
+		}
 		
 		if (responseByLocale == null) {
 			responseByLocale = new WeakHashMap();
@@ -63,7 +75,8 @@ public class TocServlet extends HttpServlet {
 			}
 			responseByLocale.put(locale, response);
 		}
-		resp.getWriter().write(response);
+		
+		return (response != null) ? response : ""; //$NON-NLS-1$
 	}
 		
 	protected String serialize(TocContribution[] contributions, String locale) throws TransformerException {
@@ -97,4 +110,9 @@ public class TocServlet extends HttpServlet {
 		buf.append("</tocContributions>\n"); //$NON-NLS-1$
 		return buf.toString();
 	}
+	
+	public static void clearCache()
+	{
+		clearCache = true;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ValidatorServlet.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ValidatorServlet.java
new file mode 100644
index 0000000..30be71f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/ValidatorServlet.java
@@ -0,0 +1,274 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.servlet;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Locale;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.help.internal.webapp.HelpWebappPlugin;
+import org.eclipse.help.internal.webapp.WebappResources;
+import org.eclipse.help.internal.webapp.data.UrlUtil;
+import org.eclipse.help.internal.webapp.utils.Utils;
+
+/*
+ * Class is responsible for implementing security protection.  All servlets
+ * who use the org.eclipse.help.webapp.validatedServlet extension point will
+ * will be processed for security failures by this class.
+ * 
+ * Any URL that starts with <path>/vs<etc> will be redirected here for further
+ * processing.  If the validatedServlet extension point has an alias that 
+ * matches the URL passed here, it will finish the processing and return 
+ * results here for validation.  If there are no malicious threats detected,
+ * this class will return the output to the client.
+ *
+ */
+public class ValidatorServlet extends HttpServlet {
+
+	private static final long serialVersionUID = -3783758607845176051L;
+	private Hashtable servletTable = new Hashtable();
+	
+	protected void process(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+
+		String baseURL = req.getRequestURL().toString();		
+		baseURL = baseURL.substring(0, baseURL.indexOf(req.getServletPath()));
+		
+		Locale locale = UrlUtil.getLocaleObj(req,resp);
+
+		String service = req.getRequestURL().toString().substring(
+				(baseURL).length()+("/vs".length())); //$NON-NLS-1$
+		
+		try {
+			HttpServletResponseAdv response = new HttpServletResponseAdv(resp);
+			
+			HttpServlet servlet = getServlet(service);
+			ServletConfig config = getServletConfig();
+			servlet.init(config);
+			servlet.service(req, response);
+			
+			if (isSecure(req, response))
+				response.commitOutput();
+			
+		} catch(Exception ex) {
+			
+			String errorMsg = WebappResources.getString("cantCreateServlet", //$NON-NLS-1$
+					locale, service);
+			HelpWebappPlugin.logError(errorMsg, ex);
+			
+			PrintWriter writer = resp.getWriter();
+			writer.println(errorMsg);
+			ex.printStackTrace(writer);
+			
+			resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+		}
+	}
+	
+	private HttpServlet getServlet(String name) 
+			throws CoreException {
+		
+		HttpServlet servlet = (HttpServlet)servletTable.get(name);
+		
+		if (servlet == null) {
+			
+			IConfigurationElement[] configs = 
+				Platform.getExtensionRegistry().getConfigurationElementsFor(HelpWebappPlugin.PLUGIN_ID+".validatedServlet"); //$NON-NLS-1$
+			
+			for (int c=0; c < configs.length; c++) {
+				
+				String alias = configs[c].getAttribute("alias"); //$NON-NLS-1$
+				if (alias != null) {
+					
+					if (isMatch(alias, name)) {
+						servlet = (HttpServlet)configs[c].createExecutableExtension("class"); //$NON-NLS-1$
+						servletTable.put(name, servlet);
+						break;
+					}
+				}
+			}
+		}
+		
+		return servlet;
+	}
+	
+	private boolean isMatch(String alias, String name) {
+		
+		int index = name.indexOf(alias);
+		if (index == 0) {
+			int offset = alias.length();
+			if (name.length() == offset)
+				return true;
+			char ch = name.charAt(offset);
+			if (ch == '/' || ch == '?')
+				return true;
+		}
+		return false;
+	}
+
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		process(req, resp);
+	}
+	
+	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		process(req, resp);
+	}
+	
+	public boolean isSecure(HttpServletRequest req,HttpServletResponseAdv resp) 
+			throws SecurityException {
+		
+		Enumeration names = req.getParameterNames();
+		List values = new ArrayList();
+		List scripts = new ArrayList();
+		
+		while (names.hasMoreElements()) {
+			
+			String name = (String)names.nextElement();
+			String val = req.getParameter(name);
+			values.add(val);
+			if (replaceAll(val, '+', "").indexOf("<script")>-1) //$NON-NLS-1$ //$NON-NLS-2$
+				scripts.add(val);
+		}
+		
+		if (resp.getWriter() != null) {
+			
+			String data = resp.getString();
+			for (int s=0; s < scripts.size(); s++)
+				if (data.indexOf((String)scripts.get(s)) > -1)
+					throw new SecurityException("Potential cross-site scripting detected."); //$NON-NLS-1$
+		}
+		
+		return true;
+	}
+
+	public void isScript(List params,OutputStream out) {
+		
+//		ByteArrayOutputStream bOut = new ByteArrayOutputStream(out);
+	}
+
+	
+	public String replaceAll(String str, char remove, String add) {
+		
+		StringBuffer buffer = new StringBuffer();
+		for (int s=0; s < str.length(); s++) {
+			
+			char ch = str.charAt(s);
+			if (ch == remove)
+				buffer.append(add);
+			else
+				buffer.append(ch);
+		}
+		return buffer.toString();
+	}
+	
+	private class HttpServletResponseAdv extends HttpServletResponseWrapper {
+		
+		private HttpServletResponse response;
+		private ByteArrayOutputStream out;
+		private ServletPrintWriter writer;
+		private SecureServletOutputStream stream;
+		
+		public HttpServletResponseAdv(HttpServletResponse response) {
+			super(response);
+			out = new ByteArrayOutputStream();
+			this.response = response;
+		}
+
+		public PrintWriter getWriter() {
+			
+			if (writer == null && stream == null)
+				writer = new ServletPrintWriter();
+			return writer;
+		}
+		
+		public ServletOutputStream getOutputStream() {
+			
+			if (stream == null && writer == null)
+				stream = new SecureServletOutputStream(out);
+			return stream;
+		}
+		
+		public void commitOutput() throws IOException {
+			
+			OutputStream os = response.getOutputStream();
+			InputStream is = getInputStream();
+			
+			Utils.transferContent(is, os);
+			
+			os.flush();
+		}
+		
+		public InputStream getInputStream() {
+			
+			if (stream != null) {
+			
+				try {
+					out.flush();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				return new ByteArrayInputStream(out.toByteArray());
+			}
+			if (writer != null) {
+				
+				try {
+					return new ByteArrayInputStream(writer.toString().getBytes(getCharacterEncoding()));
+				} catch (UnsupportedEncodingException e) {
+					e.printStackTrace();
+				}
+			}
+			return null;
+		}
+		
+		public String getString() {
+			
+			if (writer != null)
+				return writer.toString();
+			
+			return null;
+		}
+	}
+	
+	
+	private class SecureServletOutputStream extends ServletOutputStream {
+
+		private OutputStream out;
+
+		public SecureServletOutputStream(OutputStream out) {
+			this.out = out;
+		}
+		
+		public void write(int b) throws IOException {
+			out.write(b);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/JSonHelper.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/JSonHelper.java
new file mode 100644
index 0000000..a59ff8b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/JSonHelper.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.utils;
+
+public final class JSonHelper {
+	
+	//JSON Characters
+	public static final String BEGIN_BRACE = "{"; //$NON-NLS-1$
+	public static final String END_BRACE  = "}"; //$NON-NLS-1$
+	public static final String QUOTE  = "\'"; //$NON-NLS-1$
+	public static final String COLON  = ":"; //$NON-NLS-1$
+	public static final String BEGIN_BRACKET  = "["; //$NON-NLS-1$
+	public static final String END_BRACKET  =   "]"; //$NON-NLS-1$
+	public static final String COMMA  =   ","; //$NON-NLS-1$
+	public static final String NEWLINE  =   "\n"; //$NON-NLS-1$
+	public static final String SPACE  =   "   "; //$NON-NLS-1$
+	
+	//JSON items
+	public static final String LABEL			= "label"; //$NON-NLS-1$
+	public static final String IDENTIFIER		= "identifier"; //$NON-NLS-1$
+	public static final String URL				= "url"; //$NON-NLS-1$
+	public static final String PROVIDER			= "provider"; //$NON-NLS-1$
+	public static final String ITEMS			= "items"; //$NON-NLS-1$
+	public static final String NAME				= "name"; //$NON-NLS-1$
+	public static final String TITLE			= "title"; //$NON-NLS-1$
+	public static final String ID				= "id"; //$NON-NLS-1$
+	public static final String HREF				= "href"; //$NON-NLS-1$
+	public static final String TYPE				= "type"; //$NON-NLS-1$
+	public static final String CHECKED			= "checked"; //$NON-NLS-1$
+	public static final String CHILDREN			= "children"; //$NON-NLS-1$
+	public static final String REFERENCE		= "_reference"; //$NON-NLS-1$
+	public static final String IS_LEAF			= "is_leaf"; //$NON-NLS-1$
+	public static final String IS_SELECTED		= "is_selected"; //$NON-NLS-1$
+	public static final String IS_HIGHLIGHTED	= "is_highlighted"; //$NON-NLS-1$
+	public static final String TOC				= "toc"; //$NON-NLS-1$
+	public static final String PATH				= "path"; //$NON-NLS-1$
+	public static final String CATEGORY			= "category"; //$NON-NLS-1$
+	public static final String DESCRIPTION		= "description"; //$NON-NLS-1$
+	public static final String CATEGORY_HREF	= CATEGORY+"_"+HREF; //$NON-NLS-1$
+	public static final String PROPERTY_NAME	= "propertyName"; //$NON-NLS-1$
+	public static final String INDEX			= "Index"; //$NON-NLS-1$
+	public static final String TOPIC			= "Topic"; //$NON-NLS-1$
+	public static final String NUMERIC_PATH		= "NumericPath"; //$NON-NLS-1$
+	
+	public static String getQuotes(String str){
+		return ((str != null)?QUOTE + str + QUOTE:""); //$NON-NLS-1$
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/SearchXMLGenerator.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/SearchXMLGenerator.java
new file mode 100644
index 0000000..cd86bc6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/SearchXMLGenerator.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.utils;
+
+import java.util.Collection;
+
+import org.eclipse.help.HelpSystem;
+import org.eclipse.help.IHelpResource;
+import org.eclipse.help.IToc;
+import org.eclipse.help.ITopic;
+import org.eclipse.help.internal.search.SearchHit;
+import org.eclipse.help.internal.webapp.data.UrlUtil;
+import org.eclipse.help.internal.webapp.servlet.XMLGenerator;
+
+public class SearchXMLGenerator  {
+
+	public static String serialize(Collection results) {
+		return serialize((results != null) ? results.toArray() : null, false);
+	}
+	
+	public static String serialize(Object[] hits, boolean boolIsCategory) {
+		StringBuffer buf = new StringBuffer();
+		buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); //$NON-NLS-1$
+		buf.append("<searchHits>\n"); //$NON-NLS-1$
+		
+		if (hits != null) {
+			for (int i = 0; i < hits.length; i++) {
+				SearchHit hit = (SearchHit) hits[i];
+				serialize(hit, buf, "   ", boolIsCategory); //$NON-NLS-1$
+			}
+		}
+		
+		buf.append("</searchHits>\n"); //$NON-NLS-1$
+		
+		return buf.toString();
+	}
+	
+	private static void serialize(SearchHit hit, StringBuffer buf, 
+			String indent, boolean boolIsCategory) {
+		buf.append(indent + "<hit"); //$NON-NLS-1$
+		if (hit.getHref() != null) {
+			buf.append('\n' + indent	+ "      href=\"" + XMLGenerator.xmlEscape(hit.getHref()) + '"'); //$NON-NLS-1$
+		}
+		if (hit.getLabel() != null) {
+			buf.append('\n' + indent	+ "      label=\"" + XMLGenerator.xmlEscape(hit.getLabel()) + '"'); //$NON-NLS-1$
+		}
+		if (hit.isPotentialHit()) {
+			buf.append('\n' + indent	+ "      isPotentialHit=\"true\""); //$NON-NLS-1$
+		}
+		buf.append('\n' + indent + "      score=\"" + hit.getScore() + '"'); //$NON-NLS-1$
+		buf.append(">\n"); //$NON-NLS-1$
+		
+		// get Category
+		if (boolIsCategory) {
+			IHelpResource categoryResource = hit.getCategory();
+			if (categoryResource != null) {
+				serializeCategory(categoryResource, buf, indent + "  "); //$NON-NLS-1$
+			}
+		}
+		
+		// get Summary/Description
+		String summary = hit.getSummary();
+		if (summary != null) {
+			serialize(summary, buf, indent + "   "); //$NON-NLS-1$
+		}
+		buf.append(indent + "</hit>\n"); //$NON-NLS-1$
+	}
+
+	private static void serialize(String summary, StringBuffer buf, String indent) {
+		buf.append(indent + "<summary>"); //$NON-NLS-1$
+		buf.append(XMLGenerator.xmlEscape(summary));
+		buf.append("</summary>\n"); //$NON-NLS-1$
+	}
+	
+	private static void serializeCategory(IHelpResource categoryResource, 
+			StringBuffer buf, String indent) {
+		String category = categoryResource.getLabel();
+		if (category == null) return;
+		
+		buf.append(indent + "<category"); //$NON-NLS-1$
+		
+		String catHref = getCategoryHref(categoryResource);
+		if (catHref != null) {
+			buf.append('\n' + indent	+ "      href=\""  //$NON-NLS-1$
+					+ XMLGenerator.xmlEscape(catHref) + '"');
+		}
+		
+		buf.append(">\n"); //$NON-NLS-1$
+		buf.append(XMLGenerator.xmlEscape(category));
+		
+		buf.append("</category>\n"); //$NON-NLS-1$
+	}
+	
+	private static String getCategoryHref(IHelpResource categoryResource) {
+		String tocHref = categoryResource.getHref();
+		IToc[] tocs = HelpSystem.getTocs();
+		for (int j=0;j<tocs.length;++j) {
+			if (tocHref.equals(tocs[j].getHref())) {
+				ITopic topic = tocs[j].getTopic(null);
+				String topicHref = topic.getHref();
+				if (topicHref != null) {
+					return UrlUtil.getHelpURL(topicHref);
+				}
+				return "../nav/" + j; //$NON-NLS-1$
+			}
+		}
+		return null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/Utils.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/Utils.java
new file mode 100644
index 0000000..f07d767
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/Utils.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.utils;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+public class Utils {
+
+	public static final String SERVICE_CONTEXT 		= "/vs/service"; //$NON-NLS-1$
+	
+	public static final String RETURN_TYPE 			= "returnType"; //$NON-NLS-1$
+	public static final String NO_CATEGORY 			= "noCategory"; //$NON-NLS-1$
+
+	// returnType values: xml (default) | json
+	public static final String XML 					= "xml"; //$NON-NLS-1$
+	public static final String JSON 				= "json"; //$NON-NLS-1$
+	
+	public static String convertStreamToString(InputStream is)
+			throws IOException {
+		if (is != null) {
+			Writer writer = new StringWriter();
+			char[] buffer = new char[1024];
+			try {
+				Reader reader = new BufferedReader(
+						new InputStreamReader(is, "UTF-8")); //$NON-NLS-1$
+				int n;
+				while ((n = reader.read(buffer)) != -1) {
+					writer.write(buffer, 0, n);
+				}
+			} finally {
+				is.close();
+			}
+			return writer.toString();
+		} else {
+			return ""; //$NON-NLS-1$
+		}
+	}
+	
+	public static void transferContent(InputStream inputStream, OutputStream out)
+			throws IOException {
+		try {
+			// Prepare the input stream for reading
+			BufferedInputStream dataStream = new BufferedInputStream(
+					inputStream);
+
+			// Create a fixed sized buffer for reading.
+			// We could create one with the size of available data...
+			byte[] buffer = new byte[4096];
+			int len = 0;
+			while (true) {
+				len = dataStream.read(buffer); // Read file into the byte array
+				if (len == -1)
+					break;
+				out.write(buffer, 0, len);
+			}
+		} catch (Exception e) {
+		}
+	}
+
+	public static String updateResponse(String response) {
+		response = removeString(response, "advanced/synchWithToc.js"); //$NON-NLS-1$
+		response = removeString(response, "index.jsp"); //$NON-NLS-1$
+		return response;
+	}
+	
+	private static String removeString(String response, String remove) {
+		StringBuffer buff = new StringBuffer(response);
+		int index = buff.indexOf(remove);
+		if (index > -1) {
+			int start = buff.lastIndexOf("<script", index); //$NON-NLS-1$
+			int end = buff.indexOf("</script>", index); //$NON-NLS-1$
+			if (start > -1 && end > -1 && start < end) {
+				buff.delete(start, end + "</script>".length()); //$NON-NLS-1$
+			}
+		}
+		return buff.toString();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/XMLHelper.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/XMLHelper.java
new file mode 100644
index 0000000..b8513a4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/XMLHelper.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.internal.webapp.utils;
+
+public final class XMLHelper {
+
+	public static final String SESSION_URL				= "helpURL"; //$NON-NLS-1$
+	
+	public static final String URL36_PREFIX				= "/advanced"; //$NON-NLS-1$
+	public static final String TOC_URL					= "/tocfragment"; //$NON-NLS-1$
+	public static final String SEARCH_URL				= "/search"; //$NON-NLS-1$
+	
+	public static final String ATTR_TITLE				= "title"; //$NON-NLS-1$
+	public static final String ATTR_ID					= "id"; //$NON-NLS-1$
+	public static final String ATTR_HREF				= "href"; //$NON-NLS-1$
+	public static final String ATTR_IMAGE				= "image"; //$NON-NLS-1$
+	public static final String ATTR_LABEL				= "label"; //$NON-NLS-1$
+	public static final String ATTR_SCORE				= "score"; //$NON-NLS-1$
+	public static final String ATTR_LOCALE				= "locale"; //$NON-NLS-1$
+	public static final String ATTR_KEYWORD				= "keyword"; //$NON-NLS-1$
+	
+	public static final String ELEMENT_NODE				= "node"; //$NON-NLS-1$
+	public static final String ELEMENT_HIT				= "hit"; //$NON-NLS-1$
+	public static final String ELEMENT_HITS				= "searchHits"; //$NON-NLS-1$
+	public static final String ELEMENT_CATEGORY			= "category"; //$NON-NLS-1$
+	public static final String ELEMENT_SUMMARY			= "summary"; //$NON-NLS-1$
+	public static final String ELEMENT_DESCRIPTION		= "description"; //$NON-NLS-1$
+	public static final String ELEMENT_INDEX			= "index"; //$NON-NLS-1$
+	public static final String ELEMENT_INDEX_CONTRIBUTIONS	= "indexContributions"; //$NON-NLS-1$
+	public static final String ELEMENT_TOC_CONTRIBUTIONS	= "tocContributions"; //$NON-NLS-1$
+	public static final String ELEMENT_NUMERIC_PATH			= "numeric_path"; //$NON-NLS-1$
+	
+	public static final String CATEGORY_HREF			= "categoryHref"; //$NON-NLS-1$
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/webapp/TocSystem.java b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/webapp/TocSystem.java
new file mode 100644
index 0000000..dfd1b6a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.help.webapp/src/org/eclipse/help/webapp/TocSystem.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.help.webapp;
+
+import org.eclipse.help.internal.webapp.servlet.TocServlet;
+
+/**
+ * Class for administering the Toc system.
+ * 
+ * @since 3.6
+ */
+public class TocSystem {
+
+	/**
+	 * Use this method to invalidate the currently cached Toc.
+	 * The next call for a Toc will result in a newly generated
+	 * table of contents.
+	 * 
+	 */
+	public static void clearCache()
+	{
+		TocServlet.clearCache();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.help.webapp/web-archive/help/WEB-INF/web.xml b/eclipse/plugins/org.eclipse.help.webapp/web-archive/help/WEB-INF/web.xml
index ef94b2a..9a1de7e 100644
--- a/eclipse/plugins/org.eclipse.help.webapp/web-archive/help/WEB-INF/web.xml
+++ b/eclipse/plugins/org.eclipse.help.webapp/web-archive/help/WEB-INF/web.xml
@@ -1,4 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
      Copyright (c) 2005, 2008 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
diff --git a/eclipse/plugins/org.eclipse.help/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.help/META-INF/MANIFEST.MF
index 6d94edc..0e29f69 100644
--- a/eclipse/plugins/org.eclipse.help/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.help/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %help_plugin_name
 Bundle-SymbolicName: org.eclipse.help; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Activator: org.eclipse.help.internal.HelpPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.apt.core/.settings/org.eclipse.jdt.core.prefs
index f6b5b71..42acce8 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Thu Sep 21 15:26:59 PDT 2006
+#Wed Feb 02 12:04:31 EST 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -8,6 +16,7 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -64,3 +73,5 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.apt.core/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..bb80654
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 12:04:31 EST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
index e8d8521..c10d20c 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.apt.core; singleton:=true
-Bundle-Version: 3.3.402.qualifier
+Bundle-Version: 3.3.500.qualifier
 Bundle-Localization: plugin
 Export-Package: com.sun.mirror.apt,
  com.sun.mirror.declaration,
@@ -21,7 +21,7 @@ Export-Package: com.sun.mirror.apt,
 Require-Bundle: org.eclipse.jdt.core;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.100,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.6.0,4.0.0)",
- org.apache.ant;bundle-version="[1.6.5,1.8)"
+ org.apache.ant;bundle-version="1.6.5"
 Bundle-Activator: org.eclipse.jdt.apt.core.internal.AptPlugin
 Bundle-Vendor: %providerName
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html b/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html
index c5d44e3..287daaf 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/build_notes.html
@@ -11,19 +11,26 @@
 
 <h1>Eclipse Platform Build Notes (3.6)<br>
 JDT Annotation Processing</h1>
+
+<p>Integration Build (March 05, 2011, 11:48 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338370">Bug 338370</a>. NPE in BatchFilerImpl.getResource (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338625">Bug 338625</a>. 23 compile warnings in official build (FIXED)<br>
+  </p>
 <p>Integration Build (January 20, 2011)</p>
   <p>Problem reports updated</p>
   <p>
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301894">Bug 301894</a>. OutOfMemory error when building a large project with annotations<br>
   </p>
 
-<p>Integration Build (July 26, 2010, 11:09 p.m.)</p>
+<p>Integration Build (July 26, 2010, 11:03 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320195">Bug 320195</a>. Eclipse hangs when processing annotation (FIXED)<br>
   </p>
 
-<p>Integration Build (July 06, 2010, 9:58 p.m.)</p>
+<p>Integration Build (July 06, 2010, 10:04 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313324">Bug 313324</a>. Suspicious fall-through (NEW)<br>
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/scripts/make_set_date_suffix_cmd.sh b/eclipse/plugins/org.eclipse.jdt.apt.core/scripts/make_set_date_suffix_cmd.sh
old mode 100755
new mode 100644
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/APTDispatchRunnable.java b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/APTDispatchRunnable.java
index 145fb20..d827cf5 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/APTDispatchRunnable.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/APTDispatchRunnable.java
@@ -121,7 +121,7 @@ public class APTDispatchRunnable implements IWorkspaceRunnable
 	
 	static {
 		String setting = System.getProperty(SPLIT_FILES_PROPERTY);
-		SPLIT_FILES = setting != null && setting.equalsIgnoreCase("true"); //$NON-NLS-1$
+		SPLIT_FILES = setting == null || setting.equalsIgnoreCase("true"); //$NON-NLS-1$
 	}
 	
 	public static Set<AnnotationProcessorFactory> runAPTDuringBuild(
@@ -286,6 +286,7 @@ public class APTDispatchRunnable implements IWorkspaceRunnable
 						_aptProject.getJavaProject(),
 						buildCallback);
 			} else {
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=301894
 				for (int index = 0; index < _filesWithAnnotation.length;) {
 					int numberToProcess = (index + MAX_FILES_PER_ITERATION) > _filesWithAnnotation.length ? _filesWithAnnotation.length - index : MAX_FILES_PER_ITERATION;
 					BuildContext[] filesToProcess = new BuildContext[numberToProcess];			 
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/AptCorePreferenceInitializer.java b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/AptCorePreferenceInitializer.java
index 9f3e413..899ddb5 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/AptCorePreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/AptCorePreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,7 @@ public class AptCorePreferenceInitializer extends AbstractPreferenceInitializer
 
 	@Override
 	public void initializeDefaultPreferences() {
-	 	IEclipsePreferences defaultPreferences = new DefaultScope().getNode(AptPlugin.PLUGIN_ID);
+	 	IEclipsePreferences defaultPreferences = DefaultScope.INSTANCE.getNode(AptPlugin.PLUGIN_ID);
 	 	for (Map.Entry<String,String> entry : AptPreferenceConstants.DEFAULT_OPTIONS_MAP.entrySet()) {
 	 		defaultPreferences.put(entry.getKey(), entry.getValue());
 	 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java
index b1f05ac..88b4e1d 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/util/AptConfig.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc. 
+ * Copyright (c) 2005, 2011 BEA Systems, Inc. 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,7 +86,7 @@ public class AptConfig {
     		throw new IllegalArgumentException();
     	}
 		IScopeContext context = (null != jproj) ? 
-				new ProjectScope(jproj.getProject()) : new InstanceScope();
+				new ProjectScope(jproj.getProject()) : InstanceScope.INSTANCE;
 		IEclipsePreferences node = context.getNode(AptPlugin.PLUGIN_ID + "/" +  //$NON-NLS-1$
 				AptPreferenceConstants.APT_PROCESSOROPTIONS);
 		String nonNullVal = val == null ? AptPreferenceConstants.APT_NULLVALUE : val;
@@ -109,7 +109,7 @@ public class AptConfig {
     		throw new IllegalArgumentException();
     	}
     	IScopeContext context = (null != jproj) ? 
-				new ProjectScope(jproj.getProject()) : new InstanceScope();
+				new ProjectScope(jproj.getProject()) : InstanceScope.INSTANCE;
 		IEclipsePreferences node = context.getNode(AptPlugin.PLUGIN_ID + "/" +  //$NON-NLS-1$
 				AptPreferenceConstants.APT_PROCESSOROPTIONS);
 		node.remove(key);
@@ -416,7 +416,7 @@ public class AptConfig {
      */
     public static void setProcessorOptions(Map<String, String> options, IJavaProject jproj) {
 		IScopeContext context = (null != jproj) ? 
-				new ProjectScope(jproj.getProject()) : new InstanceScope();
+				new ProjectScope(jproj.getProject()) : InstanceScope.INSTANCE;
 
     	// TODO: this call is needed only for backwards compatibility with
 	    // settings files previous to 2005.11.13.  At some point it should be
@@ -494,10 +494,10 @@ public class AptConfig {
 		IScopeContext[] contexts;
 		if (jproj != null) {
 			contexts = new IScopeContext[] { 
-					new ProjectScope(jproj.getProject()), new InstanceScope() };
+					new ProjectScope(jproj.getProject()), InstanceScope.INSTANCE };
 		}
 		else {
-			contexts = new IScopeContext[] { new InstanceScope() };
+			contexts = new IScopeContext[] { InstanceScope.INSTANCE };
 		}
 		for (IScopeContext context : contexts) {
 			IEclipsePreferences prefs = context.getNode(AptPlugin.PLUGIN_ID);
@@ -687,7 +687,7 @@ public class AptConfig {
      */
     public static void dispose() {
     	try {
-    		new InstanceScope().getNode(AptPlugin.PLUGIN_ID).flush();
+    		InstanceScope.INSTANCE.getNode(AptPlugin.PLUGIN_ID).flush();
     	}
     	catch (BackingStoreException e) {
     		// log failure and continue
@@ -774,10 +774,10 @@ public class AptConfig {
 		IScopeContext[] contexts;
 		if (jproj != null) {
 			contexts = new IScopeContext[] { 
-					new ProjectScope(jproj.getProject()), new InstanceScope(), new DefaultScope() };
+					new ProjectScope(jproj.getProject()), InstanceScope.INSTANCE, DefaultScope.INSTANCE };
 		}
 		else {
-			contexts = new IScopeContext[] { new InstanceScope(), new DefaultScope() };
+			contexts = new IScopeContext[] { InstanceScope.INSTANCE, DefaultScope.INSTANCE };
 		}
 		return service.getBoolean(
 				AptPlugin.PLUGIN_ID, 
@@ -857,10 +857,10 @@ public class AptConfig {
 		IScopeContext[] contexts;
 		if (jproj != null) {
 			contexts = new IScopeContext[] { 
-					new ProjectScope(jproj.getProject()), new InstanceScope(), new DefaultScope() };
+					new ProjectScope(jproj.getProject()), InstanceScope.INSTANCE, DefaultScope.INSTANCE };
 		}
 		else {
-			contexts = new IScopeContext[] { new InstanceScope(), new DefaultScope() };
+			contexts = new IScopeContext[] { InstanceScope.INSTANCE, DefaultScope.INSTANCE };
 		}
 		String pluginId = null;
 		if (AptPreferenceConstants.APT_PROCESSANNOTATIONS.equals(optionName)) {
@@ -893,7 +893,7 @@ public class AptConfig {
 	
 	private static void setBoolean(IJavaProject jproject, String optionName, boolean value) {
 		IScopeContext context = (null != jproject) ? 
-				new ProjectScope(jproject.getProject()) : new InstanceScope();
+				new ProjectScope(jproject.getProject()) : InstanceScope.INSTANCE;
 		IEclipsePreferences node = context.getNode(AptPlugin.PLUGIN_ID);
 		// get old val as a String, so it can be null if setting doesn't exist yet
 		String oldValue = node.get(optionName, null);
@@ -907,7 +907,7 @@ public class AptConfig {
 	
 	private static void setString(IJavaProject jproject, String optionName, String value) {
 		IScopeContext context = (null != jproject) ? 
-				new ProjectScope(jproject.getProject()) : new InstanceScope();
+				new ProjectScope(jproject.getProject()) : InstanceScope.INSTANCE;
 		IEclipsePreferences node;
 		if (AptPreferenceConstants.APT_PROCESSANNOTATIONS.equals(optionName)) {
 			node = context.getNode(JavaCore.PLUGIN_ID);
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/.settings/org.eclipse.jdt.core.prefs
index f4e7111..d290812 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,18 @@
-#Fri Feb 23 10:07:50 PST 2007
+#Wed Feb 02 12:04:22 EST 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
 org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..94510eb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 12:04:22 EST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF
index 4f9cccd..9657e21 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.apt.pluggable.core;singleton:=true
-Bundle-Version: 1.0.301.qualifier
+Bundle-Version: 1.0.400.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.apt.pluggable.core.Apt6Plugin
 Bundle-Vendor: %providerName
 Require-Bundle: org.eclipse.core.runtime,
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/dispatch/IdeMessagerImpl.java b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/dispatch/IdeMessagerImpl.java
index 769c3a9..83dc613 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/dispatch/IdeMessagerImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/dispatch/IdeMessagerImpl.java
@@ -23,7 +23,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.internal.apt.pluggable.core.Apt6Plugin;
 import org.eclipse.jdt.internal.compiler.CompilationResult;
 import org.eclipse.jdt.internal.compiler.apt.dispatch.AptProblem;
-import org.eclipse.jdt.internal.compiler.apt.dispatch.BatchMessagerImpl;
+import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseMessagerImpl;
 
 /**
  * 
@@ -72,7 +72,7 @@ public class IdeMessagerImpl implements Messager {
 	 */
 	public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a,
 			AnnotationValue v) {
-		AptProblem problem = BatchMessagerImpl.createProblem(kind, msg, e, a, v);
+		AptProblem problem = BaseMessagerImpl.createProblem(kind, msg, e, a, v);
 		if (kind == Kind.NOTE) {
 			Apt6Plugin.log(new Status(IStatus.INFO, Apt6Plugin.PLUGIN_ID, Apt6Plugin.STATUS_EXCEPTION, problem.getMessage(), null));
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.apt.ui/.settings/org.eclipse.jdt.core.prefs
index 0146e7d..82dbb0f 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.apt.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Mon Mar 20 23:34:15 PST 2006
+#Wed Feb 02 12:03:56 EST 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -8,6 +16,7 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -67,3 +76,5 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.apt.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..97e8cb5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.apt.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 12:03:56 EST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java
index a31be8d..d44e9a1 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 BEA Systems, Inc. and others.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     BEA Systems Inc. - initial API and implementation
+ *     IBM Corporation  - fix deprecation warnings
  *******************************************************************************/
 package org.eclipse.jdt.apt.ui.internal.preferences;
 
@@ -92,7 +93,7 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 	private SelectionButtonDialogField fAptEnabledField;
 	private SelectionButtonDialogField fReconcileEnabledField;
 	private StringDialogField fGenSrcDirField;
-	private ListDialogField fProcessorOptionsField;
+	private ListDialogField<ProcessorOption> fProcessorOptionsField;
 	
 	private PixelConverter fPixelConverter;
 	private Composite fBlockControl;
@@ -108,9 +109,9 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 	/**
 	 * Event handler for Processor Options list control.
 	 */
-	private class ProcessorOptionsAdapter implements IListAdapter, IDialogFieldListener {
+	private class ProcessorOptionsAdapter implements IListAdapter<ProcessorOption>, IDialogFieldListener {
 		
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<ProcessorOption> field, int index) {
 			switch (index) {
 			case IDX_ADD:
 				editOrAddProcessorOption(null);
@@ -121,13 +122,12 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 			}
 		}
 
-		@SuppressWarnings("rawtypes")
-		public void selectionChanged(ListDialogField field) {
-			List selectedElements= field.getSelectedElements();
+		public void selectionChanged(ListDialogField<ProcessorOption> field) {
+			List<ProcessorOption> selectedElements= field.getSelectedElements();
 			field.enableButton(IDX_EDIT, canEdit(field, selectedElements));
 		}
 			
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<ProcessorOption> field) {
 			tryToEdit(field);
 		}
 
@@ -135,14 +135,13 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 			updateModel(field);
 		}
 
-		@SuppressWarnings("rawtypes")
-		private boolean canEdit(DialogField field, List selectedElements) {
+		private boolean canEdit(DialogField field, List<ProcessorOption> selectedElements) {
 			if (!field.isEnabled())
 				return false;
 			return selectedElements.size() == 1;
 		}
 		
-		private void tryToEdit(ListDialogField field) {
+		private void tryToEdit(ListDialogField<ProcessorOption> field) {
 			List<ProcessorOption> selection= getListSelection();
 			if (canEdit(field, selection)) {
 				editOrAddProcessorOption(selection.get(0));
@@ -227,7 +226,7 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 			Messages.AptConfigurationBlock_remove
 		};
 		ProcessorOptionsAdapter optionsAdapter = new ProcessorOptionsAdapter();
-		fProcessorOptionsField = new ListDialogField(optionsAdapter, buttons, new ProcessorOptionsLabelProvider());
+		fProcessorOptionsField = new ListDialogField<ProcessorOption>(optionsAdapter, buttons, new ProcessorOptionsLabelProvider());
 		fProcessorOptionsField.setDialogFieldListener(optionsAdapter);
 		fProcessorOptionsField.setRemoveButtonIndex(IDX_REMOVE);
 		String[] columnHeaders= new String[] {
@@ -269,7 +268,6 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 	/*
 	 * Helper to eliminate unchecked-conversion warning
 	 */
-	@SuppressWarnings("unchecked")
 	private List<ProcessorOption> getListElements() {
 		return fProcessorOptionsField.getElements();
 	}
@@ -277,7 +275,6 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 	/*
 	 * Helper to eliminate unchecked-conversion warning
 	 */
-	@SuppressWarnings("unchecked")
 	private List<ProcessorOption> getListSelection() {
 		return fProcessorOptionsField.getSelectedElements();
 	}
@@ -413,7 +410,7 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
 	 */
 	private void setJDTProcessAnnotationsSetting(boolean enable) {
 		IScopeContext context = (null != fJProj) ?
-				new ProjectScope(fJProj.getProject()) : new InstanceScope();
+				new ProjectScope(fJProj.getProject()) : InstanceScope.INSTANCE;
 		IEclipsePreferences node = context.getNode(JavaCore.PLUGIN_ID);
 		final String value = enable ? AptPreferenceConstants.ENABLED : AptPreferenceConstants.DISABLED;
 		node.put(AptPreferenceConstants.APT_PROCESSANNOTATIONS, value);
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/BaseConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/BaseConfigurationBlock.java
index fe3e961..04beaec 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/BaseConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/BaseConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *   wharley at bea.com - initial API and implementation
+ *   IBM Corporation - fix deprecation warnings
  *******************************************************************************/
 
 package org.eclipse.jdt.apt.ui.internal.preferences;
@@ -218,14 +219,14 @@ public abstract class BaseConfigurationBlock {
 		if (fProject != null) {
 			fLookupOrder= new IScopeContext[] {
 				new ProjectScope(fProject),
-				new InstanceScope(),
-				new DefaultScope()
+				InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE
 			};
 			fAptProject = AptPlugin.getAptProject(JavaCore.create(fProject));
 		} else {
 			fLookupOrder= new IScopeContext[] {
-				new InstanceScope(),
-				new DefaultScope()
+				InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE
 			};
 			fAptProject = null;
 		}
@@ -645,12 +646,12 @@ public abstract class BaseConfigurationBlock {
 		IScopeContext[] lookupOrder; // not same as fLookupOrder!  Starts one layer deeper.
 		if (fProject != null) {
 			lookupOrder= new IScopeContext[] {
-				new InstanceScope(),
-				new DefaultScope()
+				InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE
 			};
 		} else {
 			lookupOrder= new IScopeContext[] {
-				new DefaultScope()
+				DefaultScope.INSTANCE
 			};
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/FactoryPathConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/FactoryPathConfigurationBlock.java
index af7aa77..26dd98b 100644
--- a/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/FactoryPathConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/FactoryPathConfigurationBlock.java
@@ -15,42 +15,23 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.preferences.IScopeContext;
 import org.eclipse.jdt.apt.core.internal.util.FactoryContainer;
 import org.eclipse.jdt.apt.core.internal.util.FactoryPath;
-import org.eclipse.jdt.apt.core.internal.util.FactoryPathUtil;
 import org.eclipse.jdt.apt.core.internal.util.FactoryPath.Attributes;
+import org.eclipse.jdt.apt.core.internal.util.FactoryPathUtil;
 import org.eclipse.jdt.apt.core.util.AptConfig;
 import org.eclipse.jdt.apt.core.util.IFactoryPath;
 import org.eclipse.jdt.apt.ui.internal.util.ExceptionHandler;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.preferences.IScopeContext;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.layout.PixelConverter;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-
-import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
-
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
-
-import org.eclipse.jdt.ui.wizards.BuildPathDialogAccess;
-
 import org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.CheckedListDialogField;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
@@ -58,6 +39,17 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
+import org.eclipse.jdt.ui.wizards.BuildPathDialogAccess;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.layout.PixelConverter;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
 
 /**
@@ -98,12 +90,12 @@ public class FactoryPathConfigurationBlock extends BaseConfigurationBlock {
 	/**
 	 * Event handler for factory path list control
 	 */
-	private class FactoryPathAdapter implements IListAdapter, IDialogFieldListener {
-        public void customButtonPressed(ListDialogField field, int index) {
+	private class FactoryPathAdapter implements IListAdapter<FactoryPathEntry>, IDialogFieldListener {
+        public void customButtonPressed(ListDialogField<FactoryPathEntry> field, int index) {
         	FactoryPathConfigurationBlock.this.customButtonPressed(index);
         }
 
-        public void selectionChanged(ListDialogField field) {
+        public void selectionChanged(ListDialogField<FactoryPathEntry> field) {
         	boolean enableRemove = canRemove();
         	field.enableButton(IDX_REMOVE, enableRemove);
         	boolean enableEdit = canEdit();
@@ -126,11 +118,12 @@ public class FactoryPathConfigurationBlock extends BaseConfigurationBlock {
 			}
         }
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<FactoryPathEntry> field) {
         	if (canEdit()) {
         		editSelectedItem();
         	}
         }
+
 	}
 	
 	private class FactoryPathLabelProvider extends LabelProvider implements ITableLabelProvider {
@@ -214,7 +207,7 @@ public class FactoryPathConfigurationBlock extends BaseConfigurationBlock {
 	 * The GUI control representing the factory path.  Its data items
 	 * are of type FactoryPathEntry.
 	 */
-	private CheckedListDialogField fFactoryPathList;
+	private CheckedListDialogField<FactoryPathEntry> fFactoryPathList;
 	
 	/**
 	 * True while inside setListContents().  Used in order to efficiently
@@ -232,7 +225,7 @@ public class FactoryPathConfigurationBlock extends BaseConfigurationBlock {
 		FactoryPathAdapter adapter= new FactoryPathAdapter();
 		FactoryPathLabelProvider labelProvider = new FactoryPathLabelProvider();
 		
-		fFactoryPathList= new CheckedListDialogField(adapter, buttonLabels, labelProvider);
+		fFactoryPathList= new CheckedListDialogField<FactoryPathEntry>(adapter, buttonLabels, labelProvider);
 		fFactoryPathList.setDialogFieldListener(adapter);
 		fFactoryPathList.setLabelText(Messages.FactoryPathConfigurationBlock_pluginsAndJars);
 		fFactoryPathList.setUpButtonIndex(IDX_UP);
@@ -420,7 +413,6 @@ public class FactoryPathConfigurationBlock extends BaseConfigurationBlock {
 	/*
 	 * Helper method to get rid of unchecked conversion warning
 	 */
-	@SuppressWarnings("unchecked")
 	private List<FactoryPathEntry> getListContents() {
 		List<FactoryPathEntry> contents= fFactoryPathList.getElements();
 		return contents;
@@ -429,7 +421,6 @@ public class FactoryPathConfigurationBlock extends BaseConfigurationBlock {
 	/*
 	 * Helper method to get rid of unchecked conversion warning
 	 */
-	@SuppressWarnings("unchecked")
 	private List<FactoryPathEntry> getSelectedListContents() {
 		List<FactoryPathEntry> contents= fFactoryPathList.getSelectedElements();
 		return contents;
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.compiler.apt/.settings/org.eclipse.jdt.core.prefs
index b9cbb62..4aac6f4 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Fri Feb 16 14:58:08 EST 2007
+#Wed Feb 02 12:03:47 EST 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -7,6 +15,7 @@ org.eclipse.jdt.core.compiler.compliance=1.6
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -60,3 +69,5 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.compiler.apt/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..1480a2b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 12:03:47 EST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF
index e9d5a1a..8fdde2f 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.jdt.compiler.apt;singleton:=true
-Bundle-Version: 1.0.300.qualifier
+Bundle-Version: 1.0.400.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: %providerName
 Fragment-Host: org.eclipse.jdt.core;bundle-version="[3.5.0,4.0.0)"
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.jdt.compiler.apt/customBuildCallbacks.xml
index 0efee97..8d77b19 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/customBuildCallbacks.xml
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/customBuildCallbacks.xml
@@ -42,9 +42,7 @@
 		<mkdir dir="${dest}/checksum" />
 		<checksum file="${dest}/ecj-${buildLabel}.jar" property="md5-ecj.jar" />
 		<echo message="${md5-ecj.jar} ecj-${buildLabel}.jar" file="${dest}/checksum/ecj-${buildLabel}.jar.md5" />
-		<checksum file="${dest}/ecjsrc-${buildLabel}.zip" property="md5-ecjsrc.zip" />
-		<echo message="${md5-ecjsrc.zip} ecjsrc-${buildLabel}.zip" file="${dest}/checksum/ecjsrc-${buildLabel}.zip.md5" />
-	</target>
+		<checksum file="${dest}/ecjsrc-${buildLabel}.jar" property="md5-ecjsrc.jar" /> 
		<echo message="${md5-ecjsrc.jar} ecjsrc-${buildLabel}.jar" file="${dest}/checksum/ecjsrc-${buildLabel}.jar.md5" /> 
	</target>
 
 	<!-- ===================================================================== -->
 	<!-- Steps to do before the target build.sources                           -->
@@ -110,13 +108,13 @@
 		</zip>
 		<delete dir="${unjarDestBin}" failonerror="false"/>
 
-		<echo message="UPDATE ecjsrc-${buildLabel}.zip" />
+		<echo message="UPDATE ecjsrc-${buildLabel}.jar" />
 		<property name="unjarDestSrc" value="${basedir}/tempsrc"/>
 		<mkdir dir="${unjarDestSrc}"/>
 		<unzip
-			src="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.zip"
+			src="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.jar"
 			dest="${unjarDestSrc}"/>
-		<zip destfile="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.zip">
+		<zip destfile="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.jar">
 			<zipfileset dir="src" />
 			<zipfileset dir="${unjarDestSrc}"/>
 			<zipfileset dir="${basedir}">
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
index 6595f70..e4e1fdd 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 BEA Systems, Inc. 
+ * Copyright (c) 2007, 2011 BEA Systems, Inc. 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
- *    
+ *    IBM Corporation - fix for 342598
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.dispatch;
@@ -27,6 +27,7 @@ import org.eclipse.jdt.internal.compiler.Compiler;
 import org.eclipse.jdt.internal.compiler.apt.model.ElementsImpl;
 import org.eclipse.jdt.internal.compiler.apt.model.Factory;
 import org.eclipse.jdt.internal.compiler.apt.model.TypesImpl;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
@@ -116,11 +117,18 @@ public abstract class BaseProcessingEnvImpl implements ProcessingEnvironment {
 
 	@Override
 	public SourceVersion getSourceVersion() {
-		// As of this writing, RELEASE_6 is the highest level available.
-		// It is also the lowest level for which this code can possibly
-		// be called.  When Java 7 is released, this method will need to
-		// return a value based on _compiler.options.sourceLevel.
-		return SourceVersion.RELEASE_6;
+		if (this._compiler.options.sourceLevel <= ClassFileConstants.JDK1_5) {
+			return SourceVersion.RELEASE_5;
+		}
+		if (this._compiler.options.sourceLevel == ClassFileConstants.JDK1_6) {
+			return SourceVersion.RELEASE_6;
+		}
+		try {
+			return SourceVersion.valueOf("RELEASE_7"); //$NON-NLS-1$
+		} catch(IllegalArgumentException e) {
+			// handle call on a JDK 6
+			return SourceVersion.RELEASE_6;
+		}
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java
index 1009ae9..cda0440 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 BEA Systems, Inc. 
+ * Copyright (c) 2006, 2011 BEA Systems, Inc. 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,11 +7,12 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
- *    
+ *    philippe.marschall at netcetera.ch - Fix for 338370
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.dispatch;
 
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.URI;
 import java.util.HashSet;
@@ -122,6 +123,9 @@ public class BatchFilerImpl implements Filer {
 		//TODO: do we need to check validity of 'name', or can we trust the filemanager to handle that?
 		FileObject fo = _fileManager.getFileForInput(
 				location, pkg.toString(), relativeName.toString());
+		if (fo == null) {
+			throw new FileNotFoundException("Resource does not exist : " + location + '/' + pkg + '/' + relativeName); //$NON-NLS-1$
+		}
 		URI uri = fo.toUri();
 		if (_createdFiles.contains(uri)) {
 			throw new FilerException("Resource already created : " + location + '/' + pkg + '/' + relativeName); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.java
index 22f85a3..f64cfff 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/RoundEnvImpl.java
@@ -1,12 +1,13 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ *    IBM Corporation - initial API and implementation
+ *    IBM Corporation - Fix for bug 328575
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.apt.dispatch;
 
@@ -29,6 +30,7 @@ import org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
 import org.eclipse.jdt.internal.compiler.lookup.Binding;
 import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TagBits;
@@ -64,6 +66,9 @@ public class RoundEnvImpl implements RoundEnvironment
 	private void collectAnnotations(ReferenceBinding[] referenceBindings) {
 		for (ReferenceBinding referenceBinding : referenceBindings) {
 			// collect all annotations from the binary types
+			if (referenceBinding instanceof ParameterizedTypeBinding) {
+				referenceBinding = ((ParameterizedTypeBinding) referenceBinding).genericType();
+			}
 			AnnotationBinding[] annotationBindings = referenceBinding.getAnnotations();
 			for (AnnotationBinding annotationBinding : annotationBindings) {
 				TypeElement anno = (TypeElement)_factory.newElement(annotationBinding.getAnnotationType()); 
@@ -127,7 +132,7 @@ public class RoundEnvImpl implements RoundEnvironment
 			Set<Element> annotatedElements = new HashSet<Element>(_annoToUnit.getValues(a));
 			// For all other root elements that are TypeElements, and for their recursively enclosed
 			// types, add each element if it has a superclass are annotated with 'a'
-			ReferenceBinding annoTypeBinding = (ReferenceBinding)((TypeElementImpl)a)._binding;
+			ReferenceBinding annoTypeBinding = (ReferenceBinding) annoBinding;
 			for (TypeElement element : ElementFilter.typesIn(getRootElements())) {
 				ReferenceBinding typeBinding = (ReferenceBinding)((TypeElementImpl)element)._binding;
 				addAnnotatedElements(annoTypeBinding, typeBinding, annotatedElements);
@@ -162,15 +167,19 @@ public class RoundEnvImpl implements RoundEnvironment
 	 * @return true if element has a superclass that is annotated with anno
 	 */
 	private boolean inheritsAnno(ReferenceBinding element, ReferenceBinding anno) {
+		ReferenceBinding searchedElement = element;
 		do {
-			AnnotationBinding[] annos = element.getAnnotations();
+			if (searchedElement instanceof ParameterizedTypeBinding) {
+				searchedElement = ((ParameterizedTypeBinding) searchedElement).genericType();
+			}
+			AnnotationBinding[] annos = searchedElement.getAnnotations();
 			for (AnnotationBinding annoBinding : annos) {
 				if (annoBinding.getAnnotationType() == anno) {
 					// element is annotated with anno
 					return true;
 				}
 			}
-		} while (null != (element = element.superclass()));
+		} while (null != (searchedElement = searchedElement.superclass()));
 		return false;
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.java
index 6a38940..ad297f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/AnnotationMirrorImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -93,11 +93,7 @@ public class AnnotationMirrorImpl implements AnnotationMirror, InvocationHandler
 	}
 
 	public DeclaredType getAnnotationType() {
-		if (this._binding == null) {
-			return _env.getFactory().getErrorType();
-		}
-		ReferenceBinding annoType = _binding.getAnnotationType();
-		return _env.getFactory().newAnnotationType(annoType);
+		return (DeclaredType) _env.getFactory().newTypeMirror(_binding.getAnnotationType());
 	}
 	
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.java
index 66f17a7..0a4cf69 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ArrayTypeImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 BEA Systems, Inc. 
+ * Copyright (c) 2007, 2011 BEA Systems, Inc. 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
- *    
+ *    IBM Corporation - fix for 342598
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.model;
@@ -19,7 +19,6 @@ import javax.lang.model.type.TypeVisitor;
 
 import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
 import org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
-import org.eclipse.jdt.internal.compiler.lookup.TagBits;
 
 /**
  * Implementation of ArrayType, which represents an array of some type.
@@ -51,10 +50,6 @@ public class ArrayTypeImpl extends TypeMirrorImpl implements ArrayType {
 	 */
 	@Override
 	public TypeKind getKind() {
-		ArrayBinding type = (ArrayBinding)_binding;
-		if (!type.isValidBinding() || ((type.leafComponentType().tagBits & TagBits.HasMissingType) != 0)) {
-			return TypeKind.ERROR;
-		}
 		return TypeKind.ARRAY;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.java
index b7862c4..95c6103 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/DeclaredTypeImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 BEA Systems, Inc. 
+ * Copyright (c) 2006, 2011 BEA Systems, Inc. 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
- *    
+ *    IBM Corporation - fix for 342598
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.model;
@@ -64,7 +64,9 @@ public class DeclaredTypeImpl extends TypeMirrorImpl implements DeclaredType {
 	public TypeMirror getEnclosingType() {
 		ReferenceBinding binding = (ReferenceBinding)_binding;
 		ReferenceBinding enclosingType = binding.enclosingType();
-		if (enclosingType != null) return _env.getFactory().newDeclaredType(enclosingType);
+		if (enclosingType != null) {
+			return _env.getFactory().newTypeMirror(enclosingType);
+		}
 		return _env.getFactory().getNoType(TypeKind.NONE);
 	}
 
@@ -108,13 +110,6 @@ public class DeclaredTypeImpl extends TypeMirrorImpl implements DeclaredType {
 
 	@Override
 	public TypeKind getKind() {
-		// Binding.isValidBinding() will return true for a parameterized or array type whose raw
-		// or member type is unresolved.  So we need to be a little more sensitive, so that we
-		// can report Zork<Quux> or Zork[] as error types.
-		ReferenceBinding type = (ReferenceBinding)_binding;
-		if (!type.isValidBinding()) {
-			return TypeKind.ERROR;
-		}
 		return TypeKind.DECLARED;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.java
index 67baade..08b82be 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ElementsImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 BEA Systems, Inc.
+ * Copyright (c) 2006, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,8 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
- *
+ *    IBM Corporation - Fix for bug 341494
+ *    IBM Corporation - Fix for bug 328575
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.model;
@@ -49,6 +50,7 @@ import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodVerifier;
 import org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TagBits;
@@ -88,6 +90,9 @@ public class ElementsImpl implements Elements {
 			Set<ReferenceBinding> annotationTypes = new HashSet<ReferenceBinding>();
 			ReferenceBinding binding = (ReferenceBinding)((TypeElementImpl)e)._binding;
 			while (null != binding) {
+				if (binding instanceof ParameterizedTypeBinding) {
+					binding = ((ParameterizedTypeBinding) binding).genericType();
+				}
 				for (AnnotationBinding annotation : binding.getAnnotations()) {
 					if (annotation == null) continue;
 					ReferenceBinding annotationType = annotation.getAnnotationType();
@@ -274,6 +279,32 @@ public class ElementsImpl implements Elements {
 			StringBuilder builder = new StringBuilder();
 			builder.append('\'').append(value).append('\'');
 			return String.valueOf(builder);
+		} else if (value instanceof String) {
+			StringBuilder builder = new StringBuilder();
+			builder.append('\"').append(value).append('\"');
+			return String.valueOf(builder);
+		} else if (value instanceof Float) {
+			StringBuilder builder = new StringBuilder();
+			builder.append(value).append('f');
+			return String.valueOf(builder);
+		} else if (value instanceof Long) {
+			StringBuilder builder = new StringBuilder();
+			builder.append(value).append('L');
+			return String.valueOf(builder);
+		} else if (value instanceof Short) {
+			StringBuilder builder = new StringBuilder();
+			builder.append("(short)").append(value); //$NON-NLS-1$
+			return String.valueOf(builder);
+		} else if (value instanceof Byte) {
+			StringBuilder builder = new StringBuilder();
+			builder.append("(byte)0x"); //$NON-NLS-1$
+			int intValue = ((Byte) value).byteValue();
+			String hexString = Integer.toHexString(intValue & 0xFF);
+			if (hexString.length() < 2) {
+				builder.append('0');
+			}
+			builder.append(hexString);
+			return String.valueOf(builder);
 		}
 		return String.valueOf(value);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.java
index f44ed74..3eccbf9 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,16 +26,17 @@ import javax.lang.model.element.TypeParameterElement;
 import javax.lang.model.type.TypeKind;
 import javax.lang.model.type.TypeMirror;
 
+import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
-import org.eclipse.jdt.internal.compiler.util.Util;
+import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 
 /**
  * Element corresponding to the Error type mirror
  */
 public class ErrorTypeElement extends TypeElementImpl {
 	
-	ErrorTypeElement(BaseProcessingEnvImpl env) {
-		super(env, null, null);
+	ErrorTypeElement(BaseProcessingEnvImpl env, ReferenceBinding binding) {
+		super(env, binding, null);
 	}
 	/* (non-Javadoc)
 	 * @see javax.lang.model.element.TypeElement#getInterfaces()
@@ -58,7 +59,15 @@ public class ErrorTypeElement extends TypeElementImpl {
 	 */
 	@Override
 	public Name getQualifiedName() {
-		return new NameImpl(Util.EMPTY_STRING);
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		char[] qName;
+		if (binding.isMemberType()) {
+			qName = CharOperation.concatWith(binding.enclosingType().compoundName, binding.sourceName, '.');
+			CharOperation.replace(qName, '$', '.');
+		} else {
+			qName = CharOperation.concatWith(binding.compoundName, '.');
+		}
+		return new NameImpl(qName);
 	}
 
 	/* (non-Javadoc)
@@ -82,7 +91,7 @@ public class ErrorTypeElement extends TypeElementImpl {
 	 */
 	@Override
 	public TypeMirror asType() {
-		return this._env.getFactory().getErrorType();
+		return this._env.getFactory().getErrorType((ReferenceBinding) this._binding);
 	}
 
 	/* (non-Javadoc)
@@ -138,6 +147,7 @@ public class ErrorTypeElement extends TypeElementImpl {
 	 */
 	@Override
 	public Name getSimpleName() {
-		return new NameImpl(Util.EMPTY_STRING);
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		return new NameImpl(binding.sourceName());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.java
index acd75c0..6b826b7 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ErrorTypeImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.apt.model;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -20,14 +21,18 @@ import javax.lang.model.type.TypeMirror;
 import javax.lang.model.type.TypeVisitor;
 
 import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
+import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
 
 /**
  * Implementation of the {@link ErrorType} interface.
  */
 public class ErrorTypeImpl extends DeclaredTypeImpl implements ErrorType {
 
-	/* package */ ErrorTypeImpl(BaseProcessingEnvImpl env) {
-		super(env, null);
+	/* package */ ErrorTypeImpl(BaseProcessingEnvImpl env, ReferenceBinding binding) {
+		super(env, binding);
 	}
 
 	/* (non-Javadoc)
@@ -35,7 +40,7 @@ public class ErrorTypeImpl extends DeclaredTypeImpl implements ErrorType {
 	 */
 	@Override
 	public Element asElement() {
-		return this._env.getFactory().newElement(null);
+		return this._env.getFactory().newElement((ReferenceBinding) this._binding);
 	}
 
 	/* (non-Javadoc)
@@ -46,14 +51,32 @@ public class ErrorTypeImpl extends DeclaredTypeImpl implements ErrorType {
 		return NoTypeImpl.NO_TYPE_NONE;
 	}
 
-	/* (non-Javadoc)
-	 * @see javax.lang.model.type.DeclaredType#getTypeArguments()
-	 */
 	@Override
 	public List<? extends TypeMirror> getTypeArguments() {
+		ReferenceBinding binding = (ReferenceBinding)_binding;
+		if (binding.isParameterizedType()) {
+			ParameterizedTypeBinding ptb = (ParameterizedTypeBinding)_binding;
+			TypeBinding[] arguments = ptb.arguments;
+			int length = arguments == null ? 0 : arguments.length;
+			if (length == 0) return Collections.emptyList();
+			List<TypeMirror> args = new ArrayList<TypeMirror>(length);
+			for (TypeBinding arg : arguments) {
+				args.add(_env.getFactory().newTypeMirror(arg));
+			}
+			return Collections.unmodifiableList(args);
+		}
+		if (binding.isGenericType()) {
+			TypeVariableBinding[] typeVariables = binding.typeVariables();
+			List<TypeMirror> args = new ArrayList<TypeMirror>(typeVariables.length);
+			for (TypeBinding arg : typeVariables) {
+				args.add(_env.getFactory().newTypeMirror(arg));
+			}
+			return Collections.unmodifiableList(args);
+		}
 		return Collections.emptyList();
 	}
 
+
 	/* (non-Javadoc)
 	 * @see javax.lang.model.type.TypeMirror#accept(javax.lang.model.type.TypeVisitor, java.lang.Object)
 	 */
@@ -72,6 +95,6 @@ public class ErrorTypeImpl extends DeclaredTypeImpl implements ErrorType {
 	
 	@Override
 	public String toString() {
-		return "<any>"; //$NON-NLS-1$
+		return new String(_binding.readableName());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.java
index e9d1cdc..3681abe 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/ExecutableTypeImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@ import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
  */
 public class ExecutableTypeImpl extends TypeMirrorImpl implements ExecutableType {
 	
-	public ExecutableTypeImpl(BaseProcessingEnvImpl env, MethodBinding binding) {
+	ExecutableTypeImpl(BaseProcessingEnvImpl env, MethodBinding binding) {
 		super(env, binding);
 	}
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/Factory.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/Factory.java
index 5bf3484..aa8264d 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/Factory.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/Factory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 BEA Systems, Inc. 
+ * Copyright (c) 2007, 2011 BEA Systems, Inc. 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
- *    
+ *    IBM Corporation - fix for 342598
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.model;
@@ -25,7 +25,6 @@ import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.Modifier;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeParameterElement;
-import javax.lang.model.type.DeclaredType;
 import javax.lang.model.type.ErrorType;
 import javax.lang.model.type.NoType;
 import javax.lang.model.type.NullType;
@@ -42,6 +41,7 @@ import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.eclipse.jdt.internal.compiler.lookup.TagBits;
 import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
 import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
 import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
@@ -247,9 +247,6 @@ public class Factory {
 	 * Create a new element that knows what kind it is even if the binding is unresolved.
 	 */
 	public Element newElement(Binding binding, ElementKind kindHint) {
-		if (binding == null) {
-			return new ErrorTypeElement(this._env);
-		}
 		switch (binding.kind()) {
 		case Binding.FIELD:
 		case Binding.LOCAL:
@@ -258,6 +255,9 @@ public class Factory {
 		case Binding.TYPE:
 		case Binding.GENERIC_TYPE:
 			ReferenceBinding referenceBinding = (ReferenceBinding)binding;
+			if ((referenceBinding.tagBits & TagBits.HasMissingType) != 0) {
+				return new ErrorTypeElement(this._env, referenceBinding);
+			}
 			if (referenceBinding.sourceName == TypeConstants.PACKAGE_INFO_NAME) {
 				return new PackageElementImpl(_env, referenceBinding.fPackage);
 			}
@@ -285,36 +285,6 @@ public class Factory {
 	public Element newElement(Binding binding) {
 		return newElement(binding, null);
 	}
-	
-	public DeclaredType newDeclaredType(ReferenceBinding binding) {
-		switch (binding.kind()) {
-			case Binding.WILDCARD_TYPE :
-				// JDT wildcard binding is a subclass of reference binding, but in JSR269 they're siblings
-				throw new IllegalArgumentException("A wildcard binding can't be turned into a DeclaredType"); //$NON-NLS-1$
-			case Binding.INTERSECTION_TYPE :
-				// JDT intersection binding is a subclass of reference binding, but in JSR269 they're siblings
-				throw new IllegalArgumentException("An intersection binding can't be turned into a DeclaredType"); //$NON-NLS-1$
-		}
-		return new DeclaredTypeImpl(_env, binding);
-	}
-
-	/**
-	 * When an annotation is of unresolved type, its binding won't know that it's an annotation type,
-	 * so later on if the caller tries to get the type asElement(), and then asks for the ElementKind,
-	 * they'll get back CLASS rather than ANNOTATION_TYPE.  If we know from context that the binding
-	 * is to an annotation type, calling this method allows us to hint to the underlying TypeElementImpl. 
-	 */
-	public DeclaredType newAnnotationType(ReferenceBinding binding) {
-		switch (binding.kind()) {
-			case Binding.WILDCARD_TYPE :
-				// JDT wildcard binding is a subclass of reference binding, but in JSR269 they're siblings
-				throw new IllegalArgumentException("A wildcard binding can't be turned into a DeclaredType"); //$NON-NLS-1$
-			case Binding.INTERSECTION_TYPE :
-				// JDT intersection binding is a subclass of reference binding, but in JSR269 they're siblings
-				throw new IllegalArgumentException("An intersection binding can't be turned into a DeclaredType"); //$NON-NLS-1$
-		}
-		return new DeclaredTypeImpl(_env, binding, ElementKind.ANNOTATION_TYPE);
-	}
 
 	/**
 	 * Convenience method - equivalent to {@code (PackageElement)Factory.newElement(binding)}
@@ -369,13 +339,6 @@ public class Factory {
 			throw new IllegalStateException();
 		}
 	}
-	
-	/**
-	 * Convenience method to get the PrimitiveTypeImpl corresponding to a particular BaseTypeBinding.
-	 */
-	public PrimitiveTypeImpl getPrimitiveType(BaseTypeBinding binding) {
-		return getPrimitiveType(PrimitiveTypeImpl.getKind(binding));
-	}
 
 	/**
 	 * Given a binding of uncertain type, try to create the right sort of TypeMirror for it.
@@ -401,6 +364,10 @@ public class Factory {
 		case Binding.RAW_TYPE:
 		case Binding.GENERIC_TYPE:
 		case Binding.PARAMETERIZED_TYPE:
+			ReferenceBinding referenceBinding = (ReferenceBinding) binding;
+			if ((referenceBinding.tagBits & TagBits.HasMissingType) != 0) {
+				return getErrorType(referenceBinding);
+			}
 			return new DeclaredTypeImpl(_env, (ReferenceBinding)binding);
 			
 		case Binding.ARRAY_TYPE:
@@ -435,8 +402,8 @@ public class Factory {
 		return new TypeParameterElementImpl(_env, variable, declaringElement);
 	}
 
-    public ErrorType getErrorType() {
-		return new ErrorTypeImpl(this._env);
+    public ErrorType getErrorType(ReferenceBinding binding) {
+		return new ErrorTypeImpl(this._env, binding);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.java
index 0ed3725..5d5e966 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeElementImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
+import javax.lang.model.SourceVersion;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.ElementVisitor;
@@ -35,9 +36,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding;
 import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
-import org.eclipse.jdt.internal.compiler.lookup.MissingTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.PackageBinding;
-import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
 
@@ -118,18 +117,13 @@ public class TypeElementImpl extends ElementImpl implements TypeElement {
 		}
 		List<TypeMirror> interfaces = new ArrayList<TypeMirror>(binding.superInterfaces().length);
 		for (ReferenceBinding interfaceBinding : binding.superInterfaces()) {
-			// JSR269 spec requires us to return unresolved superinterfaces, but javac has
-			// a bug in this regard; as of 5/08 we emulate javac, rather than follow the spec.
-			// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=231521
-			if (interfaceBinding.isValidBinding() &&
-				// using binding types...
-					!(interfaceBinding instanceof MissingTypeBinding) &&
-					!(interfaceBinding instanceof ParameterizedTypeBinding &&
-							((ParameterizedTypeBinding) interfaceBinding).genericType() instanceof MissingTypeBinding)
-				// since HasMissingType reports indirect missing types, which is not what we need
-				/* &&
-					(interfaceBinding.tagBits & TagBits.HasMissingType) == 0 */) {
-				TypeMirror interfaceType = _env.getFactory().newTypeMirror(interfaceBinding);
+			TypeMirror interfaceType = _env.getFactory().newTypeMirror(interfaceBinding);
+			if (interfaceType.getKind() == TypeKind.ERROR) {
+				if (this._env.getSourceVersion().compareTo(SourceVersion.RELEASE_6) > 0) {
+					// for jdk 7 and above, add error types
+					interfaces.add(interfaceType);
+				}
+			} else {
 				interfaces.add(interfaceType);
 			}
 		}
@@ -225,7 +219,7 @@ public class TypeElementImpl extends ElementImpl implements TypeElement {
 			return _env.getFactory().getNoType(TypeKind.NONE);
 		}
 		// superclass of a type must be a DeclaredType
-		return _env.getFactory().newDeclaredType(superBinding);
+		return _env.getFactory().newTypeMirror(superBinding);
 	}
 	
 	@Override
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.java
index c76e4c4..7da7c3a 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeParameterElementImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 BEA Systems, Inc.
+ * Copyright (c) 2007, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
+ *    IBM Corporation - fix for 342470
+ *    IBM Corporation - fix for 342598
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.model;
@@ -64,9 +66,16 @@ public class TypeParameterElementImpl extends ElementImpl implements TypeParamet
 		ReferenceBinding varSuperclass = typeVariableBinding.superclass();
 		TypeBinding firstClassOrArrayBound = typeVariableBinding.firstBound;
 		int boundsLength = 0;
+		boolean isFirstBoundATypeVariable = false;
 		if (firstClassOrArrayBound != null) {
+			if (firstClassOrArrayBound.isTypeVariable()) {
+				isFirstBoundATypeVariable = true;
+			}
 			if (firstClassOrArrayBound == varSuperclass) {
 				boundsLength++;
+				if (firstClassOrArrayBound.isTypeVariable()) {
+					isFirstBoundATypeVariable = true;
+				}
 			} else if (firstClassOrArrayBound.isArrayType()) { // capture of ? extends/super arrayType
 				boundsLength++;
 			} else {
@@ -88,7 +97,8 @@ public class TypeParameterElementImpl extends ElementImpl implements TypeParamet
 				}
 				typeBounds.add(typeBinding);
 			}
-			if (superinterfaces != null) {
+			// we need to filter out remaining bounds if the first bound is a type variable
+			if (superinterfaces != null && !isFirstBoundATypeVariable) {
 				for (int i = 0; i < superinterfacesLength; i++) {
 					TypeMirror typeBinding = _env.getFactory().newTypeMirror(superinterfaces[i]);
 					if (typeBinding == null) {
@@ -146,7 +156,7 @@ public class TypeParameterElementImpl extends ElementImpl implements TypeParamet
 	@Override
 	public Element getEnclosingElement()
 	{
-		return null;
+		return getGenericElement();
 	}
 
 	@Override
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.java
index f1520cf..59e45cc 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypeVariableImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,17 +19,15 @@ import javax.lang.model.type.TypeVisitor;
 
 import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
-import org.eclipse.jdt.internal.compiler.lookup.TagBits;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
 
 /**
- * @author OThomann
- *
+ * Implementation of TypeVariable
  */
 public class TypeVariableImpl extends TypeMirrorImpl implements TypeVariable {
 	
-	public TypeVariableImpl(BaseProcessingEnvImpl env, TypeVariableBinding binding) {
+	TypeVariableImpl(BaseProcessingEnvImpl env, TypeVariableBinding binding) {
 		super(env, binding);
 	}
 	/* (non-Javadoc)
@@ -65,7 +63,7 @@ public class TypeVariableImpl extends TypeMirrorImpl implements TypeVariable {
 			// only one bound that is an interface
 			return _env.getFactory().newTypeMirror(typeVariableBinding.upperBound());
 		}
-		return this._env.getFactory().newDeclaredType((TypeVariableBinding) this._binding);
+		return this._env.getFactory().newTypeMirror((TypeVariableBinding) this._binding);
 	}
 
 	/* (non-Javadoc)
@@ -77,12 +75,7 @@ public class TypeVariableImpl extends TypeMirrorImpl implements TypeVariable {
 	}
 	
 	@Override
-	public TypeKind getKind()
-	{
-		TypeVariableBinding variableBinding = (TypeVariableBinding) _binding;
-		if ((!variableBinding.isValidBinding() || ((variableBinding.tagBits & TagBits.HasMissingType) != 0))) {
-			return TypeKind.ERROR;
-		}
+	public TypeKind getKind() {
 		return TypeKind.TYPEVAR;
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java
index d213261..5d1982f 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 BEA Systems, Inc. and others
+ * Copyright (c) 2007, 2011 BEA Systems, Inc. and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    wharley at bea.com - initial API and implementation
- *
+ *    IBM Corporation - fix for 342598
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.compiler.apt.model;
@@ -195,18 +195,19 @@ public class TypesImpl implements Types {
      */
     @Override
     public TypeMirror erasure(TypeMirror t) {
-        TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) t;
-        Binding binding = typeMirrorImpl._binding;
-        if (binding instanceof ReferenceBinding) {
-            return _env.getFactory().newTypeMirror(((ReferenceBinding) binding).erasure());
-        }
-        if (binding instanceof ArrayBinding) {
-        	TypeBinding typeBinding = (TypeBinding) binding;
-            return new ArrayTypeImpl(_env, this._env.getLookupEnvironment().createArrayType(
-                    typeBinding.leafComponentType().erasure(),
-                    typeBinding.dimensions()));
-        }
-        return t;
+    	TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) t;
+    	Binding binding = typeMirrorImpl._binding;
+    	if (binding instanceof ReferenceBinding) {
+    		return _env.getFactory().newTypeMirror(((ReferenceBinding) binding).erasure());
+    	}
+    	if (binding instanceof ArrayBinding) {
+    		TypeBinding typeBinding = (TypeBinding) binding;
+    		return _env.getFactory().newTypeMirror(
+    				this._env.getLookupEnvironment().createArrayType(
+    						typeBinding.leafComponentType().erasure(),
+    						typeBinding.dimensions()));
+    	}
+    	return t;
     }
 
     /* (non-Javadoc)
@@ -216,9 +217,10 @@ public class TypesImpl implements Types {
     public ArrayType getArrayType(TypeMirror componentType) {
         TypeMirrorImpl typeMirrorImpl = (TypeMirrorImpl) componentType;
         TypeBinding typeBinding = (TypeBinding) typeMirrorImpl._binding;
-        return new ArrayTypeImpl(_env, this._env.getLookupEnvironment().createArrayType(
-                typeBinding.leafComponentType(),
-                typeBinding.dimensions() + 1));
+        return (ArrayType) _env.getFactory().newTypeMirror(
+        		this._env.getLookupEnvironment().createArrayType(
+        				typeBinding.leafComponentType(),
+        				typeBinding.dimensions() + 1));
     }
 
     /* (non-Javadoc)
@@ -234,7 +236,7 @@ public class TypesImpl implements Types {
         if (typeArgsLength == 0) {
             if (referenceBinding.isGenericType()) {
                 // must return a raw type
-                return _env.getFactory().newDeclaredType(this._env.getLookupEnvironment().createRawType(referenceBinding, null));
+                return (DeclaredType) _env.getFactory().newTypeMirror(this._env.getLookupEnvironment().createRawType(referenceBinding, null));
             }
             return (DeclaredType)typeElem.asType();
         } else if (typeArgsLength != typeVariablesLength) {
@@ -249,7 +251,7 @@ public class TypesImpl implements Types {
             }
             typeArguments[i] = (TypeBinding) binding;
         }
-        return _env.getFactory().newDeclaredType(
+        return (DeclaredType) _env.getFactory().newTypeMirror(
                 this._env.getLookupEnvironment().createParameterizedType(referenceBinding, typeArguments, null));
     }
 
@@ -269,7 +271,7 @@ public class TypesImpl implements Types {
         if (typeArgsLength == 0) {
             if (referenceBinding.isGenericType()) {
                 // must return a raw type
-                return _env.getFactory().newDeclaredType(this._env.getLookupEnvironment().createRawType(referenceBinding, enclosingType));
+                return (DeclaredType) _env.getFactory().newTypeMirror(this._env.getLookupEnvironment().createRawType(referenceBinding, enclosingType));
             }
             // TODO (see how to create a member type binding
             throw new UnsupportedOperationException("NYI: TypesImpl.getDeclaredType(...) for member types"); //$NON-NLS-1$
@@ -285,7 +287,7 @@ public class TypesImpl implements Types {
             }
             typeArguments[i] = (TypeBinding) binding;
         }
-        return _env.getFactory().newDeclaredType(
+        return (DeclaredType) _env.getFactory().newTypeMirror(
                 this._env.getLookupEnvironment().createParameterizedType(referenceBinding, typeArguments, enclosingType));
     }
 
@@ -321,12 +323,13 @@ public class TypesImpl implements Types {
         if (extendsBound != null) {
             TypeMirrorImpl extendsBoundMirrorType = (TypeMirrorImpl) extendsBound;
             TypeBinding typeBinding = (TypeBinding) extendsBoundMirrorType._binding;
-            return new WildcardTypeImpl(_env, this._env.getLookupEnvironment().createWildcard(
-                    null,
-                    0,
-                    typeBinding,
-                    null,
-                    Wildcard.EXTENDS));
+            return (WildcardType) _env.getFactory().newTypeMirror(
+            		this._env.getLookupEnvironment().createWildcard(
+	                    null,
+	                    0,
+	                    typeBinding,
+	                    null,
+	                    Wildcard.EXTENDS));
         }
         if (superBound != null) {
             TypeMirrorImpl superBoundMirrorType = (TypeMirrorImpl) superBound;
@@ -452,7 +455,7 @@ public class TypesImpl implements Types {
             // No boxing conversion was found
             throw new IllegalArgumentException();
         }
-        return _env.getFactory().getPrimitiveType((BaseTypeBinding)unboxed);
+        return (PrimitiveType) _env.getFactory().newTypeMirror((BaseTypeBinding)unboxed);
     }
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.java
index 4029f1f..c341cc4 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/WildcardTypeImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,6 @@ import javax.lang.model.type.WildcardType;
 
 import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
 import org.eclipse.jdt.internal.compiler.ast.Wildcard;
-import org.eclipse.jdt.internal.compiler.lookup.TagBits;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.WildcardBinding;
 
@@ -27,7 +26,7 @@ import org.eclipse.jdt.internal.compiler.lookup.WildcardBinding;
  */
 public class WildcardTypeImpl extends TypeMirrorImpl implements WildcardType {
 	
-	public WildcardTypeImpl(BaseProcessingEnvImpl env, WildcardBinding binding) {
+	WildcardTypeImpl(BaseProcessingEnvImpl env, WildcardBinding binding) {
 		super(env, binding);
 	}
 
@@ -48,10 +47,6 @@ public class WildcardTypeImpl extends TypeMirrorImpl implements WildcardType {
 	 */
 	@Override
 	public TypeKind getKind() {
-		WildcardBinding wildcardBinding = (WildcardBinding) _binding;
-		if ((!wildcardBinding.isValidBinding() || ((wildcardBinding.tagBits & TagBits.HasMissingType) != 0))) {
-			return TypeKind.ERROR;
-		}
 		return TypeKind.WILDCARD;
 	}
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.java
index e79ed81..adae21a 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/ArchiveFileObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -156,7 +156,7 @@ public class ArchiveFileObject implements JavaFileObject {
 	 */
 	public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
 		if (getKind() == Kind.SOURCE) {
-			return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getZipEntryByteContent(this.zipEntry, this.zipFile), this.charset.toString());
+			return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getZipEntryByteContent(this.zipEntry, this.zipFile), this.charset.name());
 		}
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java
index 1aacecf..251bcce 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java
@@ -268,7 +268,7 @@ public class EclipseFileManager implements StandardJavaFileManager {
 		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
 		ArrayList<File> files = new ArrayList<File>();
 		try {
-			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.toString(), false, false);
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
 		} catch (IllegalArgumentException e) {
 			return null;
 		}
@@ -338,7 +338,7 @@ public class EclipseFileManager implements StandardJavaFileManager {
 		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
 		ArrayList<File> files = new ArrayList<File>();
 		try {
-			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.toString(), false, false);
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
 		} catch (IllegalArgumentException e) {
 			return null;
 		}
@@ -352,7 +352,7 @@ public class EclipseFileManager implements StandardJavaFileManager {
 		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
 		ArrayList<File> files = new ArrayList<File>();
 		try {
-			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.toString(), false, false);
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
 		} catch (IllegalArgumentException e) {
 			return null;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.java b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.java
index 8bec3fb..e72f450 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -133,7 +133,7 @@ public class EclipseFileObject extends SimpleJavaFileObject {
 	 * @see javax.tools.FileObject#getCharContent(boolean)
 	 */
 	public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
-		return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(this.f), this.charset.toString());
+		return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(this.f), this.charset.name());
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.compiler.tool/.settings/org.eclipse.jdt.core.prefs
index b846fc9..c5a7f53 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.tool/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Fri Nov 28 14:00:12 CET 2008
+#Wed Feb 02 12:00:04 EST 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -8,6 +16,7 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -85,3 +94,5 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.compiler.tool/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..207ae74
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 11:55:16 EST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.jdt.compiler.tool/customBuildCallbacks.xml
index de7cd9b..8b4bd47 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.tool/customBuildCallbacks.xml
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/customBuildCallbacks.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
<!--
-    Copyright (c) 2006, 2009 IBM Corporation and others.
+    Copyright (c) 2006, 2010 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
@@ -42,8 +42,8 @@
 		<mkdir dir="${dest}/checksum" />
 		<checksum file="${dest}/ecj-${buildLabel}.jar" property="md5-ecj.jar" /> 
 		<echo message="${md5-ecj.jar} ecj-${buildLabel}.jar" file="${dest}/checksum/ecj-${buildLabel}.jar.md5" /> 
-		<checksum file="${dest}/ecjsrc-${buildLabel}.zip" property="md5-ecjsrc.zip" /> 
-		<echo message="${md5-ecjsrc.zip} ecjsrc-${buildLabel}.zip" file="${dest}/checksum/ecjsrc-${buildLabel}.zip.md5" /> 
+		<checksum file="${dest}/ecjsrc-${buildLabel}.jar" property="md5-ecjsrc.jar" /> 
+		<echo message="${md5-ecjsrc.jar} ecjsrc-${buildLabel}.jar" file="${dest}/checksum/ecjsrc-${buildLabel}.jar.md5" /> 
 	</target>
 
 	<!-- ===================================================================== -->
@@ -113,13 +113,13 @@
 		</zip>
 		<delete dir="${unjarDestBin}" failonerror="false"/>
 
-		<echo message="UPDATE ecjsrc-${buildLabel}.zip" />
+		<echo message="UPDATE ecjsrc-${buildLabel}.jar" />
 		<property name="unjarDestSrc" value="${basedir}/tempsrc"/>
 		<mkdir dir="${unjarDestSrc}"/>
 		<unzip
-			src="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.zip"
+			src="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.jar"
 			dest="${unjarDestSrc}"/>
-		<zip destfile="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.zip">
+		<zip destfile="${postingDirectory}/${buildLabel}/ecjsrc-${buildLabel}.jar">
 			<zipfileset dir="src" />
 			<zipfileset dir="${unjarDestSrc}" />
 			<zipfileset dir="${basedir}">
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/ArchiveFileObject.java b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/ArchiveFileObject.java
index 28526cc..c4ec42d 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/ArchiveFileObject.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/ArchiveFileObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -163,7 +163,7 @@ public class ArchiveFileObject implements JavaFileObject {
 	@Override
 	public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
 		if (getKind() == Kind.SOURCE) {
-			return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getZipEntryByteContent(this.zipEntry, this.zipFile), this.charset.toString());
+			return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getZipEntryByteContent(this.zipEntry, this.zipFile), this.charset.name());
 		}
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseCompilerImpl.java b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseCompilerImpl.java
index ef0322b..3b63903 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseCompilerImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseCompilerImpl.java
@@ -1,12 +1,13 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *     IBM Corporation - initial API and implementation
+ *    IBM Corporation - initial API and implementation
+ *    IBM Corporation - fix for 342936
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.tool;
 
@@ -17,6 +18,7 @@ import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
 
@@ -40,6 +42,7 @@ import org.eclipse.jdt.internal.compiler.batch.FileSystem;
 import org.eclipse.jdt.internal.compiler.batch.Main;
 import org.eclipse.jdt.internal.compiler.batch.FileSystem.Classpath;
 import org.eclipse.jdt.internal.compiler.problem.AbortCompilationUnit;
+import org.eclipse.jdt.internal.compiler.problem.DefaultProblem;
 import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
 import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
 import org.eclipse.jdt.internal.compiler.util.Messages;
@@ -267,7 +270,9 @@ public class EclipseCompilerImpl extends Main {
 						}
 						@Override
 						public String getMessage(Locale locale) {
-							setLocale(locale);
+							if (locale != null) {
+								setLocale(locale);
+							}
 							return getLocalizedMessage(problemId, problemArguments);
 						}
 						@Override
@@ -481,4 +486,77 @@ public class EclipseCompilerImpl extends Main {
 			}
 		}
 	}
+	@Override
+	protected void loggingExtraProblems() {
+		super.loggingExtraProblems();
+		for (@SuppressWarnings("rawtypes")
+			Iterator iterator = this.extraProblems.iterator(); iterator.hasNext(); ) {
+			final CategorizedProblem problem = (CategorizedProblem) iterator.next();
+			if (this.diagnosticListener != null) {
+				this.diagnosticListener.report(new Diagnostic<JavaFileObject>() {
+					@Override
+					public String getCode() {
+						return null;
+					}
+					@Override
+					public long getColumnNumber() {
+						if (problem instanceof DefaultProblem) {
+							return ((DefaultProblem) problem).column;
+						}
+						return Diagnostic.NOPOS;
+					}
+					@Override
+					public long getEndPosition() {
+						if (problem instanceof DefaultProblem) {
+							return ((DefaultProblem) problem).getSourceEnd();
+						}
+						return Diagnostic.NOPOS;
+					}
+					@Override
+					public Kind getKind() {
+						if (problem.isError()) {
+							return Diagnostic.Kind.ERROR;
+						}
+						if (problem.isWarning()) {
+							return Diagnostic.Kind.WARNING;
+						}
+						return Diagnostic.Kind.OTHER;
+					}
+					@Override
+					public long getLineNumber() {
+						if (problem instanceof DefaultProblem) {
+							return ((DefaultProblem) problem).getSourceLineNumber();
+						}
+						return Diagnostic.NOPOS;
+					}
+					@Override
+					public String getMessage(Locale locale) {
+						return problem.getMessage();
+					}
+					@Override
+					public long getPosition() {
+						if (problem instanceof DefaultProblem) {
+							return ((DefaultProblem) problem).getSourceStart();
+						}
+						return Diagnostic.NOPOS;
+					}
+					@Override
+					public JavaFileObject getSource() {
+						if (problem instanceof DefaultProblem) {
+							File f = new File(new String(((DefaultProblem) problem).getOriginatingFileName()));
+							if (f.exists()) {
+								return new EclipseFileObject(null, f.toURI(), JavaFileObject.Kind.SOURCE, null);
+							}
+							return null;
+						}
+						return null;
+					}
+					@Override
+					public long getStartPosition() {
+						return getPosition();
+					}
+				});
+			}
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileManager.java b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileManager.java
index a9a83da..0782e13 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileManager.java
@@ -271,7 +271,7 @@ public class EclipseFileManager implements StandardJavaFileManager {
 		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
 		ArrayList<File> files = new ArrayList<File>();
 		try {
-			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.toString(), false, false);
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
 		} catch (IllegalArgumentException e) {
 			return null;
 		}
@@ -341,7 +341,7 @@ public class EclipseFileManager implements StandardJavaFileManager {
 		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
 		ArrayList<File> files = new ArrayList<File>();
 		try {
-			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.toString(), false, false);
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
 		} catch (IllegalArgumentException e) {
 			return null;
 		}
@@ -355,7 +355,7 @@ public class EclipseFileManager implements StandardJavaFileManager {
 		ArrayList<FileSystem.Classpath> paths = new ArrayList<FileSystem.Classpath>();
 		ArrayList<File> files = new ArrayList<File>();
 		try {
-			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.toString(), false, false);
+			this.processPathEntries(Main.DEFAULT_SIZE_CLASSPATH, paths, path, this.charset.name(), false, false);
 		} catch (IllegalArgumentException e) {
 			return null;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileObject.java b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileObject.java
index 3d797a8..d3f326e 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileObject.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/EclipseFileObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -138,7 +138,7 @@ public class EclipseFileObject extends SimpleJavaFileObject {
 	 */
 	@Override
 	public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
-		return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(this.f), this.charset.toString());
+		return Util.getCharContents(this, ignoreEncodingErrors, org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(this.f), this.charset.name());
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/Options.java b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/Options.java
index c1cf40b..7b29f99 100644
--- a/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/Options.java
+++ b/eclipse/plugins/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/Options.java
@@ -168,6 +168,7 @@ public final class Options {
 						|| token.equals("forbidden")//$NON-NLS-1$
 						|| token.equals("hashCode")//$NON-NLS-1$
 						|| token.equals("hiding")//$NON-NLS-1$
+						|| token.equals("includeAssertNull")//$NON-NLS-1$
 						|| token.equals("incomplete-switch")//$NON-NLS-1$
 						|| token.equals("indirectStatic")//$NON-NLS-1$
 						|| token.equals("interfaceNonInherited")//$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF
index 7893d02..1113f4a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core.manipulation; singleton:=true
-Bundle-Version: 1.3.0.qualifier
+Bundle-Version: 1.4.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Activator: org.eclipse.jdt.internal.core.manipulation.JavaManipulationPlugin
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/participants/IRefactoringProcessorIds.java b/eclipse/plugins/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/participants/IRefactoringProcessorIds.java
new file mode 100644
index 0000000..8df0dcf
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/participants/IRefactoringProcessorIds.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.refactoring.participants;
+
+/**
+ * Interface to define the processor IDs provided by JDT refactorings.
+ *
+ * <p>
+ * This interface declares static final fields only; it is not intended to be
+ * implemented.
+ * </p>
+ *
+ * @since 1.4
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface IRefactoringProcessorIds {
+
+	/**
+	 * Processor ID of the Change Method Signature processor
+	 * (value <code>"org.eclipse.jdt.ui.changeMethodSignatureRefactoring"</code>).
+	 *
+	 * The Change Method Signature processor loads {@link ChangeMethodSignatureParticipant}s registered for the
+	 * <code>IMethod</code> whose signature is changed.
+	 */
+	public static String CHANGE_METHOD_SIGNATURE_PROCESSOR= "org.eclipse.jdt.ui.changeMethodSignatureRefactoring"; //$NON-NLS-1$
+	
+	/**
+	 * Processor ID of the Introduce Parameter Object processor
+	 * (value <code>"org.eclipse.jdt.ui.introduceParameterObjectRefactoring"</code>).
+	 *
+	 * The Introduce Parameter Object processor loads {@link ChangeMethodSignatureParticipant}s registered for the
+	 * <code>IMethod</code> whose signature is changed.
+	 */
+	public static String INTRODUCE_PARAMETER_OBJECT_PROCESSOR= "org.eclipse.jdt.ui.introduceParameterObjectRefactoring"; //$NON-NLS-1$
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.core/.settings/org.eclipse.jdt.core.prefs
index d8db5ac..2845a5a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,9 @@
-#Tue Oct 27 09:15:52 EDT 2009
+#Wed Feb 02 11:55:06 EST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,.svn/
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
diff --git a/eclipse/plugins/org.eclipse.jdt.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.core/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..e069008
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 11:55:05 EST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF
index 08cdaa1..2af68cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.jdt.core.JavaCore
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -24,8 +24,8 @@ Export-Package: org.eclipse.jdt.core,
  org.eclipse.jdt.internal.compiler;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
  org.eclipse.jdt.internal.compiler.ast;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
  org.eclipse.jdt.internal.compiler.batch;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
- org.eclipse.jdt.internal.compiler.classfmt;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
- org.eclipse.jdt.internal.compiler.codegen;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
+ org.eclipse.jdt.internal.compiler.classfmt;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core,org.eclipse.pde.api.tools",
+ org.eclipse.jdt.internal.compiler.codegen;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core,org.eclipse.pde.api.tools",
  org.eclipse.jdt.internal.compiler.env;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
  org.eclipse.jdt.internal.compiler.flow;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
  org.eclipse.jdt.internal.compiler.impl;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
@@ -33,9 +33,9 @@ Export-Package: org.eclipse.jdt.core,
  org.eclipse.jdt.internal.compiler.parser;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
  org.eclipse.jdt.internal.compiler.parser.diagnose;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
  org.eclipse.jdt.internal.compiler.problem;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
- org.eclipse.jdt.internal.compiler.util;x-friends:="org.eclipse.jdt.compiler.tool,org.eclipse.jdt.apt.pluggable.core",
- org.eclipse.jdt.internal.core;x-friends:="org.eclipse.jdt.apt.pluggable.core",
- org.eclipse.jdt.internal.core.builder;x-friends:="org.eclipse.jdt.apt.pluggable.core",
+ org.eclipse.jdt.internal.compiler.util;x-friends:="org.eclipse.jdt.apt.pluggable.core,org.eclipse.jdt.compiler.tool,org.eclipse.pde.api.tools",
+ org.eclipse.jdt.internal.core;x-friends:="org.eclipse.jdt.apt.pluggable.core,org.eclipse.pde.api.tools",
+ org.eclipse.jdt.internal.core.builder;x-friends:="org.eclipse.jdt.apt.pluggable.core,org.eclipse.pde.api.tools",
  org.eclipse.jdt.internal.core.dom;x-internal:=true,
  org.eclipse.jdt.internal.core.dom.rewrite;x-internal:=true,
  org.eclipse.jdt.internal.core.eval;x-internal:=true,
@@ -46,7 +46,7 @@ Export-Package: org.eclipse.jdt.core,
  org.eclipse.jdt.internal.core.search.indexing;x-internal:=true,
  org.eclipse.jdt.internal.core.search.matching;x-internal:=true,
  org.eclipse.jdt.internal.core.search.processing;x-internal:=true,
- org.eclipse.jdt.internal.core.util;x-friends:="org.eclipse.jdt.apt.pluggable.core",
+ org.eclipse.jdt.internal.core.util;x-friends:="org.eclipse.jdt.apt.pluggable.core,org.eclipse.pde.api.tools",
  org.eclipse.jdt.internal.eval;x-internal:=true,
  org.eclipse.jdt.internal.formatter;x-internal:=true,
  org.eclipse.jdt.internal.formatter.align;x-internal:=true,
diff --git a/eclipse/plugins/org.eclipse.jdt.core/antadapter/org/eclipse/jdt/core/JDTCompilerAdapter.java b/eclipse/plugins/org.eclipse.jdt.core/antadapter/org/eclipse/jdt/core/JDTCompilerAdapter.java
index 44a8dac..966e175 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/antadapter/org/eclipse/jdt/core/JDTCompilerAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/antadapter/org/eclipse/jdt/core/JDTCompilerAdapter.java
@@ -119,8 +119,6 @@ public class JDTCompilerAdapter extends DefaultCompilerAdapter {
 			}
 		}
 
-		Path classpath = new Path(this.project);
-
 		/*
 		 * Eclipse compiler doesn't support -extdirs.
 		 * It is emulated using the classpath. We add extdirs entries after the
@@ -131,11 +129,17 @@ public class JDTCompilerAdapter extends DefaultCompilerAdapter {
 			cmd.createArgument().setPath(this.extdirs);
 		}
 
+		Path classpath = new Path(this.project);
 		/*
 		 * The java runtime is already handled, so we simply want to retrieve the
 		 * ant runtime and the compile classpath.
 		 */
 		classpath.append(getCompileClasspath());
+		/*
+		 * Set the classpath for the Eclipse compiler.
+		 */
+		cmd.createArgument().setValue("-classpath"); //$NON-NLS-1$
+		createClasspathArgument(cmd, classpath);
 
 		// For -sourcepath, use the "sourcepath" value if present.
 		// Otherwise default to the "srcdir" value.
@@ -164,12 +168,8 @@ public class JDTCompilerAdapter extends DefaultCompilerAdapter {
 		} else {
 			sourcepath = this.src;
 		}
-		classpath.append(sourcepath);
-		/*
-		 * Set the classpath for the Eclipse compiler.
-		 */
-		cmd.createArgument().setValue("-classpath"); //$NON-NLS-1$
-		createClasspathArgument(cmd, classpath);
+		cmd.createArgument().setValue("-sourcepath"); //$NON-NLS-1$
+		createClasspathArgument(cmd, sourcepath);
 
 		final String javaVersion = JavaEnvUtils.getJavaVersion();
 		String memoryParameterPrefix = javaVersion.equals(JavaEnvUtils.JAVA_1_1) ? "-J-" : "-J-X";//$NON-NLS-1$//$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/core/compiler/batch/BatchCompiler.java b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/core/compiler/batch/BatchCompiler.java
index 1a51c49..09d02cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/core/compiler/batch/BatchCompiler.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/core/compiler/batch/BatchCompiler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ public final class BatchCompiler {
 	 * @return whether the compilation completed successfully
 	 */
 	public static boolean compile(String commandLine, PrintWriter outWriter, PrintWriter errWriter, CompilationProgress progress) {
-		return Main.compile(Main.tokenize(commandLine), outWriter, errWriter, progress);
+		return compile(Main.tokenize(commandLine), outWriter, errWriter, progress);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathDirectory.java b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathDirectory.java
index 8735c70..b7b368f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathDirectory.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathDirectory.java
@@ -115,6 +115,13 @@ public NameEnvironmentAnswer findClass(char[] typeName, String qualifiedPackageN
 	if (binaryExists) {
 		try {
 			ClassFileReader reader = ClassFileReader.read(this.path + qualifiedBinaryFileName);
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=321115, package names are to be treated case sensitive.
+			String typeSearched = qualifiedPackageName.length() > 0 ? 
+					qualifiedPackageName.replace(File.separatorChar, '/') + "/" + fileName //$NON-NLS-1$
+					: fileName;
+			if (!CharOperation.equals(reader.getName(), typeSearched.toCharArray())) {
+				reader = null;
+			}
 			if (reader != null)
 				return new NameEnvironmentAnswer(
 						reader,
@@ -178,4 +185,7 @@ public char[] normalizedPath() {
 public String getPath() {
 	return this.path;
 }
+public int getMode() {
+	return this.mode;
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java
index 2ed77f1..332ccce 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -202,4 +202,7 @@ public String getPath() {
 	}
 	return this.path;
 }
+public int getMode() {
+	return BINARY;
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathLocation.java b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathLocation.java
index 690df37..f0c5c07 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathLocation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathLocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,4 +67,37 @@ public abstract class ClasspathLocation implements FileSystem.Classpath,
 		}
 		return this.accessRuleSet.getViolatedRestriction(qualifiedTypeName);
 	}
+	
+	public int getMode() {
+		return SOURCE | BINARY;
+	}
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + this.getMode();
+		result = prime * result + ((this.path == null) ? 0 : this.path.hashCode());
+		return result;
+	}
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		ClasspathLocation other = (ClasspathLocation) obj;
+		String localPath = this.getPath();
+		String otherPath = other.getPath();
+		if (localPath == null) {
+			if (otherPath != null)
+				return false;
+		} else if (!localPath.equals(otherPath))
+			return false;
+		if (this.getMode() != other.getMode())
+			return false;
+		return true;
+	}
+	public String getPath() {
+		return this.path;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathSourceJar.java b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathSourceJar.java
index d6a863a..fc94aa1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathSourceJar.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathSourceJar.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,4 +61,7 @@ public class ClasspathSourceJar extends ClasspathJar {
 	public NameEnvironmentAnswer findClass(char[] typeName, String qualifiedPackageName, String qualifiedBinaryFileName) {
 		return findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName, false);
 	}
+	public int getMode() {
+		return SOURCE;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/FileSystem.java b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/FileSystem.java
index ca3ca8d..0b0086f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/FileSystem.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/FileSystem.java
@@ -91,10 +91,9 @@ public class FileSystem implements INameEnvironment, SuffixConstants {
 			HashSet cache = new HashSet();
 			for (Iterator iterator = classpaths.iterator(); iterator.hasNext(); ) {
 				FileSystem.Classpath classpath = (FileSystem.Classpath) iterator.next();
-				String path = classpath.getPath();
-				if (!cache.contains(path)) {
+				if (!cache.contains(classpath)) {
 					normalizedClasspath.add(classpath);
-					cache.add(path);
+					cache.add(classpath);
 				}
 			}
 			return normalizedClasspath;
@@ -201,13 +200,33 @@ private void initializeKnownFileNames(String[] initialFileNames) {
 			fileName = CharOperation.subarray(fileName, 0, lastIndexOf);
 		}
 		CharOperation.replace(fileName, '\\', '/');
+		boolean globalPathMatches = false;
+		// the most nested path should be the selected one
 		for (int j = 0, max = this.classpaths.length; j < max; j++) {
 			char[] matchCandidate = this.classpaths[j].normalizedPath();
-			if (this.classpaths[j] instanceof  ClasspathDirectory &&
-					CharOperation.prefixEquals(matchCandidate, fileName) &&
-					(matchingPathName == null ||
-							matchCandidate.length < matchingPathName.length)) {
-				matchingPathName = matchCandidate;
+			boolean currentPathMatch = false;
+			if (this.classpaths[j] instanceof ClasspathDirectory
+					&& CharOperation.prefixEquals(matchCandidate, fileName)) {
+				currentPathMatch = true;
+				if (matchingPathName == null) {
+					matchingPathName = matchCandidate;
+				} else {
+					if (currentPathMatch) {
+						// we have a second source folder that matches the path of the source file
+						if (matchCandidate.length > matchingPathName.length) {
+							// we want to preserve the shortest possible path
+							matchingPathName = matchCandidate;
+						}
+					} else {
+						// we want to preserve the shortest possible path
+						if (!globalPathMatches && matchCandidate.length < matchingPathName.length) {
+							matchingPathName = matchCandidate;
+						}
+					}
+				}
+				if (currentPathMatch) {
+					globalPathMatches = true;
+				}
 			}
 		}
 		if (matchingPathName == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
index 36df1f4..3749c17 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -274,10 +274,11 @@ public class Main implements ProblemSeverities, SuffixConstants {
 					}
 				}
 			}
-			int length = unitSource == null ? 0 : unitSource.length;
+			int length;
 			if ((startPosition > endPosition)
 				|| ((startPosition < 0) && (endPosition < 0))
-				|| length == 0)
+				|| (unitSource == null)
+				|| (length = unitSource.length) == 0)
 				return Messages.problem_noSourceInformation;
 
 			StringBuffer errorBuffer = new StringBuffer();
@@ -337,10 +338,11 @@ public class Main implements ProblemSeverities, SuffixConstants {
 					}
 				}
 			}
-			int length = unitSource== null ? 0 : unitSource.length;
+			int length;
 			if ((startPosition > endPosition)
 					|| ((startPosition < 0) && (endPosition < 0))
-					|| (length <= 0)
+					|| (unitSource == null)
+					|| ((length = unitSource.length) <= 0)
 					|| (endPosition > length)) {
 				this.parameters.put(Logger.VALUE, Messages.problem_noSourceInformation);
 				this.parameters.put(Logger.SOURCE_START, "-1"); //$NON-NLS-1$
@@ -567,45 +569,57 @@ public class Main implements ProblemSeverities, SuffixConstants {
 
 		private void logExtraProblem(CategorizedProblem problem, int localErrorCount, int globalErrorCount) {
 			char[] originatingFileName = problem.getOriginatingFileName();
-			String fileName =
-				originatingFileName == null
-				? this.main.bind("requestor.noFileNameSpecified")//$NON-NLS-1$
-				: new String(originatingFileName);
-			if ((this.tagBits & Logger.EMACS) != 0) {
-				String result = fileName
-						+ ":" //$NON-NLS-1$
-						+ problem.getSourceLineNumber()
-						+ ": " //$NON-NLS-1$
-						+ (problem.isError() ? this.main.bind("output.emacs.error") : this.main.bind("output.emacs.warning")) //$NON-NLS-1$ //$NON-NLS-2$
-						+ ": " //$NON-NLS-1$
-						+ problem.getMessage();
-				this.printlnErr(result);
-				final String errorReportSource = errorReportSource(problem, null, this.tagBits);
-				this.printlnErr(errorReportSource);
+			if (originatingFileName == null) {
+				// simplified message output
+				if (problem.isError()) {
+					printErr(this.main.bind(
+								"requestor.extraerror", //$NON-NLS-1$
+								Integer.toString(globalErrorCount)));
+				} else {
+					// warning / mandatory warning / other
+					printErr(this.main.bind(
+							"requestor.extrawarning", //$NON-NLS-1$
+							Integer.toString(globalErrorCount)));
+				}
+				printErr(" "); //$NON-NLS-1$
+				this.printlnErr(problem.getMessage());
 			} else {
-				if (localErrorCount == 0) {
+				String fileName = new String(originatingFileName);
+				if ((this.tagBits & Logger.EMACS) != 0) {
+					String result = fileName
+							+ ":" //$NON-NLS-1$
+							+ problem.getSourceLineNumber()
+							+ ": " //$NON-NLS-1$
+							+ (problem.isError() ? this.main.bind("output.emacs.error") : this.main.bind("output.emacs.warning")) //$NON-NLS-1$ //$NON-NLS-2$
+							+ ": " //$NON-NLS-1$
+							+ problem.getMessage();
+					this.printlnErr(result);
+					final String errorReportSource = errorReportSource(problem, null, this.tagBits);
+					this.printlnErr(errorReportSource);
+				} else {
+					if (localErrorCount == 0) {
+						this.printlnErr("----------"); //$NON-NLS-1$
+					}
+					printErr(problem.isError() ?
+							this.main.bind(
+									"requestor.error", //$NON-NLS-1$
+									Integer.toString(globalErrorCount),
+									new String(fileName))
+									: this.main.bind(
+											"requestor.warning", //$NON-NLS-1$
+											Integer.toString(globalErrorCount),
+											new String(fileName)));
+					final String errorReportSource = errorReportSource(problem, null, 0);
+					this.printlnErr(errorReportSource);
+					this.printlnErr(problem.getMessage());
 					this.printlnErr("----------"); //$NON-NLS-1$
 				}
-				printErr(problem.isError() ?
-						this.main.bind(
-								"requestor.error", //$NON-NLS-1$
-								Integer.toString(globalErrorCount),
-								new String(fileName))
-								: this.main.bind(
-										"requestor.warning", //$NON-NLS-1$
-										Integer.toString(globalErrorCount),
-										new String(fileName)));
-				final String errorReportSource = errorReportSource(problem, null, 0);
-				this.printlnErr(errorReportSource);
-				this.printlnErr(problem.getMessage());
-				this.printlnErr("----------"); //$NON-NLS-1$
 			}
 		}
 
 		public void loggingExtraProblems(Main currentMain) {
 			ArrayList problems = currentMain.extraProblems;
 			final int count = problems.size();
-			int localErrorCount = 0;
 			int localProblemCount = 0;
 			if (count != 0) {
 				int errors = 0;
@@ -617,7 +631,6 @@ public class Main implements ProblemSeverities, SuffixConstants {
 						logExtraProblem(problem, localProblemCount, currentMain.globalProblemsCount);
 						localProblemCount++;
 						if (problem.isError()) {
-							localErrorCount++;
 							errors++;
 							currentMain.globalErrorsCount++;
 						} else if (problem.isWarning()) {
@@ -1328,7 +1341,7 @@ public class Main implements ProblemSeverities, SuffixConstants {
 
 	private PrintWriter err;
 
-	ArrayList extraProblems;
+	protected ArrayList extraProblems;
 	public final static String bundleName = "org.eclipse.jdt.internal.compiler.batch.messages"; //$NON-NLS-1$
 	// two uses: recognize 'none' in options; code the singleton none
 	// for the '-d none' option (wherever it may be found)
@@ -2949,8 +2962,10 @@ public IProblemFactory getProblemFactory() {
  * External API
  */
 protected ArrayList handleBootclasspath(ArrayList bootclasspaths, String customEncoding) {
- 	final int bootclasspathsSize = bootclasspaths == null ? 0 : bootclasspaths.size();
-	if (bootclasspathsSize != 0) {
+ 	final int bootclasspathsSize;
+	if ((bootclasspaths != null)
+		&& ((bootclasspathsSize = bootclasspaths.size()) != 0))
+	{
 		String[] paths = new String[bootclasspathsSize];
 		bootclasspaths.toArray(paths);
 		bootclasspaths.clear();
@@ -2975,8 +2990,10 @@ protected ArrayList handleBootclasspath(ArrayList bootclasspaths, String customE
  * External API
  */
 protected ArrayList handleClasspath(ArrayList classpaths, String customEncoding) {
-	final int classpathsSize = classpaths == null ? 0 : classpaths.size();
-	if (classpathsSize != 0) {
+	final int classpathsSize;
+	if ((classpaths != null)
+		&& ((classpathsSize = classpaths.size()) != 0))
+	{
 		String[] paths = new String[classpathsSize];
 		classpaths.toArray(paths);
 		classpaths.clear();
@@ -3230,6 +3247,10 @@ private void handleErrorOrWarningToken(String token, boolean isEnabling, int sev
 					CompilerOptions.OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation,
 					isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED);
 				return;
+			} else if (token.equals("all-static-method")) { //$NON-NLS-1$
+				setSeverity(CompilerOptions.OPTION_ReportMethodCanBeStatic, severity, isEnabling);
+				setSeverity(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, severity, isEnabling);
+				return;
 			}
 			break;
 		case 'b' :
@@ -3279,7 +3300,7 @@ private void handleErrorOrWarningToken(String token, boolean isEnabling, int sev
 			break;
 		case 'e' :
 			if (token.equals("enumSwitch") //$NON-NLS-1$
-					|| token.equals("incomplete-switch")) { //$NON-NLS-1$
+					|| token.equals("incomplete-switch") /*backward compatible*/) { //$NON-NLS-1$
 				setSeverity(CompilerOptions.OPTION_ReportIncompleteEnumSwitch, severity, isEnabling);
 				return;
 			} else if (token.equals("emptyBlock")) {//$NON-NLS-1$
@@ -3333,7 +3354,12 @@ private void handleErrorOrWarningToken(String token, boolean isEnabling, int sev
 			} else if (token.equals("intfRedundant") /*|| token.equals("redundantSuperinterface")*/) { //$NON-NLS-1$
 				setSeverity(CompilerOptions.OPTION_ReportRedundantSuperinterface, severity, isEnabling);
 				return;
-			}
+			} else if (token.equals("includeAssertNull")) { //$NON-NLS-1$
+				this.options.put(
+						CompilerOptions.OPTION_IncludeNullInfoFromAsserts,
+						isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED);
+				return;
+			} 
 			break;
 		case 'j' :
 			if (token.equals("javadoc")) {//$NON-NLS-1$
@@ -3456,6 +3482,9 @@ private void handleErrorOrWarningToken(String token, boolean isEnabling, int sev
 			} else if (token.equals("super")) { //$NON-NLS-1$
 				setSeverity(CompilerOptions.OPTION_ReportOverridingMethodWithoutSuperInvocation, severity, isEnabling);
 				return;
+			} else if (token.equals("static-method")) { //$NON-NLS-1$
+				setSeverity(CompilerOptions.OPTION_ReportMethodCanBeStatic, severity, isEnabling);
+				return;
 			}
 			break;
 		case 't' :
@@ -3527,6 +3556,11 @@ private void handleErrorOrWarningToken(String token, boolean isEnabling, int sev
 			} else if (token.equals("unusedTypeArgs")) { //$NON-NLS-1$
 				setSeverity(CompilerOptions.OPTION_ReportUnusedTypeArgumentsForMethodInvocation, severity, isEnabling);
 				return;
+			} else if (token.equals("unavoidableGenericProblems")) { //$NON-NLS-1$
+				this.options.put(
+					CompilerOptions.OPTION_ReportUnavoidableGenericTypeProblems,
+					isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED);
+				return;
 			}
 			break;
 		case 'v' :
@@ -3719,7 +3753,7 @@ public void performCompilation() {
 	}
 
 	if (this.extraProblems != null) {
-		this.logger.loggingExtraProblems(this);
+		loggingExtraProblems();
 		this.extraProblems = null;
 	}
 	if (this.compilerStats != null) {
@@ -3730,6 +3764,9 @@ public void performCompilation() {
 	// cleanup
 	environment.cleanup();
 }
+protected void loggingExtraProblems() {
+	this.logger.loggingExtraProblems(this);
+}
 public void printUsage() {
 	printUsage("misc.usage"); //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
index f5758b1..b7baabf 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties
@@ -15,7 +15,7 @@
 #Format: compiler.name = word1 word2 word3
 compiler.name = Eclipse Compiler for Java(TM)
 #Format: compiler.version = 0.XXX[, other words (don't forget the comma if adding other words)]
-compiler.version = 0.A76_R36x, 3.6.2
+compiler.version = 0.B61, 3.7.0
 compiler.copyright = Copyright IBM Corp 2000, 2010. All rights reserved.
 
 ### progress
@@ -104,6 +104,8 @@ configure.differentencoding=Found encoding {0}. A different encoding was specifi
 ### requestor
 requestor.error = {0}. ERROR in {1}
 requestor.warning = {0}. WARNING in {1}
+requestor.extraerror = {0}. ERROR:
+requestor.extrawarning = {0}. WARNING:
 requestor.notRetrieveErrorMessage = Cannot retrieve the error message for {0}
 requestor.noFileNameSpecified = (original file name is not available)
 
@@ -267,6 +269,7 @@ misc.usage.warn = {1} {2}\n\
 \      allDeprecation       deprecation including inside deprecated code\n\
 \      allJavadoc           invalid or missing javadoc\n\
 \      allOver-ann          all missing @Override annotations\n\
+\      all-static-method    all method can be declared as static warnings\n\
 \      assertIdentifier   + ''assert'' used as identifier\n\
 \      boxing               autoboxing conversion\n\
 \      charConcat         + char[] in String concat\n\
@@ -288,7 +291,8 @@ misc.usage.warn = {1} {2}\n\
 \      hashCode              missing hashCode() method when overriding equals()\n\
 \      hiding               macro for fieldHiding, localHiding, typeHiding and\n\
 \                           maskedCatchBlock\n\
-\      incomplete-switch    same as enumSwitch\n\
+\      includeAssertNull    raise null warnings for variables\n\
+\                           that got tainted in an assert expression\n\
 \      indirectStatic       indirect reference to static member\n\
 \      intfAnnotation     + annotation type used as super interface\n\
 \      intfNonInherited   + interface non-inherited method compatibility\n\
@@ -307,6 +311,7 @@ misc.usage.warn = {1} {2}\n\
 \      semicolon            unnecessary semicolon, empty statement\n\
 \      serial             + missing serialVersionUID\n\
 \      specialParamHiding   constructor or setter parameter hiding a field\n\
+\      static-method        method can be declared as static\n\
 \      static-access        macro for indirectStatic and staticReceiver\n\
 \      staticReceiver     + non-static reference to static member\n\
 \      super                overriding a method without making a super invocation\n\
@@ -317,6 +322,8 @@ misc.usage.warn = {1} {2}\n\
 \      syntheticAccess      synthetic access for innerclass\n\
 \      tasks(<tags separated by |>) tasks identified by tags inside comments\n\
 \      typeHiding         + type parameter hiding another type\n\
+\      unavoidableGenericProblems + ignore unavoidable type safety problems\n\
+\                                   due to raw APIs\n\
 \      unchecked          + unchecked type operation\n\
 \      unnecessaryElse      unnecessary else clause\n\
 \      unqualifiedField     unqualified reference to field\n\
diff --git a/eclipse/plugins/org.eclipse.jdt.core/build.properties b/eclipse/plugins/org.eclipse.jdt.core/build.properties
index ff33f90..ff520f9 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/build.properties
+++ b/eclipse/plugins/org.eclipse.jdt.core/build.properties
@@ -9,6 +9,7 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 customBuildCallbacks=customBuildCallbacks.xml
+customBuildCallbacks.inheritall=true
 bin.includes = plugin.xml,\
                plugin.properties,\
                about.html,\
diff --git a/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html b/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html
index 46d9ae9..a90e2ac 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/eclipse/plugins/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -3,14 +3,14 @@
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta name="Author" content="IBM">
-   <title>JDT/Core Release Notes 3.6</title>
+   <title>JDT/Core Release Notes 3.7</title>
    <link rel="stylesheet" href="jdt_core_style.css" charset="iso-8859-1" type="text/css">
 </head>
 <body text="#000000" bgcolor="#FFFFFF">
 <table border=0 cellspacing=5 cellpadding=2 width="100%" >
   <tr>
     <td align="left" width="72%" class="title1">
-      <font size="+3"><b>jdt core - build notes 3.6 stream</b></font>
+      <font size="+3"><b>jdt core - build notes 3.7 stream</b></font>
     </td>
   </tr>
   <tr><td align="left" width="72%" class="title2"><font size="-2">Java development tools core</font></td></tr>
@@ -21,12 +21,13 @@
 	  Here are the build notes for the Eclipse JDT/Core plug-in project
 	  <a href="http://www.eclipse.org/jdt/core/index.php"><b>org.eclipse.jdt.core</b></a>,
 	  describing <a href="https://bugs.eclipse.org/bugs" target=new>bug</a> resolution and substantial changes in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core"><b>HEAD</b></a> branch.
-	  For more information on 3.6 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#release-plan">JDT/Core release plan</a>,
-	  the next <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#milestone-plan">milestone plan</a>,
-	  the overall <a href="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_6.html">official plan</a>,
+	  For more information on 3.7 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.7/plan.php">JDT/Core release plan</a>,
+	  the next <a href="http://www.eclipse.org/jdt/core/r3.7/plan.php#current-milestone">milestone plan</a>,
+	  the overall <a href="http://www.eclipse.org/projects/project-plan.php?planurl=http://www.eclipse.org/eclipse/development/plans/eclipse_project_plan_3_7.xml">official plan</a>,
 	  or the <a href="http://www.eclipse.org/eclipse/platform-releng/buildSchedule.html">build schedule</a>.
-	  This present document covers all changes since Release 3.5 (also see a summary of <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/API_changes.html">API changes</a>).
+	  This present document covers all changes since Release 3.6 (also see a summary of <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/API_changes.html">API changes</a>).
 	  <br>Maintenance of previous releases of JDT/Core is performed in parallel branches:
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_6_maintenance">R3.6.x</a>,
 		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_5_maintenance">R3.5.x</a>,
 		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_4_maintenance">R3.4.x</a>,
 		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_3_maintenance">R3.3.x</a>,
@@ -40,2511 +41,1644 @@
 	</td>
   </tr>
 </table>
-<a name="v_A76_R36x"></a>
+<a name="v_B61"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.2 - February 8, 2011 - 3.6.2
-<br>Project org.eclipse.jdt.core v_A76_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A76_R36x">cvs</a>).
-<h2>What's new in this drop</h2>
-
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336544">336544</a>
-[regression][compiler] Source flagged as dead code incorrectly.
-
-<a name="v_A75_R36x"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6.2 - February 3, 2011
-<br>Project org.eclipse.jdt.core v_A75_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A75_R36x">cvs</a>).
-<h2>What's new in this drop</h2>
-<ul>
-<li>Bundle version has been increment to 3.6.2.qualifier.</li>
-</ul>
-
-<h3>Problem Reports Fixed</h3>
-
-<a name="v_A74_R36x"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6.2 - January 19, 2011
-<br>Project org.eclipse.jdt.core v_A74_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A74_R36x">cvs</a>).
+Eclipse SDK 3.7 - May 25, 2011 - 3.7.0
+<br>Project org.eclipse.jdt.core v_B61
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B61">cvs</a>).
 <h2>What's new in this drop</h2>
 <ul>
-<li>Only copyrights update with the previous version.</li>
+<li>Update batch compiler version to refer to 3.7.0 and not 3.7.0 RC2</li>
 </ul>
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329288">329288</a>
-Fetching parameter names literally hangs on a class with a lot of methods
 
-<a name="v_A73_R36x"></a>
+<a name="v_B60"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.2 - January 12, 2011
-<br>Project org.eclipse.jdt.core v_A73_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A73_R36x">cvs</a>).
+Eclipse SDK 3.7RC2 - May 19, 2011 - 3.7.0 RC2
+<br>Project org.eclipse.jdt.core v_B60
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B60">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327654">327654</a>
-FUP of bug 317264: Refactoring is not possible if the commons-lang.jar is in the path
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346002">346002</a>
+Import of User Library with invalid path hoses User Library Dialog -- can not fix
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340181">340181</a>
+Formatter from the command line breaks
 
-<a name="v_A72_R36x"></a>
+<a name="v_B59"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.2 - December 17, 2010
-<br>Project org.eclipse.jdt.core v_A72_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A72_R36x">cvs</a>).
+Eclipse SDK 3.7RC1 - May 12, 2011 - 3.7.0 RC1
+<br>Project org.eclipse.jdt.core v_B59
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B59">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323514">323514</a>
-[indexing] The Java Indexer is taking longer to run in eclipse 3.6 when opening projects
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345569">345569</a>
+FUP of bug 345334: CodeSnippetTest has lot of failures
 
-<a name="v_A71_R36x"></a>
+<a name="v_B58"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.2 - November 16, 2010
-<br>Project org.eclipse.jdt.core v_A71_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A71_R36x">cvs</a>).
+Eclipse SDK 3.7RC1 - May 11, 2011
+<br>Project org.eclipse.jdt.core v_B58
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B58">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330081">330081</a>
-[compiler] ArrayIndexOutOfBoundsException when Switched from C/C++ Perspective to Java Perspective
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345334">345334</a>
+CodeSnippet's run method is missing @Override annotation
 
-<a name="v_A70_R36x"></a>
+<a name="v_B57"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.2 - November 16, 2010
-<br>Project org.eclipse.jdt.core v_A70_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A70_R36x">cvs</a>).
+Eclipse SDK 3.7RC1 - May 10, 2011
+<br>Project org.eclipse.jdt.core v_B57
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B57">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328400">328400</a>
-TextEdit computed incorrectly for inserting annotation before package declaration
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326354">326354</a>
-[3.6][compiler][regression] Compiler in 3.6 and 3.6.1 generates bad code
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336451">336451</a>
+"Content Assist" does not complete normally on certain types
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324987">324987</a>
+[formatter] API compatibility problem with Annotation Newline options
 
-<a name="v_A69_R36x"></a>
+<a name="v_B56"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.2 - October 6, 2010
-<br>Project org.eclipse.jdt.core v_A69_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A69_R36x">cvs</a>).
+Eclipse SDK 3.7RC1 - May 6, 2011
+<br>Project org.eclipse.jdt.core v_B56
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B56">cvs</a>).
 <h2>What's new in this drop</h2>
+<ul>
+<li>Reverting fix for bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336648">336648</a></li>
+</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326434">326434</a>
-New issues with NPE refreshing external folders with 3.6.1
 
-<a name="v_A68_R36x"></a>
+<a name="v_B55"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - September 1, 2010 - 3.6.1
-<br>Project org.eclipse.jdt.core v_A68_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A68_R36x">cvs</a>).
+Eclipse SDK 3.7RC1 - May 5, 2011
+<br>Project org.eclipse.jdt.core v_B55
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B55">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324154">324154</a>
-NPE in FlowContext while building
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=90486">90486</a>
+Give more info when a dependency cycle is detected
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343865">343865</a>
+[assist] CompletionContext token start and end incorrectly returning 0
 
-<a name="v_A67_R36x"></a>
+<a name="v_B54"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - September 1, 2010
-<br>Project org.eclipse.jdt.core v_A67_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A67_R36x">cvs</a>).
+Eclipse SDK 3.7RC1 - May 4, 2011
+<br>Project org.eclipse.jdt.core v_B54
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B54">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320754">320754</a>
-[formatter] formatter:off/on tags does not work correctly
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264301">264301</a>
+AssertionFailedException resolving JavaProject classpath
 
-<a name="v_A66_R36x"></a>
+<a name="v_B53"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - August 27, 2010
-<br>Project org.eclipse.jdt.core v_A66_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A66_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 27, 2011 - 3.7.0 M7
+<br>Project org.eclipse.jdt.core v_B53
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B53">cvs</a>).
 <h2>What's new in this drop</h2>
-
+<ul>
+<li>Reverting fix for bug 292087: anonymous class in array member initializer confuses content assist</li>
+</ul>
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693">323693</a>
-[1.5][compiler] Compiler fails to diagnose name clash
 
-<a name="v_A65_R36x"></a>
+<a name="v_B52"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - August 25, 2010
-<br>Project org.eclipse.jdt.core v_A65_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A65_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 27, 2011
+<br>Project org.eclipse.jdt.core v_B52
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B52">cvs</a>).
 <h2>What's new in this drop</h2>
-
+<ul>
+<li>Only copyright updates have been released.</li>
+</ul>
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264">317264</a>
-[search] Refactoring is impossible with commons.lang added to project
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926">321926</a>
-Erroneously deems null check conditional branch to be dead code, and produces incorrect bytecode
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308402">308402</a>
-[index] PatternSearchJob ignores participant index entries
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320802">320802</a>
-ASTParser.createASTs(..) fails silently on multiple missing parameter types.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322154">322154</a>
-Compiler bug that does not occur in Galileo 3.5.2
 
-<a name="v_A64_R36x"></a>
+<a name="v_B51"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - August 11, 2010
-<br>Project org.eclipse.jdt.core v_A64_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A64_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 25, 2011
+<br>Project org.eclipse.jdt.core v_B51
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B51">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001">322001</a>
-[1.5][compiler] Name Clash error occurs
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320167">320167</a>
-Auto-Activation works only once
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339226">339226</a>
+Document assumptions about DefaultBindingResolver.newAstToOldAst
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343713">343713</a>
+[compiler] bogus line number in constructor of inner class in 1.5 compliance
 
-<a name="v_A63_R36x"></a>
+<a name="v_B50"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - July 28, 2010
-<br>Project org.eclipse.jdt.core v_A63_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A63_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 21, 2011
+<br>Project org.eclipse.jdt.core v_B50
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B50">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320414">320414</a>
-Compiler produces incorrect bytecode for null pointer check
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319603">319603</a>
-[1.5][compiler] eclipse fails with 2 generics methods with the same name while javac succeeds
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343607">343607</a>
+[APT] Improve output for javax.annotation.processing.Messager problems
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342">343342</a>
+[assist] Non constant variables, strings and methods are proposed inside case statements
 
-<a name="v_A62_R36x"></a>
+<a name="v_B49"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - July 21, 2010
-<br>Project org.eclipse.jdt.core v_A62_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A62_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 21, 2011
+<br>Project org.eclipse.jdt.core v_B49
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B49">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318020">318020</a>
-[compiler] wrong initialization flow info with if (true) throw... pattern in else block
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319900">319900</a>
-StringLiteral#setLiteralValue needlessly escapes apostrophes (')
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328281">328281</a>
+visibility leaks not detected when analyzing unused field in private class
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335986">335986</a>
+No expected event fired when removing a JAR file from a classpath container
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342671">342671</a>
+ClassCastException: org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding cannot be cast to org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
 
-<a name="v_A61_R36x"></a>
+<a name="v_B48"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - July 14, 2010
-<br>Project org.eclipse.jdt.core v_A61_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A61_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 19, 2011
+<br>Project org.eclipse.jdt.core v_B48
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B48">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306464">306464</a>
-NPE in ProblemReporter.missingTypeInMethod(ProblemReporter.java:5113)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317841">317841</a>
-[incremental build] unnecessary 'structural changes' due to annotation parameters
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337415">337415</a>
+External folders project is not created
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342936">342936</a>
+NPEs and inconsistencies when running jdt.compiler.tool.tests against Java 7
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342455">342455</a>
+AST swallows stars ('*') at end of {@code} and {@literal} Javadoc fragments
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342757">342757</a>
+ArrayIndexOutOfBoundsException in MethodInfoWithParameterAnnotations.getParameterAnnotations when generating method info for an inner class constructor with annotated parameter
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340691">340691</a>
+Syntax error leads to ClassCastException in ASTConverter
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342671">342671</a>
+ClassCastException: org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding cannot be cast to org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
 
-<a name="v_A60_R36x"></a>
+<a name="v_B47"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - July 7, 2010
-<br>Project org.eclipse.jdt.core v_A60_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A60_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 12, 2011
+<br>Project org.eclipse.jdt.core v_B47
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B47">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313153">313153</a>
-Too many blocked "Refreshing external folders" jobs (FUP of bug 302295)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317468">317468</a>
-Adding elements to an enum body with trailing comma generates bad code
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313668">313668</a>
-[search] Call hierarchy doesn't show all calls of the method in workspace
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317972">317972</a>
-Fix for wrong usages of affect* and effect*
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316889">316889</a>
-Internal compiler error: java.lang.NullPointerException with a specific use of recursive generics
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342300">342300</a>
+[null]Spurious "null pointer access" warning on unboxing
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341759">341759</a>
+NPE in ITypeBinding#getName() for intersection type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341499">341499</a>
+[compiler][null] allocate extra bits in all methods of UnconditionalFlowInfo
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342054">342054</a>
+ILocalVariable#isParameter() returns true for exception of catch clause
 
-<a name="v_A59_R36x"></a>
+<a name="v_B46"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6.1 - June 24, 2010
-<br>Project org.eclipse.jdt.core v_A59_R36x
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A59_R36x">cvs</a>).
+Eclipse SDK 3.7M7 - April 5, 2011
+<br>Project org.eclipse.jdt.core v_B46
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B46">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313651">313651</a>
-[formatter] format comments (differs between paste and save action)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315978">315978</a>
-Big regression, eclipse compiles my workspace in 3 mins instead of few seconds
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315732">315732</a>
-[formatter] NullPointerException (always) on inserting a custom template proposal into java code when "Use code formatter" is on
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316456">316456</a>
-[1.5][compiler] Annotation values can access private class members
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314830">314830</a>
-[compiler] Switching on a null expression doesn't always throw NullPointerException
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313825">313825</a>
-Erroneous local variable's problems reported at surrounding ParenthesizedExpression
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341475">341475</a>
+Eclipse doesn't show a "never read locally" warning if a private field serialVersionUID exists but the class does not implement Serializable
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334493">334493</a>
+[1.7][compiler] Difference in behavior with Javac7
 
-<a name="v_A58"></a>
+<a name="v_B45"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6 - June 3, 2010 - 3.6.0
-<br>Project org.eclipse.jdt.core v_A58
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A58">cvs</a>).
+Eclipse SDK 3.7M7 - March 29, 2011
+<br>Project org.eclipse.jdt.core v_B45
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B45">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315568">315568</a>
-improve Javadoc of SearchPattern#createPattern(String, int, int, int)
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=200827">200827</a>
+[spec] IElementChangedListener should mention where to register
 
-<a name="v_A57"></a>
+<a name="v_B44"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6RC4 - June 3, 2010 - 3.6.0 RC4
-<br>Project org.eclipse.jdt.core v_A57
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A57">cvs</a>).
+Eclipse SDK 3.7M7 - March 22, 2011
+<br>Project org.eclipse.jdt.core v_B44
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B44">cvs</a>).
 <h2>What's new in this drop</h2>
-<ul>
-<li>Use default disabling/enabling tags in the samples of the Javadoc comments
-of the formatter constants <code>FORMATTER_DISABLING_TAG</code> and
-<code>FORMATTER_ENABLING_TAG</code>.</li>
-<li>Fixed minor javadoc issues of <code>createStrictHierarchyScope()</code>.</li>
-</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314709">314709</a>
-Clarify -encoding <encoding name> in jdt_api_compile.htm
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339447">339447</a>
+synchronized access modifier retained on clone() bridge
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339891">339891</a>
+NPE when searching for method (with '*' wildcard character)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340029">340029</a>
+[1.5][compiler] Enum constructor that throws Exception reports a confusing error message
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338011">338011</a>
+COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS wrongly suppresses constructor parameter type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337962">337962</a>
+COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS misses reference to field from supertype
 
-<a name="v_A56"></a>
+<a name="v_B43"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6RC3 - May 27, 2010 - 3.6.0 RC3
-<br>Project org.eclipse.jdt.core v_A56
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A56">cvs</a>).
+Eclipse SDK 3.7M7 - March 15, 2011
+<br>Project org.eclipse.jdt.core v_B43
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B43">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313890">313890</a>
-Migration guide to 3.6 for containers with MANIFEST-referred entries
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313965">313965</a>
-Breaking change in classpath container API
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339337">339337</a>
+isLocal() in IType returns true for anonymous types
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337751">337751</a>
+COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS misses references in conditional expression
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339870">339870</a>
+[1.7] Bad list of subclasses in Statement AST node
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339913">339913</a>
+[compiler] Misleading error message for annotations inside a method body
 
-<a name="v_A55"></a>
+<a name="v_B42"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6RC3 - May 25, 2010
-<br>Project org.eclipse.jdt.core v_A55
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A55">cvs</a>).
+Eclipse SDK 3.7M6 - March 9, 2011 - 3.7.0 M6
+<br>Project org.eclipse.jdt.core v_B42
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B42">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313706">313706</a>
-Replace ie. with i.e. in jdt.core documentation
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339250">339250</a>
+[null] Incorrect redundant null check warning on a String
 
-<a name="v_A54"></a>
+<a name="v_B41"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6RC2 - May 20, 2010 - 3.6.0 RC2
-<br>Project org.eclipse.jdt.core v_A54
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A54">cvs</a>).
+Eclipse SDK 3.7M6 - March 8, 2011
+<br>Project org.eclipse.jdt.core v_B41
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B41">cvs</a>).
 <h2>What's new in this drop</h2>
-<ul>
-<li>
-Added a new preference to force the formatter to try to keep nested expressions on one line.
-<p>
-This new preference is controlled with the option:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_WRAP_OUTER_EXPRESSIONS_WHEN_NESTED</code>
-<pre>
-/**
- * FORMATTER / Option to wrap outer expressions in nested expressions
- *     - option id:         "org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested"
- *     - possible values:   { TRUE, FALSE }
- *     - default:           TRUE
- *
- * This option changes the formatter behavior when nested method calls are encountered.
- * Since 3.6, the formatter tries to wrap outermost method calls first to have a better output.
- * For example, let's say we are using the Eclipse built-in profile with a max line width=40+space for tab policy.
- * Then consider the following snippet:
- *
- * public class X01 {
- *     void test() {
- *         foo(bar(1, 2, 3, 4), bar(5, 6, 7, 8));
- *     }
- * }
- *
- * With this new strategy, the formatter will wrap the line earlier, between the arguments of the message call
- * for this example, and then it will allow to keep each nested call on a single line.
- * Hence, the output will be:
- *
- * public class X01 {
- *     void test() {
- *         foo(bar(1, 2, 3, 4),
- *             bar(5, 6, 7, 8));
- *     }
- * }
- *
- * Important notes:
- * 1. This new behavior is automatically activated (i.e. the default value for this preference is {@link #TRUE}).
- *    If the backward compatibility regarding previous versions' formatter behavior (i.e. before 3.6 version) is necessary,
- *    then the preference needs to be set to {@link #FALSE} to retrieve the previous formatter behavior.
- * 2. The new strategy currently only applies to nested method calls, but might be extended to other nested expressions in future versions
- * 
- * @see #TRUE
- * @see #FALSE
- * @since 3.6
- */
-</pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313524">313524</a> for more details.
-</li>
-</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313524">313524</a>
-[formatter] Add preference for improved lines wrapping in nested method calls
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313109">313109</a>
- at SuppressWarnings on multiple locals is marked unnecessary if any local is never used
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339139">339139</a>
+[compiler] HEAD contents of org.eclipse.wst.jsdt.core doesn't compile anymore
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338649">338649</a>
+[perfs] Regression on FullSourceWorkspaceModelTests#testInitJDTPlugin
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339128">339128</a>
+[Doc] Sort statements and expressions inside DOM documentation for both abstract classes org.eclipse.jdt.core.dom.Expressionn and org.eclipse.jdt.core.dom.Statement
 
-<a name="v_A53"></a>
+<a name="v_B40"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6RC1 - May 12, 2010 - 3.6.0 RC1
-<br>Project org.eclipse.jdt.core v_A53
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A53">cvs</a>).
+Eclipse SDK 3.7M6 - March 6, 2011
+<br>Project org.eclipse.jdt.core v_B40
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B40">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312326">312326</a>
-IllegalArgumentException using open type dialog
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310159">310159</a>
-Hang in JavaModel.getExternalTarget(JavaModel.java:333)
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326950">326950</a>
+[compiler][null]Do not optimize code generation based on static analysis (dead code)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324178">324178</a>
+[null] ConditionalExpression.nullStatus(..) doesn't take into account the analysis of condition itself
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338006">338006</a>
+IJavaProject#getPackageFragmentRoots() should return roots in order
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338234">338234</a>
+[compiler] Missing warning for uninitialized variable in dead code
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336428">336428</a>
+[compiler][null] bogus warning "redundant null check" in condition of do {} while() loop
 
-<a name="v_A52"></a>
+<a name="v_B39"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6RC1 - May 11, 2010
-<br>Project org.eclipse.jdt.core v_A52
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A52">cvs</a>).
+Eclipse SDK 3.7M6 - March 1, 2011
+<br>Project org.eclipse.jdt.core v_B39
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B39">cvs</a>).
 <h2>What's new in this drop</h2>
+<ul>
+<li>Added new constant on org.eclipse.jdt.core.IJavaProject to provide the value of the classpath file path. See details in bug
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241598">241598</a>.
+</li>
+</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157847">157847</a>
-NPE in WildcardBinding.computeUniqueKey during code assist
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311849">311849</a>
-[quick fix] @SuppressWarnings does not work as expected inside a for loop
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338118">338118</a>
+[compiler] CastExpression type should be changed to be a type reference and not an expression
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=171019">171019</a>
+[javadoc][select] F3 on {@inheritDoc} tag should navigate to target javadoc
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=222188">222188</a>
+[javadoc] Incorrect usage of inner type not reported
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338303">338303</a>
+[compiler][null] Warning about Redundant assignment conflicts with definite assignment analysis
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337868">337868</a>
+[compiler][model] incomplete support for package-info.java when using SearchableEnvironment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337964">337964</a>
+[DOM] code that would definitely cause NPE if executed
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241598">241598</a>
+[API] Constant needed for .classpath
 
-<a name="v_A51"></a>
+<a name="v_B38"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6RC1 - May 8, 2010
-<br>Project org.eclipse.jdt.core v_A51
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A51">cvs</a>).
-<h2>What's new in this drop</h2>
-
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306170">306170</a>
-[perfs] Regression for FullSourceWorkspaceTypeHierarchyTests#testPerfAllTypes()
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298844">298844</a>
-[formatter] New lines in empty method body wrong behavior
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311864">311864</a>
-[formatter] NPE with empty {@code }
-
-<a name="v_A50"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6RC1 - May 6, 2010
-<br>Project org.eclipse.jdt.core v_A50
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A50">cvs</a>).
+Eclipse SDK 3.7M6 - February 22, 2011
+<br>Project org.eclipse.jdt.core v_B38
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B38">cvs</a>).
 <h2>What's new in this drop</h2>
 <ul>
-<li>
-Added a new preference to switch on/off the usage of the disabling/enabling tags of the formatter.
-<p>
-This new preference is controlled with the option:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_USE_ON_OFF_TAGS</code>
+<li>Added a new API to ease the retrieval of method parameter's annotations (see bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334783">334783</a> for details):
 <pre>
 /**
- * FORMATTER / Option to use the disabling and enabling tags defined respectively by the {@link #FORMATTER_DISABLING_TAG} and the {@link #FORMATTER_ENABLING_TAG} options.
- *     - option id:         "org.eclipse.jdt.core.formatter.use_on_off_tags"
- *     - possible values:   TRUE / FALSE
- *     - default:           FALSE
+ * Returns the parameters of this method.
+ * An empty array is returned, if the method has no parameters.
+ * For binary types, associated source is used to retrieve the name range,
+ * source range and the flags.
+ * These local variables can be used to retrieve the parameter annotations.
  * 
- * @since 3.6
+ * @return the parameters of this method
+ * @throws JavaModelException if this element does not exist or if an
+ *      exception occurs while accessing its corresponding resource.
+ * @since 3.7
  */
+ILocalVariable[] getParameters() throws JavaModelException;
 </pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311582">311582</a> for more details.
 </li>
 </ul>
-
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311617">311617</a>
-[formatter] provide default tags to enable/disable formatter
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311582">311582</a>
-[formatter] Master switch to enable/disable on/off tags
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307040">307040</a>
-Search Job with HierarchyScope on Object does not cancel
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302295">302295</a>
-After associating source folder with rt.jar project refresh takes exceedingly long time.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311048">311048</a>
-AbortCompilation propagated from CompilationUnitProblemFinder.process()
-
-<a name="v_A49"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6RC1 - May 4, 2010
-<br>Project org.eclipse.jdt.core v_A49
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A49">cvs</a>).
-<h2>What's new in this drop</h2>
-
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310811">310811</a>
-[perfs] Big regression on FullSourceWorkspaceFormatterTests#testFormatDefaultBigFile()
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334783">334783</a>
+[API] Add new API to ease the retrieval of the parameter annotations for an IMethod
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336046">336046</a>
+Source attachment not recovered when importing Projects
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313870">313870</a>
+Wrong warnings on Java.Compiler.Errors/Warnings "Redundant null check"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337275">337275</a>
+Incorrect/outdated javadoc for org.eclipse.jdt.core.dom.Expression
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337093">337093</a>
+[compiler][generics] Javac-warning on vararg missing in Eclipse
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336934">336934</a>
+[compiler] NPE in Scope.getTypeOrPackage
 
-<a name="v_A48"></a>
+<a name="v_B37"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M7 - April 25, 2010 - 3.6.0 M7
-<br>Project org.eclipse.jdt.core v_A48
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A48">cvs</a>).
+Eclipse SDK 3.7M6 - February 15, 2011
+<br>Project org.eclipse.jdt.core v_B37
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B37">cvs</a>).
 <h2>What's new in this drop</h2>
+<ul>
+<li>Adding a new token "javadoc" for @suppressWarnings to remove all warnings related to javadoc.</li>
+</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310330">310330</a>
-Add multiple encoding support for the batch compiler
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335751">335751</a>
+[1.7][compiler] Cycle inheritance in type arguments is not detected
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335309">335309</a>
+[formatter] FUP of bug 332843: add regression test
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334622">334622</a>
+Eclipse compiler allows access to private fields for typed variables
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274737">274737</a>
+Relative Classpath entries should not be resolved relative to the workspace
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=179566">179566</a>
+[compiler] Support of @SuppressWarnings for JavaDoc Warnings
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336821">336821</a>
+Javadoc reference to constructor does not work without parameter list
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331138">331138</a>
+ASTRewrite#replace(..) does not consider the TargetSourceRangeComputer
 
-<a name="v_A47"></a>
+<a name="v_B36"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M7 - April 25, 2010
-<br>Project org.eclipse.jdt.core v_A47
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A47">cvs</a>).
+Eclipse SDK 3.7M6 - February 8, 2011
+<br>Project org.eclipse.jdt.core v_B36
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B36">cvs</a>).
 <h2>What's new in this drop</h2>
+<ul>
+<li>All JDT/Core projects (tests included) have been set to force strict compatibility between the JRE used for the project
+and the BREE defined for the project.</li>
+</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309835">309835</a>
-[formatter] adds blank lines on each run
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310213">310213</a>
-AIOOBE in IndexSelector.initializeIndexLocations()
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309966">309966</a>
-IType#getKey() does not work for unresolved local ITypes
-
-<a name="v_A46"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M7 - April 23, 2010
-<br>Project org.eclipse.jdt.core v_A46
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A46">cvs</a>).
-<h2>What's new in this drop</h2>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336544">336544</a>
+[regression][compiler] Source flagged as dead code incorrectly.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=189459">189459</a>
+[1.6][compiler] Doc comment support should not be systematically activated while processing annotations
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332838">332838</a>
+Bogus potential null pointer access warning (regression; works with 3.6)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334377">334377</a>
+[1.5][compiler] Invalid 'type mismatch' error in conditional expression (if-else construct behaves correct)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335780">335780</a>
+Compiler says a method can be potentially static but this method contains 'this'
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310747">310747</a>
+[content assist] Irrelevant proposals while completing inside array initializer.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845">335845</a>
+[compiler] compiler wrongly suggests to add a static qualifier to a method
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335602">335602</a>
+[search] Java indexing thread can index data outside of workspace
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59891">59891</a>
-[formatter] improve lines wrapping in nested method calls
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306172">306172</a>
-[perfs] Invalid test duration for FullSourceWorkspaceTypeHierarchyTests#testPerSuperTypes()
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267091">267091</a>
-[content assist] After 'implements' interface members are not proposed
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261534">261534</a>
-content assist after instanceof should also work after &&
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308980">308980</a>
-[content assist]An initializer inside a non-array field declaration confuses content assist
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310002">310002</a>
-ToolFactory.createScanner(..) should use workspace compliance
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291528">291528</a>
-Synchronize project warning/error settings to build.properties
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309787">309787</a>
-Extension point "org.eclipse.jdt.core.codeFormatter" is ignored
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244820">244820</a>
-Content assist after 'instanceof' should also work in assignment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309706">309706</a>
-[formatter] doesn't work when code has three semicolons side by side
-
-<a name="v_A45"></a>
+<a name="v_B35"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M7 - April 20, 2010
-<br>Project org.eclipse.jdt.core v_A45
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A45">cvs</a>).
+Eclipse SDK 3.7M5 - January 25, 2011 - 3.7.0 M5
+<br>Project org.eclipse.jdt.core v_B35
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B35">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305037">305037</a>
-missing story for attributes of referenced JARs in classpath containers
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305116">305116</a>
-[index] Improve performance of indexes results tables
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236306">236306</a>
-[content assist] for method invocation in variable initializer should not guess variable
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302865">302865</a>
-Issue with "import" a class and "import static" a method with the same name
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309022">309022</a>
-[ImportRewrite] Add Import wrongly removes import for nested type
-
-<a name="v_A44"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M7 - April 13, 2010
-<br>Project org.eclipse.jdt.core v_A44
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A44">cvs</a>).
-<h2>What's new in this drop</h2>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324189">324189</a>
+ [search] Method declaration search returns false results (suffix match on type name)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327143">327143</a>
+IndexManager should not accept new jobs if the processing thread is null
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308754">308754</a>
-CompilationUnit.rewrite messes up .class-literal in annotation instead of changing class to interface
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306519">306519</a>
-JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject) should allow null project
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308428">308428</a>
-Possible problem to get corrections with surrogate characters
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307295">307295</a>
-Task tags and task priorities
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308476">308476</a>
-Test ClasspathTests#testBug308150 fails on all platforms
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305043">305043</a>
-Internal error during classpath init
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307486">307486</a>
-DBCS3.6: Fail to propose Ext-B labels with content assist in Java Editor
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308256">308256</a>
-DiagnosticListener always supplies Diagnostic.getSource()==null
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308356">308356</a>
-codeSelect(..) doesn't work for local variable with surrogate in name
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308245">308245</a>
-Valid code fails to compile in 3.6
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307885">307885</a>
-Error message for instanceof <parameterized type> wrong arguments
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=249704">249704</a>
-[code assist] autocomplete with anonymous classes does stop working
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308150">308150</a>
-JAR with invalid Class-Path entry in MANIFEST.MF crashes the project
-
-<a name="v_A43"></a>
+<a name="v_B34"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M7 - April 6, 2010
-<br>Project org.eclipse.jdt.core v_A43
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A43">cvs</a>).
+Eclipse SDK 3.7M5 - January 24, 2011
+<br>Project org.eclipse.jdt.core v_B34
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B34">cvs</a>).
 <h2>What's new in this drop</h2>
-
+<ul>
+<li>New code formatter option to preserve existing white space between code and line comments.
+<br>See details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282988">282988</a>:
+<pre>
+	/**
+	 * FORMATTER / Option to control whether the white space between code and line comments should be preserved or replaced with a single space
+	 *     - option id:         "org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments"
+	 *     - possible values:   { TRUE, FALSE }
+	 *     - default:           FALSE
+	 *
+	 * @see #TRUE
+	 * @see #FALSE
+	 * @since 3.7
+	 */
+	public final static String FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT = "org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments";
+</pre>
+</li>
+</ul>
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306223">306223</a>
-[search] Searching for annotation references report all type references
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292087">292087</a>
-anonymous class in array member initializer confuses content assist
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307337">307337</a>
-[content assist] Default constructor should not be proposed for anonymous types
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306568">306568</a>
-[ImportRewrite] Add Import does not work for nested type when package is on-demand imported
-
-<a name="v_A42"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M7 - March 30, 2010
-<br>Project org.eclipse.jdt.core v_A42
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A42">cvs</a>).
-<h2>What's new in this drop</h2>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335093">335093</a>
+[compiler][null] minimal hook for future null annotation support
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334119">334119</a>
+AIOOBE in BindingKeyParser.parseInnerType (was: Copy Qualified Name throws ArrayIndexOutOfBoundsException)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282988">282988</a>
+[formatter] Option to align single-line comments in a column
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334652">334652</a>
+Javadoc content not found for non-static inner class constructors
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=136091">136091</a>
+Cannot access Javadoc location over http
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333089">333089</a>
+[compiler][null]AIOOBE while assigning variable a potentially null value in try/finally
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=202634">202634</a>
-[codeassist] missing super proposal in specific source
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304394">304394</a>
-IJavaElement#getAttachedJavadoc(IProgressMonitor) should support referenced entries
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305122">305122</a>
-FUP of 302949
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306917">306917</a>
-Exception occurred during compilation unit conversion:
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306196">306196</a>
-[search] NPE while searching for annotation references in rt.jar of JRE 6.0
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288658">288658</a>
-[compiler][1.5] Annotations visibility issues
-
-<a name="v_A41"></a>
+<a name="v_B33"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M7 - March 23, 2010
-<br>Project org.eclipse.jdt.core v_A41
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A41">cvs</a>).
+Eclipse SDK 3.7M5 - January 18, 2011
+<br>Project org.eclipse.jdt.core v_B33
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B33">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305518">305518</a>
-[formatter] Line inside <pre> tag is wrongly indented by one space when starting just after the star
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295825">295825</a>
-[formatter] Commentaries are running away after formatting are used
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306477">306477</a>
-Indexer(?) fails to recognise enum as a type
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305830">305830</a>
-[formatter] block comment should not be formatted when a non-nls tag is on the same line
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300031">300031</a>
-The deprecation warning for a type should not include the package name
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306078">306078</a>
-Navigate to Inaccessible Field
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209479">209479</a>
-infinite loop in BindingKey when signatures are invalid
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293558">293558</a>
-[quick assist] "Invert if statement" fails when comment follows
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=182459">182459</a>
-[compiler] Inconsistent error range for unresolved field
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=192233">192233</a>
-[AST] CompilationUnit.rewrite() removes whitespace between return type and method name
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306073">306073</a>
-ASTRewrite Javadoc wrongly talks about getTargetSourceRangeComputer
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305001">305001</a>
-Exception occurred in listener of Java element change notification
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305590">305590</a>
-Redundant null check false-positive
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305755">305755</a>
-Remove deprecated API that has been added for 3.6
-
-<a name="v_A40"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325418">325418</a>
+[search] Search for method declarations returns spurious potential matches for anonymous classes
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332744">332744</a>
+Generated model code doesn't compile with J2SE-1.4 execution environment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334315">334315</a>
+[compiler] Problem types with missing superclass or superinterfaces should use Object for missing types
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333956">333956</a>
+CompilerOptions#warningOptionNames(): OPTION_ReportRawTypeReference missing
+
+<a name="v_B32"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M7 - March 16, 2010
-<br>Project org.eclipse.jdt.core v_A40
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A40">cvs</a>).
+Eclipse SDK 3.7M5 - January 11, 2011
+<br>Project org.eclipse.jdt.core v_B32
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B32">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305371">305371</a>
-[formatter] Unexpected indentation of line comment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305281">305281</a>
-[formatter] Turning off formatting changes comment's formatting
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327654">327654</a>
+FUP of bug 317264: Refactoring is not possible if the commons-lang.jar is in the path
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333710">333710</a>
+[DOM] wrong JavaElement for recovered ITypeBinding
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333669">333669</a>
+[DOM] Incorrect signature for type arguments in test case from bug 333360
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333360">333360</a>
+[DOM] eclipse fails to create array binding in this situation
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332423">332423</a>
+[1.5][compiler] ClassCastException when compiling against scala-libary.jar
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332268">332268</a>
+[assist] Allow proposals for static fields in initializers of fields being declared textually in advance
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331334">331334</a>
+[1.5][compiler] "The code for the static initializer is exceeding the 65535 bytes limit" in enum
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333487">333487</a>
+[formatter] Incorrectly ordered method arguments in Scribe
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332843">332843</a>
+[formatter] format save action fails with SIOOBE
 
-<a name="v_A39"></a>
+<a name="v_B31"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M6 - March 9, 2010 - 3.6.0 M6
-<br>Project org.eclipse.jdt.core v_A39
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A39">cvs</a>).
+Eclipse SDK 3.7M5 - January 4, 2011
+<br>Project org.eclipse.jdt.core v_B31
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B31">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289057">289057</a>
-Java Content Assist taking too long
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303830">303830</a>
-"X cannot be resolved or is not a field" erroneously reported
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235658">235658</a>
-Valid identifier unrecognized.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304841">304841</a>
-[search] NPE in IndexSelector.initializeIndexLocations
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295866">295866</a>
-FormalParameter in JDT DOM/AST documentation
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304817">304817</a>
-Review documentation of ASTParser class
-
-<a name="v_A38"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M6 - March 5, 2010
-<br>Project org.eclipse.jdt.core v_A38
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A38">cvs</a>).
-<h2>What's new in this drop</h2>
-<ul>
-<li>
-Added two new preferences to allow to disable the formatter in a section of the code.
-These two preference define respectively the tag which disables the formatting
-and the tag which re-enable it.
-<p>
-These new preferences are controlled with the options:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_DISABLING_TAG</code>
-<code>DefaultCodeFormatterConstants.FORMATTER_ENABLING_TAG</code>
-<pre>
-/**
- * FORMATTER / Option to define the tag to put in a comment to disable the formatting.
- * See the {@link #FORMATTER_ENABLING_TAG} option to re-enable it.
- *     - option id:         "org.eclipse.jdt.core.formatter.disabling_tag"
- *     - possible values:   String, with constraints mentioned below
- *     - default:           ""
- * 
- * Note that:
- * 
- * 1. The tag name will be trimmed. Hence if it does contain white spaces
- *    at the beginning or at the end, they will not be taken into account while
- *    searching for the tag in the comments
- * 2. If a tag is starting with a letter or digit, then it cannot be leaded by
- *    another letter or digit to be recognized
- *    (<b><i>"ToDisableFormatter"</i></b> will not be recognized as a disabling tag
- *    <b><i>"DisableFormatter"</i></b>, but <b><i>"Re:DisableFormatter"</i></b>
- *    will be detected for either tag <b><i>"DisableFormatter"</i></b> or
- *    <b><i>":DisableFormatter"</i></b>).
- *    Respectively, a tag ending with a letter or digit cannot be followed by a letter
- *    or digit to be recognized (<b><i>"DisableFormatter1"</i></b> will not be
- *    recognized as a disabling tag <b><i>"DisableFormatter"</i></b>, but
- *    <b><i>"DisableFormatter:1"</i></b> will be detected either for tag
- *    <b><i>"DisableFormatter"</i></b> or <b><i>"DisableFormatter:"</i></b>)
- * 3. As soon as the formatter encounters the defined disabling tag, it stops to
- *    format the code from the beginning of the comment including this tag. If it
- *    was already disabled, the tag has no special effect.
- *    For example, the second defined enabling tag "<b>disable-formatter</b>"
- *    in the following snippet is not necessary as the formatter was already disabled
- *    since the first one:
- *     class X {
- *     // disable-formatter
- *     void foo1() {}
- *     // disable-formatter
- *     void foo2() {}
- *     void bar1() {}
- *     void bar2() {}
- *     }
- *
- * 4. If no enabling tag is found by the formatter after the disabling tag, then
- *    the end of the snippet won't be formatted.
- *    For example, when a disabling tag is put at the beginning of the code, then
- *    the entire content of a compilation unit is not formatted:
- *     // disable-formatter
- *     class X {
- *     void foo1() {}
- *     void foo2() {}
- *     void bar1() {}
- *     void bar2() {}
- *     }
- * 
- * 5. If a mix of disabling and enabling tags is done in the same comment, then
- *    the formatter will only take into account the last encountered tag in the
- *    comment.
- *    For example, in the following snippet, the formatter will be disabled after
- *    the comment:
- *     class X {
- *     /*
- *      * This is a comment with a mix of disabling and enabling tags:
- *      *  - <b>disable-formatter</b>
- *      *  - <b>enable-formatter</b>
- *      *  - <b>disable-formatter</b>
- *      * The formatter will stop to format from the beginning of this comment...
- *      */
- *     void foo() {}
- *     void bar() {}
- *     }
- * 
- * 6. The tag cannot include newline character (i.e. '\n') but it can have white spaces.
- *    E.g. "<b>format: off</b>" is a valid disabling tag
- *    In the future, newlines may be used to support multiple disabling tags.
- * 
- * @since 3.6
- */
-
-/**
- * FORMATTER / Option to define the tag to put in a comment to re-enable the
- * formatting after it has been disabled (see {@link #FORMATTER_DISABLING_TAG})
- *     - option id:         "org.eclipse.jdt.core.formatter.enabling_tag"
- *     - possible values:   String, with constraints mentioned below
- *     - default:           ""
- * 
- * Note that:
- * 
- * 1. The tag name will be trimmed. Hence if it does contain white spaces
- *    at the beginning or at the end, they will not be taken into account while
- *    searching for the tag in the comments
- * 2. If a tag is starting with a letter or digit, then it cannot be leaded by
- *    another letter or digit to be recognized
- *    (<b>"ReEnableFormatter"</b> will not be recognized as an enabling tag
- *    <b><i>"EnableFormatter"</i></b>, but <b><i>"Re:EnableFormatter"</i></b>
- *    will be detected for either tag <b><i>"EnableFormatter"</i></b> or
- *    <b><i>":EnableFormatter"</i></b>).
- *    Respectively, a tag ending with a letter or digit cannot be followed by a letter
- *    or digit to be recognized (<b><i>"EnableFormatter1"</i></b> will not be
- *    recognized as an enabling tag <b><i>"EnableFormatter"</i></b>, but
- *    <b><i>"EnableFormatter:1"</i></b> will be detected either for tag
- *    <b><i>"EnableFormatter"</i></b> or <b><i>"EnableFormatter:"</i></b>)
- * 3. As soon as the formatter encounters the defined enabling tag, it re-starts
- *    to format the code just after the comment including this tag. If it was already
- *    active, i.e. already re-enabled or never disabled, the tag has no special effect.
- *    For example, the defined enabling tag "<b>enable-formatter</b>"
- *    in the following snippet is not necessary as the formatter has never been
- *    disabled:
- *     class X {
- *     void foo1() {}
- *     void foo2() {}
- *     // enable-formatter
- *     void bar1() {}
- *     void bar2() {}
- *     }
- * 
- *    Or, in the following other snippet, the second enabling tag is not necessary as
- *    the formatting will have been re-enabled by the first one:
- *     class X {
- *     // disable-formatter
- *     void foo1() {}
- *     void foo2() {}
- *     // enable-formatter
- *     void bar1() {}
- *     // enable-formatter
- *     void bar2() {}
- *     }
- * 
- * 4. If a mix of disabling and enabling tags is done in the same comment, then
- *    the formatter will only take into account the last encountered tag in the
- *    comment.
- *    For example, in the following snippet, the formatter will be re-enabled after
- *    the comment:
- *     // disable-formatter
- *     class X {
- *     /*
- *      * This is a comment with a mix of disabling and enabling tags:
- *      *  - <b>enable-formatter</b>
- *      *  - <b>disable-formatter</b>
- *      *  - <b>enable-formatter</b>
- *      * The formatter will restart to format after this comment...
- *      */
- *     void foo() {}
- *     void bar() {}
- *     }
- * 
- * 5. The tag cannot include newline character (i.e. '\n') but it can have white spaces.
- *    E.g. "<b>format: on</b>" is a valid enabling tag
- *    In the future, newlines may be used to support multiple enabling tags.
- * 
- * @since 3.6
- */
-</pre>
-<p>For example, the following snippet:</p>
-<pre>
-public class Test {
-/* disable-formatter */
-void     foo(    )      {	
-				//      unformatted       area  	  
-}
-/* enable-formatter */
-void     bar(    )      {	
-				//      formatted       area  	  
-}
-}
-</pre>
-formatted with disabling tags = "disable-formatter" and enabling tags
-= "enable-formatter" produces the following output:
-<pre>
-public class Test {
-
-/* disable-formatter *	
-void     foo(    )      {
-				//      unformatted       area  	  
-}
-/* enable-formatter *
-	void bar() {
-		// formatted area
-	}
-}
-</pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=27079">27079</a> for more details.
-</li>
-</ul>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317039">317039</a>
+[formatter] Code Formatter fails on inner class source indentation
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330313">330313</a>
+[formatter] 'Never join already wrapped lines' formatter option does correctly indent
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329227">329227</a>
+Usage of broken quicksort algorithm in jdt.internal.compiler.util.Util
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332359">332359</a>
+org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding should return number of fields directly
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332818">332818</a>
+[formatter] Java formatter, Blank Lines tab, only 1st line indented when multiple lines is set
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332877">332877</a>
+[formatter] line comment wrongly put on a new line
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=129804">129804</a>
-[dom] Local variable bindings from ASTParser#createASTs(.., String[], .., ..) have no declaring method
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304705">304705</a>
-[formatter] Unexpected indentation of wrapped line comments when 'Never indent line comment on first column' preference is checked
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304656">304656</a>
-StringIndexOutOfBoundsException when using JDT dom methods to process sourcefile
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304506">304506</a>
-Task descriptions always have a space after the tag
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304081">304081</a>
-IJavaProject#isOnClasspath(IJavaElement) returns false for type from referenced JAR
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304122">304122</a>
-TypeBindings.getAnnotations() breaks interface
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304416">304416</a>
-VerifyError after compiling without preserve all locals
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304529">304529</a>
-[formatter] NPE when either the disabling or the enabling tag is not defined
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=27079">27079</a>
-Tags for disabling/enabling code formatter (feature)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304316">304316</a>
-NPE when javadoc URL is invalid
-
-<a name="v_A37"></a>
+<a name="v_B30"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M6 - March 2, 2010
-<br>Project org.eclipse.jdt.core v_A37
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A37">cvs</a>).
+Eclipse SDK 3.7M5 - December 21, 2010
+<br>Project org.eclipse.jdt.core v_B30
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B30">cvs</a>).
 <h2>What's new in this drop</h2>
 <ul>
-<li>Added new configurable option to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>:<br>
+<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_MISSING_STATIC_ON_METHOD added to raise warning or error for a method
+    which qualifies to be declared as <code>static</code>, but not been declared as one.(see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322581">318682</a>):
 <pre>
-/**
- * Compiler option ID: Further Determining the Effect of @SuppressWarnings if also
- * COMPILER_PB_SUPPRESS_WARNINGS is enabled.
- * When enabled, the @SuppressWarnings annotation can additionally be used to suppress 
- * optional compiler diagnostics that have been configured as ERROR.
- * When disabled, all @SuppressWarnings annotations only affects warnings.
- *
- * Option id: "org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors"
- * Possible values: { "enabled", "disabled" }
- * Default: "disabled"
- * 
- * @since 3.6
- * @category CompilerOptionID
- */
-public static final String COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS = PLUGIN_ID + ".compiler.problem.suppressOptionalErrors";
-</pre>
-</li>
-<li>
-Added a new formatter preferences to align method declaration.
-<p>
-This new preference is controlled with the option:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION</code>
-<pre>
-/**
- * FORMATTER / Option for alignment of method declaration
- *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_method_declaration"
- *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
- *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
- * 
- * @see #createAlignmentValue(boolean, int, int)
- * @since 3.6
- */
-</pre>
-<p>For example, the following snippet:</p>
-<pre>
-public class Test {
-public final synchronized java.lang.String a_method_which_has_a_very_long_name() {
-return null;
-}
-}
-</pre>
-formatted with this preference activated as 'Wrap only when necessary', will
-produce the following output:
-<pre>
-public class Test {
-	public final synchronized java.lang.String
-			a_method_which_has_a_very_long_name() {
-		return null;
-	}
-}
-</pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a> for more details.
-</li>
-<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>. See the bug for details.
-<pre>
-org.eclipse.jdt.core.ITypeParameter
 	/**
-	 * Returns the signatures for this type parameter's bounds. The type parameter may have 
-	 * been declared as part of a type or a method. The signatures represent only the individual 
-	 * bounds and do not include the type variable name or the <code>extends</code> keyword.  
-	 * The signatures may be either unresolved (for source types) or resolved (for binary types). 
-	 * See {@link Signature} for details.
+	 * Compiler option ID: Reporting a method that qualifies as static, but not declared static.
+	 * When enabled, the compiler will issue an error or a warning if a method has
+	 * not been declared as <code>static</code>, even though it qualifies as one.
 	 * 
-	 * @return the signatures for the bounds of this formal type parameter
-	 * @throws JavaModelException
-	 *             if this element does not exist or if an exception occurs while accessing its corresponding resource.
-	 * @see Signature
-	 * @since 3.6
+	 * Option id:<code>"org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic"</code>
+	 * Possible values:<code>{ "error", "warning", "ignore" }</code>
+	 * Default:<code>"ignore"</code>
+	 * 
+	 * @since 3.7
+	 * @category CompilerOptionID
 	 */
-	String[] getBoundsSignatures() throws JavaModelException;
-</pre>
-</li>
-<li>
-Added a new formatter preference to enable or disable the formatting of line
-comments that start on the first column.<br>
-Note that the indentation of line comments will also be disabled when activating
-this option, as otherwise the formatter could not produce stable outputs...
-<p>
-The default is to format these comments to have a backward compatible behavior.
-</p><p>
-This new preferences is controlled with the options:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN</code>
-<pre>
-/**
- * FORMATTER / Option to format line comments that start on the first column
- *     - option id:         "org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column"
- *     - possible values:   { TRUE, FALSE }
- *     - default:           TRUE
- * 
- * Note that this option is ignored if either the
- * {@link #FORMATTER_COMMENT_FORMAT_LINE_COMMENT} option has been set to
- * {@link #FALSE} or the formatter is created with the mode
- * {@link ToolFactory#M_FORMAT_NEW}.
- * 
- * @see #TRUE
- * @see #FALSE
- * @see ToolFactory#createCodeFormatter(Map, int)
- * @since 3.6
- */
-</pre>
-<p>For example, the following snippet:</p>
-<pre>
-public class X01 {
-//    int	a  =   1;
-//    int	b  =   2;
-}
-</pre>
-will be untouched by the formatter if both options are activated.
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a> for more details.
+	public static final String COMPILER_PB_MISSING_STATIC_ON_METHOD = PLUGIN_ID + ".compiler.problem.reportMethodCanBeStatic";
+	</pre>
 </li>
-<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>. See the bug for details.
+<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD added to raise warning or error for a method
+    which may qualify to be declared as <code>static</code> when another method doesn't override it,
+    but not been declared as one.(see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322581">318682</a>):
 <pre>
-org.eclipse.jdt.core.IClasspathEntry
-	/**
-	 * Returns the classpath entry that is making a reference to this classpath entry. For entry kinds 
-	 * {@link #CPE_LIBRARY}, the return value is the entry that is representing the JAR that includes 
-	 * <code>this</code> in the MANIFEST.MF file's Class-Path section. For entry kinds other than 
-	 * {@link #CPE_LIBRARY}, this returns <code>null</code>. For those entries that are on the raw classpath already, 
-	 * this returns <code>null</code>.
-	 *
-	 * It is possible that multiple library entries refer to the same entry
-	 * via the MANIFEST.MF file. In those cases, this method returns the first classpath entry 
-	 * that appears in the raw classpath. However, this does not mean that the other referencing 
-	 * entries do not relate to their referenced entries. 
-	 * See {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)} for 
-	 * more details.
-	 * 
-	 * @return the classpath entry that is referencing this entry or <code>null</code> if 
-	 * 		not applicable.
-	 * @since 3.6
-	 */
-	IClasspathEntry getReferencingEntry();
-
-
-org.eclipse.jdt.core.IJavaProject
 	/**
-	 * Works similar to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)} and 
-	 * additionally allows persisting the given array of referenced entries for this project.
-	 * The referenced entries and their attributes are stored in the .classpath file of this 
-	 * project. For details on referenced entries, see 
-	 * {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)}
-	 * and {@link IClasspathEntry#getReferencingEntry()}.
+	 * Compiler option ID: Reporting a method that may qualify as static, but not declared static.
+	 * When enabled, the compiler will issue an error or a warning if a method has
+	 * not been declared as <code>static</code>, even though it may qualify as one,
+	 * when another method doesn't override it.
 	 * 
-	 * Since the referenced entries are stored in the .classpath file, clients can store additional 
-	 * information that belong to these entries and retrieve them across sessions, though the referenced
-	 * entries themselves may not be present in the raw classpath. By passing a <code>null</code>
-	 * referencedEntries, clients can choose not to modify the already persisted referenced entries,
-	 * which is fully equivalent to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)}.
-	 * If an empty array is passed as referencedEntries, the already persisted referenced entries, 
-	 * if any, will be cleared. 
-	 * 
-	 * If there are duplicates of a referenced entry or if any of the <code>referencedEntries</code> 
-	 * is already present in the raw classpath(<code>entries</code>) those referenced entries will 
-	 * be excluded and not be persisted.
-	 *
-	 * @param entries a list of classpath entries
-	 * @param referencedEntries the list of referenced classpath entries to be persisted
-	 * @param outputLocation the default output location
-	 * @param monitor the given progress monitor
-	 * @exception JavaModelException if the classpath could not be set. Reasons include:
-	 *  	This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
-	 *  	The classpath is being modified during resource change event notification (CORE_EXCEPTION)
-	 *  	The classpath failed the validation check as defined by {@link JavaConventions#validateClasspath(IJavaProject, IClasspathEntry[], IPath)}
-	 * @see IClasspathEntry
-	 * @see #getReferencedClasspathEntries()
-	 * @since 3.6
-	 */
-	void setRawClasspath(IClasspathEntry[] entries, IClasspathEntry[] referencedEntries, IPath outputLocation,
-			IProgressMonitor monitor) throws JavaModelException;
-
-	/**
-	 * Returns the list of referenced classpath entries stored in the .classpath file of <code>this</code> 
-	 * java project. Clients can store the referenced classpath entries using 
-	 * {@link #setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, IProgressMonitor)}
-	 * If the client has not stored any referenced entries for this project, an empty array is returned.
-	 *
-	 * @throws JavaModelException
-	 * @return an array of referenced classpath entries stored for this java project or an empty array if none
-	 * 			stored earlier.
-	 * @since 3.6
-	 */
-	IClasspathEntry[] getReferencedClasspathEntries() throws JavaModelException;
-	
-
-org.eclipse.jdt.core.IPackageFragmentRoot
-	/**
-	 * Returns the first resolved classpath entry that corresponds to this package fragment root.
-	 * A resolved classpath entry is said to correspond to a root if the path of the resolved
-	 * entry is equal to the root's path.
+	 * Option id:<code>"org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic"</code>
+	 * Possible values:<code>{ "error", "warning", "ignore" }</code>
+	 * Default:<code>"ignore"</code>
 	 * 
-	 * @return the first resolved classpath entry that corresponds to this package fragment root
-	 * @throws JavaModelException if this element does not exist or if an
-	 *		exception occurs while accessing its corresponding resource. 
-	 * @since 3.6
+	 * @since 3.7
+	 * @category CompilerOptionID
 	 */
-	IClasspathEntry getResolvedClasspathEntry() throws JavaModelException;
-	
-
-org.eclipse.jdt.core.JavaCore
-	/**
-	 * Returns an array of classpath entries that are referenced directly or indirectly 
-	 * by a given classpath entry. For the entry kind {@link IClasspathEntry#CPE_LIBRARY}, 
-	 * the method returns the libraries that are included in the Class-Path section of 
-	 * the MANIFEST.MF file. If a referenced JAR file has further references to other library 
-	 * entries, they are processed recursively and added to the list. For entry kinds other 
-	 * than {@link IClasspathEntry#CPE_LIBRARY}, this method returns an empty array.
-	 *
-	 * If a referenced entry has already been stored 
-	 * in the given project's .classpath, the stored attributes are populated in the corresponding
-	 * referenced entry. For more details on storing referenced entries see
-	 * see {@link IJavaProject#setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, 
-	 * IProgressMonitor)}. 
-	 * 
-	 * @param libraryEntry the library entry whose referenced entries are sought 
-	 * @param project project where the persisted referenced entries to be retrieved from
-	 * @return an array of classpath entries that are referenced directly or indirectly by the given entry. 
-	 * 			If not applicable, returns an empty array.
-	 * @since 3.6
-	 */
-	public static IClasspathEntry[] getReferencedClasspathEntries(IClasspathEntry libraryEntry, IJavaProject project);	
+	public static final String COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD = PLUGIN_ID + ".compiler.problem.reportMethodCanBePotentiallyStatic";
 </pre>
 </li>
-</ul>
-
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>
-New API is needed to better identify referenced jars in the Class-Path: entry
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a>
-[formatter] Automatic formatting single line comments is incoherent among tools
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248897">248897</a>
-[1.5][compiler] Wrong warning 'The local variable 'var' is never read'.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304031">304031</a>
-Unused @SuppressWarnings(..) not flagged when suppressed problem is set to Error
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>
-Add option to automatically promote all warnings to errors
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303810">303810</a>
-Compact boolean fields on FlowContext
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251227">251227</a>
-[compiler] Fup of bug 115814, comparing doubles should not be flagged
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268798">268798</a>
-[1.5][compiler] Eclipse 3.5M5/6 produces new compiler errors with generics
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303448">303448</a>
-Wrong code generation optimization when assert condition is false
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303776">303776</a>
-Member types imports are removed too aggressively
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302949">302949</a>
-JavaModelManager hangs accessing the nonChainingJars set
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>
-[model] API request: ITypeParameter#getBoundsSignatures() or #getSignature()
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=253896">253896</a>
-[compiler][null] wrong "Null comparison always yields false" problem for auto-unboxing
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a>
-[formatter] Does not line-break method declaration exception with parameters
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303480">303480</a>
-[1.5][compiler] CCE: org.eclipse.jdt.internal.compiler.parser.RecoveredBlock cannot be cast to org.eclipse.jdt.internal.compiler.parser.RecoveredType
-
-<a name="v_A36"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M6 - February 23, 2010
-<br>Project org.eclipse.jdt.core v_A36
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A36">cvs</a>).
-<h2>What's new in this drop</h2>
-<ul>
-<li>
-Added a new formatter preferences to align annotation arguments (i.e. element-value pairs).
-<p>
-This new preference is controlled with the option:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION</code>
-<pre>
-/**
- * FORMATTER / Option for alignment of arguments in annotation
- *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation"
- *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
- *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
- * 
- * @see #createAlignmentValue(boolean, int, int)
- * @since 3.6
- */
-</pre>
-<p>For example, the following snippet:</p>
+<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS added to give the user control over whether forced and unavoidable generic type problems should be reported by the compiler or not (see details in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322817">bug 322817</a>):
 <pre>
- at MyAnnot(value1 = "this is an example", value2 = "of an annotation", value3 = "with several arguments", value4 = "which may need to be wrapped")
-public class Test {
-}
-</pre>
-formatted with this preference activated, will produce the following output
-while using the <code>Eclipse [built-in]</code> profile:
-<pre>
- at MyAnnot(value1 = "this is an example", value2 = "of an annotation",
-		value3 = "with several arguments",
-		value4 = "which may need to be wrapped")
-public class Test {
-}
-</pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a> for more details.
-</li>
-<li>In order to get bindings outside the Eclipse environment, the following methods has been added on the ASTParser class.
-<br>See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a> for details.<br>
-<pre>
-org.eclipse.jdt.core.dom.ASTParser
 	/**
-	 * Set the environment that can be used when no IJavaProject are available.
-	 * 
-	 * The user has to be sure to include all required types on the classpaths for binary types
-	 * or on the sourcepaths for source types to resolve the given source code.
-	 * All classpath and sourcepath entries are absolute paths.
-	 * If sourcepaths contain units using a specific encoding (not the platform encoding), then the
-	 * given encodings must be set. If the given encodings is set, its length must
-	 * match the length of the sourcepaths parameter or an IllegalArgumentException will be thrown.
-	 * If encodings is not null, the given sourcepathEntries must not be null.
-	 * 
-	 * @param classpathEntries the given classpath entries to be used to resolve bindings
-	 * @param sourcepathEntries the given sourcepath entries to be used to resolve bindings
-	 * @param encodings the encodings of the corresponding sourcepath entries or null if the platform encoding
-	 * can be used.
-	 * @param includeRunningVMBootclasspath true if the bootclasspath of the running VM must be prepended to the
-	 * given classpath and false if the bootclasspath of the running VM should be ignored.
-	 * @throws IllegalArgumentException if the size of the given encodings is not equals to the size of the given
-	 * sourcepathEntries
-	 * @since 3.6
-	 */
-	public void setEnvironment(String[] classpathEntries, String[] sourcepathEntries, String[] encodings, boolean includeRunningVMBootclasspath);
-	
-	/**
-	 * Creates ASTs for a batch of compilation units. When bindings are being resolved, processing a
-	 * batch of compilation units is more efficient because much of the work involved in resolving 
-	 * bindings can be shared. 
-	 *
-	 * When bindings are being resolved, all compilation units are resolved 
-	 * using the same environment, which must be set beforehand with 
-	 * {@link #setEnvironment(String[], String[], String[], boolean) setEnvironment}.
-	 * The compilation units are processed one at a time in no specified order. 
-	 * For each of the compilation units in turn,
-	 *  - {@link ASTParser#createAST(IProgressMonitor) ASTParser.createAST} is called to parse it 
-	 *           and create a corresponding AST. The calls to {@link ASTParser#createAST(IProgressMonitor) ASTParser.createAST} 
-	 *           all employ the same settings.</li>
-	 *  - {@link FileASTRequestor#acceptAST(String, CompilationUnit) FileASTRequestor.acceptAST} is called passing
-	 *           the compilation unit path and the corresponding AST to <code>requestor</code>. The compilation unit path is the same
-	 *           path that is passed into the given <code>sourceFilePaths</code> parameter.
-	 *
-	 * Note only ASTs from the given compilation units are reported
-	 * to the requestor. If additional compilation units are required to
-	 * resolve the original ones, the corresponding ASTs are <b>not</b>
-	 * reported to the requestor.
-	 * 
-	 * Note also the following parser parameters are used, regardless of what
-	 * may have been specified:
-	 *  - The {@linkplain #setKind(int) parser kind} is <code>K_COMPILATION_UNIT</code>
-	 *  - The {@linkplain #setSourceRange(int,int) source range} is <code>(0, -1)</code>
-	 *  - The {@linkplain #setFocalPosition(int) focal position} is not set
+	 * Compiler option ID: Reporting of Unavoidable Generic Type Problems.
+	 * When enabled, the compiler will issue an error or warning even when it detects a generic type problem
+	 * that could not have been avoided by the programmer. As an example, a type may be forced to use raw types
+	 * in its method signatures and return types because the methods it overrides from a super type are declared to
+	 * use raw types in the first place.
 	 *
-	 * The <code>bindingKeys</code> parameter specifies bindings keys
-	 * ({@link IBinding#getKey()}) that are to be looked up. These keys may
-	 * be for elements either inside or outside the set of compilation
-	 * units being processed. When bindings are being resolved,
-	 * the keys and corresponding bindings (or <code>null</code> if none) are
-	 * passed to {@link FileASTRequestor#acceptBinding(String, IBinding) FileASTRequestor.acceptBinding}. Note that binding keys
-	 * for elements outside the set of compilation units being processed are looked up
-	 * after all {@link FileASTRequestor#acceptAST(String, CompilationUnit) ASTRequestor.acceptAST}
-	 * callbacks have been made.
-	 * Binding keys for elements inside the set of compilation units being processed
-	 * are looked up and reported right after the corresponding
-	 * {@link FileASTRequestor#acceptAST(String, CompilationUnit) FileASTRequestor.acceptAST} callback has been made.
-	 * No {@link FileASTRequestor#acceptBinding(String, IBinding) FileASTRequestor.acceptBinding} callbacks are made unless
-	 * bindings are being resolved.
+	 * Option id:<code>"org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems"</code>
+	 * Possible values:<code>{ "enabled", "disabled" }</code>
+	 * Default:<code>"enabled"</code>
 	 *
-	 * A successful call to this method returns all settings to their
-	 * default values so the object is ready to be reused.
-	 * 
-	 * The given <code>encodings</code> are used to properly parse the given source units. If the platform encoding is sufficient,
-	 * then the given encodings can be set to <code>null</code>.
-	 *
-	 * @param sourceFilePaths the compilation units to create ASTs for
-	 * @param encodings the given encoding for the source units
-	 * @param bindingKeys the binding keys to create bindings for
-	 * @param requestor the AST requestor that collects abstract syntax trees and bindings
-	 * @param monitor the progress monitor used to report progress and request cancellation,
-	 *   or <code>null</code> if none
-	 * @exception IllegalStateException if the settings provided
-	 * are insufficient, contradictory, or otherwise unsupported
-	 * @since 3.6
-	 */
-	 public void createASTs(String[] sourceFilePaths, String[] encodings, String[] bindingKeys, FileASTRequestor requestor, IProgressMonitor monitor)
-</pre>
-</li>
-<li>
-Added two new formatter preferences to condense block and javadoc comments.
-<p>
-These new preferences are controlled respectively with the options:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES</code><br>
-<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES</code>
-<pre>
-/**
- * FORMATTER / Option to control whether block comments will have new lines at boundaries
- *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries"
- *     - possible values:   { TRUE, FALSE }
- *     - default:           TRUE
- * 
- * @see #TRUE
- * @see #FALSE
- * @since 3.6
- */
-
-/**
- * FORMATTER / Option to control whether javadoc comments will have new lines at boundaries
- *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries"
- *     - possible values:   { TRUE, FALSE }
- *     - default:           TRUE
- * 
- * @see #TRUE
- * @see #FALSE
- * @since 3.6
- */
- </pre>
-<p>For example, the following snippet:</p>
-<pre>
-public class X {
-	/*
-	 * This block comment after formatting will no longer use a new line
-	 * at the beginning and at the end of the comment...
+	 * @since 3.7
+	 * @category CompilerOptionID
 	 */
-	void foo() {
-	}
-	/**
-	 * This javadoc comment after formatting will no longer use a new line
-	 * at the beginning and at the end of the comment...
-	 */
-	void bar() {
-	}
-}
-</pre>
-formatted with both the options set to FALSE, will produce the following output:
-<pre>
-public class X {
-	/* This block comment after formatting will no longer use a new line at the
-	 * beginning and at the end of the comment... */
-	void foo() {
-	}
-
-	/** This javadoc comment after formatting will no longer use a new line at
-	 * the beginning and at the end of the comment... */
-	void bar() {
-	}
-}
+	public static final String COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS = PLUGIN_ID + ".compiler.problem.unavoidableGenericTypeProblems";
 </pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a> for more details.
-</li>
-<li>
-The <code>CodeFormatter.F_INCLUDE_COMMENT</code> flag now works for all kind
-of snippet while using the formatter.<br>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a> for more details.
-</li>
-<li>
-Added a new formatter preferences to insert a new line after a label.
-<p>
-This new preference is controlled with the option:</p>
-<code>DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_LABEL</code>
-<pre>
-/**
- * FORMATTER / Option to insert a new line after a label
- *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_label"
- *     - possible values:   { INSERT, DO_NOT_INSERT }
- *     - default:           DO_NOT_INSERT
- *
- * @see JavaCore#INSERT
- * @see JavaCore#DO_NOT_INSERT
- * @since 3.6
- */
-</pre>
-<p>For example, the following snippet:</p>
-<pre>
-public class X {
-	void foo() {
-		LABEL:for (int i = 0; i < 10; i++) {
-		}
-	}
-}
-</pre>
-formatted with this preference activated, will produce the following output:
-<pre>
-public class X {
-	void foo() {
-		LABEL:
-		for (int i = 0; i < 10; i++) {
-		}
-	}
-}
-</pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a> for more details.
 </li>
 </ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298362">298362</a>
-[1.5][compiler] Compiler returns java.lang.Object instead of generic type T when javac returns T
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281655">281655</a>
-[formatter] "Never join lines" does not work for annotations.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a>
-[formatter] Java annotation formatting
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a>
-[format] Condensed block comment formatting
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a>
-[formatter] The comments flags should work for all kinds of snippet
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294360">294360</a>
-Duplicate entries in Classpath Resolution when importing dependencies from parent project
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a>
-[DOM] Binding Resolutions for projects outside of Eclipse workspace
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150409">150409</a>
-[compiler] AST does not expose method bindings for non-visible inherited field
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302358">302358</a>
-Compiler finds wrong method for method invocation with generics
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302919">302919</a>
-misreported cast Error when mixing generic and raw class in nested class
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a>
-[formatter] Add  option: "add new line after label"
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287939">287939</a>
-[code assist] The instanceof and the auto cast feature should also work for an assignment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303108">303108</a>
-[import rewrite] ImportRewrite#removeImport(String) does not work with setUseContextToFilterImplicitImports(true)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295619">295619</a>
-Test failure caused by a timing issue in M20091118-0800
-
-<a name="v_A35"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327471">327471</a>
+java.io.EOFException at java.io.DataInputStream.readInt(Unknown Source)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332619">332619</a>
+Small error in IType#codeComplete Javadoc example
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682">318682</a>
+Enhancement request: Warning if no fields are used and the method is still not static
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322817">322817</a>
+Compiler option to ignore unavoidable type safety problems due to raw APIs
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332451">332451</a>
+Javadoc cleanup in SearchEngine#createJavaSearchScope(IJavaElement[], int)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332637">332637</a>
+Dead Code detection removing code that isn't dead
+
+<a name="v_B29"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M6 - February 16, 2010
-<br>Project org.eclipse.jdt.core v_A35
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A35">cvs</a>).
+Eclipse SDK 3.7M5 - December 14, 2010
+<br>Project org.eclipse.jdt.core v_B29
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B29">cvs</a>).
 <h2>What's new in this drop</h2>
-<ul>
-<li>In order to fix bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a> and
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>, a new API was added to preserve the existing pre-3.6 behavior for existing clients:<br>
-<pre>
-	/**
-	 * Sets whether a context should be used to properly filter implicit imports.
-	 *
-	 * By default, the option is disabled to preserve pre-3.6 behavior.
-	 *
-	 *
-	 * When this option is set, the context passed to the addImport*(...) methods is used to determine
-	 * whether an import can be filtered because the type is implicitly visible. Note that too many imports
-	 * may be kept if this option is set and addImport*(...) methods are called without a context.
-	 *
-	 * 
-	 * @param useContextToFilterImplicitImports the given setting
-	 * 
-	 * @see #setFilterImplicitImports(boolean)
-	 * @since 3.6
-	 */
-	public void setUseContextToFilterImplicitImports(boolean useContextToFilterImplicitImports);
-</pre>
-</li>
-</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302455">302455</a>
-java.lang.ClassCastException in secondary types removal
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102279">102279</a>
-[search] method reference performance depends on method name
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236814">236814</a>
-[jsr199] EclipseCompiler#getTask does not respect its contract when its first argument is null
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302552">302552</a>
-[formatter] Formatting qualified invocations can be broken when the Line Wrapping policy forces element to be on a new line
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302587">302587</a>
-Encoding/decoding of problem arguments in Marker fails if argument contains #
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301438">301438</a>
-Eclipse hangs when attempting to refactor using the "change method signature"
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260381">260381</a>
-[formatter] Javadoc formatter breaks {@code ...} tags.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302446">302446</a>
-[compiler] Regression in if statement flow analysis related to null checks
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>
-[import rewrite] Organize Imports produces wrong order of imports
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a>
-[organize imports] Organize imports removes needed import statement.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302379">302379</a>
-[search] JavaSearchTests.testZIPArchive2() test failed in I20100209-0800
-
-<a name="v_A34"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331736">331736</a>
+[dom] tests should check for malformed nodes - may catch a parser bug
+
+<a name="v_B28"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M6 - February 9, 2010
-<br>Project org.eclipse.jdt.core v_A34
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A34">cvs</a>).
+Eclipse SDK 3.7M4 - December 6, 2010 - 3.7.0 M4
+<br>Project org.eclipse.jdt.core v_B28
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B28">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302123">302123</a>
-[formatter] AssertionFailedException occurs while formatting a source containing the specific javadoc comment /** ***/
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300379">300379</a>
-[formatter] Fup of bug 287833
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=250056">250056</a>
-[compiler][null] Another assert and "Redundant null check"
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301683">301683</a>
-Annotations are broken when native methods are present in a class
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300734">300734</a>
-Extract temp misses duplicate occurrence.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289560">289560</a>
-Eclipse hangs after modifying user libraries
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301562">301562</a>
-[JSR269] Error in EclipseFileManager.collectAllMatchingFiles
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298637">298637</a>
-Could not retrieve declared methods (NPE in ParameterizedTypeBinding.resolve)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294057">294057</a>
-[1.5][compiler] Imports not resolved correctly with generics and inner interfaces
-
-<a name="v_A33"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331872">331872</a>
+[compiler] NPE in Scope.createArrayType when attempting qualified access from type parameter
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331770">331770</a>
+org.eclipse.jdt.core.tests.model.JavaSearchBugsTests.testBug323514a() is failing in  N20101202-2000
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331632">331632</a>
+FUP of 323514: Add performance tracking test for scenario
+
+<a name="v_B27"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M6 - February 2, 2010
-<br>Project org.eclipse.jdt.core v_A33
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A33">cvs</a>).
+Eclipse SDK 3.7M4 - December 4, 2010 - 3.7.0 M4
+<br>Project org.eclipse.jdt.core v_B27
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B27">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300136">300136</a>
-classpathentry OPTIONAL attribute not honored for var entries
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300723">300723</a>
-Fup of bug 235783
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367">324367</a>
+IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) returns empty list
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327899">327899</a>
+include the Ant compiler adapter in ecj JAR
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331446">331446</a>
+[1.4/1.5] Unexpected ambiguous error for 1.4 project
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323514">323514</a>
+[indexing] The Java Indexer is taking longer to run in eclipse 3.6 when opening projects
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329671">329671</a>
+Regression: arg0,1,2... parameter names are cached
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305172">305172</a>
+[common navigator] Project Explorer not fully updating with jar classpath container changes.
 
-<a name="v_A32a"></a>
+<a name="v_B26"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M5 - January 21, 2010 - 3.6.0 M5
-<br>Project org.eclipse.jdt.core v_A32a
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A32a">cvs</a>).
+Eclipse SDK 3.7M4 - November 30, 2010
+<br>Project org.eclipse.jdt.core v_B26
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B26">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300133">300133</a>
-[1.5][compiler] Local classes inside enum constants generate default constructor without implicit constructor call
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300440">300440</a>
-icu dependency needs to be udpated
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299900">299900</a>
-[null]Missing potential null warnings for variable on the right of an OR conditional expression
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293917">293917</a>
-Invalid 'potential null access' warning reports
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252379">252379</a>
-Organize imports deletes needed static import.
-
-<a name="v_A31"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331271">331271</a>
+[assist] Reconsider assumption to filter not yet declared fields from being proposed
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329663">329663</a>
+[type hierarchy] Interfaces duplicated in type hierarchy on two packages from multiple projects
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328362">328362</a>
+[formatter] Format regions does not format as expected
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331120">331120</a>
+Improvements to Signature API
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299384">299384</a>
+codeSelect does not find declaration of constructor with generic parameter type when referenced from 1.4 code
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329822">329822</a>
+[1.7][compiler] Stackoverflow  error if compiled in 1.7 compliance mode
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330869">330869</a>
+Bogus error reported for Incompatible operand types Class<capture#2-of ? extends T> and Class<Bug.Bar>
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330845">330845</a>
+[Model] Possible bug in Member class
+
+<a name="v_B25"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M5 - January 18, 2010
-<br>Project org.eclipse.jdt.core v_A31
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A31">cvs</a>).
+Eclipse SDK 3.7M4 - November 23, 2010
+<br>Project org.eclipse.jdt.core v_B25
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B25">cvs</a>).
 <h2>What's new in this drop</h2>
 <ul>
-<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>. See the bug for details.
+<li> Added a new API in org.eclipse.jdt.core.compiler.CharOperation to find if a given character array starts with a given prefix, at the given index. (see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329288">329288</a>):
 <pre>
-/**
- * Returns a Java search scope limited to the hierarchy of the given type and to a given project.
- * The Java elements resulting from a search with this scope will be types in this hierarchy.
- *
- * Unlike the createHierarchyScope methods, this method creates strict
- * scopes that only contain types that actually span the hierarchy of the focus
- * type, but do not include additional enclosing or member types.
- *
- *
- * By default, hierarchy scopes include all direct and indirect supertypes and subtypes of the
- * focus type. This method, however, allows to restrict the hierarchy to true subtypes,
- * not including supertypes. Also inclusion of the focus type itself is controled by a parameter. 
- *
- * 
- * @param project the project to which to constrain the search, or null if
- *        search should consider all types in the workspace 
- * @param type the focus of the hierarchy scope
- * @param onlySubtypes if true only subtypes of type are considered
- * @param includeFocusType if true the focus type type is included in the resulting scope, 
- * 		  otherwise it is excluded
- * @param owner the owner of working copies that take precedence over original compilation units, 
- *        or null if the primary working copy owner should be used
- * @return a new hierarchy scope
- * @exception JavaModelException if the hierarchy could not be computed on the given type
- * @since 3.6
- */
-public static IJavaSearchScope createStrictHierarchyScope(IJavaProject project, IType type, boolean onlySubtypes, boolean includeFocusType, WorkingCopyOwner owner) throws JavaModelException;
-</pre>
-</li>
-<li>New API added to report a compiler warning when object allocations are unused:
-<pre>
-org.eclipse.jdt.core.compiler.IProblem.UnusedObjectAllocation
-
-/**
- * Compiler option ID: Reporting Allocation of an Unused Object.
- * When enabled, the compiler will issue an error or a warning if an object is allocated but never used,
- * neither by holding a reference nor by invoking one of the object's methods.
- *
- * Option id:"org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation"
- * Possible values:{ "error", "warning", "ignore" }
- * Default:"ignore"
- *
- * @since 3.6
- * @category CompilerOptionID
- */
-public static final String COMPILER_PB_UNUSED_OBJECT_ALLOCATION = PLUGIN_ID + ".compiler.problem.unusedObjectAllocation";
+    /**
+     * Answers true if the given name, starting from the given index, starts with the given prefix,
+     * false otherwise. isCaseSensitive is used to find out whether or not the comparison should be
+     * case sensitive.
+     * 
+     * 
+     * For example:
+     * 
+     * 1.   prefix = { 'a' , 'B' }
+     *      name = { 'c', 'd', 'a' , 'b', 'b', 'a', 'b', 'a' }
+     *      startIndex = 2
+     *      isCaseSensitive = false
+     *      result => true
+     *
+     * 2.   prefix = { 'a' , 'B' }
+     *      name = { 'c', 'd', 'a' , 'b', 'b', 'a', 'b', 'a' }
+     *      startIndex = 2
+     *      isCaseSensitive = true
+     *      result => false
+     * 
+     *
+     * @param prefix the given prefix
+     * @param name the given name
+     * @param isCaseSensitive to find out whether or not the comparison should be case sensitive
+     * @param startIndex index from which the prefix should be searched in the name
+     * @return true if the given name starts with the given prefix, false otherwise
+     * @throws NullPointerException if the given name is null or if the given prefix is null
+     * @since 3.7
+     */
+     public static final boolean prefixEquals(char[] prefix,	char[] name, boolean isCaseSensitive, int startIndex)
 </pre>
 </li>
 </ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=245007">245007</a>
-[compiler] Should not completely ignore anonymous type with missing super type
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>
-[search] Search shows focus type implementation for nested types even though the scope is restricted to subtypes.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236385">236385</a>
-[compiler] Warn for potential programming problem if an object is created but not used
-
-<a name="v_A30"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325481">325481</a>
+[assist] fields declared after a particular field are proposed in its initialization
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329727">329727</a>
+Invalid check in the isConstructor() method of the IMethod implementation.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329288">329288</a>
+Fetching parameter names literally hangs on a class with a lot of methods
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330435">330435</a>
+[1.4][1.5][compiler] Wrong handling of parameterized methods in 1.4 mode with generified JDK
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330445">330445</a>
+[1.4][1.5][compiler] Properties doesn't match Map<String, String> in 1.4 compliance mode
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330347">330347</a>
+[1.4][1.5][compiler] The performance test FullSourceWorkspaceBuildTests#testFullBuildDefault() fails
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329156">329156</a>
+[compiler][APT] Source generated in last round not compiled
+
+<a name="v_B24"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M5 - January 12, 2010
-<br>Project org.eclipse.jdt.core v_A30
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A30">cvs</a>).
+Eclipse SDK 3.7M4 - November 16, 2010
+<br>Project org.eclipse.jdt.core v_B24
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B24">cvs</a>).
 <h2>What's new in this drop</h2>
-<ul>
-<li>New API added to expose the reconcile flags used in the reconcile context:
-<pre>
-/**
- * Returns the reconcile flag of this context. This flag is a bitwise value of the constant defined
- * in ICompilationUnit.
- *
- * @return the reconcile flag of this context
- * @since 3.6
- *
- * @see ICompilationUnit#ENABLE_BINDINGS_RECOVERY
- * @see ICompilationUnit#ENABLE_STATEMENTS_RECOVERY
- * @see ICompilationUnit#IGNORE_METHOD_BODIES
- */
-public int getReconcileFlags();
-</pre>
-</li>
-</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=243917">243917</a>
-[compiler] should not warn about unused field when native method present
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296343">296343</a>
-OOM error caused by java indexing referencing classloader from threadLocal
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=130000">130000</a>
-[API] ReconcileContext API: Does getAST3 return AST with bindings?
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298238">298238</a>
-Unresolved import in superclass causes 'Cannot reduce the visibility of the inherited method' in subclass
-
-<a name="v_A29a"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329998">329998</a>
+[content assist] override method proposal in anonymous class inserts bad stub
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330081">330081</a>
+[compiler] ArrayIndexOutOfBoundsException when Switched from C/C++ Perspective to Java Perspective
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328519">328519</a>
+[compiler] local variable cannot be optimized out despite warning "not used"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329709">329709</a>
+[formatter] Formatter fails to format enum with extra semicolon and body
+
+<a name="v_B23"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M5 - January 5, 2010
-<br>Project org.eclipse.jdt.core v_A29a
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A29a">cvs</a>).
+Eclipse SDK 3.7M4 - November 9, 2010
+<br>Project org.eclipse.jdt.core v_B23
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B23">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293861">293861</a>
-Problem with refactoring when existing jar with invalid package names
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264112">264112</a>
-[Formatter] Wrap when necessary too aggressive on short qualifiers
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298250">298250</a>
-[1.6][compiler] NegativeArraySizeException in StackMapFrame.duplicate
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296998">296998</a>
-Unused imports should not prevent execution
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298243">298243</a>
-[formatter] Removing empty lines between import groups
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297546">297546</a>
-[formatter] Formatter removes blank after @see if reference is wrapped
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235781">235781</a>
-[compiler] difference to javac in definite unassignment analysis involving an exception within a constructor
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235783">235783</a>
-[eval] CodeSnippetParser and some 'CodeSnippet*' ast node does not seem up to date
-
-<a name="v_A28"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329593">329593</a>
+[1.4/1.5] [compiler] incorrect error about incompatible operand
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329588">329588</a>
+[1.4/1.5][compiler] Class cast issue with java.lang.Class and the 1.4/1.5 mixed mode
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329584">329584</a>
+[1.4/1.5][compiler] Compiler is confused about name clashes in 1.4 project
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328674">328674</a>
+[assist] local being declared proposed inside its initialization
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329344">329344</a>
+[compiler] Batch compiler should not removed some duplicated entries on the classpath
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=186565">186565</a>
+[1.5][compiler] 1.4/1.5 .class file interaction
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328689">328689</a>
+[1.4][compiler] "Incompatible conditional operand types Class and Class"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328775">328775</a>
+[compiler] Compiler fails to warn about invalid cast when using J2SE 1.4 compiler settings
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328827">328827</a>
+Compiler fails to recognize a Map when using J2SE 1.4 compiler settings
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850">324850</a>
+Compile error claims method is missing but is inherited
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328969">328969</a>
+[DOM] NPE retrieving a java element for an annotation binding
+
+<a name="v_B22"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M5 - December 14, 2009
-<br>Project org.eclipse.jdt.core v_A28
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A28">cvs</a>).
+Eclipse SDK 3.7M3 - October 28, 2010 - 3.7.0 M3
+<br>Project org.eclipse.jdt.core v_B22
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B22">cvs</a>).
 <h2>What's new in this drop</h2>
+This build input simply reverts the change made for bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850">324850</a>.
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196714">196714</a>
-[comment] InvalidInputException prevents the AbstractCommentMapper to retrieve tag element
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297757">297757</a>
-Cannot get bindings for IType corresponding to parameterized anonymous type
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255640">255640</a>
-[spec] Methods Signature.toCharArray(..) have unclear precondition
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=262898">262898</a>
-BufferChangedEvent must not have @noinstantiate
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=181682">181682</a>
-JavaConventions.validateJavaTypeName should list valid constants
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108784">108784</a>
-SourceMapper doesn't find name range of inner class constructors
-
-<a name="v_A27"></a>
+
+<a name="v_B21"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - December 8, 2009 - 3.6.0 M4
-<br>Project org.eclipse.jdt.core v_A27
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A27">cvs</a>).
+Eclipse SDK 3.7M3 - October 27, 2010
+<br>Project org.eclipse.jdt.core v_B21
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B21">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297225">297225</a>
-[formatter] Indentation may be still wrong in certain circumstances after formatting
-<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
-JavaSearchBugTests.testBug286379c is failing randomly
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328786">328786</a>
+[search] NPE in field match locator
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328744">328744</a>
+Removed warnings related to fix for 185682
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=229042">229042</a>
+[buildpath] could create build path error in case of invalid external JAR format
 
-<a name="v_A26"></a>
+<a name="v_B20"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - December 7, 2009
-<br>Project org.eclipse.jdt.core v_A26
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A26">cvs</a>).
+Eclipse SDK 3.7M3 - October 25, 2010
+<br>Project org.eclipse.jdt.core v_B20
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B20">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297045">297045</a>
-Weird tests failures in N20091204-2000 and N20091205-2000 builds
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293300">293300</a>
-[formatter] The formatter is still unstable in certain circumstances
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282152">282152</a>
+[1.5][compiler] Generics code rejected by Eclipse but accepted by javac
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328240">328240</a>
+org.eclipse.text.edits.MalformedTreeException: Overlapping text edits
 
-<a name="v_A25"></a>
+<a name="v_B19"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - December 4, 2009
-<br>Project org.eclipse.jdt.core v_A25
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A25">cvs</a>).
+Eclipse SDK 3.7M3 - October 24, 2010
+<br>Project org.eclipse.jdt.core v_B19
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B19">cvs</a>).
 <h2>What's new in this drop</h2>
-<ul>
-<li>Match result can now report the access rules through a new API added on <code>TypeNameMatch</code>:
-<pre>
-/**
- * Returns the accessibility of the type name match
- *
- * @see IAccessRule
- *
- * @return the accessibility of the type name which may be
- * 		{@link IAccessRule#K_ACCESSIBLE}, {@link IAccessRule#K_DISCOURAGED}
- * 		or {@link IAccessRule#K_NON_ACCESSIBLE}.
- * 		The default returned value is {@link IAccessRule#K_ACCESSIBLE}.
- *
- * @since 3.6
- */
-public abstract int getAccessibility();
-</pre>
-See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a> for more details.
-</li>
-</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a>
-[search] SearchEngine#searchAllTypeNames(.., TypeNameMatchRequestor,..) should report access rules
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296708">296708</a>
-[DOM/AST] clarify setters when createASTs(..) is used
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296629">296629</a>
-[quick fix] Cast quick fix not offered for method-local classes
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295948">295948</a>
-ElementImpl.hashCode throws an NPE
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296660">296660</a>
-[compiler] Incorrect unused method warning from compiler
-
-<a name="v_A24"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682">185682</a>
+Increment/decrement operators mark local variables as read
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328400">328400</a>
+TextEdit computed incorrectly for inserting annotation before package declaration
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303511">303511</a>
+Allow to specify encoding for source attachments
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326354">326354</a>
+[3.6][compiler][regression] Compiler in 3.6 and 3.6.1 generates bad code
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328361">328361</a>
+[1.4][compiler] variable initialized within an assert expression are no longer reported as potential non initialized
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328247">328247</a>
+Disassemble fails to disassemble synthetic constructor with varargs arguments
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328115">328115</a>
+[DOM] All ASTNode APIs should specify types of property descriptors
+
+<a name="v_B18"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - December 1, 2009
-<br>Project org.eclipse.jdt.core v_A24
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A24">cvs</a>).
+Eclipse SDK 3.7M3 - October 19, 2010
+<br>Project org.eclipse.jdt.core v_B18
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B18">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327429">327429</a>
+Use Charset.name() instead of Charset.toString() to get the encoding
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327817">327817</a>
+ecjsrc.zip should be ecjsrc.jar
+
+<a name="v_B17"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.7M3 - October 12, 2010
+<br>Project org.eclipse.jdt.core v_B17
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B17">cvs</a>).
 <h2>What's new in this drop</h2>
 <ul>
-<li>New API added to ignore method bodies inside AST tree. The new APIs are tagged as 3.5.2 as this code
-will be backported to 3.5.2:
+<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS added to enable or disable the missing Javadoc tag warning or error for a method
+    paramater without a corresponding <code>@param</code> tag. (see details in bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322581">322581</a>):
+<pre>
+    /**
+     * Compiler option ID: Reporting Missing Javadoc Tags for Method Type Parameters.
+     * Specify whether a missing <code>@param</code> for a type parameter in a method declaration should be reported.
+     * When enabled, the compiler will issue a missing Javadoc tag error or warning for a type parameter without a 
+     * corresponding <code>@param</code> tag.
+     *	
+     * This option only has an effect if the compiler compliance is 1.5 or greater.
+     * 
+     * Option id:<code>"org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters"</code>
+     * Possible values:<code>{ "enabled", "disabled" }</code>
+     * Default:<code>"disabled"</code>
+     * 
+     * @since 3.7
+     * @category CompilerOptionID
+     */
+     public static final String COMPILER_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS = PLUGIN_ID + ".compiler.problem.missingJavadocTagsMethodTypeParameters";
+</pre>
+</li>
+<li>Added new API on org.eclipse.jdt.core.dom.rewrite.ASTRewrite to store properties (See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325131">325131</a>).
 <pre>
-org.eclipse.jdt.core.dom.ASTParser:
 	/**
-	 * Requests an abstract syntax tree without method bodies. 
-	 * 
-	 * When ignore method bodies is enabled, all method bodies are discarded.
-	 * This has no impact on the binding resolution.
+	 * Returns the value of the named property of this rewrite, or null if none.
 	 *
-	 * If a method contains local types, its method body will be retained.
-	 * This settings is not used if the kind used in setKind(int) is either 
-	 * K_EXPRESSION or K_STATEMENTS.
-	 * @since 3.5.2
+	 * @param propertyName the property name
+	 * @return the property value, or <code>null</code> if none
+	 * @see #setProperty(String,Object)
+	 * @throws IllegalArgumentException if the given property name is null
+	 * @since 3.7
 	 */
-	public void setIgnoreMethodBodies(boolean enabled);
-
-org.eclipse.jdt.core.ICompilationUnit:
+	public final Object getProperty(String propertyName);
+</pre>
+<pre>
 	/**
-	 * Constant indicating that a reconcile operation could ignore to parse the method bodies.
-	 * @see ASTParser#setIgnoreMethodBodies(boolean)
-	 * @since 3.5.2
+	 * Sets the named property of this rewrite to the given value,
+	 * or to null to clear it.
+	 * 
+	 * Clients should employ property names that are sufficiently unique
+	 * to avoid inadvertent conflicts with other clients that might also be
+	 * setting properties on the same rewrite.
+	 * 
+	 * 
+	 * Note that modifying a property is not considered a modification to the
+	 * AST itself. This is to allow clients to decorate existing rewrites with
+	 * their own properties without jeopardizing certain things (like the
+	 * validity of bindings), which rely on the underlying tree remaining static.
+	 * 
+	 *
+	 * @param propertyName the property name
+	 * @param data the new property value, or null if none
+	 * @see #getProperty(String)
+	 * @throws IllegalArgumentException if the given property name is null
+	 * @since 3.7
 	 */
-	public static final int IGNORE_METHOD_BODIES = 0x08;
-
+	public final void setProperty(String propertyName, Object data);
 </pre>
 </li>
 </ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288174">288174</a>
-[search] NullPointerException when searching for type references
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277643">277643</a>
-Generics compile error
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288211">288211</a>
-APT uses a lot of memory
-
-<a name="v_A23"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367">324367</a>
+IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) returns empty list
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311022">311022</a>
+NPE in InternalExtendedCompletionContext.getVisibleElement
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325131">325131</a>
+ASTRewrite should offer get/setProperty() like ASTNode
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322789">322789</a>
+package-info.java Won't Build On First Compile Pass
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322581">322581</a>
+[5.0] Add Javadoc compiler option to (not) report missing tags for method type parameters
+
+<a name="v_B16"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - November 24, 2009
-<br>Project org.eclipse.jdt.core v_A23
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A23">cvs</a>).
+Eclipse SDK 3.7M3 - October 5, 2010 - 3.7.0 M3
+<br>Project org.eclipse.jdt.core v_B16
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B16">cvs</a>).
 <h2>What's new in this drop</h2>
+<ul>
+<li>New Javacore option org.eclipse.jdt.core.JavaCore.COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS added to give the user flexibility to see null related warning arising because of assert statements (see details in <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325342">bug 325342</a>):
+<pre>
+    /**
+     * Compiler option ID: Raise null related errors or warnings arising because of assert statements.
+     * When enabled, the compiler will flag all null related errors or warnings that have been enabled by the user,
+     * irrespective of whether a variable occurred in an assert statement.
+     * When disabled, the compiler will not flag null related errors or warnings on variables that got marked as maybe or definitely
+     * <code>null</code> in an assert statement upstream.
+     *
+     * Option id:<code>"org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts"</code>
+     * Possible values:<code>{ "enabled", "disabled" }</code>
+     * Default:<code>"disabled"</code>
+     *
+     * @since 3.7
+     * @category CompilerOptionID
+     */
+     public static final String COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS = PLUGIN_ID + ".compiler.problem.includeNullInfoFromAsserts";
+</pre>
+</li>
+</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295698">295698</a>
-[1.5][compiler] ClassCastException in unchecked warning report
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295260">295260</a>
-Wrong warnings on Java.Compiler.Errors/Warnings "Redundant null check"
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=190737">190737</a>
-[compiler][null] missing 'cannot be null' warning within for loop
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323012">323012</a>
+[jsr14][compiler] Class literal value is not cached when target is jsr14
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325342">325342</a>
+Add new option for null analysis based on assert result.
 
-<a name="v_A22"></a>
+<a name="v_B15"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - November 16, 2009
-<br>Project org.eclipse.jdt.core v_A22
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A22">cvs</a>).
+Eclipse SDK 3.7M3 - September 28, 2010
+<br>Project org.eclipse.jdt.core v_B15
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B15">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=153429">153429</a>
-JUnit4 in Eclipse Testing Framework
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295238">295238</a>
-[formatter] The comment formatter add an unexpected new line in block comment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295175">295175</a>
-[formatter] Missing space before a string at the beginning of a line in a javadoc comment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294529">294529</a>
-The Scanner sometimes ignores the given offset if larger than the EOF.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294662">294662</a>
-ClassCastException while invoking quick assist
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294404">294404</a>
--target jsr14 flags error on foreach over Collection that does not implement Iterable
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293955">293955</a>
-valid javadoc url set on user library, but still says no javadoc
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293443">293443</a>
-AbortCompilation when invoking content assist
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293711">293711</a>
-Clarify ICompilationUnit#getOwner() javadoc
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293615">293615</a>
-error message since v3.6.0M2: name clash by overriding generic methods
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294618">294618</a>
-[formatter] The formatter fails to format a compilation unit with deep nesting of html tags
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248312">248312</a>
-[model] IMemberValuePair#getValue() should also work for negative numerals
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294731">294731</a>
-Specify value type of JAVADOC_LOCATION_ATTRIBUTE_NAME
-
-<a name="v_A21"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312603">312603</a>
+[content assist] field being declared is proposed as a method argument inside initialization
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325342">325342</a>
+Add new option for null analysis based on assert result.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325481">325481</a>
+[assist] fields declared after a particular field are proposed in its initialization
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325633">325633</a>
+1.4 project confused when referencing a return type of generic array from 1.5 project
+
+<a name="v_B14a"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - November 10, 2009
-<br>Project org.eclipse.jdt.core v_A21
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A21">cvs</a>).
+Eclipse SDK 3.7M3 - September 21, 2010
+<br>Project org.eclipse.jdt.core v_B14a
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B14a">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294631">294631</a>
-[formatter] The formatter takes two passes to format a common sequence of html tags
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294500">294500</a>
-[formatter] MalformedTreeException when formatting an invalid sequence of <code> tags in a javadoc comment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294488">294488</a>
-Javadoc of ISourceReference#getSourceRange() should link to SourceRange#isAvailable(..)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=199265">199265</a>
-[formatter] 3.3 Code Formatter mis-places commented-out import statements
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241549">241549</a>
-[spec] IType#getFields/Initializers/Methods() should define order from class file
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275805">275805</a>
-creating a non-primary working copy causes typeHierarchyChanged event
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292510">292510</a>
-FUP of 292364: Error messages don't identify partial types precisely.
-
-<a name="v_A20"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325567">325567</a>
+A blocking "java.lang.IllegalArgumentException: info cannot be null" exception
+
+<a name="v_B13a"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M4 - November 3, 2009
-<br>Project org.eclipse.jdt.core v_A20
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A20">cvs</a>).
+Eclipse SDK 3.7M2 - September 21, 2010 - 3.7.0 M2
+<br>Project org.eclipse.jdt.core v_B13a
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B13a">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293384">293384</a>
-Eclipse erroneously reports method "is ambiguous for type"
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285002">285002</a>
-[compiler] visibility error for package private method
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325755">325755</a>
+[compiler] wrong initialization state after conditional expression
 
-<a name="v_A19"></a>
+<a name="v_B13"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M3 - October 29, 2009 - 3.6M3
-<br>Project org.eclipse.jdt.core v_A19
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A19">cvs</a>).
+Eclipse SDK 3.7M2 - September 15, 2010
+<br>Project org.eclipse.jdt.core v_B13
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B13">cvs</a>).
 <h2>What's new in this drop</h2>
-This version was created to tentatively fix bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
-but it occurs again in subsequent build. So, it has been reopened and moved to next version...
 
 <h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325229">325229</a>
+[compiler] eclipse compiler differs from javac when assert is present  (FUP of bug 319510)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325270">325270</a>
+[content assist] Parameter names are not displayed for static inner class of an external jar
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325321">325321</a>
+[compiler] Synthetic constructors for non-static inner classes can exceed 255 parameters -> ClassFormatError
 
-<a name="v_A18"></a>
+<a name="v_B12a"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M3 - October 28, 2009
-<br>Project org.eclipse.jdt.core v_A18
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A18">cvs</a>).
+Eclipse SDK 3.7M2 - September 13, 2010
+<br>Project org.eclipse.jdt.core v_B12a
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B12a">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293496">293496</a>
-Adding the serialVersionUID field doesn't work when tab size is 0
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324840">324840</a>
+[compiler] Improving debug strings for Break statement, IntLiteral and CaseStatement
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324848">324848</a>
+[1.6][compiler] NullPointerException when trying to synchronize on non-existing outer class instance
 
-<a name="v_A17"></a>
+<a name="v_B11"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M3 - October 26, 2009
-<br>Project org.eclipse.jdt.core v_A17
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A17">cvs</a>).
+Eclipse SDK 3.7M2 - September 9, 2010 - 3.7.0 M2
+<br>Project org.eclipse.jdt.core v_B11
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B11">cvs</a>).
 <h2>What's new in this drop</h2>
 <ul>
-<li>Reverted change for bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>.</li>
+<li>Adding missing API methods on org.eclipse.jdt.core.ILocalVariable (see details in <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48420">bug 48420</a>):
+<pre>
+    /**
+     * Returns true if this local variable is a method parameter, false otherwise.
+     * 
+     * @return true if this local variable is a method parameter, false otherwise
+     * @since 3.7
+     */
+    boolean isParameter();
+
+    /**
+     * Returns the modifier flags for this local variable. The flags can be examined using class.
+     * 
+     * Note that only flags as indicated in the source are returned.
+     *
+     * @return the modifier flags for this local variable
+     * @see Flags
+     * @since 3.7
+     */
+    int getFlags();
+
+    /**
+     * Returns the declaring member of this local variable.
+     *
+     * This is a handle-only method.
+     *
+     * @return the declaring member of this local variable
+     * @since 3.7
+     */
+    IMember getDeclaringMember();
+
+    /**
+     * Returns the Java type root in which this local variable is declared.
+     *
+     * This is a handle-only method.
+     *
+     * @return the Java type root in which this local variable is declared
+     * @since 3.7
+     */
+    ITypeRoot getTypeRoot();
+</pre>
+</li>
+<li>Adding missing API method on org.eclipse.jdt.core.ITypeParameter (see details in <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48420">bug 48420</a>):
+<pre>
+    /**
+     * Returns the Java type root in which this type parameter is declared.
+     *
+     * This is a handle-only method.
+     *
+     * @return the Java type root in which this type parameter is declared
+     * @since 3.7
+     */
+    ITypeRoot getTypeRoot();
+</pre>
+</li>
 </ul>
-<h3>Problem Reports Fixed</h3>
-
-<a name="v_A16"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M3 - October 25, 2009
-<br>Project org.eclipse.jdt.core v_A16
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A16">cvs</a>).
-<h2>What's new in this drop</h2>
-
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293240">293240</a>
-[formatter] 'insert_space_before_opening_brace_in_array_initializer' preference may be reset in certain circumstances
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>
-API to know when default compiler preference settings have been altered
-<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=289385">289385</a>
-Investigate comment in performance tests
-<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=286379">286379</a>
-[search] Problem while searching class
-
-<a name="v_A15"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M3 - October 20, 2009
-<br>Project org.eclipse.jdt.core v_A15
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A15">cvs</a>).
-<h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=292350">292350</a>
-[1.5][compiler] Compiler error: ambiguous method since 3.5.1 using generics and interface inheritance
-<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=292364">292364</a>
-[internal] Type name in CastExpression not treated as Type name.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292428">292428</a>
-Internal compiler error: NullPointerException at org.eclipse.jdt.internal.compiler.ast.CastExpression.checkUnsafeCast(CastExpression.java:333)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291985">291985</a>
-[compiler][jsr14] Translating Enum with jsr14 target: ECJ causes a runtime error while Sun compiler works fine
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292240">292240</a>
-Compiler error on implementation of raw sub interface
-
-<a name="v_A14"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M3 - October 13, 2009
-<br>Project org.eclipse.jdt.core v_A14
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A14">cvs</a>).
-<h2>What's new in this drop</h2>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324762">324762</a>
+Compiler thinks there is deadcode and removes it!
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292478">292478</a>
+Report potentially null across variable assignment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324748">324748</a>
+JDT core tests have restrictive range on com.ibm.icu
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323633">323633</a>
+[1.5][compiler] Reconciler issues mixing 1.4 projects with & 1.5 project with generics.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317046">317046</a>
+Exception during debugging when hover mouse over a field
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=48420">48420</a>
+[API] ILocalVariable and ITypeParameter should provide more methods
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321414">321414</a>
+Synthetic constructors can exceed 255 parameters -> ClassFormatError
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291391">291391</a>
-update the Bundle-Version of the JDT Core Batch Compiler (ecj) from 3.3.0 to 3.6.*
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284280">284280</a>
-[1.5][compiler] Error on use generic interface in abstract super class
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286228">286228</a>
-[1.5][compiler] Generics inconsistencies possible regression
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286601">286601</a>
-[formatter] Code formatter formats anonymous inner classes wrongly when 'Never join lines' is on
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=215139">215139</a>
-[search] More options for HierarchyScope
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291472">291472</a>
-[1.5][compiler] Access to a generic method is compiled incorrectly
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283539">283539</a>
-NamingConventions.suggestVariableNames doesn't work if name contains '_'
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280784">280784</a>
-[batch] Allow access restrictions to be reported as errors
-
-<a name="v_A13"></a>
+<a name="v_B10"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M3 - October 6, 2009
-<br>Project org.eclipse.jdt.core v_A13
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A13">cvs</a>).
+Eclipse SDK 3.7M2 - September 7, 2010
+<br>Project org.eclipse.jdt.core v_B10
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B10">cvs</a>).
 <h2>What's new in this drop</h2>
 <ul>
-<li>Reverted fix for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106478">106478</a>.</li>
+<li>Code formatter: 4 new options were added to better handle the addition of
+new lines after annotations.
+<pre>
+ * FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD
+ * FORMATTER / Option to insert a new line after an annotation on a field declaration
+ *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field"
+ *     - possible values:   { INSERT, DO_NOT_INSERT }
+ *     - default:           INSERT
+ * 
+ * FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD
+ * FORMATTER / Option to insert a new line after an annotation on a method declaration
+ *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method"
+ *     - possible values:   { INSERT, DO_NOT_INSERT }
+ *     - default:           INSERT
+ *
+ * FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE
+ * FORMATTER / Option to insert a new line after an annotation on a package declaration
+ *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package"
+ *     - possible values:   { INSERT, DO_NOT_INSERT }
+ *     - default:           INSERT
+ *
+ * FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE
+ * FORMATTER / Option to insert a new line after an annotation on a type declaration
+ *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type"
+ *     - possible values:   { INSERT, DO_NOT_INSERT }
+ *     - default:           INSERT
+</pre>
+The addition of new lines after annotations has been discussed in <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=308000">bug 308000</a><br>
+Also note that previously available code formatter constant FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER has been deprecated.<br>
+All new options must be enabled to activate old strategy.
+</li>
+<li>
+The previously added new APIs:
+<blockquote>
+<code>org.eclipse.jdt.core.IImportDeclaration#getNameRange()</code>,<br>
+<code>org.eclipse.jdt.core.IPackageDeclaration#getNameRange()</code>
+</blockquote>
+have been moved to the org.eclipse.jdt.core.ISourceReference interface. See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321764">321764</a> for details:
+<pre>
+/**
+ * Returns the name range associated with this element.
+ * 
+ * If the element is an IMember, it returns
+ * the source range of this member's simple name,
+ * or null if this member does not have a name
+ * (for example, an initializer), or if this member does not have
+ * associated source code (for example, a binary type).
+ * 
+ * If this element is an IImportDeclaration, the source range
+ * of this import declaration's name, or null if this import
+ * declaration does not have associated source code (for example, a binary type).
+ * The source range for the name includes the trailing '*' if the call to
+ * IImportDeclaration#isOnDemand() returns true.
+ *
+ * If this element is an IPackageDeclaration, the source range of
+ * this package declaration's name, or null if this package 
+ * declaration does not have associated source code (for example, a binary type).
+ *
+ * If this element is an IAnnotation, the source range of
+ * this annotation's name, or null if this annotation does not have
+ * associated source code (for example, in a binary type).
+ * 
+ * If this element is an ITypeParameter, the source range of this 
+ * type parameter's name, or null if this type parameter does not have
+ * associated source code (for example, in a binary type).
+ * 
+ * If this element is an ITypeRoot or IImportContainer, it
+ * returns null.
+ *
+ * @return the name range associated with this element, or null if
+ * not available
+ *
+ * @since 3.7
+ */
+ISourceRange getNameRange() throws JavaModelException;
+</pre>
+</li>
 </ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291322">291322</a>
-Test errors when running JDT Core tests on Windows 7
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282770">282770</a>
-[compiler] Dead code detection should have specific @SuppressWarnings
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290028">290028</a>
-Use IResource#setDerived(boolean, IProgressMonitor) instead of IResource#setDerived(boolean)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287607">287607</a>
-[1.5][compiler] cast of inner of generic enclosing type are not reported as unsafe
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288749">288749</a>
-Redundant superinterface not flagged inside one declaration
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290905">290905</a>
-[formatter] Certain formatter pref constellation cause endless loop ==> OOME
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285124">285124</a>
-serialVersionUID still causes error/warning
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290877">290877</a>
-[DOM] If using a tag named '@enum' the ASTParser ignores this
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281575">281575</a>
-Eclipse hangs in SourceMapper while doing java proposals
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290470">290470</a>
-[JSR199][compiler] JDT compiler not jsr199 compatible.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290730">290730</a>
-Rewriting SwitchStatement throws NPE
-
-<a name="v_A12"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M3 - September 29, 2009
-<br>Project org.eclipse.jdt.core v_A12
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A12">cvs</a>).
-<h2>What's new in this drop</h2>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322979">322979</a>
+[search] use of IJavaSearchConstants.IMPLEMENTORS yields surprising results
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316937">316937</a>
+JavaElement.getElementInfo(..) throws JavaModelException when trying to get info for an inner class in an external jar
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322531">322531</a>
+[1.5][Generics] eclipse compiles code rejected by javac with incomparable types error.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308000">308000</a>
+[formatter] Formatter is missing options regarding Annotation Newlines
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321276">321276</a>
+JDT core apis dont recognize InnerClass constructor inside .class files
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252556">252556</a>
+[formatter] Spaces removed before formatted region of a compilation unit.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323785">323785</a>
+[builder] NPE when adding 'package-info.java' to default package
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321358">321358</a>
+NPE refreshing external folders
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322596">322596</a>
+[DOM] ASTNode APIs should specify types of property descriptors
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324109">324109</a>
+[search] Java search shows incorrect results as accurate matches
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324154">324154</a>
+NPE in FlowContext while building
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=133125">133125</a>
+[compiler][null] need to report the null status of expressions and analyze them simultaneously
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321695">321695</a>
+Test added for bug 319425 doesn't detect the bug
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=258905">258905</a>
+making java.lang.AssertionError accessible thru resolveWellKnownType method
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321764">321764</a>
+Add getNameRange() to ISourceReference
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287676">287676</a>
-[1.5][compiler] Useless cast warning not emited
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290563">290563</a>
-add specification for fine grain search flags
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290376">290376</a>
-Errant "Comparing identical expressions" warning with assignment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287592">287592</a>
-[1.5][compiler] Wrong ambiguous compilation error
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290049">290049</a>
-Reconciling a compilation unit does not return an AST with bindings when it should (probably)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290034">290034</a>
-Effects of @SuppressWarnings("unchecked") are broader in Eclipse than in javac
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267561">267561</a>
-[evaluation] LocalEvaluationEngine does not accept primitive types
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194">163194</a>
-[1.6] compiler should warn about missing @Override annotation for interface method
-
-<a name="v_A11"></a>
+<a name="v_B09"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M3 - September 22, 2009
-<br>Project org.eclipse.jdt.core v_A11
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A11">cvs</a>).
+Eclipse SDK 3.7M2 - August 31, 2010 - 3.7.0 M2
+<br>Project org.eclipse.jdt.core v_B09
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B09">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289892">289892</a>
-[compiler] NPE during binaryTypeBinding field initialization
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287833">287833</a>
-[formatter] Formatter removes the first character after the * in the <pre> tag
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238943">238943</a>
-SortElementsOperation doesn't use project specific settings
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288621">288621</a>
-[1.5][compiler] Creating type hierarchy failed when pressing F4
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289538">289538</a>
-[1.5][compiler] compiler fails to generate correct code for private constructor in inner class
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289639">289639</a>
-Problems opening perspective JavaPerspective, NPE on JavaModelManager.containersReset()
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289516">289516</a>
-Annotations (visible and invisible) should be preserved with target jsr14
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289576">289576</a>
-[1.5][compiler] Compiler changes 'private' modifier on methods with annotated parameter
-
-<a name="v_A10"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java development tools core</h1>
-Eclipse SDK 3.6M2 - September 14, 2009 - 3.6M2
-<br>Project org.eclipse.jdt.core v_A10
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A10">cvs</a>).
-<h2>What's new in this drop</h2>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311578">311578</a>
+[formatter] Enable/disable tag detection should include comment start/end tokens
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320618">320618</a>
+inconsistent initialization of classpath container backed by external class folder
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323693">323693</a>
+[1.5][compiler] Compiler fails to diagnose name clash
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323558">323558</a>
+Tests test0307a and test0307e under BatchCompilerTest failing
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308402">308402</a>
+[index] PatternSearchJob ignores participant index entries
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317264">317264</a>
+[search] Refactoring is impossible with commons.lang added to project
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288148">288148</a>
-[perfs] Comments applied for performance tests may be obsolete
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289247">289247</a>
-[1.5][compiler]Detecting duplicate methods should not consider return type
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288920">288920</a>
-[compiler] NPE renaming run() method
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288698">288698</a>
-Cannot create type hierarchy for abstract types when they have inline descendants and *.class* in project name
-
-<a name="v_A09"></a>
+<a name="v_B08"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M2 - September 1, 2009
-<br>Project org.eclipse.jdt.core v_A09
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A09">cvs</a>).
+Eclipse SDK 3.7M1 - August 24, 2010
+<br>Project org.eclipse.jdt.core v_B08
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B08">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287009">287009</a>
-Inner Annotation Checks are Missing
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287701">287701</a>
-[dom] Length of Assignment should not include whitespace
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285230">285230</a>
-[performance] Duplicate buffers created for internal classes
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286391">286391</a>
-[compiler] jsr14 target behavior changed between ECJ 3.4.2 and ECJ 3.5
-
-<a name="v_A08"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321926">321926</a>
+Erroneously deems null check conditional branch to be dead code, and produces incorrect bytecode
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320170">320170</a>
+[compiler] [null] Whitebox issues in null analysis
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259">305259</a>
+Strange error when referencing code produced with jsr14 target
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321115">321115</a>
+Compiler is not case sensitive with package names
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310427">310427</a>
+[content assist] FUP of 236306: Variable proposed before definition.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320911">320911</a>
+Not all redundant superinterface problems reported
+
+<a name="v_B07"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M2 - August 25, 2009
-<br>Project org.eclipse.jdt.core v_A08
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A08">cvs</a>).
+Eclipse SDK 3.7M1 - August 17, 2010
+<br>Project org.eclipse.jdt.core v_B07
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B07">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287462">287462</a>
-[formatter] new failures in last 2 nightly builds
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285565">285565</a>
-[inline] Inlining constant or local variables causes exceptions with tab width 0
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285799">285799</a>
-HashtableOfObject rehashes and grows buffer on removeKey()
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286912">286912</a>
-[formatter] Never join lines preferences makes the formatter unstable in certain circumstances
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286668">286668</a>
-[formatter] 'Never Join Lines' joins lines that are split on method invocation
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248661">248661</a>
-Axis2:  Missing required libraries in Axis 2 WS Client Projects
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918">286918</a>
-[javadoc] Compiler should warn when @see and @link tag references in package-info.java don't have fully qualified names
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285466">285466</a>
-[3.5 regression] fails to build IcedTea, works with 3.4.x
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286956">286956</a>
-NPE when asking to externalize constant
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281609">281609</a>
-[javadoc] "Javadoc: Invalid reference" warning for @link to Java package
-
-<a name="v_A07"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319201">319201</a>
+[null] no warning when unboxing SingleNameReference causes NPE
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322154">322154</a>
+Compiler bug that does not occur in Galileo 3.5.2
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320754">320754</a>
+[formatter] formatter:off/on tags does not work correctly
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322001">322001</a>
+[1.5][compiler] Name Clash error occurs
+
+<a name="v_B06"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M2 - August 18, 2009
-<br>Project org.eclipse.jdt.core v_A07
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A07">cvs</a>).
+Eclipse SDK 3.7M1 - August 10, 2010
+<br>Project org.eclipse.jdt.core v_B06
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B06">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286840">286840</a>
-ClasspathJar getPath() should return a unique path
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=254738">254738</a>
-NPE in HierarchyResolver.setFocusType
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276294">276294</a>
-Error does not go away after it is resolved
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284785">284785</a>
-[1.5][compiler] Eclipse compiler shows error on javac-valid construct: varargs plus overload
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286405">286405</a>
-Default value character of annotations in ClassFileEditor are badly printed
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286407">286407</a>
-[Model] IMemberValuePair don't return the right value for java.lang.annotation.RetentionPolicy annotations
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285701">285701</a>
-[1.5][compiler] Internal Compiler Error - ArrayIndexOutOfBoundsException
-
-<a name="v_A06"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320167">320167</a>
+Auto-Activation works only once
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320809">320809</a>
+ArrayIndexOutOfBoundsException in IndexManager.writeSavedIndexNamesFile - concurrency issue?
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321085">321085</a>
+Enhanced for loops need to implement type safety checks on array initializers
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319626">319626</a>
+Preferences->Java Compiler-> Errors/Warnings -> Undocumented Empty Block
+
+<a name="v_B05"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M1 - August 3, 2009 - 3.6M1
-<br>Project org.eclipse.jdt.core v_A06
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A06">cvs</a>).
+Eclipse SDK 3.7M1 - July 30, 2010 - 3.7.0 M1
+<br>Project org.eclipse.jdt.core v_B05
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B05">cvs</a>).
 <h2>What's new in this drop</h2>
+<ul>
+<li>
+New API added to be able to retrieve the name range for <code>org.eclipse.jdt.core.IImportDeclaration</code>:
+<pre>
+/**
+ * Returns the source range of this import declaration's name,
+ * or null if this import declaration does not have
+ * associated source code (for example, a binary type).
+ * 
+ * The source range for the name includes the trailing '*' if the call to
+ * isOnDemand() returns true.
+ * 
+ *
+ * @exception JavaModelException if this element does not exist or if an
+ *      exception occurs while accessing its corresponding resource.
+ * @return the source range of this import declaration's name,
+ * or null if this import declaration does not have
+ * associated source code (for example, a binary type)
+ * @since 3.7
+ */
+ISourceRange getNameRange() throws JavaModelException;
+</pre>
+</li>
+<li>
+New API added to be able to retrieve the name range for <code>org.eclipse.jdt.core.IPackageDeclaration</code>:
+<pre>
+/**
+ * Returns the source range of this package declaration's name,
+ * or null if this package declaration does not have
+ * associated source code (for example, a binary type).
+ *
+ * @exception JavaModelException if this element does not exist or if an
+ *      exception occurs while accessing its corresponding resource.
+ * @return the source range of this package declaration's name,
+ * or null if this package declaration does not have
+ * associated source code (for example, a binary type)
+ * @since 3.7
+ */
+ISourceRange getNameRange() throws JavaModelException;
+</pre>
+</li>
+</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284948">284948</a>
-[1.6][compiler] Java annotations are broken in editor when used on interface methods
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306524">306524</a>
+ASTRewriteAnalyzer uses wrong starting offset in case of comments before a node
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150980">150980</a>
+[API] Selecting import declaration with space in outline highlights wrong range
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320841">320841</a>
+TypeConverters don't set enclosingType
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320802">320802</a>
+ASTParser.createASTs(..) fails silently on multiple missing parameter types.
 
-<a name="v_A05"></a>
+<a name="v_B04"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M1 - July 30, 2009
-<br>Project org.eclipse.jdt.core v_A05
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A05">cvs</a>).
+Eclipse SDK 3.7M1 - July 27, 2010
+<br>Project org.eclipse.jdt.core v_B04
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B04">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276526">276526</a>
-[content assist] Error - Type Duplicate interface Iterable for the type TestClass
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
-JavaProject#getOption optimizations
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319425">319425</a>
+[compiler] JDT outputs corrupt .class file for problem type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319885">319885</a>
+Spurious 'cycle detected'/'hierarchy inconsistent' errors if a type that WOULD be cyclic is static-imported
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312076">312076</a>
+[1.5][compiler] Eclipse compiler behaves differently from javac
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320414">320414</a>
+Compiler produces incorrect bytecode for null pointer check
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=223225">223225</a>
+[DOM] IMemberValuePairBinding does not desugar single values into one-element arrays
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319603">319603</a>
+[1.5][compiler] eclipse fails with 2 generics methods with the same name while javac succeeds
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318020">318020</a>
+[compiler] wrong initialization flow info with if (true) throw... pattern in else block
 
-<a name="v_A04"></a>
+<a name="v_B03"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M1 - July 28, 2009
-<br>Project org.eclipse.jdt.core v_A04
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A04">cvs</a>).
+Eclipse SDK 3.7M1 - July 20, 2010
+<br>Project org.eclipse.jdt.core v_B03
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B03">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261909">261909</a>
-ClassFileReader.getModifiers() answers funny bits
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283225">283225</a>
-[1.6][compiler] classfile versus source conformance check too strict
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284679">284679</a>
-[formatter] empty single semi statement prevent enum elements format
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284482">284482</a>
-[compiler] Collision cases not detected
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284431">284431</a>
-Different inherited thrown exception clauses are not properly handled
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=133911">133911</a>
-type.move() returns unclear exception "invalid destination"
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270436">270436</a>
-[assist] Interface type proposed where only class is legal
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=210385">210385</a>
-[compiler] ProblemReporter#getProblemCategory misbehaves when passed ProblemSeverities.Ignore as severity parameter
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282891">282891</a>
-[compiler] "Comparing identical expressions" warning sometimes invalid
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282869">282869</a>
-[compiler] Unnecessary cast warning for cast from char to int
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270437">270437</a>
-[assist] Completion proposal leads to cycle detected error
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=217443">217443</a>
-Documentation for JavaCore#CORE_ENCODING does not match the observed behavior
-
-<a name="v_A03"></a>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320340">320340</a>
+Test failures in debug mode
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307523">307523</a>
+Differences between patch of bug 210422 and sources
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319900">319900</a>
+StringLiteral#setLiteralValue needlessly escapes apostrophes (')
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310264">310264</a>
+Wrong warning: The assignment to variable has no effect
+
+<a name="v_B02"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M1 - July 21, 2009
-<br>Project org.eclipse.jdt.core v_A03
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A03">cvs</a>).
+Eclipse SDK 3.7M1 - July 13, 2010
+<br>Project org.eclipse.jdt.core v_B02
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B02">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283467">283467</a>
-[formatter] wrong indentation with 'Never join lines' selected
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281776">281776</a>
-Should not warn for comparison of identical expression with float type
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282768">282768</a>
-[compiler] Dead code detection should ignore trivial case for ternary if operator
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283133">283133</a>
-[formatter] IAE when pasting a snippet
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283299">283299</a>
-Complete SourceRange API
-
-<a name="v_A02"></a>
-<hr><h1>
-Eclipse Platform Build Notes<br>
-Java Development Tooling Core</h1>
-Eclipse SDK 3.6M1 - July 13, 2009
-<br>Project org.eclipse.jdt.core v_A02
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A02">cvs</a>).
-<h2>What's new in this drop</h2>
-<ul>
-<li>Added new API type org.eclipse.jdt.core.SourceRange</li>
-</ul>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314556">314556</a>
+[1.5][compiler] compiler fails to report attempt to assign weaker access privileges
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316956">316956</a>
+[compiler] Private superclass and enclosing scope field names incorrectly reported as conflicting
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=151500">151500</a>
+[assist] Method parameter names are not displayed for inner classes
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304006">304006</a>
+[code assist] Autocast after instanceof feature doesnt work in some cases.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=210419">210419</a>
+[compiler] Invalid field initializer not flagged as error
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=212713">212713</a>
+Bad error message for static block inside an interface
 
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271296">271296</a>
-[assist] void typed proposal may not be appropriate in many contexts
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281871">281871</a>
-[content assist] The extension took too long to return from the 'computeCompletionProposals()' operation
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281598">281598</a>
-[assist] Problems during content assist - if project has empty zip file in classpath
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235294">235294</a>
-[formatter] javadoc for DefaultCodeFormatterConstants#FORMATTER_ALIGNMENT_FOR_ASSIGNMENT cites a non-API constant
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280497">280497</a>
-Incorrect null result for IJavaProject.getClasspathEntryFor(IPath)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=204777">204777</a>
-Clarify documentation for ITypeHierarchy created on interface types
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=88265">88265</a>
-Make SourceRange API
-
-<a name="v_A01"></a>
+<a name="v_B01"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M1 - July 7, 2009
-<br>Project org.eclipse.jdt.core v_A01
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A01">cvs</a>).
+Eclipse SDK 3.7M1 - July 6, 2010 - 3.7M1
+<br>Project org.eclipse.jdt.core v_B01
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B01">cvs</a>).
 <h2>What's new in this drop</h2>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260968">260968</a>
-Deadlock in UserLibraryManager
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313153">313153</a>
+Too many blocked "Refreshing external folders" jobs (FUP of bug 302295)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316654">316654</a>
+ITypeHierarchyChangedListener receive spurious callbacks
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317858">317858</a>
+Eclipse isn't accessing the correct field/class - causes compile error
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318171">318171</a>
+fieldHiding-Warning does not appear if classes are in different packages
 
-<a name="v_A00"></a>
+<a name="v_B00"></a>
 <hr><h1>
 Eclipse Platform Build Notes<br>
 Java development tools core</h1>
-Eclipse SDK 3.6M1 - June 30, 2009
-<br>Project org.eclipse.jdt.core v_A00
-(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A00">cvs</a>).
+Eclipse SDK 3.7M1 - June 29, 2010
+<br>Project org.eclipse.jdt.core v_B00
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_B00">cvs</a>).
 <h2>What's new in this drop</h2>
-<ul>
-<li>New API added to handle the new <code>invokedynamic</code> bytecode:
-<pre>
-org.eclipse.jdt.core.util.ByteCodeVisitorAdapter:
-	public void _invokedynamic(
-			int pc,
-			int index,
-			IConstantPoolEntry nameEntry,
-			IConstantPoolEntry descriptorEntry) {
-		// default behavior is to do nothing
-	}
-</pre>
-<pre>org.eclipse.jdt.core.util.IBytecodeVisitor#_invokedynamic(int, int, IConstantPoolEntry, IConstantPoolEntry)</pre>
-<pre>org.eclipse.jdt.core.util.IOpcodeMnemonics#INVOKEDYNAMIC</pre>
-</li>
-</ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277450">277450</a>
-[1.5][compiler] Problems with += and Autoboxing/Unboxing
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206498">206498</a>
-[1.7][compiler] Remove fix for bug 206483 once 1.7 VMS can handle .class files with version 51.0
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
-JavaProject#getOption optimizations
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201762">201762</a>
-Content Assist has no proposals with certain CU structure
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281681">281681</a>
-Stale code in CompilerOptions
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231796">231796</a>
-[formatter] @throws tag description is not indented using @param preference when there's a syntax error
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255142">255142</a>
-[select] Codeselect should not omit cast
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235295">235295</a>
-[formatter] javadoc of CodeFormatter#F_INCLUDE_COMMENTS needs improvement
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280134">280134</a>
-[1.5][compiler] Requesting Java AST from selection has encountered a problem
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281317">281317</a>
-[search] An internal error occurred during: "Java Search".
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276373">276373</a>
-Incorrect resource comparison with IJavaProject.isOnClasspath(IResource)
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275518">275518</a>
-[assist] Content assist does not provide proposals if invoked right after a method's opening brace
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280888">280888</a>
-change a java file in one plug-in will compile all related plugin projects
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274466">274466</a>
-[assist] Assert expressions should be proposed with high relevance
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277382">277382</a>
-NPE and other failures in Parser
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275330">275330</a>
-NPE from org.eclipse.jdt.internal.core.ClasspathChange.requestIndexing
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273385">273385</a>
-[model] NPE while closing project
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280079">280079</a>
-NPE while parsing K_CLASS_BODY_DECLARATIONS
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280063">280063</a>
-org.eclipse.jdt.internal.compiler.parser.Parser.parseClassBodyDeclarations(char[], int, int, CompilationUnitDeclaration) should return consistent results
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267046">267046</a>
-SourceMapper infinite loop on primitive type in generic
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=240934">240934</a>
-Add support for the invokedynamic bytecode into the disassembler
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267551">267551</a>
-[formatter] Wrong spacing in default array parameter for annotation type
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277965">277965</a>
-[compiler] NPE in canBeSeenBy due to illegal protected toplevel class
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273990">273990</a>
-[compiler] FUP of 269388: Eclipse accepts code rejected by javac
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279183">279183</a>
-[1.6][compiler] Inconsistent stackmap frames generated by JDT cause VerifyError
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209778">209778</a>
-[search] TypeReferenceMatch#getOtherElements() fails for match in annotation
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=221065">221065</a>
-[search] Search still finds overridden method
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279836">279836</a>
-[1.5][compiler] Eclipse compiler shows error on javac-valid construct: raw types on overridden methods
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280616">280616</a>
-[formatter] Valid 1.5 code is not formatted inside <pre> tag
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280255">280255</a>
-[formatter] Format edited lines adds two new lines on each save
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280061">280061</a>
-[formatter] AIOOBE while formatting javadoc comment
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276938">276938</a>
-Remove unreachable removes reachable logic in case statement.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274898">274898</a>
-[recovery] IllegalArgumentException in ASTNode#setSourceRange()
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277204">277204</a>
-IAE in SharedASTProvider for generic local class.
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276741">276741</a>
-comparing identical value detection does not work for this
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276740">276740</a>
-comparing identical value detection does not work for primitive types
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278745">278745</a>
-Methods overloaded with unavailable types worked in 3.4 but give "indirectly referenced.." error in 3.5
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278305">278305</a>
-[1.5][compiler] JDT accepts supertype parameterized with wildcard
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196308">196308</a>
-[formatter] Don't escape entity when formatting in <pre> tags within javadoc comments
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279359">279359</a>
-[formatter] Formatter with 'never join lines' produces extra level of indent
-<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273619">273619</a>
-[formatter] Formatting repeats *} in javadoc
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317841">317841</a>
+[incremental build] unnecessary 'structural changes' due to annotation parameters
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317468">317468</a>
+Adding elements to an enum body with trailing comma generates bad code
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313668">313668</a>
+[search] Call hierarchy doesn't show all calls of the method in workspace
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317972">317972</a>
+Fix for wrong usages of affect* and effect*
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313651">313651</a>
+[formatter] format comments (differs between paste and save action)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316889">316889</a>
+Internal compiler error: java.lang.NullPointerException with a specific use of recursive generics
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315978">315978</a>
+Big regression, eclipse compiles my workspace in 3 mins instead of few seconds
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315577">315577</a>
+[formatter] No line break after <br> if followed by {@link when formatting java source file
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306464">306464</a>
+NPE in ProblemReporter.missingTypeInMethod(ProblemReporter.java:5113)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317212">317212</a>
+[compiler] Illegal permission to invoke the constructor of a member class of an inaccessible type.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346">195346</a>
+[assist] Array type should be filtered while completing in case of a switch
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315732">315732</a>
+[formatter] NullPointerException (always) on inserting a custom template proposal into java code when "Use code formatter" is on
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316456">316456</a>
+[1.5][compiler] Annotation values can access private class members
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312989">312989</a>
+Accepts illegal method-local classes if hidden by generics parameters
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310423">310423</a>
+[content assist] After 'implements' annotation types should not be proposed
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314830">314830</a>
+[compiler] Switching on a null expression doesn't always throw NullPointerException
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313825">313825</a>
+Erroneous local variable's problems reported at surrounding ParenthesizedExpression
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314898">314898</a>
+Typo in org.eclipse.jdt.core.dom.NameEnviromentWithProgress
+
 
 <hr>
-<p>For earlier build notes, also see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/R35_buildnotes_jdt-core.html">build notes up to Release 3.5</a>.</p>
+<p>For earlier build notes, also see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/R36_buildnotes_jdt-core.html">build notes up to Release 3.6</a>.</p>
 <br>
   <p>
     <a href="http://validator.w3.org/check?uri=referer"><img
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
index 4ff8e23..2b97f32 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
@@ -522,8 +522,10 @@ public final class CompletionEngine
 	boolean assistNodeIsConstructor;
 	boolean assistNodeIsSuperType;
 	boolean assistNodeIsExtendedType;
+	boolean assistNodeIsInterfaceExcludingAnnotation; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=310423
 	int  assistNodeInJavadoc = 0;
 	boolean assistNodeCanBeSingleMemberAnnotation = false;
+	boolean assistNodeIsInsideCase = false; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
 	
 	long targetedElement;
 	
@@ -668,6 +670,17 @@ public final class CompletionEngine
 		this.monitor = monitor;
 	}
 	
+	public void accept(ICompilationUnit sourceUnit, AccessRestriction accessRestriction) {
+		if (!CharOperation.equals(sourceUnit.getMainTypeName(), TypeConstants.PACKAGE_INFO_NAME)) {
+			// do not accept package-info.java as a type for completion engine
+			// because it contains no extra info that will help in completion
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=343865
+			// Required after the fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=337868
+			// because now we get a type corresponding to the package-info.java from the java model.
+			super.accept(sourceUnit, accessRestriction);
+		}
+	}
+	
 	public void acceptConstructor(
 			int modifiers,
 			char[] simpleTypeName,
@@ -2783,6 +2796,7 @@ public final class CompletionEngine
 			this.assistNodeIsInterface = ref.isInterface();
 			this.assistNodeIsSuperType = ref.isSuperType();
 			this.assistNodeIsExtendedType = assistNodeIsExtendedType(astNode, astNodeParent);
+			this.assistNodeIsInterfaceExcludingAnnotation = assistNodeIsInterfaceExcludingAnnotation(astNode, astNodeParent);
 
 			this.completionToken = ref.completionIdentifier;
 			long completionPosition = ref.sourcePositions[ref.tokens.length];
@@ -2845,6 +2859,37 @@ public final class CompletionEngine
 		return false;
 	}
 	
+	private boolean assistNodeIsInterfaceExcludingAnnotation(ASTNode astNode, ASTNode astNodeParent) {
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=310423, don't propose annotations for implements.
+		if (astNodeParent == null)
+			return false;
+		if (astNodeParent instanceof TypeDeclaration) {
+			TypeDeclaration typeDeclaration = (TypeDeclaration) astNodeParent;
+			TypeReference [] superInterfaces = typeDeclaration.superInterfaces;
+			int length = superInterfaces == null ? 0 : superInterfaces.length;
+			for (int i = 0; i < length; i++) {
+				if (superInterfaces[i] == astNode)
+					return true;
+			}
+		}
+		return false;
+	}
+	
+	private boolean assistNodeIsInsideCase(ASTNode astNode, ASTNode astNodeParent) {
+		// To find whether we're completing inside the case expression in a 
+		// switch case construct (https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346)
+		if (astNodeParent instanceof SwitchStatement) {
+			CaseStatement[] cases = ((SwitchStatement) astNodeParent).cases;
+			for (int i = 0, caseCount = ((SwitchStatement) astNodeParent).caseCount; i < caseCount; i++) {
+				CompletionNodeDetector detector = new CompletionNodeDetector(astNode, cases[i]);
+				if (detector.containsCompletionNode()) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
 	private void completionOnQualifiedAllocationExpression(ASTNode astNode, Binding qualifiedBinding, Scope scope) {
 		setSourceAndTokenRange(astNode.sourceStart, astNode.sourceEnd, false);
 
@@ -2901,7 +2946,7 @@ public final class CompletionEngine
 			(CompletionOnQualifiedNameReference) astNode;
 		this.completionToken = ref.completionIdentifier;
 		long completionPosition = ref.sourcePositions[ref.sourcePositions.length - 1];
-
+		
 		if (qualifiedBinding.problemId() == ProblemReasons.NotFound) {
 			setSourceAndTokenRange((int) (completionPosition >>> 32), (int) completionPosition);
 			// complete field members with missing fields type
@@ -3044,7 +3089,8 @@ public final class CompletionEngine
 		this.assistNodeIsConstructor = ref.isConstructorType;
 		this.assistNodeIsSuperType = ref.isSuperType();
 		this.assistNodeIsExtendedType = assistNodeIsExtendedType(astNode, astNodeParent);
-
+		this.assistNodeIsInterfaceExcludingAnnotation = assistNodeIsInterfaceExcludingAnnotation(astNode, astNodeParent);
+		
 		this.completionToken = ref.completionIdentifier;
 		long completionPosition = ref.sourcePositions[ref.tokens.length];
 
@@ -3178,7 +3224,8 @@ public final class CompletionEngine
 		this.assistNodeIsConstructor = singleRef.isConstructorType;
 		this.assistNodeIsSuperType = singleRef.isSuperType();
 		this.assistNodeIsExtendedType = assistNodeIsExtendedType(astNode, astNodeParent);
-
+		this.assistNodeIsInterfaceExcludingAnnotation = assistNodeIsInterfaceExcludingAnnotation(astNode, astNodeParent);
+		
 		// can be the start of a qualified type name
 		if (qualifiedBinding == null) {
 			if (this.completionToken.length == 0 &&
@@ -3390,6 +3437,11 @@ public final class CompletionEngine
 			if(binding != null) {
 				if(!(variable.initialization instanceof ArrayInitializer)) {
 					addExpectedType(binding, scope);
+				} else { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=310747
+					// If the variable is of type X[], and we're in the initializer
+					// we should have X as the expected type for the variable initializers.
+					binding = binding.leafComponentType();
+					addExpectedType(binding, scope);
 				}
 			}
 		} else if(parent instanceof Assignment) {
@@ -3406,7 +3458,7 @@ public final class CompletionEngine
 				}
 			}
 		} else if(parent instanceof CastExpression) {
-			Expression e = ((CastExpression)parent).type;
+			TypeReference e = ((CastExpression)parent).type;
 			TypeBinding binding = e.resolvedType;
 			if(binding != null){
 				addExpectedType(binding, scope);
@@ -3619,6 +3671,7 @@ public final class CompletionEngine
 			}
 		} else if (parent instanceof SwitchStatement) {
 			SwitchStatement switchStatement = (SwitchStatement) parent;
+			this.assistNodeIsInsideCase = assistNodeIsInsideCase(node, parent);
 			if (switchStatement.expression != null &&
 					switchStatement.expression.resolvedType != null) {
 				addExpectedType(switchStatement.expression.resolvedType, scope);
@@ -4088,6 +4141,13 @@ public final class CompletionEngine
 		}
 		return 0;
 	}
+	
+	private int computeRelevanceForFinal(boolean onlyFinal, boolean isFinal) {
+		if (onlyFinal && isFinal) {
+			return R_FINAL;
+		}
+		return 0;
+	}
 
 	private long computeTargetedElement(CompletionOnAnnotationOfType fakeNode) {
 		ASTNode annotatedElement = fakeNode.potentialAnnotatedNode;
@@ -5927,13 +5987,55 @@ public final class CompletionEngine
 		int receiverEnd) {
 
 		ObjectVector newFieldsFound = new ObjectVector();
+		// if the proposal is being asked inside a field's initialization, we'll record its id
+		int fieldBeingCompletedId = -1;
+		boolean isFieldBeingCompletedStatic = false;
+		for (int f = fields.length; --f >=0;) {
+			FieldBinding field = fields[f];
+			FieldDeclaration fieldDeclaration = field.sourceField();
+			// We maybe asking for a proposal inside this field's initialization. So record its id
+			ASTNode astNode = this.parser.assistNode;
+			if (fieldDeclaration != null && fieldDeclaration.initialization != null && astNode != null) {
+				if (fieldDeclaration.initialization.sourceEnd > 0) {
+					if (fieldDeclaration.initialization.sourceStart <= astNode.sourceStart &&
+						astNode.sourceEnd <= fieldDeclaration.initialization.sourceEnd) {
+						// completion is inside a field initializer
+						fieldBeingCompletedId = field.id;
+						isFieldBeingCompletedStatic = field.isStatic();
+						break;
+					}
+				} else { // The sourceEnd may not yet be set
+					CompletionNodeDetector detector = new CompletionNodeDetector(astNode, fieldDeclaration.initialization);
+					if (detector.containsCompletionNode()) {  // completion is inside a field initializer
+						fieldBeingCompletedId = field.id;
+						isFieldBeingCompletedStatic = field.isStatic();
+						break;
+					}
+				}
+			}
+		}
 		// Inherited fields which are hidden by subclasses are filtered out
 		// No visibility checks can be performed without the scope & invocationSite
 
 		int fieldLength = fieldName.length;
 		next : for (int f = fields.length; --f >= 0;) {
 			FieldBinding field = fields[f];
-
+			
+			// Content assist invoked inside some field's initialization.
+			// bug 310427 and 325481
+			if (fieldBeingCompletedId >= 0 && field.id >= fieldBeingCompletedId) {
+				// Don't propose field which is being declared currently
+				// Don't propose fields declared after the current field declaration statement
+				// Though, if field is static, then it can be still be proposed
+				if (!field.isStatic()) { 
+					continue next;
+				} else if (isFieldBeingCompletedStatic) {
+					// static fields can't be proposed before they are actually declared if the 
+					// field currently being declared is also static
+					continue next;
+				}
+			}
+			
 			if (field.isSynthetic())	continue next;
 
 			if (onlyStaticFields && !field.isStatic()) continue next;
@@ -5950,6 +6052,18 @@ public final class CompletionEngine
 
 			if (this.options.checkVisibility
 				&& !field.canBeSeenBy(receiverType, invocationSite, scope))	continue next;
+			
+			// don't propose non constant fields or strings (1.6 or below) in case expression
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342
+			if (this.assistNodeIsInsideCase) {
+				if (field.isFinal() && field.isStatic()) {
+					if (!(field.type instanceof BaseTypeBinding))
+						continue next; 
+				} else {
+					continue next; // non-constants not allowed in case.	
+				}
+			}
 
 			boolean prefixRequired = false;
 
@@ -6037,6 +6151,7 @@ public final class CompletionEngine
 			relevance += computeRelevanceForExpectingType(field.type);
 			relevance += computeRelevanceForEnumConstant(field.type);
 			relevance += computeRelevanceForStatic(onlyStaticFields, field.isStatic());
+			relevance += computeRelevanceForFinal(this.assistNodeIsInsideCase, field.isFinal());
 			relevance += computeRelevanceForQualification(prefixRequired);
 			relevance += computeRelevanceForRestrictions(IAccessRule.K_ACCESSIBLE);
 			if (onlyStaticFields && this.insideQualifiedReference) {
@@ -6650,133 +6765,142 @@ public final class CompletionEngine
 		if (enclosingNode == null || !(enclosingNode instanceof IfStatement)) return;
 
 		IfStatement ifStatement = (IfStatement)enclosingNode;
-
-		if (!(ifStatement.condition instanceof InstanceOfExpression)) return;
-
-		InstanceOfExpression instanceOfExpression = (InstanceOfExpression) ifStatement.condition;
-
-		TypeReference instanceOfType = instanceOfExpression.type;
-
-		if (instanceOfType.resolvedType == null) return;
-
-		boolean findFromAnotherReceiver = false;
-
-		char[][] receiverName = null;
-		int receiverStart = -1;
-		int receiverEnd = -1;
-
-		if (receiver instanceof QualifiedNameReference) {
-			QualifiedNameReference qualifiedNameReference = (QualifiedNameReference) receiver;
-
-			receiverName = qualifiedNameReference.tokens;
-
-			if (receiverName.length != 1) return;
-
-			receiverStart = (int) (qualifiedNameReference.sourcePositions[0] >>> 32);
-			receiverEnd = (int) qualifiedNameReference.sourcePositions[qualifiedNameReference.tokens.length - 1] + 1;
-
-			// if (local instanceof X) local.|
-			// if (field instanceof X) field.|
-			if (instanceOfExpression.expression instanceof SingleNameReference &&
-					((SingleNameReference)instanceOfExpression.expression).binding == qualifiedBinding &&
-					(qualifiedBinding instanceof LocalVariableBinding || qualifiedBinding instanceof FieldBinding)) {
-				findFromAnotherReceiver = true;
-			}
-
-			// if (this.field instanceof X) field.|
-			if (instanceOfExpression.expression instanceof FieldReference) {
-				FieldReference fieldReference = (FieldReference)instanceOfExpression.expression;
-
-				if (fieldReference.receiver instanceof ThisReference &&
-						qualifiedBinding instanceof FieldBinding &&
-						fieldReference.binding == qualifiedBinding) {
-							findFromAnotherReceiver = true;
-				}
-			}
-		} else if (receiver instanceof FieldReference) {
-			FieldReference fieldReference1 = (FieldReference) receiver;
-
-			receiverStart = fieldReference1.sourceStart;
-			receiverEnd = fieldReference1.sourceEnd + 1;
-
-			if (fieldReference1.receiver instanceof ThisReference) {
-
-				receiverName = new char[][] {THIS, fieldReference1.token};
-
-				// if (field instanceof X) this.field.|
+		while (true) {
+			if (!(ifStatement.condition instanceof InstanceOfExpression)) return;
+	
+			InstanceOfExpression instanceOfExpression = (InstanceOfExpression) ifStatement.condition;
+	
+			TypeReference instanceOfType = instanceOfExpression.type;
+	
+			if (instanceOfType.resolvedType == null) return;
+	
+			boolean findFromAnotherReceiver = false;
+	
+			char[][] receiverName = null;
+			int receiverStart = -1;
+			int receiverEnd = -1;
+	
+			if (receiver instanceof QualifiedNameReference) {
+				QualifiedNameReference qualifiedNameReference = (QualifiedNameReference) receiver;
+	
+				receiverName = qualifiedNameReference.tokens;
+	
+				if (receiverName.length != 1) return;
+	
+				receiverStart = (int) (qualifiedNameReference.sourcePositions[0] >>> 32);
+				receiverEnd = (int) qualifiedNameReference.sourcePositions[qualifiedNameReference.tokens.length - 1] + 1;
+	
+				// if (local instanceof X) local.|
+				// if (field instanceof X) field.|
 				if (instanceOfExpression.expression instanceof SingleNameReference &&
-						((SingleNameReference)instanceOfExpression.expression).binding == fieldReference1.binding) {
+						((SingleNameReference)instanceOfExpression.expression).binding == qualifiedBinding &&
+						(qualifiedBinding instanceof LocalVariableBinding || qualifiedBinding instanceof FieldBinding)) {
 					findFromAnotherReceiver = true;
 				}
-
-				// if (this.field instanceof X) this.field.|
+	
+				// if (this.field instanceof X) field.|
 				if (instanceOfExpression.expression instanceof FieldReference) {
-					FieldReference fieldReference2 = (FieldReference)instanceOfExpression.expression;
-
-					if (fieldReference2.receiver instanceof ThisReference &&
-							fieldReference2.binding == fieldReference1.binding) {
+					FieldReference fieldReference = (FieldReference)instanceOfExpression.expression;
+	
+					if (fieldReference.receiver instanceof ThisReference &&
+							qualifiedBinding instanceof FieldBinding &&
+							fieldReference.binding == qualifiedBinding) {
 								findFromAnotherReceiver = true;
 					}
 				}
+			} else if (receiver instanceof FieldReference) {
+				FieldReference fieldReference1 = (FieldReference) receiver;
+	
+				receiverStart = fieldReference1.sourceStart;
+				receiverEnd = fieldReference1.sourceEnd + 1;
+	
+				if (fieldReference1.receiver instanceof ThisReference) {
+	
+					receiverName = new char[][] {THIS, fieldReference1.token};
+	
+					// if (field instanceof X) this.field.|
+					if (instanceOfExpression.expression instanceof SingleNameReference &&
+							((SingleNameReference)instanceOfExpression.expression).binding == fieldReference1.binding) {
+						findFromAnotherReceiver = true;
+					}
+	
+					// if (this.field instanceof X) this.field.|
+					if (instanceOfExpression.expression instanceof FieldReference) {
+						FieldReference fieldReference2 = (FieldReference)instanceOfExpression.expression;
+	
+						if (fieldReference2.receiver instanceof ThisReference &&
+								fieldReference2.binding == fieldReference1.binding) {
+									findFromAnotherReceiver = true;
+						}
+					}
+				}
 			}
-		}
-
-		if (findFromAnotherReceiver) {
-			TypeBinding receiverTypeBinding = instanceOfType.resolvedType;
-			char[] castedReceiver = null;
-
-			char[] castedTypeChars = CharOperation.concatWith(instanceOfType.getTypeName(), '.');
-			if(this.source != null) {
-				int memberRefStart = this.startPosition;
-
-				char[] receiverChars = CharOperation.subarray(this.source, receiverStart, receiverEnd);
-				char[] dotChars = CharOperation.subarray(this.source, receiverEnd, memberRefStart);
-
-				castedReceiver =
-					CharOperation.concat(
+	
+			if (findFromAnotherReceiver) {
+				TypeBinding receiverTypeBinding = instanceOfType.resolvedType;
+				char[] castedReceiver = null;
+	
+				char[] castedTypeChars = CharOperation.concatWith(instanceOfType.getTypeName(), '.');
+				if(this.source != null) {
+					int memberRefStart = this.startPosition;
+	
+					char[] receiverChars = CharOperation.subarray(this.source, receiverStart, receiverEnd);
+					char[] dotChars = CharOperation.subarray(this.source, receiverEnd, memberRefStart);
+	
+					castedReceiver =
 						CharOperation.concat(
-							'(',
 							CharOperation.concat(
-								CharOperation.concat('(', castedTypeChars, ')'),
-								receiverChars),
-							')'),
-						dotChars);
-			} else {
-				castedReceiver =
-					CharOperation.concat(
+								'(',
+								CharOperation.concat(
+									CharOperation.concat('(', castedTypeChars, ')'),
+									receiverChars),
+								')'),
+							dotChars);
+				} else {
+					castedReceiver =
 						CharOperation.concat(
-							'(',
 							CharOperation.concat(
-								CharOperation.concat('(', castedTypeChars, ')'),
-								CharOperation.concatWith(receiverName, '.')),
-							')'),
-						DOT);
+								'(',
+								CharOperation.concat(
+									CharOperation.concat('(', castedTypeChars, ')'),
+									CharOperation.concatWith(receiverName, '.')),
+								')'),
+							DOT);
+				}
+	
+				if (castedReceiver == null) return;
+	
+				int oldStartPosition = this.startPosition;
+				this.startPosition = receiverStart;
+	
+				findFieldsAndMethods(
+						this.completionToken,
+						receiverTypeBinding,
+						scope,
+						fieldsFound,
+						methodsFound,
+						invocationSite,
+						invocationScope,
+						false,
+						false,
+						null,
+						null,
+						null,
+						false,
+						castedReceiver,
+						receiverStart,
+						receiverEnd);
+	
+				this.startPosition = oldStartPosition;
+			}
+			// traverse the enclosing node to find the instanceof expression corresponding
+			// to the completion node (if any)
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=304006
+			if (ifStatement.thenStatement instanceof IfStatement) {
+				ifStatement = (IfStatement) ifStatement.thenStatement;
+			} else {
+				break;
 			}
-
-			if (castedReceiver == null) return;
-
-			int oldStartPosition = this.startPosition;
-			this.startPosition = receiverStart;
-
-			findFieldsAndMethods(
-					this.completionToken,
-					receiverTypeBinding,
-					scope,
-					fieldsFound,
-					methodsFound,
-					invocationSite,
-					invocationScope,
-					false,
-					false,
-					null,
-					null,
-					null,
-					false,
-					castedReceiver,
-					receiverStart,
-					receiverEnd);
-
-			this.startPosition = oldStartPosition;
 		}
 	}
 	private void findFieldsAndMethodsFromFavorites(
@@ -6868,21 +6992,14 @@ public final class CompletionEngine
 
 		boolean foundSomeFields = false;
 
-		boolean staticsOnly = false;
 		Scope currentScope = scope;
 
 		done : while (true) { // done when a COMPILATION_UNIT_SCOPE is found
 
 			switch (currentScope.kind) {
 
-				case Scope.METHOD_SCOPE :
-					// handle the error case inside an explicit constructor call (see MethodScope>>findField)
-					MethodScope methodScope = (MethodScope) currentScope;
-					staticsOnly |= methodScope.isStatic | methodScope.isConstructorCall;
-					break;
 				case Scope.CLASS_SCOPE :
 					ClassScope classScope = (ClassScope) currentScope;
-					SourceTypeBinding enclosingType = classScope.referenceContext.binding;
 					if(!insideTypeAnnotation) {
 
 						FieldDeclaration[] fields = classScope.referenceContext.fields;
@@ -6904,7 +7021,6 @@ public final class CompletionEngine
 							}
 						}
 					}
-					staticsOnly |= enclosingType.isStatic();
 					insideTypeAnnotation = false;
 					break;
 				case Scope.COMPILATION_UNIT_SCOPE :
@@ -6922,21 +7038,14 @@ public final class CompletionEngine
 		InvocationSite invocationSite,
 		boolean insideTypeAnnotation) {
 
-		boolean staticsOnly = false;
 		Scope currentScope = scope;
 
 		done : while (true) { // done when a COMPILATION_UNIT_SCOPE is found
 
 			switch (currentScope.kind) {
 
-				case Scope.METHOD_SCOPE :
-					// handle the error case inside an explicit constructor call (see MethodScope>>findField)
-					MethodScope methodScope = (MethodScope) currentScope;
-					staticsOnly |= methodScope.isStatic | methodScope.isConstructorCall;
-					break;
 				case Scope.CLASS_SCOPE :
 					ClassScope classScope = (ClassScope) currentScope;
-					SourceTypeBinding enclosingType = classScope.referenceContext.binding;
 					if(!insideTypeAnnotation) {
 
 						AbstractMethodDeclaration[] methods = classScope.referenceContext.methods;
@@ -6990,7 +7099,6 @@ public final class CompletionEngine
 							}
 						}
 					}
-					staticsOnly |= enclosingType.isStatic();
 					insideTypeAnnotation = false;
 					break;
 				case Scope.COMPILATION_UNIT_SCOPE :
@@ -9284,6 +9392,7 @@ public final class CompletionEngine
 			typesFound.add(memberType);
 
 			if (this.assistNodeIsExtendedType && memberType.isFinal()) continue next;
+			if (this.assistNodeIsInterfaceExcludingAnnotation && memberType.isAnnotationType()) continue next;
 			if(!this.insideQualifiedReference) {
 				if(this.assistNodeIsClass) {
 					if(!memberType.isClass()) continue next;
@@ -9626,6 +9735,9 @@ public final class CompletionEngine
 		if (selector == null && notInJavadoc) {
 			return;
 		}
+		
+		if (this.assistNodeIsInsideCase)
+			return;		// no methods should be proposed inside case expression
 
 		ReferenceBinding currentType = receiverType;
 		if (notInJavadoc) {
@@ -9772,6 +9884,7 @@ public final class CompletionEngine
 								}
 
 								if (this.assistNodeIsExtendedType && localType.isFinal()) continue next;
+								if (this.assistNodeIsInterfaceExcludingAnnotation && localType.isAnnotationType()) continue next;
 								if(this.assistNodeIsClass) {
 									if(!localType.isClass()) continue next;
 								} else if(this.assistNodeIsInterface) {
@@ -10153,6 +10266,7 @@ public final class CompletionEngine
 				typesFound.add(sourceType);
 
 				if (this.assistNodeIsExtendedType && sourceType.isFinal()) continue next;
+				if (this.assistNodeIsInterfaceExcludingAnnotation && sourceType.isAnnotationType()) continue next;
 				if(this.assistNodeIsClass) {
 					if(!sourceType.isClass()) continue next;
 				} else if(this.assistNodeIsInterface) {
@@ -10286,6 +10400,8 @@ public final class CompletionEngine
 				int searchFor = IJavaSearchConstants.TYPE;
 				if(this.assistNodeIsClass) {
 					searchFor = IJavaSearchConstants.CLASS;
+				} else if (this.assistNodeIsInterfaceExcludingAnnotation) {
+					searchFor = IJavaSearchConstants.INTERFACE;
 				} else if(this.assistNodeIsInterface) {
 					searchFor = IJavaSearchConstants.INTERFACE_AND_ANNOTATION;
 				} else if(this.assistNodeIsEnum) {
@@ -10378,6 +10494,7 @@ public final class CompletionEngine
 					continue;
 
 			    if (this.assistNodeIsExtendedType && sourceType.isFinal()) continue;
+			    if (this.assistNodeIsInterfaceExcludingAnnotation && sourceType.isAnnotationType()) continue;
 				int accessibility = IAccessRule.K_ACCESSIBLE;
 				if(sourceType.hasRestrictedAccess()) {
 					AccessRestriction accessRestriction = this.lookupEnvironment.getAccessRestriction(sourceType);
@@ -10465,6 +10582,8 @@ public final class CompletionEngine
 			int searchFor = IJavaSearchConstants.TYPE;
 			if(this.assistNodeIsClass) {
 				searchFor = IJavaSearchConstants.CLASS;
+			} else if (this.assistNodeIsInterfaceExcludingAnnotation) {
+				searchFor = IJavaSearchConstants.INTERFACE;
 			} else if(this.assistNodeIsInterface) {
 				searchFor = IJavaSearchConstants.INTERFACE_AND_ANNOTATION;
 			} else if(this.assistNodeIsEnum) {
@@ -10571,6 +10690,7 @@ public final class CompletionEngine
 						}
 
 						if (this.assistNodeIsExtendedType && refBinding.isFinal()) continue next;
+						if (this.assistNodeIsInterfaceExcludingAnnotation && refBinding.isAnnotationType()) continue next;
 						if(this.assistNodeIsClass) {
 							if(!refBinding.isClass()) continue next;
 						} else if(this.assistNodeIsInterface) {
@@ -10701,6 +10821,7 @@ public final class CompletionEngine
 							typesFound.add(typeBinding);
 							
 							if (this.assistNodeIsExtendedType && typeBinding.isFinal()) continue;
+							if (this.assistNodeIsInterfaceExcludingAnnotation && typeBinding.isAnnotationType()) continue;
 							if(this.assistNodeIsClass) {
 								if(!typeBinding.isClass()) continue;
 							} else if(this.assistNodeIsInterface) {
@@ -10804,6 +10925,7 @@ public final class CompletionEngine
 							typesFound.add(typeBinding);
 
 							if (this.assistNodeIsExtendedType && typeBinding.isFinal()) continue;
+							if (this.assistNodeIsInterfaceExcludingAnnotation && typeBinding.isAnnotationType()) continue;
 							if(this.assistNodeIsClass) {
 								if(!typeBinding.isClass()) continue;
 							} else if(this.assistNodeIsInterface) {
@@ -11315,6 +11437,34 @@ public final class CompletionEngine
 
 							if (local.isSecret())
 								continue next;
+							
+							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328674
+							if (local.declaration.initialization != null) {
+								// proposal being asked inside field's initialization. Don't propose this field.
+								continue next;
+							}
+												
+							// don't propose non constant variables or strings (1.6 or below) in case expression
+							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
+							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=343342
+							if (this.assistNodeIsInsideCase) {
+								if (local.isFinal()) {
+									if (!(local.type instanceof BaseTypeBinding))
+										continue next; 
+								} else {
+									continue next; // non-constants not allowed in case.	
+								}
+							}
+							
+							int ptr = this.uninterestingBindingsPtr;
+							// Cases where the binding is uninteresting eg. for completion occurring inside a local var
+							// declaration, the local var binding is uninteresting and shouldn't be proposed.
+							while (ptr >= 0) {
+								if (this.uninterestingBindings[ptr] == local) {
+									continue next;
+								}
+								ptr--;
+							}
 
 							for (int f = 0; f < localsFound.size; f++) {
 								LocalVariableBinding otherLocal =
@@ -11332,6 +11482,7 @@ public final class CompletionEngine
 							relevance += computeRelevanceForEnumConstant(local.type);
 							relevance += computeRelevanceForQualification(false);
 							relevance += computeRelevanceForRestrictions(IAccessRule.K_ACCESSIBLE); // no access restriction for local variable
+							relevance += computeRelevanceForFinal(this.assistNodeIsInsideCase, local.isFinal());
 							this.noProposal = false;
 							if(!this.requestor.isIgnored(CompletionProposal.LOCAL_VARIABLE_REF)) {
 								InternalCompletionProposal proposal =  createProposal(CompletionProposal.LOCAL_VARIABLE_REF, this.actualCompletionPosition);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalCompletionProposal.java
index 9ded5eb..896c579 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Andreas Magnusson <andreas.ch.magnusson at gmail.com>- contribution for bug 151500
  *******************************************************************************/
 package org.eclipse.jdt.internal.codeassist;
 
@@ -194,7 +195,8 @@ public class InternalCompletionProposal extends CompletionProposal {
 			}
 		} else {
 			// TODO (david) shouldn't it be NameLookup.ACCEPT_ALL ?
-			NameLookup.Answer answer = this.nameLookup.findType(new String(tName),
+			NameLookup.Answer answer = this.nameLookup.findType(new String(declaringTypeName),
+				new String(declaringTypePackageName),
 				false,
 				NameLookup.ACCEPT_CLASSES & NameLookup.ACCEPT_INTERFACES,
 				true/* consider secondary types */,
@@ -210,21 +212,20 @@ public class InternalCompletionProposal extends CompletionProposal {
 		}
 
 		if(type != null) {
-			String[] args = new String[length];
-			for(int i = 0;	i< length ; i++){
-				args[i] = new String(paramTypeNames[i]);
-			}
-			IMethod method = type.getMethod(new String(selector),args);
-			
-			if (this.hasNoParameterNamesFromIndex) {
-				IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot)type.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
-				if (packageFragmentRoot.isArchive() ||
-						this.completionEngine.openedBinaryTypes < getOpenedBinaryTypesThreshold()) {
-					SourceMapper mapper = ((JavaElement)method).getSourceMapper();
-					if (mapper != null) {
-						try {
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=316937
+			// BinaryType#getMethod() creates a new instance of BinaryMethod, which is a dummy.
+			// Instead we have to use IType#findMethods() to get a handle to the method of our interest.
+			try {
+				IMethod method = findMethod(type, selector, paramTypeNames);
+				if (this.hasNoParameterNamesFromIndex) {
+
+					IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot)type.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
+					if (packageFragmentRoot.isArchive() ||
+							this.completionEngine.openedBinaryTypes < getOpenedBinaryTypesThreshold()) {
+						SourceMapper mapper = ((JavaElement)method).getSourceMapper();
+						if (mapper != null) {
 							char[][] paramNames = mapper.getMethodParameterNames(method);
-					
+
 							// map source and try to find parameter names
 							if(paramNames == null) {
 								if (!packageFragmentRoot.isArchive()) this.completionEngine.openedBinaryTypes++;
@@ -235,35 +236,28 @@ public class InternalCompletionProposal extends CompletionProposal {
 								}
 								paramNames = mapper.getMethodParameterNames(method);
 							}
-							
+
 							if(paramNames != null) {
 								parameters = paramNames;
 							}
-						} catch(JavaModelException e){
-							//parameters == null;
 						}
 					}
-				}
-			} else {
-				try{
+				} else {
 					IBinaryMethod info = (IBinaryMethod) ((JavaElement)method).getElementInfo();
 					char[][] argumentNames = info.getArgumentNames();
 					if (argumentNames != null && argumentNames.length == length) {
 						parameters = argumentNames;
+						return parameters;
 					}
-				} catch(JavaModelException e){
-					//parameters == null;
-				}
-				
-				try{
+
 					parameters = new char[length][];
 					String[] params = method.getParameterNames();
 					for(int i = 0;	i< length ; i++){
 						parameters[i] = params[i].toCharArray();
 					}
-				} catch(JavaModelException e){
-					parameters = null;
 				}
+			} catch(JavaModelException e){
+				parameters = null;
 			}
 		}
 
@@ -291,7 +285,8 @@ public class InternalCompletionProposal extends CompletionProposal {
 			}
 		} else {
 			// TODO (david) shouldn't it be NameLookup.ACCEPT_ALL ?
-			NameLookup.Answer answer = this.nameLookup.findType(new String(tName),
+			NameLookup.Answer answer = this.nameLookup.findType(new String(declaringTypeName),
+				new String(declaringTypePackageName),
 				false,
 				NameLookup.ACCEPT_CLASSES & NameLookup.ACCEPT_INTERFACES,
 				true/* consider secondary types */,
@@ -307,12 +302,11 @@ public class InternalCompletionProposal extends CompletionProposal {
 		}
 
 		if(type != null) {
-			String[] args = new String[length];
-			for(int i = 0;	i< length ; i++){
-				args[i] = new String(paramTypeNames[i]);
-			}
-			IMethod method = type.getMethod(new String(selector),args);
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=316937
+			// BinaryType#getMethod() creates a new instance of BinaryMethod, which is a dummy.
+			// Instead we have to use IType#findMethods() to get a handle to the method of our interest.
 			try{
+				IMethod method = findMethod(type, selector, paramTypeNames);
 				parameters = new char[length][];
 				String[] params = method.getParameterNames();
 				for(int i = 0;	i< length ; i++){
@@ -331,6 +325,35 @@ public class InternalCompletionProposal extends CompletionProposal {
 		return parameters;
 	}
 
+	private IMethod findMethod(IType type, char[] selector, char[][] paramTypeNames) throws JavaModelException {
+		IMethod method = null;
+		int startingIndex = 0;
+		String[] args;
+		IType enclosingType = type.getDeclaringType();
+		// If the method is a constructor of a non-static inner type, add the enclosing type as an 
+		// additional parameter to the constructor
+		if (enclosingType != null
+				&& CharOperation.equals(type.getElementName().toCharArray(), selector)
+				&& !Flags.isStatic(type.getFlags())) {
+			args = new String[paramTypeNames.length+1];
+			startingIndex = 1;
+			args[0] = Signature.createTypeSignature(enclosingType.getFullyQualifiedName(), true);
+		} else {
+			args = new String[paramTypeNames.length];
+		}
+		int length = args.length;
+		for(int i = startingIndex;	i< length ; i++){
+			args[i] = new String(paramTypeNames[i-startingIndex]);
+		}
+		method = type.getMethod(new String(selector), args);
+		
+		IMethod[] methods = type.findMethods(method);
+		if (methods != null && methods.length > 0) {
+			method = methods[0];
+		}
+		return method;
+	}
+
 	protected char[] getDeclarationPackageName() {
 		return this.declarationPackageName;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java
index 20fab09..73038d4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/InternalExtendedCompletionContext.java
@@ -24,6 +24,7 @@ import org.eclipse.jdt.internal.codeassist.complete.CompletionParser;
 import org.eclipse.jdt.internal.codeassist.impl.AssistCompilationUnit;
 import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.Initializer;
@@ -186,13 +187,40 @@ public class InternalExtendedCompletionContext {
 								break done;
 							}
 						} else {
-							FieldDeclaration fieldDeclaration = fields[i];
-							if (fieldDeclaration.initialization != null &&
-									fieldDeclaration.initialization.sourceStart <= astNode.sourceStart &&
-									astNode.sourceEnd <= fieldDeclaration.initialization.sourceEnd) {
-								// completion is inside a field initializer
-								searchVisibleVariablesAndMethods(scope, this.visibleLocalVariables, this.visibleFields, this.visibleMethods, notInJavadoc);
-								break done;
+							FieldDeclaration fieldDeclaration = fields[i];							
+							if (fieldDeclaration.initialization != null) {
+								boolean isInsideInitializer = false;
+								if (fieldDeclaration.initialization.sourceEnd > 0) {
+									if (fieldDeclaration.initialization.sourceStart <= astNode.sourceStart &&
+											astNode.sourceEnd <= fieldDeclaration.initialization.sourceEnd) {
+										// completion is inside a field initializer
+										isInsideInitializer = true;
+									}
+								} else { // The sourceEnd may not yet be set
+									CompletionNodeDetector detector = new CompletionNodeDetector(this.assistNode, fieldDeclaration.initialization);
+									if (detector.containsCompletionNode()) {
+										// completion is inside a field initializer
+										isInsideInitializer = true;
+									}
+								}
+								if (isInsideInitializer) {
+									searchVisibleVariablesAndMethods(scope, this.visibleLocalVariables, this.visibleFields, this.visibleMethods, notInJavadoc);
+									// remove this field from visibleFields list because completion is being asked in its
+									// intialization and so this has not yet been declared successfully.
+									if (this.visibleFields.size > 0 && this.visibleFields.contains(fieldDeclaration.binding)) {
+										this.visibleFields.remove(fieldDeclaration.binding);
+									}
+									int count = 0;
+									while (count < this.visibleFields.size) {
+										FieldBinding visibleField = (FieldBinding)this.visibleFields.elementAt(count);
+										if (visibleField.id > fieldDeclaration.binding.id) {
+											this.visibleFields.remove(visibleField);
+											continue;
+										}
+										count++;
+									}
+									break done;
+								}
 							}
 						}
 					}
@@ -242,7 +270,9 @@ public class InternalExtendedCompletionContext {
 				local.sourceStart,
 				local.sourceEnd,
 				Util.typeSignature(local.type),
-				binding.declaration.annotations);
+				binding.declaration.annotations,
+				local.modifiers,
+				local.getKind() == AbstractVariableDeclaration.PARAMETER);
 	}
 
 	private JavaElement getJavaElementOfCompilationUnit(Binding binding) {
@@ -349,7 +379,7 @@ public class InternalExtendedCompletionContext {
 			next : for (int i = 0; i < size; i++) {
 				try {
 					LocalVariableBinding binding = (LocalVariableBinding) this.visibleLocalVariables.elementAt(i);
-					if (assignableTypeBinding != null && !binding.type.isCompatibleWith(assignableTypeBinding)) continue next;
+					if (binding.type == null || (assignableTypeBinding != null && !binding.type.isCompatibleWith(assignableTypeBinding))) continue next;
 					JavaElement localVariable = getJavaElement(binding);
 					if (localVariable != null) result[elementCount++] = localVariable;
 				} catch(AbortCompilation e) {
@@ -721,11 +751,13 @@ public class InternalExtendedCompletionContext {
 						// If the local variable declaration's initialization statement itself has the completion,
 						// then don't propose the local variable
 						if (local.declaration.initialization != null) {
-							if(local.declaration.initialization.sourceEnd > 0) {
-									if (this.assistNode.sourceEnd <= local.declaration.initialization.sourceEnd
-											&& this.assistNode.sourceStart >= local.declaration.initialization.sourceStart) {
-										continue next;
-									}
+							/*(use this if-else block if it is found that local.declaration.initialization != null is not sufficient to 
+							  guarantee that proposal is being asked inside a local variable declaration's initializer)
+							 if(local.declaration.initialization.sourceEnd > 0) {
+								if (this.assistNode.sourceEnd <= local.declaration.initialization.sourceEnd
+										&& this.assistNode.sourceStart >= local.declaration.initialization.sourceStart) {
+									continue next;
+								}
 							} else {
 								CompletionNodeDetector detector = new CompletionNodeDetector(
 										this.assistNode,
@@ -733,7 +765,8 @@ public class InternalExtendedCompletionContext {
 								if (detector.containsCompletionNode()) {
 									continue next;
 								}
-							}
+							}*/
+							continue next;
 						}
 						for (int f = 0; f < localsFound.size; f++) {
 							LocalVariableBinding otherLocal =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java
index 72abf4f..a5d69b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,4 +53,5 @@ public interface RelevanceConstants {
 	int R_NO_PROBLEMS = 1;
 	int R_RESOLVED = 1;
 	int R_TARGET = 5;
+	int R_FINAL = 3; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
index 267e42d..a51d9bc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,12 +10,18 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.codeassist;
 
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jdt.core.IBuffer;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IOpenable;
+import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
@@ -1106,7 +1112,7 @@ public final class SelectionEngine extends Engine implements ISearchRequestor {
 			}
 			this.acceptedAnswer = true;
 		} else if (binding instanceof MethodBinding) {
-			MethodBinding methodBinding = (MethodBinding) binding;
+			MethodBinding methodBinding = getCorrectMethodBinding((MethodBinding) binding);
 			this.noProposal = false;
 
 			boolean isValuesOrValueOf = false;
@@ -1608,4 +1614,192 @@ public final class SelectionEngine extends Engine implements ISearchRequestor {
 
 		return false;
 	}
+	
+	/*
+	 * Returns the correct method binding according to whether the selection is on the method declaration
+	 * or on the inheritDoc tag in its javadoc.
+	 */
+	private MethodBinding getCorrectMethodBinding(MethodBinding binding) {
+		if (this.parser.javadocParser instanceof SelectionJavadocParser) {
+			if (((SelectionJavadocParser)this.parser.javadocParser).inheritDocTagSelected){
+				try {
+					Object res = findMethodWithAttachedDocInHierarchy(binding);
+					if (res instanceof MethodBinding) {
+						return (MethodBinding) res;
+					}
+				} catch (JavaModelException e) {
+					return null;
+				}
+			}
+		}
+		return binding;
+	}
+	
+	protected MethodBinding findOverriddenMethodInType(ReferenceBinding overriddenType, MethodBinding overriding) throws JavaModelException {
+		if (overriddenType == null)
+			return null;
+		MethodBinding[] overriddenMethods= overriddenType.availableMethods();
+		LookupEnvironment lookupEnv = this.lookupEnvironment;
+		if (lookupEnv != null && overriddenMethods != null) {
+			for (int i= 0; i < overriddenMethods.length; i++) {
+				if (lookupEnv.methodVerifier().isMethodSubsignature(overriding, overriddenMethods[i])) {
+					return overriddenMethods[i];
+				}
+			}
+		}
+		return null;
+	}
+	
+	private Object findMethodWithAttachedDocInHierarchy(final MethodBinding method) throws JavaModelException {
+		ReferenceBinding type= method.declaringClass;
+		final SelectionRequestor requestor1 = (SelectionRequestor) this.requestor;
+		return new InheritDocVisitor() {
+			public Object visit(ReferenceBinding currType) throws JavaModelException {
+				MethodBinding overridden =  findOverriddenMethodInType(currType, method);
+				if (overridden == null)
+					return InheritDocVisitor.CONTINUE;
+				TypeBinding args[] = overridden.parameters;
+				String names[] = new String[args.length];
+				for (int i = 0; i < args.length; i++) {
+					names[i] = Signature.createTypeSignature(args[i].sourceName(), false);
+				}
+				IMember member = (IMember) requestor1.findMethodFromBinding(overridden, names, overridden.declaringClass);
+				if (member == null)
+					return InheritDocVisitor.CONTINUE;
+				if (member.getAttachedJavadoc(null) != null ) {  
+					// for binary methods with attached javadoc and no source attached
+					return overridden;
+				}
+				IOpenable openable = member.getOpenable();
+				if (openable == null)
+					return InheritDocVisitor.CONTINUE;
+				IBuffer buf= openable.getBuffer();
+				if (buf == null) {
+					// no source attachment found. This method maybe the one. Stop.
+					return InheritDocVisitor.STOP_BRANCH;
+				}
+
+				ISourceRange javadocRange= member.getJavadocRange();
+				if (javadocRange == null)
+					return InheritDocVisitor.CONTINUE;	// this method doesn't have javadoc, continue to look.
+				String rawJavadoc= buf.getText(javadocRange.getOffset(), javadocRange.getLength());
+				if (rawJavadoc != null) {
+					return overridden;
+				}
+				return InheritDocVisitor.CONTINUE;
+			}
+		}.visitInheritDoc(type);
+	}
+	
+	/**
+	 * Implements the "Algorithm for Inheriting Method Comments" as specified for
+	 * <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/javadoc.html#inheritingcomments">1.4.2</a>,
+	 * <a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javadoc.html#inheritingcomments">1.5</a>, and
+	 * <a href="http://java.sun.com/javase/6/docs/technotes/tools/windows/javadoc.html#inheritingcomments">1.6</a>.
+	 *
+	 * <p>
+	 * Unfortunately, the implementation is broken in Javadoc implementations since 1.5, see
+	 * <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6376959">Sun's bug</a>.
+	 * </p>
+	 *
+	 * <p>
+	 * We adhere to the spec.
+	 * </p>
+	 */
+	static abstract class InheritDocVisitor {
+		public static final Object STOP_BRANCH= new Object() {
+			public String toString() { return "STOP_BRANCH"; } //$NON-NLS-1$
+		};
+		public static final Object CONTINUE= new Object() {
+			public String toString() { return "CONTINUE"; } //$NON-NLS-1$
+		};
+
+		/**
+		 * Visits a type and decides how the visitor should proceed.
+		 *
+		 * @param currType the current type
+		 * @return <ul>
+		 *         <li>{@link #STOP_BRANCH} to indicate that no Javadoc has been found and visiting
+		 *         super types should stop here</li>
+		 *         <li>{@link #CONTINUE} to indicate that no Javadoc has been found and visiting
+		 *         super types should continue</li>
+		 *         <li>an {@link Object} or <code>null</code>, to indicate that visiting should be
+		 *         cancelled immediately. The returned value is the result of
+		 *         {@link #visitInheritDoc(ReferenceBinding)}</li>
+		 *         </ul>
+		 * @throws JavaModelException unexpected problem
+		 * @see #visitInheritDoc(ReferenceBinding)
+		 */
+		public abstract Object visit(ReferenceBinding currType) throws JavaModelException;
+
+		/**
+		 * Visits the super types of the given <code>currentType</code>.
+		 *
+		 * @param currentType the starting type
+		 * @return the result from a call to {@link #visit(ReferenceBinding)}, or <code>null</code> if none of
+		 *         the calls returned a result
+		 * @throws JavaModelException unexpected problem
+		 */
+		public Object visitInheritDoc(ReferenceBinding currentType) throws JavaModelException {
+			ArrayList visited= new ArrayList();
+			visited.add(currentType);
+			Object result= visitInheritDocInterfaces(visited, currentType);
+			if (result != InheritDocVisitor.CONTINUE)
+				return result;
+
+			ReferenceBinding superClass= currentType.superclass();
+
+			while (superClass != null && ! visited.contains(superClass)) {
+				result= visit(superClass);
+				if (result == InheritDocVisitor.STOP_BRANCH) {
+					return null;
+				} else if (result == InheritDocVisitor.CONTINUE) {
+					visited.add(superClass);
+					result= visitInheritDocInterfaces(visited, superClass);
+					if (result != InheritDocVisitor.CONTINUE)
+						return result;
+					else
+						superClass= superClass.superclass();
+				} else {
+					return result;
+				}
+			}
+
+			return null;
+		}
+
+		/**
+		 * Visits the super interfaces of the given type in the given hierarchy, thereby skipping already visited types.
+		 * 
+		 * @param visited set of visited types
+		 * @param currentType type whose super interfaces should be visited
+		 * @return the result, or {@link #CONTINUE} if no result has been found
+		 * @throws JavaModelException unexpected problem
+		 */
+		private Object visitInheritDocInterfaces(ArrayList visited, ReferenceBinding currentType) throws JavaModelException {
+			ArrayList toVisitChildren= new ArrayList();
+			ReferenceBinding[] superInterfaces= currentType.superInterfaces();
+			for (int i= 0; i < superInterfaces.length; i++) {
+				ReferenceBinding superInterface= superInterfaces[i];
+				if (visited.contains(superInterface))
+					continue;
+				visited.add(superInterface);
+				Object result= visit(superInterface);
+				if (result == InheritDocVisitor.STOP_BRANCH) {
+					//skip
+				} else if (result == InheritDocVisitor.CONTINUE) {
+					toVisitChildren.add(superInterface);
+				} else {
+					return result;
+				}
+			}
+			for (Iterator iter= toVisitChildren.iterator(); iter.hasNext(); ) {
+				ReferenceBinding child= (ReferenceBinding) iter.next();
+				Object result= visitInheritDocInterfaces(visited, child);
+				if (result != InheritDocVisitor.CONTINUE)
+					return result;
+			}
+			return InheritDocVisitor.CONTINUE;
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnPackageReference.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnPackageReference.java
index 4ee9653..1364ced 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnPackageReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionOnPackageReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 
 public class CompletionOnPackageReference extends ImportReference {
 public CompletionOnPackageReference(char[][] tokens , long[] positions) {
-	super(tokens, positions, true, ClassFileConstants.AccDefault);
+	super(tokens, positions, false, ClassFileConstants.AccDefault);
 }
 public StringBuffer print(int indent, StringBuffer output, boolean withOnDemand) {
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
index 5b8c437..a78b8a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -563,8 +563,9 @@ protected void attachOrphanCompletionNode(){
 			if(expression == this.assistNode
 				|| (expression instanceof Assignment	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=287939
 					&& ((Assignment)expression).expression == this.assistNode
-					&& ((this.expressionPtr > 0 && this.expressionStack[this.expressionPtr - 1] instanceof InstanceOfExpression)
-						|| (this.elementPtr >= 0 && this.elementObjectInfoStack[this.elementPtr] instanceof InstanceOfExpression)))
+					&& ((this.expressionPtr > 0 && stackHasInstanceOfExpression(this.expressionStack, this.expressionPtr - 1))
+							// In case of error in compilation unit, expression stack might not have instanceof exp, so try elementObjectInfoStack
+						|| (this.elementPtr >= 0 && stackHasInstanceOfExpression(this.elementObjectInfoStack, this.elementPtr))))
 				|| (expression instanceof AllocationExpression
 					&& ((AllocationExpression)expression).type == this.assistNode)
 				|| (expression instanceof AND_AND_Expression
@@ -798,7 +799,7 @@ private void buildMoreCompletionContext(Expression expression) {
 				Expression castType;
 				if(this.expressionPtr > 0
 					&& ((castType = this.expressionStack[this.expressionPtr-1]) instanceof TypeReference)) {
-					CastExpression cast = new CastExpression(expression, castType);
+					CastExpression cast = new CastExpression(expression, (TypeReference) castType);
 					cast.sourceStart = castType.sourceStart;
 					cast.sourceEnd= expression.sourceEnd;
 					this.assistNodeParent = cast;
@@ -875,8 +876,6 @@ private void buildMoreCompletionContext(Expression expression) {
 					this.expressionLengthPtr--;
 				}
 
-				this.lastCheckPoint = this.scanner.currentPosition;
-
 				if(topKnownElementKind(COMPLETION_OR_ASSIST_PARSER, 1) == K_ARRAY_CREATION) {
 					ArrayAllocationExpression allocationExpression = new ArrayAllocationExpression();
 					pushOnGenericsLengthStack(0);
@@ -1064,7 +1063,7 @@ private void buildMoreCompletionContext(Expression expression) {
 	}
 }
 private Statement buildMoreCompletionEnclosingContext(Statement statement) {
-
+	IfStatement ifStatement = null;
 	int blockIndex = lastIndexOfElement(K_BLOCK_DELIMITER);
 	int controlIndex = lastIndexOfElement(K_CONTROL_STATEMENT_DELIMITER);
 	int index;
@@ -1077,42 +1076,63 @@ private Statement buildMoreCompletionEnclosingContext(Statement statement) {
 		int instanceOfIndex = lastIndexOfElement(K_BETWEEN_INSTANCEOF_AND_RPAREN);
 		index = blockIndex != -1 && instanceOfIndex < blockIndex ? blockIndex : instanceOfIndex;
 	}
-	if (index != -1 && this.elementInfoStack[index] == IF && this.elementObjectInfoStack[index] != null) {
-		Expression condition = (Expression)this.elementObjectInfoStack[index];
-
-		// If currentElement is a RecoveredLocalVariable then it can be contained in the if statement
-		if (this.currentElement instanceof RecoveredLocalVariable &&
-				this.currentElement.parent instanceof RecoveredBlock) {
-			RecoveredLocalVariable recoveredLocalVariable = (RecoveredLocalVariable) this.currentElement;
-			if (recoveredLocalVariable.localDeclaration.initialization == null &&
-					statement instanceof Expression &&
-					condition.sourceStart < recoveredLocalVariable.localDeclaration.sourceStart) {
-				this.currentElement.add(statement, 0);
-
-				statement = recoveredLocalVariable.updatedStatement(0, new HashSet());
-
-				// RecoveredLocalVariable must be removed from its parent because the IfStatement will be added instead
-				RecoveredBlock recoveredBlock =  (RecoveredBlock) recoveredLocalVariable.parent;
-				recoveredBlock.statements[--recoveredBlock.statementCount] = null;
-
-				this.currentElement = recoveredBlock;
-
+	while (index >= 0) {
+		// Try to find an enclosing if statement even if one is not found immediately preceding the completion node.
+		if (index != -1 && this.elementInfoStack[index] == IF && this.elementObjectInfoStack[index] != null) {
+			Expression condition = (Expression)this.elementObjectInfoStack[index];
+	
+			// If currentElement is a RecoveredLocalVariable then it can be contained in the if statement
+			if (this.currentElement instanceof RecoveredLocalVariable &&
+					this.currentElement.parent instanceof RecoveredBlock) {
+				RecoveredLocalVariable recoveredLocalVariable = (RecoveredLocalVariable) this.currentElement;
+				if (recoveredLocalVariable.localDeclaration.initialization == null &&
+						statement instanceof Expression &&
+						condition.sourceStart < recoveredLocalVariable.localDeclaration.sourceStart) {
+					this.currentElement.add(statement, 0);
+	
+					statement = recoveredLocalVariable.updatedStatement(0, new HashSet());
+	
+					// RecoveredLocalVariable must be removed from its parent because the IfStatement will be added instead
+					RecoveredBlock recoveredBlock =  (RecoveredBlock) recoveredLocalVariable.parent;
+					recoveredBlock.statements[--recoveredBlock.statementCount] = null;
+	
+					this.currentElement = recoveredBlock;
+	
+				}
+			}
+			if (statement instanceof AND_AND_Expression && this.assistNode instanceof Statement) {
+				statement = (Statement) this.assistNode;
 			}
+			ifStatement =
+				new IfStatement(
+						condition,
+						statement,
+						condition.sourceStart,
+						statement.sourceEnd);
+			index--;
+			break;
 		}
-		if (statement instanceof AND_AND_Expression && this.assistNode instanceof Statement) {
-			statement = (Statement) this.assistNode;
+		index--;
+	}
+	if (ifStatement == null) {
+		return statement;
+	}
+	// collect all if statements with instanceof expressions that enclose the completion node
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=304006
+	while (index >= 0) {
+		if (this.elementInfoStack[index] == IF && this.elementObjectInfoStack[index] instanceof InstanceOfExpression) {
+			InstanceOfExpression condition = (InstanceOfExpression)this.elementObjectInfoStack[index];
+			ifStatement =
+				new IfStatement(
+						condition,
+						ifStatement,
+						condition.sourceStart,
+						ifStatement.sourceEnd);
 		}
-		IfStatement ifStatement =
-			new IfStatement(
-					condition,
-					statement,
-					condition.sourceStart,
-					statement.sourceEnd);
-		this.enclosingNode = ifStatement;
-		return ifStatement;
+		index--;
 	}
-
-	return statement;
+	this.enclosingNode = ifStatement;
+	return ifStatement;
 }
 private void buildMoreGenericsCompletionContext(ASTNode node, boolean consumeTypeArguments) {
 	int kind = topKnownElementKind(COMPLETION_OR_ASSIST_PARSER);
@@ -2036,20 +2056,24 @@ protected void consumeCaseLabel() {
 protected void consumeCastExpressionWithPrimitiveType() {
 	popElement(K_CAST_STATEMENT);
 
-	Expression exp, cast, castType;
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	this.expressionPtr--;
 	this.expressionLengthPtr--;
-	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr+1], castType = this.expressionStack[this.expressionPtr]);
+	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr+1], castType = (TypeReference) this.expressionStack[this.expressionPtr]);
 	cast.sourceStart = castType.sourceStart - 1;
 	cast.sourceEnd = exp.sourceEnd;
 }
 protected void consumeCastExpressionWithGenericsArray() {
 	popElement(K_CAST_STATEMENT);
 
-	Expression exp, cast, castType;
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	this.expressionPtr--;
 	this.expressionLengthPtr--;
-	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr + 1], castType = this.expressionStack[this.expressionPtr]);
+	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr + 1], castType = (TypeReference) this.expressionStack[this.expressionPtr]);
 	cast.sourceStart = castType.sourceStart - 1;
 	cast.sourceEnd = exp.sourceEnd;
 }
@@ -2057,10 +2081,12 @@ protected void consumeCastExpressionWithGenericsArray() {
 protected void consumeCastExpressionWithQualifiedGenericsArray() {
 	popElement(K_CAST_STATEMENT);
 
-	Expression exp, cast, castType;
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	this.expressionPtr--;
 	this.expressionLengthPtr--;
-	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr + 1], castType = this.expressionStack[this.expressionPtr]);
+	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr + 1], castType = (TypeReference) this.expressionStack[this.expressionPtr]);
 	cast.sourceStart = castType.sourceStart - 1;
 	cast.sourceEnd = exp.sourceEnd;
 }
@@ -2068,11 +2094,12 @@ protected void consumeCastExpressionWithNameArray() {
 	// CastExpression ::= PushLPAREN Name Dims PushRPAREN InsideCastExpression UnaryExpressionNotPlusMinus
 	popElement(K_CAST_STATEMENT);
 
-	Expression exp, cast, castType;
-
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	this.expressionPtr--;
 	this.expressionLengthPtr--;
-	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr+1], castType = this.expressionStack[this.expressionPtr]);
+	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr+1], castType = (TypeReference) this.expressionStack[this.expressionPtr]);
 	cast.sourceStart = castType.sourceStart - 1;
 	cast.sourceEnd = exp.sourceEnd;
 }
@@ -2157,6 +2184,21 @@ protected void consumeClassHeaderExtends() {
 		}
 	}
 }
+protected void consumeClassHeaderImplements() {
+	super.consumeClassHeaderImplements();
+	if (this.assistNode != null && this.assistNodeParent == null) {
+		TypeDeclaration typeDecl = (TypeDeclaration) this.astStack[this.astPtr];
+		if (typeDecl != null) {
+			TypeReference[] superInterfaces = typeDecl.superInterfaces;
+			int length = superInterfaces == null ? 0 : superInterfaces.length;
+			for (int i = 0; i < length; i++) {
+				if (superInterfaces[i] == this.assistNode) {
+					this.assistNodeParent = typeDecl;
+				}	
+			}
+		}
+	}
+}
 protected void consumeClassTypeElt() {
 	pushOnElementStack(K_NEXT_TYPEREF_IS_EXCEPTION);
 	super.consumeClassTypeElt();
@@ -2532,6 +2574,64 @@ protected void consumeFormalParameter(boolean isVarArgs) {
 		this.listLength++;
 	}
 }
+protected void consumeCatchFormalParameter(boolean isVarArgs) {
+	if (this.indexOfAssistIdentifier() < 0) {
+		super.consumeCatchFormalParameter(isVarArgs);
+		if (this.pendingAnnotation != null) {
+			this.pendingAnnotation.potentialAnnotatedNode = this.astStack[this.astPtr];
+			this.pendingAnnotation = null;
+		}
+	} else {
+
+		this.identifierLengthPtr--;
+		char[] identifierName = this.identifierStack[this.identifierPtr];
+		long namePositions = this.identifierPositionStack[this.identifierPtr--];
+		int extendedDimensions = this.intStack[this.intPtr--];
+		int endOfEllipsis = 0;
+		if (isVarArgs) {
+			endOfEllipsis = this.intStack[this.intPtr--];
+		}
+		int firstDimensions = this.intStack[this.intPtr--];
+		final int typeDimensions = firstDimensions + extendedDimensions;
+		TypeReference type = getTypeReference(typeDimensions);
+		if (isVarArgs) {
+			type = copyDims(type, typeDimensions + 1);
+			if (extendedDimensions == 0) {
+				type.sourceEnd = endOfEllipsis;
+			}
+			type.bits |= ASTNode.IsVarArgs; // set isVarArgs
+		}
+		this.intPtr -= 2;
+		CompletionOnArgumentName arg =
+			new CompletionOnArgumentName(
+				identifierName,
+				namePositions,
+				type,
+				this.intStack[this.intPtr + 1] & ~ClassFileConstants.AccDeprecated); // modifiers
+		arg.bits &= ~ASTNode.IsArgument;
+		// consume annotations
+		int length;
+		if ((length = this.expressionLengthStack[this.expressionLengthPtr--]) != 0) {
+			System.arraycopy(
+				this.expressionStack,
+				(this.expressionPtr -= length) + 1,
+				arg.annotations = new Annotation[length],
+				0,
+				length);
+		}
+
+		arg.isCatchArgument = topKnownElementKind(COMPLETION_OR_ASSIST_PARSER) == K_BETWEEN_CATCH_AND_RIGHT_PAREN;
+		pushOnAstStack(arg);
+
+		this.assistNode = arg;
+		this.lastCheckPoint = (int) namePositions;
+		this.isOrphanCompletionNode = true;
+
+		/* if incomplete method header, listLength counter will not have been reset,
+			indicating that some arguments are available on the stack */
+		this.listLength++;
+	}
+}
 protected void consumeStatementFor() {
 	super.consumeStatementFor();
 
@@ -4825,4 +4925,19 @@ protected FieldDeclaration createFieldDeclaration(char[] assistName, int sourceS
 		return field;
 	}
 }
+
+/*
+ * To find out if the given stack has an instanceof expression
+ * at the given startIndex or at one prior to that
+ */
+private boolean stackHasInstanceOfExpression(Object[] stackToSearch, int startIndex) {
+	int indexInstanceOf = startIndex;
+	while (indexInstanceOf >= 0) {
+		if (stackToSearch[indexInstanceOf] instanceof InstanceOfExpression) {
+			return true;
+		}
+		indexInstanceOf--;
+	}
+	return false;
+}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
index e4b5785..7dc6ad9 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -132,8 +132,10 @@ public RecoveredElement buildInitialRecoveryState(){
 		/* Initializer bodies are parsed in the context of the type declaration, we must thus search it inside */
 		if (this.referenceContext instanceof TypeDeclaration){
 			TypeDeclaration type = (TypeDeclaration) this.referenceContext;
-			for (int i = 0; i < type.fields.length; i++){
-				FieldDeclaration field = type.fields[i];
+			FieldDeclaration[] fields = type.fields;
+			int length = fields == null ? 0 : fields.length;
+			for (int i = 0; i < length; i++){
+				FieldDeclaration field = fields[i];
 				if (field != null
 						&& field.getKind() == AbstractVariableDeclaration.INITIALIZER
 						&& field.declarationSourceStart <= this.scanner.initialPosition
@@ -717,6 +719,8 @@ protected void consumeStaticImportOnDemandDeclarationName() {
 	/* build specific assist node on import statement */
 	ImportReference reference = createAssistImportReference(subset, positions, ClassFileConstants.AccStatic);
 	reference.bits |= ASTNode.OnDemand;
+	// star end position
+	reference.trailingStarPosition = this.intStack[this.intPtr--];
 	this.assistNode = reference;
 	this.lastCheckPoint = reference.sourceEnd + 1;
 
@@ -839,6 +843,8 @@ protected void consumeTypeImportOnDemandDeclarationName() {
 	/* build specific assist node on import statement */
 	ImportReference reference = createAssistImportReference(subset, positions, ClassFileConstants.AccDefault);
 	reference.bits |= ASTNode.OnDemand;
+	// star end position
+	reference.trailingStarPosition = this.intStack[this.intPtr--];
 	this.assistNode = reference;
 	this.lastCheckPoint = reference.sourceEnd + 1;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadoc.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadoc.java
index 6847014..211bc1a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadoc.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadoc.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.jdt.internal.codeassist.select;
 
 import org.eclipse.jdt.internal.compiler.ast.*;
+import org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
 import org.eclipse.jdt.internal.compiler.lookup.*;
 
 /**
@@ -19,9 +20,13 @@ import org.eclipse.jdt.internal.compiler.lookup.*;
 public class SelectionJavadoc extends Javadoc {
 
 	Expression selectedNode;
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=171019
+	// Flag raised when selection is done on inheritDoc javadoc tag
+	boolean inheritDocSelected;
 
 	public SelectionJavadoc(int sourceStart, int sourceEnd) {
 		super(sourceStart, sourceEnd);
+		this.inheritDocSelected = false;
 	}
 
 	/* (non-Javadoc)
@@ -106,6 +111,13 @@ public class SelectionJavadoc extends Javadoc {
 				binding = this.selectedNode.resolvedType;
 			}
 			throw new SelectionNodeFound(binding);
+		} else if (this.inheritDocSelected) {
+			// no selection node when inheritDoc tag is selected
+			// But we need to detect it to enable code select on inheritDoc
+			ReferenceContext referenceContext = scope.referenceContext();
+			if (referenceContext instanceof MethodDeclaration) {
+				throw new SelectionNodeFound(((MethodDeclaration) referenceContext).binding);
+			}
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadocParser.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadocParser.java
index ed3f983..7c8fb62 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadocParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionJavadocParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,12 +25,15 @@ public class SelectionJavadocParser extends JavadocParser {
 	int selectionStart;
 	int selectionEnd;
 	ASTNode selectedNode;
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=171019
+	public boolean inheritDocTagSelected;
 
 	public SelectionJavadocParser(SelectionParser sourceParser) {
 		super(sourceParser);
 		this.shouldReportProblems = false;
 		this.reportProblems = false;
 		this.kind = SELECTION_PARSER | TEXT_PARSE;
+		this.inheritDocTagSelected = false;
 	}
 
 	/*
@@ -186,6 +189,16 @@ public class SelectionJavadocParser extends JavadocParser {
 	protected void updateDocComment() {
 		if (this.selectedNode instanceof Expression) {
 			((SelectionJavadoc) this.docComment).selectedNode = (Expression) this.selectedNode;
+		} else if (this.inheritDocTagSelected) {
+			((SelectionJavadoc) this.docComment).inheritDocSelected = true;
 		}
 	}
+	
+	/*
+	 * Sets a flag to denote that selection has taken place on an inheritDoc tag
+	 */
+	protected void parseInheritDocTag() {
+		if (this.tagSourceStart == this.selectionStart && this.tagSourceEnd == this.selectionEnd)
+			this.inheritDocTagSelected = true;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionOnPackageReference.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionOnPackageReference.java
index 90f2294..1457479 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionOnPackageReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionOnPackageReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 
 public class SelectionOnPackageReference extends ImportReference {
 public SelectionOnPackageReference(char[][] tokens , long[] positions) {
-	super(tokens, positions, true, ClassFileConstants.AccDefault);
+	super(tokens, positions, false, ClassFileConstants.AccDefault);
 }
 public StringBuffer print(int tab, StringBuffer output, boolean withOnDemand) {
 	printIndent(tab, output).append("<SelectOnPackage:"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java
index 9d7b828..a2ca3ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,7 +134,7 @@ private void buildMoreCompletionContext(Expression expression) {
 				Expression castType;
 				if(this.expressionPtr > 0
 					&& ((castType = this.expressionStack[this.expressionPtr-1]) instanceof TypeReference)) {
-					CastExpression cast = new CastExpression(expression, castType);
+					CastExpression cast = new CastExpression(expression, (TypeReference) castType);
 					cast.sourceStart = castType.sourceStart;
 					cast.sourceEnd= expression.sourceEnd;
 					parentNode = cast;
@@ -594,6 +594,74 @@ protected void consumeFormalParameter(boolean isVarArgs) {
 		this.listLength++;
 	}
 }
+protected void consumeCatchFormalParameter(boolean isVarArgs) {
+	if (this.indexOfAssistIdentifier() < 0) {
+		super.consumeCatchFormalParameter(isVarArgs);
+		if((!this.diet || this.dietInt != 0) && this.astPtr > -1) {
+			Argument argument = (Argument) this.astStack[this.astPtr];
+			if(argument.type == this.assistNode) {
+				this.isOrphanCompletionNode = true;
+				this.restartRecovery	= true;	// force to restart in recovery mode
+				this.lastIgnoredToken = -1;
+			}
+		}
+	} else {
+		this.identifierLengthPtr--;
+		char[] identifierName = this.identifierStack[this.identifierPtr];
+		long namePositions = this.identifierPositionStack[this.identifierPtr--];
+		int extendedDimensions = this.intStack[this.intPtr--];
+		int endOfEllipsis = 0;
+		if (isVarArgs) {
+			endOfEllipsis = this.intStack[this.intPtr--];
+		}
+		int firstDimensions = this.intStack[this.intPtr--];
+		final int typeDimensions = firstDimensions + extendedDimensions;
+		TypeReference type = getTypeReference(typeDimensions);
+		if (isVarArgs) {
+			type = copyDims(type, typeDimensions + 1);
+			if (extendedDimensions == 0) {
+				type.sourceEnd = endOfEllipsis;
+			}
+			type.bits |= ASTNode.IsVarArgs; // set isVarArgs
+		}
+		int modifierPositions = this.intStack[this.intPtr--];
+		this.intPtr--;
+		Argument arg =
+			new SelectionOnArgumentName(
+				identifierName,
+				namePositions,
+				type,
+				this.intStack[this.intPtr + 1] & ~ClassFileConstants.AccDeprecated); // modifiers
+		arg.bits &= ~ASTNode.IsArgument;
+		arg.declarationSourceStart = modifierPositions;
+
+		// consume annotations
+		int length;
+		if ((length = this.expressionLengthStack[this.expressionLengthPtr--]) != 0) {
+			System.arraycopy(
+				this.expressionStack,
+				(this.expressionPtr -= length) + 1,
+				arg.annotations = new Annotation[length],
+				0,
+				length);
+		}
+
+		pushOnAstStack(arg);
+
+		this.assistNode = arg;
+		this.lastCheckPoint = (int) namePositions;
+		this.isOrphanCompletionNode = true;
+
+		if (!this.diet){
+			this.restartRecovery	= true;	// force to restart in recovery mode
+			this.lastIgnoredToken = -1;
+		}
+
+		/* if incomplete method header, listLength counter will not have been reset,
+			indicating that some arguments are available on the stack */
+		this.listLength++;
+	}
+}
 protected void consumeInsideCastExpression() {
 	super.consumeInsideCastExpression();
 	pushOnElementStack(K_CAST_STATEMENT);
@@ -939,6 +1007,8 @@ protected void consumeStaticImportOnDemandDeclarationName() {
 	/* build specific assist node on import statement */
 	ImportReference reference = createAssistImportReference(subset, positions, ClassFileConstants.AccStatic);
 	reference.bits |= ASTNode.OnDemand;
+	// star end position
+	reference.trailingStarPosition = this.intStack[this.intPtr--];
 	this.assistNode = reference;
 	this.lastCheckPoint = reference.sourceEnd + 1;
 
@@ -1020,6 +1090,8 @@ protected void consumeTypeImportOnDemandDeclarationName() {
 	/* build specific assist node on import statement */
 	ImportReference reference = createAssistImportReference(subset, positions, ClassFileConstants.AccDefault);
 	reference.bits |= ASTNode.OnDemand;
+	// star end position
+	reference.trailingStarPosition = this.intStack[this.intPtr--];
 	this.assistNode = reference;
 	this.lastCheckPoint = reference.sourceEnd + 1;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java
index 8ce36b2..1d62293 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CharOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -2475,7 +2475,7 @@ public static final boolean match(
  *    patternEnd = 2
  *    name = { 'a', 'b', 'c' , 'd' }
  *    nameStart = 1
- *    nameEnd = 2
+ *    nameEnd = 4
  *    isCaseSensitive = true
  *    result => false
  * </pre>
@@ -2514,10 +2514,17 @@ public static final boolean match(
 
 	/* check first segment */
 	char patternChar = 0;
-	while ((iPattern < patternEnd)
-		&& (patternChar = pattern[iPattern]) != '*') {
-		if (iName == nameEnd)
-			return false;
+	while (true) {
+		if (iPattern == patternEnd) {
+			if (iName == nameEnd) return true; // the chars match
+			return false; // pattern has ended but not the name, no match
+		} 
+		if ((patternChar = pattern[iPattern]) == '*') {
+			break;
+		}
+		if (iName == nameEnd) {
+			return false; // name has ended but not the pattern
+		}
 		if (patternChar
 			!= (isCaseSensitive
 				? name[iName]
@@ -2939,24 +2946,62 @@ public static final boolean prefixEquals(
 	char[] prefix,
 	char[] name,
 	boolean isCaseSensitive) {
+	return prefixEquals(prefix, name, isCaseSensitive, 0);
+}
+
+/**
+ * Answers true if the given name, starting from the given index, starts with the given prefix,
+ * false otherwise. isCaseSensitive is used to find out whether or not the comparison should be
+ * case sensitive.
+ * <br>
+ * <br>
+ * For example:
+ * <ol>
+ * <li><pre>
+ *    prefix = { 'a' , 'B' }
+ *    name = { 'c', 'd', 'a' , 'b', 'b', 'a', 'b', 'a' }
+ *    startIndex = 2
+ *    isCaseSensitive = false
+ *    result => true
+ * </pre>
+ * </li>
+ * <li><pre>
+ *    prefix = { 'a' , 'B' }
+ *    name = { 'c', 'd', 'a' , 'b', 'b', 'a', 'b', 'a' }
+ *    startIndex = 2
+ *    isCaseSensitive = true
+ *    result => false
+ * </pre>
+ * </li>
+ * </ol>
+ *
+ * @param prefix the given prefix
+ * @param name the given name
+ * @param isCaseSensitive to find out whether or not the comparison should be case sensitive
+ * @param startIndex index from which the prefix should be searched in the name
+ * @return true if the given name starts with the given prefix, false otherwise
+ * @throws NullPointerException if the given name is null or if the given prefix is null
+ * @since 3.7
+ */
+public static final boolean prefixEquals(
+	char[] prefix,
+	char[] name,
+	boolean isCaseSensitive,
+	int startIndex) {
 
 	int max = prefix.length;
-	if (name.length < max)
+	if (name.length - startIndex < max)
 		return false;
 	if (isCaseSensitive) {
-		for (int i = max;
-			--i >= 0;
-			) // assumes the prefix is not larger than the name
-			if (prefix[i] != name[i])
+		for (int i = max; --i >= 0;) // assumes the prefix is not larger than the name
+			if (prefix[i] != name[startIndex + i])
 				return false;
 		return true;
 	}
 
-	for (int i = max;
-		--i >= 0;
-		) // assumes the prefix is not larger than the name
+	for (int i = max; --i >= 0;) // assumes the prefix is not larger than the name
 		if (ScannerHelper.toLowerCase(prefix[i])
-			!= ScannerHelper.toLowerCase(name[i]))
+			!= ScannerHelper.toLowerCase(name[startIndex + i]))
 			return false;
 	return true;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java
index d821fe5..c556cce 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -401,6 +401,10 @@ void setSourceStart(int sourceStart);
 	int IndirectAccessToStaticMethod = Internal + MethodRelated + 119;
 	/** @since 3.4 */
 	int MissingTypeInMethod = MethodRelated + 120;
+	/** @since 3.7 */
+	int MethodCanBeStatic = Internal + MethodRelated + 121;
+	/** @since 3.7 */
+	int MethodCanBePotentiallyStatic = Internal + MethodRelated + 122;
 
 	// constructors
 	/** @since 3.4 */
@@ -522,6 +526,7 @@ void setSourceStart(int sourceStart);
 	int ThisInStaticContext = Internal + 200;
 	int StaticMethodRequested = Internal + MethodRelated + 201;
 	int IllegalDimension = Internal + 202;
+	/** @deprecated - problem is no longer generated */
 	int InvalidTypeExpression = Internal + 203;
 	int ParsingError = Syntax + Internal + 204;
 	int ParsingErrorNoSuggestion = Syntax + Internal + 205;
@@ -626,6 +631,7 @@ void setSourceStart(int sourceStart);
 	int DuplicateTypes = TypeRelated + 323;
 	int IsClassPathCorrect = TypeRelated + 324;
 	int PublicClassMustMatchFileName = TypeRelated + 325;
+	/** @deprecated - problem is no longer generated */
 	int MustSpecifyPackage = Internal + 326;
 	int HierarchyHasProblems = TypeRelated + 327;
 	int PackageIsNotExpectedPackage = Internal + 328;
@@ -808,6 +814,8 @@ void setSourceStart(int sourceStart);
 	int TooManyFields = Internal + 432;
 	/** @since 2.1 */
 	int TooManyMethods = Internal + 433;
+	/** @since 3.7 */
+	int TooManyParametersForSyntheticMethod = Internal + 434;
 
 	// 1.4 features
 	// assertion warning
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
index a9cd269..1f2a827 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ClassFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,10 +45,10 @@ import org.eclipse.jdt.internal.compiler.codegen.ExceptionLabel;
 import org.eclipse.jdt.internal.compiler.codegen.Opcodes;
 import org.eclipse.jdt.internal.compiler.codegen.StackMapFrame;
 import org.eclipse.jdt.internal.compiler.codegen.StackMapFrameCodeStream;
-import org.eclipse.jdt.internal.compiler.codegen.VerificationTypeInfo;
 import org.eclipse.jdt.internal.compiler.codegen.StackMapFrameCodeStream.ExceptionMarker;
 import org.eclipse.jdt.internal.compiler.codegen.StackMapFrameCodeStream.StackDepthMarker;
 import org.eclipse.jdt.internal.compiler.codegen.StackMapFrameCodeStream.StackMarker;
+import org.eclipse.jdt.internal.compiler.codegen.VerificationTypeInfo;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.eclipse.jdt.internal.compiler.impl.Constant;
 import org.eclipse.jdt.internal.compiler.impl.StringConstant;
@@ -58,7 +58,6 @@ import org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
 import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
-import org.eclipse.jdt.internal.compiler.lookup.NestedTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.SyntheticArgumentBinding;
@@ -228,7 +227,6 @@ public class ClassFile implements TypeConstants, TypeIds {
 		LookupEnvironment env = typeBinding.scope.environment();
 		return env.classFilePool.acquire(typeBinding);
 	}
-
 	/**
 	 * INTERNAL USE-ONLY
 	 * This methods creates a new instance of the receiver.
@@ -271,8 +269,8 @@ public class ClassFile implements TypeConstants, TypeIds {
 
 		this.generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
-		int attributeNumber = this.generateMethodInfoAttribute(methodBinding);
-		completeMethodInfo(methodAttributeOffset, attributeNumber);
+		int attributeNumber = this.generateMethodInfoAttributes(methodBinding);
+		completeMethodInfo(methodBinding, methodAttributeOffset, attributeNumber);
 	}
 
 	/**
@@ -302,101 +300,24 @@ public class ClassFile implements TypeConstants, TypeIds {
 			if (lastIndex != -1) {
 				fullFileName = fullFileName.substring(lastIndex + 1, fullFileName.length());
 			}
-			// check that there is enough space to write all the bytes for the field info corresponding
-			// to the @fieldBinding
-			if (this.contentsOffset + 8 >= this.contents.length) {
-				resizeContents(8);
-			}
-			int sourceAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.SourceName);
-			this.contents[this.contentsOffset++] = (byte) (sourceAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) sourceAttributeNameIndex;
-			// The length of a source file attribute is 2. This is a fixed-length
-			// attribute
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 2;
-			// write the source file name
-			int fileNameIndex = this.constantPool.literalIndex(fullFileName.toCharArray());
-			this.contents[this.contentsOffset++] = (byte) (fileNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) fileNameIndex;
-			attributesNumber++;
+			attributesNumber += generateSourceAttribute(fullFileName);
 		}
 		// Deprecated attribute
 		if (this.referenceBinding.isDeprecated()) {
 			// check that there is enough space to write all the bytes for the field info corresponding
 			// to the @fieldBinding
-			if (this.contentsOffset + 6 >= this.contents.length) {
-				resizeContents(6);
-			}
-			int deprecatedAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.DeprecatedName);
-			this.contents[this.contentsOffset++] = (byte) (deprecatedAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) deprecatedAttributeNameIndex;
-			// the length of a deprecated attribute is equals to 0
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			attributesNumber++;
+			attributesNumber += generateDeprecatedAttribute();
 		}
 		// add signature attribute
 		char[] genericSignature = this.referenceBinding.genericSignature();
 		if (genericSignature != null) {
-			// check that there is enough space to write all the bytes for the field info corresponding
-			// to the @fieldBinding
-			if (this.contentsOffset + 8 >= this.contents.length) {
-				resizeContents(8);
-			}
-			int signatureAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.SignatureName);
-			this.contents[this.contentsOffset++] = (byte) (signatureAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) signatureAttributeNameIndex;
-			// the length of a signature attribute is equals to 2
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 2;
-			int signatureIndex =
-				this.constantPool.literalIndex(genericSignature);
-			this.contents[this.contentsOffset++] = (byte) (signatureIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) signatureIndex;
-			attributesNumber++;
+			attributesNumber += generateSignatureAttribute(genericSignature);
 		}
 		if (this.targetJDK >= ClassFileConstants.JDK1_5
 				&& this.referenceBinding.isNestedType()
 				&& !this.referenceBinding.isMemberType()) {
 			// add enclosing method attribute (1.5 mode only)
-			if (this.contentsOffset + 10 >= this.contents.length) {
-				resizeContents(10);
-			}
-			int enclosingMethodAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.EnclosingMethodName);
-			this.contents[this.contentsOffset++] = (byte) (enclosingMethodAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) enclosingMethodAttributeNameIndex;
-			// the length of a signature attribute is equals to 2
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 4;
-
-			int enclosingTypeIndex = this.constantPool.literalIndexForType(this.referenceBinding.enclosingType().constantPoolName());
-			this.contents[this.contentsOffset++] = (byte) (enclosingTypeIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) enclosingTypeIndex;
-			byte methodIndexByte1 = 0;
-			byte methodIndexByte2 = 0;
-			if (this.referenceBinding instanceof LocalTypeBinding) {
-				MethodBinding methodBinding = ((LocalTypeBinding) this.referenceBinding).enclosingMethod;
-				if (methodBinding != null) {
-					int enclosingMethodIndex = this.constantPool.literalIndexForNameAndType(methodBinding.selector, methodBinding.signature(this));
-					methodIndexByte1 = (byte) (enclosingMethodIndex >> 8);
-					methodIndexByte2 = (byte) enclosingMethodIndex;
-				}
-			}
-			this.contents[this.contentsOffset++] = methodIndexByte1;
-			this.contents[this.contentsOffset++] = methodIndexByte2;
-			attributesNumber++;
+			attributesNumber += generateEnclosingMethodAttribute();
 		}
 		if (this.targetJDK >= ClassFileConstants.JDK1_4) {
 			TypeDeclaration typeDeclaration = this.referenceBinding.scope.referenceContext;
@@ -417,20 +338,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 			for (int i = 0, max = superInterfaces.length; i < max; i++) {
 				this.missingTypes = superInterfaces[i].collectMissingTypes(this.missingTypes);
 			}
-			// add an attribute for inconsistent hierarchy
-			if (this.contentsOffset + 6 >= this.contents.length) {
-				resizeContents(6);
-			}
-			int inconsistentHierarchyNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.InconsistentHierarchy);
-			this.contents[this.contentsOffset++] = (byte) (inconsistentHierarchyNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) inconsistentHierarchyNameIndex;
-			// the length of an inconsistent hierarchy attribute is equals to 0
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			attributesNumber++;
+			attributesNumber += generateHierarchyInconsistentAttribute();
 		}
 		// Inner class attribute
 		int numberOfInnerClasses = this.innerClassesBindings == null ? 0 : this.innerClassesBindings.size();
@@ -444,62 +352,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 					return CharOperation.compareTo(binding1.constantPoolName(), binding2.constantPoolName());
 				}
 			});
-			// Generate the inner class attribute
-			int exSize = 8 * numberOfInnerClasses + 8;
-			if (exSize + this.contentsOffset >= this.contents.length) {
-				resizeContents(exSize);
-			}
-			// Now we now the size of the attribute and the number of entries
-			// attribute name
-			int attributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.InnerClassName);
-			this.contents[this.contentsOffset++] = (byte) (attributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) attributeNameIndex;
-			int value = (numberOfInnerClasses << 3) + 2;
-			this.contents[this.contentsOffset++] = (byte) (value >> 24);
-			this.contents[this.contentsOffset++] = (byte) (value >> 16);
-			this.contents[this.contentsOffset++] = (byte) (value >> 8);
-			this.contents[this.contentsOffset++] = (byte) value;
-			this.contents[this.contentsOffset++] = (byte) (numberOfInnerClasses >> 8);
-			this.contents[this.contentsOffset++] = (byte) numberOfInnerClasses;
-			for (int i = 0; i < numberOfInnerClasses; i++) {
-				ReferenceBinding innerClass = innerClasses[i];
-				int accessFlags = innerClass.getAccessFlags();
-				int innerClassIndex = this.constantPool.literalIndexForType(innerClass.constantPoolName());
-				// inner class index
-				this.contents[this.contentsOffset++] = (byte) (innerClassIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) innerClassIndex;
-				// outer class index: anonymous and local have no outer class index
-				if (innerClass.isMemberType()) {
-					// member or member of local
-					int outerClassIndex = this.constantPool.literalIndexForType(innerClass.enclosingType().constantPoolName());
-					this.contents[this.contentsOffset++] = (byte) (outerClassIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) outerClassIndex;
-				} else {
-					// equals to 0 if the innerClass is not a member type
-					this.contents[this.contentsOffset++] = 0;
-					this.contents[this.contentsOffset++] = 0;
-				}
-				// name index
-				if (!innerClass.isAnonymousType()) {
-					int nameIndex = this.constantPool.literalIndex(innerClass.sourceName());
-					this.contents[this.contentsOffset++] = (byte) (nameIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) nameIndex;
-				} else {
-					// equals to 0 if the innerClass is an anonymous type
-					this.contents[this.contentsOffset++] = 0;
-					this.contents[this.contentsOffset++] = 0;
-				}
-				// access flag
-				if (innerClass.isAnonymousType()) {
-					accessFlags &= ~ClassFileConstants.AccFinal;
-				} else if (innerClass.isMemberType() && innerClass.isInterface()) {
-					accessFlags |= ClassFileConstants.AccStatic; // implicitely static
-				}
-				this.contents[this.contentsOffset++] = (byte) (accessFlags >> 8);
-				this.contents[this.contentsOffset++] = (byte) accessFlags;
-			}
-			attributesNumber++;
+			attributesNumber += generateInnerClassAttribute(numberOfInnerClasses, innerClasses);
 		}
 		if (this.missingTypes != null) {
 			generateMissingTypesAttribute();
@@ -519,7 +372,6 @@ public class ClassFile implements TypeConstants, TypeIds {
 		this.header[this.constantPoolOffset++] = (byte) (constantPoolCount >> 8);
 		this.header[this.constantPoolOffset] = (byte) constantPoolCount;
 	}
-
 	/**
 	 * INTERNAL USE-ONLY
 	 * This methods generate all the default abstract method infos that correpond to
@@ -529,10 +381,11 @@ public class ClassFile implements TypeConstants, TypeIds {
 		MethodBinding[] defaultAbstractMethods =
 			this.referenceBinding.getDefaultAbstractMethods();
 		for (int i = 0, max = defaultAbstractMethods.length; i < max; i++) {
-			generateMethodInfoHeader(defaultAbstractMethods[i]);
+			MethodBinding methodBinding = defaultAbstractMethods[i];
+			generateMethodInfoHeader(methodBinding);
 			int methodAttributeOffset = this.contentsOffset;
-			int attributeNumber = generateMethodInfoAttribute(defaultAbstractMethods[i]);
-			completeMethodInfo(methodAttributeOffset, attributeNumber);
+			int attributeNumber = generateMethodInfoAttributes(methodBinding);
+			completeMethodInfo(methodBinding, methodAttributeOffset, attributeNumber);
 		}
 	}
 
@@ -542,133 +395,18 @@ public class ClassFile implements TypeConstants, TypeIds {
 		// Generate the constantValueAttribute
 		Constant fieldConstant = fieldBinding.constant();
 		if (fieldConstant != Constant.NotAConstant){
-			if (this.contentsOffset + 8 >= this.contents.length) {
-				resizeContents(8);
-			}
-			// Now we generate the constant attribute corresponding to the fieldBinding
-			int constantValueNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.ConstantValueName);
-			this.contents[this.contentsOffset++] = (byte) (constantValueNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) constantValueNameIndex;
-			// The attribute length = 2 in case of a constantValue attribute
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 2;
-			attributesNumber++;
-			// Need to add the constant_value_index
-			switch (fieldConstant.typeID()) {
-				case T_boolean :
-					int booleanValueIndex =
-						this.constantPool.literalIndex(fieldConstant.booleanValue() ? 1 : 0);
-					this.contents[this.contentsOffset++] = (byte) (booleanValueIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) booleanValueIndex;
-					break;
-				case T_byte :
-				case T_char :
-				case T_int :
-				case T_short :
-					int integerValueIndex =
-						this.constantPool.literalIndex(fieldConstant.intValue());
-					this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) integerValueIndex;
-					break;
-				case T_float :
-					int floatValueIndex =
-						this.constantPool.literalIndex(fieldConstant.floatValue());
-					this.contents[this.contentsOffset++] = (byte) (floatValueIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) floatValueIndex;
-					break;
-				case T_double :
-					int doubleValueIndex =
-						this.constantPool.literalIndex(fieldConstant.doubleValue());
-					this.contents[this.contentsOffset++] = (byte) (doubleValueIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) doubleValueIndex;
-					break;
-				case T_long :
-					int longValueIndex =
-						this.constantPool.literalIndex(fieldConstant.longValue());
-					this.contents[this.contentsOffset++] = (byte) (longValueIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) longValueIndex;
-					break;
-				case T_JavaLangString :
-					int stringValueIndex =
-						this.constantPool.literalIndex(
-							((StringConstant) fieldConstant).stringValue());
-					if (stringValueIndex == -1) {
-						if (!this.creatingProblemType) {
-							// report an error and abort: will lead to a problem type classfile creation
-							TypeDeclaration typeDeclaration = this.referenceBinding.scope.referenceContext;
-							FieldDeclaration[] fieldDecls = typeDeclaration.fields;
-							for (int i = 0, max = fieldDecls.length; i < max; i++) {
-								if (fieldDecls[i].binding == fieldBinding) {
-									// problem should abort
-									typeDeclaration.scope.problemReporter().stringConstantIsExceedingUtf8Limit(
-										fieldDecls[i]);
-								}
-							}
-						} else {
-							// already inside a problem type creation : no constant for this field
-							this.contentsOffset = fieldAttributeOffset;
-						}
-					} else {
-						this.contents[this.contentsOffset++] = (byte) (stringValueIndex >> 8);
-						this.contents[this.contentsOffset++] = (byte) stringValueIndex;
-					}
-			}
+			attributesNumber += generateConstantValueAttribute(fieldConstant, fieldBinding, fieldAttributeOffset);
 		}
 		if (this.targetJDK < ClassFileConstants.JDK1_5 && fieldBinding.isSynthetic()) {
-			if (this.contentsOffset + 6 >= this.contents.length) {
-				resizeContents(6);
-			}
-			int syntheticAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.SyntheticName);
-			this.contents[this.contentsOffset++] = (byte) (syntheticAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) syntheticAttributeNameIndex;
-			// the length of a synthetic attribute is equals to 0
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			attributesNumber++;
+			attributesNumber += generateSyntheticAttribute();
 		}
 		if (fieldBinding.isDeprecated()) {
-			if (this.contentsOffset + 6 >= this.contents.length) {
-				resizeContents(6);
-			}
-			int deprecatedAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.DeprecatedName);
-			this.contents[this.contentsOffset++] = (byte) (deprecatedAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) deprecatedAttributeNameIndex;
-			// the length of a deprecated attribute is equals to 0
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			attributesNumber++;
+			attributesNumber += generateDeprecatedAttribute();
 		}
 		// add signature attribute
 		char[] genericSignature = fieldBinding.genericSignature();
 		if (genericSignature != null) {
-			// check that there is enough space to write all the bytes for the field info corresponding
-			// to the @fieldBinding
-			if (this.contentsOffset + 8 >= this.contents.length) {
-				resizeContents(8);
-			}
-			int signatureAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.SignatureName);
-			this.contents[this.contentsOffset++] = (byte) (signatureAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) signatureAttributeNameIndex;
-			// the length of a signature attribute is equals to 2
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 2;
-			int signatureIndex =
-				this.constantPool.literalIndex(genericSignature);
-			this.contents[this.contentsOffset++] = (byte) (signatureIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) signatureIndex;
-			attributesNumber++;
+			attributesNumber += generateSignatureAttribute(genericSignature);
 		}
 		if (this.targetJDK >= ClassFileConstants.JDK1_4) {
 			FieldDeclaration fieldDeclaration = fieldBinding.sourceField();
@@ -770,7 +508,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		// always clear the strictfp/native/abstract bit for a problem method
 		generateMethodInfoHeader(methodBinding, methodBinding.modifiers & ~(ClassFileConstants.AccStrictfp | ClassFileConstants.AccNative | ClassFileConstants.AccAbstract));
 		int methodAttributeOffset = this.contentsOffset;
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 
 		// Code attribute
 		attributeNumber++;
@@ -795,7 +533,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 			compilationResult.getLineSeparatorPositions(),
 			problem.getSourceLineNumber());
 
-		completeMethodInfo(methodAttributeOffset, attributeNumber);
+		completeMethodInfo(methodBinding, methodAttributeOffset, attributeNumber);
 	}
 
 	/**
@@ -852,6 +590,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		this.contents[attributeOffset++] = (byte) (attributeNumber >> 8);
 		this.contents[attributeOffset] = (byte) attributeNumber;
 	}
+
 	/**
 	 * INTERNAL USE-ONLY
 	 * Generate the byte for a problem method info that correspond to a boggus constructor.
@@ -868,10 +607,10 @@ public class ClassFile implements TypeConstants, TypeIds {
 		// always clear the strictfp/native/abstract bit for a problem method
 		generateMethodInfoHeader(methodBinding, methodBinding.modifiers & ~(ClassFileConstants.AccStrictfp | ClassFileConstants.AccNative | ClassFileConstants.AccAbstract));
 		int methodAttributeOffset = this.contentsOffset;
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributesNumber = generateMethodInfoAttributes(methodBinding);
 
 		// Code attribute
-		attributeNumber++;
+		attributesNumber++;
 		int codeAttributeOffset = this.contentsOffset;
 		generateCodeAttributeHeader();
 		this.codeStream.reset(method, this);
@@ -911,7 +650,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 				.compilationResult
 				.getLineSeparatorPositions(),
 			problemLine);
-		completeMethodInfo(methodAttributeOffset, attributeNumber);
+		completeMethodInfo(methodBinding, methodAttributeOffset, attributesNumber);
 	}
 	/**
 	 * INTERNAL USE-ONLY
@@ -933,7 +672,6 @@ public class ClassFile implements TypeConstants, TypeIds {
 		this.methodCount--; // we need to remove the method that causes the problem
 		addProblemConstructor(method, methodBinding, problems);
 	}
-
 	/**
 	 * INTERNAL USE-ONLY
 	 * Generate the byte for a problem method info that correspond to a boggus method.
@@ -952,10 +690,10 @@ public class ClassFile implements TypeConstants, TypeIds {
 		// always clear the strictfp/native/abstract bit for a problem method
 		generateMethodInfoHeader(methodBinding, methodBinding.modifiers & ~(ClassFileConstants.AccStrictfp | ClassFileConstants.AccNative | ClassFileConstants.AccAbstract));
 		int methodAttributeOffset = this.contentsOffset;
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributesNumber = generateMethodInfoAttributes(methodBinding);
 
 		// Code attribute
-		attributeNumber++;
+		attributesNumber++;
 
 		int codeAttributeOffset = this.contentsOffset;
 		generateCodeAttributeHeader();
@@ -1000,7 +738,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 				.compilationResult
 				.getLineSeparatorPositions(),
 			problemLine);
-		completeMethodInfo(methodAttributeOffset, attributeNumber);
+		completeMethodInfo(methodBinding, methodAttributeOffset, attributesNumber);
 	}
 
 	/**
@@ -1040,10 +778,11 @@ public class ClassFile implements TypeConstants, TypeIds {
 
 		MethodBinding[] defaultAbstractMethods = this.referenceBinding.getDefaultAbstractMethods();
 		for (int i = 0, max = defaultAbstractMethods.length; i < max; i++) {
-			generateMethodInfoHeader(defaultAbstractMethods[i]);
+			MethodBinding methodBinding = defaultAbstractMethods[i];
+			generateMethodInfoHeader(methodBinding);
 			int methodAttributeOffset = this.contentsOffset;
-			int attributeNumber = generateMethodInfoAttribute(defaultAbstractMethods[i]);
-			completeMethodInfo(methodAttributeOffset, attributeNumber);
+			int attributeNumber = generateMethodInfoAttributes(methodBinding);
+			completeMethodInfo(methodBinding, methodAttributeOffset, attributeNumber);
 		}
 		// add synthetic methods infos
 		SyntheticMethodBinding[] syntheticMethods = this.referenceBinding.syntheticMethods();
@@ -1084,6 +823,9 @@ public class ClassFile implements TypeConstants, TypeIds {
 					case SyntheticMethodBinding.SwitchTable :
 						// generate a method info to define the switch table synthetic method
 						addSyntheticSwitchTable(syntheticMethod);
+						break;
+					case SyntheticMethodBinding.TooManyEnumsConstants :
+						addSyntheticEnumInitializationMethod(syntheticMethod);
 				}
 			}
 		}
@@ -1099,7 +841,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
 		// this will add exception attribute, synthetic attribute, deprecated attribute,...
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 		// Code attribute
 		int codeAttributeOffset = this.contentsOffset;
 		attributeNumber++; // add code attribute
@@ -1129,7 +871,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
 		// this will add exception attribute, synthetic attribute, deprecated attribute,...
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 		// Code attribute
 		int codeAttributeOffset = this.contentsOffset;
 		attributeNumber++; // add code attribute
@@ -1159,7 +901,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
 		// this will add exception attribute, synthetic attribute, deprecated attribute,...
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 		// Code attribute
 		int codeAttributeOffset = this.contentsOffset;
 		attributeNumber++; // add code attribute
@@ -1179,6 +921,29 @@ public class ClassFile implements TypeConstants, TypeIds {
 		this.contents[methodAttributeOffset] = (byte) attributeNumber;
 	}
 
+	public void addSyntheticEnumInitializationMethod(SyntheticMethodBinding methodBinding) {
+		generateMethodInfoHeader(methodBinding);
+		int methodAttributeOffset = this.contentsOffset;
+		// this will add exception attribute, synthetic attribute, deprecated attribute,...
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
+		// Code attribute
+		int codeAttributeOffset = this.contentsOffset;
+		attributeNumber++; // add code attribute
+		generateCodeAttributeHeader();
+		this.codeStream.init(this);
+		this.codeStream.generateSyntheticBodyForEnumInitializationMethod(methodBinding);
+		completeCodeAttributeForSyntheticMethod(
+			methodBinding,
+			codeAttributeOffset,
+			((SourceTypeBinding) methodBinding.declaringClass)
+				.scope
+				.referenceCompilationUnit()
+				.compilationResult
+				.getLineSeparatorPositions());
+		// update the number of attributes
+		this.contents[methodAttributeOffset++] = (byte) (attributeNumber >> 8);
+		this.contents[methodAttributeOffset] = (byte) attributeNumber;
+	}
 	/**
 	 * INTERNAL USE-ONLY
 	 * Generate the byte for a problem method info that correspond to a synthetic method that
@@ -1190,7 +955,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
 		// this will add exception attribute, synthetic attribute, deprecated attribute,...
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 		// Code attribute
 		int codeAttributeOffset = this.contentsOffset;
 		attributeNumber++; // add code attribute
@@ -1221,7 +986,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
 		// this will add exception attribute, synthetic attribute, deprecated attribute,...
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 		// Code attribute
 		int codeAttributeOffset = this.contentsOffset;
 		attributeNumber++; // add code attribute
@@ -1251,7 +1016,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
 		// this will add exception attribute, synthetic attribute, deprecated attribute,...
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 		// Code attribute
 		int codeAttributeOffset = this.contentsOffset;
 		attributeNumber++; // add code attribute
@@ -1275,7 +1040,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 		generateMethodInfoHeader(methodBinding);
 		int methodAttributeOffset = this.contentsOffset;
 		// this will add exception attribute, synthetic attribute, deprecated attribute,...
-		int attributeNumber = generateMethodInfoAttribute(methodBinding);
+		int attributeNumber = generateMethodInfoAttributes(methodBinding);
 		// Code attribute
 		int codeAttributeOffset = this.contentsOffset;
 		attributeNumber++; // add code attribute
@@ -1359,7 +1124,7 @@ public class ClassFile implements TypeConstants, TypeIds {
 							Messages.bind(Messages.abort_invalidExceptionAttribute, new String(this.codeStream.methodDeclaration.selector)),
 							this.codeStream.methodDeclaration);
 				}
-				while  (iRange < maxRange) {
+				while (iRange < maxRange) {
 					int start = exceptionLabel.ranges[iRange++]; // even ranges are start positions
 					this.contents[localContentsOffset++] = (byte) (start >> 8);
 					this.contents[localContentsOffset++] = (byte) start;
@@ -1394,752 +1159,52 @@ public class ClassFile implements TypeConstants, TypeIds {
 		}
 		// debug attributes
 		int codeAttributeAttributeOffset = localContentsOffset;
-		int attributeNumber = 0;
+		int attributesNumber = 0;
 		// leave two bytes for the attribute_length
 		localContentsOffset += 2;
 		if (localContentsOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
 
+		this.contentsOffset = localContentsOffset;
+
 		// first we handle the linenumber attribute
 		if ((this.produceAttributes & ClassFileConstants.ATTR_LINES) != 0) {
-			/* Create and add the line number attribute (used for debugging)
-			 * Build the pairs of:
-			 * 	(bytecodePC lineNumber)
-			 * according to the table of start line indexes and the pcToSourceMap table
-			 * contained into the codestream
-			 */
-			int[] pcToSourceMapTable;
-			if (((pcToSourceMapTable = this.codeStream.pcToSourceMap) != null)
-				&& (this.codeStream.pcToSourceMapSize != 0)) {
-				int lineNumberNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
-				if (localContentsOffset + 8 >= this.contents.length) {
-					resizeContents(8);
-				}
-				this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
-				int lineNumberTableOffset = localContentsOffset;
-				localContentsOffset += 6;
-				// leave space for attribute_length and line_number_table_length
-				int numberOfEntries = 0;
-				int length = this.codeStream.pcToSourceMapSize;
-				for (int i = 0; i < length;) {
-					// write the entry
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int pc = pcToSourceMapTable[i++];
-					this.contents[localContentsOffset++] = (byte) (pc >> 8);
-					this.contents[localContentsOffset++] = (byte) pc;
-					int lineNumber = pcToSourceMapTable[i++];
-					this.contents[localContentsOffset++] = (byte) (lineNumber >> 8);
-					this.contents[localContentsOffset++] = (byte) lineNumber;
-					numberOfEntries++;
-				}
-				// now we change the size of the line number attribute
-				int lineNumberAttr_length = numberOfEntries * 4 + 2;
-				this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 24);
-				this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 16);
-				this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 8);
-				this.contents[lineNumberTableOffset++] = (byte) lineNumberAttr_length;
-				this.contents[lineNumberTableOffset++] = (byte) (numberOfEntries >> 8);
-				this.contents[lineNumberTableOffset++] = (byte) numberOfEntries;
-				attributeNumber++;
-			}
+			attributesNumber += generateLineNumberAttribute();
 		}
 		// then we do the local variable attribute
 		if ((this.produceAttributes & ClassFileConstants.ATTR_VARS) != 0) {
-			int numberOfEntries = 0;
-			int localVariableNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTableName);
 			final boolean methodDeclarationIsStatic = this.codeStream.methodDeclaration.isStatic();
-			int maxOfEntries = 8 + 10 * (methodDeclarationIsStatic ? 0 : 1);
-			for (int i = 0; i < this.codeStream.allLocalsCounter; i++) {
-				LocalVariableBinding localVariableBinding = this.codeStream.locals[i];
-				maxOfEntries += 10 * localVariableBinding.initializationCount;
-			}
-			// reserve enough space
-			if (localContentsOffset + maxOfEntries >= this.contents.length) {
-				resizeContents(maxOfEntries);
-			}
-			this.contents[localContentsOffset++] = (byte) (localVariableNameIndex >> 8);
-			this.contents[localContentsOffset++] = (byte) localVariableNameIndex;
-			int localVariableTableOffset = localContentsOffset;
-			// leave space for attribute_length and local_variable_table_length
-			localContentsOffset += 6;
-			int nameIndex;
-			int descriptorIndex;
-			SourceTypeBinding declaringClassBinding = null;
-			if (!methodDeclarationIsStatic) {
-				numberOfEntries++;
-				this.contents[localContentsOffset++] = 0; // the startPC for this is always 0
-				this.contents[localContentsOffset++] = 0;
-				this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-				this.contents[localContentsOffset++] = (byte) code_length;
-				nameIndex = this.constantPool.literalIndex(ConstantPool.This);
-				this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) nameIndex;
-				declaringClassBinding = (SourceTypeBinding) this.codeStream.methodDeclaration.binding.declaringClass;
-				descriptorIndex =
-					this.constantPool.literalIndex(
-						declaringClassBinding.signature());
-				this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) descriptorIndex;
-				this.contents[localContentsOffset++] = 0;// the resolved position for this is always 0
-				this.contents[localContentsOffset++] = 0;
-			}
-			// used to remember the local variable with a generic type
-			int genericLocalVariablesCounter = 0;
-			LocalVariableBinding[] genericLocalVariables = null;
-			int numberOfGenericEntries = 0;
-
-			for (int i = 0, max = this.codeStream.allLocalsCounter; i < max; i++) {
-				LocalVariableBinding localVariable = this.codeStream.locals[i];
-				if (localVariable.declaration == null) continue;
-				final TypeBinding localVariableTypeBinding = localVariable.type;
-				boolean isParameterizedType = localVariableTypeBinding.isParameterizedType() || localVariableTypeBinding.isTypeVariable();
-				if (localVariable.initializationCount != 0 && isParameterizedType) {
-					if (genericLocalVariables == null) {
-						// we cannot have more than max locals
-						genericLocalVariables = new LocalVariableBinding[max];
-					}
-					genericLocalVariables[genericLocalVariablesCounter++] = localVariable;
-				}
-				for (int j = 0; j < localVariable.initializationCount; j++) {
-					int startPC = localVariable.initializationPCs[j << 1];
-					int endPC = localVariable.initializationPCs[(j << 1) + 1];
-					if (startPC != endPC) { // only entries for non zero length
-						if (endPC == -1) {
-							localVariable.declaringScope.problemReporter().abortDueToInternalError(
-									Messages.bind(Messages.abort_invalidAttribute, new String(localVariable.name)),
-									(ASTNode) localVariable.declaringScope.methodScope().referenceContext);
-						}
-						if (isParameterizedType) {
-							numberOfGenericEntries++;
-						}
-						// now we can safely add the local entry
-						numberOfEntries++;
-						this.contents[localContentsOffset++] = (byte) (startPC >> 8);
-						this.contents[localContentsOffset++] = (byte) startPC;
-						int length = endPC - startPC;
-						this.contents[localContentsOffset++] = (byte) (length >> 8);
-						this.contents[localContentsOffset++] = (byte) length;
-						nameIndex = this.constantPool.literalIndex(localVariable.name);
-						this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-						this.contents[localContentsOffset++] = (byte) nameIndex;
-						descriptorIndex = this.constantPool.literalIndex(localVariableTypeBinding.signature());
-						this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-						this.contents[localContentsOffset++] = (byte) descriptorIndex;
-						int resolvedPosition = localVariable.resolvedPosition;
-						this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-						this.contents[localContentsOffset++] = (byte) resolvedPosition;
-					}
-				}
-			}
-			int value = numberOfEntries * 10 + 2;
-			this.contents[localVariableTableOffset++] = (byte) (value >> 24);
-			this.contents[localVariableTableOffset++] = (byte) (value >> 16);
-			this.contents[localVariableTableOffset++] = (byte) (value >> 8);
-			this.contents[localVariableTableOffset++] = (byte) value;
-			this.contents[localVariableTableOffset++] = (byte) (numberOfEntries >> 8);
-			this.contents[localVariableTableOffset] = (byte) numberOfEntries;
-			attributeNumber++;
-
-			final boolean currentInstanceIsGeneric =
-				!methodDeclarationIsStatic
-				&& declaringClassBinding != null
-				&& declaringClassBinding.typeVariables != Binding.NO_TYPE_VARIABLES;
-			if (genericLocalVariablesCounter != 0 || currentInstanceIsGeneric) {
-				// add the local variable type table attribute
-				numberOfGenericEntries += (currentInstanceIsGeneric ? 1 : 0);
-				maxOfEntries = 8 + numberOfGenericEntries * 10;
-				// reserve enough space
-				if (localContentsOffset + maxOfEntries >= this.contents.length) {
-					resizeContents(maxOfEntries);
-				}
-				int localVariableTypeNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTypeTableName);
-				this.contents[localContentsOffset++] = (byte) (localVariableTypeNameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) localVariableTypeNameIndex;
-				value = numberOfGenericEntries * 10 + 2;
-				this.contents[localContentsOffset++] = (byte) (value >> 24);
-				this.contents[localContentsOffset++] = (byte) (value >> 16);
-				this.contents[localContentsOffset++] = (byte) (value >> 8);
-				this.contents[localContentsOffset++] = (byte) value;
-				this.contents[localContentsOffset++] = (byte) (numberOfGenericEntries >> 8);
-				this.contents[localContentsOffset++] = (byte) numberOfGenericEntries;
-				if (currentInstanceIsGeneric) {
-					this.contents[localContentsOffset++] = 0; // the startPC for this is always 0
-					this.contents[localContentsOffset++] = 0;
-					this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-					this.contents[localContentsOffset++] = (byte) code_length;
-					nameIndex = this.constantPool.literalIndex(ConstantPool.This);
-					this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) nameIndex;
-					descriptorIndex = this.constantPool.literalIndex(declaringClassBinding.genericTypeSignature());
-					this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) descriptorIndex;
-					this.contents[localContentsOffset++] = 0;// the resolved position for this is always 0
-					this.contents[localContentsOffset++] = 0;
-				}
-
-				for (int i = 0; i < genericLocalVariablesCounter; i++) {
-					LocalVariableBinding localVariable = genericLocalVariables[i];
-					for (int j = 0; j < localVariable.initializationCount; j++) {
-						int startPC = localVariable.initializationPCs[j << 1];
-						int endPC = localVariable.initializationPCs[(j << 1) + 1];
-						if (startPC != endPC) {
-							// only entries for non zero length
-							// now we can safely add the local entry
-							this.contents[localContentsOffset++] = (byte) (startPC >> 8);
-							this.contents[localContentsOffset++] = (byte) startPC;
-							int length = endPC - startPC;
-							this.contents[localContentsOffset++] = (byte) (length >> 8);
-							this.contents[localContentsOffset++] = (byte) length;
-							nameIndex = this.constantPool.literalIndex(localVariable.name);
-							this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) nameIndex;
-							descriptorIndex = this.constantPool.literalIndex(localVariable.type.genericTypeSignature());
-							this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) descriptorIndex;
-							int resolvedPosition = localVariable.resolvedPosition;
-							this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-							this.contents[localContentsOffset++] = (byte) resolvedPosition;
-						}
-					}
-				}
-				attributeNumber++;
-			}
+			attributesNumber += generateLocalVariableTableAttribute(code_length, methodDeclarationIsStatic, false);
 		}
 
 		if (addStackMaps) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(this.codeStream.methodDeclaration.binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapTableAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapTableName);
-					this.contents[localContentsOffset++] = (byte) (stackMapTableAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapTableAttributeNameIndex;
-
-					int stackMapTableAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					StackMapFrame prevFrame = null;
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						prevFrame = currentFrame;
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int offsetDelta = currentFrame.getOffsetDelta(prevFrame);
-						switch (currentFrame.getFrameType(prevFrame)) {
-							case StackMapFrame.APPEND_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								int numberOfDifferentLocals = currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 + numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int index = currentFrame.getIndexOfDifferentLocals(numberOfDifferentLocals);
-								int numberOfLocals = currentFrame.getNumberOfLocals();
-								for (int i = index; i < currentFrame.locals.length && numberOfDifferentLocals > 0; i++) {
-									if (localContentsOffset + 6 >= this.contents.length) {
-										resizeContents(6);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfDifferentLocals--;
-									}
-								}
-								break;
-							case StackMapFrame.SAME_FRAME :
-								if (localContentsOffset + 1 >= this.contents.length) {
-									resizeContents(1);
-								}
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_FRAME_EXTENDED :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								this.contents[localContentsOffset++] = (byte) 251;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.CHOP_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								numberOfDifferentLocals = -currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 - numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS :
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[localContentsOffset++] = (byte) (offsetDelta + 64);
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS_EXTENDED :
-								if (localContentsOffset + 6 >= this.contents.length) {
-									resizeContents(6);
-								}
-								this.contents[localContentsOffset++] = (byte) 247;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							default :
-								// FULL_FRAME
-								if (localContentsOffset + 5 >= this.contents.length) {
-									resizeContents(5);
-								}
-								this.contents[localContentsOffset++] = (byte) 255;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int numberOfLocalOffset = localContentsOffset;
-								localContentsOffset += 2; // leave two spots for number of locals
-								int numberOfLocalEntries = 0;
-								numberOfLocals = currentFrame.getNumberOfLocals();
-								int numberOfEntries = 0;
-								int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-								for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfLocalEntries++;
-									}
-									numberOfEntries++;
-								}
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-								this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-								int numberOfStackItems = currentFrame.numberOfStackItems;
-								this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-								this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-								for (int i = 0; i < numberOfStackItems; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.stackItems[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-									}
-								}
-						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapTableAttributeLengthOffset - 4;
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapTableAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+			attributesNumber += generateStackMapTableAttribute(
+					this.codeStream.methodDeclaration.binding,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					false);
 		}
 
 		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(this.codeStream.methodDeclaration.binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapName);
-					this.contents[localContentsOffset++] = (byte) (stackMapAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapAttributeNameIndex;
-
-					int stackMapAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int frameOffset = currentFrame.pc;
-						// FULL_FRAME
-						if (localContentsOffset + 5 >= this.contents.length) {
-							resizeContents(5);
-						}
-						this.contents[localContentsOffset++] = (byte) (frameOffset >> 8);
-						this.contents[localContentsOffset++] = (byte) frameOffset;
-						int numberOfLocalOffset = localContentsOffset;
-						localContentsOffset += 2; // leave two spots for number of locals
-						int numberOfLocalEntries = 0;
-						int numberOfLocals = currentFrame.getNumberOfLocals();
-						int numberOfEntries = 0;
-						int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-						for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.locals[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										i++;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										i++;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-								numberOfLocalEntries++;
-							}
-							numberOfEntries++;
-						}
-						if (localContentsOffset + 4 >= this.contents.length) {
-							resizeContents(4);
-						}
-						this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-						this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-						int numberOfStackItems = currentFrame.numberOfStackItems;
-						this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-						this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-						for (int i = 0; i < numberOfStackItems; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.stackItems[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-							}
-						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapAttributeLengthOffset - 4;
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+			attributesNumber += generateStackMapAttribute(
+					this.codeStream.methodDeclaration.binding,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					false);
 		}
 
-		this.contents[codeAttributeAttributeOffset++] = (byte) (attributeNumber >> 8);
-		this.contents[codeAttributeAttributeOffset] = (byte) attributeNumber;
+		this.contents[codeAttributeAttributeOffset++] = (byte) (attributesNumber >> 8);
+		this.contents[codeAttributeAttributeOffset] = (byte) attributesNumber;
 
 		// update the attribute length
-		int codeAttributeLength = localContentsOffset - (codeAttributeOffset + 6);
+		int codeAttributeLength = this.contentsOffset - (codeAttributeOffset + 6);
 		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
 		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
 		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
 		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
-		this.contentsOffset = localContentsOffset;
 	}
 
 	/**
@@ -2240,703 +1305,40 @@ public class ClassFile implements TypeConstants, TypeIds {
 		}
 		// debug attributes
 		int codeAttributeAttributeOffset = localContentsOffset;
-		int attributeNumber = 0;
+		int attributesNumber = 0;
 		// leave two bytes for the attribute_length
 		localContentsOffset += 2;
 		if (localContentsOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
 
+		this.contentsOffset = localContentsOffset;
+
 		// first we handle the linenumber attribute
 		if ((this.produceAttributes & ClassFileConstants.ATTR_LINES) != 0) {
-			/* Create and add the line number attribute (used for debugging)
-			 * Build the pairs of:
-			 * 	(bytecodePC lineNumber)
-			 * according to the table of start line indexes and the pcToSourceMap table
-			 * contained into the codestream
-			 */
-			int[] pcToSourceMapTable;
-			if (((pcToSourceMapTable = this.codeStream.pcToSourceMap) != null)
-				&& (this.codeStream.pcToSourceMapSize != 0)) {
-				int lineNumberNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
-				if (localContentsOffset + 8 >= this.contents.length) {
-					resizeContents(8);
-				}
-				this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
-				int lineNumberTableOffset = localContentsOffset;
-				localContentsOffset += 6;
-				// leave space for attribute_length and line_number_table_length
-				int numberOfEntries = 0;
-				int length = this.codeStream.pcToSourceMapSize;
-				for (int i = 0; i < length;) {
-					// write the entry
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int pc = pcToSourceMapTable[i++];
-					this.contents[localContentsOffset++] = (byte) (pc >> 8);
-					this.contents[localContentsOffset++] = (byte) pc;
-					int lineNumber = pcToSourceMapTable[i++];
-					this.contents[localContentsOffset++] = (byte) (lineNumber >> 8);
-					this.contents[localContentsOffset++] = (byte) lineNumber;
-					numberOfEntries++;
-				}
-				// now we change the size of the line number attribute
-				int lineNumberAttr_length = numberOfEntries * 4 + 2;
-				this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 24);
-				this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 16);
-				this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 8);
-				this.contents[lineNumberTableOffset++] = (byte) lineNumberAttr_length;
-				this.contents[lineNumberTableOffset++] = (byte) (numberOfEntries >> 8);
-				this.contents[lineNumberTableOffset++] = (byte) numberOfEntries;
-				attributeNumber++;
-			}
+			attributesNumber += generateLineNumberAttribute();
 		}
 		// then we do the local variable attribute
 		if ((this.produceAttributes & ClassFileConstants.ATTR_VARS) != 0) {
-			int numberOfEntries = 0;
-			//		codeAttribute.addLocalVariableTableAttribute(this);
-			if ((this.codeStream.pcToSourceMap != null)
-				&& (this.codeStream.pcToSourceMapSize != 0)) {
-				int localVariableNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTableName);
-				if (localContentsOffset + 8 >= this.contents.length) {
-					resizeContents(8);
-				}
-				this.contents[localContentsOffset++] = (byte) (localVariableNameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) localVariableNameIndex;
-				int localVariableTableOffset = localContentsOffset;
-				localContentsOffset += 6;
-
-				// leave space for attribute_length and local_variable_table_length
-				int nameIndex;
-				int descriptorIndex;
-
-				// used to remember the local variable with a generic type
-				int genericLocalVariablesCounter = 0;
-				LocalVariableBinding[] genericLocalVariables = null;
-				int numberOfGenericEntries = 0;
-
-				for (int i = 0, max = this.codeStream.allLocalsCounter; i < max; i++) {
-					LocalVariableBinding localVariable = this.codeStream.locals[i];
-					if (localVariable.declaration == null) continue;
-					final TypeBinding localVariableTypeBinding = localVariable.type;
-					boolean isParameterizedType = localVariableTypeBinding.isParameterizedType() || localVariableTypeBinding.isTypeVariable();
-					if (localVariable.initializationCount != 0 && isParameterizedType) {
-						if (genericLocalVariables == null) {
-							// we cannot have more than max locals
-							genericLocalVariables = new LocalVariableBinding[max];
-						}
-						genericLocalVariables[genericLocalVariablesCounter++] = localVariable;
-					}
-					for (int j = 0; j < localVariable.initializationCount; j++) {
-						int startPC = localVariable.initializationPCs[j << 1];
-						int endPC = localVariable.initializationPCs[(j << 1) + 1];
-						if (startPC != endPC) { // only entries for non zero length
-							if (endPC == -1) {
-								localVariable.declaringScope.problemReporter().abortDueToInternalError(
-									Messages.bind(Messages.abort_invalidAttribute, new String(localVariable.name)),
-									(ASTNode) localVariable.declaringScope.methodScope().referenceContext);
-							}
-							if (localContentsOffset + 10 >= this.contents.length) {
-								resizeContents(10);
-							}
-							// now we can safely add the local entry
-							numberOfEntries++;
-							if (isParameterizedType) {
-								numberOfGenericEntries++;
-							}
-							this.contents[localContentsOffset++] = (byte) (startPC >> 8);
-							this.contents[localContentsOffset++] = (byte) startPC;
-							int length = endPC - startPC;
-							this.contents[localContentsOffset++] = (byte) (length >> 8);
-							this.contents[localContentsOffset++] = (byte) length;
-							nameIndex = this.constantPool.literalIndex(localVariable.name);
-							this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) nameIndex;
-							descriptorIndex = this.constantPool.literalIndex(localVariableTypeBinding.signature());
-							this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) descriptorIndex;
-							int resolvedPosition = localVariable.resolvedPosition;
-							this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-							this.contents[localContentsOffset++] = (byte) resolvedPosition;
-						}
-					}
-				}
-				int value = numberOfEntries * 10 + 2;
-				this.contents[localVariableTableOffset++] = (byte) (value >> 24);
-				this.contents[localVariableTableOffset++] = (byte) (value >> 16);
-				this.contents[localVariableTableOffset++] = (byte) (value >> 8);
-				this.contents[localVariableTableOffset++] = (byte) value;
-				this.contents[localVariableTableOffset++] = (byte) (numberOfEntries >> 8);
-				this.contents[localVariableTableOffset] = (byte) numberOfEntries;
-				attributeNumber++;
-
-				if (genericLocalVariablesCounter != 0) {
-					// add the local variable type table attribute
-					// reserve enough space
-					int maxOfEntries = 8 + numberOfGenericEntries * 10;
-
-					if (localContentsOffset + maxOfEntries >= this.contents.length) {
-						resizeContents(maxOfEntries);
-					}
-					int localVariableTypeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTypeTableName);
-					this.contents[localContentsOffset++] = (byte) (localVariableTypeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) localVariableTypeNameIndex;
-					value = numberOfGenericEntries * 10 + 2;
-					this.contents[localContentsOffset++] = (byte) (value >> 24);
-					this.contents[localContentsOffset++] = (byte) (value >> 16);
-					this.contents[localContentsOffset++] = (byte) (value >> 8);
-					this.contents[localContentsOffset++] = (byte) value;
-					this.contents[localContentsOffset++] = (byte) (numberOfGenericEntries >> 8);
-					this.contents[localContentsOffset++] = (byte) numberOfGenericEntries;
-					for (int i = 0; i < genericLocalVariablesCounter; i++) {
-						LocalVariableBinding localVariable = genericLocalVariables[i];
-						for (int j = 0; j < localVariable.initializationCount; j++) {
-							int startPC = localVariable.initializationPCs[j << 1];
-							int endPC = localVariable.initializationPCs[(j << 1) + 1];
-							if (startPC != endPC) { // only entries for non zero length
-								// now we can safely add the local entry
-								this.contents[localContentsOffset++] = (byte) (startPC >> 8);
-								this.contents[localContentsOffset++] = (byte) startPC;
-								int length = endPC - startPC;
-								this.contents[localContentsOffset++] = (byte) (length >> 8);
-								this.contents[localContentsOffset++] = (byte) length;
-								nameIndex = this.constantPool.literalIndex(localVariable.name);
-								this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-								this.contents[localContentsOffset++] = (byte) nameIndex;
-								descriptorIndex = this.constantPool.literalIndex(localVariable.type.genericTypeSignature());
-								this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-								this.contents[localContentsOffset++] = (byte) descriptorIndex;
-								int resolvedPosition = localVariable.resolvedPosition;
-								this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-								this.contents[localContentsOffset++] = (byte) resolvedPosition;
-							}
-						}
-					}
-					attributeNumber++;
-				}
-			}
+			attributesNumber += generateLocalVariableTableAttribute(code_length, true, false);
 		}
 
 		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP_TABLE) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(null, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, true);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapTableAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapTableName);
-					this.contents[localContentsOffset++] = (byte) (stackMapTableAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapTableAttributeNameIndex;
-
-					int stackMapTableAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					StackMapFrame prevFrame = null;
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						prevFrame = currentFrame;
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int offsetDelta = currentFrame.getOffsetDelta(prevFrame);
-						switch (currentFrame.getFrameType(prevFrame)) {
-							case StackMapFrame.APPEND_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								int numberOfDifferentLocals = currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 + numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int index = currentFrame.getIndexOfDifferentLocals(numberOfDifferentLocals);
-								int numberOfLocals = currentFrame.getNumberOfLocals();
-								for (int i = index; i < currentFrame.locals.length && numberOfDifferentLocals > 0; i++) {
-									if (localContentsOffset + 6 >= this.contents.length) {
-										resizeContents(6);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfDifferentLocals--;
-									}
-								}
-								break;
-							case StackMapFrame.SAME_FRAME :
-								if (localContentsOffset + 1 >= this.contents.length) {
-									resizeContents(1);
-								}
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_FRAME_EXTENDED :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								this.contents[localContentsOffset++] = (byte) 251;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.CHOP_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								numberOfDifferentLocals = -currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 - numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS :
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[localContentsOffset++] = (byte) (offsetDelta + 64);
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS_EXTENDED :
-								if (localContentsOffset + 6 >= this.contents.length) {
-									resizeContents(6);
-								}
-								this.contents[localContentsOffset++] = (byte) 247;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							default :
-								// FULL_FRAME
-								if (localContentsOffset + 5 >= this.contents.length) {
-									resizeContents(5);
-								}
-								this.contents[localContentsOffset++] = (byte) 255;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int numberOfLocalOffset = localContentsOffset;
-								localContentsOffset += 2; // leave two spots for number of locals
-								int numberOfLocalEntries = 0;
-								numberOfLocals = currentFrame.getNumberOfLocals();
-								int numberOfEntries = 0;
-								int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-								for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfLocalEntries++;
-									}
-									numberOfEntries++;
-								}
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-								this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-								int numberOfStackItems = currentFrame.numberOfStackItems;
-								this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-								this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-								for (int i = 0; i < numberOfStackItems; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.stackItems[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-									}
-								}
-						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapTableAttributeLengthOffset - 4;
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapTableAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+			attributesNumber += generateStackMapTableAttribute(
+					null,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					true);
 		}
 
 		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(this.codeStream.methodDeclaration.binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapName);
-					this.contents[localContentsOffset++] = (byte) (stackMapAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapAttributeNameIndex;
-
-					int stackMapAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int frameOffset = currentFrame.pc;
-						// FULL_FRAME
-						if (localContentsOffset + 5 >= this.contents.length) {
-							resizeContents(5);
-						}
-						this.contents[localContentsOffset++] = (byte) (frameOffset >> 8);
-						this.contents[localContentsOffset++] = (byte) frameOffset;
-						int numberOfLocalOffset = localContentsOffset;
-						localContentsOffset += 2; // leave two spots for number of locals
-						int numberOfLocalEntries = 0;
-						int numberOfLocals = currentFrame.getNumberOfLocals();
-						int numberOfEntries = 0;
-						int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-						for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.locals[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										i++;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										i++;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-								numberOfLocalEntries++;
-							}
-							numberOfEntries++;
-						}
-						if (localContentsOffset + 4 >= this.contents.length) {
-							resizeContents(4);
-						}
-						this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-						this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-						int numberOfStackItems = currentFrame.numberOfStackItems;
-						this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-						this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-						for (int i = 0; i < numberOfStackItems; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.stackItems[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-							}
-						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapAttributeLengthOffset - 4;
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+			attributesNumber += generateStackMapAttribute(
+					null,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					true);
 		}
 
 		// update the number of attributes
@@ -2944,15 +1346,14 @@ public class ClassFile implements TypeConstants, TypeIds {
 		if (codeAttributeAttributeOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
-		this.contents[codeAttributeAttributeOffset++] = (byte) (attributeNumber >> 8);
-		this.contents[codeAttributeAttributeOffset] = (byte) attributeNumber;
+		this.contents[codeAttributeAttributeOffset++] = (byte) (attributesNumber >> 8);
+		this.contents[codeAttributeAttributeOffset] = (byte) attributesNumber;
 		// update the attribute length
-		int codeAttributeLength = localContentsOffset - (codeAttributeOffset + 6);
+		int codeAttributeLength = this.contentsOffset - (codeAttributeOffset + 6);
 		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
 		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
 		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
 		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
-		this.contentsOffset = localContentsOffset;
 	}
 
 	/**
@@ -2966,8 +1367,8 @@ public class ClassFile implements TypeConstants, TypeIds {
 	 * - and debug attributes if necessary.
 	 */
 	public void completeCodeAttributeForClinit(
-		int codeAttributeOffset,
-		int problemLine) {
+			int codeAttributeOffset,
+			int problemLine) {
 		// reinitialize the contents with the byte modified by the code stream
 		this.contents = this.codeStream.bCodeStream;
 		int localContentsOffset = this.codeStream.classFileOffset;
@@ -3000,41 +1401,18 @@ public class ClassFile implements TypeConstants, TypeIds {
 
 		// debug attributes
 		int codeAttributeAttributeOffset = localContentsOffset;
-		int attributeNumber = 0; // leave two bytes for the attribute_length
+		int attributesNumber = 0; // leave two bytes for the attribute_length
 		localContentsOffset += 2; // first we handle the linenumber attribute
 		if (localContentsOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
 
+		this.contentsOffset = localContentsOffset;
 		// first we handle the linenumber attribute
 		if ((this.produceAttributes & ClassFileConstants.ATTR_LINES) != 0) {
-			if (localContentsOffset + 20 >= this.contents.length) {
-				resizeContents(20);
-			}
-			/* Create and add the line number attribute (used for debugging)
-				* Build the pairs of:
-				* (bytecodePC lineNumber)
-				* according to the table of start line indexes and the pcToSourceMap table
-				* contained into the codestream
-				*/
-			int lineNumberNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
-			this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
-			this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 6;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 1;
-			// first entry at pc = 0
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = (byte) (problemLine >> 8);
-			this.contents[localContentsOffset++] = (byte) problemLine;
-			// now we change the size of the line number attribute
-			attributeNumber++;
+			attributesNumber += generateLineNumberAttribute(problemLine);
 		}
+		localContentsOffset = this.contentsOffset;
 		// then we do the local variable attribute
 		if ((this.produceAttributes & ClassFileConstants.ATTR_VARS) != 0) {
 			int localVariableNameIndex =
@@ -3050,525 +1428,27 @@ public class ClassFile implements TypeConstants, TypeIds {
 			this.contents[localContentsOffset++] = 2;
 			this.contents[localContentsOffset++] = 0;
 			this.contents[localContentsOffset++] = 0;
-			attributeNumber++;
+			attributesNumber++;
 		}
 
+		this.contentsOffset = localContentsOffset;
+
 		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP_TABLE) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(null, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, true);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapTableAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapTableName);
-					this.contents[localContentsOffset++] = (byte) (stackMapTableAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapTableAttributeNameIndex;
-
-					int stackMapTableAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					numberOfFrames = 0;
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					StackMapFrame prevFrame = null;
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						prevFrame = currentFrame;
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						numberOfFrames++;
-						int offsetDelta = currentFrame.getOffsetDelta(prevFrame);
-						switch (currentFrame.getFrameType(prevFrame)) {
-							case StackMapFrame.APPEND_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								int numberOfDifferentLocals = currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 + numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int index = currentFrame.getIndexOfDifferentLocals(numberOfDifferentLocals);
-								int numberOfLocals = currentFrame.getNumberOfLocals();
-								for (int i = index; i < currentFrame.locals.length && numberOfDifferentLocals > 0; i++) {
-									if (localContentsOffset + 6 >= this.contents.length) {
-										resizeContents(6);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfDifferentLocals--;
-									}
-								}
-								break;
-							case StackMapFrame.SAME_FRAME :
-								if (localContentsOffset + 1 >= this.contents.length) {
-									resizeContents(1);
-								}
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_FRAME_EXTENDED :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								this.contents[localContentsOffset++] = (byte) 251;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.CHOP_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								numberOfDifferentLocals = -currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 - numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS :
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[localContentsOffset++] = (byte) (offsetDelta + 64);
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS_EXTENDED :
-								if (localContentsOffset + 6 >= this.contents.length) {
-									resizeContents(6);
-								}
-								this.contents[localContentsOffset++] = (byte) 247;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							default :
-								// FULL_FRAME
-								if (localContentsOffset + 5 >= this.contents.length) {
-									resizeContents(5);
-								}
-								this.contents[localContentsOffset++] = (byte) 255;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int numberOfLocalOffset = localContentsOffset;
-								localContentsOffset += 2; // leave two spots for number of locals
-								int numberOfLocalEntries = 0;
-								numberOfLocals = currentFrame.getNumberOfLocals();
-								int numberOfEntries = 0;
-								int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-								for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfLocalEntries++;
-									}
-									numberOfEntries++;
-								}
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-								this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-								int numberOfStackItems = currentFrame.numberOfStackItems;
-								this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-								this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-								for (int i = 0; i < numberOfStackItems; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.stackItems[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-									}
-								}
-						}
-					}
-
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapTableAttributeLengthOffset - 4;
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapTableAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+			attributesNumber += generateStackMapTableAttribute(
+					null,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					true);
 		}
 
 		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(this.codeStream.methodDeclaration.binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapName);
-					this.contents[localContentsOffset++] = (byte) (stackMapAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapAttributeNameIndex;
-
-					int stackMapAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int frameOffset = currentFrame.pc;
-						// FULL_FRAME
-						if (localContentsOffset + 5 >= this.contents.length) {
-							resizeContents(5);
-						}
-						this.contents[localContentsOffset++] = (byte) (frameOffset >> 8);
-						this.contents[localContentsOffset++] = (byte) frameOffset;
-						int numberOfLocalOffset = localContentsOffset;
-						localContentsOffset += 2; // leave two spots for number of locals
-						int numberOfLocalEntries = 0;
-						int numberOfLocals = currentFrame.getNumberOfLocals();
-						int numberOfEntries = 0;
-						int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-						for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.locals[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										i++;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										i++;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-								numberOfLocalEntries++;
-							}
-							numberOfEntries++;
-						}
-						if (localContentsOffset + 4 >= this.contents.length) {
-							resizeContents(4);
-						}
-						this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-						this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-						int numberOfStackItems = currentFrame.numberOfStackItems;
-						this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-						this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-						for (int i = 0; i < numberOfStackItems; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.stackItems[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-							}
-						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapAttributeLengthOffset - 4;
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+			attributesNumber += generateStackMapAttribute(
+					null,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					true);
 		}
 
 		// update the number of attributes
@@ -3576,25 +1456,25 @@ public class ClassFile implements TypeConstants, TypeIds {
 		if (codeAttributeAttributeOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
-		this.contents[codeAttributeAttributeOffset++] = (byte) (attributeNumber >> 8);
-		this.contents[codeAttributeAttributeOffset] = (byte) attributeNumber;
+		this.contents[codeAttributeAttributeOffset++] = (byte) (attributesNumber >> 8);
+		this.contents[codeAttributeAttributeOffset] = (byte) attributesNumber;
 		// update the attribute length
-		int codeAttributeLength = localContentsOffset - (codeAttributeOffset + 6);
+		int codeAttributeLength = this.contentsOffset - (codeAttributeOffset + 6);
 		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
 		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
 		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
 		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
-		this.contentsOffset = localContentsOffset;
 	}
 
+
 	/**
 	 *
 	 */
 	public void completeCodeAttributeForMissingAbstractProblemMethod(
-		MethodBinding binding,
-		int codeAttributeOffset,
-		int[] startLineIndexes,
-		int problemLine) {
+			MethodBinding binding,
+			int codeAttributeOffset,
+			int[] startLineIndexes,
+			int problemLine) {
 		// reinitialize the localContents with the byte modified by the code stream
 		this.contents = this.codeStream.bCodeStream;
 		int localContentsOffset = this.codeStream.classFileOffset;
@@ -3618,577 +1498,52 @@ public class ClassFile implements TypeConstants, TypeIds {
 		this.contents[localContentsOffset++] = 0;
 		// debug attributes
 		int codeAttributeAttributeOffset = localContentsOffset;
-		int attributeNumber = 0; // leave two bytes for the attribute_length
+		int attributesNumber = 0; // leave two bytes for the attribute_length
 		localContentsOffset += 2; // first we handle the linenumber attribute
 		if (localContentsOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
 
+		this.contentsOffset = localContentsOffset;
 		if ((this.produceAttributes & ClassFileConstants.ATTR_LINES) != 0) {
-			if (localContentsOffset + 12 >= this.contents.length) {
-				resizeContents(12);
-			}
-			/* Create and add the line number attribute (used for debugging)
-				* Build the pairs of:
-				* (bytecodePC lineNumber)
-				* according to the table of start line indexes and the pcToSourceMap table
-				* contained into the codestream
-				*/
-			int lineNumberNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
-			this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
-			this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 6;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 1;
 			if (problemLine == 0) {
 				problemLine = Util.getLineNumber(binding.sourceStart(), startLineIndexes, 0, startLineIndexes.length-1);
 			}
-			// first entry at pc = 0
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = (byte) (problemLine >> 8);
-			this.contents[localContentsOffset++] = (byte) problemLine;
-			// now we change the size of the line number attribute
-			attributeNumber++;
+			attributesNumber += generateLineNumberAttribute(problemLine);
 		}
 
 		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP_TABLE) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapTableAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapTableName);
-					this.contents[localContentsOffset++] = (byte) (stackMapTableAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapTableAttributeNameIndex;
-
-					int stackMapTableAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					numberOfFrames = 0;
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					StackMapFrame prevFrame = null;
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						prevFrame = currentFrame;
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						numberOfFrames++;
-						int offsetDelta = currentFrame.getOffsetDelta(prevFrame);
-						switch (currentFrame.getFrameType(prevFrame)) {
-							case StackMapFrame.APPEND_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								int numberOfDifferentLocals = currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 + numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int index = currentFrame.getIndexOfDifferentLocals(numberOfDifferentLocals);
-								int numberOfLocals = currentFrame.getNumberOfLocals();
-								for (int i = index; i < currentFrame.locals.length && numberOfDifferentLocals > 0; i++) {
-									if (localContentsOffset + 6 >= this.contents.length) {
-										resizeContents(6);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfDifferentLocals--;
-									}
-								}
-								break;
-							case StackMapFrame.SAME_FRAME :
-								if (localContentsOffset + 1 >= this.contents.length) {
-									resizeContents(1);
-								}
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_FRAME_EXTENDED :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								this.contents[localContentsOffset++] = (byte) 251;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.CHOP_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								numberOfDifferentLocals = -currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 - numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS :
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[localContentsOffset++] = (byte) (offsetDelta + 64);
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS_EXTENDED :
-								if (localContentsOffset + 6 >= this.contents.length) {
-									resizeContents(6);
-								}
-								this.contents[localContentsOffset++] = (byte) 247;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							default :
-								// FULL_FRAME
-								if (localContentsOffset + 5 >= this.contents.length) {
-									resizeContents(5);
-								}
-								this.contents[localContentsOffset++] = (byte) 255;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int numberOfLocalOffset = localContentsOffset;
-								localContentsOffset += 2; // leave two spots for number of locals
-								int numberOfLocalEntries = 0;
-								numberOfLocals = currentFrame.getNumberOfLocals();
-								int numberOfEntries = 0;
-								int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-								for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfLocalEntries++;
-									}
-									numberOfEntries++;
-								}
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-								this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-								int numberOfStackItems = currentFrame.numberOfStackItems;
-								this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-								this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-								for (int i = 0; i < numberOfStackItems; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.stackItems[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-									}
-								}
-						}
-					}
+			attributesNumber += generateStackMapTableAttribute(
+					binding,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					false);
+		}
 
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
+		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
+			attributesNumber += generateStackMapAttribute(
+					binding,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					false);
+		}
 
-						int attributeLength = localContentsOffset - stackMapTableAttributeLengthOffset - 4;
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapTableAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+		// then we do the local variable attribute
+		// update the number of attributes// ensure first that there is enough space available inside the localContents array
+		if (codeAttributeAttributeOffset + 2 >= this.contents.length) {
+			resizeContents(2);
 		}
-
-		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(this.codeStream.methodDeclaration.binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapName);
-					this.contents[localContentsOffset++] = (byte) (stackMapAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapAttributeNameIndex;
-
-					int stackMapAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int frameOffset = currentFrame.pc;
-						// FULL_FRAME
-						if (localContentsOffset + 5 >= this.contents.length) {
-							resizeContents(5);
-						}
-						this.contents[localContentsOffset++] = (byte) (frameOffset >> 8);
-						this.contents[localContentsOffset++] = (byte) frameOffset;
-						int numberOfLocalOffset = localContentsOffset;
-						localContentsOffset += 2; // leave two spots for number of locals
-						int numberOfLocalEntries = 0;
-						int numberOfLocals = currentFrame.getNumberOfLocals();
-						int numberOfEntries = 0;
-						int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-						for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.locals[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										i++;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										i++;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-								numberOfLocalEntries++;
-							}
-							numberOfEntries++;
-						}
-						if (localContentsOffset + 4 >= this.contents.length) {
-							resizeContents(4);
-						}
-						this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-						this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-						int numberOfStackItems = currentFrame.numberOfStackItems;
-						this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-						this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-						for (int i = 0; i < numberOfStackItems; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.stackItems[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-							}
-						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapAttributeLengthOffset - 4;
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
-		}
-
-		// then we do the local variable attribute
-		// update the number of attributes// ensure first that there is enough space available inside the localContents array
-		if (codeAttributeAttributeOffset + 2 >= this.contents.length) {
-			resizeContents(2);
-		}
-		this.contents[codeAttributeAttributeOffset++] = (byte) (attributeNumber >> 8);
-		this.contents[codeAttributeAttributeOffset] = (byte) attributeNumber;
-		// update the attribute length
-		int codeAttributeLength = localContentsOffset - (codeAttributeOffset + 6);
-		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
-		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
-		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
-		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
-		this.contentsOffset = localContentsOffset;
-	}
+		this.contents[codeAttributeAttributeOffset++] = (byte) (attributesNumber >> 8);
+		this.contents[codeAttributeAttributeOffset] = (byte) attributesNumber;
+		// update the attribute length
+		int codeAttributeLength = this.contentsOffset - (codeAttributeOffset + 6);
+		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
+		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
+		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
+		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
+	}
 
 	/**
 	 * INTERNAL USE-ONLY
@@ -4202,7 +1557,12 @@ public class ClassFile implements TypeConstants, TypeIds {
 	 *
 	 * @param codeAttributeOffset <CODE>int</CODE>
 	 */
-	public void completeCodeAttributeForProblemMethod(AbstractMethodDeclaration method, MethodBinding binding, int codeAttributeOffset, int[] startLineIndexes, int problemLine) {
+	public void completeCodeAttributeForProblemMethod(
+			AbstractMethodDeclaration method,
+			MethodBinding binding,
+			int codeAttributeOffset,
+			int[] startLineIndexes,
+			int problemLine) {
 		// reinitialize the localContents with the byte modified by the code stream
 		this.contents = this.codeStream.bCodeStream;
 		int localContentsOffset = this.codeStream.classFileOffset;
@@ -4228,800 +1588,214 @@ public class ClassFile implements TypeConstants, TypeIds {
 		this.contents[localContentsOffset++] = 0;
 		// debug attributes
 		int codeAttributeAttributeOffset = localContentsOffset;
-		int attributeNumber = 0; // leave two bytes for the attribute_length
+		int attributesNumber = 0; // leave two bytes for the attribute_length
 		localContentsOffset += 2; // first we handle the linenumber attribute
 		if (localContentsOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
 
+		this.contentsOffset = localContentsOffset;
 		if ((this.produceAttributes & ClassFileConstants.ATTR_LINES) != 0) {
-			if (localContentsOffset + 20 >= this.contents.length) {
-				resizeContents(20);
-			}
-			/* Create and add the line number attribute (used for debugging)
-				* Build the pairs of:
-				* (bytecodePC lineNumber)
-				* according to the table of start line indexes and the pcToSourceMap table
-				* contained into the codestream
-				*/
-			int lineNumberNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
-			this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
-			this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 6;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 1;
 			if (problemLine == 0) {
 				problemLine = Util.getLineNumber(binding.sourceStart(), startLineIndexes, 0, startLineIndexes.length-1);
 			}
-			// first entry at pc = 0
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = (byte) (problemLine >> 8);
-			this.contents[localContentsOffset++] = (byte) problemLine;
-			// now we change the size of the line number attribute
-			attributeNumber++;
+			attributesNumber += generateLineNumberAttribute(problemLine);
 		}
+
 		// then we do the local variable attribute
 		if ((this.produceAttributes & ClassFileConstants.ATTR_VARS) != 0) {
-			// compute the resolved position for the arguments of the method
-			int argSize;
-			int numberOfEntries = 0;
-			//		codeAttribute.addLocalVariableTableAttribute(this);
-			int localVariableNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTableName);
-			if (localContentsOffset + 8 >= this.contents.length) {
-				resizeContents(8);
-			}
-			this.contents[localContentsOffset++] = (byte) (localVariableNameIndex >> 8);
-			this.contents[localContentsOffset++] = (byte) localVariableNameIndex;
-			int localVariableTableOffset = localContentsOffset;
-			localContentsOffset += 6;
-			// leave space for attribute_length and local_variable_table_length
-			int descriptorIndex;
-			int nameIndex;
-			SourceTypeBinding declaringClassBinding = null;
 			final boolean methodDeclarationIsStatic = this.codeStream.methodDeclaration.isStatic();
-			if (!methodDeclarationIsStatic) {
-				numberOfEntries++;
-				if (localContentsOffset + 10 >= this.contents.length) {
-					resizeContents(10);
-				}
-				this.contents[localContentsOffset++] = 0;
-				this.contents[localContentsOffset++] = 0;
-				this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-				this.contents[localContentsOffset++] = (byte) code_length;
-				nameIndex = this.constantPool.literalIndex(ConstantPool.This);
-				this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) nameIndex;
-				declaringClassBinding = (SourceTypeBinding) this.codeStream.methodDeclaration.binding.declaringClass;
-				descriptorIndex =
-					this.constantPool.literalIndex(declaringClassBinding.signature());
-				this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) descriptorIndex;
-				// the resolved position for this is always 0
-				this.contents[localContentsOffset++] = 0;
-				this.contents[localContentsOffset++] = 0;
+			attributesNumber += generateLocalVariableTableAttribute(code_length, methodDeclarationIsStatic, false);
+		}
+
+		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP_TABLE) != 0) {
+			attributesNumber += generateStackMapTableAttribute(
+					binding,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					false);
+		}
+
+		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
+			attributesNumber += generateStackMapAttribute(
+					binding,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					false);
+		}
+
+		// update the number of attributes// ensure first that there is enough space available inside the localContents array
+		if (codeAttributeAttributeOffset + 2 >= this.contents.length) {
+			resizeContents(2);
+		}
+		this.contents[codeAttributeAttributeOffset++] = (byte) (attributesNumber >> 8);
+		this.contents[codeAttributeAttributeOffset] = (byte) attributesNumber;
+		// update the attribute length
+		int codeAttributeLength = this.contentsOffset - (codeAttributeOffset + 6);
+		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
+		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
+		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
+		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
+	}
+
+	/**
+	 * INTERNAL USE-ONLY
+	 * That method completes the creation of the code attribute by setting
+	 * - the attribute_length
+	 * - max_stack
+	 * - max_locals
+	 * - code_length
+	 * - exception table
+	 * - and debug attributes if necessary.
+	 *
+	 * @param binding org.eclipse.jdt.internal.compiler.lookup.SyntheticAccessMethodBinding
+	 * @param codeAttributeOffset <CODE>int</CODE>
+	 */
+	public void completeCodeAttributeForSyntheticMethod(
+			boolean hasExceptionHandlers,
+			SyntheticMethodBinding binding,
+			int codeAttributeOffset,
+			int[] startLineIndexes) {
+		// reinitialize the contents with the byte modified by the code stream
+		this.contents = this.codeStream.bCodeStream;
+		int localContentsOffset = this.codeStream.classFileOffset;
+		// codeAttributeOffset is the position inside contents byte array before we started to write
+		// any information about the codeAttribute
+		// That means that to write the attribute_length you need to offset by 2 the value of codeAttributeOffset
+		// to get the right position, 6 for the max_stack etc...
+		int max_stack = this.codeStream.stackMax;
+		this.contents[codeAttributeOffset + 6] = (byte) (max_stack >> 8);
+		this.contents[codeAttributeOffset + 7] = (byte) max_stack;
+		int max_locals = this.codeStream.maxLocals;
+		this.contents[codeAttributeOffset + 8] = (byte) (max_locals >> 8);
+		this.contents[codeAttributeOffset + 9] = (byte) max_locals;
+		int code_length = this.codeStream.position;
+		this.contents[codeAttributeOffset + 10] = (byte) (code_length >> 24);
+		this.contents[codeAttributeOffset + 11] = (byte) (code_length >> 16);
+		this.contents[codeAttributeOffset + 12] = (byte) (code_length >> 8);
+		this.contents[codeAttributeOffset + 13] = (byte) code_length;
+		if ((localContentsOffset + 40) >= this.contents.length) {
+			resizeContents(40);
+		}
+
+		boolean addStackMaps = (this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP_TABLE) != 0;
+		if (hasExceptionHandlers) {
+			// write the exception table
+			ExceptionLabel[] exceptionLabels = this.codeStream.exceptionLabels;
+			int exceptionHandlersCount = 0; // each label holds one handler per range (start/end contiguous)
+			for (int i = 0, length = this.codeStream.exceptionLabelsCounter; i < length; i++) {
+				exceptionHandlersCount += this.codeStream.exceptionLabels[i].count / 2;
 			}
-			// used to remember the local variable with a generic type
-			int genericLocalVariablesCounter = 0;
-			LocalVariableBinding[] genericLocalVariables = null;
-			int numberOfGenericEntries = 0;
-
-			if (binding.isConstructor()) {
-				ReferenceBinding declaringClass = binding.declaringClass;
-				if (declaringClass.isNestedType()) {
-					NestedTypeBinding methodDeclaringClass = (NestedTypeBinding) declaringClass;
-					argSize = methodDeclaringClass.getEnclosingInstancesSlotSize();
-					SyntheticArgumentBinding[] syntheticArguments;
-					if ((syntheticArguments = methodDeclaringClass.syntheticEnclosingInstances()) != null) {
-						for (int i = 0, max = syntheticArguments.length; i < max; i++) {
-							LocalVariableBinding localVariable = syntheticArguments[i];
-							final TypeBinding localVariableTypeBinding = localVariable.type;
-							if (localVariableTypeBinding.isParameterizedType() || localVariableTypeBinding.isTypeVariable()) {
-								if (genericLocalVariables == null) {
-									// we cannot have more than max locals
-									genericLocalVariables = new LocalVariableBinding[max];
-								}
-								genericLocalVariables[genericLocalVariablesCounter++] = localVariable;
-								numberOfGenericEntries++;
-							}
-							if (localContentsOffset + 10 >= this.contents.length) {
-								resizeContents(10);
-							}
-							// now we can safely add the local entry
-							numberOfEntries++;
+			int exSize = exceptionHandlersCount * 8 + 2;
+			if (exSize + localContentsOffset >= this.contents.length) {
+				resizeContents(exSize);
+			}
+			// there is no exception table, so we need to offset by 2 the current offset and move
+			// on the attribute generation
+			this.contents[localContentsOffset++] = (byte) (exceptionHandlersCount >> 8);
+			this.contents[localContentsOffset++] = (byte) exceptionHandlersCount;
+			for (int i = 0, max = this.codeStream.exceptionLabelsCounter; i < max; i++) {
+				ExceptionLabel exceptionLabel = exceptionLabels[i];
+				if (exceptionLabel != null) {
+					int iRange = 0, maxRange = exceptionLabel.count;
+					if ((maxRange & 1) != 0) {
+						this.referenceBinding.scope.problemReporter().abortDueToInternalError(
+								Messages.bind(Messages.abort_invalidExceptionAttribute, new String(binding.selector),
+										this.referenceBinding.scope.problemReporter().referenceContext));
+					}
+					while  (iRange < maxRange) {
+						int start = exceptionLabel.ranges[iRange++]; // even ranges are start positions
+						this.contents[localContentsOffset++] = (byte) (start >> 8);
+						this.contents[localContentsOffset++] = (byte) start;
+						int end = exceptionLabel.ranges[iRange++]; // odd ranges are end positions
+						this.contents[localContentsOffset++] = (byte) (end >> 8);
+						this.contents[localContentsOffset++] = (byte) end;
+						int handlerPC = exceptionLabel.position;
+						if (addStackMaps) {
+							StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
+							stackMapFrameCodeStream.addFramePosition(handlerPC);
+						}
+						this.contents[localContentsOffset++] = (byte) (handlerPC >> 8);
+						this.contents[localContentsOffset++] = (byte) handlerPC;
+						if (exceptionLabel.exceptionType == null) {
+							// any exception handler
 							this.contents[localContentsOffset++] = 0;
 							this.contents[localContentsOffset++] = 0;
-							this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-							this.contents[localContentsOffset++] = (byte) code_length;
-							nameIndex = this.constantPool.literalIndex(localVariable.name);
+						} else {
+							int nameIndex;
+							switch(exceptionLabel.exceptionType.id) {
+								case T_null :
+									/* represents ClassNotFoundException, see class literal access*/
+									nameIndex = this.constantPool.literalIndexForType(ConstantPool.JavaLangClassNotFoundExceptionConstantPoolName);
+									break;
+								case T_long :
+									/* represents NoSuchFieldError, see switch table generation*/
+									nameIndex = this.constantPool.literalIndexForType(ConstantPool.JavaLangNoSuchFieldErrorConstantPoolName);
+									break;
+								default:
+									nameIndex = this.constantPool.literalIndexForType(exceptionLabel.exceptionType);
+							}
 							this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
 							this.contents[localContentsOffset++] = (byte) nameIndex;
-							descriptorIndex = this.constantPool.literalIndex(localVariableTypeBinding.signature());
-							this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) descriptorIndex;
-							int resolvedPosition = localVariable.resolvedPosition;
-							this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-							this.contents[localContentsOffset++] = (byte) resolvedPosition;
 						}
 					}
-				} else {
-					argSize = 1;
 				}
-			} else {
-				argSize = binding.isStatic() ? 0 : 1;
 			}
+		} else {
+			// there is no exception table, so we need to offset by 2 the current offset and move
+			// on the attribute generation
+			this.contents[localContentsOffset++] = 0;
+			this.contents[localContentsOffset++] = 0;
+		}
+		// debug attributes
+		int codeAttributeAttributeOffset = localContentsOffset;
+		int attributesNumber = 0;
+		// leave two bytes for the attribute_length
+		localContentsOffset += 2;
+		if (localContentsOffset + 2 >= this.contents.length) {
+			resizeContents(2);
+		}
 
-			int genericArgumentsCounter = 0;
-			int[] genericArgumentsNameIndexes = null;
-			int[] genericArgumentsResolvedPositions = null;
-			TypeBinding[] genericArgumentsTypeBindings = null;
-
-			if (method.binding != null) {
-				TypeBinding[] parameters = method.binding.parameters;
-				Argument[] arguments = method.arguments;
-				if ((parameters != null) && (arguments != null)) {
-					for (int i = 0, max = parameters.length; i < max; i++) {
-						TypeBinding argumentBinding = parameters[i];
-						if (localContentsOffset + 10 >= this.contents.length) {
-							resizeContents(10);
-						}
-						// now we can safely add the local entry
-						numberOfEntries++;
-						this.contents[localContentsOffset++] = 0;
-						this.contents[localContentsOffset++] = 0;
-						this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-						this.contents[localContentsOffset++] = (byte) code_length;
-						nameIndex = this.constantPool.literalIndex(arguments[i].name);
-						this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-						this.contents[localContentsOffset++] = (byte) nameIndex;
-						int resolvedPosition = argSize;
-						if (argumentBinding.isParameterizedType() || argumentBinding.isTypeVariable()) {
-							if (genericArgumentsCounter == 0) {
-								// we cannot have more than max locals
-								genericArgumentsNameIndexes = new int[max];
-								genericArgumentsResolvedPositions = new int[max];
-								genericArgumentsTypeBindings = new TypeBinding[max];
-							}
-							genericArgumentsNameIndexes[genericArgumentsCounter] = nameIndex;
-							genericArgumentsResolvedPositions[genericArgumentsCounter] = resolvedPosition;
-							genericArgumentsTypeBindings[genericArgumentsCounter++] = argumentBinding;
-						}
-						descriptorIndex = this.constantPool.literalIndex(argumentBinding.signature());
-						this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-						this.contents[localContentsOffset++] = (byte) descriptorIndex;
-						switch(argumentBinding.id) {
-							case TypeIds.T_long :
-							case TypeIds.T_double :
-								argSize += 2;
-								break;
-							default :
-								argSize++;
-								break;
-						}
-						this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-						this.contents[localContentsOffset++] = (byte) resolvedPosition;
-					}
-				}
-			}
-			int value = numberOfEntries * 10 + 2;
-			this.contents[localVariableTableOffset++] = (byte) (value >> 24);
-			this.contents[localVariableTableOffset++] = (byte) (value >> 16);
-			this.contents[localVariableTableOffset++] = (byte) (value >> 8);
-			this.contents[localVariableTableOffset++] = (byte) value;
-			this.contents[localVariableTableOffset++] = (byte) (numberOfEntries >> 8);
-			this.contents[localVariableTableOffset] = (byte) numberOfEntries;
-			attributeNumber++;
-
-			final boolean currentInstanceIsGeneric =
-				!methodDeclarationIsStatic
-				&& declaringClassBinding != null
-				&& declaringClassBinding.typeVariables != Binding.NO_TYPE_VARIABLES;
-			if (genericLocalVariablesCounter != 0 || genericArgumentsCounter != 0 || currentInstanceIsGeneric) {
-				// add the local variable type table attribute
-				numberOfEntries = numberOfGenericEntries + genericArgumentsCounter + (currentInstanceIsGeneric ? 1 : 0);
-				// reserve enough space
-				int maxOfEntries = 8 + numberOfEntries * 10;
-				if (localContentsOffset + maxOfEntries >= this.contents.length) {
-					resizeContents(maxOfEntries);
-				}
-				int localVariableTypeNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTypeTableName);
-				this.contents[localContentsOffset++] = (byte) (localVariableTypeNameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) localVariableTypeNameIndex;
-				value = numberOfEntries * 10 + 2;
-				this.contents[localContentsOffset++] = (byte) (value >> 24);
-				this.contents[localContentsOffset++] = (byte) (value >> 16);
-				this.contents[localContentsOffset++] = (byte) (value >> 8);
-				this.contents[localContentsOffset++] = (byte) value;
-				this.contents[localContentsOffset++] = (byte) (numberOfEntries >> 8);
-				this.contents[localContentsOffset++] = (byte) numberOfEntries;
-				if (currentInstanceIsGeneric) {
-					numberOfEntries++;
-					this.contents[localContentsOffset++] = 0; // the startPC for this is always 0
-					this.contents[localContentsOffset++] = 0;
-					this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-					this.contents[localContentsOffset++] = (byte) code_length;
-					nameIndex = this.constantPool.literalIndex(ConstantPool.This);
-					this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) nameIndex;
-					descriptorIndex = this.constantPool.literalIndex(declaringClassBinding.genericTypeSignature());
-					this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) descriptorIndex;
-					this.contents[localContentsOffset++] = 0;// the resolved position for this is always 0
-					this.contents[localContentsOffset++] = 0;
-				}
-
-				for (int i = 0; i < genericLocalVariablesCounter; i++) {
-					LocalVariableBinding localVariable = genericLocalVariables[i];
-					this.contents[localContentsOffset++] = 0;
-					this.contents[localContentsOffset++] = 0;
-					this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-					this.contents[localContentsOffset++] = (byte) code_length;
-					nameIndex = this.constantPool.literalIndex(localVariable.name);
-					this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) nameIndex;
-					descriptorIndex = this.constantPool.literalIndex(localVariable.type.genericTypeSignature());
-					this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) descriptorIndex;
-					int resolvedPosition = localVariable.resolvedPosition;
-					this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-					this.contents[localContentsOffset++] = (byte) resolvedPosition;
-				}
-				for (int i = 0; i < genericArgumentsCounter; i++) {
-					this.contents[localContentsOffset++] = 0;
-					this.contents[localContentsOffset++] = 0;
-					this.contents[localContentsOffset++] = (byte) (code_length >> 8);
-					this.contents[localContentsOffset++] = (byte) code_length;
-					nameIndex = genericArgumentsNameIndexes[i];
-					this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) nameIndex;
-					descriptorIndex = this.constantPool.literalIndex(genericArgumentsTypeBindings[i].genericTypeSignature());
-					this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) descriptorIndex;
-					int resolvedPosition = genericArgumentsResolvedPositions[i];
-					this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-					this.contents[localContentsOffset++] = (byte) resolvedPosition;
-				}
-				attributeNumber++;
-			}
+		this.contentsOffset = localContentsOffset;
+		// first we handle the linenumber attribute
+		if ((this.produceAttributes & ClassFileConstants.ATTR_LINES) != 0) {
+			int lineNumber = Util.getLineNumber(binding.sourceStart, startLineIndexes, 0, startLineIndexes.length-1);
+			attributesNumber += generateLineNumberAttribute(lineNumber);
 		}
-
-		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP_TABLE) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapTableAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapTableName);
-					this.contents[localContentsOffset++] = (byte) (stackMapTableAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapTableAttributeNameIndex;
-
-					int stackMapTableAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					numberOfFrames = 0;
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					StackMapFrame prevFrame = null;
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						prevFrame = currentFrame;
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						numberOfFrames++;
-						int offsetDelta = currentFrame.getOffsetDelta(prevFrame);
-						switch (currentFrame.getFrameType(prevFrame)) {
-							case StackMapFrame.APPEND_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								int numberOfDifferentLocals = currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 + numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int index = currentFrame.getIndexOfDifferentLocals(numberOfDifferentLocals);
-								int numberOfLocals = currentFrame.getNumberOfLocals();
-								for (int i = index; i < currentFrame.locals.length && numberOfDifferentLocals > 0; i++) {
-									if (localContentsOffset + 6 >= this.contents.length) {
-										resizeContents(6);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfDifferentLocals--;
-									}
-								}
-								break;
-							case StackMapFrame.SAME_FRAME :
-								if (localContentsOffset + 1 >= this.contents.length) {
-									resizeContents(1);
-								}
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_FRAME_EXTENDED :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								this.contents[localContentsOffset++] = (byte) 251;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.CHOP_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								numberOfDifferentLocals = -currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 - numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS :
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[localContentsOffset++] = (byte) (offsetDelta + 64);
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS_EXTENDED :
-								if (localContentsOffset + 6 >= this.contents.length) {
-									resizeContents(6);
-								}
-								this.contents[localContentsOffset++] = (byte) 247;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							default :
-								// FULL_FRAME
-								if (localContentsOffset + 5 >= this.contents.length) {
-									resizeContents(5);
-								}
-								this.contents[localContentsOffset++] = (byte) 255;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int numberOfLocalOffset = localContentsOffset;
-								localContentsOffset += 2; // leave two spots for number of locals
-								int numberOfLocalEntries = 0;
-								numberOfLocals = currentFrame.getNumberOfLocals();
-								int numberOfEntries = 0;
-								int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-								for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfLocalEntries++;
-									}
-									numberOfEntries++;
-								}
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-								this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-								int numberOfStackItems = currentFrame.numberOfStackItems;
-								this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-								this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-								for (int i = 0; i < numberOfStackItems; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.stackItems[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-									}
-								}
-						}
-					}
-
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapTableAttributeLengthOffset - 4;
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapTableAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+		// then we do the local variable attribute
+		if ((this.produceAttributes & ClassFileConstants.ATTR_VARS) != 0) {
+			final boolean methodDeclarationIsStatic = binding.isStatic();
+			attributesNumber += generateLocalVariableTableAttribute(code_length, methodDeclarationIsStatic, true);
+		}
+		if (addStackMaps) {
+			attributesNumber += generateStackMapTableAttribute(binding, code_length, codeAttributeOffset, max_locals, false);
 		}
 
 		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(this.codeStream.methodDeclaration.binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapName);
-					this.contents[localContentsOffset++] = (byte) (stackMapAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapAttributeNameIndex;
-
-					int stackMapAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int frameOffset = currentFrame.pc;
-						// FULL_FRAME
-						if (localContentsOffset + 5 >= this.contents.length) {
-							resizeContents(5);
-						}
-						this.contents[localContentsOffset++] = (byte) (frameOffset >> 8);
-						this.contents[localContentsOffset++] = (byte) frameOffset;
-						int numberOfLocalOffset = localContentsOffset;
-						localContentsOffset += 2; // leave two spots for number of locals
-						int numberOfLocalEntries = 0;
-						int numberOfLocals = currentFrame.getNumberOfLocals();
-						int numberOfEntries = 0;
-						int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-						for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.locals[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										i++;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										i++;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-								numberOfLocalEntries++;
-							}
-							numberOfEntries++;
-						}
-						if (localContentsOffset + 4 >= this.contents.length) {
-							resizeContents(4);
-						}
-						this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-						this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-						int numberOfStackItems = currentFrame.numberOfStackItems;
-						this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-						this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-						for (int i = 0; i < numberOfStackItems; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.stackItems[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-							}
-						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapAttributeLengthOffset - 4;
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
-					}
-				}
-			}
+			attributesNumber += generateStackMapAttribute(
+					binding,
+					code_length,
+					codeAttributeOffset,
+					max_locals,
+					false);
 		}
 
-		// update the number of attributes// ensure first that there is enough space available inside the localContents array
+		// update the number of attributes
+		// ensure first that there is enough space available inside the contents array
 		if (codeAttributeAttributeOffset + 2 >= this.contents.length) {
 			resizeContents(2);
 		}
-		this.contents[codeAttributeAttributeOffset++] = (byte) (attributeNumber >> 8);
-		this.contents[codeAttributeAttributeOffset] = (byte) attributeNumber;
+		this.contents[codeAttributeAttributeOffset++] = (byte) (attributesNumber >> 8);
+		this.contents[codeAttributeAttributeOffset] = (byte) attributesNumber;
+
 		// update the attribute length
-		int codeAttributeLength = localContentsOffset - (codeAttributeOffset + 6);
+		int codeAttributeLength = this.contentsOffset - (codeAttributeOffset + 6);
 		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
 		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
 		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
 		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
-		this.contentsOffset = localContentsOffset;
 	}
 
 	/**
@@ -5038,1717 +1812,1940 @@ public class ClassFile implements TypeConstants, TypeIds {
 	 * @param codeAttributeOffset <CODE>int</CODE>
 	 */
 	public void completeCodeAttributeForSyntheticMethod(
-		boolean hasExceptionHandlers,
-		SyntheticMethodBinding binding,
-		int codeAttributeOffset,
-		int[] startLineIndexes) {
-		// reinitialize the contents with the byte modified by the code stream
-		this.contents = this.codeStream.bCodeStream;
-		int localContentsOffset = this.codeStream.classFileOffset;
-		// codeAttributeOffset is the position inside contents byte array before we started to write
-		// any information about the codeAttribute
-		// That means that to write the attribute_length you need to offset by 2 the value of codeAttributeOffset
-		// to get the right position, 6 for the max_stack etc...
-		int max_stack = this.codeStream.stackMax;
-		this.contents[codeAttributeOffset + 6] = (byte) (max_stack >> 8);
-		this.contents[codeAttributeOffset + 7] = (byte) max_stack;
-		int max_locals = this.codeStream.maxLocals;
-		this.contents[codeAttributeOffset + 8] = (byte) (max_locals >> 8);
-		this.contents[codeAttributeOffset + 9] = (byte) max_locals;
-		int code_length = this.codeStream.position;
-		this.contents[codeAttributeOffset + 10] = (byte) (code_length >> 24);
-		this.contents[codeAttributeOffset + 11] = (byte) (code_length >> 16);
-		this.contents[codeAttributeOffset + 12] = (byte) (code_length >> 8);
-		this.contents[codeAttributeOffset + 13] = (byte) code_length;
-		if ((localContentsOffset + 40) >= this.contents.length) {
-			resizeContents(40);
-		}
+			SyntheticMethodBinding binding,
+			int codeAttributeOffset,
+			int[] startLineIndexes) {
 
-		boolean addStackMaps = (this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP_TABLE) != 0;
-		if (hasExceptionHandlers) {
-			// write the exception table
-			ExceptionLabel[] exceptionLabels = this.codeStream.exceptionLabels;
-			int exceptionHandlersCount = 0; // each label holds one handler per range (start/end contiguous)
-			for (int i = 0, length = this.codeStream.exceptionLabelsCounter; i < length; i++) {
-				exceptionHandlersCount += this.codeStream.exceptionLabels[i].count / 2;
-			}
-			int exSize = exceptionHandlersCount * 8 + 2;
-			if (exSize + localContentsOffset >= this.contents.length) {
-				resizeContents(exSize);
-			}
-			// there is no exception table, so we need to offset by 2 the current offset and move
-			// on the attribute generation
-			this.contents[localContentsOffset++] = (byte) (exceptionHandlersCount >> 8);
-			this.contents[localContentsOffset++] = (byte) exceptionHandlersCount;
-			for (int i = 0, max = this.codeStream.exceptionLabelsCounter; i < max; i++) {
-				ExceptionLabel exceptionLabel = exceptionLabels[i];
-				if (exceptionLabel != null) {
-					int iRange = 0, maxRange = exceptionLabel.count;
-					if ((maxRange & 1) != 0) {
-						this.referenceBinding.scope.problemReporter().abortDueToInternalError(
-								Messages.bind(Messages.abort_invalidExceptionAttribute, new String(binding.selector),
-										this.referenceBinding.scope.problemReporter().referenceContext));
-					}
-					while  (iRange < maxRange) {
-						int start = exceptionLabel.ranges[iRange++]; // even ranges are start positions
-						this.contents[localContentsOffset++] = (byte) (start >> 8);
-						this.contents[localContentsOffset++] = (byte) start;
-						int end = exceptionLabel.ranges[iRange++]; // odd ranges are end positions
-						this.contents[localContentsOffset++] = (byte) (end >> 8);
-						this.contents[localContentsOffset++] = (byte) end;
-						int handlerPC = exceptionLabel.position;
-						if (addStackMaps) {
-							StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-							stackMapFrameCodeStream.addFramePosition(handlerPC);
-//							stackMapFrameCodeStream.addExceptionMarker(handlerPC, exceptionLabel.exceptionType);
-						}
-						this.contents[localContentsOffset++] = (byte) (handlerPC >> 8);
-						this.contents[localContentsOffset++] = (byte) handlerPC;
-						if (exceptionLabel.exceptionType == null) {
-							// any exception handler
-							this.contents[localContentsOffset++] = 0;
-							this.contents[localContentsOffset++] = 0;
-						} else {
-							int nameIndex;
-							switch(exceptionLabel.exceptionType.id) {
-								case T_null :
-									/* represents ClassNotFoundException, see class literal access*/
-									nameIndex = this.constantPool.literalIndexForType(ConstantPool.JavaLangClassNotFoundExceptionConstantPoolName);
-									break;
-								case T_long :
-									/* represents NoSuchFieldError, see switch table generation*/
-									nameIndex = this.constantPool.literalIndexForType(ConstantPool.JavaLangNoSuchFieldErrorConstantPoolName);
-									break;
-								default:
-									nameIndex = this.constantPool.literalIndexForType(exceptionLabel.exceptionType);
-							}
-							this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) nameIndex;
-						}
-					}
-				}
-			}
-		} else {
-			// there is no exception table, so we need to offset by 2 the current offset and move
-			// on the attribute generation
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-		}
-		// debug attributes
-		int codeAttributeAttributeOffset = localContentsOffset;
-		int attributeNumber = 0;
-		// leave two bytes for the attribute_length
-		localContentsOffset += 2;
-		if (localContentsOffset + 2 >= this.contents.length) {
-			resizeContents(2);
-		}
+		this.completeCodeAttributeForSyntheticMethod(
+				false,
+				binding,
+				codeAttributeOffset,
+				startLineIndexes);
+	}
 
-		// first we handle the linenumber attribute
-		if ((this.produceAttributes & ClassFileConstants.ATTR_LINES) != 0) {
-			if (localContentsOffset + 12 >= this.contents.length) {
-				resizeContents(12);
-			}
-			int index = 0;
-			int lineNumberNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
-			this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
-			this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
-			int lineNumberTableOffset = localContentsOffset;
-			localContentsOffset += 6;
-			// leave space for attribute_length and line_number_table_length
-			// Seems like do would be better, but this preserves the existing behavior.
-			index = Util.getLineNumber(binding.sourceStart, startLineIndexes, 0, startLineIndexes.length-1);
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = 0;
-			this.contents[localContentsOffset++] = (byte) (index >> 8);
-			this.contents[localContentsOffset++] = (byte) index;
-			// now we change the size of the line number attribute
-			this.contents[lineNumberTableOffset++] = 0;
-			this.contents[lineNumberTableOffset++] = 0;
-			this.contents[lineNumberTableOffset++] = 0;
-			this.contents[lineNumberTableOffset++] = 6;
-			this.contents[lineNumberTableOffset++] = 0;
-			this.contents[lineNumberTableOffset++] = 1;
-			attributeNumber++;
+	/**
+	 * INTERNAL USE-ONLY
+	 * Complete the creation of a method info by setting up the number of attributes at the right offset.
+	 *
+	 * @param methodAttributeOffset <CODE>int</CODE>
+	 * @param attributesNumber <CODE>int</CODE>
+	 */
+	public void completeMethodInfo(
+			MethodBinding binding,
+			int methodAttributeOffset,
+			int attributesNumber) {
+		// update the number of attributes
+		this.contents[methodAttributeOffset++] = (byte) (attributesNumber >> 8);
+		this.contents[methodAttributeOffset] = (byte) attributesNumber;
+	}
+	/**
+	 * INTERNAL USE-ONLY
+	 * This methods returns a char[] representing the file name of the receiver
+	 *
+	 * @return char[]
+	 */
+	public char[] fileName() {
+		return this.constantPool.UTF8Cache.returnKeyFor(2);
+	}
+
+	private void generateAnnotation(Annotation annotation, int currentOffset) {
+		int startingContentsOffset = currentOffset;
+		if (this.contentsOffset + 4 >= this.contents.length) {
+			resizeContents(4);
 		}
-		// then we do the local variable attribute
-		if ((this.produceAttributes & ClassFileConstants.ATTR_VARS) != 0) {
-			int numberOfEntries = 0;
-			int localVariableNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTableName);
-			if (localContentsOffset + 8 > this.contents.length) {
-				resizeContents(8);
-			}
-			this.contents[localContentsOffset++] = (byte) (localVariableNameIndex >> 8);
-			this.contents[localContentsOffset++] = (byte) localVariableNameIndex;
-			int localVariableTableOffset = localContentsOffset;
-			localContentsOffset += 6;
-			// leave space for attribute_length and local_variable_table_length
-			int nameIndex;
-			int descriptorIndex;
-
-			// used to remember the local variable with a generic type
-			int genericLocalVariablesCounter = 0;
-			LocalVariableBinding[] genericLocalVariables = null;
-			int numberOfGenericEntries = 0;
-
-			for (int i = 0, max = this.codeStream.allLocalsCounter; i < max; i++) {
-				LocalVariableBinding localVariable = this.codeStream.locals[i];
-				if (localVariable.declaration == null) continue;
-				final TypeBinding localVariableTypeBinding = localVariable.type;
-				boolean isParameterizedType = localVariableTypeBinding.isParameterizedType() || localVariableTypeBinding.isTypeVariable();
-				if (localVariable.initializationCount != 0 && isParameterizedType) {
-					if (genericLocalVariables == null) {
-						// we cannot have more than max locals
-						genericLocalVariables = new LocalVariableBinding[max];
+		TypeBinding annotationTypeBinding = annotation.resolvedType;
+		if (annotationTypeBinding == null) {
+			this.contentsOffset = startingContentsOffset;
+			return;
+		}
+		final int typeIndex = this.constantPool.literalIndex(annotationTypeBinding.signature());
+		this.contents[this.contentsOffset++] = (byte) (typeIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) typeIndex;
+		if (annotation instanceof NormalAnnotation) {
+			NormalAnnotation normalAnnotation = (NormalAnnotation) annotation;
+			MemberValuePair[] memberValuePairs = normalAnnotation.memberValuePairs;
+			if (memberValuePairs != null) {
+				final int memberValuePairsLength = memberValuePairs.length;
+				this.contents[this.contentsOffset++] = (byte) (memberValuePairsLength >> 8);
+				this.contents[this.contentsOffset++] = (byte) memberValuePairsLength;
+				for (int i = 0; i < memberValuePairsLength; i++) {
+					MemberValuePair memberValuePair = memberValuePairs[i];
+					if (this.contentsOffset + 2 >= this.contents.length) {
+						resizeContents(2);
 					}
-					genericLocalVariables[genericLocalVariablesCounter++] = localVariable;
-				}
-				for (int j = 0; j < localVariable.initializationCount; j++) {
-					int startPC = localVariable.initializationPCs[j << 1];
-					int endPC = localVariable.initializationPCs[(j << 1) + 1];
-					if (startPC != endPC) { // only entries for non zero length
-						if (endPC == -1) {
-							localVariable.declaringScope.problemReporter().abortDueToInternalError(
-								Messages.bind(Messages.abort_invalidAttribute, new String(localVariable.name)),
-								(ASTNode) localVariable.declaringScope.methodScope().referenceContext);
-						}
-						if (localContentsOffset + 10 > this.contents.length) {
-							resizeContents(10);
-						}
-						// now we can safely add the local entry
-						numberOfEntries++;
-						if (isParameterizedType) {
-							numberOfGenericEntries++;
+					final int elementNameIndex = this.constantPool.literalIndex(memberValuePair.name);
+					this.contents[this.contentsOffset++] = (byte) (elementNameIndex >> 8);
+					this.contents[this.contentsOffset++] = (byte) elementNameIndex;
+					MethodBinding methodBinding = memberValuePair.binding;
+					if (methodBinding == null) {
+						this.contentsOffset = startingContentsOffset;
+					} else {
+						try {
+							generateElementValue(memberValuePair.value, methodBinding.returnType, startingContentsOffset);
+						} catch(ClassCastException e) {
+							this.contentsOffset = startingContentsOffset;
+						} catch(ShouldNotImplement e) {
+							this.contentsOffset = startingContentsOffset;
 						}
-						this.contents[localContentsOffset++] = (byte) (startPC >> 8);
-						this.contents[localContentsOffset++] = (byte) startPC;
-						int length = endPC - startPC;
-						this.contents[localContentsOffset++] = (byte) (length >> 8);
-						this.contents[localContentsOffset++] = (byte) length;
-						nameIndex = this.constantPool.literalIndex(localVariable.name);
-						this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-						this.contents[localContentsOffset++] = (byte) nameIndex;
-						descriptorIndex = this.constantPool.literalIndex(localVariableTypeBinding.signature());
-						this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-						this.contents[localContentsOffset++] = (byte) descriptorIndex;
-						int resolvedPosition = localVariable.resolvedPosition;
-						this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-						this.contents[localContentsOffset++] = (byte) resolvedPosition;
 					}
 				}
+			} else {
+				this.contents[this.contentsOffset++] = 0;
+				this.contents[this.contentsOffset++] = 0;
 			}
-			int value = numberOfEntries * 10 + 2;
-			this.contents[localVariableTableOffset++] = (byte) (value >> 24);
-			this.contents[localVariableTableOffset++] = (byte) (value >> 16);
-			this.contents[localVariableTableOffset++] = (byte) (value >> 8);
-			this.contents[localVariableTableOffset++] = (byte) value;
-			this.contents[localVariableTableOffset++] = (byte) (numberOfEntries >> 8);
-			this.contents[localVariableTableOffset] = (byte) numberOfEntries;
-			attributeNumber++;
-
-			if (genericLocalVariablesCounter != 0) {
-				// add the local variable type table attribute
-				int maxOfEntries = 8 + numberOfGenericEntries * 10;
-				// reserve enough space
-				if (localContentsOffset + maxOfEntries >= this.contents.length) {
-					resizeContents(maxOfEntries);
-				}
-				int localVariableTypeNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTypeTableName);
-				this.contents[localContentsOffset++] = (byte) (localVariableTypeNameIndex >> 8);
-				this.contents[localContentsOffset++] = (byte) localVariableTypeNameIndex;
-				value = numberOfGenericEntries * 10 + 2;
-				this.contents[localContentsOffset++] = (byte) (value >> 24);
-				this.contents[localContentsOffset++] = (byte) (value >> 16);
-				this.contents[localContentsOffset++] = (byte) (value >> 8);
-				this.contents[localContentsOffset++] = (byte) value;
-				this.contents[localContentsOffset++] = (byte) (numberOfGenericEntries >> 8);
-				this.contents[localContentsOffset++] = (byte) numberOfGenericEntries;
-
-				for (int i = 0; i < genericLocalVariablesCounter; i++) {
-					LocalVariableBinding localVariable = genericLocalVariables[i];
-					for (int j = 0; j < localVariable.initializationCount; j++) {
-						int startPC = localVariable.initializationPCs[j << 1];
-						int endPC = localVariable.initializationPCs[(j << 1) + 1];
-						if (startPC != endPC) { // only entries for non zero length
-							// now we can safely add the local entry
-							this.contents[localContentsOffset++] = (byte) (startPC >> 8);
-							this.contents[localContentsOffset++] = (byte) startPC;
-							int length = endPC - startPC;
-							this.contents[localContentsOffset++] = (byte) (length >> 8);
-							this.contents[localContentsOffset++] = (byte) length;
-							nameIndex = this.constantPool.literalIndex(localVariable.name);
-							this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) nameIndex;
-							descriptorIndex = this.constantPool.literalIndex(localVariable.type.genericTypeSignature());
-							this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
-							this.contents[localContentsOffset++] = (byte) descriptorIndex;
-							int resolvedPosition = localVariable.resolvedPosition;
-							this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
-							this.contents[localContentsOffset++] = (byte) resolvedPosition;
-						}
-					}
+		} else if (annotation instanceof SingleMemberAnnotation) {
+			SingleMemberAnnotation singleMemberAnnotation = (SingleMemberAnnotation) annotation;
+			// this is a single member annotation (one member value)
+			this.contents[this.contentsOffset++] = 0;
+			this.contents[this.contentsOffset++] = 1;
+			if (this.contentsOffset + 2 >= this.contents.length) {
+				resizeContents(2);
+			}
+			final int elementNameIndex = this.constantPool.literalIndex(VALUE);
+			this.contents[this.contentsOffset++] = (byte) (elementNameIndex >> 8);
+			this.contents[this.contentsOffset++] = (byte) elementNameIndex;
+			MethodBinding methodBinding = singleMemberAnnotation.memberValuePairs()[0].binding;
+			if (methodBinding == null) {
+				this.contentsOffset = startingContentsOffset;
+			} else {
+				try {
+					generateElementValue(singleMemberAnnotation.memberValue, methodBinding.returnType, startingContentsOffset);
+				} catch(ClassCastException e) {
+					this.contentsOffset = startingContentsOffset;
+				} catch(ShouldNotImplement e) {
+					this.contentsOffset = startingContentsOffset;
 				}
-				attributeNumber++;
 			}
+		} else {
+			// this is a marker annotation (no member value pairs)
+			this.contents[this.contentsOffset++] = 0;
+			this.contents[this.contentsOffset++] = 0;
 		}
+	}
 
-		if (addStackMaps) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapTableAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapTableName);
-					this.contents[localContentsOffset++] = (byte) (stackMapTableAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapTableAttributeNameIndex;
-
-					int stackMapTableAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					StackMapFrame prevFrame = null;
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						prevFrame = currentFrame;
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int offsetDelta = currentFrame.getOffsetDelta(prevFrame);
-						switch (currentFrame.getFrameType(prevFrame)) {
-							case StackMapFrame.APPEND_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								int numberOfDifferentLocals = currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 + numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int index = currentFrame.getIndexOfDifferentLocals(numberOfDifferentLocals);
-								int numberOfLocals = currentFrame.getNumberOfLocals();
-								for (int i = index; i < currentFrame.locals.length && numberOfDifferentLocals > 0; i++) {
-									if (localContentsOffset + 6 >= this.contents.length) {
-										resizeContents(6);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfDifferentLocals--;
-									}
-								}
-								break;
-							case StackMapFrame.SAME_FRAME :
-								if (localContentsOffset + 1 >= this.contents.length) {
-									resizeContents(1);
-								}
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_FRAME_EXTENDED :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								this.contents[localContentsOffset++] = (byte) 251;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.CHOP_FRAME :
-								if (localContentsOffset + 3 >= this.contents.length) {
-									resizeContents(3);
-								}
-								numberOfDifferentLocals = -currentFrame.numberOfDifferentLocals(prevFrame);
-								this.contents[localContentsOffset++] = (byte) (251 - numberOfDifferentLocals);
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS :
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[localContentsOffset++] = (byte) (offsetDelta + 64);
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS_EXTENDED :
-								if (localContentsOffset + 6 >= this.contents.length) {
-									resizeContents(6);
-								}
-								this.contents[localContentsOffset++] = (byte) 247;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								if (currentFrame.stackItems[0] == null) {
-									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-								} else {
-									switch(currentFrame.stackItems[0].id()) {
-										case T_boolean :
-										case T_byte :
-										case T_char :
-										case T_int :
-										case T_short :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-											break;
-										case T_float :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-											break;
-										case T_long :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-											break;
-										case T_double :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-											break;
-										case T_null :
-											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-											break;
-										default:
-											VerificationTypeInfo info = currentFrame.stackItems[0];
-											byte tag = (byte) info.tag;
-											this.contents[localContentsOffset++] = tag;
-											switch (tag) {
-												case VerificationTypeInfo.ITEM_UNINITIALIZED :
-													int offset = info.offset;
-													this.contents[localContentsOffset++] = (byte) (offset >> 8);
-													this.contents[localContentsOffset++] = (byte) offset;
-													break;
-												case VerificationTypeInfo.ITEM_OBJECT :
-													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-													this.contents[localContentsOffset++] = (byte) indexForType;
-											}
-									}
-								}
-								break;
-							default :
-								// FULL_FRAME
-								if (localContentsOffset + 5 >= this.contents.length) {
-									resizeContents(5);
-								}
-								this.contents[localContentsOffset++] = (byte) 255;
-								this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
-								this.contents[localContentsOffset++] = (byte) offsetDelta;
-								int numberOfLocalOffset = localContentsOffset;
-								localContentsOffset += 2; // leave two spots for number of locals
-								int numberOfLocalEntries = 0;
-								numberOfLocals = currentFrame.getNumberOfLocals();
-								int numberOfEntries = 0;
-								int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-								for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.locals[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												i++;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												i++;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-										numberOfLocalEntries++;
-									}
-									numberOfEntries++;
-								}
-								if (localContentsOffset + 4 >= this.contents.length) {
-									resizeContents(4);
-								}
-								this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-								this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-								int numberOfStackItems = currentFrame.numberOfStackItems;
-								this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-								this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-								for (int i = 0; i < numberOfStackItems; i++) {
-									if (localContentsOffset + 3 >= this.contents.length) {
-										resizeContents(3);
-									}
-									VerificationTypeInfo info = currentFrame.stackItems[i];
-									if (info == null) {
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-									} else {
-										switch(info.id()) {
-											case T_boolean :
-											case T_byte :
-											case T_char :
-											case T_int :
-											case T_short :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-												break;
-											case T_float :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-												break;
-											case T_long :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-												break;
-											case T_double :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-												break;
-											case T_null :
-												this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-												break;
-											default:
-												this.contents[localContentsOffset++] = (byte) info.tag;
-												switch (info.tag) {
-													case VerificationTypeInfo.ITEM_UNINITIALIZED :
-														int offset = info.offset;
-														this.contents[localContentsOffset++] = (byte) (offset >> 8);
-														this.contents[localContentsOffset++] = (byte) offset;
-														break;
-													case VerificationTypeInfo.ITEM_OBJECT :
-														int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-														this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-														this.contents[localContentsOffset++] = (byte) indexForType;
-												}
-										}
-									}
-								}
+	private int generateAnnotationDefaultAttribute(AnnotationMethodDeclaration declaration, int attributeOffset) {
+		int attributesNumber = 0;
+		// add an annotation default attribute
+		int annotationDefaultNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.AnnotationDefaultName);
+		if (this.contentsOffset + 6 >= this.contents.length) {
+			resizeContents(6);
+		}
+		this.contents[this.contentsOffset++] = (byte) (annotationDefaultNameIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) annotationDefaultNameIndex;
+		int attributeLengthOffset = this.contentsOffset;
+		this.contentsOffset += 4;
+		generateElementValue(declaration.defaultValue, declaration.binding.returnType, attributeOffset);
+		if (this.contentsOffset != attributeOffset) {
+			int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
+			this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
+			this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
+			this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
+			this.contents[attributeLengthOffset++] = (byte) attributeLength;
+			attributesNumber++;
+		}
+		return attributesNumber;
+	}
+	/**
+	 * INTERNAL USE-ONLY
+	 * That method generates the header of a code attribute.
+	 * - the index inside the constant pool for the attribute name ("Code")
+	 * - leave some space for attribute_length(4), max_stack(2), max_locals(2), code_length(4).
+	 */
+	public void generateCodeAttributeHeader() {
+		if (this.contentsOffset + 20 >= this.contents.length) {
+			resizeContents(20);
+		}
+		int constantValueNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.CodeName);
+		this.contents[this.contentsOffset++] = (byte) (constantValueNameIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) constantValueNameIndex;
+		// leave space for attribute_length(4), max_stack(2), max_locals(2), code_length(4)
+		this.contentsOffset += 12;
+	}
+	
+	private int generateConstantValueAttribute(Constant fieldConstant, FieldBinding fieldBinding, int fieldAttributeOffset) {
+		int localContentsOffset = this.contentsOffset;
+		int attributesNumber = 1;
+		if (localContentsOffset + 8 >= this.contents.length) {
+			resizeContents(8);
+		}
+		// Now we generate the constant attribute corresponding to the fieldBinding
+		int constantValueNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.ConstantValueName);
+		this.contents[localContentsOffset++] = (byte) (constantValueNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) constantValueNameIndex;
+		// The attribute length = 2 in case of a constantValue attribute
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 2;
+		// Need to add the constant_value_index
+		switch (fieldConstant.typeID()) {
+			case T_boolean :
+				int booleanValueIndex =
+					this.constantPool.literalIndex(fieldConstant.booleanValue() ? 1 : 0);
+				this.contents[localContentsOffset++] = (byte) (booleanValueIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) booleanValueIndex;
+				break;
+			case T_byte :
+			case T_char :
+			case T_int :
+			case T_short :
+				int integerValueIndex =
+					this.constantPool.literalIndex(fieldConstant.intValue());
+				this.contents[localContentsOffset++] = (byte) (integerValueIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) integerValueIndex;
+				break;
+			case T_float :
+				int floatValueIndex =
+					this.constantPool.literalIndex(fieldConstant.floatValue());
+				this.contents[localContentsOffset++] = (byte) (floatValueIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) floatValueIndex;
+				break;
+			case T_double :
+				int doubleValueIndex =
+					this.constantPool.literalIndex(fieldConstant.doubleValue());
+				this.contents[localContentsOffset++] = (byte) (doubleValueIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) doubleValueIndex;
+				break;
+			case T_long :
+				int longValueIndex =
+					this.constantPool.literalIndex(fieldConstant.longValue());
+				this.contents[localContentsOffset++] = (byte) (longValueIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) longValueIndex;
+				break;
+			case T_JavaLangString :
+				int stringValueIndex =
+					this.constantPool.literalIndex(
+						((StringConstant) fieldConstant).stringValue());
+				if (stringValueIndex == -1) {
+					if (!this.creatingProblemType) {
+						// report an error and abort: will lead to a problem type classfile creation
+						TypeDeclaration typeDeclaration = this.referenceBinding.scope.referenceContext;
+						FieldDeclaration[] fieldDecls = typeDeclaration.fields;
+						int max = fieldDecls == null ? 0 : fieldDecls.length;
+						for (int i = 0; i < max; i++) {
+							if (fieldDecls[i].binding == fieldBinding) {
+								// problem should abort
+								typeDeclaration.scope.problemReporter().stringConstantIsExceedingUtf8Limit(
+									fieldDecls[i]);
+							}
 						}
-					}
-
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapTableAttributeLengthOffset - 4;
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapTableAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
 					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
+						// already inside a problem type creation : no constant for this field
+						this.contentsOffset = fieldAttributeOffset;
+						attributesNumber = 0;
 					}
+				} else {
+					this.contents[localContentsOffset++] = (byte) (stringValueIndex >> 8);
+					this.contents[localContentsOffset++] = (byte) stringValueIndex;
+				}
+		}
+		this.contentsOffset = localContentsOffset;
+		return attributesNumber;
+	}
+	private int generateDeprecatedAttribute() {
+		int localContentsOffset = this.contentsOffset;
+		if (localContentsOffset + 6 >= this.contents.length) {
+			resizeContents(6);
+		}
+		int deprecatedAttributeNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.DeprecatedName);
+		this.contents[localContentsOffset++] = (byte) (deprecatedAttributeNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) deprecatedAttributeNameIndex;
+		// the length of a deprecated attribute is equals to 0
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contentsOffset = localContentsOffset;
+		return 1;
+	}
+	private void generateElementValue(
+			Expression defaultValue,
+			TypeBinding memberValuePairReturnType,
+			int attributeOffset) {
+		Constant constant = defaultValue.constant;
+		TypeBinding defaultValueBinding = defaultValue.resolvedType;
+		if (defaultValueBinding == null) {
+			this.contentsOffset = attributeOffset;
+		} else {
+			if (memberValuePairReturnType.isArrayType() && !defaultValueBinding.isArrayType()) {
+				// automatic wrapping
+				if (this.contentsOffset + 3 >= this.contents.length) {
+					resizeContents(3);
 				}
+				this.contents[this.contentsOffset++] = (byte) '[';
+				this.contents[this.contentsOffset++] = (byte) 0;
+				this.contents[this.contentsOffset++] = (byte) 1;
+			}
+			if (constant != null && constant != Constant.NotAConstant) {
+				generateElementValue(attributeOffset, defaultValue, constant, memberValuePairReturnType.leafComponentType());
+			} else {
+				generateElementValueForNonConstantExpression(defaultValue, attributeOffset, defaultValueBinding);
 			}
 		}
-
-		if ((this.produceAttributes & ClassFileConstants.ATTR_STACK_MAP) != 0) {
-			StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
-			stackMapFrameCodeStream.removeFramePosition(code_length);
-			if (stackMapFrameCodeStream.hasFramePositions()) {
-				ArrayList frames = new ArrayList();
-				traverse(this.codeStream.methodDeclaration.binding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, false);
-				int numberOfFrames = frames.size();
-				if (numberOfFrames > 1) {
-					int stackMapTableAttributeOffset = localContentsOffset;
-					// add the stack map table attribute
-					if (localContentsOffset + 8 >= this.contents.length) {
-						resizeContents(8);
-					}
-					int stackMapAttributeNameIndex =
-						this.constantPool.literalIndex(AttributeNamesConstants.StackMapName);
-					this.contents[localContentsOffset++] = (byte) (stackMapAttributeNameIndex >> 8);
-					this.contents[localContentsOffset++] = (byte) stackMapAttributeNameIndex;
-
-					int stackMapAttributeLengthOffset = localContentsOffset;
-					// generate the attribute
-					localContentsOffset += 4;
-					if (localContentsOffset + 4 >= this.contents.length) {
-						resizeContents(4);
-					}
-					int numberOfFramesOffset = localContentsOffset;
-					localContentsOffset += 2;
-					if (localContentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
+	}
+	/**
+	 * @param attributeOffset
+	 */
+	private void generateElementValue(int attributeOffset, Expression defaultValue, Constant constant, TypeBinding binding) {
+		if (this.contentsOffset + 3 >= this.contents.length) {
+			resizeContents(3);
+		}
+		switch (binding.id) {
+			case T_boolean :
+				this.contents[this.contentsOffset++] = (byte) 'Z';
+				int booleanValueIndex =
+					this.constantPool.literalIndex(constant.booleanValue() ? 1 : 0);
+				this.contents[this.contentsOffset++] = (byte) (booleanValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) booleanValueIndex;
+				break;
+			case T_byte :
+				this.contents[this.contentsOffset++] = (byte) 'B';
+				int integerValueIndex =
+					this.constantPool.literalIndex(constant.intValue());
+				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
+				break;
+			case T_char :
+				this.contents[this.contentsOffset++] = (byte) 'C';
+				integerValueIndex =
+					this.constantPool.literalIndex(constant.intValue());
+				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
+				break;
+			case T_int :
+				this.contents[this.contentsOffset++] = (byte) 'I';
+				integerValueIndex =
+					this.constantPool.literalIndex(constant.intValue());
+				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
+				break;
+			case T_short :
+				this.contents[this.contentsOffset++] = (byte) 'S';
+				integerValueIndex =
+					this.constantPool.literalIndex(constant.intValue());
+				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
+				break;
+			case T_float :
+				this.contents[this.contentsOffset++] = (byte) 'F';
+				int floatValueIndex =
+					this.constantPool.literalIndex(constant.floatValue());
+				this.contents[this.contentsOffset++] = (byte) (floatValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) floatValueIndex;
+				break;
+			case T_double :
+				this.contents[this.contentsOffset++] = (byte) 'D';
+				int doubleValueIndex =
+					this.constantPool.literalIndex(constant.doubleValue());
+				this.contents[this.contentsOffset++] = (byte) (doubleValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) doubleValueIndex;
+				break;
+			case T_long :
+				this.contents[this.contentsOffset++] = (byte) 'J';
+				int longValueIndex =
+					this.constantPool.literalIndex(constant.longValue());
+				this.contents[this.contentsOffset++] = (byte) (longValueIndex >> 8);
+				this.contents[this.contentsOffset++] = (byte) longValueIndex;
+				break;
+			case T_JavaLangString :
+				this.contents[this.contentsOffset++] = (byte) 's';
+				int stringValueIndex =
+					this.constantPool.literalIndex(((StringConstant) constant).stringValue().toCharArray());
+				if (stringValueIndex == -1) {
+					if (!this.creatingProblemType) {
+						// report an error and abort: will lead to a problem type classfile creation
+						TypeDeclaration typeDeclaration = this.referenceBinding.scope.referenceContext;
+						typeDeclaration.scope.problemReporter().stringConstantIsExceedingUtf8Limit(defaultValue);
+					} else {
+						// already inside a problem type creation : no attribute
+						this.contentsOffset = attributeOffset;
 					}
-					StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
-					for (int j = 1; j < numberOfFrames; j++) {
-						// select next frame
-						currentFrame = (StackMapFrame) frames.get(j);
-						// generate current frame
-						// need to find differences between the current frame and the previous frame
-						int frameOffset = currentFrame.pc;
-						// FULL_FRAME
-						if (localContentsOffset + 5 >= this.contents.length) {
-							resizeContents(5);
-						}
-						this.contents[localContentsOffset++] = (byte) (frameOffset >> 8);
-						this.contents[localContentsOffset++] = (byte) frameOffset;
-						int numberOfLocalOffset = localContentsOffset;
-						localContentsOffset += 2; // leave two spots for number of locals
-						int numberOfLocalEntries = 0;
-						int numberOfLocals = currentFrame.getNumberOfLocals();
-						int numberOfEntries = 0;
-						int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
-						for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.locals[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										i++;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										i++;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-								numberOfLocalEntries++;
-							}
-							numberOfEntries++;
-						}
-						if (localContentsOffset + 4 >= this.contents.length) {
-							resizeContents(4);
-						}
-						this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
-						this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
-						int numberOfStackItems = currentFrame.numberOfStackItems;
-						this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
-						this.contents[localContentsOffset++] = (byte) numberOfStackItems;
-						for (int i = 0; i < numberOfStackItems; i++) {
-							if (localContentsOffset + 3 >= this.contents.length) {
-								resizeContents(3);
-							}
-							VerificationTypeInfo info = currentFrame.stackItems[i];
-							if (info == null) {
-								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
-							} else {
-								switch(info.id()) {
-									case T_boolean :
-									case T_byte :
-									case T_char :
-									case T_int :
-									case T_short :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
-										break;
-									case T_float :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
-										break;
-									case T_long :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
-										break;
-									case T_double :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
-										break;
-									case T_null :
-										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
-										break;
-									default:
-										this.contents[localContentsOffset++] = (byte) info.tag;
-									switch (info.tag) {
-										case VerificationTypeInfo.ITEM_UNINITIALIZED :
-											int offset = info.offset;
-											this.contents[localContentsOffset++] = (byte) (offset >> 8);
-											this.contents[localContentsOffset++] = (byte) offset;
-											break;
-										case VerificationTypeInfo.ITEM_OBJECT :
-											int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
-											this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
-											this.contents[localContentsOffset++] = (byte) indexForType;
-									}
-								}
-							}
-						}
+				} else {
+					this.contents[this.contentsOffset++] = (byte) (stringValueIndex >> 8);
+					this.contents[this.contentsOffset++] = (byte) stringValueIndex;
+				}
+		}
+	}
+	
+	private void generateElementValueForNonConstantExpression(Expression defaultValue, int attributeOffset, TypeBinding defaultValueBinding) {
+		if (defaultValueBinding != null) {
+			if (defaultValueBinding.isEnum()) {
+				if (this.contentsOffset + 5 >= this.contents.length) {
+					resizeContents(5);
+				}
+				this.contents[this.contentsOffset++] = (byte) 'e';
+				FieldBinding fieldBinding = null;
+				if (defaultValue instanceof QualifiedNameReference) {
+					QualifiedNameReference nameReference = (QualifiedNameReference) defaultValue;
+					fieldBinding = (FieldBinding) nameReference.binding;
+				} else if (defaultValue instanceof SingleNameReference) {
+					SingleNameReference nameReference = (SingleNameReference) defaultValue;
+					fieldBinding = (FieldBinding) nameReference.binding;
+				} else {
+					this.contentsOffset = attributeOffset;
+				}
+				if (fieldBinding != null) {
+					final int enumConstantTypeNameIndex = this.constantPool.literalIndex(fieldBinding.type.signature());
+					final int enumConstantNameIndex = this.constantPool.literalIndex(fieldBinding.name);
+					this.contents[this.contentsOffset++] = (byte) (enumConstantTypeNameIndex >> 8);
+					this.contents[this.contentsOffset++] = (byte) enumConstantTypeNameIndex;
+					this.contents[this.contentsOffset++] = (byte) (enumConstantNameIndex >> 8);
+					this.contents[this.contentsOffset++] = (byte) enumConstantNameIndex;
+				}
+			} else if (defaultValueBinding.isAnnotationType()) {
+				if (this.contentsOffset + 1 >= this.contents.length) {
+					resizeContents(1);
+				}
+				this.contents[this.contentsOffset++] = (byte) '@';
+				generateAnnotation((Annotation) defaultValue, attributeOffset);
+			} else if (defaultValueBinding.isArrayType()) {
+				// array type
+				if (this.contentsOffset + 3 >= this.contents.length) {
+					resizeContents(3);
+				}
+				this.contents[this.contentsOffset++] = (byte) '[';
+				if (defaultValue instanceof ArrayInitializer) {
+					ArrayInitializer arrayInitializer = (ArrayInitializer) defaultValue;
+					int arrayLength = arrayInitializer.expressions != null ? arrayInitializer.expressions.length : 0;
+					this.contents[this.contentsOffset++] = (byte) (arrayLength >> 8);
+					this.contents[this.contentsOffset++] = (byte) arrayLength;
+					for (int i = 0; i < arrayLength; i++) {
+						generateElementValue(arrayInitializer.expressions[i], defaultValueBinding.leafComponentType(), attributeOffset);
 					}
+				} else {
+					this.contentsOffset = attributeOffset;
+				}
+			} else {
+				// class type
+				if (this.contentsOffset + 3 >= this.contents.length) {
+					resizeContents(3);
+				}
+				this.contents[this.contentsOffset++] = (byte) 'c';
+				if (defaultValue instanceof ClassLiteralAccess) {
+					ClassLiteralAccess classLiteralAccess = (ClassLiteralAccess) defaultValue;
+					final int classInfoIndex = this.constantPool.literalIndex(classLiteralAccess.targetType.signature());
+					this.contents[this.contentsOffset++] = (byte) (classInfoIndex >> 8);
+					this.contents[this.contentsOffset++] = (byte) classInfoIndex;
+				} else {
+					this.contentsOffset = attributeOffset;
+				}
+			}
+		} else {
+			this.contentsOffset = attributeOffset;
+		}
+	}
+
+	private int generateEnclosingMethodAttribute() {
+		int localContentsOffset = this.contentsOffset;
+		// add enclosing method attribute (1.5 mode only)
+		if (localContentsOffset + 10 >= this.contents.length) {
+			resizeContents(10);
+		}
+		int enclosingMethodAttributeNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.EnclosingMethodName);
+		this.contents[localContentsOffset++] = (byte) (enclosingMethodAttributeNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) enclosingMethodAttributeNameIndex;
+		// the length of a signature attribute is equals to 2
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 4;
+
+		int enclosingTypeIndex = this.constantPool.literalIndexForType(this.referenceBinding.enclosingType().constantPoolName());
+		this.contents[localContentsOffset++] = (byte) (enclosingTypeIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) enclosingTypeIndex;
+		byte methodIndexByte1 = 0;
+		byte methodIndexByte2 = 0;
+		if (this.referenceBinding instanceof LocalTypeBinding) {
+			MethodBinding methodBinding = ((LocalTypeBinding) this.referenceBinding).enclosingMethod;
+			if (methodBinding != null) {
+				int enclosingMethodIndex = this.constantPool.literalIndexForNameAndType(methodBinding.selector, methodBinding.signature(this));
+				methodIndexByte1 = (byte) (enclosingMethodIndex >> 8);
+				methodIndexByte2 = (byte) enclosingMethodIndex;
+			}
+		}
+		this.contents[localContentsOffset++] = methodIndexByte1;
+		this.contents[localContentsOffset++] = methodIndexByte2;
+		this.contentsOffset = localContentsOffset;
+		return 1;
+	}
+	private int generateExceptionsAttribute(ReferenceBinding[] thrownsExceptions) {
+		int localContentsOffset = this.contentsOffset;
+		int length = thrownsExceptions.length;
+		int exSize = 8 + length * 2;
+		if (exSize + this.contentsOffset >= this.contents.length) {
+			resizeContents(exSize);
+		}
+		int exceptionNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.ExceptionsName);
+		this.contents[localContentsOffset++] = (byte) (exceptionNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) exceptionNameIndex;
+		// The attribute length = length * 2 + 2 in case of a exception attribute
+		int attributeLength = length * 2 + 2;
+		this.contents[localContentsOffset++] = (byte) (attributeLength >> 24);
+		this.contents[localContentsOffset++] = (byte) (attributeLength >> 16);
+		this.contents[localContentsOffset++] = (byte) (attributeLength >> 8);
+		this.contents[localContentsOffset++] = (byte) attributeLength;
+		this.contents[localContentsOffset++] = (byte) (length >> 8);
+		this.contents[localContentsOffset++] = (byte) length;
+		for (int i = 0; i < length; i++) {
+			int exceptionIndex = this.constantPool.literalIndexForType(thrownsExceptions[i]);
+			this.contents[localContentsOffset++] = (byte) (exceptionIndex >> 8);
+			this.contents[localContentsOffset++] = (byte) exceptionIndex;
+		}
+		this.contentsOffset = localContentsOffset;
+		return 1;
+	}
+	private int generateHierarchyInconsistentAttribute() {
+		int localContentsOffset = this.contentsOffset;
+		// add an attribute for inconsistent hierarchy
+		if (localContentsOffset + 6 >= this.contents.length) {
+			resizeContents(6);
+		}
+		int inconsistentHierarchyNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.InconsistentHierarchy);
+		this.contents[localContentsOffset++] = (byte) (inconsistentHierarchyNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) inconsistentHierarchyNameIndex;
+		// the length of an inconsistent hierarchy attribute is equals to 0
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contentsOffset = localContentsOffset;
+		return 1;
+	}
+	private int generateInnerClassAttribute(int numberOfInnerClasses, ReferenceBinding[] innerClasses) {
+		int localContentsOffset = this.contentsOffset;
+		// Generate the inner class attribute
+		int exSize = 8 * numberOfInnerClasses + 8;
+		if (exSize + localContentsOffset >= this.contents.length) {
+			resizeContents(exSize);
+		}
+		// Now we now the size of the attribute and the number of entries
+		// attribute name
+		int attributeNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.InnerClassName);
+		this.contents[localContentsOffset++] = (byte) (attributeNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) attributeNameIndex;
+		int value = (numberOfInnerClasses << 3) + 2;
+		this.contents[localContentsOffset++] = (byte) (value >> 24);
+		this.contents[localContentsOffset++] = (byte) (value >> 16);
+		this.contents[localContentsOffset++] = (byte) (value >> 8);
+		this.contents[localContentsOffset++] = (byte) value;
+		this.contents[localContentsOffset++] = (byte) (numberOfInnerClasses >> 8);
+		this.contents[localContentsOffset++] = (byte) numberOfInnerClasses;
+		for (int i = 0; i < numberOfInnerClasses; i++) {
+			ReferenceBinding innerClass = innerClasses[i];
+			int accessFlags = innerClass.getAccessFlags();
+			int innerClassIndex = this.constantPool.literalIndexForType(innerClass.constantPoolName());
+			// inner class index
+			this.contents[localContentsOffset++] = (byte) (innerClassIndex >> 8);
+			this.contents[localContentsOffset++] = (byte) innerClassIndex;
+			// outer class index: anonymous and local have no outer class index
+			if (innerClass.isMemberType()) {
+				// member or member of local
+				int outerClassIndex = this.constantPool.literalIndexForType(innerClass.enclosingType().constantPoolName());
+				this.contents[localContentsOffset++] = (byte) (outerClassIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) outerClassIndex;
+			} else {
+				// equals to 0 if the innerClass is not a member type
+				this.contents[localContentsOffset++] = 0;
+				this.contents[localContentsOffset++] = 0;
+			}
+			// name index
+			if (!innerClass.isAnonymousType()) {
+				int nameIndex = this.constantPool.literalIndex(innerClass.sourceName());
+				this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) nameIndex;
+			} else {
+				// equals to 0 if the innerClass is an anonymous type
+				this.contents[localContentsOffset++] = 0;
+				this.contents[localContentsOffset++] = 0;
+			}
+			// access flag
+			if (innerClass.isAnonymousType()) {
+				accessFlags &= ~ClassFileConstants.AccFinal;
+			} else if (innerClass.isMemberType() && innerClass.isInterface()) {
+				accessFlags |= ClassFileConstants.AccStatic; // implicitely static
+			}
+			this.contents[localContentsOffset++] = (byte) (accessFlags >> 8);
+			this.contents[localContentsOffset++] = (byte) accessFlags;
+		}
+		this.contentsOffset = localContentsOffset;
+		return 1;
+	}
+	private int generateLineNumberAttribute() {
+		int localContentsOffset = this.contentsOffset;
+		int attributesNumber = 0;
+		/* Create and add the line number attribute (used for debugging)
+		 * Build the pairs of:
+		 * 	(bytecodePC lineNumber)
+		 * according to the table of start line indexes and the pcToSourceMap table
+		 * contained into the codestream
+		 */
+		int[] pcToSourceMapTable;
+		if (((pcToSourceMapTable = this.codeStream.pcToSourceMap) != null)
+			&& (this.codeStream.pcToSourceMapSize != 0)) {
+			int lineNumberNameIndex =
+				this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
+			if (localContentsOffset + 8 >= this.contents.length) {
+				resizeContents(8);
+			}
+			this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
+			this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
+			int lineNumberTableOffset = localContentsOffset;
+			localContentsOffset += 6;
+			// leave space for attribute_length and line_number_table_length
+			int numberOfEntries = 0;
+			int length = this.codeStream.pcToSourceMapSize;
+			for (int i = 0; i < length;) {
+				// write the entry
+				if (localContentsOffset + 4 >= this.contents.length) {
+					resizeContents(4);
+				}
+				int pc = pcToSourceMapTable[i++];
+				this.contents[localContentsOffset++] = (byte) (pc >> 8);
+				this.contents[localContentsOffset++] = (byte) pc;
+				int lineNumber = pcToSourceMapTable[i++];
+				this.contents[localContentsOffset++] = (byte) (lineNumber >> 8);
+				this.contents[localContentsOffset++] = (byte) lineNumber;
+				numberOfEntries++;
+			}
+			// now we change the size of the line number attribute
+			int lineNumberAttr_length = numberOfEntries * 4 + 2;
+			this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 24);
+			this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 16);
+			this.contents[lineNumberTableOffset++] = (byte) (lineNumberAttr_length >> 8);
+			this.contents[lineNumberTableOffset++] = (byte) lineNumberAttr_length;
+			this.contents[lineNumberTableOffset++] = (byte) (numberOfEntries >> 8);
+			this.contents[lineNumberTableOffset++] = (byte) numberOfEntries;
+			attributesNumber = 1;
+		}
+		this.contentsOffset = localContentsOffset;
+		return attributesNumber;
+	}
+	// this is used for problem and synthetic methods
+	private int generateLineNumberAttribute(int problemLine) {
+		int localContentsOffset = this.contentsOffset;
+		if (localContentsOffset + 12 >= this.contents.length) {
+			resizeContents(12);
+		}
+		/* Create and add the line number attribute (used for debugging)
+		 * Build the pairs of:
+		 * (bytecodePC lineNumber)
+		 * according to the table of start line indexes and the pcToSourceMap table
+		 * contained into the codestream
+		 */
+		int lineNumberNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.LineNumberTableName);
+		this.contents[localContentsOffset++] = (byte) (lineNumberNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) lineNumberNameIndex;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 6;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 1;
+		// first entry at pc = 0
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = (byte) (problemLine >> 8);
+		this.contents[localContentsOffset++] = (byte) problemLine;
+		// now we change the size of the line number attribute
+		this.contentsOffset = localContentsOffset;
+		return 1;
+	}
+	
+	private int generateLocalVariableTableAttribute(int code_length, boolean methodDeclarationIsStatic, boolean isSynthetic) {
+		int attributesNumber = 0;
+		int localContentsOffset = this.contentsOffset;
+		int numberOfEntries = 0;
+		int localVariableNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTableName);
+		int maxOfEntries = 8 + 10 * (methodDeclarationIsStatic ? 0 : 1);
+		for (int i = 0; i < this.codeStream.allLocalsCounter; i++) {
+			LocalVariableBinding localVariableBinding = this.codeStream.locals[i];
+			maxOfEntries += 10 * localVariableBinding.initializationCount;
+		}
+		// reserve enough space
+		if (localContentsOffset + maxOfEntries >= this.contents.length) {
+			resizeContents(maxOfEntries);
+		}
+		this.contents[localContentsOffset++] = (byte) (localVariableNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) localVariableNameIndex;
+		int localVariableTableOffset = localContentsOffset;
+		// leave space for attribute_length and local_variable_table_length
+		localContentsOffset += 6;
+		int nameIndex;
+		int descriptorIndex;
+		SourceTypeBinding declaringClassBinding = null;
+		if (!methodDeclarationIsStatic && !isSynthetic) {
+			numberOfEntries++;
+			this.contents[localContentsOffset++] = 0; // the startPC for this is always 0
+			this.contents[localContentsOffset++] = 0;
+			this.contents[localContentsOffset++] = (byte) (code_length >> 8);
+			this.contents[localContentsOffset++] = (byte) code_length;
+			nameIndex = this.constantPool.literalIndex(ConstantPool.This);
+			this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
+			this.contents[localContentsOffset++] = (byte) nameIndex;
+			declaringClassBinding = (SourceTypeBinding) this.codeStream.methodDeclaration.binding.declaringClass;
+			descriptorIndex =
+				this.constantPool.literalIndex(
+					declaringClassBinding.signature());
+			this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
+			this.contents[localContentsOffset++] = (byte) descriptorIndex;
+			this.contents[localContentsOffset++] = 0;// the resolved position for this is always 0
+			this.contents[localContentsOffset++] = 0;
+		}
+		// used to remember the local variable with a generic type
+		int genericLocalVariablesCounter = 0;
+		LocalVariableBinding[] genericLocalVariables = null;
+		int numberOfGenericEntries = 0;
 
-					numberOfFrames--;
-					if (numberOfFrames != 0) {
-						this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
-						this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
-
-						int attributeLength = localContentsOffset - stackMapAttributeLengthOffset - 4;
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 24);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 16);
-						this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 8);
-						this.contents[stackMapAttributeLengthOffset] = (byte) attributeLength;
-						attributeNumber++;
-					} else {
-						localContentsOffset = stackMapTableAttributeOffset;
+		for (int i = 0, max = this.codeStream.allLocalsCounter; i < max; i++) {
+			LocalVariableBinding localVariable = this.codeStream.locals[i];
+			int initializationCount = localVariable.initializationCount;
+			if (initializationCount == 0) continue;
+			if (localVariable.declaration == null) continue;
+			final TypeBinding localVariableTypeBinding = localVariable.type;
+			boolean isParameterizedType = localVariableTypeBinding.isParameterizedType() || localVariableTypeBinding.isTypeVariable();
+			if (isParameterizedType) {
+				if (genericLocalVariables == null) {
+					// we cannot have more than max locals
+					genericLocalVariables = new LocalVariableBinding[max];
+				}
+				genericLocalVariables[genericLocalVariablesCounter++] = localVariable;
+			}
+			for (int j = 0; j < initializationCount; j++) {
+				int startPC = localVariable.initializationPCs[j << 1];
+				int endPC = localVariable.initializationPCs[(j << 1) + 1];
+				if (startPC != endPC) { // only entries for non zero length
+					if (endPC == -1) {
+						localVariable.declaringScope.problemReporter().abortDueToInternalError(
+								Messages.bind(Messages.abort_invalidAttribute, new String(localVariable.name)),
+								(ASTNode) localVariable.declaringScope.methodScope().referenceContext);
+					}
+					if (isParameterizedType) {
+						numberOfGenericEntries++;
 					}
+					// now we can safely add the local entry
+					numberOfEntries++;
+					this.contents[localContentsOffset++] = (byte) (startPC >> 8);
+					this.contents[localContentsOffset++] = (byte) startPC;
+					int length = endPC - startPC;
+					this.contents[localContentsOffset++] = (byte) (length >> 8);
+					this.contents[localContentsOffset++] = (byte) length;
+					nameIndex = this.constantPool.literalIndex(localVariable.name);
+					this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
+					this.contents[localContentsOffset++] = (byte) nameIndex;
+					descriptorIndex = this.constantPool.literalIndex(localVariableTypeBinding.signature());
+					this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
+					this.contents[localContentsOffset++] = (byte) descriptorIndex;
+					int resolvedPosition = localVariable.resolvedPosition;
+					this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
+					this.contents[localContentsOffset++] = (byte) resolvedPosition;
 				}
 			}
 		}
+		int value = numberOfEntries * 10 + 2;
+		this.contents[localVariableTableOffset++] = (byte) (value >> 24);
+		this.contents[localVariableTableOffset++] = (byte) (value >> 16);
+		this.contents[localVariableTableOffset++] = (byte) (value >> 8);
+		this.contents[localVariableTableOffset++] = (byte) value;
+		this.contents[localVariableTableOffset++] = (byte) (numberOfEntries >> 8);
+		this.contents[localVariableTableOffset] = (byte) numberOfEntries;
+		attributesNumber++;
+
+		final boolean currentInstanceIsGeneric =
+			!methodDeclarationIsStatic
+			&& declaringClassBinding != null
+			&& declaringClassBinding.typeVariables != Binding.NO_TYPE_VARIABLES;
+		if (genericLocalVariablesCounter != 0 || currentInstanceIsGeneric) {
+			// add the local variable type table attribute
+			numberOfGenericEntries += (currentInstanceIsGeneric ? 1 : 0);
+			maxOfEntries = 8 + numberOfGenericEntries * 10;
+			// reserve enough space
+			if (localContentsOffset + maxOfEntries >= this.contents.length) {
+				resizeContents(maxOfEntries);
+			}
+			int localVariableTypeNameIndex =
+				this.constantPool.literalIndex(AttributeNamesConstants.LocalVariableTypeTableName);
+			this.contents[localContentsOffset++] = (byte) (localVariableTypeNameIndex >> 8);
+			this.contents[localContentsOffset++] = (byte) localVariableTypeNameIndex;
+			value = numberOfGenericEntries * 10 + 2;
+			this.contents[localContentsOffset++] = (byte) (value >> 24);
+			this.contents[localContentsOffset++] = (byte) (value >> 16);
+			this.contents[localContentsOffset++] = (byte) (value >> 8);
+			this.contents[localContentsOffset++] = (byte) value;
+			this.contents[localContentsOffset++] = (byte) (numberOfGenericEntries >> 8);
+			this.contents[localContentsOffset++] = (byte) numberOfGenericEntries;
+			if (currentInstanceIsGeneric) {
+				this.contents[localContentsOffset++] = 0; // the startPC for this is always 0
+				this.contents[localContentsOffset++] = 0;
+				this.contents[localContentsOffset++] = (byte) (code_length >> 8);
+				this.contents[localContentsOffset++] = (byte) code_length;
+				nameIndex = this.constantPool.literalIndex(ConstantPool.This);
+				this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) nameIndex;
+				descriptorIndex = this.constantPool.literalIndex(declaringClassBinding.genericTypeSignature());
+				this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) descriptorIndex;
+				this.contents[localContentsOffset++] = 0;// the resolved position for this is always 0
+				this.contents[localContentsOffset++] = 0;
+			}
 
-		// update the number of attributes
-		// ensure first that there is enough space available inside the contents array
-		if (codeAttributeAttributeOffset + 2 >= this.contents.length) {
-			resizeContents(2);
+			for (int i = 0; i < genericLocalVariablesCounter; i++) {
+				LocalVariableBinding localVariable = genericLocalVariables[i];
+				for (int j = 0; j < localVariable.initializationCount; j++) {
+					int startPC = localVariable.initializationPCs[j << 1];
+					int endPC = localVariable.initializationPCs[(j << 1) + 1];
+					if (startPC != endPC) {
+						// only entries for non zero length
+						// now we can safely add the local entry
+						this.contents[localContentsOffset++] = (byte) (startPC >> 8);
+						this.contents[localContentsOffset++] = (byte) startPC;
+						int length = endPC - startPC;
+						this.contents[localContentsOffset++] = (byte) (length >> 8);
+						this.contents[localContentsOffset++] = (byte) length;
+						nameIndex = this.constantPool.literalIndex(localVariable.name);
+						this.contents[localContentsOffset++] = (byte) (nameIndex >> 8);
+						this.contents[localContentsOffset++] = (byte) nameIndex;
+						descriptorIndex = this.constantPool.literalIndex(localVariable.type.genericTypeSignature());
+						this.contents[localContentsOffset++] = (byte) (descriptorIndex >> 8);
+						this.contents[localContentsOffset++] = (byte) descriptorIndex;
+						int resolvedPosition = localVariable.resolvedPosition;
+						this.contents[localContentsOffset++] = (byte) (resolvedPosition >> 8);
+						this.contents[localContentsOffset++] = (byte) resolvedPosition;
+					}
+				}
+			}
+			attributesNumber++;
 		}
-		this.contents[codeAttributeAttributeOffset++] = (byte) (attributeNumber >> 8);
-		this.contents[codeAttributeAttributeOffset] = (byte) attributeNumber;
-
-		// update the attribute length
-		int codeAttributeLength = localContentsOffset - (codeAttributeOffset + 6);
-		this.contents[codeAttributeOffset + 2] = (byte) (codeAttributeLength >> 24);
-		this.contents[codeAttributeOffset + 3] = (byte) (codeAttributeLength >> 16);
-		this.contents[codeAttributeOffset + 4] = (byte) (codeAttributeLength >> 8);
-		this.contents[codeAttributeOffset + 5] = (byte) codeAttributeLength;
 		this.contentsOffset = localContentsOffset;
+		return attributesNumber;
 	}
-
-	/**
-	 * INTERNAL USE-ONLY
-	 * That method completes the creation of the code attribute by setting
-	 * - the attribute_length
-	 * - max_stack
-	 * - max_locals
-	 * - code_length
-	 * - exception table
-	 * - and debug attributes if necessary.
-	 *
-	 * @param binding org.eclipse.jdt.internal.compiler.lookup.SyntheticAccessMethodBinding
-	 * @param codeAttributeOffset <CODE>int</CODE>
-	 */
-	public void completeCodeAttributeForSyntheticMethod(
-		SyntheticMethodBinding binding,
-		int codeAttributeOffset,
-		int[] startLineIndexes) {
-
-		this.completeCodeAttributeForSyntheticMethod(
-				false,
-				binding,
-				codeAttributeOffset,
-				startLineIndexes);
-	}
-
 	/**
 	 * INTERNAL USE-ONLY
-	 * Complete the creation of a method info by setting up the number of attributes at the right offset.
+	 * That method generates the attributes of a code attribute.
+	 * They could be:
+	 * - an exception attribute for each try/catch found inside the method
+	 * - a deprecated attribute
+	 * - a synthetic attribute for synthetic access methods
 	 *
-	 * @param methodAttributeOffset <CODE>int</CODE>
-	 * @param attributeNumber <CODE>int</CODE>
-	 */
-	public void completeMethodInfo(
-		int methodAttributeOffset,
-		int attributeNumber) {
-		// update the number of attributes
-		this.contents[methodAttributeOffset++] = (byte) (attributeNumber >> 8);
-		this.contents[methodAttributeOffset] = (byte) attributeNumber;
-	}
-
-	/**
-	 * INTERNAL USE-ONLY
-	 * This methods returns a char[] representing the file name of the receiver
+	 * It returns the number of attributes created for the code attribute.
 	 *
-	 * @return char[]
+	 * @param methodBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
+	 * @return <CODE>int</CODE>
 	 */
-	public char[] fileName() {
-		return this.constantPool.UTF8Cache.returnKeyFor(2);
-	}
+	public int generateMethodInfoAttributes(MethodBinding methodBinding) {
+		// leave two bytes for the attribute_number
+		this.contentsOffset += 2;
+		if (this.contentsOffset + 2 >= this.contents.length) {
+			resizeContents(2);
+		}
+		// now we can handle all the attribute for that method info:
+		// it could be:
+		// - a CodeAttribute
+		// - a ExceptionAttribute
+		// - a DeprecatedAttribute
+		// - a SyntheticAttribute
 
-	private void generateAnnotation(Annotation annotation, int currentOffset) {
-		int startingContentsOffset = currentOffset;
-		if (this.contentsOffset + 4 >= this.contents.length) {
-			resizeContents(4);
+		// Exception attribute
+		ReferenceBinding[] thrownsExceptions;
+		int attributesNumber = 0;
+		if ((thrownsExceptions = methodBinding.thrownExceptions) != Binding.NO_EXCEPTIONS) {
+			// The method has a throw clause. So we need to add an exception attribute
+			// check that there is enough space to write all the bytes for the exception attribute
+			attributesNumber += generateExceptionsAttribute(thrownsExceptions);
 		}
-		TypeBinding annotationTypeBinding = annotation.resolvedType;
-		if (annotationTypeBinding == null) {
-			this.contentsOffset = startingContentsOffset;
-			return;
+		if (methodBinding.isDeprecated()) {
+			// Deprecated attribute
+			attributesNumber += generateDeprecatedAttribute();
 		}
-		final int typeIndex = this.constantPool.literalIndex(annotationTypeBinding.signature());
-		this.contents[this.contentsOffset++] = (byte) (typeIndex >> 8);
-		this.contents[this.contentsOffset++] = (byte) typeIndex;
-		if (annotation instanceof NormalAnnotation) {
-			NormalAnnotation normalAnnotation = (NormalAnnotation) annotation;
-			MemberValuePair[] memberValuePairs = normalAnnotation.memberValuePairs;
-			if (memberValuePairs != null) {
-				final int memberValuePairsLength = memberValuePairs.length;
-				this.contents[this.contentsOffset++] = (byte) (memberValuePairsLength >> 8);
-				this.contents[this.contentsOffset++] = (byte) memberValuePairsLength;
-				for (int i = 0; i < memberValuePairsLength; i++) {
-					MemberValuePair memberValuePair = memberValuePairs[i];
-					if (this.contentsOffset + 2 >= this.contents.length) {
-						resizeContents(2);
-					}
-					final int elementNameIndex = this.constantPool.literalIndex(memberValuePair.name);
-					this.contents[this.contentsOffset++] = (byte) (elementNameIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) elementNameIndex;
-					MethodBinding methodBinding = memberValuePair.binding;
-					if (methodBinding == null) {
-						this.contentsOffset = startingContentsOffset;
-					} else {
-						try {
-							generateElementValue(memberValuePair.value, methodBinding.returnType, startingContentsOffset);
-						} catch(ClassCastException e) {
-							this.contentsOffset = startingContentsOffset;
-						} catch(ShouldNotImplement e) {
-							this.contentsOffset = startingContentsOffset;
-						}
-					}
-				}
-			} else {
-				this.contents[this.contentsOffset++] = 0;
-				this.contents[this.contentsOffset++] = 0;
+		if (this.targetJDK < ClassFileConstants.JDK1_5) {
+			if (methodBinding.isSynthetic()) {
+				attributesNumber += generateSyntheticAttribute();
 			}
-		} else if (annotation instanceof SingleMemberAnnotation) {
-			SingleMemberAnnotation singleMemberAnnotation = (SingleMemberAnnotation) annotation;
-			// this is a single member annotation (one member value)
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 1;
-			if (this.contentsOffset + 2 >= this.contents.length) {
-				resizeContents(2);
+			if (methodBinding.isVarargs()) {
+				attributesNumber += generateVarargsAttribute();
 			}
-			final int elementNameIndex = this.constantPool.literalIndex(VALUE);
-			this.contents[this.contentsOffset++] = (byte) (elementNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) elementNameIndex;
-			MethodBinding methodBinding = singleMemberAnnotation.memberValuePairs()[0].binding;
-			if (methodBinding == null) {
-				this.contentsOffset = startingContentsOffset;
-			} else {
-				try {
-					generateElementValue(singleMemberAnnotation.memberValue, methodBinding.returnType, startingContentsOffset);
-				} catch(ClassCastException e) {
-					this.contentsOffset = startingContentsOffset;
-				} catch(ShouldNotImplement e) {
-					this.contentsOffset = startingContentsOffset;
+		}
+		// add signature attribute
+		char[] genericSignature = methodBinding.genericSignature();
+		if (genericSignature != null) {
+			attributesNumber += generateSignatureAttribute(genericSignature);
+		}
+		if (this.targetJDK >= ClassFileConstants.JDK1_4) {
+			AbstractMethodDeclaration methodDeclaration = methodBinding.sourceMethod();
+			if (methodDeclaration != null) {
+				Annotation[] annotations = methodDeclaration.annotations;
+				if (annotations != null) {
+					attributesNumber += generateRuntimeAnnotations(annotations);
+				}
+				if ((methodBinding.tagBits & TagBits.HasParameterAnnotations) != 0) {
+					Argument[] arguments = methodDeclaration.arguments;
+					if (arguments != null) {
+						attributesNumber += generateRuntimeAnnotationsForParameters(arguments);
+					}
 				}
 			}
-		} else {
-			// this is a marker annotation (no member value pairs)
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
 		}
+		if ((methodBinding.tagBits & TagBits.HasMissingType) != 0) {
+			this.missingTypes = methodBinding.collectMissingTypes(this.missingTypes);
+		}
+		return attributesNumber;
+	}
+	public int generateMethodInfoAttributes(MethodBinding methodBinding, AnnotationMethodDeclaration declaration) {
+		int attributesNumber = generateMethodInfoAttributes(methodBinding);
+		int attributeOffset = this.contentsOffset;
+		if ((declaration.modifiers & ClassFileConstants.AccAnnotationDefault) != 0) {
+			// add an annotation default attribute
+			attributesNumber += generateAnnotationDefaultAttribute(declaration, attributeOffset);
+		}
+		return attributesNumber;
 	}
-
 	/**
 	 * INTERNAL USE-ONLY
-	 * That method generates the header of a code attribute.
-	 * - the index inside the constant pool for the attribute name ("Code")
-	 * - leave some space for attribute_length(4), max_stack(2), max_locals(2), code_length(4).
+	 * That method generates the header of a method info:
+	 * The header consists in:
+	 * - the access flags
+	 * - the name index of the method name inside the constant pool
+	 * - the descriptor index of the signature of the method inside the constant pool.
+	 *
+	 * @param methodBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
 	 */
-	public void generateCodeAttributeHeader() {
-		if (this.contentsOffset + 20 >= this.contents.length) {
-			resizeContents(20);
-		}
-		int constantValueNameIndex =
-			this.constantPool.literalIndex(AttributeNamesConstants.CodeName);
-		this.contents[this.contentsOffset++] = (byte) (constantValueNameIndex >> 8);
-		this.contents[this.contentsOffset++] = (byte) constantValueNameIndex;
-		// leave space for attribute_length(4), max_stack(2), max_locals(2), code_length(4)
-		this.contentsOffset += 12;
+	public void generateMethodInfoHeader(MethodBinding methodBinding) {
+		generateMethodInfoHeader(methodBinding, methodBinding.modifiers);
 	}
 
-	private void generateElementValue(
-			Expression defaultValue,
-			TypeBinding memberValuePairReturnType,
-			int attributeOffset) {
-		Constant constant = defaultValue.constant;
-		TypeBinding defaultValueBinding = defaultValue.resolvedType;
-		if (defaultValueBinding == null) {
-			this.contentsOffset = attributeOffset;
-		} else {
-			if (memberValuePairReturnType.isArrayType() && !defaultValueBinding.isArrayType()) {
-				// automatic wrapping
-				if (this.contentsOffset + 3 >= this.contents.length) {
-					resizeContents(3);
-				}
-				this.contents[this.contentsOffset++] = (byte) '[';
-				this.contents[this.contentsOffset++] = (byte) 0;
-				this.contents[this.contentsOffset++] = (byte) 1;
-			}
-			if (constant != null && constant != Constant.NotAConstant) {
-				generateElementValue(attributeOffset, defaultValue, constant, memberValuePairReturnType.leafComponentType());
-			} else {
-				generateElementValueForNonConstantExpression(defaultValue, attributeOffset, defaultValueBinding);
-			}
+	/**
+	 * INTERNAL USE-ONLY
+	 * That method generates the header of a method info:
+	 * The header consists in:
+	 * - the access flags
+	 * - the name index of the method name inside the constant pool
+	 * - the descriptor index of the signature of the method inside the constant pool.
+	 *
+	 * @param methodBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
+	 * @param accessFlags the access flags
+	 */
+	public void generateMethodInfoHeader(MethodBinding methodBinding, int accessFlags) {
+		// check that there is enough space to write all the bytes for the method info corresponding
+		// to the @methodBinding
+		this.methodCount++; // add one more method
+		if (this.contentsOffset + 10 >= this.contents.length) {
+			resizeContents(10);
+		}
+		if (this.targetJDK < ClassFileConstants.JDK1_5) {
+			// pre 1.5, synthetic is an attribute, not a modifier
+			// pre 1.5, varargs is an attribute, not a modifier (-target jsr14 mode)
+			accessFlags &= ~(ClassFileConstants.AccSynthetic | ClassFileConstants.AccVarargs);
+		}
+		if ((methodBinding.tagBits & TagBits.ClearPrivateModifier) != 0) {
+			accessFlags &= ~ClassFileConstants.AccPrivate;
 		}
+		this.contents[this.contentsOffset++] = (byte) (accessFlags >> 8);
+		this.contents[this.contentsOffset++] = (byte) accessFlags;
+		int nameIndex = this.constantPool.literalIndex(methodBinding.selector);
+		this.contents[this.contentsOffset++] = (byte) (nameIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) nameIndex;
+		int descriptorIndex = this.constantPool.literalIndex(methodBinding.signature(this));
+		this.contents[this.contentsOffset++] = (byte) (descriptorIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) descriptorIndex;
 	}
 
 	/**
-	 * @param attributeOffset
+	 * INTERNAL USE-ONLY
+	 * That method generates the method info header of a clinit:
+	 * The header consists in:
+	 * - the access flags (always default access + static)
+	 * - the name index of the method name (always <clinit>) inside the constant pool
+	 * - the descriptor index of the signature (always ()V) of the method inside the constant pool.
 	 */
-	private void generateElementValue(int attributeOffset, Expression defaultValue, Constant constant, TypeBinding binding) {
-		if (this.contentsOffset + 3 >= this.contents.length) {
-			resizeContents(3);
-		}
-		switch (binding.id) {
-			case T_boolean :
-				this.contents[this.contentsOffset++] = (byte) 'Z';
-				int booleanValueIndex =
-					this.constantPool.literalIndex(constant.booleanValue() ? 1 : 0);
-				this.contents[this.contentsOffset++] = (byte) (booleanValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) booleanValueIndex;
-				break;
-			case T_byte :
-				this.contents[this.contentsOffset++] = (byte) 'B';
-				int integerValueIndex =
-					this.constantPool.literalIndex(constant.intValue());
-				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
-				break;
-			case T_char :
-				this.contents[this.contentsOffset++] = (byte) 'C';
-				integerValueIndex =
-					this.constantPool.literalIndex(constant.intValue());
-				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
-				break;
-			case T_int :
-				this.contents[this.contentsOffset++] = (byte) 'I';
-				integerValueIndex =
-					this.constantPool.literalIndex(constant.intValue());
-				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
-				break;
-			case T_short :
-				this.contents[this.contentsOffset++] = (byte) 'S';
-				integerValueIndex =
-					this.constantPool.literalIndex(constant.intValue());
-				this.contents[this.contentsOffset++] = (byte) (integerValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) integerValueIndex;
-				break;
-			case T_float :
-				this.contents[this.contentsOffset++] = (byte) 'F';
-				int floatValueIndex =
-					this.constantPool.literalIndex(constant.floatValue());
-				this.contents[this.contentsOffset++] = (byte) (floatValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) floatValueIndex;
-				break;
-			case T_double :
-				this.contents[this.contentsOffset++] = (byte) 'D';
-				int doubleValueIndex =
-					this.constantPool.literalIndex(constant.doubleValue());
-				this.contents[this.contentsOffset++] = (byte) (doubleValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) doubleValueIndex;
-				break;
-			case T_long :
-				this.contents[this.contentsOffset++] = (byte) 'J';
-				int longValueIndex =
-					this.constantPool.literalIndex(constant.longValue());
-				this.contents[this.contentsOffset++] = (byte) (longValueIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) longValueIndex;
-				break;
-			case T_JavaLangString :
-				this.contents[this.contentsOffset++] = (byte) 's';
-				int stringValueIndex =
-					this.constantPool.literalIndex(((StringConstant) constant).stringValue().toCharArray());
-				if (stringValueIndex == -1) {
-					if (!this.creatingProblemType) {
-						// report an error and abort: will lead to a problem type classfile creation
-						TypeDeclaration typeDeclaration = this.referenceBinding.scope.referenceContext;
-						typeDeclaration.scope.problemReporter().stringConstantIsExceedingUtf8Limit(defaultValue);
-					} else {
-						// already inside a problem type creation : no attribute
-						this.contentsOffset = attributeOffset;
-					}
-				} else {
-					this.contents[this.contentsOffset++] = (byte) (stringValueIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) stringValueIndex;
-				}
+	public void generateMethodInfoHeaderForClinit() {
+		// check that there is enough space to write all the bytes for the method info corresponding
+		// to the @methodBinding
+		this.methodCount++; // add one more method
+		if (this.contentsOffset + 10 >= this.contents.length) {
+			resizeContents(10);
 		}
+		this.contents[this.contentsOffset++] = (byte) ((ClassFileConstants.AccDefault | ClassFileConstants.AccStatic) >> 8);
+		this.contents[this.contentsOffset++] = (byte) (ClassFileConstants.AccDefault | ClassFileConstants.AccStatic);
+		int nameIndex = this.constantPool.literalIndex(ConstantPool.Clinit);
+		this.contents[this.contentsOffset++] = (byte) (nameIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) nameIndex;
+		int descriptorIndex =
+			this.constantPool.literalIndex(ConstantPool.ClinitSignature);
+		this.contents[this.contentsOffset++] = (byte) (descriptorIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) descriptorIndex;
+		// We know that we won't get more than 1 attribute: the code attribute
+		this.contents[this.contentsOffset++] = 0;
+		this.contents[this.contentsOffset++] = 1;
 	}
 
-	private void generateElementValueForNonConstantExpression(Expression defaultValue, int attributeOffset, TypeBinding defaultValueBinding) {
-		if (defaultValueBinding != null) {
-			if (defaultValueBinding.isEnum()) {
-				if (this.contentsOffset + 5 >= this.contents.length) {
-					resizeContents(5);
-				}
-				this.contents[this.contentsOffset++] = (byte) 'e';
-				FieldBinding fieldBinding = null;
-				if (defaultValue instanceof QualifiedNameReference) {
-					QualifiedNameReference nameReference = (QualifiedNameReference) defaultValue;
-					fieldBinding = (FieldBinding) nameReference.binding;
-				} else if (defaultValue instanceof SingleNameReference) {
-					SingleNameReference nameReference = (SingleNameReference) defaultValue;
-					fieldBinding = (FieldBinding) nameReference.binding;
-				} else {
-					this.contentsOffset = attributeOffset;
-				}
-				if (fieldBinding != null) {
-					final int enumConstantTypeNameIndex = this.constantPool.literalIndex(fieldBinding.type.signature());
-					final int enumConstantNameIndex = this.constantPool.literalIndex(fieldBinding.name);
-					this.contents[this.contentsOffset++] = (byte) (enumConstantTypeNameIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) enumConstantTypeNameIndex;
-					this.contents[this.contentsOffset++] = (byte) (enumConstantNameIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) enumConstantNameIndex;
-				}
-			} else if (defaultValueBinding.isAnnotationType()) {
-				if (this.contentsOffset + 1 >= this.contents.length) {
-					resizeContents(1);
-				}
-				this.contents[this.contentsOffset++] = (byte) '@';
-				generateAnnotation((Annotation) defaultValue, attributeOffset);
-			} else if (defaultValueBinding.isArrayType()) {
-				// array type
-				if (this.contentsOffset + 3 >= this.contents.length) {
-					resizeContents(3);
-				}
-				this.contents[this.contentsOffset++] = (byte) '[';
-				if (defaultValue instanceof ArrayInitializer) {
-					ArrayInitializer arrayInitializer = (ArrayInitializer) defaultValue;
-					int arrayLength = arrayInitializer.expressions != null ? arrayInitializer.expressions.length : 0;
-					this.contents[this.contentsOffset++] = (byte) (arrayLength >> 8);
-					this.contents[this.contentsOffset++] = (byte) arrayLength;
-					for (int i = 0; i < arrayLength; i++) {
-						generateElementValue(arrayInitializer.expressions[i], defaultValueBinding.leafComponentType(), attributeOffset);
+	/**
+	 * INTERNAL USE-ONLY
+	 * Generate the byte for problem method infos that correspond to missing abstract methods.
+	 * http://dev.eclipse.org/bugs/show_bug.cgi?id=3179
+	 *
+	 * @param methodDeclarations Array of all missing abstract methods
+	 */
+	public void generateMissingAbstractMethods(MethodDeclaration[] methodDeclarations, CompilationResult compilationResult) {
+		if (methodDeclarations != null) {
+			TypeDeclaration currentDeclaration = this.referenceBinding.scope.referenceContext;
+			int typeDeclarationSourceStart = currentDeclaration.sourceStart();
+			int typeDeclarationSourceEnd = currentDeclaration.sourceEnd();
+			for (int i = 0, max = methodDeclarations.length; i < max; i++) {
+				MethodDeclaration methodDeclaration = methodDeclarations[i];
+				MethodBinding methodBinding = methodDeclaration.binding;
+				 String readableName = new String(methodBinding.readableName());
+				 CategorizedProblem[] problems = compilationResult.problems;
+				 int problemsCount = compilationResult.problemCount;
+				for (int j = 0; j < problemsCount; j++) {
+					CategorizedProblem problem = problems[j];
+					if (problem != null
+							&& problem.getID() == IProblem.AbstractMethodMustBeImplemented
+							&& problem.getMessage().indexOf(readableName) != -1
+							&& problem.getSourceStart() >= typeDeclarationSourceStart
+							&& problem.getSourceEnd() <= typeDeclarationSourceEnd) {
+						// we found a match
+						addMissingAbstractProblemMethod(methodDeclaration, methodBinding, problem, compilationResult);
 					}
-				} else {
-					this.contentsOffset = attributeOffset;
-				}
-			} else {
-				// class type
-				if (this.contentsOffset + 3 >= this.contents.length) {
-					resizeContents(3);
 				}
-				this.contents[this.contentsOffset++] = (byte) 'c';
-				if (defaultValue instanceof ClassLiteralAccess) {
-					ClassLiteralAccess classLiteralAccess = (ClassLiteralAccess) defaultValue;
-					final int classInfoIndex = this.constantPool.literalIndex(classLiteralAccess.targetType.signature());
-					this.contents[this.contentsOffset++] = (byte) (classInfoIndex >> 8);
-					this.contents[this.contentsOffset++] = (byte) classInfoIndex;
-				} else {
-					this.contentsOffset = attributeOffset;
+			}
+		}
+	}
+
+	private void generateMissingTypesAttribute() {
+		int initialSize = this.missingTypes.size();
+		int[] missingTypesIndexes = new int[initialSize];
+		int numberOfMissingTypes = 0;
+		if (initialSize > 1) {
+			Collections.sort(this.missingTypes, new Comparator() {
+				public int compare(Object o1, Object o2) {
+					TypeBinding typeBinding1 = (TypeBinding) o1;
+					TypeBinding typeBinding2 = (TypeBinding) o2;
+					return CharOperation.compareTo(typeBinding1.constantPoolName(), typeBinding2.constantPoolName());
 				}
+			});
+		}
+		int previousIndex = 0;
+		next: for (int i = 0; i < initialSize; i++) {
+			int missingTypeIndex = this.constantPool.literalIndexForType((TypeBinding) this.missingTypes.get(i));
+			if (previousIndex == missingTypeIndex) {
+				continue next;
 			}
-		} else {
-			this.contentsOffset = attributeOffset;
+			previousIndex = missingTypeIndex;
+			missingTypesIndexes[numberOfMissingTypes++] = missingTypeIndex;
+		}
+		// we don't need to resize as we interate from 0 to numberOfMissingTypes when recording the indexes in the .class file
+		int attributeLength = numberOfMissingTypes * 2 + 2;
+		if (this.contentsOffset + attributeLength + 6 >= this.contents.length) {
+			resizeContents(attributeLength + 6);
+		}
+		int missingTypesNameIndex = this.constantPool.literalIndex(AttributeNamesConstants.MissingTypesName);
+		this.contents[this.contentsOffset++] = (byte) (missingTypesNameIndex >> 8);
+		this.contents[this.contentsOffset++] = (byte) missingTypesNameIndex;
+
+		// generate attribute length
+		this.contents[this.contentsOffset++] = (byte) (attributeLength >> 24);
+		this.contents[this.contentsOffset++] = (byte) (attributeLength >> 16);
+		this.contents[this.contentsOffset++] = (byte) (attributeLength >> 8);
+		this.contents[this.contentsOffset++] = (byte) attributeLength;
+
+		// generate number of missing types
+		this.contents[this.contentsOffset++] = (byte) (numberOfMissingTypes >> 8);
+		this.contents[this.contentsOffset++] = (byte) numberOfMissingTypes;
+		// generate entry for each missing type
+		for (int i = 0; i < numberOfMissingTypes; i++) {
+			int missingTypeIndex = missingTypesIndexes[i];
+			this.contents[this.contentsOffset++] = (byte) (missingTypeIndex >> 8);
+			this.contents[this.contentsOffset++] = (byte) missingTypeIndex;
 		}
 	}
 
 	/**
-	 * INTERNAL USE-ONLY
-	 * That method generates the attributes of a code attribute.
-	 * They could be:
-	 * - an exception attribute for each try/catch found inside the method
-	 * - a deprecated attribute
-	 * - a synthetic attribute for synthetic access methods
-	 *
-	 * It returns the number of attributes created for the code attribute.
-	 *
-	 * @param methodBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
-	 * @return <CODE>int</CODE>
+	 * @param annotations
+	 * @return the number of attributes created while dumping the annotations in the .class file
 	 */
-	public int generateMethodInfoAttribute(MethodBinding methodBinding) {
-		// leave two bytes for the attribute_number
-		this.contentsOffset += 2;
-		if (this.contentsOffset + 2 >= this.contents.length) {
-			resizeContents(2);
+	private int generateRuntimeAnnotations(final Annotation[] annotations) {
+		int attributesNumber = 0;
+		final int length = annotations.length;
+		int visibleAnnotationsCounter = 0;
+		int invisibleAnnotationsCounter = 0;
+
+		for (int i = 0; i < length; i++) {
+			Annotation annotation = annotations[i];
+			if (annotation.isRuntimeInvisible()) {
+				invisibleAnnotationsCounter++;
+			} else if (annotation.isRuntimeVisible()) {
+				visibleAnnotationsCounter++;
+			}
 		}
-		// now we can handle all the attribute for that method info:
-		// it could be:
-		// - a CodeAttribute
-		// - a ExceptionAttribute
-		// - a DeprecatedAttribute
-		// - a SyntheticAttribute
 
-		// Exception attribute
-		ReferenceBinding[] thrownsExceptions;
-		int attributeNumber = 0;
-		if ((thrownsExceptions = methodBinding.thrownExceptions) != Binding.NO_EXCEPTIONS) {
-			// The method has a throw clause. So we need to add an exception attribute
-			// check that there is enough space to write all the bytes for the exception attribute
-			int length = thrownsExceptions.length;
-			int exSize = 8 + length * 2;
-			if (exSize + this.contentsOffset >= this.contents.length) {
-				resizeContents(exSize);
+		int annotationAttributeOffset = this.contentsOffset;
+		int constantPOffset = this.constantPool.currentOffset;
+		int constantPoolIndex = this.constantPool.currentIndex;
+		if (invisibleAnnotationsCounter != 0) {
+			if (this.contentsOffset + 10 >= this.contents.length) {
+				resizeContents(10);
+			}
+			int runtimeInvisibleAnnotationsAttributeNameIndex =
+				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeInvisibleAnnotationsName);
+			this.contents[this.contentsOffset++] = (byte) (runtimeInvisibleAnnotationsAttributeNameIndex >> 8);
+			this.contents[this.contentsOffset++] = (byte) runtimeInvisibleAnnotationsAttributeNameIndex;
+			int attributeLengthOffset = this.contentsOffset;
+			this.contentsOffset += 4; // leave space for the attribute length
+
+			int annotationsLengthOffset = this.contentsOffset;
+			this.contentsOffset += 2; // leave space for the annotations length
+
+			int counter = 0;
+			loop: for (int i = 0; i < length; i++) {
+				if (invisibleAnnotationsCounter == 0) break loop;
+				Annotation annotation = annotations[i];
+				if (annotation.isRuntimeInvisible()) {
+					int currentAnnotationOffset = this.contentsOffset;
+					generateAnnotation(annotation, currentAnnotationOffset);
+					invisibleAnnotationsCounter--;
+					if (this.contentsOffset != currentAnnotationOffset) {
+						counter++;
+					}
+				}
 			}
-			int exceptionNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.ExceptionsName);
-			this.contents[this.contentsOffset++] = (byte) (exceptionNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) exceptionNameIndex;
-			// The attribute length = length * 2 + 2 in case of a exception attribute
-			int attributeLength = length * 2 + 2;
-			this.contents[this.contentsOffset++] = (byte) (attributeLength >> 24);
-			this.contents[this.contentsOffset++] = (byte) (attributeLength >> 16);
-			this.contents[this.contentsOffset++] = (byte) (attributeLength >> 8);
-			this.contents[this.contentsOffset++] = (byte) attributeLength;
-			this.contents[this.contentsOffset++] = (byte) (length >> 8);
-			this.contents[this.contentsOffset++] = (byte) length;
-			for (int i = 0; i < length; i++) {
-				int exceptionIndex = this.constantPool.literalIndexForType(thrownsExceptions[i]);
-				this.contents[this.contentsOffset++] = (byte) (exceptionIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) exceptionIndex;
+			if (counter != 0) {
+				this.contents[annotationsLengthOffset++] = (byte) (counter >> 8);
+				this.contents[annotationsLengthOffset++] = (byte) counter;
+
+				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
+				this.contents[attributeLengthOffset++] = (byte) attributeLength;
+				attributesNumber++;
+			} else {
+				this.contentsOffset = annotationAttributeOffset;
+				// reset the constant pool to its state before the clinit
+				this.constantPool.resetForAttributeName(AttributeNamesConstants.RuntimeInvisibleAnnotationsName, constantPoolIndex, constantPOffset);
 			}
-			attributeNumber++;
 		}
-		if (methodBinding.isDeprecated()) {
-			// Deprecated attribute
-			// Check that there is enough space to write the deprecated attribute
-			if (this.contentsOffset + 6 >= this.contents.length) {
-				resizeContents(6);
+
+		annotationAttributeOffset = this.contentsOffset;
+		constantPOffset = this.constantPool.currentOffset;
+		constantPoolIndex = this.constantPool.currentIndex;
+		if (visibleAnnotationsCounter != 0) {
+			if (this.contentsOffset + 10 >= this.contents.length) {
+				resizeContents(10);
 			}
-			int deprecatedAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.DeprecatedName);
-			this.contents[this.contentsOffset++] = (byte) (deprecatedAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) deprecatedAttributeNameIndex;
-			// the length of a deprecated attribute is equals to 0
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
+			int runtimeVisibleAnnotationsAttributeNameIndex =
+				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeVisibleAnnotationsName);
+			this.contents[this.contentsOffset++] = (byte) (runtimeVisibleAnnotationsAttributeNameIndex >> 8);
+			this.contents[this.contentsOffset++] = (byte) runtimeVisibleAnnotationsAttributeNameIndex;
+			int attributeLengthOffset = this.contentsOffset;
+			this.contentsOffset += 4; // leave space for the attribute length
+
+			int annotationsLengthOffset = this.contentsOffset;
+			this.contentsOffset += 2; // leave space for the annotations length
+
+			int counter = 0;
+			loop: for (int i = 0; i < length; i++) {
+				if (visibleAnnotationsCounter == 0) break loop;
+				Annotation annotation = annotations[i];
+				if (annotation.isRuntimeVisible()) {
+					visibleAnnotationsCounter--;
+					int currentAnnotationOffset = this.contentsOffset;
+					generateAnnotation(annotation, currentAnnotationOffset);
+					if (this.contentsOffset != currentAnnotationOffset) {
+						counter++;
+					}
+				}
+			}
+			if (counter != 0) {
+				this.contents[annotationsLengthOffset++] = (byte) (counter >> 8);
+				this.contents[annotationsLengthOffset++] = (byte) counter;
 
-			attributeNumber++;
+				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
+				this.contents[attributeLengthOffset++] = (byte) attributeLength;
+				attributesNumber++;
+			} else {
+				this.contentsOffset = annotationAttributeOffset;
+				this.constantPool.resetForAttributeName(AttributeNamesConstants.RuntimeVisibleAnnotationsName, constantPoolIndex, constantPOffset);
+			}
 		}
-		if (this.targetJDK < ClassFileConstants.JDK1_5) {
-			if (methodBinding.isSynthetic()) {
-				// Synthetic attribute
-				// Check that there is enough space to write the deprecated attribute
-				if (this.contentsOffset + 6 >= this.contents.length) {
-					resizeContents(6);
+		return attributesNumber;
+	}
+	private int generateRuntimeAnnotationsForParameters(Argument[] arguments) {
+		final int argumentsLength = arguments.length;
+		final int VISIBLE_INDEX = 0;
+		final int INVISIBLE_INDEX = 1;
+		int invisibleParametersAnnotationsCounter = 0;
+		int visibleParametersAnnotationsCounter = 0;
+		int[][] annotationsCounters = new int[argumentsLength][2];
+		for (int i = 0; i < argumentsLength; i++) {
+			Argument argument = arguments[i];
+			Annotation[] annotations = argument.annotations;
+			if (annotations != null) {
+				for (int j = 0, max2 = annotations.length; j < max2; j++) {
+					Annotation annotation = annotations[j];
+					if (annotation.isRuntimeInvisible()) {
+						annotationsCounters[i][INVISIBLE_INDEX]++;
+						invisibleParametersAnnotationsCounter++;
+					} else if (annotation.isRuntimeVisible()) {
+						annotationsCounters[i][VISIBLE_INDEX]++;
+						visibleParametersAnnotationsCounter++;
+					}
+				}
+			}
+		}
+		int attributesNumber = 0;
+		int annotationAttributeOffset = this.contentsOffset;
+		if (invisibleParametersAnnotationsCounter != 0) {
+			int globalCounter = 0;
+			if (this.contentsOffset + 7 >= this.contents.length) {
+				resizeContents(7);
+			}
+			int attributeNameIndex =
+				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeInvisibleParameterAnnotationsName);
+			this.contents[this.contentsOffset++] = (byte) (attributeNameIndex >> 8);
+			this.contents[this.contentsOffset++] = (byte) attributeNameIndex;
+			int attributeLengthOffset = this.contentsOffset;
+			this.contentsOffset += 4; // leave space for the attribute length
+
+			this.contents[this.contentsOffset++] = (byte) argumentsLength;
+			for (int i = 0; i < argumentsLength; i++) {
+				if (this.contentsOffset + 2 >= this.contents.length) {
+					resizeContents(2);
+				}
+				if (invisibleParametersAnnotationsCounter == 0) {
+					this.contents[this.contentsOffset++] = (byte) 0;
+					this.contents[this.contentsOffset++] = (byte) 0;
+				} else {
+					final int numberOfInvisibleAnnotations = annotationsCounters[i][INVISIBLE_INDEX];
+					int invisibleAnnotationsOffset = this.contentsOffset;
+					// leave space for number of annotations
+					this.contentsOffset += 2;
+					int counter = 0;
+					if (numberOfInvisibleAnnotations != 0) {
+						Argument argument = arguments[i];
+						Annotation[] annotations = argument.annotations;
+						for (int j = 0, max = annotations.length; j < max; j++) {
+							Annotation annotation = annotations[j];
+							if (annotation.isRuntimeInvisible()) {
+								int currentAnnotationOffset = this.contentsOffset;
+								generateAnnotation(annotation, currentAnnotationOffset);
+								if (this.contentsOffset != currentAnnotationOffset) {
+									counter++;
+									globalCounter++;
+								}
+								invisibleParametersAnnotationsCounter--;
+							}
+						}
+					}
+					this.contents[invisibleAnnotationsOffset++] = (byte) (counter >> 8);
+					this.contents[invisibleAnnotationsOffset] = (byte) counter;
 				}
-				int syntheticAttributeNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.SyntheticName);
-				this.contents[this.contentsOffset++] = (byte) (syntheticAttributeNameIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) syntheticAttributeNameIndex;
-				// the length of a synthetic attribute is equals to 0
-				this.contents[this.contentsOffset++] = 0;
-				this.contents[this.contentsOffset++] = 0;
-				this.contents[this.contentsOffset++] = 0;
-				this.contents[this.contentsOffset++] = 0;
-
-				attributeNumber++;
 			}
-			if (methodBinding.isVarargs()) {
-				/*
-				 * handle of the target jsr14 for varargs in the source
-				 * Varargs attribute
-				 * Check that there is enough space to write the deprecated attribute
-				 */
-				if (this.contentsOffset + 6 >= this.contents.length) {
-					resizeContents(6);
-				}
-				int varargsAttributeNameIndex =
-					this.constantPool.literalIndex(AttributeNamesConstants.VarargsName);
-				this.contents[this.contentsOffset++] = (byte) (varargsAttributeNameIndex >> 8);
-				this.contents[this.contentsOffset++] = (byte) varargsAttributeNameIndex;
-				// the length of a varargs attribute is equals to 0
-				this.contents[this.contentsOffset++] = 0;
-				this.contents[this.contentsOffset++] = 0;
-				this.contents[this.contentsOffset++] = 0;
-				this.contents[this.contentsOffset++] = 0;
-
-				attributeNumber++;
+			if (globalCounter != 0) {
+				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
+				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
+				this.contents[attributeLengthOffset++] = (byte) attributeLength;
+				attributesNumber++;
+			} else {
+				// if globalCounter is 0, this means that the code generation for all visible annotations failed
+				this.contentsOffset = annotationAttributeOffset;
 			}
 		}
-		// add signature attribute
-		char[] genericSignature = methodBinding.genericSignature();
-		if (genericSignature != null) {
-			// check that there is enough space to write all the bytes for the field info corresponding
-			// to the @fieldBinding
-			if (this.contentsOffset + 8 >= this.contents.length) {
-				resizeContents(8);
+		if (visibleParametersAnnotationsCounter != 0) {
+			int globalCounter = 0;
+			if (this.contentsOffset + 7 >= this.contents.length) {
+				resizeContents(7);
 			}
-			int signatureAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.SignatureName);
-			this.contents[this.contentsOffset++] = (byte) (signatureAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) signatureAttributeNameIndex;
-			// the length of a signature attribute is equals to 2
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 0;
-			this.contents[this.contentsOffset++] = 2;
-			int signatureIndex =
-				this.constantPool.literalIndex(genericSignature);
-			this.contents[this.contentsOffset++] = (byte) (signatureIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) signatureIndex;
-			attributeNumber++;
-		}
-		if (this.targetJDK >= ClassFileConstants.JDK1_4) {
-			AbstractMethodDeclaration methodDeclaration = methodBinding.sourceMethod();
-			if (methodDeclaration != null) {
-				Annotation[] annotations = methodDeclaration.annotations;
-				if (annotations != null) {
-					attributeNumber += generateRuntimeAnnotations(annotations);
+			int attributeNameIndex =
+				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeVisibleParameterAnnotationsName);
+			this.contents[this.contentsOffset++] = (byte) (attributeNameIndex >> 8);
+			this.contents[this.contentsOffset++] = (byte) attributeNameIndex;
+			int attributeLengthOffset = this.contentsOffset;
+			this.contentsOffset += 4; // leave space for the attribute length
+
+			this.contents[this.contentsOffset++] = (byte) argumentsLength;
+			for (int i = 0; i < argumentsLength; i++) {
+				if (this.contentsOffset + 2 >= this.contents.length) {
+					resizeContents(2);
 				}
-				if ((methodBinding.tagBits & TagBits.HasParameterAnnotations) != 0) {
-					Argument[] arguments = methodDeclaration.arguments;
-					if (arguments != null) {
-						attributeNumber += generateRuntimeAnnotationsForParameters(arguments);
+				if (visibleParametersAnnotationsCounter == 0) {
+					this.contents[this.contentsOffset++] = (byte) 0;
+					this.contents[this.contentsOffset++] = (byte) 0;
+				} else {
+					final int numberOfVisibleAnnotations = annotationsCounters[i][VISIBLE_INDEX];
+					int visibleAnnotationsOffset = this.contentsOffset;
+					// leave space for number of annotations
+					this.contentsOffset += 2;
+					int counter = 0;
+					if (numberOfVisibleAnnotations != 0) {
+						Argument argument = arguments[i];
+						Annotation[] annotations = argument.annotations;
+						for (int j = 0, max = annotations.length; j < max; j++) {
+							Annotation annotation = annotations[j];
+							if (annotation.isRuntimeVisible()) {
+								int currentAnnotationOffset = this.contentsOffset;
+								generateAnnotation(annotation, currentAnnotationOffset);
+								if (this.contentsOffset != currentAnnotationOffset) {
+									counter++;
+									globalCounter++;
+								}
+								visibleParametersAnnotationsCounter--;
+							}
+						}
 					}
+					this.contents[visibleAnnotationsOffset++] = (byte) (counter >> 8);
+					this.contents[visibleAnnotationsOffset] = (byte) counter;
 				}
 			}
-		}
-		if ((methodBinding.tagBits & TagBits.HasMissingType) != 0) {
-			this.missingTypes = methodBinding.collectMissingTypes(this.missingTypes);
-		}
-		return attributeNumber;
-	}
-
-	public int generateMethodInfoAttribute(MethodBinding methodBinding, AnnotationMethodDeclaration declaration) {
-		int attributesNumber = generateMethodInfoAttribute(methodBinding);
-		int attributeOffset = this.contentsOffset;
-		if ((declaration.modifiers & ClassFileConstants.AccAnnotationDefault) != 0) {
-			// add an annotation default attribute
-			int annotationDefaultNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.AnnotationDefaultName);
-			this.contents[this.contentsOffset++] = (byte) (annotationDefaultNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) annotationDefaultNameIndex;
-			int attributeLengthOffset = this.contentsOffset;
-			this.contentsOffset += 4;
-			if (this.contentsOffset + 4 >= this.contents.length) {
-				resizeContents(4);
-			}
-			generateElementValue(declaration.defaultValue, declaration.binding.returnType, attributeOffset);
-			if (this.contentsOffset != attributeOffset) {
+			if (globalCounter != 0) {
 				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
 				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
 				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
 				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
 				this.contents[attributeLengthOffset++] = (byte) attributeLength;
 				attributesNumber++;
+			} else {
+				// if globalCounter is 0, this means that the code generation for all visible annotations failed
+				this.contentsOffset = annotationAttributeOffset;
 			}
 		}
 		return attributesNumber;
 	}
-	/**
-	 * INTERNAL USE-ONLY
-	 * That method generates the header of a method info:
-	 * The header consists in:
-	 * - the access flags
-	 * - the name index of the method name inside the constant pool
-	 * - the descriptor index of the signature of the method inside the constant pool.
-	 *
-	 * @param methodBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
-	 */
-	public void generateMethodInfoHeader(MethodBinding methodBinding) {
-		generateMethodInfoHeader(methodBinding, methodBinding.modifiers);
-	}
-	/**
-	 * INTERNAL USE-ONLY
-	 * That method generates the header of a method info:
-	 * The header consists in:
-	 * - the access flags
-	 * - the name index of the method name inside the constant pool
-	 * - the descriptor index of the signature of the method inside the constant pool.
-	 *
-	 * @param methodBinding org.eclipse.jdt.internal.compiler.lookup.MethodBinding
-	 * @param accessFlags the access flags
-	 */
-	public void generateMethodInfoHeader(MethodBinding methodBinding, int accessFlags) {
-		// check that there is enough space to write all the bytes for the method info corresponding
-		// to the @methodBinding
-		this.methodCount++; // add one more method
-		if (this.contentsOffset + 10 >= this.contents.length) {
-			resizeContents(10);
-		}
-		if (this.targetJDK < ClassFileConstants.JDK1_5) {
-			// pre 1.5, synthetic is an attribute, not a modifier
-			// pre 1.5, varargs is an attribute, not a modifier (-target jsr14 mode)
-			accessFlags &= ~(ClassFileConstants.AccSynthetic | ClassFileConstants.AccVarargs);
-		}
-		if ((methodBinding.tagBits & TagBits.ClearPrivateModifier) != 0) {
-			accessFlags &= ~ClassFileConstants.AccPrivate;
+
+	private int generateSignatureAttribute(char[] genericSignature) {
+		int localContentsOffset = this.contentsOffset;
+		if (localContentsOffset + 8 >= this.contents.length) {
+			resizeContents(8);
 		}
-		this.contents[this.contentsOffset++] = (byte) (accessFlags >> 8);
-		this.contents[this.contentsOffset++] = (byte) accessFlags;
-		int nameIndex = this.constantPool.literalIndex(methodBinding.selector);
-		this.contents[this.contentsOffset++] = (byte) (nameIndex >> 8);
-		this.contents[this.contentsOffset++] = (byte) nameIndex;
-		int descriptorIndex = this.constantPool.literalIndex(methodBinding.signature(this));
-		this.contents[this.contentsOffset++] = (byte) (descriptorIndex >> 8);
-		this.contents[this.contentsOffset++] = (byte) descriptorIndex;
+		int signatureAttributeNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.SignatureName);
+		this.contents[localContentsOffset++] = (byte) (signatureAttributeNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) signatureAttributeNameIndex;
+		// the length of a signature attribute is equals to 2
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 2;
+		int signatureIndex =
+			this.constantPool.literalIndex(genericSignature);
+		this.contents[localContentsOffset++] = (byte) (signatureIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) signatureIndex;
+		this.contentsOffset = localContentsOffset;
+		return 1;
 	}
 
-	/**
-	 * INTERNAL USE-ONLY
-	 * That method generates the method info header of a clinit:
-	 * The header consists in:
-	 * - the access flags (always default access + static)
-	 * - the name index of the method name (always <clinit>) inside the constant pool
-	 * - the descriptor index of the signature (always ()V) of the method inside the constant pool.
-	 */
-	public void generateMethodInfoHeaderForClinit() {
-		// check that there is enough space to write all the bytes for the method info corresponding
-		// to the @methodBinding
-		this.methodCount++; // add one more method
-		if (this.contentsOffset + 10 >= this.contents.length) {
-			resizeContents(10);
+	private int generateSourceAttribute(String fullFileName) {
+		int localContentsOffset = this.contentsOffset;
+		// check that there is enough space to write all the bytes for the field info corresponding
+		// to the @fieldBinding
+		if (localContentsOffset + 8 >= this.contents.length) {
+			resizeContents(8);
 		}
-		this.contents[this.contentsOffset++] = (byte) ((ClassFileConstants.AccDefault | ClassFileConstants.AccStatic) >> 8);
-		this.contents[this.contentsOffset++] = (byte) (ClassFileConstants.AccDefault | ClassFileConstants.AccStatic);
-		int nameIndex = this.constantPool.literalIndex(ConstantPool.Clinit);
-		this.contents[this.contentsOffset++] = (byte) (nameIndex >> 8);
-		this.contents[this.contentsOffset++] = (byte) nameIndex;
-		int descriptorIndex =
-			this.constantPool.literalIndex(ConstantPool.ClinitSignature);
-		this.contents[this.contentsOffset++] = (byte) (descriptorIndex >> 8);
-		this.contents[this.contentsOffset++] = (byte) descriptorIndex;
-		// We know that we won't get more than 1 attribute: the code attribute
-		this.contents[this.contentsOffset++] = 0;
-		this.contents[this.contentsOffset++] = 1;
+		int sourceAttributeNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.SourceName);
+		this.contents[localContentsOffset++] = (byte) (sourceAttributeNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) sourceAttributeNameIndex;
+		// The length of a source file attribute is 2. This is a fixed-length
+		// attribute
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 2;
+		// write the source file name
+		int fileNameIndex = this.constantPool.literalIndex(fullFileName.toCharArray());
+		this.contents[localContentsOffset++] = (byte) (fileNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) fileNameIndex;
+		this.contentsOffset = localContentsOffset;
+		return 1;
 	}
-
-	/**
-	 * INTERNAL USE-ONLY
-	 * Generate the byte for problem method infos that correspond to missing abstract methods.
-	 * http://dev.eclipse.org/bugs/show_bug.cgi?id=3179
-	 *
-	 * @param methodDeclarations Array of all missing abstract methods
-	 */
-	public void generateMissingAbstractMethods(MethodDeclaration[] methodDeclarations, CompilationResult compilationResult) {
-		if (methodDeclarations != null) {
-			TypeDeclaration currentDeclaration = this.referenceBinding.scope.referenceContext;
-			int typeDeclarationSourceStart = currentDeclaration.sourceStart();
-			int typeDeclarationSourceEnd = currentDeclaration.sourceEnd();
-			for (int i = 0, max = methodDeclarations.length; i < max; i++) {
-				MethodDeclaration methodDeclaration = methodDeclarations[i];
-				MethodBinding methodBinding = methodDeclaration.binding;
-				 String readableName = new String(methodBinding.readableName());
-				 CategorizedProblem[] problems = compilationResult.problems;
-				 int problemsCount = compilationResult.problemCount;
-				for (int j = 0; j < problemsCount; j++) {
-					CategorizedProblem problem = problems[j];
-					if (problem != null
-							&& problem.getID() == IProblem.AbstractMethodMustBeImplemented
-							&& problem.getMessage().indexOf(readableName) != -1
-							&& problem.getSourceStart() >= typeDeclarationSourceStart
-							&& problem.getSourceEnd() <= typeDeclarationSourceEnd) {
-						// we found a match
-						addMissingAbstractProblemMethod(methodDeclaration, methodBinding, problem, compilationResult);
+	private int generateStackMapAttribute(
+			MethodBinding methodBinding,
+			int code_length,
+			int codeAttributeOffset,
+			int max_locals,
+			boolean isClinit) {
+		int attributesNumber = 0;
+		int localContentsOffset = this.contentsOffset;
+		StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
+		stackMapFrameCodeStream.removeFramePosition(code_length);
+		if (stackMapFrameCodeStream.hasFramePositions()) {
+			ArrayList frames = new ArrayList();
+			traverse(isClinit ? null : methodBinding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, isClinit);
+			int numberOfFrames = frames.size();
+			if (numberOfFrames > 1) {
+				int stackMapTableAttributeOffset = localContentsOffset;
+				// add the stack map table attribute
+				if (localContentsOffset + 8 >= this.contents.length) {
+					resizeContents(8);
+				}
+				int stackMapAttributeNameIndex =
+					this.constantPool.literalIndex(AttributeNamesConstants.StackMapName);
+				this.contents[localContentsOffset++] = (byte) (stackMapAttributeNameIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) stackMapAttributeNameIndex;
+
+				int stackMapAttributeLengthOffset = localContentsOffset;
+				// generate the attribute
+				localContentsOffset += 4;
+				if (localContentsOffset + 4 >= this.contents.length) {
+					resizeContents(4);
+				}
+				int numberOfFramesOffset = localContentsOffset;
+				localContentsOffset += 2;
+				if (localContentsOffset + 2 >= this.contents.length) {
+					resizeContents(2);
+				}
+				StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
+				for (int j = 1; j < numberOfFrames; j++) {
+					// select next frame
+					currentFrame = (StackMapFrame) frames.get(j);
+					// generate current frame
+					// need to find differences between the current frame and the previous frame
+					int frameOffset = currentFrame.pc;
+					// FULL_FRAME
+					if (localContentsOffset + 5 >= this.contents.length) {
+						resizeContents(5);
+					}
+					this.contents[localContentsOffset++] = (byte) (frameOffset >> 8);
+					this.contents[localContentsOffset++] = (byte) frameOffset;
+					int numberOfLocalOffset = localContentsOffset;
+					localContentsOffset += 2; // leave two spots for number of locals
+					int numberOfLocalEntries = 0;
+					int numberOfLocals = currentFrame.getNumberOfLocals();
+					int numberOfEntries = 0;
+					int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
+					for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
+						if (localContentsOffset + 3 >= this.contents.length) {
+							resizeContents(3);
+						}
+						VerificationTypeInfo info = currentFrame.locals[i];
+						if (info == null) {
+							this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
+						} else {
+							switch(info.id()) {
+								case T_boolean :
+								case T_byte :
+								case T_char :
+								case T_int :
+								case T_short :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
+									break;
+								case T_float :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
+									break;
+								case T_long :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
+									i++;
+									break;
+								case T_double :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
+									i++;
+									break;
+								case T_null :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
+									break;
+								default:
+									this.contents[localContentsOffset++] = (byte) info.tag;
+								switch (info.tag) {
+									case VerificationTypeInfo.ITEM_UNINITIALIZED :
+										int offset = info.offset;
+										this.contents[localContentsOffset++] = (byte) (offset >> 8);
+										this.contents[localContentsOffset++] = (byte) offset;
+										break;
+									case VerificationTypeInfo.ITEM_OBJECT :
+										int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
+										this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
+										this.contents[localContentsOffset++] = (byte) indexForType;
+								}
+							}
+							numberOfLocalEntries++;
+						}
+						numberOfEntries++;
+					}
+					if (localContentsOffset + 4 >= this.contents.length) {
+						resizeContents(4);
+					}
+					this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
+					this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
+					int numberOfStackItems = currentFrame.numberOfStackItems;
+					this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
+					this.contents[localContentsOffset++] = (byte) numberOfStackItems;
+					for (int i = 0; i < numberOfStackItems; i++) {
+						if (localContentsOffset + 3 >= this.contents.length) {
+							resizeContents(3);
+						}
+						VerificationTypeInfo info = currentFrame.stackItems[i];
+						if (info == null) {
+							this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
+						} else {
+							switch(info.id()) {
+								case T_boolean :
+								case T_byte :
+								case T_char :
+								case T_int :
+								case T_short :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
+									break;
+								case T_float :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
+									break;
+								case T_long :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
+									break;
+								case T_double :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
+									break;
+								case T_null :
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
+									break;
+								default:
+									this.contents[localContentsOffset++] = (byte) info.tag;
+								switch (info.tag) {
+									case VerificationTypeInfo.ITEM_UNINITIALIZED :
+										int offset = info.offset;
+										this.contents[localContentsOffset++] = (byte) (offset >> 8);
+										this.contents[localContentsOffset++] = (byte) offset;
+										break;
+									case VerificationTypeInfo.ITEM_OBJECT :
+										int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
+										this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
+										this.contents[localContentsOffset++] = (byte) indexForType;
+								}
+							}
+						}
 					}
 				}
-			}
-		}
-	}
 
-	private void generateMissingTypesAttribute() {
-		int initialSize = this.missingTypes.size();
-		int[] missingTypesIndexes = new int[initialSize];
-		int numberOfMissingTypes = 0;
-		if (initialSize > 1) {
-			Collections.sort(this.missingTypes, new Comparator() {
-				public int compare(Object o1, Object o2) {
-					TypeBinding typeBinding1 = (TypeBinding) o1;
-					TypeBinding typeBinding2 = (TypeBinding) o2;
-					return CharOperation.compareTo(typeBinding1.constantPoolName(), typeBinding2.constantPoolName());
+				numberOfFrames--;
+				if (numberOfFrames != 0) {
+					this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
+					this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
+
+					int attributeLength = localContentsOffset - stackMapAttributeLengthOffset - 4;
+					this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 24);
+					this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 16);
+					this.contents[stackMapAttributeLengthOffset++] = (byte) (attributeLength >> 8);
+					this.contents[stackMapAttributeLengthOffset] = (byte) attributeLength;
+					attributesNumber++;
+				} else {
+					localContentsOffset = stackMapTableAttributeOffset;
 				}
-			});
-		}
-		int previousIndex = 0;
-		next: for (int i = 0; i < initialSize; i++) {
-			int missingTypeIndex = this.constantPool.literalIndexForType((TypeBinding) this.missingTypes.get(i));
-			if (previousIndex == missingTypeIndex) {
-				continue next;
 			}
-			previousIndex = missingTypeIndex;
-			missingTypesIndexes[numberOfMissingTypes++] = missingTypeIndex;
-		}
-		// we don't need to resize as we interate from 0 to numberOfMissingTypes when recording the indexes in the .class file
-		int attributeLength = numberOfMissingTypes * 2 + 2;
-		if (this.contentsOffset + attributeLength + 6 >= this.contents.length) {
-			resizeContents(attributeLength + 6);
-		}
-		int missingTypesNameIndex = this.constantPool.literalIndex(AttributeNamesConstants.MissingTypesName);
-		this.contents[this.contentsOffset++] = (byte) (missingTypesNameIndex >> 8);
-		this.contents[this.contentsOffset++] = (byte) missingTypesNameIndex;
-
-		// generate attribute length
-		this.contents[this.contentsOffset++] = (byte) (attributeLength >> 24);
-		this.contents[this.contentsOffset++] = (byte) (attributeLength >> 16);
-		this.contents[this.contentsOffset++] = (byte) (attributeLength >> 8);
-		this.contents[this.contentsOffset++] = (byte) attributeLength;
-
-		// generate number of missing types
-		this.contents[this.contentsOffset++] = (byte) (numberOfMissingTypes >> 8);
-		this.contents[this.contentsOffset++] = (byte) numberOfMissingTypes;
-		// generate entry for each missing type
-		for (int i = 0; i < numberOfMissingTypes; i++) {
-			int missingTypeIndex = missingTypesIndexes[i];
-			this.contents[this.contentsOffset++] = (byte) (missingTypeIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) missingTypeIndex;
 		}
+		this.contentsOffset = localContentsOffset;
+		return attributesNumber;
 	}
 
-	/**
-	 * @param annotations
-	 * @return the number of attributes created while dumping the annotations in the .class file
-	 */
-	private int generateRuntimeAnnotations(final Annotation[] annotations) {
+	private int generateStackMapTableAttribute(
+			MethodBinding methodBinding,
+			int code_length,
+			int codeAttributeOffset,
+			int max_locals,
+			boolean isClinit) {
 		int attributesNumber = 0;
-		final int length = annotations.length;
-		int visibleAnnotationsCounter = 0;
-		int invisibleAnnotationsCounter = 0;
-
-		for (int i = 0; i < length; i++) {
-			Annotation annotation = annotations[i];
-			if (isRuntimeInvisible(annotation)) {
-				invisibleAnnotationsCounter++;
-			} else if (isRuntimeVisible(annotation)) {
-				visibleAnnotationsCounter++;
-			}
-		}
-
-		int annotationAttributeOffset = this.contentsOffset;
-		int constantPOffset = this.constantPool.currentOffset;
-		int constantPoolIndex = this.constantPool.currentIndex;
-		if (invisibleAnnotationsCounter != 0) {
-			if (this.contentsOffset + 10 >= this.contents.length) {
-				resizeContents(10);
-			}
-			int runtimeInvisibleAnnotationsAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeInvisibleAnnotationsName);
-			this.contents[this.contentsOffset++] = (byte) (runtimeInvisibleAnnotationsAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) runtimeInvisibleAnnotationsAttributeNameIndex;
-			int attributeLengthOffset = this.contentsOffset;
-			this.contentsOffset += 4; // leave space for the attribute length
-
-			int annotationsLengthOffset = this.contentsOffset;
-			this.contentsOffset += 2; // leave space for the annotations length
-
-			int counter = 0;
-			loop: for (int i = 0; i < length; i++) {
-				if (invisibleAnnotationsCounter == 0) break loop;
-				Annotation annotation = annotations[i];
-				if (isRuntimeInvisible(annotation)) {
-					int currentAnnotationOffset = this.contentsOffset;
-					generateAnnotation(annotation, currentAnnotationOffset);
-					invisibleAnnotationsCounter--;
-					if (this.contentsOffset != currentAnnotationOffset) {
-						counter++;
+		int localContentsOffset = this.contentsOffset;
+		StackMapFrameCodeStream stackMapFrameCodeStream = (StackMapFrameCodeStream) this.codeStream;
+		stackMapFrameCodeStream.removeFramePosition(code_length);
+		if (stackMapFrameCodeStream.hasFramePositions()) {
+			ArrayList frames = new ArrayList();
+			traverse(isClinit ? null: methodBinding, max_locals, this.contents, codeAttributeOffset + 14, code_length, frames, isClinit);
+			int numberOfFrames = frames.size();
+			if (numberOfFrames > 1) {
+				int stackMapTableAttributeOffset = localContentsOffset;
+				// add the stack map table attribute
+				if (localContentsOffset + 8 >= this.contents.length) {
+					resizeContents(8);
+				}
+				int stackMapTableAttributeNameIndex =
+					this.constantPool.literalIndex(AttributeNamesConstants.StackMapTableName);
+				this.contents[localContentsOffset++] = (byte) (stackMapTableAttributeNameIndex >> 8);
+				this.contents[localContentsOffset++] = (byte) stackMapTableAttributeNameIndex;
+
+				int stackMapTableAttributeLengthOffset = localContentsOffset;
+				// generate the attribute
+				localContentsOffset += 4;
+				if (localContentsOffset + 4 >= this.contents.length) {
+					resizeContents(4);
+				}
+				int numberOfFramesOffset = localContentsOffset;
+				localContentsOffset += 2;
+				if (localContentsOffset + 2 >= this.contents.length) {
+					resizeContents(2);
+				}
+				StackMapFrame currentFrame = (StackMapFrame) frames.get(0);
+				StackMapFrame prevFrame = null;
+				for (int j = 1; j < numberOfFrames; j++) {
+					// select next frame
+					prevFrame = currentFrame;
+					currentFrame = (StackMapFrame) frames.get(j);
+					// generate current frame
+					// need to find differences between the current frame and the previous frame
+					int offsetDelta = currentFrame.getOffsetDelta(prevFrame);
+					switch (currentFrame.getFrameType(prevFrame)) {
+						case StackMapFrame.APPEND_FRAME :
+							if (localContentsOffset + 3 >= this.contents.length) {
+								resizeContents(3);
+							}
+							int numberOfDifferentLocals = currentFrame.numberOfDifferentLocals(prevFrame);
+							this.contents[localContentsOffset++] = (byte) (251 + numberOfDifferentLocals);
+							this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
+							this.contents[localContentsOffset++] = (byte) offsetDelta;
+							int index = currentFrame.getIndexOfDifferentLocals(numberOfDifferentLocals);
+							int numberOfLocals = currentFrame.getNumberOfLocals();
+							for (int i = index; i < currentFrame.locals.length && numberOfDifferentLocals > 0; i++) {
+								if (localContentsOffset + 6 >= this.contents.length) {
+									resizeContents(6);
+								}
+								VerificationTypeInfo info = currentFrame.locals[i];
+								if (info == null) {
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
+								} else {
+									switch(info.id()) {
+										case T_boolean :
+										case T_byte :
+										case T_char :
+										case T_int :
+										case T_short :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
+											break;
+										case T_float :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
+											break;
+										case T_long :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
+											i++;
+											break;
+										case T_double :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
+											i++;
+											break;
+										case T_null :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
+											break;
+										default:
+											this.contents[localContentsOffset++] = (byte) info.tag;
+											switch (info.tag) {
+												case VerificationTypeInfo.ITEM_UNINITIALIZED :
+													int offset = info.offset;
+													this.contents[localContentsOffset++] = (byte) (offset >> 8);
+													this.contents[localContentsOffset++] = (byte) offset;
+													break;
+												case VerificationTypeInfo.ITEM_OBJECT :
+													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
+													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
+													this.contents[localContentsOffset++] = (byte) indexForType;
+											}
+									}
+									numberOfDifferentLocals--;
+								}
+							}
+							break;
+						case StackMapFrame.SAME_FRAME :
+							if (localContentsOffset + 1 >= this.contents.length) {
+								resizeContents(1);
+							}
+							this.contents[localContentsOffset++] = (byte) offsetDelta;
+							break;
+						case StackMapFrame.SAME_FRAME_EXTENDED :
+							if (localContentsOffset + 3 >= this.contents.length) {
+								resizeContents(3);
+							}
+							this.contents[localContentsOffset++] = (byte) 251;
+							this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
+							this.contents[localContentsOffset++] = (byte) offsetDelta;
+							break;
+						case StackMapFrame.CHOP_FRAME :
+							if (localContentsOffset + 3 >= this.contents.length) {
+								resizeContents(3);
+							}
+							numberOfDifferentLocals = -currentFrame.numberOfDifferentLocals(prevFrame);
+							this.contents[localContentsOffset++] = (byte) (251 - numberOfDifferentLocals);
+							this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
+							this.contents[localContentsOffset++] = (byte) offsetDelta;
+							break;
+						case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS :
+							if (localContentsOffset + 4 >= this.contents.length) {
+								resizeContents(4);
+							}
+							this.contents[localContentsOffset++] = (byte) (offsetDelta + 64);
+							if (currentFrame.stackItems[0] == null) {
+								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
+							} else {
+								switch(currentFrame.stackItems[0].id()) {
+									case T_boolean :
+									case T_byte :
+									case T_char :
+									case T_int :
+									case T_short :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
+										break;
+									case T_float :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
+										break;
+									case T_long :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
+										break;
+									case T_double :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
+										break;
+									case T_null :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
+										break;
+									default:
+										VerificationTypeInfo info = currentFrame.stackItems[0];
+										byte tag = (byte) info.tag;
+										this.contents[localContentsOffset++] = tag;
+										switch (tag) {
+											case VerificationTypeInfo.ITEM_UNINITIALIZED :
+												int offset = info.offset;
+												this.contents[localContentsOffset++] = (byte) (offset >> 8);
+												this.contents[localContentsOffset++] = (byte) offset;
+												break;
+											case VerificationTypeInfo.ITEM_OBJECT :
+												int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
+												this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
+												this.contents[localContentsOffset++] = (byte) indexForType;
+										}
+								}
+							}
+							break;
+						case StackMapFrame.SAME_LOCALS_1_STACK_ITEMS_EXTENDED :
+							if (localContentsOffset + 6 >= this.contents.length) {
+								resizeContents(6);
+							}
+							this.contents[localContentsOffset++] = (byte) 247;
+							this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
+							this.contents[localContentsOffset++] = (byte) offsetDelta;
+							if (currentFrame.stackItems[0] == null) {
+								this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
+							} else {
+								switch(currentFrame.stackItems[0].id()) {
+									case T_boolean :
+									case T_byte :
+									case T_char :
+									case T_int :
+									case T_short :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
+										break;
+									case T_float :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
+										break;
+									case T_long :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
+										break;
+									case T_double :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
+										break;
+									case T_null :
+										this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
+										break;
+									default:
+										VerificationTypeInfo info = currentFrame.stackItems[0];
+										byte tag = (byte) info.tag;
+										this.contents[localContentsOffset++] = tag;
+										switch (tag) {
+											case VerificationTypeInfo.ITEM_UNINITIALIZED :
+												int offset = info.offset;
+												this.contents[localContentsOffset++] = (byte) (offset >> 8);
+												this.contents[localContentsOffset++] = (byte) offset;
+												break;
+											case VerificationTypeInfo.ITEM_OBJECT :
+												int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
+												this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
+												this.contents[localContentsOffset++] = (byte) indexForType;
+										}
+								}
+							}
+							break;
+						default :
+							// FULL_FRAME
+							if (localContentsOffset + 5 >= this.contents.length) {
+								resizeContents(5);
+							}
+							this.contents[localContentsOffset++] = (byte) 255;
+							this.contents[localContentsOffset++] = (byte) (offsetDelta >> 8);
+							this.contents[localContentsOffset++] = (byte) offsetDelta;
+							int numberOfLocalOffset = localContentsOffset;
+							localContentsOffset += 2; // leave two spots for number of locals
+							int numberOfLocalEntries = 0;
+							numberOfLocals = currentFrame.getNumberOfLocals();
+							int numberOfEntries = 0;
+							int localsLength = currentFrame.locals == null ? 0 : currentFrame.locals.length;
+							for (int i = 0; i < localsLength && numberOfLocalEntries < numberOfLocals; i++) {
+								if (localContentsOffset + 3 >= this.contents.length) {
+									resizeContents(3);
+								}
+								VerificationTypeInfo info = currentFrame.locals[i];
+								if (info == null) {
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
+								} else {
+									switch(info.id()) {
+										case T_boolean :
+										case T_byte :
+										case T_char :
+										case T_int :
+										case T_short :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
+											break;
+										case T_float :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
+											break;
+										case T_long :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
+											i++;
+											break;
+										case T_double :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
+											i++;
+											break;
+										case T_null :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
+											break;
+										default:
+											this.contents[localContentsOffset++] = (byte) info.tag;
+											switch (info.tag) {
+												case VerificationTypeInfo.ITEM_UNINITIALIZED :
+													int offset = info.offset;
+													this.contents[localContentsOffset++] = (byte) (offset >> 8);
+													this.contents[localContentsOffset++] = (byte) offset;
+													break;
+												case VerificationTypeInfo.ITEM_OBJECT :
+													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
+													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
+													this.contents[localContentsOffset++] = (byte) indexForType;
+											}
+									}
+									numberOfLocalEntries++;
+								}
+								numberOfEntries++;
+							}
+							if (localContentsOffset + 4 >= this.contents.length) {
+								resizeContents(4);
+							}
+							this.contents[numberOfLocalOffset++] = (byte) (numberOfEntries >> 8);
+							this.contents[numberOfLocalOffset] = (byte) numberOfEntries;
+							int numberOfStackItems = currentFrame.numberOfStackItems;
+							this.contents[localContentsOffset++] = (byte) (numberOfStackItems >> 8);
+							this.contents[localContentsOffset++] = (byte) numberOfStackItems;
+							for (int i = 0; i < numberOfStackItems; i++) {
+								if (localContentsOffset + 3 >= this.contents.length) {
+									resizeContents(3);
+								}
+								VerificationTypeInfo info = currentFrame.stackItems[i];
+								if (info == null) {
+									this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_TOP;
+								} else {
+									switch(info.id()) {
+										case T_boolean :
+										case T_byte :
+										case T_char :
+										case T_int :
+										case T_short :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_INTEGER;
+											break;
+										case T_float :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_FLOAT;
+											break;
+										case T_long :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_LONG;
+											break;
+										case T_double :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_DOUBLE;
+											break;
+										case T_null :
+											this.contents[localContentsOffset++] = (byte) VerificationTypeInfo.ITEM_NULL;
+											break;
+										default:
+											this.contents[localContentsOffset++] = (byte) info.tag;
+											switch (info.tag) {
+												case VerificationTypeInfo.ITEM_UNINITIALIZED :
+													int offset = info.offset;
+													this.contents[localContentsOffset++] = (byte) (offset >> 8);
+													this.contents[localContentsOffset++] = (byte) offset;
+													break;
+												case VerificationTypeInfo.ITEM_OBJECT :
+													int indexForType = this.constantPool.literalIndexForType(info.constantPoolName());
+													this.contents[localContentsOffset++] = (byte) (indexForType >> 8);
+													this.contents[localContentsOffset++] = (byte) indexForType;
+											}
+									}
+								}
+							}
 					}
 				}
-			}
-			if (counter != 0) {
-				this.contents[annotationsLengthOffset++] = (byte) (counter >> 8);
-				this.contents[annotationsLengthOffset++] = (byte) counter;
-
-				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
-				this.contents[attributeLengthOffset++] = (byte) attributeLength;
-				attributesNumber++;
-			} else {
-				this.contentsOffset = annotationAttributeOffset;
-				// reset the constant pool to its state before the clinit
-				this.constantPool.resetForAttributeName(AttributeNamesConstants.RuntimeInvisibleAnnotationsName, constantPoolIndex, constantPOffset);
-			}
-		}
-
-		annotationAttributeOffset = this.contentsOffset;
-		constantPOffset = this.constantPool.currentOffset;
-		constantPoolIndex = this.constantPool.currentIndex;
-		if (visibleAnnotationsCounter != 0) {
-			if (this.contentsOffset + 10 >= this.contents.length) {
-				resizeContents(10);
-			}
-			int runtimeVisibleAnnotationsAttributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeVisibleAnnotationsName);
-			this.contents[this.contentsOffset++] = (byte) (runtimeVisibleAnnotationsAttributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) runtimeVisibleAnnotationsAttributeNameIndex;
-			int attributeLengthOffset = this.contentsOffset;
-			this.contentsOffset += 4; // leave space for the attribute length
-
-			int annotationsLengthOffset = this.contentsOffset;
-			this.contentsOffset += 2; // leave space for the annotations length
 
-			int counter = 0;
-			loop: for (int i = 0; i < length; i++) {
-				if (visibleAnnotationsCounter == 0) break loop;
-				Annotation annotation = annotations[i];
-				if (isRuntimeVisible(annotation)) {
-					visibleAnnotationsCounter--;
-					int currentAnnotationOffset = this.contentsOffset;
-					generateAnnotation(annotation, currentAnnotationOffset);
-					if (this.contentsOffset != currentAnnotationOffset) {
-						counter++;
-					}
+				numberOfFrames--;
+				if (numberOfFrames != 0) {
+					this.contents[numberOfFramesOffset++] = (byte) (numberOfFrames >> 8);
+					this.contents[numberOfFramesOffset] = (byte) numberOfFrames;
+
+					int attributeLength = localContentsOffset - stackMapTableAttributeLengthOffset - 4;
+					this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 24);
+					this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 16);
+					this.contents[stackMapTableAttributeLengthOffset++] = (byte) (attributeLength >> 8);
+					this.contents[stackMapTableAttributeLengthOffset] = (byte) attributeLength;
+					attributesNumber++;
+				} else {
+					localContentsOffset = stackMapTableAttributeOffset;
 				}
 			}
-			if (counter != 0) {
-				this.contents[annotationsLengthOffset++] = (byte) (counter >> 8);
-				this.contents[annotationsLengthOffset++] = (byte) counter;
-
-				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
-				this.contents[attributeLengthOffset++] = (byte) attributeLength;
-				attributesNumber++;
-			} else {
-				this.contentsOffset = annotationAttributeOffset;
-				this.constantPool.resetForAttributeName(AttributeNamesConstants.RuntimeVisibleAnnotationsName, constantPoolIndex, constantPOffset);
-			}
 		}
+		this.contentsOffset = localContentsOffset;
 		return attributesNumber;
 	}
 
-	private int generateRuntimeAnnotationsForParameters(Argument[] arguments) {
-		final int argumentsLength = arguments.length;
-		final int VISIBLE_INDEX = 0;
-		final int INVISIBLE_INDEX = 1;
-		int invisibleParametersAnnotationsCounter = 0;
-		int visibleParametersAnnotationsCounter = 0;
-		int[][] annotationsCounters = new int[argumentsLength][2];
-		for (int i = 0; i < argumentsLength; i++) {
-			Argument argument = arguments[i];
-			Annotation[] annotations = argument.annotations;
-			if (annotations != null) {
-				for (int j = 0, max2 = annotations.length; j < max2; j++) {
-					Annotation annotation = annotations[j];
-					if (isRuntimeInvisible(annotation)) {
-						annotationsCounters[i][INVISIBLE_INDEX]++;
-						invisibleParametersAnnotationsCounter++;
-					} else if (isRuntimeVisible(annotation)) {
-						annotationsCounters[i][VISIBLE_INDEX]++;
-						visibleParametersAnnotationsCounter++;
-					}
-				}
-			}
+	private int generateSyntheticAttribute() {
+		int localContentsOffset = this.contentsOffset;
+		if (localContentsOffset + 6 >= this.contents.length) {
+			resizeContents(6);
 		}
-		int attributesNumber = 0;
-		int annotationAttributeOffset = this.contentsOffset;
-		if (invisibleParametersAnnotationsCounter != 0) {
-			int globalCounter = 0;
-			if (this.contentsOffset + 7 >= this.contents.length) {
-				resizeContents(7);
-			}
-			int attributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeInvisibleParameterAnnotationsName);
-			this.contents[this.contentsOffset++] = (byte) (attributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) attributeNameIndex;
-			int attributeLengthOffset = this.contentsOffset;
-			this.contentsOffset += 4; // leave space for the attribute length
+		int syntheticAttributeNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.SyntheticName);
+		this.contents[localContentsOffset++] = (byte) (syntheticAttributeNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) syntheticAttributeNameIndex;
+		// the length of a synthetic attribute is equals to 0
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contentsOffset = localContentsOffset;
+		return 1;
+	}
 
-			this.contents[this.contentsOffset++] = (byte) argumentsLength;
-			for (int i = 0; i < argumentsLength; i++) {
-				if (this.contentsOffset + 2 >= this.contents.length) {
-					resizeContents(2);
-				}
-				if (invisibleParametersAnnotationsCounter == 0) {
-					this.contents[this.contentsOffset++] = (byte) 0;
-					this.contents[this.contentsOffset++] = (byte) 0;
-				} else {
-					final int numberOfInvisibleAnnotations = annotationsCounters[i][INVISIBLE_INDEX];
-					int invisibleAnnotationsOffset = this.contentsOffset;
-					// leave space for number of annotations
-					this.contentsOffset += 2;
-					int counter = 0;
-					if (numberOfInvisibleAnnotations != 0) {
-						Argument argument = arguments[i];
-						Annotation[] annotations = argument.annotations;
-						for (int j = 0, max = annotations.length; j < max; j++) {
-							Annotation annotation = annotations[j];
-							if (isRuntimeInvisible(annotation)) {
-								int currentAnnotationOffset = this.contentsOffset;
-								generateAnnotation(annotation, currentAnnotationOffset);
-								if (this.contentsOffset != currentAnnotationOffset) {
-									counter++;
-									globalCounter++;
-								}
-								invisibleParametersAnnotationsCounter--;
-							}
-						}
-					}
-					this.contents[invisibleAnnotationsOffset++] = (byte) (counter >> 8);
-					this.contents[invisibleAnnotationsOffset] = (byte) counter;
-				}
-			}
-			if (globalCounter != 0) {
-				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
-				this.contents[attributeLengthOffset++] = (byte) attributeLength;
-				attributesNumber++;
-			} else {
-				// if globalCounter is 0, this means that the code generation for all visible annotations failed
-				this.contentsOffset = annotationAttributeOffset;
-			}
-		}
-		if (visibleParametersAnnotationsCounter != 0) {
-			int globalCounter = 0;
-			if (this.contentsOffset + 7 >= this.contents.length) {
-				resizeContents(7);
-			}
-			int attributeNameIndex =
-				this.constantPool.literalIndex(AttributeNamesConstants.RuntimeVisibleParameterAnnotationsName);
-			this.contents[this.contentsOffset++] = (byte) (attributeNameIndex >> 8);
-			this.contents[this.contentsOffset++] = (byte) attributeNameIndex;
-			int attributeLengthOffset = this.contentsOffset;
-			this.contentsOffset += 4; // leave space for the attribute length
+	private int generateVarargsAttribute() {
+		int localContentsOffset = this.contentsOffset;
+		/*
+		 * handle of the target jsr14 for varargs in the source
+		 * Varargs attribute
+		 * Check that there is enough space to write the attribute
+		 */
+		if (localContentsOffset + 6 >= this.contents.length) {
+			resizeContents(6);
+		}
+		int varargsAttributeNameIndex =
+			this.constantPool.literalIndex(AttributeNamesConstants.VarargsName);
+		this.contents[localContentsOffset++] = (byte) (varargsAttributeNameIndex >> 8);
+		this.contents[localContentsOffset++] = (byte) varargsAttributeNameIndex;
+		// the length of a varargs attribute is equals to 0
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
+		this.contents[localContentsOffset++] = 0;
 
-			this.contents[this.contentsOffset++] = (byte) argumentsLength;
-			for (int i = 0; i < argumentsLength; i++) {
-				if (this.contentsOffset + 2 >= this.contents.length) {
-					resizeContents(2);
-				}
-				if (visibleParametersAnnotationsCounter == 0) {
-					this.contents[this.contentsOffset++] = (byte) 0;
-					this.contents[this.contentsOffset++] = (byte) 0;
-				} else {
-					final int numberOfVisibleAnnotations = annotationsCounters[i][VISIBLE_INDEX];
-					int visibleAnnotationsOffset = this.contentsOffset;
-					// leave space for number of annotations
-					this.contentsOffset += 2;
-					int counter = 0;
-					if (numberOfVisibleAnnotations != 0) {
-						Argument argument = arguments[i];
-						Annotation[] annotations = argument.annotations;
-						for (int j = 0, max = annotations.length; j < max; j++) {
-							Annotation annotation = annotations[j];
-							if (isRuntimeVisible(annotation)) {
-								int currentAnnotationOffset = this.contentsOffset;
-								generateAnnotation(annotation, currentAnnotationOffset);
-								if (this.contentsOffset != currentAnnotationOffset) {
-									counter++;
-									globalCounter++;
-								}
-								visibleParametersAnnotationsCounter--;
-							}
-						}
-					}
-					this.contents[visibleAnnotationsOffset++] = (byte) (counter >> 8);
-					this.contents[visibleAnnotationsOffset] = (byte) counter;
-				}
-			}
-			if (globalCounter != 0) {
-				int attributeLength = this.contentsOffset - attributeLengthOffset - 4;
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 24);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 16);
-				this.contents[attributeLengthOffset++] = (byte) (attributeLength >> 8);
-				this.contents[attributeLengthOffset++] = (byte) attributeLength;
-				attributesNumber++;
-			} else {
-				// if globalCounter is 0, this means that the code generation for all visible annotations failed
-				this.contentsOffset = annotationAttributeOffset;
-			}
-		}
-		return attributesNumber;
+		this.contentsOffset = localContentsOffset;
+		return 1;
 	}
 
 	/**
@@ -6887,6 +3884,10 @@ public class ClassFile implements TypeConstants, TypeIds {
 		if (aType.isAnonymousType()) {
 			accessFlags &= ~ClassFileConstants.AccFinal;
 		}
+		int finalAbstract = ClassFileConstants.AccFinal | ClassFileConstants.AccAbstract;
+		if ((accessFlags & finalAbstract) == finalAbstract) {
+			accessFlags &= ~finalAbstract;
+		}
 		this.enclosingClassFile = parentClassFile;
 		// innerclasses get their names computed at code gen time
 
@@ -6900,20 +3901,35 @@ public class ClassFile implements TypeConstants, TypeIds {
 		if (aType.isInterface()) {
 			superclassNameIndex = this.constantPool.literalIndexForType(ConstantPool.JavaLangObjectConstantPoolName);
 		} else {
-			superclassNameIndex =
-				(aType.superclass == null ? 0 : this.constantPool.literalIndexForType(aType.superclass));
+			if (aType.superclass != null) {
+				 if ((aType.superclass.tagBits & TagBits.HasMissingType) != 0) {
+						superclassNameIndex = this.constantPool.literalIndexForType(ConstantPool.JavaLangObjectConstantPoolName);
+				 } else {
+						superclassNameIndex = this.constantPool.literalIndexForType(aType.superclass);
+				 }
+			} else {
+				superclassNameIndex = 0;
+			}
 		}
 		this.contents[this.contentsOffset++] = (byte) (superclassNameIndex >> 8);
 		this.contents[this.contentsOffset++] = (byte) superclassNameIndex;
 		ReferenceBinding[] superInterfacesBinding = aType.superInterfaces();
 		int interfacesCount = superInterfacesBinding.length;
-		this.contents[this.contentsOffset++] = (byte) (interfacesCount >> 8);
-		this.contents[this.contentsOffset++] = (byte) interfacesCount;
+		int interfacesCountPosition = this.contentsOffset;
+		this.contentsOffset += 2;
+		int interfaceCounter = 0;
 		for (int i = 0; i < interfacesCount; i++) {
-			int interfaceIndex = this.constantPool.literalIndexForType(superInterfacesBinding[i]);
+			ReferenceBinding binding = superInterfacesBinding[i];
+			if ((binding.tagBits & TagBits.HasMissingType) != 0) {
+				continue;
+			}
+			interfaceCounter++;
+			int interfaceIndex = this.constantPool.literalIndexForType(binding);
 			this.contents[this.contentsOffset++] = (byte) (interfaceIndex >> 8);
 			this.contents[this.contentsOffset++] = (byte) interfaceIndex;
 		}
+		this.contents[interfacesCountPosition++] = (byte) (interfaceCounter >> 8);
+		this.contents[interfacesCountPosition] = (byte) interfaceCounter;
 		this.creatingProblemType = createProblemType;
 
 		// retrieve the enclosing one guaranteed to be the one matching the propagated flow info
@@ -7106,31 +4122,6 @@ public class ClassFile implements TypeConstants, TypeIds {
 			}
 		}
 	}
-
-	private boolean isRuntimeInvisible(Annotation annotation) {
-		final TypeBinding annotationBinding = annotation.resolvedType;
-		if (annotationBinding == null) {
-			return false;
-		}
-		long metaTagBits = annotationBinding.getAnnotationTagBits(); // could be forward reference
-		if ((metaTagBits & TagBits.AnnotationRetentionMASK) == 0)
-			return true; // by default the retention is CLASS
-
-		return (metaTagBits & TagBits.AnnotationRetentionMASK) == TagBits.AnnotationClassRetention;
-	}
-
-	private boolean isRuntimeVisible(Annotation annotation) {
-		final TypeBinding annotationBinding = annotation.resolvedType;
-		if (annotationBinding == null) {
-			return false;
-		}
-		long metaTagBits = annotationBinding.getAnnotationTagBits();
-		if ((metaTagBits & TagBits.AnnotationRetentionMASK) == 0)
-			return false; // by default the retention is CLASS
-
-		return (metaTagBits & TagBits.AnnotationRetentionMASK) == TagBits.AnnotationRuntimeRetention;
-	}
-
 	/**
 	 * INTERNAL USE-ONLY
 	 * Returns the most enclosing classfile of the receiver. This is used know to store the constant pool name
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/CompilationResult.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/CompilationResult.java
index f4d1ee3..d82de3c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/CompilationResult.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/CompilationResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,8 +55,8 @@ public class CompilationResult {
 	public int problemCount;
 	public int taskCount;
 	public ICompilationUnit compilationUnit;
-	public Map problemsMap;
-	public Set firstErrors;
+	private Map problemsMap;
+	private Set firstErrors;
 	private int maxProblemPerUnit;
 	public char[][][] qualifiedReferences;
 	public char[][] simpleNameReferences;
@@ -72,6 +72,7 @@ public class CompilationResult {
 	public boolean hasSyntaxError = false;
 	public char[][] packageName;
 	public boolean checkSecondaryTypes = false; // check for secondary types which were created after the initial buildTypeBindings call
+	private int numberOfErrors;
 
 	private static final int[] EMPTY_LINE_ENDS = Util.EMPTY_INT_ARRAY;
 	private static final Comparator PROBLEM_COMPARATOR = new Comparator() {
@@ -270,12 +271,7 @@ public CategorizedProblem[] getTasks() {
 }
 
 public boolean hasErrors() {
-	if (this.problems != null)
-		for (int i = 0; i < this.problemCount; i++) {
-			if (this.problems[i].isError())
-				return true;
-		}
-	return false;
+	return this.numberOfErrors != 0;
 }
 
 public boolean hasProblems() {
@@ -345,8 +341,12 @@ public void record(CategorizedProblem newProblem, ReferenceContext referenceCont
 		if (newProblem.isError() && !referenceContext.hasErrors()) this.firstErrors.add(newProblem);
 		this.problemsMap.put(newProblem, referenceContext);
 	}
-	if ((newProblem.getID() & IProblem.Syntax) != 0 && newProblem.isError())
-		this.hasSyntaxError = true;
+	if (newProblem.isError()) {
+		this.numberOfErrors++;
+		if ((newProblem.getID() & IProblem.Syntax) != 0) {
+			this.hasSyntaxError = true;
+		}
+	}
 }
 
 /**
@@ -368,7 +368,14 @@ private void recordTask(CategorizedProblem newProblem) {
 	}
 	this.tasks[this.taskCount++] = newProblem;
 }
-
+public void removeProblem(CategorizedProblem problem) {
+	if (this.problemsMap != null) this.problemsMap.remove(problem);
+	if (this.firstErrors != null) this.firstErrors.remove(problem);
+	if (problem.isError()) {
+		this.numberOfErrors--;
+	}
+	this.problemCount--;
+}
 public CompilationResult tagAsAccepted(){
 	this.hasBeenAccepted = true;
 	this.problemsMap = null; // flush
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
index 32881da..44a69a0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - contribution for bug 337868 - [compiler][model] incomplete support for package-info.java when using SearchableEnvironment
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler;
 
@@ -352,6 +353,9 @@ public class Compiler implements ITypeRequestor, ProblemSeverities {
 		ICompilationUnit sourceUnit,
 		CompilationUnitDeclaration parsedUnit) {
 
+		if (this.unitsToProcess == null)
+			return; // not collecting units
+
 		// append the unit to the list of ones to process later on
 		int size = this.unitsToProcess.length;
 		if (this.totalUnits == size)
@@ -831,10 +835,26 @@ public class Compiler implements ITypeRequestor, ProblemSeverities {
 				this.annotationProcessorManager.reset();
 			}
 		} while (newUnitSize != 0 || newClassFilesSize != 0);
-		// one more loop to create possible resources
-		// this loop cannot create any java source files
+		
 		this.annotationProcessorManager.processAnnotations(null, null, true);
-		// TODO we might want to check if this loop created new units
+		// process potential units added in the final round see 329156 
+		ICompilationUnit[] newUnits = this.annotationProcessorManager.getNewUnits();
+		newUnitSize = newUnits.length;
+		if (newUnitSize != 0) {
+			ICompilationUnit[] newProcessedUnits = (ICompilationUnit[]) newUnits.clone(); // remember new units in case a source type collision occurs
+			try {
+				this.lookupEnvironment.isProcessingAnnotations = true;
+				internalBeginToCompile(newUnits, newUnitSize);
+			} catch (SourceTypeCollisionException e) {
+				e.newAnnotationProcessorUnits = newProcessedUnits;
+				throw e;
+			} finally {
+				this.lookupEnvironment.isProcessingAnnotations = false;
+				this.annotationProcessorManager.reset();
+			}
+		} else {
+			this.annotationProcessorManager.reset();
+		}
 	}
 
 	public void reset() {
@@ -860,8 +880,18 @@ public class Compiler implements ITypeRequestor, ProblemSeverities {
 				// build and record parsed units
 				this.parseThreshold = 0; // will request a full parse
 				beginToCompile(new ICompilationUnit[] { sourceUnit });
-				// process all units (some more could be injected in the loop by the lookup environment)
-				unit = this.unitsToProcess[0];
+				// find the right unit from what was injected via accept(ICompilationUnit,..):
+				for (int i=0; i<this.totalUnits; i++) {
+					if (   this.unitsToProcess[i] != null
+						&& this.unitsToProcess[i].compilationResult.compilationUnit == sourceUnit)
+					{
+						unit = this.unitsToProcess[i];
+						break;
+					}
+				}
+				if (unit == null)
+					unit = this.unitsToProcess[0]; // fall back to old behavior
+
 			} else {
 				// initial type binding creation
 				this.lookupEnvironment.buildTypeBindings(unit, null /*no access restriction*/);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AND_AND_Expression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AND_AND_Expression.java
index a409d4b..ce3da94 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AND_AND_Expression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AND_AND_Expression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -56,10 +57,16 @@ public class AND_AND_Expression extends BinaryExpression {
 		if (isLeftOptimizedFalse) {
 			if ((rightInfo.reachMode() & FlowInfo.UNREACHABLE) == 0) {
 				currentScope.problemReporter().fakeReachable(this.right);
-				rightInfo.setReachMode(FlowInfo.UNREACHABLE);
+				rightInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 			}
 		}
 		rightInfo = this.right.analyseCode(currentScope, flowContext, rightInfo);
+		if ((this.left.implicitConversion & TypeIds.UNBOXING) != 0) {
+			this.left.checkNPE(currentScope, flowContext, flowInfo);
+		}
+		if ((this.right.implicitConversion & TypeIds.UNBOXING) != 0) {
+			this.right.checkNPE(currentScope, flowContext, flowInfo);
+		}
 		FlowInfo mergedInfo = FlowInfo.conditional(
 				rightInfo.safeInitsWhenTrue(),
 				leftInfo.initsWhenFalse().unconditionalInits().mergedWith(
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
index 973407e..83415ef 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Matt McCutchen - partial fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=122995
  *     Karen Moore - fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=207411
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -25,13 +26,13 @@ public abstract class ASTNode implements TypeConstants, TypeIds {
 	// storage for internal flags (32 bits)				BIT USAGE
 	public final static int Bit1 = 0x1;					// return type (operator) | name reference kind (name ref) | add assertion (type decl) | useful empty statement (empty statement)
 	public final static int Bit2 = 0x2;					// return type (operator) | name reference kind (name ref) | has local type (type, method, field decl)
-	public final static int Bit3 = 0x4;					// return type (operator) | name reference kind (name ref) | implicit this (this ref)
+	public final static int Bit3 = 0x4;					// return type (operator) | name reference kind (name ref) | implicit this (this ref) | locals (isArgument)
 	public final static int Bit4 = 0x8;					// return type (operator) | first assignment to local (name ref,local decl) | undocumented empty block (block, type and method decl)
 	public final static int Bit5 = 0x10;					// value for return (expression) | has all method bodies (unit) | supertype ref (type ref) | resolved (field decl)
 	public final static int Bit6 = 0x20;					// depth (name ref, msg) | ignore need cast check (cast expression) | error in signature (method declaration/ initializer) | is recovered (annotation reference)
 	public final static int Bit7 = 0x40;					// depth (name ref, msg) | operator (operator) | need runtime checkcast (cast expression) | label used (labelStatement) | needFreeReturn (AbstractMethodDeclaration)
 	public final static int Bit8 = 0x80;					// depth (name ref, msg) | operator (operator) | unsafe cast (cast expression) | is default constructor (constructor declaration) | isElseStatementUnreachable (if statement)
-	public final static int Bit9 = 0x100;				// depth (name ref, msg) | operator (operator) | is local type (type decl) | isThenStatementUnreachable (if statement)
+	public final static int Bit9 = 0x100;				// depth (name ref, msg) | operator (operator) | is local type (type decl) | isThenStatementUnreachable (if statement) | can be static
 	public final static int Bit10= 0x200;				// depth (name ref, msg) | operator (operator) | is anonymous type (type decl)
 	public final static int Bit11 = 0x400;				// depth (name ref, msg) | operator (operator) | is member type (type decl)
 	public final static int Bit12 = 0x800;				// depth (name ref, msg) | operator (operator) | has abstract methods (type decl)
@@ -112,6 +113,9 @@ public abstract class ASTNode implements TypeConstants, TypeIds {
 	// for name refs or local decls
 	public static final int FirstAssignmentToLocal = Bit4;
 
+	// for local decls
+	public static final int IsArgument = Bit3;
+
 	// for msg or field references
 	public static final int NeedReceiverGenericCast = Bit19;
 	
@@ -162,12 +166,16 @@ public abstract class ASTNode implements TypeConstants, TypeIds {
 	// for all method/constructor invocations (msg, alloc, expl. constr call)
 	public static final int Unchecked = Bit17;
 	
+	// for javadoc - used to indicate whether the javadoc has to be resolved
+	public static final int ResolveJavadoc = Bit17;
+	
 	// for empty statement
 	public static final int IsUsefulEmptyStatement = Bit1;
 
 	// for block and method declaration
 	public static final int UndocumentedEmptyBlock = Bit4;
 	public static final int OverridingMethodWithSupercall = Bit5;
+	public static final int CanBeStatic = Bit9;   // used to flag a method that can be declared static
 
 	// for initializer and method declaration
 	public static final int ErrorInSignature = Bit6;
@@ -291,7 +299,7 @@ public abstract class ASTNode implements TypeConstants, TypeIds {
 					invocationStatus |= checkInvocationArgument(scope, arguments[i], params[i] , argumentTypes[i], originalRawParam);
 				}
 			   int argLength = arguments.length;
-			   if (lastIndex < argLength) { // vararg argument was provided
+			   if (lastIndex <= argLength) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=337093
 				   	TypeBinding parameterType = params[lastIndex];
 					TypeBinding originalRawParam = null;
 
@@ -342,7 +350,9 @@ public abstract class ASTNode implements TypeConstants, TypeIds {
 		if ((invocationStatus & INVOCATION_ARGUMENT_WILDCARD) != 0) {
 		    scope.problemReporter().wildcardInvocation((ASTNode)invocationSite, receiverType, method, argumentTypes);
 		} else if (!method.isStatic() && !receiverType.isUnboundWildcard() && method.declaringClass.isRawType() && method.hasSubstitutedParameters()) {
-		    scope.problemReporter().unsafeRawInvocation((ASTNode)invocationSite, method);
+			if (scope.compilerOptions().reportUnavoidableGenericTypeProblems || receiver == null || !receiver.forcedToBeRaw(scope.referenceContext())) {
+				scope.problemReporter().unsafeRawInvocation((ASTNode)invocationSite, method);
+			}
 		} else if (rawOriginalGenericMethod != null 
 				|| uncheckedBoundCheck
 				|| ((invocationStatus & INVOCATION_ARGUMENT_UNCHECKED) != 0 
@@ -357,11 +367,17 @@ public abstract class ASTNode implements TypeConstants, TypeIds {
 		return this;
 	}
 
-	public final boolean isFieldUseDeprecated(FieldBinding field, Scope scope, boolean isStrictlyAssigned) {
-		// ignore references insing Javadoc comments
-		if ((this.bits & ASTNode.InsideJavadoc) == 0 && !isStrictlyAssigned && field.isOrEnclosedByPrivateType() && !scope.isDefinedInField(field)) {
-			// ignore cases where field is used from inside itself
-			field.original().modifiers |= ExtraCompilerModifiers.AccLocallyUsed;
+	public final boolean isFieldUseDeprecated(FieldBinding field, Scope scope, int filteredBits) {
+		if ((this.bits & ASTNode.InsideJavadoc) == 0			// ignore references inside Javadoc comments 
+				&& (filteredBits & IsStrictlyAssigned) == 0 	// ignore write access
+				&& field.isOrEnclosedByPrivateType() 
+				&& !scope.isDefinedInField(field)) 				// ignore cases where field is used from inside itself 
+		{		
+			if (((filteredBits & IsCompoundAssigned) != 0))
+				// used, but usage may not be relevant
+				field.original().compoundUseFlag++;
+			else
+				field.original().modifiers |= ExtraCompilerModifiers.AccLocallyUsed;
 		}
 
 		if ((field.modifiers & ExtraCompilerModifiers.AccRestrictedAccess) != 0) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java
index c01b5a6..228e6e8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AbstractMethodDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,36 +173,48 @@ public abstract class AbstractMethodDeclaration
 			classFile.addProblemMethod(this, this.binding, problemsCopy);
 			return;
 		}
+		boolean restart = false;
+		boolean abort = false;
 		// regular code generation
-		try {
-			problemResetPC = classFile.contentsOffset;
-			this.generateCode(classFile);
-		} catch (AbortMethod e) {
-			// a fatal error was detected during code generation, need to restart code gen if possible
-			if (e.compilationResult == CodeStream.RESTART_IN_WIDE_MODE) {
-				// a branch target required a goto_w, restart code gen in wide mode.
-				try {
+		do {
+			try {
+				problemResetPC = classFile.contentsOffset;
+				this.generateCode(classFile);
+				restart = false;
+			} catch (AbortMethod e) {
+				// a fatal error was detected during code generation, need to restart code gen if possible
+				if (e.compilationResult == CodeStream.RESTART_IN_WIDE_MODE) {
+					// a branch target required a goto_w, restart code gen in wide mode.
+					if (!restart) {
+						classFile.contentsOffset = problemResetPC;
+						classFile.methodCount--;
+						classFile.codeStream.resetInWideMode(); // request wide mode
+						restart = true;
+					} else {
+						// after restarting in wide mode, code generation failed again
+						// report a problem
+						restart = false;
+						abort = true;
+					}
+				} else if (e.compilationResult == CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE) {
 					classFile.contentsOffset = problemResetPC;
 					classFile.methodCount--;
-					classFile.codeStream.resetInWideMode(); // request wide mode
-					this.generateCode(classFile); // restart method generation
-				} catch (AbortMethod e2) {
-					int problemsLength;
-					CategorizedProblem[] problems =
-						this.scope.referenceCompilationUnit().compilationResult.getAllProblems();
-					CategorizedProblem[] problemsCopy = new CategorizedProblem[problemsLength = problems.length];
-					System.arraycopy(problems, 0, problemsCopy, 0, problemsLength);
-					classFile.addProblemMethod(this, this.binding, problemsCopy, problemResetPC);
+					classFile.codeStream.resetForCodeGenUnusedLocals();
+					restart = true;
+				} else {
+					restart = false;
+					abort = true; 
 				}
-			} else {
-				// produce a problem method accounting for this fatal error
-				int problemsLength;
-				CategorizedProblem[] problems =
-					this.scope.referenceCompilationUnit().compilationResult.getAllProblems();
-				CategorizedProblem[] problemsCopy = new CategorizedProblem[problemsLength = problems.length];
-				System.arraycopy(problems, 0, problemsCopy, 0, problemsLength);
-				classFile.addProblemMethod(this, this.binding, problemsCopy, problemResetPC);
 			}
+		} while (restart);
+		// produce a problem method accounting for this fatal error
+		if (abort) {
+			int problemsLength;
+			CategorizedProblem[] problems =
+				this.scope.referenceCompilationUnit().compilationResult.getAllProblems();
+			CategorizedProblem[] problemsCopy = new CategorizedProblem[problemsLength = problems.length];
+			System.arraycopy(problems, 0, problemsCopy, 0, problemsLength);
+			classFile.addProblemMethod(this, this.binding, problemsCopy, problemResetPC);
 		}
 	}
 
@@ -210,7 +222,7 @@ public abstract class AbstractMethodDeclaration
 
 		classFile.generateMethodInfoHeader(this.binding);
 		int methodAttributeOffset = classFile.contentsOffset;
-		int attributeNumber = classFile.generateMethodInfoAttribute(this.binding);
+		int attributeNumber = classFile.generateMethodInfoAttributes(this.binding);
 		if ((!this.binding.isNative()) && (!this.binding.isAbstract())) {
 			int codeAttributeOffset = classFile.contentsOffset;
 			classFile.generateCodeAttributeHeader();
@@ -250,12 +262,12 @@ public abstract class AbstractMethodDeclaration
 		} else {
 			checkArgumentsSize();
 		}
-		classFile.completeMethodInfo(methodAttributeOffset, attributeNumber);
+		classFile.completeMethodInfo(this.binding, methodAttributeOffset, attributeNumber);
 	}
 
 	private void checkArgumentsSize() {
 		TypeBinding[] parameters = this.binding.parameters;
-		int size = 1; // an abstact method or a native method cannot be static
+		int size = 1; // an abstract method or a native method cannot be static
 		for (int i = 0, max = parameters.length; i < max; i++) {
 			switch(parameters[i].id) {
 				case TypeIds.T_long :
@@ -451,7 +463,9 @@ public abstract class AbstractMethodDeclaration
 				this.statements[i].resolve(this.scope);
 			}
 		} else if ((this.bits & UndocumentedEmptyBlock) != 0) {
-			this.scope.problemReporter().undocumentedEmptyBlock(this.bodyStart-1, this.bodyEnd+1);
+			if (!this.isConstructor() || this.arguments != null) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=319626
+				this.scope.problemReporter().undocumentedEmptyBlock(this.bodyStart-1, this.bodyEnd+1);
+			}
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
index 56d0b91..8033bc7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,9 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Stephan Herrmann - Contribution for bug 236385
+ *     Stephan Herrmann - Contributions for 
+ *     						bug 236385 - [compiler] Warn for potential programming problem if an object is created but not used
+ *     						bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -39,6 +41,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 				this.arguments[i]
 					.analyseCode(currentScope, flowContext, flowInfo)
 					.unconditionalInits();
+			if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
+				this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
+			}
 		}
 	}
 	// record some dependency information for exception types
@@ -55,6 +60,11 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 			flowInfo.unconditionalCopy(),
 			currentScope);
 	}
+	if (this.binding.declaringClass.isMemberType() && !this.binding.declaringClass.isStatic()) {
+		// allocating a non-static member type without an enclosing instance of parent type
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335845
+		currentScope.resetEnclosingMethodStaticFlag();
+	}
 	manageEnclosingInstanceAccessIfNecessary(currentScope, flowInfo);
 	manageSyntheticAccessIfNecessary(currentScope, flowInfo);
 
@@ -174,7 +184,7 @@ public boolean isTypeAccess() {
  * exact need.
  */
 public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) return;
 	ReferenceBinding allocatedTypeErasure = (ReferenceBinding) this.binding.declaringClass.erasure();
 
 	// perform some emulation work in case there is some and we are inside a local type only
@@ -193,7 +203,7 @@ public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, Fl
 }
 
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) return;
 	// if constructor from parameterized type got found, use the original constructor at codegen time
 	MethodBinding codegenBinding = this.binding.original();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Annotation.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Annotation.java
index ecf56bf..240ac53 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Annotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Annotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -169,6 +169,30 @@ public abstract class Annotation extends Expression {
 		return this.compilerAnnotation;
 	}
 
+	public boolean isRuntimeInvisible() {
+		final TypeBinding annotationBinding = this.resolvedType;
+		if (annotationBinding == null) {
+			return false;
+		}
+		long metaTagBits = annotationBinding.getAnnotationTagBits(); // could be forward reference
+		if ((metaTagBits & TagBits.AnnotationRetentionMASK) == 0)
+			return true; // by default the retention is CLASS
+
+		return (metaTagBits & TagBits.AnnotationRetentionMASK) == TagBits.AnnotationClassRetention;
+	}
+
+	public boolean isRuntimeVisible() {
+		final TypeBinding annotationBinding = this.resolvedType;
+		if (annotationBinding == null) {
+			return false;
+		}
+		long metaTagBits = annotationBinding.getAnnotationTagBits();
+		if ((metaTagBits & TagBits.AnnotationRetentionMASK) == 0)
+			return false; // by default the retention is CLASS
+
+		return (metaTagBits & TagBits.AnnotationRetentionMASK) == TagBits.AnnotationRuntimeRetention;
+	}
+
 	public abstract MemberValuePair[] memberValuePairs();
 
 	public StringBuffer printExpression(int indent, StringBuffer output) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AnnotationMethodDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AnnotationMethodDeclaration.java
index 52a2fc8..8860ec6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AnnotationMethodDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AnnotationMethodDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,8 +32,8 @@ public class AnnotationMethodDeclaration extends MethodDeclaration {
 	public void generateCode(ClassFile classFile) {
 		classFile.generateMethodInfoHeader(this.binding);
 		int methodAttributeOffset = classFile.contentsOffset;
-		int attributeNumber = classFile.generateMethodInfoAttribute(this.binding, this);
-		classFile.completeMethodInfo(methodAttributeOffset, attributeNumber);
+		int attributeNumber = classFile.generateMethodInfoAttributes(this.binding, this);
+		classFile.completeMethodInfo(this.binding, methodAttributeOffset, attributeNumber);
 	}
 
 	public boolean isAnnotationMethod() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java
index cb47efc..ea31156 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,9 @@ public class Argument extends LocalDeclaration {
 		this.declarationSourceEnd = (int) posNom;
 		this.modifiers = modifiers;
 		this.type = tr;
-		this.bits |= IsLocalDeclarationReachable;
+		// always an argument by default. The bit IsArgument will be clear when this is used as
+		// catch formal parameter
+		this.bits |= (IsLocalDeclarationReachable | IsArgument);
 	}
 
 	public void bind(MethodScope scope, TypeBinding typeBinding, boolean used) {
@@ -74,7 +76,7 @@ public class Argument extends LocalDeclaration {
 	 * @see org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration#getKind()
 	 */
 	public int getKind() {
-		return PARAMETER;
+		return (this.bits & ASTNode.IsArgument) != 0 ? PARAMETER : LOCAL_VARIABLE;
 	}
 
 	public boolean isVarArgs() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayAllocationExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayAllocationExpression.java
index fc52f7f..e638dc6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayAllocationExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayAllocationExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -30,6 +31,9 @@ public class ArrayAllocationExpression extends Expression {
 			Expression dim;
 			if ((dim = this.dimensions[i]) != null) {
 				flowInfo = dim.analyseCode(currentScope, flowContext, flowInfo);
+				if ((dim.implicitConversion & TypeIds.UNBOXING) != 0) {
+					dim.checkNPE(currentScope, flowContext, flowInfo);
+				}
 			}
 		}
 		if (this.initializer != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java
index 832b413..803966a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,10 @@ public class ArrayQualifiedTypeReference extends QualifiedTypeReference {
 		try {
 			env.missingClassFileLocation = this;
 			TypeBinding leafComponentType = super.getTypeBinding(scope);
-			return this.resolvedType = scope.createArrayType(leafComponentType, this.dimensions);
+			if (leafComponentType != null) {
+				return this.resolvedType = scope.createArrayType(leafComponentType, this.dimensions);
+			}
+			return null;
 		} catch (AbortCompilation e) {
 			e.updateContext(this, scope.referenceCompilationUnit().compilationResult);
 			throw e;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AssertStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AssertStatement.java
index bab16b3..efef338 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AssertStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AssertStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,12 +7,14 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.codegen.*;
 import org.eclipse.jdt.internal.compiler.flow.*;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.eclipse.jdt.internal.compiler.impl.Constant;
 import org.eclipse.jdt.internal.compiler.lookup.*;
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
@@ -42,6 +44,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 	this.preAssertInitStateIndex = currentScope.methodScope().recordInitializationStates(flowInfo);
 
 	Constant cst = this.assertExpression.optimizedBooleanConstant();
+	if ((this.assertExpression.implicitConversion & TypeIds.UNBOXING) != 0) {
+		this.assertExpression.checkNPE(currentScope, flowContext, flowInfo);
+	}
 	boolean isOptimizedTrueAssertion = cst != Constant.NotAConstant && cst.booleanValue() == true;
 	boolean isOptimizedFalseAssertion = cst != Constant.NotAConstant && cst.booleanValue() == false;
 	
@@ -51,7 +56,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 	UnconditionalFlowInfo assertWhenTrueInfo = conditionFlowInfo.initsWhenTrue().unconditionalInits();
 	FlowInfo assertInfo = conditionFlowInfo.initsWhenFalse();
 	if (isOptimizedTrueAssertion) {
-		assertInfo.setReachMode(FlowInfo.UNREACHABLE);
+		assertInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 	}
 
 	if (this.exceptionArgument != null) {
@@ -78,6 +83,13 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 		// change this if we need to carry null analysis results of the assert
 		// expression downstream
 	} else {
+		CompilerOptions compilerOptions = currentScope.compilerOptions();
+		if (!compilerOptions.includeNullInfoFromAsserts) {
+			// keep just the initializations info, don't include assert's null info
+			// merge initialization info's and then add back the null info from flowInfo to
+			// make sure that the empty null info of assertInfo doesnt change flowInfo's null info.
+			return ((flowInfo.nullInfoLessUnconditionalCopy()).mergedWith(assertInfo.nullInfoLessUnconditionalCopy())).addNullInfoFrom(flowInfo);
+		}
 		return flowInfo.mergedWith(assertInfo.nullInfoLessUnconditionalCopy()).
 			addInitializationsFrom(assertWhenTrueInfo.discardInitializationInfo());
 		// keep the merge from the initial code for the definite assignment
@@ -162,7 +174,7 @@ public void traverse(ASTVisitor visitor, BlockScope scope) {
 }
 
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 		// need assertion flag: $assertionsDisabled on outer most source clas
 		// (in case of static member of interface, will use the outermost static member - bug 22334)
 		SourceTypeBinding outerMostClass = currentScope.enclosingSourceType();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java
index ec68428..11f1459 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java
@@ -8,6 +8,10 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Genady Beriozkin - added support for reporting assignment with no effect
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contributions for 
+ * 							bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
+ * 							bug 292478 - Report potentially null across variable assignment
+ *     						bug 335093 - [compiler][null] minimal hook for future null annotation support
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -37,6 +41,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 // a field reference, a blank final field reference, a field of an enclosing instance or
 // just a local variable.
 	LocalVariableBinding local = this.lhs.localVariableBinding();
+	if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
+		this.expression.checkNPE(currentScope, flowContext, flowInfo);
+	}
 	flowInfo = ((Reference) this.lhs)
 		.analyseAssignment(currentScope, flowContext, flowInfo, this, false)
 		.unconditionalInits();
@@ -47,29 +54,11 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 				FlowContext.CAN_ONLY_NULL | FlowContext.IN_ASSIGNMENT, flowInfo);
 		}
 	}
+	nullStatus = checkAgainstNullAnnotation(currentScope, local, nullStatus);
 	if (local != null && (local.type.tagBits & TagBits.IsBaseType) == 0) {
-		switch(nullStatus) {
-			case FlowInfo.NULL :
-				flowInfo.markAsDefinitelyNull(local);
-				break;
-			case FlowInfo.NON_NULL :
-				flowInfo.markAsDefinitelyNonNull(local);
-				break;
-			default:
-				flowInfo.markAsDefinitelyUnknown(local);
-		}
-		if (flowContext.initsOnFinally != null) {
-			switch(nullStatus) {
-				case FlowInfo.NULL :
-					flowContext.initsOnFinally.markAsDefinitelyNull(local);
-					break;
-				case FlowInfo.NON_NULL :
-					flowContext.initsOnFinally.markAsDefinitelyNonNull(local);
-					break;
-				default:
-					flowContext.initsOnFinally.markAsDefinitelyUnknown(local);
-			}
-		}
+		flowInfo.markNullStatus(local, nullStatus);
+		if (flowContext.initsOnFinally != null)
+			flowContext.initsOnFinally.markNullStatus(local, nullStatus);
 	}
 	return flowInfo;
 }
@@ -160,7 +149,7 @@ public TypeBinding resolveType(BlockScope scope) {
 	}
 	// check for assignment with no effect
 	Binding left = getDirectBinding(this.lhs);
-	if (left != null && left == getDirectBinding(this.expression)) {
+	if (left != null && !left.isVolatile() && left == getDirectBinding(this.expression)) {
 		scope.problemReporter().assignmentHasNoEffect(this, left.shortReadableName());
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.java
index 3712e62..3c59918 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,8 +82,8 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 }
 
 public StringBuffer printStatement(int tab, StringBuffer output) {
-	printIndent(tab, output).append("break "); //$NON-NLS-1$
-	if (this.label != null) output.append(this.label);
+	printIndent(tab, output).append("break"); //$NON-NLS-1$
+	if (this.label != null) output.append(' ').append(this.label);
 	return output.append(';');
 }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java
index 7eb4c34..42bf559 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,12 +53,12 @@ public FlowInfo analyseCode(
 public StringBuffer printStatement(int tab, StringBuffer output) {
 	printIndent(tab, output);
 	if (this.constantExpression == null) {
-		output.append("default : "); //$NON-NLS-1$
+		output.append("default :"); //$NON-NLS-1$
 	} else {
 		output.append("case "); //$NON-NLS-1$
-		this.constantExpression.printExpression(0, output).append(" : "); //$NON-NLS-1$
+		this.constantExpression.printExpression(0, output).append(" :"); //$NON-NLS-1$
 	}
-	return output.append(';');
+	return output;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
index 5c4c539..569a32b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Nick Teryaev - fix for bug (https://bugs.eclipse.org/bugs/show_bug.cgi?id=40752)
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -36,20 +37,24 @@ import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
 public class CastExpression extends Expression {
 
 	public Expression expression;
-	public Expression type;
+	public TypeReference type;
 	public TypeBinding expectedType; // when assignment conversion to a given expected type: String s = (String) t;
 
 //expression.implicitConversion holds the cast for baseType casting
-public CastExpression(Expression expression, Expression type) {
+public CastExpression(Expression expression, TypeReference type) {
 	this.expression = expression;
 	this.type = type;
 	type.bits |= ASTNode.IgnoreRawTypeCheck; // no need to worry about raw type usage
 }
 
 public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
-	return this.expression
+	FlowInfo result = this.expression
 		.analyseCode(currentScope, flowContext, flowInfo)
 		.unconditionalInits();
+	if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
+		this.expression.checkNPE(currentScope, flowContext, flowInfo);
+	}
+	return result;
 }
 
 /**
@@ -471,53 +476,46 @@ public TypeBinding resolveType(BlockScope scope) {
 	this.constant = Constant.NotAConstant;
 	this.implicitConversion = TypeIds.T_undefined;
 
-	if ((this.type instanceof TypeReference) || (this.type instanceof NameReference)
-			&& ((this.type.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT) == 0) { // no extra parenthesis around type: ((A))exp
-
-		boolean exprContainCast = false;
+	boolean exprContainCast = false;
 
-		TypeBinding castType = this.resolvedType = this.type.resolveType(scope);
-		//expression.setExpectedType(this.resolvedType); // needed in case of generic method invocation
-		if (this.expression instanceof CastExpression) {
-			this.expression.bits |= ASTNode.DisableUnnecessaryCastCheck;
-			exprContainCast = true;
-		}
-		TypeBinding expressionType = this.expression.resolveType(scope);
-		if (castType != null) {
-			if (expressionType != null) {
-				boolean isLegal = checkCastTypesCompatibility(scope, castType, expressionType, this.expression);
-				if (isLegal) {
-					this.expression.computeConversion(scope, castType, expressionType);
-					if ((this.bits & ASTNode.UnsafeCast) != 0) { // unsafe cast
+	TypeBinding castType = this.resolvedType = this.type.resolveType(scope);
+	//expression.setExpectedType(this.resolvedType); // needed in case of generic method invocation
+	if (this.expression instanceof CastExpression) {
+		this.expression.bits |= ASTNode.DisableUnnecessaryCastCheck;
+		exprContainCast = true;
+	}
+	TypeBinding expressionType = this.expression.resolveType(scope);
+	if (castType != null) {
+		if (expressionType != null) {
+			boolean isLegal = checkCastTypesCompatibility(scope, castType, expressionType, this.expression);
+			if (isLegal) {
+				this.expression.computeConversion(scope, castType, expressionType);
+				if ((this.bits & ASTNode.UnsafeCast) != 0) { // unsafe cast
+					if (scope.compilerOptions().reportUnavoidableGenericTypeProblems || !this.expression.forcedToBeRaw(scope.referenceContext())) {
 						scope.problemReporter().unsafeCast(this, scope);
-					} else {
-						if (castType.isRawType() && scope.compilerOptions().getSeverity(CompilerOptions.RawTypeReference) != ProblemSeverities.Ignore){
-							scope.problemReporter().rawTypeReference(this.type, castType);
-						}
-						if ((this.bits & (ASTNode.UnnecessaryCast|ASTNode.DisableUnnecessaryCastCheck)) == ASTNode.UnnecessaryCast) { // unnecessary cast
-							if (!isIndirectlyUsed()) // used for generic type inference or boxing ?
-								scope.problemReporter().unnecessaryCast(this);
-						}
 					}
-				} else { // illegal cast
-					if ((castType.tagBits & TagBits.HasMissingType) == 0) { // no complaint if secondary error
-						scope.problemReporter().typeCastError(this, castType, expressionType);
+				} else {
+					if (castType.isRawType() && scope.compilerOptions().getSeverity(CompilerOptions.RawTypeReference) != ProblemSeverities.Ignore){
+						scope.problemReporter().rawTypeReference(this.type, castType);
+					}
+					if ((this.bits & (ASTNode.UnnecessaryCast|ASTNode.DisableUnnecessaryCastCheck)) == ASTNode.UnnecessaryCast) { // unnecessary cast
+						if (!isIndirectlyUsed()) // used for generic type inference or boxing ?
+							scope.problemReporter().unnecessaryCast(this);
 					}
-					this.bits |= ASTNode.DisableUnnecessaryCastCheck; // disable further secondary diagnosis
 				}
+			} else { // illegal cast
+				if ((castType.tagBits & TagBits.HasMissingType) == 0) { // no complaint if secondary error
+					scope.problemReporter().typeCastError(this, castType, expressionType);
+				}
+				this.bits |= ASTNode.DisableUnnecessaryCastCheck; // disable further secondary diagnosis
 			}
-			this.resolvedType = castType.capture(scope, this.sourceEnd);
-			if (exprContainCast) {
-				checkNeedForCastCast(scope, this);
-			}
 		}
-		return this.resolvedType;
-	} else { // expression as a cast
-		TypeBinding expressionType = this.expression.resolveType(scope);
-		if (expressionType == null) return null;
-		scope.problemReporter().invalidTypeReference(this.type);
-		return null;
+		this.resolvedType = castType.capture(scope, this.sourceEnd);
+		if (exprContainCast) {
+			checkNeedForCastCast(scope, this);
+		}
 	}
+	return this.resolvedType;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ClassLiteralAccess.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ClassLiteralAccess.java
index c5d33bd..12b39cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ClassLiteralAccess.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ClassLiteralAccess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ public class ClassLiteralAccess extends Expression {
 		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=22334
 		if (!sourceType.isInterface()
 				&& !this.targetType.isBaseType()
-				&& currentScope.compilerOptions().sourceLevel < ClassFileConstants.JDK1_5) {
+				&& currentScope.compilerOptions().targetJDK < ClassFileConstants.JDK1_5) {
 			this.syntheticField = sourceType.addSyntheticFieldForClassLiteral(this.targetType, currentScope);
 		}
 		return flowInfo;
@@ -77,6 +77,16 @@ public class ClassLiteralAccess extends Expression {
 		this.constant = Constant.NotAConstant;
 		if ((this.targetType = this.type.resolveType(scope, true /* check bounds*/)) == null)
 			return null;
+		
+		/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=320463
+		   https://bugs.eclipse.org/bugs/show_bug.cgi?id=312076
+		   JLS3 15.8.2 forbids the type named in the class literal expression from being a parameterized type.
+		   And the grammar in 18.1 disallows (where X and Y are some concrete types) constructs of the form
+		   Outer<X>.class, Outer<X>.Inner.class, Outer.Inner<X>.class, Outer<X>.Inner<Y>.class etc.
+		   Corollary wise, we should resolve the type of the class literal expression to be a raw type as
+		   class literals exist only for the raw underlying type. 
+		 */
+		this.targetType = scope.environment().convertToRawType(this.targetType, true /* force conversion of enclosing types*/);
 
 		if (this.targetType.isArrayType()) {
 			ArrayBinding arrayBinding = (ArrayBinding) this.targetType;
@@ -91,7 +101,8 @@ public class ClassLiteralAccess extends Expression {
 			scope.problemReporter().illegalClassLiteralForTypeVariable((TypeVariableBinding)this.targetType, this);
 		}
 		ReferenceBinding classType = scope.getJavaLangClass();
-		if (classType.isGenericType()) {
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328689
+		if (scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) {
 			// Integer.class --> Class<Integer>, perform boxing of base types (int.class --> Class<Integer>)
 			TypeBinding boxedType = null;
 			if (this.targetType.id == T_void) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Clinit.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Clinit.java
index 8741654..d7558e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Clinit.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Clinit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,11 +26,13 @@ import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
 import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodScope;
 import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
+import org.eclipse.jdt.internal.compiler.lookup.SyntheticMethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
 import org.eclipse.jdt.internal.compiler.parser.Parser;
 import org.eclipse.jdt.internal.compiler.problem.AbortMethod;
 
 public class Clinit extends AbstractMethodDeclaration {
+	private static int ENUM_CONSTANTS_THRESHOLD = 2000;
 
 	private FieldBinding assertionSyntheticFieldBinding = null;
 	private FieldBinding classLiteralSyntheticField = null;
@@ -59,7 +61,7 @@ public class Clinit extends AbstractMethodDeclaration {
 					FlowInfo.DEAD_END);
 
 			// check for missing returning path
-			if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+			if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 				this.bits |= ASTNode.NeedFreeReturn;
 			}
 
@@ -100,35 +102,46 @@ public class Clinit extends AbstractMethodDeclaration {
 			// should never have to add any <clinit> problem method
 			return;
 		}
-		try {
-			clinitOffset = classFile.contentsOffset;
-			this.generateCode(classScope, classFile, clinitOffset);
-		} catch (AbortMethod e) {
-			// should never occur
-			// the clinit referenceContext is the type declaration
-			// All clinit problems will be reported against the type: AbortType instead of AbortMethod
-			// reset the contentsOffset to the value before generating the clinit code
-			// decrement the number of method info as well.
-			// This is done in the addProblemMethod and addProblemConstructor for other
-			// cases.
-			if (e.compilationResult == CodeStream.RESTART_IN_WIDE_MODE) {
-				// a branch target required a goto_w, restart code gen in wide mode.
-				try {
+		boolean restart = false;
+		do {
+			try {
+				clinitOffset = classFile.contentsOffset;
+				this.generateCode(classScope, classFile, clinitOffset);
+				restart = false;
+			} catch (AbortMethod e) {
+				// should never occur
+				// the clinit referenceContext is the type declaration
+				// All clinit problems will be reported against the type: AbortType instead of AbortMethod
+				// reset the contentsOffset to the value before generating the clinit code
+				// decrement the number of method info as well.
+				// This is done in the addProblemMethod and addProblemConstructor for other
+				// cases.
+				if (e.compilationResult == CodeStream.RESTART_IN_WIDE_MODE) {
+					// a branch target required a goto_w, restart code gen in wide mode.
+					if (!restart) {
+						classFile.contentsOffset = clinitOffset;
+						classFile.methodCount--;
+						classFile.codeStream.resetInWideMode(); // request wide mode
+						// restart method generation
+						restart = true;
+					} else {
+						classFile.contentsOffset = clinitOffset;
+						classFile.methodCount--;
+					}
+				} else if (e.compilationResult == CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE) {
 					classFile.contentsOffset = clinitOffset;
 					classFile.methodCount--;
-					classFile.codeStream.resetInWideMode(); // request wide mode
-					this.generateCode(classScope, classFile, clinitOffset);
+					classFile.codeStream.resetForCodeGenUnusedLocals();
 					// restart method generation
-				} catch (AbortMethod e2) {
+					restart = true;
+				} else {
+					// produce a problem method accounting for this fatal error
 					classFile.contentsOffset = clinitOffset;
 					classFile.methodCount--;
+					restart = false;
 				}
-			} else {
-				// produce a problem method accounting for this fatal error
-				classFile.contentsOffset = clinitOffset;
-				classFile.methodCount--;
 			}
-		}
+		} while (restart);
 	}
 
 	/**
@@ -180,16 +193,44 @@ public class Clinit extends AbstractMethodDeclaration {
 		// generate static fields/initializers/enum constants
 		final FieldDeclaration[] fieldDeclarations = declaringType.fields;
 		BlockScope lastInitializerScope = null;
+		int remainingFieldCount = 0;
 		if (TypeDeclaration.kind(declaringType.modifiers) == TypeDeclaration.ENUM_DECL) {
-			int enumCount = 0;
-			int remainingFieldCount = 0;
-			if (fieldDeclarations != null) {
+			int enumCount = declaringType.enumConstantsCounter;
+			if (enumCount > ENUM_CONSTANTS_THRESHOLD) {
+				// generate synthetic methods to initialize all the enum constants
+				int begin = -1;
+				int count = 0;
+				if (fieldDeclarations != null) {
+					int max = fieldDeclarations.length;
+					for (int i = 0; i < max; i++) {
+						FieldDeclaration fieldDecl = fieldDeclarations[i];
+						if (fieldDecl.isStatic()) {
+							if (fieldDecl.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT) {
+								if (begin == -1) {
+									begin = i;
+								}
+								count++;
+								if (count > ENUM_CONSTANTS_THRESHOLD) {
+									SyntheticMethodBinding syntheticMethod = declaringType.binding.addSyntheticMethodForEnumInitialization(begin, i);
+									codeStream.invoke(Opcodes.OPC_invokestatic, syntheticMethod, null /* default declaringClass */);
+									begin = -1;
+									count = 0;
+								}
+							}
+						}
+					}
+					if (count != 0) {
+						// add last synthetic method
+						SyntheticMethodBinding syntheticMethod = declaringType.binding.addSyntheticMethodForEnumInitialization(begin, max);
+						codeStream.invoke(Opcodes.OPC_invokestatic, syntheticMethod, null /* default declaringClass */);
+					}
+				}
+			} else if (fieldDeclarations != null) {
 				for (int i = 0, max = fieldDeclarations.length; i < max; i++) {
 					FieldDeclaration fieldDecl = fieldDeclarations[i];
 					if (fieldDecl.isStatic()) {
 						if (fieldDecl.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT) {
 							fieldDecl.generateCode(staticInitializerScope, codeStream);
-							enumCount++;
 						} else {
 							remainingFieldCount++;
 						}
@@ -217,20 +258,24 @@ public class Clinit extends AbstractMethodDeclaration {
 			codeStream.fieldAccess(Opcodes.OPC_putstatic, declaringType.enumValuesSyntheticfield, null /* default declaringClass */);
 			if (remainingFieldCount != 0) {
 				// if fields that are not enum constants need to be generated (static initializer/static field)
-				for (int i = 0, max = fieldDeclarations.length; i < max; i++) {
+				for (int i = 0, max = fieldDeclarations.length; i < max && remainingFieldCount >= 0; i++) {
 					FieldDeclaration fieldDecl = fieldDeclarations[i];
 					switch (fieldDecl.getKind()) {
 						case AbstractVariableDeclaration.ENUM_CONSTANT :
 							break;
 						case AbstractVariableDeclaration.INITIALIZER :
-							if (!fieldDecl.isStatic())
+							if (!fieldDecl.isStatic()) {
 								break;
+							}
+							remainingFieldCount--;
 							lastInitializerScope = ((Initializer) fieldDecl).block.scope;
 							fieldDecl.generateCode(staticInitializerScope, codeStream);
 							break;
 						case AbstractVariableDeclaration.FIELD :
-							if (!fieldDecl.binding.isStatic())
+							if (!fieldDecl.binding.isStatic()) {
 								break;
+							}
+							remainingFieldCount--;
 							lastInitializerScope = null;
 							fieldDecl.generateCode(staticInitializerScope, codeStream);
 							break;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java
index b9e19f2..57034b0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -241,8 +241,7 @@ public void finalizeProblems() {
 			// discard suppressed warning
 			removed++;
 			problems[iProblem] = null;
-			if (this.compilationResult.problemsMap != null) this.compilationResult.problemsMap.remove(problem);
-			if (this.compilationResult.firstErrors != null) this.compilationResult.firstErrors.remove(problem);
+			this.compilationResult.removeProblem(problem);
 			if (foundIrritants[iSuppress] == null){
 				foundIrritants[iSuppress] = new IrritantSet(irritant);
 			} else {
@@ -263,7 +262,6 @@ public void finalizeProblems() {
 				}
 			}
 		}
-		this.compilationResult.problemCount -= removed;
 	}
 	// flag SuppressWarnings which had no effect (only if no (mandatory) error got detected within unit
 	if (!hasMandatoryErrors) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompoundAssignment.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompoundAssignment.java
index e323760..e8d82e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompoundAssignment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompoundAssignment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,18 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext,
 	if (this.resolvedType.id != T_JavaLangString) {
 		this.lhs.checkNPE(currentScope, flowContext, flowInfo);
 	}
-	return  ((Reference) this.lhs).analyseAssignment(currentScope, flowContext, flowInfo, this, true).unconditionalInits();
+	flowInfo = ((Reference) this.lhs).analyseAssignment(currentScope, flowContext, flowInfo, this, true).unconditionalInits();
+	if (this.resolvedType.id == T_JavaLangString) {
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=339250
+		LocalVariableBinding local = this.lhs.localVariableBinding();
+		if (local != null) {
+			// compound assignment results in a definitely non null value for String
+			flowInfo.markAsDefinitelyNonNull(local);
+			if (flowContext.initsOnFinally != null)
+				flowContext.initsOnFinally.markAsDefinitelyNonNull(local);
+		}
+	}
+	return flowInfo;
 }
 
 	public boolean checkCastCompatibility() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConditionalExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConditionalExpression.java
index a45688b..dd4f9b6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConditionalExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConditionalExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,10 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephen Herrmann <stephan at cs.tu-berlin.de> -  Contributions for
+ *     						bug 133125 - [compiler][null] need to report the null status of expressions and analyze them simultaneously
+ *     						bug 292478 - Report potentially null across variable assignment
+ * 							bug 324178 - [null] ConditionalExpression.nullStatus(..) doesn't take into account the analysis of condition itself
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -28,6 +32,9 @@ public class ConditionalExpression extends OperatorExpression {
 	int trueInitStateIndex = -1;
 	int falseInitStateIndex = -1;
 	int mergedInitStateIndex = -1;
+	
+	// we compute and store the null status during analyseCode (https://bugs.eclipse.org/324178):
+	private int nullStatus = FlowInfo.UNKNOWN;
 
 	public ConditionalExpression(
 		Expression condition,
@@ -54,7 +61,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext,
 		FlowInfo trueFlowInfo = flowInfo.initsWhenTrue().copy();
 		if (isConditionOptimizedFalse) {
 			if ((mode & FlowInfo.UNREACHABLE) == 0) {
-				trueFlowInfo.setReachMode(FlowInfo.UNREACHABLE);
+				trueFlowInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 			}
 			if (!isKnowDeadCodePattern(this.condition) || currentScope.compilerOptions().reportDeadCodeInTrivialIfStatement) {
 				this.valueIfTrue.complainIfUnreachable(trueFlowInfo, currentScope, initialComplaintLevel);
@@ -67,7 +74,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext,
 		FlowInfo falseFlowInfo = flowInfo.initsWhenFalse().copy();
 		if (isConditionOptimizedTrue) {
 			if ((mode & FlowInfo.UNREACHABLE) == 0) {
-				falseFlowInfo.setReachMode(FlowInfo.UNREACHABLE);
+				falseFlowInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 			}
 			if (!isKnowDeadCodePattern(this.condition) || currentScope.compilerOptions().reportDeadCodeInTrivialIfStatement) {
 				this.valueIfFalse.complainIfUnreachable(falseFlowInfo, currentScope, initialComplaintLevel);
@@ -80,10 +87,30 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext,
 		FlowInfo mergedInfo;
 		if (isConditionOptimizedTrue){
 			mergedInfo = trueFlowInfo.addPotentialInitializationsFrom(falseFlowInfo);
+			this.nullStatus = this.valueIfTrue.nullStatus(trueFlowInfo);
 		} else if (isConditionOptimizedFalse) {
 			mergedInfo = falseFlowInfo.addPotentialInitializationsFrom(trueFlowInfo);
+			this.nullStatus = this.valueIfFalse.nullStatus(falseFlowInfo);
 		} else {
-			// if ((t && (v = t)) ? t : t && (v = f)) r = v;  -- ok
+			// this block must meet two conflicting requirements (see https://bugs.eclipse.org/324178):
+			// (1) For null analysis of "Object o2 = (o1 != null) ? o1 : new Object();" we need to distinguish
+			//     the paths *originating* from the evaluation of the condition to true/false respectively.
+			//     This is used to determine the possible null status of the entire conditional expression.
+			// (2) For definite assignment analysis (JLS 16.1.5) of boolean conditional expressions of the form
+			//     "if (c1 ? expr1 : expr2) use(v);" we need to check whether any variable v will be definitely
+			//     assigned whenever the entire conditional expression evaluates to true (to reach the then branch).
+			//     I.e., we need to collect flowInfo *towards* the overall outcome true/false 
+			//     (regardless of the evaluation of the condition).
+			
+			// to support (1) use the infos of both branches originating from the condition for computing the nullStatus:
+			computeNullStatus(trueFlowInfo, falseFlowInfo);
+			
+			// to support (2) we split the true/false branches according to their inner structure. Consider this:
+			// if (b ? false : (true && (v = false))) return v; -- ok
+			// - expr1 ("false") has no path towards true (mark as unreachable)
+			// - expr2 ("(true && (v = false))") has a branch towards true on which v is assigned.
+			//   -> merging these two branches yields: v is assigned
+			// - the paths towards false are irrelevant since the enclosing if has no else.
 			cst = this.optimizedIfTrueConstant;
 			boolean isValueIfTrueOptimizedTrue = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == true;
 			boolean isValueIfTrueOptimizedFalse = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == false;
@@ -92,26 +119,26 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext,
 			boolean isValueIfFalseOptimizedTrue = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == true;
 			boolean isValueIfFalseOptimizedFalse = cst != null && cst != Constant.NotAConstant && cst.booleanValue() == false;
 
-			UnconditionalFlowInfo trueInfoWhenTrue = trueFlowInfo.initsWhenTrue().unconditionalCopy();
-			UnconditionalFlowInfo falseInfoWhenTrue = falseFlowInfo.initsWhenTrue().unconditionalCopy();
-			UnconditionalFlowInfo trueInfoWhenFalse = trueFlowInfo.initsWhenFalse().unconditionalInits();
-			UnconditionalFlowInfo falseInfoWhenFalse = falseFlowInfo.initsWhenFalse().unconditionalInits();
+			UnconditionalFlowInfo trueFlowTowardsTrue = trueFlowInfo.initsWhenTrue().unconditionalCopy();
+			UnconditionalFlowInfo falseFlowTowardsTrue = falseFlowInfo.initsWhenTrue().unconditionalCopy();
+			UnconditionalFlowInfo trueFlowTowardsFalse = trueFlowInfo.initsWhenFalse().unconditionalInits();
+			UnconditionalFlowInfo falseFlowTowardsFalse = falseFlowInfo.initsWhenFalse().unconditionalInits();
 			if (isValueIfTrueOptimizedFalse) {
-				trueInfoWhenTrue.setReachMode(FlowInfo.UNREACHABLE);				
+				trueFlowTowardsTrue.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);				
 			}
 			if (isValueIfFalseOptimizedFalse) {
-				falseInfoWhenTrue.setReachMode(FlowInfo.UNREACHABLE);	
+				falseFlowTowardsTrue.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);	
 			}
 			if (isValueIfTrueOptimizedTrue) {
-				trueInfoWhenFalse.setReachMode(FlowInfo.UNREACHABLE);	
+				trueFlowTowardsFalse.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);	
 			}
 			if (isValueIfFalseOptimizedTrue) {
-				falseInfoWhenFalse.setReachMode(FlowInfo.UNREACHABLE);	
+				falseFlowTowardsFalse.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);	
 			}
 			mergedInfo =
 				FlowInfo.conditional(
-					trueInfoWhenTrue.mergedWith(falseInfoWhenTrue),
-					trueInfoWhenFalse.mergedWith(falseInfoWhenFalse));
+					trueFlowTowardsTrue.mergedWith(falseFlowTowardsTrue),
+					trueFlowTowardsFalse.mergedWith(falseFlowTowardsFalse));
 		}
 		this.mergedInitStateIndex =
 			currentScope.methodScope().recordInitializationStates(mergedInfo);
@@ -119,6 +146,30 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext,
 		return mergedInfo;
 	}
 
+	private void computeNullStatus(FlowInfo trueBranchInfo, FlowInfo falseBranchInfo) {
+		// given that the condition cannot be optimized to a constant 
+		// we now merge the nullStatus from both branches:
+		int ifTrueNullStatus = this.valueIfTrue.nullStatus(trueBranchInfo);
+		int ifFalseNullStatus = this.valueIfFalse.nullStatus(falseBranchInfo);
+
+		if (ifTrueNullStatus == ifFalseNullStatus) {
+			this.nullStatus = ifTrueNullStatus;
+			return;
+		}
+		// is there a chance of null (or non-null)? -> potentially null etc.
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=133125
+		int status = 0;
+		int combinedStatus = ifTrueNullStatus|ifFalseNullStatus;
+		if ((combinedStatus & (FlowInfo.NULL|FlowInfo.POTENTIALLY_NULL)) != 0)
+			status |= FlowInfo.POTENTIALLY_NULL;
+		if ((combinedStatus & (FlowInfo.NON_NULL|FlowInfo.POTENTIALLY_NON_NULL)) != 0)
+			status |= FlowInfo.POTENTIALLY_NON_NULL;
+		if ((combinedStatus & (FlowInfo.UNKNOWN|FlowInfo.POTENTIALLY_UNKNOWN)) != 0)
+			status |= FlowInfo.POTENTIALLY_UNKNOWN;
+		if (status > 0)
+			this.nullStatus = status;
+	}
+
 	/**
 	 * Code generation for the conditional operator ?:
 	 *
@@ -305,22 +356,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext,
 		codeStream.updateLastRecordedEndPC(currentScope, codeStream.position);
 	}
 
-public int nullStatus(FlowInfo flowInfo) {
-	Constant cst = this.condition.optimizedBooleanConstant();
-	if (cst != Constant.NotAConstant) {
-		if (cst.booleanValue()) {
-			return this.valueIfTrue.nullStatus(flowInfo);
-		}
-		return this.valueIfFalse.nullStatus(flowInfo);
+	public int nullStatus(FlowInfo flowInfo) {
+		return this.nullStatus;
 	}
-	int ifTrueNullStatus = this.valueIfTrue.nullStatus(flowInfo),
-	    ifFalseNullStatus = this.valueIfFalse.nullStatus(flowInfo);
-	if (ifTrueNullStatus == ifFalseNullStatus) {
-		return ifTrueNullStatus;
-	}
-	return FlowInfo.UNKNOWN;
-	// cannot decide which branch to take, and they disagree
-}
 
 	public Constant optimizedBooleanConstant() {
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.java
index 2ca39ce..e7c790a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ConstructorDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for Bug 343713 - [compiler] bogus line number in constructor of inner class in 1.5 compliance
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -156,7 +157,7 @@ public void analyseCode(ClassScope classScope, InitializationFlowContext initial
 			}
 		}
 		// check for missing returning path
-		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 			this.bits |= ASTNode.NeedFreeReturn;
 		}
 
@@ -209,33 +210,43 @@ public void generateCode(ClassScope classScope, ClassFile classFile) {
 		classFile.addProblemConstructor(this, this.binding, problemsCopy);
 		return;
 	}
-	try {
-		problemResetPC = classFile.contentsOffset;
-		internalGenerateCode(classScope, classFile);
-	} catch (AbortMethod e) {
-		if (e.compilationResult == CodeStream.RESTART_IN_WIDE_MODE) {
-			// a branch target required a goto_w, restart code gen in wide mode.
-			try {
+	boolean restart = false;
+	boolean abort = false;
+	do {
+		try {
+			problemResetPC = classFile.contentsOffset;
+			internalGenerateCode(classScope, classFile);
+			restart = false;
+		} catch (AbortMethod e) {
+			if (e.compilationResult == CodeStream.RESTART_IN_WIDE_MODE) {
+				// a branch target required a goto_w, restart code gen in wide mode.
+				if (!restart) {
+					classFile.contentsOffset = problemResetPC;
+					classFile.methodCount--;
+					classFile.codeStream.resetInWideMode(); // request wide mode
+					restart = true;
+				} else {
+					restart = false;
+					abort = true;
+				}
+			} else if (e.compilationResult == CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE) {
 				classFile.contentsOffset = problemResetPC;
 				classFile.methodCount--;
-				classFile.codeStream.resetInWideMode(); // request wide mode
-				internalGenerateCode(classScope, classFile); // restart method generation
-			} catch (AbortMethod e2) {
-				int problemsLength;
-				CategorizedProblem[] problems =
-					this.scope.referenceCompilationUnit().compilationResult.getAllProblems();
-				CategorizedProblem[] problemsCopy = new CategorizedProblem[problemsLength = problems.length];
-				System.arraycopy(problems, 0, problemsCopy, 0, problemsLength);
-				classFile.addProblemConstructor(this, this.binding, problemsCopy, problemResetPC);
+				classFile.codeStream.resetForCodeGenUnusedLocals();
+				restart = true;
+			} else {
+				restart = false;
+				abort = true;
 			}
-		} else {
-			int problemsLength;
-			CategorizedProblem[] problems =
-				this.scope.referenceCompilationUnit().compilationResult.getAllProblems();
-			CategorizedProblem[] problemsCopy = new CategorizedProblem[problemsLength = problems.length];
-			System.arraycopy(problems, 0, problemsCopy, 0, problemsLength);
-			classFile.addProblemConstructor(this, this.binding, problemsCopy, problemResetPC);
 		}
+	} while (restart);
+	if (abort) {
+		int problemsLength;
+		CategorizedProblem[] problems =
+				this.scope.referenceCompilationUnit().compilationResult.getAllProblems();
+		CategorizedProblem[] problemsCopy = new CategorizedProblem[problemsLength = problems.length];
+		System.arraycopy(problems, 0, problemsCopy, 0, problemsLength);
+		classFile.addProblemConstructor(this, this.binding, problemsCopy, problemResetPC);
 	}
 }
 
@@ -245,21 +256,25 @@ public void generateSyntheticFieldInitializationsIfNecessary(MethodScope methodS
 	NestedTypeBinding nestedType = (NestedTypeBinding) declaringClass;
 
 	SyntheticArgumentBinding[] syntheticArgs = nestedType.syntheticEnclosingInstances();
-	for (int i = 0, max = syntheticArgs == null ? 0 : syntheticArgs.length; i < max; i++) {
-		SyntheticArgumentBinding syntheticArg;
-		if ((syntheticArg = syntheticArgs[i]).matchingField != null) {
-			codeStream.aload_0();
-			codeStream.load(syntheticArg);
-			codeStream.fieldAccess(Opcodes.OPC_putfield, syntheticArg.matchingField, null /* default declaringClass */);
+	if (syntheticArgs != null) {
+		for (int i = 0, max = syntheticArgs.length; i < max; i++) {
+			SyntheticArgumentBinding syntheticArg;
+			if ((syntheticArg = syntheticArgs[i]).matchingField != null) {
+				codeStream.aload_0();
+				codeStream.load(syntheticArg);
+				codeStream.fieldAccess(Opcodes.OPC_putfield, syntheticArg.matchingField, null /* default declaringClass */);
+			}
 		}
 	}
 	syntheticArgs = nestedType.syntheticOuterLocalVariables();
-	for (int i = 0, max = syntheticArgs == null ? 0 : syntheticArgs.length; i < max; i++) {
-		SyntheticArgumentBinding syntheticArg;
-		if ((syntheticArg = syntheticArgs[i]).matchingField != null) {
-			codeStream.aload_0();
-			codeStream.load(syntheticArg);
-			codeStream.fieldAccess(Opcodes.OPC_putfield, syntheticArg.matchingField, null /* default declaringClass */);
+	if (syntheticArgs != null) {
+		for (int i = 0, max = syntheticArgs.length; i < max; i++) {
+			SyntheticArgumentBinding syntheticArg;
+			if ((syntheticArg = syntheticArgs[i]).matchingField != null) {
+				codeStream.aload_0();
+				codeStream.load(syntheticArg);
+				codeStream.fieldAccess(Opcodes.OPC_putfield, syntheticArg.matchingField, null /* default declaringClass */);
+			}
 		}
 	}
 }
@@ -267,7 +282,7 @@ public void generateSyntheticFieldInitializationsIfNecessary(MethodScope methodS
 private void internalGenerateCode(ClassScope classScope, ClassFile classFile) {
 	classFile.generateMethodInfoHeader(this.binding);
 	int methodAttributeOffset = classFile.contentsOffset;
-	int attributeNumber = classFile.generateMethodInfoAttribute(this.binding);
+	int attributeNumber = classFile.generateMethodInfoAttributes(this.binding);
 	if ((!this.binding.isNative()) && (!this.binding.isAbstract())) {
 
 		TypeDeclaration declaringType = classScope.referenceContext;
@@ -321,6 +336,7 @@ private void internalGenerateCode(ClassScope classScope, ClassFile classFile) {
 
 		if (needFieldInitializations && preInitSyntheticFields){
 			generateSyntheticFieldInitializationsIfNecessary(this.scope, codeStream, declaringClass);
+			codeStream.recordPositionsFrom(0, this.bodyStart);
 		}
 		// generate constructor call
 		if (this.constructorCall != null) {
@@ -369,7 +385,7 @@ private void internalGenerateCode(ClassScope classScope, ClassFile classFile) {
 			((StackMapFrameCodeStream) codeStream).resetSecretLocals();
 		}
 	}
-	classFile.completeMethodInfo(methodAttributeOffset, attributeNumber);
+	classFile.completeMethodInfo(this.binding, methodAttributeOffset, attributeNumber);
 }
 
 public boolean isConstructor() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
index 1e00810..5806ce8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/DoStatement.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -57,6 +58,8 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 
 	int previousMode = flowInfo.reachMode();
 
+	FlowInfo initsOnCondition = flowInfo;
+
 	UnconditionalFlowInfo actionInfo = flowInfo.nullInfoLessUnconditionalCopy();
 	// we need to collect the contribution to nulls of the coming paths through the
 	// loop, be they falling through normally or branched to break, continue labels
@@ -69,9 +72,17 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 		// code generation can be optimized when no need to continue in the loop
 		if ((actionInfo.tagBits &
 				loopingContext.initsOnContinue.tagBits &
-				FlowInfo.UNREACHABLE) != 0) {
+				FlowInfo.UNREACHABLE_OR_DEAD) != 0) {
 			this.continueLabel = null;
 		}
+		if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
+			initsOnCondition = flowInfo.unconditionalInits().
+									addInitializationsFrom(
+										actionInfo.mergedWith(loopingContext.initsOnContinue));
+		}
+	}
+	if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
+		this.condition.checkNPE(currentScope, flowContext, initsOnCondition);
 	}
 	/* Reset reach mode, to address following scenario.
 	 *   final blank;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
index 87c25cb..a9ce3fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
@@ -56,6 +56,9 @@ public class EqualExpression extends BinaryExpression {
 					flowContext.recordUsingNullReference(scope, local, reference,
 							FlowContext.CAN_ONLY_NULL | FlowContext.IN_COMPARISON_NON_NULL, flowInfo);
 					initsWhenTrue.markAsComparedEqualToNonNull(local); // from thereon it is set
+					if ((flowContext.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) != 0) {
+						initsWhenTrue.markedAsNullOrNonNullInAssertExpression(local);
+					}
 				} else {
 					flowContext.recordUsingNullReference(scope, local, reference,
 							FlowContext.CAN_ONLY_NULL | FlowContext.IN_COMPARISON_NULL, flowInfo);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
index 03072e8..ba2219f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -76,6 +77,9 @@ public class ExplicitConstructorCall extends Statement implements InvocationSite
 						this.arguments[i]
 							.analyseCode(currentScope, flowContext, flowInfo)
 							.unconditionalInits();
+					if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
+						this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
+					}
 				}
 			}
 
@@ -192,7 +196,7 @@ public class ExplicitConstructorCall extends Statement implements InvocationSite
 	void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
 		ReferenceBinding superTypeErasure = (ReferenceBinding) this.binding.declaringClass.erasure();
 
-		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0)	{
+		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0)	{
 		// perform some emulation work in case there is some and we are inside a local type only
 		if (superTypeErasure.isNestedType()
 			&& currentScope.enclosingSourceType().isLocalType()) {
@@ -208,7 +212,7 @@ public class ExplicitConstructorCall extends Statement implements InvocationSite
 	}
 
 	public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
-		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0)	{
+		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0)	{
 			// if constructor from parameterized type got found, use the original constructor at codegen time
 			MethodBinding codegenBinding = this.binding.original();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Expression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Expression.java
index 6b63f80..f11057f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Expression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Expression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 292478 - Report potentially null across variable assignment
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -20,11 +21,13 @@ import org.eclipse.jdt.internal.compiler.codegen.CodeStream;
 import org.eclipse.jdt.internal.compiler.flow.FlowContext;
 import org.eclipse.jdt.internal.compiler.flow.FlowInfo;
 import org.eclipse.jdt.internal.compiler.impl.Constant;
+import org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
 import org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
 import org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.Binding;
 import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
 import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
+import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
 import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
@@ -384,12 +387,20 @@ public final boolean checkCastTypesCompatibility(Scope scope, TypeBinding castTy
 							if (use15specifics) {
 								checkUnsafeCast(scope, castType, expressionType, null /*no match*/, true);
 								// ensure there is no collision between both interfaces: i.e. I1 extends List<String>, I2 extends List<Object>
-								if (interfaceType.hasIncompatibleSuperType((ReferenceBinding)castType))
+								if (scope.compilerOptions().complianceLevel < ClassFileConstants.JDK1_7) {
+									if (interfaceType.hasIncompatibleSuperType((ReferenceBinding) castType)) {
+										return false;
+									}
+								} else if (!castType.isRawType() && interfaceType.hasIncompatibleSuperType((ReferenceBinding) castType)) {
 									return false;
+								}
 							} else {
 								// pre1.5 semantics - no covariance allowed (even if 1.5 compliant, but 1.4 source)
-								MethodBinding[] castTypeMethods = getAllInheritedMethods((ReferenceBinding) castType);
-								MethodBinding[] expressionTypeMethods = getAllInheritedMethods((ReferenceBinding) expressionType);
+								// look at original methods rather than the parameterized variants at 1.4 to detect
+								// covariance. Otherwise when confronted with one raw type and one parameterized type,
+								// we could mistakenly detect covariance and scream foul. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=332744
+								MethodBinding[] castTypeMethods = getAllOriginalInheritedMethods((ReferenceBinding) castType);
+								MethodBinding[] expressionTypeMethods = getAllOriginalInheritedMethods((ReferenceBinding) expressionType);
 								int exprMethodsLength = expressionTypeMethods.length;
 								for (int i = 0, castMethodsLength = castTypeMethods.length; i < castMethodsLength; i++) {
 									for (int j = 0; j < exprMethodsLength; j++) {
@@ -422,7 +433,11 @@ public final boolean checkCastTypesCompatibility(Scope scope, TypeBinding castTy
 							if (use15specifics) {
 								checkUnsafeCast(scope, castType, expressionType, null /*no match*/, true);
 								// ensure there is no collision between both interfaces: i.e. I1 extends List<String>, I2 extends List<Object>
-								if (((ReferenceBinding)castType).hasIncompatibleSuperType((ReferenceBinding) expressionType)) {
+								if (scope.compilerOptions().complianceLevel < ClassFileConstants.JDK1_7) {
+									if (((ReferenceBinding)castType).hasIncompatibleSuperType((ReferenceBinding) expressionType)) {
+										return false;
+									}
+								} else if (!castType.isRawType() && ((ReferenceBinding)castType).hasIncompatibleSuperType((ReferenceBinding) expressionType)) {
 									return false;
 								}
 							}
@@ -469,8 +484,13 @@ public final boolean checkCastTypesCompatibility(Scope scope, TypeBinding castTy
 							if (use15specifics) {
 								checkUnsafeCast(scope, castType, expressionType, null /*no match*/, true);
 								// ensure there is no collision between both interfaces: i.e. I1 extends List<String>, I2 extends List<Object>
-								if (refExprType.hasIncompatibleSuperType((ReferenceBinding) castType))
+								if (scope.compilerOptions().complianceLevel < ClassFileConstants.JDK1_7) {
+									if (refExprType.hasIncompatibleSuperType((ReferenceBinding) castType)) {
+										return false;
+									}
+								} else if (!castType.isRawType() && refExprType.hasIncompatibleSuperType((ReferenceBinding) castType)) {
 									return false;
+								}
 							}
 							return true;
 						} else {
@@ -510,8 +530,14 @@ public void checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInf
 		}
 		flowInfo.markAsComparedEqualToNonNull(local);
 			// from thereon it is set
+		if ((flowContext.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) != 0) {
+			flowInfo.markedAsNullOrNonNullInAssertExpression(local);
+		}
 		if (flowContext.initsOnFinally != null) {
 			flowContext.initsOnFinally.markAsComparedEqualToNonNull(local);
+			if ((flowContext.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) != 0) {
+				flowContext.initsOnFinally.markedAsNullOrNonNullInAssertExpression(local);
+			}
 		}
 	}
 }
@@ -731,9 +757,12 @@ public void generateOptimizedStringConcatenationCreation(BlockScope blockScope,
 	codeStream.invokeStringConcatenationStringConstructor();
 }
 
-private MethodBinding[] getAllInheritedMethods(ReferenceBinding binding) {
+private MethodBinding[] getAllOriginalInheritedMethods(ReferenceBinding binding) {
 	ArrayList collector = new ArrayList();
 	getAllInheritedMethods0(binding, collector);
+	for (int i = 0, len = collector.size(); i < len; i++) {
+		collector.set(i, ((MethodBinding)collector.get(i)).original());
+	}
 	return (MethodBinding[]) collector.toArray(new MethodBinding[collector.size()]);
 }
 
@@ -829,20 +858,15 @@ public void markAsNonNull() {
 	this.bits |= ASTNode.IsNonNull;
 }
 
-	public int nullStatus(FlowInfo flowInfo) {
+public int nullStatus(FlowInfo flowInfo) {
 
-		if (/* (this.bits & IsNonNull) != 0 || */
-			this.constant != null && this.constant != Constant.NotAConstant)
-		return FlowInfo.NON_NULL; // constant expression cannot be null
+	if (/* (this.bits & IsNonNull) != 0 || */
+		this.constant != null && this.constant != Constant.NotAConstant)
+	return FlowInfo.NON_NULL; // constant expression cannot be null
 
 	LocalVariableBinding local = localVariableBinding();
-	if (local != null) {
-		if (flowInfo.isDefinitelyNull(local))
-			return FlowInfo.NULL;
-		if (flowInfo.isDefinitelyNonNull(local))
-			return FlowInfo.NON_NULL;
-		return FlowInfo.UNKNOWN;
-	}
+	if (local != null)
+		return flowInfo.nullStatus(local);
 	return FlowInfo.NON_NULL;
 }
 
@@ -956,6 +980,64 @@ public TypeBinding resolveTypeExpecting(BlockScope scope, TypeBinding expectedTy
 	}
 	return expressionType;
 }
+/**
+ * Returns true if the receiver is forced to be of raw type either to satisfy the contract imposed
+ * by a super type or because it *is* raw and the current type has no control over it (i.e the rawness
+ * originates from some other file.)
+ */
+public boolean forcedToBeRaw(ReferenceContext referenceContext) {
+	if (this instanceof NameReference) {
+		final Binding receiverBinding = ((NameReference) this).binding;
+		if (receiverBinding.isParameter() && (((LocalVariableBinding) receiverBinding).tagBits & TagBits.ForcedToBeRawType) != 0) {
+			return true;  // parameter is forced to be raw since super method uses raw types.
+		} else if (receiverBinding instanceof FieldBinding) {
+			FieldBinding field = (FieldBinding) receiverBinding;
+			if (field.type.isRawType()) {
+				if (referenceContext instanceof AbstractMethodDeclaration) {
+					AbstractMethodDeclaration methodDecl = (AbstractMethodDeclaration) referenceContext;
+					if (field.declaringClass != methodDecl.binding.declaringClass) { // inherited raw field, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=337962
+						return true;
+					}
+				} else if (referenceContext instanceof TypeDeclaration) {
+					TypeDeclaration type = (TypeDeclaration) referenceContext;
+					if (field.declaringClass != type.binding) { // inherited raw field, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=337962
+						return true;
+					}
+				}
+			}
+		}
+	} else if (this instanceof MessageSend) {
+		if (!CharOperation.equals(((MessageSend) this).binding.declaringClass.getFileName(),
+				referenceContext.compilationResult().getFileName())) {  // problem is rooted elsewhere
+			return true;
+		}
+	} else if (this instanceof FieldReference) {
+		FieldBinding field = ((FieldReference) this).binding;
+		if (!CharOperation.equals(field.declaringClass.getFileName(),
+				referenceContext.compilationResult().getFileName())) { // problem is rooted elsewhere
+			return true;
+		}
+		if (field.type.isRawType()) {
+			if (referenceContext instanceof AbstractMethodDeclaration) {
+				AbstractMethodDeclaration methodDecl = (AbstractMethodDeclaration) referenceContext;
+				if (field.declaringClass != methodDecl.binding.declaringClass) { // inherited raw field, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=337962
+					return true;
+				}
+			} else if (referenceContext instanceof TypeDeclaration) {
+				TypeDeclaration type = (TypeDeclaration) referenceContext;
+				if (field.declaringClass != type.binding) { // inherited raw field, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=337962
+					return true;
+				}
+			}
+		}
+	} else if (this instanceof ConditionalExpression) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=337751
+		ConditionalExpression ternary = (ConditionalExpression) this;
+		if (ternary.valueIfTrue.forcedToBeRaw(referenceContext) || ternary.valueIfFalse.forcedToBeRaw(referenceContext)) {
+			return true;
+		}
+	}
+	return false;
+}
 
 /**
  * Returns an object which can be used to identify identical JSR sequence targets
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java
index 2b44591..30ab54e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,7 +94,7 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 	int pc = codeStream.position;
 	boolean isStatic;
 	if (this.initialization != null
-		&& !((isStatic = this.binding.isStatic()) && this.binding.constant() != Constant.NotAConstant)) {
+			&& !((isStatic = this.binding.isStatic()) && this.binding.constant() != Constant.NotAConstant)) {
 		// non-static field, need receiver
 		if (!isStatic)
 			codeStream.aload_0();
@@ -150,7 +150,10 @@ public void resolve(MethodScope initializationScope) {
 			SourceTypeBinding declaringType = classScope.enclosingSourceType();
 			checkHidingSuperField: {
 				if (declaringType.superclass == null) break checkHidingSuperField;
-				FieldBinding existingVariable = classScope.findField(declaringType.superclass, this.name, this,  false /*do not resolve hidden field*/);
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318171, find field skipping visibility checks
+				// we do the checks below ourselves, using the appropriate conditions for access check of
+				// protected members from superclasses.
+				FieldBinding existingVariable = classScope.findField(declaringType.superclass, this.name, this,  false /*do not resolve hidden field*/, true /* no visibility checks please */);
 				if (existingVariable == null) break checkHidingSuperField; // keep checking outer scenario
 				if (!existingVariable.isValidBinding())  break checkHidingSuperField; // keep checking outer scenario
 				if (existingVariable.original() == this.binding) break checkHidingSuperField; // keep checking outer scenario
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldReference.java
index b30571e..66f16b6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -107,6 +108,17 @@ public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowConte
 			currentScope.problemReporter().cannotAssignToFinalField(this.binding, this);
 		}
 	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+	if (!this.binding.isStatic()) {
+		if (this.receiver.isThis()) {
+			currentScope.resetEnclosingMethodStaticFlag();
+		}
+	} else if (this.receiver.isThis()) {
+		if ((this.receiver.bits & ASTNode.IsImplicitThis) == 0) {
+			// explicit this, not allowed in static context
+			currentScope.resetEnclosingMethodStaticFlag();
+		}
+	}
 	return flowInfo;
 }
 
@@ -119,6 +131,16 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 	this.receiver.analyseCode(currentScope, flowContext, flowInfo, nonStatic);
 	if (nonStatic) {
 		this.receiver.checkNPE(currentScope, flowContext, flowInfo);
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+		if (this.receiver.isThis()) {
+			currentScope.resetEnclosingMethodStaticFlag();
+		}
+	} else if (this.receiver.isThis()) {
+		if ((this.receiver.bits & ASTNode.IsImplicitThis) == 0) {
+			// explicit this receiver, not allowed in static context
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+			currentScope.resetEnclosingMethodStaticFlag();
+		}
 	}
 
 	if (valueRequired || currentScope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4) {
@@ -290,6 +312,8 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean
 
 public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeStream, Expression expression, int operator, int assignmentImplicitConversion, boolean valueRequired) {
 	boolean isStatic;
+	// check if compound assignment is the only usage of a private field
+	reportOnlyUselesslyReadPrivateField(currentScope, this.binding, valueRequired);
 	FieldBinding codegenBinding = this.binding.original();
 	this.receiver.generateCode(currentScope, codeStream, !(isStatic = codegenBinding.isStatic()));
 	if (isStatic) {
@@ -337,6 +361,8 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 
 public void generatePostIncrement(BlockScope currentScope, CodeStream codeStream, CompoundAssignment postIncrement, boolean valueRequired) {
 	boolean isStatic;
+	// check if postIncrement is the only usage of a private field
+	reportOnlyUselesslyReadPrivateField(currentScope, this.binding, valueRequired);
 	FieldBinding codegenBinding = this.binding.original();
 	this.receiver.generateCode(currentScope, codeStream, !(isStatic = codegenBinding.isStatic()));
 	if (isStatic) {
@@ -413,7 +439,7 @@ public boolean isTypeAccess() {
  * No need to emulate access to protected fields since not implicitly accessed
  */
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo, boolean isReadAccess) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0)	return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)	return;
 	
 	// if field from parameterized type got found, use the original field at codegen time
 	FieldBinding codegenBinding = this.binding.original();
@@ -577,7 +603,7 @@ public TypeBinding resolveType(BlockScope scope) {
 	if (this.actualReceiverType != oldReceiverType && this.receiver.postConversionType(scope) != this.actualReceiverType) { // record need for explicit cast at codegen since receiver could not handle it
 		this.bits |= NeedReceiverGenericCast;
 	}
-	if (isFieldUseDeprecated(fieldBinding, scope, (this.bits & ASTNode.IsStrictlyAssigned) !=0)) {
+	if (isFieldUseDeprecated(fieldBinding, scope, this.bits)) {
 		scope.problemReporter().deprecatedField(fieldBinding, this);
 	}
 	boolean isImplicitThisRcv = this.receiver.isImplicitThis();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java
index 7330bb8..41e569b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForStatement.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -92,6 +93,9 @@ public class ForStatement extends Statement {
 							new LoopingFlowContext(flowContext, flowInfo, this, null,
 								null, this.scope)),
 						condInfo);
+				if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
+					this.condition.checkNPE(currentScope, flowContext, flowInfo);
+				}
 			}
 		}
 
@@ -131,7 +135,7 @@ public class ForStatement extends Statement {
 				} else {
 					actionInfo = initsWhenTrue.unconditionalCopy();
 					if (isConditionOptimizedFalse){
-						actionInfo.setReachMode(FlowInfo.UNREACHABLE);
+						actionInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 					}
 				}
 			if (this.action.complainIfUnreachable(actionInfo, this.scope, initialComplaintLevel) < Statement.COMPLAINED_UNREACHABLE) {
@@ -141,7 +145,7 @@ public class ForStatement extends Statement {
 			// code generation can be optimized when no need to continue in the loop
 			if ((actionInfo.tagBits &
 					loopingContext.initsOnContinue.tagBits &
-					FlowInfo.UNREACHABLE) != 0) {
+					FlowInfo.UNREACHABLE_OR_DEAD) != 0) {
 				this.continueLabel = null;
 			}
 			else {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForeachStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForeachStatement.java
index 989fcb9..17693c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForeachStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ForeachStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,7 +108,7 @@ public class ForeachStatement extends Statement {
 			addInitializationsFrom(condInfo.initsWhenFalse());
 			// TODO (maxime) no need to test when false: can optimize (same for action being unreachable above)
 			if ((actionInfo.tagBits & loopingContext.initsOnContinue.tagBits &
-					FlowInfo.UNREACHABLE) != 0) {
+					FlowInfo.UNREACHABLE_OR_DEAD) != 0) {
 				this.continueLabel = null;
 			} else {
 				actionInfo = actionInfo.mergedWith(loopingContext.initsOnContinue);
@@ -388,6 +388,8 @@ public class ForeachStatement extends Statement {
 				if (!this.collectionElementType.isCompatibleWith(elementType)
 						&& !this.scope.isBoxingCompatibleWith(this.collectionElementType, elementType)) {
 					this.scope.problemReporter().notCompatibleTypesErrorInForeach(this.collection, this.collectionElementType, elementType);
+				} else if (this.collectionElementType.needsUncheckedConversion(elementType)) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=321085
+				    this.scope.problemReporter().unsafeTypeConversion(this.collection, collectionType, upperScope.createArrayType(elementType, 1));
 				}
 				// in case we need to do a conversion
 				int compileTimeTypeID = this.collectionElementType.id;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java
index b2551e0..2f3b1a7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IfStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -57,17 +58,20 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 	int initialComplaintLevel = (flowInfo.reachMode() & FlowInfo.UNREACHABLE) != 0 ? Statement.COMPLAINED_FAKE_REACHABLE : Statement.NOT_COMPLAINED;
 
 	Constant cst = this.condition.optimizedBooleanConstant();
+	if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
+		this.condition.checkNPE(currentScope, flowContext, flowInfo);
+	}
 	boolean isConditionOptimizedTrue = cst != Constant.NotAConstant && cst.booleanValue() == true;
 	boolean isConditionOptimizedFalse = cst != Constant.NotAConstant && cst.booleanValue() == false;
 
 	// process the THEN part
 	FlowInfo thenFlowInfo = conditionFlowInfo.safeInitsWhenTrue();
 	if (isConditionOptimizedFalse) {
-		thenFlowInfo.setReachMode(FlowInfo.UNREACHABLE);
+		thenFlowInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 	}
 	FlowInfo elseFlowInfo = conditionFlowInfo.initsWhenFalse().copy();
 	if (isConditionOptimizedTrue) {
-		elseFlowInfo.setReachMode(FlowInfo.UNREACHABLE);
+		elseFlowInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 	}
 	if (((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) && 
 			((thenFlowInfo.tagBits & FlowInfo.UNREACHABLE) != 0)) {
@@ -95,7 +99,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 		thenFlowInfo = this.thenStatement.analyseCode(currentScope, flowContext, thenFlowInfo);
 	}
 	// code gen: optimizing the jump around the ELSE part
-	if ((thenFlowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) {
+	if ((thenFlowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) {
 		this.bits |= ASTNode.ThenExit;
 	}
 
@@ -160,10 +164,7 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 	if (hasThenPart) {
 		BranchLabel falseLabel = null;
 		// generate boolean condition only if needed
-		if (((this.bits & ASTNode.IsElseStatementUnreachable) != 0) ||
-				(cst != Constant.NotAConstant && cst.booleanValue() == true)) {
-			// No need to generate if condition statement when we know that only the then action
-			// will be executed
+		if (cst != Constant.NotAConstant && cst.booleanValue() == true) {
 			this.condition.generateCode(currentScope, codeStream, false);
 		} else {
 			this.condition.generateOptimizedBoolean(
@@ -202,10 +203,7 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 		}
 	} else if (hasElsePart) {
 		// generate boolean condition only if needed
-		if (((this.bits & ASTNode.IsThenStatementUnreachable) != 0) ||
-				(cst != Constant.NotAConstant && cst.booleanValue() == false)) {
-			// No need to generate if condition statement when we know that only the else action
-			// will be executed
+		if (cst != Constant.NotAConstant && cst.booleanValue() == false) {
 			this.condition.generateCode(currentScope, codeStream, false);
 		} else {
 			this.condition.generateOptimizedBoolean(
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ImportReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ImportReference.java
index 97cee34..6011941 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ImportReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ImportReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,8 @@ public class ImportReference extends ASTNode {
 	public int declarationSourceEnd;
 	public int modifiers; // 1.5 addition for static imports
 	public Annotation[] annotations;
+	// star end position
+	public int trailingStarPosition;
 
 	public ImportReference(
 			char[][] tokens,
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java
index 1fd4c94..3382ebb 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java
@@ -37,6 +37,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 			unconditionalInits();
 		FlowInfo initsWhenTrue = flowInfo.copy();
 		initsWhenTrue.markAsComparedEqualToNonNull(local);
+		if ((flowContext.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) != 0) {
+			initsWhenTrue.markedAsNullOrNonNullInAssertExpression(local);
+		}
 		flowContext.recordUsingNullReference(currentScope, local,
 				this.expression, FlowContext.CAN_ONLY_NULL | FlowContext.IN_INSTANCEOF, flowInfo);
 		// no impact upon enclosing try context
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IntLiteral.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IntLiteral.java
index a33f082..498713f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IntLiteral.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/IntLiteral.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,18 +30,6 @@ public IntLiteral(char[] token, int s,int e, int value) {
 	this(token, s,e);
 	this.value = value;
 }
-
-public IntLiteral(int intValue) {
-	//special optimized constructor : the cst is the argument
-	//value that should not be used
-	//	tokens = null ;
-	//	sourceStart = 0;
-	//	sourceEnd = 0;
-	super(null,0,0);
-	this.constant = IntConstant.fromValue(intValue);
-	this.value = intValue;
-}
-
 public void computeConstant() {
 	//a special constant is use for the potential Integer.MAX_VALUE+1
 	//which is legal if used with a - as prefix....cool....
@@ -133,15 +121,6 @@ public final boolean mayRepresentMIN_VALUE(){
 			(this.source[9] == '8') &&
 			(((this.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT) == 0));
 }
-
-public StringBuffer printExpression(int indent, StringBuffer output){
-	if (this.source == null) {
-	/* special optimized IntLiteral that are created by the compiler */
-		return output.append(String.valueOf(this.value));
-	}
-	return super.printExpression(indent, output);
-}
-
 public void traverse(ASTVisitor visitor, BlockScope scope) {
 	visitor.visit(this, scope);
 	visitor.endVisit(this, scope);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java
index a764c87..ba88a60 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Javadoc.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ public class Javadoc extends ASTNode {
 	public Javadoc(int sourceStart, int sourceEnd) {
 		this.sourceStart = sourceStart;
 		this.sourceEnd = sourceEnd;
+		this.bits |= ASTNode.ResolveJavadoc;
 	}
 	/**
 	 * Returns whether a type can be seen at a given visibility level or not.
@@ -184,6 +185,9 @@ public class Javadoc extends ASTNode {
 	 * Resolve type javadoc
 	 */
 	public void resolve(ClassScope scope) {
+		if ((this.bits & ASTNode.ResolveJavadoc) == 0) {
+			return;
+		}
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=247037, @inheritDoc tag cannot
 		// be used in the documentation comment for a class or interface.
 		if (this.inheritedPositions != null) {
@@ -244,6 +248,9 @@ public class Javadoc extends ASTNode {
 	 * Resolve compilation unit javadoc
 	 */
 	public void resolve(CompilationUnitScope unitScope) {
+		if ((this.bits & ASTNode.ResolveJavadoc) == 0) {
+			return;
+		}
 		// Do nothing - This is to mimic the SDK's javadoc tool behavior, which neither
 		// sanity checks nor generates documentation using comments at the CU scope 
 		// (unless the unit happens to be package-info.java - in which case we don't come here.) 
@@ -253,7 +260,9 @@ public class Javadoc extends ASTNode {
 	 * Resolve method javadoc
 	 */
 	public void resolve(MethodScope methScope) {
-
+		if ((this.bits & ASTNode.ResolveJavadoc) == 0) {
+			return;
+		}
 		// get method declaration
 		AbstractMethodDeclaration methDecl = methScope.referenceMethod();
 		boolean overriding = methDecl == null /* field declaration */ || methDecl.binding == null /* compiler error */
@@ -325,7 +334,7 @@ public class Javadoc extends ASTNode {
 		// @param tags
 		CompilerOptions compilerOptions = methScope.compilerOptions();
 		resolveParamTags(methScope, reportMissing, compilerOptions.reportUnusedParameterIncludeDocCommentReference /* considerParamRefAsUsage*/);
-		resolveTypeParameterTags(methScope, reportMissing);
+		resolveTypeParameterTags(methScope, reportMissing && compilerOptions.reportMissingJavadocTagsMethodTypeParameters);
 
 		// @return tags
 		if (this.returnStatement == null) {
@@ -390,7 +399,12 @@ public class Javadoc extends ASTNode {
 					if (scope.enclosingSourceType().isCompatibleWith(fieldRef.actualReceiverType)) {
 						fieldRef.bits |= ASTNode.SuperAccess;
 					}
-					fieldRef.methodBinding = scope.findMethod((ReferenceBinding)fieldRef.actualReceiverType, fieldRef.token, new TypeBinding[0], fieldRef);
+					ReferenceBinding resolvedType = (ReferenceBinding) fieldRef.actualReceiverType;
+					if (CharOperation.equals(resolvedType.sourceName(), fieldRef.token)) {
+						fieldRef.methodBinding = scope.getConstructor(resolvedType, Binding.NO_TYPES, fieldRef);
+					} else {
+						fieldRef.methodBinding = scope.findMethod(resolvedType, fieldRef.token, Binding.NO_TYPES, fieldRef);
+					}
 				}
 			}
 
@@ -570,6 +584,8 @@ public class Javadoc extends ASTNode {
 
 		// If no param tags then report a problem for each declaration type parameter
 		if (parameters != null) {
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, avoid secondary errors when <= 1.4 
+			reportMissing = reportMissing && scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
 			int typeParametersLength = parameters.length;
 			if (paramTypeParamLength == 0) {
 				if (reportMissing) {
@@ -819,6 +835,35 @@ public class Javadoc extends ASTNode {
 						}
 					}
 				}
+				if (typeReference instanceof JavadocQualifiedTypeReference && !scope.isDefinedInSameUnit(resolvedType)) {
+					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=222188
+					// partially qualified references from a different CU should be warned
+					char[][] typeRefName = ((JavadocQualifiedTypeReference) typeReference).getTypeName();
+					int skipLength = 0;
+					if (topLevelScope.getCurrentPackage() == resolvedType.getPackage()
+							&& typeRefName.length < computedCompoundName.length) {
+						// https://bugs.eclipse.org/bugs/show_bug.cgi?id=221539: references can be partially qualified
+						// in same package and hence if the package name is not given, ignore package name check
+						skipLength = resolvedType.fPackage.compoundName.length;
+					}
+					boolean valid = true;
+					if (typeRefName.length == computedCompoundName.length - skipLength) {
+						checkQualification: for (int i = 0; i < typeRefName.length; i++) {
+							if (!CharOperation.equals(typeRefName[i], computedCompoundName[i + skipLength])) {
+								valid = false;
+								break checkQualification;
+							}
+						}
+					} else {
+						valid = false;
+					}
+					// report invalid reference
+					if (!valid) {
+						if (scopeModifiers == -1) scopeModifiers = scope.getDeclarationModifiers();
+						scope.problemReporter().javadocInvalidMemberTypeQualification(typeReference.sourceStart, typeReference.sourceEnd, scopeModifiers);
+						return;
+					}
+				}
 			}
 			/*
 			 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocArgumentExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocArgumentExpression.java
index d821da7..e46bf87 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocArgumentExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocArgumentExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,9 @@ public class JavadocArgumentExpression extends Expression {
 				typeRef.resolvedType = this.resolvedType;
 				// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=195374
 				// reproduce javadoc 1.3.1 / 1.4.2 behavior
+				if (this.resolvedType == null) {
+					return null;
+				}
 				if (typeRef instanceof SingleTypeReference &&
 						this.resolvedType.leafComponentType().enclosingType() != null &&
 						scope.compilerOptions().complianceLevel <= ClassFileConstants.JDK1_4) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocFieldReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocFieldReference.java
index b2f1b5b..b6bab94 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocFieldReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/JavadocFieldReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,9 +7,11 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
+import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
 import org.eclipse.jdt.internal.compiler.impl.Constant;
 import org.eclipse.jdt.internal.compiler.lookup.*;
@@ -74,9 +76,15 @@ public class JavadocFieldReference extends FieldReference {
 			}
 			if (this.actualReceiverType instanceof ReferenceBinding) {
 				ReferenceBinding refBinding = (ReferenceBinding) this.actualReceiverType;
-				MethodBinding possibleMethod = this.receiver.isThis()
-					? scope.getImplicitMethod(this.token, Binding.NO_TYPES, this)
-					: scope.getMethod(refBinding, this.token, Binding.NO_TYPES, this);
+				char[] selector = this.token;
+				MethodBinding possibleMethod = null;
+				if (CharOperation.equals(this.actualReceiverType.sourceName(), selector)) {
+					possibleMethod = scope.getConstructor(refBinding, Binding.NO_TYPES, this);
+				} else {
+					possibleMethod = this.receiver.isThis()
+						? scope.getImplicitMethod(selector, Binding.NO_TYPES, this)
+						: scope.getMethod(refBinding, selector, Binding.NO_TYPES, this);
+				}
 				if (possibleMethod.isValidBinding()) {
 					this.methodBinding = possibleMethod;
 				} else {
@@ -97,7 +105,7 @@ public class JavadocFieldReference extends FieldReference {
 		}
 		this.binding = (FieldBinding) fieldBinding;
 
-		if (isFieldUseDeprecated(this.binding, scope, (this.bits & IsStrictlyAssigned) != 0)) {
+		if (isFieldUseDeprecated(this.binding, scope, this.bits)) {
 			scope.problemReporter().javadocDeprecatedField(this.binding, this, scope.getDeclarationModifiers());
 		}
 		return this.resolvedType = this.binding.type;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
index 83de2d9..7606dc4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
@@ -7,6 +7,10 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contributions for 
+ *     						bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
+ *     						bug 292478 - Report potentially null across variable assignment
+ *     						bug 335093 - [compiler][null] minimal hook for future null annotation support
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -34,12 +38,40 @@ public class LocalDeclaration extends AbstractVariableDeclaration {
 
 public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
 	// record variable initialization if any
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 		this.bits |= ASTNode.IsLocalDeclarationReachable; // only set if actually reached
 	}
+	if (this.binding != null && this.type.resolvedType instanceof TypeVariableBinding) {
+		MethodScope methodScope= this.binding.declaringScope.methodScope();
+		AbstractMethodDeclaration methodDeclaration = methodScope.referenceMethod();
+		if (methodDeclaration != null && ((methodDeclaration.bits & ASTNode.CanBeStatic) != 0) && methodDeclaration.binding != null) {
+			TypeVariableBinding[] typeVariables = methodDeclaration.binding.typeVariables();
+			if (typeVariables == Binding.NO_TYPE_VARIABLES) {
+				// Method declares no type variables.
+				currentScope.resetEnclosingMethodStaticFlag();
+			} else {
+				// to check whether the resolved type for this is declared by enclosing method as a type variable
+				boolean usesEnclosingTypeVar = false; 
+				for (int i = 0; i < typeVariables.length ; i ++) {
+					if (typeVariables[i] == this.type.resolvedType){
+						usesEnclosingTypeVar = true;
+						break;
+					}
+				}
+				if (!usesEnclosingTypeVar) {
+					// uses a type variable not declared by enclosing method
+					currentScope.resetEnclosingMethodStaticFlag();
+				}
+			}
+		}
+	}
 	if (this.initialization == null) {
 		return flowInfo;
 	}
+	if ((this.initialization.implicitConversion & TypeIds.UNBOXING) != 0) {
+		this.initialization.checkNPE(currentScope, flowContext, flowInfo);
+	}
+	
 	flowInfo =
 		this.initialization
 			.analyseCode(currentScope, flowContext, flowInfo)
@@ -51,17 +83,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 		this.bits &= ~FirstAssignmentToLocal;  // int i = (i = 0);
 	}
 	flowInfo.markAsDefinitelyAssigned(this.binding);
+	nullStatus = checkAgainstNullAnnotation(currentScope, this.binding, nullStatus);		
 	if ((this.binding.type.tagBits & TagBits.IsBaseType) == 0) {
-		switch(nullStatus) {
-			case FlowInfo.NULL :
-				flowInfo.markAsDefinitelyNull(this.binding);
-				break;
-			case FlowInfo.NON_NULL :
-				flowInfo.markAsDefinitelyNonNull(this.binding);
-				break;
-			default:
-				flowInfo.markAsDefinitelyUnknown(this.binding);
-		}
+		flowInfo.markNullStatus(this.binding, nullStatus);
 		// no need to inform enclosing try block since its locals won't get
 		// known by the finally block
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
index afa81d6..7217393 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Nick Teryaev - fix for bug (https://bugs.eclipse.org/bugs/show_bug.cgi?id=40752)
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -60,11 +61,24 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 	flowInfo = this.receiver.analyseCode(currentScope, flowContext, flowInfo, nonStatic).unconditionalInits();
 	if (nonStatic) {
 		this.receiver.checkNPE(currentScope, flowContext, flowInfo);
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+		if (this.receiver.isThis()) {
+			// accessing non-static method without an object
+			currentScope.resetEnclosingMethodStaticFlag();
+		}
+	} else if (this.receiver.isThis()) {
+		if ((this.receiver.bits & ASTNode.IsImplicitThis) == 0) {
+			// explicit this receiver, not allowed in static context
+			currentScope.resetEnclosingMethodStaticFlag();
+		}
 	}
 
 	if (this.arguments != null) {
 		int length = this.arguments.length;
 		for (int i = 0; i < length; i++) {
+			if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
+				this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
+			}
 			flowInfo = this.arguments[i].analyseCode(currentScope, flowContext, flowInfo).unconditionalInits();
 		}
 	}
@@ -200,7 +214,7 @@ public boolean isTypeAccess() {
 }
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo){
 
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0)	return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)	return;
 
 	// if method from parameterized type got found, use the original method at codegen time
 	MethodBinding codegenBinding = this.binding.original();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
index fd4e05b..53fade3 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,11 +18,15 @@ import org.eclipse.jdt.internal.compiler.flow.ExceptionHandlingFlowContext;
 import org.eclipse.jdt.internal.compiler.flow.FlowInfo;
 import org.eclipse.jdt.internal.compiler.flow.InitializationFlowContext;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+import org.eclipse.jdt.internal.compiler.lookup.Binding;
 import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
 import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
+import org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding;
+import org.eclipse.jdt.internal.compiler.lookup.MemberTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TagBits;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
+import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
 import org.eclipse.jdt.internal.compiler.parser.Parser;
 import org.eclipse.jdt.internal.compiler.problem.AbortMethod;
 import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
@@ -78,8 +82,19 @@ public class MethodDeclaration extends AbstractMethodDeclaration {
 			if (this.arguments != null) {
 				for (int i = 0, count = this.arguments.length; i < count; i++) {
 					flowInfo.markAsDefinitelyAssigned(this.arguments[i].binding);
+					// if this method uses a type parameter declared by the declaring class,
+					// it can't be static. https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+					if (this.arguments[i].binding != null && (this.arguments[i].binding.type instanceof TypeVariableBinding)) {
+						Binding declaringElement = ((TypeVariableBinding)this.arguments[i].binding.type).declaringElement;
+						if (this.binding != null && this.binding.declaringClass == declaringElement)
+							this.bits &= ~ASTNode.CanBeStatic;
+					}
 				}
 			}
+			if (this.binding.declaringClass instanceof MemberTypeBinding && !this.binding.declaringClass.isStatic()) {
+				// method of a non-static member type can't be static.
+				this.bits &= ~ASTNode.CanBeStatic;
+			}
 			// propagate to statements
 			if (this.statements != null) {
 				int complaintLevel = (flowInfo.reachMode() & FlowInfo.UNREACHABLE) == 0 ? Statement.NOT_COMPLAINED : Statement.COMPLAINED_FAKE_REACHABLE;
@@ -89,11 +104,14 @@ public class MethodDeclaration extends AbstractMethodDeclaration {
 						flowInfo = stat.analyseCode(this.scope, methodContext, flowInfo);
 					}
 				}
+			} else {
+				// method with empty body should not be flagged as static.
+				this.bits &= ~ASTNode.CanBeStatic;
 			}
 			// check for missing returning path
 			TypeBinding returnTypeBinding = this.binding.returnType;
 			if ((returnTypeBinding == TypeBinding.VOID) || isAbstract()) {
-				if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+				if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 					this.bits |= ASTNode.NeedFreeReturn;
 				}
 			} else {
@@ -105,6 +123,17 @@ public class MethodDeclaration extends AbstractMethodDeclaration {
 			methodContext.complainIfUnusedExceptionHandlers(this);
 			// check unused parameters
 			this.scope.checkUnusedParameters(this.binding);
+			// check if the method could have been static
+			if (!this.binding.isStatic() && (this.bits & ASTNode.CanBeStatic) != 0) {
+				if(!this.binding.isOverriding() && !this.binding.isImplementing()) {
+					if (this.binding.isPrivate() || this.binding.isFinal() || this.binding.declaringClass.isFinal()) {
+						this.scope.problemReporter().methodCanBeDeclaredStatic(this);
+					} else {
+						this.scope.problemReporter().methodCanBePotentiallyDeclaredStatic(this);
+					}
+				}
+					
+			}
 		} catch (AbortMethod e) {
 			this.ignoreFurtherInvestigation = true;
 		}
@@ -134,10 +163,17 @@ public class MethodDeclaration extends AbstractMethodDeclaration {
 		if (CharOperation.equals(this.scope.enclosingSourceType().sourceName, this.selector)) {
 			this.scope.problemReporter().methodWithConstructorName(this);
 		}
-
+		// to check whether the method returns a type parameter not declared by it.
+		boolean returnsUndeclTypeVar = false;
+		if (this.returnType != null && this.returnType.resolvedType instanceof TypeVariableBinding) {
+			returnsUndeclTypeVar = true;
+		}
 		if (this.typeParameters != null) {
 			for (int i = 0, length = this.typeParameters.length; i < length; i++) {
 				this.typeParameters[i].resolve(this.scope);
+				if (returnsUndeclTypeVar && this.typeParameters[i].binding == this.returnType.resolvedType) {
+					returnsUndeclTypeVar = false;
+				}
 			}
 		}
 
@@ -207,6 +243,10 @@ public class MethodDeclaration extends AbstractMethodDeclaration {
 					// the method HAS a body --> abstract native modifiers are forbiden
 					if (((this.modifiers & ClassFileConstants.AccNative) != 0) || ((this.modifiers & ClassFileConstants.AccAbstract) != 0))
 						this.scope.problemReporter().methodNeedingNoBody(this);
+					else if (this.binding != null && !this.binding.isStatic() && !(this.binding.declaringClass instanceof LocalTypeBinding) && !returnsUndeclTypeVar) {
+						// Not a method of local type - can be static
+						this.bits |= ASTNode.CanBeStatic;
+					}
 				}
 		}
 		super.resolveStatements();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/OR_OR_Expression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/OR_OR_Expression.java
index 4076d51..4b3fca4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/OR_OR_Expression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/OR_OR_Expression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -58,10 +59,16 @@ public class OR_OR_Expression extends BinaryExpression {
 		if (isLeftOptimizedTrue){
 			if ((rightInfo.reachMode() & FlowInfo.UNREACHABLE) == 0) {
 				currentScope.problemReporter().fakeReachable(this.right);
-				rightInfo.setReachMode(FlowInfo.UNREACHABLE);
+				rightInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 			}
 		}
 		rightInfo = this.right.analyseCode(currentScope, flowContext, rightInfo);
+		if ((this.left.implicitConversion & TypeIds.UNBOXING) != 0) {
+			this.left.checkNPE(currentScope, flowContext, flowInfo);
+		}
+		if ((this.right.implicitConversion & TypeIds.UNBOXING) != 0) {
+			this.right.checkNPE(currentScope, flowContext, flowInfo);
+		}
 		// The definitely null variables in right info when true should not be missed out while merging
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=299900
 		FlowInfo leftInfoWhenTrueForMerging = leftInfo.initsWhenTrue().unconditionalCopy().addPotentialInitializationsFrom(rightInfo.unconditionalInitsWithoutSideEffect());
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java
index e0e5053..0723235 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for Bug 342671 - ClassCastException: org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding cannot be cast to org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -128,6 +129,11 @@ public class ParameterizedQualifiedTypeReference extends ArrayQualifiedTypeRefer
 			}
 		}
 		this.bits |= ASTNode.DidResolve;
+		TypeBinding type = internalResolveLeafType(scope, checkBounds);
+		createArrayType(scope);
+		return type == null ? type : this.resolvedType;
+	}
+	private TypeBinding internalResolveLeafType(Scope scope, boolean checkBounds) {
 		boolean isClassScope = scope.kind == Scope.CLASS_SCOPE;
 		Binding binding = scope.getPackage(this.tokens);
 		if (binding != null && !binding.isValidBinding()) {
@@ -229,18 +235,13 @@ public class ParameterizedQualifiedTypeReference extends ArrayQualifiedTypeRefer
 
 			    TypeVariableBinding[] typeVariables = currentOriginal.typeVariables();
 				if (typeVariables == Binding.NO_TYPE_VARIABLES) { // check generic
-					if (scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) { // below 1.5, already reported as syntax error
+					if (scope.compilerOptions().originalSourceLevel >= ClassFileConstants.JDK1_5) { // below 1.5, already reported as syntax error
 						scope.problemReporter().nonGenericTypeCannotBeParameterized(i, this, currentType, argTypes);
 						return null;
 					}
 					this.resolvedType =  (qualifyingType != null && qualifyingType.isParameterizedType())
 						? scope.environment().createParameterizedType(currentOriginal, null, qualifyingType)
 						: currentType;
-					if (this.dimensions > 0) {
-						if (this.dimensions > 255)
-							scope.problemReporter().tooManyDimensions(this);
-						this.resolvedType = scope.createArrayType(this.resolvedType, this.dimensions);
-					}
 					return this.resolvedType;
 				} else if (argLength != typeVariables.length) { // check arity
 					scope.problemReporter().incorrectArityForParameterizedType(this, currentType, argTypes, i);
@@ -283,13 +284,14 @@ public class ParameterizedQualifiedTypeReference extends ArrayQualifiedTypeRefer
 				reportDeprecatedType(qualifyingType, scope, i);
 			this.resolvedType = qualifyingType;
 		}
-		// array type ?
+		return this.resolvedType;
+	}
+	private void createArrayType(Scope scope) {
 		if (this.dimensions > 0) {
 			if (this.dimensions > 255)
 				scope.problemReporter().tooManyDimensions(this);
 			this.resolvedType = scope.createArrayType(this.resolvedType, this.dimensions);
 		}
-		return this.resolvedType;
 	}
 
 	public StringBuffer printExpression(int indent, StringBuffer output) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
index d63d1ee..141b395 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for Bug 342671 - ClassCastException: org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding cannot be cast to org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -105,15 +106,27 @@ public class ParameterizedSingleTypeReference extends ArrayTypeReference {
 				}
 			}
 		}
-		boolean hasGenericError = false;
-		ReferenceBinding currentType;
 		this.bits |= ASTNode.DidResolve;
+		TypeBinding type = internalResolveLeafType(scope, enclosingType, checkBounds);
+		// handle three different outcomes:
+		if (type == null) {
+			this.resolvedType = createArrayType(scope, this.resolvedType);
+			return null;							// no useful type, but still captured dimensions into this.resolvedType
+		} else {
+			type = createArrayType(scope, type);
+			if (!this.resolvedType.isValidBinding())
+				return type;						// found some error, but could recover useful type (like closestMatch)
+			else 
+				return this.resolvedType = type; 	// no complaint, keep fully resolved type (incl. dimensions)
+		}
+	}
+	private TypeBinding internalResolveLeafType(Scope scope, ReferenceBinding enclosingType, boolean checkBounds) {
+		ReferenceBinding currentType;
 		if (enclosingType == null) {
 			this.resolvedType = scope.getType(this.token);
 			if (this.resolvedType.isValidBinding()) {
 				currentType = (ReferenceBinding) this.resolvedType;
 			} else {
-				hasGenericError = true;
 				reportInvalidType(scope);
 				switch (this.resolvedType.problemId()) {
 					case ProblemReasons.NotFound :
@@ -150,7 +163,6 @@ public class ParameterizedSingleTypeReference extends ArrayTypeReference {
 		} else { // resolving member type (relatively to enclosingType)
 			this.resolvedType = currentType = scope.getMemberType(this.token, enclosingType);
 			if (!this.resolvedType.isValidBinding()) {
-				hasGenericError = true;
 				scope.problemReporter().invalidEnclosingType(this, currentType, enclosingType);
 				return null;
 			}
@@ -195,7 +207,7 @@ public class ParameterizedSingleTypeReference extends ArrayTypeReference {
 
 		TypeVariableBinding[] typeVariables = currentOriginal.typeVariables();
 		if (typeVariables == Binding.NO_TYPE_VARIABLES) { // non generic invoked with arguments
-			boolean isCompliant15 = scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
+			boolean isCompliant15 = scope.compilerOptions().originalSourceLevel >= ClassFileConstants.JDK1_5;
 			if ((currentOriginal.tagBits & TagBits.HasMissingType) == 0) {
 				if (isCompliant15) { // below 1.5, already reported as syntax error
 					this.resolvedType = currentType;
@@ -205,16 +217,9 @@ public class ParameterizedSingleTypeReference extends ArrayTypeReference {
 			}
 			// resilience do not rebuild a parameterized type unless compliance is allowing it
 			if (!isCompliant15) {
-				// array type ?
-				TypeBinding type = currentType;
-				if (this.dimensions > 0) {
-					if (this.dimensions > 255)
-						scope.problemReporter().tooManyDimensions(this);
-					type = scope.createArrayType(type, this.dimensions);
-				}
-				if (hasGenericError)
-					return type;
-				return this.resolvedType = type;
+				if (!this.resolvedType.isValidBinding())
+					return currentType;
+				return this.resolvedType = currentType;
 			}
 			// if missing generic type, and compliance >= 1.5, then will rebuild a parameterized binding
 		} else if (argLength != typeVariables.length) { // check arity
@@ -238,17 +243,18 @@ public class ParameterizedSingleTypeReference extends ArrayTypeReference {
 		if (isTypeUseDeprecated(parameterizedType, scope))
 			reportDeprecatedType(parameterizedType, scope);
 
-		TypeBinding type = parameterizedType;
-		// array type ?
+		if (!this.resolvedType.isValidBinding()) {
+			return parameterizedType;
+		}
+		return this.resolvedType = parameterizedType;
+	}
+	private TypeBinding createArrayType(Scope scope, TypeBinding type) {
 		if (this.dimensions > 0) {
 			if (this.dimensions > 255)
 				scope.problemReporter().tooManyDimensions(this);
-			type = scope.createArrayType(type, this.dimensions);
-		}
-		if (hasGenericError) {
-			return type;
+			return scope.createArrayType(type, this.dimensions);
 		}
-		return this.resolvedType = type;
+		return type;
 	}
 
 	public StringBuffer printExpression(int indent, StringBuffer output){
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
index 80c2983..7a9ea09 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -71,6 +72,9 @@ public class QualifiedAllocationExpression extends AllocationExpression {
 		if (this.arguments != null) {
 			for (int i = 0, count = this.arguments.length; i < count; i++) {
 				flowInfo = this.arguments[i].analyseCode(currentScope, flowContext, flowInfo);
+				if ((this.arguments[i].implicitConversion & TypeIds.UNBOXING) != 0) {
+					this.arguments[i].checkNPE(currentScope, flowContext, flowInfo);
+				}
 			}
 		}
 
@@ -188,7 +192,7 @@ public class QualifiedAllocationExpression extends AllocationExpression {
 	 * exact need.
 	 */
 	public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
-		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0)	{
+		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0)	{
 		ReferenceBinding allocatedTypeErasure = (ReferenceBinding) this.binding.declaringClass.erasure();
 
 		// perform some extra emulation work in case there is some and we are inside a local type only
@@ -227,6 +231,7 @@ public class QualifiedAllocationExpression extends AllocationExpression {
 
 		this.constant = Constant.NotAConstant;
 		TypeBinding enclosingInstanceType = null;
+		ReferenceBinding enclosingInstanceReference = null;
 		TypeBinding receiverType = null;
 		boolean hasError = false;
 		boolean enclosingInstanceContainsCast = false;
@@ -247,6 +252,14 @@ public class QualifiedAllocationExpression extends AllocationExpression {
 			} else if (this.type instanceof QualifiedTypeReference) {
 				scope.problemReporter().illegalUsageOfQualifiedTypeReference((QualifiedTypeReference)this.type);
 				hasError = true;
+			} else if (!(enclosingInstanceReference = (ReferenceBinding) enclosingInstanceType).canBeSeenBy(scope)) {
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317212
+				enclosingInstanceType = new ProblemReferenceBinding(
+							enclosingInstanceReference.compoundName,
+							enclosingInstanceReference,
+							ProblemReasons.NotVisible);
+				scope.problemReporter().invalidType(this.enclosingInstance, enclosingInstanceType);
+				hasError = true;
 			} else {
 				receiverType = ((SingleTypeReference) this.type).resolveTypeEnclosing(scope, (ReferenceBinding) enclosingInstanceType);
 				if (receiverType != null && enclosingInstanceContainsCast) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java
index 3378343..1b4a530 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -80,6 +81,9 @@ public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowConte
 					currentScope.problemReporter().uninitializedBlankFinalField(lastFieldBinding, this);
 				}
 			}
+			if (!lastFieldBinding.isStatic()) {
+				currentScope.resetEnclosingMethodStaticFlag();
+			}
 			break;
 		case Binding.LOCAL :
 			// first binding is a local variable
@@ -175,8 +179,8 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 			if (needValue || complyTo14) {
 				manageSyntheticAccessIfNecessary(currentScope, (FieldBinding) this.binding, 0, flowInfo);
 			}
+			FieldBinding fieldBinding = (FieldBinding) this.binding;
 			if (this.indexOfFirstFieldBinding == 1) { // was an implicit reference to the first field binding
-				FieldBinding fieldBinding = (FieldBinding) this.binding;
 				// check if reading a final blank field
 				if (fieldBinding.isBlankFinal()
 						&& currentScope.needBlankFinalFieldInitializationCheck(fieldBinding)) {
@@ -186,6 +190,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 					}
 				}
 			}
+			if (!fieldBinding.isStatic()) {
+				currentScope.resetEnclosingMethodStaticFlag();
+			}
 			break;
 		case Binding.LOCAL : // reading a local variable
 			LocalVariableBinding localBinding;
@@ -230,8 +237,14 @@ public void checkNPE(BlockScope scope, FlowContext flowContext, FlowInfo flowInf
 			}
 			flowInfo.markAsComparedEqualToNonNull(local);
 			// from thereon it is set
+			if ((flowContext.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) != 0) {
+				flowInfo.markedAsNullOrNonNullInAssertExpression(local);
+			}
 			if (flowContext.initsOnFinally != null) {
 				flowContext.initsOnFinally.markAsComparedEqualToNonNull(local);
+				if ((flowContext.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) != 0) {
+					flowContext.initsOnFinally.markedAsNullOrNonNullInAssertExpression(local);
+				}
 			}
 		}
 	}
@@ -374,6 +387,8 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean
 
 public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeStream, Expression expression, int operator, int assignmentImplicitConversion, boolean valueRequired) {
 	FieldBinding lastFieldBinding = generateReadSequence(currentScope, codeStream);
+	// check if compound assignment is the only usage of a private field
+	reportOnlyUselesslyReadPrivateField(currentScope, lastFieldBinding, valueRequired);
 	boolean isFirst = lastFieldBinding == this.binding
 		&& (this.indexOfFirstFieldBinding == 1 || lastFieldBinding.declaringClass == currentScope.enclosingReceiverType())
 		&& this.otherBindings == null; // could be dup: next.next.next
@@ -425,6 +440,8 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 
 public void generatePostIncrement(BlockScope currentScope, CodeStream codeStream, CompoundAssignment postIncrement, boolean valueRequired) {
 	FieldBinding lastFieldBinding = generateReadSequence(currentScope, codeStream);
+	// check if this post increment is the only usage of a private field
+	reportOnlyUselesslyReadPrivateField(currentScope, lastFieldBinding, valueRequired);
 	boolean isFirst = lastFieldBinding == this.binding
 		&& (this.indexOfFirstFieldBinding == 1 || lastFieldBinding.declaringClass == currentScope.enclosingReceiverType())
 		&& this.otherBindings == null; // could be dup: next.next.next
@@ -713,7 +730,7 @@ public TypeBinding getOtherFieldBindings(BlockScope scope) {
 				}				
 		    }
 			// only last field is actually a write access if any
-			if (isFieldUseDeprecated(field, scope, (this.bits & ASTNode.IsStrictlyAssigned) !=0 && index+1 == length)) {
+			if (isFieldUseDeprecated(field, scope, index+1 == length ? this.bits : 0)) {
 				scope.problemReporter().deprecatedField(field, this);
 			}
 			// constant propagation can only be performed as long as the previous one is a constant too.
@@ -773,6 +790,10 @@ public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, Fl
 	if ((this.bits & ASTNode.RestrictiveFlagMASK) == Binding.LOCAL) {
 		LocalVariableBinding localVariableBinding = (LocalVariableBinding) this.binding;
 		if (localVariableBinding != null) {
+			if ((localVariableBinding.tagBits & TagBits.NotInitialized) != 0) {
+				// local was tagged as uninitialized
+				return;
+			}
 			switch(localVariableBinding.useFlag) {
 				case LocalVariableBinding.FAKE_USED :
 				case LocalVariableBinding.USED :
@@ -786,7 +807,7 @@ public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, Fl
  * index is <0 to denote write access emulation
  */
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FieldBinding fieldBinding, int index, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) return;
 	// index == 0 denotes the first fieldBinding, index > 0 denotes one of the 'otherBindings', index < 0 denotes a write access (to last binding)
 	if (fieldBinding.constant() != Constant.NotAConstant)
 		return;
@@ -944,7 +965,7 @@ public TypeBinding resolveType(BlockScope scope) {
 							&& (!fieldBinding.isStatic() || methodScope.isStatic)) {
 						scope.problemReporter().forwardReference(this, this.indexOfFirstFieldBinding-1, fieldBinding);
 					}
-					if (isFieldUseDeprecated(fieldBinding, scope, (this.bits & ASTNode.IsStrictlyAssigned) != 0 && this.indexOfFirstFieldBinding == this.tokens.length)) {
+					if (isFieldUseDeprecated(fieldBinding, scope, this.indexOfFirstFieldBinding == this.tokens.length ? this.bits : 0)) {
 						scope.problemReporter().deprecatedField(fieldBinding, this);	
 					}
 					if (fieldBinding.isStatic()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Reference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Reference.java
index 2c6e01b..ef9e8da 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Reference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Reference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -15,8 +16,11 @@ import org.eclipse.jdt.internal.compiler.codegen.Opcodes;
 import org.eclipse.jdt.internal.compiler.flow.FlowContext;
 import org.eclipse.jdt.internal.compiler.flow.FlowInfo;
 import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
+import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
 import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
+import org.eclipse.jdt.internal.compiler.lookup.MethodScope;
 import org.eclipse.jdt.internal.compiler.lookup.Scope;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
@@ -87,4 +91,72 @@ public abstract void generateAssignment(BlockScope currentScope, CodeStream code
 public abstract void generateCompoundAssignment(BlockScope currentScope, CodeStream codeStream, Expression expression, int operator, int assignmentImplicitConversion, boolean valueRequired);
 
 public abstract void generatePostIncrement(BlockScope currentScope, CodeStream codeStream, CompoundAssignment postIncrement, boolean valueRequired);
+
+/* report if a private field is only read from a 'special operator',
+ * i.e., in a postIncrement expression or a compound assignment,
+ * where the information is never flowing out off the field. */
+void reportOnlyUselesslyReadPrivateField(BlockScope currentScope, FieldBinding fieldBinding, boolean valueRequired) {
+	if (valueRequired) {
+		// access is relevant, turn compound use into real use:
+		fieldBinding.compoundUseFlag = 0;
+		fieldBinding.modifiers |= ExtraCompilerModifiers.AccLocallyUsed;
+	} else {
+		if (fieldBinding.isUsedOnlyInCompound()) {
+			fieldBinding.compoundUseFlag--; // consume one
+			if (fieldBinding.compoundUseFlag == 0					// report only the last usage
+					&& fieldBinding.isOrEnclosedByPrivateType() 
+					&& (this.implicitConversion & TypeIds.UNBOXING) == 0) // don't report if unboxing is involved (might cause NPE)
+			{
+				// compoundAssignment/postIncrement is the only usage of this field
+				currentScope.problemReporter().unusedPrivateField(fieldBinding.sourceField());
+				fieldBinding.modifiers |= ExtraCompilerModifiers.AccLocallyUsed; // don't report again
+			}
+		}
+	}
+}
+/* report a local/arg that is only read from a 'special operator',
+ * i.e., in a postIncrement expression or a compound assignment,
+ * where the information is never flowing out off the local/arg. */
+static void reportOnlyUselesslyReadLocal(BlockScope currentScope, LocalVariableBinding localBinding, boolean valueRequired) {
+	if (localBinding.declaration == null)
+		return;  // secret local
+	if ((localBinding.declaration.bits & ASTNode.IsLocalDeclarationReachable) == 0)
+		return;  // declaration is unreachable
+	if (localBinding.useFlag >= LocalVariableBinding.USED)
+		return;  // we're only interested in cases with only compound access (negative count)
+
+	if (valueRequired) {
+		// access is relevant
+		localBinding.useFlag = LocalVariableBinding.USED;
+		return;
+	} else {
+		localBinding.useFlag++;
+		if (localBinding.useFlag != LocalVariableBinding.UNUSED) // have all negative counts been consumed?
+			return; // still waiting to see more usages of this kind
+	}
+	// at this point we know we have something to report
+	if (localBinding.declaration instanceof Argument) {
+		// check compiler options to report against unused arguments
+		MethodScope methodScope = currentScope.methodScope();
+		if (methodScope != null) {
+			MethodBinding method = ((AbstractMethodDeclaration)methodScope.referenceContext()).binding;
+			
+			boolean shouldReport = !method.isMain();
+			if (method.isImplementing()) {
+				shouldReport &= currentScope.compilerOptions().reportUnusedParameterWhenImplementingAbstract;
+			} else if (method.isOverriding()) {
+				shouldReport &= currentScope.compilerOptions().reportUnusedParameterWhenOverridingConcrete;
+			}
+			
+			if (shouldReport) {
+				// report the case of an argument that is unread except through a special operator
+				currentScope.problemReporter().unusedArgument(localBinding.declaration);
+			}
+		}
+	} else {
+		// report the case of a local variable that is unread except for a special operator
+		currentScope.problemReporter().unusedLocalVariable(localBinding.declaration);
+	}
+	localBinding.useFlag = LocalVariableBinding.USED; // don't report again
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java
index 09eb29a..b3f2ede 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -36,6 +37,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 
 	if (this.expression != null) {
 		flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
+		if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
+			this.expression.checkNPE(currentScope, flowContext, flowInfo);
+		}
 	}
 	this.initStateIndex =
 		currentScope.methodScope().recordInitializationStates(flowInfo);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.java
index ba1d8a4..a2cdd89 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SingleNameReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 292478 - Report potentially null across variable assignment,
+ *     											    Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -37,6 +39,7 @@ import org.eclipse.jdt.internal.compiler.lookup.TagBits;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
 import org.eclipse.jdt.internal.compiler.lookup.VariableBinding;
+import org.eclipse.jdt.internal.compiler.problem.AbortMethod;
 import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
 
 public class SingleNameReference extends NameReference implements OperatorIds {
@@ -60,14 +63,18 @@ public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowConte
 	if (isCompound) { // check the variable part is initialized if blank final
 		switch (this.bits & ASTNode.RestrictiveFlagMASK) {
 			case Binding.FIELD : // reading a field
-				FieldBinding fieldBinding;
-				if ((fieldBinding = (FieldBinding) this.binding).isBlankFinal()
+				FieldBinding fieldBinding = (FieldBinding) this.binding;
+				if (fieldBinding.isBlankFinal()
 						&& currentScope.needBlankFinalFieldInitializationCheck(fieldBinding)) {
 					FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(fieldBinding.declaringClass.original(), flowInfo);
 					if (!fieldInits.isDefinitelyAssigned(fieldBinding)) {
 						currentScope.problemReporter().uninitializedBlankFinalField(fieldBinding, this);
 					}
 				}
+				if (!fieldBinding.isStatic()) {
+					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+					currentScope.resetEnclosingMethodStaticFlag();
+				}
 				manageSyntheticAccessIfNecessary(currentScope, flowInfo, true /*read-access*/);
 				break;
 			case Binding.LOCAL : // reading a local variable
@@ -77,10 +84,16 @@ public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowConte
 					currentScope.problemReporter().uninitializedLocalVariable(localBinding, this);
 					// we could improve error msg here telling "cannot use compound assignment on final local variable"
 				}
-				if (isReachable) {
-					localBinding.useFlag = LocalVariableBinding.USED;
-				} else if (localBinding.useFlag == LocalVariableBinding.UNUSED) {
-					localBinding.useFlag = LocalVariableBinding.FAKE_USED;
+				if (localBinding.useFlag != LocalVariableBinding.USED) {
+					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+					// access from compound assignment does not prevent "unused" warning, unless unboxing is involved:
+					if (isReachable && (this.implicitConversion & TypeIds.UNBOXING) != 0) {
+						localBinding.useFlag = LocalVariableBinding.USED;
+					} else {
+						// use values < 0 to count the number of compound uses:
+						if (localBinding.useFlag <= LocalVariableBinding.UNUSED)
+							localBinding.useFlag--;
+					}
 				}
 		}
 	}
@@ -106,6 +119,10 @@ public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowConte
 					currentScope.problemReporter().cannotAssignToFinalField(fieldBinding, this);
 				}
 			}
+			if (!fieldBinding.isStatic()) {
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+				currentScope.resetEnclosingMethodStaticFlag();
+			}
 			break;
 		case Binding.LOCAL : // assigning to a local variable
 			LocalVariableBinding localBinding = (LocalVariableBinding) this.binding;
@@ -155,6 +172,10 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 					currentScope.problemReporter().uninitializedBlankFinalField(fieldBinding, this);
 				}
 			}
+			if (!fieldBinding.isStatic()) {
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+				currentScope.resetEnclosingMethodStaticFlag();
+			}
 			break;
 		case Binding.LOCAL : // reading a local variable
 			LocalVariableBinding localBinding;
@@ -203,7 +224,7 @@ public TypeBinding checkFieldAccess(BlockScope scope) {
 		}
 	}
 
-	if (isFieldUseDeprecated(fieldBinding, scope, (this.bits & ASTNode.IsStrictlyAssigned) !=0))
+	if (isFieldUseDeprecated(fieldBinding, scope, this.bits))
 		scope.problemReporter().deprecatedField(fieldBinding, this);
 
 	if ((this.bits & ASTNode.IsStrictlyAssigned) == 0
@@ -414,6 +435,15 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean
 				break;
 			case Binding.LOCAL : // reading a local
 				LocalVariableBinding localBinding = (LocalVariableBinding) this.binding;
+				if (localBinding.resolvedPosition == -1) {
+					if (valueRequired) {
+						// restart code gen
+						localBinding.useFlag = LocalVariableBinding.USED;
+						throw new AbortMethod(CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE, null);
+					}
+					codeStream.recordPositionsFrom(pc, this.sourceStart);
+					return;
+				}
 				if (!valueRequired && (this.implicitConversion & TypeIds.UNBOXING) == 0) {
 					// if no valueRequired, optimize out entire gen
 					codeStream.recordPositionsFrom(pc, this.sourceStart);
@@ -461,6 +491,17 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean
  * are optimized in one access: e.g "a = a + 1" optimized into "a++".
  */
 public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeStream, Expression expression, int operator, int assignmentImplicitConversion, boolean valueRequired) {
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+	switch (this.bits & ASTNode.RestrictiveFlagMASK) {
+		case Binding.LOCAL:
+			LocalVariableBinding localBinding = (LocalVariableBinding) this.binding;
+			// check if compound assignment is the only usage of this local
+			Reference.reportOnlyUselesslyReadLocal(currentScope, localBinding, valueRequired);
+			break;
+		case Binding.FIELD:
+			// check if compound assignment is the only usage of a private field
+			reportOnlyUselesslyReadPrivateField(currentScope, (FieldBinding)this.binding, valueRequired);
+	}
 	this.generateCompoundAssignment(
 		currentScope,
 		codeStream,
@@ -506,6 +547,7 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 		case Binding.LOCAL : // assigning to a local variable (cannot assign to outer local)
 			LocalVariableBinding localBinding = (LocalVariableBinding) this.binding;
 			// using incr bytecode if possible
+			Constant assignConstant;
 			switch (localBinding.type.id) {
 				case T_JavaLangString :
 					codeStream.generateStringConcatenationAppend(currentScope, this, expression);
@@ -515,10 +557,25 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 					codeStream.store(localBinding, false);
 					return;
 				case T_int :
-					Constant assignConstant;
-					if (((assignConstant = expression.constant) != Constant.NotAConstant)
+					assignConstant = expression.constant;
+					if (localBinding.resolvedPosition == -1) {
+						if (valueRequired) {
+							/*
+							 * restart code gen because we either:
+							 * - need the value
+							 * - the constant can have potential side-effect
+							 */
+							localBinding.useFlag = LocalVariableBinding.USED;
+							throw new AbortMethod(CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE, null);
+						} else if (assignConstant == Constant.NotAConstant) {
+							// we only need to generate the value of the expression's constant if it is not a constant expression
+							expression.generateCode(currentScope, codeStream, false);
+						}
+						return;
+					}
+					if ((assignConstant != Constant.NotAConstant)
 							&& (assignConstant.typeID() != TypeIds.T_float) // only for integral types
-							&& (assignConstant.typeID() != TypeIds.T_double)) {// TODO (philippe) is this test needed ?
+							&& (assignConstant.typeID() != TypeIds.T_double)) { // TODO (philippe) is this test needed ?
 						switch (operator) {
 							case PLUS :
 								int increment  = assignConstant.intValue();
@@ -540,6 +597,22 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 					}
 					//$FALL-THROUGH$
 				default :
+					if (localBinding.resolvedPosition == -1) {
+						assignConstant = expression.constant;
+						if (valueRequired) {
+							/*
+							 * restart code gen because we either:
+							 * - need the value
+							 * - the constant can have potential side-effect
+							 */
+							localBinding.useFlag = LocalVariableBinding.USED;
+							throw new AbortMethod(CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE, null);
+						} else if (assignConstant == Constant.NotAConstant) {
+							// we only need to generate the value of the expression's constant if it is not a constant expression
+							expression.generateCode(currentScope, codeStream, false);
+						}
+						return;
+					}
 					codeStream.load(localBinding);
 			}
 	}
@@ -598,7 +671,11 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 public void generatePostIncrement(BlockScope currentScope, CodeStream codeStream, CompoundAssignment postIncrement, boolean valueRequired) {
 	switch (this.bits & ASTNode.RestrictiveFlagMASK) {
 		case Binding.FIELD : // assigning to a field
-			FieldBinding codegenField = (((FieldBinding)this.binding).original());
+			FieldBinding fieldBinding = (FieldBinding)this.binding;
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+			// check if postIncrement is the only usage of a private field
+			reportOnlyUselesslyReadPrivateField(currentScope, fieldBinding, valueRequired);
+			FieldBinding codegenField = fieldBinding.original();
 			if (codegenField.isStatic()) {
 				if ((this.syntheticAccessors == null) || (this.syntheticAccessors[SingleNameReference.READ] == null)) {
 					TypeBinding constantPoolDeclaringClass = CodeStream.getConstantPoolDeclaringClass(currentScope, codegenField, this.actualReceiverType, true /* implicit this */);
@@ -661,6 +738,18 @@ public void generatePostIncrement(BlockScope currentScope, CodeStream codeStream
 			return;
 		case Binding.LOCAL : // assigning to a local variable
 			LocalVariableBinding localBinding = (LocalVariableBinding) this.binding;
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=185682
+			// check if postIncrement is the only usage of this local
+			Reference.reportOnlyUselesslyReadLocal(currentScope, localBinding, valueRequired);
+			if (localBinding.resolvedPosition == -1) {
+				if (valueRequired) {
+					// restart code gen
+					localBinding.useFlag = LocalVariableBinding.USED;
+					throw new AbortMethod(CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE, null);
+				}
+				return;
+			}
+
 			// using incr bytecode if possible
 			if (localBinding.type == TypeBinding.INT) {
 				if (valueRequired) {
@@ -726,6 +815,10 @@ public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, Fl
 	if ((this.bits & ASTNode.RestrictiveFlagMASK) == Binding.LOCAL) {
 		LocalVariableBinding localVariableBinding = (LocalVariableBinding) this.binding;
 		if (localVariableBinding != null) {
+			if ((localVariableBinding.tagBits & TagBits.NotInitialized) != 0) {
+				// local was tagged as uninitialized
+				return;
+			}
 			switch(localVariableBinding.useFlag) {
 				case LocalVariableBinding.FAKE_USED :
 				case LocalVariableBinding.USED :
@@ -736,7 +829,7 @@ public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, Fl
 }
 
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo, boolean isReadAccess) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0)	return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)	return;
 
 	//If inlinable field, forget the access emulation, the code gen will directly target it
 	if (this.constant != Constant.NotAConstant)
@@ -769,13 +862,8 @@ public int nullStatus(FlowInfo flowInfo) {
 			return FlowInfo.UNKNOWN;
 		case Binding.LOCAL : // reading a local variable
 			LocalVariableBinding local = (LocalVariableBinding) this.binding;
-			if (local != null) {
-				if (flowInfo.isDefinitelyNull(local))
-					return FlowInfo.NULL;
-				if (flowInfo.isDefinitelyNonNull(local))
-					return FlowInfo.NON_NULL;
-				return FlowInfo.UNKNOWN;
-			}
+			if (local != null)
+				return flowInfo.nullStatus(local);
 	}
 	return FlowInfo.NON_NULL; // never get there
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
index faaa9eb..85e465a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 335093 - [compiler][null] minimal hook for future null annotation support
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -54,6 +55,11 @@ public abstract FlowInfo analyseCode(BlockScope currentScope, FlowContext flowCo
 	public static final int COMPLAINED_FAKE_REACHABLE = 1;
 	public static final int COMPLAINED_UNREACHABLE = 2;
 	
+/** Empty hook for checking null status against declaration using null annotations, once this will be supported. */
+protected int checkAgainstNullAnnotation(BlockScope currentScope, LocalVariableBinding local, int nullStatus) {
+	return nullStatus;
+}
+
 /**
  * INTERNAL USE ONLY.
  * This is used to redirect inter-statements jumps.
@@ -66,7 +72,8 @@ public void branchChainTo(BranchLabel label) {
 // complaintLevel = 0 if was reachable up until now, 1 if fake reachable (deadcode), 2 if fatal unreachable (error)
 public int complainIfUnreachable(FlowInfo flowInfo, BlockScope scope, int previousComplaintLevel) {
 	if ((flowInfo.reachMode() & FlowInfo.UNREACHABLE) != 0) {
-		this.bits &= ~ASTNode.IsReachable;
+		if ((flowInfo.reachMode() & FlowInfo.UNREACHABLE_OR_DEAD) != 0)
+			this.bits &= ~ASTNode.IsReachable;
 		if (flowInfo == FlowInfo.DEAD_END) {
 			if (previousComplaintLevel < COMPLAINED_UNREACHABLE) {
 				scope.problemReporter().unreachableCode(this);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SuperReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SuperReference.java
index eba697f..5444d2a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SuperReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SuperReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 package org.eclipse.jdt.internal.compiler.ast;
 
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
+import org.eclipse.jdt.internal.compiler.flow.FlowContext;
+import org.eclipse.jdt.internal.compiler.flow.FlowInfo;
 import org.eclipse.jdt.internal.compiler.impl.Constant;
 import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
@@ -66,4 +68,9 @@ public class SuperReference extends ThisReference {
 		visitor.visit(this, blockScope);
 		visitor.endVisit(this, blockScope);
 	}
+	
+	public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) {
+		currentScope.resetEnclosingMethodStaticFlag();
+		return analyseCode(currentScope, flowContext, flowInfo);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
index 5a71646..6fbfe22 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -47,6 +48,9 @@ public class SwitchStatement extends Statement {
 	public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
 		try {
 			flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
+			if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
+				this.expression.checkNPE(currentScope, flowContext, flowInfo);
+			}
 			SwitchFlowContext switchContext =
 				new SwitchFlowContext(flowContext, this, (this.breakLabel = new BranchLabel()));
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SynchronizedStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SynchronizedStatement.java
index 1ce89ee..b2c6dfd 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SynchronizedStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SynchronizedStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,7 +64,7 @@ public FlowInfo analyseCode(
 		currentScope.methodScope().recordInitializationStates(flowInfo);
 
 	// optimizing code gen
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) {
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) {
 		this.bits |= ASTNode.BlockExit;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ThisReference.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ThisReference.java
index 586af3f..45b6447 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ThisReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ThisReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -127,4 +127,13 @@ public class ThisReference extends Reference {
 		visitor.visit(this, blockScope);
 		visitor.endVisit(this, blockScope);
 	}
+
+	public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
+		if (!isImplicitThis()) {
+			// explicit this reference, not allowed in static context
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335780
+			currentScope.resetEnclosingMethodStaticFlag();
+		}
+		return super.analyseCode(currentScope, flowContext, flowInfo);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TryStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TryStatement.java
index ab49caf..3d61e62 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TryStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TryStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,7 +101,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 			tryInfo = flowInfo;
 		} else {
 			tryInfo = this.tryBlock.analyseCode(currentScope, handlingContext, flowInfo.copy());
-			if ((tryInfo.tagBits & FlowInfo.UNREACHABLE) != 0)
+			if ((tryInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)
 				this.bits |= ASTNode.IsTryBlockExiting;
 		}
 
@@ -150,7 +150,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 				ifTrue: [catchInits addPotentialInitializationsFrom: tryInits]."
 				*/
 				if (this.tryBlock.statements == null) {
-					catchInfo.setReachMode(FlowInfo.UNREACHABLE);
+					catchInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 				}
 				catchInfo =
 					this.catchBlocks[i].analyseCode(
@@ -159,7 +159,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 						catchInfo);
 				this.catchExitInitStateIndexes[i] = currentScope.methodScope().recordInitializationStates(catchInfo);
 				this.catchExits[i] =
-					(catchInfo.tagBits & FlowInfo.UNREACHABLE) != 0;
+					(catchInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0;
 				tryInfo = tryInfo.mergedWith(catchInfo.unconditionalInits());
 			}
 		}
@@ -210,7 +210,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 			tryInfo = flowInfo;
 		} else {
 			tryInfo = this.tryBlock.analyseCode(currentScope, handlingContext, flowInfo.copy());
-			if ((tryInfo.tagBits & FlowInfo.UNREACHABLE) != 0)
+			if ((tryInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)
 				this.bits |= ASTNode.IsTryBlockExiting;
 		}
 
@@ -259,7 +259,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 				ifTrue: [catchInits addPotentialInitializationsFrom: tryInits]."
 				*/
 				if (this.tryBlock.statements == null) {
-					catchInfo.setReachMode(FlowInfo.UNREACHABLE);
+					catchInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 				}
 				catchInfo =
 					this.catchBlocks[i].analyseCode(
@@ -268,7 +268,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 						catchInfo);
 				this.catchExitInitStateIndexes[i] = currentScope.methodScope().recordInitializationStates(catchInfo);
 				this.catchExits[i] =
-					(catchInfo.tagBits & FlowInfo.UNREACHABLE) != 0;
+					(catchInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0;
 				tryInfo = tryInfo.mergedWith(catchInfo.unconditionalInits());
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
index 03e279c..b475932 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public class TypeDeclaration extends Statement implements ProblemSeverities, Ref
 	public TypeDeclaration enclosingType; // for member types only
 
 	public FieldBinding enumValuesSyntheticfield; 	// for enum
+	public int enumConstantsCounter;
 
 	// 1.5 support
 	public TypeParameter[] typeParameters;
@@ -191,7 +192,7 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 	if (this.ignoreFurtherInvestigation)
 		return flowInfo;
 	try {
-		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 			this.bits |= ASTNode.IsReachable;
 			LocalTypeBinding localType = (LocalTypeBinding) this.binding;
 			localType.setConstantPoolName(currentScope.compilationUnitScope().computeConstantPoolName(localType));
@@ -229,7 +230,7 @@ public void analyseCode(ClassScope currentScope, FlowContext flowContext, FlowIn
 	if (this.ignoreFurtherInvestigation)
 		return;
 	try {
-		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+		if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 			this.bits |= ASTNode.IsReachable;
 			LocalTypeBinding localType = (LocalTypeBinding) this.binding;
 			localType.setConstantPoolName(currentScope.compilationUnitScope().computeConstantPoolName(localType));
@@ -632,7 +633,7 @@ private void internalAnalyseCode(FlowContext flowContext, FlowInfo flowInfo) {
 		for (int i = 0, count = this.fields.length; i < count; i++) {
 			FieldDeclaration field = this.fields[i];
 			if (field.isStatic()) {
-				if ((staticFieldInfo.tagBits & FlowInfo.UNREACHABLE) != 0)
+				if ((staticFieldInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)
 					field.bits &= ~ASTNode.IsReachable;
 
 				/*if (field.isField()){
@@ -645,10 +646,10 @@ private void internalAnalyseCode(FlowContext flowContext, FlowInfo flowInfo) {
 				// branch, since the previous initializer already got the blame.
 				if (staticFieldInfo == FlowInfo.DEAD_END) {
 					this.staticInitializerScope.problemReporter().initializerMustCompleteNormally(field);
-					staticFieldInfo = FlowInfo.initial(this.maxFieldCount).setReachMode(FlowInfo.UNREACHABLE);
+					staticFieldInfo = FlowInfo.initial(this.maxFieldCount).setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 				}
 			} else {
-				if ((nonStaticFieldInfo.tagBits & FlowInfo.UNREACHABLE) != 0)
+				if ((nonStaticFieldInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)
 					field.bits &= ~ASTNode.IsReachable;
 
 				/*if (field.isField()){
@@ -661,7 +662,7 @@ private void internalAnalyseCode(FlowContext flowContext, FlowInfo flowInfo) {
 				// branch, since the previous initializer already got the blame.
 				if (nonStaticFieldInfo == FlowInfo.DEAD_END) {
 					this.initializerScope.problemReporter().initializerMustCompleteNormally(field);
-					nonStaticFieldInfo = FlowInfo.initial(this.maxFieldCount).setReachMode(FlowInfo.UNREACHABLE);
+					nonStaticFieldInfo = FlowInfo.initial(this.maxFieldCount).setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 				}
 			}
 		}
@@ -724,7 +725,7 @@ public final static int kind(int flags) {
  * 15.9.2
  */
 public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) return;
 	NestedTypeBinding nestedType = (NestedTypeBinding) this.binding;
 
 	MethodScope methodScope = currentScope.methodScope();
@@ -775,7 +776,7 @@ public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, Fl
  * Local member cannot be static.
  */
 public void manageEnclosingInstanceAccessIfNecessary(ClassScope currentScope, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 	NestedTypeBinding nestedType = (NestedTypeBinding) this.binding;
 	nestedType.addSyntheticArgumentAndField(this.binding.enclosingType());
 	}
@@ -978,7 +979,7 @@ public void resolve() {
 			// if Object writeReplace() throws java.io.ObjectStreamException is present, then no serialVersionUID is needed
 			// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=101476
 			CompilationUnitScope compilationUnitScope = this.scope.compilationUnitScope();
-			MethodBinding methodBinding = sourceType.getExactMethod(TypeConstants.WRITEREPLACE, new TypeBinding[0], compilationUnitScope);
+			MethodBinding methodBinding = sourceType.getExactMethod(TypeConstants.WRITEREPLACE, Binding.NO_TYPES, compilationUnitScope);
 			ReferenceBinding[] throwsExceptions;
 			needSerialVersion =
 				methodBinding == null
@@ -1187,6 +1188,28 @@ public void resolve(BlockScope blockScope) {
 			ReferenceBinding existingType = (ReferenceBinding) existing;
 			if (existingType instanceof TypeVariableBinding) {
 				blockScope.problemReporter().typeHiding(this, (TypeVariableBinding) existingType);
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=312989, check for collision with enclosing type.
+				Scope outerScope = blockScope.parent;
+checkOuterScope:while (outerScope != null) {
+					Binding existing2 = outerScope.getType(this.name);
+					if (existing2 instanceof TypeVariableBinding && existing2.isValidBinding()) {
+						TypeVariableBinding tvb = (TypeVariableBinding) existingType;
+						Binding declaringElement = tvb.declaringElement;
+						if (declaringElement instanceof ReferenceBinding
+								&& CharOperation.equals(((ReferenceBinding) declaringElement).sourceName(), this.name)) {
+							blockScope.problemReporter().typeCollidesWithEnclosingType(this);
+							break checkOuterScope;
+						}
+					} else if (existing2 instanceof ReferenceBinding
+							&& existing2.isValidBinding()
+							&& outerScope.isDefinedInType((ReferenceBinding) existing2)) { 
+							blockScope.problemReporter().typeCollidesWithEnclosingType(this);
+							break checkOuterScope;
+					} else if (existing2 == null) {
+						break checkOuterScope;
+					}
+					outerScope = outerScope.parent;
+				}
 			} else if (existingType instanceof LocalTypeBinding
 						&& ((LocalTypeBinding) existingType).scope.methodScope() == blockScope.methodScope()) {
 					// dup in same method
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java
index 4b80b5b..c51042e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/WhileStatement.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for bug 319201 - [null] no warning when unboxing SingleNameReference causes NPE
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.ast;
 
@@ -63,6 +64,9 @@ public class WhileStatement extends Statement {
 					new LoopingFlowContext(flowContext, flowInfo, this, null,
 						null, currentScope)),
 				condInfo);
+		if ((this.condition.implicitConversion & TypeIds.UNBOXING) != 0) {
+			this.condition.checkNPE(currentScope, flowContext, flowInfo);
+		}
 
 		LoopingFlowContext loopingContext;
 		FlowInfo actionInfo;
@@ -78,7 +82,7 @@ public class WhileStatement extends Statement {
 			} else {
 				FlowInfo mergedInfo = flowInfo.copy().addInitializationsFrom(condInfo.initsWhenFalse());
 				if (isConditionOptimizedTrue){
-					mergedInfo.setReachMode(FlowInfo.UNREACHABLE);
+					mergedInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 				}
 				this.mergedInitStateIndex =
 					currentScope.methodScope().recordInitializationStates(mergedInfo);
@@ -100,7 +104,7 @@ public class WhileStatement extends Statement {
 			} else {
 				actionInfo = condInfo.initsWhenTrue().copy();
 				if (isConditionOptimizedFalse){
-					actionInfo.setReachMode(FlowInfo.UNREACHABLE);
+					actionInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
 				}
 			}
 
@@ -116,11 +120,10 @@ public class WhileStatement extends Statement {
 			// code generation can be optimized when no need to continue in the loop
 			exitBranch = flowInfo.copy();
 			// need to start over from flowInfo so as to get null inits
-
-			if ((actionInfo.tagBits &
-					loopingContext.initsOnContinue.tagBits &
-					FlowInfo.UNREACHABLE) != 0) {
-				this.continueLabel = null;
+            int combinedTagBits = actionInfo.tagBits & loopingContext.initsOnContinue.tagBits;
+			if ((combinedTagBits & FlowInfo.UNREACHABLE) != 0) {
+				if ((combinedTagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0)
+					this.continueLabel = null;
 				exitBranch.addInitializationsFrom(condInfo.initsWhenFalse());
 			} else {
 				condLoopContext.complainOnDeferredFinalChecks(currentScope,
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfoWithParameterAnnotations.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfoWithParameterAnnotations.java
index fbb568b..9d871b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfoWithParameterAnnotations.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/MethodInfoWithParameterAnnotations.java
@@ -1,23 +1,36 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    tyeung at bea.com - initial API and implementation
+ *    tyeung at bea.com  - initial API and implementation
+ *    IBM Corporation - fix for bug 342757
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.classfmt;
 
 import org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
+import org.eclipse.jdt.internal.compiler.util.Util;
 
 class MethodInfoWithParameterAnnotations extends MethodInfoWithAnnotations {
 	private AnnotationInfo[][] parameterAnnotations;
 
 MethodInfoWithParameterAnnotations(MethodInfo methodInfo, AnnotationInfo[] annotations, AnnotationInfo[][] parameterAnnotations) {
 	super(methodInfo, annotations);
-	this.parameterAnnotations = parameterAnnotations;
+	if (methodInfo.isConstructor()) {
+		int parametersCount = Util.getParameterCount(methodInfo.getMethodDescriptor());
+		if (parameterAnnotations.length < parametersCount) {
+			AnnotationInfo[][] temp = new AnnotationInfo[parametersCount][];
+			System.arraycopy(parameterAnnotations, 0, temp, 1, parameterAnnotations.length);
+			this.parameterAnnotations = temp;
+		} else {
+			this.parameterAnnotations = parameterAnnotations;
+		}
+	} else {
+		this.parameterAnnotations = parameterAnnotations;
+	}
 }
 
 public IBinaryAnnotation[] getParameterAnnotations(int index) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
index d1e6563..3e82230 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,10 +15,13 @@ import org.eclipse.jdt.internal.compiler.ClassFile;
 import org.eclipse.jdt.internal.compiler.CompilationResult;
 import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.AllocationExpression;
 import org.eclipse.jdt.internal.compiler.ast.ExplicitConstructorCall;
 import org.eclipse.jdt.internal.compiler.ast.Expression;
+import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.OperatorIds;
+import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.flow.UnconditionalFlowInfo;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
@@ -41,7 +44,8 @@ public class CodeStream {
 	static LocalVariableBinding[] noLocals = new LocalVariableBinding[LOCALS_INCREMENT];
 	static LocalVariableBinding[] noVisibleLocals = new LocalVariableBinding[LOCALS_INCREMENT];
 	public static final CompilationResult RESTART_IN_WIDE_MODE = new CompilationResult((char[])null, 0, 0, 0);
-	
+	public static final CompilationResult RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE = new CompilationResult((char[])null, 0, 0, 0);
+
 	public int allLocalsCounter;
 	public byte[] bCodeStream;
 	public ClassFile classFile; // The current classfile it is associated to.
@@ -2444,7 +2448,24 @@ public void generateSyntheticBodyForEnumValues(SyntheticMethodBinding methodBind
 	aload_2();
 	areturn();
 }
-
+public void generateSyntheticBodyForEnumInitializationMethod(SyntheticMethodBinding methodBinding) {
+	// no local used
+	this.maxLocals = 0;
+	// generate all enum constants
+	SourceTypeBinding sourceTypeBinding = (SourceTypeBinding) methodBinding.declaringClass;
+	TypeDeclaration typeDeclaration = sourceTypeBinding.scope.referenceContext;
+	BlockScope staticInitializerScope = typeDeclaration.staticInitializerScope;
+	FieldDeclaration[] fieldDeclarations = typeDeclaration.fields;
+	for (int i = methodBinding.startIndex, max = methodBinding.endIndex; i < max; i++) {
+		FieldDeclaration fieldDecl = fieldDeclarations[i];
+		if (fieldDecl.isStatic()) {
+			if (fieldDecl.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT) {
+				fieldDecl.generateCode(staticInitializerScope, this);
+			}
+		}
+	}
+	return_();
+}
 public void generateSyntheticBodyForFieldReadAccess(SyntheticMethodBinding accessMethod) {
 	initializeMaxLocals(accessMethod);
 	FieldBinding fieldBinding = accessMethod.targetReadField;
@@ -6197,7 +6218,9 @@ public void resetForProblemClinit(ClassFile targetClassFile) {
 public void resetInWideMode() {
 	this.wideMode = true;
 }
-
+public void resetForCodeGenUnusedLocals() {
+	// nothing to do in standard code stream
+}
 private final void resizeByteArray() {
 	int length = this.bCodeStream.length;
 	int requiredSize = length + length;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java
index 013d8b6..9dd6960 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -539,6 +539,10 @@ public void resetInWideMode() {
 	this.resetSecretLocals();
 	super.resetInWideMode();
 }
+public void resetForCodeGenUnusedLocals() {
+	this.resetSecretLocals();
+	super.resetForCodeGenUnusedLocals();
+}
 public void resetSecretLocals() {
 	for (int i = 0, max = this.locals.length; i < max; i++) {
 		LocalVariableBinding localVariableBinding = this.locals[i];
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ConditionalFlowInfo.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ConditionalFlowInfo.java
index 5e1681e..c137b42 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ConditionalFlowInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ConditionalFlowInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -165,17 +165,37 @@ public void markAsDefinitelyNull(LocalVariableBinding local) {
 	this.initsWhenFalse.markAsDefinitelyNull(local);
 }
 
+public void resetNullInfo(LocalVariableBinding local) {
+	this.initsWhenTrue.resetNullInfo(local);
+	this.initsWhenFalse.resetNullInfo(local);
+}
+
+public void markPotentiallyNullBit(LocalVariableBinding local) {
+	this.initsWhenTrue.markPotentiallyNullBit(local);
+	this.initsWhenFalse.markPotentiallyNullBit(local);
+}
+
+public void markPotentiallyNonNullBit(LocalVariableBinding local) {
+	this.initsWhenTrue.markPotentiallyNonNullBit(local);
+	this.initsWhenFalse.markPotentiallyNonNullBit(local);
+}
+
 public void markAsDefinitelyUnknown(LocalVariableBinding local) {
 	this.initsWhenTrue.markAsDefinitelyUnknown(local);
 	this.initsWhenFalse.markAsDefinitelyUnknown(local);
 }
 
+public void markPotentiallyUnknownBit(LocalVariableBinding local) {
+	this.initsWhenTrue.markPotentiallyUnknownBit(local);
+	this.initsWhenFalse.markPotentiallyUnknownBit(local);
+}
+
 public FlowInfo setReachMode(int reachMode) {
 	if (reachMode == REACHABLE) {
 		this.tagBits &= ~UNREACHABLE;
 	}
 	else {
-		this.tagBits |= UNREACHABLE;
+		this.tagBits |= reachMode;
 	}
 	this.initsWhenTrue.setReachMode(reachMode);
 	this.initsWhenFalse.setReachMode(reachMode);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ExceptionHandlingFlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ExceptionHandlingFlowContext.java
index 4786e1e..ddfcd0a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ExceptionHandlingFlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/ExceptionHandlingFlowContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -227,8 +227,8 @@ public void recordHandlingException(
 }
 
 public void recordReturnFrom(UnconditionalFlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
-		if ((this.initsOnReturn.tagBits & FlowInfo.UNREACHABLE) == 0) {
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
+		if ((this.initsOnReturn.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 			this.initsOnReturn = this.initsOnReturn.mergedWith(flowInfo);
 		}
 		else {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FinallyFlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FinallyFlowContext.java
index 37bf18f..0590583 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FinallyFlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FinallyFlowContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -229,14 +229,14 @@ public void complainOnDeferredChecks(FlowInfo flowInfo, BlockScope scope) {
 									scope.problemReporter().localVariableRedundantCheckOnNonNull(local, reference);
 								}
 								if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-									flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+									flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 								}
 							} else if (checkType == (CAN_ONLY_NULL_NON_NULL | IN_COMPARISON_NULL)) {
 								if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
 									scope.problemReporter().localVariableNonNullComparedToNull(local, reference);
 								}
 								if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-									flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+									flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 								}
 							}
 							return;
@@ -252,7 +252,7 @@ public void complainOnDeferredChecks(FlowInfo flowInfo, BlockScope scope) {
 										scope.problemReporter().localVariableRedundantCheckOnNull(local, reference);
 									}
 									if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-										flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+										flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 									}
 									return;
 								case FlowContext.IN_COMPARISON_NON_NULL:
@@ -264,7 +264,7 @@ public void complainOnDeferredChecks(FlowInfo flowInfo, BlockScope scope) {
 										scope.problemReporter().localVariableNullComparedToNonNull(local, reference);
 									}
 									if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-										flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+										flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 									}
 									return;
 								case FlowContext.IN_ASSIGNMENT:
@@ -314,14 +314,14 @@ public void complainOnDeferredChecks(FlowInfo flowInfo, BlockScope scope) {
 									scope.problemReporter().localVariableRedundantCheckOnNonNull(local, reference);
 								}
 								if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-									flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+									flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 								}
 							} else {
 								if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
 									scope.problemReporter().localVariableNonNullComparedToNull(local, reference);
 								}
 								if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-									flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+									flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 								}
 							}
 							return;
@@ -342,7 +342,7 @@ public void complainOnDeferredChecks(FlowInfo flowInfo, BlockScope scope) {
 										scope.problemReporter().localVariableRedundantCheckOnNull(local, reference);
 									}
 									if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-										flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+										flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 									}
 									return;
 								case FlowContext.IN_COMPARISON_NON_NULL:
@@ -354,7 +354,7 @@ public void complainOnDeferredChecks(FlowInfo flowInfo, BlockScope scope) {
 										scope.problemReporter().localVariableNullComparedToNonNull(local, reference);
 									}
 									if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-										flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+										flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 									}
 									return;
 								case FlowContext.IN_ASSIGNMENT:
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
index 369d24e..2ce915a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -530,7 +530,7 @@ public void recordReturnFrom(UnconditionalFlowInfo flowInfo) {
 }
 
 public void recordSettingFinal(VariableBinding variable, Reference finalReference, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0)	{
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0)	{
 	// for initialization inside looping statement that effectively loops
 	FlowContext context = this;
 	while (context != null) {
@@ -578,14 +578,14 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 						scope.problemReporter().localVariableRedundantCheckOnNonNull(local, reference);
 					}
 					if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-						flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+						flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 					}
 				} else {
 					if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
 						scope.problemReporter().localVariableNonNullComparedToNull(local, reference);
 					}
 					if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-						flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+						flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 					}
 				}
 				return;
@@ -609,7 +609,7 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 							scope.problemReporter().localVariableRedundantCheckOnNull(local, reference);
 						}
 						if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-							flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+							flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 						}
 						return;
 					case FlowContext.IN_COMPARISON_NON_NULL:
@@ -621,7 +621,7 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 							scope.problemReporter().localVariableNullComparedToNonNull(local, reference);
 						}
 						if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-							flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+							flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 						}
 						return;
 					case FlowContext.IN_ASSIGNMENT:
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java
index 886309e..5c995f9 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,9 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 332637 - Dead Code detection removing code that isn't dead
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contributions for 
+ *     				bug 292478 - Report potentially null across variable assignment
+ *     				bug 332637 - Dead Code detection removing code that isn't dead
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.flow;
 
@@ -20,12 +22,30 @@ public abstract class FlowInfo {
 
 	public int tagBits; // REACHABLE by default
 	public final static int REACHABLE = 0;
-	public final static int UNREACHABLE = 1;
-	public final static int NULL_FLAG_MASK = 2;
-
-	public final static int UNKNOWN = 0;
-	public final static int NULL = 1;
-	public final static int NON_NULL = -1;
+	/* unreachable code 
+	 * eg. while (true);
+	 *     i++;  --> unreachable code 
+	 */
+	public final static int UNREACHABLE_OR_DEAD = 1;
+	/* unreachable code as inferred by null analysis
+	 * eg. str = null;
+	 *     if (str != null) {
+	 *        // dead code
+	 *     }
+	 */
+	public final static int UNREACHABLE_BY_NULLANALYSIS = 2;
+	/*
+	 * code unreachable in any fashion
+	 */
+	public final static int UNREACHABLE = UNREACHABLE_OR_DEAD | UNREACHABLE_BY_NULLANALYSIS;
+	public final static int NULL_FLAG_MASK = 4;
+	
+	public final static int UNKNOWN = 1;
+	public final static int NULL = 2;
+	public final static int NON_NULL = 4;
+	public final static int POTENTIALLY_UNKNOWN = 8;
+	public final static int POTENTIALLY_NULL = 16;
+	public final static int POTENTIALLY_NON_NULL = 32;
 
 	public static final UnconditionalFlowInfo DEAD_END; // Represents a dead branch status of initialization
 	static {
@@ -256,6 +276,26 @@ abstract public void markAsComparedEqualToNull(LocalVariableBinding local);
 	abstract public void markAsDefinitelyNull(LocalVariableBinding local);
 
 	/**
+	 * Reset all null-information about a given local.
+	 */
+	abstract public void resetNullInfo(LocalVariableBinding local);
+
+	/**
+	 * Record a local may have got assigned to unknown (set the bit on existing info).
+	 */
+	abstract public void markPotentiallyUnknownBit(LocalVariableBinding local);
+
+	/**
+	 * Record a local may have got assigned to null (set the bit on existing info).
+	 */
+	abstract public void markPotentiallyNullBit(LocalVariableBinding local);
+
+	/**
+	 * Record a local may have got assigned to non-null (set the bit on existing info).
+	 */
+	abstract public void markPotentiallyNonNullBit(LocalVariableBinding local);
+
+	/**
 	 * Record a local got definitely assigned.
 	 */
 	abstract public void markAsDefinitelyAssigned(LocalVariableBinding local);
@@ -266,6 +306,61 @@ abstract public void markAsComparedEqualToNull(LocalVariableBinding local);
 abstract public void markAsDefinitelyUnknown(LocalVariableBinding local);
 
 /**
+ * Mark the null status of the given local according to the given status
+ * @param local
+ * @param nullStatus bitset of FLowInfo.UNKNOWN ... FlowInfo.POTENTIALLY_NON_NULL
+ */
+public void markNullStatus(LocalVariableBinding local, int nullStatus) {
+	switch(nullStatus) {
+		// definite status?
+		case FlowInfo.UNKNOWN :
+			markAsDefinitelyUnknown(local);
+			break;
+		case FlowInfo.NULL :
+			markAsDefinitelyNull(local);
+			break;
+		case FlowInfo.NON_NULL :
+			markAsDefinitelyNonNull(local);
+			break;
+		default:
+			// collect potential status:
+			resetNullInfo(local);
+			if ((nullStatus & FlowInfo.POTENTIALLY_UNKNOWN) != 0)
+				markPotentiallyUnknownBit(local);
+			if ((nullStatus & FlowInfo.POTENTIALLY_NULL) != 0)
+				markPotentiallyNullBit(local);
+			if ((nullStatus & FlowInfo.POTENTIALLY_NON_NULL) != 0)
+				markPotentiallyNonNullBit(local);
+			if ((nullStatus & (FlowInfo.POTENTIALLY_NULL|FlowInfo.POTENTIALLY_NON_NULL|FlowInfo.POTENTIALLY_UNKNOWN)) == 0)
+				markAsDefinitelyUnknown(local);
+	}
+}
+
+/**
+ * Answer the null status of the given local
+ * @param local
+ * @return bitset of FlowInfo.UNKNOWN ... FlowInfo.POTENTIALLY_NON_NULL
+ */
+public int nullStatus(LocalVariableBinding local) {
+	if (isDefinitelyUnknown(local))
+		return FlowInfo.UNKNOWN;
+	if (isDefinitelyNull(local))
+		return FlowInfo.NULL;
+	if (isDefinitelyNonNull(local))
+		return FlowInfo.NON_NULL;
+	int status = 0;
+	if (isPotentiallyUnknown(local))
+		status |= FlowInfo.POTENTIALLY_UNKNOWN;
+	if (isPotentiallyNull(local))
+		status |= FlowInfo.POTENTIALLY_NULL;
+	if (isPotentiallyNonNull(local))
+		status |= FlowInfo.POTENTIALLY_NON_NULL;
+	if (status > 0)
+		return status;
+	return FlowInfo.UNKNOWN;
+}
+
+/**
  * Merge branches using optimized boolean conditions
  */
 public static UnconditionalFlowInfo mergedOptimizedBranches(
@@ -275,7 +370,7 @@ public static UnconditionalFlowInfo mergedOptimizedBranches(
 	UnconditionalFlowInfo mergedInfo;
 	if (isOptimizedTrue){
 		if (initsWhenTrue == FlowInfo.DEAD_END && allowFakeDeadBranch) {
-			mergedInfo = initsWhenFalse.setReachMode(FlowInfo.UNREACHABLE).
+			mergedInfo = initsWhenFalse.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD).
 				unconditionalInits();
 		}
 		else {
@@ -287,7 +382,7 @@ public static UnconditionalFlowInfo mergedOptimizedBranches(
 	}
 	else if (isOptimizedFalse) {
 		if (initsWhenFalse == FlowInfo.DEAD_END && allowFakeDeadBranch) {
-			mergedInfo = initsWhenTrue.setReachMode(FlowInfo.UNREACHABLE).
+			mergedInfo = initsWhenTrue.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD).
 				unconditionalInits();
 		}
 		else {
@@ -314,7 +409,7 @@ public static UnconditionalFlowInfo mergedOptimizedBranchesIfElse(
 	UnconditionalFlowInfo mergedInfo;
 	if (isOptimizedTrue){
 		if (initsWhenTrue == FlowInfo.DEAD_END && allowFakeDeadBranch) {
-			mergedInfo = initsWhenFalse.setReachMode(FlowInfo.UNREACHABLE).
+			mergedInfo = initsWhenFalse.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD).
 				unconditionalInits();
 		}
 		else {
@@ -326,7 +421,7 @@ public static UnconditionalFlowInfo mergedOptimizedBranchesIfElse(
 	}
 	else if (isOptimizedFalse) {
 		if (initsWhenFalse == FlowInfo.DEAD_END && allowFakeDeadBranch) {
-			mergedInfo = initsWhenTrue.setReachMode(FlowInfo.UNREACHABLE).
+			mergedInfo = initsWhenTrue.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD).
 				unconditionalInits();
 		}
 		else {
@@ -376,10 +471,9 @@ public static UnconditionalFlowInfo mergedOptimizedBranchesIfElse(
 }
 
 /**
- * Return REACHABLE if this flow info is reachable, UNREACHABLE
- * else.
- * @return REACHABLE if this flow info is reachable, UNREACHABLE
- *         else
+ * Find out the reachability mode of this flowInfo.
+ * @return REACHABLE if this flow info is reachable, otherwise
+ *         either UNREACHABLE_OR_DEAD or UNREACHABLE_BY_NULLANALYSIS.
  */
 public int reachMode() {
 	return this.tagBits & UNREACHABLE;
@@ -396,7 +490,8 @@ abstract public FlowInfo safeInitsWhenTrue();
 
 /**
  * Set this flow info reach mode and return this.
- * @param reachMode one of {@link #REACHABLE REACHABLE} or {@link #UNREACHABLE UNREACHABLE}
+ * @param reachMode one of {@link #REACHABLE REACHABLE}, {@link #UNREACHABLE_OR_DEAD UNREACHABLE_OR_DEAD},
+ * {@link #UNREACHABLE_BY_NULLANALYSIS UNREACHABLE_BY_NULLANALYSIS} or {@link #UNREACHABLE UNREACHABLE}
  * @return this, with the reach mode set to reachMode
  */
 abstract public FlowInfo setReachMode(int reachMode);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/InsideSubRoutineFlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/InsideSubRoutineFlowContext.java
index 4ffc764..4daa2c7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/InsideSubRoutineFlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/InsideSubRoutineFlowContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,7 @@ public boolean isNonReturningContext() {
 }
 
 public void recordReturnFrom(UnconditionalFlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0)	{
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0)	{
 	if (this.initsOnReturn == FlowInfo.DEAD_END) {
 		this.initsOnReturn = (UnconditionalFlowInfo) flowInfo.copy();
 	} else {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
index 69fe575..e243384 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/LoopingFlowContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - contribution for Bug 336428 - [compiler][null] bogus warning "redundant null check" in condition of do {} while() loop
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.flow;
 
@@ -384,42 +385,42 @@ public void recordBreakTo(FlowContext targetContext) {
 }
 
 public void recordContinueFrom(FlowContext innerFlowContext, FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0)	{
-	if ((this.initsOnContinue.tagBits & FlowInfo.UNREACHABLE) == 0) {
-		this.initsOnContinue = this.initsOnContinue.
-			mergedWith(flowInfo.unconditionalInitsWithoutSideEffect());
-	}
-	else {
-		this.initsOnContinue = flowInfo.unconditionalCopy();
-	}
-	FlowContext inner = innerFlowContext;
-	while (inner != this && !(inner instanceof LoopingFlowContext)) {
-		inner = inner.parent;
-	}
-	if (inner == this) {
-		this.upstreamNullFlowInfo.
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0)	{
+		if ((this.initsOnContinue.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
+			this.initsOnContinue = this.initsOnContinue.
+					mergedWith(flowInfo.unconditionalInitsWithoutSideEffect());
+		}
+		else {
+			this.initsOnContinue = flowInfo.unconditionalCopy();
+		}
+		FlowContext inner = innerFlowContext;
+		while (inner != this && !(inner instanceof LoopingFlowContext)) {
+			inner = inner.parent;
+		}
+		if (inner == this) {
+			this.upstreamNullFlowInfo.
 			addPotentialNullInfoFrom(
-				flowInfo.unconditionalInitsWithoutSideEffect());
-	}
-	else {
-		int length = 0;
-		if (this.innerFlowContexts == null) {
-			this.innerFlowContexts = new LoopingFlowContext[5];
-			this.innerFlowInfos = new UnconditionalFlowInfo[5];
+					flowInfo.unconditionalInitsWithoutSideEffect());
 		}
-		else if (this.innerFlowContextsCount ==
-				(length = this.innerFlowContexts.length) - 1) {
-			System.arraycopy(this.innerFlowContexts, 0,
-				(this.innerFlowContexts = new LoopingFlowContext[length + 5]),
-				0, length);
-			System.arraycopy(this.innerFlowInfos, 0,
-				(this.innerFlowInfos= new UnconditionalFlowInfo[length + 5]),
-				0, length);
+		else {
+			int length = 0;
+			if (this.innerFlowContexts == null) {
+				this.innerFlowContexts = new LoopingFlowContext[5];
+				this.innerFlowInfos = new UnconditionalFlowInfo[5];
+			}
+			else if (this.innerFlowContextsCount ==
+					(length = this.innerFlowContexts.length) - 1) {
+				System.arraycopy(this.innerFlowContexts, 0,
+						(this.innerFlowContexts = new LoopingFlowContext[length + 5]),
+						0, length);
+				System.arraycopy(this.innerFlowInfos, 0,
+						(this.innerFlowInfos= new UnconditionalFlowInfo[length + 5]),
+						0, length);
+			}
+			this.innerFlowContexts[this.innerFlowContextsCount] = (LoopingFlowContext) inner;
+			this.innerFlowInfos[this.innerFlowContextsCount++] =
+					flowInfo.unconditionalInitsWithoutSideEffect();
 		}
-		this.innerFlowContexts[this.innerFlowContextsCount] = (LoopingFlowContext) inner;
-		this.innerFlowInfos[this.innerFlowContextsCount++] =
-			flowInfo.unconditionalInitsWithoutSideEffect();
-	}
 	}
 }
 
@@ -493,14 +494,14 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 						scope.problemReporter().localVariableRedundantCheckOnNonNull(local, reference);
 					}
 					if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-						flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+						flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 					}
 				} else {
 					if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
 						scope.problemReporter().localVariableNonNullComparedToNull(local, reference);
 					}
 					if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-						flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+						flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 					}
 				}
 			} else if (flowInfo.isDefinitelyNull(local)) {
@@ -509,26 +510,34 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 						scope.problemReporter().localVariableRedundantCheckOnNull(local, reference);
 					}
 					if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-						flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+						flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 					}
 				} else {
 					if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
 						scope.problemReporter().localVariableNullComparedToNonNull(local, reference);
 					}
 					if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-						flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+						flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 					}
 				}
-			} else if (this.upstreamNullFlowInfo.isDefinitelyNonNull(local) && !flowInfo.isPotentiallyNull(local)) {    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=291418
+			} else if (this.upstreamNullFlowInfo.isDefinitelyNonNull(local) && !flowInfo.isPotentiallyNull(local) && !flowInfo.isPotentiallyUnknown(local)) {    
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=291418
 				flowInfo.markAsDefinitelyNonNull(local);
 				if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
 					recordNullReference(local, reference, checkType);
 				}
-			} else if (! flowInfo.cannotBeDefinitelyNullOrNonNull(local)) {
-				if (flowInfo.isPotentiallyNonNull(local)) {
-					recordNullReference(local, reference, CAN_ONLY_NON_NULL | checkType & CONTEXT_MASK);
-				} else {
-					if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
+			} else if (flowInfo.cannotBeDefinitelyNullOrNonNull(local)) {
+				return; // no reason to complain, since there is definitely some uncertainty making the comparison relevant.
+			} else {
+				if ((this.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) == 0) {
+					// note: pot non-null & pot null is already captured by cannotBeDefinitelyNullOrNonNull()
+					if (flowInfo.isPotentiallyNonNull(local)) {
+						// knowing 'local' can be non-null, we're only interested in seeing whether it can *only* be non-null 
+						recordNullReference(local, reference, CAN_ONLY_NON_NULL | checkType & CONTEXT_MASK);
+					} else if (flowInfo.isPotentiallyNull(local)) {
+						// knowing 'local' can be null, we're only interested in seeing whether it can *only* be null
+						recordNullReference(local, reference, CAN_ONLY_NULL | checkType & CONTEXT_MASK);
+					} else {
 						recordNullReference(local, reference, checkType);
 					}
 				}
@@ -539,7 +548,10 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 		case CAN_ONLY_NULL | IN_ASSIGNMENT:
 		case CAN_ONLY_NULL | IN_INSTANCEOF:
 			if (flowInfo.isPotentiallyNonNull(local)
-					|| flowInfo.isPotentiallyUnknown(local)) {
+					|| flowInfo.isPotentiallyUnknown(local)
+					|| flowInfo.isProtectedNonNull(local)) {
+				// if variable is not null, we are not interested in recording null reference for deferred checks.
+				// This is because CAN_ONLY_NULL means we're only interested in cases when variable can be null.
 				return;
 			}
 			if (flowInfo.isDefinitelyNull(local)) {
@@ -553,7 +565,7 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 							scope.problemReporter().localVariableRedundantCheckOnNull(local, reference);
 						}
 						if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-							flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE);
+							flowInfo.initsWhenFalse().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 						}
 						return;
 					case FlowContext.IN_COMPARISON_NON_NULL:
@@ -565,7 +577,7 @@ public void recordUsingNullReference(Scope scope, LocalVariableBinding local,
 							scope.problemReporter().localVariableNullComparedToNonNull(local, reference);
 						}
 						if (!flowInfo.isMarkedAsNullOrNonNullInAssertExpression(local)) {
-							flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE);
+							flowInfo.initsWhenTrue().setReachMode(FlowInfo.UNREACHABLE_BY_NULLANALYSIS);
 						}
 						return;
 					case FlowContext.IN_ASSIGNMENT:
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/NullInfoRegistry.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/NullInfoRegistry.java
index 1bf7738..1470795 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/NullInfoRegistry.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/NullInfoRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 320170   
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.flow;
 
@@ -319,7 +320,7 @@ public UnconditionalFlowInfo mitigateNullInfoOf(FlowInfo flowInfo) {
 			// prot. non null
 		& ((a2 = this.nullBit2) | (a4 = this.nullBit4));
 			// null or unknown
-	m2 = s1 & (s2 = this.nullBit2) & (s3 ^ s4)
+	m2 = s1 & (s2 = this.nullBit2) & (s3 ^ s4) // TODO(stephan): potential typo: should this be "s2 = source.nullBit2"???
 			// prot. null
 		& ((a3 = this.nullBit3) | a4);
 			// non null or unknown
@@ -336,6 +337,18 @@ public UnconditionalFlowInfo mitigateNullInfoOf(FlowInfo flowInfo) {
 		source.nullBit2 &= (nm1 = ~m1) & ((nm2 = ~m2) | a4);
 		source.nullBit3 &= (nm1 | a2) & nm2;
 		source.nullBit4 &= nm1 & nm2;
+		// any variable that is (pot n, pot nn, pot un) at end of try (as captured by *this* NullInfoRegistry)
+		// has the same uncertainty also for the mitigated case (function result)
+		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=320170 -  [compiler] [null] Whitebox issues in null analysis
+		// and org.eclipse.jdt.core.tests.compiler.regression.NullReferenceTest.test0536_try_finally()
+		long x = ~this.nullBit1 & a2 & a3 & a4; // x is set for all variable ids that have state 0111 (pot n, pot nn, pot un)
+		if (x != 0) {
+			// restore state 0111 for all variable ids in x:
+			source.nullBit1 &= ~x;
+			source.nullBit2 |= x;
+			source.nullBit3 |= x;
+			source.nullBit4 |= x;
+		}
 	}
 	if (this.extra != null && source.extra != null) {
 		int length = this.extra[2].length, sourceLength = source.extra[0].length;
@@ -389,5 +402,148 @@ public String toString(){
 			return nullS + "]>"; //$NON-NLS-1$
 	}
 }
+
+/**
+ * Mark a local as potentially having been assigned to an unknown value.
+ * @param local the local to mark
+ */
+public void markPotentiallyUnknownBit(LocalVariableBinding local) {
+	// protected from non-object locals in calling methods
+	if (this != DEAD_END) {
+		this.tagBits |= NULL_FLAG_MASK;
+        int position;
+        long mask;
+        if ((position = local.id + this.maxFieldCount) < BitCacheSize) {
+            // use bits
+        	mask = 1L << position;
+        	isTrue((this.nullBit1 & mask) == 0, "Adding 'unknown' mark in unexpected state"); //$NON-NLS-1$
+            this.nullBit4 |= mask;
+            if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 46) {
+				  	this.nullBit4 = ~0;
+				}
+			}
+        } else {
+    		// use extra vector
+    		int vectorIndex = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+    			int length = vectorIndex + 1;
+    			this.extra = new long[extraLength][];
+    			for (int j = 2; j < extraLength; j++) {
+    				this.extra[j] = new long[length];
+    			}
+    		} else {
+    			int oldLength; // might need to grow the arrays
+    			if (vectorIndex >= (oldLength = this.extra[2].length)) {
+    				for (int j = 2; j < extraLength; j++) {
+    					System.arraycopy(this.extra[j], 0,
+    						(this.extra[j] = new long[vectorIndex + 1]), 0,
+    						oldLength);
+    				}
+    			}
+    		}
+    		mask = 1L << (position % BitCacheSize);
+    		isTrue((this.extra[2][vectorIndex] & mask) == 0, "Adding 'unknown' mark in unexpected state"); //$NON-NLS-1$
+    		this.extra[5][vectorIndex] |= mask;
+    		if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 47) {
+					this.extra[5][vectorIndex] = ~0;
+				}
+			}
+    	}
+	}
+}
+
+public void markPotentiallyNullBit(LocalVariableBinding local) {
+	if (this != DEAD_END) {
+		this.tagBits |= NULL_FLAG_MASK;
+        int position;
+        long mask;
+        if ((position = local.id + this.maxFieldCount) < BitCacheSize) {
+            // use bits
+        	mask = 1L << position;
+        	isTrue((this.nullBit1 & mask) == 0, "Adding 'potentially null' mark in unexpected state"); //$NON-NLS-1$
+            this.nullBit2 |= mask;
+            if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 40) {
+				  	this.nullBit4 = ~0;
+				}
+			}
+        } else {
+    		// use extra vector
+    		int vectorIndex = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+    			int length = vectorIndex + 1;
+    			this.extra = new long[extraLength][];
+    			for (int j = 2; j < extraLength; j++) {
+    				this.extra[j] = new long[length];
+    			}
+    		} else {
+    			int oldLength; // might need to grow the arrays
+    			if (vectorIndex >= (oldLength = this.extra[2].length)) {
+    				for (int j = 2; j < extraLength; j++) {
+    					System.arraycopy(this.extra[j], 0,
+    						(this.extra[j] = new long[vectorIndex + 1]), 0,
+    						oldLength);
+    				}
+    			}
+    		}
+    		mask = 1L << (position % BitCacheSize);
+    		this.extra[3][vectorIndex] |= mask;
+    		isTrue((this.extra[2][vectorIndex] & mask) == 0, "Adding 'potentially null' mark in unexpected state"); //$NON-NLS-1$
+    		if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 41) {
+					this.extra[5][vectorIndex] = ~0;
+				}
+			}
+    	}
+	}
+}
+
+public void markPotentiallyNonNullBit(LocalVariableBinding local) {
+	if (this != DEAD_END) {
+		this.tagBits |= NULL_FLAG_MASK;
+        int position;
+        long mask;
+        if ((position = local.id + this.maxFieldCount) < BitCacheSize) {
+            // use bits
+        	mask = 1L << position;
+        	isTrue((this.nullBit1 & mask) == 0, "Adding 'potentially non-null' mark in unexpected state"); //$NON-NLS-1$
+            this.nullBit3 |= mask;
+            if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 42) {
+				  	this.nullBit4 = ~0;
+				}
+			}
+        } else {
+    		// use extra vector
+    		int vectorIndex  = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+    			int length = vectorIndex + 1;
+    			this.extra = new long[extraLength][];
+    			for (int j = 2; j < extraLength; j++) {
+    				this.extra[j] = new long[length];
+    			}
+    		} else {
+    			int oldLength; // might need to grow the arrays
+    			if (vectorIndex >= (oldLength = this.extra[2].length)) {
+    				for (int j = 2; j < extraLength; j++) {
+    					System.arraycopy(this.extra[j], 0,
+    						(this.extra[j] = new long[vectorIndex + 1]), 0,
+    						oldLength);
+    				}
+    			}
+    		}
+    		mask = 1L << (position % BitCacheSize);
+    		isTrue((this.extra[2][vectorIndex] & mask) == 0, "Adding 'potentially non-null' mark in unexpected state"); //$NON-NLS-1$
+    		this.extra[4][vectorIndex] |= mask;
+    		if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 43) {
+					this.extra[5][vectorIndex] = ~0;
+				}
+			}
+    	}
+	}
+}
 }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java
index f0772c0..c17fa4e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,7 @@ public boolean isBreakable() {
 }
 
 public void recordBreakFrom(FlowInfo flowInfo) {
-	if ((this.initsOnBreak.tagBits & FlowInfo.UNREACHABLE) == 0) {
+	if ((this.initsOnBreak.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 		this.initsOnBreak = this.initsOnBreak.mergedWith(flowInfo.unconditionalInits());
 	}
 	else {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/UnconditionalFlowInfo.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/UnconditionalFlowInfo.java
index 0287c1f..d5b5a3d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/UnconditionalFlowInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/UnconditionalFlowInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,12 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 332637   
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contributions for
+ *     						bug 325755 - [compiler] wrong initialization state after conditional expression
+ *     						bug 320170 - [compiler] [null] Whitebox issues in null analysis
+ *     						bug 292478 - Report potentially null across variable assignment
+ *     						bug 332637 - Dead Code detection removing code that isn't dead
+ *     						bug 341499 - [compiler][null] allocate extra bits in all methods of UnconditionalFlowInfo
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.flow;
 
@@ -24,10 +29,8 @@ import org.eclipse.jdt.internal.compiler.lookup.TagBits;
  * No caching of pre-allocated instances.
  */
 public class UnconditionalFlowInfo extends FlowInfo {
-	// Coverage tests
 	/**
-	 * Exception raised when unexpected behavior is detected during coverage
-	 * tests.
+	 * Exception raised when unexpected behavior is detected.
 	 */
 	public static class AssertionFailedException extends RuntimeException {
 		private static final long serialVersionUID = 1827352841030089703L;
@@ -64,6 +67,7 @@ public class UnconditionalFlowInfo extends FlowInfo {
 		0100	pot. null
 		0101	pot. n & pot. un
 		0110	pot. n & pot. nn
+		0111    pot. n & pot. nn & pot. un
 		1001	def. unknown
 		1010	def. non null
 		1011	pot. nn & prot. nn
@@ -106,7 +110,7 @@ private FlowInfo addInfoFrom(FlowInfo inits, boolean handleInits) {
 		// union of potentially set ones
 		this.potentialInits |= otherInits.potentialInits;
 	}
-
+	
 	// combine null information
 	boolean thisHadNulls = (this.tagBits & NULL_FLAG_MASK) != 0,
 		otherHasNulls = (otherInits.tagBits & NULL_FLAG_MASK) != 0;
@@ -731,7 +735,7 @@ final private boolean isDefinitelyAssigned(int position) {
 final public boolean isDefinitelyAssigned(FieldBinding field) {
 	// Mirrored in CodeStream.isDefinitelyAssigned(..)
 	// do not want to complain in unreachable code
-	if ((this.tagBits & UNREACHABLE) != 0) {
+	if ((this.tagBits & UNREACHABLE_OR_DEAD) != 0) {
 		return true;
 	}
 	return isDefinitelyAssigned(field.id);
@@ -739,7 +743,7 @@ final public boolean isDefinitelyAssigned(FieldBinding field) {
 
 final public boolean isDefinitelyAssigned(LocalVariableBinding local) {
 	// do not want to complain in unreachable code if local declared in reachable code
-	if ((this.tagBits & UNREACHABLE) != 0 && (local.declaration.bits & ASTNode.IsLocalDeclarationReachable) != 0) {
+	if ((this.tagBits & UNREACHABLE_OR_DEAD) != 0 && (local.declaration.bits & ASTNode.IsLocalDeclarationReachable) != 0) {
 		return true;
 	}
 	return isDefinitelyAssigned(local.id + this.maxFieldCount);
@@ -860,6 +864,7 @@ final public boolean isPotentiallyAssigned(LocalVariableBinding local) {
 	return isPotentiallyAssigned(local.id + this.maxFieldCount);
 }
 
+// TODO (Ayush) Check why this method does not return true for protected non null (1111)
 final public boolean isPotentiallyNonNull(LocalVariableBinding local) {
 	if ((this.tagBits & NULL_FLAG_MASK) == 0 ||
 			(local.type.tagBits & TagBits.IsBaseType) != 0) {
@@ -885,6 +890,7 @@ final public boolean isPotentiallyNonNull(LocalVariableBinding local) {
 		    & (1L << (position % BitCacheSize))) != 0;
 }
 
+// TODO (Ayush) Check why this method does not return true for protected null
 final public boolean isPotentiallyNull(LocalVariableBinding local) {
 	if ((this.tagBits & NULL_FLAG_MASK) == 0 ||
 			(local.type.tagBits & TagBits.IsBaseType) != 0) {
@@ -987,7 +993,20 @@ final public boolean isProtectedNull(LocalVariableBinding local) {
 	        & (this.extra[4][vectorIndex] ^ this.extra[5][vectorIndex])
 		    & (1L << (position % BitCacheSize))) != 0;
 }
-
+/** Asserts that the given boolean is <code>true</code>. If this
+ * is not the case, some kind of unchecked exception is thrown.
+ * The given message is included in that exception, to aid debugging.
+ *
+ * @param expression the outcome of the check
+ * @param message the message to include in the exception
+ * @return <code>true</code> if the check passes (does not return
+ *    if the check fails)
+ */
+protected static boolean isTrue(boolean expression, String message) {
+	if (!expression)
+		throw new AssertionFailedException("assertion failed: " + message); //$NON-NLS-1$
+	return expression;
+}
 public void markAsComparedEqualToNonNull(LocalVariableBinding local) {
 	// protected from non-object locals in calling methods
 	if (this != DEAD_END) {
@@ -1245,8 +1264,25 @@ public void markAsDefinitelyNonNull(LocalVariableBinding local) {
     	}
     	else {
     		// use extra vector
-    		int vectorIndex ;
-    		this.extra[2][vectorIndex = (position / BitCacheSize) - 1]
+    		int vectorIndex = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+    			int length = vectorIndex + 1;
+    			this.extra = new long[extraLength][];
+    			for (int j = 0; j < extraLength; j++) {
+    				this.extra[j] = new long[length];
+    			}
+    		}
+    		else {
+    			int oldLength; // might need to grow the arrays
+    			if (vectorIndex >= (oldLength = this.extra[0].length)) {
+    				for (int j = 0; j < extraLength; j++) {
+    					System.arraycopy(this.extra[j], 0,
+    						(this.extra[j] = new long[vectorIndex + 1]), 0,
+    						oldLength);
+    				}
+    			}
+    		}
+    		this.extra[2][vectorIndex]
     		    |= (mask = 1L << (position % BitCacheSize));
     		this.extra[4][vectorIndex] |= mask;
     		this.extra[3][vectorIndex] &= (mask = ~mask);
@@ -1282,8 +1318,25 @@ public void markAsDefinitelyNull(LocalVariableBinding local) {
     	}
     	else {
     		// use extra vector
-    		int vectorIndex ;
-    		this.extra[2][vectorIndex = (position / BitCacheSize) - 1]
+    		int vectorIndex = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+    			int length = vectorIndex + 1;
+    			this.extra = new long[extraLength][];
+    			for (int j = 0; j < extraLength; j++) {
+    				this.extra[j] = new long[length];
+    			}
+    		}
+    		else {
+    			int oldLength; // might need to grow the arrays
+    			if (vectorIndex >= (oldLength = this.extra[0].length)) {
+    				for (int j = 0; j < extraLength; j++) {
+    					System.arraycopy(this.extra[j], 0,
+    						(this.extra[j] = new long[vectorIndex + 1]), 0,
+    						oldLength);
+    				}
+    			}
+    		}
+    		this.extra[2][vectorIndex]
     		    |= (mask = 1L << (position % BitCacheSize));
     		this.extra[3][vectorIndex] |= mask;
     		this.extra[4][vectorIndex] &= (mask = ~mask);
@@ -1326,8 +1379,25 @@ public void markAsDefinitelyUnknown(LocalVariableBinding local) {
 		}
 		else {
 			// use extra vector
-			int vectorIndex ;
-			this.extra[2][vectorIndex = (position / BitCacheSize) - 1]
+			int vectorIndex = (position / BitCacheSize) - 1;
+			if (this.extra == null) {
+				int length = vectorIndex + 1;
+				this.extra = new long[extraLength][];
+				for (int j = 0; j < extraLength; j++) {
+					this.extra[j] = new long[length];
+				}
+			}
+			else {
+				int oldLength; // might need to grow the arrays
+				if (vectorIndex >= (oldLength = this.extra[0].length)) {
+					for (int j = 0; j < extraLength; j++) {
+						System.arraycopy(this.extra[j], 0,
+							(this.extra[j] = new long[vectorIndex + 1]), 0,
+							oldLength);
+					}
+				}
+			}
+			this.extra[2][vectorIndex]
 			    |= (mask = 1L << (position % BitCacheSize));
 			this.extra[5][vectorIndex] |= mask;
 			this.extra[3][vectorIndex] &= (mask = ~mask);
@@ -1341,21 +1411,197 @@ public void markAsDefinitelyUnknown(LocalVariableBinding local) {
 	}
 }
 
+public void resetNullInfo(LocalVariableBinding local) {
+	if (this != DEAD_END) {
+		this.tagBits |= NULL_FLAG_MASK;
+        int position;
+        long mask;
+        if ((position = local.id + this.maxFieldCount) < BitCacheSize) {
+            // use bits
+            this.nullBit1 &= (mask = ~(1L << position));
+            this.nullBit2 &= mask;
+            this.nullBit3 &= mask;
+            this.nullBit4 &= mask;
+        } else {
+    		// use extra vector
+    		int vectorIndex = (position / BitCacheSize) - 1;
+    		if (this.extra == null || vectorIndex >= this.extra[2].length) {
+    			// in case we attempt to reset the null info of a variable that has not been encountered
+    			// before and for which no null bits exist.
+    			return;
+    		}
+    		this.extra[2][vectorIndex]
+    		    &= (mask = ~(1L << (position % BitCacheSize)));
+    		this.extra[3][vectorIndex] &= mask;
+    		this.extra[4][vectorIndex] &= mask;
+    		this.extra[5][vectorIndex] &= mask;
+    	}
+	}
+}
+
+/**
+ * Mark a local as potentially having been assigned to an unknown value.
+ * @param local the local to mark
+ */
+public void markPotentiallyUnknownBit(LocalVariableBinding local) {
+	// protected from non-object locals in calling methods
+	if (this != DEAD_END) {
+		this.tagBits |= NULL_FLAG_MASK;
+        int position;
+        long mask;
+        if ((position = local.id + this.maxFieldCount) < BitCacheSize) {
+            // use bits
+        	mask = 1L << position;
+        	isTrue((this.nullBit1 & mask) == 0, "Adding 'unknown' mark in unexpected state"); //$NON-NLS-1$
+            this.nullBit4 |= mask;
+            if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 46) {
+				  	this.nullBit4 = ~0;
+				}
+			}
+        } else {
+    		// use extra vector
+    		int vectorIndex = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+				int length = vectorIndex + 1;
+				this.extra = new long[extraLength][];
+				for (int j = 0; j < extraLength; j++) {
+					this.extra[j] = new long[length];
+				}
+			}
+			else {
+				int oldLength; // might need to grow the arrays
+				if (vectorIndex >= (oldLength = this.extra[0].length)) {
+					for (int j = 0; j < extraLength; j++) {
+						System.arraycopy(this.extra[j], 0,
+							(this.extra[j] = new long[vectorIndex + 1]), 0,
+							oldLength);
+					}
+				}
+			}
+    		mask = 1L << (position % BitCacheSize);
+    		isTrue((this.extra[2][vectorIndex] & mask) == 0, "Adding 'unknown' mark in unexpected state"); //$NON-NLS-1$
+    		this.extra[5][vectorIndex] |= mask;
+    		if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 47) {
+					this.extra[5][vectorIndex] = ~0;
+				}
+			}
+    	}
+	}
+}
+
+public void markPotentiallyNullBit(LocalVariableBinding local) {
+	if (this != DEAD_END) {
+		this.tagBits |= NULL_FLAG_MASK;
+        int position;
+        long mask;
+        if ((position = local.id + this.maxFieldCount) < BitCacheSize) {
+            // use bits
+        	mask = 1L << position;
+        	isTrue((this.nullBit1 & mask) == 0, "Adding 'potentially null' mark in unexpected state"); //$NON-NLS-1$
+            this.nullBit2 |= mask;
+            if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 40) {
+				  	this.nullBit4 = ~0;
+				}
+			}
+        } else {
+    		// use extra vector
+    		int vectorIndex = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+				int length = vectorIndex + 1;
+				this.extra = new long[extraLength][];
+				for (int j = 0; j < extraLength; j++) {
+					this.extra[j] = new long[length];
+				}
+			}
+			else {
+				int oldLength; // might need to grow the arrays
+				if (vectorIndex >= (oldLength = this.extra[0].length)) {
+					for (int j = 0; j < extraLength; j++) {
+						System.arraycopy(this.extra[j], 0,
+							(this.extra[j] = new long[vectorIndex + 1]), 0,
+							oldLength);
+					}
+				}
+			}
+    		mask = 1L << (position % BitCacheSize);
+    		this.extra[3][vectorIndex] |= mask;
+    		isTrue((this.extra[2][vectorIndex] & mask) == 0, "Adding 'potentially null' mark in unexpected state"); //$NON-NLS-1$
+    		if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 41) {
+					this.extra[5][vectorIndex] = ~0;
+				}
+			}
+    	}
+	}
+}
+
+public void markPotentiallyNonNullBit(LocalVariableBinding local) {
+	if (this != DEAD_END) {
+		this.tagBits |= NULL_FLAG_MASK;
+        int position;
+        long mask;
+        if ((position = local.id + this.maxFieldCount) < BitCacheSize) {
+            // use bits
+        	mask = 1L << position;
+        	isTrue((this.nullBit1 & mask) == 0, "Adding 'potentially non-null' mark in unexpected state"); //$NON-NLS-1$
+            this.nullBit3 |= mask;
+            if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 42) {
+				  	this.nullBit4 = ~0;
+				}
+			}
+        } else {
+    		// use extra vector
+    		int vectorIndex  = (position / BitCacheSize) - 1;
+    		if (this.extra == null) {
+				int length = vectorIndex + 1;
+				this.extra = new long[extraLength][];
+				for (int j = 0; j < extraLength; j++) {
+					this.extra[j] = new long[length];
+				}
+			}
+			else {
+				int oldLength; // might need to grow the arrays
+				if (vectorIndex >= (oldLength = this.extra[0].length)) {
+					for (int j = 0; j < extraLength; j++) {
+						System.arraycopy(this.extra[j], 0,
+							(this.extra[j] = new long[vectorIndex + 1]), 0,
+							oldLength);
+					}
+				}
+			}
+    		mask = 1L << (position % BitCacheSize);
+    		isTrue((this.extra[2][vectorIndex] & mask) == 0, "Adding 'potentially non-null' mark in unexpected state"); //$NON-NLS-1$
+    		this.extra[4][vectorIndex] |= mask;
+    		if (COVERAGE_TEST_FLAG) {
+				if(CoverageTestId == 43) {
+					this.extra[5][vectorIndex] = ~0;
+				}
+			}
+    	}
+	}
+}
+
 public UnconditionalFlowInfo mergedWith(UnconditionalFlowInfo otherInits) {
-	if ((otherInits.tagBits & UNREACHABLE) != 0 && this != DEAD_END) {
+	if ((otherInits.tagBits & UNREACHABLE_OR_DEAD) != 0 && this != DEAD_END) {
 		if (COVERAGE_TEST_FLAG) {
 			if(CoverageTestId == 28) {
 				throw new AssertionFailedException("COVERAGE 28"); //$NON-NLS-1$
 			}
 		}
+		combineNullStatusChangeInAssertInfo(otherInits);
 		return this;
 	}
-	if ((this.tagBits & UNREACHABLE) != 0) {
+	if ((this.tagBits & UNREACHABLE_OR_DEAD) != 0) {
 		if (COVERAGE_TEST_FLAG) {
 			if(CoverageTestId == 29) {
 				throw new AssertionFailedException("COVERAGE 29"); //$NON-NLS-1$
 			}
 		}
+		otherInits.combineNullStatusChangeInAssertInfo(this);
 		return (UnconditionalFlowInfo) otherInits.copy(); // make sure otherInits won't be affected
 	}
 
@@ -1374,7 +1620,17 @@ public UnconditionalFlowInfo mergedWith(UnconditionalFlowInfo otherInits) {
 		na1, na2, na3, na4,
 		nb1, nb2, nb3, nb4,
 		b1, b2, b3, b4;
-	if (thisHadNulls) {
+	if ((otherInits.tagBits & FlowInfo.UNREACHABLE_BY_NULLANALYSIS) != 0) {
+		otherHasNulls = false; // skip merging, otherInits is unreachable by null analysis
+	} else if ((this.tagBits & FlowInfo.UNREACHABLE_BY_NULLANALYSIS) != 0) { // directly copy if this is unreachable by null analysis
+		this.nullBit1 = otherInits.nullBit1;
+		this.nullBit2 = otherInits.nullBit2;
+		this.nullBit3 = otherInits.nullBit3;
+		this.nullBit4 = otherInits.nullBit4;
+		thisHadNulls = false;
+		thisHasNulls = otherHasNulls;
+		this.tagBits = otherInits.tagBits;
+	} else if (thisHadNulls) {
     	if (otherHasNulls) {
     		this.nullBit1 = (a2 = this.nullBit2) & (a3 = this.nullBit3)
     							& (a4 = this.nullBit4) & (b1 = otherInits.nullBit1)
@@ -1402,6 +1658,18 @@ public UnconditionalFlowInfo mergedWith(UnconditionalFlowInfo otherInits) {
                         			| na2 & (nb3 | nb2))
                 			| na2 & b3 & b4
                 			| a2 & (nb1 & b4 | a3 & na4 & b1) & nb3);
+    		// the above formulae do not handle the state 0111, do it now explicitly:
+    		long ax = ~a1 & a2 & a3 & a4;
+    		long bx = ~b1 & b2 & b3 & b4;
+    		long x = ax|bx;
+    		if (x != 0) {
+    			// restore state 0111 for all variable ids in x:
+    			this.nullBit1 &= ~x;
+    			this.nullBit2 |= x;
+    			this.nullBit3 |= x;
+    			this.nullBit4 |= x;
+    		}
+		
     		if (COVERAGE_TEST_FLAG) {
     			if(CoverageTestId == 30) {
 	    		  	this.nullBit4 = ~0;
@@ -1546,6 +1814,17 @@ public UnconditionalFlowInfo mergedWith(UnconditionalFlowInfo otherInits) {
                         			| na2 & (nb3 | nb2))
                 			| na2 & b3 & b4
                 			| a2 & (nb1 & b4 | a3 & na4 & b1) & nb3);
+    		// the above formulae do not handle the state 0111, do it now explicitly:
+    		long ax = ~a1 & a2 & a3 & a4;
+    		long bx = ~b1 & b2 & b3 & b4;
+    		long x = ax|bx;
+    		if (x != 0) {
+    			// restore state 0111 for all variable ids in x:
+    			this.extra[2][i] &= ~x;
+    			this.extra[3][i] |= x;
+    			this.extra[4][i] |= x;
+    			this.extra[5][i] |= x;
+    		}
 			thisHasNulls = thisHasNulls ||
 				this.extra[3][i] != 0 ||
 				this.extra[4][i] != 0 ||
@@ -1620,6 +1899,7 @@ public UnconditionalFlowInfo nullInfoLessUnconditionalCopy() {
 	copy.potentialInits = this.potentialInits;
 	copy.tagBits = this.tagBits & ~NULL_FLAG_MASK;
 	copy.maxFieldCount = this.maxFieldCount;
+	copy.nullStatusChangedInAssert = this.nullStatusChangedInAssert;
 	if (this.extra != null) {
 		int length;
 		copy.extra = new long[extraLength][];
@@ -1645,6 +1925,8 @@ public FlowInfo setReachMode(int reachMode) {
 	}	
 	if (reachMode == REACHABLE ) {
 		this.tagBits &= ~UNREACHABLE;
+	} else if (reachMode == UNREACHABLE_BY_NULLANALYSIS ) {
+		this.tagBits |= UNREACHABLE_BY_NULLANALYSIS;	// do not interfere with definite assignment analysis
 	} else {
 		if ((this.tagBits & UNREACHABLE) == 0) {
 			// reset optional inits when becoming unreachable
@@ -1657,7 +1939,7 @@ public FlowInfo setReachMode(int reachMode) {
 				}
 			}
 		}
-		this.tagBits |= UNREACHABLE;
+		this.tagBits |= reachMode;
 	}
 	return this;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java
index 4f486df..ab8d632 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/BooleanConstant.java
@@ -56,7 +56,7 @@ public class BooleanConstant extends Constant {
 		if (getClass() != obj.getClass()) {
 			return false;
 		}
-		BooleanConstant other = (BooleanConstant) obj;
-		return this.value == other.value;
+		// cannot be true anymore as the first test would have returned true
+		return false;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
index fe6bf99..7f0ed9d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,7 @@ public class CompilerOptions {
 	public static final String OPTION_ReportMissingJavadocTags = "org.eclipse.jdt.core.compiler.problem.missingJavadocTags"; //$NON-NLS-1$
 	public static final String OPTION_ReportMissingJavadocTagsVisibility = "org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility"; //$NON-NLS-1$
 	public static final String OPTION_ReportMissingJavadocTagsOverriding = "org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding"; //$NON-NLS-1$
+	public static final String OPTION_ReportMissingJavadocTagsMethodTypeParameters = "org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters"; //$NON-NLS-1$
 	public static final String OPTION_ReportMissingJavadocComments = "org.eclipse.jdt.core.compiler.problem.missingJavadocComments"; //$NON-NLS-1$
 	public static final String OPTION_ReportMissingJavadocTagDescription = "org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription"; //$NON-NLS-1$
 	public static final String OPTION_ReportMissingJavadocCommentsVisibility = "org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility"; //$NON-NLS-1$
@@ -86,6 +87,7 @@ public class CompilerOptions {
 	public static final String OPTION_ReportUnusedDeclaredThrownExceptionIncludeDocCommentReference = "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference"; //$NON-NLS-1$
 	public static final String OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable = "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable"; //$NON-NLS-1$
 	public static final String OPTION_ReportUnqualifiedFieldAccess = "org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess"; //$NON-NLS-1$
+	public static final String OPTION_ReportUnavoidableGenericTypeProblems = "org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems"; //$NON-NLS-1$
 	public static final String OPTION_ReportUncheckedTypeOperation = "org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation"; //$NON-NLS-1$
 	public static final String OPTION_ReportRawTypeReference =  "org.eclipse.jdt.core.compiler.problem.rawTypeReference"; //$NON-NLS-1$
 	public static final String OPTION_ReportFinalParameterBound = "org.eclipse.jdt.core.compiler.problem.finalParameterBound"; //$NON-NLS-1$
@@ -131,12 +133,9 @@ public class CompilerOptions {
 	public static final String OPTION_ReportDeadCodeInTrivialIfStatement =  "org.eclipse.jdt.core.compiler.problem.deadCodeInTrivialIfStatement"; //$NON-NLS-1$
 	public static final String OPTION_ReportTasks = "org.eclipse.jdt.core.compiler.problem.tasks"; //$NON-NLS-1$
 	public static final String OPTION_ReportUnusedObjectAllocation = "org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation";  //$NON-NLS-1$
-
-	// Backward compatibility
-	public static final String OPTION_ReportInvalidAnnotation = "org.eclipse.jdt.core.compiler.problem.invalidAnnotation"; //$NON-NLS-1$
-	public static final String OPTION_ReportMissingAnnotation = "org.eclipse.jdt.core.compiler.problem.missingAnnotation"; //$NON-NLS-1$
-	public static final String OPTION_ReportMissingJavadoc = "org.eclipse.jdt.core.compiler.problem.missingJavadoc"; //$NON-NLS-1$
-
+	public static final String OPTION_IncludeNullInfoFromAsserts = "org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts";  //$NON-NLS-1$
+	public static final String OPTION_ReportMethodCanBeStatic = "org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic";  //$NON-NLS-1$
+	public static final String OPTION_ReportMethodCanBePotentiallyStatic = "org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic";  //$NON-NLS-1$
 	/**
 	 * Possible values for configurable options
 	 */
@@ -237,6 +236,8 @@ public class CompilerOptions {
 	public static final int DeadCode = IrritantSet.GROUP2 | ASTNode.Bit2;
 	public static final int Tasks = IrritantSet.GROUP2 | ASTNode.Bit3;
 	public static final int UnusedObjectAllocation = IrritantSet.GROUP2 | ASTNode.Bit4;
+	public static final int MethodCanBeStatic = IrritantSet.GROUP2 | ASTNode.Bit5;
+	public static final int MethodCanBePotentiallyStatic = IrritantSet.GROUP2 | ASTNode.Bit6;
 
 	// Severity level for handlers
 	/** 
@@ -256,11 +257,21 @@ public class CompilerOptions {
 	
 	/** Classfile debug information, may contain source file name, line numbers, local variable tables, etc... */
 	public int produceDebugAttributes; 
-	/** Compliance level for the compiler, refers to a JDK version, e.g. {link {@link ClassFileConstants#JDK1_4} */
+	/** Compliance level for the compiler, refers to a JDK version, e.g. {@link ClassFileConstants#JDK1_4} */
 	public long complianceLevel;
-	/** Java source level, refers to a JDK version, e.g. {link {@link ClassFileConstants#JDK1_4} */
+	/** Original compliance level for the compiler, refers to a JDK version, e.g. {@link ClassFileConstants#JDK1_4},
+	 *  Usually same as the field complianceLevel, though the latter could deviate to create temporary sandbox
+	 *  modes during reconcile operations. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=323633
+	 */
+	public long originalComplianceLevel;
+	/** Java source level, refers to a JDK version, e.g. {@link ClassFileConstants#JDK1_4} */
 	public long sourceLevel;
-	/** VM target level, refers to a JDK version, e.g. {link {@link ClassFileConstants#JDK1_4} */
+	/** Original Java source level, refers to a JDK version, e.g. {@link ClassFileConstants#JDK1_4} 
+	 *  Usually same as the field sourceLevel, though the latter could deviate to create temporary sandbox
+	 *  modes during reconcile operations. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=323633
+	 * */
+	public long originalSourceLevel;
+	/** VM target level, refers to a JDK version, e.g. {@link ClassFileConstants#JDK1_4} */
 	public long targetJDK;
 	/** Source encoding format */
 	public String defaultEncoding;
@@ -316,6 +327,8 @@ public class CompilerOptions {
 	public int reportMissingJavadocTagsVisibility;
 	/** Specify if need to flag missing javadoc tags for overriding method */
 	public boolean reportMissingJavadocTagsOverriding;
+	/** Specify if need to flag missing javadoc tags for method type parameters (java 1.5 and above)*/
+	public boolean reportMissingJavadocTagsMethodTypeParameters;
 	/** Only report missing javadoc comment above a given level of visibility of associated construct */
 	public int reportMissingJavadocCommentsVisibility;
 	/** Specify if need to flag missing javadoc comment for overriding method */
@@ -342,6 +355,10 @@ public class CompilerOptions {
 	public boolean generateClassFiles;
 	/** Indicate if method bodies should be ignored */
 	public boolean ignoreMethodBodies;
+	/** Raise null related warnings for variables tainted inside an assert statement (java 1.4 and above)*/
+	public boolean includeNullInfoFromAsserts;
+	/** Controls whether forced generic type problems get reported  */
+	public boolean reportUnavoidableGenericTypeProblems;
 
 	// keep in sync with warningTokenToIrritant and warningTokenFromIrritant
 	public final static String[] warningTokens = {
@@ -354,12 +371,14 @@ public class CompilerOptions {
 		"finally", //$NON-NLS-1$
 		"hiding", //$NON-NLS-1$
 		"incomplete-switch", //$NON-NLS-1$
+		"javadoc", //$NON-NLS-1$
 		"nls", //$NON-NLS-1$
 		"null", //$NON-NLS-1$
 		"restriction", //$NON-NLS-1$
 		"rawtypes", //$NON-NLS-1$
 		"serial", //$NON-NLS-1$
 		"static-access", //$NON-NLS-1$
+		"static-method", //$NON-NLS-1$
 		"super", //$NON-NLS-1$
 		"synthetic-access", //$NON-NLS-1$
 		"unchecked", //$NON-NLS-1$
@@ -524,6 +543,10 @@ public class CompilerOptions {
 				return OPTION_ReportDeadCode;
 			case UnusedObjectAllocation:
 				return OPTION_ReportUnusedObjectAllocation;
+			case MethodCanBeStatic :
+				return OPTION_ReportMethodCanBeStatic;
+			case MethodCanBePotentiallyStatic :
+				return OPTION_ReportMethodCanBePotentiallyStatic;
 		}
 		return null;
 	}
@@ -599,65 +622,93 @@ public class CompilerOptions {
 	/**
 	 * Return all warning option names for use as keys in compiler options maps.
 	 * @return all warning option names
-	 * TODO (maxime) revise for ensuring completeness
 	 */
 	public static String[] warningOptionNames() {
 		String[] result = {
 			OPTION_ReportAnnotationSuperInterface,
 			OPTION_ReportAssertIdentifier,
 			OPTION_ReportAutoboxing,
+			OPTION_ReportComparingIdentical,
 			OPTION_ReportDeadCode,
+			OPTION_ReportDeadCodeInTrivialIfStatement,
 			OPTION_ReportDeprecation,
+			OPTION_ReportDeprecationInDeprecatedCode,
+			OPTION_ReportDeprecationWhenOverridingDeprecatedMethod,
 			OPTION_ReportDiscouragedReference,
 			OPTION_ReportEmptyStatement,
 			OPTION_ReportEnumIdentifier,
 			OPTION_ReportFallthroughCase,
 			OPTION_ReportFieldHiding,
-			OPTION_ReportFinalParameterBound,
 			OPTION_ReportFinallyBlockNotCompletingNormally,
+			OPTION_ReportFinalParameterBound,
 			OPTION_ReportForbiddenReference,
 			OPTION_ReportHiddenCatchBlock,
 			OPTION_ReportIncompatibleNonInheritedInterfaceMethod,
 			OPTION_ReportIncompleteEnumSwitch,
 			OPTION_ReportIndirectStaticAccess,
 			OPTION_ReportInvalidJavadoc,
+			OPTION_ReportInvalidJavadocTags,
+			OPTION_ReportInvalidJavadocTagsDeprecatedRef,
+			OPTION_ReportInvalidJavadocTagsNotVisibleRef,
+			OPTION_ReportInvalidJavadocTagsVisibility,
 			OPTION_ReportLocalVariableHiding,
+			OPTION_ReportMethodCanBePotentiallyStatic,
+			OPTION_ReportMethodCanBeStatic,
 			OPTION_ReportMethodWithConstructorName,
 			OPTION_ReportMissingDeprecatedAnnotation,
+			OPTION_ReportMissingHashCodeMethod,
 			OPTION_ReportMissingJavadocComments,
+			OPTION_ReportMissingJavadocCommentsOverriding,
+			OPTION_ReportMissingJavadocCommentsVisibility,
 			OPTION_ReportMissingJavadocTagDescription,
 			OPTION_ReportMissingJavadocTags,
+			OPTION_ReportMissingJavadocTagsMethodTypeParameters,
+			OPTION_ReportMissingJavadocTagsOverriding,
+			OPTION_ReportMissingJavadocTagsVisibility,
 			OPTION_ReportMissingOverrideAnnotation,
+			OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation,
 			OPTION_ReportMissingSerialVersion,
+			OPTION_ReportMissingSynchronizedOnInheritedMethod,
 			OPTION_ReportNoEffectAssignment,
 			OPTION_ReportNoImplicitStringConversion,
 			OPTION_ReportNonExternalizedStringLiteral,
 			OPTION_ReportNonStaticAccessToStatic,
 			OPTION_ReportNullReference,
-			OPTION_ReportPotentialNullReference,
-			OPTION_ReportRedundantNullCheck,
-			OPTION_ReportRedundantSuperinterface,
+			OPTION_ReportOverridingMethodWithoutSuperInvocation,
 			OPTION_ReportOverridingPackageDefaultMethod,
 			OPTION_ReportParameterAssignment,
 			OPTION_ReportPossibleAccidentalBooleanAssignment,
+			OPTION_ReportPotentialNullReference,
+			OPTION_ReportRawTypeReference,
+			OPTION_ReportRedundantNullCheck,
+			OPTION_ReportRedundantSuperinterface,
+			OPTION_ReportSpecialParameterHidingField,
 			OPTION_ReportSyntheticAccessEmulation,
+			OPTION_ReportTasks,
 			OPTION_ReportTypeParameterHiding,
+			OPTION_ReportUnavoidableGenericTypeProblems,
 			OPTION_ReportUncheckedTypeOperation,
 			OPTION_ReportUndocumentedEmptyBlock,
+			OPTION_ReportUnhandledWarningToken,
 			OPTION_ReportUnnecessaryElse,
 			OPTION_ReportUnnecessaryTypeCheck,
 			OPTION_ReportUnqualifiedFieldAccess,
 			OPTION_ReportUnusedDeclaredThrownException,
+			OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable,
+			OPTION_ReportUnusedDeclaredThrownExceptionIncludeDocCommentReference,
+			OPTION_ReportUnusedDeclaredThrownExceptionWhenOverriding,
 			OPTION_ReportUnusedImport,
+			OPTION_ReportUnusedLabel,
 			OPTION_ReportUnusedLocal,
 			OPTION_ReportUnusedObjectAllocation,
 			OPTION_ReportUnusedParameter,
+			OPTION_ReportUnusedParameterIncludeDocCommentReference,
+			OPTION_ReportUnusedParameterWhenImplementingAbstract,
+			OPTION_ReportUnusedParameterWhenOverridingConcrete,
 			OPTION_ReportUnusedPrivateMember,
-			OPTION_ReportVarargsArgumentNeedCast,
-			OPTION_ReportUnhandledWarningToken,
-			OPTION_ReportUnusedWarningToken,
-			OPTION_ReportOverridingMethodWithoutSuperInvocation,
 			OPTION_ReportUnusedTypeArgumentsForMethodInvocation,
+			OPTION_ReportUnusedWarningToken,
+			OPTION_ReportVarargsArgumentNeedCast,
 		};
 		return result;
 	}
@@ -724,6 +775,13 @@ public class CompilerOptions {
 				return "fallthrough"; //$NON-NLS-1$
 			case OverridingMethodWithoutSuperInvocation :
 				return "super"; //$NON-NLS-1$
+			case MethodCanBeStatic :
+			case MethodCanBePotentiallyStatic :
+				return "static-method"; //$NON-NLS-1$
+			case InvalidJavadoc :
+			case MissingJavadocComments :
+			case MissingJavadocTags:
+				return "javadoc"; //$NON-NLS-1$				
 		}
 		return null;
 	}
@@ -764,6 +822,10 @@ public class CompilerOptions {
 				if ("incomplete-switch".equals(warningToken)) //$NON-NLS-1$
 					return IrritantSet.INCOMPLETE_SWITCH;
 				break;
+			case 'j' :
+				if ("javadoc".equals(warningToken)) //$NON-NLS-1$
+					return IrritantSet.JAVADOC;
+				break;
 			case 'n' :
 				if ("nls".equals(warningToken)) //$NON-NLS-1$
 					return IrritantSet.NLS;
@@ -781,6 +843,8 @@ public class CompilerOptions {
 					return IrritantSet.SERIAL;
 				if ("static-access".equals(warningToken)) //$NON-NLS-1$
 					return IrritantSet.STATIC_ACCESS;
+				if ("static-method".equals(warningToken)) //$NON-NLS-1$
+					return IrritantSet.STATIC_METHOD;
 				if ("synthetic-access".equals(warningToken)) //$NON-NLS-1$
 					return IrritantSet.SYNTHETIC_ACCESS;
 				if ("super".equals(warningToken)) { //$NON-NLS-1$
@@ -845,6 +909,7 @@ public class CompilerOptions {
 		optionsMap.put(OPTION_ReportMissingJavadocTags, getSeverityString(MissingJavadocTags));
 		optionsMap.put(OPTION_ReportMissingJavadocTagsVisibility, getVisibilityString(this.reportMissingJavadocTagsVisibility));
 		optionsMap.put(OPTION_ReportMissingJavadocTagsOverriding, this.reportMissingJavadocTagsOverriding ? ENABLED : DISABLED);
+		optionsMap.put(OPTION_ReportMissingJavadocTagsMethodTypeParameters, this.reportMissingJavadocTagsMethodTypeParameters ? ENABLED : DISABLED);
 		optionsMap.put(OPTION_ReportMissingJavadocComments, getSeverityString(MissingJavadocComments));
 		optionsMap.put(OPTION_ReportMissingJavadocTagDescription, this.reportMissingJavadocTagDescription);
 		optionsMap.put(OPTION_ReportMissingJavadocCommentsVisibility, getVisibilityString(this.reportMissingJavadocCommentsVisibility));
@@ -855,6 +920,7 @@ public class CompilerOptions {
 		optionsMap.put(OPTION_ReportUnusedDeclaredThrownExceptionIncludeDocCommentReference, this.reportUnusedDeclaredThrownExceptionIncludeDocCommentReference ? ENABLED : DISABLED);
 		optionsMap.put(OPTION_ReportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable, this.reportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable ? ENABLED : DISABLED);
 		optionsMap.put(OPTION_ReportUnqualifiedFieldAccess, getSeverityString(UnqualifiedFieldAccess));
+		optionsMap.put(OPTION_ReportUnavoidableGenericTypeProblems, this.reportUnavoidableGenericTypeProblems ? ENABLED : DISABLED);
 		optionsMap.put(OPTION_ReportUncheckedTypeOperation, getSeverityString(UncheckedTypeOperation));
 		optionsMap.put(OPTION_ReportRawTypeReference, getSeverityString(RawTypeReference));
 		optionsMap.put(OPTION_ReportFinalParameterBound, getSeverityString(FinalParameterBound));
@@ -904,6 +970,9 @@ public class CompilerOptions {
 		optionsMap.put(OPTION_ReportDeadCodeInTrivialIfStatement, this.reportDeadCodeInTrivialIfStatement ? ENABLED : DISABLED);
 		optionsMap.put(OPTION_ReportTasks, getSeverityString(Tasks));
 		optionsMap.put(OPTION_ReportUnusedObjectAllocation, getSeverityString(UnusedObjectAllocation));
+		optionsMap.put(OPTION_IncludeNullInfoFromAsserts, this.includeNullInfoFromAsserts ? ENABLED : DISABLED);
+		optionsMap.put(OPTION_ReportMethodCanBeStatic, getSeverityString(MethodCanBeStatic));
+		optionsMap.put(OPTION_ReportMethodCanBePotentiallyStatic, getSeverityString(MethodCanBePotentiallyStatic));
 		return optionsMap;
 	}
 
@@ -953,8 +1022,8 @@ public class CompilerOptions {
 		
 		// by default only lines and source attributes are generated.
 		this.produceDebugAttributes = ClassFileConstants.ATTR_SOURCE | ClassFileConstants.ATTR_LINES;
-		this.complianceLevel = ClassFileConstants.JDK1_4; // by default be compliant with 1.4
-		this.sourceLevel = ClassFileConstants.JDK1_3; //1.3 source behavior by default
+		this.complianceLevel = this.originalComplianceLevel = ClassFileConstants.JDK1_4; // by default be compliant with 1.4
+		this.sourceLevel = this.originalSourceLevel = ClassFileConstants.JDK1_3; //1.3 source behavior by default
 		this.targetJDK = ClassFileConstants.JDK1_2; // default generates for JVM1.2
 
 		this.defaultEncoding = null; // will use the platform default encoding
@@ -995,6 +1064,8 @@ public class CompilerOptions {
 		// constructor/setter parameter hiding
 		this.reportSpecialParameterHidingField = false;
 
+		this.reportUnavoidableGenericTypeProblems = true;
+
 		// check javadoc comments tags
 		this.reportInvalidJavadocTagsVisibility = ClassFileConstants.AccPublic;
 		this.reportInvalidJavadocTags = false;
@@ -1005,6 +1076,7 @@ public class CompilerOptions {
 		// check missing javadoc tags
 		this.reportMissingJavadocTagsVisibility = ClassFileConstants.AccPublic;
 		this.reportMissingJavadocTagsOverriding = false;
+		this.reportMissingJavadocTagsMethodTypeParameters = false;
 
 		// check missing javadoc comments
 		this.reportMissingJavadocCommentsVisibility = ClassFileConstants.AccPublic;
@@ -1048,6 +1120,9 @@ public class CompilerOptions {
 		
 		// ignore method bodies
 		this.ignoreMethodBodies = false;
+		
+		// allow null info from asserts to be considered downstream by default
+		this.includeNullInfoFromAsserts = false;
 	}
 
 	public void set(Map optionsMap) {
@@ -1117,11 +1192,11 @@ public class CompilerOptions {
 		}
 		if ((optionValue = optionsMap.get(OPTION_Compliance)) != null) {
 			long level = versionToJdkLevel(optionValue);
-			if (level != 0) this.complianceLevel = level;
+			if (level != 0) this.complianceLevel = this.originalComplianceLevel = level;
 		}
 		if ((optionValue = optionsMap.get(OPTION_Source)) != null) {
 			long level = versionToJdkLevel(optionValue);
-			if (level != 0) this.sourceLevel = level;
+			if (level != 0) this.sourceLevel = this.originalSourceLevel = level;
 		}
 		if ((optionValue = optionsMap.get(OPTION_TargetPlatform)) != null) {
 			long level = versionToJdkLevel(optionValue);
@@ -1172,6 +1247,13 @@ public class CompilerOptions {
 				this.reportSpecialParameterHidingField = false;
 			}
 		}
+		if ((optionValue = optionsMap.get(OPTION_ReportUnavoidableGenericTypeProblems)) != null) {
+			if (ENABLED.equals(optionValue)) {
+				this.reportUnavoidableGenericTypeProblems = true;
+			} else if (DISABLED.equals(optionValue)) {
+				this.reportUnavoidableGenericTypeProblems = false;
+			}
+		}
 		if ((optionValue = optionsMap.get(OPTION_ReportDeadCodeInTrivialIfStatement )) != null) {
 			if (ENABLED.equals(optionValue)) {
 				this.reportDeadCodeInTrivialIfStatement = true;
@@ -1254,6 +1336,13 @@ public class CompilerOptions {
 				this.reportMissingOverrideAnnotationForInterfaceMethodImplementation = false;
 			}
 		}
+		if ((optionValue = optionsMap.get(OPTION_IncludeNullInfoFromAsserts)) != null) {
+			if (ENABLED.equals(optionValue)) {
+				this.includeNullInfoFromAsserts = true;
+			} else if (DISABLED.equals(optionValue)) {
+				this.includeNullInfoFromAsserts = false;
+			}
+		}
 		if ((optionValue = optionsMap.get(OPTION_ReportMethodWithConstructorName)) != null) updateSeverity(MethodWithConstructorName, optionValue);
 		if ((optionValue = optionsMap.get(OPTION_ReportOverridingPackageDefaultMethod)) != null) updateSeverity(OverriddenPackageDefaultMethod, optionValue);
 		if ((optionValue = optionsMap.get(OPTION_ReportDeprecation)) != null) updateSeverity(UsingDeprecatedAPI, optionValue);
@@ -1311,6 +1400,8 @@ public class CompilerOptions {
 		if ((optionValue = optionsMap.get(OPTION_ReportDeadCode)) != null) updateSeverity(DeadCode, optionValue);
 		if ((optionValue = optionsMap.get(OPTION_ReportTasks)) != null) updateSeverity(Tasks, optionValue);
 		if ((optionValue = optionsMap.get(OPTION_ReportUnusedObjectAllocation)) != null) updateSeverity(UnusedObjectAllocation, optionValue);
+		if ((optionValue = optionsMap.get(OPTION_ReportMethodCanBeStatic)) != null) updateSeverity(MethodCanBeStatic, optionValue);
+		if ((optionValue = optionsMap.get(OPTION_ReportMethodCanBePotentiallyStatic)) != null) updateSeverity(MethodCanBePotentiallyStatic, optionValue);
 
 		// Javadoc options
 		if ((optionValue = optionsMap.get(OPTION_DocCommentSupport)) != null) {
@@ -1376,6 +1467,13 @@ public class CompilerOptions {
 				this.reportMissingJavadocTagsOverriding = false;
 			}
 		}
+		if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocTagsMethodTypeParameters)) != null) {
+			if (ENABLED.equals(optionValue)) {
+				this.reportMissingJavadocTagsMethodTypeParameters = true;
+			} else if (DISABLED.equals(optionValue)) {
+				this.reportMissingJavadocTagsMethodTypeParameters = false;
+			}
+		}
 		if ((optionValue = optionsMap.get(OPTION_ReportMissingJavadocComments)) != null) {
 			updateSeverity(MissingJavadocComments, optionValue);
 		}
@@ -1411,7 +1509,6 @@ public class CompilerOptions {
 			if (ENABLED.equals(optionValue)) {
 				this.processAnnotations = true;
 				this.storeAnnotations = true; // annotation processing requires annotation to be stored
-				this.docCommentSupport = true;  // annotation processing requires javadoc processing
 			} else if (DISABLED.equals(optionValue)) {
 				this.processAnnotations = false;
 				this.storeAnnotations = false;
@@ -1453,6 +1550,7 @@ public class CompilerOptions {
 		buf.append("\n\t\t+ visibility level to report invalid javadoc tags: ").append(getVisibilityString(this.reportInvalidJavadocTagsVisibility)); //$NON-NLS-1$
 		buf.append("\n\t\t+ missing javadoc tags: ").append(getSeverityString(MissingJavadocTags)); //$NON-NLS-1$
 		buf.append("\n\t\t+ visibility level to report missing javadoc tags: ").append(getVisibilityString(this.reportMissingJavadocTagsVisibility)); //$NON-NLS-1$
+		buf.append("\n\t\t+ report missing javadoc tags for method type parameters: ").append(this.reportMissingJavadocTagsMethodTypeParameters ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t\t+ report missing javadoc tags in overriding methods: ").append(this.reportMissingJavadocTagsOverriding ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t\t+ missing javadoc comments: ").append(getSeverityString(MissingJavadocComments)); //$NON-NLS-1$
 		buf.append("\n\t\t+ report missing tag description option: ").append(this.reportMissingJavadocTagDescription); //$NON-NLS-1$
@@ -1480,6 +1578,7 @@ public class CompilerOptions {
 		buf.append("\n\t- report unused parameter include doc comment reference : ").append(this.reportUnusedParameterIncludeDocCommentReference ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- report constructor/setter parameter hiding existing field : ").append(this.reportSpecialParameterHidingField ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- inline JSR bytecode : ").append(this.inlineJsrBytecode ? ENABLED : DISABLED); //$NON-NLS-1$
+		buf.append("\n\t- report unavoidable generic type problems : ").append(this.reportUnavoidableGenericTypeProblems ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- unsafe type operation: ").append(getSeverityString(UncheckedTypeOperation)); //$NON-NLS-1$
 		buf.append("\n\t- unsafe raw type: ").append(getSeverityString(RawTypeReference)); //$NON-NLS-1$
 		buf.append("\n\t- final bound for type parameter: ").append(getSeverityString(FinalParameterBound)); //$NON-NLS-1$
@@ -1496,6 +1595,7 @@ public class CompilerOptions {
 		buf.append("\n\t- missing @Override annotation for interface method implementation: ").append(this.reportMissingOverrideAnnotationForInterfaceMethodImplementation ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- missing @Deprecated annotation: ").append(getSeverityString(MissingDeprecatedAnnotation)); //$NON-NLS-1$
 		buf.append("\n\t- incomplete enum switch: ").append(getSeverityString(IncompleteEnumSwitch)); //$NON-NLS-1$
+		buf.append("\n\t- raise null related warnings for variables tainted in assert statements: ").append(this.includeNullInfoFromAsserts ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- suppress warnings: ").append(this.suppressWarnings ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- suppress optional errors: ").append(this.suppressOptionalErrors ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- unhandled warning token: ").append(getSeverityString(UnhandledWarningToken)); //$NON-NLS-1$
@@ -1514,6 +1614,8 @@ public class CompilerOptions {
 		buf.append("\n\t- dead code in trivial if statement: ").append(this.reportDeadCodeInTrivialIfStatement ? ENABLED : DISABLED); //$NON-NLS-1$
 		buf.append("\n\t- tasks severity: ").append(getSeverityString(Tasks)); //$NON-NLS-1$
 		buf.append("\n\t- unused object allocation: ").append(getSeverityString(UnusedObjectAllocation)); //$NON-NLS-1$
+		buf.append("\n\t- method can be static: ").append(getSeverityString(MethodCanBeStatic)); //$NON-NLS-1$
+		buf.append("\n\t- method can be potentially static: ").append(getSeverityString(MethodCanBePotentiallyStatic)); //$NON-NLS-1$
 		return buf.toString();
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/Constant.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/Constant.java
index 0ee2a7a..85d7d0e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/Constant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/Constant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1535,7 +1535,6 @@ public abstract class Constant implements TypeIds, OperatorIds {
 			case T_boolean : return "boolean"; //$NON-NLS-1$
 			case T_long : return "long";//$NON-NLS-1$
 			case T_JavaLangString : return "java.lang.String"; //$NON-NLS-1$
-			case T_null : return "null";	 //$NON-NLS-1$
 			default: return "unknown"; //$NON-NLS-1$
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IrritantSet.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IrritantSet.java
index b9e1dd7..073622d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IrritantSet.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/IrritantSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,12 +51,14 @@ public class IrritantSet {
 	public static final IrritantSet RESTRICTION = new IrritantSet(CompilerOptions.ForbiddenReference);
 	public static final IrritantSet SERIAL = new IrritantSet(CompilerOptions.MissingSerialVersion);
 	public static final IrritantSet STATIC_ACCESS = new IrritantSet(CompilerOptions.IndirectStaticAccess);
+	public static final IrritantSet STATIC_METHOD = new IrritantSet(CompilerOptions.MethodCanBeStatic);
 	public static final IrritantSet SYNTHETIC_ACCESS = new IrritantSet(CompilerOptions.AccessEmulation);
 	public static final IrritantSet SUPER = new IrritantSet(CompilerOptions.OverridingMethodWithoutSuperInvocation);
 	public static final IrritantSet UNUSED = new IrritantSet(CompilerOptions.UnusedLocalVariable);
 	public static final IrritantSet UNCHECKED = new IrritantSet(CompilerOptions.UncheckedTypeOperation);
 	public static final IrritantSet UNQUALIFIED_FIELD_ACCESS = new IrritantSet(CompilerOptions.UnqualifiedFieldAccess);
 
+	public static final IrritantSet JAVADOC = new IrritantSet(CompilerOptions.InvalidJavadoc);
 	public static final IrritantSet COMPILER_DEFAULT_ERRORS = new IrritantSet(0); // no optional error by default	
 	public static final IrritantSet COMPILER_DEFAULT_WARNINGS = new IrritantSet(0); // see static initializer below
 	static {
@@ -119,10 +121,16 @@ public class IrritantSet {
 			.set(CompilerOptions.RedundantSuperinterface)
 			.set(CompilerOptions.DeadCode)
 			.set(CompilerOptions.UnusedObjectAllocation);
+		STATIC_METHOD
+		    .set(CompilerOptions.MethodCanBePotentiallyStatic);
 		String suppressRawWhenUnchecked = System.getProperty("suppressRawWhenUnchecked"); //$NON-NLS-1$
 		if (suppressRawWhenUnchecked != null && "true".equalsIgnoreCase(suppressRawWhenUnchecked)) { //$NON-NLS-1$
 			UNCHECKED.set(CompilerOptions.RawTypeReference);
 		}
+		
+		JAVADOC
+			.set(CompilerOptions.MissingJavadocComments)
+			.set(CompilerOptions.MissingJavadocTags);
 	}
 
 	// Internal state
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
index b12a7b2..71e2971 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -149,7 +149,12 @@ public BinaryTypeBinding(PackageBinding packageBinding, IBinaryType binaryType,
 	this.fPackage = packageBinding;
 	this.fileName = binaryType.getFileName();
 
-	char[] typeSignature = environment.globalOptions.sourceLevel >= ClassFileConstants.JDK1_5 ? binaryType.getGenericSignature() : null;
+	/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, even in a 1.4 project, we
+	   must internalize type variables and observe any parameterization of super class
+	   and/or super interfaces in order to be able to detect overriding in the presence
+	   of generics.
+	 */
+	char[] typeSignature = binaryType.getGenericSignature();
 	this.typeVariables = typeSignature != null && typeSignature.length > 0 && typeSignature[0] == '<'
 		? null // is initialized in cachePartsFrom (called from LookupEnvironment.createBinaryTypeFrom())... must set to null so isGenericType() answers true
 		: Binding.NO_TYPE_VARIABLES;
@@ -210,6 +215,31 @@ public FieldBinding[] availableFields() {
 	return availableFields;
 }
 
+private TypeVariableBinding[] addMethodTypeVariables(TypeVariableBinding[] methodTypeVars) {
+	if (this.typeVariables == null || this.typeVariables == Binding.NO_TYPE_VARIABLES) {
+		return methodTypeVars;
+	} 
+	if (methodTypeVars == null || methodTypeVars == Binding.NO_TYPE_VARIABLES) {
+		return this.typeVariables;
+	}
+	// uniq-merge both the arrays
+	int total = this.typeVariables.length + methodTypeVars.length;
+	TypeVariableBinding[] combinedTypeVars = new TypeVariableBinding[total];
+	System.arraycopy(this.typeVariables, 0, combinedTypeVars, 0, this.typeVariables.length);
+	int size = this.typeVariables.length;
+	loop: for (int i = 0, len = methodTypeVars.length; i < len; i++) {
+		for (int j = this.typeVariables.length -1 ; j >= 0; j--) {
+			if (CharOperation.equals(methodTypeVars[i].sourceName, this.typeVariables[j].sourceName))
+				continue loop;
+		}
+		combinedTypeVars[size++] = methodTypeVars[i];
+	}
+	if (size != total) {
+		System.arraycopy(combinedTypeVars, 0, combinedTypeVars = new TypeVariableBinding[size], 0, size);
+	}
+	return combinedTypeVars;
+}
+
 /**
  * @see org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding#availableMethods()
  */
@@ -260,14 +290,39 @@ void cachePartsFrom(IBinaryType binaryType, boolean needFieldsAndMethods) {
 			}
 		}
 
-		long sourceLevel = this.environment.globalOptions.sourceLevel;
-		char[] typeSignature = null;
-		if (sourceLevel >= ClassFileConstants.JDK1_5) {
-			typeSignature = binaryType.getGenericSignature();
-			this.tagBits |= binaryType.getTagBits();
-		}
+		long sourceLevel = this.environment.globalOptions.originalSourceLevel;
+		/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, even in a 1.4 project, we
+		   must internalize type variables and observe any parameterization of super class
+		   and/or super interfaces in order to be able to detect overriding in the presence
+		   of generics.
+		 */
+		char[] typeSignature = binaryType.getGenericSignature(); // use generic signature even in 1.4
+		this.tagBits |= binaryType.getTagBits();
+		
 		char[][][] missingTypeNames = binaryType.getMissingTypeNames();
-		if (typeSignature == null) {
+		SignatureWrapper wrapper = null;
+		if (typeSignature != null) {
+			// ClassSignature = ParameterPart(optional) super_TypeSignature interface_signature
+			wrapper = new SignatureWrapper(typeSignature);
+			if (wrapper.signature[wrapper.start] == '<') {
+				// ParameterPart = '<' ParameterSignature(s) '>'
+				wrapper.start++; // skip '<'
+				this.typeVariables = createTypeVariables(wrapper, true, missingTypeNames);
+				wrapper.start++; // skip '>'
+				this.tagBits |=  TagBits.HasUnresolvedTypeVariables;
+				this.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
+			}
+		}
+		TypeVariableBinding[] typeVars = Binding.NO_TYPE_VARIABLES;
+		char[] methodDescriptor = binaryType.getEnclosingMethod();
+		if (methodDescriptor != null) {
+			MethodBinding enclosingMethod = findMethod(methodDescriptor, missingTypeNames);
+			if (enclosingMethod != null) {
+				typeVars = enclosingMethod.typeVariables;
+				this.typeVariables = addMethodTypeVariables(typeVars);			
+			}
+		}
+		if (typeSignature == null)  {
 			char[] superclassName = binaryType.getSuperclassName();
 			if (superclassName != null) {
 				// attempt to find the superclass if it exists in the cache (otherwise - resolve it when requested)
@@ -288,25 +343,6 @@ void cachePartsFrom(IBinaryType binaryType, boolean needFieldsAndMethods) {
 				}
 			}
 		} else {
-			// ClassSignature = ParameterPart(optional) super_TypeSignature interface_signature
-			SignatureWrapper wrapper = new SignatureWrapper(typeSignature);
-			if (wrapper.signature[wrapper.start] == '<') {
-				// ParameterPart = '<' ParameterSignature(s) '>'
-				wrapper.start++; // skip '<'
-				this.typeVariables = createTypeVariables(wrapper, true, missingTypeNames);
-				wrapper.start++; // skip '>'
-				this.tagBits |=  TagBits.HasUnresolvedTypeVariables;
-				this.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
-			}
-			TypeVariableBinding[] typeVars = Binding.NO_TYPE_VARIABLES;
-			char[] methodDescriptor = binaryType.getEnclosingMethod();
-			if (methodDescriptor != null) {
-				MethodBinding enclosingMethod = findMethod(methodDescriptor, missingTypeNames);
-				if (enclosingMethod != null) {
-					typeVars = enclosingMethod.typeVariables;
-				}
-			}
-
 			// attempt to find the superclass if it exists in the cache (otherwise - resolve it when requested)
 			this.superclass = (ReferenceBinding) this.environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames);
 			this.tagBits |= TagBits.HasUnresolvedSuperclass;
@@ -412,7 +448,12 @@ private MethodBinding createMethod(IBinaryMethod method, long sourceLevel, char[
 	TypeBinding returnType = null;
 
 	final boolean use15specifics = sourceLevel >= ClassFileConstants.JDK1_5;
-	char[] methodSignature = use15specifics ? method.getGenericSignature() : null;
+	/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, Since a 1.4 project can have a 1.5
+	   type as a super type and the 1.5 type could be generic, we must internalize usages of type
+	   variables properly in order to be able to apply substitutions and thus be able to detect
+	   overriding in the presence of generics. Seeing the erased form is not good enough.
+	 */
+	char[] methodSignature = method.getGenericSignature(); // always use generic signature, even in 1.4
 	if (methodSignature == null) { // no generics
 		char[] methodDescriptor = method.getMethodDescriptor();   // of the form (I[Ljava/jang/String;)V
 		int numOfParams = 0;
@@ -476,7 +517,7 @@ private MethodBinding createMethod(IBinaryMethod method, long sourceLevel, char[
 	} else {
 		methodModifiers |= ExtraCompilerModifiers.AccGenericSignature;
 		// MethodTypeSignature = ParameterPart(optional) '(' TypeSignatures ')' return_typeSignature ['^' TypeSignature (optional)]
-		SignatureWrapper wrapper = new SignatureWrapper(methodSignature);
+		SignatureWrapper wrapper = new SignatureWrapper(methodSignature, use15specifics);
 		if (wrapper.signature[wrapper.start] == '<') {
 			// <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)TA;
 			// ParameterPart = '<' ParameterSignature(s) '>'
@@ -557,8 +598,7 @@ private void createMethods(IBinaryMethod[] iMethods, long sourceLevel, char[][][
 	int[] toSkip = null;
 	if (iMethods != null) {
 		total = initialTotal = iMethods.length;
-		boolean keepBridgeMethods = sourceLevel < ClassFileConstants.JDK1_5
-			&& this.environment.globalOptions.complianceLevel >= ClassFileConstants.JDK1_5;
+		boolean keepBridgeMethods = sourceLevel < ClassFileConstants.JDK1_5; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=330347
 		for (int i = total; --i >= 0;) {
 			IBinaryMethod method = iMethods[i];
 			if ((method.getModifiers() & ClassFileConstants.AccSynthetic) != 0) {
@@ -941,7 +981,13 @@ private void initializeTypeVariable(TypeVariableBinding variable, TypeVariableBi
 	if (wrapper.signature[wrapper.start] == ':') {
 		type = this.environment.getResolvedType(TypeConstants.JAVA_LANG_OBJECT, null);
 	} else {
-		type = (ReferenceBinding) this.environment.getTypeFromTypeSignature(wrapper, existingVariables, this, missingTypeNames);
+		TypeBinding typeFromTypeSignature = this.environment.getTypeFromTypeSignature(wrapper, existingVariables, this, missingTypeNames);
+		if (typeFromTypeSignature instanceof ReferenceBinding) {
+			type = (ReferenceBinding) typeFromTypeSignature;
+		} else {
+			// this should only happen if the signature is corrupted (332423)
+			type = this.environment.getResolvedType(TypeConstants.JAVA_LANG_OBJECT, null);
+		}
 		firstBound = type;
 	}
 
@@ -977,6 +1023,14 @@ public boolean isEquivalentTo(TypeBinding otherType) {
 		case Binding.WILDCARD_TYPE :
 		case Binding.INTERSECTION_TYPE :
 			return ((WildcardBinding) otherType).boundCheck(this);
+		case Binding.PARAMETERIZED_TYPE:
+		/* With the hybrid 1.4/1.5+ projects modes, while establishing type equivalence, we need to
+	       be prepared for a type such as Map appearing in one of three forms: As (a) a ParameterizedTypeBinding 
+	       e.g Map<String, String>, (b) as RawTypeBinding Map#RAW and finally (c) as a BinaryTypeBinding 
+	       When the usage of a type lacks type parameters, whether we land up with the raw form or not depends
+	       on whether the underlying type was "seen to be" a generic type in the particular build environment or
+	       not. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=186565 && https://bugs.eclipse.org/bugs/show_bug.cgi?id=328827 
+		*/ 
 		case Binding.RAW_TYPE :
 			return otherType.erasure() == this;
 	}
@@ -1200,4 +1254,8 @@ public String toString() {
 MethodBinding[] unResolvedMethods() { // for the MethodVerifier so it doesn't resolve types
 	return this.methods;
 }
+
+public FieldBinding[] unResolvedFields() {
+	return this.fields;
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Binding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Binding.java
index 9459976..d0e769e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Binding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Binding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,6 +91,12 @@ public abstract class Binding {
 	public final boolean isValidBinding() {
 		return problemId() == ProblemReasons.NoError;
 	}
+	public boolean isVolatile() {
+		return false;
+	}
+	public boolean isParameter() {
+		return false;
+	}
 	/* API
 	* Answer the problem id associated with the receiver.
 	* NoError if the receiver is a valid binding.
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java
index 6d88273..250642f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BlockScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -191,7 +191,7 @@ void computeLocalVariablePositions(int ilocal, int initOffset, CodeStream codeSt
 			LocalVariableBinding local = this.locals[ilocal]; // if no local at all, will be locals[ilocal]==null
 
 			// check if variable is actually used, and may force it to be preserved
-			boolean generateCurrentLocalVar = (local.useFlag != LocalVariableBinding.UNUSED && local.constant() == Constant.NotAConstant);
+			boolean generateCurrentLocalVar = (local.useFlag > LocalVariableBinding.UNUSED && local.constant() == Constant.NotAConstant);
 
 			// do not report fake used variable
 			if (local.useFlag == LocalVariableBinding.UNUSED
@@ -206,7 +206,8 @@ void computeLocalVariablePositions(int ilocal, int initOffset, CodeStream codeSt
 			if (!generateCurrentLocalVar) {
 				if (local.declaration != null && compilerOptions().preserveAllLocalVariables) {
 					generateCurrentLocalVar = true; // force it to be preserved in the generated code
-					local.useFlag = LocalVariableBinding.USED;
+					if (local.useFlag == LocalVariableBinding.UNUSED)
+						local.useFlag = LocalVariableBinding.USED;
 				}
 			}
 
@@ -464,22 +465,31 @@ public Binding getBinding(char[][] compoundName, int mask, InvocationSite invoca
 			problemReporter().deprecatedType(referenceBinding, invocationNode);
 		}
 	}
+	Binding problemFieldBinding = null;
 	while (currentIndex < length) {
 		referenceBinding = (ReferenceBinding) binding;
 		char[] nextName = compoundName[currentIndex++];
 		invocationSite.setFieldIndex(currentIndex);
 		invocationSite.setActualReceiverType(referenceBinding);
 		if ((mask & Binding.FIELD) != 0 && (binding = findField(referenceBinding, nextName, invocationSite, true /*resolve*/)) != null) {
-			if (!binding.isValidBinding()) {
-				return new ProblemFieldBinding(
-					((ProblemFieldBinding)binding).closestMatch,
-					((ProblemFieldBinding)binding).declaringClass,
-					CharOperation.concatWith(CharOperation.subarray(compoundName, 0, currentIndex), '.'),
-					binding.problemId());
+			if (binding.isValidBinding()) {
+				break; // binding is now a field
+			}
+			problemFieldBinding = new ProblemFieldBinding(
+				((ProblemFieldBinding)binding).closestMatch,
+				((ProblemFieldBinding)binding).declaringClass,
+				CharOperation.concatWith(CharOperation.subarray(compoundName, 0, currentIndex), '.'),
+				binding.problemId()); 
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=317858 : If field is inaccessible,
+			// don't give up yet, continue to look for a visible member type 
+			if (binding.problemId() != ProblemReasons.NotVisible) {  
+				return problemFieldBinding;
 			}
-			break; // binding is now a field
 		}
 		if ((binding = findMemberType(nextName, referenceBinding)) == null) {
+			if (problemFieldBinding != null) {
+				return problemFieldBinding;
+			}
 			if ((mask & Binding.FIELD) != 0) {
 				return new ProblemFieldBinding(
 						null,
@@ -498,11 +508,15 @@ public Binding getBinding(char[][] compoundName, int mask, InvocationSite invoca
 				ProblemReasons.NotFound);
 		}
 		// binding is a ReferenceBinding
-		if (!binding.isValidBinding())
+		if (!binding.isValidBinding()) {
+			if (problemFieldBinding != null) {
+				return problemFieldBinding;
+			}
 			return new ProblemReferenceBinding(
 				CharOperation.subarray(compoundName, 0, currentIndex),
 				(ReferenceBinding)((ReferenceBinding)binding).closestMatch(),
 				binding.problemId());
+		}
 		if (invocationSite instanceof ASTNode) {
 			referenceBinding = (ReferenceBinding) binding;
 			ASTNode invocationNode = (ASTNode) invocationSite;
@@ -866,7 +880,7 @@ public final boolean needBlankFinalFieldInitializationCheck(FieldBinding binding
  * to abort.
  */
 public ProblemReporter problemReporter() {
-	return outerMostMethodScope().problemReporter();
+	return methodScope().problemReporter();
 }
 
 /*
@@ -927,4 +941,18 @@ public String toString(int tab) {
 			s += ((BlockScope) this.subscopes[i]).toString(tab + 1) + "\n"; //$NON-NLS-1$
 	return s;
 }
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
+public void resetEnclosingMethodStaticFlag() {
+	MethodScope methodScope = methodScope();
+	while (methodScope != null && methodScope.referenceContext instanceof MethodDeclaration) {
+		MethodDeclaration methodDeclaration= (MethodDeclaration) methodScope.referenceContext;
+		methodDeclaration.bits &= ~ASTNode.CanBeStatic;
+		ClassScope enclosingClassScope = methodScope.enclosingClassScope();
+		if (enclosingClassScope != null) {
+			methodScope = enclosingClassScope.methodScope();
+		} else {
+			break;
+		}
+	}
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java
index dc5d6d3..3207fed 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,10 +7,12 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 328281 - visibility leaks not detected when analyzing unused field in private class
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 import org.eclipse.jdt.core.compiler.CharOperation;
@@ -41,7 +43,7 @@ public class ClassScope extends Scope {
 	}
 
 	void buildAnonymousTypeBinding(SourceTypeBinding enclosingType, ReferenceBinding supertype) {
-		LocalTypeBinding anonymousType = buildLocalType(enclosingType, supertype, enclosingType.fPackage);
+		LocalTypeBinding anonymousType = buildLocalType(enclosingType, enclosingType.fPackage);
 		anonymousType.modifiers |= ExtraCompilerModifiers.AccLocallyUsed; // tag all anonymous types as used locally
 		if (supertype.isInterface()) {
 			anonymousType.superclass = getJavaLangObject();
@@ -106,8 +108,8 @@ public class ClassScope extends Scope {
 		for (int i = 0; i < size; i++) {
 			FieldDeclaration field = fields[i];
 			if (field.getKind() == AbstractVariableDeclaration.INITIALIZER) {
-				if (sourceType.isInterface())
-					problemReporter().interfaceCannotHaveInitializers(sourceType, field);
+				// We used to report an error for initializers declared inside interfaces, but
+				// now this error reporting is moved into the parser itself. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=212713
 			} else {
 				FieldBinding fieldBinding = new FieldBinding(field, null, field.modifiers | ExtraCompilerModifiers.AccUnresolved, sourceType);
 				fieldBinding.id = count;
@@ -147,6 +149,9 @@ public class ClassScope extends Scope {
 		buildMethods();
 
 		SourceTypeBinding sourceType = this.referenceContext.binding;
+		if (!sourceType.isPrivate() && sourceType.superclass instanceof SourceTypeBinding && sourceType.superclass.isPrivate())
+			((SourceTypeBinding) sourceType.superclass).tagIndirectlyAccessibleMembers();
+
 		if (sourceType.isMemberType() && !sourceType.isLocalType())
 			 ((MemberTypeBinding) sourceType).checkSyntheticArgsAndFields();
 
@@ -155,14 +160,14 @@ public class ClassScope extends Scope {
 			 ((SourceTypeBinding) memberTypes[i]).scope.buildFieldsAndMethods();
 	}
 
-	private LocalTypeBinding buildLocalType(SourceTypeBinding enclosingType, ReferenceBinding anonymousOriginalSuperType, PackageBinding packageBinding) {
+	private LocalTypeBinding buildLocalType(SourceTypeBinding enclosingType, PackageBinding packageBinding) {
 
 		this.referenceContext.scope = this;
 		this.referenceContext.staticInitializerScope = new MethodScope(this, this.referenceContext, true);
 		this.referenceContext.initializerScope = new MethodScope(this, this.referenceContext, false);
 
 		// build the binding or the local type
-		LocalTypeBinding localType = new LocalTypeBinding(this, enclosingType, innermostSwitchCase(), anonymousOriginalSuperType);
+		LocalTypeBinding localType = new LocalTypeBinding(this, enclosingType, innermostSwitchCase());
 		this.referenceContext.binding = localType;
 		checkAndSetModifiers();
 		buildTypeVariables();
@@ -198,7 +203,7 @@ public class ClassScope extends Scope {
 					}
 				}
 				ClassScope memberScope = new ClassScope(this, this.referenceContext.memberTypes[i]);
-				LocalTypeBinding memberBinding = memberScope.buildLocalType(localType, null /* anonymous super type*/, packageBinding);
+				LocalTypeBinding memberBinding = memberScope.buildLocalType(localType, packageBinding);
 				memberBinding.setAsMemberType();
 				memberTypeBindings[count++] = memberBinding;
 			}
@@ -211,7 +216,7 @@ public class ClassScope extends Scope {
 
 	void buildLocalTypeBinding(SourceTypeBinding enclosingType) {
 
-		LocalTypeBinding localType = buildLocalType(enclosingType, null /* anonymous super type*/, enclosingType.fPackage);
+		LocalTypeBinding localType = buildLocalType(enclosingType, enclosingType.fPackage);
 		connectTypeHierarchy();
 		if (compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) {
 			checkParameterizedTypeBounds();
@@ -383,9 +388,8 @@ public class ClassScope extends Scope {
 
 	    SourceTypeBinding sourceType = this.referenceContext.binding;
 		TypeParameter[] typeParameters = this.referenceContext.typeParameters;
-
-	    // do not construct type variables if source < 1.5
-		if (typeParameters == null || compilerOptions().sourceLevel < ClassFileConstants.JDK1_5) {
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, If they exist at all, process type parameters irrespective of source level.
+		if (typeParameters == null || typeParameters.length == 0) {
 		    sourceType.typeVariables = Binding.NO_TYPE_VARIABLES;
 		    return;
 		}
@@ -1028,8 +1032,10 @@ public class ClassScope extends Scope {
 		SourceTypeBinding sourceType = this.referenceContext.binding;
 		if ((sourceType.tagBits & TagBits.BeginHierarchyCheck) == 0) {
 			sourceType.tagBits |= TagBits.BeginHierarchyCheck;
+			environment().typesBeingConnected.add(sourceType);
 			boolean noProblems = connectSuperclass();
 			noProblems &= connectSuperInterfaces();
+			environment().typesBeingConnected.remove(sourceType);
 			sourceType.tagBits |= TagBits.EndHierarchyCheck;
 			noProblems &= connectTypeVariables(this.referenceContext.typeParameters, false);
 			sourceType.tagBits |= TagBits.TypeVariablesAreConnected;
@@ -1065,8 +1071,10 @@ public class ClassScope extends Scope {
 			return;
 
 		sourceType.tagBits |= TagBits.BeginHierarchyCheck;
+		environment().typesBeingConnected.add(sourceType);
 		boolean noProblems = connectSuperclass();
 		noProblems &= connectSuperInterfaces();
+		environment().typesBeingConnected.remove(sourceType);
 		sourceType.tagBits |= TagBits.EndHierarchyCheck;
 		noProblems &= connectTypeVariables(this.referenceContext.typeParameters, false);
 		sourceType.tagBits |= TagBits.TypeVariablesAreConnected;
@@ -1168,12 +1176,26 @@ public class ClassScope extends Scope {
 			org.eclipse.jdt.internal.compiler.ast.TypeReference ref = ((SourceTypeBinding) superType).scope.superTypeReference;
 			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=133071
 			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=121734
-			if (ref != null && (ref.resolvedType == null || ((ReferenceBinding) ref.resolvedType).isHierarchyBeingActivelyConnected())) {
+			if (ref != null && ref.resolvedType != null && ((ReferenceBinding) ref.resolvedType).isHierarchyBeingActivelyConnected()) {
 				problemReporter().hierarchyCircularity(sourceType, superType, reference);
 				sourceType.tagBits |= TagBits.HierarchyHasProblems;
 				superType.tagBits |= TagBits.HierarchyHasProblems;
 				return true;
 			}
+			if (ref != null && ref.resolvedType == null) {
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=319885 Don't cry foul prematurely.
+				// Check the edges traversed to see if there really is a cycle.
+				char [] referredName = ref.getLastToken(); 
+				for (Iterator iter = environment().typesBeingConnected.iterator(); iter.hasNext();) {
+					SourceTypeBinding type = (SourceTypeBinding) iter.next();
+					if (CharOperation.equals(referredName, type.sourceName())) {
+						problemReporter().hierarchyCircularity(sourceType, superType, reference);
+						sourceType.tagBits |= TagBits.HierarchyHasProblems;
+						superType.tagBits |= TagBits.HierarchyHasProblems;
+						return true;
+					}
+				}
+			}
 		}
 		if ((superType.tagBits & TagBits.BeginHierarchyCheck) == 0)
 			// ensure if this is a source superclass that it has already been checked
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
index d01198d..32ccfd8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,14 +81,15 @@ void buildTypeBindings(AccessRestriction accessRestriction) {
 		}
 	}
 	if (this.currentPackageName == CharOperation.NO_CHAR_CHAR) {
-		if ((this.fPackage = this.environment.defaultPackage) == null) {
-			problemReporter().mustSpecifyPackage(this.referenceContext);
-			return;
-		}
+		// environment default package is never null
+		this.fPackage = this.environment.defaultPackage;
 	} else {
 		if ((this.fPackage = this.environment.createPackage(this.currentPackageName)) == null) {
-			if (this.referenceContext.currentPackage != null)
+			if (this.referenceContext.currentPackage != null) {
 				problemReporter().packageCollidesWithType(this.referenceContext); // only report when the unit has a package statement
+			}
+			// ensure fPackage is not null
+			this.fPackage = this.environment.defaultPackage;
 			return;
 		} else if (this.referenceContext.isPackageInfo()) {
 			// resolve package annotations now if this is "package-info.java".
@@ -498,7 +499,7 @@ private Binding findImport(char[][] compoundName, int length) {
 
 	ReferenceBinding type;
 	if (binding == null) {
-		if (this.environment.defaultPackage == null || compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)
+		if (compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)
 			return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, i), null, ProblemReasons.NotFound);
 		type = findType(compoundName[0], this.environment.defaultPackage, this.environment.defaultPackage);
 		if (type == null || !type.isValidBinding())
@@ -527,7 +528,7 @@ private Binding findSingleImport(char[][] compoundName, int mask, boolean findSt
 	if (compoundName.length == 1) {
 		// findType records the reference
 		// the name cannot be a package
-		if (this.environment.defaultPackage == null || compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)
+		if (compilerOptions().complianceLevel >= ClassFileConstants.JDK1_4)
 			return new ProblemReferenceBinding(compoundName, null, ProblemReasons.NotFound);
 		ReferenceBinding typeBinding = findType(compoundName[0], this.environment.defaultPackage, this.fPackage);
 		if (typeBinding == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ExtraCompilerModifiers.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ExtraCompilerModifiers.java
index 4fee931..9927aaa 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ExtraCompilerModifiers.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ExtraCompilerModifiers.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 328281 - visibility leaks not detected when analyzing unused field in private class
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
@@ -31,7 +32,10 @@ public interface ExtraCompilerModifiers { // modifier constant
 	final int AccUnresolved = ASTNode.Bit26;
 	final int AccBlankFinal = ASTNode.Bit27; // for blank final variables
 	final int AccIsDefaultConstructor = ASTNode.Bit27; // for default constructor
-	final int AccLocallyUsed = ASTNode.Bit28; // used to diagnose unused private/local members
+	final int AccLocallyUsed = ASTNode.Bit28; // used to diagnose unused (a) private/local members or (b) members of private classes
+											  // generally set when actual usage has been detected 
+											  // or, (b) when member of a private class is exposed via a non-private subclass
+											  //     see https://bugs.eclipse.org/bugs/show_bug.cgi?id=328281
 	final int AccVisibilityMASK = ClassFileConstants.AccPublic | ClassFileConstants.AccProtected | ClassFileConstants.AccPrivate;
 
 	final int AccOverriding = ASTNode.Bit29; // record fact a method overrides another one
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.java
index fcee42b..2c44d5a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/FieldBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
@@ -19,6 +20,8 @@ import org.eclipse.jdt.internal.compiler.impl.Constant;
 
 public class FieldBinding extends VariableBinding {
 	public ReferenceBinding declaringClass;
+	public int compoundUseFlag = 0; // number or accesses via postIncrement or compoundAssignment
+	
 protected FieldBinding() {
 	super(null, null, 0, null);
 	// for creating problem field
@@ -105,8 +108,8 @@ public final boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invoca
 		// AND the invocationType and the declaringClass have a common enclosingType
 		receiverCheck: {
 			if (receiverType != this.declaringClass) {
-				// special tolerance for type variable direct bounds
-				if (receiverType.isTypeVariable() && ((TypeVariableBinding) receiverType).isErasureBoundTo(this.declaringClass.erasure()))
+				// special tolerance for type variable direct bounds, but only if compliance <= 1.6, see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=334622
+				if (scope.compilerOptions().complianceLevel <= ClassFileConstants.JDK1_6 && receiverType.isTypeVariable() && ((TypeVariableBinding) receiverType).isErasureBoundTo(this.declaringClass.erasure()))
 					break receiverCheck;
 				return false;
 			}
@@ -332,7 +335,13 @@ public final boolean isTransient() {
 */
 
 public final boolean isUsed() {
-	return (this.modifiers & ExtraCompilerModifiers.AccLocallyUsed) != 0;
+	return (this.modifiers & ExtraCompilerModifiers.AccLocallyUsed) != 0 || this.compoundUseFlag > 0;
+}
+/* Answer true if the only use of this field is in compound assignment or post increment
+ */
+
+public final boolean isUsedOnlyInCompound() {
+	return (this.modifiers & ExtraCompilerModifiers.AccLocallyUsed) == 0 && this.compoundUseFlag > 0;
 }
 /* Answer true if the receiver has protected visibility
 */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java
index 4bf4096..3cf3183 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,9 +26,7 @@ public final class LocalTypeBinding extends NestedTypeBinding {
 	public int sourceStart; // used by computeUniqueKey to uniquely identify this binding
 	public MethodBinding enclosingMethod;
 
-//	public ReferenceBinding anonymousOriginalSuperType;
-
-public LocalTypeBinding(ClassScope scope, SourceTypeBinding enclosingType, CaseStatement switchCase, ReferenceBinding anonymousOriginalSuperType) {
+public LocalTypeBinding(ClassScope scope, SourceTypeBinding enclosingType, CaseStatement switchCase) {
 	super(
 		new char[][] {CharOperation.concat(LocalTypeBinding.LocalTypePrefix, scope.referenceContext.name)},
 		scope,
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalVariableBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalVariableBinding.java
index 56beda1..7c7c9a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalVariableBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LocalVariableBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
@@ -26,7 +27,7 @@ public class LocalVariableBinding extends VariableBinding {
 	public static final int UNUSED = 0;
 	public static final int USED = 1;
 	public static final int FAKE_USED = 2;
-	public int useFlag; // for flow analysis (default is UNUSED)
+	public int useFlag; // for flow analysis (default is UNUSED), values < 0 indicate the number of compound uses (postIncrement or compoundAssignment)
 
 	public BlockScope declaringScope; // back-pointer to its declaring scope
 	public LocalDeclaration declaration; // for source-positions
@@ -243,4 +244,8 @@ public class LocalVariableBinding extends VariableBinding {
 		}
 		return s;
 	}
+
+	public boolean isParameter() {
+		return ((this.tagBits & TagBits.IsArgument) != 0);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
index 042c2d8..e0648c2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,12 +7,15 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - contribution for bug 337868 - [compiler][model] incomplete support for package-info.java when using SearchableEnvironment
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.ClassFilePool;
@@ -22,6 +25,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.env.*;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.eclipse.jdt.internal.compiler.impl.ITypeRequestor;
+import org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
 import org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
 import org.eclipse.jdt.internal.compiler.util.HashtableOfPackage;
 import org.eclipse.jdt.internal.compiler.util.SimpleLookupTable;
@@ -65,6 +69,7 @@ public class LookupEnvironment implements ProblemReasons, TypeConstants {
 	public MethodBinding arrayClone;
 
 	private ArrayList missingTypes;
+	Set typesBeingConnected;
 	public boolean isProcessingAnnotations = false;
 
 	final static int BUILD_FIELDS_AND_METHODS = 4;
@@ -92,6 +97,7 @@ public LookupEnvironment(ITypeRequestor typeRequestor, CompilerOptions globalOpt
 	this.missingTypes = null;
 	this.accessRestrictions = new HashMap(3);
 	this.classFilePool = ClassFilePool.newInstance();
+	this.typesBeingConnected = new HashSet();
 }
 
 /**
@@ -121,8 +127,6 @@ public ReferenceBinding askForType(char[][] compoundName) {
 
 ReferenceBinding askForType(PackageBinding packageBinding, char[] name) {
 	if (packageBinding == null) {
-		if (this.defaultPackage == null)
-			return null;
 		packageBinding = this.defaultPackage;
 	}
 	NameEnvironmentAnswer answer = this.nameEnvironment.findType(name, packageBinding.compoundName);
@@ -134,7 +138,13 @@ ReferenceBinding askForType(PackageBinding packageBinding, char[] name) {
 		this.typeRequestor.accept(answer.getBinaryType(), packageBinding, answer.getAccessRestriction());
 	} else if (answer.isCompilationUnit()) {
 		// the type was found as a .java file, try to build it then search the cache
-		this.typeRequestor.accept(answer.getCompilationUnit(), answer.getAccessRestriction());
+		try {
+			this.typeRequestor.accept(answer.getCompilationUnit(), answer.getAccessRestriction());
+		} catch (AbortCompilation abort) {
+			if (CharOperation.equals(name, TypeConstants.PACKAGE_INFO_NAME))
+				return null; // silently, requestor may not be able to handle compilation units (HierarchyResolver)
+			throw abort;
+		}
 	} else if (answer.isSourceType()) {
 		// the type was found as a source model
 		this.typeRequestor.accept(answer.getSourceTypes(), packageBinding, answer.getAccessRestriction());
@@ -963,8 +973,6 @@ public AccessRestriction getAccessRestriction(TypeBinding type) {
  */
 public ReferenceBinding getCachedType(char[][] compoundName) {
 	if (compoundName.length == 1) {
-		if (this.defaultPackage == null)
-			return null;
 		return this.defaultPackage.getType0(compoundName[0]);
 	}
 	PackageBinding packageBinding = getPackage0(compoundName[0]);
@@ -1034,9 +1042,6 @@ public ReferenceBinding getType(char[][] compoundName) {
 	ReferenceBinding referenceBinding;
 
 	if (compoundName.length == 1) {
-		if (this.defaultPackage == null)
-			return null;
-
 		if ((referenceBinding = this.defaultPackage.getType0(compoundName[0])) == null) {
 			PackageBinding packageBinding = getPackage0(compoundName[0]);
 			if (packageBinding != null && packageBinding != TheNotFoundPackage)
@@ -1318,9 +1323,12 @@ public MethodVerifier methodVerifier() {
 }
 
 public MethodVerifier newMethodVerifier() {
-	return this.globalOptions.sourceLevel < ClassFileConstants.JDK1_5
-		? new MethodVerifier(this)
-		: new MethodVerifier15(this); // covariance only if sourceLevel is >= 1.5
+	/* Always use MethodVerifier15. Even in a 1.4 project, we must internalize type variables and
+	   observe any parameterization of super class and/or super interfaces in order to be able to
+	   detect overriding in the presence of generics.
+	   See https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850
+	 */
+	return new MethodVerifier15(this);
 }
 
 public void releaseClassFiles(org.eclipse.jdt.internal.compiler.ClassFile[] classFiles) {
@@ -1348,6 +1356,7 @@ public void reset() {
 	this.uniqueParameterizedGenericMethodBindings = new SimpleLookupTable(3);
 	this.uniqueGetClassMethodBinding = null;
 	this.missingTypes = null;
+	this.typesBeingConnected = new HashSet();
 
 	for (int i = this.units.length; --i >= 0;)
 		this.units[i] = null;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
index 6381130..cc6aae5 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -287,8 +287,8 @@ public final boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invoca
 		// AND the invocationType and the declaringClass have a common enclosingType
 		receiverCheck: {
 			if (receiverType != this.declaringClass) {
-				// special tolerance for type variable direct bounds
-				if (receiverType.isTypeVariable() && ((TypeVariableBinding) receiverType).isErasureBoundTo(this.declaringClass.erasure()))
+				// special tolerance for type variable direct bounds, but only if compliance <= 1.6, see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=334622
+				if (scope.compilerOptions().complianceLevel <= ClassFileConstants.JDK1_6 && receiverType.isTypeVariable() && ((TypeVariableBinding) receiverType).isErasureBoundTo(this.declaringClass.erasure()))
 					break receiverCheck;
 				return false;
 			}
@@ -961,7 +961,7 @@ public final char[] signature(ClassFile classFile) {
 		return this.signature;
 	}
 
-	StringBuffer buffer = new StringBuffer(this.parameters.length + 1 * 20);
+	StringBuffer buffer = new StringBuffer((this.parameters.length + 1) * 20);
 	buffer.append('(');
 
 	TypeBinding[] targetParameters = this.parameters;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodScope.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodScope.java
index f78b1b2..642388d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodScope.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodScope.java
@@ -329,8 +329,8 @@ MethodBinding createMethod(AbstractMethodDeclaration method) {
 	}
 
 	TypeParameter[] typeParameters = method.typeParameters();
-    // do not construct type variables if source < 1.5
-	if (typeParameters == null || compilerOptions().sourceLevel < ClassFileConstants.JDK1_5) {
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, If they exist at all, process type parameters irrespective of source level.
+    if (typeParameters == null || typeParameters.length == 0) {
 	    method.binding.typeVariables = Binding.NO_TYPE_VARIABLES;
 	} else {
 		method.binding.typeVariables = createTypeVariables(typeParameters, method.binding);
@@ -403,17 +403,13 @@ public boolean isInsideInitializerOrConstructor() {
  * to abort.
  */
 public ProblemReporter problemReporter() {
-	MethodScope outerMethodScope;
-	if ((outerMethodScope = outerMostMethodScope()) == this) {
-		ProblemReporter problemReporter = referenceCompilationUnit().problemReporter;
-		problemReporter.referenceContext = this.referenceContext;
-		return problemReporter;
-	}
-	return outerMethodScope.problemReporter();
+	ProblemReporter problemReporter = referenceCompilationUnit().problemReporter;
+	problemReporter.referenceContext = this.referenceContext;
+	return problemReporter;
 }
 
 public final int recordInitializationStates(FlowInfo flowInfo) {
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) return -1;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) return -1;
 	UnconditionalFlowInfo unconditionalFlowInfo = flowInfo.unconditionalInitsWithoutSideEffect();
 	long[] extraInits = unconditionalFlowInfo.extra == null ?
 			null : unconditionalFlowInfo.extra[0];
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java
index 47ecc69..aced6a1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -158,7 +158,7 @@ void checkAgainstInheritedMethods(MethodBinding currentMethod, MethodBinding[] m
 				if (reportIncompatibleReturnTypeError(currentMethod, inheritedMethod))
 					continue nextMethod;
 			}
-
+			reportRawReferences(currentMethod, inheritedMethod); // if they were deferred, emit them now.
 			if (currentMethod.thrownExceptions != Binding.NO_EXCEPTIONS)
 				checkExceptions(currentMethod, inheritedMethod);
 			if (inheritedMethod.isFinal())
@@ -185,6 +185,9 @@ void checkAgainstInheritedMethods(MethodBinding currentMethod, MethodBinding[] m
 	}
 }
 
+public void reportRawReferences(MethodBinding currentMethod, MethodBinding inheritedMethod) {
+	// nothing to do here. Real action happens at 1.5+
+}
 void checkConcreteInheritedMethod(MethodBinding concreteMethod, MethodBinding[] abstractMethods) {
 	// Remember that interfaces can only define public instance methods
 	if (concreteMethod.isStatic())
@@ -253,15 +256,23 @@ void checkForRedundantSuperinterfaces(ReferenceBinding superclass, ReferenceBind
 	if (superInterfaces == Binding.NO_SUPERINTERFACES) return;
 
 	SimpleSet interfacesToCheck = new SimpleSet(superInterfaces.length);
-	next : for (int i = 0, l = superInterfaces.length; i < l; i++) {
+	SimpleSet redundantInterfaces = null;  // bark but once.
+	for (int i = 0, l = superInterfaces.length; i < l; i++) {
 		ReferenceBinding toCheck = superInterfaces[i];
 		for (int j = 0; j < l; j++) {
-			if (i != j && toCheck.implementsInterface(superInterfaces[j], true)) {
+			ReferenceBinding implementedInterface = superInterfaces[j];
+			if (i != j && toCheck.implementsInterface(implementedInterface, true)) {
+				if (redundantInterfaces == null) {
+					redundantInterfaces = new SimpleSet(3);
+				} else if (redundantInterfaces.includes(implementedInterface)) {
+					continue;
+				}
+				redundantInterfaces.add(implementedInterface);
 				TypeReference[] refs = this.type.scope.referenceContext.superInterfaces;
 				for (int r = 0, rl = refs.length; r < rl; r++) {
 					if (refs[r].resolvedType == toCheck) {
-						problemReporter().redundantSuperInterface(this.type, refs[j], superInterfaces[j], toCheck);
-						continue next;
+						problemReporter().redundantSuperInterface(this.type, refs[j], implementedInterface, toCheck);
+						break; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=320911
 					}
 				}
 			}
@@ -278,6 +289,12 @@ void checkForRedundantSuperinterfaces(ReferenceBinding superclass, ReferenceBind
 				ReferenceBinding inheritedInterface = itsInterfaces[i];
 				if (!inheritedInterfaces.includes(inheritedInterface) && inheritedInterface.isValidBinding()) {
 					if (interfacesToCheck.includes(inheritedInterface)) {
+						if (redundantInterfaces == null) {
+							redundantInterfaces = new SimpleSet(3);
+						} else if (redundantInterfaces.includes(inheritedInterface)) {
+							continue;
+						}
+						redundantInterfaces.add(inheritedInterface);
 						TypeReference[] refs = this.type.scope.referenceContext.superInterfaces;
 						for (int r = 0, rl = refs.length; r < rl; r++) {
 							if (refs[r].resolvedType == inheritedInterface) {
@@ -308,6 +325,12 @@ void checkForRedundantSuperinterfaces(ReferenceBinding superclass, ReferenceBind
 				ReferenceBinding inheritedInterface = itsInterfaces[a];
 				if (!inheritedInterfaces.includes(inheritedInterface) && inheritedInterface.isValidBinding()) {
 					if (interfacesToCheck.includes(inheritedInterface)) {
+						if (redundantInterfaces == null) {
+							redundantInterfaces = new SimpleSet(3);
+						} else if (redundantInterfaces.includes(inheritedInterface)) {
+							continue;
+						}
+						redundantInterfaces.add(inheritedInterface);
 						TypeReference[] refs = this.type.scope.referenceContext.superInterfaces;
 						for (int r = 0, rl = refs.length; r < rl; r++) {
 							if (refs[r].resolvedType == inheritedInterface) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
index 9a41b69..159484e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,16 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
+
+import org.eclipse.jdt.internal.compiler.ast.ASTNode;
+import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
+import org.eclipse.jdt.internal.compiler.ast.Argument;
+import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.TypeParameter;
+import org.eclipse.jdt.internal.compiler.ast.TypeReference;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
 import org.eclipse.jdt.internal.compiler.util.HashtableOfObject;
 import org.eclipse.jdt.internal.compiler.util.SimpleSet;
 
@@ -80,10 +89,32 @@ boolean areParametersEqual(MethodBinding one, MethodBinding two) {
 }
 boolean areReturnTypesCompatible(MethodBinding one, MethodBinding two) {
 	if (one.returnType == two.returnType) return true;
-	return areReturnTypesCompatible0(one, two);
+	if (this.type.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) {
+		return areReturnTypesCompatible0(one, two);
+	} else {
+		return areTypesEqual(one.returnType.erasure(), two.returnType.erasure());
+	}
 }
 boolean areTypesEqual(TypeBinding one, TypeBinding two) {
 	if (one == two) return true;
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=329584
+	switch(one.kind()) {
+		case Binding.TYPE:
+			switch (two.kind()) {
+				case Binding.PARAMETERIZED_TYPE:
+				case Binding.RAW_TYPE:
+					if (one == two.erasure())
+						return true;
+			}
+			break;
+		case Binding.RAW_TYPE:
+		case Binding.PARAMETERIZED_TYPE:
+			switch(two.kind()) {
+				case Binding.TYPE:
+					if (one.erasure() == two)
+						return true;
+			}
+	}
 
 	// need to consider X<?> and X<? extends Object> as the same 'type'
 	if (one.isParameterizedType() && two.isParameterizedType())
@@ -375,6 +406,94 @@ boolean checkInheritedReturnTypes(MethodBinding method, MethodBinding otherMetho
 
 	return false;
 }
+
+void reportRawReferences() {
+	CompilerOptions compilerOptions = this.type.scope.compilerOptions();
+	if (compilerOptions.sourceLevel < ClassFileConstants.JDK1_5 // shouldn't whine at all
+			|| compilerOptions.reportUnavoidableGenericTypeProblems) { // must have already whined 
+		return;
+	}
+	/* Code below is only for a method that does not override/implement a super type method. If it were to,
+	   it would have been handled in checkAgainstInheritedMethods.
+	*/
+	Object [] methodArray = this.currentMethods.valueTable;
+	for (int s = methodArray.length; --s >= 0;) {
+		if (methodArray[s] == null) continue;
+		MethodBinding[] current = (MethodBinding[]) methodArray[s];
+		for (int i = 0, length = current.length; i < length; i++) {
+			MethodBinding currentMethod = current[i];
+			if ((currentMethod.modifiers & (ExtraCompilerModifiers.AccImplementing | ExtraCompilerModifiers.AccOverriding)) == 0) {
+				AbstractMethodDeclaration methodDecl = currentMethod.sourceMethod();
+				if (methodDecl == null) return;
+				TypeBinding [] parameterTypes = currentMethod.parameters;
+				Argument[] arguments = methodDecl.arguments;
+				for (int j = 0, size = currentMethod.parameters.length; j < size; j++) {
+					TypeBinding parameterType = parameterTypes[j];
+					Argument arg = arguments[j];
+					if (parameterType.leafComponentType().isRawType()
+						&& compilerOptions.getSeverity(CompilerOptions.RawTypeReference) != ProblemSeverities.Ignore
+			      		&& (arg.type.bits & ASTNode.IgnoreRawTypeCheck) == 0) {
+						methodDecl.scope.problemReporter().rawTypeReference(arg.type, parameterType);
+			    	}
+				}
+				if (!methodDecl.isConstructor() && methodDecl instanceof MethodDeclaration) {
+					TypeReference returnType = ((MethodDeclaration) methodDecl).returnType;
+					TypeBinding methodType = currentMethod.returnType;
+					if (returnType != null) {
+						if (methodType.leafComponentType().isRawType()
+								&& compilerOptions.getSeverity(CompilerOptions.RawTypeReference) != ProblemSeverities.Ignore
+								&& (returnType.bits & ASTNode.IgnoreRawTypeCheck) == 0) {
+							methodDecl.scope.problemReporter().rawTypeReference(returnType, methodType);
+						}
+					}
+				}
+			}
+		}
+	}
+}
+public void reportRawReferences(MethodBinding currentMethod, MethodBinding inheritedMethod) {
+	CompilerOptions compilerOptions = this.type.scope.compilerOptions();
+	if (compilerOptions.sourceLevel < ClassFileConstants.JDK1_5 // shouldn't whine at all
+			|| compilerOptions.reportUnavoidableGenericTypeProblems) { // must have already whined 
+		return;
+	}
+	AbstractMethodDeclaration methodDecl = currentMethod.sourceMethod();
+	if (methodDecl == null) return;
+	TypeBinding [] parameterTypes = currentMethod.parameters;
+	TypeBinding [] inheritedParameterTypes = inheritedMethod.parameters;
+	Argument[] arguments = methodDecl.arguments;
+	for (int j = 0, size = currentMethod.parameters.length; j < size; j++) {
+		TypeBinding parameterType = parameterTypes[j];
+		TypeBinding inheritedParameterType = inheritedParameterTypes[j];
+		Argument arg = arguments[j];
+		if (parameterType.leafComponentType().isRawType()) {
+			if (inheritedParameterType.leafComponentType().isRawType()) {
+				arg.binding.tagBits |= TagBits.ForcedToBeRawType;
+			} else {
+				if (compilerOptions.getSeverity(CompilerOptions.RawTypeReference) != ProblemSeverities.Ignore
+						&& (arg.type.bits & ASTNode.IgnoreRawTypeCheck) == 0) {
+					methodDecl.scope.problemReporter().rawTypeReference(arg.type, parameterType);
+				}
+			}
+    	}
+    }
+	TypeReference returnType = null;
+	if (!methodDecl.isConstructor() && methodDecl instanceof MethodDeclaration && (returnType = ((MethodDeclaration) methodDecl).returnType) != null) {
+		final TypeBinding inheritedMethodType = inheritedMethod.returnType;
+		final TypeBinding methodType = currentMethod.returnType;
+		if (methodType.leafComponentType().isRawType()) {
+			if (inheritedMethodType.leafComponentType().isRawType()) {
+				// 
+			} else {
+				if ((returnType.bits & ASTNode.IgnoreRawTypeCheck) == 0
+						&& compilerOptions.getSeverity(CompilerOptions.RawTypeReference) != ProblemSeverities.Ignore) {
+					methodDecl.scope.problemReporter().rawTypeReference(returnType, methodType);
+				}
+			}
+		}
+	}
+ }
+
 void checkMethods() {
 	boolean mustImplementAbstractMethods = mustImplementAbstractMethods();
 	boolean skipInheritedMethods = mustImplementAbstractMethods && canSkipInheritedMethods(); // have a single concrete superclass so only check overridden methods
@@ -541,6 +660,21 @@ void checkTypeVariableMethods(TypeParameter typeParameter) {
 				int count = index + 1;
 				while (--count > 0) {
 					MethodBinding match = matchingInherited[count];
+					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=314556
+					MethodBinding interfaceMethod = null, implementation = null;
+					if (first.declaringClass.isInterface()) {
+						interfaceMethod = first;
+					} else if (first.declaringClass.isClass()) {
+						implementation = first;
+					}
+					if (match.declaringClass.isInterface()) {
+						interfaceMethod = match;
+					} else if (match.declaringClass.isClass()) {
+						implementation = match;
+					}
+					if (interfaceMethod != null && implementation != null && !isAsVisible(implementation, interfaceMethod))
+						problemReporter().inheritedMethodReducesVisibility(typeParameter, implementation, new MethodBinding [] {interfaceMethod});
+					
 					if (areReturnTypesCompatible(first, match)) continue;
 					// unrelated interfaces - check to see if return types are compatible
 					if (first.declaringClass.isInterface() && match.declaringClass.isInterface() && areReturnTypesCompatible(match, first))
@@ -865,6 +999,8 @@ void verify() {
 		this.type.detectAnnotationCycle();
 
 	super.verify();
+	
+	reportRawReferences();
 
 	for (int i = this.type.typeVariables.length; --i >= 0;) {
 		TypeVariableBinding var = this.type.typeVariables[i];
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
index 74e5f5d..c4a5583 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -730,7 +730,17 @@ public class ParameterizedTypeBinding extends ReferenceBinding implements Substi
 	    	case Binding.RAW_TYPE :
 	            return erasure() == otherType.erasure();
 	    }
-        return false;
+	    /* With the hybrid 1.4/1.5+ projects modes, while establishing type equivalence, we need to
+	       be prepared for a type such as Map appearing in one of three forms: As (a) a ParameterizedTypeBinding 
+	       e.g Map<String, String>, (b) as RawTypeBinding Map#RAW and finally (c) as a BinaryTypeBinding 
+	       When the usage of a type lacks type parameters, whether we land up with the raw form or not depends
+	       on whether the underlying type was "seen to be" a generic type in the particular build environment or
+	       not. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=328827 
+	     */
+	    if (erasure() == otherType) {
+	    	return true;
+	    }
+	    return false;
 	}
 
 	public boolean isHierarchyConnected() {
@@ -857,17 +867,28 @@ public class ParameterizedTypeBinding extends ReferenceBinding implements Substi
 				this.arguments[i] = resolveType;
 				this.tagBits |= resolvedType.tagBits & TagBits.ContainsNestedTypeReferences;
 			}
-			// arity check
-			TypeVariableBinding[] refTypeVariables = resolvedType.typeVariables();
-			if (refTypeVariables == Binding.NO_TYPE_VARIABLES) { // check generic
-				if ((resolvedType.tagBits & TagBits.HasMissingType) == 0) {
-					this.environment.problemReporter.nonGenericTypeCannotBeParameterized(0, null, resolvedType, this.arguments);
-				}
-				return this;
-			} else if (argLength != refTypeVariables.length) { // check arity
-				this.environment.problemReporter.incorrectArityForParameterizedType(null, resolvedType, this.arguments);
-				return this; // cannot reach here as AbortCompilation is thrown
-			}
+			/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=186565, Removed generic check
+			   and arity check since we are dealing with binary types here and the fact that
+			   the compiler produced class files for these types at all is proof positive that
+			   the generic check and the arity check passed in the build environment that produced
+			   these class files. Otherwise we don't handle mixed 1.5 and 1.4 projects correctly.
+			   Just as with bounds check below, incremental build will propagate the change and
+			   detect problems in source.
+			 */
+			
+//			// arity check
+//			TypeVariableBinding[] refTypeVariables = resolvedType.typeVariables();
+//			if (refTypeVariables == Binding.NO_TYPE_VARIABLES) { // check generic
+//				// Below 1.5, we should have already complained about the use of type parameters.
+//				boolean isCompliant15 = this.environment.globalOptions.originalSourceLevel >= ClassFileConstants.JDK1_5;
+//				if (isCompliant15 && (resolvedType.tagBits & TagBits.HasMissingType) == 0) {
+//					this.environment.problemReporter.nonGenericTypeCannotBeParameterized(0, null, resolvedType, this.arguments);
+//				}
+//				return this;
+//			} else if (argLength != refTypeVariables.length) { // check arity
+//				this.environment.problemReporter.incorrectArityForParameterizedType(null, resolvedType, this.arguments);
+//				return this; // cannot reach here as AbortCompilation is thrown
+//			}
 			// check argument type compatibility... REMOVED for now since incremental build will propagate change & detect in source
 //			for (int i = 0; i < argLength; i++) {
 //			    TypeBinding resolvedArgument = this.arguments[i];
@@ -1094,4 +1115,8 @@ public class ParameterizedTypeBinding extends ReferenceBinding implements Substi
 		}
 		return Binding.NO_TYPE_VARIABLES;
 	}
+	
+	public FieldBinding[] unResolvedFields() {
+		return this.fields;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
index ec7c1dc..214572f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/RawTypeBinding.java
@@ -126,7 +126,7 @@ public class RawTypeBinding extends ParameterizedTypeBinding {
 	}
 
     public boolean isEquivalentTo(TypeBinding otherType) {
-		if (this == otherType)
+		if (this == otherType || erasure() == otherType)
 		    return true;
 	    if (otherType == null)
 	        return false;
@@ -145,7 +145,7 @@ public class RawTypeBinding extends ParameterizedTypeBinding {
 	}
 
     public boolean isProvablyDistinct(TypeBinding otherType) {
-		if (this == otherType)
+		if (this == otherType || erasure() == otherType) // https://bugs.eclipse.org/bugs/show_bug.cgi?id=329588
 		    return false;
 	    if (otherType == null)
 	        return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
index 34dba3b..1e02fb0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -226,10 +226,10 @@ public final boolean canBeSeenBy(ReferenceBinding receiverType, ReferenceBinding
 		// AND the invocationType and the receiver have a common enclosingType
 		receiverCheck: {
 			if (!(receiverType == this || receiverType == enclosingType())) {
-				// special tolerance for type variable direct bounds
+				// special tolerance for type variable direct bounds, but only if compliance <= 1.6, see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=334622
 				if (receiverType.isTypeVariable()) {
 					TypeVariableBinding typeVariable = (TypeVariableBinding) receiverType;
-					if (typeVariable.isErasureBoundTo(erasure()) || typeVariable.isErasureBoundTo(enclosingType().erasure()))
+					if (typeVariable.environment.globalOptions.complianceLevel <= ClassFileConstants.JDK1_6 && (typeVariable.isErasureBoundTo(erasure()) || typeVariable.isErasureBoundTo(enclosingType().erasure())))
 						break receiverCheck;
 				}
 				return false;
@@ -1376,4 +1376,8 @@ public SyntheticArgumentBinding[] syntheticOuterLocalVariables() {
 MethodBinding[] unResolvedMethods() { // for the MethodVerifier so it doesn't resolve types
 	return methods();
 }
+
+public FieldBinding[] unResolvedFields() {
+	return Binding.NO_FIELDS;
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
index 697af73..c155406 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -504,7 +504,7 @@ public abstract class Scope {
 	/**
 	 * Internal use only
 	 * Given a method, returns null if arguments cannot be converted to parameters.
-	 * Will answer a subsituted method in case the method was generic and type inference got triggered;
+	 * Will answer a substituted method in case the method was generic and type inference got triggered;
 	 * in case the method was originally compatible, then simply answer it back.
 	 */
 	protected final MethodBinding computeCompatibleMethod(MethodBinding method, TypeBinding[] arguments, InvocationSite invocationSite) {
@@ -524,7 +524,8 @@ public abstract class Scope {
 			if (!isVarArgs || argLength < paramLength - 1)
 				return null; // incompatible
 
-		if (typeVariables != Binding.NO_TYPE_VARIABLES) { // generic method
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=330435, inference should kick in only at source 1.5+
+		if (typeVariables != Binding.NO_TYPE_VARIABLES && compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) { // generic method
 			TypeBinding[] newArgs = null;
 			for (int i = 0; i < argLength; i++) {
 				TypeBinding param = i < paramLength ? parameters[i] : parameters[paramLength - 1];
@@ -564,7 +565,13 @@ public abstract class Scope {
 	 * @param checkForErasedCandidateCollisions
 	 */
 	protected boolean connectTypeVariables(TypeParameter[] typeParameters, boolean checkForErasedCandidateCollisions) {
-		if (typeParameters == null || compilerOptions().sourceLevel < ClassFileConstants.JDK1_5) return true;
+		/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259 - We used to not bother with connecting
+		   type variables if source level is < 1.5. This creates problems in the reconciler if a 1.4
+		   project references the generified API of a 1.5 project. The "current" project's source
+		   level cannot decide this question for some other project. Now, if we see type parameters
+		   at all, we assume that the concerned java element has some legitimate business with them.
+		 */
+		if (typeParameters == null || typeParameters.length == 0) return true;
 		Map invocations = new HashMap(2);
 		boolean noProblems = true;
 		// preinitializing each type variable
@@ -608,6 +615,24 @@ public abstract class Scope {
 									break firstBound; // do not keep first bound
 								}
 							}
+							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335751
+							if (compilerOptions().complianceLevel > ClassFileConstants.JDK1_6) {
+								if (typeVariable.rank >= varSuperType.rank && varSuperType.declaringElement == typeVariable.declaringElement) {
+									SimpleSet set = new SimpleSet(typeParameters.length);
+									set.add(typeVariable);
+									ReferenceBinding superBinding = varSuperType;
+									while (superBinding instanceof TypeVariableBinding) {
+										if (set.includes(superBinding)) {
+											problemReporter().hierarchyCircularity(typeVariable, varSuperType, typeRef);
+											typeVariable.tagBits |= TagBits.HierarchyHasProblems;
+											break firstBound; // do not keep first bound
+										} else {
+											set.add(superBinding);
+											superBinding = ((TypeVariableBinding)superBinding).superclass;
+										}
+									}
+								}
+							}
 							break;
 						default :
 							if (((ReferenceBinding) superType).isFinal()) {
@@ -698,8 +723,8 @@ public abstract class Scope {
 	}
 
 	public TypeVariableBinding[] createTypeVariables(TypeParameter[] typeParameters, Binding declaringElement) {
-		// do not construct type variables if source < 1.5
-		if (typeParameters == null || compilerOptions().sourceLevel < ClassFileConstants.JDK1_5)
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, If they exist at all, process type parameters irrespective of source level.
+		if (typeParameters == null || typeParameters.length == 0)
 			return Binding.NO_TYPE_VARIABLES;
 
 		PackageBinding unitPackage = compilationUnitScope().fPackage;
@@ -933,7 +958,6 @@ public abstract class Scope {
 		}
 		return null;
 	}
-
 	// Internal use only
 	/*	Answer the field binding that corresponds to fieldName.
 		Start the lookup at the receiverType.
@@ -941,10 +965,23 @@ public abstract class Scope {
 			isSuperAccess(); this is used to determine if the discovered field is visible.
 		Only fields defined by the receiverType or its supertypes are answered;
 		a field of an enclosing type will not be found using this API.
-
+    	If no visible field is discovered, null is answered.
+	 */
+	public FieldBinding findField(TypeBinding receiverType, char[] fieldName, InvocationSite invocationSite, boolean needResolve) {
+		return findField(receiverType, fieldName, invocationSite, needResolve, false);
+	}
+	// Internal use only
+	/*	Answer the field binding that corresponds to fieldName.
+		Start the lookup at the receiverType.
+		InvocationSite implements
+			isSuperAccess(); this is used to determine if the discovered field is visible.
+		Only fields defined by the receiverType or its supertypes are answered;
+		a field of an enclosing type will not be found using this API.
+        If the parameter invisibleFieldsOk is true, visibility checks have not been run on
+        any returned fields. The caller needs to apply these checks as needed. Otherwise,
 		If no visible field is discovered, null is answered.
 	*/
-	public FieldBinding findField(TypeBinding receiverType, char[] fieldName, InvocationSite invocationSite, boolean needResolve) {
+	public FieldBinding findField(TypeBinding receiverType, char[] fieldName, InvocationSite invocationSite, boolean needResolve, boolean invisibleFieldsOk) {
 
 		CompilationUnitScope unitScope = compilationUnitScope();
 		unitScope.recordTypeReference(receiverType);
@@ -989,6 +1026,9 @@ public abstract class Scope {
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=316456
 		boolean insideTypeAnnotations = this instanceof MethodScope && ((MethodScope) this).insideTypeAnnotation;
 		if (field != null) {
+			if (invisibleFieldsOk) {
+				return field;
+			}
 			if (invocationSite == null || insideTypeAnnotations
 				? field.canBeSeenBy(getCurrentPackage())
 				: field.canBeSeenBy(currentType, invocationSite, this))
@@ -1027,6 +1067,9 @@ public abstract class Scope {
 			currentType.initializeForStaticImports();
 			currentType = (ReferenceBinding) currentType.capture(this, invocationSite == null ? 0 : invocationSite.sourceEnd());
 			if ((field = currentType.getField(fieldName, needResolve)) != null) {
+				if (invisibleFieldsOk) {
+					return field;
+				}
 				keepLooking = false;
 				if (field.canBeSeenBy(receiverType, invocationSite, this)) {
 					if (visibleField == null)
@@ -1048,6 +1091,9 @@ public abstract class Scope {
 				unitScope.recordTypeReference(anInterface);
 				// no need to capture rcv interface, since member field is going to be static anyway
 				if ((field = anInterface.getField(fieldName, true /*resolve*/)) != null) {
+					if (invisibleFieldsOk) {
+						return field;
+					}
 					if (visibleField == null) {
 						visibleField = field;
 					} else {
@@ -1667,7 +1713,9 @@ public abstract class Scope {
 											}
 											if (foundField.isValidBinding())
 												// if a valid field was found, complain when another is found in an 'immediate' enclosing type (that is, not inherited)
-												if (foundField.declaringClass != fieldBinding.declaringClass)
+												// but only if "valid field" was inherited in the first place.
+												if (foundField.declaringClass != fieldBinding.declaringClass &&
+												    foundField.declaringClass != foundActualReceiverType) // https://bugs.eclipse.org/bugs/show_bug.cgi?id=316956
 													// i.e. have we found the same field - do not trust field identity yet
 													return new ProblemFieldBinding(
 														foundField, // closest match
@@ -2812,13 +2860,21 @@ public abstract class Scope {
 		int oneParamsLength = oneParams.length;
 		int twoParamsLength = twoParams.length;
 		if (oneParamsLength == twoParamsLength) {
+			/* Below 1.5, discard any generics we have left in for the method verifier's benefit, (so it
+			   can detect method overriding properly in the presence of generic super types.) This is so
+			   as to allow us to determine whether we have been handed an acceptable method in 1.4 terms
+			   without all the 1.5isms below kicking in and spoiling the party.
+			   See https://bugs.eclipse.org/bugs/show_bug.cgi?id=331446
+			*/
+			boolean applyErasure =  environment().globalOptions.sourceLevel < ClassFileConstants.JDK1_5;
 			next : for (int i = 0; i < oneParamsLength; i++) {
-				TypeBinding oneParam = oneParams[i];
-				TypeBinding twoParam = twoParams[i];
+				TypeBinding oneParam = applyErasure ? oneParams[i].erasure() : oneParams[i];
+				TypeBinding twoParam = applyErasure ? twoParams[i].erasure() : twoParams[i];
 				if (oneParam == twoParam || oneParam.isCompatibleWith(twoParam)) {
 					if (two.declaringClass.isRawType()) continue next;
 
-					TypeBinding originalTwoParam = two.original().parameters[i].leafComponentType();
+					TypeBinding leafComponentType = two.original().parameters[i].leafComponentType();
+					TypeBinding originalTwoParam = applyErasure ? leafComponentType.erasure() : leafComponentType; 
 					switch (originalTwoParam.kind()) {
 					   	case Binding.TYPE_PARAMETER :
 					   		if (((TypeVariableBinding) originalTwoParam).hasOnlyRawBounds())
@@ -3846,7 +3902,8 @@ public abstract class Scope {
 			for (int i = 0; i < argLength; i++) {
 				TypeBinding param = parameters[i];
 				TypeBinding arg = arguments[i];
-				if (arg != param && !arg.isCompatibleWith(param))
+				//https://bugs.eclipse.org/bugs/show_bug.cgi?id=330445
+				if (arg != param && !arg.isCompatibleWith(param.erasure()))
 					return NOT_COMPATIBLE;
 			}
 			return COMPATIBLE;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SignatureWrapper.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SignatureWrapper.java
index f0276cb..5df44ca 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SignatureWrapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SignatureWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,11 +17,16 @@ public class SignatureWrapper {
 	public int start;
 	public int end;
 	public int bracket;
+	private boolean use15specifics;
 
-	public SignatureWrapper(char[] signature) {
+	public SignatureWrapper(char[] signature, boolean use15specifics) {
 		this.signature = signature;
 		this.start = 0;
 		this.end = this.bracket = -1;
+		this.use15specifics = use15specifics;
+	}
+	public SignatureWrapper(char [] signature) {
+		this(signature, true);
 	}
 	public boolean atEnd() {
 		return this.start < 0 || this.start >= this.signature.length;
@@ -46,9 +51,33 @@ public class SignatureWrapper {
 				this.end = this.start;
 		}
 
-		this.start = this.end + 1; // skip ';'
+		if (this.use15specifics || this.end != this.bracket) {
+			this.start = this.end + 1; // skip ';'
+		} else {
+			this.start = skipAngleContents(this.end) + 1;  // skip <<>*>;
+			this.bracket = -1;
+		}
 		return this.end;
 	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, do not expose generics if we shouldn't
+	public int skipAngleContents(int i) {
+		if (this.signature[i] != '<') {
+			return i;
+		}
+		int depth = 0, length = this.signature.length;
+		for (++i; i < length; i++) {
+			switch(this.signature[i]) {
+				case '<' :
+					depth++;
+					break;
+				case '>' :
+					if (--depth < 0)
+						return i + 1;
+					break;
+			}
+		}
+		return i;
+	}
 	public char[] nextWord() {
 		this.end = CharOperation.indexOf(';', this.signature, this.start);
 		if (this.bracket <= this.start) // already know it if its > start
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
index a598b14..3897dc1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 328281 - visibility leaks not detected when analyzing unused field in private class
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
@@ -166,8 +167,10 @@ public FieldBinding addSyntheticFieldForInnerclass(LocalVariableBinding actualOu
 		FieldBinding existingField;
 		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
 			TypeDeclaration typeDecl = this.scope.referenceContext;
-			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-				FieldDeclaration fieldDecl = typeDecl.fields[i];
+			FieldDeclaration[] fieldDeclarations = typeDecl.fields;
+			int max = fieldDeclarations == null ? 0 : fieldDeclarations.length;
+			for (int i = 0; i < max; i++) {
+				FieldDeclaration fieldDecl = fieldDeclarations[i];
 				if (fieldDecl.binding == existingField) {
 					synthField.name = CharOperation.concat(
 						TypeConstants.SYNTHETIC_OUTER_LOCAL_PREFIX,
@@ -210,8 +213,10 @@ public FieldBinding addSyntheticFieldForInnerclass(ReferenceBinding enclosingTyp
 		FieldBinding existingField;
 		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
 			TypeDeclaration typeDecl = this.scope.referenceContext;
-			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-				FieldDeclaration fieldDecl = typeDecl.fields[i];
+			FieldDeclaration[] fieldDeclarations = typeDecl.fields;
+			int max = fieldDeclarations == null ? 0 : fieldDeclarations.length;
+			for (int i = 0; i < max; i++) {
+				FieldDeclaration fieldDecl = fieldDeclarations[i];
 				if (fieldDecl.binding == existingField) {
 					if (this.scope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_5) {
 						synthField.name = CharOperation.concat(
@@ -255,8 +260,10 @@ public FieldBinding addSyntheticFieldForClassLiteral(TypeBinding targetType, Blo
 	FieldBinding existingField;
 	if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
 		TypeDeclaration typeDecl = blockScope.referenceType();
-		for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-			FieldDeclaration fieldDecl = typeDecl.fields[i];
+		FieldDeclaration[] typeDeclarationFields = typeDecl.fields;
+		int max = typeDeclarationFields == null ? 0 : typeDeclarationFields.length;
+		for (int i = 0; i < max; i++) {
+			FieldDeclaration fieldDecl = typeDeclarationFields[i];
 			if (fieldDecl.binding == existingField) {
 				blockScope.problemReporter().duplicateFieldInType(this, fieldDecl);
 				break;
@@ -294,7 +301,8 @@ public FieldBinding addSyntheticFieldForAssert(BlockScope blockScope) {
 		FieldBinding existingField;
 		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
 			TypeDeclaration typeDecl = this.scope.referenceContext;
-			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
+			int max = (typeDecl.fields == null) ? 0 : typeDecl.fields.length;
+			for (int i = 0; i < max; i++) {
 				FieldDeclaration fieldDecl = typeDecl.fields[i];
 				if (fieldDecl.binding == existingField) {
 					synthField.name = CharOperation.concat(
@@ -337,8 +345,10 @@ public FieldBinding addSyntheticFieldForEnumValues() {
 		FieldBinding existingField;
 		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
 			TypeDeclaration typeDecl = this.scope.referenceContext;
-			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-				FieldDeclaration fieldDecl = typeDecl.fields[i];
+			FieldDeclaration[] fieldDeclarations = typeDecl.fields;
+			int max = fieldDeclarations == null ? 0 : fieldDeclarations.length;
+			for (int i = 0; i < max; i++) {
+				FieldDeclaration fieldDecl = fieldDeclarations[i];
 				if (fieldDecl.binding == existingField) {
 					synthField.name = CharOperation.concat(
 						TypeConstants.SYNTHETIC_ENUM_VALUES,
@@ -425,8 +435,10 @@ public SyntheticFieldBinding addSyntheticFieldForSwitchEnum(char[] fieldName, St
 		FieldBinding existingField;
 		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
 			TypeDeclaration typeDecl = this.scope.referenceContext;
-			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-				FieldDeclaration fieldDecl = typeDecl.fields[i];
+			FieldDeclaration[] fieldDeclarations = typeDecl.fields;
+			int max = fieldDeclarations == null ? 0 : fieldDeclarations.length;
+			for (int i = 0; i < max; i++) {
+				FieldDeclaration fieldDecl = fieldDeclarations[i];
 				if (fieldDecl.binding == existingField) {
 					synthField.name = CharOperation.concat(
 						fieldName,
@@ -469,6 +481,18 @@ public SyntheticMethodBinding addSyntheticMethodForSwitchEnum(TypeBinding enumBi
 	}
 	return accessMethod;
 }
+public SyntheticMethodBinding addSyntheticMethodForEnumInitialization(int begin, int end) {
+	if (this.synthetics == null)
+		this.synthetics = new HashMap[MAX_SYNTHETICS];
+	if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
+		this.synthetics[SourceTypeBinding.METHOD_EMUL] = new HashMap(5);
+
+	SyntheticMethodBinding accessMethod = new SyntheticMethodBinding(this, begin, end);
+	SyntheticMethodBinding[] accessors = new SyntheticMethodBinding[2]; 
+	this.synthetics[SourceTypeBinding.METHOD_EMUL].put(accessMethod.selector, accessors);
+	accessors[0] = accessMethod;
+	return accessMethod;
+}
 /* Add a new synthetic access method for access to <targetMethod>.
  * Must distinguish access method used for super access from others (need to use invokespecial bytecode)
 	Answer the new method or the existing method if one already existed.
@@ -491,6 +515,15 @@ public SyntheticMethodBinding addSyntheticMethod(MethodBinding targetMethod, boo
 			accessors[isSuperAccess ? 0 : 1] = accessMethod;
 		}
 	}
+	if (targetMethod.declaringClass.isStatic()) {
+		if ((targetMethod.isConstructor() && targetMethod.parameters.length >= 0xFE)
+				|| targetMethod.parameters.length >= 0xFF) {
+			this.scope.problemReporter().tooManyParametersForSyntheticMethod(targetMethod.sourceMethod());
+		}
+	} else if ((targetMethod.isConstructor() && targetMethod.parameters.length >= 0xFD)
+			|| targetMethod.parameters.length >= 0xFE) {
+		this.scope.problemReporter().tooManyParametersForSyntheticMethod(targetMethod.sourceMethod());
+	}
 	return accessMethod;
 }
 /*
@@ -607,7 +640,12 @@ public char[] computeUniqueKey(boolean isLeaf) {
 		start = CharOperation.lastIndexOf('/', uniqueKey) + 1;
 		if (start == 0)
 			start = 1; // start after L
-		end = CharOperation.indexOf('$', uniqueKey, start);
+		if (this.isMemberType()) {
+			end = CharOperation.indexOf('$', uniqueKey, start);
+		} else {
+			// '$' is part of the type name
+			end = -1;
+		}
 		if (end == -1)
 			end = CharOperation.indexOf('<', uniqueKey, start);
 		if (end == -1)
@@ -1247,7 +1285,8 @@ public FieldBinding resolveTypeFor(FieldBinding field) {
 	if (hasRestrictedAccess())
 		field.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
 	FieldDeclaration[] fieldDecls = this.scope.referenceContext.fields;
-	for (int f = 0, length = fieldDecls.length; f < length; f++) {
+	int length = fieldDecls == null ? 0 : fieldDecls.length;
+	for (int f = 0; f < length; f++) {
 		if (fieldDecls[f].binding != field)
 			continue;
 
@@ -1344,7 +1383,7 @@ public MethodBinding resolveTypesFor(MethodBinding method) {
 		if (count < size)
 			System.arraycopy(method.thrownExceptions, 0, method.thrownExceptions = new ReferenceBinding[count], 0, count);
 	}
-
+	final boolean reportUnavoidableGenericTypeProblems = this.scope.compilerOptions().reportUnavoidableGenericTypeProblems;
 	boolean foundArgProblem = false;
 	Argument[] arguments = methodDecl.arguments;
 	if (arguments != null) {
@@ -1356,7 +1395,20 @@ public MethodBinding resolveTypesFor(MethodBinding method) {
 			if (arg.annotations != null) {
 				method.tagBits |= TagBits.HasParameterAnnotations;
 			}
-			TypeBinding parameterType = arg.type.resolveType(methodDecl.scope, true /* check bounds*/);
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=322817
+			boolean deferRawTypeCheck = !reportUnavoidableGenericTypeProblems && !method.isConstructor() && (arg.type.bits & ASTNode.IgnoreRawTypeCheck) == 0;
+			TypeBinding parameterType;
+			if (deferRawTypeCheck) {
+				arg.type.bits |= ASTNode.IgnoreRawTypeCheck;
+			}
+			try {
+				parameterType = arg.type.resolveType(methodDecl.scope, true /* check bounds*/);
+			} finally {
+				if (deferRawTypeCheck) { 
+					arg.type.bits &= ~ASTNode.IgnoreRawTypeCheck;
+				}
+			}
+		
 			if (parameterType == null) {
 				foundArgProblem = true;
 			} else if (parameterType == TypeBinding.VOID) {
@@ -1389,7 +1441,19 @@ public MethodBinding resolveTypesFor(MethodBinding method) {
 			method.returnType = null;
 			foundReturnTypeProblem = true;
 		} else {
-			TypeBinding methodType = returnType.resolveType(methodDecl.scope, true /* check bounds*/);
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=322817
+			boolean deferRawTypeCheck = !reportUnavoidableGenericTypeProblems && (returnType.bits & ASTNode.IgnoreRawTypeCheck) == 0;
+			TypeBinding methodType;
+			if (deferRawTypeCheck) {
+				returnType.bits |= ASTNode.IgnoreRawTypeCheck;
+			}
+			try {
+				methodType = returnType.resolveType(methodDecl.scope, true /* check bounds*/);
+			} finally {
+				if (deferRawTypeCheck) { 
+					returnType.bits &= ~ASTNode.IgnoreRawTypeCheck;
+				}
+			}
 			if (methodType == null) {
 				foundReturnTypeProblem = true;
 			} else if (methodType.isArrayType() && ((ArrayBinding) methodType).leafComponentType == TypeBinding.VOID) {
@@ -1454,7 +1518,6 @@ public ReferenceBinding superclass() {
 public ReferenceBinding[] superInterfaces() {
 	return this.superInterfaces;
 }
-
 public SyntheticMethodBinding[] syntheticMethods() {
 	if (this.synthetics == null 
 			|| this.synthetics[SourceTypeBinding.METHOD_EMUL] == null 
@@ -1618,4 +1681,19 @@ void verifyMethods(MethodVerifier verifier) {
 public FieldBinding[] unResolvedFields() {
 	return this.fields;
 }
+
+public void tagIndirectlyAccessibleMembers() {
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=328281
+	for (int i = 0; i < this.fields.length; i++) {
+		if (!this.fields[i].isPrivate())
+			this.fields[i].modifiers |= ExtraCompilerModifiers.AccLocallyUsed;
+	}
+	for (int i = 0; i < this.memberTypes.length; i++) {
+		if (!this.memberTypes[i].isPrivate())
+			this.memberTypes[i].modifiers |= ExtraCompilerModifiers.AccLocallyUsed;
+	}
+	if (this.superclass.isPrivate()) 
+		if (this.superclass instanceof SourceTypeBinding)  // should always be true because private super type can only be accessed in same CU
+			((SourceTypeBinding) this.superclass).tagIndirectlyAccessibleMembers();
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.java
index 9fae857..598f24a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SyntheticMethodBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,9 +21,13 @@ public class SyntheticMethodBinding extends MethodBinding {
 	public FieldBinding targetWriteField;		// write access to a field
 	public MethodBinding targetMethod;			// method or constructor
 	public TypeBinding targetEnumType; 			// enum type
-
+	
 	public int purpose;
 
+	// fields used to generate enum constants when too many
+	public int startIndex;
+	public int endIndex;
+
 	public final static int FieldReadAccess = 1; 		// field read
 	public final static int FieldWriteAccess = 2; 		// field write
 	public final static int SuperFieldReadAccess = 3; // super field read
@@ -35,6 +39,7 @@ public class SyntheticMethodBinding extends MethodBinding {
 	public final static int EnumValues = 9; // enum #values()
 	public final static int EnumValueOf = 10; // enum #valueOf(String)
 	public final static int SwitchTable = 11; // switch table method
+	public final static int TooManyEnumsConstants = 12; // too many enum constants
 
 	public int sourceStart = 0; // start position of the matching declaration
 	public int index; // used for sorting access methods in the class file
@@ -226,7 +231,7 @@ public class SyntheticMethodBinding extends MethodBinding {
 	    this.selector = overridenMethodToBridge.selector;
 	    // amongst other, clear the AccGenericSignature, so as to ensure no remains of original inherited persist (101794)
 	    // also use the modifiers from the target method, as opposed to inherited one (147690)
-	    this.modifiers = (targetMethod.modifiers | ClassFileConstants.AccBridge | ClassFileConstants.AccSynthetic) & ~(ClassFileConstants.AccAbstract | ClassFileConstants.AccNative  | ClassFileConstants.AccFinal | ExtraCompilerModifiers.AccGenericSignature);
+	    this.modifiers = (targetMethod.modifiers | ClassFileConstants.AccBridge | ClassFileConstants.AccSynthetic) & ~(ClassFileConstants.AccSynchronized | ClassFileConstants.AccAbstract | ClassFileConstants.AccNative  | ClassFileConstants.AccFinal | ExtraCompilerModifiers.AccGenericSignature);
 		this.tagBits |= (TagBits.AnnotationResolved | TagBits.DeprecatedAnnotationResolved);
 	    this.returnType = overridenMethodToBridge.returnType;
 	    this.parameters = overridenMethodToBridge.parameters;
@@ -265,6 +270,26 @@ public class SyntheticMethodBinding extends MethodBinding {
 		}
 	}
 	
+	/**
+	 * Construct enum special methods: values or valueOf methods
+	 */
+	public SyntheticMethodBinding(SourceTypeBinding declaringEnum, int startIndex, int endIndex) {
+		this.declaringClass = declaringEnum;
+		SyntheticMethodBinding[] knownAccessMethods = declaringEnum.syntheticMethods();
+		this.index = knownAccessMethods == null ? 0 : knownAccessMethods.length;
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(TypeConstants.SYNTHETIC_ENUM_CONSTANT_INITIALIZATION_METHOD_PREFIX).append(this.index);
+		this.selector = String.valueOf(buffer).toCharArray(); 
+		this.modifiers = ClassFileConstants.AccPrivate | ClassFileConstants.AccStatic;
+		this.tagBits |= (TagBits.AnnotationResolved | TagBits.DeprecatedAnnotationResolved);
+		this.purpose = SyntheticMethodBinding.TooManyEnumsConstants;
+		this.thrownExceptions = Binding.NO_EXCEPTIONS;
+		this.returnType = TypeBinding.VOID;
+		this.parameters = Binding.NO_PARAMETERS;
+		this.startIndex = startIndex;
+		this.endIndex = endIndex;
+	}
+
 	// Create a synthetic method that will simply call the super classes method.
 	// Used when a public method is inherited from a non-public class into a public class.
 	// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=288658
@@ -274,7 +299,7 @@ public class SyntheticMethodBinding extends MethodBinding {
 	    this.selector = overridenMethodToBridge.selector;
 	    // amongst other, clear the AccGenericSignature, so as to ensure no remains of original inherited persist (101794)
 	    // also use the modifiers from the target method, as opposed to inherited one (147690)
-	    this.modifiers = (overridenMethodToBridge.modifiers | ClassFileConstants.AccBridge | ClassFileConstants.AccSynthetic) & ~(ClassFileConstants.AccAbstract | ClassFileConstants.AccNative  | ClassFileConstants.AccFinal | ExtraCompilerModifiers.AccGenericSignature);
+	    this.modifiers = (overridenMethodToBridge.modifiers | ClassFileConstants.AccBridge | ClassFileConstants.AccSynthetic) & ~(ClassFileConstants.AccSynchronized | ClassFileConstants.AccAbstract | ClassFileConstants.AccNative  | ClassFileConstants.AccFinal | ExtraCompilerModifiers.AccGenericSignature);
 		this.tagBits |= (TagBits.AnnotationResolved | TagBits.DeprecatedAnnotationResolved);
 	    this.returnType = overridenMethodToBridge.returnType;
 	    this.parameters = overridenMethodToBridge.parameters;
@@ -302,14 +327,15 @@ public class SyntheticMethodBinding extends MethodBinding {
 		this.selector = accessedConstructor.selector;
 		this.returnType = accessedConstructor.returnType;
 		this.purpose = SyntheticMethodBinding.ConstructorAccess;
-		this.parameters = new TypeBinding[accessedConstructor.parameters.length + 1];
+		final int parametersLength = accessedConstructor.parameters.length;
+		this.parameters = new TypeBinding[parametersLength + 1];
 		System.arraycopy(
 			accessedConstructor.parameters,
 			0,
 			this.parameters,
 			0,
-			accessedConstructor.parameters.length);
-		this.parameters[accessedConstructor.parameters.length] =
+			parametersLength);
+		this.parameters[parametersLength] =
 			accessedConstructor.declaringClass;
 		this.thrownExceptions = accessedConstructor.thrownExceptions;
 		this.declaringClass = sourceType;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java
index 466362a..d1e6abc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,12 @@ public interface TagBits {
 	// for method
 	long HasUncheckedTypeArgumentForBoundCheck = ASTNode.Bit9;
 	
+	// local variable
+	long NotInitialized = ASTNode.Bit9;
+	
+	// local variable
+	long ForcedToBeRawType = ASTNode.Bit10;
+
 	// set when method has argument(s) that couldn't be resolved
 	long HasUnresolvedArguments = ASTNode.Bit10;
 	
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
index c281de2..2d8e821 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *      Stephen Herrmann <stephan at cs.tu-berlin.de> -  Contribution for bug 317046
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
@@ -562,11 +563,12 @@ public boolean isParameterizedWithOwnVariables() {
 	return true;
 }
 
-private boolean isProvableDistinctSubType(TypeBinding otherType) {
+private boolean isProvableDistinctSubType(TypeBinding otherType, boolean isClassLiteral) {
 	if (otherType.isInterface()) {
 		if (isInterface())
 			return false;
 		if (isArrayType()
+			//	|| isClassLiteral // https://bugs.eclipse.org/bugs/show_bug.cgi?id=322531
 				|| ((this instanceof ReferenceBinding) && ((ReferenceBinding) this).isFinal())
 				|| (isTypeVariable() && ((TypeVariableBinding)this).superclass().isFinal())) {
 			return !isCompatibleWith(otherType);
@@ -575,6 +577,7 @@ private boolean isProvableDistinctSubType(TypeBinding otherType) {
 	} else {
 		if (isInterface()) {
 			if (otherType.isArrayType()
+				//	|| isClassLiteral // https://bugs.eclipse.org/bugs/show_bug.cgi?id=322531
 					|| ((otherType instanceof ReferenceBinding) && ((ReferenceBinding) otherType).isFinal())
 					|| (otherType.isTypeVariable() && ((TypeVariableBinding)otherType).superclass().isFinal())) {
 				return !isCompatibleWith(otherType);
@@ -592,6 +595,18 @@ private boolean isProvableDistinctSubType(TypeBinding otherType) {
  * Returns true if a type is provably distinct from another one,
  */
 public boolean isProvablyDistinct(TypeBinding otherType) {
+
+	/* With the hybrid 1.4/1.5+ projects modes, while establishing type equivalence, we need to
+	   be prepared for a type such as Map appearing in one of three forms: As (a) a ParameterizedTypeBinding 
+	   e.g Map<String, String>, (b) as RawTypeBinding Map#RAW and finally (c) as a BinaryTypeBinding 
+	   When the usage of a type lacks type parameters, whether we land up with the raw form or not depends
+	   on whether the underlying type was "seen to be" a generic type in the particular build environment or
+	   not. See:
+	    https://bugs.eclipse.org/bugs/show_bug.cgi?id=186565
+        https://bugs.eclipse.org/bugs/show_bug.cgi?id=328827 
+        https://bugs.eclipse.org/bugs/show_bug.cgi?id=329588
+	 */ 
+
 	if (this == otherType)
 	    return false;
     if (otherType == null)
@@ -630,23 +645,22 @@ public boolean isProvablyDistinct(TypeBinding otherType) {
 		            return false;
 
 		    	case Binding.GENERIC_TYPE :
-		            SourceTypeBinding otherGenericType = (SourceTypeBinding) otherType;
-		            if (paramType.genericType() != otherGenericType)
+		            if (paramType.genericType() != otherType)
 		                return true;
 		            if (!paramType.isStatic()) { // static member types do not compare their enclosing
 		            	ReferenceBinding enclosing = enclosingType();
 		            	if (enclosing != null) {
-		            		ReferenceBinding otherEnclosing = otherGenericType.enclosingType();
+		            		ReferenceBinding otherEnclosing = otherType.enclosingType();
 		            		if (otherEnclosing == null) return true;
 		            		if ((otherEnclosing.tagBits & TagBits.HasDirectWildcard) == 0) {
 								if (enclosing != otherEnclosing) return true;
 		            		} else {
-		            			if (!enclosing.isEquivalentTo(otherGenericType.enclosingType())) return true;
+		            			if (!enclosing.isEquivalentTo(otherType.enclosingType())) return true;
 		            		}
 		            	}
 		            }
 		            length = paramType.arguments == null ? 0 : paramType.arguments.length;
-		            otherArguments = otherGenericType.typeVariables();
+		            otherArguments = otherType.typeVariables();
 		            otherLength = otherArguments == null ? 0 : otherArguments.length;
 		            if (otherLength != length)
 		                return true;
@@ -658,20 +672,31 @@ public boolean isProvablyDistinct(TypeBinding otherType) {
 
 		    	case Binding.RAW_TYPE :
 		            return erasure() != otherType.erasure();
+		    	case Binding.TYPE:  // https://bugs.eclipse.org/bugs/show_bug.cgi?id=329588
+		    		return erasure() != otherType;
 		    }
 	        return true;
 
-		case Binding.RAW_TYPE :
+		case Binding.RAW_TYPE : // dead code ??
 
 		    switch(otherType.kind()) {
 
 		    	case Binding.GENERIC_TYPE :
 		    	case Binding.PARAMETERIZED_TYPE :
 		    	case Binding.RAW_TYPE :
+		    	case Binding.TYPE:  // https://bugs.eclipse.org/bugs/show_bug.cgi?id=329588
 		            return erasure() != otherType.erasure();
 		    }
 	        return true;
 
+		case Binding.TYPE: // https://bugs.eclipse.org/bugs/show_bug.cgi?id=329588
+		    switch(otherType.kind()) {
+		    	case Binding.PARAMETERIZED_TYPE :
+		    	case Binding.RAW_TYPE :
+		            return this != otherType.erasure();
+		    }
+		    break;
+
 		default :
 			break;
 	}
@@ -690,6 +715,7 @@ private boolean isProvablyDistinctTypeArgument(TypeBinding otherArgument, final
 
 	TypeBinding upperBound1 = null;
 	TypeBinding lowerBound1 = null;
+	ReferenceBinding genericType = paramType.genericType();
 	switch (kind()) {
 		case Binding.WILDCARD_TYPE :
 			WildcardBinding wildcard = (WildcardBinding) this;
@@ -724,7 +750,7 @@ private boolean isProvablyDistinctTypeArgument(TypeBinding otherArgument, final
 			}
 			if (variable.firstBound == null) // unbound variable
 				return false;
-			TypeBinding eliminatedType = Scope.convertEliminatingTypeVariables(variable, paramType.genericType(), rank, null);
+			TypeBinding eliminatedType = Scope.convertEliminatingTypeVariables(variable, genericType, rank, null);
 			switch (eliminatedType.kind()) {
 				case Binding.WILDCARD_TYPE :
 				case Binding.INTERSECTION_TYPE :
@@ -779,7 +805,7 @@ private boolean isProvablyDistinctTypeArgument(TypeBinding otherArgument, final
 			}
 			if (otherVariable.firstBound == null) // unbound variable
 				return false;
-			TypeBinding otherEliminatedType = Scope.convertEliminatingTypeVariables(otherVariable, paramType.genericType(), rank, null);
+			TypeBinding otherEliminatedType = Scope.convertEliminatingTypeVariables(otherVariable, genericType, rank, null);
 			switch (otherEliminatedType.kind()) {
 				case Binding.WILDCARD_TYPE :
 				case Binding.INTERSECTION_TYPE :
@@ -816,10 +842,10 @@ private boolean isProvablyDistinctTypeArgument(TypeBinding otherArgument, final
 		if (lowerBound2 != null) {
 			return !lowerBound2.isCompatibleWith(upperBound1);
 		} else if (upperBound2 != null) {
-			return upperBound1.isProvableDistinctSubType(upperBound2)
-							&& upperBound2.isProvableDistinctSubType(upperBound1);
+			return upperBound1.isProvableDistinctSubType(upperBound2, false)
+							&& upperBound2.isProvableDistinctSubType(upperBound1, false);
 		} else {
-			return otherArgument.isProvableDistinctSubType(upperBound1);
+			return otherArgument.isProvableDistinctSubType(upperBound1, genericType.id == TypeIds.T_JavaLangClass);
 		}
 	} else {
 		if (lowerBound2 != null) {
@@ -828,7 +854,7 @@ private boolean isProvablyDistinctTypeArgument(TypeBinding otherArgument, final
 			}
 			return !lowerBound2.isCompatibleWith(this);
 		} else if (upperBound2 != null) {
-			return isProvableDistinctSubType(upperBound2);
+			return isProvableDistinctSubType(upperBound2, genericType.id == TypeIds.T_JavaLangClass);
 		} else {
 			return true; // ground types should have been the same
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java
index f394bc1..e3ef49d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -155,6 +155,7 @@ public interface TypeConstants {
 	char[] SYNTHETIC_OUTER_LOCAL_PREFIX = "val$".toCharArray(); //$NON-NLS-1$
 	char[] SYNTHETIC_ENCLOSING_INSTANCE_PREFIX = "this$".toCharArray(); //$NON-NLS-1$
 	char[] SYNTHETIC_ACCESS_METHOD_PREFIX =  "access$".toCharArray(); //$NON-NLS-1$
+	char[] SYNTHETIC_ENUM_CONSTANT_INITIALIZATION_METHOD_PREFIX =  " enum constant initialization$".toCharArray(); //$NON-NLS-1$
 
 	// synthetic package-info name
 	public static final char[] PACKAGE_INFO_NAME = "package-info".toCharArray(); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java
index 3e9b82e..b6f685d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
index 644d695..7b6c840 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 282152 - [1.5][compiler] Generics code rejected by Eclipse but accepted by javac
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.lookup;
 
@@ -114,6 +115,9 @@ public class TypeVariableBinding extends ReferenceBinding {
 					break;
 
 				case Wildcard.SUPER :
+					// if the wildcard is lower-bounded by a type variable that has no relevant upper bound there's nothing to check here (bug 282152):
+					if (wildcard.bound.isTypeVariable() && ((TypeVariableBinding)wildcard.bound).superclass.id == TypeIds.T_JavaLangObject)
+						break;
 					return boundCheck(substitution, wildcard.bound);
 
 				case Wildcard.UNBOUND :
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.java
index d5ef030..ba7d9a0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public abstract class AbstractCommentParser implements JavadocTagConstants {
 
 	// Options
 	public boolean checkDocComment = false;
+	public boolean setJavadocPositions = false;
 	public boolean reportProblems;
 	protected long complianceLevel;
 	protected long sourceLevel;
@@ -283,6 +284,7 @@ public abstract class AbstractCommentParser implements JavadocTagConstants {
 							refreshReturnStatement();
 						}
 						if (this.inlineTagStarted) {
+							textEndPosition = this.index - 1;
 							if (this.lineStarted && this.textStart != -1 && this.textStart < textEndPosition) {
 								pushText(this.textStart, textEndPosition);
 							}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocParser.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocParser.java
index 7c11493..b729329 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,9 @@ public class JavadocParser extends AbstractCommentParser {
 	public JavadocParser(Parser sourceParser) {
 		super(sourceParser);
 		this.kind = COMPIL_PARSER | TEXT_VERIF;
+		if (sourceParser != null && sourceParser.options != null) {
+			this.setJavadocPositions = sourceParser.options.processAnnotations;
+		}
 	}
 
 	/* (non-Javadoc)
@@ -67,6 +70,12 @@ public class JavadocParser extends AbstractCommentParser {
 		// Init javadoc if necessary
 		if (this.checkDocComment) {
 			this.docComment = new Javadoc(this.javadocStart, this.javadocEnd);
+		} else if (this.setJavadocPositions) {
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=189459
+			// if annotation processors are there, javadoc object is required but
+			// they need not be resolved
+			this.docComment = new Javadoc(this.javadocStart, this.javadocEnd);
+			this.docComment.bits &= ~ASTNode.ResolveJavadoc;
 		} else {
 			this.docComment = null;
 		}
@@ -559,6 +568,10 @@ public class JavadocParser extends AbstractCommentParser {
 							if (this.reportProblems) {
 								recordInheritedPosition((((long) this.tagSourceStart) << 32) + this.tagSourceEnd);
 							}
+							if (this.inlineTagStarted) {
+								// parse a 'valid' inheritDoc tag
+								parseInheritDocTag();
+							}
 							break;
 						default:
 							valid = false;
@@ -683,6 +696,10 @@ public class JavadocParser extends AbstractCommentParser {
 		return valid;
 	}
 
+	protected void parseInheritDocTag() {
+		// do nothing
+	}
+
 	/*
 	 * Parse @param tag declaration and flag missing description if corresponding option is enabled
 	 */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
index 092b0cf..02ff5e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -952,8 +952,10 @@ public RecoveredElement buildInitialRecoveryState(){
 			/* Initializer bodies are parsed in the context of the type declaration, we must thus search it inside */
 			if (this.referenceContext instanceof TypeDeclaration){
 				TypeDeclaration type = (TypeDeclaration) this.referenceContext;
-				for (int i = 0; i < type.fields.length; i++){
-					FieldDeclaration field = type.fields[i];
+				FieldDeclaration[] fieldDeclarations = type.fields;
+				int length = fieldDeclarations == null ? 0 : fieldDeclarations.length;
+				for (int i = 0; i < length; i++){
+					FieldDeclaration field = fieldDeclarations[i];
 					if (field != null
 						&& field.getKind() == AbstractVariableDeclaration.INITIALIZER
 						&& ((Initializer) field).block != null
@@ -1014,6 +1016,11 @@ public RecoveredElement buildInitialRecoveryState(){
 		}
 		if (node instanceof TypeDeclaration){
 			TypeDeclaration type = (TypeDeclaration) node;
+			if ((type.modifiers & ClassFileConstants.AccEnum) != 0) {
+				// do not allow enums to be build as recovery types
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=340691
+				continue;
+			}
 			if (type.declarationSourceEnd == 0){
 				element = element.add(type, 0);
 				this.lastCheckPoint = type.bodyStart;
@@ -1834,7 +1841,8 @@ protected void consumeBinaryExpression(int op) {
 			}
 			break;
 		case LESS :
-			this.intPtr--;
+		case MULTIPLY :
+			this.intPtr--; // star end position or starting position of angle bracket
 			this.expressionStack[this.expressionPtr] =
 				new BinaryExpression(
 					expr1,
@@ -1957,7 +1965,8 @@ protected void consumeBinaryExpressionWithName(int op) {
 			}
 			break;
 		case LESS :
-			this.intPtr--;
+		case MULTIPLY :
+			this.intPtr--; // star end position or starting position of angle bracket
 			this.expressionStack[this.expressionPtr] =
 				new BinaryExpression(
 					expr1,
@@ -2022,12 +2031,13 @@ protected void consumeCastExpressionLL1() {
 
 	//optimize push/pop
 
-	Expression cast,exp;
+	Expression cast;
+	Expression exp;
 	this.expressionPtr--;
 	this.expressionStack[this.expressionPtr] =
 		cast = new CastExpression(
 			exp=this.expressionStack[this.expressionPtr+1] ,
-			this.expressionStack[this.expressionPtr]);
+			(TypeReference) this.expressionStack[this.expressionPtr]);
 	this.expressionLengthPtr -- ;
 	updateSourcePosition(cast);
 	cast.sourceEnd=exp.sourceEnd;
@@ -2035,7 +2045,9 @@ protected void consumeCastExpressionLL1() {
 protected void consumeCastExpressionWithGenericsArray() {
 	// CastExpression ::= PushLPAREN Name TypeArguments Dims PushRPAREN InsideCastExpression UnaryExpressionNotPlusMinus
 
-	Expression exp, cast, castType;
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	int end = this.intStack[this.intPtr--];
 
 	int dim = this.intStack[this.intPtr--];
@@ -2050,7 +2062,9 @@ protected void consumeCastExpressionWithGenericsArray() {
 protected void consumeCastExpressionWithNameArray() {
 	// CastExpression ::= PushLPAREN Name Dims PushRPAREN InsideCastExpression UnaryExpressionNotPlusMinus
 
-	Expression exp, cast, castType;
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	int end = this.intStack[this.intPtr--];
 
 	// handle type arguments
@@ -2069,7 +2083,9 @@ protected void consumeCastExpressionWithPrimitiveType() {
 
 	//optimize the push/pop
 
-	Expression exp, cast, castType;
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	int end = this.intStack[this.intPtr--];
 	this.expressionStack[this.expressionPtr] = cast = new CastExpression(exp = this.expressionStack[this.expressionPtr], castType = getTypeReference(this.intStack[this.intPtr--]));
 	castType.sourceEnd = end - 1;
@@ -2078,7 +2094,9 @@ protected void consumeCastExpressionWithPrimitiveType() {
 }
 protected void consumeCastExpressionWithQualifiedGenericsArray() {
 	// CastExpression ::= PushLPAREN Name OnlyTypeArguments '.' ClassOrInterfaceType Dims PushRPAREN InsideCastExpression UnaryExpressionNotPlusMinus
-	Expression exp, cast, castType;
+	Expression exp;
+	Expression cast;
+	TypeReference castType;
 	int end = this.intStack[this.intPtr--];
 
 	int dim = this.intStack[this.intPtr--];
@@ -3230,6 +3248,8 @@ protected void consumeEnumConstantHeader() {
       }
       enumConstant.initialization = allocationExpression;
    }
+   // initialize the starting position of the allocation expression
+   enumConstant.initialization.sourceStart = enumConstant.declarationSourceStart;
 
    // recovery
    if (this.currentElement != null) {
@@ -3297,22 +3317,32 @@ protected void consumeEnumConstantNoClassBody() {
 	final FieldDeclaration fieldDeclaration = (FieldDeclaration) this.astStack[this.astPtr];
 	fieldDeclaration.declarationEnd = endOfEnumConstant;
 	fieldDeclaration.declarationSourceEnd = endOfEnumConstant;
+	// initialize the starting position of the allocation expression
+	ASTNode initialization = fieldDeclaration.initialization;
+	if (initialization != null) {
+		initialization.sourceEnd = endOfEnumConstant;
+	}
 }
 protected void consumeEnumConstants() {
 	concatNodeLists();
 }
 protected void consumeEnumConstantWithClassBody() {
-   dispatchDeclarationInto(this.astLengthStack[this.astLengthPtr--]);
-   TypeDeclaration anonymousType = (TypeDeclaration) this.astStack[this.astPtr--]; // pop type
-   this.astLengthPtr--;
-   anonymousType.bodyEnd = this.endPosition;
-   anonymousType.declarationSourceEnd = flushCommentsDefinedPriorTo(this.endStatementPosition);
-   final FieldDeclaration fieldDeclaration = ((FieldDeclaration) this.astStack[this.astPtr]);
-   fieldDeclaration.declarationEnd = this.endStatementPosition;
-   fieldDeclaration.declarationSourceEnd = anonymousType.declarationSourceEnd;
-   this.intPtr --; // remove end position of the arguments
-   this.variablesCounter[this.nestedType] = 0;
-   this.nestedType--;
+	dispatchDeclarationInto(this.astLengthStack[this.astLengthPtr--]);
+	TypeDeclaration anonymousType = (TypeDeclaration) this.astStack[this.astPtr--]; // pop type
+	this.astLengthPtr--;
+	anonymousType.bodyEnd = this.endPosition;
+	anonymousType.declarationSourceEnd = flushCommentsDefinedPriorTo(this.endStatementPosition);
+	final FieldDeclaration fieldDeclaration = ((FieldDeclaration) this.astStack[this.astPtr]);
+	fieldDeclaration.declarationEnd = this.endStatementPosition;
+	int declarationSourceEnd = anonymousType.declarationSourceEnd;
+	fieldDeclaration.declarationSourceEnd = declarationSourceEnd;
+	this.intPtr --; // remove end position of the arguments
+	this.variablesCounter[this.nestedType] = 0;
+	this.nestedType--;
+	ASTNode initialization = fieldDeclaration.initialization;
+	if (initialization != null) {
+		initialization.sourceEnd = declarationSourceEnd;
+	}
 }
 protected void consumeEnumDeclaration() {
 	// EnumDeclaration ::= EnumHeader ClassHeaderImplementsopt EnumBody
@@ -3834,6 +3864,74 @@ protected void consumeFormalParameter(boolean isVarArgs) {
 		}
 	}
 }
+protected void consumeCatchFormalParameter(boolean isVarArgs) {
+	// FormalParameter ::= Type VariableDeclaratorId ==> false
+	// FormalParameter ::= Modifiers Type VariableDeclaratorId ==> true
+	/*
+	this.astStack :
+	this.identifierStack : type identifier
+	this.intStack : dim dim
+	 ==>
+	this.astStack : Argument
+	this.identifierStack :
+	this.intStack :
+	*/
+
+	this.identifierLengthPtr--;
+	char[] identifierName = this.identifierStack[this.identifierPtr];
+	long namePositions = this.identifierPositionStack[this.identifierPtr--];
+	int extendedDimensions = this.intStack[this.intPtr--];
+	int endOfEllipsis = 0;
+	if (isVarArgs) {
+		endOfEllipsis = this.intStack[this.intPtr--];
+	}
+	int firstDimensions = this.intStack[this.intPtr--];
+	final int typeDimensions = firstDimensions + extendedDimensions;
+	TypeReference type = getTypeReference(typeDimensions);
+	if (isVarArgs) {
+		type = copyDims(type, typeDimensions + 1);
+		if (extendedDimensions == 0) {
+			type.sourceEnd = endOfEllipsis;
+		}
+		type.bits |= ASTNode.IsVarArgs; // set isVarArgs
+	}
+	int modifierPositions = this.intStack[this.intPtr--];
+	this.intPtr--;
+	Argument arg =
+		new Argument(
+			identifierName,
+			namePositions,
+			type,
+			this.intStack[this.intPtr + 1] & ~ClassFileConstants.AccDeprecated); // modifiers
+	arg.bits &= ~ASTNode.IsArgument;
+	arg.declarationSourceStart = modifierPositions;
+	// consume annotations
+	int length;
+	if ((length = this.expressionLengthStack[this.expressionLengthPtr--]) != 0) {
+		System.arraycopy(
+			this.expressionStack,
+			(this.expressionPtr -= length) + 1,
+			arg.annotations = new Annotation[length],
+			0,
+			length);
+	}
+	pushOnAstStack(arg);
+
+	/* if incomplete method header, this.listLength counter will not have been reset,
+		indicating that some arguments are available on the stack */
+	this.listLength++;
+
+	if(isVarArgs) {
+		if (!this.statementRecoveryActivated &&
+				this.options.sourceLevel < ClassFileConstants.JDK1_5 &&
+				this.lastErrorEndPositionBeforeRecovery < this.scanner.currentPosition) {
+				problemReporter().invalidUsageOfVarargs(arg);
+		} else if (!this.statementRecoveryActivated &&
+				extendedDimensions > 0) {
+			problemReporter().illegalExtendedDimensions(arg);
+		}
+	}
+}
 protected void consumeFormalParameterList() {
 	// FormalParameterList ::= FormalParameterList ',' FormalParameter
 	optimizedConcatNodeLists();
@@ -3935,6 +4033,17 @@ protected void consumeInterfaceDeclaration() {
 
 	//convert constructor that do not have the type's name into methods
 	typeDecl.checkConstructors(this);
+	
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=212713, 
+	// reject initializers that have been tolerated by the grammar.
+	FieldDeclaration [] fields = typeDecl.fields;
+	int fieldCount = fields == null ? 0 : fields.length;
+	for (int i = 0; i < fieldCount; i++) {
+		FieldDeclaration field = fields[i];
+		if (field instanceof Initializer) {
+			problemReporter().interfaceCannotHaveInitializers(typeDecl.name, field);
+		}
+	}
 
 	//always add <clinit> (will be remove at code gen time if empty)
 	if (this.scanner.containsAssertKeyword) {
@@ -4880,7 +4989,7 @@ protected void consumePackageDeclarationName() {
 		0,
 		length);
 
-	impt = new ImportReference(tokens, positions, true, ClassFileConstants.AccDefault);
+	impt = new ImportReference(tokens, positions, false, ClassFileConstants.AccDefault);
 	this.compilationUnit.currentPackage = impt;
 
 	if (this.currentToken == TokenNameSEMICOLON){
@@ -4925,7 +5034,7 @@ protected void consumePackageDeclarationNameWithModifiers() {
 	int packageModifiersSourceStart = this.intStack[this.intPtr--]; // we don't need the modifiers start
 	int packageModifiers = this.intStack[this.intPtr--];
 
-	impt = new ImportReference(tokens, positions, true, packageModifiers);
+	impt = new ImportReference(tokens, positions, false, packageModifiers);
 	this.compilationUnit.currentPackage = impt;
 	// consume annotations
 	if ((length = this.expressionLengthStack[this.expressionLengthPtr--]) != 0) {
@@ -5236,1593 +5345,1601 @@ protected void consumeRule(int act) {
 		    consumeEnterCompilationUnit();  
 			break;
  
-    case 87 : if (DEBUG) { System.out.println("CatchHeader ::= catch LPAREN FormalParameter RPAREN..."); }  //$NON-NLS-1$
+    case 87 : if (DEBUG) { System.out.println("CatchHeader ::= catch LPAREN CatchFormalParameter RPAREN"); }  //$NON-NLS-1$
 		    consumeCatchHeader();  
 			break;
  
-    case 89 : if (DEBUG) { System.out.println("ImportDeclarations ::= ImportDeclarations..."); }  //$NON-NLS-1$
+    case 88 : if (DEBUG) { System.out.println("CatchFormalParameter ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+		    consumeCatchFormalParameter(false);  
+			break;
+ 
+    case 89 : if (DEBUG) { System.out.println("CatchFormalParameter ::= Modifiersopt Type ELLIPSIS..."); }  //$NON-NLS-1$
+		    consumeCatchFormalParameter(true);  
+			break;
+ 
+    case 91 : if (DEBUG) { System.out.println("ImportDeclarations ::= ImportDeclarations..."); }  //$NON-NLS-1$
 		    consumeImportDeclarations();  
 			break;
  
-    case 91 : if (DEBUG) { System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration"); }  //$NON-NLS-1$
+    case 93 : if (DEBUG) { System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration"); }  //$NON-NLS-1$
 		    consumeTypeDeclarations();  
 			break;
  
-    case 92 : if (DEBUG) { System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON"); }  //$NON-NLS-1$
+    case 94 : if (DEBUG) { System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON"); }  //$NON-NLS-1$
 		     consumePackageDeclaration();  
 			break;
  
-    case 93 : if (DEBUG) { System.out.println("PackageDeclarationName ::= Modifiers package..."); }  //$NON-NLS-1$
+    case 95 : if (DEBUG) { System.out.println("PackageDeclarationName ::= Modifiers package..."); }  //$NON-NLS-1$
 		     consumePackageDeclarationNameWithModifiers();  
 			break;
  
-    case 94 : if (DEBUG) { System.out.println("PackageDeclarationName ::= PackageComment package Name"); }  //$NON-NLS-1$
+    case 96 : if (DEBUG) { System.out.println("PackageDeclarationName ::= PackageComment package Name"); }  //$NON-NLS-1$
 		     consumePackageDeclarationName();  
 			break;
  
-    case 95 : if (DEBUG) { System.out.println("PackageComment ::="); }  //$NON-NLS-1$
+    case 97 : if (DEBUG) { System.out.println("PackageComment ::="); }  //$NON-NLS-1$
 		     consumePackageComment();  
 			break;
  
-    case 100 : if (DEBUG) { System.out.println("SingleTypeImportDeclaration ::=..."); }  //$NON-NLS-1$
+    case 102 : if (DEBUG) { System.out.println("SingleTypeImportDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 101 : if (DEBUG) { System.out.println("SingleTypeImportDeclarationName ::= import Name"); }  //$NON-NLS-1$
+    case 103 : if (DEBUG) { System.out.println("SingleTypeImportDeclarationName ::= import Name"); }  //$NON-NLS-1$
 		    consumeSingleTypeImportDeclarationName();  
 			break;
  
-    case 102 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
+    case 104 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 103 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT..."); }  //$NON-NLS-1$
+    case 105 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT..."); }  //$NON-NLS-1$
 		    consumeTypeImportOnDemandDeclarationName();  
 			break;
  
-     case 106 : if (DEBUG) { System.out.println("TypeDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
+     case 108 : if (DEBUG) { System.out.println("TypeDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyTypeDeclaration();  
 			break;
  
-    case 110 : if (DEBUG) { System.out.println("Modifiers ::= Modifiers Modifier"); }  //$NON-NLS-1$
+    case 112 : if (DEBUG) { System.out.println("Modifiers ::= Modifiers Modifier"); }  //$NON-NLS-1$
 		    consumeModifiers2();  
 			break;
  
-    case 122 : if (DEBUG) { System.out.println("Modifier ::= Annotation"); }  //$NON-NLS-1$
+    case 124 : if (DEBUG) { System.out.println("Modifier ::= Annotation"); }  //$NON-NLS-1$
 		    consumeAnnotationAsModifier();  
 			break;
  
-    case 123 : if (DEBUG) { System.out.println("ClassDeclaration ::= ClassHeader ClassBody"); }  //$NON-NLS-1$
+    case 125 : if (DEBUG) { System.out.println("ClassDeclaration ::= ClassHeader ClassBody"); }  //$NON-NLS-1$
 		    consumeClassDeclaration();  
 			break;
  
-    case 124 : if (DEBUG) { System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt..."); }  //$NON-NLS-1$
+    case 126 : if (DEBUG) { System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt..."); }  //$NON-NLS-1$
 		    consumeClassHeader();  
 			break;
  
-    case 125 : if (DEBUG) { System.out.println("ClassHeaderName ::= ClassHeaderName1 TypeParameters"); }  //$NON-NLS-1$
+    case 127 : if (DEBUG) { System.out.println("ClassHeaderName ::= ClassHeaderName1 TypeParameters"); }  //$NON-NLS-1$
 		    consumeTypeHeaderNameWithTypeParameters();  
 			break;
  
-    case 127 : if (DEBUG) { System.out.println("ClassHeaderName1 ::= Modifiersopt class Identifier"); }  //$NON-NLS-1$
+    case 129 : if (DEBUG) { System.out.println("ClassHeaderName1 ::= Modifiersopt class Identifier"); }  //$NON-NLS-1$
 		    consumeClassHeaderName1();  
 			break;
  
-    case 128 : if (DEBUG) { System.out.println("ClassHeaderExtends ::= extends ClassType"); }  //$NON-NLS-1$
+    case 130 : if (DEBUG) { System.out.println("ClassHeaderExtends ::= extends ClassType"); }  //$NON-NLS-1$
 		    consumeClassHeaderExtends();  
 			break;
  
-    case 129 : if (DEBUG) { System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList"); }  //$NON-NLS-1$
+    case 131 : if (DEBUG) { System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList"); }  //$NON-NLS-1$
 		    consumeClassHeaderImplements();  
 			break;
  
-    case 131 : if (DEBUG) { System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA..."); }  //$NON-NLS-1$
+    case 133 : if (DEBUG) { System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA..."); }  //$NON-NLS-1$
 		    consumeInterfaceTypeList();  
 			break;
  
-    case 132 : if (DEBUG) { System.out.println("InterfaceType ::= ClassOrInterfaceType"); }  //$NON-NLS-1$
+    case 134 : if (DEBUG) { System.out.println("InterfaceType ::= ClassOrInterfaceType"); }  //$NON-NLS-1$
 		    consumeInterfaceType();  
 			break;
  
-    case 135 : if (DEBUG) { System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations..."); }  //$NON-NLS-1$
+    case 137 : if (DEBUG) { System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclarations();  
 			break;
  
-    case 139 : if (DEBUG) { System.out.println("ClassBodyDeclaration ::= Diet NestedMethod..."); }  //$NON-NLS-1$
+    case 141 : if (DEBUG) { System.out.println("ClassBodyDeclaration ::= Diet NestedMethod..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclaration();  
 			break;
  
-    case 140 : if (DEBUG) { System.out.println("Diet ::="); }  //$NON-NLS-1$
+    case 142 : if (DEBUG) { System.out.println("Diet ::="); }  //$NON-NLS-1$
 		    consumeDiet();  
 			break;
 
-    case 141 : if (DEBUG) { System.out.println("Initializer ::= Diet NestedMethod CreateInitializer..."); }  //$NON-NLS-1$
+    case 143 : if (DEBUG) { System.out.println("Initializer ::= Diet NestedMethod CreateInitializer..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclaration();  
 			break;
  
-    case 142 : if (DEBUG) { System.out.println("CreateInitializer ::="); }  //$NON-NLS-1$
+    case 144 : if (DEBUG) { System.out.println("CreateInitializer ::="); }  //$NON-NLS-1$
 		    consumeCreateInitializer();  
 			break;
 
-    case 149 : if (DEBUG) { System.out.println("ClassMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 151 : if (DEBUG) { System.out.println("ClassMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyTypeDeclaration();  
 			break;
 
-    case 152 : if (DEBUG) { System.out.println("FieldDeclaration ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 154 : if (DEBUG) { System.out.println("FieldDeclaration ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeFieldDeclaration();  
 			break;
  
-    case 154 : if (DEBUG) { System.out.println("VariableDeclarators ::= VariableDeclarators COMMA..."); }  //$NON-NLS-1$
+    case 156 : if (DEBUG) { System.out.println("VariableDeclarators ::= VariableDeclarators COMMA..."); }  //$NON-NLS-1$
 		    consumeVariableDeclarators();  
 			break;
  
-    case 157 : if (DEBUG) { System.out.println("EnterVariable ::="); }  //$NON-NLS-1$
+    case 159 : if (DEBUG) { System.out.println("EnterVariable ::="); }  //$NON-NLS-1$
 		    consumeEnterVariable();  
 			break;
  
-    case 158 : if (DEBUG) { System.out.println("ExitVariableWithInitialization ::="); }  //$NON-NLS-1$
+    case 160 : if (DEBUG) { System.out.println("ExitVariableWithInitialization ::="); }  //$NON-NLS-1$
 		    consumeExitVariableWithInitialization();  
 			break;
  
-    case 159 : if (DEBUG) { System.out.println("ExitVariableWithoutInitialization ::="); }  //$NON-NLS-1$
+    case 161 : if (DEBUG) { System.out.println("ExitVariableWithoutInitialization ::="); }  //$NON-NLS-1$
 		    consumeExitVariableWithoutInitialization();  
 			break;
  
-    case 160 : if (DEBUG) { System.out.println("ForceNoDiet ::="); }  //$NON-NLS-1$
+    case 162 : if (DEBUG) { System.out.println("ForceNoDiet ::="); }  //$NON-NLS-1$
 		    consumeForceNoDiet();  
 			break;
  
-    case 161 : if (DEBUG) { System.out.println("RestoreDiet ::="); }  //$NON-NLS-1$
+    case 163 : if (DEBUG) { System.out.println("RestoreDiet ::="); }  //$NON-NLS-1$
 		    consumeRestoreDiet();  
 			break;
  
-    case 166 : if (DEBUG) { System.out.println("MethodDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
+    case 168 : if (DEBUG) { System.out.println("MethodDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
 		    // set to true to consume a method with a body
   consumeMethodDeclaration(true);   
 			break;
  
-    case 167 : if (DEBUG) { System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON"); }  //$NON-NLS-1$
+    case 169 : if (DEBUG) { System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON"); }  //$NON-NLS-1$
 		    // set to false to consume a method without body
   consumeMethodDeclaration(false);  
 			break;
  
-    case 168 : if (DEBUG) { System.out.println("MethodHeader ::= MethodHeaderName FormalParameterListopt"); }  //$NON-NLS-1$
+    case 170 : if (DEBUG) { System.out.println("MethodHeader ::= MethodHeaderName FormalParameterListopt"); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
-    case 169 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt TypeParameters Type..."); }  //$NON-NLS-1$
+    case 171 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt TypeParameters Type..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderNameWithTypeParameters(false);  
 			break;
  
-    case 170 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN"); }  //$NON-NLS-1$
+    case 172 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN"); }  //$NON-NLS-1$
 		    consumeMethodHeaderName(false);  
 			break;
  
-    case 171 : if (DEBUG) { System.out.println("MethodHeaderRightParen ::= RPAREN"); }  //$NON-NLS-1$
+    case 173 : if (DEBUG) { System.out.println("MethodHeaderRightParen ::= RPAREN"); }  //$NON-NLS-1$
 		    consumeMethodHeaderRightParen();  
 			break;
  
-    case 172 : if (DEBUG) { System.out.println("MethodHeaderExtendedDims ::= Dimsopt"); }  //$NON-NLS-1$
+    case 174 : if (DEBUG) { System.out.println("MethodHeaderExtendedDims ::= Dimsopt"); }  //$NON-NLS-1$
 		    consumeMethodHeaderExtendedDims();  
 			break;
  
-    case 173 : if (DEBUG) { System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList"); }  //$NON-NLS-1$
+    case 175 : if (DEBUG) { System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList"); }  //$NON-NLS-1$
 		    consumeMethodHeaderThrowsClause();  
 			break;
  
-    case 174 : if (DEBUG) { System.out.println("ConstructorHeader ::= ConstructorHeaderName..."); }  //$NON-NLS-1$
+    case 176 : if (DEBUG) { System.out.println("ConstructorHeader ::= ConstructorHeaderName..."); }  //$NON-NLS-1$
 		    consumeConstructorHeader();  
 			break;
  
-    case 175 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt TypeParameters..."); }  //$NON-NLS-1$
+    case 177 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt TypeParameters..."); }  //$NON-NLS-1$
 		    consumeConstructorHeaderNameWithTypeParameters();  
 			break;
  
-    case 176 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN"); }  //$NON-NLS-1$
+    case 178 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN"); }  //$NON-NLS-1$
 		    consumeConstructorHeaderName();  
 			break;
  
-    case 178 : if (DEBUG) { System.out.println("FormalParameterList ::= FormalParameterList COMMA..."); }  //$NON-NLS-1$
+    case 180 : if (DEBUG) { System.out.println("FormalParameterList ::= FormalParameterList COMMA..."); }  //$NON-NLS-1$
 		    consumeFormalParameterList();  
 			break;
  
-    case 179 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 181 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeFormalParameter(false);  
 			break;
  
-    case 180 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type ELLIPSIS..."); }  //$NON-NLS-1$
+    case 182 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type ELLIPSIS..."); }  //$NON-NLS-1$
 		    consumeFormalParameter(true);  
 			break;
  
-    case 182 : if (DEBUG) { System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt"); }  //$NON-NLS-1$
+    case 184 : if (DEBUG) { System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt"); }  //$NON-NLS-1$
 		    consumeClassTypeList();  
 			break;
  
-    case 183 : if (DEBUG) { System.out.println("ClassTypeElt ::= ClassType"); }  //$NON-NLS-1$
+    case 185 : if (DEBUG) { System.out.println("ClassTypeElt ::= ClassType"); }  //$NON-NLS-1$
 		    consumeClassTypeElt();  
 			break;
  
-    case 184 : if (DEBUG) { System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt..."); }  //$NON-NLS-1$
+    case 186 : if (DEBUG) { System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt..."); }  //$NON-NLS-1$
 		    consumeMethodBody();  
 			break;
  
-    case 185 : if (DEBUG) { System.out.println("NestedMethod ::="); }  //$NON-NLS-1$
+    case 187 : if (DEBUG) { System.out.println("NestedMethod ::="); }  //$NON-NLS-1$
 		    consumeNestedMethod();  
 			break;
  
-    case 186 : if (DEBUG) { System.out.println("StaticInitializer ::= StaticOnly Block"); }  //$NON-NLS-1$
+    case 188 : if (DEBUG) { System.out.println("StaticInitializer ::= StaticOnly Block"); }  //$NON-NLS-1$
 		    consumeStaticInitializer();  
 			break;
 
-    case 187 : if (DEBUG) { System.out.println("StaticOnly ::= static"); }  //$NON-NLS-1$
+    case 189 : if (DEBUG) { System.out.println("StaticOnly ::= static"); }  //$NON-NLS-1$
 		    consumeStaticOnly();  
 			break;
  
-    case 188 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader MethodBody"); }  //$NON-NLS-1$
+    case 190 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader MethodBody"); }  //$NON-NLS-1$
 		    consumeConstructorDeclaration() ;  
 			break;
  
-    case 189 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON"); }  //$NON-NLS-1$
+    case 191 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON"); }  //$NON-NLS-1$
 		    consumeInvalidConstructorDeclaration() ;  
 			break;
  
-    case 190 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= this LPAREN..."); }  //$NON-NLS-1$
+    case 192 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= this LPAREN..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(0, THIS_CALL);  
 			break;
  
-    case 191 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments this"); }  //$NON-NLS-1$
+    case 193 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments this"); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(0,THIS_CALL);  
 			break;
  
-    case 192 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= super LPAREN..."); }  //$NON-NLS-1$
+    case 194 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= super LPAREN..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(0,SUPER_CALL);  
 			break;
  
-    case 193 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 195 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(0,SUPER_CALL);  
 			break;
  
-    case 194 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT super..."); }  //$NON-NLS-1$
+    case 196 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT super..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(1, SUPER_CALL);  
 			break;
  
-    case 195 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
+    case 197 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(1, SUPER_CALL);  
 			break;
  
-    case 196 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN"); }  //$NON-NLS-1$
+    case 198 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN"); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(2, SUPER_CALL);  
 			break;
  
-    case 197 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
+    case 199 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(2, SUPER_CALL);  
 			break;
  
-    case 198 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT this..."); }  //$NON-NLS-1$
+    case 200 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT this..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(1, THIS_CALL);  
 			break;
  
-    case 199 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
+    case 201 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(1, THIS_CALL);  
 			break;
  
-    case 200 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN"); }  //$NON-NLS-1$
+    case 202 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN"); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(2, THIS_CALL);  
 			break;
  
-    case 201 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
+    case 203 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(2, THIS_CALL);  
 			break;
  
-    case 202 : if (DEBUG) { System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody"); }  //$NON-NLS-1$
+    case 204 : if (DEBUG) { System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody"); }  //$NON-NLS-1$
 		    consumeInterfaceDeclaration();  
 			break;
  
-    case 203 : if (DEBUG) { System.out.println("InterfaceHeader ::= InterfaceHeaderName..."); }  //$NON-NLS-1$
+    case 205 : if (DEBUG) { System.out.println("InterfaceHeader ::= InterfaceHeaderName..."); }  //$NON-NLS-1$
 		    consumeInterfaceHeader();  
 			break;
  
-    case 204 : if (DEBUG) { System.out.println("InterfaceHeaderName ::= InterfaceHeaderName1..."); }  //$NON-NLS-1$
+    case 206 : if (DEBUG) { System.out.println("InterfaceHeaderName ::= InterfaceHeaderName1..."); }  //$NON-NLS-1$
 		    consumeTypeHeaderNameWithTypeParameters();  
 			break;
  
-    case 206 : if (DEBUG) { System.out.println("InterfaceHeaderName1 ::= Modifiersopt interface..."); }  //$NON-NLS-1$
+    case 208 : if (DEBUG) { System.out.println("InterfaceHeaderName1 ::= Modifiersopt interface..."); }  //$NON-NLS-1$
 		    consumeInterfaceHeaderName1();  
 			break;
  
-    case 207 : if (DEBUG) { System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList"); }  //$NON-NLS-1$
+    case 209 : if (DEBUG) { System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList"); }  //$NON-NLS-1$
 		    consumeInterfaceHeaderExtends();  
 			break;
  
-    case 210 : if (DEBUG) { System.out.println("InterfaceMemberDeclarations ::=..."); }  //$NON-NLS-1$
+    case 212 : if (DEBUG) { System.out.println("InterfaceMemberDeclarations ::=..."); }  //$NON-NLS-1$
 		    consumeInterfaceMemberDeclarations();  
 			break;
  
-    case 211 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 213 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyTypeDeclaration();  
 			break;
  
-    case 213 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
+    case 215 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
 		    consumeInvalidMethodDeclaration();  
 			break;
  
-    case 214 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
+    case 216 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
 		    consumeInvalidConstructorDeclaration(true);   
 			break;
  
-    case 215 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
+    case 217 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
 		    consumeInvalidConstructorDeclaration(false);   
 			break;
  
-    case 223 : if (DEBUG) { System.out.println("PushLeftBrace ::="); }  //$NON-NLS-1$
+    case 228 : if (DEBUG) { System.out.println("PushLeftBrace ::="); }  //$NON-NLS-1$
 		    consumePushLeftBrace();  
 			break;
  
-    case 224 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace ,opt RBRACE"); }  //$NON-NLS-1$
+    case 229 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace ,opt RBRACE"); }  //$NON-NLS-1$
 		    consumeEmptyArrayInitializer();  
 			break;
  
-    case 225 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
+    case 230 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
 		    consumeArrayInitializer();  
 			break;
  
-    case 226 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
+    case 231 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
 		    consumeArrayInitializer();  
 			break;
  
-    case 228 : if (DEBUG) { System.out.println("VariableInitializers ::= VariableInitializers COMMA..."); }  //$NON-NLS-1$
+    case 233 : if (DEBUG) { System.out.println("VariableInitializers ::= VariableInitializers COMMA..."); }  //$NON-NLS-1$
 		    consumeVariableInitializers();  
 			break;
  
-    case 229 : if (DEBUG) { System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE"); }  //$NON-NLS-1$
+    case 234 : if (DEBUG) { System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE"); }  //$NON-NLS-1$
 		    consumeBlock();  
 			break;
  
-    case 230 : if (DEBUG) { System.out.println("OpenBlock ::="); }  //$NON-NLS-1$
+    case 235 : if (DEBUG) { System.out.println("OpenBlock ::="); }  //$NON-NLS-1$
 		    consumeOpenBlock() ;  
 			break;
  
-    case 232 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatements BlockStatement"); }  //$NON-NLS-1$
+    case 237 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatements BlockStatement"); }  //$NON-NLS-1$
 		    consumeBlockStatements() ;  
 			break;
  
-    case 236 : if (DEBUG) { System.out.println("BlockStatement ::= InterfaceDeclaration"); }  //$NON-NLS-1$
+    case 241 : if (DEBUG) { System.out.println("BlockStatement ::= InterfaceDeclaration"); }  //$NON-NLS-1$
 		    consumeInvalidInterfaceDeclaration();  
 			break;
  
-    case 237 : if (DEBUG) { System.out.println("BlockStatement ::= AnnotationTypeDeclaration"); }  //$NON-NLS-1$
+    case 242 : if (DEBUG) { System.out.println("BlockStatement ::= AnnotationTypeDeclaration"); }  //$NON-NLS-1$
 		    consumeInvalidAnnotationTypeDeclaration();  
 			break;
  
-    case 238 : if (DEBUG) { System.out.println("BlockStatement ::= EnumDeclaration"); }  //$NON-NLS-1$
+    case 243 : if (DEBUG) { System.out.println("BlockStatement ::= EnumDeclaration"); }  //$NON-NLS-1$
 		    consumeInvalidEnumDeclaration();  
 			break;
  
-    case 239 : if (DEBUG) { System.out.println("LocalVariableDeclarationStatement ::=..."); }  //$NON-NLS-1$
+    case 244 : if (DEBUG) { System.out.println("LocalVariableDeclarationStatement ::=..."); }  //$NON-NLS-1$
 		    consumeLocalVariableDeclarationStatement();  
 			break;
  
-    case 240 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Type PushModifiers..."); }  //$NON-NLS-1$
+    case 245 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Type PushModifiers..."); }  //$NON-NLS-1$
 		    consumeLocalVariableDeclaration();  
 			break;
  
-    case 241 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Modifiers Type..."); }  //$NON-NLS-1$
+    case 246 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Modifiers Type..."); }  //$NON-NLS-1$
 		    consumeLocalVariableDeclaration();  
 			break;
  
-    case 242 : if (DEBUG) { System.out.println("PushModifiers ::="); }  //$NON-NLS-1$
+    case 247 : if (DEBUG) { System.out.println("PushModifiers ::="); }  //$NON-NLS-1$
 		    consumePushModifiers();  
 			break;
  
-    case 243 : if (DEBUG) { System.out.println("PushModifiersForHeader ::="); }  //$NON-NLS-1$
+    case 248 : if (DEBUG) { System.out.println("PushModifiersForHeader ::="); }  //$NON-NLS-1$
 		    consumePushModifiersForHeader();  
 			break;
  
-    case 244 : if (DEBUG) { System.out.println("PushRealModifiers ::="); }  //$NON-NLS-1$
+    case 249 : if (DEBUG) { System.out.println("PushRealModifiers ::="); }  //$NON-NLS-1$
 		    consumePushRealModifiers();  
 			break;
  
-    case 270 : if (DEBUG) { System.out.println("EmptyStatement ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 275 : if (DEBUG) { System.out.println("EmptyStatement ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyStatement();  
 			break;
  
-    case 271 : if (DEBUG) { System.out.println("LabeledStatement ::= Label COLON Statement"); }  //$NON-NLS-1$
+    case 276 : if (DEBUG) { System.out.println("LabeledStatement ::= Label COLON Statement"); }  //$NON-NLS-1$
 		    consumeStatementLabel() ;  
 			break;
  
-    case 272 : if (DEBUG) { System.out.println("LabeledStatementNoShortIf ::= Label COLON..."); }  //$NON-NLS-1$
+    case 277 : if (DEBUG) { System.out.println("LabeledStatementNoShortIf ::= Label COLON..."); }  //$NON-NLS-1$
 		    consumeStatementLabel() ;  
 			break;
  
-    case 273 : if (DEBUG) { System.out.println("Label ::= Identifier"); }  //$NON-NLS-1$
+    case 278 : if (DEBUG) { System.out.println("Label ::= Identifier"); }  //$NON-NLS-1$
 		    consumeLabel() ;  
 			break;
  
-     case 274 : if (DEBUG) { System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON"); }  //$NON-NLS-1$
+     case 279 : if (DEBUG) { System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON"); }  //$NON-NLS-1$
 		    consumeExpressionStatement();  
 			break;
  
-    case 283 : if (DEBUG) { System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 288 : if (DEBUG) { System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementIfNoElse();  
 			break;
  
-    case 284 : if (DEBUG) { System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 289 : if (DEBUG) { System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementIfWithElse();  
 			break;
  
-    case 285 : if (DEBUG) { System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression..."); }  //$NON-NLS-1$
+    case 290 : if (DEBUG) { System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression..."); }  //$NON-NLS-1$
 		    consumeStatementIfWithElse();  
 			break;
  
-    case 286 : if (DEBUG) { System.out.println("SwitchStatement ::= switch LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 291 : if (DEBUG) { System.out.println("SwitchStatement ::= switch LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementSwitch() ;  
 			break;
  
-    case 287 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE RBRACE"); }  //$NON-NLS-1$
+    case 292 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE RBRACE"); }  //$NON-NLS-1$
 		    consumeEmptySwitchBlock() ;  
 			break;
  
-    case 290 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements..."); }  //$NON-NLS-1$
+    case 295 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements..."); }  //$NON-NLS-1$
 		    consumeSwitchBlock() ;  
 			break;
  
-    case 292 : if (DEBUG) { System.out.println("SwitchBlockStatements ::= SwitchBlockStatements..."); }  //$NON-NLS-1$
+    case 297 : if (DEBUG) { System.out.println("SwitchBlockStatements ::= SwitchBlockStatements..."); }  //$NON-NLS-1$
 		    consumeSwitchBlockStatements() ;  
 			break;
  
-    case 293 : if (DEBUG) { System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements"); }  //$NON-NLS-1$
+    case 298 : if (DEBUG) { System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements"); }  //$NON-NLS-1$
 		    consumeSwitchBlockStatement() ;  
 			break;
  
-    case 295 : if (DEBUG) { System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel"); }  //$NON-NLS-1$
+    case 300 : if (DEBUG) { System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel"); }  //$NON-NLS-1$
 		    consumeSwitchLabels() ;  
 			break;
  
-     case 296 : if (DEBUG) { System.out.println("SwitchLabel ::= case ConstantExpression COLON"); }  //$NON-NLS-1$
+     case 301 : if (DEBUG) { System.out.println("SwitchLabel ::= case ConstantExpression COLON"); }  //$NON-NLS-1$
 		    consumeCaseLabel();  
 			break;
  
-     case 297 : if (DEBUG) { System.out.println("SwitchLabel ::= default COLON"); }  //$NON-NLS-1$
+     case 302 : if (DEBUG) { System.out.println("SwitchLabel ::= default COLON"); }  //$NON-NLS-1$
 		    consumeDefaultLabel();  
 			break;
  
-    case 298 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 303 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementWhile() ;  
 			break;
  
-    case 299 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); }  //$NON-NLS-1$
+    case 304 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); }  //$NON-NLS-1$
 		    consumeStatementWhile() ;  
 			break;
  
-    case 300 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); }  //$NON-NLS-1$
+    case 305 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); }  //$NON-NLS-1$
 		    consumeStatementDo() ;  
 			break;
  
-    case 301 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); }  //$NON-NLS-1$
+    case 306 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); }  //$NON-NLS-1$
 		    consumeStatementFor() ;  
 			break;
  
-    case 302 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); }  //$NON-NLS-1$
+    case 307 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); }  //$NON-NLS-1$
 		    consumeStatementFor() ;  
 			break;
  
-    case 303 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); }  //$NON-NLS-1$
+    case 308 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); }  //$NON-NLS-1$
 		    consumeForInit() ;  
 			break;
  
-    case 307 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); }  //$NON-NLS-1$
+    case 312 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); }  //$NON-NLS-1$
 		    consumeStatementExpressionList() ;  
 			break;
  
-    case 308 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); }  //$NON-NLS-1$
+    case 313 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); }  //$NON-NLS-1$
 		    consumeSimpleAssertStatement() ;  
 			break;
  
-    case 309 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); }  //$NON-NLS-1$
+    case 314 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); }  //$NON-NLS-1$
 		    consumeAssertStatement() ;  
 			break;
  
-    case 310 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); }  //$NON-NLS-1$
+    case 315 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementBreak() ;  
 			break;
  
-    case 311 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); }  //$NON-NLS-1$
+    case 316 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementBreakWithLabel() ;  
 			break;
  
-    case 312 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); }  //$NON-NLS-1$
+    case 317 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementContinue() ;  
 			break;
  
-    case 313 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); }  //$NON-NLS-1$
+    case 318 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementContinueWithLabel() ;  
 			break;
  
-    case 314 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); }  //$NON-NLS-1$
+    case 319 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementReturn() ;  
 			break;
  
-    case 315 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); }  //$NON-NLS-1$
+    case 320 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementThrow();  
 			break;
  
-    case 316 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); }  //$NON-NLS-1$
+    case 321 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementSynchronized();  
 			break;
  
-    case 317 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); }  //$NON-NLS-1$
+    case 322 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); }  //$NON-NLS-1$
 		    consumeOnlySynchronized();  
 			break;
  
-    case 318 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); }  //$NON-NLS-1$
+    case 323 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); }  //$NON-NLS-1$
 		    consumeStatementTry(false);  
 			break;
  
-    case 319 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); }  //$NON-NLS-1$
+    case 324 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); }  //$NON-NLS-1$
 		    consumeStatementTry(true);  
 			break;
  
-    case 321 : if (DEBUG) { System.out.println("ExitTryBlock ::="); }  //$NON-NLS-1$
+    case 326 : if (DEBUG) { System.out.println("ExitTryBlock ::="); }  //$NON-NLS-1$
 		    consumeExitTryBlock();  
 			break;
  
-    case 323 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); }  //$NON-NLS-1$
+    case 328 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); }  //$NON-NLS-1$
 		    consumeCatches();  
 			break;
  
-    case 324 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN FormalParameter RPAREN..."); }  //$NON-NLS-1$
+    case 329 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN CatchFormalParameter RPAREN"); }  //$NON-NLS-1$
 		    consumeStatementCatch() ;  
 			break;
  
-    case 326 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); }  //$NON-NLS-1$
+    case 331 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); }  //$NON-NLS-1$
 		    consumeLeftParen();  
 			break;
  
-    case 327 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); }  //$NON-NLS-1$
+    case 332 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); }  //$NON-NLS-1$
 		    consumeRightParen();  
 			break;
  
-    case 332 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); }  //$NON-NLS-1$
+    case 337 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayThis();  
 			break;
  
-    case 333 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); }  //$NON-NLS-1$
+    case 338 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArray();  
 			break;
  
-    case 334 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); }  //$NON-NLS-1$
+    case 339 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayWithName();  
 			break;
  
-    case 337 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); }  //$NON-NLS-1$
+    case 342 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayNameThis();  
 			break;
  
-    case 338 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT super"); }  //$NON-NLS-1$
+    case 343 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT super"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayNameSuper();  
 			break;
  
-    case 339 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); }  //$NON-NLS-1$
+    case 344 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayName();  
 			break;
  
-    case 340 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); }  //$NON-NLS-1$
+    case 345 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayArrayType();  
 			break;
  
-    case 341 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); }  //$NON-NLS-1$
+    case 346 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayPrimitiveArrayType();  
 			break;
  
-    case 342 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); }  //$NON-NLS-1$
+    case 347 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayPrimitiveType();  
 			break;
  
-    case 345 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); }  //$NON-NLS-1$
+    case 350 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); }  //$NON-NLS-1$
 		    consumeAllocationHeader();  
 			break;
  
-    case 346 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); }  //$NON-NLS-1$
+    case 351 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionWithTypeArguments();  
 			break;
  
-    case 347 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType LPAREN"); }  //$NON-NLS-1$
+    case 352 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType LPAREN"); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpression();  
 			break;
  
-    case 348 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
+    case 353 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ;  
 			break;
  
-    case 349 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
+    case 354 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualified() ;  
 			break;
  
-    case 350 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
+    case 355 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualified() ;  
 			break;
  
-    case 351 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
+    case 356 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ;  
 			break;
  
-    case 352 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT"); }  //$NON-NLS-1$
+    case 357 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT"); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionName() ;  
 			break;
  
-    case 353 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); }  //$NON-NLS-1$
+    case 358 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); }  //$NON-NLS-1$
 		    consumeClassBodyopt();  
 			break;
  
-    case 355 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
+    case 360 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
 		    consumeEnterAnonymousClassBody(false);  
 			break;
  
-    case 356 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); }  //$NON-NLS-1$
+    case 361 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); }  //$NON-NLS-1$
 		    consumeClassBodyopt();  
 			break;
  
-    case 358 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
+    case 363 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
 		    consumeEnterAnonymousClassBody(true);  
 			break;
  
-    case 360 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); }  //$NON-NLS-1$
+    case 365 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); }  //$NON-NLS-1$
 		    consumeArgumentList();  
 			break;
  
-    case 361 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); }  //$NON-NLS-1$
+    case 366 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); }  //$NON-NLS-1$
 		    consumeArrayCreationHeader();  
 			break;
  
-    case 362 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); }  //$NON-NLS-1$
+    case 367 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); }  //$NON-NLS-1$
 		    consumeArrayCreationHeader();  
 			break;
  
-    case 363 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); }  //$NON-NLS-1$
+    case 368 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); }  //$NON-NLS-1$
 		    consumeArrayCreationExpressionWithoutInitializer();  
 			break;
  
-    case 364 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); }  //$NON-NLS-1$
+    case 369 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); }  //$NON-NLS-1$
 		    consumeArrayCreationExpressionWithInitializer();  
 			break;
  
-    case 365 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); }  //$NON-NLS-1$
+    case 370 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); }  //$NON-NLS-1$
 		    consumeArrayCreationExpressionWithoutInitializer();  
 			break;
  
-    case 366 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); }  //$NON-NLS-1$
+    case 371 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); }  //$NON-NLS-1$
 		    consumeArrayCreationExpressionWithInitializer();  
 			break;
  
-    case 368 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); }  //$NON-NLS-1$
+    case 373 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); }  //$NON-NLS-1$
 		    consumeDimWithOrWithOutExprs();  
 			break;
  
-     case 370 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= LBRACKET RBRACKET"); }  //$NON-NLS-1$
+     case 375 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= LBRACKET RBRACKET"); }  //$NON-NLS-1$
 		    consumeDimWithOrWithOutExpr();  
 			break;
  
-     case 371 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); }  //$NON-NLS-1$
+     case 376 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); }  //$NON-NLS-1$
 		    consumeDims();  
 			break;
  
-     case 374 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); }  //$NON-NLS-1$
+     case 379 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); }  //$NON-NLS-1$
 		    consumeOneDimLoop();  
 			break;
  
-    case 375 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); }  //$NON-NLS-1$
+    case 380 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); }  //$NON-NLS-1$
 		    consumeFieldAccess(false);  
 			break;
  
-    case 376 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); }  //$NON-NLS-1$
+    case 381 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); }  //$NON-NLS-1$
 		    consumeFieldAccess(true);  
 			break;
  
-    case 377 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
+    case 382 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
 		    consumeMethodInvocationName();  
 			break;
  
-    case 378 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 383 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationNameWithTypeArguments();  
 			break;
  
-    case 379 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 384 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationPrimaryWithTypeArguments();  
 			break;
  
-    case 380 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); }  //$NON-NLS-1$
+    case 385 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationPrimary();  
 			break;
  
-    case 381 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 386 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationSuperWithTypeArguments();  
 			break;
  
-    case 382 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); }  //$NON-NLS-1$
+    case 387 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationSuper();  
 			break;
  
-    case 383 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); }  //$NON-NLS-1$
+    case 388 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); }  //$NON-NLS-1$
 		    consumeArrayAccess(true);  
 			break;
  
-    case 384 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); }  //$NON-NLS-1$
+    case 389 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); }  //$NON-NLS-1$
 		    consumeArrayAccess(false);  
 			break;
  
-    case 385 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); }  //$NON-NLS-1$
+    case 390 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); }  //$NON-NLS-1$
 		    consumeArrayAccess(false);  
 			break;
  
-    case 387 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); }  //$NON-NLS-1$
+    case 392 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); }  //$NON-NLS-1$
 		    consumePostfixExpression();  
 			break;
  
-    case 390 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); }  //$NON-NLS-1$
+    case 395 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS,true);  
 			break;
  
-    case 391 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); }  //$NON-NLS-1$
+    case 396 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS,true);  
 			break;
  
-    case 392 : if (DEBUG) { System.out.println("PushPosition ::="); }  //$NON-NLS-1$
+    case 397 : if (DEBUG) { System.out.println("PushPosition ::="); }  //$NON-NLS-1$
 		    consumePushPosition();  
 			break;
  
-    case 395 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
+    case 400 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 396 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
+    case 401 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 398 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); }  //$NON-NLS-1$
+    case 403 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS,false);  
 			break;
  
-    case 399 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); }  //$NON-NLS-1$
+    case 404 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS,false);  
 			break;
  
-    case 401 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); }  //$NON-NLS-1$
+    case 406 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.TWIDDLE);  
 			break;
  
-    case 402 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); }  //$NON-NLS-1$
+    case 407 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.NOT);  
 			break;
  
-    case 404 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); }  //$NON-NLS-1$
+    case 409 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithPrimitiveType();  
 			break;
  
-    case 405 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
+    case 410 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithGenericsArray();  
 			break;
  
-    case 406 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
+    case 411 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithQualifiedGenericsArray();  
 			break;
  
-    case 407 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); }  //$NON-NLS-1$
+    case 412 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); }  //$NON-NLS-1$
 		    consumeCastExpressionLL1();  
 			break;
  
-    case 408 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims PushRPAREN..."); }  //$NON-NLS-1$
+    case 413 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims PushRPAREN..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithNameArray();  
 			break;
  
-    case 409 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); }  //$NON-NLS-1$
+    case 414 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); }  //$NON-NLS-1$
 		    consumeOnlyTypeArgumentsForCastExpression();  
 			break;
  
-    case 410 : if (DEBUG) { System.out.println("InsideCastExpression ::="); }  //$NON-NLS-1$
+    case 415 : if (DEBUG) { System.out.println("InsideCastExpression ::="); }  //$NON-NLS-1$
 		    consumeInsideCastExpression();  
 			break;
  
-    case 411 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); }  //$NON-NLS-1$
+    case 416 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); }  //$NON-NLS-1$
 		    consumeInsideCastExpressionLL1();  
 			break;
  
-    case 412 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); }  //$NON-NLS-1$
+    case 417 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); }  //$NON-NLS-1$
 		    consumeInsideCastExpressionWithQualifiedGenerics();  
 			break;
  
-    case 414 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
+    case 419 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MULTIPLY);  
 			break;
  
-    case 415 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
+    case 420 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.DIVIDE);  
 			break;
  
-    case 416 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
+    case 421 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.REMAINDER);  
 			break;
  
-    case 418 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); }  //$NON-NLS-1$
+    case 423 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 419 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); }  //$NON-NLS-1$
+    case 424 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 421 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); }  //$NON-NLS-1$
+    case 426 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LEFT_SHIFT);  
 			break;
  
-    case 422 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); }  //$NON-NLS-1$
+    case 427 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.RIGHT_SHIFT);  
 			break;
  
-    case 423 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 428 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 425 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); }  //$NON-NLS-1$
+    case 430 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS);  
 			break;
  
-    case 426 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); }  //$NON-NLS-1$
+    case 431 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER);  
 			break;
  
-    case 427 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); }  //$NON-NLS-1$
+    case 432 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS_EQUAL);  
 			break;
  
-    case 428 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); }  //$NON-NLS-1$
+    case 433 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER_EQUAL);  
 			break;
  
-    case 430 : if (DEBUG) { System.out.println("InstanceofExpression ::= InstanceofExpression instanceof"); }  //$NON-NLS-1$
+    case 435 : if (DEBUG) { System.out.println("InstanceofExpression ::= InstanceofExpression instanceof"); }  //$NON-NLS-1$
 		    consumeInstanceOfExpression();  
 			break;
  
-    case 432 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); }  //$NON-NLS-1$
+    case 437 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.EQUAL_EQUAL);  
 			break;
  
-    case 433 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); }  //$NON-NLS-1$
+    case 438 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.NOT_EQUAL);  
 			break;
  
-    case 435 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); }  //$NON-NLS-1$
+    case 440 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND);  
 			break;
  
-    case 437 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); }  //$NON-NLS-1$
+    case 442 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.XOR);  
 			break;
  
-    case 439 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); }  //$NON-NLS-1$
+    case 444 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR);  
 			break;
  
-    case 441 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); }  //$NON-NLS-1$
+    case 446 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND_AND);  
 			break;
  
-    case 443 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
+    case 448 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR_OR);  
 			break;
  
-    case 445 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
+    case 450 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
 		    consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ;  
 			break;
  
-    case 448 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); }  //$NON-NLS-1$
+    case 453 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); }  //$NON-NLS-1$
 		    consumeAssignment();  
 			break;
  
-    case 450 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); }  //$NON-NLS-1$
+    case 455 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); }  //$NON-NLS-1$
 		    ignoreExpressionAssignment(); 
 			break;
  
-    case 451 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); }  //$NON-NLS-1$
+    case 456 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(EQUAL);  
 			break;
  
-    case 452 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); }  //$NON-NLS-1$
+    case 457 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(MULTIPLY);  
 			break;
  
-    case 453 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); }  //$NON-NLS-1$
+    case 458 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(DIVIDE);  
 			break;
  
-    case 454 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); }  //$NON-NLS-1$
+    case 459 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(REMAINDER);  
 			break;
  
-    case 455 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); }  //$NON-NLS-1$
+    case 460 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(PLUS);  
 			break;
  
-    case 456 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); }  //$NON-NLS-1$
+    case 461 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(MINUS);  
 			break;
  
-    case 457 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); }  //$NON-NLS-1$
+    case 462 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(LEFT_SHIFT);  
 			break;
  
-    case 458 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
+    case 463 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(RIGHT_SHIFT);  
 			break;
  
-    case 459 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
+    case 464 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 460 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); }  //$NON-NLS-1$
+    case 465 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(AND);  
 			break;
  
-    case 461 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); }  //$NON-NLS-1$
+    case 466 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(XOR);  
 			break;
  
-    case 462 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); }  //$NON-NLS-1$
+    case 467 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(OR);  
 			break;
  
-    case 466 : if (DEBUG) { System.out.println("Expressionopt ::="); }  //$NON-NLS-1$
+    case 471 : if (DEBUG) { System.out.println("Expressionopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyExpression();  
 			break;
  
-    case 471 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); }  //$NON-NLS-1$
+    case 476 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyClassBodyDeclarationsopt();  
 			break;
  
-    case 472 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
+    case 477 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclarationsopt();  
 			break;
  
-     case 473 : if (DEBUG) { System.out.println("Modifiersopt ::="); }  //$NON-NLS-1$
+     case 478 : if (DEBUG) { System.out.println("Modifiersopt ::="); }  //$NON-NLS-1$
 		    consumeDefaultModifiers();  
 			break;
  
-    case 474 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); }  //$NON-NLS-1$
+    case 479 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); }  //$NON-NLS-1$
 		    consumeModifiers();  
 			break;
  
-    case 475 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); }  //$NON-NLS-1$
+    case 480 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyBlockStatementsopt();  
 			break;
  
-     case 477 : if (DEBUG) { System.out.println("Dimsopt ::="); }  //$NON-NLS-1$
+     case 482 : if (DEBUG) { System.out.println("Dimsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyDimsopt();  
 			break;
  
-     case 479 : if (DEBUG) { System.out.println("ArgumentListopt ::="); }  //$NON-NLS-1$
+     case 484 : if (DEBUG) { System.out.println("ArgumentListopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyArgumentListopt();  
 			break;
  
-    case 483 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); }  //$NON-NLS-1$
+    case 488 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); }  //$NON-NLS-1$
 		    consumeFormalParameterListopt();  
 			break;
  
-     case 487 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); }  //$NON-NLS-1$
+     case 492 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyInterfaceMemberDeclarationsopt();  
 			break;
  
-     case 488 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
+     case 493 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
 		    consumeInterfaceMemberDeclarationsopt();  
 			break;
  
-    case 489 : if (DEBUG) { System.out.println("NestedType ::="); }  //$NON-NLS-1$
+    case 494 : if (DEBUG) { System.out.println("NestedType ::="); }  //$NON-NLS-1$
 		    consumeNestedType();  
 			break;
 
-     case 490 : if (DEBUG) { System.out.println("ForInitopt ::="); }  //$NON-NLS-1$
+     case 495 : if (DEBUG) { System.out.println("ForInitopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyForInitopt();  
 			break;
  
-     case 492 : if (DEBUG) { System.out.println("ForUpdateopt ::="); }  //$NON-NLS-1$
+     case 497 : if (DEBUG) { System.out.println("ForUpdateopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyForUpdateopt();  
 			break;
  
-     case 496 : if (DEBUG) { System.out.println("Catchesopt ::="); }  //$NON-NLS-1$
+     case 501 : if (DEBUG) { System.out.println("Catchesopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyCatchesopt();  
 			break;
  
-     case 498 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); }  //$NON-NLS-1$
+     case 503 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); }  //$NON-NLS-1$
 		    consumeEnumDeclaration();  
 			break;
  
-     case 499 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); }  //$NON-NLS-1$
+     case 504 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); }  //$NON-NLS-1$
 		    consumeEnumHeader();  
 			break;
  
-     case 500 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); }  //$NON-NLS-1$
+     case 505 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); }  //$NON-NLS-1$
 		    consumeEnumHeaderName();  
 			break;
  
-     case 501 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); }  //$NON-NLS-1$
+     case 506 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); }  //$NON-NLS-1$
 		    consumeEnumHeaderNameWithTypeParameters();  
 			break;
  
-     case 502 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); }  //$NON-NLS-1$
+     case 507 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); }  //$NON-NLS-1$
 		    consumeEnumBodyNoConstants();  
 			break;
  
-     case 503 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); }  //$NON-NLS-1$
+     case 508 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); }  //$NON-NLS-1$
 		    consumeEnumBodyNoConstants();  
 			break;
  
-     case 504 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); }  //$NON-NLS-1$
+     case 509 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); }  //$NON-NLS-1$
 		    consumeEnumBodyWithConstants();  
 			break;
  
-     case 505 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); }  //$NON-NLS-1$
+     case 510 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); }  //$NON-NLS-1$
 		    consumeEnumBodyWithConstants();  
 			break;
  
-    case 507 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); }  //$NON-NLS-1$
+    case 512 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); }  //$NON-NLS-1$
 		    consumeEnumConstants();  
 			break;
  
-    case 508 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); }  //$NON-NLS-1$
+    case 513 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); }  //$NON-NLS-1$
 		    consumeEnumConstantHeaderName();  
 			break;
  
-    case 509 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); }  //$NON-NLS-1$
+    case 514 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); }  //$NON-NLS-1$
 		    consumeEnumConstantHeader();  
 			break;
  
-    case 510 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); }  //$NON-NLS-1$
+    case 515 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); }  //$NON-NLS-1$
 		    consumeEnumConstantWithClassBody();  
 			break;
  
-    case 511 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); }  //$NON-NLS-1$
+    case 516 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); }  //$NON-NLS-1$
 		    consumeEnumConstantNoClassBody();  
 			break;
  
-    case 512 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
+    case 517 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
 		    consumeArguments();  
 			break;
  
-    case 513 : if (DEBUG) { System.out.println("Argumentsopt ::="); }  //$NON-NLS-1$
+    case 518 : if (DEBUG) { System.out.println("Argumentsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyArguments();  
 			break;
  
-    case 515 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); }  //$NON-NLS-1$
+    case 520 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); }  //$NON-NLS-1$
 		    consumeEnumDeclarations();  
 			break;
  
-    case 516 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); }  //$NON-NLS-1$
+    case 521 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyEnumDeclarations();  
 			break;
  
-    case 518 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); }  //$NON-NLS-1$
+    case 523 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatement();  
 			break;
  
-    case 519 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); }  //$NON-NLS-1$
+    case 524 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatement();  
 			break;
  
-    case 520 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); }  //$NON-NLS-1$
+    case 525 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatementHeaderInit(false);  
 			break;
  
-    case 521 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); }  //$NON-NLS-1$
+    case 526 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); }  //$NON-NLS-1$
 		    consumeEnhancedForStatementHeaderInit(true);  
 			break;
  
-    case 522 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); }  //$NON-NLS-1$
+    case 527 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatementHeader();  
 			break;
  
-    case 523 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); }  //$NON-NLS-1$
+    case 528 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 524 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); }  //$NON-NLS-1$
+    case 529 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); }  //$NON-NLS-1$
 		    consumeSingleStaticImportDeclarationName();  
 			break;
  
-    case 525 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
+    case 530 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 526 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); }  //$NON-NLS-1$
+    case 531 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); }  //$NON-NLS-1$
 		    consumeStaticImportOnDemandDeclarationName();  
 			break;
  
-    case 527 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
+    case 532 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
 		    consumeTypeArguments();  
 			break;
  
-    case 528 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
+    case 533 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
 		    consumeOnlyTypeArguments();  
 			break;
  
-    case 530 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
+    case 535 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentList1();  
 			break;
  
-    case 532 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); }  //$NON-NLS-1$
+    case 537 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); }  //$NON-NLS-1$
 		    consumeTypeArgumentList();  
 			break;
  
-    case 533 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); }  //$NON-NLS-1$
+    case 538 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); }  //$NON-NLS-1$
 		    consumeTypeArgument();  
 			break;
  
-    case 537 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); }  //$NON-NLS-1$
+    case 542 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); }  //$NON-NLS-1$
 		    consumeReferenceType1();  
 			break;
  
-    case 538 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
+    case 543 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentReferenceType1();  
 			break;
  
-    case 540 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
+    case 545 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentList2();  
 			break;
  
-    case 543 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 548 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeReferenceType2();  
 			break;
  
-    case 544 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
+    case 549 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentReferenceType2();  
 			break;
  
-    case 546 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
+    case 551 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentList3();  
 			break;
  
-    case 549 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 554 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeReferenceType3();  
 			break;
  
-    case 550 : if (DEBUG) { System.out.println("Wildcard ::= QUESTION"); }  //$NON-NLS-1$
+    case 555 : if (DEBUG) { System.out.println("Wildcard ::= QUESTION"); }  //$NON-NLS-1$
 		    consumeWildcard();  
 			break;
  
-    case 551 : if (DEBUG) { System.out.println("Wildcard ::= QUESTION WildcardBounds"); }  //$NON-NLS-1$
+    case 556 : if (DEBUG) { System.out.println("Wildcard ::= QUESTION WildcardBounds"); }  //$NON-NLS-1$
 		    consumeWildcardWithBounds();  
 			break;
  
-    case 552 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); }  //$NON-NLS-1$
+    case 557 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); }  //$NON-NLS-1$
 		    consumeWildcardBoundsExtends();  
 			break;
  
-    case 553 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); }  //$NON-NLS-1$
+    case 558 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); }  //$NON-NLS-1$
 		    consumeWildcardBoundsSuper();  
 			break;
  
-    case 554 : if (DEBUG) { System.out.println("Wildcard1 ::= QUESTION GREATER"); }  //$NON-NLS-1$
+    case 559 : if (DEBUG) { System.out.println("Wildcard1 ::= QUESTION GREATER"); }  //$NON-NLS-1$
 		    consumeWildcard1();  
 			break;
  
-    case 555 : if (DEBUG) { System.out.println("Wildcard1 ::= QUESTION WildcardBounds1"); }  //$NON-NLS-1$
+    case 560 : if (DEBUG) { System.out.println("Wildcard1 ::= QUESTION WildcardBounds1"); }  //$NON-NLS-1$
 		    consumeWildcard1WithBounds();  
 			break;
  
-    case 556 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); }  //$NON-NLS-1$
+    case 561 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); }  //$NON-NLS-1$
 		    consumeWildcardBounds1Extends();  
 			break;
  
-    case 557 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); }  //$NON-NLS-1$
+    case 562 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); }  //$NON-NLS-1$
 		    consumeWildcardBounds1Super();  
 			break;
  
-    case 558 : if (DEBUG) { System.out.println("Wildcard2 ::= QUESTION RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 563 : if (DEBUG) { System.out.println("Wildcard2 ::= QUESTION RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeWildcard2();  
 			break;
  
-    case 559 : if (DEBUG) { System.out.println("Wildcard2 ::= QUESTION WildcardBounds2"); }  //$NON-NLS-1$
+    case 564 : if (DEBUG) { System.out.println("Wildcard2 ::= QUESTION WildcardBounds2"); }  //$NON-NLS-1$
 		    consumeWildcard2WithBounds();  
 			break;
  
-    case 560 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); }  //$NON-NLS-1$
+    case 565 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); }  //$NON-NLS-1$
 		    consumeWildcardBounds2Extends();  
 			break;
  
-    case 561 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); }  //$NON-NLS-1$
+    case 566 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); }  //$NON-NLS-1$
 		    consumeWildcardBounds2Super();  
 			break;
  
-    case 562 : if (DEBUG) { System.out.println("Wildcard3 ::= QUESTION UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 567 : if (DEBUG) { System.out.println("Wildcard3 ::= QUESTION UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeWildcard3();  
 			break;
  
-    case 563 : if (DEBUG) { System.out.println("Wildcard3 ::= QUESTION WildcardBounds3"); }  //$NON-NLS-1$
+    case 568 : if (DEBUG) { System.out.println("Wildcard3 ::= QUESTION WildcardBounds3"); }  //$NON-NLS-1$
 		    consumeWildcard3WithBounds();  
 			break;
  
-    case 564 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); }  //$NON-NLS-1$
+    case 569 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); }  //$NON-NLS-1$
 		    consumeWildcardBounds3Extends();  
 			break;
  
-    case 565 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); }  //$NON-NLS-1$
+    case 570 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); }  //$NON-NLS-1$
 		    consumeWildcardBounds3Super();  
 			break;
  
-    case 566 : if (DEBUG) { System.out.println("TypeParameterHeader ::= Identifier"); }  //$NON-NLS-1$
+    case 571 : if (DEBUG) { System.out.println("TypeParameterHeader ::= Identifier"); }  //$NON-NLS-1$
 		    consumeTypeParameterHeader();  
 			break;
  
-    case 567 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); }  //$NON-NLS-1$
+    case 572 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); }  //$NON-NLS-1$
 		    consumeTypeParameters();  
 			break;
  
-    case 569 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
+    case 574 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeParameterList();  
 			break;
  
-    case 571 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 576 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameterWithExtends();  
 			break;
  
-    case 572 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 577 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameterWithExtendsAndBounds();  
 			break;
  
-    case 574 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); }  //$NON-NLS-1$
+    case 579 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); }  //$NON-NLS-1$
 		    consumeAdditionalBoundList();  
 			break;
  
-    case 575 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); }  //$NON-NLS-1$
+    case 580 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); }  //$NON-NLS-1$
 		    consumeAdditionalBound();  
 			break;
  
-    case 577 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
+    case 582 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeParameterList1();  
 			break;
  
-    case 578 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); }  //$NON-NLS-1$
+    case 583 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); }  //$NON-NLS-1$
 		    consumeTypeParameter1();  
 			break;
  
-    case 579 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 584 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameter1WithExtends();  
 			break;
  
-    case 580 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 585 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameter1WithExtendsAndBounds();  
 			break;
  
-    case 582 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); }  //$NON-NLS-1$
+    case 587 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); }  //$NON-NLS-1$
 		    consumeAdditionalBoundList1();  
 			break;
  
-    case 583 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); }  //$NON-NLS-1$
+    case 588 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); }  //$NON-NLS-1$
 		    consumeAdditionalBound1();  
 			break;
  
-    case 589 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); }  //$NON-NLS-1$
+    case 594 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 590 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); }  //$NON-NLS-1$
+    case 595 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 593 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); }  //$NON-NLS-1$
+    case 598 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.TWIDDLE);  
 			break;
  
-    case 594 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); }  //$NON-NLS-1$
+    case 599 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.NOT);  
 			break;
  
-    case 597 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 602 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MULTIPLY);  
 			break;
  
-    case 598 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); }  //$NON-NLS-1$
+    case 603 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.MULTIPLY);  
 			break;
  
-    case 599 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 604 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.DIVIDE);  
 			break;
  
-    case 600 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); }  //$NON-NLS-1$
+    case 605 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.DIVIDE);  
 			break;
  
-    case 601 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 606 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.REMAINDER);  
 			break;
  
-    case 602 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); }  //$NON-NLS-1$
+    case 607 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.REMAINDER);  
 			break;
  
-    case 604 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 609 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 605 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); }  //$NON-NLS-1$
+    case 610 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.PLUS);  
 			break;
  
-    case 606 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 611 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 607 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); }  //$NON-NLS-1$
+    case 612 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.MINUS);  
 			break;
  
-    case 609 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
+    case 614 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LEFT_SHIFT);  
 			break;
  
-    case 610 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); }  //$NON-NLS-1$
+    case 615 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.LEFT_SHIFT);  
 			break;
  
-    case 611 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
+    case 616 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.RIGHT_SHIFT);  
 			break;
  
-    case 612 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); }  //$NON-NLS-1$
+    case 617 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.RIGHT_SHIFT);  
 			break;
  
-    case 613 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
+    case 618 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 614 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); }  //$NON-NLS-1$
+    case 619 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 616 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
+    case 621 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS);  
 			break;
  
-    case 617 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); }  //$NON-NLS-1$
+    case 622 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.LESS);  
 			break;
  
-    case 618 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
+    case 623 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER);  
 			break;
  
-    case 619 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); }  //$NON-NLS-1$
+    case 624 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.GREATER);  
 			break;
  
-    case 620 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 625 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS_EQUAL);  
 			break;
  
-    case 621 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); }  //$NON-NLS-1$
+    case 626 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.LESS_EQUAL);  
 			break;
  
-    case 622 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 627 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER_EQUAL);  
 			break;
  
-    case 623 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); }  //$NON-NLS-1$
+    case 628 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.GREATER_EQUAL);  
 			break;
  
-    case 625 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name instanceof..."); }  //$NON-NLS-1$
+    case 630 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name instanceof..."); }  //$NON-NLS-1$
 		    consumeInstanceOfExpressionWithName();  
 			break;
  
-    case 626 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 631 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeInstanceOfExpression();  
 			break;
  
-    case 628 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 633 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.EQUAL_EQUAL);  
 			break;
  
-    case 629 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); }  //$NON-NLS-1$
+    case 634 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpressionWithName(OperatorIds.EQUAL_EQUAL);  
 			break;
  
-    case 630 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 635 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.NOT_EQUAL);  
 			break;
  
-    case 631 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); }  //$NON-NLS-1$
+    case 636 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpressionWithName(OperatorIds.NOT_EQUAL);  
 			break;
  
-    case 633 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); }  //$NON-NLS-1$
+    case 638 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND);  
 			break;
  
-    case 634 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); }  //$NON-NLS-1$
+    case 639 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.AND);  
 			break;
  
-    case 636 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 641 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.XOR);  
 			break;
  
-    case 637 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); }  //$NON-NLS-1$
+    case 642 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.XOR);  
 			break;
  
-    case 639 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 644 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR);  
 			break;
  
-    case 640 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); }  //$NON-NLS-1$
+    case 645 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.OR);  
 			break;
  
-    case 642 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 647 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND_AND);  
 			break;
  
-    case 643 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); }  //$NON-NLS-1$
+    case 648 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.AND_AND);  
 			break;
  
-    case 645 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 650 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR_OR);  
 			break;
  
-    case 646 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); }  //$NON-NLS-1$
+    case 651 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.OR_OR);  
 			break;
  
-    case 648 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 653 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ;  
 			break;
  
-    case 649 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); }  //$NON-NLS-1$
+    case 654 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); }  //$NON-NLS-1$
 		    consumeConditionalExpressionWithName(OperatorIds.QUESTIONCOLON) ;  
 			break;
  
-    case 653 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
+    case 658 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderName() ;  
 			break;
  
-    case 654 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
+    case 659 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ;  
 			break;
  
-    case 655 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
+    case 660 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ;  
 			break;
  
-    case 656 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
+    case 661 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderName() ;  
 			break;
  
-    case 657 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); }  //$NON-NLS-1$
+    case 662 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeader() ;  
 			break;
  
-    case 658 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); }  //$NON-NLS-1$
+    case 663 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclaration() ;  
 			break;
  
-    case 660 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); }  //$NON-NLS-1$
+    case 665 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyAnnotationTypeMemberDeclarationsopt() ;  
 			break;
  
-    case 661 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
+    case 666 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeMemberDeclarationsopt() ;  
 			break;
  
-    case 663 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); }  //$NON-NLS-1$
+    case 668 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeMemberDeclarations() ;  
 			break;
  
-    case 664 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); }  //$NON-NLS-1$
+    case 669 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderNameWithTypeParameters(true);  
 			break;
  
-    case 665 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 670 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderName(true);  
 			break;
  
-    case 666 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); }  //$NON-NLS-1$
+    case 671 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyMethodHeaderDefaultValue() ;  
 			break;
  
-    case 667 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); }  //$NON-NLS-1$
+    case 672 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); }  //$NON-NLS-1$
 		    consumeMethodHeaderDefaultValue();  
 			break;
  
-    case 668 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); }  //$NON-NLS-1$
+    case 673 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
-    case 669 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); }  //$NON-NLS-1$
+    case 674 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeMemberDeclaration() ;  
 			break;
  
-    case 677 : if (DEBUG) { System.out.println("AnnotationName ::= AT Name"); }  //$NON-NLS-1$
+    case 682 : if (DEBUG) { System.out.println("AnnotationName ::= AT Name"); }  //$NON-NLS-1$
 		    consumeAnnotationName() ;  
 			break;
  
-    case 678 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
+    case 683 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
 		    consumeNormalAnnotation() ;  
 			break;
  
-    case 679 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); }  //$NON-NLS-1$
+    case 684 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyMemberValuePairsopt() ;  
 			break;
  
-    case 682 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); }  //$NON-NLS-1$
+    case 687 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); }  //$NON-NLS-1$
 		    consumeMemberValuePairs() ;  
 			break;
  
-    case 683 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); }  //$NON-NLS-1$
+    case 688 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); }  //$NON-NLS-1$
 		    consumeMemberValuePair() ;  
 			break;
  
-    case 684 : if (DEBUG) { System.out.println("EnterMemberValue ::="); }  //$NON-NLS-1$
+    case 689 : if (DEBUG) { System.out.println("EnterMemberValue ::="); }  //$NON-NLS-1$
 		    consumeEnterMemberValue() ;  
 			break;
  
-    case 685 : if (DEBUG) { System.out.println("ExitMemberValue ::="); }  //$NON-NLS-1$
+    case 690 : if (DEBUG) { System.out.println("ExitMemberValue ::="); }  //$NON-NLS-1$
 		    consumeExitMemberValue() ;  
 			break;
  
-    case 687 : if (DEBUG) { System.out.println("MemberValue ::= Name"); }  //$NON-NLS-1$
+    case 692 : if (DEBUG) { System.out.println("MemberValue ::= Name"); }  //$NON-NLS-1$
 		    consumeMemberValueAsName() ;  
 			break;
  
-    case 690 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
+    case 695 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
 		    consumeMemberValueArrayInitializer() ;  
 			break;
  
-    case 691 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
+    case 696 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
 		    consumeMemberValueArrayInitializer() ;  
 			break;
  
-    case 692 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
+    case 697 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
 		    consumeEmptyMemberValueArrayInitializer() ;  
 			break;
  
-    case 693 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
+    case 698 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
 		    consumeEmptyMemberValueArrayInitializer() ;  
 			break;
  
-    case 694 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); }  //$NON-NLS-1$
+    case 699 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); }  //$NON-NLS-1$
 		    consumeEnterMemberValueArrayInitializer() ;  
 			break;
  
-    case 696 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); }  //$NON-NLS-1$
+    case 701 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); }  //$NON-NLS-1$
 		    consumeMemberValues() ;  
 			break;
  
-    case 697 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); }  //$NON-NLS-1$
+    case 702 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); }  //$NON-NLS-1$
 		    consumeMarkerAnnotation() ;  
 			break;
  
-    case 698 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); }  //$NON-NLS-1$
+    case 703 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); }  //$NON-NLS-1$
 		    consumeSingleMemberAnnotationMemberValue() ;  
 			break;
  
-    case 699 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
+    case 704 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
 		    consumeSingleMemberAnnotation() ;  
 			break;
  
-    case 700 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); }  //$NON-NLS-1$
+    case 705 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); }  //$NON-NLS-1$
 		    consumeRecoveryMethodHeaderNameWithTypeParameters();  
 			break;
  
-    case 701 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 706 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeRecoveryMethodHeaderName();  
 			break;
  
-    case 702 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
+    case 707 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
-    case 703 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
+    case 708 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
@@ -7269,6 +7386,8 @@ protected void consumeStaticImportOnDemandDeclarationName() {
 	System.arraycopy(this.identifierPositionStack, this.identifierPtr + 1, positions, 0, length);
 	pushOnAstStack(impt = new ImportReference(tokens, positions, true, ClassFileConstants.AccStatic));
 
+	// star end position
+	impt.trailingStarPosition = this.intStack[this.intPtr--];
 	this.modifiers = ClassFileConstants.AccDefault;
 	this.modifiersSourceStart = -1; // <-- see comment into modifiersFlag(int)
 
@@ -7652,6 +7771,10 @@ protected void consumeToken(int type) {
 				}
 			}
 			break;
+		case TokenNameMULTIPLY :
+			// star end position
+			pushOnIntStack(this.scanner.currentPosition - 1);
+			break;
 			//  case TokenNameCOMMA :
 			//  case TokenNameCOLON  :
 			//  case TokenNameLBRACKET  :
@@ -7778,6 +7901,8 @@ protected void consumeTypeImportOnDemandDeclarationName() {
 	System.arraycopy(this.identifierPositionStack, this.identifierPtr + 1, positions, 0, length);
 	pushOnAstStack(impt = new ImportReference(tokens, positions, true, ClassFileConstants.AccDefault));
 
+	// star end position
+	impt.trailingStarPosition = this.intStack[this.intPtr--];
 	if (this.currentToken == TokenNameSEMICOLON){
 		impt.declarationSourceEnd = this.scanner.currentPosition - 1;
 	} else {
@@ -8254,92 +8379,93 @@ protected void dispatchDeclarationInto(int length) {
 protected void dispatchDeclarationIntoEnumDeclaration(int length) {
 
 	if (length == 0)
-      return;
-   int[] flag = new int[length + 1]; //plus one -- see <HERE>
-   int size1 = 0, size2 = 0, size3 = 0;
-   TypeDeclaration enumDeclaration = (TypeDeclaration) this.astStack[this.astPtr - length];
-   boolean hasAbstractMethods = false;
-   for (int i = length - 1; i >= 0; i--) {
-      ASTNode astNode = this.astStack[this.astPtr--];
-      if (astNode instanceof AbstractMethodDeclaration) {
-         //methods and constructors have been regrouped into one single list
-         flag[i] = 2;
-         size2++;
-		if (((AbstractMethodDeclaration) astNode).isAbstract()) {
-			hasAbstractMethods = true;
-		}
-      } else if (astNode instanceof TypeDeclaration) {
-         flag[i] = 3;
-         size3++;
-      } else if (astNode instanceof FieldDeclaration) {
-         flag[i] = 1;
-         size1++;
-//         if(astNode instanceof EnumConstant) {
-//            EnumConstant constant = (EnumConstant) astNode;
-//            ((AllocationExpression)constant.initialization).type = new SingleTypeReference(enumDeclaration.name,
-//                  (((long) enumDeclaration.sourceStart) << 32) + enumDeclaration.sourceEnd);
-//         }
-      }
-   }
+		return;
+	int[] flag = new int[length + 1]; //plus one -- see <HERE>
+	int size1 = 0, size2 = 0, size3 = 0;
+	TypeDeclaration enumDeclaration = (TypeDeclaration) this.astStack[this.astPtr - length];
+	boolean hasAbstractMethods = false;
+	int enumConstantsCounter = 0;
+	for (int i = length - 1; i >= 0; i--) {
+		ASTNode astNode = this.astStack[this.astPtr--];
+		if (astNode instanceof AbstractMethodDeclaration) {
+			//methods and constructors have been regrouped into one single list
+			flag[i] = 2;
+			size2++;
+			if (((AbstractMethodDeclaration) astNode).isAbstract()) {
+				hasAbstractMethods = true;
+			}
+		} else if (astNode instanceof TypeDeclaration) {
+			flag[i] = 3;
+			size3++;
+		} else if (astNode instanceof FieldDeclaration) {
+			flag[i] = 1;
+			size1++;
+			if (((FieldDeclaration) astNode).getKind() == AbstractVariableDeclaration.ENUM_CONSTANT) {
+				enumConstantsCounter++;
+			}
+		}
+	}
 
-   //arrays creation
-   if (size1 != 0) {
-      enumDeclaration.fields = new FieldDeclaration[size1];
-   }
-   if (size2 != 0) {
-      enumDeclaration.methods = new AbstractMethodDeclaration[size2];
-      if (hasAbstractMethods) enumDeclaration.bits |= ASTNode.HasAbstractMethods;
-   }
-   if (size3 != 0) {
-      enumDeclaration.memberTypes = new TypeDeclaration[size3];
-   }
+	//arrays creation
+	if (size1 != 0) {
+		enumDeclaration.fields = new FieldDeclaration[size1];
+	}
+	if (size2 != 0) {
+		enumDeclaration.methods = new AbstractMethodDeclaration[size2];
+		if (hasAbstractMethods) enumDeclaration.bits |= ASTNode.HasAbstractMethods;
+	}
+	if (size3 != 0) {
+		enumDeclaration.memberTypes = new TypeDeclaration[size3];
+	}
 
-   //arrays fill up
-   size1 = size2 = size3 = 0;
-   int flagI = flag[0], start = 0;
-   int length2;
-   for (int end = 0; end <= length; end++) //<HERE> the plus one allows to
-      {
-      if (flagI != flag[end]) //treat the last element as a ended flag.....
-         { //array copy
-         switch (flagI) {
-            case 1 :
-               size1 += (length2 = end - start);
-               System.arraycopy(
-                  this.astStack,
-                  this.astPtr + start + 1,
-                  enumDeclaration.fields,
-                  size1 - length2,
-                  length2);
-               break;
-            case 2 :
-               size2 += (length2 = end - start);
-               System.arraycopy(
-                  this.astStack,
-                  this.astPtr + start + 1,
-                  enumDeclaration.methods,
-                  size2 - length2,
-                  length2);
-               break;
-            case 3 :
-               size3 += (length2 = end - start);
-               System.arraycopy(
-                  this.astStack,
-                  this.astPtr + start + 1,
-                  enumDeclaration.memberTypes,
-                  size3 - length2,
-                  length2);
-               break;
-         }
-         flagI = flag[start = end];
-      }
-   }
+	//arrays fill up
+	size1 = size2 = size3 = 0;
+	int flagI = flag[0], start = 0;
+	int length2;
+	for (int end = 0; end <= length; end++) //<HERE> the plus one allows to
+	{
+		if (flagI != flag[end]) //treat the last element as a ended flag.....
+		{ //array copy
+			switch (flagI) {
+				case 1 :
+					size1 += (length2 = end - start);
+					System.arraycopy(
+							this.astStack,
+							this.astPtr + start + 1,
+							enumDeclaration.fields,
+							size1 - length2,
+							length2);
+					break;
+				case 2 :
+					size2 += (length2 = end - start);
+					System.arraycopy(
+							this.astStack,
+							this.astPtr + start + 1,
+							enumDeclaration.methods,
+							size2 - length2,
+							length2);
+					break;
+				case 3 :
+					size3 += (length2 = end - start);
+					System.arraycopy(
+							this.astStack,
+							this.astPtr + start + 1,
+							enumDeclaration.memberTypes,
+							size3 - length2,
+							length2);
+					break;
+			}
+			flagI = flag[start = end];
+		}
+	}
 
-   if (enumDeclaration.memberTypes != null) {
-      for (int i = enumDeclaration.memberTypes.length - 1; i >= 0; i--) {
-         enumDeclaration.memberTypes[i].enclosingType = enumDeclaration;
-      }
-   }}
+	if (enumDeclaration.memberTypes != null) {
+		for (int i = enumDeclaration.memberTypes.length - 1; i >= 0; i--) {
+			enumDeclaration.memberTypes[i].enclosingType = enumDeclaration;
+		}
+	}
+	enumDeclaration.enumConstantsCounter = enumConstantsCounter;
+}
 protected CompilationUnitDeclaration endParse(int act) {
 
 	this.lastAct = act;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java
index 0d8e9d0..fe0d146 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,20 +16,20 @@ public interface ParserBasicInformation {
 
 	int ERROR_SYMBOL = 110,
 		MAX_NAME_LENGTH = 41,
-		NUM_STATES = 970,
+		NUM_STATES = 973,
 
 		NT_OFFSET = 110,
-		SCOPE_UBOUND = 133,
-		SCOPE_SIZE = 134,
-		LA_STATE_OFFSET = 12741,
+		SCOPE_UBOUND = 135,
+		SCOPE_SIZE = 136,
+		LA_STATE_OFFSET = 12710,
 		MAX_LA = 1,
-		NUM_RULES = 703,
+		NUM_RULES = 708,
 		NUM_TERMINALS = 110,
-		NUM_NON_TERMINALS = 313,
-		NUM_SYMBOLS = 423,
-		START_STATE = 942,
-		EOFT_SYMBOL = 68,
-		EOLT_SYMBOL = 68,
-		ACCEPT_ACTION = 12740,
-		ERROR_ACTION = 12741;
+		NUM_NON_TERMINALS = 315,
+		NUM_SYMBOLS = 425,
+		START_STATE = 1105,
+		EOFT_SYMBOL = 69,
+		EOLT_SYMBOL = 69,
+		ACCEPT_ACTION = 12709,
+		ERROR_ACTION = 12710;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java
index 2196965..f317b51 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,7 @@ public interface TerminalTokens {
 		TokenNamefor = 78,
 		TokenNamegoto = 109,
 		TokenNameif = 79,
-		TokenNameimplements = 106,
+		TokenNameimplements = 107,
 		TokenNameimport = 100,
 		TokenNameinstanceof = 12,
 		TokenNameint = 37,
@@ -129,7 +129,7 @@ public interface TerminalTokens {
 		TokenNameLESS = 7,
 		TokenNameLPAREN = 28,
 		TokenNameRPAREN = 29,
-		TokenNameLBRACE = 69,
+		TokenNameLBRACE = 68,
 		TokenNameRBRACE = 31,
 		TokenNameLBRACKET = 14,
 		TokenNameRBRACKET = 70,
@@ -140,7 +140,7 @@ public interface TerminalTokens {
 		TokenNameDOT = 3,
 		TokenNameEQUAL = 71,
 		TokenNameAT = 53,
-		TokenNameELLIPSIS = 107,
-		TokenNameEOF = 68,
+		TokenNameELLIPSIS = 106,
+		TokenNameEOF = 69,
 		TokenNameERROR = 110;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc
index 301d84a..a15e0f8 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc
index eae1f96..c103f9c 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc
index 2c3dfab..d4f5647 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc
index aecc1af..553d468 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc
index f7ef8c3..24f1451 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc
index 1698547..fc10408 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc
index a3a2e3e..fbe0c3f 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc
index 89a023d..6fc112b 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc
index 4699024..fc25edd 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc
index e22f8f8..4f1e9f3 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc
index 5e5050e..64c4345 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc
@@ -1,2 +1,2 @@
-ggFFFEEhAAA!FfAeAIE
-
JJE!EEbGG_!H!Ab!!!!55
\ No newline at end of file
+ggFFFDDhAAA!FfAeAID
+
JJD!DDbGG_!H!!Ab!!!!!55
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc
index aff4a95..eda6d69 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc
index cad2f83..5c58631 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc
index fab623c..61b5691 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc
index 0da01a8..42b096a 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc
index b5eaaf7..008c15b 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc
index ce86ba2..8b2734f 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc
index 9eeac2d..c6c1539 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc
index f201275..338130d 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc
index f269071..2b2dcf4 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc
index 9c8ddea..ce3d215 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc
index 2134cc4..7c86e35 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc
index 40426c3..5a071dc 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc
index c96374b..b9f8b14 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc and b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc differ
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.properties b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.properties
index 7c98bcd..e8ce43c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.properties
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.properties
@@ -1,13 +1,3 @@
-###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
 ,opt=,
 AbstractMethodDeclaration=MethodDeclaration
 AdditionalBound1=AdditionalBound1
@@ -55,6 +45,7 @@ BooleanLiteral=BooleanLiteral
 BreakStatement=BreakStatement
 CastExpression=CastExpression
 CatchClause=CatchClause
+CatchFormalParameter=FormalParameter
 CatchHeader=CatchHeader
 Catches=Catches
 Catchesopt=Catches
@@ -181,6 +172,7 @@ InterfaceTypeList=InterfaceTypeList
 InternalCompilationUnit=CompilationUnit
 InvalidArrayInitializerAssignement=ArrayInitializerAssignment
 InvalidConstructorDeclaration=InvalidConstructorDeclaration
+InvalidInitializer=InvalidInitializer
 Label=Label
 LabeledStatement=LabeledStatement
 LabeledStatementNoShortIf=LabeledStatement
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
index cb60397..77f2bbf 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,10 @@ import org.eclipse.jdt.internal.compiler.util.Util;
 public class DefaultProblem extends CategorizedProblem {
 	private char[] fileName;
 	private int id;
-	private int startPosition, endPosition, line, column;
+	private int startPosition;
+	private int endPosition;
+	private int line;
+	public int column;
 	private int severity;
 	private String[] arguments;
 	private String message;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
index 678f940..24bd128 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,9 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Benjamin Muskalla - Contribution for bug 239066
- *     Stephan Herrmann  - Contribution for bug 236385
+ *     Stephan Herrmann  - Contributions for 
+ *     						bug 236385 - [compiler] Warn for potential programming problem if an object is created but not used
+ *     						bug 338303 - Warning about Redundant assignment conflicts with definite assignment
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.problem;
 
@@ -418,6 +420,12 @@ public static int getIrritant(int problemID) {
 
 		case IProblem.UnusedObjectAllocation:
 			return CompilerOptions.UnusedObjectAllocation;
+			
+		case IProblem.MethodCanBeStatic:
+			return CompilerOptions.MethodCanBeStatic;
+			
+		case IProblem.MethodCanBePotentiallyStatic:
+			return CompilerOptions.MethodCanBePotentiallyStatic;
 	}
 	return 0;
 }
@@ -448,6 +456,8 @@ public static int getProblemCategory(int severity, int problemID) {
 			case CompilerOptions.MissingOverrideAnnotation :
 			case CompilerOptions.MissingDeprecatedAnnotation :
 			case CompilerOptions.ParameterAssignment :
+			case CompilerOptions.MethodCanBeStatic :
+			case CompilerOptions.MethodCanBePotentiallyStatic :
 				return CategorizedProblem.CAT_CODE_STYLE;
 
 			case CompilerOptions.MaskedCatchBlock :
@@ -1065,7 +1075,7 @@ public void cannotReadSource(CompilationUnitDeclaration unit, AbortCompilationUn
 		if (encoding == null) {
 			encoding = System.getProperty("file.encoding"); //$NON-NLS-1$
 		}
-		String[] arguments = new String[]{ fileName, encoding, };
+		String[] arguments = new String[]{ fileName, encoding };
 		this.handle(
 				IProblem.InvalidEncoding,
 				arguments,
@@ -1078,13 +1088,15 @@ public void cannotReadSource(CompilationUnitDeclaration unit, AbortCompilationUn
 	PrintWriter writer = new PrintWriter(stringWriter);
 	if (verbose) {
 		abortException.exception.printStackTrace(writer);
-	} else {
-		writer.print(abortException.exception.getClass().getName());
-		writer.print(':');
-		writer.print(abortException.exception.getMessage());
+		System.err.println(stringWriter.toString());
+		stringWriter = new StringWriter();
+		writer = new PrintWriter(stringWriter);
 	}
+	writer.print(abortException.exception.getClass().getName());
+	writer.print(':');
+	writer.print(abortException.exception.getMessage());
 	String exceptionTrace = stringWriter.toString();
-	String[] arguments = new String[]{ fileName, exceptionTrace, };
+	String[] arguments = new String[]{ fileName, exceptionTrace };
 	this.handle(
 			IProblem.CannotReadSource,
 			arguments,
@@ -1790,14 +1802,24 @@ public void fieldHiding(FieldDeclaration fieldDecl, Binding hiddenVariable) {
 			&& field.isStatic()
 			&& field.isFinal()
 			&& TypeBinding.LONG == field.type) {
-				return; // do not report unused serialVersionUID field
+		ReferenceBinding referenceBinding = field.declaringClass;
+		if (referenceBinding != null) {
+			if (referenceBinding.findSuperTypeOriginatingFrom(TypeIds.T_JavaIoSerializable, false /*Serializable is not a class*/) != null) {
+				return; // do not report unused serialVersionUID field for class that implements Serializable
+			}
+		}
 	}
 	if (CharOperation.equals(TypeConstants.SERIALPERSISTENTFIELDS, field.name)
 			&& field.isStatic()
 			&& field.isFinal()
 			&& field.type.dimensions() == 1
 			&& CharOperation.equals(TypeConstants.CharArray_JAVA_IO_OBJECTSTREAMFIELD, field.type.leafComponentType().readableName())) {
-				return; // do not report unused serialPersistentFields field
+		ReferenceBinding referenceBinding = field.declaringClass;
+		if (referenceBinding != null) {
+			if (referenceBinding.findSuperTypeOriginatingFrom(TypeIds.T_JavaIoSerializable, false /*Serializable is not a class*/) != null) {
+				return; // do not report unused serialVersionUID field for class that implements Serializable
+			}
+		}
 	}
 	boolean isLocal = hiddenVariable instanceof LocalVariableBinding;
 	int severity = computeSeverity(isLocal ? IProblem.FieldHidingLocalVariable : IProblem.FieldHidingField);
@@ -1848,6 +1870,7 @@ public void finalMethodCannotBeOverridden(MethodBinding currentMethod, MethodBin
 		currentMethod.sourceEnd());
 }
 public void finalVariableBound(TypeVariableBinding typeVariable, TypeReference typeRef) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) return;
 	int severity = computeSeverity(IProblem.FinalBoundForTypeVariable);
 	if (severity == ProblemSeverities.Ignore) return;
 	this.handle(
@@ -2074,6 +2097,29 @@ public void hierarchyCircularity(SourceTypeBinding sourceType, ReferenceBinding
 			end);
 }
 
+public void hierarchyCircularity(TypeVariableBinding type, ReferenceBinding superType, TypeReference reference) {
+	int start = 0;
+	int end = 0;
+
+	start = reference.sourceStart;
+	end = reference.sourceEnd;
+
+	if (type == superType)
+		this.handle(
+			IProblem.HierarchyCircularitySelfReference,
+			new String[] {new String(type.readableName()) },
+			new String[] {new String(type.shortReadableName()) },
+			start,
+			end);
+	else
+		this.handle(
+			IProblem.HierarchyCircularity,
+			new String[] {new String(type.readableName()), new String(superType.readableName())},
+			new String[] {new String(type.shortReadableName()), new String(superType.shortReadableName())},
+			start,
+			end);
+}
+
 public void hierarchyHasProblems(SourceTypeBinding type) {
 	String[] arguments = new String[] {new String(type.sourceName())};
 	this.handle(
@@ -2747,7 +2793,7 @@ public void indirectAccessToStaticMethod(ASTNode location, MethodBinding method)
 		location.sourceStart,
 		location.sourceEnd);
 }
-public void inheritedMethodReducesVisibility(SourceTypeBinding type, MethodBinding concreteMethod, MethodBinding[] abstractMethods) {
+private void inheritedMethodReducesVisibility(int sourceStart, int sourceEnd, MethodBinding concreteMethod, MethodBinding[] abstractMethods) {
 	StringBuffer concreteSignature = new StringBuffer();
 	concreteSignature
 		.append(concreteMethod.declaringClass.readableName())
@@ -2767,8 +2813,14 @@ public void inheritedMethodReducesVisibility(SourceTypeBinding type, MethodBindi
 		new String[] {
 			shortSignature.toString(),
 			new String(abstractMethods[0].declaringClass.shortReadableName())},
-		type.sourceStart(),
-		type.sourceEnd());
+		sourceStart,
+		sourceEnd);
+}
+public void inheritedMethodReducesVisibility(SourceTypeBinding type, MethodBinding concreteMethod, MethodBinding[] abstractMethods) {
+	inheritedMethodReducesVisibility(type.sourceStart(), type.sourceEnd(), concreteMethod, abstractMethods);
+}
+public void inheritedMethodReducesVisibility(TypeParameter typeParameter, MethodBinding concreteMethod, MethodBinding[] abstractMethods) {
+	inheritedMethodReducesVisibility(typeParameter.sourceStart(), typeParameter.sourceEnd(), concreteMethod, abstractMethods);
 }
 public void inheritedMethodsHaveIncompatibleReturnTypes(ASTNode location, MethodBinding[] inheritedMethods, int length) {
 	StringBuffer methodSignatures = new StringBuffer();
@@ -2870,8 +2922,8 @@ public void interfaceCannotHaveConstructors(ConstructorDeclaration constructor)
 		constructor,
 		constructor.compilationResult());
 }
-public void interfaceCannotHaveInitializers(SourceTypeBinding type, FieldDeclaration fieldDecl) {
-	String[] arguments = new String[] {new String(type.sourceName())};
+public void interfaceCannotHaveInitializers(char [] sourceName, FieldDeclaration fieldDecl) {
+	String[] arguments = new String[] {new String(sourceName)};
 
 	this.handle(
 		IProblem.InterfaceCannotHaveInitializers,
@@ -3767,14 +3819,6 @@ public void invalidTypeForCollectionTarget14(Expression expression) {
 			expression.sourceStart,
 			expression.sourceEnd);
 }
-public void invalidTypeReference(Expression expression) {
-	this.handle(
-		IProblem.InvalidTypeExpression,
-		NoArgument,
-		NoArgument,
-		expression.sourceStart,
-		expression.sourceEnd);
-}
 public void invalidTypeToSynchronize(Expression expression, TypeBinding type) {
 	this.handle(
 		IProblem.InvalidTypeToSynchronized,
@@ -4941,6 +4985,8 @@ public void localVariableRedundantCheckOnNull(LocalVariableBinding local, ASTNod
 }
 
 public void localVariableRedundantNullAssignment(LocalVariableBinding local, ASTNode location) {
+	if ((location.bits & ASTNode.FirstAssignmentToLocal) != 0) // https://bugs.eclipse.org/338303 - Warning about Redundant assignment conflicts with definite assignment
+		return;
 	int severity = computeSeverity(IProblem.RedundantLocalVariableNullAssignment);
 	if (severity == ProblemSeverities.Ignore) return;
 	String[] arguments = new String[] {new String(local.name)  };
@@ -5011,6 +5057,48 @@ public void methodWithConstructorName(MethodDeclaration methodDecl) {
 		methodDecl.sourceEnd);
 }
 
+public void methodCanBeDeclaredStatic(MethodDeclaration methodDecl) {
+	int severity = computeSeverity(IProblem.MethodCanBeStatic);
+	if (severity == ProblemSeverities.Ignore) return;
+	MethodBinding method = methodDecl.binding;
+	this.handle(
+			IProblem.MethodCanBeStatic,
+		new String[] {
+			new String(method.declaringClass.readableName()),
+			new String(method.selector),
+			typesAsString(method.isVarargs(), method.parameters, false)
+		 },
+		new String[] {
+			new String(method.declaringClass.shortReadableName()),
+			new String(method.selector),
+			typesAsString(method.isVarargs(), method.parameters, true)
+		 },
+		severity,
+		methodDecl.sourceStart,
+		methodDecl.sourceEnd);
+}
+
+public void methodCanBePotentiallyDeclaredStatic(MethodDeclaration methodDecl) {
+	int severity = computeSeverity(IProblem.MethodCanBePotentiallyStatic);
+	if (severity == ProblemSeverities.Ignore) return;
+	MethodBinding method = methodDecl.binding;
+	this.handle(
+			IProblem.MethodCanBePotentiallyStatic,
+		new String[] {
+			new String(method.declaringClass.readableName()),
+			new String(method.selector),
+			typesAsString(method.isVarargs(), method.parameters, false)
+		 },
+		new String[] {
+			new String(method.declaringClass.shortReadableName()),
+			new String(method.selector),
+			typesAsString(method.isVarargs(), method.parameters, true)
+		 },
+		severity,
+		methodDecl.sourceStart,
+		methodDecl.sourceEnd);
+}
+
 public void missingDeprecatedAnnotationForField(FieldDeclaration field) {
 	int severity = computeSeverity(IProblem.FieldMissingDeprecatedAnnotation);
 	if (severity == ProblemSeverities.Ignore) return;
@@ -5195,15 +5283,6 @@ public void mustDefineDimensionsOrInitializer(ArrayAllocationExpression expressi
 		expression.sourceStart,
 		expression.sourceEnd);
 }
-public void mustSpecifyPackage(CompilationUnitDeclaration compUnitDecl) {
-	String[] arguments = new String[] {new String(compUnitDecl.getFileName())};
-	this.handle(
-		IProblem.MustSpecifyPackage,
-		arguments,
-		arguments,
-		compUnitDecl.sourceStart,
-		compUnitDecl.sourceStart + 1);
-}
 public void mustUseAStaticMethod(MessageSend messageSend, MethodBinding method) {
 	this.handle(
 		IProblem.StaticMethodRequested,
@@ -6049,6 +6128,7 @@ public void rawMemberTypeCannotBeParameterized(ASTNode location, ReferenceBindin
 		location.sourceEnd);
 }
 public void rawTypeReference(ASTNode location, TypeBinding type) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) return; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259
 	type = type.leafComponentType();
     this.handle(
 		IProblem.RawTypeReference,
@@ -6499,6 +6579,22 @@ public void tooManyMethods(TypeDeclaration typeDeclaration) {
 		typeDeclaration.sourceStart,
 		typeDeclaration.sourceEnd);
 }
+public void tooManyParametersForSyntheticMethod(AbstractMethodDeclaration method) {
+	MethodBinding binding = method.binding;
+	String selector = null;
+	if (binding.isConstructor()) {
+		selector = new String(binding.declaringClass.sourceName());
+	} else {
+		selector = new String(method.selector);
+	}
+	this.handle(
+		IProblem.TooManyParametersForSyntheticMethod,
+		new String[] {selector, typesAsString(binding.isVarargs(), binding.parameters, false), new String(binding.declaringClass.readableName()), },
+		new String[] {selector, typesAsString(binding.isVarargs(), binding.parameters, true), new String(binding.declaringClass.shortReadableName()),},
+		ProblemSeverities.AbortMethod | ProblemSeverities.Error | ProblemSeverities.Fatal,
+		method.sourceStart,
+		method.sourceEnd);
+}
 public void typeCastError(CastExpression expression, TypeBinding leftType, TypeBinding rightType) {
 	String leftName = new String(leftType.readableName());
 	String rightName = new String(rightType.readableName());
@@ -6595,6 +6691,12 @@ public void typeHiding(TypeParameter typeParam, Binding hidden) {
 		typeParam.sourceEnd);
 }
 public void typeMismatchError(TypeBinding actualType, TypeBinding expectedType, ASTNode location, ASTNode expectingLocation) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) { // don't expose type variable names, complain on erased types
+		if (actualType instanceof TypeVariableBinding)
+			actualType = actualType.erasure();
+		if (expectedType instanceof TypeVariableBinding)
+			expectedType = expectedType.erasure();
+	}
 	if (actualType != null && (actualType.tagBits & TagBits.HasMissingType) != 0) { // improve secondary error
 		this.handle(
 				IProblem.UndefinedType,
@@ -6752,6 +6854,7 @@ public void uninitializedBlankFinalField(FieldBinding field, ASTNode location) {
 		nodeSourceEnd(field, location));
 }
 public void uninitializedLocalVariable(LocalVariableBinding binding, ASTNode location) {
+	binding.tagBits |= TagBits.NotInitialized;
 	String[] arguments = new String[] {new String(binding.readableName())};
 	this.handle(
 		IProblem.UninitializedLocalVariable,
@@ -6928,6 +7031,7 @@ public void unresolvableReference(NameReference nameRef, Binding binding) {
 		end);
 }
 public void unsafeCast(CastExpression castExpression, Scope scope) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) return; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259
 	int severity = computeSeverity(IProblem.UnsafeGenericCast);
 	if (severity == ProblemSeverities.Ignore) return;
 	TypeBinding castedExpressionType = castExpression.expression.resolvedType;
@@ -6958,6 +7062,7 @@ public void unsafeGenericArrayForVarargs(TypeBinding leafComponentType, ASTNode
 		location.sourceEnd);
 }
 public void unsafeRawFieldAssignment(FieldBinding field, TypeBinding expressionType, ASTNode location) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) return; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259
 	int severity = computeSeverity(IProblem.UnsafeRawFieldAssignment);
 	if (severity == ProblemSeverities.Ignore) return;
 	this.handle(
@@ -6971,6 +7076,7 @@ public void unsafeRawFieldAssignment(FieldBinding field, TypeBinding expressionT
 		nodeSourceEnd(field, location));
 }
 public void unsafeRawGenericMethodInvocation(ASTNode location, MethodBinding rawMethod, TypeBinding[] argumentTypes) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) return; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259
 	boolean isConstructor = rawMethod.isConstructor();
 	int severity = computeSeverity(isConstructor ? IProblem.UnsafeRawGenericConstructorInvocation : IProblem.UnsafeRawGenericMethodInvocation);
 	if (severity == ProblemSeverities.Ignore) return;
@@ -7013,6 +7119,7 @@ public void unsafeRawGenericMethodInvocation(ASTNode location, MethodBinding raw
     }
 }
 public void unsafeRawInvocation(ASTNode location, MethodBinding rawMethod) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) return; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259
 	boolean isConstructor = rawMethod.isConstructor();
 	int severity = computeSeverity(isConstructor ? IProblem.UnsafeRawConstructorInvocation : IProblem.UnsafeRawMethodInvocation);
 	if (severity == ProblemSeverities.Ignore) return;
@@ -7053,6 +7160,9 @@ public void unsafeRawInvocation(ASTNode location, MethodBinding rawMethod) {
     }
 }
 public void unsafeReturnTypeOverride(MethodBinding currentMethod, MethodBinding inheritedMethod, SourceTypeBinding type) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) {
+		return;
+	}
 	int severity = computeSeverity(IProblem.UnsafeReturnTypeOverride);
 	if (severity == ProblemSeverities.Ignore) return;
 	int start = type.sourceStart();
@@ -7087,8 +7197,12 @@ public void unsafeReturnTypeOverride(MethodBinding currentMethod, MethodBinding
 			end);
 }
 public void unsafeTypeConversion(Expression expression, TypeBinding expressionType, TypeBinding expectedType) {
+	if (this.options.sourceLevel < ClassFileConstants.JDK1_5) return; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259
 	int severity = computeSeverity(IProblem.UnsafeTypeConversion);
 	if (severity == ProblemSeverities.Ignore) return;
+	if (!this.options.reportUnavoidableGenericTypeProblems && expression.forcedToBeRaw(this.referenceContext)) {
+		return;
+	}
 	this.handle(
 		IProblem.UnsafeTypeConversion,
 		new String[] { new String(expressionType.readableName()), new String(expectedType.readableName()), new String(expectedType.erasure().readableName()) },
@@ -7224,14 +7338,24 @@ public void unusedPrivateField(FieldDeclaration fieldDecl) {
 			&& field.isStatic()
 			&& field.isFinal()
 			&& TypeBinding.LONG == field.type) {
-				return; // do not report unused serialVersionUID field
+		ReferenceBinding referenceBinding = field.declaringClass;
+		if (referenceBinding != null) {
+			if (referenceBinding.findSuperTypeOriginatingFrom(TypeIds.T_JavaIoSerializable, false /*Serializable is not a class*/) != null) {
+				return; // do not report unused serialVersionUID field for class that implements Serializable
+			}
+		}
 	}
 	if (CharOperation.equals(TypeConstants.SERIALPERSISTENTFIELDS, field.name)
 			&& field.isStatic()
 			&& field.isFinal()
 			&& field.type.dimensions() == 1
 			&& CharOperation.equals(TypeConstants.CharArray_JAVA_IO_OBJECTSTREAMFIELD, field.type.leafComponentType().readableName())) {
+		ReferenceBinding referenceBinding = field.declaringClass;
+		if (referenceBinding != null) {
+			if (referenceBinding.findSuperTypeOriginatingFrom(TypeIds.T_JavaIoSerializable, false /*Serializable is not a class*/) != null) {
 				return; // do not report unused serialPersistentFields field
+			}
+		}
 	}
 	this.handle(
 			IProblem.UnusedPrivateField,
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties
index a0173f9..2221743 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 #		Benjamin Muskalla - Contribution for bug 239066
+#		Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
 ###############################################################################
 0 = {0}
 1 = super cannot be used in java.lang.Object
@@ -33,8 +34,8 @@
 27 = Cannot use an expression of the type {0} as a valid enclosing instance
 28 = No enclosing instance of type {0} is available due to some intermediate constructor invocation
 29 = An anonymous class cannot subclass the final class {0}
-30 = The member annotation {0} can only be defined inside a static context
-31 = The member enum {0} cannot be local
+30 = The member annotation {0} can only be defined inside a top-level class or interface
+31 = The member enum {0} can only be defined inside a top-level class or interface
 32 = The member enum {0} must be defined inside a static member type
 33 = The type {0} is hiding the type {1}
 
@@ -49,8 +50,8 @@
 58 = The final local variable {0} cannot be assigned. It must be blank and not using a compound assignment
 59 = The parameter {0} should not be assigned
 60 = The final local variable {0} cannot be assigned, since it is defined in an enclosing type
-61 = The local variable {0} is never read
-62 = The parameter {0} is never read
+61 = The value of the local variable {0} is not used
+62 = The value of the parameter {0} is not used
 63 = The code of method {0}({1}) is exceeding the 65535 bytes limit
 64 = The code for the static initializer is exceeding the 65535 bytes limit
 65 = Too many parameters, parameter {0} is exceeding the limit of 255 words eligible for method parameters
@@ -65,7 +66,7 @@
 74 = Cannot make a static reference to the non-static field {0}
 75 = Cannot reference a field before it is defined
 76 = The static field {0}.{1} should be accessed in a static way
-77 = The field {0}.{1} is never read locally
+77 = The value of the field {0}.{1} is not used
 78 = The static field {0}.{1} should be accessed directly
 79 = Unqualified access to the field {0}.{1} 
 80 = The final field {0}.{1} cannot be assigned
@@ -102,6 +103,8 @@
 118 = The method {1}({2}) from the type {0} is never used locally
 119 = The static method {1}({2}) from the type {0} should be accessed directly 
 120 = The method {1}({2}) from the type {0} refers to the missing type {3}
+121 = The method {1}({2}) from the type {0} can be declared as static
+122 = The method {1}({2}) from the type {0} can potentially be declared as static
 
 129 = The constructor {0}({1}) refers to the missing type {2}
 130 = The constructor {0}({1}) is undefined
@@ -178,7 +181,7 @@
 200 = Cannot use {0} in a static context
 201 = Cannot make a static reference to the non-static method {1}({2}) from the type {0}
 202 = Cannot specify an array dimension after an empty dimension
-203 = Invalid cast expression
+#203 = Invalid cast expression
 204 = Syntax error on token "{0}", {1} expected
 205 = Syntax error on token "{0}", no accurate correction available
 206 = Invalid argument to operation ++/--
@@ -254,7 +257,7 @@
 323 = The type {1} is already defined
 324 = The type {0} cannot be resolved. It is indirectly referenced from required .class files
 325 = The public type {1} must be defined in its own file
-326 = A package must be specified in {0} or a default package created
+###[obsolete] 326 = A package must be specified in {0} or a default package created
 327 = The hierarchy of the type {0} is inconsistent
 328 = The declared package "{1}" does not match the expected package "{0}"
 329 = The type java.lang.Object cannot have a superclass or superinterfaces
@@ -369,6 +372,7 @@
 
 432 = Too many fields for type {0}. Maximum is 65535
 433 = Too many methods for type {0}. Maximum is 65535
+434 = The synthetic method created to access {0}({1}) of type {2} has too many parameters
 
 440 = 'assert' should not be used as an identifier, since it is a reserved keyword from source level 1.4 on
 441 = 'enum' should not be used as an identifier, since it is a reserved keyword from source level 1.5 on
diff --git a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
index 5805a0c..7625765 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Util.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     daolaf at gmail.com - Contribution for bug 3292227
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.util;
 
@@ -45,6 +46,180 @@ import org.eclipse.jdt.internal.compiler.lookup.WildcardBinding;
 
 public class Util implements SuffixConstants {
 
+	/**
+	 * Character constant indicating the primitive type boolean in a signature.
+	 * Value is <code>'Z'</code>.
+	 */
+	public static final char C_BOOLEAN 		= 'Z';
+
+	/**
+	 * Character constant indicating the primitive type byte in a signature.
+	 * Value is <code>'B'</code>.
+	 */
+	public static final char C_BYTE 		= 'B';
+
+	/**
+	 * Character constant indicating the primitive type char in a signature.
+	 * Value is <code>'C'</code>.
+	 */
+	public static final char C_CHAR 		= 'C';
+
+	/**
+	 * Character constant indicating the primitive type double in a signature.
+	 * Value is <code>'D'</code>.
+	 */
+	public static final char C_DOUBLE 		= 'D';
+
+	/**
+	 * Character constant indicating the primitive type float in a signature.
+	 * Value is <code>'F'</code>.
+	 */
+	public static final char C_FLOAT 		= 'F';
+
+	/**
+	 * Character constant indicating the primitive type int in a signature.
+	 * Value is <code>'I'</code>.
+	 */
+	public static final char C_INT 			= 'I';
+
+	/**
+	 * Character constant indicating the semicolon in a signature.
+	 * Value is <code>';'</code>.
+	 */
+	public static final char C_SEMICOLON 			= ';';
+
+	/**
+	 * Character constant indicating the colon in a signature.
+	 * Value is <code>':'</code>.
+	 * @since 3.0
+	 */
+	public static final char C_COLON 			= ':';
+
+	/**
+	 * Character constant indicating the primitive type long in a signature.
+	 * Value is <code>'J'</code>.
+	 */
+	public static final char C_LONG			= 'J';
+
+	/**
+	 * Character constant indicating the primitive type short in a signature.
+	 * Value is <code>'S'</code>.
+	 */
+	public static final char C_SHORT		= 'S';
+
+	/**
+	 * Character constant indicating result type void in a signature.
+	 * Value is <code>'V'</code>.
+	 */
+	public static final char C_VOID			= 'V';
+
+	/**
+	 * Character constant indicating the start of a resolved type variable in a
+	 * signature. Value is <code>'T'</code>.
+	 * @since 3.0
+	 */
+	public static final char C_TYPE_VARIABLE	= 'T';
+
+	/**
+	 * Character constant indicating an unbound wildcard type argument
+	 * in a signature.
+	 * Value is <code>'*'</code>.
+	 * @since 3.0
+	 */
+	public static final char C_STAR	= '*';
+
+	/**
+	 * Character constant indicating an exception in a signature.
+	 * Value is <code>'^'</code>.
+	 * @since 3.1
+	 */
+	public static final char C_EXCEPTION_START	= '^';
+
+	/**
+	 * Character constant indicating a bound wildcard type argument
+	 * in a signature with extends clause.
+	 * Value is <code>'+'</code>.
+	 * @since 3.1
+	 */
+	public static final char C_EXTENDS	= '+';
+
+	/**
+	 * Character constant indicating a bound wildcard type argument
+	 * in a signature with super clause.
+	 * Value is <code>'-'</code>.
+	 * @since 3.1
+	 */
+	public static final char C_SUPER	= '-';
+
+	/**
+	 * Character constant indicating the dot in a signature.
+	 * Value is <code>'.'</code>.
+	 */
+	public static final char C_DOT			= '.';
+
+	/**
+	 * Character constant indicating the dollar in a signature.
+	 * Value is <code>'$'</code>.
+	 */
+	public static final char C_DOLLAR			= '$';
+
+	/**
+	 * Character constant indicating an array type in a signature.
+	 * Value is <code>'['</code>.
+	 */
+	public static final char C_ARRAY		= '[';
+
+	/**
+	 * Character constant indicating the start of a resolved, named type in a
+	 * signature. Value is <code>'L'</code>.
+	 */
+	public static final char C_RESOLVED		= 'L';
+
+	/**
+	 * Character constant indicating the start of an unresolved, named type in a
+	 * signature. Value is <code>'Q'</code>.
+	 */
+	public static final char C_UNRESOLVED	= 'Q';
+
+	/**
+	 * Character constant indicating the end of a named type in a signature.
+	 * Value is <code>';'</code>.
+	 */
+	public static final char C_NAME_END		= ';';
+
+	/**
+	 * Character constant indicating the start of a parameter type list in a
+	 * signature. Value is <code>'('</code>.
+	 */
+	public static final char C_PARAM_START	= '(';
+
+	/**
+	 * Character constant indicating the end of a parameter type list in a
+	 * signature. Value is <code>')'</code>.
+	 */
+	public static final char C_PARAM_END	= ')';
+
+	/**
+	 * Character constant indicating the start of a formal type parameter
+	 * (or type argument) list in a signature. Value is <code>'<'</code>.
+	 * @since 3.0
+	 */
+	public static final char C_GENERIC_START	= '<';
+
+	/**
+	 * Character constant indicating the end of a generic type list in a
+	 * signature. Value is <code>'>'</code>.
+	 * @since 3.0
+	 */
+	public static final char C_GENERIC_END	= '>';
+
+	/**
+	 * Character constant indicating a capture of a wildcard type in a
+	 * signature. Value is <code>'!'</code>.
+	 * @since 3.1
+	 */
+	public static final char C_CAPTURE	= '!';
+
 	public interface Displayable {
 		String displayString(Object o);
 	}
@@ -677,7 +852,7 @@ public class Util implements SuffixConstants {
 	public static void reverseQuickSort(char[][] list, int left, int right) {
 		int original_left= left;
 		int original_right= right;
-		char[] mid= list[(right + left) / 2];
+		char[] mid= list[left + ((right-left)/2)];
 		do {
 			while (CharOperation.compareTo(list[left], mid) > 0) {
 				left++;
@@ -703,7 +878,7 @@ public class Util implements SuffixConstants {
 	public static void reverseQuickSort(char[][] list, int left, int right, int[] result) {
 		int original_left= left;
 		int original_right= right;
-		char[] mid= list[(right + left) / 2];
+		char[] mid= list[left + ((right-left)/2)];
 		do {
 			while (CharOperation.compareTo(list[left], mid) > 0) {
 				left++;
@@ -976,4 +1151,409 @@ public class Util implements SuffixConstants {
 			}
 		}
 	}
+	public static int getParameterCount(char[] methodSignature) {
+		try {
+			int count = 0;
+			int i = CharOperation.indexOf(C_PARAM_START, methodSignature);
+			if (i < 0) {
+				throw new IllegalArgumentException();
+			} else {
+				i++;
+			}
+			for (;;) {
+				if (methodSignature[i] == C_PARAM_END) {
+					return count;
+				}
+				int e= Util.scanTypeSignature(methodSignature, i);
+				if (e < 0) {
+					throw new IllegalArgumentException();
+				} else {
+					i = e + 1;
+				}
+				count++;
+			}
+		} catch (ArrayIndexOutOfBoundsException e) {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Scans the given string for a type signature starting at the given index
+	 * and returns the index of the last character.
+	 * <pre>
+	 * TypeSignature:
+	 *  |  BaseTypeSignature
+	 *  |  ArrayTypeSignature
+	 *  |  ClassTypeSignature
+	 *  |  TypeVariableSignature
+	 * </pre>
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a type signature
+	 */
+	public static int scanTypeSignature(char[] string, int start) {
+		// need a minimum 1 char
+		if (start >= string.length) {
+			throw new IllegalArgumentException();
+		}
+		char c = string[start];
+		switch (c) {
+			case C_ARRAY :
+				return scanArrayTypeSignature(string, start);
+			case C_RESOLVED :
+			case C_UNRESOLVED :
+				return scanClassTypeSignature(string, start);
+			case C_TYPE_VARIABLE :
+				return scanTypeVariableSignature(string, start);
+			case C_BOOLEAN :
+			case C_BYTE :
+			case C_CHAR :
+			case C_DOUBLE :
+			case C_FLOAT :
+			case C_INT :
+			case C_LONG :
+			case C_SHORT :
+			case C_VOID :
+				return scanBaseTypeSignature(string, start);
+			case C_CAPTURE :
+				return scanCaptureTypeSignature(string, start);
+			case C_EXTENDS:
+			case C_SUPER:
+			case C_STAR:
+				return scanTypeBoundSignature(string, start);
+			default :
+				throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Scans the given string for a base type signature starting at the given index
+	 * and returns the index of the last character.
+	 * <pre>
+	 * BaseTypeSignature:
+	 *     <b>B</b> | <b>C</b> | <b>D</b> | <b>F</b> | <b>I</b>
+	 *   | <b>J</b> | <b>S</b> | <b>V</b> | <b>Z</b>
+	 * </pre>
+	 * Note that although the base type "V" is only allowed in method return types,
+	 * there is no syntactic ambiguity. This method will accept them anywhere
+	 * without complaint.
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a base type signature
+	 */
+	public static int scanBaseTypeSignature(char[] string, int start) {
+		// need a minimum 1 char
+		if (start >= string.length) {
+			throw new IllegalArgumentException();
+		}
+		char c = string[start];
+		if ("BCDFIJSVZ".indexOf(c) >= 0) { //$NON-NLS-1$
+			return start;
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Scans the given string for an array type signature starting at the given
+	 * index and returns the index of the last character.
+	 * <pre>
+	 * ArrayTypeSignature:
+	 *     <b>[</b> TypeSignature
+	 * </pre>
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not an array type signature
+	 */
+	public static int scanArrayTypeSignature(char[] string, int start) {
+		int length = string.length;
+		// need a minimum 2 char
+		if (start >= length - 1) {
+			throw new IllegalArgumentException();
+		}
+		char c = string[start];
+		if (c != C_ARRAY) {
+			throw new IllegalArgumentException();
+		}
+	
+		c = string[++start];
+		while(c == C_ARRAY) {
+			// need a minimum 2 char
+			if (start >= length - 1) {
+				throw new IllegalArgumentException();
+			}
+			c = string[++start];
+		}
+		return scanTypeSignature(string, start);
+	}
+
+	/**
+	 * Scans the given string for a capture of a wildcard type signature starting at the given
+	 * index and returns the index of the last character.
+	 * <pre>
+	 * CaptureTypeSignature:
+	 *     <b>!</b> TypeBoundSignature
+	 * </pre>
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a capture type signature
+	 */
+	public static int scanCaptureTypeSignature(char[] string, int start) {
+		// need a minimum 2 char
+		if (start >= string.length - 1) {
+			throw new IllegalArgumentException();
+		}
+		char c = string[start];
+		if (c != C_CAPTURE) {
+			throw new IllegalArgumentException();
+		}
+		return scanTypeBoundSignature(string, start + 1);
+	}
+
+	/**
+	 * Scans the given string for a type variable signature starting at the given
+	 * index and returns the index of the last character.
+	 * <pre>
+	 * TypeVariableSignature:
+	 *     <b>T</b> Identifier <b>;</b>
+	 * </pre>
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a type variable signature
+	 */
+	public static int scanTypeVariableSignature(char[] string, int start) {
+		// need a minimum 3 chars "Tx;"
+		if (start >= string.length - 2) {
+			throw new IllegalArgumentException();
+		}
+		// must start in "T"
+		char c = string[start];
+		if (c != C_TYPE_VARIABLE) {
+			throw new IllegalArgumentException();
+		}
+		int id = scanIdentifier(string, start + 1);
+		c = string[id + 1];
+		if (c == C_SEMICOLON) {
+			return id + 1;
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Scans the given string for an identifier starting at the given
+	 * index and returns the index of the last character.
+	 * Stop characters are: ";", ":", "<", ">", "/", ".".
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not an identifier
+	 */
+	public static int scanIdentifier(char[] string, int start) {
+		// need a minimum 1 char
+		if (start >= string.length) {
+			throw new IllegalArgumentException();
+		}
+		int p = start;
+		while (true) {
+			char c = string[p];
+			if (c == '<' || c == '>' || c == ':' || c == ';' || c == '.' || c == '/') {
+				return p - 1;
+			}
+			p++;
+			if (p == string.length) {
+				return p - 1;
+			}
+		}
+	}
+
+	/**
+	 * Scans the given string for a class type signature starting at the given
+	 * index and returns the index of the last character.
+	 * <pre>
+	 * ClassTypeSignature:
+	 *     { <b>L</b> | <b>Q</b> } Identifier
+	 *           { { <b>/</b> | <b>.</b> Identifier [ <b><</b> TypeArgumentSignature* <b>></b> ] }
+	 *           <b>;</b>
+	 * </pre>
+	 * Note that although all "/"-identifiers most come before "."-identifiers,
+	 * there is no syntactic ambiguity. This method will accept them without
+	 * complaint.
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a class type signature
+	 */
+	public static int scanClassTypeSignature(char[] string, int start) {
+		// need a minimum 3 chars "Lx;"
+		if (start >= string.length - 2) {
+			throw new IllegalArgumentException();
+		}
+		// must start in "L" or "Q"
+		char c = string[start];
+		if (c != C_RESOLVED && c != C_UNRESOLVED) {
+			return -1;
+		}
+		int p = start + 1;
+		while (true) {
+			if (p >= string.length) {
+				throw new IllegalArgumentException();
+			}
+			c = string[p];
+			if (c == C_SEMICOLON) {
+				// all done
+				return p;
+			} else if (c == C_GENERIC_START) {
+				int e = scanTypeArgumentSignatures(string, p);
+				p = e;
+			} else if (c == C_DOT || c == '/') {
+				int id = scanIdentifier(string, p + 1);
+				p = id;
+			}
+			p++;
+		}
+	}
+
+	/**
+	 * Scans the given string for a type bound signature starting at the given
+	 * index and returns the index of the last character.
+	 * <pre>
+	 * TypeBoundSignature:
+	 *     <b>[-+]</b> TypeSignature <b>;</b>
+	 *     <b>*</b></b>
+	 * </pre>
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a type variable signature
+	 */
+	public static int scanTypeBoundSignature(char[] string, int start) {
+		// need a minimum 1 char for wildcard
+		if (start >= string.length) {
+			throw new IllegalArgumentException();
+		}
+		char c = string[start];
+		switch (c) {
+			case C_STAR :
+				return start;
+			case C_SUPER :
+			case C_EXTENDS :
+				// need a minimum 3 chars "+[I"
+				if (start >= string.length - 2) {
+					throw new IllegalArgumentException();
+				}
+				break;
+			default :
+				// must start in "+/-"
+					throw new IllegalArgumentException();
+	
+		}
+		c = string[++start];
+		switch (c) {
+			case C_CAPTURE :
+				return scanCaptureTypeSignature(string, start);
+			case C_SUPER :
+			case C_EXTENDS :
+				return scanTypeBoundSignature(string, start);
+			case C_RESOLVED :
+			case C_UNRESOLVED :
+				return scanClassTypeSignature(string, start);
+			case C_TYPE_VARIABLE :
+				return scanTypeVariableSignature(string, start);
+			case C_ARRAY :
+				return scanArrayTypeSignature(string, start);
+			case C_STAR:
+				return start;
+			default:
+				throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Scans the given string for a list of type argument signatures starting at
+	 * the given index and returns the index of the last character.
+	 * <pre>
+	 * TypeArgumentSignatures:
+	 *     <b><</b> TypeArgumentSignature* <b>></b>
+	 * </pre>
+	 * Note that although there is supposed to be at least one type argument, there
+	 * is no syntactic ambiguity if there are none. This method will accept zero
+	 * type argument signatures without complaint.
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a list of type arguments
+	 * signatures
+	 */
+	public static int scanTypeArgumentSignatures(char[] string, int start) {
+		// need a minimum 2 char "<>"
+		if (start >= string.length - 1) {
+			throw new IllegalArgumentException();
+		}
+		char c = string[start];
+		if (c != C_GENERIC_START) {
+			throw new IllegalArgumentException();
+		}
+		int p = start + 1;
+		while (true) {
+			if (p >= string.length) {
+				throw new IllegalArgumentException();
+			}
+			c = string[p];
+			if (c == C_GENERIC_END) {
+				return p;
+			}
+			int e = scanTypeArgumentSignature(string, p);
+			p = e + 1;
+		}
+	}
+
+	/**
+	 * Scans the given string for a type argument signature starting at the given
+	 * index and returns the index of the last character.
+	 * <pre>
+	 * TypeArgumentSignature:
+	 *     <b>*</b>
+	 *  |  <b>+</b> TypeSignature
+	 *  |  <b>-</b> TypeSignature
+	 *  |  TypeSignature
+	 * </pre>
+	 * Note that although base types are not allowed in type arguments, there is
+	 * no syntactic ambiguity. This method will accept them without complaint.
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a type argument signature
+	 */
+	public static int scanTypeArgumentSignature(char[] string, int start) {
+		// need a minimum 1 char
+		if (start >= string.length) {
+			throw new IllegalArgumentException();
+		}
+		char c = string[start];
+		switch (c) {
+			case C_STAR :
+				return start;
+			case C_EXTENDS :
+			case C_SUPER :
+				return scanTypeBoundSignature(string, start);
+			default :
+				return scanTypeSignature(string, start);
+		}
+	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.core/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.jdt.core/customBuildCallbacks.xml
index 8a9bb74..44361d0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/customBuildCallbacks.xml
+++ b/eclipse/plugins/org.eclipse.jdt.core/customBuildCallbacks.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-    Copyright (c) 2006, 2009 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2006, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
@@ -182,13 +183,44 @@
 	<!-- ===================================================================== -->
 	<!-- Steps to do after the target compile.jdtCompilerAdapter.jar           -->
 	<!-- ===================================================================== -->
+	<!-- Steps to do during the compilation target <name>, after the compile   -->
+	<!-- but before jaring.  Substitute "name" with the name of the compilation-->
+	<!-- target, eg @dot                                                       -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
 	<target name="post.compile.jdtCompilerAdapter.jar">
 		<ant antfile="${basedir}/scripts/export-ecj.xml" target="extract-ant-adapter-compiler"/>
+		<copy todir="${target.folder}">
+			<fileset dir="${basedir}/scripts/antadapter">
+				<include name="plugin.properties"/>
+				<include name="plugin.xml"/>
+			</fileset>
+		</copy>	
 	</target>
-	
+
 	<!-- ===================================================================== -->
 	<!-- Steps to do after the target jdtCompilerAdapter.jar                   -->
+	<!--   jar.Location : the location of the file jdtCompilerAdapter.jar      -->
 	<!-- ===================================================================== -->
 	<target name="post.jdtCompilerAdapter.jar">
+		<property name="unjarDestBin" value="${basedir}/tempbin"/>
+		<mkdir dir="${unjarDestBin}"/>
+		<unjar src="${jar.Location}" dest="${unjarDestBin}"/>
+		<delete file="${jar.Location}" />
+		<delete file="${unjarDestBin}/META-INF/MANIFEST.MF" failonerror="false"/>
+		<copy file="${basedir}/scripts/antadapter/META-INF/MANIFEST.MF" todir="${unjarDestBin}/META-INF"/>
+		<eclipse.versionReplacer path="${unjarDestBin}" version="${bundleVersion}"/>
+		<zip destfile="${jar.Location}">
+			<fileset dir="${unjarDestBin}" includes="META-INF/MANIFEST.MF"/>
+			<fileset dir="${unjarDestBin}">
+				<include name="**/*"/>
+				<exclude name="META-INF/MANIFEST.MF"/>
+			</fileset>
+		</zip>
+		<delete dir="${unjarDestBin}" failonerror="false"/>
 	</target>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
index c9884ce..fb9fc2c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
@@ -1132,6 +1132,7 @@ public final class AST {
 	 * <li><code>"long"</code></li>
 	 * <li><code>"short"</code></li>
 	 * <li><code>"void"</code></li>
+	 * <li><code>"java.lang.AssertionError"</code> (since 3.7)</li>
 	 * <li><code>"java.lang.Boolean"</code> (since 3.1)</li>
 	 * <li><code>"java.lang.Byte"</code> (since 3.1)</li>
 	 * <li><code>"java.lang.Character"</code> (since 3.1)</li>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
index c4e00ff..f234a3b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,7 +122,10 @@ class ASTConverter {
 		}
 	}
 
-	protected void buildBodyDeclarations(org.eclipse.jdt.internal.compiler.ast.TypeDeclaration typeDeclaration, AbstractTypeDeclaration typeDecl) {
+	protected void buildBodyDeclarations(
+			org.eclipse.jdt.internal.compiler.ast.TypeDeclaration typeDeclaration,
+			AbstractTypeDeclaration typeDecl,
+			boolean isInterface) {
 		// add body declaration in the lexical order
 		org.eclipse.jdt.internal.compiler.ast.TypeDeclaration[] members = typeDeclaration.memberTypes;
 		org.eclipse.jdt.internal.compiler.ast.FieldDeclaration[] fields = typeDeclaration.fields;
@@ -177,7 +180,7 @@ class ASTConverter {
 				case 1 :
 					methodsIndex++;
 					if (!nextMethodDeclaration.isDefaultConstructor() && !nextMethodDeclaration.isClinit()) {
-						typeDecl.bodyDeclarations().add(convert(nextMethodDeclaration));
+						typeDecl.bodyDeclarations().add(convert(isInterface, nextMethodDeclaration));
 					}
 					break;
 				case 2 :
@@ -249,7 +252,7 @@ class ASTConverter {
 				case 1 :
 					methodsIndex++;
 					if (!nextMethodDeclaration.isDefaultConstructor() && !nextMethodDeclaration.isClinit()) {
-						enumDeclaration.bodyDeclarations().add(convert(nextMethodDeclaration));
+						enumDeclaration.bodyDeclarations().add(convert(false, nextMethodDeclaration));
 					}
 					break;
 				case 2 :
@@ -316,7 +319,7 @@ class ASTConverter {
 				case 1 :
 					methodsIndex++;
 					if (!nextMethodDeclaration.isDefaultConstructor() && !nextMethodDeclaration.isClinit()) {
-						anonymousClassDeclaration.bodyDeclarations().add(convert(nextMethodDeclaration));
+						anonymousClassDeclaration.bodyDeclarations().add(convert(false, nextMethodDeclaration));
 					}
 					break;
 				case 2 :
@@ -415,7 +418,7 @@ class ASTConverter {
 		}
 	}
 
-	public ASTNode convert(org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration methodDeclaration) {
+	public ASTNode convert(boolean isInterface, org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration methodDeclaration) {
 		checkCanceled();
 		if (methodDeclaration instanceof org.eclipse.jdt.internal.compiler.ast.AnnotationMethodDeclaration) {
 			return convert((org.eclipse.jdt.internal.compiler.ast.AnnotationMethodDeclaration) methodDeclaration);
@@ -457,6 +460,10 @@ class ASTConverter {
 		}
 		org.eclipse.jdt.internal.compiler.ast.ExplicitConstructorCall explicitConstructorCall = null;
 		if (isConstructor) {
+			if (isInterface) {
+				// interface cannot have a constructor
+				methodDecl.setFlags(methodDecl.getFlags() | ASTNode.MALFORMED);
+			}
 			org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration constructorDeclaration = (org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration) methodDeclaration;
 			explicitConstructorCall = constructorDeclaration.constructorCall;
 			switch(this.ast.apiLevel) {
@@ -481,19 +488,20 @@ class ASTConverter {
 				methodDecl.setExtraDimensions(extraDimensions);
 				setTypeForMethodDeclaration(methodDecl, returnType, extraDimensions);
 			} else {
+				// no return type for a method that is not a constructor
+				methodDecl.setFlags(methodDecl.getFlags() | ASTNode.MALFORMED);
 				switch(this.ast.apiLevel) {
-					case AST.JLS2_INTERNAL :
-						methodDecl.setFlags(methodDecl.getFlags() | ASTNode.MALFORMED);
-						break;
 					case AST.JLS3 :
 						methodDecl.setReturnType2(null);
 				}
 			}
 		}
 		int declarationSourceStart = methodDeclaration.declarationSourceStart;
-		int declarationSourceEnd = methodDeclaration.bodyEnd;
-		methodDecl.setSourceRange(declarationSourceStart, declarationSourceEnd - declarationSourceStart + 1);
-		int closingPosition = retrieveRightBraceOrSemiColonPosition(methodDeclaration.bodyEnd + 1, methodDeclaration.declarationSourceEnd);
+		int bodyEnd = methodDeclaration.bodyEnd;
+		methodDecl.setSourceRange(declarationSourceStart, bodyEnd - declarationSourceStart + 1);
+		int declarationSourceEnd = methodDeclaration.declarationSourceEnd;
+		int rightBraceOrSemiColonPositionStart = bodyEnd == declarationSourceEnd ? bodyEnd : bodyEnd + 1;
+		int closingPosition = retrieveRightBraceOrSemiColonPosition(rightBraceOrSemiColonPositionStart, declarationSourceEnd);
 		if (closingPosition != -1) {
 			int startPosition = methodDecl.getStartPosition();
 			methodDecl.setSourceRange(startPosition, closingPosition - startPosition + 1);
@@ -502,7 +510,7 @@ class ASTConverter {
 
 			start = retrieveStartBlockPosition(methodHeaderEnd, methodDeclaration.bodyStart);
 			if (start == -1) start = methodDeclaration.bodyStart; // use recovery position for body start
-			end = retrieveRightBrace(methodDeclaration.bodyEnd, methodDeclaration.declarationSourceEnd);
+			end = retrieveRightBrace(methodDeclaration.bodyEnd, declarationSourceEnd);
 			Block block = null;
 			if (start != -1 && end != -1) {
 				/*
@@ -528,14 +536,17 @@ class ASTConverter {
 					}
 				}
 			}
-			if (block != null && (Modifier.isAbstract(methodDecl.getModifiers()) || Modifier.isNative(methodDecl.getModifiers()))) {
+			if (block != null
+					&& (Modifier.isAbstract(methodDecl.getModifiers())
+							|| Modifier.isNative(methodDecl.getModifiers())
+							|| isInterface)) {
 				methodDecl.setFlags(methodDecl.getFlags() | ASTNode.MALFORMED);
 			}
 		} else {
 			// syntax error in this method declaration
 			methodDecl.setFlags(methodDecl.getFlags() | ASTNode.MALFORMED);
 			if (!methodDeclaration.isNative() && !methodDeclaration.isAbstract()) {
-				start = retrieveStartBlockPosition(methodHeaderEnd, declarationSourceEnd);
+				start = retrieveStartBlockPosition(methodHeaderEnd, bodyEnd);
 				if (start == -1) start = methodDeclaration.bodyStart; // use recovery position for body start
 				end = methodDeclaration.bodyEnd;
 				// try to get the best end position
@@ -708,7 +719,7 @@ class ASTConverter {
 		typeDecl.setName(typeName);
 		typeDecl.setSourceRange(typeDeclaration.declarationSourceStart, typeDeclaration.bodyEnd - typeDeclaration.declarationSourceStart + 1);
 
-		buildBodyDeclarations(typeDeclaration, typeDecl);
+		buildBodyDeclarations(typeDeclaration, typeDecl, false);
 		// The javadoc comment is now got from list store in compilation unit declaration
 		if (this.resolveBindings) {
 			recordNodes(typeDecl, typeDeclaration);
@@ -926,9 +937,11 @@ class ASTConverter {
 		Expression lhs = convert(expression.lhs);
 		assignment.setLeftHandSide(lhs);
 		assignment.setOperator(Assignment.Operator.ASSIGN);
-		assignment.setRightHandSide(convert(expression.expression));
+		Expression rightHandSide = convert(expression.expression);
+		assignment.setRightHandSide(rightHandSide);
 		int start = lhs.getStartPosition();
-		assignment.setSourceRange(start, expression.sourceEnd - start + 1);
+		int end = rightHandSide.getStartPosition() + rightHandSide.getLength() - 1;
+		assignment.setSourceRange(start, end - start + 1);
 		return assignment;
 	}
 
@@ -968,7 +981,7 @@ class ASTConverter {
 			} else if(node instanceof org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration) {
 				AbstractMethodDeclaration nextMethodDeclaration = (AbstractMethodDeclaration) node;
 				if (!nextMethodDeclaration.isDefaultConstructor() && !nextMethodDeclaration.isClinit()) {
-					typeDecl.bodyDeclarations().add(convert(nextMethodDeclaration));
+					typeDecl.bodyDeclarations().add(convert(false, nextMethodDeclaration));
 				}
 			} else if(node instanceof org.eclipse.jdt.internal.compiler.ast.TypeDeclaration) {
 				org.eclipse.jdt.internal.compiler.ast.TypeDeclaration nextMemberDeclaration = (org.eclipse.jdt.internal.compiler.ast.TypeDeclaration) node;
@@ -990,64 +1003,7 @@ class ASTConverter {
 		}
 
 		int expressionOperatorID = (expression.bits & org.eclipse.jdt.internal.compiler.ast.ASTNode.OperatorMASK) >> org.eclipse.jdt.internal.compiler.ast.ASTNode.OperatorSHIFT;
-		switch (expressionOperatorID) {
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.EQUAL_EQUAL :
-				infixExpression.setOperator(InfixExpression.Operator.EQUALS);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.LESS_EQUAL :
-				infixExpression.setOperator(InfixExpression.Operator.LESS_EQUALS);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.GREATER_EQUAL :
-				infixExpression.setOperator(InfixExpression.Operator.GREATER_EQUALS);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.NOT_EQUAL :
-				infixExpression.setOperator(InfixExpression.Operator.NOT_EQUALS);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.LEFT_SHIFT :
-				infixExpression.setOperator(InfixExpression.Operator.LEFT_SHIFT);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.RIGHT_SHIFT :
-				infixExpression.setOperator(InfixExpression.Operator.RIGHT_SHIFT_SIGNED);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.UNSIGNED_RIGHT_SHIFT :
-				infixExpression.setOperator(InfixExpression.Operator.RIGHT_SHIFT_UNSIGNED);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.OR_OR :
-				infixExpression.setOperator(InfixExpression.Operator.CONDITIONAL_OR);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.AND_AND :
-				infixExpression.setOperator(InfixExpression.Operator.CONDITIONAL_AND);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.PLUS :
-				infixExpression.setOperator(InfixExpression.Operator.PLUS);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.MINUS :
-				infixExpression.setOperator(InfixExpression.Operator.MINUS);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.REMAINDER :
-				infixExpression.setOperator(InfixExpression.Operator.REMAINDER);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.XOR :
-				infixExpression.setOperator(InfixExpression.Operator.XOR);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.AND :
-				infixExpression.setOperator(InfixExpression.Operator.AND);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.MULTIPLY :
-				infixExpression.setOperator(InfixExpression.Operator.TIMES);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.OR :
-				infixExpression.setOperator(InfixExpression.Operator.OR);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.DIVIDE :
-				infixExpression.setOperator(InfixExpression.Operator.DIVIDE);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.GREATER :
-				infixExpression.setOperator(InfixExpression.Operator.GREATER);
-				break;
-			case org.eclipse.jdt.internal.compiler.ast.OperatorIds.LESS :
-				infixExpression.setOperator(InfixExpression.Operator.LESS);
-		}
+		infixExpression.setOperator(getOperatorFor(expressionOperatorID));
 
 		if (expression.left instanceof org.eclipse.jdt.internal.compiler.ast.BinaryExpression
 				&& ((expression.left.bits & org.eclipse.jdt.internal.compiler.ast.ASTNode.ParenthesizedMASK) == 0)) {
@@ -1183,13 +1139,9 @@ class ASTConverter {
 	public CastExpression convert(org.eclipse.jdt.internal.compiler.ast.CastExpression expression) {
 		CastExpression castExpression = new CastExpression(this.ast);
 		castExpression.setSourceRange(expression.sourceStart, expression.sourceEnd - expression.sourceStart + 1);
-		org.eclipse.jdt.internal.compiler.ast.Expression type = expression.type;
+		TypeReference type = expression.type;
 		trimWhiteSpacesAndComments(type);
-		if (type instanceof org.eclipse.jdt.internal.compiler.ast.TypeReference ) {
-			castExpression.setType(convertType((org.eclipse.jdt.internal.compiler.ast.TypeReference)type));
-		} else if (type instanceof org.eclipse.jdt.internal.compiler.ast.NameReference) {
-			castExpression.setType(convertToType((org.eclipse.jdt.internal.compiler.ast.NameReference)type));
-		}
+		castExpression.setType(convertType(type));
 		castExpression.setExpression(convert(expression.expression));
 		if (this.resolveBindings) {
 			recordNodes(castExpression, expression);
@@ -2474,47 +2426,21 @@ class ASTConverter {
 			if (result == null) {
 				return createFakeEmptyStatement(statement);
 			}
-			switch(result.getNodeType()) {
-				case ASTNode.ENUM_DECLARATION:
-					switch(this.ast.apiLevel) {
-						case AST.JLS2_INTERNAL :
-							return createFakeEmptyStatement(statement);
-						case AST.JLS3 :
-							final TypeDeclarationStatement typeDeclarationStatement = new TypeDeclarationStatement(this.ast);
-							typeDeclarationStatement.setDeclaration((EnumDeclaration) result);
-							AbstractTypeDeclaration typeDecl = typeDeclarationStatement.getDeclaration();
-							typeDeclarationStatement.setSourceRange(typeDecl.getStartPosition(), typeDecl.getLength());
-							return typeDeclarationStatement;
-					}
+			// annotation and enum type declarations are not returned by the parser inside method bodies
+			TypeDeclaration typeDeclaration = (TypeDeclaration) result;
+			TypeDeclarationStatement typeDeclarationStatement = new TypeDeclarationStatement(this.ast);
+			typeDeclarationStatement.setDeclaration(typeDeclaration);
+			switch(this.ast.apiLevel) {
+				case AST.JLS2_INTERNAL :
+					TypeDeclaration typeDecl = typeDeclarationStatement.internalGetTypeDeclaration();
+					typeDeclarationStatement.setSourceRange(typeDecl.getStartPosition(), typeDecl.getLength());
 					break;
-				case ASTNode.ANNOTATION_TYPE_DECLARATION :
-					switch(this.ast.apiLevel) {
-						case AST.JLS2_INTERNAL :
-							return createFakeEmptyStatement(statement);
-						case AST.JLS3 :
-							TypeDeclarationStatement typeDeclarationStatement = new TypeDeclarationStatement(this.ast);
-							typeDeclarationStatement.setDeclaration((AnnotationTypeDeclaration) result);
-							AbstractTypeDeclaration typeDecl = typeDeclarationStatement.getDeclaration();
-							typeDeclarationStatement.setSourceRange(typeDecl.getStartPosition(), typeDecl.getLength());
-							return typeDeclarationStatement;
-					}
+				case AST.JLS3 :
+					AbstractTypeDeclaration typeDeclAST3 = typeDeclarationStatement.getDeclaration();
+					typeDeclarationStatement.setSourceRange(typeDeclAST3.getStartPosition(), typeDeclAST3.getLength());
 					break;
-				default:
-					TypeDeclaration typeDeclaration = (TypeDeclaration) result;
-					TypeDeclarationStatement typeDeclarationStatement = new TypeDeclarationStatement(this.ast);
-					typeDeclarationStatement.setDeclaration(typeDeclaration);
-					switch(this.ast.apiLevel) {
-						case AST.JLS2_INTERNAL :
-							TypeDeclaration typeDecl = typeDeclarationStatement.internalGetTypeDeclaration();
-							typeDeclarationStatement.setSourceRange(typeDecl.getStartPosition(), typeDecl.getLength());
-							break;
-						case AST.JLS3 :
-							AbstractTypeDeclaration typeDeclAST3 = typeDeclarationStatement.getDeclaration();
-							typeDeclarationStatement.setSourceRange(typeDeclAST3.getStartPosition(), typeDeclAST3.getLength());
-							break;
-					}
-					return typeDeclarationStatement;
 			}
+			return typeDeclarationStatement;
 		}
 		if (statement instanceof org.eclipse.jdt.internal.compiler.ast.WhileStatement) {
 			return convert((org.eclipse.jdt.internal.compiler.ast.WhileStatement) statement);
@@ -2660,7 +2586,8 @@ class ASTConverter {
 		if (typeDeclaration.modifiersSourceStart != -1) {
 			setModifiers(typeDecl, typeDeclaration);
 		}
-		typeDecl.setInterface(kind == org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.INTERFACE_DECL);
+		boolean isInterface = kind == org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.INTERFACE_DECL;
+		typeDecl.setInterface(isInterface);
 		final SimpleName typeName = new SimpleName(this.ast);
 		typeName.internalSetIdentifier(new String(typeDeclaration.name));
 		typeName.setSourceRange(typeDeclaration.sourceStart, typeDeclaration.sourceEnd - typeDeclaration.sourceStart + 1);
@@ -2706,7 +2633,7 @@ class ASTConverter {
 					}
 			}
 		}
-		buildBodyDeclarations(typeDeclaration, typeDecl);
+		buildBodyDeclarations(typeDeclaration, typeDecl, isInterface);
 		if (this.resolveBindings) {
 			recordNodes(typeDecl, typeDeclaration);
 			recordNodes(typeName, typeDeclaration);
@@ -2951,17 +2878,6 @@ class ASTConverter {
 		return parenthesizedExpression;
 	}
 
-	public Type convertToType(org.eclipse.jdt.internal.compiler.ast.NameReference reference) {
-		Name name = convert(reference);
-		final SimpleType type = new SimpleType(this.ast);
-		type.setName(name);
-		type.setSourceRange(name.getStartPosition(), name.getLength());
-		if (this.resolveBindings) {
-			this.recordNodes(type, reference);
-		}
-		return type;
-	}
-
 	protected VariableDeclarationExpression convertToVariableDeclarationExpression(org.eclipse.jdt.internal.compiler.ast.LocalDeclaration localDeclaration) {
 		final VariableDeclarationFragment variableDeclarationFragment = convertToVariableDeclarationFragment(localDeclaration);
 		final VariableDeclarationExpression variableDeclarationExpression = new VariableDeclarationExpression(this.ast);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
index 188c731..07c20d7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,11 +85,11 @@ public class ASTMatcher {
 	 * </p>
 	 *
 	 * @param list1 the first list of AST nodes
-	 *    (element type: <code>ASTNode</code>)
+	 *    (element type: {@link ASTNode})
 	 * @param list2 the second list of AST nodes
-	 *    (element type: <code>ASTNode</code>)
+	 *    (element type: {@link ASTNode})
 	 * @return <code>true</code> if the lists have the same number of elements
-	 *    and match pair-wise according to <code>ASTNode.subtreeMatch</code>
+	 *    and match pair-wise according to {@link ASTNode#subtreeMatch(ASTMatcher, Object) ASTNode.subtreeMatch}
 	 * @see ASTNode#subtreeMatch(ASTMatcher matcher, Object other)
 	 */
 	public final boolean safeSubtreeListMatch(List list1, List list2) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java
index 340ac52..ec6a1ec 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -966,9 +966,9 @@ public abstract class ASTNode {
 	/**
 	 * Primary field used in representing node properties efficiently.
 	 * If <code>null</code>, this node has no properties.
-	 * If a <code>String</code>, this is the name of this node's sole property,
+	 * If a {@link String}, this is the name of this node's sole property,
 	 * and <code>property2</code> contains its value.
-	 * If a <code>HashMap</code>, this is the table of property name-value
+	 * If a {@link Map}, this is the table of property name-value
 	 * mappings; <code>property2</code>, if non-null is its unmodifiable
 	 * equivalent.
 	 * Initially <code>null</code>.
@@ -1099,7 +1099,7 @@ public abstract class ASTNode {
 
 		/**
 		 * The underlying list in which the nodes of this list are
-		 * stored (element type: <code>ASTNode</code>).
+		 * stored (element type: {@link ASTNode}).
 		 * <p>
 		 * Be stingy on storage - assume that list will be empty.
 		 * </p>
@@ -1171,7 +1171,7 @@ public abstract class ASTNode {
 
 		/**
 		 * A list of currently active cursors (element type:
-		 * <code>Cursor</code>), or <code>null</code> if there are no
+		 * {@link Cursor}), or <code>null</code> if there are no
 		 * active cursors.
 		 * <p>
 		 * It is important for storage considerations to maintain the
@@ -1753,7 +1753,7 @@ public abstract class ASTNode {
 	 * @param propertyList list beginning with the AST node class
 	 * followed by accumulated structural property descriptors
 	 * @return unmodifiable list of structural property descriptors
-	 * (element type: <code>StructuralPropertyDescriptor</code>)
+	 * (element type: {@link StructuralPropertyDescriptor})
 	 */
 	static List reapPropertyList(List propertyList) {
 		propertyList.remove(0); // remove nodeClass
@@ -2079,7 +2079,7 @@ public abstract class ASTNode {
 	}
 
 	/**
-	 * Returns the named property of this node, or <code>null</code> if none.
+	 * Returns the value of the named property of this node, or <code>null</code> if none.
 	 *
 	 * @param propertyName the property name
 	 * @return the property value, or <code>null</code> if none
@@ -2124,6 +2124,7 @@ public abstract class ASTNode {
 	 * @param propertyName the property name
 	 * @param data the new property value, or <code>null</code> if none
 	 * @see #getProperty(String)
+	 * @throws IllegalArgumentException if the given property name is <code>null</code>
 	 */
 	public final void setProperty(String propertyName, Object data) {
 		if (propertyName == null) {
@@ -2147,11 +2148,12 @@ public abstract class ASTNode {
 			// node has only a single property
 			if (propertyName.equals(this.property1)) {
 				// we're in luck
-				this.property2 = data;
 				if (data == null) {
 					// just deleted last property
 					this.property1 = null;
 					this.property2 = null;
+				} else {
+					this.property2 = data;
 				}
 				return;
 			}
@@ -2161,7 +2163,7 @@ public abstract class ASTNode {
 			}
 			// node already has one property - getting its second
 			// convert to more flexible representation
-			HashMap m = new HashMap(2);
+			Map m = new HashMap(3);
 			m.put(this.property1, this.property2);
 			m.put(propertyName, data);
 			this.property1 = m;
@@ -2170,7 +2172,7 @@ public abstract class ASTNode {
 		}
 
 		// node has two or more properties
-		HashMap m = (HashMap) this.property1;
+		Map m = (Map) this.property1;
 		if (data == null) {
 			m.remove(propertyName);
 			// check for just one property left
@@ -2406,9 +2408,9 @@ public abstract class ASTNode {
 	 *
 	 * @param target the AST that is to own the nodes in the result
 	 * @param nodes the list of nodes to copy
-	 *    (element type: <code>ASTNode</code>)
+	 *    (element type: {@link ASTNode})
 	 * @return the list of copied subtrees
-	 *    (element type: <code>ASTNode</code>)
+	 *    (element type: {@link ASTNode})
 	 */
 	public static List copySubtrees(AST target, List nodes) {
 		List result = new ArrayList(nodes.size());
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AbstractTypeDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AbstractTypeDeclaration.java
index 5e695ff..db9754f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AbstractTypeDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AbstractTypeDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,20 +29,20 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 	/**
 	 * The type name; lazily initialized; defaults to a unspecified,
 	 * legal Java class identifier.
-	 * @since 2.0 (originally declared on <code>TypeDeclaration</code>)
+	 * @since 2.0 (originally declared on {@link TypeDeclaration})
 	 */
 	SimpleName typeName = null;
 
 	/**
-	 * The body declarations (element type: <code>BodyDeclaration</code>).
+	 * The body declarations (element type: {@link BodyDeclaration}).
 	 * Defaults to an empty list.
-	 * @since 2.0 (originally declared on <code>TypeDeclaration</code>)
+	 * @since 2.0 (originally declared on {@link TypeDeclaration})
 	 */
 	ASTNode.NodeList bodyDeclarations;
 
 	/**
 	 * Returns structural property descriptor for the "bodyDeclarations" property
-	 * of this node.
+	 * of this node (element type: {@link BodyDeclaration}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -50,7 +50,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 
 	/**
 	 * Returns structural property descriptor for the "bodyDeclarations" property
-	 * of this node.
+	 * of this node (element type: {@link BodyDeclaration}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -61,7 +61,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 
 	/**
 	 * Returns structural property descriptor for the "name" property
-	 * of this node.
+	 * of this node (child type: {@link SimpleName}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -69,7 +69,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 
 	/**
 	 * Returns structural property descriptor for the "name" property
-	 * of this node.
+	 * of this node (child type: {@link SimpleName}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -80,7 +80,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 
 	/**
 	 * Creates and returns a structural property descriptor for the
-	 * "bodyDeclaration" property declared on the given concrete node type.
+	 * "bodyDeclaration" property declared on the given concrete node type (element type: {@link BodyDeclaration}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -90,7 +90,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 
 	/**
 	 * Creates and returns a structural property descriptor for the
-	 * "name" property declared on the given concrete node type.
+	 * "name" property declared on the given concrete node type (child type: {@link SimpleName}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -118,7 +118,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 	 * Returns the name of the type declared in this type declaration.
 	 *
 	 * @return the type name node
-	 * @since 2.0 (originally declared on <code>TypeDeclaration</code>)
+	 * @since 2.0 (originally declared on {@link TypeDeclaration})
 	 */
 	public SimpleName getName() {
 		if (this.typeName == null) {
@@ -144,7 +144,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 	 * <li>the node belongs to a different AST</li>
 	 * <li>the node already has a parent</li>
 	 * </ul>
-	 * @since 2.0 (originally declared on <code>TypeDeclaration</code>)
+	 * @since 2.0 (originally declared on {@link TypeDeclaration})
 	 */
 	public void setName(SimpleName typeName) {
 		if (typeName == null) {
@@ -162,8 +162,8 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 	 * declaration.
 	 *
 	 * @return the live list of body declarations
-	 *    (element type: <code>BodyDeclaration</code>)
-	 * @since 2.0 (originally declared on <code>TypeDeclaration</code>)
+	 *    (element type: {@link BodyDeclaration})
+	 * @since 2.0 (originally declared on {@link TypeDeclaration})
 	 */
 	public List bodyDeclarations() {
 		return this.bodyDeclarations;
@@ -179,7 +179,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 	 *
 	 * @return <code>true</code> if this type declaration is a child of
 	 *   a compilation unit node, and <code>false</code> otherwise
-	 * @since 2.0 (originally declared on <code>TypeDeclaration</code>)
+	 * @since 2.0 (originally declared on {@link TypeDeclaration})
 	 */
 	public boolean isPackageMemberTypeDeclaration() {
 		ASTNode parent = getParent();
@@ -197,7 +197,7 @@ public abstract class AbstractTypeDeclaration extends BodyDeclaration {
 	 * @return <code>true</code> if this type declaration is a child of
 	 *   a type declaration node or an anonymous class declaration node,
 	 *   and <code>false</code> otherwise
-	 * @since 2.0 (originally declared on <code>TypeDeclaration</code>)
+	 * @since 2.0 (originally declared on {@link TypeDeclaration})
 	 */
 	public boolean isMemberTypeDeclaration() {
 		ASTNode parent = getParent();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Annotation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Annotation.java
index fd15911..bfa5efe 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Annotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Annotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,7 @@ public abstract class Annotation extends Expression implements IExtendedModifier
 
 	/**
 	 * Returns structural property descriptor for the "typeName" property
-	 * of this node.
+	 * of this node (child type: {@link Name}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -34,7 +34,7 @@ public abstract class Annotation extends Expression implements IExtendedModifier
 
 	/**
 	 * Returns structural property descriptor for the "typeName" property
-	 * of this node.
+	 * of this node (child type: {@link Name}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -44,7 +44,7 @@ public abstract class Annotation extends Expression implements IExtendedModifier
 
 	/**
 	 * Creates and returns a structural property descriptor for the
-	 * "typeName" property declared on the given concrete node type.
+	 * "typeName" property declared on the given concrete node type (child type: {@link Name}).
 	 *
 	 * @return the property descriptor
 	 */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationBinding.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationBinding.java
index c3aedc3..0e8f6db 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *    tyeung at bea.com - initial API and implementation
  *    IBM Corporation - implemented methods from IBinding
  *    IBM Corporation - renamed from ResolvedAnnotation to AnnotationBinding
+ *    IBM Corporation - Fix for 328969
  *******************************************************************************/
 package org.eclipse.jdt.core.dom;
 
@@ -120,14 +121,24 @@ class AnnotationBinding implements IAnnotationBinding {
 			break;
 		case ASTNode.FIELD_DECLARATION:
 			VariableDeclarationFragment fragment = (VariableDeclarationFragment) ((FieldDeclaration) parent).fragments().get(0);
-			parentElement = fragment.resolveBinding().getJavaElement();
+			IVariableBinding variableBinding = fragment.resolveBinding();
+			if (variableBinding == null) {
+				return null;
+			}
+			parentElement = variableBinding.getJavaElement();
 			break;
 		case ASTNode.METHOD_DECLARATION:
-			parentElement = ((MethodDeclaration) parent).resolveBinding().getJavaElement();
+				IMethodBinding methodBinding = ((MethodDeclaration) parent).resolveBinding();
+				if (methodBinding == null) return null;
+				parentElement = methodBinding.getJavaElement();
 			break;
 		case ASTNode.VARIABLE_DECLARATION_STATEMENT:
 			fragment = (VariableDeclarationFragment) ((VariableDeclarationStatement) parent).fragments().get(0);
-			parentElement = fragment.resolveBinding().getJavaElement();
+			variableBinding = fragment.resolveBinding();
+			if (variableBinding == null) {
+				return null;
+			}
+			parentElement = variableBinding.getJavaElement();
 			break;
 		default:
 			return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeDeclaration.java
index 9ef8aa6..6200463 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,25 +46,25 @@ import java.util.List;
 public class AnnotationTypeDeclaration extends AbstractTypeDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(AnnotationTypeDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type.
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}).
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(AnnotationTypeDeclaration.class);
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		internalNamePropertyFactory(AnnotationTypeDeclaration.class);
 
 	/**
-	 * The "bodyDeclarations" structural property of this node type.
+	 * The "bodyDeclarations" structural property of this node type (element type: {@link BodyDeclaration}).
 	 */
 	public static final ChildListPropertyDescriptor BODY_DECLARATIONS_PROPERTY =
 		internalBodyDeclarationPropertyFactory(AnnotationTypeDeclaration.class);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeMemberDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeMemberDeclaration.java
index f716936..7973867 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeMemberDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnnotationTypeMemberDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,31 +40,31 @@ import java.util.List;
 public class AnnotationTypeMemberDeclaration extends BodyDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(AnnotationTypeMemberDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type.
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}).
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(AnnotationTypeMemberDeclaration.class);
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(AnnotationTypeMemberDeclaration.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(AnnotationTypeMemberDeclaration.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "default" structural property of this node type.
+	 * The "default" structural property of this node type (child type: {@link Expression}).
 	 */
 	public static final ChildPropertyDescriptor DEFAULT_PROPERTY =
 		new ChildPropertyDescriptor(AnnotationTypeMemberDeclaration.class, "default", Expression.class, OPTIONAL, CYCLE_RISK); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnonymousClassDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnonymousClassDeclaration.java
index 23852df..14d4caf 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnonymousClassDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AnonymousClassDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ import java.util.List;
 public class AnonymousClassDeclaration extends ASTNode {
 
 	/**
-	 * The "bodyDeclarations" structural property of this node type.
+	 * The "bodyDeclarations" structural property of this node type (element type: {@link BodyDeclaration}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor BODY_DECLARATIONS_PROPERTY =
@@ -68,7 +68,7 @@ public class AnonymousClassDeclaration extends ASTNode {
 	}
 
 	/**
-	 * The body declarations (element type: <code>BodyDeclaration</code>).
+	 * The body declarations (element type: {@link BodyDeclaration}).
 	 * Defaults to none.
 	 */
 	private ASTNode.NodeList bodyDeclarations =
@@ -150,7 +150,7 @@ public class AnonymousClassDeclaration extends ASTNode {
 	 * anonymous class declaration.
 	 *
 	 * @return the live list of body declarations
-	 *    (element type: <code>BodyDeclaration</code>)
+	 *    (element type: {@link BodyDeclaration})
 	 */
 	public List bodyDeclarations() {
 		return this.bodyDeclarations;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayAccess.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayAccess.java
index 07a3b0d..9f173c2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayAccess.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayAccess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,14 +28,14 @@ import java.util.List;
 public class ArrayAccess extends Expression {
 
 	/**
-	 * The "array" structural property of this node type.
+	 * The "array" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor ARRAY_PROPERTY =
 		new ChildPropertyDescriptor(ArrayAccess.class, "array", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "index" structural property of this node type.
+	 * The "index" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor INDEX_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayCreation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayCreation.java
index cca1072..f9577a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayCreation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayCreation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,21 +49,21 @@ import java.util.List;
 public class ArrayCreation extends Expression {
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link ArrayType}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(ArrayCreation.class, "type", ArrayType.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "dimensions" structural property of this node type.
+	 * The "dimensions" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor DIMENSIONS_PROPERTY =
 		new ChildListPropertyDescriptor(ArrayCreation.class, "dimensions", Expression.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "initializer" structural property of this node type.
+	 * The "initializer" structural property of this node type (child type: {@link ArrayInitializer}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor INITIALIZER_PROPERTY =
@@ -108,7 +108,7 @@ public class ArrayCreation extends Expression {
 
 	/**
 	 * The list of dimension expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList dimensions =
 		new ASTNode.NodeList(DIMENSIONS_PROPERTY);
@@ -261,7 +261,7 @@ public class ArrayCreation extends Expression {
 	 * initializer.
 	 *
 	 * @return the live list of dimension expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List dimensions() {
 		return this.dimensions;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayInitializer.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayInitializer.java
index ee91f5f..f2c115d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class ArrayInitializer extends Expression {
 
 	/**
-	 * The "expressions" structural property of this node type.
+	 * The "expressions" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor EXPRESSIONS_PROPERTY =
@@ -65,7 +65,7 @@ public class ArrayInitializer extends Expression {
 
 	/**
 	 * The list of expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList expressions =
 		new ASTNode.NodeList(EXPRESSIONS_PROPERTY);
@@ -138,7 +138,7 @@ public class ArrayInitializer extends Expression {
 	 * Returns the live ordered list of expressions in this array initializer.
 	 *
 	 * @return the live list of expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List expressions() {
 		return this.expressions;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayType.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayType.java
index adceb01..0c7defb 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ArrayType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ import java.util.List;
 public class ArrayType extends Type {
 
 	/**
-	 * The "componentType" structural property of this node type.
+	 * The "componentType" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor COMPONENT_TYPE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AssertStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AssertStatement.java
index 88857cd..6c71fa6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AssertStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AssertStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,14 +28,14 @@ import java.util.List;
 public class AssertStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(AssertStatement.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "message" structural property of this node type.
+	 * The "message" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor MESSAGE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Assignment.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Assignment.java
index bc19c3f..3a6542c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Assignment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Assignment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -148,21 +148,21 @@ public class Assignment extends Expression {
 	}
 
 	/**
-	 * The "leftHandSide" structural property of this node type.
+	 * The "leftHandSide" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor LEFT_HAND_SIDE_PROPERTY =
 		new ChildPropertyDescriptor(Assignment.class, "leftHandSide", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "operator" structural property of this node type.
+	 * The "operator" structural property of this node type (type: {@link Assignment.Operator}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor OPERATOR_PROPERTY =
 		new SimplePropertyDescriptor(Assignment.class, "operator", Assignment.Operator.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "rightHandSide" structural property of this node type.
+	 * The "rightHandSide" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor RIGHT_HAND_SIDE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Block.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Block.java
index b5921c2..2c13e89 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Block.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Block.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class Block extends Statement {
 
 	/**
-	 * The "statements" structural property of this node type.
+	 * The "statements" structural property of this node type (element type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor STATEMENTS_PROPERTY =
@@ -63,7 +63,7 @@ public class Block extends Statement {
 	}
 
 	/**
-	 * The list of statements (element type: <code>Statement</code>).
+	 * The list of statements (element type: {@link Statement}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList statements =
@@ -146,7 +146,7 @@ public class Block extends Statement {
 	 * exception.
 	 *
 	 * @return the live list of statements in this block
-	 *    (element type: <code>Statement</code>)
+	 *    (element type: {@link Statement})
 	 */
 	public List statements() {
 		return this.statements;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BodyDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BodyDeclaration.java
index dd9ca6b..2d3f336 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BodyDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BodyDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,7 +70,7 @@ public abstract class BodyDeclaration extends ASTNode {
 	private int modifierFlags = Modifier.NONE;
 
 	/**
-	 * The extended modifiers (element type: <code>IExtendedModifier</code>).
+	 * The extended modifiers (element type: {@link IExtendedModifier}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 *
@@ -80,7 +80,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "modifiers" property
-	 * of this node as used in JLS2.
+	 * of this node as used in JLS2 (type: {@link Integer}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -88,7 +88,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "modifiers" property
-	 * of this node as used in JLS3.
+	 * of this node as used in JLS3 (element type: {@link IExtendedModifier}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -96,7 +96,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "modifiers" property
-	 * of this node as used in JLS3.
+	 * of this node as used in JLS3 (element type: {@link IExtendedModifier}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -108,7 +108,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "javadoc" property
-	 * of this node.
+	 * of this node (child type: {@link Javadoc}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -116,7 +116,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "javadoc" property
-	 * of this node.
+	 * of this node (child type: {@link Javadoc}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -127,7 +127,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Creates and returns a structural property descriptor for the
-	 * "javadoc" property declared on the given concrete node type.
+	 * "javadoc" property declared on the given concrete node type (child type: {@link Javadoc}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -137,7 +137,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Creates and returns a structural property descriptor for the
-	 * "modifiers" property declared on the given concrete node type.
+	 * "modifiers" property declared on the given concrete node type (type: {@link Integer}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -147,7 +147,7 @@ public abstract class BodyDeclaration extends ASTNode {
 
 	/**
 	 * Creates and returns a structural property descriptor for the
-	 * "modifiers" property declared on the given concrete node type.
+	 * "modifiers" property declared on the given concrete node type (element type: {@link IExtendedModifier}).
 	 *
 	 * @return the property descriptor
 	 */
@@ -259,7 +259,7 @@ public abstract class BodyDeclaration extends ASTNode {
 	 * of this declaration (added in JLS3 API).
 	 *
 	 * @return the live list of modifiers and annotations
-	 *    (element type: <code>IExtendedModifier</code>)
+	 *    (element type: {@link IExtendedModifier})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BooleanLiteral.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BooleanLiteral.java
index 7cc80cf..c360297 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BooleanLiteral.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BooleanLiteral.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,7 @@ import java.util.List;
 public class BooleanLiteral extends Expression {
 
 	/**
-	 * The "booleanValue" structural property of this node type.
+	 * The "booleanValue" structural property of this node type (type: {@link Boolean}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor BOOLEAN_VALUE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.java
index 2f0c046..1b0e2f4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class BreakStatement extends Statement {
 
 	/**
-	 * The "label" structural property of this node type.
+	 * The "label" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor LABEL_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CastExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CastExpression.java
index ca2b07b..a11e0e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CastExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CastExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,14 +28,14 @@ import java.util.List;
 public class CastExpression extends Expression {
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(CastExpression.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CatchClause.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CatchClause.java
index 9c7dafa..c5ecb45 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CatchClause.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CatchClause.java
@@ -29,14 +29,14 @@ import java.util.List;
 public class CatchClause extends ASTNode {
 
 	/**
-	 * The "exception" structural property of this node type.
+	 * The "exception" structural property of this node type (child type: {@link SingleVariableDeclaration}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXCEPTION_PROPERTY =
 		new ChildPropertyDescriptor(CatchClause.class, "exception", SingleVariableDeclaration.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Block}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CharacterLiteral.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CharacterLiteral.java
index 456fdbb..a932a70 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CharacterLiteral.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CharacterLiteral.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
 public class CharacterLiteral extends Expression {
 
 	/**
-	 * The "escapedValue" structural property of this node type.
+	 * The "escapedValue" structural property of this node type (type: {@link String}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor ESCAPED_VALUE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ClassInstanceCreation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ClassInstanceCreation.java
index e95d569..3b5caa1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ClassInstanceCreation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ClassInstanceCreation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@ import java.util.List;
  *            [ AnonymousClassDeclaration ]
  * </pre>
  * <p>
- * Not all node arragements will represent legal Java constructs. In particular,
+ * Not all node arrangements will represent legal Java constructs. In particular,
  * it is nonsense if the type is a primitive type or an array type (primitive
  * types cannot be instantiated, and array creations must be represented with
  * <code>ArrayCreation</code> nodes). The normal use is when the type is a
@@ -63,42 +63,42 @@ import java.util.List;
 public class ClassInstanceCreation extends Expression {
 
 	/**
-	 * The "typeArguments" structural property of this node type (added in JLS3 API).
+	 * The "typeArguments" structural property of this node type (element type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TYPE_ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(ClassInstanceCreation.class, "typeArguments", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(ClassInstanceCreation.class, "expression", Expression.class, OPTIONAL, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type (JLS2 API only).
+	 * The "name" structural property of this node type (child type: {@link Name}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(ClassInstanceCreation.class, "name", Name.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "type" structural property of this node type (added in JLS3 API).
+	 * The "type" structural property of this node type (child type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(ClassInstanceCreation.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "arguments" structural property of this node type.
+	 * The "arguments" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(ClassInstanceCreation.class, "arguments", Expression.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "anonymousClassDeclaration" structural property of this node type.
+	 * The "anonymousClassDeclaration" structural property of this node type (child type: {@link AnonymousClassDeclaration}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor ANONYMOUS_CLASS_DECLARATION_PROPERTY =
@@ -164,7 +164,7 @@ public class ClassInstanceCreation extends Expression {
 	private Expression optionalExpression = null;
 
 	/**
-	 * The type arguments (element type: <code>Type</code>).
+	 * The type arguments (element type: {@link Type}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -185,7 +185,7 @@ public class ClassInstanceCreation extends Expression {
 
 	/**
 	 * The list of argument expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList arguments =
 		new ASTNode.NodeList(ARGUMENTS_PROPERTY);
@@ -373,7 +373,7 @@ public class ClassInstanceCreation extends Expression {
 	 * instance creation (added in JLS3 API).
 	 *
 	 * @return the live list of type arguments
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -511,7 +511,7 @@ public class ClassInstanceCreation extends Expression {
 	 * instance creation expression.
 	 *
 	 * @return the live list of argument expressions (possibly empty)
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List arguments() {
 		return this.arguments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java
index 08c3721..3765130 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,7 +63,7 @@ public class CompilationUnit extends ASTNode {
 	private static final IProblem[] EMPTY_PROBLEMS = new IProblem[0];
 
 	/**
-	 * The "imports" structural property of this node type.
+	 * The "imports" structural property of this node type (element type: {@link ImportDeclaration}).
 	 *
 	 * @since 3.0
 	 */
@@ -71,7 +71,7 @@ public class CompilationUnit extends ASTNode {
 		new ChildListPropertyDescriptor(CompilationUnit.class, "imports", ImportDeclaration.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "package" structural property of this node type.
+	 * The "package" structural property of this node type (child type: {@link PackageDeclaration}).
 	 *
 	 * @since 3.0
 	 */
@@ -87,7 +87,7 @@ public class CompilationUnit extends ASTNode {
 	private static final List PROPERTY_DESCRIPTORS;
 
 	/**
-	 * The "types" structural property of this node type.
+	 * The "types" structural property of this node type (element type: {@link AbstractTypeDeclaration}).
 	 *
 	 * @since 3.0
 	 */
@@ -154,7 +154,7 @@ public class CompilationUnit extends ASTNode {
 	private Message[] messages;
 
 	/**
-	 * The comment list (element type: <code>Comment</code>,
+	 * The comment list (element type: {@link Comment},
 	 * or <code>null</code> if none; initially <code>null</code>.
 	 * @since 3.0
 	 */
@@ -424,7 +424,7 @@ public class CompilationUnit extends ASTNode {
 	 * </p>
 	 *
 	 * @return an unmodifiable list of comments in increasing order of source
-	 * start position, or <code>null</code> if comment information
+	 * start position (element type: {@link Comment}, or <code>null</code> if comment information
 	 * for this compilation unit is not available
 	 * @see ASTParser
 	 * @since 3.0
@@ -649,7 +649,7 @@ public class CompilationUnit extends ASTNode {
 	 * compilation unit, in order of appearance.
 	 *
 	 * @return the live list of import declaration nodes
-	 *    (elementType: <code>ImportDeclaration</code>)
+	 *    (elementType: {@link ImportDeclaration})
 	 */
 	public List imports() {
 		return this.imports;
@@ -1082,7 +1082,7 @@ public class CompilationUnit extends ASTNode {
      * </p>
 	 *
 	 * @return the live list of top-level type declaration
-	 *    nodes (elementType: <code>AbstractTypeDeclaration</code>)
+	 *    nodes (element type: {@link AbstractTypeDeclaration})
 	 */
 	public List types() {
 		return this.types;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java
index e56ef57..9948cbc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java
@@ -55,7 +55,7 @@ import org.eclipse.jdt.internal.compiler.util.Util;
 import org.eclipse.jdt.internal.core.BinaryMember;
 import org.eclipse.jdt.internal.core.CancelableNameEnvironment;
 import org.eclipse.jdt.internal.core.CancelableProblemFactory;
-import org.eclipse.jdt.internal.core.INameEnviromentWithProgress;
+import org.eclipse.jdt.internal.core.INameEnvironmentWithProgress;
 import org.eclipse.jdt.internal.core.JavaProject;
 import org.eclipse.jdt.internal.core.NameLookup;
 import org.eclipse.jdt.internal.core.SourceRefElement;
@@ -603,7 +603,7 @@ class CompilationUnitResolver extends Compiler {
 			int flags,
 			IProgressMonitor monitor) {
 
-			INameEnviromentWithProgress environment = null;
+			INameEnvironmentWithProgress environment = null;
 			CancelableProblemFactory problemFactory = null;
 			try {
 				if (monitor != null) {
@@ -612,7 +612,7 @@ class CompilationUnitResolver extends Compiler {
 				}
 				Classpath[] allEntries = new Classpath[classpaths.size()];
 				classpaths.toArray(allEntries);
-				environment = new NameEnviromentWithProgress(allEntries, null, monitor);
+				environment = new NameEnvironmentWithProgress(allEntries, null, monitor);
 				problemFactory = new CancelableProblemFactory(monitor);
 				CompilerOptions compilerOptions = getCompilerOptions(options, (flags & ICompilationUnit.ENABLE_STATEMENTS_RECOVERY) != 0);
 				compilerOptions.ignoreMethodBodies = (flags & ICompilationUnit.IGNORE_METHOD_BODIES) != 0;
@@ -652,14 +652,14 @@ class CompilationUnitResolver extends Compiler {
 			IProgressMonitor monitor) throws JavaModelException {
 
 		CompilationUnitDeclaration unit = null;
-		INameEnviromentWithProgress environment = null;
+		INameEnvironmentWithProgress environment = null;
 		CancelableProblemFactory problemFactory = null;
 		CompilationUnitResolver resolver = null;
 		try {
 			if (javaProject == null) {
 				Classpath[] allEntries = new Classpath[classpaths.size()];
 				classpaths.toArray(allEntries);
-				environment = new NameEnviromentWithProgress(allEntries, null, monitor);
+				environment = new NameEnvironmentWithProgress(allEntries, null, monitor);
 			} else {
 				environment = new CancelableNameEnvironment((JavaProject) javaProject, owner, monitor);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConditionalExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConditionalExpression.java
index 8228fde..84696c6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConditionalExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConditionalExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,21 +28,21 @@ import java.util.List;
 public class ConditionalExpression extends Expression {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(ConditionalExpression.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "thenExpression" structural property of this node type.
+	 * The "thenExpression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor THEN_EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(ConditionalExpression.class, "thenExpression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "elseExpression" structural property of this node type.
+	 * The "elseExpression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor ELSE_EXPRESSION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConstructorInvocation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConstructorInvocation.java
index e8fa8b2..fa72fa8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConstructorInvocation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ConstructorInvocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,14 +34,14 @@ import java.util.List;
 public class ConstructorInvocation extends Statement {
 
 	/**
-	 * The "typeArguments" structural property of this node type (added in JLS3 API).
+	 * The "typeArguments" structural property of this node type (element type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TYPE_ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(ConstructorInvocation.class, "typeArguments", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "arguments" structural property of this node type.
+	 * The "arguments" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor ARGUMENTS_PROPERTY =
@@ -96,7 +96,7 @@ public class ConstructorInvocation extends Statement {
 	}
 
 	/**
-	 * The type arguments (element type: <code>Type</code>).
+	 * The type arguments (element type: {@link Type}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -105,7 +105,7 @@ public class ConstructorInvocation extends Statement {
 
 	/**
 	 * The list of argument expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList arguments =
 		new ASTNode.NodeList(ARGUMENTS_PROPERTY);
@@ -192,7 +192,7 @@ public class ConstructorInvocation extends Statement {
 	 * invocation (added in JLS3 API).
 	 *
 	 * @return the live list of type arguments
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -210,7 +210,7 @@ public class ConstructorInvocation extends Statement {
 	 * constructor invocation statement.
 	 *
 	 * @return the live list of argument expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List arguments() {
 		return this.arguments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ContinueStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ContinueStatement.java
index 605c91c..08a5bc3 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ContinueStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ContinueStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class ContinueStatement extends Statement {
 
 	/**
-	 * The "label" structural property of this node type.
+	 * The "label" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor LABEL_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.java
index fa175b1..7ee6293 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -164,6 +164,9 @@ class DefaultASTVisitor extends ASTVisitor {
 	public void endVisit(MethodRefParameter node) {
 		endVisitNode(node);
 	}
+	public void endVisit(Modifier node) {
+		endVisitNode(node);
+	}
 	public void endVisit(NormalAnnotation node) {
 		endVisitNode(node);
 	}
@@ -418,6 +421,9 @@ class DefaultASTVisitor extends ASTVisitor {
 	public boolean visit(MethodRef node) {
 		return visitNode(node);
 	}
+	public boolean visit(Modifier node) {
+		return visitNode(node);
+	}
 	public boolean visit(MethodRefParameter node) {
 		return visitNode(node);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java
index 6c0897e..fd95d5e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - Contribution for Bug 342671 - ClassCastException: org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding cannot be cast to org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
  *******************************************************************************/
 package org.eclipse.jdt.core.dom;
 
@@ -116,7 +117,10 @@ class DefaultBindingResolver extends BindingResolver {
 
 	/**
 	 * This map is used to retrieve an old ast node using the new ast node. This is not an
-	 * identity map.
+	 * identity map, as several nested DOM nodes may be associated with the same "larger"
+	 * compiler AST node.
+	 * E.g., an ArrayAllocationExpression "new MyType[1]" will appear as the right-hand value
+	 * for the SimpleType "MyType", the ArrayType "MyType[1]", and the ArrayCreation "new MyType[1]".
 	 */
 	Map newAstToOldAst;
 
@@ -1518,6 +1522,18 @@ class DefaultBindingResolver extends BindingResolver {
 			if (node instanceof ParameterizedQualifiedTypeReference) {
  				ParameterizedQualifiedTypeReference typeReference = (ParameterizedQualifiedTypeReference) node;
 				org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding = typeReference.resolvedType;
+				if (type.isArrayType()) {
+					if (this.scope == null) {
+						return null;
+					}
+					ArrayType arrayType = (ArrayType) type;
+					ArrayBinding arrayBinding = (ArrayBinding) typeBinding;
+					return getTypeBinding(this.scope.createArrayType(arrayBinding.leafComponentType, arrayType.getDimensions()));
+				}
+				if (typeBinding.isArrayType()) {
+					// 'binding' can still be an array type because 'node' may be "larger" than 'type' (see comment of newAstToOldAst).
+					typeBinding = ((ArrayBinding) typeBinding).leafComponentType;
+				}
 				int index;
 				if (type.isQualifiedType()) {
 					index = ((QualifiedType) type).index;
@@ -1550,21 +1566,17 @@ class DefaultBindingResolver extends BindingResolver {
 			if (binding != null) {
 				if (type.isArrayType()) {
 					ArrayType arrayType = (ArrayType) type;
-					if (this.scope == null) return null;
-					if (binding.isArrayType()) {
-						ArrayBinding arrayBinding = (ArrayBinding) binding;
-						return getTypeBinding(this.scope.createArrayType(arrayBinding.leafComponentType, arrayType.getDimensions()));
-					} else {
-						return getTypeBinding(this.scope.createArrayType(binding, arrayType.getDimensions()));
-					}
-				} else {
-					if (binding.isArrayType()) {
-						ArrayBinding arrayBinding = (ArrayBinding) binding;
-						return getTypeBinding(arrayBinding.leafComponentType);
-					} else {
-						return getTypeBinding(binding);
+					if (this.scope == null) {
+						return null;
 					}
+					ArrayBinding arrayBinding = (ArrayBinding) binding;
+					return getTypeBinding(this.scope.createArrayType(arrayBinding.leafComponentType, arrayType.getDimensions()));
+				} else if (binding.isArrayType()) {
+					// 'binding' can still be an array type because 'node' may be "larger" than 'type' (see comment of newAstToOldAst).
+					ArrayBinding arrayBinding = (ArrayBinding) binding;
+					return getTypeBinding(arrayBinding.leafComponentType);
 				}
+				return getTypeBinding(binding);
 			}
 		} else if (type.isPrimitiveType()) {
 			/* Handle the void primitive type returned by getReturnType for a method declaration
@@ -1718,6 +1730,8 @@ class DefaultBindingResolver extends BindingResolver {
 				typeBinding = this.getTypeBinding(this.scope.getType(TypeConstants.JAVA_LANG_SHORT, 3));
 			} else if ("java.lang.Void".equals(name)) {//$NON-NLS-1$
 				typeBinding = this.getTypeBinding(this.scope.getType(TypeConstants.JAVA_LANG_VOID, 3));
+			} else if ("java.lang.AssertionError".equals(name)) { //$NON-NLS-1$
+				typeBinding = this.getTypeBinding(this.scope.getType(TypeConstants.JAVA_LANG_ASSERTIONERROR, 3));
 			}
 		} catch (AbortCompilation e) {
 			// ignore missing types
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultCommentMapper.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultCommentMapper.java
index 170327e..960c8c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultCommentMapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultCommentMapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -640,5 +640,9 @@ class DefaultCommentMapper {
 			// do nothing special, just go down in sub-levels
 			return true;
 		}
+		
+		public boolean visit ( Modifier node) {
+			return false;
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultValuePairBinding.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultValuePairBinding.java
index d51772c..f74013e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultValuePairBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultValuePairBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *    tyeung at bea.com - initial API and implementation
  *    IBM Corporation - implemented methods from IBinding
  *    IBM Corporation - renamed from ResolvedDefaultValuePair to DefaultValuePairBinding
+ *    IBM Corporation - Fix for 328969
  *******************************************************************************/
 package org.eclipse.jdt.core.dom;
 
@@ -26,6 +27,12 @@ class DefaultValuePairBinding extends MemberValuePairBinding {
 		super(null, resolver);
 		this.method = binding;
 		this.value = MemberValuePairBinding.buildDOMValue(binding.getDefaultValue(), resolver);
+		if (binding.returnType != null && binding.returnType.isArrayType()) {
+			if (!this.value.getClass().isArray()) {
+				// wrap into an array
+				this.value = new Object[] { this.value };
+			}
+		}
 	}
 
 	public IMethodBinding getMethodBinding() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DoStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DoStatement.java
index 3c12b92..228d1ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DoStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DoStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,14 +28,14 @@ import java.util.List;
 public class DoStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(DoStatement.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnhancedForStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnhancedForStatement.java
index 0f2a85a..3a4522a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnhancedForStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnhancedForStatement.java
@@ -32,19 +32,19 @@ import java.util.List;
 public class EnhancedForStatement extends Statement {
 
 	/**
-	 * The "parameter" structural property of this node type.
+	 * The "parameter" structural property of this node type (child type: {@link SingleVariableDeclaration}).
 	 */
 	public static final ChildPropertyDescriptor PARAMETER_PROPERTY =
 		new ChildPropertyDescriptor(EnhancedForStatement.class, "parameter", SingleVariableDeclaration.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(EnhancedForStatement.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Statement}).
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
 		new ChildPropertyDescriptor(EnhancedForStatement.class, "body", Statement.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumConstantDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumConstantDeclaration.java
index 9e63340..e7643ba 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumConstantDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumConstantDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,31 +42,31 @@ import java.util.List;
 public class EnumConstantDeclaration extends BodyDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(EnumConstantDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}).
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(EnumConstantDeclaration.class);
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(EnumConstantDeclaration.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "arguments" structural property of this node type.
+	 * The "arguments" structural property of this node type (element type: {@link Expression}).
 	 */
 	public static final ChildListPropertyDescriptor ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(EnumConstantDeclaration.class, "arguments", Expression.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "anonymousClassDeclaration" structural property of this node type.
+	 * The "anonymousClassDeclaration" structural property of this node type (child type: {@link AnonymousClassDeclaration}).
 	 */
 	public static final ChildPropertyDescriptor ANONYMOUS_CLASS_DECLARATION_PROPERTY =
 		new ChildPropertyDescriptor(EnumConstantDeclaration.class, "anonymousClassDeclaration", AnonymousClassDeclaration.class, OPTIONAL, CYCLE_RISK); //$NON-NLS-1$
@@ -111,7 +111,7 @@ public class EnumConstantDeclaration extends BodyDeclaration {
 
 	/**
 	 * The list of argument expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList arguments =
 		new ASTNode.NodeList(ARGUMENTS_PROPERTY);
@@ -308,7 +308,7 @@ public class EnumConstantDeclaration extends BodyDeclaration {
 	 * to not explicitly specifying arguments.
 	 *
 	 * @return the live list of argument expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List arguments() {
 		return this.arguments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumDeclaration.java
index 9515f5a..45e0499 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/EnumDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,37 +44,37 @@ import java.util.List;
 public class EnumDeclaration extends AbstractTypeDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(EnumDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(EnumDeclaration.class);
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		internalNamePropertyFactory(EnumDeclaration.class);
 
 	/**
-	 * The "superInterfaceTypes" structural property of this node type.
+	 * The "superInterfaceTypes" structural property of this node type (element type: {@link Type}).
 	 */
 	public static final ChildListPropertyDescriptor SUPER_INTERFACE_TYPES_PROPERTY =
 		new ChildListPropertyDescriptor(EnumDeclaration.class, "superInterfaceTypes", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "enumConstants" structural property of this node type.
+	 * The "enumConstants" structural property of this node type (element type: {@link EnumConstantDeclaration}).
 	 */
 	public static final ChildListPropertyDescriptor ENUM_CONSTANTS_PROPERTY =
 		new ChildListPropertyDescriptor(EnumDeclaration.class, "enumConstants", EnumConstantDeclaration.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "bodyDeclarations" structural property of this node type.
+	 * The "bodyDeclarations" structural property of this node type (element type: {@link BodyDeclaration}).
 	 */
 	public static final ChildListPropertyDescriptor BODY_DECLARATIONS_PROPERTY =
 		internalBodyDeclarationPropertyFactory(EnumDeclaration.class);
@@ -113,7 +113,7 @@ public class EnumDeclaration extends AbstractTypeDeclaration {
 	}
 
 	/**
-	 * The superinterface types (element type: <code>Type</code>).
+	 * The superinterface types (element type: {@link Type}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList superInterfaceTypes =
@@ -121,7 +121,7 @@ public class EnumDeclaration extends AbstractTypeDeclaration {
 
 	/**
 	 * The enum constant declarations
-	 * (element type: <code>EnumConstantDeclaration</code>).
+	 * (element type: {@link EnumConstantDeclaration}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList enumConstants =
@@ -288,7 +288,7 @@ public class EnumDeclaration extends AbstractTypeDeclaration {
 	 * declaration.
 	 *
 	 * @return the live list of super interface types
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 */
 	public List superInterfaceTypes() {
 		return this.superInterfaceTypes;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Expression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Expression.java
index 210d6c9..cc91b87 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Expression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Expression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,31 +17,31 @@ package org.eclipse.jdt.core.dom;
  * <p>
  * <pre>
  * Expression:
- *    Name
- *    IntegerLiteral (includes decimal, hex, and octal forms; and long)
- *    FloatingPointLiteral (includes both float and double)
- *    CharacterLiteral
- *    NullLiteral
- *    BooleanLiteral
- *    StringLiteral
- *    TypeLiteral
- *    ThisExpression
- *    SuperFieldAccess
- *    FieldAccess
- *    Assignment
- *    ParenthesizedExpression
- *    ClassInstanceCreation
- *    ArrayCreation
- *    ArrayInitializer
- *    MethodInvocation
- *    SuperMethodInvocation
- *    ArrayAccess
- *    InfixExpression
- *    InstanceofExpression
- *    ConditionalExpression
- *    PostfixExpression
- *    PrefixExpression
- *    CastExpression
+ *    Annotation,
+ *    ArrayAccess,
+ *    ArrayCreation,
+ *    ArrayInitializer,
+ *    Assignment,
+ *    BooleanLiteral,
+ *    CastExpression,
+ *    CharacterLiteral,
+ *    ClassInstanceCreation,
+ *    ConditionalExpression,
+ *    FieldAccess,
+ *    InfixExpression,
+ *    InstanceofExpression,
+ *    MethodInvocation,
+ *    Name,
+ *    NullLiteral,
+ *    NumberLiteral,
+ *    ParenthesizedExpression,
+ *    PostfixExpression,
+ *    PrefixExpression,
+ *    StringLiteral,
+ *    SuperFieldAccess,
+ *    SuperMethodInvocation,
+ *    ThisExpression,
+ *    TypeLiteral,
  *    VariableDeclarationExpression
  * </pre>
  * </p>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ExpressionStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ExpressionStatement.java
index d2313fe..e098950 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ExpressionStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ExpressionStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import java.util.List;
 public class ExpressionStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldAccess.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldAccess.java
index d04ea2e..8efcb7f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldAccess.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldAccess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,14 +58,14 @@ import java.util.List;
 public class FieldAccess extends Expression {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(FieldAccess.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldDeclaration.java
index 628020b..ffa8be8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/FieldDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,35 +39,35 @@ import java.util.List;
 public class FieldDeclaration extends BodyDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(FieldDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (JLS2 API only).
+	 * The "modifiers" structural property of this node type (type: {@link Integer}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor MODIFIERS_PROPERTY =
 		internalModifiersPropertyFactory(FieldDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(FieldDeclaration.class);
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(FieldDeclaration.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "fragments" structural property of this node type).
+	 * The "fragments" structural property of this node type (element type: {@link VariableDeclarationFragment}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor FRAGMENTS_PROPERTY =
@@ -341,7 +341,7 @@ public class FieldDeclaration extends BodyDeclaration {
 	 * type of node will trigger an exception.
 	 *
 	 * @return the live list of variable declaration fragments in this
-	 *    statement (element type: <code>VariableDeclarationFragment</code>)
+	 *    statement (element type: {@link VariableDeclarationFragment})
 	 */
 	public List fragments() {
 		return this.variableDeclarationFragments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ForStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ForStatement.java
index 1340426..38c373d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ForStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ForStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,28 +44,28 @@ import java.util.List;
 public class ForStatement extends Statement {
 
 	/**
-	 * The "initializers" structural property of this node type.
+	 * The "initializers" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor INITIALIZERS_PROPERTY =
 		new ChildListPropertyDescriptor(ForStatement.class, "initializers", Expression.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(ForStatement.class, "expression", Expression.class, OPTIONAL, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "updaters" structural property of this node type.
+	 * The "updaters" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor UPDATERS_PROPERTY =
 		new ChildListPropertyDescriptor(ForStatement.class, "updaters", Expression.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
@@ -105,7 +105,7 @@ public class ForStatement extends Statement {
 
 	/**
 	 * The list of initializer expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList initializers =
 		new ASTNode.NodeList(INITIALIZERS_PROPERTY);
@@ -117,7 +117,7 @@ public class ForStatement extends Statement {
 
 	/**
 	 * The list of update expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList updaters =
 		new ASTNode.NodeList(UPDATERS_PROPERTY);
@@ -241,7 +241,7 @@ public class ForStatement extends Statement {
 	 * </p>
 	 *
 	 * @return the live list of initializer expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List initializers() {
 		return this.initializers;
@@ -286,7 +286,7 @@ public class ForStatement extends Statement {
 	 * </p>
 	 *
 	 * @return the live list of update expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List updaters() {
 		return this.updaters;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ITypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ITypeBinding.java
index d76f9f1..1505277 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ITypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ITypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -130,7 +130,7 @@ public interface ITypeBinding extends IBinding {
 	 * <p>These include public, protected, default (package-private) access,
 	 * and private fields declared by the class, but excludes inherited fields.
 	 * Synthetic fields may or may not be included. Fields from binary types that
-	 * reference unresolvable types may not be included.</p>
+	 * reference unresolved types may not be included.</p>
 	 *
 	 * <p>Returns an empty list if the class, interface, or enum declares no fields,
 	 * and for other kinds of type bindings that do not directly have members.</p>
@@ -151,7 +151,7 @@ public interface ITypeBinding extends IBinding {
 	 * included. Returns an empty list if the class, interface, or enum,
 	 * type declares no methods or constructors, if the annotation type declares
 	 * no members, or if this type binding represents some other kind of type
-	 * binding. Methods from binary types that reference unresolvable types may
+	 * binding. Methods from binary types that reference unresolved types may
 	 * not be included.</p>
 	 * <p>The resulting bindings are in no particular order.</p>
 	 *
@@ -751,11 +751,14 @@ public interface ITypeBinding extends IBinding {
 	 * <p>
 	 * A local class is any nested class or enum type not declared as a member
 	 * of another class or interface. A local class is a subspecies of nested
-	 * type, and mutually exclusive with member types. Note that anonymous
-	 * classes are a subspecies of local classes.
+	 * type, and mutually exclusive with member types. For anonymous
+	 * classes, which are considered a subspecies of local classes, this method
+	 * returns true. 
 	 * </p>
 	 * <p>
-	 * Also note that interfaces and annotation types cannot be local.
+	 * Note: This deviates from JLS3 14.3, which states that anonymous types are 
+	 * not local types since they do not have a name. Also note that interfaces 
+	 * and annotation types cannot be local.
 	 * </p>
 	 *
 	 * @return <code>true</code> if this type binding is for a local class or
@@ -934,7 +937,7 @@ public interface ITypeBinding extends IBinding {
 
 	/**
 	 * Returns whether this type binding represents a wildcard type. A wildcard
-	 * type occus only as an argument to a parameterized type reference.
+	 * type occurs only as an argument to a parameterized type reference.
 	 * <p>
 	 * For example, a AST type like
 	 * <code>Collection<? extends Object></code> typically resolves to a
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/IfStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/IfStatement.java
index e5f8aa2..44e426e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/IfStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/IfStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,21 +27,21 @@ import java.util.List;
 public class IfStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(IfStatement.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "thenStatement" structural property of this node type.
+	 * The "thenStatement" structural property of this node type (child type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor THEN_STATEMENT_PROPERTY =
 		new ChildPropertyDescriptor(IfStatement.class, "thenStatement", Statement.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "elseStatement" structural property of this node type.
+	 * The "elseStatement" structural property of this node type (child type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor ELSE_STATEMENT_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ImportDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ImportDeclaration.java
index 0ca96d6..9cf37d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ImportDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ImportDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,21 +33,21 @@ import java.util.List;
 public class ImportDeclaration extends ASTNode {
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(ImportDeclaration.class, "name", Name.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "onDemand" structural property of this node type.
+	 * The "onDemand" structural property of this node type (type: {@link Boolean}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor ON_DEMAND_PROPERTY =
 		new SimplePropertyDescriptor(ImportDeclaration.class, "onDemand", boolean.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "static" structural property of this node type (added in JLS3 API).
+	 * The "static" structural property of this node type (type: {@link Boolean}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final SimplePropertyDescriptor STATIC_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InfixExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InfixExpression.java
index 647d2d0..f647e10 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InfixExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InfixExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -174,28 +174,28 @@ public class InfixExpression extends Expression {
 	}
 
 	/**
-	 * The "leftOperand" structural property of this node type.
+	 * The "leftOperand" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor LEFT_OPERAND_PROPERTY =
 		new ChildPropertyDescriptor(InfixExpression.class, "leftOperand", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "operator" structural property of this node type.
+	 * The "operator" structural property of this node type (type: {@link InfixExpression.Operator}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor OPERATOR_PROPERTY =
 		new SimplePropertyDescriptor(InfixExpression.class, "operator", InfixExpression.Operator.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "rightOperand" structural property of this node type.
+	 * The "rightOperand" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor RIGHT_OPERAND_PROPERTY =
 		new ChildPropertyDescriptor(InfixExpression.class, "rightOperand", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "extendedOperands" structural property of this node type.
+	 * The "extendedOperands" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor EXTENDED_OPERANDS_PROPERTY =
@@ -252,7 +252,7 @@ public class InfixExpression extends Expression {
 
 	/**
 	 * The list of extended operand expressions (element type:
-	 * <code>Expression</code>). Lazily initialized; defaults to an empty list.
+	 * {@link Expression}). Lazily initialized; defaults to an empty list.
 	 */
 	private ASTNode.NodeList extendedOperands = null;
 
@@ -507,7 +507,7 @@ public class InfixExpression extends Expression {
 	 * </p>
 	 *
 	 * @return the live list of extended operands
-	 *   (element type: <code>Expression</code>)
+	 *   (element type: {@link Expression})
 	 */
 	public List extendedOperands() {
 		if (this.extendedOperands == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Initializer.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Initializer.java
index 4056280..ee84ded 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Initializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Initializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,28 +27,28 @@ import java.util.List;
 public class Initializer extends BodyDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(Initializer.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (JLS2 API only).
+	 * The "modifiers" structural property of this node type (type: {@link Integer}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor MODIFIERS_PROPERTY =
 		internalModifiersPropertyFactory(Initializer.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(Initializer.class);
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Block}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InstanceofExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InstanceofExpression.java
index 0f08353..3a334a7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InstanceofExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/InstanceofExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,14 +27,14 @@ import java.util.List;
 public class InstanceofExpression extends Expression {
 
 	/**
-	 * The "leftOperand" structural property of this node type.
+	 * The "leftOperand" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor LEFT_OPERAND_PROPERTY =
 		new ChildPropertyDescriptor(InstanceofExpression.class, "leftOperand", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "rightOperand" structural property of this node type.
+	 * The "rightOperand" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor RIGHT_OPERAND_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Javadoc.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Javadoc.java
index b5eefc3..ccc4680 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Javadoc.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Javadoc.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
 public class Javadoc extends Comment {
 
 	/**
-	 * The "comment" structural property of this node type (JLS2 API only).
+	 * The "comment" structural property of this node type (type: {@link String}) (JLS2 API only).
 	 * @since 3.0
 	 * @deprecated Replaced by {@link #TAGS_PROPERTY} in the JLS3 API.
 	 */
@@ -39,7 +39,7 @@ public class Javadoc extends Comment {
 		new SimplePropertyDescriptor(Javadoc.class, "comment", String.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "tags" structural property of this node type.
+	 * The "tags" structural property of this node type (element type: {@link TagElement}).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TAGS_PROPERTY =
@@ -109,7 +109,7 @@ public class Javadoc extends Comment {
 	private String comment = MINIMAL_DOC_COMMENT;
 
 	/**
-	 * The list of tag elements (element type: <code>TagElement</code>).
+	 * The list of tag elements (element type: {@link TagElement}).
 	 * Defaults to an empty list.
 	 * @since 3.0
 	 */
@@ -292,7 +292,7 @@ public class Javadoc extends Comment {
 	 * </p>
 	 *
 	 * @return the live list of tag elements in this doc comment
-	 * (element type: <code>TagElement</code>)
+	 * (element type: {@link TagElement})
 	 * @since 3.0
 	 */
 	public List tags() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/LabeledStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/LabeledStatement.java
index 632d1ea..0478995 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/LabeledStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/LabeledStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,14 +28,14 @@ import java.util.List;
 public class LabeledStatement extends Statement {
 
 	/**
-	 * The "label" structural property of this node type.
+	 * The "label" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor LABEL_PROPERTY =
 		new ChildPropertyDescriptor(LabeledStatement.class, "label", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MarkerAnnotation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MarkerAnnotation.java
index ab31286..adf2b59 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MarkerAnnotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MarkerAnnotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,7 @@ import java.util.List;
 public final class MarkerAnnotation extends Annotation {
 
 	/**
-	 * The "typeName" structural property of this node type.
+	 * The "typeName" structural property of this node type (child type: {@link Name}).
 	 */
 	public static final ChildPropertyDescriptor TYPE_NAME_PROPERTY =
 		internalTypeNamePropertyFactory(MarkerAnnotation.class);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberRef.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberRef.java
index da408a1..072a573 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberRef.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberRef.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,14 +31,14 @@ import java.util.List;
 public class MemberRef extends ASTNode implements IDocElement {
 
 	/**
-	 * The "qualifier" structural property of this node type.
+	 * The "qualifier" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor QUALIFIER_PROPERTY =
 		new ChildPropertyDescriptor(MemberRef.class, "qualifier", Name.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePair.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePair.java
index 6bf20e1..b1a01e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePair.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePair.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,13 +32,13 @@ import java.util.List;
 public class MemberValuePair extends ASTNode {
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(MemberValuePair.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "value" structural property of this node type.
+	 * The "value" structural property of this node type (child type: {@link Expression}).
 	 */
 	public static final ChildPropertyDescriptor VALUE_PROPERTY =
 		new ChildPropertyDescriptor(MemberValuePair.class, "value", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePairBinding.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePairBinding.java
index 6f2c13b..cfd8640 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePairBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MemberValuePairBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *    IBM Corporation - implemented methods from IBinding
  *    IBM Corporation - renamed from ResolvedMemberValuePair to MemberValuePairBinding
  *    jgarms at bea.com - Fix for IllegalStateException
+ *    IBM Corporation - Fix for 223225
  *******************************************************************************/
 package org.eclipse.jdt.core.dom;
 
@@ -72,7 +73,8 @@ class MemberValuePairBinding implements IMemberValuePairBinding {
 					return new Long(constant.longValue());
 				case TypeIds.T_short:
 					return new Short(constant.shortValue());
-				case TypeIds.T_JavaLangString:
+				default:
+					// TypeIds.T_JavaLangString:
 					return constant.stringValue();
 			}
 		} else if (internalObject instanceof org.eclipse.jdt.internal.compiler.lookup.TypeBinding) {
@@ -139,6 +141,10 @@ class MemberValuePairBinding implements IMemberValuePairBinding {
 		this.value = buildDOMValue(this.internalPair.getValue(), this.bindingResolver);
 		if (this.value == null)
 			this.value = NoValue;
+		IMethodBinding methodBinding = getMethodBinding();
+		if (methodBinding.getReturnType().isArray() && !this.value.getClass().isArray()) {
+			this.value = new Object[] { this.value }; 
+		}
 	}
 
 	char[] internalName() {
@@ -168,11 +174,11 @@ class MemberValuePairBinding implements IMemberValuePairBinding {
 			return true;
 		if (binding.getKind() != IBinding.MEMBER_VALUE_PAIR)
 			return false;
-		IMemberValuePairBinding other = (IMemberValuePairBinding) binding;
-		if (!getMethodBinding().isEqualTo(other.getMethodBinding())) {
+		IMemberValuePairBinding otherMemberValuePairBinding = (IMemberValuePairBinding) binding;
+		if (!getMethodBinding().isEqualTo(otherMemberValuePairBinding.getMethodBinding())) {
 			return false;
 		}
-		Object otherValue = other.getValue();
+		Object otherValue = otherMemberValuePairBinding.getValue();
 		Object currentValue = getValue();
 		if (currentValue == null) {
 			return otherValue == null;
@@ -183,7 +189,34 @@ class MemberValuePairBinding implements IMemberValuePairBinding {
 			}
 			return false;
 		}
-		return currentValue.equals(otherValue);
+		if (currentValue.getClass().isArray()) {
+			if (!otherValue.getClass().isArray()) {
+				return false;
+			}
+			Object[] currentValues = (Object[]) currentValue;
+			Object[] otherValues = (Object[]) otherValue;
+			final int length = currentValues.length;
+			if (length != otherValues.length) {
+				return false;
+			}
+			for (int i = 0; i < length; i++) {
+				Object current = currentValues[i];
+				Object other = otherValues[i];
+				if (current instanceof IBinding) {
+					if (!(other instanceof IBinding)) {
+						return false;
+					}
+					if (!((IBinding) current).isEqualTo((IBinding) other)) {
+						return false;
+					}
+				} else if (!current.equals(other)) {
+					return false;
+				}
+			}
+			return true;
+		} else {
+			return currentValue.equals(otherValue);
+		}
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java
index 08e68f2..717072e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java
@@ -68,84 +68,84 @@ import java.util.List;
 public class MethodDeclaration extends BodyDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(MethodDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (JLS2 API only).
+	 * The "modifiers" structural property of this node type (type: {@link Integer}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor MODIFIERS_PROPERTY =
 		internalModifiersPropertyFactory(MethodDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(MethodDeclaration.class);
 
 	/**
-	 * The "constructor" structural property of this node type.
+	 * The "constructor" structural property of this node type (type: {@link Boolean}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor CONSTRUCTOR_PROPERTY =
 		new SimplePropertyDescriptor(MethodDeclaration.class, "constructor", boolean.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(MethodDeclaration.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "returnType" structural property of this node type (JLS2 API only).
+	 * The "returnType" structural property of this node type (child type: {@link Type}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor RETURN_TYPE_PROPERTY =
 		new ChildPropertyDescriptor(MethodDeclaration.class, "returnType", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "returnType2" structural property of this node type (added in JLS3 API).
+	 * The "returnType2" structural property of this node type (child type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildPropertyDescriptor RETURN_TYPE2_PROPERTY =
 		new ChildPropertyDescriptor(MethodDeclaration.class, "returnType2", Type.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "extraDimensions" structural property of this node type.
+	 * The "extraDimensions" structural property of this node type (type: {@link Integer}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor EXTRA_DIMENSIONS_PROPERTY =
 		new SimplePropertyDescriptor(MethodDeclaration.class, "extraDimensions", int.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "typeParameters" structural property of this node type (added in JLS3 API).
+	 * The "typeParameters" structural property of this node type (element type: {@link TypeParameter}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TYPE_PARAMETERS_PROPERTY =
 		new ChildListPropertyDescriptor(MethodDeclaration.class, "typeParameters", TypeParameter.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "parameters" structural property of this node type).
+	 * The "parameters" structural property of this node type (element type: {@link SingleVariableDeclaration}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor PARAMETERS_PROPERTY =
 		new ChildListPropertyDescriptor(MethodDeclaration.class, "parameters", SingleVariableDeclaration.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "thrownExceptions" structural property of this node type).
+	 * The "thrownExceptions" structural property of this node type (element type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor THROWN_EXCEPTIONS_PROPERTY =
 		new ChildListPropertyDescriptor(MethodDeclaration.class, "thrownExceptions", Name.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Block}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
@@ -227,7 +227,7 @@ public class MethodDeclaration extends BodyDeclaration {
 
 	/**
 	 * The parameter declarations
-	 * (element type: <code>SingleVariableDeclaration</code>).
+	 * (element type: {@link SingleVariableDeclaration}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList parameters =
@@ -248,7 +248,7 @@ public class MethodDeclaration extends BodyDeclaration {
 	private boolean returnType2Initialized = false;
 
 	/**
-	 * The type paramters (element type: <code>TypeParameter</code>).
+	 * The type paramters (element type: {@link TypeParameter}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -264,7 +264,7 @@ public class MethodDeclaration extends BodyDeclaration {
 	private int extraArrayDimensions = 0;
 
 	/**
-	 * The list of thrown exception names (element type: <code>Name</code>).
+	 * The list of thrown exception names (element type: {@link Name}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList thrownExceptions =
@@ -533,7 +533,7 @@ public class MethodDeclaration extends BodyDeclaration {
 	 * declaration (added in JLS3 API). This list is non-empty for parameterized methods.
 	 *
 	 * @return the live list of type parameters
-	 *    (element type: <code>TypeParameter</code>)
+	 *    (element type: {@link TypeParameter})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -594,7 +594,7 @@ public class MethodDeclaration extends BodyDeclaration {
 	 * method declaration.
 	 *
 	 * @return the live list of method parameter declarations
-	 *    (element type: <code>SingleVariableDeclaration</code>)
+	 *    (element type: {@link SingleVariableDeclaration})
 	 */
 	public List parameters() {
 		return this.parameters;
@@ -630,7 +630,7 @@ public class MethodDeclaration extends BodyDeclaration {
 	 * declaration.
 	 *
 	 * @return the live list of exception names
-	 *    (element type: <code>Name</code>)
+	 *    (element type: {@link Name})
 	 */
 	public List thrownExceptions() {
 		return this.thrownExceptions;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodInvocation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodInvocation.java
index c8e8273..b91289b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodInvocation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodInvocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,28 +35,28 @@ import java.util.List;
 public class MethodInvocation extends Expression {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(MethodInvocation.class, "expression", Expression.class, OPTIONAL, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "typeArguments" structural property of this node type (added in JLS3 API).
+	 * The "typeArguments" structural property of this node type (element type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TYPE_ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(MethodInvocation.class, "typeArguments", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(MethodInvocation.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "arguments" structural property of this node type.
+	 * The "arguments" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor ARGUMENTS_PROPERTY =
@@ -120,7 +120,7 @@ public class MethodInvocation extends Expression {
 	private Expression optionalExpression = null;
 
 	/**
-	 * The type arguments (element type: <code>Type</code>).
+	 * The type arguments (element type: {@link Type}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -135,7 +135,7 @@ public class MethodInvocation extends Expression {
 
 	/**
 	 * The list of argument expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList arguments =
 		new ASTNode.NodeList(ARGUMENTS_PROPERTY);
@@ -296,7 +296,7 @@ public class MethodInvocation extends Expression {
 	 * invocation (added in JLS3 API).
 	 *
 	 * @return the live list of type arguments
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -354,7 +354,7 @@ public class MethodInvocation extends Expression {
 	 * invocation expression.
 	 *
 	 * @return the live list of argument expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List arguments() {
 		return this.arguments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRef.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRef.java
index 503e24c..56f70fe 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRef.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRef.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,21 +31,21 @@ import java.util.List;
 public class MethodRef extends ASTNode implements IDocElement {
 
 	/**
-	 * The "qualifier" structural property of this node type.
+	 * The "qualifier" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor QUALIFIER_PROPERTY =
 		new ChildPropertyDescriptor(MethodRef.class, "qualifier", Name.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(MethodRef.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "parameters" structural property of this node type.
+	 * The "parameters" structural property of this node type (element type: {@link MethodRefParameter}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor PARAMETERS_PROPERTY =
@@ -93,7 +93,7 @@ public class MethodRef extends ASTNode implements IDocElement {
 
 	/**
 	 * The parameter declarations
-	 * (element type: <code>MethodRefParameter</code>).
+	 * (element type: {@link MethodRefParameter}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList parameters =
@@ -275,7 +275,7 @@ public class MethodRef extends ASTNode implements IDocElement {
 	 * method reference.
 	 *
 	 * @return the live list of method parameter references
-	 *    (element type: <code>MethodRefParameter</code>)
+	 *    (element type: {@link MethodRefParameter})
 	 */
 	public List parameters() {
 		return this.parameters;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRefParameter.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRefParameter.java
index 1cfc779..fd213c4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRefParameter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodRefParameter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,21 +42,21 @@ import java.util.List;
 public class MethodRefParameter extends ASTNode {
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(MethodRefParameter.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "varargs" structural property of this node type (added in JLS3 API).
+	 * The "varargs" structural property of this node type (type: {@link Boolean}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final SimplePropertyDescriptor VARARGS_PROPERTY =
 		new SimplePropertyDescriptor(MethodRefParameter.class, "varargs", boolean.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Modifier.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Modifier.java
index 86ccbaa..63fbeb0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Modifier.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Modifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -210,7 +210,7 @@ public final class Modifier extends ASTNode implements IExtendedModifier {
 	public static final int FINAL = 0x0010;
 
 	/**
-	 * The "keyword" structural property of this node type.
+	 * The "keyword" structural property of this node type (type: {@link Modifier.ModifierKeyword}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor KEYWORD_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NameEnviromentWithProgress.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NameEnviromentWithProgress.java
deleted file mode 100644
index dac646f..0000000
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NameEnviromentWithProgress.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.core.dom;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jdt.internal.compiler.batch.FileSystem;
-import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer;
-import org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
-import org.eclipse.jdt.internal.core.INameEnviromentWithProgress;
-import org.eclipse.jdt.internal.core.NameLookup;
-
-/**
- * Batch name environment that is cancelable using a monitor.
- * @since 3.6
- */
-class NameEnviromentWithProgress extends FileSystem implements INameEnviromentWithProgress {
-	IProgressMonitor monitor;
-	
-	public NameEnviromentWithProgress(Classpath[] paths, String[] initialFileNames, IProgressMonitor monitor) {
-		super(paths, initialFileNames);
-		setMonitor(monitor);
-	}
-	private void checkCanceled() {
-		if (this.monitor != null && this.monitor.isCanceled()) {
-			if (NameLookup.VERBOSE) {
-				System.out.println(Thread.currentThread() + " CANCELLING LOOKUP "); //$NON-NLS-1$
-			}
-			throw new AbortCompilation(true/*silent*/, new OperationCanceledException());
-		}
-	}
-	public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) {
-		checkCanceled();
-		return super.findType(typeName, packageName);
-	}
-	public NameEnvironmentAnswer findType(char[][] compoundName) {
-		checkCanceled();
-		return super.findType(compoundName);
-	}
-	public boolean isPackage(char[][] compoundName, char[] packageName) {
-		checkCanceled();
-		return super.isPackage(compoundName, packageName);
-	}
-	
-	public void setMonitor(IProgressMonitor monitor) {
-		this.monitor = monitor;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NameEnvironmentWithProgress.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NameEnvironmentWithProgress.java
new file mode 100644
index 0000000..f5bc4e8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NameEnvironmentWithProgress.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.dom;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jdt.internal.compiler.batch.FileSystem;
+import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer;
+import org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
+import org.eclipse.jdt.internal.core.INameEnvironmentWithProgress;
+import org.eclipse.jdt.internal.core.NameLookup;
+
+/**
+ * Batch name environment that can be canceled using a monitor.
+ * @since 3.6
+ */
+class NameEnvironmentWithProgress extends FileSystem implements INameEnvironmentWithProgress {
+	IProgressMonitor monitor;
+	
+	public NameEnvironmentWithProgress(Classpath[] paths, String[] initialFileNames, IProgressMonitor monitor) {
+		super(paths, initialFileNames);
+		setMonitor(monitor);
+	}
+	private void checkCanceled() {
+		if (this.monitor != null && this.monitor.isCanceled()) {
+			if (NameLookup.VERBOSE) {
+				System.out.println(Thread.currentThread() + " CANCELLING LOOKUP "); //$NON-NLS-1$
+			}
+			throw new AbortCompilation(true/*silent*/, new OperationCanceledException());
+		}
+	}
+	public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) {
+		checkCanceled();
+		return super.findType(typeName, packageName);
+	}
+	public NameEnvironmentAnswer findType(char[][] compoundName) {
+		checkCanceled();
+		return super.findType(compoundName);
+	}
+	public boolean isPackage(char[][] compoundName, char[] packageName) {
+		checkCanceled();
+		return super.isPackage(compoundName, packageName);
+	}
+	
+	public void setMonitor(IProgressMonitor monitor) {
+		this.monitor = monitor;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NormalAnnotation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NormalAnnotation.java
index 87034ae..234383c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NormalAnnotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NormalAnnotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,13 +28,13 @@ import java.util.List;
 public final class NormalAnnotation extends Annotation {
 
 	/**
-	 * The "typeName" structural property of this node type.
+	 * The "typeName" structural property of this node type (child type: {@link Name}).
 	 */
 	public static final ChildPropertyDescriptor TYPE_NAME_PROPERTY =
 		internalTypeNamePropertyFactory(NormalAnnotation.class);
 
 	/**
-	 * The "values" structural property of this node type.
+	 * The "values" structural property of this node type (element type: {@link MemberValuePair}).
 	 */
 	public static final ChildListPropertyDescriptor VALUES_PROPERTY =
 		new ChildListPropertyDescriptor(NormalAnnotation.class, "values", MemberValuePair.class, CYCLE_RISK); //$NON-NLS-1$
@@ -177,7 +177,7 @@ public final class NormalAnnotation extends Annotation {
 	 * type of node will trigger an exception.
 	 *
 	 * @return the live list of member value pairs in this
-	 *    annotation (element type: <code>MemberValuePair</code>)
+	 *    annotation (element type: {@link MemberValuePair})
 	 */
 	public List values() {
 		return this.values;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NumberLiteral.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NumberLiteral.java
index 79e14a9..a1eb08b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NumberLiteral.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/NumberLiteral.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
 public class NumberLiteral extends Expression {
 
 	/**
-	 * The "token" structural property of this node type.
+	 * The "token" structural property of this node type (type: {@link String}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor TOKEN_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PackageDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PackageDeclaration.java
index 719958f..03e1ba4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PackageDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PackageDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,21 +38,21 @@ import java.util.List;
 public class PackageDeclaration extends ASTNode {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		new ChildPropertyDescriptor(PackageDeclaration.class, "javadoc", Javadoc.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "annotations" structural property of this node type (added in JLS3 API).
+	 * The "annotations" structural property of this node type (element type: {@link Annotation}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor ANNOTATIONS_PROPERTY =
 		new ChildListPropertyDescriptor(PackageDeclaration.class, "annotations", Annotation.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
@@ -115,7 +115,7 @@ public class PackageDeclaration extends ASTNode {
 	Javadoc optionalDocComment = null;
 
 	/**
-	 * The annotations (element type: <code>Annotation</code>).
+	 * The annotations (element type: {@link Annotation}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -238,7 +238,7 @@ public class PackageDeclaration extends ASTNode {
 	 * package declaration (added in JLS3 API).
 	 *
 	 * @return the live list of annotations
-	 *    (element type: <code>Annotation</code>)
+	 *    (element type: {@link Annotation})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParameterizedType.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParameterizedType.java
index ac991eb..41d2d61 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParameterizedType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParameterizedType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,13 +35,13 @@ public class ParameterizedType extends Type {
     int index;
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(ParameterizedType.class, "type", Type.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "typeArguments" structural property of this node type.
+	 * The "typeArguments" structural property of this node type (element type: {@link Type}).
 	 */
 	public static final ChildListPropertyDescriptor TYPE_ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(ParameterizedType.class, "typeArguments", Type.class, CYCLE_RISK); //$NON-NLS-1$
@@ -82,7 +82,7 @@ public class ParameterizedType extends Type {
 	private Type type = null;
 
 	/**
-	 * The type arguments (element type: <code>Type</code>).
+	 * The type arguments (element type: {@link Type}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList typeArguments =
@@ -222,7 +222,7 @@ public class ParameterizedType extends Type {
 	 * at least one element and not contain primitive types.
 	 *
 	 * @return the live list of type arguments
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 */
 	public List typeArguments() {
 		return this.typeArguments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParenthesizedExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParenthesizedExpression.java
index f16a050..ba97b47 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParenthesizedExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ParenthesizedExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class ParenthesizedExpression extends Expression {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PostfixExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PostfixExpression.java
index 1b4950a..da88378 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PostfixExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PostfixExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -105,14 +105,14 @@ public class PostfixExpression extends Expression {
 	}
 
 	/**
-	 * The "operator" structural property of this node type.
+	 * The "operator" structural property of this node type (type: {@link PostfixExpression.Operator}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor OPERATOR_PROPERTY =
 		new SimplePropertyDescriptor(PostfixExpression.class, "operator", PostfixExpression.Operator.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "operand" structural property of this node type.
+	 * The "operand" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor OPERAND_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrefixExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrefixExpression.java
index 97ab05d..307109d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrefixExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrefixExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -121,14 +121,14 @@ public class PrefixExpression extends Expression {
 	}
 
 	/**
-	 * The "operator" structural property of this node type.
+	 * The "operator" structural property of this node type (type: {@link PrefixExpression.Operator}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor OPERATOR_PROPERTY =
 		new SimplePropertyDescriptor(PrefixExpression.class, "operator", PrefixExpression.Operator.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "operand" structural property of this node type.
+	 * The "operand" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor OPERAND_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrimitiveType.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrimitiveType.java
index 7c98424..9ab7c3d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrimitiveType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/PrimitiveType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -155,7 +155,7 @@ public class PrimitiveType extends Type {
 	}
 
 	/**
-	 * The "primitiveTypeCode" structural property of this node type.
+	 * The "primitiveTypeCode" structural property of this node type (type: {@link PrimitiveType.Code}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor PRIMITIVE_TYPE_CODE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedName.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedName.java
index fe2b6cd..c7753b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedName.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedName.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,14 +35,14 @@ import java.util.List;
 public class QualifiedName extends Name {
 
 	/**
-	 * The "qualifier" structural property of this node type.
+	 * The "qualifier" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor QUALIFIER_PROPERTY =
 		new ChildPropertyDescriptor(QualifiedName.class, "qualifier", Name.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedType.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedType.java
index 1368815..d7d439a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/QualifiedType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import java.util.List;
  *    Type <b>.</b> SimpleName
  * </pre>
  * <p>
- * Not all node arragements will represent legal Java constructs. In particular,
+ * Not all node arrangements will represent legal Java constructs. In particular,
  * it is nonsense if the type is an array type or primitive type. The normal use
  * is when the type is a simple or parameterized type.
  * </p>
@@ -51,13 +51,13 @@ public class QualifiedType extends Type {
     int index;
 
 	/**
-	 * The "qualifier" structural property of this node type.
+	 * The "qualifier" structural property of this node type (child type: {@link Type}).
 	 */
 	public static final ChildPropertyDescriptor QUALIFIER_PROPERTY =
 		new ChildPropertyDescriptor(QualifiedType.class, "qualifier", Type.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(QualifiedType.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java
index 8e4b30b..f0e8b40 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -555,8 +555,8 @@ class RecoveredTypeBinding implements ITypeBinding {
 		if (packageBinding != null) {
 			final IJavaElement javaElement = packageBinding.getJavaElement();
 			if (javaElement != null && javaElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
-				// best effort: we don't know if the recovered binding is a binary or source binding, so go with a compilation unit
-				return ((PackageFragment) javaElement).getCompilationUnit(getInternalName() + SuffixConstants.SUFFIX_STRING_java);
+				// best effort: we don't know if the recovered binding is a binary or source binding, so go with a simple source type
+				return ((PackageFragment) javaElement).getCompilationUnit(getInternalName() + SuffixConstants.SUFFIX_STRING_java).getType(this.getName());
 			}
 		}
 		return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ReturnStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ReturnStatement.java
index ec26455..046e81b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ReturnStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ReturnStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class ReturnStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleName.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleName.java
index c35ad1c..79fe988 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleName.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleName.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
 public class SimpleName extends Name {
 
 	/**
-	 * The "identifier" structural property of this node type.
+	 * The "identifier" structural property of this node type (type: {@link String}).
 	 *
 	 * @since 3.0
 	 */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleType.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleType.java
index 6dc099a..9e256c6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SimpleType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import java.util.List;
 public class SimpleType extends Type {
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleMemberAnnotation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleMemberAnnotation.java
index edb2b4b..ddee30e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleMemberAnnotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleMemberAnnotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,13 +31,13 @@ import java.util.List;
 public final class SingleMemberAnnotation extends Annotation {
 
 	/**
-	 * The "typeName" structural property of this node type.
+	 * The "typeName" structural property of this node type (child type: {@link Name}).
 	 */
 	public static final ChildPropertyDescriptor TYPE_NAME_PROPERTY =
 		internalTypeNamePropertyFactory(SingleMemberAnnotation.class);
 
 	/**
-	 * The "value" structural property of this node type.
+	 * The "value" structural property of this node type (child type: {@link Expression}).
 	 */
 	public static final ChildPropertyDescriptor VALUE_PROPERTY =
 		new ChildPropertyDescriptor(SingleMemberAnnotation.class, "value", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleVariableDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleVariableDeclaration.java
index c2b7519..1a7a888 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleVariableDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SingleVariableDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,49 +39,49 @@ import java.util.List;
 public class SingleVariableDeclaration extends VariableDeclaration {
 
 	/**
-	 * The "modifiers" structural property of this node type (JLS2 API only).
+	 * The "modifiers" structural property of this node type (type: {@link Integer}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor MODIFIERS_PROPERTY =
 		new SimplePropertyDescriptor(SingleVariableDeclaration.class, "modifiers", int.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		new ChildListPropertyDescriptor(SingleVariableDeclaration.class, "modifiers", IExtendedModifier.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(SingleVariableDeclaration.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(SingleVariableDeclaration.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "varargs" structural property of this node type (added in JLS3 API).
+	 * The "varargs" structural property of this node type (type: {@link Boolean}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final SimplePropertyDescriptor VARARGS_PROPERTY =
 		new SimplePropertyDescriptor(SingleVariableDeclaration.class, "varargs", boolean.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "extraDimensions" structural property of this node type.
+	 * The "extraDimensions" structural property of this node type (type: {@link Integer}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor EXTRA_DIMENSIONS_PROPERTY =
 		new SimplePropertyDescriptor(SingleVariableDeclaration.class, "extraDimensions", int.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "initializer" structural property of this node type.
+	 * The "initializer" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor INITIALIZER_PROPERTY =
@@ -143,7 +143,7 @@ public class SingleVariableDeclaration extends VariableDeclaration {
 	}
 
 	/**
-	 * The extended modifiers (element type: <code>IExtendedModifier</code>).
+	 * The extended modifiers (element type: {@link IExtendedModifier}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 *
@@ -384,7 +384,7 @@ public class SingleVariableDeclaration extends VariableDeclaration {
 	 * </p>
 	 *
 	 * @return the live list of modifiers and annotations
-	 *    (element type: <code>IExtendedModifier</code>)
+	 *    (element type: {@link IExtendedModifier})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Statement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Statement.java
index 84d426b..d733cfa 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Statement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/Statement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,51 +23,33 @@ import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
  * For JLS2:
  * <pre>
  * Statement:
- *    Block
- *    IfStatement
- *    ForStatement
- *    WhileStatement
- *    DoStatement
- *    TryStatement
- *    SwitchStatement
- *    SynchronizedStatement
- *    ReturnStatement
- *    ThrowStatement
- *    BreakStatement
- *    ContinueStatement
- *    EmptyStatement
- *    ExpressionStatement
- *    LabeledStatement
- *    AssertStatement
- *    VariableDeclarationStatement
- *    TypeDeclarationStatement
- *    ConstructorInvocation
- *    SuperConstructorInvocation
+ *    {@link AssertStatement},
+ *    {@link Block},
+ *    {@link BreakStatement},
+ *    {@link ConstructorInvocation},
+ *    {@link ContinueStatement},
+ *    {@link DoStatement},
+ *    {@link EmptyStatement},
+ *    {@link ExpressionStatement},
+ *    {@link ForStatement},
+ *    {@link IfStatement},
+ *    {@link LabeledStatement},
+ *    {@link ReturnStatement},
+ *    {@link SuperConstructorInvocation},
+ *    {@link SwitchCase},
+ *    {@link SwitchStatement},
+ *    {@link SynchronizedStatement},
+ *    {@link ThrowStatement},
+ *    {@link TryStatement},
+ *    {@link TypeDeclarationStatement},
+ *    {@link VariableDeclarationStatement},
+ *    {@link WhileStatement}
  * </pre>
  * For JLS3, an enhanced for node type was added:
  * <pre>
  * Statement:
- *    Block
- *    IfStatement
- *    ForStatement
- *    EnhancedForStatement
- *    WhileStatement
- *    DoStatement
- *    TryStatement
- *    SwitchStatement
- *    SynchronizedStatement
- *    ReturnStatement
- *    ThrowStatement
- *    BreakStatement
- *    ContinueStatement
- *    EmptyStatement
- *    ExpressionStatement
- *    LabeledStatement
- *    AssertStatement
- *    VariableDeclarationStatement
- *    TypeDeclarationStatement
- *    ConstructorInvocation
- *    SuperConstructorInvocation
+ *    <i><JLS2 statements>...</i>,
+ *    {@link EnhancedForStatement}
  * </pre>
  * </p>
  *
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java
index b68c4f1..c5b7b89 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/StringLiteral.java
@@ -27,7 +27,7 @@ import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
 public class StringLiteral extends Expression {
 
 	/**
-	 * The "escapedValue" structural property of this node type.
+	 * The "escapedValue" structural property of this node type (type: {@link String}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor ESCAPED_VALUE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperConstructorInvocation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperConstructorInvocation.java
index 8da8938..0ad9d18 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperConstructorInvocation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperConstructorInvocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,21 +35,21 @@ import java.util.List;
 public class SuperConstructorInvocation extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(SuperConstructorInvocation.class, "expression", Expression.class, OPTIONAL, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "typeArguments" structural property of this node type (added in JLS3 API).
+	 * The "typeArguments" structural property of this node type (element type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TYPE_ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(SuperConstructorInvocation.class, "typeArguments", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "arguments" structural property of this node type.
+	 * The "arguments" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor ARGUMENTS_PROPERTY =
@@ -111,7 +111,7 @@ public class SuperConstructorInvocation extends Statement {
 	private Expression optionalExpression = null;
 
 	/**
-	 * The type arguments (element type: <code>Type</code>).
+	 * The type arguments (element type: {@link Type}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -120,7 +120,7 @@ public class SuperConstructorInvocation extends Statement {
 
 	/**
 	 * The list of argument expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList arguments =
 		new ASTNode.NodeList(ARGUMENTS_PROPERTY);
@@ -258,7 +258,7 @@ public class SuperConstructorInvocation extends Statement {
 	 * invocation (added in JLS3 API).
 	 *
 	 * @return the live list of type arguments
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -276,7 +276,7 @@ public class SuperConstructorInvocation extends Statement {
 	 * constructor invocation statement.
 	 *
 	 * @return the live list of argument expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List arguments() {
 		return this.arguments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperFieldAccess.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperFieldAccess.java
index 3172703..12ebbf1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperFieldAccess.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperFieldAccess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,14 +34,14 @@ import java.util.List;
 public class SuperFieldAccess extends Expression {
 
 	/**
-	 * The "qualifier" structural property of this node type.
+	 * The "qualifier" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor QUALIFIER_PROPERTY =
 		new ChildPropertyDescriptor(SuperFieldAccess.class, "qualifier", Name.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperMethodInvocation.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperMethodInvocation.java
index bd61dbf..53af4f2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperMethodInvocation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SuperMethodInvocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,28 +36,28 @@ import java.util.List;
 public class SuperMethodInvocation extends Expression {
 
 	/**
-	 * The "qualifier" structural property of this node type.
+	 * The "qualifier" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor QUALIFIER_PROPERTY =
 		new ChildPropertyDescriptor(SuperMethodInvocation.class, "qualifier", Name.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "typeArguments" structural property of this node type (added in JLS3 API).
+	 * The "typeArguments" structural property of this node type (element type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TYPE_ARGUMENTS_PROPERTY =
 		new ChildListPropertyDescriptor(SuperMethodInvocation.class, "typeArguments", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(SuperMethodInvocation.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "arguments" structural property of this node type.
+	 * The "arguments" structural property of this node type (element type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor ARGUMENTS_PROPERTY =
@@ -121,7 +121,7 @@ public class SuperMethodInvocation extends Expression {
 	private Name optionalQualifier = null;
 
 	/**
-	 * The type arguments (element type: <code>Type</code>).
+	 * The type arguments (element type: {@link Type}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -136,7 +136,7 @@ public class SuperMethodInvocation extends Expression {
 
 	/**
 	 * The list of argument expressions (element type:
-	 * <code>Expression</code>). Defaults to an empty list.
+	 * {@link Expression}). Defaults to an empty list.
 	 */
 	private ASTNode.NodeList arguments =
 		new ASTNode.NodeList(ARGUMENTS_PROPERTY);
@@ -294,7 +294,7 @@ public class SuperMethodInvocation extends Expression {
 	 * invocation (added in JLS3 API).
 	 *
 	 * @return the live list of type arguments
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -352,7 +352,7 @@ public class SuperMethodInvocation extends Expression {
 	 * "super" method invocation expression.
 	 *
 	 * @return the live list of argument expressions
-	 *    (element type: <code>Expression</code>)
+	 *    (element type: {@link Expression})
 	 */
 	public List arguments() {
 		return this.arguments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.java
index db72dbb..87953a6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import java.util.List;
 public class SwitchCase extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchStatement.java
index e597dc7..cd19e2a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,14 +35,14 @@ import java.util.List;
 public class SwitchStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(SwitchStatement.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "statements" structural property of this node type.
+	 * The "statements" structural property of this node type (element type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor STATEMENTS_PROPERTY =
@@ -85,7 +85,7 @@ public class SwitchStatement extends Statement {
 
 	/**
 	 * The statements and SwitchCase nodes
-	 * (element type: <code>Statement</code>).
+	 * (element type: {@link Statement}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList statements =
@@ -225,7 +225,7 @@ public class SwitchStatement extends Statement {
 	 * the switch groups.
 	 *
 	 * @return the live list of statement nodes
-	 *    (element type: <code>Statement</code>)
+	 *    (element type: {@link Statement})
 	 */
 	public List statements() {
 		return this.statements;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SynchronizedStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SynchronizedStatement.java
index 8e0acdc..dbc27f4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SynchronizedStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SynchronizedStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,14 +28,14 @@ import java.util.List;
 public class SynchronizedStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(SynchronizedStatement.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Block}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TagElement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TagElement.java
index 8c148b9..cb84691 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TagElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TagElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ import java.util.List;
 public final class TagElement extends ASTNode implements IDocElement {
 
 	/**
-	 * The "tagName" structural property of this node type.
+	 * The "tagName" structural property of this node type (type: {@link String}).
 	 *
 	 * @since 3.0
 	 */
@@ -44,7 +44,7 @@ public final class TagElement extends ASTNode implements IDocElement {
 		new SimplePropertyDescriptor(TagElement.class, "tagName", String.class, OPTIONAL); //$NON-NLS-1$
 
 	/**
-	 * The "fragments" structural property of this node type.
+	 * The "fragments" structural property of this node type (element type: {@link IDocElement}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor FRAGMENTS_PROPERTY =
@@ -189,7 +189,7 @@ public final class TagElement extends ASTNode implements IDocElement {
 	private String optionalTagName = null;
 
 	/**
-	 * The list of doc elements (element type: <code>IDocElement</code>).
+	 * The list of doc elements (element type: {@link IDocElement}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList fragments =
@@ -356,7 +356,7 @@ public final class TagElement extends ASTNode implements IDocElement {
 	 * of node will trigger an exception.
 	 *
 	 * @return the live list of doc elements in this tag element
-	 * (element type: <code>ASTNode</code>)
+	 * (element type: {@link IDocElement})
 	 */
 	public List fragments() {
 		return this.fragments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TextElement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TextElement.java
index 3e21f29..774c861 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TextElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TextElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ import org.eclipse.jdt.internal.compiler.util.Util;
 public final class TextElement extends ASTNode implements IDocElement {
 
 	/**
-	 * The "text" structural property of this node type.
+	 * The "text" structural property of this node type (type: {@link String}).
 	 *
 	 * @since 3.0
 	 */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThisExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThisExpression.java
index 766c223..88ce5e8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThisExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThisExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,7 +33,7 @@ import java.util.List;
 public class ThisExpression extends Expression {
 
 	/**
-	 * The "qualifier" structural property of this node type.
+	 * The "qualifier" structural property of this node type (child type: {@link Name}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor QUALIFIER_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThrowStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThrowStatement.java
index e4f1da8..2f9b77b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThrowStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ThrowStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class ThrowStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TryStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TryStatement.java
index bb87b8c..edb118d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TryStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TryStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,21 +30,21 @@ import java.util.List;
 public class TryStatement extends Statement {
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Block}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
 		new ChildPropertyDescriptor(TryStatement.class, "body", Block.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "catchClauses" structural property of this node type.
+	 * The "catchClauses" structural property of this node type (element type: {@link CatchClause}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor CATCH_CLAUSES_PROPERTY =
 		new ChildListPropertyDescriptor(TryStatement.class, "catchClauses", CatchClause.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "finally" structural property of this node type.
+	 * The "finally" structural property of this node type (child type: {@link Block}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor FINALLY_PROPERTY =
@@ -86,7 +86,7 @@ public class TryStatement extends Statement {
 	private Block body = null;
 
 	/**
-	 * The catch clauses (element type: <code>CatchClause</code>).
+	 * The catch clauses (element type: {@link CatchClause}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList catchClauses =
@@ -243,7 +243,7 @@ public class TryStatement extends Statement {
 	 * Returns the live ordered list of catch clauses for this try statement.
 	 *
 	 * @return the live list of catch clauses
-	 *    (element type: <code>CatchClause</code>)
+	 *    (element type: {@link CatchClause})
 	 */
 	public List catchClauses() {
 		return this.catchClauses;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java
index c8aba87..d723536 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -177,7 +177,6 @@ class TypeBinding implements ITypeBinding {
 	public ITypeBinding getGenericTypeOfWildcardType() {
 		switch (this.binding.kind()) {
 			case Binding.WILDCARD_TYPE :
-			case Binding.INTERSECTION_TYPE :
 				WildcardBinding wildcardBinding = (WildcardBinding) this.binding;
 				if (wildcardBinding.genericType != null) {
 					return this.resolver.getTypeBinding(wildcardBinding.genericType);
@@ -506,8 +505,8 @@ class TypeBinding implements ITypeBinding {
 			if (packageBinding != null) {
 				final IJavaElement javaElement = packageBinding.getJavaElement();
 				if (javaElement != null && javaElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
-					// best effort: we don't know if the recovered binding is a binary or source binding, so go with a compilation unit
-					return ((PackageFragment) javaElement).getCompilationUnit(new String(this.binding.sourceName()) + SuffixConstants.SUFFIX_STRING_java);
+					// best effort: we don't know if the recovered binding is a binary or source binding, so go with a simple source type
+					return ((PackageFragment) javaElement).getCompilationUnit(new String(this.binding.sourceName()) + SuffixConstants.SUFFIX_STRING_java).getType(this.getName());
 				}
 			}
 			return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclaration.java
index 3de93b6..e912830 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,77 +69,77 @@ import java.util.List;
 public class TypeDeclaration extends AbstractTypeDeclaration {
 
 	/**
-	 * The "javadoc" structural property of this node type.
+	 * The "javadoc" structural property of this node type (child type: {@link Javadoc}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor JAVADOC_PROPERTY =
 		internalJavadocPropertyFactory(TypeDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (JLS2 API only).
+	 * The "modifiers" structural property of this node type (type: {@link Integer}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor MODIFIERS_PROPERTY =
 		internalModifiersPropertyFactory(TypeDeclaration.class);
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		internalModifiers2PropertyFactory(TypeDeclaration.class);
 
 	/**
-	 * The "interface" structural property of this node type.
+	 * The "interface" structural property of this node type (type: {@link Boolean}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor INTERFACE_PROPERTY =
 		new SimplePropertyDescriptor(TypeDeclaration.class, "interface", boolean.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		internalNamePropertyFactory(TypeDeclaration.class);
 
 	/**
-	 * The "superclass" structural property of this node type (JLS2 API only).
+	 * The "superclass" structural property of this node type (child type: {@link Name}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor SUPERCLASS_PROPERTY =
 		new ChildPropertyDescriptor(TypeDeclaration.class, "superclass", Name.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "superInterfaces" structural property of this node type (JLS2 API only).
+	 * The "superInterfaces" structural property of this node type (element type: {@link Name}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor SUPER_INTERFACES_PROPERTY =
 		new ChildListPropertyDescriptor(TypeDeclaration.class, "superInterfaces", Name.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "superclassType" structural property of this node type (added in JLS3 API).
+	 * The "superclassType" structural property of this node type (child type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildPropertyDescriptor SUPERCLASS_TYPE_PROPERTY =
 		new ChildPropertyDescriptor(TypeDeclaration.class, "superclassType", Type.class, OPTIONAL, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "superInterfaceTypes" structural property of this node type (added in JLS3 API).
+	 * The "superInterfaceTypes" structural property of this node type (element type: {@link Type}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor SUPER_INTERFACE_TYPES_PROPERTY =
 		new ChildListPropertyDescriptor(TypeDeclaration.class, "superInterfaceTypes", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "typeParameters" structural property of this node type (added in JLS3 API).
+	 * The "typeParameters" structural property of this node type (element type: {@link TypeParameter}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor TYPE_PARAMETERS_PROPERTY =
 		new ChildListPropertyDescriptor(TypeDeclaration.class, "typeParameters", TypeParameter.class, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "bodyDeclarations" structural property of this node type (added in JLS3 API).
+	 * The "bodyDeclarations" structural property of this node type (element type: {@link BodyDeclaration}) (added in JLS3 API).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor BODY_DECLARATIONS_PROPERTY =
@@ -212,7 +212,7 @@ public class TypeDeclaration extends AbstractTypeDeclaration {
 	private boolean isInterface = false;
 
 	/**
-	 * The type paramters (element type: <code>TypeParameter</code>).
+	 * The type paramters (element type: {@link TypeParameter}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -227,7 +227,7 @@ public class TypeDeclaration extends AbstractTypeDeclaration {
 	private Name optionalSuperclassName = null;
 
 	/**
-	 * The superinterface names (element type: <code>Name</code>).
+	 * The superinterface names (element type: {@link Name}).
 	 * JLS2 only; defaults to an empty list. Not used in JLS3.
 	 * (see constructor).
 	 *
@@ -243,7 +243,7 @@ public class TypeDeclaration extends AbstractTypeDeclaration {
 	private Type optionalSuperclassType = null;
 
 	/**
-	 * The superinterface types (element type: <code>Type</code>).
+	 * The superinterface types (element type: {@link Type}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -517,7 +517,7 @@ public class TypeDeclaration extends AbstractTypeDeclaration {
 	 * declaration (added in JLS3 API). This list is non-empty for parameterized types.
 	 *
 	 * @return the live list of type parameters
-	 *    (element type: <code>TypeParameter</code>)
+	 *    (element type: {@link TypeParameter})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -655,7 +655,7 @@ public class TypeDeclaration extends AbstractTypeDeclaration {
 	 * extends.
 	 *
 	 * @return the live list of interface names
-	 *    (element type: <code>Name</code>)
+	 *    (element type: {@link Name})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * an AST later than JLS2
 	 * @deprecated In the JLS3 API, this method is replaced by
@@ -685,7 +685,7 @@ public class TypeDeclaration extends AbstractTypeDeclaration {
 	 * these are the interfaces that this interface extends.
 	 *
 	 * @return the live list of interface types
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclarationStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclarationStatement.java
index b8d2c4f..515042b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclarationStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeDeclarationStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,14 +41,14 @@ import java.util.List;
 public class TypeDeclarationStatement extends Statement {
 
 	/**
-	 * The "typeDeclaration" structural property of this node type (JLS2 API only).
+	 * The "typeDeclaration" structural property of this node type (child type: {@link TypeDeclaration}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_DECLARATION_PROPERTY =
 		new ChildPropertyDescriptor(TypeDeclarationStatement.class, "typeDeclaration", TypeDeclaration.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "declaration" structural property of this node type (added in JLS3 API).
+	 * The "declaration" structural property of this node type (child type: {@link AbstractTypeDeclaration}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildPropertyDescriptor DECLARATION_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeLiteral.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeLiteral.java
index bed1fa1..d37e264 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeLiteral.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeLiteral.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import java.util.List;
 public class TypeLiteral extends Expression {
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeParameter.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeParameter.java
index 0897d77..9736e19 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeParameter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeParameter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,13 +27,13 @@ import java.util.List;
 public class TypeParameter extends ASTNode {
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(TypeParameter.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "typeBounds" structural property of this node type.
+	 * The "typeBounds" structural property of this node type (element type: {@link Type}).
 	 */
 	public static final ChildListPropertyDescriptor TYPE_BOUNDS_PROPERTY =
 		new ChildListPropertyDescriptor(TypeParameter.class, "typeBounds", Type.class, NO_CYCLE_RISK); //$NON-NLS-1$
@@ -74,7 +74,7 @@ public class TypeParameter extends ASTNode {
 	private SimpleName typeVariableName = null;
 
 	/**
-	 * The type bounds (element type: <code>Type</code>).
+	 * The type bounds (element type: {@link Type}).
 	 * Defaults to an empty list.
 	 */
 	private ASTNode.NodeList typeBounds =
@@ -231,7 +231,7 @@ public class TypeParameter extends ASTNode {
 	 * and parameterized types are allowed).
 	 *
 	 * @return the live list of type bounds
-	 *    (element type: <code>Type</code>)
+	 *    (element type: {@link Type})
 	 */
 	public List typeBounds() {
 		return this.typeBounds;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableBinding.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableBinding.java
index e8a1226..52c338b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableBinding.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableBinding.java
@@ -245,25 +245,45 @@ class VariableBinding implements IVariableBinding {
 		int nameLength;
 		int sourceStart;
 		int sourceLength;
+		int modifiers = 0;
 		if (localVar instanceof SingleVariableDeclaration) {
 			sourceStart = localVar.getStartPosition();
 			sourceLength = localVar.getLength();
-			SimpleName simpleName = ((SingleVariableDeclaration) localVar).getName();
+			final SingleVariableDeclaration singleVariableDeclaration = (SingleVariableDeclaration) localVar;
+			SimpleName simpleName = singleVariableDeclaration.getName();
 			nameStart = simpleName.getStartPosition();
 			nameLength = simpleName.getLength();
+			modifiers = singleVariableDeclaration.getModifiers();
 		} else {
 			nameStart =  localVar.getStartPosition();
 			nameLength = localVar.getLength();
 			ASTNode node = localVar.getParent();
 			sourceStart = node.getStartPosition();
 			sourceLength = node.getLength();
+			VariableDeclarationFragment fragment = (VariableDeclarationFragment) localVar;
+			final ASTNode parent = fragment.getParent();
+			switch (parent.getNodeType()) {
+				case ASTNode.VARIABLE_DECLARATION_EXPRESSION :
+					VariableDeclarationExpression expression = (VariableDeclarationExpression) parent;
+					modifiers = expression.getModifiers();
+					break;
+				case ASTNode.VARIABLE_DECLARATION_STATEMENT :
+					VariableDeclarationStatement statement = (VariableDeclarationStatement) parent;
+					modifiers = statement.getModifiers();
+					break;
+				case ASTNode.FIELD_DECLARATION :
+					FieldDeclaration fieldDeclaration = (FieldDeclaration) parent;
+					modifiers = fieldDeclaration.getModifiers();
+					break;
+			}
 		}
 		int sourceEnd = sourceStart+sourceLength-1;
 		char[] typeSig = this.binding.type.genericTypeSignature();
 		JavaElement parent = null;
 		IMethodBinding declaringMethod = getDeclaringMethod();
+		final LocalVariableBinding localVariableBinding = (LocalVariableBinding) this.binding;
 		if (declaringMethod == null) {
-			ReferenceContext referenceContext = ((LocalVariableBinding) this.binding).declaringScope.referenceContext();
+			ReferenceContext referenceContext = localVariableBinding.declaringScope.referenceContext();
 			if (referenceContext instanceof TypeDeclaration){
 				// Local variable is declared inside an initializer
 				TypeDeclaration typeDeclaration = (TypeDeclaration) referenceContext;
@@ -280,7 +300,17 @@ class VariableBinding implements IVariableBinding {
 			parent = (JavaElement) declaringMethod.getJavaElement();
 		}
 		if (parent == null) return null;
-		return new LocalVariable(parent, localVar.getName().getIdentifier(), sourceStart, sourceEnd, nameStart, nameStart+nameLength-1, new String(typeSig), ((LocalVariableBinding) this.binding).declaration.annotations);
+		return new LocalVariable(
+				parent,
+				localVar.getName().getIdentifier(),
+				sourceStart,
+				sourceEnd,
+				nameStart,
+				nameStart+nameLength-1,
+				new String(typeSig),
+				localVariableBinding.declaration.annotations,
+				modifiers,
+				(localVariableBinding.tagBits & TagBits.IsArgument) != 0);
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclaration.java
index 3aabae3..fc388e8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ public abstract class VariableDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "extraDimensions" property
-	 * of this node.
+	 * of this node (type: {@link Integer}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -39,7 +39,7 @@ public abstract class VariableDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "extraDimensions" property
-	 * of this node.
+	 * of this node (type: {@link Integer}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -50,7 +50,7 @@ public abstract class VariableDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "initializer" property
-	 * of this node.
+	 * of this node (child type: {@link Expression}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -59,7 +59,7 @@ public abstract class VariableDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "initializer" property
-	 * of this node.
+	 * of this node (child type: {@link Expression}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -70,7 +70,7 @@ public abstract class VariableDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "name" property
-	 * of this node.
+	 * of this node (child type: {@link SimpleName}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
@@ -79,7 +79,7 @@ public abstract class VariableDeclaration extends ASTNode {
 
 	/**
 	 * Returns structural property descriptor for the "name" property
-	 * of this node.
+	 * of this node (child type: {@link SimpleName}).
 	 *
 	 * @return the property descriptor
 	 * @since 3.1
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationExpression.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationExpression.java
index 36e5158..7c13d49 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationExpression.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationExpression.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,28 +45,28 @@ import java.util.List;
 public class VariableDeclarationExpression extends Expression {
 
 	/**
-	 * The "modifiers" structural property of this node type (JLS2 API only).
+	 * The "modifiers" structural property of this node type (type: {@link Integer}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor MODIFIERS_PROPERTY =
 		new SimplePropertyDescriptor(VariableDeclarationExpression.class, "modifiers", int.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		new ChildListPropertyDescriptor(VariableDeclarationExpression.class, "modifiers", IExtendedModifier.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(VariableDeclarationExpression.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "fragments" structural property of this node type).
+	 * The "fragments" structural property of this node type (element type: {@link VariableDeclarationFragment}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor FRAGMENTS_PROPERTY =
@@ -124,7 +124,7 @@ public class VariableDeclarationExpression extends Expression {
 	}
 
 	/**
-	 * The extended modifiers (element type: <code>IExtendedModifier</code>).
+	 * The extended modifiers (element type: {@link IExtendedModifier}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.0
@@ -281,7 +281,7 @@ public class VariableDeclarationExpression extends Expression {
 	 * </p>
 	 *
 	 * @return the live list of modifiers and annotations
-	 *    (element type: <code>IExtendedModifier</code>)
+	 *    (element type: {@link IExtendedModifier})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -407,7 +407,7 @@ public class VariableDeclarationExpression extends Expression {
 	 * type of node will trigger an exception.
 	 *
 	 * @return the live list of variable declaration fragments in this
-	 *    expression (element type: <code>VariableDeclarationFragment</code>)
+	 *    expression (element type: {@link VariableDeclarationFragment})
 	 */
 	public List fragments() {
 		return this.variableDeclarationFragments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationFragment.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationFragment.java
index 559e5ad..e9de7c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationFragment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,21 +32,21 @@ import java.util.List;
 public class VariableDeclarationFragment extends VariableDeclaration {
 
 	/**
-	 * The "name" structural property of this node type.
+	 * The "name" structural property of this node type (child type: {@link SimpleName}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor NAME_PROPERTY =
 		new ChildPropertyDescriptor(VariableDeclarationFragment.class, "name", SimpleName.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "extraDimensions" structural property of this node type.
+	 * The "extraDimensions" structural property of this node type (type: {@link Integer}).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor EXTRA_DIMENSIONS_PROPERTY =
 		new SimplePropertyDescriptor(VariableDeclarationFragment.class, "extraDimensions", int.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "initializer" structural property of this node type.
+	 * The "initializer" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor INITIALIZER_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationStatement.java
index 21336c0..99c185a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/VariableDeclarationStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,28 +48,28 @@ import java.util.List;
 public class VariableDeclarationStatement extends Statement {
 
 	/**
-	 * The "modifiers" structural property of this node type (JLS2 API only).
+	 * The "modifiers" structural property of this node type (type: {@link Integer}) (JLS2 API only).
 	 * @since 3.0
 	 */
 	public static final SimplePropertyDescriptor MODIFIERS_PROPERTY =
 		new SimplePropertyDescriptor(VariableDeclarationStatement.class, "modifiers", int.class, MANDATORY); //$NON-NLS-1$
 
 	/**
-	 * The "modifiers" structural property of this node type (added in JLS3 API).
+	 * The "modifiers" structural property of this node type (element type: {@link IExtendedModifier}) (added in JLS3 API).
 	 * @since 3.1
 	 */
 	public static final ChildListPropertyDescriptor MODIFIERS2_PROPERTY =
 		new ChildListPropertyDescriptor(VariableDeclarationStatement.class, "modifiers", IExtendedModifier.class, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "type" structural property of this node type.
+	 * The "type" structural property of this node type (child type: {@link Type}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor TYPE_PROPERTY =
 		new ChildPropertyDescriptor(VariableDeclarationStatement.class, "type", Type.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "fragments" structural property of this node type).
+	 * The "fragments" structural property of this node type (element type: {@link VariableDeclarationFragment}).
 	 * @since 3.0
 	 */
 	public static final ChildListPropertyDescriptor FRAGMENTS_PROPERTY =
@@ -127,7 +127,7 @@ public class VariableDeclarationStatement extends Statement {
 	}
 
 	/**
-	 * The extended modifiers (element type: <code>IExtendedModifier</code>).
+	 * The extended modifiers (element type: {@link IExtendedModifier}).
 	 * Null in JLS2. Added in JLS3; defaults to an empty list
 	 * (see constructor).
 	 * @since 3.1
@@ -284,7 +284,7 @@ public class VariableDeclarationStatement extends Statement {
 	 * </p>
 	 *
 	 * @return the live list of modifiers and annotations
-	 *    (element type: <code>IExtendedModifier</code>)
+	 *    (element type: {@link IExtendedModifier})
 	 * @exception UnsupportedOperationException if this operation is used in
 	 * a JLS2 AST
 	 * @since 3.1
@@ -410,7 +410,7 @@ public class VariableDeclarationStatement extends Statement {
 	 * exception.
 	 *
 	 * @return the live list of variable declaration fragments in this
-	 *    statement (element type: <code>VariableDeclarationFragment</code>)
+	 *    statement (element type: {@link VariableDeclarationFragment})
 	 */
 	public List fragments() {
 		return this.variableDeclarationFragments;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WhileStatement.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WhileStatement.java
index 4fa9e3d..d7e04cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WhileStatement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WhileStatement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,14 +28,14 @@ import java.util.List;
 public class WhileStatement extends Statement {
 
 	/**
-	 * The "expression" structural property of this node type.
+	 * The "expression" structural property of this node type (child type: {@link Expression}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
 		new ChildPropertyDescriptor(WhileStatement.class, "expression", Expression.class, MANDATORY, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "body" structural property of this node type.
+	 * The "body" structural property of this node type (child type: {@link Statement}).
 	 * @since 3.0
 	 */
 	public static final ChildPropertyDescriptor BODY_PROPERTY =
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WildcardType.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WildcardType.java
index 6d50ff3..89abb28 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WildcardType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/WildcardType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,13 +32,13 @@ import java.util.List;
 public class WildcardType extends Type {
 
 	/**
-	 * The "bound" structural property of this node type.
+	 * The "bound" structural property of this node type (child type: {@link Type}).
 	 */
 	public static final ChildPropertyDescriptor BOUND_PROPERTY =
 		new ChildPropertyDescriptor(WildcardType.class, "bound", Type.class, OPTIONAL, CYCLE_RISK); //$NON-NLS-1$
 
 	/**
-	 * The "upperBound" structural property of this node type.
+	 * The "upperBound" structural property of this node type (type: {@link Boolean}).
 	 */
 	public static final SimplePropertyDescriptor UPPER_BOUND_PROPERTY =
 		new SimplePropertyDescriptor(WildcardType.class, "upperBound", boolean.class, MANDATORY); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java
index 6d8a6ca..ce07ee7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.core.dom.rewrite;
 
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -90,7 +91,6 @@ import org.eclipse.text.edits.TextEditGroup;
  * @noextend This class is not intended to be subclassed by clients.
  */
 public class ASTRewrite {
-
 	/** root node for the rewrite: Only nodes under this root are accepted */
 	private final AST ast;
 
@@ -103,6 +103,26 @@ public class ASTRewrite {
 	 * @since 3.1
 	 */
 	private TargetSourceRangeComputer targetSourceRangeComputer = null;
+	
+	/**
+	 * Primary field used in representing rewrite properties efficiently.
+	 * If <code>null</code>, this rewrite has no properties.
+	 * If a {@link String}, this is the name of this rewrite's sole property,
+	 * and <code>property2</code> contains its value.
+	 * If a {@link Map}, this is the table of property name-value
+	 * mappings.
+	 * Initially <code>null</code>.
+	 * 
+	 * @see #property2
+	 */
+	private Object property1 = null;
+
+	/**
+	 * Auxiliary field used in representing rewrite properties efficiently.
+	 *
+	 * @see #property1
+	 */
+	private Object property2 = null;
 
 	/**
 	 * Creates a new instance for describing manipulations of
@@ -495,6 +515,36 @@ public class ASTRewrite {
 	}
 
 	/**
+	 * Returns the value of the named property of this rewrite, or <code>null</code> if none.
+	 *
+	 * @param propertyName the property name
+	 * @return the property value, or <code>null</code> if none
+	 * @see #setProperty(String,Object)
+	 * @throws IllegalArgumentException if the given property name is <code>null</code>
+	 * @since 3.7
+	 */
+	public final Object getProperty(String propertyName) {
+		if (propertyName == null) {
+			throw new IllegalArgumentException();
+		}
+		if (this.property1 == null) {
+			// rewrite has no properties at all
+			return null;
+		}
+		if (this.property1 instanceof String) {
+			// rewrite has only a single property
+			if (propertyName.equals(this.property1)) {
+				return this.property2;
+			} else {
+				return null;
+			}
+		}
+		// otherwise rewrite has table of properties
+		Map m = (Map) this.property1;
+		return m.get(propertyName);
+	}
+	
+	/**
 	 * Returns an object that tracks the source range of the given node
 	 * across the rewrite to its AST. Upon return, the result object reflects
 	 * the given node's current source range in the AST. After
@@ -674,6 +724,87 @@ public class ASTRewrite {
 	}
 
 	/**
+	 * Sets the named property of this rewrite to the given value,
+	 * or to <code>null</code> to clear it.
+	 * <p>
+	 * Clients should employ property names that are sufficiently unique
+	 * to avoid inadvertent conflicts with other clients that might also be
+	 * setting properties on the same rewrite.
+	 * </p>
+	 * <p>
+	 * Note that modifying a property is not considered a modification to the
+	 * AST itself. This is to allow clients to decorate existing rewrites with
+	 * their own properties without jeopardizing certain things (like the
+	 * validity of bindings), which rely on the underlying tree remaining static.
+	 * </p>
+	 *
+	 * @param propertyName the property name
+	 * @param data the new property value, or <code>null</code> if none
+	 * @see #getProperty(String)
+	 * @throws IllegalArgumentException if the given property name is <code>null</code>
+	 * @since 3.7
+	 */
+	public final void setProperty(String propertyName, Object data) {
+		if (propertyName == null) {
+			throw new IllegalArgumentException();
+		}
+		if (this.property1 == null) {
+			// rewrite has no properties at all
+			if (data == null) {
+				// rewrite already knows this
+				return;
+			}
+			// rewrite gets its fist property
+			this.property1 = propertyName;
+			this.property2 = data;
+			return;
+		}
+		if (this.property1 instanceof String) {
+			// rewrite has only a single property
+			if (propertyName.equals(this.property1)) {
+				// we're in luck
+				if (data == null) {
+					// just delete last property
+					this.property1 = null;
+					this.property2 = null;
+				} else {
+					this.property2 = data;
+				}
+				return;
+			}
+			if (data == null) {
+				// we already know this
+				return;
+			}
+			// rewrite already has one property - getting its second
+			// convert to more flexible representation
+			Map m = new HashMap(3);
+			m.put(this.property1, this.property2);
+			m.put(propertyName, data);
+			this.property1 = m;
+			this.property2 = null;
+			return;
+		}
+		// rewrite has two or more properties
+		Map m = (Map) this.property1;
+		if (data == null) {
+			m.remove(propertyName);
+			// check for just one property left
+			if (m.size() == 1) {
+				// convert to more efficient representation
+				Map.Entry[] entries = (Map.Entry[]) m.entrySet().toArray(new Map.Entry[1]);
+				this.property1 = entries[0].getKey();
+				this.property2 = entries[0].getValue();
+			}
+			return;
+		} else {
+			m.put(propertyName, data);
+			// still has two or more properties
+			return;
+		}
+	}
+
+	/**
 	 * Sets a custom target source range computer for this AST rewriter. This is advanced feature to modify how
 	 * comments are associated with nodes, which should be done only in special cases.
 	 *
diff --git a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
index 88fd275..3773f5c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -585,6 +585,32 @@ public final class ASTRewriteAnalyzer extends ASTVisitor {
 					ASTNode node= (ASTNode) currEvent.getOriginalValue();
 					TextEditGroup editGroup= getEditGroup(currEvent);
 					int currEnd= getEndOfNode(node);
+					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=306524
+					// Check for leading comments that are not part of extended range, and prevent them
+					// from getting removed.
+					try {
+						TokenScanner scanner = getScanner();
+						int newOffset = prevEnd;
+						int extendedOffset = getExtendedOffset(node);
+						// Try to find the end of the last comment which is not part of extended source
+						// range of the node.
+						while (TokenScanner.isComment(scanner.readNext(newOffset, false))) {
+							int tempOffset = scanner.getNextEndOffset(newOffset, false);
+							// check whether the comment is part of extended source range of the node.
+							// If it is then we need to stop.
+							if (tempOffset < extendedOffset) {
+								newOffset = tempOffset;
+							} else {
+								break;
+							}
+						}
+						if (currPos < newOffset) {
+							currPos = extendedOffset;
+						} 
+						prevEnd = newOffset;		
+					} catch (CoreException e) {
+						// ignore
+					}
 					if (i > lastNonDelete && separatorState == EXISTING) {
 						// is last, remove previous separator: split delete to allow range copies
 						doTextRemove(prevEnd, currPos - prevEnd, editGroup); // remove separator
@@ -598,6 +624,25 @@ public final class ASTRewriteAnalyzer extends ASTVisitor {
 						
 						// remove element and next separator
 						int end= getStartOfNextNode(nextIndex, currEnd); // start of next
+						// https://bugs.eclipse.org/bugs/show_bug.cgi?id=306524
+						// Check for trailing comments that are not part of extended range, and prevent them
+						// from getting removed.
+						try {
+							TokenScanner scanner = getScanner();
+							int nextToken= scanner.readNext(currEnd, false);
+							if (TokenScanner.isComment(nextToken)) {
+								// the separator also has comments that are not part of extended
+								// source range of this node or the next node. So dont remove the separator
+								if (end != scanner.getNextStartOffset(currEnd, false)) {
+									// If this condition were true, comments just found as part of the separator would've basically been
+									// part of the extended source range of the next node. So 'end' wud've safely been set to the correct position
+									// and no change is needed.
+									end = currEnd;
+								}
+							}
+						} catch (CoreException e) {
+							// ignore
+						}
 						doTextRemoveAndVisit(currPos, currEnd - currPos, node, getEditGroup(currEvent)); // remove node
 						if (mustRemoveSeparator(currPos, i)) {
 							doTextRemove(currEnd, end - currEnd, editGroup); // remove separator
@@ -615,7 +660,30 @@ public final class ASTRewriteAnalyzer extends ASTVisitor {
 						ASTNode changed= (ASTNode) currEvent.getNewValue();
 						
 						updateIndent(prevMark, currPos, i, editGroup);
-						
+						// make sure that comments between last modified source position and extended starting position of
+						// node to be replaced are not touched
+						try {
+							TokenScanner scanner = getScanner();
+							int newOffset = prevEnd;
+							int extendedOffset = getExtendedOffset(node);
+							// Try to find the end of the last comment which is not part of extended source
+							// range of the node.
+							while (TokenScanner.isComment(scanner.readNext(newOffset, false))) {
+								int tempOffset = scanner.getNextEndOffset(newOffset, false);
+								// check whether the comment is part of extended source range of the node.
+								// If it is then we need to stop.
+								if (tempOffset < extendedOffset) {
+									newOffset = tempOffset;
+								} else {
+									break;
+								}
+							}
+							if (currPos < newOffset) {
+								currPos = extendedOffset;
+							} 		
+						} catch (CoreException e) {
+							// ignore
+						}
 						doTextRemoveAndVisit(currPos, currEnd - currPos, node, editGroup);
 						doTextInsert(currPos, changed, getNodeIndent(i), true, editGroup);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java
index fd4757e..55612ed 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetEvaluator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.jdt.internal.eval;
 
 import java.util.Map;
 
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.compiler.*;
 import org.eclipse.jdt.internal.compiler.ClassFile;
 import org.eclipse.jdt.internal.compiler.Compiler;
@@ -188,7 +189,8 @@ private CodeSnippetToCuMapper getMapper() {
 			this.context.localVariableTypeNames,
 			this.context.localVariableModifiers,
 			this.context.declaringTypeName,
-			this.context.lineSeparator
+			this.context.lineSeparator,
+			CompilerOptions.versionToJdkLevel(this.options.get(JavaCore.COMPILER_COMPLIANCE))
 		);
 
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.java b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.java
index 1eb7b6d..ea7fb3a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetFieldReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.eval;
 
@@ -277,7 +278,7 @@ public void generatePostIncrement(BlockScope currentScope, CodeStream codeStream
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo, boolean isReadAccess){
 	// The private access will be managed through the code generation
 
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) return;
 }
 public TypeBinding resolveType(BlockScope scope) {
 	// Answer the signature type of the field.
@@ -325,7 +326,7 @@ public TypeBinding resolveType(BlockScope scope) {
 		return null;
 	}
 
-	if (isFieldUseDeprecated(this.binding, scope, (this.bits & IsStrictlyAssigned) !=0)) {
+	if (isFieldUseDeprecated(this.binding, scope, this.bits)) {
 		scope.problemReporter().deprecatedField(this.binding, this);
 	}
 	// check for this.x in static is done in the resolution of the receiver
diff --git a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.java b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.java
index c21755c..fa30c00 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetMessageSend.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,7 +168,7 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean
 }
 public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo) {
 
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) {
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) == 0) {
 		// if method from parameterized type got found, use the original method at codegen time
 		MethodBinding codegenBinding = this.binding.original();
 		if (codegenBinding != this.binding) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.java b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.java
index 804b849..831c22c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetQualifiedNameReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.eval;
 
@@ -463,7 +464,7 @@ public TypeBinding getOtherFieldBindings(BlockScope scope) {
 			}
 		}
 		// only last field is actually a write access if any
-		if (isFieldUseDeprecated((FieldBinding) this.binding, scope, (this.bits & IsStrictlyAssigned) !=0 && this.indexOfFirstFieldBinding == length)) {
+		if (isFieldUseDeprecated((FieldBinding) this.binding, scope, this.indexOfFirstFieldBinding == length ? this.bits : 0)) {
 			scope.problemReporter().deprecatedField((FieldBinding) this.binding, this);
 		}
 	}
@@ -510,7 +511,7 @@ public TypeBinding getOtherFieldBindings(BlockScope scope) {
 		}
 		if (field.isValidBinding()) {
 			// only last field is actually a write access if any
-			if (isFieldUseDeprecated(field, scope, (this.bits & IsStrictlyAssigned) !=0 && index+1 == length)) {
+			if (isFieldUseDeprecated(field, scope, index+1 == length ? this.bits : 0)) {
 				scope.problemReporter().deprecatedField(field, this);
 			}
 			// constant propagation can only be performed as long as the previous one is a constant too.
diff --git a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java
index 41622af..ea2877b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetSingleNameReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - Contribution for bug 185682 - Increment/decrement operators mark local variables as read
  *******************************************************************************/
 package org.eclipse.jdt.internal.eval;
 
@@ -37,6 +38,7 @@ import org.eclipse.jdt.internal.compiler.lookup.TagBits;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
 import org.eclipse.jdt.internal.compiler.lookup.VariableBinding;
+import org.eclipse.jdt.internal.compiler.problem.AbortMethod;
 
 /**
  * A single name reference inside a code snippet can denote a field of a remote
@@ -101,7 +103,7 @@ public TypeBinding checkFieldAccess(BlockScope scope) {
 	}
 	this.constant = fieldBinding.constant();
 
-	if (isFieldUseDeprecated(fieldBinding, scope, (this.bits & IsStrictlyAssigned) !=0)) {
+	if (isFieldUseDeprecated(fieldBinding, scope, this.bits)) {
 		scope.problemReporter().deprecatedField(fieldBinding, this);
 	}
 	return fieldBinding.type;
@@ -269,6 +271,15 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean
 				break;
 			case Binding.LOCAL : // reading a local
 				LocalVariableBinding localBinding = (LocalVariableBinding) this.binding;
+				if (localBinding.resolvedPosition == -1) {
+					if (valueRequired) {
+						// restart code gen
+						localBinding.useFlag = LocalVariableBinding.USED;
+						throw new AbortMethod(CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE, null);
+					}
+					codeStream.recordPositionsFrom(pc, this.sourceStart);
+					return;
+				}
 				if (!valueRequired)
 					break;
 				// outer local?
@@ -340,6 +351,7 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 		case Binding.LOCAL : // assigning to a local variable (cannot assign to outer local)
 			LocalVariableBinding localBinding = (LocalVariableBinding) this.binding;
 			// using incr bytecode if possible
+			Constant assignConstant;
 			switch (localBinding.type.id) {
 				case T_JavaLangString :
 					codeStream.generateStringConcatenationAppend(currentScope, this, expression);
@@ -349,8 +361,23 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 					codeStream.store(localBinding, false);
 					return;
 				case T_int :
-					Constant assignConstant;
-					if (((assignConstant = expression.constant) != Constant.NotAConstant)
+					assignConstant = expression.constant;
+					if (localBinding.resolvedPosition == -1) {
+						if (valueRequired) {
+							/*
+							 * restart code gen because we either:
+							 * - need the value
+							 * - the constant can have potential side-effect
+							 */
+							localBinding.useFlag = LocalVariableBinding.USED;
+							throw new AbortMethod(CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE, null);
+						} else if (assignConstant == Constant.NotAConstant) {
+							// we only need to generate the value of the expression's constant if it is not a constant expression
+							expression.generateCode(currentScope, codeStream, false);
+						}
+						return;
+					}
+					if ((assignConstant != Constant.NotAConstant)
 							&& (assignConstant.typeID() != TypeIds.T_float) // only for integral types
 							&& (assignConstant.typeID() != TypeIds.T_double)) { // TODO (philippe) is this test needed ?
 						switch (operator) {
@@ -374,6 +401,22 @@ public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeS
 					}
 					//$FALL-THROUGH$
 				default :
+					if (localBinding.resolvedPosition == -1) {
+						assignConstant = expression.constant;
+						if (valueRequired) {
+							/*
+							 * restart code gen because we either:
+							 * - need the value
+							 * - the constant can have potential side-effect
+							 */
+							localBinding.useFlag = LocalVariableBinding.USED;
+							throw new AbortMethod(CodeStream.RESTART_CODE_GEN_FOR_UNUSED_LOCALS_MODE, null);
+						} else if (assignConstant == Constant.NotAConstant) {
+							// we only need to generate the value of the expression's constant if it is not a constant expression
+							expression.generateCode(currentScope, codeStream, false);
+						}
+						return;
+					}
 					codeStream.load(localBinding);
 			}
 	}
@@ -533,7 +576,7 @@ public void manageSyntheticAccessIfNecessary(BlockScope currentScope, FlowInfo f
 		return;
 	}
 
-	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) != 0) return;
+	if ((flowInfo.tagBits & FlowInfo.UNREACHABLE_OR_DEAD) != 0) return;
 	//If inlinable field, forget the access emulation, the code gen will directly target it
 	if (this.constant != Constant.NotAConstant)
 		return;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java
index 5fd2256..c8391d0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/CodeSnippetToCuMapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,8 +16,8 @@ import org.eclipse.jdt.core.CompletionRequestor;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.compiler.*;
-import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.internal.codeassist.ISelectionRequestor;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 
 /**
  * Maps back and forth a code snippet to a compilation unit.
@@ -56,11 +56,24 @@ class CodeSnippetToCuMapper implements EvaluationConstants {
 	// Mapping of external local variables
 	char[][] localVarNames;
 	char[][] localVarTypeNames;
+	
+	long complianceVersion;
 
 /**
  * Rebuild source in presence of external local variables
  */
- public CodeSnippetToCuMapper(char[] codeSnippet, char[] packageName, char[][] imports, char[] className, char[] varClassName, char[][] localVarNames, char[][] localVarTypeNames, int[] localVarModifiers, char[] declaringTypeName, String lineSeparator) {
+ public CodeSnippetToCuMapper(
+		char[] codeSnippet,
+		char[] packageName,
+		char[][] imports,
+		char[] className,
+		char[] varClassName,
+		char[][] localVarNames,
+		char[][] localVarTypeNames,
+		int[] localVarModifiers,
+		char[] declaringTypeName,
+		String lineSeparator,
+		long complianceVersion) {
 	this.codeSnippet = codeSnippet;
 	this.snippetPackageName = packageName;
 	this.snippetImports = imports;
@@ -69,6 +82,7 @@ class CodeSnippetToCuMapper implements EvaluationConstants {
 	this.localVarNames = localVarNames;
 	this.localVarTypeNames = localVarTypeNames;
 	this.snippetDeclaringTypeName = declaringTypeName;
+	this.complianceVersion = complianceVersion;
 	buildCUSource(lineSeparator);
 }
 private void buildCUSource(String lineSeparator) {
@@ -129,6 +143,9 @@ private void buildCUSource(String lineSeparator) {
 		}
 	}
 	// run() method declaration
+	if (this.complianceVersion >= ClassFileConstants.JDK1_5) {
+		buffer.append("@Override "); //$NON-NLS-1$
+	}
 	buffer.append("public void run() throws Throwable {").append(lineSeparator); //$NON-NLS-1$
 	this.lineNumberOffset++;
 	this.startPosOffset = buffer.length();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java
index 5a09110..ed5dc37 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.Map;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.CompletionRequestor;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.WorkingCopyOwner;
 import org.eclipse.jdt.core.compiler.*;
 import org.eclipse.jdt.internal.codeassist.CompletionEngine;
@@ -28,6 +29,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
 import org.eclipse.jdt.internal.compiler.env.IBinaryType;
 import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
 import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
 import org.eclipse.jdt.internal.compiler.util.SuffixConstants;
@@ -128,6 +130,7 @@ public void complete(
 		// Do nothing
 	}
 	final char[] className = "CodeSnippetCompletion".toCharArray(); //$NON-NLS-1$
+	final long complianceVersion = CompilerOptions.versionToJdkLevel(options.get(JavaCore.COMPILER_COMPLIANCE));
 	final CodeSnippetToCuMapper mapper = new CodeSnippetToCuMapper(
 		codeSnippet,
 		this.packageName,
@@ -138,7 +141,8 @@ public void complete(
 		this.localVariableTypeNames,
 		this.localVariableModifiers,
 		this.declaringTypeName,
-		this.lineSeparator
+		this.lineSeparator,
+		complianceVersion
 	);
 	ICompilationUnit sourceUnit = new ICompilationUnit() {
 		public char[] getFileName() {
@@ -570,6 +574,7 @@ public void select(
 	WorkingCopyOwner owner) {
 
 	final char[] className = "CodeSnippetSelection".toCharArray(); //$NON-NLS-1$
+	final long complianceVersion = CompilerOptions.versionToJdkLevel(options.get(JavaCore.COMPILER_COMPLIANCE));
 	final CodeSnippetToCuMapper mapper = new CodeSnippetToCuMapper(
 		codeSnippet,
 		this.packageName,
@@ -580,7 +585,8 @@ public void select(
 		this.localVariableTypeNames,
 		this.localVariableModifiers,
 		this.declaringTypeName,
-		this.lineSeparator
+		this.lineSeparator,
+		complianceVersion
 	);
 	ICompilationUnit sourceUnit = new ICompilationUnit() {
 		public char[] getFileName() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/CodeFormatterApplication.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/CodeFormatterApplication.java
index d2de4c3..d40c718 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/CodeFormatterApplication.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/CodeFormatterApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2009 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     Ben Konrath <ben at bagu.org> - initial implementation
  *     Red Hat Incorporated - improvements based on comments from JDT developers
  *     IBM Corporation - Code review and integration
+ *     IBM Corporation - Fix for 340181
  *******************************************************************************/
 package org.eclipse.jdt.core.formatter;
 
@@ -35,10 +36,14 @@ import org.eclipse.text.edits.TextEdit;
 
 /**
  * Implements an Eclipse Application for org.eclipse.jdt.core.JavaCodeFormatter.
+ * 
+ * <p>On MacOS, when invoked using the Eclipse executable, the "user.dir" property is set to the folder
+ * in which the eclipse.ini file is located. This makes it harder to use relative paths to point to the 
+ * files to be formatted or the configuration file to use to set the code formatter's options.</p>
  *
- * There are a couple improvements that could be made: 1. Make a list of all the
+ * <p>There are a couple improvements that could be made: 1. Make a list of all the
  * files first so that a file does not get formatted twice. 2. Use a text based
- * progress monitor for output.
+ * progress monitor for output.</p>
  *
  * @author Ben Konrath <bkonrath at redhat.com>
  * @since 3.2
@@ -60,6 +65,8 @@ public class CodeFormatterApplication implements IApplication {
 
 		public static String CommandLineErrorConfig;
 
+		public static String CommandLineErrorFileTryFullPath;
+
 		public static String CommandLineErrorFile;
 
 		public static String CommandLineErrorFileDir;
@@ -74,6 +81,8 @@ public class CodeFormatterApplication implements IApplication {
 
 		public static String CommandLineUsage;
 
+		public static String ConfigFileNotFoundErrorTryFullPath;
+
 		public static String ConfigFileReadingError;
 
 		public static String FormatProblem;
@@ -292,7 +301,16 @@ public class CodeFormatterApplication implements IApplication {
 						}
 						filesToFormat[fileCounter++] = file;
 					} else {
-						displayHelp(Messages.bind(Messages.CommandLineErrorFile, currentArg));
+						String canonicalPath;
+						try {
+							canonicalPath = file.getCanonicalPath();
+						} catch(IOException e2) {
+							canonicalPath = file.getAbsolutePath();
+						}
+						String errorMsg = file.isAbsolute()?
+										  Messages.bind(Messages.CommandLineErrorFile, canonicalPath):
+										  Messages.bind(Messages.CommandLineErrorFileTryFullPath, canonicalPath);
+						displayHelp(errorMsg);
 						return null;
 					}
 					break;
@@ -332,17 +350,35 @@ public class CodeFormatterApplication implements IApplication {
 
 	/**
 	 * Return a Java Properties file representing the options that are in the
-	 * specified config file.
+	 * specified configuration file.
 	 */
 	private Properties readConfig(String filename) {
 		BufferedInputStream stream = null;
+		File configFile = new File(filename);
 		try {
-			stream = new BufferedInputStream(new FileInputStream(new File(filename)));
+			stream = new BufferedInputStream(new FileInputStream(configFile));
 			final Properties formatterOptions = new Properties();
 			formatterOptions.load(stream);
 			return formatterOptions;
 		} catch (IOException e) {
-			Util.log(e, Messages.bind(Messages.ConfigFileReadingError));
+			String canonicalPath = null;
+			try {
+				canonicalPath = configFile.getCanonicalPath();
+			} catch(IOException e2) {
+				canonicalPath = configFile.getAbsolutePath();
+			}
+			String errorMessage;
+			if (!configFile.exists() && !configFile.isAbsolute()) {
+				errorMessage = Messages.bind(Messages.ConfigFileNotFoundErrorTryFullPath, new Object[] {
+					canonicalPath,
+					System.getProperty("user.dir") //$NON-NLS-1$
+				});
+
+			} else {
+				errorMessage = Messages.bind(Messages.ConfigFileReadingError, canonicalPath);
+			}
+			Util.log(e, errorMessage);
+			System.err.println(errorMessage);
 		} finally {
 			if (stream != null) {
 				try {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java
index 4be41a6..d6fb0f2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Brock Janiczak - Contribution for bug 150741
+ *     IBM Corporation  - initial API and implementation
+ *     Brock Janiczak   - Contribution for bug 150741
+ *     Ray V. (voidstar at gmail.com) - Contribution for bug 282988
  *******************************************************************************/
 package org.eclipse.jdt.core.formatter;
 
@@ -673,6 +674,19 @@ public class DefaultCodeFormatterConstants {
 
 	/**
 	 * <pre>
+	 * FORMATTER / Option to control whether the white space between code and line comments should be preserved or replaced with a single space
+	 *     - option id:         "org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments"
+	 *     - possible values:   { TRUE, FALSE }
+	 *     - default:           FALSE
+	 * </pre>
+	 * @see #TRUE
+	 * @see #FALSE
+	 * @since 3.7
+	 */
+	public final static String FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT = "org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments"; //$NON-NLS-1$
+
+	/**
+	 * <pre>
 	 * FORMATTER / Option to control whether multiple lines comments are formatted
 	 *     - option id:         "org.eclipse.jdt.core.formatter.comment.format_block_comments"
 	 *     - possible values:   { TRUE, FALSE }
@@ -913,7 +927,7 @@ public class DefaultCodeFormatterConstants {
 	 * void bar1() {}
 	 * void bar2() {}
 	 * }
-	 * </pre>
+	 * </pre></p>
 	 * </li>
 	 * <li>If no enabling tag is found by the formatter after the disabling tag, then
 	 * the end of the snippet won't be formatted.<br>
@@ -951,7 +965,45 @@ public class DefaultCodeFormatterConstants {
 	 * <li>The tag cannot include newline character (i.e. '\n') but it can have white
 	 * spaces.<br>
 	 * E.g. "<b>format: off</b>" is a valid disabling tag.<br>
-	 * In the future, newlines may be used to support multiple disabling tags.</li>
+	 * In the future, newlines may be used to support multiple disabling tags.
+	 * </li>
+	 * <li>The tag can include line or block comments start/end tokens.
+	 * <p>If such tags are used, e.g. "<b>//J-</b>", then the single comment can
+	 * also stop the formatting as shown in the following snippet:</p>
+	 * <pre>
+	 * //J-
+	 * // Formatting was stopped from comment above...
+	 * public class X {
+	 * //J+
+	 * // Formatting is restarted from here...
+	 * void foo() {}
+	 * </pre>
+	 * <p>As any disabling tags, as soon as a comment includes it,
+	 * the formatting stops from this comment:</p>
+	 * <pre>
+	 * public class X {
+	 * // Line comment including the disabling tag: //J-
+	 * // Formatting was stopped from comment above...
+	 * void   foo1()   {}
+	 * //J+
+	 * // Formatting restarts from here...
+	 * void   bar1()   {}
+	 * /*
+	 *  * Block comment including the disabling tag: //J+
+	 *  * The formatter stops from this comment...
+	 *  */
+	 * void   foo2()   {}
+	 * //J+
+	 * // Formatting restarts from here...
+	 * void   bar2()   {}
+	 * /**
+	 *  * Javadoc comment including the enabling tag: //J+
+	 *  * The formatter stops from this comment...
+	 *  */
+	 * void   foo3()   {}
+	 * }
+	 * </pre>
+	 * </li>
 	 * </ol>
 	 * </p>
 	 * @since 3.6
@@ -1012,7 +1064,7 @@ public class DefaultCodeFormatterConstants {
 	 * // @formatter:on
 	 * void bar2() {}
 	 * }
-	 * </pre>
+	 * </pre></p>
 	 * </li>
 	 * <li>If a mix of disabling and enabling tags is done in the same comment, then
 	 * the formatter will only take into account the last encountered tag in the
@@ -1033,10 +1085,54 @@ public class DefaultCodeFormatterConstants {
 	 * void bar() {}
 	 * }
 	 * </pre>
+	 * </li>
 	 * <li>The tag cannot include newline character (i.e. '\n') but it can have white
 	 * spaces.<br>
 	 * E.g. "<b>format: on</b>" is a valid enabling tag<br>
-	 * In the future, newlines may be used to support multiple enabling tags.</li>
+	 * In the future, newlines may be used to support multiple enabling tags.
+	 * </li>
+	 * <li>The tag can include line or block comments start/end tokens. Javadoc
+	 * tokens are not considered as valid tags.
+	 * <p>If such tags are used, e.g. "<b>//J+</b>", then the single comment can
+	 * also start the formatting as shown in the following snippet:</p>
+	 * <pre>
+	 * //J-
+	 * // Formatting was stopped from comment above...
+	 * public class X {
+	 * //J+
+	 * // Formatting restarts from here...
+	 * void foo() {}
+	 * }
+	 * </pre>
+	 * <p>As any enabling tags, as soon as a comment includes it,
+	 * the formatting restarts just after the comment:</p>
+	 * <pre>
+	 * public class X {
+	 * //J-
+	 * // Formatting was stopped from comment above...
+	 * void   foo1()   {}
+	 * // Line comment including the enabling tag: //J+
+	 * // Formatting restarts from here...
+	 * void   bar1()   {}
+	 * //J-
+	 * // Formatting was stopped from comment above...
+	 * void   foo2()   {}
+	 * /*
+	 *  * Block comment including the enabling tag: //J+
+	 *  * The formatter restarts after this comment...
+	 *  */
+	 * // Formatting restarts from here...
+	 * void   bar2()   {}
+	 * //J-
+	 * // Formatting was stopped from comment above...
+	 * void   foo3()   {}
+	 * /**
+	 *  * Javadoc comment including the enabling tag: //J+
+	 *  * The formatter restarts after this comment...
+	 *  */
+	 * void   bar3()   {}
+	 * }
+	 * </pre>
 	 * </li>
 	 * </ol>
 	 * </p>
@@ -1206,11 +1302,69 @@ public class DefaultCodeFormatterConstants {
 	 * @see JavaCore#INSERT
 	 * @see JavaCore#DO_NOT_INSERT
 	 * @since 3.4
+	 * @deprecated
+	 * All new options must be enabled to activate old strategy
+	 * {@link #FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD}
+	 * {@link #FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD}
+	 * {@link #FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE}
+	 * {@link #FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE}
 	 */
 	public static final String FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER = JavaCore.PLUGIN_ID + ".formatter.insert_new_line_after_annotation_on_member";//$NON-NLS-1$
 
 	/**
 	 * <pre>
+	 * FORMATTER / Option to insert a new line after an annotation on a field declaration
+	 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field"
+	 *     - possible values:   { INSERT, DO_NOT_INSERT }
+	 *     - default:           INSERT
+	 * </pre>
+	 * @see JavaCore#INSERT
+	 * @see JavaCore#DO_NOT_INSERT
+	 * @since 3.7
+	 */
+	public static final String FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD = JavaCore.PLUGIN_ID + ".formatter.insert_new_line_after_annotation_on_field";//$NON-NLS-1$
+
+	/**
+	 * <pre>
+	 * FORMATTER / Option to insert a new line after an annotation on a method declaration
+	 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method"
+	 *     - possible values:   { INSERT, DO_NOT_INSERT }
+	 *     - default:           INSERT
+	 * </pre>
+	 * @see JavaCore#INSERT
+	 * @see JavaCore#DO_NOT_INSERT
+	 * @since 3.7
+	 */
+	public static final String FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD = JavaCore.PLUGIN_ID + ".formatter.insert_new_line_after_annotation_on_method";//$NON-NLS-1$
+
+	/**
+	 * <pre>
+	 * FORMATTER / Option to insert a new line after an annotation on a package declaration
+	 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package"
+	 *     - possible values:   { INSERT, DO_NOT_INSERT }
+	 *     - default:           INSERT
+	 * </pre>
+	 * @see JavaCore#INSERT
+	 * @see JavaCore#DO_NOT_INSERT
+	 * @since 3.7
+	 */
+	public static final String FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE = JavaCore.PLUGIN_ID + ".formatter.insert_new_line_after_annotation_on_package";//$NON-NLS-1$
+
+	/**
+	 * <pre>
+	 * FORMATTER / Option to insert a new line after an annotation on a type declaration
+	 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type"
+	 *     - possible values:   { INSERT, DO_NOT_INSERT }
+	 *     - default:           INSERT
+	 * </pre>
+	 * @see JavaCore#INSERT
+	 * @see JavaCore#DO_NOT_INSERT
+	 * @since 3.7
+	 */
+	public static final String FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE = JavaCore.PLUGIN_ID + ".formatter.insert_new_line_after_annotation_on_type";//$NON-NLS-1$
+
+	/**
+	 * <pre>
 	 * FORMATTER / Option to insert a new line after an annotation on a parameter
 	 *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter"
 	 *     - possible values:   { INSERT, DO_NOT_INSERT }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/messages.properties b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/messages.properties
index 154133a..c606e38 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/messages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/core/formatter/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2006 Ben Konrath <ben at bagu.org>
+# Copyright (c) 2006, 2011 Ben Konrath <ben at bagu.org>
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
 # Contributors:
 #     Ben Konrath <ben at bagu.org> - initial implementation
 #     IBM Corporation - Code review and integration
+#     IBM Corporation - Fix for 340181
 ###############################################################################
 CommandLineStart=Starting format job ...
 CommandLineDone=Done.
@@ -27,6 +28,7 @@ CommandLineUsage=Usage: eclipse -application org.eclipse.jdt.core.JavaCodeFormat
 \   -quiet               Only print error messages.\n\
 \   -verbose             Be verbose about the formatting job.
 
+CommandLineErrorFileTryFullPath={0} does not exist. Please try specifying valid absolute path. 
 CommandLineErrorFile={0} does not exist. Please specify only valid Java Source files.
 CommandLineErrorConfig=A problem occurred while reading the config file {0}.
 CommandLineErrorFileDir=You must specify at least one file or directory to format.
@@ -36,6 +38,7 @@ CommandLineErrorNoConfigFile=No configuration file specified.
 CaughtException=Caught {0} : {1}
 ExceptionSkip= {0}\nSkipping File.
 
-ConfigFileReadingError=Error Reading config file.
+ConfigFileNotFoundErrorTryFullPath=Error reading configuration file (file path : {0}, current user directory used to read the file: {1}). Try specifying absolute path.
+ConfigFileReadingError=Error reading configuration file {0}.
 
 FormatProblem=The Eclipse formatter failed to format {0}. Skip the file.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java
index 4be56a9..a89b4d2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java
@@ -172,10 +172,22 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		TerminalTokens.TokenNameGREATER
 	};
 	public int lastLocalDeclarationSourceStart;
+	int lastBinaryExpressionAlignmentBreakIndentation;
 	private Scanner localScanner;
 	public DefaultCodeFormatterOptions preferences;
 	public Scribe scribe;
 
+	// Binary expression positions storage
+	final static long  EXPRESSIONS_POS_ENTER_EQUALITY = 1;
+	final static long  EXPRESSIONS_POS_ENTER_TWO = 2;
+	final static long  EXPRESSIONS_POS_BETWEEN_TWO = 3;
+	final static long  EXPRESSIONS_POS_MASK = EXPRESSIONS_POS_BETWEEN_TWO;
+	long expressionsPos;
+	int expressionsDepth = -1;
+
+	// Array initializers information
+	int arrayInitializersDepth = -1;
+
 	public CodeFormatterVisitor(DefaultCodeFormatterOptions preferences, Map settings, IRegion[] regions, CodeSnippetParsingUtil codeSnippetParsingUtil, boolean includeComments) {
 		long sourceLevel = settings == null
 			? ClassFileConstants.JDK1_3
@@ -421,62 +433,90 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		BinaryExpressionFragmentBuilder builder = buildFragments(binaryExpression, scope);
 		final int fragmentsSize = builder.size();
 
-		if ((builder.realFragmentsSize() > 1 || fragmentsSize > 4) && numberOfParens == 0) {
-			this.scribe.printComment();
-			Alignment binaryExpressionAlignment = this.scribe.createAlignment(
-					Alignment.BINARY_EXPRESSION,
-					this.preferences.alignment_for_binary_expression,
-					Alignment.R_OUTERMOST,
-					fragmentsSize,
-					this.scribe.scanner.currentPosition);
-			this.scribe.enterAlignment(binaryExpressionAlignment);
-			boolean ok = false;
-			ASTNode[] fragments = builder.fragments();
-			int[] operators = builder.operators();
-			do {
-				try {
-					for (int i = 0; i < fragmentsSize - 1; i++) {
-						ASTNode fragment = fragments[i];
-						fragment.traverse(this, scope);
-						this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
-						if (this.scribe.lastNumberOfNewLines == 1) {
-							// a new line has been inserted by printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT)
-							this.scribe.indentationLevel = binaryExpressionAlignment.breakIndentationLevel;
-						}
-						if (this.preferences.wrap_before_binary_operator) {
-							this.scribe.alignFragment(binaryExpressionAlignment, i);
-							this.scribe.printNextToken(operators[i], this.preferences.insert_space_before_binary_operator);
-						} else {
-							this.scribe.printNextToken(operators[i], this.preferences.insert_space_before_binary_operator);
-							this.scribe.alignFragment(binaryExpressionAlignment, i);
-						}
-						if (operators[i] == TerminalTokens.TokenNameMINUS && isNextToken(TerminalTokens.TokenNameMINUS)) {
-							// the next character is a minus (unary operator)
-							this.scribe.space();
-						}
-						if (this.preferences.insert_space_after_binary_operator) {
-							this.scribe.space();
+		if (this.expressionsDepth < 0) {
+			this.expressionsDepth = 0;
+		} else {
+			this.expressionsDepth++;
+			this.expressionsPos <<= 2;
+		}
+		try {
+			this.lastBinaryExpressionAlignmentBreakIndentation = 0;
+			if ((builder.realFragmentsSize() > 1 || fragmentsSize > 4) && numberOfParens == 0) {
+				int scribeLine = this.scribe.line;
+				this.scribe.printComment();
+				Alignment binaryExpressionAlignment = this.scribe.createAlignment(
+						Alignment.BINARY_EXPRESSION,
+						this.preferences.alignment_for_binary_expression,
+						Alignment.R_OUTERMOST,
+						fragmentsSize,
+						this.scribe.scanner.currentPosition);
+				this.scribe.enterAlignment(binaryExpressionAlignment);
+				boolean ok = false;
+				ASTNode[] fragments = builder.fragments();
+				int[] operators = builder.operators();
+				do {
+					try {
+						final int max = fragmentsSize - 1;
+						for (int i = 0; i < max; i++) {
+							ASTNode fragment = fragments[i];
+							fragment.traverse(this, scope);
+							this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+							if (this.scribe.lastNumberOfNewLines == 1) {
+								// a new line has been inserted while printing the comment
+								// hence we need to use the break indentation level before printing next token...
+								this.scribe.indentationLevel = binaryExpressionAlignment.breakIndentationLevel;
+							}
+							if (this.preferences.wrap_before_binary_operator) {
+								this.scribe.alignFragment(binaryExpressionAlignment, i);
+								this.scribe.printNextToken(operators[i], this.preferences.insert_space_before_binary_operator);
+							} else {
+								this.scribe.printNextToken(operators[i], this.preferences.insert_space_before_binary_operator);
+								this.scribe.alignFragment(binaryExpressionAlignment, i);
+							}
+							if (operators[i] == TerminalTokens.TokenNameMINUS && isNextToken(TerminalTokens.TokenNameMINUS)) {
+								// the next character is a minus (unary operator)
+								this.scribe.space();
+							}
+							if (this.preferences.insert_space_after_binary_operator) {
+								this.scribe.space();
+							}
 						}
+						fragments[max].traverse(this, scope);
+						this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+						ok = true;
+					} catch(AlignmentException e){
+						this.scribe.redoAlignment(e);
 					}
-					fragments[fragmentsSize - 1].traverse(this, scope);
-					this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
-					ok = true;
-				} catch(AlignmentException e){
-					this.scribe.redoAlignment(e);
+				} while (!ok);
+				this.scribe.exitAlignment(binaryExpressionAlignment, true);
+				if (this.scribe.line == scribeLine) {
+					// The expression was not broken => reset last break indentation
+					this.lastBinaryExpressionAlignmentBreakIndentation = 0;
+				} else {
+					this.lastBinaryExpressionAlignmentBreakIndentation = binaryExpressionAlignment.breakIndentationLevel;
 				}
-			} while (!ok);
-			this.scribe.exitAlignment(binaryExpressionAlignment, true);
-		} else {
-			binaryExpression.left.traverse(this, scope);
-			this.scribe.printNextToken(operator, this.preferences.insert_space_before_binary_operator);
-			if (operator == TerminalTokens.TokenNameMINUS && isNextToken(TerminalTokens.TokenNameMINUS)) {
-				// the next character is a minus (unary operator)
-				this.scribe.space();
+			} else {
+				this.expressionsPos |= EXPRESSIONS_POS_ENTER_TWO;
+				binaryExpression.left.traverse(this, scope);
+				this.expressionsPos &= ~EXPRESSIONS_POS_MASK;
+				this.expressionsPos |= EXPRESSIONS_POS_BETWEEN_TWO;
+				this.scribe.printNextToken(operator, this.preferences.insert_space_before_binary_operator, Scribe.PRESERVE_EMPTY_LINES_IN_BINARY_EXPRESSION);
+				if (operator == TerminalTokens.TokenNameMINUS && isNextToken(TerminalTokens.TokenNameMINUS)) {
+					// the next character is a minus (unary operator)
+					this.scribe.space();
+				}
+				if (this.preferences.insert_space_after_binary_operator) {
+					this.scribe.space();
+				}
+				binaryExpression.right.traverse(this, scope);
 			}
-			if (this.preferences.insert_space_after_binary_operator) {
-				this.scribe.space();
+		}
+		finally {
+			this.expressionsDepth--;
+			this.expressionsPos >>= 2;
+			if (this.expressionsDepth < 0) {
+				this.lastBinaryExpressionAlignmentBreakIndentation = 0;
 			}
-			binaryExpression.right.traverse(this, scope);
 		}
 		if (numberOfParens > 0) {
 			manageClosingParenthesizedExpression(binaryExpression, numberOfParens);
@@ -494,13 +534,25 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		if (numberOfParens > 0) {
 			manageOpeningParenthesizedExpression(binaryExpression, numberOfParens);
 		}
-		binaryExpression.left.traverse(this, scope);
-		this.scribe.printNextToken(operator, this.preferences.insert_space_before_binary_operator);
-		if (this.preferences.insert_space_after_binary_operator) {
-			this.scribe.space();
+		if (this.expressionsDepth < 0) {
+			this.expressionsDepth = 0;
+		} else {
+			this.expressionsDepth++;
+			this.expressionsPos <<= 2;
+		}
+		try {
+			this.expressionsPos |= EXPRESSIONS_POS_ENTER_EQUALITY;
+			binaryExpression.left.traverse(this, scope);
+			this.scribe.printNextToken(operator, this.preferences.insert_space_before_binary_operator, Scribe.PRESERVE_EMPTY_LINES_IN_EQUALITY_EXPRESSION);
+			if (this.preferences.insert_space_after_binary_operator) {
+				this.scribe.space();
+			}
+			binaryExpression.right.traverse(this, scope);
+		}
+		finally {
+			this.expressionsDepth--;
+			this.expressionsPos >>= 2;
 		}
-		binaryExpression.right.traverse(this, scope);
-
 		if (numberOfParens > 0) {
 			manageClosingParenthesizedExpression(binaryExpression, numberOfParens);
 		}
@@ -561,7 +613,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		Alignment memberAlignment = this.scribe.getMemberAlignment();
 
         this.scribe.printComment();
-		this.scribe.printModifiers(fieldDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+		this.scribe.printModifiers(fieldDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_FIELD);
 		this.scribe.space();
 		/*
 		 * Field type
@@ -675,7 +727,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		Alignment fieldAlignment = this.scribe.getMemberAlignment();
 
         this.scribe.printComment();
-		this.scribe.printModifiers(multiFieldDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+		this.scribe.printModifiers(multiFieldDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_FIELD);
 		this.scribe.space();
 
 		multiFieldDeclaration.declarations[0].type.traverse(this, scope);
@@ -911,7 +963,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		this.scribe.printComment();
 		int line = this.scribe.line;
 
-		this.scribe.printModifiers(typeDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+		this.scribe.printModifiers(typeDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_TYPE);
 
 		if (this.scribe.line > line) {
 			// annotations introduced new line, but this is not a line wrapping
@@ -1156,6 +1208,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 					this.scribe.printNewLine();
 				}
 			} else if (hasConstants) {
+				this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
 				// only had a new line if there is at least one enum constant
 				this.scribe.printNewLine();
 			}
@@ -1253,7 +1306,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 				this.scribe.indent();
 			}
 			formatStatements(scope, statements, true);
-			this.scribe.printComment();
+			this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_AT_END_OF_BLOCK);
 
 			if (this.preferences.indent_statements_compare_to_block) {
 				this.scribe.unIndent();
@@ -1263,7 +1316,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 			if (this.preferences.indent_statements_compare_to_block) {
 				this.scribe.indent();
 			}
-			this.scribe.printComment();
+			this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_AT_END_OF_BLOCK);
 
 			if (this.preferences.indent_statements_compare_to_block) {
 				this.scribe.unIndent();
@@ -1272,7 +1325,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 			if (this.preferences.indent_statements_compare_to_block) {
 				this.scribe.indent();
 			}
-			this.scribe.printComment();
+			this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_AT_END_OF_BLOCK);
 
 			if (this.preferences.indent_statements_compare_to_block) {
 				this.scribe.unIndent();
@@ -1581,20 +1634,14 @@ public class CodeFormatterVisitor extends ASTVisitor {
 	}
 
 	private void formatLeftCurlyBrace(final int line, final String bracePosition) {
-		this.scribe.formatBrace = true;
 		/*
 		 * deal with (quite unexpected) comments right before lcurly
 		 */
-		try {
-			this.scribe.printComment();
-			if (DefaultCodeFormatterConstants.NEXT_LINE_ON_WRAP.equals(bracePosition)
-					&& (this.scribe.line > line || this.scribe.column >= this.preferences.page_width))
-			{
-				this.scribe.printNewLine();
-			}
-		}
-		finally {
-			this.scribe.formatBrace = false;
+		this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_IN_FORMAT_LEFT_CURLY_BRACE);
+		if (DefaultCodeFormatterConstants.NEXT_LINE_ON_WRAP.equals(bracePosition)
+				&& (this.scribe.line > line || this.scribe.column >= this.preferences.page_width))
+		{
+			this.scribe.printNewLine();
 		}
 	}
 
@@ -1735,6 +1782,11 @@ public class CodeFormatterVisitor extends ASTVisitor {
 							if (i > 0) {
 								this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_method_invocation_arguments);
 								this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+								if (this.scribe.lastNumberOfNewLines == 1) {
+									// a new line has been inserted while printing the comment
+									// hence we need to use the break indentation level before printing next token...
+									this.scribe.indentationLevel = argumentsAlignment.breakIndentationLevel;
+								}
 							}
 							this.scribe.alignFragment(argumentsAlignment, i);
 							if (i > 0 && this.preferences.insert_space_after_comma_in_method_invocation_arguments) {
@@ -1805,6 +1857,11 @@ public class CodeFormatterVisitor extends ASTVisitor {
 						if (i > 0) {
 							this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, spaceBeforeComma);
 							this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+							if (this.scribe.lastNumberOfNewLines == 1) {
+								// a new line has been inserted while printing the comment
+								// hence we need to use the break indentation level before printing next token...
+								this.scribe.indentationLevel = argumentsAlignment.breakIndentationLevel;
+							}
 						}
 						this.scribe.alignFragment(argumentsAlignment, i);
 						if (i == 0) {
@@ -1906,7 +1963,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 				this.scribe.printNewLine();
 				this.scribe.indent();
 			}
-			this.scribe.printNextToken(TerminalTokens.TokenNameLBRACE, insertSpaceBeforeBrace);
+			this.scribe.printNextToken(TerminalTokens.TokenNameLBRACE, insertSpaceBeforeBrace, Scribe.PRESERVE_EMPTY_LINES_IN_FORMAT_OPENING_BRACE);
 			this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.UNMODIFIABLE_TRAILING_COMMENT);
 	}
 	private void formatStatements(BlockScope scope, final Statement[] statements, boolean insertNewLineAfterLastStatement) {
@@ -2041,6 +2098,11 @@ public class CodeFormatterVisitor extends ASTVisitor {
 			do {
 				try {
 					for (int i = startIndex, max = members.length; i < max; i++) {
+						while (isNextToken(TerminalTokens.TokenNameSEMICOLON)) {
+							this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon);
+							this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+						}
+						this.scribe.printNewLine();
 						ASTNode member = members[i];
 						if (member instanceof FieldDeclaration) {
 							isChunkStart = memberAlignment.checkChunkStart(Alignment.CHUNK_FIELD, i, this.scribe.scanner.currentPosition);
@@ -2105,7 +2167,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 			this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon);
 			this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
 		}
-		this.scribe.printComment();
+		this.scribe.printComment(Scribe.DO_NOT_PRESERVE_EMPTY_LINES);
 		this.scribe.exitMemberAlignment(memberAlignment);
 	}
 
@@ -2443,7 +2505,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
          * Print comments to get proper line number
          */
         this.scribe.printComment();
-        this.scribe.printModifiers(annotationTypeMemberDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+        this.scribe.printModifiers(annotationTypeMemberDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_METHOD);
 		this.scribe.space();
 		/*
 		 * Print the method return type
@@ -2575,116 +2637,153 @@ public class CodeFormatterVisitor extends ASTVisitor {
 	/**
 	 * @see org.eclipse.jdt.internal.compiler.ASTVisitor#visit(org.eclipse.jdt.internal.compiler.ast.ArrayInitializer, org.eclipse.jdt.internal.compiler.lookup.BlockScope)
 	 */
-	public boolean visit(ArrayInitializer arrayInitializer, BlockScope scope) {		final int numberOfParens = (arrayInitializer.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT;
+	public boolean visit(ArrayInitializer arrayInitializer, BlockScope scope) {
+		final int numberOfParens = (arrayInitializer.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT;
 		if (numberOfParens > 0) {
 			manageOpeningParenthesizedExpression(arrayInitializer, numberOfParens);
 		}
 
-		final Expression[] expressions = arrayInitializer.expressions;
-		if (expressions != null) {
-			String array_initializer_brace_position = this.preferences.brace_position_for_array_initializer;
-			formatOpeningBrace(array_initializer_brace_position, this.preferences.insert_space_before_opening_brace_in_array_initializer);
-
-			int expressionsLength = expressions.length;
-			final boolean insert_new_line_after_opening_brace = this.preferences.insert_new_line_after_opening_brace_in_array_initializer;
-			if (expressionsLength > 1) {
-				if (insert_new_line_after_opening_brace) {
-					this.scribe.printNewLine();
-				}
-				Alignment arrayInitializerAlignment =this.scribe.createAlignment(
-						Alignment.ARRAY_INITIALIZER,
-						this.preferences.alignment_for_expressions_in_array_initializer,
-						Alignment.R_OUTERMOST,
-						expressionsLength,
-						this.scribe.scanner.currentPosition,
-						this.preferences.continuation_indentation_for_array_initializer,
-						true);
-
-				if (insert_new_line_after_opening_brace) {
-					arrayInitializerAlignment.fragmentIndentations[0] = arrayInitializerAlignment.breakIndentationLevel;
-				}
+		if (this.arrayInitializersDepth < 0) {
+			this.arrayInitializersDepth = 0;
+		} else {
+			this.arrayInitializersDepth++;
+		}
+		int arrayInitializerIndentationLevel = this.scribe.indentationLevel;
+		try {
+			final Expression[] expressions = arrayInitializer.expressions;
+			if (expressions != null) {
+				String array_initializer_brace_position = this.preferences.brace_position_for_array_initializer;
+				formatOpeningBrace(array_initializer_brace_position, this.preferences.insert_space_before_opening_brace_in_array_initializer);
 
-				this.scribe.enterAlignment(arrayInitializerAlignment);
+				int expressionsLength = expressions.length;
+				final boolean insert_new_line_after_opening_brace = this.preferences.insert_new_line_after_opening_brace_in_array_initializer;
 				boolean ok = false;
-				do {
-					try {
-						this.scribe.alignFragment(arrayInitializerAlignment, 0);
-						if (this.preferences.insert_space_after_opening_brace_in_array_initializer) {
-							this.scribe.space();
-						}
-						expressions[0].traverse(this, scope);
-						for (int i = 1; i < expressionsLength; i++) {
-							this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
-							this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
-							this.scribe.alignFragment(arrayInitializerAlignment, i);
-							if (this.preferences.insert_space_after_comma_in_array_initializer) {
+				Alignment arrayInitializerAlignment = null;
+				if (expressionsLength > 1) {
+					if (insert_new_line_after_opening_brace) {
+						this.scribe.printNewLine();
+					}
+					arrayInitializerAlignment = this.scribe.createAlignment(
+							Alignment.ARRAY_INITIALIZER,
+							this.preferences.alignment_for_expressions_in_array_initializer,
+							Alignment.R_OUTERMOST,
+							expressionsLength,
+							this.scribe.scanner.currentPosition,
+							this.preferences.continuation_indentation_for_array_initializer,
+							true);
+	
+					if (insert_new_line_after_opening_brace) {
+						arrayInitializerAlignment.fragmentIndentations[0] = arrayInitializerAlignment.breakIndentationLevel;
+					}
+	
+					this.scribe.enterAlignment(arrayInitializerAlignment);
+					do {
+						try {
+							this.scribe.alignFragment(arrayInitializerAlignment, 0);
+							if (this.preferences.insert_space_after_opening_brace_in_array_initializer) {
 								this.scribe.space();
 							}
-							expressions[i].traverse(this, scope);
-							if (i == expressionsLength - 1) {
-								if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
-									this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
-									this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+							expressions[0].traverse(this, scope);
+							for (int i = 1; i < expressionsLength; i++) {
+								this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
+								this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+								this.scribe.alignFragment(arrayInitializerAlignment, i);
+								if (this.preferences.insert_space_after_comma_in_array_initializer) {
+									this.scribe.space();
+								}
+								expressions[i].traverse(this, scope);
+								if (i == expressionsLength - 1) {
+									if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
+										this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
+										this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+									}
 								}
 							}
+							ok = true;
+						} catch (AlignmentException e) {
+							this.scribe.redoAlignment(e);
 						}
-						ok = true;
-					} catch (AlignmentException e) {
-						this.scribe.redoAlignment(e);
+					} while (!ok);
+					this.scribe.exitAlignment(arrayInitializerAlignment, true);
+				} else {
+					// Use an alignment with no break in case when the array initializer
+					// is not inside method arguments alignments
+					if (this.scribe.currentAlignment == null || this.scribe.currentAlignment.kind != Alignment.MESSAGE_ARGUMENTS) {
+						arrayInitializerAlignment = this.scribe.createAlignment(
+								Alignment.ARRAY_INITIALIZER,
+								this.preferences.alignment_for_expressions_in_array_initializer,
+								Alignment.R_OUTERMOST,
+								0,
+								this.scribe.scanner.currentPosition,
+								this.preferences.continuation_indentation_for_array_initializer,
+								true);
+						this.scribe.enterAlignment(arrayInitializerAlignment);
+					}
+					do {
+						try {
+							if (insert_new_line_after_opening_brace) {
+								this.scribe.printNewLine();
+								this.scribe.indent();
+							}
+							// we don't need to use an alignment
+							if (this.preferences.insert_space_after_opening_brace_in_array_initializer) {
+								this.scribe.space();
+							} else {
+								this.scribe.needSpace = false;
+							}
+							expressions[0].traverse(this, scope);
+							if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
+								this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
+								this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+							}
+							if (insert_new_line_after_opening_brace) {
+								this.scribe.unIndent();
+							}
+							ok = true;
+						} catch (AlignmentException e) {
+							if (arrayInitializerAlignment == null) throw e;
+							this.scribe.redoAlignment(e);
+						}
+					} while (!ok);
+					if (arrayInitializerAlignment != null) {
+						this.scribe.exitAlignment(arrayInitializerAlignment, true);
 					}
-				} while (!ok);
-				this.scribe.exitAlignment(arrayInitializerAlignment, true);
-			} else {
-				if (insert_new_line_after_opening_brace) {
-					this.scribe.printNewLine();
-					this.scribe.indent();
 				}
-				// we don't need to use an alignment
-				if (this.preferences.insert_space_after_opening_brace_in_array_initializer) {
+				if (this.preferences.insert_new_line_before_closing_brace_in_array_initializer) {
+					this.scribe.printNewLine();
+				} else if (this.preferences.insert_space_before_closing_brace_in_array_initializer) {
 					this.scribe.space();
-				} else {
-					this.scribe.needSpace = false;
 				}
-				expressions[0].traverse(this, scope);
-				if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
-					this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
-					this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
-				}
-				if (insert_new_line_after_opening_brace) {
+				this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, false, Scribe.PRESERVE_EMPTY_LINES_IN_CLOSING_ARRAY_INITIALIZER + (arrayInitializerIndentationLevel << 16));
+				if (array_initializer_brace_position.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) {
 					this.scribe.unIndent();
 				}
-			}
-			if (this.preferences.insert_new_line_before_closing_brace_in_array_initializer) {
-				this.scribe.printNewLine();
-			} else if (this.preferences.insert_space_before_closing_brace_in_array_initializer) {
-				this.scribe.space();
-			}
-			this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, false);
-			if (array_initializer_brace_position.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) {
-				this.scribe.unIndent();
-			}
-		} else {
-			boolean keepEmptyArrayInitializerOnTheSameLine = this.preferences.keep_empty_array_initializer_on_one_line;
-			String array_initializer_brace_position = this.preferences.brace_position_for_array_initializer;
-			if (keepEmptyArrayInitializerOnTheSameLine) {
-				this.scribe.printNextToken(TerminalTokens.TokenNameLBRACE, this.preferences.insert_space_before_opening_brace_in_array_initializer);
-				if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
-					this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
-					this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
-				}
-				this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, this.preferences.insert_space_between_empty_braces_in_array_initializer);
 			} else {
-				formatOpeningBrace(array_initializer_brace_position, this.preferences.insert_space_before_opening_brace_in_array_initializer);
-				if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
-					this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
-					this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
-				}
-				this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, this.preferences.insert_space_between_empty_braces_in_array_initializer);
-				if (array_initializer_brace_position.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) {
-					this.scribe.unIndent();
+				boolean keepEmptyArrayInitializerOnTheSameLine = this.preferences.keep_empty_array_initializer_on_one_line;
+				String array_initializer_brace_position = this.preferences.brace_position_for_array_initializer;
+				if (keepEmptyArrayInitializerOnTheSameLine) {
+					this.scribe.printNextToken(TerminalTokens.TokenNameLBRACE, this.preferences.insert_space_before_opening_brace_in_array_initializer);
+					if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
+						this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
+						this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+					}
+					this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, this.preferences.insert_space_between_empty_braces_in_array_initializer);
+				} else {
+					formatOpeningBrace(array_initializer_brace_position, this.preferences.insert_space_before_opening_brace_in_array_initializer);
+					if (isNextToken(TerminalTokens.TokenNameCOMMA)) {
+						this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer);
+						this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
+					}
+					this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, this.preferences.insert_space_between_empty_braces_in_array_initializer);
+					if (array_initializer_brace_position.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) {
+						this.scribe.unIndent();
+					}
 				}
 			}
+		} finally {
+			this.arrayInitializersDepth--;
 		}
+		
 
 		if (numberOfParens > 0) {
 			manageClosingParenthesizedExpression(arrayInitializer, numberOfParens);
@@ -3070,7 +3169,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 				this.scribe.printEmptyLines(blankLinesBeforePackage);
 			}
 
-			this.scribe.printModifiers(currentPackage.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+			this.scribe.printModifiers(currentPackage.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_PACKAGE);
 			this.scribe.space();
 			// dump the package keyword
 			this.scribe.printNextToken(TerminalTokens.TokenNamepackage);
@@ -3306,7 +3405,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
          */
         this.scribe.printComment();
         int line = this.scribe.line;
-		this.scribe.printModifiers(constructorDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+		this.scribe.printModifiers(constructorDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_METHOD);
 		if (this.scribe.line > line) {
         	// annotations introduced new line, but this is not a line wrapping
 			// see 158267
@@ -3523,7 +3622,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
          */
         this.scribe.printComment();
         final int line = this.scribe.line;
-        this.scribe.printModifiers(enumConstant.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+        this.scribe.printModifiers(enumConstant.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_FIELD);
 		this.scribe.printNextToken(TerminalTokens.TokenNameIdentifier, false);
 		formatEnumConstantArguments(
 			enumConstant,
@@ -3952,9 +4051,9 @@ public class CodeFormatterVisitor extends ASTVisitor {
 
 		if (elseStatement != null) {
 			if (thenStatementIsBlock) {
-				this.scribe.printNextToken(TerminalTokens.TokenNameelse, this.preferences.insert_space_after_closing_brace_in_block);
+				this.scribe.printNextToken(TerminalTokens.TokenNameelse, this.preferences.insert_space_after_closing_brace_in_block, Scribe.PRESERVE_EMPTY_LINES_BEFORE_ELSE);
 			} else {
-				this.scribe.printNextToken(TerminalTokens.TokenNameelse, true);
+				this.scribe.printNextToken(TerminalTokens.TokenNameelse, true, Scribe.PRESERVE_EMPTY_LINES_BEFORE_ELSE);
 			}
 			if (elseStatement instanceof Block) {
 				elseStatement.traverse(this, scope);
@@ -4119,6 +4218,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		pair.value.traverse(this, scope);
 		return false;
 	}
+
 	/**
 	 * @see org.eclipse.jdt.internal.compiler.ASTVisitor#visit(org.eclipse.jdt.internal.compiler.ast.MessageSend, org.eclipse.jdt.internal.compiler.lookup.BlockScope)
 	 */
@@ -4219,7 +4319,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		do {
 			try {
 
-				this.scribe.printModifiers(methodDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_MEMBER);
+				this.scribe.printModifiers(methodDeclaration.annotations, this, ICodeFormatterConstants.ANNOTATION_ON_METHOD);
 				int fragmentIndex = 0;
 				this.scribe.alignFragment(methodDeclAlignment, fragmentIndex);
 
@@ -4322,7 +4422,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 					this.scribe.indent();
 				}
 				formatStatements(methodDeclarationScope, statements, true);
-				this.scribe.printComment();
+				this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_AT_END_OF_METHOD_DECLARATION);
 				if (this.preferences.indent_statements_compare_to_body) {
 					this.scribe.unIndent();
 				}
@@ -4333,7 +4433,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 				if (this.preferences.indent_statements_compare_to_body) {
 					this.scribe.indent();
 				}
-				this.scribe.printComment();
+				this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_AT_END_OF_METHOD_DECLARATION);
 				if (this.preferences.indent_statements_compare_to_body) {
 					this.scribe.unIndent();
 				}
@@ -4969,7 +5069,7 @@ public class CodeFormatterVisitor extends ASTVisitor {
 			manageOpeningParenthesizedExpression(stringLiteral, numberOfParens);
 		}
 
-		this.scribe.printComment();
+		this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_IN_STRING_LITERAL_CONCATENATION);
 		ASTNode[] fragments = stringLiteral.literals;
 		int fragmentsSize = stringLiteral.counter;
 		Alignment binaryExpressionAlignment = this.scribe.createAlignment(
@@ -5038,7 +5138,6 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		if (this.preferences.insert_space_after_opening_paren_in_switch) {
 			this.scribe.space();
 		}
-
 		switchStatement.expression.traverse(this, scope);
 		this.scribe.printNextToken(TerminalTokens.TokenNameRPAREN, this.preferences.insert_space_before_closing_paren_in_switch);
 		/*
@@ -5048,77 +5147,72 @@ public class CodeFormatterVisitor extends ASTVisitor {
 		formatOpeningBrace(switch_brace, this.preferences.insert_space_before_opening_brace_in_switch);
 		this.scribe.printNewLine();
 
+		final Statement[] statements = switchStatement.statements;
+		int switchIndentationLevel = this.scribe.indentationLevel;
+		int caseIndentation = 0;
+		int statementIndentation = 0;
+		int breakIndentation = 0;
 		if (this.preferences.indent_switchstatements_compare_to_switch) {
-			this.scribe.indent();
+			caseIndentation++;
+			statementIndentation++;
+			breakIndentation++;
+		}
+		if (this.preferences.indent_switchstatements_compare_to_cases) {
+			statementIndentation++;
+		}
+		if (this.preferences.indent_breaks_compare_to_cases) {
+			breakIndentation++;
 		}
-		final Statement[] statements = switchStatement.statements;
 		boolean wasACase = false;
-		boolean wasAStatement = false;
+		boolean wasABreak = false;
 		if (statements != null) {
 			int statementsLength = statements.length;
 			for (int i = 0; i < statementsLength; i++) {
 				final Statement statement = statements[i];
 				if (statement instanceof CaseStatement) {
+					if (wasABreak) {
+						this.scribe.setIndentation(switchIndentationLevel, caseIndentation);
+						this.scribe.printComment();
+					} else {
+						if (wasACase) {
+							this.scribe.printComment(Scribe.PRESERVE_EMPTY_LINES_IN_SWITCH_CASE);
+						} else {
+							this.scribe.printComment();
+						}
+						this.scribe.setIndentation(switchIndentationLevel, caseIndentation);
+					}
 					if (wasACase) {
 						this.scribe.printNewLine();
 					}
-					if ((wasACase && this.preferences.indent_switchstatements_compare_to_cases)
-						|| (wasAStatement && this.preferences.indent_switchstatements_compare_to_cases)) {
-						this.scribe.unIndent();
-					}
 					statement.traverse(this, scope);
-					wasACase = true;
-					wasAStatement = false;
-					if (this.preferences.indent_switchstatements_compare_to_cases) {
-						this.scribe.indent();
-					}
+					// Print following trailing (if any) comment at statement indentation
+					this.scribe.setIndentation(switchIndentationLevel, statementIndentation);
 					this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.COMPLEX_TRAILING_COMMENT);
+					wasACase = true;
+					wasABreak = false;
 				} else if (statement instanceof BreakStatement) {
-					if (this.preferences.indent_breaks_compare_to_cases) {
-						if (wasAStatement && !this.preferences.indent_switchstatements_compare_to_cases) {
-							this.scribe.indent();
-						}
-					} else {
-						if (wasAStatement) {
-							if (this.preferences.indent_switchstatements_compare_to_cases) {
-								this.scribe.unIndent();
-							}
-						}
-						if (wasACase && this.preferences.indent_switchstatements_compare_to_cases) {
-							this.scribe.unIndent();
-						}
-					}
+					this.scribe.setIndentation(switchIndentationLevel, breakIndentation);
 					if (wasACase) {
 						this.scribe.printNewLine();
 					}
+					this.scribe.printComment();
 					statement.traverse(this, scope);
-					if (this.preferences.indent_breaks_compare_to_cases) {
-						this.scribe.unIndent();
-					}
 					wasACase = false;
-					wasAStatement = false;
+					wasABreak = true;
 				} else if (statement instanceof Block) {
-					String bracePosition;
-					if (wasACase) {
-						if (this.preferences.indent_switchstatements_compare_to_cases) {
-							this.scribe.unIndent();
-						}
-						bracePosition =	this.preferences.brace_position_for_block_in_case;
-						formatBlock((Block) statement, scope, bracePosition, this.preferences.insert_space_after_colon_in_case);
-						if (this.preferences.indent_switchstatements_compare_to_cases) {
-							this.scribe.indent();
-						}
-					} else {
-						bracePosition =	this.preferences.brace_position_for_block;
-						formatBlock((Block) statement, scope, bracePosition, this.preferences.insert_space_before_opening_brace_in_block);
-					}
-					wasAStatement = true;
+					this.scribe.setIndentation(switchIndentationLevel, wasACase ? caseIndentation : statementIndentation);
+					this.scribe.printComment();
+					String bracePosition = wasACase ? this.preferences.brace_position_for_block_in_case : this.preferences.brace_position_for_block;
+					formatBlock((Block) statement, scope, bracePosition, this.preferences.insert_space_before_opening_brace_in_block);
 					wasACase = false;
+					wasABreak = false;
 				} else {
+					this.scribe.setIndentation(switchIndentationLevel, statementIndentation);
 					this.scribe.printNewLine();
+					this.scribe.printComment();
 					statement.traverse(this, scope);
-					wasAStatement = true;
 					wasACase = false;
+					wasABreak = false;
 				}
 				if (statement instanceof Expression) {
 					/*
@@ -5162,17 +5256,16 @@ public class CodeFormatterVisitor extends ASTVisitor {
 				} else if (!wasACase) {
 					this.scribe.printNewLine();
 				}
-				this.scribe.printComment();
 			}
 		}
-
-		if ((wasACase || wasAStatement) && this.preferences.indent_switchstatements_compare_to_cases) {
-			this.scribe.unIndent();
-		}
-		if (this.preferences.indent_switchstatements_compare_to_switch) {
-			this.scribe.unIndent();
-		}
 		this.scribe.printNewLine();
+		if (wasABreak) {
+			this.scribe.setIndentation(switchIndentationLevel, 0);
+			this.scribe.printComment();
+		} else {
+			this.scribe.printComment();
+			this.scribe.setIndentation(switchIndentationLevel, 0);
+		}
 		this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE);
 		this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT);
 		if (switch_brace.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
index 5dc553e..f987d0f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
@@ -336,8 +336,11 @@ public class DefaultCodeFormatter extends CodeFormatter {
 			optionsMap.put(CompilerOptions.OPTION_ReportUnusedParameterWhenImplementingAbstract, CompilerOptions.DISABLED);
 			optionsMap.put(CompilerOptions.OPTION_ReportUnusedParameterWhenOverridingConcrete, CompilerOptions.DISABLED);
 			optionsMap.put(CompilerOptions.OPTION_ReportSpecialParameterHidingField, CompilerOptions.DISABLED);
+			optionsMap.put(CompilerOptions.OPTION_ReportUnavoidableGenericTypeProblems, CompilerOptions.ENABLED);
 			optionsMap.put(CompilerOptions.OPTION_MaxProblemPerUnit, String.valueOf(100));
 			optionsMap.put(CompilerOptions.OPTION_InlineJsr, CompilerOptions.DISABLED);
+			optionsMap.put(CompilerOptions.OPTION_ReportMethodCanBeStatic, CompilerOptions.IGNORE);
+			optionsMap.put(CompilerOptions.OPTION_ReportMethodCanBePotentiallyStatic, CompilerOptions.IGNORE);
 			this.defaultCompilerOptions = optionsMap;
 		}
 		Object sourceOption = this.options.get(CompilerOptions.OPTION_Source);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java
index 0e6bf72..df38bf8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatterOptions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Brock Janiczak - Contribution for bug 150741
+ *     Ray V. (voidstar at gmail.com) - Contribution for bug 282988
  *******************************************************************************/
 package org.eclipse.jdt.internal.formatter;
 
@@ -115,6 +116,7 @@ public class DefaultCodeFormatterOptions {
 	public boolean comment_indent_root_tags;
 	public boolean comment_insert_empty_line_before_root_tags;
 	public boolean comment_insert_new_line_for_parameter;
+	public boolean comment_preserve_white_space_between_code_and_line_comments;
 	public int comment_line_length;
 
 	public boolean use_tags;
@@ -135,7 +137,10 @@ public class DefaultCodeFormatterOptions {
 	public boolean indent_switchstatements_compare_to_switch;
 	public int indentation_size;
 
-	public boolean insert_new_line_after_annotation_on_member;
+	public boolean insert_new_line_after_annotation_on_type;
+	public boolean insert_new_line_after_annotation_on_field;
+	public boolean insert_new_line_after_annotation_on_method;
+	public boolean insert_new_line_after_annotation_on_package;
 	public boolean insert_new_line_after_annotation_on_parameter;
 	public boolean insert_new_line_after_annotation_on_local_variable;
 	public boolean insert_new_line_after_label;
@@ -395,6 +400,7 @@ public class DefaultCodeFormatterOptions {
 		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_INDENT_ROOT_TAGS, this.comment_indent_root_tags ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_INSERT_EMPTY_LINE_BEFORE_ROOT_TAGS, this.comment_insert_empty_line_before_root_tags ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_INSERT_NEW_LINE_FOR_PARAMETER, this.comment_insert_new_line_for_parameter ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT, this.comment_preserve_white_space_between_code_and_line_comments ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_LINE_LENGTH, Integer.toString(this.comment_line_length));
 		options.put(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION, Integer.toString(this.continuation_indentation));
 		options.put(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER, Integer.toString(this.continuation_indentation_for_array_initializer));
@@ -421,7 +427,10 @@ public class DefaultCodeFormatterOptions {
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_CASES, this.indent_switchstatements_compare_to_cases ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH, this.indent_switchstatements_compare_to_switch ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE, Integer.toString(this.indentation_size));
-		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER, this.insert_new_line_after_annotation_on_member ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE, this.insert_new_line_after_annotation_on_type ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD, this.insert_new_line_after_annotation_on_field ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD, this.insert_new_line_after_annotation_on_method ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
+		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE, this.insert_new_line_after_annotation_on_package ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER, this.insert_new_line_after_annotation_on_parameter ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE, this.insert_new_line_after_annotation_on_local_variable ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER, this.insert_new_line_after_opening_brace_in_array_initializer? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
@@ -1125,6 +1134,10 @@ public class DefaultCodeFormatterOptions {
 		if (commentInsertNewLineForParameterOption != null) {
 			this.comment_insert_new_line_for_parameter = JavaCore.INSERT.equals(commentInsertNewLineForParameterOption);
 		}
+		final Object commentPreserveWhiteSpaceBetweenCodeAndLineCommentsOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT);
+		if (commentPreserveWhiteSpaceBetweenCodeAndLineCommentsOption != null) {
+			this.comment_preserve_white_space_between_code_and_line_comments = DefaultCodeFormatterConstants.TRUE.equals(commentPreserveWhiteSpaceBetweenCodeAndLineCommentsOption);
+		}
 		final Object commentLineLengthOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_COMMENT_LINE_LENGTH);
 		if (commentLineLengthOption != null) {
 			try {
@@ -2028,22 +2041,69 @@ public class DefaultCodeFormatterOptions {
 				this.comment_clear_blank_lines_in_block_comment = DefaultCodeFormatterConstants.TRUE.equals(commentClearBlankLinesInBlockCommentOption);
 			}
 		}
-		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=122247
+		
+		// New line after annotations
 		final Object insertNewLineAfterAnnotationOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION);
-		if (insertNewLineAfterAnnotationOption != null) { // check if deprecated option was used
-			this.insert_new_line_after_annotation_on_member = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOption);
-			this.insert_new_line_after_annotation_on_parameter = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOption);
-			this.insert_new_line_after_annotation_on_local_variable = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOption);
-		} else {
-			final Object insertNewLineAfterAnnotationOnMemberOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER);
-			if (insertNewLineAfterAnnotationOnMemberOption != null) { // otherwhise, use the new options
-				this.insert_new_line_after_annotation_on_member = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnMemberOption);
+		
+		final Object insertNewLineAfterAnnotationOnMemberOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER);
+		final Object insertNewLineAfterAnnotationOnTypeOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE);
+		final Object insertNewLineAfterAnnotationOnFieldOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD);
+		final Object insertNewLineAfterAnnotationOnMethodOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD);
+		final Object insertNewLineAfterAnnotationOnPackageOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE);
+		
+		final Object insertNewLineAfterAnnotationOnParameterOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER);
+		final Object insertNewLineAfterAnnotationOnLocalVariableOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE);
+
+		if (insertNewLineAfterAnnotationOnTypeOption == null
+				&& insertNewLineAfterAnnotationOnFieldOption == null
+				&& insertNewLineAfterAnnotationOnMethodOption == null
+				&& insertNewLineAfterAnnotationOnPackageOption == null) {
+			// if none of the new 3.7 options is used, fall back to the deprecated 3.4 option
+			if (insertNewLineAfterAnnotationOnMemberOption != null) {
+				boolean insert = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnMemberOption);
+				this.insert_new_line_after_annotation_on_type = insert;
+				this.insert_new_line_after_annotation_on_field = insert;
+				this.insert_new_line_after_annotation_on_method = insert;
+				this.insert_new_line_after_annotation_on_package = insert;
+				
+				// and use the other 3.4 options if available
+				if (insertNewLineAfterAnnotationOnParameterOption != null) {
+					this.insert_new_line_after_annotation_on_parameter = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnParameterOption);
+				}
+				if (insertNewLineAfterAnnotationOnLocalVariableOption != null) {
+					this.insert_new_line_after_annotation_on_local_variable = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnLocalVariableOption);
+				}
+				
+			} else if (insertNewLineAfterAnnotationOnParameterOption == null
+					&& insertNewLineAfterAnnotationOnLocalVariableOption == null) {
+				// if none of the new 3.4 options is used, fall back to the deprecated 3.1 option
+				if (insertNewLineAfterAnnotationOption != null) {
+					boolean insert = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOption);
+					this.insert_new_line_after_annotation_on_type = insert;
+					this.insert_new_line_after_annotation_on_field = insert;
+					this.insert_new_line_after_annotation_on_method = insert;
+					this.insert_new_line_after_annotation_on_package = insert;
+					this.insert_new_line_after_annotation_on_parameter = insert;
+					this.insert_new_line_after_annotation_on_local_variable = insert;
+				}
+			}
+		} else { // otherwise use new 3.7 options if available
+			if (insertNewLineAfterAnnotationOnTypeOption != null) {
+				this.insert_new_line_after_annotation_on_type = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnTypeOption);
+			}
+			if (insertNewLineAfterAnnotationOnFieldOption != null) {
+				this.insert_new_line_after_annotation_on_field = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnFieldOption);
+			}
+			if (insertNewLineAfterAnnotationOnMethodOption != null) {
+				this.insert_new_line_after_annotation_on_method = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnMethodOption);
+			}
+			if (insertNewLineAfterAnnotationOnPackageOption != null) {
+				this.insert_new_line_after_annotation_on_package = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnPackageOption);
 			}
-			final Object insertNewLineAfterAnnotationOnParameterOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER);
+			// and the other 3.4 options if available
 			if (insertNewLineAfterAnnotationOnParameterOption != null) {
 				this.insert_new_line_after_annotation_on_parameter = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnParameterOption);
 			}
-			final Object insertNewLineAfterAnnotationOnLocalVariableOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE);
 			if (insertNewLineAfterAnnotationOnLocalVariableOption != null) {
 				this.insert_new_line_after_annotation_on_local_variable = JavaCore.INSERT.equals(insertNewLineAfterAnnotationOnLocalVariableOption);
 			}
@@ -2101,6 +2161,7 @@ public class DefaultCodeFormatterOptions {
 		this.comment_new_lines_at_block_boundaries = true;
 		this.comment_new_lines_at_javadoc_boundaries = true;
 		this.comment_line_length = 80;
+		this.comment_preserve_white_space_between_code_and_line_comments= false; 
 		this.continuation_indentation = 2;
 		this.continuation_indentation_for_array_initializer = 2;
 		this.blank_lines_after_imports = 0;
@@ -2126,7 +2187,10 @@ public class DefaultCodeFormatterOptions {
 		this.indent_switchstatements_compare_to_cases = true;
 		this.indent_switchstatements_compare_to_switch = true;
 		this.indentation_size = 4;
-		this.insert_new_line_after_annotation_on_member = true;
+		this.insert_new_line_after_annotation_on_type = true;
+		this.insert_new_line_after_annotation_on_field = true;
+		this.insert_new_line_after_annotation_on_method = true;
+		this.insert_new_line_after_annotation_on_package = true;
 		this.insert_new_line_after_annotation_on_parameter = false;
 		this.insert_new_line_after_annotation_on_local_variable = true;
 		this.insert_new_line_after_opening_brace_in_array_initializer = false;
@@ -2376,6 +2440,7 @@ public class DefaultCodeFormatterOptions {
 		this.comment_new_lines_at_block_boundaries = true;
 		this.comment_new_lines_at_javadoc_boundaries = true;
 		this.comment_line_length = 80;
+		this.comment_preserve_white_space_between_code_and_line_comments= false; 
 		this.continuation_indentation = 2;
 		this.continuation_indentation_for_array_initializer = 2;
 		this.blank_lines_after_imports = 1;
@@ -2401,7 +2466,10 @@ public class DefaultCodeFormatterOptions {
 		this.indent_switchstatements_compare_to_cases = true;
 		this.indent_switchstatements_compare_to_switch = false;
 		this.indentation_size = 4;
-		this.insert_new_line_after_annotation_on_member = true;
+		this.insert_new_line_after_annotation_on_type = true;
+		this.insert_new_line_after_annotation_on_field = true;
+		this.insert_new_line_after_annotation_on_method = true;
+		this.insert_new_line_after_annotation_on_package = true;
 		this.insert_new_line_after_annotation_on_parameter = false;
 		this.insert_new_line_after_annotation_on_local_variable = true;
 		this.insert_new_line_after_opening_brace_in_array_initializer = false;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/FormatJavadocBlock.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/FormatJavadocBlock.java
index daf6fc4..472f4f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/FormatJavadocBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/FormatJavadocBlock.java
@@ -187,7 +187,7 @@ FormatJavadocText[] getTextHierarchy(FormatJavadocNode node, int htmlDepth) {
 		if (lastText.depth == htmlDepth || // found same html tag level => use it
 			lastText.htmlNodesPtr == -1) {	// no more sub-levels => add one
 			// Text breakage
-			if (lastText.isHtmlTag() && text != null) {
+			if (lastText.isHtmlTag()) {
 				// Set some lines before if previous was specific html tag
 				// The added text is concerned if the parent has no child yet or is top level and closing html tag
 				boolean setLinesBefore = lastText.separatorsPtr == -1 || (ptr == 0 && lastText.isClosingHtmlTag());
@@ -202,19 +202,19 @@ FormatJavadocText[] getTextHierarchy(FormatJavadocNode node, int htmlDepth) {
 				if (setLinesBefore) {
 					switch (lastText.getHtmlTagID()) {
 						case JAVADOC_CODE_TAGS_ID:
-							if (text.linesBefore < 2) {
-								text.linesBefore = 2;
+							if (node.linesBefore < 2) {
+								node.linesBefore = 2;
 							}
 							break;
 						case JAVADOC_SEPARATOR_TAGS_ID:
 				    	case JAVADOC_SINGLE_BREAK_TAG_ID:
-							if (text.linesBefore < 1) {
-								text.linesBefore = 1;
+							if (node.linesBefore < 1) {
+								node.linesBefore = 1;
 							}
 					}
 				}
 				// If adding an html tag on same html tag, then close previous one and leave
-				if (text.isHtmlTag() && !text.isClosingHtmlTag() && text.getHtmlTagIndex() == lastText.getHtmlTagIndex() && !lastText.isClosingHtmlTag()) {
+				if (text != null && text.isHtmlTag() && !text.isClosingHtmlTag() && text.getHtmlTagIndex() == lastText.getHtmlTagIndex() && !lastText.isClosingHtmlTag()) {
 					lastText.closeTag();
 					return textHierarchy;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/ICodeFormatterConstants.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/ICodeFormatterConstants.java
index 10a349e..7b06d55 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/ICodeFormatterConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/ICodeFormatterConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,12 +24,21 @@ public interface ICodeFormatterConstants {
 	/** annotation on unspecified source*/
 	public static final int ANNOTATION_UNSPECIFIED = 0;
 
-	/** annotation on a member (type, method, field) */
-	public static final int ANNOTATION_ON_MEMBER = 1;
+	/** annotation on a type */
+	public static final int ANNOTATION_ON_TYPE = 1;
+
+	/** annotation on a field */
+	public static final int ANNOTATION_ON_FIELD = 2;
+
+	/** annotation on a method */
+	public static final int ANNOTATION_ON_METHOD = 3;
+
+	/** annotation on a package */
+	public static final int ANNOTATION_ON_PACKAGE = 4;
 
 	/** annotation on a parameter */
-	public static final int ANNOTATION_ON_PARAMETER = 2;
+	public static final int ANNOTATION_ON_PARAMETER = 5;
 
 	/** annotation on a local variable */
-	public static final int ANNOTATION_ON_LOCAL_VARIABLE = 3;
+	public static final int ANNOTATION_ON_LOCAL_VARIABLE = 6;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/OptimizedReplaceEdit.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/OptimizedReplaceEdit.java
index a8aa4f6..6905adc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/OptimizedReplaceEdit.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/OptimizedReplaceEdit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,6 @@ public class OptimizedReplaceEdit {
 	}
 
 	public String toString() {
-		return "(" + this.offset + ", length " + this.length + " :>" + this.replacement + "<"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
+		return (this.offset < 0 ? "(" : "X(") + this.offset + ", length " + this.length + " :>" + this.replacement + "<"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$ //$NON-NLS-5$
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java
index c4f04f8..6cfc7b8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Ray V. (voidstar at gmail.com) - Contribution for bug 282988
  *******************************************************************************/
 package org.eclipse.jdt.internal.formatter;
 
@@ -73,7 +74,6 @@ public class Scribe implements IJavaDocTagConstants {
 	public int indentationLevel;
 	public int lastNumberOfNewLines;
 	private boolean preserveLineBreakIndentation = false;
-	boolean formatBrace;
 	public int line;
 
 	private int[] lineEnds;
@@ -105,9 +105,27 @@ public class Scribe implements IJavaDocTagConstants {
 	private final boolean indentEmptyLines;
 	int blank_lines_between_import_groups = -1;
 
+	// Preserve empty lines constants
+	public static final int DO_NOT_PRESERVE_EMPTY_LINES = -1;
+	public static final int PRESERVE_EMPTY_LINES_KEEP_LAST_NEW_LINES_INDENTATION = 1;
+	public static final int PRESERVE_EMPTY_LINES_IN_FORMAT_LEFT_CURLY_BRACE = 2;
+	public static final int PRESERVE_EMPTY_LINES_IN_STRING_LITERAL_CONCATENATION = 3;
+	public static final int PRESERVE_EMPTY_LINES_IN_CLOSING_ARRAY_INITIALIZER = 4;
+	public static final int PRESERVE_EMPTY_LINES_IN_FORMAT_OPENING_BRACE = 5;
+	public static final int PRESERVE_EMPTY_LINES_IN_BINARY_EXPRESSION = 6;
+	public static final int PRESERVE_EMPTY_LINES_IN_EQUALITY_EXPRESSION = 7;
+	public static final int PRESERVE_EMPTY_LINES_BEFORE_ELSE = 8;
+	public static final int PRESERVE_EMPTY_LINES_IN_SWITCH_CASE = 9;
+	public static final int PRESERVE_EMPTY_LINES_AT_END_OF_METHOD_DECLARATION = 10;
+	public static final int PRESERVE_EMPTY_LINES_AT_END_OF_BLOCK = 11;
+	final static int PRESERVE_EMPTY_LINES_DO_NOT_USE_ANY_INDENTATION = -1;
+	final static int PRESERVE_EMPTY_LINES_USE_CURRENT_INDENTATION = 0;
+	final static int PRESERVE_EMPTY_LINES_USE_TEMPORARY_INDENTATION = 1;
+
 	/** disabling */
 	boolean editsEnabled;
 	boolean useTags;
+	int tagsKind;
 
 	/* Comments formatting */
 	private static final int INCLUDE_BLOCK_COMMENTS = CodeFormatter.F_INCLUDE_COMMENTS | CodeFormatter.K_MULTI_LINE_COMMENT;
@@ -219,26 +237,12 @@ public class Scribe implements IJavaDocTagConstants {
 				// the offset of the region is inside a comment => restart the region from the comment start
 				adaptedOffset = this.commentPositions[index][0];
 				if (adaptedOffset >= 0) {
-					// adapt only javadoc or block commments. Since fix for bug
+					// adapt only javadoc or block comments. Since fix for bug
 					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=238210
 					// edits in line comments only concerns whitespaces hence can be
 					// treated as edits in code
 					adaptedLength = length + offset - adaptedOffset;
 					commentIndex = index;
-					// include also the indentation edit just before the comment if any
-					for (int j=0; j<this.editsIndex; j++) {
-						int editOffset = this.edits[j].offset;
-						int editEnd = editOffset + this.edits[j].length;
-						if (editEnd == adaptedOffset) {
-							if (j > 0 && this.edits[j].replacement.trim().length() == 0) {
-								adaptedLength += adaptedOffset - this.edits[j].offset;
-								adaptedOffset = editOffset;
-								break;
-							}
-						} else if (editEnd > adaptedOffset) {
-							break;
-						}
-					}
 				}
 			}
 			index = getCommentIndex(commentIndex, offset+length-1);
@@ -299,6 +303,14 @@ public class Scribe implements IJavaDocTagConstants {
 				currentEdit = index;
 			}
 		}
+
+    	// Set invalid all edits outside the region
+		if (currentEdit != -1) {
+			int length = sortedEdits.length;
+	    	for (int e=currentEdit; e<length; e++) {
+	    		sortedEdits[e].offset = -1;
+	    	}
+    	}
 	}
 
 	/*
@@ -316,12 +328,12 @@ public class Scribe implements IJavaDocTagConstants {
      * region.
      */
     private int adaptEdit(OptimizedReplaceEdit[] sortedEdits, int start, int regionStart, int regionEnd) {
-    	int bottom = start==-1?0:start, top = sortedEdits.length - 1;
+    	int initialStart = start==-1 ? 0 : start;
+		int bottom = initialStart, top = sortedEdits.length - 1;
     	int topEnd = top;
     	int i = 0;
     	OptimizedReplaceEdit edit = null;
     	int overlapIndex = -1;
-        int linesOutside= -1;
 
     	// Look for an edit overlapping the region start
     	while (bottom <= top) {
@@ -329,28 +341,37 @@ public class Scribe implements IJavaDocTagConstants {
     		edit = sortedEdits[i];
     		int editStart = edit.offset;
    			int editEnd = editStart + edit.length;
-    		if (regionStart < editStart) {  // the edit starts after the region's start => no possible overlap of region's start
+    		if (editStart > regionStart) {  // the edit starts after the region's start => no possible overlap of region's start
     			top = i-1;
-    			if (regionEnd < editStart) { // the edit starts after the region's end => no possible overlap of region's end
+    			if (editStart > regionEnd) { // the edit starts after the region's end => no possible overlap of region's end
     				topEnd = top;
     			}
     		} else {
-    			if (regionStart >= editEnd) { // the edit ends before the region's start => no possible overlap of region's start
+    			if (editEnd < regionStart) { // the edit ends before the region's start => no possible overlap of region's start
 	    			bottom = i+1;
 				} else {
 					// Count the lines of the edit which are outside the region
-					linesOutside = 0;
+					int linesOutside = 0;
+					StringBuffer spacesOutside = new StringBuffer();
 					this.scanner.resetTo(editStart, editEnd-1);
-					while (!this.scanner.atEnd()) {
-						boolean before = this.scanner.currentPosition < regionStart;
-	                    char ch = (char) this.scanner.getNextChar();
-                    	if (ch == '\n' ) {
-                    		if (before) linesOutside++;
-                    	}
-                    }
+					while (this.scanner.currentPosition < regionStart && !this.scanner.atEnd()) {
+						char ch = (char) this.scanner.getNextChar();
+						switch (ch) {
+							case '\n':
+								linesOutside++;
+								spacesOutside.setLength(0);
+								break;
+							case '\r':
+								break;
+							default:
+								spacesOutside.append(ch);
+								break;
+						}
+					}
 
 					// Restart the edit at the beginning of the line where the region start
 					edit.offset = regionStart;
+					int editLength = edit.length;
 					edit.length -= edit.offset - editStart;
 
 					// Cut replacement string if necessary
@@ -363,36 +384,66 @@ public class Scribe implements IJavaDocTagConstants {
 							if (edit.replacement.charAt(idx) == '\n') linesReplaced++;
 						}
 
-						// As the edit starts outside the region, remove first lines from edit string if any
-						if (linesReplaced > 0) {
-					    	int linesCount = linesOutside >= linesReplaced ? linesReplaced : linesOutside;
-					    	if (linesCount > 0) {
-					    		int idx=0;
-					    		loop: while (idx < length) {
-					    			char ch = edit.replacement.charAt(idx);
-					    			switch (ch) {
-					    				case '\n':
-						    				linesCount--;
-						    				if (linesCount == 0) {
-						    					idx++;
-						    					break loop;
-						    				}
-						    				break;
-					    				case '\r':
-					    				case ' ':
-					    				case '\t':
-					    					break;
-					    				default:
-					    					break loop;
-					    			}
-					    			idx++;
-					    		}
-					    		if (idx >= length) {
-					    			edit.replacement = ""; //$NON-NLS-1$
-					    		} else {
-					    			edit.replacement = edit.replacement.substring(idx);
-					    		}
-					    	}
+						// If the edit was a replacement but become an insertion due to the length reduction
+						// and if the edit finishes just before the region starts and if there's no line to replace
+						// then there's no replacement to do...
+						if (editLength > 0 && edit.length == 0 && editEnd == regionStart && linesReplaced == 0 && linesOutside== 0) {
+							edit.offset = -1;
+						} else {
+
+							// As the edit starts outside the region, remove first lines from edit string if any
+							if (linesReplaced > 0) {
+								int linesCount = linesOutside >= linesReplaced ? linesReplaced : linesOutside;
+								if (linesCount > 0) {
+									int idx = 0;
+									loop: while (idx < length) {
+										char ch = edit.replacement.charAt(idx);
+										switch (ch) {
+											case '\n':
+												linesCount--;
+												if (linesCount == 0) {
+													idx++;
+													break loop;
+												}
+												break;
+											case '\r':
+											case ' ':
+											case '\t':
+												break;
+											default:
+												break loop;
+										}
+										idx++;
+									}
+									// Compare spaces outside the region and the beginning
+									// of the replacement string to remove the common part
+									int spacesOutsideLength = spacesOutside.length();
+									int replacementStart = idx;
+									for (int o=0, r=0; o < spacesOutsideLength && r<(length-idx); o++) {
+										char rch = edit.replacement.charAt(idx + r);
+										char och = spacesOutside.charAt(o);
+										if (rch == och) {
+											replacementStart++;
+											r++;
+										} else if (rch == '\t' && (this.tabLength > 0 && och == ' ')) {
+											if ((o+1)%this.tabLength == 0) {
+												replacementStart++;
+												r++;
+											}
+										} else {
+											break;
+										}
+									}
+									// Update the replacement string
+									if (replacementStart > length || (replacementStart == length && spacesOutsideLength > 0)) {
+										edit.offset = -1;
+									} else if (spacesOutsideLength == 0 && replacementStart == length) {
+										edit.replacement = ""; //$NON-NLS-1$
+									} else {
+										edit.replacement = edit.replacement.substring(replacementStart);
+									}
+								}
+							}
 						}
 					}
 					overlapIndex = i;
@@ -400,6 +451,7 @@ public class Scribe implements IJavaDocTagConstants {
 				}
 			}
     	}
+    	int validIndex = (overlapIndex != -1) ? overlapIndex : bottom;
 
     	// Look for an edit overlapping the region end
     	if (overlapIndex != -1) bottom = overlapIndex;
@@ -408,53 +460,89 @@ public class Scribe implements IJavaDocTagConstants {
     		edit = sortedEdits[i];
     		int editStart = edit.offset;
    			int editEnd = editStart + edit.length;
-    		if (regionEnd < editStart) {	// the edit starts after the region's end => no possible overlap of region's end
+   			if (regionEnd < editStart) {	// the edit starts after the region's end => no possible overlap of region's end
     			topEnd = i-1;
-    		} else {
-    			if (regionEnd >= editEnd) {	// the edit ends before the region's end => no possible overlap of region's end
-	    			bottom = i+1;
-				} else {
-					// Count the lines of the edit which are outside the region
-					linesOutside = 0;
-					this.scanner.resetTo(editStart, editEnd-1);
-					while (!this.scanner.atEnd()) {
-						boolean after = this.scanner.currentPosition >= regionEnd;
-	                    char ch = (char) this.scanner.getNextChar();
-                    	if (ch == '\n' ) {
-                    		if (after) linesOutside++;
-                    	}
-                    }
+    		} else if (regionEnd == editStart) {	// special case when the edit starts just after the region's end...
+    			// ...we got the last index of the edit inside the region
+				topEnd = i - 1;
+    			// this last edit is valid only if it's an insertion and if it has indentation
+    			if (edit.length == 0) {
+    				int nrLength = 0;
+    				int rLength = edit.replacement.length();
+    				if (nrLength < rLength) {
+	    				int ch = edit.replacement.charAt(nrLength);
+	    				loop: while (nrLength < rLength) {
+		    				switch (ch) {
+		    					case ' ':
+		    					case '\t':
+		    						nrLength++;
+		    						break;
+		    					default:
+		    						break loop;
+		    				}
+	    				}
+    				}
+    				if (nrLength > 0) {
+	    				topEnd++;
+	    				if (nrLength < rLength) {
+	    					edit.replacement = edit.replacement.substring(0, nrLength);
+	    				}
+    				}
+    			}
+    			break;
+       		} else if (editEnd <= regionEnd) {	// the edit ends before the region's end => no possible overlap of region's end
+    			bottom = i+1;
+			} else {
+				// Count the lines of the edit which are outside the region
+				int linesOutside = 0;
+				this.scanner.resetTo(editStart, editEnd-1);
+				while (!this.scanner.atEnd()) {
+					boolean after = this.scanner.currentPosition >= regionEnd;
+                    char ch = (char) this.scanner.getNextChar();
+                	if (ch == '\n' ) {
+                		if (after) linesOutside++;
+                	}
+                }
 
-					// Cut replacement string if necessary
-					int length = edit.replacement.length();
-					if (length > 0) {
+				// Cut replacement string if necessary
+				int length = edit.replacement.length();
+				if (length > 0) {
 
-						// Count the lines in replacement string
-						int linesReplaced = 0;
-						for (int idx=0; idx < length; idx++) {
-							if (edit.replacement.charAt(idx) == '\n') linesReplaced++;
-						}
+					// Count the lines in replacement string
+					int linesReplaced = 0;
+					for (int idx=0; idx < length; idx++) {
+						if (edit.replacement.charAt(idx) == '\n') linesReplaced++;
+					}
 
-						// Set the replacement string to the number of missing new lines
-						// As the end of the edit is out of the region, the possible trailing
-						// indentation should not be added...
-						if (linesReplaced == 0) {
+					// Set the replacement string to the number of missing new lines
+					// As the end of the edit is out of the region, the possible trailing
+					// indentation should not be added...
+					if (linesReplaced == 0) {
+		    			edit.replacement = ""; //$NON-NLS-1$
+					} else {
+						int linesCount = linesReplaced > linesOutside ? linesReplaced - linesOutside : 0;
+						if (linesCount == 0) {
 			    			edit.replacement = ""; //$NON-NLS-1$
 						} else {
-							int linesCount = linesReplaced > linesOutside ? linesReplaced - linesOutside : 0;
-							if (linesCount == 0) {
-				    			edit.replacement = ""; //$NON-NLS-1$
-							} else {
-								edit.replacement = getNewLineString(linesCount);
-							}
+							edit.replacement = getNewLineString(linesCount);
 						}
 					}
-					edit.length -= editEnd - regionEnd;
-					return i;
 				}
+				edit.length = regionEnd - editStart;
+
+		    	// We got the last edit of the regions, give up
+				topEnd = i;
+				break;
 			}
     	}
-    	return overlapIndex;
+
+    	// Set invalid all edits outside the region
+    	for (int e=initialStart; e<validIndex; e++) {
+    		sortedEdits[e].offset = -1;
+    	}
+    	
+    	// Return the index of next edit to look at
+    	return topEnd+1;
     }
 
 	private final void addDeleteEdit(int start, int end) {
@@ -613,10 +701,6 @@ public class Scribe implements IJavaDocTagConstants {
 		return createAlignment(kind, mode, Alignment.R_INNERMOST, count, sourceRestart);
 	}
 
-	public Alignment createAlignment(int kind, int mode, int count, int sourceRestart, boolean adjust){
-		return createAlignment(kind, mode, Alignment.R_INNERMOST, count, sourceRestart, adjust);
-	}
-
 	public Alignment createAlignment(int kind, int mode, int tieBreakRule, int count, int sourceRestart){
 		return createAlignment(kind, mode, tieBreakRule, count, sourceRestart, this.formatter.preferences.continuation_indentation, false);
 	}
@@ -627,6 +711,22 @@ public class Scribe implements IJavaDocTagConstants {
 
 	public Alignment createAlignment(int kind, int mode, int tieBreakRule, int count, int sourceRestart, int continuationIndent, boolean adjust){
 		Alignment alignment = new Alignment(kind, mode, tieBreakRule, this, count, sourceRestart, continuationIndent);
+		// specific break indentation for message arguments inside binary expressions
+		if ((this.currentAlignment == null && this.formatter.expressionsDepth >= 0) ||
+			(this.currentAlignment != null && this.currentAlignment.kind == Alignment.BINARY_EXPRESSION &&
+				(this.formatter.expressionsPos & CodeFormatterVisitor.EXPRESSIONS_POS_MASK) == CodeFormatterVisitor.EXPRESSIONS_POS_BETWEEN_TWO)) {
+			switch (kind) {
+				case Alignment.CONDITIONAL_EXPRESSION:
+				case Alignment.MESSAGE_ARGUMENTS:
+				case Alignment.MESSAGE_SEND:
+					if (this.formatter.lastBinaryExpressionAlignmentBreakIndentation == alignment.breakIndentationLevel) {
+						alignment.breakIndentationLevel += this.indentationSize;
+						alignment.shiftBreakIndentationLevel += this.indentationSize;
+						this.formatter.lastBinaryExpressionAlignmentBreakIndentation = 0;
+					}
+					break;
+			}
+		}
 		// adjust break indentation
 		if (adjust && this.memberAlignment != null) {
 			Alignment current = this.memberAlignment;
@@ -720,6 +820,9 @@ public class Scribe implements IJavaDocTagConstants {
 		this.formatter.lastLocalDeclarationSourceStart = alignment.location.lastLocalDeclarationSourceStart;
 		if (discardAlignment){
 			this.currentAlignment = alignment.enclosing;
+			if (this.currentAlignment == null) {
+				this.formatter.lastBinaryExpressionAlignmentBreakIndentation = 0;
+			}
 		}
 	}
 
@@ -812,24 +915,6 @@ public class Scribe implements IJavaDocTagConstants {
     	return -1;
     }
 
-	private IRegion getCoveringAdaptedRegion(int offset, int end) {
-		int index = getIndexOfAdaptedRegionAt(offset);
-
-		if (index < 0) {
-			index = -(index + 1);
-			index--;
-			if (index < 0) {
-				return null;
-			}
-		}
-
-		IRegion region = this.adaptedRegions[index];
-		if ((region.getOffset() <= offset) && (end <= region.getOffset() + region.getLength() - 1)) {
-			return region;
-		}
-		return null;
-	}
-
 	private int getCurrentCommentIndentation(int start) {
 		int linePtr = -Arrays.binarySearch(this.lineEnds, start);
 		int indentation = 0;
@@ -953,6 +1038,7 @@ public class Scribe implements IJavaDocTagConstants {
 				for (int i = 0; i < linesNumber; i++) {
 					printIndentationIfNecessary(this.tempBuffer);
 					this.tempBuffer.append(this.lineSeparator);
+					this.column = 1;
 				}
 				emptyLines = this.tempBuffer.toString();
 			} else {
@@ -969,6 +1055,7 @@ public class Scribe implements IJavaDocTagConstants {
 				for (int i = 0; i < linesNumber; i++) {
 					printIndentationIfNecessary(this.tempBuffer);
 					this.tempBuffer.append(this.lineSeparator);
+					this.column = 1;
 				}
 				emptyLines = this.tempBuffer.toString();
 			} else {
@@ -990,6 +1077,7 @@ public class Scribe implements IJavaDocTagConstants {
 				for (int i = 0; i < realNewLineNumber; i++) {
 					printIndentationIfNecessary(this.tempBuffer);
 					this.tempBuffer.append(this.lineSeparator);
+					this.column = 1;
 				}
 				emptyLines = this.tempBuffer.toString();
 			} else {
@@ -1004,24 +1092,6 @@ public class Scribe implements IJavaDocTagConstants {
 		return emptyLines;
 	}
 
-	private int getIndexOfAdaptedRegionAt(int offset) {
-		if (this.adaptedRegions.length == 1) {
-			int offset2 = this.adaptedRegions[0].getOffset();
-			if (offset2 == offset) {
-				return 0;
-			}
-			return offset2 < offset ? -2 : -1;
-		}
-		return Arrays.binarySearch(this.adaptedRegions, new Region(offset, 0), new Comparator() {
-			public int compare(Object o1, Object o2) {
-				int r1Offset = ((IRegion)o1).getOffset();
-				int r2Offset = ((IRegion)o2).getOffset();
-
-				return r1Offset - r2Offset;
-			}
-		});
-	}
-
 	public OptimizedReplaceEdit getLastEdit() {
 		if (this.editsIndex > 0) {
 			return this.edits[this.editsIndex - 1];
@@ -1101,114 +1171,128 @@ public class Scribe implements IJavaDocTagConstants {
 	/*
 	 * Preserve empty lines depending on given count and preferences.
 	 */
-	private String getPreserveEmptyLines(int count) {
+	private String getPreserveEmptyLines(int count, int emptyLinesRules) {
 		if (count == 0) {
-			// preserve line breaks in wrapping if specified
-			// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=198074
-			if (this.currentAlignment != null && !this.formatter.preferences.join_wrapped_lines) {
-				// Insert a new line only if it has not been already done before
-				// (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=283476)
-				// or when there's no direct member alignment
-				// (additional fix for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=286601)
-				if (this.lastNumberOfNewLines == 0 || this.memberAlignment == null || this.memberAlignment.location.inputOffset < this.currentAlignment.location.inputOffset) {
-					
-					// Debug
-					if (DefaultCodeFormatter.DEBUG) {
-						System.out.println("Preserve empty lines:"); //$NON-NLS-1$
-						System.out.println(" - indentation level = "+this.indentationLevel); //$NON-NLS-1$
-						System.out.println(" - current alignment: "); //$NON-NLS-1$
-						System.out.print(this.currentAlignment.toString(new StringBuffer(), 1));
-						if (this.memberAlignment != null) {
-							System.out.println(" - member alignment: "); //$NON-NLS-1$
-							System.out.print(this.memberAlignment.toString(new StringBuffer(), 1));
-						}
-					}
-
-					// Reset indentation level to the location output
-					this.indentationLevel = this.currentAlignment.location.outputIndentationLevel;
-
-					// Create new line
-					this.tempBuffer.setLength(0);
-					this.tempBuffer.append(getNewLine());
-					
-					// Look for current indentation
-					int currentIndentation = getCurrentIndentation(this.scanner.currentPosition);
-					
-					// Determine whether the alignment indentation can be used or not
-					// So far, the best algorithm is to use it when
-					// 1. this is not the opening brace of a local declaration assignment
-					// 2. this is not the first opening brace
-					//     or this is an array initializer alignment 
-					//     or this is an binary expression alignment
-					// 3. the indentation level is below the alignment break indentation
-					int currentTokenStartPosition = this.scanner.currentPosition;
-					int nextToken = -1;
-					try {
-						nextToken = this.scanner.getNextToken();
-					} catch (InvalidInputException e) {
-						// skip
-					}
-					this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1);
-					boolean canUseAlignmentIndentation = (nextToken != TerminalTokens.TokenNameLBRACE || this.currentAlignment.kind != Alignment.LOCAL_DECLARATION_ASSIGNMENT);
-					if (canUseAlignmentIndentation &&
-							(!this.formatBrace ||
-									this.currentAlignment.kind == Alignment.ARRAY_INITIALIZER ||
-									this.currentAlignment.kind == Alignment.BINARY_EXPRESSION) &&
-							this.indentationLevel < this.currentAlignment.breakIndentationLevel) {
-						this.indentationLevel = this.currentAlignment.breakIndentationLevel;
-					}
-					
-					// Use the current indentation if over the computed indentation
-					if (this.indentationLevel < currentIndentation) {
-						this.indentationLevel = currentIndentation;
-					}
-					
-					// Debug
-					if (DefaultCodeFormatter.DEBUG) {
-						System.out.println(" - format brace = "+this.formatBrace); //$NON-NLS-1$
-						System.out.println(" - current column = "+(currentIndentation+1)); //$NON-NLS-1$
-						System.out.println(" - current position = "+this.scanner.currentPosition); //$NON-NLS-1$
-						System.out.print(" - current line = "); //$NON-NLS-1$
-						int linePtr = Arrays.binarySearch(this.lineEnds, this.scanner.currentPosition);
-						if (linePtr < 0) {
-							linePtr = -linePtr - 1;
-						}
-						int i = getLineEnd(linePtr)+1;
-						while (this.scanner.source[i] != '\r') {
-							System.out.print(this.scanner.source[i++]);
-						}
-						System.out.println();
-						System.out.println(" - indentation level = "+this.indentationLevel); //$NON-NLS-1$
-						System.out.println();
+			int currentIndentationLevel = this.indentationLevel;
+			int useAlignmentBreakIndentation = useAlignmentBreakIndentation(emptyLinesRules);
+			switch (useAlignmentBreakIndentation) {
+				case PRESERVE_EMPTY_LINES_DO_NOT_USE_ANY_INDENTATION:
+					return Util.EMPTY_STRING;
+				default:
+					// Return the new indented line
+					StringBuffer buffer = new StringBuffer(getNewLine());
+					printIndentationIfNecessary(buffer);
+					if (useAlignmentBreakIndentation == PRESERVE_EMPTY_LINES_USE_TEMPORARY_INDENTATION) {
+						this.indentationLevel = currentIndentationLevel;
 					}
-					
-					// Set the flag to indicate that a specific indentation is currently in used
-					this.preserveLineBreakIndentation = true;
-					
-					// Print the computed indentation in the buffer
-					printIndentationIfNecessary(this.tempBuffer);
-					return this.tempBuffer.toString();
-				}
+					return buffer.toString();
 			}
-			return Util.EMPTY_STRING;
 		}
 		if (this.blank_lines_between_import_groups >= 0) {
+			useAlignmentBreakIndentation(emptyLinesRules);
 			return getEmptyLines(this.blank_lines_between_import_groups);
 		}
 		if (this.formatter.preferences.number_of_empty_lines_to_preserve != 0) {
+			useAlignmentBreakIndentation(emptyLinesRules);
 			int linesToPreserve = Math.min(count, this.formatter.preferences.number_of_empty_lines_to_preserve);
 			return getEmptyLines(linesToPreserve);
 		}
 		return getNewLine();
 	}
+	private int useAlignmentBreakIndentation(int emptyLinesRules) {
+		// preserve line breaks in wrapping if specified
+		// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=198074
+		boolean specificEmptyLinesRule = emptyLinesRules != PRESERVE_EMPTY_LINES_KEEP_LAST_NEW_LINES_INDENTATION;
+		if ((this.currentAlignment != null || specificEmptyLinesRule) && !this.formatter.preferences.join_wrapped_lines) {
+			// insert a new line only if it has not been already done before
+			// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=283476
+			if (this.lastNumberOfNewLines == 0 || specificEmptyLinesRule || this.formatter.arrayInitializersDepth >= 0) {
+				
+				// Do not use alignment break indentation in specific circumstances
+				boolean useAlignmentBreakIndentation;
+				boolean useAlignmentShiftBreakIndentation = false;
+				boolean useLastBinaryExpressionAlignmentBreakIndentation = false;
+				switch (emptyLinesRules) {
+					case DO_NOT_PRESERVE_EMPTY_LINES:
+					case PRESERVE_EMPTY_LINES_IN_SWITCH_CASE:
+					case PRESERVE_EMPTY_LINES_AT_END_OF_METHOD_DECLARATION:
+					case PRESERVE_EMPTY_LINES_AT_END_OF_BLOCK:
+						return PRESERVE_EMPTY_LINES_DO_NOT_USE_ANY_INDENTATION;
+					case PRESERVE_EMPTY_LINES_IN_BINARY_EXPRESSION:
+						useAlignmentBreakIndentation = true;
+						if ((this.formatter.expressionsPos & CodeFormatterVisitor.EXPRESSIONS_POS_MASK) == CodeFormatterVisitor.EXPRESSIONS_POS_BETWEEN_TWO) {
+							// we're just before the left expression, try to use the last
+							// binary expression break indentation if any
+							useLastBinaryExpressionAlignmentBreakIndentation = true;
+						}
+						break;
+					case PRESERVE_EMPTY_LINES_IN_EQUALITY_EXPRESSION:
+						useAlignmentShiftBreakIndentation = this.currentAlignment == null || this.currentAlignment.kind == Alignment.BINARY_EXPRESSION;
+						useAlignmentBreakIndentation = !useAlignmentShiftBreakIndentation;
+						break;
+					case PRESERVE_EMPTY_LINES_IN_FORMAT_OPENING_BRACE:
+						useAlignmentBreakIndentation = this.formatter.arrayInitializersDepth <= 1
+							&& this.currentAlignment != null
+							&& this.currentAlignment.kind == Alignment.ARRAY_INITIALIZER;
+						break;
+					case PRESERVE_EMPTY_LINES_IN_FORMAT_LEFT_CURLY_BRACE:
+						useAlignmentBreakIndentation = false;
+						break;
+					default:
+						if ((emptyLinesRules & 0xFFFF) == PRESERVE_EMPTY_LINES_IN_CLOSING_ARRAY_INITIALIZER && this.scanner.currentCharacter == '}' ) {
+							// last array initializer closing brace
+							this.indentationLevel = emptyLinesRules >> 16;
+							this.preserveLineBreakIndentation = true;
+							return PRESERVE_EMPTY_LINES_USE_CURRENT_INDENTATION;
+						}
+						useAlignmentBreakIndentation = true;
+						break;
+				}
 
-	private IRegion getAdaptedRegionAt(int offset) {
-		int index = getIndexOfAdaptedRegionAt(offset);
-		if (index < 0) {
-			return null;
-		}
+				// If there's an alignment try to align on its break indentation level
+				Alignment alignment = this.currentAlignment;
+				if (alignment == null) {
+					if (useLastBinaryExpressionAlignmentBreakIndentation) {
+						if (this.indentationLevel < this.formatter.lastBinaryExpressionAlignmentBreakIndentation) {
+							this.indentationLevel = this.formatter.lastBinaryExpressionAlignmentBreakIndentation;
+						}
+					}
+					if (useAlignmentShiftBreakIndentation && this.memberAlignment != null) {
+						if (this.indentationLevel < this.memberAlignment.shiftBreakIndentationLevel) {
+							this.indentationLevel = this.memberAlignment.shiftBreakIndentationLevel;
+						}
+					}
+				} else {
+					// Use the member alignment break indentation level when
+					// it's closer from the wrapped line than the current alignment
+					if (this.memberAlignment != null && this.memberAlignment.location.inputOffset > alignment.location.inputOffset) {
+						alignment = this.memberAlignment;
+					}
 
-		return this.adaptedRegions[index];
+					// Use the break indentation level if possible...
+					if (useLastBinaryExpressionAlignmentBreakIndentation) {
+						if (this.indentationLevel < this.formatter.lastBinaryExpressionAlignmentBreakIndentation) {
+							this.indentationLevel = this.formatter.lastBinaryExpressionAlignmentBreakIndentation;
+						}
+					}
+					if (useAlignmentBreakIndentation) {
+						if (this.indentationLevel < alignment.breakIndentationLevel) {
+							this.indentationLevel = alignment.breakIndentationLevel;
+						}
+					} else if (useAlignmentShiftBreakIndentation) {
+						if (this.indentationLevel < alignment.shiftBreakIndentationLevel) {
+							this.indentationLevel = alignment.shiftBreakIndentationLevel;
+						}
+					}
+				}
+				this.preserveLineBreakIndentation = true;
+				if (useLastBinaryExpressionAlignmentBreakIndentation || useAlignmentShiftBreakIndentation) {
+					return PRESERVE_EMPTY_LINES_USE_TEMPORARY_INDENTATION;
+				}
+				return PRESERVE_EMPTY_LINES_USE_CURRENT_INDENTATION;
+			}
+		}
+		return PRESERVE_EMPTY_LINES_DO_NOT_USE_ANY_INDENTATION;
 	}
 
 	public TextEdit getRootEdit() {
@@ -1243,14 +1327,16 @@ public class Scribe implements IJavaDocTagConstants {
 		}
 		for (int i= 0, max = this.editsIndex; i < max; i++) {
 			OptimizedReplaceEdit currentEdit = this.edits[i];
-			if (isValidEdit(currentEdit)) {
-				try {
-					edit.addChild(new ReplaceEdit(currentEdit.offset, currentEdit.length, currentEdit.replacement));
-				}
-				catch (MalformedTreeException ex) {
-					// log exception in case of error
-					CommentFormatterUtil.log(ex);
- 					throw ex;
+			if (currentEdit.offset >= 0 && currentEdit.offset <= this.scannerEndPosition) {
+				if (currentEdit.length == 0 || (currentEdit.offset != this.scannerEndPosition && isMeaningfulEdit(currentEdit))) {
+					try {
+						edit.addChild(new ReplaceEdit(currentEdit.offset, currentEdit.length, currentEdit.replacement));
+					}
+					catch (MalformedTreeException ex) {
+						// log exception in case of error
+						CommentFormatterUtil.log(ex);
+	 					throw ex;
+					}
 				}
 			}
 		}
@@ -1415,8 +1501,14 @@ public class Scribe implements IJavaDocTagConstants {
 		this.numberOfIndentations++;
 	}
 
+	void setIndentation(int level, int n) {
+		this.indentationLevel = level + n * this.indentationSize;
+		this.numberOfIndentations = this.indentationLevel / this.indentationSize;
+	}
+
 	private void initializeScanner(long sourceLevel, DefaultCodeFormatterOptions preferences) {
 		this.useTags = preferences.use_tags;
+		this.tagsKind = 0;
 		char[][] taskTags = null;
 		if (this.useTags) {
 			this.disablingTag = preferences.disabling_tag;
@@ -1431,6 +1523,23 @@ public class Scribe implements IJavaDocTagConstants {
 				taskTags = new char[][] { this.disablingTag, this.enablingTag };
 			}
 		}
+		if (taskTags != null) {
+			loop: for (int i=0,length=taskTags.length; i<length; i++) {
+				if (taskTags[i].length > 2 && taskTags[i][0] == '/') {
+					switch (taskTags[i][1]) {
+						case '/':
+							this.tagsKind = TerminalTokens.TokenNameCOMMENT_LINE;
+							break loop;
+						case '*':
+							if (taskTags[i][2] != '*') {
+								this.tagsKind = TerminalTokens.TokenNameCOMMENT_BLOCK;
+								break loop;
+							}
+							break;
+					}
+				}
+			}
+		}
 		this.scanner = new Scanner(true, true, false/*nls*/, sourceLevel/*sourceLevel*/, taskTags, null/*taskPriorities*/, true/*taskCaseSensitive*/);
 		this.editsEnabled = true;
 	}
@@ -1454,71 +1563,19 @@ public class Scribe implements IJavaDocTagConstants {
 		return previousLineEnd != -1 && previousLineEnd == start - 1;
 	}
 
-	private boolean isValidEdit(OptimizedReplaceEdit edit) {
+	private boolean isMeaningfulEdit(OptimizedReplaceEdit edit) {
 		final int editLength= edit.length;
 		final int editReplacementLength= edit.replacement.length();
 		final int editOffset= edit.offset;
-		if (editLength != 0) {
-
-			IRegion covering = getCoveringAdaptedRegion(editOffset, (editOffset + editLength - 1));
-			if (covering != null) {
-				if (editReplacementLength != 0 && editLength == editReplacementLength) {
-					for (int i = editOffset, max = editOffset + editLength; i < max; i++) {
-						if (this.scanner.source[i] != edit.replacement.charAt(i - editOffset)) {
-							return true;
-						}
-					}
-					return false;
-				}
-				return true;
-			}
-
-			IRegion starting = getAdaptedRegionAt(editOffset + editLength);
-			if (starting != null) {
-				int i = editOffset;
-				for (int max = editOffset + editLength; i < max; i++) {
-					int replacementStringIndex = i - editOffset;
-					if (replacementStringIndex >= editReplacementLength || this.scanner.source[i] != edit.replacement.charAt(replacementStringIndex)) {
-						break;
-					}
-				}
-				if (i - editOffset != editReplacementLength && i != editOffset + editLength - 1) {
-					edit.offset = starting.getOffset();
-					edit.length = 0;
-					edit.replacement = edit.replacement.substring(i - editOffset);
+		if (editReplacementLength != 0 && editLength == editReplacementLength) {
+			for (int i = editOffset, max = editOffset + editLength; i < max; i++) {
+				if (this.scanner.source[i] != edit.replacement.charAt(i - editOffset)) {
 					return true;
 				}
 			}
-
 			return false;
 		}
-
-		IRegion covering = getCoveringAdaptedRegion(editOffset, editOffset);
-		if (covering != null) {
-			return true;
-		}
-
-		if (editOffset == this.scannerEndPosition) {
-			int index = Arrays.binarySearch(
-				this.adaptedRegions,
-				new Region(editOffset, 0),
-				new Comparator() {
-					public int compare(Object o1, Object o2) {
-						IRegion r1 = (IRegion)o1;
-						IRegion r2 = (IRegion)o2;
-
-						int r1End = r1.getOffset() + r1.getLength();
-						int r2End = r2.getOffset() + r2.getLength();
-
-						return r1End - r2End;
-					}
-				});
-			if (index < 0) {
-				return false;
-			}
-			return true;
-		}
-		return false;
+		return true;
 	}
 
 	private void preserveEmptyLines(int count, int insertPosition) {
@@ -2347,13 +2404,21 @@ public class Scribe implements IJavaDocTagConstants {
 	}
 
 	void printComment() {
-		printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT);
+		printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT, PRESERVE_EMPTY_LINES_KEEP_LAST_NEW_LINES_INDENTATION);
+	}
+
+	void printComment(int emptyLinesRules) {
+		printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT, emptyLinesRules);
+	}
+
+	void printComment(int kind, int trailing) {
+		printComment(kind, trailing, PRESERVE_EMPTY_LINES_KEEP_LAST_NEW_LINES_INDENTATION);
 	}
 
 	/*
 	 * Main method to print and format comments (javadoc, block and single line comments)
 	 */
-	void printComment(int kind, int trailing) {
+	void printComment(int kind, int trailing, int emptyLinesRules) {
 		final boolean rejectLineComment = kind  == CodeFormatter.K_MULTI_LINE_COMMENT || kind == CodeFormatter.K_JAVA_DOC;
 		final boolean rejectBlockComment = kind  == CodeFormatter.K_SINGLE_LINE_COMMENT || kind  == CodeFormatter.K_JAVA_DOC;
 		final boolean rejectJavadocComment = kind  == CodeFormatter.K_SINGLE_LINE_COMMENT || kind  == CodeFormatter.K_MULTI_LINE_COMMENT;
@@ -2366,10 +2431,10 @@ public class Scribe implements IJavaDocTagConstants {
 			int lines = 0;
 			while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) {
 				int foundTaskCount = this.scanner.foundTaskCount;
+				int tokenStartPosition = this.scanner.getCurrentTokenStartPosition();
 				switch(this.currentToken) {
 					case TerminalTokens.TokenNameWHITESPACE :
 						char[] whiteSpaces = this.scanner.getCurrentTokenSource();
-						int whitespacesStartPosition = this.scanner.getCurrentTokenStartPosition();
 						int whitespacesEndPosition = this.scanner.getCurrentTokenEndPosition();
 						lines = 0;
 						for (int i = 0, max = whiteSpaces.length; i < max; i++) {
@@ -2443,7 +2508,7 @@ public class Scribe implements IJavaDocTagConstants {
 							// if a line comment is consumed, no other comment can be on the same line after
 							if (hasLineComment) {
 								if (lines >= 1) {
-									currentTokenStartPosition = whitespacesStartPosition;
+									currentTokenStartPosition = tokenStartPosition;
 									preserveEmptyLines(lines, currentTokenStartPosition);
 									addDeleteEdit(currentTokenStartPosition, whitespacesEndPosition);
 									this.scanner.resetTo(this.scanner.currentPosition, this.scannerEndPosition - 1);
@@ -2455,7 +2520,7 @@ public class Scribe implements IJavaDocTagConstants {
 							// if one or several new lines are consumed, following comments cannot be considered as trailing ones
 							if (lines >= 1) {
 								if (hasComment) {
-									this.printNewLine(whitespacesStartPosition);
+									this.printNewLine(tokenStartPosition);
 								}
 								this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1);
 								return;
@@ -2463,37 +2528,54 @@ public class Scribe implements IJavaDocTagConstants {
 							// delete consumed white spaces
 							hasWhitespaces = true;
 							currentTokenStartPosition = this.scanner.currentPosition;
-							addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition);
+							addDeleteEdit(tokenStartPosition, whitespacesEndPosition);
 						} else {
 							if (lines == 0) {
 								hasWhitespaces = true;
-								addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition);
+								if (hasLineComment && emptyLinesRules != PRESERVE_EMPTY_LINES_KEEP_LAST_NEW_LINES_INDENTATION) {
+									addReplaceEdit(tokenStartPosition, whitespacesEndPosition, getPreserveEmptyLines(0, emptyLinesRules));
+								} else {
+									addDeleteEdit(tokenStartPosition, whitespacesEndPosition);
+								}
 							} else if (hasLineComment) {
-								currentTokenStartPosition = whitespacesStartPosition;
+								useAlignmentBreakIndentation(emptyLinesRules);
+								currentTokenStartPosition = tokenStartPosition;
 								preserveEmptyLines(lines, currentTokenStartPosition);
 								addDeleteEdit(currentTokenStartPosition, whitespacesEndPosition);
 							} else if (hasComment) {
+								useAlignmentBreakIndentation(emptyLinesRules);
 								if (lines == 1) {
-									this.printNewLine(whitespacesStartPosition);
+									this.printNewLine(tokenStartPosition);
 								} else {
-									preserveEmptyLines(lines - 1, whitespacesStartPosition);
+									preserveEmptyLines(lines - 1, tokenStartPosition);
 								}
-								addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition);
+								addDeleteEdit(tokenStartPosition, whitespacesEndPosition);
 							} else if (lines != 0 && (!this.formatter.preferences.join_wrapped_lines || this.formatter.preferences.number_of_empty_lines_to_preserve != 0 || this.blank_lines_between_import_groups > 0)) {
-								addReplaceEdit(whitespacesStartPosition, whitespacesEndPosition, getPreserveEmptyLines(lines-1));
+								addReplaceEdit(tokenStartPosition, whitespacesEndPosition, getPreserveEmptyLines(lines-1, emptyLinesRules));
 							} else {
-								addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition);
+								useAlignmentBreakIndentation(emptyLinesRules);
+								addDeleteEdit(tokenStartPosition, whitespacesEndPosition);
 							}
 						}
 						currentTokenStartPosition = this.scanner.currentPosition;
 						break;
 					case TerminalTokens.TokenNameCOMMENT_LINE :
-						if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
-							if (!this.editsEnabled && this.editsIndex > 1) {
-								OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
-								if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
-									printNewLinesBeforeDisablingComment();
+						if (this.useTags && this.editsEnabled) {
+							boolean turnOff = false;
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+								turnOff = true;
+							} else if (this.tagsKind == this.currentToken
+								&& CharOperation.fragmentEquals(this.disablingTag, this.scanner.source, tokenStartPosition, true)) {
+    							this.editsEnabled = false;
+								turnOff = true;
+					    	}
+							if (turnOff) {
+								if (!this.editsEnabled && this.editsIndex > 1) {
+									OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
+									if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
+										printNewLinesBeforeDisablingComment();
+									}
 								}
 							}
 						}
@@ -2512,17 +2594,31 @@ public class Scribe implements IJavaDocTagConstants {
 						currentTokenStartPosition = this.scanner.currentPosition;
 						hasLineComment = true;
 						lines = 0;
-						if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
+						if (this.useTags && !this.editsEnabled) {
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+							} else if (this.tagsKind == this.currentToken) {
+	    						this.editsEnabled = CharOperation.fragmentEquals(this.enablingTag, this.scanner.source, tokenStartPosition, true);
+					    	}
 						}
 						break;
 					case TerminalTokens.TokenNameCOMMENT_BLOCK :
-						if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
-							if (!this.editsEnabled && this.editsIndex > 1) {
-								OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
-								if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
-									printNewLinesBeforeDisablingComment();
+						if (this.useTags && this.editsEnabled) {
+							boolean turnOff = false;
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+								turnOff = true;
+							} else if (this.tagsKind == this.currentToken
+								&& CharOperation.fragmentEquals(this.disablingTag, this.scanner.source, tokenStartPosition, true)) {
+    							this.editsEnabled = false;
+								turnOff = true;
+					    	}
+							if (turnOff) {
+								if (!this.editsEnabled && this.editsIndex > 1) {
+									OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
+									if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
+										printNewLinesBeforeDisablingComment();
+									}
 								}
 							}
 						}
@@ -2548,8 +2644,12 @@ public class Scribe implements IJavaDocTagConstants {
 						hasLineComment = false;
 						hasComment = true;
 						lines = 0;
-						if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
+						if (this.useTags && !this.editsEnabled) {
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+							} else if (this.tagsKind == this.currentToken) {
+	    						this.editsEnabled = CharOperation.fragmentEquals(this.enablingTag, this.scanner.source, tokenStartPosition, true);
+					    	}
 						}
 						break;
 					case TerminalTokens.TokenNameCOMMENT_JAVADOC :
@@ -2687,6 +2787,7 @@ public class Scribe implements IJavaDocTagConstants {
 					}
 				} else {
 					if (this.currentAlignment != null && this.currentAlignment.kind == Alignment.ARRAY_INITIALIZER &&
+						this.currentAlignment.fragmentCount > 0 &&
 						this.indentationLevel < this.currentAlignment.breakIndentationLevel &&
 						this.lastLineComment.lines > 0)
 					{
@@ -2710,7 +2811,11 @@ public class Scribe implements IJavaDocTagConstants {
 		
 		// Add pending space if necessary
     	if (this.pendingSpace) {
-    		addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$
+    		if (this.formatter.preferences.comment_preserve_white_space_between_code_and_line_comments) {
+    			addInsertEdit(currentTokenStartPosition, new String(this.lastLineComment.leadingSpaces));
+    		} else {
+    			addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$
+    		}
     	}
     	this.needSpace = false;
     	this.pendingSpace = false;
@@ -2757,6 +2862,13 @@ public class Scribe implements IJavaDocTagConstants {
     		} else if (this.currentAlignment.couldBreak() && this.currentAlignment.wasSplit) {
     			this.currentAlignment.performFragmentEffect();
     		}
+    		if (this.currentAlignment.kind == Alignment.BINARY_EXPRESSION &&
+    			this.currentAlignment.enclosing != null &&
+    			this.currentAlignment.enclosing.kind == Alignment.BINARY_EXPRESSION &&
+    			this.indentationLevel < this.currentAlignment.breakIndentationLevel)
+    		{
+    			this.indentationLevel = this.currentAlignment.breakIndentationLevel;
+    		}
     	}
     	this.scanner.resetTo(currentTokenEndPosition, this.scannerEndPosition - 1);
     }
@@ -3764,7 +3876,7 @@ public class Scribe implements IJavaDocTagConstants {
 						newLineString = this.tempBuffer.toString();
 					}
 					addReplaceEdit(end+1, this.scanner.getCurrentTokenEndPosition(), newLineString);
-					textLineStart++;
+					textLineStart = Util.getLineNumber(this.scanner.currentPosition-1, this.lineEnds, textLineStart, this.maxLines);
 				}
 			}
 		}
@@ -3911,7 +4023,9 @@ public class Scribe implements IJavaDocTagConstants {
 		// Replace the new line with a single space when there's only one separator
 		// or, if necessary, print the indentation on the last line
 		if (!multiLinesBlock) {
-			addReplaceEdit(firstLineEnd, end, " "); //$NON-NLS-1$
+			if (firstLineEnd > 0) {
+				addReplaceEdit(firstLineEnd, end, " "); //$NON-NLS-1$
+			}
 		}
 		else if (secondLineStart > 0) {
 			if (newLineString == null) {
@@ -3951,9 +4065,6 @@ public class Scribe implements IJavaDocTagConstants {
 
 		// Compute indentation if necessary
 		boolean clearBlankLines = this.formatter.preferences.comment_clear_blank_lines_in_javadoc_comment;
-		boolean headerLine = block.isHeaderLine() && this.lastNumberOfNewLines == 0;
-		int firstColumn = 1 + this.indentationLevel + BLOCK_LINE_PREFIX_LENGTH;
-		if (headerLine) firstColumn++;
 
 		// Local variables init
 		int textStart = text.sourceStart;
@@ -4428,6 +4539,8 @@ public class Scribe implements IJavaDocTagConstants {
 			boolean hasModifiers = false;
 			while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) {
 				int foundTaskCount = this.scanner.foundTaskCount;
+				int tokenStartPosition = this.scanner.getCurrentTokenStartPosition();
+				int tokenEndPosition = this.scanner.getCurrentTokenEndPosition();
 				switch(this.currentToken) {
 					case TerminalTokens.TokenNamepublic :
 					case TerminalTokens.TokenNameprotected :
@@ -4463,8 +4576,23 @@ public class Scribe implements IJavaDocTagConstants {
 							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=122247
 							boolean shouldAddNewLine = false;
 							switch (annotationSourceKind) {
-								case ICodeFormatterConstants.ANNOTATION_ON_MEMBER :
-									if (this.formatter.preferences.insert_new_line_after_annotation_on_member) {
+								case ICodeFormatterConstants.ANNOTATION_ON_TYPE :
+									if (this.formatter.preferences.insert_new_line_after_annotation_on_type) {
+										shouldAddNewLine = true;
+									}
+									break;
+								case ICodeFormatterConstants.ANNOTATION_ON_FIELD :
+									if (this.formatter.preferences.insert_new_line_after_annotation_on_field) {
+										shouldAddNewLine = true;
+									}
+									break;
+								case ICodeFormatterConstants.ANNOTATION_ON_METHOD :
+									if (this.formatter.preferences.insert_new_line_after_annotation_on_method) {
+										shouldAddNewLine = true;
+									}
+									break;
+								case ICodeFormatterConstants.ANNOTATION_ON_PACKAGE :
+									if (this.formatter.preferences.insert_new_line_after_annotation_on_package) {
 										shouldAddNewLine = true;
 									}
 									break;
@@ -4492,35 +4620,64 @@ public class Scribe implements IJavaDocTagConstants {
 						break;
 					case TerminalTokens.TokenNameCOMMENT_BLOCK :
 					case TerminalTokens.TokenNameCOMMENT_JAVADOC :
-						if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
-							if (!this.editsEnabled && this.editsIndex > 1) {
-								OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
-								if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
-									printNewLinesBeforeDisablingComment();
+						if (this.useTags && this.editsEnabled) {
+							boolean turnOff = false;
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+								turnOff = true;
+							} else if (this.tagsKind == this.currentToken
+								&& CharOperation.equals(this.disablingTag, this.scanner.source, tokenStartPosition, tokenEndPosition+1)) {
+    							this.editsEnabled = false;
+								turnOff = true;
+					    	}
+							if (turnOff) {
+								if (!this.editsEnabled && this.editsIndex > 1) {
+									OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
+									if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
+										printNewLinesBeforeDisablingComment();
+									}
 								}
 							}
 						}
 						printBlockComment(this.currentToken == TerminalTokens.TokenNameCOMMENT_JAVADOC);
-						if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
+						if (this.useTags && !this.editsEnabled) {
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+							} else if (this.tagsKind == this.currentToken) {
+	    						this.editsEnabled = CharOperation.equals(this.enablingTag, this.scanner.source, tokenStartPosition, tokenEndPosition+1);
+					    	}
 						}
 						currentTokenStartPosition = this.scanner.currentPosition;
 						hasComment = true;
 						break;
 					case TerminalTokens.TokenNameCOMMENT_LINE :
-						if (this.useTags && this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
-							if (!this.editsEnabled && this.editsIndex > 1) {
-								OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
-								if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
-									printNewLinesBeforeDisablingComment();
+						tokenEndPosition = -this.scanner.commentStops[this.scanner.commentPtr];
+						if (this.useTags && this.editsEnabled) {
+							boolean turnOff = false;
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+								turnOff = true;
+							} else if (this.tagsKind == this.currentToken
+								&& CharOperation.equals(this.disablingTag, this.scanner.source, tokenStartPosition, tokenEndPosition)) {
+    							this.editsEnabled = false;
+								turnOff = true;
+					    	}
+							if (turnOff) {
+								if (!this.editsEnabled && this.editsIndex > 1) {
+									OptimizedReplaceEdit currentEdit = this.edits[this.editsIndex-1];
+									if (this.scanner.startPosition == currentEdit.offset+currentEdit.length) {
+										printNewLinesBeforeDisablingComment();
+									}
 								}
 							}
 						}
 						printLineComment();
-						if (this.useTags && !this.editsEnabled && foundTaskCount > 0) {
-							setEditsEnabled(foundTaskCount);
+						if (this.useTags && !this.editsEnabled) {
+							if (foundTaskCount > 0) {
+								setEditsEnabled(foundTaskCount);
+							} else if (this.tagsKind == this.currentToken) {
+	    						this.editsEnabled = CharOperation.equals(this.enablingTag, this.scanner.source, tokenStartPosition, tokenEndPosition);
+					    	}
 						}
 						currentTokenStartPosition = this.scanner.currentPosition;
 						break;
@@ -4730,31 +4887,20 @@ public class Scribe implements IJavaDocTagConstants {
 	}
 
 	public void printNextToken(int expectedTokenType, boolean considerSpaceIfAny) {
+		printNextToken(expectedTokenType, considerSpaceIfAny, PRESERVE_EMPTY_LINES_KEEP_LAST_NEW_LINES_INDENTATION);
+	}
+
+	public void printNextToken(int expectedTokenType, boolean considerSpaceIfAny, int emptyLineRules) {
 		// Set brace flag, it's useful for the scribe while preserving line breaks
-		switch (expectedTokenType) {
-			case TerminalTokens.TokenNameRBRACE:
-			case TerminalTokens.TokenNameLBRACE:
-				this.formatBrace = true;
-		}
+		printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT, emptyLineRules);
 		try {
-			printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT);
-			try {
-				this.currentToken = this.scanner.getNextToken();
-				if (expectedTokenType != this.currentToken) {
-					throw new AbortFormatting("unexpected token type, expecting:"+expectedTokenType+", actual:"+this.currentToken);//$NON-NLS-1$//$NON-NLS-2$
-				}
-				print(this.scanner.currentPosition - this.scanner.startPosition, considerSpaceIfAny);
-			} catch (InvalidInputException e) {
-				throw new AbortFormatting(e);
-			}
-		}
-		finally {
-			// Flush brace flag
-			switch (expectedTokenType) {
-				case TerminalTokens.TokenNameRBRACE:
-				case TerminalTokens.TokenNameLBRACE:
-					this.formatBrace = false;
+			this.currentToken = this.scanner.getNextToken();
+			if (expectedTokenType != this.currentToken) {
+				throw new AbortFormatting("unexpected token type, expecting:"+expectedTokenType+", actual:"+this.currentToken);//$NON-NLS-1$//$NON-NLS-2$
 			}
+			print(this.scanner.currentPosition - this.scanner.startPosition, considerSpaceIfAny);
+		} catch (InvalidInputException e) {
+			throw new AbortFormatting(e);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/align/Alignment.java b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/align/Alignment.java
index 40ab51b..d7a8add 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/align/Alignment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/align/Alignment.java
@@ -252,7 +252,7 @@ public class Alignment {
 	}
 
 	public void checkColumn() {
-		if ((this.mode & M_MULTICOLUMN) != 0) {
+		if ((this.mode & M_MULTICOLUMN) != 0 && this.fragmentCount > 0) {
 			int currentIndentation = this.scribe.getNextIndentationLevel(this.scribe.column+(this.scribe.needSpace ? 1 : 0));
 			int fragmentIndentation = this.fragmentIndentations[this.fragmentIndex];
 			if (currentIndentation > fragmentIndentation) {
@@ -351,6 +351,7 @@ public class Alignment {
 	}
 
 	public boolean couldBreak(){
+		if (this.fragmentCount == 0) return false;
 		int i;
 		switch(this.mode & SPLIT_MASK){
 
@@ -445,8 +446,9 @@ public class Alignment {
 		}
 		return false; // cannot split better
 	}
-
+	
 	public boolean isWrapped() {
+		if (this.fragmentCount == 0) return false;
 		return this.fragmentBreaks[this.fragmentIndex] == BREAK;
 	}
 
@@ -461,6 +463,7 @@ public class Alignment {
 
 	// perform alignment effect for current fragment
 	public void performFragmentEffect(){
+		if (this.fragmentCount == 0) return;
 		if ((this.mode & M_MULTICOLUMN) == 0) {
 			switch(this.mode & SPLIT_MASK) {
 				case Alignment.M_COMPACT_SPLIT :
diff --git a/eclipse/plugins/org.eclipse.jdt.core/grammar/java.g b/eclipse/plugins/org.eclipse.jdt.core/grammar/java.g
index 1a46ab4..f698d9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/grammar/java.g
+++ b/eclipse/plugins/org.eclipse.jdt.core/grammar/java.g
@@ -350,10 +350,18 @@ Header2 -> Header
 Header2 -> EnumConstantHeader
 /:$readableName Header2:/
 
-CatchHeader ::= 'catch' '(' FormalParameter ')' '{'
+CatchHeader ::= 'catch' '(' CatchFormalParameter ')' '{'
 /.$putCase consumeCatchHeader(); $break ./
 /:$readableName CatchHeader:/
 
+CatchFormalParameter ::= Modifiersopt Type VariableDeclaratorId
+/.$putCase consumeCatchFormalParameter(false); $break ./
+CatchFormalParameter ::= Modifiersopt Type '...' VariableDeclaratorId
+/.$putCase consumeCatchFormalParameter(true); $break ./
+/:$readableName FormalParameter:/
+/:$compliance 1.5:/
+/:$recovery_template Identifier Identifier:/
+
 ImportDeclarations -> ImportDeclaration
 ImportDeclarations ::= ImportDeclarations ImportDeclaration 
 /.$putCase consumeImportDeclarations(); $break ./
@@ -803,8 +811,15 @@ InvalidConstructorDeclaration ::= ConstructorHeader ';'
 /.$putCase consumeInvalidConstructorDeclaration(false);  $break ./
 /:$readableName InvalidConstructorDeclaration:/
 
+-- These rules are added to be able to parse initializers inside an interface and then report a relevent error message (bug 212713)
+InvalidInitializer -> StaticInitializer
+InvalidInitializer -> Initializer
+/:$readableName InvalidInitializer:/
+
+
 InterfaceMemberDeclaration -> AbstractMethodDeclaration
 InterfaceMemberDeclaration -> InvalidConstructorDeclaration
+InterfaceMemberDeclaration -> InvalidInitializer
 --1.1 feature
 InterfaceMemberDeclaration -> ClassDeclaration
 --1.1 feature
@@ -1093,7 +1108,7 @@ Catches ::= Catches CatchClause
 /.$putCase consumeCatches(); $break ./
 /:$readableName Catches:/
 
-CatchClause ::= 'catch' '(' FormalParameter ')'    Block
+CatchClause ::= 'catch' '(' CatchFormalParameter ')' Block
 /.$putCase consumeStatementCatch() ; $break ./
 /:$readableName CatchClause:/
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IAnnotation.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IAnnotation.java
index 8edcfbb..ce06623 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IAnnotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IAnnotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,19 +56,6 @@ public interface IAnnotation extends IJavaElement, ISourceReference {
 	IMemberValuePair[] getMemberValuePairs() throws JavaModelException;
 
 	/**
-	 * Returns the source range of this annotation's name,
-	 * or <code>null</code> if this annotation does not have
-	 * associated source code (for example, in a binary type).
-	 *
-	 * @exception JavaModelException if this element does not exist or if an
-	 *      exception occurs while accessing its corresponding resource.
-	 * @return the source range of this annotation's name,
-	 * 		or <code>null</code> if this annotation does not have
-	 * 		associated source code (for example, in a binary type)
-	 */
-	ISourceRange getNameRange() throws JavaModelException;
-
-	/**
 	 * Returns the position relative to the order this annotation is defined in the source.
 	 * Numbering starts at 1 (thus the first occurrence is occurrence 1, not occurrence 0).
 	 * <p>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IElementChangedListener.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IElementChangedListener.java
index a07b7a6..ee3526d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IElementChangedListener.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IElementChangedListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,8 @@ package org.eclipse.jdt.core;
  * <p>
  * This interface may be implemented by clients.
  * </p>
+ * 
+ * @see JavaCore#addElementChangedListener(IElementChangedListener)
  */
 public interface IElementChangedListener {
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IImportDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IImportDeclaration.java
index 15fa87f..789279f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IImportDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IImportDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,6 @@ String getElementName();
  * @since 3.0
  */
 int getFlags() throws JavaModelException;
-
 /**
  * Returns whether the import is on-demand. An import is on-demand if it ends
  * with <code>".*"</code>.
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaElementDelta.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaElementDelta.java
index 931d381..bc17b09 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaElementDelta.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaElementDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,8 @@ import org.eclipse.jdt.core.dom.CompilationUnit;
  * of the notification.
  * </p>
  *
+ * @see IElementChangedListener
+ * @see ElementChangedEvent
  * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IJavaElementDelta {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModel.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModel.java
index d4bab84..2df3560 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModel.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -222,6 +222,9 @@ void move(IJavaElement[] elements, IJavaElement[] containers, IJavaElement[] sib
  * all of them. This means that even if a project was not part of the elements scope, it
  * may still be notified of changes if it is referencing a library comprised in the scope.
  * <p>
+ * <b>Since 3.7</b>, a project refresh automatically triggers a refresh of external archives.
+ * Hence, this method doesn't need to be explicitly called after a project refresh.
+ * <p>
  * @param elementsScope - a collection of elements defining the scope of the refresh
  * @param monitor - a progress monitor used to report progress
  * @exception JavaModelException in one of the corresponding situation:
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java
index 604248b..4cc2f45 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -314,7 +314,7 @@ public interface IJavaModelStatusConstants {
 //	public static final int INVALID_COMPILER_OPTION = 1007;
 	/**
 	 * <p>Status constant indicating that the attached javadoc content cannot be retrieved due to multiple reasons:
-	 * invalid url, timed-out,...</p>
+	 * invalid url, incorrect proxy, wrong authentication,...</p>
 	 *
 	 * @since 3.2
 	 */
@@ -339,4 +339,10 @@ public interface IJavaModelStatusConstants {
 	 * @since 3.4
 	 */
 	public static final int BAD_TEXT_EDIT_LOCATION = 1011;
+	
+	/**
+	 * <p>Status constant indicating that the attached javadoc content cannot be retrieved due to timeout
+	 * @since 3.7
+	 */
+	public static final int CANNOT_RETRIEVE_ATTACHED_JAVADOC_TIMEOUT = 1012;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java
index 5283cf4..64935a2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,9 @@ import org.eclipse.jdt.core.eval.IEvaluationContext;
  * Java project elements need to be opened before they can be navigated or manipulated.
  * The children of a Java project are the package fragment roots that are
  * defined by the classpath and contained in this project (in other words, it
- * does not include package fragment roots for other projects).
+ * does not include package fragment roots for other projects). The children
+ * (i.e. the package fragment roots) appear in the order they are defined by 
+ * the classpath.
  * </p>
  * <p>
  * An instance of one of these handles can be created via
@@ -63,6 +65,22 @@ import org.eclipse.jdt.core.eval.IEvaluationContext;
 public interface IJavaProject extends IParent, IJavaElement, IOpenable {
 
 	/**
+	 * Path of the file containing the project's classpath relative to the project's root.
+	 * 
+	 * <p>The file is a child of the project folder.</p>
+	 * <p>The format of this file is unspecified and it is not meant to be modified.
+	 * Its contents is modified by using the <code>IJavaProject#setRawClasspath(..)</code> methods.</p>
+	 * 
+	 * @see #setRawClasspath(IClasspathEntry[], IProgressMonitor)
+	 * @see #setRawClasspath(IClasspathEntry[], boolean, IProgressMonitor)
+	 * @see #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)
+	 * @see #setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, IProgressMonitor)
+	 * @see #setRawClasspath(IClasspathEntry[], IPath, boolean, IProgressMonitor)
+	 * @since 3.7
+	 */
+	String CLASSPATH_FILE_NAME = ".classpath"; //$NON-NLS-1$
+
+	/**
 	 * Decodes the classpath entry that has been encoded in the given string
 	 * in the context of this project.
 	 * Returns null if the encoded entry is malformed.
@@ -204,17 +222,17 @@ public interface IJavaProject extends IParent, IJavaElement, IOpenable {
 		throws JavaModelException;
 	/**
 	 * Returns the existing package fragment roots identified by the given entry.
-	 * Note that a classpath entry that refers to another project may
-	 * have more than one root (if that project has more than on root
-	 * containing source), and classpath entries within the current
-	 * project identify a single root.
+	 * A classpath entry within the current project identifies a single root.
 	 * <p>
 	 * If the classpath entry denotes a variable, it will be resolved and return
 	 * the roots of the target entry (empty if not resolvable).
 	 * <p>
 	 * If the classpath entry denotes a container, it will be resolved and return
 	 * the roots corresponding to the set of container entries (empty if not resolvable).
-	 *
+	 * <p>
+	 * The result does not include package fragment roots in other projects
+	 * referenced on this project's classpath.
+	 * 
 	 * @param entry the given entry
 	 * @return the existing package fragment roots identified by the given entry
 	 * @see IClasspathContainer
@@ -502,7 +520,8 @@ public interface IJavaProject extends IParent, IJavaElement, IOpenable {
 	 * Returns all of the  package fragment roots contained in this
 	 * project, identified on this project's resolved classpath. The result
 	 * does not include package fragment roots in other projects referenced
-	 * on this project's classpath.
+	 * on this project's classpath. The package fragment roots appear in the 
+	 * order they are defined by the classpath.
 	 *
 	 * <p>NOTE: This is equivalent to <code>getChildren()</code>.
 	 *
@@ -515,17 +534,17 @@ public interface IJavaProject extends IParent, IJavaElement, IOpenable {
 
 	/**
 	 * Returns the existing package fragment roots identified by the given entry.
-	 * Note that a classpath entry that refers to another project may
-	 * have more than one root (if that project has more than on root
-	 * containing source), and classpath entries within the current
-	 * project identify a single root.
+	 * A classpath entry within the current project identifies a single root.
 	 * <p>
 	 * If the classpath entry denotes a variable, it will be resolved and return
 	 * the roots of the target entry (empty if not resolvable).
 	 * <p>
 	 * If the classpath entry denotes a container, it will be resolved and return
 	 * the roots corresponding to the set of container entries (empty if not resolvable).
-	 *
+	 * <p>
+	 * The result does not include package fragment roots in other projects
+	 * referenced on this project's classpath.
+	 * 
 	 * @param entry the given entry
 	 * @return the existing package fragment roots identified by the given entry
 	 * @see IClasspathContainer
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ILocalVariable.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ILocalVariable.java
index 45c21f4..eb47351 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ILocalVariable.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ILocalVariable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,4 +52,46 @@ public interface ILocalVariable extends IJavaElement, ISourceReference, IAnnotat
 	 * @see Signature
 	 */
 	String getTypeSignature();
+	
+	/**
+	 * Returns <code>true</code> if this local variable is a method parameter, <code>false</code> otherwise.
+	 * 
+	 * @return <code>true</code> if this local variable is a method parameter, <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	boolean isParameter();
+
+	/**
+	 * Returns the modifier flags for this local variable. The flags can be examined using class
+	 * {@link Flags}.
+	 * 
+	 * <p>Note that only flags as indicated in the source are returned.</p>
+	 *
+	 * @return the modifier flags for this local variable
+	 * @see Flags
+	 * @since 3.7
+	 */
+	int getFlags();
+
+	/**
+	 * Returns the declaring member of this local variable.
+	 * <p>
+	 * This is a handle-only method.
+	 * </p>
+	 *
+	 * @return the declaring member of this local variable
+	 * @since 3.7
+	 */
+	IMember getDeclaringMember();
+
+	/**
+	 * Returns the Java type root in which this local variable is declared.
+	 * <p>
+	 * This is a handle-only method.
+	 * </p>
+	 *
+	 * @return the Java type root in which this local variable is declared
+	 * @since 3.7
+	 */
+	ITypeRoot getTypeRoot();
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMember.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMember.java
index 14f2ecb..69c943a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMember.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMember.java
@@ -93,20 +93,6 @@ int getFlags() throws JavaModelException;
  */
 ISourceRange getJavadocRange() throws JavaModelException;
 /**
- * Returns the source range of this member's simple name,
- * or <code>null</code> if this member does not have a name
- * (for example, an initializer), or if this member does not have
- * associated source code (for example, a binary type).
- *
- * @exception JavaModelException if this element does not exist or if an
- *      exception occurs while accessing its corresponding resource.
- * @return the source range of this member's simple name,
- * or <code>null</code> if this member does not have a name
- * (for example, an initializer), or if this member does not have
- * associated source code (for example, a binary type)
- */
-ISourceRange getNameRange() throws JavaModelException;
-/**
  * Returns the position relative to the order this member is defined in the source.
  * Numbering starts at 1 (thus the first occurrence is occurrence 1, not occurrence 0).
  * <p>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMethod.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMethod.java
index daa458a..cf4227e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMethod.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMethod.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,21 @@ ITypeParameter[] getTypeParameters() throws JavaModelException;
  * @return the number of parameters of this method
  */
 int getNumberOfParameters();
+
+/**
+ * Returns the parameters of this method.
+ * <p>An empty array is returned, if the method has no parameters.</p>
+ * <p>For binary types, associated source is used to retrieve the {@link ILocalVariable#getNameRange() name range},
+ * {@link ILocalVariable#getSourceRange() source range} and the {@link ILocalVariable#getFlags() flags}.</p>
+ * <p>These local variables can be used to retrieve the {@link ILocalVariable#getAnnotations() parameter annotations}.</p>
+ * 
+ * @return the parameters of this method
+ * @throws JavaModelException if this element does not exist or if an
+ *      exception occurs while accessing its corresponding resource.
+ * @since 3.7
+ */
+ILocalVariable[] getParameters() throws JavaModelException;
+
 /**
  * Returns the binding key for this method only if the given method is {@link #isResolved() resolved}.
  * A binding key is a key that uniquely identifies this method. It allows access
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageDeclaration.java
index 5aff30a..2f394d7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IPackageDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ISourceReference.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ISourceReference.java
index f88fa83..f9f045e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ISourceReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ISourceReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,4 +72,42 @@ String getSource() throws JavaModelException;
  * @see SourceRange#isAvailable(ISourceRange)
  */
 ISourceRange getSourceRange() throws JavaModelException;
+
+/**
+ * Returns the name range associated with this element.
+ * 
+ * <p>If the element is an {@link IMember}, it returns
+ * the source range of this member's simple name,
+ * or <code>null</code> if this member does not have a name
+ * (for example, an initializer), or if this member does not have
+ * associated source code (for example, a binary type).</p>
+ * 
+ * <p>If this element is an {@link IImportDeclaration}, the source range
+ * of this import declaration's name, or <code>null</code> if this import
+ * declaration does not have associated source code (for example, a binary type).
+ * <br>The source range for the name includes the trailing '*' if the call to
+ * {@link IImportDeclaration#isOnDemand()} returns true.
+ * </p>
+ *
+ * <p>If this element is an {@link IPackageDeclaration}, the source range of
+ * this package declaration's name, or <code>null</code> if this package 
+ * declaration does not have associated source code (for example, a binary type).</p>
+ *
+ * <p>If this element is an {@link IAnnotation}, the source range of
+ * this annotation's name, or <code>null</code> if this annotation does not have
+ * associated source code (for example, in a binary type).</p>
+ * 
+ * <p>If this element is an {@link ITypeParameter}, the source range of this 
+ * type parameter's name, or <code>null</code> if this type parameter does not have
+ * associated source code (for example, in a binary type).</p>
+ * 
+ * <p>If this element is an {@link ITypeRoot} or {@link IImportContainer}, it
+ * returns null.</p>
+ *
+ * @return the name range associated with this element, or <code>null</code> if
+ * not available
+ *
+ * @since 3.7
+ */
+ISourceRange getNameRange() throws JavaModelException;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java
index d843d61..7f12435 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -282,7 +282,7 @@ public interface IType extends IMember, IAnnotatable {
 	 *     private final static int TIMEOUT = 500; //ms
 	 *     private long endTime;
 	 *     public void beginTask(String name, int totalWork) {
-	 *         fEndTime= System.currentTimeMillis() + TIMEOUT;
+	 *         endTime= System.currentTimeMillis() + TIMEOUT;
 	 *     }
 	 *     public boolean isCanceled() {
 	 *         return endTime <= System.currentTimeMillis();
@@ -906,11 +906,17 @@ public interface IType extends IMember, IAnnotatable {
 	boolean isAnnotation() throws JavaModelException;
 
 	/**
-	 * Returns whether this type represents a local type.
+	 * Returns whether this type represents a local type. For an anonymous type, 
+	 * this method returns true.
+	 * <p>
+	 * Note: This deviates from JLS3 14.3, which states that anonymous types are 
+	 * not local types since they do not have a name.
+	 * </p>
 	 *
 	 * @exception JavaModelException if this element does not exist or if an
 	 *		exception occurs while accessing its corresponding resource.
 	 * @return true if this type represents a local type, false otherwise
+	 * @see org.eclipse.jdt.core.dom.ITypeBinding#isLocal()
 	 * @since 2.0
 	 */
 	boolean isLocal() throws JavaModelException;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeParameter.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeParameter.java
index 2411a36..3fe8d1b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeParameter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ITypeParameter.java
@@ -68,15 +68,13 @@ public interface ITypeParameter extends IJavaElement, ISourceReference {
 	IMember getDeclaringMember();
 
 	/**
-	 * Returns the source range of this type parameter's name,
-	 * or <code>null</code> if this type parameter does not have
-	 * associated source code (for example, in a binary type).
+	 * Returns the Java type root in which this type parameter is declared.
+	 * <p>
+	 * This is a handle-only method.
+	 * </p>
 	 *
-	 * @exception JavaModelException if this element does not exist or if an
-	 *      exception occurs while accessing its corresponding resource.
-	 * @return the source range of this type parameter's name,
-	 * or <code>null</code> if this type parameter does not have
-	 * associated source code (for example, in a binary type)
+	 * @return the Java type root in which this type parameter is declared
+	 * @since 3.7
 	 */
-	ISourceRange getNameRange() throws JavaModelException;
+	ITypeRoot getTypeRoot();
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
index a95d149..a4ead1d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -900,6 +900,22 @@ public final class JavaCore extends Plugin {
 	 */
 	public static final String COMPILER_PB_RAW_TYPE_REFERENCE = PLUGIN_ID + ".compiler.problem.rawTypeReference"; //$NON-NLS-1$
 	/**
+	 * Compiler option ID: Reporting of Unavoidable Generic Type Problems.
+	 * <p> When enabled, the compiler will issue an error or warning even when it detects a generic type problem
+	 *     that could not have been avoided by the programmer. As an example, a type may be forced to use raw types
+	 *     in its method signatures and return types because the methods it overrides from a super type are declared to
+	 *     use raw types in the first place.  
+	 * <dl>
+	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems"</code></dd>
+	 * <dt>Possible values:</dt><dd><code>{ "enabled", "disabled" }</code></dd>
+	 * <dt>Default:</dt><dd><code>"enabled"</code></dd>
+	 * </dl>
+	 * @since 3.7
+	 * @category CompilerOptionID
+	 */
+	public static final String COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS = PLUGIN_ID + ".compiler.problem.unavoidableGenericTypeProblems"; //$NON-NLS-1$
+
+	/**
 	 * Compiler option ID: Reporting final Bound for Type Parameter.
 	 * <p>When enabled, the compiler will issue an error or a warning whenever a generic type parameter is associated with a
 	 *    bound corresponding to a final type; since final types cannot be further extended, the parameter is pretty useless.
@@ -1206,6 +1222,21 @@ public final class JavaCore extends Plugin {
 	 */
 	public static final String COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING = PLUGIN_ID + ".compiler.problem.missingJavadocTagsOverriding"; //$NON-NLS-1$
 	/**
+	 * Compiler option ID: Reporting Missing Javadoc Tags for Method Type Parameters.
+	 * <p>Specify whether a missing <code>@param</code> for a type parameter in a method declaration should be reported.
+	 *    When enabled, the compiler will issue a missing Javadoc tag error or warning for a type parameter without a 
+	 *    corresponding <code>@param</code> tag.</p>
+	 * <p>This option only has an effect if the compiler compliance is 1.5 or greater.</p>
+	 * <dl>
+	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters"</code></dd>
+	 * <dt>Possible values:</dt><dd><code>{ "enabled", "disabled" }</code></dd>
+	 * <dt>Default:</dt><dd><code>"disabled"</code></dd>
+	 * </dl>
+	 * @since 3.7
+	 * @category CompilerOptionID
+	 */
+	public static final String COMPILER_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS = PLUGIN_ID + ".compiler.problem.missingJavadocTagsMethodTypeParameters"; //$NON-NLS-1$
+	/**
 	 * Compiler option ID: Reporting Missing Javadoc Comments.
 	 * <p>This is the generic control for the severity of missing Javadoc comment problems.
 	 *    When enabled, the compiler will issue an error or a warning when Javadoc comments are missing.
@@ -1299,6 +1330,33 @@ public final class JavaCore extends Plugin {
 	 */
 	public static final String COMPILER_PB_PARAMETER_ASSIGNMENT = PLUGIN_ID + ".compiler.problem.parameterAssignment"; //$NON-NLS-1$
 	/**
+	 * Compiler option ID: Reporting a method that qualifies as static, but not declared static.
+	 * <p>When enabled, the compiler will issue an error or a warning if a method has
+	 *    not been declared as <code>static</code>, even though it qualifies as one.
+	 * <dl>
+	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic"</code></dd>
+	 * <dt>Possible values:</dt><dd><code>{ "error", "warning", "ignore" }</code></dd>
+	 * <dt>Default:</dt><dd><code>"ignore"</code></dd>
+	 * </dl>
+	 * @since 3.7
+	 * @category CompilerOptionID
+	 */
+	public static final String COMPILER_PB_MISSING_STATIC_ON_METHOD = PLUGIN_ID + ".compiler.problem.reportMethodCanBeStatic"; //$NON-NLS-1$
+	/**
+	 * Compiler option ID: Reporting a method that may qualify as static, but not declared static.
+	 * <p>When enabled, the compiler will issue an error or a warning if a method has
+	 *    not been declared as <code>static</code>, even though it may qualify as one,
+	 *    when another method doesn't override it.
+	 * <dl>
+	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic"</code></dd>
+	 * <dt>Possible values:</dt><dd><code>{ "error", "warning", "ignore" }</code></dd>
+	 * <dt>Default:</dt><dd><code>"ignore"</code></dd>
+	 * </dl>
+	 * @since 3.7
+	 * @category CompilerOptionID
+	 */
+	public static final String COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD = PLUGIN_ID + ".compiler.problem.reportMethodCanBePotentiallyStatic"; //$NON-NLS-1$
+	/**
 	 * Compiler option ID: Setting Source Compatibility Mode.
 	 * <p>Specify whether which source level compatibility is used. From 1.4 on, <code>'assert'</code> is a keyword
 	 *    reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM
@@ -1427,6 +1485,21 @@ public final class JavaCore extends Plugin {
 	 */
 	public static final String COMPILER_PB_SUPPRESS_WARNINGS = PLUGIN_ID + ".compiler.problem.suppressWarnings"; //$NON-NLS-1$
 	/**
+	 * Compiler option ID: Raise null related errors or warnings arising because of assert statements.
+	 * <p>When enabled, the compiler will flag all null related errors or warnings that have been enabled by the user,
+	 *    irrespective of whether a variable occurred in an assert statement.</p>
+	 * <p>When disabled, the compiler will not flag null related errors or warnings on variables that got marked as maybe or definitely
+	 *    <code>null</code> in an assert statement upstream.</p>
+	 * <dl>
+	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts"</code></dd>
+	 * <dt>Possible values:</dt><dd><code>{ "enabled", "disabled" }</code></dd>
+	 * <dt>Default:</dt><dd><code>"disabled"</code></dd>
+	 * </dl>
+	 * @since 3.7
+	 * @category CompilerOptionID
+	 */
+	public static final String COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS = PLUGIN_ID + ".compiler.problem.includeNullInfoFromAsserts"; //$NON-NLS-1$
+	/**
 	 * Compiler option ID: Further Determining the Effect of <code>@SuppressWarnings</code> if also
 	 * {@link #COMPILER_PB_SUPPRESS_WARNINGS} is enabled.
 	 * <p>When enabled, the <code>@SuppressWarnings</code> annotation can additionally be used to suppress 
@@ -1473,7 +1546,9 @@ public final class JavaCore extends Plugin {
 	 * Compiler option ID: Reporting Null Dereference.
 	 * <p>When enabled, the compiler will issue an error or a warning whenever a
 	 *    variable that is statically known to hold a null value is used to
-	 *    access a field or method.
+	 *    access a field or method.</p>
+	 * <p>Assert statements are ignored unless {@link #COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS}
+	 *    is enabled.</p>
 	 * <dl>
 	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.nullReference"</code></dd>
 	 * <dt>Possible values:</dt><dd><code>{ "error", "warning", "ignore" }</code></dd>
@@ -1488,7 +1563,9 @@ public final class JavaCore extends Plugin {
 	 * <p>When enabled, the compiler will issue an error or a warning whenever a
 	 *    variable that has formerly been tested against null but is not (no more)
 	 *    statically known to hold a non-null value is used to access a field or
-	 *    method.
+	 *    method.</p>
+	 * <p>Assert statements are ignored unless {@link #COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS}
+	 *    is enabled.</p>
 	 * <dl>
 	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.potentialNullReference"</code></dd>
 	 * <dt>Possible values:</dt><dd><code>{ "error", "warning", "ignore" }</code></dd>
@@ -1502,7 +1579,9 @@ public final class JavaCore extends Plugin {
 	 * Compiler option ID: Reporting Redundant Null Check.
 	 * <p>When enabled, the compiler will issue an error or a warning whenever a
 	 *    variable that is statically known to hold a null or a non-null value
-	 *    is tested against null.
+	 *    is tested against null.</p>
+	 * <p>Assert statements are ignored unless {@link #COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS}
+	 *    is enabled.</p>
 	 * <dl>
 	 * <dt>Option id:</dt><dd><code>"org.eclipse.jdt.core.compiler.problem.redundantNullCheck"</code></dd>
 	 * <dt>Possible values:</dt><dd><code>{ "error", "warning", "ignore" }</code></dd>
@@ -2136,7 +2215,8 @@ public final class JavaCore extends Plugin {
 	 */
 	public static final String VERSION_1_6 = "1.6"; //$NON-NLS-1$
 	/**
-	 * Configurable option value: {@value}.
+	 * Configurable option value: {@value}.<br>
+	 * <i>Note: The compiler currently does not support 1.7 compliance level</i>
 	 * @since 3.3
 	 * @category OptionValue
 	 */
@@ -3486,9 +3566,9 @@ public final class JavaCore extends Plugin {
 			// and recreate links for external folders if needed
 			if (monitor != null)
 				monitor.subTask(Messages.javamodel_resetting_source_attachment_properties);
-			ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager();
 			final IJavaProject[] projects = manager.getJavaModel().getJavaProjects();
 			HashSet visitedPaths = new HashSet();
+			ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager();
 			for (int i = 0, length = projects.length; i < length; i++) {
 				JavaProject javaProject = (JavaProject) projects[i];
 				IClasspathEntry[] classpath;
@@ -3499,7 +3579,6 @@ public final class JavaCore extends Plugin {
 					continue;
 				}
 				if (classpath != null) {
-					boolean needExternalFolderCreation = false;
 					for (int j = 0, length2 = classpath.length; j < length2; j++) {
 						IClasspathEntry entry = classpath[j];
 						if (entry.getSourceAttachmentPath() != null) {
@@ -3509,18 +3588,22 @@ public final class JavaCore extends Plugin {
 							}
 						}
 						// else source might have been attached by IPackageFragmentRoot#attachSource(...), we keep it
-						if (!needExternalFolderCreation && entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
+						if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
 							IPath entryPath = entry.getPath();
 							if (ExternalFoldersManager.isExternalFolderPath(entryPath) && externalFoldersManager.getFolder(entryPath) == null) {
-								needExternalFolderCreation = true;
+								externalFoldersManager.addFolder(entryPath, true);
 							}
 						}
 					}
-					if (needExternalFolderCreation)
-						manager.deltaState.addExternalFolderChange(javaProject, null/*act as if all external folders were new*/);
 				}
 			}
-
+			try {
+				externalFoldersManager.createPendingFolders(monitor);
+			}
+			catch(JavaModelException jme) {
+				// Creation of external folder project failed. Log it and continue;
+				Util.log(jme, "Error while processing external folders"); //$NON-NLS-1$
+			}
 			// initialize delta state
 			if (monitor != null)
 				monitor.subTask(Messages.javamodel_initializing_delta_state);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/Signature.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/Signature.java
index b290571..e078282 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/Signature.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/core/Signature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,8 +15,7 @@ import java.util.ArrayList;
 
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.parser.ScannerHelper;
-import org.eclipse.jdt.internal.core.util.Util;
-
+import org.eclipse.jdt.internal.compiler.util.Util;
 
 /**
  * Provides methods for encoding and decoding type and method signature strings.
@@ -149,75 +148,75 @@ public final class Signature {
 	 * Character constant indicating the primitive type boolean in a signature.
 	 * Value is <code>'Z'</code>.
 	 */
-	public static final char C_BOOLEAN 		= 'Z';
+	public static final char C_BOOLEAN = org.eclipse.jdt.internal.compiler.util.Util.C_BOOLEAN;
 
 	/**
 	 * Character constant indicating the primitive type byte in a signature.
 	 * Value is <code>'B'</code>.
 	 */
-	public static final char C_BYTE 		= 'B';
+	public static final char C_BYTE = org.eclipse.jdt.internal.compiler.util.Util.C_BYTE;
 
 	/**
 	 * Character constant indicating the primitive type char in a signature.
 	 * Value is <code>'C'</code>.
 	 */
-	public static final char C_CHAR 		= 'C';
+	public static final char C_CHAR = org.eclipse.jdt.internal.compiler.util.Util.C_CHAR;
 
 	/**
 	 * Character constant indicating the primitive type double in a signature.
 	 * Value is <code>'D'</code>.
 	 */
-	public static final char C_DOUBLE 		= 'D';
+	public static final char C_DOUBLE = org.eclipse.jdt.internal.compiler.util.Util.C_DOUBLE;
 
 	/**
 	 * Character constant indicating the primitive type float in a signature.
 	 * Value is <code>'F'</code>.
 	 */
-	public static final char C_FLOAT 		= 'F';
+	public static final char C_FLOAT = org.eclipse.jdt.internal.compiler.util.Util.C_FLOAT;
 
 	/**
 	 * Character constant indicating the primitive type int in a signature.
 	 * Value is <code>'I'</code>.
 	 */
-	public static final char C_INT 			= 'I';
+	public static final char C_INT = org.eclipse.jdt.internal.compiler.util.Util.C_INT;
 
 	/**
 	 * Character constant indicating the semicolon in a signature.
 	 * Value is <code>';'</code>.
 	 */
-	public static final char C_SEMICOLON 			= ';';
+	public static final char C_SEMICOLON = org.eclipse.jdt.internal.compiler.util.Util.C_SEMICOLON;
 
 	/**
 	 * Character constant indicating the colon in a signature.
 	 * Value is <code>':'</code>.
 	 * @since 3.0
 	 */
-	public static final char C_COLON 			= ':';
+	public static final char C_COLON = org.eclipse.jdt.internal.compiler.util.Util.C_COLON;
 
 	/**
 	 * Character constant indicating the primitive type long in a signature.
 	 * Value is <code>'J'</code>.
 	 */
-	public static final char C_LONG			= 'J';
+	public static final char C_LONG = org.eclipse.jdt.internal.compiler.util.Util.C_LONG;
 
 	/**
 	 * Character constant indicating the primitive type short in a signature.
 	 * Value is <code>'S'</code>.
 	 */
-	public static final char C_SHORT		= 'S';
+	public static final char C_SHORT = org.eclipse.jdt.internal.compiler.util.Util.C_SHORT;
 
 	/**
 	 * Character constant indicating result type void in a signature.
 	 * Value is <code>'V'</code>.
 	 */
-	public static final char C_VOID			= 'V';
+	public static final char C_VOID = org.eclipse.jdt.internal.compiler.util.Util.C_VOID;
 
 	/**
 	 * Character constant indicating the start of a resolved type variable in a
 	 * signature. Value is <code>'T'</code>.
 	 * @since 3.0
 	 */
-	public static final char C_TYPE_VARIABLE	= 'T';
+	public static final char C_TYPE_VARIABLE = org.eclipse.jdt.internal.compiler.util.Util.C_TYPE_VARIABLE;
 
 	/**
 	 * Character constant indicating an unbound wildcard type argument
@@ -225,14 +224,14 @@ public final class Signature {
 	 * Value is <code>'*'</code>.
 	 * @since 3.0
 	 */
-	public static final char C_STAR	= '*';
+	public static final char C_STAR = org.eclipse.jdt.internal.compiler.util.Util.C_STAR;
 
 	/**
 	 * Character constant indicating an exception in a signature.
 	 * Value is <code>'^'</code>.
 	 * @since 3.1
 	 */
-	public static final char C_EXCEPTION_START	= '^';
+	public static final char C_EXCEPTION_START = org.eclipse.jdt.internal.compiler.util.Util.C_EXCEPTION_START;
 
 	/**
 	 * Character constant indicating a bound wildcard type argument
@@ -240,7 +239,7 @@ public final class Signature {
 	 * Value is <code>'+'</code>.
 	 * @since 3.1
 	 */
-	public static final char C_EXTENDS	= '+';
+	public static final char C_EXTENDS = org.eclipse.jdt.internal.compiler.util.Util.C_EXTENDS;
 
 	/**
 	 * Character constant indicating a bound wildcard type argument
@@ -248,76 +247,76 @@ public final class Signature {
 	 * Value is <code>'-'</code>.
 	 * @since 3.1
 	 */
-	public static final char C_SUPER	= '-';
+	public static final char C_SUPER = org.eclipse.jdt.internal.compiler.util.Util.C_SUPER;
 
 	/**
 	 * Character constant indicating the dot in a signature.
 	 * Value is <code>'.'</code>.
 	 */
-	public static final char C_DOT			= '.';
+	public static final char C_DOT = org.eclipse.jdt.internal.compiler.util.Util.C_DOT;
 
 	/**
 	 * Character constant indicating the dollar in a signature.
 	 * Value is <code>'$'</code>.
 	 */
-	public static final char C_DOLLAR			= '$';
+	public static final char C_DOLLAR = org.eclipse.jdt.internal.compiler.util.Util.C_DOLLAR;
 
 	/**
 	 * Character constant indicating an array type in a signature.
 	 * Value is <code>'['</code>.
 	 */
-	public static final char C_ARRAY		= '[';
+	public static final char C_ARRAY = org.eclipse.jdt.internal.compiler.util.Util.C_ARRAY;
 
 	/**
 	 * Character constant indicating the start of a resolved, named type in a
 	 * signature. Value is <code>'L'</code>.
 	 */
-	public static final char C_RESOLVED		= 'L';
+	public static final char C_RESOLVED = org.eclipse.jdt.internal.compiler.util.Util.C_RESOLVED;
 
 	/**
 	 * Character constant indicating the start of an unresolved, named type in a
 	 * signature. Value is <code>'Q'</code>.
 	 */
-	public static final char C_UNRESOLVED	= 'Q';
+	public static final char C_UNRESOLVED = org.eclipse.jdt.internal.compiler.util.Util.C_UNRESOLVED;
 
 	/**
 	 * Character constant indicating the end of a named type in a signature.
 	 * Value is <code>';'</code>.
 	 */
-	public static final char C_NAME_END		= ';';
+	public static final char C_NAME_END = org.eclipse.jdt.internal.compiler.util.Util.C_NAME_END;
 
 	/**
 	 * Character constant indicating the start of a parameter type list in a
 	 * signature. Value is <code>'('</code>.
 	 */
-	public static final char C_PARAM_START	= '(';
+	public static final char C_PARAM_START = org.eclipse.jdt.internal.compiler.util.Util.C_PARAM_START;
 
 	/**
 	 * Character constant indicating the end of a parameter type list in a
 	 * signature. Value is <code>')'</code>.
 	 */
-	public static final char C_PARAM_END	= ')';
+	public static final char C_PARAM_END = org.eclipse.jdt.internal.compiler.util.Util.C_PARAM_END;
 
 	/**
 	 * Character constant indicating the start of a formal type parameter
 	 * (or type argument) list in a signature. Value is <code>'<'</code>.
 	 * @since 3.0
 	 */
-	public static final char C_GENERIC_START	= '<';
+	public static final char C_GENERIC_START = org.eclipse.jdt.internal.compiler.util.Util.C_GENERIC_START;
 
 	/**
 	 * Character constant indicating the end of a generic type list in a
 	 * signature. Value is <code>'>'</code>.
 	 * @since 3.0
 	 */
-	public static final char C_GENERIC_END	= '>';
+	public static final char C_GENERIC_END = org.eclipse.jdt.internal.compiler.util.Util.C_GENERIC_END;
 
 	/**
 	 * Character constant indicating a capture of a wildcard type in a
 	 * signature. Value is <code>'!'</code>.
 	 * @since 3.1
 	 */
-	public static final char C_CAPTURE	= '!';
+	public static final char C_CAPTURE =  org.eclipse.jdt.internal.compiler.util.Util.C_CAPTURE;
 
 	/**
 	 * String constant for the signature of the primitive type boolean.
@@ -974,7 +973,9 @@ public static char[] getElementType(char[] typeSignature) throws IllegalArgument
  *   correct
  */
 public static String getElementType(String typeSignature) throws IllegalArgumentException {
-	return new String(getElementType(typeSignature.toCharArray()));
+	char[] signature = typeSignature.toCharArray();
+	char[] elementType = getElementType(signature);
+	return signature == elementType ? typeSignature : new String(elementType);
 }
 /**
  * Returns the number of parameter types in the given method signature.
@@ -1387,7 +1388,9 @@ public static char[] getTypeErasure(char[] parameterizedTypeSignature) throws Il
  * @since 3.1
  */
 public static String getTypeErasure(String parameterizedTypeSignature) throws IllegalArgumentException {
-	return new String(getTypeErasure(parameterizedTypeSignature.toCharArray()));
+	char[] signature = parameterizedTypeSignature.toCharArray();
+	char[] erasure = getTypeErasure(signature);
+	return signature == erasure ? parameterizedTypeSignature : new String(erasure);
 }
 
 /**
@@ -2202,8 +2205,17 @@ public static char[] toCharArray(char[] methodSignature, char[] methodName, char
 	// parameters
 	buffer.append('(');
 	char[][] pts = getParameterTypes(methodSignature);
-	for (int i = 0, max = pts.length; i < max; i++) {
-		if (i == max - 1) {
+	// search for the last array in the signature
+	int max = pts.length;
+	int index = max - 1;
+	loop: for (int i = index; i >= 0; i--) {
+		if (pts[i][0] == Signature.C_ARRAY) {
+			break loop;
+		}
+		index--;
+	}
+	for (int i = 0; i < max; i++) {
+		if (i == index) {
 			appendTypeSignature(pts[i], 0 , fullyQualifyTypeNames, buffer, isVargArgs);
 		} else {
 			appendTypeSignature(pts[i], 0 , fullyQualifyTypeNames, buffer);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/DocumentElementParser.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/DocumentElementParser.java
index d6bc292..c3105a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/DocumentElementParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/DocumentElementParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -588,6 +588,58 @@ protected void consumeFormalParameter(boolean isVarArgs) {
 	pushOnAstStack(arg);
 	this.intArrayPtr--;
 }
+protected void consumeCatchFormalParameter(boolean isVarArgs) {
+	// FormalParameter ::= Type VariableDeclaratorId ==> false
+	// FormalParameter ::= Modifiers Type VariableDeclaratorId ==> true
+	/*
+	astStack :
+	identifierStack : type identifier
+	intStack : dim dim
+	 ==>
+	astStack : Argument
+	identifierStack :
+	intStack :
+	*/
+
+	this.identifierLengthPtr--;
+	char[] parameterName = this.identifierStack[this.identifierPtr];
+	long namePositions = this.identifierPositionStack[this.identifierPtr--];
+	int extendedDimensions = this.intStack[this.intPtr--];
+	int endOfEllipsis = 0;
+	if (isVarArgs) {
+		endOfEllipsis = this.intStack[this.intPtr--];
+	}
+	int firstDimensions = this.intStack[this.intPtr--];
+	final int typeDimensions = firstDimensions + extendedDimensions;
+	TypeReference type = getTypeReference(typeDimensions);
+	if (isVarArgs) {
+		type = copyDims(type, typeDimensions + 1);
+		if (extendedDimensions == 0) {
+			type.sourceEnd = endOfEllipsis;
+		}
+		type.bits |= ASTNode.IsVarArgs; // set isVarArgs
+	}
+	this.intPtr -= 3;
+	Argument arg =
+		new Argument(
+			parameterName,
+			namePositions,
+			type,
+			this.intStack[this.intPtr + 1]);// modifiers
+	arg.bits &= ~ASTNode.IsArgument;
+	// consume annotations
+	int length;
+	if ((length = this.expressionLengthStack[this.expressionLengthPtr--]) != 0) {
+		System.arraycopy(
+			this.expressionStack,
+			(this.expressionPtr -= length) + 1,
+			arg.annotations = new Annotation[length],
+			0,
+			length);
+	}
+	pushOnAstStack(arg);
+	this.intArrayPtr--;
+}
 /*
  *
  * INTERNAL USE-ONLY
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java
index 47af2a0..be37816 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/ISourceElementRequestor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,8 +92,17 @@ public interface ISourceElementRequestor {
 		public int declaringTypeModifiers;
 		public int extraFlags;
 		public AbstractMethodDeclaration node;
+		public ParameterInfo[] parameterInfos;
 	}
 
+	public static class ParameterInfo {
+		public int modifiers;
+		public int declarationStart;
+		public int declarationEnd;
+		public int nameSourceStart;
+		public int nameSourceEnd;
+		public char[] name;
+	}
 	public static class FieldInfo {
 		public int declarationStart;
 		public int modifiers;
@@ -120,6 +129,12 @@ public interface ISourceElementRequestor {
 	 * @param declarationEnd
 	 *                   This is the position of the ';' ending the import statement or
 	 *                   the end of the comment following the import.
+	 * @param nameStart
+	 *                   This is the position of the first character of the import declaration's
+	 *                   name.
+	 * @param nameEnd
+	 *                   This is the position of the last character of the import declaration's
+	 *                   name.
 	 * @param tokens
 	 *                   This are the tokens of the import like specified in the source.
 	 * @param onDemand
@@ -128,7 +143,7 @@ public interface ISourceElementRequestor {
 	 * @param modifiers
 	 *                   can be set to static from 1.5 on.
 	 */
-	void acceptImport(int declarationStart, int declarationEnd, char[][] tokens, boolean onDemand, int modifiers);
+	void acceptImport(int declarationStart, int declarationEnd, int nameStart, int nameEnd, char[][] tokens, boolean onDemand, int modifiers);
 
 	/*
 	 * Table of line separator position. This table is passed once at the end of
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java
index 943bd1a..ce19909 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementNotifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.util.ArrayList;
 import java.util.Map;
 
 import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.internal.compiler.ISourceElementRequestor.ParameterInfo;
 import org.eclipse.jdt.internal.compiler.ISourceElementRequestor.TypeParameterInfo;
 import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
@@ -103,16 +104,27 @@ public SourceElementNotifier(ISourceElementRequestor requestor, boolean reportLo
 	this.superTypeNames = new char[4][];
 	this.nestedTypeIndex = 0;
 }
-protected char[][][] getArguments(Argument[] arguments) {
+protected Object[][] getArgumentInfos(Argument[] arguments) {
 	int argumentLength = arguments.length;
 	char[][] argumentTypes = new char[argumentLength][];
 	char[][] argumentNames = new char[argumentLength][];
+	ParameterInfo[] parameterInfos = new ParameterInfo[argumentLength];
 	for (int i = 0; i < argumentLength; i++) {
-		argumentTypes[i] = CharOperation.concatWith(arguments[i].type.getParameterizedTypeName(), '.');
-		argumentNames[i] = arguments[i].name;
+		Argument argument = arguments[i];
+		argumentTypes[i] = CharOperation.concatWith(argument.type.getParameterizedTypeName(), '.');
+		char[] name = argument.name;
+		argumentNames[i] = name;
+		ParameterInfo parameterInfo = new ParameterInfo();
+		parameterInfo.declarationStart = argument.declarationSourceStart;
+		parameterInfo.declarationEnd = argument.declarationSourceEnd;
+		parameterInfo.nameSourceStart = argument.sourceStart;
+		parameterInfo.nameSourceEnd = argument.sourceEnd;
+		parameterInfo.modifiers = argument.modifiers;
+		parameterInfo.name = name;
+		parameterInfos[i] = parameterInfo;
 	}
 
-	return new char[][][] {argumentTypes, argumentNames};
+	return new Object[][] { parameterInfos, new char[][][] { argumentTypes, argumentNames } };
 }
 protected char[][] getInterfaceNames(TypeDeclaration typeDeclaration) {
 	char[][] interfaceNames = null;
@@ -256,10 +268,12 @@ protected void notifySourceElementRequestor(AbstractMethodDeclaration methodDecl
 	char[][] argumentNames = null;
 	boolean isVarArgs = false;
 	Argument[] arguments = methodDeclaration.arguments;
+	ParameterInfo[] parameterInfos = null; 
 	if (arguments != null) {
-		char[][][] argumentTypesAndNames = getArguments(arguments);
-		argumentTypes = argumentTypesAndNames[0];
-		argumentNames = argumentTypesAndNames[1];
+		Object[][] argumentInfos = getArgumentInfos(arguments);
+		parameterInfos = (ParameterInfo[]) argumentInfos[0];
+		argumentTypes = (char[][]) argumentInfos[1][0];
+		argumentNames = (char[][]) argumentInfos[1][1];
 
 		isVarArgs = arguments[arguments.length-1].isVarArgs();
 	}
@@ -287,6 +301,7 @@ protected void notifySourceElementRequestor(AbstractMethodDeclaration methodDecl
 			methodInfo.parameterNames = argumentNames;
 			methodInfo.exceptionTypes = thrownExceptionTypes;
 			methodInfo.typeParameters = getTypeParameterInfos(methodDeclaration.typeParameters());
+			methodInfo.parameterInfos = parameterInfos;
 			methodInfo.categories = (char[][]) this.nodesToCategories.get(methodDeclaration);
 			methodInfo.annotations = methodDeclaration.annotations;
 			methodInfo.declaringPackageName = currentPackage == null ? CharOperation.NO_CHAR : CharOperation.concatWith(currentPackage.tokens, '.');
@@ -346,6 +361,7 @@ protected void notifySourceElementRequestor(AbstractMethodDeclaration methodDecl
 		methodInfo.parameterNames = argumentNames;
 		methodInfo.exceptionTypes = thrownExceptionTypes;
 		methodInfo.typeParameters = getTypeParameterInfos(methodDeclaration.typeParameters());
+		methodInfo.parameterInfos = parameterInfos;
 		methodInfo.categories = (char[][]) this.nodesToCategories.get(methodDeclaration);
 		methodInfo.annotations = methodDeclaration.annotations;
 		methodInfo.node = methodDeclaration;
@@ -543,11 +559,14 @@ protected void notifySourceElementRequestor(
 	if (isPackage) {
 		this.requestor.acceptPackage(importReference);
 	} else {
+		final boolean onDemand = (importReference.bits & ASTNode.OnDemand) != 0;
 		this.requestor.acceptImport(
 			importReference.declarationSourceStart,
 			importReference.declarationSourceEnd,
+			importReference.sourceStart,
+			onDemand ? importReference.trailingStarPosition : importReference.sourceEnd,
 			importReference.tokens,
-			(importReference.bits & ASTNode.OnDemand) != 0,
+			onDemand,
 			importReference.modifiers);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementParser.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementParser.java
index 9b8d6f2..795b017 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -381,6 +381,15 @@ protected void consumeFormalParameter(boolean isVarArgs) {
 	// the declarationSourceStart to be set
 	flushCommentsDefinedPriorTo(this.scanner.currentPosition);
 }
+protected void consumeCatchFormalParameter(boolean isVarArgs) {
+	super.consumeCatchFormalParameter(isVarArgs);
+
+	// Flush comments prior to this formal parameter so the declarationSourceStart of the following parameter
+	// is correctly set (see bug 80904)
+	// Note that this could be done in the Parser itself, but this would slow down all parsers, when they don't need
+	// the declarationSourceStart to be set
+	flushCommentsDefinedPriorTo(this.scanner.currentPosition);
+}
 protected void consumeInterfaceHeaderName1() {
 	int currentAstPtr = this.astPtr;
 	super.consumeInterfaceHeaderName1();
@@ -631,6 +640,8 @@ protected void consumeStaticImportOnDemandDeclarationName() {
 	System.arraycopy(this.identifierPositionStack, this.identifierPtr + 1, positions, 0, length);
 	pushOnAstStack(impt = new ImportReference(tokens, positions, true, ClassFileConstants.AccStatic));
 
+	// star end position
+	impt.trailingStarPosition = this.intStack[this.intPtr--];
 	this.modifiers = ClassFileConstants.AccDefault;
 	this.modifiersSourceStart = -1; // <-- see comment into modifiersFlag(int)
 
@@ -675,6 +686,8 @@ protected void consumeTypeImportOnDemandDeclarationName() {
 	System.arraycopy(this.identifierPositionStack, this.identifierPtr + 1, positions, 0, length);
 	pushOnAstStack(impt = new ImportReference(tokens, positions, true, ClassFileConstants.AccDefault));
 
+	// star end position
+	impt.trailingStarPosition = this.intStack[this.intPtr--];
 	if (this.currentToken == TokenNameSEMICOLON){
 		impt.declarationSourceEnd = this.scanner.currentPosition - 1;
 	} else {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementRequestorAdapter.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementRequestorAdapter.java
index 39f83d3..9e81daa 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementRequestorAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/SourceElementRequestorAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,11 +51,13 @@ public class SourceElementRequestorAdapter implements ISourceElementRequestor {
 	}
 
 	/**
-	 * @see ISourceElementRequestor#acceptImport(int, int, char[][], boolean, int)
+	 * @see ISourceElementRequestor#acceptImport(int, int, int, int, char[][], boolean, int)
 	 */
 	public void acceptImport(
 		int declarationStart,
 		int declarationEnd,
+		int nameStart,
+		int nameEnd,
 		char[][] tokens,
 		boolean onDemand,
 		int modifiers) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java
index 6548c91..a5e4af3 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - TypeConverters don't set enclosingType - https://bugs.eclipse.org/bugs/show_bug.cgi?id=320841
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.parser;
 
@@ -290,19 +291,22 @@ public class SourceTypeConverter extends TypeConverter {
 		int start = methodInfo.getNameSourceStart();
 		int end = methodInfo.getNameSourceEnd();
 
-		// convert 1.5 specific constructs only if compliance is 1.5 or above
+		/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, Even when this type is being constructed
+		   on behalf of a 1.4 project we must internalize type variables properly in order to be able to
+		   recognize usages of them in the method signature, to apply substitutions and thus to be able to
+		   detect overriding in the presence of generics. If we simply drop them, when the method signature
+		   refers to the type parameter, we won't know it should be bound to the type parameter and perform
+		   incorrect lookup and may mistakenly end up with missing types
+		 */
 		TypeParameter[] typeParams = null;
-		if (this.has1_5Compliance) {
-			/* convert type parameters */
-			char[][] typeParameterNames = methodInfo.getTypeParameterNames();
-			if (typeParameterNames != null) {
-				int parameterCount = typeParameterNames.length;
-				if (parameterCount > 0) { // method's type parameters must be null if no type parameter
-					char[][][] typeParameterBounds = methodInfo.getTypeParameterBounds();
-					typeParams = new TypeParameter[parameterCount];
-					for (int i = 0; i < parameterCount; i++) {
-						typeParams[i] = createTypeParameter(typeParameterNames[i], typeParameterBounds[i], start, end);
-					}
+		char[][] typeParameterNames = methodInfo.getTypeParameterNames();
+		if (typeParameterNames != null) {
+			int parameterCount = typeParameterNames.length;
+			if (parameterCount > 0) { // method's type parameters must be null if no type parameter
+				char[][][] typeParameterBounds = methodInfo.getTypeParameterBounds();
+				typeParams = new TypeParameter[parameterCount];
+				for (int i = 0; i < parameterCount; i++) {
+					typeParams[i] = createTypeParameter(typeParameterNames[i], typeParameterBounds[i], start, end);
 				}
 			}
 		}
@@ -461,22 +465,25 @@ public class SourceTypeConverter extends TypeConverter {
 		if (this.has1_5Compliance) {
 			/* convert annotations */
 			type.annotations = convertAnnotations(typeHandle);
-
-			/* convert type parameters */
-			char[][] typeParameterNames = typeInfo.getTypeParameterNames();
-			if (typeParameterNames.length > 0) {
-				int parameterCount = typeParameterNames.length;
-				char[][][] typeParameterBounds = typeInfo.getTypeParameterBounds();
-				type.typeParameters = new TypeParameter[parameterCount];
-				for (int i = 0; i < parameterCount; i++) {
-					type.typeParameters[i] = createTypeParameter(typeParameterNames[i], typeParameterBounds[i], start, end);
-				}
+		}
+		/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, even in a 1.4 project, we
+		   must internalize type variables and observe any parameterization of super class
+		   and/or super interfaces in order to be able to detect overriding in the presence
+		   of generics.
+		 */
+		char[][] typeParameterNames = typeInfo.getTypeParameterNames();
+		if (typeParameterNames.length > 0) {
+			int parameterCount = typeParameterNames.length;
+			char[][][] typeParameterBounds = typeInfo.getTypeParameterBounds();
+			type.typeParameters = new TypeParameter[parameterCount];
+			for (int i = 0; i < parameterCount; i++) {
+				type.typeParameters[i] = createTypeParameter(typeParameterNames[i], typeParameterBounds[i], start, end);
 			}
 		}
 
 		/* set superclass and superinterfaces */
 		if (typeInfo.getSuperclassName() != null) {
-			type.superclass = createTypeReference(typeInfo.getSuperclassName(), start, end);
+			type.superclass = createTypeReference(typeInfo.getSuperclassName(), start, end, true /* include generics */);
 			type.superclass.bits |= ASTNode.IsSuperType;
 		}
 		char[][] interfaceNames = typeInfo.getInterfaceNames();
@@ -484,7 +491,7 @@ public class SourceTypeConverter extends TypeConverter {
 		if (interfaceCount > 0) {
 			type.superInterfaces = new TypeReference[interfaceCount];
 			for (int i = 0; i < interfaceCount; i++) {
-				type.superInterfaces[i] = createTypeReference(interfaceNames[i], start, end);
+				type.superInterfaces[i] = createTypeReference(interfaceNames[i], start, end, true /* include generics */);
 				type.superInterfaces[i].bits |= ASTNode.IsSuperType;
 			}
 		}
@@ -495,6 +502,7 @@ public class SourceTypeConverter extends TypeConverter {
 			type.memberTypes = new TypeDeclaration[sourceMemberTypeCount];
 			for (int i = 0; i < sourceMemberTypeCount; i++) {
 				type.memberTypes[i] = convert(sourceMemberTypes[i], compilationResult);
+				type.memberTypes[i].enclosingType = type;
 			}
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/TypeConverter.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/TypeConverter.java
index dba99fb..27c1765 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/TypeConverter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/TypeConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ public abstract class TypeConverter {
 
 	protected TypeConverter(ProblemReporter problemReporter, char memberTypeSeparator) {
 		this.problemReporter = problemReporter;
-		this.has1_5Compliance = problemReporter.options.complianceLevel >= ClassFileConstants.JDK1_5;
+		this.has1_5Compliance = problemReporter.options.originalComplianceLevel >= ClassFileConstants.JDK1_5;
 		this.memberTypeSeparator = memberTypeSeparator;
 	}
 
@@ -107,11 +107,25 @@ public abstract class TypeConverter {
 	protected TypeReference createTypeReference(
 		char[] typeName,
 		int start,
+		int end,
+		boolean includeGenericsAnyway) {
+
+		int length = typeName.length;
+		this.namePos = 0;
+		return decodeType(typeName, length, start, end, true);
+	}
+
+	/*
+	 * Build a type reference from a readable name, e.g. java.lang.Object[][]
+	 */
+	protected TypeReference createTypeReference(
+		char[] typeName,
+		int start,
 		int end) {
 
 		int length = typeName.length;
 		this.namePos = 0;
-		return decodeType(typeName, length, start, end);
+		return decodeType(typeName, length, start, end, false);
 	}
 
 	/*
@@ -351,7 +365,7 @@ public abstract class TypeConverter {
 		}
 	}
 
-	private TypeReference decodeType(char[] typeName, int length, int start, int end) {
+	private TypeReference decodeType(char[] typeName, int length, int start, int end, boolean includeGenericsAnyway) {
 		int identCount = 1;
 		int dim = 0;
 		int nameFragmentStart = this.namePos, nameFragmentEnd = -1;
@@ -373,7 +387,7 @@ public abstract class TypeConverter {
 								}
 								this.namePos += max;
 								Wildcard result = new Wildcard(Wildcard.SUPER);
-								result.bound = decodeType(typeName, length, start, end);
+								result.bound = decodeType(typeName, length, start, end, includeGenericsAnyway);
 								result.sourceStart = start;
 								result.sourceEnd = end;
 								return result;
@@ -389,7 +403,7 @@ public abstract class TypeConverter {
 								}
 								this.namePos += max;
 								Wildcard result = new Wildcard(Wildcard.EXTENDS);
-								result.bound = decodeType(typeName, length, start, end);
+								result.bound = decodeType(typeName, length, start, end, includeGenericsAnyway);
 								result.sourceStart = start;
 								result.sourceEnd = end;
 								return result;
@@ -401,7 +415,7 @@ public abstract class TypeConverter {
 					result.sourceEnd = end;
 					return result;
 				case '[' :
-					if (dim == 0) nameFragmentEnd = this.namePos-1;
+					if (dim == 0 && nameFragmentEnd < 0) nameFragmentEnd = this.namePos-1;
 					dim++;
 					break;
 				case ']' :
@@ -414,19 +428,32 @@ public abstract class TypeConverter {
 					identCount ++;
 					break;
 				case '<' :
-					// convert 1.5 specific constructs only if compliance is 1.5 or above
-					if (!this.has1_5Compliance)
-						break typeLoop;
-					if (fragments == null) fragments = new ArrayList(2);
+					/* We need to convert and preserve 1.5 specific constructs either if compliance is 1.5 or above,
+					   or the caller has explicitly requested generics to be included. The parameter includeGenericsAnyway
+					   should be used by the caller to signal that in the calling context generics information must be 
+					   internalized even when the requesting project is 1.4. But in all cases, we must skip over them to
+					   see if there are any applicable type fragments after the type parameters: i.e we just aren't done
+					   having seen a '<' in 1.4 mode. 
+					   
+					   Because of the way type signatures are encoded, TypeConverter.decodeType(String, int, int, int) is immune
+					   to this problem. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=325633
+					 */
+					if (this.has1_5Compliance || includeGenericsAnyway) {
+						if (fragments == null) fragments = new ArrayList(2);
+					}
 					nameFragmentEnd = this.namePos-1;
-					char[][] identifiers = CharOperation.splitOn('.', typeName, nameFragmentStart, this.namePos);
-					fragments.add(identifiers);
+					if (this.has1_5Compliance || includeGenericsAnyway) {
+						char[][] identifiers = CharOperation.splitOn('.', typeName, nameFragmentStart, this.namePos);
+						fragments.add(identifiers);
+					}
 					this.namePos++; // skip '<'
-					TypeReference[] arguments = decodeTypeArguments(typeName, length, start, end); // positionned on '>' at end
-					fragments.add(arguments);
-					identCount = 0;
-					nameFragmentStart = -1;
-					nameFragmentEnd = -1;
+					TypeReference[] arguments = decodeTypeArguments(typeName, length, start, end, includeGenericsAnyway); // positionned on '>' at end
+					if (this.has1_5Compliance || includeGenericsAnyway) {
+						fragments.add(arguments);
+						identCount = 0;
+						nameFragmentStart = -1;
+						nameFragmentEnd = -1;
+					}
 					// next increment will skip '>'
 					break;
 			}
@@ -510,11 +537,11 @@ public abstract class TypeConverter {
 		}
 	}
 
-	private TypeReference[] decodeTypeArguments(char[] typeName, int length, int start, int end) {
+	private TypeReference[] decodeTypeArguments(char[] typeName, int length, int start, int end, boolean includeGenericsAnyway) {
 		ArrayList argumentList = new ArrayList(1);
 		int count = 0;
 		argumentsLoop: while (this.namePos < length) {
-			TypeReference argument = decodeType(typeName, length, start, end);
+			TypeReference argument = decodeType(typeName, length, start, end, includeGenericsAnyway);
 			count++;
 			argumentList.add(argument);
 			if (this.namePos >= length) break argumentsLoop;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/AnnotatableInfo.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/AnnotatableInfo.java
index 0dfc6f4..0ee1ce1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/AnnotatableInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/AnnotatableInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 package org.eclipse.jdt.internal.core;
 
 import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.SourceRange;
 
 public class AnnotatableInfo extends MemberElementInfo {
 
@@ -61,4 +63,7 @@ public class AnnotatableInfo extends MemberElementInfo {
 	protected void setNameSourceStart(int start) {
 		this.nameStart= start;
 	}
+	protected ISourceRange getNameRange() {
+		return new SourceRange(this.nameStart, this.nameEnd - this.nameStart + 1);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMember.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMember.java
index c4d4bc4..e8b3625 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMember.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMember.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,11 @@ protected IAnnotation[] getAnnotations(IBinaryAnnotation[] binaryAnnotations, lo
 		return standardAnnotations;
 	int length = binaryAnnotations.length;
 	int standardLength = standardAnnotations.length;
-	IAnnotation[] annotations = new IAnnotation[length + standardLength];
+	int fullLength = length + standardLength;
+	if (fullLength == 0) {
+		return Annotation.NO_ANNOTATIONS;
+	}
+	IAnnotation[] annotations = new IAnnotation[fullLength];
 	for (int i = 0; i < length; i++) {
 		annotations[i] = Util.getAnnotation(this, binaryAnnotations[i], null);
 	}
@@ -57,7 +61,7 @@ protected IAnnotation[] getAnnotations(IBinaryAnnotation[] binaryAnnotations, lo
 private IAnnotation getAnnotation(char[][] annotationName) {
 	return new Annotation(this, new String(CharOperation.concatWith(annotationName, '.')));
 }
-private IAnnotation[] getStandardAnnotations(long tagBits) {
+protected IAnnotation[] getStandardAnnotations(long tagBits) {
 	if ((tagBits & TagBits.AllStandardAnnotationsMask) == 0)
 		return Annotation.NO_ANNOTATIONS;
 	ArrayList annotations = new ArrayList();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java
index 30ec4b3..c8a1fa8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,16 @@
 package org.eclipse.jdt.internal.core;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.*;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.ILocalVariable;
+import org.eclipse.jdt.core.IMemberValuePair;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeParameter;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
@@ -28,10 +37,12 @@ import org.eclipse.jdt.internal.core.util.Util;
 /* package */ class BinaryMethod extends BinaryMember implements IMethod {
 	/**
 	 * The parameter type signatures of the method - stored locally
-	 * to perform equality test. <code>null</code> indicates no
+	 * to perform equality test. <code>CharOperation.NO_STRINGS</code> indicates no
 	 * parameters.
 	 */
 	protected String[] parameterTypes;
+	protected String [] erasedParamaterTypes; // lazily initialized via call to getErasedParameterTypes
+	
 	/**
 	 * The parameter names for the method.
 	 */
@@ -52,13 +63,58 @@ protected BinaryMethod(JavaElement parent, String name, String[] paramTypes) {
 }
 public boolean equals(Object o) {
 	if (!(o instanceof BinaryMethod)) return false;
-	return super.equals(o) && Util.equalArraysOrNull(this.parameterTypes, ((BinaryMethod)o).parameterTypes);
+	return super.equals(o) && Util.equalArraysOrNull(getErasedParameterTypes(), ((BinaryMethod)o).getErasedParameterTypes());
 }
 public IAnnotation[] getAnnotations() throws JavaModelException {
 	IBinaryMethod info = (IBinaryMethod) getElementInfo();
 	IBinaryAnnotation[] binaryAnnotations = info.getAnnotations();
 	return getAnnotations(binaryAnnotations, info.getTagBits());
 }
+public ILocalVariable[] getParameters() throws JavaModelException {
+	IBinaryMethod info = (IBinaryMethod) getElementInfo();
+	int length = this.parameterTypes.length;
+	if (length == 0) {
+		return LocalVariable.NO_LOCAL_VARIABLES;
+	}
+	ILocalVariable[] localVariables = new ILocalVariable[length];
+	char[][] argumentNames = info.getArgumentNames();
+	if (argumentNames == null || argumentNames.length < length) {
+		argumentNames = new char[length][];
+		for (int j = 0; j < length; j++) {
+			argumentNames[j] = ("arg" + j).toCharArray(); //$NON-NLS-1$
+		}
+	}
+	for (int i= 0; i < length; i++) {
+		LocalVariable localVariable = new LocalVariable(
+				this,
+				new String(argumentNames[i]),
+				0,
+				-1,
+				0,
+				-1,
+				this.parameterTypes[i],
+				null,
+				-1,
+				true);
+		localVariables[i] = localVariable;
+		IAnnotation[] annotations = getAnnotations(localVariable, info.getParameterAnnotations(i), info.getTagBits());
+		localVariable.annotations = annotations;
+	}
+	return localVariables;
+}
+private IAnnotation[] getAnnotations(JavaElement annotationParent, IBinaryAnnotation[] binaryAnnotations, long tagBits) {
+	IAnnotation[] standardAnnotations = getStandardAnnotations(tagBits);
+	if (binaryAnnotations == null)
+		return standardAnnotations;
+	int length = binaryAnnotations.length;
+	int standardLength = standardAnnotations.length;
+	IAnnotation[] annotations = new IAnnotation[length + standardLength];
+	for (int i = 0; i < length; i++) {
+		annotations[i] = Util.getAnnotation(annotationParent, binaryAnnotations[i], null);
+	}
+	System.arraycopy(standardAnnotations, 0, annotations, length, standardLength);
+	return annotations;
+}
 public IMemberValuePair getDefaultValue() throws JavaModelException {
 	IBinaryMethod info = (IBinaryMethod) getElementInfo();
 	Object defaultValue = info.getDefaultValue();
@@ -171,17 +227,27 @@ public String[] getParameterNames() throws JavaModelException {
 
 		// if parameter names exist, convert parameter names to String array
 		if(paramNames != null) {
-			this.parameterNames = new String[paramNames.length];
+			String[] names = new String[paramNames.length];
 			for (int i = 0; i < paramNames.length; i++) {
-				this.parameterNames[i] = new String(paramNames[i]);
+				names[i] = new String(paramNames[i]);
 			}
-			return this.parameterNames;
+			return this.parameterNames = names;
 		}
 	}
 
 	// try to see if we can retrieve the names from the attached javadoc
 	IBinaryMethod info = (IBinaryMethod) getElementInfo();
-	final int paramCount = Signature.getParameterCount(new String(info.getMethodDescriptor()));
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=316937
+	// Use Signature#getParameterCount() only if the argument names are not already available.
+	int paramCount = Signature.getParameterCount(new String(info.getMethodDescriptor()));
+	if (this.isConstructor()) {
+		final IType declaringType = this.getDeclaringType();
+		if (declaringType.isMember()
+				&& !Flags.isStatic(declaringType.getFlags())) {
+			paramCount--; // remove synthetic argument from constructor param count
+		}
+	}
+
 	if (paramCount != 0) {
 		// don't try to look for javadoc for synthetic methods
 		int modifiers = getFlags();
@@ -210,8 +276,8 @@ public String[] getParameterNames() throws JavaModelException {
 				// ignore
 			}
 			if (timeOut == 0) {
-				// don't try to fetch the values
-				return this.parameterNames = getRawParameterNames(paramCount);
+				// don't try to fetch the values and don't cache either (https://bugs.eclipse.org/bugs/show_bug.cgi?id=329671)
+				return getRawParameterNames(paramCount);
 			}
 			final class ParametersNameCollector {
 				String javadoc;
@@ -268,17 +334,17 @@ public String[] getParameterNames() throws JavaModelException {
 							new char[] {' '});
 					final char[][] params = splitParameters(paramsSource, paramCount);
 					final int paramsLength = params.length;
-					this.parameterNames = new String[paramsLength];
+					String[] names = new String[paramsLength];
 					for (int i = 0; i < paramsLength; i++) {
 						final char[] param = params[i];
 						int indexOfSpace = CharOperation.lastIndexOf(' ', param);
 						if (indexOfSpace != -1) {
-							this.parameterNames[i] = String.valueOf(param, indexOfSpace + 1, param.length - indexOfSpace -1);
+							names[i] = String.valueOf(param, indexOfSpace + 1, param.length - indexOfSpace -1);
 						} else {
-							this.parameterNames[i] = "arg" + i; //$NON-NLS-1$
+							names[i] = "arg" + i; //$NON-NLS-1$
 						}
 					}
-					return this.parameterNames;
+					return this.parameterNames = names;
 				}
 			}
 		}
@@ -292,8 +358,8 @@ public String[] getParameterNames() throws JavaModelException {
 			return this.parameterNames = names;
 		}
 	}
-	// if still no parameter names, produce fake ones
-	return this.parameterNames = getRawParameterNames(paramCount);
+	// If still no parameter names, produce fake ones, but don't cache them (https://bugs.eclipse.org/bugs/show_bug.cgi?id=329671)
+	return getRawParameterNames(paramCount);
 }
 private char[][] splitParameters(char[] parametersSource, int paramCount) {
 	// we have generic types as one of the parameter types
@@ -362,6 +428,25 @@ public String[] getParameterTypes() {
 	return this.parameterTypes;
 }
 
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=299384
+private String [] getErasedParameterTypes() {
+	if (this.erasedParamaterTypes == null) {
+		int paramCount = this.parameterTypes.length;
+		String [] erasedTypes = new String [paramCount];
+		boolean erasureNeeded = false;
+		for (int i = 0; i < paramCount; i++) {
+			String parameterType = this.parameterTypes[i];
+			if ((erasedTypes[i] = Signature.getTypeErasure(parameterType)) != parameterType)
+				erasureNeeded = true;
+		}
+		this.erasedParamaterTypes = erasureNeeded ? erasedTypes : this.parameterTypes;
+	}
+	return this.erasedParamaterTypes;
+}
+private String getErasedParameterType(int index) {
+	return getErasedParameterTypes()[index];
+}
+
 public ITypeParameter getTypeParameter(String typeParameterName) {
 	return new TypeParameter(this, typeParameterName);
 }
@@ -436,7 +521,7 @@ public String getSignature() throws JavaModelException {
 public int hashCode() {
    int hash = super.hashCode();
 	for (int i = 0, length = this.parameterTypes.length; i < length; i++) {
-	    hash = Util.combineHashCodes(hash, this.parameterTypes[i].hashCode());
+	    hash = Util.combineHashCodes(hash, getErasedParameterType(i).hashCode());
 	}
 	return hash;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java
index ef32aad..5219750 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -510,7 +510,7 @@ public String getSuperclassTypeSignature() throws JavaModelException {
 			index++;
 		}
 		int start = index;
-		index = Util.scanClassTypeSignature(genericSignature, start) + 1;
+		index = org.eclipse.jdt.internal.compiler.util.Util.scanClassTypeSignature(genericSignature, start) + 1;
 		char[] superclassSig = CharOperation.subarray(genericSignature, start, index);
 		return new String(ClassFile.translatedName(superclassSig));
 	} else {
@@ -596,10 +596,10 @@ public String[] getSuperInterfaceTypeSignatures() throws JavaModelException {
 			index++;
 		}
 		// skip superclass
-		index = Util.scanClassTypeSignature(genericSignature, index) + 1;
+		index = org.eclipse.jdt.internal.compiler.util.Util.scanClassTypeSignature(genericSignature, index) + 1;
 		while (index  < signatureLength) {
 			int start = index;
-			index = Util.scanClassTypeSignature(genericSignature, start) + 1;
+			index = org.eclipse.jdt.internal.compiler.util.Util.scanClassTypeSignature(genericSignature, start) + 1;
 			char[] interfaceSig = CharOperation.subarray(genericSignature, start, index);
 			interfaces.add(new String(ClassFile.translatedName(interfaceSig)));
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryTypeConverter.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryTypeConverter.java
index 7a31694..e56e4ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryTypeConverter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryTypeConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - TypeConverters don't set enclosingType - https://bugs.eclipse.org/bugs/show_bug.cgi?id=320841
  *******************************************************************************/
 package org.eclipse.jdt.internal.core;
 
@@ -282,6 +283,7 @@ public class BinaryTypeConverter extends TypeConverter {
 			} else {
 				typeDeclaration.memberTypes[i] = convert(memberTypes[i], null, null);
 			}
+			typeDeclaration.memberTypes[i].enclosingType = typeDeclaration;
 		}
 
 		/* convert fields */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CancelableNameEnvironment.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CancelableNameEnvironment.java
index c69893b..b1ac5e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CancelableNameEnvironment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CancelableNameEnvironment.java
@@ -19,7 +19,7 @@ import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer;
 import org.eclipse.jdt.internal.compiler.problem.AbortCompilation;
 
 
-public class CancelableNameEnvironment extends SearchableEnvironment implements INameEnviromentWithProgress {
+public class CancelableNameEnvironment extends SearchableEnvironment implements INameEnvironmentWithProgress {
 	private IProgressMonitor monitor;
 
 	public CancelableNameEnvironment(JavaProject project, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java
index cf4a1bf..083242a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -834,4 +834,7 @@ protected IStatus validateExistence(IResource underlyingResource) {
 	}
 	return JavaModelStatus.VERIFIED_OK;
 }
+public ISourceRange getNameRange() {
+	return null;
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFileInfo.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFileInfo.java
index 5903fce..f272467 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFileInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFileInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,23 +41,26 @@ import org.eclipse.jdt.internal.compiler.util.SuffixConstants;
 	 */
 	protected ITypeParameter[] typeParameters;
 
+private void generateAnnotationsInfos(JavaElement member, IBinaryAnnotation[] binaryAnnotations, long tagBits, HashMap newElements) {
+	generateAnnotationsInfos(member, null, binaryAnnotations, tagBits, newElements);
+}
 /**
  * Creates the handles and infos for the annotations of the given binary member.
  * Adds new handles to the given vector.
  */
-private void generateAnnotationsInfos(BinaryMember member, IBinaryAnnotation[] binaryAnnotations, long tagBits, HashMap newElements) {
+private void generateAnnotationsInfos(JavaElement member, char[] parameterName, IBinaryAnnotation[] binaryAnnotations, long tagBits, HashMap newElements) {
 	if (binaryAnnotations != null) {
 		for (int i = 0, length = binaryAnnotations.length; i < length; i++) {
 			IBinaryAnnotation annotationInfo = binaryAnnotations[i];
-			generateAnnotationInfo(member, newElements, annotationInfo);
+			generateAnnotationInfo(member, parameterName, newElements, annotationInfo, null);
 		}
 	}
-	generateStandardAnnotationsInfos(member, tagBits, newElements);
-}
-private void generateAnnotationInfo(JavaElement parent, HashMap newElements, IBinaryAnnotation annotationInfo) {
-	generateAnnotationInfo(parent, newElements, annotationInfo, null);
+	generateStandardAnnotationsInfos(member, parameterName, tagBits, newElements);
 }
 private void generateAnnotationInfo(JavaElement parent, HashMap newElements, IBinaryAnnotation annotationInfo, String memberValuePairName) {
+	generateAnnotationInfo(parent, null, newElements, annotationInfo, memberValuePairName);
+}
+private void generateAnnotationInfo(JavaElement parent, char[] parameterName, HashMap newElements, IBinaryAnnotation annotationInfo, String memberValuePairName) {
 	char[] typeName = org.eclipse.jdt.core.Signature.toCharArray(CharOperation.replaceOnCopy(annotationInfo.getTypeName(), '/', '.'));
 	Annotation annotation = new Annotation(parent, new String(typeName), memberValuePairName);
 	while (newElements.containsKey(annotation)) {
@@ -81,29 +84,29 @@ private void generateAnnotationInfo(JavaElement parent, HashMap newElements, IBi
 		}
 	}
 }
-private void generateStandardAnnotationsInfos(BinaryMember member, long tagBits, HashMap newElements) {
+private void generateStandardAnnotationsInfos(JavaElement javaElement, char[] parameterName, long tagBits, HashMap newElements) {
 	if ((tagBits & TagBits.AllStandardAnnotationsMask) == 0)
 		return;
 	if ((tagBits & TagBits.AnnotationTargetMASK) != 0) {
-		generateStandardAnnotation(member, TypeConstants.JAVA_LANG_ANNOTATION_TARGET, getTargetElementTypes(tagBits), newElements);
+		generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_TARGET, getTargetElementTypes(tagBits), newElements);
 	}
 	if ((tagBits & TagBits.AnnotationRetentionMASK) != 0) {
-		generateStandardAnnotation(member, TypeConstants.JAVA_LANG_ANNOTATION_RETENTION, getRetentionPolicy(tagBits), newElements);
+		generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_RETENTION, getRetentionPolicy(tagBits), newElements);
 	}
 	if ((tagBits & TagBits.AnnotationDeprecated) != 0) {
-		generateStandardAnnotation(member, TypeConstants.JAVA_LANG_DEPRECATED, Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
+		generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_DEPRECATED, Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
 	}
 	if ((tagBits & TagBits.AnnotationDocumented) != 0) {
-		generateStandardAnnotation(member, TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED, Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
+		generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED, Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
 	}
 	if ((tagBits & TagBits.AnnotationInherited) != 0) {
-		generateStandardAnnotation(member, TypeConstants.JAVA_LANG_ANNOTATION_INHERITED, Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
+		generateStandardAnnotation(javaElement, TypeConstants.JAVA_LANG_ANNOTATION_INHERITED, Annotation.NO_MEMBER_VALUE_PAIRS, newElements);
 	}
 	// note that JAVA_LANG_SUPPRESSWARNINGS and JAVA_LANG_OVERRIDE cannot appear in binaries
 }
 
-private void generateStandardAnnotation(BinaryMember member, char[][] typeName, IMemberValuePair[] members, HashMap newElements) {
-	IAnnotation annotation = new Annotation(member, new String(CharOperation.concatWith(typeName, '.')));
+private void generateStandardAnnotation(JavaElement javaElement, char[][] typeName, IMemberValuePair[] members, HashMap newElements) {
+	IAnnotation annotation = new Annotation(javaElement, new String(CharOperation.concatWith(typeName, '.')));
 	AnnotationInfo annotationInfo = new AnnotationInfo();
 	annotationInfo.members = members;
 	newElements.put(annotation, annotationInfo);
@@ -244,15 +247,38 @@ private void generateMethodInfos(IType type, IBinaryType typeInfo, HashMap newEl
 		// TODO (jerome) filter out synthetic members
 		//                        indexer should not index them as well
 		// if ((methodInfo.getModifiers() & IConstants.AccSynthetic) != 0) continue; // skip synthetic
+		boolean useGenericSignature = true;
 		char[] signature = methodInfo.getGenericSignature();
-		if (signature == null) signature = methodInfo.getMethodDescriptor();
+		if (signature == null) {
+			useGenericSignature = false;
+			signature = methodInfo.getMethodDescriptor();
+		}
+		String selector = new String(methodInfo.getSelector());
+		final boolean isConstructor = methodInfo.isConstructor();
+		if (isConstructor) {
+			selector = type.getElementName();
+		}
 		String[] pNames = null;
 		try {
 			pNames = Signature.getParameterTypes(new String(signature));
+			if (isConstructor
+					&& useGenericSignature
+					&& type.isMember()
+					&& !Flags.isStatic(type.getFlags())) {
+				int length = pNames.length;
+				System.arraycopy(pNames, 0, (pNames = new String[length + 1]), 1, length);
+				char[] descriptor = methodInfo.getMethodDescriptor();
+				final String[] parameterTypes = Signature.getParameterTypes(new String(descriptor));
+				pNames[0] = parameterTypes[0];
+			}
 		} catch (IllegalArgumentException e) {
 			// protect against malformed .class file (e.g. com/sun/crypto/provider/SunJCE_b.class has a 'a' generic signature)
 			signature = methodInfo.getMethodDescriptor();
 			pNames = Signature.getParameterTypes(new String(signature));
+		} catch (JavaModelException e) {
+			// protect against malformed .class file (e.g. com/sun/crypto/provider/SunJCE_b.class has a 'a' generic signature)
+			signature = methodInfo.getMethodDescriptor();
+			pNames = Signature.getParameterTypes(new String(signature));
 		}
 		char[][] paramNames= new char[pNames.length][];
 		for (int j= 0; j < pNames.length; j++) {
@@ -260,10 +286,6 @@ private void generateMethodInfos(IType type, IBinaryType typeInfo, HashMap newEl
 		}
 		char[][] parameterTypes = ClassFile.translatedNames(paramNames);
 		JavaModelManager manager = JavaModelManager.getJavaModelManager();
-		String selector = new String(methodInfo.getSelector());
-		if (methodInfo.isConstructor()) {
-			selector =type.getElementName();
-		}
 		selector =  manager.intern(selector);
 		for (int j= 0; j < pNames.length; j++) {
 			pNames[j]= manager.intern(new String(parameterTypes[j]));
@@ -271,13 +293,38 @@ private void generateMethodInfos(IType type, IBinaryType typeInfo, HashMap newEl
 		BinaryMethod method = new BinaryMethod((JavaElement)type, selector, pNames);
 		childrenHandles.add(method);
 
-		// ensure that 2 binary methods with the same signature but with different return types have different occurence counts.
+		// ensure that 2 binary methods with the same signature but with different return types have different occurrence counts.
 		// (case of bridge methods in 1.5)
 		while (newElements.containsKey(method))
 			method.occurrenceCount++;
 
 		newElements.put(method, methodInfo);
 
+		int max = pNames.length;
+		char[][] argumentNames = methodInfo.getArgumentNames();
+		if (argumentNames == null || argumentNames.length < max) {
+			argumentNames = new char[max][];
+			for (int j = 0; j < max; j++) {
+				argumentNames[j] = ("arg" + j).toCharArray(); //$NON-NLS-1$
+			}
+		}
+		for (int j = 0; j < max; j++) {
+			IBinaryAnnotation[] parameterAnnotations = methodInfo.getParameterAnnotations(j);
+			if (parameterAnnotations != null) {
+				LocalVariable localVariable = new LocalVariable(
+						method,
+						new String(argumentNames[j]),
+						0,
+						-1,
+						0,
+						-1,
+						method.parameterTypes[j],
+						null,
+						-1,
+						true);
+				generateAnnotationsInfos(localVariable, argumentNames[j], parameterAnnotations, methodInfo.getTagBits(), newElements);
+			}
+		}
 		generateTypeParameterInfos(method, signature, newElements, typeParameterHandles);
 		generateAnnotationsInfos(method, methodInfo.getAnnotations(), methodInfo.getTagBits(), newElements);
 		Object defaultValue = methodInfo.getDefaultValue();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathChange.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathChange.java
index ca00c9d..b96cd44 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathChange.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.internal.compiler.util.ObjectVector;
+import org.eclipse.jdt.internal.core.DeltaProcessor.RootInfo;
 import org.eclipse.jdt.internal.core.JavaModelManager.PerProjectInfo;
 import org.eclipse.jdt.internal.core.search.indexing.IndexManager;
 import org.eclipse.jdt.internal.core.util.Util;
@@ -304,7 +305,7 @@ public class ClasspathChange {
 					result |= HAS_LIBRARY_CHANGE;
 				}
 
-				PackageFragmentRoot[] pkgFragmentRoots = null;
+				IPackageFragmentRoot[] pkgFragmentRoots = null;
 				if (removedRoots != null) {
 					PackageFragmentRoot oldRoot = (PackageFragmentRoot)  removedRoots.get(this.oldResolvedClasspath[i].getPath());
 					if (oldRoot != null) { // use old root if any (could be none if entry wasn't bound)
@@ -323,6 +324,26 @@ public class ClasspathChange {
 							null, // inside original project
 							false, // don't retrieve exported roots
 							null); /*no reverse map*/
+						// https://bugs.eclipse.org/bugs/show_bug.cgi?id=335986
+						// When a package fragment's corresponding resource is removed from the project, 
+						// IJavaProject#computePackageFragmentRoots() doesn't include that entry. Hence 
+						// the cache become necessary in such cases. Add the cache to the accumulatedRoots 
+						// only when it's not already present.
+						RootInfo rootInfo = (RootInfo) state.oldRoots.get(this.oldResolvedClasspath[i].getPath());
+						if (rootInfo != null && rootInfo.cache != null) {
+							IPackageFragmentRoot oldRoot = rootInfo.cache;
+							boolean found = false;
+							for (int j = 0; j < accumulatedRoots.size(); j++) {
+								IPackageFragmentRoot root = (IPackageFragmentRoot) accumulatedRoots.elementAt(j);
+								if (!root.getPath().equals(oldRoot.getPath())) {
+									found = true;
+									break;
+								}
+							}
+							if (!found)
+								accumulatedRoots.add(oldRoot);
+						}
+
 						pkgFragmentRoots = new PackageFragmentRoot[accumulatedRoots.size()];
 						accumulatedRoots.copyInto(pkgFragmentRoots);
 					} catch (JavaModelException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathEntry.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathEntry.java
index 66d40f7..d8086ff 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathEntry.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1002,33 +1002,48 @@ public class ClasspathEntry implements IClasspathEntry {
 	/*
 	 * Resolves the ".." in the given path. Returns the given path if it contains no ".." segment.
 	 */
-	public static IPath resolveDotDot(IPath path) {
+	public static IPath resolveDotDot(IPath reference, IPath path) {
 		IPath newPath = null;
-		IPath workspaceLocation = null;
-		for (int i = 0, length = path.segmentCount(); i < length; i++) {
-			String segment = path.segment(i);
-			if (DOT_DOT.equals(segment)) {
-				if (newPath == null) {
-					if (i == 0) {
-						workspaceLocation = workspaceRoot.getLocation();
-						newPath = workspaceLocation;
+		IPath workspaceLocation = workspaceRoot.getLocation();
+		if (reference == null || workspaceLocation.isPrefixOf(reference)) {
+			for (int i = 0, length = path.segmentCount(); i < length; i++) {
+				String segment = path.segment(i);
+				if (DOT_DOT.equals(segment)) {
+					if (newPath == null) {
+						if (i == 0) {
+							newPath = workspaceLocation;
+						} else {
+							newPath = path.removeFirstSegments(i);
+						}
 					} else {
-						newPath = path.removeFirstSegments(i);
+						if (newPath.segmentCount() > 0) {
+							newPath = newPath.removeLastSegments(1);
+						} else {
+							newPath = workspaceLocation;
+						}
 					}
-				} else {
-					if (newPath.segmentCount() > 0) {
-						newPath = newPath.removeLastSegments(1);
+				} else if (newPath != null) {
+					if (newPath.equals(workspaceLocation) && workspaceRoot.getProject(segment).isAccessible()) {
+						newPath = new Path(segment).makeAbsolute();
 					} else {
-						workspaceLocation = workspaceRoot.getLocation();
-						newPath = workspaceLocation;
+						newPath = newPath.append(segment);
 					}
 				}
-			} else if (newPath != null) {
-				if (newPath.equals(workspaceLocation) && workspaceRoot.getProject(segment).isAccessible()) {
-					newPath = new Path(segment).makeAbsolute();
-				} else {
+			}
+		}
+		else {
+			for (int i = 0, length = path.segmentCount(); i < length; i++) {
+				String segment = path.segment(i);
+				if (DOT_DOT.equals(segment)) {
+					if (newPath == null){
+						newPath = reference;
+					}
+					if (newPath.segmentCount() > 0) {
+						newPath = newPath.removeLastSegments(1);
+	 				}
+				} else if (newPath != null) {
 					newPath = newPath.append(segment);
-				}
+	 			}
 			}
 		}
 		if (newPath == null)
@@ -1419,8 +1434,8 @@ public class ClasspathEntry implements IClasspathEntry {
 		return buffer.toString();
 	}
 	
-	public ClasspathEntry resolvedDotDot() {
-		IPath resolvedPath = resolveDotDot(this.path);
+	public ClasspathEntry resolvedDotDot(IPath reference) {
+		IPath resolvedPath = resolveDotDot(reference, this.path);
 		if (resolvedPath == this.path)
 			return this;
 		return new ClasspathEntry(
@@ -1919,7 +1934,7 @@ public class ClasspathEntry implements IClasspathEntry {
 
 			// library entry check
 			case IClasspathEntry.CPE_LIBRARY :
-				path = ClasspathEntry.resolveDotDot(path);
+				path = ClasspathEntry.resolveDotDot(project.getProject().getLocation(), path);
 				
 				// do not validate entries from Class-Path: in manifest
 				// (these entries are considered optional since the user cannot act on them)
@@ -2063,6 +2078,11 @@ public class ClasspathEntry implements IClasspathEntry {
 								return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundSourceAttachment, new String [] {sourceAttachment.toString(), path.toString(), project.getElementName()}));
 							}
 						}
+						// https://bugs.eclipse.org/bugs/show_bug.cgi?id=229042
+						// Validate the contents of the archive
+						IJavaModelStatus status = validateLibraryContents(path, project, entryPathMsg);
+						if (status != JavaModelStatus.VERIFIED_OK) 
+							return status;
 						break;
 					case IResource.FOLDER :	// internal binary folder
 						if (sourceAttachment != null
@@ -2083,13 +2103,22 @@ public class ClasspathEntry implements IClasspathEntry {
 					} else {
 						return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_illegalExternalFolder, new String[] {path.toOSString(), project.getElementName()}));
 					}
-				} else if (sourceAttachment != null
-						&& !sourceAttachment.isEmpty()
-						&& JavaModel.getTarget(sourceAttachment, true) == null){
-					if (container != null) {
-						return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundSourceAttachmentInContainedLibrary, new String [] {sourceAttachment.toString(), path.toOSString(), container}));
-					} else {
-						return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundSourceAttachment, new String [] {sourceAttachment.toString(), path.toOSString(), project.getElementName()}));
+				} else {
+					if (sourceAttachment != null
+							&& !sourceAttachment.isEmpty()
+							&& JavaModel.getTarget(sourceAttachment, true) == null){
+						if (container != null) {
+							return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundSourceAttachmentInContainedLibrary, new String [] {sourceAttachment.toString(), path.toOSString(), container}));
+						} else {
+							return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_unboundSourceAttachment, new String [] {sourceAttachment.toString(), path.toOSString(), project.getElementName()}));
+						}
+					}
+					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=229042
+					// Validate the contents of the archive
+					if(file.isFile()) {
+						IJavaModelStatus status = validateLibraryContents(path, project, entryPathMsg);
+						if (status != JavaModelStatus.VERIFIED_OK) 
+							return status;
 					}
 				}
 			} else {
@@ -2121,4 +2150,18 @@ public class ClasspathEntry implements IClasspathEntry {
 		}
 		return JavaModelStatus.VERIFIED_OK;
 	}
+
+	private static IJavaModelStatus validateLibraryContents(IPath path, IJavaProject project, String entryPathMsg) {
+		JavaModelManager manager = JavaModelManager.getJavaModelManager();
+		try {
+			manager.verifyArchiveContent(path);
+		} catch (CoreException e) {
+			if (e.getStatus().getMessage() == Messages.status_IOException) {
+				return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(
+						Messages.classpath_archiveReadError,
+						new String[] {entryPathMsg, project.getElementName()}));
+			}
+		}
+		return JavaModelStatus.VERIFIED_OK;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnit.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnit.java
index 2d62037..ae648ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnit.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnit.java
@@ -1340,4 +1340,7 @@ protected IStatus validateExistence(IResource underlyingResource) {
 	return JavaModelStatus.VERIFIED_OK;
 }
 
+public ISourceRange getNameRange() {
+	return null;
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitProblemFinder.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitProblemFinder.java
index 6f7ea3e..1374a3f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitProblemFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitProblemFinder.java
@@ -96,20 +96,33 @@ public class CompilationUnitProblemFinder extends Compiler {
 
 		CompilationResult result =
 			new CompilationResult(sourceTypes[0].getFileName(), 1, 1, this.options.maxProblemsPerUnit);
+		
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=305259, build the compilation unit in its own sand box.
+		final long savedComplianceLevel = this.options.complianceLevel;
+		final long savedSourceLevel = this.options.sourceLevel;
+		
+		try {
+			IJavaProject project = ((SourceTypeElementInfo) sourceTypes[0]).getHandle().getJavaProject();
+			this.options.complianceLevel = CompilerOptions.versionToJdkLevel(project.getOption(JavaCore.COMPILER_COMPLIANCE, true));
+			this.options.sourceLevel = CompilerOptions.versionToJdkLevel(project.getOption(JavaCore.COMPILER_SOURCE, true));
 
-		// need to hold onto this
-		CompilationUnitDeclaration unit =
-			SourceTypeConverter.buildCompilationUnit(
-				sourceTypes,//sourceTypes[0] is always toplevel here
-				SourceTypeConverter.FIELD_AND_METHOD // need field and methods
-				| SourceTypeConverter.MEMBER_TYPE // need member types
-				| SourceTypeConverter.FIELD_INITIALIZATION, // need field initialization
-				this.lookupEnvironment.problemReporter,
-				result);
+			// need to hold onto this
+			CompilationUnitDeclaration unit =
+				SourceTypeConverter.buildCompilationUnit(
+						sourceTypes,//sourceTypes[0] is always toplevel here
+						SourceTypeConverter.FIELD_AND_METHOD // need field and methods
+						| SourceTypeConverter.MEMBER_TYPE // need member types
+						| SourceTypeConverter.FIELD_INITIALIZATION, // need field initialization
+						this.lookupEnvironment.problemReporter,
+						result);
 
-		if (unit != null) {
-			this.lookupEnvironment.buildTypeBindings(unit, accessRestriction);
-			this.lookupEnvironment.completeTypeBindings(unit);
+			if (unit != null) {
+				this.lookupEnvironment.buildTypeBindings(unit, accessRestriction);
+				this.lookupEnvironment.completeTypeBindings(unit);
+			}
+		} finally {
+			this.options.complianceLevel = savedComplianceLevel;
+			this.options.sourceLevel = savedSourceLevel;
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java
index 00af3a2..50a0c9d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitStructureRequestor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,11 +17,19 @@ import java.util.Map;
 import java.util.Stack;
 
 import org.eclipse.core.runtime.Assert;
-import org.eclipse.jdt.core.*;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMemberValuePair;
+import org.eclipse.jdt.core.ITypeParameter;
+import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.compiler.CategorizedProblem;
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.internal.compiler.ISourceElementRequestor;
+import org.eclipse.jdt.internal.compiler.ast.ASTNode;
+import org.eclipse.jdt.internal.compiler.ast.Argument;
 import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
 import org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess;
 import org.eclipse.jdt.internal.compiler.ast.Expression;
@@ -39,7 +47,6 @@ import org.eclipse.jdt.internal.compiler.util.HashtableOfObject;
 import org.eclipse.jdt.internal.compiler.util.HashtableOfObjectToInt;
 import org.eclipse.jdt.internal.core.util.ReferenceInfoAdapter;
 import org.eclipse.jdt.internal.core.util.Util;
-import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 /**
  * A requestor for the fuzzy parser, used to compute the children of an ICompilationUnit.
  */
@@ -125,7 +132,7 @@ protected CompilationUnitStructureRequestor(ICompilationUnit unit, CompilationUn
 /**
  * @see ISourceElementRequestor
  */
-public void acceptImport(int declarationStart, int declarationEnd, char[][] tokens, boolean onDemand, int modifiers) {
+public void acceptImport(int declarationStart, int declarationEnd, int nameSourceStart, int nameSourceEnd, char[][] tokens, boolean onDemand, int modifiers) {
 	JavaElement parentHandle= (JavaElement) this.handleStack.peek();
 	if (!(parentHandle.getElementType() == IJavaElement.COMPILATION_UNIT)) {
 		Assert.isTrue(false); // Should not happen
@@ -148,6 +155,8 @@ public void acceptImport(int declarationStart, int declarationEnd, char[][] toke
 	ImportDeclarationElementInfo info = new ImportDeclarationElementInfo();
 	info.setSourceRangeStart(declarationStart);
 	info.setSourceRangeEnd(declarationEnd);
+	info.setNameSourceStart(nameSourceStart);
+	info.setNameSourceEnd(nameSourceEnd);
 	info.setFlags(modifiers);
 
 	addToChildren(this.importContainerInfo, handle);
@@ -184,6 +193,8 @@ public void acceptPackage(ImportReference importReference) {
 		AnnotatableInfo info = new AnnotatableInfo();
 		info.setSourceRangeStart(importReference.declarationSourceStart);
 		info.setSourceRangeEnd(importReference.declarationSourceEnd);
+		info.setNameSourceStart(importReference.sourceStart);
+		info.setNameSourceEnd(importReference.sourceEnd);
 
 		addToChildren(parentInfo, handle);
 		this.newElements.put(handle, info);
@@ -423,8 +434,53 @@ private SourceMethodElementInfo createMethodInfo(MethodInfo methodInfo, SourceMe
 			acceptAnnotation(annotation, info, handle);
 		}
 	}
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=334783
+	// Process the parameter annotations from the arguments
+	if (methodInfo.node != null && methodInfo.node.arguments != null) {
+		info.arguments = acceptMethodParameters(methodInfo.node.arguments, handle, methodInfo);
+	}
 	return info;
 }
+private LocalVariable[] acceptMethodParameters(Argument[] arguments, JavaElement methodHandle, MethodInfo methodInfo) {
+	if (arguments == null) return null;
+	LocalVariable[] result = new LocalVariable[arguments.length];
+	Annotation[][] paramAnnotations = new Annotation[arguments.length][];
+	for(int i = 0; i < arguments.length; i++) {
+		Argument argument = arguments[i];
+		AnnotatableInfo localVarInfo = new AnnotatableInfo();
+		localVarInfo.setSourceRangeStart(argument.declarationSourceStart);
+		localVarInfo.setSourceRangeEnd(argument.declarationSourceStart);
+		localVarInfo.setNameSourceStart(argument.sourceStart);
+		localVarInfo.setNameSourceEnd(argument.sourceEnd);
+		
+		String paramTypeSig = JavaModelManager.getJavaModelManager().intern(Signature.createTypeSignature(methodInfo.parameterTypes[i], false));
+		result[i] = new LocalVariable(
+				methodHandle,
+				new String(argument.name),
+				argument.declarationSourceStart,
+				argument.declarationSourceEnd,
+				argument.sourceStart,
+				argument.sourceEnd,
+				paramTypeSig,
+				argument.annotations,
+				argument.modifiers, 
+				true);
+		this.newElements.put(result[i], localVarInfo);
+		this.infoStack.push(localVarInfo);
+		this.handleStack.push(result[i]);
+		if (argument.annotations != null) {
+			paramAnnotations[i] = new Annotation[argument.annotations.length];
+			for (int  j = 0; j < argument.annotations.length; j++ ) {
+				org.eclipse.jdt.internal.compiler.ast.Annotation annotation = argument.annotations[j];
+				acceptAnnotation(annotation, localVarInfo, result[i]);
+			}
+		}
+		this.infoStack.pop();
+		this.handleStack.pop();
+	}
+	return result;
+}
+
 /**
  * @see ISourceElementRequestor
  */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
index d92c42c..b15d3c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
 import org.eclipse.core.runtime.*;
 import org.eclipse.jdt.core.*;
 import org.eclipse.jdt.core.compiler.CharOperation;
@@ -35,6 +36,7 @@ import org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy;
 import org.eclipse.jdt.internal.core.search.AbstractSearchScope;
 import org.eclipse.jdt.internal.core.search.JavaWorkspaceScope;
 import org.eclipse.jdt.internal.core.search.indexing.IndexManager;
+import org.eclipse.jdt.internal.core.util.Messages;
 import org.eclipse.jdt.internal.core.util.Util;
 
 /**
@@ -103,26 +105,35 @@ public class DeltaProcessor {
 		IPath rootPath;
 		int entryKind;
 		IPackageFragmentRoot root;
+		IPackageFragmentRoot cache;
 		RootInfo(JavaProject project, IPath rootPath, char[][] inclusionPatterns, char[][] exclusionPatterns, int entryKind) {
 			this.project = project;
 			this.rootPath = rootPath;
 			this.inclusionPatterns = inclusionPatterns;
 			this.exclusionPatterns = exclusionPatterns;
 			this.entryKind = entryKind;
+			this.cache = getPackageFragmentRoot();
+		}
+		public IPackageFragmentRoot getPackageFragmentRoot() {
+			IPackageFragmentRoot tRoot = null;
+			Object target = JavaModel.getTarget(this.rootPath, false/*don't check existence*/);
+			if (target instanceof IResource) {
+				tRoot = this.project.getPackageFragmentRoot((IResource)target);
+			} else {
+				tRoot = this.project.getPackageFragmentRoot(this.rootPath.toOSString());
+			}
+			return tRoot;
 		}
 		public IPackageFragmentRoot getPackageFragmentRoot(IResource resource) {
 			if (this.root == null) {
 				if (resource != null) {
 					this.root = this.project.getPackageFragmentRoot(resource);
 				} else {
-					Object target = JavaModel.getTarget(this.rootPath, false/*don't check existence*/);
-					if (target instanceof IResource) {
-						this.root = this.project.getPackageFragmentRoot((IResource)target);
-					} else {
-						this.root = this.project.getPackageFragmentRoot(this.rootPath.toOSString());
-					}
+					this.root = getPackageFragmentRoot();
 				}
 			}
+			if (this.root != null) 
+				this.cache = this.root;
 			return this.root;
 		}
 		boolean isRootOfProject(IPath path) {
@@ -280,12 +291,71 @@ public class DeltaProcessor {
 		if (parent != null && parent.isOpen()) {
 			try {
 				OpenableElementInfo info = (OpenableElementInfo) parent.getElementInfo();
-				info.addChild(child);
-			} catch (JavaModelException e) {
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=338006
+				// Insert the package fragment roots in the same order as the classpath order.
+				if (child instanceof IPackageFragmentRoot)
+					addPackageFragmentRoot(info, (IPackageFragmentRoot) child);
+				else
+					info.addChild(child);
+ 			} catch (JavaModelException e) {
 				// do nothing - we already checked if open
 			}
 		}
 	}
+	
+	private void addPackageFragmentRoot(OpenableElementInfo parent, IPackageFragmentRoot child)
+			throws JavaModelException {
+
+		IJavaElement[] roots = parent.getChildren();
+		if (roots.length > 0) {
+			IClasspathEntry[] resolvedClasspath = ((JavaProject) child.getJavaProject()).getResolvedClasspath();
+			IPath currentEntryPath = child.getResolvedClasspathEntry().getPath();
+			int indexToInsert = -1;
+			int lastComparedIndex = -1;
+			int i = 0, j = 0;
+			for (; i < roots.length && j < resolvedClasspath.length;) {
+
+				IClasspathEntry classpathEntry = resolvedClasspath[j];
+				if (lastComparedIndex != j && currentEntryPath.equals(classpathEntry.getPath())) {
+					indexToInsert = i;
+					break;
+				}
+				lastComparedIndex = j;
+
+				IClasspathEntry rootEntry = ((IPackageFragmentRoot) roots[i]).getResolvedClasspathEntry();
+				if (rootEntry.getPath().equals(classpathEntry.getPath()))
+					i++;
+				else
+					j++;
+			}
+
+			for (; i < roots.length; i++) {
+				// If the new root is already among the children, no need to proceed further. Just return.
+				if (roots[i].equals(child)) {
+					return;
+				}
+				// If we start seeing root's classpath entry different from the child's entry, then the child can't
+				// be present further down the roots array.
+				if (!((IPackageFragmentRoot) roots[i]).getResolvedClasspathEntry().getPath()
+						.equals(currentEntryPath))
+					break;
+			}
+
+			if (indexToInsert >= 0) {
+				int newSize = roots.length + 1;
+				IPackageFragmentRoot[] newChildren = new IPackageFragmentRoot[newSize];
+
+				if (indexToInsert > 0)
+					System.arraycopy(roots, 0, newChildren, 0, indexToInsert);
+
+				newChildren[indexToInsert] = child;
+				System.arraycopy(roots, indexToInsert, newChildren, indexToInsert + 1, (newSize - indexToInsert - 1));
+				parent.setChildren(newChildren);
+				return;
+			}
+		}
+		parent.addChild(child);
+	}
 	/*
 	 * Process the given delta and look for projects being added, opened, closed or
 	 * with a java nature being added or removed.
@@ -686,11 +756,15 @@ public class DeltaProcessor {
 		this.currentElement = (Openable)element;
 		return this.currentElement;
 	}
+	
+	public void checkExternalArchiveChanges(IJavaElement[] elementsScope,  IProgressMonitor monitor) throws JavaModelException {
+		checkExternalArchiveChanges(elementsScope, false, monitor);
+	}
 	/*
 	 * Check all external archive (referenced by given roots, projects or model) status and issue a corresponding root delta.
 	 * Also triggers index updates
 	 */
-	public void checkExternalArchiveChanges(IJavaElement[] elementsScope, IProgressMonitor monitor) throws JavaModelException {
+	private void checkExternalArchiveChanges(IJavaElement[] elementsScope, boolean asynchronous, IProgressMonitor monitor) throws JavaModelException {
 		if (monitor != null && monitor.isCanceled())
 			throw new OperationCanceledException();
 		try {
@@ -724,26 +798,51 @@ public class DeltaProcessor {
 					JavaProject javaProject = (JavaProject)delta.getElement();
 					projectsToTouch[i] = javaProject.getProject();
 				}
-
-				// touch the projects to force them to be recompiled while taking the workspace lock
-				// so that there is no concurrency with the Java builder
-				// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=96575
-				IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-					public void run(IProgressMonitor progressMonitor) throws CoreException {
-						for (int i = 0; i < length; i++) {
-							IProject project = projectsToTouch[i];
-
-							// touch to force a build of this project
-							if (JavaBuilder.DEBUG)
-								System.out.println("Touching project " + project.getName() + " due to external jar file change"); //$NON-NLS-1$ //$NON-NLS-2$
-							project.touch(progressMonitor);
+				if (projectsToTouch.length > 0) {
+					if (asynchronous){
+						WorkspaceJob touchJob = new WorkspaceJob(Messages.updating_external_archives_jobName) {
+							
+							public IStatus runInWorkspace(IProgressMonitor progressMonitor) throws CoreException {
+								try {
+									if (progressMonitor != null)
+										progressMonitor.beginTask("", projectsToTouch.length); //$NON-NLS-1$
+									touchProjects(projectsToTouch, progressMonitor);
+								}
+								finally {
+									if (progressMonitor != null)
+										progressMonitor.done();
+								}
+								return Status.OK_STATUS;
+							}
+							
+							public boolean belongsTo(Object family) {
+								return ResourcesPlugin.FAMILY_MANUAL_REFRESH == family;
+							}
+						};
+						touchJob.schedule();
+					}
+					else {
+						// touch the projects to force them to be recompiled while taking the workspace lock
+						//	 so that there is no concurrency with the Java builder
+						// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=96575
+						IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+							public void run(IProgressMonitor progressMonitor) throws CoreException {
+								for (int i = 0; i < projectsToTouch.length; i++) {
+									IProject project = projectsToTouch[i];
+
+									// touch to force a build of this project
+									if (JavaBuilder.DEBUG)
+										System.out.println("Touching project " + project.getName() + " due to external jar file change"); //$NON-NLS-1$ //$NON-NLS-2$
+									project.touch(progressMonitor);
+								}
+							}
+						};
+						try {
+							ResourcesPlugin.getWorkspace().run(runnable, monitor);
+						} catch (CoreException e) {
+							throw new JavaModelException(e);
 						}
 					}
-				};
-				try {
-					ResourcesPlugin.getWorkspace().run(runnable, monitor);
-				} catch (CoreException e) {
-					throw new JavaModelException(e);
 				}
 
 				if (this.currentDelta != null) { // if delta has not been fired while creating markers
@@ -758,6 +857,19 @@ public class DeltaProcessor {
 			if (monitor != null) monitor.done();
 		}
 	}
+
+	protected void touchProjects(final IProject[] projectsToTouch, IProgressMonitor progressMonitor)
+			throws CoreException {
+		for (int i = 0; i < projectsToTouch.length; i++) {
+			IProgressMonitor monitor = progressMonitor == null ? null: new SubProgressMonitor(progressMonitor, 1);
+			IProject project = projectsToTouch[i];
+			// touch to force a build of this project
+			if (JavaBuilder.DEBUG)
+				System.out.println("Touching project " + project.getName() + " due to external jar file change"); //$NON-NLS-1$ //$NON-NLS-2$
+			project.touch(monitor);
+		}
+	}
+
 	/*
 	 * Check if external archives have changed for the given elements and create the corresponding deltas.
 	 * Returns whether at least one delta was created.
@@ -1890,6 +2002,17 @@ public class DeltaProcessor {
 				//https://bugs.eclipse.org/bugs/show_bug.cgi?id=302295
 				// Refresh all project references together in a single job
 				JavaModelManager.getExternalManager().refreshReferences(projects, null);
+				
+				IJavaProject[] javaElements = new IJavaProject[projects.length];
+				for (int index = 0; index < projects.length; index++) {
+					javaElements[index] = JavaCore.create(projects[index]);
+				}
+				try {
+					checkExternalArchiveChanges(javaElements, true, null);
+				} catch (JavaModelException e) {
+		        	if (!e.isDoesNotExist())
+		        		Util.log(e, "Exception while updating external archives"); //$NON-NLS-1$
+				}
 				return;
 
 			case IResourceChangeEvent.POST_CHANGE :
@@ -2272,7 +2395,11 @@ public class DeltaProcessor {
 				/* check classpath or prefs files change */
 				IFile file = (IFile) resource;
 				String fileName = file.getName();
-				if (fileName.equals(JavaProject.CLASSPATH_FILENAME)) {
+				RootInfo rootInfo = null;
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=229042
+				// Mark a validation if a library with package fragment root in the project has changed
+				if (fileName.equals(JavaProject.CLASSPATH_FILENAME)
+						|| ((rootInfo = rootInfo(file.getFullPath(), delta.getKind())) != null && rootInfo.entryKind == IClasspathEntry.CPE_LIBRARY)) {
 					JavaProject javaProject = (JavaProject)JavaCore.create(file.getProject());
 					this.state.addClasspathValidation(javaProject);
 					affectedProjects.add(file.getProject().getFullPath());
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFolderChange.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFolderChange.java
index 4335939..1f4c26a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFolderChange.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFolderChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - inconsistent initialization of classpath container backed by external class folder, see https://bugs.eclipse.org/320618
  *******************************************************************************/
 package org.eclipse.jdt.internal.core;
 
@@ -42,7 +43,7 @@ public class ExternalFolderChange {
 		Iterator iterator = newFolders.iterator();
 		while (iterator.hasNext()) {
 			Object folderPath = iterator.next();
-			if (oldFolders == null || !oldFolders.remove(folderPath)) {
+			if (oldFolders == null || !oldFolders.remove(folderPath) || foldersManager.removePendingFolder(folderPath)) {
 				try {
 					foldersManager.createLinkFolder((IPath) folderPath, refreshIfExistAlready, monitor);
 				} catch (CoreException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
index 150768e..d615698 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - inconsistent initialization of classpath container backed by external class folder, see https://bugs.eclipse.org/320618
  *******************************************************************************/
 package org.eclipse.jdt.internal.core;
 
@@ -20,6 +21,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 import java.util.Vector;
 
 import org.eclipse.core.resources.IFolder;
@@ -36,6 +38,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.internal.core.util.Messages;
 import org.eclipse.jdt.internal.core.util.Util;
 
@@ -43,6 +46,7 @@ public class ExternalFoldersManager {
 	private static final String EXTERNAL_PROJECT_NAME = ".org.eclipse.jdt.core.external.folders"; //$NON-NLS-1$
 	private static final String LINKED_FOLDER_NAME = ".link"; //$NON-NLS-1$
 	private Map folders;
+	private Set pendingFolders; // subset of keys of 'folders', for which linked folders haven't been created yet.
 	private int counter = 0;
 	/* Singleton instance */
 	private static ExternalFoldersManager MANAGER = new ExternalFoldersManager();
@@ -87,7 +91,8 @@ public class ExternalFoldersManager {
 	public static boolean isExternalFolderPath(IPath externalPath) {
 		if (externalPath == null)
 			return false;
-		if (ResourcesPlugin.getWorkspace().getRoot().getProject(externalPath.segment(0)).exists())
+		String firstSegment = externalPath.segment(0);
+		if (firstSegment != null && ResourcesPlugin.getWorkspace().getRoot().getProject(firstSegment).exists())
 			return false;
 		File externalFolder = externalPath.toFile();
 		if (externalFolder.isFile())
@@ -101,11 +106,11 @@ public class ExternalFoldersManager {
 		return EXTERNAL_PROJECT_NAME.equals(resourcePath.segment(0));
 	}
 
-	public IFolder addFolder(IPath externalFolderPath) {
-		return addFolder(externalFolderPath, getExternalFoldersProject());
+	public IFolder addFolder(IPath externalFolderPath, boolean scheduleForCreation) {
+		return addFolder(externalFolderPath, getExternalFoldersProject(), scheduleForCreation);
 	}
 
-	private IFolder addFolder(IPath externalFolderPath, IProject externalFoldersProject) {
+	private IFolder addFolder(IPath externalFolderPath, IProject externalFoldersProject, boolean scheduleForCreation) {
 		Map knownFolders = getFolders();
 		Object existing = knownFolders.get(externalFolderPath);
 		if (existing != null) {
@@ -115,13 +120,35 @@ public class ExternalFoldersManager {
 		do {
 			result = externalFoldersProject.getFolder(LINKED_FOLDER_NAME + this.counter++);
 		} while (result.exists());
+		if (scheduleForCreation) {
+			if (this.pendingFolders == null)
+				this.pendingFolders = new HashSet();
+			this.pendingFolders.add(externalFolderPath);
+		}
 		knownFolders.put(externalFolderPath, result);
 		return result;
 	}
+	
+	/** 
+	 * Try to remove the argument from the list of folders pending for creation.
+	 * @param externalPath to link to
+	 * @return true if the argument was found in the list of pending folders and could be removed from it.
+	 */
+	public boolean removePendingFolder(Object externalPath) {
+		if (this.pendingFolders == null)
+			return false;
+		return this.pendingFolders.remove(externalPath);
+	}
 
 	public IFolder createLinkFolder(IPath externalFolderPath, boolean refreshIfExistAlready, IProgressMonitor monitor) throws CoreException {
 		IProject externalFoldersProject = createExternalFoldersProject(monitor); // run outside synchronized as this can create a resource
-		IFolder result = addFolder(externalFolderPath, externalFoldersProject);
+		return createLinkFolder(externalFolderPath, refreshIfExistAlready, externalFoldersProject, monitor);
+	}
+
+	private IFolder createLinkFolder(IPath externalFolderPath, boolean refreshIfExistAlready,
+									IProject externalFoldersProject, IProgressMonitor monitor) throws CoreException {
+		
+		IFolder result = addFolder(externalFolderPath, externalFoldersProject, false);
 		if (!result.exists())
 			result.createLink(externalFolderPath, IResource.ALLOW_MISSING_LOCAL, monitor);
 		else if (refreshIfExistAlready)
@@ -129,13 +156,38 @@ public class ExternalFoldersManager {
 		return result;
 	}
 
+	public void createPendingFolders(IProgressMonitor monitor) throws JavaModelException{
+		if (this.pendingFolders == null || this.pendingFolders.isEmpty()) return;
+		
+		IProject externalFoldersProject = null;
+		try {
+			externalFoldersProject = createExternalFoldersProject(monitor);
+		}
+		catch(CoreException e) {
+			throw new JavaModelException(e);
+		}
+		Iterator iterator = this.pendingFolders.iterator();
+		while (iterator.hasNext()) {
+			Object folderPath = iterator.next();
+			try {
+				createLinkFolder((IPath) folderPath, false, externalFoldersProject, monitor);
+			} catch (CoreException e) {
+				Util.log(e, "Error while creating a link for external folder :" + folderPath); //$NON-NLS-1$
+			}
+		}
+		this.pendingFolders.clear();
+	}
+	
 	public void cleanUp(IProgressMonitor monitor) throws CoreException {
 		ArrayList toDelete = getFoldersToCleanUp(monitor);
 		if (toDelete == null)
 			return;
 		for (Iterator iterator = toDelete.iterator(); iterator.hasNext();) {
-			IFolder folder = (IFolder) iterator.next();
+			Map.Entry entry = (Map.Entry) iterator.next();
+			IFolder folder = (IFolder) entry.getValue();
 			folder.delete(true, monitor);
+			IPath key = (IPath) entry.getKey();
+			this.folders.remove(key);
 		}
 		IProject project = getExternalFoldersProject();
 		if (project.isAccessible() && project.members().length == 1/*remaining member is .project*/)
@@ -157,11 +209,10 @@ public class ExternalFoldersManager {
 				IPath path = (IPath) entry.getKey();
 				if ((roots != null && !roots.containsKey(path))
 						&& (sourceAttachments != null && !sourceAttachments.containsKey(path))) {
-					IFolder folder = (IFolder) entry.getValue();
-					if (folder != null) {
+					if (entry.getValue() != null) {
 						if (result == null)
 							result = new ArrayList();
-						result.add(folder);
+						result.add(entry);
 					}
 				}
 			}
@@ -172,7 +223,7 @@ public class ExternalFoldersManager {
 	public IProject getExternalFoldersProject() {
 		return ResourcesPlugin.getWorkspace().getRoot().getProject(EXTERNAL_PROJECT_NAME);
 	}
-	private IProject createExternalFoldersProject(IProgressMonitor monitor) throws CoreException {
+	public IProject createExternalFoldersProject(IProgressMonitor monitor) throws CoreException {
 		IProject project = getExternalFoldersProject();
 		if (!project.isAccessible()) {
 			if (!project.exists()) {
@@ -384,6 +435,7 @@ public class ExternalFoldersManager {
 				for (int index = 0; index < this.externalFolders.size(); index++ ) {
 					if ((externalPath = (IPath)this.externalFolders.get(index)) != null) {
 						IFolder folder = getFolder(externalPath);
+						// https://bugs.eclipse.org/bugs/show_bug.cgi?id=321358
 						if (folder != null)
 							folder.refreshLocal(IResource.DEPTH_INFINITE, pm);
 					}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/INameEnviromentWithProgress.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/INameEnviromentWithProgress.java
deleted file mode 100644
index 45e13bc..0000000
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/INameEnviromentWithProgress.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.core;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
-
-/**
- * The name environment provides a callback API that the compiler
- * can use to look up types, compilation units, and packages in the
- * current environment.  The name environment is passed to the compiler
- * on creation.
- * 
- * This name environment can be canceled using the monitor passed as an argument to
- * {@link #setMonitor(IProgressMonitor)}.
- * 
- * @since 3.6
- */
-public interface INameEnviromentWithProgress extends INameEnvironment {
-	
-	/**
-	 * Set the monitor for the given name environment. In order to be able to cancel this name environment calls,
-	 * a non-null monitor should be given. 
-	 * 
-	 * @param monitor the given monitor
-	 */
-	void setMonitor(IProgressMonitor monitor);
-}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/INameEnvironmentWithProgress.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/INameEnvironmentWithProgress.java
new file mode 100644
index 0000000..82e1770
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/INameEnvironmentWithProgress.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.core;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
+
+/**
+ * The name environment provides a callback API that the compiler
+ * can use to look up types, compilation units, and packages in the
+ * current environment.  The name environment is passed to the compiler
+ * on creation.
+ * 
+ * This name environment can be canceled using the monitor passed as an argument to
+ * {@link #setMonitor(IProgressMonitor)}.
+ * 
+ * @since 3.6
+ */
+public interface INameEnvironmentWithProgress extends INameEnvironment {
+	
+	/**
+	 * Set the monitor for the given name environment. In order to be able to cancel this name environment calls,
+	 * a non-null monitor should be given. 
+	 * 
+	 * @param monitor the given monitor
+	 */
+	void setMonitor(IProgressMonitor monitor);
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java
index cf33848..c1cf002 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -114,4 +114,7 @@ protected void toStringInfo(int tab, StringBuffer buffer, Object info, boolean s
 		buffer.append(" (not open)"); //$NON-NLS-1$
 	}
 }
+public ISourceRange getNameRange() {
+	return null;
+}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclaration.java
index 1e1ac5d..c85bf12 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,10 @@ protected char getHandleMementoDelimiter() {
 	Assert.isTrue(false, "Should not be called"); //$NON-NLS-1$
 	return 0;
 }
+public ISourceRange getNameRange() throws JavaModelException {
+	ImportDeclarationElementInfo info = (ImportDeclarationElementInfo) getElementInfo();
+	return info.getNameRange();
+}
 /*
  * @see JavaElement#getPrimaryElement(boolean)
  */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclarationElementInfo.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclarationElementInfo.java
index e1873e4..4ae68ed 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclarationElementInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportDeclarationElementInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.core;
 
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.SourceRange;
 import org.eclipse.jdt.internal.compiler.env.ISourceImport;
 
 /**
@@ -18,5 +20,34 @@ import org.eclipse.jdt.internal.compiler.env.ISourceImport;
  */
 public class ImportDeclarationElementInfo extends MemberElementInfo implements ISourceImport{
 
-	// empty element info
+	/**
+	 * The start position of this import declaration's name in the its
+	 * openable's buffer.
+	 */
+	protected int nameStart= -1;
+
+	/**
+	 * The last position of this import declaration's name in the its
+	 * openable's buffer.
+	 */
+	protected int nameEnd= -1;
+
+	/**
+	 * Sets the last position of this import declaration's name, relative
+	 * to its openable's source buffer.
+	 */
+	protected void setNameSourceEnd(int end) {
+		this.nameEnd= end;
+	}
+	/**
+	 * Sets the start position of this import declaration's name, relative
+	 * to its openable's source buffer.
+	 */
+	protected void setNameSourceStart(int start) {
+		this.nameStart= start;
+	}
+
+	protected ISourceRange getNameRange() {
+		return new SourceRange(this.nameStart, this.nameEnd - this.nameStart + 1);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java
index 8cedb3d..5b18c19 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java
@@ -18,6 +18,7 @@ import java.util.zip.ZipFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jdt.core.*;
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.core.util.HashtableOfArrayToObject;
@@ -97,7 +98,7 @@ public class JarPackageFragmentRoot extends PackageFragmentRoot {
 		} catch (CoreException e) {
 			if (e.getCause() instanceof ZipException) {
 				// not a ZIP archive, leave the children empty
-				Util.log(e, "Invalid ZIP archive: " + toStringWithAncestors()); //$NON-NLS-1$
+				Util.log(IStatus.ERROR, "Invalid ZIP archive: " + toStringWithAncestors()); //$NON-NLS-1$
 				children = NO_ELEMENTS;
 			} else if (e instanceof JavaModelException) {
 				throw (JavaModelException)e;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaCorePreferenceInitializer.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaCorePreferenceInitializer.java
index af84418..532ed94 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaCorePreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaCorePreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,12 +94,38 @@ public class JavaCorePreferenceInitializer extends AbstractPreferenceInitializer
 		defaultOptionsMap.put(JavaCore.TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC, "50"); //$NON-NLS-1$
 
 		// Store default values to default preferences
-	 	IEclipsePreferences defaultPreferences = ((IScopeContext) new DefaultScope()).getNode(JavaCore.PLUGIN_ID);
+	 	IEclipsePreferences defaultPreferences = DefaultScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 		for (Iterator iter = defaultOptionsMap.entrySet().iterator(); iter.hasNext();) {
 			Map.Entry entry = (Map.Entry) iter.next();
 			String optionName = (String) entry.getKey();
 			defaultPreferences.put(optionName, (String)entry.getValue());
 			optionNames.add(optionName);
 		}
+
+		// Initialize deprecated options
+		initializeDeprecatedOptions();
+	}
+
+	/**
+	 * @deprecated As using deprecated options
+	 */
+	private void initializeDeprecatedOptions() {
+		Map deprecatedOptions = JavaModelManager.getJavaModelManager().deprecatedOptions;
+		deprecatedOptions.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER,
+			new String[] {
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE
+			});
+		deprecatedOptions.put(DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION,
+			new String[] {
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER
+			});
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaElement.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaElement.java
index dd1afbf..de9a9d0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,10 +14,13 @@ import java.io.BufferedInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.net.JarURLConnection;
 import java.net.MalformedURLException;
 import java.net.ProtocolException;
 import java.net.SocketException;
+import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.UnknownHostException;
@@ -732,6 +735,27 @@ public abstract class JavaElement extends PlatformObject implements IJavaElement
 		try {
 			URL docUrl = new URL(docUrlValue);
 			URLConnection connection = docUrl.openConnection();
+			Class[] parameterTypes = new Class[]{int.class};
+			Integer timeoutVal = new Integer(10000);
+			// set the connect and read timeouts using reflection since these methods are not available in java 1.4
+			Class URLClass = connection.getClass();
+			try {
+				Method connectTimeoutMethod = URLClass.getDeclaredMethod("setConnectTimeout", parameterTypes); //$NON-NLS-1$
+				Method readTimeoutMethod = URLClass.getDeclaredMethod("setReadTimeout", parameterTypes); //$NON-NLS-1$
+				connectTimeoutMethod.invoke(connection, new Object[]{timeoutVal});
+				readTimeoutMethod.invoke(connection, new Object[]{timeoutVal});
+			} catch (SecurityException e) {
+				// ignore
+			} catch (IllegalArgumentException e) {
+				// ignore
+			} catch (NoSuchMethodException e) {
+				// ignore
+			} catch (IllegalAccessException e) {
+				// ignore
+			} catch (InvocationTargetException e) {
+				// ignore
+			}
+			
 			if (connection instanceof JarURLConnection) {
 				connection2 = (JarURLConnection) connection;
 				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=156307
@@ -780,6 +804,8 @@ public abstract class JavaElement extends PlatformObject implements IJavaElement
 					return new String(contents);
 				}
 			}
+		} catch (SocketTimeoutException e) {
+			throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.CANNOT_RETRIEVE_ATTACHED_JAVADOC_TIMEOUT, this));
 		} catch (MalformedURLException e) {
 			throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.CANNOT_RETRIEVE_ATTACHED_JAVADOC, this));
 		} catch (FileNotFoundException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java
index 1a2a73d..904478c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import java.net.URI;
 import java.text.MessageFormat;
 import java.util.*;
 import java.util.Map.Entry;
+import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -32,7 +33,6 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.preferences.DefaultScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IPreferencesService;
-import org.eclipse.core.runtime.preferences.IScopeContext;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
 import org.eclipse.jdt.core.*;
@@ -82,6 +82,9 @@ import org.xml.sax.SAXException;
  */
 public class JavaModelManager implements ISaveParticipant, IContentTypeChangeListener {
 
+	private static final String NON_CHAINING_JARS_CACHE = "nonChainingJarsCache"; //$NON-NLS-1$
+	private static final String INVALID_ARCHIVES_CACHE = "invalidArchivesCache";  //$NON-NLS-1$
+
 	/**
 	 * Define a zip cache object.
 	 */
@@ -267,10 +270,15 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 
 	public final static ICompilationUnit[] NO_WORKING_COPY = new ICompilationUnit[0];
 
-	// Preferences
+	// Options
+	private final static int UNKNOWN_OPTION = 0;
+	private final static int DEPRECATED_OPTION = 1;
+	private final static int VALID_OPTION = 2;
 	HashSet optionNames = new HashSet(20);
+	Map deprecatedOptions = new HashMap();
 	Hashtable optionsCache;
 
+	// Preferences
 	public final IEclipsePreferences[] preferencesLookup = new IEclipsePreferences[2];
 	static final int PREF_INSTANCE = 0;
 	static final int PREF_DEFAULT = 1;
@@ -997,9 +1005,8 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 			JavaProjectElementInfo projectInfo = (JavaProjectElementInfo) getJavaModelManager().getInfo(project);
 			ProjectCache projectCache = projectInfo == null ? null : projectInfo.projectCache;
 			HashtableOfArrayToObject allPkgFragmentsCache = projectCache == null ? null : projectCache.allPkgFragmentsCache;
-			IClasspathEntry[] entries =
-				org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourcePath.lastSegment())
-					? project.getRawClasspath() // JAVA file can only live inside SRC folder (on the raw path)
+			boolean isJavaLike = org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourcePath.lastSegment());
+			IClasspathEntry[] entries = isJavaLike ? project.getRawClasspath() // JAVA file can only live inside SRC folder (on the raw path)
 					: ((JavaProject)project).getResolvedClasspath();
 
 			int length	= entries.length;
@@ -1011,6 +1018,8 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 					if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) continue;
 					IPath rootPath = entry.getPath();
 					if (rootPath.equals(resourcePath)) {
+						if (isJavaLike) 
+							return null;
 						return project.getPackageFragmentRoot(resource);
 					} else if (rootPath.isPrefixOf(resourcePath)) {
 						// allow creation of package fragment if it contains a .java file that is included
@@ -1170,8 +1179,8 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		}
 
 		public synchronized ClasspathChange resetResolvedClasspath() {
-			// clear non-chaining jars cache
-			JavaModelManager.getJavaModelManager().resetNonChainingJarsCache();
+			// clear non-chaining jars cache and invalid jars cache
+			JavaModelManager.getJavaModelManager().resetClasspathListCache();
 			
 			// null out resolved information
 			return setResolvedClasspath(null, null, null, null, this.rawTimeStamp, true/*add classpath change*/);
@@ -1402,6 +1411,8 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 	public static boolean CP_RESOLVE_VERBOSE_ADVANCED = false;
 	public static boolean CP_RESOLVE_VERBOSE_FAILURE = false;
 	public static boolean ZIP_ACCESS_VERBOSE = false;
+	// temporary debug flag to track failures of bug 302850
+	public static boolean DEBUG_302850 = false;
 
 	/**
 	 * A cache of opened zip files per thread.
@@ -1415,6 +1426,11 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 	 * List of IPath of jars that are known to not contain a chaining (through MANIFEST.MF) to another library
 	 */
 	private Set nonChainingJars;
+	
+	/*
+	 * List of IPath of jars that are known to be invalid - such as not being a valid/known format
+	 */
+	private Set invalidArchives;
 
 	/**
 	 * Update the classpath variable cache
@@ -1513,7 +1529,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		}
 		public void removed(IEclipsePreferences.NodeChangeEvent event) {
 			if (event.getChild() == JavaModelManager.this.preferencesLookup[PREF_INSTANCE]) {
-				JavaModelManager.this.preferencesLookup[PREF_INSTANCE] = ((IScopeContext) new InstanceScope()).getNode(JavaCore.PLUGIN_ID);
+				JavaModelManager.this.preferencesLookup[PREF_INSTANCE] = InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 				JavaModelManager.this.preferencesLookup[PREF_INSTANCE].addPreferenceChangeListener(new EclipsePreferencesListener());
 			}
 		}
@@ -1524,7 +1540,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		}
 		public void removed(IEclipsePreferences.NodeChangeEvent event) {
 			if (event.getChild() == JavaModelManager.this.preferencesLookup[PREF_DEFAULT]) {
-				JavaModelManager.this.preferencesLookup[PREF_DEFAULT] = ((IScopeContext) new DefaultScope()).getNode(JavaCore.PLUGIN_ID);
+				JavaModelManager.this.preferencesLookup[PREF_DEFAULT] = DefaultScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 			}
 		}
 	};
@@ -1546,7 +1562,8 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		 */
 		if (Platform.isRunning()) {
 			this.indexManager = new IndexManager();
-			this.nonChainingJars = loadNonChainingJarsCache();
+			this.nonChainingJars = loadClasspathListCache(NON_CHAINING_JARS_CACHE);
+			this.invalidArchives = loadClasspathListCache(INVALID_ARCHIVES_CACHE);
 			String includeContainerReferencedLib = System.getProperty(RESOLVE_REFERENCED_LIBRARIES_FOR_CONTAINERS);
 			this.resolveReferencedLibrariesForContainers = TRUE.equalsIgnoreCase(includeContainerReferencedLib);
 		}
@@ -1564,6 +1581,16 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		if (this.nonChainingJars != null)
 			this.nonChainingJars.add(path);
 	}
+	
+	public void addInvalidArchive(IPath path) {
+		// unlikely to be null
+		if (this.invalidArchives == null) {
+			this.invalidArchives = Collections.synchronizedSet(new HashSet());
+		}
+		if(this.invalidArchives != null) {
+			this.invalidArchives.add(path);
+		}
+	}
 
 	/**
 	 * Starts caching ZipFiles.
@@ -2035,23 +2062,104 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		if (isDeprecatedOption(optionName)) {
 			return JavaCore.ERROR;
 		}
-		String propertyName = optionName;
-		if (this.optionNames.contains(propertyName)){
+		int optionLevel = getOptionLevel(optionName);
+		if (optionLevel != UNKNOWN_OPTION){
 			IPreferencesService service = Platform.getPreferencesService();
-			String value =  service.get(optionName, null, this.preferencesLookup);
+			String value = service.get(optionName, null, this.preferencesLookup);
+			if (value == null && optionLevel == DEPRECATED_OPTION) {
+				// May be a deprecated option, retrieve the new value in compatible options
+				String[] compatibleOptions = (String[]) this.deprecatedOptions.get(optionName);
+				value = service.get(compatibleOptions[0], null, this.preferencesLookup);
+			}
 			return value==null ? null : value.trim();
 		}
 		return null;
 	}
 
+	/**
+	 * Returns the value of the given option for the given Eclipse preferences.
+	 * If no value was already set, then inherits from the global options if specified.
+	 *
+	 * @param optionName The name of the option
+	 * @param inheritJavaCoreOptions Tells whether the value can be inherited from global JavaCore options
+	 * @param projectPreferences The eclipse preferences from which to get the value
+	 * @return The value of the option. May be <code>null</code>
+	 */
+	public String getOption(String optionName, boolean inheritJavaCoreOptions, IEclipsePreferences projectPreferences) {
+		// Return the option value depending on its level
+		switch (getOptionLevel(optionName)) {
+			case VALID_OPTION:
+				// Valid option, return the preference value
+				String javaCoreDefault = inheritJavaCoreOptions ? JavaCore.getOption(optionName) : null;
+				if (projectPreferences == null) return javaCoreDefault;
+				String value = projectPreferences.get(optionName, javaCoreDefault);
+				return value == null ? null : value.trim();
+			case DEPRECATED_OPTION:
+				// Return the deprecated option value if it was already set
+				String oldValue = projectPreferences.get(optionName, null);
+				if (oldValue != null) {
+					return oldValue.trim();
+				}
+				// Get the new compatible value
+				String[] compatibleOptions = (String[]) this.deprecatedOptions.get(optionName);
+				String newDefault = inheritJavaCoreOptions ? JavaCore.getOption(compatibleOptions[0]) : null;
+				String newValue = projectPreferences.get(compatibleOptions[0], newDefault);
+				return newValue == null ? null : newValue.trim();
+		}
+		return null;
+	}
+
+	/**
+	 * Returns whether an option name is known or not.
+	 * 
+	 * @param optionName The name of the option
+	 * @return <code>true</code> when the option name is either
+	 * {@link #VALID_OPTION valid} or {@link #DEPRECATED_OPTION deprecated},
+	 * <code>false</code> otherwise.
+	 */
+	public boolean knowsOption(String optionName) {
+		boolean knownOption = this.optionNames.contains(optionName);
+		if (!knownOption) {
+			knownOption = this.deprecatedOptions.get(optionName) != null;
+		}
+		return knownOption;
+	}
+
+	/**
+	 * Returns the level of the given option.
+	 * 
+	 * @param optionName The name of the option
+	 * @return The level of the option as an int which may have the following
+	 * values:
+	 * <ul>
+	 * <li>{@link #UNKNOWN_OPTION}: the given option is unknown</li>
+	 * <li>{@link #DEPRECATED_OPTION}: the given option is deprecated</li>
+	 * <li>{@link #VALID_OPTION}: the given option is valid</li>
+	 * </ul>
+	 */
+	public int getOptionLevel(String optionName) {
+		if (this.optionNames.contains(optionName)) {
+			return VALID_OPTION;
+		}
+		if (this.deprecatedOptions.get(optionName) != null) {
+			return DEPRECATED_OPTION;
+		}
+		return UNKNOWN_OPTION;
+	}
+
 	public Hashtable getOptions() {
 
 		// return cached options if already computed
 		Hashtable cachedOptions; // use a local variable to avoid race condition (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=256329 )
-		if ((cachedOptions = this.optionsCache) != null) return new Hashtable(cachedOptions);
-
+		if ((cachedOptions = this.optionsCache) != null) {
+			if (DEBUG_302850) checkTaskTags("Retrieving options from optionsCache", this.optionsCache); //$NON-NLS-1$
+			return new Hashtable(cachedOptions);
+		}
+		if (DEBUG_302850) System.out.println("optionsCache was null"); //$NON-NLS-1$
 		if (!Platform.isRunning()) {
-			return this.optionsCache = getDefaultOptionsNoInitialization();
+			this.optionsCache = getDefaultOptionsNoInitialization();
+			if (DEBUG_302850) checkTaskTags("Platform is not running", this.optionsCache); //$NON-NLS-1$
+			return new Hashtable(this.optionsCache);
 		}
 		// init
 		Hashtable options = new Hashtable(10);
@@ -2066,6 +2174,24 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 				options.put(propertyName, propertyValue);
 			}
 		}
+		if (DEBUG_302850) checkTaskTags("Options initialized from preferences", options); //$NON-NLS-1$
+
+		// set deprecated options using preferences service lookup
+		Iterator deprecatedEntries = this.deprecatedOptions.entrySet().iterator();
+		while (deprecatedEntries.hasNext()) {
+			Entry entry = (Entry) deprecatedEntries.next();
+			String propertyName = (String) entry.getKey();
+			String propertyValue = service.get(propertyName, null, this.preferencesLookup);
+			if (propertyValue != null) {
+				options.put(propertyName, propertyValue);
+				String[] compatibleOptions = (String[]) entry.getValue();
+				for (int co=0, length=compatibleOptions.length; co < length; co++) {
+					String compatibleOption = compatibleOptions[co];
+					if (!options.containsKey(compatibleOption))
+						options.put(compatibleOption, propertyValue);
+				}
+			}
+		}
 
 		// get encoding through resource plugin
 		options.put(JavaCore.CORE_ENCODING, JavaCore.getEncoding());
@@ -2074,13 +2200,30 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		addDeprecatedOptions(options);
 
 		Util.fixTaskTags(options);
+		if (DEBUG_302850) checkTaskTags("Retrieved options from preferences", options); //$NON-NLS-1$
 		// store built map in cache
 		this.optionsCache = new Hashtable(options);
+		if (DEBUG_302850) checkTaskTags("Stored optionsCache", this.optionsCache); //$NON-NLS-1$
 
 		// return built map
 		return options;
 	}
 
+	// debugging bug 302850:
+	private void checkTaskTags(String msg, Hashtable someOptions) {
+		System.out.println(msg);
+		Object taskTags = someOptions.get(JavaCore.COMPILER_TASK_TAGS);
+		System.out.println("	+ Task tags:           " + taskTags); //$NON-NLS-1$
+		if (taskTags == null || "".equals(taskTags)) { //$NON-NLS-1$
+			System.out.println("	- option names: "+this.optionNames); //$NON-NLS-1$
+			System.out.println("	- Call stack:"); //$NON-NLS-1$
+			StackTraceElement[] elements = new Exception().getStackTrace();
+			for (int i=0,n=elements.length; i<n; i++) {
+				System.out.println("		+ "+elements[i]); //$NON-NLS-1$
+			}
+		}
+	}
+
 	// Do not modify without modifying getDefaultOptions()
 	private Hashtable getDefaultOptionsNoInitialization() {
 		Map defaultOptionsMap = new CompilerOptions().getMap(); // compiler defaults
@@ -2326,7 +2469,8 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		IPath resolvedPath = getResolvedVariablePath(entry.getPath(), usePreviousSession);
 		if (resolvedPath == null)
 			return null;
-		resolvedPath = ClasspathEntry.resolveDotDot(resolvedPath);
+		// By passing a null reference path, we keep it relative to workspace root.
+		resolvedPath = ClasspathEntry.resolveDotDot(null, resolvedPath);
 
 		Object target = JavaModel.getTarget(resolvedPath, false);
 		if (target == null)
@@ -2475,6 +2619,14 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		return this.workspaceScope;
 	}
 
+	public void verifyArchiveContent(IPath path) throws CoreException {
+		if (isInvalidArchive(path)) {
+			throw new CoreException(new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Messages.status_IOException, new ZipException()));			
+		}
+		ZipFile file = getZipFile(path);
+		closeZipFile(file);
+	}
+	
 	/**
 	 * Returns the open ZipFile at the given path. If the ZipFile
 	 * does not yet exist, it is created, opened, and added to the cache
@@ -2488,6 +2640,9 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 	 */
 	public ZipFile getZipFile(IPath path) throws CoreException {
 
+		if (isInvalidArchive(path))
+			throw new CoreException(new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Messages.status_IOException, new ZipException()));
+		
 		ZipCache zipCache;
 		ZipFile zipFile;
 		if ((zipCache = (ZipCache)this.zipFiles.get()) != null
@@ -2521,6 +2676,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 			}
 			return zipFile;
 		} catch (IOException e) {
+			addInvalidArchive(path);
 			throw new CoreException(new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Messages.status_IOException, e));
 		}
 	}
@@ -2846,8 +3002,8 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 	public void initializePreferences() {
 
 		// Create lookups
-		this.preferencesLookup[PREF_INSTANCE] = ((IScopeContext) new InstanceScope()).getNode(JavaCore.PLUGIN_ID);
-		this.preferencesLookup[PREF_DEFAULT] = ((IScopeContext) new DefaultScope()).getNode(JavaCore.PLUGIN_ID);
+		this.preferencesLookup[PREF_INSTANCE] = InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
+		this.preferencesLookup[PREF_DEFAULT] = DefaultScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 
 		// Listen to instance preferences node removal from parent in order to refresh stored one
 		this.instanceNodeListener = new IEclipsePreferences.INodeChangeListener() {
@@ -2856,7 +3012,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 			}
 			public void removed(IEclipsePreferences.NodeChangeEvent event) {
 				if (event.getChild() == JavaModelManager.this.preferencesLookup[PREF_INSTANCE]) {
-					JavaModelManager.this.preferencesLookup[PREF_INSTANCE] = ((IScopeContext) new InstanceScope()).getNode(JavaCore.PLUGIN_ID);
+					JavaModelManager.this.preferencesLookup[PREF_INSTANCE] = InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 					JavaModelManager.this.preferencesLookup[PREF_INSTANCE].addPreferenceChangeListener(new EclipsePreferencesListener());
 				}
 			}
@@ -2871,7 +3027,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 			}
 			public void removed(IEclipsePreferences.NodeChangeEvent event) {
 				if (event.getChild() == JavaModelManager.this.preferencesLookup[PREF_DEFAULT]) {
-					JavaModelManager.this.preferencesLookup[PREF_DEFAULT] = ((IScopeContext) new DefaultScope()).getNode(JavaCore.PLUGIN_ID);
+					JavaModelManager.this.preferencesLookup[PREF_DEFAULT] = DefaultScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 				}
 			}
 		};
@@ -2924,6 +3080,10 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 	public boolean isNonChainingJar(IPath path) {
 		return this.nonChainingJars != null && this.nonChainingJars.contains(path);
 	}
+	
+	public boolean isInvalidArchive(IPath path) {
+		return this.invalidArchives != null && this.invalidArchives.contains(path);
+	}
 
 	public void setClasspathBeingResolved(IJavaProject project, boolean classpathIsResolved) {
 	    if (classpathIsResolved) {
@@ -2933,19 +3093,19 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 	    }
 	}
 	
-	private Set loadNonChainingJarsCache() {
-		Set nonChainingJarsCache = new HashSet();
-		File nonChainingJarsFile = getNonChainingJarsFile();
+	private Set loadClasspathListCache(String cacheName) {
+		Set pathCache = new HashSet();
+		File cacheFile = getClasspathListFile(cacheName);
 		DataInputStream in = null;
 		try {
-			in = new DataInputStream(new BufferedInputStream(new FileInputStream(nonChainingJarsFile)));
+			in = new DataInputStream(new BufferedInputStream(new FileInputStream(cacheFile)));
 			int size = in.readInt();
 			while (size-- > 0) {
 				String path = in.readUTF();
-				nonChainingJarsCache.add(Path.fromPortableString(path));
+				pathCache.add(Path.fromPortableString(path));
 			}
 		} catch (IOException e) {
-			if (nonChainingJarsFile.exists())
+			if (cacheFile.exists())
 				Util.log(e, "Unable to read non-chaining jar cache file"); //$NON-NLS-1$
 		} finally {
 			if (in != null) {
@@ -2956,11 +3116,11 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 				}
 			}
 		}
-		return Collections.synchronizedSet(nonChainingJarsCache);
+		return Collections.synchronizedSet(pathCache);
 	}
-
-	private File getNonChainingJarsFile() {
-		return JavaCore.getPlugin().getStateLocation().append("nonChainingJarsCache").toFile(); //$NON-NLS-1$
+	
+	private File getClasspathListFile(String fileName) {
+		return JavaCore.getPlugin().getStateLocation().append(fileName).toFile(); 
 	}
 	
 	private Set getNonChainingJarsCache() throws CoreException {
@@ -2987,7 +3147,16 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		this.nonChainingJars = Collections.synchronizedSet(result);
 		return this.nonChainingJars;
 	}
-
+	
+	private Set getClasspathListCache(String cacheName) throws CoreException {
+		if (cacheName == NON_CHAINING_JARS_CACHE) 
+			return getNonChainingJarsCache();
+		else if (cacheName == INVALID_ARCHIVES_CACHE)
+			return this.invalidArchives;
+		else 
+			return null;
+	}
+	
 	public void loadVariablesAndContainers() throws CoreException {
 		// backward compatibility, consider persistent property
 		QualifiedName qName = new QualifiedName(JavaCore.PLUGIN_ID, "variables"); //$NON-NLS-1$
@@ -3666,7 +3835,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 				}
 			}
 		}
-		resetNonChainingJarsCache();
+		resetClasspathListCache();
 	}
 
 	/*
@@ -3708,9 +3877,11 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		this.cache.resetJarTypeCache();
 	}
 	
-	public void resetNonChainingJarsCache() {
+	public void resetClasspathListCache() {
 		if (this.nonChainingJars != null) 
 			this.nonChainingJars.clear();
+		if (this.invalidArchives != null) 
+			this.invalidArchives.clear();
 	}
 
 	/*
@@ -3784,15 +3955,15 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		}
 	}
 
-	private void saveNonChainingJarsCache() throws CoreException {
-		File file = getNonChainingJarsFile();
+	private void saveClasspathListCache(String cacheName) throws CoreException {
+		File file = getClasspathListFile(cacheName);
 		DataOutputStream out = null;
 		try {
 			out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
-			Set nonChainingJarsCache = getNonChainingJarsCache();
-			synchronized (nonChainingJarsCache) {
-				out.writeInt(nonChainingJarsCache.size());
-				Iterator entries = nonChainingJarsCache.iterator();
+			Set pathCache = getClasspathListCache(cacheName);
+			synchronized (pathCache) {
+				out.writeInt(pathCache.size());
+				Iterator entries = pathCache.iterator();
 				while (entries.hasNext()) {
 					IPath path = (IPath) entries.next();
 					out.writeUTF(path.toPortableString());
@@ -3847,38 +4018,23 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		}
 
 		void save(ISaveContext context) throws IOException, JavaModelException {
-			IProject project = context.getProject();
-			if (project == null) { // save all projects if none specified (snapshot or full save)
-				saveProjects(getJavaModel().getJavaProjects());
-			}
-			else {
-				saveProjects(new IJavaProject[] {JavaCore.create(project)});
-			}
-
-			switch (context.getKind()) {
-				case ISaveContext.FULL_SAVE :
-					// TODO (eric) - investigate after 3.3 if variables should be saved for a SNAPSHOT
-				case ISaveContext.SNAPSHOT :
-					// remove variables that should not be saved
-					HashMap varsToSave = null;
-					Iterator iterator = JavaModelManager.this.variables.entrySet().iterator();
-					IEclipsePreferences defaultPreferences = getDefaultPreferences();
-					while (iterator.hasNext()) {
-						Map.Entry entry = (Map.Entry) iterator.next();
-						String varName = (String) entry.getKey();
-						if (defaultPreferences.get(CP_VARIABLE_PREFERENCES_PREFIX + varName, null) != null // don't save classpath variables from the default preferences as there is no delta if they are removed
-								|| CP_ENTRY_IGNORE_PATH.equals(entry.getValue())) {
-
-							if (varsToSave == null)
-								varsToSave = new HashMap(JavaModelManager.this.variables);
-							varsToSave.remove(varName);
-						}
-					}
-					saveVariables(varsToSave != null ? varsToSave : JavaModelManager.this.variables);
-					break;
-				default :
-					// do nothing
+			saveProjects(getJavaModel().getJavaProjects());
+			// remove variables that should not be saved
+			HashMap varsToSave = null;
+			Iterator iterator = JavaModelManager.this.variables.entrySet().iterator();
+			IEclipsePreferences defaultPreferences = getDefaultPreferences();
+			while (iterator.hasNext()) {
+				Map.Entry entry = (Map.Entry) iterator.next();
+				String varName = (String) entry.getKey();
+				if (defaultPreferences.get(CP_VARIABLE_PREFERENCES_PREFIX + varName, null) != null // don't save classpath variables from the default preferences as there is no delta if they are removed
+						|| CP_ENTRY_IGNORE_PATH.equals(entry.getValue())) {
+
+					if (varsToSave == null)
+						varsToSave = new HashMap(JavaModelManager.this.variables);
+					varsToSave.remove(varName);
+				}
 			}
+			saveVariables(varsToSave != null ? varsToSave : JavaModelManager.this.variables);
 		}
 
 		private void saveAccessRule(ClasspathAccessRule rule) throws IOException {
@@ -4071,8 +4227,9 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 
 		switch(context.getKind()) {
 			case ISaveContext.FULL_SAVE : {
-				// save non-chaining jar cache on snapshot/full save
-				saveNonChainingJarsCache();
+				// save non-chaining jar and invalid jar caches on full save
+				saveClasspathListCache(NON_CHAINING_JARS_CACHE);
+				saveClasspathListCache(INVALID_ARCHIVES_CACHE);
 	
 				// will need delta since this save (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38658)
 				context.needDelta();
@@ -4624,45 +4781,99 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		}
 	}
 
+	/**
+	 * Store the preferences value for the given option name.
+	 *
+	 * @param optionName The name of the option
+	 * @param optionValue The value of the option. If <code>null</code>, then
+	 * 	the option will be removed from the preferences instead.
+	 * @param eclipsePreferences The eclipse preferences to be updated
+	 * @return <code>true</code> if the preferences have been changed,
+	 * 	<code>false</code> otherwise.
+	 */
+	public boolean storePreference(String optionName, String optionValue, IEclipsePreferences eclipsePreferences) {
+		int optionLevel = this.getOptionLevel(optionName);
+		if (optionLevel == UNKNOWN_OPTION) return false; // unrecognized option
+		
+		// Store option value
+		switch (optionLevel) {
+			case JavaModelManager.VALID_OPTION:
+				if (optionValue == null) {
+					eclipsePreferences.remove(optionName);
+				} else {
+					eclipsePreferences.put(optionName, optionValue);
+				}
+				break;
+			case JavaModelManager.DEPRECATED_OPTION:
+				// Try to migrate deprecated option
+				eclipsePreferences.remove(optionName); // get rid off old preference
+				String[] compatibleOptions = (String[]) this.deprecatedOptions.get(optionName);
+				for (int co=0, length=compatibleOptions.length; co < length; co++) {
+					if (optionValue == null) {
+						eclipsePreferences.remove(compatibleOptions[co]);
+					} else {
+						eclipsePreferences.put(compatibleOptions[co], optionValue);
+					}
+				}
+				break;
+			default:
+				return false;
+		}
+		return true;
+	}
+
 	public void setOptions(Hashtable newOptions) {
+		
+		if (DEBUG_302850) {
+			System.out.println("Entering in JavaModelManager.setOptions():"); //$NON-NLS-1$
+			System.out.println(new CompilerOptions(newOptions).toString());
+			System.out.println("	- Call stack:"); //$NON-NLS-1$
+			StackTraceElement[] elements = new Exception().getStackTrace();
+			for (int i=0,n=elements.length; i<n; i++) {
+				System.out.println("		+ "+elements[i]); //$NON-NLS-1$
+			}
+		}
 
-		try {
 			Hashtable cachedValue = newOptions == null ? null : new Hashtable(newOptions);
 			IEclipsePreferences defaultPreferences = getDefaultPreferences();
 			IEclipsePreferences instancePreferences = getInstancePreferences();
 
 			if (newOptions == null){
-				instancePreferences.clear();
+				try {
+					instancePreferences.clear();
+				} catch(BackingStoreException e) {
+					// ignore
+				}
 			} else {
 				Enumeration keys = newOptions.keys();
 				while (keys.hasMoreElements()){
 					String key = (String)keys.nextElement();
-					if (!this.optionNames.contains(key)) continue; // unrecognized option
+					int optionLevel = getOptionLevel(key);
+					if (optionLevel == UNKNOWN_OPTION) continue; // unrecognized option
 					if (key.equals(JavaCore.CORE_ENCODING)) {
 						if (cachedValue != null) {
 							cachedValue.put(key, JavaCore.getEncoding());
 						}
 						continue; // skipped, contributed by resource prefs
 					}
-					String value = (String)newOptions.get(key);
+					String value = (String) newOptions.get(key);
 					String defaultValue = defaultPreferences.get(key, null);
+					// Store value in preferences
 					if (defaultValue != null && defaultValue.equals(value)) {
-						instancePreferences.remove(key);
-					} else {
-						instancePreferences.put(key, value);
+						value = null;
 					}
+					storePreference(key, value, instancePreferences);
+				}
+				try {
+					// persist options
+					instancePreferences.flush();
+				} catch(BackingStoreException e) {
+					// ignore
 				}
 			}
-
-			// persist options
-			instancePreferences.flush();
-
 			// update cache
 			Util.fixTaskTags(cachedValue);
 			this.optionsCache = cachedValue;
-		} catch (BackingStoreException e) {
-			// ignore
-		}
 	}
 
 	public void startup() throws CoreException {
@@ -4684,7 +4895,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 					JavaModelManager.this.optionsCache = null;
 				}
 			};
-			new InstanceScope().getNode(JavaCore.PLUGIN_ID).addPreferenceChangeListener(this.propertyListener);
+			InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID).addPreferenceChangeListener(this.propertyListener);
 			
 			// listen for encoding changes (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=255501 )
 			this.resourcesPropertyListener = new IEclipsePreferences.IPreferenceChangeListener() {
@@ -4695,7 +4906,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 				}
 			};
 			String resourcesPluginId = ResourcesPlugin.getPlugin().getBundle().getSymbolicName();
-			new InstanceScope().getNode(resourcesPluginId).addPreferenceChangeListener(this.resourcesPropertyListener);
+			InstanceScope.INSTANCE.getNode(resourcesPluginId).addPreferenceChangeListener(this.resourcesPropertyListener);
 
 			// Listen to content-type changes
 			 Platform.getContentTypeManager().addContentTypeChangeListener(this);
@@ -4767,7 +4978,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 	}
 
 	public void shutdown () {
-		IEclipsePreferences preferences = new InstanceScope().getNode(JavaCore.PLUGIN_ID);
+		IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 		try {
 			preferences.flush();
 		} catch (BackingStoreException e) {
@@ -4793,7 +5004,7 @@ public class JavaModelManager implements ISaveParticipant, IContentTypeChangeLis
 		this.preferencesLookup[PREF_INSTANCE].removePreferenceChangeListener(this.instancePreferencesListener);
 		this.preferencesLookup[PREF_INSTANCE] = null;
 		String resourcesPluginId = ResourcesPlugin.getPlugin().getBundle().getSymbolicName();
-		new InstanceScope().getNode(resourcesPluginId).removePreferenceChangeListener(this.resourcesPropertyListener);
+		InstanceScope.INSTANCE.getNode(resourcesPluginId).removePreferenceChangeListener(this.resourcesPropertyListener);
 
 		// wait for the initialization job to finish
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelStatus.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelStatus.java
index 04e2727..1a00353 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelStatus.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelStatus.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -344,7 +344,7 @@ public class JavaModelStatus extends Status implements IJavaModelStatus, IJavaMo
 
 				case CLASSPATH_CYCLE:
 					javaProject = (IJavaProject)this.elements[0];
-					return Messages.bind(Messages.classpath_cycle, javaProject.getElementName());
+					return Messages.bind(Messages.classpath_cycle, new String[] {javaProject.getElementName(), this.string});
 
 				case DISABLED_CP_EXCLUSION_PATTERNS:
 					javaProject = (IJavaProject)this.elements[0];
@@ -375,6 +375,18 @@ public class JavaModelStatus extends Status implements IJavaModelStatus, IJavaMo
 						return Messages.bind(Messages.status_cannot_retrieve_attached_javadoc, this.string, "");//$NON-NLS-1$
 					}
 					break;
+					
+				case CANNOT_RETRIEVE_ATTACHED_JAVADOC_TIMEOUT :
+					if (this.elements != null && this.elements.length == 1) {
+						if (this.string != null) {
+							return Messages.bind(Messages.status_timeout_javadoc, ((JavaElement)this.elements[0]).toStringWithAncestors(), this.string);
+						}
+						return Messages.bind(Messages.status_timeout_javadoc, ((JavaElement)this.elements[0]).toStringWithAncestors(), ""); //$NON-NLS-1$
+					}
+					if (this.string != null) {
+						return Messages.bind(Messages.status_timeout_javadoc, this.string, "");//$NON-NLS-1$
+					}
+					break;
 
 				case UNKNOWN_JAVADOC_FORMAT :
 					return Messages.bind(Messages.status_unknown_javadoc_format, ((JavaElement)this.elements[0]).toStringWithAncestors());
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java
index 781dc69..463af9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann <stephan at cs.tu-berlin.de> - inconsistent initialization of classpath container backed by external class folder, see https://bugs.eclipse.org/320618
  *******************************************************************************/
 package org.eclipse.jdt.internal.core;
 
@@ -109,7 +110,7 @@ public class JavaProject
 	/**
 	 * Name of file containing project classpath
 	 */
-	public static final String CLASSPATH_FILENAME = ".classpath";  //$NON-NLS-1$
+	public static final String CLASSPATH_FILENAME = IJavaProject.CLASSPATH_FILE_NAME;
 
 	/**
 	 * Value of the project's raw classpath if the .classpath file contains invalid entries.
@@ -371,7 +372,7 @@ public class JavaProject
 		int length = rscProjects.length;
 		JavaProject[] projects = new JavaProject[length];
 
-		HashSet cycleParticipants = new HashSet();
+		LinkedHashSet cycleParticipants = new LinkedHashSet();
 		HashSet traversed = new HashSet();
 
 		// compute cycle participants
@@ -405,9 +406,29 @@ public class JavaProject
 							throw new JavaModelException(e);
 						}
 					} else {
+						IJavaProject[] projectsInCycle;
+						String cycleString = "";	 //$NON-NLS-1$
+						if (cycleParticipants.isEmpty()) {
+							projectsInCycle = null;
+						} else {
+							projectsInCycle = new IJavaProject[cycleParticipants.size()];
+							Iterator it = cycleParticipants.iterator();
+							int k = 0;
+							while (it.hasNext()) {
+								//projectsInCycle[i++] = (IPath) it.next();
+								IResource member = workspaceRoot.findMember((IPath) it.next());
+								if (member != null && member.getType() == IResource.PROJECT){
+									projectsInCycle[k] = JavaCore.create((IProject)member);
+									if (projectsInCycle[k] != null) {
+										if (k != 0) cycleString += ", "; //$NON-NLS-1$
+										cycleString += projectsInCycle[k++].getElementName();
+									}
+								}
+							}
+						}
 						// create new marker
 						project.createClasspathProblemMarker(
-							new JavaModelStatus(IJavaModelStatusConstants.CLASSPATH_CYCLE, project));
+							new JavaModelStatus(IJavaModelStatusConstants.CLASSPATH_CYCLE, project, cycleString));
 					}
 				} else {
 					project.flushClasspathProblemMarkers(true, false);
@@ -1554,12 +1575,11 @@ public class JavaProject
 				token = null;
 				while (memento.hasMoreTokens()) {
 					token = memento.nextToken();
-					char firstChar = token.charAt(0);
-					if (firstChar != JEM_PACKAGEFRAGMENT && firstChar != JEM_COUNT) {
-						rootPath += token;
-					} else {
+					// https://bugs.eclipse.org/bugs/show_bug.cgi?id=331821
+					if (token == MementoTokenizer.PACKAGEFRAGMENT || token == MementoTokenizer.COUNT) {
 						break;
 					}
+					rootPath += token;
 				}
 				JavaElement root = (JavaElement)getPackageFragmentRoot(new Path(rootPath));
 				if (token != null && token.charAt(0) == JEM_PACKAGEFRAGMENT) {
@@ -1615,14 +1635,7 @@ public class JavaProject
 	 * @see org.eclipse.jdt.core.IJavaProject#getOption(String, boolean)
 	 */
 	public String getOption(String optionName, boolean inheritJavaCoreOptions) {
-		if (JavaModelManager.getJavaModelManager().optionNames.contains(optionName)){
-			IEclipsePreferences projectPreferences = getEclipsePreferences();
-			String javaCoreDefault = inheritJavaCoreOptions ? JavaCore.getOption(optionName) : null;
-			if (projectPreferences == null) return javaCoreDefault;
-			String value = projectPreferences.get(optionName, javaCoreDefault);
-			return value == null ? null : value.trim();
-		}
-		return null;
+		return JavaModelManager.getJavaModelManager().getOption(optionName, inheritJavaCoreOptions, getEclipsePreferences());
 	}
 
 	/**
@@ -1636,7 +1649,8 @@ public class JavaProject
 		// Get project specific options
 		JavaModelManager.PerProjectInfo perProjectInfo = null;
 		Hashtable projectOptions = null;
-		HashSet optionNames = JavaModelManager.getJavaModelManager().optionNames;
+		JavaModelManager javaModelManager = JavaModelManager.getJavaModelManager();
+		HashSet optionNames = javaModelManager.optionNames;
 		try {
 			perProjectInfo = getPerProjectInfo();
 			projectOptions = perProjectInfo.options;
@@ -1650,8 +1664,22 @@ public class JavaProject
 				for (int i = 0; i < propertyNames.length; i++){
 					String propertyName = propertyNames[i];
 					String value = projectPreferences.get(propertyName, null);
-					if (value != null && optionNames.contains(propertyName)){
-						projectOptions.put(propertyName, value.trim());
+					if (value != null) {
+						value = value.trim();
+						// Keep the option value, even if it's deprecated
+						// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=324987
+						projectOptions.put(propertyName, value);
+						if (!optionNames.contains(propertyName)) {
+							// try to migrate deprecated options
+							String[] compatibleOptions = (String[]) javaModelManager.deprecatedOptions.get(propertyName);
+							if (compatibleOptions != null) {
+								for (int co=0, length=compatibleOptions.length; co < length; co++) {
+									String compatibleOption = compatibleOptions[co];
+									if (!projectOptions.containsKey(compatibleOption))
+										projectOptions.put(compatibleOption, value);
+								}
+							}
+						}
 					}
 				}
 				// cache project options
@@ -1670,7 +1698,7 @@ public class JavaProject
 				Map.Entry entry = (Map.Entry) propertyNames.next();
 				String propertyName = (String) entry.getKey();
 				String propertyValue = (String) entry.getValue();
-				if (propertyValue != null && optionNames.contains(propertyName)){
+				if (propertyValue != null && javaModelManager.knowsOption(propertyName)){
 					options.put(propertyName, propertyValue.trim());
 				}
 			}
@@ -1725,7 +1753,7 @@ public class JavaProject
 		if (resource == null) {
 			// resource doesn't exist in workspace
 			if (path.getFileExtension() != null) {
-				if (!workspaceRoot.getProject(path.lastSegment()).exists()) {
+				if (!workspaceRoot.getProject(path.segment(0)).exists()) {
 					// assume it is an external ZIP archive
 					return getPackageFragmentRoot0(path);
 				} else {
@@ -2057,7 +2085,7 @@ public class JavaProject
 	 * @see IJavaProject
 	 */
 	public boolean hasClasspathCycle(IClasspathEntry[] preferredClasspath) {
-		HashSet cycleParticipants = new HashSet();
+		LinkedHashSet cycleParticipants = new LinkedHashSet();
 		HashMap preferredClasspaths = new HashMap(1);
 		preferredClasspaths.put(this, preferredClasspath);
 		updateCycleParticipants(new ArrayList(2), cycleParticipants, ResourcesPlugin.getWorkspace().getRoot(), new HashSet(2), preferredClasspaths);
@@ -2573,6 +2601,7 @@ public class JavaProject
 		JavaModelManager manager = JavaModelManager.getJavaModelManager();
 		ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager();
 		ResolvedClasspath result = new ResolvedClasspath();
+		Map knownDrives = new HashMap();
 
 		Map referencedEntriesMap = new HashMap();
 		List rawLibrariesPath = new ArrayList();
@@ -2582,7 +2611,7 @@ public class JavaProject
 			for (int index = 0; index < rawClasspath.length; index++) {
 				IClasspathEntry currentEntry = rawClasspath[index]; 
 				if (currentEntry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
-					rawLibrariesPath.add(ClasspathEntry.resolveDotDot(currentEntry.getPath()));
+					rawLibrariesPath.add(ClasspathEntry.resolveDotDot(getProject().getLocation(), currentEntry.getPath()));
 				}
 			}
 			if (referencedEntries != null) {
@@ -2633,11 +2662,11 @@ public class JavaProject
 								if (!rawLibrariesPath.contains(extraEntries[j].getPath())) {
 									// https://bugs.eclipse.org/bugs/show_bug.cgi?id=305037
 									// referenced entries for variable entries could also be persisted with extra attributes, so addAsChainedEntry = true
-									addToResult(rawEntry, extraEntries[j], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true);
+									addToResult(rawEntry, extraEntries[j], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true, knownDrives);
 								}
 							}
 						}
-						addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
+						addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
 					}
 					break;
 
@@ -2670,7 +2699,7 @@ public class JavaProject
 						
 						if (cEntry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
 							// resolve ".." in library path
-							cEntry = cEntry.resolvedDotDot();
+							cEntry = cEntry.resolvedDotDot(getProject().getLocation());
 							// https://bugs.eclipse.org/bugs/show_bug.cgi?id=313965
 							// Do not resolve if the system attribute is set to false	
 							if (resolveChainedLibraries
@@ -2680,33 +2709,33 @@ public class JavaProject
 								ClasspathEntry[] extraEntries = cEntry.resolvedChainedLibraries();
 								for (int k = 0, length2 = extraEntries.length; k < length2; k++) {
 									if (!rawLibrariesPath.contains(extraEntries[k].getPath())) {
-										addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
+										addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
 									}
 								}
 							}
 						}
-						addToResult(rawEntry, cEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
+						addToResult(rawEntry, cEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
 					}
 					break;
 
 				case IClasspathEntry.CPE_LIBRARY:
 					// resolve ".." in library path
-					resolvedEntry = ((ClasspathEntry) rawEntry).resolvedDotDot();
+					resolvedEntry = ((ClasspathEntry) rawEntry).resolvedDotDot(getProject().getLocation());
 					
 					if (resolveChainedLibraries && result.rawReverseMap.get(resolvedEntry.getPath()) == null) {
 						// resolve Class-Path: in manifest
 						ClasspathEntry[] extraEntries = ((ClasspathEntry) resolvedEntry).resolvedChainedLibraries();
 						for (int k = 0, length2 = extraEntries.length; k < length2; k++) {
 							if (!rawLibrariesPath.contains(extraEntries[k].getPath())) {
-								addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true);
+								addToResult(rawEntry, extraEntries[k], result, resolvedEntries, externalFoldersManager, referencedEntriesMap, true, knownDrives);
 							}
 						}
 					}
 
-					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
+					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
 					break;
 				default :
-					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false);
+					addToResult(rawEntry, resolvedEntry, result, resolvedEntries, externalFoldersManager, referencedEntriesMap, false, knownDrives);
 					break;
 			}
 		}
@@ -2717,7 +2746,7 @@ public class JavaProject
 
 	private void addToResult(IClasspathEntry rawEntry, IClasspathEntry resolvedEntry, ResolvedClasspath result,
 			LinkedHashSet resolvedEntries, ExternalFoldersManager externalFoldersManager,
-			Map oldChainedEntriesMap, boolean addAsChainedEntry) {
+			Map oldChainedEntriesMap, boolean addAsChainedEntry, Map knownDrives) {
 
 		IPath resolvedPath;
 		// If it's already been resolved, do not add to resolvedEntries
@@ -2736,7 +2765,13 @@ public class JavaProject
 			}
 		}
 		if (resolvedEntry.getEntryKind() == IClasspathEntry.CPE_LIBRARY && ExternalFoldersManager.isExternalFolderPath(resolvedPath)) {
-			externalFoldersManager.addFolder(resolvedPath); // no-op if not an external folder or if already registered
+			externalFoldersManager.addFolder(resolvedPath, true/*scheduleForCreation*/); // no-op if not an external folder or if already registered
+		}
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=336046
+		// The source attachment path could be external too and in which case, must be added.
+		IPath sourcePath = resolvedEntry.getSourceAttachmentPath();
+		if (sourcePath != null && driveExists(sourcePath, knownDrives) && ExternalFoldersManager.isExternalFolderPath(sourcePath)) {
+			externalFoldersManager.addFolder(sourcePath, true);
 		}
 	}
 
@@ -2756,6 +2791,26 @@ public class JavaProject
 	}
 	
 	/*
+	 * File#exists() takes lot of time for an unmapped drive. Hence, cache the info.
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=338649
+	 */
+	private boolean driveExists(IPath sourcePath, Map knownDrives) {	
+		String drive = sourcePath.getDevice();
+		if (drive == null) return true;
+		Boolean good = (Boolean)knownDrives.get(drive);
+		if (good == null) {
+			if (new File(drive).exists()) {
+				knownDrives.put(drive, Boolean.TRUE);
+				return true;
+			} else {
+				knownDrives.put(drive, Boolean.FALSE);
+				return false;
+			}
+		}
+		return good.booleanValue();
+	}
+	
+	/*
 	 * Resolve the given perProjectInfo's raw classpath and store the resolved classpath in the perProjectInfo.
 	 */
 	public void resolveClasspath(PerProjectInfo perProjectInfo, boolean usePreviousSession, boolean addClasspathChange) throws JavaModelException {
@@ -2871,20 +2926,17 @@ public class JavaProject
 	 * @see org.eclipse.jdt.core.IJavaProject#setOption(java.lang.String, java.lang.String)
 	 */
 	public void setOption(String optionName, String optionValue) {
-		if (!JavaModelManager.getJavaModelManager().optionNames.contains(optionName)) return; // unrecognized option
+		// Store option value
 		IEclipsePreferences projectPreferences = getEclipsePreferences();
-		if (optionValue == null) {
-			// remove preference
-			projectPreferences.remove(optionName);
-		} else {
-			projectPreferences.put(optionName, optionValue);
-		}
+		boolean modified = JavaModelManager.getJavaModelManager().storePreference(optionName, optionValue, projectPreferences);
 
-		// Dump changes
-		try {
-			projectPreferences.flush();
-		} catch (BackingStoreException e) {
-			// problem with pref store - quietly ignore
+		// Write changes
+		if (modified) {
+			try {
+				projectPreferences.flush();
+			} catch (BackingStoreException e) {
+				// problem with pref store - quietly ignore
+			}
 		}
 	}
 
@@ -2900,12 +2952,12 @@ public class JavaProject
 				projectPreferences.clear();
 			} else {
 				Iterator entries = newOptions.entrySet().iterator();
+				JavaModelManager javaModelManager = JavaModelManager.getJavaModelManager();
 				while (entries.hasNext()){
 					Map.Entry entry = (Map.Entry) entries.next();
 					String key = (String) entry.getKey();
-					if (!JavaModelManager.getJavaModelManager().optionNames.contains(key)) continue; // unrecognized option
-					// no filtering for encoding (custom encoding for project is allowed)
-					projectPreferences.put(key, (String) entry.getValue());
+					String value = (String) entry.getValue();
+					javaModelManager.storePreference(key, value, projectPreferences);
 				}
 
 				// reset to default all options not in new map
@@ -3094,7 +3146,7 @@ public class JavaProject
 	 */
 	public void updateCycleParticipants(
 			ArrayList prereqChain,
-			HashSet cycleParticipants,
+			LinkedHashSet cycleParticipants,
 			IWorkspaceRoot workspaceRoot,
 			HashSet traversed,
 			Map preferredClasspaths){
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
index 1f0c6d8..1d22b01 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavadocContents.java
@@ -13,7 +13,6 @@ package org.eclipse.jdt.internal.core;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJavaModelStatusConstants;
-import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
@@ -145,7 +144,7 @@ public class JavadocContents {
 			for (int i = 0; i < this.tempAnchorIndexesCount; i++) {
 				int anchorEndStart = this.tempAnchorIndexes[i];
 				
-				if (anchorEndStart != -1 && Util.prefixEquals(anchor, this.content, false, anchorEndStart)) {
+				if (anchorEndStart != -1 && CharOperation.prefixEquals(anchor, this.content, false, anchorEndStart)) {
 					
 					this.tempAnchorIndexes[i] = -1;
 					
@@ -165,7 +164,7 @@ public class JavadocContents {
 			
 			this.tempLastAnchorFoundIndex = anchorEndStart;
 			
-			if (Util.prefixEquals(anchor, this.content, false, anchorEndStart)) {
+			if (CharOperation.prefixEquals(anchor, this.content, false, anchorEndStart)) {
 				return computeChildRange(anchorEndStart, anchor, indexOfSectionBottom);
 			} else {
 				if (this.tempAnchorIndexes.length == this.tempAnchorIndexesCount) {
@@ -378,31 +377,19 @@ public class JavadocContents {
 		IType declaringType = this.type;
 		if (declaringType.isMember()) {
 			int depth = 0;
-			final String packageFragmentName = declaringType.getPackageFragment().getElementName();
 			// might need to remove a part of the signature corresponding to the synthetic argument
-			final IJavaProject javaProject = declaringType.getJavaProject();
-			char[][] typeNames = CharOperation.splitOn('.', typeQualifiedName.toCharArray());
-			if (!Flags.isStatic(declaringType.getFlags())) depth++;
-			StringBuffer typeName = new StringBuffer();
-			for (int i = 0, max = typeNames.length; i < max; i++) {
-				if (typeName.length() == 0) {
-					typeName.append(typeNames[i]);
-				} else {
-					typeName.append('.').append(typeNames[i]);
-				}
-				IType resolvedType = javaProject.findType(packageFragmentName, String.valueOf(typeName));
-				if (resolvedType != null && resolvedType.isMember() && !Flags.isStatic(resolvedType.getFlags())) depth++;
+			if (!Flags.isStatic(declaringType.getFlags())) {
+				depth++;
 			}
 			if (depth != 0) {
+				// depth is 1
 				int indexOfOpeningParen = anchor.indexOf('(');
 				if (indexOfOpeningParen == -1) return null;
 				int index = indexOfOpeningParen;
 				indexOfOpeningParen++;
-				for (int i = 0; i < depth; i++) {
-					int indexOfComma = anchor.indexOf(',', index);
-					if (indexOfComma != -1) {
-						index = indexOfComma + 2;
-					}
+				int indexOfComma = anchor.indexOf(',', index);
+				if (indexOfComma != -1) {
+					index = indexOfComma + 2;
 				}
 				anchor = anchor.substring(0, indexOfOpeningParen) + anchor.substring(index);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/LocalVariable.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/LocalVariable.java
index a0627a2..cc8bb58 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/LocalVariable.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/LocalVariable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ import org.eclipse.jdt.internal.compiler.ast.OperatorIds;
 import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference;
 import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
 import org.eclipse.jdt.internal.compiler.ast.UnaryExpression;
+import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
 import org.eclipse.jdt.internal.compiler.parser.RecoveryScanner;
 import org.eclipse.jdt.internal.core.util.MementoTokenizer;
 import org.eclipse.jdt.internal.core.util.Util;
@@ -34,11 +35,15 @@ import org.eclipse.jdt.internal.core.util.Util;
 
 public class LocalVariable extends SourceRefElement implements ILocalVariable {
 
+	public static final ILocalVariable[] NO_LOCAL_VARIABLES = new ILocalVariable[0];
+	
 	String name;
 	public int declarationSourceStart, declarationSourceEnd;
 	public int nameStart, nameEnd;
 	String typeSignature;
 	public IAnnotation[] annotations;
+	private int flags;
+	private boolean isParameter;
 
 	public LocalVariable(
 			JavaElement parent,
@@ -48,7 +53,9 @@ public class LocalVariable extends SourceRefElement implements ILocalVariable {
 			int nameStart,
 			int nameEnd,
 			String typeSignature,
-			org.eclipse.jdt.internal.compiler.ast.Annotation[] astAnnotations) {
+			org.eclipse.jdt.internal.compiler.ast.Annotation[] astAnnotations,
+			int flags,
+			boolean isParameter) {
 
 		super(parent);
 		this.name = name;
@@ -58,6 +65,8 @@ public class LocalVariable extends SourceRefElement implements ILocalVariable {
 		this.nameEnd = nameEnd;
 		this.typeSignature = typeSignature;
 		this.annotations = getAnnotations(astAnnotations);
+		this.flags = flags;
+		this.isParameter = isParameter;
 	}
 
 	protected void closing(Object info) {
@@ -243,6 +252,10 @@ public class LocalVariable extends SourceRefElement implements ILocalVariable {
 		buff.append(this.nameEnd);
 		buff.append(JEM_COUNT);
 		escapeMementoName(buff, this.typeSignature);
+		buff.append(JEM_COUNT);
+		buff.append(this.flags);
+		buff.append(JEM_COUNT);
+		buff.append(this.isParameter);
 		if (this.occurrenceCount > 1) {
 			buff.append(JEM_COUNT);
 			buff.append(this.occurrenceCount);
@@ -256,6 +269,14 @@ public class LocalVariable extends SourceRefElement implements ILocalVariable {
 	public IResource getCorrespondingResource() {
 		return null;
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 * @since 3.7
+	 */
+	public IMember getDeclaringMember() {
+		return (IMember) this.parent;
+	}
 
 	public String getElementName() {
 		return this.name;
@@ -265,7 +286,64 @@ public class LocalVariable extends SourceRefElement implements ILocalVariable {
 		return LOCAL_VARIABLE;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 * @since 3.7
+	 */
+	public int getFlags() {
+		if (this.flags == -1) {
+			SourceMapper mapper= getSourceMapper();
+			if (mapper != null) {
+				try {
+					// ensure the class file's buffer is open so that source ranges are computed
+					ClassFile classFile = (ClassFile)getClassFile();
+					if (classFile != null) {
+						classFile.getBuffer();
+						return mapper.getFlags(this);
+					}
+				} catch(JavaModelException e) {
+					// ignore
+				}
+			}
+			return 0;
+		}
+		return this.flags & ExtraCompilerModifiers.AccJustFlag;
+	}
+
+	/**
+	 * @see IMember#getClassFile()
+	 */
+	public IClassFile getClassFile() {
+		IJavaElement element = getParent();
+		while (element instanceof IMember) {
+			element= element.getParent();
+		}
+		if (element instanceof IClassFile) {
+			return (IClassFile) element;
+		}
+		return null;
+	}
+	/**
+	 * {@inheritDoc}
+	 * @since 3.7
+	 */
 	public ISourceRange getNameRange() {
+		if (this.nameEnd == -1) {
+			SourceMapper mapper= getSourceMapper();
+			if (mapper != null) {
+				try {
+					// ensure the class file's buffer is open so that source ranges are computed
+					ClassFile classFile = (ClassFile)getClassFile();
+					if (classFile != null) {
+						classFile.getBuffer();
+						return mapper.getNameRange(this);
+					}
+				} catch(JavaModelException e) {
+					// ignore
+				}
+			}
+			return SourceMapper.UNKNOWN_RANGE;
+		}
 		return new SourceRange(this.nameStart, this.nameEnd-this.nameStart+1);
 	}
 
@@ -300,12 +378,33 @@ public class LocalVariable extends SourceRefElement implements ILocalVariable {
 	}
 
 	/**
-	 * @see ISourceReference
+	 * {@inheritDoc}
+	 * @since 3.7
 	 */
-	public ISourceRange getSourceRange() {
+	public ISourceRange getSourceRange() throws JavaModelException {
+		if (this.declarationSourceEnd == -1) {
+			SourceMapper mapper= getSourceMapper();
+			if (mapper != null) {
+				// ensure the class file's buffer is open so that source ranges are computed
+				ClassFile classFile = (ClassFile)getClassFile();
+				if (classFile != null) {
+					classFile.getBuffer();
+					return mapper.getSourceRange(this);
+				}
+			}
+			return SourceMapper.UNKNOWN_RANGE;
+		}
 		return new SourceRange(this.declarationSourceStart, this.declarationSourceEnd-this.declarationSourceStart+1);
 	}
 
+	/**
+	 * {@inheritDoc}
+	 * @since 3.7
+	 */
+	public ITypeRoot getTypeRoot() {
+		return this.getDeclaringMember().getTypeRoot();
+	}
+
 	public String getTypeSignature() {
 		return this.typeSignature;
 	}
@@ -317,10 +416,18 @@ public class LocalVariable extends SourceRefElement implements ILocalVariable {
 	public int hashCode() {
 		return Util.combineHashCodes(this.parent.hashCode(), this.nameStart);
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 * @since 3.7
+	 */
+	public boolean isParameter() {
+		return this.isParameter;
+	}
 
 	public boolean isStructureKnown() throws JavaModelException {
-        return true;
-    }
+		return true;
+	}
 
 	protected void toStringInfo(int tab, StringBuffer buffer, Object info, boolean showResolvedInfo) {
 		buffer.append(tabString(tab));
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Member.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Member.java
index b4dd2fa..d17bf1f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Member.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Member.java
@@ -215,7 +215,13 @@ public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento,
 			memento.nextToken(); // JEM_COUNT
 			if (!memento.hasMoreTokens()) return this;
 			String typeSignature = memento.nextToken();
-			return new LocalVariable(this, varName, declarationStart, declarationEnd, nameStart, nameEnd, typeSignature, null);
+			memento.nextToken(); // JEM_COUNT
+			if (!memento.hasMoreTokens()) return this;
+			int flags = Integer.parseInt(memento.nextToken());
+			memento.nextToken(); // JEM_COUNT
+			if (!memento.hasMoreTokens()) return this;
+			boolean isParameter = Boolean.valueOf(memento.nextToken()).booleanValue();
+			return new LocalVariable(this, varName, declarationStart, declarationEnd, nameStart, nameEnd, typeSignature, null, flags, isParameter);
 		case JEM_TYPE_PARAMETER:
 			if (!memento.hasMoreTokens()) return this;
 			String typeParameterName = memento.nextToken();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java
index cb1e11c..59c69ce 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - contribution for bug 337868 - [compiler][model] incomplete support for package-info.java when using SearchableEnvironment
  *******************************************************************************/
 package org.eclipse.jdt.internal.core;
 
@@ -31,6 +32,7 @@ import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
 import org.eclipse.jdt.internal.compiler.env.AccessRestriction;
 import org.eclipse.jdt.internal.compiler.env.AccessRuleSet;
 import org.eclipse.jdt.internal.compiler.env.IBinaryType;
+import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
 import org.eclipse.jdt.internal.compiler.parser.ScannerHelper;
 import org.eclipse.jdt.internal.compiler.util.HashtableOfObjectToInt;
 import org.eclipse.jdt.internal.compiler.util.SuffixConstants;
@@ -1194,7 +1196,13 @@ public class NameLookup implements SuffixConstants {
 						return true; // don't continue with compilation unit
 					}
 				} else if (object instanceof IType[]) {
-					if (object == NO_TYPES) return true; // all types where deleted -> type is hidden
+					if (object == NO_TYPES) {
+						// all types where deleted -> type is hidden, OR it is the fake type package-info
+						String packageInfoName = String.valueOf(TypeConstants.PACKAGE_INFO_NAME);
+						if (packageInfoName.equals(name))
+							requestor.acceptType(pkg.getCompilationUnit(packageInfoName.concat(SUFFIX_STRING_java)).getType(name));
+						return true;
+					}
 					IType[] topLevelTypes = (IType[]) object;
 					for (int i = 0, length = topLevelTypes.length; i < length; i++) {
 						if (requestor.isCanceled())
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageDeclaration.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageDeclaration.java
index bc8708f..df8a752 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageDeclaration.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageDeclaration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.jdt.internal.core;
 
 import org.eclipse.jdt.core.*;
-import org.eclipse.jdt.core.IPackageDeclaration;
 
 /**
  * @see IPackageDeclaration
@@ -44,6 +43,13 @@ public int getElementType() {
 protected char getHandleMementoDelimiter() {
 	return JavaElement.JEM_PACKAGEDECLARATION;
 }
+/**
+ * @see IPackageDeclaration#getNameRange()
+ */
+public ISourceRange getNameRange() throws JavaModelException {
+	AnnotatableInfo info = (AnnotatableInfo) getElementInfo();
+	return info.getNameRange();
+}
 /*
  * @see JavaElement#getPrimaryElement(boolean)
  */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
index d98325e..913f3e7 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SearchableEnvironment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Herrmann - contribution for bug 337868 - [compiler][model] incomplete support for package-info.java when using SearchableEnvironment
  *******************************************************************************/
 package org.eclipse.jdt.internal.core;
 
@@ -22,6 +23,7 @@ import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
 import org.eclipse.jdt.internal.compiler.env.ISourceType;
 import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer;
+import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
 import org.eclipse.jdt.internal.core.search.BasicSearchEngine;
 import org.eclipse.jdt.internal.core.search.IRestrictedAccessConstructorRequestor;
 import org.eclipse.jdt.internal.core.search.IRestrictedAccessTypeRequestor;
@@ -134,8 +136,13 @@ public class SearchableEnvironment
 							sourceTypes[index++] = otherType;
 					}
 					return new NameEnvironmentAnswer(sourceTypes, answer.restriction);
-				} catch (JavaModelException npe) {
-					// fall back to using owner
+				} catch (JavaModelException jme) {
+					if (jme.isDoesNotExist() && String.valueOf(TypeConstants.PACKAGE_INFO_NAME).equals(typeName)) {
+						// in case of package-info.java the type doesn't exist in the model,
+						// but the CU may still help in order to fetch package level annotations.
+						return new NameEnvironmentAnswer((ICompilationUnit)answer.type.getParent(), answer.restriction);
+					}
+					// no usable answer
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SelectionRequestor.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SelectionRequestor.java
index 8e0f8be..4ccb14f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SelectionRequestor.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SelectionRequestor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.compiler.*;
 import org.eclipse.jdt.internal.codeassist.ISelectionRequestor;
 import org.eclipse.jdt.internal.codeassist.SelectionEngine;
+import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
@@ -33,6 +34,7 @@ import org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
@@ -450,7 +452,9 @@ public void acceptLocalVariable(LocalVariableBinding binding) {
 				local.sourceStart,
 				local.sourceEnd,
 				Util.typeSignature(local.type),
-				binding.declaration.annotations);
+				local.annotations,
+				local.modifiers,
+				local.getKind() == AbstractVariableDeclaration.PARAMETER);
 	}
 	if (localVar != null) {
 		addElement(localVar);
@@ -839,6 +843,31 @@ protected IJavaElement findLocalElement(int pos) {
 	}
 	return res;
 }
+
+/**
+ * This method returns an IMethod element from the given method and declaring type bindings. However,
+ * unlike {@link Util#findMethod(IType, char[], String[], boolean)} , this does not require an IType to get 
+ * the IMethod element.
+ * @param method the given method binding
+ * @param signatures the type signatures of the method arguments
+ * @param declaringClass the binding of the method's declaring class
+ * @return an IMethod corresponding to the method binding given, or null if none is found.
+ */
+public IJavaElement findMethodFromBinding(MethodBinding method, String[] signatures, ReferenceBinding declaringClass) {
+	IType foundType = this.resolveType(declaringClass.qualifiedPackageName(), declaringClass.qualifiedSourceName(), NameLookup.ACCEPT_CLASSES & NameLookup.ACCEPT_INTERFACES);
+	if (foundType != null) {
+		if (foundType instanceof BinaryType) {
+			try {
+				return Util.findMethod(foundType, method.selector, signatures, method.isConstructor());
+			} catch (JavaModelException e) {
+				return null;
+			}
+		} else {
+			return foundType.getMethod(new String(method.selector), signatures);
+		}
+	}
+	return null;
+}
 /**
  * Returns the resolved elements.
  */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMapper.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMapper.java
index 78eb287..b2302d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,66 @@ public class SourceMapper
 	extends ReferenceInfoAdapter
 	implements ISourceElementRequestor, SuffixConstants {
 
+	public static class LocalVariableElementKey {
+		String parent;
+		String name;
+		
+		public LocalVariableElementKey(IJavaElement method, String name) {
+			StringBuffer buffer = new StringBuffer();
+			buffer
+				.append(method.getParent().getHandleIdentifier())
+				.append('#')
+				.append(method.getElementName())
+				.append('(');
+			if (method.getElementType() == IJavaElement.METHOD) {
+				String[] parameterTypes = ((IMethod) method).getParameterTypes();
+				for (int i = 0, max = parameterTypes.length; i < max; i++) {
+					if (i > 0) {
+						buffer.append(',');
+					}
+					buffer.append(Signature.getSignatureSimpleName(parameterTypes[i]));
+				}
+			}
+			buffer.append(')');
+			this.parent = String.valueOf(buffer);
+			this.name = name;
+		}
+
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + ((this.name == null) ? 0 : this.name.hashCode());
+			result = prime * result + ((this.parent == null) ? 0 : this.parent.hashCode());
+			return result;
+		}
+
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			LocalVariableElementKey other = (LocalVariableElementKey) obj;
+			if (this.name == null) {
+				if (other.name != null)
+					return false;
+			} else if (!this.name.equals(other.name))
+				return false;
+			if (this.parent == null) {
+				if (other.parent != null)
+					return false;
+			} else if (!this.parent.equals(other.parent))
+				return false;
+			return true;
+		}
+		public String toString() {
+			StringBuffer buffer = new StringBuffer();
+			buffer.append('(').append(this.parent).append('.').append(this.name).append(')');
+			return String.valueOf(buffer);
+		}
+	}
+
 	public static boolean VERBOSE = false;
 	/**
 	 * Specifies the location of the package fragment roots within
@@ -119,6 +179,16 @@ public class SourceMapper
 	 */
 	protected HashMap categories;
 
+	/**
+	 * Table that contains all source ranges for local variables.
+	 * Keys are the special local variable elements, entries are <code>char[][]</code>.
+	 */
+	protected HashMap parametersRanges;
+	
+	/**
+	 * Set that contains all final local variables.
+	 */
+	protected HashSet finalParameters;
 
 	/**
 	 * The unknown source range {-1, 0}
@@ -209,6 +279,7 @@ public class SourceMapper
 		}
 		this.sourcePath = sourcePath;
 		this.sourceRanges = new HashMap();
+		this.parametersRanges = new HashMap();
 		this.parameterNames = new HashMap();
 		this.importsTable = new HashMap();
 		this.importsCounterTable = new HashMap();
@@ -220,6 +291,8 @@ public class SourceMapper
 	public void acceptImport(
 			int declarationStart,
 			int declarationEnd,
+			int nameStart,
+			int nameEnd,
 			char[][] tokens,
 			boolean onDemand,
 			int modifiers) {
@@ -286,6 +359,8 @@ public class SourceMapper
 	public void close() {
 		this.sourceRanges = null;
 		this.parameterNames = null;
+		this.parametersRanges = null;
+		this.finalParameters = null;
 	}
 
 	/**
@@ -749,6 +824,30 @@ public class SourceMapper
 							typeParameterInfo.nameSourceEnd - typeParameterInfo.nameSourceStart + 1));
 				}
 			}
+			// parameters infos
+			if (methodInfo.parameterInfos != null) {
+				for (int i = 0, length = methodInfo.parameterInfos.length; i < length; i++) {
+					ParameterInfo parameterInfo = methodInfo.parameterInfos[i];
+					LocalVariableElementKey key = new LocalVariableElementKey(method, new String(parameterInfo.name));
+					SourceRange[] allRanges = new SourceRange[] {
+						new SourceRange(
+							parameterInfo.declarationStart,
+							parameterInfo.declarationEnd - parameterInfo.declarationStart + 1),
+						new SourceRange(
+							parameterInfo.nameSourceStart,
+							parameterInfo.nameSourceEnd - parameterInfo.nameSourceStart + 1)
+					};
+					this.parametersRanges.put(
+						key,
+						allRanges);
+					if (parameterInfo.modifiers != 0) {
+						if (this.finalParameters == null) {
+							this.finalParameters = new HashSet();
+						}
+						this.finalParameters.add(key);
+					}
+				}
+			}
 
 			// categories
 			addCategories(method, methodInfo.categories);
@@ -916,6 +1015,7 @@ public class SourceMapper
 	public char[] findSource(String fullName) {
 		char[] source = null;
 		Object target = JavaModel.getTarget(this.sourcePath, true);
+		String charSet = null;
 		if (target instanceof IContainer) {
 			IResource res = ((IContainer)target).findMember(fullName);
 			if (res instanceof IFile) {
@@ -926,6 +1026,15 @@ public class SourceMapper
 				}
 			}
 		} else {
+			try {
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=303511
+				// For a resource inside the workspace, use the encoding set on the resource
+				if (target instanceof IFile)
+					charSet = ((IFile)target).getCharset();
+			} catch (CoreException e) {
+				// Ignore
+			}
+			
 			// try to get the entry
 			ZipEntry entry = null;
 			ZipFile zip = null;
@@ -935,7 +1044,7 @@ public class SourceMapper
 				entry = zip.getEntry(fullName);
 				if (entry != null) {
 					// now read the source code
-					source = readSource(entry, zip);
+					source = readSource(entry, zip, charSet);
 				}
 			} catch (CoreException e) {
 				return null;
@@ -947,6 +1056,16 @@ public class SourceMapper
 	}
 
 
+	public int getFlags(IJavaElement element) {
+		switch(element.getElementType()) {
+			case IJavaElement.LOCAL_VARIABLE :
+				LocalVariableElementKey key = new LocalVariableElementKey(element.getParent(), element.getElementName());
+				if (this.finalParameters != null && this.finalParameters.contains(key)) {
+					return Flags.AccFinal;
+				}
+		}
+		return 0;
+	}
 
 	/**
 	 * Returns the SourceRange for the name of the given element, or
@@ -978,6 +1097,15 @@ public class SourceMapper
 						element = method.getTypeParameter(element.getElementName());
 					}
 				}
+				break;
+			case IJavaElement.LOCAL_VARIABLE :
+				LocalVariableElementKey key = new LocalVariableElementKey(element.getParent(), element.getElementName());
+				SourceRange[] ranges = (SourceRange[]) this.parametersRanges.get(key);
+				if (ranges == null) {
+					return UNKNOWN_RANGE;
+				} else {
+					return ranges[1];
+				}
 		}
 		SourceRange[] ranges = (SourceRange[]) this.sourceRanges.get(element);
 		if (ranges == null) {
@@ -1038,6 +1166,15 @@ public class SourceMapper
 						element = method.getTypeParameter(element.getElementName());
 					}
 				}
+				break;
+			case IJavaElement.LOCAL_VARIABLE :
+				LocalVariableElementKey key = new LocalVariableElementKey(element.getParent(), element.getElementName());
+				SourceRange[] ranges = (SourceRange[]) this.parametersRanges.get(key);
+				if (ranges == null) {
+					return UNKNOWN_RANGE;
+				} else {
+					return ranges[0];
+				}
 		}
 		SourceRange[] ranges = (SourceRange[]) this.sourceRanges.get(element);
 		if (ranges == null) {
@@ -1273,11 +1410,11 @@ public class SourceMapper
 			this.typeDepth = -1;
 		}
 	}
-	private char[] readSource(ZipEntry entry, ZipFile zip) {
+	private char[] readSource(ZipEntry entry, ZipFile zip, String charSet) {
 		try {
 			byte[] bytes = Util.getZipEntryByteContent(entry, zip);
 			if (bytes != null) {
-				return Util.bytesToChar(bytes, this.encoding);
+				return Util.bytesToChar(bytes, charSet == null ? this.encoding : charSet);
 			}
 		} catch (IOException e) {
 			// ignore
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethod.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethod.java
index 7751b0d..00026ab 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethod.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethod.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,7 +134,12 @@ public ITypeParameter[] getTypeParameters() throws JavaModelException {
 	SourceMethodElementInfo info = (SourceMethodElementInfo) getElementInfo();
 	return info.typeParameters;
 }
-
+public ILocalVariable[] getParameters() throws JavaModelException {
+	ILocalVariable[] arguments = ((SourceMethodElementInfo) getElementInfo()).arguments;
+	if (arguments == null)
+		return LocalVariable.NO_LOCAL_VARIABLES;
+	return arguments;
+}
 /**
  * @see IMethod#getTypeParameterSignatures()
  * @since 3.0
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethodElementInfo.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethodElementInfo.java
index 3bb8811..a85cfaa 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethodElementInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMethodElementInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,8 @@ public abstract class SourceMethodElementInfo extends AnnotatableInfo implements
 	 * For example, Hashtable or java.util.Hashtable.
 	 */
 	protected char[][] exceptionTypes;
+	
+	protected ILocalVariable[] arguments;
 
 	/*
 	 * The type parameters of this source type. Empty if none.
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/TypeParameter.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/TypeParameter.java
index 0038563..dade34b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/TypeParameter.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/TypeParameter.java
@@ -63,7 +63,7 @@ public class TypeParameter extends SourceRefElement implements ITypeParameter {
 	}
 	
 	public IMember getDeclaringMember() {
-			return (IMember) getParent();
+		return (IMember) getParent();
 	}
 
 	public String getElementName() {
@@ -111,6 +111,14 @@ public class TypeParameter extends SourceRefElement implements ITypeParameter {
 	public IClassFile getClassFile() {
 		return ((JavaElement)getParent()).getClassFile();
 	}
+	
+	/**
+	 * {@inheritDoc}
+	 * @since 3.7
+	 */
+	public ITypeRoot getTypeRoot() {
+		return this.getDeclaringMember().getTypeRoot();
+	}
 
 	protected void toStringName(StringBuffer buffer) {
 		buffer.append('<');
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibrary.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibrary.java
index e13dc0d..bd94a5f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibrary.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibrary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,8 @@ import org.xml.sax.SAXException;
  */
 public class UserLibrary {
 
-	private static final String CURRENT_VERSION= "1"; //$NON-NLS-1$
+	private static final String VERSION_ONE = "1"; //$NON-NLS-1$
+	private static final String CURRENT_VERSION= "2"; //$NON-NLS-1$
 
 	private static final String TAG_VERSION= "version"; //$NON-NLS-1$
 	private static final String TAG_USERLIBRARY= "userlibrary"; //$NON-NLS-1$
@@ -112,13 +113,13 @@ public class UserLibrary {
 			ClasspathEntry cpEntry = (ClasspathEntry) entries[i];
 
 			HashMap archive = new HashMap();
-			archive.put(TAG_PATH, cpEntry.getPath().toString());
+			archive.put(TAG_PATH, cpEntry.getPath().toPortableString());
 			IPath sourceAttach= cpEntry.getSourceAttachmentPath();
 			if (sourceAttach != null)
-				archive.put(TAG_SOURCEATTACHMENT, sourceAttach);
+				archive.put(TAG_SOURCEATTACHMENT, sourceAttach.toPortableString());
 			IPath sourceAttachRoot= cpEntry.getSourceAttachmentRootPath();
 			if (sourceAttachRoot != null)
-				archive.put(TAG_SOURCEATTACHMENTROOT, sourceAttachRoot);
+				archive.put(TAG_SOURCEATTACHMENTROOT, sourceAttachRoot.toPortableString());
 
 			boolean hasExtraAttributes = cpEntry.extraAttributes != null && cpEntry.extraAttributes.length != 0;
 			boolean hasRestrictions = cpEntry.getAccessRuleSet() != null; // access rule set is null if no access rules
@@ -161,9 +162,7 @@ public class UserLibrary {
 		if (!cpElement.getNodeName().equalsIgnoreCase(TAG_USERLIBRARY)) {
 			throw new IOException(Messages.file_badFormat);
 		}
-		// String version= cpElement.getAttribute(TAG_VERSION);
-		// in case we update the format: add code to read older versions
-
+		String version= cpElement.getAttribute(TAG_VERSION);
 		boolean isSystem= Boolean.valueOf(cpElement.getAttribute(TAG_SYSTEMLIBRARY)).booleanValue();
 
 		NodeList list= cpElement.getChildNodes();
@@ -176,16 +175,30 @@ public class UserLibrary {
 			if (node.getNodeType() == Node.ELEMENT_NODE) {
 				Element element= (Element) node;
 				if (element.getNodeName().equals(TAG_ARCHIVE)) {
-					String path = element.getAttribute(TAG_PATH);
-					IPath sourceAttach= element.hasAttribute(TAG_SOURCEATTACHMENT) ? new Path(element.getAttribute(TAG_SOURCEATTACHMENT)) : null;
-					IPath sourceAttachRoot= element.hasAttribute(TAG_SOURCEATTACHMENTROOT) ? new Path(element.getAttribute(TAG_SOURCEATTACHMENTROOT)) : null;
+					String pathString = element.getAttribute(TAG_PATH);
+					String sourceAttachString = element.hasAttribute(TAG_SOURCEATTACHMENT) ? element.getAttribute(TAG_SOURCEATTACHMENT) : null;
+					String sourceAttachRootString = element.hasAttribute(TAG_SOURCEATTACHMENTROOT) ? element.getAttribute(TAG_SOURCEATTACHMENTROOT) : null;
+					IPath entryPath = null; 
+					IPath sourceAttachPath = null;
+					IPath sourceAttachRootPath = null;
+					if (version.equals(VERSION_ONE)) {
+						entryPath = Path.fromOSString(pathString);
+						if (sourceAttachString != null) sourceAttachPath = Path.fromOSString(sourceAttachString);
+						if (sourceAttachRootString != null) sourceAttachRootPath = Path.fromOSString(sourceAttachRootString);
+					}
+					else {
+						entryPath = Path.fromPortableString(pathString);
+						if (sourceAttachString != null) sourceAttachPath = Path.fromPortableString(sourceAttachString);
+						if (sourceAttachRootString != null) sourceAttachRootPath = Path.fromPortableString(sourceAttachRootString);
+					}
+
 					NodeList children = element.getElementsByTagName("*"); //$NON-NLS-1$
 					boolean[] foundChildren = new boolean[children.getLength()];
 					NodeList attributeList = ClasspathEntry.getChildAttributes(ClasspathEntry.TAG_ATTRIBUTES, children, foundChildren);
 					IClasspathAttribute[] extraAttributes = ClasspathEntry.decodeExtraAttributes(attributeList);
 					attributeList = ClasspathEntry.getChildAttributes(ClasspathEntry.TAG_ACCESS_RULES, children, foundChildren);
 					IAccessRule[] accessRules = ClasspathEntry.decodeAccessRules(attributeList);
-					IClasspathEntry entry = JavaCore.newLibraryEntry(new Path(path), sourceAttach, sourceAttachRoot, accessRules, extraAttributes, false/*not exported*/);
+					IClasspathEntry entry = JavaCore.newLibraryEntry(entryPath, sourceAttachPath, sourceAttachRootPath, accessRules, extraAttributes, false/*not exported*/);
 					res.add(entry);
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibraryManager.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibraryManager.java
index 36f58ca..bb0ec08 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibraryManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibraryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,11 @@ public class UserLibraryManager {
 						instancePreferences.remove(propertyName);
 						preferencesNeedFlush = true;
 						continue;
+					} catch (ClasspathEntry.AssertionFailedException e) {
+						Util.log(e, "Exception while initializing user library " + libName); //$NON-NLS-1$
+						instancePreferences.remove(propertyName);
+						preferencesNeedFlush = true;
+						continue;
 					}
 					this.userLibraries.put(libName, library);
 				}
@@ -148,7 +153,10 @@ public class UserLibraryManager {
 			Util.log(e, "Exception while decoding user library '"+ libName +"'."); //$NON-NLS-1$ //$NON-NLS-2$
 		} catch (JavaModelException e) {
 			Util.log(e, "Exception while setting user library '"+ libName +"'."); //$NON-NLS-1$ //$NON-NLS-2$
+		} catch (ClasspathEntry.AssertionFailedException ase) {
+			Util.log(ase, "Exception while decoding user library '"+ libName +"'."); //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		
 	}
 
 	public void removeUserLibrary(String libName)  {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java
index d050b57..d1325c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/IncrementalImageBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -229,8 +229,16 @@ protected void addDependentsOf(IPath path, boolean isStructuralChange, StringSet
 	if (isStructuralChange) {
 		String last = path.lastSegment();
 		if (last.length() == TypeConstants.PACKAGE_INFO_NAME.length)
-			if (CharOperation.equals(last.toCharArray(), TypeConstants.PACKAGE_INFO_NAME))
+			if (CharOperation.equals(last.toCharArray(), TypeConstants.PACKAGE_INFO_NAME)) {
 				path = path.removeLastSegments(1); // the package-info file has changed so blame the package itself
+				/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=323785, in the case of default package,
+				   there is no need to blame the package itself as there can be no annotations or documentation
+				   comment tags in the package-info file that can influence the rest of the package. Just bail out
+				   so we don't touch null objects below.
+				 */
+				if (path.isEmpty())
+					return;
+			}
 	}
 
 	if (isStructuralChange && !this.hasStructuralChanges) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java
index b32f44c..a97dc6d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -716,7 +716,7 @@ private boolean isWorthBuilding() throws CoreException {
  * needs to propagate structural changes to the other projects in the cycle.
  */
 void mustPropagateStructuralChanges() {
-	HashSet cycleParticipants = new HashSet(3);
+	LinkedHashSet cycleParticipants = new LinkedHashSet(3);
 	this.javaProject.updateCycleParticipants(new ArrayList(), cycleParticipants, this.workspaceRoot, new HashSet(3), null);
 	IPath currentPath = this.javaProject.getPath();
 	Iterator i= cycleParticipants.iterator();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java
index ec76a27..682073d 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/State.java
@@ -44,7 +44,7 @@ private long previousStructuralBuildTime;
 private StringSet structurallyChangedTypes;
 public static int MaxStructurallyChangedTypes = 100; // keep track of ? structurally changed types, otherwise consider all to be changed
 
-public static final byte VERSION = 0x0018; // fix for 291472
+public static final byte VERSION = 0x0019; // fix for 325755
 
 static final byte SOURCE_FOLDER = 1;
 static final byte BINARY_FOLDER = 2;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBuilder.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBuilder.java
index b516c02..03a1abc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/HierarchyBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -167,7 +167,9 @@ public abstract class HierarchyBuilder {
 				break;
 			case TypeDeclaration.INTERFACE_DECL :
 			case TypeDeclaration.ANNOTATION_TYPE_DECL :
-				this.hierarchy.addInterface(typeHandle);
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=329663
+				if (this.hierarchy.typeToSuperInterfaces.get(typeHandle) == null)
+					this.hierarchy.addInterface(typeHandle);
 				break;
 		}
 		if (superinterfaceHandles == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java
index 1688730..1bfdf9a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -960,11 +960,11 @@ private boolean isAffectedByPackageFragmentRoot(IJavaElementDelta delta, IJavaEl
 					}
 				}
 			}
-			if ((flags & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) > 0 || (flags & IJavaElementDelta.F_CONTENT) > 0) {
+			if ((flags & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) > 0 || (flags & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) > 0) {
 				// 1. removed from classpath - if it contains packages we are interested in
 				// the the type hierarchy has changed
 				// 2. content of a jar changed - if it contains packages we are interested in
-				// the the type hierarchy has changed
+				// then the type hierarchy has changed
 				IJavaElement[] pkgs = this.packageRegion.getElements();
 				for (int i = 0; i < pkgs.length; i++) {
 					if (pkgs[i].getParent().equals(element)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java
index 19d9979..c7d7cdd 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/jdom/SimpleDOMBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ public void acceptProblem(CategorizedProblem problem) {
 	// nothing to do
 }
 
-public void acceptImport(int declarationStart, int declarationEnd, char[][] tokens, boolean onDemand, int modifiers) {
+public void acceptImport(int declarationStart, int declarationEnd, int nameStart, int nameEnd, char[][] tokens, boolean onDemand, int modifiers) {
 	int[] sourceRange = {declarationStart, declarationEnd};
 	String importName = new String(CharOperation.concatWith(tokens, '.'));
 	/** name is set to contain the '*' */
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyParser.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyParser.java
index a582f06..124adaa 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/BindingKeyParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -445,6 +445,8 @@ public class BindingKeyParser {
 	private boolean hasTypeName = true;
 
 	private boolean isMalformed;
+	
+	private boolean isParsingThrownExceptions = false;	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=336451
 
 	public BindingKeyParser(BindingKeyParser parser) {
 		this(""); //$NON-NLS-1$
@@ -652,7 +654,7 @@ public class BindingKeyParser {
 					malformedKey();
 					return;
 			}
-		} else if (this.scanner.isAtTypeVariableStart()) {
+		} else if (!this.isParsingThrownExceptions && this.scanner.isAtTypeVariableStart()) {
 			parseTypeVariable();
 		} else if (this.scanner.isAtWildcardStart()) {
 			parseWildcard();
@@ -731,6 +733,9 @@ public class BindingKeyParser {
 		if (!this.scanner.isAtMemberTypeStart() || this.scanner.nextToken() != Scanner.TYPE)
 			return;
 		char[] typeName = this.scanner.getTokenSource();
+		// Might not actually be an inner type but came here as a consequence of '$' being present in type name
+		if (typeName.length == 0)
+			return;
 		if (Character.isDigit(typeName[0])) {
 			// anonymous or local type
 			int nextToken = Scanner.TYPE;
@@ -839,6 +844,7 @@ public class BindingKeyParser {
 		while (this.scanner.isAtThrownStart() && !this.isMalformed) {
 			this.scanner.skipThrownStart();
 			BindingKeyParser parser = newParser();
+			parser.isParsingThrownExceptions = true;
 			parser.parse();
 			consumeParser(parser);
 			consumeException();
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Disassembler.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Disassembler.java
index e4df0b0..c54fd73 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Disassembler.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Disassembler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -546,11 +546,25 @@ public class Disassembler extends ClassFileBytesDisassembler {
 				IRuntimeInvisibleParameterAnnotationsAttribute attribute = (IRuntimeInvisibleParameterAnnotationsAttribute) runtimeInvisibleParameterAnnotationsAttribute;
 				invisibleParameterAnnotations = attribute.getParameterAnnotations();
 				length = invisibleParameterAnnotations.length;
+				if (length > 0) {
+					int parameterNamesLength = parameterNames.length;
+					if (length < parameterNamesLength) {
+						System.arraycopy(invisibleParameterAnnotations, 0, (invisibleParameterAnnotations = new IParameterAnnotation[parameterNamesLength]), 1, length);
+						length = parameterNamesLength;
+					}
+				}
 			}
 			if (runtimeVisibleParameterAnnotationsAttribute != null) {
 				IRuntimeVisibleParameterAnnotationsAttribute attribute = (IRuntimeVisibleParameterAnnotationsAttribute) runtimeVisibleParameterAnnotationsAttribute;
 				visibleParameterAnnotations = attribute.getParameterAnnotations();
 				length = visibleParameterAnnotations.length;
+				if (length > 0) {
+					int parameterNamesLength = parameterNames.length;
+					if (length < parameterNamesLength) {
+						System.arraycopy(visibleParameterAnnotations, 0, (visibleParameterAnnotations = new IParameterAnnotation[parameterNamesLength]), 1, length);
+						length = parameterNamesLength;
+					}
+				}
 			}
 			int insertionPosition = CharOperation.indexOf('(', methodHeader) + 1;
 			int start = 0;
@@ -561,15 +575,15 @@ public class Disassembler extends ClassFileBytesDisassembler {
 					stringBuffer.append(' ');
 				}
 				int stringBufferSize = stringBuffer.length();
-				if (runtimeVisibleParameterAnnotationsAttribute != null) {
-					disassembleAsModifier((IRuntimeVisibleParameterAnnotationsAttribute) runtimeVisibleParameterAnnotationsAttribute, stringBuffer, i, lineSeparator, tabNumber, mode);
+				if (visibleParameterAnnotations != null) {
+					disassembleAsModifier(visibleParameterAnnotations, stringBuffer, i, lineSeparator, tabNumber, mode);
 				}
-				if (runtimeInvisibleParameterAnnotationsAttribute != null) {
+				if (invisibleParameterAnnotations != null) {
 					if (stringBuffer.length() != stringBufferSize) {
 						stringBuffer.append(' ');
 						stringBufferSize = stringBuffer.length();
 					}
-					disassembleAsModifier((IRuntimeInvisibleParameterAnnotationsAttribute) runtimeInvisibleParameterAnnotationsAttribute, stringBuffer, i, lineSeparator, tabNumber, mode);
+					disassembleAsModifier(invisibleParameterAnnotations, stringBuffer, i, lineSeparator, tabNumber, mode);
 				}
 				if (i == 0 && stringBuffer.length() != stringBufferSize) {
 					stringBuffer.append(' ');
@@ -1862,21 +1876,14 @@ public class Disassembler extends ClassFileBytesDisassembler {
 		}
 	}
 
-	private void disassembleAsModifier(IRuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute, StringBuffer buffer, int index, String lineSeparator, int tabNumber, int mode) {
-		IParameterAnnotation[] parameterAnnotations = runtimeInvisibleParameterAnnotationsAttribute.getParameterAnnotations();
-		if (parameterAnnotations.length > index) {
-			disassembleAsModifier(parameterAnnotations[index], buffer, lineSeparator, tabNumber + 1, mode);
-		}
-	}
-
-	private void disassembleAsModifier(IRuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute, StringBuffer buffer, int index, String lineSeparator, int tabNumber, int mode) {
-		IParameterAnnotation[] parameterAnnotations = runtimeVisibleParameterAnnotationsAttribute.getParameterAnnotations();
+	private void disassembleAsModifier(IParameterAnnotation[] parameterAnnotations, StringBuffer buffer, int index, String lineSeparator, int tabNumber, int mode) {
 		if (parameterAnnotations.length > index) {
 			disassembleAsModifier(parameterAnnotations[index], buffer, lineSeparator, tabNumber + 1, mode);
 		}
 	}
 
 	private void disassembleAsModifier(IParameterAnnotation parameterAnnotation, StringBuffer buffer, String lineSeparator, int tabNumber, int mode) {
+		if (parameterAnnotation == null) return;
 		IAnnotation[] annotations = parameterAnnotation.getAnnotations();
 		for (int i = 0, max = annotations.length; i < max; i++) {
 			if (i > 0) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/HandleFactory.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/HandleFactory.java
index 9087c13..c77b9d0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/HandleFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/HandleFactory.java
@@ -204,7 +204,8 @@ public class HandleFactory {
 					// inside field or initializer, must find proper one
 					TypeDeclaration type = methodScope.referenceType();
 					int occurenceCount = 1;
-					for (int i = 0, length = type.fields.length; i < length; i++) {
+					int length = type.fields == null ? 0 : type.fields.length;
+					for (int i = 0; i < length; i++) {
 						FieldDeclaration field = type.fields[i];
 						if (field.declarationSourceStart <= elementPosition && elementPosition <= field.declarationSourceEnd) {
 							switch (field.getKind()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/KeyToSignature.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/KeyToSignature.java
index c29a583..613e544 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/KeyToSignature.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/KeyToSignature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -234,8 +234,15 @@ public class KeyToSignature extends BindingKeyParser {
 	public void consumeSecondaryType(char[] simpleTypeName) {
 		this.signature.append('~');
 		this.mainTypeStart = this.signature.lastIndexOf(".") + 1; //$NON-NLS-1$
-		if (this.mainTypeStart == 0)
-			this.mainTypeStart = 1; // default package
+		if (this.mainTypeStart == 0) {
+			this.mainTypeStart = 1; // default package (1 for the 'L')
+			int i = 0;
+			// we need to preserve the array if needed
+			while (this.signature.charAt(i) == Signature.C_ARRAY) {
+				this.mainTypeStart ++;
+				i++;
+			}
+		}
 		this.mainTypeEnd = this.signature.length();
 		this.signature.append(simpleTypeName);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/MementoTokenizer.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/MementoTokenizer.java
index 5e42c65..86f96f2 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/MementoTokenizer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/MementoTokenizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,21 +13,21 @@ package org.eclipse.jdt.internal.core.util;
 import org.eclipse.jdt.internal.core.JavaElement;
 
 public class MementoTokenizer {
-	private static final String COUNT = Character.toString(JavaElement.JEM_COUNT);
-	private static final String JAVAPROJECT = Character.toString(JavaElement.JEM_JAVAPROJECT);
-	private static final String PACKAGEFRAGMENTROOT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENTROOT);
-	private static final String PACKAGEFRAGMENT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENT);
-	private static final String FIELD = Character.toString(JavaElement.JEM_FIELD);
-	private static final String METHOD = Character.toString(JavaElement.JEM_METHOD);
-	private static final String INITIALIZER = Character.toString(JavaElement.JEM_INITIALIZER);
-	private static final String COMPILATIONUNIT = Character.toString(JavaElement.JEM_COMPILATIONUNIT);
-	private static final String CLASSFILE = Character.toString(JavaElement.JEM_CLASSFILE);
-	private static final String TYPE = Character.toString(JavaElement.JEM_TYPE);
-	private static final String PACKAGEDECLARATION = Character.toString(JavaElement.JEM_PACKAGEDECLARATION);
-	private static final String IMPORTDECLARATION = Character.toString(JavaElement.JEM_IMPORTDECLARATION);
-	private static final String LOCALVARIABLE = Character.toString(JavaElement.JEM_LOCALVARIABLE);
-	private static final String TYPE_PARAMETER = Character.toString(JavaElement.JEM_TYPE_PARAMETER);
-	private static final String ANNOTATION = Character.toString(JavaElement.JEM_ANNOTATION);
+	public static final String COUNT = Character.toString(JavaElement.JEM_COUNT);
+	public static final String JAVAPROJECT = Character.toString(JavaElement.JEM_JAVAPROJECT);
+	public static final String PACKAGEFRAGMENTROOT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENTROOT);
+	public static final String PACKAGEFRAGMENT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENT);
+	public static final String FIELD = Character.toString(JavaElement.JEM_FIELD);
+	public static final String METHOD = Character.toString(JavaElement.JEM_METHOD);
+	public static final String INITIALIZER = Character.toString(JavaElement.JEM_INITIALIZER);
+	public static final String COMPILATIONUNIT = Character.toString(JavaElement.JEM_COMPILATIONUNIT);
+	public static final String CLASSFILE = Character.toString(JavaElement.JEM_CLASSFILE);
+	public static final String TYPE = Character.toString(JavaElement.JEM_TYPE);
+	public static final String PACKAGEDECLARATION = Character.toString(JavaElement.JEM_PACKAGEDECLARATION);
+	public static final String IMPORTDECLARATION = Character.toString(JavaElement.JEM_IMPORTDECLARATION);
+	public static final String LOCALVARIABLE = Character.toString(JavaElement.JEM_LOCALVARIABLE);
+	public static final String TYPE_PARAMETER = Character.toString(JavaElement.JEM_TYPE_PARAMETER);
+	public static final String ANNOTATION = Character.toString(JavaElement.JEM_ANNOTATION);
 
 	private final char[] memento;
 	private final int length;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Messages.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Messages.java
index fa27ea7..75ecbab 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Messages.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,6 +108,7 @@ public final class Messages extends NLS {
 	public static String build_prereqProjectMustBeRebuilt;
 	public static String build_abortDueToClasspathProblems;
 	public static String status_cannot_retrieve_attached_javadoc;
+	public static String status_timeout_javadoc;
 	public static String status_cannotUseDeviceOnPath;
 	public static String status_coreException;
 	public static String status_defaultPackageReadOnly;
@@ -151,6 +152,7 @@ public final class Messages extends NLS {
 	public static String classpath_illegalLibraryPath;
 	public static String classpath_illegalLibraryPathInContainer;
 	public static String classpath_illegalLibraryArchive;
+	public static String classpath_archiveReadError;
 	public static String classpath_illegalExternalFolder;
 	public static String classpath_illegalExternalFolderInContainer;
 	public static String classpath_illegalProjectPath;
@@ -186,6 +188,7 @@ public final class Messages extends NLS {
 	public static String cache_invalidLoadFactor;
 	public static String savedState_jobName;
 	public static String refreshing_external_folders;
+	public static String updating_external_archives_jobName;
 	public static String convention_unit_nullName;
 	public static String convention_unit_notJavaName;
 	public static String convention_classFile_nullName;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java
index 6265464..71e15fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java
@@ -909,7 +909,7 @@ public class Util {
 			}
 	
 			// line delimiter in workspace preference
-			scopeContext= new IScopeContext[] { new InstanceScope() };
+			scopeContext= new IScopeContext[] { InstanceScope.INSTANCE };
 			lineSeparator = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext);
 			if (lineSeparator != null)
 				return lineSeparator;
@@ -2172,6 +2172,26 @@ public class Util {
 	}
 
 	/**
+	 * Scans the given string for a type signature starting at the given index
+	 * and returns the index of the last character.
+	 * <pre>
+	 * TypeSignature:
+	 *  |  BaseTypeSignature
+	 *  |  ArrayTypeSignature
+	 *  |  ClassTypeSignature
+	 *  |  TypeVariableSignature
+	 * </pre>
+	 *
+	 * @param string the signature string
+	 * @param start the 0-based character index of the first character
+	 * @return the 0-based character index of the last character
+	 * @exception IllegalArgumentException if this is not a type signature
+	 */
+	public static int scanTypeSignature(char[] string, int start) {
+		// this method is used in jdt.debug
+		return org.eclipse.jdt.internal.compiler.util.Util.scanTypeSignature(string, start);
+	}
+	/**
 	 * Return a new array which is the split of the given string using the given divider. The given end
 	 * is exclusive and the given start is inclusive.
 	 * <br>
@@ -2541,7 +2561,7 @@ public class Util {
 				appendClassTypeSignature(string, start, buffer, compact);
 				break;
 			case Signature.C_TYPE_VARIABLE :
-				int e = Util.scanTypeVariableSignature(string, start);
+				int e = org.eclipse.jdt.internal.compiler.util.Util.scanTypeVariableSignature(string, start);
 				buffer.append(string, start + 1, e - start - 1);
 				break;
 			case Signature.C_BOOLEAN :
@@ -2721,386 +2741,6 @@ public class Util {
 	}
 
 	/**
-	 * Scans the given string for a type signature starting at the given index
-	 * and returns the index of the last character.
-	 * <pre>
-	 * TypeSignature:
-	 *  |  BaseTypeSignature
-	 *  |  ArrayTypeSignature
-	 *  |  ClassTypeSignature
-	 *  |  TypeVariableSignature
-	 * </pre>
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a type signature
-	 */
-	public static int scanTypeSignature(char[] string, int start) {
-		// need a minimum 1 char
-		if (start >= string.length) {
-			throw new IllegalArgumentException();
-		}
-		char c = string[start];
-		switch (c) {
-			case Signature.C_ARRAY :
-				return scanArrayTypeSignature(string, start);
-			case Signature.C_RESOLVED :
-			case Signature.C_UNRESOLVED :
-				return scanClassTypeSignature(string, start);
-			case Signature.C_TYPE_VARIABLE :
-				return scanTypeVariableSignature(string, start);
-			case Signature.C_BOOLEAN :
-			case Signature.C_BYTE :
-			case Signature.C_CHAR :
-			case Signature.C_DOUBLE :
-			case Signature.C_FLOAT :
-			case Signature.C_INT :
-			case Signature.C_LONG :
-			case Signature.C_SHORT :
-			case Signature.C_VOID :
-				return scanBaseTypeSignature(string, start);
-			case Signature.C_CAPTURE :
-				return scanCaptureTypeSignature(string, start);
-			case Signature.C_EXTENDS:
-			case Signature.C_SUPER:
-			case Signature.C_STAR:
-				return scanTypeBoundSignature(string, start);
-			default :
-				throw new IllegalArgumentException();
-		}
-	}
-
-	/**
-	 * Scans the given string for a base type signature starting at the given index
-	 * and returns the index of the last character.
-	 * <pre>
-	 * BaseTypeSignature:
-	 *     <b>B</b> | <b>C</b> | <b>D</b> | <b>F</b> | <b>I</b>
-	 *   | <b>J</b> | <b>S</b> | <b>V</b> | <b>Z</b>
-	 * </pre>
-	 * Note that although the base type "V" is only allowed in method return types,
-	 * there is no syntactic ambiguity. This method will accept them anywhere
-	 * without complaint.
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a base type signature
-	 */
-	public static int scanBaseTypeSignature(char[] string, int start) {
-		// need a minimum 1 char
-		if (start >= string.length) {
-			throw new IllegalArgumentException();
-		}
-		char c = string[start];
-		if ("BCDFIJSVZ".indexOf(c) >= 0) { //$NON-NLS-1$
-			return start;
-		} else {
-			throw new IllegalArgumentException();
-		}
-	}
-
-	/**
-	 * Scans the given string for an array type signature starting at the given
-	 * index and returns the index of the last character.
-	 * <pre>
-	 * ArrayTypeSignature:
-	 *     <b>[</b> TypeSignature
-	 * </pre>
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not an array type signature
-	 */
-	public static int scanArrayTypeSignature(char[] string, int start) {
-		int length = string.length;
-		// need a minimum 2 char
-		if (start >= length - 1) {
-			throw new IllegalArgumentException();
-		}
-		char c = string[start];
-		if (c != Signature.C_ARRAY) {
-			throw new IllegalArgumentException();
-		}
-
-		c = string[++start];
-		while(c == Signature.C_ARRAY) {
-			// need a minimum 2 char
-			if (start >= length - 1) {
-				throw new IllegalArgumentException();
-			}
-			c = string[++start];
-		}
-		return scanTypeSignature(string, start);
-	}
-
-	/**
-	 * Scans the given string for a capture of a wildcard type signature starting at the given
-	 * index and returns the index of the last character.
-	 * <pre>
-	 * CaptureTypeSignature:
-	 *     <b>!</b> TypeBoundSignature
-	 * </pre>
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a capture type signature
-	 */
-	public static int scanCaptureTypeSignature(char[] string, int start) {
-		// need a minimum 2 char
-		if (start >= string.length - 1) {
-			throw new IllegalArgumentException();
-		}
-		char c = string[start];
-		if (c != Signature.C_CAPTURE) {
-			throw new IllegalArgumentException();
-		}
-		return scanTypeBoundSignature(string, start + 1);
-	}
-
-	/**
-	 * Scans the given string for a type variable signature starting at the given
-	 * index and returns the index of the last character.
-	 * <pre>
-	 * TypeVariableSignature:
-	 *     <b>T</b> Identifier <b>;</b>
-	 * </pre>
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a type variable signature
-	 */
-	public static int scanTypeVariableSignature(char[] string, int start) {
-		// need a minimum 3 chars "Tx;"
-		if (start >= string.length - 2) {
-			throw new IllegalArgumentException();
-		}
-		// must start in "T"
-		char c = string[start];
-		if (c != Signature.C_TYPE_VARIABLE) {
-			throw new IllegalArgumentException();
-		}
-		int id = scanIdentifier(string, start + 1);
-		c = string[id + 1];
-		if (c == Signature.C_SEMICOLON) {
-			return id + 1;
-		} else {
-			throw new IllegalArgumentException();
-		}
-	}
-
-	/**
-	 * Scans the given string for an identifier starting at the given
-	 * index and returns the index of the last character.
-	 * Stop characters are: ";", ":", "<", ">", "/", ".".
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not an identifier
-	 */
-	public static int scanIdentifier(char[] string, int start) {
-		// need a minimum 1 char
-		if (start >= string.length) {
-			throw new IllegalArgumentException();
-		}
-		int p = start;
-		while (true) {
-			char c = string[p];
-			if (c == '<' || c == '>' || c == ':' || c == ';' || c == '.' || c == '/') {
-				return p - 1;
-			}
-			p++;
-			if (p == string.length) {
-				return p - 1;
-			}
-		}
-	}
-
-	/**
-	 * Scans the given string for a class type signature starting at the given
-	 * index and returns the index of the last character.
-	 * <pre>
-	 * ClassTypeSignature:
-	 *     { <b>L</b> | <b>Q</b> } Identifier
-	 *           { { <b>/</b> | <b>.</b> Identifier [ <b><</b> TypeArgumentSignature* <b>></b> ] }
-	 *           <b>;</b>
-	 * </pre>
-	 * Note that although all "/"-identifiers most come before "."-identifiers,
-	 * there is no syntactic ambiguity. This method will accept them without
-	 * complaint.
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a class type signature
-	 */
-	public static int scanClassTypeSignature(char[] string, int start) {
-		// need a minimum 3 chars "Lx;"
-		if (start >= string.length - 2) {
-			throw new IllegalArgumentException();
-		}
-		// must start in "L" or "Q"
-		char c = string[start];
-		if (c != Signature.C_RESOLVED && c != Signature.C_UNRESOLVED) {
-			return -1;
-		}
-		int p = start + 1;
-		while (true) {
-			if (p >= string.length) {
-				throw new IllegalArgumentException();
-			}
-			c = string[p];
-			if (c == Signature.C_SEMICOLON) {
-				// all done
-				return p;
-			} else if (c == Signature.C_GENERIC_START) {
-				int e = scanTypeArgumentSignatures(string, p);
-				p = e;
-			} else if (c == Signature.C_DOT || c == '/') {
-				int id = scanIdentifier(string, p + 1);
-				p = id;
-			}
-			p++;
-		}
-	}
-
-	/**
-	 * Scans the given string for a type bound signature starting at the given
-	 * index and returns the index of the last character.
-	 * <pre>
-	 * TypeBoundSignature:
-	 *     <b>[-+]</b> TypeSignature <b>;</b>
-	 *     <b>*</b></b>
-	 * </pre>
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a type variable signature
-	 */
-	public static int scanTypeBoundSignature(char[] string, int start) {
-		// need a minimum 1 char for wildcard
-		if (start >= string.length) {
-			throw new IllegalArgumentException();
-		}
-		char c = string[start];
-		switch (c) {
-			case Signature.C_STAR :
-				return start;
-			case Signature.C_SUPER :
-			case Signature.C_EXTENDS :
-				// need a minimum 3 chars "+[I"
-				if (start >= string.length - 2) {
-					throw new IllegalArgumentException();
-				}
-				break;
-			default :
-				// must start in "+/-"
-					throw new IllegalArgumentException();
-
-		}
-		c = string[++start];
-		switch (c) {
-			case Signature.C_CAPTURE :
-				return scanCaptureTypeSignature(string, start);
-			case Signature.C_SUPER :
-			case Signature.C_EXTENDS :
-				return scanTypeBoundSignature(string, start);
-			case Signature.C_RESOLVED :
-			case Signature.C_UNRESOLVED :
-				return scanClassTypeSignature(string, start);
-			case Signature.C_TYPE_VARIABLE :
-				return scanTypeVariableSignature(string, start);
-			case Signature.C_ARRAY :
-				return scanArrayTypeSignature(string, start);
-			case Signature.C_STAR:
-				return start;
-			default:
-				throw new IllegalArgumentException();
-		}
-	}
-
-	/**
-	 * Scans the given string for a list of type argument signatures starting at
-	 * the given index and returns the index of the last character.
-	 * <pre>
-	 * TypeArgumentSignatures:
-	 *     <b><</b> TypeArgumentSignature* <b>></b>
-	 * </pre>
-	 * Note that although there is supposed to be at least one type argument, there
-	 * is no syntactic ambiguity if there are none. This method will accept zero
-	 * type argument signatures without complaint.
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a list of type arguments
-	 * signatures
-	 */
-	public static int scanTypeArgumentSignatures(char[] string, int start) {
-		// need a minimum 2 char "<>"
-		if (start >= string.length - 1) {
-			throw new IllegalArgumentException();
-		}
-		char c = string[start];
-		if (c != Signature.C_GENERIC_START) {
-			throw new IllegalArgumentException();
-		}
-		int p = start + 1;
-		while (true) {
-			if (p >= string.length) {
-				throw new IllegalArgumentException();
-			}
-			c = string[p];
-			if (c == Signature.C_GENERIC_END) {
-				return p;
-			}
-			int e = scanTypeArgumentSignature(string, p);
-			p = e + 1;
-		}
-	}
-
-	/**
-	 * Scans the given string for a type argument signature starting at the given
-	 * index and returns the index of the last character.
-	 * <pre>
-	 * TypeArgumentSignature:
-	 *     <b>*</b>
-	 *  |  <b>+</b> TypeSignature
-	 *  |  <b>-</b> TypeSignature
-	 *  |  TypeSignature
-	 * </pre>
-	 * Note that although base types are not allowed in type arguments, there is
-	 * no syntactic ambiguity. This method will accept them without complaint.
-	 *
-	 * @param string the signature string
-	 * @param start the 0-based character index of the first character
-	 * @return the 0-based character index of the last character
-	 * @exception IllegalArgumentException if this is not a type argument signature
-	 */
-	public static int scanTypeArgumentSignature(char[] string, int start) {
-		// need a minimum 1 char
-		if (start >= string.length) {
-			throw new IllegalArgumentException();
-		}
-		char c = string[start];
-		switch (c) {
-			case Signature.C_STAR :
-				return start;
-			case Signature.C_EXTENDS :
-			case Signature.C_SUPER :
-				return scanTypeBoundSignature(string, start);
-			default :
-				return scanTypeSignature(string, start);
-		}
-	}
-
-	/**
 	 * Get all type arguments from an array of signatures.
 	 *
 	 * Example:
@@ -3280,7 +2920,6 @@ public class Util {
 		char[][] signatures = new char[10][];
 		int signaturesCount = 0;
 //		int[] lengthes = new int [10];
-		int typeArgsCount = 0;
 		int paramOpening = 0;
 
 		// Scan each signature character
@@ -3292,18 +2931,10 @@ public class Util {
 						if (signaturesCount == signatures.length) {
 							System.arraycopy(signatures, 0, signatures = new char[signaturesCount+10][], 0, signaturesCount);
 						}
-						typeArgsCount = 0;
 					}
 					break;
 				case '<':
 					paramOpening++;
-					if (paramOpening == 1) {
-						typeArgsCount = 1;
-					}
-					break;
-				case '*':
-				case ';':
-					if (paramOpening == 1) typeArgsCount++;
 					break;
 				case '.':
 					if (paramOpening == 0)  {
@@ -3409,7 +3040,7 @@ public class Util {
 				case Signature.C_RESOLVED :
 					return appendClassTypeSignatureForAnchor(string, start, buffer);
 				case Signature.C_TYPE_VARIABLE :
-					int e = Util.scanTypeVariableSignature(string, start);
+					int e = org.eclipse.jdt.internal.compiler.util.Util.scanTypeVariableSignature(string, start);
 					buffer.append(string, start + 1, e - start - 1);
 					return e;
 				case Signature.C_BOOLEAN :
@@ -3621,60 +3252,42 @@ public class Util {
 			}
 		}
 	}
-	
 	/**
-	 * Answers true if the given name, starting from the given index, starts with the given prefix,
-	 * false otherwise. isCaseSensitive is used to find out whether or not the comparison should be
-	 * case sensitive.
-	 * <br>
-	 * <br>
-	 * For example:
-	 * <ol>
-	 * <li><pre>
-	 *    prefix = { 'a' , 'B' }
-	 *    name = { 'c', 'd', 'a' , 'b', 'b', 'a', 'b', 'a' }
-	 *    startIndex = 2
-	 *    isCaseSensitive = false
-	 *    result => true
-	 * </pre>
-	 * </li>
-	 * <li><pre>
-	 *    prefix = { 'a' , 'B' }
-	 *    name = { 'c', 'd', 'a' , 'b', 'b', 'a', 'b', 'a' }
-	 *    startIndex = 2
-	 *    isCaseSensitive = true
-	 *    result => false
-	 * </pre>
-	 * </li>
-	 * </ol>
-	 *
-	 * @param prefix the given prefix
-	 * @param name the given name
-	 * @param isCaseSensitive to find out whether or not the comparison should be case sensitive
-	 * @param startIndex index from which the prefix should be searched in the name
-	 * @return true if the given name starts with the given prefix, false otherwise
-	 * @throws NullPointerException if the given name is null or if the given prefix is null
-	 */
-	public static final boolean prefixEquals(
-		char[] prefix,
-		char[] name,
-		boolean isCaseSensitive,
-		int startIndex) {
-
-		int max = prefix.length;
-		if (name.length - startIndex < max)
-			return false;
-		if (isCaseSensitive) {
-			for (int i = max; --i >= 0;) // assumes the prefix is not larger than the name
-				if (prefix[i] != name[startIndex + i])
-					return false;
-			return true;
+	 * Finds the IMethod element corresponding to the given selector, 
+	 * without creating a new dummy instance of a binary method. 
+	 * @param type the type in which the method is declared
+	 * @param selector the method name
+	 * @param paramTypeSignatures the type signatures of the method arguments
+	 * @param isConstructor whether we're looking for a constructor
+	 * @return an IMethod if found, otherwise null
+	 * @throws JavaModelException
+	 */
+	public static IMethod findMethod(IType type, char[] selector, String[] paramTypeSignatures, boolean isConstructor) throws JavaModelException {
+		IMethod method = null;
+		int startingIndex = 0;
+		String[] args;
+		IType enclosingType = type.getDeclaringType();
+		// If the method is a constructor of a non-static inner type, add the enclosing type as an 
+		// additional parameter to the constructor
+		if (enclosingType != null
+				&& isConstructor
+				&& !Flags.isStatic(type.getFlags())) {
+			args = new String[paramTypeSignatures.length+1];
+			startingIndex = 1;
+			args[0] = Signature.createTypeSignature(enclosingType.getFullyQualifiedName(), true);
+		} else {
+			args = new String[paramTypeSignatures.length];
 		}
-
-		for (int i = max; --i >= 0;) // assumes the prefix is not larger than the name
-			if (ScannerHelper.toLowerCase(prefix[i])
-				!= ScannerHelper.toLowerCase(name[startIndex + i]))
-				return false;
-		return true;
+		int length = args.length;
+		for(int i = startingIndex;	i< length ; i++){
+			args[i] = new String(paramTypeSignatures[i-startingIndex]);
+		}
+		method = type.getMethod(new String(selector), args);
+		
+		IMethod[] methods = type.findMethods(method);
+		if (methods != null && methods.length > 0) {
+			method = methods[0];
+		}
+		return method;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/messages.properties b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/messages.properties
index 78a1922..e75e56b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/messages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -125,6 +125,7 @@ status_targetException = Target exception
 status_updateConflict = Update conflict
 status_cannot_retrieve_attached_javadoc = Cannot retrieve the attached javadoc for {0}{1}
 status_unknown_javadoc_format = Unknown javadoc format for {0}
+status_timeout_javadoc = Timed out while retrieving the attached javadoc for {0}{1} 
 
 ### classpath
 classpath_buildPath = Build path
@@ -140,13 +141,14 @@ classpath_cannotUseDistinctSourceFolderAsOutput = Source folder ''{0}'' in proje
 classpath_cannotUseLibraryAsOutput = Source folder ''{0}'' in project ''{2}'' cannot output to library ''{1}''
 classpath_closedProject = Required project ''{0}'' needs to be open
 classpath_couldNotWriteClasspathFile = Could not write ''.classpath'' file of project ''{0}'': {1}
-classpath_cycle = A cycle was detected in the build path of project ''{0}''
+classpath_cycle = A cycle was detected in the build path of project ''{0}''. The cycle consists of projects '{'{1}'}'
 classpath_duplicateEntryPath = Build path contains duplicate entry: ''{0}'' for project ''{1}''
 classpath_illegalContainerPath = Illegal classpath container path: ''{0}'' in project ''{1}'', must have at least one segment (containerID+hints)
 classpath_illegalEntryInClasspathFile = Illegal entry in ''.classpath'' of project ''{0}'' file: {1}
 classpath_illegalLibraryPath = Illegal path for required library: ''{0}'' in project ''{1}''
 classpath_illegalLibraryPathInContainer = Illegal path for required library: ''{0}'' in the {1}
 classpath_illegalLibraryArchive = Illegal type of archive for required library: ''{0}'' in project ''{1}''
+classpath_archiveReadError = Archive for required library: ''{0}'' in project ''{1}'' cannot be read or is not a valid ZIP file
 classpath_illegalExternalFolder = Required library cannot denote external folder: ''{0}'' for project ''{1}''
 classpath_illegalExternalFolderInContainer = Required library cannot denote external folder: ''{0}'' in the {1}
 classpath_illegalProjectPath = Illegal path for required project: ''{0}'' in project ''{1}''
@@ -185,6 +187,7 @@ path_mustBeAbsolute = Path must be absolute
 cache_invalidLoadFactor = Incorrect load factor
 savedState_jobName = Processing Java changes since last activation
 refreshing_external_folders = Refreshing external folders
+updating_external_archives_jobName = Refreshing external archives
 
 ## java model initialization
 javamodel_initialization = Initializing Java tooling
diff --git a/eclipse/plugins/org.eclipse.jdt.core/notes/R36_buildnotes_jdt-core.html b/eclipse/plugins/org.eclipse.jdt.core/notes/R36_buildnotes_jdt-core.html
new file mode 100644
index 0000000..bfa4eff
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core/notes/R36_buildnotes_jdt-core.html
@@ -0,0 +1,2283 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="IBM">
+   <title>JDT/Core Release Notes 3.6</title>
+   <link rel="stylesheet" href="jdt_core_style.css" charset="iso-8859-1" type="text/css">
+</head>
+<body text="#000000" bgcolor="#FFFFFF">
+<table border=0 cellspacing=5 cellpadding=2 width="100%" >
+  <tr>
+    <td align="left" width="72%" class="title1">
+      <font size="+3"><b>jdt core - build notes 3.6 stream</b></font>
+    </td>
+  </tr>
+  <tr><td align="left" width="72%" class="title2"><font size="-2">Java development tools core</font></td></tr>
+  <tr><td> </td></tr>
+  <tr>
+  	<td class="title3">
+	  <font size="-1">
+	  Here are the build notes for the Eclipse JDT/Core plug-in project
+	  <a href="http://www.eclipse.org/jdt/core/index.php"><b>org.eclipse.jdt.core</b></a>,
+	  describing <a href="https://bugs.eclipse.org/bugs" target=new>bug</a> resolution and substantial changes in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core"><b>HEAD</b></a> branch.
+	  For more information on 3.6 planning, please refer to <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#release-plan">JDT/Core release plan</a>,
+	  the next <a href="http://www.eclipse.org/jdt/core/r3.6/index.php#milestone-plan">milestone plan</a>,
+	  the overall <a href="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_6.html">official plan</a>,
+	  or the <a href="http://www.eclipse.org/eclipse/platform-releng/buildSchedule.html">build schedule</a>.
+	  This present document covers all changes since Release 3.5 (also see a summary of <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/API_changes.html">API changes</a>).
+	  <br>Maintenance of previous releases of JDT/Core is performed in parallel branches:
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_5_maintenance">R3.5.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_4_maintenance">R3.4.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_3_maintenance">R3.3.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_2_maintenance">R3.2.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_1_maintenance">R3.1.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R3_0_maintenance">R3.0.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R2_1_maintenance">R2.1.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=R2_0_1">R2.0.x</a>,
+		  <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=ECLIPSE_1_0">R1.0.x</a>.
+	  </font>
+	</td>
+  </tr>
+</table>
+<a name="v_A58"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6 - June 3, 2010 - 3.6.0
+<br>Project org.eclipse.jdt.core v_A58
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A58">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315568">315568</a>
+improve Javadoc of SearchPattern#createPattern(String, int, int, int)
+
+<a name="v_A57"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC4 - June 3, 2010 - 3.6.0 RC4
+<br>Project org.eclipse.jdt.core v_A57
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A57">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>Use default disabling/enabling tags in the samples of the Javadoc comments
+of the formatter constants <code>FORMATTER_DISABLING_TAG</code> and
+<code>FORMATTER_ENABLING_TAG</code>.</li>
+<li>Fixed minor javadoc issues of <code>createStrictHierarchyScope()</code>.</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314709">314709</a>
+Clarify -encoding <encoding name> in jdt_api_compile.htm
+
+<a name="v_A56"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC3 - May 27, 2010 - 3.6.0 RC3
+<br>Project org.eclipse.jdt.core v_A56
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A56">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313890">313890</a>
+Migration guide to 3.6 for containers with MANIFEST-referred entries
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313965">313965</a>
+Breaking change in classpath container API
+
+<a name="v_A55"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC3 - May 25, 2010
+<br>Project org.eclipse.jdt.core v_A55
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A55">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313706">313706</a>
+Replace ie. with i.e. in jdt.core documentation
+
+<a name="v_A54"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC2 - May 20, 2010 - 3.6.0 RC2
+<br>Project org.eclipse.jdt.core v_A54
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A54">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>
+Added a new preference to force the formatter to try to keep nested expressions on one line.
+<p>
+This new preference is controlled with the option:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_WRAP_OUTER_EXPRESSIONS_WHEN_NESTED</code>
+<pre>
+/**
+ * FORMATTER / Option to wrap outer expressions in nested expressions
+ *     - option id:         "org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested"
+ *     - possible values:   { TRUE, FALSE }
+ *     - default:           TRUE
+ *
+ * This option changes the formatter behavior when nested method calls are encountered.
+ * Since 3.6, the formatter tries to wrap outermost method calls first to have a better output.
+ * For example, let's say we are using the Eclipse built-in profile with a max line width=40+space for tab policy.
+ * Then consider the following snippet:
+ *
+ * public class X01 {
+ *     void test() {
+ *         foo(bar(1, 2, 3, 4), bar(5, 6, 7, 8));
+ *     }
+ * }
+ *
+ * With this new strategy, the formatter will wrap the line earlier, between the arguments of the message call
+ * for this example, and then it will allow to keep each nested call on a single line.
+ * Hence, the output will be:
+ *
+ * public class X01 {
+ *     void test() {
+ *         foo(bar(1, 2, 3, 4),
+ *             bar(5, 6, 7, 8));
+ *     }
+ * }
+ *
+ * Important notes:
+ * 1. This new behavior is automatically activated (i.e. the default value for this preference is {@link #TRUE}).
+ *    If the backward compatibility regarding previous versions' formatter behavior (i.e. before 3.6 version) is necessary,
+ *    then the preference needs to be set to {@link #FALSE} to retrieve the previous formatter behavior.
+ * 2. The new strategy currently only applies to nested method calls, but might be extended to other nested expressions in future versions
+ * 
+ * @see #TRUE
+ * @see #FALSE
+ * @since 3.6
+ */
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313524">313524</a> for more details.
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313524">313524</a>
+[formatter] Add preference for improved lines wrapping in nested method calls
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313109">313109</a>
+ at SuppressWarnings on multiple locals is marked unnecessary if any local is never used
+
+<a name="v_A53"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC1 - May 12, 2010 - 3.6.0 RC1
+<br>Project org.eclipse.jdt.core v_A53
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A53">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312326">312326</a>
+IllegalArgumentException using open type dialog
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310159">310159</a>
+Hang in JavaModel.getExternalTarget(JavaModel.java:333)
+
+<a name="v_A52"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC1 - May 11, 2010
+<br>Project org.eclipse.jdt.core v_A52
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A52">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157847">157847</a>
+NPE in WildcardBinding.computeUniqueKey during code assist
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311849">311849</a>
+[quick fix] @SuppressWarnings does not work as expected inside a for loop
+
+<a name="v_A51"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC1 - May 8, 2010
+<br>Project org.eclipse.jdt.core v_A51
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A51">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306170">306170</a>
+[perfs] Regression for FullSourceWorkspaceTypeHierarchyTests#testPerfAllTypes()
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298844">298844</a>
+[formatter] New lines in empty method body wrong behavior
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311864">311864</a>
+[formatter] NPE with empty {@code }
+
+<a name="v_A50"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC1 - May 6, 2010
+<br>Project org.eclipse.jdt.core v_A50
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A50">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>
+Added a new preference to switch on/off the usage of the disabling/enabling tags of the formatter.
+<p>
+This new preference is controlled with the option:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_USE_ON_OFF_TAGS</code>
+<pre>
+/**
+ * FORMATTER / Option to use the disabling and enabling tags defined respectively by the {@link #FORMATTER_DISABLING_TAG} and the {@link #FORMATTER_ENABLING_TAG} options.
+ *     - option id:         "org.eclipse.jdt.core.formatter.use_on_off_tags"
+ *     - possible values:   TRUE / FALSE
+ *     - default:           FALSE
+ * 
+ * @since 3.6
+ */
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311582">311582</a> for more details.
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311617">311617</a>
+[formatter] provide default tags to enable/disable formatter
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311582">311582</a>
+[formatter] Master switch to enable/disable on/off tags
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307040">307040</a>
+Search Job with HierarchyScope on Object does not cancel
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302295">302295</a>
+After associating source folder with rt.jar project refresh takes exceedingly long time.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311048">311048</a>
+AbortCompilation propagated from CompilationUnitProblemFinder.process()
+
+<a name="v_A49"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6RC1 - May 4, 2010
+<br>Project org.eclipse.jdt.core v_A49
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A49">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310811">310811</a>
+[perfs] Big regression on FullSourceWorkspaceFormatterTests#testFormatDefaultBigFile()
+
+<a name="v_A48"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - April 25, 2010 - 3.6.0 M7
+<br>Project org.eclipse.jdt.core v_A48
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A48">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310330">310330</a>
+Add multiple encoding support for the batch compiler
+
+<a name="v_A47"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - April 25, 2010
+<br>Project org.eclipse.jdt.core v_A47
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A47">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309835">309835</a>
+[formatter] adds blank lines on each run
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310213">310213</a>
+AIOOBE in IndexSelector.initializeIndexLocations()
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309966">309966</a>
+IType#getKey() does not work for unresolved local ITypes
+
+<a name="v_A46"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - April 23, 2010
+<br>Project org.eclipse.jdt.core v_A46
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A46">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59891">59891</a>
+[formatter] improve lines wrapping in nested method calls
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306172">306172</a>
+[perfs] Invalid test duration for FullSourceWorkspaceTypeHierarchyTests#testPerSuperTypes()
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267091">267091</a>
+[content assist] After 'implements' interface members are not proposed
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261534">261534</a>
+content assist after instanceof should also work after &&
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308980">308980</a>
+[content assist]An initializer inside a non-array field declaration confuses content assist
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310002">310002</a>
+ToolFactory.createScanner(..) should use workspace compliance
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291528">291528</a>
+Synchronize project warning/error settings to build.properties
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309787">309787</a>
+Extension point "org.eclipse.jdt.core.codeFormatter" is ignored
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244820">244820</a>
+Content assist after 'instanceof' should also work in assignment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309706">309706</a>
+[formatter] doesn't work when code has three semicolons side by side
+
+<a name="v_A45"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - April 20, 2010
+<br>Project org.eclipse.jdt.core v_A45
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A45">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305037">305037</a>
+missing story for attributes of referenced JARs in classpath containers
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305116">305116</a>
+[index] Improve performance of indexes results tables
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236306">236306</a>
+[content assist] for method invocation in variable initializer should not guess variable
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302865">302865</a>
+Issue with "import" a class and "import static" a method with the same name
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309022">309022</a>
+[ImportRewrite] Add Import wrongly removes import for nested type
+
+<a name="v_A44"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - April 13, 2010
+<br>Project org.eclipse.jdt.core v_A44
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A44">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308754">308754</a>
+CompilationUnit.rewrite messes up .class-literal in annotation instead of changing class to interface
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306519">306519</a>
+JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject) should allow null project
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308428">308428</a>
+Possible problem to get corrections with surrogate characters
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307295">307295</a>
+Task tags and task priorities
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308476">308476</a>
+Test ClasspathTests#testBug308150 fails on all platforms
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305043">305043</a>
+Internal error during classpath init
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307486">307486</a>
+DBCS3.6: Fail to propose Ext-B labels with content assist in Java Editor
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308256">308256</a>
+DiagnosticListener always supplies Diagnostic.getSource()==null
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308356">308356</a>
+codeSelect(..) doesn't work for local variable with surrogate in name
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308245">308245</a>
+Valid code fails to compile in 3.6
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307885">307885</a>
+Error message for instanceof <parameterized type> wrong arguments
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=249704">249704</a>
+[code assist] autocomplete with anonymous classes does stop working
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308150">308150</a>
+JAR with invalid Class-Path entry in MANIFEST.MF crashes the project
+
+<a name="v_A43"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - April 6, 2010
+<br>Project org.eclipse.jdt.core v_A43
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A43">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306223">306223</a>
+[search] Searching for annotation references report all type references
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292087">292087</a>
+anonymous class in array member initializer confuses content assist
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307337">307337</a>
+[content assist] Default constructor should not be proposed for anonymous types
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306568">306568</a>
+[ImportRewrite] Add Import does not work for nested type when package is on-demand imported
+
+<a name="v_A42"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - March 30, 2010
+<br>Project org.eclipse.jdt.core v_A42
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A42">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=202634">202634</a>
+[codeassist] missing super proposal in specific source
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304394">304394</a>
+IJavaElement#getAttachedJavadoc(IProgressMonitor) should support referenced entries
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305122">305122</a>
+FUP of 302949
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306917">306917</a>
+Exception occurred during compilation unit conversion:
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306196">306196</a>
+[search] NPE while searching for annotation references in rt.jar of JRE 6.0
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288658">288658</a>
+[compiler][1.5] Annotations visibility issues
+
+<a name="v_A41"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - March 23, 2010
+<br>Project org.eclipse.jdt.core v_A41
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A41">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305518">305518</a>
+[formatter] Line inside <pre> tag is wrongly indented by one space when starting just after the star
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295825">295825</a>
+[formatter] Commentaries are running away after formatting are used
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306477">306477</a>
+Indexer(?) fails to recognise enum as a type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305830">305830</a>
+[formatter] block comment should not be formatted when a non-nls tag is on the same line
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300031">300031</a>
+The deprecation warning for a type should not include the package name
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306078">306078</a>
+Navigate to Inaccessible Field
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209479">209479</a>
+infinite loop in BindingKey when signatures are invalid
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293558">293558</a>
+[quick assist] "Invert if statement" fails when comment follows
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=182459">182459</a>
+[compiler] Inconsistent error range for unresolved field
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=192233">192233</a>
+[AST] CompilationUnit.rewrite() removes whitespace between return type and method name
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306073">306073</a>
+ASTRewrite Javadoc wrongly talks about getTargetSourceRangeComputer
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305001">305001</a>
+Exception occurred in listener of Java element change notification
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305590">305590</a>
+Redundant null check false-positive
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305755">305755</a>
+Remove deprecated API that has been added for 3.6
+
+<a name="v_A40"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M7 - March 16, 2010
+<br>Project org.eclipse.jdt.core v_A40
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A40">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305371">305371</a>
+[formatter] Unexpected indentation of line comment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305281">305281</a>
+[formatter] Turning off formatting changes comment's formatting
+
+<a name="v_A39"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M6 - March 9, 2010 - 3.6.0 M6
+<br>Project org.eclipse.jdt.core v_A39
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A39">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289057">289057</a>
+Java Content Assist taking too long
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303830">303830</a>
+"X cannot be resolved or is not a field" erroneously reported
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235658">235658</a>
+Valid identifier unrecognized.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304841">304841</a>
+[search] NPE in IndexSelector.initializeIndexLocations
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295866">295866</a>
+FormalParameter in JDT DOM/AST documentation
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304817">304817</a>
+Review documentation of ASTParser class
+
+<a name="v_A38"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M6 - March 5, 2010
+<br>Project org.eclipse.jdt.core v_A38
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A38">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>
+Added two new preferences to allow to disable the formatter in a section of the code.
+These two preference define respectively the tag which disables the formatting
+and the tag which re-enable it.
+<p>
+These new preferences are controlled with the options:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_DISABLING_TAG</code>
+<code>DefaultCodeFormatterConstants.FORMATTER_ENABLING_TAG</code>
+<pre>
+/**
+ * FORMATTER / Option to define the tag to put in a comment to disable the formatting.
+ * See the {@link #FORMATTER_ENABLING_TAG} option to re-enable it.
+ *     - option id:         "org.eclipse.jdt.core.formatter.disabling_tag"
+ *     - possible values:   String, with constraints mentioned below
+ *     - default:           ""
+ * 
+ * Note that:
+ * 
+ * 1. The tag name will be trimmed. Hence if it does contain white spaces
+ *    at the beginning or at the end, they will not be taken into account while
+ *    searching for the tag in the comments
+ * 2. If a tag is starting with a letter or digit, then it cannot be leaded by
+ *    another letter or digit to be recognized
+ *    (<b><i>"ToDisableFormatter"</i></b> will not be recognized as a disabling tag
+ *    <b><i>"DisableFormatter"</i></b>, but <b><i>"Re:DisableFormatter"</i></b>
+ *    will be detected for either tag <b><i>"DisableFormatter"</i></b> or
+ *    <b><i>":DisableFormatter"</i></b>).
+ *    Respectively, a tag ending with a letter or digit cannot be followed by a letter
+ *    or digit to be recognized (<b><i>"DisableFormatter1"</i></b> will not be
+ *    recognized as a disabling tag <b><i>"DisableFormatter"</i></b>, but
+ *    <b><i>"DisableFormatter:1"</i></b> will be detected either for tag
+ *    <b><i>"DisableFormatter"</i></b> or <b><i>"DisableFormatter:"</i></b>)
+ * 3. As soon as the formatter encounters the defined disabling tag, it stops to
+ *    format the code from the beginning of the comment including this tag. If it
+ *    was already disabled, the tag has no special effect.
+ *    For example, the second defined enabling tag "<b>disable-formatter</b>"
+ *    in the following snippet is not necessary as the formatter was already disabled
+ *    since the first one:
+ *     class X {
+ *     // disable-formatter
+ *     void foo1() {}
+ *     // disable-formatter
+ *     void foo2() {}
+ *     void bar1() {}
+ *     void bar2() {}
+ *     }
+ *
+ * 4. If no enabling tag is found by the formatter after the disabling tag, then
+ *    the end of the snippet won't be formatted.
+ *    For example, when a disabling tag is put at the beginning of the code, then
+ *    the entire content of a compilation unit is not formatted:
+ *     // disable-formatter
+ *     class X {
+ *     void foo1() {}
+ *     void foo2() {}
+ *     void bar1() {}
+ *     void bar2() {}
+ *     }
+ * 
+ * 5. If a mix of disabling and enabling tags is done in the same comment, then
+ *    the formatter will only take into account the last encountered tag in the
+ *    comment.
+ *    For example, in the following snippet, the formatter will be disabled after
+ *    the comment:
+ *     class X {
+ *     /*
+ *      * This is a comment with a mix of disabling and enabling tags:
+ *      *  - <b>disable-formatter</b>
+ *      *  - <b>enable-formatter</b>
+ *      *  - <b>disable-formatter</b>
+ *      * The formatter will stop to format from the beginning of this comment...
+ *      */
+ *     void foo() {}
+ *     void bar() {}
+ *     }
+ * 
+ * 6. The tag cannot include newline character (i.e. '\n') but it can have white spaces.
+ *    E.g. "<b>format: off</b>" is a valid disabling tag
+ *    In the future, newlines may be used to support multiple disabling tags.
+ * 
+ * @since 3.6
+ */
+
+/**
+ * FORMATTER / Option to define the tag to put in a comment to re-enable the
+ * formatting after it has been disabled (see {@link #FORMATTER_DISABLING_TAG})
+ *     - option id:         "org.eclipse.jdt.core.formatter.enabling_tag"
+ *     - possible values:   String, with constraints mentioned below
+ *     - default:           ""
+ * 
+ * Note that:
+ * 
+ * 1. The tag name will be trimmed. Hence if it does contain white spaces
+ *    at the beginning or at the end, they will not be taken into account while
+ *    searching for the tag in the comments
+ * 2. If a tag is starting with a letter or digit, then it cannot be leaded by
+ *    another letter or digit to be recognized
+ *    (<b>"ReEnableFormatter"</b> will not be recognized as an enabling tag
+ *    <b><i>"EnableFormatter"</i></b>, but <b><i>"Re:EnableFormatter"</i></b>
+ *    will be detected for either tag <b><i>"EnableFormatter"</i></b> or
+ *    <b><i>":EnableFormatter"</i></b>).
+ *    Respectively, a tag ending with a letter or digit cannot be followed by a letter
+ *    or digit to be recognized (<b><i>"EnableFormatter1"</i></b> will not be
+ *    recognized as an enabling tag <b><i>"EnableFormatter"</i></b>, but
+ *    <b><i>"EnableFormatter:1"</i></b> will be detected either for tag
+ *    <b><i>"EnableFormatter"</i></b> or <b><i>"EnableFormatter:"</i></b>)
+ * 3. As soon as the formatter encounters the defined enabling tag, it re-starts
+ *    to format the code just after the comment including this tag. If it was already
+ *    active, i.e. already re-enabled or never disabled, the tag has no special effect.
+ *    For example, the defined enabling tag "<b>enable-formatter</b>"
+ *    in the following snippet is not necessary as the formatter has never been
+ *    disabled:
+ *     class X {
+ *     void foo1() {}
+ *     void foo2() {}
+ *     // enable-formatter
+ *     void bar1() {}
+ *     void bar2() {}
+ *     }
+ * 
+ *    Or, in the following other snippet, the second enabling tag is not necessary as
+ *    the formatting will have been re-enabled by the first one:
+ *     class X {
+ *     // disable-formatter
+ *     void foo1() {}
+ *     void foo2() {}
+ *     // enable-formatter
+ *     void bar1() {}
+ *     // enable-formatter
+ *     void bar2() {}
+ *     }
+ * 
+ * 4. If a mix of disabling and enabling tags is done in the same comment, then
+ *    the formatter will only take into account the last encountered tag in the
+ *    comment.
+ *    For example, in the following snippet, the formatter will be re-enabled after
+ *    the comment:
+ *     // disable-formatter
+ *     class X {
+ *     /*
+ *      * This is a comment with a mix of disabling and enabling tags:
+ *      *  - <b>enable-formatter</b>
+ *      *  - <b>disable-formatter</b>
+ *      *  - <b>enable-formatter</b>
+ *      * The formatter will restart to format after this comment...
+ *      */
+ *     void foo() {}
+ *     void bar() {}
+ *     }
+ * 
+ * 5. The tag cannot include newline character (i.e. '\n') but it can have white spaces.
+ *    E.g. "<b>format: on</b>" is a valid enabling tag
+ *    In the future, newlines may be used to support multiple enabling tags.
+ * 
+ * @since 3.6
+ */
+</pre>
+<p>For example, the following snippet:</p>
+<pre>
+public class Test {
+/* disable-formatter */
+void     foo(    )      {	
+				//      unformatted       area  	  
+}
+/* enable-formatter */
+void     bar(    )      {	
+				//      formatted       area  	  
+}
+}
+</pre>
+formatted with disabling tags = "disable-formatter" and enabling tags
+= "enable-formatter" produces the following output:
+<pre>
+public class Test {
+
+/* disable-formatter *	
+void     foo(    )      {
+				//      unformatted       area  	  
+}
+/* enable-formatter *
+	void bar() {
+		// formatted area
+	}
+}
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=27079">27079</a> for more details.
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=129804">129804</a>
+[dom] Local variable bindings from ASTParser#createASTs(.., String[], .., ..) have no declaring method
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304705">304705</a>
+[formatter] Unexpected indentation of wrapped line comments when 'Never indent line comment on first column' preference is checked
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304656">304656</a>
+StringIndexOutOfBoundsException when using JDT dom methods to process sourcefile
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304506">304506</a>
+Task descriptions always have a space after the tag
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304081">304081</a>
+IJavaProject#isOnClasspath(IJavaElement) returns false for type from referenced JAR
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304122">304122</a>
+TypeBindings.getAnnotations() breaks interface
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304416">304416</a>
+VerifyError after compiling without preserve all locals
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304529">304529</a>
+[formatter] NPE when either the disabling or the enabling tag is not defined
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=27079">27079</a>
+Tags for disabling/enabling code formatter (feature)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304316">304316</a>
+NPE when javadoc URL is invalid
+
+<a name="v_A37"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M6 - March 2, 2010
+<br>Project org.eclipse.jdt.core v_A37
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A37">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>Added new configurable option to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>:<br>
+<pre>
+/**
+ * Compiler option ID: Further Determining the Effect of @SuppressWarnings if also
+ * COMPILER_PB_SUPPRESS_WARNINGS is enabled.
+ * When enabled, the @SuppressWarnings annotation can additionally be used to suppress 
+ * optional compiler diagnostics that have been configured as ERROR.
+ * When disabled, all @SuppressWarnings annotations only affects warnings.
+ *
+ * Option id: "org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors"
+ * Possible values: { "enabled", "disabled" }
+ * Default: "disabled"
+ * 
+ * @since 3.6
+ * @category CompilerOptionID
+ */
+public static final String COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS = PLUGIN_ID + ".compiler.problem.suppressOptionalErrors";
+</pre>
+</li>
+<li>
+Added a new formatter preferences to align method declaration.
+<p>
+This new preference is controlled with the option:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION</code>
+<pre>
+/**
+ * FORMATTER / Option for alignment of method declaration
+ *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_method_declaration"
+ *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
+ *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
+ * 
+ * @see #createAlignmentValue(boolean, int, int)
+ * @since 3.6
+ */
+</pre>
+<p>For example, the following snippet:</p>
+<pre>
+public class Test {
+public final synchronized java.lang.String a_method_which_has_a_very_long_name() {
+return null;
+}
+}
+</pre>
+formatted with this preference activated as 'Wrap only when necessary', will
+produce the following output:
+<pre>
+public class Test {
+	public final synchronized java.lang.String
+			a_method_which_has_a_very_long_name() {
+		return null;
+	}
+}
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a> for more details.
+</li>
+<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>. See the bug for details.
+<pre>
+org.eclipse.jdt.core.ITypeParameter
+	/**
+	 * Returns the signatures for this type parameter's bounds. The type parameter may have 
+	 * been declared as part of a type or a method. The signatures represent only the individual 
+	 * bounds and do not include the type variable name or the <code>extends</code> keyword.  
+	 * The signatures may be either unresolved (for source types) or resolved (for binary types). 
+	 * See {@link Signature} for details.
+	 * 
+	 * @return the signatures for the bounds of this formal type parameter
+	 * @throws JavaModelException
+	 *             if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 * @see Signature
+	 * @since 3.6
+	 */
+	String[] getBoundsSignatures() throws JavaModelException;
+</pre>
+</li>
+<li>
+Added a new formatter preference to enable or disable the formatting of line
+comments that start on the first column.<br>
+Note that the indentation of line comments will also be disabled when activating
+this option, as otherwise the formatter could not produce stable outputs...
+<p>
+The default is to format these comments to have a backward compatible behavior.
+</p><p>
+This new preferences is controlled with the options:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN</code>
+<pre>
+/**
+ * FORMATTER / Option to format line comments that start on the first column
+ *     - option id:         "org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column"
+ *     - possible values:   { TRUE, FALSE }
+ *     - default:           TRUE
+ * 
+ * Note that this option is ignored if either the
+ * {@link #FORMATTER_COMMENT_FORMAT_LINE_COMMENT} option has been set to
+ * {@link #FALSE} or the formatter is created with the mode
+ * {@link ToolFactory#M_FORMAT_NEW}.
+ * 
+ * @see #TRUE
+ * @see #FALSE
+ * @see ToolFactory#createCodeFormatter(Map, int)
+ * @since 3.6
+ */
+</pre>
+<p>For example, the following snippet:</p>
+<pre>
+public class X01 {
+//    int	a  =   1;
+//    int	b  =   2;
+}
+</pre>
+will be untouched by the formatter if both options are activated.
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a> for more details.
+</li>
+<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>. See the bug for details.
+<pre>
+org.eclipse.jdt.core.IClasspathEntry
+	/**
+	 * Returns the classpath entry that is making a reference to this classpath entry. For entry kinds 
+	 * {@link #CPE_LIBRARY}, the return value is the entry that is representing the JAR that includes 
+	 * <code>this</code> in the MANIFEST.MF file's Class-Path section. For entry kinds other than 
+	 * {@link #CPE_LIBRARY}, this returns <code>null</code>. For those entries that are on the raw classpath already, 
+	 * this returns <code>null</code>.
+	 *
+	 * It is possible that multiple library entries refer to the same entry
+	 * via the MANIFEST.MF file. In those cases, this method returns the first classpath entry 
+	 * that appears in the raw classpath. However, this does not mean that the other referencing 
+	 * entries do not relate to their referenced entries. 
+	 * See {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)} for 
+	 * more details.
+	 * 
+	 * @return the classpath entry that is referencing this entry or <code>null</code> if 
+	 * 		not applicable.
+	 * @since 3.6
+	 */
+	IClasspathEntry getReferencingEntry();
+
+
+org.eclipse.jdt.core.IJavaProject
+	/**
+	 * Works similar to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)} and 
+	 * additionally allows persisting the given array of referenced entries for this project.
+	 * The referenced entries and their attributes are stored in the .classpath file of this 
+	 * project. For details on referenced entries, see 
+	 * {@link JavaCore#getReferencedClasspathEntries(IClasspathEntry, IJavaProject)}
+	 * and {@link IClasspathEntry#getReferencingEntry()}.
+	 * 
+	 * Since the referenced entries are stored in the .classpath file, clients can store additional 
+	 * information that belong to these entries and retrieve them across sessions, though the referenced
+	 * entries themselves may not be present in the raw classpath. By passing a <code>null</code>
+	 * referencedEntries, clients can choose not to modify the already persisted referenced entries,
+	 * which is fully equivalent to {@link #setRawClasspath(IClasspathEntry[], IPath, IProgressMonitor)}.
+	 * If an empty array is passed as referencedEntries, the already persisted referenced entries, 
+	 * if any, will be cleared. 
+	 * 
+	 * If there are duplicates of a referenced entry or if any of the <code>referencedEntries</code> 
+	 * is already present in the raw classpath(<code>entries</code>) those referenced entries will 
+	 * be excluded and not be persisted.
+	 *
+	 * @param entries a list of classpath entries
+	 * @param referencedEntries the list of referenced classpath entries to be persisted
+	 * @param outputLocation the default output location
+	 * @param monitor the given progress monitor
+	 * @exception JavaModelException if the classpath could not be set. Reasons include:
+	 *  	This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
+	 *  	The classpath is being modified during resource change event notification (CORE_EXCEPTION)
+	 *  	The classpath failed the validation check as defined by {@link JavaConventions#validateClasspath(IJavaProject, IClasspathEntry[], IPath)}
+	 * @see IClasspathEntry
+	 * @see #getReferencedClasspathEntries()
+	 * @since 3.6
+	 */
+	void setRawClasspath(IClasspathEntry[] entries, IClasspathEntry[] referencedEntries, IPath outputLocation,
+			IProgressMonitor monitor) throws JavaModelException;
+
+	/**
+	 * Returns the list of referenced classpath entries stored in the .classpath file of <code>this</code> 
+	 * java project. Clients can store the referenced classpath entries using 
+	 * {@link #setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, IProgressMonitor)}
+	 * If the client has not stored any referenced entries for this project, an empty array is returned.
+	 *
+	 * @throws JavaModelException
+	 * @return an array of referenced classpath entries stored for this java project or an empty array if none
+	 * 			stored earlier.
+	 * @since 3.6
+	 */
+	IClasspathEntry[] getReferencedClasspathEntries() throws JavaModelException;
+	
+
+org.eclipse.jdt.core.IPackageFragmentRoot
+	/**
+	 * Returns the first resolved classpath entry that corresponds to this package fragment root.
+	 * A resolved classpath entry is said to correspond to a root if the path of the resolved
+	 * entry is equal to the root's path.
+	 * 
+	 * @return the first resolved classpath entry that corresponds to this package fragment root
+	 * @throws JavaModelException if this element does not exist or if an
+	 *		exception occurs while accessing its corresponding resource. 
+	 * @since 3.6
+	 */
+	IClasspathEntry getResolvedClasspathEntry() throws JavaModelException;
+	
+
+org.eclipse.jdt.core.JavaCore
+	/**
+	 * Returns an array of classpath entries that are referenced directly or indirectly 
+	 * by a given classpath entry. For the entry kind {@link IClasspathEntry#CPE_LIBRARY}, 
+	 * the method returns the libraries that are included in the Class-Path section of 
+	 * the MANIFEST.MF file. If a referenced JAR file has further references to other library 
+	 * entries, they are processed recursively and added to the list. For entry kinds other 
+	 * than {@link IClasspathEntry#CPE_LIBRARY}, this method returns an empty array.
+	 *
+	 * If a referenced entry has already been stored 
+	 * in the given project's .classpath, the stored attributes are populated in the corresponding
+	 * referenced entry. For more details on storing referenced entries see
+	 * see {@link IJavaProject#setRawClasspath(IClasspathEntry[], IClasspathEntry[], IPath, 
+	 * IProgressMonitor)}. 
+	 * 
+	 * @param libraryEntry the library entry whose referenced entries are sought 
+	 * @param project project where the persisted referenced entries to be retrieved from
+	 * @return an array of classpath entries that are referenced directly or indirectly by the given entry. 
+	 * 			If not applicable, returns an empty array.
+	 * @since 3.6
+	 */
+	public static IClasspathEntry[] getReferencedClasspathEntries(IClasspathEntry libraryEntry, IJavaProject project);	
+</pre>
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252431">252431</a>
+New API is needed to better identify referenced jars in the Class-Path: entry
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251133">251133</a>
+[formatter] Automatic formatting single line comments is incoherent among tools
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248897">248897</a>
+[1.5][compiler] Wrong warning 'The local variable 'var' is never read'.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304031">304031</a>
+Unused @SuppressWarnings(..) not flagged when suppressed problem is set to Error
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551">295551</a>
+Add option to automatically promote all warnings to errors
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303810">303810</a>
+Compact boolean fields on FlowContext
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251227">251227</a>
+[compiler] Fup of bug 115814, comparing doubles should not be flagged
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268798">268798</a>
+[1.5][compiler] Eclipse 3.5M5/6 produces new compiler errors with generics
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303448">303448</a>
+Wrong code generation optimization when assert condition is false
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303776">303776</a>
+Member types imports are removed too aggressively
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302949">302949</a>
+JavaModelManager hangs accessing the nonChainingJars set
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246594">246594</a>
+[model] API request: ITypeParameter#getBoundsSignatures() or #getSignature()
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=253896">253896</a>
+[compiler][null] wrong "Null comparison always yields false" problem for auto-unboxing
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284789">284789</a>
+[formatter] Does not line-break method declaration exception with parameters
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303480">303480</a>
+[1.5][compiler] CCE: org.eclipse.jdt.internal.compiler.parser.RecoveredBlock cannot be cast to org.eclipse.jdt.internal.compiler.parser.RecoveredType
+
+<a name="v_A36"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M6 - February 23, 2010
+<br>Project org.eclipse.jdt.core v_A36
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A36">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>
+Added a new formatter preferences to align annotation arguments (i.e. element-value pairs).
+<p>
+This new preference is controlled with the option:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION</code>
+<pre>
+/**
+ * FORMATTER / Option for alignment of arguments in annotation
+ *     - option id:         "org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation"
+ *     - possible values:   values returned by <code>createAlignmentValue(boolean, int, int)</code> call
+ *     - default:           createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)
+ * 
+ * @see #createAlignmentValue(boolean, int, int)
+ * @since 3.6
+ */
+</pre>
+<p>For example, the following snippet:</p>
+<pre>
+ at MyAnnot(value1 = "this is an example", value2 = "of an annotation", value3 = "with several arguments", value4 = "which may need to be wrapped")
+public class Test {
+}
+</pre>
+formatted with this preference activated, will produce the following output
+while using the <code>Eclipse [built-in]</code> profile:
+<pre>
+ at MyAnnot(value1 = "this is an example", value2 = "of an annotation",
+		value3 = "with several arguments",
+		value4 = "which may need to be wrapped")
+public class Test {
+}
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a> for more details.
+</li>
+<li>In order to get bindings outside the Eclipse environment, the following methods has been added on the ASTParser class.
+<br>See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a> for details.<br>
+<pre>
+org.eclipse.jdt.core.dom.ASTParser
+	/**
+	 * Set the environment that can be used when no IJavaProject are available.
+	 * 
+	 * The user has to be sure to include all required types on the classpaths for binary types
+	 * or on the sourcepaths for source types to resolve the given source code.
+	 * All classpath and sourcepath entries are absolute paths.
+	 * If sourcepaths contain units using a specific encoding (not the platform encoding), then the
+	 * given encodings must be set. If the given encodings is set, its length must
+	 * match the length of the sourcepaths parameter or an IllegalArgumentException will be thrown.
+	 * If encodings is not null, the given sourcepathEntries must not be null.
+	 * 
+	 * @param classpathEntries the given classpath entries to be used to resolve bindings
+	 * @param sourcepathEntries the given sourcepath entries to be used to resolve bindings
+	 * @param encodings the encodings of the corresponding sourcepath entries or null if the platform encoding
+	 * can be used.
+	 * @param includeRunningVMBootclasspath true if the bootclasspath of the running VM must be prepended to the
+	 * given classpath and false if the bootclasspath of the running VM should be ignored.
+	 * @throws IllegalArgumentException if the size of the given encodings is not equals to the size of the given
+	 * sourcepathEntries
+	 * @since 3.6
+	 */
+	public void setEnvironment(String[] classpathEntries, String[] sourcepathEntries, String[] encodings, boolean includeRunningVMBootclasspath);
+	
+	/**
+	 * Creates ASTs for a batch of compilation units. When bindings are being resolved, processing a
+	 * batch of compilation units is more efficient because much of the work involved in resolving 
+	 * bindings can be shared. 
+	 *
+	 * When bindings are being resolved, all compilation units are resolved 
+	 * using the same environment, which must be set beforehand with 
+	 * {@link #setEnvironment(String[], String[], String[], boolean) setEnvironment}.
+	 * The compilation units are processed one at a time in no specified order. 
+	 * For each of the compilation units in turn,
+	 *  - {@link ASTParser#createAST(IProgressMonitor) ASTParser.createAST} is called to parse it 
+	 *           and create a corresponding AST. The calls to {@link ASTParser#createAST(IProgressMonitor) ASTParser.createAST} 
+	 *           all employ the same settings.</li>
+	 *  - {@link FileASTRequestor#acceptAST(String, CompilationUnit) FileASTRequestor.acceptAST} is called passing
+	 *           the compilation unit path and the corresponding AST to <code>requestor</code>. The compilation unit path is the same
+	 *           path that is passed into the given <code>sourceFilePaths</code> parameter.
+	 *
+	 * Note only ASTs from the given compilation units are reported
+	 * to the requestor. If additional compilation units are required to
+	 * resolve the original ones, the corresponding ASTs are <b>not</b>
+	 * reported to the requestor.
+	 * 
+	 * Note also the following parser parameters are used, regardless of what
+	 * may have been specified:
+	 *  - The {@linkplain #setKind(int) parser kind} is <code>K_COMPILATION_UNIT</code>
+	 *  - The {@linkplain #setSourceRange(int,int) source range} is <code>(0, -1)</code>
+	 *  - The {@linkplain #setFocalPosition(int) focal position} is not set
+	 *
+	 * The <code>bindingKeys</code> parameter specifies bindings keys
+	 * ({@link IBinding#getKey()}) that are to be looked up. These keys may
+	 * be for elements either inside or outside the set of compilation
+	 * units being processed. When bindings are being resolved,
+	 * the keys and corresponding bindings (or <code>null</code> if none) are
+	 * passed to {@link FileASTRequestor#acceptBinding(String, IBinding) FileASTRequestor.acceptBinding}. Note that binding keys
+	 * for elements outside the set of compilation units being processed are looked up
+	 * after all {@link FileASTRequestor#acceptAST(String, CompilationUnit) ASTRequestor.acceptAST}
+	 * callbacks have been made.
+	 * Binding keys for elements inside the set of compilation units being processed
+	 * are looked up and reported right after the corresponding
+	 * {@link FileASTRequestor#acceptAST(String, CompilationUnit) FileASTRequestor.acceptAST} callback has been made.
+	 * No {@link FileASTRequestor#acceptBinding(String, IBinding) FileASTRequestor.acceptBinding} callbacks are made unless
+	 * bindings are being resolved.
+	 *
+	 * A successful call to this method returns all settings to their
+	 * default values so the object is ready to be reused.
+	 * 
+	 * The given <code>encodings</code> are used to properly parse the given source units. If the platform encoding is sufficient,
+	 * then the given encodings can be set to <code>null</code>.
+	 *
+	 * @param sourceFilePaths the compilation units to create ASTs for
+	 * @param encodings the given encoding for the source units
+	 * @param bindingKeys the binding keys to create bindings for
+	 * @param requestor the AST requestor that collects abstract syntax trees and bindings
+	 * @param monitor the progress monitor used to report progress and request cancellation,
+	 *   or <code>null</code> if none
+	 * @exception IllegalStateException if the settings provided
+	 * are insufficient, contradictory, or otherwise unsupported
+	 * @since 3.6
+	 */
+	 public void createASTs(String[] sourceFilePaths, String[] encodings, String[] bindingKeys, FileASTRequestor requestor, IProgressMonitor monitor)
+</pre>
+</li>
+<li>
+Added two new formatter preferences to condense block and javadoc comments.
+<p>
+These new preferences are controlled respectively with the options:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES</code><br>
+<code>DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES</code>
+<pre>
+/**
+ * FORMATTER / Option to control whether block comments will have new lines at boundaries
+ *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries"
+ *     - possible values:   { TRUE, FALSE }
+ *     - default:           TRUE
+ * 
+ * @see #TRUE
+ * @see #FALSE
+ * @since 3.6
+ */
+
+/**
+ * FORMATTER / Option to control whether javadoc comments will have new lines at boundaries
+ *     - option id:         "org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries"
+ *     - possible values:   { TRUE, FALSE }
+ *     - default:           TRUE
+ * 
+ * @see #TRUE
+ * @see #FALSE
+ * @since 3.6
+ */
+ </pre>
+<p>For example, the following snippet:</p>
+<pre>
+public class X {
+	/*
+	 * This block comment after formatting will no longer use a new line
+	 * at the beginning and at the end of the comment...
+	 */
+	void foo() {
+	}
+	/**
+	 * This javadoc comment after formatting will no longer use a new line
+	 * at the beginning and at the end of the comment...
+	 */
+	void bar() {
+	}
+}
+</pre>
+formatted with both the options set to FALSE, will produce the following output:
+<pre>
+public class X {
+	/* This block comment after formatting will no longer use a new line at the
+	 * beginning and at the end of the comment... */
+	void foo() {
+	}
+
+	/** This javadoc comment after formatting will no longer use a new line at
+	 * the beginning and at the end of the comment... */
+	void bar() {
+	}
+}
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a> for more details.
+</li>
+<li>
+The <code>CodeFormatter.F_INCLUDE_COMMENT</code> flag now works for all kind
+of snippet while using the formatter.<br>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a> for more details.
+</li>
+<li>
+Added a new formatter preferences to insert a new line after a label.
+<p>
+This new preference is controlled with the option:</p>
+<code>DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_LABEL</code>
+<pre>
+/**
+ * FORMATTER / Option to insert a new line after a label
+ *     - option id:         "org.eclipse.jdt.core.formatter.insert_new_line_after_label"
+ *     - possible values:   { INSERT, DO_NOT_INSERT }
+ *     - default:           DO_NOT_INSERT
+ *
+ * @see JavaCore#INSERT
+ * @see JavaCore#DO_NOT_INSERT
+ * @since 3.6
+ */
+</pre>
+<p>For example, the following snippet:</p>
+<pre>
+public class X {
+	void foo() {
+		LABEL:for (int i = 0; i < 10; i++) {
+		}
+	}
+}
+</pre>
+formatted with this preference activated, will produce the following output:
+<pre>
+public class X {
+	void foo() {
+		LABEL:
+		for (int i = 0; i < 10; i++) {
+		}
+	}
+}
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a> for more details.
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298362">298362</a>
+[1.5][compiler] Compiler returns java.lang.Object instead of generic type T when javac returns T
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281655">281655</a>
+[formatter] "Never join lines" does not work for annotations.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282030">282030</a>
+[formatter] Java annotation formatting
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270209">270209</a>
+[format] Condensed block comment formatting
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236406">236406</a>
+[formatter] The comments flags should work for all kinds of snippet
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294360">294360</a>
+Duplicate entries in Classpath Resolution when importing dependencies from parent project
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391">206391</a>
+[DOM] Binding Resolutions for projects outside of Eclipse workspace
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150409">150409</a>
+[compiler] AST does not expose method bindings for non-visible inherited field
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302358">302358</a>
+Compiler finds wrong method for method invocation with generics
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302919">302919</a>
+misreported cast Error when mixing generic and raw class in nested class
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741">150741</a>
+[formatter] Add  option: "add new line after label"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287939">287939</a>
+[code assist] The instanceof and the auto cast feature should also work for an assignment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303108">303108</a>
+[import rewrite] ImportRewrite#removeImport(String) does not work with setUseContextToFilterImplicitImports(true)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295619">295619</a>
+Test failure caused by a timing issue in M20091118-0800
+
+<a name="v_A35"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M6 - February 16, 2010
+<br>Project org.eclipse.jdt.core v_A35
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A35">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>In order to fix bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a> and
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>, a new API was added to preserve the existing pre-3.6 behavior for existing clients:<br>
+<pre>
+	/**
+	 * Sets whether a context should be used to properly filter implicit imports.
+	 *
+	 * By default, the option is disabled to preserve pre-3.6 behavior.
+	 *
+	 *
+	 * When this option is set, the context passed to the addImport*(...) methods is used to determine
+	 * whether an import can be filtered because the type is implicitly visible. Note that too many imports
+	 * may be kept if this option is set and addImport*(...) methods are called without a context.
+	 *
+	 * 
+	 * @param useContextToFilterImplicitImports the given setting
+	 * 
+	 * @see #setFilterImplicitImports(boolean)
+	 * @since 3.6
+	 */
+	public void setUseContextToFilterImplicitImports(boolean useContextToFilterImplicitImports);
+</pre>
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302455">302455</a>
+java.lang.ClassCastException in secondary types removal
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102279">102279</a>
+[search] method reference performance depends on method name
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236814">236814</a>
+[jsr199] EclipseCompiler#getTask does not respect its contract when its first argument is null
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302552">302552</a>
+[formatter] Formatting qualified invocations can be broken when the Line Wrapping policy forces element to be on a new line
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302587">302587</a>
+Encoding/decoding of problem arguments in Marker fails if argument contains #
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301438">301438</a>
+Eclipse hangs when attempting to refactor using the "change method signature"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260381">260381</a>
+[formatter] Javadoc formatter breaks {@code ...} tags.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302446">302446</a>
+[compiler] Regression in if statement flow analysis related to null checks
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=194358">194358</a>
+[import rewrite] Organize Imports produces wrong order of imports
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235253">235253</a>
+[organize imports] Organize imports removes needed import statement.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302379">302379</a>
+[search] JavaSearchTests.testZIPArchive2() test failed in I20100209-0800
+
+<a name="v_A34"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M6 - February 9, 2010
+<br>Project org.eclipse.jdt.core v_A34
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A34">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302123">302123</a>
+[formatter] AssertionFailedException occurs while formatting a source containing the specific javadoc comment /** ***/
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300379">300379</a>
+[formatter] Fup of bug 287833
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=250056">250056</a>
+[compiler][null] Another assert and "Redundant null check"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301683">301683</a>
+Annotations are broken when native methods are present in a class
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300734">300734</a>
+Extract temp misses duplicate occurrence.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289560">289560</a>
+Eclipse hangs after modifying user libraries
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=301562">301562</a>
+[JSR269] Error in EclipseFileManager.collectAllMatchingFiles
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298637">298637</a>
+Could not retrieve declared methods (NPE in ParameterizedTypeBinding.resolve)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294057">294057</a>
+[1.5][compiler] Imports not resolved correctly with generics and inner interfaces
+
+<a name="v_A33"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M6 - February 2, 2010
+<br>Project org.eclipse.jdt.core v_A33
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A33">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300136">300136</a>
+classpathentry OPTIONAL attribute not honored for var entries
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300723">300723</a>
+Fup of bug 235783
+
+<a name="v_A32a"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M5 - January 21, 2010 - 3.6.0 M5
+<br>Project org.eclipse.jdt.core v_A32a
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A32a">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300133">300133</a>
+[1.5][compiler] Local classes inside enum constants generate default constructor without implicit constructor call
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300440">300440</a>
+icu dependency needs to be udpated
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299900">299900</a>
+[null]Missing potential null warnings for variable on the right of an OR conditional expression
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293917">293917</a>
+Invalid 'potential null access' warning reports
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252379">252379</a>
+Organize imports deletes needed static import.
+
+<a name="v_A31"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M5 - January 18, 2010
+<br>Project org.eclipse.jdt.core v_A31
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A31">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>New API to fix bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>. See the bug for details.
+<pre>
+/**
+ * Returns a Java search scope limited to the hierarchy of the given type and to a given project.
+ * The Java elements resulting from a search with this scope will be types in this hierarchy.
+ *
+ * Unlike the createHierarchyScope methods, this method creates strict
+ * scopes that only contain types that actually span the hierarchy of the focus
+ * type, but do not include additional enclosing or member types.
+ *
+ *
+ * By default, hierarchy scopes include all direct and indirect supertypes and subtypes of the
+ * focus type. This method, however, allows to restrict the hierarchy to true subtypes,
+ * not including supertypes. Also inclusion of the focus type itself is controled by a parameter. 
+ *
+ * 
+ * @param project the project to which to constrain the search, or null if
+ *        search should consider all types in the workspace 
+ * @param type the focus of the hierarchy scope
+ * @param onlySubtypes if true only subtypes of type are considered
+ * @param includeFocusType if true the focus type type is included in the resulting scope, 
+ * 		  otherwise it is excluded
+ * @param owner the owner of working copies that take precedence over original compilation units, 
+ *        or null if the primary working copy owner should be used
+ * @return a new hierarchy scope
+ * @exception JavaModelException if the hierarchy could not be computed on the given type
+ * @since 3.6
+ */
+public static IJavaSearchScope createStrictHierarchyScope(IJavaProject project, IType type, boolean onlySubtypes, boolean includeFocusType, WorkingCopyOwner owner) throws JavaModelException;
+</pre>
+</li>
+<li>New API added to report a compiler warning when object allocations are unused:
+<pre>
+org.eclipse.jdt.core.compiler.IProblem.UnusedObjectAllocation
+
+/**
+ * Compiler option ID: Reporting Allocation of an Unused Object.
+ * When enabled, the compiler will issue an error or a warning if an object is allocated but never used,
+ * neither by holding a reference nor by invoking one of the object's methods.
+ *
+ * Option id:"org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation"
+ * Possible values:{ "error", "warning", "ignore" }
+ * Default:"ignore"
+ *
+ * @since 3.6
+ * @category CompilerOptionID
+ */
+public static final String COMPILER_PB_UNUSED_OBJECT_ALLOCATION = PLUGIN_ID + ".compiler.problem.unusedObjectAllocation";
+</pre>
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=245007">245007</a>
+[compiler] Should not completely ignore anonymous type with missing super type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295894">295894</a>
+[search] Search shows focus type implementation for nested types even though the scope is restricted to subtypes.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=236385">236385</a>
+[compiler] Warn for potential programming problem if an object is created but not used
+
+<a name="v_A30"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M5 - January 12, 2010
+<br>Project org.eclipse.jdt.core v_A30
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A30">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>New API added to expose the reconcile flags used in the reconcile context:
+<pre>
+/**
+ * Returns the reconcile flag of this context. This flag is a bitwise value of the constant defined
+ * in ICompilationUnit.
+ *
+ * @return the reconcile flag of this context
+ * @since 3.6
+ *
+ * @see ICompilationUnit#ENABLE_BINDINGS_RECOVERY
+ * @see ICompilationUnit#ENABLE_STATEMENTS_RECOVERY
+ * @see ICompilationUnit#IGNORE_METHOD_BODIES
+ */
+public int getReconcileFlags();
+</pre>
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=243917">243917</a>
+[compiler] should not warn about unused field when native method present
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296343">296343</a>
+OOM error caused by java indexing referencing classloader from threadLocal
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=130000">130000</a>
+[API] ReconcileContext API: Does getAST3 return AST with bindings?
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298238">298238</a>
+Unresolved import in superclass causes 'Cannot reduce the visibility of the inherited method' in subclass
+
+<a name="v_A29a"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M5 - January 5, 2010
+<br>Project org.eclipse.jdt.core v_A29a
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A29a">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293861">293861</a>
+Problem with refactoring when existing jar with invalid package names
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264112">264112</a>
+[Formatter] Wrap when necessary too aggressive on short qualifiers
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298250">298250</a>
+[1.6][compiler] NegativeArraySizeException in StackMapFrame.duplicate
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296998">296998</a>
+Unused imports should not prevent execution
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298243">298243</a>
+[formatter] Removing empty lines between import groups
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297546">297546</a>
+[formatter] Formatter removes blank after @see if reference is wrapped
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235781">235781</a>
+[compiler] difference to javac in definite unassignment analysis involving an exception within a constructor
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235783">235783</a>
+[eval] CodeSnippetParser and some 'CodeSnippet*' ast node does not seem up to date
+
+<a name="v_A28"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M5 - December 14, 2009
+<br>Project org.eclipse.jdt.core v_A28
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A28">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196714">196714</a>
+[comment] InvalidInputException prevents the AbstractCommentMapper to retrieve tag element
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297757">297757</a>
+Cannot get bindings for IType corresponding to parameterized anonymous type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255640">255640</a>
+[spec] Methods Signature.toCharArray(..) have unclear precondition
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=262898">262898</a>
+BufferChangedEvent must not have @noinstantiate
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=181682">181682</a>
+JavaConventions.validateJavaTypeName should list valid constants
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108784">108784</a>
+SourceMapper doesn't find name range of inner class constructors
+
+<a name="v_A27"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - December 8, 2009 - 3.6.0 M4
+<br>Project org.eclipse.jdt.core v_A27
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A27">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297225">297225</a>
+[formatter] Indentation may be still wrong in certain circumstances after formatting
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
+JavaSearchBugTests.testBug286379c is failing randomly
+
+<a name="v_A26"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - December 7, 2009
+<br>Project org.eclipse.jdt.core v_A26
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A26">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297045">297045</a>
+Weird tests failures in N20091204-2000 and N20091205-2000 builds
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293300">293300</a>
+[formatter] The formatter is still unstable in certain circumstances
+
+<a name="v_A25"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - December 4, 2009
+<br>Project org.eclipse.jdt.core v_A25
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A25">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>Match result can now report the access rules through a new API added on <code>TypeNameMatch</code>:
+<pre>
+/**
+ * Returns the accessibility of the type name match
+ *
+ * @see IAccessRule
+ *
+ * @return the accessibility of the type name which may be
+ * 		{@link IAccessRule#K_ACCESSIBLE}, {@link IAccessRule#K_DISCOURAGED}
+ * 		or {@link IAccessRule#K_NON_ACCESSIBLE}.
+ * 		The default returned value is {@link IAccessRule#K_ACCESSIBLE}.
+ *
+ * @since 3.6
+ */
+public abstract int getAccessibility();
+</pre>
+See bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a> for more details.
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296277">296277</a>
+[search] SearchEngine#searchAllTypeNames(.., TypeNameMatchRequestor,..) should report access rules
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296708">296708</a>
+[DOM/AST] clarify setters when createASTs(..) is used
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296629">296629</a>
+[quick fix] Cast quick fix not offered for method-local classes
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295948">295948</a>
+ElementImpl.hashCode throws an NPE
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296660">296660</a>
+[compiler] Incorrect unused method warning from compiler
+
+<a name="v_A24"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - December 1, 2009
+<br>Project org.eclipse.jdt.core v_A24
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A24">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>New API added to ignore method bodies inside AST tree. The new APIs are tagged as 3.5.2 as this code
+will be backported to 3.5.2:
+<pre>
+org.eclipse.jdt.core.dom.ASTParser:
+	/**
+	 * Requests an abstract syntax tree without method bodies. 
+	 * 
+	 * When ignore method bodies is enabled, all method bodies are discarded.
+	 * This has no impact on the binding resolution.
+	 *
+	 * If a method contains local types, its method body will be retained.
+	 * This settings is not used if the kind used in setKind(int) is either 
+	 * K_EXPRESSION or K_STATEMENTS.
+	 * @since 3.5.2
+	 */
+	public void setIgnoreMethodBodies(boolean enabled);
+
+org.eclipse.jdt.core.ICompilationUnit:
+	/**
+	 * Constant indicating that a reconcile operation could ignore to parse the method bodies.
+	 * @see ASTParser#setIgnoreMethodBodies(boolean)
+	 * @since 3.5.2
+	 */
+	public static final int IGNORE_METHOD_BODIES = 0x08;
+
+</pre>
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288174">288174</a>
+[search] NullPointerException when searching for type references
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277643">277643</a>
+Generics compile error
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288211">288211</a>
+APT uses a lot of memory
+
+<a name="v_A23"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - November 24, 2009
+<br>Project org.eclipse.jdt.core v_A23
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A23">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295698">295698</a>
+[1.5][compiler] ClassCastException in unchecked warning report
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295260">295260</a>
+Wrong warnings on Java.Compiler.Errors/Warnings "Redundant null check"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=190737">190737</a>
+[compiler][null] missing 'cannot be null' warning within for loop
+
+<a name="v_A22"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - November 16, 2009
+<br>Project org.eclipse.jdt.core v_A22
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A22">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=153429">153429</a>
+JUnit4 in Eclipse Testing Framework
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295238">295238</a>
+[formatter] The comment formatter add an unexpected new line in block comment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295175">295175</a>
+[formatter] Missing space before a string at the beginning of a line in a javadoc comment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294529">294529</a>
+The Scanner sometimes ignores the given offset if larger than the EOF.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294662">294662</a>
+ClassCastException while invoking quick assist
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294404">294404</a>
+-target jsr14 flags error on foreach over Collection that does not implement Iterable
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293955">293955</a>
+valid javadoc url set on user library, but still says no javadoc
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293443">293443</a>
+AbortCompilation when invoking content assist
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293711">293711</a>
+Clarify ICompilationUnit#getOwner() javadoc
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293615">293615</a>
+error message since v3.6.0M2: name clash by overriding generic methods
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294618">294618</a>
+[formatter] The formatter fails to format a compilation unit with deep nesting of html tags
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248312">248312</a>
+[model] IMemberValuePair#getValue() should also work for negative numerals
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294731">294731</a>
+Specify value type of JAVADOC_LOCATION_ATTRIBUTE_NAME
+
+<a name="v_A21"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - November 10, 2009
+<br>Project org.eclipse.jdt.core v_A21
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A21">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294631">294631</a>
+[formatter] The formatter takes two passes to format a common sequence of html tags
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294500">294500</a>
+[formatter] MalformedTreeException when formatting an invalid sequence of <code> tags in a javadoc comment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294488">294488</a>
+Javadoc of ISourceReference#getSourceRange() should link to SourceRange#isAvailable(..)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=199265">199265</a>
+[formatter] 3.3 Code Formatter mis-places commented-out import statements
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241549">241549</a>
+[spec] IType#getFields/Initializers/Methods() should define order from class file
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275805">275805</a>
+creating a non-primary working copy causes typeHierarchyChanged event
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292510">292510</a>
+FUP of 292364: Error messages don't identify partial types precisely.
+
+<a name="v_A20"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M4 - November 3, 2009
+<br>Project org.eclipse.jdt.core v_A20
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A20">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293384">293384</a>
+Eclipse erroneously reports method "is ambiguous for type"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285002">285002</a>
+[compiler] visibility error for package private method
+
+<a name="v_A19"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - October 29, 2009 - 3.6M3
+<br>Project org.eclipse.jdt.core v_A19
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A19">cvs</a>).
+<h2>What's new in this drop</h2>
+This version was created to tentatively fix bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293697">293697</a>
+but it occurs again in subsequent build. So, it has been reopened and moved to next version...
+
+<h3>Problem Reports Fixed</h3>
+
+<a name="v_A18"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - October 28, 2009
+<br>Project org.eclipse.jdt.core v_A18
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A18">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293496">293496</a>
+Adding the serialVersionUID field doesn't work when tab size is 0
+
+<a name="v_A17"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - October 26, 2009
+<br>Project org.eclipse.jdt.core v_A17
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A17">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>Reverted change for bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>.</li>
+</ul>
+<h3>Problem Reports Fixed</h3>
+
+<a name="v_A16"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - October 25, 2009
+<br>Project org.eclipse.jdt.core v_A16
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A16">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=293240">293240</a>
+[formatter] 'insert_space_before_opening_brace_in_array_initializer' preference may be reset in certain circumstances
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=263564">263564</a>
+API to know when default compiler preference settings have been altered
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=289385">289385</a>
+Investigate comment in performance tests
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=286379">286379</a>
+[search] Problem while searching class
+
+<a name="v_A15"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - October 20, 2009
+<br>Project org.eclipse.jdt.core v_A15
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A15">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=292350">292350</a>
+[1.5][compiler] Compiler error: ambiguous method since 3.5.1 using generics and interface inheritance
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=292364">292364</a>
+[internal] Type name in CastExpression not treated as Type name.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292428">292428</a>
+Internal compiler error: NullPointerException at org.eclipse.jdt.internal.compiler.ast.CastExpression.checkUnsafeCast(CastExpression.java:333)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291985">291985</a>
+[compiler][jsr14] Translating Enum with jsr14 target: ECJ causes a runtime error while Sun compiler works fine
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292240">292240</a>
+Compiler error on implementation of raw sub interface
+
+<a name="v_A14"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - October 13, 2009
+<br>Project org.eclipse.jdt.core v_A14
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A14">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291391">291391</a>
+update the Bundle-Version of the JDT Core Batch Compiler (ecj) from 3.3.0 to 3.6.*
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284280">284280</a>
+[1.5][compiler] Error on use generic interface in abstract super class
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286228">286228</a>
+[1.5][compiler] Generics inconsistencies possible regression
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286601">286601</a>
+[formatter] Code formatter formats anonymous inner classes wrongly when 'Never join lines' is on
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=215139">215139</a>
+[search] More options for HierarchyScope
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291472">291472</a>
+[1.5][compiler] Access to a generic method is compiled incorrectly
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283539">283539</a>
+NamingConventions.suggestVariableNames doesn't work if name contains '_'
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280784">280784</a>
+[batch] Allow access restrictions to be reported as errors
+
+<a name="v_A13"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - October 6, 2009
+<br>Project org.eclipse.jdt.core v_A13
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A13">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>Reverted fix for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=106478">106478</a>.</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291322">291322</a>
+Test errors when running JDT Core tests on Windows 7
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282770">282770</a>
+[compiler] Dead code detection should have specific @SuppressWarnings
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290028">290028</a>
+Use IResource#setDerived(boolean, IProgressMonitor) instead of IResource#setDerived(boolean)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287607">287607</a>
+[1.5][compiler] cast of inner of generic enclosing type are not reported as unsafe
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288749">288749</a>
+Redundant superinterface not flagged inside one declaration
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290905">290905</a>
+[formatter] Certain formatter pref constellation cause endless loop ==> OOME
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285124">285124</a>
+serialVersionUID still causes error/warning
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290877">290877</a>
+[DOM] If using a tag named '@enum' the ASTParser ignores this
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281575">281575</a>
+Eclipse hangs in SourceMapper while doing java proposals
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290470">290470</a>
+[JSR199][compiler] JDT compiler not jsr199 compatible.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290730">290730</a>
+Rewriting SwitchStatement throws NPE
+
+<a name="v_A12"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - September 29, 2009
+<br>Project org.eclipse.jdt.core v_A12
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A12">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287676">287676</a>
+[1.5][compiler] Useless cast warning not emited
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290563">290563</a>
+add specification for fine grain search flags
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290376">290376</a>
+Errant "Comparing identical expressions" warning with assignment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287592">287592</a>
+[1.5][compiler] Wrong ambiguous compilation error
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290049">290049</a>
+Reconciling a compilation unit does not return an AST with bindings when it should (probably)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290034">290034</a>
+Effects of @SuppressWarnings("unchecked") are broader in Eclipse than in javac
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267561">267561</a>
+[evaluation] LocalEvaluationEngine does not accept primitive types
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194">163194</a>
+[1.6] compiler should warn about missing @Override annotation for interface method
+
+<a name="v_A11"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M3 - September 22, 2009
+<br>Project org.eclipse.jdt.core v_A11
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A11">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289892">289892</a>
+[compiler] NPE during binaryTypeBinding field initialization
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287833">287833</a>
+[formatter] Formatter removes the first character after the * in the <pre> tag
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=238943">238943</a>
+SortElementsOperation doesn't use project specific settings
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288621">288621</a>
+[1.5][compiler] Creating type hierarchy failed when pressing F4
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289538">289538</a>
+[1.5][compiler] compiler fails to generate correct code for private constructor in inner class
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289639">289639</a>
+Problems opening perspective JavaPerspective, NPE on JavaModelManager.containersReset()
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289516">289516</a>
+Annotations (visible and invisible) should be preserved with target jsr14
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289576">289576</a>
+[1.5][compiler] Compiler changes 'private' modifier on methods with annotated parameter
+
+<a name="v_A10"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M2 - September 14, 2009 - 3.6M2
+<br>Project org.eclipse.jdt.core v_A10
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A10">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288148">288148</a>
+[perfs] Comments applied for performance tests may be obsolete
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289247">289247</a>
+[1.5][compiler]Detecting duplicate methods should not consider return type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288920">288920</a>
+[compiler] NPE renaming run() method
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=288698">288698</a>
+Cannot create type hierarchy for abstract types when they have inline descendants and *.class* in project name
+
+<a name="v_A09"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M2 - September 1, 2009
+<br>Project org.eclipse.jdt.core v_A09
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A09">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287009">287009</a>
+Inner Annotation Checks are Missing
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287701">287701</a>
+[dom] Length of Assignment should not include whitespace
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285230">285230</a>
+[performance] Duplicate buffers created for internal classes
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286391">286391</a>
+[compiler] jsr14 target behavior changed between ECJ 3.4.2 and ECJ 3.5
+
+<a name="v_A08"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M2 - August 25, 2009
+<br>Project org.eclipse.jdt.core v_A08
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A08">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287462">287462</a>
+[formatter] new failures in last 2 nightly builds
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285565">285565</a>
+[inline] Inlining constant or local variables causes exceptions with tab width 0
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285799">285799</a>
+HashtableOfObject rehashes and grows buffer on removeKey()
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286912">286912</a>
+[formatter] Never join lines preferences makes the formatter unstable in certain circumstances
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286668">286668</a>
+[formatter] 'Never Join Lines' joins lines that are split on method invocation
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248661">248661</a>
+Axis2:  Missing required libraries in Axis 2 WS Client Projects
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286918">286918</a>
+[javadoc] Compiler should warn when @see and @link tag references in package-info.java don't have fully qualified names
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285466">285466</a>
+[3.5 regression] fails to build IcedTea, works with 3.4.x
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286956">286956</a>
+NPE when asking to externalize constant
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281609">281609</a>
+[javadoc] "Javadoc: Invalid reference" warning for @link to Java package
+
+<a name="v_A07"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M2 - August 18, 2009
+<br>Project org.eclipse.jdt.core v_A07
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A07">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286840">286840</a>
+ClasspathJar getPath() should return a unique path
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=254738">254738</a>
+NPE in HierarchyResolver.setFocusType
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276294">276294</a>
+Error does not go away after it is resolved
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284785">284785</a>
+[1.5][compiler] Eclipse compiler shows error on javac-valid construct: varargs plus overload
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286405">286405</a>
+Default value character of annotations in ClassFileEditor are badly printed
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=286407">286407</a>
+[Model] IMemberValuePair don't return the right value for java.lang.annotation.RetentionPolicy annotations
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=285701">285701</a>
+[1.5][compiler] Internal Compiler Error - ArrayIndexOutOfBoundsException
+
+<a name="v_A06"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M1 - August 3, 2009 - 3.6M1
+<br>Project org.eclipse.jdt.core v_A06
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A06">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284948">284948</a>
+[1.6][compiler] Java annotations are broken in editor when used on interface methods
+
+<a name="v_A05"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M1 - July 30, 2009
+<br>Project org.eclipse.jdt.core v_A05
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A05">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276526">276526</a>
+[content assist] Error - Type Duplicate interface Iterable for the type TestClass
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
+JavaProject#getOption optimizations
+
+<a name="v_A04"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M1 - July 28, 2009
+<br>Project org.eclipse.jdt.core v_A04
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A04">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=261909">261909</a>
+ClassFileReader.getModifiers() answers funny bits
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283225">283225</a>
+[1.6][compiler] classfile versus source conformance check too strict
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284679">284679</a>
+[formatter] empty single semi statement prevent enum elements format
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284482">284482</a>
+[compiler] Collision cases not detected
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284431">284431</a>
+Different inherited thrown exception clauses are not properly handled
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=133911">133911</a>
+type.move() returns unclear exception "invalid destination"
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270436">270436</a>
+[assist] Interface type proposed where only class is legal
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=210385">210385</a>
+[compiler] ProblemReporter#getProblemCategory misbehaves when passed ProblemSeverities.Ignore as severity parameter
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282891">282891</a>
+[compiler] "Comparing identical expressions" warning sometimes invalid
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282869">282869</a>
+[compiler] Unnecessary cast warning for cast from char to int
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270437">270437</a>
+[assist] Completion proposal leads to cycle detected error
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=217443">217443</a>
+Documentation for JavaCore#CORE_ENCODING does not match the observed behavior
+
+<a name="v_A03"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M1 - July 21, 2009
+<br>Project org.eclipse.jdt.core v_A03
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A03">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283467">283467</a>
+[formatter] wrong indentation with 'Never join lines' selected
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281776">281776</a>
+Should not warn for comparison of identical expression with float type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282768">282768</a>
+[compiler] Dead code detection should ignore trivial case for ternary if operator
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283133">283133</a>
+[formatter] IAE when pasting a snippet
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283299">283299</a>
+Complete SourceRange API
+
+<a name="v_A02"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java Development Tooling Core</h1>
+Eclipse SDK 3.6M1 - July 13, 2009
+<br>Project org.eclipse.jdt.core v_A02
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A02">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>Added new API type org.eclipse.jdt.core.SourceRange</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271296">271296</a>
+[assist] void typed proposal may not be appropriate in many contexts
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281871">281871</a>
+[content assist] The extension took too long to return from the 'computeCompletionProposals()' operation
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281598">281598</a>
+[assist] Problems during content assist - if project has empty zip file in classpath
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235294">235294</a>
+[formatter] javadoc for DefaultCodeFormatterConstants#FORMATTER_ALIGNMENT_FOR_ASSIGNMENT cites a non-API constant
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280497">280497</a>
+Incorrect null result for IJavaProject.getClasspathEntryFor(IPath)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=204777">204777</a>
+Clarify documentation for ITypeHierarchy created on interface types
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=88265">88265</a>
+Make SourceRange API
+
+<a name="v_A01"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M1 - July 7, 2009
+<br>Project org.eclipse.jdt.core v_A01
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A01">cvs</a>).
+<h2>What's new in this drop</h2>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=260968">260968</a>
+Deadlock in UserLibraryManager
+
+<a name="v_A00"></a>
+<hr><h1>
+Eclipse Platform Build Notes<br>
+Java development tools core</h1>
+Eclipse SDK 3.6M1 - June 30, 2009
+<br>Project org.eclipse.jdt.core v_A00
+(<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A00">cvs</a>).
+<h2>What's new in this drop</h2>
+<ul>
+<li>New API added to handle the new <code>invokedynamic</code> bytecode:
+<pre>
+org.eclipse.jdt.core.util.ByteCodeVisitorAdapter:
+	public void _invokedynamic(
+			int pc,
+			int index,
+			IConstantPoolEntry nameEntry,
+			IConstantPoolEntry descriptorEntry) {
+		// default behavior is to do nothing
+	}
+</pre>
+<pre>org.eclipse.jdt.core.util.IBytecodeVisitor#_invokedynamic(int, int, IConstantPoolEntry, IConstantPoolEntry)</pre>
+<pre>org.eclipse.jdt.core.util.IOpcodeMnemonics#INVOKEDYNAMIC</pre>
+</li>
+</ul>
+
+<h3>Problem Reports Fixed</h3>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277450">277450</a>
+[1.5][compiler] Problems with += and Autoboxing/Unboxing
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=206498">206498</a>
+[1.7][compiler] Remove fix for bug 206483 once 1.7 VMS can handle .class files with version 51.0
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191176">191176</a>
+JavaProject#getOption optimizations
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201762">201762</a>
+Content Assist has no proposals with certain CU structure
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281681">281681</a>
+Stale code in CompilerOptions
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231796">231796</a>
+[formatter] @throws tag description is not indented using @param preference when there's a syntax error
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255142">255142</a>
+[select] Codeselect should not omit cast
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235295">235295</a>
+[formatter] javadoc of CodeFormatter#F_INCLUDE_COMMENTS needs improvement
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280134">280134</a>
+[1.5][compiler] Requesting Java AST from selection has encountered a problem
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=281317">281317</a>
+[search] An internal error occurred during: "Java Search".
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276373">276373</a>
+Incorrect resource comparison with IJavaProject.isOnClasspath(IResource)
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275518">275518</a>
+[assist] Content assist does not provide proposals if invoked right after a method's opening brace
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280888">280888</a>
+change a java file in one plug-in will compile all related plugin projects
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274466">274466</a>
+[assist] Assert expressions should be proposed with high relevance
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277382">277382</a>
+NPE and other failures in Parser
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275330">275330</a>
+NPE from org.eclipse.jdt.internal.core.ClasspathChange.requestIndexing
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273385">273385</a>
+[model] NPE while closing project
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280079">280079</a>
+NPE while parsing K_CLASS_BODY_DECLARATIONS
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280063">280063</a>
+org.eclipse.jdt.internal.compiler.parser.Parser.parseClassBodyDeclarations(char[], int, int, CompilationUnitDeclaration) should return consistent results
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267046">267046</a>
+SourceMapper infinite loop on primitive type in generic
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=240934">240934</a>
+Add support for the invokedynamic bytecode into the disassembler
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267551">267551</a>
+[formatter] Wrong spacing in default array parameter for annotation type
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277965">277965</a>
+[compiler] NPE in canBeSeenBy due to illegal protected toplevel class
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273990">273990</a>
+[compiler] FUP of 269388: Eclipse accepts code rejected by javac
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279183">279183</a>
+[1.6][compiler] Inconsistent stackmap frames generated by JDT cause VerifyError
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209778">209778</a>
+[search] TypeReferenceMatch#getOtherElements() fails for match in annotation
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=221065">221065</a>
+[search] Search still finds overridden method
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279836">279836</a>
+[1.5][compiler] Eclipse compiler shows error on javac-valid construct: raw types on overridden methods
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280616">280616</a>
+[formatter] Valid 1.5 code is not formatted inside <pre> tag
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280255">280255</a>
+[formatter] Format edited lines adds two new lines on each save
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280061">280061</a>
+[formatter] AIOOBE while formatting javadoc comment
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276938">276938</a>
+Remove unreachable removes reachable logic in case statement.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274898">274898</a>
+[recovery] IllegalArgumentException in ASTNode#setSourceRange()
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277204">277204</a>
+IAE in SharedASTProvider for generic local class.
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276741">276741</a>
+comparing identical value detection does not work for this
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276740">276740</a>
+comparing identical value detection does not work for primitive types
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278745">278745</a>
+Methods overloaded with unavailable types worked in 3.4 but give "indirectly referenced.." error in 3.5
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278305">278305</a>
+[1.5][compiler] JDT accepts supertype parameterized with wildcard
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196308">196308</a>
+[formatter] Don't escape entity when formatting in <pre> tags within javadoc comments
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279359">279359</a>
+[formatter] Formatter with 'never join lines' produces extra level of indent
+<br><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273619">273619</a>
+[formatter] Formatting repeats *} in javadoc
+
+<hr>
+<p>For earlier build notes, also see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.jdt.core/notes/R35_buildnotes_jdt-core.html">build notes up to Release 3.5</a>.</p>
+<br>
+  <p>
+    <a href="http://validator.w3.org/check?uri=referer"><img
+        src="http://www.w3.org/Icons/valid-html401"
+        alt="Valid HTML 4.01 Transitional" height="31" width="88"></a>
+  </p>
+</body>
+</html>
+
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9c26db8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.jdt.core.ant.compiler.adapter;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-ClassPath: bogus
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Import-Package: org.eclipse.jdt.core.compiler,
+ org.eclipse.jdt.internal.antadapter,
+ org.eclipse.jdt.internal.compiler.batch,
+ org.eclipse.jdt.internal.compiler.impl,
+ org.eclipse.jdt.internal.compiler.util
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/plugin.properties b/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/plugin.properties
new file mode 100644
index 0000000..c474505
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/plugin.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2010 EclipseSource Inc. and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     EclipseSource Inc. - initial API and implementation
+###############################################################################
+
+providerName=Eclipse.org
+pluginName=JDT ECJ Ant Compiler Adapter
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/plugin.xml b/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/plugin.xml
new file mode 100644
index 0000000..acbb711
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/antadapter/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2010 EclipseSource Inc. and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+
+    Contributors:
+      EclipseSource Inc. - initial API and implementation
+ -->
+<plugin>
+<extension 
+	point="org.eclipse.ant.core.extraClasspathEntries">
+	<extraClasspathEntry
+		library="/">
+	</extraClasspathEntry>
+</extension> 
+</plugin>
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/binary/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.core/scripts/binary/META-INF/MANIFEST.MF
index 2adaf31..2fda856 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/scripts/binary/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/binary/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main
 Bundle-ManifestVersion: 2
 Bundle-Name: Eclipse Compiler for Java(TM)
 Bundle-SymbolicName: org.eclipse.jdt.core.compiler.batch
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: Eclipse.org
 Export-Package: org.eclipse.jdt.core,
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/build.xml b/eclipse/plugins/org.eclipse.jdt.core/scripts/build.xml
index 93889c8..d5c52ba 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/scripts/build.xml
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/build.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-    Copyright (c) 2007, 2009 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2007, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/build_ecj.xml b/eclipse/plugins/org.eclipse.jdt.core/scripts/build_ecj.xml
index 66c7030..20807dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/scripts/build_ecj.xml
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/build_ecj.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-    Copyright (c) 2007, 2009 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2007, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/export-ecj.xml b/eclipse/plugins/org.eclipse.jdt.core/scripts/export-ecj.xml
index c4ec3ba..ee50589 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/scripts/export-ecj.xml
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/export-ecj.xml
@@ -93,13 +93,13 @@
 		</zip>
 
 
-		<echo message="UPDATE ecjsrc-${buildLabel}.zip" />
-		<delete file="${dest}/ecjsrc-${buildLabel}.zip" failonerror="false"/>
+		<echo message="UPDATE ecjsrc-${buildLabel}.jar" />
+		<delete file="${dest}/ecjsrc-${buildLabel}.jar" failonerror="false"/>
 		<copy todir="${ecj-temp-src-folder}">
 			<fileset dir="scripts/source" />
 		</copy>
 		<replace file="${ecj-temp-src-folder}/META-INF/MANIFEST.MF" token="qualifier" value="${buildLabel}"/>
-		<zip zipfile="${dest}/ecjsrc-${buildLabel}.zip">
+		<zip zipfile="${dest}/ecjsrc-${buildLabel}.jar">
 			<zipfileset dir="ecj-temp-src-folder" />
 			<zipfileset dir="batch" />
 			<zipfileset dir="compiler" />
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/export-ejavac_linux.xml b/eclipse/plugins/org.eclipse.jdt.core/scripts/export-ejavac_linux.xml
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/exportplugin.xml b/eclipse/plugins/org.eclipse.jdt.core/scripts/exportplugin.xml
index f15df63..35cd6c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/scripts/exportplugin.xml
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/exportplugin.xml
@@ -12,118 +12,26 @@
  -->
 
 <!-- build script to create a plugin from ${plugin} -->
-<project name="${plugin}" default="export plug-in [_3.6.0]" basedir="..">
-<target name="export plug-in [_3.6.0]">
+<project name="${plugin}" default="export plug-in [_3.7.0]" basedir="..">
+<target name="export plug-in [_3.7.0]">
     <tstamp/>
 	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
 	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.6.0"/>
+		<param name="jdt_core_version" value="3.7.0"/>
 	</antcall>
 </target>
-<target name="export plug-in [_3.6.0.qualifier] (binary only)">
+<target name="export plug-in [_3.7.0.qualifier] (binary only)">
     <tstamp/>
 	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
 	<antcall target="zz_internal_export_binary_only">
-		<param name="jdt_core_version" value="3.6.0.${qualifier}"/>
+		<param name="jdt_core_version" value="3.7.0.${qualifier}"/>
 	</antcall>
 </target>
-<target name="export plug-in [_3.6.0.qualifier] (with sources)">
+<target name="export plug-in [_3.7.0.qualifier] (with sources)">
     <tstamp/>
 	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
 	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.6.0.${qualifier}"/>
-	</antcall>
-</target>
-<target name="export plug-in [_3.5.0]">
-    <tstamp/>
-	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.5.0"/>
-	</antcall>
-</target>
-<target name="export plug-in [_3.5.0.qualifier] (binary only)">
-    <tstamp/>
-	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
-	<antcall target="zz_internal_export_binary_only">
-		<param name="jdt_core_version" value="3.5.0.${qualifier}"/>
-	</antcall>
-</target>
-<target name="export plug-in [_3.5.0.qualifier] (with sources)">
-    <tstamp/>
-	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.5.0.${qualifier}"/>
-	</antcall>
-</target>
-	<target name="export plug-in [_3.4.0]">
-	    <tstamp/>
-		<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
-		<antcall target="zz_internal_export">
-			<param name="jdt_core_version" value="3.4.0"/>
-		</antcall>
-	</target>
-<target name="export plug-in [_3.3.0]">
-    <tstamp/>
-	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.3.0"/>
-	</antcall>
-</target>
-<target name="export plug-in [_3.2.1]">
-    <tstamp/>
-	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.2.1"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_3.2.0]">
-    <tstamp/>
-	<property name="qualifier" value="z${DSTAMP}-${TSTAMP}" />
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.2.0"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_3.1.0]">
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.1.0"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_3.0.0]">
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="3.0.0"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_2.1.1]">
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="2.1.1"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_2.1.0]">
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="2.1.0"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_2.0.1]">
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="2.0.1"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_2.0.0]">
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="2.0.0"/>
-	</antcall>
-</target>
-
-<target name="export plug-in [_1.9.0]">
-	<antcall target="zz_internal_export">
-		<param name="jdt_core_version" value="1.9.0"/>
+		<param name="jdt_core_version" value="3.7.0.${qualifier}"/>
 	</antcall>
 </target>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/scripts/source/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.core/scripts/source/META-INF/MANIFEST.MF
index 1966ba5..a2344e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/scripts/source/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.core/scripts/source/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Source of Eclipse Compiler for Java(TM)
 Bundle-SymbolicName: org.eclipse.jdt.core.compiler.batch.source
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: Eclipse.org
-Eclipse-SourceBundle: org.eclipse.jdt.core.compiler.batch;version="3.6.0.qualifier";roots:="."
+Eclipse-SourceBundle: org.eclipse.jdt.core.compiler.batch;version="3.7.0.qualifier";roots:="."
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchEngine.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchEngine.java
index 26763cd..37b8436 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchEngine.java
@@ -245,16 +245,16 @@ public class SearchEngine {
 	 * The Java elements resulting from a search with this scope will
 	 * be children of the given elements.
 	 * <p>
-	 * If an element is an IJavaProject, then the project's source folders,
+	 * If an element is an {@link IJavaProject}, then the project's source folders,
 	 * its jars (external and internal) and its referenced projects (with their source
-	 * folders and jars, recursively) will be included.
-	 * If an element is an IPackageFragmentRoot, then only the package fragments of
-	 * this package fragment root will be included.
-	 * If an element is an IPackageFragment, then only the compilation unit and class
+	 * folders and jars, recursively) will be included.</p>
+	 * <p>If an element is an {@link IPackageFragmentRoot}, then only the package fragments of
+	 * this package fragment root will be included.</p>
+	 * <p>If an element is an {@link IPackageFragment}, then only the compilation unit and class
 	 * files of this package fragment will be included. Subpackages will NOT be
 	 * included.</p>
-	 * <p>
-	 * In other words, this is equivalent to using SearchEngine.createJavaSearchScope(elements, true).</p>
+	 *
+	 * <p>In other words, this is equivalent to using SearchEngine.createJavaSearchScope(elements, true).</p>
 	 *
 	 * @param elements the Java elements the scope is limited to
 	 * @return a new Java search scope
@@ -269,14 +269,14 @@ public class SearchEngine {
 	 * The Java elements resulting from a search with this scope will
 	 * be children of the given elements.
 	 *
-	 * If an element is an IJavaProject, then the project's source folders,
+	 * <p>If an element is an {@link IJavaProject}, then the project's source folders,
 	 * its jars (external and internal) and - if specified - its referenced projects
-	 * (with their source folders and jars, recursively) will be included.
-	 * If an element is an IPackageFragmentRoot, then only the package fragments of
-	 * this package fragment root will be included.
-	 * If an element is an IPackageFragment, then only the compilation unit and class
+	 * (with their source folders and jars, recursively) will be included.</p>
+	 * <p>If an element is an {@link IPackageFragmentRoot}, then only the package fragments of
+	 * this package fragment root will be included.</p>
+	 * <p>If an element is an {@link IPackageFragment}, then only the compilation unit and class
 	 * files of this package fragment will be included. Subpackages will NOT be
-	 * included.
+	 * included.</p>
 	 *
 	 * @param elements the Java elements the scope is limited to
 	 * @param includeReferencedProjects a flag indicating if referenced projects must be
@@ -293,22 +293,24 @@ public class SearchEngine {
 	 * The Java elements resulting from a search with this scope will
 	 * be children of the given elements.
 	 *
-	 * If an element is an IJavaProject, then it includes:
-	 * - its source folders if IJavaSearchScope.SOURCES is specified,
-	 * - its application libraries (internal and external jars, class folders that are on the raw classpath,
+	 * <p>If an element is an IJavaProject, then it includes:</p>
+	 * <ul>
+	 * <li>its source folders if {@link IJavaSearchScope#SOURCES} is specified,</li>
+	 * <li>its application libraries (internal and external jars, class folders that are on the raw classpath,
 	 *   or the ones that are coming from a classpath path variable,
 	 *   or the ones that are coming from a classpath container with the K_APPLICATION kind)
-	 *   if IJavaSearchScope.APPLICATION_LIBRARIES is specified
-	 * - its system libraries (internal and external jars, class folders that are coming from an
+	 *   if {@link IJavaSearchScope#APPLICATION_LIBRARIES} is specified</li>
+	 * <li>its system libraries (internal and external jars, class folders that are coming from an
 	 *   IClasspathContainer with the K_SYSTEM kind)
-	 *   if IJavaSearchScope.APPLICATION_LIBRARIES is specified
-	 * - its referenced projects (with their source folders and jars, recursively)
-	 *   if IJavaSearchScope.REFERENCED_PROJECTS is specified.
-	 * If an element is an IPackageFragmentRoot, then only the package fragments of
-	 * this package fragment root will be included.
-	 * If an element is an IPackageFragment, then only the compilation unit and class
+	 *   if {@link IJavaSearchScope#SYSTEM_LIBRARIES} is specified</li>
+	 * <li>its referenced projects (with their source folders and jars, recursively)
+	 *   if {@link IJavaSearchScope#REFERENCED_PROJECTS} is specified.</li>
+	 * </ul>
+	 * <p>If an element is an {@link IPackageFragmentRoot}, then only the package fragments of
+	 * this package fragment root will be included.</p>
+	 * <p>If an element is an {@link IPackageFragment}, then only the compilation unit and class
 	 * files of this package fragment will be included. Subpackages will NOT be
-	 * included.
+	 * included.</p>
 	 *
 	 * @param elements the Java elements the scope is limited to
 	 * @param includeMask the bit-wise OR of all include types of interest
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java
index fa4f83e..4e3f6c4 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/core/search/SearchParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -201,7 +201,7 @@ public abstract class SearchParticipant {
 		if (file instanceof IResource) {
 			containerPath = ((IResource)file).getProject().getFullPath();
 		} else if (file == null) {
-			containerPath = documentPath.removeLastSegments(documentPath.segmentCount()-1);
+			containerPath = documentPath.removeLastSegments(1);
 		}
 		IndexManager manager = JavaModelManager.getIndexManager();
 		// TODO (frederic) should not have to create index manually, should expose API that recreates index instead
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/index/DiskIndex.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/index/DiskIndex.java
index 2724ec3..050a354 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/index/DiskIndex.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/index/DiskIndex.java
@@ -279,7 +279,6 @@ private String[] computeDocumentNames(String[] onDiskNames, int[] positions, Sim
 
 	// find out if the memory index has any new or deleted documents, if not then the names & positions are the same
 	int numDeletedDocNames = 0;
-	int numReindexedDocNames = 0;
 	nextPath : for (int i = 0, l = docNames.length; i < l; i++) {
 		String docName = (String) docNames[i];
 		if (docName != null) {
@@ -290,7 +289,6 @@ private String[] computeDocumentNames(String[] onDiskNames, int[] positions, Sim
 						numDeletedDocNames++;
 					} else {
 						positions[j] = RE_INDEXED;
-						numReindexedDocNames++;
 					}
 					continue nextPath;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/StringOperation.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/StringOperation.java
index 4009ee4..6c654ab 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/StringOperation.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/StringOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -317,7 +317,6 @@ public static final int[] getPatternMatchingRegions(
 	if (nameEnd < 0)
 		nameEnd = name.length();
 	int questions = 0;
-	int stars = 0;
 	int parts = 0;
 	char previous = 0;
 	for (int i=patternStart; i<patternEnd; i++) {
@@ -327,7 +326,6 @@ public static final int[] getPatternMatchingRegions(
 				questions++;
 				break;
 			case '*':
-				stars++;
 				break;
 			default:
 				switch (previous) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/BinaryIndexer.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/BinaryIndexer.java
index 95e17b2..9c7538e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/BinaryIndexer.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/BinaryIndexer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -798,7 +798,7 @@ public class BinaryIndexer extends AbstractIndexer implements SuffixConstants {
 		if (descriptor[0] != '(') return descriptor;
 		if (descriptor[1] != ')') {
 			// remove the first synthetic parameter
-			int start = Util.scanTypeSignature(descriptor, 1) + 1;
+			int start = org.eclipse.jdt.internal.compiler.util.Util.scanTypeSignature(descriptor, 1) + 1;
 			int length = descriptor.length - start;
 			char[] signature = new char[length + 1];
 			signature[0] = descriptor[0];
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java
index df800ed..f08c249 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java
@@ -134,7 +134,7 @@ public void cleanUpIndexes() {
 	}
 	deleteIndexFiles(knownPaths);
 }
-public IPath computeIndexLocation(IPath containerPath) {
+public synchronized IPath computeIndexLocation(IPath containerPath) {
 	IPath indexLocation = (IPath) this.indexLocations.get(containerPath);
 	if (indexLocation == null) {
 		String pathString = containerPath.toOSString();
@@ -173,7 +173,7 @@ private void deleteIndexFiles(SimpleSet pathsToKeep) {
 /*
  * Creates an empty index at the given location, for the given container path, if none exist.
  */
-public void ensureIndexExists(IPath indexLocation, IPath containerPath) {
+public synchronized void ensureIndexExists(IPath indexLocation, IPath containerPath) {
 	SimpleLookupTable states = getIndexStates();
 	Object state = states.get(indexLocation);
 	if (state == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/SourceIndexerRequestor.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/SourceIndexerRequestor.java
index c66fb71..4ada576 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/SourceIndexerRequestor.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/SourceIndexerRequestor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,9 +74,9 @@ public void acceptFieldReference(char[] fieldName, int sourcePosition) {
 	this.indexer.addFieldReference(fieldName);
 }
 /**
- * @see ISourceElementRequestor#acceptImport(int, int, char[][], boolean, int)
+ * @see ISourceElementRequestor#acceptImport(int, int, int, int, char[][], boolean, int)
  */
-public void acceptImport(int declarationStart, int declarationEnd, char[][] tokens, boolean onDemand, int modifiers) {
+public void acceptImport(int declarationStart, int declarationEnd, int nameStart, int nameEnd, char[][] tokens, boolean onDemand, int modifiers) {
 	// imports have already been reported while creating the ImportRef node (see SourceElementParser#comsume*ImportDeclarationName() methods)
 }
 /**
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/AndLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/AndLocator.java
index 73e0f92..e026c7f 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/AndLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/AndLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -255,4 +255,13 @@ public int resolveLevel(Binding binding) {
 	}
 	return level;
 }
+/* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.core.search.matching.PatternLocator#setFlavors(int)
+ */
+void setFlavors(int flavors) {
+	for (int i = 0, length = this.patternLocators.length; i < length; i++) {
+		this.patternLocators[i].setFlavors(flavors);
+	}
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/ClassFileMatchLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/ClassFileMatchLocator.java
index 861cc16..0d7f62a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/ClassFileMatchLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/ClassFileMatchLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -269,11 +269,9 @@ public void locateMatches(MatchLocator locator, ClassFile classFile, IBinaryType
 		if (matchBinary(pattern, method, info)) {
 			char[] name;
 			if (method.isConstructor()) {
-				name = info.getName();
-				int lastSlash = CharOperation.lastIndexOf('/', name);
-				if (lastSlash != -1) {
-					name = CharOperation.subarray(name, lastSlash+1, name.length);
-				}
+				// https://bugs.eclipse.org/bugs/show_bug.cgi?id=329727
+				// We don't need the enclosing type name for the constructor name
+				name = info.getSourceName();
 			} else {
 				name = method.getSelector();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/FieldLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/FieldLocator.java
index b3aa408..278f087 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/FieldLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/FieldLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -278,7 +278,8 @@ protected void reportDeclaration(FieldBinding fieldBinding, MatchLocator locator
 			TypeDeclaration typeDecl = scope.referenceContext;
 			FieldDeclaration fieldDecl = null;
 			FieldDeclaration[] fieldDecls = typeDecl.fields;
-			for (int i = 0, length = fieldDecls.length; i < length; i++) {
+			int length = fieldDecls == null ? 0 : fieldDecls.length;
+			for (int i = 0; i < length; i++) {
 				if (CharOperation.equals(bindingName, fieldDecls[i].name)) {
 					fieldDecl = fieldDecls[i];
 					break;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java
index 661b08b..93f987e 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java
@@ -556,10 +556,11 @@ protected IJavaElement createHandle(FieldDeclaration fieldDeclaration, TypeDecla
 		// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=98378
 		return type;
 	}
-	// find occurence count of the given initializer in its type declaration
+	// find occurrence count of the given initializer in its type declaration
 	int occurrenceCount = 0;
 	FieldDeclaration[] fields = typeDeclaration.fields;
-	for (int i = 0, length = fields.length; i < length; i++) {
+	int length = fields == null ? 0 : fields.length;
+	for (int i = 0; i < length; i++) {
 		if (fields[i].getKind() == AbstractVariableDeclaration.INITIALIZER) {
 			occurrenceCount++;
 			if (fields[i].equals(fieldDeclaration)) break;
@@ -581,7 +582,9 @@ protected IJavaElement createHandle(AbstractVariableDeclaration variableDeclarat
 					variableDeclaration.sourceStart,
 					variableDeclaration.sourceEnd,
 					new String(variableDeclaration.type.resolvedType.signature()),
-					variableDeclaration.annotations
+					variableDeclaration.annotations,
+					variableDeclaration.modifiers,
+					false
 				);
 			}
 			break;
@@ -594,7 +597,9 @@ protected IJavaElement createHandle(AbstractVariableDeclaration variableDeclarat
 					variableDeclaration.sourceStart,
 					variableDeclaration.sourceEnd,
 					new String(variableDeclaration.type.resolvedType.signature()),
-					variableDeclaration.annotations
+					variableDeclaration.annotations,
+					variableDeclaration.modifiers,
+					true
 				);
 			}
 			break;
@@ -740,7 +745,7 @@ private boolean filterEnum(SearchMatch match) {
 	IJavaElement element = (IJavaElement)match.getElement();
 	PackageFragment pkg = (PackageFragment)element.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
 	if (pkg != null) {
-		// enum was found in org.apache.commons.lang.enum at index 4
+		// enum was found in org.apache.commons.lang.enum at index 5
 		if (pkg.names.length == 5 && pkg.names[4].equals("enum")) {  //$NON-NLS-1$
 			if (this.options == null) {
 				IJavaProject proj = (IJavaProject)pkg.getAncestor(IJavaElement.JAVA_PROJECT);
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java
index b7ee6fd..04ab97b 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -213,54 +213,46 @@ protected void consumeCastExpressionLL1() {
 	super.consumeCastExpressionLL1();
 	if ((this.patternFineGrain & IJavaSearchConstants.CAST_TYPE_REFERENCE) != 0) {
 		CastExpression castExpression = (CastExpression) this.expressionStack[this.expressionPtr];
-		if (castExpression.type instanceof TypeReference) {
-			this.patternLocator.match((TypeReference) castExpression.type, this.nodeSet);
-        }
+		this.patternLocator.match(castExpression.type, this.nodeSet);
 	}
 }
 protected void consumeCastExpressionWithGenericsArray() {
 	super.consumeCastExpressionWithGenericsArray();
 	if ((this.patternFineGrain & IJavaSearchConstants.CAST_TYPE_REFERENCE) != 0) {
 		CastExpression castExpression = (CastExpression) this.expressionStack[this.expressionPtr];
-		if (castExpression.type instanceof Reference) {
-			this.patternLocator.match((Reference) castExpression.type, this.nodeSet);
-        }
+		this.patternLocator.match(castExpression.type, this.nodeSet);
 	}
 }
 protected void consumeCastExpressionWithNameArray() {
 	super.consumeCastExpressionWithNameArray();
 	if ((this.patternFineGrain & IJavaSearchConstants.CAST_TYPE_REFERENCE) != 0) {
 		CastExpression castExpression = (CastExpression) this.expressionStack[this.expressionPtr];
-		if (castExpression.type instanceof Reference) {
-			this.patternLocator.match((Reference) castExpression.type, this.nodeSet);
-        }
+		this.patternLocator.match(castExpression.type, this.nodeSet);
 	}
 }
 protected void consumeCastExpressionWithPrimitiveType() {
 	super.consumeCastExpressionWithPrimitiveType();
 	if ((this.patternFineGrain & IJavaSearchConstants.CAST_TYPE_REFERENCE) != 0) {
 		CastExpression castExpression = (CastExpression) this.expressionStack[this.expressionPtr];
-		if (castExpression.type instanceof Reference) {
-			this.patternLocator.match((Reference) castExpression.type, this.nodeSet);
-        }
+		this.patternLocator.match(castExpression.type, this.nodeSet);
 	}
 }
 protected void consumeCastExpressionWithQualifiedGenericsArray() {
 	super.consumeCastExpressionWithQualifiedGenericsArray();
 	if ((this.patternFineGrain & IJavaSearchConstants.CAST_TYPE_REFERENCE) != 0) {
 		CastExpression castExpression = (CastExpression) this.expressionStack[this.expressionPtr];
-		if (castExpression.type instanceof Reference) {
-			this.patternLocator.match((Reference) castExpression.type, this.nodeSet);
-        }
+		this.patternLocator.match(castExpression.type, this.nodeSet);
 	}
 }
 
 protected void consumeClassHeaderExtends() {
+	this.patternLocator.setFlavors(PatternLocator.SUPERTYPE_REF_FLAVOR);
 	super.consumeClassHeaderExtends();
 	if ((this.patternFineGrain & IJavaSearchConstants.SUPERTYPE_TYPE_REFERENCE) != 0) {
 		TypeDeclaration typeDeclaration = (TypeDeclaration) this.astStack[this.astPtr];
 		this.patternLocator.match(typeDeclaration.superclass, this.nodeSet);
 	}
+	this.patternLocator.setFlavors(PatternLocator.NO_FLAVOR);
 }
 
 protected void consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() {
@@ -283,6 +275,12 @@ protected void consumeClassInstanceCreationExpressionWithTypeArguments() {
 	}
 }
 
+protected void consumeEnterAnonymousClassBody(boolean qualified) {
+	this.patternLocator.setFlavors(PatternLocator.SUPERTYPE_REF_FLAVOR);
+	super.consumeEnterAnonymousClassBody(qualified);
+	this.patternLocator.setFlavors(PatternLocator.NO_FLAVOR);
+}
+
 protected void consumeEnterVariable() {
 	boolean isLocalDeclaration = this.nestedMethod[this.nestedType] != 0;
 	super.consumeEnterVariable();
@@ -322,6 +320,11 @@ protected void consumeFormalParameter(boolean isVarArgs) {
 	this.patternLocator.match((LocalDeclaration) this.astStack[this.astPtr], this.nodeSet);
 }
 
+protected void consumeCatchFormalParameter(boolean isVarArgs) {
+	super.consumeCatchFormalParameter(isVarArgs);
+	this.patternLocator.match((LocalDeclaration) this.astStack[this.astPtr], this.nodeSet);
+}
+
 protected void consumeInstanceOfExpression() {
 	super.consumeInstanceOfExpression();
 	if ((this.patternFineGrain & IJavaSearchConstants.INSTANCEOF_TYPE_REFERENCE) != 0) {
@@ -337,11 +340,13 @@ protected void consumeInstanceOfExpressionWithName() {
 	}
 }
 protected void consumeInterfaceType() {
+	this.patternLocator.setFlavors(PatternLocator.SUPERTYPE_REF_FLAVOR);
 	super.consumeInterfaceType();
 	if ((this.patternFineGrain & IJavaSearchConstants.SUPERTYPE_TYPE_REFERENCE) != 0) {
 		TypeReference typeReference = (TypeReference) this.astStack[this.astPtr];
 		this.patternLocator.match(typeReference, this.nodeSet);
 	}
+	this.patternLocator.setFlavors(PatternLocator.NO_FLAVOR);
 }
 
 protected void consumeLocalVariableDeclaration() {
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java
index 24ba359..55e10cc 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MethodLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,8 +50,8 @@ protected int fineGrain() {
 	return this.pattern.fineGrain;
 }
 
-private MethodBinding getMethodBinding(ReferenceBinding type, TypeBinding[] argumentTypes) {
-	MethodBinding[] methods = type.getMethods(this.pattern.selector);
+private MethodBinding getMethodBinding(ReferenceBinding type, char[] methodName, TypeBinding[] argumentTypes) {
+	MethodBinding[] methods = type.getMethods(methodName);
 	MethodBinding method = null;
 	methodsLoop: for (int i=0, length=methods.length; i<length; i++) {
 		method = methods[i];
@@ -606,17 +606,16 @@ public int resolveLevel(Binding binding) {
 	}
 
 	// declaring type
-	char[] qualifiedPattern = qualifiedPattern(this.pattern.declaringSimpleName, this.pattern.declaringQualification);
-	if (qualifiedPattern == null) return methodLevel; // since any declaring class will do
+	if (this.pattern.declaringSimpleName == null && this.pattern.declaringQualification == null) return methodLevel; // since any declaring class will do
 
 	boolean subType = !method.isStatic() && !method.isPrivate();
 	if (subType && this.pattern.declaringQualification != null && method.declaringClass != null && method.declaringClass.fPackage != null) {
 		subType = CharOperation.compareWith(this.pattern.declaringQualification, method.declaringClass.fPackage.shortReadableName()) == 0;
 	}
 	int declaringLevel = subType
-		? resolveLevelAsSubtype(qualifiedPattern, method.declaringClass, null)
-		: resolveLevelForType(qualifiedPattern, method.declaringClass);
-	return methodLevel > declaringLevel ? declaringLevel : methodLevel; // return the weaker match
+		? resolveLevelAsSubtype(this.pattern.declaringSimpleName, this.pattern.declaringQualification, method.declaringClass, method.selector, null)
+		: resolveLevelForType(this.pattern.declaringSimpleName, this.pattern.declaringQualification, method.declaringClass);
+	return (methodLevel & MATCH_LEVEL_MASK) > (declaringLevel & MATCH_LEVEL_MASK) ? declaringLevel : methodLevel; // return the weaker match
 }
 protected int resolveLevel(MessageSend messageSend) {
 	MethodBinding method = messageSend.binding;
@@ -642,13 +641,12 @@ protected int resolveLevel(MessageSend messageSend) {
 	}
 
 	// receiver type
-	char[] qualifiedPattern = qualifiedPattern(this.pattern.declaringSimpleName, this.pattern.declaringQualification);
-	if (qualifiedPattern == null) return methodLevel; // since any declaring class will do
+	if (this.pattern.declaringSimpleName == null && this.pattern.declaringQualification == null) return methodLevel; // since any declaring class will do
 
 	int declaringLevel;
 	if (isVirtualInvoke(method, messageSend) && (messageSend.actualReceiverType instanceof ReferenceBinding)) {
 		ReferenceBinding methodReceiverType = (ReferenceBinding) messageSend.actualReceiverType;
-		declaringLevel = resolveLevelAsSubtype(qualifiedPattern, methodReceiverType, method.parameters);
+		declaringLevel = resolveLevelAsSubtype(this.pattern.declaringSimpleName, this.pattern.declaringQualification, methodReceiverType, method.selector, method.parameters);
 		if (declaringLevel == IMPOSSIBLE_MATCH) {
 			if (method.declaringClass == null || this.allSuperDeclaringTypeNames == null) {
 				declaringLevel = INACCURATE_MATCH;
@@ -664,9 +662,9 @@ protected int resolveLevel(MessageSend messageSend) {
 			return declaringLevel;
 		}
 	} else {
-		declaringLevel = resolveLevelForType(qualifiedPattern, method.declaringClass);
+		declaringLevel = resolveLevelForType(this.pattern.declaringSimpleName, this.pattern.declaringQualification, method.declaringClass);
 	}
-	return methodLevel > declaringLevel ? declaringLevel : methodLevel; // return the weaker match
+	return (methodLevel & MATCH_LEVEL_MASK) > (declaringLevel & MATCH_LEVEL_MASK) ? declaringLevel : methodLevel; // return the weaker match
 }
 
 /**
@@ -676,12 +674,12 @@ protected int resolveLevel(MessageSend messageSend) {
  * Returns INACCURATE_MATCH if resolve fails
  * Returns IMPOSSIBLE_MATCH if it doesn't.
  */
-protected int resolveLevelAsSubtype(char[] qualifiedPattern, ReferenceBinding type, TypeBinding[] argumentTypes) {
+protected int resolveLevelAsSubtype(char[] simplePattern, char[] qualifiedPattern, ReferenceBinding type, char[] methodName, TypeBinding[] argumentTypes) {
 	if (type == null) return INACCURATE_MATCH;
 
-	int level = resolveLevelForType(qualifiedPattern, type);
+	int level = resolveLevelForType(simplePattern, qualifiedPattern, type);
 	if (level != IMPOSSIBLE_MATCH) {
-		MethodBinding method = argumentTypes == null ? null : getMethodBinding(type, argumentTypes);
+		MethodBinding method = argumentTypes == null ? null : getMethodBinding(type, methodName, argumentTypes);
 		if (((method != null && !method.isAbstract()) || !type.isAbstract()) && !type.isInterface()) { // if concrete, then method is overridden
 			level |= OVERRIDDEN_METHOD_FLAVOR;
 		}
@@ -690,11 +688,11 @@ protected int resolveLevelAsSubtype(char[] qualifiedPattern, ReferenceBinding ty
 
 	// matches superclass
 	if (!type.isInterface() && !CharOperation.equals(type.compoundName, TypeConstants.JAVA_LANG_OBJECT)) {
-		level = resolveLevelAsSubtype(qualifiedPattern, type.superclass(), argumentTypes);
+		level = resolveLevelAsSubtype(simplePattern, qualifiedPattern, type.superclass(), methodName, argumentTypes);
 		if (level != IMPOSSIBLE_MATCH) {
 			if (argumentTypes != null) {
 				// need to verify if method may be overridden
-				MethodBinding method = getMethodBinding(type, argumentTypes);
+				MethodBinding method = getMethodBinding(type, methodName, argumentTypes);
 				if (method != null) { // one method match in hierarchy
 					if ((level & OVERRIDDEN_METHOD_FLAVOR) != 0) {
 						// this method is already overridden on a super class, current match is impossible
@@ -714,7 +712,7 @@ protected int resolveLevelAsSubtype(char[] qualifiedPattern, ReferenceBinding ty
 	ReferenceBinding[] interfaces = type.superInterfaces();
 	if (interfaces == null) return INACCURATE_MATCH;
 	for (int i = 0; i < interfaces.length; i++) {
-		level = resolveLevelAsSubtype(qualifiedPattern, interfaces[i], null);
+		level = resolveLevelAsSubtype(simplePattern, qualifiedPattern, interfaces[i], methodName, null);
 		if (level != IMPOSSIBLE_MATCH) {
 			if (!type.isAbstract() && !type.isInterface()) { // if concrete class, then method is overridden
 				level |= OVERRIDDEN_METHOD_FLAVOR;
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/OrLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/OrLocator.java
index eaf8e62..9876b7c 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/OrLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/OrLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -307,4 +307,13 @@ public int resolveLevel(Binding binding) {
 	}
 	return level;
 }
+/* (non-Javadoc)
+ * @see org.eclipse.jdt.internal.core.search.matching.PatternLocator#setFlavors(int)
+ */
+void setFlavors(int flavors) {
+	for (int i = 0, length = this.patternLocators.length; i < length; i++) {
+		this.patternLocators[i].setFlavors(flavors);
+	}
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocator.java
index 5167157..a993d8a 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocator.java
@@ -39,7 +39,9 @@ public static final int ACCURATE_MATCH = 3;
 public static final int ERASURE_MATCH = 4;
 
 // Possible rule match flavors
+int flavors = 0;
 // see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=79866
+public static final int NO_FLAVOR = 0x0000;
 public static final int EXACT_FLAVOR = 0x0010;
 public static final int PREFIX_FLAVOR = 0x0020;
 public static final int PATTERN_FLAVOR = 0x0040;
@@ -48,6 +50,7 @@ public static final int CAMELCASE_FLAVOR = 0x0100;
 public static final int SUPER_INVOCATION_FLAVOR = 0x0200;
 public static final int SUB_INVOCATION_FLAVOR = 0x0400;
 public static final int OVERRIDDEN_METHOD_FLAVOR = 0x0800;
+public static final int SUPERTYPE_REF_FLAVOR = 0x1000;
 public static final int MATCH_LEVEL_MASK = 0x0F;
 public static final int FLAVORS_MASK = ~MATCH_LEVEL_MASK;
 
@@ -436,6 +439,17 @@ public int resolveLevel(ASTNode possibleMatchingNode) {
 	// need to do instance of checks to find out exact type of ASTNode
 	return IMPOSSIBLE_MATCH;
 }
+/**
+ * Set the flavors for which the locator has to be focused on.
+ * If not set, the locator will accept all matches with or without flavors.
+ * When set, the locator will only accept match having the corresponding flavors.
+ * 
+ * @param flavors Bits mask specifying the flavors to be accepted or
+ * 	<code>0</code> to ignore the flavors while accepting matches.
+ */
+void setFlavors(int flavors) {
+	this.flavors = flavors;
+}
 /*
  * Update pattern locator match for parameterized top level types.
  * Set match raw flag and recurse to enclosing types if any...
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/SuperTypeReferenceLocator.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/SuperTypeReferenceLocator.java
index c55e6df..1143687 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/SuperTypeReferenceLocator.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/SuperTypeReferenceLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public SuperTypeReferenceLocator(SuperTypeReferencePattern pattern) {
 //public int match(Reference node, MatchingNodeSet nodeSet) - SKIP IT
 //public int match(TypeDeclaration node, MatchingNodeSet nodeSet) - SKIP IT
 public int match(TypeReference node, MatchingNodeSet nodeSet) {
+	if (this.flavors != SUPERTYPE_REF_FLAVOR) return IMPOSSIBLE_MATCH;
 	if (this.pattern.superSimpleName == null)
 		return nodeSet.addMatch(node, this.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java
index 028d214..e1774d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -226,7 +226,8 @@ public abstract class JobManager implements Runnable {
 								float lastWorked = 0;
 								float totalWorked = 0;
 								while ((awaitingJobsCount = awaitingJobsCount()) > 0) {
-									if (subProgress != null && subProgress.isCanceled())
+									if ((subProgress != null && subProgress.isCanceled())
+											|| this.processingThread == null)
 										throw new OperationCanceledException();
 									IJob currentJob = currentJob();
 									// currentJob can be null when jobs have been added to the queue but job manager is not enabled
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
index c0a87f0..406da01 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,101 +1,107 @@
-#Thu Oct 15 14:51:15 CDT 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=error
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
-org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
-org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
+#Thu Jan 20 17:01:44 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..9efd017
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:44:07 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
index 7b8751d..b145fa7 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug.ui; singleton:=true
-Bundle-Version: 3.5.2.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -37,9 +37,9 @@ Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.variables;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.debug.ui;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.debug.ui;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.jdt.debug;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.jdt.launching;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.jdt.launching;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.jdt.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ltk.core.refactoring;bundle-version="[3.5.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/icons/full/elcl16/var_cntnt_prvdr.gif b/eclipse/plugins/org.eclipse.jdt.debug.ui/icons/full/elcl16/var_cntnt_prvdr.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/icons/full/etool16/new_sbook.gif b/eclipse/plugins/org.eclipse.jdt.debug.ui/icons/full/etool16/new_sbook.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.properties b/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.properties
index 8f67ed1..75ad155 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -282,12 +282,12 @@ allReferences.tooltip=Inspect references to the selected object
 allReferencesInView.label=Show &References
 allReferencesInView.tooltip=Shows references to each object in the variables view as an array of objects.
 
-preferenceKeywords.general=java debug suspend hot hcr timeout
+preferenceKeywords.general=java debug suspend hot hcr timeout breakpoints
 preferenceKeywords.jres=java jdk 1.5 5.0 jres vms
 preferenceKeywords.detailFormatters=java details toString variables
 preferenceKeywords.logicalStructures=java logical structures variables
 preferenceKeywords.stepFilters=java stepping filters
-preferenceKeywords.executionEnvironments=java jres vms execution environments JDK
+preferenceKeywords.executionEnvironments=java jres vms execution environments JDK ee
 preferenceKeywords.primitiveOptions=java variables primitives
 preferenceKeywords.heapWalking=java heap walking jdk 6.0 1.6 SE all instances references
 
@@ -304,4 +304,8 @@ JavaMethodBPmarkerTypeCategory.name = Java Method Breakpoints
 JavaClassBPmarkerTypeCategory.name = Java Class Load Breakpoints
 JavaWPmarkerTypeCategory.name = Java Watchpoints
 JavaPatternmarkerTypeCategory.name = Java Pattern Breakpoints
-BreakpointsmarkerTypeCategory.name = Breakpoints
\ No newline at end of file
+BreakpointsmarkerTypeCategory.name = Breakpoints
+OpenFromClipboardAction.label = Open from Clipboar&d
+OpenFromClipboardAction.tooltip = Opens a Java element or Java Stack Trace from Clipboard
+OpenFromClipboardAction.description = Opens a Java element or a Java stack trace from clipboard
+OpenFromClipboardAction.name = Open from Clipboard
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.xml b/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.xml
index d6a1635..b607f2e 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/plugin.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
<!--
-     Copyright (c) 2005, 2010 IBM Corporation and others.
+<?eclipse version="3.0"?>
+<!--
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -406,8 +407,28 @@
                               </and>
             </enablement>
          </action>
+         <action
+               definitionId="org.eclipse.jdt.debug.ui.command.OpenFromClipboard"
+               label="%OpenFromClipboardAction.label"
+               tooltip="%OpenFromClipboardAction.tooltip"
+               class="org.eclipse.jdt.internal.debug.ui.actions.OpenFromClipboardAction"
+               id="openFromClipboard">
+         </action>
       </actionSet>
    </extension>
+   <extension 
+         point="org.eclipse.ui.menus">
+       <menuContribution
+            locationURI="menu:navigate?endof=open.ext">
+        <command
+              commandId="org.eclipse.jdt.debug.ui.command.OpenFromClipboard"
+              helpContextId="org.eclipse.jdt.debug.ui.open_from_clipboard_action_context"
+              label="%OpenFromClipboardAction.label"
+              tooltip="%OpenFromClipboardAction.tooltip"
+              style="push">
+        </command>
+       </menuContribution>
+   </extension>
    <extension
          point="org.eclipse.ui.views">
       <view
@@ -2671,6 +2692,12 @@ M4 = Platform-specific fourth key
             id="org.eclipse.jdt.debug.ui.breakpoint.properties"
             name="%CommandDefinition.breakpointproperties.name">
       </command> 
+      <command
+            categoryId="org.eclipse.ui.category.navigate"
+            description="%OpenFromClipboardAction.description"
+            id="org.eclipse.jdt.debug.ui.command.OpenFromClipboard"
+            name="%OpenFromClipboardAction.name">
+      </command>
    </extension>
    <extension point="org.eclipse.ui.bindings">
       <key
@@ -3584,4 +3611,15 @@ M4 = Platform-specific fourth key
        </enablement>
     </detailFactories>
  </extension>
+ <extension
+       point="org.eclipse.debug.ui.stringVariablePresentations">
+    <variablePresentation
+          argumentSelector="org.eclipse.jdt.internal.debug.ui.launcher.ExecutionEnvironmentSelector"
+          variableName="ee_home">
+    </variablePresentation>
+    <variablePresentation
+          argumentSelector="org.eclipse.jdt.internal.debug.ui.launcher.ProjectClasspathArgumentSelector"
+          variableName="project_classpath">
+    </variablePresentation>
+ </extension>
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/scripts/buildExtraJAR.xml b/eclipse/plugins/org.eclipse.jdt.debug.ui/scripts/buildExtraJAR.xml
index eda1319..8d0d05e 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/scripts/buildExtraJAR.xml
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/scripts/buildExtraJAR.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-     Copyright (c) 2005, 2006 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/breakpoints/JavaBreakpointConditionEditor.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/breakpoints/JavaBreakpointConditionEditor.java
index b425894..b617339 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/breakpoints/JavaBreakpointConditionEditor.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/breakpoints/JavaBreakpointConditionEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,60 +10,95 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.ui.breakpoints;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+import java.util.regex.Pattern;
+
+import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.FontMetrics;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.IHandler;
-import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.commands.operations.IUndoContext;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.internal.ui.SWTFactory;
-import org.eclipse.jdt.core.IClassFile;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
-import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
-import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
-import org.eclipse.jdt.internal.debug.ui.JDISourceViewer;
-import org.eclipse.jdt.internal.debug.ui.breakpoints.AbstractJavaBreakpointEditor;
-import org.eclipse.jdt.internal.debug.ui.contentassist.IJavaDebugContentAssistContext;
-import org.eclipse.jdt.internal.debug.ui.contentassist.JavaDebugContentAssistProcessor;
-import org.eclipse.jdt.internal.debug.ui.contentassist.TypeContext;
-import org.eclipse.jdt.internal.debug.ui.display.DisplayViewerConfiguration;
-import org.eclipse.jdt.internal.debug.ui.propertypages.PropertyPageMessages;
-import org.eclipse.jdt.ui.text.IJavaPartitions;
+
+import org.eclipse.core.resources.IMarker;
+
+import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.DialogSettings;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.fieldassist.ControlDecoration;
 import org.eclipse.jface.fieldassist.FieldDecoration;
 import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.DocumentEvent;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IDocumentListener;
-import org.eclipse.jface.text.TextViewerUndoManager;
+import org.eclipse.jface.text.ITextOperationTarget;
+import org.eclipse.jface.text.ITextViewerExtension6;
+import org.eclipse.jface.text.IUndoManager;
+import org.eclipse.jface.text.IUndoManagerExtension;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.FontMetrics;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
+
 import org.eclipse.ui.IPropertyListener;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchCommandConstants;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.handlers.IHandlerActivation;
 import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.operations.OperationHistoryActionHandler;
+import org.eclipse.ui.operations.RedoActionHandler;
+import org.eclipse.ui.operations.UndoActionHandler;
+
+import org.eclipse.ui.texteditor.IAbstractTextEditorHelpContextIds;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
 
+import org.eclipse.debug.internal.ui.SWTFactory;
+
+import org.eclipse.jdt.core.IClassFile;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IType;
+
+import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
+import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jdt.internal.debug.ui.JDISourceViewer;
+import org.eclipse.jdt.internal.debug.ui.breakpoints.AbstractJavaBreakpointEditor;
+import org.eclipse.jdt.internal.debug.ui.contentassist.IJavaDebugContentAssistContext;
+import org.eclipse.jdt.internal.debug.ui.contentassist.JavaDebugContentAssistProcessor;
+import org.eclipse.jdt.internal.debug.ui.contentassist.TypeContext;
+import org.eclipse.jdt.internal.debug.ui.display.DisplayViewerConfiguration;
+import org.eclipse.jdt.internal.debug.ui.propertypages.PropertyPageMessages;
+
+import org.eclipse.jdt.ui.text.IJavaPartitions;
+
 /**
  * Controls to edit a breakpoint's conditional expression, condition enabled state,
  * and suspend policy (suspend when condition is <code>true</code> or when the value of the
@@ -85,33 +120,76 @@ import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
  * @since 3.5
  */
 public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointEditor {
-	
+
 	private Button fConditional;
 	private Button fWhenTrue;
 	private Button fWhenChange;
+
 	private JDISourceViewer fViewer;
 	private IContentAssistProcessor fCompletionProcessor;	
 	private IJavaLineBreakpoint fBreakpoint;
 	private IHandlerService fHandlerService;
-	private IHandler fHandler;
-	private IHandlerActivation fActivation;
-    private IDocumentListener fDocumentListener;	
-    
-    /**
-     * Property id for breakpoint condition expression.
-     */
-    public static final int PROP_CONDITION = 0x1001;
-    
-    /**
-     * Property id for breakpoint condition enabled state.
-     */
-    public static final int PROP_CONDITION_ENABLED = 0x1002;
-    
-    /**
-     * Property id for breakpoint condition suspend policy.
-     */
-    public static final int PROP_CONDITION_SUSPEND_POLICY = 0x1003;
+	private IHandler fContentAssistHandler;
+	private IHandlerActivation fContentAssistActivation;
+	private IHandler fUndoHandler;
+	private IHandlerActivation fUndoActivation;
+	private IHandler fRedoHandler;
+	private IHandlerActivation fRedoActivation;
+
+	private IDocumentListener fDocumentListener;
+
+	private Combo fConditionHistory;
+	private IDialogSettings fConditionHistoryDialogSettings;
+	private boolean fReplaceConditionInHistory;
+	private Map fLocalConditionHistory;
+	private int fSeparatorIndex;
+
+	private IViewSite fBreakpointsViewSite;
+	private IAction fViewUndoAction;
+	private IAction fViewRedoAction;
+	private OperationHistoryActionHandler fViewerUndoAction;
+	private OperationHistoryActionHandler fViewerRedoAction;
+
+
+	/**
+	 * Property id for breakpoint condition expression.
+	 */
+	public static final int PROP_CONDITION= 0x1001;
+
+	/**
+	 * Property id for breakpoint condition enabled state.
+	 */
+	public static final int PROP_CONDITION_ENABLED= 0x1002;
+
+	/**
+	 * Property id for breakpoint condition suspend policy.
+	 */
+	public static final int PROP_CONDITION_SUSPEND_POLICY= 0x1003;
 	
+	private static final int MAX_HISTORY_SIZE= 10;
+	private static final String DS_SECTION_CONDITION_HISTORY= "conditionHistory"; //$NON-NLS-1$
+	private static final String DS_KEY_HISTORY_ENTRY_COUNT= "conditionHistoryEntryCount"; //$NON-NLS-1$
+	private static final String DS_KEY_HISTORY_ENTRY_PREFIX= "conditionHistoryEntry_"; //$NON-NLS-1$
+	private static final Pattern NEWLINE_PATTERN= Pattern.compile("\r\n|\r|\n"); //$NON-NLS-1$;
+
+
+	/**
+	 * Creates a new Java breakpoint condition editor.
+	 */
+	public JavaBreakpointConditionEditor() {
+	}
+
+	/**
+	 * Creates a new Java breakpoint condition editor with a history drop-down list.
+	 * 
+	 * @param dialogSettings the dialog settings for the condition history or <code>null</code> to
+	 *            use the default settings (i.e. those used by JDT Debug)
+	 * @since 3.6
+	 */
+	public JavaBreakpointConditionEditor(IDialogSettings dialogSettings) {
+		fConditionHistoryDialogSettings= dialogSettings != null ? dialogSettings : DialogSettings.getOrCreateSection(JDIDebugUIPlugin.getDefault().getDialogSettings(), DS_SECTION_CONDITION_HISTORY);
+	}
+
 	/**
 	 * Adds the given property listener to this editor. Property changes
 	 * are reported on the breakpoint being edited. Property identifiers
@@ -140,17 +218,24 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 	 */
 	public void setInput(Object input) throws CoreException {
 		try {
+			boolean sameBreakpoint= fBreakpoint == input;
 			suppressPropertyChanges(true);
 			if (input instanceof IJavaLineBreakpoint) {
 				setBreakpoint((IJavaLineBreakpoint)input);
 			} else {
 				setBreakpoint(null);
 			}
+			if (hasConditionHistory()) {
+				if (!sameBreakpoint)
+					fReplaceConditionInHistory= false;
+				initializeConditionHistoryDropDown();
+			}
 		} finally {
 			suppressPropertyChanges(false);
 		}
 	}
 	
+
 	/**
 	 * Sets the breakpoint to edit. Has no effect if the breakpoint responds
 	 * <code>false</code> to {@link IJavaLineBreakpoint#supportsCondition()}.
@@ -209,21 +294,19 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 			context = new TypeContext(type, position);
 		}
 		fCompletionProcessor = new JavaDebugContentAssistProcessor(context);
+		document.set((condition == null ? "" : condition)); //$NON-NLS-1$
 		fViewer.configure(new DisplayViewerConfiguration() {
 			public IContentAssistProcessor getContentAssistantProcessor() {
 					return fCompletionProcessor;
 			}
 		});
-		document.set((condition == null ? "" : condition)); //$NON-NLS-1$
-		fViewer.setUndoManager(new TextViewerUndoManager(10));
-		fViewer.getUndoManager().connect(fViewer);
 		fDocumentListener = new IDocumentListener() {
-            public void documentAboutToBeChanged(DocumentEvent event) {
-            }
-            public void documentChanged(DocumentEvent event) {
-            	setDirty(PROP_CONDITION);
-            }
-        };
+			public void documentAboutToBeChanged(DocumentEvent event) {
+			}
+			public void documentChanged(DocumentEvent event) {
+				setDirty(PROP_CONDITION);
+			}
+		};
 		fViewer.getDocument().addDocumentListener(fDocumentListener);
 		fConditional.setEnabled(controlsEnabled);
 		fConditional.setSelection(conditionEnabled);
@@ -231,6 +314,8 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 		fWhenChange.setSelection(!whenTrue);
 		setEnabled(conditionEnabled && breakpoint != null && breakpoint.supportsCondition(), false);
 		setDirty(false);
+		checkIfUsedInBreakpointsView();
+		registerViewerUndoRedoActions();
 	}
 	
 	/**
@@ -270,7 +355,24 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 				setDirty(PROP_CONDITION_SUSPEND_POLICY);
 			}
 		});
-				
+
+		if (fConditionHistoryDialogSettings != null) {
+			fLocalConditionHistory= new HashMap();
+			fConditionHistory= SWTFactory.createCombo(parent, SWT.DROP_DOWN | SWT.READ_ONLY, 1, null);
+			initializeConditionHistoryDropDown();
+			fConditionHistory.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					int historyIndex= fConditionHistory.getSelectionIndex() - 1;
+					if (historyIndex >= 0 && historyIndex != fSeparatorIndex)
+						fViewer.getDocument().set(getConditionHistory()[historyIndex]);
+				}
+			});
+			GridData data= new GridData(GridData.FILL_HORIZONTAL);
+			data.widthHint= 10;
+			fConditionHistory.setLayoutData(data);
+			fLocalConditionHistory= new HashMap(10);
+		}
+
 		fViewer = new JDISourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.LEFT_TO_RIGHT);
 		fViewer.setEditable(false);
 		ControlDecoration decoration = new ControlDecoration(fViewer.getControl(), SWT.TOP | SWT.LEFT);
@@ -287,19 +389,31 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 		gd.widthHint = Dialog.convertWidthInCharsToPixels(fontMetrics, 40);
 		gc.dispose();
 		fViewer.getControl().setLayoutData(gd);
-		fHandler = new AbstractHandler() {
+		fContentAssistHandler= new AbstractHandler() {
 			public Object execute(ExecutionEvent event) throws org.eclipse.core.commands.ExecutionException {
 				fViewer.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS);
 				return null;
 			}
 		};
+		fUndoHandler= new AbstractHandler() {
+			public Object execute(ExecutionEvent event) throws org.eclipse.core.commands.ExecutionException {
+				fViewer.doOperation(ITextOperationTarget.UNDO);
+				return null;
+			}
+		};
+		fRedoHandler= new AbstractHandler() {
+			public Object execute(ExecutionEvent event) throws org.eclipse.core.commands.ExecutionException {
+				fViewer.doOperation(ITextOperationTarget.REDO);
+				return null;
+			}
+		};
 		fHandlerService = (IHandlerService) PlatformUI.getWorkbench().getAdapter(IHandlerService.class);
 		fViewer.getControl().addFocusListener(new FocusAdapter() {
 			public void focusGained(FocusEvent e) {
-				activateContentAssist();
+				activateHandlers();
 			}
 			public void focusLost(FocusEvent e) {
-				deactivateContentAssist();
+				deactivateHandlers();
 			}				
 		});
 		parent.addDisposeListener(new DisposeListener() {
@@ -316,7 +430,7 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 	 */
 	protected void dispose() {
 		super.dispose();
-		deactivateContentAssist();
+		deactivateHandlers();
 		if (fDocumentListener != null) {
 			fViewer.getDocument().removeDocumentListener(fDocumentListener);
 		}
@@ -343,6 +457,8 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 			fBreakpoint.setConditionEnabled(fConditional.getSelection());
 			fBreakpoint.setConditionSuspendOnTrue(fWhenTrue.getSelection());
 			setDirty(false);
+			if (hasConditionHistory())
+				updateConditionHistories();
 		}
 	}
 	
@@ -384,27 +500,60 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 		super.setMnemonics(mnemonics);
 	}
 	
-	private void activateContentAssist() {
-		fActivation = fHandlerService.activateHandler(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, fHandler);
+	private void activateHandlers() {
+		fContentAssistActivation= fHandlerService.activateHandler(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, fContentAssistHandler);
+		checkIfUsedInBreakpointsView();
+		if (fBreakpointsViewSite == null) {
+			fUndoActivation= fHandlerService.activateHandler(IWorkbenchCommandConstants.EDIT_UNDO, fUndoHandler);
+			fRedoActivation= fHandlerService.activateHandler(IWorkbenchCommandConstants.EDIT_REDO, fRedoHandler);
+		} else
+			registerViewerUndoRedoActions();
 	}
 
-	private void deactivateContentAssist() {
-		if(fActivation != null) {
-			fHandlerService.deactivateHandler(fActivation);
-			fActivation = null;
+	private void deactivateHandlers() {
+		if (fContentAssistActivation != null) {
+			fHandlerService.deactivateHandler(fContentAssistActivation);
+			fContentAssistActivation= null;
 		}
-	}	
-	
+		if (fUndoActivation != null) {
+			fHandlerService.deactivateHandler(fUndoActivation);
+			fUndoActivation= null;
+		}
+		if (fRedoActivation != null) {
+			fHandlerService.deactivateHandler(fRedoActivation);
+			fRedoActivation= null;
+		}
+
+		if (fBreakpointsViewSite != null) {
+			fBreakpointsViewSite.getActionBars().setGlobalActionHandler(ITextEditorActionConstants.UNDO, fViewUndoAction);
+			fBreakpointsViewSite.getActionBars().setGlobalActionHandler(ITextEditorActionConstants.REDO, fViewRedoAction);
+			fBreakpointsViewSite.getActionBars().updateActionBars();
+			disposeViewerUndoRedoActions();
+		}
+	}
+
+	private void disposeViewerUndoRedoActions() {
+		if (fViewerUndoAction != null) {
+			fViewerUndoAction.dispose();
+			fViewerUndoAction= null;
+		}
+		if (fViewerRedoAction != null) {
+			fViewerRedoAction.dispose();
+			fViewerRedoAction= null;
+		}
+	}
+
 	/**
 	 * Enables controls based on whether the breakpoint's condition is enabled.
 	 * 
-	 * @param enabled whether to enable
+	 * @param enabled <code>true</code> if enabled, <code>false</code> otherwise
+	 * @param focus <code>true</code> if focus should be set, <code>false</code> otherwise
 	 */
 	private void setEnabled(boolean enabled, boolean focus) {
-	    fViewer.setEditable(enabled);
-	    fViewer.getTextWidget().setEnabled(enabled);
-	    fWhenChange.setEnabled(enabled);
-	    fWhenTrue.setEnabled(enabled);
+		fViewer.setEditable(enabled);
+		fViewer.getTextWidget().setEnabled(enabled);
+		fWhenChange.setEnabled(enabled);
+		fWhenTrue.setEnabled(enabled);
 		if (enabled) {
 			fViewer.updateViewerColors();
 			if (focus) {
@@ -414,6 +563,8 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 			Color color = fViewer.getControl().getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
 			fViewer.getTextWidget().setBackground(color);			
 		}
+		if (hasConditionHistory())
+			fConditionHistory.setEnabled(enabled);
 	}
 
 	/**
@@ -424,4 +575,225 @@ public final class JavaBreakpointConditionEditor extends AbstractJavaBreakpointE
 	public Object getInput() {
 		return fBreakpoint;
 	}
+
+
+	/**
+	 * Tells whether this editor shows a condition history drop-down list.
+	 * 
+	 * @return <code>true</code> if this editor shows a condition history drop-down list,
+	 *         <code>false</code> otherwise
+	 */
+	private boolean hasConditionHistory() {
+		return fConditionHistory != null;
+	}
+
+	/**
+	 * Initializes the condition history drop-down with values.
+	 */
+	private void initializeConditionHistoryDropDown() {
+		fConditionHistory.setItems(getConditionHistoryLabels());
+		String userHint= PropertyPageMessages.JavaBreakpointConditionEditor_choosePreviousCondition;
+		fConditionHistory.add(userHint, 0);
+		fConditionHistory.setText(userHint);
+	}
+
+	/**
+	 * Returns the condition history labels for the current breakpoint.
+	 * 
+	 * @return an array of strings containing the condition history labels
+	 */
+	private String[] getConditionHistoryLabels() {
+		String[] conditions= getConditionHistory();
+		String[] labels= new String[conditions.length];
+		for (int i= 0; i < conditions.length; i++) {
+			labels[i]= NEWLINE_PATTERN.matcher(conditions[i]).replaceAll(" "); //$NON-NLS-1$
+		}
+		return labels;
+	}
+
+	/**
+	 * Returns the condition history entries for the current breakpoint.
+	 * 
+	 * @return an array of strings containing the history of conditions
+	 */
+	private String[] getConditionHistory() {
+		fSeparatorIndex= -1;
+
+		// Get global history
+		String[] globalItems= readConditionHistory(fConditionHistoryDialogSettings);
+
+		// Get local history
+		Stack localHistory= (Stack)fLocalConditionHistory.get(fBreakpoint);
+		if (localHistory == null) {
+			return globalItems;
+		}
+
+		// Create combined history 
+		int localHistorySize= Math.min(localHistory.size(), MAX_HISTORY_SIZE);
+		String[] historyItems= new String[localHistorySize + globalItems.length + 1];
+		for (int i= 0; i < localHistorySize; i++) {
+			historyItems[i]= (String)localHistory.get(localHistory.size() - i - 1);
+		}
+		fSeparatorIndex= localHistorySize;
+		historyItems[localHistorySize]= getSeparatorLabel();
+		System.arraycopy(globalItems, 0, historyItems, localHistorySize + 1, globalItems.length);
+		return historyItems;
+	}
+
+	/**
+	 * Updates the local and global condition histories.
+	 */
+	private void updateConditionHistories() {
+		String newItem= fViewer.getDocument().get();
+		if (newItem.length() == 0)
+			return;
+
+		// Update local history
+		Stack localHistory= (Stack)fLocalConditionHistory.get(fBreakpoint);
+		if (localHistory == null) {
+			localHistory= new Stack();
+			fLocalConditionHistory.put(fBreakpoint, localHistory);
+		}
+
+		localHistory.remove(newItem);
+		localHistory.push(newItem);
+
+		// Update global history
+		String[] globalItems= readConditionHistory(fConditionHistoryDialogSettings);
+		if (globalItems.length > 0 && newItem.equals(globalItems[0]))
+			return;
+
+		if (!fReplaceConditionInHistory) {
+			String[] tempItems= new String[globalItems.length + 1];
+			System.arraycopy(globalItems, 0, tempItems, 1, globalItems.length);
+			globalItems= tempItems;
+		} else if (globalItems.length == 0) {
+			globalItems= new String[1];
+		}
+		fReplaceConditionInHistory= true;
+		globalItems[0]= newItem;
+		storeConditionHistory(globalItems, fConditionHistoryDialogSettings);
+	}
+
+	/**
+	 * Reads the condition history from the given dialog settings.
+	 * 
+	 * @param dialogSettings the dialog settings
+	 * @return the condition history
+	 */
+	private static String[] readConditionHistory(IDialogSettings dialogSettings) {
+		int count= 0;
+		try {
+			count= dialogSettings.getInt(DS_KEY_HISTORY_ENTRY_COUNT);
+		} catch (NumberFormatException ex) {
+			// No history yet
+		}
+		count= Math.min(count, MAX_HISTORY_SIZE);
+		String[] conditions= new String[count];
+		for (int i= 0; i < count; i++) {
+			conditions[i]= dialogSettings.get(DS_KEY_HISTORY_ENTRY_PREFIX + i);
+		}
+		return conditions;
+	}
+
+	/**
+	 * Writes the given conditions into the given dialog settings.
+	 * 
+	 * @param conditions an array of strings containing the conditions
+	 * @param dialogSettings the dialog settings
+	 */
+	private static void storeConditionHistory(String[] conditions, IDialogSettings dialogSettings) {
+		int length= Math.min(conditions.length, MAX_HISTORY_SIZE);
+		int count= 0;
+		outer: for (int i= 0; i < length; i++) {
+			for (int j= 0; j < i; j++) {
+				if (conditions[i].equals(conditions[j]))
+					break outer;
+			}
+			dialogSettings.put(DS_KEY_HISTORY_ENTRY_PREFIX + count, conditions[i]);
+			count= count + 1;
+		}
+		dialogSettings.put(DS_KEY_HISTORY_ENTRY_COUNT, count);
+	}
+
+	/**
+	 * Returns the label for the history separator.
+	 * 
+	 * @return the label for the history separator
+	 */
+	private String getSeparatorLabel() {
+		int borderWidth= fConditionHistory.computeTrim(0, 0, 0, 0).width;
+		Rectangle rect= fConditionHistory.getBounds();
+		int width= rect.width - borderWidth;
+
+		GC gc= new GC(fConditionHistory);
+		gc.setFont(fConditionHistory.getFont());
+
+		int fSeparatorWidth= gc.getAdvanceWidth('-');
+		String separatorLabel= PropertyPageMessages.JavaBreakpointConditionEditor_historySeparator;
+		int fMessageLength= gc.textExtent(separatorLabel).x;
+
+		gc.dispose();
+
+		StringBuffer dashes= new StringBuffer();
+		int chars= (((width - fMessageLength) / fSeparatorWidth) / 2) - 2;
+		for (int i= 0; i < chars; i++) {
+			dashes.append('-');
+		}
+
+		StringBuffer result= new StringBuffer();
+		result.append(dashes);
+		result.append(" " + separatorLabel + " "); //$NON-NLS-1$//$NON-NLS-2$
+		result.append(dashes);
+		return result.toString().trim();
+	}
+
+	private void registerViewerUndoRedoActions() {
+		if (!fViewer.getTextWidget().isFocusControl())
+			return;
+
+		disposeViewerUndoRedoActions();
+		IUndoContext undoContext= getUndoContext();
+		if (undoContext != null) {
+			fViewerUndoAction= new UndoActionHandler(fBreakpointsViewSite, getUndoContext());
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(fViewerUndoAction, IAbstractTextEditorHelpContextIds.UNDO_ACTION);
+			fViewerUndoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_UNDO);
+
+			fViewerRedoAction= new RedoActionHandler(fBreakpointsViewSite, getUndoContext());
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(fViewerRedoAction, IAbstractTextEditorHelpContextIds.REDO_ACTION);
+			fViewerRedoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_REDO);
+		}
+		fBreakpointsViewSite.getActionBars().setGlobalActionHandler(ITextEditorActionConstants.UNDO, fViewerUndoAction);
+		fBreakpointsViewSite.getActionBars().setGlobalActionHandler(ITextEditorActionConstants.REDO, fViewerRedoAction);
+		fBreakpointsViewSite.getActionBars().updateActionBars();
+	}
+
+	/**
+	 * Returns this editor's viewer's undo manager undo context.
+	 * 
+	 * @return the undo context or <code>null</code> if not available
+	 * @since 3.1
+	 */
+	private IUndoContext getUndoContext() {
+		IUndoManager undoManager= ((ITextViewerExtension6)fViewer).getUndoManager();
+		if (undoManager instanceof IUndoManagerExtension)
+			return ((IUndoManagerExtension)undoManager).getUndoContext();
+		return null;
+	}
+
+	private void checkIfUsedInBreakpointsView() {
+		if (fBreakpointsViewSite != null)
+			return;
+
+		IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		if (activeWorkbenchWindow != null && activeWorkbenchWindow.getActivePage() != null && activeWorkbenchWindow.getActivePage().getActivePart() != null) {
+			IWorkbenchPartSite site= activeWorkbenchWindow.getActivePage().getActivePart().getSite();
+			if ("org.eclipse.debug.ui.BreakpointView".equals(site.getId())) { //$NON-NLS-1$
+				fBreakpointsViewSite= (IViewSite)site;
+				fViewUndoAction= fBreakpointsViewSite.getActionBars().getGlobalActionHandler(ITextEditorActionConstants.UNDO);
+				fViewRedoAction= fBreakpointsViewSite.getActionBars().getGlobalActionHandler(ITextEditorActionConstants.REDO);
+			}
+		}
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
index 2ff49cd..6348be2 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,10 @@ public class BreakpointMarkerUpdater implements IMarkerUpdater {
 			return false;
 		}
 		CompilationUnit unit = SharedASTProvider.getAST(cunit, SharedASTProvider.WAIT_YES, null);
+		if(unit == null) {
+			//remove it - in case it would be left in a bad location
+			return false;
+		}
 		try {
 			ValidBreakpointLocationLocator loc = new ValidBreakpointLocationLocator(unit, document.getLineOfOffset(position.getOffset())+1, true, true);
 			unit.accept(loc);
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.java
index 50e3bdd..316990f 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  * IBM - Initial API and implementation
+ * Jesper Steen Moller - Enhancement 254677 - filter getters/setters
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.ui;
 
@@ -64,6 +65,11 @@ public class DebugUIMessages extends NLS {
 	public static String JavaDebugPreferencePage_Debugger__timeout__2;
 	public static String JavaDebugPreferencePage__Launch_timeout__ms___1;
 	public static String JavaDebugPreferencePage_14;
+	public static String JavaDebugPreferencePage_19;
+	public static String JavaDebugPreferencePage_0;
+	public static String JavaDebugPreferencePage_20;
+	public static String JavaDebugPreferencePage_promptWhenDeletingCondidtionalBreakpoint;
+
 
 	public static String JavaDetailFormattersManager_6;
 
@@ -77,6 +83,8 @@ public class DebugUIMessages extends NLS {
 	public static String JavaStepFilterPreferencePage_Filter_co_nstructors_19;
 	public static String JavaStepFilterPreferencePage_Filter_s_ynthetic_methods__requires_VM_support__17;
 	public static String JavaStepFilterPreferencePage_Filter_static__initializers_18;
+	public static String JavaStepFilterPreferencePage_Filter_getters;
+	public static String JavaStepFilterPreferencePage_Filter_setters;
 	public static String JavaStepFilterPreferencePage_title;
 	public static String JavaStepFilterPreferencePage_description;
 	public static String JavaStepFilterPreferencePage_Remove_all_selected_step_filters_16;
@@ -316,7 +324,6 @@ public class DebugUIMessages extends NLS {
 	public static String JDIModelPresentation_5;
 	public static String JDIModelPresentation_6;
 	public static String NoLineNumberAttributesStatusHandler_3;
-	public static String JavaDebugPreferencePage_19;
 	public static String EditLogicalStructureDialog_0;
 	public static String EditLogicalStructureDialog_1;
 	public static String EditLogicalStructureDialog_2;
@@ -354,13 +361,11 @@ public class DebugUIMessages extends NLS {
 		NLS.initializeMessages(BUNDLE_NAME, DebugUIMessages.class);
 	}
 
-	public static String JavaDebugPreferencePage_0;
 
 	public static String EditLogicalStructureDialog_32;
 
 	public static String EditLogicalStructureDialog_33;
 
-	public static String JavaDebugPreferencePage_20;
 
 	public static String JavaPrimitivesPreferencePage_0;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.properties b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.properties
index ddd5576..86c0faa 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/DebugUIMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
 #
 # Contributors:
 #     IBM Corporation - initial API and implementation
+#     Jesper Steen Moller - Enhancement 254677 - filter getters/setters
 ###############################################################################
 
 
@@ -42,6 +43,8 @@ JavaPrimitivesPreferencePage_1=Display options for primitive values
 JavaStepFilterPreferencePage_Filter_co_nstructors_19=Filter co&nstructors
 JavaStepFilterPreferencePage_Filter_s_ynthetic_methods__requires_VM_support__17=Filter s&ynthetic methods (requires VM support)
 JavaStepFilterPreferencePage_Filter_static__initializers_18=Filter static &initializers
+JavaStepFilterPreferencePage_Filter_getters=Filter simple &getters
+JavaStepFilterPreferencePage_Filter_setters=Filter simple se&tters
 JavaStepFilterPreferencePage_title=Step Filtering
 JavaStepFilterPreferencePage_0=Step t&hrough filters
 JavaStepFilterPreferencePage_description=Step filters are applied when the 'Use Step Filters' toggle is activated.
@@ -294,6 +297,7 @@ JavaDebugPreferencePage_24=Default suspend policy for new &watchpoints:
 JavaDebugPreferencePage_25=Access & Modification
 JavaDebugPreferencePage_26=Access
 JavaDebugPreferencePage_27=Modification
+JavaDebugPreferencePage_promptWhenDeletingCondidtionalBreakpoint=&Prompt for confirmation when deleting a conditional breakpoint from editor
 JavaDebugPreferencePage_0=See <a>''{0}''</a> for general debug settings.
 JavaVariableLabelProvider_0=unavailable
 EditLogicalStructureDialog_0=Qualified type &name:
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/IJDIPreferencesConstants.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/IJDIPreferencesConstants.java
index 9313bcf..7114cf7 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/IJDIPreferencesConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/IJDIPreferencesConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Jesper Steen Moller - Enhancement 254677 - filter getters/setters
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.ui;
 
@@ -46,11 +47,26 @@ public interface IJDIPreferencesConstants {
 	public static final String PREF_FILTER_STATIC_INITIALIZERS = IJavaDebugUIConstants.PLUGIN_ID + ".filter_statics"; //$NON-NLS-1$
 	
 	/**
+	 * Boolean preference controlling whether simple getters
+	 * are to be filtered when stepping (and step
+	 * filters are enabled).
+	 */			
+	public static final String PREF_FILTER_GETTERS = IJavaDebugUIConstants.PLUGIN_ID + ".filter_get"; //$NON-NLS-1$
+
+	/**
+	 * Boolean preference controlling whether simple setters
+	 * are to be filtered when stepping (and step
+	 * filters are enabled).
+	 */			
+	public static final String PREF_FILTER_SETTERS = IJavaDebugUIConstants.PLUGIN_ID + ".filter_setters"; //$NON-NLS-1$
+
+	/**
 	 * Boolean preference controlling whether constructors
 	 * are to be filtered when stepping (and step
 	 * filters are enabled).
 	 */			
 	public static final String PREF_FILTER_CONSTRUCTORS = IJavaDebugUIConstants.PLUGIN_ID + ".filter_constructors"; //$NON-NLS-1$
+
 	
 	/**
 	 * Boolean preference controlling whether a step landing in a filtered
@@ -207,4 +223,11 @@ public interface IJDIPreferencesConstants {
 	 * @since 3.3
 	 */
 	public static final String PREF_AUTO_FORMAT_JSTCONSOLE = IJavaDebugUIConstants.PLUGIN_ID + ".auto_format_jstconsole"; //$NON-NLS-1$;
+
+	/**
+	 * Boolean preference controlling whether to prompt with a dialog when deleting a conditional
+	 * breakpoint.
+	 */
+	public static final String PREF_PROMPT_DELETE_CONDITIONAL_BREAKPOINT= IJavaDebugUIConstants.PLUGIN_ID + ".prompt_delete_conditional_breakpoint"; //$NON-NLS-1$
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPreferenceInitializer.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPreferenceInitializer.java
index d67e599..9dd69fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,12 +12,15 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.ui;
 
-import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
-import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.PropertyChangeEvent;
 
+import org.eclipse.debug.ui.IDebugUIConstants;
+
 public class JDIDebugUIPreferenceInitializer extends AbstractPreferenceInitializer {
 
 	public JDIDebugUIPreferenceInitializer() {
@@ -37,6 +40,7 @@ public class JDIDebugUIPreferenceInitializer extends AbstractPreferenceInitializ
 		store.setDefault(IJDIPreferencesConstants.PREF_ALERT_HCR_NOT_SUPPORTED, true);
 		store.setDefault(IJDIPreferencesConstants.PREF_ALERT_OBSOLETE_METHODS, true);
 		store.setDefault(IJDIPreferencesConstants.PREF_ALERT_UNABLE_TO_INSTALL_BREAKPOINT, true);
+		store.setDefault(IJDIPreferencesConstants.PREF_PROMPT_DELETE_CONDITIONAL_BREAKPOINT, true);
 
 		store.setDefault(IJDIPreferencesConstants.PREF_SHOW_QUALIFIED_NAMES, false);
 		
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
index 59eaf25..34a0fe8 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
@@ -1,793 +1,798 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui;
-
- 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IMarkerDelta;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugEvent;
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.IBreakpointsListener;
-import org.eclipse.debug.core.IDebugEventSetListener;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchListener;
-import org.eclipse.debug.core.model.IBreakpoint;
-import org.eclipse.debug.core.model.IDebugTarget;
-import org.eclipse.debug.ui.DebugUITools;
-import org.eclipse.debug.ui.sourcelookup.ISourceLookupResult;
-import org.eclipse.jdt.core.dom.Message;
-import org.eclipse.jdt.debug.core.IJavaBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaBreakpointListener;
-import org.eclipse.jdt.debug.core.IJavaDebugTarget;
-import org.eclipse.jdt.debug.core.IJavaExceptionBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaMethodEntryBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaStackFrame;
-import org.eclipse.jdt.debug.core.IJavaThread;
-import org.eclipse.jdt.debug.core.IJavaType;
-import org.eclipse.jdt.debug.core.IJavaWatchpoint;
-import org.eclipse.jdt.debug.core.JDIDebugModel;
-import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
-import org.eclipse.jdt.internal.debug.core.breakpoints.JavaExceptionBreakpoint;
-import org.eclipse.jdt.internal.debug.core.logicalstructures.IJavaStructuresListener;
-import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaLogicalStructures;
-import org.eclipse.jdt.internal.debug.ui.actions.JavaBreakpointPropertiesAction;
-import org.eclipse.jdt.internal.debug.ui.breakpoints.SuspendOnCompilationErrorListener;
-import org.eclipse.jdt.internal.debug.ui.breakpoints.SuspendOnUncaughtExceptionListener;
-import org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookLauncher;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-import com.ibm.icu.text.MessageFormat;
-import com.sun.jdi.InvocationException;
-import com.sun.jdi.ObjectReference;
-
-/**
- * Manages options for the Java Debugger:<ul>
- * <li>Suspend on compilation errors</li>
- * <li>Suspend on uncaught exceptions</li>
- * <li>Step filters</li>
- * <li>Sets a system property that the Java debugger is active if
- * there are launches that contain running debug targets. Used for Java
- * debug action visibility.
- * </ul>
- */
-public class JavaDebugOptionsManager implements IDebugEventSetListener, IPropertyChangeListener, IJavaBreakpointListener, ILaunchListener, IBreakpointsListener, IJavaStructuresListener {
-	
-	/**
-	 * Singleton options manager
-	 */
-	private static JavaDebugOptionsManager fgOptionsManager = null;
-	
-	/**
-	 * Breakpoint used to suspend on uncaught exceptions
-	 */
-	private IJavaExceptionBreakpoint fSuspendOnExceptionBreakpoint = null;
-	
-	/**
-	 * Breakpoint used to suspend on compilation errors
-	 */
-	private IJavaExceptionBreakpoint fSuspendOnErrorBreakpoint = null;	
-	
-	/**
-	 * A label provider
-	 */
-	private static ILabelProvider fLabelProvider= DebugUITools.newDebugModelPresentation();
-	
-	/**
-	 * Constants indicating whether a breakpoint
-	 * is added, removed, or changed.
-	 */
-	private static final int ADDED = 0;
-	private static final int REMOVED = 1;
-	private static final int CHANGED = 2;
-		
-	/**
-	 * Local cache of active step filters.
-	 */
-	private String[] fActiveStepFilters = null;
-	
-	/**
-	 * Preferences that effect variable display options.
-	 * 
-	 * @since 3.3
-	 */
-	private static Set fgDisplayOptions;
-	
-	static {
-		fgDisplayOptions = new HashSet();
-		fgDisplayOptions.add(IJDIPreferencesConstants.PREF_SHOW_CHAR);
-		fgDisplayOptions.add(IJDIPreferencesConstants.PREF_SHOW_HEX);
-		fgDisplayOptions.add(IJDIPreferencesConstants.PREF_SHOW_UNSIGNED);
-	}
-	
-	/**
-	 * Whether the manager has been activated
-	 */
-	private boolean fActivated = false;
-	
-	class InitJob extends Job {
-		
-		public InitJob() {
-			super(DebugUIMessages.JavaDebugOptionsManager_0); 
-		}
-		
-		protected IStatus run(IProgressMonitor monitor) {
-			MultiStatus status = new MultiStatus(JDIDebugUIPlugin.getUniqueIdentifier(), IJavaDebugUIConstants.INTERNAL_ERROR, "Java debug options failed to initialize", null);  //$NON-NLS-1$
-			// compilation error breakpoint 
-			try {
-				IJavaExceptionBreakpoint bp = JDIDebugModel.createExceptionBreakpoint(ResourcesPlugin.getWorkspace().getRoot(),"java.lang.Error", true, true, false, false, null); //$NON-NLS-1$
-				bp.setPersisted(false);
-				bp.addBreakpointListener(SuspendOnCompilationErrorListener.ID_COMPILATION_ERROR_LISTENER);
-				setSuspendOnCompilationErrorsBreakpoint(bp);
-			} catch (CoreException e) {
-				status.add(e.getStatus());
-			}
-			
-			// uncaught exception breakpoint
-			try {
-				IJavaExceptionBreakpoint bp = JDIDebugModel.createExceptionBreakpoint(ResourcesPlugin.getWorkspace().getRoot(),"java.lang.Throwable", false, true, false, false, null); //$NON-NLS-1$
-				((JavaExceptionBreakpoint)bp).setSuspendOnSubclasses(true);
-				bp.setPersisted(false);
-				bp.addBreakpointListener(SuspendOnUncaughtExceptionListener.ID_UNCAUGHT_EXCEPTION_LISTENER);
-				setSuspendOnUncaughtExceptionBreakpoint(bp);
-			} catch (CoreException e) {
-				status.add(e.getStatus());
-			}
-			
-			if (status.getChildren().length == 0) {
-				return Status.OK_STATUS;
-			}
-			return status;
-		}
-	}
-	
-	/**
-	 * Not to be instantiated
-	 * 
-	 * @see JavaDebugOptionsManager#getDefault();
-	 */
-	private JavaDebugOptionsManager() {
-	}
-	
-	/**
-	 * Return the default options manager
-	 */
-	public static JavaDebugOptionsManager getDefault() {
-		if (fgOptionsManager == null) {
-			fgOptionsManager = new JavaDebugOptionsManager();
-		}
-		return fgOptionsManager;
-	}
-	
-	/**
-	 * Called at startup by the Java debug ui plug-in
-	 */
-	public void startup() {
-		// lazy initialization will occur on the first launch
-		DebugPlugin debugPlugin = DebugPlugin.getDefault();
-		debugPlugin.getLaunchManager().addLaunchListener(this);
-		debugPlugin.getBreakpointManager().addBreakpointListener(this);
-		EvaluationContextManager.startup();
-	}
-	
-	/**
-	 * Called at shutdown by the Java debug ui plug-in
-	 */
-	public void shutdown() {
-		DebugPlugin debugPlugin = DebugPlugin.getDefault();
-		debugPlugin.removeDebugEventListener(this);
-		debugPlugin.getLaunchManager().removeLaunchListener(this);
-		debugPlugin.getBreakpointManager().removeBreakpointListener(this);
-		if (!JDIDebugUIPlugin.getDefault().isShuttingDown()) {
-			//avert restoring the preference store at shutdown
-			JDIDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
-		}
-		JDIDebugModel.removeJavaBreakpointListener(this);
-        JavaLogicalStructures.removeStructuresListener(this);
-		System.getProperties().remove(JDIDebugUIPlugin.getUniqueIdentifier() + ".debuggerActive"); //$NON-NLS-1$
-	}	
-
-	/**
-	 * Initializes compilation error handling and suspending
-	 * on uncaught exceptions.
-	 */
-	protected void initializeProblemHandling() {
-		InitJob job = new InitJob();
-		job.setSystem(true);
-		job.schedule();
-	}
-						
-	/**
-	 * Notifies java debug targets of the given breakpoint
-	 * addition or removal.
-	 * 
-	 * @param breakpoint a breakpoint
-	 * @param kind ADDED, REMOVED, or CHANGED
-	 */
-	protected void notifyTargets(IBreakpoint breakpoint, int kind) {
-		IDebugTarget[] targets = DebugPlugin.getDefault().getLaunchManager().getDebugTargets();
-		for (int i = 0; i < targets.length; i++) {
-			if (targets[i] instanceof IJavaDebugTarget) {
-				IJavaDebugTarget target = (IJavaDebugTarget)targets[i];
-				notifyTarget(target, breakpoint, kind);
-			}
-		}	
-	}
-	
-	/**
-	 * Notifies the give debug target of filter specifications
-	 * 
-	 * @param target Java debug target
-	 */
-	protected void notifyTargetOfFilters(IJavaDebugTarget target) {
-
-		IPreferenceStore store = JDIDebugUIPlugin.getDefault().getPreferenceStore();
-		
-		target.setFilterConstructors(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_CONSTRUCTORS));
-		target.setFilterStaticInitializers(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_STATIC_INITIALIZERS));
-		target.setFilterSynthetics(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_SYNTHETICS));
-		target.setStepThruFilters(store.getBoolean(IJDIPreferencesConstants.PREF_STEP_THRU_FILTERS));
-		target.setStepFilters(getActiveStepFilters());
-
-	}	
-	
-	/**
-	 * Notifies all targets of current filter specifications.
-	 */
-	protected void notifyTargetsOfFilters() {
-		IDebugTarget[] targets = DebugPlugin.getDefault().getLaunchManager().getDebugTargets();
-		for (int i = 0; i < targets.length; i++) {
-			if (targets[i] instanceof IJavaDebugTarget) {
-				IJavaDebugTarget target = (IJavaDebugTarget)targets[i];
-				notifyTargetOfFilters(target);
-			}
-		}	
-	}		
-
-	/**
-	 * Notifies the given target of the given breakpoint
-	 * addition or removal.
-	 * 
-	 * @param target Java debug target
-	 * @param breakpoint a breakpoint
-	 * @param kind ADDED, REMOVED, or CHANGED
-	 */	
-	protected void notifyTarget(IJavaDebugTarget target, IBreakpoint breakpoint, int kind) {
-		switch (kind) {
-			case ADDED:
-				target.breakpointAdded(breakpoint);
-				break;
-			case REMOVED:
-				target.breakpointRemoved(breakpoint,null);
-				break;
-			case CHANGED:
-				target.breakpointChanged(breakpoint,null);
-				break;
-		}
-	}
-	
-	/**
-	 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
-	 */
-	public void propertyChange(PropertyChangeEvent event) {
-		String property = event.getProperty();
-		if (property.equals(IJDIPreferencesConstants.PREF_SUSPEND_ON_COMPILATION_ERRORS)) {
-			IBreakpoint breakpoint = getSuspendOnCompilationErrorBreakpoint();
-			if (breakpoint != null) {
-				int kind = REMOVED;
-				if (isSuspendOnCompilationErrors()) {
-					kind = ADDED;
-				}
-				notifyTargets(breakpoint, kind);
-			}
-		} else if (property.equals(IJDIPreferencesConstants.PREF_SUSPEND_ON_UNCAUGHT_EXCEPTIONS)) {
-			IBreakpoint breakpoint = getSuspendOnUncaughtExceptionBreakpoint();
-			if (breakpoint != null) {
-				int kind = REMOVED;
-				if (isSuspendOnUncaughtExceptions()) {
-					kind = ADDED;
-				}			
-				notifyTargets(breakpoint, kind);
-			}
-		} else if (fgDisplayOptions.contains(property)) {
-			variableViewSettingsChanged();
-		} else if (isUseFilterProperty(property)) {
-			notifyTargetsOfFilters();
-		} else if (isFilterListProperty(property)) {
-			updateActiveFilters();
-		}
-	}
-	
-	/**
-	 * Returns whether the given property is a property that affects whether
-	 * or not step filters are used.
-	 */
-	private boolean isUseFilterProperty(String property) {
-		return property.equals(IJDIPreferencesConstants.PREF_FILTER_CONSTRUCTORS) ||
-			property.equals(IJDIPreferencesConstants.PREF_FILTER_STATIC_INITIALIZERS) ||
-			property.equals(IJDIPreferencesConstants.PREF_FILTER_SYNTHETICS) ||
-			property.equals(IJDIPreferencesConstants.PREF_STEP_THRU_FILTERS);
-	}
-	
-	/**
-	 * Returns whether the given property is a property that affects
-	 * the list of active or inactive step filters.
-	 */
-	private boolean isFilterListProperty(String property) {
-		return property.equals(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST) ||
-			property.equals(IJDIPreferencesConstants.PREF_INACTIVE_FILTERS_LIST);
-	}
-	
-	/**
-	 * Enable/Disable the given breakpoint and notify
-	 * targets of the change.
-	 * 
-	 * @param breakpoint a breakpoint
-	 * @param enabled whether enabeld
-	 */ 
-	protected void setEnabled(IBreakpoint breakpoint, boolean enabled) {
-		try {
-			breakpoint.setEnabled(enabled);
-			notifyTargets(breakpoint, CHANGED);
-		} catch (CoreException e) {
-			JDIDebugUIPlugin.log(e);
-		}		
-	}
-	
-	/**
-	 * Returns whether suspend on compilation errors is
-	 * enabled.
-	 * 
-	 * @return whether suspend on compilation errors is
-	 * enabled
-	 */
-	public boolean isSuspendOnCompilationErrors() {
-		return JDIDebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_SUSPEND_ON_COMPILATION_ERRORS);
-	}
-	
-	/**
-	 * Returns whether suspend on uncaught exception is
-	 * enabled
-	 * 
-	 * @return whether suspend on uncaught exception is
-	 * enabled
-	 */
-	protected boolean isSuspendOnUncaughtExceptions() {
-		return JDIDebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_SUSPEND_ON_UNCAUGHT_EXCEPTIONS);
-	}	
-
-
-	/**
-	 * Sets the breakpoint used to suspend on uncaught exceptions
-	 * 
-	 * @param breakpoint exception breakpoint
-	 */
-	private void setSuspendOnUncaughtExceptionBreakpoint(IJavaExceptionBreakpoint breakpoint) {
-		fSuspendOnExceptionBreakpoint = breakpoint;
-	}
-	
-	/**
-	 * Returns the breakpoint used to suspend on uncaught exceptions
-	 * 
-	 * @return exception breakpoint
-	 */
-	protected IJavaExceptionBreakpoint getSuspendOnUncaughtExceptionBreakpoint() {
-		return fSuspendOnExceptionBreakpoint;
-	}	
-	
-	/**
-	 * Sets the breakpoint used to suspend on compilation 
-	 * errors.
-	 * 
-	 * @param breakpoint exception breakpoint
-	 */
-	private void setSuspendOnCompilationErrorsBreakpoint(IJavaExceptionBreakpoint breakpoint) {
-		fSuspendOnErrorBreakpoint = breakpoint;
-	}
-	
-	/**
-	 * Returns the breakpoint used to suspend on compilation
-	 * errors
-	 * 
-	 * @return exception breakpoint
-	 */
-	protected IJavaExceptionBreakpoint getSuspendOnCompilationErrorBreakpoint() {
-		return fSuspendOnErrorBreakpoint;
-	}	
-	
-	/**
-	 * Parses the comma separated string into an array of strings
-	 * 
-	 * @return list
-	 */
-	public static String[] parseList(String listString) {
-		List list = new ArrayList(10);
-		StringTokenizer tokenizer = new StringTokenizer(listString, ","); //$NON-NLS-1$
-		while (tokenizer.hasMoreTokens()) {
-			String token = tokenizer.nextToken();
-			list.add(token);
-		}
-		return (String[])list.toArray(new String[list.size()]);
-	}
-	
-	/**
-	 * Serializes the array of strings into one comma
-	 * separated string.
-	 * 
-	 * @param list array of strings
-	 * @return a single string composed of the given list
-	 */
-	public static String serializeList(String[] list) {
-		if (list == null) {
-			return ""; //$NON-NLS-1$
-		}
-		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < list.length; i++) {
-			if (i > 0) {
-				buffer.append(',');
-			}
-			buffer.append(list[i]);
-		}
-		return buffer.toString();
-	}
-	
-	/**
-	 * Returns the current list of active step filters.
-	 * 
-	 * @return current list of active step filters
-	 */
-	protected String[] getActiveStepFilters() {
-		if (fActiveStepFilters == null) {
-			fActiveStepFilters= parseList(JDIDebugUIPlugin.getDefault().getPreferenceStore().getString(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST));
-			// After active filters are cached, register to hear about future changes
-			JDIDebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
-		}
-		return fActiveStepFilters;
-	}
-	
-	/**
-	 * Updates local copy of active step filters and
-	 * notifies targets.
-	 */
-	protected void updateActiveFilters() {
-		fActiveStepFilters= parseList(JDIDebugUIPlugin.getDefault().getPreferenceStore().getString(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST));
-		notifyTargetsOfFilters();
-	}
-	
-	/**
-	 * When a Java debug target is created, install options in
-	 * the target and set that the Java debugger is active.
-	 * When all Java debug targets are terminated set that that Java debugger is
-	 * no longer active.
-	 * 
-	 * @see IDebugEventSetListener#handleDebugEvents(DebugEvent[])
-	 */
-	public void handleDebugEvents(DebugEvent[] events) {
-		for (int i = 0; i < events.length; i++) {
-			DebugEvent event = events[i];
-			if (event.getKind() == DebugEvent.CREATE) {
-				Object source = event.getSource();
-				if (source instanceof IJavaDebugTarget) {
-					IJavaDebugTarget javaTarget = (IJavaDebugTarget)source;
-					
-					// compilation breakpoints	
-					if (isSuspendOnCompilationErrors()) {
-						notifyTarget(javaTarget, getSuspendOnCompilationErrorBreakpoint(), ADDED);
-					}
-					
-					// uncaught exception breakpoint
-					if (isSuspendOnUncaughtExceptions()) {
-						ILaunchConfiguration launchConfiguration = javaTarget.getLaunch().getLaunchConfiguration();
-						boolean isSnippetEditor = false;
-						
-						try {
-							isSnippetEditor = (launchConfiguration.getAttribute(ScrapbookLauncher.SCRAPBOOK_LAUNCH, (String)null) != null);
-						} catch (CoreException e) {
-						}
-						
-						if (!isSnippetEditor) { 
-							notifyTarget(javaTarget, getSuspendOnUncaughtExceptionBreakpoint(), ADDED);
-						}
-					}
-					
-					// step filters
-					notifyTargetOfFilters(javaTarget);
-				}
-			}
-		}
-	}
-
-	/**
-	 * @see IJavaBreakpointListener#addingBreakpoint(IJavaDebugTarget, IJavaBreakpoint)
-	 */
-	public void addingBreakpoint(IJavaDebugTarget target, IJavaBreakpoint breakpoint) {
-	}
-
-	/**
-	 * @see IJavaBreakpointListener#installingBreakpoint(IJavaDebugTarget, IJavaBreakpoint, IJavaType)
-	 */
-	public int installingBreakpoint(IJavaDebugTarget target, IJavaBreakpoint breakpoint, IJavaType type) {
-		return DONT_CARE;
-	}
-	
-	/**
-	 * @see IJavaBreakpointListener#breakpointHit(IJavaThread, IJavaBreakpoint)
-	 */
-	public int breakpointHit(IJavaThread thread, IJavaBreakpoint breakpoint) {
-		return DONT_CARE;
-	}
-
-	/**
-	 * @see IJavaBreakpointListener#breakpointInstalled(IJavaDebugTarget, IJavaBreakpoint)
-	 */
-	public void breakpointInstalled(IJavaDebugTarget target, IJavaBreakpoint breakpoint) {
-	}
-
-	/**
-	 * @see IJavaBreakpointListener#breakpointRemoved(IJavaDebugTarget, IJavaBreakpoint)
-	 */
-	public void breakpointRemoved(IJavaDebugTarget target, IJavaBreakpoint breakpoint) {
-	}
-	
-	/**
-	 * Returns any problem marker associated with the current location
-	 * of the given stack frame, or <code>null</code> if none.
-	 * 
-	 * @param frame stack frame
-	 * @return marker representing compilation problem, or <code>null</code>
-	 * @throws DebugException if an exception occurrs retrieveing the problem
-	 */
-	public IMarker getProblem(IJavaStackFrame frame) {
-		ILaunch launch = frame.getLaunch();
-		if (launch != null) {
-			ISourceLookupResult result = DebugUITools.lookupSource(frame, null);
-			Object sourceElement = result.getSourceElement();
-			if (sourceElement instanceof IResource) {
-				try {
-					IResource resource = (IResource) sourceElement;
-					IMarker[] markers = resource.findMarkers("org.eclipse.jdt.core.problem", true, IResource.DEPTH_INFINITE); //$NON-NLS-1$
-					int line = frame.getLineNumber();
-					for (int i = 0; i < markers.length; i++) {
-						IMarker marker = markers[i];
-						if (marker.getAttribute(IMarker.LINE_NUMBER, -1) == line && marker.getAttribute(IMarker.SEVERITY, -1) == IMarker.SEVERITY_ERROR) {
-							return marker;
-						}
-					}
-				} catch (CoreException e) {
-				}
-			}
-		}
-		return null;
-	}	
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.debug.core.IJavaBreakpointListener#breakpointHasRuntimeException(org.eclipse.jdt.debug.core.IJavaLineBreakpoint, org.eclipse.debug.core.DebugException)
-	 */
-	public void breakpointHasRuntimeException(final IJavaLineBreakpoint breakpoint, final DebugException exception) {
-		IStatus status;
-		Throwable wrappedException= exception.getStatus().getException();
-		if (wrappedException instanceof InvocationException) {
-			InvocationException ie= (InvocationException) wrappedException;
-			ObjectReference ref= ie.exception();		
-			status= new Status(IStatus.ERROR,JDIDebugUIPlugin.getUniqueIdentifier(), IStatus.ERROR, ref.referenceType().name(), null);
-		} else {
-			status= exception.getStatus();
-		}
-		openConditionErrorDialog(breakpoint, DebugUIMessages.JavaDebugOptionsManager_Conditional_breakpoint_encountered_runtime_exception__1, status); 
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.debug.core.IJavaBreakpointListener#breakpointHasCompilationErrors(org.eclipse.jdt.debug.core.IJavaLineBreakpoint, org.eclipse.jdt.core.dom.Message[])
-	 */
-	public void breakpointHasCompilationErrors(final IJavaLineBreakpoint breakpoint, final Message[] errors) {
-		StringBuffer message= new StringBuffer();
-		Message error;
-		for (int i=0, numErrors= errors.length; i < numErrors; i++) {
-			error= errors[i];
-			message.append(error.getMessage());
-			message.append("\n "); //$NON-NLS-1$
-		}
-		IStatus status= new Status(IStatus.ERROR, JDIDebugUIPlugin.getUniqueIdentifier(), IStatus.ERROR, message.toString(), null);
-		openConditionErrorDialog(breakpoint, DebugUIMessages.JavaDebugOptionsManager_Conditional_breakpoint_has_compilation_error_s___2, status); 
-	}
-	
-	private void openConditionErrorDialog(final IJavaLineBreakpoint breakpoint, final String errorMessage, final IStatus status) {
-		final Display display= JDIDebugUIPlugin.getStandardDisplay();
-		if (display.isDisposed()) {
-			return;
-		}
-		final String message= MessageFormat.format(errorMessage, new String[] {fLabelProvider.getText(breakpoint)});
-		display.asyncExec(new Runnable() {
-			public void run() {
-				if (display.isDisposed()) {
-					return;
-				}
-				Shell shell= JDIDebugUIPlugin.getActiveWorkbenchShell();
-				ConditionalBreakpointErrorDialog dialog= new ConditionalBreakpointErrorDialog(shell, message, status);
-				int result = dialog.open();
-				if (result == Window.OK) {
-					JavaBreakpointPropertiesAction action= new JavaBreakpointPropertiesAction();
-					action.selectionChanged(null, new StructuredSelection(breakpoint));
-					action.run(null);
-				}
-			}
-		});
-	}
-	
-	/**
-	 * Activates this debug options manager. When active, this
-	 * manager becomes a listener to many notifications and updates
-	 * running debug targets based on these notifications.
-	 * 
-	 * A debug options manager does not need to be activated until
-	 * there is a running debug target.
-	 */
-	private void activate() {
-		if (fActivated) {
-			return;
-		}
-		fActivated = true;
-		initializeProblemHandling();
-		notifyTargetsOfFilters();
-		DebugPlugin.getDefault().addDebugEventListener(this);
-		JDIDebugModel.addJavaBreakpointListener(this);
-        JavaLogicalStructures.addStructuresListener(this);
-	}	
-
-	/**
-	 * Startup problem handling on the first launch.
-	 * 
-	 * @see ILaunchListener#launchAdded(ILaunch)
-	 */
-	public void launchAdded(ILaunch launch) {
-		launchChanged(launch);
-	}
-	/**
-	 * @see ILaunchListener#launchChanged(ILaunch)
-	 */
-	public void launchChanged(ILaunch launch) {
-		activate();
-		DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this);		
-	}
-
-	/**
-	 * @see ILaunchListener#launchRemoved(ILaunch)
-	 */
-	public void launchRemoved(ILaunch launch) {
-	}
-	
-	/**
-	 * Adds message attributes to java breakpoints.
-	 * 
-	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
-	 */
-	public void breakpointsAdded(final IBreakpoint[] breakpoints) {
-		// if a breakpoint is added, but already has a message, do not update it
-		List update = new ArrayList();
-		for (int i = 0; i < breakpoints.length; i++) {
-			IBreakpoint breakpoint = breakpoints[i];
-			try {
-				if (breakpoint instanceof IJavaBreakpoint && breakpoint.getMarker().getAttribute(IMarker.MESSAGE) == null) {
-					update.add(breakpoint);
-				}
-			} catch (CoreException e) {
-				JDIDebugUIPlugin.log(e);
-			}
-		}
-		if (!update.isEmpty()) {
-			updateBreakpointMessages((IBreakpoint[])update.toArray(new IBreakpoint[update.size()]));
-		}
-	}
-	
-	/**
-	 * Updates message attributes on the given java breakpoints.
-	 * 
-	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
-	 */
-	private void updateBreakpointMessages(final IBreakpoint[] breakpoints) {
-		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < breakpoints.length; i++) {
-					IBreakpoint breakpoint = breakpoints[i];
-					if (breakpoint instanceof IJavaBreakpoint) {
-						String info = fLabelProvider.getText(breakpoint);
-						String type = DebugUIMessages.JavaDebugOptionsManager_Breakpoint___1; 
-						if (breakpoint instanceof IJavaMethodBreakpoint || breakpoint instanceof IJavaMethodEntryBreakpoint) {
-							type = DebugUIMessages.JavaDebugOptionsManager_Method_breakpoint___2; 
-						} else if (breakpoint instanceof IJavaWatchpoint) {
-							type = DebugUIMessages.JavaDebugOptionsManager_Watchpoint___3;  
-						} else if (breakpoint instanceof IJavaLineBreakpoint) {
-							type = DebugUIMessages.JavaDebugOptionsManager_Line_breakpoint___4; 
-						}
-						breakpoint.getMarker().setAttribute(IMarker.MESSAGE, type + info);
-					}
-				}
-			}
-		};
-		try {
-			ResourcesPlugin.getWorkspace().run(runnable, null, 0, null);
-		} catch (CoreException e) {
-			JDIDebugUIPlugin.log(e);
-		}
-	}	
-
-	/**
-	 * Updates message attributes on java breakpoints.
-	 * 
-	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsChanged(org.eclipse.debug.core.model.IBreakpoint[], org.eclipse.core.resources.IMarkerDelta[])
-	 */
-	public void breakpointsChanged(
-		IBreakpoint[] breakpoints,
-		IMarkerDelta[] deltas) {
-			updateBreakpointMessages(breakpoints);
-
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsRemoved(org.eclipse.debug.core.model.IBreakpoint[], org.eclipse.core.resources.IMarkerDelta[])
-	 */
-	public void breakpointsRemoved(
-		IBreakpoint[] breakpoints,
-		IMarkerDelta[] deltas) {
-	}
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jdt.internal.debug.core.logicalstructures.IJavaStructuresListener#logicalStructuresChanged()
-     */
-    public void logicalStructuresChanged() {
-    	variableViewSettingsChanged();
-    }
-    
-    /**
-	 * Refreshes the variables view by firing a change event on a stack frame (active
-	 * debug context).
-	 */
-    protected void variableViewSettingsChanged() {
-        // If a Java stack frame is selected in the Debug view, fire a change event on
-        // it so the variables view will update for any structure changes.
-        IAdaptable selected = DebugUITools.getDebugContext();
-        if (selected != null) {
-            IJavaStackFrame frame= (IJavaStackFrame) selected.getAdapter(IJavaStackFrame.class);
-            if (frame != null) {
-                DebugPlugin.getDefault().fireDebugEventSet(new DebugEvent[] { 
-                        new DebugEvent(frame, DebugEvent.CHANGE)
-                });
-            }
-        }
-    }    
-
-}
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Jesper Steen Moller - Enhancement 254677 - filter getters/setters
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui;
+
+ 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.debug.core.DebugEvent;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.IBreakpointsListener;
+import org.eclipse.debug.core.IDebugEventSetListener;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchListener;
+import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.core.model.IDebugTarget;
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.debug.ui.sourcelookup.ISourceLookupResult;
+import org.eclipse.jdt.core.dom.Message;
+import org.eclipse.jdt.debug.core.IJavaBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaBreakpointListener;
+import org.eclipse.jdt.debug.core.IJavaDebugTarget;
+import org.eclipse.jdt.debug.core.IJavaExceptionBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaMethodEntryBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaStackFrame;
+import org.eclipse.jdt.debug.core.IJavaThread;
+import org.eclipse.jdt.debug.core.IJavaType;
+import org.eclipse.jdt.debug.core.IJavaWatchpoint;
+import org.eclipse.jdt.debug.core.JDIDebugModel;
+import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
+import org.eclipse.jdt.internal.debug.core.breakpoints.JavaExceptionBreakpoint;
+import org.eclipse.jdt.internal.debug.core.logicalstructures.IJavaStructuresListener;
+import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaLogicalStructures;
+import org.eclipse.jdt.internal.debug.ui.actions.JavaBreakpointPropertiesAction;
+import org.eclipse.jdt.internal.debug.ui.breakpoints.SuspendOnCompilationErrorListener;
+import org.eclipse.jdt.internal.debug.ui.breakpoints.SuspendOnUncaughtExceptionListener;
+import org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookLauncher;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import com.ibm.icu.text.MessageFormat;
+import com.sun.jdi.InvocationException;
+import com.sun.jdi.ObjectReference;
+
+/**
+ * Manages options for the Java Debugger:<ul>
+ * <li>Suspend on compilation errors</li>
+ * <li>Suspend on uncaught exceptions</li>
+ * <li>Step filters</li>
+ * <li>Sets a system property that the Java debugger is active if
+ * there are launches that contain running debug targets. Used for Java
+ * debug action visibility.
+ * </ul>
+ */
+public class JavaDebugOptionsManager implements IDebugEventSetListener, IPropertyChangeListener, IJavaBreakpointListener, ILaunchListener, IBreakpointsListener, IJavaStructuresListener {
+	
+	/**
+	 * Singleton options manager
+	 */
+	private static JavaDebugOptionsManager fgOptionsManager = null;
+	
+	/**
+	 * Breakpoint used to suspend on uncaught exceptions
+	 */
+	private IJavaExceptionBreakpoint fSuspendOnExceptionBreakpoint = null;
+	
+	/**
+	 * Breakpoint used to suspend on compilation errors
+	 */
+	private IJavaExceptionBreakpoint fSuspendOnErrorBreakpoint = null;	
+	
+	/**
+	 * A label provider
+	 */
+	private static ILabelProvider fLabelProvider= DebugUITools.newDebugModelPresentation();
+	
+	/**
+	 * Constants indicating whether a breakpoint
+	 * is added, removed, or changed.
+	 */
+	private static final int ADDED = 0;
+	private static final int REMOVED = 1;
+	private static final int CHANGED = 2;
+		
+	/**
+	 * Local cache of active step filters.
+	 */
+	private String[] fActiveStepFilters = null;
+	
+	/**
+	 * Preferences that affect variable display options.
+	 * 
+	 * @since 3.3
+	 */
+	private static Set fgDisplayOptions;
+	
+	static {
+		fgDisplayOptions = new HashSet();
+		fgDisplayOptions.add(IJDIPreferencesConstants.PREF_SHOW_CHAR);
+		fgDisplayOptions.add(IJDIPreferencesConstants.PREF_SHOW_HEX);
+		fgDisplayOptions.add(IJDIPreferencesConstants.PREF_SHOW_UNSIGNED);
+	}
+	
+	/**
+	 * Whether the manager has been activated
+	 */
+	private boolean fActivated = false;
+	
+	class InitJob extends Job {
+		
+		public InitJob() {
+			super(DebugUIMessages.JavaDebugOptionsManager_0); 
+		}
+		
+		protected IStatus run(IProgressMonitor monitor) {
+			MultiStatus status = new MultiStatus(JDIDebugUIPlugin.getUniqueIdentifier(), IJavaDebugUIConstants.INTERNAL_ERROR, "Java debug options failed to initialize", null);  //$NON-NLS-1$
+			// compilation error breakpoint 
+			try {
+				IJavaExceptionBreakpoint bp = JDIDebugModel.createExceptionBreakpoint(ResourcesPlugin.getWorkspace().getRoot(),"java.lang.Error", true, true, false, false, null); //$NON-NLS-1$
+				bp.setPersisted(false);
+				bp.addBreakpointListener(SuspendOnCompilationErrorListener.ID_COMPILATION_ERROR_LISTENER);
+				setSuspendOnCompilationErrorsBreakpoint(bp);
+			} catch (CoreException e) {
+				status.add(e.getStatus());
+			}
+			
+			// uncaught exception breakpoint
+			try {
+				IJavaExceptionBreakpoint bp = JDIDebugModel.createExceptionBreakpoint(ResourcesPlugin.getWorkspace().getRoot(),"java.lang.Throwable", false, true, false, false, null); //$NON-NLS-1$
+				((JavaExceptionBreakpoint)bp).setSuspendOnSubclasses(true);
+				bp.setPersisted(false);
+				bp.addBreakpointListener(SuspendOnUncaughtExceptionListener.ID_UNCAUGHT_EXCEPTION_LISTENER);
+				setSuspendOnUncaughtExceptionBreakpoint(bp);
+			} catch (CoreException e) {
+				status.add(e.getStatus());
+			}
+			
+			if (status.getChildren().length == 0) {
+				return Status.OK_STATUS;
+			}
+			return status;
+		}
+	}
+	
+	/**
+	 * Not to be instantiated
+	 * 
+	 * @see JavaDebugOptionsManager#getDefault();
+	 */
+	private JavaDebugOptionsManager() {
+	}
+	
+	/**
+	 * Return the default options manager
+	 */
+	public static JavaDebugOptionsManager getDefault() {
+		if (fgOptionsManager == null) {
+			fgOptionsManager = new JavaDebugOptionsManager();
+		}
+		return fgOptionsManager;
+	}
+	
+	/**
+	 * Called at startup by the Java debug ui plug-in
+	 */
+	public void startup() {
+		// lazy initialization will occur on the first launch
+		DebugPlugin debugPlugin = DebugPlugin.getDefault();
+		debugPlugin.getLaunchManager().addLaunchListener(this);
+		debugPlugin.getBreakpointManager().addBreakpointListener(this);
+		EvaluationContextManager.startup();
+	}
+	
+	/**
+	 * Called at shutdown by the Java debug ui plug-in
+	 */
+	public void shutdown() {
+		DebugPlugin debugPlugin = DebugPlugin.getDefault();
+		debugPlugin.removeDebugEventListener(this);
+		debugPlugin.getLaunchManager().removeLaunchListener(this);
+		debugPlugin.getBreakpointManager().removeBreakpointListener(this);
+		if (!JDIDebugUIPlugin.getDefault().isShuttingDown()) {
+			//avert restoring the preference store at shutdown
+			JDIDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
+		}
+		JDIDebugModel.removeJavaBreakpointListener(this);
+        JavaLogicalStructures.removeStructuresListener(this);
+		System.getProperties().remove(JDIDebugUIPlugin.getUniqueIdentifier() + ".debuggerActive"); //$NON-NLS-1$
+	}	
+
+	/**
+	 * Initializes compilation error handling and suspending
+	 * on uncaught exceptions.
+	 */
+	protected void initializeProblemHandling() {
+		InitJob job = new InitJob();
+		job.setSystem(true);
+		job.schedule();
+	}
+						
+	/**
+	 * Notifies java debug targets of the given breakpoint
+	 * addition or removal.
+	 * 
+	 * @param breakpoint a breakpoint
+	 * @param kind ADDED, REMOVED, or CHANGED
+	 */
+	protected void notifyTargets(IBreakpoint breakpoint, int kind) {
+		IDebugTarget[] targets = DebugPlugin.getDefault().getLaunchManager().getDebugTargets();
+		for (int i = 0; i < targets.length; i++) {
+			if (targets[i] instanceof IJavaDebugTarget) {
+				IJavaDebugTarget target = (IJavaDebugTarget)targets[i];
+				notifyTarget(target, breakpoint, kind);
+			}
+		}	
+	}
+	
+	/**
+	 * Notifies the give debug target of filter specifications
+	 * 
+	 * @param target Java debug target
+	 */
+	protected void notifyTargetOfFilters(IJavaDebugTarget target) {
+
+		IPreferenceStore store = JDIDebugUIPlugin.getDefault().getPreferenceStore();
+		
+		target.setFilterConstructors(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_CONSTRUCTORS));
+		target.setFilterStaticInitializers(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_STATIC_INITIALIZERS));
+		target.setFilterSynthetics(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_SYNTHETICS));
+		target.setFilterGetters(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_GETTERS));
+		target.setFilterSetters(store.getBoolean(IJDIPreferencesConstants.PREF_FILTER_SETTERS));
+		target.setStepThruFilters(store.getBoolean(IJDIPreferencesConstants.PREF_STEP_THRU_FILTERS));
+		target.setStepFilters(getActiveStepFilters());
+
+	}	
+	
+	/**
+	 * Notifies all targets of current filter specifications.
+	 */
+	protected void notifyTargetsOfFilters() {
+		IDebugTarget[] targets = DebugPlugin.getDefault().getLaunchManager().getDebugTargets();
+		for (int i = 0; i < targets.length; i++) {
+			if (targets[i] instanceof IJavaDebugTarget) {
+				IJavaDebugTarget target = (IJavaDebugTarget)targets[i];
+				notifyTargetOfFilters(target);
+			}
+		}	
+	}		
+
+	/**
+	 * Notifies the given target of the given breakpoint
+	 * addition or removal.
+	 * 
+	 * @param target Java debug target
+	 * @param breakpoint a breakpoint
+	 * @param kind ADDED, REMOVED, or CHANGED
+	 */	
+	protected void notifyTarget(IJavaDebugTarget target, IBreakpoint breakpoint, int kind) {
+		switch (kind) {
+			case ADDED:
+				target.breakpointAdded(breakpoint);
+				break;
+			case REMOVED:
+				target.breakpointRemoved(breakpoint,null);
+				break;
+			case CHANGED:
+				target.breakpointChanged(breakpoint,null);
+				break;
+		}
+	}
+	
+	/**
+	 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
+	 */
+	public void propertyChange(PropertyChangeEvent event) {
+		String property = event.getProperty();
+		if (property.equals(IJDIPreferencesConstants.PREF_SUSPEND_ON_COMPILATION_ERRORS)) {
+			IBreakpoint breakpoint = getSuspendOnCompilationErrorBreakpoint();
+			if (breakpoint != null) {
+				int kind = REMOVED;
+				if (isSuspendOnCompilationErrors()) {
+					kind = ADDED;
+				}
+				notifyTargets(breakpoint, kind);
+			}
+		} else if (property.equals(IJDIPreferencesConstants.PREF_SUSPEND_ON_UNCAUGHT_EXCEPTIONS)) {
+			IBreakpoint breakpoint = getSuspendOnUncaughtExceptionBreakpoint();
+			if (breakpoint != null) {
+				int kind = REMOVED;
+				if (isSuspendOnUncaughtExceptions()) {
+					kind = ADDED;
+				}			
+				notifyTargets(breakpoint, kind);
+			}
+		} else if (fgDisplayOptions.contains(property)) {
+			variableViewSettingsChanged();
+		} else if (isUseFilterProperty(property)) {
+			notifyTargetsOfFilters();
+		} else if (isFilterListProperty(property)) {
+			updateActiveFilters();
+		}
+	}
+	
+	/**
+	 * Returns whether the given property is a property that affects whether
+	 * or not step filters are used.
+	 */
+	private boolean isUseFilterProperty(String property) {
+		return property.equals(IJDIPreferencesConstants.PREF_FILTER_CONSTRUCTORS) ||
+			property.equals(IJDIPreferencesConstants.PREF_FILTER_STATIC_INITIALIZERS) ||
+			property.equals(IJDIPreferencesConstants.PREF_FILTER_GETTERS) ||
+			property.equals(IJDIPreferencesConstants.PREF_FILTER_SETTERS) ||
+			property.equals(IJDIPreferencesConstants.PREF_FILTER_SYNTHETICS) ||
+			property.equals(IJDIPreferencesConstants.PREF_STEP_THRU_FILTERS);
+	}
+	
+	/**
+	 * Returns whether the given property is a property that affects
+	 * the list of active or inactive step filters.
+	 */
+	private boolean isFilterListProperty(String property) {
+		return property.equals(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST) ||
+			property.equals(IJDIPreferencesConstants.PREF_INACTIVE_FILTERS_LIST);
+	}
+	
+	/**
+	 * Enable/Disable the given breakpoint and notify
+	 * targets of the change.
+	 * 
+	 * @param breakpoint a breakpoint
+	 * @param enabled whether enabeld
+	 */ 
+	protected void setEnabled(IBreakpoint breakpoint, boolean enabled) {
+		try {
+			breakpoint.setEnabled(enabled);
+			notifyTargets(breakpoint, CHANGED);
+		} catch (CoreException e) {
+			JDIDebugUIPlugin.log(e);
+		}		
+	}
+	
+	/**
+	 * Returns whether suspend on compilation errors is
+	 * enabled.
+	 * 
+	 * @return whether suspend on compilation errors is
+	 * enabled
+	 */
+	public boolean isSuspendOnCompilationErrors() {
+		return JDIDebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_SUSPEND_ON_COMPILATION_ERRORS);
+	}
+	
+	/**
+	 * Returns whether suspend on uncaught exception is
+	 * enabled
+	 * 
+	 * @return whether suspend on uncaught exception is
+	 * enabled
+	 */
+	protected boolean isSuspendOnUncaughtExceptions() {
+		return JDIDebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_SUSPEND_ON_UNCAUGHT_EXCEPTIONS);
+	}	
+
+
+	/**
+	 * Sets the breakpoint used to suspend on uncaught exceptions
+	 * 
+	 * @param breakpoint exception breakpoint
+	 */
+	private void setSuspendOnUncaughtExceptionBreakpoint(IJavaExceptionBreakpoint breakpoint) {
+		fSuspendOnExceptionBreakpoint = breakpoint;
+	}
+	
+	/**
+	 * Returns the breakpoint used to suspend on uncaught exceptions
+	 * 
+	 * @return exception breakpoint
+	 */
+	protected IJavaExceptionBreakpoint getSuspendOnUncaughtExceptionBreakpoint() {
+		return fSuspendOnExceptionBreakpoint;
+	}	
+	
+	/**
+	 * Sets the breakpoint used to suspend on compilation 
+	 * errors.
+	 * 
+	 * @param breakpoint exception breakpoint
+	 */
+	private void setSuspendOnCompilationErrorsBreakpoint(IJavaExceptionBreakpoint breakpoint) {
+		fSuspendOnErrorBreakpoint = breakpoint;
+	}
+	
+	/**
+	 * Returns the breakpoint used to suspend on compilation
+	 * errors
+	 * 
+	 * @return exception breakpoint
+	 */
+	protected IJavaExceptionBreakpoint getSuspendOnCompilationErrorBreakpoint() {
+		return fSuspendOnErrorBreakpoint;
+	}	
+	
+	/**
+	 * Parses the comma separated string into an array of strings
+	 * 
+	 * @return list
+	 */
+	public static String[] parseList(String listString) {
+		List list = new ArrayList(10);
+		StringTokenizer tokenizer = new StringTokenizer(listString, ","); //$NON-NLS-1$
+		while (tokenizer.hasMoreTokens()) {
+			String token = tokenizer.nextToken();
+			list.add(token);
+		}
+		return (String[])list.toArray(new String[list.size()]);
+	}
+	
+	/**
+	 * Serializes the array of strings into one comma
+	 * separated string.
+	 * 
+	 * @param list array of strings
+	 * @return a single string composed of the given list
+	 */
+	public static String serializeList(String[] list) {
+		if (list == null) {
+			return ""; //$NON-NLS-1$
+		}
+		StringBuffer buffer = new StringBuffer();
+		for (int i = 0; i < list.length; i++) {
+			if (i > 0) {
+				buffer.append(',');
+			}
+			buffer.append(list[i]);
+		}
+		return buffer.toString();
+	}
+	
+	/**
+	 * Returns the current list of active step filters.
+	 * 
+	 * @return current list of active step filters
+	 */
+	protected String[] getActiveStepFilters() {
+		if (fActiveStepFilters == null) {
+			fActiveStepFilters= parseList(JDIDebugUIPlugin.getDefault().getPreferenceStore().getString(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST));
+			// After active filters are cached, register to hear about future changes
+			JDIDebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
+		}
+		return fActiveStepFilters;
+	}
+	
+	/**
+	 * Updates local copy of active step filters and
+	 * notifies targets.
+	 */
+	protected void updateActiveFilters() {
+		fActiveStepFilters= parseList(JDIDebugUIPlugin.getDefault().getPreferenceStore().getString(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST));
+		notifyTargetsOfFilters();
+	}
+	
+	/**
+	 * When a Java debug target is created, install options in
+	 * the target and set that the Java debugger is active.
+	 * When all Java debug targets are terminated set that that Java debugger is
+	 * no longer active.
+	 * 
+	 * @see IDebugEventSetListener#handleDebugEvents(DebugEvent[])
+	 */
+	public void handleDebugEvents(DebugEvent[] events) {
+		for (int i = 0; i < events.length; i++) {
+			DebugEvent event = events[i];
+			if (event.getKind() == DebugEvent.CREATE) {
+				Object source = event.getSource();
+				if (source instanceof IJavaDebugTarget) {
+					IJavaDebugTarget javaTarget = (IJavaDebugTarget)source;
+					
+					// compilation breakpoints	
+					if (isSuspendOnCompilationErrors()) {
+						notifyTarget(javaTarget, getSuspendOnCompilationErrorBreakpoint(), ADDED);
+					}
+					
+					// uncaught exception breakpoint
+					if (isSuspendOnUncaughtExceptions()) {
+						ILaunchConfiguration launchConfiguration = javaTarget.getLaunch().getLaunchConfiguration();
+						boolean isSnippetEditor = false;
+						
+						try {
+							isSnippetEditor = (launchConfiguration.getAttribute(ScrapbookLauncher.SCRAPBOOK_LAUNCH, (String)null) != null);
+						} catch (CoreException e) {
+						}
+						
+						if (!isSnippetEditor) { 
+							notifyTarget(javaTarget, getSuspendOnUncaughtExceptionBreakpoint(), ADDED);
+						}
+					}
+					
+					// step filters
+					notifyTargetOfFilters(javaTarget);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @see IJavaBreakpointListener#addingBreakpoint(IJavaDebugTarget, IJavaBreakpoint)
+	 */
+	public void addingBreakpoint(IJavaDebugTarget target, IJavaBreakpoint breakpoint) {
+	}
+
+	/**
+	 * @see IJavaBreakpointListener#installingBreakpoint(IJavaDebugTarget, IJavaBreakpoint, IJavaType)
+	 */
+	public int installingBreakpoint(IJavaDebugTarget target, IJavaBreakpoint breakpoint, IJavaType type) {
+		return DONT_CARE;
+	}
+	
+	/**
+	 * @see IJavaBreakpointListener#breakpointHit(IJavaThread, IJavaBreakpoint)
+	 */
+	public int breakpointHit(IJavaThread thread, IJavaBreakpoint breakpoint) {
+		return DONT_CARE;
+	}
+
+	/**
+	 * @see IJavaBreakpointListener#breakpointInstalled(IJavaDebugTarget, IJavaBreakpoint)
+	 */
+	public void breakpointInstalled(IJavaDebugTarget target, IJavaBreakpoint breakpoint) {
+	}
+
+	/**
+	 * @see IJavaBreakpointListener#breakpointRemoved(IJavaDebugTarget, IJavaBreakpoint)
+	 */
+	public void breakpointRemoved(IJavaDebugTarget target, IJavaBreakpoint breakpoint) {
+	}
+	
+	/**
+	 * Returns any problem marker associated with the current location
+	 * of the given stack frame, or <code>null</code> if none.
+	 * 
+	 * @param frame stack frame
+	 * @return marker representing compilation problem, or <code>null</code>
+	 * @throws DebugException if an exception occurrs retrieveing the problem
+	 */
+	public IMarker getProblem(IJavaStackFrame frame) {
+		ILaunch launch = frame.getLaunch();
+		if (launch != null) {
+			ISourceLookupResult result = DebugUITools.lookupSource(frame, null);
+			Object sourceElement = result.getSourceElement();
+			if (sourceElement instanceof IResource) {
+				try {
+					IResource resource = (IResource) sourceElement;
+					IMarker[] markers = resource.findMarkers("org.eclipse.jdt.core.problem", true, IResource.DEPTH_INFINITE); //$NON-NLS-1$
+					int line = frame.getLineNumber();
+					for (int i = 0; i < markers.length; i++) {
+						IMarker marker = markers[i];
+						if (marker.getAttribute(IMarker.LINE_NUMBER, -1) == line && marker.getAttribute(IMarker.SEVERITY, -1) == IMarker.SEVERITY_ERROR) {
+							return marker;
+						}
+					}
+				} catch (CoreException e) {
+				}
+			}
+		}
+		return null;
+	}	
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaBreakpointListener#breakpointHasRuntimeException(org.eclipse.jdt.debug.core.IJavaLineBreakpoint, org.eclipse.debug.core.DebugException)
+	 */
+	public void breakpointHasRuntimeException(final IJavaLineBreakpoint breakpoint, final DebugException exception) {
+		IStatus status;
+		Throwable wrappedException= exception.getStatus().getException();
+		if (wrappedException instanceof InvocationException) {
+			InvocationException ie= (InvocationException) wrappedException;
+			ObjectReference ref= ie.exception();		
+			status= new Status(IStatus.ERROR,JDIDebugUIPlugin.getUniqueIdentifier(), IStatus.ERROR, ref.referenceType().name(), null);
+		} else {
+			status= exception.getStatus();
+		}
+		openConditionErrorDialog(breakpoint, DebugUIMessages.JavaDebugOptionsManager_Conditional_breakpoint_encountered_runtime_exception__1, status); 
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaBreakpointListener#breakpointHasCompilationErrors(org.eclipse.jdt.debug.core.IJavaLineBreakpoint, org.eclipse.jdt.core.dom.Message[])
+	 */
+	public void breakpointHasCompilationErrors(final IJavaLineBreakpoint breakpoint, final Message[] errors) {
+		StringBuffer message= new StringBuffer();
+		Message error;
+		for (int i=0, numErrors= errors.length; i < numErrors; i++) {
+			error= errors[i];
+			message.append(error.getMessage());
+			message.append("\n "); //$NON-NLS-1$
+		}
+		IStatus status= new Status(IStatus.ERROR, JDIDebugUIPlugin.getUniqueIdentifier(), IStatus.ERROR, message.toString(), null);
+		openConditionErrorDialog(breakpoint, DebugUIMessages.JavaDebugOptionsManager_Conditional_breakpoint_has_compilation_error_s___2, status); 
+	}
+	
+	private void openConditionErrorDialog(final IJavaLineBreakpoint breakpoint, final String errorMessage, final IStatus status) {
+		final Display display= JDIDebugUIPlugin.getStandardDisplay();
+		if (display.isDisposed()) {
+			return;
+		}
+		final String message= MessageFormat.format(errorMessage, new String[] {fLabelProvider.getText(breakpoint)});
+		display.asyncExec(new Runnable() {
+			public void run() {
+				if (display.isDisposed()) {
+					return;
+				}
+				Shell shell= JDIDebugUIPlugin.getActiveWorkbenchShell();
+				ConditionalBreakpointErrorDialog dialog= new ConditionalBreakpointErrorDialog(shell, message, status);
+				int result = dialog.open();
+				if (result == Window.OK) {
+					JavaBreakpointPropertiesAction action= new JavaBreakpointPropertiesAction();
+					action.selectionChanged(null, new StructuredSelection(breakpoint));
+					action.run(null);
+				}
+			}
+		});
+	}
+	
+	/**
+	 * Activates this debug options manager. When active, this
+	 * manager becomes a listener to many notifications and updates
+	 * running debug targets based on these notifications.
+	 * 
+	 * A debug options manager does not need to be activated until
+	 * there is a running debug target.
+	 */
+	private void activate() {
+		if (fActivated) {
+			return;
+		}
+		fActivated = true;
+		initializeProblemHandling();
+		notifyTargetsOfFilters();
+		DebugPlugin.getDefault().addDebugEventListener(this);
+		JDIDebugModel.addJavaBreakpointListener(this);
+        JavaLogicalStructures.addStructuresListener(this);
+	}	
+
+	/**
+	 * Startup problem handling on the first launch.
+	 * 
+	 * @see ILaunchListener#launchAdded(ILaunch)
+	 */
+	public void launchAdded(ILaunch launch) {
+		launchChanged(launch);
+	}
+	/**
+	 * @see ILaunchListener#launchChanged(ILaunch)
+	 */
+	public void launchChanged(ILaunch launch) {
+		activate();
+		DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this);		
+	}
+
+	/**
+	 * @see ILaunchListener#launchRemoved(ILaunch)
+	 */
+	public void launchRemoved(ILaunch launch) {
+	}
+	
+	/**
+	 * Adds message attributes to java breakpoints.
+	 * 
+	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
+	 */
+	public void breakpointsAdded(final IBreakpoint[] breakpoints) {
+		// if a breakpoint is added, but already has a message, do not update it
+		List update = new ArrayList();
+		for (int i = 0; i < breakpoints.length; i++) {
+			IBreakpoint breakpoint = breakpoints[i];
+			try {
+				if (breakpoint instanceof IJavaBreakpoint && breakpoint.getMarker().getAttribute(IMarker.MESSAGE) == null) {
+					update.add(breakpoint);
+				}
+			} catch (CoreException e) {
+				JDIDebugUIPlugin.log(e);
+			}
+		}
+		if (!update.isEmpty()) {
+			updateBreakpointMessages((IBreakpoint[])update.toArray(new IBreakpoint[update.size()]));
+		}
+	}
+	
+	/**
+	 * Updates message attributes on the given java breakpoints.
+	 * 
+	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
+	 */
+	private void updateBreakpointMessages(final IBreakpoint[] breakpoints) {
+		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+			public void run(IProgressMonitor monitor) throws CoreException {
+				for (int i = 0; i < breakpoints.length; i++) {
+					IBreakpoint breakpoint = breakpoints[i];
+					if (breakpoint instanceof IJavaBreakpoint) {
+						String info = fLabelProvider.getText(breakpoint);
+						String type = DebugUIMessages.JavaDebugOptionsManager_Breakpoint___1; 
+						if (breakpoint instanceof IJavaMethodBreakpoint || breakpoint instanceof IJavaMethodEntryBreakpoint) {
+							type = DebugUIMessages.JavaDebugOptionsManager_Method_breakpoint___2; 
+						} else if (breakpoint instanceof IJavaWatchpoint) {
+							type = DebugUIMessages.JavaDebugOptionsManager_Watchpoint___3;  
+						} else if (breakpoint instanceof IJavaLineBreakpoint) {
+							type = DebugUIMessages.JavaDebugOptionsManager_Line_breakpoint___4; 
+						}
+						breakpoint.getMarker().setAttribute(IMarker.MESSAGE, type + info);
+					}
+				}
+			}
+		};
+		try {
+			ResourcesPlugin.getWorkspace().run(runnable, null, 0, null);
+		} catch (CoreException e) {
+			JDIDebugUIPlugin.log(e);
+		}
+	}	
+
+	/**
+	 * Updates message attributes on java breakpoints.
+	 * 
+	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsChanged(org.eclipse.debug.core.model.IBreakpoint[], org.eclipse.core.resources.IMarkerDelta[])
+	 */
+	public void breakpointsChanged(
+		IBreakpoint[] breakpoints,
+		IMarkerDelta[] deltas) {
+			updateBreakpointMessages(breakpoints);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsRemoved(org.eclipse.debug.core.model.IBreakpoint[], org.eclipse.core.resources.IMarkerDelta[])
+	 */
+	public void breakpointsRemoved(
+		IBreakpoint[] breakpoints,
+		IMarkerDelta[] deltas) {
+	}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jdt.internal.debug.core.logicalstructures.IJavaStructuresListener#logicalStructuresChanged()
+     */
+    public void logicalStructuresChanged() {
+    	variableViewSettingsChanged();
+    }
+    
+    /**
+	 * Refreshes the variables view by firing a change event on a stack frame (active
+	 * debug context).
+	 */
+    protected void variableViewSettingsChanged() {
+        // If a Java stack frame is selected in the Debug view, fire a change event on
+        // it so the variables view will update for any structure changes.
+        IAdaptable selected = DebugUITools.getDebugContext();
+        if (selected != null) {
+            IJavaStackFrame frame= (IJavaStackFrame) selected.getAdapter(IJavaStackFrame.class);
+            if (frame != null) {
+                DebugPlugin.getDefault().fireDebugEventSet(new DebugEvent[] { 
+                        new DebugEvent(frame, DebugEvent.CHANGE)
+                });
+            }
+        }
+    }    
+
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugPreferencePage.java
index e7a66fa..2505d49 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,19 +11,11 @@
 package org.eclipse.jdt.internal.debug.ui;
 
  
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.debug.internal.ui.SWTFactory;
+import com.ibm.icu.text.MessageFormat;
+
 import org.eclipse.jdt.debug.core.IJavaBreakpoint;
 import org.eclipse.jdt.debug.core.JDIDebugModel;
-import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jface.preference.FieldEditor;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.preference.StringFieldEditor;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
@@ -31,13 +23,28 @@ import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Group;
+
+import org.eclipse.core.runtime.Preferences;
+
+import org.eclipse.jface.preference.FieldEditor;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.PreferenceLinkArea;
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
-import com.ibm.icu.text.MessageFormat;
+import org.eclipse.debug.internal.ui.SWTFactory;
+
+import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
+
+import org.eclipse.jdt.launching.JavaRuntime;
 
 /**
  * Preference page for debug preferences that apply specifically to
@@ -73,6 +80,7 @@ public class JavaDebugPreferencePage extends PreferencePage implements IWorkbenc
 	private Button fSuspendDuringEvaluations;
 	private Button fOpenInspector;
 	private Button fPromptUnableToInstallBreakpoint;
+	private Button fPromptDeleteConditionalBreakpoint;
 	private Combo fSuspendVMorThread;
 	private Combo fWatchpoint;
 	
@@ -153,6 +161,7 @@ public class JavaDebugPreferencePage extends PreferencePage implements IWorkbenc
 		
 		SWTFactory.createVerticalSpacer(composite, 1);
 		fPromptUnableToInstallBreakpoint = SWTFactory.createCheckButton(composite, DebugUIMessages.JavaDebugPreferencePage_19, null, false, 1);
+		fPromptDeleteConditionalBreakpoint= SWTFactory.createCheckButton(composite, DebugUIMessages.JavaDebugPreferencePage_promptWhenDeletingCondidtionalBreakpoint, null, false, 1);
 		
 		setValues();
 		fTimeoutText.setPropertyChangeListener(this);
@@ -190,6 +199,7 @@ public class JavaDebugPreferencePage extends PreferencePage implements IWorkbenc
 		coreStore.setValue(JDIDebugModel.PREF_REQUEST_TIMEOUT, fTimeoutText.getIntValue());
 		runtimeStore.setValue(JavaRuntime.PREF_CONNECT_TIMEOUT, fConnectionTimeoutText.getIntValue());
 		store.setValue(IJDIPreferencesConstants.PREF_ALERT_UNABLE_TO_INSTALL_BREAKPOINT, fPromptUnableToInstallBreakpoint.getSelection());
+		store.setValue(IJDIPreferencesConstants.PREF_PROMPT_DELETE_CONDITIONAL_BREAKPOINT, fPromptDeleteConditionalBreakpoint.getSelection());
 		store.setValue(IJDIPreferencesConstants.PREF_OPEN_INSPECT_POPUP_ON_EXCEPTION, fOpenInspector.getSelection());
 		JDIDebugModel.savePreferences();
 		JavaRuntime.savePreferences();
@@ -218,6 +228,7 @@ public class JavaDebugPreferencePage extends PreferencePage implements IWorkbenc
 		fTimeoutText.setStringValue(new Integer(coreStore.getDefaultInt(JDIDebugModel.PREF_REQUEST_TIMEOUT)).toString());
 		fConnectionTimeoutText.setStringValue(new Integer(runtimeStore.getDefaultInt(JavaRuntime.PREF_CONNECT_TIMEOUT)).toString());
 		fPromptUnableToInstallBreakpoint.setSelection(store.getDefaultBoolean(IJDIPreferencesConstants.PREF_ALERT_UNABLE_TO_INSTALL_BREAKPOINT));
+		fPromptDeleteConditionalBreakpoint.setSelection(store.getDefaultBoolean(IJDIPreferencesConstants.PREF_PROMPT_DELETE_CONDITIONAL_BREAKPOINT));
 		fOpenInspector.setSelection(store.getDefaultBoolean(IJDIPreferencesConstants.PREF_OPEN_INSPECT_POPUP_ON_EXCEPTION));
 		super.performDefaults();	
 	}
@@ -244,6 +255,7 @@ public class JavaDebugPreferencePage extends PreferencePage implements IWorkbenc
 		fTimeoutText.setStringValue(new Integer(coreStore.getInt(JDIDebugModel.PREF_REQUEST_TIMEOUT)).toString());
 		fConnectionTimeoutText.setStringValue(new Integer(runtimeStore.getInt(JavaRuntime.PREF_CONNECT_TIMEOUT)).toString());
 		fPromptUnableToInstallBreakpoint.setSelection(store.getBoolean(IJDIPreferencesConstants.PREF_ALERT_UNABLE_TO_INSTALL_BREAKPOINT));
+		fPromptDeleteConditionalBreakpoint.setSelection(store.getBoolean(IJDIPreferencesConstants.PREF_PROMPT_DELETE_CONDITIONAL_BREAKPOINT));
 		fOpenInspector.setSelection(store.getBoolean(IJDIPreferencesConstants.PREF_OPEN_INSPECT_POPUP_ON_EXCEPTION));
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaStepFilterPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaStepFilterPreferencePage.java
index 136731c..4183be4 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaStepFilterPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaStepFilterPreferencePage.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Jesper Steen Moller - Enhancement 254677 - filter getters/setters
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.ui;
 
@@ -86,6 +87,8 @@ public class JavaStepFilterPreferencePage extends PreferencePage implements IWor
 	private Button fAddFilterButton;
 	private Button fFilterSyntheticButton;
 	private Button fFilterStaticButton;
+	private Button fFilterGetterButton;
+	private Button fFilterSetterButton;
 	private Button fFilterConstructorButton;
 	private Button fStepThruButton;
 	private Button fSelectAllButton;
@@ -202,6 +205,8 @@ public class JavaStepFilterPreferencePage extends PreferencePage implements IWor
 		fSelectAllButton.setEnabled(enabled);
 		fFilterConstructorButton.setEnabled(enabled);
 		fStepThruButton.setEnabled(enabled);
+		fFilterGetterButton.setEnabled(enabled);
+		fFilterSetterButton.setEnabled(enabled);
 		fFilterStaticButton.setEnabled(enabled);
 		fFilterSyntheticButton.setEnabled(enabled);
 		fTableViewer.getTable().setEnabled(enabled);
@@ -222,6 +227,12 @@ public class JavaStepFilterPreferencePage extends PreferencePage implements IWor
 		fFilterConstructorButton = SWTFactory.createCheckButton(container, 
 				DebugUIMessages.JavaStepFilterPreferencePage_Filter_co_nstructors_19, 
 				null, getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_FILTER_CONSTRUCTORS), 2);
+		fFilterGetterButton = SWTFactory.createCheckButton(container, 
+				DebugUIMessages.JavaStepFilterPreferencePage_Filter_getters, 
+				null, getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_FILTER_GETTERS), 2);
+		fFilterSetterButton = SWTFactory.createCheckButton(container, 
+				DebugUIMessages.JavaStepFilterPreferencePage_Filter_setters, 
+				null, getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_FILTER_SETTERS), 2);
 		fStepThruButton = SWTFactory.createCheckButton(container, 
 				DebugUIMessages.JavaStepFilterPreferencePage_0, 
 				null, getPreferenceStore().getBoolean(IJDIPreferencesConstants.PREF_STEP_THRU_FILTERS), 2);
@@ -409,6 +420,8 @@ public class JavaStepFilterPreferencePage extends PreferencePage implements IWor
 		store.setValue(IJDIPreferencesConstants.PREF_INACTIVE_FILTERS_LIST, pref);
 		store.setValue(IJDIPreferencesConstants.PREF_FILTER_CONSTRUCTORS, fFilterConstructorButton.getSelection());
 		store.setValue(IJDIPreferencesConstants.PREF_FILTER_STATIC_INITIALIZERS, fFilterStaticButton.getSelection());
+		store.setValue(IJDIPreferencesConstants.PREF_FILTER_GETTERS, fFilterGetterButton.getSelection());
+		store.setValue(IJDIPreferencesConstants.PREF_FILTER_SETTERS, fFilterSetterButton.getSelection());
 		store.setValue(IJDIPreferencesConstants.PREF_FILTER_SYNTHETICS, fFilterSyntheticButton.getSelection());
 		store.setValue(IJDIPreferencesConstants.PREF_STEP_THRU_FILTERS, fStepThruButton.getSelection());
 		return super.performOk();
@@ -424,6 +437,8 @@ public class JavaStepFilterPreferencePage extends PreferencePage implements IWor
 		fFilterSyntheticButton.setSelection(getPreferenceStore().getDefaultBoolean(IJDIPreferencesConstants.PREF_FILTER_SYNTHETICS));
 		fFilterStaticButton.setSelection(getPreferenceStore().getDefaultBoolean(IJDIPreferencesConstants.PREF_FILTER_STATIC_INITIALIZERS));
 		fFilterConstructorButton.setSelection(getPreferenceStore().getDefaultBoolean(IJDIPreferencesConstants.PREF_FILTER_CONSTRUCTORS));
+		fFilterGetterButton.setSelection(getPreferenceStore().getDefaultBoolean(IJDIPreferencesConstants.PREF_FILTER_GETTERS));
+		fFilterSetterButton.setSelection(getPreferenceStore().getDefaultBoolean(IJDIPreferencesConstants.PREF_FILTER_SETTERS));
 		fStepThruButton.setSelection(getPreferenceStore().getDefaultBoolean(IJDIPreferencesConstants.PREF_STEP_THRU_FILTERS));
 		fTableViewer.getTable().removeAll();
 		initTableState(true);				
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.java
index 59def8b..7cb0ace 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,11 @@ public class ActionMessages extends NLS {
 	public static String MoveDownAction_M_ove_Down_1;
 	public static String MoveUpAction_Move_U_p_1;
 
+	public static String OpenFromClipboardAction_ElementToOpen;
+	public static String OpenFromClipboardAction_OpenFromClipboard;
+	public static String OpenFromClipboardAction_OpeningFromClipboard;
+	public static String OpenFromClipboardAction_SelectOrEnterTheElementToOpen;
+
 	public static String OpenTypeAction_2;
 
 	public static String ProjectSelectionDialog_0;
@@ -122,6 +127,9 @@ public class ActionMessages extends NLS {
 	public static String ToggleBreakpointAdapter_6;
 	public static String ToggleBreakpointAdapter_7;
 	public static String ToggleBreakpointAdapter_9;
+	public static String ToggleBreakpointAdapter_confirmDeleteTitle;
+	public static String ToggleBreakpointAdapter_confirmDeleteMessage;
+	public static String ToggleBreakpointAdapter_confirmDeleteShowAgain;
 	public static String ToggleBreakpointAdapter_10;
 	public static String StepIntoSelectionHandler_1;
 	public static String StepIntoSelectionHandler_2;
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.properties b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.properties
index f9edad0..e231cae 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -108,6 +108,9 @@ ToggleBreakpointAdapter_3=A breakpoint cannot be set at the selected editor loca
 ToggleBreakpointAdapter_2=The current editor selection does not contain a valid field declaration.
 ToggleBreakpointAdapter_1=You cannot set class load breakpoints on interfaces.
 ToggleBreakpointAdapter_0=A class load breakpoint cannot be set at the selected editor location.
+ToggleBreakpointAdapter_confirmDeleteTitle=Confirm Conditional Breakpoint Delete
+ToggleBreakpointAdapter_confirmDeleteMessage=Are you sure you want to delete this conditional breakpoint?
+ToggleBreakpointAdapter_confirmDeleteShowAgain=Do not show this &message again
 StepIntoSelectionHandler_1=Step into selection
 StepIntoSelectionHandler_2=OK
 StepIntoSelectionHyperlinkDetector_0=Step Into
@@ -130,6 +133,10 @@ StringValueInputDialog_0=&Enter a new string value:
 StringValueInputDialog_1=Input &literal text
 StringValueInputDialog_2=&Input an evaluation
 StringValueInputDialog_4=&Word wrap
+OpenFromClipboardAction_ElementToOpen=&Clipboard content could not be opened, refine it and try again:
+OpenFromClipboardAction_OpenFromClipboard=Open from Clipboard
+OpenFromClipboardAction_OpeningFromClipboard=Opening from Clipboard...
+OpenFromClipboardAction_SelectOrEnterTheElementToOpen=Select or enter the element to open:
 OpenTypeAction_2=Unable to display the selected type.
 EditClasspathEntryAction_0=Ed&it...
 ProjectSelectionDialog_0=Choose &project(s) to add:
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
new file mode 100644
index 0000000..44fd716
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/OpenFromClipboardAction.java
@@ -0,0 +1,693 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui.actions;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.ISelection;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.console.ConsolePlugin;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleManager;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.search.IJavaSearchConstants;
+import org.eclipse.jdt.core.search.IJavaSearchScope;
+import org.eclipse.jdt.core.search.SearchEngine;
+import org.eclipse.jdt.core.search.SearchMatch;
+import org.eclipse.jdt.core.search.SearchParticipant;
+import org.eclipse.jdt.core.search.SearchPattern;
+import org.eclipse.jdt.core.search.SearchRequestor;
+import org.eclipse.jdt.core.search.TypeNameMatch;
+import org.eclipse.jdt.core.search.TypeNameMatchRequestor;
+
+import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
+import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jdt.internal.debug.ui.console.JavaStackTraceConsole;
+import org.eclipse.jdt.internal.debug.ui.console.JavaStackTraceConsoleFactory;
+
+import org.eclipse.jdt.ui.JavaElementLabelProvider;
+import org.eclipse.jdt.ui.JavaUI;
+
+/**
+ * Action delegate for Open from Clipboard action.
+ * 
+ * @since 3.7
+ */
+public class OpenFromClipboardAction implements IWorkbenchWindowActionDelegate {
+
+	/**
+	 * Pattern to match a simple name e.g. <code>OpenFromClipboardAction</code>
+	 */
+	private static final String SIMPLE_NAME_PATTERN= "\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*"; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match a qualified name e.g.
+	 * <code>org.eclipse.jdt.internal.debug.ui.actions.OpenFromClipboardAction</code>
+	 */
+	private static final String QUALIFIED_NAME_PATTERN = "(" + SIMPLE_NAME_PATTERN //$NON-NLS-1$
+			+ "\\.)*" + SIMPLE_NAME_PATTERN; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match whitespace characters.
+	 */
+	private static final String WS = "\\s*"; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match a java file name e.g. <code>OpenFromClipboardAction.java</code>
+	 */
+	private static final String JAVA_FILE_PATTERN = SIMPLE_NAME_PATTERN + "\\.java"; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match a java file name followed by line number e.g.
+	 * <code>OpenFromClipboardAction.java : 21</code>
+	 */
+	private static final String JAVA_FILE_LINE_PATTERN = JAVA_FILE_PATTERN + WS + ":" + WS + "\\d+"; //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * Pattern to match a qualified name followed by line number e.g.
+	 * <code>org.eclipse.jdt.internal.debug.ui.actions.OpenFromClipboardAction : 21</code>
+	 */
+	private static final String TYPE_LINE_PATTERN = QUALIFIED_NAME_PATTERN + WS + ":" + WS + "\\d+"; //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * Pattern to match a line from a stack trace e.g.
+	 * <code> at org.eclipse.core.runtime.Assert.isLegal(Assert.java:41)</code>
+	 */
+	private static final String STACK_TRACE_LINE_PATTERN = ".*\\(" //$NON-NLS-1$
+			+ WS + JAVA_FILE_LINE_PATTERN + WS + "\\).*"; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match a method e.g.
+	 * <code>org.eclipse.jdt.internal.debug.ui.actions.OpenFromClipboardAction.run(IAction)</code> ,
+	 * <code>Worker.run()</code>
+	 */
+	private static final String METHOD_PATTERN = QUALIFIED_NAME_PATTERN + "\\(.*\\)"; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match a stack element e.g. <code>java.lang.String.valueOf(char) line: 1456</code>
+	 */
+	private static final String STACK_PATTERN = METHOD_PATTERN + ".*\\d+"; //$NON-NLS-1$
+
+	/**
+	 * Pattern to match a member (field or method) of a type e.g.
+	 * <code>OpenFromClipboardAction#run</code>, <code>Worker#run</code>
+	 */
+	private static final String MEMBER_PATTERN = QUALIFIED_NAME_PATTERN + "#" //$NON-NLS-1$
+			+ SIMPLE_NAME_PATTERN;
+
+	/**
+	 * Pattern to match a method e.g. <code>OpenFromClipboardAction#run(IAction)</code>,
+	 * <code>Worker#run()</code>
+	 */
+	private static final String METHOD_JAVADOC_REFERENCE_PATTERN = QUALIFIED_NAME_PATTERN + "#" //$NON-NLS-1$
+			+ SIMPLE_NAME_PATTERN + "\\(.*\\)"; //$NON-NLS-1$
+
+	/*
+	 * Constants to indicate the pattern matched
+	 */
+	private static final int INVALID = 0;
+
+	private static final int QUALIFIED_NAME = 1;
+
+	private static final int JAVA_FILE = 2;
+
+	private static final int JAVA_FILE_LINE = 3;
+
+	private static final int TYPE_LINE = 4;
+
+	private static final int STACK_TRACE_LINE = 5;
+
+	private static final int METHOD = 6;
+
+	private static final int STACK = 7;
+
+	private static final int MEMBER = 8;
+
+	private static final int METHOD_JAVADOC_REFERENCE = 9;
+
+	private static final String TASK_NAME = ActionMessages.OpenFromClipboardAction_OpeningFromClipboard;
+
+	/*
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		Clipboard clipboard = new Clipboard(Display.getDefault());
+		TextTransfer textTransfer = TextTransfer.getInstance();
+		final String inputText = (String) clipboard.getContents(textTransfer);
+		if (inputText == null || inputText.length() == 0) {
+			openInputEditDialog(""); //$NON-NLS-1$
+			return;
+		}
+
+		if (isSingleLineInput(inputText)) {
+			handleSingleLineInput(inputText);
+			return;
+		}
+		handleMultipleLineInput(inputText);
+
+		return;
+	}
+
+	private static JavaStackTraceConsole getJavaStackTraceConsole() {
+		IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
+		IConsole[] consoles = consoleManager.getConsoles();
+		for (int i = 0; i < consoles.length; i++) {
+			if (consoles[i] instanceof JavaStackTraceConsole) {
+				return (JavaStackTraceConsole) consoles[i];
+			}
+		}
+		return null;
+	}
+
+	private static void handleMultipleLineInput(String inputText) {
+		// multiple lines - simply paste to the console and open it
+		IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
+		JavaStackTraceConsole console = getJavaStackTraceConsole();
+		if (console != null) {
+			console.getDocument().set(inputText);
+			consoleManager.showConsoleView(console);
+		} else {
+			JavaStackTraceConsoleFactory javaStackTraceConsoleFactory = new JavaStackTraceConsoleFactory();
+			javaStackTraceConsoleFactory.openConsole(inputText);
+			console = getJavaStackTraceConsole();
+		}
+		IPreferenceStore preferenceStore = JDIDebugUIPlugin.getDefault().getPreferenceStore();
+		if (preferenceStore.getBoolean(IJDIPreferencesConstants.PREF_AUTO_FORMAT_JSTCONSOLE)) {
+			console.format();
+		}
+	}
+
+	private static boolean isSingleLineInput(String inputText) {
+		String lineDelimiter = System.getProperty("line.separator"); //$NON-NLS-1$
+		String s = inputText.trim();
+		return s.indexOf(lineDelimiter) == -1;
+	}
+
+	private static int getMatchingPattern(String s) {
+		if (s.matches(JAVA_FILE_LINE_PATTERN))
+			return JAVA_FILE_LINE;
+		if (s.matches(JAVA_FILE_PATTERN))
+			return JAVA_FILE;
+		if (s.matches(TYPE_LINE_PATTERN))
+			return TYPE_LINE;
+		if (s.matches(STACK_TRACE_LINE_PATTERN))
+			return STACK_TRACE_LINE;
+		if (s.matches(METHOD_PATTERN))
+			return METHOD;
+		if (s.matches(STACK_PATTERN))
+			return STACK;
+		if (s.matches(MEMBER_PATTERN))
+			return MEMBER;
+		if (s.matches(METHOD_JAVADOC_REFERENCE_PATTERN))
+			return METHOD_JAVADOC_REFERENCE;
+		if (s.matches(QUALIFIED_NAME_PATTERN))
+			return QUALIFIED_NAME;
+		return INVALID;
+	}
+
+	private static void handleSingleLineInput(String inputText) {
+		List matches = new ArrayList();
+		try {
+			int line= getJavaElementMatches(inputText, matches);
+			handleMatches(matches, line, inputText);
+		} catch (InterruptedException ex) {
+			// Do nothing
+		}
+	}
+
+	/**
+	 * Parse the input text and search for the corresponding Java elements.
+	 * 
+	 * @param inputText the line number
+	 * @param matches matched Java elements
+	 * @return the line number
+	 * @throws InterruptedException if canceled by the user
+	 */
+	private static int getJavaElementMatches(String inputText, List matches) throws InterruptedException {
+		String s = inputText.trim();
+		switch (getMatchingPattern(s)) {
+		case JAVA_FILE_LINE: {
+			int index = s.indexOf(':');
+			String typeName = s.substring(0, index);
+			typeName = s.substring(0, typeName.indexOf(".java")); //$NON-NLS-1$
+			String lineNumber = s.substring(index + 1, s.length());
+			lineNumber = lineNumber.trim();
+			int line = (Integer.valueOf(lineNumber)).intValue();
+			getTypeMatches(typeName, matches);
+			return line;
+		}
+		case JAVA_FILE: {
+			String typeName = s.substring(0, s.indexOf(".java")); //$NON-NLS-1$
+			getTypeMatches(typeName, matches);
+			return -1;
+		}
+		case TYPE_LINE: {
+			int index = s.indexOf(':');
+			String typeName = s.substring(0, index);
+			typeName = typeName.trim();
+			String lineNumber = s.substring(index + 1, s.length());
+			lineNumber = lineNumber.trim();
+			int line = (Integer.valueOf(lineNumber)).intValue();
+			getTypeMatches(typeName, matches);
+			return line;
+		}
+		case STACK_TRACE_LINE: {
+			int index1 = s.indexOf('(');
+			int index2 = s.indexOf(')');
+			String typeLine = s.substring(index1 + 1, index2).trim();
+			int index = typeLine.indexOf(':');
+			String lineNumber = typeLine.substring(index + 1, typeLine.length()).trim();
+			int line = (Integer.valueOf(lineNumber)).intValue();
+
+			Pattern pattern = Pattern.compile(QUALIFIED_NAME_PATTERN + WS + "\\("); //$NON-NLS-1$
+			Matcher matcher = pattern.matcher(s);
+			if (matcher.find()) {
+				String qualifiedName = matcher.group();
+				index = qualifiedName.lastIndexOf('.');
+				qualifiedName = qualifiedName.substring(0, index);
+				getTypeMatches(qualifiedName, matches);
+			} else {
+				String typeName = typeLine.substring(0, index);
+				typeName = typeLine.substring(0, typeName.indexOf(".java")); //$NON-NLS-1$
+				getTypeMatches(typeName, matches);
+			}
+			return line;
+		}
+		case METHOD: {
+			getMethodMatches(s, matches);
+			return -1;
+		}
+		case STACK: {
+			int index = s.indexOf(')');
+			String method = s.substring(0, index + 1);
+			index = s.indexOf(':');
+			String lineNumber = s.substring(index + 1).trim();
+			int line = (Integer.valueOf(lineNumber)).intValue();
+			getMethodMatches(method, matches);
+			return line;
+		}
+		case MEMBER:
+			getMemberMatches(s.replace('#', '.'), matches);
+			return -1;
+		case METHOD_JAVADOC_REFERENCE:
+			getMethodMatches(s.replace('#', '.'), matches);
+			return -1;
+		case QUALIFIED_NAME:
+			getNameMatches(s, matches);
+			return -1;
+		default:
+			return -1;
+		}
+	}
+
+	/**
+	 * Perform a Java search for the type and return the corresponding Java elements.
+	 * 
+	 * @param typeName the Type name
+	 * @param matches matched Java elements
+	 * @throws InterruptedException if canceled by the user
+	 */
+	private static void getTypeMatches(final String typeName, final List matches) throws InterruptedException {
+		executeRunnable(new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+				doTypeSearch(typeName, matches, monitor);
+			}
+		});
+	}
+
+	/**
+	 * Perform a Java search for methods and constructors and return the corresponding Java
+	 * elements.
+	 * 
+	 * @param s the method pattern
+	 * @param matches matched Java elements
+	 * @throws InterruptedException if canceled by the user
+	 */
+	private static void getMethodMatches(final String s, final List matches) throws InterruptedException {
+		executeRunnable(new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+				doMemberSearch(s, matches, true, true, false, monitor, 100);
+			}
+		});
+	}
+
+	/**
+	 * Perform a Java search for fields, methods and constructors and return the corresponding Java
+	 * elements.
+	 * 
+	 * @param s the member pattern
+	 * @param matches matched Java elements
+	 * @throws InterruptedException if canceled by the user
+	 */
+	private static void getMemberMatches(final String s, final List matches) throws InterruptedException {
+		executeRunnable(new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+				doMemberSearch(s, matches, true, true, true, monitor, 100);
+			}
+		});
+	}
+
+	/**
+	 * Perform a Java search for types, fields and methods and return the corresponding Java
+	 * elements.
+	 * 
+	 * @param s the qualified name pattern
+	 * @param matches matched Java elements
+	 * @throws InterruptedException if canceled by the user
+	 */
+	private static void getNameMatches(final String s, final List matches) throws InterruptedException {
+		executeRunnable(new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+				SubMonitor progress = SubMonitor.convert(monitor, 100);
+				progress.beginTask(TASK_NAME, 100);
+				doTypeSearch(s, matches, progress.newChild(34));
+				doMemberSearch(s, matches, true, false, true, progress.newChild(34), 66);
+			}
+		});
+	}
+
+	private static void executeRunnable(IRunnableWithProgress runnableWithProgress) throws InterruptedException {
+		try {
+			PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnableWithProgress);
+		} catch (InvocationTargetException e) {
+			JDIDebugUIPlugin.log(e);
+		}
+	}
+
+	/**
+	 * Handles the given matches.
+	 * 
+	 * @param matches matched Java elements
+	 * @param line the line number
+	 * @param inputText the input text
+	 * @throws InterruptedException if canceled by the user
+	 */
+	private static void handleMatches(List matches, int line, String inputText) throws InterruptedException {
+		if (matches.size() > 1) {
+			int flags = JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT;
+			IWorkbenchWindow window = JDIDebugUIPlugin.getActiveWorkbenchWindow();
+			ElementListSelectionDialog dialog = new ElementListSelectionDialog(window.getShell(), new JavaElementLabelProvider(flags));
+			dialog.setTitle(ActionMessages.OpenFromClipboardAction_OpenFromClipboard);
+			dialog.setMessage(ActionMessages.OpenFromClipboardAction_SelectOrEnterTheElementToOpen);
+			dialog.setElements(matches.toArray());
+			dialog.setMultipleSelection(true);
+
+			int result = dialog.open();
+			if (result != IDialogConstants.OK_ID)
+				return;
+
+			Object[] elements = dialog.getResult();
+			if (elements != null && elements.length > 0) {
+				openJavaElements(elements, line);
+			}
+		} else if (matches.size() == 1) {
+			openJavaElements(matches.toArray(), line);
+		} else if (matches.size() == 0) {
+			openInputEditDialog(inputText);
+		}
+	}
+
+	/**
+	 * Opens each specified Java element in a Java editor and navigates to the specified line
+	 * number.
+	 * 
+	 * @param elements
+	 *            the Java elements
+	 * @param line
+	 *            the line number
+	 */
+	private static void openJavaElements(Object[] elements, int line) {
+		for (int i = 0; i < elements.length; i++) {
+			Object ob = elements[i];
+			if (ob instanceof IJavaElement) {
+				IJavaElement element = (IJavaElement) ob;
+				try {
+					IEditorPart editorPart = JavaUI.openInEditor(element);
+					gotoLine(editorPart, line, element);
+				} catch (PartInitException e) {
+					JDIDebugUIPlugin.log(e);
+				} catch (JavaModelException e) {
+					JDIDebugUIPlugin.log(e);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Jumps to the given line in the editor if the line number lies within the given Java element.
+	 * 
+	 * @param editorPart the Editor part
+	 * @param line the line to jump to
+	 * @param element the Java Element
+	 * @throws JavaModelException if fetching the Java element's source range fails
+	 */
+	private static void gotoLine(IEditorPart editorPart, int line, IJavaElement element) throws JavaModelException {
+		if (line <= 0) {
+			return;
+		}
+		ITextEditor editor = (ITextEditor) editorPart;
+		IDocumentProvider provider = editor.getDocumentProvider();
+		IDocument document = provider.getDocument(editor.getEditorInput());
+		try {
+			if (element instanceof IMethod) {
+				ISourceRange sourceRange = ((IMethod) element).getSourceRange();
+				int start = sourceRange.getOffset();
+				int end = start + sourceRange.getLength();
+				start = document.getLineOfOffset(start);
+				end = document.getLineOfOffset(end);
+				if (start > line || end < line) {
+					return;
+				}
+			}
+			int start = document.getLineOffset(line - 1);
+			editor.selectAndReveal(start, 0);
+			IWorkbenchPage page = editor.getSite().getPage();
+			page.activate(editor);
+		} catch (BadLocationException e) {
+			// ignore
+		}
+	}
+
+	/**
+	 * Opens an text input dialog to let the user refine the input text.
+	 * 
+	 * @param inputText the input text
+	 */
+	private static void openInputEditDialog(String inputText) {
+		IWorkbenchWindow window = JDIDebugUIPlugin.getActiveWorkbenchWindow();
+		IInputValidator validator = new IInputValidator() {
+			public String isValid(String newText) {
+				return newText.length() == 0 ? "" : null; //$NON-NLS-1$
+			}
+		};
+		InputDialog dialog = new InputDialog(window.getShell(), ActionMessages.OpenFromClipboardAction_OpenFromClipboard, ActionMessages.OpenFromClipboardAction_ElementToOpen, inputText, validator);
+		int result = dialog.open();
+		if (result != IDialogConstants.OK_ID)
+			return;
+
+		inputText = dialog.getValue();
+		handleSingleLineInput(inputText);
+	}
+
+	private static SearchPattern createSearchPattern(String s, int searchFor) {
+		return SearchPattern.createPattern(s, searchFor, IJavaSearchConstants.DECLARATIONS, getSearchFlags());
+	}
+
+	private static int getSearchFlags() {
+		return SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE | SearchPattern.R_ERASURE_MATCH;
+	}
+
+	private static SearchRequestor createSearchRequestor(final List matches) {
+		return new SearchRequestor() {
+			public void acceptSearchMatch(SearchMatch match) {
+				if (match.getAccuracy() == SearchMatch.A_ACCURATE)
+					matches.add(match.getElement());
+			}
+		};
+	}
+
+	private static SearchParticipant[] createSearchParticipant() {
+		return new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
+	}
+
+	/**
+	 * Perform a Java search for the type and return the corresponding Java elements.
+	 * 
+	 * <p>
+	 * TODO: Because of faster performance SearchEngine.searchAllTypeNames(...) is used to do the
+	 * Java Search, instead of the usual SearchEngine.search(...) API. This logic should be moved to
+	 * JDT/Core.
+	 * </p>
+	 * 
+	 * @param typeName
+	 *            the Type Name
+	 * @param matches
+	 *            matched Java Elements
+	 * @param monitor
+	 *            the Progress Monitor
+	 */
+	private static void doTypeSearch(String typeName, final List matches, IProgressMonitor monitor) {
+		IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
+		SearchEngine searchEngine = new SearchEngine();
+
+		String packageName = null;
+		int index = typeName.lastIndexOf('.');
+		if (index != -1) {
+			packageName = typeName.substring(0, index);
+			typeName = typeName.substring(index + 1);
+		}
+		try {
+			searchEngine.searchAllTypeNames(packageName == null ? null : packageName.toCharArray(), packageName == null ? SearchPattern.R_EXACT_MATCH : getSearchFlags(), typeName.toCharArray(),
+					getSearchFlags(), IJavaSearchConstants.TYPE, scope, new TypeNameMatchRequestor() {
+						public void acceptTypeNameMatch(TypeNameMatch match) {
+							matches.add(match.getType());
+						}
+					}, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, monitor);
+		} catch (CoreException e) {
+			JDIDebugUIPlugin.log(e);
+		}
+	}
+
+	/**
+	 * Perform a Java search for one or more of fields, methods and constructors and return the
+	 * corresponding Java elements.
+	 * 
+	 * <p>
+	 * TODO: Because of faster performance, if the type name is available
+	 * SearchEngine.searchAllTypeNames(...) is used to narrow the scope of Java Search. This logic
+	 * should be moved to JDT/Core.
+	 * </p>
+	 * 
+	 * @param memberName
+	 *            the Member Name
+	 * @param matches
+	 *            matched Java Elements
+	 * @param searchForMethods
+	 *            if <code>true</code>, a method search is performed
+	 * @param searchForConstructors
+	 *            if <code>true</code>, a constructor search is performed
+	 * @param searchForFields
+	 *            if <code>true</code>, a field search is performed
+	 * @param monitor
+	 *            the Progress Monitor
+	 * @param work
+	 *            the remaining Work
+	 */
+	private static void doMemberSearch(String memberName, final List matches, boolean searchForMethods, boolean searchForConstructors, boolean searchForFields, IProgressMonitor monitor, int work) {
+		int noOfSearches = 0;
+		noOfSearches = searchForMethods ? noOfSearches + 1 : noOfSearches;
+		noOfSearches = searchForConstructors ? noOfSearches + 1 : noOfSearches;
+		noOfSearches = searchForFields ? noOfSearches + 1 : noOfSearches;
+		if (noOfSearches == 0) {
+			return;
+		}
+
+		SubMonitor progress = SubMonitor.convert(monitor);
+		progress.beginTask(TASK_NAME, work);
+
+		IJavaSearchScope scope = null;
+		SearchRequestor requestor = createSearchRequestor(matches);
+		SearchEngine searchEngine = new SearchEngine();
+
+		String typeName = null;
+		int index = memberName.lastIndexOf('.');
+		if (index != -1) {
+			typeName = memberName.substring(0, index);
+			memberName = memberName.substring(index + 1);
+			final List typeMatches = new ArrayList();
+			noOfSearches++;
+			doTypeSearch(typeName, typeMatches, progress.newChild(work / noOfSearches));
+			IType[] types = new IType[typeMatches.size()];
+			for (int i = 0; i < typeMatches.size(); i++) {
+				types[i] = (IType) typeMatches.get(i);
+			}
+			scope = SearchEngine.createJavaSearchScope(types);
+		} else {
+			scope = SearchEngine.createWorkspaceScope();
+		}
+		try {
+			int workPerSearch = work / noOfSearches;
+			if (searchForMethods) {
+				doMemberSearch(searchEngine, memberName, IJavaSearchConstants.METHOD, scope, requestor, progress.newChild(workPerSearch));
+			}
+			if (searchForConstructors) {
+				doMemberSearch(searchEngine, memberName, IJavaSearchConstants.CONSTRUCTOR, scope, requestor, progress.newChild(workPerSearch));
+			}
+			if (searchForFields) {
+				doMemberSearch(searchEngine, memberName, IJavaSearchConstants.FIELD, scope, requestor, progress.newChild(workPerSearch));
+			}
+		} catch (CoreException e) {
+			JDIDebugUIPlugin.log(e);
+		}
+	}
+
+	private static void doMemberSearch(SearchEngine searchEngine, String memberName, int searchFor, IJavaSearchScope scope, SearchRequestor requestor, SubMonitor progressMonitor) throws CoreException {
+		SearchPattern pattern = createSearchPattern(memberName, searchFor);
+		if (pattern != null) {
+			searchEngine.search(pattern, createSearchParticipant(), scope, requestor, progressMonitor);
+		}
+	}
+
+	/*
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action .IAction,
+	 * org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/*
+	 * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
+	 */
+	public void dispose() {
+	}
+
+	/*
+	 * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui. IWorkbenchWindow)
+	 */
+	public void init(IWorkbenchWindow window) {
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
index 5a722b3..7b2495a 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,20 +17,59 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jdt.debug.core.IJavaBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaClassPrepareBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaFieldVariable;
+import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaType;
+import org.eclipse.jdt.debug.core.IJavaWatchpoint;
+import org.eclipse.jdt.debug.core.JDIDebugModel;
+
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextSelection;
+
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.IEditorStatusLine;
+import org.eclipse.ui.texteditor.ITextEditor;
+
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.IBreakpointManager;
 import org.eclipse.debug.core.model.IBreakpoint;
+
+import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.actions.IToggleBreakpointsTargetExtension;
+
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IClassFile;
 import org.eclipse.jdt.core.ICompilationUnit;
@@ -55,35 +94,17 @@ import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SimpleType;
-import org.eclipse.jdt.debug.core.IJavaBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaClassPrepareBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaFieldVariable;
-import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint;
-import org.eclipse.jdt.debug.core.IJavaType;
-import org.eclipse.jdt.debug.core.IJavaWatchpoint;
-import org.eclipse.jdt.debug.core.JDIDebugModel;
+
 import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
 import org.eclipse.jdt.internal.debug.core.breakpoints.ValidBreakpointLocationLocator;
 import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
 import org.eclipse.jdt.internal.debug.ui.DebugWorkingCopyManager;
+import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+
 import org.eclipse.jdt.ui.IWorkingCopyManager;
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.SharedASTProvider;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.texteditor.IDocumentProvider;
-import org.eclipse.ui.texteditor.IEditorStatusLine;
-import org.eclipse.ui.texteditor.ITextEditor;
 
 /**
  * Toggles a line breakpoint in a Java editor.
@@ -93,7 +114,8 @@ import org.eclipse.ui.texteditor.ITextEditor;
 public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtension {
 	
 	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
-	
+
+
 	/**
 	 * Constructor
 	 */
@@ -225,7 +247,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
 							int lnumber = locator == null ? ((ITextSelection) selection).getStartLine() + 1 : locator.getLineLocation();
 							IJavaLineBreakpoint existingBreakpoint = JDIDebugModel.lineBreakpointExists(resource, tname, lnumber);
 							if (existingBreakpoint != null) {
-								DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint(existingBreakpoint, true);
+								deleteBreakpoint(existingBreakpoint, editor, monitor);
 								return Status.OK_STATUS;
 							}
 							Map attributes = new HashMap(10);
@@ -339,7 +361,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
                                 }
                                 JDIDebugModel.createMethodBreakpoint(BreakpointUtils.getBreakpointResource(members[i]), getQualifiedName(type), mname, signature, true, false, false, -1, start, end, 0, true, attributes);
                             } else {
-                            	DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint(breakpoint, true);
+								deleteBreakpoint(breakpoint, part, monitor);
                             }
                         }
                     }
@@ -383,9 +405,9 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
 					if(sel instanceof IStructuredSelection) {
 						IMember member = (IMember)((IStructuredSelection)sel).getFirstElement();
 						IType type = (IType) member;
-						IBreakpoint existing = getClassLoadBreakpoint(type);
+						IJavaBreakpoint existing= getClassLoadBreakpoint(type);
 						if (existing != null) {
-							DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint(existing, true);
+							deleteBreakpoint(existing, part, monitor);
 							return Status.OK_STATUS;
 						}
 						else {
@@ -424,18 +446,15 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
      * @throws CoreException
      * @since 3.3
      */
-    protected IBreakpoint getClassLoadBreakpoint(IType type) throws CoreException {
+	protected IJavaBreakpoint getClassLoadBreakpoint(IType type) throws CoreException {
     	IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(JDIDebugModel.getPluginIdentifier());
-    	IBreakpoint existing = null;
-    	IJavaBreakpoint breakpoint = null;
     	for (int i = 0; i < breakpoints.length; i++) {
-			breakpoint = (IJavaBreakpoint) breakpoints[i];
+			IJavaBreakpoint breakpoint= (IJavaBreakpoint)breakpoints[i];
 			if (breakpoint instanceof IJavaClassPrepareBreakpoint && getQualifiedName(type).equals(breakpoint.getTypeName())) {
-				existing = breakpoint;
-				break;
+				return breakpoint;
 			}
 		}
-    	return existing;
+		return null;
     }
     	
     /**
@@ -874,7 +893,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
 	                            }
 	                        	JDIDebugModel.createWatchpoint(resource, typeName, fieldName, -1, start, end, 0, true, attributes);
 	                        } else {
-	                            DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint(breakpoint, true);
+								deleteBreakpoint(breakpoint, part, monitor);
 	                        }
 	                    }
                     }
@@ -1235,7 +1254,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
     				IResource resource = BreakpointUtils.getBreakpointResource(declaringType);
 					IJavaLineBreakpoint breakpoint = JDIDebugModel.lineBreakpointExists(resource, getQualifiedName(declaringType), ts.getStartLine() + 1);
     				if (breakpoint != null) {
-    					DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint(breakpoint, true);
+						deleteBreakpoint(breakpoint, part, null);
     					return;
     				}
     				CompilationUnit unit = parseCompilationUnit(getTextEditor(part));
@@ -1262,6 +1281,39 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
     	}
     }
 
+	/**
+	 * Deletes the given breakpoint using the operation history, which allows to undo the deletion.
+	 * 
+	 * @param breakpoint the breakpoint to delete
+	 * @param part a workbench part, or <code>null</code> if unknown
+	 * @param progressMonitor the progress monitor
+	 * @throws CoreException if the deletion fails
+	 */
+	private static void deleteBreakpoint(IJavaBreakpoint breakpoint, IWorkbenchPart part, IProgressMonitor monitor) throws CoreException {
+		final Shell shell= part != null ? part.getSite().getShell() : null;
+		final boolean[] result= new boolean[] { true };
+
+		final IEclipsePreferences prefs= InstanceScope.INSTANCE.getNode(JDIDebugUIPlugin.getUniqueIdentifier());
+		boolean prompt= prefs.getBoolean(IJDIPreferencesConstants.PREF_PROMPT_DELETE_CONDITIONAL_BREAKPOINT, true);
+		if (prompt && breakpoint instanceof IJavaLineBreakpoint && ((IJavaLineBreakpoint)breakpoint).getCondition() != null) {
+			Display display= shell != null && !shell.isDisposed() ? shell.getDisplay() : PlatformUI.getWorkbench().getDisplay();
+			if (!display.isDisposed()) {
+				display.syncExec(new Runnable() {
+					public void run() {
+						MessageDialogWithToggle dialog= MessageDialogWithToggle.openOkCancelConfirm(shell, ActionMessages.ToggleBreakpointAdapter_confirmDeleteTitle,
+								ActionMessages.ToggleBreakpointAdapter_confirmDeleteMessage, ActionMessages.ToggleBreakpointAdapter_confirmDeleteShowAgain, false,
+								null, null);
+						if (dialog.getToggleState())
+							prefs.putBoolean(IJDIPreferencesConstants.PREF_PROMPT_DELETE_CONDITIONAL_BREAKPOINT, false);
+						result[0]= dialog.getReturnCode() == IDialogConstants.OK_ID;
+					}
+				});
+			}
+		}
+		if (result[0])
+			DebugUITools.deleteBreakpoints(new IBreakpoint[] { breakpoint }, shell, monitor);
+	}
+
     /*
      * (non-Javadoc)
      * 
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
index 7fa476b..88eceb6 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009, 2010 IBM Corporation and others.
+ *  Copyright (c) 2009, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,19 +13,19 @@ package org.eclipse.jdt.internal.debug.ui.breakpoints;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.debug.internal.ui.SWTFactory;
-import org.eclipse.debug.ui.IDetailPane3;
-import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+
 import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
+
 import org.eclipse.ui.IEditorActionBarContributor;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IPropertyListener;
@@ -37,6 +37,12 @@ import org.eclipse.ui.IWorkbenchPartConstants;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.part.EditorActionBarContributor;
 
+import org.eclipse.debug.internal.ui.SWTFactory;
+
+import org.eclipse.debug.ui.IDetailPane3;
+
+import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+
 /**
  * Common detail pane function.
  * 
@@ -132,10 +138,10 @@ public abstract class AbstractDetailPane implements IDetailPane3 {
 	}	
 	
 	/**
-	 * Adds the given auto save properties to this detail pain. Whenever one of these
-	 * properties changes, the detail pane editor is immediately saved.
+	 * Adds the given auto save properties to this detail pain. Whenever one of these properties
+	 * changes, the detail pane editor is immediately saved.
 	 * 
-	 * @param autosave
+	 * @param autosave the auto-save properties
 	 */
 	protected void addAutosaveProperties(int[] autosave) {
 		for (int i = 0; i < autosave.length; i++) {
@@ -251,9 +257,9 @@ public abstract class AbstractDetailPane implements IDetailPane3 {
 	 * @see org.eclipse.ui.ISaveablePart#isDirty()
 	 */
 	public boolean isDirty() {
-		return fEditor.isDirty();
+		return fEditor != null && fEditor.isDirty();
 	}
-	
+
 	/**
 	 * Returns the editor associated with this detail pane.
 	 * 
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/LineBreakpointDetailPane.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/LineBreakpointDetailPane.java
index 40467ea..b0e2d58 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/LineBreakpointDetailPane.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/LineBreakpointDetailPane.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2010 IBM Corporation and others.
+ *  Copyright (c) 2010, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ public class LineBreakpointDetailPane extends AbstractDetailPane {
 	 */
 	protected AbstractJavaBreakpointEditor createEditor(Composite parent) {
 		return new CompositeBreakpointEditor(
-			new AbstractJavaBreakpointEditor[] {new StandardJavaBreakpointEditor(), new JavaBreakpointConditionEditor()}); 
+			new AbstractJavaBreakpointEditor[] {new StandardJavaBreakpointEditor(), new JavaBreakpointConditionEditor(null)});
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/MethodBreakpointDetailPane.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/MethodBreakpointDetailPane.java
index 68f3382..540fa08 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/MethodBreakpointDetailPane.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/MethodBreakpointDetailPane.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2009, 2010 IBM Corporation and others.
+ *  Copyright (c) 2009, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -43,7 +43,7 @@ public class MethodBreakpointDetailPane extends AbstractDetailPane {
 	 */
 	protected AbstractJavaBreakpointEditor createEditor(Composite parent) {
 		return new CompositeBreakpointEditor(new AbstractJavaBreakpointEditor[] 
-			{new MethodBreakpointEditor(), new JavaBreakpointConditionEditor()});
+			{new MethodBreakpointEditor(), new JavaBreakpointConditionEditor(null)});
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java
index 9f02746..1570773 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -248,7 +248,6 @@ public class EEVMPage extends AbstractVMInstallPage {
 
 	/**
 	 * Validates the entered name of the VM
-	 * @return the status of the name validation
 	 */
 	private void validateVMName() {
 		nameChanged(fVMName.getText());
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
index 1114c21..0f0710e 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/InstalledJREsBlock.java
@@ -770,7 +770,7 @@ public class InstalledJREsBlock implements IAddVMDialogRequestor, ISelectionProv
 	private void doMacSearch() {
 		final List added = new ArrayList();
 		IRunnableWithProgress r = new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) {
+			public void run(IProgressMonitor monitor) throws InvocationTargetException {
 				Set exists = new HashSet();
 				Iterator iterator = fVMs.iterator();
 				while (iterator.hasNext()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties
index 26325c0..999d6bb 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREMessages.properties
@@ -109,8 +109,8 @@ JREProfilesPreferencePage_4=Environment description:
 JREsEnvironmentLabelProvider_0={0} [{1}]
 JREsEnvironmentLabelProvider_1=perfect match
 MacVMSearch_0=Searching for installed JREs
-MacVMSearch_1=JVM {0} (MacOS X Default)
-MacVMSearch_2=JVM {0}
+MacVMSearch_1={0} (MacOS X Default)
+MacVMSearch_2={0}
 EEVMPage_0=Add EE VM
 EEVMPage_1=&Definition File:
 EEVMPage_2=F&ile...
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/MacVMSearch.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/MacVMSearch.java
index d4cc69b..c3f2796 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/MacVMSearch.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/MacVMSearch.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,14 +11,19 @@
 package org.eclipse.jdt.internal.debug.ui.jres;
 
 import java.io.File;
-import java.io.IOException;
 import java.net.URL;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jdt.internal.launching.MacInstalledJREs;
+import org.eclipse.jdt.internal.launching.MacInstalledJREs.JREDescriptor;
 import org.eclipse.jdt.launching.AbstractVMInstallType;
 import org.eclipse.jdt.launching.IVMInstallType;
 import org.eclipse.jdt.launching.JavaRuntime;
@@ -28,13 +33,6 @@ import org.eclipse.jdt.launching.VMStandin;
  * Searches for installed JREs on the MAC, in known location.
  */
 public class MacVMSearch {
-	
-	/** The OS keeps all the JVM versions in this directory */
-	private static final String JVM_VERSION_LOC= "/System/Library/Frameworks/JavaVM.framework/Versions/";	//$NON-NLS-1$
-	/** The name of a Unix link to MacOS X's default VM */
-	private static final String CURRENT_JVM= "CurrentJDK";	//$NON-NLS-1$
-	/** The root of a JVM */
-	private static final String JVM_ROOT= "Home";	//$NON-NLS-1$
 
 	/**
 	 * Returns an array of {@link VMStandin}s found at the standard Mac OS location
@@ -43,53 +41,48 @@ public class MacVMSearch {
 	 * @return a listing of {@link VMStandin}s at the standard Mac OS location or an empty listing
 	 */
 	public VMStandin[] search(IProgressMonitor monitor) {
-		List vms = new ArrayList();
+		JREDescriptor[] descriptors = null;
+		try {
+			descriptors = new MacInstalledJREs().getInstalledJREs();
+		} catch (CoreException e) {
+			JDIDebugUIPlugin.log(e.getStatus());
+			return new VMStandin[0];
+		}
+		SubMonitor localmonitor = SubMonitor.convert(monitor, JREMessages.MacVMSearch_0, descriptors.length);
 		IVMInstallType macVMType = JavaRuntime.getVMInstallType(InstalledJREsBlock.MACOSX_VM_TYPE_ID);
+		List vms = new ArrayList();
 		if (macVMType != null) {
-			// find all installed VMs
-			File versionDir= new File(JVM_VERSION_LOC);
-			if (versionDir.exists() && versionDir.isDirectory()) {
-				File currentJDK= new File(versionDir, CURRENT_JVM);
+			for (int i = 0; i < descriptors.length; i++) {
+				JREDescriptor descriptor = descriptors[i];
+				String name = descriptor.getName();
+				IPath path= new Path(descriptor.getHome().getAbsolutePath());
+				String id= path.segment(path.segmentCount() - 2); // ID is the second last segment in the install path (e.g. 1.5.0)
 				try {
-					currentJDK= currentJDK.getCanonicalFile();
-				} catch (IOException ex) {
-					// NeedWork
-				}
-				File[] versions= versionDir.listFiles();
-				SubMonitor localmonitor = SubMonitor.convert(monitor, JREMessages.MacVMSearch_0, versions.length);
-				try {
-					for (int i= 0; i < versions.length; i++) {
-						String version= versions[i].getName();
-						File home= new File(versions[i], JVM_ROOT);
-						if (home.exists()) {
-							boolean isDefault= currentJDK.equals(versions[i]);
-							if (!CURRENT_JVM.equals(version)) {
-								VMStandin vm= new VMStandin(macVMType, version);
-								vm.setInstallLocation(home);
-								String format= isDefault ? JREMessages.MacVMSearch_1 : JREMessages.MacVMSearch_2;
-								vm.setName(MessageFormat.format(format, new Object[] { version } ));
-								vm.setLibraryLocations(macVMType.getDefaultLibraryLocations(home));
-								URL doc= ((AbstractVMInstallType)macVMType).getDefaultJavadocLocation(home);
-								if (doc != null) {
-									vm.setJavadocLocation(doc);
-								}
-								String arguments = ((AbstractVMInstallType)macVMType).getDefaultVMArguments(home);
-								if (arguments != null) {
-									vm.setVMArgs(arguments);
-								}
-								vms.add(vm);
-							}
+					File home= descriptor.getHome();
+					if (home.exists()) {
+						boolean isDefault= i == 0;
+						VMStandin vm= new VMStandin(macVMType, id);
+						vm.setInstallLocation(home);
+						String format= isDefault ? JREMessages.MacVMSearch_1 : JREMessages.MacVMSearch_2;
+						vm.setName(MessageFormat.format(format, new Object[] { name } ));
+						vm.setLibraryLocations(macVMType.getDefaultLibraryLocations(home));
+						URL doc= ((AbstractVMInstallType)macVMType).getDefaultJavadocLocation(home);
+						if (doc != null) {
+							vm.setJavadocLocation(doc);
 						}
-						if(localmonitor.isCanceled()) {
-							break;
+						String arguments = ((AbstractVMInstallType)macVMType).getDefaultVMArguments(home);
+						if (arguments != null) {
+							vm.setVMArgs(arguments);
 						}
-						localmonitor.worked(1);
+						vms.add(vm);
+					}
+					if(localmonitor.isCanceled()) {
+						break;
 					}
+					localmonitor.worked(1);
 				}
 				finally {
-					if(localmonitor != null) {
-						localmonitor.done();
-					}
+					localmonitor.done();
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
index c6c4d5f..e1d3dd5 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -303,12 +303,8 @@ public class StandardVMPage extends AbstractVMInstallPage {
 	 */
 	protected void setFieldValuesToVM(VMStandin vm) {
 		File dir = new File(fJRERoot.getText());
-		try {
-			vm.setInstallLocation(dir.getCanonicalFile());
-		} 
-		catch (IOException e) {
-			vm.setInstallLocation(dir.getAbsoluteFile());
-		}
+		File file = dir.getAbsoluteFile();
+		vm.setInstallLocation(file);
 		vm.setName(fVMName.getText());
 		vm.setJavadocLocation(getURL());
 		
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/DebugTypeSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/DebugTypeSelectionDialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ExecutionEnvironmentSelector.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ExecutionEnvironmentSelector.java
new file mode 100644
index 0000000..613b154
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ExecutionEnvironmentSelector.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui.launcher;
+
+import org.eclipse.core.variables.IStringVariable;
+import org.eclipse.debug.internal.ui.stringsubstitution.IArgumentSelector;
+import org.eclipse.jdt.internal.debug.ui.jres.ExecutionEnvironmentsLabelProvider;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+
+/**
+ * Used to select from available execution environments.
+ */
+public class ExecutionEnvironmentSelector implements IArgumentSelector {
+
+	/**
+	 * Constructs a new selector
+	 */
+	public ExecutionEnvironmentSelector() {
+	}
+
+	public String selectArgument(IStringVariable variable, Shell shell) {
+		ElementListSelectionDialog dialog = new ElementListSelectionDialog(shell, new ExecutionEnvironmentsLabelProvider());
+		dialog.setTitle(LauncherMessages.ExecutionEnvironmentSelector_0);
+		dialog.setMultipleSelection(false);
+		dialog.setMessage(LauncherMessages.ExecutionEnvironmentSelector_1);
+		dialog.setElements(JavaRuntime.getExecutionEnvironmentsManager().getExecutionEnvironments()); 
+		if (dialog.open() == Window.OK) {
+			return (((IExecutionEnvironment)dialog.getResult()[0]).getId());
+		}
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java
index a2db83f..9ec6053 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,14 +32,13 @@ import org.eclipse.ui.IMarkerResolutionGenerator2;
 public class JreResolutionGenerator implements IMarkerResolutionGenerator2 {
 	
 	private final static IMarkerResolution[] NO_RESOLUTION = new IMarkerResolution[0];
-	private static final String JRE_CONTAINR_MARKER = "org.eclipse.jdt.launching.jreContainerMarker"; //$NON-NLS-1$
 
 	/**
 	 * @see org.eclipse.ui.IMarkerResolutionGenerator#getResolutions(org.eclipse.core.resources.IMarker)
 	 */
 	public IMarkerResolution[] getResolutions(IMarker marker) {
 		try {
-			if(JRE_CONTAINR_MARKER.equals(marker.getType())) { 
+			if(JavaRuntime.JRE_CONTAINER_MARKER.equals(marker.getType())) { 
 				return new IMarkerResolution[] {new OpenPreferencePageResolution(ExecutionEnvironmentsPreferencePage.ID, 
 						new String[] {ExecutionEnvironmentsPreferencePage.ID, JREsPreferencePage.ID}, 
 						LauncherMessages.JreResolutionGenerator_open_ee_prefs, 
@@ -110,7 +109,7 @@ public class JreResolutionGenerator implements IMarkerResolutionGenerator2 {
 		try {
 			String type = marker.getType();
 			return IJavaModelMarker.BUILDPATH_PROBLEM_MARKER.equals(type) || 
-				   JRE_CONTAINR_MARKER.equals(type);
+				   JavaRuntime.JRE_CONTAINER_MARKER.equals(type);
 		} catch (CoreException ce) {}
 		return false;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java
index adf9d3d..dddcda8 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -151,6 +151,9 @@ public class LauncherMessages extends NLS {
 	public static String SelectDefaultSystemLibraryQuickFix_Select_default_system_library_5;
 
 	public static String AppletSelectionDialog_Searching____1;
+
+	public static String ExecutionEnvironmentSelector_0;
+	public static String ExecutionEnvironmentSelector_1;
 	
 	public static String JavaAppletLaunchShortcut_0;
 	public static String JavaAppletLaunchShortcut_1;
@@ -164,9 +167,11 @@ public class LauncherMessages extends NLS {
 	public static String JavaLaunchShortcut_3;
 
 	public static String JreResolutionGenerator_open_ee_prefs;
-
 	public static String JreResolutionGenerator_opens_ee_prefs;
 
+	public static String ProjectClasspathArugumentSelector_0;
+	public static String ProjectClasspathArugumentSelector_1;
+
 	static {
 		// load message values from bundle file
 		NLS.initializeMessages(BUNDLE_NAME, LauncherMessages.class);
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties
index 2f6bc0b..b91ad9c 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/LauncherMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2009 IBM Corporation and others.
+#  Copyright (c) 2000, 2010 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -148,3 +148,7 @@ AbstractJavaMainTab_1=&Browse...
 AbstractJavaMainTab_2=&Search...
 AbstractJavaMainTab_4=Project Selection
 AbstractJavaMainTab_3=Select a project to constrain your search.
+ExecutionEnvironmentSelector_0=Select Execution Environment
+ExecutionEnvironmentSelector_1=Choose an environment (? = any character, * = any string):
+ProjectClasspathArugumentSelector_0=Select Java Project
+ProjectClasspathArugumentSelector_1=Choose a project (? = any character, * = any string):
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ProjectClasspathArgumentSelector.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ProjectClasspathArgumentSelector.java
new file mode 100644
index 0000000..14839e8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ProjectClasspathArgumentSelector.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui.launcher;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.variables.IStringVariable;
+import org.eclipse.debug.internal.ui.stringsubstitution.IArgumentSelector;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+/**
+ * Allows a Java project to be selected for the ${project_classpath} variable.
+ */
+public class ProjectClasspathArgumentSelector implements IArgumentSelector {
+
+	public ProjectClasspathArgumentSelector() {
+	}
+
+	public String selectArgument(IStringVariable variable, Shell shell) {
+		ElementListSelectionDialog dialog = new ElementListSelectionDialog(shell, new WorkbenchLabelProvider());
+		dialog.setTitle(LauncherMessages.ProjectClasspathArugumentSelector_0);
+		dialog.setMultipleSelection(false);
+		dialog.setMessage(LauncherMessages.ProjectClasspathArugumentSelector_1);
+		List javaProjects = new ArrayList();
+		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+		for (int i = 0; i < projects.length; i++) {
+			IJavaProject jp = JavaCore.create(projects[i]);
+			if (jp.exists()) {
+				javaProjects.add(jp);
+			}
+		}
+		dialog.setElements(javaProjects.toArray()); 
+		if (dialog.open() == Window.OK) {
+			return (((IJavaProject)dialog.getResult()[0]).getElementName());
+		}
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/JavaBreakpointPage.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/JavaBreakpointPage.java
index 9632552..20d04b7 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/JavaBreakpointPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/JavaBreakpointPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.debug.internal.ui.SWTFactory;
+
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.debug.core.IJavaBreakpoint;
 import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
@@ -40,6 +41,7 @@ import org.eclipse.jdt.internal.debug.ui.breakpoints.ExceptionBreakpointEditor;
 import org.eclipse.jdt.internal.debug.ui.breakpoints.MethodBreakpointEditor;
 import org.eclipse.jdt.internal.debug.ui.breakpoints.StandardJavaBreakpointEditor;
 import org.eclipse.jdt.internal.debug.ui.breakpoints.WatchpointEditor;
+
 import org.eclipse.jdt.ui.JavaElementLabelProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ShellEvent;
@@ -143,6 +145,7 @@ public class JavaBreakpointPage extends PropertyPage {
 	 * Stores the values configured in this page. This method
 	 * should be called from within a workspace runnable to
 	 * reduce the number of resource deltas.
+	 * @throws CoreException if an exception occurs
 	 */
 	protected void doStore() throws CoreException {
 		IJavaBreakpoint breakpoint = getBreakpoint();
@@ -214,7 +217,7 @@ public class JavaBreakpointPage extends PropertyPage {
 	
 	/**
 	 * Creates the labels displayed for the breakpoint.
-	 * @param parent
+	 * @param parent the parent composite
 	 */
 	protected void createLabels(Composite parent) {
 		Composite labelComposite = SWTFactory.createComposite(parent, parent.getFont(), 2, 1, GridData.FILL_HORIZONTAL, 0, 0);
@@ -233,7 +236,7 @@ public class JavaBreakpointPage extends PropertyPage {
 
 	/**
 	 * Creates the button to toggle enablement of the breakpoint
-	 * @param parent
+	 * @param parent the parent composite
 	 */
 	protected void createEnabledButton(Composite parent) {
 		fEnabledButton = createCheckButton(parent, PropertyPageMessages.JavaBreakpointPage_5); 
@@ -256,7 +259,7 @@ public class JavaBreakpointPage extends PropertyPage {
 	/**
 	 * Allows subclasses to add type specific labels to the common Java
 	 * breakpoint page.
-	 * @param parent
+	 * @param parent the parent composite
 	 */
 	protected void createTypeSpecificLabels(Composite parent) {
 		// Line number
@@ -300,7 +303,7 @@ public class JavaBreakpointPage extends PropertyPage {
 	/**
 	* Allows subclasses to add type specific editors to the common Java
 	* breakpoint page.
-	* @param parent
+	* @param parent the parent composite
 	*/
    protected void createTypeSpecificEditors(Composite parent) {
 	   try {
@@ -311,7 +314,7 @@ public class JavaBreakpointPage extends PropertyPage {
 		} else if (JavaLineBreakpoint.JAVA_LINE_BREAKPOINT.equals(type)) {
 			setTitle(PropertyPageMessages.JavaLineBreakpointPage_18);
 			fEditor = new CompositeBreakpointEditor(new AbstractJavaBreakpointEditor[]
-			    {new StandardJavaBreakpointEditor(), new JavaBreakpointConditionEditor()}); 
+			    {new StandardJavaBreakpointEditor(), new JavaBreakpointConditionEditor(null)});
 		} else if (JavaExceptionBreakpoint.JAVA_EXCEPTION_BREAKPOINT.equals(type)) {
 			setTitle(PropertyPageMessages.JavaExceptionBreakpointPage_5);
 			fEditor = new ExceptionBreakpointEditor();
@@ -321,7 +324,7 @@ public class JavaBreakpointPage extends PropertyPage {
 		} else if (JavaMethodBreakpoint.JAVA_METHOD_BREAKPOINT.equals(type)) {
 			setTitle(PropertyPageMessages.JavaLineBreakpointPage_20);
 			fEditor = new CompositeBreakpointEditor(new AbstractJavaBreakpointEditor[] 
-			    {new MethodBreakpointEditor(), new JavaBreakpointConditionEditor()});
+			    {new MethodBreakpointEditor(), new JavaBreakpointConditionEditor(null)});
 		} else {
 			// use standard editor for any other kind of breakpoint (@see bug 325161)
 			fEditor = new StandardJavaBreakpointEditor();
@@ -349,8 +352,8 @@ public class JavaBreakpointPage extends PropertyPage {
 	
 	/**
 	 * Creates a fully configured text editor with the given initial value
-	 * @param parent
-	 * @param initialValue
+	 * @param parent the parent composite
+	 * @param initialValue the initial {@link String} value
 	 * @return the configured text editor
 	 */
 	protected Text createText(Composite parent, String initialValue) {
@@ -389,6 +392,7 @@ public class JavaBreakpointPage extends PropertyPage {
 	
 	/**
 	 * Check to see if the breakpoint should be deleted.
+	 * @return <code>true</code> if the page was canceled, <code>false</code> othewise
 	 */
 	public boolean performCancel() {
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.java b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.java
index dc81935..e0a802c 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,8 @@ public class PropertyPageMessages extends NLS {
 	public static String JavaBreakpointConditionEditor_0;
 	public static String JavaBreakpointConditionEditor_1;
 	public static String JavaBreakpointConditionEditor_2;
+	public static String JavaBreakpointConditionEditor_choosePreviousCondition;
+	public static String JavaBreakpointConditionEditor_historySeparator;
 
 	public static String JavaBreakpointPage_0;
 	public static String JavaBreakpointPage_10;
diff --git a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.properties b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.properties
index b947886..68cf3c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/PropertyPageMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2010 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -31,6 +31,8 @@ ExceptionFilterEditor_22=&Select a class to add to the scope of the breakpoint:
 JavaBreakpointConditionEditor_0=Co&nditional
 JavaBreakpointConditionEditor_1=Suspend when \'tr&ue\'
 JavaBreakpointConditionEditor_2=Suspend &when value changes
+JavaBreakpointConditionEditor_choosePreviousCondition=<Choose a previously entered condition>
+JavaBreakpointConditionEditor_historySeparator=Global history
 JavaBreakpointPage_0=Hit count must be a positive integer
 JavaBreakpointPage_10=Create Breakpoint for {0}
 JavaBreakpointPage_11=Class Prepare Breakpoint
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/.options b/eclipse/plugins/org.eclipse.jdt.debug/.options
index 2eb48a6..3ef5cf6 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/.options
+++ b/eclipse/plugins/org.eclipse.jdt.debug/.options
@@ -1,2 +1,6 @@
 org.eclipse.jdt.debug/debug=false
-org.eclipse.jdt.debug/debug/jdiEvents=false
\ No newline at end of file
+org.eclipse.jdt.debug/debug/jdiEvents=false
+org.eclipse.jdt.debug/debug/jdiRequestTimes=false
+org.eclipse.jdt.debug/debug/astEvaluations=false
+org.eclipse.jdt.debug/debug/astEvaluations/callingThreads=false
+
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
index 645d906..7e2e415 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
@@ -1,102 +1,107 @@
-#Thu Oct 15 14:49:22 CDT 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=error
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
-org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
-org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
+#Thu Jan 20 17:01:17 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..9efd017
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:44:07 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
index f47aaf0..3677ec0 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: jdi.jar,
  jdimodel.jar,
  tools.jar
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/buildnotes_jdt-debug.html
deleted file mode 100644
index 4f92a71..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-<h1>Eclipse 3.6 Java Debug Build Notes</h1>
-
-<h2>Summary of API changes in 3.6</h2>
-
-<h3>Target specific hot code replace listeners</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Method addition: <code>public void addHotCodeReplaceListener(IJavaHotCodeReplaceListener listener)</code></li>
-  <li>Method addition: <code>public void removeHotCodeReplaceListener(IJavaHotCodeReplaceListener listener)</code> </li>
-</ul>
-<p><strong>Description: </strong>Methods have been added to <code>org.eclipse.jdt.debug.core.IJavaDebugTarget</code> to
-support target sepcific hot code replace listeners. When listeners are registered with a specific target, the listeners
-registered with <code>org.eclipse.jdt.debug.core.JDIDebugModel</code> are not notified for that target. This allows a target
-to have custom hot code replace event handling.
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<h3>Breakpoint condition editor</h3>
-<p><strong>What is affected:</strong>
-<ul>
-  <li>Class addition: <code>org.eclipse.jdt.debug.ui.breakpoints.JavaBreakpointConditionEditor</code></li>
-</ul>
-<p><strong>Description: </strong>This class provides controls for editing a Java breakpoint's conditional
- expression. The class may be instantiated but is not intended to be sublcassed.
-<p><strong>Action required:</strong> This is a backwards compatible change. No action required. </p>
-
-<p> </p>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
index b9c8650..be5e43e 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.jdt.internal.debug.eval.ast.engine;
 
 
+import java.util.Date;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -27,6 +28,7 @@ import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.IDebugEventFilter;
 import org.eclipse.debug.core.model.ITerminate;
+import org.eclipse.debug.core.model.IThread;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.compiler.IProblem;
@@ -50,6 +52,7 @@ import org.eclipse.jdt.debug.eval.IAstEvaluationEngine;
 import org.eclipse.jdt.debug.eval.ICompiledExpression;
 import org.eclipse.jdt.debug.eval.IEvaluationListener;
 import org.eclipse.jdt.debug.eval.IEvaluationResult;
+import org.eclipse.jdt.internal.debug.core.JDIDebugOptions;
 import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
 import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
 import org.eclipse.jdt.internal.debug.core.model.JDIThread;
@@ -111,6 +114,7 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 	 * @see org.eclipse.jdt.debug.eval.IEvaluationEngine#evaluate(java.lang.String, org.eclipse.jdt.debug.core.IJavaStackFrame, org.eclipse.jdt.debug.eval.IEvaluationListener, int, boolean)
 	 */
 	public void evaluate(String snippet, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException {
+		traceCaller(snippet, frame.getThread());
         checkInterface(frame);
 		ICompiledExpression expression= getCompiledExpression(snippet, frame);
 		evaluateExpression(expression, frame, listener, evaluationDetail, hitBreakpoints);
@@ -120,9 +124,37 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 	 * @see org.eclipse.jdt.debug.eval.IEvaluationEngine#evaluate(java.lang.String, org.eclipse.jdt.debug.core.IJavaObject, org.eclipse.jdt.debug.core.IJavaThread, org.eclipse.jdt.debug.eval.IEvaluationListener, int, boolean)
 	 */
 	public void evaluate(String snippet, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException {
+		traceCaller(snippet, thread);
 		ICompiledExpression expression= getCompiledExpression(snippet, thisContext);
 		evaluateExpression(expression, thisContext, thread, listener, evaluationDetail, hitBreakpoints);
 	}
+	
+	/**
+	 * Writes a stack dump to trace the calling thread.
+	 * 
+	 * @param snippet expression to evaluate
+	 * @param thread thread to evaluate in
+	 */
+	private void traceCaller(String snippet, IThread thread) {
+		if (JDIDebugOptions.DEBUG_AST_EVAL_THREAD_TRACE) {
+			StringBuffer buf = new StringBuffer();
+			buf.append(JDIDebugOptions.FORMAT.format(new Date()));
+			buf.append(" : Evaluation Request Trace - Expression: "); //$NON-NLS-1$
+			buf.append(snippet);
+			buf.append("\n\tThread: "); //$NON-NLS-1$
+			try {
+				String name = thread.getName();
+				buf.append('[');
+				buf.append(name);
+				buf.append("] "); //$NON-NLS-1$
+			} catch (DebugException e) {
+				buf.append(thread.toString());
+			}
+			System.out.println(buf.toString());
+			System.out.flush();
+			Thread.dumpStack();
+		}
+	}	
     
     /**
      * Checks if the stack frame is declared in an interface an aborts
@@ -143,6 +175,7 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 	 * @see org.eclipse.jdt.debug.eval.IAstEvaluationEngine#evaluateExpression(org.eclipse.jdt.debug.eval.ICompiledExpression, org.eclipse.jdt.debug.core.IJavaStackFrame, org.eclipse.jdt.debug.eval.IEvaluationListener, int, boolean)
 	 */
 	public void evaluateExpression(ICompiledExpression expression, IJavaStackFrame frame, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException {
+		traceCaller(expression.getSnippet(), frame.getThread());
 		RuntimeContext context = new RuntimeContext(getJavaProject(), frame);
 		doEvaluation(expression, context, (IJavaThread)frame.getThread(), listener, evaluationDetail, hitBreakpoints);
 	}
@@ -151,6 +184,7 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 	 * @see org.eclipse.jdt.debug.eval.IAstEvaluationEngine#evaluateExpression(org.eclipse.jdt.debug.eval.ICompiledExpression, org.eclipse.jdt.debug.core.IJavaObject, org.eclipse.jdt.debug.core.IJavaThread, org.eclipse.jdt.debug.eval.IEvaluationListener, int, boolean)
 	 */
 	public void evaluateExpression(ICompiledExpression expression, IJavaObject thisContext, IJavaThread thread, IEvaluationListener listener, int evaluationDetail, boolean hitBreakpoints) throws DebugException {
+		traceCaller(expression.getSnippet(), thread);
 		IRuntimeContext context = null;
 		if (thisContext instanceof IJavaArray) {
 			context = new ArrayRuntimeContext((IJavaArray) thisContext, thread, getJavaProject());
@@ -460,6 +494,33 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 		}
 
 		public void run() {
+			if (JDIDebugOptions.DEBUG_AST_EVAL) {
+				StringBuffer buf = new StringBuffer();
+				buf.append(JDIDebugOptions.FORMAT.format(new Date()));
+				buf.append(" : AST Evaluation"); //$NON-NLS-1$
+				buf.append("\n\tExpression: "); //$NON-NLS-1$
+				buf.append(fExpression.getSnippet());
+				buf.append("\n\tThread: "); //$NON-NLS-1$
+				try {
+					String name = fThread.getName();
+					buf.append('[');
+					buf.append(name);
+					buf.append("] "); //$NON-NLS-1$
+				} catch (DebugException e) {
+				}
+				buf.append(fThread.toString());
+				buf.append("\n\tDetail: "); //$NON-NLS-1$
+				if (fEvaluationDetail == DebugEvent.EVALUATION) {
+					buf.append("EVALUATION"); //$NON-NLS-1$
+				} else if (fEvaluationDetail == DebugEvent.EVALUATION_IMPLICIT) {
+					buf.append("EVALUATION_IMPLICIT"); //$NON-NLS-1$
+				} else {
+					buf.append(fEvaluationDetail);
+				}
+				buf.append(" Hit Breakpoints: "); //$NON-NLS-1$
+				buf.append(fHitBreakpoints);
+				System.out.println(buf.toString());
+			}
 			EvaluationResult result = new EvaluationResult(ASTEvaluationEngine.this, fExpression.getSnippet(), fThread);
 			if (fExpression.hasErrors()) {
 				String[] errors = fExpression.getErrorMessages();
@@ -467,6 +528,18 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 					result.addError(errors[i]);
 				}
 				evaluationFinished(result);
+				if (JDIDebugOptions.DEBUG_AST_EVAL) {
+					StringBuffer buf = new StringBuffer();
+					buf.append("\tErrors: "); //$NON-NLS-1$
+					for (int i = 0; i < errors.length; i++) {
+						if (i > 0) {
+							buf.append('\n');
+						}
+						buf.append("\t\t"); //$NON-NLS-1$
+						buf.append(errors[i]);
+					}
+					System.out.println(buf.toString());
+				}
 				return;
 			}
 			final Interpreter interpreter = new Interpreter(fExpression, fContext);
@@ -516,11 +589,13 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 
 			EvaluationRunnable er = new EvaluationRunnable();
 			CoreException exception = null;
+			long start = System.currentTimeMillis();
 			try {
 				fThread.runEvaluation(er, null, fEvaluationDetail, fHitBreakpoints);
 			} catch (DebugException e) {
 				exception = e;
 			}
+			long end = System.currentTimeMillis();
 		
             IJavaValue value = interpreter.getResult();
 
@@ -530,6 +605,12 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
             
 			result.setTerminated(er.fTerminated);
 			if (exception != null) {
+				if (JDIDebugOptions.DEBUG_AST_EVAL) {
+					StringBuffer buf = new StringBuffer();
+					buf.append("\tException: "); //$NON-NLS-1$
+					buf.append(exception.toString());
+					System.out.println(buf.toString());
+				}
 			    if (exception instanceof DebugException) {
 			        result.setException((DebugException)exception);
 			    } else {
@@ -538,11 +619,24 @@ public class ASTEvaluationEngine implements IAstEvaluationEngine {
 			} else {   
 			    if (value != null) {
 			        result.setValue(value);
+			        if (JDIDebugOptions.DEBUG_AST_EVAL) {
+						StringBuffer buf = new StringBuffer();
+						buf.append("\tResult: "); //$NON-NLS-1$
+						buf.append(value);
+						System.out.println(buf.toString());
+					}
 			    } else {
 			        result.addError(EvaluationEngineMessages.ASTEvaluationEngine_An_unknown_error_occurred_during_evaluation); 
 			    }
 			}
             
+			if (JDIDebugOptions.DEBUG_AST_EVAL) {
+				StringBuffer buf = new StringBuffer();
+				buf.append("\tDuration: "); //$NON-NLS-1$
+				buf.append(end - start);
+				buf.append("ms"); //$NON-NLS-1$
+				System.out.println(buf.toString());
+			}
 			
 			evaluationFinished(result);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ArrayRuntimeContext.java b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ArrayRuntimeContext.java
index 8f59eb4..ece66aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ArrayRuntimeContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ArrayRuntimeContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ public class ArrayRuntimeContext extends AbstractRuntimeContext {
 	
 	/**
 	 * Name used for temp variable referring to array (replaces 'this').
-	 * The same length as "this" so it does not effect code assist.
+	 * The same length as "this" so it does not affect code assist.
 	 */
 	public static String ARRAY_THIS_VARIABLE = "_a_t"; //$NON-NLS-1$
 	
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
index a8d3b83..ecd11f7 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/SourceBasedSourceGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -156,6 +156,13 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	 * if the <code>createInAnInstanceMethod</code> flag is set, the method created
 	 * which contains the code snippet is an no-static method, even if <code>position</code>
 	 * is in a static method.
+	 * 
+	 * @param type the root {@link IType} 
+	 * @param createInAStaticMethod if the source should be generated 
+	 * @param localTypesNames the array of local type names
+	 * @param localVariables the listing of local variable names
+	 * @param codeSnippet the code snippet
+	 * @param sourceLevel the desired source level
 	 */
 	public SourceBasedSourceGenerator(IType type, boolean createInAStaticMethod, String[] localTypesNames, String[] localVariables, String codeSnippet, String sourceLevel) {
 		fRightTypeFound= false;
@@ -173,6 +180,7 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	
 	/**
 	 * Returns the generated source or <code>null</code> if no source can be generated.
+	 * @return returns the backing source from the generator
 	 */
 	public String getSource() {
 		if (fSource == null) {
@@ -269,7 +277,7 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	/**
 	 * Returns if the specified {@link ASTNode} has the 'correct' parent type to match the current
 	 * type name context
-	 * @param node
+	 * @param node the {@link ASTNode} to check source ranges for
 	 * @return true if the parent type of the given node matches the current type name context,
 	 * false otherwise
 	 */
@@ -328,9 +336,11 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	}
 
 	/**
-	 * @param buffer
-	 * @param list
-	 * @param source
+	 * Builds up the given buffer with the source from each of {@link BodyDeclaration}s in the 
+	 * given list
+	 * @param buffer the buffer to clone and append to
+	 * @param list the list of {@link BodyDeclaration}s
+	 * @return the new source buffer 
 	 */
 	private StringBuffer buildBody(StringBuffer buffer, List list) {
 		StringBuffer source= new StringBuffer();
@@ -610,6 +620,10 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	 * Returns a method name that will be unique in the generated source.
 	 * The generated name is baseName plus as many '_' characters as necessary
 	 * to not duplicate an existing method name.
+	 * 
+	 * @param methodName the method name to look for 
+	 * @param bodyDeclarations the listing of {@link BodyDeclaration}s to search through
+	 * @return the unique method name
 	 */
 	private String getUniqueMethodName(String methodName, List bodyDeclarations) {
 		Iterator iter= bodyDeclarations.iterator();
@@ -633,6 +647,10 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	 * Returns a field name that will be unique in the generated source.
 	 * The generated name is baseName plus as many '_' characters as necessary
 	 * to not duplicate an existing method name.
+	 * 
+	 * @param fieldName the name of the field to look for
+	 * @param bodyDeclarations the list of {@link BodyDeclaration}s to search through
+	 * @return the unique field name
 	 */
 	private String getUniqueFieldName(String fieldName, List bodyDeclarations) {
 		Iterator iter= bodyDeclarations.iterator();
@@ -755,29 +773,23 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 				StringBuffer source = buildTypeBody(fSource, bodyDeclarations);
 				
 				ASTNode parent = node.getParent();
-				while (!(parent instanceof MethodDeclaration || parent instanceof FieldDeclaration)) {
+				while (!(parent instanceof MethodDeclaration || 
+						parent instanceof FieldDeclaration ||
+						parent instanceof Initializer) && parent != null) {
 					parent= parent.getParent();
 				}
 				
 				fSource= new StringBuffer();
 					
-				if (parent instanceof MethodDeclaration) {
+				if(parent instanceof Initializer) {
+					createAnonymousEvalMethod(true, bodyDeclarations, getTypeName(node.getType()), source);
+				}
+				else if (parent instanceof MethodDeclaration) {
 					MethodDeclaration enclosingMethodDeclaration = (MethodDeclaration) parent;
-					
-					if (Flags.isStatic(enclosingMethodDeclaration.getModifiers())) {
-						fSource.append("static "); //$NON-NLS-1$
-					}
-						
-					fSource.append("void "); //$NON-NLS-1$
-					fSource.append(getUniqueMethodName(EVAL_METHOD_NAME, bodyDeclarations));
-					fSource.append("() {\n"); //$NON-NLS-1$
-					fSource.append("new "); //$NON-NLS-1$
-					fSource.append(getTypeName(node.getType())); 
-					fSource.append("()"); //$NON-NLS-1$
-					
-					fSnippetStartPosition+= fSource.length();
-					fSource.append(source);
-					fSource.append(";}\n"); //$NON-NLS-1$
+					createAnonymousEvalMethod(Flags.isStatic(enclosingMethodDeclaration.getModifiers()), 
+							bodyDeclarations, 
+							getTypeName(node.getType()), 
+							source);
 					
 				} else if (parent instanceof FieldDeclaration) {
 					FieldDeclaration enclosingFieldDeclaration = (FieldDeclaration) parent;
@@ -805,9 +817,37 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	}
 
 	/**
+	 * Create a <code>void ____eval()</code> method considering the given {@link BodyDeclaration}s, type name and existing
+	 * body source when an anonymous {@link ClassInstanceCreation} is visited.
+	 * <br><br>
+	 * This method adds the new <code>___eval</code> method source to the root {@link #fSource} variable directly
+	 * 
+	 * @param isstatic if the keyword <code>static</code> should be added to the method source
+	 * @param bodydecls the existing listing of {@link BodyDeclaration}s to consider when creating the <code>___eval</code> method name
+	 * @param typename the raw type name of the type to instantiate in the <code>___eval</code> method
+	 * @param body the existing body of source to append to the remainder of the new method
+	 * @since 3.7
+	 */
+	void createAnonymousEvalMethod(boolean isstatic, List bodydecls, String typename, StringBuffer body) {
+		if(isstatic) {
+			fSource.append("static "); //$NON-NLS-1$
+		}
+		fSource.append("void "); //$NON-NLS-1$
+		fSource.append(getUniqueMethodName(EVAL_METHOD_NAME, bodydecls));
+		fSource.append("() {\n"); //$NON-NLS-1$
+		fSource.append("new "); //$NON-NLS-1$
+		fSource.append(typename); 
+		fSource.append("()"); //$NON-NLS-1$
+		
+		fSnippetStartPosition+= fSource.length();
+		fSource.append(body);
+		fSource.append(";}\n"); //$NON-NLS-1$
+	}
+	
+	/**
 	 * Recursively finds the parent {@link Type} from the given type, in the cases where
 	 * the type is an {@link ArrayType} or a {@link ParameterizedType}
-	 * @param type
+	 * @param type the {@link Type}
 	 * @return the parent {@link Type}
 	 */
 	private Type getParentType(Type type) {
@@ -1740,7 +1780,7 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	 * 
 	 * @param major major level - e.g. 1 from 1.4
 	 * @param minor minor level - e.g. 4 from 1.4
-	 * @return
+	 * @return <code>true</code> if the given major / minor version is less than or equal to the backing source level
 	 */
 	public boolean isSourceLevelGreaterOrEqual(int major, int minor) {
 		return (fSourceMajorLevel > major) ||
@@ -1750,8 +1790,8 @@ public class SourceBasedSourceGenerator extends ASTVisitor  {
 	/**
 	 * Appends type parameters to source.
 	 * 
-	 * @param source
-	 * @param typeParameters
+	 * @param source the current buffer of source to append to
+	 * @param typeParameters the list of {@link TypeParameter}s to add
 	 */
 	private void appendTypeParameters(StringBuffer source, List typeParameters) {
 		if (!typeParameters.isEmpty() && isSourceLevelGreaterOrEqual(1, 5)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java b/eclipse/plugins/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java
index c5146b1..4aae56e 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/MirrorImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Date;
 import java.util.Map;
 
 import org.eclipse.jdi.Bootstrap;
@@ -23,6 +24,7 @@ import org.eclipse.jdi.internal.jdwp.JdwpCommandPacket;
 import org.eclipse.jdi.internal.jdwp.JdwpPacket;
 import org.eclipse.jdi.internal.jdwp.JdwpReplyPacket;
 import org.eclipse.jdi.internal.jdwp.JdwpString;
+import org.eclipse.jdt.internal.debug.core.JDIDebugOptions;
 
 import com.sun.jdi.ClassNotPreparedException;
 import com.sun.jdi.InternalException;
@@ -51,7 +53,7 @@ public class MirrorImpl implements Mirror {
 	protected VerboseWriter fVerboseWriter = null;
 	/** True if a Jdwp request has been sent to the VM and the response is not yet (fully) processed. */
 	private boolean fPendingJdwpRequest = false;
-
+	
 	/**
 	 * Constructor only to be used by Virtual Machine objects: stores description of Mirror object and Virtual Machine.
 	 */	
@@ -167,11 +169,25 @@ public class MirrorImpl implements Mirror {
 	public JdwpReplyPacket requestVM(int command, byte[] outData) {
 		JdwpCommandPacket commandPacket = new JdwpCommandPacket(command);
 		commandPacket.setData(outData);
+		long sent = System.currentTimeMillis();
 		fVirtualMachineImpl.packetSendManager().sendPacket(commandPacket);
 		fPendingJdwpRequest = true;
 		writeVerboseCommandPacketHeader(commandPacket);
 
 		JdwpReplyPacket reply = fVirtualMachineImpl.packetReceiveManager().getReply(commandPacket);
+		long recieved = System.currentTimeMillis();
+		if (JDIDebugOptions.DEBUG_JDI_REQUEST_TIMES) {
+			StringBuffer buf = new StringBuffer();
+			buf.append(JDIDebugOptions.FORMAT.format(new Date(sent)));
+			buf.append(" JDI Request: "); //$NON-NLS-1$
+			buf.append(commandPacket.toString());
+			buf.append("\n\tResponse Time: "); //$NON-NLS-1$
+			buf.append(recieved - sent);
+			buf.append("ms"); //$NON-NLS-1$
+			buf.append(" length: "); //$NON-NLS-1$
+			buf.append(reply.getLength());
+			System.out.println(buf.toString());
+		}
 		if (fVerboseWriter != null) {
 			fVerboseWriter.println();
 			fVerboseWriter.println("Received reply"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/IJavaDebugTarget.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/IJavaDebugTarget.java
index 299685c..b03737b 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/IJavaDebugTarget.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/debug/core/IJavaDebugTarget.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Jesper Steen Moller - enhancement 254677 - filter getters/setters
+ *     Codenza Software Development Inc. - Darin Wright - bug 330987
  *******************************************************************************/
 package org.eclipse.jdt.debug.core;
 
@@ -235,6 +237,41 @@ public interface IJavaDebugTarget extends IDebugTarget, IStepFilters {
 	public abstract void setFilterSynthetics(boolean filter);
 	
 	/**
+	 * Returns whether simple getters are filtered when stepping.
+	 * 
+	 * @return true, if simple getters should be filtered when stepping
+	 * @since 3.7
+	 */
+	public abstract boolean isFilterGetters();
+
+	/**
+	 * Sets whether simple getters are filtered
+	 * when stepping.
+	 * 
+	 * @param filter whether to filter simple getters when stepping
+	 * @since 3.7
+	 */
+	public abstract void setFilterGetters(boolean filter);
+	
+	/**
+	 * Returns whether simple setters are filtered when stepping.
+	 * 
+	 * @return true, if simple setters should be filtered when stepping
+	 * @since 3.7
+	 */
+	public abstract boolean isFilterSetters();
+
+	/**
+	 * Sets whether simple setters are filtered
+	 * when stepping.
+	 * 
+	 * @param filter whether to filter simple setters when stepping
+	 * @since 3.7
+	 */
+	public abstract void setFilterSetters(boolean filter);
+	
+	
+	/**
 	 * Returns whether static initializers are filtered
 	 * when stepping, if step filters are enabled.
 	 * 
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java
index 94cbcd5..43350cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/EventDispatcher.java
@@ -120,7 +120,6 @@ public class EventDispatcher implements Runnable {
 		IJDIEventListener[] listeners = new IJDIEventListener[eventSet.size()];
 		boolean vote = false; 
 		boolean resume = true;
-		int voters = 0; 
 		int index=-1;
 		List deferredEvents = null;
 		while (iter.hasNext()) {
@@ -153,7 +152,6 @@ public class EventDispatcher implements Runnable {
 				}
 				vote = true;
 				resume = listener.handleEvent(event, fTarget, !resume, eventSet) && resume;
-				voters++;
 				continue;
 			}
 			
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/HeapWalkingManager.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/HeapWalkingManager.java
index 2a79d3a..7725b3c 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/HeapWalkingManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/HeapWalkingManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,11 @@ public class HeapWalkingManager{
 			IDebugTarget target = ((IDebugElement)object).getDebugTarget();
 			if (target instanceof IJavaDebugTarget){
 				return ((IJavaDebugTarget)target).supportsInstanceRetrieval();
+			} else if (target != null) {
+				Object adapter = target.getAdapter(IJavaDebugTarget.class);
+				if (adapter instanceof IJavaDebugTarget){
+					return ((IJavaDebugTarget) adapter).supportsInstanceRetrieval();
+				}
 			}
 		}
 		return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java
index 9f1fdc3..70e2a9f 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JDIDebugOptions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,9 @@ package org.eclipse.jdt.internal.debug.core;
 
 import org.eclipse.core.runtime.Platform;
 
+import com.ibm.icu.text.DateFormat;
+import com.ibm.icu.text.SimpleDateFormat;
+
 /**
  * Debug flags in options file.
  * 
@@ -21,10 +24,22 @@ public class JDIDebugOptions {
 	// debug option flags
 	public static boolean DEBUG = false;
 	public static boolean DEBUG_JDI_EVENTS = false;
+	public static boolean DEBUG_JDI_REQUEST_TIMES = false;
+	public static boolean DEBUG_AST_EVAL = false;
+	public static boolean DEBUG_AST_EVAL_THREAD_TRACE = false;
+	
+	// used to format debug messages
+	public static final DateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); //$NON-NLS-1$
 
 	public static void initDebugOptions() {
 		DEBUG = "true".equals(Platform.getDebugOption("org.eclipse.jdt.debug/debug"));  //$NON-NLS-1$//$NON-NLS-2$
 		DEBUG_JDI_EVENTS = DEBUG && "true".equals( //$NON-NLS-1$
 				 Platform.getDebugOption("org.eclipse.jdt.debug/debug/jdiEvents")); //$NON-NLS-1$
+		DEBUG_JDI_REQUEST_TIMES = DEBUG && "true".equals( //$NON-NLS-1$
+				 Platform.getDebugOption("org.eclipse.jdt.debug/debug/jdiRequestTimes")); //$NON-NLS-1$
+		DEBUG_AST_EVAL = DEBUG && "true".equals( //$NON-NLS-1$
+				 Platform.getDebugOption("org.eclipse.jdt.debug/debug/astEvaluations")); //$NON-NLS-1$
+		DEBUG_AST_EVAL_THREAD_TRACE = DEBUG && "true".equals( //$NON-NLS-1$
+				 Platform.getDebugOption("org.eclipse.jdt.debug/debug/astEvaluations/callingThreads")); //$NON-NLS-1$
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
index 16c550a..2d7fcd2 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -698,7 +698,7 @@ public class JavaHotCodeReplaceManager implements IResourceChangeListener, ILaun
 	}
 	
 	/**
-	 * Looks for the deepest effected stack frame in the stack
+	 * Looks for the deepest affected stack frame in the stack
 	 * and forces a drop to frame.  Does this for all of the active
 	 * stack frames in the target.
 	 * 
@@ -722,7 +722,7 @@ public class JavaHotCodeReplaceManager implements IResourceChangeListener, ILaun
 	}
 	
 	/**
-	 * Looks for the deepest effected stack frame in the stack
+	 * Looks for the deepest affected stack frame in the stack
 	 * and forces a drop to frame.  Does this for all of the active
 	 * stack frames in the target.
 	 * 
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java
index ed6b944..d6aea6f 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Jesper Steen Moller - enhancement 254677 - filter getters/setters
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.core.model;
 
@@ -239,6 +240,19 @@ public class JDIDebugTarget extends JDIDebugElement implements IJavaDebugTarget,
 	private static final int STEP_THRU_FILTERS = 0x010;
 	
 	/**
+	 * Step filter bit mask - indicates if simple getters are filtered.
+	 * @since 3.7
+	 */
+	private static final int FILTER_GETTERS = 0x020;
+
+	/**
+	 * Step filter bit mask - indicates if simple setters are filtered.
+	 * 
+	 * 	@since 3.7
+	 */
+	private static final int FILTER_SETTERS = 0x040;
+
+	/**
 	 * Mask used to flip individual bit masks via XOR
 	 */
 	private static final int XOR_MASK = 0xFFF;
@@ -2168,6 +2182,30 @@ public class JDIDebugTarget extends JDIDebugElement implements IJavaDebugTarget,
 		}				
 	}	
 
+	public boolean isFilterGetters() {
+		return (fStepFilterMask & FILTER_GETTERS) > 0;
+	}
+
+	public void setFilterGetters(boolean filter) {
+		if (filter) {
+			fStepFilterMask = fStepFilterMask | FILTER_GETTERS;
+		} else {
+			fStepFilterMask = fStepFilterMask & (FILTER_GETTERS ^ XOR_MASK);
+		}				
+	}
+	
+	public boolean isFilterSetters() {
+		return (fStepFilterMask & FILTER_SETTERS) > 0;
+	}
+
+	public void setFilterSetters(boolean filter) {
+		if (filter) {
+			fStepFilterMask = fStepFilterMask | FILTER_SETTERS;
+		} else {
+			fStepFilterMask = fStepFilterMask & (FILTER_SETTERS ^ XOR_MASK);
+		}				
+	}
+	
 	/**
 	 * @see IJavaDebugTarget#setStepFilters(String[])
 	 */
@@ -2552,7 +2590,6 @@ public class JDIDebugTarget extends JDIDebugElement implements IJavaDebugTarget,
 		}
 		boolean prevSuspend = isSuspended();
 		int running = 0;
-		int suspended = 0;
 		List toSuspend = new ArrayList();
 		List toResume = new ArrayList();
 		List toRefresh = new ArrayList();
@@ -2564,7 +2601,6 @@ public class JDIDebugTarget extends JDIDebugElement implements IJavaDebugTarget,
 			try {
 				boolean realSuspended = reference.isSuspended();
 				if (realSuspended) {
-					suspended++;
 					if (modelSuspended) {
 						// Even if the model is suspended, it might be in a different location so refresh
 						toRefresh.add(thread);
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIMethod.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIMethod.java
new file mode 100644
index 0000000..4ae5659
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIMethod.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Jesper Steen Moller and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Jesper Steen Moller - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jdt.internal.debug.core.model;
+
+import com.sun.jdi.Method;
+
+/**
+ * Class for analysing Java methods while debugging.
+ * @author jmoeller2
+ *
+ */
+public abstract class JDIMethod {
+
+	// Known Java byte codes, from the JVM spec
+	private static final int ALOAD_0 	= 0x2a;
+	
+	private static final int ILOAD_1 	= 0x1b;
+	private static final int LLOAD_1 	= 0x1f;
+	private static final int FLOAD_1 	= 0x23;
+	private static final int DLOAD_1 	= 0x27;
+	private static final int ALOAD_1 	= 0x2b;
+	
+	private static final int IRETURN 	= 0xac;
+	private static final int LRETURN 	= 0xad;
+	private static final int FRETURN 	= 0xae; 
+	private static final int DRETURN 	= 0xaf;
+	private static final int ARETURN 	= 0xb0;
+	
+	private static final int GETFIELD 	= 0xb4;
+	private static final int PUTFIELD 	= 0xb5;
+	
+	private static final int RETURN 	= 0xb1;
+	
+	/**
+	 * Determines if the opcode passes in is one of the value return instructions.
+	 * 
+	 * @param opCode opCode to check
+	 * @return If <code>opCode</code> is one of 'areturn', 'ireturn', etc.
+	 */
+	public static final boolean isXReturn(byte opCode) {
+		return (opCode & 0xFF) == IRETURN ||
+		(opCode & 0xFF) == LRETURN ||
+		(opCode & 0xFF) == FRETURN ||
+		(opCode & 0xFF) == DRETURN ||
+		(opCode & 0xFF) == ARETURN;
+	}
+	
+	/**
+	 * Determines if the opcode passes in is one of the 'loado_1' instruxtions.
+	 * 
+	 * @param opCode opCode to check
+	 * @return If <code>opCode</code> is one of 'aload_1', 'iload_1', etc.
+	 */
+	public static final boolean isXLoad1(byte opCode) {
+		return (opCode & 0xFF) == ILOAD_1 ||
+			(opCode & 0xFF) == LLOAD_1 ||
+			(opCode & 0xFF) == FLOAD_1 ||
+			(opCode & 0xFF) == DLOAD_1 ||
+			(opCode & 0xFF) == ALOAD_1;
+	}
+	
+	/**
+	 * Determines if the method in question is a simple getter, JavaBean style.
+	 * 
+	 * Simple getters have byte code which look like this, and they start with
+	 * "get" or "is":
+	 * 
+	 *    0  aload_0
+	 *    1  getfield
+	 *    4  Xreturn
+	 *    
+	 * @param method Method to check
+	 * @return true if the method is a simple getter
+	 */
+	public static boolean isGetterMethod(Method method) {
+		if (! (method.name().startsWith("get") || method.name().startsWith("is"))) return false;  //$NON-NLS-1$  //$NON-NLS-2$
+		
+		byte[] bytecodes = method.bytecodes();
+		return bytecodes.length == 5
+			&& (bytecodes[0] & 0xFF) == ALOAD_0
+			&& (bytecodes[1] & 0xFF) == GETFIELD
+			&& isXReturn(bytecodes[4]);
+	}
+
+	/**
+	 * Determines if the method in question is a simple getter, JavaBean style.
+	 * 
+	 * Simple setters have byte code which look like this, and they start with
+	 * "set":
+	 * 
+     *    0  aload_0
+     *    1  Xload_1
+     *    2  putfield
+     *    5  return
+	 *
+	 * @param method Method to check
+	 * @return true if the method is a simple setter
+	 */
+	public static boolean isSetterMethod(Method method) {
+		if (!method.name().startsWith("set")) //$NON-NLS-1$
+			return false;
+
+		byte[] bytecodes = method.bytecodes();
+		return bytecodes.length == 6
+			&& (bytecodes[0] & 0xFF) == ALOAD_0
+			&& isXLoad1(bytecodes[1])
+			&& (bytecodes[2] & 0xFF) == PUTFIELD
+			&& (bytecodes[5] & 0xFF) == RETURN;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIReferenceListVariable.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIReferenceListVariable.java
index f57a770..ce9d48b 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIReferenceListVariable.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIReferenceListVariable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,12 +11,14 @@
 package org.eclipse.jdt.internal.debug.core.model;
 
 import org.eclipse.jdt.debug.core.IJavaObject;
+
 import org.eclipse.jdt.internal.debug.core.logicalstructures.JDIPlaceholderVariable;
 
 /**
- * A variable that stores a list of references.  Used to display reference information collected from the vm
- * using the 'all references' utility in Java 6.0.  This variable uses a <code>JDIReferenceListValue</code>
- * as its value.  It's children will be <code>JDIReferenceListEntryVariable</code>.
+ * A variable that stores a list of references. Used to display reference information collected from
+ * the vm using the 'all references' utility in Java 6.0. This variable uses a
+ * <code>JDIReferenceListValue</code> as its value. Its children will be
+ * <code>JDIReferenceListEntryVariable</code>.
  * 
  * @since 3.3
  * @see JDIReferenceListValue
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
index 938519b..34663f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
+++ b/eclipse/plugins/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     BEA - Daniel R Somerfield - Bug 89643
+ *     Jesper Steen Moller - Enhancement 254677 - filter getters/setters
  *******************************************************************************/
 package org.eclipse.jdt.internal.debug.core.model;
 
@@ -350,6 +351,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	/**
 	 * Adds the given breakpoint to the list of breakpoints
 	 * this thread is suspended at
+	 * @param bp the breakpoint to add to the listing
 	 */
 	protected void addCurrentBreakpoint(IBreakpoint bp) {
 		fCurrentBreakpoints.add(bp);
@@ -359,55 +361,56 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * Removes the given breakpoint from the list of breakpoints
 	 * this thread is suspended at (called when a breakpoint is
 	 * deleted, in case we are suspended at that breakpoint)
+	 * @param bp the breakpoint to remove from the listing
 	 */
 	protected void removeCurrentBreakpoint(IBreakpoint bp) {
 		fCurrentBreakpoints.remove(bp);
 	}	
 	
-	/**
+	/* (non-Javadoc)
 	 * @see org.eclipse.debug.core.model.IThread#getBreakpoints()
 	 */
 	public synchronized IBreakpoint[] getBreakpoints() {
 		return (IBreakpoint[])fCurrentBreakpoints.toArray(new IBreakpoint[fCurrentBreakpoints.size()]);
 	}
 
-	/**
-	 * @see ISuspendResume#canResume()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.ISuspendResume#canResume()
 	 */
 	public boolean canResume() {
 		return isSuspended() && (!isPerformingEvaluation() || isInvokingMethod()) && !isSuspendVoteInProgress();
 	}
 
-	/**
-	 * @see ISuspendResume#canSuspend()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend()
 	 */
 	public boolean canSuspend() {
 		return !isSuspended() || (isPerformingEvaluation() && !isInvokingMethod()) || isSuspendVoteInProgress();
 	}
 
-	/**
-	 * @see ITerminate#canTerminate()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.ITerminate#canTerminate()
 	 */
 	public boolean canTerminate() {
 		return getDebugTarget().canTerminate();
 	}
 
-	/**
-	 * @see IStep#canStepInto()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.IStep#canStepInto()
 	 */
 	public boolean canStepInto() {
 		return canStep();
 	}
 
-	/**
-	 * @see IStep#canStepOver()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.IStep#canStepOver()
 	 */
 	public boolean canStepOver() {
 		return canStep();
 	}
 
-	/**
-	 * @see IStep#canStepReturn()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.IStep#canStepReturn()
 	 */
 	public boolean canStepReturn() {
 		return canStep();
@@ -507,10 +510,12 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	}
 	
 	/**
-	 * @see computeStackFrames()
+	 * @see #computeStackFrames()
 	 * 
 	 * @param refreshChildren whether or not this method should request new stack
 	 *        frames from the VM
+	 * @return the list of stackframes
+	 * @throws DebugException if an exception occurs retrieving frames
 	 */	
 	protected synchronized List computeStackFrames(boolean refreshChildren) throws DebugException {
 		if (isSuspended()) {
@@ -531,7 +536,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 					fStackFrames.add(0, new JDIStackFrame(this, (StackFrame) frames.get(i), depth));
 					depth++;
 				}
-				int numToRebind = Math.min(newSize, oldSize); // number of frames to attempt to rebind
+				int numToRebind = Math.min(newSize, oldSize); // number of frames to attempt to re-bind
 				int offset = newSize - 1;
 				for (depth = 0; depth < numToRebind; depth++) {
 					JDIStackFrame oldFrame = (JDIStackFrame) fStackFrames.get(offset);
@@ -585,13 +590,15 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	}
 	
 	/**
-	 * @see JDIThread#computeStackFrames()
-	 * 
 	 * This method differs from computeStackFrames() in that it
 	 * always requests new stack frames from the VM. As this is
 	 * an expensive operation, this method should only be used
 	 * by clients who know for certain that the stack frames
 	 * on the VM have changed.
+	 * 
+	 * @see JDIThread#computeStackFrames()
+	 * @return the listing of stackframes or an empty list, never <code>null</code>
+	 * @throws DebugException if an exception occurs retrieving the stackframes
 	 */
 	public List computeNewStackFrames() throws DebugException {
 		return computeStackFrames(true);
@@ -643,10 +650,10 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		// return or exception will be thrown
 		return -1;
 	}
-	
-	/**
-	 * @see IJavaThread#runEvaluation(IEvaluationRunnable, IProgressMonitor, int, boolean)
-	 */ 
+	 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#runEvaluation(org.eclipse.jdt.debug.core.IEvaluationRunnable, org.eclipse.core.runtime.IProgressMonitor, int, boolean)
+	 */
 	public void runEvaluation(IEvaluationRunnable evaluation, IProgressMonitor monitor, int evaluationDetail, boolean hitBreakpoints) throws DebugException {
 		if (isPerformingEvaluation()) {
 			requestFailed(JDIDebugModelMessages.JDIThread_Cannot_perform_nested_evaluations, null, IJavaThread.ERR_NESTED_METHOD_INVOCATION); //			
@@ -733,8 +740,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		}
 	}	
 	
-	/**
-	 * @see org.eclipse.jdt.debug.core.IJavaThread#queueRunnable(Runnable)
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#queueRunnable(java.lang.Runnable)
 	 */
 	public void queueRunnable(Runnable evaluation) {
 		if (fAsyncJob == null) {
@@ -743,8 +750,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		fAsyncJob.addRunnable(evaluation);
 	}
 	
-	/**
-	 * @see IJavaThread#terminateEvaluation()
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#terminateEvaluation()
 	 */
 	public void terminateEvaluation() throws DebugException {
 		synchronized (fEvaluationLock) {
@@ -755,8 +762,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		}
 	}
 	
-	/**
-	 * @see IJavaThread#canTerminateEvaluation()
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#canTerminateEvaluation()
 	 */
 	public boolean canTerminateEvaluation() {
 		synchronized (fEvaluationLock) {
@@ -800,6 +807,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * @param method the underlying method to be invoked
 	 * @param args the arguments to invoke the method with (an empty list
 	 *  if none) 
+	 * @param invokeNonvirtual if the super-class method should be invoked
 	 * @return the result of the method, as an underlying value
 	 * @exception DebugException if this method fails.  Reasons include:
 	 * <ul>
@@ -941,7 +949,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * @param restoreTimeout the communication timeout value,
 	 * 	in milliseconds, that should be reset
 	 * @see #invokeComplete(int)
-	 * @exception DebugException.  Reasons include:
+	 * @exception DebugException  Reasons include:
 	 * <ul>
 	 * <li>Failure communicating with the VM.  The DebugException's
 	 * status code contains the underlying exception responsible for
@@ -962,7 +970,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * @param restoreTimeout the communication timeout value,
 	 * 	in milliseconds, that should be reset
 	 * @see #invokeComplete(int)
-	 * @exception DebugException.  Reasons include:
+	 * @exception DebugException  Reasons include:
 	 * <ul>
 	 * <li>Failure communicating with the VM.  The DebugException's
 	 * status code contains the underlying exception responsible for
@@ -984,7 +992,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * 
 	 * @param restoreTimeout the communication timeout value,
 	 * 	in milliseconds, that should be reset
-	 * @see #invokeMethod(ClassType, ObjectReference, Method, List)
+	 * @see #invokeMethod(ClassType, ObjectReference, Method, List, boolean)
  	 * @see #newInstance(ClassType, Method, List)
 	 */
 	protected synchronized void invokeComplete(int restoreTimeout) {
@@ -999,8 +1007,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		}
 	}
 	
-	/**
-	 * @see IThread#getName()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.IThread#getName()
 	 */
 	public String getName() throws DebugException {
 		try {
@@ -1023,6 +1031,11 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	}
 
 	/**
+	 * Returns the priority from the underlying {@link ReferenceType}, failing that the backing {@link Value}
+	 * for the underlying {@link ThreadReference} is consulted
+	 * 
+	 * @return the priority from the backing {@link ReferenceType} or {@link Value}
+	 * @throws DebugException if an exception occurs retrieving the priority
 	 * @see IThread#getPriority
 	 */
 	public int getPriority() throws DebugException {
@@ -1047,8 +1060,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		return -1;
 	}
 
-	/**
-	 * @see IThread#getTopStackFrame()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.IThread#getTopStackFrame()
 	 */
 	public synchronized IStackFrame getTopStackFrame() throws DebugException {
 		List c= computeStackFrames();
@@ -1184,22 +1197,22 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		
 	}
 
-	/**
-	 * @see IStep#isStepping()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.IStep#isStepping()
 	 */
 	public boolean isStepping() {
 		return getPendingStepHandler() != null;
 	}
 
-	/**
-	 * @see ISuspendResume#isSuspended()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.ISuspendResume#isSuspended()
 	 */
 	public boolean isSuspended() {
 		return !fRunning && !fTerminated;
 	}
 
-	/**
-	 * @see IJavaThread#isSystemThread()
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#isSystemThread()
 	 */
 	public boolean isSystemThread() {
 		return fIsSystemThread;
@@ -1212,8 +1225,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		return fIsDaemon;
 	}
 
-	/**
-	 * @see IJavaThread#getThreadGroupName()
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#getThreadGroupName()
 	 */
 	public String getThreadGroupName() throws DebugException {
 		if (fThreadGroupName == null) {
@@ -1236,13 +1249,16 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		return fThreadGroupName;
 	}
 
-	/**
-	 * @see ITerminate#isTerminated()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.ITerminate#isTerminated()
 	 */
 	public boolean isTerminated() {
 		return fTerminated;
 	}
 	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#isOutOfSynch()
+	 */
 	public synchronized boolean isOutOfSynch() throws DebugException {
 		if (isSuspended() && ((JDIDebugTarget)getDebugTarget()).hasHCRFailed()) {
 			List frames= computeStackFrames();
@@ -1259,6 +1275,9 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		return false;
 	}
 	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#mayBeOutOfSynch()
+	 */
 	public boolean mayBeOutOfSynch() {
 		if (!isSuspended()) {
 			return ((JDIDebugTarget)getDebugTarget()).hasHCRFailed();
@@ -1275,8 +1294,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		fTerminated= terminated;
 	}
 
-	/**
-	 * @see ISuspendResume#resume()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.ISuspendResume#resume()
 	 */
 	public synchronized void resume() throws DebugException {
 		if (getDebugTarget().isSuspended()) {
@@ -1288,11 +1307,14 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	}
 	
 	/**
-	 * @see ISuspendResume#resume()
 	 * 
 	 * Updates the state of this thread, but only fires
 	 * notification to listeners if <code>fireNotification</code>
 	 * is <code>true</code>.
+	 * 
+	 * @see ISuspendResume#resume()
+	 * @param fireNotification if a resume event should be fired 
+	 * @throws DebugException if an exception occurs trying to resume the thread
 	 */
 	private synchronized void resumeThread(boolean fireNotification) throws DebugException {
 		if (!isSuspended() || (isPerformingEvaluation() && !isInvokingMethod())) {
@@ -1335,7 +1357,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * is resumed, when stack frames are to be re-used when it later
 	 * suspends.
 	 * 
-	 * @see computeStackFrames()
+	 * @see #computeStackFrames()
 	 */
 	protected synchronized void preserveStackFrames() {
 		fRefreshChildren = true;
@@ -1351,7 +1373,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * this thread is resumed when stack frames are not to be re-used
 	 * on the next suspend.
 	 * 
-	 * @see computeStackFrames()
+	 * @see #computeStackFrames()
 	 */
 	protected synchronized void disposeStackFrames() {
 		fStackFrames.clear();
@@ -1439,6 +1461,9 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * step into is necessary.  It compares the current Location to the original
 	 * Location when the user step into was initiated.  It also makes sure the stack depth
 	 * now is the same as when the step was initiated.
+	 * @param location the location to consider
+	 * @return <code>true</code> if we should do an extra step, <code>false</code> otherwise
+	 * @throws DebugException if an exception occurs
 	 */
 	protected boolean shouldDoExtraStepInto(Location location) throws DebugException {
 		if (getOriginalStepKind() != StepRequest.STEP_INTO) {
@@ -1469,7 +1494,9 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	/**
 	 * Determines if a user did a step into and stepped through filtered code.
 	 * In this case, do a step return if the user has requested not to 
-	 * step thru to an un-filtered location.
+	 * step thru to an unfiltered location.
+	 * @return <code>true</code> if we should do a step return
+	 * @throws DebugException if an exception occurs
 	 */
 	protected boolean shouldDoStepReturn() throws DebugException {
 		if (getOriginalStepKind() == StepRequest.STEP_INTO) {
@@ -1480,8 +1507,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		return false;
 	}	
 	
-	/**
-	 * @see ISuspendResume#suspend()
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.model.ISuspendResume#suspend()
 	 */
 	public void suspend() throws DebugException {
 		// prepare for the suspend request
@@ -1618,6 +1645,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	/**
 	 * Notifies this thread that is about to be resumed due
 	 * to a VM resume.
+	 * @throws DebugException if an exception occurs
 	 */
 	protected synchronized void resumedByVM() throws DebugException {
 		fClientSuspendRequest = false;
@@ -1652,6 +1680,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 
 	/**
 	 * Drops to the given stack frame
+	 * @param frame the stack frame to try dropping to
 	 * 
 	 * @exception DebugException if this method fails.  Reasons include:
 	 * <ul>
@@ -1707,7 +1736,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 			} catch (InvalidStackFrameException exception) {
 				// InvalidStackFrameException can be thrown when all but the
 				// deepest frame were popped. Fire a changed notification
-				// in case this has occured.
+				// in case this has occurred.
 				fireChangeEvent(DebugEvent.CONTENT);
 				targetRequestFailed(exception.toString(),exception); 
 			} catch (RuntimeException exception) {
@@ -1722,6 +1751,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * This method is synchronized, such that the step request
 	 * begins before a background evaluation can be performed.
 	 * 
+	 * @param frame the stack frame to try and step to
 	 * @exception DebugException if this method fails.  Reasons include:
 	 * <ul>
 	 * <li>Failure communicating with the VM.  The DebugException's
@@ -1749,8 +1779,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		}
 	}
 
-	/**
-	 * @see IJavaThread#findVariable(String)
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#findVariable(java.lang.String)
 	 */
 	public IJavaVariable findVariable(String varName) throws DebugException {
 		if (isSuspended()) {
@@ -1764,7 +1794,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 					}
 				}
 			} catch (DebugException e) {
-				// if the thread has since reusmed, return null (no need to report error)
+				// if the thread has since resumed, return null (no need to report error)
 				if (e.getStatus().getCode() != IJavaThread.ERR_THREAD_NOT_SUSPENDED) {
 					throw e;
 				}
@@ -1840,9 +1870,9 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		}
 		return fThreadGroup;
 	}
-		 	
-	/**
-	 * @see IJavaThread#isPerformingEvaluation()
+		
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#isPerformingEvaluation()
 	 */
 	public boolean isPerformingEvaluation() {
 		return fEvaluationRunnable != null;
@@ -1851,6 +1881,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	/**
 	 * Returns whether this thread is currently performing
 	 * a method invocation 
+	 * @return if the thread is currently invoking a method
 	 */
 	public boolean isInvokingMethod() {
 		return fIsInvokingMethod;
@@ -1859,6 +1890,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	/**
 	 * Returns whether this thread is currently ignoring
 	 * breakpoints.
+	 * @return if the thread is currently ignoring breakpoints
 	 */
 	public boolean isIgnoringBreakpoints() {
 		return !fHonorBreakpoints || fSuspendVoteInProgress || hasClientRequestedSuspend();
@@ -1877,7 +1909,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * Sets whether this thread is currently invoking a method. Notifies
 	 * any threads waiting for the method invocation lock
 	 * 
-	 * @param evaluating whether this thread is currently
+	 * @param invoking whether this thread is currently
 	 *  invoking a method
 	 */
 	protected void setInvokingMethod(boolean invoking) {
@@ -2011,7 +2043,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		/**
 		 * Creates and returns a step request of the specified kind.
 		 * 
-		 * @param one of <code>StepRequest.STEP_INTO</code>,
+		 * @param kind of <code>StepRequest.STEP_INTO</code>,
 		 * 	<code>StepRequest.STEP_OVER</code>, <code>StepRequest.STEP_OUT</code>
 		 * @return step request
 		 * @exception DebugException if this method fails.  Reasons include:
@@ -2085,21 +2117,27 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * and removes this handler as an event listener.
 		 */
 		protected void deleteStepRequest() {
-			removeJDIEventListener(this, getStepRequest());
 			try {
-				EventRequestManager manager = getEventRequestManager();
-				if (manager != null) {
-					manager.deleteEventRequest(getStepRequest());
-				}				
-				setStepRequest(null);
+				StepRequest req = getStepRequest();
+				if(req != null) {
+					removeJDIEventListener(this, req);
+					EventRequestManager manager = getEventRequestManager();
+					if (manager != null) {
+						manager.deleteEventRequest(req);
+					}
+				}
 			} catch (RuntimeException e) {
 				logError(e);
 			}
+			finally {
+				setStepRequest(null);
+			}
 		}
 		
 		/**
 		 * If step filters are currently switched on and the current location is not a filtered
 		 * location, set all active filters on the step request.
+		 * @param request the request to augment
 		 */
 		protected void attachFiltersToStepRequest(StepRequest request) {
 			
@@ -2147,7 +2185,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * step filter criteria (e.g., synthetic methods, static initializers),
 		 * then continue stepping.
 		 * 
-		 * @see IJDIEventListener#handleEvent(Event, JDIDebugTarget)
+		 * @see IJDIEventListener#handleEvent(Event, JDIDebugTarget, boolean, EventSet)
 		 */
 		public boolean handleEvent(Event event, JDIDebugTarget target, boolean suspendVote, EventSet eventSet) {
 			try {
@@ -2193,6 +2231,9 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * user has indicated (via the step filter preferences) should be 
 		 * filtered and the step was not initiated from a filtered location.
 		 * Returns <code>false</code> otherwise.
+		 * @param location the location to check
+		 * @return if the given {@link Location} should be filtered
+		 * @throws DebugException if an exception occurs
 		 */
 		protected boolean locationShouldBeFiltered(Location location) throws DebugException {
 			if (applyStepFilters()) {
@@ -2207,19 +2248,25 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * Returns <code>true</code> if the StepEvent's Location is a Method that the 
 		 * user has indicated (via the step filter preferences) should be 
 		 * filtered.  Returns <code>false</code> otherwise.
+		 * @param method the {@link Method} location to check
+		 * @return <code>true</code> if the {@link Method} {@link Location} should be filtered, <code>false</code> otherwise
 		 */
 		protected boolean locationIsFiltered(Method method) {
 			if (isStepFiltersEnabled()) {
 				boolean filterStatics = getJavaDebugTarget().isFilterStaticInitializers();
 				boolean filterSynthetics = getJavaDebugTarget().isFilterSynthetics();
 				boolean filterConstructors = getJavaDebugTarget().isFilterConstructors();
-				if (!(filterStatics || filterSynthetics || filterConstructors)) {
+				boolean filterSetters = getJavaDebugTarget().isFilterSetters();
+				boolean filterGetters = getJavaDebugTarget().isFilterGetters();
+				if (!(filterStatics || filterSynthetics || filterConstructors || filterGetters || filterSetters)) {
 					return false;
 				}			
 				
 				if ((filterStatics && method.isStaticInitializer()) ||
 					(filterSynthetics && method.isSynthetic()) ||
-					(filterConstructors && method.isConstructor()) ) {
+					(filterConstructors && method.isConstructor()) ||
+					(filterGetters && JDIMethod.isGetterMethod(method)) ||
+					(filterSetters && JDIMethod.isSetterMethod(method))) {
 					return true;	
 				}
 			}
@@ -2236,6 +2283,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * 		and event listener</li>
 		 * <li>A suspend event is fired</li>
 		 * </ul>
+		 * @param set the remaining {@link EventSet} to queue
 		 */
 		protected void stepEnd(EventSet set) {
 			setRunning(false);
@@ -2275,7 +2323,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * step. A pending step could be cancelled if a breakpoint
 		 * suspends execution during the step.
 		 * 
-		 * @param one of <code>StepRequest.STEP_INTO</code>,
+		 * @param kind of <code>StepRequest.STEP_INTO</code>,
 		 * 	<code>StepRequest.STEP_OVER</code>, <code>StepRequest.STEP_OUT</code>
 		 * @exception DebugException if this method fails.  Reasons include:
 		 * <ul>
@@ -2306,15 +2354,16 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * Handler for step over requests.
 	 */
 	class StepOverHandler extends StepHandler {
-		/**
-		 * @see StepHandler#getStepKind()
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jdt.internal.debug.core.model.JDIThread.StepHandler#getStepKind()
 		 */
 		protected int getStepKind() {
 			return StepRequest.STEP_OVER;
 		}	
 		
-		/**
-		 * @see StepHandler#getStepDetail()
+		/* (non-Javadoc)
+		 * @see org.eclipse.jdt.internal.debug.core.model.JDIThread.StepHandler#getStepDetail()
 		 */
 		protected int getStepDetail() {
 			return DebugEvent.STEP_OVER;
@@ -2325,15 +2374,16 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 	 * Handler for step into requests.
 	 */
 	class StepIntoHandler extends StepHandler {
-		/**
-		 * @see StepHandler#getStepKind()
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jdt.internal.debug.core.model.JDIThread.StepHandler#getStepKind()
 		 */
 		protected int getStepKind() {
 			return StepRequest.STEP_INTO;
 		}	
 		
-		/**
-		 * @see StepHandler#getStepDetail()
+		/* (non-Javadoc)
+		 * @see org.eclipse.jdt.internal.debug.core.model.JDIThread.StepHandler#getStepDetail()
 		 */
 		protected int getStepDetail() {
 			return DebugEvent.STEP_INTO;
@@ -2356,15 +2406,15 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 			return super.locationShouldBeFiltered(location);
 		}
 
-		/**
-		 * @see StepHandler#getStepKind()
+		/* (non-Javadoc)
+		 * @see org.eclipse.jdt.internal.debug.core.model.JDIThread.StepHandler#getStepKind()
 		 */
 		protected int getStepKind() {
 			return StepRequest.STEP_OUT;
 		}	
 		
-		/**
-		 * @see StepHandler#getStepDetail()
+		/* (non-Javadoc)
+		 * @see org.eclipse.jdt.internal.debug.core.model.JDIThread.StepHandler#getStepDetail()
 		 */
 		protected int getStepDetail() {
 			return DebugEvent.STEP_RETURN;
@@ -2429,12 +2479,12 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * another step request is created and this thread
 		 * is resumed.
 		 * 
-		 * @see IJDIEventListener#handleEvent(Event, JDIDebugTarget, boolean)
+		 * @see IJDIEventListener#handleEvent(Event, JDIDebugTarget, boolean, EventSet)
 		 */
 		public boolean handleEvent(Event event, JDIDebugTarget target, boolean suspendVote, EventSet eventSet) {
 			try {
 				int numFrames = getUnderlyingFrameCount();
-				// tos should not be null
+				// top of stack should not be null
 				if (numFrames <= getRemainingFrames()) {
 					stepEnd(eventSet);
 					return false;
@@ -2503,8 +2553,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * to do a return. When the frame count is less than zero, the
 		 * step being performed is a "step return", so a regular invocation
 		 * is performed. 
-		 * 
-		 * @see StepHandler#invokeThread()
+		 * @throws DebugException if an exception occurs 
 		 */
 		protected void invokeThread() throws DebugException {
 			if (getFramesToDrop() < 0) {
@@ -2527,7 +2576,7 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 		 * top frame. Returns false, as this handler will resume this
 		 * thread with a special invocation (<code>doReturn</code>).
 		 * 
-		 * @see IJDIEventListener#handleEvent(Event, JDIDebugTarget, boolean)
+		 * @see IJDIEventListener#handleEvent(Event, JDIDebugTarget, boolean, EventSet)
 		 * @see #invokeThread()
 		 */		
 		public boolean handleEvent(Event event, JDIDebugTarget target, boolean suspendVote, EventSet eventSet) {
@@ -2780,9 +2829,8 @@ public class JDIThread extends JDIDebugElement implements IJavaThread {
 
 	}
 
-
-	/**
-	 * @see org.eclipse.jdt.debug.core.IJavaThread#stop(org.eclipse.jdt.debug.core.IJavaValue)
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.debug.core.IJavaThread#stop(org.eclipse.jdt.debug.core.IJavaObject)
 	 */
 	public void stop(IJavaObject exception) throws DebugException {
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r2_0_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r2_0_buildnotes_jdt-debug.html
deleted file mode 100644
index 806996c..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r2_0_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,1846 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes for the 2.0 release</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July ??, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21099">21099</a>: HCR failed dialog - default control is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18722">18722</a>: Projects re-build when not required<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18792">18792</a>: Minor: caught/uncaught only enabled for single selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20260">20260</a>: TVT2: corrupted characters in java prefs page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20417">20417</a>: ManageBreakpointActionDelegate.selectionChanged causes NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21483">21483</a>: Error from ClassPrepareEvent when debugging WTK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21305">21305</a>: Debug element rendering can be more rebust<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21308">21308</a>: Method.isObsolete() broken for method ID 0 on JDK < 1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20469">20469</a>: Concurrent modification of JDIDebugTarget breakpoint collection<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 24, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20370">20370</a>: NullPointerException getting thread group name.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20789">20789</a>: Method entry breakpoints too slow<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 21, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20745">20745</a>: Broken extension point links for org.eclipse.debug.ui<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 20, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18797">18797</a>: Evaluation that hits breakpoint confuses debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19182">19182</a>: Disconnect debug session crashes WebSphere<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20604">20604</a>: Thread sometimes not updating when suspended<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 19, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20304">20304</a>: Eval: NPE when evaluate a snippet in anonymous type declared in an instance creation instruction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20468">20468</a>: Installed JRE: Source attachment set to non existing location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20049">20049</a>: Typo in method name - updateDefatultJREContainers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20086">20086</a>: Breakpoints not installed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20185">20185</a>: TVT2: NLS in "jdt.debug.ui" plugin xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20260">20260</a>: TVT2: corrupted characters in java prefs page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20415">20415</a>: NPE adding JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20436">20436</a>: Performance problem when method entry breakpoint set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20449">20449</a>: TVT2: Mnemonic of Use default Java executable doesn't work<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 12, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19880">19880</a>: Launcher configuration doesn't show up, NullPointerException in getMemento()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19610">19610</a>: EventRequestManagerImpl.findRequest doesn't handle VMDeathEvent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19740">19740</a>: content assist is now retargetable<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 11, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19412">19412</a>: more than one JRE on classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19604">19604</a>: Changing JRE JARs triggers useless build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18926">18926</a>: unable to add JDK 1.1.8 to Installed JRE's in Preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19723">19723</a>: InputStreamReader doesn't user workspace encoding<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19796">19796</a>: NPE in ConsoleDocumentManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19745">19745</a>: Launch Configuration Bug<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 10, 2002
-<h3>
-What's new in this drop</h3>
-<ul>
-<li>API change on IVMConnector.<br>See <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19569">19569</a>: Auxiliary processes started by IVMConnector cannot be registered<br></li>
-</ul>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18998">18998</a>: Stack overflow with cyclic projects (might belong to JDT/Core)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19314">19314</a>: Edit JRE Container dialog always shows 'Default'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18863">18863</a>: Default source lookup computed incorrectly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18981">18981</a>: Replacing default JDK doesn't trigger rebuild<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19202">19202</a>: JavaLineBreakpoint holds JDIThread pointers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19159">19159</a>: ObjectActionDelegate hierarchy memory leak<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19315">19315</a>: JRE_LIB container on path results in -Xbootclasspath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18536">18536</a>: Eval: NumberFormatException thrown when trying to evaluate negative hexadecimal or octal number<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19570">19570</a>: "Add Jars..." to classpath in launch configuration uses absolute pathnames<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19569">19569</a>: Auxiliary processes started by IVMConnector cannot be registered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19554">19554</a>: Accessibility : cannot add Exception breakpoint from menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19554">19554</a>: StepEventImpl.EVENT_KIND is defined as int<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19705">19705</a>: Manage breakpoint actions enabled for other text editors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19373">19373</a>: Changing connection type on JavaConnectTab does not show arg widgets<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 7, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18100">18100</a>: Internal error in Lauch Configurations dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18650">18650</a>: Scrapbook doesn't launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18998">18998</a>: Stack overflow with cyclic projects (might belong to JDT/Core)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18863">18863</a>: Default source lookup computed incorrectly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18981">18981</a>: Replacing default JDK doesn't trigger rebuild<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19202">19202</a>: JavaLineBreakpoint holds JDIThread pointers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15212">15212</a>: Object shows up when I launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17868">17868</a>: breakpoint inbetween lines<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19074">19074</a>: EvaluationThread holds onto evaluation objects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19157">19157</a>: JavaMethodBreakpoints hold onto debug targets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19159">19159</a>: ObjectActionDelegate hierarchy memory leak <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19315">19315</a>: JRE_LIB container on path results in -Xbootclasspath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19422">19422</a>: NPE out of SnippetEditorActionContributor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19314">19314</a>: Edit JRE Container dialog always shows 'Default'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19373">19373</a>: Changing connection type on JavaConnectTab does not show arg<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17137">17137</a>: Wrong display of String variable value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18652">18652</a>: Snippet editor toolbar actions not visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18856">18856</a>: Lose indication of error in Java Breakpoint Properties dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18931">18931</a>: Context menu of Snippet editor has conflict on 'e'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18935">18935</a>: Add/Remove watchpoint enabled for Snippet Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18940">18940</a>: Setting imports needs to restart the evaluation context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19005">19005</a>: 'java snippet imports' dialog: missing '...' on button label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19175">19175</a>: Remove deprecated methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19329">19329</a>: IVMConnector implementation needs to have access to source p<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19363">19363</a>: Missing wizard banner on library container<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19541">19541</a>: Java debug timeout preference not persisted<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 1, 2002
-<h3>
-What's new in this drop</h3>
-<li>API Change - return values can now be null for the following:
-	<ul>
-	<li>AbstractJavaLaunchConfigurationDelegate#getBootpath(..) - can now return null to 
-	   indicate a default bootpath, or an empty array to indicate an empty bootpath.</li>
-	<li>VMRunnerConfiguration#get/setBootClassPath(..) - can now accept/return null to
-		indicate a default bootpath, or an empty array to indicate an empty bootpath.</li>
-	</ul>
-</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16909">16909</a>: Project selection for source lookup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18448">18448</a>: Default container entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18434">18434</a>: Empty boot path si not the same as default boot path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18482">18482</a>: Move all entries to bootpath fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18485">18485</a>: Reverting to default classpath broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18432">18432</a>: Use step filters menu item enabled for all debug targets.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18044">18044</a>: JavaBreakpointPropertiesDialog should also set foreground<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18174">18174</a>: Quotes in execution arguments of Java launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18395">18395</a>: Suspend on compilation error broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17158">17158</a>: Disabled menu item Add Method Breakpoint in context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17616">17616</a>: Source not shown for "thread" while exiting program<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18512">18512</a>: Snippet evaluation returning wrong result?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18231">18231</a>: ArchiveSourceLocation holds onto open jars too long<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 31, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11947">11947</a>: NPE in JavaUISourceLocator when remote debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18115">18115</a>: IllegalArgumentException: Duplicate VM: 0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17348">17348</a>: Eval : NullPointerException when the source doesn't match the runtime class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17795">17795</a>: ClassCastException when inspecting expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17530">17530</a>: timeout not honored in attach launcher<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18360">18360</a>: Snippet editor open java element actions using deprecated superclass<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17416">17416</a>: Snippet editor leaks actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18378">18378</a>: Leaking image in launch config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18296">18296</a>: Debug Hover Fix<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18319">18319</a>: Elusive Ellipsis<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17753">17753</a>: InternalException removing installed breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18329">18329</a>: deadlock launching eclipse in eclipse<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 30, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17838">17838</a>: Error correction for conditional breakpoint allows enter on empty String<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17321">17321</a>: Problem in Installed JREs preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17065">17065</a>: Sharing JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16080">16080</a>: classpath changes when JRE changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17643">17643</a>: Classpath viewers do not show proper default classpaths<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17690">17690</a>: Add JRE: rt.jar is shown instead of classes.zip for j9 VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9516">9516</a>: add JRE dialog comes up in an error condition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18204">18204</a>: Missing property string for Add Breakpoint in ruler meno<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13381">13381</a>: Better choice for default working dir in Java local config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17194">17194</a>: Classpath > Advanced: Cannot append jar to Variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18188">18188</a>: Inspect is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17434">17434</a>: Add Package on JavaSnippet imports should indicate progress<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15316">15316</a>: Need progress message while remote launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17025">17025</a>: Adding JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16633">16633</a>: Console view doesn't open automatically when running tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17691">17691</a>: DisplayView registers a document listener and nobody removes it<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15823">15823</a>: Register jpage as a text file type with VCM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17081">17081</a>: IncompatibleThreadStateException attempting to pause remote launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16824">16824</a>: Auto generated launch configuration naming scheme differs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17440">17440</a>: Snippet editor allows setting of imports with default package<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16916">16916</a>: Mneumonic collision when attaching source for JRE_LIB<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16917">16917</a>: Mneumonic collision in Classpath tab, Source tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17386">17386</a>: Open on Type in console improvements<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 29, 2002
-<h3>
-What's new in this drop</h3>
-<li>The default working directory for Java Applications is now the associated project folder
- in the local file system.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17865">17865</a>: Wrong "this" context in evaluation & expression view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13349">13349</a>: Add breakpoint action disabled in editor pop-up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17377">17377</a>: Add/Remove breakpoint not enabled correctly if selection change from outliner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17867">17867</a>: VM Disconnected Exceptions in the log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17751">17751</a>: InvalidStackFrameException(s) after a StepOver<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16930">16930</a>: Eval: incompatible thread state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17073">17073</a>: Sharing JRE in buildpath - errors when JRE does not exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17520">17520</a>: Exception logged on cancelling MainMethodFinder for JavaApplicationAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16819">16819</a>: Incorrect error message when main not found for Run/Debug Java<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18019">18019</a>: Missing JDTLaunchActionSet<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17162">17162</a>: ManageBreakpointActionDelegate triggers reconcile on selection change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17043">17043</a>: Mneumonic missing for project selection viewer off of Connection tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18001">18001</a>: Rename "Local Java App" to "Java App"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17890">17890</a>: Should not assume type of PropertyChangeEvent values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15741">15741</a>: NPE in JavaRuntime.detectVMConfiguration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16702">16702</a>: Unhandled NPE in HCR manager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18040">18040</a>: Index out of bounds creating new remote java launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16046">16046</a>: Launch configuration dialog doesn't/can't cancel a launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17132">17132</a>: Advanced dialog on class path config tabs should not be a title area dialog<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 28, 2002
-<h3>
-What's new in this drop</h3>
-<li>The "Java Launch" action set has been removed and integrated into the debug platform's
-new extension point - "org.eclipse.debug.ui.launchShortcuts". The actions are now available
-off of the "Run/Debug As..." cascading menu.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 27, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16340">16340</a>: Fix deprecations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16351">16351</a>: Inspect and Display incorrectly enabled in the display view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16400">16400</a>: Console view doesn't get focus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16547">16547</a>: Use progress dialog in stead of status line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16880">16880</a>: Code assist does not work in expression view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16992">16992</a>: Copyrights in test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17095">17095</a>: ResourceException when closed projects in workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16834">16834</a>: ObjectCollectedException opening java editor in target workbench<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16844">16844</a>: Debugger source lookup dialog needs viewer label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16848">16848</a>: Object collected exceptions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 21, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12740">12740</a>: Wierd behavior when debugging standalone SWT example<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16037">16037</a>: JavaArgumentsTab layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16328">16328</a>: JRE home directory" field on "Add JRE" dialog is too short<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16284">16284</a>: Launch configs prompt for unsaved changes when there are none<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16406">16406</a>: JavaArgumentTab: directory fields should be at the bottom<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16306">16306</a>: ConcurrentModificationException during HotSwap<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12966">12966</a>: Remote debugging with Sun J2ME Wireless Toolkit fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16350">16350</a>: NativeMethodException from line location request<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16408">16408</a>: UnsupportedOperation Exception while hovering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9659">9659</a>: Use book title capitalization in tooltips and button text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16450">16450</a>: Java Model Exception out of ActionDelegateHelper<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15825">15825/a>: orphaned scrabook launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16428">16428</a>: Confusing error when trying to launch when plugin missing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4383">4383</a>: Artwork required<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15251">15251</a>: Support to navigate from JavaDoc error to type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16439">16439</a>: NPE out of ManageMethodBreakpointActionDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16417">16417</a>: JavaLaunchActionSet not contributed to all Java perspectives<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16446">16446</a>: Can't launch programs on Linux with default java executable name<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 19, 2002
-<h3>
-What's new in this drop</h3>
-<li>The actions used to create and launch a Java application have been moved to their
- own action set named "Java Launch". The action set will be visible in new Java or Debug perspectives.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14877">14877</a>: NPE on workbench close<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15881">15881</a>: ClassCastException trying to open launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12966">12966</a>: Remote debugging with Sun J2ME wireless Toolkit fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15913">15913</a>: No space in JavaConnectTab argument group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15740">15740</a>: Get rid of JRE variables on "Installed JRE" page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10838">10838</a>: Java launch config: don't search entire project for a main class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15197">15197</a>: Prompt when > 1 config for selected type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15949">15949</a>: JDIDebugTarget can resume threads which hit a breakpoint early<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15867">15867</a>: JavaConnectTab problems: Mneumonics, NumberFormatException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15976">15976</a>: ATTR_SOURCE_PATH_PROVIDER equals ATTR_CLASSPATH_PROVIDER<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15862">15862</a>: Cannot add internal jar to classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11819">11819</a>: Default JRE and javadoc location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16164">16164</a>: Missing mneumonics on the AddVMDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16151">16151</a>: Move Run actions to the top of the Run menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16150">16150</a>: Create Java Launch Action Set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15739">15739</a>: Show breakpoint condition in hover help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15969">15969</a>: Promote standard classpath/sourcepath providers to API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15699">15699</a>: Non-deterministic layout on "connect tab"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16068">16068</a>: Support to add library to source/class/boot path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16064">16064</a>: Source location persistence should use XML<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16100">16100</a>: Add Java Exception Breakpoint should also be on menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15792">15792</a>: VMDisconnectedExceptions in log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16193">16193</a>: NPE in JavaConnectTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16196">16196</a>: SnippetEditorActionContributor#setActiveEditor can be called with null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15885">15885</a>: Revert button not enabled after changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16218">16218</a>: Asked to save changes when none<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11601">11601</a>: console hangs while displaying long strings without crlf<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16219">16219</a>: re-setting "use default classpath" does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16252">16252</a>: DebugException: Marker id: 19 not found<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16313">16313</a>: NPE out of StandardSourcePathProvider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13524">13524</a>: Console doesn't send Ctrl-Break to remote program<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16346">16346</a>: Can add same container > 1 times to class/source path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16353">16353</a>: "Launch" java applications do not honor build if required<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16257">16257</a>: Debug plugin trying to restart on shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16065">16065</a>: JRE resolution for variables/containers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15200">15200</a>: Notification of JRE changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16237">16237</a>: HCR not supported notification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16027">16027</a>: "Terminate failed" error messages are backwards<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16224">16224</a>: scrapbook displays incorrect result when return type is string<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16358">16358</a>: Advanced actions creating dialogs on the wrong shell<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16192">16192</a>: JDT Launch Configurations dialog Arguments tab Apply disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14082">14082</a>: Launch Configurations -> Environment -> Classpath<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 14, 2002
-<h3>
-What's new in this drop</h3>
-<li>API for IVMConnector has changed. A vm connector now accepts a map of arguments from which to
-establish a remote connection to a VM.</li>
-<li>New extension point and launch configuration attribute to control classpath and
- source lookup path computation. See extension point "org.eclipse.jdt.launching.classpathProviders",
- <code>IJavaLaunchConfiguration.ATTR_CLASSPATH_PROVIDER</code> and 
- <code>IJavaLaunchConfiguration.ATTR_SOURCE_PATH_PROVIDER</code> </li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15522">15522</a>: Rename Debug menu to "Run"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15609">15609</a>: Fix deprecated getSourcePosition() call<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15662">15662</a>: Display of "null" shows nothing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15531">15531</a>: Support "default JRE"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15476">15476</a>: Action for "Add Watchpoint"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15461">15461</a>: Configs created with convenience actions do not switch persp.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11403">11403</a>: Request timeout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15668">15668</a>: Stack frame with no src selects line number in current editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15667">15667</a>: Adding a Jar to the src lookup path of a remote launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15666">15666</a>: Folder added to src lookup of remote launch has JAR icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13453">13453</a>: Mneumonics on launch config Common tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7245">7245</a>: Debugger source lookup should be controlled by launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15469">15469</a>: Unbounded cache in ManageWatchpointActionDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15738">15738</a>: JRE for scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15702">15702</a>: Moving up in the Source tab for remote launch configuration is incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15835">15835</a>: Scrap book does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15481">15481</a>: Abbreviation on the JavaMainTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15622">15622</a>: Need a way to get current tab from configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15605">15605</a>: Contribute the JDT debug action set to all Java perspectives<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15478">15478</a>: Auto-toggling of ShowQualified action in VariablesView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12300">12300</a>: Sharing launch config difficult because of VM_INSTALL_ID<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15581">15581</a>: Move source lookup resolution to AbstractJavaLaunchConfigurationDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15195">15195</a>: Attach source action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14977">14977</a>: Working directory should support project relative path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13567">13567</a>: Change/Enhance "IVMConnector" extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15633">15633</a>: Incorrect enablement for ManageBreakpointActionDelegate hierarchy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15372">15372</a>: NPE launching target eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15678">15678</a>: Drop to Frame not updating UI/stack frames correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10965">10965</a>: Working directory for JavaSnippetEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15445">15445</a>: surprising behavior after hitting 'run'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15601">15601</a>: Exception breakpoints set on inner class exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13028">13028</a>: F3 in Java editor caused NPE in snippet editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15765">15765</a>: Getting working directory changed/restarting evaluation context when there is not context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15846">15846</a>: ManageWatchpointAction doesn't handle configs with no projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11893">11893</a>: Launch configuration dialog Accelerator conflict<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15346">15346</a>: UnsupportedOperationException in JDIThread.computeStackFrames<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10971">10971</a>: Stepping resumes instead<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12561">12561</a>: Exceptions in log: AddBreakpointAction#selectionChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14108">14108</a>: Timing issue with evaluation and thread state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15866">15866</a>: NumberFormatException if timeout number set to big<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 08, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14836">14836</a>: BIDI:Scrapbook editor: bad display of adjacent Hebrew or Arabic syntactic units<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12823">12823</a>: Hard to find JRE for launching java applications<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13074">13074</a>: NPE evaluating fully qualified array declaration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14972">14972</a>: Editor ruler actions do not update properly on working copy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15064">15064</a>: Instanceof evaluation is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13005">13005</a>: "Run to return" should be "Step Return"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13042">13042</a>: NPE after killing Java process<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13632">13632</a>: unknown remote host just throws exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14994">14994</a>: Unsigned right shift of char, byte, or short is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14996">14996</a>: null instanceof Object throws ClassCastException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15154">15154</a>: Shortcut for Add breakpoint conflicts with Build All<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15184">15184</a>: number format exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13584">13584</a>: Attempting to create breakpoints while resource tree locked<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15383">15383</a>: Scrapbook launching failed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14906">14906</a>: Single-click java launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15017">15017</a>: Debug code completion missing "later" proposals<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14997">14997</a>: Evaluations with null on top of stack show no result<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11405">11405</a>: Launch Timeout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15437">15437</a>: ReferenceType#visibleMethods doesn't conform to the spec<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14728">14728</a>: Scrollbars on Launch Configurations/Classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15000">15000</a>: Evaluation instruction resource bundle keys contain the = char<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15009">15009</a>: More information in breakpoint properties dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15361">15361</a>: "Suspend on compilation errors" doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15377">15377</a>: Add: Add Method Breakpoint to the Debug menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15458">15458</a>: Wrong class name format when doing eval of static method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15132">15132</a>: Breakpoints View: Hide Qualified Names option not saved on eclipse shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14895">14895</a>: Toggle button tooltip text should be static<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13297">13297</a>: new launch config: ui problem with tab switching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13984">13984</a>: Stale root tree items in debug perspective view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13448">13448</a>: Difficult to tell what is wrong with launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15016">15016</a>: Main type search could be primed with current text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14753">14753</a>: Reverse order of configuration types in New configuration menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15102">15102</a>: NPE attempting to launch<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 30, 2002
-<h3>
-What's new in this drop</h3>
-<li>Environment variables have been removed from Java launch configurations. A java program
-cannot access system environment variables, thus the ability to set them provides little benefit.</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14410">14410</a>: Java breakpoint properties dialog missing error icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14158">14158</a>: Launcher Configurations modified by UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14324">14324</a>: JDI client does not convert primitive method arguments to the correct type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12748">12748</a>: Snippet editor in debug perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13074">13074</a>: NPE evaluating fully qualified array declaration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14569">14569</a>: Remove Run... and Debug... from the Packages View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14507">14507</a>: J9 launcher doesn't prompt to retry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13674">13674</a>: ClassNotPreparedException from uninitialized inner types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14315">14315</a>: Debugger code completion does not handle array types properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14879">14879</a>: Run to Line enabled for the SnippetEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9690">9690</a>: Need accelerator for "run" in snippet editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9848">9848</a>: JavaSnippetEditor toolbar actions not disabled during evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14882">14882</a>: New launch configs with a project but no main type are not fully initialized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14225">14225</a>: Display view should have Find/Replace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7004">7004</a>: DCR: Deselect All button on step filter preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14718">14718</a>: Display view doesn't inherit java editor's background color<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9653">9653</a>: open type/open exception - should be consistent w.r.t. progress reporting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13427">13427</a>: Unchecked exception in breakpoint condition not indicated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14912">14912</a>: NPE attempting to Run to line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14805">14805</a>: No free return values in expression eval<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14925">14925</a>: Return statements do not stop evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13193">13193</a>: launch configs too easy to delete one<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13418">13418</a>: ClassCastException on terminate of program with conditional breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12700">12700</a>: Method entry breakpoint enabled when neither exit or entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13337">13337</a>: launch configs: creation could be made simpler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13630">13630</a>: Single launching problematic when ambigious on a file type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12937">12937</a>: No evaluation imports for binary types with attached source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14027">14027</a>: Disallow evaluation in the context of an array instance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8251">8251</a>: Present more information when Display fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14958">14958</a>: Internal Error exiting workbench<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15193">15193</a>: Source resolution for alternate runtime JRE<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14266">14266</a>: Scoping exception breakpoint table not scrollable<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 23, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8966">8966</a>: Debug Perspective is not automatically select the servlet thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14273">14273</a>: AbstractJavaLaunchConfigurationDelegate has misspelled method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14069">14069</a>: Rapid stepping & toString<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13525">13525</a>: Error evaluating with no public class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13380">13380</a>: Expression label shows the underpinnings of evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13016">13016</a>: Condition breakpoint evals update expression/var view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13352">13352</a>: Condition ignored/no errors reported<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14104">14104</a>: Eval of local instance var slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12592">12592</a>: Should disable all breakpoints while invoking toString()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13608">13608</a>: Display view code complete does not include templates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14188">14188</a>: Display view doesn't update global actions until context menu used<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1726">1726</a>: Migrate test suite to use workbench framework (1GKDB4Y)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1742">1742</a>: Moving scrapbook page to other project does not update available packages (1GKZ2FO)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12636">12636</a>: Unable to get evaluation context for Scrapbook pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14296">14296</a>: Static and Final actions in popup menu have greyed out icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14250">14250</a>: use workbench element list selection dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14295">14295</a>: Scrapbook pages get confused when more than one started..stopped<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14326">14326</a>: Error in RunToLineAction.init<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12708">12708</a>: NPE in Add Watchpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14045">14045</a>: Deadlock exiting workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10444">10444</a>: Reuse the same editor in Debug Perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14254">14254</a>: NPE while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13377">13377</a>: Reporting errors in snippet interpretation in the log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13389">13389</a>: Condition breakpoint with no condition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13292">13292</a>: SAXParseException in launch config edit (empty .launch file)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8111">8111</a>: IncompatibleThreadStateException displayed in Detail pane when thread manually suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14107">14107</a>: Second target incorrectly breaks on conditional<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14025">14025</a>: NPE on evaluation of array.length<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11934">11934</a>: exception found in the log<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 18, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8362">8362</a>: Usability: Add exception computes hierarchy on each key stroke<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13792">13792</a>: Performance improvement when changing JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13720">13720</a>: Breakpoint ruler actions do not work on class files with source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13684">13684</a>: CoreException thrown when no project is specified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5162">5162</a>: 1.0 -- JSP breakpoints don't get removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5495">5495</a>: Breakpoint not installed if filename has underscore<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9079">9079</a>: Pattern breakpoints show as unknown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13441">13441</a>: Rename launch config, then save leaves wrong selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12657">12657</a>: see stack trace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13336">13336</a>: Failed remote launch left in incorrect state in UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13866">13866</a>: ClassCastException with instanceof conditional breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9655">9655</a>: open type/open exception - should be consistent w.r.t. empty entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13162">13162</a>: breakpoint properties dialog details<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13920">13920</a>: NPE evaluating in local type in field declaration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13798">13798</a>: Disallow evaluations that require local type signatures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9523">9523</a>: redundant menu entry in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12997">12997</a>: AST eval can use java debug model directly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13414">13414</a>: Tight loop with conditional breakpoint locks up UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13104">13104</a>: AST evaluation engine should reuse evaluation thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13015">13015</a>: stepping to a line with a conditional breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13363">13363</a>: Conditional Breakpoint evaluation failed dialog missing accel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13169">13169</a>: Missing description on Java -> Debug preference pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13883">13883</a>: DebugException found in the log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14060">14060</a>: stepping slow - timer takes 99% of CPU<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 11, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12665">12665</a>: ClassNotLoaded JDI exception during conditional breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13423">13423</a>: HCR failure notifications aren't being sent to the UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13444">13444</a>: Tooltip incorrect for add package import in Java snippet editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13364">13364</a>: No visual indication that a breakpoint has a condition set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13173">13173</a>: No console output in Java Persp.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9861">9861</a>: Double-click does not work for strings in scrapbook page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13388">13388</a>: Exception evaluating method with array type parameter<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 09, 2002
-<h3>
-What's new in this drop</h3>
-<li>Breakpoints can now be configured (enabled, disabled, etc.) from the ruler in java editor</li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12640">12640</a>: Workspace runnable not run correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12350">12350</a>: Class header javadoc in eval ast classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9290">9290</a>: Feature: dynamic pattern breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11514">11514</a>: Feature: support WAS 5.0 JSP debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12383">12383</a>: Relaunch last aborted with cryptic message when JRE moved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12793">12793</a>: Spurious dialog asking to save changes in launch config dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12695">12695</a>: Need to get full set of breakpoints hit from thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1543">1543</a>: folders included in 'choose package' dialog (1GAJD9E)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8265">8265</a>: AssertionFailedException during code completion in JavaSnippetEditor, DisplayView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11569">11569</a>: Method breakpoint cause stop on anonymous and local subtype method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12784">12784</a>: String.startsWith(String) creates bad compilation error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10736">10736</a>: Breakpoint#ensureMarker failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12208">12208</a>: NPE in AST eval<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10758">10758</a>: utilize classpath variable initializers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11603">11603</a>: Can't add method breakpoints to inner types at runtime<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12591">12591</a>: Internal error hovering while native on stack<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12609">12609</a>: Eval with error causes eval timeout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1637">1637</a>: Rollover icon the same as flat icon (1GF64JZ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1681">1681</a>: make Java Debug UI a seperate plugin (1GIGG3X)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9683">9683</a>: Open on Type in console does not work on anon inner types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8322">8322</a>: Detail evaluation timeout overwrites previous value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11382">11382</a>: Null Pointer Exception opening preferences for Java->Installed JRE's<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8804">8804</a>: Should not ask to save when running<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12633">12633</a>: NPE evaluating in static context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11128">11128</a>: Access to a field in a particular super-type through IJavaObject<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3578">3587</a>: DCR: Enable/Disable a breakpoint in vertical ruler of Java Editor (1GFQ6DY)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10921">10921</a>: Turn on J9 JIT<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 2, 2002
-<h3>
-What's new in this drop</h3>
-<li>An extension point that represents different kinds of connections to remote VMs. See org.eclipse.jdt.launching\doc\org_eclipse_jdt_launching_vmConnectors.html</li>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12389">12389</a>: Error message at double-click on empty console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1546">1546</a>: Remote Evaluation (AST evaluation)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8157">8157</a>: ProjectBuildWatcher is too invasive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12563">12563</a>: Extensible remote connect type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12448">12448</a>: Overwriting launch configs with same name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12452">12452</a>: NPE evaluating from anonymous innter type referencing enclosing type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12433">12433</a>: NPE code assisting with inner type in expressions view<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9155">9155</a>: Hide Final Fields should be Hide Final Variables<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 28, 2002
-<h3>
-What's new in this drop</h3>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3977">3977</a>: Launching from projects with binary/jars (1GFDBYC)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12209">12209</a>: AST Eval engine API not fully implemented<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12204">12204</a>: Not handling moved JREs properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6615">6615</a>: IOException running test suite<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 26, 2002
-<h3>
-What's new in this drop</h3>
-<li>Scrapbook pages can set imports to provide context for the page</li>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1723">1723</a>: No code assist in display view for binaries with source (1GLE0F6)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6089">6089</a>: display view code assist cotext should be receiving type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6955">6955</a>: Java launch config should support classpath/bootpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8576">8576</a>: rt.jar shoud not be removed from bootclasspath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11196">11196</a>: Launch config: rt.jar on classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11958">11958</a>: step filtering pref page - shoudl not use compilation unit icon for filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9079">9079</a>: Pattern breakpoints show as <unknown> <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12012">12012</a>: J9 plugin needs to be updated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10281">10281</a>: ClassPrepare events swamping system<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8971">8971</a>: Function keys in custom perspective does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3877">3877</a>: Fields in installed JRE dialogs should not be bordered text<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11937">11937</a>: Switch-to-perspective wdigets on Common Tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11945">11945</a>: Run mode perspective not applicable to debug-only config type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10437">10437</a>: Make use of ListIterator in JavaBreakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1569">1569</a>: Would like to inspect from the context of an inspect result (1GDKNZ7)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3734">3734</a>: Update configs as resources moved/deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11997">11997</a>: IllegalArgumentException in ManageWatchpointAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12182">12182</a>: Can step return logging internal errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12027">12027</a>: Breakpoints requests are not created for interfaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12222">12222</a>: NPE attempting to create Remote Java Application configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1757">1757</a>: HotSpot VM -server argument (1GLCPDH)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11938">11938</a>: NPE in JavaSourceLocator when remote debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12211">12211</a>: copyright statements incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1633">1633</a>: Scrapbook imports<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12250">12250</a>: Duplicate launch configs appear in dialog<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 18, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10130">10130</a>: Launch Configurations "navigation tree" should start expanded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9756">9756</a>: Debug/Run history menu items should be disabled if no history yet<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11297">11297</a>: JavaMethodBreakpoint always stops at entry and exit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7963">7963</a>: Add JRE dialog incorrectly flags correct JRE location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8772">8772</a>: Infinitely looping stack trace in target pgm locks UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10566">10566</a>: Copy value in variables view should work with CTRL-C<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5534">5534</a>: Add failed launches to the history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10919">10919</a>: Scrapbook can't print arrays<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11390">11390</a>: JavaSourceLocator has incorrect class in plugin.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11391">11391</a>: Java launcher verifies the java project before needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10850">10850</a>: more JRE to environment tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11242">11242</a>: annoying prompt for saving a launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11246">11246</a>: Exception during launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10805">10805</a>: NPE in JavaDebugOptionsManager if source name is null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10838">10838</a>: Java launch config: don't search entire project for a main class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11476">11476</a>: Exception scope wording<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11478">11478</a>: Inspect is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11092">11092</a>: Stepping performance revisited<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10595">10595</a>: Debug into non-JavaBuildPath no longer works<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11265">11265</a>: Need replacement source locator API<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9204">9204</a>: NPE in Java Launch Configuration Delegate<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 12, 2002
-<h3>
-What's new in this drop</h3>
-<li>Java Watchpoints can be added from the variables view or the expression view.
- This feature was previously only available from the outliner</li>
-<li>Launch configurations can be edited by selecting the new "Run/Debug Configurations..."
- options from the Run/Debug pulldown menus.
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10839">10839</a>: Java launch config: main type checks are too constraining<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10816">10816</a>: Debugging tries to show itself in resources perspective(?)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10484">10484</a>: Index out of bounds in JavaEnvironmentTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10784">10784</a>: Launch configurations: Edit button enabled when no environment var to edit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10490">10490</a>: Java Main tab invalidates on inner class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9073">9073</a>: Not prompted for build on unsaved resource<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11031">11031</a>: Double save confirmation on launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11034">11034</a>: Launch configurations prompting for save when no changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10991">10991</a>: Launch configurations: double click edit enviroment vars<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10096">10096</a>: Eclipse not aware of launched JVM (JRockit 3.1.3)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11060">11060</a>: JDIFieldVariable.setValue(IValue) fails for static fields<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10894">10894</a>: Unable to get a super field from a IJavaObject object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10956">10956</a>: Default watchpoint settings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7735">7735</a>: Enhancement Request: double-click stack trace to reach source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10811">10811</a>: Deregistered launches not removed by JavaHCRManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10973">10973</a>: Scoping JavaExceptionBreakpoints not working correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11004">11004</a>: Step filters and exception breakpoint filters need better sorting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9501">9501</a>: Hidden watchpoint support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7507">7507</a>: debugger keyboard shortcuts do not work in 20020109<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10640">10640</a>: NPE on empty workspace with launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10894">10894</a>: Unable to get a super field from a IJavaObject object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11163">11163</a>: launcher on linux looks for 'javaw.exe' instead of 'javaw'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11127">11127</a>: Installed JRE page should detect removed JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10771">10771</a>: JDIThread and interrupted during evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10220">10220</a>: Need menu options to edit launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11030">11030</a>: JDIStackFrame data caching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11118">11118</a>: Termination performance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11161">11161</a>: Resource tree locked<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10131">10131</a>: A "Launch Configurations" configuration should be showable on the Run/Debug menu...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11101">11101</a>: NPE on shared launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10896">10896</a>: Java breakpoints must have HANDLE_ID attribute set<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11124">11124</a>: Launch configurations do not hanlde removed JRE<br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10292">10292</a>: Errors terminating debugged process<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10693">10693</a>: vm crash during debugging<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 05, 2002
-<h3>
-What's new in this drop</h3>
-<li>Java launch configurations have been moved from the UI plug-in (org.eclipse.jdt.debug.ui)
- to the "headless" launching plug-in (org.eclipse.jdt.launching). This facilitates headless,
- programmatic launching. This is a breaking API change. As well, pre-existing launch configurations
- are deleted on workbench startup, as they are incompatible with the chages made.</li>
-<li>Java Exception breakpoints can be scoped.  Package, type and limited regular expressions can
-be set as the scope for the breakpoint.  The breakpoint is only "hit" if the exception is generated
-from one of these locations.  Can be set off of the properties dialog for the breakpoint.</li>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9171">9171</a>: NPE attempting JDI test TestAll<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9715">9715</a>: Java Connect tab "browse" button has no ellipsis<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10672">10672</a>: In DebugUIPlugin method call Launch.getLauncher can return null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10671">10671</a>: Need callback by LaunchManager to listeners when a thread terminates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9845">9845</a>: Remove All action activation in ExpressionsView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6741">6741</a>: Disable 'drop to frame' when we know it will fail<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9854">9854</a>: TypeImpl.classNameToSignature fails for float[]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10624">10624</a>: GUI Blooper: "Open on..." in debugger s/b "Open", "Drop To Frame"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1668">1668</a>: Stop on Uncaught exception should be scoped (1GHOUOQ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4937">4937</a>: Display view contents not restored properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10594">10594</a>: EventDispatcher wrappering all dispatches in Workspace runnables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7013">7013</a>: Re-work display/inspect/run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3503">3503</a>: Can't set execution arguments on a type in the outliner (1G43JUN)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9881">9881</a>: java 'debug options' pref page - buttons too small<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5822">5822</a>: Customizable run/debug profiles <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3851">3851</a>: Runnables on build path as .class not detected (1GEX6I0)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1550">1550</a>: DCR: Launcher Binding (1GBPW6T)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10686">10686</a>: Double clicking in vertical ruler to add breakpoint: breakpoint does not show<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8572">8572</a>: Step filtering should filter class loader by default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9896">9896</a>: Wrong warning in Add/Edit JRE dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10147">10147</a>: Moving VMs is not handled well.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10772">10772</a>: Single-click launching generates exception on class with no main method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9678">9678</a>: Unable to enter & save classpath entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10638">10638</a>: Launch configuration wizard not honoring selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10644">10644</a>: NPE pressing apply button on launch configuration with no name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10645">10645</a>: NPE pressing apply button twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10646">10646</a>: Can add empty environment variable for launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10782">10782</a>: Exception applying changes to Launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9241">9241</a>: API - java launch configs whould be headless<br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10641">10641</a>: NPE verifying name in launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10649">10649</a>: Title comment changes setting working directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1585">1585</a>: Java launcher: Don't prompt for element to launch if there's only one (1GE6S2P)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-February 28, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10218">10218</a>: breakpoint change mechanism<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1695">1695</a>: DCR: support process/thread specific breakpoints (1GIYJTQ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10009">10009</a>: Creating image descriptor registry on shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10252">10252</a>: Class StandardVM doubles fields from super class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9778">9778</a>: Console title not updated on launch removal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10417">10417</a>: inspect/display to not work in snippet editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10255">10255</a>: Single click launching should not be the default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10424">10424</a>: NPE in snippet editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9685">9685</a>: jdi isObsolete() called 13 times when clicking on stack frame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10432">10432</a>: Deleting a resource wipes out launch configuration history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9695">9695</a>: Snippet editor fails evaluations on deprecation warnings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9229">9229</a>: Console terminate not enabled in Java perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10437">10437</a>: Make use of ListIterator in JavaBreakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7803">7803</a>: Problems with breakpoints after changing JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10454">10454</a>: Adding JRE through launch configuration dialog does not persist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10154">10154</a>: Breakpoints with thread filter should be labeled as such<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4294">4294</a>: Can't distinguish b/w UIMain's in Debug/Running Man Menus (1GKZDGW)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4296">4296</a>: Can't set Program Arguments from Outline (1GKZDW8)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8096">8096</a>: run java-application always asks for the default launcher<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1528">1528</a>: snippets: can start SWT program twice (1G47CME)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10242">10242</a>: Launch/Debug history contains a number<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-February 26, 2002
-<h3>
-What's new in this drop</h3>
-<li>Launch configurations allow execution directory to be specified</li>
-<li>Launch histories are maintained for both launching styles during the transition.</li>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9493">9493</a>: Cannot launch with configuration fully specified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9830">9830</a>: Launch config arguments inserted prior to class on command line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9475">9475</a>: NPE out of LaunchManagerVisitor creating a launch configuration for callback<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9902">9902</a>: ImageDescriptorRegistry must empty hash map in dispose<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5859">5859</a>: Execution Directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10198">10198</a>: Remove all terminated not enabled after terminating run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10214">10214</a>: Add transitional support for history with both launching styles<br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9846">9846</a>: No source lookup during debbing available in integration build 20020212<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10202">10202</a>: Have to reselect terminated debug target to enable "Remove all Terminated" action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8435">8435</a>: Variables disappear on 1.4rc if showing details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1729">1729</a>: HCR with compilation error (1GKF820)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6916">6916</a>: DCR: allow to set timeout on remote debug connections<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1735">1735</a>: Need breakpoint actions in editor ruler (1GKPU71)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-February 14, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9668">9668</a>: Method breakpoints enabled for source methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9456">9456</a>: AssertionFailedException attempting to draw overlays for breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9618">9618</a>: Terminated targets not updating<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9626">9626</a>: ConcurrentModificationException in JDIDebugTarget#canSuspend()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9649">9649</a>: Can't rebuild all - never returns<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9556">9556</a>: NPE in JavaRuntime.getDefaultVMInstall<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9591">9591</a>: exception in compiler pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9737">9737</a>: Invalid thread access initializing JavaPlugin<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-February 12, 2002
-<h3>
-What's new in this drop</h3>
-<li>The Java debug options preference page is now presented as part of the Java preferences</li>
-<li>Basic icons and there support has been removed</li>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7964">7964</a>: Move Java debug options to Java preference page section<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9124">9124</a>: NPE using launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8683">8683</a>: NPE after suspending VM attempting to step on system thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9122">9122</a>: debugging is extremally slow (20020129 + latest)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8252">8252</a>: Label for inspected expression incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1717">1717</a>: Debug Model & Model Presentation issues (1GK29FE)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8746">8746</a>: Threads showing as suspended when not -- mutlithreaded app<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9316">9316</a>: Invalid thread access<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8337">8337</a>: HotSwap: Two error dialogs redefining class during debug on 1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9111">9111</a>: Invalid thread access running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6370">6370</a>: Breakpoint Properties Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9327">9327</a>: JavaDebugOptionsManager startup loading breakpoints during resource changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6724">6724</a>: Hit Count indication in debug UI confusing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7012">7012</a>: AddBreakpointAction not correctly updated when breakpoint added by other action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8481">8481</a>: Auto-breakpoint on compilation errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9122">9122</a>: debugging is extremally slow (20020129 + latest)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9320">9320</a>: Usability: Disabled breakpoints shouldn't show as installed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9387">9387</a>: AddBreakpointAction generates invalid thread access<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9396">9396</a>: NPE in add breakpoint action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9213">9213</a>: "Persisted" property on breakpoints does not make sense<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8301">8301</a>: Evaluation actions need in the context menus of the details panes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8250">8250</a>: Inspect and Display Actions not enabled correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8993">8993</a>: ObjectCollectedExceptions filling up the log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1587">1587</a>: Need support to set an exception breakpoint from a string (1GE8HQO)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1587">1587</a>: JavaDebugOptionsManager attempting to modify resource in resource change callback<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7973">7973</a>: JRE variables on installed JRE's pref page confusing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6743">6743</a>: Uncaught exception preference should have group title<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7967">7967</a>: Java UI source locator should be API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6297">6297</a>: Autodetected Standard VM JRE entry disappears when running on custom VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9353">9353</a>: <Not responding> stack frame after suspending VM<br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1659">1659</a>: Questions dealing with UI (1GGNR38)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9129">9129</a>: console - open on type does not do anything<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1716">1716</a>: Editor opening during debugging (1GK266A)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1677">1677</a>: Breakpoint hitcount inconsistency (1GI8ZL6)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8458">8458</a>: Need "Inspect" action in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9310">9310</a>: Accellerator Keys not working in Debug Perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8690">8690</a>: Delete key should work in Launch menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9430">9430</a>: Process.getInputStream().ready() never succeeds<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-February 05, 2002
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8666">8666</a>: TimeoutException during terminate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8616">8616</a>: Feature: Suspend all threads option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8634">8634</a>: Exception breakpoints not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7804">7804</a>: Internal VMDisconnected trying to delete event requests after VM is gone<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8953">8953</a>: Editor opens on save if debugger is stopped at breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8013">8013</a>: No failure message when frame dropping failed after HotSwap<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8323">8323</a>: Debugger Source Lookup dialog : minor fixes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6845">6845</a>: Add source code for JDI interfaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8054">8054</a>: HCR failure: many stacks of the same method.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8246">8246</a>: Incorrect spacing in label for DebugTarget when terminated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8844">8844</a>: Suspend policy showing twice for watchpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4048">4048</a>: Mnuemonic problems (1GH3218)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8159">8159</a>: LaunchView toolbar actions not updated on long steps<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8315">8315</a>: Double clicking on installed JRE should allow edit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8920">8920</a>: Out of synch type tracking is slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6411">6411</a>: Auto-detect VM Install when required<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8435">8435</a>: Variables disappear on 1.4rc if showing details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6408">6408</a>: Attempts to set breakpoint on unsaved resource fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8702">8702</a>: Problems using alternate JDI client<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8870">8870</a>: Pluggable JDI client<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1521">1521</a>: StringBuffer representation (1GE3BFA)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9012">9012</a>: StringIndexOutOfBoundsException in OpenOnConsoleTypeAction.parseSelection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9026">9026</a>: Compilation error breakpoints are showing in breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9056">9056</a>: API - suspend on uncaught exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9055">9055</a>: API - step filters should be configurable per target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9079">9079</a>: Pattern breakpoints show as <unknown><br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8803">8803</a>: execution arguments: add current directory setting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8814">8814</a>: Store VM Arguments in repository<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8816">8816</a>: Disappearing variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8830">8830</a>: Step over jumps to 4 frames below<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1702">1702</a>: Leave variables expanded on resume (1GJHLYK)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8914">8914</a>: preference page strings missing in 20020129 + latest<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1748">1748</a>: property sheet and breakpoint not in synch (1GL2Q6E)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1616">1616</a>: Vector evaluation error (1GFJA0T)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1539">1539</a>: Internationalization of integers (1G8U8KN)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8261">8261</a>: Scrapbook dies with JDK1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8728">8728</a>: SDK should only be auto-detected the first time<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-January 29, 2002
-<h3>
-What's new in this drop</h3>
-<li>Method entry and exit breakpoints can be set on binary methods. See 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7859">7859</a>: Feature: method exit breakpoints<br></li>
-<li>A VM can be suspended/resumed.  See <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7860">7860</a>: Feature: support suspend/resume of VM<br></li>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8422">8422</a>: Convenience Constructor for JavaSourceLocator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8086">8086</a>: Debug -> Run results in different bahavior than Ctrl-F11<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7405">7405</a>: User defined step filters should have validity check<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7859">7859</a>: Feature: method exit breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7880">7880</a>: Scrapbook page making IDE super slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8053">8053</a>: Debug view actions do not update after evaluation completes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8457">8457</a>: Stepping in obsolete methods should be disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7606">7606</a>: Launch configuration tests are failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5666">5666</a>: Breakpoints do not work on class with native methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8176">8176</a>: Mnemonic Collision in Console View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8312">8312</a>: Tooltips for step filtering should use title capitalization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8395">8395</a>: Smart drop-to-frame ignores anonymous inner class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8127">8127</a>: Outline View has mnemonic collison<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7860">7860</a>: Feature: support suspend/resume of VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8697">8697</a>: Hit count ignored on breakpoints<br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8189">8189</a>: Each debug launch opens new Debug Perspective<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8364">8364</a>: Breakpoints aren't appearing in BreakpointsView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8144">8144</a>: Loss of connection to 1.4 VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8139">8139</a>: Variables collapse when stepping on 1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7508">7508</a>: Selfhosting problems using JDK 1.4 to run target and host<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8579">8579</a>: Toggling detail pane with JDK 1.4 confuses debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8488">8488</a>: Display/Inspect on Debugger gives "ClassNotFoundException"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8627">8627</a>: method arguments to class in jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8654">8654</a>: Debugger won't show source stopped not in debugged project<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-January 24, 2002
-<h3>
-What's new in this drop</h3>
-	
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8388">8388</a>: NPE from HCR Manager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8055">8055</a>: HCR failure: drop fails in following code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8012">8012</a>: Smart frame dropping is slow, and no busy cursor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8265">8265</a>: AssertionFailedException during code completion in JavaSnippetEditor, DisplayView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8056">8056</a>: Walkback during HCR in host.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8404">8404</a>: HCR does not pop frames with non-fully qualified named parameters<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8154">8154</a>: AddExceptionDialog incorrectly reporting exceptions not subclasses of Throwable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8391">8391</a>: Cannot add exception breakpoint<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-January 23, 2002
-<h3>
-What's new in this drop</h3>
-	
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8157">8157</a>: ProjectBuildWatcher is too invasive<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3847">3847</a>: Runing a program fails with closed project on classpath. (1GEWKFO)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8086">8086</a>: Debug -> Run results in different behavior than Ctrl-F11<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-January 22, 2002
-<h3>
-What's new in this drop</h3>
-<li>Java breakpoint creation has changed to not require the use of Java elements.
-Unfortunately, the resulting changes invalidates breakpoints created previous to this build.
-The out of date breakpoints will be deleted at startup.
-See <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7807">7807</a>: Breakpoint creation API should not use java elements</li>.
-<li>HotSwap enhancement - when performing a hot swap, the debugger only pops frames of methods
- that have been changed.</li> 
-	
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5854">5854</a>: Breakpoint marker deleted without notifying breakpoint object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6862">6862</a>: Adding watchpoint in outlineview can be incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7631">7631</a>: Adding watchpoint from packages view associates with project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7766">7766</a>: Scrapbook output not shown for J9<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6489">6489</a>: Plugin version numbers incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1728">1728</a>: No busy cursor for long operation changing primitive type rendering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1651">1651</a>: (minor) Method entry breakpoints are shown in the javadoc comment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7809">7809</a>: AddExceptionDialog makes illegal access to internal class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1699">1699</a>: Display window enhancement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1713">1713</a>: Icon for "Show type/qualified names" could be clearer (1GJY72V)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5653">5653</a>: DCR: Debugger should catch uncaught exception by default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7002">7002</a>: Suspend on uncaught exception does not expose the type of the exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7862">7862</a>: Feature:hidden breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7807">7807</a>: Breakpoint creation API should not use java elements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7915">7915</a>: breakpoint marker attributes need qualified names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7310">7310</a>: JDI timeout exception in debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6745">6745</a>: Step filtering secondary dialogs (Add Type...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7947">7947</a>: JDIDebugModel still using types for breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6130">6130</a>: Snippet editor/ display view do not immediately take new prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7457">7457</a>: JDK1.4 given a source root of "src"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1718">1718</a>: Concurrent modification in JDI cache (1GK7HTK)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5587">5587</a>: Step Over jumps to caller<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6063">6063</a>: Snippet & Display should catch up with changes of JavaSourceViewerConfiguration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7858">7858</a>: Feature: gets super class for an IJavaClassType<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7651">7651</a>: OpenOnConsoleTypeAction does not work for inner types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7619">7619</a>: Walkback while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6661">6661</a>: InternalException when exiting on jdk 1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7404">7404</a>: Add filter for step filtering broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1689">1689</a>: Debugger selects incorrect stack frame after HCR (1GIQ56J)<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1595">1595</a>: README: Exception while stepping (1GELEBF)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1644">1644</a>: How do I debug code in the scrapbook. (1GF815W)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1538">1538</a>: Watch List - expressions and adding in advance (1G86IIJ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6388">6388</a>: Variables view's static and field buttons are backwards<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6814">6814</a>: Empty error dialog when opening type from console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7737">7737</a>: Changing code while debugging seems to generate an automatic build, however the running code doesn’t change until a re-launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7765">7765</a>: Support skipping over certain classes when debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1544">1544</a>: Unable to terminate thread until... (1GAJOUQ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7516">7516</a>: NPE when attempting to start a remote Java debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4985">4985</a>: Icon for show package names in breakpoints list is backwards<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6549">6549</a>: Missing mnemonics for Launcher properties page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7391">7391</a>: Incompatible thread state running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7898">7898</a>: Divide by zero crashed Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7955">7955</a>: Not all entries of a Hashtable are shown in the inspector/debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7535">7535</a>: IncomptableThreadStateException while stepping<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-January 15, 2002
-<h3>
-What's new in this drop</h3>
-	
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6548">6548</a>: Missing mnemonics in Debug preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7298">7298</a>: Drop to frame is always disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7228">7228</a>: dialog should have yes/no buttons...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6518">6518</a>: Internal error while doing evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7194">7194</a>: Unbound cache in Expression view content provider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6736">6736</a>: stack frame unavailable running code snippet<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5346">5346</a>: Debugger silently fails to prompt for source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1667">1667</a>: Breakpoint not hit when located inside multiline method declaration arguments (1GH0L24)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5538">5538</a>: Smoke 208: Add JRE dialog shows wrong JRE JAR file path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5644">5644</a>: Can set breakpoint in JavaDoc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7385">7385</a>: Breakpoint not hit if on variable declaration with no initial<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7425">7425</a>: Doubleclick a breakpoint in debug perspective results in error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7503">7503</a>: Breakpoint in an InnerClass anonymous inner classes are not hit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6437">6437</a>: Timeout when launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7178">7178</a>: main in inner class doesn't run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1565">1565</a>: HCR silently fails updating the target (1GDEYCU)<br>
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7433">7433</a>: Problems opening workspace with new build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7307">7307</a>: execution args on classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1594">1594</a>: Moving a source file loses breakpoints (1GEN5XZ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7185">7185</a>: Highlighting of line on which the debugger is operating not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5573">5573</a>: ClassNotFoundException running snippet in debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1642">1642</a>: Flooding console with output without new lines (1GLDYBV)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3500">3500</a>: Cannot extend runtime path in the UI (1G3SPC3)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7007">7007</a>: Debugger leaking memory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6526">6526</a>: Inconsistent error message after failed Inspect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1692">1692</a>: Recently launched programs: Contains program arguments (1GIVC5W)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1620">1620</a>: README: Remote Evaluation (1GEUT42)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1679">1679</a>: Breakpoint view should reflect selectd target (1GI94VS)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1650">1650</a>: Run/Debug console display confusing (1GFC0TB)<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-January 9, 2002
-<h3>
-What's new in this drop</h3>
-	
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7133">7133</a>: Illegal references to Breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7203">7203</a>: Display view brought to front when doing Inspect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1660">1660</a>: Do not prompt for source when no source attachment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7201">7201</a>: Console does not show output from scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6437">6437</a>: Timeout when launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1758">1758</a>: Code Review: JDI debug model shutdown (1GLCWH3)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6575">6575</a>: JDIDebugTarget not cleaned up on shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7209">7209</a>: Run to line is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6980">6980</a>: JDK12DebugLauncher and company should be renamed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7342">7342</a>: missing resource string: JavaRuntime.Setting_JRE_classpath_variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7392">7392</a>: JDIThreads show <not responding> at startup <br>
-
-
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6989">6989</a>: Step into resumes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1661">1661</a>: Source attachment wizard for JARs form variable entries (1GI6Q7S)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6581">6581</a>: Hard to enable Finsih button on Attach source dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3868">3868</a>: Investigate problems with source lookup with src & jar (1GEZYGV)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1675">1675</a>: Quiet suspend/resume events (1GI3TLQ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1610">1610</a>: Run-time workbench launchers (1GETD51)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7291">7291</a>: Inspector does not memorize inspected Objects between two debug sessions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6851">6851</a>: Debugger: Clicking too quickly on Step tool disables Step tools<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-December 18, 2001
-<h3>
-What's new in this drop</h3>
-	
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1665">1665</a>: Drop to frame hangs if after invoke (1GH3XDA)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6817">6817</a>: J9 Launching doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6759">6759</a>: Turning filters on/off makes Eclipse unresponsive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6326">6326</a>: JDI: VirtualMachine.classesByName() fails for arrays<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6834">6834</a>: ClassCastExeption running Eclipse on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6501">6501</a>: src.jar not found 1.4 by default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1532">1532</a>: UI - Right click "Run" button (1G5T0T)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1613">1613</a>: Debugger VM launching error never displayed (1GETDGZ)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5686">5686</a>: Launch/Run actions should be available on menubar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6911">6911</a>: Terminate and remove does not notify JDIDebugTarget<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1708">1708</a>: Consistency in the presentation of the Display, Run, Inspect (1GJUH54)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3940">3940</a>: Keep getting Locate Source dialog (1GF6BU2)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6446">6446</a>: RunToLine needs shortcut<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6524">6524</a>: BadLocationException restoring DisplayView contents<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1741">1741</a>: Scrapbook actions missing from context menu (1GKZ2C1)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6815">6815</a>: Double clicking a line in the console should do an open type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6471">6471</a>: Console OpenType + Go to Line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6990">6990</a>: Display action linked to editor when focus in Display view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6991">6991</a>: Hot keys do not work for inspect/display in scrapbook <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1580">1580</a>: Run in Package dialog should select the current context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5387">5387</a>: Can add the same exception breakpoint multiple times<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7019">7019</a>: Non-public classes appear to confuse debugger source lookup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7067">7067</a>: native method exception retrieving source name <br><h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1566">1566</a>: run action missing from package view and outliner (1GDF2VH)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1598">1598</a>: Usability: Must select correct element to launch (1GEMBEL)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1634">1634</a>: First launch offers choice of 1 launcher (1GF5XKA)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3586">3586</a>: SH: Launch/Debug list with runnables not complete and bad to use (1GBADLN)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3625">3625</a>: user.dir not set as expected (1GDEZG9)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6529">6529</a>: exception when no built state in the scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6975">6975</a>: Be able to execute methods on any inspected variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6952">6952</a>: Smart frame dropping after HCR <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7024">7024</a>: Launchers are using JDK 1.3 API<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-December 11, 2001
-<h3>
-What's new in this drop</h3>
-	
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6576">6576</a>: Efficiency - use computeStackFrames internally<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6613">6613</a>: Drop frame above native frame does not work on 1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6746">6746</a>: Class cast exception during hotswap<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6640">6640</a>: Method ID of 0 is valid JDWP<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6738">6738</a>: Fatal error in JDWP<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5556">5556</a>: Walkback when workspace opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6737">6737</a>: JDIDebugTarget still registered with JavaHCR manager after terminate and remove <br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5569">5569</a>: Stepping out of Object.wait()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1750">1750</a>: IDE almost froze placing a breakpoint while running Eclipse in Eclipse (1GL4FRG)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6744">6744</a>: IOException/Disconnect while launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6112">6112</a>: Run in package ignored<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-December 6, 2001
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1628">1628</a>: README: packages appear when doing eval (1GEYFPN)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6389">6389</a>: System threads show suspended at startup <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1567">1567</a>: Full build caused hot code replace failure (1GDH1CH)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5941">5941</a>: hot swap fails when native method on stack<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6187">6187</a>: Hot swap in main causes Eclipse to crash<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1558">1558</a>: Feature: CRC's and in synch (1GD0ANF)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1753">1753</a>: NPE in LocalEvaluationEngine <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6434">6434</a>: Scrapbook does not work with JDK1.4 <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6530">6530</a>: Rapid successive evaluation causes trouble <br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5290">5290</a>: Source does not show up on debug<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-December 4, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-<li> The debugger suspends execution when an uncaught exception is thrown.
-	Can be configured using the Java Debug Options preference page.
-	@see  <A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5653">5653</A> for
-	details and on step filtering settings migration.
-<li> Stack frames, threads, and debug targets will now display when code in
-	the VM is out of synch with the code in the workspace. This can occur
-	when a hot code replace fails or when a hot code replace succeeds but the
-	VM is unable to pop old stack frames from the call stack.
-	@see  <A HREF="http://bugs/eclipse/org/bugs/show_bug.cgi?id=1558">1558</A> for
-	details.
-<li> Stepping performance improvement. By increasing the amount of data cached in
-	our stack frame model, stepping is now dramatically faster in many cases.
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6447">6447</a>: Inner class breakpoints not hit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6209">6209</a>: Step filtering should be off by default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5225">5225</a>: 1.0 -- Casting problem in RunToLineAction class <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6109">6109</a>: NPE stopping Timer <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3881">3881</a>: minor: menu order inconsistency (1GF24TF) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6393">6393</a>: No stack frames shown after breakpoint hit <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1635">1635</a>: README: Attach launching not working with debug element selection (1GF5ZQC) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6510">6510</a>: NPE changing Java Debug Options with active debug target <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6248">6248</a>: Insufficient error reporting in JavaApplicationLauncher <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1738">1738</a>: Can't set scrapbook package to package in prereq project (1GKZ25D) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5901">5901</a>: Variables not showing up  until read<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1738">1738</a>: Can't set scrapbook package to package in prereq project (1GKZ25D)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1766">1766</a>: Text too low in change variable value text box (1GLE8CB) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6321">6321</a>: Console IOException <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6508">6508</a>: Stepping is slow <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6519">6519</a>: Evaluation failed message for deprecated method <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6523">6523</a>: NPE changing suspend on exception pref with terminated targets <br>
-<h3>
-Problem Reports Closed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1639">1639</a>: Run-in package can't be deleted (1GF7RQY) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1519">1519</a>: README: Hit count not reset (1GET20Y)  <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1539">1539</a>: README: VMDisconnected terminating scrapbook launch (1GEHZG7) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1657">1657</a>: Snippet Evaluation - internal failure when trying to run a scrapbook page (1GGN8Q9) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6291">6291</a>: Remote debug does not connect <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1608">1608</a>: README: Cannot connect to VM - time out (1GEUNH3) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1615">1615</a>: Launching on J9 lets pop up a dos console (1GEUOEI) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6166">6166</a>: NPE relaunching a java application <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6228">6228</a>: Runtime error running in debug mode (integration build 20011120) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5835">5835</a>: code assist crash in scrapbook <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5585">5585</a>: Error stepping in a thread with no stack frames.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5861">5861</a>: NPE before hitting a breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5882">5882</a>: Thread suspend automatically before hitting a breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1712">1712</a>: Disconnect does not work on attach launch using SUN JDK1.2.2 (1GJYJ1E) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6405">6405</a>: Strange suspend on ThreadDeath using SUN JDK 1.3 <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1618">1618</a>: README: debug does not see source changes (1GEUN5G) <br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6511">6511</a>: Launch history items are showing <terminated> <br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-November 27, 2001
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1746">1746</A>: Debug target not expanded on hit breakpoint (1GLE3U8)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6192">6192</A>: Missing debug icons<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6084">6084</A>: NPE from force loading Java Breakpoints<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5567">5567</A>: Variable doesn't showup in Variables View although line is e<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3640">3640</A>: Associating source with a JAR at the last possible moment (1<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5510">5510</A>: Cannot evaluate in scrapbook - unable to create eval context<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6120">6120</A>: Run/Debug should support working directory<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1673">1673</A>: Layout from the launcher (1GHVZED)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6128">6128</A>: HelloWorld does not print "hello world"<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6156">6156</A>: NPE in LocalEvaluationEngine deploy action<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6161">6161</A>: NoClassDefFoundError running a scrapbook snippet<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6256">6256</A>: NPE when selecting process in process view<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6023">6023</A>: IOException writing after proxy closed<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-November 20, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-<li>Hot Swap support for 1.4 compliant VM's</li>
-<li>New plug-in (org.eclipse.jdt.debug.ui). First cut at "extracting" the Java debug UI from the
-Java tooling UI.</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5715">5715</A>: Problems using scrapbook<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5791">5791</A>: NPE in SocketUtil<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5623">5623</A>: JDK 1.4 hot swap<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5612">5612</A>: Evaluation is performed in wrong "receiver" context<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5640">5640</A>: NPE launching when Java build path refs a missing project<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1753">1753</A>: Scrapbook: NoClassDefFoundError (1GLE11G)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5621">5621</A>: JavaHotCodeReplaceManager added early as resource change lis<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1643">1643</A>: README: Scrapbook does not clean up its temp files. (1GF808S<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5863">5863</A>: JDI exception handling<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5871">5871</A>: VMDisconnectedException notification on resume<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5792">5792</A>: Internal JDI error<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5963">5963</A>: UnsupportedOperationException from "fast" running program<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1615">1615</A>: Launching on J9 lets pop up a dos console (1GEUOEI)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3468">3468</A>: Smoke 114: Strange alert when running in Display (1GEI115)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3884">3884</A>: menus inconsistent: console and display (1GF252F)<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5113">5113</A>: NPE in Java Model Presentation<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5902">5902</A>: com.sun.jdi.InternalException removing breakpoint request on<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5883">5883</A>: No notification of an uncaught exception when stepping<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5594">5594</A>: DCR: Can't evaluate expressions in class files<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5945">5945</A>: NPE during debugging<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5164">5164</A>: J9: Console Windows popping up<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5984">5984</A>: UnsupportedOperationException resuming thread<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5928">5928</A>: Debugger fails if Java Build Path contains a phantom resourc<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-November 13, 2001
-<h3>
-What's new in this drop</h3>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5139">5139</A>: Remove SnippetSupportBreakpoint<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5816">5816</A>: Resource tree locked error on hot swap<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5367">5367</A>: Meaningless brackets presented with primitive display option<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5115">5115</A>: Workspace source locator fails with mulitple package fragmen<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3751">3751</A>: No hover help on Display view (1GELOEK)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3883">3883</A>: error dialog in display is too scary (1GF24YQ)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1646">1646</A>: Feature: Resolution failure notification (1GF9OG5)<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3623">3623</A>: Enable Display, Run and Inspect Actions in Workbench toolbar<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3468">3468</A>: Smoke 114: Strange alert when running in Display (1GEI115)<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5589">5589</A>: InvalidStackFrameException updating variables<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5787">5787</A>: launching with j9 fails<br>
-<A HREF="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5717">5787</A>: Breakpoint not hit in local class<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-November 12, 2001
-<h3>
-What's new in this drop</h3>
-<ul>
-<li>toString() support for arrays</li>
-<li>Support for hot swap and drop to frame on 1.4 compliant VMs</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5257">5257</A>: Set breakpoint takes very long<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=4926">4926</A>: Exception on doubleclicking breakpoint<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5627">5627</A>: NPE setting detail pane orientation<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5630">5630</A>: Drop to frame does not re-select top stack frame<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5631">5631</A>: Breakpoint not reinstalled after hot swap<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5415">5415</A>: Plugin Name in Plugin Registery is wrong<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=1743">1743</A>: Scrapbook should have accelerator for Display (1GKZ3BT)<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5591">5591</A>: Debug perspective missing view shortcuts<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5625">5625</A>: Missing accelerators on detail pane orientation of pref page<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=1646">1646</A>: Feature: Resolution failure notification (1GF9OG5)<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5579">5579</A>: Would like option to switch to Debug perspective on breakpoi<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5460">5460</A>: Internal error when VM argument -mx: is too low<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=4282">4282</A>: IllegalArgumentEx from HoverControler (1GKYY59)<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=1741">1741</A>: Scrapbook actions missing from context menu (1GKZ2C1)<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5671">5671</A>: Pop to frame goes one too far<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5630">5630</A>: Drop to frame does not re-select top stack frame<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5631">5631</A>: Breakpoint not reinstalled after hot swap<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=1741">1741</A>: Scrapbook actions missing from context menu (1GKZ2C1)<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5671">5671</A>: Pop to frame goes one too far<br>
-
-<h3>
-Problem Reports Closed</h3>
-
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5494">5494</A>: Debug/Run "latest" Menus Confusing<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5576">5576</A>: Usability: Cannot disable breakpoint from context menu<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5505">5505</A>: Can't Remote Connect MicroAnalyzer from Java Perspective<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5553">5553</A>: Can't Remote Debug on QNX ARM Target<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5590">5590</A>: Step return fails on J9<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5596">5596</A>: Option to make F10 to save and compile<br>
-<A HREF="http://dev.eclipse.org/bugs/show_bug.cgi?id=5787">5787</A>: launching with j9 fails<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Eclipse SDK Build 0.208 5th November 2001
-<h3>
-What's new in this drop</h3>
-
-<ul>
-<li>
-Support for 'toString()' in variables view. Depress the "Show Detail" button
-in the variable view toolbar. 'toString' for arrays is not yet supported
-(but is coming shortly). The vertical/horizontal split is controlled by
-a 'Debug' preference.</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5115">5115</a>: Workspace
-source locator fails with mulitple package fragmen
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5360">5360</a>:
-ListenerList#removeAll
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5467">5467</a>:
-Bad import in LocalEvaluationEngine
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5257">5257</a>:
-Set breakpoint takes very long
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5415">5415</a>:
-Plugin Name in Plugin Registery is wrong
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1663">1663</a>:
-Missing toString() feature makes debugging painful (1GH3W9P)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5421">5421</a>:
-Detail area does not update while stepping
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5474">5474</a>:
-should not use tool tips for labels
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4945">4945</a>:
-Promote #getBreakpoint from IJavaThread to IThread
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5460">5460</a>:
-Internal error when VM argument -mx: is too low
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5422">5422</a>:
-Allow detail area to split vertical or horizontal
-<h3>
-Problem Reports Closed</h3>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5437">5437</a>: Variable
-not showing in Variables view even when assigned a
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Eclipse SDK Build 0.207 1st November 2001
-<h3>
-What's new in this drop</h3>
-
-<ul>
-<li>
-API Change - IDebugConstants have been migrated to DebugPlugin and IBreakpoint.</li>
-
-<li>
-API Change - IDebugStatusConstants have been migrated to DebugException.</li>
-
-<li>
-API Change - IVariableModification has two new methods - setValue(IValue),
-and verifyValue(IValue).</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5349">5349</a>:
-ClassCastExceptions caused by BreakpointManager
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5129">5129</a>:
-Copy is disabled in the console
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5114">5114</a>:
-Add exception dialog ignores caught/uncaught selection
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1737">1737</a>:
-Feature: filter static initializers (1GKQHTT)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5307">5307</a>:
-TVT: Hardcoded category name in Debug (org.eclipse.debug.ui\
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5340">5340</a>:
-Cancelling add exception breakpoint has no effect
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4954">4954</a>:
-Evaluation does not update variable view
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1648">1648</a>:
-Inspect, Display, and Run to line, are enabled in all editor
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1603">1603</a>:
-Evaluate actions of the Display view evaluate on empty selec
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4953">4953</a>:
-Double click does not change value in inspector
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1763">1763</a>:
-Add Filter button disable until something to add (1GLE2J4)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1704">1704</a>:
-Investigate option to step filter synthetic methods (1GJOTQZ
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5281">5281</a>:
-Step into resumes instead
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5367">5367</a>:
-Meaningless brackets presented with primitive display option
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5115">5115</a>:
-Workspace source locator fails with mulitple package fragmen
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1699">1699</a>:
-Display window enhancement (1GJ6GR9)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5161">5161</a>:
-More info in Console open on type dialog
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1743">1743</a>:
-Scrapbook should have accelerator for Display (1GKZ3BT)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3623">3623</a>:
-Enable Display, Run and Inspect Actions in Workbench toolbar
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1628">1628</a>:
-README: packages appear when doing eval (1GEYFPN)
-<h3>
-Problem Reports Closed</h3>
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5286">5286</a>:
-Walkback relaunching a program
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5310">5310</a>:
-"Copy" is disabled in Console
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5316">5316</a>:
-Cannot copy from console
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1554">1554</a>:
-Method entry breakpoints on source methods (1GC2U31)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5401">5401</a>:
-Would like to copy contents of debug console
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Eclipse SDK Build 0.206 25th October 2001
-<h3>
-What's new in this drop</h3>
-
-
-<ul>
-<li>
-API Change (method addition). IDebugModelPresentation now supports value
-"details". @see org.eclipse.debug.ui.IDebugModelPresentation#getDetail(IValue).</li>
-
-<li>
-API Change - ISnippetSupportBreakpoint has been removed. This does not
-break any clients. A "run-to-line" breakpoint is now used in place of a
-snippet support breakpoint.</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3544">3544</a>:
-Launch selection dialog has too many entries (1G5XYYS)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1759">1759</a>:
-Widget is disposed error on breakpoint properties (1GLE3NA)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1756">1756</a>:
-Breakpoints installed in all classes with "name*" (1GLCLBW)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4576">4576</a>:
-Thread suspend/resume errors in classes with the "same" name
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1769">1769</a>:
-Hit count watchpoints not always re-enabled (1GLE911)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5142">5142</a>:
-Internal Error on relaunch
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5144">5144</a>:
-Error when opening display view
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1531">1531</a>:
-Feature: navigate from console output to resource (1G81S73)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1518">1518</a>:
-Icons needed for actions (1GI5UXW)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5113">5113</a>:
-NPE in Java Model Presentation
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5114">5114</a>:
-Add exception dialog ignores caught/uncaught selection
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5139">5139</a>:
-Remove SnippetSupportBreakpoint
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1648">1648</a>:
-Inspect, Display, and Run to line, are enabled in all editor
-<h3>
-Problem Reports Closed</h3>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5083">5083</a>: Breakpoint
-not hit
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5234">5234</a>:
-Debugger doesn't stop on breakpoint
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Eclipse SDK Build 0.205  18th October 2001
-<h3>
-What's new in this drop</h3>
-
-<ul>
-<li>
-Support for "open on type" from a selection in the console.</li>
-</ul>
-
-<h3>
-Problem Reports Fixed</h3>
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3452">3452</a>:
-NPE doing Display from Binary (1GLEG5K)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1751">1751</a>:
-Console misses style range for quick output (1GL4R1L)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1584">1584</a>:
-Renaming Scrapbook page does not remove associated VM (1GE5T
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1700">1700</a>:
-JSP Support for 2.0 (1GJ8LK3)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4951">4951</a>:
-Breakpoints remain installed after target terminates
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4952">4952</a>:
-Multiple breakpoints on the same line
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4955">4955</a>:
-Hit count breakpoint does not re-enable
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1747">1747</a>:
-Ctrl-S does not work in the SnippetEditor (1GL1GH8)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1655">1655</a>:
-BUG - Timing out on toString; total redraw of debug view (1G
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1601">1601</a>:
-Displaying a variable appends to same line (1GENIVH)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1578">1578</a>:
-README: breakpoints in class with same name (1GDXNGO)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1731">1731</a>:
-jdt.debug missing plugin.properties file (1GKEYT0)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1730">1730</a>:
-debug.core missing plugin.properties file (1GKEYJY)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1707">1707</a>:
-Backspacing inserted error message does not fire selection c
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1638">1638</a>:
-The case for IBreakpoints (1GI3JYO)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1537">1537</a>:
-classFilePattern breakpoint attribute optimization (1GHE13E)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1640">1640</a>:
-USABILITY - Inspect and Display reset selection (1GF6CH0)
-<br> 
-<h3>
-Problem Reports Closed</h3>
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1672">1672</a>:
-Cannot evaluate classes in a sealed jar (1GHU6YK)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1678">1678</a>:
-Efficient handling of step event (1GI92KD)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1645">1645</a>:
-NPE on shutdown (1GF87PO)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1711">1711</a>:
-2 inner class breakpoints lead to weird state (1GJUZ1Y)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1672">1672</a>:
-Cannot evaluate classes in a sealed jar (1GHU6YK)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1641">1641</a>:
-README: inspected fields not updated when stepping (1GF7R4X)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1626">1626</a>:
-Outline is useless in debugger (1GEWBVR)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1600">1600</a>:
-Bug icon for program suggests program is buggy (1GENCVC)
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1590">1590</a>:
-README: breakpoints on method decl cause break on exit (1GE8
-<br><a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1573">1573</a>:
-Presentation should also be content provider (1GDTUJH)
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r2_1_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r2_1_buildnotes_jdt-debug.html
deleted file mode 100644
index 49379ce..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r2_1_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,806 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 24, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35525">35525</a>: Unable to step when suspended at breakpoint during evaluation<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 19, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35056">35056</a>: [eval] DetailFormatter failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34593">34593</a>: Possible bug regarding workspace path and Applet Viewer<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 18, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35000">35000</a>: Exception written to console (not log)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34075">34075</a>: Classpath variables disappear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35231">35231</a>: Launching messages cleanup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35209">35209</a>: Breakpoint installed notification sent every time breakpoint attribute changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34856">34856</a>: Breakpoints set in enclosing class from inner class editor fail<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34735">34735</a>: Missing F1 help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35182">35182</a>: Class cast exception opening type hierarchy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34667">34667</a>: Content assist inside conditions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 17, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35035">35035</a>: Migrate actions to command extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30139">30139</a>: Unable to launch with -Xbootclasspath/p:<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34371">34371</a>: NPE attempting to create watch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34919">34919</a>: Setting classpath container initializer should be batched<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34874">34874</a>: Context menu on IJavaVariable, IJavaInspectExpression and IJavaWatchExpression<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 13, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34518">34518</a>: Java Applet: doesn't use the specified java executable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34375">34375</a>: NPE adding detail formatter to variable with null value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34816">34816</a>: Eval: Error with postif/prefix ++/-- on byte, char, short<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34190">34190</a>: Evaluation: no stacktrace upon exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34698">34698</a>: Title casing issues<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34774">34774</a>: [wording]Add JRE lib wizard - final page confusion over "Add"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34091">34091</a>: NPE in SourceNotFoundEditorInput<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 12, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34138">34138</a>: Invalid thread access during JDT Debug UI plugin startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34090">34090</a>: Java debug action group missing var view actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34860">34860</a>: JRE container performance problem<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 6, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33712">33712</a>: "The resource tree is locked for modifications" from JavaDebugOptionsManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32174">32174</a>: NPE evaluating in SWT class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27837">27837</a>: Detail formatters don't work in the scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33746">33746</a>: Error on adding a new JRE in Windows=>Preferences=>Java=>Installed JREs settings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32842">32842</a>: Java Line Breakpoint - instance restriction problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33297">33297</a>: Unneccessary error logging from detail formatter manager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33830">33830</a>: Preferences: Installed JRE Preference page needs a table header<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32347">32347</a>: bookmarks in every kind of editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33350">33350</a>: Error message when launching applet with invalid project not very helpful<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33893">33893</a>: Preference import can import non-existant JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33113">33113</a>: Evaluating 'for' loop suspends in URLClassLoader<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30837">30837</a>: Loss of suspended at breakpoint information<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33612">33612</a>: NPE resolving runtime classpath entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33644">33644</a>: Unable to add libraries to Java build path in Project preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33988">33988</a>: API change in JCORE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31585">31585</a>: Suspending implicit eval does not update frames when done<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34044">34044</a>: NPE in snippet editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33127">33127</a>: No message to user when trying to perform nested evaluation<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 4, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27874">27874</a>: wrong suspended status when attaching late to vm<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32838">32838</a>: Hotswap does not work in inner types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33112">33112</a>: Duplicate mneumonics on Scrapbook Runtime page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32724">32724</a>: Changed fields not colored<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30758">30758</a>: Error resuming debug session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33551">33551</a>: Step into selection does not work in default package<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32720">32720</a>: Launch Configuration "Classpath" tab doesn't let you "apply" when the checkbox is changed the first time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32678">32678</a>: Opening breakpoint properties resets hit count<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33478">33478</a>: Monitors view toggles do not work properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32679">32679</a>: Breakpoint shows as "thread filtered" after thread/target terminates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33491">33491</a>: Show type names not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32823">32823</a>: Stepping into already executed method brings up unknown source editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32829">32829</a>: Lower text field on Detail Formatters pref page needs label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32494">32494</a>: Insp/Display actions in Run menu not enabled for scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33292">33292</a>: Show Source of selected element and Java Snippet Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33304">33304</a>: Snippet editor toolbar actions not grouped properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33145">33145</a>: Strange hover message on breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32778">32778</a>: ConcurrentModificationException when resuming a suspended VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33144">33144</a>: UnsupportedOperationException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33333">33333</a>: Advanced Option dialog truncates drop-down list choices<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33646">33646</a>: Exception after removing JDK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32841">32841</a>: ClassCastException updating breakpoint request<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32770">32770</a>: Java application launch shortcut error doesn't help user<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33033">33033</a>: Unable to type in details area in expression view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33248">33248</a>: Problems attaching sources during debug session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33276">33276</a>: Internal errors found in .log file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33275">33275</a>: Scoped exception breakpoint & wild card patterns<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24863">24863</a>: F1 Help on Detail Formatters pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32826">32826</a>: Double click to edit detail formatters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33921">33921</a>: evaluation while at breakpoint in snippet editor<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 27, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32633">32633</a>: Debug Launch configuration does not expand classpath variables properly<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 20, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31886">31886</a>: NPE in JDIDebugTarget.resume in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31716">31716</a>: Java variable filtering dialog is difficult to understand<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31558">31558</a>: Watch action missing its icon in perspective customization dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31907">31907</a>: Java variable Settings needs another row<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32169">32169</a>: Toggle of "duplicate source files" does not enabled "apply"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32171">32171</a>: prompt for duplicate source elements when none<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32163">32163</a>: Source not found dialog too large<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32244">32244</a>: Revert sets JavaSourceLookupTab contents to the JavaClasspathTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31888">31888</a>: conflict between compilation error and uncaught exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32152">32152</a>: error in schema for classpathProviders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26716">26716</a>: JDI IOExceptions do not report runtime class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32291">32291</a>: NPE in log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30028">30028</a>: Java snippet navigate actions do not work with keybindings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32325">32325</a>: Step into selection requires to select the full symbol name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32382">32382</a>: 2.1 API adjustment in JCORE<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 18, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31637">31637</a>: should be able to cast "null"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30717">30717</a>: Can add the same external folder twice to the classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27332">27332</a>: details does not always update for watch expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28946">28946</a>: Expressions pane ceases to display expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31266">31266</a>: inspect, watch, display or run to line disabled (or not in popup menu)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29587">29587</a>: Concurrent modification in JDIThread.findVariable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31110">31110</a>: Debbugger Source Lookup does not work with variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29753">29753</a>: Eclipse keeps a lock on jar files even after a launch configuration is finished.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32048">32048</a>: org.eclipse.jdt.launching.classpathProviders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26697">26697</a>: Threads & Monitors View - show message when not supported<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27622">27622</a>: VirtualMachine.resume() doesn't conform to spec<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31882">31882</a>: use POST_AUTO_BUILD listener for breakpoint update<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 13, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31670">31670</a>: Evaluation failed - Thread not suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28406">28406</a>: Stepping over a conditional breakpoint resumes program<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31181">31181</a>: Variable view not (always) updated when the debug view is hidden<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31640">31640</a>: The debugger will sometimes not highlight current line in M5<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31573">31573</a>: Watch expression update problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31007">31007</a>: Use quick fix when no default JRE detected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31465">31465</a>: Stack frame update error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31464">31464</a>: After rapid step details not updated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31733">31733</a>: Fix deprecation in ClasspathContainerInitializer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27836">27836</a>: Too many threads and asyncExec to execute computeDetail()<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 11, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31057">31057</a>: [patch] remove deprecated syntax<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30922">30922</a>: Remove hack to avoid stack overflow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=31361">31361</a>: NPE clearing a console which contains a GB18030 character<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29175">29175</a>: M4 Arguments Text Box in Run/Debug maxs CPU typing is slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24761">24761</a>: Need Applet launcher icons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30264">30264</a>: Hover Description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30305">30305</a>: Add Breakpoint Dialog cut off with High Contrast<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 6, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30965">30965</a>: Editor opened by debug without annotation bar<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 5, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30019">30019</a>: Can't debug on Motif<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27391">27391</a>: Cannot paste when changing value of String variable.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21823">21823</a>: use java debug model adapters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24422">24422</a>: org.eclipse.jdt.core.dom.Message in the evalution engine<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26127">26127</a>: problem with snippet when java model presentation not loaded<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29651">29651</a>: allow source attachment changes on classpath container entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30448">30448</a>: Source lookup tab makes dialog unreasonably large.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24605">24605</a>: Debug tool flicker in toolbar with conditional breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27626">27626</a>: Should be able to specify filters on a per view basis<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30755">30755</a>: Remove appearance pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25341">25341</a>: infopops not available from Launch Configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23268">23268</a>: Finding source when there are is more than one class with the same name.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29545">29545</a>: auto-discover source root paths<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30498">30498</a>: Type in error dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29683">29683</a>: Re-naming a VM causes prompt for JRE resolution<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29498">29498</a>: Address accessibility issues in variable filters dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27258">27258</a>: Icons in Expressions view are squashed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29400">29400</a>: LaunchHistory pref page resizes to hold entire history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28040">28040</a>: Debug - breakpoint not recognized due to missing line number?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30328">30328</a>: debug action group out of date<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28177">28177</a>: Stack frames not updating when watch expression present<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28704">28704</a>: Option to add variable to watch list should appear in context menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30079">30079</a>: Modifying JRE contents shouldn't trigger a build without asking permission<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30650">30650</a>: Conditional breakpoint compilation problem dialog usability<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 28, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27738">27738</a>: J9Plugin activated during shut down?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28737">28737</a>: Set font for snippet editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29954">29954</a>: Can Step With Filters null pointer exception when want to debug..<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24903">24903</a>: ResourceException while importing plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28567">28567</a>: Newly created Java applet configuration requires saving<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28700">28700</a>: Launcher dialog window resizes to full width<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24689">24689</a>: Conditional breakpoints when the value of an expression changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29474">29474</a>: [Contributions] Context menu contributions should support visibility element<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29992">29992</a>: JRE_LIB not properly resolved with JRE containers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30029">30029</a>: Notification of failure for "global" actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17426">17426</a>: [Key Bindings] Ctrl+D and Ctrl+R are used in emacs mode. [general issue]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30130">30130</a>: Non-user friendly Javadoc URL preference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29409">29409</a>: Ctrl+Q to inspect doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20584">20584</a>: Toggle buttons not persisted correctly under some conditions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27311">27311</a>: debug actions too interested in selection changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29925">29925</a>: Show qualified names action not in synch between tool bar & menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30145">30145</a>: Inspect or Display : java.lang.ArrayIndexOutOfBoundsException: 1<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 21, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29482">29482</a>: Debugger finds external source, when it exists in the workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29429">29429</a>: Inspect fails to inspect large array<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29472">29472</a>: property change events being fired for VM Standins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26679">26679</a>: Support source folder attachments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27093">27093</a>: Javadoc location should have initial value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26393">26393</a>: Error compiling snippet should not generate display output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29323">29323</a>: NPE in applet launch delegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27276">27276</a>: instance filter tests not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29646">29646</a>: 1.4 method inadvertantly used in SourceBasedSourceGenerator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29559">29559</a>: Should use system VM when running applications or tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29780">29780</a>: AssertionFailedException in jdt.launching on MacOS X<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28156">28156</a>: LaunchingPlugin start full build after attaching source to rt.jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29680">29680</a>: threads in applets not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28195">28195</a>: NPE on shutdown debug remote launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29617">29617</a>: NPE attempting to modify properties of watchpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29747">29747</a>: StepFilter prefs 'Restore Defaults' doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29560">29560</a>: DebugActionGroup out of date in JDI DebugUI plugin.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27278">27278</a>: NPE in monitors view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24169">24169</a>: Add Step Filters to debugger dynamically<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27396">27396</a>: Switching JREs rebuilds without progress bar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29780">29780</a>: AssertionFailedException in jdt.launching on MacOS X<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 14, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28796">28796</a>: M4: Adding external folder to source lookup path via advanced menu enters incorrect path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21248">21248</a>: Bad error message when no java VM's exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23933">23933</a>: Jar Selection tree nodes NOT sorted [build path]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27220">27220</a>: Launch progress should remind launch config information<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21800">21800</a>: Inform when referenced library does not exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24267">24267</a>: Add JRE page, add external jar does not remember directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29097">29097</a>: JavaProjectPropertyPage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28923">28923</a>: ClassCastException in debug Display view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29037">29037</a>: NPE in launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29036">29036</a>: NPE while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26178">26178</a>: Launch History Preference page missing mnemonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29085">29085</a>: Cannot remove thread filter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27445">27445</a>: [Dialogs] Dialog font should be used by jdt debug component<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28860">28860</a>: NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20401">20401</a>: Need 'Execute' in addition to 'Inspect' and 'Display'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29145">29145</a>: NPE in getLibraryLocations during preference file import<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28175">28175</a>: Add JRE slow and no progress reporting<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29149">29149</a>: VM detection on Mac OS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24945">24945</a>: Breakpoint resume resets variable focus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24751">24751</a>: AppletLauncher should allow other classes of appletviewer to be used<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25230">25230</a>: Launching without default classpath doesn't include i18n.jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25978">25978</a>: Installed JRE doesn't not include the endorsed directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29388">29388</a>: Could not lauch - project not open<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26443">26443</a>: CTRL-space not working in var view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26527">26527</a>: display view code assist not working while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28818">28818</a>: JRE JAR finder does not find JARs in jre/lib<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29223">29223</a>: NPE in HotCodeReplaceManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29297">29297</a>: Debug does not honor multiple output folders<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29307">29307</a>: hot code replace drops not re-enter changed method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29320">29320</a>: Hot swap does two source lookups for same stack frame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29406">29406</a>: Error reporting for attempting to add method breakpoint to abstract method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24544">24544</a>: Search VM results in strange naming if VM name exists more than twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25597">25597</a>: Show/Hide qualified names not working<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 7, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21425">21425</a>: jdi implementation depends on eclipse preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22957">22957</a>: Local variable icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24581">24581</a>: Debugger details' pane should be clear when the corresponding process is terminated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28205">28205</a>: No need to try to find source for ObsoleteMethod<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16072">16072</a>: Disable console horizontal autoscrolling<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28935">28935</a>: DebugException updating StepIntoSelectionActionDelegate on selectionChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28945">28945</a>: Infinite Recursive Loop when a cycle exists in the class path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26681">26681</a>: Multiple output folder<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 17, 2002
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27857">27857</a>: NPE running on the latest plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28420">28420</a>: Two dialogs define same image<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28423">28423</a>: scrapbook eval always displays "source not found"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28283">28283</a>: left sq. bracket in run dialog arguments panel causes immediate crash<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 16, 2002
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28308">28308</a>: Changes in SourceElementRequestorAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28327">28327</a>: Zombie targets left by CommandArgumentTests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26159">26159</a>: NPE evaluating snippet in anonymous inner class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26870">26870</a>: Incorrect interpretation of command line<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 13, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25516">25516</a>: Stepping takes > 2 seconds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27625">27625</a>: Default filter values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28110">28110</a>: Stack frame rendered incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27334">27334</a>: Error when two watch expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28173">28173</a>: Expressions never disposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27590">27590</a>: Default preference value loading causes pref. page class loading<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28196">28196</a>: ObjectReferenceImpl#isCollected workaround<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1727">1727</a>: Console buffer size (1GKKAKB)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26059">26059</a>: Method entry breakpoints makes the debugging program very slow<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 10, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26648">26648</a>: Exception starting debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21701">21701</a>: ArrayIndexOutOfBoundsException while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24844">24844</a>: Variables View - improved final filter?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19987">19987</a>: variables view: 'show static/final fields' buttons do not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27624">27624</a>: Filters should be "Java Filters"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27674">27674</a>: Hyperlinks for java stack traces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27598">27598</a>: Hyperlinks do not work for native methods in stack trace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27716">27716</a>: Cannot edit launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26425">26425</a>: Misleading error msg evaluating during long step & disabled action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27441">27441</a>: 0-based launch accelerator keys<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12652">12652</a>: inconsistency in naming of attributes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26800">26800</a>: No javadoc generated in org.eclipse.jdt.doc.isv<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27679">27679</a>: NPE on shutdown as initializing preference store<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25933">25933</a>: After adding a parent folder, no longer able to add sub folder to classpath.<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 03, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24868">24868</a>: Disable condition text field when "Enable Condition" disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23607">23607</a>: Bug or Should not log the exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22234">22234</a>: Disabled selection in views with details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26156">26156</a>: [External Tools] Prompt for unsaved changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1605">1605</a>: Feature: Watch List (1GEPJ0Z)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27337">27337</a>: icon for "Add Watch Expression" action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27389">27389</a>: Unable to launch on J9<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24478">24478</a>: EventRequestImpl & checkDisabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27335">27335</a>: "Reevaluate" action available when no targets are running<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26724">26724</a>: No default VM if eclipse is launched on Sidecar VM<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 26, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26131">26131</a>: Eval: cannot cast to an array type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26090">26090</a>: NPE when evaluating an expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26696">26696</a>: NPE in conditional breakpoint field<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 19, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25833">25833</a>: A suspend event with STEP_END detail does not cause a switch to the debug view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25223">25223</a>: Relaunch should be disabled for private launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22520">22520</a>: renaming project and CVS<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26113">26113</a>: Scrapbook launches showing up in history<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24970">24970</a>: JRE in the launch configurations dialog should be ordered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24873">24873</a>: Misc for the Detail Formatters preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1766">1766</a>: Text too low in change variable value text box (1GLE8CB)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 13, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25575">25575</a>: New Display created on shutdown.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25734">25734</a>: Discovering default JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11933">11933</a>: No way to demote a favorite back to recent launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25833">25833</a>: A suspend event with STEP_END detail does not cause a switch to the debug view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23465">23465</a>: NPE in JavaRunntime when using new PDE classpath container<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21491">21491</a>: JUnit - console output only shown in debugger perspective [JUnit]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14758">14758</a>: ILaunchConfigurationTab#performApply called twice on hitting the Apply button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25721">25721</a>: Add label to hover extension in plug-in xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14794">14794</a>: "Run Ant..." starts ntvdm.exe which hangs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24839">24839</a>: TimeoutException debugging org.eclipse.ui.tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25690">25690</a>: Ant runtime incorrect for older JDK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24782">24782</a>: Selecting a stack frame during a long step<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26014">26014</a>: Error message on evaluation is centered<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 12, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25219">25219</a>: Can we persist the java version for a StandardVMType?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11396">11396</a>: GP: clicking off empty checkboxed label<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 05, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25426">25426</a>: Primitive detail formatters do not dispay "Edit Detail Formatter"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25102">25102</a>: Unbound classpath variables after upgrade<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25147">25147</a>: Can't seem to cancel JRE search<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25405">25405</a>: Debugging: Display functionality displays erroneous result<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25477">25477</a>: Installed JRE names confuse launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25689">25689</a>: Problems setting console style ranges running debug test suite<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 29, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25151">25151</a>: Missing mneumonics on "Edit Detail Formatter", "New Detail Formatter"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25243">25243</a>: Missing on "Edit Detail Formatter", "New Detail Formatter" expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24720">24720</a>: ReferenceTypeImpl performance issue<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1611">1611</a>: Console preferences (1GETAZ6)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24850">24850</a>: Array partitions are showing "="<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 22, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24828">24828</a>: Applet launcher - parameters tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24879">24879</a>: UI freezes when switching to the Deadlock view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23723">23723</a>: Quick link to "formatter"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24721">24721</a>: Bug fixing link off of JDT Debug page is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24852">24852</a>: Title of Select Type dialog incorrect off of Add Detail Formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24855">24855</a>: Removing multiple entries in the Detail Formatter pref page causes flash<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24857">24857</a>: Detail Formatters preference page does not resize correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24854">24854</a>: Detail formatters need to be ordered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24853">24853</a>: Possible to add a deatil formatter for the same type more than once<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24853">24859</a>: Primitive types not handled well in detail formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23612">23612</a>: Build triggered if change source attachment for a JRE system library<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24516">24516</a>: JDT debug test failures<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 16, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23186">23186</a>: Applet viewer should be part of SDK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24767">24767</a>: Spurious 'Save changes' dialog for applet launch configs<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 15, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24479">24479</a>: PacketSendManager terminates early<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1694">1694</a>: FEATURE: Contributed inspection formatter (1GJ4MUE)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24302">24302</a>: Problems with non-externalized String warnings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24463">24463</a>: JDI Primitive values #type()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24466">24466</a>: Bad behavior for StackFrameImpl.getValues(List)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24547">24547</a>: Found JREs get removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24389">24389</a>: Removing installed VMs doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24579">24579</a>: Deadlock on first checkout of java project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24103">24103</a>: NPE trying to open launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22390">22390</a>: IBM 1.4 VMs don't have rt.jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24464">24464</a>: Check for not compatible values in the JDI client<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21895">21895</a>: Javadoc URL is lost after restart<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24399">24399</a>: Launch Config working set gray checked does not turn to unchecked<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24218">24218</a>: JDIDebugUIAdapterFactory hides JDT UI's IWorkbenchAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24424">24424</a>: Debug test failures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18627">18627</a>: Adding a project to the classpath should add the exported contents of the project<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 8, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24479
-  PacketSendManager terminates early24236">24236</a>: Monitor view not cleared on resume<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20021">20021</a>: Importing preferences loses added JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24284">24284</a>: Javadoc for new 2.1 types in launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=3536">3536</a>: Support to search for JDK installations (1G5HPND)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24321">24321</a>: VM names should not be allowed to have slashes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23906">23906</a>: Launch Default JRE shouldn't show the path to JDK, but rather its registered name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24285">24285</a>: Workspace rebuild on first preference export<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24297">24297</a>: NPE after closing "VM does not support HCR" dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24260">24260</a>: Run configuration Program Parameters don't allow empty  parameters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1736">1736</a>: Feature: Smart "step-into" (1GKQHSY)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23565">23565</a>: Code assist in conditional expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24387">24387</a>: "Detected VM" is bad name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24367">24367</a>: LaunchingPlugin.buildProjects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23179">23179</a>: Review JDI implementation for differences/shortcuts based on the JDI spec<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24094">24094</a>: Scoped Java Exception Breakpoint not working?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24462">24462</a>: PacketReceiveManager.getCommand(...)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 1, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23690">23690</a>: Variable view show old instance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21489">21489</a>: Debugger does not find source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8693">8693</a>: Evaluation completing on shutdown starts loading plugins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24105">24105</a>: JRE container should also use extension directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21622">21622</a>:  handling disconnect/communication error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1525">1525</a>:  Feature: Locks and Monitors (1G3A7ZH)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1576">1576</a>:  Remove all terminated action inefficient (1GDW2Z3)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23965">23965</a>: Cannot resume VM after 'Suspend VM' breakpoint is hit<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 24, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23905">23905</a>: Bad behavior of the remove button in the detail formatters page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23706">23706</a>: Code assist in the 'detail formatters' preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23716">23716</a>: Reporting "formatter errors"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23835">23835</a>: JDI version incorrect<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 19, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23496">23496</a>: Eval: API change in the java AST model<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23408">23408</a>: Externalize JavaUISourceLocator.SourceLookupDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23630">23630</a>: Terminate button disabled after highlighing text in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23423">23423</a>: runtime eclipse does not come up - VMDisconnectException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23735">23735</a>: Array Index out of bounds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23762">23762</a>: NPE - variable details stop showing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22975">22975</a>: Instance filters on breakpoints<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 17, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23173">23173</a>: NPE in the TcpIpSpy for JDWP replay packets with incorrect id<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23388">23388</a>: IJavaType does not implement equals<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1552">1552</a>: Method entry breakpoints and source types (1GC138W)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23034">23034</a>: Install JRE preference : problem switching between standart vm and standart 1.1.x vm<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5500">5500</a>: No Stop In Main Option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23568">23568</a>: Ctrl-Space is not working in the Scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7999">7999</a>: Source lookup with Runtime JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23610">23610</a>: StandardVMType matches on MacOSX even if it shouldn't<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19741">19741</a>: Default class/source path show project JRE, not config (README)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23471">23471</a>: Eval: possible wrong static/non-static context<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 10, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22460">22460</a>: HotSwap failure dialog does not give reason for failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22482">22482</a>: Conditional breakpoint with suspend VM does not show threads suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22843">22843</a>: Scrapbook broken in 2.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22081">22081</a>: AST Exp Eval: variable declaration don't work for array type variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19349">19349</a>: Debug exception on step if var selected and detail pane visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22944">22944</a>: "Suspend VM" conditional breakpoints don't resume the VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21769">21769</a>: Invalid code index stepping in junit code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23040">23040</a>: JDIThread breaks caching for stacks of same depth<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23012">23012</a>: Exception Occured while launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10670">10670</a>: Support for JDI v 1.3<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22908">22908</a>: ClassCastException from conditional breakpoint [evaluation]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22877">22877</a>: BufWriter and VerboseWriter are not in the right package<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10651">10651</a>: JDI client uses Vector where does not appear to be needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22477">22477</a>: JDI: Method#locationsOfLine and Method#allLineLocations with abstract and native methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1582">1582</a>: Resume should do the stepping trick to reuse state (1GE4NE9)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20869">20869</a>: Method breakpoints make debugger run 50 times slower<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23171">23171</a>: Method entry breakpoints on abstract methods<br>
-  
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 27, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21506">21506</a>: Keyboard shortcut for duplicate launch configuration needed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20901">20901</a>: Terminate debug target when >1 running causes concurrent exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21625">21625</a>: Can we be more helpful when there is no line number information<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22543">22543</a>: Array initialization with primitive types fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22610">22610</a>: HCR of anonymous classes loses breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22664">22664</a>: Variables view should remember expansion<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21772">21772</a>: toString evaluation for multiple members at once<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22719">22719</a>: step filtering configuration should allow for multiple selection and recursive masks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21119">21119</a>: run as java app: no qualification for types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22469">22469</a>: False "no line number attributes" error?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22656">22656</a>: Java popup menu items missing from debug action group<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22244">22244</a>: Innappropriate error dialog terminating debug target while Inspect eval running<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21878">21878</a>: Feature: Exception breakpoints - option to ignore packages/classes/methods/lines<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22195">22195</a>: Limit displayed launch configurations to those relevant to the current project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22842">22842</a>: NPE adding variable to view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22397">22397</a>: JVM runtime memory size on scrapbook runner<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22599">22599</a>: Breakpoints view: Go to File doesn't work for JSP files<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 13, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21982">21982</a>: Feature: Ability to stop evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8334">8334</a>: Evaluation fails message in the Display view from Expressions view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21579">21579</a>: Should improve UI for 'default' JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17830">17830</a>: Should allow multiple exception breakpoints for one class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17491">17491</a>: Display problem in the Variables View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20852">20852</a>: "Launch Configurations" window doesn't always give an appropriate message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4084">4084</a>: Open on decl/rec type bug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5516">5516</a>: Open on... should open a type hierarchy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=6660">6660</a>: Feature: Hover over breakpoints give line number<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7202">7202</a>: Detail area does not respect "primitive type display" prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=17409">17409</a>: Clear JDI cache on termination<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22006">22006</a>: Exception breakpoints - can't scope to default package<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22107">22107</a>: STATE change event should only "update"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22005">22005</a>: Review UI runnables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22316">22316</a>: Deadlock on shutdown if evaluation suspended at breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22199">22199</a>: Delay hotswap attempt on compilation error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21776">21776</a>: Evaluate action enabled for non-java stack frames<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 06, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21518">21518</a>: Debugger source lookup problem when debugging against Wireless Toolkit (WTK) 1.04<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1765">1765</a>: "this" displayed with default protection (1GLE801)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12480">12480</a>: AST Exp Eval: loop statements are not implemented<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12482">12482</a>: AST Exp Eval: variable declaration statement is not implemented<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21197">21197</a>: Don't hard code the editor id names for the ManageBreakpointRulerActionDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21389">21389</a>: Breakpoint Properties: Add Package should allow multi-select<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21390">21390</a>: Breakpoint Properties: Add Class, Package missing '...'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21460">21460</a>: The "Add Java Exception Breakpoint" dialog displays NPE twice.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21630">21630</a>: Extra jdwp requests: getValues(List)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22048">22048</a>: NPE in JDIStackFrame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21070">21070</a>: Usability: Add Exception Breakpoint dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21247">21247</a>: Eclipse doesn't detect Blackdown VM<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July 30, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21792">21792</a>: vm arguments ending with a backslash cause problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12966">12966</a>: Remote debugging with Sun J2ME Wireless Toolkit fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21400">21400</a>: Loss of member details in text of Breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18943">18943</a>: Same snippet editor, two different windows (README)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1559">1559</a>: Debugger doesn't pop to front when breakpoint hit (1GD7P7D)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18923">18923</a>: Error on first attempt to use moved scrapbook page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18927">18927</a>: Copied scrapbook page uses some "old" information<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21010">21010</a>: Use getAdapter when converting IJavaThread to JDIThread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21170">21170</a>: NPE in RuntimeClasspathEntry if internal source archive removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21636">21636</a>: Extra jdwp requests: ReferenceType of ObjectReference must be cached<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21801">21801</a>: ThreadGroupReference related data should be cached<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21803">21803</a>: UI hangs after an evaluation in the display view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21433">21433</a>: JRE_LIB container entry and JRE names clash<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July 16, 2002
-
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21099">21099</a>: HCR failed dialog - default control is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18722">18722</a>: Projects re-build when not required<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18792">18792</a>: Minor: caught/uncaught only enabled for single selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20260">20260</a>: TVT2: corrupted characters in java prefs page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20417">20417</a>: ManageBreakpointActionDelegate.selectionChanged causes NullPointerException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21483">21483</a>: Error from ClassPrepareEvent when debugging WTK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21305">21305</a>: Debug element rendering can be more rebust<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21308">21308</a>: Method.isObsolete() broken for method ID 0 on JDK < 1.4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20469">20469</a>: Concurrent modification of JDIDebugTarget breakpoint collection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21450">21450</a>: Breakpoint hit in parent's class method instead of class method<br>
-
-</body>
-</html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_0_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_0_buildnotes_jdt-debug.html
deleted file mode 100644
index 0cea1e3..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_0_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,978 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-3.0 - RC3
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66413">66413</a>: Illegal thread state when debugging to conditional BP on startup<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=40838">40838</a>: Some debug variables do not display<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67499">67499</a>: ArrayIndexOutOfBounds adding project to source lookup<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67414">67414</a>: 3.0RC2: Project build failed because: Cannot find the class file for java.lang.Object<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=50693">50693</a>: "Local directory" setting moved to "Workspace"<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=68108">68108</a>: Hot code replace not working when warnings present<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-3.0 - RC2
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=46835">46835</a>: Quietly fail with jdi.InternalException<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55855">55855</a>: Debugger is really slow to display arrays or to perform code completion<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65416">65416</a>: context launch error for java file in simple project<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65489">65489</a>: StepIntoSelection should use general IRunToLineTarget support<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64136">64136</a>: Console debug hyperlinking can't parse some anonymous inner class messages<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65844">65844</a>: NPE when launching<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62266">62266</a>: Breakpoint action shows error dialiog and logs exception<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64990">64990</a>: "enable hit count" checkbox disables OK button<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64992">64992</a>: "hit count" should have "..."<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64025">64025</a>: Contextual launch fails for top-level type<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65316">65316</a>: Error stopping debug core (i.e. while shutting down eclipse)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65771">65771</a>: NPE in the log<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65206">65206</a>: breakpoint marker location not correctly updated after refactoring<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66096">66096</a>: cancelled build is not repeated on next launch<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63136">63136</a>: Scrap pages inherit classpath but not sourcepath<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65056">65056</a>: error code 101 evauating conditional breakpoint<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65107">65107</a>: ClassCastException processing async thread queue<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66192">66192</a>: Polish patch: support view activation via a keyboard shortcut<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66378">66378</a>: test failing - invalid stack frame<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64951">64951</a>: suspended thread while evaluating condition - no labels<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65058">65058</a>: Inspect doesn't work in Snippet Editor<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44758">44758</a>: Runtime resolve of packages from other project is not possible in conditional breakpoints<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66150">66150</a>: Slow to update RetargetWatchpointAction<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65149">65149</a>: Resource exception in JavaDebugOptionsManager.initializeProblemHandling<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65585">65585</a>: open type hierarchy for var of inner type does not work<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65604">65604</a>: Invalid stack frame exceptions<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63323">63323</a>: Marker not found when double-clicking in ruler<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65504">65504</a>: No progress feedback when changing VM installs<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65203">65203</a>: Launch configuration support for package move.<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 1, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63605">63605</a>: Modal progress improvements round two<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=49407">49407</a>: scrapbook suspends on uncaught exceptions<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61329">61329</a>: launch aborted when pre-req project closed<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64472">64472</a>: <packages prefixes=..../> should be removed<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63040">63040</a>: Rapidly clicking on Drop to Frame results in deadlock<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 26, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64139">64139</a>: Classpath tab layout & title<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64419">64419</a>: Tomcat example does not need "web app root" attribute<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64011">64011</a>: JavaProjectSourceContainer does not search for non-Java files<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 25, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=40815">40815</a>: Performance problem when steping into Proxy classes<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63472">63472</a>: MonitorsView does not remove itself as a selection listener<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=53711">53711</a>: Error while 'stepping into selection'<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63533">63533</a>: An internal error occurred during: "Launching"<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=50298">50298</a>: markers not displayed in Java snippet editor<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52474">52474</a>: UI Blocked when opening Java Perspective during CVS check out<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61046">61046</a>: Source file not found in debugger<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63828">63828</a>: ClassCastException when debugging (a breakpoint hits)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63806">63806</a>: Move refactoring prepends a '.' to the main class of launch config<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 20, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62531">62531</a>: ALT + D : used 2 times in Debug Lauch configuration<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63037">63037</a>: Context menu "Drop to Frame" missing icon<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60183">60183</a>: Console label only shows executable<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52964">52964</a>: Persist size of debug pop-ups (or size better)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63163">63163</a>: NPE when searching for JREs<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62640">62640</a>: Display keybinding problem<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62932">62932</a>: NPE when renaming project<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62583">62583</a>: clean up dependencies for jdt.debug.ui<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62808">62808</a>: [Launching] Cannot launch app with JDK1.1.7<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63107">63107</a>: Display view hook CTRL-space for code assist<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57838">57838</a>: Ellipsis for classpath tabs actions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 18, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52931">52931</a>: Some Preference changes always cause rebuild<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57853">57853</a>: Persist Display view contents during a session<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59525">59525</a>: "Display" from the Display view should use the display view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=54557">54557</a>: Launch configuration: 'move type' refactoring support<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61102">61102</a>: content assist does not work on Display view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61249">61249</a>: NPE when using applet launch short cut on non-java project<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52383">52383</a>: UI freezes while running runtime workbench under debug<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=40447">40447</a>: Java Snippets Import Dialog Spacing<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61898">61898</a>: Internal error using 0511_1200 build<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57257">57257</a>: ArrayOutOfBoundsException in debug event dispatch<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45431">45431</a>: Source Exclusion Filter does not apply to Debugger<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61960">61960</a>: dangerous practice of catching Throwable<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56071">56071</a>: Validation of applet class on Applet main tab<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61960">61960</a>: Java breakpoint refactoring support for project rename<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61769">61769</a>: Detail formatter does not work; gives wrong code assist<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62239">62239</a>: Use of deprecated API SearchEngine#searchAllTypeNames<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60049">60049</a>: Java breakpoint refactoring support for package rename and move<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61708">61708</a>: Unable to launch application in non PDE dependent project of JDTCore<br>
- 
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 11, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57201">57201</a>: Misleading removal of entries in (default classpath)<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58829">58829</a>: create schema for jdiclient extension point<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60604">60604</a>: reduce warnings in jdt.launching due to core.runtime deprecations<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60859">60859</a>: "Project Selection" dialog does not resize<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60770">60770</a>: Windows test failing: testSimpleHcr<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61392">61392</a>: NPE in AppletLaunchConfigurationUtils<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61429">61429</a>: Persistent Display view<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59453">59453</a>: Use new API for build path dialogs<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61428">61428</a>: Breakpoint Filtering buttons need ellipsis<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60985">60985</a>: Move from deprecated IResourceChangeEvent.POST_AUTO_BUILD<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56575">56575</a>: JavaSnippetEditor should use ScrapbookMain1.eval line 21 instead of 20 for stepevent<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=53746">53746</a>: Drop to frame should be more prominent<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58554">58554</a>: NPE attempting to add alternate JRE to source lookup path for PDE<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58998">58998</a>: NPE in JavaRuntime<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=50531">50531</a>: KVM: stepping with "this" expanded<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=61046">61046</a>: Source file not found in debugger<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 4, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59481">59481</a>: Preference initialization should not be done in Plugin#startup()<br>  
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60538">60538</a>: Deprecated SearchPattern.createPattern(String stringPattern, int searchFor, int limitTo, int matchMode, boolean isCaseSensitive)<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59754">59754</a>: critical: error when running any java application from eclipse<br> 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59732">59732</a>: Wrong Java breakpoint attributes added to breakpoints<br>      
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59453">59453</a>: Use new API for build path dialogs<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59524">59524</a>: Evaluation pop-up keybindings are broken on GTK<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58332">58332</a>: After debugging when program exits the variables view gets closed<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 27, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59756">59756</a>: LaunchConfigurationITypeMoveParticipant#initialize produces endless loop<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59580">59580</a>: NPE in CommonSourceNotFoundEditor<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59844">59844</a>: Assertion failed due to BadLocationException in console log<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=53512">53512</a>: open declaring/receiving type gives the same type<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56433">56433</a>: Launch with debug disables JIT unnecessarily<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57779">57779</a>: New API in IVMRunner to start JDIDebugTarget with resume=false<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58036">58036</a>: AssertionFailedException: Open External File for scrapbook page<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58405">58405</a>: Fix deprecations from source lookup migration<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59152">59152</a>: Migrate to new ClasspathContainer API<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59972">59972</a>: remove references to deprecated AST.LEVEL_?_0<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58078">58078</a>: detail formatter dialog missing code assist hint<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=60025">60025</a>: Display view missing icon for Clear actions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 20, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57644">57644</a>: SMAP strata and SourceFile attribute not used to locate source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56200">56200</a>: SnippetEditor move to file buffer document provider<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56259">56259</a>: Toggle Class Prepare Breakpoint is not intuitive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57249">57249</a>: Console cannot parse stacktraces from JRockit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22818">22818</a>: Remove Debug Action Group support<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 13, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40766">40766</a>: Specify classpath entries relative to variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57985">57985</a>: Remove "New Scrapbook Page" toolbar button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53334">53334</a>: Making the breakpoint location verifier less restrictive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56705">56705</a>: Details pane problem (build M8)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34669">34669</a>: Activating content assist in Conditions<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 6, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55598">55598</a>: inspect on scrapbook page opens Expressions View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56852">56852</a>: JDT debug dialogs storing dialog settings in the incorrect plugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55706">55706</a>: AddVMDialog should be resizable. size should be persisted<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56068">56068</a>: Choose Applet dialog does not have top mnemonic<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56457">56457</a>: Pref Page Installed JREs; Create JRE dialog problems<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=49741">49741</a>: setting runtime classpath leaks an Image<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=50515">50515</a>: problem with "no debug attributes" dialog<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56665">56665</a>: bootstrap entries classpath for junit is not being set<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56211">56211</a>: Class prepare breakpoint annotation<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56065">56065</a>: Applet main tab cleanup<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45691">45691</a>: Variable selection UI<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56805">56805</a>: ClassCastException on choosing "Instance Breakpoints"<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=54711">54711</a>: MethodBreakpoint refactoring support for method rename.<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=57467">57467</a>: race condition causes invalid stack frames<br>
-    
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 30, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44490">44490</a>: ObjectCollectedException trying to restart paused VM<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 25, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55374">55374</a>: Can't launch JDT plug-in tests anymore<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56080">56080</a>: Only prompt for error in the project when launch in debug mode.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56238">56238</a>: Continue Launch when compile errors preference: Never<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36847">36847</a>: run to line when line contains no code == resume<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 23, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54988">54988</a>: Removed deprecated methods in VMRunnerConfiguration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54207">54207</a>: j9 launcher plugin uses deprecated -bp: flag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55171">55171</a>: NPE from RunToLineAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55049">55049</a>: Step into selection failure dialog should be an info dialog.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55000">55000</a>: Invalid null check in JDIModelPresentation#getExpressionText()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54993">54993</a>: Internal Error while building<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54896">54896</a>: Disabled watch expressions still update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55179">55179</a>: Toggle Breakpoint action and key binding missing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=55614">55614</a>: Non-nls strings and missing dialog font for JavaDebugPreferencePage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54708">54708</a>: Watchpoint refactoring support for field rename<br>
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 16, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30344">30344</a>: Insertion of 'scrapbook' error messages unhelpful<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54336">54336</a>: AppletMainTab has too many composites<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54229">54229</a>: AppletMainTab has too many inner types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54359">54359</a>: Button enablement on the classpath tabs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54402">54402</a>: package.html for com.sun.jdi.connect.spi<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37862">37862</a>: Installed JRE should remember default VM arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54417">54417</a>: Is this a bug? or my fault somewhere?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34344">34344</a>: Suspend/Resume enabled in monitors view with no effect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54576">54576</a>: Display view should also use pop-ups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34430">34430</a>: Add Watchpoint and Add Method Breakpoint enabled for SnippetEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54417">54417</a>: Applet parameter name and value need to be quoted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53741">53741</a>: inspect and display should work on an empty selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53952">53952</a>: Generic type name of local variables not displayed when available<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53959">53959</a>: Nested generic type names are not correctly displayed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53929">53929</a>: Run/Classpath tree entries need to show FULL path.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54804">54804</a>: BadLocationException when deleting code containing a breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54713">54713</a>: Too many inner types in JavaMainTab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54692">54692</a>: debug UI gifs that cannot be read<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54579">54579</a>: Progress indicator flashes for console output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53709">53709</a>: Useless call to #breakpointExists() in ManageBreakpointActionDelegate#update()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53634">53634</a>: Non-default JRE libraries don't work when running an application...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54786">54786</a>: Loss of being able to add newlines after Inspect/Display popup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54504">54504</a>: Java Debug preference page references wrong preference store<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54929">54929</a>: Don't autoOpen monitors view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46530">46530</a>: class load/prepare breakpoint<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 9, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45328">45328</a>: When hot-swap fails, add "restart" button in addition to "terminate" and "continue" buttons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53525">53525</a>: Variables view comes up with details<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53989">53989</a>: Primitive Type Display Options dialog does not use dialog font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50909">50909</a>: Make new bootpath options non-breaking<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49822">49822</a>: Investigate support for JDK 1.5 features<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53412">53412</a>: NPE from monitors view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52385">52385</a>: Toggle Breakpoint adds duplicate breakpoint in inner class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53134">53134</a>: Debug views appear in the wrong perspective<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-March 2, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52556">52556</a>: Classpath does not update when JRE changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50086">50086</a>: Enhanced evaluation support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53247">53247</a>: Timeout exception exiting program caused UI block<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53250">53250</a>: ObjectCollectedException while shutting down tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53331">53331</a>: JDI test suite not usuable and has errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53364">53364</a>: String index out of range in GenericSignature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34313">34313</a>: Launch Configuration: Attach source should be enabled on multi selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53389">53389</a>: NPE in log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21783">21783</a>: Main type dialog ignores child classes [dialogs] [general issue]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36122">36122</a>: Variables view scrolls to top upon each evaluation/debug step<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53135">53135</a>: NPE in variable substitution<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53349">53349</a>: Error during test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52996">52996</a>: j9launcher plugin missing charconv.zip and locale.zip<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53374">53374</a>: NPE in SourceLookupUtils#shutdown<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53450">53450</a>: Bug with DebugModelContextBindings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53353">53353</a>: Migrate compilation unit parsing from deprecations<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 24, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45481">45481</a>: Double click to select current line in Display View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34350">34350</a>: Step filter label truncated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52366">52366</a>: Cannot launch program due to cycles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51765">51765</a>: Unexpected Error dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49068">49068</a>: Large space at top of Installed JREs pref page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52800">52800</a>: Debugger source lookup dialog; unnecessary period<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51082">51082</a>: IRuntimeClasspathEntry#getMemento() javadoc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52866">52866</a>: NPE in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52028">52028</a>: Add variable expansion for Main Class and Project in launch configurations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51533">51533</a>: IOException launching Junit launch config<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 17, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51560">51560</a>: Pref Page String Substitution; table lines<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44583">44583</a>: (default package) exception scope fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51425">51425</a>: Evaluation fail silently if it indirectly reference Class not in the buildpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51316">51316</a>: 'Display hexadecimal values (byte, short, char, int, long)' is not working for char<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 12, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51687">51687</a>: NPE from step into selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51748">51748</a>: Error while creating scrapbook page (spellcheck?)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51742">51742</a>: NoSuchElement exception on cancelling evaluation<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 11, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51100">51100</a>: Walkback in Run... dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51421">51421</a>: JSP variables are not visible in the variables view when debugging a JSP file<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 10, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51327">51327</a>: Run; Configuration; Environment Tab; Dialog Font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51414">51414</a>: Errors not logged in JavaLineBreakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50439">50439</a>: Step into selection unnecessarily restrictive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44109">44109</a>: Cannot "Toggle Method Breakpoint" before other breakpoint is set<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 3, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25651">25651</a>: Step into selection on any line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50665">50665</a>: Problem with the debug view when breakpoints in code executed by system thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18891">18891</a>: NPE reported in DisplayView on display in remote launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36266">36266</a>: [Variables View, Detail Pane] NPE if object does not support toString()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46030">46030</a>: Default classpath attribute not set properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49013">49013</a>: Classpath should be expanded on entry into tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46418">46418</a>: PDE classpath containers not working for non-PDE applications<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34297">34297</a>: Allow a launch configuration classpath to be "default plus"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 27, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50329">50329</a>: Redundant prefix on editors extension<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30816">30816</a>: Cannot debug to breakpoint with Wireless Toolkit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50453">50453</a>: Build Path & Runtime Path inconsistent WRT Library/Container<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50552">50552</a>: "Add Step filter" does not use dialog font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50385">50385</a>: Breakpoint properties/conditional breakpoints error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50553">50553</a>: "Add Filter" button on Pref page Java/Debug/Step Filering should have ...<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 20, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49880">49880</a>: scrapbook page popup item "Set Imports" should end with "..."<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49853">49853</a>: Persist size of "add step filter" dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49963">49963</a>: Exception: Unable to retrieve stack frame - thread not suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49834">49834</a>: StringIndexOutOfBoundsException when adding breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50201">50201</a>: JRE System Library not correctly detected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49335">49335</a>: Stepping in to JRE classes fails to find source code<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 13, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48378">48378</a>: Adapting to deprecation of IWorkingCopy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8600">8600</a>: Improvements to step filtering UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1674">1674</a>: Always show values of method params (1GI3NEE)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 6, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49069">49069</a>: Unnecessary mneumonic on the Edit JRE dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49045">49045</a>: Scrapbook launch config name is not user friendly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49052">49052</a>: changing VM arg in scrapbook properties does not restart VM<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 18, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49054">49054</a>: Bootpath incorrect when no project specified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49077">49077</a>: Cannot append more than one jar to default bootpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48946">48946</a>: JavaClasspathTab.hasClasspathChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49092">49092</a>: 'User entries' classpath top element should always displayed, even if empty<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 15, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30000">30000</a>: Error when you clean out all entries from bootstrap classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46738">46738</a>: Revert on the JRE tab does not present all widgets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47256">47256</a>: CoreException from launch configuration referencing closed project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48381">48381</a>: Unneccessary memory held in debug view elements after termination<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47275">47275</a>: Missing files in the distribution of org.eclipse.jdt.ui.javafamily<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45479">45479</a>: Cannot set breakpoint on line which contains only string or number litteral<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46001">46001</a>: JRERuntimeClasspathEntryResolver#resolveLibraryLocations() should return only the bootstrap classes when asked for the bootstrap classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42165">42165</a>: Cannot remove default JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48689">48689</a>: Error in .log file when JRE install location is removed/renamed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48153">48153</a>: validate Java Applet Parameters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46737">46737</a>: Review all tabs that take advantage of the activated method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=14626">14626</a>: Breakpoint ruler menu contributions not updating properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39381">39381</a>: [launching view] The configuration tabs use slightly different border sizes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46735">46735</a>: JavaClasspathTab model creation does not handle invalid launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18184">18184</a>: Eval: Disallow field access that require local type signatures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47169">47169</a>: does not present frames correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47390">47390</a>: Use of deprecated API from SearchEngine<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 9, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42068">42068</a>: Pref Pages button order<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46073">46073</a>: Classpath JRE entry does not update properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42123">42123</a>: Select Container margins [build path] [dialogs]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39768">39768</a>: Red X on JRE tab when no error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47903">47903</a>: NPE while launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44261">44261</a>: Exception listing dialog box is too tall for my screen<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45917">45917</a>: No "Open Declared Type" etc for logical structure entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47119">47119</a>: Exception breakpoint scope "add package" label problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47232">47232</a>: classpath tab error does not disappear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8660">8660</a>: Should not allow to easily suspend System threads<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35752">35752</a>: Terminating an application produces exceptions in log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45506">45506</a>: cannot delete detail formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44591">44591</a>: Moving cursor in editor is very slow and triggers exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48243">48243</a>: Keybinding reassignments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48316">48316</a>: Can edit JRE classpath when "Use default system libraries"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40680">40680</a>: Usability issues with Edit JRE dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48152">48152</a>: Dialog Add/Edit Parameter Variable margin problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47471">47471</a>: "Could not find the main class"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 2, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45068">45068</a>: CME on hot replace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47459">47459</a>: Excessive logging from OutputStreamMonitor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46127">46127</a>: Annoying IOException in the error log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46544">46544</a>: Drop to Frame should be grouped with Step actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47003">47003</a>: NFE cause crash while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47385">47385</a>: Schema validation errors for JDT Debug plugin.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23056">23056</a>: Add breakpoint on exception - exceptions are listed twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38956">38956</a>: Down arrow in Add Java Exception Breakpoint dialog should switch panes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=26052">26052</a>: Could not set breakpoints on NullPointerException<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 26, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47445">47445</a>: Test(s) failure in I200311250800<br>
-	  	
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 25, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47281">47281</a>: Don't log VMDisconnectedException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47198">47198</a>: Unknown stack frame info in Workbench startup thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41673">41673</a>: Adding breakpoint in unsaved java file leads to NotPresentException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47288">47288</a>: Pref Page Installed JREs -- deselect only JRE after install -> error<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 19, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38736">38736</a>: IndexOutOfBoundsException get stack frame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46984">46984</a>: Poor choice of color<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45953">45953</a>: Can't set breakpoints on empty functions in M4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19611">19611</a>: F2 - Exception while debugging<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 18, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46153">46153</a>: Revise use of IWorkspace.run<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 11, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38370">38370</a>: default classpath problems with security provider (SunJCE)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36836">36836</a>: org.eclipse.jdt.launching.VMRunnerConfiguration needs -Xbootclasspath/a and /p options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45885">45885</a>: NPE in JFace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46111">46111</a>: NullPointerException when calling 'setLaunchPerspective'<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 4, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10035">10035</a>: The Launcher should support variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38862">38862</a>: Launch configurations must allow env var configuration...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45694">45694</a>: Error in Args tab when variable specified in working dir<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45778">45778</a>: Icons for object browser elements are not transparent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43048">43048</a>: Logical views don't work for watch items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45884">45884</a>: j9 vm runners do not use environment settings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45695">45695</a>: Tests for variables in program/vm args and working dir<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 28, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45610">45610</a>: NPE in JavaRuntime<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44774">44774</a>: Removing parameters in Run/Java Applet does not enable Apply<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44752">44752</a>: cannot modify applet parameter names in launch config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45513">45513</a>: Fix core variables plugin for build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36172">36172</a>: Add option to hide null entries in arrays<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45452">45452</a>: Cannot set a breakpoint on the right line using 1023<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 21, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45215">45215</a>: Console hyperlinks broken with awt code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45211">45211</a>: Race condition causing debug test failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44877">44877</a>: Wrong JDK source lookup if Compile-JDK <> Debug-JDK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43555">43555</a>: Conditional method entry breakpoink<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 15, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44652">44652</a>: method.location() should not return null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16036">16036</a>: UI not responsive when stack is deep<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44759">44759</a>: Eclipse breaks into debugger when a java.lang.Error is thrown<br>
-	  	
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 10, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44628">44628</a>: NPE in getSourceName()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44624">44624</a>: tomcat launcher not usable<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 07, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43710">43710</a>: SourceElementQualifierProvider.getText and linked resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36844">36844</a>: Redefinition of modifier flags in ClassTypeImpl<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37760">37760</a>: Registering an IJavaBreakpointListener causes breakpoints to be ignored.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42555">42555</a>: Tests for breakpoint location verification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43436">43436</a>: Should use default class stratum when retrieving source and line number<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37271">37271</a>: suspend event fired before suspend occurrs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1547">1547</a>: duplicate variable names (1GB7V3E)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43422">43422</a>: NPE when setting breakpoint in anonymous class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43690">43690</a>: Error from source lookup tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1691">1691</a>: Feature: set exception breakpoint from console (IGJ8FU2)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44108">44108</a>: NPE from DelegatingModelPresentation.getText with old expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44195">44195</a>: ClassCastException in JDIFieldVariable.getReceiver<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=44265">44265</a>: Breakpoint can be set in an empty method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43927">43927</a>: Content assist does not work in breakpoint properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39345">39345</a>: LaunchConfigurationArgument tests vulnerable to flushed buffer<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 30, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43544">43544</a>: Multiple JREs with same name; no name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43611">43611</a>: NPE displaying JavaMethodBreakpoint that has no signature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43661">43661</a>: Exceptions occured after removeing a breakpoint.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42429">42429</a>: escaping double quotes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43738">43738</a>: API for available strata<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 24, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43285">43285</a>: Variable view is empty<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 23, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43289">43289</a>: [dialog]Run configuration Common tab font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43328">43328</a>: Missing NLS strings for JavaObjectBrowser<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43175">43175</a>: "Run to line" adds annotation to editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34670">34670</a>: Java Launch Configs: [DELETE] key event has not effect on the lists in the 'classpath' tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38746">38746</a>: Preferences->Java->Installed JREs->Add hangs eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41343">41343</a>: AddJarAction has no need for a validator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43362">43362</a>: Breakpoint listener tests failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42557">42557</a>: Use job for serialized evaluations per java thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43330">43330</a>: Change from "show" to "do not show"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43179">43179</a>: JRE tabs are missing margins<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 16, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42773">42773</a>: jdt.launching.SocketUtil.findFeePort<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41647">41647</a>: Debugger thinks no line number info is present for jikes classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42703">42703</a>: Conditional breakpoint color problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42436">42436</a>: StandardVMRunner uses 1.4 StringBuffer API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42783">42783</a>: Delete deprecated method - findFeePort<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34919">34919</a>: Setting classpath container initializer should be batched<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=22960">22960</a>: Unable to add multi-select to set watchpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43059">43059</a>: WorkingDirectoryBlock.setDefaults(ILaunchConfigurationWorkingCopy)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43028">43028</a>: variable selection/expansion not working with logical variable views<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 10, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41775">41775</a>: Capitalization error in Java Development User Guide<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42152">42152</a>: Runtime errors for watch expression not displayed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41371">41371</a>: [Threads and Monitors] How to see deadlocks in System threads?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42179">42179</a>: Inconsistent double-quote escaping in LaunchVariableUtil<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41946">41946</a>: Unecessary error messages logged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42487">42487</a>: NPE if ctrl dbl click in JavaDetailFormattersPreferencePage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42425">42425</a>: Setting breakpoint on package declaration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40744">40744</a>: Java Classpath tab is huge<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42067">42067</a>: "Create JRE" and "Edit JRE" dialogs margin spacing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42125">42125</a>: [Dialog] [Font] "Attachments For XXX" does not use dialog font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42733">42733</a>: Edit JRE is very slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39474">39474</a>: JavaBreakpoint.recreate() should call getAdapter(IJavaDebugTarget.class)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41876">41876</a>: cannot add root directory of a drive to classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42677">42677</a>: an illegal breakpoint is flagged by too many bells and whistles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42104">42104</a>: Setting an invalid breakpt in a constructor causes Error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42407">42407</a>: When a running debugger session cannot be "hot-updated" with new code, the dialog should have an option to stop the debugger<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 02, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42193">42193</a>: program arguments with whitespace not display in a good way<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42065">42065</a>: Add detail formatter dialog margin spacing.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42190">42190</a>: Display view triggered from Variables detail pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42207">42207</a>: "Show affordance in hover to make it sticky" not working<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 27, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42079">42079</a>: NullPointerException when setting breakpoint<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 26, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=13834">13834</a>: Can't set breakpoints in external source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41961">41961</a>: NPE when displaying the result of an expression<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 25, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41761">41761</a>: Error when setting a breakpoint in the ruler in a class not in the classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41809">41809</a>: Can add breakpoint on non-executable line of code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41839">41839</a>: No default Javadoc URL for 1.4.2 VMs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41873">41873</a>: Timing issue in Launch mode tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38580">38580</a>: No details when select error node in Expressions view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41560">41560</a>: two watch expressions did not update properly<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 20, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41703">41703</a>: NPE from breakpoint location verifier job<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41343">41343</a>: AddJarAction has no need for a validator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38744">38744</a>: debugging hard while loading classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41699">41699</a>: DirectorySourceLocation changes: break tests / javadoc contract<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33624">33624</a>: double clicking wrapped lines sets breakpoint on next statement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39006">39006</a>: Setting breakpoint on assert statement not possible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39438">39438</a>: Cannot put a breakpoint on a source line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39589">39589</a>: Cannot place breakpoint in PreferenceDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1591">1591</a>: Guess at breakpoint location not very good (1GET2PP)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 12, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41205">41205</a>: NPE from JavaDebugHover<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32686">32686</a>: Editing condition from error dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39066">39066</a>: [ANT} Add hyperlink to source from the stacktrace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38919">38919</a>: context-menu "Show in Package Explorer" [Scrapbook]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39919">39919</a>: unused classes in launcher<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27445">27445</a>: [Dialogs] Dialog font should be used by jdt debug component<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Aug 6, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40707">40707</a>: Breakpoint remains enabled after disabling & setting hit count<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40946">40946</a>: hit count error message incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40908">40908</a>: Breakpoint dialog layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40708">40708</a>: breakpoint properties dialog title<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40956">40956</a>: Improve error messages for debug communication preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25798">25798</a>: JSR 45 debugger support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40969">40969</a>: changeing breakpoint results in excess resource deltas<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40959">40959</a>: title for JSP breakpoint is incorrect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41026">41026</a>: NPE if quickly cancel debug launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=41103">41103</a>: JavaDebugHover should provide F2 hint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40412">40412</a>: Wrong hovering while debugging recoursive method<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July 29, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40577">40577</a>: SocketUtil#findUnusedLocalPort(String, int, int)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40676">40676</a>: Debug->classpath->advanced->add folder sort order wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40786">40786</a>: stratum breakpoint does not install when source path unspecified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40622">40622</a>: Cannot select alternate console when console pinned<br> 
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July 29, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40629">40629</a>: Watchpoints can be configured to invalid state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10900">10900</a>: Improve breakpoint properties dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40673">40673</a>: Detected JRE not set correctly<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July 22, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40022">40022</a>: Wrong handling of SMAP OutputLineIncrement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40487">40487</a>: typo in com.sun.jdi.connect.IllegalConnectorArgumentsException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40488">40488</a>: DuplicateRequestException#DuplicateRequestException(String) not implemented<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=40510">40510</a>: JDIArrayPartitionValue contains unnecessary methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36619">36619</a>: Incorrect output shown in console window<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July 15, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39370">39370</a>: Use Job for debug async queue<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39346">39346</a>: Debug stack display does not show recursion properly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39351">39351</a>: Stepping out of main does not show source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39373">39373</a>: Source attachment not detected for sidecar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39486">39486</a>: Launch Configuration: Advanced Options UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=30803">30803</a>: Add JRE Library Container page: Want to edit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36407">36407</a>: Exception in log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39514">39514</a>: Debug View Stack Frames Disappear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37171">37171</a>: NPE closing an Editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36496">36496</a>: "Watches" don't update when changing the selected debug target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38115">38115</a>: Browse dialog opened via "Add Jar" does not filter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37062">37062</a>: Newly added JRE flagged as default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29644">29644</a>: Should have "use default" checkbox for JRE selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39983">39983</a>: Apply/Revert not enabled correctly for JRE tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38672">38672</a>: Timing Hole in JDI test suite.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38804">38804</a>: Unused private fields in Socket*LaunchingConnectorImpl<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39878">39878</a>: Debug test failing on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39981">39981</a>: Mneumonic on the JRE tab<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 17, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38039">38039</a>: Support jar should be "ant" driven<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38749">38749</a>: NPE from DebugActionGroupsContentProvider on Platform Runtime Binary<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38783">38783</a>: Timing issue in RemoteAttachTests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39033">39033</a>: secondary scrapbook evaluations do not work<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 5, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38516">38516</a>: missing string in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38531">38531</a>: IllegalArgumentException "Source attachment path should be absolute"<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-June 3, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38199">38199</a>: NPE when trying eval from var view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38140">38140</a>: SnippetOpenOnSelectionAtion subclasses OpenAction although OpenAction isn't made for subclassing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18186">18186</a>: Peak-a-boo breakpoint after closing/opening project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34492">34492</a>: Parameters in Java Applet launch configuration.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36326">36326</a>: Stackframe label not getting updated when stepping over source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36530">36530</a>: Possibly wrong line-ordering in org.eclipse.jdt.internal.debug.ui.actions.StepIntoSelectionHandler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32681">32681</a>: Enabling condition should place cursor in condition text field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38371">38371</a>: Changes for JDT Core fix: JavaCore.newLibraryEntry(...)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 27, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37545">37545</a>: Wrong type gets opened in editor<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 13, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37216">37216</a>: Test failed due to "zip file closed"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=37264">37264</a>: NPE in test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36160">36160</a>: Java watch expressions not using getAdapter.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35422">35422</a>: j9 launcher times out too fast<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 29, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36795">36795</a>: VariablesView.populateDetailPaneFromSelection not prepared for IVariable where getValue()==null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36516">36516</a>: ClassCastException: MonitorAction not use getAdapter.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35436">35436</a>: Automated tests cannot prompt<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34359">34359</a>: Add Java Watch Expression dialog labels<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 22, 2003
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27445">27445</a>: [Dialogs] Dialog font should be used by jdt debug component<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35911">35911</a>: Hover variable value is trimmed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35268">35268</a>: Default classpath has to be selected twice to update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35729">35729</a>: SocketUtil.findUnusedLocalPort bug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35638">35638</a>: Run to line resumes wrong thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35384">35384</a>: InstructionPointerManager#fDebugTargetMap is never cleaned<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36408">36408</a>: Support ctrl+enter in breakpoint properties dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35982">35982</a>: Cannot edit JREs that are created using J9 plugin on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36534">36534</a>: 'Delete' not working in 'Installed JREs' and 'Detail Formatters' preferences pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35516">35516</a>: AssertFailed when launching applet<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36630">36630</a>: Change in SourceElementRequestorAdapter<br>
-</body>
-</html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_0_changes.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_0_changes.html
deleted file mode 100644
index b9fe5c6..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_0_changes.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<html>
-<head>
-<title>3.0 JDT Debug Change Notes</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
-<h1>3.0 JDT Debug Change Notes</h1>
-<p>This document describes important changes in the 3.0 JDT debugger, relative 
-  to the 2.1 release.</p>
-<h2>API Changes</h2>
-<h3>Java Breakpoint Listener Voting</h3>
-<p>Two methods on the <code>IJavaBreakpointListener</code> interface have changed 
-  return values from boolean to int. In releases prior to 3.0, listeners could 
-  only vote "suspend" or "don't suspend" when a breakpoint was hit, and "install" 
-  or "don't install" when a breakpoint was about to be installed. In 3.0, listeners 
-  can also vote "don't care" for either of these notifications. This allows clients 
-  to only make a decisive vote in situations that they care about. For "breakpoint 
-  hit" notifications, the breakpoint will suspend if any listeners vote to suspend 
-  or if all listeners vote "don't care". Similarly, for "breakpoint installing" 
-  notifications, the breakpoint will be installed if any listeners vote to install, 
-  or all listeners vote "don't care". In general, implementors should 
-  return DONT_CARE unless they have a strong opinion one way or the other. It 
-  is important to keep in mind, for example, that voting "suspend" will override 
-  any other listener's vote of "don't suspend".</p>
-<p>The affected methods are <code>breakpointHit(IJavaBreakpoint, IJavaThread)</code> 
-  and <code>installingBreakpoing(IJavaTarget, IJavaBreakpoint, IJavaType)</code>.</p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_1_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_1_buildnotes_jdt-debug.html
deleted file mode 100644
index 86d80c5..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_1_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,774 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-3.1 RC4
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101118">101118</a>: eclipse-SDK-3.1RC3-win32 - Exception processing async thread queue<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98160">98160</a>: Errors trying to install new JRE's<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-3.1 RC3
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99572">99572</a>: Preference page keyword 'Java' does not find 'Installed JREs'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100011">100011</a>: Preference page keyword: 'JDK' should find 'Installed JREs'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100068">100068</a>: CCE exception from class prepare breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=100137">100137</a>: Variables view: code assist does not work in details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99526">99526</a>: Class folders are being treated as archive files causing exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85133">85133</a>: refactoring: NPE in BreakpointUtils.addJavaBreakpointAttributes<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-3.1 RC2 - June 10, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96964">96964</a>: ClassCastException on JDIInterfaceType when debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96963">96963</a>: ClassCastException in ShowStratumAction with wrapper adapters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97479">97479</a>: Illegal arg exception during evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97577">97577</a>: unable to set watchpoint if cursor at EOL<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97840">97840</a>: Pref Page Java/Debug/Logical Structures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85665">85665</a>: New JRE container dialog shows empty combo<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96656">96656</a>: lots of dots rendered in debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97674">97674</a>: Changing value did not report error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97719">97719</a>: EventRequestManager.createStepRequest(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97843">97843</a>: Java logical structure dialog - problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97845">97845</a>: Pref Page Java/Debug/Step Filtering - single quotes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98256">98256</a>: Debugger failure freezing the IDE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97738">97738</a>: links to native methods broken in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78764">78764</a>: Exception breakpoint hangs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96820">96820</a>: JME during Source lookup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=97857">97857</a>: Code assist don't work inside variable view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99029">99029</a>: scrapbook does not respect background color<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-3.1 RC1 - May 27, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91516">91516</a>: An internal error occurred during: "Launching".<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95352">95352</a>: Reduce JDWP communications<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94408">94408</a>: VM disconnected exception updating monitors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94159">94159</a>: more efficient timeout check<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94223">94223</a>: Debugger - cannot modify final (non-static) fields in Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94971">94971</a>: Arguments page of Run/Debug has duplicated key accelerators<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88739">88739</a>: Edit JRE Dialog: Doubleclick should edit source att. / javadoc loc. dialogs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90242">90242</a>: Mnemonic collision if use VMArgumentsBlock and JavaJRETab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94211">94211</a>: Cannot add breakpoint to enum<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81416">81416</a>: Detail formatter dialog should give focus to detail pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95585">95585</a>: Couldn't set breakpoint anymore<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95679">95679</a>: Source not found<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95321">95321</a>: Missing link from Java Debug to Debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89559">89559</a>: Unable to remove source attachment on JRE lib (make empty)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95852">95852</a>: NPE when setting breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89835">89835</a>: NPE getting Logical structure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89935">89935</a>: Cipher.getInstance fails if using JRE without "Use default system libraries"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91516">91516</a>: An internal error occurred during: "Launching".<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95456">95456</a>: Source lookup path broken for alternate JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91268">91268</a>: changing a string value in the debugger, focus should be on the textarea.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96693">96693</a>: Inspect and Display fail with exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95216">95216</a>: Can not have spaces on a library path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96294">96294</a>: double clicking on a stack frame / hitting a breakpoint does not reveal the editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96338">96338</a>: AddExceptionDialog should pass null as scope to profit from new working set support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94687">94687</a>: Exception renaming project containing shared config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88181">88181</a>: Using I20050315-1100, I have critical refresh problems in the variable view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95335">95335</a>: Source Lookup Halts With Missing Archive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95944">95944</a>: Array indexes inconsistency after 10000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=95601">95601</a>: DCR: installed JREs transfer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94465">94465</a>: Java Core Dump where modifying value in the Variables View.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96668">96668</a>: Thread monitors not updated for wrapper adapters.<br>
-
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 12, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94201">94201</a>: Applet Contextual Launch Action broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94474">94474</a>: Unable to change source attachment on JRE jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82488">82488</a>: Open type does not work for enums<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94134">94134</a>: API spec reference to org.eclipse.jdt.launching.vmType extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94162">94162</a>: native lib path doesn't work yet<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94163">94163</a>: more than one native library per JAR?<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93325">93325</a>: Timing problem in AbstractTableRendering<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 9, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92349">92349</a>: Potential memory leak: CompletionEngine retained without active content assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80191">80191</a>: Link from exception in console to inner class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92845">92845</a>: [api] API methods added to IVMInstall<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83937">83937</a>: Timeout waiting for packet<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92581">92581</a>: add exception dialog: catch up to removal of all types cache<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74559">74559</a>: Memory View does not scroll properly on Linux<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-May 3, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89643">89643</a>: step filters confuse stepping in JSP stratum<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92712">92712</a>: IJavaStackFrame.isVarargs() named inconsistently<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69229">69229</a>: Importing Preferences overwrites existing classpath variable values<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78040">78040</a>: Viewing members in object causes out of memory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79919">79919</a>: Process terminated, VM left hanging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83022">83022</a>: "show type names" not working with detail formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92591">92591</a>: Variables button remains enabled for VM args when set to run in same JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92920">92920</a>: Remove internal constant from API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93140">93140</a>: Search for main methods can use smaller scope<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88065">88065</a>: Setting a JavaStratrumLineBreakpoint when an application server is attached is very slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75834">75834</a>: Breakpoint insert can block UI thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82573">82573</a>: formatting stack traces from Ant/java output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89544">89544</a>: [polish] inspect popup size not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89708">89708</a>: "No explicit return value" shown for Watch expression with runtime error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=93074">93074</a>: CCE when inspecting expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92862">92862</a>: VM Disconnected exceptions in my log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92934">92934</a>: Potential NPEs in VerboseWriter and SocketConnection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92992">92992</a>: potential NPEs<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 26, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90224">90224</a>: NPE in PopupDisplayAction.showPopup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91616">91616</a>: Unnecessary exported package<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91981">91981</a>: DeferredJavaThread should check if target supports monitor info before requesting it.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81337">81337</a>: Preference page for installed JREs changes title when setVisible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82850">82850</a>: Variable is not updated in the variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91776">91776</a>: Primitives show [+] when no children<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92141">92141</a>: Missing icon in DisplayView<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92192">92192</a>: Missing space after 'Searching for Errors in' message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=92358">92358</a>: "errors in project" dialog needs keyboard mnemonics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81034">81034</a>: internal error logged on edited stack trace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75692">75692</a>: The selected stack frame must be associated with a Java project in the workspace to perform an evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79896">79896</a>: ObjectCollectedException while attempting to resume<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 19, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91393">91393</a>: VMDisconnectedException and IllegalStateException when running JDT Debug suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91427">91427</a>: FIeldImpl could cache type() and typeName()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91354">91354</a>: Stepping with 'toString' improvement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88752">88752</a>: Exception processing async thread queue: NullPointerException in ASTInstructionCompiler<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90790">90790</a>: [Detail Formatter] Dot-Completion -> slow<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 14, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86541">86541</a>: Investigate if we can avoid computing bindings when creating breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=91345">91345</a>: Jarring jdt.debug plugin breaks debugger on mac...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51433">51433</a>: JavaDebugImages has a ton of constants<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 12, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89585">89585</a>: CCE performing eval with for loop and autoboxing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88931">88931</a>: VariableClasspathEntry cannot be compared<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75972">75972</a>: StepIntoSelection action is no longer disabled for non JDT debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77675">77675</a>: [artwork] Deadlocked Threads should be more obvious<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81249">81249</a>: toString() as variable label causes "no suspended threads"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88454">88454</a>: Should avoid explicit checks for [I]FileEditorInput<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89360">89360</a>: Warning in jdt launching java doc generation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89936">89936</a>: Breakpoint with "Suspend VM" doesn't show correct thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90507">90507</a>: equals for CONTAINER RuntimeClasspathEntry's<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86692">86692</a>: JDI client is no longer standalone<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90805">90805</a>: Drop to frame failed during evaluation, with no message in error dialog, and evaluation flag not cleared<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88726">88726</a>: Debugging J2ME apps on Sun WTK 1.04 not possible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73463">73463</a>: NPE from JavaDebugOptionsManager on starting runtime target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73259">73259</a>: Memory footprint of JavaDebugOptionsManager<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 5, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75499">75499</a>: Step into selection and displaying accelerator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85595">85595</a>: Core exception from Java Stack trace console<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-April 1, 2005 - M6
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89717">89717</a>: Detail Formatter and Logical Structure "Select Type" dialogs don't show interfaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89581">89581</a>: Content assist in Variables Detail Pane does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89566">89566</a>: Searching for installed JREs broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89111">89111</a>: [Mac] Can't Debug<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89932">89932</a>: Debugger shows dialog on each(!) breakpoint hit + NPE in .log<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Mar 29, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88899">88899</a>: Compilation error in ToggleBreakpointAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78503">78503</a>: poor performance opening the "run as" menu<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86390">86390</a>: [API] Review of "new" memory view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88793">88793</a>: Add support for JFace page change notification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86412">86412</a>: Performance results for testConditionalBreakpoint not useful on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89013">89013</a>: Changes to ResultCollector --> API<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Mar 24, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88864">88864</a>: use the new classpath attribute for Javadoc locations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88674">88674</a>: NPE validating breakpoint location<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Mar 22, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88100">88100</a>: debug depends on deleted JDT Core API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66538">66538</a>: Breakpoint creation should use marker modification rules<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=88689">88689</a>: Remove references to JLS2<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86384">86384</a>: [API] support for "native" classpath entries<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Mar 15, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87397">87397</a>: org.eclipse.debug.core.DebugException: Invalid stack frame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75607">75607</a>: HCR "smart drop to frame" failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74766">74766</a>: Prompted multiple times about failed hot swap<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87039">87039</a>: JRockit VM Installs fails to locate javadoc location.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86887">86887</a>: Conditions do not work for JSP breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86386">86386</a>: [API] Support for javadoc location per jar<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Mar 8, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=87071">87071</a>: Adding watch expression causes an exception (developing SWT aplication)<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Mar 1, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86028">86028</a>: JDIDebugTarget adds breakpoints when terminated/disconnect<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72492">72492</a>: can not set a CLASSPATH component to a drive letter in "run configs"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85074">85074</a>: Java object images look squished in expressions view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86381">86381</a>: AIOOBE performing evaluation in the context of an enum without source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85966">85966</a>: DropToFrameButton communicates with target in UI Thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86278">86278</a>: Deadlock while debugging using M5a<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86564">86564</a>: jdi LocationTest fails after copyright notice change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77234">77234</a>: Detail formatter doesn't see inherited method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79706">79706</a>: Detail formatter fails in simple case<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64696">64696</a>: Allow interfaces in detail formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86632">86632</a>: logical structure for Vector failing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85204">85204</a>: [API] Externalize org.eclipse.jdt.internal.launching.JavaSourceLookupUtil<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 18, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85829">85829</a>: 5.0 code assist in variables view details area not working<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84492">84492</a>: ClassNotLoadedException in Variables view detail<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 17, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85434">85434</a>: logical structure not working for map entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85686">85686</a>: Specific System Library is not stored for project in some case<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85254">85254</a>: unable to select interface when defining new logical structure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73203">73203</a>: Support for evaluations in the context of Java 5.0 class with no source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85480">85480</a>: NullPointerException in ValidBreakpointLocationLocator.visit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85433">85433</a>: ClassNotLoadedException while performing completion on local variables in Display View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85473">85473</a>: Can't edit/restore contributed logical structures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85663">85663</a>: Debug view does not show all threads<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 15, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80326">80326</a>: JavaOwnedMonitor returns wrong parent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=58712">58712</a>: Mixed stratum info displayed in the debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84798">84798</a>: InvalidTypeException as Expression is evaluated.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75599">75599</a>: Breakpoint at start of a method set at the wrong location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85159">85159</a>: Breakpoint location tests failed in nightly build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85241">85241</a>: ArrayIndexOutOfBoundsException when displaying collections<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12481">12481</a>: AST Exp Eval: switch statement is not implemented<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85325">85325</a>: SIOOBE in 1.5 method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85344">85344</a>: Error evaluating logical structure value for Map in Java 5.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83201">83201</a>: stepping over loses focus on the debug window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80071">80071</a>: Rapid stepping gets ahead of UI updates<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83507">83507</a>: run to line test failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84999">84999</a>: can no longer set line breakpoint in external files<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 8, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84271">84271</a>: Dialog font use: Java logical structure Add dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83745">83745</a>: show outer type name when "show qualified names" is off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84392">84392</a>: Evaluation with local type variable fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80069">80069</a>: NPE in SocketConnection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81428">81428</a>: JDI code requires use of optional timeout argument<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83962">83962</a>: Timeout exceptions thrown after response received.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84259">84259</a>: ArrayIndexOutOfBoundsException when debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=84473">84473</a>: Unable to timeout when attaching to a bogus debug port<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73853">73853</a>: Allow arbitrary classes in detail formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82891">82891</a>: Source lookup based upon the classpath info stored in manifest file in a JAR<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Feb 1, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78534">78534</a>: ConcurrentModificationException in ThreadMonitorManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83825">83825</a>: IllegalArgumentException from JDIReferenceType.getGenericName<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83558">83558</a>: Edit "error" logical structure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73201">73201</a>: Improving jdt.debug.ui to display generic information<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83541">83541</a>: Cannot find a way to change char value to special character<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71936">71936</a>: Cannot call private methods<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 25, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73200">73200</a>: Support for autoboxing/inboxing in evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83194">83194</a>: No selection in JRE combo when changing from "default"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83053">83053</a>: Autoboxing not working for varargs method invocation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70625">70625</a>: [J2SE 5] JDI and JDWP enhancements for generics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70626">70626</a>: [J2SE 5] JDI and JDWP enhancements for enums<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70627">70627</a>: [J2SE 5] JDI and JDWP enhancements for varargs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77757">77757</a>: logical structure not working when debug JRE different from build JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83410">83410</a>: Compile errors in Nightly Build (N20050121-0010)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82199">82199</a>: Variables view doesn't update for logical structure changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81003">81003</a>: logical structure syntax/runtime error not handled well<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=83419">83419</a>: JavaSnippetEditor references deprecated ICompletionRequestor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76534">76534</a>: Can't perform evaluations inside inner class with constructor parameters<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 18, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82509">82509</a>: Incorrect use of preferences in ExpressionInputDialog; other cleanup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82278">82278</a>: Logical structure: "value" mode should be elegible for recursive logical structure processing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82789">82789</a>: StandardSourcePathProvider and dealing with IRuntimeClasspathEntry.OTHER entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81658">81658</a>: Step Over treated as Resume when conditional breakpoint encountered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82485">82485</a>: navigation to variable pref pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82587">82587</a>: Cannot set conditional breakpoint - no "Common" properties page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82579">82579</a>: provide access to class loader for types in java debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82397">82397</a>: Use of deprecated method in JavaDetailFormatterPreferencePage<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Jan 11, 2005
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81477">81477</a>: Remote debugger gets stuck....<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80333">80333</a>: Logical structure polish items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82244">82244</a>: test failure: suspend on uncaught exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81870">81870</a>: Installed JRE should indicate if it is 5.0 or not<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81563">81563</a>: potential NPE in JDIModelPresentation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82270">82270</a>: compilation error breakpoint does not suspend<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82284">82284</a>: run to line does not clean up event listeners<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81042">81042</a>: Double click to edit Logical structures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=36914">36914</a>: Pgm stopping because of a breakpoint or exception should cancel "Run to Line" action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82281">82281</a>: logical structures table should sort on name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72013">72013</a>: TimeoutException while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82198">82198</a>: Provide actions to edit logical structures in variables views<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73475">73475</a>: support for enumerations in evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82366">82366</a>: Change object value dialog; text should have vertical scrollbar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=82151">82151</a>: Double-click should expand in Variables view<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-M4, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81043">81043</a>: Java logical structure edit dialog Browse button needs ellipsis<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81040">81040</a>: Leak in submissions from Java stack trace page participant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80977">80977</a>: transient test failures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81519">81519</a>: testNonDeferredExpression failure<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 14, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80288">80288</a>: Code assist support in Java logical structure preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77449">77449</a>: tell user when monitor info unavailable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76616">76616</a>: Stratum Stepping incorrect inside a switch case statement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76862">76862</a>: support for wrappering models to display extra info from underlying models<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80879">80879</a>: NPE in JavaLogicalStructures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80332">80332</a>: logical structure factories<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74687">74687</a>: Step Into Selection fails in inner type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80046">80046</a>: "(no explicit return value)" from non-void evaluations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78960">78960</a>: watch expression testStepping fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80895">80895</a>: Keybindings don't work when debug view is not visible.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81276">81276</a>: evaluation engine unable to resolve method call<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Dec 7, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79849">79849</a>: DBCS: "Exception" should not be translated [3.0.2 candidate]<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80069">80069</a>: NPE in SocketConnection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79832">79832</a>: JDIArrayEntryVariable returns the wrong signature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79839">79839</a>: String value incorrectly initialized for evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79838">79838</a>: Allow user to choose between setting literal String value and performing evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78847">78847</a>: Support evaluations for ctrl+s in the details pane<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70629">70629</a>: [J2SE 5] JDI support for extensible connectors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71734">71734</a>: [J2SE 5] Support for timeout on connectors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77239">77239</a>: navigating an ill-formed stack trace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79450">79450</a>: flashing cursor, invalid stack frames, stepping problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78418">78418</a>: user defined logical structures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79486">79486</a>: var shows as unchanged after refresh of view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78597">78597</a>: Duplicate mnemonic on exception breakpoint properties page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80068">80068</a>: Leak: ExpressionInputDialog is not disposed<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 30, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53917">53917</a>: Run dialog's tab view reset to first tab each time a config is selected.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79465">79465</a>: Extension point names need to be externalized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78449">78449</a>: Closed project error message problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78627">78627</a>: Duplicate CHANGE events from monitor information<br> 
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 23, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78790">78790</a>: Use of deprecated method in ValidBreakpointLocationLocator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78866">78866</a>: Using new registry API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=56057">56057</a>: AssignValueAction should do evaluations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78853">78853</a>: Variable value assignment allows for type mismatch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78737">78737</a>: NPE from JavaLogicalStructure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78626">78626</a>: debug view loses selection when unrelated source is changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78710">78710</a>: Exceptions in log when terminating a session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78900">78900</a>: AIOOBE in ASTInstructionCompiler for super method call<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79032">79032</a>: Highlight current String value in change value dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79117">79117</a>: Main class in Run dialog should chop trailing whitespace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77770">77770</a>: Adding a non-existant variable to the classpath<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 16, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74597">74597</a>: Code assist enabled in breakpoint condition when condition disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34341">34341</a>: Remove All Expressions enabled state is not updated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72417">72417</a>: [Java Debug Hover] Does not escape characters for HTML output<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78249">78249</a>: Debug hover not presented in constructors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78302">78302</a>: hover not working for "this"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77886">77886</a>: NPE launching a 1.5 VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34478">34478</a>: Properties (process info) only from debug target or process<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77680">77680</a>: HCR failed message for terminated VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78366">78366</a>: <not responding> in Breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71885">71885</a>: Eclipse hangs under heavy threading<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76932">76932</a>: Refactoring of the class name works bad for "Run favorites"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78234">78234</a>: Breakpoint condition remains in error after code assist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78245">78245</a>: Breakpoints in enums not correctly created.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78422">78422</a>: test failure: testSimpleLineCounter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78246">78246</a>: Method breakpoints on enum constructor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78647">78647</a>: Breakpoint can be added on an invalid location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67439">67439</a>: Support for hidden launches so they don't show in launch view.<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 9, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77798">77798</a>: JDIModelPresentation.getPrimitiveValueTypeSignature(IJavaValue)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77788">77788</a>: Java Stack trace console color does not update until forced to redraw<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78094">78094</a>: DisplayViewerConfiguration uses deprecated super constructor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66453">66453</a>: String concatenation gives unexpected result in conditional breakpoint expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76960">76960</a>: Add javadoc location for Java 5.0 installed JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76520">76520</a>: Add listener mechanism to detail formatter manager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77730">77730</a>: Stack trace console could provide some hint when it is empty<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Nov 5, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74444">74444</a>: Unable to paste into Java stack trace console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77040">77040</a>: Children of 'waiting threads' are not displayed in the debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77064">77064</a>: clear does not work in stack trace console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74605">74605</a>: "Select" strings in scoping selection dialogs should end in ':'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76990">76990</a>: JDI Error if exception thrown in breakpoint condition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66417">66417</a>: VMDisconnectedException logged from source lookup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76249">76249</a>: Thread Monitor Manager refresh on evaluation events<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74721">74721</a>: Remove all terminated launches remains enabled in the console view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75977">75977</a>: Scrapbook: internal error - unable to obtain an execution context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74613">74613</a>: Missing mnemonic for Select Type dialog for detail formatters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77190">77190</a>: nightly test failures due to empty stack exception in eval engine<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64484">64484</a>: Exception occurred while terminating a target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70955">70955</a>: Empty string as a program argument not accepted.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28627">28627</a>: same tooltip for all symbols with same name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76516">76516</a>: Color deadlocked threads red<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76251">76251</a>: Monitor information remains when suspending entire VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74477">74477</a>: Empty display view state persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76401">76401</a>: Refactoring exception performing drag and drop<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77019">77019</a>: java logical structure descriptions missing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68809">68809</a>: Support for breakpoints in 1.5 source code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77120">77120</a>: stack trace console not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77378">77378</a>: deadlock detection delayed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76255">76255</a>: UnsupportedOperationException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77786">77786</a>: NPE from Java debug hover<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74689">74689</a>: automated test for skip all breakpoint<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 26, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75656">75656</a>: Variable Detail options and disabled detail formatters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76385">76385</a>: NPE in JDIDebugTarget.getDefaultStratum<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76812">76812</a>: Vm detection fails on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76742">76742</a>: Found in .log: IncompatibleThreadStateException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76513">76513</a>: Source not found when clicking on an exception in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73199">73199</a>: Support for varargs method in evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76510">76510</a>: Show deadlocks in the debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76860">76860</a>: watch expression tests fail<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75201">75201</a>: MacOSXVMInstallType.detectInstallLocation() always returns null if findVMInstall succeeds<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71853">71853</a>: When debugging a program, it would be nice if the tooltip shown when hovering over a variable in the editor, included a ToString call.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75408">75408</a>: extensible java logical structures<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 19, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76089">76089</a>: The command 'org.eclipse.jdt.debug.ui.Watch' is not defined<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75866">75866</a>: Deleted archive on source path causes launch failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74266">74266</a>: NPE in Hcr Test<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76204">76204</a>: ThreadMonitorManager active when info toggle off<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76220">76220</a>: Thread and Monitor model incorrectly computes changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34941">34941</a>: RC2 Conditional breakpoint excruciatingly slow, can't suspend or can't step when suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72507">72507</a>: Eclipse froze when expanding node in Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75917">75917</a>: Bad backslash escapes in property strings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76171">76171</a>: Test failure: testHitCountException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75280">75280</a>: Integrate monitor information in debug view<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 12, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75643">75643</a>: class cast exception evaluating detail formatter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=38746">38746</a>: Preferences->Java->Installed JREs->Add hangs eclipse<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Oct 5, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73934">73934</a>: Update 'run to line' action to work in Java 5.0 code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57258">57258</a>: Option to show toString values in Variables View<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=75500">75500</a>: Step into Selection --> Step Into Selection<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 28, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74188">74188</a>: Java RunToLine action is not available for debugger wraps around JDT<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 23, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73992">73992</a>: Breakpoints added / removed in the incorrect type (project not considered)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74601">74601</a>: Add buttons for restricting Exception brkpts broken<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 21, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73864">73864</a>: NPE in BreakpointLocationVerifierJob when doubleclicking ruler outside of type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74085">74085</a>: Exception hyperlink conflicts with stack trace<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74262">74262</a>: Error during project rename<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73822">73822</a>: Error while evaluating a method call on a generic type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73987">73987</a>: Move plugins off the deprecated plugin pref init<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74108">74108</a>: Change the state of a JSP breakpoint when debugging the JSP causing a NPE<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 14, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73486">73486</a>: ArrayStoreException getting available Strata<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70166">70166</a>: browsing working directory does track to correct spot<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73680">73680</a>: Array index out of bounds doing HCR<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71824">71824</a>: Allow choice of stratum when stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73232">73232</a>: Line breakpoint incorrectly converted into a data watch point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73624">73624</a>: Don't prompt for main class when main class is selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73794">73794</a>: Problem with break and continue statements in evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68810">68810</a>: Support for evaluations using 1.5 source code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73198">73198</a>: Support for enhanced for loop in evaluation<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-Sept 7, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72780">72780</a>: Debug shouldn't reference internal class ISourceElementRequestor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49775">49775</a>: Package filter list not properly displayed when too many items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72660">72660</a>: icons/full/obj16/class_obj.gif does not exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72792">72792</a>: NPE running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72801">72801</a>: zip file closed exception running test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73261">73261</a>: 'Toggle Line Breakpoint' doesn't remove existing breakpoint if used in an anonymous class declaration in a field declaration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70011">70011</a>: Installed JREs missing libraries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69169">69169</a>: Allow cancel when creating exception breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73018">73018</a>: NPE in ValidBreakpointLocationLocator<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-August 31, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72542">72542</a>: HCR when stopped on a Stratum Breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50690">50690</a>: Breakpoint condition compiler should not matter about NON-NLS strings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72798">72798</a>: invalid stack frame exception getting compilation error for a frame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72795">72795</a>: invalid stack frame exceptions running test suite<br>	
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72553">72553</a>: Missized Add button on exception filter page<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-August 24, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62200">62200</a>: Only persist DisplayView contents on view closure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72371">72371</a>: Streams potentially left open on exception(s)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72431">72431</a>: Debugger does not install line breakpoints in all locations for a line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=72305">72305</a>: JDIModelPresentation uses resource name with IJavaStratumLineBreakpoint<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-August 17, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71441">71441</a>: DebugException: Unable to retrieve stack frame - thread not suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54913">54913</a>: Logical structures do not work for generic types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=59171">59171</a>: new user entries for classpath launch configuration are always added at the bottom<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71752">71752</a>: Inspect window outside screen<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71698">71698</a>: ExceptionFilterEditor does not correctly set dialog font on buttons<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-August 10, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71579">71579</a>: Debug Test Failures on GTK - empty selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=67852">67852</a>: Properties... on Breakpoints view should be Properties<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-August 3, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=1670">1670</a>: Indication of synchronized stack frames (1GJOWP5)<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70993">70993</a>: incompatible thread state from drop to frame action<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66204">66204</a>: Add JRE dialog does not resize properly in vertical<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=43554">43554</a>: Creating a breakpoint on method signature should use a method entry breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69826">69826</a>: NPE while debugging<br>
-
-<h1>
-Eclipse Platform Build Notes <br>
-Java Debug</h1>
-July 27, 2004
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69818">69818</a>: NPE when launching with Debugger<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70567">70567</a>: Project field should have group on Main tab<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69180">69180</a>: Double check on the same condition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70373">70373</a>: Make "Drop to Frame" action available in the context menu for IJavaStackFrame adapters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70623">70623</a>: TVT3.0: No mnemonic on Run Last launched panel<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53102">53102</a>: Breakpoint not installed though accepted by location verification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70744">70744</a>:	Breakpoint location validation error.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68872">68872</a>: Error in JavaFamily's plugin.xml<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69039">69039</a>: Duplicate mnemonic on Classpath tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69736">69736</a>: IWAV0138E Remote VM terminated too soon error - when accessing beaninfo from a project that does not contain JRE_CONTAINER classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68677">68677</a>: <not responding> label for restored bkp in source outside jdt project<br>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_1_changes.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_1_changes.html
deleted file mode 100644
index 41b5128..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_1_changes.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html>
-<head>
-<title>3.0 JDT Debug Change Notes</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
-<h1>3.1 JDT Debug Change Notes</h1>
-<p>This document describes important changes in the 3.1 JDT debugger, relative 
-  to the 3.0 release.</p>
-<h2>New Features</h2>
-<h3>1.5 Support</h3>
-<p>Generic signatures, isEnum, isVarArgs</p>
-<h3>Locks & Monitors</h3>
-<p>IJavaObject and utils JavaDebugUtils.</p>
-<h3>Default VM agruments & Java version (IVMInstall)</h3>
-<h3>JavaLaunchDelegate</h3>
-<p>TODO: New API class to subclass</p>
-<h3>Native classpath entries</h3>
-<h3>Java doc location per JRE library</h3>
-<h3>Translate runtimeclasspath entries to source containers (JavaRuntime)</h3>
-<h2>API Changes</h2>
-<h3> </h3>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_2_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_2_buildnotes_jdt-debug.html
deleted file mode 100644
index a21e446..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_2_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,461 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-<h1> Eclipse 3.2 Java Debug Build Notes </h1>
-
-<h2>3.2 RC6 - May 26, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143579">143579</a>: Adding library fails when contributing 2 VMs<br>
-
-<h2>3.2 RC4 - May 12, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140828">140828</a>: JRE_CONTAINER is not directly compatible on Mac<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140179">140179</a>: Name of default JDK set to Home<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140547">140547</a>: NoSuchElementException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140874">140874</a>: No version range specified when requiring bundles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140888">140888</a>: No version range specified when requiring bundles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136372">136372</a>: Remove transient 3.2 JRE container EE formats<br>
-
-<h2>3.2 RC3 - May 05, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125868">125868</a>: Invalid Thread Access when launching<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139579">139579</a>: "New Scrapbook Page" Icon Suffers Gigantism<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139581">139581</a>: JDT launching has an unnamed marker type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137339">137339</a>: Edit JRE dialog buttons are not visible when vmargs is very long<br>
-
-<h2>3.2 RC2 - April 28, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128900">128900</a>: Debug view steals focus when breakpoint hit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136670">136670</a>: StandardSourcePathProvider causes expensive JAR verification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134865">134865</a>: VMDisconnectedException not caught by breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124274">124274</a>: debug keybindings not active on first launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120596">120596</a>: Should warn when no exact match for execution environment on build path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132619">132619</a>: Can't Add Installed JREs with Simplified Chinese folder name.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136146">136146</a>: JRE container with EE is not backwards compatible with 3.1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137372">137372</a>: warning for EE/JRE mismatch does not appear when JRE deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137572">137572</a>: not present exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112774">112774</a>: Performance of JavaStackTraceHyperlink.getSourceElement()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138227">138227</a>: Need new property tester to be used by JUnit 4<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120620">120620</a>: Static variables show up twice in Find Variables Dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127025">127025</a>: system thread filter loses selection/collapses on first invocation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127232">127232</a>: variables view loses contents<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133623">133623</a>: Show Source action does not trigger lookup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136516">136516</a>: recognize J9 foundation JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137513">137513</a>: Internal error when stepping quickly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=137513">137513</a>: Internal error when stepping quickly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118512">118512</a>: NPE evaluating detail formatter calling method without this.<br>
-
-<h2>3.2 RC1 - April 13, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133914">133914</a>: Instance Filter Breakpoint Selection dialog is not resizable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89474">89474</a>: [polish] Installed JRE pref page: Modify multiple attributes at once<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=8644">8644</a>: Can add modification watchpoint to final field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130916">130916</a>: can set method breakpoint on interface and watchpoint on interface field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102446">102446</a>: Intalled JREs preference pages not in synch with help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106871">106871</a>: Top stack frame null at method refresh in org.eclipse.jdt.internal.debug.ui.actions.ShowSystemThreadsAction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134114">134114</a>: [Java 1.5] Test failure in StepIntoSelectionTests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135270">135270</a>: Potential NPE in ToggleBreakpointAdapter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=107385">107385</a>: Detail formatter on interface cannot be editted or removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46315">46315</a>: Scrapbook actions wrongly disabled after inspect or execute<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=89636">89636</a>: Undo/Redo does not work in Scrapbook editor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109073">109073</a>: Classpath container missing from runtime classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114604">114604</a>: Non-Line breakpoints do not update their selection ranges after refactorings which change the type or package name.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123588">123588</a>: Losing key binding in scrapbook page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132986">132986</a>: new variables view: show id in first column or a special column for the id<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133540">133540</a>: thread does not show suspended on class load breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=135658">135658</a>: Breakpoint properties dialog quickly shows an error message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132543">132543</a>: Method breakpoint does not work on generic method with bounded type variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105767">105767</a>: Javadoc missing from IRuntimeClasspathEntry entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120627">120627</a>: Javadoc location reappears after I've cleared it<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=134694">134694</a>: Installed JRE preference page should suggest name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136383">136383</a>: [NPE] changing filters when type is selected in LCD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136386">136386</a>: [LCD] run/debug button enabled when it shouldn't be<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=136638">136638</a>: NPE in debug UI<br>
-
-<h2>3.2 Milestone 6 - March 31, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133711">133711</a>: [Breakpoints] Breakpoint hit count busted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132750">132750</a>: need to adopt ICU4J APIs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133217">133217</a>: Suspend policy combo should be read only<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132863">132863</a>: Launching a simple java program in a plugin project needs ages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133512">133512</a>: NPE when clicking on a stacktrace<br>
-
-<h2>March 21, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77125">77125</a>: Preference for suspending VM on breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74612">74612</a>: Step filtering pref page should allow you to enable step filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124045">124045</a>: Launching Java 5 VM in debug mode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110837">110837</a>: javax.crypto.KeyAgreement.getInstance(String) throws exception in IDE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131414">131414</a>: labels don't update when primitive options changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=131557">131557</a>: Import JRE definition settings also for already existing locations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27383">27383</a>: classpath entries get exported into other projects even though I said not to [build path]<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96248">96248</a>: Support for multiple src roots in archive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132337">132337</a>: suspend on uncaught exceptions broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118122">118122</a>: Removing External JARS within an Installed JRE definition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120619">120619</a>: Add/Edit JRE dialog: remove should remove src attachment, not jar<br>
-
-<h2>March 14, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=80744">80744</a>: Ability to inspect exception object at exception beak point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130717">130717</a>: Runtime JRE Combo on Main lauch configuration tab should show more items<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94212">94212</a>: Cannot set method breakpoint in generics<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104754">104754</a>: No command for Run > Watch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129524">129524</a>: Inconsistent terminology for derived types in pop-up menus<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130743">130743</a>: SWT 'setdata' event now contains item index<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116336">116336</a>: Using Enums breaks Debbugger's "Step into selection" feature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130369">130369</a>: Additional menu polishing<br>
-
-<h2>March 7, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130145">130145</a>: Method entry breakpoint fails on method with Enum parameter<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126938">126938</a>: Cannot import Installed JREs from preference file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128307">128307</a>: Incorrect thread label after stepping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128909">128909</a>: Preferences (Installed JREs) overridden during startup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=130243">130243</a>: EventRequestManagerImpl holding onto event requests forever<br>
-
-<h2>February 28, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125590">125590</a>: consider caching system properties for IVMInstall<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106789">106789</a>: Run menu: Folder selector shows files, too<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120135">120135</a>: catch up with new type rename refactoring support<br>
-
-<h2>February 21, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108747">108747</a>: applet parameters in random order<br>
-
-<h2>3.2 M5 - February 17, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126437">126437</a>: Incorrect error reporting in AbstractJavaLaunchConfigurationDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124565">124565</a>: Change Object Value dialog adds new Group each time "Input literal text" is selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125196">125196</a>: Installed JREs preference page layout problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127136">127136</a>: Incorrect logic in AppletMainTab.handleSearchButtonSelected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120123">120123</a>: maintain config resource mapping during refactorings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127150">127150</a>: Dialog missing help button<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127195">127195</a>: Problems after project rename<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123284">123284</a>: Environment UI tweaks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127298">127298</a>: filtering label does not expand for font changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122746">122746</a>: JavaDebugHover.getHoverInfo(...) logs exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127100">127100</a>: ShowSystemThreadsAction is not using getAdapter to retrieve the associated IJavaThread object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126515">126515</a>: NPE when retrieving a non-existent field on an IJavaObject<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127204">127204</a>: NPE in LaunchView$6.run<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127353">127353</a>: grammar in Refactoring messages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127350">127350</a>: Review JDTDebugRefactoringUtil.getJavaTypeLaunchConfigurations(String)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127156">127156</a>: package move launch config update problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126942">126942</a>: AIOB during launch<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127545">127545</a>: widget disposed in Expressions view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127800">127800</a>: NPE from Java debug hover<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=128052">128052</a>: Thread Groups always on in target workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127815">127815</a>: First invocation of "run to line" does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=127924">127924</a>: Leak: JavaInspectExpression is not disposed<br>
-
-<h2>February 7, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126183">126183</a>: behavior change in IJavaProject.findType(name)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126244">126244</a>: Exception changing variable value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125661">125661</a>: Javadoc is not generated for jdt.launching.environments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124137">124137</a>: unable to retrieve system properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12018">12018</a>: show thread groups in the Debug view<br>
-
-<h2>January 31, 2006</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>Added new API class for subclassing when creating Java launch tabs - JavaLaunchTab.</li>
-  <li>New extension point <code>org.eclipse.jdt.launching.vmInstalls</code> to 
-    contribute read-only JRE configurations</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124828">124828</a>: A class with varargs in main method cannot run as Java Application<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109211">109211</a>: [api] Require public api to extend Java Launch Configuration UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101843">101843</a>: allow debugger to provide watch expression for var/register<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125332">125332</a>: Compile error in test suite (N20060126-0010)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119922">119922</a>: mechanism to contribute VM install<br>
-
-<h2>January 24, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124418">124418</a>: JavaDebugPreferencePage and incorrect preference stores<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124491">124491</a>: Deadlock in EnvironmentsManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124137">124137</a>: unable to retrieve system properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124419">124419</a>: J9 Preference page not setting the dialog font on the notice string<br>
-
-<h2>January 17, 2006</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>New, optional API for IVMInstall. VM installs may optionally implement IVMInstall3, 
-    providing access to system properties. A default implementation has been provided 
-    in AbstractVMInstall.</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115150">115150</a>: Exception and Class load breakpoint should use new type selection dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105573">105573</a>: suspend at uncaught exception shows compiler warning<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28792">28792</a>: New created Java Exception Breakpoint isn't selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=71549">71549</a>: 'Add Java Exception Breakpoint' dialog should support multiselections<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=121341">121341</a>: dot dot dot<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117289">117289</a>: VMDefinitionsContainer#parseXMLIntoContainer() reads an XML file with wrong encoding.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119918">119918</a>: API to get system properties from a vm install<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122338">122338</a>: Installed JRE UI message confusing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=123860">123860</a>: Java launch shortcuts don't assign resource to configs<br>
-
-<h2>January 10, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=122751">122751</a>: SnippetDocumentFactory is not needed.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120943">120943</a>: Cannot select Default option in working directory block<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114867">114867</a>: Launching connector implementation of eclipse reports TimeoutException while Sun's implementation works<br>
-
-<h2>3.2 M4</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119924">119924</a>: Build path not updated when default execution environment changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120385">120385</a>: transport error = -1<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117717">117717</a>: NPE in BreakpointRenameTypeParticipant when renaming type in cu without primary type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118076">118076</a>: ResourceException: Problems encountered while deleting resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120533">120533</a>: strange name for unresolved JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=120886">120886</a>: debug test not cleaning before next test runs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114647">114647</a>: Run as menu slow in editor for applet<br>
-
-<h2>December 12, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li>API has been added in support of execution environments. An execution environment 
-    describes features of a runtime - for example, J2SE-1.4. A new API package 
-    has been added - <code>org.eclipse.jdt.launching.environments</code>, as well 
-    as a new preference page for managing environments. An extension point (<code>org.eclipse.jdt.launching.executionEnvironments</code>) 
-    has beed added to allow for an extensible set of execution environments to 
-    be contributed to the platform.</li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115015">115015</a>: Installed JRE page needs a "Duplicate" feature.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119572">119572</a>: Typo in IExecutionEnvironment javadoc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119636">119636</a>: Catch up to changes in LazyJavaCompletionProposal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119761">119761</a>: Typo on EE preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=117516">117516</a>: Make JDT .java agnostic<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119371">119371</a>: A missing EE optional attribute causes an SWT error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119390">119390</a>: NPE from<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119462">119462</a>: EE checkbox table does not refresh correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119581">119581</a>: EE preference page flags bogus errors and does not save.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119814">119814</a>: Execution environment ID may contain forward slashes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113909">113909</a>: Support for execution environments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118232">118232</a>: Error in MethodActionFilter.testAttribute(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119926">119926</a>: Installed JREs page generates bad names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119611">119611</a>: Java Stack Trace Console: source link does not work without space before type name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119911">119911</a>: Graphic disposed error on Execution Environments preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119916">119916</a>: Execution Environment preference page breaks Installed JREs Copy...<br>
-
-<h2>December 6, 2005</h2>
-<h3>Enhancements</h3>
-<ul>
-  <li>New API action for Java debugger - JavaBreakpointPropertiesRulerActionDelegate</li>
-</ul>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=116291">116291</a>: Cannot resume all threads<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112613">112613</a>: Debug's Breakpoint actions act on remote stuff<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=118635">118635</a>: Duplicate breakpoints created for file not on buildpath<br>
-
-<h2>November 29, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108502">108502</a>: action filters for variables and expressions shold be combined<br>
-
-<h2>November 22, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49115">49115</a>: Cleanup on VMDisconnectException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114590">114590</a>: breakpoint checked state problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=115618">115618</a>: Mnemonics collision on Arguments tab of java launch config dialogs<br>
-
-<h2>November 8, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114609">114609</a>: Java main tab/shortcut should use new type selection dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114166">114166</a>: Refactoring of 'Main' tab for Java type launch configurations<br>
-
-<h2>November 2, 2005 - M3</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114484">114484</a>: Installed JDK preference page broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114589">114589</a>: NPE invoking content assist in var view<br>
-
-<h2>October 31, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113697">113697</a>: Added libraies to JRE not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113857">113857</a>: NPE in org.eclipse.jdt.internal.corext.util.JavaModelUtil.getAllSuperTypes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99810">99810</a>: ClassLoadBreakpoint not updated after refactoring<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99803">99803</a>: Line Breakpoint Label not updated after refactoring<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99807">99807</a>: Breakpoint removed after renaming a class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112232">112232</a>: Changing home directory of installed JRE does not update system libraries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113852">113852</a>: NPE in display view when code assist with no debugger context<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=114081">114081</a>: Undo fails when renaming type with breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=96044">96044</a>: Breakpoint enable/disable state not preserved during refactoring<br>
-
-<h2>October 25, 2005</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113154">113154</a>: launchable main type not correctly detected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110955">110955</a>: NPE in JavaElementPropertyTester<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112456">112456</a>: Would like a VM install change event for VM arguments property<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=113488">113488</a>: exception in scrapbook page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29565">29565</a>: Working Directory UI<br>
-
-<h2>October 18, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li> <code>IVMInstallChangedListener</code> has been enhanced to provide change 
-    notification for VM arguments via a property change event. A new property 
-    identifier, <code>PROPERTY_VM_ARGUMENTS</code>, has been added to indicate 
-    VM arguments have changed.</li>
-  <li>Property tests have been added to the core Java debug plug-in (org.eclipse.jdt.debug), 
-    to support launch short enablement expressions. By pushing common property 
-    tests down to the core Java debug plug-in, more launch shortcut enablement 
-    expressions will run even though their plug-in may noe be loaded (as the Java 
-    debug plug-in is loaded earlier on), resulting in fewew choices in the run/debug 
-    cascade menus. Property tests have been added for the following. 
-    <ul>
-      <li>hasMethod
-        <ul>
-          <li>requires two arguments: method name and method signature in JLS 
-            format, for example "<code>main, ([QString;)V</code>" or 
-            "<code>main, ([Ljava/lang/String;)V</code>"</li>
-          <li>third argument is optional: method modifiers as an integer bit mask 
-            based on <code>org.eclipse.jdt.core.util.IModifierConstants</code></li>
-        </ul>
-      </li>
-      <li>hasSuperClass - expected value specifies fully qualified type name of 
-        a super class (does not consider interfaces)</li>
-      <li>hasImport - expected value specifies fully name of import to match in 
-        JSL format, for example "<code>java.io.File</code>" or "<code>java.io.*</code>". 
-        Only works on compilation units.</li>
-      <li>hasSwtOnBuildPath - whether the associated element's build path contains 
-        a reference to "swt.jar" or the "org.eclipse.swt" 
-        plug-in</li>
-      <li>hasItemOnBuildPath - expected value specifies a substring to match. 
-        Returns true when the associated element's build path contains an entry 
-        containing the given substring.</li>
-      <li>matchesJavaFileExtension - returns true if the associated element has 
-        a resource adapter that has a .class or .java file extension.</li>
-      <li>matchesContentType - expected value describes a content type as desribed 
-        by the <code>IContentTypeManager</code></li>
-      <li>hasProjectNature - expected value is a project nature</li>
-      <li>implementsInterface - expected value is a fully qualified name of an 
-        interface </li>
-    </ul>
-  </li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112455">112455</a>: Change JavaElementPropertyTester to not use JavaModelUtil.getAllSuperTypes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104104">104104</a>: Make 'hasMainType' and 'isApplet' property tests part of launching plug-in<br>
-
-<h2>October 11, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109358">109358</a>: Default installed JRE has no Javadoc Location<br>
-
-<h2>October 4, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111136">111136</a>: JavaStackTraceHyperlink broken.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=111256">111256</a>: multiple hyperlinks on the same line not painted correctly<br>
-
-<h2>September 27, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110191">110191</a>: ArrayIndexOutOfBoundsException in ExpressionInformationControl<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=110021">110021</a>: Java 5 inconsistency<br>
-
-<h2>September 20, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=99416">99416</a>: Evaluation in context of superclass fails to resolve instvar in subclass<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103026">103026</a>: When detected a 1.5 JDK on a fresh workspace as a default the default compiler complaince should be switch to 5.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=109392">109392</a>: JavaRuntime.detectDefaultVM changes my options<br>
-
-<h2>September 13, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108426">108426</a>: In debug mode, when hoovering over constants, their value should be showed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106682">106682</a>: Java debug code assist inconsistent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108498">108498</a>: Toggle watchpoint for field in external source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108505">108505</a>: refactor debug 'open type' actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=108640">108640</a>: jdi model presentation missing dispose method<br>
-
-<h2>Aug 23, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29565">29565</a>: Working Directory UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=86066">86066</a>: testJavaVersion() failure on mac<br>
-
-<h2>Aug 16, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106748">106748</a>: details fail for interface defined in the default package<br>
-
-<h2>Aug 10, 2005</h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106479">106479</a>: Exception Processing async thread queue<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106492">106492</a>: NPE on console during debug session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106489">106489</a>: CCE from watch Expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106660">106660</a>: Array details for type in default package fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106665">106665</a>: array details fail for interface types<br>
-
-<h2>Aug 8, 2005</h2>
-<h3>API Changes</h3>
-<ol>
-  <li> 
-    <h4>API contract changes to IJavaReferenceType</h4>
-  </li>
-  <blockquote> 
-    <h4><strong>What is affected:</strong> Clients that call <code>IJavaReferenceType.getClassLoaderObject()</code>.</h4>
-    <p><strong>Description:</strong> In Eclipse 3.1, the method <code>org.eclipse.jdt.debug.core.IJavaReferenceType.getClassLoaderObject()</code> 
-      was added to <code>IJavaReferenceType</code>. The method was not specified 
-      to return <code>null</code>, but could. In Eclipse 3.2, the specification 
-      has been updated to indicate that <code>null</code> is a valid return value. 
-      The behavior of the method has not changed, but callers should be aware 
-      that <code>null</code> can be returned and should add appropriate checks.</p>
-    <p><strong>Action required:</strong> Clients calling <code>IJavaReferenceType.getClassLoaderObject()</code> 
-      should be modified to handle <code>null</code> as a return value.</p>
-  </blockquote>
-</ol>
-<h3>Enhancements</h3>
-<ol>
-  <li>Evaluations in the Java debugger are now supported in the context of array 
-    objects. The user may select a variable in the Variables View that references 
-    an array and enter an expression in the details area using <code>this</code> 
-    to refer to the array - for example, <code>"this.length</code>". 
-    Code assist also works for arrays. The API for evaluations has not changed 
-    although the behavior has. In releases prior to 3.2, <code>IAstEvaluationEngine</code> 
-    used to throw an exception when an evaluation was attempted for a receiver 
-    object that was an array. In 3.2, the evaluation proceeds.</li>
-  <li>The UI for editing a JREs libraries has been improved. In 3.1 and earlier, 
-    users were required to uncheck the button labelled '<code>Use default libraries</code>' 
-    in order modify library settings. This button has been removed and the function 
-    has been replaced with a '<code>Restore Defaults</code>' button, which is 
-    a more common style in the Eclipse UI.</li>
-</ol>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105965">105965</a>: IJavaReferenceType.getClassLoaderObejct() can return null<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=25362">25362</a>: Cannot evaluate in the context of an array<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106091">106091</a>: Code assist for eval in context of an array<br> 
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106243">106243</a>: clear detail formatter cache when 'max detail length' pref changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=106361">106361</a>: NPE when adding a new JRE<br>
-
-<h2>Aug 2, 2005</h2>
-<h3>Enhancements</h3>
-<ol>
-  <li>Added NL support for images.</li>
-</ol>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=105255">105255</a>: [BIDI] need to add $nl$/ to icon paths for reversed icons<br>
-<h2>July 26, 2005 </h2>
-<h3>
-Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103700">103700</a>: ClassCastException when evaluating assigment of array of interfaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=101075">101075</a>: Cannot assign array type to local variable of type Object.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=98141">98141</a>: Evaluation in context of interface fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=103326">103326</a>: NPE executing step into command<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=81045">81045</a>: ClassNotLoadedException when trying to change a value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=104654">104654</a>: Breakpoint on label is not honoured<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=102427">102427</a>: Cannot inspect/display static import methods<br>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_3_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_3_buildnotes_jdt-debug.html
deleted file mode 100644
index daba9d6..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_3_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,438 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-<h1>Eclipse 3.3 Java Debug Build Notes </h1>
-
-<h2>Summary of API changes in 3.3</h2>
-<ul>
-  <li>added <code>IJavaThread.isDaemon()</code></li>
-  <li>added <code>IJavaThread.getFrameCount()</code></li>
-  <li>added <code>IJavaDebugTarget.supportsInstanceRetreival()</code></li>
-  <li>added <code>IJavaReferenceType.getInstances(int max)</code></li>
-  <li>added <code>IJavaObject.getReferringObjects(int max)</code></li>
-  <li>added <code>IJavaDebugUIConstants.PREF_ALLINSTANCES_MAX_COUNT</code> and 
-    <code>IJavaDebugUIConstants.PREF_ALLREFERENCES_MAX_COUNT</code></li>
-  <li>added support for access rules to be defined for libraries in an execution 
-    environment 
-    <ul>
-      <li>An execution environment can define an access rule participant to contribute 
-        rules specific to an environment (see the new attribute <code>ruleParticipant</code> 
-        on the <code>environment</code> element of the <code>executionEnvironments</code> 
-        extension point).</li>
-      <li>Additionally an access rule participant can be contributed in isolation 
-        to participate in access rule creation for any execution environment (see 
-        the <code>ruleParticipant </code>element of the <code>executionEnvironments</code> 
-        extension point). The rule participant can create rules selectively based 
-        on project, JRE, and system libraries.</li>
-      <li>See the new interface <code>IAccessRuleParticipant</code> and the new 
-        method <code>IExecutionEnvironment.getAccessRules(...)</code>.</li>
-    </ul>
-  </li>
-  <li>added support to force early return from a method
-    <ul>
-      <li>added <code>IJavaStackFrame.canForceReturn()</code>, <code>IJavaStackFrame.forceReturn(IJavaValue)</code>, 
-        <code>IJavaDebugTarget.supportsForceReturn()</code></li>
-    </ul>
-  </li>
-</ul>
-
-<h2>3.3 RC3 - June 1, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189845">189845</a>: NPE after 'New Detail Formatter'<br>
-
-<h2>3.3 RC2 - May 18, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188300">188300</a>: Step Filtering pref page does not apply dialog font<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188174">188174</a>: Breakpoints markers are lost when a JavaScript, Html, or XML  file is saved.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188946">188946</a>: EditLogicalStructureDialog is not modal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188506">188506</a>: Edit Logical Structure Dialog has no F1 help<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=187000">187000</a>: Debugger looses selection/focus a lot on the thread stack where you debug.<br>
-
-<h2>3.3 RC1 - May 11, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184857">184857</a>: Four images leaked each time exception breakpoint dialog is opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182320">182320</a>: Buttons of 'Errors in Project' window aren't visible when there is a lot of projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184862">184862</a>: [evaluation] evaluation in static method with generics does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153124">153124</a>: CCE while performing evaluation near autobox<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185755">185755</a>: AddExceptionDialog has non-nls'd UI message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184863">184863</a>: NPE in JRE launch configuration tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185018">185018</a>: Details values is incorrect for watch expressions with errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185808">185808</a>: [help] No help topic found for the add source dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=185666">185666</a>: Typo in type resolution error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178246">178246</a>: inspect/all instances popup should expand first element<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173101">173101</a>: Inspector and Variables view incorrectly escapes single quotes in strings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184911">184911</a>: Actions not disabled in Variables View for dummy variables when showing references<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184917">184917</a>: [jres] Mac always launches system default VM no matter what config says<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186443">186443</a>: Remove dead code<br>
-
-<h2>3.3 Milestone 7 - May 4, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=126729">126729</a>: [jres] unable to retrieve system properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175708">175708</a>: [breakpoints] Debugger stops without feedback<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184211">184211</a>: JDI connectors throw NullPointerException if used separately from Eclipse<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179685">179685</a>: JREContainerInitializer average initialization time<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178729">178729</a>: [breakpoints] inconsistent behavior of breakpoint setting using double-click<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184387">184387</a>: Add JRE wizard: JRE type default changed to Standard 1.1x VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183532">183532</a>: Bug with debugging of generic methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176275">176275</a>: [breakpoints] Method breakpoint filters do not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161364">161364</a>: Evaluating Code that contains Generics does not work while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153122">153122</a>: CCE performing eval of switch statement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151319">151319</a>: Detailed formater does not seem to recognize methods of the current class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151569">151569</a>: [console] Java stack trace console: after paste, link to exception too long<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184883">184883</a>: Inspecting code results in flashing text in popup<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186302">186302</a>: java.util.ConcurrentModificationException while trying to add jdk<br>
-
-<h2>April 24, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182237">182237</a>: Invalid thread access exceptions in Java Variables view.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182807">182807</a>: [breakpoints] NPE attempting to set breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169542">169542</a>: A ThreadGroup (and all its Threads) is not displayed in the Debug view when its parent didn't contain any threads<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140330">140330</a>: [jres] Inconsistent JRE configuration with -vm option.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182992">182992</a>: Add/Edit JRE Dialog initial size too small on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182890">182890</a>: Variables view: 'References' tends to clutter the view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182008">182008</a>: blank threads in debug view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148872">148872</a>: [source lookup] missing jar causes sourcepath computation to fail<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183365">183365</a>: NLS33: Translation question<br>
-
-<h2>April 17, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178902">178902</a>: Setting Stop in main does not stop when launched<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173479">173479</a>: Provide a quick fix for deprecated JRE variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148965">148965</a>: Performance problem in detail pane when there is a lot of plugins.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182084">182084</a>: AIOOBE while stopped at BP<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178279">178279</a>: Filter package action filters receiving type rather than declaring type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178979">178979</a>: Exception label not displayed in the debug view when using scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181548">181548</a>: Please rmdir org.eclipse.jdt.debug/jdi-bin from CVS and cvsignore it<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170377">170377</a>: Stack traces frenetically appear and disappear when a breakpoint is hit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180667">180667</a>: Resume in loop selects another thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177579">177579</a>: Hover's sticky affordance should use actual key binding<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181914">181914</a>: NPE in BreakpointConditionEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182065">182065</a>: ClassCastException expanding inspect expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=182111">182111</a>: focus lost in the debug view while stopped at BP<br>
-
-<h2>April 10, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168841">168841</a>: JRERuntimeClasspathEntryResolver#isSameArchives() should be case insensitive on windows<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178641">178641</a>: [performance] conditional breakpoint performance test failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179122">179122</a>: [performance] breakpoint performance tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181146">181146</a>: Preference page has two checkboxes "Suspend for breakpoints during evaluations"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173465">173465</a>: Show "(already running)" in tooltip for run/debug if it is<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179840">179840</a>: Max length setting of 0 ignored<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181152">181152</a>: 'Toggle Step Filters' action has bad name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179442">179442</a>: DBCS3.3: editing duplicated launch configuration won't be displayed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178282">178282</a>: [java 1.6] Force early return causing NPEs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180496">180496</a>: Use the new ClasspathContainerInitializer API for the JRE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179111">179111</a>: Numerous fixes for All Instances / All References features<br>
-
-<h2>April 3, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176004">176004</a>: 'All Instances' should work on actual type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178264">178264</a>: sash settings not persisted in eval popups<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178860">178860</a>: Scrapbook page is not responding if an exception occurs during evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179611">179611</a>: Breakpoints lost when JSP file saved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=179121">179121</a>: JDIModelPresentation does not allow spaces in variable names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157055">157055</a>: [variables view] Right click on variable produces ClassNotLoadedErrors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175248">175248</a>: Variables view escapes Strings twice (too many \)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=180460">180460</a>: NPE in BreakpointRenameProjectParticipant when renaming project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132795">132795</a>: [string variables] SelectedResourceManager leaks fSelectedText field when active editor is closed<br>
-
-<h2>Milestone 6 - Mar 23, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178795">178795</a>: NPE from add exception breakpoint dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178752">178752</a>: Run/Debug settings is not on project preferences page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178718">178718</a>: model proxy created for Java debug target in var view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178634">178634</a>: Deadlock while launching tests just after having started my workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152381">152381</a>: Error creating multiple watch expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177541">177541</a>: NLS33:translation questions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177570">177570</a>: All instances does not work when constructor is selected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176608">176608</a>: Debug view contains empty items at end<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177348">177348</a>: Coalesce access to discouraged access of WorkingCopyManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152641">152641</a>: [java 1.6] Provide all instances feature in JDT debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172402">172402</a>: Allow export of logical structure preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177383">177383</a>: NLS33:translation - typos<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177138">177138</a>: Use different modifier for debug hyperlink detector<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177423">177423</a>: All Instances action enabled in JavaEditor for pre-1.6 VMs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177424">177424</a>: Force return action is enabled for non-1.6 VMs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177382">177382</a>: [launching] Support for launching .class files lost<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177542">177542</a>: NLS33:translation questions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177611">177611</a>: Remove illegal references to JavaEditor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177499">177499</a>: NPE while displaying content of an array<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150652">150652</a>: [evaluation] Force early return<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177753">177753</a>: Java shortcuts do not appear for .jar files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153887">153887</a>: [java 1.6] Provide an easy way to browse all references<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154115">154115</a>: [java 1.6] Support for Java SE 6 debug features<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=178427">178427</a>: NPE in AllReferencesActionDelegate<br>
-
-<h2>Mar 13, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176814">176814</a>: Compiler warning in N20070309-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176866">176866</a>: Strange border in Java > Debug preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176853">176853</a>: Launch configurations go missing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176597">176597</a>: Variables view: Toggling primitive display options does not refresh view<br>
-
-<h2>Mar 6, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162987">162987</a>: [breakpoints] Renaming a class with breakpoints causes JavaModelException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=176154">176154</a>: [refactoring] NPE in LaunchConfigurationProjectMainTypeChange while renaming project<br>
-
-<h2>Feb 27th, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175208">175208</a>: remove API constant introduced in 3.3<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=175202">175202</a>: Java launch config migration delegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174216">174216</a>: Polish for "references not supported" element<br>
-
-<h2>Feb 20th, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161416">161416</a>: Allow for step through vs. step return using filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172569">172569</a>: Ability to send custom  JDWP commands<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174779">174779</a>: [hot code replace] hot code place not triggered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=174465">174465</a>: [preferences] [heapwalking] No accelerator for references option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152653">152653</a>: [java 1.6] All references<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173687">173687</a>: NPE updating compiler compliance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170914">170914</a>: [variables] Logical structures cause infinite refresh in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173620">173620</a>: Default Javadoc location for JDK 6 missing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=112630">112630</a>: hyperlink debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173339">173339</a>: [launching] default main method search scope constraints are too lax<br>
-
-<h2>Feb 13th, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=154233">154233</a>: [java 1.6] Make use of improved class prepare filtering<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172539">172539</a>: Logical structures are not imported from preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153060">153060</a>: Internal Error when changing boolean variable by hand in debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173714">173714</a>: NPEs under JavaStackTracePageParticipant while debugging<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173188">173188</a>: [launching] User must choose between main types even if selection is a main method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173909">173909</a>: 'Skip All Breakpoints' command does nothing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173304">173304</a>: NPE in EditDetailFormatterAction when called from context menu of Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173860">173860</a>: NPE in packet send manage running test suite<br>
-
-<h2>Milestone 5, Feb 9th, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173182">173182</a>: NPE from  ExceptionInspector when shutting down workbench<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172205">172205</a>: [breakpoints] Suspend... menuitem has no icon in Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172181">172181</a>: Bad "Suspend VM" and "Suspend Thread" behaviour in Breakpoints view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172093">172093</a>: Debugger attempts to set wrong type of bp in final instance variable of type Runnable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172989">172989</a>: NPE when disabling breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173187">173187</a>: Line Breakpoint changes unclear during refactoring<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172668">172668</a>: Cannot add Exception breakpoint for type name that does not inclue 'Exception'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169139">169139</a>: Launch configuration should check .class compability, not compiler compliance level<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171075">171075</a>: Java Editor Disconnecting Debug Session<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172348">172348</a>: Dialog to add exception breakpoint extremely slow<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162399">162399</a>: Problem in the implementation of the support of  JSR-045<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165969">165969</a>: API to allow a contributed JRE and variables to be re-initialized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170603">170603</a>: Bad usability of Java Exception selection dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172516">172516</a>: use the new 'deprecated' and 'read-only' classpath variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173152">173152</a>: missing element in tree when 'no monitor information'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173193">173193</a>: [applets] Search for applets returns results that are not applets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=172530">172530</a>: NPE in AbstractJavaMainTab<br>
-
-<h2>Jan 30, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171984">171984</a>: Open the Breakpoint Properties dialog on a key stroke<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171915">171915</a>: Installed JREs pref page opens very wide<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171787">171787</a>: javadoc warning in N20070126-0010<br>
-
-<h2>Jan 23, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171286">171286</a>: HCR failed dialog should present launch label as well as the target label<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170966">170966</a>: Logical Structures preference page doesn't update when structure edited<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171567">171567</a>: [launching] NPE from Launching plugin if constructor does not get called<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170494">170494</a>: [variables view] add new logical structure dialog content assist available when it shouldn't be<br>
-
-<h2>Jan 16, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170322">170322</a>: Breakpoint properties page: condition field should resize vertically<br>
-
-<h2>Jan 9, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169768">169768</a>: Cannot add external library if JRE dialog has selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=170706">170706</a>: keywords not externalized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169565">169565</a>: NPE in JDIDebugTarget when querying supportsInstanceRetrieval<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78960">78960</a>: watch expression testStepping fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169683">169683</a>: javadoc warning in N20070105-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169066">169066</a>: Removing a watch from the Expressions fails<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=169104">169104</a>: Debug setting "SuspendOnUncaughtExceptions" saved with wrong key<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167638">167638</a>: [launching] main method search for launching returns types without main methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168090">168090</a>: Anonymous Inner Class Breakpoint Canceled by Other<br>
-
-<h2>3.3 M4 - Dec 15, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167740">167740</a>: [variables] [views] New/Edit details formatter menu should not be available on array types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167651">167651</a>: [vms] ArrayIndexOutOfBoundsException editing a source location<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168455">168455</a>: provider name not provided in jdt.launching plugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163376">163376</a>: JRE container is not initialized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152962">152962</a>: CCE in JREsPreferencePage.getCurrentCompilerCompliance(..)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153796">153796</a>: [breakpoints] can set more than one breakpoint on line<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167531">167531</a>: Javadoc warnings in I20061211-1607<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165988">165988</a>: TcpipSpy borked<br>
-
-<h2>Dec 11, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167244">167244</a>: "Exception occurred: Evaluation failed - thread not suspended.." in Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=167182">167182</a>: JDIDebugTarget.handleDebugEvents not using getAdapter when identifying the event source<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166976">166976</a>: [jres] JRE container classpath entries not computed properly per project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166290">166290</a>: [views] contended locks and monitors should support ITerminate and ISuspendResume<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152962">152962</a>: CCE in JREsPreferencePage.getCurrentCompilerCompliance(..)<br>
-
-<h2>Dec 6, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163444">163444</a>: Associate access restrictions with execution environments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=166689">166689</a>: [plugins] the jdt.debug plugins should be save participants<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165845">165845</a>: com.sun.jdi.event.MethodExitEvent.returnValue() not working properly<br>
-
-<h2>Nov 28, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=165223">165223</a>: Starting SDK with a 1.6 VM doesn't set the compiler preferences to 6.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164703">164703</a>: testEclusiveScopedException and testMultiExclusiveScopedExceptionMissed fail on IBM Java2 1.5.0<br>
-
-<h2>Nov 21, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163463">163463</a>: Template method call needed in JDIDebugTarget.createThread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148424">148424</a>: VM Capabilities only available from Target<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164476">164476</a>: division by zero error selecting columns<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16929">16929</a>: [evaluation] Eval: should have got runtime NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164471">164471</a>: NPE when sending a message to "null" in expression eval<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=158280">158280</a>: CCE in JDIObjectValue.getEnclosingObject<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162589">162589</a>: "Run As" not enabling "Java Application" for Inner class "main" method unless outer class also has main<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162752">162752</a>: [details] support details for multi-dimensional string arrays<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164650">164650</a>: thread groups should implement ITerminate<br>
-
-<h2>Nov 14, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164548">164548</a>: vm name background is always white<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163836">163836</a>: StackOverflowError in JavaLaunchableTester.hasMainInChildren(..)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164376">164376</a>: NPE in JavaDetailFormatterManager<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=164359">164359</a>: NPE retrieving instance id for null value<br>
-
-<h2>Nov 6, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=163463">163463</a>: Template method call needed in JDIDebugTarget.createThread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162902">162902</a>: [jres] "cancel" button should probably be "stop" for JRE search<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162899">162899</a>: [jres] Initial size of "add jre dialog" is too narrow<br>
-
-<h2>3.3 Milestone 3 - Nov 3, 2006</h2>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153913">153913</a>: step over action becomes disabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161243">161243</a>: details for multi-dimensional arrays<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162366">162366</a>: org.eclipse.jdt.debug.tests.testSimpleStepFilter/testInactiveStepFilter depend on VM behavior<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162675">162675</a>: Javadoc warnings in N20061028-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162665">162665</a>: Warnings in N20061028-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=162368">162368</a>: Include JRockit-internal classes in the default step filters<br>
-
-<h2>Oct 24, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161895">161895</a>: Compile errors in N20061022-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161537">161537</a>: JDT/UI test failures in N20061018-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152539">152539</a>: Usability: Hot code replace failed dialog is a little panic-inducing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157907">157907</a>: [variables view] Preferences action should use PreferencesUtil to open pref pages<br>
-
-<h2>Oct 10, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=160129">160129</a>: Chkpii error in latest build<br>
-
-<h2>Oct 3, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=159815">159815</a>: isRemote(...) test performed 5 times for each variable selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=160006">160006</a>: Chkpii error in latest build<br>
-
-<h2>Sept 22, 2006 - Milestone 2</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157042">157042</a>: [java 1.6] Need way to input counts for all instances / references<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157489">157489</a>: Package "org.eclipse.jdt.internal.debug.ui.variables" not exported<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=39222">39222</a>: [java launching] Renaming my installed JREs broke all my launch configs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=157467">157467</a>: Not able to add breakpoints to a static initializer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=155123">155123</a>: Error message in the log from implementing an extension<br>
-
-<h2>Sept 11, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=156320">156320</a>: Unchecked conversion from IJavaDebugTarget to JDIDebugTarget<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153793">153793</a>: JavaJRETab.checkCompliance() logs message when project is closed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153472">153472</a>: [all references] CCE selecting variable with null value<br>
-
-<h2>Aug 14, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152572">152572</a>: PDE Tools > Update Classpath... creates wrong warning when no perfect match<br>
-
-<h2>Aug 10, 2006 - Milestone 1</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74854">74854</a>: [breakpoints] Ctrl+B should set a method breakpoint if invoked from the method signature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152446">152446</a>: Problem with multiples JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151517">151517</a>: [breakpoints] Can't set Class Load Breakpoint like other breakpoints<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149999">149999</a>: Use ComboFieldEditor from JFace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=124147">124147</a>: [jres] Changing installed JRE doesn't warn when compiler compliance is not compatible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152962">152962</a>: CCE in JREsPreferencePage.getCurrentCompilerCompliance(..)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=152964">152964</a>: Wrong error about incompatible JRE in launch configuration dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153256">153256</a>: 'Add JRE' dialog layout problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139195">139195</a>: [breakpoints] Error on Toggle method breakpoint in external .java file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=153336">153336</a>: [breakpoints] translateToMembers is called too many times<br>
-
-<h2>July 31, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151996">151996</a>: OpenTypeAction source lookup performance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151709">151709</a>: JRE tab should show what JRE is bound to an EE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151474">151474</a>: Minor tweaks to the VM Capabilities property page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151586">151586</a>: thread label problem for suspend on compilation error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=151570">151570</a>: Java stack trace console: NPE in FormatStackTraceActionDelegate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149874">149874</a>: JUnit Launcher duplicates classpath entries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141570">141570</a>: [variables] CCE when array partition part of multi-selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138877">138877</a>: Unable to locate source when clicking in console<br>
-
-<h2>July 18, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=150563">150563</a>: Unused NLS message warning<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147743">147743</a>: [console] New icon for stack trace "auto format" toggle<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148985">148985</a>: use new API JavaUI.openInEditor<br>
-
-<h2>July 11, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149909">149356</a>: Remove JavaElementPropertyTester<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149356">149356</a>: [help] the new VM capabilities property page has no help topic<br>
-
-<h2>July 4, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=133725">133725</a>: [java launching] Add External Jars dialog does not check if the jar file actually exists<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148918">148918</a>: [jre] remove discouraged access warnings in AddVMDialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=149491">149491</a>: cannot create watchpoints on final or static final members<br>
-
-<h2>June 27, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=141329">141329</a>: vm disconnect when terminating target with thread groups showing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147777">147777</a>: mirrorOfVoid() to appear on VirtualMachine<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148362">148362</a>: DisplayView registers Ctrl+Space globally<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145592">145592</a>: Debugger gets confused with watchpoints on fields with the same name.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145350">145350</a>: JDI Enhancements for Java 6.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=145362">145362</a>: JDI test suite needs to be updated for 1.6 tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147773">147773</a>: [debugger] determineIfDaemon throws exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24484">24484</a>: [jres] VM Properties<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=148247">148247</a>: [launching] Creating launching configurations doesn't use the selected class anymore<br>
-
-<h2>June 20, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42399">42399</a>: [java debug] JDI Java thread has no daemon property<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140126">140126</a>: [evaluation] CompletionContext shouldn't be instantiated by clients of JDT/Core API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139152">139152</a>: [preferences] Java->Debug preference page validates uninitialized fields<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132671">132671</a>: [variables] Error dialog after clicking into value field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=143286">143286</a>: [display view] wrong name for viewaction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147116">147116</a>: [Context Help] missing F1 help for console actions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140109">140109</a>: [help] Dynamic help is not displayed in the Working Directory of  Launch configuration Arguments tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140107">140107</a>: [applet]  [help] The context help of Java applet configuration could not be found<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=147484">147484</a>: broken Find/Replace context menu label in Display view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=90768">90768</a>: [console] Java Stack Trace Console: Option to format per default<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=146825">146825</a>: [console] NPE in process console participant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=146648">146648</a>: Code Clean up.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=138864">138864</a>: [variables] IllegalArgumentException while updating variables view<br>
-
-<h2>June 13, 2006</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=146899">146899</a>: test failure on JavaSE6 - ExecutionEnvironmentTests.testAnalyze<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=119860">119860</a>: [evaluation] NPE from watch expression<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139089">139089</a>: [breakpoints] NPE in JavaBreakpoint.fireRemoved () shutting down eclipse with Java Debug session running<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=142842">142842</a>: [breakpoints] ToggleLineBreakpoint: Invalid thread access<br>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_4_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_4_buildnotes_jdt-debug.html
deleted file mode 100644
index 7f8fa11..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_4_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,376 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-<h1>Eclipse 3.4 Java Debug Build Notes</h1>
-
-<h2>Summary of API changes in 3.4</h2>
-<h3>Java Launch Shortcuts</h3>
-<p>
-	The core Java launch shortcuts are available to be extended/reused. 
-</p>
-<p>
-	The following classes are provided as API in the package <code>org.eclipse.jdt.debug.ui.launchConfigurations</code>:
-<ul>
-		<li><code>JavaAppletLaunchShortcut</code> - the standard implementation for Java applets, used in the platform</li>
-		<li><code>JavaApplicationLaunchShortcut</code> - the standard implementation for Java application, used in the platform</li>
-		<li><code>JavaLaunchShortcut</code> - an abstract implementation of a shortcut to launch Java artifacts, used as the parent class to the two aforementioned classes</li>
-</ul>
-</p>
-<p>
-	The methods exposed to consumers from the parent class <code>JavaLaunchShortcut</code> and through the 
-	two subclasses are:
-<ul>
-		<li> <code>getConfigurationType()</code> - returns the type of configuration this shortcut creates</li>
-		<li> <code>createConfiguration(IType type)</code> - creates a launch configuration for the specified <code>IType</code></li>
-		<li> <code>chooseType(IType[] types, String title)</code> - allows an <code>IType</code> to be selected from the given list</li>
-		<li> <code>findTypes(Object[] elements, IRunnableContext context)</code> - searches for specific <code>IType</code>s from the given list of elements</li>
-		<li> <code>getTypeSelectionTitle()</code> - returns the title for the type selection dialog used by the shortcuts for user input</li>
-		<li> <code>getEditorEmptyMessage()</code> - returns the error message displayed to users who try to use one of the shortcuts on an empty editor</li>
-		<li> <code>getSelectionEmptyMessage()</code> - returns the error message displayed to users who try to use the shortcut on an empty selection</li>
-		<li> <code>findLaunchConfiguration(IType type, ILaunchConfigurationType configType)</code> - searches for a launch configuration associated with the specified <code>IType</code> and configuration type</li>
-		<li> <code>chooseConfiguration(List configList)</code> - selects a specific configuration from the specified listing</li>
-		<li> <code>getShell()</code> - returns the shell used for the Java launch shortcuts</li>
-</ul>
-</p>
-
-<h3>Support for Execution Environment Descriptions</h3>
-<p>An installed JRE can be defined by an <a href="http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions">execution 
-  environment description file</a>. A new 'Execution Environment Description' 
-  VM install type shipped with the Eclipse SDK supports standard ".ee" 
-  files.</p>
-<p>API has been added to <code>JavaRuntime</code> to create a VM from an execution 
-  environment description file. A name and unique identifier must be provided 
-  to create a new JRE.</p>
-<ul>
-  <li><code>public VMStandin createVMFromDefinitionFile(File eeFile, String name, 
-    String id)</code></li>
-</ul>
-<p>A new method has been added to <code>AbstractVMInstallType</code> to allow 
-  default arguments to be provided for newly created VM installs. Ideally, this 
-  method would be added to <code>IVMInstallType</code>, but to support binary 
-  compatibility, the method has only been added to <code>AbstractVMInstallType</code>. 
-  Existing subclasses may override as required. The method is consulted to initialize 
-  VM arguments when a new Installed JRE is created by the user. This new method 
-  accepts a home directory or definition file as an argument.</p>
-<ul>
-  <li><code>public String getDefaultVMArguments(File installLocation)</code></li>
-</ul>
-<h3>Support for custom wizard pages used to edit VM installs</h3>
-<p>An new extension point (<code>org.eclipse.jdt.debug.ui.vmInstallPages</code>) 
-  allows a wizard page to be contributed for editing the properties of an <code>IVMInstall</code>. 
-  The page is used when adding or editing an installed JRE via user preference. 
-  A standard page is provided based on the <code>IVMInstallType</code> and <code>IVMInstall</code> 
-  interfaces. JDT contributes a page for editing a JRE based on an execution environment 
-  description file.</p>
-<h3>Support for setting a range of values in array objects</h3>
-<p>API has been added to <code>IJavaArray</code> to support setting ranges of 
-  values in the arrays. It is more efficient to set a range of values at once 
-  than setting each value in an array individually as it uses fewer communications 
-  with the virtual machine being debugger. The following methods have been added 
-  to <code>IJavaArray</code>.</p>
-<ul>
-  <li><code>public void setValues(IJavaValue[] values)</code></li>
-  <li><code>public void setValues(int offset, int length, IJavaValue[] values, 
-    int startOffset)</code></li>
-</ul>
-<h3>New API methods on IJavaDebugTarget</h3>
-<p>The following API methods have been added to IJavaDebugTarget.</p>
-<ul>
-  <li><code>public boolean supportsSelectiveGarbageCollection()</code></li>
-  <li><code>public String getVMName()</code></li>
-  <li><code>public String getVersion()</code></li>
-</ul>
-
-<h3>New API methods on IJavaObject</h3>
-<ul>
-  <li><code>public void enableCollection()</code></li>
-  <li><code>public void disableCollection()</code></li>
-  <li><code>public long getUniqueId()</code>	 </li>
-</ul>
-<h3>New API preference constants (<code>IJavaDebugUIConstants</code>)</h3>
-<ul>
-  <li><code>PREF_ALLINSTANCES_MAX_COUNT</code></li>
-  <li><code>PREF_ALLREFERENCES_MAX_COUNT</code> </li>
-</ul>
-
-<h2>June 4, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235448">Bug 235448</a>: Expanding variables is extremely slow if both logical structures and show references are turned on<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235623">Bug 235623</a>: Logical Structure in Variables view shows "Exception occurred" for HashMap<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235647">Bug 235647</a>: [tests] Regression tests for Logical Structures<br>
-
-<h2>June 3, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205479">Bug 205479</a>: [doc] Update help for new JRE from EE file wizard<br>
-
-<h2>June 2, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233038">Bug 233038</a>: [doc] Broken link in Java Launch Config > Main Tab help<br>
-
-<h2>May 29, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229394">Bug 229394</a>: [CellEditors] NPE from JFace when using cell editor in variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232096">Bug 232096</a>: degradation in Remove Line Breakpoints perf test<br>
-
-<h2>May 28, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234027">Bug 234027</a>: NPE in Variables view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232576">Bug 232576</a>: Error during evaluation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234471">Bug 234471</a>: Infinite loop running evaluation tests<br>
-
-<h2>May 14, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232060">Bug 232060</a>: BIDI algorithm in JDISourceViewer is wrong<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228985">Bug 228985</a>: JREsPreferencePage.java resizing problem<br>
-
-<h2>May 7, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229857">Bug 229857</a>: Char variables values cannot be edited in Variables View<br>
-
-<h2>May 6, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230333">Bug 230333</a>: LaunchingPlugin class: use JavaCore constant instead of string value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229380">Bug 229380</a>: Up/Down buttons incorrectly enabled on classpath tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229347">Bug 229347</a>: error evaluating: NPE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228597">Bug 228597</a>: State change in progress for bundle starting JUnit tests<br>
-
-<h2>May 5, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229972">Bug 229972</a>: NPE deactivating console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229266">Bug 229266</a>: NPE while debugging<br>
-
-<h2>3.4 M7 - May 2, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223455">Bug 223455</a>: Support variables view in hover information control<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228673">Bug 228673</a>: [classpath] Use BuildPathDialogAccess for archive selection in workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215208">Bug 215208</a>: [breakpoints] Unable to unset breakpoints within inline interface implementations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=186020">Bug 186020</a>: [breakpoints] toggle method breakpoint in external file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223951">Bug 223951</a>: hot code replace causes deadlock<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229335">Bug 229335</a>: Class cast exception entering console input<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229173">Bug 229173</a>: VM breakpoint hit immediately selects wrong thread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229343">Bug 229343</a>: Should not auto expand/select for scrapbook<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229003">Bug 229003</a>: Variable display in debug does not escape newlines in char variables<br>
-
-<h2>April 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203860">Link</a>: jdtdebug fails to give test results when using IBM Java 1.4.2 or 1.5.0<br>
-
-<h2>April 15, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161781">Bug 161781</a>: Suspend status ignored on initial remote debug connection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225377">Bug 225377</a>: Debugging a simple program opens editor for Object.class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227014">Bug 227014</a>: BIDI3.4: Editor for Adding watch expression should not be mirrored<br>
-
-<h2>April 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225347">Bug 225347</a>: [preferences] Adopt content assist colors from Platform UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224717">Bug 224717</a>: Installed JREs page is huge when opened<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225097">Bug 225097</a>: Get rid of outdated context Id "org.eclipse.ui.globalScope"<br>
-
-<h2>April 1, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=161781">Bug 161781</a>: Suspend status ignored on initial remote debug connection<br>
-
-<h2>3.4 M6 - March 28, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220784">Bug 220784</a>: Allow EE files to use path list in -Dee.src property until closer to M6<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223530">Bug 223530</a>: Step into Selection hyperlink is broken<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208040">Bug 208040</a>: Inspect and other popups should automatically select first item<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184928">Bug 184928</a>: [variables] stepping with logical structures loses selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184925">Bug 184925</a>: Stackframe shows "running" icon while it is suspended<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221915">Bug 221915</a>: Clean up javadoc tags<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217855">Bug 217855</a>: [expressions] static/final filters have no effect on watch expressions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220369">Bug 220369</a>: [api] JavaSnippetEditor Illegally instantiates JavaModelException<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218717">Bug 218717</a>: Remove quote requirement from ee files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218955">Bug 218955</a>: EEDefinitionTests Failure<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=184928">Bug 184928</a>: [variables] stepping with logical structures loses selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223844">Bug 223844</a>: Step into Selection hyperlink does not use stored region<br>
-
-<h2>March 20, 2008 (3.4M6 warm-up)</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223009">Bug 223009</a>: JDT debug test failures<br>
-
-<h2>March 18, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212655">Bug 212655</a>: Thread not suspended error during evaluation<br>
-
-<h2>March 11, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222062">Bug 222062</a>: jdt.launching has an old copy of ListenerList implementation<br>
-
-<h2>March 4, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220570">Bug 220570</a>: Use new simpler Text API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217707">Bug 217707</a>: Installed JRE dialog does not open (page contains invalid values)<br>
-
-<h2>February 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218872">Bug 218872</a>: Installed JREs pref page, remove button disabled but hot key still works<br>
-
-<h2>February 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217350">Bug 217350</a>: Preferences > Installed JREs > Edit... has wrong labels for tree item<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217939">Bug 217939</a>: Java doc location button not disabled initially<br>
-
-<h2>3.4 M5 - Feb 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212439">Bug 212439</a>: Unable to change variable value when stopped in JSP<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214650">Bug 214650</a>: Execution Env description file allows only one source archive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217447">Bug 217447</a>: JREContainer keeps getting initialized if problem with EE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217623">Bug 217623</a>: extension point org.eclipse.jdt.launching.classpathProviders based on ridiculous class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217736">Bug 217736</a>: Unhandled event loop exception<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217852">Bug 217852</a>: [jres] search for installed JREs adds many bogus EE configurations<br>
-
-<h2>Jan 29, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216783">Bug 216783</a>: Hyperlink Debugging should only be enabled if current context is IJavaStackframe<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214696">Bug 214696</a>: refactor WorkingDirectoryBlock<br>
-
-<h2>Dec 10, 3.4M4</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209833">Bug 209833</a>: Problems with compiler preferences when starting with 7.0<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210368">Bug 210368</a>: Run configuration dialog does not show error message if on tab with error<br>
-
-<h2>Nov 27, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210759">Bug 210759</a>: debug tests don't compile after changes in refactoring<br>
-
-<h2>Nov 20, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209943">Bug 209943</a>: LaunchConfigurationQueryParticipant does not respect search scope<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=210126">Bug 210126</a>: Unable to open Snippet editor in I20071113-0800<br>
-
-<h2>Nov 13, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=209978">Bug 209978</a>: NPE clicking stack trace in console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208410">Bug 208410</a>: [jre] the new JRE wizard should be consistent<br>
-
-<h2>3.4 M3 - Nov 2, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208036">Bug 208036</a>: Detail pane in inspect popup dialog is too small<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=208119">Bug 208119</a>: renaming main type deletes associated launch configuration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206270">Bug 206270</a>: project or launcher classpath  dialog shows blank lines for unavailable projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206747">Bug 206747</a>: CCE in LaunchConfigurationQueryParticipant when searching for references to method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207497">Bug 207497</a>: Instance Breakpoint Dialog from Variables View is confusing<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=207740">Bug 207740</a>: LaunchConfigurationQueryParticipant should only be active for types<br>
-
-<h2>Oct 23, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206693">Bug 206693</a>: JRE location looks wrong after installing j9 using ee description file<br>
-
-<h2>Oct 16, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205481">Bug 205481</a>: VMTypePage could be improved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=206067">Bug 206067</a>: NullPointerException @ ASTInstructionCompiler.visit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202818">Bug 202818</a>: support for variables in vm definition files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=57515">Bug 57515</a>: [search] java search participant for launch configs<br>
-
-<h2>Oct 9, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203468">Bug 203468</a>: Unable to add watchpoint from Variables View if selected variable is not IField<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204670">Bug 204670</a>: Improve wording on the JRE container page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201758">Bug 201758</a>: Breaking change in IVMInstall.getInstallLocation()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=205511">Bug 205511</a>: javadoc warning in N20071004-0010<br>
-
-<h2>Oct 2, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204137">Bug 204137</a>: Properties page for JRE System Library does not use dialog font everywhere<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204455">Bug 204455</a>: ConnectionType not remembered in Remote Java Application Launch Config<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204023">Bug 204023</a>: Debug tests sometimes DNF<br>
-
-<h2>3.4 M2 - Sept 21, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201440">Bug 201440</a>: Improve Debug Manual Test Suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202806">Bug 202806</a>: Expression evaluation error when debugging.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203687">Bug 203687</a>: unable to launch last launched debug session<br>
-
-<h2>Sept 11, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=202158">Bug 202158</a>: NPE in org.eclipse.jdt.internal.debug.ui.JavaHotCodeReplaceListener.hotCodeReplaceFailed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201194">Bug 201194</a>: org.eclipse.jdt.doc.user question about "Show Static Fields"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74709">Bug 74709</a>: [expressions] Watch action should work on an empty selection<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=54072">Bug 54072</a>: [java launching] Provide API to extend launch shortcuts with different modes<br>
-
-<h2>Sept 4, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200946">Bug 200946</a>: Support socket listening connector for Remote Java Application<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201560">Bug 201560</a>: coding error in LibraryStandin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=201264">Bug 201264</a>: several files not indexing correctly in help<br>
-
-<h2>Aug 28, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200728">Bug 200728</a>: Expansion/selection state for Java variables shared between frames<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200462">Bug 200462</a>: Edit JRE definition: NullPointerException<br>
-
-<h2>Aug 21, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197282">Bug 197282</a>: org.eclipse.jdt.debug.test.stepping.ForceReturnTests depend on VM-specific behaviour.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198864">Bug 198864</a>: Can't remove a breakpoint within inner class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177193">Bug 177193</a>: Setting range of values in array objects in one request<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199163">Bug 199163</a>: Installed JRE Copy button should be named Duplicate<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200049">Bug 200049</a>: "NLS missing message" in "Installed JREs" preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181026">Bug 181026</a>: support for adding JREs from definition files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=199942">Bug 199942</a>: EE definition file test failures<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=200198">Bug 200198</a>: Unable to set method breakpoint on method with type variable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198737">Bug 198737</a>: API for vm name and version<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197866">Bug 197866</a>: Installed JRE Wizard creates duplicate system libraries when drive letter is lower case<br>
-
-<h2>3.4 M1 - August 10, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=94134">Bug 94134</a>: API spec reference to org.eclipse.jdt.launching.vmType extension point<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=125673">Bug 125673</a>: [evaluation] Improve error message for method invocation on manually suspended threads<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=198404">Bug 198404</a>: compilation errors in refactoring tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177556">Bug 177556</a>: [messages] remove internal error messages from translations<br>
-
-<h2>July 31, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196835">Bug 196835</a>: variable id not shown for String variables<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=183800">183800</a>: [launching] Discard changes question dialog on run dialog does give no real choice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=197011">197011</a>: Add JRE fails to retain system library modifications.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=196940">196940</a>: Add Watchpoint: NPE encountered<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195848">195848</a>: Add Java Exception Breakpoint dialog should use JavaUI#createTypeDialog(..)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188676">188676</a>: [breakpoints] BreakpointMarkerUpdater moves line breakpoint to wrong position<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=195185">195185</a>: Cannot debug java class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=129066">129066</a>: [breakpoints] Breakpoint view shows multiple breakpoints with same line number<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=140660">140660</a>: Debug View Actions (such as Show System Threads) should be Java-specific<br>
-
-<h2>July 17, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=42173">42173</a>: [jres] Bad generated name for JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=79529">79529</a>: [java debug] Step Into Outermost method invocation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=177556">177556</a>: [messages] remove internal error messages from translations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=181003">181003</a>: Default watchpoint settings should be configurable<br>
-
-<h2>July 10, 2007</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=64663">64663</a>: [variables] "Variables>Change Value" should accept hex value<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33452">33452</a>: [evaluation] [README] ObjectCollectedException evaluating conditional breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=132764">132764</a>: [jres] VM type element with unknown id message in the log using I0321-1210<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193488">193488</a>: org.eclipse.jdt.debug.test.stepping.StepIntoSelectionTests depend on VM behavior<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=85780">85780</a>: SWT support "hidden" widgets<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191559">191559</a>: TVT33:TCT623: pl: Instance Breakpoint Filter Selection window<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=29855">29855</a>: [jres] Ampersands in file name create mnemonics when scanning for JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33714">33714</a>: [evaluation] AstEvaluationEngine cache<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191486">191486</a>: [breakpoints] Alt+Enter for java breakpoint properties command is throws exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28304">28304</a>: [variables] UnsupportedOperationException report to user on toString on WTK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190875">190875</a>: help id associated with wrong widget on two pref pages<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191389">191389</a>: TVT33:TCT636: ja: No mnemonic for "Step through filters"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191486">191486</a>: [breakpoints] Alt+Enter for java breakpoint properties command is throws exceptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193783">193783</a>: JDT Launching duplicates method newDocument from DebugPlugin<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=193835">193835</a>: Should not attempt to select filtered stack frame<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46991">46991</a>: Failing debug test<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=191387">191387</a>: TVT33:TCT626: pl: functional: Up button does not work correctly<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=173890">173890</a>: [launching] can't debug premain<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=188555">188555</a>: Go to source action is disabled for exception breakpoints added from console<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=190492">190492</a>: JRE preference page does not scale correctly<br>
-
-<p> </p>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.debug/r3_5_buildnotes_jdt-debug.html b/eclipse/plugins/org.eclipse.jdt.debug/r3_5_buildnotes_jdt-debug.html
deleted file mode 100644
index f72c835..0000000
--- a/eclipse/plugins/org.eclipse.jdt.debug/r3_5_buildnotes_jdt-debug.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Java Debug Release Notes</title>
-</head>
-<body>
-<h1>Eclipse 3.5 Java Debug Build Notes</h1>
-
-<h2>Summary of API changes in 3.5</h2>
-<h3>Configurable problem severity when a compatible JRE cannot be bound to specified execution environment </h3>
-<p><strong>Description:</strong> In release 3.4 and earlier, when a project was bound to an execution environment (for example, J2SE-1.4), and the workspace did not have a strictly compatible JRE installed (for example, only a J2SE-1.5 JRE was available), a build path problem with a warning severity was issued. Since 3.5, API has been added to allow the severity of the problem to be ignored, a warning, or an error. See the newly added constants in JavaRuntime: <code>PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE</code>, <code>VALUE_IGNORE</code>, <code>VALUE_WARNING</code>, and <code>VALUE_ERROR</code>.</p>
-<h3>OSGi Profile Properties for IExecutionEnvironment </h3>
-<p><strong>What is affected:</strong> Clients contributing an execution environment can provide an associated OSGi system profile properties file. </p>
-<p><strong>Description:</strong> In release 3.4 and earlier, clients could contribute an execution environment, but when that environment was bound to a build path for a plug-in project, default compiler compliance settings were not set appropriately. Since 3.5, clients may specify an OSGi system profile properties file with an execution environment. The properties file provides information about system packages, default source and target compiler settings, etc. When provided, tooling will be able to leverage the information to create default access rules for system packages and properly set default compiler compliance settings for projects bound to the contributed environment. See the newly added method <code>IExecutionEnvironment.getProfileProperties()</code> and the new extension point attribute <code>profileProperties</code>.</p>
-<p><strong>Action required:</strong> Clients contributing an execution environment should provide an associated OSGi system profile properties file. </p>
-<h3>API to read execution environment description files </h3>
-<p><strong>Description:</strong> An API has been added to support reading of <a href="http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions">execution environment description files</a>. The class <code>ExecutionEnvironmentDescription</code> has been added to the <code>org.eclipse.jdt.launching.environments</code> package. The new class provides access to the properties in description files as well as convenience methods to generate descriptions of the system libraries assocaited with a description. </p>
-<h3>API to set/get stepping behavior with step filters </h3>
-<p><strong>Description:</strong> An API has been added to set/get the stepping behavior associated with step filters. This allows clients to programmatically set what happens when a step lands in a filtered location. The target can be configured to step through to an unfiltered location or return the location where the step originated. The following methods has been added to <code>IJavaDebugTarget</code>: <code>setStepThruFilters(boolean)</code> and <code>isStepThruFilters()</code>. </p>
-
-<h2>May 21, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268241">Bug 268241</a>: [breakpoint][refactor]  Saving file causes refactored breakpoint to be removed<br>
-
-<h2>May 21, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=277187">Bug 277187</a>: [evaluation] duplicate named synthetic local variables cause expression evaluation error<br>
-
-<h2>May 11, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275486">Bug 275486</a>: NPE while debugging.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265037">Bug 265037</a>: Deadlock in the debugger<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273633">Bug 273633</a>: JDIObjectValue / IJavaClassType classcast in inspect / display<br>
-
-<h2>May 5, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273858">Bug 273858</a>: Edit and Remove buttons incorrectly enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273656">Bug 273656</a>: Generated launch configuration has no name if anonymous class is instantiated in main<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274727">Bug 274727</a>: [launching] Debug Configurations dialog is slow when network is down<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274552">Bug 274552</a>: Can end up with empty target when thread groups are on<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273845">Bug 273845</a>: quick fix for "no compatible JREs installed in the workspace"<br>
-
-<h2>April 21, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272494">Bug 272494</a>: Debug view shows stale threads<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272508">Bug 272508</a>: Many com.sun.jdi.ObjectCollectedException recently<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=271785">Bug 271785</a>: Migrate compilation error/uncaught exception handling to breakpoint listener extension<br>
-
-<h2>March 24, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269273">Bug 269273</a>: updating "show in context" looks  up source agressively<br>
-
-<h2>March 17, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268241">Bug 268241</a>: [breakpoint][refactor]  Saving file causes refactored breakpoint to be removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268393">Bug 268393</a>: Debugger not letting me change value on null String<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268104">Bug 268104</a>: Launch config: JRE tab should show project's EE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268238">Bug 268238</a>: JDT doesn't know that it has stopped at a class load breakpoint<br>
-
-<h2>March 10, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258845">Bug 258845</a>: Launch configs fail with "Source attachment path '...' for IClasspathEntry must be absolute"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258119">Bug 258119</a>: [64] no JRE detected on x86_64<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267060">Bug 267060</a>: Add API for IJavaValue.isNull()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260910">Bug 260910</a>: Ability to contribute actions to be run whenever a java breakpoint is hit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265871">Bug 265871</a>: IOException from VM not suppressed for conditional breakpoint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77737">Bug 77737</a>: No templates in code assist in debug pseudo editors<br>
-
-<h2>February 17, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265115">Bug 265115</a>: Make EE first in JRE container wizard page<br>
-
-<h2>February 10, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234425">Bug 234425</a>: Only use relevant compiler options for debug evaluations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214130">Bug 214130</a>: Provide API support for Step Thru Filters preference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234425">Bug 234425</a>: Only use relevant compiler options for debug evaluations<br>
-
-<h2>3.5 M5 - January 30, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256566">Bug 256566</a>: Possibly broken code in JDIModelPresentation.isObjectValue(String)<br>
-
-<h2>January 20, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260834">Bug 260834</a>: [doc] breakpoint conditions are arbitrary expression evals<br>
-
-<h2>January 13, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260402">Bug 260402</a>: Conflits during JRE's import are not solved correctly.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260445">Bug 260445</a>: Deadlock in JavaRuntime.initializeVMs<br>
-
-<h2>December 16, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=254994">Bug 254994</a>: Improve message regarding compatible JREs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256568">Bug 256568</a>: Possibly broken code in JDTDebugRefactoringUtil.createChangesForOuterTypeChange(ILaunchConfiguration, IType, String, String)<br>
-
-<h2>Milestone 4 - December 9, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236296">Bug 236296</a>: update the classpath settings feature sets wrong project compiler compliance level<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212605">Bug 212605</a>: [launching] Mac OS X launcher should not hide the necessary -XstartOnFirstThread<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257466">Bug 257466</a>: Hot Code Replace Fail dlg has two buttons with _D_<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258560">Bug 258560</a>: API to retrieve properties from ee definition files<br>
-
-<h2>November 18, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255031">Bug 255031</a>: Missing EEs prevent project to build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255381">Bug 255381</a>: Inconsistent Default Filtered resources<br>
-
-<h2>November 11, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253022">Bug 253022</a>: Suppport for new OSGi/Minimum-1.2 Execution environment<br>
-
-<h2>November 4, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252521">Bug 252521</a>: VM Disconnection exception when program terminates with thread group turned on<br>
-
-<h2>October 21, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244395">Bug 244395</a>: [refactoring] [launch config refactoring] project rename cannot undo<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=249932">Bug 249932</a>: Clean + project build does not update 'strictly match JRE' problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232710">Bug 232710</a>: [breakpoints] Java breakpoint markers description icon/text missing<br>
-
-<h2>October 7, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=248466">Bug 248466</a>: Cannot launch if build path contains a ".." entry<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244693">Bug 244693</a>: Default severity for missing JRE for Execution Environment should be Error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=249490">Bug 249490</a>: JDI fails to unmarshal JDWP reply packet correctly<br>
-
-<h2>August 26, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=189486">Bug 189486</a>: Unable to retrieve system properties for 1.1.8 VM<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245153">Bug 245153</a>: Variable references empty selection: ${java_type_name}<br>
-
-<h2>August 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244285">Bug 244285</a>: An internal error occurred during: "Initializing Java Tooling".<br>
-
-<h2>3.5 M1 - August 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238350">Bug 238350</a>: Starting Java application (like JBoss) in debug causes NPE. Run mode works ok<br>
-
-<h2>July 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239612">Bug 239612</a>: Use Ctrl+Click instead of Ctrl+Alt for 'Step Into Selection'<br>
-
-<h2>August 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217752">Bug 217752</a>: [logview] provide action to open entry stack trace in console<br>
-
-<p> </p>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF
index e9f6049..d7d35e4 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.doc.isv; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/aaa-how-to-add-things.txt b/eclipse/plugins/org.eclipse.jdt.doc.isv/aaa-how-to-add-things.txt
index cef029f..6852ab4 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/aaa-how-to-add-things.txt
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/aaa-how-to-add-things.txt
@@ -6,6 +6,5 @@ http://wiki.eclipse.org/index.php/How_to_add_things_to_the_Eclipse_doc
 Differences for jdt.doc.isv:
 
 - platformOptions.txt    -> jdtOptions.txt
-                            AND jdtaptOptions.txt
                             
 - overview-platform.html -> /reference/misc/overview-jdt.html
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/about.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/about.html
index 4602330..ac07a01 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/about.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/about.html
@@ -1,7 +1,8 @@
 <!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">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2001, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>About</title>
 </head>
@@ -25,4 +26,4 @@ indicated below, the terms and conditions of the EPL still apply to any source c
 and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/about.properties b/eclipse/plugins/org.eclipse.jdt.doc.isv/about.properties
index 813400f..72db015 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/about.properties
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Java development tooling plug-in developers guide\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright IBM Corporation. and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright IBM Corporation. and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/jdt
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/book.css b/eclipse/plugins/org.eclipse.jdt.doc.isv/book.css
index 84d8880..e6790a6 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/book.css
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/book.css
@@ -1 +1,23 @@
 @import "../PRODUCT_PLUGIN/book.css";
+
+pre.color1 {
+	color: #4444CC
+}
+span.c7 {
+	color: green
+}
+span.c6 {
+	color: red
+}
+td.c5 {
+	background-color: #FFCCAA
+}
+pre.c4 {
+	color: #3366FF
+}
+span.c3 {
+	color: #3366FF
+}
+span.c2 {
+	color: #4444CC
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/buildDoc.xml b/eclipse/plugins/org.eclipse.jdt.doc.isv/buildDoc.xml
index c36f182..e36e9c3 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/buildDoc.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/buildDoc.xml
@@ -74,41 +74,8 @@
 			<include name="*htm*" />
 		</replace>
 		
-		<antcall target="generateJdtAptJavadoc" />
-		
 	</target>
 	
-	<target name="generateJdtAptJavadoc">
-		<property name="javadoc15" value="${javadoc}" />
-		
-		<property name="jdtaptoptionsFile" value="jdtaptOptions.tmp.txt" />
-		<copy file="jdtaptOptions.txt" tofile="${jdtaptoptionsFile}" overwrite="true" />
-		
-		<condition property="argsListDelimiter" value=":">
-			<os family="unix" />
-		</condition>
-		<condition property="argsListDelimiter" value=";">
-			<os family="windows" />
-		</condition>
-
-		<replaceregexp file="${basedir}/${jdtaptoptionsFile}" flags="g" match="(\r\n?|\n);" replace="${argsListDelimiter}" />
-		<replace file="${basedir}/${jdtaptoptionsFile}" token="@rt@" value="${bootclasspath}" />
-
-		<!--scrub isv plugin directories of any preexisting api doc content-->
-		<delete dir="reference/apt" />
-		<mkdir dir="reference/apt" />
-
-		<exec dir="." executable="${javadoc15}" output="jdtapt.doc.bin.log">
-			<arg line="@${basedir}/${jdtaptoptionsFile} -J-Xmx500M" />
-		</exec>
-		
-		<!--workaround for bug 101048-->
-		<replace dir="reference/apt" token="="/../misc/api-usage-rules.html" value="="./../misc/api-usage-rules.html">
-			<include name="*htm*" />
-		</replace>
-		
-	</target>
-
 	<target name="buildPlatformDoc" unless="platform.index.present">
 		<ant antfile="buildDoc.xml" dir="../org.eclipse.platform.doc.isv" />
 	</target>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/CopyrightTabPage.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/CopyrightTabPage.html
index 06b71be..d129096 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/CopyrightTabPage.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/CopyrightTabPage.html
@@ -1,14 +1,17 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" type="text/css" href="../book.css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="stylesheet" type="text/css" href="../book.css" />
+<title>CopyrightTabPage.java</title>
 </head>
 <body>
-<font color="#4444cc">
-<pre>/*******************************************************************************
+<pre class="color1">
+/*******************************************************************************
  * Copyright (c) 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -43,210 +46,212 @@ import org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI;
 
 public class CopyrightTabPage implements ICleanUpConfigurationUI {
 
-	private PixelConverter fPixelConverter;
-	private CleanUpOptions fOptions;
-
-	public CopyrightTabPage() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#createContents(org.eclipse.swt.widgets.Composite)
-	 */
-	public Composite createContents(Composite parent) {
-		final int numColumns= 4;
-
-		if (fPixelConverter == null) {
-			fPixelConverter= new PixelConverter(parent);
-		}
-
-		final SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
-		sashForm.setFont(parent.getFont());
-
-		Composite scrollContainer = new Composite(sashForm, SWT.NONE);
-
-		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
-		scrollContainer.setLayoutData(gridData);
-
-		GridLayout layout= new GridLayout(2, false);
-		layout.marginHeight= 0;
-		layout.marginWidth= 0;
-		layout.horizontalSpacing= 0;
-		layout.verticalSpacing= 0;
-		scrollContainer.setLayout(layout);
-
-		ScrolledComposite scroll= new ScrolledComposite(scrollContainer, SWT.V_SCROLL | SWT.H_SCROLL);
-		scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		scroll.setExpandHorizontal(true);
-		scroll.setExpandVertical(true);
-
-		final Composite settingsContainer= new Composite(scroll, SWT.NONE);
-		settingsContainer.setFont(sashForm.getFont());
-
-		scroll.setContent(settingsContainer);
-
-		settingsContainer.setLayout(new PageLayout(scroll, 400, 400));
-		settingsContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
-		Composite settingsPane= new Composite(settingsContainer, SWT.NONE);
-		settingsPane.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
-		layout= new GridLayout(numColumns, false);
-		layout.verticalSpacing= (int)(1.5 * fPixelConverter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING));
-		layout.horizontalSpacing= fPixelConverter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-		layout.marginHeight= fPixelConverter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth= fPixelConverter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-		settingsPane.setLayout(layout);
-		doCreatePreferences(settingsPane);
-
-		settingsContainer.setSize(settingsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-		scroll.addControlListener(new ControlListener() {
-
-			public void controlMoved(ControlEvent e) {
-			}
-
-			public void controlResized(ControlEvent e) {
-				settingsContainer.setSize(settingsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-			}
-		});
-
-		Label sashHandle = new Label(scrollContainer, SWT.SEPARATOR | SWT.VERTICAL);
-		gridData= new GridData(SWT.RIGHT, SWT.FILL, false, true);
-		sashHandle.setLayoutData(gridData);	
-
-		return sashForm;		
-	}
-	
-	
-	
-	/**
-	 * Creates the preferences for the tab page. 
-	 * 
-	 * @param composite Composite to create in  
-	 */
-	protected void doCreatePreferences(Composite composite) {
-		Group group= new Group(composite, SWT.NONE);
-		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-		group.setLayout(new GridLayout(1, false));
-		group.setText("Copyright Update"); //$NON-NLS-1$
-
-		final Button updateCheckbox= new Button(group, SWT.CHECK);
-		updateCheckbox.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
-		updateCheckbox.setText("Update the Copyrights"); //$NON-NLS-1$
-		updateCheckbox.setSelection(fOptions.isEnabled("cleanup.update_copyrights")); //$NON-NLS-1$
-		updateCheckbox.addSelectionListener(new SelectionAdapter() {
-			/* 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				fOptions.setOption("cleanup.update_copyrights", updateCheckbox.getSelection() ? CleanUpOptions.TRUE : CleanUpOptions.FALSE); //$NON-NLS-1$
-			}
-		});		
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#getCleanUpCount()
-	 */
-	public int getCleanUpCount() {		
-		return 1;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#getPreview()
-	 */
-	public String getPreview() {		
-		StringBuffer buf= new StringBuffer();
-
-		if (fOptions.isEnabled("cleanup.update_copyrights")) {//$NON-NLS-1$
-			buf.append("/* Copyright (c) 2007, 2009 IBM Corporation and others.*/"); //$NON-NLS-1$
-		} else {
-			buf.append("/* Copyright (c) 2007, 2008 IBM Corporation and others.*/"); //$NON-NLS-1$
-		}
-
-		return buf.toString();
-
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#getSelectedCleanUpCount()
-	 */
-	public int getSelectedCleanUpCount() {		
-		return fOptions.isEnabled("cleanup.update_copyrights") ? 1 : 0; //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#setOptions(org.eclipse.jdt.ui.cleanup.CleanUpOptions)
-	 */
-	public void setOptions(CleanUpOptions options) {
-		fOptions= options;
-
-	}
-	
-	/**
-	 * Layout used for the settings part. Makes sure to show scrollbars
-	 * if necessary. The settings part needs to be layouted on resize.
-	 */
-	private static class PageLayout extends Layout {
-
-		private final ScrolledComposite fContainer;
-		private final int fMinimalWidth;
-		private final int fMinimalHight;
-
-		private PageLayout(ScrolledComposite container, int minimalWidth, int minimalHight) {
-			fContainer= container;
-			fMinimalWidth= minimalWidth;
-			fMinimalHight= minimalHight;
-		}
-
-		public Point computeSize(Composite composite, int wHint, int hHint, boolean force) {
-			if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
-				return new Point(wHint, hHint);
-			}
-
-			int x = fMinimalWidth;
-			int y = fMinimalHight;
-			Control[] children = composite.getChildren();
-			for (int i = 0; i < children.length; i++) {
-				Point size = children[i].computeSize(SWT.DEFAULT, SWT.DEFAULT, force);
-				x = Math.max(x, size.x);
-				y = Math.max(y, size.y);
-			}
-
-			Rectangle area= fContainer.getClientArea();
-			if (area.width > x) {
-				fContainer.setExpandHorizontal(true);
-			} else {
-				fContainer.setExpandHorizontal(false);
-			}
-
-			if (area.height > y) {
-				fContainer.setExpandVertical(true);
-			} else {
-				fContainer.setExpandVertical(false);
-			}
-
-			if (wHint != SWT.DEFAULT) {
-				x = wHint;
-			}
-			if (hHint != SWT.DEFAULT) {
-				y = hHint;
-			}
-
-			return new Point(x, y);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.swt.widgets.Layout#layout(org.eclipse.swt.widgets.Composite, boolean)
-		 */
-		public void layout(Composite composite, boolean force) {
-			Rectangle rect = composite.getClientArea();
-			Control[] children = composite.getChildren();
-			for (int i = 0; i < children.length; i++) {
-				children[i].setSize(rect.width, rect.height);
-			}
-		}
-	}
-}</font></pre>
+ private PixelConverter fPixelConverter;
+ private CleanUpOptions fOptions;
+
+ public CopyrightTabPage() {
+  super();
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#createContents(org.eclipse.swt.widgets.Composite)
+  */
+ public Composite createContents(Composite parent) {
+  final int numColumns= 4;
+
+  if (fPixelConverter == null) {
+   fPixelConverter= new PixelConverter(parent);
+  }
+
+  final SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
+  sashForm.setFont(parent.getFont());
+
+  Composite scrollContainer = new Composite(sashForm, SWT.NONE);
+
+  GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+  scrollContainer.setLayoutData(gridData);
+
+  GridLayout layout= new GridLayout(2, false);
+  layout.marginHeight= 0;
+  layout.marginWidth= 0;
+  layout.horizontalSpacing= 0;
+  layout.verticalSpacing= 0;
+  scrollContainer.setLayout(layout);
+
+  ScrolledComposite scroll= new ScrolledComposite(scrollContainer, SWT.V_SCROLL | SWT.H_SCROLL);
+  scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+  scroll.setExpandHorizontal(true);
+  scroll.setExpandVertical(true);
+
+  final Composite settingsContainer= new Composite(scroll, SWT.NONE);
+  settingsContainer.setFont(sashForm.getFont());
+
+  scroll.setContent(settingsContainer);
+
+  settingsContainer.setLayout(new PageLayout(scroll, 400, 400));
+  settingsContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+  Composite settingsPane= new Composite(settingsContainer, SWT.NONE);
+  settingsPane.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+  layout= new GridLayout(numColumns, false);
+  layout.verticalSpacing= (int)(1.5 * fPixelConverter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING));
+  layout.horizontalSpacing= fPixelConverter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
+  layout.marginHeight= fPixelConverter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+  layout.marginWidth= fPixelConverter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+  settingsPane.setLayout(layout);
+  doCreatePreferences(settingsPane);
+
+  settingsContainer.setSize(settingsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+  scroll.addControlListener(new ControlListener() {
+
+   public void controlMoved(ControlEvent e) {
+   }
+
+   public void controlResized(ControlEvent e) {
+    settingsContainer.setSize(settingsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+   }
+  });
+
+  Label sashHandle = new Label(scrollContainer, SWT.SEPARATOR | SWT.VERTICAL);
+  gridData= new GridData(SWT.RIGHT, SWT.FILL, false, true);
+  sashHandle.setLayoutData(gridData); 
+
+  return sashForm;  
+ }
+ 
+ 
+ 
+ /**
+  * Creates the preferences for the tab page. 
+  * 
+  * @param composite Composite to create in  
+  */
+ protected void doCreatePreferences(Composite composite) {
+  Group group= new Group(composite, SWT.NONE);
+  group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+  group.setLayout(new GridLayout(1, false));
+  group.setText("Copyright Update"); //$NON-NLS-1$
+
+  final Button updateCheckbox= new Button(group, SWT.CHECK);
+  updateCheckbox.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+  updateCheckbox.setText("Update the Copyrights"); //$NON-NLS-1$
+  updateCheckbox.setSelection(fOptions.isEnabled("cleanup.update_copyrights")); //$NON-NLS-1$
+  updateCheckbox.addSelectionListener(new SelectionAdapter() {
+   /* 
+    * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+    */
+   public void widgetSelected(SelectionEvent e) {
+    fOptions.setOption("cleanup.update_copyrights", updateCheckbox.getSelection() ? CleanUpOptions.TRUE : CleanUpOptions.FALSE); //$NON-NLS-1$
+   }
+  });  
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#getCleanUpCount()
+  */
+ public int getCleanUpCount() {  
+  return 1;
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#getPreview()
+  */
+ public String getPreview() {  
+  StringBuffer buf= new StringBuffer();
+
+  if (fOptions.isEnabled("cleanup.update_copyrights")) {//$NON-NLS-1$
+   buf.append("/* Copyright (c) 2007, 2009 IBM Corporation and others.*/"); //$NON-NLS-1$
+  } else {
+   buf.append("/* Copyright (c) 2007, 2008 IBM Corporation and others.*/"); //$NON-NLS-1$
+  }
+
+  return buf.toString();
+
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#getSelectedCleanUpCount()
+  */
+ public int getSelectedCleanUpCount() {  
+  return fOptions.isEnabled("cleanup.update_copyrights") ? 1 : 0; //$NON-NLS-1$
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.jdt.ui.cleanup.ICleanUpConfigurationUI#setOptions(org.eclipse.jdt.ui.cleanup.CleanUpOptions)
+  */
+ public void setOptions(CleanUpOptions options) {
+  fOptions= options;
+
+ }
+ 
+ /**
+  * Layout used for the settings part. Makes sure to show scrollbars
+  * if necessary. The settings part needs to be layouted on resize.
+  */
+ private static class PageLayout extends Layout {
+
+  private final ScrolledComposite fContainer;
+  private final int fMinimalWidth;
+  private final int fMinimalHight;
+
+  private PageLayout(ScrolledComposite container, int minimalWidth, int minimalHight) {
+   fContainer= container;
+   fMinimalWidth= minimalWidth;
+   fMinimalHight= minimalHight;
+  }
+
+  public Point computeSize(Composite composite, int wHint, int hHint, boolean force) {
+   if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
+    return new Point(wHint, hHint);
+   }
+
+   int x = fMinimalWidth;
+   int y = fMinimalHight;
+   Control[] children = composite.getChildren();
+   for (int i = 0; i < children.length; i++) {
+    Point size = children[i].computeSize(SWT.DEFAULT, SWT.DEFAULT, force);
+    x = Math.max(x, size.x);
+    y = Math.max(y, size.y);
+   }
+
+   Rectangle area= fContainer.getClientArea();
+   if (area.width > x) {
+    fContainer.setExpandHorizontal(true);
+   } else {
+    fContainer.setExpandHorizontal(false);
+   }
+
+   if (area.height > y) {
+    fContainer.setExpandVertical(true);
+   } else {
+    fContainer.setExpandVertical(false);
+   }
+
+   if (wHint != SWT.DEFAULT) {
+    x = wHint;
+   }
+   if (hHint != SWT.DEFAULT) {
+    y = hHint;
+   }
+
+   return new Point(x, y);
+  }
+
+  /* (non-Javadoc)
+   * @see org.eclipse.swt.widgets.Layout#layout(org.eclipse.swt.widgets.Composite, boolean)
+   */
+  public void layout(Composite composite, boolean force) {
+   Rectangle rect = composite.getClientArea();
+   Control[] children = composite.getChildren();
+   for (int i = 0; i < children.length; i++) {
+    children[i].setSize(rect.width, rect.height);
+   }
+  }
+ }
+}
+
+</pre>
 </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_classpath.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_classpath.htm
index 15fc495..f8e6e2f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_classpath.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_classpath.htm
@@ -1,293 +1,285 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<HEAD>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Setting the Java build path</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
+</head>
+<body>
+<h2>Setting the Java build path</h2>
+<p>This section describes how to set the Java build path.  The build path is the classpath
+that is used for building a Java project (<b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html">IJavaProject</a></b>).</p>
 
-<link rel="stylesheet" type="text/css" HREF="../book.css">
-</HEAD>
-<BODY>
-<h2>
-Setting the Java build path</h2>
-<P>
+<p>A classpath is simply an array of classpath entries (<b><a href=
+"../reference/api/org/eclipse/jdt/core/IClasspathEntry.html">IClasspathEntry</a></b>) that describe
+the types that are available.  The types can appear in source or binary form and the ordering
+of the entries on the path defines the lookup order for resolving types during a build.</p>
+<p>The Java build path is reflected in the structure of a Java project element.  You can query
+a project for its package fragment roots (<b><a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html">IPackageFragmentRoot</a></b>). 
+Each classpath entry maps to one or more package fragment roots, each of which further contains a
+set of package fragments.</p>
+<p>This discussion of the build path does not involve the Java runtime path, which can be defined
+separately from the build path.  (See <b><a href="../guide/jdt_api_run.htm">Running Java
+code</a></b> for a discussion of the runtime classpath.)</p>
 
-This section describes how to set the Java build path.  The build path is
-the classpath that is used for building a Java project (<b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html">IJavaProject</a></b>).
-</p>
-<P>
-A classpath is simply an array of classpath entries (<b><a href="../reference/api/org/eclipse/jdt/core/IClasspathEntry.html">IClasspathEntry</a></b>)
-that describe the types that are available.  The types can appear in source
-or binary form and the ordering of the entries on the path defines the lookup
-order for resolving types during a build.
-</p>
+<h3>Changing the build path</h3>
+<p>You can programmatically change a project's build path using <b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#setRawClasspath(org.eclipse.jdt.core.IClasspathEntry[],%20org.eclipse.core.runtime.IProgressMonitor)">
+setRawClasspath</a></b> on the corresponding project's Java element.  The following code sets
+the classpath for a project resource:</p>
+<pre class="color1">
 
-<P>
-The Java build path is reflected in the structure of a Java project
-element.  You can query a project for its package fragment roots (<b><a href="../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html">IPackageFragmentRoot</a></b>). 
-Each classpath entry maps to one or more package fragment roots, each of which
-further contains a set of package fragments.</p>
-<P>This discussion of the
-build path does not involve the Java runtime path, which can be defined
-separately from the build path.  (See <b><a href="../guide/jdt_api_run.htm">Running
-Java code</a></b> for a discussion of the runtime classpath.)</p>
+ IProject project = ... // get some project resource
+ IJavaProject javaProject = JavaCore.create(project);
+ IClasspathEntry[] newClasspath = ...;
+ javaProject.setRawClasspath(newClasspath, someProgressMonitor);
+ 
+</pre>
+<p>(Note:  The use of the term "raw" classpath is used to emphasize the fact that any
+variables used to describe entry locations have not been resolved.)</p>
 
-<h3>
-Changing the build path</h3>
-<P>
-You can programmatically change a project's build path using <b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#setRawClasspath(org.eclipse.jdt.core.IClasspathEntry[], org.eclipse.core.runtime.IProgressMonitor)">
-setRawClasspath</a></b> on the corresponding project's Java element.  The
-following code sets the classpath for a project resource:</p>
+<p>The Java build path is persisted into a file named '.classpath' in the project's file
+structure.  The purpose of this file is to provide a way to share Java build path settings
+with others through some source code repository. In particular, this file should not be manually
+edited, since it may get corrupted.</p>
+<h3>Classpath entries</h3>
+<p>Classpath entries can be defined using factory methods defined on <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html">JavaCore</a></b>.  Classpath entries can
+reference any of the following:</p>
+<ul>
+<li><b>a source folder</b> - a folder containing source compilation units organized under their
+corresponding package directory structure. Source folders are used to better structure source files
+in large projects, and may only be referenced within the containing project. The corresponding
+factory method is <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#newSourceEntry(org.eclipse.core.runtime.IPath)">
 
-	<pre><font color='#4444CC'>
-	IProject project = ... // get some project resource
-	IJavaProject javaProject = JavaCore.create(project);
-	IClasspathEntry[] newClasspath = ...;
-	javaProject.setRawClasspath(newClasspath, someProgressMonitor);
-	</font></pre>
+newSourceEntry</a></b>. Inside a given source folder, each compilation unit is expected to be
+nested in the appropriate folder structure according to its package statement.  For example,
+compilation unit 'X.java' in package 'p1' must be located inside sub-folder 'p1' of a source
+folder. It is possible to use multiple source folders, as long as they don't overlap. A source
+folder may be assigned its own output location which determines where generated class files should
+be placed.  If none is specified, then class files will be placed in the containing project's
+output location (see <b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#setOutputLocation(org.eclipse.core.runtime.IPath,%20org.eclipse.core.runtime.IProgressMonitor)">
+IJavaProject.setOutputLocation</a></b>).
+<p>The following is an example classpath entry that denotes the source folder 'src' of project
+'MyProject':</p>
+<pre class="color1">
+   IClasspathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));
+</pre></li>
+<li><b>a binary library</b> - either a class file folder (contained inside or outside the
+workspace) or a class file archive file (contained inside or outside the workspace). Archive
+libraries can have attached source archives, which are extracted when asking a class file element
+for its source (<b><a href=
+"../reference/api/org/eclipse/jdt/core/ISourceReference.html#getSource()">getSource</a></b>). The
+factory method for libraries is <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#newLibraryEntry(org.eclipse.core.runtime.IPath,%20org.eclipse.core.runtime.IPath,%20org.eclipse.core.runtime.IPath,%20boolean)">
 
-<P>(Note:  The use of the term "raw" classpath is used to
-emphasize the fact that any variables used to describe entry locations have not
-been resolved.)
-</p>
-<P>
-The Java build path is persisted into a file named '.classpath' in the project's
-file structure.  The purpose of this file is to provide a way to share Java build path settings with others through 
-some source code repository. In particular, this file should not be manually edited, since it may get corrupted.
-</p> 
-<H3>
-Classpath entries</H3>
-<P>
-Classpath entries can be defined using factory methods defined on <b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html">JavaCore</a></b>. 
-Classpath entries can reference any of the following:</p>
+newLibraryEntry</a></b>.
+<p>The following is an example classpath entry that denotes the class file folder 'lib' of
+'MyProject':</p>
+<pre class="color1">
 
-<ul>
-<li><b>a source folder</b> - 
-a folder containing source compilation units organized under their corresponding package directory structure. Source folders are used to better structure 
-source files in large projects, and may only be referenced within the containing project.
-  The corresponding factory method is 
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#newSourceEntry(org.eclipse.core.runtime.IPath)">newSourceEntry</a></b>.
-Inside a given source folder, each compilation unit is expected to be nested in the appropriate folder structure according to its package
-  statement.  For example, compilation unit 'X.java' in package 'p1' 
-must be located inside sub-folder 'p1' of a source folder.
-It is possible to use multiple source folders, as long as they don't overlap. A
-  source folder may be assigned its own output location which determines where
-  generated class files should be placed.  If none is specified, then class
-  files will be placed in the containing project's output location
-  (see <b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#setOutputLocation(org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IProgressMonitor)">IJavaProject.setOutputLocation</a></b>).<P>The
-  following is an example classpath entry that denotes the source folder 'src' of project
-  'MyProject':</p>
-	<pre><font color='#4444CC'>   IClasspathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));</font></pre>
-</li>
-<li><b>a binary library</b> - either a class file folder (contained inside or outside the workspace) or a class file archive file (contained inside or outside the workspace).
-Archive libraries can have attached source archives, which are extracted when asking a class file element  for
-  its source (<b><a href="../reference/api/org/eclipse/jdt/core/ISourceReference.html#getSource()">getSource</a></b>).
-The factory method for libraries is 
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#newLibraryEntry(org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath, boolean)">newLibraryEntry</a></b>.
-<P>
-The following is an example classpath entry that denotes the class file folder 'lib' of  'MyProject':</p>
-	<pre><font color='#4444CC'>
   IClasspathEntry libEntry = JavaCore.newLibraryEntry(
-    new Path("/MyProject/lib"), 
+    new Path("/MyProject/lib"), 
     null, // no source
     null, // no source
     false); // not exported
-	</font></pre>
-  <p>The following classpath entry has a source attachment:</p>
-	<pre><font color='#4444CC'>
+ 
+</pre>
+<p>The following classpath entry has a source attachment:</p>
+<pre class="color1">
+
   IClasspathEntry libEntry = JavaCore.newLibraryEntry(
-    new Path("d:/lib/foo.jar"), // library location
-    new Path("d:/lib/foo_src.zip"), // source archive location
-    new Path("src"), // source archive root path
+    new Path("d:/lib/foo.jar"), // library location
+    new Path("d:/lib/foo_src.zip"), // source archive location
+    new Path("src"), // source archive root path
     true); // exported
-	</font></pre><p>The source archive root path describes the location of the
-  root within the source archive.  If set to null, the root of the archive
-  will be inferred dynamically.</p>
-  <br></li>
-<li><b>a prerequisite project</b> - another Java project.  A prerequisite project always contributes its source folders to dependent projects.
-It can also optionally contribute any of its classpath entries which are tagged as exported (see factory methods supporting
-  the extra boolean argument 'isExported').
-This means that in addition to contributing its source to its dependents, a project will also export all classpath entries tagged as
-  such.  This allows prerequisite projects to better hide their own
-  structure changes.  For example, a given project may choose to switch from using a source folder to exporting a library. 
-  This can be done without requiring its dependent projects to change their classpath.
-The factory method for a project prerequisite is 
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#newProjectEntry(org.eclipse.core.runtime.IPath, boolean)">newProjectEntry</a></b>.
-<P>
-The following classpath entry denotes a prerequisite project 'MyFramework'.</p>
-	<pre><font color='#4444CC'>
-  IClasspathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); // exported
-	</font></pre>
-</li>
-<li><b>an indirect reference to a project or library, using some classpath variable</b> -
-  The location of projects or libraries can be dynamically resolved relative to a
-classpath variable, which is specified as the first segment of the entry path. The remainder of the entry path is then appended to the resolved variable path.
-The factory method for a classpath variable is 
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#newVariableEntry(org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath)">newVariableEntry</a></b>.
-Classpath variables are global to the workspace, and can be manipulated through JavaCore methods 
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#getClasspathVariable(java.lang.String)">getClasspathVariable</a></b> and
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#setClasspathVariable(java.lang.String, org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IProgressMonitor)">setClasspathVariable</a></b>. 
-  <p>
-It is possible to register an automatic <b><a href="../reference/api/org/eclipse/jdt/core/ClasspathVariableInitializer.html">classpath variable initializer</a></b>
-which is invoked through the extension point <b><a href="../reference/extension-points/org_eclipse_jdt_core_classpathVariableInitializer.html">org.eclipse.jdt.core.classpathVariableInitializer</a></b> 
+ 
+</pre>
+<p>The source archive root path describes the location of the root within the source archive. 
+
+If set to null, the root of the archive will be inferred dynamically.</p>
+<br /></li>
+<li><b>a prerequisite project</b> - another Java project.  A prerequisite project always
+contributes its source folders to dependent projects. It can also optionally contribute any of its
+classpath entries which are tagged as exported (see factory methods supporting the extra boolean
+argument 'isExported'). This means that in addition to contributing its source to its dependents, a
+project will also export all classpath entries tagged as such.  This allows prerequisite
+projects to better hide their own structure changes.  For example, a given project may choose
+to switch from using a source folder to exporting a library.  This can be done without
+requiring its dependent projects to change their classpath. The factory method for a project
+prerequisite is <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#newProjectEntry(org.eclipse.core.runtime.IPath,%20boolean)">
+newProjectEntry</a></b>.
+
+<p>The following classpath entry denotes a prerequisite project 'MyFramework'.</p>
+<pre class="color1">
+
+  IClasspathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); // exported
+ 
+</pre></li>
+<li><b>an indirect reference to a project or library, using some classpath variable</b> - The
+location of projects or libraries can be dynamically resolved relative to a classpath variable,
+which is specified as the first segment of the entry path. The remainder of the entry path is then
+appended to the resolved variable path. The factory method for a classpath variable is <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#newVariableEntry(org.eclipse.core.runtime.IPath,%20org.eclipse.core.runtime.IPath,%20org.eclipse.core.runtime.IPath)">
+newVariableEntry</a></b>. Classpath variables are global to the workspace, and can be manipulated
+through JavaCore methods <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#getClasspathVariable(java.lang.String)">getClasspathVariable</a></b>
+and <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#setClasspathVariable(java.lang.String,%20org.eclipse.core.runtime.IPath,%20org.eclipse.core.runtime.IProgressMonitor)">
+
+setClasspathVariable</a></b>. 
+<p>It is possible to register an automatic <b><a href=
+"../reference/api/org/eclipse/jdt/core/ClasspathVariableInitializer.html">classpath variable
+initializer</a></b> which is invoked through the extension point <b><a href=
+"../reference/extension-points/org_eclipse_jdt_core_classpathVariableInitializer.html">org.eclipse.jdt.core.classpathVariableInitializer</a></b>
 when the workspace is started.</p>
-<P>
-The following classpath entry denotes a library whose location is kept in the
-variable 'HOME'.  The source attachment is defined using the
-variables  'SRC_HOME' and 'SRC_ROOT' :</p>
-	<pre><font color='#4444CC'>
+<p>The following classpath entry denotes a library whose location is kept in the variable
+'HOME'.  The source attachment is defined using the variables  'SRC_HOME' and 'SRC_ROOT'
+:</p>
+
+<pre class="color1">
+
   IClasspathEntry varEntry = JavaCore.newVariableEntry(
-    new Path("HOME/foo.jar"), // library location
-    new Path("SRC_HOME/foo_src.zip"), // source archive location
-    new Path("SRC_ROOT"), // source archive root path
-    true); // exported	
-  JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress monitor
-	</font></pre>
-</li>
-<li><b>entry denoting a classpath container</b> - an indirect reference to a structured set of project or libraries.
-  Classpath containers are used to refer to a set of classpath entries that
-  describe a complex library structure.  Like classpath variables,
-  classpath containers <b><a href="../reference/api/org/eclipse/jdt/core/IClasspathContainer.html">(IClasspathContainer)</a></b>
-are dynamically resolved.  Classpath containers may be used by different
-  projects, causing their path entries to resolve to distinct values per
-  project.  They also provide meta information about the library that they
-  represent (name, kind, description of library.)  
-  The factory method for a classpath variable is 
-  <b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#newContainerEntry(org.eclipse.core.runtime.IPath, boolean)">newContainerEntry</a></b>.
-  Classpath containers can be manipulated through JavaCore methods 
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#getClasspathContainer(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)">getClasspathContainer</a></b> and
-<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#setClasspathContainer(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject[], org.eclipse.jdt.core.IClasspathContainer[], org.eclipse.core.runtime.IProgressMonitor)">setClasspathContainer</a></b>. 
-  <p>
-It is possible to register an automatic <b><a href="../reference/api/org/eclipse/jdt/core/ClasspathContainerInitializer.html">classpath container initializer</a></b>
-which is lazily invoked through the extension point <b><a href="../reference/extension-points/org_eclipse_jdt_core_classpathContainerInitializer.html">org.eclipse.jdt.core.classpathContainerInitializer</a></b>
+    new Path("HOME/foo.jar"), // library location
+    new Path("SRC_HOME/foo_src.zip"), // source archive location
+    new Path("SRC_ROOT"), // source archive root path
+    true); // exported 
+  JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress monitor
+ 
+</pre></li>
+<li><b>entry denoting a classpath container</b> - an indirect reference to a structured set of
+project or libraries. Classpath containers are used to refer to a set of classpath entries that
+describe a complex library structure.  Like classpath variables, classpath containers
+<b><a href=
+"../reference/api/org/eclipse/jdt/core/IClasspathContainer.html">(IClasspathContainer)</a></b> are
+dynamically resolved.  Classpath containers may be used by different projects, causing their
+path entries to resolve to distinct values per project.  They also provide meta information
+about the library that they represent (name, kind, description of library.)  The factory
+method for a classpath variable is <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#newContainerEntry(org.eclipse.core.runtime.IPath,%20boolean)">
+
+newContainerEntry</a></b>. Classpath containers can be manipulated through JavaCore methods
+<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#getClasspathContainer(org.eclipse.core.runtime.IPath,%20org.eclipse.jdt.core.IJavaProject)">
+getClasspathContainer</a></b> and <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#setClasspathContainer(org.eclipse.core.runtime.IPath,%20org.eclipse.jdt.core.IJavaProject[],%20org.eclipse.jdt.core.IClasspathContainer[],%20org.eclipse.core.runtime.IProgressMonitor)">
+setClasspathContainer</a></b>. 
+<p>It is possible to register an automatic <b><a href=
+"../reference/api/org/eclipse/jdt/core/ClasspathContainerInitializer.html">classpath container
+initializer</a></b> which is lazily invoked through the extension point <b><a href=
+"../reference/extension-points/org_eclipse_jdt_core_classpathContainerInitializer.html">org.eclipse.jdt.core.classpathContainerInitializer</a></b>
 when the container needs to be bound.</p>
-  <P>The following classpath entry denotes a system class library container:</p>
-	<pre><font color='#4444CC'>
+
+<p>The following classpath entry denotes a system class library container:</p>
+<pre class="color1">
+
   IClasspathEntry varEntry = JavaCore.newContainerEntry(
-    new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
-    false); // not exported	
+    new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
+    false); // not exported 
 
   JavaCore.setClasspathContainer(
-    new Path("JDKLIB/default"), 
+    new Path("JDKLIB/default"), 
     new IJavaProject[]{ myProject }, // value for 'myProject'
     new IClasspathContainer[] {
       new IClasspathContainer() {
         public IClasspathEntry[] getClasspathEntries() {
           return new IClasspathEntry[]{ 
-            JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
+            JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
           }; 
         }
-        public String getDescription() { return "Basic JDK library container"; }
+        public String getDescription() { return "Basic JDK library container"; }
         public int getKind() { return IClasspathContainer.K_SYSTEM; }
-        public IPath getPath() { return new Path("JDKLIB/basic"); }
+        public IPath getPath() { return new Path("JDKLIB/basic"); }
       }
     }, 
     null);
-</font></pre>
-</li>
+</pre></li>
 </ul>
+<h3>Exclusion patterns</h3>
+<p>A classpath source entry may be assigned an exclusion pattern, which prevents certain resources
+in a source folder from being visible on the classpath.  Using a pattern allows specified
+portions of the resource tree to be filtered out.  Each exclusion pattern path is relative to
+the classpath entry and uses a pattern mechanism similar to Ant.  Exclusion patterns can be
+used to specify nested source folders as long as the outer pattern excludes the inner pattern.</p>
 
-<h3>
-Exclusion patterns</h3>
-
-<p>A classpath source entry may be assigned an exclusion pattern, which prevents
-certain resources in a source folder from being visible on the classpath. 
-Using a pattern allows
-specified portions of the resource tree to be filtered out.  Each exclusion
-pattern path is relative to the classpath entry and uses a pattern mechanism
-similar to Ant.  Exclusion patterns can be used to specify nested source
-folders as long as the outer pattern excludes the inner pattern.</p>
-
-<p> See <b><a href="../reference/api/org/eclipse/jdt/core/IClasspathEntry.html#getExclusionPatterns()">getExclusionPatterns</a></b> for
-more detail on exclusion patterns.</p>
+<p>See <b><a href=
+"../reference/api/org/eclipse/jdt/core/IClasspathEntry.html#getExclusionPatterns()">getExclusionPatterns</a></b>
+for more detail on exclusion patterns.</p>
+<p>The Java project API <b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#isOnClasspath(org.eclipse.core.resources.IResource)">
+isOnClasspath</a></b> checks both inclusion and exclusion patterns before determining whether a
+particular resource is on the classpath.</p>
+<p>Remarks:</p>
+<ul>
+<li>Exclusion patterns have higher precedence than inclusion patterns; in other words, exclusion
+patterns can remove files from the ones that are to be included, not the other way around.</li>
+<li>A nested source folder excluded from build path can be set as an output location. The following
+is an example classpath entry that denotes the source folder 'src' of project 'MyProject' with an
+excluded nested source folder used as an output location:
 
-<p>
-The Java project API <b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#isOnClasspath(org.eclipse.core.resources.IResource)">isOnClasspath</a>
-</b> checks both inclusion and exclusion patterns before determining
-whether a particular resource is on the classpath.</p>
+<pre class="color1">
 
-<P>
-Remarks:</p>
-<ul>
-<li>
-Exclusion patterns have higher precedence than inclusion patterns; in other
-words, exclusion patterns can remove files from the ones that are to be included, not the
-other way around.
-</li>
-<li>
-A nested source folder excluded from build path can be set as an output location.
- The following is an example classpath entry that denotes the source folder 'src' of project
- 'MyProject' with an excluded nested source folder used as an output location:
-	<pre><font color='#4444CC'>
-  IPath sourceFolder = new Path("/MyProject/src");
-  IPath outputLocation = sourceFolder.append("bin");
+  IPath sourceFolder = new Path("/MyProject/src");
+  IPath outputLocation = sourceFolder.append("bin");
   IClasspathEntry srcEntry = JavaCore.newSourceEntry(
     sourceFolder, // source folder location
     new Path[] { outputLocation }, // excluded nested folder
     outputLocation); // output location
-    </font></pre>
-</li>
+    
+</pre></li>
 </ul>
-<h3>
-Inclusion patterns</h3>
-
-<p>A classpath source entry may also be assigned an inclusion pattern, which explicitly
- defines resources to be visible on the classpath. 
-When no inclusion patterns are specified, the source entry includes all relevant files
- in the resource tree rooted at this source entry's path.
-Specifying one or more inclusion patterns means that only the specified portions of
- the resource tree are to be included. Each path specified must be a relative path,
- and will be interpreted relative to this source entry's path. File patterns are
- case-sensitive. A file matched by one or more of these patterns is included in
- the corresponding package fragment root unless it is excluded by one or more of
- this entry's exclusion patterns.</p>
-
-<p>See <b><a href="../reference/api/org/eclipse/jdt/core/IClasspathEntry.html#getExclusionPatterns()">getExclusionPatterns</a></b>
- for a discussion of the syntax and semantics of path patterns. The absence of any inclusion patterns
- is semantically equivalent to the explicit inclusion pattern <code>**</code>.</p>
-
-<p>
-The Java project API <b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#isOnClasspath(org.eclipse.core.resources.IResource)">isOnClasspath</a>
-</b> checks both inclusion and exclusion patterns before determining
-whether a particular resource is on the classpath.</p>
+<h3>Inclusion patterns</h3>
+<p>A classpath source entry may also be assigned an inclusion pattern, which explicitly defines
+resources to be visible on the classpath.  When no inclusion patterns are specified, the
+source entry includes all relevant files in the resource tree rooted at this source entry's path.
+Specifying one or more inclusion patterns means that only the specified portions of the resource
+tree are to be included. Each path specified must be a relative path, and will be interpreted
+relative to this source entry's path. File patterns are case-sensitive. A file matched by one or
+more of these patterns is included in the corresponding package fragment root unless it is excluded
+by one or more of this entry's exclusion patterns.</p>
+<p>See <b><a href=
+"../reference/api/org/eclipse/jdt/core/IClasspathEntry.html#getExclusionPatterns()">getExclusionPatterns</a></b>
+for a discussion of the syntax and semantics of path patterns. The absence of any inclusion
+patterns is semantically equivalent to the explicit inclusion pattern <code>**</code>.</p>
 
+<p>The Java project API <b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#isOnClasspath(org.eclipse.core.resources.IResource)">
+isOnClasspath</a></b> checks both inclusion and exclusion patterns before determining whether a
+particular resource is on the classpath.</p>
 <p>Examples:</p>
 <ul>
-<li>
-The inclusion pattern <code>src/**</code> by itself includes all files under a root
- folder named <code>src</code>.
-</li>
-<li>
-The inclusion patterns <code>src/**</code> and <code>tests/**</code>
- includes all files under the root folders named <code>src</code> and <code>tests</code>.
-</li>
-<li>
-The inclusion pattern <code>src/**</code> together with the exclusion pattern
- <code>src/**/Foo.java</code> includes all files under a root folder named
- <code>src</code> except for ones named <code>Foo.java</code>.
-</li>
-</ul>
-<H2>
-Classpath resolution</H2>
-
-Since classpath variables and containers allow you to define dynamically bound
-classpath entries, the classpath API distinguishes between a raw and a resolved
-classpath.   The raw classpath is the one originally
-set on the Java project using 
-<b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#setRawClasspath(org.eclipse.jdt.core.IClasspathEntry[], org.eclipse.core.runtime.IProgressMonitor)">setRawClasspath</a></b>,
-and can be further queried by asking the project for
-<b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#getRawClasspath()">getRawClasspath</a></b>. 
-The resolved classpath can be queried using 
-<b><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#getResolvedClasspath(boolean)">getResolvedClasspath</a></b>. 
-This operation triggers initialization of any variables and containers necessary
-to resolve the classpath.  Many Java Model operations
-implicitly cause the Java build path to be resolved.  For example,
-computing a project's package fragment roots requires the build path to be
-resolved.
+<li>The inclusion pattern <code>src/**</code> by itself includes all files under a root folder
+named <code>src</code>.</li>
+<li>The inclusion patterns <code>src/**</code> and <code>tests/**</code> includes all files under
+the root folders named <code>src</code> and <code>tests</code>.</li>
 
+<li>The inclusion pattern <code>src/**</code> together with the exclusion pattern
+<code>src/**/Foo.java</code> includes all files under a root folder named <code>src</code> except
+for ones named <code>Foo.java</code>.</li>
+</ul>
+<h2>Classpath resolution</h2>
+Since classpath variables and containers allow you to define dynamically bound classpath entries,
+the classpath API distinguishes between a raw and a resolved classpath.   The raw
+classpath is the one originally set on the Java project using <b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#setRawClasspath(org.eclipse.jdt.core.IClasspathEntry[],%20org.eclipse.core.runtime.IProgressMonitor)">
 
-</BODY>
-</HTML>
+setRawClasspath</a></b>, and can be further queried by asking the project for <b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#getRawClasspath()">getRawClasspath</a></b>. 
+The resolved classpath can be queried using <b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#getResolvedClasspath(boolean)">getResolvedClasspath</a></b>.
+This operation triggers initialization of any variables and containers necessary to resolve the
+classpath.  Many Java Model operations implicitly cause the Java build path to be
+resolved.  For example, computing a project's package fragment roots requires the build path
+to be resolved.
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeassist.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeassist.htm
index fb6cb30..3870786 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeassist.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeassist.htm
@@ -1,147 +1,146 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<HEAD>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Performing code assist on Java code</title>
-
-<link rel="stylesheet" type="text/css" HREF="../book.css">
-</HEAD>
-<BODY>
+<link rel="stylesheet" type="text/css" href="../book.css" />
+</head>
+<body>
 <h2>Performing code assist on Java code</h2>
-<P>
-The JDT API allows other plug-ins to perform code assist or code select on some Java elements. 
-Elements that allow this manipulation should implement <b><a href="../reference/api/org/eclipse/jdt/core/ICodeAssist.html"> ICodeAssist</a></b>.</p>
-<P>There are two kinds of manipulation:</P>
+<p>The JDT API allows other plug-ins to perform code assist or code select on some Java elements.
+Elements that allow this manipulation should implement <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICodeAssist.html">ICodeAssist</a></b>.</p>
+
+<p>There are two kinds of manipulation:</p>
 <ul>
 <li>Code completion - compute the completion of a Java token.</li>
-<li>Code selection - answer the Java element indicated by the selected text of a
-  given offset and length.</li>
+<li>Code selection - answer the Java element indicated by the selected text of a given offset and
+length.</li>
 </ul>
-<p>
-In the Java model there are two elements that implement this interface: <b><a href="../reference/api/org/eclipse/jdt/core/IClassFile.html"> IClassFile</a></b> and <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"> ICompilationUnit</a></b>. 
-Code completion and code selection only answer results for a class file if it has attached source.</p>
-<H3>
-Code completion</h3>
-
-<H4>
-Performing a code completion
-</h4>
-<P>
-One way to programmatically perform code completion is to invoke <b><a href="../reference/api/org/eclipse/jdt/core/ICodeAssist.html#codeComplete(int, org.eclipse.jdt.core.CompletionRequestor)">ICodeAssist.codeComplete</a></b>.
-You specify the offset in the compilation unit after which the code completion
-is desired.  You must also supply an instance of <b><a href="../reference/api/org/eclipse/jdt/core/CompletionRequestor.html"> CompletionRequestor</a></b> to accept the possible completions.</P>
-
-
-
-<P>The method in <b><a href="../reference/api/org/eclipse/jdt/core/CompletionRequestor.html#accept(org.eclipse.jdt.core.CompletionProposal)">CompletionRequestor.accept(CompletionProposal)</a>
-</b>accepts all kinds of proposals for code completion. 
-The methods of <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html">CompletionProposal</a>
-</b> give information that describes the proposed element (its
-name, declaring type, etc.), its proposed position for insertion in the
-compilation unit, and its relevance.  </P>
-
-<P>A completion requestor can accept many different kinds of completions.
-This kind is given by <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#getKind()">CompletionProposal.getKind</a></b>.
-</P><P>Some of the possible completion kinds are (The complete list of possible completion kinds can be seen on <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html">
-CompletionProposal</a></b>):</P>
-
+<p>In the Java model there are two elements that implement this interface: <b><a href=
+"../reference/api/org/eclipse/jdt/core/IClassFile.html">IClassFile</a></b> and <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html">ICompilationUnit</a></b>.  Code
+completion and code selection only answer results for a class file if it has attached source.</p>
+
+<h3>Code completion</h3>
+<h4>Performing a code completion</h4>
+<p>One way to programmatically perform code completion is to invoke <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICodeAssist.html#codeComplete(int,%20org.eclipse.jdt.core.CompletionRequestor)">
+ICodeAssist.codeComplete</a></b>. You specify the offset in the compilation unit after which the
+code completion is desired.  You must also supply an instance of <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionRequestor.html">CompletionRequestor</a></b> to
+accept the possible completions.</p>
+<p>The method in <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionRequestor.html#accept(org.eclipse.jdt.core.CompletionProposal)">
+CompletionRequestor.accept(CompletionProposal)</a></b> accepts all kinds of proposals for code
+completion.  The methods of <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html">CompletionProposal</a></b> give
+information that describes the proposed element (its name, declaring type, etc.), its proposed
+position for insertion in the compilation unit, and its relevance.  </p>
+
+<p>A completion requestor can accept many different kinds of completions. This kind is given by
+<b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#getKind()">CompletionProposal.getKind</a></b>.</p>
+<p>Some of the possible completion kinds are (The complete list of possible completion kinds can be
+seen on <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html">CompletionProposal</a></b>):</p>
 <ul>
-  <li>annotation attribute - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#ANNOTATION_ATTRIBUTE_REF">ANNOTATION_ATTRIBUTE_REF</a></b></li>
-  <li>anonymous type - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#ANONYMOUS_CLASS_DECLARATION">ANONYMOUS_CLASS_DECLARATION</a></b></li>
-  <li>type reference - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#TYPE_REF">TYPE_REF</a></b></li>
-  <li>field reference- <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#FIELD_REF">FIELD_REF</a></b></li>
-  <li>keyword - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#KEYWORD">KEYWORD</a></b></li>
-  <li>label reference - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#LABEL_REF">LABEL_REF</a></b></li>
-  <li>local variable reference - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#LOCAL_VARIABLE_REF">LOCAL_VARIABLE_REF</a></b></li>
-  <li>method reference - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#METHOD_REF">METHOD_REF</a></b></li>
-  <li>method declaration - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#METHOD_DECLARATION">METHOD_DECLARATION</a></b></li>
-  <li>package import or reference - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#PACKAGE_REF">PACKAGE_REF</a></b></li>
-  <li>variable name - <b><a href="../reference/api/org/eclipse/jdt/core/CompletionProposal.html#VARIABLE_DECLARATION">VARIABLE_DECLARATION</a></b></li>
+<li>annotation attribute - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#ANNOTATION_ATTRIBUTE_REF">ANNOTATION_ATTRIBUTE_REF</a></b></li>
+<li>anonymous type - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#ANONYMOUS_CLASS_DECLARATION">ANONYMOUS_CLASS_DECLARATION</a></b></li>
+<li>type reference - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#TYPE_REF">TYPE_REF</a></b></li>
+
+<li>field reference- <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#FIELD_REF">FIELD_REF</a></b></li>
+<li>keyword - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#KEYWORD">KEYWORD</a></b></li>
+<li>label reference - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#LABEL_REF">LABEL_REF</a></b></li>
+<li>local variable reference - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#LOCAL_VARIABLE_REF">LOCAL_VARIABLE_REF</a></b></li>
+<li>method reference - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#METHOD_REF">METHOD_REF</a></b></li>
+<li>method declaration - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#METHOD_DECLARATION">METHOD_DECLARATION</a></b></li>
+
+<li>package import or reference - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#PACKAGE_REF">PACKAGE_REF</a></b></li>
+<li>variable name - <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionProposal.html#VARIABLE_DECLARATION">VARIABLE_DECLARATION</a></b></li>
 </ul>
-
-<p>The completion requestor must also be able to accept compilation
-errors.  </p>
-<h4>Completion relevance
-</h4>
-
-<p>Because there may be many different possible completions, the notion of
-relevance is used to compare the relevance of a suggested completion to other
-proposals.  Relevance is represented by a positive integer.  The value
-has no implicit meaning except to be used relative to the value for other
-proposals.  The relevance of a code completion candidate can be affected by
-the expected type of the expression, as it relates to the types in the
-surrounding code, such as variable types, cast types, return types, etc. 
-The presence of an expected prefix or suffix in a completion also affects its
-relevance.
-</p>
-
-<h4>Completion context
-</h4>
-
-<p>An instance of <b><a href="../reference/api/org/eclipse/jdt/core/CompletionRequestor.html">CompletionRequestor</a></b> can also
-accept a completion context. This context is given by the method
-<b><a href="../reference/api/org/eclipse/jdt/core/CompletionRequestor.html#acceptContext(org.eclipse.jdt.core.CompletionContext)">
-CompletionRequestor.acceptContext(CompletionContext)</a></b> and does not depend on a specific completion proposal. The methods of 
-<b><a href="../reference/api/org/eclipse/jdt/core/CompletionContext.html">CompletionContext</a></b> give information that describe 
-the general context like the offset of completion, the completed token, the completed token kind (name or string literal) and its position.<br>
-</p>
-<p>A <b><a href="../reference/api/org/eclipse/jdt/core/CompletionContext.html">CompletionContext</a></b> can also give some
-information about elements (<b><a href="../reference/api/org/eclipse/jdt/core/IJavaElement.html">IJavaElement</a></b>) which are
-related to the completion location. These elements are based on the content of the completed compilation unit's buffer and are not
-the result of the last reconcile operation.<br>
-</p>
+<p>The completion requestor must also be able to accept compilation errors.  </p>
+<h4>Completion relevance</h4>
+<p>Because there may be many different possible completions, the notion of relevance is used to
+compare the relevance of a suggested completion to other proposals.  Relevance is represented
+by a positive integer.  The value has no implicit meaning except to be used relative to the
+value for other proposals.  The relevance of a code completion candidate can be affected by
+the expected type of the expression, as it relates to the types in the surrounding code, such as
+variable types, cast types, return types, etc.  The presence of an expected prefix or suffix
+in a completion also affects its relevance.</p>
+
+<h4>Completion context</h4>
+<p>An instance of <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionRequestor.html">CompletionRequestor</a></b> can
+also accept a completion context. This context is given by the method <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionRequestor.html#acceptContext(org.eclipse.jdt.core.CompletionContext)">
+CompletionRequestor.acceptContext(CompletionContext)</a></b> and does not depend on a specific
+completion proposal. The methods of <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionContext.html">CompletionContext</a></b> give
+information that describe the general context like the offset of completion, the completed token,
+the completed token kind (name or string literal) and its position.<br /></p>
+<p>A <b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionContext.html">CompletionContext</a></b> can also
+give some information about elements (<b><a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElement.html">IJavaElement</a></b>) which are related
+to the completion location. These elements are based on the content of the completed compilation
+unit's buffer and are not the result of the last reconcile operation.<br /></p>
 
 <p>Some of these methods are:</p>
 <ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/CompletionContext.html#getEnclosingElement()">getEnclosingElement()</a>
-</b> - This method returns the innermost enclosing element
-which contains the completion location</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/CompletionContext.html#getVisibleElements(java.lang.String)">getVisibleElements(String)</a>
-</b> - This method returns the elements which are visible from the completion location and which can be assigned to the given type</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionContext.html#getEnclosingElement()">getEnclosingElement()</a></b>
+- This method returns the innermost enclosing element which contains the completion location</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/CompletionContext.html#getVisibleElements(java.lang.String)">
+getVisibleElements(String)</a></b> - This method returns the elements which are visible from the
+completion location and which can be assigned to the given type</li>
 </ul>
+<h4>Code completion options</h4>
+<p>The JDT Core plug-in defines options that control the behavior of code completion.  These
+options can be changed by other plug-ins.  </p>
 
-<H4>
-Code completion options
-</h4>
-
-<P>
-The JDT Core plug-in defines options that control the behavior of code
-completion.  These options can be changed by other plug-ins.  </P>
 <ul>
-<li>Activate Visibility Sensitive Completion<br>
-  When this option is active, code completion will not answer elements that are
-  not visible in the current context.  (For example, it will not answer
-  private methods of a super class.)</li>
-<li>Automatic Qualification of Implicit Members<br>
-  When this option is active, completion automatically qualifies completion on implicit field references and message expressions.</li>
+<li>Activate Visibility Sensitive Completion<br />
+When this option is active, code completion will not answer elements that are not visible in the
+current context.  (For example, it will not answer private methods of a super class.)</li>
+<li>Automatic Qualification of Implicit Members<br />
+When this option is active, completion automatically qualifies completion on implicit field
+references and message expressions.</li>
 </ul>
-
-<p>Additional options allow you to specify prefixes and suffixes for the
-proposed completion names for fields, static fields, local variables, and method
-arguments.  </p>
-
-<p> See <a href="jdt_api_options.htm#codeassist"> JDT Core Code Assist
-Options</a>
-for more information about the code assist options and their defaults.</p>
-
-<H3>
-Code selection</h3>
-
-<H4>
-Performing a code selection
-</h4>
-<P>Code selection is used to find the Java element represented by a range of
-text (typically the selected text) in a compilation unit.  To programmatically perform code selection,
-you must invoke <b><a href="../reference/api/org/eclipse/jdt/core/ICodeAssist.html#codeSelect(int, int)">ICodeAssist.codeSelect</a></b>.
-You must supply the starting index location of the selection and its
-length. The result is an array of Java elements. Most of the time there is only one element in the array, but if the selection is ambiguous then all the possible elements are returned.</p><P>In
-the following example, code select is invoked for a compilation unit.</p>
-
-<pre><font color='#4444CC'>   // Get the compilation unit
+<p>Additional options allow you to specify prefixes and suffixes for the proposed completion names
+for fields, static fields, local variables, and method arguments.  </p>
+<p>See  <a href="jdt_api_options.htm#codeassist">JDT Core Code Assist Options</a> for more
+information about the code assist options and their defaults.</p>
+
+<h3>Code selection</h3>
+<h4>Performing a code selection</h4>
+<p>Code selection is used to find the Java element represented by a range of text (typically the
+selected text) in a compilation unit.  To programmatically perform code selection, you must
+invoke <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICodeAssist.html#codeSelect(int,%20int)">ICodeAssist.codeSelect</a></b>.
+You must supply the starting index location of the selection and its length. The result is an array
+of Java elements. Most of the time there is only one element in the array, but if the selection is
+ambiguous then all the possible elements are returned.</p>
+<p>In the following example, code select is invoked for a compilation unit.</p>
+<pre class="color1">
+   // Get the compilation unit
    ICompilationUnit unit = ...;
    
    // Get the offset and length
@@ -150,29 +149,17 @@ the following example, code select is invoked for a compilation unit.</p>
    
    // perform selection
    IJavaElement[] elements = unit.codeSelect(offset, length);
-   System.out.println("the selected element is " + element[0].getElementName());
-</font></pre>
-
-<H4>
-Selection at cursor location
-</h4>
-<P>
-When the selection length is specified as 0, a selection will be computed by
-finding the complete token that encloses the specified offset.  Consider
-the following example method:</P>
-
-<P>
-<code>   public void fooMethod(Object) {<br>
-   }<br>
-</code>
-</P>
-
-If you specify an offset after the first character of <i>fooMethod</i>, and you
-specify a length of 0,  then the selection will be computed to include the
-entire token <i>fooMethod</i>. If instead, you specify a length of 5, the
-selection will considered as <i>ooMet</i>.
-
-
-
-</BODY>
-</HTML>
+   System.out.println("the selected element is " + element[0].getElementName());
+</pre>
+<h4>Selection at cursor location</h4>
+
+<p>When the selection length is specified as 0, a selection will be computed by finding the
+complete token that encloses the specified offset.  Consider the following example method:</p>
+<p><code>   public void fooMethod(Object) {<br />
+   }<br /></code></p>
+If you specify an offset after the first character of <i>fooMethod</i>, and you specify a length of
+0,  then the selection will be computed to include the entire token <i>fooMethod</i>. If
+instead, you specify a length of 5, the selection will considered as <i>ooMet</i>.
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeformatter.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeformatter.htm
index 042a880..eb56724 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeformatter.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_codeformatter.htm
@@ -1,115 +1,229 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<meta HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-
-<link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Using the code formatter</title>
-
-<link rel="stylesheet" type="text/css" HREF="../book.css">
-</head>
-<body>
-<h2>Using the code formatter</h2>
-<P>The JDT API allows other plug-ins to use the default <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">code formatter</a></b> to format source code.</p>
-The two methods to consider are:
-<ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/ToolFactory.html#createCodeFormatter(java.util.Map)">ToolFactory.createCodeFormatter(Map)</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/ToolFactory.html#createCodeFormatter(java.util.Map, int)">ToolFactory.createCodeFormatter(Map, int)</a></b></li>
-</ul>
-Note: The <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">CodeFormatter</a></b> class is not intended to be subclassed by clients.
-
-<h3>Getting a code formatter instance</h3>
-<p>
-The factory methods on <b><a href="../reference/api/org/eclipse/jdt/core/ToolFactory.html">ToolFactory</a></b> can be invoked to create a new instance of the default code formatter. 
-Before invoking one of those, you need to define a map that contains the code formatter options. In order to create such a map, you can use the methods defined in the class
-<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html">DefaultCodeFormatterConstants</a></b> like 
-<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#getEclipseDefaultSettings()">DefaultCodeFormatterConstants.getEclipseDefaultSettings()</a></b></p>
-<p>NOTE: These predefined maps contain only the code formatter specific options. In order to invoke the code formatter, you also need to specify what kind of source 
-the code formatter will format. In order to do so, specify the three options:</p>
-<ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_TARGET_PLATFORM">JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_SOURCE">JavaCore.COMPILER_SOURCE</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_COMPLIANCE">JavaCore.COMPILER_COMPLIANCE</a></b></li>
-</ul>
-<p>The possible values of these options are given by the constants:</p>
-<ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_1">JavaCore.VERSION_1_1</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_2">JavaCore.VERSION_1_2</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">JavaCore.VERSION_1_3</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">JavaCore.VERSION_1_4</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">JavaCore.VERSION_1_5</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">JavaCore.VERSION_1_6</a></b></li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">JavaCore.VERSION_1_7</a></b></li>
-</ul>
-<p>If you want to modify the default maps, it is recommended that you use the methods defined on <b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html">DefaultCodeFormatterConstants</a></b>
-to create the values of the corresponding options. This is especially true for the options relative to code wrapping.
-</p>
-
-<h3>Invoking the code formatter</h3>
-<p>Use the newly created code formatter to format code snippets.
-The default code formatter allows you to format different kind of code snippets.<br>
-These kinds are specified in the documentation of the <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int, java.lang.String, int, int, int, java.lang.String)">format</a></b> method.
-The returned value of this method is a text edit. This text edit then needs to be applied to an <b><a href="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/IDocument.html">IDocument</a></b> instance
-in order to get the formatted result.</p>
-
-<h4>Example</h4>
-<pre><font color="#4444CC">
-		// take default Eclipse formatting options
-		Map options = DefaultCodeFormatterConstants.getEclipseDefaultSettings();
-		
-		// initialize the compiler settings to be able to format 1.5 code
-		options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5);
-		options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5);
-		options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5);
-		
-		// change the option to wrap each enum constant on a new line
-		options.put(
-			DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS,
-			DefaultCodeFormatterConstants.createAlignmentValue(
-				true,
-				DefaultCodeFormatterConstants.WRAP_ONE_PER_LINE,
-				DefaultCodeFormatterConstants.INDENT_ON_COLUMN));
-		
-		// instantiate the default code formatter with the given options
-		final CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(options);
-		
-		// retrieve the source to format
-		String source = null;
-		try {
-			source = ...; // retrieve the source 
-		} catch (IOException e) {
-			System.err.println("Could not retrieve the source"); //$NON-NLS-1$
-			e.printStackTrace();
-			return;
-		}
-		final TextEdit edit = codeFormatter.format(
-			CodeFormatter.K_COMPILATION_UNIT, // format a compilation unit
-			source, // source to format
-			0, // starting position
-			source.length(), // length
-			0, // initial indentation
-			System.getProperty("line.separator") // line separator
-		);
-		
-		IDocument document = new Document(source);
-		try {
-			edit.apply(document);
-		} catch (MalformedTreeException e) {
-			e.printStackTrace();
-		} catch (BadLocationException e) {
-			e.printStackTrace();
-		}
-		
-		// display the formatted string on the System out
-		System.out.println(document.get());
-</font></pre>
-<p>On this example,</p>
-<pre><font color="#4444CC">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Using the code formatter
+    </title>
+    <link rel="stylesheet" type="text/css" href="../book.css" />
+
+  </head>
+  <body>
+    <h2>
+      Using the code formatter
+    </h2>
+    <p>
+      The JDT API allows other plug-ins to use the default
+      <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">
+      code formatter</a></b> to format source code. The two methods
+      to consider are:
+    </p>
+
+    <ul>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/ToolFactory.html#createCodeFormatter(java.util.Map)">
+        ToolFactory.createCodeFormatter(Map)</a></b>
+      </li>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/ToolFactory.html#createCodeFormatter(java.util.Map,%20int)">
+        ToolFactory.createCodeFormatter(Map, int)</a></b>
+
+      </li>
+    </ul>
+    <p>
+      Note: The <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">
+      CodeFormatter</a></b> class is not intended to be subclassed
+      by clients.
+    </p>
+    <h3>
+      Getting a code formatter instance
+    </h3>
+
+    <p>
+      The factory methods on <b><a href=
+      "../reference/api/org/eclipse/jdt/core/ToolFactory.html">ToolFactory</a></b>
+      can be invoked to create a new instance of the default code
+      formatter. Before invoking one of those, you need to define a
+      map that contains the code formatter options. In order to
+      create such a map, you can use the methods defined in the
+      class <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html">
+      DefaultCodeFormatterConstants</a></b> like <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#getEclipseDefaultSettings()">
+      DefaultCodeFormatterConstants.getEclipseDefaultSettings()</a></b>
+
+    </p>
+    <p>
+      NOTE: These predefined maps contain only the code formatter
+      specific options. In order to invoke the code formatter, you
+      also need to specify what kind of source the code formatter
+      will format. In order to do so, specify the three options:
+    </p>
+    <ul>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_TARGET_PLATFORM">
+        JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM</a></b>
+      </li>
+
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_SOURCE">
+        JavaCore.COMPILER_SOURCE</a></b>
+      </li>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_COMPLIANCE">
+        JavaCore.COMPILER_COMPLIANCE</a></b>
+      </li>
+
+    </ul>
+    <p>
+      The possible values of these options are given by the
+      constants:
+    </p>
+    <ul>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_1">
+        JavaCore.VERSION_1_1</a></b>
+      </li>
+
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_2">
+        JavaCore.VERSION_1_2</a></b>
+      </li>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">
+        JavaCore.VERSION_1_3</a></b>
+      </li>
+
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">
+        JavaCore.VERSION_1_4</a></b>
+      </li>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">
+        JavaCore.VERSION_1_5</a></b>
+      </li>
+
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">
+        JavaCore.VERSION_1_6</a></b>
+      </li>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">
+        JavaCore.VERSION_1_7</a></b>
+      </li>
+
+    </ul>
+    <p>
+      If you want to modify the default maps, it is recommended
+      that you use the methods defined on <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html">
+      DefaultCodeFormatterConstants</a></b> to create the values of
+      the corresponding options. This is especially true for the
+      options relative to code wrapping.
+    </p>
+    <h3>
+      Invoking the code formatter
+    </h3>
+
+    <p>
+      Use the newly created code formatter to format code snippets.
+      The default code formatter allows you to format different
+      kind of code snippets.<br />
+      These kinds are specified in the documentation of the
+      <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int,%20java.lang.String,%20int,%20int,%20int,%20java.lang.String)">
+      format</a></b> method. The returned value of this method is a
+      text edit. This text edit then needs to be applied to an
+      <b><a href=
+      "../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/IDocument.html">
+      IDocument</a></b> instance in order to get the formatted
+      result.
+    </p>
+
+    <h4>
+      Example
+    </h4>
+    <pre class="color1">
+	// take default Eclipse formatting options
+	Map options = DefaultCodeFormatterConstants.getEclipseDefaultSettings();
+
+	// initialize the compiler settings to be able to format 1.5 code
+	options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5);
+	options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5);
+	options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5);
+
+	// change the option to wrap each enum constant on a new line
+	options.put(
+		DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS,
+		DefaultCodeFormatterConstants.createAlignmentValue(
+		true,
+		DefaultCodeFormatterConstants.WRAP_ONE_PER_LINE,
+		DefaultCodeFormatterConstants.INDENT_ON_COLUMN));
+
+	// instantiate the default code formatter with the given options
+	final CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(options);
+
+	// retrieve the source to format
+	String source = null;
+	try {
+		source = ...; // retrieve the source 
+	} catch (IOException e) {
+		System.err.println("Could not retrieve the source"); //$NON-NLS-1$
+		e.printStackTrace();
+		return;
+	}
+	final TextEdit edit = codeFormatter.format(
+		CodeFormatter.K_COMPILATION_UNIT, // format a compilation unit
+		source, // source to format
+		0, // starting position
+		source.length(), // length
+		0, // initial indentation
+		System.getProperty("line.separator") // line separator
+	);
+
+	IDocument document = new Document(source);
+	try {
+		edit.apply(document);
+	} catch (MalformedTreeException e) {
+		e.printStackTrace();
+	} catch (BadLocationException e) {
+		e.printStackTrace();
+	}
+
+	// display the formatted string on the System out
+	System.out.println(document.get());
+</pre>
+    <p>
+      On this example,
+    </p>
+    <pre class="color1">
 public enum X { A,B,C,D,E,F}
-</font></pre>
-the result would be:
-<pre><font color="#4444CC">
+</pre>
+    <p>
+      the result would be:
+    </p>
+    <pre class="color1">
 public enum X {
 	A,
 	B,
@@ -118,54 +232,154 @@ public enum X {
 	E,
 	F
 }
-</font></pre>
-<h3>Formatting a set of regions</h3>
-The default <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">code formatter</a></b> allows to format a set of regions of a given source file.<br>
-This can be achieved by calling the <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int, java.lang.String, org.eclipse.jface.text.IRegion[], int, java.lang.String)">format(int, String, IRegion[], int, String)</a></b> method of the code formatter,
-with a given <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_UNKNOWN">source kind</a></b>
-and an array of <b><a href="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/IRegion.html">regions</a></b>.
-<ul>
-<li>Each of the region to format must be within source range and should not overlap with another region.</li>
-<li>The array of regions to format must contain at least one region. Regions should be sorted by their offsets, smaller offset first.</li>
-</ul>
-<h3>Comment Formatter API</h3>
-The default <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">code formatter</a></b>
-API offers the possibility to format comments during the processing of the code snippet.<br>
-This can be achieved by combining the appropriate flag <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#F_INCLUDE_COMMENTS">F_INCLUDE_COMMENTS</a></b> with <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_COMPILATION_UNIT">K_COMPILATION_UNIT</a></b> and <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_UNKNOWN">K_UNKNOWN</a></b> flags.<br>
-<br>
-This flag is effective only if the corresponding formatting option was enabled when calling <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int, java.lang.String, int, int, int, java.lang.String)">format(int, String, int, int, int, String)</a></b> or <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int, java.lang.String, org.eclipse.jface.text.IRegion[], int, java.lang.String)">format(int, String, IRegion[], int, String)</a></b> methods:
-<ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT">FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT</a></b> which controls the formatting of javadoc comments</li> 
-<li><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT">FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT</a></b> which controls the formatting of multiple lines comments</li> 
-<li><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_LINE_COMMENT">FORMATTER_COMMENT_FORMAT_LINE_COMMENT</a></b> which controls the formatting of single line comments</li> 
-</ul> 
-
-<h3>Comment formatter options</h3>
-Various formatting options are available in order to format comments:
-<ul>
-<li>General options to enable or disable the formatting of specific comments (javadoc, multi or single line comments), set maximum line width for comments.</li>
-<li>javadoc comments options to enable the formatting of code snippets or HTML sections inside javadoc comments, indent tag descriptions, etc.</li>
-<li>block comments option to keep or remove blanks lines within such comment</li>
-</ul>
-For detailed information about these settings, refer to the <b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html">DefaultCodeFormatterConstants</a></b>
-
-
-<h3>Formatting comments with the stand-alone formatter</h3>
-The default <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">code formatter</a></b> can be used to format comments (javadoc, multi or single line).
-In this case, the source passed to the <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int, java.lang.String, int, int, int, java.lang.String)">format method</a></b> should only contain a specific kind of comments,
-and corresponding kind <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_JAVA_DOC">K_JAVA_DOC</a></b>, <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_MULTI_LINE_COMMENT">K_MULTI_LINE_COMMENT</a></b> or <b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_SINGLE_LINE_COMMENT">K_SINGLE_LINE_COMMENT</a></b> should be used.<br>
-<ul>
-<li><h4>Formatting javadoc comments</h4>
-The following unformatted javadoc:
-<pre><font color="#4444CC">
- 	/**
- * This is just a simple example to show how javadoc comments can 			 be formatted .
+</pre>
+    <h3>
+      Formatting a set of regions
+    </h3>
+    <p>
+
+      The default <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">
+      code formatter</a></b> allows to format a set of regions of a
+      given source file.<br />
+      This can be achieved by calling the <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int,%20java.lang.String,%20org.eclipse.jface.text.IRegion[],%20int,%20java.lang.String)">
+      format(int, String, IRegion[], int, String)</a></b> method of
+      the code formatter, with a given <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_UNKNOWN">
+      source kind</a></b> and an array of <b><a href=
+      "../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/IRegion.html">
+
+      regions</a></b>.
+    </p>
+    <ul>
+      <li>Each of the region to format must be within source range
+      and should not overlap with another region.
+      </li>
+      <li>The array of regions to format must contain at least one
+      region. Regions should be sorted by their offsets, smaller
+      offset first.
+      </li>
+    </ul>
+    <h3>
+      Comment Formatter API
+    </h3>
+
+    <p>
+      The default <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">
+      code formatter</a></b> API offers the possibility to format
+      comments during the processing of the code snippet.<br />
+      This can be achieved by combining the appropriate flag
+      <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#F_INCLUDE_COMMENTS">
+      F_INCLUDE_COMMENTS</a></b> with <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_COMPILATION_UNIT">
+
+      K_COMPILATION_UNIT</a></b> and <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_UNKNOWN">
+      K_UNKNOWN</a></b> flags.<br />
+      <br />
+      This flag is effective only if the corresponding formatting
+      option was enabled when calling <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int,%20java.lang.String,%20int,%20int,%20int,%20java.lang.String)">
+      format(int, String, int, int, int, String)</a></b> or
+      <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int,%20java.lang.String,%20org.eclipse.jface.text.IRegion[],%20int,%20java.lang.String)">
+
+      format(int, String, IRegion[], int, String)</a></b> methods:
+    </p>
+    <ul>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT">
+        FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT</a></b> which
+        controls the formatting of javadoc comments
+      </li>
+      <li>
+
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT">
+        FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT</a></b> which
+        controls the formatting of multiple lines comments
+      </li>
+      <li>
+        <b><a href=
+        "../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_LINE_COMMENT">
+        FORMATTER_COMMENT_FORMAT_LINE_COMMENT</a></b> which
+        controls the formatting of single line comments
+      </li>
+    </ul>
+
+    <h3>
+      Comment formatter options
+    </h3>
+    <p>
+      Various formatting options are available in order to format
+      comments:
+    </p>
+    <ul>
+      <li>General options to enable or disable the formatting of
+      specific comments (javadoc, multi or single line comments),
+      set maximum line width for comments.
+      </li>
+      <li>javadoc comments options to enable the formatting of code
+      snippets or HTML sections inside javadoc comments, indent tag
+      descriptions, etc.
+      </li>
+
+      <li>block comments option to keep or remove blanks lines
+      within such comment
+      </li>
+    </ul>
+    <p>
+      For detailed information about these settings, refer to the
+      <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html">
+      DefaultCodeFormatterConstants</a></b>
+    </p>
+    <h3>
+
+      Formatting comments with the stand-alone formatter
+    </h3>
+    <p>
+      The default <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html">
+      code formatter</a></b> can be used to format comments
+      (javadoc, multi or single line). In this case, the source
+      passed to the <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#format(int,%20java.lang.String,%20int,%20int,%20int,%20java.lang.String)">
+      format method</a></b> should only contain a specific kind of
+      comments, and corresponding kind <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_JAVA_DOC">
+
+      K_JAVA_DOC</a></b>, <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_MULTI_LINE_COMMENT">
+      K_MULTI_LINE_COMMENT</a></b> or <b><a href=
+      "../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_SINGLE_LINE_COMMENT">
+      K_SINGLE_LINE_COMMENT</a></b> should be used.
+    </p>
+    <ul>
+      <li>
+
+        <h4>
+          Formatting javadoc comments
+        </h4>
+        <p>
+          The following unformatted javadoc:
+        </p>
+        <pre class="color1">
+  /**
+ * This is just a simple example to show how javadoc comments can     be formatted .
  * @param str The input string
- 	 * @return 		 		The resulting 		string
- 	 */
-</font></pre>
-should be formatted as follows:
-<pre><font color="#4444CC">
+   * @return      The resulting   string
+   */
+</pre>
+        <p>
+
+          should be formatted as follows:
+        </p>
+        <pre class="color1">
 /**
  * This is just a simple example to show how javadoc comments can be formatted .
  * 
@@ -173,32 +387,44 @@ should be formatted as follows:
  *            The input string
  * @return The resulting string
  */
-</font></pre>
-using command:
-<pre><font color="#4444CC">
-(...)
- final TextEdit edit = codeFormatter.format(
-	<b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_JAVA_DOC">CodeFormatter.K_JAVA_DOC</a></b>, // specify the kind: javadoc
-	source, // source to format (as per the above example)
-	0, // starting position
-	source.length(), // length
-	0, // initial indentation
-	System.getProperty("line.separator") // line separator
-);
-(...)
-</font></pre></li>
-<li><h4>Formatting multi-line comments</h4>
-The following unformatted multi-line comment:
-<pre><font color="#4444CC">
+</pre>
+        <p>
+          using command:
+        </p>
+<pre class="color1">
+	(...)
+	final TextEdit edit = codeFormatter.format(
+		<b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_JAVA_DOC">CodeFormatter.K_JAVA_DOC</a></b>, // specify the kind: javadoc
+		source, // source to format (as per the above example)
+		0, // starting position
+		source.length(), // length
+		0, // initial indentation
+		System.getProperty("line.separator") // line separator
+	);
+	(...)
+
+</pre>
+      </li>
+      <li>
+        <h4>
+          Formatting multi-line comments
+        </h4>
+        <p>
+          The following unformatted multi-line comment:
+        </p>
+        <pre class="color1">
+
 /*
-	 * This is just an example of multi- line comment intended to demonstrate the default code formatter ability to format multi-line comments .
-	 * 
-	 * 		These possibilities include:	Formatting of javadoc 				comments, 
-	 * 				formatting of multi-line comments
+  * This is just an example of multi- line comment intended to demonstrate the default code formatter ability to format multi-line comments .
+  * 
+  *   These possibilities include: Formatting of javadoc     comments, 
+  *     formatting of multi-line comments
  */
-</font></pre>
-should be formatted as follows:
-<pre><font color="#4444CC">
+</pre>
+        <p>
+          should be formatted as follows:
+        </p>
+        <pre class="color1">
 /*
  * This is just an example of multi- line comment intended to demonstrate
  * the default code formatter ability to format multi-line comments .
@@ -206,43 +432,58 @@ should be formatted as follows:
  * These possibilities include: Formatting of javadoc comments, formatting
  * of multi-line comments
  */
-</font></pre>
- using command:
-<pre><font color="#4444CC">
-(...)
- final TextEdit edit = codeFormatter.format(
-	<b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_MULTI_LINE_COMMENT">CodeFormatter.K_MULTI_LINE_COMMENT</a></b>, // specify the kind: multi-line comments
-	source, // source to format (as per the above example)
-	0, // starting position
-	source.length(), // length
-	0, // initial indentation
-	System.getProperty("line.separator") // line separator
-);
-(...)
-</font></pre></li>
-<li><h4>Formatting single line comments</h4>
-The following unformatted single line comments:
-<pre><font color="#4444CC">
+</pre>
+        <p>
+          using command:
+        </p>
+        <pre class="color1">
+	(...)
+	final TextEdit edit = codeFormatter.format(
+		<b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_MULTI_LINE_COMMENT">CodeFormatter.K_MULTI_LINE_COMMENT</a></b>, // specify the kind: multi-line comments
+		source, // source to format (as per the above example)
+		0, // starting position
+		source.length(), // length
+		0, // initial indentation
+		System.getProperty("line.separator") // line separator
+	);
+	(...)
+</pre>
+      </li>
+      <li>
+        <h4>
+          Formatting single line comments
+        </h4>
+        <p>
+          The following unformatted single line comments:
+        </p>
+
+        <pre class="color1">
 // This is a long comment that should be split in multiple line comments in case the line comment formatting is enabled
-</font></pre>
-should be formatted as follows:
-<pre><font color="#4444CC">
+</pre>
+        <p>
+          should be formatted as follows:
+        </p>
+        <pre class="color1">
 // This is a long comment that should be split in multiple line comments in
 // case the line comment formatting is enabled
-</font> </pre>
- using command:
-<pre><font color="#4444CC">
-(...)
- final TextEdit edit = codeFormatter.format(
-	<b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_SINGLE_LINE_COMMENT">CodeFormatter.K_SINGLE_LINE_COMMENT</a></b>,  // specify the kind: single-line comments
-	source, // source to format (as per the above example)
-	0, // starting position
-	source.length(), // length
-	0, // initial indentation
-	System.getProperty("line.separator") // line separator
-);
-(...)
-</font></pre></li>
-</ul>
-</body>
+</pre>
+        <p>
+          using command:
+        </p>
+
+        <pre class="color1">
+	(...)
+	final TextEdit edit = codeFormatter.format(
+		<b><a href="../reference/api/org/eclipse/jdt/core/formatter/CodeFormatter.html#K_SINGLE_LINE_COMMENT">CodeFormatter.K_SINGLE_LINE_COMMENT</a></b>,  // specify the kind: single-line comments
+		source, // source to format (as per the above example)
+		0, // starting position
+		source.length(), // length
+		0, // initial indentation
+		System.getProperty("line.separator") // line separator
+	);
+	(...)
+</pre>
+      </li>
+    </ul>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm
index 2fff92a..319ef28 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm
@@ -1,920 +1,72 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-     
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-     
-  <meta http-equiv="Content-Style-Type" content="text/css">
-      
-  <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-  <title>Compiling Java code</title>
-          
-  <link rel="stylesheet" type="text/css" href="../book.css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
+<title>Compiling Java code</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
 </head>
 <body>
-<h2> Compiling Java code</h2>
-<p> The JDT plug-ins include an incremental and batch Java compiler for building 
-Java .class files from source code. There is no direct API provided by the 
-compiler. It is installed as a builder on Java projects. Compilation is triggered 
-using standard platform build mechanisms.</p>
-<p> The platform build mechanism is described in detail in <a href="../../org.eclipse.platform.doc.isv/guide/resAdv_builders.htm" class="XRef">
- Incremental project builders</a>.</p>
-<h3> Compiling code</h3>
-<p> You can programmatically compile the Java source files in a project using 
-the build API.</p>
-<pre><font color="#4444cc">
+<h2>Compiling Java code</h2>
+<p> See the
+Java development user guide for <a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm">using the batch compiler</a> and
+<a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/tasks/task-ant_javac_adapter.htm">using the ant javac adapter</a>.</p>
+
+<p>The JDT plug-ins include an incremental and batch Java compiler for building Java .class files from source code. There is no direct API provided by the compiler. It is installed as a builder on
+Java projects. Compilation is triggered using standard platform build mechanisms.</p>
+
+<p>The platform build mechanism is described in detail in <a href="../../org.eclipse.platform.doc.isv/guide/resAdv_builders.htm" class="XRef">Incremental project builders</a>.</p>
+<h3>Compiling code</h3>
+<p>You can programmatically compile the Java source files in a project using the build API.</p>
+<pre class="color1">
+
    IProject myProject;
    IProgressMonitor myProgressMonitor;
    myProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, myProgressMonitor);
-</font></pre>
-<p>For a Java project, this invokes the Java incremental project builder
- (along with any other incremental project builders that have been added
-to the project's build spec). The generated .class files are written to
-the designated output folder. Additional resource files are also copied to the output folder. </p>
-<p>In the case of a full batch build, all the
-.class files in the output folder may be 'scrubbed' to ensure that no stale
-files are found. This is controlled using a JDT Core Builder Option (<a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER">CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER</a>). 
-The default for this option is to clean output folders.  Unless this option
-is reset, you must ensure that you place all .class files for which
-you do not have corresponding source files in a separate class file folder
-on the classpath  instead of the output folder.</p>
-<p>The
-incremental and batch builders can be configured with other options that
-control which resources are copied to the output folder.  The following sample shows how to set up a resource filter so that files ending with '.ignore' and folders named 'META-INF',
-are not copied to the output folder:</p>
-<pre><font color="#4444cc">
-   Hashtable options = JavaCore.getOptions();
-   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
-   JavaCore.setOptions(options);
-</font></pre>
-<p> Filenames are filtered out if they match one of the supplied patterns. Entire 
-folders are filtered out if their name matches one of the supplied folder names 
-which end in a path separator.</p>
-<p> The incremental and batch builders can also be configured to only generate
- a single error when the .classpath file has errors. This option is set by
- default and eliminates numerous errors.  See <a href="jdt_api_options.htm#builder">JDT
-Core Builder Options</a> for a complete list of builder-related options and
-their defaults. </p>
-<p>The compiler can also be configured using <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a>
-options.  For example, you can define the severity that should be used for
-different kinds of problems that are found during compilation.  See <a href="jdt_api_options.htm#compiler">JDT
-Core Compiler Options </a>for a complete list of compiler-related options and their defaults. </p>
-<p>When programmatically configuring options for the builder or compiler, you
-should specify the scope of the option.  For example, setting up a
-resource filter may apply to a particular project only:</p>
-<pre><font color="#4444cc">
-   Hashtable options = myProject.getOptions(false);  // get only the options set up in this project
-   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
-   myProject.setOptions(options);
-</font>
 </pre>
-<h3>Using the batch compiler</h3>
+<p>For a Java project, this invokes the Java incremental project builder (along with any other incremental project builders that have been added to the project's build spec). The generated .class
+files are written to the designated output folder. Additional resource files are also copied to the output folder. </p>
+<p>In the case of a full batch build, all the .class files in the output folder may be 'scrubbed' to ensure that no stale files are found. This is controlled using a JDT Core Builder Option (<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER">CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER</a>).  The default for this option is to clean output folders. 
 
-<h4>Finding the batch compiler</h4>
+Unless this option is reset, you must ensure that you place all .class files for which you do not have corresponding source files in a separate class file folder on the classpath instead of the
+output folder.</p>
+<p>The incremental and batch builders can be configured with other options that control which resources are copied to the output folder.  The following sample shows how to set up a resource
+filter so that files ending with '.ignore' and folders named 'META-INF', are not copied to the output folder:</p>
+<pre class="color1">
 
-<p>The batch compiler class is located in the JDT Core plug-in.
-The name of the class is <i>org.eclipse.jdt.compiler.batch.BatchCompiler</i>.
-It is packaged into <code>plugins/org.eclipse.jdt.core_3.4.0.<qualifier>.jar</code>. Since 3.2, it is also available as a separate download.
-The name of the file is <code>ecj.jar</code>. Its corresponding source is also available. To get them, go to the <a href="http://download.eclipse.org/eclipse/downloads/">download page</a> and 
-search for the section <b>JDT Core Batch Compiler</b>. This jar contains the batch compiler and the javac ant adapter.</p>
-<p>Since 3.3, this jar also contains the support for jsr199 (Compiler API) and the support for jsr269 (Annotation processing). <b>In order to use the annotations
-processing support, a 1.6 VM is required.</b></p>
-<p>So it can be used as a standalone application and inside an Ant build outside of Eclipse.</p>
-<h4>Running the batch compiler</h4>
-<ul>
-<li>From the command line.
-<p><code><font color="#3366FF">java -jar org.eclipse.jdt.core_3.4.0<qualifier>.jar -classpath rt.jar A.java</font></code></p>
-<p>or:</p>
-<p><code><font color="#3366FF">java -jar ecj.jar -classpath rt.jar A.java</font></code></p>
-</li>
-<li>Using the static <code>compile(String commandLine, PrintWriter outWriter, PrintWriter errWriter, CompilationProgress progress)</code> method of the class BatchCompiler.
-<pre><font color="#3366FF">
-org.eclipse.jdt.compiler.CompilationProgress progress = null; // instantiate your subclass
-org.eclipse.jdt.internal.compiler.batch.BatchCompiler.compile(
-   "-classpath rt.jar A.java",
-   new PrintWriter(System.out),
-   new PrintWriter(System.err),
-   progress);
-</font></pre><p>
-You can control how progress is reported, or how the batch compiler is canceled, by subclassing the class <i>org.eclipse.jdt.compiler.CompilationProgress</i>.
-</p></li>
-</ul>
-
-<h4>Which options are available?</h4>
-<p>
-The recommended options have an orange background.
-</p>
-<p>When some options are being set multiple times, the batch compiler consumes them from left to right. When the warning option (-warn:....) is used without 
-'+' or '-', this overrides the set of warnings previously specified. So the user should make sure that such an option is given before
-any other usage of the -warn option.
-</p>
-<p>Same applies for the -err: option.</p>
-<table BORDER CELLSPACING="2" CELLPADDING="2">
-<tr>
-<th>Name</th>
-<th colspan="3">Usage</th>
-</tr>
-<tr>
-<th colspan="4">Classpath options</th>
-</tr>
-<tr>
-<td valign=top bgcolor="#FFCCAA" width="250">-bootclasspath <dir 1>;<dir 2>;...;<dir P></td>
-<td valign=top bgcolor="#FFCCAA" colspan="3">This is a list of directories or jar files used to bootstrap the class files used by the compiler. By default the libraries of the running
-VM are used. Entries are separated by the platform path separator.
-<br>Each directory or file can specify access rules for types between '[' and ']'.
-<p>If no bootclasspath is specified, the compiler will infer it using the following system properties <code>sun.boot.class.path</code>,
-<code>vm.boot.class.path</code> or <code>org.apache.harmony.boot.class.path</code> in this order respectively.</p>
-</td>
-</tr>
-<tr>
-<td valign="top" bgcolor="#FFCCAA" width="250">-cp<br>-classpath <dir 1>;<dir 2>;...;<dir P></td>
-<td valign=top bgcolor="#FFCCAA" colspan="3">This is a list of directories or jar files used to compile the source files. The default value is the value of the property "java.class.path".
- Entries are separated by the platform path separator.
-<br>Each directory or file can specify access rules for types between '[' and ']' (e.g. [-X] to forbid access to type X, [~X] to 
-discourage access to type X, [+p/X:-p/*] to forbid access to all types in package p but allow access to p/X).
-<br>The compiler follows the <code>Class-Path</code> clauses of jar files' 
-manifests recursively and appends each referenced jar file to the end of the 
-classpath, provided it is not on the classpath yet.
-</td>
-</tr>
-<tr>
-<td valign=top width="250">-extdirs <dir 1>;<dir 2>;...;<dir P></td>
-<td valign=top colspan="3">This is a list of directories used to specify the location of extension zip/jar files. Entries are separated by the platform path separator.</td>
-</tr>
-<tr>
-<td valign=top width="250">-endorseddirs <dir 1>;<dir 2>;...;<dir P></td>
-<td valign=top colspan="3">This is a list of directories used to specify the location of endorsed zip/jar files. Entries are separated by the platform path separator.</td>
-</tr>
-<tr>
-<td valign=top width="250">-sourcepath <dir 1>;<dir 2>;...;<dir P></td>
-<td valign=top colspan="3">This is a list of directories used to specify the source files. Entries are separated by the platform path separator.
-<br>Each directory can specify access rules for types between '[' and ']'.</td>
-</tr>
-<tr>
-<td valign=top bgcolor="#FFCCAA" width="250">-d <dir 1>|none</td>
-<td bgcolor="#FFCCAA" colspan="3">This is used to specify in which directory the generated .class files should be dumped. If it is omitted, no package directory structure is created.<br>
-If you want to generate no .class file at all, use <font color="#3366FF">-d none</font>.</td>
-</tr>
-<tr>
-<td valign=top width="250">-encoding <encoding name></td>
-<td colspan="3">Specify default encoding for all source files. Custom encoding can also be specified on a per file basis by suffixing each input source file/folder name with <font color="#3366FF">[<encoding name>]</font>. 
-For example <font color="#3366FF">X.java[utf8]</font> would specify the <code>UTF-8</code> encoding for the compilation unit
-X.java located in the current user directory.<p>If multiple default source file encodings are specified, the last one will be used.</p>
-<p>For example:</p>
-<ul>
-<li>
-<font color="#3366FF"><code>... -encoding UTF-8 X.java[Cp1252] Y.java[UTF-16] Z.java ....</code></font><br>
-All source files will be read using UTF-8 encoding (this includes <font color="#3366FF">Z.java</font>). <font color="#3366FF">X.java</font> 
-will be read using Cp1252 encoding and <font color="#3366FF">Y.java</font> will be read
-using UTF-16 encoding.
-</li>
-<li>
-<font color="#3366FF"><code>... -encoding UTF-8 -encoding UTF-16 ....</code></font><br>
-All source files will be read using UTF-16 encoding. The -encoding option for UTF-8 is ignored.
-</li>
-<li>
-<font color="#3366FF"><code>... -encoding Cp1252 /foo/bar/X.java[UTF-16] /foo/bar[UTF-8] ....</code></font><br>
-All source files will be read using Cp1252 encoding. X.java is the only file inside the /foo/bar directory to be read using 
-the encoding UTF-16. All other files in that directory will use UTF-8 encoding.
-</li>
-</ul></td>
-</tr>
-<tr>
-<th colspan="4">Compliance options</th>
-</tr>
-<tr>
-<td valign=top width="250">-target 1.1 to 1.7 or (5, 5.0, etc)</td>
-<td colspan="3">This specifies the .class file target setting.
-The possible value are:
-<ul>
-<li><font color="#3366FF">1.1</font> (major version: 45 minor: 3)</li>
-<li><font color="#3366FF">1.2</font> (major version: 46 minor: 0)</li>
-<li><font color="#3366FF">1.3</font> (major version: 47 minor: 0)</li>
-<li><font color="#3366FF">1.4</font> (major version: 48 minor: 0)</li>
-<li><font color="#3366FF">1.5</font>, <font color="#3366FF">5</font> or <font color="#3366FF">5.0</font> (major version: 49 minor: 0)</li>
-<li><font color="#3366FF">1.6</font>, <font color="#3366FF">6</font> or <font color="#3366FF">6.0</font> (major version: 50 minor: 0)</li>
-<li><font color="#3366FF">1.7</font>, <font color="#3366FF">7</font> or <font color="#3366FF">7.0</font> (major version: 51 minor: 0)</li>
-</ul>
-Defaults are:
-<ul>
-<li><font color="#3366FF">1.1</font> in <font color="#3366FF">-1.3</font> mode</li>
-<li><font color="#3366FF">1.2</font> in <font color="#3366FF">-1.4</font> mode</li>
-<li><font color="#3366FF">1.5</font> in <font color="#3366FF">-1.5</font> mode</li>
-<li><font color="#3366FF">1.6</font> in <font color="#3366FF">-1.6</font> mode</li>
-<li><font color="#3366FF">1.7</font> in <font color="#3366FF">-1.7</font> mode</li>
-</ul>
-<p>clcd1.1 can be used to generate the StackMap attribute.</p>
-</td>
-</tr>
-<tr>
-<td valign=top>-1.3</td>
-<td colspan="3">Set compliance level to <font color="#3366FF">1.3</font>. Implicit -source 1.3 -target 1.1.</td>
-</tr>
-<tr>
-<td valign=top>-1.4</td>
-<td colspan="3">Set compliance level to <font color="#3366FF">1.4</font> (default). Implicit -source 1.3 -target 1.2.</td>
-</tr>
-<tr>
-<td valign=top>-1.5</td>
-<td colspan="3">Set compliance level to <font color="#3366FF">1.5</font>. Implicit -source 1.5 -target 1.5.</td>
-</tr>
-<tr>
-<td valign=top>-1.6</td>
-<td colspan="3">Set compliance level to <font color="#3366FF">1.6</font>. Implicit -source 1.6 -target 1.6.</td>
-</tr>
-<tr>
-<td valign=top>-1.7</td>
-<td colspan="3">Set compliance level to <font color="#3366FF">1.7</font>. Implicit -source 1.7 -target 1.7.</td>
-</tr>
-<tr>
-<td valign=top width="250">-source 1.1 to 1.7 or (5, 5.0, etc)</td>
-<td colspan="3">This is used to specify the source level expected by the compiler.<br>
-The possible value are:
-<ul>
-<li><font color="#3366FF">1.3</font></li>
-<li><font color="#3366FF">1.4</font></li>
-<li><font color="#3366FF">1.5</font>, <font color="#3366FF">5</font> or <font color="#3366FF">5.0</font></li>
-<li><font color="#3366FF">1.6</font>, <font color="#3366FF">6</font> or <font color="#3366FF">6.0</font></li>
-<li><font color="#3366FF">1.7</font>, <font color="#3366FF">7</font> or <font color="#3366FF">7.0</font></li>
-</ul>
-Defaults are:
-<ul>
-<li><font color="#3366FF">1.3</font> in <font color="#3366FF">-1.3</font> mode</li>
-<li><font color="#3366FF">1.3</font> in <font color="#3366FF">-1.4</font> mode</li>
-<li><font color="#3366FF">1.5</font> in <font color="#3366FF">-1.5</font> mode</li>
-<li><font color="#3366FF">1.6</font> in <font color="#3366FF">-1.6</font> mode</li>
-<li><font color="#3366FF">1.7</font> in <font color="#3366FF">-1.7</font> mode</li>
-</ul>
-In <font color="#3366FF">1.4</font>, <font color="#3366FF"><I>assert</I></font> is treated as a keyword. In <font color="#3366FF">1.5</font>
-and <font color="#3366FF">1.6</font>, <font color="#3366FF"><I>enum</I></font> and <font color="#3366FF"><i>assert</i></font> are treated as a keywords.</td>
-</tr>
-<tr>
-<th colspan="4">Warning options</th>
-</tr>
-<tr>
-<td valign=top>-?:warn -help:warn</td>
-<td colspan="3">Display advanced warning options</td>
-</tr>
-<tr>
-<td valign=top width="250" rowspan="67">-warn:...
-</td>
-<td valign=top colspan="3">Specify the set of enabled warnings.<br>e.g. <font color="#3366FF">-warn:unusedLocal,deprecation</font><br>
-<table>
-<tr>
-<td>-warn:none</td><td>disable all warnings</td>
-</tr>
-<tr>
-<td>-warn:<warning tokens separated by ,></td><td>enable exactly the listed warnings</td>
-</tr>
-<tr>
-<td>-warn:+<warning tokens separated by ,></td><td>enable additional warnings</td>
-</tr>
-<tr>
-<td>-warn:-<warning tokens separated by ,></td><td>disable specific warnings</td>
-</tr>
-</table>
-</td>
-</tr>
-<tr>
-<th align=center width="50">Default</th>
-<th align=left width="150">Token name</th>
-<th align=left>Description</th>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>allDeadCode</td>
-<td valign=top>dead code including trivial if(DEBUG) check</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>allDeprecation</td>
-<td valign=top>deprecation even inside deprecated code</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>allJavadoc</td>
-<td valign=top>invalid or missing javadoc</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>allOver-ann</td>
-<td valign=top>all missing @Override annotations (superclass and superinterfaces)</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>assertIdentifier</td>
-<td valign=top>occurrence of <i>assert</i> used as identifier</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>boxing</td>
-<td valign=top>autoboxing conversion</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>charConcat</td>
-<td valign=top>when a char array is used in a string concatenation without being converted explicitly to a string</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>compareIdentical</td>
-<td valign=top>comparing identical expressions</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>conditionAssign</td>
-<td valign=top>possible accidental boolean assignment</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>constructorName</td>
-<td valign=top>method with constructor name</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>deadCode</td>
-<td valign=top>dead code excluding trivial if (DEBUG) check</td>
-</tr><tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>dep-ann</td>
-<td valign=top>missing @Deprecated annotation</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>deprecation</td>
-<td valign=top>usage of deprecated type or member outside deprecated code</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>discouraged</td>
-<td valign=top>use of types matching a discouraged access rule</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>emptyBlock</td>
-<td valign=top>undocumented empty block</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>enumIdentifier</td>
-<td valign=top>occurrence of <i>enum</i> used as identifier</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>enumSwitch</td>
-<td valign=top>incomplete enum switch</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>fallthrough</td>
-<td valign=top>possible fall-through case</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>fieldHiding</td>
-<td valign=top>field hiding another variable</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>finalBound</td>
-<td valign=top>type parameter with final bound</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>finally</td>
-<td valign=top>finally block not completing normally</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>forbidden</td>
-<td valign=top>use of types matching a forbidden access rule</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>hashCode</td>
-<td valign=top>missing hashCode() method when overriding equals()</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>hiding</td>
-<td valign=top>macro for fieldHiding, localHiding, typeHiding and maskedCatchBlock</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>indirectStatic</td>
-<td valign=top>indirect reference to static member</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>intfAnnotation</td>
-<td valign=top>annotation type used as super interface</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>intfNonInherited</td>
-<td valign=top>interface non-inherited method compatibility</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>intfRedundant</td>
-<td valign=top>find redundant superinterfaces</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>javadoc</td>
-<td valign=top>invalid javadoc</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>localHiding</td>
-<td valign=top>local variable hiding another variable</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>maskedCatchBlock</td>
-<td valign=top>hidden catch block</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>nls</td>
-<td valign=top>non-nls string literals (lacking of tags //$NON-NLS-<n>)</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>noEffectAssign</td>
-<td valign=top>assignment with no effect</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>null</td>
-<td valign=top>potential missing or redundant null check</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>nullDereference</td>
-<td valign=top>missing null check</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>over-ann</td>
-<td valign=top>missing @Override annotation (superclass only)</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>paramAssign</td>
-<td valign=top>assignment to a parameter</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>pkgDefaultMethod</td>
-<td valign=top>attempt to override package-default method</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>raw</td>
-<td valign=top>usage a of raw type (instead of a parameterized type)</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>semicolon</td>
-<td valign=top>unnecessary semicolon or empty statement</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>serial</td>
-<td valign=top>missing serialVersionUID</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>specialParamHiding</td>
-<td valign=top>constructor or setter parameter hiding another field</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>static-access</td>
-<td valign=top>macro for indirectStatic and staticReceiver</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>staticReceiver</td>
-<td valign=top>if a non static receiver is used to get a static field or call a static method</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>super</td>
-<td valign=top>overriding a method without making a super invocation</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>suppress</td>
-<td valign=top>enable @SuppressWarnings</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>syncOverride</td>
-<td valign=top>missing synchronized in synchronized method override</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>syntheticAccess</td>
-<td valign=top>when performing synthetic access for innerclass</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>tasks</td>
-<td valign=top>enable support for tasks tags in source code</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>typeHiding</td>
-<td valign=top>type parameter hiding another type</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>unchecked</td>
-<td valign=top>unchecked type operation</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>unnecessaryElse</td>
-<td valign=top>unnecessary else clause</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>unqualifiedField</td>
-<td valign=top>unqualified reference to field</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>unused</td>
-<td valign=top>macro for unusedAllocation, unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedPrivate and unusedThrown</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>unusedAllocation</td>
-<td valign=top>allocating an object that is not used</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>unusedArgument</td>
-<td valign=top>unused method argument</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>unusedImport</td>
-<td valign=top>unused import reference</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>unusedLabel</td>
-<td valign=top>unused label</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>unusedLocal</td>
-<td valign=top>unused local variable</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>unusedPrivate</td>
-<td valign=top>unused private member declaration</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>unusedThrown</td>
-<td valign=top>unused declared thrown exception</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>unusedTypeArgs</td>
-<td valign=top>unused type arguments for method</td>
-</tr>
-<tr>
-<td align=center valign=top>-</td>
-<td align=left valign=top>uselessTypeCheck</td>
-<td valign=top>unnecessary cast/instanceof operation</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>varargsCast</td>
-<td valign=top>varargs argument need explicit cast</td>
-</tr>
-<tr>
-<td align=center valign=top>+</td>
-<td align=left valign=top>warningToken</td>
-<td valign=top>unhandled warning token in @SuppressWarnings</td>
-</tr>
-<tr>
-<td valign=top>-nowarn</td>
-<td colspan="3">No warning (equivalent to <font color="#3366FF">-warn:none</font>)</td>
-</tr>
-<tr>
-<td valign=top width="250">-err:...
-</td>
-<td valign=top colspan="3">Specify the set of enabled warnings that are converted to errors.
-<br>e.g. <font color="#3366FF">-err:unusedLocal,deprecation</font><br>
-unusedLocal and deprecation warnings will be converted to errors. All other warnings are still reported as warnings.
-<table>
-<tr>
-<td>-err:<warning tokens separated by ,></td><td>convert exactly the listed warnings to errors</td>
-</tr>
-<tr>
-<td>-err:+<warning tokens separated by ,></td><td>convert additional warnings to errors</td>
-</tr>
-<tr>
-<td>-err:-<warning tokens separated by ,></td><td>remove specific warnings from being converted to errors</td>
-</tr>
-</table>
-</td>
-</tr>
-<tr>
-<td valign=top>-deprecation</td>
-<td colspan="3">Equivalent to <font color="#3366FF">-warn:+deprecation</font>.</td>
-</tr>
-<tr>
-<td valign=top>-properties <file></td>
-<td colspan="3">Set warnings/errors option based on the properties file contents.
-This option can be used with -nowarn, -err:.. or -warn:.. options, but the last one on the 
-command line sets the options to be used.<br>
-<p>The properties file contents can be generated by setting project specific settings on an existing java project
-and using the file in <code>.settings/org.eclipse.jdt.core.prefs</code> file as a properties file, or
-a simple text file that is defined entry/value pairs using the constants defined in the 
-<code>org.eclipse.jdt.core.JavaCore</code> class.</p>
-<pre>
-...
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-...
+   Hashtable options = JavaCore.getOptions();
+   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
+   JavaCore.setOptions(options);
 </pre>
-</td>
-</tr>
-<tr>
-<th colspan="4">Debug options</th>
-</tr>
-<tr>
-<td valign=top>-g[:none|:lines,vars,source]
-</td>
-<td colspan="3">Set the debug attributes level<br>
-<table>
-<tr>
-<th align=left>-g</th>
-<td colspan="3">All debug info (equivalent to <font color="#3366FF">-g:lines,vars,source</font>)
-</td>
-</tr>
-<tr>
-<th align=left>-g:none</th>
-<td colspan="3">No debug info</td>
-</tr>
-<tr>
-<th align=left>-g:[lines,vars,source]</th>
-<td colspan="3">Selective debug info</td>
-</tr>
-</table>
-</td>
-</tr>
-<tr>
-<td valign=top>-preserveAllLocals</td>
-<td colspan="3">Explicitly request the compiler to preserve all local variables (for debug purpose). If omitted, the compiler will remove unused locals.</td>
-</tr>
-<tr>
-<th colspan="4">Annotation processing options (require a 1.6 VM or above and are used only if the compliance is 1.6)</th>
-</tr>
-<tr>
-<td>-Akey[=value]</td>
-<td valign=top colspan="3">Annotation processors options that are passed to annotation processors. <code>key</code> is made of identifiers separated by dots</td>
-</tr>
-<tr>
-<td>-proc:[only|none]</td>
-<td valign=top colspan="3">If <code>-proc:only</code> is specified, the annotation processors will run but
-no compilation will be performed. If <code>-proc:none</code> is specified, annotation processors
-will not be discovered or run; compilation will proceed as if no annotation processors
-were found. By default the compiler must search the classpath for annotation
-processors, so specifying <code>-proc:none</code> may speed compilation if annotation processing is
-not required.</td>
-</tr>
-<tr>
-<td>-processor <class1[,class2,...]></td>
-<td valign=top colspan="3">Qualified class names of annotation processors to run. If specified, the normal
-<a href="http://java.sun.com/javase/6/docs/api/javax/annotation/processing/Processor.html">
-processor discovery process</a> will be skipped.</td>
-</tr>
-<tr>
-<td>-processorpath <dir 1>;<dir 2>;...;<dir P></td>
-<td valign=top colspan="3">A list of directories or jar files which will be searched for annotation processors. 
-Entries are separated by the platform path separator. If not specified, the classpath will be searched instead.</td>
-</tr>
-<tr>
-<td>-s <dir></td>
-<td valign=top colspan="3">The directory where generated source files will be created.</td>
-</tr>
-<tr>
-<td>-XprintProcessorInfo</td>
-<td valign=top colspan="3">Print information about which annotations and which elements a processor is asked to process</td>
-</tr>
-<tr>
-<td>-XprintRounds</td>
-<td valign=top colspan="3">Print information about annotation processing rounds</td>
-</tr>
-<tr>
-<td>-classNames <class1[,class2,...]></td>
-<td valign=top colspan="3">Qualified names of binary types that need to be processed</td>
-</tr>
-<tr>
-<th colspan="4">Ignored options (for compatibility with javac options)</th>
-</tr>
-<tr>
-<td>-J<option></td>
-<td valign=top colspan="3">Pass option to the virtual machine</td>
-</tr>
-<tr>
-<td>-X<option></td>
-<td valign=top colspan="3">Specify non-standard option. -Xemacs is not ignored.</td>
-</tr>
-<tr>
-<td>-X</td>
-<td valign=top colspan="3">Print non-standard options and exit</td>
-</tr>
-<tr>
-<td>-O</td>
-<td valign=top colspan="3">Optimize for execution time</td>
-</tr>
-<tr>
-<th colspan="4">Advanced options</th>
-</tr>
-<tr>
-<td>@<file></td>
-<td valign=top colspan="3">Read command-line arguments from file</td>
-</tr>
-<tr>
-<td>-maxProblems <n></td>
-<td valign=top colspan="3">Max number of problems per compilation unit (100 by default)</td>
-</tr>
-<tr>
-<td valign=top>-log <filename></td>
-<td colspan="3">Specify a log file in which all output from the compiler will be dumped. This is really useful if you want to debug the batch
-compiler or get a file which contains all errors and warnings from a batch build. If the extension is <b>.xml</b>, the generated log
-will be an xml file.
-</td>
-</tr>
-<tr>
-<td valign=top>-Xemacs</td>
-<td colspan="3">Use emacs style to present errors and warnings locations into the console
-    and regular text logs. XML logs are unaffected by this option. With this option
-    active, the message:
-    <br><code><font color="#3366FF">
-2. WARNING in /workspace/X.java<br>
- (at line 8)...</font></code><br>is presented as:
-    <br><code><font color="#3366FF">
-/workspace/X.java:8: warning: The method...</font></code></td>
-</tr>
-<tr>
-<td valign=top>-proceedOnError[:Fatal]</td>
-<td colspan="3">Keep compiling in spite of errors, dumping class files with problem methods or problem types.
-This is recommended only if you want to be able to run your application even if you have remaining errors.<br>
-With ":Fatal", all optional errors are treated as fatal and this leads to code that will abort if an error is reached at
-runtime. Without ":Fatal", optional errors don't prevent the proper code generation and the produced .class files can
-be run without a problem.</td>
-</tr>
-<tr>
-<td valign=top>-verbose</td>
-<td colspan="3">Print accessed/processed compilation units in the console or the log file if specified.</td>
-</tr>
-<tr>
-<td valign=top>-referenceInfo</td>
-<td colspan="3">Compute reference info. This is useful only if connected to the builder. The reference infos are useless otherwise.</td>
-</tr>
-<tr>
-<td valign=top>-progress</td>
-<td colspan="3">Show progress (only in -log mode).</td>
-</tr>
-<tr>
-<td valign=top>-time
-</td>
-<td colspan="3">Display speed information.</td>
-</tr>
-<tr>
-<td valign=top>-noExit</td>
-<td colspan="3">Do not call <font color="#3366FF">System.exit(n)</font> at end of compilation (<font color="#3366FF">n=0</font> if no error).</td>
-</tr>
-<tr>
-<td valign=top>-repeat <n>
-</td>
-<td colspan="3">Repeat compilation process <font color="#3366FF"><n></font> times (perf analysis).</td>
-</tr>
-<tr>
-<td valign=top>-inlineJSR</td>
-<td colspan="3">Inline JSR bytecode (implicit if target >= 1.5).</td>
-</tr>
-<tr>
-<td valign=top>-enableJavadoc</td>
-<td colspan="3">Consider references inside javadoc.</td>
-</tr>
-<tr>
-<th colspan="4">Helping options</th>
-</tr>
-<tr>
-<td>-? -help</td>
-<td valign=top colspan="3">Display the help message.</td>
-</tr>
-<tr>
-<td valign=top>-v -version</td>
-<td colspan="3">Display the build number of the compiler. This is very useful to report a bug.</td>
-</tr>
-<tr>
-<td valign=top>-showversion</td>
-<td colspan="3">Display the build number of the compiler and continue. This is very useful to report a bug.</td>
-</tr>
-</table>
-<h4>Examples</h4>
-<table>
-<tr>
-<td valign=top><code><font color="#3366FF">d:\temp -classpath rt.jar -time -g -d d:/tmp</font></code>
-</td>
-<td valign=top>It compiles all source files in d:\temp and its subfolders. The classpath is simply rt.jar. It generates all debug
-attributes and all generated .class files are dumped in d:\tmp. The speed of the compiler will be displayed once the batch process
-is completed.</td>
-</tr>
-<tr>
-<td valign=top><code><font color="#3366FF">d:\temp\Test.java -classpath d:\temp;rt.jar -g:none</font></code>
-</td>
-<td valign=top>It compiles only Test.java and its dependant files if any, retrieving dependant files from d:\temp. The classpath is d:\temp followed by rt.jar, which means that all necessary classes
-are searched first in d:\temp and then in rt.jar. It generates no debug attributes and all generated .class files are dumped in d:\temp.</td>
-</tr>
-</table>
-<h3>Using the ant javac adapter</h3>
-<p>The Eclipse compiler can be used inside an Ant buildfile using the javac adapter. 
-In order to use the Eclipse compiler, you simply need to define the <b>build.compiler</b>
- property in your buildfile.</p>
-<p>In order to get the batch compiler working in an ant buildfile, the ant runtime classpath needs to contain the 
-Eclipse batch compiler. When you run your ant buildfile:</p>
-<ol>
-<li>outside of Eclipse: the easiest way to set up the ant runtime classpath is to add the <code>ecj.jar</code> file using the <code>-lib</code>
-argument or dumping it inside the <code>ANT_HOME</code> location.</li>
-<li>inside Eclipse using the same JRE than Eclipse: the Eclipse batch compiler is implicitly added to the ant runtime
-classpath.</li>
-<li>inside Eclipse using the different JRE: the Eclipse batch compiler must be explicitly added to the ant runtime classpath.
-This can be done using the <code>ecj.jar</code> file or using the org.eclipse.jdt.core jar file and the <code>jdtCompilerAdapter.jar</code> file located inside the
-org.eclipse.jdt.core jar file (this jar file needs to be extracted first).</li>
-</ol>
-<p>Here is a small example:</p>
-<pre><font color="#4444cc">
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="compile" default="main" basedir="../.">
-
-	<b><property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/></b>
-
-	<property name="root" value="${basedir}/src"/>
+<p>Filenames are filtered out if they match one of the supplied patterns. Entire folders are filtered out if their name matches one of the supplied folder names which end in a path separator.</p>
+<p>The incremental and batch builders can also be configured to only generate a single error when the .classpath file has errors. This option is set by default and eliminates numerous errors. 
+See <a href="jdt_api_options.htm#builder">JDT Core Builder Options</a> for a complete list of builder-related options and their defaults.</p>
 
-	<property name="destdir" value="d:/temp/bin" />
+<p>The compiler can also be configured using <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> options.  For example, you can define the severity that should be
+used for different kinds of problems that are found during compilation.  See <a href="jdt_api_options.htm#compiler">JDT Core Compiler Options</a> for a complete list of compiler-related options
+and their defaults.</p>
+<p>When programmatically configuring options for the builder or compiler, you should specify the scope of the option.  For example, setting up a resource filter may apply to a particular project
+only:</p>
+<pre>
 
-	<target name="main">
-		<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
-		    <classpath>
-		      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
-		    </classpath>
-		</javac>
-	</target>
-</project>
-</font>
-</pre><p>The syntax used for the javac Ant task can be found in the <a href="http://ant.apache.org/manual/Tasks/javac.html">
- Ant javac task documentation</a>. The current adapter supports the Javac Ant task 1.4.1 up to 1.6.5 versions.</p>
-<p>If you are using a version above 1.5.0, you can use the nested compiler argument element (<code><compilerarg></code>) to specify compiler
-specific options.
-</p>
-<pre><font color="#4444cc">
-...
-<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
-    <classpath>
-      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
-    </classpath>
-    <compilerarg</font> <font color="red">compiler="org.eclipse.jdt.core.JDTCompilerAdapter"</font> <font color="#4444cc">line="-1.5 -warn:+boxing"/>
-</javac>
-...
-</font>
+<span class="c2">
+   Hashtable options = myProject.getOptions(false);  // get only the options set up in this project
+   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
+   myProject.setOptions(options);
+</span>
 </pre>
-<b>Note:</b>
-<ol>
-<li>To prevent compiler dependant buildfiles, we <u>strongly</u> advise you to use a <code><compilerarg></code> whose "compiler" attribute value is <code>org.eclipse.jdt.core.JDTCompilerAdapter</code>.
-If this is not set, the buildfile can only be used with the Eclipse compiler. If set, the nested compiler argument is ignored if the name is different from the 
-compiler name specified by the <code>build.compiler</code> property.</li>
-<li><code><compilerarg></code> should not be used to set values like target value, source value, debug options, or any options that could be set using the
-defined attributes of the <code>javac</code> ant task. Its usage must be reserved to pass
-compiler specific options like warning options. When a command-line argument is specified more than once, the Eclipse batch compiler can report errors like:
-<pre>duplicate target compliance setting specification: 1.5</pre>
-</li>
-</ol>
-<h3> Problem determination</h3>
-<p> JDT Core defines a specialized marker (marker type "<b>org.eclipse.jdt.core.problem</b>
-  ") to denote compilation problems. To programmatically discover problems
- detected by the compiler, the standard platform marker protocol should be
- used. See <a href="../../org.eclipse.platform.doc.isv/guide/resAdv_markers.htm" class="XRef">
- Resource Markers</a>
-  for an overview of using markers.</p>
-<p> The following snippet finds all Java problem markers in a compilation 
-unit.</p>
-<pre><font color="#4444cc">
+<h3>Problem determination</h3>
+
+<p>JDT Core defines a specialized marker (marker type "<b>org.eclipse.jdt.core.problem</b> ") to denote compilation problems. To programmatically discover problems detected by the compiler, the
+standard platform marker protocol should be used. See <a href="../../org.eclipse.platform.doc.isv/guide/resAdv_markers.htm" class="XRef">Resource Markers</a> for an overview of using markers.</p>
+<p>The following snippet finds all Java problem markers in a compilation unit.</p>
+<pre>
+<span class="c2">
    public IMarker[] findJavaProblemMarkers(ICompilationUnit cu) 
       throws CoreException {
       IResource javaSourceFile = cu.getUnderlyingResource();
@@ -922,83 +74,41 @@ unit.</p>
          javaSourceFile.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER,
             true, IResource.DEPTH_INFINITE);
    }
-</font>
-</pre><p> Java problem markers are maintained by the Java project builder and are 
-removed automatically as problems are resolved and the Java source is recompiled.</p>
-<p>The problem id value is set to one of the constants defined in <b><a href="../reference/api/org/eclipse/jdt/core/compiler/IProblem.html">
- IProblem</a>
-</b>. The problem's id is reliable, but the message is localized and therefore 
-can be changed according to the default locale. The constants defined in <b><a href="../reference/api/org/eclipse/jdt/core/compiler/IProblem.html">
- IProblem</a>
-</b> are self-descriptive. </p>
-<p>An implementation of <b><a href="../reference/api/org/eclipse/jdt/core/IProblemRequestor.html">
- IProblemRequestor</a>
-</b> should be defined to collect the problems discovered during a Java operation. 
-  Working copies can be reconciled with problem detection if a <b><a href="../reference/api/org/eclipse/jdt/core/IProblemRequestor.html">
- IProblemRequestor</a>
-</b> has been supplied for the working copy creation. To achieve this, you 
-can use the <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)">
- reconcile</a></b> method. Here is an example:</p>
-<pre><font color="#4444cc">
+</span>
+</pre>
+<p>Java problem markers are maintained by the Java project builder and are removed automatically as problems are resolved and the Java source is recompiled.</p>
+
+<p>The problem id value is set to one of the constants defined in <b><a href="../reference/api/org/eclipse/jdt/core/compiler/IProblem.html">IProblem</a></b> . The problem's id is reliable, but the
+message is localized and therefore can be changed according to the default locale. The constants defined in <b><a href="../reference/api/org/eclipse/jdt/core/compiler/IProblem.html">IProblem</a></b>
+are self-descriptive.</p>
+<p>An implementation of <b><a href="../reference/api/org/eclipse/jdt/core/IProblemRequestor.html">IProblemRequestor</a></b> should be defined to collect the problems discovered during a Java
+operation. Working copies can be reconciled with problem detection if a <b><a href="../reference/api/org/eclipse/jdt/core/IProblemRequestor.html">IProblemRequestor</a></b> has been supplied for the
+working copy creation. To achieve this, you can use the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20boolean,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">reconcile</a></b> method.
+Here is an example:</p>
+
+<pre class="color1">
+
   ICompilationUnit unit = ..; // get some compilation unit
-			
+   
   // create requestor for accumulating discovered problems
   IProblemRequestor problemRequestor = new IProblemRequestor() {
     public void acceptProblem(IProblem problem) {
-      System.out.println(problem.getID() + ": " + problem.getMessage());
+      System.out.println(problem.getID() + ": " + problem.getMessage());
     }
     public void beginReporting() {}
     public void endReporting() {}
-    public boolean isActive() {	return true; } // will detect problems if active
+    public boolean isActive() { return true; } // will detect problems if active
   };
     
   // use working copy to hold source with error
   ICompilationUnit workingCopy = unit.getWorkingCopy(new WorkingCopyOwner() {}, problemRequestor, null);
-  ((IOpenable)workingCopy).getBuffer().setContents("public class X extends Zork {}");
+  ((IOpenable)workingCopy).getBuffer().setContents("public class X extends Zork {}");
 
-  // trigger reconciliation			
+  // trigger reconciliation   
   workingCopy.reconcile(NO_AST, true, null, null);
-</font></pre>
-<p>You can add an action on the reported problems in the acceptProblem(IProblem) 
-method. In this example, the reported problem will be that <b>Zork cannot 
-be resolved or is not a valid superclass</b> and its id is <b>IProblem.SuperclassNotFound</b>.
-</p>
-<h3>Excluding warnings using <code>SuppressWarnings</code></h3>
-<p>Java 5.0 offers the option to the user to disable compilation warnings relative to a subset of a compilation unit using
-the annotation <code>java.lang.SuppressWarning</code>.</p>
-<pre>
-	@SuppressWarning("unused") public void foo() {
-		String s;
-	}
 </pre>
-<p>Without the annotation, the compiler would complain that the local variable <code>s</code> is never used.
-With the annotation, the compiler silently ignores this warning locally to the <code>foo</code> method. This enables to
-keep the warnings in other locations of the same compilation unit or the same project.</p>
-<p>The list of tokens that can be used inside an <code>SuppressWarning</code> annotation is:</p>
-<!-- cross-checked with the code for 3.2 RC4 by maxime 20060517 -->
-<ul>
-<li><font color="green">all</font> to suppress all warnings</li>
-<li><font color="green">boxing</font> to suppress warnings relative to boxing/unboxing operations</li>
-<li><font color="green">cast</font> to suppress warnings relative to cast operations</li>
-<li><font color="green">dep-ann</font> to suppress warnings relative to deprecated annotation</li>
-<li><font color="green">deprecation</font> to suppress warnings relative to deprecation</li>
-<li><font color="green">fallthrough</font> to suppress warnings relative to missing breaks in switch statements</li>
-<li><font color="green">finally</font> to suppress warnings relative to finally block that don't return</li>
-<li><font color="green">hiding</font> to suppress warnings relative to locals that hide variable</li>
-<li><font color="green">incomplete-switch</font> to suppress warnings relative to missing entries in a switch statement (enum case)</li>
-<li><font color="green">nls</font> to suppress warnings relative to non-nls string literals</li>
-<li><font color="green">null</font> to suppress warnings relative to null analysis</li>
-<li><font color="green">raw</font> to suppress warnings relative to usage of raw types</li>
-<li><font color="green">restriction</font> to suppress warnings relative to usage of discouraged or forbidden references</li>
-<li><font color="green">serial</font> to suppress warnings relative to missing serialVersionUID field for a serializable class</li>
-<li><font color="green">static-access</font> to suppress warnings relative to incorrect static access</li>
-<li><font color="green">super</font> to suppress warnings relative to overriding a method without super invocations</li>
-<li><font color="green">synthetic-access</font> to suppress warnings relative to unoptimized access from inner classes</li>
-<li><font color="green">unchecked</font> to suppress warnings relative to unchecked operations</li>
-<li><font color="green">unqualified-field-access</font> to suppress warnings relative to field access unqualified</li>
-<li><font color="green">unused</font> to suppress warnings relative to unused code and dead code</li>
-</ul>
+<p>You can add an action on the reported problems in the acceptProblem(IProblem) method. In this example, the reported problem will be that <b>Zork cannot be resolved or is not a valid superclass</b>
+and its id is <b>IProblem.SuperclassNotFound</b>.</p>
 </body>
 </html>
-
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_contributing_a_cleanup.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_contributing_a_cleanup.htm
index 2d71f6a..2ab8f12 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_contributing_a_cleanup.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_contributing_a_cleanup.htm
@@ -1,132 +1,168 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<title>Contributing a simple clean up and a simple save action using the org.eclipse.jdt.ui.cleanUps extension point</title>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
+<title>Contributing a simple clean up and a simple save action using the
+org.eclipse.jdt.ui.cleanUps extension point</title>
+
 </head>
 <body>
-<h2> Contributing a clean up and a save action using the <b>clean up</b> extension point</h2>
-<p>The <a href="../reference/extension-points/org_eclipse_jdt_ui_cleanUps.html"><b>org.eclipse.jdt.ui.cleanUps</b></a> extension point enables you to contribute your own Java code clean ups and Java editor save actions.
-Clean ups help in resolving problems in a compilation unit or establishing a code style. A save action is a special clean up that perform the requested modifications on save automatically.
-</p>
-<h3> Using the extension point</h3>
-<p>To create a new extension for the <a href="../reference/extension-points/org_eclipse_jdt_ui_cleanUps.html"><b>org.eclipse.jdt.ui.cleanUps</b></a> extension point
-you need to first provide the required extensions in the plugin.xml. There are 3 extensions that need to be declared as shown below with the example of a clean up
-which updates the copyrights for a file on save: </p>
-
+<h2>Contributing a clean up and a save action using the <b>clean up</b> extension point</h2>
+
+<p>The <a href=
+"../reference/extension-points/org_eclipse_jdt_ui_cleanUps.html"><b>org.eclipse.jdt.ui.cleanUps</b></a>
+extension point enables you to contribute your own Java code clean ups and Java editor save
+actions. Clean ups help in resolving problems in a compilation unit or establishing a code style. A
+save action is a special clean up that perform the requested modifications on save
+automatically.</p>
+<h3>Using the extension point</h3>
+<p>To create a new extension for the <a href=
+"../reference/extension-points/org_eclipse_jdt_ui_cleanUps.html"><b>org.eclipse.jdt.ui.cleanUps</b></a>
+extension point you need to first provide the required extensions in the plugin.xml. There are 3
+extensions that need to be declared as shown below with the example of a clean up which updates the
+copyrights for a file on save:</p>
 <pre>
    <extension
-         point="org.eclipse.jdt.ui.cleanUps">
+         point="org.eclipse.jdt.ui.cleanUps">
       <cleanUp
-            id="org.eclipse.jdt.copyrightsaveaction.copyright_clean_up"
-            class="org.eclipse.jdt.ui.internal.copyrightupdater.CopyrightUpdaterCleanUp">
+            id="org.eclipse.jdt.copyrightsaveaction.copyright_clean_up"
+            class="org.eclipse.jdt.ui.internal.copyrightupdater.CopyrightUpdaterCleanUp">
       </cleanUp>
       
       <cleanUpOptionsInitializer
-            class="org.eclipse.jdt.ui.internal.copyrightupdater.CopyrightOnSaveOptionsInitializer"
-            cleanUpKind="saveAction">
+            class="org.eclipse.jdt.ui.internal.copyrightupdater.CopyrightOnSaveOptionsInitializer"
+            cleanUpKind="saveAction">
       </cleanUpOptionsInitializer>
       
       <cleanUpConfigurationUI
-            class="org.eclipse.jdt.ui.internal.copyrightupdater.CopyrightTabPage"
-            name="%cleanUpConfigurationUI.name"
-            cleanUpKind="saveAction">
+            class="org.eclipse.jdt.ui.internal.copyrightupdater.CopyrightTabPage"
+            name="%cleanUpConfigurationUI.name"
+            cleanUpKind="saveAction">
       </cleanUpConfigurationUI>
    </extension>
 </pre>
 
-<p>
-For a description of the individual attributes, please refer to the extension point documentation.
-</p>
-
+<p>For a description of the individual attributes, please refer to the extension point
+documentation.</p>
 <h3>Contributing a clean up</h3>
-<p>To contribute a clean up, you need to first create the class that implements the <a href="../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUp.html"><b>ICleanUp</b></a> Interface. 
-Lets create the <code>CopyrightUpdaterCleanUp</code> class for our example clean up and implement the inherited methods:</p>
-<pre><font color="#4444cc">	public class CopyrightUpdaterCleanUp implements ICleanUp {
-	
+<p>To contribute a clean up, you need to first create the class that implements the <a href=
+"../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUp.html"><b>ICleanUp</b></a> Interface. Lets
+create the <code>CopyrightUpdaterCleanUp</code> class for our example clean up and implement the
+inherited methods:</p>
+<pre class="color1">
+	public class CopyrightUpdaterCleanUp implements ICleanUp {
+
 		private CleanUpOptions fOptions;
 		private RefactoringStatus fStatus;
 
 		public CopyrightUpdaterCleanUp() {
-		
-		}</font></pre>
-
-The <code>CleanUpRequirements</code> contain various requirements for the clean up such as an AST or a fresh AST containing changes from other clean ups, compiler options and changed 
-regions, which are used by the <code>CleanUpContext</code> to create the fix. It has to be returned from the method getRequirements(): 
-<pre><font color="#4444cc">		public CleanUpRequirements getRequirements() {
-			boolean changedRegionsRequired= false;
-			Map compilerOptions= null;
-			boolean isUpdateCopyrights= fOptions.isEnabled("cleanup.update_copyrights");//$NON-NLS-1$
-			return new CleanUpRequirements(isUpdateCopyrights, isUpdateCopyrights, changedRegionsRequired, compilerOptions);	    
-		}</font></pre>
-
-A human readable description should be returned for each step of the clean up that is enabled in the current options:
-<pre><font color="#4444cc">		public String[] getStepDescriptions() {
-			if (fOptions.isEnabled("cleanup.update_copyrights"))//$NON-NLS-1$
-				return new String[] {"Update Copyrights"};//$NON-NLS-1$
-
-			return null;
-		}</font></pre>
+		}
+	}
+</pre>
 
+The <code>CleanUpRequirements</code> contain various requirements for the clean up such as an AST
+or a fresh AST containing changes from other clean ups, compiler options and changed regions, which
+are used by the <code>CleanUpContext</code> to create the fix. It has to be returned from the
+method getRequirements():
+<pre class="color1">
+	public CleanUpRequirements getRequirements() {
+		boolean changedRegionsRequired= false;
+		Map compilerOptions= null;
+		boolean isUpdateCopyrights= fOptions.isEnabled("cleanup.update_copyrights");//$NON-NLS-1$
+		return new CleanUpRequirements(isUpdateCopyrights, isUpdateCopyrights, changedRegionsRequired, compilerOptions);     
+	}
+</pre>
+A human readable description should be returned for each step of the clean up that is enabled in
+the current options:
+<pre class="color1">
+	public String[] getStepDescriptions() {
+		if (fOptions.isEnabled("cleanup.update_copyrights"))//$NON-NLS-1$
+			return new String[] {"Update Copyrights"};//$NON-NLS-1$
+
+		return null;
+	}
+</pre>
 The CleanUpOptions for the supported options keys will be set using setOptions(...):
-<pre><font color="#4444cc">		public void setOptions(CleanUpOptions options) {
-			Assert.isLegal(options != null);
-			Assert.isTrue(fOptions == null);
-			fOptions= options;		
-		}</font></pre>
 
-The clean up pre-conditions and post-conditions are being checked in checkPreConditions(...) and checkPostConditions(...):
-<pre><font color="#4444cc">		public RefactoringStatus checkPreConditions(IJavaProject project, ICompilationUnit[] compilationUnits, IProgressMonitor monitor) throws CoreException {
-			if (fOptions.isEnabled("cleanup.update_copyrights")) { //$NON-NLS-1$
-				fStatus= new RefactoringStatus();
-			}
-			return new RefactoringStatus();
-		}</font></pre>
-
-<pre><font color="#4444cc">		public RefactoringStatus checkPostConditions(IProgressMonitor monitor) throws CoreException {
-			try {
-				if (fStatus == null || fStatus.isOK()) {
-					return new RefactoringStatus();
-				} else {
-					return fStatus;
-				}
-			} finally {
-				fStatus= null;
+<pre class="color1">
+	public void setOptions(CleanUpOptions options) {
+		Assert.isLegal(options != null);
+		Assert.isTrue(fOptions == null);
+		fOptions= options;  
+	}
+</pre>
+The clean up pre-conditions and post-conditions are being checked in checkPreConditions(...) and
+checkPostConditions(...):
+<pre class="color1">
+	public RefactoringStatus checkPreConditions(IJavaProject project, ICompilationUnit[] compilationUnits, IProgressMonitor monitor) throws CoreException {
+		if (fOptions.isEnabled("cleanup.update_copyrights")) { //$NON-NLS-1$
+			fStatus= new RefactoringStatus();
+		}
+		return new RefactoringStatus();
+	}
+</pre>
+<pre class="color1">
+	public RefactoringStatus checkPostConditions(IProgressMonitor monitor) throws CoreException {
+		try {
+			if (fStatus == null || fStatus.isOK()) {
+				return new RefactoringStatus();
+			} else {
+				return fStatus;
 			}
-		}</font></pre>
-
-Finally, a <a href="../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUpFix.html"><b>ICleanUpFix</b></a> is to be created which fixes all the problems for the given context using createFix(...)
-<pre><font color="#4444cc">		public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
-			CompilationUnit compilationUnit= context.getAST();
-			if (compilationUnit == null)
-				return null;
-
-			return CopyrightsFix.createCleanUp(compilationUnit, fOptions.isEnabled("cleanup.update_copyrights"));//$NON-NLS-1$
-		}</font></pre> 
+		} finally {
+			fStatus= null;
+		}
+	}
+</pre>
+Finally, a <a href=
+"../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUpFix.html"><b>ICleanUpFix</b></a> is to be
+created which fixes all the problems for the given context using createFix(...)
+
+<pre class="color1">
+	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
+		CompilationUnit compilationUnit= context.getAST();
+		if (compilationUnit == null)
+			return null;
 
+		return CopyrightsFix.createCleanUp(compilationUnit, fOptions.isEnabled("cleanup.update_copyrights"));//$NON-NLS-1$
+	}
+</pre>
 <h3>Contributing a clean up options provider</h3>
-<p>To create the UI for the clean up, an options provider tab page has to be created by implementing the <a href="../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUpConfigurationUI.html"><b>ICleanUpConfigurationUI</b></a> interface.
-The page can be created by implementing the createContents(...) method in the <code>CopyrightTabPage</code> class. The preferences page along with the desired groups and options can be 
-created using the method doCreatePreferences().
-Optionally, a code snippet of the new clean up with the given options can be shown in the clean up preview tab using the method getPreview(). If the CleanUpOptions get modified in the UI,
- they need to be set again using the method setOptions(...).</p>
-
-<h3> Contributing a clean up options initializer</h3>
-<p>A clean up options initializer, which returns the default options for each clean up kind can be created by implementing the <a href="../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUpOptionsInitializer.html"><b>ICleanUpOptionsInitializer</b></a>.
-The options initializer can either be contributed for a normal code clean up or for a save action.</p>
-<pre><font color="#4444cc">	public class CopyrightOnSaveOptionsInitializer implements ICleanUpOptionsInitializer {
-
-		public CopyrightOnSaveOptionsInitializer() {		
-		}</font></pre>
-
-<p>The default options for this initializer can be set in setDefaultOptions(...)</p>
-<pre><font color="#4444cc">		public void setDefaultOptions(CleanUpOptions options) {
-			options.setOption("cleanup.update_copyrights", CleanUpOptions.TRUE);
+<p>To create the UI for the clean up, an options provider tab page has to be created by
+implementing the <a href=
+"../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUpConfigurationUI.html"><b>ICleanUpConfigurationUI</b></a>
+interface. The page can be created by implementing the createContents(...) method in the
+<code>CopyrightTabPage</code> class. The preferences page along with the desired groups and options
+can be created using the method doCreatePreferences(). Optionally, a code snippet of the new clean
+up with the given options can be shown in the clean up preview tab using the method getPreview().
+If the CleanUpOptions get modified in the UI, they need to be set again using the method
+setOptions(...).</p>
+<h3>Contributing a clean up options initializer</h3>
+<p>A clean up options initializer, which returns the default options for each clean up kind can be
+created by implementing the <a href=
+"../reference/api/org/eclipse/jdt/ui/cleanup/ICleanUpOptionsInitializer.html"><b>ICleanUpOptionsInitializer</b></a>.
+The options initializer can either be contributed for a normal code clean up or for a save
+action.</p>
+
+<pre class="color1">
+	public class CopyrightOnSaveOptionsInitializer implements ICleanUpOptionsInitializer {
+
+		public CopyrightOnSaveOptionsInitializer() {
 		}
-	}</font></pre>
-<p> The UI code to configure the options for this example can be found here: <a href="CopyrightTabPage.html"><b>CleanUpTabPage.java</b></a>.</p>
+</pre>
+<p>The default options for this initializer can be set in setDefaultOptions(...)</p>
+<pre class="color1">
+	public void setDefaultOptions(CleanUpOptions options) {
+		options.setOption("cleanup.update_copyrights", CleanUpOptions.TRUE);
+	}
+}
+</pre>
+<p>The UI code to configure the options for this example can be found here: <a href=
+"CopyrightTabPage.html"><b>CleanUpTabPage.java</b></a>.</p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_manip.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_manip.htm
index 93947a4..a4fea09 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_manip.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_manip.htm
@@ -1,85 +1,85 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<HEAD>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Manipulating Java code</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
 
-<link rel="stylesheet" type="text/css" HREF="../book.css">
-</HEAD>
-<BODY>
+</head>
+<body>
 <h2>Manipulating Java code</h2>
-<P>
-Your plug-in can use the JDT API to create classes or interfaces, add methods to existing types, or alter the methods for types. </P>
-<P>
-The simplest way to alter Java objects is to use the Java element API. More general techniques can be used to work with the raw source code for a Java element.</P>
-
-<H3>
-Code modification using Java elements</h3>
-
-<H4>
-Generating a compilation unit
-</h4>
-<P>
-The easiest way to programmatically generate a compilation unit is to use 
-<b><a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html#createCompilationUnit(java.lang.String, java.lang.String, boolean, org.eclipse.core.runtime.IProgressMonitor)">IPackageFragment.createCompilationUnit</a></b>. 
-You specify the name and contents of the compilation unit. The compilation unit is created inside the package and the new
-<b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"> ICompilationUnit</a></b> is returned. </P>
-<P>
-A compilation unit can be created generically by creating a file resource whose extension is "<b>.java"</b> in the appropriate folder that corresponds to the package directory. Using the generic resource API is a back door to the Java tooling, so the Java model is not updated until the generic resource change listeners are
-notified and the JDT listeners update the Java model with the new compilation unit.</P>
-
-
-<H4>
-Modifying a compilation unit
-</h4>
-<P>
-Most simple modifications of Java source can be done using the Java element API.</P>
-<P>
-For example, you can query a type from a compilation unit. Once you have the <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b>IType</b></a>, you can use protocols such as
-<a href="../reference/api/org/eclipse/jdt/core/IType.html#createField(java.lang.String, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.core.runtime.IProgressMonitor)"><b>createField</b></a>, 
-<a href="../reference/api/org/eclipse/jdt/core/IType.html#createInitializer(java.lang.String, org.eclipse.jdt.core.IJavaElement, org.eclipse.core.runtime.IProgressMonitor)"><b>createInitializer</b></a>,
-<a href="../reference/api/org/eclipse/jdt/core/IType.html#createMethod(java.lang.String, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.core.runtime.IProgressMonitor)"><b>createMethod</b></a>, 
-or <a href="../reference/api/org/eclipse/jdt/core/IType.html#createType(java.lang.String, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.core.runtime.IProgressMonitor)"><b>createType</b></a> 
-to add source code members to the type. The source code and information about the location of the member is supplied in these methods.</P>
-<P>
-The <b><a href="../reference/api/org/eclipse/jdt/core/ISourceManipulation.html"> ISourceManipulation</a></b> interface defines common source manipulations for Java elements. This includes methods for renaming, moving, copying, or deleting a type's member. </P>
-
-
-<H4>
-Working copies
-</h4>
-<P>
-Code can be modified by manipulating the compilation unit (and thus the underlying 
-<a HREF="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IFile.html"><b>IFile</b></a> is modified) or
-one can modify an in-memory copy of the compilation unit called a working copy. </P>
-<P>
-A working copy is obtained from a compilation unit using the 
-<b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#getWorkingCopy(org.eclipse.core.runtime.IProgressMonitor)">getWorkingCopy</a></b>
-method. (Note that the compilation unit does not need to exist in the Java model
-in order for a working copy to be created.)  Whoever creates such a working copy is responsible for discarding it when not needed any longer using the
-<b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#discardWorkingCopy()">discardWorkingCopy</a></b>
-method. </P>
-<P>
-Working copies modify an in-memory buffer. The <b>getWorkingCopy()</b> method creates a default buffer, but
-clients can provide their own buffer implementation using the
-<b><a href="../reference/api/org/eclipse/jdt/core/ITypeRoot.html#getWorkingCopy(org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)">getWorkingCopy(WorkingCopyOwner, IProgressMonitor)</a></b>
-method. Clients can manipulate the text of this buffer directly. If they do so, they must synchronize the working copy with
-the buffer from time to time using either the
-<b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)">reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)</a></b>
-method.  </P>
-<P>
-Finally a working copy can be saved to disk (replacing the original compilation unit) using the
-<b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#commitWorkingCopy(boolean, org.eclipse.core.runtime.IProgressMonitor)">commitWorkingCopy</a></b>
-method.   </P>
-<P>
-For example the following code snippet creates a working copy on a compilation unit using a custom working copy owner. The snippet
-modifies the buffer, reconciles the changes, commits the changes to disk and finally discards the working copy. </P>
-<pre>
-<font color='#4444CC'>
+<p>Your plug-in can use the JDT API to create classes or interfaces, add methods to existing types,
+or alter the methods for types.</p>
+
+<p>The simplest way to alter Java objects is to use the Java element API. More general techniques
+can be used to work with the raw source code for a Java element.</p>
+<h3>Code modification using Java elements</h3>
+<h4>Generating a compilation unit</h4>
+<p>The easiest way to programmatically generate a compilation unit is to use <b><a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragment.html#createCompilationUnit(java.lang.String,%20java.lang.String,%20boolean,%20org.eclipse.core.runtime.IProgressMonitor)">
+IPackageFragment.createCompilationUnit</a></b>. You specify the name and contents of the
+compilation unit. The compilation unit is created inside the package and the new <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html">ICompilationUnit</a></b> is
+returned.</p>
+<p>A compilation unit can be created generically by creating a file resource whose extension is
+"<b>.java"</b> in the appropriate folder that corresponds to the package directory. Using the
+generic resource API is a back door to the Java tooling, so the Java model is not updated until the
+generic resource change listeners are notified and the JDT listeners update the Java model with the
+new compilation unit.</p>
+
+<h4>Modifying a compilation unit</h4>
+<p>Most simple modifications of Java source can be done using the Java element API.</p>
+<p>For example, you can query a type from a compilation unit. Once you have the <a href=
+"../reference/api/org/eclipse/jdt/core/IType.html"><b>IType</b></a>, you can use protocols such as
+<a href=
+"../reference/api/org/eclipse/jdt/core/IType.html#createField(java.lang.String,%20org.eclipse.jdt.core.IJavaElement,%20boolean,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>createField</b></a>, <a href=
+"../reference/api/org/eclipse/jdt/core/IType.html#createInitializer(java.lang.String,%20org.eclipse.jdt.core.IJavaElement,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>createInitializer</b></a>, <a href=
+"../reference/api/org/eclipse/jdt/core/IType.html#createMethod(java.lang.String,%20org.eclipse.jdt.core.IJavaElement,%20boolean,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>createMethod</b></a>, or <a href=
+"../reference/api/org/eclipse/jdt/core/IType.html#createType(java.lang.String,%20org.eclipse.jdt.core.IJavaElement,%20boolean,%20org.eclipse.core.runtime.IProgressMonitor)">
+
+<b>createType</b></a> to add source code members to the type. The source code and information about
+the location of the member is supplied in these methods.</p>
+<p>The <b><a href=
+"../reference/api/org/eclipse/jdt/core/ISourceManipulation.html">ISourceManipulation</a></b>
+interface defines common source manipulations for Java elements. This includes methods for
+renaming, moving, copying, or deleting a type's member.</p>
+<h4>Working copies</h4>
+<p>Code can be modified by manipulating the compilation unit (and thus the underlying <a href=
+"../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IFile.html"><b>IFile</b></a>
+is modified) or one can modify an in-memory copy of the compilation unit called a working copy.</p>
+<p>A working copy is obtained from a compilation unit using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#getWorkingCopy(org.eclipse.core.runtime.IProgressMonitor)">
+
+getWorkingCopy</a></b> method. (Note that the compilation unit does not need to exist in the Java
+model in order for a working copy to be created.)  Whoever creates such a working copy is
+responsible for discarding it when not needed any longer using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#discardWorkingCopy()">discardWorkingCopy</a></b>
+method.</p>
+<p>Working copies modify an in-memory buffer. The <b>getWorkingCopy()</b> method creates a default
+buffer, but clients can provide their own buffer implementation using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ITypeRoot.html#getWorkingCopy(org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+getWorkingCopy(WorkingCopyOwner, IProgressMonitor)</a></b> method. Clients can manipulate the text
+of this buffer directly. If they do so, they must synchronize the working copy with the buffer from
+time to time using either the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20boolean,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+
+reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)</a></b> method.</p>
+<p>Finally a working copy can be saved to disk (replacing the original compilation unit) using the
+<b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#commitWorkingCopy(boolean,%20org.eclipse.core.runtime.IProgressMonitor)">
+commitWorkingCopy</a></b> method.  </p>
+<p>For example the following code snippet creates a working copy on a compilation unit using a
+custom working copy owner. The snippet modifies the buffer, reconciles the changes, commits the
+changes to disk and finally discards the working copy.</p>
+<pre class="color1">
     // Get original compilation unit
     ICompilationUnit originalUnit = ...;
     
@@ -91,7 +91,7 @@ modifies the buffer, reconciles the changes, commits the changes to disk and fin
     
     // Modify buffer and reconcile
     IBuffer buffer = ((IOpenable)workingCopy).getBuffer();
-    buffer.append("class X {}");
+    buffer.append("class X {}");
     workingCopy.reconcile(ICompilationUnit.NO_AST, false, null, null);
     
     // Commit changes
@@ -99,14 +99,11 @@ modifies the buffer, reconciles the changes, commits the changes to disk and fin
     
     // Destroy working copy
     workingCopy.discardWorkingCopy();
-</font>
 </pre>
-<P>
-The compilation unit's buffer can also be modified using the
-<b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#applyTextEdit(org.eclipse.text.edits.TextEdit, org.eclipse.core.runtime.IProgressMonitor)">ICompilationUnit.applyTextEdit</a></b>
-method.</P>
-<pre>
-<font color='#4444CC'>
+<p>The compilation unit's buffer can also be modified using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#applyTextEdit(org.eclipse.text.edits.TextEdit,%20org.eclipse.core.runtime.IProgressMonitor)">
+ICompilationUnit.applyTextEdit</a></b> method.</p>
+<pre class="color1">
     // Get original compilation unit
     ICompilationUnit originalUnit = ...;
     
@@ -128,17 +125,17 @@ method.</P>
     
     // Destroy working copy
     workingCopy.discardWorkingCopy();
-</font>
 </pre>
-<P>
-Working copies can also be shared by several clients using a working copy owner. A working copy can be later retrieved using the
-<b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#findWorkingCopy(org.eclipse.jdt.core.WorkingCopyOwner)">findWorkingCopy</a></b>
-method. A shared working copy is thus keyed on the original compilation unit and on a working copy owner.</P>
-<P>
-The following shows how client 1 creates a shared working copy, client 2 retrieves this working copy, client 1 discards the
-working copy, and client 2 trying to retrieve the shared working copy notices it does not exist any longer: </P>
-<pre>
-<font color='#4444CC'>
+<p>Working copies can also be shared by several clients using a working copy owner. A working copy
+can be later retrieved using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#findWorkingCopy(org.eclipse.jdt.core.WorkingCopyOwner)">
+findWorkingCopy</a></b> method. A shared working copy is thus keyed on the original compilation
+unit and on a working copy owner.</p>
+
+<p>The following shows how client 1 creates a shared working copy, client 2 retrieves this working
+copy, client 1 discards the working copy, and client 2 trying to retrieve the shared working copy
+notices it does not exist any longer:</p>
+<pre class="color1">
     // Client 1 & 2: Get original compilation unit
     ICompilationUnit originalUnit = ...;
     
@@ -160,176 +157,202 @@ working copy, and client 2 trying to retrieve the shared working copy notices it
     // Client 2: Attempt to retrieve shared working copy and find out it's null
     workingCopyForClient2 = originalUnit.findWorkingCopy(owner);
     assert workingCopyForClient2 == null;
-</font>
 </pre>
-<H3>Code modification using the DOM/AST API</h3>
-
-
-There are three ways to create a <b><a href="../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html">CompilationUnit</a></b>.
-The first one is to use <b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html">ASTParser</a></b>.
-The second is to use <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)">ICompilationUnit#reconcile(...)</a></b>.
-The third is to start from scratch using the factory methods on <b><a href="../reference/api/org/eclipse/jdt/core/dom/AST.html">AST</a></b> (Abstract Syntax Tree).
-
-<h4>
-Creating an AST from existing source code
-</h4>
-
-An instance of <b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html">ASTParser</a></b> must be created with <b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#newParser(int)">ASTParser.newParser(int)</a></b>.<br>
-<br>
-The source code is given to the <b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html">ASTParser</a></b> with one of the following methods:
+<h3>Code modification using the DOM/AST API</h3>
+There are three ways to create a <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html">CompilationUnit</a></b>. The first
+one is to use <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html">ASTParser</a></b>. The second is to use
+
+<b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20boolean,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+ICompilationUnit#reconcile(...)</a></b>. The third is to start from scratch using the factory
+methods on <b><a href="../reference/api/org/eclipse/jdt/core/dom/AST.html">AST</a></b> (Abstract
+Syntax Tree).
+<h4>Creating an AST from existing source code</h4>
+An instance of <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html">ASTParser</a></b> must be created with
+<b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#newParser(int)">ASTParser.newParser(int)</a></b>.<br />
+
+<br />
+
+The source code is given to the <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html">ASTParser</a></b> with one of the
+following methods:
 <ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setSource(char[])">setSource(char[])</a></b>: to create the AST from source code</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setSource(org.eclipse.jdt.core.IClassFile)">setSource(IClassFile)</a></b>: to create the AST from a classfile</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setSource(org.eclipse.jdt.core.ICompilationUnit)">setSource(ICompilationUnit)</a></b>: to create the AST from a compilation unit</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setSource(char[])">setSource(char[])</a></b>:
+to create the AST from source code</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setSource(org.eclipse.jdt.core.IClassFile)">
+setSource(IClassFile)</a></b>: to create the AST from a classfile</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setSource(org.eclipse.jdt.core.ICompilationUnit)">
+setSource(ICompilationUnit)</a></b>: to create the AST from a compilation unit</li>
 </ul>
 
-Then the AST is created by calling
-<b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#createAST(org.eclipse.core.runtime.IProgressMonitor)">createAST(IProgressMonitor)</a></b>.<br>
-<br>
-The result is an AST with correct source positions for each node.
-The resolution of bindings has to be requested before the creation of the tree with
-<b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setResolveBindings(boolean)">setResolveBindings(boolean)</a></b>.
-Resolving the bindings is a costly operation and should be done only when necessary.
-As soon as the tree has been modified, all positions and bindings are lost.<br>
-Note that some bindings recovery can also be done during this resolution with
-<b><a href="../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setBindingsRecovery(boolean)">setBindingsRecovery(boolean)</a></b>.
-Using this recovery, some bindings - <i>typically missing types</i> - will no longer
-be <code>null</code>, hence improving the resilience of any clients using the AST tree.
-
-<h4>
-Creating an AST by reconciling a working copy
-</h4>
-If a working copy is not consistent (has been modified) then an AST can be created by calling the method <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)">reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)</a></b>.
-To request AST creation, call the <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)">reconcile(...)</a></b>
- method with <b><a href="../reference/api/org/eclipse/jdt/core/dom/AST.html#JLS3">AST.JLS3</a></b> as first parameter.<br>
-<br>
-Its bindings are computed only if the problem requestor is active, or if the problem detection is forced.
-Resolving the bindings is a costly operation and should be done only when necessary. As soon as the tree has been modified, all positions and
-bindings are lost.<br>
-Note that some bindings recovery can also be done during this resolution with
-by using the method <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, int, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)">reconcile(int, int, WorkingCopyOwner, IProgressMonitor)</a></b>
-with the flag <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#ENABLE_BINDINGS_RECOVERY">ENABLE_BINDINGS_RECOVERY</a></b>
-set on the second parameter. Using this recovery, some bindings - <i>typically missing types</i> - will no longer
-be <code>null</code>, hence improving the resilience of any clients using the AST tree.
-
-<h4>
-From scratch
-</h4>
-<P>It is possible to create a <b><a href="../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html">CompilationUnit</a></b> from scratch using the factory methods on <b><a href="../reference/api/org/eclipse/jdt/core/dom/AST.html">AST</a></b>.
-These method names start with <b>new...</b>. The following is an example that creates a <b>HelloWorld</b> class.
-</P>
-<P>The first snippet is the generated output:</p>
-<pre>
-<font color='#4444CC'>
-	package example;
-	import java.util.*;
-	public class HelloWorld {
-		public static void main(String[] args) {
-			System.out.println("Hello" + " world");
-		}
-	}
-</font>
+Then the AST is created by calling <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#createAST(org.eclipse.core.runtime.IProgressMonitor)">
+createAST(IProgressMonitor)</a></b>.<br />
+<br />
+The result is an AST with correct source positions for each node. The resolution of bindings has to
+be requested before the creation of the tree with <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setResolveBindings(boolean)">setResolveBindings(boolean)</a></b>.
+Resolving the bindings is a costly operation and should be done only when necessary. As soon as the
+tree has been modified, all positions and bindings are lost.<br />
+Note that some bindings recovery can also be done during this resolution with <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/ASTParser.html#setBindingsRecovery(boolean)">setBindingsRecovery(boolean)</a></b>.
+Using this recovery, some bindings - <i>typically missing types</i> - will no longer be
+<code>null</code>, hence improving the resilience of any clients using the AST tree.
+
+<h4>Creating an AST by reconciling a working copy</h4>
+If a working copy is not consistent (has been modified) then an AST can be created by calling the
+method <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20boolean,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)</a></b>. To request AST creation, call
+the <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20boolean,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+reconcile(...)</a></b> method with <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/AST.html#JLS3">AST.JLS3</a></b> as first
+parameter.<br />
+<br />
+Its bindings are computed only if the problem requestor is active, or if the problem detection is
+forced. Resolving the bindings is a costly operation and should be done only when necessary. As
+soon as the tree has been modified, all positions and bindings are lost.<br />
+
+Note that some bindings recovery can also be done during this resolution with by using the method
+<b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20int,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+reconcile(int, int, WorkingCopyOwner, IProgressMonitor)</a></b> with the flag <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#ENABLE_BINDINGS_RECOVERY">ENABLE_BINDINGS_RECOVERY</a></b>
+set on the second parameter. Using this recovery, some bindings - <i>typically missing types</i> -
+will no longer be <code>null</code>, hence improving the resilience of any clients using the AST
+tree.
+<h4>From scratch</h4>
+<p>It is possible to create a <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html">CompilationUnit</a></b> from
+scratch using the factory methods on <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/AST.html">AST</a></b>. These method names start with
+
+<b>new...</b>. The following is an example that creates a <b>HelloWorld</b> class.</p>
+<p>The first snippet is the generated output:</p>
+<pre class="color1">
+ package example;
+ import java.util.*;
+ public class HelloWorld {
+  public static void main(String[] args) {
+   System.out.println("Hello" + " world");
+  }
+ }
+</pre>
+<p>The following snippet is the corresponding code that generates the output.</p>
+<pre class="color1">
+
+  AST ast = AST.newAST(AST.JLS3);
+  CompilationUnit unit = ast.newCompilationUnit();
+  PackageDeclaration packageDeclaration = ast.newPackageDeclaration();
+  packageDeclaration.setName(ast.newSimpleName("example"));
+  unit.setPackage(packageDeclaration);
+  ImportDeclaration importDeclaration = ast.newImportDeclaration();
+  QualifiedName name = 
+   ast.newQualifiedName(
+    ast.newSimpleName("java"),
+    ast.newSimpleName("util"));
+  importDeclaration.setName(name);
+  importDeclaration.setOnDemand(true);
+  unit.imports().add(importDeclaration);
+  TypeDeclaration type = ast.newTypeDeclaration();
+  type.setInterface(false);
+  type.modifiers().add(ast.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD));
+  type.setName(ast.newSimpleName("HelloWorld"));
+  MethodDeclaration methodDeclaration = ast.newMethodDeclaration();
+  methodDeclaration.setConstructor(false);
+  List modifiers = methodDeclaration.modifiers();
+  modifiers.add(ast.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD));
+  modifiers.add(ast.newModifier(Modifier.ModifierKeyword.STATIC_KEYWORD));
+  methodDeclaration.setName(ast.newSimpleName("main"));
+  methodDeclaration.setReturnType2(ast.newPrimitiveType(PrimitiveType.VOID));
+  SingleVariableDeclaration variableDeclaration = ast.newSingleVariableDeclaration();
+  variableDeclaration.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("String"))));
+  variableDeclaration.setName(ast.newSimpleName("args"));
+  methodDeclaration.parameters().add(variableDeclaration);
+  org.eclipse.jdt.core.dom.Block block = ast.newBlock();
+  MethodInvocation methodInvocation = ast.newMethodInvocation();
+  name = 
+   ast.newQualifiedName(
+    ast.newSimpleName("System"),
+    ast.newSimpleName("out"));
+  methodInvocation.setExpression(name);
+  methodInvocation.setName(ast.newSimpleName("println")); 
+  InfixExpression infixExpression = ast.newInfixExpression();
+  infixExpression.setOperator(InfixExpression.Operator.PLUS);
+  StringLiteral literal = ast.newStringLiteral();
+  literal.setLiteralValue("Hello");
+  infixExpression.setLeftOperand(literal);
+  literal = ast.newStringLiteral();
+  literal.setLiteralValue(" world");
+  infixExpression.setRightOperand(literal);
+  methodInvocation.arguments().add(infixExpression);
+  ExpressionStatement expressionStatement = ast.newExpressionStatement(methodInvocation);
+  block.statements().add(expressionStatement);
+  methodDeclaration.setBody(block);
+  type.bodyDeclarations().add(methodDeclaration);
+  unit.types().add(type);
 </pre>
-<P>The following snippet is the corresponding code that generates the output.</p>
-<pre><font color='#4444CC'>
-		AST ast = AST.newAST(AST.JLS3);
-		CompilationUnit unit = ast.newCompilationUnit();
-		PackageDeclaration packageDeclaration = ast.newPackageDeclaration();
-		packageDeclaration.setName(ast.newSimpleName("example"));
-		unit.setPackage(packageDeclaration);
-		ImportDeclaration importDeclaration = ast.newImportDeclaration();
-		QualifiedName name = 
-			ast.newQualifiedName(
-				ast.newSimpleName("java"),
-				ast.newSimpleName("util"));
-		importDeclaration.setName(name);
-		importDeclaration.setOnDemand(true);
-		unit.imports().add(importDeclaration);
-		TypeDeclaration type = ast.newTypeDeclaration();
-		type.setInterface(false);
-		type.modifiers().add(ast.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD));
-		type.setName(ast.newSimpleName("HelloWorld"));
-		MethodDeclaration methodDeclaration = ast.newMethodDeclaration();
-		methodDeclaration.setConstructor(false);
-		List modifiers = methodDeclaration.modifiers();
-		modifiers.add(ast.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD));
-		modifiers.add(ast.newModifier(Modifier.ModifierKeyword.STATIC_KEYWORD));
-		methodDeclaration.setName(ast.newSimpleName("main"));
-		methodDeclaration.setReturnType2(ast.newPrimitiveType(PrimitiveType.VOID));
-		SingleVariableDeclaration variableDeclaration = ast.newSingleVariableDeclaration();
-		variableDeclaration.setType(ast.newArrayType(ast.newSimpleType(ast.newSimpleName("String"))));
-		variableDeclaration.setName(ast.newSimpleName("args"));
-		methodDeclaration.parameters().add(variableDeclaration);
-		org.eclipse.jdt.core.dom.Block block = ast.newBlock();
-		MethodInvocation methodInvocation = ast.newMethodInvocation();
-		name = 
-			ast.newQualifiedName(
-				ast.newSimpleName("System"),
-				ast.newSimpleName("out"));
-		methodInvocation.setExpression(name);
-		methodInvocation.setName(ast.newSimpleName("println")); 
-		InfixExpression infixExpression = ast.newInfixExpression();
-		infixExpression.setOperator(InfixExpression.Operator.PLUS);
-		StringLiteral literal = ast.newStringLiteral();
-		literal.setLiteralValue("Hello");
-		infixExpression.setLeftOperand(literal);
-		literal = ast.newStringLiteral();
-		literal.setLiteralValue(" world");
-		infixExpression.setRightOperand(literal);
-		methodInvocation.arguments().add(infixExpression);
-		ExpressionStatement expressionStatement = ast.newExpressionStatement(methodInvocation);
-		block.statements().add(expressionStatement);
-		methodDeclaration.setBody(block);
-		type.bodyDeclarations().add(methodDeclaration);
-		unit.types().add(type);
-</font></pre>
 <h4>Retrieving extra positions</h4>
-<p>The DOM/AST node contains only a pair of positions (the starting position and the length of the node). This is not always
-sufficient. In order to retrieve intermediate positions, the <b><a href="../reference/api/org/eclipse/jdt/core/compiler/IScanner.html">IScanner</a></b> API should be used. For example,
-we have an <b><a href="../reference/api/org/eclipse/jdt/core/dom/InstanceofExpression.html">InstanceofExpression</a></b> for which we want to know the 
-positions of the <i>instanceof</i> operator.
-We could write the following method to achieve this:</p>
-<pre><font color='#4444CC'>
-	private int[] getOperatorPosition(Expression expression, char[] source) {
-		if (expression instanceof InstanceofExpression) {
-			IScanner scanner = ToolFactory.createScanner(false, false, false, false);
-			scanner.setSource(source);
-			int start = expression.getStartPosition();
-			int end = start + expression.getLength();
-			scanner.resetTo(start, end);
-			int token;
-			try {
-				while ((token = scanner.getNextToken()) != ITerminalSymbols.TokenNameEOF) {
-					switch(token) {
-						case ITerminalSymbols.TokenNameinstanceof:
-							return new int[] {scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition()};
-					}
-				}
-			} catch (InvalidInputException e) {
-			}
-		}
-		return null;
-	}
-</font></pre>
-<p>The <b><a href="../reference/api/org/eclipse/jdt/core/compiler/IScanner.html">IScanner</a></b> is used to divide the input source into tokens.
-Each token has a specific value that is defined in the <b><a href="../reference/api/org/eclipse/jdt/core/compiler/ITerminalSymbols.html">ITerminalSymbols</a></b> interface. It is 
-fairly simple to iterate and retrieve the right token. We also recommend that you use the scanner if you want to find the 
-position of the <i>super</i> keyword in a 
-<b><a href="../reference/api/org/eclipse/jdt/core/dom/SuperMethodInvocation.html">SuperMethodInvocation</a></b>.</p>
+<p>The DOM/AST node contains only a pair of positions (the starting position and the length of the
+node). This is not always sufficient. In order to retrieve intermediate positions, the <b><a href=
+"../reference/api/org/eclipse/jdt/core/compiler/IScanner.html">IScanner</a></b> API should be used.
+For example, we have an <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/InstanceofExpression.html">InstanceofExpression</a></b>
+for which we want to know the positions of the <i>instanceof</i> operator. We could write the
+following method to achieve this:</p>
+
+<pre class="color1">
+
+ private int[] getOperatorPosition(Expression expression, char[] source) {
+  if (expression instanceof InstanceofExpression) {
+   IScanner scanner = ToolFactory.createScanner(false, false, false, false);
+   scanner.setSource(source);
+   int start = expression.getStartPosition();
+   int end = start + expression.getLength();
+   scanner.resetTo(start, end);
+   int token;
+   try {
+    while ((token = scanner.getNextToken()) != ITerminalSymbols.TokenNameEOF) {
+     switch(token) {
+      case ITerminalSymbols.TokenNameinstanceof:
+       return new int[] {scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition()};
+     }
+    }
+   } catch (InvalidInputException e) {
+   }
+  }
+  return null;
+ }
+</pre>
+<p>The <b><a href="../reference/api/org/eclipse/jdt/core/compiler/IScanner.html">IScanner</a></b>
+is used to divide the input source into tokens. Each token has a specific value that is defined in
+the <b><a href=
+"../reference/api/org/eclipse/jdt/core/compiler/ITerminalSymbols.html">ITerminalSymbols</a></b>
+interface. It is fairly simple to iterate and retrieve the right token. We also recommend that you
+use the scanner if you want to find the position of the <i>super</i> keyword in a <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/SuperMethodInvocation.html">SuperMethodInvocation</a></b>.</p>
 
 <h4>Source code modifications</h4>
+<p>Some source code modifications are not provided via the Java element API. A more general way to
+edit source code (such as changing the source code for existing elements) is accomplished using the
+compilation unit's raw source code and the rewrite API of the DOM/AST.</p>
+<p>To perform DOM/AST rewriting, there are two sets of API: the descriptive rewriting and the
+modifying rewriting.</p>
+<p>The descriptive API does not modify the AST but use <b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.html">ASTRewrite</a></b> API to
+generate the descriptions of modifications. The AST rewriter collects descriptions of modifications
+to nodes and translates these descriptions into text edits that can then be applied to the original
+source.</p>
+<pre class="color1">
 
-<P>
-Some source code modifications are not provided via the Java element API.
-A more general way to edit source code (such as changing the source code for existing elements) is accomplished using the compilation unit's raw source code and the rewrite API of the DOM/AST.</P>
-<P>
-To perform DOM/AST rewriting, there are two sets of API: the descriptive rewriting and the modifying rewriting.
-</p>
-<p>
-The descriptive API does not modify the AST but use <b><a href="../reference/api/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.html">ASTRewrite</a></b> API to generate the descriptions of modifications.
-The AST rewriter collects descriptions of modifications to nodes and translates these descriptions into text edits that can then be applied to the original source.</p>
-<pre>
-<font color='#4444CC'>
    // creation of a Document
    ICompilationUnit cu = ... ; // content is "public class X {\n}"
    String source = cu.getSource();
@@ -357,17 +380,18 @@ The AST rewriter collects descriptions of modifications to nodes and translates
 
    // update of the compilation unit
    cu.getBuffer().setContents(newSource);
-</font></pre>
+</pre>
+<p>The modifying API allows to modify directly the AST:</p>
 
-<p>
-The modifying API allows to modify directly the AST:</P>
 <ul>
-<li>Request the recording of modifications (<b><a href="../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html#recordModifications()">CompilationUnit.recordModifications()</a></b>).</li>
+<li>Request the recording of modifications (<b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html#recordModifications()">CompilationUnit.recordModifications()</a></b>).</li>
 <li>Perform the modifications on the AST Nodes.</li>
-<li>And when the modifications are finished, generate text edits that can then be applied to the original source (<b><a href="../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html#rewrite(org.eclipse.jface.text.IDocument, java.util.Map)">CompilationUnit.rewrite(...)</a></b>).</li>
+<li>And when the modifications are finished, generate text edits that can then be applied to the
+original source (<b><a href=
+"../reference/api/org/eclipse/jdt/core/dom/CompilationUnit.html#rewrite(org.eclipse.jface.text.IDocument,%20java.util.Map)">CompilationUnit.rewrite(...)</a></b>).</li>
 </ul>
-<pre>
-<font color='#4444CC'>
+<pre class="color1">
    // creation of a Document
    ICompilationUnit cu = ... ; // content is "public class X {\n}"
    String source = cu.getSource();
@@ -395,78 +419,86 @@ The modifying API allows to modify directly the AST:</P>
 
    // update of the compilation unit
    cu.getBuffer().setContents(newSource);
-</font>
 </pre>
+<h3><a name="javadeltas" id="javadeltas">Responding to changes in Java elements</a></h3>
+<p>If your plug-in needs to know about changes to Java elements after the fact, you can register a
+Java <a href=
+"../reference/api/org/eclipse/jdt/core/IElementChangedListener.html"><b>IElementChangedListener</b></a>
+with <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a>.</p>
+<pre class="color1">
 
-<H3>
-<a name="javadeltas">
-Responding to changes in Java elements</a></h3>
-<P>
-If your plug-in needs to know about changes to Java elements after the fact, you can register a Java
-<a href="../reference/api/org/eclipse/jdt/core/IElementChangedListener.html"><b> IElementChangedListener</b></a> with
-<a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a>.</P>
-<pre><font color='#4444CC'>
    JavaCore.addElementChangedListener(new MyJavaElementChangeReporter());
-</font></pre>
-<P>
-You can be more specific and specify the type of events you're interested in using 
-<a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#addElementChangedListener(org.eclipse.jdt.core.IElementChangedListener, int)"><b> addElementChangedListener(IElementChangedListener, int)</b></a>. </P>
-<P>
-For example, if you're only interested in listening for events during a reconcile operation: </P>
-<pre><font color='#4444CC'>
+</pre>
+<p>You can be more specific and specify the type of events you're interested in using <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#addElementChangedListener(org.eclipse.jdt.core.IElementChangedListener,%20int)">
+
+<b>addElementChangedListener(IElementChangedListener, int)</b></a>.</p>
+<p>For example, if you're only interested in listening for events during a reconcile operation:</p>
+<pre class="color1">
+
    JavaCore.addElementChangedListener(new MyJavaElementChangeReporter(), ElementChangedEvent.POST_RECONCILE);
-</font></pre>
-<P>
-There are two kinds of events that are supported by <b>JavaCore</b>:</P>
+</pre>
+<p>There are two kinds of events that are supported by <b>JavaCore</b>:</p>
 <ul>
-<li><a href="../reference/api/org/eclipse/jdt/core/ElementChangedEvent.html#POST_CHANGE"><b>POST_CHANGE</b></a>: 
-      Listeners of this event kind will get notified during the corresponding 
-      <a HREF="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResourceChangeEvent.html#POST_CHANGE"><b>POST_CHANGE</b></a> 
-      resource change notification.</li>
-<li><a href="../reference/api/org/eclipse/jdt/core/ElementChangedEvent.html#POST_RECONCILE"><b>POST_RECONCILE</b></a>: 
-      Listeners of this event kind will get notified at the end of a reconcile operation on a working copy
-      (see <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)"><b>ICompilationUnit.reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)</b></a>).</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/core/ElementChangedEvent.html#POST_CHANGE"><b>POST_CHANGE</b></a>:
+Listeners of this event kind will get notified during the corresponding <a href=
+"../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResourceChangeEvent.html#POST_CHANGE">
+
+<b>POST_CHANGE</b></a> resource change notification.</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/core/ElementChangedEvent.html#POST_RECONCILE"><b>POST_RECONCILE</b></a>:
+Listeners of this event kind will get notified at the end of a reconcile operation on a working
+copy (see <a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20boolean,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>ICompilationUnit.reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)</b></a>).</li>
 </ul>
-<P>
-Java element change listeners are similar conceptually to resource change listeners
-(described in
-<a HREF="../../org.eclipse.platform.doc.isv/guide/resAdv_events.htm" CLASS="XRef">tracking resource changes</a>). The following snippet implements a Java element change reporter that prints the element deltas to the system console.</P>
-<pre><font color='#4444CC'>
+<p>Java element change listeners are similar conceptually to resource change listeners (described
+in <a href="../../org.eclipse.platform.doc.isv/guide/resAdv_events.htm" class="XRef">tracking
+resource changes</a>). The following snippet implements a Java element change reporter that prints
+the element deltas to the system console.</p>
+<pre class="color1">
+
    public class MyJavaElementChangeReporter implements IElementChangedListener {
       public void elementChanged(ElementChangedEvent event) {
          IJavaElementDelta delta= event.getDelta();
          if (delta != null) {
-            System.out.println("delta received: ");
+            System.out.println("delta received: ");
             System.out.print(delta);
          }
       }
    }
-</font></pre>
-<P>
-The <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html"><b> IJavaElementDelta</b></a> includes the 
-<a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getElement()">element</a> that was
-changed and <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getFlags()">flags</a> describing 
-the kind of change that occurred. Most of the time the delta tree is rooted at the Java Model level. Clients must then navigate
-this delta using <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getAffectedChildren()"><b>getAffectedChildren</b></a> 
-to find out what projects have changed. </P>
-<P>
-The following example method traverses a delta and prints the elements that have been added, removed and changed:</P>
-<pre><font color='#4444CC'>
+</pre>
+<p>The <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html"><b>IJavaElementDelta</b></a>
+includes the <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getElement()">element</a> that was
+changed and <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getFlags()">flags</a> describing the
+kind of change that occurred. Most of the time the delta tree is rooted at the Java Model level.
+Clients must then navigate this delta using <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getAffectedChildren()"><b>getAffectedChildren</b></a>
+to find out what projects have changed.</p>
+
+<p>The following example method traverses a delta and prints the elements that have been added,
+removed and changed:</p>
+<pre class="color1">
+
     void traverseAndPrint(IJavaElementDelta delta) {
         switch (delta.getKind()) {
             case IJavaElementDelta.ADDED:
-                System.out.println(delta.getElement() + " was added");
+                System.out.println(delta.getElement() + " was added");
                 break;
             case IJavaElementDelta.REMOVED:
-                System.out.println(delta.getElement() + " was removed");
+                System.out.println(delta.getElement() + " was removed");
                 break;
             case IJavaElementDelta.CHANGED:
-                System.out.println(delta.getElement() + " was changed");
+                System.out.println(delta.getElement() + " was changed");
                 if ((delta.getFlags() & IJavaElementDelta.F_CHILDREN) != 0) {
-                    System.out.println("The change was in its children");
+                    System.out.println("The change was in its children");
                 }
                 if ((delta.getFlags() & IJavaElementDelta.F_CONTENT) != 0) {
-                    System.out.println("The change was in its content");
+                    System.out.println("The change was in its content");
                 }
                 /* Others flags can also be checked */
                 break;
@@ -476,64 +508,85 @@ The following example method traverses a delta and prints the elements that have
             traverseAndPrint(children[i]);
         }
     }
-</font></pre>
-<P>
-Since <a href="../reference/api/org/eclipse/jdt/core/IAnnotation.html"><b> IAnnotation</b></a>s are not children of any
-Java element, annotation deltas are obtained using 
-<a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getAnnotationDeltas()"><b>getAnnotationDeltas()</b></a>.
-</P><P>
-Several kinds of operations can trigger a Java element change notification. Here are some examples:</P>
+</pre>
+<p>Since <a href="../reference/api/org/eclipse/jdt/core/IAnnotation.html"><b>IAnnotation</b></a>s
+are not children of any Java element, annotation deltas are obtained using <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getAnnotationDeltas()"><b>getAnnotationDeltas()</b></a>.</p>
+
+<p>Several kinds of operations can trigger a Java element change notification. Here are some
+examples:</p>
 <ul>
-<li>Creating a resource, e.g. <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html#createCompilationUnit(java.lang.String, java.lang.String, boolean, org.eclipse.core.runtime.IProgressMonitor)"><b>IPackageFragment.createCompilationUnit</b></a> 
-      (the delta indicates the <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#ADDED">addition</a> of the compilation unit)</li>
-<li>Modifying a resource, e.g. <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#createType(java.lang.String, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.core.runtime.IProgressMonitor)"><b>ICompilationUnit.createType</b></a> 
-     (the delta indicates that the compilation unit has <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#CHANGED">changed</a> and that a type was 
-     <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getAddedChildren()"> added as a child</a> of this compilation unit)</li>
-<li>Modifying a project's classpath, e.g. <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html#setRawClasspath(org.eclipse.jdt.core.IClasspathEntry[], org.eclipse.core.runtime.IProgressMonitor)"><b>IJavaProject.setRawClasspath</b></a>
-     (the delta indicates that package fragment roots have been <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_ADDED_TO_CLASSPATH">added to the classpath</a>, 
-     <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_REMOVED_FROM_CLASSPATH">removed from the classpath</a>, or
-     <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_CLASSPATH_REORDER">reordered on the classpath</a>)</li>
-<li>Modifying a classpath variable value, e.g. <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#setClasspathVariable(java.lang.String, org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IProgressMonitor)"><b>JavaCore.setClasspathVariable</b></a>
-     (the delta also indicates that package fragment roots have been affected)</li>
-<li>Reconciling a working copy with its buffer, e.g. <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int, boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor)"><b>ICompilationUnit.reconcile</b></a></li>
-<li>Modifying an <a HREF="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IFile.html"><b>IFile</b></a> that ends with ".java" and that is on the
-      project's classpath, e.g. using <b>IFile.setContents</b> (the delta indicates that a compilation unit was changed, but 
-      <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_FINE_GRAINED">no finer-grained information</a>
-      is provided as this was not done through a Java Model operation)</li>
+<li>Creating a resource, e.g. <a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragment.html#createCompilationUnit(java.lang.String,%20java.lang.String,%20boolean,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>IPackageFragment.createCompilationUnit</b></a> (the delta indicates the <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#ADDED">addition</a> of the
+compilation unit)</li>
+<li>Modifying a resource, e.g. <a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#createType(java.lang.String,%20org.eclipse.jdt.core.IJavaElement,%20boolean,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>ICompilationUnit.createType</b></a> (the delta indicates that the compilation unit has <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#CHANGED">changed</a> and that a type
+was <a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#getAddedChildren()">added
+as a child</a> of this compilation unit)</li>
+
+<li>Modifying a project's classpath, e.g. <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html#setRawClasspath(org.eclipse.jdt.core.IClasspathEntry[],%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>IJavaProject.setRawClasspath</b></a> (the delta indicates that package fragment roots have been
+<a href="../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_ADDED_TO_CLASSPATH">added
+to the classpath</a>, <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_REMOVED_FROM_CLASSPATH">removed
+from the classpath</a>, or <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_CLASSPATH_REORDER">reordered on the
+classpath</a>)</li>
+<li>Modifying a classpath variable value, e.g. <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#setClasspathVariable(java.lang.String,%20org.eclipse.core.runtime.IPath,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>JavaCore.setClasspathVariable</b></a> (the delta also indicates that package fragment roots have
+been affected)</li>
+
+<li>Reconciling a working copy with its buffer, e.g. <a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html#reconcile(int,%20boolean,%20org.eclipse.jdt.core.WorkingCopyOwner,%20org.eclipse.core.runtime.IProgressMonitor)">
+<b>ICompilationUnit.reconcile</b></a></li>
+<li>Modifying an <a href=
+"../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IFile.html"><b>IFile</b></a>
+that ends with ".java" and that is on the project's classpath, e.g. using <b>IFile.setContents</b>
+(the delta indicates that a compilation unit was changed, but <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElementDelta.html#F_FINE_GRAINED">no finer-grained
+information</a> is provided as this was not done through a Java Model operation)</li>
 </ul>
-<P>Similar to <a HREF="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResourceDelta.html"><b>IResourceDelta</b></a> 
-the Java element deltas can be batched using an 
-<a HREF="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IWorkspaceRunnable.html"><b>IWorkspaceRunnable</b></a>. 
-The deltas resulting from several Java Model operations that are run inside a <b>IWorkspaceRunnable</b> are merged and reported at once.   </P>
-<P><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a><b>
-</b>provides a <b>run</b> method for batching Java element changes. </P>
-<P>
-For example, the following code fragment will trigger 2 Java element change events: </P>
-<pre><font color='#4444CC'>
+<p>Similar to <a href=
+"../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResourceDelta.html"><b>
+
+IResourceDelta</b></a> the Java element deltas can be batched using an <a href=
+"../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IWorkspaceRunnable.html">
+<b>IWorkspaceRunnable</b></a>. The deltas resulting from several Java Model operations that are run
+inside a <b>IWorkspaceRunnable</b> are merged and reported at once.  </p>
+<p><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a>provides a
+<b>run</b> method for batching Java element changes.</p>
+<p>For example, the following code fragment will trigger 2 Java element change events:</p>
+
+<pre class="color1">
+
     // Get package
     IPackageFragment pkg = ...;
     
     // Create 2 compilation units
-    ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A {}", false, null);
-    ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B {}", false, null);
-</font></pre>
-<P>
-Whereas the following code fragment will trigger 1 Java element change event: </P>
-<pre><font color='#4444CC'>
+    ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A {}", false, null);
+    ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B {}", false, null);
+</pre>
+<p>Whereas the following code fragment will trigger 1 Java element change event:</p>
+<pre class="color1">
+
     // Get package
     final IPackageFragment pkg = ...;
     
     // Create 2 compilation units
     JavaCore.run(
         new IWorkspaceRunnable() {
- 	        public void run(IProgressMonitor monitor) throws CoreException {
- 	            ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A {}", false, null);
- 	            ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B {}", false, null);
- 	        }
+          public void run(IProgressMonitor monitor) throws CoreException {
+              ICompilationUnit unitA = pkg.createCompilationUnit("A.java", "public class A {}", false, null);
+              ICompilationUnit unitB = pkg.createCompilationUnit("B.java", "public class B {}", false, null);
+          }
         },
         null);
-</font></pre>
-
-
-</BODY>
-</HTML>
+</pre>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_open_editor.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_open_editor.htm
index 9f52a45..aa94b7b 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_open_editor.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_open_editor.htm
@@ -1,26 +1,29 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Opening a Java editor</title>
-<link rel="stylesheet" type="text/css" href="../book.css">
+<link rel="stylesheet" type="text/css" href="../book.css" />
 </head>
 <body>
 <h3>Opening a Java editor</h3>
-<p>The following snippet shows how <b><a href="../reference/api/org/eclipse/jdt/ui/JavaUI.html"> 
-  JavaUI</a></b> can be used to open a Java editor and display a specific member of a 
-  Java compilation unit.</p>
-<pre><font color="#4444cc">    void showMethod(IMember member) throws PartInitException, JavaModelException {
+<p>The following snippet shows how <b><a href=
+"../reference/api/org/eclipse/jdt/ui/JavaUI.html">JavaUI</a></b> can be used to open a Java editor
+and display a specific member of a Java compilation unit.</p>
+
+<pre class="color1">
+    void showMethod(IMember member) throws PartInitException, JavaModelException {
         ICompilationUnit cu = member.getCompilationUnit();
         IEditorPart javaEditor = JavaUI.openInEditor(cu);
         JavaUI.revealInEditor(javaEditor, (IJavaElement)member);
     }
-</font></pre>
-<p> The methods <code>openInEditor</code> and <code>revealInEditor</code> also 
-  work for class files and for members contained in class files. </p>
-
+</pre>
+<p>The methods <code>openInEditor</code> and <code>revealInEditor</code> also work for class files
+and for members contained in class files.</p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_options.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_options.htm
index 5c6ab59..5a6f031 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_options.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_options.htm
@@ -1,47 +1,55 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<HEAD>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>JDT Core options</title>
-
-</HEAD>
-<BODY>
+</head>
+<body>
 <h2>JDT Core options</h2>
-<P>
-JDT Core options control the behavior of core features such as the Java
-compiler, code formatter, code assist, and other core behaviors.  The APIs
-for accessing the options are defined in <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a>. 
-Options can be accessed as a group as follows:</P>
+<p>JDT Core options control the behavior of core features such as the Java compiler, code
+formatter, code assist, and other core behaviors.  The APIs for accessing the options are
+defined in <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a>. 
+
+Options can be accessed as a group as follows:</p>
 <ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#getDefaultOptions()">JavaCore.getDefaultOptions()</a></b> - Answers the default value of the options.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#getOptions()">JavaCore.getOptions()</a></b> - Answers the current values of the options.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#setOptions(java.util.Hashtable)">JavaCore.setOptions(Hashtable newOptions)</a></b> - Replaces the options values by new values.</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#getDefaultOptions()">JavaCore.getDefaultOptions()</a></b>
+- Answers the default value of the options.</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#getOptions()">JavaCore.getOptions()</a></b> -
+Answers the current values of the options.</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#setOptions(java.util.Hashtable)">JavaCore.setOptions(Hashtable
+newOptions)</a></b> - Replaces the options values by new values.</li>
 </ul>
-
-<p>Options can also be accessed individually by a string name.</P>
+<p>Options can also be accessed individually by a string name.</p>
 
 <ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#getOption(java.lang.String)">JavaCore.getOption(String optionName)</a></b> - Answers the value of a specific option.</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#getOption(java.lang.String)">JavaCore.getOption(String
+optionName)</a></b> - Answers the value of a specific option.</li>
 </ul>
-
 <p>Options that can configure the severity of a compiler problem can also be found.</p>
-
 <ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#getOptionForConfigurableSeverity(int)">JavaCore.getOptionForConfigurableSeverity(int problemID)</a></b> - Answers the
-option to use to configure the severity of the compiler problem identified by <code>problemID</code>.</li>
+<li><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#getOptionForConfigurableSeverity(int)">JavaCore.getOptionForConfigurableSeverity(int
+problemID)</a></b> - Answers the option to use to configure the severity of the compiler problem
+identified by <code>problemID</code>.</li>
 </ul>
+<p>Options are stored as a hash table of all known configurable options with their values. Helper
+constants have been defined on <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> for each option ID and
+its possible constant values.</p>
 
-<p>Options are stored as a hash table of all known configurable options with their values.
-Helper constants have been defined on <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> for each option ID and its possible constant values.</P>
+<p>The following code fragment restores the value of all core options to their defaults except for
+one (<code>COMPILER_PB_DEPRECATION</code>), which is set specifically.</p>
+<pre class="color1">
 
-<P>
-The following code fragment restores the value of all core options to their
-defaults except for one (<code>COMPILER_PB_DEPRECATION</code>), which is set specifically.</p>
-<pre><font color='#4444CC'>
    // Get the default options
    Hashtable options = JavaCore.getDefaultOptions();
    
@@ -50,12 +58,11 @@ defaults except for one (<code>COMPILER_PB_DEPRECATION</code>), which is set spe
    
    // Set the new options
    JavaCore.setOptions(options);
-</font></pre>
-
-<p>The following code fragment keeps the value of the current options and modifies
-only one (<code>COMPILER_PB_DEPRECATION</code>):</p>
+</pre>
+<p>The following code fragment keeps the value of the current options and modifies only one
+(<code>COMPILER_PB_DEPRECATION</code>):</p>
+<pre class="color1">
 
-<pre><font color='#4444CC'>
    // Get the current options
    Hashtable options = JavaCore.getOptions();
    
@@ -64,19 +71,17 @@ only one (<code>COMPILER_PB_DEPRECATION</code>):</p>
    
    // Set the new options
    JavaCore.setOptions(options);
-</font></pre>
-
-<H3>Project specific options</h3>
-
-<p>The values of options can be overridden per project using protocol in <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b>IJavaProject</b></a>.</p>
 
-<p>The following code fragment retrieves the value of an option (<code>COMPILER_PB_DEPRECATION</code>)
-for a specific project in two different ways.  The boolean parameter
-controls whether only the project-specific options should be returned in a query
-or whether the project's option values should be merged with the values in
-JavaCore.</p>
-
-<pre><font color="#4444CC">
+</pre>
+<h3>Project specific options</h3>
+<p>The values of options can be overridden per project using protocol in <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b>IJavaProject</b></a>.</p>
+<p>The following code fragment retrieves the value of an option
+(<code>COMPILER_PB_DEPRECATION</code>) for a specific project in two different ways.  The
+boolean parameter controls whether only the project-specific options should be returned in a query
+or whether the project's option values should be merged with the values in JavaCore.</p>
+<pre>
+<span class="c2">
    // Get the project
    IJavaProject project = ...;
 
@@ -89,376 +94,446 @@ JavaCore.</p>
    
    // Get the value of an option from this project.  Use the value from 
    // JavaCore value if none is specified for the project
-   String value = project.getOption(JavaCore.COMPILER_PB_DEPRECATION, <b>true</b>);</font>
-</pre>
-<H3>JDT Core options descriptions</h3>
+   String value = project.getOption(JavaCore.COMPILER_PB_DEPRECATION, <b>true</b>);</span>
 
-<P>
-The following tables describe the available JDT Core options.  The option
-id is shown in parentheses and the default value is shown in bold italics. </P>
-
-<H4>Options categories</h4>
+</pre>
+<h3>JDT Core options descriptions</h3>
+<p>The following tables describe the available JDT Core options.  The option id is shown in
+parentheses and the default value is shown in bold italics.</p>
+<h4>Options categories</h4>
 <ul>
 <li><b><a href="#compiler">Compiler options</a></b></li>
 <li><b><a href="#builder">Builder options</a></b></li>
 <li><b><a href="#javacore">JavaCore options</a></b></li>
 <li><b><a href="#formatter">Formatter options</a></b></li>
+
 <li><b><a href="#codeassist">CodeAssist options</a></b></li>
 </ul>
-
-<H4><a name="compiler">Compiler options</a></h4>
-
-<table BORDER="1" CELLSPACING="2" CELLPADDING="2" WIDTH="100%" >
+<h4><a name="compiler" id="compiler">Compiler options</a></h4>
+<table border="1" cellspacing="2" cellpadding="2" width="100%">
 <tr>
 <th>Description</th>
-<th width=140>Values</th>
+<th width="140">Values</th>
 </tr>
-
 <tr>
-<td colspan=2><b>Inline JSR Bytecode Instruction</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_INLINE_JSR_BYTECODE">COMPILER_CODEGEN_INLINE_JSR_BYTECODE</a></b>)</td>
+<td colspan="2"><b>Inline JSR Bytecode Instruction</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_INLINE_JSR_BYTECODE">COMPILER_CODEGEN_INLINE_JSR_BYTECODE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled in conjunction with a Java target platform lesser than or 
-equal to "1.4", the compiler will no longer generate JSR instructions, but rather inline corresponding
-subroutine code sequences (mostly corresponding to try finally blocks). The generated code will thus
-get bigger, but will load faster on virtual machines since the verification process is then much simpler. 
-This mode is adding support for the Java Specification Request 202 to pre-"1.5" Java 
-target platforms.<br>
-For a Java target platform greater than or equal to "1.5", the inlining of the JSR 
-bytecode instruction is mandatory and this option is ignored.</td>
+<td rowspan="2">When enabled in conjunction with a Java target platform lesser than or equal to
+"1.4", the compiler will no longer generate JSR instructions, but rather inline corresponding
+subroutine code sequences (mostly corresponding to try finally blocks). The generated code will
+thus get bigger, but will load faster on virtual machines since the verification process is then
+much simpler. This mode is adding support for the Java Specification Request 202 to pre-"1.5" Java
+target platforms.<br />
+For a Java target platform greater than or equal to "1.5", the inlining of the JSR bytecode
+instruction is mandatory and this option is ignored.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Setting Target Java Platform</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_TARGET_PLATFORM">COMPILER_CODEGEN_TARGET_PLATFORM</a></b>)</td>
+<td colspan="2"><b>Setting Target Java Platform</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_TARGET_PLATFORM">COMPILER_CODEGEN_TARGET_PLATFORM</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=8>For binary compatibility reason, .class files are tagged with VM versions
-that are defined for each level of the reference specification. The target Java platform
-specifies the minimum runtime level required to execute the generated class files.<br>
-The compliance, source and target levels must satisfy a set of constraints summarized 
-in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
-</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_1">VERSION_1_1</a></b></td>
+<td rowspan="8">For binary compatibility reason, .class files are tagged with VM versions that are
+defined for each level of the reference specification. The target Java platform specifies the
+minimum runtime level required to execute the generated class files.<br />
+The compliance, source and target levels must satisfy a set of constraints summarized in a <a href=
+"#compatibility"><b>compatibility table</b></a> below.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_1">VERSION_1_1</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_2">VERSION_1_2</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_2">VERSION_1_2</a></i></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">VERSION_1_3</a></b></td>
+
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">VERSION_1_3</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">VERSION_1_4</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">VERSION_1_4</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">VERSION_1_5</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">VERSION_1_5</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">VERSION_1_6</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">VERSION_1_6</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">VERSION_1_7</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">VERSION_1_7</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_CLDC_1_1">VERSION_CLDC_1_1</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_CLDC_1_1">VERSION_CLDC_1_1</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Preserving Unused Local Variables</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_UNUSED_LOCAL">COMPILER_CODEGEN_UNUSED_LOCAL</a></b>)</td>
+<td colspan="2"><b>Preserving Unused Local Variables</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_CODEGEN_UNUSED_LOCAL">COMPILER_CODEGEN_UNUSED_LOCAL</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Unless requested to preserve unused local variables (i.e. never read), the compiler will optimize them out, potentially altering debugging.</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PRESERVE">PRESERVE</a></i></b></td>
+<td rowspan="2">Unless requested to preserve unused local variables (i.e. never read), the compiler
+will optimize them out, potentially altering debugging.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#PRESERVE">PRESERVE</a></i></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#OPTIMIZE_OUT">OPTIMIZE_OUT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#OPTIMIZE_OUT">OPTIMIZE_OUT</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Setting Compliance Level</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_COMPLIANCE">COMPILER_COMPLIANCE</a></b>)</td>
+<td colspan="2"><b>Setting Compliance Level</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_COMPLIANCE">COMPILER_COMPLIANCE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=5>Select the compliance level for the compiler, which will then behave 
-according to the said level of the reference specification.<br>
-The compliance, source and target levels must satisfy a set of constraints summarized 
-in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
-</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">VERSION_1_3</a></b></td>
+<td rowspan="5">Select the compliance level for the compiler, which will then behave according to
+the said level of the reference specification.<br />
+The compliance, source and target levels must satisfy a set of constraints summarized in a <a href=
+"#compatibility"><b>compatibility table</b></a> below.</td>
+
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">VERSION_1_3</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">VERSION_1_4</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">VERSION_1_4</a></i></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">VERSION_1_5</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">VERSION_1_5</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">VERSION_1_6</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">VERSION_1_6</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">VERSION_1_7</a></b></td>
-</tr>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">VERSION_1_7</a></b></td>
 
+</tr>
 <tr>
-<td colspan=2><b>Javadoc Comment Support</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_DOC_COMMENT_SUPPORT">COMPILER_DOC_COMMENT_SUPPORT</a></b>)</td>
+<td colspan="2"><b>Javadoc Comment Support</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_DOC_COMMENT_SUPPORT">COMPILER_DOC_COMMENT_SUPPORT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When this support is disabled, the compiler will ignore all javadoc problems options settings
-and will not report any javadoc problem. It will also not find any reference in javadoc comment and
-DOM AST Javadoc node will be only a flat text instead of having structured tag elements.</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
+<td rowspan="2">When this support is disabled, the compiler will ignore all javadoc problems
+options settings and will not report any javadoc problem. It will also not find any reference in
+javadoc comment and DOM AST Javadoc node will be only a flat text instead of having structured tag
+elements.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
-</tr>
 
+</tr>
 <tr>
-<td colspan=2><b>Generating Line Number Debug Attribute</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_LINE_NUMBER_ATTR">COMPILER_LINE_NUMBER_ATTR</a></b>)</td>
+<td colspan="2"><b>Generating Line Number Debug Attribute</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_LINE_NUMBER_ATTR">COMPILER_LINE_NUMBER_ATTR</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When generated, this attribute will enable source code highlighting in the debugger (.class file is then bigger).</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#GENERATE">GENERATE</a></i></b></td>
+<td rowspan="2">When generated, this attribute will enable source code highlighting in the debugger
+(.class file is then bigger).</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#GENERATE">GENERATE</a></i></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_GENERATE">DO_NOT_GENERATE</a></b></td>
-</tr>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_GENERATE">DO_NOT_GENERATE</a></b></td>
 
+</tr>
 <tr>
-<td colspan=2><b>Generating Local Variable Debug Attribute</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_LOCAL_VARIABLE_ATTR">COMPILER_LOCAL_VARIABLE_ATTR</a></b>)</td>
+<td colspan="2"><b>Generating Local Variable Debug Attribute</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_LOCAL_VARIABLE_ATTR">COMPILER_LOCAL_VARIABLE_ATTR</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When generated, this attribute will enable local variable names to be displayed in the debugger, only in places where variables are definitely assigned (.class file is then bigger).</td>
-<td><i><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#GENERATE">GENERATE</a></b></i></td>
+<td rowspan="2">When generated, this attribute will enable local variable names to be displayed in
+the debugger, only in places where variables are definitely assigned (.class file is then
+bigger).</td>
+<td><i><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#GENERATE">GENERATE</a></b></i></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_GENERATE">DO_NOT_GENERATE</a></b></td>
-</tr>								  
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_GENERATE">DO_NOT_GENERATE</a></b></td>
 
+</tr>
 <tr>
-<td colspan=2><b>Reporting Use of Annotation Type as Super Interface</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_ANNOTATION_SUPER_INTERFACE">COMPILER_PB_ANNOTATION_SUPER_INTERFACE</a></b>)</td>
+<td colspan="2"><b>Reporting Use of Annotation Type as Super Interface</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_ANNOTATION_SUPER_INTERFACE">COMPILER_PB_ANNOTATION_SUPER_INTERFACE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever an annotation type is used as a super-interface. Though legal, this is discouraged.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever an annotation
+type is used as a super-interface. Though legal, this is discouraged.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Usage of 'assert' Identifier</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_ASSERT_IDENTIFIER">COMPILER_PB_ASSERT_IDENTIFIER</a></b>)</td>
+<td colspan="2"><b>Reporting Usage of 'assert' Identifier</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_ASSERT_IDENTIFIER">COMPILER_PB_ASSERT_IDENTIFIER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever 'assert' is used as an identifier (reserved keyword in 1.4)</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever 'assert' is
+used as an identifier (reserved keyword in 1.4)</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Boxing/Unboxing Conversion</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_AUTOBOXING">COMPILER_PB_AUTOBOXING</a></b>)</td>
+<td colspan="2"><b>Reporting Boxing/Unboxing Conversion</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_AUTOBOXING">COMPILER_PB_AUTOBOXING</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a boxing or an unboxing conversion is performed.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a boxing or an
+unboxing conversion is performed.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Usage of char[] Expressions in String Concatenations
-  </b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_CHAR_ARRAY_IN_STRING_CONCATENATION">COMPILER_PB_CHAR_ARRAY_IN_STRING_CONCATENATION</a></b>)</td>
+<td colspan="2"><b>Reporting Usage of char[] Expressions in String Concatenations</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_CHAR_ARRAY_IN_STRING_CONCATENATION">COMPILER_PB_CHAR_ARRAY_IN_STRING_CONCATENATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning
-  whenever a char[] expression is used in String concatenations (e.g.
-  "hello" + new char[]{'w','o','r','l','d'}).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a char[]
+expression is used in String concatenations (e.g. "hello" + new char[]{'w','o','r','l','d'}).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Deprecation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DEPRECATION">COMPILER_PB_DEPRECATION</a></b>)</td>
+<td colspan="2"><b>Reporting Deprecation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DEPRECATION">COMPILER_PB_DEPRECATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will signal use of deprecated API either as an error or a warning.</td>
+<td rowspan="3">When enabled, the compiler will signal use of deprecated API either as an error or
+a warning.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Deprecation Inside Deprecated Code</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE">COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE</a></b>)</td>
+<td colspan="2"><b>Reporting Deprecation Inside Deprecated Code</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE">COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will signal use of deprecated API 
-              inside deprecated code either as an error or a warning.</td>
+<td rowspan="2">When enabled, the compiler will signal use of deprecated API inside deprecated code
+either as an error or a warning.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Deprecation When Overriding Deprecated Method</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DEPRECATION_WHEN_OVERRIDING_DEPRECATED_METHOD">COMPILER_PB_DEPRECATION_WHEN_OVERRIDING_DEPRECATED_METHOD</a></b>)</td>
+<td colspan="2"><b>Reporting Deprecation When Overriding Deprecated Method</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DEPRECATION_WHEN_OVERRIDING_DEPRECATED_METHOD">COMPILER_PB_DEPRECATION_WHEN_OVERRIDING_DEPRECATED_METHOD</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will signal the declaration of a method overriding a deprecated one.</td>
+<td rowspan="2">When enabled, the compiler will signal the declaration of a method overriding a
+deprecated one.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Discouraged Reference to Type with Restricted Access</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DISCOURAGED_REFERENCE">COMPILER_PB_DISCOURAGED_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Reporting Discouraged Reference to Type with Restricted Access</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_DISCOURAGED_REFERENCE">COMPILER_PB_DISCOURAGED_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when referring to a type with discouraged access, as defined according to the access rule specifications.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when referring to a
+type with discouraged access, as defined according to the access rule specifications.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Empty Statements and Unnecessary Semicolons</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_EMPTY_STATEMENT">COMPILER_PB_EMPTY_STATEMENT</a></b>)</td>
+<td colspan="2"><b>Reporting Empty Statements and Unnecessary Semicolons</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_EMPTY_STATEMENT">COMPILER_PB_EMPTY_STATEMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning if an empty statement or a
-  unnecessary semicolon is encountered.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if an empty statement
+or a unnecessary semicolon is encountered.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Usage of 'enum' Identifier</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_ENUM_IDENTIFIER">COMPILER_PB_ENUM_IDENTIFIER</a></b>)</td>
+<td colspan="2"><b>Reporting Usage of 'enum' Identifier</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_ENUM_IDENTIFIER">COMPILER_PB_ENUM_IDENTIFIER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever 'enum' is used as an identifier (reserved keyword in 1.5).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever 'enum' is used
+as an identifier (reserved keyword in 1.5).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Switch Fall-Through Case</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FALLTHROUGH_CASE">COMPILER_PB_FALLTHROUGH_CASE</a></b>)</td>
+<td colspan="2"><b>Reporting Switch Fall-Through Case</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FALLTHROUGH_CASE">COMPILER_PB_FALLTHROUGH_CASE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when 
-  a case may be entered by falling through a preceding, non empty case.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when a case may be
+entered by falling through a preceding, non empty case.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Treating Optional Errors as Fatal</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FATAL_OPTIONAL_ERROR">COMPILER_PB_FATAL_OPTIONAL_ERROR</a></b>)</td>
+<td colspan="2"><b>Treating Optional Errors as Fatal</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FATAL_OPTIONAL_ERROR">COMPILER_PB_FATAL_OPTIONAL_ERROR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, optional errors (i.e. optional problems which 
-  severity has been set to "error") will be treated as standard compiler 
-  errors, that is as fatal errors. When detecting a fatal error in source code,
-  the compiler generates problem methods/types into the corresponding class 
-  files, in effect preventing the offending code from running until all issues 
-  get resolved.<br>
-  When disabled, optional errors are only considered as warnings for code 
-  generation purposes, but they still carry an error indicator to make them more
-  severe than regular warnings.</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
+<td rowspan="2">When enabled, optional errors (i.e. optional problems which severity has been set
+to "error") will be treated as standard compiler errors, that is as fatal errors. When detecting a
+fatal error in source code, the compiler generates problem methods/types into the corresponding
+class files, in effect preventing the offending code from running until all issues get
+resolved.<br />
+When disabled, optional errors are only considered as warnings for code generation purposes, but
+they still carry an error indicator to make them more severe than regular warnings.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Field Declaration Hiding another Variable</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FIELD_HIDING">COMPILER_PB_FIELD_HIDING</a></b>)</td>
+<td colspan="2"><b>Reporting Field Declaration Hiding another Variable</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FIELD_HIDING">COMPILER_PB_FIELD_HIDING</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a field
-  declaration is hiding some field or local variable (either locally, inherited or defined in enclosing type).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a field
+declaration is hiding some field or local variable (either locally, inherited or defined in
+enclosing type).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Final Bound for Type Parameter</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FINAL_PARAMETER_BOUND">COMPILER_PB_FINAL_PARAMETER_BOUND</a></b>)</td>
+<td colspan="2"><b>Reporting Final Bound for Type Parameter</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FINAL_PARAMETER_BOUND">COMPILER_PB_FINAL_PARAMETER_BOUND</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a generic type parameter is associated with a 
-bound corresponding to a final type; since final types cannot be further extended, the parameter is pretty useless.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a generic type
+parameter is associated with a bound corresponding to a final type; since final types cannot be
+further extended, the parameter is pretty useless.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Finally Blocks Not Completing Normally</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FINALLY_BLOCK_NOT_COMPLETING">COMPILER_PB_FINALLY_BLOCK_NOT_COMPLETING</a></b>)</td>
+<td colspan="2"><b>Reporting Finally Blocks Not Completing Normally</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FINALLY_BLOCK_NOT_COMPLETING">COMPILER_PB_FINALLY_BLOCK_NOT_COMPLETING</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when a finally block does not complete normally.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when a finally block
+does not complete normally.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Forbidden Reference to Type with Restricted Access</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FORBIDDEN_REFERENCE">COMPILER_PB_FORBIDDEN_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Reporting Forbidden Reference to Type with Restricted Access</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_FORBIDDEN_REFERENCE">COMPILER_PB_FORBIDDEN_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when referring to a type that is non accessible, as defined according to the access rule specifications.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when referring to a
+type that is non accessible, as defined according to the access rule specifications.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
@@ -466,13 +541,16 @@ bound corresponding to a final type; since final types cannot be further extende
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Missing HashCode Method</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_HASHCODE_METHOD">COMPILER_PB_MISSING_HASHCODE_METHOD</a></b>)</td>
+<td colspan="2"><b>Reporting Missing HashCode Method</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_HASHCODE_METHOD">COMPILER_PB_MISSING_HASHCODE_METHOD</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning if a type overrides Object.equals(Object) but does not override hashCode().</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if a type overrides
+Object.equals(Object) but does not override hashCode().</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
@@ -480,235 +558,356 @@ bound corresponding to a final type; since final types cannot be further extende
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Hidden Catch Block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_HIDDEN_CATCH_BLOCK">COMPILER_PB_HIDDEN_CATCH_BLOCK</a></b>)</td>
+<td colspan="2"><b>Reporting Hidden Catch Block</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_HIDDEN_CATCH_BLOCK">COMPILER_PB_HIDDEN_CATCH_BLOCK</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>Local to a try statement, some catch blocks may hide others , e.g.
+<td rowspan="3">Local to a try statement, some catch blocks may hide others , e.g.
 <pre>
    try {
       throw new java.io.CharConversionException();
    } catch (java.io.CharConversionException e) {
    } catch (java.io.IOException e) {}.
 </pre>
-When enabling this option, the compiler will issue an error or a warning for hidden catch blocks corresponding to checked exceptions.</td>
+When enabling this option, the compiler will issue an error or a warning for hidden catch blocks
+corresponding to checked exceptions.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
+
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
+<tr>
+<td colspan="2"><a name="INCLUDE_ASSERTS_IN_NULL_ANALYSIS" id=
+"INCLUDE_ASSERTS_IN_NULL_ANALYSIS"></a><b>Reporting Null related problems as a consequnce of assert
+statements</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS">COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS</a></b>)</td>
+</tr>
+<tr valign="top">
+<td rowspan="2">When enabled, the compiler will raise null related errors or warnings for a
+variable that got marked as potentially or definitely <code>null</code> or not <code>null</code>
+
+inside an assert statement, and whose null state has not been modified by any other statement
+following the assert.<br />
+This option has an effect only when the compiler compliance is 1.4 or greater.<br />
+Note that this option is only relevant in the context of the warnings raised by the options
+<a href="#REDUNDANT_NULL_CHECK">COMPILER_PB_REDUNDANT_NULL_CHECK</a>, <a href=
+"#NULL_REFERENCE">COMPILER_PB_NULL_REFERENCE</a>, and <a href=
+"#POTENTIAL_NULL_REFERENCE">COMPILER_PB_POTENTIAL_NULL_REFERENCE</a> as a consequence of an assert
+statement.</td>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
+</tr>
+<tr valign="top">
 
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Reporting Interface Method not Compatible with non-Inherited Methods</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INCOMPATIBLE_NON_INHERITED_INTERFACE_METHOD">COMPILER_PB_INCOMPATIBLE_NON_INHERITED_INTERFACE_METHOD</a></b>)</td>
+<td colspan="2"><b>Reporting Interface Method not Compatible with non-Inherited Methods</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INCOMPATIBLE_NON_INHERITED_INTERFACE_METHOD">COMPILER_PB_INCOMPATIBLE_NON_INHERITED_INTERFACE_METHOD</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning
-  whenever an interface defines a method incompatible with a non-inherited
-  Object one.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever an interface
+defines a method incompatible with a non-inherited Object one.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
+
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Incomplete Enum Switch</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INCOMPLETE_ENUM_SWITCH">COMPILER_PB_INCOMPLETE_ENUM_SWITCH</a></b>)</td>
+<td colspan="2"><b>Reporting Incomplete Enum Switch</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INCOMPLETE_ENUM_SWITCH">COMPILER_PB_INCOMPLETE_ENUM_SWITCH</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning 
-  whenever an enum constant has no corresponding case label in an enum switch
-  statement.</td>
+
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever an enum
+constant has no corresponding case label in an enum switch statement.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Indirect Reference to a Static Member</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INDIRECT_STATIC_ACCESS">COMPILER_PB_INDIRECT_STATIC_ACCESS</a></b>)</td>
+<td colspan="2"><b>Reporting Indirect Reference to a Static Member</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INDIRECT_STATIC_ACCESS">COMPILER_PB_INDIRECT_STATIC_ACCESS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a static field
-  or method is accessed in an indirect way. A reference to a static member should
-  preferably be qualified with its declaring type name.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a static field
+or method is accessed in an indirect way. A reference to a static member should preferably be
+qualified with its declaring type name.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Invalid Javadoc Comment</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC">COMPILER_PB_INVALID_JAVADOC</a></b>)</td>
+<td colspan="2"><b>Reporting Invalid Javadoc Comment</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC">COMPILER_PB_INVALID_JAVADOC</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>This is the generic control for the severity of Javadoc problems.
-  When enabled, the compiler will issue an error or a warning for a problem in Javadoc.</td>
+<td rowspan="3">This is the generic control for the severity of Javadoc problems. When enabled, the
+compiler will issue an error or a warning for a problem in Javadoc.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Invalid Javadoc Tags</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS">COMPILER_PB_INVALID_JAVADOC_TAGS</a></b>)</td>
+<td colspan="2"><b>Reporting Invalid Javadoc Tags</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS">COMPILER_PB_INVALID_JAVADOC_TAGS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will signal unbound or unexpected reference tags in Javadoc.
-  A 'throws' tag referencing an undeclared exception would be considered as unexpected.
-  <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc;<br>
-  see also <a href="#INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a>.</td>
+<td rowspan="2">When enabled, the compiler will signal unbound or unexpected reference tags in
+Javadoc. A 'throws' tag referencing an undeclared exception would be considered as
+unexpected.<br />
+Note that this diagnosis can be enabled based on the visibility of the construct associated with
+the Javadoc;<br />
+see also <a href=
+"#INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a>.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
 </tr>
 
 <tr>
-<td colspan=2><b>Reporting Javadoc Tags with Deprecated References</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS__DEPRECATED_REF">COMPILER_PB_INVALID_JAVADOC_TAGS__DEPRECATED_REF</a></b>)</td>
+<td colspan="2"><b>Reporting Javadoc Tags with Deprecated References</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS__DEPRECATED_REF">COMPILER_PB_INVALID_JAVADOC_TAGS__DEPRECATED_REF</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Specify whether the compiler will report deprecated references used in Javadoc tags.
-<br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc;<br>
-  see also <a href="#INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a>.</td>
+<td rowspan="2">Specify whether the compiler will report deprecated references used in Javadoc
+tags.<br />
+Note that this diagnosis can be enabled based on the visibility of the construct associated with
+the Javadoc;<br />
+see also <a href=
+"#INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a>.</td>
+
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Javadoc Tags with Not Visible References</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS__NOT_VISIBLE_REF">COMPILER_PB_INVALID_JAVADOC_TAGS__NOT_VISIBLE_REF</a></b>)</td>
+<td colspan="2"><b>Reporting Javadoc Tags with Not Visible References</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS__NOT_VISIBLE_REF">COMPILER_PB_INVALID_JAVADOC_TAGS__NOT_VISIBLE_REF</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Specify whether the compiler will report non-visible references used in Javadoc tags.
-<br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc;<br>
-  see also <a href="#INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a>.</td>
+<td rowspan="2">Specify whether the compiler will report non-visible references used in Javadoc
+tags.<br />
+
+Note that this diagnosis can be enabled based on the visibility of the construct associated with
+the Javadoc;<br />
+see also <a href=
+"#INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a>.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><a name="INVALID_JAVADOC_TAGS_VISIBILITY"></a><b>Visibility Level For Invalid Javadoc Tags</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a></b>)</td>
+<td colspan="2"><a name="INVALID_JAVADOC_TAGS_VISIBILITY" id=
+"INVALID_JAVADOC_TAGS_VISIBILITY"></a><b>Visibility Level For Invalid Javadoc Tags</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=4>Set the minimum visibility level for Javadoc tag problems. Below this level problems will be ignored.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PUBLIC"><i>PUBLIC</i></a></b></td>
+<td rowspan="4">Set the minimum visibility level for Javadoc tag problems. Below this level
+problems will be ignored.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#PUBLIC"><i>PUBLIC</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PROTECTED">PROTECTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#PROTECTED">PROTECTED</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DEFAULT">DEFAULT</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PRIVATE">PRIVATE</a></b></td>
-</tr>
 
+</tr>
 <tr>
-<td colspan=2><b>Reporting Local Variable Declaration Hiding another Variable</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_LOCAL_VARIABLE_HIDING">COMPILER_PB_LOCAL_VARIABLE_HIDING</a></b>)</td>
+<td colspan="2"><b>Reporting Local Variable Declaration Hiding another Variable</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_LOCAL_VARIABLE_HIDING">COMPILER_PB_LOCAL_VARIABLE_HIDING</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a local variable
-  declaration is hiding some field or local variable (either locally, inherited or defined in enclosing type).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a local
+variable declaration is hiding some field or local variable (either locally, inherited or defined
+in enclosing type).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+</tr>
+<tr>
+<td colspan="2"><b>Maximum number of problems reported per compilation unit</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MAX_PER_UNIT">COMPILER_PB_MAX_PER_UNIT</a></b>)</td>
 </tr>
+<tr valign="top">
+<td rowspan="1">Specify the maximum number of problems reported on each compilation unit (if the
+maximum is zero then all problems are reported).</td>
+<td>A positive or null integer.<br />
 
+<b><i>Default value is 100.</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Maximum number of problems reported per compilation unit</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MAX_PER_UNIT">COMPILER_PB_MAX_PER_UNIT</a></b>)</td>
+<td colspan="2"><b>Reporting a method that qualifies as static, but not declared static</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_STATIC_ON_METHOD">COMPILER_PB_MISSING_STATIC_ON_METHOD</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>Specify the maximum number of problems reported on each compilation unit (if the maximum is zero then all problems are reported).</td>
-<td>A positive or null integer. <br><b><i>Default value is 100.</i></b></td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if a method has not
+been declared as <code>static</code>, even though it qualifies as one.</td>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
+</tr>
+<tr valign="top">
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
+</tr>
+<tr valign="top">
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+</tr>
+<tr>
+<td colspan="2"><b>Reporting a method that may qualify as static, but not declared static</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD">COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD</a></b>)</td>
 </tr>
 
+<tr valign="top">
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if a method has not
+been declared as <code>static</code>, even though it may qualify as one, when another method
+doesn't override it.</td>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+</tr>
+<tr valign="top">
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
+</tr>
+<tr valign="top">
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Reporting Method With Constructor Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME">COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME</a></b>)</td>
+
+<td colspan="2"><b>Reporting Method With Constructor Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME">COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>Naming a method with a constructor name is generally considered poor style programming. When enabling this option, the compiler will signal such scenarios either as an error or a warning.</td>
+<td rowspan="3">Naming a method with a constructor name is generally considered poor style
+programming. When enabling this option, the compiler will signal such scenarios either as an error
+or a warning.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
+
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Missing @Deprecated Annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_DEPRECATED_ANNOTATION">COMPILER_PB_MISSING_DEPRECATED_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Reporting Missing @Deprecated Annotation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_DEPRECATED_ANNOTATION">COMPILER_PB_MISSING_DEPRECATED_ANNOTATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever encountering a declaration carrying a @deprecated doc tag but having no corresponding @Deprecated annotation.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever encountering a
+declaration carrying a @deprecated doc tag but having no corresponding @Deprecated annotation.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Missing Javadoc Comments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_COMMENTS">COMPILER_PB_MISSING_JAVADOC_COMMENTS</a></b>)</td>
+<td colspan="2"><b>Reporting Missing Javadoc Comments</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_COMMENTS">COMPILER_PB_MISSING_JAVADOC_COMMENTS</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>This is the generic control for the severity of missing Javadoc comment problems.
-  When enabled, the compiler will issue an error or a warning when Javadoc comments are missing.
-  <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the expected Javadoc.</td>
+<td rowspan="3">This is the generic control for the severity of missing Javadoc comment problems.
+When enabled, the compiler will issue an error or a warning when Javadoc comments are
+missing.<br />
+Note that this diagnosis can be enabled based on the visibility of the construct associated with
+the expected Javadoc.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Missing Javadoc Comments on Overriding Methods</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING">COMPILER_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING</a></b>)</td>
+
+<td colspan="2"><b>Reporting Missing Javadoc Comments on Overriding Methods</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING">COMPILER_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Specify whether the compiler will verify overriding methods in order to report missing Javadoc comment problems.</td>
+<td rowspan="2">Specify whether the compiler will verify overriding methods in order to report
+missing Javadoc comment problems.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
 </tr>
 
 <tr>
-<td colspan=2><b>Visibility Level For Missing Javadoc Comments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_COMMENTS_VISIBILITY">COMPILER_PB_MISSING_JAVADOC_COMMENTS_VISIBILITY</a></b>)</td>
+<td colspan="2"><b>Visibility Level For Missing Javadoc Comments</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_COMMENTS_VISIBILITY">COMPILER_PB_MISSING_JAVADOC_COMMENTS_VISIBILITY</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Set the minimum visibility level for missing Javadoc problems. Below this level problems will be ignored.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PUBLIC"><i>PUBLIC</i></a></b></td>
+<td rowspan="4">Set the minimum visibility level for missing Javadoc problems. Below this level
+problems will be ignored.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#PUBLIC"><i>PUBLIC</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PROTECTED">PROTECTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#PROTECTED">PROTECTED</a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DEFAULT">DEFAULT</a></b></td>
@@ -716,1134 +915,1423 @@ When enabling this option, the compiler will issue an error or a warning for hid
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PRIVATE">PRIVATE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting missing tag description</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION">COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION</a></b>)</td>
+<td colspan="2"><b>Reporting missing tag description</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION">COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will report a warning or an error for 
-  any Javadoc tag missing a required description.<br>
-  The severity of the problem is controlled with option 
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC">COMPILER_PB_INVALID_JAVADOC</a>.
-  It does <em>not</em> depend on option 
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS">COMPILER_PB_INVALID_JAVADOC_TAGS</a>.<br>
-  When this option is valued to 
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">COMPILER_PB_MISSING_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">JAVADOC_TAG_DESCRIPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">ALL_STANDARD_TAGS</a>,
-  a subset of the standard
-  <a href="http://java.sun.com/javase/6/docs/technotes/tools/windows/javadoc.html#javadoctags">Javadoc 
-  tags</a> that have a description, text or label are checked. While this set 
-  may grow in the future, note that user-defined tags are not and will not be 
-  checked.
-</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_RETURN_TAG">COMPILER_PB_MISSING_</a><br><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_RETURN_TAG">JAVADOC_TAG_DESCRIPTION_RETURN_TAG</a></i></b></td>
+<td rowspan="3">When enabled, the compiler will report a warning or an error for any Javadoc tag
+missing a required description.<br />
+The severity of the problem is controlled with option <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC">COMPILER_PB_INVALID_JAVADOC</a>.
+It does <em>not</em> depend on option <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_INVALID_JAVADOC_TAGS">COMPILER_PB_INVALID_JAVADOC_TAGS</a>.<br />
+
+When this option is valued to <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">
+COMPILER_PB_MISSING_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">
+
+JAVADOC_TAG_DESCRIPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">
+ALL_STANDARD_TAGS</a>, a subset of the standard <a href=
+"http://java.sun.com/javase/6/docs/technotes/tools/windows/javadoc.html#javadoctags">Javadoc
+tags</a> that have a description, text or label are checked. While this set may grow in the future,
+note that user-defined tags are not and will not be checked.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_RETURN_TAG">
+COMPILER_PB_MISSING_</a><br />
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_RETURN_TAG">
+JAVADOC_TAG_DESCRIPTION_RETURN_TAG</a></i></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">COMPILER_PB_MISSING_</a><br><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS</a></b></td>
+
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">
+COMPILER_PB_MISSING_</a><br />
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS">
+JAVADOC_TAG_DESCRIPTION_ALL_STANDARD_TAGS</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_NO_TAG">COMPILER_PB_MISSING_</a><br><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_NO_TAG">JAVADOC_TAG_DESCRIPTION_NO_TAG</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_NO_TAG">
+COMPILER_PB_MISSING_</a><br />
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION_NO_TAG">
+JAVADOC_TAG_DESCRIPTION_NO_TAG</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Missing Javadoc Tags</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAGS">COMPILER_PB_MISSING_JAVADOC_TAGS</a></b>)</td>
+<td colspan="2"><b>Reporting Missing Javadoc Tags</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAGS">COMPILER_PB_MISSING_JAVADOC_TAGS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>This is the generic control for the severity of Javadoc missing tag problems.
-  When enabled, the compiler will issue an error or a warning when tags are missing in Javadoc comments.
-  <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc.</td>
+<td rowspan="3">This is the generic control for the severity of Javadoc missing tag problems. When
+enabled, the compiler will issue an error or a warning when tags are missing in Javadoc
+comments.<br />
+Note that this diagnosis can be enabled based on the visibility of the construct associated with
+the Javadoc.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
 
 <tr>
-<td colspan=2><b>Reporting Missing Javadoc Tags on Overriding Methods</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING">COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING</a></b>)</td>
+<td colspan="2"><b>Reporting Missing Javadoc Tags on Overriding Methods</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING">COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Specify whether the compiler will verify overriding methods in order to report Javadoc missing tag problems.</td>
+<td rowspan="2">Specify whether the compiler will verify overriding methods in order to report
+Javadoc missing tag problems.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+
 </tr>
+<tr>
+<td colspan="2"><b>Reporting Missing Javadoc Tags for Method Type Parameters</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS">COMPILER_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS</a></b>)</td>
+</tr>
+<tr valign="top">
+<td rowspan="2">Specify whether a missing <code>@param</code> for a type parameter in a method
+declaration should be reported. When enabled, the compiler will issue a missing Javadoc tag error
+or warning for a type parameter without a corresponding <code>@param</code> tag.<br />
 
+This option only has an effect if the compiler compliance is 1.5 or greater.</td>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
+</tr>
+<tr valign="top">
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Visibility Level For Missing Javadoc Tags</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY</a></b>)</td>
+<td colspan="2"><b>Visibility Level For Missing Javadoc Tags</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY">COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=4>Set the minimum visibility level for Javadoc missing tag problems. Below this level problems will be ignored.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PUBLIC"><i>PUBLIC</i></a></b></td>
+<td rowspan="4">Set the minimum visibility level for Javadoc missing tag problems. Below this level
+problems will be ignored.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#PUBLIC"><i>PUBLIC</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PROTECTED">PROTECTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#PROTECTED">PROTECTED</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DEFAULT">DEFAULT</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#PRIVATE">PRIVATE</a></b></td>
-</tr> 
 
+</tr>
 <tr>
-<td colspan=2><b>Reporting Missing @Override Annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_OVERRIDE_ANNOTATION">COMPILER_PB_MISSING_OVERRIDE_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Reporting Missing @Override Annotation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_OVERRIDE_ANNOTATION">COMPILER_PB_MISSING_OVERRIDE_ANNOTATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever encountering a method declaration which overrides a superclass method but has no @Override annotation.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever encountering a
+method declaration which overrides a superclass method but has no @Override annotation.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Missing <code>@Override</code> Annotation For Interface Method Implementation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION">COMPILER_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION</a></b>)</td>
+<td colspan="2"><b>Reporting Missing <code>@Override</code> Annotation For Interface Method
+Implementation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION">COMPILER_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will issue an error or a warning whenever encountering a method declaration which overrides or implements a superinterface method but has no <code>@Override</code> annotation.
-<br>This option only has an effect if the compiler compliance is 1.6 or greater.
-<br>The severity of the problem is controlled with option <b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_OVERRIDE_ANNOTATION">COMPILER_PB_MISSING_OVERRIDE_ANNOTATION</a></b>.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+
+<td rowspan="2">When enabled, the compiler will issue an error or a warning whenever encountering a
+method declaration which overrides or implements a superinterface method but has no
+<code>@Override</code> annotation.<br />
+This option only has an effect if the compiler compliance is 1.6 or greater.<br />
+The severity of the problem is controlled with option <b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_OVERRIDE_ANNOTATION">COMPILER_PB_MISSING_OVERRIDE_ANNOTATION</a></b>.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>							  
-</tr>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 
+</tr>
 <tr>
-<td colspan=2><b>Reporting Missing Declaration of serialVersionUID Field on Serializable Class</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_SERIAL_VERSION">COMPILER_PB_MISSING_SERIAL_VERSION</a></b>)</td>
+<td colspan="2"><b>Reporting Missing Declaration of serialVersionUID Field on Serializable
+Class</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_MISSING_SERIAL_VERSION">COMPILER_PB_MISSING_SERIAL_VERSION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a serializable class is missing a local declaration of a serialVersionUID field. This field must be declared as static final and be of type long.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a serializable
+class is missing a local declaration of a serialVersionUID field. This field must be declared as
+static final and be of type long.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Assignment with No Effect</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_NO_EFFECT_ASSIGNMENT">COMPILER_PB_NO_EFFECT_ASSIGNMENT</a></b>)</td>
+<td colspan="2"><b>Reporting Assignment with No Effect</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_NO_EFFECT_ASSIGNMENT">COMPILER_PB_NO_EFFECT_ASSIGNMENT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning
-  whenever an assignment has no effect (e.g. 'x = x').</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever an assignment
+has no effect (e.g. 'x = x').</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Non-Externalized String Literal</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_NON_NLS_STRING_LITERAL">COMPILER_PB_NON_NLS_STRING_LITERAL</a></b>)</td>
+<td colspan="2"><b>Reporting Non-Externalized String Literal</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_NON_NLS_STRING_LITERAL">COMPILER_PB_NON_NLS_STRING_LITERAL</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning for non externalized String literal (i.e. non tagged with //$NON-NLS-<n>$).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning for non externalized
+String literal (i.e. non tagged with //$NON-NLS-<n>$).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Null Dereference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_NULL_REFERENCE">COMPILER_PB_NULL_REFERENCE</a></b>)</td>
+
+<td colspan="2"><a name="NULL_REFERENCE" id="NULL_REFERENCE"></a><b>Reporting Null Dereference</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_NULL_REFERENCE">COMPILER_PB_NULL_REFERENCE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning 
-  whenever a variable that is statically known to hold a null value is used to
-  access a field or method.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a variable
+that is statically known to hold a null value is used to access a field or method.<br />
+Errors or warnings raised due to this option arising as a consequence of asserts can be controlled
+by <a href="#INCLUDE_ASSERTS_IN_NULL_ANALYSIS">COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS</a>
+(java 1.4 and greater)</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Overriding Methods that do not call their super method invocation.</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_OVERRIDING_METHOD_WITHOUT_SUPER_INVOCATION">COMPILER_PB_OVERRIDING_METHOD_WITHOUT_SUPER_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Reporting Overriding Methods that do not call their super method invocation.</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_OVERRIDING_METHOD_WITHOUT_SUPER_INVOCATION">COMPILER_PB_OVERRIDING_METHOD_WITHOUT_SUPER_INVOCATION</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning if a 
-  method is overriding another method without calling the super invocation.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if a method is
+overriding another method without calling the super invocation.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Potential Null Dereference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_POTENTIAL_NULL_REFERENCE">COMPILER_PB_POTENTIAL_NULL_REFERENCE</a></b>)</td>
+<td colspan="2"><a name="POTENTIAL_NULL_REFERENCE" id="POTENTIAL_NULL_REFERENCE"></a><b>Reporting
+Potential Null Dereference</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_POTENTIAL_NULL_REFERENCE">COMPILER_PB_POTENTIAL_NULL_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning 
-  whenever a variable that has formerly been tested against null but is not (no 
-  more) statically known to hold a non-null value is used to access a field or 
-  method.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a variable
+that has formerly been tested against null but is not (no more) statically known to hold a non-null
+value is used to access a field or method.<br />
+Errors or warnings raised due to this option arising as a consequence of asserts can be controlled
+by <a href="#INCLUDE_ASSERTS_IN_NULL_ANALYSIS">COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS</a>
+(java 1.4 and greater)</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
-</tr>
 
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Reporting Redundant Null Check</b> (<b><a href=
-  "../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_REDUNDANT_NULL_CHECK">COMPILER_PB_REDUNDANT_NULL_CHECK</a></b>)</td>
+<td colspan="2"><a name="REDUNDANT_NULL_CHECK" id="REDUNDANT_NULL_CHECK"></a><b>Reporting Redundant
+Null Check</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_REDUNDANT_NULL_CHECK">COMPILER_PB_REDUNDANT_NULL_CHECK</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning 
-  whenever a variable that is statically known to hold a null or a non-null 
-  value is tested against null.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a variable
+that is statically known to hold a null or a non-null value is tested against null.<br />
+Errors or warnings raised due to this option arising as a consequence of asserts can be controlled
+by <a href="#INCLUDE_ASSERTS_IN_NULL_ANALYSIS">COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS</a>
+
+(java 1.4 and greater)</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Attempt to Override Package Visible Method</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD">COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD</a></b>)</td>
+<td colspan="2"><b>Reporting Attempt to Override Package Visible Method</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD">COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>A package visible method, which is any method that is not explicitly 
-  declared as public, protected or private, is not visible from other 
-  packages, and thus cannot be overridden from another package. 
-  Attempting to override a package visible method from another package 
-  introduces a new method that is unrelated to the original one. When 
-  enabling this option, the compiler will signal such situations as an 
-  error or a warning.</td>
+<td rowspan="3">A package visible method, which is any method that is not explicitly declared as
+public, protected or private, is not visible from other packages, and thus cannot be overridden
+from another package. Attempting to override a package visible method from another package
+introduces a new method that is unrelated to the original one. When enabling this option, the
+compiler will signal such situations as an error or a warning.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Parameter Assignment</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_PARAMETER_ASSIGNMENT">COMPILER_PB_PARAMETER_ASSIGNMENT</a></b>)</td>
+<td colspan="2"><b>Reporting Parameter Assignment</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_PARAMETER_ASSIGNMENT">COMPILER_PB_PARAMETER_ASSIGNMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning if a 
-  parameter is assigned to.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if a parameter is
+assigned to.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Possible Accidental Boolean Assignment</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT">COMPILER_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT</a></b>)</td>
+<td colspan="2"><b>Reporting Possible Accidental Boolean Assignment</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT">COMPILER_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning if a boolean assignment is acting as the condition
-  of a control statement  (where it probably was meant to be a boolean comparison).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if a boolean assignment
+is acting as the condition of a control statement (where it probably was meant to be a boolean
+comparison).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Raw Type Reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_RAW_TYPE_REFERENCE">COMPILER_PB_RAW_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Reporting Raw Type Reference</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_RAW_TYPE_REFERENCE">COMPILER_PB_RAW_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when 
-  detecting references to raw types. Raw types are discouraged, and are 
-  intended to help interfacing with legacy code. In the future, the language 
-  specification may reject raw references to generic types.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when detecting
+references to raw types. Raw types are discouraged, and are intended to help interfacing with
+legacy code. In the future, the language specification may reject raw references to generic
+types.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Redundant Superinterface</b> (<b><a href=
-  "../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_REDUNDANT_SUPERINTERFACE">COMPILER_PB_REDUNDANT_SUPERINTERFACE</a></b>)</td>
+<td colspan="2"><b>Reporting Redundant Superinterface</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_REDUNDANT_SUPERINTERFACE">COMPILER_PB_REDUNDANT_SUPERINTERFACE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning if a 
-  type explicitly implements an interface that is already implemented by any 
-  of its supertypes.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if a type explicitly
+implements an interface that is already implemented by any of its supertypes.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Special Parameter Hiding another Field</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SPECIAL_PARAMETER_HIDING_FIELD">COMPILER_PB_SPECIAL_PARAMETER_HIDING_FIELD</a></b>)</td>
+<td colspan="2"><b>Reporting Special Parameter Hiding another Field</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SPECIAL_PARAMETER_HIDING_FIELD">COMPILER_PB_SPECIAL_PARAMETER_HIDING_FIELD</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will signal cases where a constructor or setter method parameter declaration 
-  is hiding some field (either locally, inherited or defined in enclosing type).</td>
+<td rowspan="2">When enabled, the compiler will signal cases where a constructor or setter method
+parameter declaration is hiding some field (either locally, inherited or defined in enclosing
+type).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Non-Static Reference to a Static Member</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_STATIC_ACCESS_RECEIVER">COMPILER_PB_STATIC_ACCESS_RECEIVER</a></b>)</td>
+<td colspan="2"><b>Reporting Non-Static Reference to a Static Member</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_STATIC_ACCESS_RECEIVER">COMPILER_PB_STATIC_ACCESS_RECEIVER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning
-  whenever a static field or method is accessed with an expression receiver.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a static field
+or method is accessed with an expression receiver.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Further Determining the Effect of <code>@SuppressWarnings</code> if also COMPILER_PB_SUPPRESS_WARNINGS is enabled.</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS">COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS</a></b>)</td>
+<td colspan="2"><b>Further Determining the Effect of <code>@SuppressWarnings</code> if also
+COMPILER_PB_SUPPRESS_WARNINGS is enabled.</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS">COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the <code>@SuppressWarnings</code> annotation can additionally be used to suppress optional compiler diagnostics that have been configured as ERROR. 
-<br>When disabled, all <code>@SuppressWarnings</code> annotations only affects warnings. 
-</td>
+<td rowspan="2">When enabled, the <code>@SuppressWarnings</code> annotation can additionally be
+used to suppress optional compiler diagnostics that have been configured as ERROR.<br />
+When disabled, all <code>@SuppressWarnings</code> annotations only affects warnings.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
-</tr>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
 
+</tr>
 <tr>
-<td colspan=2><b>Determining Effect of @SuppressWarnings</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SUPPRESS_WARNINGS">COMPILER_PB_SUPPRESS_WARNINGS</a></b>)</td>
+<td colspan="2"><b>Determining Effect of @SuppressWarnings</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SUPPRESS_WARNINGS">COMPILER_PB_SUPPRESS_WARNINGS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the @SuppressWarnings annotation can be used to suppress some compiler warnings. 
-<br>When disabled, all @SupressWarnings annotations are ignored; i.e., warnings are reported
-  even when they occur in the scope of an entity that carries an 
-  @SuppressWarnings annotation.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+<td rowspan="2">When enabled, the @SuppressWarnings annotation can be used to suppress some
+compiler warnings.<br />
+When disabled, all @SupressWarnings annotations are ignored; i.e., warnings are reported even when
+they occur in the scope of an entity that carries an @SuppressWarnings annotation.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
+
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Synthetic Access Emulation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SYNTHETIC_ACCESS_EMULATION">COMPILER_PB_SYNTHETIC_ACCESS_EMULATION</a></b>)</td>
+<td colspan="2"><b>Reporting Synthetic Access Emulation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_SYNTHETIC_ACCESS_EMULATION">COMPILER_PB_SYNTHETIC_ACCESS_EMULATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever it emulates access to a non-accessible member of an enclosing type. Such access can have performance implications.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever it emulates
+access to a non-accessible member of an enclosing type. Such access can have performance
+implications.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Type Parameter Declaration Hiding another Type</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_TYPE_PARAMETER_HIDING">COMPILER_PB_TYPE_PARAMETER_HIDING</a></b>)</td>
+<td colspan="2"><b>Reporting Type Parameter Declaration Hiding another Type</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_TYPE_PARAMETER_HIDING">COMPILER_PB_TYPE_PARAMETER_HIDING</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a type parameter declaration is hiding some type.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a type
+parameter declaration is hiding some type.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
 
 <tr>
-<td colspan=2><b>Reporting Unchecked Type Operation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNCHECKED_TYPE_OPERATION">COMPILER_PB_UNCHECKED_TYPE_OPERATION</a></b>)</td>
+<td colspan="2"><b>Reporting Unavoidable Generic Type Problems</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS">COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS</a></b>)</td>
+</tr>
+<tr valign="top">
+<td rowspan="2">When enabled, the compiler will issue an error or warning even when it detects a generic type problem
+that could not have been avoided by the programmer. As an example, a type may be forced to use raw types
+in its method signatures and return types because the methods it overrides from a super type are declared to
+use raw types in the first place.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+</tr>
+
+<tr valign="top">
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
+</tr>
+
+<tr>
+<td colspan="2"><b>Reporting Unchecked Type Operation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNCHECKED_TYPE_OPERATION">COMPILER_PB_UNCHECKED_TYPE_OPERATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever an operation involves generic types, and potentially
-invalidates type safety since involving raw types (e.g. invoking #foo(X<String>) with arguments (X)).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever an operation
+involves generic types, and potentially invalidates type safety since involving raw types (e.g.
+invoking #foo(X<String>) with arguments (X)).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
 
 <tr>
-<td colspan=2><b>Reporting Undocumented Empty Block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNDOCUMENTED_EMPTY_BLOCK">COMPILER_PB_UNDOCUMENTED_EMPTY_BLOCK</a></b>)</td>
+<td colspan="2"><b>Reporting Undocumented Empty Block</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNDOCUMENTED_EMPTY_BLOCK">COMPILER_PB_UNDOCUMENTED_EMPTY_BLOCK</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when an empty block is detected and it is not
-  documented with any comment.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when an empty block is
+detected and it is not documented with any comment.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unhandled Warning Token for @SuppressWarnings</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNHANDLED_WARNING_TOKEN">COMPILER_PB_UNHANDLED_WARNING_TOKEN</a></b>)</td>
+<td colspan="2"><b>Reporting Unhandled Warning Token for @SuppressWarnings</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNHANDLED_WARNING_TOKEN">COMPILER_PB_UNHANDLED_WARNING_TOKEN</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when encountering a token it cannot handle inside a @SuppressWarnings annotation.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when encountering a
+token it cannot handle inside a @SuppressWarnings annotation.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unnecessary Else</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNNECESSARY_ELSE">COMPILER_PB_UNNECESSARY_ELSE</a></b>)</td>
+<td colspan="2"><b>Reporting Unnecessary Else</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNNECESSARY_ELSE">COMPILER_PB_UNNECESSARY_ELSE</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when a statement is unnecessarily
-  nested within an else clause (in situation where then clause is not completing normally).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when a statement is
+unnecessarily nested within an else clause (in situation where then clause is not completing
+normally).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unnecessary Type Check</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNNECESSARY_TYPE_CHECK">COMPILER_PB_UNNECESSARY_TYPE_CHECK</a></b>)</td>
+<td colspan="2"><b>Reporting Unnecessary Type Check</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNNECESSARY_TYPE_CHECK">COMPILER_PB_UNNECESSARY_TYPE_CHECK</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when a cast or an instanceof operation 
-  is unnecessary.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when a cast or an
+instanceof operation is unnecessary.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unqualified Access to Field</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNQUALIFIED_FIELD_ACCESS">COMPILER_PB_UNQUALIFIED_FIELD_ACCESS</a></b>)</td>
+<td colspan="2"><b>Reporting Unqualified Access to Field</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNQUALIFIED_FIELD_ACCESS">COMPILER_PB_UNQUALIFIED_FIELD_ACCESS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when a field is access without any qualification.
-  In order to improve code readability, it should be qualified, e.g. 'x' should rather be written 'this.x'.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when a field is access
+without any qualification. In order to improve code readability, it should be qualified, e.g. 'x'
+should rather be written 'this.x'.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
-</tr>
-
-<tr>
-<td colspan=2><b>Reporting Unused Declared Thrown Exception</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION</a></b>)</td>
-</tr>
-<tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when a 
-  method or a constructor is declaring a checked exception as thrown,
-  but its body actually raises neither that exception, nor any other 
-  exception extending it.<br>
-  This diagnostic is further tuned by options
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  EXEMPT_EXCEPTION_AND_THROWABLE</a></u>,
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  INCLUDE_DOC_COMMENT_REFERENCE</a></u>,
-  and 
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  WHEN_OVERRIDING</a></u>.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+</tr>
+<tr>
+<td colspan="2"><b>Reporting Unused Declared Thrown Exception</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION</a></b>)</td>
+
+</tr>
+<tr valign="top">
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when a method or a
+constructor is declaring a checked exception as thrown, but its body actually raises neither that
+exception, nor any other exception extending it.<br />
+This diagnostic is further tuned by options <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+EXEMPT_EXCEPTION_AND_THROWABLE</a>, <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+INCLUDE_DOC_COMMENT_REFERENCE</a>, and <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+WHEN_OVERRIDING</a>.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
-</tr>
-
-<tr>
-<td colspan=2><b>Reporting Unused Declared Thrown Exception Exempts Exception And Throwable</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE</a></b>)</td>
-</tr>
-<tr valign="top">
-<td rowspan=2>When enabled, the compiler will issue an error or a warning when a 
-  method or a constructor is declaring a checked exception else than
-  <code>java.lang.Throwable</code> or <code>java.lang.Exception</code> as thrown,
-  but its body actually raises neither that exception, nor any other 
-  exception extending it. When disabled, the compiler will issue an 
-  error or a warning when a method or a constructor is declaring a 
-  checked exception (including <code>java.lang.Throwable</code> and 
-  <code>java.lang.Exception</code>) as thrown, but its body actually raises 
-  neither that exception, nor any other exception extending it.<br> 
-  The severity of the unused declared thrown exception problem is 
-  controlled with option 
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  UNUSED_DECLARED_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  THROWN_EXCEPTION</a></u>.<br>
-  This diagnostic is further tuned by options
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  INCLUDE_DOC_COMMENT_REFERENCE</a></u>
-  and 
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  WHEN_OVERRIDING</a></u>.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+</tr>
+<tr>
+<td colspan="2"><b>Reporting Unused Declared Thrown Exception Exempts Exception And Throwable</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE</a></b>)</td>
+</tr>
+
+<tr valign="top">
+<td rowspan="2">When enabled, the compiler will issue an error or a warning when a method or a
+constructor is declaring a checked exception else than <code>java.lang.Throwable</code> or
+<code>java.lang.Exception</code> as thrown, but its body actually raises neither that exception,
+nor any other exception extending it. When disabled, the compiler will issue an error or a warning
+when a method or a constructor is declaring a checked exception (including
+<code>java.lang.Throwable</code> and <code>java.lang.Exception</code>) as thrown, but its body
+actually raises neither that exception, nor any other exception extending it.<br />
+The severity of the unused declared thrown exception problem is controlled with option <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">COMPILER_PB_</a>
+
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">UNUSED_DECLARED_</a>
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">THROWN_EXCEPTION</a>.<br />
+
+This diagnostic is further tuned by options <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+INCLUDE_DOC_COMMENT_REFERENCE</a> and <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+WHEN_OVERRIDING</a>.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Consider Reference in Doc Comment for Unused Declared Thrown Exception Check</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE</a></b>)</td>
-</tr>
-<tr valign="top">
-<td rowspan=2>When enabled, the compiler will consider doc comment references to 
-  exceptions (i.e. <code>@throws</code> clauses) for the unused declared thrown 
-  exception check. Thus, documented exceptions will be considered as mandated as 
-  per doc contract.<br>
-  The severity of the unused declared thrown exception problem is controlled 
-  with option
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  UNUSED_DECLARED_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  THROWN_EXCEPTION</a></u>.<br>
-  Note: this option has no effect until the doc comment support is enabled 
-  according to the option <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_DOC_COMMENT_SUPPORT">COMPILER_DOC_COMMENT_SUPPORT</a>.<br>
-  This diagnostic is further tuned by options
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  EXEMPT_EXCEPTION_AND_THROWABLE</a></u>
-  and 
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
-  WHEN_OVERRIDING</a></u>.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+
+<td colspan="2"><b>Consider Reference in Doc Comment for Unused Declared Thrown Exception Check</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
+<td rowspan="2">When enabled, the compiler will consider doc comment references to exceptions (i.e.
+<code>@throws</code> clauses) for the unused declared thrown exception check. Thus, documented
+exceptions will be considered as mandated as per doc contract.<br />
+The severity of the unused declared thrown exception problem is controlled with option <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">COMPILER_PB_</a>
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">UNUSED_DECLARED_</a>
+
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">THROWN_EXCEPTION</a>.<br />
+
+Note: this option has no effect until the doc comment support is enabled according to the option
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_DOC_COMMENT_SUPPORT">COMPILER_DOC_COMMENT_SUPPORT</a>.<br />
+
+This diagnostic is further tuned by options <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+
+EXEMPT_EXCEPTION_AND_THROWABLE</a> and <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">
+WHEN_OVERRIDING</a>.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
+<tr valign="top">
 
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Reporting Unused Declared Thrown Exception in Overriding Method</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING</a></b>)</td>
-</tr>
-<tr valign="top">
-<td rowspan=2>When disabled, the compiler will report unused declared thrown
-  exceptions neither on overriding methods nor on implementing methods.<br>
-  The severity of the unused declared thrown exception problem is controlled 
-  with option
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  UNUSED_DECLARED_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">
-  THROWN_EXCEPTION</a></u>.<br>
-  This diagnostic is further tuned by options
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
-  EXEMPT_EXCEPTION_AND_THROWABLE</a></u> and
-  <u><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  COMPILER_PB_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  UNUSED_DECLARED_THROWN_EXCEPTION_</a>
-  <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
-  INCLUDE_DOC_COMMENT_REFERENCE</a></u>.</td>  
+<td colspan="2"><b>Reporting Unused Declared Thrown Exception in Overriding Method</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING">COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING</a></b>)</td>
+</tr>
+<tr valign="top">
+<td rowspan="2">When disabled, the compiler will report unused declared thrown exceptions neither
+on overriding methods nor on implementing methods.<br />
+The severity of the unused declared thrown exception problem is controlled with option <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">COMPILER_PB_</a>
+
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">UNUSED_DECLARED_</a>
+<a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION">THROWN_EXCEPTION</a>.<br />
+
+This diagnostic is further tuned by options <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE">
+EXEMPT_EXCEPTION_AND_THROWABLE</a> and <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+
+COMPILER_PB_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+UNUSED_DECLARED_THROWN_EXCEPTION_</a> <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE">
+INCLUDE_DOC_COMMENT_REFERENCE</a>.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED"><i>DISABLED</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unreferenced Label</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_LABEL">COMPILER_PB_UNUSED_LABEL</a></b>)</td>
+
+<td colspan="2"><b>Reporting Unreferenced Label</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_LABEL">COMPILER_PB_UNUSED_LABEL</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when 
-  encountering a labeled statement which label is never explicitly referenced. 
-  A label is considered to be referenced if its name explicitly appears within 
-  a break or continue statement; for instance the following label would be 
-  considered unreferenced:<br>
-  <code>LABEL: { break; }</code></td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when encountering a
+labeled statement which label is never explicitly referenced. A label is considered to be
+referenced if its name explicitly appears within a break or continue statement; for instance the
+following label would be considered unreferenced:<br />
+<code>LABEL: { break; }</code></td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unused Import</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_IMPORT">COMPILER_PB_UNUSED_IMPORT</a></b>)</td>
+<td colspan="2"><b>Reporting Unused Import</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_IMPORT">COMPILER_PB_UNUSED_IMPORT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning for unused import reference.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning for unused import
+reference.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unused Local</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_LOCAL">COMPILER_PB_UNUSED_LOCAL</a></b>)</td>
+<td colspan="2"><b>Reporting Unused Local</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_LOCAL">COMPILER_PB_UNUSED_LOCAL</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning for unused local variables (i.e. variables never read from).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning for unused local
+variables (i.e. variables never read from).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Allocation of an Unused Object</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_OBJECT_ALLOCATION">COMPILER_PB_UNUSED_OBJECT_ALLOCATION</a></b>)</td>
+<td colspan="2"><b>Reporting Allocation of an Unused Object</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_OBJECT_ALLOCATION">COMPILER_PB_UNUSED_OBJECT_ALLOCATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning if an object is allocated but never used, neither by holding a reference nor by invoking one of the object's methods.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning if an object is
+allocated but never used, neither by holding a reference nor by invoking one of the object's
+methods.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unused Parameter</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER">COMPILER_PB_UNUSED_PARAMETER</a></b>)</td>
+<td colspan="2"><b>Reporting Unused Parameter</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER">COMPILER_PB_UNUSED_PARAMETER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning for unused method parameters (i.e. parameters never read from).</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning for unused method
+parameters (i.e. parameters never read from).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unused Parameter if Implementing Abstract Method</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER_WHEN_IMPLEMENTING_ABSTRACT">COMPILER_PB_UNUSED_PARAMETER_WHEN_IMPLEMENTING_ABSTRACT</a></b>)</td>
+<td colspan="2"><b>Reporting Unused Parameter if Implementing Abstract Method</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER_WHEN_IMPLEMENTING_ABSTRACT">COMPILER_PB_UNUSED_PARAMETER_WHEN_IMPLEMENTING_ABSTRACT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will signal unused parameters in
-  abstract method implementations.</td>
+<td rowspan="2">When enabled, the compiler will signal unused parameters in abstract method
+implementations.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unused Parameter if Overriding Concrete Method</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER_WHEN_OVERRIDING_CONCRETE">COMPILER_PB_UNUSED_PARAMETER_WHEN_OVERRIDING_CONCRETE</a></b>)</td>
+<td colspan="2"><b>Reporting Unused Parameter if Overriding Concrete Method</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER_WHEN_OVERRIDING_CONCRETE">COMPILER_PB_UNUSED_PARAMETER_WHEN_OVERRIDING_CONCRETE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will signal unused parameters in
-  methods overriding concrete ones.</td>
+<td rowspan="2">When enabled, the compiler will signal unused parameters in methods overriding
+concrete ones.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Consider Reference in Doc Comment for Unused Parameter Check</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE">COMPILER_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Consider Reference in Doc Comment for Unused Parameter Check</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE">COMPILER_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, the compiler will consider doc comment references to parameters (i.e. @param clauses) for the unused
-	      parameter check. Thus, documented parameters will be considered as mandated as per doc contract.<br>
-	      The severity of the unused parameter problem is controlled with option "org.eclipse.jdt.core.compiler.problem.unusedParameter"<br>.
- 	      Note: this option has no effect until the doc comment support is enabled according to the option "org.eclipse.jdt.core.compiler.doc.comment.support".</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
+<td rowspan="2">When enabled, the compiler will consider doc comment references to parameters (i.e.
+ at param clauses) for the unused parameter check. Thus, documented parameters will be considered as
+mandated as per doc contract.<br />
+The severity of the unused parameter problem is controlled with option
+"org.eclipse.jdt.core.compiler.problem.unusedParameter"<br />
+. Note: this option has no effect until the doc comment support is enabled according to the option
+"org.eclipse.jdt.core.compiler.doc.comment.support".</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Unused Private Members </b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PRIVATE_MEMBER">COMPILER_PB_UNUSED_PRIVATE_MEMBER</a></b>)</td>
+<td colspan="2"><b>Reporting Unused Private Members</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_PRIVATE_MEMBER">COMPILER_PB_UNUSED_PRIVATE_MEMBER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning
-  whenever a private method or field is declared but never used within the same
-  unit. </td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a private
+method or field is declared but never used within the same unit.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Presence of Type Arguments for a Non-Generic Method Invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_TYPE_ARGUMENTS_FOR_METHOD_INVOCATION">COMPILER_PB_UNUSED_TYPE_ARGUMENTS_FOR_METHOD_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Reporting Presence of Type Arguments for a Non-Generic Method Invocation</b>
+
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_TYPE_ARGUMENTS_FOR_METHOD_INVOCATION">COMPILER_PB_UNUSED_TYPE_ARGUMENTS_FOR_METHOD_INVOCATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning 
-  whenever type arguments are encountered for a non-generic method invocation.<br> 
-  Note that prior to compliance level <code>"1.7"</code>, this situation would 
-  automatically result into an error. From Java 7 on, unused type arguments are 
-  tolerated, and optionally warned against.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever type arguments
+are encountered for a non-generic method invocation.<br />
+Note that prior to compliance level <code>"1.7"</code>, this situation would automatically result
+into an error. From Java 7 on, unused type arguments are tolerated, and optionally warned
+against.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
-
 <tr>
-<td colspan=2><b>Reporting Unnecessary <code>@SuppressWarnings</code></b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_WARNING_TOKEN">COMPILER_PB_UNUSED_WARNING_TOKEN</a></b>)</td>
+<td colspan="2"><b>Reporting Unnecessary <code>@SuppressWarnings</code></b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_UNUSED_WARNING_TOKEN">COMPILER_PB_UNUSED_WARNING_TOKEN</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning when 
-  encountering a <code>@SuppressWarnings</code> annotation for which no 
-  corresponding warning got detected in the code. This diagnostic is provided 
-  to help developers to get rid of transient <code>@SuppressWarnings</code> that
-  are no longer needed.<br>
-  Note that <code>@SuppressWarnings("all")</code> is still silencing the warning 
-  for unnecessary <code>@SuppressWarnings</code>, as it is the master switch to 
-  silence <em>all</em> warnings.</td>
+<td rowspan="3">When enabled, the compiler will issue an error or a warning when encountering a
+<code>@SuppressWarnings</code> annotation for which no corresponding warning got detected in the
+code. This diagnostic is provided to help developers to get rid of transient
+
+<code>@SuppressWarnings</code> that are no longer needed.<br />
+Note that <code>@SuppressWarnings("all")</code> is still silencing the warning for unnecessary
+<code>@SuppressWarnings</code>, as it is the master switch to silence <em>all</em> warnings.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
+
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
 <tr>
-
-<td colspan=2><b>Reporting Varargs Argument Needing a Cast in Method/Constructor Inv</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_VARARGS_ARGUMENT_NEED_CAST">COMPILER_PB_VARARGS_ARGUMENT_NEED_CAST</a></b>)</td>
+<td colspan="2"><b>Reporting Varargs Argument Needing a Cast in Method/Constructor Inv</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_PB_VARARGS_ARGUMENT_NEED_CAST">COMPILER_PB_VARARGS_ARGUMENT_NEED_CAST</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>When enabled, the compiler will issue an error or a warning whenever a varargs arguments should be cast
-when passed to a method/constructor invocation. (e.g. Class.getMethod(String name, Class ... args )  
-invoked with arguments ("foo", null)).</td>
+
+<td rowspan="3">When enabled, the compiler will issue an error or a warning whenever a varargs
+arguments should be cast when passed to a method/constructor invocation. (e.g.
+Class.getMethod(String name, Class ... args ) invoked with arguments ("foo", null)).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING"><i>WARNING</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Setting Source Compatibility Mode</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_SOURCE">COMPILER_SOURCE</a></b>)</td>
+<td colspan="2"><b>Setting Source Compatibility Mode</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_SOURCE">COMPILER_SOURCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=5>
-Specify the compatibility level of the Java source code.<br>
-Source level "1.4" enables assertions. From "1.4" on, 'assert' is a reserved keyword.<br>
-Source level "1.5" enables generics, autoboxing, covariance, annotations, enumerations
-enhanced for loops, static imports and varargs. From "1.5" on, 'enum' is a reserved 
-keyword.<br>
-The compliance, source and target levels must satisfy a set of constraints summarized 
-in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
-</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">VERSION_1_3</a></i></b></td>
+<td rowspan="5">Specify the compatibility level of the Java source code.<br />
+Source level "1.4" enables assertions. From "1.4" on, 'assert' is a reserved keyword.<br />
+Source level "1.5" enables generics, autoboxing, covariance, annotations, enumerations enhanced for
+loops, static imports and varargs. From "1.5" on, 'enum' is a reserved keyword.<br />
+The compliance, source and target levels must satisfy a set of constraints summarized in a <a href=
+"#compatibility"><b>compatibility table</b></a> below.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_3">VERSION_1_3</a></i></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">VERSION_1_4</a></b></td>
+
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_4">VERSION_1_4</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">VERSION_1_5</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_5">VERSION_1_5</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">VERSION_1_6</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_6">VERSION_1_6</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">VERSION_1_7</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#VERSION_1_7">VERSION_1_7</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Generating Source Debug Attribute</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_SOURCE_FILE_ATTR">COMPILER_SOURCE_FILE_ATTR</a></b>)</td>
+<td colspan="2"><b>Generating Source Debug Attribute</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_SOURCE_FILE_ATTR">COMPILER_SOURCE_FILE_ATTR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When generated, this attribute will enable the debugger to present the corresponding source code.</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#GENERATE">GENERATE</a></i></b></td>
+<td rowspan="2">When generated, this attribute will enable the debugger to present the
+corresponding source code.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#GENERATE">GENERATE</a></i></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_GENERATE">DO_NOT_GENERATE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_GENERATE">DO_NOT_GENERATE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Determine whether task tags are case-sensitive</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_CASE_SENSITIVE">COMPILER_TASK_CASE_SENSITIVE</a></b>)</td>
+<td colspan="2"><b>Determine whether task tags are case-sensitive</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_CASE_SENSITIVE">COMPILER_TASK_CASE_SENSITIVE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, task tags are considered in a case-sensitive way.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+<td rowspan="2">When enabled, task tags are considered in a case-sensitive way.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Define the Automatic Task Priorities</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITIES">COMPILER_TASK_PRIORITIES</a></b>)</td>
+<td colspan="2"><b>Define the Automatic Task Priorities</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITIES">COMPILER_TASK_PRIORITIES</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=1><p>In parallel with the Automatic Task Tags, this list defines the
-  priorities (high, normal or low) of the task markers issued by the
-  compiler.<br>
-  Possible priorities are 
-  "<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITY_HIGH">HIGH</a></b>", 
-  "<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITY_NORMAL">NORMAL</a></b>" or
-  "<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITY_LOW">LOW</a></b>".</p></td>
-<td>{<priority>[,<priority>]*}.<br><b><i>Default value is "NORMAL,HIGH,<br>NORMAL"</i></b></td>
-</tr>
+<td rowspan="1">
+<p>In parallel with the Automatic Task Tags, this list defines the priorities (high, normal or low)
+of the task markers issued by the compiler.<br />
+Possible priorities are "<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITY_HIGH">HIGH</a></b>",
+"<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITY_NORMAL">NORMAL</a></b>"
+or "<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_PRIORITY_LOW">LOW</a></b>".</p>
+</td>
+<td>{<priority>[,<priority>]*}.<br />
 
+<b><i>Default value is "NORMAL,HIGH,<br />
+NORMAL"</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Define the Automatic Task Tags</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_TAGS">COMPILER_TASK_TAGS</a></b>)</td>
+<td colspan="2"><b>Define the Automatic Task Tags</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPILER_TASK_TAGS">COMPILER_TASK_TAGS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the tag list is not empty, the compiler will issue a task 
-  marker whenever it encounters one of the corresponding tags inside any 
-  comment in Java source code. Generated task messages will start with the tag,
-  and range until the next line separator, comment ending, or tag.<br>
-  When a given line of code bears multiple tags, each tag will be reported 
-  separately. Moreover, a tag immediately followed by another tag will be 
-  reported using the contents of the next non-empty tag of the line, if any.<br>
-  Note that tasks messages are trimmed. If a tag is starting with a letter or 
-  digit, then it cannot be leaded by another letter or digit to be recognized 
-  ("fooToDo" will not be recognized as a task for tag "ToDo", but "foo#ToDo"
-  will be detected for either tag "ToDo" or "#ToDo"). Respectively, a tag 
-  ending with a letter or digit cannot be followed by a letter or digit to be 
-  recognized ("ToDofoo" will not be recognized as a task for tag "ToDo", but 
-  "ToDo:foo" will be detected either for tag "ToDo" or "ToDo:").
-</td>
-<td>{<tag>[,<tag>]*}.<br><b><i>Default value is "TODO,FIXME,<br>XXX"</i></b></td>
+<td rowspan="1">When the tag list is not empty, the compiler will issue a task marker whenever it
+encounters one of the corresponding tags inside any comment in Java source code. Generated task
+messages will start with the tag, and range until the next line separator, comment ending, or
+tag.<br />
+When a given line of code bears multiple tags, each tag will be reported separately. Moreover, a
+tag immediately followed by another tag will be reported using the contents of the next non-empty
+tag of the line, if any.<br />
+
+Note that tasks messages are trimmed. If a tag is starting with a letter or digit, then it cannot
+be leaded by another letter or digit to be recognized ("fooToDo" will not be recognized as a task
+for tag "ToDo", but "foo#ToDo" will be detected for either tag "ToDo" or "#ToDo"). Respectively, a
+tag ending with a letter or digit cannot be followed by a letter or digit to be recognized
+("ToDofoo" will not be recognized as a task for tag "ToDo", but "ToDo:foo" will be detected either
+for tag "ToDo" or "ToDo:").</td>
+<td>{<tag>[,<tag>]*}.<br />
+<b><i>Default value is "TODO,FIXME,<br />
+XXX"</i></b></td>
 </tr>
 </table>
-<a name="compatibility"></a>
-<p>The following table summarizes the compatible combinations of Java compliance, 
-   target and source levels (bold values are the defaults for each compliance level).</p>
+<a name="compatibility" id="compatibility"></a>
+<p>The following table summarizes the compatible combinations of Java compliance, target and source
+levels (bold values are the defaults for each compliance level).</p>
+<p><i>Note: The Eclipse Compiler for Java currently does not support 1.7 compliance level</i></p>
 
 <table border="1">
-<tr>                         <th>Compliance</th>               
-                                         <th>Target</th>
-                                                     <th>Source</th></tr>
-<tr>
-   <td valign="top" rowspan="5"><b>1.7</b></td>
-                <td valign="top"><b>1.7</b></td><td><b>1.7</b>, 1.6, 1.5, 1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.6</td><td>1.6, 1.5, 1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.5</td><td>1.5, 1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.4</td><td>1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.3, 1.2, 1.1</td><td>1.3</td></tr>
-<tr>
-   <td valign="top" rowspan="4"><b>1.6</b></td>
-                <td valign="top"><b>1.6</b></td><td><b>1.6</b>, 1.5, 1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.5</td><td>1.5, 1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.4</td><td>1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.3, 1.2, 1.1</td><td>1.3</td></tr>
-<tr>
-   <td valign="top" rowspan="3"><b>1.5</b></td>
-                <td valign="top"><b>1.5</b></td><td><b>1.5</b>, 1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.4</td><td>1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.3, 1.2, 1.1</td><td>1.3</td></tr>
-<tr>
-   <td valign="top" rowspan="2"><b>1.4</b></td>
-                <td valign="top">1.4</td><td>1.4, 1.3</td></tr>
-<tr>            <td valign="top">1.3, <b>1.2</b>, 1.1, cldc1.1</td><td><b>1.3</b></td></tr>
-<tr>
-   <td valign="top"><b>1.3</b></td>
-                <td valign="top">1.3, 1.2, <b>1.1</b>, cldc1.1</td><td><b>1.3</b></td></tr>
-</table>
+<tr>
+<th>Compliance</th>
+<th>Target</th>
+<th>Source</th>
+</tr>
+<tr>
+<td valign="top" rowspan="5"><b>1.7</b></td>
+<td valign="top"><b>1.7</b></td>
+<td><b>1.7</b>, 1.6, 1.5, 1.4, 1.3</td>
+
+</tr>
+<tr>
+<td valign="top">1.6</td>
+<td>1.6, 1.5, 1.4, 1.3</td>
+</tr>
+<tr>
+<td valign="top">1.5</td>
+<td>1.5, 1.4, 1.3</td>
+</tr>
+<tr>
+<td valign="top">1.4</td>
+<td>1.4, 1.3</td>
+
+</tr>
+<tr>
+<td valign="top">1.3, 1.2, 1.1</td>
+<td>1.3</td>
+</tr>
+<tr>
+<td valign="top" rowspan="4"><b>1.6</b></td>
+<td valign="top"><b>1.6</b></td>
+<td><b>1.6</b>, 1.5, 1.4, 1.3</td>
+</tr>
+<tr>
+
+<td valign="top">1.5</td>
+<td>1.5, 1.4, 1.3</td>
+</tr>
+<tr>
+<td valign="top">1.4</td>
+<td>1.4, 1.3</td>
+</tr>
+<tr>
+<td valign="top">1.3, 1.2, 1.1</td>
+<td>1.3</td>
+</tr>
 
-<H4><a name="builder">Builder options</a></h4>
+<tr>
+<td valign="top" rowspan="3"><b>1.5</b></td>
+<td valign="top"><b>1.5</b></td>
+<td><b>1.5</b>, 1.4, 1.3</td>
+</tr>
+<tr>
+<td valign="top">1.4</td>
+<td>1.4, 1.3</td>
+</tr>
+<tr>
+<td valign="top">1.3, 1.2, 1.1</td>
 
-<table BORDER CELLSPACING=2 CELLPADDING=2 WIDTH="100%" >
+<td>1.3</td>
+</tr>
+<tr>
+<td valign="top" rowspan="2"><b>1.4</b></td>
+<td valign="top">1.4</td>
+<td>1.4, 1.3</td>
+</tr>
+<tr>
+<td valign="top">1.3, <b>1.2</b>, 1.1, cldc1.1</td>
+<td><b>1.3</b></td>
 
+</tr>
 <tr>
-<th>Description</th>
-<th width=150>Values</th>
+<td valign="top"><b>1.3</b></td>
+<td valign="top">1.3, 1.2, <b>1.1</b>, cldc1.1</td>
+<td><b>1.3</b></td>
 </tr>
+</table>
+<h4><a name="builder" id="builder">Builder options</a></h4>
+<table border="1" cellspacing="2" cellpadding="2" width="100%">
+<tr>
+<th>Description</th>
 
+<th width="150">Values</th>
+</tr>
 <tr>
-<td colspan=2><b>Cleaning Output Folder(s)</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER">CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER</a></b>)</td>
+<td colspan="2"><b>Cleaning Output Folder(s)</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER">CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Indicate whether the JavaBuilder is allowed to clean the output
-  folders when performing full build operations.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CLEAN"><i>CLEAN</i></a></b></td>
+<td rowspan="2">Indicate whether the JavaBuilder is allowed to clean the output folders when
+performing full build operations.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CLEAN"><i>CLEAN</i></a></b></td>
 </tr>
+
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Duplicate Resources</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_DUPLICATE_RESOURCE">CORE_JAVA_BUILD_DUPLICATE_RESOURCE</a></b>)</td>
+<td colspan="2"><b>Reporting Duplicate Resources</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_DUPLICATE_RESOURCE">CORE_JAVA_BUILD_DUPLICATE_RESOURCE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Indicate the severity of the problem reported when more than one 
-  occurrence of a given resource is to be copied to the output location.</td>
+<td rowspan="2">Indicate the severity of the problem reported when more than one occurrence of a
+given resource is to be copied to the output location.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Abort if Invalid Classpath</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_INVALID_CLASSPATH">CORE_JAVA_BUILD_INVALID_CLASSPATH</a></b>)</td>
+<td colspan="2"><b>Abort if Invalid Classpath</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_INVALID_CLASSPATH">CORE_JAVA_BUILD_INVALID_CLASSPATH</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Instruct the builder to abort if the classpath is invalid.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ABORT"><i>ABORT</i></a></b></td>
+<td rowspan="2">Instruct the builder to abort if the classpath is invalid.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ABORT"><i>ABORT</i></a></b></td>
+
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Computing Project Build Order</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_ORDER">CORE_JAVA_BUILD_ORDER</a></b>)</td>
+<td colspan="2"><b>Computing Project Build Order</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_ORDER">CORE_JAVA_BUILD_ORDER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Indicate whether JavaCore should enforce the project build order to be based on the classpath prerequisite chain. When requesting to compute, this takes over the platform default order (based on project references).</td>
+<td rowspan="2">Indicate whether JavaCore should enforce the project build order to be based on the
+classpath prerequisite chain. When requesting to compute, this takes over the platform default
+order (based on project references).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#COMPUTE">COMPUTE</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE">IGNORE</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Recreate Modified class files in Output Folder</b> (<b><a href=
-  "../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER">CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER</a></b>)</td>
+<td colspan="2"><b>Recreate Modified class files in Output Folder</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER">CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Indicate whether the JavaBuilder should check for any changes to 
-  .class files in the output folders while performing incremental build 
-  operations. If changes are detected to managed .class files, then a full 
-  build is performed, otherwise the changes are left as is. Tools further 
-  altering generated .class files, like optimizers, should ensure this option 
-  remains set to its default state of ignore.</td>
+<td rowspan="2">Indicate whether the JavaBuilder should check for any changes to .class files in
+the output folders while performing incremental build operations. If changes are detected to
+managed .class files, then a full build is performed, otherwise the changes are left as is. Tools
+further altering generated .class files, like optimizers, should ensure this option remains set to
+its default state of ignore.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ABORT">ENABLE</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Specifying Filters for Resource Copying Control</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_RESOURCE_COPY_FILTER">CORE_JAVA_BUILD_RESOURCE_COPY_FILTER</a></b>)</td>
+<td colspan="2"><b>Specifying Filters for Resource Copying Control</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_JAVA_BUILD_RESOURCE_COPY_FILTER">CORE_JAVA_BUILD_RESOURCE_COPY_FILTER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>Specify filters to control the resource copy process. (<name> is a file name pattern (only * wild-cards allowed) or the name of a folder which ends with '/';
-  any resource which name matches one or more of these patterns is <em>not</em>
-  copied to the output folder.)</td>
-<td>{<name>[,<name>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">Specify filters to control the resource copy process. (<name> is a file name
+pattern (only * wild-cards allowed) or the name of a folder which ends with '/'; any resource which
+name matches one or more of these patterns is <em>not</em> copied to the output folder.)</td>
 
+<td>{<name>[,<name>]*}.<br />
+<b><i>Default value is ""</i></b></td>
+</tr>
 </table>
-
-<H4><a name="javacore">JavaCore options</a></h4>
-
-<table BORDER CELLSPACING=2 CELLPADDING=2 WIDTH="100%" >
-
+<h4><a name="javacore" id="javacore">JavaCore options</a></h4>
+<table border="1" cellspacing="2" cellpadding="2" width="100%">
 <tr>
 <th>Description</th>
-<th width=120>Values</th>
-</tr>
+<th width="120">Values</th>
 
+</tr>
 <tr>
-<td colspan=2><b>Reporting Classpath Cycle</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_CIRCULAR_CLASSPATH">CORE_CIRCULAR_CLASSPATH</a></b>)</td>
+<td colspan="2"><b>Reporting Classpath Cycle</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_CIRCULAR_CLASSPATH">CORE_CIRCULAR_CLASSPATH</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Indicate the severity of the problem reported when a project is
-  involved in a cycle.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
+<td rowspan="2">Indicate the severity of the problem reported when a project is involved in a
+cycle.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
-</tr>
 
+</tr>
 <tr>
-<td colspan=2><b>Enabling Usage of Classpath Exclusion Patterns</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS">CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS</a></b>)</td>
+<td colspan="2"><b>Enabling Usage of Classpath Exclusion Patterns</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS">CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When set to "disabled", no entry on a project classpath
-  can be associated with an exclusion or inclusion pattern.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+<td rowspan="2">When set to "disabled", no entry on a project classpath can be associated with an
+exclusion or inclusion pattern.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
-</tr>
 
+</tr>
 <tr>
-<td colspan=2><b>Enabling Usage of Classpath Multiple Output Locations</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS">CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS</a></b>)</td>
+<td colspan="2"><b>Enabling Usage of Classpath Multiple Output Locations</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS">CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When set to "disabled", no entry on a project classpath
-  can be associated with a specific output location. In particular, this 
-  prevents the use of multiple output locations for a single project.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+<td rowspan="2">When set to "disabled", no entry on a project classpath can be associated with a
+specific output location. In particular, this prevents the use of multiple output locations for a
+single project.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
-</tr>
 
+</tr>
 <tr>
-<td colspan=2><b>Default Source Encoding Format</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_ENCODING">CORE_ENCODING</a></b>)</td>
+<td colspan="2"><b>Default Source Encoding Format</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_ENCODING">CORE_ENCODING</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>Get the default encoding format of source files. This value is
-  immutable and preset to the result of 
-  <b><a href="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/ResourcesPlugin.html#getEncoding()">ResourcesPlugin.getEncoding()</a></b>.<br>
-  It is offered as a convenience shortcut only.</td>
+<td rowspan="1">Get the default encoding format of source files. This value is immutable and preset
+to the result of <b><a href=
+"../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/ResourcesPlugin.html#getEncoding()">
+ResourcesPlugin.getEncoding()</a></b>.<br />
+It is offered as a convenience shortcut only.</td>
+
 <td><b><i>Immutable, preset to the platform default.</i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Reporting Incompatible JDK Level for Required Binaries</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_INCOMPATIBLE_JDK_LEVEL">CORE_INCOMPATIBLE_JDK_LEVEL</a></b>)</td>
+<td colspan="2"><b>Reporting Incompatible JDK Level for Required Binaries</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_INCOMPATIBLE_JDK_LEVEL">CORE_INCOMPATIBLE_JDK_LEVEL</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=3>Indicate the severity of the problem reported when a project prerequisites another project 
-  or library with an incompatible target JDK level (e.g. project targeting 1.1 vm, but compiled against 1.4 libraries).</td>
+<td rowspan="3">Indicate the severity of the problem reported when a project prerequisites another
+project or library with an incompatible target JDK level (e.g. project targeting 1.1 vm, but
+compiled against 1.4 libraries).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR">ERROR</a></b></td>
 </tr>
+
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#IGNORE"><i>IGNORE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Reporting Incomplete Classpath</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_INCOMPLETE_CLASSPATH">CORE_INCOMPLETE_CLASSPATH</a></b>)</td>
+<td colspan="2"><b>Reporting Incomplete Classpath</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CORE_INCOMPLETE_CLASSPATH">CORE_INCOMPLETE_CLASSPATH</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Indicate the severity of the problem reported when an entry on the
-  classpath doesn't exist, is not legitimate, or is not visible (e.g. a
-  referenced project is closed).</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
+
+<td rowspan="2">Indicate the severity of the problem reported when an entry on the classpath
+doesn't exist, is not legitimate, or is not visible (e.g. a referenced project is closed).</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ERROR"><i>ERROR</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#WARNING">WARNING</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Set the timeout value for retrieving a method's parameter names from javadoc</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC">TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC</a></b>)</td>
+<td colspan="2"><b>Set the timeout value for retrieving a method's parameter names from javadoc</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC">TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC</a></b>)</td>
 </tr>
+
 <tr valign="top">
-<td rowspan=2>Timeout in milliseconds to retrieve a method's parameter names from javadoc.<br>If the value is 0, the parameter names are not fetched and the raw names are returned.</td>
-<td rowspan=2>A positive or null integer.<br>Default is <b><i>"50"</i></b>.</td>
+<td rowspan="2">Timeout in milliseconds to retrieve a method's parameter names from javadoc.<br />
+If the value is 0, the parameter names are not fetched and the raw names are returned.</td>
+<td rowspan="2">A positive or null integer.<br />
+Default is <b><i>"50"</i></b>.</td>
 </tr>
 </table>
-
-<H4><a name="formatter">Formatter options</a></h4>
-
-<table BORDER CELLSPACING=2 CELLPADDING=2 WIDTH="100%" >
+<h4><a name="formatter" id="formatter">Formatter options</a></h4>
+<table border="1" cellspacing="2" cellpadding="2" width="100%">
 <tr>
+
 <th>Description</th>
-<th width=80>Values</th>
+<th width="80">Values</th>
 </tr>
 <tr>
-<td colspan=2><b>Option to align type members of a type declaration on column</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGN_TYPE_MEMBERS_ON_COLUMNS">FORMATTER_ALIGN_TYPE_MEMBERS_ON_COLUMNS</a></b>)</td>
+<td colspan="2"><b>Option to align type members of a type declaration on column</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGN_TYPE_MEMBERS_ON_COLUMNS">FORMATTER_ALIGN_TYPE_MEMBERS_ON_COLUMNS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of arguments in allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ALLOCATION_EXPRESSION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of arguments in allocation expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ALLOCATION_EXPRESSION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ALLOCATION_EXPRESSION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
+
 </tr>
 <tr valign="top">
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of arguments in enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ENUM_CONSTANT">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option for alignment of arguments in enum constant</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ENUM_CONSTANT">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ENUM_CONSTANT</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
@@ -1851,7 +2339,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of arguments in annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of arguments in annotation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_ANNOTATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -1862,32 +2352,40 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of arguments in explicit constructor call</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_EXPLICIT_CONSTRUCTOR_CALL">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_EXPLICIT_CONSTRUCTOR_CALL</a></b>)</td>
+
+<td colspan="2"><b>Option for alignment of arguments in explicit constructor call</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_EXPLICIT_CONSTRUCTOR_CALL">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_EXPLICIT_CONSTRUCTOR_CALL</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
+
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of arguments in method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of arguments in method invocation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
+
 </tr>
 <tr valign="top">
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of arguments in qualified allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_QUALIFIED_ALLOCATION_EXPRESSION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_QUALIFIED_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of arguments in qualified allocation expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_QUALIFIED_ALLOCATION_EXPRESSION">FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_QUALIFIED_ALLOCATION_EXPRESSION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
@@ -1895,7 +2393,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of assignment</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ASSIGNMENT">FORMATTER_ALIGNMENT_FOR_ASSIGNMENT</a></b>)</td>
+<td colspan="2"><b>Option for alignment of assignment</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ASSIGNMENT">FORMATTER_ALIGNMENT_FOR_ASSIGNMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -1906,32 +2406,39 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, 0, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of binary expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_BINARY_EXPRESSION">FORMATTER_ALIGNMENT_FOR_BINARY_EXPRESSION</a></b>)</td>
+
+<td colspan="2"><b>Option for alignment of binary expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_BINARY_EXPRESSION">FORMATTER_ALIGNMENT_FOR_BINARY_EXPRESSION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
+
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of compact if</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_COMPACT_IF">FORMATTER_ALIGNMENT_FOR_COMPACT_IF</a></b>)</td>
+<td colspan="2"><b>Option for alignment of compact if</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_COMPACT_IF">FORMATTER_ALIGNMENT_FOR_COMPACT_IF</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
+
 </tr>
 <tr valign="top">
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_ONE_PER_LINE, INDENT_BY_ONE)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of conditional expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_CONDITIONAL_EXPRESSION">FORMATTER_ALIGNMENT_FOR_CONDITIONAL_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of conditional expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_CONDITIONAL_EXPRESSION">FORMATTER_ALIGNMENT_FOR_CONDITIONAL_EXPRESSION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
@@ -1939,7 +2446,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_ONE_PER_LINE, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of enum constants</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS">FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS</a></b>)</td>
+<td colspan="2"><b>Option for alignment of enum constants</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS">FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -1950,32 +2459,39 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_NO_SPLIT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of expressions in array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER">FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER</a></b>)</td>
+
+<td colspan="2"><b>Option for alignment of expressions in array initializer</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER">FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
+
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION">FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION">FORMATTER_ALIGNMENT_FOR_METHOD_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
+
 </tr>
 <tr valign="top">
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of multiple fields</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_MULTIPLE_FIELDS">FORMATTER_ALIGNMENT_FOR_MULTIPLE_FIELDS</a></b>)</td>
+<td colspan="2"><b>Option for alignment of multiple fields</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_MULTIPLE_FIELDS">FORMATTER_ALIGNMENT_FOR_MULTIPLE_FIELDS</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
@@ -1983,7 +2499,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of parameters in constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_CONSTRUCTOR_DECLARATION">FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of parameters in constructor declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_CONSTRUCTOR_DECLARATION">FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -1994,32 +2512,39 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of parameters in method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION">FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION</a></b>)</td>
+
+<td colspan="2"><b>Option for alignment of parameters in method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION">FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
+
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of selector in method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SELECTOR_IN_METHOD_INVOCATION">FORMATTER_ALIGNMENT_FOR_SELECTOR_IN_METHOD_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of selector in method invocation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SELECTOR_IN_METHOD_INVOCATION">FORMATTER_ALIGNMENT_FOR_SELECTOR_IN_METHOD_INVOCATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
+
 </tr>
 <tr valign="top">
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of superclass in type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SUPERCLASS_IN_TYPE_DECLARATION">FORMATTER_ALIGNMENT_FOR_SUPERCLASS_IN_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of superclass in type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SUPERCLASS_IN_TYPE_DECLARATION">FORMATTER_ALIGNMENT_FOR_SUPERCLASS_IN_TYPE_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
@@ -2027,7 +2552,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_NEXT_SHIFTED, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of superinterfaces in enum declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_ENUM_DECLARATION">FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_ENUM_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of superinterfaces in enum declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_ENUM_DECLARATION">FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_ENUM_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2038,32 +2565,39 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of superinterfaces in type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_TYPE_DECLARATION">FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_TYPE_DECLARATION</a></b>)</td>
+
+<td colspan="2"><b>Option for alignment of superinterfaces in type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_TYPE_DECLARATION">FORMATTER_ALIGNMENT_FOR_SUPERINTERFACES_IN_TYPE_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
+
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of throws clause in constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_CONSTRUCTOR_DECLARATION">FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of throws clause in constructor declaration</b>
+(<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_CONSTRUCTOR_DECLARATION">FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
+
 </tr>
 <tr valign="top">
 <td>Default value</td>
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option for alignment of throws clause in method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_METHOD_DECLARATION">FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option for alignment of throws clause in method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_METHOD_DECLARATION">FORMATTER_ALIGNMENT_FOR_THROWS_CLAUSE_IN_METHOD_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>values returned by <code>createAlignmentValue(boolean, int, int)</code> call</td>
 </tr>
 <tr valign="top">
@@ -2071,7 +2605,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT)</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines after the imports declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_AFTER_IMPORTS">FORMATTER_BLANK_LINES_AFTER_IMPORTS</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines after the imports declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_AFTER_IMPORTS">FORMATTER_BLANK_LINES_AFTER_IMPORTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2082,7 +2618,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines after the package declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_AFTER_PACKAGE">FORMATTER_BLANK_LINES_AFTER_PACKAGE</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines after the package declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_AFTER_PACKAGE">FORMATTER_BLANK_LINES_AFTER_PACKAGE</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2093,7 +2631,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines at the beginning of the method body</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_AT_BEGINNING_OF_METHOD_BODY">FORMATTER_BLANK_LINES_AT_BEGINNING_OF_METHOD_BODY</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines at the beginning of the method body</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_AT_BEGINNING_OF_METHOD_BODY">FORMATTER_BLANK_LINES_AT_BEGINNING_OF_METHOD_BODY</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2104,7 +2644,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines before a field declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_FIELD">FORMATTER_BLANK_LINES_BEFORE_FIELD</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines before a field declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_FIELD">FORMATTER_BLANK_LINES_BEFORE_FIELD</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2115,7 +2657,10 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines before the first class body declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_FIRST_CLASS_BODY_DECLARATION">FORMATTER_BLANK_LINES_BEFORE_FIRST_CLASS_BODY_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines before the first class body declaration</b>
+
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_FIRST_CLASS_BODY_DECLARATION">FORMATTER_BLANK_LINES_BEFORE_FIRST_CLASS_BODY_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2124,23 +2669,28 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <tr valign="top">
 <td>Default value</td>
 <td>"0"</td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines before the imports declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_IMPORTS">FORMATTER_BLANK_LINES_BEFORE_IMPORTS</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines before the imports declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_IMPORTS">FORMATTER_BLANK_LINES_BEFORE_IMPORTS</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>"<n>", where n is zero or a positive integer</td>
 </tr>
+
 <tr valign="top">
 <td>Default value</td>
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines before a member type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_MEMBER_TYPE">FORMATTER_BLANK_LINES_BEFORE_MEMBER_TYPE</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines before a member type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_MEMBER_TYPE">FORMATTER_BLANK_LINES_BEFORE_MEMBER_TYPE</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>"<n>", where n is zero or a positive integer</td>
 </tr>
 <tr valign="top">
@@ -2148,7 +2698,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines before a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_METHOD">FORMATTER_BLANK_LINES_BEFORE_METHOD</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines before a method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_METHOD">FORMATTER_BLANK_LINES_BEFORE_METHOD</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2159,7 +2711,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines before a new chunk</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_NEW_CHUNK">FORMATTER_BLANK_LINES_BEFORE_NEW_CHUNK</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines before a new chunk</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_NEW_CHUNK">FORMATTER_BLANK_LINES_BEFORE_NEW_CHUNK</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2170,7 +2724,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines before the package declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_PACKAGE">FORMATTER_BLANK_LINES_BEFORE_PACKAGE</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines before the package declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BEFORE_PACKAGE">FORMATTER_BLANK_LINES_BEFORE_PACKAGE</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2181,7 +2737,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines between import groups</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BETWEEN_IMPORT_GROUPS">FORMATTER_BLANK_LINES_BETWEEN_IMPORT_GROUPS</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines between import groups</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BETWEEN_IMPORT_GROUPS">FORMATTER_BLANK_LINES_BETWEEN_IMPORT_GROUPS</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2192,7 +2750,9 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"1"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to add blank lines between type declarations</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BETWEEN_TYPE_DECLARATIONS">FORMATTER_BLANK_LINES_BETWEEN_TYPE_DECLARATIONS</a></b>)</td>
+<td colspan="2"><b>Option to add blank lines between type declarations</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BLANK_LINES_BETWEEN_TYPE_DECLARATIONS">FORMATTER_BLANK_LINES_BETWEEN_TYPE_DECLARATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2203,357 +2763,556 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of an annotation type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ANNOTATION_TYPE_DECLARATION">FORMATTER_BRACE_POSITION_FOR_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of an annotation type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ANNOTATION_TYPE_DECLARATION">FORMATTER_BRACE_POSITION_FOR_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
+
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of an anonymous type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ANONYMOUS_TYPE_DECLARATION">FORMATTER_BRACE_POSITION_FOR_ANONYMOUS_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of an anonymous type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ANONYMOUS_TYPE_DECLARATION">FORMATTER_BRACE_POSITION_FOR_ANONYMOUS_TYPE_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
+
 <tr>
-<td colspan=2><b>Option to position the braces of an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ARRAY_INITIALIZER">FORMATTER_BRACE_POSITION_FOR_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of an array initializer</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ARRAY_INITIALIZER">FORMATTER_BRACE_POSITION_FOR_ARRAY_INITIALIZER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of a block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_BLOCK">FORMATTER_BRACE_POSITION_FOR_BLOCK</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of a block</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_BLOCK">FORMATTER_BRACE_POSITION_FOR_BLOCK</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
+
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of a block in a case statement when the block is the first statement following</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_BLOCK_IN_CASE">FORMATTER_BRACE_POSITION_FOR_BLOCK_IN_CASE</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of a block in a case statement when the block is
+the first statement following</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_BLOCK_IN_CASE">FORMATTER_BRACE_POSITION_FOR_BLOCK_IN_CASE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
+
 <tr>
-<td colspan=2><b>Option to position the braces of a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_CONSTRUCTOR_DECLARATION">FORMATTER_BRACE_POSITION_FOR_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of a constructor declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_CONSTRUCTOR_DECLARATION">FORMATTER_BRACE_POSITION_FOR_CONSTRUCTOR_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of an enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ENUM_CONSTANT">FORMATTER_BRACE_POSITION_FOR_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of an enum constant</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ENUM_CONSTANT">FORMATTER_BRACE_POSITION_FOR_ENUM_CONSTANT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
+
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of an enum declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ENUM_DECLARATION">FORMATTER_BRACE_POSITION_FOR_ENUM_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of an enum declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_ENUM_DECLARATION">FORMATTER_BRACE_POSITION_FOR_ENUM_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
+
 <tr>
-<td colspan=2><b>Option to position the braces of a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION">FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of a method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION">FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of a switch statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_SWITCH">FORMATTER_BRACE_POSITION_FOR_SWITCH</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of a switch statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_SWITCH">FORMATTER_BRACE_POSITION_FOR_SWITCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
+
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to position the braces of a type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_TYPE_DECLARATION">FORMATTER_BRACE_POSITION_FOR_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to position the braces of a type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_BRACE_POSITION_FOR_TYPE_DECLARATION">FORMATTER_BRACE_POSITION_FOR_TYPE_DECLARATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=4>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>END_OF_LINE</i></a></b></td>
+<td rowspan="4">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#END_OF_LINE"><i>
+
+END_OF_LINE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE">NEXT_LINE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">NEXT_LINE_SHIFTED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_SHIFTED">
+NEXT_LINE_SHIFTED</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">NEXT_LINE_ON_WRAP</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#NEXT_LINE_ON_WRAP">
+NEXT_LINE_ON_WRAP</a></b></td>
 </tr>
+
 <tr>
-<td colspan=2><b>Option to control whether blank lines are cleared inside block comments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_BLOCK_COMMENT">FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_BLOCK_COMMENT</a></b>)</td>
+<td colspan="2"><b>Option to control whether blank lines are cleared inside block comments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_BLOCK_COMMENT">FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_BLOCK_COMMENT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether blank lines are cleared inside javadoc comments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_JAVADOC_COMMENT">FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_JAVADOC_COMMENT</a></b>)</td>
+<td colspan="2"><b>Option to control whether blank lines are cleared inside javadoc comments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_JAVADOC_COMMENT">FORMATTER_COMMENT_CLEAR_BLANK_LINES_IN_JAVADOC_COMMENT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether multiple line comments are formatted</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT">FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT</a></b>)</td>
+<td colspan="2"><b>Option to control whether multiple line comments are formatted</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT">FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether javadoc comments are formatted</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT">FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT</a></b>)</td>
+<td colspan="2"><b>Option to control whether javadoc comments are formatted</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT">FORMATTER_COMMENT_FORMAT_JAVADOC_COMMENT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether single line comments are formatted</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_LINE_COMMENT">FORMATTER_COMMENT_FORMAT_LINE_COMMENT</a></b>)</td>
+<td colspan="2"><b>Option to control whether single line comments are formatted</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_LINE_COMMENT">FORMATTER_COMMENT_FORMAT_LINE_COMMENT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to format line comments that start on the first column</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN">FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN</a></b>)</td>
+<td colspan="2"><b>Option to format line comments that start on the first column</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN">FORMATTER_COMMENT_FORMAT_LINE_COMMENT_STARTING_ON_FIRST_COLUMN</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether the header comment of a Java source file is formatted</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_HEADER">FORMATTER_COMMENT_FORMAT_HEADER</a></b>)</td>
+<td colspan="2"><b>Option to control whether the header comment of a Java source file is
+formatted</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_HEADER">FORMATTER_COMMENT_FORMAT_HEADER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether HTML tags are formatted.</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_HTML">FORMATTER_COMMENT_FORMAT_HTML</a></b>)</td>
+<td colspan="2"><b>Option to control whether HTML tags are formatted.</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_HTML">FORMATTER_COMMENT_FORMAT_HTML</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether code snippets are formatted in comments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_SOURCE">FORMATTER_COMMENT_FORMAT_SOURCE</a></b>)</td>
+<td colspan="2"><b>Option to control whether code snippets are formatted in comments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_FORMAT_SOURCE">FORMATTER_COMMENT_FORMAT_SOURCE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether description of Javadoc parameters are indented</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INDENT_PARAMETER_DESCRIPTION">FORMATTER_COMMENT_INDENT_PARAMETER_DESCRIPTION</a></b>)</td>
+<td colspan="2"><b>Option to control whether description of Javadoc parameters are indented</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INDENT_PARAMETER_DESCRIPTION">FORMATTER_COMMENT_INDENT_PARAMETER_DESCRIPTION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether Javadoc root tags are indented.</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INDENT_ROOT_TAGS">FORMATTER_COMMENT_INDENT_ROOT_TAGS</a></b>)</td>
+<td colspan="2"><b>Option to control whether Javadoc root tags are indented.</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INDENT_ROOT_TAGS">FORMATTER_COMMENT_INDENT_ROOT_TAGS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to insert an empty line before the Javadoc root tag block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INSERT_EMPTY_LINE_BEFORE_ROOT_TAGS">FORMATTER_COMMENT_INSERT_EMPTY_LINE_BEFORE_ROOT_TAGS</a></b>)</td>
+<td colspan="2"><b>Option to insert an empty line before the Javadoc root tag block</b>
+(<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INSERT_EMPTY_LINE_BEFORE_ROOT_TAGS">FORMATTER_COMMENT_INSERT_EMPTY_LINE_BEFORE_ROOT_TAGS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line after Javadoc root tag parameters</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INSERT_NEW_LINE_FOR_PARAMETER">FORMATTER_COMMENT_INSERT_NEW_LINE_FOR_PARAMETER</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line after Javadoc root tag parameters</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_INSERT_NEW_LINE_FOR_PARAMETER">FORMATTER_COMMENT_INSERT_NEW_LINE_FOR_PARAMETER</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+
 </tr>
 <tr>
-<td colspan=2><b>Option to specify the line length for comments.</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_LINE_LENGTH">FORMATTER_COMMENT_LINE_LENGTH</a></b>)</td>
+<td colspan="2"><b>Option to specify the line length for comments.</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_LINE_LENGTH">FORMATTER_COMMENT_LINE_LENGTH</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
 <td>"<n>", where n is zero or a positive integer</td>
 </tr>
+
 <tr valign="top">
 <td>Default value</td>
 <td>"80"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to control whether block comments will have new lines at boundaries</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES">FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES</a></b>)</td>
+<td colspan="2"><b>Option to control whether block comments will have new lines at boundaries</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES">FORMATTER_COMMENT_NEW_LINES_AT_BLOCK_BOUNDARIES</a></b>)</td>
+</tr>
+<tr valign="top">
+<td rowspan="2">Possible values</td>
+
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+</tr>
+<tr valign="top">
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+</tr>
+<tr>
+<td colspan="2"><b>Option to control whether javadoc comments will have new lines at boundaries</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES">FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
+
 <tr>
-<td colspan=2><b>Option to control whether javadoc comments will have new lines at boundaries</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES">FORMATTER_COMMENT_NEW_LINES_AT_JAVADOC_BOUNDARIES</a></b>)</td>
+<td colspan="2"><b>Option to preserve existing white space between code and line comments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT">FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
+
 <tr>
-<td colspan=2><b>Option to compact else/if</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMPACT_ELSE_IF">FORMATTER_COMPACT_ELSE_IF</a></b>)</td>
+<td colspan="2"><b>Option to compact else/if</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_COMPACT_ELSE_IF">FORMATTER_COMPACT_ELSE_IF</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to set the continuation indentation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_CONTINUATION_INDENTATION">FORMATTER_CONTINUATION_INDENTATION</a></b>)</td>
+<td colspan="2"><b>Option to set the continuation indentation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_CONTINUATION_INDENTATION">FORMATTER_CONTINUATION_INDENTATION</a></b>)</td>
 </tr>
 <tr valign="top">
 <td>Possible value</td>
+
 <td>"<n>", where n is zero or a positive integer</td>
 </tr>
 <tr valign="top">
@@ -2561,7 +3320,10 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"2"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to set the continuation indentation inside array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER">FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to set the continuation indentation inside array initializer</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER">FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2572,17 +3334,24 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"2"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to use the disabling and enabling tags</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_USE_ON_OFF_TAGS">FORMATTER_USE_ON_OFF_TAGS</a></b>)</td>
+<td colspan="2"><b>Option to use the disabling and enabling tags</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_USE_ON_OFF_TAGS">FORMATTER_USE_ON_OFF_TAGS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to define the tag to put in a comment to disable the formatting</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_DISABLING_TAG">FORMATTER_DISABLING_TAG</a></b>)</td>
+<td colspan="2"><b>Option to define the tag to put in a comment to disable the formatting</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_DISABLING_TAG">FORMATTER_DISABLING_TAG</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible values</td>
@@ -2593,7 +3362,10 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"@format:off"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to define the tag to put in a comment to re-enable the formatting after it has been disabled</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ENABLING_TAG">FORMATTER_ENABLING_TAG</a></b>)</td>
+<td colspan="2"><b>Option to define the tag to put in a comment to re-enable the formatting after
+it has been disabled</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_ENABLING_TAG">FORMATTER_ENABLING_TAG</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible values</td>
@@ -2604,107 +3376,155 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"@format:on"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent body declarations compare to its enclosing annotation declaration header</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ANNOTATION_DECLARATION_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ANNOTATION_DECLARATION_HEADER</a></b>)</td>
+<td colspan="2"><b>Option to indent body declarations compare to its enclosing annotation
+declaration header</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ANNOTATION_DECLARATION_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ANNOTATION_DECLARATION_HEADER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent body declarations compare to its enclosing enum constant header</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_CONSTANT_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_CONSTANT_HEADER</a></b>)</td>
+<td colspan="2"><b>Option to indent body declarations compare to its enclosing enum constant
+header</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_CONSTANT_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_CONSTANT_HEADER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent body declarations compare to its enclosing enum declaration header</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_DECLARATION_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_DECLARATION_HEADER</a></b>)</td>
+<td colspan="2"><b>Option to indent body declarations compare to its enclosing enum declaration
+header</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_DECLARATION_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ENUM_DECLARATION_HEADER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent body declarations compare to its enclosing type header</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_TYPE_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_TYPE_HEADER</a></b>)</td>
+<td colspan="2"><b>Option to indent body declarations compare to its enclosing type header</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_TYPE_HEADER">FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_TYPE_HEADER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent breaks compare to cases</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BREAKS_COMPARE_TO_CASES">FORMATTER_INDENT_BREAKS_COMPARE_TO_CASES</a></b>)</td>
+<td colspan="2"><b>Option to indent breaks compare to cases</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_BREAKS_COMPARE_TO_CASES">FORMATTER_INDENT_BREAKS_COMPARE_TO_CASES</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent empty lines</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_EMPTY_LINES">FORMATTER_INDENT_EMPTY_LINES</a></b>)</td>
+<td colspan="2"><b>Option to indent empty lines</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_EMPTY_LINES">FORMATTER_INDENT_EMPTY_LINES</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent statements inside a block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BLOCK">FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BLOCK</a></b>)</td>
+<td colspan="2"><b>Option to indent statements inside a block</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BLOCK">FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BLOCK</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent statements inside the body of a method or a constructor</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BODY">FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BODY</a></b>)</td>
+<td colspan="2"><b>Option to indent statements inside the body of a method or a constructor</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BODY">FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BODY</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent switch statements compare to cases</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_CASES">FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_CASES</a></b>)</td>
+<td colspan="2"><b>Option to indent switch statements compare to cases</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_CASES">FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_CASES</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent switch statements compare to switch</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH">FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH</a></b>)</td>
+<td colspan="2"><b>Option to indent switch statements compare to switch</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH">FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to specify the equivalent number of spaces that represents one indentation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENTATION_SIZE">FORMATTER_INDENTATION_SIZE</a></b>)</td>
+<td colspan="2"><b>Option to specify the equivalent number of spaces that represents one
+indentation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INDENTATION_SIZE">FORMATTER_INDENTATION_SIZE</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -2714,1780 +3534,2550 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>Default value</td>
 <td>"4"</td>
 </tr>
+
+<tr>
+<td colspan="2"><b>Option to insert a new line after an annotation on a parameter</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER</a></b>)</td>
+
+</tr>
+
+<tr valign="top">
+<td rowspan="2">Possible values</td>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
+</tr>
+<tr valign="top">
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Option to insert a new line after an annotation on a member (package, class, method, field declaration)</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line after an annotation on a field declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD</a></b>)</td>
+
 </tr>
+
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line after an annotation on a parameter</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line after an annotation on a method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD</a></b>)</td>
+
 </tr>
+
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line after an annotation on a local variable</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line after an annotation on a package declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE</a></b>)</td>
+</tr>
+
+<tr valign="top">
+<td rowspan="2">Possible values</td>
+<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+</tr>
+<tr valign="top">
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+</tr>
+<tr>
+<td colspan="2"><b>Option to insert a new line after an annotation on a type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+</tr>
+<tr>
+<td colspan="2"><b>Option to insert a new line after an annotation on a local variable</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE">FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE</a></b>)</td>
+
+</tr>
+<tr valign="top">
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+</tr>
+<tr valign="top">
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line after a label</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_LABEL">FORMATTER_INSERT_NEW_LINE_AFTER_LABEL</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line after a label</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_LABEL">FORMATTER_INSERT_NEW_LINE_AFTER_LABEL</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line after the opening brace in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_NEW_LINE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line after the opening brace in an array initializer</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_NEW_LINE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line at the end of the current file if missing</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AT_END_OF_FILE_IF_MISSING">FORMATTER_INSERT_NEW_LINE_AT_END_OF_FILE_IF_MISSING</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line at the end of the current file if missing</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_AT_END_OF_FILE_IF_MISSING">FORMATTER_INSERT_NEW_LINE_AT_END_OF_FILE_IF_MISSING</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line before the catch keyword in try statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_CATCH_IN_TRY_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_CATCH_IN_TRY_STATEMENT</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line before the catch keyword in try statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_CATCH_IN_TRY_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_CATCH_IN_TRY_STATEMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line before the closing brace in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_NEW_LINE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line before the closing brace in an array initializer</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_NEW_LINE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line before the else keyword in if statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_ELSE_IN_IF_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_ELSE_IN_IF_STATEMENT</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line before the else keyword in if statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_ELSE_IN_IF_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_ELSE_IN_IF_STATEMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line before the finally keyword in try statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_FINALLY_IN_TRY_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_FINALLY_IN_TRY_STATEMENT</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line before the finally keyword in try statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_FINALLY_IN_TRY_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_FINALLY_IN_TRY_STATEMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line before while in do statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_WHILE_IN_DO_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_WHILE_IN_DO_STATEMENT</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line before while in do statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_BEFORE_WHILE_IN_DO_STATEMENT">FORMATTER_INSERT_NEW_LINE_BEFORE_WHILE_IN_DO_STATEMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line in an empty annotation declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANNOTATION_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANNOTATION_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line in an empty annotation declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANNOTATION_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANNOTATION_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line in an empty anonymous type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANONYMOUS_TYPE_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANONYMOUS_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line in an empty anonymous type declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANONYMOUS_TYPE_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANONYMOUS_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line in an empty block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_BLOCK">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_BLOCK</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line in an empty block</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_BLOCK">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_BLOCK</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line in an empty enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_CONSTANT">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line in an empty enum constant</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_CONSTANT">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_CONSTANT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line in an empty enum declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line in an empty enum declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ENUM_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line in an empty method body</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_METHOD_BODY">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_METHOD_BODY</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line in an empty method body</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_METHOD_BODY">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_METHOD_BODY</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a new line in an empty type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_TYPE_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a new line in an empty type declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_TYPE_DECLARATION">FORMATTER_INSERT_NEW_LINE_IN_EMPTY_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after and in wilcard</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_AND_IN_TYPE_PARAMETER">FORMATTER_INSERT_SPACE_AFTER_AND_IN_TYPE_PARAMETER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after and in wilcard</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_AND_IN_TYPE_PARAMETER">FORMATTER_INSERT_SPACE_AFTER_AND_IN_TYPE_PARAMETER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after an assignment operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after an assignment operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after at in annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION">FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after at in annotation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION">FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after at in annotation type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after at in annotation type declaration</b>
+(<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after a binary operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_BINARY_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_BINARY_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after a binary operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_BINARY_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_BINARY_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the closing angle bracket in type arguments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the closing angle bracket in type arguments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the closing angle bracket in type parameters</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the closing angle bracket in type parameters</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the closing brace of a block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_BRACE_IN_BLOCK">FORMATTER_INSERT_SPACE_AFTER_CLOSING_BRACE_IN_BLOCK</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the closing brace of a block</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_BRACE_IN_BLOCK">FORMATTER_INSERT_SPACE_AFTER_CLOSING_BRACE_IN_BLOCK</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the closing parenthesis of a cast expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_PAREN_IN_CAST">FORMATTER_INSERT_SPACE_AFTER_CLOSING_PAREN_IN_CAST</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the closing parenthesis of a cast expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_CLOSING_PAREN_IN_CAST">FORMATTER_INSERT_SPACE_AFTER_CLOSING_PAREN_IN_CAST</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the colon in an assert statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_ASSERT">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_ASSERT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the colon in an assert statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_ASSERT">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_ASSERT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after colon in a case statement when a opening brace follows the colon</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CASE">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CASE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after colon in a case statement when a opening brace
+follows the colon</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CASE">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CASE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the colon in a conditional expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CONDITIONAL</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the colon in a conditional expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CONDITIONAL</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after colon in a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_FOR">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_FOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after colon in a for statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_FOR">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_FOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the colon in a labeled statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_LABELED_STATEMENT">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_LABELED_STATEMENT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the colon in a labeled statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COLON_IN_LABELED_STATEMENT">FORMATTER_INSERT_SPACE_AFTER_COLON_IN_LABELED_STATEMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in an allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in an allocation expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ALLOCATION_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ANNOTATION">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in annotation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ANNOTATION">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ANNOTATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in an array initializer</b>
+(<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the parameters of a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the parameters of a constructor
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the exception names in a throws clause of a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the exception names in a throws
+clause of a constructor declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the arguments of an enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_CONSTANT_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_CONSTANT_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the arguments of an enum
+constant</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_CONSTANT_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_CONSTANT_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in enum declarations</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_DECLARATIONS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_DECLARATIONS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in enum declarations</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_DECLARATIONS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_ENUM_DECLARATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the arguments of an explicit constructor call</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the arguments of an explicit
+constructor call</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the increments of a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INCREMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INCREMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the increments of a for
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INCREMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INCREMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the initializations of a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INITS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INITS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the initializations of a for
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INITS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INITS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the parameters of a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the parameters of a method
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the exception names in a throws clause of a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_THROWS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the exception names in a throws
+clause of a method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_DECLARATION_THROWS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in the arguments of a method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_INVOCATION_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_INVOCATION_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in the arguments of a method
+invocation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_INVOCATION_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_METHOD_INVOCATION_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in multiple field declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in multiple field declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in multiple local declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in multiple local declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in parameterized type reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in parameterized type reference</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in superinterfaces names of a type header</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_SUPERINTERFACES">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_SUPERINTERFACES</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in superinterfaces names of a type
+header</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_SUPERINTERFACES">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_SUPERINTERFACES</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in type arguments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in type arguments</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the comma in type parameters</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the comma in type parameters</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after ellipsis</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_ELLIPSIS">FORMATTER_INSERT_SPACE_AFTER_ELLIPSIS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after ellipsis</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_ELLIPSIS">FORMATTER_INSERT_SPACE_AFTER_ELLIPSIS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening angle bracket in parameterized type reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening angle bracket in parameterized type
+reference</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening angle bracket in type arguments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening angle bracket in type arguments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening angle bracket in type parameters</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening angle bracket in type parameters</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening brace in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening brace in an array initializer</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening bracket inside an array allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening bracket inside an array allocation
+expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening bracket inside an array reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_REFERENCE">FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening bracket inside an array reference</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_REFERENCE">FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ANNOTATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in annotation</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ANNOTATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ANNOTATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a cast expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CAST">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CAST</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a cast expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CAST">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CAST</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a catch</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CATCH">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CATCH</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a catch</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CATCH">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CATCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a constructor
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in enum constant</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ENUM_CONSTANT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_FOR">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_FOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a for statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_FOR">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_FOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in an if statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_IF">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_IF</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in an if statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_IF">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_IF</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a method
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a method
+invocation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_METHOD_INVOCATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a parenthesized expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a parenthesized
+expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a switch statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SWITCH">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SWITCH</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a switch statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SWITCH">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SWITCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a synchronized statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SYNCHRONIZED">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SYNCHRONIZED</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a synchronized
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SYNCHRONIZED">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_SYNCHRONIZED</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after the opening parenthesis in a while statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_WHILE">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_WHILE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after the opening parenthesis in a while statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_WHILE">FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_WHILE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after a postfix operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_POSTFIX_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_POSTFIX_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after a postfix operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_POSTFIX_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_POSTFIX_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after a prefix operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_PREFIX_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_PREFIX_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after a prefix operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_PREFIX_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_PREFIX_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after question mark in a conditional expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_CONDITIONAL</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after question mark in a conditional expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_CONDITIONAL</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after question mark in a wildcard</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_WILDCARD">FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_WILDCARD</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after question mark in a wildcard</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_WILDCARD">FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_WILDCARD</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after semicolon in a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_SEMICOLON_IN_FOR">FORMATTER_INSERT_SPACE_AFTER_SEMICOLON_IN_FOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after semicolon in a for statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_SEMICOLON_IN_FOR">FORMATTER_INSERT_SPACE_AFTER_SEMICOLON_IN_FOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space after an unary operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_UNARY_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_UNARY_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space after an unary operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_AFTER_UNARY_OPERATOR">FORMATTER_INSERT_SPACE_AFTER_UNARY_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before and in wildcard</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_AND_IN_TYPE_PARAMETER">FORMATTER_INSERT_SPACE_BEFORE_AND_IN_TYPE_PARAMETER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before and in wildcard</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_AND_IN_TYPE_PARAMETER">FORMATTER_INSERT_SPACE_BEFORE_AND_IN_TYPE_PARAMETER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before an assignment operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before an assignment operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before at in annotation type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_AT_IN_ANNOTATION_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_AT_IN_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before at in annotation type declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_AT_IN_ANNOTATION_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_AT_IN_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before an binary operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_BINARY_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_BINARY_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before an binary operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_BINARY_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_BINARY_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing angle bracket in parameterized type reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing angle bracket in parameterized type
+reference</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing angle bracket in type arguments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing angle bracket in type arguments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing angle bracket in type parameters</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing angle bracket in type parameters</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing brace in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing brace in an array initializer</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing bracket in an array allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing bracket in an array allocation
+expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing bracket in an array reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing bracket in an array reference</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ANNOTATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in annotation</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ANNOTATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ANNOTATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a cast expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CAST">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CAST</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a cast expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CAST">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CAST</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a catch</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CATCH">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CATCH</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a catch</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CATCH">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CATCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a constructor
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in enum constant</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_ENUM_CONSTANT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_FOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a for statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_FOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in an if statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_IF">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_IF</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in an if statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_IF">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_IF</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a method
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a method
+invocation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_METHOD_INVOCATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a parenthesized expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_PARENTHESIZED_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_PARENTHESIZED_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a parenthesized
+expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_PARENTHESIZED_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_PARENTHESIZED_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a switch statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SWITCH">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SWITCH</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a switch
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SWITCH">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SWITCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a synchronized statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SYNCHRONIZED">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SYNCHRONIZED</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a synchronized
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SYNCHRONIZED">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_SYNCHRONIZED</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the closing parenthesis in a while statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_WHILE">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_WHILE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the closing parenthesis in a while statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_WHILE">FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_WHILE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before colon in an assert statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_ASSERT">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_ASSERT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before colon in an assert statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_ASSERT">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_ASSERT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before colon in a case statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CASE">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CASE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before colon in a case statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CASE">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CASE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before colon in a conditional expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CONDITIONAL</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before colon in a conditional expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CONDITIONAL</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before colon in a default statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_DEFAULT">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_DEFAULT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before colon in a default statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_DEFAULT">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_DEFAULT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before colon in a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_FOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before colon in a for statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_FOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before colon in a labeled statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_LABELED_STATEMENT">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_LABELED_STATEMENT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before colon in a labeled statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_LABELED_STATEMENT">FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_LABELED_STATEMENT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in an allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in an allocation expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ALLOCATION_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ANNOTATION">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in annotation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ANNOTATION">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ANNOTATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in an array initializer</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the parameters of a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the parameters of a constructor
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the exception names of the throws clause of a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the exception names of the throws
+clause of a constructor declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_CONSTRUCTOR_DECLARATION_THROWS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the arguments of enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_CONSTANT_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_CONSTANT_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the arguments of enum constant</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_CONSTANT_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_CONSTANT_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in enum declarations</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_DECLARATIONS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_DECLARATIONS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in enum declarations</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_DECLARATIONS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_ENUM_DECLARATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the arguments of an explicit constructor call</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the arguments of an explicit
+constructor call</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_EXPLICIT_CONSTRUCTOR_CALL_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the increments of a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INCREMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INCREMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the increments of a for statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INCREMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INCREMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the initializations of a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INITS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INITS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the initializations of a for
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INITS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INITS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the parameters of a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the parameters of a method
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the exception names of the throws clause of a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_THROWS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the exception names of the throws
+clause of a method declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_THROWS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_DECLARATION_THROWS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the arguments of a method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_INVOCATION_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_INVOCATION_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the arguments of a method
+invocation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_INVOCATION_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_METHOD_INVOCATION_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in a multiple field declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in a multiple field declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in a multiple local declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in a multiple local declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in parameterized type reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in parameterized type reference</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in the superinterfaces names in a type header</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_SUPERINTERFACES">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_SUPERINTERFACES</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in the superinterfaces names in a type
+header</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_SUPERINTERFACES">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_SUPERINTERFACES</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in type arguments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in type arguments</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before comma in type parameters</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before comma in type parameters</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before ellipsis</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_ELLIPSIS">FORMATTER_INSERT_SPACE_BEFORE_ELLIPSIS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before ellipsis</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_ELLIPSIS">FORMATTER_INSERT_SPACE_BEFORE_ELLIPSIS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening angle bracket in parameterized type reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening angle bracket in parameterized type
+reference</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening angle bracket in type arguments</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening angle bracket in type arguments</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS">FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening angle bracket in type parameters</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening angle bracket in type parameters</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS">FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in an annotation type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANNOTATION_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in an annotation type
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANNOTATION_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANNOTATION_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in an anonymous type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANONYMOUS_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANONYMOUS_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in an anonymous type
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANONYMOUS_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANONYMOUS_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in an array initializer</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in a block</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_BLOCK">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_BLOCK</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in a block</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_BLOCK">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_BLOCK</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in a constructor
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in an enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in an enum constant</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_CONSTANT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in an enum declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in an enum declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in a method declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_METHOD_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in a switch statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_SWITCH">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_SWITCH</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in a switch statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_SWITCH">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_SWITCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening brace in a type declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_TYPE_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening brace in a type declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_TYPE_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_TYPE_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening bracket in an array allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening bracket in an array allocation
+expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening bracket in an array reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening bracket in an array reference</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening bracket in an array type reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening bracket in an array type
+reference</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in annotation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in annotation</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in annotation type member declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION_TYPE_MEMBER_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION_TYPE_MEMBER_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in annotation type
+member declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION_TYPE_MEMBER_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION_TYPE_MEMBER_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a catch</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CATCH">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CATCH</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a catch</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CATCH">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CATCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a constructor
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in enum constant</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ENUM_CONSTANT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_FOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a for statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_FOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in an if statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_IF">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_IF</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in an if statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_IF">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_IF</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a method
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a method
+invocation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_INVOCATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a parenthesized expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a parenthesized
+expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a switch statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SWITCH">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SWITCH</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a switch
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SWITCH">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SWITCH</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a synchronized statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SYNCHRONIZED">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SYNCHRONIZED</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a synchronized
+statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SYNCHRONIZED">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SYNCHRONIZED</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before the opening parenthesis in a while statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_WHILE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_WHILE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before the opening parenthesis in a while statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_WHILE">FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_WHILE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before parenthesized expression in return statement
-  </b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_RETURN">FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_RETURN</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before parenthesized expression in return statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_RETURN">FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_RETURN</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before parenthesized expression in throw statement
-  </b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_THROW">FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_THROW</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before parenthesized expression in throw statement</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_THROW">FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_THROW</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before a postfix operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_POSTFIX_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_POSTFIX_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before a postfix operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_POSTFIX_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_POSTFIX_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before a prefix operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_PREFIX_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_PREFIX_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before a prefix operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_PREFIX_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_PREFIX_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before question mark in a conditional expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_CONDITIONAL</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before question mark in a conditional expression</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_CONDITIONAL">FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_CONDITIONAL</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT"><i>INSERT</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT">DO_NOT_INSERT</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before question mark in a wildcard</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_WILDCARD">FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_WILDCARD</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before question mark in a wildcard</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_WILDCARD">FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_WILDCARD</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before semicolon</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON">FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before semicolon</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON">FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before semicolon in for statement</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON_IN_FOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before semicolon in for statement</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON_IN_FOR">FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON_IN_FOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space before unary operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_UNARY_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_UNARY_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to insert a space before unary operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BEFORE_UNARY_OPERATOR">FORMATTER_INSERT_SPACE_BEFORE_UNARY_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between brackets in an array type reference</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_BRACKETS_IN_ARRAY_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BETWEEN_BRACKETS_IN_ARRAY_TYPE_REFERENCE</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between brackets in an array type reference</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_BRACKETS_IN_ARRAY_TYPE_REFERENCE">FORMATTER_INSERT_SPACE_BETWEEN_BRACKETS_IN_ARRAY_TYPE_REFERENCE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between empty braces in an array initializer</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACES_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACES_IN_ARRAY_INITIALIZER</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between empty braces in an array initializer</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACES_IN_ARRAY_INITIALIZER">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACES_IN_ARRAY_INITIALIZER</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between empty brackets in an array allocation expression</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACKETS_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACKETS_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between empty brackets in an array allocation
+expression</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACKETS_IN_ARRAY_ALLOCATION_EXPRESSION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACKETS_IN_ARRAY_ALLOCATION_EXPRESSION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between empty parenthesis in an annotation type member declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ANNOTATION_TYPE_MEMBER_DECLARATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ANNOTATION_TYPE_MEMBER_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between empty parenthesis in an annotation type member
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ANNOTATION_TYPE_MEMBER_DECLARATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ANNOTATION_TYPE_MEMBER_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between empty parenthesis in a constructor declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between empty parenthesis in a constructor
+declaration</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_CONSTRUCTOR_DECLARATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_CONSTRUCTOR_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between empty parenthesis in enum constant</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ENUM_CONSTANT</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between empty parenthesis in enum constant</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ENUM_CONSTANT">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ENUM_CONSTANT</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between empty parenthesis in a method declaration</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_DECLARATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between empty parenthesis in a method declaration</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_DECLARATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_DECLARATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to insert a space between empty parenthesis in a method invocation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_INVOCATION</a></b>)</td>
+<td colspan="2"><b>Option to insert a space between empty parenthesis in a method invocation</b>
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_INVOCATION">FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_INVOCATION</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
+<td rowspan="2">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#INSERT">INSERT</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DO_NOT_INSERT"><i>DO_NOT_INSERT</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to keep else statement on the same line</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_ELSE_STATEMENT_ON_SAME_LINE">FORMATTER_KEEP_ELSE_STATEMENT_ON_SAME_LINE</a></b>)</td>
+<td colspan="2"><b>Option to keep else statement on the same line</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_ELSE_STATEMENT_ON_SAME_LINE">FORMATTER_KEEP_ELSE_STATEMENT_ON_SAME_LINE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to keep empty array initializer one line</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_EMPTY_ARRAY_INITIALIZER_ON_ONE_LINE">FORMATTER_KEEP_EMPTY_ARRAY_INITIALIZER_ON_ONE_LINE</a></b>)</td>
+<td colspan="2"><b>Option to keep empty array initializer one line</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_EMPTY_ARRAY_INITIALIZER_ON_ONE_LINE">FORMATTER_KEEP_EMPTY_ARRAY_INITIALIZER_ON_ONE_LINE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to keep guardian clause on one line</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_GUARDIAN_CLAUSE_ON_ONE_LINE">FORMATTER_KEEP_GUARDIAN_CLAUSE_ON_ONE_LINE</a></b>)</td>
+<td colspan="2"><b>Option to keep guardian clause on one line</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_GUARDIAN_CLAUSE_ON_ONE_LINE">FORMATTER_KEEP_GUARDIAN_CLAUSE_ON_ONE_LINE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to keep simple if statement on the one line</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_SIMPLE_IF_ON_ONE_LINE">FORMATTER_KEEP_SIMPLE_IF_ON_ONE_LINE</a></b>)</td>
+<td colspan="2"><b>Option to keep simple if statement on the one line</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_SIMPLE_IF_ON_ONE_LINE">FORMATTER_KEEP_SIMPLE_IF_ON_ONE_LINE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to keep then statement on the same line</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_THEN_STATEMENT_ON_SAME_LINE">FORMATTER_KEEP_THEN_STATEMENT_ON_SAME_LINE</a></b>)</td>
+<td colspan="2"><b>Option to keep then statement on the same line</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_KEEP_THEN_STATEMENT_ON_SAME_LINE">FORMATTER_KEEP_THEN_STATEMENT_ON_SAME_LINE</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to specify the length of the page. Beyond this length, the formatter will try to split the code</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_LINE_SPLIT">FORMATTER_LINE_SPLIT</a></b>)</td>
+<td colspan="2"><b>Option to specify the length of the page. Beyond this length, the formatter will
+try to split the code</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_LINE_SPLIT">FORMATTER_LINE_SPLIT</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -4498,27 +6088,37 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"80"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent block comments that start on the first column</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN">FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN</a></b>)</td>
+<td colspan="2"><b>Option to indent block comments that start on the first column</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN">FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to indent line comments that start on the first column</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN">FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN</a></b>)</td>
+<td colspan="2"><b>Option to indent line comments that start on the first column</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN">FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to specify the number of empty lines to preserve</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE">FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE</a></b>)</td>
+<td colspan="2"><b>Option to specify the number of empty lines to preserve</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE">FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -4529,30 +6129,41 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"0"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to specify whether or not empty statement should be on a new line</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_PUT_EMPTY_STATEMENT_ON_NEW_LINE">FORMATTER_PUT_EMPTY_STATEMENT_ON_NEW_LINE</a></b>)</td>
+<td colspan="2"><b>Option to specify whether or not empty statement should be on a new line</b>
+
+(<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_PUT_EMPTY_STATEMENT_ON_NEW_LINE">FORMATTER_PUT_EMPTY_STATEMENT_ON_NEW_LINE</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to specify the tabulation size</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_TAB_CHAR">FORMATTER_TAB_CHAR</a></b>)</td>
+<td colspan="2"><b>Option to specify the tabulation size</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_TAB_CHAR">FORMATTER_TAB_CHAR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=3>Possible values</td>
+<td rowspan="3">Possible values</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#TAB"><i>TAB</i></a></b></td>
 </tr>
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#SPACE">SPACE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#MIXED">MIXED</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#MIXED">MIXED</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to specify the equivalent number of spaces that represents one tabulation</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_TAB_SIZE">FORMATTER_TAB_SIZE</a></b>)</td>
+<td colspan="2"><b>Option to specify the equivalent number of spaces that represents one
+tabulation</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_TAB_SIZE">FORMATTER_TAB_SIZE</a></b>)</td>
+
 </tr>
 <tr valign="top">
 <td>Possible value</td>
@@ -4563,201 +6174,240 @@ in a <a HREF="#compatibility"><b>compatibility table</b></a> below.
 <td>"4"</td>
 </tr>
 <tr>
-<td colspan=2><b>Option to use tabulations only for leading indentations</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_USE_TABS_ONLY_FOR_LEADING_INDENTATIONS">FORMATTER_USE_TABS_ONLY_FOR_LEADING_INDENTATIONS</a></b>)</td>
+<td colspan="2"><b>Option to use tabulations only for leading indentations</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_USE_TABS_ONLY_FOR_LEADING_INDENTATIONS">FORMATTER_USE_TABS_ONLY_FOR_LEADING_INDENTATIONS</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE">TRUE</a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE"><i>FALSE</i></a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to wrap before the binary operator</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_WRAP_BEFORE_BINARY_OPERATOR">FORMATTER_WRAP_BEFORE_BINARY_OPERATOR</a></b>)</td>
+<td colspan="2"><b>Option to wrap before the binary operator</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_WRAP_BEFORE_BINARY_OPERATOR">FORMATTER_WRAP_BEFORE_BINARY_OPERATOR</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 <tr>
-<td colspan=2><b>Option to wrap outer expressions in nested expressions</b> (<b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_WRAP_OUTER_EXPRESSIONS_WHEN_NESTED">FORMATTER_WRAP_OUTER_EXPRESSIONS_WHEN_NESTED</a></b>)</td>
+<td colspan="2"><b>Option to wrap outer expressions in nested expressions</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FORMATTER_WRAP_OUTER_EXPRESSIONS_WHEN_NESTED">FORMATTER_WRAP_OUTER_EXPRESSIONS_WHEN_NESTED</a></b>)</td>
+
 </tr>
 <tr valign="top">
-<td rowspan=2>Possible values</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
+<td rowspan="2">Possible values</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#TRUE"><i>TRUE</i></a></b></td>
 </tr>
 <tr valign="top">
-<td><b><a href="../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/formatter/DefaultCodeFormatterConstants.html#FALSE">FALSE</a></b></td>
 </tr>
 </table>
-
-<H4><a name="codeassist">CodeAssist options</a></h4>
-
-<table BORDER CELLSPACING=2 CELLPADDING=2 WIDTH="100%" >
+<h4><a name="codeassist" id="codeassist">CodeAssist options</a></h4>
+<table border="1" cellspacing="2" cellpadding="2" width="100%">
 <tr>
 <th>Description</th>
-<th width=80>Values</th>
-</tr>
 
+<th width="80">Values</th>
+</tr>
 <tr>
-<td colspan=2><b>Define the Prefixes for Argument Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_ARGUMENT_PREFIXES">CODEASSIST_ARGUMENT_PREFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Prefixes for Argument Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_ARGUMENT_PREFIXES">CODEASSIST_ARGUMENT_PREFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the prefixes is non empty, completion for argument name will
-  begin with one of the proposed prefixes.</td>
-<td>{<prefix>[,<prefix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the prefixes is non empty, completion for argument name will begin with one of
+the proposed prefixes.</td>
+<td>{<prefix>[,<prefix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Define the Suffixes for Argument Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_ARGUMENT_SUFFIXES">CODEASSIST_ARGUMENT_SUFFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Suffixes for Argument Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_ARGUMENT_SUFFIXES">CODEASSIST_ARGUMENT_SUFFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the suffixes is non empty, completion for argument name will end
-  with one of the proposed suffixes.</td>
-<td>{<suffix>[,<suffix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the suffixes is non empty, completion for argument name will end with one of
+the proposed suffixes.</td>
+<td>{<suffix>[,<suffix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Activate Camel Case Sensitive Completion</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_CAMEL_CASE_MATCH">CODEASSIST_CAMEL_CASE_MATCH</a></b>)</td>
+<td colspan="2"><b>Activate Camel Case Sensitive Completion</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_CAMEL_CASE_MATCH">CODEASSIST_CAMEL_CASE_MATCH</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, completion shows proposals whose name match the 
-  CamelCase pattern.</td>
-<td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
+<td rowspan="2">When enabled, completion shows proposals whose name match the CamelCase
+pattern.</td>
+<td><b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED"><i>ENABLED</i></a></b></td>
 </tr>
+
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Activate Deprecation Sensitive Completion</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_DEPRECATION_CHECK">CODEASSIST_DEPRECATION_CHECK</a></b>)</td>
+<td colspan="2"><b>Activate Deprecation Sensitive Completion</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_DEPRECATION_CHECK">CODEASSIST_DEPRECATION_CHECK</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, completion doesn't propose deprecated members and types.</td>
+<td rowspan="2">When enabled, completion doesn't propose deprecated members and types.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Activate Discouraged Reference Sensitive Completion</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_DISCOURAGED_REFERENCE_CHECK">CODEASSIST_DISCOURAGED_REFERENCE_CHECK</a></b>)</td>
+<td colspan="2"><b>Activate Discouraged Reference Sensitive Completion</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_DISCOURAGED_REFERENCE_CHECK">CODEASSIST_DISCOURAGED_REFERENCE_CHECK</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, completion doesn't propose elements which match a
-  discouraged reference rule.</td>
+<td rowspan="2">When enabled, completion doesn't propose elements which match a discouraged
+reference rule.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Define the Prefixes for Field Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_FIELD_PREFIXES">CODEASSIST_FIELD_PREFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Prefixes for Field Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_FIELD_PREFIXES">CODEASSIST_FIELD_PREFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the prefixes is non empty, completion for field name will
-  begin with one of the proposed prefixes.</td>
-<td>{<prefix>[,<prefix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the prefixes is non empty, completion for field name will begin with one of
+the proposed prefixes.</td>
+<td>{<prefix>[,<prefix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Define the Suffixes for Field Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_FIELD_SUFFIXES">CODEASSIST_FIELD_SUFFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Suffixes for Field Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_FIELD_SUFFIXES">CODEASSIST_FIELD_SUFFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the suffixes is non empty, completion for field name will end
-  with one of the proposed suffixes.</td>
-<td>{<suffix>[,<suffix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the suffixes is non empty, completion for field name will end with one of the
+proposed suffixes.</td>
+<td>{<suffix>[,<suffix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Activate Forbidden Reference Sensitive Completion</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_FORBIDDEN_REFERENCE_CHECK">CODEASSIST_FORBIDDEN_REFERENCE_CHECK</a></b>)</td>
+<td colspan="2"><b>Activate Forbidden Reference Sensitive Completion</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_FORBIDDEN_REFERENCE_CHECK">CODEASSIST_FORBIDDEN_REFERENCE_CHECK</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, completion doesn't propose elements which match a
-  forbidden reference rule.</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
+<td rowspan="2">When enabled, completion doesn't propose elements which match a forbidden reference
+rule.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
 </tr>
+
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Automatic Qualification of Implicit Members</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_IMPLICIT_QUALIFICATION">CODEASSIST_IMPLICIT_QUALIFICATION</a></b>)</td>
+<td colspan="2"><b>Automatic Qualification of Implicit Members</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_IMPLICIT_QUALIFICATION">CODEASSIST_IMPLICIT_QUALIFICATION</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, completion automatically qualifies completion on implicit field references and message expressions.</td>
+<td rowspan="2">When enabled, completion automatically qualifies completion on implicit field
+references and message expressions.</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Define the Prefixes for Local Variable Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_LOCAL_PREFIXES">CODEASSIST_LOCAL_PREFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Prefixes for Local Variable Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_LOCAL_PREFIXES">CODEASSIST_LOCAL_PREFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the prefixes is non empty, completion for local variable name will
-  begin with one of the proposed prefixes.</td>
-<td>{<prefix>[,<prefix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the prefixes is non empty, completion for local variable name will begin with
+one of the proposed prefixes.</td>
+<td>{<prefix>[,<prefix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Define the Suffixes for Local Variable Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_LOCAL_SUFFIXES">CODEASSIST_LOCAL_SUFFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Suffixes for Local Variable Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_LOCAL_SUFFIXES">CODEASSIST_LOCAL_SUFFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the suffixes is non empty, completion for local variable name will end
-  with one of the proposed suffixes.</td>
-<td>{<suffix>[,<suffix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the suffixes is non empty, completion for local variable name will end with
+one of the proposed suffixes.</td>
+<td>{<suffix>[,<suffix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Define the Prefixes for Static Field Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_STATIC_FIELD_PREFIXES">CODEASSIST_STATIC_FIELD_PREFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Prefixes for Static Field Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_STATIC_FIELD_PREFIXES">CODEASSIST_STATIC_FIELD_PREFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the prefixes is non empty, completion for static field name will
-  begin with one of the proposed prefixes.</td>
-<td>{<prefix>[,<prefix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the prefixes is non empty, completion for static field name will begin with
+one of the proposed prefixes.</td>
+<td>{<prefix>[,<prefix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Define the Suffixes for Static Field Name</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_STATIC_FIELD_SUFFIXES">CODEASSIST_STATIC_FIELD_SUFFIXES</a></b>)</td>
+<td colspan="2"><b>Define the Suffixes for Static Field Name</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_STATIC_FIELD_SUFFIXES">CODEASSIST_STATIC_FIELD_SUFFIXES</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=1>When the suffixes is non empty, completion for static field name will end
-  with one of the proposed suffixes.</td>
-<td>{<suffix>[,<suffix>]*}.<br><b><i>Default value is ""</i></b></td>
-</tr>
+<td rowspan="1">When the suffixes is non empty, completion for static field name will end with one
+of the proposed suffixes.</td>
+<td>{<suffix>[,<suffix>]*}.<br />
 
+<b><i>Default value is ""</i></b></td>
+</tr>
 <tr>
-<td colspan=2><b>Activate Suggestion of Static Import</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_SUGGEST_STATIC_IMPORTS">CODEASSIST_SUGGEST_STATIC_IMPORTS</a></b>)</td>
+<td colspan="2"><b>Activate Suggestion of Static Import</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_SUGGEST_STATIC_IMPORTS">CODEASSIST_SUGGEST_STATIC_IMPORTS</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, completion proposals can contain static import pattern.</td>
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
+<td rowspan="2">When enabled, completion proposals can contain static import pattern.</td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></i></b></td>
 </tr>
+
 <tr valign="top">
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></b></td>
 </tr>
-
 <tr>
-<td colspan=2><b>Activate Visibility Sensitive Completion</b> (<b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_VISIBILITY_CHECK">CODEASSIST_VISIBILITY_CHECK</a></b>)</td>
+<td colspan="2"><b>Activate Visibility Sensitive Completion</b> (<b><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#CODEASSIST_VISIBILITY_CHECK">CODEASSIST_VISIBILITY_CHECK</a></b>)</td>
 </tr>
 <tr valign="top">
-<td rowspan=2>When enabled, completion doesn't propose elements that are not
-  visible at the insertion point according to Java visibility rules (e.g. the 
-  private methods of a super class are not proposed).</td>
+<td rowspan="2">When enabled, completion doesn't propose elements that are not visible at the
+insertion point according to Java visibility rules (e.g. the private methods of a super class are
+not proposed).</td>
 <td><b><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#ENABLED">ENABLED</a></b></td>
+
 </tr>
 <tr valign="top">
-<td><b><i><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
+<td><b><i><a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html#DISABLED">DISABLED</a></i></b></td>
 </tr>
-
 </table>
-
-
-</BODY>
-</HTML>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_prompter.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_prompter.htm
index 96083a8..004db6d 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_prompter.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_prompter.htm
@@ -1,24 +1,30 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Creating Java specific prompter dialogs</title>
-<link rel="stylesheet" type="text/css" href="../book.css">
+<link rel="stylesheet" type="text/css" href="../book.css" />
 </head>
 <body>
 <h3>Creating Java specific prompter dialogs</h3>
-<p> The following snippet uses the <b><a href="../reference/api/org/eclipse/jdt/ui/JavaUI.html">JavaUI</a> </b>class to open the Open Type dialog:</p>
-<pre><font color="#4444cc">    public IType selectType() throws JavaModelException {
+<p>The following snippet uses the <b><a href=
+"../reference/api/org/eclipse/jdt/ui/JavaUI.html">JavaUI</a></b> class to open the Open Type
+dialog:</p>
+
+<pre class="color1">
+    public IType selectType() throws JavaModelException {
         Shell parent = ...;
         SelectionDialog dialog= JavaUI.createTypeDialog(
             parent, new ProgressMonitorDialog(parent),
             SearchEngine.createWorkspaceScope(),
             IJavaElementSearchConstants.CONSIDER_ALL_TYPES, false);
-        dialog.setTitle("My Dialog Title");
-        dialog.setMessage("My Dialog Message");
+        dialog.setTitle("My Dialog Title");
+        dialog.setMessage("My Dialog Message");
         if (dialog.open() == IDialogConstants.CANCEL_ID)
             return null;
 
@@ -26,10 +32,9 @@
         if (types == null || types.length == 0)
             return null;
         return (IType)types[0];
-    }</font></pre>
-<p> <a href="../reference/api/org/eclipse/jdt/ui/JavaUI.html"><b>JavaUI</b></a> 
-  provides additional methods for creating Open Package and Open Main Type dialogs. 
-</p>
-
+    }
+</pre>
+<p><a href="../reference/api/org/eclipse/jdt/ui/JavaUI.html"><b>JavaUI</b></a> provides additional
+methods for creating Open Package and Open Main Type dialogs.</p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_render.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_render.htm
index 4e7169f..854f743 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_render.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_render.htm
@@ -1,33 +1,39 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Presenting Java elements in a JFace viewer</title>
+
 </head>
 <body>
 <h2>Presenting Java elements in a JFace viewer</h2>
-<p> The JDT UI API provides classes that allow you to present the Java model or parts 
-  of it in a standard JFace viewer. This functionality is provided primarily by: 
-</p>
+<p>The JDT UI API provides classes that allow you to present the Java model or parts of it in a
+standard JFace viewer. This functionality is provided primarily by:</p>
+
 <ul>
-  <li><a href="../reference/api/org/eclipse/jdt/ui/StandardJavaElementContentProvider.html"> 
-    <b> 
-    StandardJavaElementContentProvider</b></a>  - translates the Java element hierarchy 
-    into a data structure accessible by a tree, table or list viewer</li>
-  <li><a href="../reference/api/org/eclipse/jdt/ui/JavaElementLabelProvider.html"> 
-    <b> 
-    JavaElementLabelProvider</b></a>  - provides corresponding images and labels 
-    for a standard JFace viewer</li>
-	<li><a
-		href="../reference/api/org/eclipse/jdt/ui/JavaElementLabels.html"><b>JavaElementLabels</b></a> - provides corresponding text labels for Java elements</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/StandardJavaElementContentProvider.html"><b>StandardJavaElementContentProvider</b></a>
+- translates the Java element hierarchy into a data structure accessible by a tree, table or list
+viewer</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/JavaElementLabelProvider.html"><b>JavaElementLabelProvider</b></a>
+- provides corresponding images and labels for a standard JFace viewer</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/JavaElementLabels.html"><b>JavaElementLabels</b></a> -
+provides corresponding text labels for Java elements</li>
 </ul>
-<p>Content and label providers for JFace viewers are described in detail in <a href="../../org.eclipse.platform.doc.isv/guide/jface_viewers.htm" class="XRef">JFace
-viewers</a>.</p>
-If you understand the basic platform mechanism, then putting the Java content
-and label providers together is quite simple:
-<pre><font color="#4444cc">    ...
+<p>Content and label providers for JFace viewers are described in detail in <a href=
+"../../org.eclipse.platform.doc.isv/guide/jface_viewers.htm" class="XRef">JFace viewers</a>.</p>
+
+If you understand the basic platform mechanism, then putting the Java content and label providers
+together is quite simple:
+<pre class="color1">
+    ...
     TreeViewer viewer= new TreeViewer(parent);
     // Provide members of a compilation unit or class file
     ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true);
@@ -40,75 +46,83 @@ and label providers together is quite simple:
     viewer.setLabelProvider(labelProvider);
     // Using the Java model as the viewers input present Java projects on the first level.
     viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
-    ...</font></pre>
-<p>The example above uses a Java model (<a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b>IJavaModel</b></a>)
-as the input element for the viewer.  The <a href="../reference/api/org/eclipse/jdt/ui/StandardJavaElementContentProvider.html"><b>StandardJavaElementContentProvider</b></a>
-also supports <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b> 
-      IJavaProject</b></a>, <a href="../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b> 
-      IPackageFragmentRoot</b></a>, <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b> 
-      IPackageFragment</b></a>, and <b>IFolder</b> as input elements: 
-</p>
+    ...
+</pre>
+<p>The example above uses a Java model (<a href=
+"../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b>IJavaModel</b></a>) as the input element
+for the viewer.  The <a href=
+"../reference/api/org/eclipse/jdt/ui/StandardJavaElementContentProvider.html"><b>StandardJavaElementContentProvider</b></a>
+also supports <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b>IJavaProject</b></a>, <a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b>IPackageFragmentRoot</b></a>,
+
+<a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b>IPackageFragment</b></a>,
+and <b>IFolder</b> as input elements:</p>
 <h3>Overlaying images with Java information</h3>
-        <p><a href="../reference/api/org/eclipse/jdt/ui/JavaElementImageDescriptor.html"><b> 
-    JavaElementImageDescriptor</b></a> can be used to create an image based on an 
-    arbitrary base image descriptor and a set of flags specifying which Java specific 
-    adornments (e.g. static, final, synchronized, ....) are to be superimposed 
-    on the image.</p>
+<p><a href=
+"../reference/api/org/eclipse/jdt/ui/JavaElementImageDescriptor.html"><b>JavaElementImageDescriptor</b></a>
+can be used to create an image based on an arbitrary base image descriptor and a set of flags
+specifying which Java specific adornments (e.g. static, final, synchronized, ....) are to be
+superimposed on the image.</p>
 <h3>Adding problem and override decorators</h3>
-When a viewer is supposed to include problem annotations, the JFace <b>DecoratingLabelProvider</b> 
-together with the <a href="../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html"> 
-<b> 
-ProblemsLabelDecorator</b></a> is used. The snippet below illustrates the use of
-a problem label decorator.
-<pre><font color="#4444cc">    ...
+When a viewer is supposed to include problem annotations, the JFace <b>DecoratingLabelProvider</b>
+
+together with the <a href=
+"../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html"><b>ProblemsLabelDecorator</b></a>
+is used. The snippet below illustrates the use of a problem label decorator.
+<pre class="color1">
+    ...
     DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
     viewer.setLabelProvider(decorator);
-    ...</font></pre>
-<p> In the same way the <a href="../reference/api/org/eclipse/jdt/ui/OverrideIndicatorLabelDecorator.html"> 
-  <b> 
-  OverrideIndicatorLabelDecorator</b></a> can be used to decorate a normal label provider 
-  to show the implement and override indicators for methods. </p>
+    ...
+</pre>
+<p>In the same way the <a href=
+"../reference/api/org/eclipse/jdt/ui/OverrideIndicatorLabelDecorator.html"><b>OverrideIndicatorLabelDecorator</b></a>
+can be used to decorate a normal label provider to show the implement and override indicators for
+methods.</p>
 <h3>Updating the presentation on model changes</h3>
-<p> Neither the <a href="../reference/api/org/eclipse/jdt/ui/OverrideIndicatorLabelDecorator.html"><b> 
-  OverrideIndicatorLabelDecorator</b></a><b> </b>nor the <a href="../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html"><b> 
-ProblemsLabelDecorator</b></a><b> </b>listen to model changes. Hence, the viewer doesn't update its presentation if 
-  the Java or resource marker model changes. The reason for pushing the update 
-  onto the client for these classes is that there isn't yet a generic implementation 
-  that fulfills all performance concerns. Handling Java model delta inspection 
-  and viewer refreshing in each label decorator or provider would lead to multiple 
-  delta inspections and unnecessary viewer updates.</p>
-<p> So what does the client need to do in order to update their viewers ?</p>
+<p>Neither the <a href=
+"../reference/api/org/eclipse/jdt/ui/OverrideIndicatorLabelDecorator.html"><b>OverrideIndicatorLabelDecorator</b></a>
+
+nor the <a href=
+"../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html"><b>ProblemsLabelDecorator</b></a>
+listen to model changes. Hence, the viewer doesn't update its presentation if the Java or resource
+marker model changes. The reason for pushing the update onto the client for these classes is that
+there isn't yet a generic implementation that fulfills all performance concerns. Handling Java
+model delta inspection and viewer refreshing in each label decorator or provider would lead to
+multiple delta inspections and unnecessary viewer updates.</p>
+<p>So what does the client need to do in order to update their viewers ?</p>
 <ul>
-  <li><a href="../reference/api/org/eclipse/jdt/ui/OverrideIndicatorLabelDecorator.html"><b> 
-  OverrideIndicatorLabelDecorator</b></a>: the client must listen to 
-    Java model changes (see <a href="jdt_api_manip.htm#javadeltas">Responding to
-    changes in Java elements</a>) 
-    and decide if the change(s) described by the delta invalidates the override 
-    indicator of elements presented in the viewer. If so, the class inspecting 
-    the delta should trigger a repaint of the corresponding Java elements using 
-    the standard JFace viewer API (see update methods on StructuredViewer).</li>
-  <li><a href="../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html"><b> 
-ProblemsLabelDecorator</b></a>: the client should listen to changes 
-    notified by the decorator via a <a href="../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.ProblemsLabelChangedEvent.html"> 
-    <b> 
-    ProblemsLabelChangedEvent</b></a> (see also <a href="../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html#addListener(org.eclipse.jface.viewers.ILabelProviderListener)"> 
-    <b> 
-    ProblemsLabelDecorator.addListener</b></a> ). Since the marker model is resource 
-    based, the listener has to map the resource notifications to its underlying 
-    data model. For an example showing how to do this for viewers presenting Java 
-    elements see the internal classes <code>ProblemTreeViewer.handleLabelProviderChanged.</code></li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/OverrideIndicatorLabelDecorator.html"><b>OverrideIndicatorLabelDecorator</b></a>:
+the client must listen to Java model changes (see <a href="jdt_api_manip.htm#javadeltas">Responding
+to changes in Java elements</a>) and decide if the change(s) described by the delta invalidates the
+override indicator of elements presented in the viewer. If so, the class inspecting the delta
+should trigger a repaint of the corresponding Java elements using the standard JFace viewer API
+(see update methods on StructuredViewer).</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html"><b>ProblemsLabelDecorator</b></a>:
+the client should listen to changes notified by the decorator via a <a href=
+"../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.ProblemsLabelChangedEvent.html"><b>ProblemsLabelChangedEvent</b></a>
+
+(see also <a href=
+"../reference/api/org/eclipse/jdt/ui/ProblemsLabelDecorator.html#addListener(org.eclipse.jface.viewers.ILabelProviderListener)">
+<b>ProblemsLabelDecorator.addListener</b></a> ). Since the marker model is resource based, the
+listener has to map the resource notifications to its underlying data model. For an example showing
+how to do this for viewers presenting Java elements see the internal classes
+<code>ProblemTreeViewer.handleLabelProviderChanged.</code></li>
 </ul>
-<p> For the same reasons enumerated for label decorators the <a href="../reference/api/org/eclipse/jdt/ui/StandardJavaElementContentProvider.html"><b>StandardJavaElementContentProvider</b></a>
-  doesn't listen to model changes. If the viewer needs to update its presentation 
-  according to Java model changes, then the client should add a corresponding 
-  listener to JavaCore. If the change described by the delta invalidates the structure 
-  of the elements presented in the viewer then the client should update the viewer 
-  using the standard JFace API (see refresh methods on StructuredViewer, and the 
-  add and remove methods on TableViewer and AbstractTreeViewer). </p>
+<p>For the same reasons enumerated for label decorators the <a href=
+"../reference/api/org/eclipse/jdt/ui/StandardJavaElementContentProvider.html"><b>StandardJavaElementContentProvider</b></a>
+doesn't listen to model changes. If the viewer needs to update its presentation according to Java
+model changes, then the client should add a corresponding listener to JavaCore. If the change
+described by the delta invalidates the structure of the elements presented in the viewer then the
+client should update the viewer using the standard JFace API (see refresh methods on
+StructuredViewer, and the add and remove methods on TableViewer and AbstractTreeViewer).</p>
 <h3>Sorting the viewer</h3>
-<p> <a href="../reference/api/org/eclipse/jdt/ui/JavaElementSorter.html"><b> 
-    JavaElementSorter</b></a> can be plugged into a JFace viewer to sort Java elements 
-    according to the Java UI sorting style. </p>
+<p><a href=
+"../reference/api/org/eclipse/jdt/ui/JavaElementSorter.html"><b>JavaElementSorter</b></a> can be
+plugged into a JFace viewer to sort Java elements according to the Java UI sorting style.</p>
 
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_run.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_run.htm
index 1c502b0..63c33ad 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_run.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_run.htm
@@ -1,30 +1,26 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-     
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-     
-  <meta http-equiv="Content-Style-Type" content="text/css">
-      
-  <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-  <title>Running a Java program</title>
-          
-  <link rel="stylesheet" type="text/css" href="../book.css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
+<title>Running a Java program</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
 </head>
- <body>
+<body>
 <h2>Running a Java program</h2>
-<p> The JDT Debug component includes facilities for launching a Java program using the 
-VM install that is currently configured by the user for a Java project.  </p>
-<h3> Launching a compiled Java program</h3>
-<p> Java programs that have been compiled in a Java project can be run by 
-getting the appropriate <a href="../reference/api/org/eclipse/jdt/launching/IVMRunner.html"><b>
- IVMRunner</b></a>
-  for the Java project and running the class by name. The following code
-snippet shows how the class <b>MyClass</b> inside <b>myJavaProject</b> can
-be launched.</p>
-<pre>
-<font color="#4444cc">
+<p>The JDT Debug component includes facilities for launching a Java program using the VM install
+that is currently configured by the user for a Java project.  </p>
+
+<h3>Launching a compiled Java program</h3>
+<p>Java programs that have been compiled in a Java project can be run by getting the appropriate
+<a href="../reference/api/org/eclipse/jdt/launching/IVMRunner.html"><b>IVMRunner</b></a> for the
+Java project and running the class by name. The following code snippet shows how the class
+<b>MyClass</b> inside <b>myJavaProject</b> can be launched.</p>
+<pre class="color1">
    IVMInstall vmInstall = JavaRuntime.getVMInstall(myJavaProject);
    if (vmInstall == null)
       vmInstall = JavaRuntime.getDefaultVMInstall();
@@ -37,29 +33,25 @@ be launched.</p>
          } catch (CoreException e) { }
          if (classPath != null) {
             VMRunnerConfiguration vmConfig = 
-               new VMRunnerConfiguration("MyClass", classPath);
+               new VMRunnerConfiguration("MyClass", classPath);
             ILaunch launch = new Launch(null, ILaunchManager.RUN_MODE, null);
             vmRunner.run(vmConfig, launch, null);
          }
       }
    }
-</font>
 </pre>
-<p> Another way to launch a Java program is to create a <b>Java application</b>
-  launch configuration, and launch it. The following snippet shows how the 
-class <b>MyClass</b> inside <b> myJavaProject</b> can be launched using a 
-simple launch configuration. By default, the resulting running application
- uses the JRE and classpath associated with <b>myJavaProject</b>. </p>
-<pre><font color="#4444cc">
+<p>Another way to launch a Java program is to create a <b>Java application</b> launch
+configuration, and launch it. The following snippet shows how the class <b>MyClass</b> inside
+<b>myJavaProject</b> can be launched using a simple launch configuration. By default, the resulting
+running application uses the JRE and classpath associated with <b>myJavaProject</b>.</p>
+<pre class="color1">
    ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
    ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
-   ILaunchConfigurationWorkingCopy wc = type.newInstance(null, "SampleConfig");
-   wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "myJavaProject");
-   wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "myClass");
-   ILaunchConfiguration config = wc.doSave();	
+   ILaunchConfigurationWorkingCopy wc = type.newInstance(null, "SampleConfig");
+   wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "myJavaProject");
+   wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "myClass");
+   ILaunchConfiguration config = wc.doSave(); 
    config.launch(ILaunchManager.RUN_MODE, null);
-</font>
 </pre>
-
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_search.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_search.htm
index e230ba0..70f0b0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_search.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_search.htm
@@ -1,60 +1,54 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html lang="en"><head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"><title>Using the Java search engine</title>
-
-
-<link rel="stylesheet" type="text/css" href="../book.css"></head>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
+<title>Using the Java search engine</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
+</head>
 <body>
 <h2>Using the Java search engine</h2>
-<p> Your plug-in can use the JDT API to search Java projects in the workspace
-for Java elements, such as method references, field declarations, implementors
-of an interface, etc. </p>
-<p>
-The entry point for Java search is the <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchEngine.html">SearchEngine</a></b> class. You can search for particular
-patterns inside a Java element and scope the search to specific elements. 
-Search patterns can be created using <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createPattern(org.eclipse.jdt.core.IJavaElement, int)">createPattern</a></b>. 
-A pattern is scoped using <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createJavaSearchScope(org.eclipse.jdt.core.IJavaElement[])">createJavaSearchScope</a></b>. 
-Once a pattern and scope are defined, the <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#search(org.eclipse.jdt.core.search.SearchPattern, org.eclipse.jdt.core.search.SearchParticipant[], org.eclipse.jdt.core.search.IJavaSearchScope, org.eclipse.jdt.core.search.SearchRequestor, org.eclipse.core.runtime.IProgressMonitor)">search</a></b>
- method is used to collect the results. </p>
-
-<p>
-Search results are reported to a  <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html">SearchRequestor</a></b> which you must
-extend in order to access the results. </p>
-
-<h3>
-Preparing for search</h3>
-<p> A search operation will use both a pattern for describing the nature
-of the search, and a scope for restraining the range of investigation. </p>
-
-<h4>
-Creating a Java search pattern
-</h4>
-<p>
-A search pattern defines how search results are found. You can either create a search pattern from a Java element (see
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createPattern(org.eclipse.jdt.core.IJavaElement, int)">createPatternPattern(IJavaElement element, int limitTo)</a></b>) 
-or from a string (see <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createPattern(java.lang.String, int, int, int)">createPattern(String, int, int, int)</a></b>.)
-The last method supports wildcards (i.e. '*') and can be used to widen the search results.</p>
-<p>
-For example, creating a search pattern for searching for references to a given method is done as follows:</p>
-<pre><font color="#4444cc">
+<p>Your plug-in can use the JDT API to search Java projects in the workspace for Java elements, such as method references, field declarations, implementors of an interface, etc.</p>
+
+<p>The entry point for Java search is the <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchEngine.html">SearchEngine</a></b> class. You can search for particular patterns inside a Java
+element and scope the search to specific elements.  Search patterns can be created using <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createPattern(org.eclipse.jdt.core.IJavaElement,%20int)">createPattern</a></b>.  A pattern is scoped using <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createJavaSearchScope(org.eclipse.jdt.core.IJavaElement[])">createJavaSearchScope</a></b>.  Once a pattern and scope are defined,
+the <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#search(org.eclipse.jdt.core.search.SearchPattern,%20org.eclipse.jdt.core.search.SearchParticipant[],%20org.eclipse.jdt.core.search.IJavaSearchScope,%20org.eclipse.jdt.core.search.SearchRequestor,%20org.eclipse.core.runtime.IProgressMonitor)">
+search</a></b> method is used to collect the results.</p>
+
+<p>Search results are reported to a <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html">SearchRequestor</a></b> which you must extend in order to access the results.</p>
+<h3>Preparing for search</h3>
+<p>A search operation will use both a pattern for describing the nature of the search, and a scope for restraining the range of investigation.</p>
+<h4>Creating a Java search pattern</h4>
+<p>A search pattern defines how search results are found. You can either create a search pattern from a Java element (see <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createPattern(org.eclipse.jdt.core.IJavaElement,%20int)">createPatternPattern(IJavaElement element, int limitTo)</a></b>) or from a
+string (see <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createPattern(java.lang.String,%20int,%20int,%20int)">createPattern(String, int, int, int)</a></b>.) The last
+method supports wildcards (i.e. '*') and can be used to widen the search results.</p>
+
+<p>For example, creating a search pattern for searching for references to a given method is done as follows:</p>
+<pre class="color1">
+
     // Get the method
     IMethod method = ...;
     
     // Create search pattern
     SearchPattern pattern = SearchPattern.createPattern(method, IJavaSearchConstants.REFERENCES);
-</font></pre>
-<p>
-Or creating a search pattern for searching for declarations of all types starting with "Obj":</p>
-<pre><font color="#4444cc">
+</pre>
+<p>Or creating a search pattern for searching for declarations of all types starting with "Obj":</p>
+<pre class="color1">
+
     // Create search pattern
-    SearchPattern pattern = SearchPattern.createPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE);
-</font></pre>
-<p>
-The following search patterns are supported:
-</p><ul>
+    SearchPattern pattern = SearchPattern.createPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE);
+</pre>
+<p>The following search patterns are supported:</p>
+<ul>
+
 <li>Package declarations</li>
 <li>Type declarations</li>
 <li>Field declarations</li>
@@ -64,18 +58,18 @@ The following search patterns are supported:
 <li>Interface implementors</li>
 <li>Field references</li>
 <li>Field write accesses</li>
+
 <li>Field read accesses</li>
 <li>Method (and constructor) references</li>
-<li>Combinations of the above patterns using the OR pattern (see
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createOrPattern(org.eclipse.jdt.core.search.SearchPattern, org.eclipse.jdt.core.search.SearchPattern)">createOrPattern</a></b>)</li>
+<li>Combinations of the above patterns using the OR pattern (see <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#createOrPattern(org.eclipse.jdt.core.search.SearchPattern,%20org.eclipse.jdt.core.search.SearchPattern)">createOrPattern</a></b>)</li>
 </ul>
-<p>
-Note that these patterns are created using the following possible rules:
-</p>
+<p>Note that these patterns are created using the following possible rules:</p>
 <ul>
 <li><b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#R_EXACT_MATCH">R_EXACT_MATCH</a></b></li>
 <li><b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#R_PREFIX_MATCH">R_PREFIX_MATCH</a></b></li>
 <li><b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#R_PATTERN_MATCH">R_PATTERN_MATCH</a></b></li>
+
 <li><b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#R_REGEXP_MATCH">R_REGEXP_MATCH</a></b></li>
 <li><b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#R_CAMELCASE_MATCH">R_CAMELCASE_MATCH</a></b></li>
 <li><b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#R_CAMELCASE_SAME_PART_COUNT_MATCH">R_CAMELCASE_SAME_PART_COUNT_MATCH</a></b></li>
@@ -87,137 +81,120 @@ which may be also combined with one of the following flags:
 <li><b><a href="../reference/api/org/eclipse/jdt/core/search/SearchPattern.html#R_EQUIVALENT_MATCH">R_EQUIVALENT_MATCH</a></b></li>
 </ul>
 <p>For example,</p>
-<pre><font color="#4444cc">
+
+<pre class="color1">
+
     // a case insensitive prefix match is requested
-    SearchPattern pattern1 = SearchPattern.createPattern("Hash", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_PREFIX_MATCH);
+    SearchPattern pattern1 = SearchPattern.createPattern("Hash", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_PREFIX_MATCH);
 
     // a camel case match is requested
-    SearchPattern pattern2 = SearchPattern.createPattern("HM", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_CAMEL_CASE_MATCH);
+    SearchPattern pattern2 = SearchPattern.createPattern("HM", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_CAMEL_CASE_MATCH);
 
     // a camel case with a strict expected number of parts match is requested
-    SearchPattern pattern3 = SearchPattern.createPattern("HM", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_CAMELCASE_SAME_PART_COUNT_MATCH);
-</font></pre>
+    SearchPattern pattern3 = SearchPattern.createPattern("HM", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_CAMELCASE_SAME_PART_COUNT_MATCH);
+</pre>
 <p>Note that using the patterns created above reduce the number of possible results among others:</p>
 <ul>
 <li>pattern1: <code>Hashtable</code>, <code>HashMap</code>, <code>HashMapEntry</code>, etc.</li>
 <li>pattern2: <code>HashMap</code>, <code>HashMapEntry</code>, etc.</li>
+
 <li>pattern3: <code>HashMapEntry</code>, etc.</li>
 </ul>
+<h4>Using <i>fine grain</i> flags in a Java search pattern</h4>
+<p>Some references patterns can be refined by adding one or several <i>fine grain</i> flags to the <code>limitTo</code> parameter.</p>
+
+<p>For example, only the type references used in a cast expression will match the pattern created as follows:</p>
+<pre class="color1">
 
-<h4>
-Using <i>fine grain</i> flags in a Java search pattern
-</h4>
-<p>
-Some references patterns can be refined by adding one or several <i>fine grain</i>
-flags to the <code>limitTo</code> parameter.
-</p><p>
-For example, only the type references used in a cast expression will match the
-pattern created as follows:</p>
-<pre><font color="#4444cc">
     // Get the type
     IType type = ...;
     
     // Create search pattern
     SearchPattern pattern = SearchPattern.createPattern(type, IJavaSearchConstants.REFERENCES | IJavaSearchConstants.CAST_TYPE_REFERENCE);
-</font></pre>
-<p>
-Note that the fine grain flags can be combined together but only for the same kind of search
-(e.g. only a combination of flags for <u>type</u> references will be meaningful
-if the <code>searchFor</code> parameter is set to
-<a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#TYPE">TYPE</a>).
-</p><p>
-<u>Flags for type references</u></p>
+</pre>
+<p>Note that the fine grain flags can be combined together but only for the same kind of search (e.g. only a combination of flags for <strong>type</strong> references will be meaningful if the
+<code>searchFor</code> parameter is set to <a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#TYPE">TYPE</a>).</p>
+
+<p>Flags for type references:</p>
 <ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#FIELD_DECLARATION_TYPE_REFERENCE">FIELD_DECLARATION_TYPE_REFERENCE</a></b>:
-type references used as the type of a field declaration.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE">LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE</a></b>:
-type references used as the type of a local variable declaration.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#PARAMETER_DECLARATION_TYPE_REFERENCE">PARAMETER_DECLARATION_TYPE_REFERENCE</a></b>:
-type references used as the type of a method parameter.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#SUPERTYPE_TYPE_REFERENCE">SUPERTYPE_TYPE_REFERENCE</a></b>:
-type references used as a super type or as a super interface.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#THROWS_CLAUSE_TYPE_REFERENCE">THROWS_CLAUSE_TYPE_REFERENCE</a></b>:
-type references used in a throws clause.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#CAST_TYPE_REFERENCE">CAST_TYPE_REFERENCE</a></b>:
-type references used in a cast expression.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#CATCH_TYPE_REFERENCE">CATCH_TYPE_REFERENCE</a></b>:
-type references used in a catch header.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#CLASS_INSTANCE_CREATION_TYPE_REFERENCE">CLASS_INSTANCE_CREATION_TYPE_REFERENCE</a></b>:
-type references used in class instance creation.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#RETURN_TYPE_REFERENCE">RETURN_TYPE_REFERENCE</a></b>:
-type references used as a method return type.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#IMPORT_DECLARATION_TYPE_REFERENCE">IMPORT_DECLARATION_TYPE_REFERENCE</a></b>:
-type references used in an import declaration.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#ANNOTATION_TYPE_REFERENCE">ANNOTATION_TYPE_REFERENCE</a></b>:
-type references used as an annotation.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#TYPE_ARGUMENT_TYPE_REFERENCE">TYPE_ARGUMENT_TYPE_REFERENCE</a></b>:
-type references used as a type argument in a parameterized type or a parameterized method.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#TYPE_VARIABLE_BOUND_TYPE_REFERENCE">TYPE_VARIABLE_BOUND_TYPE_REFERENCE</a></b>:
-type references used as a type variable bound.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#WILDCARD_BOUND_TYPE_REFERENCE">WILDCARD_BOUND_TYPE_REFERENCE</a></b>:
-type references used as a wildcard bound.</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#INSTANCEOF_TYPE_REFERENCE">INSTANCEOF_TYPE_REFERENCE</a></b>:
-type references used in an <code>instance of</code> condition.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#FIELD_DECLARATION_TYPE_REFERENCE">FIELD_DECLARATION_TYPE_REFERENCE</a></b>: type references used as the type of
+a field declaration.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE">LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE</a></b>: type references
+used as the type of a local variable declaration.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#PARAMETER_DECLARATION_TYPE_REFERENCE">PARAMETER_DECLARATION_TYPE_REFERENCE</a></b>: type references used as the
+type of a method parameter.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#SUPERTYPE_TYPE_REFERENCE">SUPERTYPE_TYPE_REFERENCE</a></b>: type references used as a super type or as a super
+interface.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#THROWS_CLAUSE_TYPE_REFERENCE">THROWS_CLAUSE_TYPE_REFERENCE</a></b>: type references used in a throws
+clause.</li>
+
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#CAST_TYPE_REFERENCE">CAST_TYPE_REFERENCE</a></b>: type references used in a cast expression.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#CATCH_TYPE_REFERENCE">CATCH_TYPE_REFERENCE</a></b>: type references used in a catch header.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#CLASS_INSTANCE_CREATION_TYPE_REFERENCE">CLASS_INSTANCE_CREATION_TYPE_REFERENCE</a></b>: type references used in
+class instance creation.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#RETURN_TYPE_REFERENCE">RETURN_TYPE_REFERENCE</a></b>: type references used as a method return type.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#IMPORT_DECLARATION_TYPE_REFERENCE">IMPORT_DECLARATION_TYPE_REFERENCE</a></b>: type references used in an import
+declaration.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#ANNOTATION_TYPE_REFERENCE">ANNOTATION_TYPE_REFERENCE</a></b>: type references used as an annotation.</li>
+
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#TYPE_ARGUMENT_TYPE_REFERENCE">TYPE_ARGUMENT_TYPE_REFERENCE</a></b>: type references used as a type argument in a
+parameterized type or a parameterized method.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#TYPE_VARIABLE_BOUND_TYPE_REFERENCE">TYPE_VARIABLE_BOUND_TYPE_REFERENCE</a></b>: type references used as a type
+variable bound.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#WILDCARD_BOUND_TYPE_REFERENCE">WILDCARD_BOUND_TYPE_REFERENCE</a></b>: type references used as a wildcard
+bound.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#INSTANCEOF_TYPE_REFERENCE">INSTANCEOF_TYPE_REFERENCE</a></b>: type references used in an <code>instance
+of</code> condition.</li>
 </ul>
-<p>
-<u>Flags for field or method references</u>
-</p>
+<p>Flags for field or method references:</p>
+
 <ul>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#SUPER_REFERENCE">SUPER_REFERENCE</a></b>:
-super field accesses or super method invocations (e.g. using the <code>super</code> qualifier).
-</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#QUALIFIED_REFERENCE">QUALIFIED_REFERENCE</a></b>:
-qualified field accesses or qualified method invocations.
-</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#THIS_REFERENCE">THIS_REFERENCE</a></b>:
-primary field accesses or primary method invocations (e.g. using the <code>this</code> qualifier).
-</li>
-<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#IMPLICIT_THIS_REFERENCE">IMPLICIT_THIS_REFERENCE</a></b>:
-field accesses or method invocations without any qualification.
-</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#SUPER_REFERENCE">SUPER_REFERENCE</a></b>: super field accesses or super method invocations (e.g. using the
+<code>super</code> qualifier).</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#QUALIFIED_REFERENCE">QUALIFIED_REFERENCE</a></b>: qualified field accesses or qualified method invocations.</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#THIS_REFERENCE">THIS_REFERENCE</a></b>: primary field accesses or primary method invocations (e.g. using the
+<code>this</code> qualifier).</li>
+<li><b><a href="../reference/api/org/eclipse/jdt/core/search/IJavaSearchConstants.html#IMPLICIT_THIS_REFERENCE">IMPLICIT_THIS_REFERENCE</a></b>: field accesses or method invocations without any
+qualification.</li>
+
 </ul>
+<h4>Creating a Java search scope</h4>
+<p>If you are interested in search results in a given project or even in a given package, or if you know that search results can only be found in the hierarchy of a given type, you can create the
+appropriate search scope using <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createJavaSearchScope(org.eclipse.jdt.core.IJavaElement[])">createJavaSearchScope(IJavaElement[])</a></b> or <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createHierarchyScope(org.eclipse.jdt.core.IType)">createHierarchyScope(IType)</a></b>.</p>
+<p>For example, creating a search scope on a given package is done as follows:</p>
+<pre class="color1">
 
-<h4>
-Creating a Java search scope
-</h4>
-<p>
-If you are interested in search results in a given project or even in a given package, or if you know that search results
-can only be found in the hierarchy of a given type, you can create the appropriate search scope using 
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createJavaSearchScope(org.eclipse.jdt.core.IJavaElement[])">createJavaSearchScope(IJavaElement[])</a></b>
-or <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createHierarchyScope(org.eclipse.jdt.core.IType)">createHierarchyScope(IType)</a></b>.</p>
-<p>
-For example, creating a search scope on a given package is done as follows:</p>
-<pre><font color="#4444cc">
     // Get the package
     IPackageFragment pkg = ...;
 
     // Create search scope
     IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {pkg});
-</font></pre>
-<p>
-Or creating a search scope on the hierarchy of a given type is:</p>
-<pre><font color="#4444cc">
+</pre>
+
+<p>Or creating a search scope on the hierarchy of a given type is:</p>
+<pre class="color1">
+
     // Get the type
     IType type = ...;
 
     // Create search scope
     IJavaSearchScope scope = SearchEngine.createHierarchyScope(type);
-</font></pre>
-<p>
-Finally, you can create a search scope comprising the entire workspace using
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createWorkspaceScope()">createWorkspaceScope</a></b>:</p>
-<pre><font color="#4444cc">
+</pre>
+<p>Finally, you can create a search scope comprising the entire workspace using <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchEngine.html#createWorkspaceScope()">createWorkspaceScope</a></b>:</p>
+<pre class="color1">
+
     // Create search scope
     IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
-</font></pre>
-
-<h3>
-Searching</h3>
-<p>
-Once you have created a search pattern and a search scope, and you have extended 
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html">SearchRequestor</a></b>,
-you can start a search query as follows: </p>
-<pre><font color="#4444cc">
+</pre>
+<h3>Searching</h3>
+
+<p>Once you have created a search pattern and a search scope, and you have extended <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html">SearchRequestor</a></b>, you can
+start a search query as follows:</p>
+<pre class="color1">
+
     // Get the search pattern
     SearchPattern pattern = ...;
 
@@ -230,58 +207,36 @@ you can start a search query as follows: </p>
     // Search
     SearchEngine searchEngine = new SearchEngine();
     searchEngine.search(pattern, new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, scope, requestor, null);
-</font></pre>
-<p>
-A notification that the search starts is sent to your search requestor using the
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#beginReporting()">beginReporting</a></b>
-method.  Then, each search result is reported using the 
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)">acceptSearchMatch</a></b>
-method. Finally 
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#endReporting()">endReporting</a></b>
-indicates that the search has ended.</p>
-
-<h3>
-Collecting search results</h3>
-<p>
-Search results are reported using the 
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)">acceptSearchMatch(SearchMatch)</a></b>
-method. Paragraphs below highlight some features of 
-<b><a href="../reference/api/org/eclipse/jdt/core/search/SearchMatch.html">SearchMatch</a></b>. </p>
-
-<h4>
-Resources and Java elements</h4>
-<p>
-A search result can correspond to a Java element (e.g. a type declaration) or it can be contained in a Java element
-(e.g. a reference to a type inside a method). The search engine always tries to find the innermost Java element that
-corresponds to or that contains the search result. For example, searching for references to a method could find
-such a reference in an initializer. The initializer that contains this method reference is the element of the search match. </p>
-<p>
-The search engine also tries to find the resource that contains the Java element. If the Java
-element is contained in a compilation unit or a class file, the resource is the corresponding 
-<a HREF="../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IFile.html"><b>IFile</b></a>. 
-If the Java element is contained in a .jar file, the returned resource is that .jar
-file if it is in the workspace, <b>null</b> otherwise. </p>
-
-<h4>
-Source positions</h4>
-<p>Source positions <b><a HREF="../reference/api/org/eclipse/jdt/core/search/SearchMatch.html#getOffset()">
-getOffset</a></b> and <b><a HREF="../reference/api/org/eclipse/jdt/core/search/SearchMatch.html#getLength()">getLength</a></b> are given relative to the compilation unit that contains
-the search result. If the search result is contained in  a .jar file, the
-source positions are relative to the attached source. They are (-1, -1) if
-there is no source attached to  the .jar file. </p>
-
-<h4>
-Accurate versus inaccurate search results</h4>
-<p>
-In most cases search results are accurate, meaning that the search engine was able to determine that the given
-match is what was asked for. However in some cases the search engine is unable to do so, in such cases the match is
-inaccurate. Some possible reasons why a match could be inaccurate are:
-</p><ul>
-<li>The classpath on the project that contains the result is not properly set. For example, it refers to a project that is
-      not accessible, a jar on the classpath requires another jar that is not on the classpath, etc.</li>
-<li>The user code would not compile. For example, it refers to a class that is not yet defined.</li>
-</ul> 
-
-
+</pre>
+<p>A notification that the search starts is sent to your search requestor using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#beginReporting()">beginReporting</a></b> method.  Then, each search result is reported using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)">acceptSearchMatch</a></b> method. Finally <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#endReporting()">endReporting</a></b> indicates that the search has ended.</p>
+
+<h3>Collecting search results</h3>
+<p>Search results are reported using the <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchRequestor.html#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)">acceptSearchMatch(SearchMatch)</a></b> method. Paragraphs below
+highlight some features of <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchMatch.html">SearchMatch</a></b>.</p>
+<h4>Resources and Java elements</h4>
+<p>A search result can correspond to a Java element (e.g. a type declaration) or it can be contained in a Java element (e.g. a reference to a type inside a method). The search engine always tries to
+find the innermost Java element that corresponds to or that contains the search result. For example, searching for references to a method could find such a reference in an initializer. The
+initializer that contains this method reference is the element of the search match.</p>
+<p>The search engine also tries to find the resource that contains the Java element. If the Java element is contained in a compilation unit or a class file, the resource is the corresponding <a href=
+"../../org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IFile.html"><b>IFile</b></a>. If the Java element is contained in a .jar file, the returned resource is that .jar file if
+it is in the workspace, <b>null</b> otherwise.</p>
+
+<h4>Source positions</h4>
+<p>Source positions <b><a href="../reference/api/org/eclipse/jdt/core/search/SearchMatch.html#getOffset()">getOffset</a></b> and <b><a href=
+"../reference/api/org/eclipse/jdt/core/search/SearchMatch.html#getLength()">getLength</a></b> are given relative to the compilation unit that contains the search result. If the search result is
+contained in a .jar file, the source positions are relative to the attached source. They are (-1, -1) if there is no source attached to the .jar file.</p>
+<h4>Accurate versus inaccurate search results</h4>
+<p>In most cases search results are accurate, meaning that the search engine was able to determine that the given match is what was asked for. However in some cases the search engine is unable to do
+so, in such cases the match is inaccurate. Some possible reasons why a match could be inaccurate are:</p>
+<ul>
+<li>The classpath on the project that contains the result is not properly set. For example, it refers to a project that is not accessible, a jar on the classpath requires another jar that is not on
+the classpath, etc.</li>
 
-</body></html>
+<li>The user code would not compile. For example, it refers to a class that is not yet defined.</li>
+</ul>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_wizards.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_wizards.htm
index 36cb5b1..c1d667d 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_wizards.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_wizards.htm
@@ -1,96 +1,112 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Java wizard pages</title>
-<link rel="stylesheet" type="text/css" href="../book.css">
+<link rel="stylesheet" type="text/css" href="../book.css" />
 </head>
 <body>
 <h2>Java wizard pages</h2>
-<p> The <a href="../reference/api/org/eclipse/jdt/ui/wizards/package-summary.html"><b>org.eclipse.jdt.ui.wizards</b></a> 
-  package provides wizard pages for creating and configuring Java
-elements.  Several
+<p>The <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/package-summary.html"><b>org.eclipse.jdt.ui.wizards</b></a>
+
+package provides wizard pages for creating and configuring Java elements.  Several
 prefabricated pages are provided for your use.</p>
-<h3><b>Creating new Java elements</b></h3>
-<p>A hierarchy of wizard pages support the creation of new Java
-elements.  </p>
-<p><a href="../reference/api/org/eclipse/jdt/ui/wizards/NewElementWizardPage.html"><b>NewElementWizardPage</b></a>
-is the abstract class that defines the basic operation of the wizard. 
-Additional abstract classes are provided in the hierarchy for making
-customizations to the functionality provided by the concrete wizards.</p>
-<p>The concrete creation wizards can be used directly and generally are not
-intended to be subclassed. </p>
+<h3 class="c1">Creating new Java elements</h3>
+<p>A hierarchy of wizard pages support the creation of new Java elements.  </p>
+<p><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewElementWizardPage.html"><b>NewElementWizardPage</b></a>
+is the abstract class that defines the basic operation of the wizard.  Additional abstract
+classes are provided in the hierarchy for making customizations to the functionality provided by
+the concrete wizards.</p>
+<p>The concrete creation wizards can be used directly and generally are not intended to be
+subclassed. </p>
 <ul>
-  <li> 
-    <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewClassWizardPage.html"><b>NewClassWizardPage</b></a>
-    allows users to define a new Java class. Clients can instantiate and configure the wizard page. To implement your own type wizard
-    subclass <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
-    To simply open the original 'New Java Class wizard' use the <a href="../reference/api/org/eclipse/jdt/ui/actions/OpenNewClassWizardAction.html"><b>OpenNewClassWizardAction</b></a>.
-  </li>    
-  <li> 
-    <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewInterfaceWizardPage.html"><b>NewInterfaceWizardPage</b></a>
-    allows users to define a new Java interface. Clients can instantiate and configure the wizard page. To implement your own type wizard
-    subclass <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
-    To simply open the original 'New Java Interface wizard' use the <a href="../reference/api/org/eclipse/jdt/ui/actions/OpenNewInterfaceWizardAction.html"><b>OpenNewInterfaceWizardAction</b></a>.
-  </li>    
-  <li> 
-    <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewEnumWizardPage.html"><b>NewEnumWizardPage</b></a>
-    allows users to define a new Java enumeration. Clients can instantiate and configure the wizard page. To implement your own type wizard
-    subclass <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
-    To simply open the original 'New Java Enum wizard' use the <a href="../reference/api/org/eclipse/jdt/ui/actions/OpenNewEnumWizardAction.html"><b>OpenNewEnumWizardAction</b></a>.
-  </li>    
-  <li> 
-    <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewAnnotationWizardPage.html"><b>NewAnnotationWizardPage</b></a>
-    allows users to define a new Java annotations. Clients can instantiate and configure the wizard page. To implement your own type wizard
-    subclass <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
-    To simply open the original 'New Java Annotation wizard' use the <a href="../reference/api/org/eclipse/jdt/ui/actions/OpenNewAnnotationWizardAction.html"><b>OpenNewAnnotationWizardAction</b></a>.
-    </li>    
-   <li> 
-    <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewPackageWizardPage.html"><b>NewPackageWizardPage</b></a>
-    allows users to create a new Java package. Clients can instantiate and configure the wizard page. 
-    To simply open the original 'New Java Package wizard' use the <a href="../reference/api/org/eclipse/jdt/ui/actions/OpenNewPackageWizardAction.html"><b>OpenNewPackageWizardAction</b></a>.
-    </li>  
-   <li> 
-    <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.html"><b>NewJavaProjectWizardPageOne</b></a>
-    and <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.html"><b>NewJavaProjectWizardPageTwo</b></a>
-    allow users to create a new Java project wizard. Clients can use and configure these pages in their own project wizard. To simply open the
-    original 'New Java Project wizard' use the <a href="../reference/api/org/eclipse/jdt/ui/actions/OpenNewJavaProjectWizardAction.html"><b>OpenNewJavaProjectWizardAction</b></a>
-   </li>
+
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewClassWizardPage.html"><b>NewClassWizardPage</b></a>
+allows users to define a new Java class. Clients can instantiate and configure the wizard page. To
+implement your own type wizard subclass <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
+To simply open the original 'New Java Class wizard' use the <a href=
+"../reference/api/org/eclipse/jdt/ui/actions/OpenNewClassWizardAction.html"><b>OpenNewClassWizardAction</b></a>.</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewInterfaceWizardPage.html"><b>NewInterfaceWizardPage</b></a>
+allows users to define a new Java interface. Clients can instantiate and configure the wizard page.
+To implement your own type wizard subclass <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
+To simply open the original 'New Java Interface wizard' use the <a href=
+"../reference/api/org/eclipse/jdt/ui/actions/OpenNewInterfaceWizardAction.html"><b>OpenNewInterfaceWizardAction</b></a>.</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewEnumWizardPage.html"><b>NewEnumWizardPage</b></a>
+
+allows users to define a new Java enumeration. Clients can instantiate and configure the wizard
+page. To implement your own type wizard subclass <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
+To simply open the original 'New Java Enum wizard' use the <a href=
+"../reference/api/org/eclipse/jdt/ui/actions/OpenNewEnumWizardAction.html"><b>OpenNewEnumWizardAction</b></a>.</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewAnnotationWizardPage.html"><b>NewAnnotationWizardPage</b></a>
+allows users to define a new Java annotations. Clients can instantiate and configure the wizard
+page. To implement your own type wizard subclass <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.html"><b>NewTypeWizardPage</b></a>.
+To simply open the original 'New Java Annotation wizard' use the <a href=
+"../reference/api/org/eclipse/jdt/ui/actions/OpenNewAnnotationWizardAction.html"><b>OpenNewAnnotationWizardAction</b></a>.</li>
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewPackageWizardPage.html"><b>NewPackageWizardPage</b></a>
+allows users to create a new Java package. Clients can instantiate and configure the wizard page.
+To simply open the original 'New Java Package wizard' use the <a href=
+"../reference/api/org/eclipse/jdt/ui/actions/OpenNewPackageWizardAction.html"><b>OpenNewPackageWizardAction</b></a>.</li>
+
+<li><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.html"><b>NewJavaProjectWizardPageOne</b></a>
+and <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.html"><b>NewJavaProjectWizardPageTwo</b></a>
+allow users to create a new Java project wizard. Clients can use and configure these pages in their
+own project wizard. To simply open the original 'New Java Project wizard' use the <a href=
+"../reference/api/org/eclipse/jdt/ui/actions/OpenNewJavaProjectWizardAction.html"><b>OpenNewJavaProjectWizardAction</b></a></li>
 </ul>
 <h3>Contributing a classpath container wizard page</h3>
-<p>The interface <a href="../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPage.html"><b>IClasspathContainerPage</b></a>
-defines a structure for contributing a wizard page that allows a user to define
-a new classpath container entry or edit an existing one.  If your plug-in
-has defined its own type of classpath container using the JDT Core <b><a href="../reference/extension-points/org_eclipse_jdt_core_classpathContainerInitializer.html">org.eclipse.jdt.core.classpathContainerInitializer</a></b>
- extension point, then you will probably want to define a corresponding wizard
-page for editing and creating classpath containers of this type.</p>
-<p>Your plug-in's markup should provide an extension <b><a href="../reference/extension-points/org_eclipse_jdt_ui_classpathContainerPage.html">org.eclipse.jdt.ui.classpathContainerPage</a>. 
-</b>In the extension markup, you provide the name of your class that implements <a href="../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPage.html"><b>IClasspathContainerPage</b></a>. 
-If you need additional information in your wizard page about the
-classpath's context when it is selected, you can implement <a href="../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPageExtension.html"><b>IClasspathContainerPageExtension</b></a>. If your configuration page
-wants to returns more than one entry when being added, implement 
- <a href="../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPageExtension.html"><b>IClasspathContainerPageExtension2</b></a>.
-</p>
-<h3> Customizing a wizard page</h3>
-<p> Besides using 
-  prefabricated pages, you can subclass the wizard pages to 
-  add your own input fields or to influence the code generation.  You
-should use the abstract classes in the <a href="../reference/api/org/eclipse/jdt/ui/wizards/NewElementWizardPage.html"><b>NewElementWizardPage</b></a>
-hierarchy to customize a wizard rather than subclassing the concrete
-classes.</p>
-<p> Below is a sample 
-  of a new type wizard page that is customized to create JUnit test case classes. 
-  The page initializes the super class field with "junit.framework.TestCase" 
-  and adds a checkbox that controls whether method stubs for the <code>setUp()</code> and <code>tearDown()</code>
-  method are to be created.</p>
-<pre><font color="#4444CC">public class TestCaseWizardPage extends NewTypeWizardPage {
+<p>The interface <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPage.html"><b>IClasspathContainerPage</b></a>
+defines a structure for contributing a wizard page that allows a user to define a new classpath
+container entry or edit an existing one.  If your plug-in has defined its own type of
+classpath container using the JDT Core <b><a href=
+"../reference/extension-points/org_eclipse_jdt_core_classpathContainerInitializer.html">org.eclipse.jdt.core.classpathContainerInitializer</a></b>
+
+extension point, then you will probably want to define a corresponding wizard page for editing and
+creating classpath containers of this type.</p>
+<p>Your plug-in's markup should provide an extension <b><a href=
+"../reference/extension-points/org_eclipse_jdt_ui_classpathContainerPage.html">org.eclipse.jdt.ui.classpathContainerPage</a>. </b>
+In the extension markup, you provide the name of your class that implements <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPage.html"><b>IClasspathContainerPage</b></a>. 
+If you need additional information in your wizard page about the classpath's context when it is
+selected, you can implement <a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPageExtension.html"><b>IClasspathContainerPageExtension</b></a>.
+If your configuration page wants to returns more than one entry when being added, implement
+<a href="../reference/api/org/eclipse/jdt/ui/wizards/IClasspathContainerPageExtension.html"><b>IClasspathContainerPageExtension2</b></a>.</p>
+<h3>Customizing a wizard page</h3>
+
+<p>Besides using prefabricated pages, you can subclass the wizard pages to add your own input
+fields or to influence the code generation.  You should use the abstract classes in the
+<a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewElementWizardPage.html"><b>NewElementWizardPage</b></a>
+hierarchy to customize a wizard rather than subclassing the concrete classes.</p>
+<p>Below is a sample of a new type wizard page that is customized to create JUnit test case
+classes. The page initializes the super class field with "junit.framework.TestCase" and adds a
+checkbox that controls whether method stubs for the <code>setUp()</code> and
+<code>tearDown()</code> method are to be created.</p>
+<pre class="color1">
+public class TestCaseWizardPage extends NewTypeWizardPage {
     private Button fCreateStubs;
 
     public TestCaseWizardPage() {
-        super(true, "TestCaseWizardPage");
+        super(true, "TestCaseWizardPage");
     }
 
     /**
@@ -120,7 +136,7 @@ classes.</p>
 
         doStatusUpdate();
     }
-	
+ 
     public void createControl(Composite parent) {
         initializeDialogUnits(parent);
         Composite composite= new Composite(parent, SWT.NONE);
@@ -138,7 +154,7 @@ classes.</p>
 
         // Create the checkbox controlling whether we want stubs
         fCreateStubs= new Button(composite, SWT.CHECK);
-        fCreateStubs.setText("Add 'setUp()' and 'tearDown()' to new class");
+        fCreateStubs.setText("Add 'setUp()' and 'tearDown()' to new class");
         GridData gd= new GridData();
         gd.horizontalSpan= nColumns;
         fCreateStubs.setLayoutData(gd);
@@ -146,19 +162,20 @@ classes.</p>
         setControl(composite);
 
         // Initialize the super type field and mark it as read-only
-        setSuperClass("junit.framework.TestCase", false);
+        setSuperClass("junit.framework.TestCase", false);
     }
 
     protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
         if (fCreateStubs.getSelection()) {
-            String setUpMathod= "public void setUp() {}";
+            String setUpMathod= "public void setUp() {}";
             newType.createMethod(setUpMathod, null, false, null);
 
-            String tearDownMathod= "public void tearDown() {}";
+            String tearDownMathod= "public void tearDown() {}";
             newType.createMethod(tearDownMathod, null, false, null); 
         }
    }
-}</font></pre>
+}
 
+</pre>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_write_jar_file.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_write_jar_file.htm
index 0109a1d..a4815e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_write_jar_file.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_api_write_jar_file.htm
@@ -1,25 +1,30 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Programmatically Writing a Jar file</title>
-<link rel="stylesheet" type="text/css" href="../book.css">
+<link rel="stylesheet" type="text/css" href="../book.css" />
+
 </head>
 <body>
 <h2>Programmatically Writing a Jar file</h2>
-<p> The <a href="../reference/api/org/eclipse/jdt/ui/jarpackager/package-summary.html"> 
-  <b> 
-  org.eclipse.ui.jarpackager</b></a> package provides utility classes to programmatically 
-  export files to a Jar file. Below is a code snippet that outlines the use of 
-  the <a href="../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a> 
-  class:</p>
-<pre><font color="#4444cc">    void createJar(IType mainType, IFile[] filestoExport) {
+<p>The <a href=
+"../reference/api/org/eclipse/jdt/ui/jarpackager/package-summary.html"><b>org.eclipse.ui.jarpackager</b></a>
+
+package provides utility classes to programmatically export files to a Jar file. Below is a code
+snippet that outlines the use of the <a href=
+"../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a>
+class:</p>
+<pre class="color1">
+    void createJar(IType mainType, IFile[] filestoExport) {
         Shell parentShell= ...;
         JarPackageData description= new JarPackageData();
-        IPath location= new Path("C:/tmp/myjar.jar");
+        IPath location= new Path("C:/tmp/myjar.jar");
         description.setJarLocation(location);
         description.setSaveManifest(true);
         description.setManifestMainClass(mainType);
@@ -32,14 +37,18 @@
         } catch (InterruptedException e) {
             // operation has been canceled.
         }
-    }</font></pre>
-<p> Additional API is provided to create a plug-in specific subclass of <a href="../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a>. 
-  This allows other plug-ins to implement their own Jar export/import wizards 
-  and to save the content of the <a href="../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a>
-object to a corresponding Jar 
-  description file.</p>
-<p> Once the JAR is described by a <a href="../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a>,
-it can be programmatically written using a <a href="../reference/api/org/eclipse/jdt/ui/jarpackager/JarWriter3.html"><b>JarWriter3</b></a>.</p>
+    }
+</pre>
+<p>Additional API is provided to create a plug-in specific subclass of <a href=
+"../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a>.
+This allows other plug-ins to implement their own Jar export/import wizards and to save the content
+of the <a href=
+"../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a>
+object to a corresponding Jar description file.</p>
+<p>Once the JAR is described by a <a href=
+"../reference/api/org/eclipse/jdt/ui/jarpackager/JarPackageData.html"><b>JarPackageData</b></a>, it
+can be programmatically written using a <a href=
+"../reference/api/org/eclipse/jdt/ui/jarpackager/JarWriter3.html"><b>JarWriter3</b></a>.</p>
 
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_building_with_apt.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_building_with_apt.htm
index 173a31d..861481e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_building_with_apt.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_building_with_apt.htm
@@ -1,8 +1,10 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+   <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
    <title>Headless Building with APT in Eclipse</title>
 </head>
 
@@ -19,7 +21,7 @@ workspace, either directly from the command-line or via ant with its built-in an
 Given an installation of Eclipse with the APT plugin installed, you can invoke the command-line builder
 with the following command:
 
-<pre>
+<pre class="color1">
 eclipsec -nosplash -application org.eclipse.jdt.apt.core.aptBuild -data %WORKSPACE%
 </pre>
 
@@ -30,7 +32,7 @@ Any configuration for the provided workspace will be observed in the build.
 Again, you will need an installation of Eclipse with the APT plugin installed. Given this, the "apt"
 task can be invoked with the following xml in your build.xml file:
 
-<pre>
+<pre class="color1">
 <project name="test_eclipse" default="build" basedir=".">
 
     <taskdef name="apt" classname="org.eclipse.jdt.apt.core.build.JdtApt"/>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_getting_started.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_getting_started.htm
index 4a73302..e02e37d 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_getting_started.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_apt_getting_started.htm
@@ -1,8 +1,10 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+   <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
    <title>Getting started with APT in Eclipse</title>
 </head>
 
@@ -54,7 +56,7 @@ are not available in this way, but Java 6 annotation processors are fully suppor
 You must have your project's compiler configured to use Java 5.0 or higher compliance
 in the preferences, under Java->Compiler:
 <p>
-<img src="images/compiler_dialog.png" alt="Screenshot of Compiler preference page"></p>
+<img src="images/compiler_dialog.png" alt="Screenshot of Compiler preference page"/></p>
 <p>
 Java 6 processors will only be run if the project's Java 
 compiler compliance level is set to Java 6 or higher, and Eclipse is running on
@@ -62,7 +64,7 @@ a Java 1.6 or higher JVM.</p>
 <p>Next you need to enable annotation processing under 
 Java->Compiler->Annotation Processing:</p>
 <p>
-<img src="images/annotation_processing.png" alt="Screenshot of Annotation Processing properties page"></p>
+<img src="images/annotation_processing.png" alt="Screenshot of Annotation Processing properties page"/></p>
 <p>
 In this dialog you can also specify the generated source directory if desired,
 and provide any processor options that are necessary.</p>
@@ -74,7 +76,7 @@ to all your Java 5 processors by Eclipse, so it is unnecessary to provide those.
 You can add annotation processors to your project under Java->Compiler->Annotation Processing->Factory Path:
 
 <p>
-<img src="images/factory_path.png" alt="Screenshot of Factory Path properties page"></p>
+<img src="images/factory_path.png" alt="Screenshot of Factory Path properties page"/></p>
 <p>
 Processors can be contained in jar files or in Eclipse plug-ins. The Factory Path list includes 
 both Java 5 and Java 6 processors.</p>
@@ -89,7 +91,7 @@ debugging.</p>
 
 <h3>Factory Path and Source Control</h3>
 
-<P>The factory path is stored in a file named ".factorypath" at the project root,
+<p>The factory path is stored in a file named ".factorypath" at the project root,
 similar to the classpath, and should be treated the same way as the classpath with regard to
 version control. In order to avoid hard-coding paths to factory jars, you can either use project-relative jars
 via the "Add Jars..." button, or use a classpath variable via the "Add Variable..." button.</p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_int_model.htm b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_int_model.htm
index 86666f3..77c2932 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_int_model.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/guide/jdt_int_model.htm
@@ -1,187 +1,198 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Java model</title>
-<link rel="stylesheet" type="text/css" href="../book.css">
+<link rel="stylesheet" type="text/css" href="../book.css" />
 </head>
 <body>
 <h2>Java model</h2>
-<p> The Java model is the set of classes that model the objects associated with 
-  creating, editing, and building a Java program. The Java model classes are defined 
-  in <b><a href="../reference/api/org/eclipse/jdt/core/package-summary.html"> 
-  org.eclipse.jdt.core</a></b>.  These classes implement Java specific 
-  behavior for resources and further decompose Java resources into model elements.</p>
-<h3> Java elements</h3>
-<p> The package <a href="../reference/api/org/eclipse/jdt/core/package-summary.html"><b> 
-  org.eclipse.jdt.core</b></a> defines the classes that model the elements that 
-  compose a Java program. The JDT uses an in-memory object model to represent 
-  the structure of a Java program. This structure is derived from the project's class path.
-  The model is hierarchical. Elements of a program can be decomposed into child elements.</p>
-<p> Manipulating Java elements is similar to manipulating resource objects.  When you work with a Java 
-  element, you are actually working with a <b>handle</b> to some underlying model 
-  object.  You must use the <b>exists()</b> protocol to determine whether 
-  the element is actually present in the workspace. </p>
-<p> The following table summarizes the different kinds of Java elements.</p>
+<p>The Java model is the set of classes that model the objects associated with creating, editing,
+and building a Java program. The Java model classes are defined in <b><a href=
+"../reference/api/org/eclipse/jdt/core/package-summary.html">org.eclipse.jdt.core</a></b>. 
+
+These classes implement Java specific behavior for resources and further decompose Java resources
+into model elements.</p>
+<h3>Java elements</h3>
+<p>The package <a href=
+"../reference/api/org/eclipse/jdt/core/package-summary.html"><b>org.eclipse.jdt.core</b></a>
+defines the classes that model the elements that compose a Java program. The JDT uses an in-memory
+object model to represent the structure of a Java program. This structure is derived from the
+project's class path. The model is hierarchical. Elements of a program can be decomposed into child
+elements.</p>
+<p>Manipulating Java elements is similar to manipulating resource objects.  When you work with
+a Java element, you are actually working with a <b>handle</b> to some underlying model
+object.  You must use the <b>exists()</b> protocol to determine whether the element is
+actually present in the workspace. </p>
+
+<p>The following table summarizes the different kinds of Java elements.</p>
 <table border="1">
-  <tbody> 
-  <tr> 
-    <th rowspan="1" colspan="1"> Element </th>
-    <th rowspan="1" colspan="1"> Description </th>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b> IJavaModel</b></a> 
-    </td>
-    <td> Represents the root Java element, corresponding to the workspace. The 
-      parent of all projects with the Java nature. It also gives you access to the projects without the java nature.</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b> 
-      IJavaProject</b></a> </td>
-    <td> Represents a Java project in the workspace. (Child of <a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b> 
-      IJavaModel</b></a>) </td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b> 
-      IPackageFragmentRoot</b></a> </td>
-    <td> Represents a set of package fragments, and maps the fragments to an underlying 
-      resource which is either a folder, JAR, or ZIP file. (Child of <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b> 
-      IJavaProject</b></a>) </td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b> 
-      IPackageFragment</b></a> </td>
-    <td> Represents the portion of the workspace that corresponds to an entire 
-      package, or a portion of the package. (Child of <a href="../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b> 
-      IPackageFragmentRoot</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b> 
-      ICompilationUnit</b></a> </td>
-    <td> Represents a Java source (<b>.java</b>) file. (Child of <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b> 
-      IPackageFragment</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IPackageDeclaration.html"><b> 
-      IPackageDeclaration</b></a> </td>
-    <td> Represents a package declaration in a compilation unit. (Child of <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b> 
-      ICompilationUnit</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IImportContainer.html"><b> 
-      IImportContainer</b></a> </td>
-    <td> Represents the collection of package import declarations in a compilation 
-      unit. (Child of <a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b> 
-      ICompilationUnit</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IImportDeclaration.html"><b> 
-      IImportDeclaration</b></a> </td>
-    <td> Represents a single package import declaration. (Child of <a href="../reference/api/org/eclipse/jdt/core/IImportContainer.html"><b> 
-      IImportContainer</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> IType</b></a> 
-    </td>
-    <td> Represents either a source type inside a compilation unit, or a binary 
-      type inside a class file. </td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IField.html"><b> IField</b></a> 
-    </td>
-    <td> Represents a field inside a type. (Child of <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> 
-      IType</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IMethod.html"><b> IMethod</b></a> 
-    </td>
-    <td> Represents a method or constructor inside a type. (Child of <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> 
-      IType</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IInitializer.html"><b> 
-      IInitializer</b></a> </td>
-    <td> Represents a static or instance initializer inside a type. (Child of 
-      <a href="../reference/api/org/eclipse/jdt/core/IType.html"><b> IType</b></a> 
-      )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IClassFile.html"><b> IClassFile</b></a> 
-    </td>
-    <td> Represents a compiled (binary) type.  (Child of <a href="../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b> 
-      IPackageFragment</b></a> )</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/ITypeParameter.html"><b> ITypeParameter</b></a> 
-    </td>
-    <td> Represents a type parameter.  (Not a child of any Java element, it is obtained using
-           <a href="../reference/api/org/eclipse/jdt/core/IType.html#getTypeParameter(java.lang.String)"><b> 
-           IType.getTypeParameter(String)</b></a> or
-           <a href="../reference/api/org/eclipse/jdt/core/IMethod.html#getTypeParameter(java.lang.String)"><b> 
-           IMethod.getTypeParameter(String)</b></a>)</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/ILocalVariable.html"><b> ILocalVariable</b></a> 
-    </td>
-    <td> Represents a local variable in a method or an initializer.  (Not a child of any Java element, it is obtained using
-           <a href="../reference/api/org/eclipse/jdt/core/ICodeAssist.html#codeSelect(int, int)"><b> 
-           ICodeAssist.codeSelect(int, int)</b></a>)</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IAnnotation.html"><b> IAnnotation</b></a> 
-    </td>
-    <td> Represents a Java 5 annotation. (Not a child of any Java element, it is obtained using
-           <a href="../reference/api/org/eclipse/jdt/core/IAnnotatable.html#getAnnotation(java.lang.String)"><b> 
-           IAnnotatable.getAnnotation(String)</b></a> or
-           <a href="../reference/api/org/eclipse/jdt/core/IAnnotatable.html#getAnnotations()"><b> 
-           IAnnotatable.getAnnotations()</b></a>)</td>
-  </tr>
-  <tr> 
-    <td> <a href="../reference/api/org/eclipse/jdt/core/IAnnotatable.html"><b> IAnnotatable</b></a> 
-    </td>
-    <td> Represents a type, a field, a method, a local variable, or a package declaration that can be 
-      annotated with one or several <a href="../reference/api/org/eclipse/jdt/core/IAnnotation.html"><b> IAnnotation</b></a>s.</td>
-  </tr>
-  </tbody> 
+<tbody>
+<tr>
+<th rowspan="1" colspan="1">Element</th>
+<th rowspan="1" colspan="1">Description</th>
+</tr>
+<tr>
+<td><a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b>IJavaModel</b></a></td>
+<td>Represents the root Java element, corresponding to the workspace. The parent of all projects
+with the Java nature. It also gives you access to the projects without the java nature.</td>
+</tr>
+<tr>
+
+<td><a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b>IJavaProject</b></a></td>
+<td>Represents a Java project in the workspace. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b>IJavaModel</b></a>)</td>
+</tr>
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b>IPackageFragmentRoot</b></a></td>
+<td>Represents a set of package fragments, and maps the fragments to an underlying resource which
+is either a folder, JAR, or ZIP file. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b>IJavaProject</b></a>)</td>
+</tr>
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b>IPackageFragment</b></a></td>
+
+<td>Represents the portion of the workspace that corresponds to an entire package, or a portion of
+the package. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragmentRoot.html"><b>IPackageFragmentRoot</b></a>
+)</td>
+</tr>
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b>ICompilationUnit</b></a></td>
+<td>Represents a Java source (<b>.java</b>) file. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b>IPackageFragment</b></a> )</td>
+</tr>
+
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/IPackageDeclaration.html"><b>IPackageDeclaration</b></a></td>
+<td>Represents a package declaration in a compilation unit. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b>ICompilationUnit</b></a> )</td>
+</tr>
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/IImportContainer.html"><b>IImportContainer</b></a></td>
+<td>Represents the collection of package import declarations in a compilation unit. (Child of
+<a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html"><b>ICompilationUnit</b></a>
+)</td>
+
+</tr>
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/IImportDeclaration.html"><b>IImportDeclaration</b></a></td>
+<td>Represents a single package import declaration. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IImportContainer.html"><b>IImportContainer</b></a> )</td>
+</tr>
+<tr>
+<td><a href="../reference/api/org/eclipse/jdt/core/IType.html"><b>IType</b></a></td>
+<td>Represents either a source type inside a compilation unit, or a binary type inside a class
+file.</td>
+</tr>
+<tr>
+
+<td><a href="../reference/api/org/eclipse/jdt/core/IField.html"><b>IField</b></a></td>
+<td>Represents a field inside a type. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IType.html"><b>IType</b></a> )</td>
+</tr>
+<tr>
+<td><a href="../reference/api/org/eclipse/jdt/core/IMethod.html"><b>IMethod</b></a></td>
+<td>Represents a method or constructor inside a type. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IType.html"><b>IType</b></a> )</td>
+</tr>
+
+<tr>
+<td><a href="../reference/api/org/eclipse/jdt/core/IInitializer.html"><b>IInitializer</b></a></td>
+<td>Represents a static or instance initializer inside a type. (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IType.html"><b>IType</b></a> )</td>
+</tr>
+<tr>
+<td><a href="../reference/api/org/eclipse/jdt/core/IClassFile.html"><b>IClassFile</b></a></td>
+<td>Represents a compiled (binary) type.  (Child of <a href=
+"../reference/api/org/eclipse/jdt/core/IPackageFragment.html"><b>IPackageFragment</b></a> )</td>
+
+</tr>
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/ITypeParameter.html"><b>ITypeParameter</b></a></td>
+<td>Represents a type parameter.  (Not a child of any Java element, it is obtained using
+<a href=
+"../reference/api/org/eclipse/jdt/core/IType.html#getTypeParameter(java.lang.String)"><b>IType.getTypeParameter(String)</b></a>
+or <a href=
+"../reference/api/org/eclipse/jdt/core/IMethod.html#getTypeParameter(java.lang.String)"><b>IMethod.getTypeParameter(String)</b></a>)</td>
+</tr>
+<tr>
+<td><a href=
+"../reference/api/org/eclipse/jdt/core/ILocalVariable.html"><b>ILocalVariable</b></a></td>
+
+<td>Represents a local variable in a method or an initializer.  (Not a child of any Java
+element, it is obtained using <a href=
+"../reference/api/org/eclipse/jdt/core/ICodeAssist.html#codeSelect(int,%20int)"><b>ICodeAssist.codeSelect(int,
+int)</b></a>)</td>
+</tr>
+<tr>
+<td><a href="../reference/api/org/eclipse/jdt/core/IAnnotation.html"><b>IAnnotation</b></a></td>
+<td>Represents a Java 5 annotation. (Not a child of any Java element, it is obtained using <a href=
+"../reference/api/org/eclipse/jdt/core/IAnnotatable.html#getAnnotation(java.lang.String)"><b>IAnnotatable.getAnnotation(String)</b></a>
+or <a href=
+"../reference/api/org/eclipse/jdt/core/IAnnotatable.html#getAnnotations()"><b>IAnnotatable.getAnnotations()</b></a>)</td>
+
+</tr>
+<tr>
+<td><a href="../reference/api/org/eclipse/jdt/core/IAnnotatable.html"><b>IAnnotatable</b></a></td>
+<td>Represents a type, a field, a method, a local variable, or a package declaration that can be
+annotated with one or several <a href=
+"../reference/api/org/eclipse/jdt/core/IAnnotation.html"><b>IAnnotation</b></a>s.</td>
+</tr>
+</tbody>
 </table>
-<p> All Java elements support the <a href="../reference/api/org/eclipse/jdt/core/IJavaElement.html"><b> 
-  IJavaElement</b></a> interface. </p>
-<p> Some of the elements are shown in the Packages view.  These elements 
-  implement the <b><a href="../reference/api/org/eclipse/jdt/core/IOpenable.html"> 
-  IOpenable</a> </b> interface, since they must be opened before they can be navigated. 
-  The figure below shows how these elements are represented in the Packages view.</p>
-<p><img src="images/openables.png"  border="0" alt="Packages View showing elements implementing the IOpenable interface"> 
-</p>
-<p>The Java elements that implement <b><a href="../reference/api/org/eclipse/jdt/core/IOpenable.html"> 
-  IOpenable</a> </b> are created primarily from information found in the underlying 
-  resource files.  The same elements are represented generically in the resource 
-  navigator view.</p>
-<p><img src="images/javanavigator.png"  border="0" alt="Resource Navigator showing elements implementing the IOpenable interface"> 
-</p>
-<p>Since 3.3, <b><a href="../reference/api/org/eclipse/jdt/core/IOpenable.html">IOpenable</a></b>s that are the root of 
-  <b><a href="../reference/api/org/eclipse/jdt/core/IType.html">IType</a></b>s implement 
-  <b><a href="../reference/api/org/eclipse/jdt/core/ITypeRoot.html">ITypeRoot</a> </b>. These are 
-  <b><a href="../reference/api/org/eclipse/jdt/core/ICompilationUnit.html">ICompilationUnit</a></b> and
-  <b><a href="../reference/api/org/eclipse/jdt/core/IClassFile.html">IClassFile</a></b>.
-</p>
-<p> Other elements correspond to the items that make up a Java compilation unit. 
-  The figure below shows a Java compilation unit and a content outliner that displays 
-  the source elements in the compilation unit.</p>
-<img src="images/sourceelements.png"  border="0" alt="An editor and a content outliner illustrating the relation between corresponding source elements"> 
-<p> These elements implement the <a href="../reference/api/org/eclipse/jdt/core/ISourceReference.html"><b> 
-  ISourceReference</b></a> interface, since they can provide corresponding source 
-  code. (As these elements are selected in the content outliner, their corresponding 
-  source code is shown in the Java editor).</p>
-<h3> Java elements and their resources</h3>
-<p> Many of the Java elements correspond to generic resources in the workspace.  
-  When you want to create Java elements from a generic resource the class <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b> 
-  JavaCore</b></a> is the best starting point. The following code snippet shows 
-  how to get Java elements from their corresponding resources.</p>
-<pre>
-<font color="#4444cc">    
+<p>All Java elements support the <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaElement.html"><b>IJavaElement</b></a> interface.</p>
+<p>Some of the elements are shown in the Packages view.  These elements implement the
+
+<b><a href="../reference/api/org/eclipse/jdt/core/IOpenable.html">IOpenable</a></b> interface,
+since they must be opened before they can be navigated. The figure below shows how these elements
+are represented in the Packages view.</p>
+<p><img src="images/openables.png" border="0" alt=
+"Packages View showing elements implementing the IOpenable interface" /></p>
+<p>The Java elements that implement <b><a href=
+"../reference/api/org/eclipse/jdt/core/IOpenable.html">IOpenable</a></b> are created primarily from
+information found in the underlying resource files.  The same elements are represented
+generically in the resource navigator view.</p>
+<p><img src="images/javanavigator.png" border="0" alt=
+"Resource Navigator showing elements implementing the IOpenable interface" /></p>
+<p>Since 3.3, <b><a href="../reference/api/org/eclipse/jdt/core/IOpenable.html">IOpenable</a></b>s
+that are the root of <b><a href="../reference/api/org/eclipse/jdt/core/IType.html">IType</a></b>s
+implement <b><a href="../reference/api/org/eclipse/jdt/core/ITypeRoot.html">ITypeRoot</a></b> .
+These are <b><a href=
+"../reference/api/org/eclipse/jdt/core/ICompilationUnit.html">ICompilationUnit</a></b> and
+
+<b><a href="../reference/api/org/eclipse/jdt/core/IClassFile.html">IClassFile</a></b>.</p>
+<p>Other elements correspond to the items that make up a Java compilation unit. The figure below
+shows a Java compilation unit and a content outliner that displays the source elements in the
+compilation unit.</p>
+<img src="images/sourceelements.png" border="0" alt=
+"An editor and a content outliner illustrating the relation between corresponding source elements" />
+<p>These elements implement the <a href=
+"../reference/api/org/eclipse/jdt/core/ISourceReference.html"><b>ISourceReference</b></a>
+interface, since they can provide corresponding source code. (As these elements are selected in the
+content outliner, their corresponding source code is shown in the Java editor).</p>
+<h3>Java elements and their resources</h3>
+<p>Many of the Java elements correspond to generic resources in the workspace.  When you want
+to create Java elements from a generic resource the class <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> is the best starting
+point. The following code snippet shows how to get Java elements from their corresponding
+resources.</p>
+
+<pre class="color1">
+    
     private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
         IJavaProject myJavaProject= JavaCore.create(myProject);
         if (myJavaProject == null)
@@ -194,42 +205,42 @@
         // get a .java (compilation unit), .class (class file), or
         // .jar (package fragment root)
         IJavaElement myJavaFile = JavaCore.create(myFile);
-    }</font></pre> 
-<p>Once you have a Java element, you can use the JDT API to traverse and query
-the model.  You may also query the non-Java resources contained in a Java
-element. </p>
-<pre>
-<font color="#4444cc">
+    }
+</pre>
+<p>Once you have a Java element, you can use the JDT API to traverse and query the model.  You
+may also query the non-Java resources contained in a Java element. </p>
+<pre class="color1">
     private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) throws JavaModelException {
         ...
         // get the non Java resources contained in my project.
         Object[] nonJavaChildren = myJavaProject.getNonJavaResources();
         ...
-    }</font></pre>
-<h3> Java projects</h3>
-<p>When you create a Java project from a simple project, <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b> 
-  JavaCore</b></a> will check to see if the project is configured with the Java 
-  nature.  The JDT plug-in uses a project nature to designate a project as 
-  having Java behavior.  This nature (<b>org.eclipse.jdt.core.JavaCore#NATURE_ID</b> 
-  ) is assigned to a project when the "New Java project" wizard creates a project.  
-  If the Java nature is not configured on a project, <a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b> 
-  JavaCore</b></a> will return null when asked to create the project.</p>
-<p><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> 
-  is also used to maintain the Java class path, including locations for finding 
-  source code and libraries, and locations for generating output binary (<b>.class</b>) 
-  files.</p>
-<p> What are the unique characteristics of Java projects? They record their classpath 
-  in a "<b>.classpath</b>" file and add the Java incremental project builder to 
-  the project's build spec.  Otherwise, they are just regular projects and 
-  can be configured with other natures (and other incremental builders) by plug-ins. 
-  Plug-ins that want to configure projects with Java behavior in addition to their 
-  own behavior typically use the <b><a href="../reference/api/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPage.html"> 
-  NewJavaProjectWizardPage</a> </b> to assign the Java nature to the project in 
-  addition to their own custom natures or behavior.</p>
-<p><a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b> IJavaModel</b></a> 
-  can be considered the parent of all projects in the workspace that have the 
-  Java project nature (and therefore can be treated as an <a href="../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b> 
-  IJavaProject</b></a>).</p>
+    }
+</pre>
+<h3>Java projects</h3>
+<p>When you create a Java project from a simple project, <a href=
+"../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> will check to see if the
+project is configured with the Java nature.  The JDT plug-in uses a project nature to
+designate a project as having Java behavior.  This nature
+(<b>org.eclipse.jdt.core.JavaCore#NATURE_ID</b> ) is assigned to a project when the "New Java
+project" wizard creates a project.  If the Java nature is not configured on a project,
+
+<a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> will return null
+when asked to create the project.</p>
+<p><a href="../reference/api/org/eclipse/jdt/core/JavaCore.html"><b>JavaCore</b></a> is also used
+to maintain the Java class path, including locations for finding source code and libraries, and
+locations for generating output binary (<b>.class</b>) files.</p>
+<p>What are the unique characteristics of Java projects? They record their classpath in a
+"<b>.classpath</b>" file and add the Java incremental project builder to the project's build
+spec.  Otherwise, they are just regular projects and can be configured with other natures (and
+other incremental builders) by plug-ins. Plug-ins that want to configure projects with Java
+behavior in addition to their own behavior typically use the <b><a href=
+"../reference/api/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPage.html">NewJavaProjectWizardPage</a></b>
 
+to assign the Java nature to the project in addition to their own custom natures or behavior.</p>
+<p><a href="../reference/api/org/eclipse/jdt/core/IJavaModel.html"><b>IJavaModel</b></a> can be
+considered the parent of all projects in the workspace that have the Java project nature (and
+therefore can be treated as an <a href=
+"../reference/api/org/eclipse/jdt/core/IJavaProject.html"><b>IJavaProject</b></a>).</p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/jdtOptions.txt b/eclipse/plugins/org.eclipse.jdt.doc.isv/jdtOptions.txt
index 9b51010..5add7e8 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/jdtOptions.txt
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/jdtOptions.txt
@@ -31,9 +31,9 @@
 ;../org.eclipse.jdt.apt.core/src"
 -d reference/api
 -classpath @rt@
-;../com.ibm.icu_4.2.1.v20100412.jar
+;../com.ibm.icu_4.4.2.v20110208.jar
 ;../org.eclipse.jdt.apt.core/mirrorapi.jar
-;../org.apache.ant_1.7.1.v20100518-1145/lib/ant.jar
+;../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar
 ;../org.eclipse.ant.core/@dot
 ;../org.eclipse.compare/@dot
 ;../org.eclipse.compare.core/@dot
@@ -91,12 +91,22 @@
 -splitIndex
 -windowtitle "Eclipse JDT API Specification"
 -doctitle "Eclipse JDT API Specification"
--header "<b>Eclipse JDT</b><br>Release 3.6"
--bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.</p></font>'
--group "Java development tools core plug-in packages" "org.eclipse.jdt.core
+-header "<b>Eclipse JDT</b><br>Release 3.7"
+-bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.</p></font>'
+-group "Java development tools core packages" "org.eclipse.jdt.core
 ;org.eclipse.jdt.core.*"
--group "Java development tools UI plug-in packages" "org.eclipse.jdt.ui
+-group "Java development tools UI packages" "org.eclipse.jdt.ui
 ;org.eclipse.jdt.ui.*"
+-group "Java development tools APT packages" "org.eclipse.jdt.apt.core
+;org.eclipse.jdt.apt.core.*
+;com.sun.mirror.*"
+-group "Java development tools debug and launching packages" "org.eclipse.ant.launching
+;org.eclipse.ant.ui.launching
+;org.eclipse.jdt.debug.*
+;org.eclipse.jdt.launching
+;org.eclipse.jdt.launching.*"
+-group "Java development tools JUnit packages" "org.eclipse.jdt.junit
+;org.eclipse.jdt.junit.*"
 -link http://download.oracle.com/javase/6/docs/api
 -linkoffline ./../../../org.eclipse.platform.doc.isv/reference/api ../org.eclipse.platform.doc.isv/reference/api
 -link http://bundles.osgi.org/javadoc/r4
@@ -107,8 +117,6 @@
 -tag 'nooverride:a:Restriction:'
 -tag 'category:a:Category:'
 
-org.eclipse.ant.launching
-org.eclipse.ant.ui.launching
 org.eclipse.jdt.core
 org.eclipse.jdt.core.compiler
 org.eclipse.jdt.core.dom
@@ -122,15 +130,7 @@ org.eclipse.jdt.core.refactoring.descriptors
 org.eclipse.jdt.core.refactoring.participants
 org.eclipse.jdt.core.search
 org.eclipse.jdt.core.util
-org.eclipse.jdt.debug.core
-org.eclipse.jdt.debug.eval
-org.eclipse.jdt.debug.ui
-org.eclipse.jdt.debug.ui.breakpoints
-org.eclipse.jdt.debug.ui.launchConfigurations
-org.eclipse.jdt.launching
-org.eclipse.jdt.launching.environments
-org.eclipse.jdt.launching.sourcelookup
-org.eclipse.jdt.launching.sourcelookup.containers
+
 org.eclipse.jdt.ui
 org.eclipse.jdt.ui.actions
 org.eclipse.jdt.ui.cleanup
@@ -143,6 +143,27 @@ org.eclipse.jdt.ui.text.folding
 org.eclipse.jdt.ui.text.java
 org.eclipse.jdt.ui.text.java.hover
 org.eclipse.jdt.ui.wizards
+
+com.sun.mirror.apt
+com.sun.mirror.declaration
+com.sun.mirror.type
+com.sun.mirror.util
+org.eclipse.jdt.apt.core.build
+org.eclipse.jdt.apt.core.env
+org.eclipse.jdt.apt.core.util
+
+org.eclipse.ant.launching
+org.eclipse.ant.ui.launching
+org.eclipse.jdt.debug.core
+org.eclipse.jdt.debug.eval
+org.eclipse.jdt.debug.ui
+org.eclipse.jdt.debug.ui.breakpoints
+org.eclipse.jdt.debug.ui.launchConfigurations
+org.eclipse.jdt.launching
+org.eclipse.jdt.launching.environments
+org.eclipse.jdt.launching.sourcelookup
+org.eclipse.jdt.launching.sourcelookup.containers
+
 org.eclipse.jdt.junit
 org.eclipse.jdt.junit.launcher
 org.eclipse.jdt.junit.model
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/jdtaptOptions.txt b/eclipse/plugins/org.eclipse.jdt.doc.isv/jdtaptOptions.txt
deleted file mode 100644
index 95df4fb..0000000
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/jdtaptOptions.txt
+++ /dev/null
@@ -1,112 +0,0 @@
--quiet
--encoding "iso-8859-1"
--charset "iso-8859-1"
--sourcepath "../org.eclipse.jdt.core/antadapter
-;../org.eclipse.jdt.core/batch
-;../org.eclipse.jdt.core/codeassist
-;../org.eclipse.jdt.core/compiler
-;../org.eclipse.jdt.core/dom
-;../org.eclipse.jdt.core/eval
-;../org.eclipse.jdt.core/formatter
-;../org.eclipse.jdt.core/model
-;../org.eclipse.jdt.core/search
-;../org.eclipse.jdt.debug/model
-;../org.eclipse.jdt.debug/jdi
-;../org.eclipse.jdt.debug/eval
-;../org.eclipse.jdt.debug.ui/ui
-;../org.eclipse.jdt.junit/src
-;../org.eclipse.jdt.junit.core/src
-;../org.eclipse.jdt.junit.runtime/src
-;../org.eclipse.jdt.launching/launching
-;../org.eclipse.jdt.ui/ui
-;../org.eclipse.jdt.ui/core refactoring
-;../org.eclipse.jdt.ui/ui refactoring
-;../org.eclipse.jdt.ui/core extension
-;../org.eclipse.jdt.ui/internal compatibility
-;../org.eclipse.jdt.core.manipulation/refactoring
-;../org.eclipse.jdt.core.manipulation/common
-;../org.eclipse.jdt.apt.core/src"
--d reference/apt
--classpath ${bootclasspath}
-;../com.ibm.icu_4.2.1.v20100412.jar
-;../org.eclipse.jdt.apt.core/mirrorapi.jar
-;../org.apache.ant_1.7.1.v20100518-1145/lib/ant.jar
-;../org.eclipse.ant.core/@dot
-;../org.eclipse.compare/@dot
-;../org.eclipse.compare.core/@dot
-;../org.eclipse.core.commands/@dot
-;../org.eclipse.core.contenttype/@dot
-;../org.eclipse.core.expressions/@dot
-;../org.eclipse.core.externaltools/@dot
-;../org.eclipse.core.filebuffers/@dot
-;../org.eclipse.core.filesystem/@dot
-;../org.eclipse.core.jobs/@dot
-;../org.eclipse.core.resources/@dot
-;../org.eclipse.core.runtime/@dot
-;../org.eclipse.core.runtime.content/@dot
-;../org.eclipse.core.runtime.jobs/@dot
-;../org.eclipse.core.runtime.preferences/@dot
-;../org.eclipse.core.variables/@dot
-;../org.eclipse.debug.core/@dot
-;../org.eclipse.debug.ui/@dot
-;../org.eclipse.equinox.app/@dot
-;../org.eclipse.equinox.common/@dot
-;../org.eclipse.equinox.preferences/@dot
-;../org.eclipse.equinox.registry/@dot
-;../org.eclipse.equinox.supplement/@dot
-;../org.eclipse.help/@dot
-;../org.eclipse.help.ui/@dot
-;../org.eclipse.jdt.core/@dot
-;../org.eclipse.jdt.core.manipulation/@dot
-;../org.eclipse.jdt.debug/jdi.jar
-;../org.eclipse.jdt.junit/@dot
-;../org.eclipse.jdt.junit.core/@dot
-;../org.eclipse.jface/@dot
-;../org.eclipse.jface.text/@dot
-;../org.eclipse.ltk.core.refactoring/@dot
-;../org.eclipse.ltk.ui.refactoring/@dot
-;../org.eclipse.osgi.services/@dot
-;../org.eclipse.osgi.util/@dot
-;../org.eclipse.osgi/@dot
-;../org.eclipse.search/@dot
-;../org.eclipse.swt.win32.win32.x86/@dot
-;../org.eclipse.team.core/@dot
-;../org.eclipse.team.ui/@dot
-;../org.eclipse.text/@dot
-;../org.eclipse.ui/@dot
-;../org.eclipse.ui.console/@dot
-;../org.eclipse.ui.editors/@dot
-;../org.eclipse.ui.externaltools/@dot
-;../org.eclipse.ui.forms/@dot
-;../org.eclipse.ui.ide/@dot
-;../org.eclipse.ui.navigator/@dot
-;../org.eclipse.ui.views/@dot
-;../org.eclipse.ui.workbench.texteditor/@dot
-;../org.eclipse.ui.workbench/@dot
-;../org.junit/junit.jar
--breakiterator
--use
--splitIndex
--windowtitle "Eclipse JDT API Specification"
--doctitle "Eclipse JDT API Specification"
--header "<b>Eclipse JDT</b><br>Release 3.6"
--bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.</p></font>'
--group "Java development tools APT plug-in packages" "org.eclipse.jdt.apt.core
-;org.eclipse.jdt.apt.core.*"
--link http://download.oracle.com/javase/6/docs/api
--linkoffline ./../../../org.eclipse.platform.doc.isv/reference/api ../org.eclipse.platform.doc.isv/reference/api
--linkoffline ./../../../org.eclipse.jdt.doc.isv/reference/api ./reference/api
--link http://bundles.osgi.org/javadoc/r4
--tag 'noimplement:a:Restriction:'
--tag 'noextend:a:Restriction:'
--tag 'noreference:a:Restriction:'
--tag 'noinstantiate:a:Restriction:'
--tag 'nooverride:a:Restriction:'
-
-org.eclipse.jdt.apt.core.build
-org.eclipse.jdt.apt.core.env
-org.eclipse.jdt.apt.core.util
-com.sun.mirror.apt
-com.sun.mirror.declaration
-com.sun.mirror.type
-com.sun.mirror.util
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/notices.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/notices.html
index 33aa981..579df95 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/notices.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/notices.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <LINK REL="STYLESHEET" HREF="book.css" CHARSET="ISO-8859-1" TYPE="text/css">
@@ -13,7 +13,7 @@
 <h3>
 <a NAME="Notices"></a>Notices</h3>
 <p>
-The material in this guide is Copyright (c) IBM Corporation and others 2000, 2010.
+The material in this guide is Copyright (c) IBM Corporation and others 2000, 2011.
 </p>
 <p>
 <a href="about.html">Terms and conditions regarding the use of this guide.</a>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.2/recommended.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.2/recommended.html
index 19bae6c..c3a7f39 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.2/recommended.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.2/recommended.html
@@ -3,12 +3,13 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript"></script>
 <title>Changes required when adopting 3.2 mechanisms and APIs</title>
 </head>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.3/recommended.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.3/recommended.html
index 64de020..ef8a7b4 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.3/recommended.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.3/recommended.html
@@ -3,12 +3,13 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript"></script>
 <title>Adopting 3.3 mechanisms and APIs</title>
 </head>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/faq.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/faq.html
new file mode 100644
index 0000000..3053954
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/faq.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<title>Eclipse 3.7 Plug-in Migration FAQ</title>
+</head>
+
+<body>
+
+<h1>Eclipse 3.7 Plug-in Migration FAQ</h1>
+
+<ol>
+	<li><a href="#deadcodeoptimization">Why do I see a difference in the bytecode generated by 3.7 as 
+	compared to the one generated by 3.6?</a></li>
+</ol>
+<h2><a name="deadcodeoptimization">Why do I see a difference in the bytecode generated by 3.7 as 
+compared to the one generated by 3.6?</a></h2>
+<p>
+While implementing the fix for bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326950">326950</a>,
+the compiler's bytecode generation changed for code that is analysed to be dead because of compiler's null analysis.
+The compiler no longer skips generating bytecode for code that is found dead as a result of a redundant null check.</p>
+
+<p>For example:</p>
+<pre>
+	String s = null ;
+	if (s == null) {
+		System.out.println("SUCCESS");
+	} else {
+		System.out.println("Dead code, but don't skip me");
+	}
+</pre>
+
+<p>In the above code, the compiler will generate bytecode corresponding to the statement
+<code>System.out.println("Dead code, but don't skip me")</code> even though the else branch 
+can never be reached since <code>s</code> is always null. In 3.6, the compiler would always
+skip generating bytecode for dead code.</p>
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/incompatibilities.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/incompatibilities.html
new file mode 100644
index 0000000..3b5d6e8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/incompatibilities.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<title>Incompatibilities between Eclipse 3.6 and 3.7</title>
+</head>
+<body>
+<h1>Incompatibilities between Eclipse 3.6 and 3.7</h1>
+
+<p>
+  Eclipse did not change incompatibly between 3.6 and 3.7 in ways that affect 
+  plug-ins. Plugins that ran on 3.6 should run on 3.7 without any problems.
+</p>
+
+<hr>
+
+<!-- ############################################## -->
+<!-- <h2><a name="item1">Item 1</a></h2>
+<p>
+</p>
+-->
+
+<!-- ############################################## -->
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/recommended.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/recommended.html
new file mode 100644
index 0000000..814e5fc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/3.7/recommended.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<title>Adopting 3.7 mechanisms and APIs</title>
+</head>
+
+<body>
+
+<h1>Adopting 3.7 mechanisms and APIs</h1>
+<p>
+  This section describes changes that are required if you are trying to change 
+  your 3.6 plug-in to adopt the 3.7 mechanisms and APIs.
+</p>
+
+<ol>
+	<li>None</li>
+</ol>
+
+<hr>
+
+<!-- ############################################## -->
+<!-- <h2>1. <a name="item1">Item 1</a></h2>
+<p>
+</p>
+-->
+
+<!-- ############################################## -->
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/eclipse_3_7_porting_guide.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/eclipse_3_7_porting_guide.html
new file mode 100644
index 0000000..c92bd92
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/porting/eclipse_3_7_porting_guide.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+
+<head>
+
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Eclipse JDT 3.7 Plug-in Migration Guide</title>
+</head>
+
+<body>
+
+<h1>Eclipse JDT 3.7 Plug-in Migration Guide</h1>
+<p>This guide covers migrating Eclipse JDT 3.6 plug-ins to Eclipse JDT 3.7.</p>
+<p>One of the goals of Eclipse 3.7 was to move Eclipse forward while remaining compatible 
+  with previous versions to the greatest extent possible. That is, plug-ins written 
+  against the Eclipse 3.6 APIs should continue to work in 3.7 in spite of the 
+  API changes.</p>
+<p>The key kinds of compatibility are API contract compatibility and binary compatibility. 
+  API contract compatibility means that valid use of 3.6 APIs remains valid for 
+  3.7, so there is no need to revisit working code. Binary compatibility means 
+  that the API method signatures, etc. did not change in ways that would cause 
+  existing compiled ("binary") code to no longer link and run with the 
+  new 3.7 libraries.</p>
+<p>While every effort was made to avoid breakage, there are a few areas of incompatibility or new
+  APIs that should be adopted by clients. 
+  This document describes those areas and provides instructions for migrating 3.6 plug-ins to 
+  3.7.</p>
+<ul>
+  <li><a href="3.7/faq.html">Eclipse JDT 3.7 Plug-in Migration FAQ</a></li>
+  <li><a href="3.7/incompatibilities.html">Incompatibilities between Eclipse JDT 3.6 and 3.7</a></li>
+  <li><a href="3.7/recommended.html">Adopting 3.7 mechanisms and API</a></li>
+</ul>
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/questions/index.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/questions/index.html
index ecf813f..2431aab 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/questions/index.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/questions/index.html
@@ -1,50 +1,45 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta name="Author" content="OTI">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>JDT Questions Index</title>
 </head>
 <body>
 <h1>JDT Questions Index</h1>
-<h2> JDT Core</h2>
+<h2>JDT Core</h2>
 <ul>
-  <li><a href="../guide/jdt_int_core.htm">What is available in the JDT Core 
-    API Packages?</a> </li>
-  <li><a href="../guide/jdt_api_run.htm">How do I launch a Java program from the 
-    platform?</a> </li>
-  <li><a href="../guide/jdt_api_compile.htm">How do I programmatically compile 
-    a Java program?</a> </li>
-  <li><a href="../guide/jdt_api_classpath.htm">How do I setup a project's classpath?</a> 
-  </li>
-  <li><a href="../guide/jdt_api_manip.htm">How do I manipulate Java code?</a> 
-  </li>
-  <li><a href="../guide/jdt_api_search.htm">How do I use the Java search engine?</a> 
-  </li>
-  <li><a href="../guide/jdt_api_options.htm">What are the JDT Core options? </a> 
-  </li>
-  <li><a href="../guide/jdt_api_codeassist.htm">How do I programmatically use 
-    CodeAssist and CodeSelect?</a> </li>
-  <li><a href="../guide/jdt_int_model.htm">How are Java projects, folders, 
-    and files different from regular resources?</a> </li>
+<li><a href="../guide/jdt_int_core.htm">What is available in the JDT Core API Packages?</a></li>
+
+<li><a href="../guide/jdt_api_run.htm">How do I launch a Java program from the platform?</a></li>
+<li><a href="../guide/jdt_api_compile.htm">How do I programmatically compile a Java
+program?</a></li>
+<li><a href="../guide/jdt_api_classpath.htm">How do I setup a project's classpath?</a></li>
+<li><a href="../guide/jdt_api_manip.htm">How do I manipulate Java code?</a></li>
+<li><a href="../guide/jdt_api_search.htm">How do I use the Java search engine?</a></li>
+<li><a href="../guide/jdt_api_options.htm">What are the JDT Core options?</a></li>
+<li><a href="../guide/jdt_api_codeassist.htm">How do I programmatically use CodeAssist and
+CodeSelect?</a></li>
+<li><a href="../guide/jdt_int_model.htm">How are Java projects, folders, and files different from
+regular resources?</a></li>
 </ul>
-<h2> JDT UI</h2>
+
+<h2>JDT UI</h2>
 <ul>
-  <li><a href="../guide/jdt_int_ui.htm">What is available in the JDT UI packages?</a> 
-  </li>
-  <li><a href="../guide/jdt_api_open_editor.htm">How do I programmatically open 
-    a Java editor and display a specific Java element in the editor?</a> </li>
-  <li><a href="../guide/jdt_api_prompter.htm">How do I programmatically open 
-    the Open Type dialog?</a> <br>
-  </li>
-  <li><a href="../guide/jdt_api_render.htm">How do I present Java elements in 
-    a standard JFace viewer?</a></li>
-  <li><a href="../guide/jdt_api_write_jar_file.htm">How do I write a Jar file?</a></li>
-  <li><a href="../guide/jdt_api_wizards.htm">How do I create a customized 
-    new Java element wizard page?</a></li>
+<li><a href="../guide/jdt_int_ui.htm">What is available in the JDT UI packages?</a></li>
+<li><a href="../guide/jdt_api_open_editor.htm">How do I programmatically open a Java editor and
+display a specific Java element in the editor?</a></li>
+<li><a href="../guide/jdt_api_prompter.htm">How do I programmatically open the Open Type
+dialog?</a><br /></li>
+<li><a href="../guide/jdt_api_render.htm">How do I present Java elements in a standard JFace
+viewer?</a></li>
+<li><a href="../guide/jdt_api_write_jar_file.htm">How do I write a Jar file?</a></li>
+<li><a href="../guide/jdt_api_wizards.htm">How do I create a customized new Java element wizard
+page?</a></li>
 </ul>
-
 </body>
+
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/extension-points/index.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/extension-points/index.html
index 16b5a27..a9a8698 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/extension-points/index.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/extension-points/index.html
@@ -1,10 +1,11 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
 <title>JDT Extension Points</title>
-<link rel="stylesheet" type="text/css" HREF="../../book.css">
+<link rel="stylesheet" type="text/css" href="../../book.css"/>
 </head>
 <body>
 <h1>JDT Extension Points</h1>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/api-usage-rules.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/api-usage-rules.html
index 6a83810..1f82fd0 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/api-usage-rules.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/api-usage-rules.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -15,7 +15,7 @@
 <h1>
 Eclipse platform<br>
 API rules of engagement</h1>
-<i><font size=-1>Version 0.15 - Last revised 12:00 May 30, 2001</font></i>
+<i>Version 0.15 - Last revised 12:00 May 30, 2001</i>
 <p>Here are the rules of engagement for clients of the Eclipse platform
 API (and other components).</p>
 <h2>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/index.html b/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/index.html
index c1ee77c..8f886fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/index.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/reference/misc/index.html
@@ -1,10 +1,11 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta name="Author" content="OTI">
-<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+<meta name="Author" content="OTI"/>
+<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css"/>
 <title>Other Reference Information</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/toc.xml b/eclipse/plugins/org.eclipse.jdt.doc.isv/toc.xml
index 88207e7..c15f4eb 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/toc.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/toc.xml
@@ -11,7 +11,7 @@
 	<topic label="Reference">
 		<link toc="topics_Reference.xml" />
 	</topic>
-	<topic label="3.6 Plug-in Migration Guide">
+	<topic label="3.7 Plug-in Migration Guide">
 		<link toc="topics_Porting.xml"/>
 	</topic>
 	<topic label="Questions Index" href="questions/index.html">
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Porting.xml b/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Porting.xml
index e3d6b5c..a2c506c 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Porting.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Porting.xml
@@ -4,6 +4,12 @@
 <!-- Define topics for the porting guide index                                     -->
 <!-- ============================================================================= -->
 <toc label="Migration">
+	<topic label="Migrating to Eclipse JDT 3.7 from 3.6">
+		<topic label="Introduction" href="porting/eclipse_3_7_porting_guide.html"/>
+		<topic label="FAQ" href="porting/3.7/faq.html" />
+		<topic label="Incompatibilities" href="porting/3.7/incompatibilities.html" />
+		<topic label="Adopting 3.7 Mechanisms and API" href="porting/3.7/recommended.html" />
+	</topic>
 	<topic label="Migrating to Eclipse JDT 3.6 from 3.5">
 		<topic label="Introduction" href="porting/eclipse_3_6_porting_guide.html"/>
 		<topic label="FAQ" href="porting/3.6/faq.html" />
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Reference.xml b/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Reference.xml
index 35a07b5..d7a236f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Reference.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.isv/topics_Reference.xml
@@ -7,6 +7,13 @@
 	<topic label="API Reference" href="reference/api/overview-summary.html">
 	   <topic label="org.eclipse.ant.launching" href="reference/api/org/eclipse/ant/launching/package-summary.html"/>
 	   <topic label="org.eclipse.ant.ui.launching" href="reference/api/org/eclipse/ant/ui/launching/package-summary.html"/>
+       <topic label="org.eclipse.jdt.apt.core.build" href="reference/api/org/eclipse/jdt/apt/core/build/package-summary.html"/>
+       <topic label="org.eclipse.jdt.apt.core.env" href="reference/api/org/eclipse/jdt/apt/core/env/package-summary.html"/>
+       <topic label="org.eclipse.jdt.apt.core.util" href="reference/api/org/eclipse/jdt/apt/core/util/package-summary.html"/>
+       <topic label="com.sun.mirror.apt" href="reference/api/com/sun/mirror/apt/package-summary.html"/>
+       <topic label="com.sun.mirror.declaration" href="reference/api/com/sun/mirror/declaration/package-summary.html"/>
+       <topic label="com.sun.mirror.type" href="reference/api/com/sun/mirror/type/package-summary.html"/>
+       <topic label="com.sun.mirror.util" href="reference/api/com/sun/mirror/util/package-summary.html"/>
        <topic label="org.eclipse.jdt.core" href="reference/api/org/eclipse/jdt/core/package-summary.html"/>
        <topic label="org.eclipse.jdt.core.compiler" href="reference/api/org/eclipse/jdt/core/compiler/package-summary.html"/>
        <topic label="org.eclipse.jdt.core.dom" href="reference/api/org/eclipse/jdt/core/dom/package-summary.html"/>
@@ -47,24 +54,15 @@
        <topic label="org.eclipse.jdt.junit.wizards" href="reference/api/org/eclipse/jdt/junit/wizards/package-summary.html"/>
 	</topic>
 
-	<topic label="APT API Reference" href="reference/apt/overview-summary.html">
-       <topic label="com.sun.mirror.apt" href="reference/apt/com/sun/mirror/apt/package-summary.html"/>
-       <topic label="com.sun.mirror.declaration" href="reference/apt/com/sun/mirror/declaration/package-summary.html"/>
-       <topic label="com.sun.mirror.type" href="reference/apt/com/sun/mirror/type/package-summary.html"/>
-       <topic label="com.sun.mirror.util" href="reference/apt/com/sun/mirror/util/package-summary.html"/>
-       <topic label="org.eclipse.jdt.apt.core.build" href="reference/apt/org/eclipse/jdt/apt/core/build/package-summary.html"/>
-       <topic label="org.eclipse.jdt.apt.core.env" href="reference/apt/org/eclipse/jdt/apt/core/env/package-summary.html"/>
-       <topic label="org.eclipse.jdt.apt.core.util" href="reference/apt/org/eclipse/jdt/apt/core/util/package-summary.html"/>
-	</topic>
-
 	<topic label="Extension Points Reference" href="reference/extension-points/index.html">
 	     <topic label="org.eclipse.jdt.apt.core.annotationProcessorFactory" href="reference/extension-points/org_eclipse_jdt_apt_core_annotationProcessorFactory.html"/>
          <topic label="org.eclipse.jdt.core.annotationProcessorManager" href="reference/extension-points/org_eclipse_jdt_core_annotationProcessorManager.html"/>
          <topic label="org.eclipse.jdt.core.classpathContainerInitializer" href="reference/extension-points/org_eclipse_jdt_core_classpathContainerInitializer.html"/>
          <topic label="org.eclipse.jdt.core.classpathVariableInitializer" href="reference/extension-points/org_eclipse_jdt_core_classpathVariableInitializer.html"/>
+         <topic label="org.eclipse.jdt.core.compilationParticipant" href="reference/extension-points/org_eclipse_jdt_core_compilationParticipant.html"/>
          <topic label="org.eclipse.jdt.core.codeFormatter" href="reference/extension-points/org_eclipse_jdt_core_codeFormatter.html"/>
          <topic label="org.eclipse.jdt.core.manipulation.changeMethodSignatureParticipants" href="reference/extension-points/org_eclipse_jdt_core_manipulation_changeMethodSignatureParticipants.html"/>
-         <topic href="reference/extension-points/org_eclipse_jdt_debug_breakpointListeners.html" label="org.eclipse.jdt.debug.breakpointListeners"/>
+         <topic label="org.eclipse.jdt.debug.breakpointListeners" href="reference/extension-points/org_eclipse_jdt_debug_breakpointListeners.html"/>
          <topic label="org.eclipse.jdt.debug.javaLogicalStructures" href="reference/extension-points/org_eclipse_jdt_debug_javaLogicalStructures.html"/>
          <topic label="org.eclipse.jdt.debug.ui.vmInstallPages" href="reference/extension-points/org_eclipse_jdt_debug_ui_vmInstallPages.html"/>
          <topic label="org.eclipse.jdt.debug.ui.vmInstallTypePage" href="reference/extension-points/org_eclipse_jdt_debug_ui_vmInstallTypePage.html"/>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF
index 67a866e..283bae7 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.doc.user; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/about.html b/eclipse/plugins/org.eclipse.jdt.doc.user/about.html
index 4602330..ac07a01 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/about.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/about.html
@@ -1,7 +1,8 @@
 <!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">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2001, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>About</title>
 </head>
@@ -25,4 +26,4 @@ indicated below, the terms and conditions of the EPL still apply to any source c
 and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/about.properties b/eclipse/plugins/org.eclipse.jdt.doc.user/about.properties
index e750e07..b0df2ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/about.properties
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Java development tooling user guide\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright IBM Corporation and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright IBM Corporation and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/jdt
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/book.css b/eclipse/plugins/org.eclipse.jdt.doc.user/book.css
index d7e2b57..933aa99 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/book.css
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/book.css
@@ -20,3 +20,7 @@ p.nav_footer a {
 	font-weight: bold;
 	font-style: italic;
 }
+
+span.token {
+	color: green
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-access-rules-combine-rules.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-access-rules-combine-rules.htm
new file mode 100644
index 0000000..1118111
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-access-rules-combine-rules.htm
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Combine Access Rules
+    </title>
+  </head>
+
+  <body>
+    <h1>
+      Combine Access Rules
+    </h1>
+    <p>
+      Access rules that can added to build classpath entries to specify which types in the given
+      entry can be accessed and which not, can be combined with the access rules that are specified
+      for the exported build path entries of the required project by checking the checkbox
+      <b>Combine rules with the access rules of the exported project entries</b> in the <b>Type
+      Access Rules</b> dialog. If unchecked, only the rules given in the dialog are applied.
+    </p>
+
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+    </p>
+    <p>
+      <a href="concept-access-rules.htm">Access Rules</a><br />
+      <a href="concept-java-builder.htm">Java builder</a><br />
+      <a href="concept-classpath-variables.htm">Classpath variable</a><br />
+
+      <a href="concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a>
+    </p>
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br />
+      <a href=
+      "../reference/preferences/java/compiler/ref-preferences-errors-warnings.htm">Error/Warnings
+      preference page</a>
+
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-access-rules.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-access-rules.htm
index b435838..bece216 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-access-rules.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-access-rules.htm
@@ -1,46 +1,62 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Access Rules</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Access Rules
+    </title>
   </head>
 
   <body>
-    <h1>Access Rules</h1>
-
-    Access rules can be added to build classpath entries to specify which types in the given entry
-    can be accessed and which not. If the compiler detects a type access to a type that should not be
-    accessed, it will create a problem marker.
+    <h1>
+      Access Rules
+    </h1>Access rules can be added to build classpath entries to specify which types in the given
+    entry can be accessed and which not. If the compiler detects a type access to a type that
+    should not be accessed, it will create a problem marker.
     <ul>
-    <li>Non-accessible rules define types that must not be referenced. The compiler typically creates an error marker for accesses to these types.</li>
-    <li>Discouraged rules define types that should not be referenced. The compiler typically creates a warning marker for accesses to these types.</li>
-    <li>Accessible rules define types that can be referenced.</li>
-    </ul>
-    Each rule consist of a pattern (same format as ANT patterns) and one of the rule types listed above.<br>
-    Each classpath entry can have any number of rules defined. The compiler will process the list in the order
-    defined and take the first matching rule. <br><br>  
-    The severity of the problem marker generated for accesses to 'Non-accessible' and 'Discouraged' type can be configured
-    on the Java compiler's <a href="../reference/preferences/java/compiler/ref-preferences-errors-warnings.htm">Error/Warnings</a> preference page.     
-
-    <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ></p>
+      <li>Non-accessible rules define types that must not be referenced. The compiler typically
+      creates an error marker for accesses to these types.
+      </li>
+      <li>Discouraged rules define types that should not be referenced. The compiler typically
+      creates a warning marker for accesses to these types.
+      </li>
+      <li>Accessible rules define types that can be referenced.
+      </li>
+
+    </ul>Each rule consist of a pattern (same format as ANT patterns) and one of the rule types
+    listed above.<br />
+    Each classpath entry can have any number of rules defined. The compiler will process the list
+    in the order defined and take the first matching rule.<br />
+    <br />
+    The severity of the problem marker generated for accesses to 'Non-accessible' and 'Discouraged'
+    type can be configured on the Java compiler's <a href=
+    "../reference/preferences/java/compiler/ref-preferences-errors-warnings.htm">Error/Warnings</a>
+    preference page.
     <p>
-     <a href="concept-java-builder.htm">Java builder</a><br>
-     <a href="concept-classpath-variables.htm">Classpath variable</a><br>
-     <a href="concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a><br>
-     <a href="concept-access-rules.htm">Access rules</a>    </p>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
 
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" >
     </p>
     <p>
-     <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br>
-     <a href="../reference/preferences/java/compiler/ref-preferences-errors-warnings.htm">Error/Warnings preference page</a>
+      <a href="concept-access-rules-combine-rules.htm">Combine Access Rules</a><br />
+      <a href="concept-java-builder.htm">Java builder</a><br />
+      <a href="concept-classpath-variables.htm">Classpath variable</a><br />
+      <a href="concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a>
     </p>
 
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br />
+      <a href=
+      "../reference/preferences/java/compiler/ref-preferences-errors-warnings.htm">Error/Warnings
+      preference page</a>
+    </p>
   </body>
-</html>
 
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-build-classpath.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-build-classpath.htm
index 7e33837..6738018 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-build-classpath.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-build-classpath.htm
@@ -1,39 +1,48 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Build Classpath</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Build Classpath
+    </title>
   </head>
 
   <body>
-    <h1>Build Classpath</h1>
-
-    <p>The build classpath specifies which Java source files and resource files in a project are considered by the Java builder
-    and specifies how to find types outside of the project. The Java builder compiles the Java source files
-    into the output folder and also copies the resources into it.  The build classpath is
-    specified for each project. In the project properties, it is referred
-    to as the <strong>Java Build Path</strong></p>
-
-    <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ></p>
+    <h1>
+      Build Classpath
+    </h1>
     <p>
-     <a href="concept-java-builder.htm">Java builder</a><br>
-     <a href="concept-classpath-variables.htm">Classpath variables</a><br>
-     <a href="concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a><br>
-     <a href="concept-access-rules.htm">Access rules</a>
+      The build classpath specifies which Java source files and resource files in a project are
+      considered by the Java builder and specifies how to find types outside of the project. The
+      Java builder compiles the Java source files into the output folder and also copies the
+      resources into it. The build classpath is specified for each project. In the project
+      properties, it is referred to as the <strong>Java Build Path</strong>
     </p>
+    <p>
 
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-     <a href="../reference/preferences/java/buildpath/ref-preferences-classpath-variables.htm">Classpath variables preferences</a><br>
-     <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br>
+      <a href="concept-java-builder.htm">Java builder</a><br />
+      <a href="concept-classpath-variables.htm">Classpath variables</a><br />
+      <a href="concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a><br />
+      <a href="concept-access-rules.htm">Access rules</a>
+
+    </p>
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href=
+      "../reference/preferences/java/buildpath/ref-preferences-classpath-variables.htm">Classpath
+      variables preferences</a><br />
+      <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br />
     </p>
 
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-classpath-variables.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-classpath-variables.htm
index 831eb87..a59743c 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-classpath-variables.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-classpath-variables.htm
@@ -1,44 +1,53 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Classpath Variables</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Classpath Variables
+    </title>
   </head>
 
   <body>
-    <h1>Classpath Variables</h1>
-
-    <p>The build path for a Java project can include source code files, other
-    Java projects, folders containing class files and JAR files. JAR files can be specified using file
-    system paths, or by using variables that refer to locations on the
-    network. </p>
-
-    <p>Classpath variables allow you to avoid references to the location of a JAR
-    file or folders on your local file system. By using a classpath variable, you can
-    specify a JAR file or folder using only a variable name, such as JRE_LIB,
-    rather than specifying the location on your workstation. In
-    this way, you can share build paths across teams and define the variables to
-    refer to the correct location for your particular computer.</p>
+    <h1>
+      Classpath Variables
+    </h1>
+    <p>
+      The build path for a Java project can include source code files, other Java projects, folders
+      containing class files and JAR files. JAR files can be specified using file system paths, or
+      by using variables that refer to locations on the network. 
+    </p>
+    <p>
+      Classpath variables allow you to avoid references to the location of a JAR file or folders on
+      your local file system. By using a classpath variable, you can specify a JAR file or folder
+      using only a variable name, such as JRE_LIB, rather than specifying the location on your
+      workstation. In this way, you can share build paths across teams and define the variables to
+      refer to the correct location for your particular computer.
+    </p>
 
-    <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ></p>
     <p>
-     <a href="concept-java-builder.htm">Java builder</a><br>
-     <a href="concept-classpath-variables.htm">Classpath variable</a><br>
-     <a href="concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a><br>
-     <a href="concept-access-rules.htm">Access rules</a>
-	</p>
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ></p>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+    </p>
+    <p>
+      <a href="concept-java-builder.htm">Java builder</a><br />
+      <a href="concept-classpath-variables.htm">Classpath variable</a><br />
+      <a href="concept-inclusion-exclusion-patterns.htm">Inclusion and exclusion patterns</a><br />
+
+      <a href="concept-access-rules.htm">Access rules</a>
+    </p>
     <p>
-     <a href="../reference/preferences/java/buildpath/ref-preferences-classpath-variables.htm">Classpath variables preferences</a><br>
-     <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
     </p>
+    <p>
+      <a href=
+      "../reference/preferences/java/buildpath/ref-preferences-classpath-variables.htm">Classpath
+      variables preferences</a><br />
+      <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br />
 
-    
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-editor-templates.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-editor-templates.htm
index c84990e..dfa6939 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-editor-templates.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-editor-templates.htm
@@ -1,58 +1,71 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Editor Templates</title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Editor Templates
+    </title>
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+</script>
   </head>
 
   <body>
-    <h1>Editor Templates</h1>
-
-    <p>Templates are a structured description of coding patterns that reoccur in
-    source code. The Java editor supports the use of templates to fill in
-    commonly used source patterns. Templates are inserted using content
-    assist (<strong>Ctrl+Space</strong>).</p>
-
-    <p>For example, a common coding pattern is to iterate over the elements of
-    an array using a for loop that indexes into the array. By using a
-    template for this pattern, you can avoid typing in the complete code for the
-    loop. Invoking content assist after typing the word <code>for</code> will present
-    you with a list of possible templates for a for loop.  You can choose the appropriate
-    template by name (<code>iterate over array</code>). Selecting this template will
-    insert the code into the editor and position your cursor so that you can
-    edit the details.</p>
-
-    <p>Templates can contain <a href="../concepts/concept-template-variables.htm">template variables</a>. Variables mark the editable locations. They can be resolves to a concrete value when the template is evaluated in its context. They can also provide
-    a list of alternative proposals valid at the given location.
-    </p> 
-
+    <h1>
+      Editor Templates
+    </h1>
+    <p>
+      Templates are a structured description of coding patterns that reoccur in source code. The
+      Java editor supports the use of templates to fill in commonly used source patterns. Templates
+      are inserted using content assist (<strong>Ctrl+Space</strong>).
+    </p>
+    <p>
+      For example, a common coding pattern is to iterate over the elements of an array using a for
+      loop that indexes into the array. By using a template for this pattern, you can avoid typing
+      in the complete code for the loop. Invoking content assist after typing the word
+      <code>for</code> will present you with a list of possible templates for a for loop. You can
+      choose the appropriate template by name (<code>iterate over array</code>). Selecting this
+      template will insert the code into the editor and position your cursor so that you can edit
+      the details.
+    </p>
 
-    <p>Many common templates are already defined. These can be viewed with the
-    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaTemplatePreferencePage)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the Java editor preferences page">
-    <strong>Java > Editor > Templates</strong></a> preference page.
-    You can also create your own templates or edit the existing ones.</p>
-    
-    
+    <p>
+      Templates can contain <a href="../concepts/concept-template-variables.htm">template
+      variables</a>. Variables mark the editable locations. They can be resolves to a concrete
+      value when the template is evaluated in its context. They can also provide a list of
+      alternative proposals valid at the given location.
+    </p>
+    <p>
+      Many common templates are already defined. These can be viewed with the <a class=
+      "command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaTemplatePreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Goto the Java editor preferences page" /> <strong>Java > Editor >
 
-    <p><img border="0" src="../images/ngrelr.png" alt="Related reference" ></p>
+      Templates</strong></a> preference page. You can also create your own templates or edit the
+      existing ones.
+    </p>
     <p>
-     <a href="../reference/preferences/java/editor/ref-preferences-templates.htm">Templates preferences</a><br>
-     <a href="../concepts/concept-template-variables.htm">Template variables</a><br>
-     <a href="../reference/preferences/java/editor/ref-preferences-edit-template-dialog.htm">Template editing</a><br>
-     <a href="../reference/ref-menu-edit.htm">Edit menu</a><br>
-     <a href="../reference/ref-java-editor-code-assist.htm">Java content assist</a><br>
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
     </p>
+    <p>
+      <a href="../reference/preferences/java/editor/ref-preferences-templates.htm">Templates
+      preferences</a><br />
+      <a href="../concepts/concept-template-variables.htm">Template variables</a><br />
 
-    <p><br>
+      <a href=
+      "../reference/preferences/java/editor/ref-preferences-edit-template-dialog.htm">Template
+      editing</a><br />
+      <a href="../reference/ref-menu-edit.htm">Edit menu</a><br />
+      <a href="../reference/ref-java-editor-code-assist.htm">Java content assist</a><br />
+    </p>
+    <p>
+      <br />
     </p>
 
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-inclusion-exclusion-patterns.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-inclusion-exclusion-patterns.htm
index 2270ffa..37b58d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-inclusion-exclusion-patterns.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-inclusion-exclusion-patterns.htm
@@ -1,49 +1,68 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Inclusion and Exclusion Patterns</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Inclusion and Exclusion Patterns
+    </title>
   </head>
 
   <body>
-    <h1>Inclusion and Exclusion Patterns</h1>
-
-    <p>Inclusion and Exclusion patterns can be configured for source folders. They define 
-    which files are considered by the Java builder and 
-    other Java tooling. This set of files consists of all files and folders where the path
-    relative to the source folder matches an inclusion pattern but not an exclusion pattern.</p>
-    <p>By default, all files and folders contained in a source folder are included. By defining an inclusion pattern,
-    the set of included resources will be limited to the resources matching the inclusion pattern.
-    Using exclusion patterns, some of these resources can be excluded again.</p>
-    <p>Exclusion patterns are required when nesting source folders. The nested folder must be
-    excluded from the outer source folder.</p>
+    <h1>
+      Inclusion and Exclusion Patterns
+    </h1>
+    <p>
+      Inclusion and Exclusion patterns can be configured for source folders. They define which
+      files are considered by the Java builder and other Java tooling. This set of files consists
+      of all files and folders where the path relative to the source folder matches an inclusion
+      pattern but not an exclusion pattern.
+    </p>
+    <p>
+      By default, all files and folders contained in a source folder are included. By defining an
+      inclusion pattern, the set of included resources will be limited to the resources matching
+      the inclusion pattern. Using exclusion patterns, some of these resources can be excluded
+      again.
+    </p>
 
-    <p>The patterns have the same format as <a href="http://ant.apache.org/manual/dirtasks.html#patterns">ANT patterns</a>:</p>
+    <p>
+      Exclusion patterns are required when nesting source folders. The nested folder must be
+      excluded from the outer source folder.
+    </p>
+    <p>
+      The patterns have the same format as <a href=
+      "http://ant.apache.org/manual/dirtasks.html#patterns">ANT patterns</a>:
+    </p>
     <ul>
-    <li>'*' matches zero or more characters, '?' matches one character.</li>
-    <li>'/' is used to separate folders: This means the first segment in the pattern is matched against the most outer folder name in the path to match, the second segment with the second, and so on.</li>
-    <li>'**' matches any number of folders</li>
+      <li>'*' matches zero or more characters, '?' matches one character.
+      </li>
+
+      <li>'/' is used to separate folders: This means the first segment in the pattern is matched
+      against the most outer folder name in the path to match, the second segment with the second,
+      and so on.
+      </li>
+      <li>'**' matches any number of folders
+      </li>
     </ul>
- 
-    <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ></p>
     <p>
-     <a href="concept-java-builder.htm">Java builder</a><br>
-     <a href="concept-classpath-variables.htm">Classpath variables</a><br>
-     <a href="concept-access-rules.htm">Access rules</a>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
+    <p>
+      <a href="concept-java-builder.htm">Java builder</a><br />
 
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <a href="concept-classpath-variables.htm">Classpath variables</a><br />
+      <a href="concept-access-rules.htm">Access rules</a>
     </p>
     <p>
-     <a href="../reference/ref-properties-build-path.htm">Java Build Path properties</a><br>
-     
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
     </p>
+    <p>
+      <a href="../reference/ref-properties-build-path.htm">Java Build Path properties</a><br />
 
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-builder.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-builder.htm
index 92105dc..3f4700c 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-builder.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-builder.htm
@@ -1,45 +1,73 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Java Builder
+    </title>
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
 
-    <title>Java Builder</title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+</script>
   </head>
-
   <body>
-    <h1>Java Builder</h1>
-
-    <p>The Java builder builds Java programs using its own compiler (the Eclipse Compiler for Java) that implements the Java Language Specification. 
-    The Java builder can build programs incrementally as individual Java files are saved. Note that the Eclipse Compiler for Java can also be invoked
-    using Ant as described in the <b>Using the ant javac adapter</b> section of  <a href="../../org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm">Compiling Java code</a><br></p>
-
-    <p>Problems detected by the compiler are classified as either warnings or errors. The existence of a warning does not affect the execution of the program; the code executes as
-    if it were written correctly. Compile-time errors (as specified by the Java Language Specification) are always reported as errors by the Java compiler. For some other types of
-    problems you can, however, specify if you want the Java compiler to report them as warnings, errors or to ignore them. To change the default settings, use the
-    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the Java compiler preference page">
-    <span class="control">Java > Compiler > Errors/Warnings</span></a>
-    preference page.</p>
-
-    <p>The Java compiler can create CLASS files even in presence of compilation errors. However, in the case of serious errors (for example, references to inconsistent binaries,
-    most likely related to an invalid build path), the Java builder does not produce any CLASS
-    files.</p>
-
-    <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ></p>
+    <h1>
+      Java Builder
+    </h1>
     <p>
-     <a href="concept-build-classpath.htm">Build classpath</a><br></p>
+      The Java builder builds Java programs using its own compiler (the Eclipse Compiler for Java)
+      that implements the Java Language Specification.  The Java builder can build programs
+      incrementally as individual Java files are saved. Note that the Eclipse Compiler for Java can
+      also be invoked using Ant as described in the <a href="../tasks/task-ant_javac_adapter.htm#"><b>Using the ant javac adapter</b></a> section.<br />
 
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ></p>
+    </p>
     <p>
-     <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br>
-     <a href="../reference/preferences/java/ref-preferences-compiler.htm">Java compiler preferences</a></p>
+      Problems detected by the compiler are classified as either warnings or errors. The existence
+      of a warning does not affect the execution of the program; the code executes as if it were
+      written correctly. Compile-time errors (as specified by the Java Language Specification) are
+      always reported as errors by the Java compiler. For some other types of problems you can,
+      however, specify if you want the Java compiler to report them as warnings, errors or to
+      ignore them. To change the default settings, use the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Goto the Java compiler preference page" /> <span class="control">Java > Compiler >
+      Errors/Warnings</span></a> preference page.
+    </p>
 
+    <p>
+      The Java compiler can create CLASS files even in presence of compilation errors. However, in
+      the case of serious errors (for example, references to inconsistent binaries, most likely
+      related to an invalid build path), the Java builder does not produce any CLASS files.
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+    </p>
+    <p>
+      <a href="concept-build-classpath.htm">Build classpath</a><br />
+    </p>
     
+    <p>
+      <img src="../images/ngrelt.png" alt="Related tasks" />
+    </p>
+    <p>
+      <a href="../tasks/task-using_batch_compiler.htm">Using the batch compiler</a><br />
+      <a href="../tasks/task-ant_javac_adapter.htm">Using the ant javac adapter</a><br />
+      <a href="../tasks/task-suppress_warnings.htm">Excluding warnings using SuppressWarnings</a><br />
+    </p>
+
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href="../reference/ref-properties-build-path.htm">Java build path properties</a><br />
+      <a href="../reference/preferences/java/ref-preferences-compiler.htm">Java compiler
+      preferences</a>
+    </p>
   </body>
-</html>
 
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-editor.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-editor.htm
index 0096ef5..7bb8ba6 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-editor.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-editor.htm
@@ -1,82 +1,98 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Java Editor</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Java Editor
+    </title>
   </head>
-
   <body>
-    <h1>Java Editor</h1>
-
-    <p>The Java editor provides specialized features for editing Java code.</p>
-
-    <p>Associated with the editor is a Java-specific Outline view, which shows the structure of the active Java compilation unit.
-    It is updated as the user edits the compilation unit.</p>
-    
-    
-    <p>The editor can also show a breadcrumb navigation bar. The breadcrumb shows the parent chain of the element at the current
-    cursor position. It is also updated when the user edits the compilation unit or changes the selection.</p>
-    
 
-    <p>The Java editor can be opened on binary CLASS files.
-    If a JAR file containing the CLASS files has a source attachment,
-    then the editor shows the corresponding source.</p>
-
-    <p>The editor includes the following features:</p>
+    <h1>
+      Java Editor
+    </h1>
+    <p>
+      The Java editor provides specialized features for editing Java code.
+    </p>
+    <p>
+      Associated with the editor is a Java-specific Outline view, which shows the structure of the
+      active Java compilation unit. It is updated as the user edits the compilation unit.
+    </p>
+    <p>
 
+      The editor can also show a breadcrumb navigation bar. The breadcrumb shows the parent chain
+      of the element at the current cursor position. It is also updated when the user edits the
+      compilation unit or changes the selection.
+    </p>
+    <p>
+      The Java editor can be opened on binary CLASS files. If a JAR file containing the CLASS files
+      has a source attachment, then the editor shows the corresponding source.
+    </p>
+    <p>
+      The editor includes the following features:
+    </p>
     <ul>
-      <li>Syntax highlighting</li>
-
-      <li>Content/code assist</li>
-
-      <li>Code formatting</li>
-
-      <li>Import assistance</li>
-      
-      <li>Quick fix</li>
-
-      <li>Integrated debugging features</li>
+      <li>Syntax highlighting
+      </li>
+
+      <li>Content/code assist
+      </li>
+      <li>Code formatting
+      </li>
+      <li>Import assistance
+      </li>
+      <li>Quick fix
+      </li>
+      <li>Integrated debugging features
+      </li>
     </ul>
 
-    <p>The Java editor can be configured to either show an entire compilation unit or a single Java element only.
-    To change the setting, use the toolbar button <span class="control">Show Source of Selected Element Only</span>.
+    <p>
+      The Java editor can be configured to either show an entire compilation unit or a single Java
+      element only. To change the setting, use the toolbar button <span class="control">Show Source
+      of Selected Element Only</span>.
+    </p>
+    <p>
+      The most common way to invoke the Java editor is to open a Java file from the Package
+      Explorer using pop-up menus or by clicking the file (single or double-click depending on the
+      user preferences). You can also open the editor by opening Java elements, such as types,
+      methods, or fields, from other views.
     </p>
-
-    <p>The most common way to invoke the Java editor is to open a Java file from the
-    Package Explorer using pop-up menus or by clicking the file
-    (single or double-click depending on the user preferences). You can
-    also open the editor by opening Java elements, such as types, methods, or
-    fields, from other views.</p>
-
-    <p><img  src="../images/ngrelc.png" alt="Related concepts" border="0"></p>
     <p>
-     <a href="concept-quickfix-assist.htm">Quick fix and assist</a><br>
-     <a href="concept-editor-templates.htm">Templates</a><br>
-     </p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+    </p>
 
-    <p><img border="0"  src="../images/ngrelt.png" alt="Related tasks"></p>
     <p>
-     <a href="../tasks/tasks-73.htm">Opening an editor for a selected element</a><br>
-     <a href="../tasks/task-view_runtime_exceptions.htm">Viewing runtime exceptions</a><br>
-     <a href="../tasks/task-evaluating_expressions.htm">Evaluating expressions</a><br>
+      <a href="concept-quickfix-assist.htm">Quick fix and assist</a><br />
+      <a href="concept-editor-templates.htm">Templates</a><br />
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
     </p>
+    <p>
 
-    <p><img border="0"  src="../images/ngrelr.png" alt="Related reference"></p>
+      <a href="../tasks/tasks-73.htm">Opening an editor for a selected element</a><br />
+      <a href="../tasks/task-view_runtime_exceptions.htm">Viewing runtime exceptions</a><br />
+      <a href="../tasks/task-evaluating_expressions.htm">Evaluating expressions</a><br />
+    </p>
     <p>
-     <a href="../reference/ref-java-editor-quickassist.htm">Quick assists</a><br>   
-     <a href="../reference/ref-java-editor-quickfix.htm">Quick fixes</a><br> 
-     <a href="../reference/views/ref-java-editor.htm">Java editor actions</a><br>
-     <a href="../reference/preferences/java/ref-preferences-editor.htm">Java editor preferences</a><br>
-     <a href="../reference/views/ref-view-outline.htm">Java outline</a><br>
-     <a href="../reference/ref-java-editor-breadcrumb.htm">Java Editor Breadcrumb</a><br>
-     <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a>
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
     </p>
 
-    
+    <p>
+      <a href="../reference/ref-java-editor-quickassist.htm">Quick assists</a><br />
+      <a href="../reference/ref-java-editor-quickfix.htm">Quick fixes</a><br />
+      <a href="../reference/views/ref-java-editor.htm">Java editor actions</a><br />
+      <a href="../reference/preferences/java/ref-preferences-editor.htm">Java editor
+      preferences</a><br />
+      <a href="../reference/views/ref-view-outline.htm">Java outline</a><br />
+
+      <a href="../reference/ref-java-editor-breadcrumb.htm">Java Editor Breadcrumb</a><br />
+      <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-perspective.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-perspective.htm
index b658174..bf175c6 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-perspective.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-perspective.htm
@@ -1,94 +1,134 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Java Perspectives</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Java Perspectives
+    </title>
   </head>
-
   <body>
-    <h1>Java Perspectives</h1>
-
-    The Java development tools contribute the following perspectives to the workbench:
-
-    <h2>Java</h2>
-
-    <p>A perspective designed for working with Java projects. It consists of an editor area and the following views:</p>
 
+    <h1>
+      Java Perspectives
+    </h1>The Java development tools contribute the following perspectives to the workbench:
+    <h2>
+      Java
+    </h2>
+    <p>
+      A perspective designed for working with Java projects. It consists of an editor area and the
+      following views:
+    </p>
     <ul>
-      <li><span>Package Explorer</span></li>
-
-      <li><span>Type Hierarchy</span></li>
-
-      <li><span>Outline</span></li>
-
-      <li><span>Problems</span></li>
-
-      <li><span>Javadoc</span></li>
-
-      <li><span>Declaration</span></li>
+      <li>
+
+        <span>Package Explorer</span>
+      </li>
+      <li>
+        <span>Outline</span>
+      </li>
+      <li>
+        <span>Problems</span>
+
+      </li>
+      <li>
+        <span>Javadoc</span>
+      </li>
+      <li>
+        <span>Declaration</span>
+      </li>
     </ul>
 
-    <h2>Java Browsing</h2>
-
-    <p>A perspective designed for browsing the structure of Java projects. It consists of an editor area and the following views:</p>
-
+    <h2>
+      Java Browsing
+    </h2>
+    <p>
+      A perspective designed for browsing the structure of Java projects. It consists of an editor
+      area and the following views:
+    </p>
     <ul>
-      <li><span>Projects</span></li>
-
-      <li><span>Packages</span></li>
-
-      <li><span>Types</span></li>
-
-      <li><span>Members</span></li>
+      <li>
+        <span>Projects</span>
+
+      </li>
+      <li>
+        <span>Packages</span>
+      </li>
+      <li>
+        <span>Types</span>
+      </li>
+      <li>
+
+        <span>Members</span>
+      </li>
     </ul>
-
-    <h2>Java Type Hierarchy</h2>
-
-    <p>A perspective designed for exploring a type hierarchy. It can be opened on types, compilation units, packages, projects or source folders and consists of the Hierarchy
-    view and an editor.</p>
-
-    <h2>Debug</h2>
-
-    <p>A perspective designed for debugging your Java program. It includes an editor area and the following views.</p>
-
+    <h2>
+      Java Type Hierarchy
+    </h2>
+    <p>
+      A perspective designed for exploring a type hierarchy. It can be opened on types, compilation
+      units, packages, projects or source folders and consists of the Type Hierarchy view and an
+      editor.
+    </p>
+
+    <h2>
+      Debug
+    </h2>
+    <p>
+      A perspective designed for debugging your Java program. It includes an editor area and the
+      following views.
+    </p>
     <ul>
-      <li><span>Debug</span></li>
-
-      <li><span>Breakpoints</span></li>
-      
-      <li><span>Variables</span></li>
-
-      <li><span>Expressions</span></li>
-
-      <li><span>Outline</span></li>
-
-      <li><span>Console</span></li>
-      
-      <li><span>Tasks</span></li>
-      
+      <li>
+        <span>Debug</span>
+
+      </li>
+      <li>
+        <span>Breakpoints</span>
+      </li>
+      <li>
+        <span>Variables</span>
+      </li>
+      <li>
+
+        <span>Expressions</span>
+      </li>
+      <li>
+        <span>Outline</span>
+      </li>
+      <li>
+        <span>Console</span>
+
+      </li>
+      <li>
+        <span>Tasks</span>
+      </li>
     </ul>
-
-    <p><img  src="../images/ngrelc.png" alt="Related concepts" border="0"></p>
     <p>
-     <a href="../concepts/concept-java-views.htm">Java views</a></p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+    </p>
 
-    <p><img border="0"  src="../images/ngrelr.png" alt="Related reference"></p>
     <p>
-     <a href="../reference/views/breakpoints/ref-breakpoints_view.htm">Breakpoints view</a><br>
-     <a href="../reference/views/console/ref-console_view.htm">Console view</a><br>
-     <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br>
-     <a href="../reference/views/display/ref-display_view.htm">Display view</a><br>
-     <a href="../reference/views/expressions/ref-expressions_view.htm">Expressions view</a><br>
-     <a href="../reference/views/ref-view-outline.htm">Java outline</a><br>
-     <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer view</a><br>
-     <a href="../reference/views/ref-type-hierarchy.htm">Type Hierarchy view</a><br>
-     <a href="../reference/views/variables/ref-variables_view.htm">Variables view</a></p>
-
-    
+      <a href="../concepts/concept-java-views.htm">Java views</a>
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
+    </p>
+    <p>
+      <a href="../reference/views/breakpoints/ref-breakpoints_view.htm">Breakpoints view</a><br />
+
+      <a href="../reference/views/console/ref-console_view.htm">Console view</a><br />
+      <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br />
+      <a href="../reference/views/display/ref-display_view.htm">Display view</a><br />
+      <a href="../reference/views/expressions/ref-expressions_view.htm">Expressions view</a><br />
+      <a href="../reference/views/ref-view-outline.htm">Java outline</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer view</a><br />
+
+      <a href="../reference/views/ref-type-hierarchy.htm">Type Hierarchy view</a><br />
+      <a href="../reference/views/variables/ref-variables_view.htm">Variables view</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-project.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-project.htm
index 6565981..f357ab1 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-project.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-project.htm
@@ -1,45 +1,60 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Java Projects</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Java Projects
+    </title>
   </head>
-
   <body>
-    <h1>Java Projects</h1>
-
-    <p>A Java project contains source code and related files for building a Java
-    program. It has an associated Java builder that can incrementally compile Java source files as they are changed.</p>
 
-    <p>A Java project also maintains a model of its contents. This model
-    includes information about the type hierarchy, references and declarations of Java elements.
-    This information is constantly updated as the user changes
-    the Java source code. The updating of the internal Java project model is independent of the
-    Java builder; in particular, when performing code modifications, if auto-build is turned
-    off, the model will still reflect the present project contents.</p>
-
-    <p>You can organize Java projects in two different ways:</p>
+    <h1>
+      Java Projects
+    </h1>
+    <p>
+      A Java project contains source code and related files for building a Java program. It has an
+      associated Java builder that can incrementally compile Java source files as they are changed.
+    </p>
+    <p>
+      A Java project also maintains a model of its contents. This model includes information about
+      the type hierarchy, references and declarations of Java elements. This information is
+      constantly updated as the user changes the Java source code. The updating of the internal
+      Java project model is independent of the Java builder; in particular, when performing code
+      modifications, if auto-build is turned off, the model will still reflect the present project
+      contents.
+    </p>
+    <p>
 
+      You can organize Java projects in two different ways:
+    </p>
     <ul>
-      <li><span>Using the project as the source container. This is the recommended organization for simple projects.</span></li>
-
-      <li><span>Using source folders inside the project as the source container. This is the recommended organization for more complex projects. It allows you to subdivide packages into
-      groups.</span></li>
+      <li>
+        <span>Using the project as the source container. This is the recommended organization for
+        simple projects.</span>
+      </li>
+      <li>
+        <span>Using source folders inside the project as the source container. This is the
+        recommended organization for more complex projects. It allows you to subdivide packages
+        into groups.</span>
+
+      </li>
     </ul>
-
-    <p><img  src="../images/ngrelc.png" alt="Related concepts" border="0"></p>
     <p>
-     <a href="../concepts/concept-java-builder.htm">Java builder</a><br></p>
-
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ></p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+    </p>
     <p>
-     <a href="../reference/ref-wizard-java-project.htm">New Java project wizard</a></p>
+      <a href="../concepts/concept-java-builder.htm">Java builder</a><br />
+    </p>
 
-    
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href="../reference/ref-wizard-java-project.htm">New Java project wizard</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-search.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-search.htm
index 6b6ec23..eeb9ec1 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-search.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-search.htm
@@ -1,130 +1,172 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Java Search</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Java Search
+    </title>
   </head>
-
   <body>
-    <h1>Java Search</h1>
 
-    <p><span>The Java searching support allows you to find declarations, references and occurrences of Java elements
-    (packages, types, methods, fields). Searching is supported by an index that
-    is kept up to date in the background as the resources corresponding to Java elements are changed.
-    The Java search operates on workspaces independent of their build state. For
-    example, searches can be conducted when auto-build is turned off.</span></p>
-
-    <p>The following searches can be initiated from the pop-up menus of Java elements or from the Java search dialog:</p>
+    <h1>
+      Java Search
+    </h1>
+    <p>
+      <span>The Java searching support allows you to find declarations, references and occurrences
+      of Java elements (packages, types, methods, fields). Searching is supported by an index that
+      is kept up to date in the background as the resources corresponding to Java elements are
+      changed. The Java search operates on workspaces independent of their build state. For
+      example, searches can be conducted when auto-build is turned off.</span>
+    </p>
+    <p>
+      The following searches can be initiated from the pop-up menus of Java elements or from the
+      Java search dialog:
+    </p>
 
     <table border="1" cellspacing="0" cellpadding="5" summary="Java search actions">
       <thead>
         <tr>
           <td>
-            <p><span class="control">Command</span></p>
+            <p>
+              <span class="control">Command</span>
+            </p>
           </td>
 
           <td>
-            <p><span class="control">Description</span></p>
+            <p>
+              <span class="control">Description</span>
+            </p>
           </td>
         </tr>
       </thead>
-
       <tbody>
+
         <tr>
           <td valign="top">
-            <p>References</p>
+            <p>
+              References
+            </p>
           </td>
-
           <td valign="top">
-            <p>Finds all references to the selected Java element</p>
+            <p>
+              Finds all references to the selected Java element
+            </p>
+
           </td>
         </tr>
-
         <tr>
           <td valign="top">
-            <p>Declarations</p>
+            <p>
+              Declarations
+            </p>
           </td>
-
           <td valign="top">
-            <p>Finds all declarations of the selected Java element</p>
+
+            <p>
+              Finds all declarations of the selected Java element
+            </p>
           </td>
         </tr>
-
         <tr>
           <td valign="top">
-            <p>Implementors</p>
-          </td>
+            <p>
+              Implementors
+            </p>
 
+          </td>
           <td valign="top">
-            <p>Finds all implementors of the selected Java interface</p>
+            <p>
+              Finds all implementors of the selected Java interface
+            </p>
           </td>
         </tr>
-
         <tr>
           <td valign="top">
-            <p>Read access</p>
-          </td>
 
+            <p>
+              Read access
+            </p>
+          </td>
           <td valign="top">
-            <p>Finds all read accesses to the selected Java field</p>
+            <p>
+              Finds all read accesses to the selected Java field
+            </p>
           </td>
         </tr>
 
         <tr>
           <td valign="top">
-            <p>Write access</p>
+            <p>
+              Write access
+            </p>
           </td>
-
           <td valign="top">
-            <p>Finds all write accesses to the selected Java field</p>
+            <p>
+              Finds all write accesses to the selected Java field
+            </p>
+
           </td>
         </tr>
-        
         <tr>
           <td valign="top">
-            <p>Match locations for type references</p>
+            <p>
+              Match locations for type references
+            </p>
           </td>
-
           <td valign="top">
-            <p>Finds all type references at specified locations (in casts, as field type, ...)</p>
-          </td>
-        </tr>        
 
+            <p>
+              Finds all type references at specified locations (in casts, as field type, ...)
+            </p>
+          </td>
+        </tr>
         <tr>
           <td valign="top">
-            <p>Occurrences in File</p>
-          </td>
+            <p>
+              Occurrences in File
+            </p>
 
+          </td>
           <td valign="top">
-            <p>Finds all occurrences of the selected Java element in its file</p>
+            <p>
+              Finds all occurrences of the selected Java element in its file
+            </p>
           </td>
         </tr>
-
       </tbody>
     </table>
-        
-
-    <p>The scope of the search is defined as:</p>
-
-    <p><span class="control">Workspace</span> - all projects and files in the workspace are included in this search</p>
-
-    <p><span class="control">Enclosing Projects</span> - the projects enclosing the currently selected elements</p>
-
-    <p><span class="control">Hierarchy</span> - only the type hierarchy of the selected element is included in this search</p>
-
-    <p><span class="control">Working Set</span> - only resources that belong to the chosen working set are included in this search</p>
 
+    <p>
+      The scope of the search is defined as:
+    </p>
+    <p>
+      <span class="control">Workspace</span> - all projects and files in the workspace are included
+      in this search
+    </p>
+    <p>
+      <span class="control">Enclosing Projects</span> - the projects enclosing the currently
+      selected elements
+    </p>
 
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ></p>
     <p>
-     <a href="../reference/ref-menu-search.htm">Search actions</a><br>
-     <a href="../reference/ref-dialog-java-search.htm">Java search tab</a></p>
+      <span class="control">Hierarchy</span> - only the type hierarchy of the selected element is
+      included in this search
+    </p>
+    <p>
+      <span class="control">Working Set</span> - only resources that belong to the chosen working
+      set are included in this search
+    </p>
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
 
-    
+    </p>
+    <p>
+      <a href="../reference/ref-menu-search.htm">Search actions</a><br />
+      <a href="../reference/ref-dialog-java-search.htm">Java search tab</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-decorators.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-decorators.htm
index 7c61c01..200a2a3 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-decorators.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-decorators.htm
@@ -1,47 +1,74 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-    <title>Java Element Decorations</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+</script>
+    <title>
+      Java Element Decorations
+    </title>
+
   </head>
+  <body>
+    <h1>
+      Java Element Decorations
+    </h1>
+    <h2>
+      Override Indicators
+    </h2>
+    <p>
+      Java views can show special decoration icons to indicate methods that override or implement
+      methods from supertypes.
+    </p>
 
-   <body>
-    <h1>Java Element Decorations</h1>
+    <p>
+      To show or hide the override indicators, select or clear the <span class="control">Java
+      Method Override Indicator</span> checkbox in the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Appearance preference page" /> <span class="control">General > Appearance >
+      Label Decorations</span></a> preference page.
+    </p>
 
-    <h2>Override Indicators</h2>
-    <p>Java views can show special decoration icons to indicate methods that override or implement methods from supertypes.</p>
+    <h2>
+      Java Type Indicator
+    </h2>
+    <p>
+      The package explorer can indicate the kind of Java type (Enum, Interface, Annotation)
+      contained in a Java file.
+    </p>
+    <p>
+      <em>Note:</em>
+    </p>
 
-    <p>To show or hide the override indicators, select or clear the <span class="control">Java Method Override Indicator</span> checkbox in the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-        <span class="control">General > Appearance > Label Decorations</span></a> preference page.
-	</p>
-	
-    <h2>Java Type Indicator</h2>
-    <p>The package explorer can indicate the kind of Java type (Enum, Interface, Annotation) contained in a Java file.</p>
-    
-    <p><em>Note:</em></p>
     <ul>
-     <li>If a Java file contains more than one top-level type, it is decorated according to its primary type.</li>
-     <li>No decoration is shown for classes, except for abstract classes.</li>
+      <li>If a Java file contains more than one top-level type, it is decorated according to its
+      primary type.
+      </li>
+      <li>No decoration is shown for classes, except for abstract classes.
+      </li>
     </ul>
+    <p>
+      To show or hide the Java type indicators, select or clear the <span class="control">Java Type
+      Indicator</span> checkbox in the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
 
-    <p>To show or hide the Java type indicators, select or clear the <span class="control">Java Type Indicator</span> checkbox in the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Label Decoarations preference page">
-        <span class="control">General > Appearance > Label Decorations</span></a> preference page.
-	</p>
-	
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ><br>
-     <a href="../reference/preferences/java/ref-preferences-appearance.htm">Appearance preference page</a><br>
-     <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a></p>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Label Decoarations preference page" /> <span class="control">General >
+      Appearance > Label Decorations</span></a> preference page.
+    </p>
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" /><br />
+      <a href="../reference/preferences/java/ref-preferences-appearance.htm">Appearance preference
+      page</a><br />
 
-    
+      <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-filtering.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-filtering.htm
index 7a6bd44..fd8f8b4 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-filtering.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-filtering.htm
@@ -1,71 +1,112 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-    <title>Filtering in Java Views</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+</script>
+    <title>
+      Filtering in Java Views
+    </title>
+
   </head>
-  
   <body>
-    <h1>Filtering in Java Views</h1>
-    
-    <h2>Applying View Filters</h2>
-    
-    <p>All Java views allow to filter the displayed Java elements. The set of available filters depends on the view.</p>
-    
-    <p>To filter elements:</p>
+    <h1>
+      Filtering in Java Views
+    </h1>
+    <h2>
+      Applying View Filters
+    </h2>
+    <p>
+      All Java views allow to filter the displayed Java elements. The set of available filters
+      depends on the view.
+    </p>
+
+    <p>
+      To filter elements:
+    </p>
     <ol>
-      <li>On the view toolbar, click the <strong>Menu</strong> button and choose <strong>Filters...</strong>.</li>
-      <li>Select or clear the filters that you want to apply to the view (read <strong>Filter description</strong> to learn about the selected filter's functionality).</li>
+      <li>On the view toolbar, click the <strong>Menu</strong> button and choose
+      <strong>Filters...</strong>.
+      </li>
+      <li>Select or clear the filters that you want to apply to the view (read <strong>Filter
+      description</strong> to learn about the selected filter's functionality).
+      </li>
+
       <li>Optionally, you can select patterns for filtering the view:
         <ul>
-          <li>Select the <strong>Name filter patterns</strong> checkbox at the top of the dialog.</li>
-          <li>In the text field below, specify the desired patterns (names matching one of the patterns will be hidden).</li>
+          <li>Select the <strong>Name filter patterns</strong> checkbox at the top of the dialog.
+          </li>
+          <li>In the text field below, specify the desired patterns (names matching one of the
+          patterns will be hidden).
+          </li>
         </ul>
       </li>
     </ol>
-    
-    <h2>Filtering Members</h2>
-
-    <p>Several Java views (e.g. <strong>Outline</strong>, <strong>Type Hierarchy</strong>, <strong>Members</strong>) offer filtering of members (fields, types and methods).
-    The filters are available as toolbar buttons or as view menu items, depending on the view. There are
-    3 member filters:</p>
 
+    <h2>
+      Filtering Members
+    </h2>
+    <p>
+      Several Java views (e.g. <strong>Outline</strong>, <strong>Type Hierarchy</strong>,
+      <strong>Members</strong>) offer filtering of members (fields, types and methods). The filters
+      are available as toolbar buttons or as view menu items, depending on the view. There are 3
+      member filters:
+    </p>
     <ul>
-      <li><span class="control">Hide Fields</span>: when activated, this filter causes all fields to be removed from the view.</li>
-      <li><span class="control">Hide Static Fields and Methods</span>: when activated, this filter causes all static members to be removed from the view.</li>
-      <li><span class="control">Hide Non-Public Members</span>: when activated, this filter causes all non-public members to be removed from the view.</li>
-    </ul>
-    
-    Additionally, the <strong>Package Explorer</strong> view can display or hide all elements inside compilation units. 
 
-    <p>To show or hide members in the <strong>Package Explorer</strong> view, select or clear the <span class="control">Show members in Package Explorer</span> checkbox in the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-        <span class="control">Java > Appearance</span></a> preference page.
+      <li>
+        <span class="control">Hide Fields</span>: when activated, this filter causes all fields to
+        be removed from the view.
+      </li>
+      <li>
+        <span class="control">Hide Static Fields and Methods</span>: when activated, this filter
+        causes all static members to be removed from the view.
+      </li>
+      <li>
+        <span class="control">Hide Non-Public Members</span>: when activated, this filter causes
+        all non-public members to be removed from the view.
+      </li>
+
+    </ul>Additionally, the <strong>Package Explorer</strong> view can display or hide all elements
+    inside compilation units.
+    <p>
+      To show or hide members in the <strong>Package Explorer</strong> view, select or clear the
+      <span class="control">Show members in Package Explorer</span> checkbox in the <a class=
+      "command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Appearance preference page" /> <span class="control">Java >
+
+      Appearance</span></a> preference page.
+    </p>
+    <h2>
+      Filtering Working Sets
+    </h2>
+    <p>
+      Several Java views (e.g. <strong>Package Explorer</strong>, <strong>Type Hierarchy</strong>)
+      offer to filter by one or more working sets. The filters are available in the view menu. Only
+      the elements that are contained in the selected working sets are shown in the view.
+    </p>
+
+    <p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
-    
-    <h2>Filtering Working Sets</h2>
-    <p>Several Java views (e.g. <strong>Package Explorer</strong>, <strong>Type Hierarchy</strong>) offer to filter by one or more working sets.
-    The filters are available in the view menu. Only the elements that are contained in the selected working sets are shown in the view.</p>
-    
-        
-    <p><img src="../images/ngrelc.png" alt="Related concepts" border="0" ></p>
-	<p>
-	<a href="../concepts/concept-java-project.htm">Java projects</a><br>
-    <a href="../../org.eclipse.platform.doc.user/concepts/cworkset.htm">Working sets</a>
+    <p>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+      <a href="../../org.eclipse.platform.doc.user/concepts/cworkset.htm">Working sets</a>
     </p>
-	
-	
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ></p>
     <p>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a>
+
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-presentation.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-presentation.htm
index 10a1203..4976bdf 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-presentation.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-presentation.htm
@@ -1,72 +1,107 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-    <title>Presentation options for Java views</title>
-  </head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+</script>
+    <title>
+      Presentation options for Java views
+    </title>
 
+  </head>
   <body>
-    <h1>Presentation Options for Java Views</h1>
-
-    <h2>Showing and Hiding Method Return Types</h2>
-
-    <p>Several Java views (e.g. <strong>Outline</strong>, <strong>Members</strong>) present methods and can also show their return types and type parameters.</p>
-
-    <p>To show method return types in Java views select or clear the <span class="control">Show method return types</span> or <span class="control">Show method type parameters</span> checkbox in the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-        <span class="control">Java > Appearance</span></a> preference page.
-	</p>
-    
-    <h2>Showing Full or Compressed Package Names</h2>
+    <h1>
+      Presentation Options for Java Views
+    </h1>
+    <h2>
+      Showing and Hiding Method Return Types
+    </h2>
+    <p>
+      Several Java views (e.g. <strong>Outline</strong>, <strong>Members</strong>) present methods
+      and can also show their return types and type parameters.
+    </p>
 
-    <p>The <strong>Package Explorer</strong> and <strong>Packages</strong> views can show full or compressed package names.</p>
+    <p>
+      To show method return types in Java views select or clear the <span class="control">Show
+      method return types</span> or <span class="control">Show method type parameters</span>
+      checkbox in the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Appearance preference page" /> <span class="control">Java >
+      Appearance</span></a> preference page.
+    </p>
 
-    <p>To show full package names:</p>
+    <h2>
+      Showing Full or Compressed Package Names
+    </h2>
+    <p>
+      The <strong>Package Explorer</strong> and <strong>Packages</strong> views can show full or
+      compressed package names.
+    </p>
+    <p>
 
+      To show full package names:
+    </p>
     <ul>
-      <li>Clear the <span class="control"> Compress all package name segments, except the final segment</span> checkbox
-        on the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-        <span class="control">Java > Appearance</span></a> preference page.</li>
-    </ul>
-    To show compressed package names: 
+      <li>Clear the <span class="control">Compress all package name segments, except the final
+      segment</span> checkbox on the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Appearance preference page" /> <span class="control">Java >
+        Appearance</span></a> preference page.
+      </li>
 
+    </ul>To show compressed package names:
     <ul>
       <li>
-        <p>Select the <span class="control">Compress all package name segments, except the final segment</span> 
-        checkbox on the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-        <span class="control">Java > Appearance</span></a> preference page.</p>
+        <p>
+          Select the <span class="control">Compress all package name segments, except the final
+          segment</span> checkbox on the <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the Appearance preference page" /> <span class="control">Java >
+
+          Appearance</span></a> preference page.
+        </p>
+        <p>
+          Compression patterns control how many characters of each package name segment are
+          displayed. The last segment of a package name is always displayed.
+        </p>
+        <p>
+          A compression pattern of "." indicates that only the separating periods are shown to
+          represent a segment. A digit (n) in a compression pattern represents the first n
+          characters of a package name segment. Examples are the best way to understand compression
+          patterns. The package <span class="control">org.eclipse.jdt</span> would be displayed as
+          follows using the example compression patterns:
+        </p>
 
-        <p>Compression patterns control how many characters of each package name
-        segment are displayed. The last segment of a package name is
-        always displayed.</p>
-        <p>A compression pattern of "." indicates that only the
-        separating periods are shown to represent a segment. A digit (n)
-        in a compression pattern represents the first n characters of a package name segment.
-        Examples are the best way to understand compression patterns. The
-        package <span class="control">org.eclipse.jdt </span>would be displayed
-        as follows using the example compression patterns:</p>
-        <p> <span class="control">.        </span>..jdt</p>
-        <p><span class="control">0       </span>jdt</p>
-        <p><span class="control">2~     </span>or~.ec~.jdt</p>
-        <p> <span class="control">3~     </span>org.ecl~.jdt</p>
+        <p>
+          <span class="control">.       </span> ..jdt
+        </p>
+        <p>
+          <span class="control">0      </span> jdt
+        </p>
+        <p>
+          <span class="control">2~    </span> or~.ec~.jdt
+        </p>
+
+        <p>
+          <span class="control">3~    </span> org.ecl~.jdt
+        </p>
       </li>
-    </ul>
-	<br>
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ><br>
-     <a href="../reference/preferences/java/ref-preferences-appearance.htm">Java appearance preference page</a><br>
-     <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a><br>
-    </p>
+    </ul><br />
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" /><br />
+      <a href="../reference/preferences/java/ref-preferences-appearance.htm">Java appearance
+      preference page</a><br />
 
+      <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a><br />
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-sorting.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-sorting.htm
index de7bb2a..e117c87 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-sorting.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views-sorting.htm
@@ -1,42 +1,50 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-    <title>Sorting in Java Views</title>
-  </head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+</script>
+    <title>
+      Sorting in Java Views
+    </title>
 
+  </head>
   <body>
-    <h1>Sorting in Java Views</h1>
-
-    <p>The <strong>Members</strong> and <strong>Outline</strong> views can present members sorted
-    or in the order of declaration in the compilation unit.</p>
-
-    <p>To sort members:</p>
-
+    <h1>
+      Sorting in Java Views
+    </h1>
+    <p>
+      The <strong>Members</strong> and <strong>Outline</strong> views can present members sorted or
+      in the order of declaration in the compilation unit.
+    </p>
+
+    <p>
+      To sort members:
+    </p>
     <ul>
-      <li>Toggle on the <span class="control">Sort</span> toolbar button in the view toolbar.</li>
-      <li>The sorting order can be configured on the on the
-      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.MembersOrderPreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Members Sort Order preference page">
-      <span class="control">Java > Appearance > Members Sort Order</span></a>
-      preference page.</li>
-      <li>After the above sorting is performed, members in each group are sorted alphabetically.</li>
-    </ul>
-    
-    To present members in the order of declaration in the compilation unit. 
-
+      <li>Toggle on the <span class="control">Sort</span> toolbar button in the view toolbar.
+      </li>
+      <li>The sorting order can be configured on the on the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.MembersOrderPreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Members Sort Order preference page" /> <span class="control">Java >
+
+        Appearance > Members Sort Order</span></a> preference page.
+      </li>
+      <li>After the above sorting is performed, members in each group are sorted alphabetically.
+      </li>
+    </ul>To present members in the order of declaration in the compilation unit.
     <ul>
-      <li>Toggle off the <span class="control">Sort</span> toolbar button in the view toolbar.</li>
-    </ul>
-    <img src="../images/ngrelr.png" alt="Related reference" border="0" > <br>
-     <a href="../reference/ref-actions-toolbar.htm">Java toolbar actions</a><a href="../reference/ref-actions-toolbar.htm"></a> 
+      <li>Toggle off the <span class="control">Sort</span> toolbar button in the view toolbar.
+      </li>
 
-    
+    </ul><img src="../images/ngrelr.png" alt="Related reference" border="0" /><br />
+    <a href="../reference/ref-actions-toolbar.htm">Java toolbar actions</a>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views.htm
index 893e71c..d8967b0 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-java-views.htm
@@ -1,94 +1,292 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-    <title>Java Views</title>
-  </head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+</script>
+    <title>
+      Java Views
+    </title>
 
+  </head>
   <body>
-    <h1>Java Views</h1>
+    <h1>
+      Java Views
+    </h1>
+    <p>
+      The Java development tools contribute the following views to the workbench:
+    </p>
+    <h2>
+      Java
+    </h2>
 
-    <p>The Java development tools contribute the following views to the workbench:</p>
+    <ul>
+      <li>
+        <h3>
+          Package Explorer View
+        </h3>
+        <p>
+          The <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer view</a> shows a Java-specific
+          view of resources inside Java projects in your workbench. The Java element hierarchy is defined by the project's
+          build class paths and consists of elements like
+        </p>
+        <ul>
+          <li>source folders and libraries
+          </li>
 
-    <h2>Package Explorer View</h2>
+          <li>packages
+          </li>
+          <li>source and class files
+          </li>
+          <li>types, methods, fields and initializers
+          </li>
+        </ul><br />
+      </li>
+      <li>
+        <h3>
 
-    <p>The Package Explorer view shows a Java-specific view of resources inside Java projects in your workbench.
-    The Java element hierarchy is defined by the project's build class paths and consists of elements like</p>
-    <ul>
-	    <li>source folders and libraries</li>
-	    <li>packages</li>
-	    <li>source and class files</li>
-	    <li>types, methods, fields and initializers</li>
+          Type Hierarchy View
+        </h3>
+        <p>
+          The <a href="../reference/views/ref-type-hierarchy.htm">Type Hierarchy view</a> allows you to look at the
+          complete hierarchy for a type, only its subtypes, or only its supertypes. You can also open the hierarchy
+          on a project, source folder or package.
+        </p>
+      </li>
+      <li>
+        <h3>
+          Call Hierarchy View
+        </h3>
+
+        <p>
+          The <a href="../reference/views/ref-call-hierarchy.htm">Call Hierarchy view</a> allows you to look at the 
+          callers and callees for a selected Java member.
+        </p>
+      </li>
+      <li>
+        <h3>
+          Java Outline View
+        </h3>
+        <p>
+          The <a href="../reference/views/ref-view-outline.htm">Java outline</a> view displays an outline of the structure
+          of the currently-active Java file in the editor area.
+        </p>
+
+      </li>
+      <li>
+        <h3>
+          JUnit View
+        </h3>
+        <p>
+          The <a href="../reference/views/ref-view-junit.htm">JUnit view</a> shows you the JUnit test run progress and
+          status, and allows you to rerun tests.
+        </p>
+      </li>
+      <li>
+
+        <h3>
+          Javadoc View
+        </h3>
+        <p>
+          The <a href="../reference/views/ref-view-javadoc.htm">Javadoc view</a> shows the Javadoc of the element selected
+          in the Java editor or in a Java view.
+        </p>
+      </li>
+      <li>
+        <h3>
+          Declaration View
+        </h3>
+
+        <p>
+          The Declaration view shows the source of the element selected in the Java editor or in a
+          Java view.
+        </p>
+      </li>
     </ul>
+    <h2>
+      Java Browsing
+    </h2>
+    <ul>
+      <li>
 
-    <h2>Type Hierarchy View</h2>
+        <h3>
+          Projects View
+        </h3>
+        <p>
+          The Projects view shows Java projects, source folders, external and internal
+          libraries.<br />
+          Note: source folders and libraries (both internal and external) presented in this view
+          are not expandable. When they are selected, their contents are shown in the Packages
+          view.
+        </p>
+      </li>
+      <li>
 
-    <p>The Type Hierarchy view allows you to look at the complete hierarchy for a
-    type, only its subtypes, or only its supertypes. You can also open the hierarchy on a project, source folder or package.</p>
+        <h3>
+          Packages View
+        </h3>
+        <p>
+          The Packages view shows a list of Java packages from the currently selected Java
+          projects, source folders or libraries. Typically, the Projects view is used to make this
+          selection.
+        </p>
+      </li>
+      <li>
+        <h3>
+          Types View
+        </h3>
 
-    <h2>Projects View</h2>
+        <p>
+          The Types view shows a list of Java types from the currently selected packages.
+          Typically, the Packages view is used to make this selection.
+        </p>
+      </li>
+      <li>
+        <h3>
+          Members View
+        </h3>
+        <p>
+          The Members view shows the content of a type, compilation unit or CLASS file. Typically, the
+          Types view is used to make this selection.
+        </p>
 
-    <p>The Projects view shows Java projects, source folders, external and internal libraries.
-    <br>
-    Note: source folders and libraries (both internal and external) presented in this view are not expandable.
-    When they are selected, their contents are shown in the Packages view.</p>
+      </li>
+    </ul>
+    <h2>
+      Debug
+    </h2>
+    <ul>
+      <li>
+        <h3>
+          Debug View
+        </h3>
 
-    <h2>Packages View</h2>
+        <p>
+          The <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a> allows you to manage the
+          debugging or running of a program in the workbench. It displays the stack frame for the suspended
+          threads for each target you are debugging. Each thread in your program appears as a node in the tree.
+          It displays the process for each target you are running.
+        </p>
+      </li>
+      <li>
+        <h3>
+          Breakpoints View
+        </h3>
+        <p>
+          The <a href="../reference/views/breakpoints/ref-breakpoints_view.htm">Breakpoints view</a> lists all the
+          breakpoints you currently have set in your workspace. You can also enable or disable breakpoints, delete them,
+          add new ones, group them by working set, or configure attributes of a selected breakpoint.
+        </p>
 
-    <p>The Packages view shows a list of Java packages from the currently selected Java projects, source folders or libraries.
-    Typically, the Projects view is used to make this selection.
-    </p>
+      </li>
+      <li>
+        <h3>
+          Expressions View
+        </h3>
+        <p>
+          Data can be inspected in the <a href="../reference/views/expressions/ref-expressions_view.htm">Expressions view</a>.
+          You can inspect data from a scrapbook page, a stack frame of a suspended thread, and other places. The Expressions 
+          View opens automatically when an item is added to the view. Entries in the Expressions View can be
+          selected to have more detailed information be displayed in the Detail Pane. When
+          debugging a Java program, data that contains variables can be expanded to show the
+          variables and the fields the variables contain.
+        </p>
+      </li>
+      <li>
 
-    <h2>Types View</h2>
+        <h3>
+          Variables View
+        </h3>
+        <p>
+          The <a href="../reference/views/variables/ref-variables_view.htm">Variables view</a> displays information about
+          the variables associated with the stack frame selected in the Debug View. When debugging a Java program,
+          variables can be selected to have more detailed information be displayed in the Detail Pane. In addition,
+          Java objects can be expanded to show the fields that variable contains.
+        </p>
+      </li>
+      <li>
+        <h3>
+          Console View
+        </h3>
 
-    <p>The Types view shows a list of Java types from the currently selected packages.
-    Typically, the Packages view is used to make this selection.
-    </p>
+        <p>
+          The <a href="../reference/views/console/ref-console_view.htm">Console view</a> displays a variety of console
+          types depending on the type of development and the current set of user settings. The consoles that are provided
+          by default with the Eclipse Platform are:
+        </p>
+        <ul>
+          <li>The Process Console
+          </li>
+          <li>The Stacktrace Console
+          </li>
+          <li>The CVS Console
+          </li>
+          <li>The OSGi Console
+          </li>
 
-    <h2>Members View</h2>
+        </ul><br />
+      </li>
+      <li>
+        <h3>
+          Display View
+        </h3>
+        <p>
+          The <a href="../reference/views/display/ref-display_view.htm">Display view</a> displays the result of
+          evaluating an expression in the context of the current stack frame. You can evaluate and display a selection
+          either from the editor or directly from the Display View.
+        </p>
+      </li>
 
-    <p>The Members shows the content of a type, compilation unit or CLASS file.
-    Typically, the Types view is used to make this selection.
+    </ul>
+    <h1>
+      View Customization
+    </h1>
+    <p>
+      Both the appearance and behavior of the Java views can be customized.
     </p>
-    
-    <h1>View Customization</h1>
-    <p>Both the appearance and behavior of the Java views can be customized.</p>
     <ul>
-        <li><a href="concept-java-views-filtering.htm">Filtering</a></li>
-        <li><a href="concept-java-views-sorting.htm">Sorting</a></li>
-        <li><a href="concept-java-views-decorators.htm">Java element decorations</a></li>
-        <li><a href="concept-java-views-presentation.htm">Presentation options</a></li>
-    </ul>    
+      <li>
+        <a href="concept-java-views-filtering.htm">Filtering</a>
 
-    <p><img  src="../images/ngrelc.png" alt="Related concepts"></p>
-    <p><a href="../concepts/concept-java-perspective.htm">Java perspectives</a></p>
+      </li>
+      <li>
+        <a href="concept-java-views-sorting.htm">Sorting</a>
+      </li>
+      <li>
+        <a href="concept-java-views-decorators.htm">Java element decorations</a>
+      </li>
+      <li>
 
-    <p><img border="0"  src="../images/ngrelt.png" alt="Related tasks"></p>
+        <a href="concept-java-views-presentation.htm">Presentation options</a>
+      </li>
+    </ul>
     <p>
-     <a href="../tasks/tasks-consoleAppearance.htm">Changing the appearance of the Console view</a>
+      <img src="../images/ngrelc.png" alt="Related concepts" />
     </p>
+    <p>
+      <a href="../concepts/concept-java-perspective.htm">Java perspectives</a>
 
-    <p><img border="0"  src="../images/ngrelr.png" alt="Related reference"></p>
+    </p>
     <p>
-     <a href="../reference/views/breakpoints/ref-breakpoints_view.htm">Breakpoints view</a><br>
-     <a href="../reference/views/console/ref-console_view.htm">Console view</a><br>
-     <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br>
-     <a href="../reference/views/display/ref-display_view.htm">Display view</a><br>
-     <a href="../reference/views/expressions/ref-expressions_view.htm">Expressions view</a><br>
-     <a href="../reference/views/ref-view-outline.htm">Java outline</a><br>
-     <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer view</a><br>
-     <a href="../reference/views/ref-type-hierarchy.htm">Type Hierarchy view</a><br>
-     <a href="../reference/views/ref-call-hierarchy.htm">Call Hierarchy view</a><br>
-     <a href="../reference/views/variables/ref-variables_view.htm">Variables view</a><br>
-     <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a><br>
-    <br>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
     </p>
+    <p>
+      <a href="../tasks/tasks-consoleAppearance.htm">Changing the appearance of the Console
+      view</a>
+    </p>
+    <p>
 
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
+    </p>
+    <p>
+      <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a><br />
+      <br />
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-jdt.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-jdt.htm
index 1868b08..adb5233 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-jdt.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-jdt.htm
@@ -1,47 +1,59 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Java development tools (JDT)</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Java development tools (JDT)
+    </title>
   </head>
-
   <body>
-    <h1>Java development tools (JDT)</h1>
-
-    <p>The Java development tools (JDT) are a set of extensions to the workbench that
-    allow you to edit, compile, and run Java programs.</p>
 
-    <p><img src="../images/ngrelc.png" alt="Related concepts" border="0" ></p>
+    <h1>
+      Java development tools (JDT)
+    </h1>
+    <p>
+      The Java development tools (JDT) are a set of extensions to the workbench that allow you to
+      edit, compile, and run Java programs.
+    </p>
+    <p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+    </p>
     <p>
-     <a href="concept-build-classpath.htm">Build classpath</a><br>
-     <a href="../concepts/concept-classpath-variables.htm">Classpath variables</a><br>
-     <a href="../concepts/cdebugger.htm">Debugger</a><br>
-     <a href="../concepts/concept-java-builder.htm">Java builder</a><br>
-     <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
-     <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-     <a href="../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-     <a href="../concepts/concept-java-views.htm">Java views</a><br>
-     <a href="../concepts/concept-java-search.htm">Java search</a><br>
-     <a href="../concepts/concept-refactoring.htm">Refactoring support</a><br>
-     <a href="../concepts/cscrapbook.htm">Scrapbook</a></p>
 
-    <p><img src="../images/ngrelt.png" alt="Related tasks" border="0" ></p>
+      <a href="concept-build-classpath.htm">Build classpath</a><br />
+      <a href="../concepts/concept-classpath-variables.htm">Classpath variables</a><br />
+      <a href="../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../concepts/concept-java-builder.htm">Java builder</a><br />
+      <a href="../concepts/concept-java-editor.htm">Java editor</a><br />
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+
+      <a href="../concepts/concept-java-perspective.htm">Java perspectives</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
+      <a href="../concepts/concept-java-search.htm">Java search</a><br />
+      <a href="../concepts/concept-refactoring.htm">Refactoring support</a><br />
+      <a href="../concepts/cscrapbook.htm">Scrapbook</a>
+    </p>
+
+    <p>
+      <img src="../images/ngrelt.png" alt="Related tasks" border="0" />
+    </p>
+    <p>
+      <a href="../tasks/tasks-64.htm">Restoring a deleted workbench element</a><br />
+      <a href="../tasks/tasks-JREs.htm">Working with JREs</a>
+    </p>
     <p>
-     <a href="../tasks/tasks-64.htm">Restoring a deleted workbench element</a><br>
-     <a href="../tasks/tasks-JREs.htm">Working with JREs</a></p>
 
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ></p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
     <p>
-     <a href="../reference/ref-jdt-actions.htm">JDT actions</a><br>
-     <a href="../reference/ref-jdt-faq.htm">Frequently asked questions on JDT</a><br>
-     <a href="../reference/ref-jdt-glossary.htm">JDT glossary</a><br>
+      <a href="../reference/ref-jdt-actions.htm">JDT actions</a><br />
+      <a href="../reference/ref-jdt-faq.htm">Frequently asked questions on JDT</a><br />
+      <a href="../reference/ref-jdt-glossary.htm">JDT glossary</a><br />
     </p>
 
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-quickfix-assist.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-quickfix-assist.htm
index 2ef82e3..0b737ba 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-quickfix-assist.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-quickfix-assist.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <title>
@@ -31,7 +31,7 @@
         Click on the light bulb
       </li>
     </ul>
-<p>Quick fix is also available on a problem entry in the Problem view. The Quick Fix action will open a dialog to select the correction.
+<p>Quick fix is also available on a problem entry in the Problems view. The Quick Fix action will open a dialog to select the correction.
 <br>
     <br>
 Note that the light bulb is only a hint. It is possible that even with the light bulb shown, it turns out that no corrections can be offered.<br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-refactoring.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-refactoring.htm
index 72c7a51..eef80bf 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-refactoring.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-refactoring.htm
@@ -1,62 +1,76 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Refactoring Support</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      Refactoring Support
+    </title>
   </head>
-
   <body>
-    <h1>Refactoring Support</h1>
 
-    <p>The goal of Java program refactoring is to make system-wide code changes without affecting the behavior of the
-    program. The Java tools provide assistance in easily refactoring code. </p>
-
-    <p>The refactoring tools support a number of transformations described in Martin Fowler's
-    book <span class="name">Refactoring: Improving the Design of Existing Code</span>, Addison Wesley
-    1999, such as <span class="name">Extract Method</span>, <span class="name">Inline Local
-    Variable, etc.</span>.</p>
-    <p>To get an overview of all offered refactorings look at the <a href="../reference/ref-menu-refactor.htm"><b>Refactor menu</b></a>.
-    Refactoring commands are also available from the context menus in many views or appear as <a href="../reference/ref-java-editor-quickassist.htm"><b>quick assists</b></a>.
+    <h1>
+      Refactoring Support
+    </h1>
+    <p>
+      The goal of Java program refactoring is to make system-wide code changes without affecting
+      the behavior of the program. The Java tools provide assistance in easily refactoring code.
+    </p>
+    <p>
+      The refactoring tools support a number of transformations described in Martin Fowler's book
+      <span class="name">Refactoring: Improving the Design of Existing Code</span>, Addison Wesley
+      1999, such as <span class="name">Extract Method</span>, <span class="name">Inline Local
+      Variable, etc.</span>.
     </p>
 
-    <p>When performing a refactoring operation, you can optionally preview all
-    of the changes resulting from a refactoring action before you choose to carry them out.
-    When previewing a refactoring operation, you will be notified of potential
-    problems and will be presented with a list of the changes the
-    refactoring action will perform. If you do not preview a refactoring
-    operation, the change will be made in its entirety and any resultant
-    problems will be shown. If a problem is detected that does not allow
-    the refactoring to continue, the operation will be halted and a list of
-    problems will be displayed.</p>
-
-    <p>Refactoring commands are available from the context menus of several Java views (e.g. Package Explorer, Outline) and editors.
-    Many "apparently simple" commands, such as <strong>Move</strong> and <strong>Rename</strong>, are
-    actually refactoring operations, since moving and renaming Java elements
-    often require changes in dependent files.
+    <p>
+      To get an overview of all offered refactorings look at the <a href=
+      "../reference/ref-menu-refactor.htm"><b>Refactor menu</b></a>. Refactoring commands are also
+      available from the context menus in many views or appear as <a href=
+      "../reference/ref-java-editor-quickassist.htm"><b>quick assists</b></a>.
+    </p>
+    <p>
+      When performing a refactoring operation, you can optionally preview all of the changes
+      resulting from a refactoring action before you choose to carry them out. When previewing a
+      refactoring operation, you will be notified of potential problems and will be presented with
+      a list of the changes the refactoring action will perform. If you do not preview a
+      refactoring operation, the change will be made in its entirety and any resultant problems
+      will be shown. If a problem is detected that does not allow the refactoring to continue, the
+      operation will be halted and a list of problems will be displayed.
+    </p>
+    <p>
+      Refactoring commands are available from the context menus of several Java views (e.g. Package
+      Explorer, Outline) and editors. Many "apparently simple" commands, such as
+      <strong>Move</strong> and <strong>Rename</strong>, are actually refactoring operations, since
+      moving and renaming Java elements often require changes in dependent files.
     </p>
 
-	<p>Refactorings can not only be performed interactively, but also from refactoring scripts. Most refactorings available in the <strong>Refactor</strong>
-	menu are stored in the workspace refactoring history in order to be used in refactoring scripts afterwards. The refactoring tools support the creation of refactoring
-	scripts based on refactorings in the workspace refactoring history. Refactoring scripts can then be applied to an arbitrary workspace. Applying a refactoring
-	script launches a refactoring wizard which is able to replay the refactorings as if they had been initiated by the user which originally had created them.
-	</p>
-	
-	<p>Related to refactoring scripts, the refactoring tools offer a refactoring to migrate a JAR File to a newer version, using refactoring information
-	to avoid breaking changes in your workspace after the migration.
-	</p>
-	
-    <p><img border="0"  src="../images/ngrelr.png" alt="Related reference"></p>
-    <p>
-     <a href="../reference/ref-menu-refactor.htm">Refactoring actions</a><br>
-     <a href="../reference/ref-wizard-refactorings.htm">Refactoring wizard</a><br>
-     <a href="../reference/preferences/ref-preferences-java.htm">Java preferences</a>
+    <p>
+      Refactorings can not only be performed interactively, but also from refactoring scripts. Most
+      refactorings available in the <strong>Refactor</strong> menu are stored in the workspace
+      refactoring history in order to be used in refactoring scripts afterwards. The refactoring
+      tools support the creation of refactoring scripts based on refactorings in the workspace
+      refactoring history. Refactoring scripts can then be applied to an arbitrary workspace.
+      Applying a refactoring script launches a refactoring wizard which is able to replay the
+      refactorings as if they had been initiated by the user which originally had created them.
     </p>
+    <p>
+      Related to refactoring scripts, the refactoring tools offer a refactoring to migrate a JAR
+      File to a newer version, using refactoring information to avoid breaking changes in your
+      workspace after the migration.
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
 
-    
+    </p>
+    <p>
+      <a href="../reference/ref-menu-refactor.htm">Refactoring actions</a><br />
+      <a href="../reference/ref-wizard-refactorings.htm">Refactoring wizard</a><br />
+      <a href="../reference/preferences/ref-preferences-java.htm">Java preferences</a>
+    </p>
   </body>
-</html>
 
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-string-externalization.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-string-externalization.htm
index 342645b..a09e75a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-string-externalization.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-string-externalization.htm
@@ -1,71 +1,96 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>String Externalization</title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css" />
+    <title>
+      String Externalization
+    </title>
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+</script>
   </head>
 
   <body>
-    <h1>String Externalization</h1>
-
-    <p>The Java tools help you to develop applications that can be run on
-    international platforms. An important facet of designing a program for
-    use in different countries is the localization, or externalization, of text
-    that is displayed by the program. By externalizing strings, the text
-    can be translated for different countries and languages without rebuilding
-    the Java program.</p>
-
-    
-<p>The JDT provides the following support for internationalization and string 
-  externalization:</p>
+    <h1>
+      String Externalization
+    </h1>
+    <p>
+      The Java tools help you to develop applications that can be run on international platforms.
+      An important facet of designing a program for use in different countries is the localization,
+      or externalization, of text that is displayed by the program. By externalizing strings, the
+      text can be translated for different countries and languages without rebuilding the Java
+      program.
+    </p>
+    <p>
+      The JDT provides the following support for internationalization and string externalization:
+    </p>
 
-    
-<ul>
-  <li> A compiler option lets you mark non-externalized strings as compile-time 
-    warnings or errors. 
     <ul>
-      <li>See the <b>Non-externalized strings</b> option in the <b>Code style</b> section of the
-      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the Java compiler preference page">
-      <span class="control">Java > Compiler > Errors/Warnings</span></a> preference page.</li>
-    </ul>
-  </li>
-  <li>Tools that allow you to find strings that have not been externalized.</li>
-  <li>A wizard that will guide you through externalizing the strings.</li>
-  <li>Tools that help you to find unused and incorrectly used keys for strings 
-    located in property files.</li>
-</ul>
+      <li>A compiler option lets you mark non-externalized strings as compile-time warnings or
+      errors.
+        <ul>
+          <li>See the <b>Non-externalized strings</b> option in the <b>Code style</b> section of
+          the <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
+            <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+            "Goto the Java compiler preference page" /> <span class="control">Java > Compiler
+            > Errors/Warnings</span></a> preference page.
+          </li>
 
-    <p>Comments can be used to denote strings that should not be externalized
-    and should not result in compile-time warnings or errors. These comments are of form <code>//$NON-NLS-n$</code>
-    where n is the 1-based index of the string in a line of code.</p>
-    <p>Additional information about internationalized applications can be found
-    in the following documents:</p>
+        </ul>
+      </li>
+      <li>Tools that allow you to find strings that have not been externalized.
+      </li>
+      <li>A wizard that will guide you through externalizing the strings.
+      </li>
+      <li>Tools that help you to find unused and incorrectly used keys for strings located in
+      property files.
+      </li>
+    </ul>
+    <p>
 
+      Comments can be used to denote strings that should not be externalized and should not result
+      in compile-time warnings or errors. These comments are of form <code>//$NON-NLS-n$</code>
+      where n is the 1-based index of the string in a line of code.
+    </p>
+    <p>
+      Additional information about internationalized applications can be found in the following
+      documents:
+    </p>
     <ul>
-      <li><a href=
-      "http://eclipse.org/articles/Article-Internationalization/how2I18n.html">http://eclipse.org/articles/Article-Internationalization/how2I18n.html</a></li>
+      <li>
+        <a href=
+        "http://eclipse.org/articles/Article-Internationalization/how2I18n.html">http://eclipse.org/articles/Article-Internationalization/how2I18n.html</a>
 
-      <li><a href="http://java.sun.com/docs/books/tutorial/i18n/intro/index.html" target="_blank">http://java.sun.com/docs/books/tutorial/i18n/intro/index.html</a></li>
+      </li>
+      <li>
+        <a href="http://java.sun.com/docs/books/tutorial/i18n/intro/index.html" target=
+        "_blank">http://java.sun.com/docs/books/tutorial/i18n/intro/index.html</a>
+      </li>
     </ul>
-
-    <p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ></p>
     <p>
-     <a href="../tasks/tasks-188.htm">Finding strings to externalize</a><br>
-     <a href="../tasks/tasks-202.htm">Finding unused and incorrectly used keys in property files</a></p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
+    </p>
 
-    <p><img src="../images/ngrelr.png" alt="Related reference" border="0" ></p>
     <p>
-     <a href="../reference/ref-menu-source.htm">Source menu</a><br>
-     <a href="../reference/ref-wizard-externalize-strings.htm">Externalize strings wizard</a><br>
-     <a href="../reference/preferences/java/ref-preferences-compiler.htm">Java compiler preferences</a></p>
+      <a href="../tasks/tasks-188.htm">Finding strings to externalize</a><br />
+      <a href="../tasks/tasks-202.htm">Finding unused and incorrectly used keys in property
+      files</a>
+    </p>
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
 
-    
+      <a href="../reference/ref-menu-source.htm">Source menu</a><br />
+      <a href="../reference/ref-wizard-externalize-strings.htm">Externalize strings
+      wizard</a><br />
+      <a href="../reference/preferences/java/ref-preferences-compiler.htm">Java compiler
+      preferences</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-template-variables.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-template-variables.htm
index de5b673..0b4796f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-template-variables.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/concepts/concept-template-variables.htm
@@ -2,7 +2,7 @@
 <html lang="en">
   
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <title>Java Editor Template Variables</title>
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -57,7 +57,7 @@
         </tr>
         <tr>
           <td><strong>${enclosing_method}</strong></td>
-          <td>Evaluates to the name of the enclosing name.</td>
+          <td>Evaluates to the name of the enclosing method.</td>
         </tr>
         <tr>
           <td><strong>${enclosing_method_arguments}</strong></td>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_Debugger.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_Debugger.xml
index 6fcb56c..d18aa1c 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_Debugger.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_Debugger.xml
@@ -2,7 +2,7 @@
 <?NLS TYPE="org.eclipse.help.contexts"?>
 <contexts>
 <!--
-	Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.
+	Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.
 	
 	All Platform Debug contexts, those for org.eclipse.debug.ui, are located in this file
 	All contexts are grouped by their relation, with all relations grouped alphabetically.
@@ -1418,8 +1418,8 @@ For all of these entries, you can input them as HEX by selecting the <b>Input as
     </context>
     <context id="horizontal_detail_pane_layout_action_context">
 	    <description>This command reveals the detail pane and sets it in a horizontal alignment within the view.</description>
-	    <topic label="Horizontal View Orientation" href="reference/views/shared/ref-horizview.htm"/>
-	    <topic label="Vertical View Orientation" href="reference/views/shared/ref-vertview.htm"/>
+	    <topic label="Horizontal Layout" href="reference/views/shared/ref-horizview.htm"/>
+	    <topic label="Vertical Layout" href="reference/views/shared/ref-vertview.htm"/>
 	    <topic label="View Only Layout" href="reference/views/shared/ref-viewonly.htm"/>
 		<topic label="Detail Pane" href="reference/views/shared/ref-detailpane.htm"/>
 		<topic label="View Layout Commands" href="reference/views/shared/ref-viewlayoutcommands.htm"/>
@@ -1428,8 +1428,8 @@ For all of these entries, you can input them as HEX by selecting the <b>Input as
     </context>
     <context id="vertical_detail_pane_layout_action_context">
 	    <description>This command reveals the detail pane and sets it in a vertical alignment within the view.</description>
-	    <topic label="Vertical View Orientation" href="reference/views/shared/ref-vertview.htm"/>
-	    <topic label="Horizontal View Orientation" href="reference/views/shared/ref-horizview.htm"/>
+	    <topic label="Vertical Layout" href="reference/views/shared/ref-vertview.htm"/>
+	    <topic label="Horizontal Layout" href="reference/views/shared/ref-horizview.htm"/>
 	    <topic label="View Only Layout" href="reference/views/shared/ref-viewonly.htm"/>
 	    <topic label="Detail Pane" href="reference/views/shared/ref-detailpane.htm"/>
 		<topic label="View Layout Commands" href="reference/views/shared/ref-viewlayoutcommands.htm"/>
@@ -1439,8 +1439,8 @@ For all of these entries, you can input them as HEX by selecting the <b>Input as
     <context id="detail_pane_hidden_layout_action_context">
 	    <description>This command hides the detail pane within the view.</description>
 	    <topic label="View Only Layout" href="reference/views/shared/ref-viewonly.htm"/>
-	    <topic label="Horizontal View Orientation" href="reference/views/shared/ref-horizview.htm"/>
-	    <topic label="Vertical View Orientation" href="reference/views/shared/ref-vertview.htm"/>
+	    <topic label="Horizontal Layout" href="reference/views/shared/ref-horizview.htm"/>
+	    <topic label="Vertical Layout" href="reference/views/shared/ref-vertview.htm"/>
 	    <topic label="Detail Pane" href="reference/views/shared/ref-detailpane.htm"/>
 		<topic label="View Layout Commands" href="reference/views/shared/ref-viewlayoutcommands.htm"/>
 		<topic label="Variables View" href="reference/views/variables/ref-variables_view.htm" />
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT.xml
index 97026f6..372df31 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT.xml
@@ -13,6 +13,10 @@
         <description>This command generates getter and setter methods for the selected field.</description>
         <topic label="Source actions" href="reference/ref-menu-source.htm"/>
     </context>
+    <context id="create_new_constructor_action_context">
+       <description>This command creates a constructor for a class using its fields.</description>
+       <topic href="reference/ref-menu-source.htm" label="Source actions"/>
+    </context>
 
     <context id="add_methodbreakpoint_action_context">
         <description>This command adds a method entry breakpoint for the selected method.</description>
@@ -64,7 +68,7 @@
         <description>While debugging, this command allows you to run the program to the location of the cursor.</description>
         <topic label="Run to Line" href="reference/menus/run/ref-run_to_line.htm"/>
         <topic label="Stepping" href="tasks/task-stepping.htm"/>
-       <topic label="Debug View" href="reference/views/debug/ref-debug_view.htm" />
+       <topic label="Debug view" href="reference/views/debug/ref-debug_view.htm" />
         <topic label="Breakpoints" href="concepts/cbrkpnts.htm"/>
         <topic label="Debugger" href="concepts/cdebugger.htm"/>
         <topic label="Remote debugging" href="concepts/cremdbug.htm"/>
@@ -585,9 +589,14 @@
     </context>
 
     <context id="access_rules_dialog_context">
-        <description>This dialog allows you to confugre access rules.</description>
+        <description>This dialog allows you to configure access rules.</description>
         <topic label="Access Rules" href="concepts/concept-access-rules.htm"/>
     </context>
+    <context id="access_rules_dialog_combine_rules_context" title="Combine Access Rules">
+       <description>This dialog allows you to configure access rules.</description>
+       <topic href="concepts/concept-access-rules.htm" label="Access Rules"/>
+       <topic href="concepts/concept-access-rules-combine-rules.htm" label="Combine Access Rules"/>
+    </context>
     
     <context id="edit_jre_dialog_context">
         <description>Edit an existing JRE definition.</description>
@@ -732,7 +741,7 @@
 
     <context id="history_list_dialog_context">
         <description>A dialog for re-opening previously opened type hierarchies.</description>
-        <topic label="Type Hierarchy View" href="reference/views/ref-type-hierarchy.htm"/>
+        <topic label="Type Hierarchy view" href="reference/views/ref-type-hierarchy.htm"/>
     </context>
 
     <context id="import_organize_input_dialog_context">
@@ -821,7 +830,7 @@
     <context id="type_hierarchy_view_context" title="About Type Hierarchy view">
         <description>This view displays a type's hierarchy.</description>
         <topic label="Viewing the Type Hierarchy" href="gettingStarted/qs-6.htm"/>
-        <topic label="Java Views" href="concepts/concept-java-views.htm"/>
+        <topic label="Java views" href="concepts/concept-java-views.htm"/>
     </context>
 
     <context id="projects_view_context" title="About Projects view">
@@ -907,8 +916,18 @@
         <topic label="Java editor preferences" href="reference/preferences/java/ref-preferences-editor.htm"/>
         <topic label="Java editor concepts" href="concepts/concept-java-editor.htm"/>
         <topic label="Java editor reference" href="reference/views/ref-java-editor.htm"/>
+        <topic label="Configuring accessibility options for textual editors" href="PLUGINS_ROOT/org.eclipse.platform.doc.user/concepts/accessibility/text_editor.htm"/>
     </context>
-    
+
+    <context id="typing_preference_page_context">
+        <description>On this page you can indicate your smart typing preferences for the Java editor.
+
+The preferences on this page are only considered if <b>Smart Insert Mode</b> appears in the status line. This can be toggled in the <b>Edit</b> menu.</description>
+        <topic label="Java editor preferences" href="reference/preferences/java/ref-preferences-editor.htm"/>
+        <topic label="Java editor concepts" href="concepts/concept-java-editor.htm"/>
+        <topic label="Java editor reference" href="reference/views/ref-java-editor.htm"/>
+    </context>
+
     <context id="spelling_configuration_block_context">
         <description>On this page you can indicate your spelling preferences.
 
@@ -1835,15 +1854,36 @@
     </context>
     <context id="call_hierarchy_filters_dialog_context" title="About Call Hierarchy Filter">
        <description>This filter helps you specify the patterns,  whose matching type or method names  need to be hidden from the call hierarchy.</description>
-       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy View"/>
+       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy view"/>
     </context>
     <context id="call_hierarchy_expand_with_constructors_dialog_context">
        <description>This dialog helps you to specify a list of qualified names of the types that would be expanded with constructors by default.</description>
-       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy View"/>
+       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy view"/>
     </context>
     <context id="call_hierarchy_expand_with_constructors_action_context">
        <description>This action can be called on instance methods to show the constructors of its declaring type along with a node that contains the direct callers of the method.</description>
-       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy View"/>
+       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy view"/>
+    </context>
+    <context id="call_hierarchy_search_in_dialog_context">
+       <description>In this dialog, you can select where in the scope the Call Hierarchy should search for results.</description>
+       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy view"/>
+    </context>
+    <context id="call_hierarchy_open_action_context" title="About Open Call Hierarchy">
+       <description>Opens the Call Hierarchy view for the selected element.</description>
+       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy view"/>
+       <topic href="reference/ref-menu-navigate.htm" label="Navigate actions"/>
+    </context>
+    <context id="show_in_breadcrumb_action_context">
+       <description>This action opens the Java Breadcrumb which shows the element at the current caret position and all its parent elements.</description>
+       <topic href="reference/ref-java-editor-breadcrumb.htm" label="Java breadcrumb"/>
+    </context>
+    <context id="copy_qualified_name_action_context">
+       <description>This action copies the qualified name of the selected element into the clipboard.</description>
+       <topic href="reference/ref-menu-edit.htm" label="Edit actions"/>
+    </context>
+    <context id="call_hierarchy_pin_view_action_context">
+       <description>This action enables you to open multiple Call Hierarchy views at once.</description>
+       <topic href="reference/views/ref-call-hierarchy.htm" label="Call Hierarchy view"/>
     </context>
     
 </contexts>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT_Debugger.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT_Debugger.xml
index 10a3ead..19870df 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT_Debugger.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/contexts_JDT_Debugger.xml
@@ -391,7 +391,10 @@
 	<context  id="open_declaring_type_hierarchy_action_context" >
 		<description>This command opens a Type Hierarchy view on the type in which the method of the selected stack frame is defined.</description>
 	</context>
-
+	<context  id="open_from_clipboard_action_context" title="Open from Clipboard">
+		<description>Opens a Java element or a Java stack trace from the clipboard.</description>
+		<topic label="Navigate actions" href="reference/ref-menu-navigate.htm"/>
+	</context>
 <!-- 
 	Preference/Property Pages 
 -->
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_mytestcase_moved.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_mytestcase_moved.png
index c1875d7..a181fb4 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_mytestcase_moved.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_mytestcase_moved.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_vectortest_quickoutline.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_vectortest_quickoutline.png
index c4fc73f..8109f59 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_vectortest_quickoutline.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/editor_vectortest_quickoutline.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/extract_method_dialog.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/extract_method_dialog.png
index 1ce79b0..15370bf 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/extract_method_dialog.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/extract_method_dialog.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/j2se50/wiz_new_java_project_myproject.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/j2se50/wiz_new_java_project_myproject.png
index b34ba7f..dad84bd 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/j2se50/wiz_new_java_project_myproject.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/j2se50/wiz_new_java_project_myproject.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/pref_editor.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/pref_editor.png
index 626c708..e263616 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/pref_editor.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/pref_editor.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout2.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout2.png
index 712efbe..05d4093 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout2.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout2.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout4.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout4.png
index ca3a89c..d9730e1 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout4.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-DetectingExistingLayout4.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-OrganizeSources6.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-OrganizeSources6.png
index 9b316b2..6bc79d2 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-OrganizeSources6.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-OrganizeSources6.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout11.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout11.png
index 0d06300..880820c 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout11.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout11.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout15.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout15.png
index 94832d6..2b24f62 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout15.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout15.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout21.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout21.png
index 0d06300..880820c 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout21.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout21.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout29.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout29.png
index 46439a2..622c3b6 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout29.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout29.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout31.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout31.png
index 0d06300..880820c 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout31.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout31.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout36.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout36.png
index 830bdd8..e4d4b7c 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout36.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout36.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout41.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout41.png
index 0d06300..880820c 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout41.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout41.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout49.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout49.png
index a6e8874..e8ded93 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout49.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout49.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout51.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout51.png
index 6bb6387..5975cf2 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout51.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout51.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout61.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout61.png
index d53efea..432c350 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout61.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout61.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout63.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout63.png
index 63b46fc..bb75f84 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout63.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/qs-WorkingWithExistingLayout63.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_menu.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_menu.png
index 2786edf..c94219a 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_menu.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_menu.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_submethods.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_submethods.png
index 4fbbd53..6c6be75 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_submethods.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/quickoutline_submethods.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_junit_red.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_junit_red.png
index 0155cc7..9536d34 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_junit_red.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_junit_red.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit.png
index 5e8a137..e322938 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit_exp.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit_exp.png
index 0d9a176..2f33300 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit_exp.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_junit_exp.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_vectortest_error.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_vectortest_error.png
index b0ef9a8..c9380c6 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_vectortest_error.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_package_explorer_vectortest_error.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_problems_goto.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_problems_goto.png
index fee906b..aaa1fa0 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_problems_goto.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/view_problems_goto.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/wiz_new_project.png b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/wiz_new_project.png
index f85b9e5..e6adb44 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/wiz_new_project.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/images/wiz_new_project.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/intro/overview.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/intro/overview.htm
index 86ecf5f..3139d7e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/intro/overview.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/intro/overview.htm
@@ -1,26 +1,44 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <title>Java development overview</title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-   </head>
-   
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../../book.css" charset=
+    "ISO-8859-1" type="text/css" />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <title>
+      Java development overview
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
   <body>
     <h1>
-      Java development overview</h1>
+      Java development overview
+    </h1>
+    <p>
+      The JDT project provides the tool plug-ins that implement a
+      Java IDE supporting the development of any Java application,
+      including Eclipse plug-ins. It adds a Java project nature and
+      Java perspective to the Eclipse Workbench as well as a number
+      of views, editors, wizards, builders, and code merging and
+      refactoring tools. The JDT project allows Eclipse to be a
+      development environment for itself.
+    </p>
     <p>
-		The JDT project provides the tool plug-ins that implement a Java IDE supporting the development of any Java application, including Eclipse plug-ins. It adds a Java project nature and Java perspective to the Eclipse Workbench as well as a number of views, editors, wizards, builders, and code merging and refactoring tools. The JDT project allows Eclipse to be a development environment for itself.</p>
-	<p>
-		Try the <a href="../../gettingStarted/qs-BasicTutorial.htm">
-		Basic tutorial</a> to get a first impression. Discover more in the <a href="../../tips/jdt_tips.html">
-		Tips and Tricks</a> section and learn about the latest features in <a href="../../whatsNew/jdt_whatsnew.html">
-		What's new in 3.4</a>
-	</p>
-    
+
+      Try the <a href=
+      "../../gettingStarted/qs-BasicTutorial.htm">Basic
+      tutorial</a> to get a first impression. Discover more in the
+      <a href="../../tips/jdt_tips.html">Tips and Tricks</a>
+      section and learn about the latest features in <a href=
+      "../../whatsNew/jdt_whatsnew.html">What's new</a>.
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-12.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-12.htm
index 4afcac1..51bb5cd 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-12.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-12.htm
@@ -1,111 +1,200 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-<title> Running your programs </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Running your programs </h1>
-<p> In this section, you will learn more about running Java programs in the workbench. 
-</p>
-<ol>
-  <li> In the Package Explorer view, find <em>junit.textui/TestRunner.java</em> 
-    and double-click it to open it in an editor. </li>
-  <li> In the Outline view, notice that the TestRunner class has an icon which 
-    indicates that the class defines a <code>main</code> method. 
-    <p> <img src="images/view_outline_testrunner_main.png"  alt="Outline view with selected TestRunner class"> 
-    </p>
-  </li>
-  <li> Right click on TestRunner.java in the Package Explorer and select
-    <strong>Run As</strong> > <strong>Java Application</strong>. This will launch the
-    selected class as a local Java application. The <strong>Run As</strong>
-    context menu item is also available in other places, such as the Outline view.
-    <p> <img src="images/view_outline_testrunner_run.png"  alt="Run context menu"> </p>
-  </li>
-  <li> Notice that the program has finished running and the following message appears in the 
-    Console view telling you that the program needs an execution argument. 
-    Running class from the Package Explorer as a Java Application uses the default settings for
-    launching the selected class and does not allow you to specify any
-    arguments. 
-    <p> <img src="images/view_console_noarg.png"  alt="Console with error message: Usage: TestRunner [-wait] testCaseName, where name is the name of the TestCase class"> 
-    </p>
-  </li>
-  <li> To specify arguments, use the drop-down <strong>Run</strong> menu in the
-    toolbar and select <strong>Run Configurations...</strong>. 
-    <p> <img src="images/open_run_dialog.png"  alt="Run menu of the toolbar"> </p>
-    You can also Ctrl+Click a configuration in the drop-down menu to start editing that configuration.
-  </li>
-  <li> This time, the Launch Configurations dialog opens with the TestRunner launch configuration selected.
-    A launch configuration allows you to configure how a program is launched,
-    including its arguments, classpath, and other options.  (A default
-    launch configuration was created for you when you chose <strong>Run >
-    Java Application</strong>). 
-    <p> <img src="images/run_dialog.png"  alt="Launch configuration dialog showing the Main tab"> 
-    </p>
-  </li>
-  <li> Select the Arguments tab and type <em>junit.samples.VectorTest</em> in 
-    the Program arguments area. 
-    <p> <img src="images/run_dialog_arguments.png"  alt="Arguments tab of the launch configuration dialog"> 
-    </p>
-  </li>
-  <li> Click <strong>Run</strong>. This time the program runs correctly, indicating 
-    the number of tests that were run. 
-    <p> <img src="images/view_console_success.png"  alt="Console showing program output"> </p>
-  </li>
-  <li> <p>Switch to the Debug perspective. In the Debug view, notice that a process
-    for the last program launch was registered when the program was run.</p>
-    <p>By default, the Debug view automatically removes any terminated launches when
-    a new launch is created. This preference can be configured on the
-    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchingPreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the Launching preference page">
-      <strong>Run/Debug > Launching</strong></a>
-    preference page</p>
-    <p> <img src="images/view_debug.png"  alt="Debug view showing two terminated run launches"> 
-    </p>
-    <em>Note: You can relaunch a terminated process by selecting <strong>Relaunch</strong> 
-    from its context menu.</em> </li>
-  <li> Select the drop-down menu from the <strong>Run</strong> button in the workbench 
-    toolbar. This list contains the previously launched programs. These programs
-    can be relaunched by selecting them in the history list. 
-    <p> <img src="images/run_dropdown.png"  alt="Run drop down menu from the workbench toolbar"> 
-    </p>
-  </li>
-  <li> By default the currently selected resource or active editor is launched when the run button is hit. If none of these is 
-  launchable the current project will be launched. You can configure this behavior under
-  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchingPreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the Launching preference page">
-      <strong>Run/Debug > Launching</strong></a>.
-  <p> <img src="images/pref_launch_operation.png"  alt="Debug view showing two terminated run launches"> 
-    </p> 
-  </li>
-  <li> From the context menu in the Debug view (or the equivalent toolbar button), 
-    select <strong>Remove All Terminated</strong> to clear the view of terminated
-    launch processes. 
-    <p> <img src="images/view_debug_removelaunched.png"  alt="Debug view showing context menu"> 
-    </p>
-  </li>
-</ol>
-<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-13.htm">Debugging your programs</A>
-</P>
-    <p><img src="../images/ngrelt.png"  border="0" alt="Related tasks"><br>
-     <a href="../tasks/tasks-9.htm">Changing debugger launch options</a><br>
-     <a href="../tasks/task-remotejava_launch_config.htm">Connecting to a remote VM with the Remote Java application launch configuration</a><br>
-     <a href="../tasks/task-disconnect_remote_debug.htm">Disconnecting from a VM</a><br>
-     <a href="../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-     <a href="../tasks/task-running_and_debugging.htm">Running and debugging</a><br>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Running your programs
+    </title>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Running your programs
+    </h1>
+    <p>
+      In this section, you will learn more about running Java
+      programs in the workbench.
     </p>
+    <ol>
+
+      <li>In the Package Explorer view, find
+      <em>junit.textui/TestRunner.java</em> and double-click it to
+      open it in an editor.
+      </li>
+      <li>In the Outline view, notice that the TestRunner class has
+      an icon which indicates that the class defines a
+      <code>main</code> method.
+        <p>
+          <img src="images/view_outline_testrunner_main.png" alt=
+          "Outline view with selected TestRunner class" />
+        </p>
+      </li>
+
+      <li>Right click on TestRunner.java in the Package Explorer
+      and select <strong>Run As</strong> > <strong>Java
+      Application</strong>. This will launch the selected class as
+      a local Java application. The <strong>Run As</strong> context
+      menu item is also available in other places, such as the
+      Outline view.
+        <p>
+          <img src="images/view_outline_testrunner_run.png" alt=
+          "Run context menu" />
+        </p>
+      </li>
+
+      <li>Notice that the program has finished running and the
+      following message appears in the Console view telling you
+      that the program needs an execution argument.  Running
+      class from the Package Explorer as a Java Application uses
+      the default settings for launching the selected class and
+      does not allow you to specify any arguments.
+        <p>
+          <img src="images/view_console_noarg.png" alt=
+          "Console with error message: Usage: TestRunner [-wait] testCaseName, where name is the name of the TestCase class" />
+        </p>
+      </li>
+      <li>To specify arguments, use the drop-down
+      <strong>Run</strong> menu in the toolbar and select <strong>
 
-    <p><img border="0" src="../images/ngrelr.png" alt="Related reference" ><br>
-     <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br>
-     <a href="../reference/menus/run/ref-menu-run.htm">Run menu actions</a><br>
-     <a href="../reference/ref-toolbar-run.htm">Run and debug toolbar actions</a><br>
+        Run Configurations...</strong>.
+        <p>
+          <img src="images/open_run_dialog.png" alt=
+          "Run menu of the toolbar" />
+        </p>You can also Ctrl+Click a configuration in the
+        drop-down menu to start editing that configuration.
+      </li>
+      <li>This time, the Launch Configurations dialog opens with
+      the TestRunner launch configuration selected. A launch
+      configuration allows you to configure how a program is
+      launched, including its arguments, classpath, and other
+      options.  (A default launch configuration was created
+      for you when you chose <strong>Run > Java
+      Application</strong>).
+        <p>
+
+          <img src="images/run_dialog.png" alt=
+          "Launch configuration dialog showing the Main tab" />
+        </p>
+      </li>
+      <li>Select the Arguments tab and type
+      <em>junit.samples.VectorTest</em> in the Program arguments
+      area.
+        <p>
+          <img src="images/run_dialog_arguments.png" alt=
+          "Arguments tab of the launch configuration dialog" />
+        </p>
+      </li>
+
+      <li>Click <strong>Run</strong>. This time the program runs
+      correctly, indicating the number of tests that were run.
+        <p>
+          <img src="images/view_console_success.png" alt=
+          "Console showing program output" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Switch to the Debug perspective. In the Debug view,
+          notice that a process for the last program launch was
+          registered when the program was run.
+        </p>
+
+        <p>
+          By default, the Debug view automatically removes any
+          terminated launches when a new launch is created. This
+          preference can be configured on the <a class=
+          "command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchingPreferencePage)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+          alt="Goto the Launching preference page" />
+          <strong>Run/Debug > Launching</strong></a> preference
+          page
+        </p>
+        <p>
+          <img src="images/view_debug.png" alt=
+          "Debug view showing two terminated run launches" />
+
+        </p><em>Note: You can relaunch a terminated process by
+        selecting <strong>Relaunch</strong> from its context
+        menu.</em>
+      </li>
+      <li>Select the drop-down menu from the <strong>Run</strong>
+      button in the workbench toolbar. This list contains the
+      previously launched programs. These programs can be
+      relaunched by selecting them in the history list.
+        <p>
+          <img src="images/run_dropdown.png" alt=
+          "Run drop down menu from the workbench toolbar" />
+
+        </p>
+      </li>
+      <li>By default the currently selected resource or active
+      editor is launched when the run button is hit. If none of
+      these is launchable the current project will be launched. You
+      can configure this behavior under <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchingPreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+        alt="Goto the Launching preference page" />
+        <strong>Run/Debug > Launching</strong></a>.
+        <p>
+          <img src="images/pref_launch_operation.png" alt=
+          "Debug view showing two terminated run launches" />
+
+        </p>
+      </li>
+      <li>From the context menu in the Debug view (or the
+      equivalent toolbar button), select <strong>Remove All
+      Terminated</strong> to clear the view of terminated launch
+      processes.
+        <p>
+          <img src="images/view_debug_removelaunched.png" alt=
+          "Debug view showing context menu" />
+        </p>
+      </li>
+    </ol>
+
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-13.htm">Debugging your programs</a>
     </p>
+    <p>
+      <img src="../images/ngrelt.png" border="0" alt=
+      "Related tasks" /><br />
+      <a href="../tasks/tasks-9.htm">Changing debugger launch
+      options</a><br />
+      <a href=
+      "../tasks/task-remotejava_launch_config.htm">Connecting to a
+      remote VM with the Remote Java application launch
+      configuration</a><br />
 
+      <a href=
+      "../tasks/task-disconnect_remote_debug.htm">Disconnecting
+      from a VM</a><br />
+      <a href="../tasks/task-launching_java_program.htm">Launching
+      a Java program</a><br />
+      <a href="../tasks/task-running_and_debugging.htm">Running and
+      debugging</a><br />
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelr.png" alt=
+      "Related reference" /><br />
+      <a href="../reference/views/debug/ref-debug_view.htm">Debug
+      view</a><br />
 
-</body>
+      <a href="../reference/menus/run/ref-menu-run.htm">Run menu
+      actions</a><br />
+      <a href="../reference/ref-toolbar-run.htm">Run and debug
+      toolbar actions</a><br />
+    </p>
+  </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-13.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-13.htm
index e41b33d..f9ecefe 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-13.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-13.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -98,18 +98,18 @@
 </ol>
 <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-14.htm">Evaluating expressions</A>
 </P>
-    <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
+    <p><img src="../images/ngrelc.png" alt="Related concepts" ><br>
      <a href="../concepts/cbrkpnts.htm">Breakpoints</a><br>
      <a href="../concepts/cremdbug.htm">Remote debugging</a><br>
      <a href="../concepts/clocdbug.htm">Local debugging</a></p>
 
-    <p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
+    <p><img src="../images/ngrelt.png" alt="Related tasks" ><br>
      <a href="../tasks/task-add_line_breakpoints.htm">Adding breakpoints</a><br>
      <a href="../tasks/task-resuming_threads.htm">Resuming the execution of suspended threads</a><br>
      <a href="../tasks/task-running_and_debugging.htm">Running and debugging</a><br>
      <a href="../tasks/task-suspending_threads.htm">Suspending threads</a></p>
 
-    <p><img src="../images/ngrelr.png"  border="0" alt="Related reference"><br>
+    <p><img src="../images/ngrelr.png" alt="Related reference"><br>
      <a href="../reference/preferences/java/debug/ref-debug.htm">Debug preferences</a><br>
      <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br>
      <a href="../reference/menus/run/ref-menu-run.htm">Run menu actions</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-14.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-14.htm
index 399af7f..f76e00e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-14.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-14.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -44,15 +44,15 @@ running Java program. </p>
 </ol>
 <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-15.htm">Evaluating snippets</A>
 </P>
-<p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
+<p><img src="../images/ngrelc.png" alt="Related concepts" ><br>
 <a href="../concepts/cdebugger.htm">Debugger</a></p>
-<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
+<p><img src="../images/ngrelt.png" alt="Related tasks" ><br>
      <a href="../tasks/task-evaluating_expressions.htm">Evaluating expressions</a><br>
 <a href="../tasks/task-display_evaluation_result.htm">Displaying the result of evaluating an
 expression</a><br>
 <a href="../tasks/task-inspect_evaluation_result.htm">Inspecting the result of evaluating an
 expression</a></p>
-<p><img border="0" src="../images/ngrelr.png" alt="Related reference" ><br>
+<p><img src="../images/ngrelr.png" alt="Related reference" ><br>
 <a href="../reference/views/expressions/ref-expressions_view.htm">Expressions view</a></p>
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-15.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-15.htm
index 3cf1ebb..32d7640 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-15.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-15.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2001, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2001, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -49,19 +49,19 @@ putting them in your program. </p>
 </ol>
 <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-Browsing.htm">Using the Java browsing perspective</A>
 </P>
-<p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
+<p><img src="../images/ngrelc.png" alt="Related concepts" ><br>
 <a href="../concepts/cdebugger.htm">Debugger</a></p>
-<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
+<p><img src="../images/ngrelt.png" alt="Related tasks" ><br>
 <a href="../tasks/task-create_scrapbook_page.htm">Creating a Java scrapbook page</a><br>
 <a href="../tasks/task-display_evaluation_result.htm">Displaying the result of evaluating an
 expression</a><br>
 <a href="../tasks/task-inspect_evaluation_result.htm">Inspecting the result of evaluating an
 expression</a></p>
-<p><img border="0" src="../images/ngrelr.png" alt="Related reference" ><br>
+<p><img src="../images/ngrelr.png" alt="Related reference" ><br>
 <a href="../reference/ref-wizard-scrapbook.htm">New Java Scrapbook Page wizard</a><br>
 <a href="../reference/views/ref-view-scrapbook.htm">Java scrapbook page</a><br>
 <a href="../reference/views/expressions/ref-expressions_view.htm">Expressions view</a></p>
-<p><a href="../notices.html"><img src="../cpy.png" border="0" alt="Legal notices" ></a>
+<p><a href="../notices.html"><img src="../cpy.png" alt="Legal notices" ></a>
 </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-AddMethod.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-AddMethod.htm
index 123cd4a..168ba3f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-AddMethod.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-AddMethod.htm
@@ -1,84 +1,116 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Adding new methods
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Adding new methods
     </h1>
     <ol>
-      <li>
-        Start adding a method by typing the following at the end of the <em>VectorTest.java</em> file (but before the closing 
-        brace of the type) in the Java editor:<br>
-        <code>public void testSizeIsThree()</code><br>
-		As soon as you type the method name in the editor area, the new method appears at the bottom of the Outline view. 
-		<p>
-		<img src="images/editor_vectortest_testSizeIsThree.png"  alt="New method in outline view">
-		</p>
-		In addition,
-		<ul>
-		  <li>error annotations (red boxes) appear in the overview ruler positioned on the right hand side of the editor,</li>
-		  <li>error icons appear in the vertical ruler positioned on the left of the editor,</li>
-		  <li>an error indicator appears in the top right corner of the editor,</li>
-		  <li>errors are marked in the text.</li>
-		</ul>
-		These error annotations indicate that the compilation unit is currently not correct. If you hover
-		over the error in the text, a tool tip appears: <em>Syntax error on token ")", 
-		{ expected after this token</em>. This is correct since the method doesn't have a body yet. Note that error 
-		annotations in the editor are updated as you type. This behavior can be controlled via  the
-		<STRONG>Report problems as you type</STRONG> option located on the
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the Java editor preference page">
-		<strong>Java > Editor</strong></a> preference page.
-		<p>
-		<img src="images/editor_vectortest_problem_hover.png"  alt="Error annotations in vertical and overview ruler">
-		</p>
-		
+      <li>Start adding a method by typing the following at the end
+      of the <em>VectorTest.java</em> file (but before the closing
+      brace of the type) in the Java editor:<br />
+
+        <code>public void testSizeIsThree()</code><br />
+        As soon as you type the method name in the editor area, the
+        new method appears at the bottom of the Outline view.
+        <p>
+          <img src="images/editor_vectortest_testSizeIsThree.png"
+          alt="New method in outline view" />
+        </p>In addition,
+        <ul>
+          <li>error annotations (red boxes) appear in the overview
+          ruler positioned on the right hand side of the editor,
+          </li>
+          <li>error icons appear in the vertical ruler positioned
+          on the left of the editor,
+          </li>
+
+          <li>an error indicator appears in the top right corner of
+          the editor,
+          </li>
+          <li>errors are marked in the text.
+          </li>
+        </ul>These error annotations indicate that the compilation
+        unit is currently not correct. If you hover over the error
+        in the text, a tool tip appears: <em>Syntax error on token
+        ")", { expected after this token</em>. This is correct
+        since the method doesn't have a body yet. Note that error
+        annotations in the editor are updated as you type. This
+        behavior can be controlled via the <strong>Report problems
+        as you type</strong> option located on the <a class=
+        "command-link" href=
+        'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+        alt="Goto the Java editor preference page" /> <strong>Java
+        > Editor</strong></a> preference page.
+        <p>
+
+          <img src="images/editor_vectortest_problem_hover.png"
+          alt="Error annotations in vertical and overview ruler" />
+        </p>
       </li>
-      <li>
-        Click the <strong>Save</strong> button. The compilation unit is compiled automatically and errors appear in the 
-        Package Explorer view, in the Problems view and on the vertical ruler (left hand side of the editor). In the Package 
-        Explorer view, the errors are propagated up to the project of the compilation unit containing the error.
-		<p>
-		<img src="images/view_package_explorer_vectortest_error.png"  alt="Error propagation in package explorer">
-		</p>
+      <li>Click the <strong>Save</strong> button. The compilation
+      unit is compiled automatically and errors appear in the
+      Package Explorer view, in the Problems view and on the
+      vertical ruler (left hand side of the editor). In the Package
+      Explorer view, the errors are propagated up to the project of
+      the compilation unit containing the error.
+        <p>
+          <img src=
+          "images/view_package_explorer_vectortest_error.png" alt=
+          "Error propagation in package explorer" />
+        </p>
       </li>
-      <li>
-        Complete the new method by typing the following:<br>
-        <p><code>
-          {<br>
-            //TODO: Check size<br>
-        </code></p>
-        Note that the closing curly brace has been inserted automatically.
+
+      <li>Complete the new method by typing the following:<br />
+        <p>
+          <code>{<br />
+            //TODO: Check size<br /></code>
+        </p>Note that the closing curly brace has been inserted
+        automatically.
       </li>
-      <li>
-        Save the file. Notice that the error indicators disappear since the
-        missing brace has been added.
+      <li>Save the file. Notice that the error indicators disappear
+      since the missing brace has been added.
       </li>
+
     </ol>
-    <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-ContentAssist.htm">Using content assist</A>
-</P>
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-ContentAssist.htm">Using content
+      assist</a>
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../images/ngrelc.png" alt=
+      "Related concepts" />
     </p>
     <p>
-       <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
+
+      <a href="../concepts/concept-java-editor.htm">Java
+      editor</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-       <a href="../reference/preferences/java/ref-preferences-editor.htm">Java Editor Preferences</a><br>
+      <a href=
+      "../reference/preferences/java/ref-preferences-editor.htm">Java
+      Editor Preferences</a><br />
     </p>
-    
+
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ContentAssist.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ContentAssist.htm
index 8fac13d..afaf8e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ContentAssist.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ContentAssist.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
@@ -64,7 +64,7 @@
     <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-7.htm">Identifying problems in your code</A>
 </P>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img src="../images/ngrelc.png" alt="Related concepts" >
     </p>
     <p>
        <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-DetectingExistingLayout.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-DetectingExistingLayout.htm
index 73bafa6..58928cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-DetectingExistingLayout.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-DetectingExistingLayout.htm
@@ -1,10 +1,11 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-  <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css"/>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+    <meta http-equiv="Content-Style-Type" content="text/css"/>
     <title>
       Detecting existing layout
     </title>
@@ -18,14 +19,14 @@
     <ul>
 	<li>The source files for a product are laid out in one directory "src".</li>
 	<li>The class files are in another directory "bin".
-	<p><img src="images/qs-DetectingExistingLayout1.png"  alt="Layout on file system"></p></li>
+	<p><img src="images/qs-DetectingExistingLayout1.png"  alt="Layout on file system"/></p></li>
 	</ul>
     <h3>Steps for defining a corresponding project</h3>
     <ol>
     <li>
     	<p>Click 
     	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open Java perspective">
+    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open Java perspective"/>
     	<strong>Window > Open Perspective > Other... > Java</strong></a>
     	to change to the Java perspective.
     	</p>
@@ -34,7 +35,7 @@
 		<p>
 		Click
 		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open new Java project wizard">
+		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open new Java project wizard"/>
 		<strong>File > New > Other... > Java Project</strong></a>
 		to open the <strong>New Java Project</strong> wizard.
 		</p>
@@ -44,19 +45,19 @@
     </li>
     <li>
     	<p>In <strong>Project layout</strong> group, change selection to <strong>Create separate source and output folders</strong>.</p>
-    	<p>In <strong>Contents</strong> group, change selection to <strong>Create project from existing source</strong>.</p>
+    	<p>Deselect <strong>Use default location</strong>.</p>
     	<p>Click <strong>Browse...</strong> and choose the <i><code>Product</code></i> directory on drive <i><code>D:</code></i>.</p>
-		<p><img src="images/qs-DetectingExistingLayout2.png"  alt="New Java Project wizard"></p>
+		<p><img src="images/qs-DetectingExistingLayout2.png"  alt="New Java Project wizard"/></p>
     </li>
     <li>
      	<p>Click <strong>Next</strong>.</p>
      	<p>Ensure that the source and output folders are detected.</p>
-		<p><img src="images/qs-DetectingExistingLayout3.png"  alt="Java Project Source setup"></p>
+		<p><img src="images/qs-DetectingExistingLayout3.png"  alt="Java Project Source setup"/></p>
 		<p>
 			<em>Warning: </em>If the <strong>Scrub output folders when cleaning projects</strong> preference in the
 			<strong>Output folder</strong> section of the
 			<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaBuildPreferencePage)")'>
-			<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the building preference page">
+			<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the building preference page"/>
 			<strong>Java > Compiler > Building</strong></a> preference page
 			is checked, clicking <strong>Finish</strong> will scrub the "bin" directory in the file system before
 			generating the class files.		</p>
@@ -66,7 +67,7 @@
     </li>
     <li>
     	You now have a Java project with a "src" folder which contains the sources of the "Product" directory.
-		<p><img src="images/qs-DetectingExistingLayout4.png"  alt="Created Java project in Workspace"></p>
+		<p><img src="images/qs-DetectingExistingLayout4.png"  alt="Created Java project in Workspace"/></p>
     </li>
 	</ol>
 	<p>
@@ -75,21 +76,21 @@
 		you should use linked folders as shown in the 
 		<a href="qs-WorkingWithExistingLayout1.htm">Sibling products in a common source tree</a> section.
 	</p>
-<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-OrganizingSources.htm">Organizing sources</A>
-</P>
+<p class="nav_footer" id="nav_footer">Next Section: <a href="qs-OrganizingSources.htm">Organizing sources</a>
+</p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img src="../images/ngrelc.png" alt="Related concepts"/>
     </p>
     <p>
-      <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br/>
+      <a href="../concepts/concept-java-views.htm">Java views</a><br/>
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png"  alt="Related reference"/>
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br/>
+       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br/>
     </p>
     
   </body>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-EditorTemplates.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-EditorTemplates.htm
index aa5f38f..51baa4e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-EditorTemplates.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-EditorTemplates.htm
@@ -110,7 +110,7 @@
     <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-OrganizeImports.htm">Organizing import statements</A>
 </P>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img src="../images/ngrelc.png" alt="Related concepts" >
     </p>
     <p>
        <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ExtractMethod.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ExtractMethod.htm
index 717d21f..b52375a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ExtractMethod.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ExtractMethod.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
@@ -16,7 +16,7 @@
     <p>
       In this section, you will improve the code of the constructor of <em>junit.framework.TestSuite</em>. 
       To make the intent of the code clearer, you will extract the code that collects test cases 
-      from base classes into a new method called <em>collectTestMethods</em>.
+      from base classes into a new method called <em>collectInheritedTests</em>.
     </p>
     <ol>
       <li>
@@ -62,7 +62,7 @@
     <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-9.htm">Creating a Java class</A>
 </P>
     <p>
-      <img src="../images/ngrelc.png"  border="0" alt="Related concepts">
+      <img src="../images/ngrelc.png" alt="Related concepts">
     </p>
     <p>
        <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-LocalHistory.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-LocalHistory.htm
index b58d291..20b6474 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-LocalHistory.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-LocalHistory.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
@@ -70,13 +70,13 @@
     <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-ExtractMethod.htm">Extracting a new method</A>
 </P>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img src="../images/ngrelc.png" alt="Related concepts" >
     </p>
     <p>
        <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
     </p>
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0" >
+      <img src="../images/ngrelt.png" alt="Related tasks">
     </p>
     <p>
        <a href="../tasks/tasks-62.htm">Using the local history</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Navigate.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Navigate.htm
index cbd6a43..3593fd6 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Navigate.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Navigate.htm
@@ -1,79 +1,106 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Navigate to a Java element's declaration
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Navigate to a Java element's declaration
     </h1>
-	<p> In this section, you will learn how to open a type in the Java Editor and
-	how to navigate to related types and members. </p>
-	<ol>
-	  <li> Open the <strong>Open Type</strong> dialog by pressing <kbd>Ctrl+Shift+T</kbd>, choosing
-	    <strong>Navigate > Open Type...</strong>, or clicking the toolbar icon
-	    (<img src="../images/org.eclipse.jdt.ui/etool16/opentype.png" alt="Open Type toolbar button">).
-	    Type <kbd>Money</kbd>, press the <kbd>Arrow Down</kbd> key a few times to select
-	    <em>MoneyTest</em>, and then press <kbd>Enter</kbd> to open the type in the Java editor. 
-	    <p>
-	      <img src="images/navigate_opentype.png"  alt="Open Type dialog">
-	    </p>
-	  </li>
-	  <li> On the first line of the <em>MoneyTest</em> class declaration, select the
-	    superclass <em>TestCase</em> and either 
-	    <ul>
-	      <li> from the menu bar select <strong>Navigate > Open Declaration</strong> or </li>
-	      <li> press <kbd>F3</kbd>. </li>
-	    </ul>	    
-		<p>
-	    <img src="images/navigate_opendeclaration.png"  alt="Menu open declaration">
-		</p>
-	    The TestCase class opens in the editor area and is also represented in 
-	    the Outline view. <br><em>Note: This command also works on methods and fields.</em>
-		<p>
-	    <img src="images/editor_testcase.png"  alt="Opened declaration">
-		</p>
-	  </li>
-	  <li> With the <em>TestCase.java</em> editor open and the class declaration
-	    selected: 
-	    <ul>
-	      <li> from the menu bar select <strong>Navigate > Open Type Hierarchy</strong> or </li>
-	      <li> press <kbd>F4</kbd>. </li>
-	    </ul>
-		<p>
-	    <img src="images/navigate_open_typehieracrchy.png"  alt="Menu open type hierarchy">
-		</p>
-	  </li>
-	  <li> 
-	    The Type Hierarchy view opens with the TestCase class displayed.
-		<p>
-	    <img src="images/view_typehierarchy_testcase.png"  alt="Type Hierarchy view">
-		</p>
-	    <em>Note: You can also open editors on types and methods in the Type Hierarchy view.</em> 
-	  </li>
-	</ol>
-	<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-6.htm">Viewing the type hierarchy</A>
-</P>
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0" >
+      In this section, you will learn how to open a type in the Java Editor and
+      how to navigate to related types and members.
+    </p>
+    <ol>
+
+      <li>Open the <strong>Open Type</strong> dialog by pressing
+      <kbd>Ctrl+Shift+T</kbd>, choosing <strong>Navigate > Open
+      Type...</strong>, or clicking the toolbar icon (<img src=
+      "../images/org.eclipse.jdt.ui/etool16/opentype.png" alt=
+      "Open Type toolbar button" />). Type <kbd>Money</kbd>, press the
+      <kbd>Arrow Down</kbd> key a few times to select <em>MoneyTest</em>, and
+      then press <kbd>Enter</kbd> to open the type in the Java editor.
+        <p>
+
+          <img src="images/navigate_opentype.png" alt="Open Type dialog" />
+        </p>
+      </li>
+      <li>On the first line of the <em>MoneyTest</em> class declaration, select
+      the superclass <em>TestCase</em> and either
+        <ul>
+          <li>from the menu bar select <strong>Navigate > Open
+          Declaration</strong> or
+          </li>
+
+          <li>press <kbd>F3</kbd>.
+          </li>
+        </ul>
+        <p>
+          <img src="images/navigate_opendeclaration.png" alt=
+          "Menu open declaration" />
+        </p>The TestCase class opens in the editor area and is also represented
+        in the Outline view.<br />
+        <em>Note: This command also works on methods and fields.</em>
+
+        <p>
+          <img src="images/editor_testcase.png" alt="Opened declaration" />
+        </p>
+      </li>
+      <li>With the <em>TestCase.java</em> editor open and the class declaration
+      selected:
+        <ul>
+          <li>from the menu bar select <strong>Navigate > Open Type
+          Hierarchy</strong> or
+          </li>
+
+          <li>press <kbd>F4</kbd>.
+          </li>
+        </ul>
+        <p>
+          <img src="images/navigate_open_typehieracrchy.png" alt=
+          "Menu open type hierarchy" />
+        </p>
+      </li>
+      <li>The Type Hierarchy view opens with the TestCase class displayed.
+        <p>
+
+          <img src="images/view_typehierarchy_testcase.png" alt=
+          "Type Hierarchy view" />
+        </p><em>Note: You can also open editors on types and methods in the
+        Type Hierarchy view.</em>
+      </li>
+    </ol>
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-6.htm">Viewing the type hierarchy</a>
+    </p>
+
+    <p>
+      <img src="../images/ngrelt.png" alt="Related tasks" border="0" />
     </p>
     <p>
-       <a href="../tasks/tasks-73.htm">Opening an editor for a selected element</a><br>
+      <a href="../tasks/tasks-73.htm">Opening an editor for a selected
+      element</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
+
     </p>
     <p>
-       <a href="../reference/views/ref-type-hierarchy.htm">Type Hierarchy View</a><br>
+      <a href="../reference/views/ref-type-hierarchy.htm">Type Hierarchy
+      View</a><br />
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OpenJavaEditor.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OpenJavaEditor.htm
index 8473541..73774ca 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OpenJavaEditor.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OpenJavaEditor.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
@@ -71,7 +71,7 @@
 	<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-Quickviews.htm">Using quick views</A>
 </P>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img src="../images/ngrelc.png" alt="Related concepts" >
     </p>
     <p>
       <a href="../concepts/concept-java-views.htm">Java views</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizeImports.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizeImports.htm
index 8a04ef7..405b1e7 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizeImports.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizeImports.htm
@@ -1,68 +1,80 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Organizing import statements
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Organizing import statements
     </h1>
     <p>
-      In this section you will organize the import declarations in your
-      source code.  Open <em>junit.samples/VectorTest.java</em> file in the Java
+      In this section you will organize the import declarations in your source
+      code.  Open <em>junit.samples/VectorTest.java</em> file in the Java
       editor if you do not already have it open.
     </p>
+
     <ol>
-      <li>
-        Delete the import declarations by selecting them in the Outline view and selecting 
-        <strong>Delete</strong> from the context menu. Confirm the resulting dialog with
-        <strong>Yes</strong>.
-        You will see numerous compiler warnings in the vertical ruler since the
-        types used in the method are no longer imported.
-		<p>
-		<img src="images/view_outline_delete_import.png"  alt="Outline view context menu">
-		</p>
+      <li>Delete the import declarations by selecting them in the Outline view
+      and selecting <strong>Delete</strong> from the context menu. Confirm the
+      resulting dialog with <strong>Yes</strong>. You will see numerous
+      compiler warnings in the vertical ruler since the types used in the
+      method are no longer imported.
+        <p>
+          <img src="images/view_outline_delete_import.png" alt=
+          "Outline view context menu" />
+        </p>
       </li>
-      <li>
-        From the context menu in the editor, select <strong>Source > Organize Imports</strong>. The required import statements are added to the beginning of your code below the package
-        declaration.
-		<p>
-		<img src="images/editor_vectortest_organized_imports.png"  alt="Organize imports">
-		</p>
-        You can also choose <strong>Organize Imports</strong> from the context menu of the
-        import declarations in the Outline view.<br>
+      <li>From the context menu in the editor, select <strong>Source >
+
+      Organize Imports</strong>. The required import statements are added to
+      the beginning of your code below the package declaration.
+        <p>
+          <img src="images/editor_vectortest_organized_imports.png" alt=
+          "Organize imports" />
+        </p>You can also choose <strong>Organize Imports</strong> from the
+        context menu of the import declarations in the Outline view.<br />
         Note: You can specify the order of the import declarations using the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ImportOrganizePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Goto the organize imports preference page">
-        <strong>Java > Code Style > Organize Imports</strong></a>
-        preference page.
+        <a class="command-link" href=
+        'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ImportOrganizePreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Goto the organize imports preference page" /> <strong>Java > Code
+        Style > Organize Imports</strong></a> preference page.
       </li>
-      <li>
-        Save the file.
+
+      <li>Save the file.
       </li>
     </ol>
-    <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-LocalHistory.htm">Using the local history</A>
-</P>
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-LocalHistory.htm">Using the local history</a>
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+
     </p>
     <p>
-       <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
+      <a href="../concepts/concept-java-editor.htm">Java editor</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-       <a href="../reference/preferences/java/codestyle/ref-preferences-organize-imports.htm">Organize Imports Preferences</a><br>
+
+      <a href=
+      "../reference/preferences/java/codestyle/ref-preferences-organize-imports.htm">
+      Organize Imports Preferences</a><br />
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizingSources.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizingSources.htm
index 64e6321..1bd6f38 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizingSources.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-OrganizingSources.htm
@@ -1,101 +1,160 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Organizing sources
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Organizing sources
     </h1>
-
-    <h3>Layout on file system</h3>
+    <h3>
+      Layout on file system
+    </h3>
     <ul>
-    <li>
-		In this section, you will create a new Java project and organize your sources in separate folders. This will 
-		prepare you for handling more complex layouts.
-    </li>
-	<li>Let's assume you want to put your sources in one folder and your tests in another folder:
-	<p><img src="images/qs-OrganizeSources1.png"  alt="Layout on file system"></p></li>
-	</ul>
-    <h3>Steps for defining a corresponding project</h3>
+
+      <li>In this section, you will create a new Java project and organize your
+      sources in separate folders. This will prepare you for handling more
+      complex layouts.
+      </li>
+      <li>Let's assume you want to put your sources in one folder and your
+      tests in another folder:
+        <p>
+          <img src="images/qs-OrganizeSources1.png" alt=
+          "Layout on file system" />
+        </p>
+      </li>
+    </ul>
+    <h3>
+      Steps for defining a corresponding project
+    </h3>
+
     <ol>
-    <li>
-    	<p>Click 
-    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open Java perspective">
-    	<strong>Window > Open Perspective > Other... > Java</strong></a>
-    	to change to the Java perspective.
-    	</p>
-    </li>
-	<li>
-		<p>
-		Click
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the New Java Project wizard">
-		<strong>File > New > Other... > Java Project</strong></a>
-		to open the <strong>New Java Project</strong> wizard.
-		</p>
-	</li>
-    <li>
-    	<p>Type "MyProject" in the <strong>Project name</strong> field.</p>
-    </li>
-    <li>
-    	<p>In <strong>Project layout</strong> group, change selection to <strong>Create separate source and output folders</strong>
-    	and edit <strong>Configure default...</strong> to modify <strong>Source folder name</strong> from "src" to "sources".</p>
-		<p><img src="images/qs-OrganizeSources2.png"  alt="Build Path Preferences page"></p>
-    </li>
-    <li>
-    	Click <strong>OK</strong> to return on New Java Project wizard and then click <strong>Next</strong>.
-		<p><img src="images/qs-OrganizeSources3.png"  alt="Java Project Source setup"></p>
-	</li>
-    <li>
-		<p>To add another source folder to your project, click <strong>Create new source folder</strong> link in <strong>Details</strong> pane
-		or button <img src="images/packagefolder_obj.png" alt="Create a new Source Folder for the Project"> in view bar.</p>
-	</li>
-	<li>
-		<p>In <strong>New Source Folder</strong> dialog, type "tests" in the <strong>Folder name</strong> field.</p>
-    	<p><img src="images/qs-OrganizeSources4.png"  alt="New Source Folder dialog"></p>
-    </li>
-	<li>
-		Click <strong>Finish</strong> to validate and close the dialog.
-	</li>
-    <li>
-    	<p>Your project setup now looks as follows:</p>
-	    <p><img src="images/qs-OrganizeSources5.png"  alt="Java Project Sources final setup"></p>
-    </li>
-    <li>
-    	Click <strong>Finish</strong>
-    </li>
-    <li>
-    	You now have a Java project with two source folders: <i><code>sources</code></i> and <i><code>tests</code></i>. You can start adding classes
-    	to these folders or you can copy them using drag and drop.
-	    <p><img src="images/qs-OrganizeSources6.png"  alt="Created Java project in Workspace"></p>
-    </li>
-	</ol>    
-	<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-WorkingWithExistingLayout1.htm">Sibling products in a common source tree</A>
-</P>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Open Java perspective" /> <strong>Window > Open Perspective >
+          Other... > Java</strong></a> to change to the Java perspective.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the New Java Project wizard" /> <strong>File > New >
+          Other... > Java Project</strong></a> to open the <strong>New Java
+          Project</strong> wizard.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Type "MyProject" in the <strong>Project name</strong> field.
+        </p>
+      </li>
+      <li>
+        <p>
+
+          In <strong>Project layout</strong> group, change selection to
+          <strong>Create separate source and output folders</strong> and edit
+          <strong>Configure default...</strong> to modify <strong>Source folder
+          name</strong> from "src" to "sources".
+        </p>
+        <p>
+
+          <img src="images/qs-OrganizeSources2.png" alt=
+          "Build Path Preferences page" />
+        </p>
+      </li>
+      <li>Click <strong>OK</strong> to return on New Java Project wizard and
+      then click <strong>Next</strong>.
+        <p>
+          <img src="images/qs-OrganizeSources3.png" alt=
+          "Java Project Source setup" />
+        </p>
+
+      </li>
+      <li>
+        <p>
+          To add another source folder to your project, click <strong>Create
+          new source folder</strong> link in <strong>Details</strong> pane or
+          button <img src="images/packagefolder_obj.png" alt=
+          "Create a new Source Folder for the Project" /> in view bar.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          In <strong>New Source Folder</strong> dialog, type "tests" in the
+          <strong>Folder name</strong> field.
+        </p>
+        <p>
+
+          <img src="images/qs-OrganizeSources4.png" alt=
+          "New Source Folder dialog" />
+        </p>
+      </li>
+      <li>Click <strong>Finish</strong> to validate and close the dialog.
+      </li>
+      <li>
+        <p>
+          Your project setup now looks as follows:
+        </p>
+
+        <p>
+          <img src="images/qs-OrganizeSources5.png" alt=
+          "Java Project Sources final setup" />
+        </p>
+      </li>
+      <li>Click <strong>Finish</strong>
+      </li>
+      <li>You now have a Java project with two source folders:
+      <i><code>sources</code></i> and <i><code>tests</code></i>. You can start
+      adding classes to these folders or you can copy them using drag and drop.
+        <p>
+
+          <img src="images/qs-OrganizeSources6.png" alt=
+          "Created Java project in Workspace" />
+        </p>
+      </li>
+    </ol>
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-WorkingWithExistingLayout1.htm">Sibling
+      products in a common source tree</a>
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-      <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
+
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project
+      Wizard</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer View</a><br />
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ProjectConfiguration.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ProjectConfiguration.htm
index 9e3b778..4b13100 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ProjectConfiguration.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-ProjectConfiguration.htm
@@ -21,7 +21,7 @@
 <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-DetectingExistingLayout.htm">Detecting existing layout</A>
 </P>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img src="../images/ngrelc.png" alt="Related concepts" >
     </p>
     <p>
       <a href="../concepts/concept-java-project.htm">Java projects</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Quickviews.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Quickviews.htm
index 58dc3e4..65dd17f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Quickviews.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-Quickviews.htm
@@ -25,7 +25,8 @@ you will see an in-place outline of the current source file. <br>
 <img src="images/editor_vectortest_quickoutline.png" alt="Quick outline of VectorTest"> </li>
 
 <li>Press <kbd>Ctrl+O</kbd> a second time and all inherited fields, 
-types and methods are shown as well. Inherited members are shown in grey. </li>
+types and methods are shown as well (for the types marked with <img src="../images/org.eclipse.jdt.ui/ovr16/focus_ovr.png" alt="Triangle"> on the left).
+Inherited members are shown in blue. </li>
 
 <li>Start typing while the quick outline view is shown to filter the list of displayed elements.
 Further, use the arrow keys to navigate in the outline view
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout1.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout1.htm
index 6c8faf5..03dee21 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout1.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout1.htm
@@ -1,93 +1,165 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Sibling products in a common source tree
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Sibling products in a common source tree
     </h1>
-    <h3>Layout on file system</h3>
+    <h3>
+      Layout on file system
+    </h3>
     <ul>
-	<li>The source files for products are laid out in one big directory that is version and configuration managed outside Eclipse.</li>
-	<li>The source directory contains two siblings directories <i><code>Product1</code></i> and <i><code>Product2</code></i>.
-	<p><img src="images/qs-WorkingWithExistingLayout10.png"  alt="Layout on file system"></p></li>
-	</ul>
-    <h3>Steps for defining corresponding projects</h3>
+
+      <li>The source files for products are laid out in one big directory that
+      is version and configuration managed outside Eclipse.
+      </li>
+      <li>The source directory contains two siblings directories
+      <i><code>Product1</code></i> and <i><code>Product2</code></i>.
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout10.png" alt=
+          "Layout on file system" />
+        </p>
+      </li>
+
+    </ul>
+    <h3>
+      Steps for defining corresponding projects
+    </h3>
     <ol>
-	<li>
-    	<p>Click 
-    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java perspective">
-    	<strong>Window > Open Perspective > Other... > Java</strong></a>
-    	to change to the Java perspective.
-    	</p>
-    </li>
-	<li>
-		<p>
-		Click
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the New Java Project wizard">
-		<strong>File > New > Other... > Java Project</strong></a>
-		to open the <strong>New Java Project</strong> wizard.
-		</p>
-	</li>
-    <li>
-    	<p>Type "Product1" in the <strong>Project name</strong> field. Click <strong>Next</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout11.png"  alt="New Java Project wizard"></p>
-	</li>
-	<li>
-		<p>On the next page, Select "Product1" source folder.</p>
-		<p>Click <strong>Link additional source</strong> link in <strong>Details</strong> pane
-		or button <img src="images/add_linked_source_to_buildpath.png" alt="Link Additional Source to Project"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout12.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Link Source</strong> dialog click <strong>Browse....</strong> and choose the <i><code>D:\AllProducts\Product1\JavaSourceFiles</code></i> directory.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout13.png"  alt="Link Source dialog"></p>
-	</li>
-	<li>
-		Click <strong>Finish</strong> to validate and close the dialog.
-	</li>
-	<li>
-		<p>Your project source setup now looks as follows:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout14.png"  alt="Java Project Source final setup"></p>
-	</li>
-    <li>
-    	<p>Click <strong>Finish</strong>.</p>
-    </li>
-    <li>
-    	<p>Repeat steps 2 to 8 for  "Product2".</p>
-    </li>
-    <li>
-    	<p>You now have two Java projects which respectively contain the sources of "Product1" and "Product2".</p>
-		<p><img src="images/qs-WorkingWithExistingLayout15.png"  alt="Created Java projects in Workspace"></p>
-    </li>
-	</ol>
-<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-WorkingWithExistingLayout2.htm">Overlapping products in a common source tree</A>
-</P>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the Java perspective" /> <strong>Window > Open Perspective
+          > Other... > Java</strong></a> to change to the Java
+          perspective.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the New Java Project wizard" /> <strong>File > New >
+          Other... > Java Project</strong></a> to open the <strong>New Java
+          Project</strong> wizard.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Type "Product1" in the <strong>Project name</strong> field. Click
+          <strong>Next</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout11.png" alt=
+          "New Java Project wizard" />
+
+        </p>
+      </li>
+      <li>
+        <p>
+          On the next page, Select "Product1" source folder.
+        </p>
+        <p>
+          Click <strong>Link additional source</strong> link in
+          <strong>Details</strong> pane or button <img src=
+          "images/add_linked_source_to_buildpath.png" alt=
+          "Link Additional Source to Project" /> in view bar.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout12.png" alt=
+          "Java Project Source setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Link Source</strong> dialog click
+          <strong>Browse....</strong> and choose the
+          <i><code>D:\AllProducts\Product1\JavaSourceFiles</code></i>
+
+          directory.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout13.png" alt=
+          "Link Source dialog" />
+        </p>
+      </li>
+      <li>Click <strong>Finish</strong> to validate and close the dialog.
+      </li>
+
+      <li>
+        <p>
+          Your project source setup now looks as follows:
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout14.png" alt=
+          "Java Project Source final setup" />
+        </p>
+      </li>
+      <li>
+
+        <p>
+          Click <strong>Finish</strong>.
+        </p>
+      </li>
+      <li>
+        <p>
+          Repeat steps 2 to 8 for "Product2".
+        </p>
+      </li>
+
+      <li>
+        <p>
+          You now have two Java projects which respectively contain the sources
+          of "Product1" and "Product2".
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout15.png" alt=
+          "Created Java projects in Workspace" />
+        </p>
+      </li>
+    </ol>
+
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-WorkingWithExistingLayout2.htm">Overlapping
+      products in a common source tree</a>
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-      <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project
+      Wizard</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer View</a><br />
+
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout2.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout2.htm
index e045c6d..b5140dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout2.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout2.htm
@@ -1,114 +1,233 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Overlapping products in a common source tree
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Overlapping products in a common source tree
     </h1>
-    <h3>Layout on file system</h3>
+    <h3>
+      Layout on file system
+    </h3>
     <ul>
-	<li>The Java source files for products are all held in a single main directory.</li>
-	<li>Products are separated into four siblings packages <i><code>Product1</code></i>, <i><code>Product2</code></i>, <i><code>Product3</code></i> and <i><code>Product4</code></i>.
-	<p><img src="images/qs-WorkingWithExistingLayout20.png"  alt="Layout on file system"></p></li>
-	</ul>
-    <h3>Steps for defining corresponding "Product1" and "Product2" projects</h3>
+
+      <li>The Java source files for products are all held in a single main
+      directory.
+      </li>
+      <li>Products are separated into four siblings packages
+      <i><code>Product1</code></i>, <i><code>Product2</code></i>,
+      <i><code>Product3</code></i> and <i><code>Product4</code></i>.
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout20.png" alt=
+          "Layout on file system" />
+
+        </p>
+      </li>
+    </ul>
+    <h3>
+      Steps for defining corresponding "Product1" and "Product2" projects
+    </h3>
     <ol>
-	<li>
-    	<p>Click 
-    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java perspective">
-    	<strong>Window > Open Perspective > Other... > Java</strong></a>
-    	to change to the Java perspective.
-    	</p>
-    </li>
-	<li>
-		<p>
-		Click
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the New Java Project wizard">
-		<strong>File > New > Other... > Java Project</strong></a>
-		to open the <strong>New Java Project</strong> wizard.
-		</p>
-	</li>
-    <li>
-    	<p>Type "Product1" in the <strong>Project name</strong> field. Click <strong>Next</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout21.png"  alt="New Java Project wizard"></p>
-	</li>
-	<li>
-		<p>On the next page, Select "Product1" source folder.</p>
-		<p>Click <strong>Link additional source</strong> link in <strong>Details</strong> pane or button <img src="images/add_linked_source_to_buildpath.png" alt="Link Additional Source to Project"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout22.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Link Source</strong> click <strong>Browse....</strong> and choose the <i><code>D:\AllJavaSourceFiles</code></i> directory.</p>
-		<p>Type "src" in <strong>Folder name</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout23.png"  alt="Link Source dialog"></p>
-	</li>
-	<li>
-		<p>Click <strong>Finish</strong> to validate and close the dialog.</p>
-	</li>
-	<li>
-		<p>Expand the "src" source folder. Select the three last packages and exclude them from build path
-		using either <strong>Exclude from build path</strong> link or <strong>Exclude</strong> popup-menu item.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout24.png"  alt="Exclude packages from build path"></p>
-	</li>
-	<li>
-		<p>Your project source setup now looks as follows:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout25.png"  alt="Java Project Source final setup"></p>
-	</li>
-	<li>
-    	<p>Click <strong>Finish</strong>.</p>
-	</li>
-    <li>
-    	<p>Copy "Product1" project and paste it as "Product2".</p>
-    	<p>Edit "Product2" project properties and go on <strong>Java Build Path</strong> page.</p>
-    	<p>In <strong>Source</strong> tab, expand "Product2/src" source folder, select <strong>Excluded</strong> and click <strong>Edit...</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout26.png"  alt="Java Build Path Properties Source tab"></p>
-    </li>
-    <li>
-    	<p>In <strong>Inclusion and Exclusion Patterns</strong>, select "com/xyz/product2" and click <strong>Edit...</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout27.png"  alt="Inclusion and Exclusion Patterns dialog"></p>
-    </li>
-    <li>
-    	<p>Change "com/xyz/product2" to "com/xyz/product1".</p>
-		<p><img src="images/qs-WorkingWithExistingLayout28.png"  alt="Edit Exclusion Pattern dialog"></p>
-    </li>
-    <li>
-		<p>Click <strong>OK</strong> to enter the change.</p>
-		<p>Click <strong>Finish</strong> to validate and close <strong>Inclusion and Exclusion Patterns</strong> dialog.</p>
-		<p>Click <strong>OK</strong> again to validate "Product2" project properties changes.</p>
-    </li>
-    <li>
-    	<p>You now have two Java projects which respectively contain the sources of "product1", "product2".</p>
-		<p><img src="images/qs-WorkingWithExistingLayout29.png"  alt="Created Java projects in Workspace"></p>
-    </li>
-	</ol>
-		<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-WorkingWithExistingLayout3.htm">Product with nested tests</A>
-</P>
+      <li>
+        <p>
+
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the Java perspective" /> <strong>Window > Open Perspective
+          > Other... > Java</strong></a> to change to the Java
+          perspective.
+        </p>
+      </li>
+
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the New Java Project wizard" /> <strong>File > New >
+          Other... > Java Project</strong></a> to open the <strong>New Java
+          Project</strong> wizard.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Type "Product1" in the <strong>Project name</strong> field. Click
+          <strong>Next</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout21.png" alt=
+          "New Java Project wizard" />
+
+        </p>
+      </li>
+      <li>
+        <p>
+          On the next page, Select "Product1" source folder.
+        </p>
+        <p>
+          Click <strong>Link additional source</strong> link in
+          <strong>Details</strong> pane or button <img src=
+          "images/add_linked_source_to_buildpath.png" alt=
+          "Link Additional Source to Project" /> in view bar.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout22.png" alt=
+          "Java Project Source setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Link Source</strong> click <strong>Browse....</strong> and
+          choose the <i><code>D:\AllJavaSourceFiles</code></i> directory.
+        </p>
+
+        <p>
+          Type "src" in <strong>Folder name</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout23.png" alt=
+          "Link Source dialog" />
+        </p>
+      </li>
+      <li>
+
+        <p>
+          Click <strong>Finish</strong> to validate and close the dialog.
+        </p>
+      </li>
+      <li>
+        <p>
+          Expand the "src" source folder. Select the three last packages and
+          exclude them from build path using either <strong>Exclude from build
+          path</strong> link or <strong>Exclude</strong> popup-menu item.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout24.png" alt=
+          "Exclude packages from build path" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Your project source setup now looks as follows:
+        </p>
+        <p>
+
+          <img src="images/qs-WorkingWithExistingLayout25.png" alt=
+          "Java Project Source final setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Click <strong>Finish</strong>.
+        </p>
+      </li>
+
+      <li>
+        <p>
+          Copy "Product1" project and paste it as "Product2".
+        </p>
+        <p>
+          Edit "Product2" project properties and go on <strong>Java Build
+          Path</strong> page.
+        </p>
+        <p>
+
+          In <strong>Source</strong> tab, expand "Product2/src" source folder,
+          select <strong>Excluded</strong> and click <strong>Edit...</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout26.png" alt=
+          "Java Build Path Properties Source tab" />
+        </p>
+
+      </li>
+      <li>
+        <p>
+          In <strong>Inclusion and Exclusion Patterns</strong>, select
+          "com/xyz/product2" and click <strong>Edit...</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout27.png" alt=
+          "Inclusion and Exclusion Patterns dialog" />
+
+        </p>
+      </li>
+      <li>
+        <p>
+          Change "com/xyz/product2" to "com/xyz/product1".
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout28.png" alt=
+          "Edit Exclusion Pattern dialog" />
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <strong>OK</strong> to enter the change.
+        </p>
+        <p>
+          Click <strong>Finish</strong> to validate and close <strong>Inclusion
+          and Exclusion Patterns</strong> dialog.
+        </p>
+
+        <p>
+          Click <strong>OK</strong> again to validate "Product2" project
+          properties changes.
+        </p>
+      </li>
+      <li>
+        <p>
+          You now have two Java projects which respectively contain the sources
+          of "product1", "product2".
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout29.png" alt=
+          "Created Java projects in Workspace" />
+        </p>
+      </li>
+    </ol>
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-WorkingWithExistingLayout3.htm">Product with
+      nested tests</a>
+    </p>
+
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-      <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project
+      Wizard</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer View</a><br />
     </p>
-    
   </body>
 </html>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout3.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout3.htm
index 5545c02..d7f8dab 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout3.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout3.htm
@@ -1,97 +1,172 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Product with nested tests
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Product with nested tests
     </h1>
-    <h3>Layout on file system</h3>
+    <h3>
+      Layout on file system
+    </h3>
     <ul>
-	<li>The Java source files for a product are laid out in a package directory.</li>
-	<li>Source files of tests are laid out in a nested package directory.
-	<p><img src="images/qs-WorkingWithExistingLayout30.png"  alt="Layout on file system"></p></li>
-	</ul>
-    <h3>Steps for defining a corresponding project</h3>
+
+      <li>The Java source files for a product are laid out in a package
+      directory.
+      </li>
+      <li>Source files of tests are laid out in a nested package directory.
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout30.png" alt=
+          "Layout on file system" />
+        </p>
+      </li>
+    </ul>
+    <h3>
+      Steps for defining a corresponding project
+    </h3>
+
     <ol>
-	<li>
-    	<p>Click 
-    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java perspective">
-    	<strong>Window > Open Perspective > Other... > Java</strong></a>
-    	to change to the Java perspective.
-    	</p>
-    </li>
-	<li>
-		<p>
-		Click
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the New Java Project wizard">
-		<strong>File > New > Other... > Java Project</strong></a>
-		to open the <strong>New Java Project</strong> wizard.
-		</p>
-	</li>
-    <li>
-    	<p>Type "Product1" in the <strong>Project name</strong> field. Click <strong>Next</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout31.png"  alt="New Java Project wizard"></p>
-	</li>
-	<li>
-		<p>On the next page, Select "Product1" source folder.</p>
-		<p>Click <strong>Link additional source</strong> link in <strong>Details</strong> pane or button <img src="images/add_linked_source_to_buildpath.png" alt="Link Additional Source to Project"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout32.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Link Source</strong> click <strong>Browse....</strong> and choose the <i><code>D:\Product1\JavaSourceFiles</code></i> directory.</p>
-		<p>Type "src" in the <strong>Folder name</strong> field.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout33.png"  alt="Link Source dialog"></p>
-	</li>
-	<li>
-		<p>Click <strong>Finish</strong> to validate and close the dialog.</p>
-	</li>
-	<li>
-		<p>Expand the "src" source folder. Select the empty package "tests"
-		and set it as source folder using either <strong>Use as Source Folder</strong> popup-menu item
-		or button <img src="images/add_as_source_folder.png" alt="Use as Source Folder"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout34.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>Your project source setup now looks as follows:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout35.png"  alt="Java Project Source final setup"></p>
-	</li>
-    <li>
-    	Click <strong>Finish</strong>.
-    </li>
-    <li>
-    	You now have a Java project with two source folders: "src" and "src/tests" which contain respectively 
-    	the <i><code>D:\Product1\JavaSourceFiles</code></i> directory and the <i><code>D:\Product1\JavaSourceFiles\tests</code></i> directory.
-		<p><img src="images/qs-WorkingWithExistingLayout36.png"  alt="Created Java project in Workspace"></p>
-    </li>
-	</ol>
-<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-WorkingWithExistingLayout4.htm">Products sharing a common source framework</A>
-</P>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the Java perspective" /> <strong>Window > Open Perspective
+          > Other... > Java</strong></a> to change to the Java
+          perspective.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the New Java Project wizard" /> <strong>File > New >
+          Other... > Java Project</strong></a> to open the <strong>New Java
+          Project</strong> wizard.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Type "Product1" in the <strong>Project name</strong> field. Click
+          <strong>Next</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout31.png" alt=
+          "New Java Project wizard" />
+
+        </p>
+      </li>
+      <li>
+        <p>
+          On the next page, Select "Product1" source folder.
+        </p>
+        <p>
+          Click <strong>Link additional source</strong> link in
+          <strong>Details</strong> pane or button <img src=
+          "images/add_linked_source_to_buildpath.png" alt=
+          "Link Additional Source to Project" /> in view bar.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout32.png" alt=
+          "Java Project Source setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Link Source</strong> click <strong>Browse....</strong> and
+          choose the <i><code>D:\Product1\JavaSourceFiles</code></i> directory.
+        </p>
+
+        <p>
+          Type "src" in the <strong>Folder name</strong> field.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout33.png" alt=
+          "Link Source dialog" />
+        </p>
+      </li>
+      <li>
+
+        <p>
+          Click <strong>Finish</strong> to validate and close the dialog.
+        </p>
+      </li>
+      <li>
+        <p>
+          Expand the "src" source folder. Select the empty package "tests" and
+          set it as source folder using either <strong>Use as Source
+          Folder</strong> popup-menu item or button <img src=
+          "images/add_as_source_folder.png" alt="Use as Source Folder" /> in
+          view bar.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout34.png" alt=
+          "Java Project Source setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Your project source setup now looks as follows:
+        </p>
+        <p>
+
+          <img src="images/qs-WorkingWithExistingLayout35.png" alt=
+          "Java Project Source final setup" />
+        </p>
+      </li>
+      <li>Click <strong>Finish</strong>.
+      </li>
+      <li>You now have a Java project with two source folders: "src" and
+      "src/tests" which contain respectively the
+      <i><code>D:\Product1\JavaSourceFiles</code></i> directory and the
+      <i><code>D:\Product1\JavaSourceFiles\tests</code></i> directory.
+        <p>
+
+          <img src="images/qs-WorkingWithExistingLayout36.png" alt=
+          "Created Java project in Workspace" />
+        </p>
+      </li>
+    </ol>
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-WorkingWithExistingLayout4.htm">Products
+      sharing a common source framework</a>
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-      <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
+
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project
+      Wizard</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer View</a><br />
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout4.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout4.htm
index 03c1206..bec87db 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout4.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout4.htm
@@ -1,127 +1,254 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Products sharing a common source framework
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Products sharing a common source framework
     </h1>
-    <h3>Layout on file system</h3>
+    <h3>
+      Layout on file system
+    </h3>
     <ul>
-	<li>The Java source files for two products require a common framework.</li>
-	<li>Projects and common framework are in separate directories which have their own source and output folders.
-	<p><img src="images/qs-WorkingWithExistingLayout40.png"  alt="Layout on file system"></p></li>
-	</ul>
-    <h3>Steps for defining corresponding projects</h3>
-	<ol>
-	<li>
-    	<p>Click 
-    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java perspective">
-    	<strong>Window > Open Perspective > Other... > Java</strong></a>
-    	to change to the Java perspective.
-    	</p>
-    </li>
-	<li>
-		<p>
-		Click
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the New Java Project wizard">
-		<strong>File > New > Other... > Java Project</strong></a>
-		to open the <strong>New Java Project</strong> wizard.
-		</p>
-	</li>
-    <li>
-    	<p>Type "Product1" in the <strong>Project name</strong> field. Click <strong>Next</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout41.png"  alt="New Java Project wizard"></p>
-	</li>
-	<li>
-		<p>On the next page, Select "Product1" source folder.</p>
-		<p>Click <strong>Link additional source</strong> link in <strong>Details</strong> pane or button <img src="images/add_linked_source_to_buildpath.png" alt="Link Additional Source to Project"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout42.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Link Source</strong> click <strong>Browse....</strong> and choose the <i><code>D:\Product1\JavaSourceFiles</code></i> directory.</p>
-		<p>Type "src" in the <strong>Folder name</strong> field.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout43.png"  alt="Link Source dialog"></p>
-	</li>
-	<li>
-		<p>Click <strong>Finish</strong> to validate and close the dialog.</p>
-	</li>
-	<li>
-		<p>Again, Select "Product1" and click <strong>Link additional source</strong> link in <strong>Details</strong> pane or button <img src="images/add_linked_source_to_buildpath.png" alt="Link Additional Source to Project"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout44.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Link Source</strong> click <strong>Browse....</strong> and choose the <i><code>D:\Framework\JavaSourceFiles</code></i> directory.</p>
-		<p>Type "src-common" in the <strong>Folder name</strong> field.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout45.png"  alt="Link Source dialog"></p>
-	</li>
-	<li>
-		<p>Click <strong>Finish</strong> to validate and close the dialog.</p>
-		<p>Your project source setup now looks as follows:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout46.png"  alt="Java Project Source final setup"></p>
-	</li>
-    <li>
-    	Click <strong>Finish</strong>.
-    </li>
-    <li>
-    	<p>Create project "Product2" repeating steps 2 to 5 choosing <i><code>D:\Product2\JavaSourceFiles</code></i>
-    	directory for source folder instead.</p>
-    </li>
-    <li>
-    	<p>Click on <strong>Finish</strong> to create the project immediately.</p>
-    </li>
-    <li>
-    	<p>Now, we'll see how to add a linked source folder when project is already created in workspace...</p>
-    	<p>Edit project "Product2" properties and select <strong>Java Builder Path</strong> page.</p>
-		<p>On <strong>Source</strong> tab, click <strong>Link Source...</strong>.</p>
-    	<p><img src="images/qs-WorkingWithExistingLayout47.png"  alt="Java Build Path Properties Source tab"></p>
-    </li>
-	<li>
-		<p>In <strong>Link Source</strong> click <strong>Browse....</strong> and choose the <i><code>D:\Framework\JavaSourceFiles</code></i> directory.</p>
-		<p>Type "src-common" in the <strong>Folder name</strong> field.</p>
-    	<p><img src="images/qs-WorkingWithExistingLayout48.png"  alt="Link Source dialog"></p>
-    </li>
-	<li>
-		<p>Click <strong>Finish</strong> to validate and close the dialog.</p>
-    	<p>Click <strong>OK</strong> to apply project "Product2" properties changes.</p>
-	</li>
-    <li>
-    	You now have two Java projects which respectively contain the sources of "Product1" and "Product2"
-    	and which are using the sources of "Framework".
-		<p><img src="images/qs-WorkingWithExistingLayout49.png"  alt="Created Java projects in Workspace"></p>
-    </li>
-	</ol>
-	<em>Note: </em>Files in "src-common" are shared. So editing "Common.java" in "Product1"
-	will modify "Common.java" in "Product2". However they are compiled in the context of their
-	respective projects. Two "Common.class" files will be generated; one for each project. If the two projects have 
-	different compiler options, then different errors could be reported on each "Common.java" file.
-	<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-WorkingWithExistingLayout5.htm">Product nesting resources in output directory</A>
-</P>
+
+      <li>The Java source files for two products require a common framework.
+      </li>
+      <li>Projects and common framework are in separate directories which have
+      their own source and output folders.
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout40.png" alt=
+          "Layout on file system" />
+        </p>
+      </li>
+    </ul>
+    <h3>
+      Steps for defining corresponding projects
+    </h3>
+
+    <ol>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the Java perspective" /> <strong>Window > Open Perspective
+          > Other... > Java</strong></a> to change to the Java
+          perspective.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the New Java Project wizard" /> <strong>File > New >
+          Other... > Java Project</strong></a> to open the <strong>New Java
+          Project</strong> wizard.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Type "Product1" in the <strong>Project name</strong> field. Click
+          <strong>Next</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout41.png" alt=
+          "New Java Project wizard" />
+
+        </p>
+      </li>
+      <li>
+        <p>
+          On the next page, Select "Product1" source folder.
+        </p>
+        <p>
+          Click <strong>Link additional source</strong> link in
+          <strong>Details</strong> pane or button <img src=
+          "images/add_linked_source_to_buildpath.png" alt=
+          "Link Additional Source to Project" /> in view bar.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout42.png" alt=
+          "Java Project Source setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Link Source</strong> click <strong>Browse....</strong> and
+          choose the <i><code>D:\Product1\JavaSourceFiles</code></i> directory.
+        </p>
+
+        <p>
+          Type "src" in the <strong>Folder name</strong> field.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout43.png" alt=
+          "Link Source dialog" />
+        </p>
+      </li>
+      <li>
+
+        <p>
+          Click <strong>Finish</strong> to validate and close the dialog.
+        </p>
+      </li>
+      <li>
+        <p>
+          Again, Select "Product1" and click <strong>Link additional
+          source</strong> link in <strong>Details</strong> pane or button
+          <img src="images/add_linked_source_to_buildpath.png" alt=
+          "Link Additional Source to Project" /> in view bar.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout44.png" alt=
+          "Java Project Source setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Link Source</strong> click <strong>Browse....</strong> and
+          choose the <i><code>D:\Framework\JavaSourceFiles</code></i>
+
+          directory.
+        </p>
+        <p>
+          Type "src-common" in the <strong>Folder name</strong> field.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout45.png" alt=
+          "Link Source dialog" />
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <strong>Finish</strong> to validate and close the dialog.
+        </p>
+        <p>
+          Your project source setup now looks as follows:
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout46.png" alt=
+          "Java Project Source final setup" />
+        </p>
+      </li>
+      <li>Click <strong>Finish</strong>.
+      </li>
+      <li>
+        <p>
+
+          Create project "Product2" repeating steps 2 to 5 choosing
+          <i><code>D:\Product2\JavaSourceFiles</code></i> directory for source
+          folder instead.
+        </p>
+      </li>
+      <li>
+        <p>
+          Click on <strong>Finish</strong> to create the project immediately.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Now, we'll see how to add a linked source folder when project is
+          already created in workspace...
+        </p>
+        <p>
+          Edit project "Product2" properties and select <strong>Java Builder
+          Path</strong> page.
+        </p>
+
+        <p>
+          On <strong>Source</strong> tab, click <strong>Link
+          Source...</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout47.png" alt=
+          "Java Build Path Properties Source tab" />
+        </p>
+      </li>
+
+      <li>
+        <p>
+          In <strong>Link Source</strong> click <strong>Browse....</strong> and
+          choose the <i><code>D:\Framework\JavaSourceFiles</code></i>
+          directory.
+        </p>
+
+        <p>
+          Type "src-common" in the <strong>Folder name</strong> field.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout48.png" alt=
+          "Link Source dialog" />
+        </p>
+      </li>
+      <li>
+
+        <p>
+          Click <strong>Finish</strong> to validate and close the dialog.
+        </p>
+        <p>
+          Click <strong>OK</strong> to apply project "Product2" properties
+          changes.
+        </p>
+      </li>
+
+      <li>You now have two Java projects which respectively contain the sources
+      of "Product1" and "Product2" and which are using the sources of
+      "Framework".
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout49.png" alt=
+          "Created Java projects in Workspace" />
+        </p>
+      </li>
+    </ol><em>Note:</em> Files in "src-common" are shared. So editing
+    "Common.java" in "Product1" will modify "Common.java" in "Product2".
+    However they are compiled in the context of their respective projects. Two
+    "Common.class" files will be generated; one for each project. If the two
+    projects have different compiler options, then different errors could be
+    reported on each "Common.java" file.
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-WorkingWithExistingLayout5.htm">Product nesting
+      resources in output directory</a>
+
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-      <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
     </p>
+
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project
+      Wizard</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer View</a><br />
     </p>
-    
   </body>
-</html>
 
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout5.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout5.htm
index 1a1d019..b3ebff7 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout5.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout5.htm
@@ -1,116 +1,240 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Nesting resources in output directory
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Nesting resources in output directory
     </h1>
-    <h3>Layout on file system</h3>
+    <h3>
+      Layout on file system
+    </h3>
     <ul>
-	<li>The Java source files for a product are laid out both in <i><code>sources</code></i> and <i><code>deliverables</code></i> directories.</li>
-	<li>All Java class files are laid out in <i><code>deliverables</code></i> directory.</li>
-	<li>Project needs to use some libraries located in <i><code>deliverables/libraries</code></i> directory:
-	<p><img src="images/qs-WorkingWithExistingLayout50.png"  alt="Layout on file system"></p></li>
-	</ul>
-    <h3>Steps for defining a corresponding project</h3>
-	<ol>
-	<li>
-    	<p>Click 
-    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java perspective">
-    	<strong>Window > Open Perspective > Other... > Java</strong></a>
-    	to change to the Java perspective.
-    	</p>
-    </li>
-	<li>
-		<p>
-		Click
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the New Java Project wizard">
-		<strong>File > New > Other... > Java Project</strong></a>
-		to open the <strong>New Java Project</strong> wizard.
-		</p>
-	</li>
-    <li>
-    	<p>Type "Product" in the <strong>Project name</strong> field. Click <strong>Next</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout51.png"  alt="New Java Project wizard"></p>
-	</li>
-	<li>
-		<p>On the next page, Type "Product/deliverables" in <strong>Default output folder</strong> field.</p>
-		<p>Select "Product" source folder.</p>
-		<p>Click <strong>Link additional source</strong> link in <strong>Details</strong> pane or button <img src="images/add_linked_source_to_buildpath.png" alt="Link Additional Source to Project"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout52.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Link Source</strong> click <strong>Browse....</strong> and choose the <i><code>D:\Product\sources</code></i> directory.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout53.png"  alt="Link Source dialog"></p>
-	</li>
-	<li>
-		<p>Click <strong>Finish</strong> to validate and close the dialog.</p>
-	</li>
-	<li>
-		<p>Again, Select "Product" and click <strong>Link additional source</strong> link in <strong>Details</strong> pane or button <img src="images/add_linked_source_to_buildpath.png" alt="Link Additional Source to Project"> in view bar.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout54.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Link Source</strong> click <strong>Browse....</strong> and choose the <i><code>D:\Product\deliverables</code></i> directory.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout55.png"  alt="Link Source dialog"></p>
-	</li>
-	<li>
-		<p>Expand the "Product/deliverables" source folder. Select the "libraries" package
-		and exclude it from build path using either <strong>Exclude 'libraries' from build path</strong> link
-		or <strong>Exclude</strong> popup-menu item.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout56.png"  alt="Exclude 'libraries' from build path"></p>
-	</li>
-	<li>
-		<p>Your project source setup now looks as follows:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout57.png"  alt="Java Project Source final setup"></p>
-	</li>
-    <li>
-    	<p>Select <strong>Libraries</strong> tab.</p>
-    	<p>Click on <strong>Add JARs...</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout58.png"  alt="Java Project Libraries setup"></p>
-    </li>
-    <li>
-    	<p>Expand "Product" hierarchy to select jar files in "libraries" directory</p>
-    	<p>Click <strong>OK</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout59.png"  alt="JAR Selection dialog"></p>
-    </li>
-	<li>
-		<p>Click <strong>Finish</strong> to finalize project creation.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout5a.png"  alt="Java Project Libraries final setup"></p>
-	</li>
-    <li>
-    	<p>You now have a Java project with a "sources" folder and an output folder which contains nested library resources.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout5b.png"  alt="Created Java projects in Workspace"></p>
-    </li>
-	</ol>
-<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-WorkingWithExistingLayout6.htm">Project using a source framework with restricted access</A>
-</P>
+
+      <li>The Java source files for a product are laid out both in
+      <i><code>sources</code></i> and <i><code>deliverables</code></i>
+      directories.
+      </li>
+      <li>All Java class files are laid out in <i><code>deliverables</code></i>
+      directory.
+      </li>
+
+      <li>Project needs to use some libraries located in
+      <i><code>deliverables/libraries</code></i> directory:
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout50.png" alt=
+          "Layout on file system" />
+        </p>
+      </li>
+    </ul>
+    <h3>
+      Steps for defining a corresponding project
+    </h3>
+
+    <ol>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the Java perspective" /> <strong>Window > Open Perspective
+          > Other... > Java</strong></a> to change to the Java
+          perspective.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the New Java Project wizard" /> <strong>File > New >
+          Other... > Java Project</strong></a> to open the <strong>New Java
+          Project</strong> wizard.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Type "Product" in the <strong>Project name</strong> field. Click
+          <strong>Next</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout51.png" alt=
+          "New Java Project wizard" />
+
+        </p>
+      </li>
+      <li>
+        <p>
+          On the next page, Type "Product/deliverables" in <strong>Default
+          output folder</strong> field.
+        </p>
+        <p>
+          Select "Product" source folder.
+        </p>
+
+        <p>
+          Click <strong>Link additional source</strong> link in
+          <strong>Details</strong> pane or button <img src=
+          "images/add_linked_source_to_buildpath.png" alt=
+          "Link Additional Source to Project" /> in view bar.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout52.png" alt=
+          "Java Project Source setup" />
+
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Link Source</strong> click <strong>Browse....</strong> and
+          choose the <i><code>D:\Product\sources</code></i> directory.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout53.png" alt=
+          "Link Source dialog" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Click <strong>Finish</strong> to validate and close the dialog.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Again, Select "Product" and click <strong>Link additional
+          source</strong> link in <strong>Details</strong> pane or button
+          <img src="images/add_linked_source_to_buildpath.png" alt=
+          "Link Additional Source to Project" /> in view bar.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout54.png" alt=
+          "Java Project Source setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Link Source</strong> click <strong>Browse....</strong> and
+          choose the <i><code>D:\Product\deliverables</code></i> directory.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout55.png" alt=
+          "Link Source dialog" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Expand the "Product/deliverables" source folder. Select the
+          "libraries" package and exclude it from build path using either
+          <strong>Exclude 'libraries' from build path</strong> link or
+          <strong>Exclude</strong> popup-menu item.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout56.png" alt=
+          "Exclude 'libraries' from build path" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Your project source setup now looks as follows:
+        </p>
+        <p>
+
+          <img src="images/qs-WorkingWithExistingLayout57.png" alt=
+          "Java Project Source final setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Select <strong>Libraries</strong> tab.
+        </p>
+        <p>
+
+          Click on <strong>Add JARs...</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout58.png" alt=
+          "Java Project Libraries setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+
+          Expand "Product" hierarchy to select jar files in "libraries"
+          directory
+        </p>
+        <p>
+          Click <strong>OK</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout59.png" alt=
+          "JAR Selection dialog" />
+        </p>
+      </li>
+
+      <li>
+        <p>
+          Click <strong>Finish</strong> to finalize project creation.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout5a.png" alt=
+          "Java Project Libraries final setup" />
+        </p>
+      </li>
+
+      <li>
+        <p>
+          You now have a Java project with a "sources" folder and an output
+          folder which contains nested library resources.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout5b.png" alt=
+          "Created Java projects in Workspace" />
+        </p>
+      </li>
+    </ol>
+
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-WorkingWithExistingLayout6.htm">Project using a
+      source framework with restricted access</a>
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-      <a href="../concepts/concept-java-project.htm">Java projects</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
+      <a href="../concepts/concept-java-project.htm">Java projects</a><br />
+
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project
+      Wizard</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer View</a><br />
+
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout6.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout6.htm
index e7afadd..bb37f70 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout6.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-WorkingWithExistingLayout6.htm
@@ -1,151 +1,319 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Project using a source framework with restricted access
     </title>
-    <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
   </head>
   <body>
     <h1>
       Project using a source framework with restricted access
     </h1>
-    <h3>Layout on file system</h3>
+    <h3>
+      Layout on file system
+    </h3>
     <ul>
-	<li>The Java source files for a product requires a source framework.</li>
-	<li>"Product" and "Framework" are in separate directories which have their own source and output folders.
-	<p><img src="images/qs-WorkingWithExistingLayout60.png"  alt="Layout on file system"></p></li>
-	</ul>
-    <h3>Steps for defining corresponding projects</h3>
-	<ol>
-	<li>
-    	<p>Click 
-    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java perspective">
-    	<strong>Window > Open Perspective > Other... > Java</strong></a>
-    	to change to the Java perspective.
-    	</p>
-    </li>
-	<li>
-		<p>
-		Click
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the New Java Project wizard">
-		<strong>File > New > Other... > Java Project</strong></a>
-		to open the <strong>New Java Project</strong> wizard.
-		</p>
-	</li>
-    <li>
-    	<p>Type "Framework" in the <strong>Project name</strong> field.</p>
-    </li>
-    <li>
-    	<p>In <strong>Contents</strong> group, change selection to <strong>Create project from existing source</strong>.</p>
-    	<p>Click <strong>Browse...</strong> and choose the <i><code>D:\Framework</code></i> directory.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout61.png"  alt="New Java Project wizard"></p>
-    	<p>Click <strong>Next</strong>.</p>
-	</li>
-	<li>
-		<p>On the next page, verify that directory <i><code>JavaSourceFiles</code></i> has been automatically added as source folder.</p>
-		<p>Expand it to preview your project source folder contents:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout62.png"  alt="Java Project Source setup"></p>
-	</li>
-    <li>
-    	Click <strong>Finish</strong>.
-    </li>
-	<li>
-		<p>In Java perspective, type <strong>Ctrl+N</strong> to open <strong>New</strong> wizards dialog.</p>
-        <p>Select <strong>Java project</strong> in the list of wizards and click <strong>Next</strong>.</p>
-    </li>
-    <li>
-    	<p>On the next page, type "Product" in the <strong>Project name</strong> field.</p>
-	</li>
-    <li>
-    	<p>In <strong>Contents</strong> group, change selection to <strong>Create project from existing source</strong>.</p>
-    	<p>Click <strong>Browse...</strong> and choose the <i><code>D:\Product</code></i> directory.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout63.png"  alt="New Java Project wizard"></p>
-	</li>
-    <li>
-    	<p>Click <strong>Next</strong>.</p>
-	</li>
-	<li>
-		<p>On the next page, verify that directory <i><code>JavaSourceFiles</code></i> has been automatically added as source folder.</p>
-		<p>Expand it to preview your project source folder contents:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout64.png"  alt="Java Project Source setup"></p>
-	</li>
-	<li>
-		<p>Select <strong>Projects</strong> tab.</p>
-    	<p>Click <strong>Add...</strong>to add a dependency to source framework project...</p>
-		<p><img src="images/qs-WorkingWithExistingLayout65.png"  alt="Java Project Required Projects setup"></p>
-	</li>
-	<li>
-		<p>In <strong>Required Project Selection</strong>, check "Framework".</p>
-		<p><img src="images/qs-WorkingWithExistingLayout66.png"  alt="Required Project Selection dialog"></p>
-	</li>
-	<li>
-    	<p>Click <strong>OK</strong> to validate and close dialog.</p>
-	</li>
-	<li>
-		<p>Now, let's put access rules on source framework content to authorize, discourage or forbid access to "Framework" source folders, package and classes...</p>
-		<p>In <strong>Projects</strong> tab, select "Access rules" of "Framework" depending project.</p>
-    	<p>Click <strong>Edit...</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout67.png"  alt="Edit Required Project Access Rules"></p>
-	</li>
-	<li>
-		<p>In <strong>Type Access Rules</strong>, click <strong>Add...</strong>.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout68.png"  alt="Type Access Rules dialog"></p>
-	</li>
-	<li>
-		<p>In <strong>Add Access Rule</strong>, select "Forbidden" for <strong>Resolution</strong>.</p>
-		<p>Type "**/forbidden/**" in <strong>Rule Pattern</strong> field.</p>
-		<p><img src="images/qs-WorkingWithExistingLayout69.png"  alt="Add Access Rule dialog"></p>
-	</li>
-	<li>
-    	<p>Click <strong>OK</strong> to validate access rule and close dialog.</p>
-	</li>
-	<li>
-		<p>Add another access rule:</p>
-		<p><strong>Resolution</strong>: "Discouraged" and <strong>Rule Pattern</strong>: "**/internal/**".</p>
-	</li>
-	<li>
-		<p>Your access rules now look as follows:</p>
-		<p><img src="images/qs-WorkingWithExistingLayout6a.png"  alt="Type Access Rules final result"></p>
-	</li>
-	<li>
-    	<p>Click <strong>OK</strong> to validate these new rules and close dialog.</p>
-	</li>
-    <li>
-    	<p>Dependent project has now 2 access rules set.</p>
-    	<p><img src="images/qs-WorkingWithExistingLayout6b.png"  alt="Java Project Required Projects final setup"></p>
-	</li>
-    <li>
-    	<p>Click <strong>Finish</strong>.</p>
-    </li>
-    <li>
-    	<p>You now have a Java project which contains the source of "Product" and which is using the source of "Framework".</p>
-    	<p>Some packages of the project "Framework" are restricted and if you try to import them, compiler displays either warnings or errors depending on your restriction level:</p> 
-		<p><img src="images/qs-WorkingWithExistingLayout6c.png"  alt="Created Java projects in Workspace"></p>
-    </li>
-	</ol>
-	<P class="nav_footer" id="nav_footer">Next Section: <A href="qs-with-j2se50.htm">Eclipse and J2SE 5.0</A>
-</P>
+
+      <li>The Java source files for a product requires a source framework.
+      </li>
+      <li>"Product" and "Framework" are in separate directories which have
+      their own source and output folders.
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout60.png" alt=
+          "Layout on file system" />
+        </p>
+      </li>
+    </ul>
+    <h3>
+      Steps for defining corresponding projects
+    </h3>
+
+    <ol>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the Java perspective" /> <strong>Window > Open Perspective
+          > Other... > Java</strong></a> to change to the Java
+          perspective.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <a class="command-link" href=
+          'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.jdt.ui.wizards.JavaProjectWizard)")'>
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+          "Opens the New Java Project wizard" /> <strong>File > New >
+          Other... > Java Project</strong></a> to open the <strong>New Java
+          Project</strong> wizard.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Type "Framework" in the <strong>Project name</strong> field.
+        </p>
+      </li>
+      <li>
+        <p>
+          Deselect <strong>Use default location</strong>.
+        </p>
+        <p>
+          Click <strong>Browse...</strong> and choose the
+          <i><code>D:\Framework</code></i> directory.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout61.png" alt=
+          "New Java Project wizard" />
+        </p>
+        <p>
+          Click <strong>Next</strong>.
+        </p>
+      </li>
+      <li>
+
+        <p>
+          On the next page, verify that directory
+          <i><code>JavaSourceFiles</code></i> has been automatically added as
+          source folder.
+        </p>
+        <p>
+          Expand it to preview your project source folder contents:
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout62.png" alt=
+          "Java Project Source setup" />
+
+        </p>
+      </li>
+      <li>Click <strong>Finish</strong>.
+      </li>
+      <li>
+        <p>
+          In Java perspective, type <strong>Ctrl+N</strong> to open
+          <strong>New</strong> wizards dialog.
+        </p>
+
+        <p>
+          Select <strong>Java project</strong> in the list of wizards and click
+          <strong>Next</strong>.
+        </p>
+      </li>
+      <li>
+        <p>
+          On the next page, type "Product" in the <strong>Project name</strong>
+
+          field.
+        </p>
+      </li>
+      <li>
+        <p>
+          Deselect <strong>Use default location</strong>.
+        </p>
+
+        <p>
+          Click <strong>Browse...</strong> and choose the
+          <i><code>D:\Product</code></i> directory.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout63.png" alt=
+          "New Java Project wizard" />
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Click <strong>Next</strong>.
+        </p>
+      </li>
+      <li>
+        <p>
+
+          On the next page, verify that directory
+          <i><code>JavaSourceFiles</code></i> has been automatically added as
+          source folder.
+        </p>
+        <p>
+          Expand it to preview your project source folder contents:
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout64.png" alt=
+          "Java Project Source setup" />
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Select <strong>Projects</strong> tab.
+        </p>
+        <p>
+          Click <strong>Add...</strong>to add a dependency to source framework
+          project...
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout65.png" alt=
+          "Java Project Required Projects setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          In <strong>Required Project Selection</strong>, check "Framework".
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout66.png" alt=
+          "Required Project Selection dialog" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Click <strong>OK</strong> to validate and close dialog.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Now, let's put access rules on source framework content to authorize,
+          discourage or forbid access to "Framework" source folders, package
+          and classes...
+        </p>
+        <p>
+          In <strong>Projects</strong> tab, select "Access rules" of
+          "Framework" depending project.
+        </p>
+
+        <p>
+          Click <strong>Edit...</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout67.png" alt=
+          "Edit Required Project Access Rules" />
+        </p>
+      </li>
+      <li>
+
+        <p>
+          In <strong>Type Access Rules</strong>, click <strong>Add...</strong>.
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout68.png" alt=
+          "Type Access Rules dialog" />
+        </p>
+      </li>
+
+      <li>
+        <p>
+          In <strong>Add Access Rule</strong>, select "Forbidden" for
+          <strong>Resolution</strong>.
+        </p>
+        <p>
+          Type "**/forbidden/**" in <strong>Rule Pattern</strong> field.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout69.png" alt=
+          "Add Access Rule dialog" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Click <strong>OK</strong> to validate access rule and close dialog.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Add another access rule:
+        </p>
+        <p>
+          <strong>Resolution</strong>: "Discouraged" and <strong>Rule
+          Pattern</strong>: "**/internal/**".
+        </p>
+
+      </li>
+      <li>
+        <p>
+          Your access rules now look as follows:
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout6a.png" alt=
+          "Type Access Rules final result" />
+        </p>
+      </li>
+
+      <li>
+        <p>
+          Click <strong>OK</strong> to validate these new rules and close
+          dialog.
+        </p>
+      </li>
+      <li>
+        <p>
+          Dependent project has now 2 access rules set.
+        </p>
+
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout6b.png" alt=
+          "Java Project Required Projects final setup" />
+        </p>
+      </li>
+      <li>
+        <p>
+          Click <strong>Finish</strong>.
+        </p>
+
+      </li>
+      <li>
+        <p>
+          You now have a Java project which contains the source of "Product"
+          and which is using the source of "Framework".
+        </p>
+        <p>
+          Some packages of the project "Framework" are restricted and if you
+          try to import them, compiler displays either warnings or errors
+          depending on your restriction level:
+        </p>
+        <p>
+          <img src="images/qs-WorkingWithExistingLayout6c.png" alt=
+          "Created Java projects in Workspace" />
+
+        </p>
+      </li>
+    </ol>
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-with-j2se50.htm">Eclipse and J2SE 5.0</a>
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+
     </p>
     <p>
       <a href="../concepts/concept-java-project.htm">Java projects</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference">
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-      <a href="../reference/ref-wizard-java-project.htm">New Java Project Wizard</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer View</a><br>
+
+      <a href="../reference/ref-wizard-java-project.htm">New Java Project
+      Wizard</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer View</a><br />
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-junit.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-junit.htm
index dc1d653..cb93d71 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-junit.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/gettingStarted/qs-junit.htm
@@ -1,177 +1,236 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Writing and running JUnit tests
     </title>
   </head>
+
   <body>
     <h1>
       Writing and running JUnit tests
     </h1>
     <p>
-      In this section, you will be using the <a href="http://www.junit.org" target="_blank"> JUnit</a> 
-    testing framework to write and run tests. To get started with JUnit you can
-    refer to the <a href="http://junit.sourceforge.net/doc/cookbook/cookbook.htm" target="_blank">JUnit
-    Cookbook</a>.
+      In this section, you will be using the <a href="http://www.junit.org"
+      target="_blank">JUnit</a> testing framework to write and run tests. To
+      get started with JUnit you can refer to the <a href=
+      "http://junit.sourceforge.net/doc/cookbook/cookbook.htm" target=
+      "_blank">JUnit Cookbook</a>.
     </p>
+
     <h2>
       Writing Tests
     </h2>
-
     <p>
-      Create a project "JUnitTest".  Now you can write your
-      first test. You implement the test in a subclass of <strong>TestCase</strong>. You can
-      do so either using the standard Class wizard or the specialized <strong>Test Case 
-      </strong> wizard:
+      Create a project "JUnitTest". Now you can write your first test. You
+      implement the test in a subclass of <strong>TestCase</strong>. You can do
+      so either using the standard Class wizard or the specialized <strong>Test
+      Case</strong> wizard:
     </p>
     <ol>
-      <li>Open the New wizard (<strong>File  > New  > JUnit Test Case</strong>).</li>
-      <li>Select <strong>New JUnit 3 test</strong> and enter 
-		  "<i>TestFailure"</i> as the name of your test class:
-       <p>
-        <img src="images/wiz_new_testcase.png"  alt="TestCase creation wizard page 1"><br>
-       </p>
-	   <p>
-	   <em>Note: </em>If you want to use JUnit 4 tests you have to make
-			sure that your compiler compliance is set to 1.5. 
-		   </p>
-      </li>
-	  <li>You will see a warning message asking you to add the junit library
-		  to the build path. Use the <strong>Click here</strong> link to 
-		  add the junit library automatically.</li>
-      
+
+      <li>Open the New wizard (<strong>File > New > JUnit Test
+      Case</strong>).
+      </li>
+      <li>Select <strong>New JUnit 3 test</strong> and enter
+      "<i>TestFailure"</i> as the name of your test class:
+        <p>
+
+          <img src="images/wiz_new_testcase.png" alt=
+          "TestCase creation wizard page 1" /><br />
+        </p>
+        <p>
+          <em>Note:</em> If you want to use JUnit 4 tests you have to make sure
+          that your compiler compliance is set to 1.5.
+        </p>
+      </li>
+      <li>You will see a warning message asking you to add the junit library to
+      the build path. Use the <strong>Click here</strong> link to add the junit
+      library automatically.
+      </li>
+
       <li>Click <strong>Finish</strong> to create the test class.
       </li>
     </ol>
     <p>
-      Add a test method that fails to the class <i>TestFailure</i>. A quick
-      way to enter a test method is with the <i>test</i> template. To do so, place the cursor inside the class declaration. 
-      Type "test" followed by <kbd>Ctrl+Space</kbd> to activate code
-      assist and select the "test" template. Change the name of the
-      created method to <i>testFailure</i> and invoke the <i>fail() </i>method.
+      Add a test method that fails to the class <i>TestFailure</i>. A quick way
+      to enter a test method is with the <i>test</i> template. To do so, place
+      the cursor inside the class declaration. Type "test" followed by
+      <kbd>Ctrl+Space</kbd> to activate code assist and select the "test"
+      template. Change the name of the created method to <i>testFailure</i> and
+      invoke the <i>fail()</i> method.
+    </p>
+
+    <p>
+      <code>public void testFailure() throws Exception {<br />
+          fail();<br />
+      }</code>
+    </p>
+    <p>
+      Now you are ready to run your first test.
     </p>
-    <p><code>
-      public void testFailure() throws Exception {<br>
-          fail();<br>
-      }
-    </code></p>
-     
-    <p>Now you are ready to run your first test.</p>
 
     <h2>
       Running Tests
     </h2>
-    
-    <p>To run TestFailure hit the run button in the toolbar. It will automatically run as JUnit Test.
-    You can inspect the test results in the <i>JUnit</i> view. This view shows
-    you the test run progress and status:</p>
-
-    <p><img src="images/view_junit_red.png"  alt="Failed test"></p>
-
-    <p> The view is shown in the current
-    perspective whenever you start a test run. A convenient arrangement for the
-    JUnit view is to dock it as a fast view. The JUnit view has two tabs: one shows
-    you a list of failures and the other shows you the full test suite as
-    a tree. You can navigate from a failure to the corresponding source by
-    double clicking the corresponding line in the failure trace.</p>
-
-    <p>Dock the JUnit view as a fast view, remove the <i>
-    fail()</i> statement in the method <i> testFailure()</i> so that the test passes and rerun
-    the test again. You can rerun a test either by clicking the <b>Rerun</b> button in
-    the view's tool bar or you can re-run the program that was last launched by activating
-    the <b>Run</b> drop down. This time the test should succeed. Because the test was successful,
-     the JUnit view doesn't pop up, but the success indicator shows on 
-    the JUnit view icon and the status line shows the test result. As a reminder
-    to rerun your tests the view icon is decorated by a "*"
-    whenever you change the workspace contents after the run.</p>
+    <p>
+      To run TestFailure hit the run button in the toolbar. It will
+      automatically run as JUnit Test. You can inspect the test results in the
+      <i>JUnit</i> view. This view shows you the test run progress and status:
+    </p>
+    <p>
+      <img src="images/view_junit_red.png" alt="Failed test" />
+
+    </p>
+    <p>
+      The view is shown in the current perspective whenever you start a test
+      run. A convenient arrangement for the JUnit view is to dock it as a fast
+      view. The JUnit view has two tabs: one shows you a list of failures and
+      the other shows you the full test suite as a tree. You can navigate from
+      a failure to the corresponding source by double clicking the
+      corresponding line in the failure trace.
+    </p>
+    <p>
+      Dock the JUnit view as a fast view, remove the <i>fail()</i> statement in
+      the method <i>testFailure()</i> so that the test passes and rerun the
+      test again. You can rerun a test either by clicking the <b>Rerun</b>
 
+      button in the view's tool bar or you can re-run the program that was last
+      launched by activating the <b>Run</b> drop down. This time the test
+      should succeed. Because the test was successful, the JUnit view doesn't
+      pop up, but the success indicator shows on the JUnit view icon and the
+      status line shows the test result. As a reminder to rerun your tests the
+      view icon is decorated by a "*" whenever you change the workspace
+      contents after the run.
+    </p>
     <blockquote>
-      <p><img src="images/icon_junit_successfull.png"  border="0" alt="Successful test">
-      - A successful test run<br>
-      <img src="images/icon_junit_successfull_workspace_modifed.png"  border="0" alt="Successful test but workspace has changed"> - 
-      A successful test run, but the workspace contents have changed since the
-      last test run.</p>
+      <p>
+        <img src="images/icon_junit_successfull.png" border="0" alt=
+        "Successful test" /> - A successful test run<br />
+        <img src="images/icon_junit_successfull_workspace_modifed.png" border=
+        "0" alt="Successful test but workspace has changed" /> - A successful
+        test run, but the workspace contents have changed since the last test
+        run.
+      </p>
 
     </blockquote>
-    <p>In addition to running a test case as described above you can also:</p>
+    <p>
+      In addition to running a test case as described above you can also:
+    </p>
     <ul>
-      <li>Run all tests inside a project, source folder, or package -  <br>
-        Select a project, package or source folder and run all the included tests with <strong>Run as > JUnit Test</strong>.
-        This command finds all tests inside a project, source folder or package
-        and executes them.</li>
-      <li>Run a single test method - <br>
-        Select a test method in the Outline or Package Explorer and with <strong>Run as > JUnit Test</strong>
-        the selected test method will be run.</li>
-      <li>Rerun a single test - <br>
-        Select a test in the JUnit view and execute <b>Run </b>from the context
-        menu.</li>
-    </ul>
+      <li>Run all tests inside a project, source folder, or package -
+       <br />
+        Select a project, package or source folder and run all the included
+        tests with <strong>Run as > JUnit Test</strong>. This command finds
+        all tests inside a project, source folder or package and executes them.
+      </li>
 
+      <li>Run a single test method -<br />
+        Select a test method in the Outline or Package Explorer and with
+        <strong>Run as > JUnit Test</strong> the selected test method will
+        be run.
+      </li>
+      <li>Rerun a single test -<br />
+        Select a test in the JUnit view and execute <b>Run</b> from the context
+        menu.
+      </li>
+
+    </ul>
     <h2>
       Customizing a Test Configuration
     </h2>
-    
-    <p>When you want to pass parameters or customize the
-    settings for a test run you open the Launch Configuration Dialog. Select <strong>Open Run Dialog...</strong>.in the <strong>Run</strong>
-    drop-down menu in the toolbar:</p>
-    <p><img src="images/run_dialog_junit.png"  alt="JUnit Launch Configuration"></p>
-    <p>In this dialog you can specify the test to be run, its arguments, its run-time
-    class path, and the Java run-time environment.</p>
+    <p>
+      When you want to pass parameters or customize the settings for a test run
+      you open the Launch Configuration Dialog. Select <strong>Open Run
+      Dialog...</strong>.in the <strong>Run</strong> drop-down menu in the
+      toolbar:
+    </p>
 
+    <p>
+      <img src="images/run_dialog_junit.png" alt=
+      "JUnit Launch Configuration" />
+    </p>
+    <p>
+      In this dialog you can specify the test to be run, its arguments, its
+      run-time class path, and the Java run-time environment.
+    </p>
     <h2>
       Debugging a Test Failure
     </h2>
-    
-    <p>In the case of a test failure you can follow these steps to debug it:</p>
+    <p>
+
+      In the case of a test failure you can follow these steps to debug it:
+    </p>
     <ol>
-      <li>Double click the failure entry from the Failures tab in the JUnit view to open the
-        corresponding file in the editor.</li>
-      <li>Set a breakpoint at the beginning of the test method.</li>
-      <li>Select the test case and execute  <b>Debug As>JUnit Test</b> from
-        the <b>Debug </b>drop down.</li>
-    </ol>
-    <p>A JUnit launch configuration has a "keep alive" option. If your
-    Java virtual machine supports "hot code replacement" you can fix the code and rerun the test
-    without restarting the full test run. To enable this option select the <strong>Keep
-    JUnit running after a test run when debugging</strong> checkbox in the JUnit
-    launch configuration.</p>
+      <li>Double click the failure entry from the Failures tab in the JUnit
+      view to open the corresponding file in the editor.
+      </li>
+      <li>Set a breakpoint at the beginning of the test method.
+      </li>
+      <li>Select the test case and execute  <b>Debug As>JUnit Test</b>
 
+      from the <b>Debug</b> drop down.
+      </li>
+    </ol>
+    <p>
+      A JUnit launch configuration has a "keep alive" option. If your Java
+      virtual machine supports "hot code replacement" you can fix the code and
+      rerun the test without restarting the full test run. To enable this
+      option select the <strong>Keep JUnit running after a test run when
+      debugging</strong> checkbox in the JUnit launch configuration.
+    </p>
     <h2>
+
       Creating a Test Suite
     </h2>
-    
     <p>
-      The JUnit <b>TestSuite </b>wizard helps you with the creation of a test
-      suite. You can select the set of classes that should belong to a suite. 
+      The JUnit <b>TestSuite</b> wizard helps you with the creation of a test
+      suite. You can select the set of classes that should belong to a suite.
     </p>
-    
     <ol>
-      <li>Open the New wizard</li>
-      <li>Select <strong>Java > JUnit > JUnit Test Suite</strong> and click <strong>Next</strong>.</li>
+      <li>Open the New wizard
+      </li>
+      <li>Select <strong>Java > JUnit > JUnit Test Suite</strong> and
+      click <strong>Next</strong>.
+      </li>
+
       <li>Enter a name for your test suite class (the convention is to use
-        "AllTests" which appears by default).<br>
-        <p><img src="images/wiz_new_suite.png"  alt="Test Suite wizard"></p>
+      "AllTests" which appears by default).<br />
+        <p>
+          <img src="images/wiz_new_suite.png" alt="Test Suite wizard" />
+        </p>
       </li>
       <li>Select the classes that should be included in the suite. We currently
-        have a single test class only, but you can add to the suite later.</li>
+      have a single test class only, but you can add to the suite later.
+      </li>
     </ol>
-    
-    <p>You can add or remove test classes from the test suite in two ways:</p>
+    <p>
+
+      You can add or remove test classes from the test suite in two ways:
+    </p>
     <ul>
-      <li>Manually by editing the test suite file</li>
-	  <li>By re-running the wizard and selecting the new set of test classes.</li>
+      <li>Manually by editing the test suite file
+      </li>
+      <li>By re-running the wizard and selecting the new set of test classes.
+      </li>
     </ul>
-    <p>Note: the wizard puts 2 markers, <code>//$JUnit-BEGIN$</code> and
-    <code>//$JUnit-END$</code>, into the created Test suite class, which allows
-    the wizard to update existing test suite classes. Editing code between the markers is 
-    not recommended.</p>
-    <P class="nav_footer" id="nav_footer">Next Section: <A href="qs-ProjectConfiguration.htm">Project configuration tutorial</A>
-</P>
+    <p>
+      Note: the wizard puts 2 markers, <code>//$JUnit-BEGIN$</code> and
+      <code>//$JUnit-END$</code>, into the created Test suite class, which
+      allows the wizard to update existing test suite classes. Editing code
+      between the markers is not recommended.
+    </p>
+
+    <p class="nav_footer" id="nav_footer">
+      Next Section: <a href="qs-ProjectConfiguration.htm">Project configuration
+      tutorial</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/images/org.eclipse.jdt.ui/elcl16/external_browser.png b/eclipse/plugins/org.eclipse.jdt.doc.user/images/org.eclipse.jdt.ui/elcl16/external_browser.png
new file mode 100644
index 0000000..5e88db4
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/images/org.eclipse.jdt.ui/elcl16/external_browser.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/images/org.eclipse.ui.console/elcl16/pin.png b/eclipse/plugins/org.eclipse.jdt.doc.user/images/org.eclipse.jdt.ui/elcl16/pin_view.png
similarity index 100%
copy from eclipse/plugins/org.eclipse.jdt.doc.user/images/org.eclipse.ui.console/elcl16/pin.png
copy to eclipse/plugins/org.eclipse.jdt.doc.user/images/org.eclipse.jdt.ui/elcl16/pin_view.png
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/notices.html b/eclipse/plugins/org.eclipse.jdt.doc.user/notices.html
index 33aa981..579df95 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/notices.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/notices.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <LINK REL="STYLESHEET" HREF="book.css" CHARSET="ISO-8859-1" TYPE="text/css">
@@ -13,7 +13,7 @@
 <h3>
 <a NAME="Notices"></a>Notices</h3>
 <p>
-The material in this guide is Copyright (c) IBM Corporation and others 2000, 2010.
+The material in this guide is Copyright (c) IBM Corporation and others 2000, 2011.
 </p>
 <p>
 <a href="about.html">Terms and conditions regarding the use of this guide.</a>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/plugin.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/plugin.xml
index 0b582ce..ec3ce7f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/plugin.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/plugin.xml
@@ -28,6 +28,8 @@
        <toc file="topics_Concepts.xml" />
        <toc file="topics_Tasks.xml" />
        <toc file="topics_Reference.xml" />
+       <toc file="topics_Tips.xml" />
+       <toc file="topics_WhatsNew.xml" />
    </extension>
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_caught.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_caught.PNG
index 4b80151..d9b8320 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_caught.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_caught.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_condition.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_condition.PNG
index 4b13fe4..5f87a05 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_condition.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_condition.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_enabled.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_enabled.PNG
index 5dd3f54..9b7ddf4 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_enabled.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_enabled.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_entry.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_entry.PNG
index 7c31d42..ac40658 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_entry.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_entry.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_exit.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_exit.PNG
index 8298d10..9f371f9 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_exit.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_exit.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_hitcount.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_hitcount.PNG
index c16b8c0..f9be1fd 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_hitcount.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_hitcount.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendpolicy.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendpolicy.PNG
index 24c0a4e..f0401ff 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendpolicy.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendpolicy.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendsubclass.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendsubclass.PNG
index 5ce8ce2..7f76f54 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendsubclass.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_suspendsubclass.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_uncaught.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_uncaught.PNG
index 2052ada..7341282 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_uncaught.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-breakpoint_uncaught.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_access_option.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_access_option.PNG
index 3ed5c24..cc08257 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_access_option.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_access_option.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_mod.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_mod.PNG
index 0aca902..6f42b14 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_mod.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/breakpoints/images/ref-watchpoint_mod.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/appearance/ref-preferences-type-filters.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/appearance/ref-preferences-type-filters.htm
index cbc9ed3..4e1e41c 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/appearance/ref-preferences-type-filters.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/appearance/ref-preferences-type-filters.htm
@@ -10,10 +10,10 @@
 <body>
 <h1>Type Filters Preferences</h1>
 <p>Indicate your preferences for the Type Filters settings on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.TypeFilterPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Type Filters	preference page"><b> Java > Appearance > Type Filters </b></a> preference page.</p>
-<p>Specify types and packages to hide in the 'Open Type' dialog and content assist or quick fix proposals on this preference site.
+<p>Specify types and packages to hide in the 'Open Type' dialog and content assist or quick fix proposals on this preference page.
 If a qualified type name or a package match one of the checked entries in the list, they will be hidden.
 </p>
-<p>The default is to hide nothing.</p>
+<p>The default is to hide nothing but forbidden references.</p>
 
 <table border="1" cellspacing="0" cellpadding="5" summary="Enabled type filters">
 	<thead>
@@ -54,9 +54,48 @@ If a qualified type name or a package match one of the checked entries in the li
 	</tbody>
 </table>
 
+<h2>Access Restrictions</h2>
+
+<table border="1" cellspacing="0" cellpadding="5" width="100%" summary="Content Assist settings">
+	<thead>
+		<tr>
+			<th>
+			<p>Option</p>
+			</th>
+			<th>
+			<p>Description</p>
+			</th>
+			<th>
+			<p>Default</p>
+			</th>
+		</tr>
+	</thead>
+	<tbody>
+		<tr>
+			<td valign="top">Hide forbidden references</td>
+			<td valign="top">
+			If enabled, references to Java elements forbidden by access rules are not displayed.
+			</td>
+			<td valign="top">
+			On
+			</td>
+		</tr>
+		<tr>
+			<td valign="top">Hide discouraged references</td>
+			<td valign="top">
+			If enabled, references to Java elements discouraged by access rules are not displayed.
+			</td>
+			<td valign="top">
+			Off
+			</td>
+		</tr>
+	</tbody>
+</table>
+
 
 <p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p><a href="../../../../concepts/concept-quickfix-assist.htm">Quick fix</a></p>
+<p><a href="../../../../concepts/concept-quickfix-assist.htm">Quick fix</a><br>
+<a href="../../../../concepts/concept-access-rules.htm">Access Rules</a></p>
 <p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p><a href="../../../../reference/ref-dialog-open-type.htm">Open type</a><br>
 <a href="../../../../reference/ref-java-editor-code-assist.htm">Content/Code assist</a></p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm
index 8538752..cae88a8 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Java Compiler Errors/Warnings Preferences</title>
 <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -111,6 +111,28 @@
 		<p>Ignore</p>
 		</td>
 	</tr>
+	<tr>
+		<td valign="top">
+		<p>Method can be static</p>
+		</td>
+		<td valign="top">
+		<p>When enabled, the compiler will issue an error or a warning for methods which are private or final and which refer only to static members.</p>
+		</td>
+		<td valign="top">
+		<p>Ignore</p>
+		</td>
+	</tr>
+	<tr>
+		<td valign="top">
+		<p>Method can potentially be static</p>
+		</td>
+		<td valign="top">
+		<p>When enabled, the compiler will issue an error or a warning for methods which are not private or final and which refer only to static members. Note that methods can be overridden in a subclass, so if you make a "potentially static" method static, this may break existing clients.</p>
+		</td>
+		<td valign="top">
+		<p>Ignore</p>
+		</td>
+	</tr>
 </table>
 
 <h3>Potential programming problems</h3>
@@ -464,10 +486,10 @@
 <table border="1" cellspacing="0" cellpadding="5" width="100%" summary="Unnecessary code section">
 	<tr>
 		<td valign="top">
-		<p>Local variable is never read</p>
+		<p>Value of local variable is not used</p>
 		</td>
 		<td valign="top">
-		<p>When enabled, the compiler will issue an error or a warning whenever a local variable is declared but never used within its scope.</p>
+		<p>When enabled, the compiler will issue an error or a warning whenever a local variable is declared but its value never used within its scope.</p>
 		</td>
 		<td valign="top">
 		<p>Warning</p>
@@ -475,10 +497,10 @@
 	</tr>
 	<tr>
 		<td valign="top">
-		<p>Parameter is never read</p>
+		<p>Value of parameter is not used</p>
 		</td>
 		<td valign="top">
-		<p>When enabled, the compiler will issue an error or a warning whenever a parameter is declared but never used within its scope.</p>
+		<p>When enabled, the compiler will issue an error or a warning whenever a parameter is declared but its value never used within its scope.</p>
 		</td>
 		<td valign="top">
 		<p>Ignore</p>
@@ -519,10 +541,10 @@
 	</tr>
 	<tr>
 		<td valign="top">
-		<p>Unused local or private members</p>
+		<p>Unused private members</p>
 		</td>
 		<td valign="top">
-		<p>When enabled, the compiler will issue an error or a warning whenever a local or private member is declared but never used within the same unit.</p>
+		<p>When enabled, the compiler will issue an error or a warning whenever a private member is declared but never used within the same unit.</p>
 		</td>
 		<td valign="top">
 		<p>Warning</p>
@@ -667,6 +689,20 @@
 		<p>Warning</p>
 		</td>
 	</tr>
+	<tr>
+		<td valign="top">
+		<p>Ignore unavoidable generic type problems</p>
+		</td>
+		<td valign="top">
+		<p>When enabled, the compiler will issue an error or a warning even when it detects a generic type problem
+that could not have been avoided by the programmer. As an example, a type may be forced to use raw types
+in its method signatures and return types because the methods it overrides from a super type are declared to
+use raw types in the first place.</p>
+		</td>
+		<td valign="top">
+		<p>Off</p>
+		</td>
+	</tr>
 </table>
 
 <h3>Annotations</h3>
@@ -765,6 +801,8 @@
 	</tr>
 </table>
 
+<p>Enable <strong>Include 'assert' in null analysis</strong> to honor 'assert' statements when doing the null access analyis.</p>
+
 <p>When <strong>Treat errors like fatal compile errors</strong> is enabled, all generated errors, fatal or configurable, lead to non-executable code.
 If disabled, then your code can be executed as long as it has no fatal error (i.e. syntax error).</p>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-javadoc.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-javadoc.htm
index f1629e3..c3a2cdb 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-javadoc.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-javadoc.htm
@@ -55,7 +55,7 @@
 			<p>Only consider members as visible as</p>
 			</td>
 			<td valign="top">
-			<p>The compiler does only check members with the specified or a broader visibility.</p>
+			<p>The compiler only checks members with the specified or a broader visibility.</p>
 			</td>
 			<td valign="top">
 			<p>Public</p>
@@ -122,7 +122,7 @@
 			<p>Only consider members as visible as</p>
 			</td>
 			<td valign="top">
-			<p>The compiler does only check members with the specified or a broader visibility.</p>
+			<p>The compiler only checks members with the specified or a broader visibility.</p>
 			</td>
 			<td valign="top">
 			<p>Public</p>
@@ -130,13 +130,24 @@
 		</tr>
 		<tr>
 			<td valign="top" style="padding-left: 1em;">
-			<p>Check overriding and implementing methods</p>
+			<p>Ignore in overriding and implementing methods</p>
 			</td>
 			<td valign="top">
-			<p>When enabled, also overriding and implementing methods are checked for missing Javadoc tags.</p>
+			<p>When enabled, methods that override or implement another method are not checked for missing Javadoc tags.</p>
 			</td>
 			<td valign="top">
-			<p>Off</p>
+			<p>On</p>
+			</td>
+		</tr>
+		<tr>
+			<td valign="top" style="padding-left: 1em;">
+			<p>Ignore method type parameters</p>
+			</td>
+			<td valign="top">
+			<p>When enabled, missing Javadoc tags are not reported for method type parameters.</p>
+			</td>
+			<td valign="top">
+			<p>On</p>
 			</td>
 		</tr>
 		<tr>
@@ -155,7 +166,7 @@
 			<p>Only consider members as visible as</p>
 			</td>
 			<td valign="top">
-			<p>The compiler does only check members with the specified or a broader visibility.</p>
+			<p>The compiler only checks members with the specified or a broader visibility.</p>
 			</td>
 			<td valign="top">
 			<p>Public</p>
@@ -163,13 +174,13 @@
 		</tr>
 		<tr>
 			<td valign="top" style="padding-left: 1em;">
-			<p>Check overriding and implementing methods</p>
+			<p>Ignore in overriding and implementing methods</p>
 			</td>
 			<td valign="top">
-			<p>When enabled, also overriding and implementing methods are checked for missing Javadoc comments.</p>
+			<p>When enabled, methods that override or implement another method are not checked for missing Javadoc comments.</p>
 			</td>
 			<td valign="top">
-			<p>Off</p>
+			<p>On</p>
 			</td>
 		</tr>
 	</tbody>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-task-tags.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-task-tags.htm
index 720d2c4..427cd06 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-task-tags.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-task-tags.htm
@@ -30,8 +30,6 @@
         See the <a href="../ref-preferences-compiler.htm">Compiler preference page</a> for information on how to enable task tags in your source code.
     </p>
     <table border="1" cellspacing="0" cellpadding="5" width="100%" summary="Task tags settings">
-      <caption>
-      </caption>
       <tr>
         <th>
           <p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-debug.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-debug.htm
index 09bd662..c1a7d86 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-debug.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-debug.htm
@@ -1,105 +1,293 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Java Debug Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Java Debug Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaDebugPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java Debug preference page"> <b>Java > Debug</b></a> preference page.</p>
-<p>These options apply to java specific debuggers and have to do with suspending options and hot code replace. </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Suspend execution on uncaught exceptions </td>
-      <td colspan="1" valign="top" align="left"><p>This option controls if a program will suspend if an uncaught exception is thrown. </p>
-      <p>For example if you try to call a method on a null object and a NullPointerException is thrown, with this option on your program will suspend at the location the exception was thrown </p></td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Suspend execution on compilation errors </td>
-      <td colspan="1" valign="top" align="left">This option controls if a program will suspend when a compilation error is encountered </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Suspend on breakpoints during evaluations </td>
-      <td colspan="1" valign="top" align="left">This options controls if breakpoints will suspend during an evaluation of code containing a breakpoint. For more information about evaluations go <a href="../../../../tasks/task-evaluating_expressions.htm">here</a> </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Open popup when suspended on exception </td>
-      <td colspan="1" valign="top" align="left">This option controls if a popup window will be displayed when execution of a program stops on an exception. The exception the program suspended on is made available for inspection in the popup</td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Default suspend policy for new breakpoints </td>
-      <td colspan="1" valign="top" align="left">This option allows the default suspend policy to be set for new breakpoints. The suspend policy is used by breakpoints to tell the VM what to suspend, in this case either the thread the breakpoint is active in or the entire running VM </td>
-      <td colspan="1" valign="top" align="left">Suspend Thread </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Show error when hot code replace fails </td>
-      <td colspan="1" valign="top" align="left">This option controls if the user will be presented with an error dialog when a hot code replace fails </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Show error when hot code replace is not supported </td>
-      <td colspan="1" valign="top" align="left">This option controls if the user will be presented with an error dialog when hot code replace is not supported, and the user has made and saved changes to currently running code </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Show error when obsolete methods remain after hot code replace </td>
-      <td colspan="1" valign="top" align="left">This option controls if the user will be presented with an error dialog when a hot code replace completed, but there were obsolete methods left over </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Replace class files containing compilation errors </td>
-      <td colspan="1" valign="top" align="left">This option controls is class files containing compilation errors will be replaced </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Debugger timeout </td>
-      <td colspan="1" valign="top" align="left">This option describes the length of time (in milliseconds) the debugger will wait trying to communicate with a running VM before giving up and disconnecting </td>
-      <td colspan="1" valign="top" align="left">3000</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Launch timeout </td>
-      <td colspan="1" valign="top" align="left">This option describes the length of time (in milliseconds) that a launch will wait to complete the launching process before giving up and terminating. This option has no bearing on the length of time a program will run, only how long the process of <em>trying</em> to run a program will wait </td>
-      <td colspan="1" valign="top" align="left">20000</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Warn when unable to install breakpoint due to missing line number attributes </td>
-      <td colspan="1" valign="top" align="left">This option controls if the user will be notified if they try to set a line breakpoint on a line that has invalid line information </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail Formatters Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap Walking Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-logical_structures.htm">Logical Structures Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">Primitive Display Preferences</a> <br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step Filtering Preferences </a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Java Debug Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Java Debug Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaDebugPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Java Debug preference page" /> <b>Java > Debug</b></a>
+
+      preference page.
+    </p>
+    <p>
+      These options apply to java specific debuggers and have to do with
+      suspending options and hot code replace.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+            <p>
+
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Suspend execution on uncaught exceptions
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            <p>
+              This option controls if a program will suspend if an uncaught
+              exception is thrown.
+            </p>
+            <p>
+              For example if you try to call a method on a null object and a
+              NullPointerException is thrown, with this option on your program
+              will suspend at the location the exception was thrown
+            </p>
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Suspend execution on compilation errors
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if a program will suspend when a compilation
+            error is encountered
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Suspend on breakpoints during evaluations
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This options controls if breakpoints will suspend during an
+            evaluation of code containing a breakpoint. For more information
+            about evaluations go <a href=
+            "../../../../tasks/task-evaluating_expressions.htm">here</a>
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Open popup when suspended on exception
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if a popup window will be displayed when
+            execution of a program stops on an exception. The exception the
+            program suspended on is made available for inspection in the popup
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Default suspend policy for new breakpoints
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option allows the default suspend policy to be set for new
+            breakpoints. The suspend policy is used by breakpoints to tell the
+            VM what to suspend, in this case either the thread the breakpoint
+            is active in or the entire running VM
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            Suspend Thread
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Show error when hot code replace fails
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if the user will be presented with an error
+            dialog when a hot code replace fails
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Show error when hot code replace is not supported
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if the user will be presented with an error
+            dialog when hot code replace is not supported, and the user has
+            made and saved changes to currently running code
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Show error when obsolete methods remain after hot code replace
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if the user will be presented with an error
+            dialog when a hot code replace completed, but there were obsolete
+            methods left over
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Replace class files containing compilation errors
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls is class files containing compilation errors
+            will be replaced
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Debugger timeout
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option describes the length of time (in milliseconds) the
+            debugger will wait trying to communicate with a running VM before
+            giving up and disconnecting
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            3000
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Launch timeout
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option describes the length of time (in milliseconds) that a
+            launch will wait to complete the launching process before giving up
+            and terminating. This option has no bearing on the length of time a
+            program will run, only how long the process of <em>trying</em> to
+            run a program will wait
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            20000
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Warn when unable to install breakpoint due to missing line number
+            attributes
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if the user will be notified if they try to
+            set a line breakpoint on a line that has invalid line information
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+
+    <p>
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+    </p>
+    <p>
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail
+      Formatters Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap
+      Walking Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-logical_structures.htm">
+      Logical Structures Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">
+      Primitive Display Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step
+      Filtering Preferences</a>
+    </p>
+
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-detail_formatters.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-detail_formatters.htm
index 108d6e3..a0935e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-detail_formatters.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-detail_formatters.htm
@@ -1,80 +1,211 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Detail Formatters Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> Detail Formatters Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaDetailFormattersPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Detail Formatters preference page"> <b>Java > Debug > Detail Formatters</b></a> preference page.</p>
-<p>These preferences are used to create and manage detail formatters, which are used in the details panes of variables views, or for variable labels themselves. </p>
-<table border="1" cellspacing="0" cellpadding= "5" summary="Detail formatters preferences">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Types with detail formatters </td>
-      <td colspan="1" valign="top" align="left">The listing of types that currently have detail formatters (the list itself), and the enabled state of the detail formatter, i.e. if it is on use (the checked state of a list item) </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Add button </td>
-      <td colspan="1" valign="top" align="left">Used to add a new detail formatter to the current listing </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Edit button </td>
-      <td colspan="1" valign="top" align="left">Used to edit the selected detail formatter </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Remove button </td>
-      <td colspan="1" valign="top" align="left">Used to remove the selected detail formatter </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Detail formatter code snippet for selected type </td>
-      <td colspan="1" valign="top" align="left">Displays the current code snippet in use for the detail formatter of the selected type. This field is not editable, the only way to edit a detail formatter is to use the Edit... button </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Show variables details </td>
-      <td colspan="1" valign="top" align="left"><p>This option controls where you want to see the detail formatter appear, you have one of three choices:</p>
-        <ul>
-          <li>As a label for variables with detail formatters - will appear as the primary display label only for associated variables the have detail formatters </li>
-          <li>As a label for all variables - will appear for all associated variables, regardless of them having detail formatters already </li>
-          <li>In detail pane only - will only appear in variables view details panes and nowhere else </li>
-      </ul></td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap Walking Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-logical_structures.htm">Logical Structures Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">Primitive Display Preferences</a> <br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step Filtering Preferences </a>
-</p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Detail Formatters Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Detail Formatters Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaDetailFormattersPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Detail Formatters preference page" /> <b>Java > Debug >
+
+      Detail Formatters</b></a> preference page.
+    </p>
+    <p>
+      These preferences are used to create and manage detail formatters, which
+      are used in the details panes of variables views, or for variable labels
+      themselves.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5" summary=
+    "Detail formatters preferences">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Types with detail formatters
+          </td>
+          <td colspan="1" valign="top" align="left">
+            The listing of types that currently have detail formatters (the
+            list itself), and the enabled state of the detail formatter, i.e.
+            if it is on use (the checked state of a list item)
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+
+          <td colspan="1" valign="top" align="left">
+            Add button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to add a new detail formatter to the current listing
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Edit button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to edit the selected detail formatter
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Remove button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to remove the selected detail formatter
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Detail formatter code snippet for selected type
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Displays the current code snippet in use for the detail formatter
+            of the selected type. This field is not editable, the only way to
+            edit a detail formatter is to use the Edit... button
+          </td>
+          <td colspan="1" valign="top" align="left">
+
+             
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Show variables details
+          </td>
+          <td colspan="1" valign="top" align="left">
+            <p>
+
+              This option controls where you want to see the detail formatter
+              appear, you have one of three choices:
+            </p>
+            <ul>
+              <li>As a label for variables with detail formatters - will appear
+              as the primary display label only for associated variables the
+              have detail formatters
+              </li>
+              <li>As a label for all variables - will appear for all associated
+              variables, regardless of them having detail formatters already
+              </li>
+              <li>In detail pane only - will only appear in variables view
+              details panes and nowhere else
+              </li>
+            </ul>
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+
+    <p>
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+    </p>
+    <p>
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap
+      Walking Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+      <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-logical_structures.htm">
+      Logical Structures Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">
+      Primitive Display Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step
+      Filtering Preferences</a>
+    </p>
+
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-execution_environments.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-execution_environments.htm
index 040a471..dbb6008 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-execution_environments.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-execution_environments.htm
@@ -1,56 +1,150 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Execution Environments Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Execution Environments Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.jreProfiles)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Execution Environments preference page"> <b>Java > Execution Environments</b></a> preference page.</p>
-<p>These preferences describe all of the available execution environments,  allowing default JRE installations to be specified for any given environment. </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Execution environments </td>
-      <td colspan="1" valign="top" align="left">The listing of all available execution environments </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Compatible JREs </td>
-      <td colspan="1" valign="top" align="left"><p>The listing of compatible JRE installations that are compatible with the selected execution environment. You can select one (or none) of the installations to use as the default for the selected execution environment </p>
-        <p>Any JRE installations that perfectly match the execution environment are marked with a label '(perfect match)'</p></td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Environment description </td>
-      <td colspan="1" valign="top" align="left">Provides a description of the selected execution environment </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Execution Environments Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Execution Environments Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.jreProfiles)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Execution Environments preference page" /> <b>Java >
+
+      Execution Environments</b></a> preference page.
+    </p>
+    <p>
+      These preferences describe all of the available execution environments,
+      allowing default JRE installations to be specified for any given
+      environment.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Execution environments
+          </td>
+          <td colspan="1" valign="top" align="left">
+            The listing of all available execution environments
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+
+          <td colspan="1" valign="top" align="left">
+            Compatible JREs
+          </td>
+          <td colspan="1" valign="top" align="left">
+            <p>
+              The listing of compatible JRE installations that are compatible
+              with the selected execution environment. You can select one (or
+              none) of the installations to use as the default for the selected
+              execution environment
+            </p>
+            <p>
+              Any JRE installations that perfectly match the execution
+              environment are marked with a label '(perfect match)'
+            </p>
+
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Environment description
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            Provides a description of the selected execution environment
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <p>
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+    </p>
+    <p>
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+      <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-heap_walking.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-heap_walking.htm
index 002175f..f3fd7e4 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-heap_walking.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-heap_walking.htm
@@ -1,54 +1,146 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Heap Walking Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Heap Walking Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.heapWalking)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Heap Walking preference page"> <b>Java > Debug > Heap Walking</b></a> preference page.</p>
-<p>These preferences allow count settings for Java 1.6 heap walking features to be changed.</p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Maximum instances to display </td>
-      <td colspan="1" valign="top" align="left">The maximum number of type instances to display using the <a href="../../../../reference/views/shared/ref-allinstances.htm">all instances command</a>. Entering zero will always show all of the instances of the selected type in the current VM </td>
-      <td colspan="1" valign="top" align="left">100</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Maximum references to display </td>
-      <td colspan="1" valign="top" align="left">The maximum number of type references to display using the <a href="../../../../reference/views/shared/ref-allreferences.htm">all references command</a>. Entering zero will always show all of the references to the selected type in the current VM </td>
-      <td colspan="1" valign="top" align="left">100</td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail Formatters Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-logical_structures.htm">Logical Structures Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">Primitive Display Preferences</a> <br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step Filtering Preferences </a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Heap Walking Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Heap Walking Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.heapWalking)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Heap Walking preference page" /> <b>Java > Debug > Heap
+      Walking</b></a> preference page.
+    </p>
+
+    <p>
+      These preferences allow count settings for Java 1.6 heap walking features
+      to be changed.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+            <p>
+              Option
+            </p>
+
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Default
+            </p>
+
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Maximum instances to display
+          </td>
+          <td colspan="1" valign="top" align="left">
+
+            The maximum number of type instances to display using the <a href=
+            "../../../../reference/views/shared/ref-allinstances.htm">all
+            instances command</a>. Entering zero will always show all of the
+            instances of the selected type in the current VM
+          </td>
+          <td colspan="1" valign="top" align="left">
+            100
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Maximum references to display
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            The maximum number of type references to display using the <a href=
+            "../../../../reference/views/shared/ref-allreferences.htm">all
+            references command</a>. Entering zero will always show all of the
+            references to the selected type in the current VM
+          </td>
+          <td colspan="1" valign="top" align="left">
+            100
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <p>
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+    </p>
+    <p>
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail
+      Formatters Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+
+      <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-logical_structures.htm">
+      Logical Structures Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">
+      Primitive Display Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step
+      Filtering Preferences</a>
+
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-installed_jres.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-installed_jres.htm
index 580c3be..e3409cd 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-installed_jres.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-installed_jres.htm
@@ -1,76 +1,184 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Installed JREs Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> Installed JREs Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.preferences.VMPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Installed JREs preference page"> <b>Java > Installed JREs</b></a> preference page.</p>
-<p>This page allows a <a href="../../../../tasks/task-assign_default_jre.htm">default JRE to be selected</a> as well as adding new JRE installations. </p>
-<table border="1" cellspacing="0" cellpadding= "5" summary="Installed JREs Preferences">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Installed JREs </td>
-      <td colspan="1" valign="top" align="left">The current listing of installed JREs, allowing you to select the one to act as the workspace default </td>
-    </tr>
-    <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> <a href="../../../../tasks/task-add_new_jre.htm">Add...</a></p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Adds a new JRE 
-          definition to the workbench.</p></td>
-    </tr>
-    <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> <a href="../../../../tasks/tasks-JREs.htm">Edit...</a> </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Allows you to 
-          edit the selected JRE. </p></td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Duplicate...</td>
-      <td colspan="1" valign="top" align="left">Creates a new JRE with the same 
-        attributes as the selected JRE.</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left"><a href="../../../../tasks/tasks-deleteJRE.htm">Remove</a></td>
-      <td colspan="1" valign="top" align="left">Removes the selected JRE from 
-        the workbench.</td>
-    </tr>
-    <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Search... </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Automatically 
-          searches for JREs installed in the local file system and creates corresponding 
-          JRE definitions in the workspace.</p></td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/concept-classpath-variables.htm">Classpath Variables</a><br>
-  <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/tasks-JREs.htm">Working with JREs</a><br>
-  <a href="../../../../tasks/task-add_new_jre.htm">Adding a new JRE definition</a><br>
-  <a href="../../../../tasks/tasks-deleteJRE.htm">Deleting a JRE definition</a><br>
-  <a href="../../../../tasks/task-assign_default_jre.htm">Assigning the default JRE for the workbench</a><br>
-  <a href="../../../../tasks/task-choose_config_jre.htm">Choosing a JRE for launching a project</a><br>
-  <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a></p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../../reference/preferences/java/debug/ref-execution_environments.htm">Execution Environment Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../../reference/ref-properties-source-attachment.htm">Source Attachment</a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Installed JREs Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Installed JREs Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.preferences.VMPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Installed JREs preference page" /> <b>Java > Installed
+      JREs</b></a> preference page.
+    </p>
+
+    <p>
+      This page allows a <a href=
+      "../../../../tasks/task-assign_default_jre.htm">default JRE to be
+      selected</a> as well as adding new JRE installations.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5" summary=
+    "Installed JREs Preferences">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+            <p>
+
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+        </tr>
+      </thead>
+
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Installed JREs
+          </td>
+          <td colspan="1" valign="top" align="left">
+            The current listing of installed JREs, allowing you to select the
+            one to act as the workspace default
+          </td>
+        </tr>
+        <tr>
+
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              <a href="../../../../tasks/task-add_new_jre.htm">Add...</a>
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Adds a new JRE definition to the workbench.
+            </p>
+
+          </td>
+        </tr>
+        <tr>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              <a href="../../../../tasks/tasks-JREs.htm">Edit...</a>
+            </p>
+          </td>
+
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Allows you to edit the selected JRE.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Duplicate...
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            Creates a new JRE with the same attributes as the selected JRE.
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            <a href="../../../../tasks/tasks-deleteJRE.htm">Remove</a>
+          </td>
+          <td colspan="1" valign="top" align="left">
+
+            Removes the selected JRE from the workbench.
+          </td>
+        </tr>
+        <tr>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Search...
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+
+            <p>
+              Automatically searches for JREs installed in the local file
+              system and creates corresponding JRE definitions in the
+              workspace.
+            </p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+
+    </p>
+    <p>
+      <a href="../../../../concepts/concept-classpath-variables.htm">Classpath
+      Variables</a><br />
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+    </p>
+    <p>
+      <a href="../../../../tasks/tasks-JREs.htm">Working with JREs</a><br />
+      <a href="../../../../tasks/task-add_new_jre.htm">Adding a new JRE
+      definition</a><br />
+
+      <a href="../../../../tasks/tasks-deleteJRE.htm">Deleting a JRE
+      definition</a><br />
+      <a href="../../../../tasks/task-assign_default_jre.htm">Assigning the
+      default JRE for the workbench</a><br />
+      <a href="../../../../tasks/task-choose_config_jre.htm">Choosing a JRE for
+      launching a project</a><br />
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-execution_environments.htm">
+      Execution Environment Preferences</a><br />
+      <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+
+      <a href=
+      "../../../../reference/ref-properties-source-attachment.htm">Source
+      Attachment</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-logical_structures.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-logical_structures.htm
index 4c3519f..b37584a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-logical_structures.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-logical_structures.htm
@@ -1,69 +1,181 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Logical Structures Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Logical Structures Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaLogicalStructuresPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Logical Structures preference page"> <b>Java > Debug > Logical Structures</b></a> preference page.</p>
-<p>These preferences are used to add, edit and remove logical structures, which are used to display collection-type objects </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Logical Structures </td>
-      <td colspan="1" valign="top" align="left">Shows a listing of all of the current logical structures available. Note that logical structures with a yellow background cannot be edited or removed </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Add button </td>
-      <td colspan="1" valign="top" align="left">Used to add a new logical structure to the listing </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Edit button </td>
-      <td colspan="1" valign="top" align="left">Used to edit the selected logical structure </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Remove button </td>
-      <td colspan="1" valign="top" align="left">Used to remove the selected logical structure</td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Preview</td>
-      <td colspan="1" valign="top" align="left">Shows the code snippet to the selected logical structure. This preview is not editable, you must use the <strong>Edit... </strong>button to edit a logical structure </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail Formatters Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap Walking Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">Primitive Display Preferences</a> <br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step Filtering Preferences </a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Logical Structures Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Logical Structures Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaLogicalStructuresPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Logical Structures preference page" /> <b>Java > Debug >
+
+      Logical Structures</b></a> preference page.
+    </p>
+    <p>
+      These preferences are used to add, edit and remove logical structures,
+      which are used to display collection-type objects
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Logical Structures
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Shows a listing of all of the current logical structures available.
+            Note that logical structures with a yellow background cannot be
+            edited or removed
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+
+          <td colspan="1" valign="top" align="left">
+            Add button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to add a new logical structure to the listing
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Edit button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to edit the selected logical structure
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Remove button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to remove the selected logical structure
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Preview
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Shows the code snippet to the selected logical structure. This
+            preview is not editable, you must use the <strong>Edit...</strong>
+
+            button to edit a logical structure
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+    </p>
+    <p>
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+
+    </p>
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail
+      Formatters Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap
+      Walking Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+
+      <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">
+      Primitive Display Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step
+      Filtering Preferences</a>
+    </p>
+  </body>
+
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm
index 4ffa540..abef947 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-primitive_display_options.htm
@@ -1,59 +1,155 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Primitive Display Options Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Primitive Display Options Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaPrimitivesPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Primitive Display Options preference page"> <b>Java > Debug > Primitive Display Options</b></a> preference page.</p>
-<p>These preferences affect how primitive values are displayed (int, double, etc). </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Display hexadecimal values (byte, short, char, int, long) </td>
-      <td colspan="1" valign="top" align="left">This option controls whether hexadecimal values will be displayed for the primitive types byte, short, char, int and long </td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Display ASCII char value (byte, short, int, long) </td>
-      <td colspan="1" valign="top" align="left">This option controls whether ASCII char values will be displayed for the primitive types byte, short, int and long </td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Display unsigned values (byte) </td>
-      <td colspan="1" valign="top" align="left">This option controls whether unsigned values will be displayed for bytes </td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail Formatters Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap Walking Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-logical_structures.htm">Logical Structures Preferences</a> <br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step Filtering Preferences </a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Primitive Display Options Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Primitive Display Options Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaPrimitivesPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Primitive Display Options preference page" /> <b>Java >
+
+      Debug > Primitive Display Options</b></a> preference page.
+    </p>
+    <p>
+      These preferences affect how primitive values are displayed (int, double,
+      etc).
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+
+          <th rowspan="1" colspan="1">
+            <p>
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+
+          <th rowspan="1" colspan="1">
+            <p>
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+
+          <td colspan="1" valign="top" align="left">
+            Display hexadecimal values (byte, short, char, int, long)
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls whether hexadecimal values will be displayed
+            for the primitive types byte, short, char, int and long
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+        </tr>
+
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Display ASCII char value (byte, short, int, long)
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls whether ASCII char values will be displayed
+            for the primitive types byte, short, int and long
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Display unsigned values (byte)
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls whether unsigned values will be displayed for
+            bytes
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+
+    </p>
+    <p>
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail
+      Formatters Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap
+      Walking Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+      <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-logical_structures.htm">
+      Logical Structures Preferences</a><br />
+
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-step_filtering.htm">Step
+      Filtering Preferences</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-step_filtering.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-step_filtering.htm
index 6b99bdb..3826113 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-step_filtering.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/debug/ref-step_filtering.htm
@@ -1,111 +1,312 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Step Filtering Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Step Filtering Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaStepFilterPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Step Filtering preference page"> <b>Java > Debug > Step Filtering</b></a> preference page.</p>
-<p>These preferences are used to configure step filters and step filtering options. </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Use step filters </td>
-      <td colspan="1" valign="top" align="left">This option controls is step filtering should be enabled or not. See also the step <a href="../../../../reference/views/debug/ref-usestepfilters.htm">filtering command</a> in the <a href="../../../../reference/views/debug/ref-debug_view.htm"><strong>Debug View</strong> </a></td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Defined step filters </td>
-      <td colspan="1" valign="top" align="left">This is a listing of all of the defined step filters (the listing itself) and whether the step filters are in use or not (the checked state of step filter) </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Add Filter button </td>
-      <td colspan="1" valign="top" align="left">Used to add a new step filter that is based on a regular expression </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Add Class button </td>
-      <td colspan="1" valign="top" align="left">Used to add a new Java class to the listing of step filters </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Add Packages button </td>
-      <td colspan="1" valign="top" align="left">Used to add new Java packages to the listing of step filters </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Remove button </td>
-      <td colspan="1" valign="top" align="left">Used to remove the selected step filter(s) </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Select All button </td>
-      <td colspan="1" valign="top" align="left">Used to set all defined step filters as enabled (or checked) </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Deselect All button </td>
-      <td colspan="1" valign="top" align="left">Used to set all defined step filters as disabled (or unchecked) </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Filter synthetic methods </td>
-      <td colspan="1" valign="top" align="left">This option controls if synthetic method should always be filtered or not while stepping. This option requires that the VM used support synthetic methods </td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Filter static initializers </td>
-      <td colspan="1" valign="top" align="left">This option controls if static initializers should always be filtered or not while stepping </td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Filter constructors </td>
-      <td colspan="1" valign="top" align="left">This option controls if constructors should always be filtered or not while stepping </td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Step through filters </td>
-      <td colspan="1" valign="top" align="left"><p>This option controls step filters to always return from 
-          a filtered location or step through to a non-filtered location. </p>
-        <p>For 
-          example, if <code>java.util</code> is a filtered location, stepping 
-          into code in <code>HashMap</code> could result in a call-back to your 
-          application code to check the equality of an object. If you choose to <strong>Step through filters</strong> a step into would end up in your 
-          application code. However, when the <strong>Step through filters</strong> option is disabled, a step into <code>HashMap</code> would behave like 
-          a step over.</p></td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail Formatters Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap Walking Preferences</a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../../reference/preferences/java/debug/ref-logical_structures.htm">Logical Structures Preferences</a> <br>
-  <a href="../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">Primitive Display Preferences</a> <br>
-  <a href="../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      Step Filtering Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Step Filtering Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaStepFilterPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Step Filtering preference page" /> <b>Java > Debug >
+
+      Step Filtering</b></a> preference page.
+    </p>
+    <p>
+      These preferences are used to configure step filters and step filtering
+      options.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Use step filters
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls is step filtering should be enabled or not.
+            See also the step <a href=
+            "../../../../reference/views/debug/ref-usestepfilters.htm">filtering
+            command</a> in the <a href=
+            "../../../../reference/views/debug/ref-debug_view.htm"><strong>Debug
+            View</strong></a>
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Defined step filters
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This is a listing of all of the defined step filters (the listing
+            itself) and whether the step filters are in use or not (the checked
+            state of step filter)
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Add Filter button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to add a new step filter that is based on a regular expression
+          </td>
+          <td colspan="1" valign="top" align="left">
+
+             
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Add Class button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to add a new Java class to the listing of step filters
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Add Packages button
+          </td>
+          <td colspan="1" valign="top" align="left">
+
+            Used to add new Java packages to the listing of step filters
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Remove button
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            Used to remove the selected step filter(s)
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Select All button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to set all defined step filters as enabled (or checked)
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+
+          <td colspan="1" valign="top" align="left">
+            Deselect All button
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Used to set all defined step filters as disabled (or unchecked)
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Filter synthetic methods
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if synthetic method should always be filtered
+            or not while stepping. This option requires that the VM used
+            support synthetic methods
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Filter static initializers
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if static initializers should always be
+            filtered or not while stepping
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Filter simple getters
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if simple Java bean-style getters should
+            always be filtered or not while stepping
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Filter simple setters
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if simple Java bean-style setters should
+            always be filtered or not while stepping
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Filter constructors
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option controls if constructors should always be filtered or
+            not while stepping
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Step through filters
+          </td>
+          <td colspan="1" valign="top" align="left">
+            <p>
+              This option controls step filters to always return from a
+              filtered location or step through to a non-filtered location.
+            </p>
+            <p>
+
+              For example, if <code>java.util</code> is a filtered location,
+              stepping into code in <code>HashMap</code> could result in a
+              call-back to your application code to check the equality of an
+              object. If you choose to <strong>Step through filters</strong> a
+              step into would end up in your application code. However, when
+              the <strong>Step through filters</strong> option is disabled, a
+              step into <code>HashMap</code> would behave like a step over.
+            </p>
+
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+
+    </p>
+    <p>
+      <a href="../../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../../concepts/concept-java-views.htm">Java
+      views</a><br />
+      <a href="../../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../../concepts/cremdbug.htm">Remote debugging</a>
+
+    </p>
+    <p>
+      <img border="0" src="../../../../images/ngrelt.png" alt=
+      "Related tasks" />
+    </p>
+    <p>
+      <a href="../../../../tasks/task-launching_java_program.htm">Launching a
+      Java program</a><br />
+      <a href="../../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+
+    <p>
+      <img src="../../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-detail_formatters.htm">Detail
+      Formatters Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-heap_walking.htm">Heap
+      Walking Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+
+      <a href="../../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-logical_structures.htm">
+      Logical Structures Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/java/debug/ref-primitive_display_options.htm">
+      Primitive Display Preferences</a><br />
+      <a href=
+      "../../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a>
+    </p>
+
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-content-assist.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-content-assist.htm
index 592cbd6..212dcf6 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-content-assist.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-content-assist.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Java Content Assist Preferences</title>
 <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -27,174 +27,170 @@
 	</thead>
 	<tbody>
 		<tr>
+			<td valign="top" colspan="3"><h2>Insertion</h2></td>
+		</tr>
+		<tr>
 			<td valign="top">Completion inserts/Completion overwrites</td>
 			<td valign="top">
-			<p>If <strong>Completion inserts</strong> is on, the completion text is inserted at the caret position, so it never overwrites any existing text. <br>
-			If <strong>Completion overwrites</strong> is on, the completion text replaces the characters following the caret position until the end of the word.</p>
+			If <strong>Completion inserts</strong> is on, the completion text is inserted at the caret position, so it never overwrites any existing text. <br>
+			If <strong>Completion overwrites</strong> is on, the completion text replaces the characters following the caret position until the end of the word.
 			<p>Note that pressing <strong>Ctrl</strong> when applying a completion proposal toggles between the two insertion modes.</p>
 			</td>
 			<td valign="top">
-			<p>Completion inserts</p>
+			Completion inserts
 			</td>
 		</tr>
 		<tr>
 			<td valign="top">Insert single proposals automatically</td>
 			<td valign="top">
-			<p>If enabled, code assist will choose and insert automatically single proposals.</p>
+			If enabled, code assist will choose and insert automatically single proposals.
 			</td>
 			<td valign="top">
-			<p>On</p>
+			On
 			</td>
 		</tr>
 		<tr>
 			<td valign="top">Insert common prefixes automatically</td>
 			<td valign="top">
-			<p>If enabled, code assist will automatically insert the common prefix of all possible completions similar to Unix shell expansion. This can be used repeatedly, even while the code assist window is being displayed.</p>
+			If enabled, code assist will automatically insert the common prefix of all possible completions similar to Unix shell expansion. This can be used repeatedly, even while the code assist window is being displayed.
 			</td>
 			<td valign="top">
-			<p>Off</p>
+			Off
 			</td>
 		</tr>
 		<tr>
 			<td valign="top">Add import instead of qualified name</td>
 			<td valign="top">
-			<p>If enabled, type proposals which are in other packages will invoke the addition of the corresponding import declaration. Otherwise, the type will be inserted fully qualified.</p>
+			If enabled, type proposals which are in other packages will invoke the addition of the corresponding import declaration. Otherwise, the type will be inserted fully qualified.
 			</td>
 			<td valign="top">
-			<p>On</p>
+			On
 			</td>
 		</tr>
 		<tr>
-			<td valign="top">Use static imports</td>
+			<td valign="top" style="padding-left: 1em;">Use static imports</td>
 			<td valign="top">
-			<p>If enabled, method proposals for static methods will invoke the addition of the corresponding static import declaration. Otherwise, a non static import for the declaring type will be added.
-			</p>
+			If enabled, method proposals for static methods will invoke the addition of the corresponding static import declaration. Otherwise, a non static import for the declaring type will be added.
 			<p>Add the method or type containing the method to the <a href="ref-preferences-content-assist-favorites.htm">Favorites</a> preference page to get a proposal for such methods.
 			</p>
 			</td>
 			<td valign="top">
-			<p>On</p>
+			On
 			</td>
 		</tr>
 		<tr>
 			<td valign="top">Fill method arguments and show guessed arguments</td>
 			<td valign="top">
-			<p>If enabled, code assist will add argument when completing a method. It will also offer matching variables, fields or method invocations from the context where a method proposal is inserted.</p>
+			If enabled, code assist will add argument when completing a method. It will also offer matching variables, fields or method invocations from the context where a method proposal is inserted.
 			</td>
 			<td valign="top">
-			<p>On</p>
+			On
 			</td>
 		</tr>
 		<tr>
 			<td valign="top" style="padding-left: 1em;">Insert parameter names</td>
 			<td valign="top">
-			<p>If selected, code assist will fill the arguments with the parameter names used in the method declaration.</p>
+			If selected, code assist will fill the arguments with the parameter names used in the method declaration.
 			</td>
 			<td valign="top">
-			<p>Off</p>
+			Off
 			</td>
 		</tr>
 		<tr>
 			<td valign="top" style="padding-left: 1em;">Insert best guessed arguments</td>
 			<td valign="top">
-			<p>If selected, code assist will fill the arguments with the best matching variable, field or method invocation from the context where a method proposal is inserted.</p>
+			If selected, code assist will fill the arguments with the best matching variable, field or method invocation from the context where a method proposal is inserted.
 			</td>
 			<td valign="top">
-			<p>Off</p>
+			Off
 			</td>
-		</tr>		
+		</tr>
+		
 		<tr>
-			<td valign="top">Sort proposals</td>
-			<td valign="top">
-			<p>Select how the proposals should be sorted in the content assist pop up.</p>
-			</td>
-			<td valign="top">
-			<p>by relevance</p>
-			</td>
+			<td valign="top" colspan="3"><h2>Sorting and Filtering</h2></td>
 		</tr>
 		<tr>
-			<td valign="top">Hide proposals not visible in the invocation context</td>
-			<td valign="top">
-			<p>If enabled, the Java element proposals are limited by the rules of visibility. For example, private field proposals of other classes would not be displayed.</p>
-			</td>
-			<td valign="top">
-			<p>On</p>
-			</td>
+			<td valign="top" colspan="3">Configure <a href="../appearance/ref-preferences-type-filters.htm">Type Filters</a>.</td>
 		</tr>
 		<tr>
-			<td valign="top">Show camel case matches</td>
+			<td valign="top">Sort proposals</td>
 			<td valign="top">
-			<p>If enabled, camel case matches are displayed (i.e. NPE is expanded to NullPointerException).</p>
+			Select how the proposals should be sorted in the content assist pop up.
 			</td>
 			<td valign="top">
-			<p>On</p>
+			by relevance
 			</td>
 		</tr>
 		<tr>
-			<td valign="top">Hide forbidden references</td>
+			<td valign="top">Show camel case matches</td>
 			<td valign="top">
-			<p>If enabled, references to Java elements forbidden by access rules are not displayed.</p>
+			If enabled, camel case matches are displayed (i.e. NPE is expanded to NullPointerException).
 			</td>
 			<td valign="top">
-			<p>On</p>
+			On
 			</td>
 		</tr>
 		<tr>
-			<td valign="top">Hide discouraged references</td>
+			<td valign="top">Hide proposals not visible in the invocation context</td>
 			<td valign="top">
-			<p>If enabled, references to Java elements discouraged by access rules are not displayed.</p>
+			If enabled, the Java element proposals are limited by the rules of visibility. For example, private field proposals of other classes would not be displayed.
 			</td>
 			<td valign="top">
-			<p>Off</p>
+			On
 			</td>
 		</tr>
 		<tr>
 			<td valign="top">Hide deprecated references</td>
 			<td valign="top">
-			<p>If enabled, references to deprecated Java elements are not displayed.</p>
+			If enabled, references to deprecated Java elements are not displayed.
 			</td>
 			<td valign="top">
-			<p>Off</p>
+			Off
 			</td>
 		</tr>
+		
+		<tr>
+			<td valign="top" colspan="3"><h2>Auto Activation</h2></td>
+		</tr>
 		<tr>
 			<td valign="top">Enable auto activation</td>
 			<td valign="top">
-			<p>If enabled, code assist can be invoked automatically.</p>
+			If enabled, code assist can be invoked automatically.
 			<p>The condition for automatic invocation is specified with the preferences <strong>Auto activation delay</strong>, <strong>Auto activation triggers for Java</strong> and <strong>Auto activation triggers for Javadoc</strong>.</p>
 			</td>
 			<td valign="top">
-			<p>On</p>
+			On
 			</td>
 		</tr>
 		<tr>
 			<td valign="top">Auto activation delay</td>
 			<td valign="top">
-			<p>If the time starting when an auto activation trigger character is encountered until a new character is typed exceeds the auto activation delay, code assist is invoked.</p>
+			The time in milliseconds after which code assist is triggered after an auto activation trigger character is encountered and no other character has been typed.
 			</td>
 			<td valign="top">200</td>
 		</tr>
 		<tr>
 			<td valign="top">Auto activation triggers for Java</td>
 			<td valign="top">
-			<p>If one of the trigger characters is typed inside Java source code (but not inside a Javadoc comment) and no other character is typed before the auto activation delay times out, the code assist is invoked.</p>
+			If one of the trigger characters is typed inside Java source code (but not inside a Javadoc comment) and no other character is typed before the auto activation delay times out, the code assist is invoked.
 			</td>
 			<td valign="top">
-			<p>'.'</p>
+			'.'
 			</td>
 		</tr>
 		<tr>
 			<td valign="top">Auto activation triggers for Javadoc</td>
 			<td valign="top">
-			<p>If one of the trigger characters is typed inside a Java doc and no other character is typed before the auto activation delay times out, the code assist is invoked.</p>
+			If one of the trigger characters is typed inside a Java doc and no other character is typed before the auto activation delay times out, the code assist is invoked.
 			</td>
 			<td valign="top">
-			<p>'@#'</p>
+			'@#'
 			</td>
 		</tr>
 	</tbody>
 </table>
 <p><img src="../../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="../../../../reference/ref-java-editor-code-assist.htm">Content/Code Assist</a></p>
+<p><a href="../../../../reference/ref-java-editor-code-assist.htm">Content/Code Assist</a><br>
+<a href="../appearance/ref-preferences-type-filters.htm">Type Filters</a></p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-typing.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-typing.htm
index b125feb..fd344a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-typing.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/editor/ref-preferences-typing.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Java Editor Typing Preferences</title>
 <link rel="stylesheet" href="../../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -9,7 +9,8 @@
 </head>
 <body>
 <h1>Java Editor Typing Preferences</h1>
-<p>Indicate your preferences for the Typing settings on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.SmartTypingPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Typing preference page"><b> Java > Editor > Typing </b></a> preference page.</p>
+<p>Indicate your preferences for the smart insert settings on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.SmartTypingPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Typing preference page"><b> Java > Editor > Typing </b></a> preference page.
+Those preferences are only considered if <b>Smart Insert Mode</b> appears in the status line. This can be toggled in the <b>Edit</b> menu.</p>
 <table border="1" cellspacing="0" cellpadding="5" summary="Typing settings">
 	<thead>
 		<tr>
@@ -49,10 +50,21 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<p>Enter key adjusts the indentation on the new line</p>
+			</td>
+			<td valign="top">
+			<p>If enabled, smart indentation will be used to indent the new line after pressing the 'Enter' key.</p>
+			</td>
+			<td valign="top">
+			<p>On</p>
+			</td>
+		</tr>
+		<tr>
+			<td valign="top">
 			<p>Tab key adjusts the indentation of the current line</p>
 			</td>
 			<td valign="top">
-			<p>If enabled then the tab key can be used to indent the current line.</p>
+			<p>If enabled then the 'Tab' key can be used to indent the current line.</p>
 			</td>
 			<td valign="top">
 			<p>On</p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-appearance.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-appearance.htm
index 5c1d848..39bcb5d 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-appearance.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-appearance.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <title>Java Appearance Preferences</title>
     <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -150,6 +150,23 @@
         <tr>
           <td valign="top">
             <p>
+              Abbreviate package names
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              If enabled, package names are abbreviated according to the specified abbreviation rules.
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Off
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <p>
               Stack views vertically in the Java Browsing perspective
             </p>
           </td>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-junit.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-junit.htm
index e87cdbd..648a42f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-junit.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/java/ref-preferences-junit.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <title>
       JUnit Preferences
@@ -41,6 +41,14 @@
 		</tr>
 		<tr>
 			<td valign="top" width="25%">
+			<p>Show newly launched test in all JUnit views</p>
+			</td>
+			<td valign="top">
+			<p>By default, a new JUnit test run only shows up in the window where the test was started. Enable this option, if you prefer to see the latest test in all open JUnit views.</p>
+			</td>
+		</tr>
+		<tr>
+			<td valign="top" width="25%">
 			<p>Add Filter</p>
 			</td>
 			<td valign="top">
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-default_launchers.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-default_launchers.PNG
index c2d4b1c..42690cf 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-default_launchers.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-default_launchers.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-ext_string_subbed.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-ext_string_subbed.PNG
index 25a78cb..47bdabe 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-ext_string_subbed.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-ext_string_subbed.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-lcd_string_subbed.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-lcd_string_subbed.PNG
index 0bd756d..a542f0d 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-lcd_string_subbed.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-lcd_string_subbed.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-string_sub.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-string_sub.PNG
index a5b2ad3..e54b375 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-string_sub.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/images/ref-string_sub.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-console.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-console.htm
index 5476195..ea93634 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-console.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-console.htm
@@ -1,105 +1,272 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Console Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</head>
-<body>
-<h1> Console Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.ConsolePreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Console preference page"> <b>Run/Debug > Console</b></a> preference page.  </p>
-<p>The console displays output from running applications, and allows keyboard input to be read by
-  running applications. </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Fixed width console </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> This preference controls whether the console has a fixed character width. 
-          When on, a maximum character width must also be specified. Some applications 
-          write long lines to the console which require horizontal scrolling to 
-          read. This can be avoided by setting the console to use a fixed width, 
-          automatically wrapping console output. </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Off </p></td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Limit console output</td>
-      <td colspan="1" valign="top" align="left">This preference limits the number 
-        of characters buffered in the console. When on, a maximum buffer size must 
-        also be specified. When console output surpasses the specified maximum, 
-        output is truncated from the beginning of the buffer.</td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Displayed Tab Width </td>
-      <td colspan="1" valign="top" align="left">Allows the default width, in characters, of a tab to be specified </td>
-      <td colspan="1" valign="top" align="left">8</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Show When Program Writes to Standard Out </td>
-      <td colspan="1" valign="top" align="left">This preference will force the console to show when something is written to the system out stream. A forced-show can mean that a console will be opened, or that the console will be brought to the top if it is already open. </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Show When Program Writes to Standard Error </td>
-      <td colspan="1" valign="top" align="left">This preference will force the console to show when something is written to the system err stream. A forced-show can mean that a console will be opened, or that the console will be brought to the top if it is already open. </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Standard Out Text Color </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> This preference controls the color of text written to the standard output 
-          stream by an application. </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Black </p></td>
-    </tr>
-    <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Standard Error Text Color </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> This preference controls the color of text written to the standard error 
-          stream by an application. </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Red </p></td>
-    </tr>
-    <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Standard In Text Color </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> This preference controls the color of text typed into the console to 
-          be read by an application. </p></td>
-      <td rowspan="1" colspan="1" valign="top" align="left"><p> Green </p></td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Background Color </td>
-      <td colspan="1" valign="top" align="left">This preference controls the color of the background of the console </td>
-      <td colspan="1" valign="top" align="left">White</td>
-    </tr>
-  </tbody>
-</table>
-<p> You can also click the <strong>Change</strong> button to set the font for the Console. </p>
-<p><img src="../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../concepts/cdebugger.htm">Debugger</a><br>
-<a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../concepts/cremdbug.htm">Remote debugging</a>
-</p>
-<p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../tasks/task-running_and_debugging.htm">Running and debugging</a>
-</p>
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="../../../reference/views/console/ref-console_view.htm">Console View</a><br>
-  <a href="../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a>  <br>
-  <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../reference/preferences/run-debug/ref-launching.htm">Launching Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-perspectives.htm">Perspectives Preferences</a>  <br>
-  <a href="../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-string_substitution.htm">String Substitution Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-view_management.htm">View Management Preferences</a>
-</p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Console Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Console Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.ConsolePreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Console preference page" /> <b>Run/Debug > Console</b></a>
+
+      preference page.
+    </p>
+    <p>
+      The console displays output from running applications, and allows
+      keyboard input to be read by running applications.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+            <p>
+
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+
+              Fixed width console
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              This preference controls whether the console has a fixed
+              character width. When on, a maximum character width must also be
+              specified. Some applications write long lines to the console
+              which require horizontal scrolling to read. This can be avoided
+              by setting the console to use a fixed width, automatically
+              wrapping console output.
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+
+              Off
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Limit console output
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This preference limits the number of characters buffered in the
+            console. When on, a maximum buffer size must also be specified.
+            When console output surpasses the specified maximum, output is
+            truncated from the beginning of the buffer.
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Displayed Tab Width
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Allows the default width, in characters, of a tab to be specified
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            8
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Show When Program Writes to Standard Out
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This preference will force the console to show when something is
+            written to the system out stream. A forced-show can mean that a
+            console will be opened, or that the console will be brought to the
+            top if it is already open.
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Show When Program Writes to Standard Error
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This preference will force the console to show when something is
+            written to the system err stream. A forced-show can mean that a
+            console will be opened, or that the console will be brought to the
+            top if it is already open.
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Standard Out Text Color
+            </p>
+          </td>
+
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              This preference controls the color of text written to the
+              standard output stream by an application.
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Black
+            </p>
+          </td>
+
+        </tr>
+        <tr>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Standard Error Text Color
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+
+              This preference controls the color of text written to the
+              standard error stream by an application.
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Red
+            </p>
+          </td>
+        </tr>
+        <tr>
+
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Standard In Text Color
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              This preference controls the color of text typed into the console
+              to be read by an application.
+            </p>
+          </td>
+
+          <td rowspan="1" colspan="1" valign="top" align="left">
+            <p>
+              Green
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Background Color
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            This preference controls the color of the background of the console
+          </td>
+          <td colspan="1" valign="top" align="left">
+            White
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+
+      You can also click the <strong>Change</strong> button to set the font for
+      the Console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../concepts/cdebugger.htm">Debugger</a><br />
+
+      <a href="../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../concepts/concept-java-views.htm">Java views</a><br />
+      <a href="../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" />
+
+    </p>
+    <p>
+      <a href="../../../tasks/task-launching_java_program.htm">Launching a Java
+      program</a><br />
+      <a href="../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+
+    <p>
+      <a href="../../../reference/views/console/ref-console_view.htm">Console
+      View</a><br />
+      <a href=
+      "../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+      <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-launching.htm">Launching
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-perspectives.htm">Perspectives
+      Preferences</a><br />
+
+      <a href=
+      "../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-string_substitution.htm">String
+      Substitution Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-view_management.htm">View
+      Management Preferences</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-default_launchers.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-default_launchers.htm
index a1ff44a..0620c9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-default_launchers.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-default_launchers.htm
@@ -1,34 +1,99 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Default Launchers Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> Default Launchers Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchDelegatesPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Default Launchers preference page"> <b>Run/Debug > Launching > Default Launchers</b></a> preference page.</p>
-<p>The <strong>Default Launchers</strong> preference allows you to select what launch tooling is to be used if more than one kind of tooling exists for the same thing, for example, consider using two profilers at the same time for Java programs. For the most part, this page remains disabled, as concurrent overlapping tooling is very rare, but in the event there is overlap, the page will enable and present the user with the launch types that conflict and what modes they conflict on.</p>
-<p>The following image shows the page with conflicting tooling for Java types in the <em>run</em>, <em>debug</em> and <em>Alternate2</em> modes. In this example a preferred launcher can be selected independently for each of the conflicting modes. </p>
-<p><img src="../../../reference/preferences/run-debug/images/ref-default_launchers.PNG" alt="Default Launchers Example"> </p>
-<p><img src="../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../reference/preferences/run-debug/ref-launch_configurations.htm">Launch Configurations Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-launching.htm">Launching Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-</p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Default Launchers Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Default Launchers Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchDelegatesPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Default Launchers preference page" /> <b>Run/Debug >
+
+      Launching > Default Launchers</b></a> preference page.
+    </p>
+    <p>
+      The <strong>Default Launchers</strong> preference allows you to select
+      what launch tooling is to be used if more than one kind of tooling exists
+      for the same thing, for example, consider using two profilers at the same
+      time for Java programs. For the most part, this page remains disabled, as
+      concurrent overlapping tooling is very rare, but in the event there is
+      overlap, the page will enable and present the user with the launch types
+      that conflict and what modes they conflict on.
+    </p>
+    <p>
+
+      The following image shows the page with conflicting tooling for Java
+      types in the <em>run</em>, <em>debug</em> and <em>Alternate2</em> modes.
+      In this example a preferred launcher can be selected independently for
+      each of the conflicting modes.
+    </p>
+    <p>
+      <img src=
+      "../../../reference/preferences/run-debug/images/ref-default_launchers.PNG"
+      alt="Default Launchers Example" />
+    </p>
+
+    <p>
+      <img src="../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../concepts/concept-java-views.htm">Java views</a><br />
+
+      <a href="../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" />
+    </p>
+    <p>
+      <a href="../../../tasks/task-launching_java_program.htm">Launching a Java
+      program</a><br />
+
+      <a href="../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+      <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+
+      <a href=
+      "../../../reference/preferences/run-debug/ref-launch_configurations.htm">Launch
+      Configurations Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-launching.htm">Launching
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm
index 8d8eb9f..7b52ed4 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-launch_configurations.htm
@@ -1,74 +1,209 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Launch Configurations Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> Launch Configurations Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchConfigurations)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Launch Configurations preference page"> <b>Run/Debug > Launching > Launch Configurations</b></a> preference page.</p>
-<p>This page allows you set filtering options that are used throughout the workbench  to limit the exposure of certain kinds of launch configurations. These filtering setting affect the launch dialog, launch histories and the workbench. </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Filter configurations in closed projects </td>
-      <td colspan="1" valign="top" align="left">Filter out configurations that are associated with a project that is currently closed </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Filters configuration in deleted or missing projects </td>
-      <td colspan="1" valign="top" align="left">Filter out configurations that are associated with a project that has been deleted or are simply no longer available (not in the workspace, etc) </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Apply windows working set </td>
-      <td colspan="1" valign="top" align="left">Applies the filtering from any working sets currently active to the visibility of configurations associated to resources in the active working sets. i.e. if project P has two configurations associated with it, but is not in the currently active working set, the configurations do not appear in the UI, much like P does not. </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Filter check configuration types </td>
-      <td colspan="1" valign="top" align="left">Filter all configurations of the selected type regardless of the other filtering options. For example if you specify to filter Java type configurations, all Java type configurations will be filtered from the UI, not just ones that fall under the other filtering categories. </td>
-      <td colspan="1" valign="top" align="left">Off</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Delete configurations when associated project is deleted </td>
-      <td colspan="1" valign="top" align="left">Any launch configurations associated with a project being deleted will also be deleted if this option is enabled. Once deleted the configurations are not recoverable. </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Migration</td>
-      <td colspan="1" valign="top" align="left"><p>As Eclipse matures and new features are added to the launching framework, there sometimes exists the need to make changes to launch configurations. Some of these changes are made automatically, but those that are not (nonreversible ones) are left up to the end-user. </p>
-        <p>The migration section allows users to self-migrate any launch configurations that require it. Upon pressing the <strong>Migrate...</strong> button, if there are any configurations requiring migration, they are presented to the user, and the user can select the ones they want to migrate. Configuration migration is not un-doable. </p></td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../reference/preferences/run-debug/ref-default_launchers.htm">Default Launchers Preferences</a><br>
-  <a href="../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../reference/preferences/run-debug/ref-launching.htm">Launching Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-</p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Launch Configurations Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Launch Configurations Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.LaunchConfigurations)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Launch Configurations preference page" /> <b>Run/Debug >
+
+      Launching > Launch Configurations</b></a> preference page.
+    </p>
+    <p>
+      This page allows you set filtering options that are used throughout the
+      workbench to limit the exposure of certain kinds of launch
+      configurations. These filtering setting affect the launch dialog, launch
+      histories and the workbench.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+
+          <th rowspan="1" colspan="1">
+            <p>
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+
+          <th rowspan="1" colspan="1">
+            <p>
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+
+          <td colspan="1" valign="top" align="left">
+            Filter configurations in closed projects
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Filter out configurations that are associated with a project that
+            is currently closed
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Filters configuration in deleted or missing projects
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Filter out configurations that are associated with a project that
+            has been deleted or are simply no longer available (not in the
+            workspace, etc)
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Apply windows working set
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Applies the filtering from any working sets currently active to the
+            visibility of configurations associated to resources in the active
+            working sets. i.e. if project P has two configurations associated
+            with it, but is not in the currently active working set, the
+            configurations do not appear in the UI, much like P does not.
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Filter check configuration types
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Filter all configurations of the selected type regardless of the
+            other filtering options. For example if you specify to filter Java
+            type configurations, all Java type configurations will be filtered
+            from the UI, not just ones that fall under the other filtering
+            categories.
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Off
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Delete configurations when associated project is deleted
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Any launch configurations associated with a project being deleted
+            will also be deleted if this option is enabled. Once deleted the
+            configurations are not recoverable.
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Migration
+          </td>
+          <td colspan="1" valign="top" align="left">
+            <p>
+              As Eclipse matures and new features are added to the launching
+              framework, there sometimes exists the need to make changes to
+              launch configurations. Some of these changes are made
+              automatically, but those that are not (nonreversible ones) are
+              left up to the end-user.
+            </p>
+            <p>
+
+              The migration section allows users to self-migrate any launch
+              configurations that require it. Upon pressing the
+              <strong>Migrate...</strong> button, if there are any
+              configurations requiring migration, they are presented to the
+              user, and the user can select the ones they want to migrate.
+              Configuration migration is not un-doable.
+            </p>
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+      </tbody>
+
+    </table>
+    <p>
+      <img src="../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../concepts/concept-java-views.htm">Java views</a><br />
+
+      <a href="../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" />
+    </p>
+    <p>
+      <a href="../../../tasks/task-launching_java_program.htm">Launching a Java
+      program</a><br />
+
+      <a href="../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../reference/preferences/run-debug/ref-default_launchers.htm">Default
+      Launchers Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+
+      <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-launching.htm">Launching
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-perspectives.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-perspectives.htm
index 7967e87..442df9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-perspectives.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-perspectives.htm
@@ -1,69 +1,179 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Perspectives Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> Perspectives Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Run/Debug Perspectives preference page"><b> Run/Debug > Perspectives</b></a> preference page.</p>
-<p>The preferences on this page allow you to set which, if any perspectives are automatically opened when launchers are used in certain modes </p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Open the associated perspective when launching </td>
-      <td colspan="1" valign="top" align="left"><p>This option controls if the specified perspective will be switched to automatically or not when launching</p>
-        <ul>
-          <li>Always - the specified perspective will always be opened</li>
-          <li>Never - the specified perspective will never be opened</li>
-          <li>Prompt - the user will be prompted to switch to the specified perspective </li>
-        </ul></td>
-      <td colspan="1" valign="top" align="left">Never</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Open the associated perspective when an application suspends </td>
-      <td colspan="1" valign="top" align="left"><p>This option controls if the specified perspective will be switched to when the application suspends </p>
-        <ul>
-          <li>Always - the specified perspective will always be opened</li>
-          <li>Never - the specified perspective will never be opened</li>
-          <li>Prompt - the user will be prompted to switch to the specified perspective </li>
-        </ul></td>
-      <td colspan="1" valign="top" align="left">Prompt</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Launcher / Perspective choices </td>
-      <td colspan="1" valign="top" align="left">This option area allows you to customize what perspective will be opened for a given launch and mode that it supports. For example, you can say that you want to open the Java perspective when using the Java JDT launcher in the run mode only. </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../reference/preferences/run-debug/ref-console.htm">Console Preferences</a><br>
-  <a href="../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../reference/preferences/run-debug/ref-launching.htm">Launching Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-string_substitution.htm">String Substitution Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-view_management.htm">View Management Preferences</a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Perspectives Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Perspectives Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Run/Debug Perspectives preference page" /> <b>Run/Debug >
+
+      Perspectives</b></a> preference page.
+    </p>
+    <p>
+      The preferences on this page allow you to set which, if any perspectives
+      are automatically opened when launchers are used in certain modes
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Option
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+
+            <p>
+              Default
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Open the associated perspective when launching
+          </td>
+          <td colspan="1" valign="top" align="left">
+            <p>
+              This option controls if the specified perspective will be
+              switched to automatically or not when launching
+            </p>
+            <ul>
+              <li>Always - the specified perspective will always be opened
+              </li>
+              <li>Never - the specified perspective will never be opened
+              </li>
+
+              <li>Prompt - the user will be prompted to switch to the specified
+              perspective
+              </li>
+            </ul>
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Never
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Open the associated perspective when an application suspends
+          </td>
+          <td colspan="1" valign="top" align="left">
+            <p>
+              This option controls if the specified perspective will be
+              switched to when the application suspends
+            </p>
+            <ul>
+              <li>Always - the specified perspective will always be opened
+              </li>
+              <li>Never - the specified perspective will never be opened
+              </li>
+
+              <li>Prompt - the user will be prompted to switch to the specified
+              perspective
+              </li>
+            </ul>
+          </td>
+          <td colspan="1" valign="top" align="left">
+            Prompt
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+
+            Launcher / Perspective choices
+          </td>
+          <td colspan="1" valign="top" align="left">
+            This option area allows you to customize what perspective will be
+            opened for a given launch and mode that it supports. For example,
+            you can say that you want to open the Java perspective when using
+            the Java JDT launcher in the run mode only.
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+      </tbody>
+
+    </table>
+    <p>
+      <img src="../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../concepts/concept-java-views.htm">Java views</a><br />
+
+      <a href="../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" />
+    </p>
+    <p>
+      <a href="../../../tasks/task-launching_java_program.htm">Launching a Java
+      program</a><br />
+
+      <a href="../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../reference/preferences/run-debug/ref-console.htm">Console
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+
+      <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-launching.htm">Launching
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-string_substitution.htm">String
+      Substitution Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-view_management.htm">View
+      Management Preferences</a>
+    </p>
+
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-string_substitution.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-string_substitution.htm
index 495c72c..b0cd593 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-string_substitution.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-string_substitution.htm
@@ -1,43 +1,147 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>String Substitution Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> String Substitution Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.StringVariablePreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the String Substitution preference page"> <b>Run/Debug > String Substitution</b></a> preference page.</p>
-<p>This preference page is used solely for the purpose of creating string variables to be reused in other locations that accept string variable substitution. </p>
-<p>The platform SDK for Eclipse uses string variables in the launch dialog for setting program and VM arguments for certain types of launch configurations, as well as allowing substitutions for Ant targets in the External Tools launch dialog. Consider the following screen shot which shows the <strong>String Substitution</strong> preference page with a new <em>TEST</em> string variable created. </p>
-<p><img src="../../../reference/preferences/run-debug/images/ref-string_sub.PNG" alt="String Substitution Page With Example TEST Variable"></p>
-<p>In this case the <em>TEST</em> variable does nothing, but in the 'real' world it could point to a directory or program that you would like to reuse the path for in configurations, etc.</p>
-<p>If we now want to leverage this new variable, we can do so from the launch dialog on the arguments tab (for those configurations that have a standard arguments tab), by selecting the <strong>Variables...</strong> button for either the program or VM arguments text area. Selecting the Variables button opens a dialog with a listing of all of the string variables available. </p>
-<p>In the following screen shot we can see the <em>TEST</em> variable available in the list.</p>
-<p><img src="../../../reference/preferences/run-debug/images/ref-string_dialog.PNG" alt="String Variable Selection Dialog"> </p>
-<p>We can now select the <em>TEST</em> variable and insert in as an argument if we wish, as shown in the following screen shot.</p>
-<p><img src="../../../reference/preferences/run-debug/images/ref-lcd_string_subbed.PNG" alt="Launch Dialog With Substituted String"> </p>
-<p>The other mentioned platform use of string substitution in the External Tools launch dialog, used with Ant configurations, as shown in the following screen shot.</p>
-<p><img src="../../../reference/preferences/run-debug/images/ref-ext_string_subbed.PNG" alt="Ant Configuration Using String Substitution"> </p>
-<p><img src="../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../reference/preferences/run-debug/ref-console.htm">Console Preferences</a><br>
-  <a href="../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../reference/preferences/run-debug/ref-launching.htm">Launching Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-perspectives.htm">Perspectives Preferences</a> <br>
-  <a href="../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-view_management.htm">View Management Preferences</a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      String Substitution Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      String Substitution Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.StringVariablePreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the String Substitution preference page" /> <b>Run/Debug >
+
+      String Substitution</b></a> preference page.
+    </p>
+    <p>
+      This preference page is used solely for the purpose of creating string
+      variables to be reused in other locations that accept string variable
+      substitution.
+    </p>
+    <p>
+      The platform SDK for Eclipse uses string variables in the launch dialog
+      for setting program and VM arguments for certain types of launch
+      configurations, as well as allowing substitutions for Ant targets in the
+      External Tools launch dialog. Consider the following screen shot which
+      shows the <strong>String Substitution</strong> preference page with a new
+      <em>TEST</em> string variable created.
+    </p>
+
+    <p>
+      <img src=
+      "../../../reference/preferences/run-debug/images/ref-string_sub.PNG" alt=
+      "String Substitution Page With Example TEST Variable" />
+    </p>
+    <p>
+      In this case the <em>TEST</em> variable does nothing, but in the 'real'
+      world it could point to a directory or program that you would like to
+      reuse the path for in configurations, etc.
+    </p>
+    <p>
+      If we now want to leverage this new variable, we can do so from the
+      launch dialog on the arguments tab (for those configurations that have a
+      standard arguments tab), by selecting the <strong>Variables...</strong>
+
+      button for either the program or VM arguments text area. Selecting the
+      Variables button opens a dialog with a listing of all of the string
+      variables available.
+    </p>
+    <p>
+      In the following screen shot we can see the <em>TEST</em> variable
+      available in the list.
+    </p>
+    <p>
+      <img src=
+      "../../../reference/preferences/run-debug/images/ref-string_dialog.PNG"
+      alt="String Variable Selection Dialog" />
+    </p>
+
+    <p>
+      We can now select the <em>TEST</em> variable and insert in as an argument
+      if we wish, as shown in the following screen shot.
+    </p>
+    <p>
+      <img src=
+      "../../../reference/preferences/run-debug/images/ref-lcd_string_subbed.PNG"
+      alt="Launch Dialog With Substituted String" />
+    </p>
+    <p>
+      The other mentioned platform use of string substitution in the External
+      Tools launch dialog, used with Ant configurations, as shown in the
+      following screen shot.
+    </p>
+
+    <p>
+      <img src=
+      "../../../reference/preferences/run-debug/images/ref-ext_string_subbed.PNG"
+      alt="Ant Configuration Using String Substitution" />
+    </p>
+    <p>
+      <img src="../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../concepts/cdebugger.htm">Debugger</a><br />
+
+      <a href="../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../concepts/concept-java-views.htm">Java views</a><br />
+      <a href="../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" />
+
+    </p>
+    <p>
+      <a href="../../../tasks/task-launching_java_program.htm">Launching a Java
+      program</a><br />
+      <a href="../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+
+    <p>
+      <a href=
+      "../../../reference/preferences/run-debug/ref-console.htm">Console
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+      <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-launching.htm">Launching
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-perspectives.htm">Perspectives
+      Preferences</a><br />
+
+      <a href=
+      "../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-view_management.htm">View
+      Management Preferences</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm
index ff9d40f..bc29924 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/preferences/run-debug/ref-view_management.htm
@@ -1,60 +1,153 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>View Management Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> View Management Preferences </h1>
-<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.ViewManagementPreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the View Management preference page"> <b>Run/Debug > View Management</b></a> preference page.</p>
-<p>These preferences allow you to configure which views will actively support automatic view opening.</p>
-<table border="1" cellspacing="0" cellpadding= "5">
-  <thead>
-    <tr>
-      <th rowspan="1" colspan="1"> <p> Option </p></th>
-      <th rowspan="1" colspan="1"> <p> Description </p></th>
-      <th rowspan="1" colspan="1"> <p> Default </p></th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td colspan="1" valign="top" align="left">Perspectives</td>
-      <td colspan="1" valign="top" align="left">The listing of perspectives to select which ones will support automatic view opening </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Do not automatically open/close views which have been manually opened/closed </td>
-      <td colspan="1" valign="top" align="left">This option controls if views manually opened/closed will be affected by view management </td>
-      <td colspan="1" valign="top" align="left">On</td>
-    </tr>
-    <tr>
-      <td colspan="1" valign="top" align="left">Reset button </td>
-      <td colspan="1" valign="top" align="left">Resets the listing of supporting perspectives. </td>
-      <td colspan="1" valign="top" align="left"> </td>
-    </tr>
-  </tbody>
-</table>
-<p><img src="../../../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p> <a href="../../../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
-  <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
-  <a href="../../../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="../../../tasks/task-running_and_debugging.htm">Running and debugging</a> </p>
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p> <a href="../../../reference/preferences/run-debug/ref-console.htm">Console Preferences</a><br>
-  <a href="../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs Preferences</a> <br>
-  <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java Debug Preferences </a><br>
-  <a href="../../../reference/preferences/run-debug/ref-launching.htm">Launching Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-perspectives.htm">Perspectives Preferences</a> <br>
-  <a href="../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug Preferences</a><br>
-  <a href="../../../reference/preferences/run-debug/ref-string_substitution.htm">String Substitution Preferences</a><br>
-</p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      View Management Preferences
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      View Management Preferences
+    </h1>
+    <p>
+      The following preferences can be set using the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.ViewManagementPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the View Management preference page" /> <b>Run/Debug > View
+      Management</b></a> preference page.
+    </p>
+
+    <p>
+      These preferences allow you to configure which views will actively
+      support automatic view opening.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <thead>
+        <tr>
+          <th rowspan="1" colspan="1">
+            <p>
+              Option
+            </p>
+
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Description
+            </p>
+          </th>
+          <th rowspan="1" colspan="1">
+            <p>
+              Default
+            </p>
+
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Perspectives
+          </td>
+          <td colspan="1" valign="top" align="left">
+
+            The listing of perspectives to select which ones will support
+            automatic view opening
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Do not automatically open/close views which have been manually
+            opened/closed
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            This option controls if views manually opened/closed will be
+            affected by view management
+          </td>
+          <td colspan="1" valign="top" align="left">
+            On
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" valign="top" align="left">
+            Reset button
+          </td>
+
+          <td colspan="1" valign="top" align="left">
+            Resets the listing of supporting perspectives.
+          </td>
+          <td colspan="1" valign="top" align="left">
+             
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <p>
+      <img src="../../../images/ngrelc.png" alt="Related concepts" border=
+      "0" />
+    </p>
+    <p>
+      <a href="../../../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../../../concepts/concept-java-perspective.htm">Java
+      perspectives</a><br />
+      <a href="../../../concepts/concept-java-views.htm">Java views</a><br />
+
+      <a href="../../../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../../../concepts/cremdbug.htm">Remote debugging</a>
+    </p>
+    <p>
+      <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" />
+    </p>
+    <p>
+      <a href="../../../tasks/task-launching_java_program.htm">Launching a Java
+      program</a><br />
+
+      <a href="../../../tasks/task-running_and_debugging.htm">Running and
+      debugging</a>
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href=
+      "../../../reference/preferences/run-debug/ref-console.htm">Console
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs Preferences</a><br />
+
+      <a href="../../../reference/preferences/java/debug/ref-debug.htm">Java
+      Debug Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-launching.htm">Launching
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-perspectives.htm">Perspectives
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-run_debug.htm">Run/Debug
+      Preferences</a><br />
+      <a href=
+      "../../../reference/preferences/run-debug/ref-string_substitution.htm">String
+      Substitution Preferences</a><br />
+    </p>
+
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/propertypages/images/rundebug-proppage.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/propertypages/images/rundebug-proppage.PNG
index 7b34667..6f1c9ba 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/propertypages/images/rundebug-proppage.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/propertypages/images/rundebug-proppage.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-apt-factoryPath.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-apt-factoryPath.htm
index 1a717e6..5b08dfb 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-apt-factoryPath.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-apt-factoryPath.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-	<meta name="copyright" content="Copyright (c) 2005 BEA Systems, Inc. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html" >
+	<meta name="copyright" content="Copyright (c) BEA Systems, Inc. and others 2005, 2011. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html" >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <title>
       Factory Path Preferences
@@ -30,9 +30,7 @@
     dialog</a>, which is used to view the individual processors within a plug-in or jar file
     and to configure additional options. If a plug-in or jar file on the factory path is known to contain
     processors but it does not show any contents in the Advanced Factory Path Options dialog, it may be missing
-    the META-INF/services entry or plugin.xml entry that is required to declare the processors. More
-    information about developing annotation processors is available in the 
-    <a href="jdt_apt_getting_started.htm">Getting Started with APT</a> topic.</p>
+    the META-INF/services entry or plugin.xml entry that is required to declare the processors.</p>
   </body>
 </html>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-dialog-tostring.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-dialog-tostring.htm
index 34a9a52..8d91568 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-dialog-tostring.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-dialog-tostring.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) 2008, 2009 Mateusz Matela and others. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) 2008, 2011 Mateusz Matela and others. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <title>
@@ -53,7 +53,7 @@
           </p>
         </td>
         <td valign="top">
-          For convenience, members are divided into up to four groups: Fields, Inherited fields, Methods and Inherited methods. Checking or unchecking a group affects the state of all it's members.
+          For convenience, members are divided into up to four groups: Fields, Inherited fields, Methods and Inherited methods. Checking or unchecking a group affects the state of all its members.
         </td>
         <td valign="top">
           Only fields which are non-transient and not inherited.
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-icons.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-icons.htm
index ef222a7..9dc3225 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-icons.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-icons.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -18,7 +18,7 @@
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300"
         summary="Objects">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -380,7 +380,7 @@
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300"
         summary="Object adornments">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -548,7 +548,7 @@
             <img src="../images/org.eclipse.jdt.ui/ovr16/focus_ovr.png" alt="Focus Overlay" ><br>
           </td>
           <td valign="top">
-            type with focus in Type Hierarchy<br>
+            type with focus in Type Hierarchy or Quick Outline/Hierarchy<br>
           </td>
         </tr>
         <tr>
@@ -616,7 +616,7 @@
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300"
         summary="Build path">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -728,7 +728,7 @@
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300"
         summary="Code assist">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -779,7 +779,7 @@
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300"
         summary="Compare">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -807,7 +807,7 @@
     
     <table cellspacing="0" cellpadding="5" border="1" width="300"
         summary="Debugger">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
   <tbody> 
   <tr> 
     <td valign="middle" align="center"> <img src="../images/org.eclipse.debug.ui/obj16/ldebug_obj.png"  alt="debug launch"><br>
@@ -1100,7 +1100,7 @@
       Editor
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -1142,7 +1142,7 @@
       JUnit
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -1267,7 +1267,7 @@
       NLS tools
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -1301,7 +1301,7 @@
       Quick fix
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -1412,7 +1412,7 @@
       Refactoring
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -1494,7 +1494,7 @@
       Search
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -1528,7 +1528,7 @@
       Search - Occurrences in File
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
@@ -1562,7 +1562,7 @@
       Type Hierarchy view
     </h2>
     <table cellspacing="0" cellpadding="5" border="1" width="300">
-      <colgroup> <col width="25px"> </colgroup>
+      <colgroup> <col width="25"> </colgroup>
       <tbody>
         <tr>
           <td valign="middle" align="center">
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-breadcrumb.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-breadcrumb.htm
index 0141b73..b302d26 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-breadcrumb.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-breadcrumb.htm
@@ -1,55 +1,80 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Java Editor Breadcrumb</title>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Java Editor Breadcrumb
+    </title>
   </head>
-
   <body>
-    <h1>Java Editor Breadcrumb</h1>
 
+    <h1>
+      Java Editor Breadcrumb
+    </h1>
+    <p>
+      The Java editor breadcrumb navigation bar shows the element at the
+      current caret position and all its parent elements. The breadcrumb is
+      embedded into the editor and show at the top of the editor.
+    </p>
+    <p>
+      <img src="images/ref-breadcrumb.png" border="0" alt=
+      "The Java editor breadcrumb bar" />
+    </p>
+    <p>
+
+      To enable the breadcrumb invoke <strong>Toggle Java Editor
+      Breadcrumb</strong> in the toolbar or press <strong>Alt+Shift+B</strong>
+      in the Java editor.
+    </p>
     <p>
-      The Java editor breadcrumb navigation bar shows the element at the current cursor position and all its parent elements.
-      The breadcrumb is embedded into the editor and show at the top of the editor.
-    </p> 
-    <p><img src="images/ref-breadcrumb.png"  border="0" alt="The Java editor breadcrumb bar"></p>
-    <p>To enable the breadcrumb invoke <strong>Toggle Java Editor Breadcrumb</strong> in the toolbar or press 
-      <strong>Alt+Shift+B</strong> in the Java editor.
+      The breadcrumb allows to invoke actions on any element shown in the
+      breadcrumb. Actions can be invoked through a context menu or through key
+      bindings. To select an element in the breadcrumb either click on it or
+      press <strong>Alt+Shift+B</strong> in the Java editor and then use the
+      <strong>left</strong> and <strong>right</strong> arrow keys.
     </p>
+
     <p>
-      The breadcrumb allows to invoke actions on any element shown in the breadcrumb. Actions can be invoked through
-      a context menu or through key bindings. To select an element in the breadcrumb either click on it or press
-      <strong>Alt+Shift+B</strong> in the Java editor and then use the <strong>left</strong> and <strong>right</strong>
-      arrow keys.
+      With the breadcrumb it is also possible to navigate to other elements in
+      the workspace: Click on one of the arrows or any element to open a drop
+      down window. The drop down shows all siblings of the element for which
+      the drop down was opened. To open an element click on it. To open the
+      drop down with the keyboard, select an element and press the
+      <strong>down</strong> arrow key.
     </p>
     <p>
-      With the breadcrumb it is also possible to navigate to other elements in the workspace: Click on one of the 
-      arrows or any element to open a drop down window. The drop down shows all siblings 
-      of the element for which the drop down was opened. To open an element click on it. To open the drop down with the keyboard, 
-      select an element and press the <strong>down</strong> arrow key.
+      The enablement of the breadcrumb is remembered for each perspective. The
+      breadcrumb can for example be enabled in the debug perspective and be
+      disabled in the Java perspective.
     </p>
     <p>
-      The enablement of the breadcrumb is remembered for each perspective. The breadcrumb can for example be enabled
-      in the debug perspective and be disabled in the Java perspective.
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+
     </p>
     <p>
-      <img src="../images/ngrelc.png" alt="Related concepts" border="0" ></p>
-      <p>
-      <a href="../concepts/concept-java-editor.htm">Java Editor</a><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
-       <a href="../concepts/concept-java-views-decorators.htm">Java element decorations</a><br>
-       <a href="../concepts/concept-java-views-presentation.htm">Presentation options for Java views</a>
+      <a href="../concepts/concept-java-editor.htm">Java Editor</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
+      <a href="../concepts/concept-java-views-decorators.htm">Java element
+      decorations</a><br />
+      <a href="../concepts/concept-java-views-presentation.htm">Presentation
+      options for Java views</a>
     </p>
-    <p><img border="0"  src="../images/ngrelr.png" alt="Related reference"></p>
+
     <p>
-     <a href="../reference/views/ref-java-editor.htm">Java editor actions</a><br>
-     <a href="../reference/views/ref-view-outline.htm">Java outline</a><br>
-     <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a>
-    </p>    
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
+    </p>
+    <p>
+      <a href="../reference/views/ref-java-editor.htm">Java editor
+      actions</a><br />
+      <a href="../reference/views/ref-view-outline.htm">Java outline</a><br />
+      <a href="../reference/views/ref-viewsandeditors.htm">Views and
+      editors</a>
+
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-formatter.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-formatter.htm
index b1ddc31..f04ff97 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-formatter.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-formatter.htm
@@ -1,116 +1,133 @@
-<!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" xml:lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
-    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-    <meta http-equiv="Content-Style-Type" content="text/css"/>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Formatter
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css"/>
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
   </head>
-  <body>
 
+  <body>
     <h1>
       Formatter
     </h1>
-
     <p>
       In the Java editor press <b>Ctrl+Shift+F</b> on code to format it. If no
       selection is set then the entire source is formatted otherwise only the
       selection will be. Some tips for using the formatter are listed in the
       paragraphs of this chapter.
     </p>
-
     <p>
-      Note that the Java Formatter preferences are accessible on the 
-      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Java Formatter preference page"/>
-      <b>Java Formatter</b></a> preference page.
-    </p>
 
+      Note that the Java Formatter preferences are accessible on the <a class=
+      "command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Java Formatter preference page" /> <b>Java Formatter</b></a>
+      preference page.
+    </p>
     <h2>
       Disabling formatter inside sections
     </h2>
     <p>
+
       You can disable/enable the formatter in one or several sections in the
-      code as shown in the sample below:</p>
-    <img src="images/formatter-disabling-enabling-tags.png"
-         alt="Java formatter example. Some code using disabling and enabling tags."/>
+      code as shown in the sample below:
+    </p><img src="images/formatter-disabling-enabling-tags.png" alt=
+    "Java formatter example. Some code using disabling and enabling tags." />
     <p>
       The snippet above use default tag names, but they can be changed on the
-      <b>Off/On tags</b> tab of the Java Formatter preference page.</p>
-
+      <b>Off/On tags</b> tab of the Java Formatter preference page.
+    </p>
     <h2>
       Wrap outermost method calls
     </h2>
     <p>
+
       Since version 3.6, the Java formatter now tries to wrap the outermost
       method calls first to have a better output when wrapping nested method
-      calls.</p>
+      calls.
+    </p>
     <p>
-      Here is an example of a formatted code where the formatter has
-      wrapped the line between the arguments of the outermost message call
-      to keep each nested method call on a single line:</p>
-    <img src="images/formatter-prefer-wrapping-outer-expressions.png"
-         alt="Java formatter example. The simple snippet with the formatted nested method calls."/>
+      Here is an example of a formatted code where the formatter has wrapped
+      the line between the arguments of the outermost message call to keep each
+      nested method call on a single line:
+    </p><img src="images/formatter-prefer-wrapping-outer-expressions.png" alt=
+    "Java formatter example. The simple snippet with the formatted nested method calls." />
     <p>
       A new preference allows you to disable this strategy, typically if you
-      want to format your code as before, then uncheck the
-      <b>Prefer wrapping outer expressions</b> preference accessible on the
-      <b>Line wrapping</b> tab of the Java Formatter preference page.</p>
+      want to format your code as before, then uncheck the <b>Prefer wrapping
+      outer expressions</b> preference accessible on the <b>Line wrapping</b>
+
+      tab of the Java Formatter preference page.
+    </p>
     <p>
       <b>Note:</b> Currently the new strategy only applies to nested method
       calls, but that might be extended to other nested expressions in future
-      versions.</p>
-
+      versions.
+    </p>
     <h2>
       Condense Javadoc and block comments
     </h2>
     <p>
-      Users can reduce the number of lines of formatted multi-lines
-      comments as shown in the example below:</p>
-    <img src="images/formatter-condense-multi-lines-comments.png"
-         alt="Java formatter example. The simple snippet with the block and Javadoc comments formatted with less lines than with the default profile."/>
-    <p>
-      To activate this behavior uncheck the
-      <b>/* and */ on separate lines</b> preference accessible on the
-      <b>Comments</b> tab of the Java Formatter preference page.</p>
+
+      Users can reduce the number of lines of formatted multi-lines comments as
+      shown in the example below:
+    </p><img src="images/formatter-condense-multi-lines-comments.png" alt=
+    "Java formatter example. The simple snippet with the block and Javadoc comments formatted with less lines than with the default profile." />
+    <p>
+      To activate this behavior uncheck the <b>/* and */ on separate lines</b>
+      preference accessible on the <b>Comments</b> tab of the Java Formatter
+      preference page.
+    </p>
     <p>
-      The same kind of preference is also available for the Javadoc comments.</p>
 
+      The same kind of preference is also available for the Javadoc comments.
+    </p>
     <h2>
       Preserve user line breaks
     </h2>
     <p>
-      Users can preserve line breaks by not joining lines in code or comments.</p>
+      Users can preserve line breaks by not joining lines in code or comments.
+    </p>
     <p>
       For example, the already wrapped lines of the <code>return</code>
-      statement in the following test case:</p>
-    <img src="images/formatter-join-lines-before.png" alt="Example of Code to Format"/>
+
+      statement in the following test case:
+    </p><img src="images/formatter-join-lines-before.png" alt=
+    "Example of Code to Format" />
     <p>
       will be preserved by the formatter when the <b>Never join lines</b>
-      preference is used, hence produces the following output when formatted:</p>
-    <img src="images/formatter-join-lines-after.png" alt="Coded Formatted with Never Join Lines"/>
+      preference is used, hence produces the following output when formatted:
+    </p><img src="images/formatter-join-lines-after.png" alt=
+    "Coded Formatted with Never Join Lines" />
     <p>
       To activate this behavior check the <b>Never join lines</b> preference
       accessible on the <b>Line Wrapping</b> and the <b>Comments</b> tabs of
-      the Java Formatter preference page.</p>
+      the Java Formatter preference page.
+    </p><img src="../images/ngrelc.png" alt="Related concepts" border="0" />
 
-    <img src="../images/ngrelc.png" alt="Related concepts" border="0"/> 
     <p>
-      <a href="../concepts/concept-java-editor.htm">Java editor</a><br/>
-       <a href="../concepts/concept-jdt.htm">Java development tools (JDT)</a>
+      <a href="../concepts/concept-java-editor.htm">Java editor</a><br />
+      <a href="../concepts/concept-jdt.htm">Java development tools (JDT)</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png"  alt="Related reference"/>
+      <img src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-      <a href="../reference/ref-menu-edit.htm">Edit menu</a><br/>
-      <a href="../reference/preferences/java/ref-preferences-editor.htm">Java editor preferences</a><br/>
-      <a href="../reference/preferences/java/codestyle/ref-preferences-formatter.htm">Formatter preferences</a><br/>
+
+      <a href="../reference/ref-menu-edit.htm">Edit menu</a><br />
+      <a href="../reference/preferences/java/ref-preferences-editor.htm">Java
+      editor preferences</a><br />
+      <a href=
+      "../reference/preferences/java/codestyle/ref-preferences-formatter.htm">Formatter
+      preferences</a><br />
     </p>
-    
   </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickassist.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickassist.htm
index d42b14b..c8b33be 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickassist.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickassist.htm
@@ -1,443 +1,1055 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-  <meta content="text/html; charset=ISO-8859-1"
- http-equiv="content-type">
-  <link rel="stylesheet" href="../book.css" charset="ISO-8859-1"
- type="text/css">
-  <title>Quick Assist</title>
-  <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1>Quick Assist</h1>
-
-<p>Quick assists perform local code transformations. They are invoked on a selection or a single cursor in the Java editor and
-use the same shortcut as quick fixes (<b>Ctrl+1</b>), but quick assist are usually hidden when an error is around.
-To show them even with errors present on the same line, press <b>Ctrl+1</b> a second time.<br>
-<br>
-A selection of quick assists can be assigned to a direct shortcut. By default, these are:</p><ul>
-	<li>Rename in file: <b>Ctrl+2, R</b></li>
-	<li>Assign to local: <b>Ctrl+2, L</b></li>
-	<li>Assign to field: <b>Ctrl+2, F</b></li>
-</ul>
-<p>Assign more shortcuts or change the default shortcuts on the
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens keys preference page">
-<b>General > Keys</b></a> preference page (in the 'Source' category).
-<br>
-<br>
-A quick assist light bulb can be turned on on the
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens Java editor preference page">
-<b>Java > Editor</b></a> preference page.
-<br>
-</p>
-<table style="width: 100%; text-align: left;" border="2" cellpadding="5" summary="List of quick assists">
-  <tbody>
-    <tr>
-      <th style="vertical-align: top;" width="15%">Name</th>
-      <th colspan="3" rowspan="1"
- style="vertical-align: top; text-align: center;">Code example</th>
-      <th style="vertical-align: top;" width="15%">Invocation location</th>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Inverse if statement</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (x) a(); else b();</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if (!x) b(); else a();</code></td>
-      <td style="vertical-align: top;" width="15%">On 'if' statements with 'else'
-block</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Inverse boolean expression</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>a &&
-!b </code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>!a || b</code></td>
-      <td style="vertical-align: top;" width="15%">On a boolean expression</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Remove extra parentheses</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if ((a == b)
-&& (c != d)  {}</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if (a == b && c !=
-d)  {}</code></td>
-      <td style="vertical-align: top;" width="15%">On selected expressions</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Add paranoidal parentheses</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a == b
-&& c != d)  {}</code> </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if ((a == b) && (c != d)</code></td>
-      <td style="vertical-align: top;" width="15%">On selected expressions</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Join nested if statements</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) { if
-(b) {} }</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if (a && b) {}</code></td>
-      <td style="vertical-align: top;" width="15%">On a nested if statement</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Swap nested if statements</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) { if
-(b) {} }</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if (b) { if (a) {} }</code></td>
-      <td style="vertical-align: top;" width="15%">On a nested if statement</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Split if statement with and'ed
-expression</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a
-&& b) {}</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if (a) { if (b) {} }</code></td>
-      <td style="vertical-align: top;" width="15%">On an and'ed expression in a 'if'</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Split if statement with or'd
-expression</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a || b)
-x();</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code> if (a) x();  if (b) x();</code></td>
-      <td style="vertical-align: top;" width="15%">On an or'd expression in a 'if'</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Inverse conditional expression</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>x ? b : c</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>!x ? c : b</code></td>
-      <td style="vertical-align: top;" width="15%">On a conditional expression</td>
-    </tr>
-		<tr>
-			<td style="vertical-align: top" width="15%">Pull negation up</td>
-			<td style="vertical-align: top; text-align: right" width="34%"><code>b && c</code></td>
-			<td style="vertical-align: top">></td>
-			<td style="vertical-align: top" width="34%"><code>!(!b || !c)</code></td>
-			<td style="vertical-align: top" width="15%">On a boolean expression</td>
-		</tr>
-		<tr>
-			<td style="vertical-align: top" width="15%">Push negation down</td>
-			<td style="vertical-align: top; text-align: right" width="34%">!(<code>b
-			&& c)</code></td>
-			<td style="vertical-align: top">></td>
-			<td style="vertical-align: top" width="34%">!<code>b || !c</code></td>
-			<td style="vertical-align: top" width="15%">On a negated boolean expression</td>
-		</tr>
-		<tr>
-      <td style="vertical-align: top;" width="15%">If-else assignment to
-conditional expression</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) x= 1;
-else x= 2;</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>x= a ? 1 : 2;</code></td>
-      <td style="vertical-align: top;" width="15%">On an 'if' statement</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">If-else return to conditional
-expression</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) return
-1; <br>
-			else return 2;</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>return a ? 1 : 2;</code></td>
-      <td style="vertical-align: top;" width="15%">On an 'if' statement</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Conditional expression
-assignment to If-else</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>x= a ? 1 : 2;</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code> if (a) x= 1; else x= 2;</code></td>
-      <td style="vertical-align: top;" width="15%">On a conditional expression</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Conditional expression return to
-If-else</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>return 
-a ? 1 : 2;</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if (a) return 1; else return 2;</code></td>
-      <td style="vertical-align: top;" width="15%">On a conditional expression</td>
-    </tr>
-		<tr>
-			<td style="vertical-align: top" width="15%">Switch to If-else</td>
-			<td style="vertical-align: top; text-align: right" width="34%"><code>switch (kind) {<br>case 1: return -1;<br>case 2: return -2;<br>}</code>
-			</td>
-			<td style="vertical-align: top">></td>
-			<td style="vertical-align: top" width="34%"><code>if (kind == 1) {<br>  return  
-			-1;<br>} else if (kind == 2) {<br>  return -2;<br>}</code>
-			</td>
-			<td style="vertical-align: top" width="15%">On a statement</td>
-		</tr>
-	<tr>
-      <td style="vertical-align: top;" width="15%">Add missing case statements on enums</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>switch (e){<br>}</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>switch (e){<br> case E1: break;<br>case E2: break;<br>}</code></td>
-      <td style="vertical-align: top" width="15%">On a switch statement</td>
-    </tr>		
-	<tr>
-      <td style="vertical-align: top;" width="15%">Exchange operands</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>a + b</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>b + a</code></td>
-      <td style="vertical-align: top;" width="15%">On an infix operation</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Cast and assign</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (obj
-instanceof Vector) {<br>
-			}</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code> if (obj instanceof Vector) {<br>
- Vector vec= (Vector)obj;</code><br>
-}</td>
-      <td style="vertical-align: top;" width="15%">on a instanceof expression in an 'if' or 'while' statement</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Pick out string</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>"abcdefgh"</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>"abc" + "de" + "fgh"</code></td>
-      <td style="vertical-align: top;" width="15%">select a part of a string literal</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Convert string concatenation to StringBuilder (J2SE 5.0) or StringBuffer</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>"Hello " + name</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>StringBuilder builder= new StringBuilder();<br>builder.append("Hello ");<br>builder.append(name);</code></td>
-      <td style="vertical-align: top;" width="15%">select a string literal</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Convert string concatenation to MessageFormat</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>"Hello " + name</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>MessageFormat.format("Hello {0}", name);</code></td>
-      <td style="vertical-align: top;" width="15%">select a string literal</td>
-    </tr>        
-    
-    <tr>
-      <td style="vertical-align: top;" width="15%">Split variable</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>int i= 0;</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code> int i; i= 0;</code></td>
-      <td style="vertical-align: top;" width="15%">On a variable with initialization</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Join variable</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>int i; i= 0;</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code> int i= 0</code></td>
-      <td style="vertical-align: top;" width="15%">On a variable without
-initialization</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Assign to variable</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>foo()</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>X x= foo();</code></td>
-      <td style="vertical-align: top;" width="15%">On an expression statement</td>
-    </tr>
-		<tr>
-			<td style="vertical-align: top" width="15%">Extract to local</td>
-			<td style="vertical-align: top; text-align: right" width="34%"><code>foo(<u>getColor()</u>);</code></td>
-			<td style="vertical-align: top">></td>
-			<td style="vertical-align: top" width="34%"><code>Color color= getColor();<br>foo(color);</code>
-			</td>
-			<td style="vertical-align: top" width="15%">On an expression</td>
-		</tr>
-		<tr>
-      <td style="vertical-align: top;" width="15%">Assign parameter to field</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>public A(int
-color) {}</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>Color fColor;<br>
-public A(int color) {<br>
-    fColor= color;<br>
-}</code></td>
-      <td style="vertical-align: top;" width="15%">On a parameter</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Add finally block</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>try {<br>
-} catch (Expression e) {<br>
-}
-      </code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>try {<br>
-} catch (Expression e) {<br>
-} finally {}</code></td>
-      <td style="vertical-align: top;" width="15%">On a try/catch statement</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Add else block</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) b();</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>if (a) b(); else { }</code></td>
-      <td style="vertical-align: top;" width="15%">On a if statement</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Replace statement with block</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>f (a) b();</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code> if (a) { b(); }</code></td>
-      <td style="vertical-align: top;" width="15%">On a if statement </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Invert equals</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>a.equals(b)</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>b.equals(a)</code></td>
-      <td style="vertical-align: top;" width="15%">On a invocation of 'equals'</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Array initializer to Array
-creation</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>int[]
-i=  { 1, 2, 3 }</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>int[] i= new int[] { 1, 2, 3 }</code></td>
-      <td style="vertical-align: top;" width="15%">On an array initializer</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Convert to 'enhanced for loop'
-(J2SE 1.5)</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>for (Iterator
-i= c.iterator();i.hasNext();) {<br>
-}<br>
-      </code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>for (x : c) {<br>
-}</code></td>
-      <td style="vertical-align: top;" width="15%">On a for loop</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Create method in super class</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><br></td>
-      <td style="vertical-align: top;"><br></td>
-      <td style="vertical-align: top;" width="34%"><br></td>
-      <td style="vertical-align: top;" width="15%">On a method declaration</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Unwrap blocks</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>{ a() }</code></td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>a()</code></td>
-      <td style="vertical-align: top;" width="15%">On blocks, if/while/for statements</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Rename in file</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><br></td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;" width="34%"><br>
-      </td>
-      <td style="vertical-align: top;" width="15%">On identifiers</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Rename in workspace</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><br></td>
-      <td style="vertical-align: top;"><br>
-      </td>
-      <td style="vertical-align: top;" width="34%"><br>
-      </td>
-      <td style="vertical-align: top;" width="15%">On identifiers</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Extract to local variable</td>
-      <td style="vertical-align: top; text-align: right;" width="34%">
-			<code>a= b*8;</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>int x= a*8;<br>a= x;</code>
-      </td>
-      <td style="vertical-align: top;" width="15%">On expressions</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Extract to constant</td>
-      <td style="vertical-align: top; text-align: right;" width="34%">
-			<code>a= 8;</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>final static int CONST= 8;<br>a= CONST;</code>
-      </td>
-      <td style="vertical-align: top;" width="15%">On expressions</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Extract method</td>
-      <td style="vertical-align: top; text-align: right;" width="34%">
-			<code>int x= p * 5;</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>int x= getFoo(p);</code>
-      </td>
-      <td style="vertical-align: top;" width="15%">On expressions and statements</td>
-    </tr>       
-    <tr>
-      <td style="vertical-align: top;" width="15%">Inline local variable</td>
-      <td style="vertical-align: top; text-align: right;" width="34%">
-			<code>int a= 8, b= a;</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>int b= 8;</code>
-      </td>
-      <td style="vertical-align: top;" width="15%">On local variables</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Convert local variable to field</td>
-      <td style="vertical-align: top; text-align: right;" width="34%">
-			<code>void foo() { int a= 8; }</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>int a= 8; void foo() {}</code>
-      </td>
-      <td style="vertical-align: top;" width="15%">On local variables</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Convert anonymous to nested class</td>
-      <td style="vertical-align: top; text-align: right;" width="34%">
-			<code>new Runnable() { };</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>class RunnableImplementation implements Runnable { }</code>
-      </td>
-      <td style="vertical-align: top;" width="15%">On anonymous classes</td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;" width="15%">Replace with getter and setter (Encapsulate Field)</td>
-      <td style="vertical-align: top; text-align: right;" width="34%"><code>p.x;</code>
-      </td>
-      <td style="vertical-align: top;">></td>
-      <td style="vertical-align: top;" width="34%"><code>p.getX();</code>
-      </td>
-      <td style="vertical-align: top;" width="15%">On fields</td>
-    </tr>        
-  </tbody>
-</table>
-
-<p><img src="../images/ngrelc.png" alt="Related concepts" border="0"></p>
-<p>
-	<a href="../concepts/concept-java-editor.htm">Java Editor</a><br>
-	<a href="../concepts/concept-quickfix-assist.htm">Quick Fix and Quick Assist</a>
-</p>
-
-<p><img src="../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p>
-	<a href="ref-java-editor-quickfix.htm">Quick Fix</a><br>
-	<a href="../reference/ref-jdt-actions.htm">JDT actions</a>
-</p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta content="text/html; charset=utf-8" http-equiv="content-type" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Quick Assist
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <style type="text/css">
+/*<![CDATA[*/
+    table.c7 {width: 100%; text-align: left;}
+    td.c6 {vertical-align: top; text-align: right}
+    td.c5 {vertical-align: top}
+    td.c4 {vertical-align: top; text-align: right;}
+    td.c3 {vertical-align: top;}
+    th.c2 {vertical-align: top; text-align: center;}
+    th.c1 {vertical-align: top;}
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1>
+      Quick Assist
+    </h1>
+    <p>
+      Quick assists perform local code transformations. They are invoked on a
+      selection or a single cursor in the Java editor and use the same shortcut
+      as quick fixes (<b>Ctrl+1</b>), but quick assist are usually hidden when
+      an error is around. To show them even with errors present on the same
+      line, press <b>Ctrl+1</b> a second time.<br />
+
+      <br />
+      A selection of quick assists can be assigned to a direct shortcut. By
+      default, these are:
+    </p>
+    <ul>
+      <li>Rename in file: <b>Ctrl+2, R</b>
+      </li>
+      <li>Assign to local: <b>Ctrl+2, L</b>
+
+      </li>
+      <li>Assign to field: <b>Ctrl+2, F</b>
+      </li>
+    </ul>
+    <p>
+      Assign more shortcuts or change the default shortcuts on the <a class=
+      "command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens keys preference page" /> <b>General > Keys</b></a> preference
+      page (in the 'Source' category).<br />
+
+      <br />
+      A quick assist light bulb can be turned on on the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens Java editor preference page" /> <b>Java > Editor</b></a>
+      preference page.<br />
+    </p>
+    <table class="c7" border="2" cellpadding="5" summary=
+    "List of quick assists">
+
+      <tbody>
+        <tr>
+          <th class="c1" width="15%">
+            Name
+          </th>
+          <th colspan="3" rowspan="1" class="c2">
+            Code example
+          </th>
+          <th class="c1" width="15%">
+            Invocation location
+          </th>
+
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Inverse if statement
+          </td>
+          <td class="c4" width="34%">
+            <code>if (x) a(); else b();</code>
+          </td>
+          <td class="c3">
+
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (!x) b(); else a();</code>
+          </td>
+          <td class="c3" width="15%">
+            On 'if' statements with 'else' block
+          </td>
+        </tr>
+
+        <tr>
+          <td class="c3" width="15%">
+            Inverse boolean expression
+          </td>
+          <td class="c4" width="34%">
+            <code>a && !b</code>
+          </td>
+          <td class="c3">
+
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>!a || b</code>
+          </td>
+          <td class="c3" width="15%">
+            On a boolean expression
+          </td>
+        </tr>
+
+        <tr>
+          <td class="c3" width="15%">
+            Invert local variable
+          </td>
+          <td class="c4" width="34%">
+            <code>boolean a = false;<br />
+            if (a) {}</code>
+          </td>
+
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>boolean notA = true;<br />
+            if (!notA) {}</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On a boolean variable
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Invert equals
+          </td>
+          <td class="c4" width="34%">
+            <code>a.equals(b)</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>b.equals(a)</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On a invocation of 'equals'
+          </td>
+        </tr>
+        <tr>
+          <td></td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Inverse conditional expression
+          </td>
+
+          <td class="c4" width="34%">
+            <code>x ? b : c</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>!x ? c : b</code>
+
+          </td>
+          <td class="c3" width="15%">
+            On a conditional expression
+          </td>
+        </tr>
+        <tr>
+          <td class="c5" width="15%">
+            Pull negation up
+          </td>
+          <td class="c6" width="34%">
+
+            <code>b && c</code>
+          </td>
+          <td class="c5">
+            >
+          </td>
+          <td class="c5" width="34%">
+            <code>!(!b || !c)</code>
+
+          </td>
+          <td class="c5" width="15%">
+            On a boolean expression
+          </td>
+        </tr>
+        <tr>
+          <td class="c5" width="15%">
+            Push negation down
+          </td>
+          <td class="c6" width="34%">
+
+            !(<code>b && c)</code>
+          </td>
+          <td class="c5">
+            >
+          </td>
+          <td class="c5" width="34%">
+            !<code>b || !c</code>
+
+          </td>
+          <td class="c5" width="15%">
+            On a negated boolean expression
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Remove extra parentheses
+          </td>
+          <td class="c4" width="34%">
+
+            <code>if ((a == b) && (c != d)  {}</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+
+            <code>if (a == b && c != d)  {}</code>
+          </td>
+          <td class="c3" width="15%">
+            On selected expressions
+          </td>
+        </tr>
+        <tr>
+
+          <td class="c3" width="15%">
+            Put expression in parentheses
+          </td>
+          <td class="c4" width="34%">
+            <code>return a > 10 ? 1 : 2;</code>
+          </td>
+          <td class="c3">
+            >
+
+          </td>
+          <td class="c3" width="34%">
+            <code>return (a > 10) ? 1 : 2;</code>
+          </td>
+          <td class="c3" width="15%">
+            On selected expression
+          </td>
+        </tr>
+
+        <tr>
+          <td class="c3" width="15%">
+            Put expressions in parentheses
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a == b && c != d)  {}</code>
+          </td>
+
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if ((a == b) && (c != d))  {}</code>
+          </td>
+
+          <td class="c3" width="15%">
+            On selected expressions
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Join nested if statements
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) { if (b) {} }</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (a && b) {}</code>
+          </td>
+
+          <td class="c3" width="15%">
+            On a nested if statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Swap nested if statements
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) { if (b) {} }</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (b) { if (a) {} }</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On a nested if statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Split if statement with and'ed expression
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a && b) {}</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (a) { if (b) {} }</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On an and'ed expression in a 'if'
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Join selected 'if' statements with ||
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) x();  if (b) x();</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (a || b) x();</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On selected 'if' statements
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Join 'if' sequence in if-else-if
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) x();  if (b) y();</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (a) x();  else if (b) y();</code>
+          </td>
+
+          <td class="c3" width="15%">
+            On selected 'if' statements
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Split if statement with or'd expression
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a || b) x();</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (a) x();  if (b) x();</code>
+          </td>
+
+          <td class="c3" width="15%">
+            On an or'd expression in a 'if'
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            If-else assignment to conditional expression
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) x= 1; else x= 2;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>x= a ? 1 : 2;</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On an 'if' statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            If-else return to conditional expression
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) return 1;<br />
+
+            else return 2;</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>return a ? 1 : 2;</code>
+          </td>
+
+          <td class="c3" width="15%">
+            On an 'if' statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Conditional expression assignment to If-else
+          </td>
+          <td class="c4" width="34%">
+            <code>x= a ? 1 : 2;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (a) x= 1; else x= 2;</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On a conditional expression
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Conditional expression return to If-else
+          </td>
+          <td class="c4" width="34%">
+            <code>return  a ? 1 : 2;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (a) return 1; else return 2;</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On a conditional expression
+          </td>
+        </tr>
+        <tr>
+          <td class="c5" width="15%">
+            Switch to If-else
+          </td>
+          <td class="c6" width="34%">
+            <code>switch (kind) {<br />
+
+            case 1: return -1;<br />
+            case 2: return -2;<br />
+            }</code>
+          </td>
+          <td class="c5">
+            >
+          </td>
+
+          <td class="c5" width="34%">
+            <code>if (kind == 1) {<br />
+              return -1;<br />
+            } else if (kind == 2) {<br />
+              return -2;<br />
+            }</code>
+
+          </td>
+          <td class="c5" width="15%">
+            On a switch statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Add missing case statements on enums
+          </td>
+          <td class="c4" width="34%">
+
+            <code>switch (e){<br />
+            }</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>switch (e){<br />
+
+            case E1: break;<br />
+            case E2: break;<br />
+            }</code>
+          </td>
+          <td class="c5" width="15%">
+            On a switch statement
+          </td>
+        </tr>
+
+        <tr>
+          <td class="c3" width="15%">
+            Exchange operands
+          </td>
+          <td class="c4" width="34%">
+            <code>a + b</code>
+          </td>
+          <td class="c3">
+            >
+
+          </td>
+          <td class="c3" width="34%">
+            <code>b + a</code>
+          </td>
+          <td class="c3" width="15%">
+            On an infix operation
+          </td>
+        </tr>
+        <tr>
+
+          <td class="c3" width="15%">
+            Cast and assign
+          </td>
+          <td class="c4" width="34%">
+            <code>if (obj instanceof Vector) {<br />
+            }</code>
+          </td>
+          <td class="c3">
+
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>if (obj instanceof Vector) {<br />
+             Vector vec= (Vector)obj;</code><br />
+            }
+          </td>
+          <td class="c3" width="15%">
+
+            On an instanceof expression in an 'if' or 'while' statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Add finally block
+          </td>
+          <td class="c4" width="34%">
+            <code>try {<br />
+
+            } catch (Expression e) {<br />
+            }</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>try {<br />
+
+            } catch (Expression e) {<br />
+            } finally {}</code>
+          </td>
+          <td class="c3" width="15%">
+            On a try/catch statement
+          </td>
+        </tr>
+        <tr>
+
+          <td class="c3" width="15%">
+            Add else block
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) b();</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+
+          <td class="c3" width="34%">
+            <code>if (a) b(); else { }</code>
+          </td>
+          <td class="c3" width="15%">
+            On a if statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+
+            Replace statement with block
+          </td>
+          <td class="c4" width="34%">
+            <code>if (a) b();</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+
+            <code>if (a) { b(); }</code>
+          </td>
+          <td class="c3" width="15%">
+            On a if statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Unwrap blocks
+          </td>
+
+          <td class="c4" width="34%">
+            <code>{ a() }</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>a()</code>
+
+          </td>
+          <td class="c3" width="15%">
+            On blocks, if/while/for statements
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Pick out string
+          </td>
+          <td class="c4" width="34%">
+
+            <code>"abcdefgh"</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>"abc" + "de" + "fgh"</code>
+          </td>
+
+          <td class="c3" width="15%">
+            select a part of a string literal
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Convert string concatenation to StringBuilder (J2SE 5.0) or
+            StringBuffer
+          </td>
+          <td class="c4" width="34%">
+            <code>"Hello " + name</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>StringBuilder builder= new StringBuilder();<br />
+            builder.append("Hello ");<br />
+            builder.append(name);</code>
+
+          </td>
+          <td class="c3" width="15%">
+            select a string literal
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Convert string concatenation to MessageFormat
+          </td>
+          <td class="c4" width="34%">
+
+            <code>"Hello " + name</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>MessageFormat.format("Hello {0}", name);</code>
+          </td>
+
+          <td class="c3" width="15%">
+            select a string literal
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Split variable
+          </td>
+          <td class="c4" width="34%">
+            <code>int i= 0;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>int i; i= 0;</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On a variable with initialization
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Join variable
+          </td>
+          <td class="c4" width="34%">
+            <code>int i; i= 0;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>int i= 0</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On a variable without initialization
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Assign to variable
+          </td>
+          <td class="c4" width="34%">
+            <code>foo()</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>X x= foo();</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On an expression statement
+          </td>
+        </tr>
+        <tr>
+          <td class="c5" width="15%">
+            Extract to local
+          </td>
+          <td class="c6" width="34%">
+            <code>foo(getColor());</code>
+
+          </td>
+          <td class="c5">
+            >
+          </td>
+          <td class="c5" width="34%">
+            <code>Color color= getColor();<br />
+            foo(color);</code>
+          </td>
+
+          <td class="c5" width="15%">
+            On an expression
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Assign parameter to field
+          </td>
+          <td class="c4" width="34%">
+            <code>public A(int color) {}</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>Color fColor;<br />
+            public A(int color) {<br />
+                fColor= color;<br />
+
+            }</code>
+          </td>
+          <td class="c3" width="15%">
+            On a parameter
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Array initializer to Array creation
+          </td>
+
+          <td class="c4" width="34%">
+            <code>int[] i=  { 1, 2, 3 }</code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+
+            <code>int[] i= new int[] { 1, 2, 3 }</code>
+          </td>
+          <td class="c3" width="15%">
+            On an array initializer
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Convert to 'enhanced for loop' (J2SE 1.5)
+          </td>
+
+          <td class="c4" width="34%">
+            <code>for (Iterator i= c.iterator();i.hasNext();) {<br />
+            }<br /></code>
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+
+            <code>for (x : c) {<br />
+            }</code>
+          </td>
+          <td class="c3" width="15%">
+            On a for loop
+          </td>
+        </tr>
+        <tr>
+
+          <td class="c3" width="15%">
+            Create method in super class
+          </td>
+          <td class="c4" width="34%">
+            <br />
+          </td>
+          <td class="c3">
+            <br />
+          </td>
+
+          <td class="c3" width="34%">
+            <br />
+          </td>
+          <td class="c3" width="15%">
+            On a method declaration
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+
+            Rename in file
+          </td>
+          <td class="c4" width="34%">
+            <br />
+          </td>
+          <td class="c3">
+            <br />
+          </td>
+          <td class="c3" width="34%">
+
+            <br />
+          </td>
+          <td class="c3" width="15%">
+            On identifiers
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Rename in workspace
+          </td>
+
+          <td class="c4" width="34%">
+            <br />
+          </td>
+          <td class="c3">
+            <br />
+          </td>
+          <td class="c3" width="34%">
+            <br />
+          </td>
+
+          <td class="c3" width="15%">
+            On identifiers
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Extract to local variable
+          </td>
+          <td class="c4" width="34%">
+            <code>a= b*8;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>int x= b*8;<br />
+            a= x;</code>
+          </td>
+
+          <td class="c3" width="15%">
+            On expressions
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Extract to constant
+          </td>
+          <td class="c4" width="34%">
+            <code>a= 8;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>final static int CONST= 8;<br />
+            a= CONST;</code>
+          </td>
+
+          <td class="c3" width="15%">
+            On expressions
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Extract method
+          </td>
+          <td class="c4" width="34%">
+            <code>int x= p * 5;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>int x= getFoo(p);</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On expressions and statements
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Inline local variable
+          </td>
+          <td class="c4" width="34%">
+            <code>int a= 8, b= a;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>int b= 8;</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On local variables
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Convert local variable to field
+          </td>
+          <td class="c4" width="34%">
+            <code>void foo() { int a= 8; }</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>int a= 8; void foo() {}</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On local variables
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Convert anonymous to nested class
+          </td>
+          <td class="c4" width="34%">
+            <code>new Runnable() { };</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>class RunnableImplementation implements Runnable { }</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On anonymous classes
+          </td>
+        </tr>
+        <tr>
+          <td class="c3" width="15%">
+            Replace with getter and setter (Encapsulate Field)
+          </td>
+          <td class="c4" width="34%">
+            <code>p.x;</code>
+
+          </td>
+          <td class="c3">
+            >
+          </td>
+          <td class="c3" width="34%">
+            <code>p.getX();</code>
+          </td>
+          <td class="c3" width="15%">
+
+            On fields
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+    </p>
+    <p>
+
+      <a href="../concepts/concept-java-editor.htm">Java Editor</a><br />
+      <a href="../concepts/concept-quickfix-assist.htm">Quick Fix and Quick
+      Assist</a>
+    </p>
+    <p>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href="ref-java-editor-quickfix.htm">Quick Fix</a><br />
+
+      <a href="../reference/ref-jdt-actions.htm">JDT actions</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickfix.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickfix.htm
index 71469fa..0449a62 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickfix.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-java-editor-quickfix.htm
@@ -1,187 +1,347 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-
-    <title>Quick Fix</title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Quick Fix
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
   </head>
 
   <body>
-    <h1>Quick Fix</h1>
-
-    <p>The Java editor offers corrections to problems found while typing and after compiling. To show that
-    correction proposals are available for a problem or warning, a 'light bulb' is visible on the editor's annotation bar.<br><br>
-Left click on the light bulb or invoking <b>Ctrl+1 (Edit > Quick Fix)</b> brings up the proposals for the problem at the cursor position.<br>
-Each quick fix shows a preview when selected in the proposal window.<br></p>
-<br>
-<p><img src="images/c-quickfix.png"  border="0" alt="Quick fix selection dialog"></p>
-
-<p>
-Some selected quick fixes can also be assigned with direct shortcuts. You can configure these shortcuts on the
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens keys preference page">
-<b>General > Keys</b></a> preference page (in the 'Source' category). <br></p>
-
-<p>Some quick fixes offer to fix all problems of the same kind in the current file at once. The information text in proposal window
-contains this information for all applicable proposals. To fix all problems of the same kind, press <b>Ctrl + Enter</b>.
-</p>
-
-
-<p>The following quick fixes are available:</p>
-<table border="0" cellpadding="10" cellspacing="0" width="700" summary="List if quick fixes">
-	<tbody>
-		<tr>
-			<td width="20%" valign="top" align="right"><b>Package Declaration</b></td>
-			<td width="80%" valign="top" align="left">
-			<ul>
-				<li>Add missing package declaration or correct package declaration</li>
-				<li>Move compilation unit to package that corresponds to the package declaration</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Imports</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Remove unused, unresolvable or non-visible import</li>
-				<li>Invoke 'Organize imports' on problems in imports</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Types</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Create new class, interface, enum, annotation or type variable for references to types that can not be resolved</li>
-				<li>Change visibility for types that are accessed but not visible</li>
-				<li>Rename to a similar type for references to types that can not be resolved</li>
-				<li>Add import statement for types that can not be resolved but	exist in the project</li>
-				<li>Add explicit import statement for ambiguous type references (two import-on-demands for the same type)</li>
-				<li>If the type name is not matching with the compilation unit name either rename the type or rename the compilation unit</li>
-				<li>Remove unused private types</li>
-				<li>Add missing type annotation attributes</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Constructors</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Create new constructor for references to constructors that can not be resolved (this, super or new class creation)</li>
-				<li>Reorder, add or remove arguments for constructor references that mismatch parameters</li>
-				<li>Change method with constructor name to constructor (remove return type)</li>
-				<li>Change visibility for constructors that are accessed but not visible</li>
-				<li>Remove unused private constructor</li>
-				<li>Create constructor when super call of the implicit default constructor is undefined, not visible or throws an exception</li>
-				<li>If type contains unimplemented methods, change type modifier to 'abstract' or add the method to implement</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Methods</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Create new method for references to methods that can not be resolved</li>
-				<li>Rename to a similar method for references to methods that can not be resolved</li>
-				<li>Reorder or remove arguments for method references that mismatch parameters</li>
-				<li>Correct access (visibility, static) of referenced methods</li>
-				<li>Remove unused private methods</li>
-				<li>Correct return type for methods that have a missing return type or where the return type does not match the return statement</li>
-				<li>Add return statement if missing</li>
-				<li>For non-abstract methods with no body change to 'abstract' or add body</li>
-				<li>For an abstract method in a non-abstract type remove abstract modifier of the method or make type abstract</li>
-				<li>For an abstract/native method with body remove the abstract or native modifier or remove body</li>
-				<li>Change method access to 'static' if method is invoked inside a constructor invocation (super, this)</li>
-				<li>Change method access to default access to avoid emulated method access</li>
-				<li>Add 'synchronized' modifier</li>
-				<li>Override hashCode()</li>
-				<li>Open the 'Generate hashCode() and equals()' wizard</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Fields and variables</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Correct access (visibility, static) of referenced fields</li>
-				<li>Create new fields, parameters,  local variables or constants for references to  variables that can not be resolved</li>
-				<li>Rename to a variable with similar name for references that can not be resolved</li>
-				<li>Remove unused private fields</li>
-				<li>Correct non-static access of static fields</li>
-				<li>Add 'final' modifier to  local variables accessed in outer types</li>
-				<li>Change field access to default access to avoid emulated method access</li>
-				<li>Change local variable type to fix a type mismatch</li>
-				<li>Initialize a variable that has not been initialized</li>
-				<li>Create getter and setters for invisible or unused fields</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Exception Handling</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Remove unneeded catch block</li>
-				<li>Handle uncaught exception by surrounding with try/catch or adding catch block to a surrounding try block</li>
-				<li>Handle uncaught exception by adding a throw declaration to the parent method or by generalize an existing throw declaration</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Build Path Problems</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Add a missing JAR or library for an unresolvable type</li>
-				<li>Open the build path dialog for access restriction problems or missing binary classes.</li>
-				<li>Change project compliance and JRE to 1.5</li>
-				<li>Change workspace compliance and JRE to 1.5</li>
-			</ul>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" align="right"><b>Others</b></td>
-			<td valign="top" align="left">
-			<ul>
-				<li>Add cast or change cast to fix type mismatches</li>
-				<li>Let a type implement an interface to fix type mismatches</li>
-				<li>Add type arguments to raw references</li>
-				<li>Complete switch statements over enums</li>
-				<li>Remove dead code</li>
-				<li>Insert '//$FALL-THROUGH$'</li>
-				<li>Insert null check</li>
-				
-				
-				<li>For non-NLS strings open the NLS wizard or mark as non-NLS</li>
-				<li>Add missing @Override, @Deprecated annotations</li>
-				<li>Add missing Javadoc comments</li>
-				<li>Add missing Javadoc tags</li>
-				<li>Suppress a warning using @SuppressWarnings</li>
-				<li>Throw the allocated object</li>
-				<li>Return the allocated object</li>
-			</ul>
-			</td>
-		</tr>
-	</tbody>
-</table>
-
-
-
-<p>Quick Assists are proposals available even if there is no problem or warning. See the <a href='ref-java-editor-quickassist.htm'>Quick Assist</a> page for more information.</p>
-<p>
-	<img src="../images/ngrelc.png"  alt="Related concepts" border="0"></p>
-	<p>
-	<a href="../concepts/concept-java-editor.htm">Java editor</a><br>
-    <a href="../concepts/concept-quickfix-assist.htm">Quick fix and assist</a><br>
-	</p>
-	<p><img src="../images/ngrelr.png"  alt="Related reference" border="0"></p>
-	<p>
-    <a href="ref-java-editor-quickassist.htm">Quick Assist</a><br>
-	<a href="ref-jdt-actions.htm">JDT actions</a>
-</p>
-
-
-</body>
+    <h1>
+      Quick Fix
+    </h1>
+    <p>
+      The Java editor offers corrections to problems found while typing and
+      after compiling. To show that correction proposals are available for a
+      problem or warning, a 'light bulb' is visible on the editor's annotation
+      bar.<br />
+      <br />
+      Left click on the light bulb or invoking <b>Ctrl+1 (Edit > Quick
+      Fix)</b> brings up the proposals for the problem at the cursor
+      position.<br />
+
+      Each quick fix shows a preview when selected in the proposal
+      window.<br />
+    </p><br />
+    <p>
+      <img src="images/c-quickfix.png" border="0" alt=
+      "Quick fix selection dialog" />
+    </p>
+    <p>
+      Some selected quick fixes can also be assigned with direct shortcuts. You
+      can configure these shortcuts on the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens keys preference page" /> <b>General > Keys</b></a> preference
+      page (in the 'Source' category).<br />
+
+    </p>
+    <p>
+      Some quick fixes offer to fix all problems of the same kind in the
+      current file at once. The information text in proposal window contains
+      this information for all applicable proposals. To fix all problems of the
+      same kind, press <b>Ctrl + Enter</b>.
+    </p>
+    <p>
+      The following quick fixes are available:
+    </p>
+    <table border="0" cellpadding="10" cellspacing="0" width="700" summary=
+    "List if quick fixes">
+      <tbody>
+
+        <tr>
+          <td width="20%" valign="top" align="right">
+            <b>Package Declaration</b>
+          </td>
+          <td width="80%" valign="top" align="left">
+            <ul>
+              <li>Add missing package declaration or correct package
+              declaration
+              </li>
+              <li>Move compilation unit to package that corresponds to the
+              package declaration
+              </li>
+
+            </ul>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="right">
+            <b>Imports</b>
+          </td>
+          <td valign="top" align="left">
+
+            <ul>
+              <li>Remove unused, unresolvable or non-visible import
+              </li>
+              <li>Invoke 'Organize imports' on problems in imports
+              </li>
+            </ul>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="right">
+
+            <b>Types</b>
+          </td>
+          <td valign="top" align="left">
+            <ul>
+              <li>Create new class, interface, enum, annotation or type
+              variable for references to types that can not be resolved
+              </li>
+              <li>Change visibility for types that are accessed but not visible
+              </li>
+              <li>Rename to a similar type for references to types that can not
+              be resolved
+              </li>
+
+              <li>Add import statement for types that can not be resolved but
+              exist in the project
+              </li>
+              <li>Add explicit import statement for ambiguous type references
+              (two import-on-demands for the same type)
+              </li>
+              <li>If the type name is not matching with the compilation unit
+              name either rename the type or rename the compilation unit
+              </li>
+              <li>Remove unused private types
+              </li>
+              <li>Add missing type annotation attributes
+              </li>
+            </ul>
+
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="right">
+            <b>Constructors</b>
+          </td>
+          <td valign="top" align="left">
+            <ul>
+
+              <li>Create new constructor for references to constructors that
+              can not be resolved (this, super or new class creation)
+              </li>
+              <li>Reorder, add or remove arguments for constructor references
+              that mismatch parameters
+              </li>
+              <li>Change method with constructor name to constructor (remove
+              return type)
+              </li>
+              <li>Change visibility for constructors that are accessed but not
+              visible
+              </li>
+              <li>Remove unused private constructor
+              </li>
+              <li>Create constructor when super call of the implicit default
+              constructor is undefined, not visible or throws an exception
+              </li>
+
+              <li>If type contains unimplemented methods, change type modifier
+              to 'abstract' or add the method to implement
+              </li>
+            </ul>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="right">
+            <b>Methods</b>
+          </td>
+
+          <td valign="top" align="left">
+            <ul>
+              <li>Create new method for references to methods that can not be
+              resolved
+              </li>
+              <li>Rename to a similar method for references to methods that can
+              not be resolved
+              </li>
+              <li>Reorder or remove arguments for method references that
+              mismatch parameters
+              </li>
+              <li>Correct access (visibility, static) of referenced methods
+              </li>
+              <li>Remove unused private methods
+              </li>
+
+              <li>Correct return type for methods that have a missing return
+              type or where the return type does not match the return statement
+              </li>
+              <li>Add return statement if missing
+              </li>
+              <li>For non-abstract methods with no body change to 'abstract' or
+              add body
+              </li>
+              <li>For an abstract method in a non-abstract type remove abstract
+              modifier of the method or make type abstract
+              </li>
+              <li>For an abstract/native method with body remove the abstract
+              or native modifier or remove body
+              </li>
+              <li>Change method access to 'static' if method is invoked inside
+              a constructor invocation (super, this)
+              </li>
+
+              <li>Change method access to default access to avoid emulated
+              method access
+              </li>
+              <li>Add 'synchronized' modifier
+              </li>
+              <li>Override hashCode()
+              </li>
+              <li>Open the 'Generate hashCode() and equals()' wizard
+              </li>
+            </ul>
+          </td>
+        </tr>
+
+        <tr>
+          <td valign="top" align="right">
+            <b>Fields and variables</b>
+          </td>
+          <td valign="top" align="left">
+            <ul>
+              <li>Correct access (visibility, static) of referenced fields
+              </li>
+              <li>Create new fields, parameters, local variables or constants
+              for references to variables that can not be resolved
+              </li>
+
+              <li>Rename to a variable with similar name for references that
+              can not be resolved
+              </li>
+              <li>Remove unused private fields
+              </li>
+              <li>Correct non-static access of static fields
+              </li>
+              <li>Add 'final' modifier to local variables accessed in outer
+              types
+              </li>
+              <li>Change field access to default access to avoid emulated
+              method access
+              </li>
+              <li>Change local variable type to fix a type mismatch
+              </li>
+
+              <li>Initialize a variable that has not been initialized
+              </li>
+              <li>Create getter and setters for invisible or unused fields
+              </li>
+            </ul>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="right">
+            <b>Exception Handling</b>
+
+          </td>
+          <td valign="top" align="left">
+            <ul>
+              <li>Remove unneeded catch block
+              </li>
+              <li>Handle uncaught exception by surrounding with try/catch or
+              adding catch block to a surrounding try block
+              </li>
+              <li>Handle uncaught exception by adding a throw declaration to
+              the parent method or by generalize an existing throw declaration
+              </li>
+            </ul>
+
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="right">
+            <b>Build Path Problems</b>
+          </td>
+          <td valign="top" align="left">
+            <ul>
+
+              <li>Add a missing JAR or library for an unresolvable type
+              </li>
+              <li>Open the build path dialog for access restriction problems or
+              missing binary classes.
+              </li>
+              <li>Change project compliance and JRE to 1.5
+              </li>
+              <li>Change workspace compliance and JRE to 1.5
+              </li>
+            </ul>
+          </td>
+        </tr>
+
+        <tr>
+          <td valign="top" align="right">
+            <b>Others</b>
+          </td>
+          <td valign="top" align="left">
+            <ul>
+              <li>Add cast or change cast to fix type mismatches
+              </li>
+              <li>Let a type implement an interface to fix type mismatches
+              </li>
+
+              <li>Add type arguments to raw references
+              </li>
+              <li>Complete switch statements over enums
+              </li>
+              <li>Remove dead code
+              </li>
+              <li>Insert '//$FALL-THROUGH$'
+              </li>
+              <li>Insert null check
+              </li>
+              <li>For non-NLS strings open the NLS wizard or mark as non-NLS
+              </li>
+
+              <li>Add missing @Override, @Deprecated annotations
+              </li>
+              <li>Add missing Javadoc comments
+              </li>
+              <li>Add missing Javadoc tags
+              </li>
+              <li>Suppress a warning using @SuppressWarnings
+              </li>
+              <li>Throw the allocated object
+              </li>
+              <li>Return the allocated object
+              </li>
+
+            </ul>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      Quick Assists are proposals available even if there is no problem or
+      warning. See the <a href='ref-java-editor-quickassist.htm'>Quick
+      Assist</a> page for more information.
+    </p>
+
+    <p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+    </p>
+    <p>
+      <a href="../concepts/concept-java-editor.htm">Java editor</a><br />
+      <a href="../concepts/concept-quickfix-assist.htm">Quick fix and
+      assist</a><br />
+    </p>
+    <p>
+
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+      <a href="ref-java-editor-quickassist.htm">Quick Assist</a><br />
+      <a href="ref-jdt-actions.htm">JDT actions</a>
+    </p>
+  </body>
 </html>
+
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-jdt-faq.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-jdt-faq.htm
index c3e8dc2..45ebab6 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-jdt-faq.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-jdt-faq.htm
@@ -1,161 +1,250 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Frequently Asked Questions on JDT
     </title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
   </head>
   <body>
     <h1>
       Frequently Asked Questions on JDT
     </h1>
     <h3>
-      Can I use a Java compiler other than the built-in one (javac for example) with the workbench?
+      Can I use a Java compiler other than the built-in one (javac for example)
+      with the workbench?
     </h3>
     <p>
-      No. The JDT provides a number of sophisticated features including fully automatic incremental compilation, code snippet evaluation, code assist, type hierarchies, and hot
-      code replace. These features require special support found in the workbench Java compiler (an integral part of the JDT's incremental project builder), but not available
-      in standard Java compilers.
+
+      No. The JDT provides a number of sophisticated features including fully
+      automatic incremental compilation, code snippet evaluation, code assist,
+      type hierarchies, and hot code replace. These features require special
+      support found in the workbench Java compiler (an integral part of the
+      JDT's incremental project builder), but not available in standard Java
+      compilers.
     </p>
     <h3>
       Where do Java packages come from?
     </h3>
     <p>
-      A project contains only files and folders. The notion of a Java package is introduced by a Java project's class path (at the UI, the Package Explorer presents the
-      packages as defined by the classpath). <strong>Tip:</strong> If the package structure is not what you expect, check out your class path. The Java search infrastructure only
-      finds declarations for and references from Java elements on the class path.
+      A project contains only files and folders. The notion of a Java package
+      is introduced by a Java project's class path (at the UI, the Package
+      Explorer presents the packages as defined by the classpath).
+      <strong>Tip:</strong> If the package structure is not what you expect,
+      check out your class path. The Java search infrastructure only finds
+      declarations for and references from Java elements on the class path.
     </p>
     <h3>
+
       When do I use an internal versus an external JAR library file?
     </h3>
     <p>
-      An internal resource resides in some project in the workbench and is therefore managed by the workbench; like other resources, these resources can be version managed by the
-      workbench. An external resource is not part of the workbench and can be used only by reference. For example, a JRE is often external and very large, and there is no need to
-      associate it with a VCM system.
+      An internal resource resides in some project in the workbench and is
+      therefore managed by the workbench; like other resources, these resources
+      can be version managed by the workbench. An external resource is not part
+      of the workbench and can be used only by reference. For example, a JRE is
+      often external and very large, and there is no need to associate it with
+      a VCM system.
     </p>
     <h3>
       When should I use source folders within a Java project?
     </h3>
     <p>
-      Each Java project locates its Java source files via one or more source type entries on the project's class path. Use source folders to organize the packages of a large
-      project into useful grouping, or to keep source code separate from other files in the same project. Also, use source folders if you have files (documentation for example)
-      which need not be on the build path.
+      Each Java project locates its Java source files via one or more source
+      type entries on the project's class path. Use source folders to organize
+      the packages of a large project into useful grouping, or to keep source
+      code separate from other files in the same project. Also, use source
+      folders if you have files (documentation for example) which need not be
+      on the build path.
     </p>
+
     <h3>
       What are source attachments, How do I define one?
     </h3>
     <p>
-      Libraries are stored as JAR files containing binary class files (and perhaps other resources). These binary class files provide signature information for packages, classes,
-      methods, and fields. This information is sufficient to compile or run against, but contains far less information that the original source code. In order to make it easier to
-      browse and debug binary libraries, there is a mechanism for associating a corresponding source JAR (or ZIP) file with a binary JAR file.
+      Libraries are stored as JAR files containing binary class files (and
+      perhaps other resources). These binary class files provide signature
+      information for packages, classes, methods, and fields. This information
+      is sufficient to compile or run against, but contains far less
+      information that the original source code. In order to make it easier to
+      browse and debug binary libraries, there is a mechanism for associating a
+      corresponding source JAR (or ZIP) file with a binary JAR file.
     </p>
     <h3>
-      Why are all my resources duplicated in the output folder (bin, for example)?
+      Why are all my resources duplicated in the output folder (bin, for
+      example)?
     </h3>
     <p>
-      If your Java project is using source folders, then in the course of compiling the source files in the project, the Java compiler copies non-Java resources to the output
-      folder as well so that they will be available on the class path of the running program. To avoid certain resources to be copied to the output location you can set a resource
-      filter in the Java compiler preferences: <strong>Window > Preferences > Java > Compiler > Building</strong>
+
+      If your Java project is using source folders, then in the course of
+      compiling the source files in the project, the Java compiler copies
+      non-Java resources to the output folder as well so that they will be
+      available on the class path of the running program. To avoid certain
+      resources to be copied to the output location you can set a resource
+      filter in the Java compiler preferences: <strong>Window > Preferences
+      > Java > Compiler > Building</strong>
     </p>
     <h3>
-      How do I prevent having my documentation files from being copied to the project's output folder?
+      How do I prevent having my documentation files from being copied to the
+      project's output folder?
     </h3>
+
     <p>
-      Use source folders and put any resources that you do not want to be copied to the output folder into a separate folder that is not included on the class path.  You can also
-      set a resource filter in the Java compiler preferences:<strong> Window > Preferences > Java > Compiler > Building</strong> to for example *.doc.
+      Use source folders and put any resources that you do not want to be
+      copied to the output folder into a separate folder that is not included
+      on the class path. You can also set a resource filter in the Java
+      compiler preferences: <strong>Window > Preferences > Java >
+      Compiler > Building</strong> to for example *.doc.
     </p>
+
     <h3>
       How do I create a default package?
     </h3>
     <p>
-      You don't have to. Files in the root folder of a source folder or project are considered to be in the default package. In effect, every source folder has the capability
-      of having a fragment of the default package.
+      You don't have to. Files in the root folder of a source folder or project
+      are considered to be in the default package. In effect, every source
+      folder has the capability of having a fragment of the default package.
     </p>
     <h3>
       What is refactoring?
     </h3>
     <p>
-      Refactoring means behavior-preserving program transformations. The JDT supports a number of transformations described in Martin Fowler's book <em>Refactoring: Improving
-      the Design of Existing Code</em>, Addison-Wisely 1999.
+
+      Refactoring means behavior-preserving program transformations. The JDT
+      supports a number of transformations described in Martin Fowler's book
+      <em>Refactoring: Improving the Design of Existing Code</em>,
+      Addison-Wisely 1999.
     </p>
     <h3>
       When do I use Open Declaration (F3)?
     </h3>
     <p>
-      To find out the Java element that corresponds to the selected source range with the help of the compiler.
+      To find out the Java element that corresponds to the selected source
+      range with the help of the compiler.
     </p>
     <h3>
-      Is the Java program information (type hierarchy, declarations, references, for example) produced by the Java builder? Is it still updated when auto-build is off?
+
+      Is the Java program information (type hierarchy, declarations,
+      references, for example) produced by the Java builder? Is it still
+      updated when auto-build is off?
     </h3>
     <p>
-      The Java program information is independent from the Java builder. It is automatically updated when performing resource changes or Java operations. In particular, all the
-      functionality offered by the Java tooling (for example, type hierarchies, code assisting, search) will continue to perform accurately when auto-build is off; for example,
-      when doing heavy refactoring which require to turn off the builders, you can still use code assist, which will reflect the latest changes (not yet build). Other than the
-      launching (that is, running and debugging) of programs, the only functionality which requires the Java builder is the evaluation of code snippets.
+      The Java program information is independent from the Java builder. It is
+      automatically updated when performing resource changes or Java
+      operations. In particular, all the functionality offered by the Java
+      tooling (for example, type hierarchies, code assisting, search) will
+      continue to perform accurately when auto-build is off; for example, when
+      doing heavy refactoring which require to turn off the builders, you can
+      still use code assist, which will reflect the latest changes (not yet
+      build). Other than the launching (that is, running and debugging) of
+      programs, the only functionality which requires the Java builder is the
+      evaluation of code snippets.
     </p>
     <h3>
-      After reopening a workbench, the first build that happens after editing a Java source file seems to take a long time. Why is that?
+      After reopening a workbench, the first build that happens after editing a
+      Java source file seems to take a long time. Why is that?
     </h3>
     <p>
-      The Java incremental project builder saves its internal state to a file when the workbench is closed. On the first build after the project is reopened, the Java incremental
-      project builder will restore its internal state. When this file is large, the user experiences an unusually long build delay.
+      The Java incremental project builder saves its internal state to a file
+      when the workbench is closed. On the first build after the project is
+      reopened, the Java incremental project builder will restore its internal
+      state. When this file is large, the user experiences an unusually long
+      build delay.
     </p>
+
     <h3>
       I can't see a type hierarchy for my class. What can I do?
     </h3>
     <p>
-      Check that you have your build class path set up properly. Setting up the proper build class path is an important task when doing Java development. Without the correct build
-      path, you will not be able to compile your code. In addition, you will not be able to search or look at the type hierarchies for Java elements.
-    </p>
-    <h3>
-      How do I turn off "auto compile" and do it manually when I want?
-    </h3>
-    
-<p> Clear the <strong>Build automatically</strong> checkbox on the
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Workspace preference page">
-<strong>General > Workspace</strong></a> preference page.
-When you want to build, press <kbd>Ctrl+B</kbd>, 
-  or select <strong>Project > Build All</strong> from the menu bar. </p>
-<p><b>Hint</b>: when you turn "auto compile" off and build manually, 
-  you may also want to select the
-  <strong>Save automatically before build</strong> checkbox on the
-  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Workspace preference page">
-  <strong>General > Workspace</strong></a> preference page.
-</p>
-<h3>When I select a method or a field in the Outline view, only the source for 
-  that element is shown in the editor. What do I do to see the source of the whole 
-  file?</h3>
-<p>There is a toolbar button <b>Show Source of Selected Element Only</b> - all 
-  you have to do is un-press it.</p>
-<h3>Can I nest source folders?</h3>
-<p>Yes, you can use exclusion filters to create nested source folders.</p>
-<h3>Can I have separate output folders for each source folder?</h3>
-<p>Yes, select the <b>Allow output folders for source folders</b> checkbox in 
-  the <b>Java Build Path > Source</b> property page of your Java project.</p>
-<h3>Can I have an output or source folder that is located outside of the workspace?</h3>
-<p>Yes, you can create a linked folder that points to the desired location and 
-  use that folder as the source or output folder in your Java project.</p>
-    <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+      Check that you have your build class path set up properly. Setting up the
+      proper build class path is an important task when doing Java development.
+      Without the correct build path, you will not be able to compile your
+      code. In addition, you will not be able to search or look at the type
+      hierarchies for Java elements.
+    </p>
+    <h3>
+      How do I turn off "auto compile" and do it manually when I want?
+    </h3>
+    <p>
+
+      Clear the <strong>Build automatically</strong> checkbox on the <a class=
+      "command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Workspace preference page" /> <strong>General >
+      Workspace</strong></a> preference page. When you want to build, press
+      <kbd>Ctrl+B</kbd>, or select <strong>Project > Build All</strong> from
+      the menu bar.
+    </p>
+
+    <p>
+      <b>Hint</b>: when you turn "auto compile" off and build manually, you may
+      also want to select the <strong>Save automatically before build</strong>
+      checkbox on the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Workspace preference page" /> <strong>General >
+      Workspace</strong></a> preference page.
+    </p>
+
+    <h3>
+      When I select a method or a field in the Outline view, only the source
+      for that element is shown in the editor. What do I do to see the source
+      of the whole file?
+    </h3>
+    <p>
+      There is a toolbar button <b>Show Source of Selected Element Only</b> -
+      all you have to do is un-press it.
     </p>
+    <h3>
+      Can I nest source folders?
+    </h3>
+
     <p>
+      Yes, you can use exclusion filters to create nested source folders.
+    </p>
+    <h3>
+      Can I have separate output folders for each source folder?
+    </h3>
+    <p>
+      Yes, select the <b>Allow output folders for source folders</b> checkbox
+      in the <b>Java Build Path > Source</b> property page of your Java
+      project.
+    </p>
+
+    <h3>
+      Can I have an output or source folder that is located outside of the
+      workspace?
+    </h3>
+    <p>
+      Yes, you can create a linked folder that points to the desired location
+      and use that folder as the source or output folder in your Java project.
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+    </p>
+    <p>
+
       <a href="../concepts/concept-jdt.htm">Java development tools (JDT)</a>
     </p>
     <p>
-      <img border="0" src="../images/ngrelr.png" alt="Related reference" >
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
-      <a href="../reference/ref-properties-build-path.htm">Java build path page</a><br>
-       <a href="../reference/ref-jdt-glossary.htm">JDT glossary</a>
+      <a href="../reference/ref-properties-build-path.htm">Java build path
+      page</a><br />
+      <a href="../reference/ref-jdt-glossary.htm">JDT glossary</a>
+
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-keybindings.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-keybindings.htm
index 651a7a1..985b0fe 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-keybindings.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-keybindings.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -28,7 +28,7 @@ table tr td { padding: 3pt; }
 what view or editor is selected, whether a dialog is open, what plug-ins are
 installed, and what operating and windowing system is being used.  At any
 time, you can obtain a list of available key bindings using Key Assist 
-(<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.showKeyAssist")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+(<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.showKeyAssist")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Show key assist">
 <b>Help > Key Assist...</b></a>
 or Ctrl+Shift+L).  The following tables list some 
 popular key bindings available in the Java development tools.</p>
@@ -36,8 +36,8 @@ popular key bindings available in the Java development tools.</p>
 <h3><strong>Java editor actions</strong></h3>
 <table width="75%" border="1">
   <colgroup>
-    <col width="126pt">
-    <col width="110pt">
+    <col width="126">
+    <col width="110">
   </colgroup>
   <tr><td>Add Block Comment</td>
     <td>Ctrl+Shift+/</td>
@@ -163,8 +163,8 @@ popular key bindings available in the Java development tools.</p>
 <h3><strong>Debug actions</strong></h3>
 <table width="75%" border="1">
   <colgroup>
-    <col width="126pt">
-    <col width="110pt">
+    <col width="126">
+    <col width="110">
   </colgroup>
   <tr> 
     <td>Debug Last Launched</td>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-file.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-file.htm
index 04e451e..f12ceef 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-file.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-file.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <title>
@@ -17,8 +17,6 @@
         File menu commands:
     </p>
     <table border="1" cellspacing="0" cellpadding="5" summary="File actions">
-      <caption>
-      </caption>
       <tbody>
         <tr>
           <th>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-navigate.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-navigate.htm
index e10502b..45a16b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-navigate.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-menu-navigate.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <title>
@@ -171,6 +171,28 @@
             Shift+F2
           </td>
         </tr>
+        <tr>
+          <td>
+            Open from Clipboard
+          </td>
+          <td>
+            Tries to open the matching Java element in the editor if the clipboard contains a single line. Otherwise it opens the contents in the Java Stack Trace Console. Examples:
+             <ul>
+              <li>java.lang.String</li>
+              <li>String</li>
+              <li>String#getBytes</li>
+              <li>String.getBytes</li>
+              <li>java.lang.String.getBytes(String)</li>
+              <li>String.java:123</li>
+              <li>at java.lang.String.matches(String.java:1550)</li>
+              <li>java.lang.String.valueOf(char) line: 1456</li>
+              <li>currentTimeMillis()</li>
+            </ul> 
+          </td>
+          <td>
+             
+          </td>
+        </tr>
         <tr align="left" valign="top">
           <td>
             Open Type
@@ -201,7 +223,7 @@
             </p>
           </td>
           <td align="left" valign="top">
-            <p>Opens the Open Resource dialog to open any resource in your workspace.</p>
+            <p>Opens the <a href="../../org.eclipse.platform.doc.user/reference/ref-dialog-open-resource.htm">Open Resource</a> dialog to open any resource in your workspace.</p>
           </td>
           <td>
             Ctrl+Shift+R
@@ -238,7 +260,10 @@
             Quick Outline
           </td>
           <td>
-            Opens the lightweight outliner for the currently selected type.
+            Opens the <a href="../gettingStarted/qs-Quickviews.htm">lightweight outliner</a> for the currently selected type.
+            <p>Pressing Ctrl+O a second time will show all inherited fields, types and methods as well
+            (for the types marked with <img src="../images/org.eclipse.jdt.ui/ovr16/focus_ovr.png" alt="Triangle"> on the left).
+            Inherited members are shown in blue.</p>
           </td>
           <td>Ctrl+O
           </td>
@@ -248,7 +273,9 @@
             Quick Type Hierarchy
           </td>
           <td>
-            Opens the lightweight hierarchy viewer for the currently selected type.
+            Opens the <a href="../gettingStarted/qs-6.htm#quick_type_hierarchy">lightweight hierarchy</a> viewer for the currently selected type.
+            <p>Pressing Ctrl+T while the type hierarchy view is shown will toggle between 
+            supertype hierarchy and subtype hierarchy.</p>
           </td>
           <td>Ctrl+T
           </td>
@@ -269,7 +296,7 @@
             Go to Line
           </td>
           <td>
-            Opens an a dialog which allows entering the line number to which the editor should jump to. Editor only.
+            Opens a dialog which allows entering the line number to which the editor should jump to. Editor only.
           </td>
           <td>
             Ctrl+L
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-refactoring-extract-method.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-refactoring-extract-method.htm
index 0b7e27a..5f77c75 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-refactoring-extract-method.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-refactoring-extract-method.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <title>
       Extract Method Errors
@@ -56,7 +56,6 @@
         <code>Cannot extract selection that ends in the middle of a statement</code> Adjust selection so 
         that it fully covers a set of statements or expressions. The users can extend the selection to 
         a valid range using the <strong>Expand Selection to</strong> in the <a href="ref-menu-edit.htm">Edit menu.</a><br>
-        <a href="ref-menu-edit.htm"></a>
       </li>
     </ul>
     <img src="../images/ngrelc.png" alt="Related concepts" border="0" > 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-toolbar-run.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-toolbar-run.htm
index a6b2e0c..f8f7618 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-toolbar-run.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-toolbar-run.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Run and Debug toolbar actions</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-java-project.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-java-project.htm
index a7c455e..e01d79a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-java-project.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-java-project.htm
@@ -2,7 +2,7 @@
 
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
@@ -200,7 +200,7 @@ resources inside the folder should not be visible to the compiler.</p>
 
 			<td align="center" valign="middle" width="20%">Exclude</td>
 
-			<td align="left" valign="top">Add a resource to the exclusion filter of it's parent source folder. 
+			<td align="left" valign="top">Add a resource to the exclusion filter of its parent source folder. 
 			The excluded resource and all its children are no longer visible to the compiler.
 			</td>
 		</tr>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-refactorings.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-refactorings.htm
index cece44f..4a21363 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-refactorings.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/ref-wizard-refactorings.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <title>
@@ -98,13 +98,13 @@
     	can be typed into the editor when the rename refactoring is invoked.
     </p>
     <p>
-      <img src="../images/ngrelc.png" alt="Related concepts" border="0" >
+      <img src="../images/ngrelc.png" alt="Related concepts">
     </p>
     <p>
       <a href="../concepts/concept-refactoring.htm">Refactoring support</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img src="../images/ngrelr.png" alt="Related reference">
     </p>
     <p>
       <a href="ref-menu-refactor.htm">Refactoring actions</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_details.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_details.PNG
index b8e35d7..844e22e 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_details.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_details.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_properties_dialog.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_properties_dialog.PNG
index 00a7fec..d0c2b25 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_properties_dialog.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/images/ref-views_breakpoint_properties_dialog.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/ref-breakpoints_view.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/ref-breakpoints_view.htm
index b8044a5..7ee32c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/ref-breakpoints_view.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/breakpoints/ref-breakpoints_view.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <meta http-equiv="Content-Style-Type" content="text/css"/>
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css"/>
@@ -13,7 +13,7 @@
 <p>You can double-click a breakpoint to display its location in the editor (if applicable). You can also enable or disable breakpoints, delete them, add new ones, group them by working set, or set hit counts. </p>
 <p>In the example shown below the <strong><a href="../../../reference/views/breakpoints/ref-groupby_viewaction.htm">Group by > Breakpoint Types</a></strong> option is turned on.</p>
 <p><img src="../../../reference/views/breakpoints/images/ref-views_breakpoints_view.PNG" alt="Breakpoints View"/> </p>
-<a name="detail_pane"/>
+<a name="detail_pane"></a>
 <p>The breakpoints view displays details of the selected breakpoint and can be used to configure attributes
    of the selected breakpoint similar to the <a href="../../../reference/views/breakpoints/ref-properties_contextaction.htm"><strong>Breakpoint Properties...</strong></a>
    action. The orientation of the detail pane can be configured from the view drop down menu.</p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-clear_action.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-clear_action.htm
index 5108b59..cfb3aaf 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-clear_action.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-clear_action.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -14,7 +14,7 @@
 <p> <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
   <a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a></p>
 <p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/tasks-consoleAppearance.htm">Changing the appearance of the console view</a><a href="../breakpoints/ref-breakpoints_view.htm"></a><br>
+<p> <a href="../../../tasks/tasks-consoleAppearance.htm">Changing the appearance of the console view</a><br>
   <a href="../../../reference/views/ref-viewsandeditors.htm">Views and editors</a> </p>
 <p><img src="../../../images/ngrelr.png" alt="Related Reference"></p>
 <p><a href="../../../reference/views/console/ref-console_view.htm"> Console View</a> <br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-console_view.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-console_view.htm
index 0b2f603..d31ccc9 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-console_view.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-console_view.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -69,7 +69,7 @@
 <p> <a href="../../../concepts/concept-java-views.htm">Java views</a><br>
   <a href="../../../concepts/concept-java-perspective.htm">Java perspectives</a> </p>
 <p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="../../../tasks/tasks-consoleAppearance.htm">Changing the appearance of the console view</a><a href="../breakpoints/ref-breakpoints_view.htm"></a><br>
+<p> <a href="../../../tasks/tasks-consoleAppearance.htm">Changing the appearance of the console view</a><br>
   <a href="../../../reference/views/ref-viewsandeditors.htm">Views and editors</a> </p>
 <p><img src="../../../images/ngrelr.png" alt="Related Reference"></p>
 <p><a href="../../../reference/preferences/run-debug/ref-console.htm">Console Preferences</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-prefs_action.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-prefs_action.htm
index a5fc431..e6b17ac 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-prefs_action.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/console/ref-prefs_action.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
 <title>Console Preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 <h1> Console Preferences </h1>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-configdialog.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-configdialog.PNG
index 70ddf16..156660a 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-configdialog.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-configdialog.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog.PNG
index 62b9dd2..3464465 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog2.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog2.PNG
index 0bb24ba..2bfd456 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog2.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/images/ref-properties_dialog2.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-breadcrumb.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-breadcrumb.htm
index 00827be..d4c04d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-breadcrumb.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-breadcrumb.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -11,7 +11,7 @@
 <h1> Debug Breadcrumb </h1>
 <p> Debug Breadcrumb is a compact presentation of the currently active debug context and its parents. </p>  
 <p> <img src="images/ref-breadcrumb.png" alt="Debug Breadcrumb"> </p>
-<p> To enable the Debug Breadcrumb, change the <a href="../ref-debug_view.htm"><strong>Debug View</strong></a> layout to Breadcrumb (Select <strong>Layout->Breadcrumb</strong> in the Debug View menu).  Alternatively, resize the Debug View such that the height of the view is small enough to fit only one line of text.  This will cause the view to change over to the Breadcrumb layout automatically. </p>
+<p> To enable the Debug Breadcrumb, change the <a href="ref-debug_view.htm"><strong>Debug View</strong></a> layout to Breadcrumb (Select <strong>Layout->Breadcrumb</strong> in the Debug View menu).  Alternatively, resize the Debug View such that the height of the view is small enough to fit only one line of text.  This will cause the view to change over to the Breadcrumb layout automatically. </p>
 <p> The Debug Breadcrumb allows to invoke actions on any element shown in the breadcrumb.  Actions can be invoked through the context menu or through key bindings.  To select an element in the breadcrumb click on it or activate the Debug view and use the <strong>left</strong> and <strong>right</strong> arrow keys.</p>
 <p> You can also change the active debug context using the breadcrumb. Click on one of the arrows or any element top open a drop-down window. The drop-down shows all the siblings of the element for which the drop-down was opened.  Click on an element to make it the new active debug context.  To open the drop-down with the keyboard, select and element and press the <strong>down</strong> key.</p>
 <p><img src="../../../images/ngrelr.png" alt="Related Reference"></p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-properties.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-properties.htm
index 9759d3f..564bbe9 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-properties.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/debug/ref-properties.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -15,11 +15,11 @@
 <p><img src="../../../reference/views/debug/images/ref-properties_dialog.PNG" alt="Properties Dialog"> </p>
 <p>You can also view the capabilities of the VM used to launch the associated target</p>
 <p><img src="../../../reference/views/debug/images/ref-properties_dialog2.PNG" alt="Properties Dialog Showing Capabilities"> </p>
-<p> <img border="0" src="../../../images/ngrelc.png" alt="Related concepts" > </p>
+<p> <img src="../../../images/ngrelc.png" alt="Related concepts" > </p>
 <p> <a href="../../../concepts/cdebugger.htm">Debugger</a><br>
   <a href="../../../concepts/clocdbug.htm">Local debugging</a><br>
   <a href="../../../concepts/cremdbug.htm">Remote debugging</a> </p>
-<p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
+<p> <img src="../../../images/ngrelt.png" alt="Related tasks" > </p>
 <p> <a href="../../../tasks/tasks-9.htm">Changing debugger launch options</a><br>
   <a href="../../../tasks/task-remotejava_launch_config.htm">Connecting to a remote VM with the Remote Java application launch configuration</a><br>
   <a href="../../../tasks/task-disconnect_remote_debug.htm">Disconnecting from a VM</a><br>
@@ -29,7 +29,7 @@
   <a href="../../../tasks/task-running_and_debugging.htm">Running and debugging</a><br>
   <a href="../../../tasks/task-stepping.htm">Stepping through the execution of a program</a><br>
   <a href="../../../tasks/task-suspending_threads.htm">Suspending threads</a> </p>
-<p> <img border="0" src="../../../images/ngrelr.png" alt="Related reference" > </p>
+<p> <img src="../../../images/ngrelr.png" alt="Related reference" > </p>
 <p> <a href="../../../reference/views/debug/ref-debug_view.htm">Debug View</a><br>
   <a href="../../preferences/run-debug/ref-run_debug.htm">Debug preferences</a></p>
 </body>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/expressions/ref-expressions_view.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/expressions/ref-expressions_view.htm
index a523f33..373df79 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/expressions/ref-expressions_view.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/expressions/ref-expressions_view.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -12,7 +12,7 @@
 <p> Data can be inspected in the <strong>Expressions View</strong>. You can inspect data from a 
   scrapbook page, a stack frame of a suspended thread, and other places. The Expressions 
   View opens automatically when an item is added to the view. Entries in the Expressions View can be selected to have more detailed information be displayed in the <a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a>. When debugging a Java program, data that contains variables can be expanded to show the variables and the fields the variables contain.</p>
-<p>The Expressions View. The <a href="../../../reference/views/shared/ref-detailpane.htm"></a> detail pane is the  area at the bottom of the view displaying text..</p>
+<p>The Expressions View. The <a href="../../../reference/views/shared/ref-detailpane.htm">Detail Pane</a> is the  area at the bottom of the view displaying text..</p>
 <p><img src="../../../reference/views/expressions/images/ref-expressions_view.PNG" alt="Expressions View"></p>
 <p>There are many commands available in the Expressions View:</p>
 <ul>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-call-hierarchy.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-call-hierarchy.htm
index 1187633..3b3ffc7 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-call-hierarchy.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-call-hierarchy.htm
@@ -1,10 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
 <title>Call Hierarchy View</title>
-<link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css"/>
 </head>
 <body>
 <h1>Call Hierarchy View</h1>
@@ -17,6 +18,9 @@
 			<p>Command</p>
 			</th>
 			<th>
+			<p>Name</p>
+			</th>
+			<th>
 			<p>Description</p>
 			</th>
 		</tr>
@@ -24,6 +28,9 @@
 	<tbody>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/refresh_nav.png" alt="Refresh"/>
+			</td>
+			<td valign="top">
 			<p>Refresh</p>
 			</td>
 			<td valign="top">
@@ -32,6 +39,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/refresh_nav.png" alt="Refresh"/>
+			</td>
+			<td valign="top">
 			<p>Refresh (context menu)</p>
 			</td>
 			<td valign="top">
@@ -40,6 +50,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/ch_cancel.png" alt="Cancel Current Search"/>
+			</td>
+			<td valign="top">
 			<p>Cancel Current Search</p>
 			</td>
 			<td valign="top">
@@ -48,6 +61,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/ch_callers.png" alt="Show Caller Hierarchy"/>
+			</td>
+			<td valign="top">
 			<p>Show Caller Hierarchy</p>
 			</td>
 			<td valign="top">
@@ -56,6 +72,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/ch_callees.png" alt="Show Callee Hierarchy"/>
+			</td>
+			<td valign="top">
 			<p>Show Callee Hierarchy</p>
 			</td>
 			<td valign="top">
@@ -64,6 +83,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/history_list.png" alt="Show History List"/>
+			</td>
+			<td valign="top">
 			<p>Show History List</p>
 			</td>
 			<td valign="top">
@@ -72,6 +94,20 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/pin_view.png" alt="Pin the Call Hierarchy View"/>
+			</td>
+			<td valign="top">
+			<p>Pin the Call Hierarchy View</p>
+			</td>
+			<td valign="top">
+			<p>Pins the current view and enables the user to open multiple Call Hierarchy views at the same time.</p>
+			</td>
+		</tr>
+		<tr>
+			<td valign="top">
+			 
+			</td>
+			<td valign="top">
 			<p>Layout</p>
 			</td>
 			<td valign="top">
@@ -80,6 +116,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			 
+			</td>
+			<td valign="top">
 			<p>Field Accesses</p>
 			</td>
 			<td valign="top">
@@ -88,6 +127,20 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			 
+			</td>
+			<td valign="top">
+			<p>Search In...</p>
+			</td>
+			<td valign="top">
+			<p>Specifies where in the scope the Call Hierarchy should search for results.</p>
+			</td>
+		</tr>
+		<tr>
+			<td valign="top">
+			 
+			</td>
+			<td valign="top">
 			<p>Search Scope</p>
 			</td>
 			<td valign="top">
@@ -96,6 +149,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/filter_ps.png" alt="Filters"/>
+			</td>
+			<td valign="top">
 			<p>Filters</p>
 			</td>
 			<td valign="top">
@@ -104,6 +160,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			 
+			</td>
+			<td valign="top">
 			<p>Expand with Constructors (context menu)</p>
 			</td>
 			<td valign="top">
@@ -117,6 +176,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			 
+			</td>
+			<td valign="top">
 			<p>Expand with Constructors...</p>
 			</td>
 			<td valign="top">
@@ -127,6 +189,9 @@
 		</tr>
 		<tr>
 			<td valign="top">
+			<img src="../../images/org.eclipse.jdt.ui/elcl16/remove_exc.png" alt="Remove from View"/>
+			</td>
+			<td valign="top">
 			<p>Remove from View</p>
 			</td>
 			<td valign="top">
@@ -135,7 +200,9 @@
 		</tr>
 	</tbody>
 </table>
-<p><img border="0" src="../../images/ngrelr.png" alt="Related reference"></p>
+<p><img src="../../images/ngrelc.png" alt="Related concepts" border="0"/></p>
+<p><a href="../../concepts/concept-java-views.htm">Java views</a><br/></p>
+<p><img border="0" src="../../images/ngrelr.png" alt="Related reference"/></p>
 <p><a href="ref-viewsandeditors.htm">Views and editors</a></p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-type-hierarchy.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-type-hierarchy.htm
index 5432beb..6f0bc9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-type-hierarchy.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-type-hierarchy.htm
@@ -1,12 +1,13 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
     <title>
       Type Hierarchy View
     </title>
-    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css"/>
   </head>
   <body>
     <h1>
@@ -40,6 +41,11 @@
           </th>
           <th>
             <p>
+              Name
+            </p>
+          </th>
+          <th>
+            <p>
               Description
             </p>
           </th>
@@ -48,6 +54,9 @@
       <tbody>
         <tr>
           <td valign="top">
+              <img src="../../images/org.eclipse.jdt.ui/elcl16/history_list.png" alt="Previous Hierarchy Inputs"/>
+          </td>
+          <td valign="top">
             <p>
               Previous Hierarchy Inputs
             </p>
@@ -60,6 +69,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/hierarchy_co.png" alt="Show the Type Hierarchy"/>
+          </td>
+          <td valign="top">
             <p>
               Show the Type Hierarchy
             </p>
@@ -73,6 +85,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/super_co.png" alt="Show the Supertype Hierarchy"/>
+          </td>
+          <td valign="top">
             <p>
               Show the Supertype Hierarchy
             </p>
@@ -87,6 +102,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/sub_co.png" alt="Show the Subtype Hierarchy"/>
+          </td>
+          <td valign="top">
             <p>
               Show the Subtype Hierarchy
             </p>
@@ -101,6 +119,9 @@
         </tr>
         <tr>
           <td valign="top">
+             
+          </td>
+          <td valign="top">
             <p>
               Layout > Hierarchy View Only
             </p>
@@ -129,6 +150,11 @@
           </th>
           <th>
             <p>
+              Name
+            </p>
+          </th>
+          <th>
+            <p>
               Description
             </p>
           </th>
@@ -137,6 +163,9 @@
       <tbody>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/impl_co.png" alt="Lock View and Show Members in Hierarchy"/>
+          </td>
+          <td valign="top">
             <p>
               Lock View and Show Members in Hierarchy
             </p>
@@ -152,6 +181,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/inher_co.png" alt="Show All Inherited Members"/>
+          </td>
+          <td valign="top">
             <p>
               Show All Inherited Members
             </p>
@@ -165,6 +197,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/definingtype_sort_co.png" alt="Sort Members by the Defining Type"/>
+          </td>
+          <td valign="top">
             <p>
               Sort Members by the Defining Type
             </p>
@@ -177,6 +212,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/fields_co.png" alt="Hide Fields"/>
+          </td>
+          <td valign="top">
             <p>
               Hide Fields
             </p>
@@ -189,6 +227,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/static_co.png" alt="Hide Static Fields and Methods"/>
+          </td>
+          <td valign="top">
             <p>
               Hide Static Fields and Methods
             </p>
@@ -201,20 +242,28 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/public_co.png" alt="Hide Non-Public Members"/>
+          </td>
+          <td valign="top">
             <p>
               Hide Non-Public Members
             </p>
           </td>
           <td valign="top">
             <p>
-              Shows or hides the static fields and methods.
+              Shows or hides the non-public fields and methods.
             </p>
           </td>
         </tr>
       </tbody>
     </table>
     <p>
-      <img border="0"  src="../../images/ngrelr.png" alt="Related reference"></p>
+      <img src="../../images/ngrelc.png" alt="Related concepts" border="0"/></p>
+      <p>
+      <a href="../../concepts/concept-java-views.htm">Java views</a><br/>
+    </p>
+    <p>
+      <img border="0"  src="../../images/ngrelr.png" alt="Related reference"/></p>
       <p>
       <a href="ref-viewsandeditors.htm">Views and editors</a>
     </p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-javadoc.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-javadoc.htm
new file mode 100644
index 0000000..178b48a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-javadoc.htm
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css"/>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+    <meta http-equiv="Content-Style-Type" content="text/css"/>
+    <title>
+      Javadoc View
+    </title>
+  </head>
+  <body>
+    <h1>
+      Javadoc View
+    </h1>
+    <p>
+      The Javadoc view shows the Javadoc of the element selected in the Java editor or in a Java view.
+	</p>
+    <table border="1" cellspacing="0" cellpadding="5" width="100%" summary="Outline view">
+      <caption>
+      Javadoc View commands:
+      </caption>
+      <thead>
+        <tr>
+          <th>
+            <p>
+              Command
+            </p>
+          </th>
+          <th>
+            <p>
+              Name
+            </p>
+          </th>
+          <th>
+            <p>
+              Description
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Back
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Navigates to the most recently viewed javadoc.
+            </p>
+         </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Forward
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Navigates to the javadoc that was displayed immediately after the current javadoc.
+			</p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/synced.png" alt="Link with Selection"/>
+          </td>
+          <td valign="top">
+            <p>
+              Link with Selection
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Links the Javadoc view's input with the selection in the Java editor or in a Java view.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/goto_input.png" alt="Open Input"/>
+          </td>
+          <td valign="top">
+            <p>
+             Open Input
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Opens the current input element of the Javadoc view in the Java editor.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/external_browser.png" alt="Open Attached Javadoc in a Browser"/>
+          </td>
+          <td valign="top">
+            <p>
+              Open Attached Javadoc in a Browser (Shift+F2)
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Opens the attached javadoc of current input of the Javadoc view in a browser. 
+            </p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../../images/ngrelc.png" alt="Related concepts" border="0"/></p>
+      <p>
+      <a href="../../concepts/concept-java-views.htm">Java views</a><br/>
+    </p>
+    <p>
+      <img border="0" src="../../images/ngrelr.png" alt="Related reference"/></p>
+      <p>
+       <a href="ref-viewsandeditors.htm">Views and editors</a>
+    </p>
+    
+  </body>
+</html>
+
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-junit.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-junit.htm
new file mode 100644
index 0000000..b574f7a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-junit.htm
@@ -0,0 +1,312 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css"/>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+    <meta http-equiv="Content-Style-Type" content="text/css"/>
+    <title>
+      JUnit View
+    </title>
+  </head>
+  <body>
+    <h1>
+      JUnit View
+    </h1>
+    <p>
+      The JUnit view shows you the JUnit test run progress and status, and allows you to rerun tests.
+	</p>
+    <table border="1" cellspacing="0" cellpadding="5" width="100%" summary="Outline view">
+      <caption>JUnit View commands:</caption>
+      <thead>
+        <tr>
+          <th>
+            <p>
+              Command
+            </p>
+          </th>
+          <th>
+            <p>
+              Name
+            </p>
+          </th>
+          <th>
+            <p>
+              Description
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/select_next.png" alt="Next Failed Test"/>
+          </td>
+          <td valign="top">
+            <p>
+              Next Failed Test
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Navigates to the next failed test.
+            </p>
+         </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/select_prev.png" alt="Previous Failed Test"/>
+          </td>
+          <td valign="top">
+            <p>
+              Previous Failed Test
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Navigates to the previous failed test.
+			</p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/obj16/failures.png" alt="Show Failures Only"/>
+          </td>
+          <td valign="top">
+            <p>
+              Show Failures Only
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Shows only failed tests.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/lock.png" alt="Scroll Lock"/>
+          </td>
+          <td valign="top">
+            <p>
+             Scroll Lock
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+			  Changes if scroll lock should be enabled or not.
+			</p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/relaunch.png" alt="Rerun Test"/>
+          </td>
+          <td valign="top">
+            <p>
+              Rerun Test
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Rerun the test.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/relaunchf.png" alt="Rerun Test - Failures First"/>
+          </td>
+          <td valign="top">
+            <p>
+              Rerun Test - Failures First
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Rerun the test, and run the failures first.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/stop.png" alt="Stop JUnit Test Run"/>
+          </td>
+          <td valign="top">
+            <p>
+              Stop JUnit Test Run
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Stops the current JUnit test run.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/history_list.png" alt="Test Run History"/>
+          </td>
+          <td valign="top">
+            <p>
+              Test Run History
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              This menu displays a history of previously run tests.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Clear Terminated
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Clears all the terminated test runs from the histroy.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Import...
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+			  Imports a test run result from a XML file.
+			</p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Import from URL...
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Imports a test run result via an URL.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Import URL from Clipboard
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Imports a test run result via an URL placed on clipboard.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Export
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Exports the test run result to a XML file.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.junit/elcl16/hierarchicalLayout.png" alt="Show Tests in Hierarchy"/>
+          </td>
+          <td valign="top">
+            <p>
+              Show Tests in Hierarchy
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Shows the tests in a hierarchical layout.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Show Execution Time
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Shows execution time for the tests.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Layout
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Specifies the layout of the JUnit view.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+             
+          </td>
+          <td valign="top">
+            <p>
+              Activate on Error/Failure Only
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Changes if the JUnit view should be activated only on error/failure or not.
+            </p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      <img src="../../images/ngrelc.png" alt="Related concepts" border="0"/></p>
+      <p>
+      <a href="../../concepts/concept-java-views.htm">Java views</a><br/>
+    </p>
+    <p>
+      <img border="0" src="../../images/ngrelr.png" alt="Related reference"/></p>
+      <p>
+       <a href="ref-viewsandeditors.htm">Views and editors</a>
+    </p>
+    
+  </body>
+</html>
+
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-outline.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-outline.htm
index 120ea07..d47383c 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-outline.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-outline.htm
@@ -1,10 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css"/>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+    <meta http-equiv="Content-Style-Type" content="text/css"/>
     <title>
       Java outline
     </title>
@@ -29,6 +30,11 @@
           </th>
           <th>
             <p>
+              Name
+            </p>
+          </th>
+          <th>
+            <p>
               Description
             </p>
           </th>
@@ -37,6 +43,9 @@
       <tbody>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/gointo_toplevel_type.png" alt="Go into Top Level Type"/>
+          </td>
+          <td valign="top">
             <p>
               Go into Top Level Type
             </p>
@@ -50,6 +59,24 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/collapseall.png" alt="Collapse All"/>
+          </td>
+          <td valign="top">
+            <p>
+              Collapse All
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Collapse all top level types.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/alphab_sort_co.png" alt="Sort"/>
+          </td>
+          <td valign="top">
             <p>
               Sort
             </p>
@@ -63,6 +90,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/fields_co.png" alt="Hide Fields"/>
+          </td>
+          <td valign="top">
             <p>
               Hide Fields
             </p>
@@ -75,6 +105,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/static_co.png" alt="Hide Static Fields and Methods"/>
+          </td>
+          <td valign="top">
             <p>
              Hide Static Fields and Methods
             </p>
@@ -87,18 +120,24 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/public_co.png" alt="Hide Non-Public Members"/>
+          </td>
+          <td valign="top">
             <p>
               Hide Non-Public Members
             </p>
           </td>
           <td valign="top">
             <p>
-              Shows or hides the static fields and methods.
+              Shows or hides the non-public fields and methods.
             </p>
           </td>
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/localtypes_co.png" alt="Hide Local Types"/>
+          </td>
+          <td valign="top">
             <p>
               Hide Local Types
             </p>
@@ -112,25 +151,25 @@
       </tbody>
     </table>
     <p>
-      <img src="../../images/ngrelc.png" alt="Related concepts" border="0" ></p>
+      <img src="../../images/ngrelc.png" alt="Related concepts" border="0"/></p>
       <p>
-      <a href="../../concepts/concept-java-editor.htm">Java editor</a><br>
-      <a href="../../concepts/concept-java-views.htm">Java views</a><br>
-       <a href="../../concepts/concept-java-views-filtering.htm">Filtering in Java views</a><br>
-       <a href="../../concepts/concept-java-views-decorators.htm">Java element decorations</a><br>
-       <a href="../../concepts/concept-java-views-sorting.htm">Sorting elements in Java views</a><br>
+      <a href="../../concepts/concept-java-editor.htm">Java editor</a><br/>
+      <a href="../../concepts/concept-java-views.htm">Java views</a><br/>
+       <a href="../../concepts/concept-java-views-filtering.htm">Filtering in Java views</a><br/>
+       <a href="../../concepts/concept-java-views-decorators.htm">Java element decorations</a><br/>
+       <a href="../../concepts/concept-java-views-sorting.htm">Sorting elements in Java views</a><br/>
        <a href="../../concepts/concept-java-views-presentation.htm">Presentation options for Java views</a>
     </p>
     <p>
-       <img border="0" src="../../images/ngrelt.png" alt="Related tasks" ></p>
+       <img border="0" src="../../images/ngrelt.png" alt="Related tasks"/></p>
        <p>
-       <a href="../../tasks/tasks-64.htm">Restoring a deleted workbench element</a><br>
+       <a href="../../tasks/tasks-64.htm">Restoring a deleted workbench element</a><br/>
        <a href="../../tasks/task-set_method_breakpoints.htm">Setting method breakpoints</a>
     </p>
     <p>
-      <img border="0" src="../../images/ngrelr.png" alt="Related reference" ></p>
+      <img border="0" src="../../images/ngrelr.png" alt="Related reference"/></p>
       <p>
-      <a href="../../reference/ref-dialog-override-method.htm">Override methods</a><br>
+      <a href="../../reference/ref-dialog-override-method.htm">Override methods</a><br/>
        <a href="ref-viewsandeditors.htm">Views and editors</a>
     </p>
     
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-package-explorer.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-package-explorer.htm
index 929e62f..cdafee5 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-package-explorer.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-package-explorer.htm
@@ -1,10 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css"/>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+    <meta http-equiv="Content-Style-Type" content="text/css"/>
     <title>
       Package Explorer View
     </title>
@@ -34,6 +35,11 @@
           </th>
           <th>
             <p>
+              Name
+            </p>
+          </th>
+          <th>
+            <p>
               Description
             </p>
           </th>
@@ -42,6 +48,9 @@
       <tbody>
         <tr>
           <td valign="top">
+             
+          </td>
+          <td valign="top">
             <p>
               Back
             </p>
@@ -54,6 +63,9 @@
         </tr>
         <tr>
           <td valign="top">
+             
+          </td>
+          <td valign="top">
             <p>
               Forward
             </p>
@@ -66,6 +78,9 @@
         </tr>
         <tr>
           <td valign="top">
+             
+          </td>
+          <td valign="top">
             <p>
               Up
             </p>
@@ -78,6 +93,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/collapseall.png" alt="Collapse All"/>
+          </td>
+          <td valign="top">
             <p>
               Collapse All
             </p>
@@ -90,6 +108,9 @@
         </tr>
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/synced.png" alt="Link with Editor"/>
+          </td>
+          <td valign="top">
             <p>
               Link with Editor
             </p>
@@ -101,6 +122,9 @@
         </tr>
         <tr>
           <td valign="top">
+             
+          </td>
+          <td valign="top">
             <p>
               Top Level Elements > Projects
             </p>
@@ -120,6 +144,9 @@
         </tr>
         <tr>
           <td valign="top">
+             
+          </td>
+          <td valign="top">
             <p>
               Top Level Elements > Working Sets
             </p>
@@ -136,6 +163,9 @@
         
         <tr>
           <td valign="top">
+            <img src="../../images/org.eclipse.jdt.ui/elcl16/filter_ps.png" alt="Filters"/>
+          </td>
+          <td valign="top">
             <p>
               Filters...
             </p>
@@ -149,16 +179,16 @@
       </tbody>
     </table>
     <p>
-      <img border="0" src="../../images/ngrelc.png" alt="Related concepts" ></p>
+      <img border="0" src="../../images/ngrelc.png" alt="Related concepts"/></p>
       <p>
-       <a href="../../concepts/concept-java-views.htm">Java views</a><br>
-       <a href="../../concepts/concept-java-perspective.htm">Java perspectives</a><br>
+       <a href="../../concepts/concept-java-views.htm">Java views</a><br/>
+       <a href="../../concepts/concept-java-perspective.htm">Java perspectives</a><br/>
        <a href="../../../org.eclipse.platform.doc.user/concepts/cworkset.htm">Working sets</a>
     </p>
     <p>
-      <img border="0" src="../../images/ngrelr.png" alt="Related reference" ></p>
+      <img border="0" src="../../images/ngrelr.png" alt="Related reference"/></p>
       <p>
-      <a href="../../reference/ref-dialog-java-element-filters.htm">Java element filters dialog</a><br>
+      <a href="../../reference/ref-dialog-java-element-filters.htm">Java element filters dialog</a><br/>
        <a href="ref-viewsandeditors.htm">Views and editors</a>
     </p>
     
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-scrapbook.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-scrapbook.htm
index 8fdaa8c..a09d184 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-scrapbook.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-view-scrapbook.htm
@@ -1,25 +1,33 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Java Scrapbook Page
     </title>
   </head>
+
   <body>
     <h1>
       Java Scrapbook Page
     </h1>
     <p>
-      The scrapbook allows Java expressions to be run, inspected, and displayed, under the control of the debugger.
+      The scrapbook allows Java expressions to be run, inspected, and
+      displayed, under the control of the debugger.
     </p>
     <p>
-      <strong>Note:</strong> Content assist (such as code assist) is available on scrapbook pages.
+      <strong>Note:</strong> Content assist (such as code assist) is available
+      on scrapbook pages.
     </p>
-    <table border="1" cellspacing="0" cellpadding="5" summary="Scrapbook options">
+
+    <table border="1" cellspacing="0" cellpadding="5" summary=
+    "Scrapbook options">
       <caption>
         Java Scrapbook page buttons
       </caption>
@@ -29,6 +37,7 @@
             <p>
               Command
             </p>
+
           </th>
           <th rowspan="1" colspan="1">
             <p>
@@ -39,43 +48,56 @@
             <p>
               Description
             </p>
+
           </th>
         </tr>
       </thead>
       <tbody>
         <tr>
           <td rowspan="1" colspan="1" valign="top" align="left">
-            <img src="../../images/org.eclipse.jdt.debug.ui/etool16/run_sbook.png" align="middle"  alt="Run Snippet button">
+            <img src=
+            "../../images/org.eclipse.jdt.debug.ui/etool16/run_sbook.png"
+            align="middle" alt="Run Snippet button" />
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
+
             <p>
               Run Snippet
             </p>
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
-              Running an expression evaluates an expression but does not display a result.
+              Running an expression evaluates an expression but does not
+              display a result.
             </p>
           </td>
         </tr>
+
         <tr>
           <td rowspan="1" colspan="1" valign="top" align="left">
-            <img src="../../images/org.eclipse.jdt.debug.ui/etool16/disp_sbook.png" align="middle"  alt="Display button">
+            <img src=
+            "../../images/org.eclipse.jdt.debug.ui/etool16/disp_sbook.png"
+            align="middle" alt="Display button" />
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
               Display
             </p>
           </td>
+
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
-              Displaying shows the result of evaluating an expression as a string in the scrapbook editor.
+              Displaying shows the result of evaluating an expression as a
+              string in the scrapbook editor.
             </p>
           </td>
         </tr>
         <tr>
           <td rowspan="1" colspan="1" valign="top" align="left">
-            <img src="../../images/org.eclipse.jdt.debug.ui/etool16/insp_sbook.png" align="middle"  alt="Inspect button">
+            <img src=
+            "../../images/org.eclipse.jdt.debug.ui/etool16/insp_sbook.png"
+            align="middle" alt="Inspect button" />
+
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
@@ -84,28 +106,36 @@
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
-              Inspecting shows the result of evaluating an expression in the Expressions view.
+              Inspecting shows the result of evaluating an expression in the
+              Expressions view.
             </p>
+
           </td>
         </tr>
         <tr>
           <td rowspan="1" colspan="1" valign="top" align="left">
-            <img src="../../images/org.eclipse.jdt.debug.ui/etool16/term_sbook.png" align="middle"  alt="Terminate button">
+            <img src=
+            "../../images/org.eclipse.jdt.debug.ui/etool16/term_sbook.png"
+            align="middle" alt="Terminate button" />
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
               Terminate
             </p>
+
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
-              This command terminates the Java VM that is used to evaluate expressions.
+              This command terminates the Java VM that is used to evaluate
+              expressions.
             </p>
           </td>
         </tr>
         <tr>
           <td rowspan="1" colspan="1" valign="top" align="left">
-            <img src="../../images/org.eclipse.jdt.ui/obj16/impc_obj.png" align="middle"  alt="Set the import Declarations button">
+
+            <img src="../../images/org.eclipse.jdt.ui/obj16/impc_obj.png"
+            align="middle" alt="Set the import Declarations button" />
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
@@ -114,34 +144,42 @@
           </td>
           <td rowspan="1" colspan="1" valign="top" align="left">
             <p>
-              This commands sets the import declarations to be used for the context of evaluating the code
+
+              This commands sets the import declarations to be used for the
+              context of evaluating the code
             </p>
           </td>
         </tr>
       </tbody>
     </table>
     <p>
-      <img border="0" src="../../images/ngrelc.png" alt="Related concepts" >
+      <img border="0" src="../../images/ngrelc.png" alt="Related concepts" />
     </p>
+
     <p>
       <a href="../../concepts/cscrapbook.htm">Scrapbook</a>
     </p>
     <p>
-      <img border="0" src="../../images/ngrelt.png" alt="Related tasks" >
+      <img border="0" src="../../images/ngrelt.png" alt="Related tasks" />
     </p>
     <p>
-      <a href="../../tasks/task-create_scrapbook_page.htm">Creating a Java scrapbook page</a><br>
-       <a href="../../tasks/task-display_evaluation_result.htm">Displaying the result of evaluating an expression</a><br>
-       <a href="../../tasks/task-inspect_evaluation_result.htm">Inspecting the result of evaluating an expression</a><br>
-       <a href="../../tasks/task-executing_an_expression.htm">Executing an expression</a>
+      <a href="../../tasks/task-create_scrapbook_page.htm">Creating a Java
+      scrapbook page</a><br />
+
+      <a href="../../tasks/task-display_evaluation_result.htm">Displaying the
+      result of evaluating an expression</a><br />
+      <a href="../../tasks/task-inspect_evaluation_result.htm">Inspecting the
+      result of evaluating an expression</a><br />
+      <a href="../../tasks/task-executing_an_expression.htm">Executing an
+      expression</a>
     </p>
     <p>
-       <img src="../../images/ngrelr.png"  alt="Related reference">
+      <img src="../../images/ngrelr.png" alt="Related reference" />
     </p>
+
     <p>
-      <a href="../../reference/ref-wizard-scrapbook.htm">New Java scrapbook page wizard</a>
+      <a href="../../reference/ref-wizard-scrapbook.htm">New Java scrapbook
+      page wizard</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-viewsandeditors.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-viewsandeditors.htm
index 78611e9..fec7383 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-viewsandeditors.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/ref-viewsandeditors.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
@@ -17,9 +17,8 @@
     </p>
     <p>
       <a href="../../concepts/concept-java-editor.htm">Java editor</a><br>
-       <a href="../../concepts/concept-java-views.htm">Java views<br>
-      </a> <a href="../../concepts/concept-jdt.htm">Java development tools (JDT)</a> <a href="../../concepts/concept-java-views.htm">
-      </a>
+       <a href="../../concepts/concept-java-views.htm">Java views</a><br>
+       <a href="../../concepts/concept-jdt.htm">Java development tools (JDT)</a>
     </p>
     <p>
       <img border="0" src="../../images/ngrelt.png" alt="Related tasks" >
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/images/ref-viewlayoutmenu.PNG b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/images/ref-viewlayoutmenu.PNG
index c7e16a3..b7ef40c 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/images/ref-viewlayoutmenu.PNG and b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/images/ref-viewlayoutmenu.PNG differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-allinstances.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-allinstances.htm
index 673e603..4537c80 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-allinstances.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-allinstances.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -22,7 +22,7 @@
 <p>This command applies to:</p>
 <ul>
   <li><a href="../../../concepts/concept-java-editor.htm"><strong>Java Editor</strong></a></li>
-  <li><a href="../../../reference/views/ref-view-outline.htm"><strong>Outline View</strong></a><strong> </strong></li>
+  <li><a href="../../../reference/views/ref-view-outline.htm"><strong>Outline View</strong></a></li>
   <li><a href="../expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a></li>
   <li><a href="../variables/ref-variables_view.htm"><strong>Variables View</strong></a></li>
 </ul>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-contentassist.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-contentassist.htm
index 34264d3..b8f49fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-contentassist.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-contentassist.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -16,7 +16,7 @@
 <ul>
   <li><a href="../../../concepts/concept-java-editor.htm"><strong>Java Editor</strong></a></li>
   <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a></li>
-  <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)<a href="../../../reference/views/shared/ref-detailpane.htm"></a></li>
+  <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)</li>
 </ul>
 <p><img src="../../../images/ngrelt.png" alt="Related Tasks"></p>
 <p><a href="../../../tasks/task-evaluating_expressions.htm">Evaluating Expressions</a></p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-display.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-display.htm
index 941be0d..e6d229a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-display.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-display.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -18,8 +18,8 @@
 <ul>
   <li><a href="../../../concepts/concept-java-editor.htm"><strong>Java Editor</strong></a></li>
   <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a></li>
-  <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)<a href="../../../reference/views/shared/ref-detailpane.htm"></a></li>
-  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a><strong> </strong></li>
+  <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)</li>
+  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a></li>
 </ul>
 <p><img src="../../../images/ngrelt.png" alt="Related Tasks"></p>
 <p><a href="../../../tasks/task-evaluating_expressions.htm">Evaluating Expressions</a></p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-execute.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-execute.htm
index 3580d84..4be7f8c 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-execute.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-execute.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -15,7 +15,7 @@
   <li><a href="../../../concepts/concept-java-editor.htm"><strong>Java Editor</strong></a></li>
   <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a></li>
   <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)</li>
-  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a><strong> </strong></li>
+  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a></li>
 </ul>
 <p><img src="../../../images/ngrelt.png" alt="Related Tasks"></p>
 <p><a href="../../../tasks/task-evaluating_expressions.htm">Evaluating Expressions</a></p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-findreplace.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-findreplace.htm
index 1aab106..577f34a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-findreplace.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-findreplace.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -14,8 +14,8 @@
 <p><img src="../../../reference/views/shared/images/ref-findreplace_dialog.PNG" alt="Find/Replace Dialog"> </p>
 <p>This command applies to:</p>
 <ul>
-  <li><a href="../../../reference/views/console/ref-console_view.htm"><strong>Console View</strong></a><strong> </strong></li>
-  <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a><strong> </strong></li>
+  <li><a href="../../../reference/views/console/ref-console_view.htm"><strong>Console View</strong></a></li>
+  <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a></li>
   <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)</li>
 </ul>
 <p> </p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-forcereturn.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-forcereturn.htm
index 26b7d3f..ef92991 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-forcereturn.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-forcereturn.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -31,7 +31,7 @@
   <li><a href="../../../concepts/concept-java-editor.htm"><strong>Java Editor</strong></a></li>
   <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a></li>
   <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)</li>
-  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a><strong> </strong></li>
+  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a></li>
 </ul>
 <p><img src="../../../images/ngrelt.png" alt="Related Tasks"></p>
 <p><a href="../../../tasks/task-evaluating_expressions.htm">Evaluating Expressions</a></p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-horizview.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-horizview.htm
index be4c54c..1c4cbca 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-horizview.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-horizview.htm
@@ -1,15 +1,15 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Horizontal View Orientation</title>
+<title>Horizontal Layout</title>
 </head>
 <body>
-<h1> Horizontal View Orientation </h1>
-<p> Select the <strong>Horizontal View Orientation </strong> command [ <img src="../../../images/org.eclipse.debug.ui/elcl16/det_pane_right.png" alt="Horizontal View Orientation"> ] to reveal the <a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> and set it in a horizontal alignment within the view.</p>
+<h1> Horizontal Layout</h1>
+<p> Select the <strong>Horizontal</strong> command [ <img src="../../../images/org.eclipse.debug.ui/elcl16/det_pane_right.png" alt="Horizontal Layout"> ] to reveal the <a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> and set it in a horizontal alignment within the view.</p>
 <p>This command applies to:</p>
 <ul>
   <li><a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a></li>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-inspect.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-inspect.htm
index 52b9a0f..d702579 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-inspect.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-inspect.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -15,9 +15,9 @@
 <p>This command applies to:</p>
 <ul>
   <li><a href="../../../concepts/concept-java-editor.htm"><strong>Java Editor</strong></a></li>
-  <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a><strong> </strong></li>
+  <li><a href="../../../reference/views/display/ref-display_view.htm"><strong>Display View</strong></a></li>
   <li><a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> (in the <a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a> and <a href="../../../reference/views/variables/ref-variables_view.htm"><strong>Variables View</strong></a>)</li>
-  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a><strong> </strong></li>
+  <li><a href="../../../reference/menus/run/ref-menu-run.htm"><strong>Run Menu</strong></a></li>
 </ul>
 <p><img src="../../../images/ngrelt.png" alt="Related Tasks"></p>
 <p><a href="../../../tasks/task-evaluating_expressions.htm">Evaluating Expressions</a></p>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-vertview.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-vertview.htm
index 6891f0f..d7d20cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-vertview.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-vertview.htm
@@ -1,15 +1,15 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
-<title>Vertical View Orientation</title>
+<title>Vertical Layout</title>
 </head>
 <body>
-<h1> Vertical View Orientation </h1>
-<p> Select the <strong>Vertical  View Orientation </strong> command [ <img src="../../../images/org.eclipse.debug.ui/elcl16/det_pane_under.png" alt="Vertical View Orientation"> ] to reveal the <a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> and set it in a vertical alignment within the view.</p>
+<h1> Vertical Layout</h1>
+<p> Select the <strong>Vertical</strong> command [ <img src="../../../images/org.eclipse.debug.ui/elcl16/det_pane_under.png" alt="Vertical Layout"> ] to reveal the <a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a> and set it in a vertical alignment within the view.</p>
 <p>This command applies to:</p>
 <ul>
   <li><a href="../../../reference/views/expressions/ref-expressions_view.htm"><strong>Expressions View</strong></a></li>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewlayoutcommands.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewlayoutcommands.htm
index 75d5aa5..195d6dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewlayoutcommands.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewlayoutcommands.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -45,13 +45,13 @@
   <tbody>
     <tr>
       <td colspan="1" valign="top" align="left"><img src="../../../images/org.eclipse.debug.ui/elcl16/det_pane_right.png" alt="Horizontal Detail Pane alignment"></td>
-      <td colspan="1" valign="top" align="left" ><a href="../../../reference/views/shared/ref-horizview.htm"><strong>Horizontal View Orientation</strong></a></td>
+      <td colspan="1" valign="top" align="left" ><a href="../../../reference/views/shared/ref-horizview.htm"><strong>Horizontal</strong></a></td>
       <td colspan="1" valign="top" align="left" >Displays the detail pane at the right side of the view, aligning the parts of the view horizontally. </td>
       <td>View action </td>
 	</tr>
     <tr>
       <td rowspan="1" colspan="1" valign="top" align="left"><img src="../../../images/org.eclipse.debug.ui/elcl16/det_pane_under.png" alt="Vertical Detail Pane alignment"></td>
-      <td rowspan="1" colspan="1" valign="top" align="left" ><p><a href="../../../reference/views/shared/ref-vertview.htm"><strong>Vertical View Orientation </strong></a></p></td>
+      <td rowspan="1" colspan="1" valign="top" align="left" ><p><a href="../../../reference/views/shared/ref-vertview.htm"><strong>Vertical</strong></a></p></td>
       <td rowspan="1" colspan="1" valign="top" align="left" >Displays the detail pane at the bottom of the view, aligning the parts of the view vertically.</td>
       <td>View action </td>
     </tr>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewonly.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewonly.htm
index 0f6c23c..ae1e89b 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewonly.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/shared/ref-viewonly.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -21,7 +21,6 @@
   <a href="../../../reference/views/shared/ref-detailpane.htm">Detail Pane</a><br>
   <a href="../../../reference/views/expressions/ref-expressions_view.htm">Expressions View</a><br>
   <a href="../../../reference/views/variables/ref-variables_view.htm">Variables View</a><br>
-  <a href="../../../reference/views/shared/ref-detailpane.htm"></a></p>
-<p> </p>
+</p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/variables/ref-variables_view.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/variables/ref-variables_view.htm
index bcba899..4ef0e32 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/variables/ref-variables_view.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/views/variables/ref-variables_view.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" charset="ISO-8859-1" type="text/css">
@@ -10,7 +10,7 @@
 <body>
 <h1> Variables View </h1>
 <p> The <strong>Variables View </strong>displays information about the variables associated with the stack frame selected in the <a href="../../../reference/views/debug/ref-debug_view.htm"><strong>Debug View</strong></a>. When debugging a Java program, variables can be selected to have more detailed information be displayed in the <a href="../../../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a>. In addition, Java objects can be expanded to show the fields that variable contains. </p>
-<p>The Variables View, shown with columns. The <a href="../../../reference/views/shared/ref-detailpane.htm"></a> detail pane the area at the bottom of the view displaying text. </p>
+<p>The Variables View, shown with columns. The <a href="../../../reference/views/shared/ref-detailpane.htm">Detail Pane</a> the area at the bottom of the view displaying text. </p>
 <p><img src="../../../reference/views/variables/images/ref-variables_view.PNG" alt="Variables View with columns"></p>
 <p>There are many commands available in the Variables View:</p>
 <ul>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_breakpoints.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_breakpoints.htm
index 6c74735..0280c6b 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_breakpoints.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_breakpoints.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2005, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2005, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <title>Export Breakpoints Wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 <h1>Export Breakpoints Wizard</h1>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_launch_configs.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_launch_configs.htm
index 4870aea..7d89822 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_launch_configs.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-export_launch_configs.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <title>Export Launch Configurations Wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 <h1>Export Launch Configurations Wizard</h1>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_breakpoints.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_breakpoints.htm
index 4da49d2..dd7d003 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_breakpoints.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_breakpoints.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2005, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2005, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <title>Import Breakpoints Wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 <h1>Import Breakpoints Wizard</h1>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_launch_configs.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_launch_configs.htm
index c48999e..40622d4 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_launch_configs.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/reference/wizards/ref-import_launch_configs.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <link rel="stylesheet" href="../../book.css" charset="ISO-8859-1" type="text/css">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <title>Import Launch Configurations Wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 <h1>Import Launch Configurations Wizard</h1>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-ant_javac_adapter.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-ant_javac_adapter.htm
new file mode 100644
index 0000000..2388e99
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-ant_javac_adapter.htm
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
+<title>Using the ant javac adapter</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
+    <style type="text/css">
+/*<![CDATA[*/
+    span.c6 {color: red}
+    span.c2 {color: #4444CC}
+    /*]]>*/
+    </style>
+</head>
+<body>
+<a name="t_javac_adapter"></a>
+<h2>Using the ant javac adapter</h2>
+<p>The Eclipse compiler can be used inside an Ant buildfile using the javac adapter. In order to use the Eclipse compiler, you simply need to define the <b>build.compiler</b> property in your
+buildfile.</p>
+
+<p>In order to get the batch compiler working in an ant buildfile, the ant runtime classpath needs to contain the Eclipse batch compiler. When you run your ant buildfile:</p>
+<ol>
+<li>outside of Eclipse: the easiest way to set up the ant runtime classpath is to add the <code>ecj.jar</code> file using the <code>-lib</code> argument or dumping it inside the <code>ANT_HOME</code>
+location.</li>
+<li>inside Eclipse using the same JRE than Eclipse: the Eclipse batch compiler is implicitly added to the ant runtime classpath.</li>
+<li>inside Eclipse using the different JRE: the Eclipse batch compiler must be explicitly added to the ant runtime classpath. This can be done using the <code>ecj.jar</code> file or using the
+org.eclipse.jdt.core jar file and the <code>jdtCompilerAdapter.jar</code> file located inside the org.eclipse.jdt.core jar file (this jar file needs to be extracted first).</li>
+
+</ol>
+<p>Here is a small example:</p>
+<pre>
+<span class="c2">
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="compile" default="main" basedir="../.">
+
+ <b><property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/></b>
+
+ <property name="root" value="${basedir}/src"/>
+
+ <property name="destdir" value="d:/temp/bin" />
+
+ <target name="main">
+  <javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
+      <classpath>
+        <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
+
+      </classpath>
+  </javac>
+ </target>
+</project>
+</span>
+</pre>
+<p>The syntax used for the javac Ant task can be found in the <a href="http://ant.apache.org/manual/Tasks/javac.html">Ant javac task documentation</a>. The current adapter supports the Javac Ant task
+1.4.1 up to 1.6.5 versions.</p>
+
+<p>If you are using a version above 1.5.0, you can use the nested compiler argument element (<code><compilerarg></code>) to specify compiler specific options.</p>
+<pre>
+<span class="c2">
+...
+<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
+    <classpath>
+      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
+    </classpath>
+
+    <compilerarg</span> <span class="c6">compiler="org.eclipse.jdt.core.JDTCompilerAdapter"</span> <span class="c2">line="-1.5 -warn:+boxing"/>
+</javac>
+...
+</span>
+</pre>
+<b>Note:</b>
+<ol>
+<li>To prevent compiler dependant buildfiles, we <em>strongly</em> advise you to use a <code><compilerarg></code> whose "compiler" attribute value is
+
+<code>org.eclipse.jdt.core.JDTCompilerAdapter</code>. If this is not set, the buildfile can only be used with the Eclipse compiler. If set, the nested compiler argument is ignored if the name is
+different from the compiler name specified by the <code>build.compiler</code> property.</li>
+<li><code><compilerarg></code> should not be used to set values like target value, source value, debug options, or any options that could be set using the defined attributes of the
+<code>javac</code> ant task. Its usage must be reserved to pass compiler specific options like warning options. When a command-line argument is specified more than once, the Eclipse batch compiler
+can report errors like:
+<pre>
+duplicate target compliance setting specification: 1.5
+</pre></li>
+</ol>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_applet.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_applet.htm
index 58c829f..b9ad381 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_applet.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_applet.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -21,7 +21,7 @@
 <ol>
   <li> In the <strong>Package Explorer</strong>, select the Java compilation unit 
     or class file containing the applet you want to launch. </li>
-  <li>Press the <strong>Run</strong> [ <img src="../images/org.eclipse.debug.ui/etool16/run_exc.png" width="16" height="16"> 
+  <li>Press the <strong>Run</strong> [ <img src="../images/org.eclipse.debug.ui/etool16/run_exc.png" width="16" height="16" alt="The Run button"> 
     ] button in the workbench toolbar or select <strong>Run > Run</strong> 
     from the workbench menu. Alternatively, select <strong>Run As > Java Applet</strong> 
     from the <strong>Package Explorer</strong> pop-up menu, select <strong>Run 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_program.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_program.htm
index 5fbd66b..c30ecc5 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_program.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-launching_java_program.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     <meta http-equiv="Content-Style-Type" content="text/css">
     <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -22,7 +22,7 @@
 <ol>
   <li> In the <strong>Package Explorer</strong>, select the Java compilation unit 
     or class file with the main method you want to launch. </li>
-  <li>Press the <strong>Run</strong> [ <img src="../images/org.eclipse.debug.ui/etool16/run_exc.png" width="16" height="16"> 
+  <li>Press the <strong>Run</strong> [ <img src="../images/org.eclipse.debug.ui/etool16/run_exc.png" width="16" height="16" alt="The Run button"> 
     ] button in the workbench toolbar or select <strong>Run > Run</strong> 
     from the workbench menu bar. Alternatively, select <strong>Run As > Java 
     Application</strong> in the <strong>Package Explorer</strong> pop-up menu, 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-suppress_warnings.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-suppress_warnings.htm
new file mode 100644
index 0000000..90541a7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-suppress_warnings.htm
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
+<title>Excluding warnings using @SuppressWarnings</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
+</head>
+<body>
+<a name="t_suppress_warnings"></a>
+<h2>Excluding warnings using @SuppressWarnings</h2>
+<p>Since Java 5.0, you can disable compilation warnings relative to a subset of a compilation unit using the <code>java.lang.SuppressWarning</code> annotation.</p>
+
+<pre>
+ @SuppressWarning("unused") public void foo() {
+  String s;
+ }
+</pre>
+<p>Without the annotation, the compiler would complain that the local variable <code>s</code> is never used. With the annotation, the compiler silently ignores this warning locally to the
+<code>foo</code> method. This enables to keep the warnings in other locations of the same compilation unit or the same project.</p>
+<p>The list of tokens that can be used inside a <code>SuppressWarnings</code> annotation is:</p>
+
+<ul>
+<li><span class="token">all</span> to suppress all warnings</li>
+<li><span class="token">boxing</span> to suppress warnings relative to boxing/unboxing operations</li>
+<li><span class="token">cast</span> to suppress warnings relative to cast operations</li>
+<li><span class="token">dep-ann</span> to suppress warnings relative to deprecated annotation</li>
+
+<li><span class="token">deprecation</span> to suppress warnings relative to deprecation</li>
+<li><span class="token">fallthrough</span> to suppress warnings relative to missing breaks in switch statements</li>
+<li><span class="token">finally</span> to suppress warnings relative to finally block that don't return</li>
+<li><span class="token">hiding</span> to suppress warnings relative to locals that hide variable</li>
+<li><span class="token">incomplete-switch</span> to suppress warnings relative to missing entries in a switch statement (enum case)</li>
+
+<li><span class="token">javadoc</span> to suppress warnings relative to javadoc warnings</li>
+<li><span class="token">nls</span> to suppress warnings relative to non-nls string literals</li>
+<li><span class="token">null</span> to suppress warnings relative to null analysis</li>
+<li><span class="token">rawtypes</span> to suppress warnings relative to usage of raw types</li>
+<li><span class="token">restriction</span> to suppress warnings relative to usage of discouraged or forbidden references</li>
+
+<li><span class="token">serial</span> to suppress warnings relative to missing serialVersionUID field for a serializable class</li>
+<li><span class="token">static-access</span> to suppress warnings relative to incorrect static access</li>
+<li><span class="token">static-method</span> to suppress warnings relative to methods that could be declared as static</li>
+<li><span class="token">super</span> to suppress warnings relative to overriding a method without super invocations</li>
+<li><span class="token">synthetic-access</span> to suppress warnings relative to unoptimized access from inner classes</li>
+
+<li><span class="token">unchecked</span> to suppress warnings relative to unchecked operations</li>
+<li><span class="token">unqualified-field-access</span> to suppress warnings relative to field access unqualified</li>
+<li><span class="token">unused</span> to suppress warnings relative to unused code and dead code</li>
+</ul>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm
new file mode 100644
index 0000000..9cdeb7f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm
@@ -0,0 +1,851 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta name="copyright" content=
+"Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
+<title>Using the batch compiler</title>
+<link rel="stylesheet" type="text/css" href="../book.css" />
+    <style type="text/css">
+/*<![CDATA[*/
+    td.c5 {background-color: #FFCCAA}
+    pre.c4 {color: #3366FF}
+    span.c3 {color: #3366FF}
+    /*]]>*/
+    </style>
+</head>
+<body>
+<a name="t_batch_compiler"></a>
+<h2>Using the batch compiler</h2>
+<h3>Finding the batch compiler</h3>
+<p>The batch compiler class is located in the JDT Core plug-in. The name of the class is <i>org.eclipse.jdt.compiler.batch.BatchCompiler</i>. It is packaged into
+<code>plugins/org.eclipse.jdt.core_3.4.0.<qualifier>.jar</code>. Since 3.2, it is also available as a separate download. The name of the file is <code>ecj.jar</code>. Its corresponding source
+is also available. To get them, go to the <a href="http://download.eclipse.org/eclipse/downloads/">download page</a> and search for the section <b>JDT Core Batch Compiler</b>. This jar contains the
+batch compiler and the javac ant adapter.</p>
+
+<p>Since 3.3, this jar also contains the support for jsr199 (Compiler API) and the support for jsr269 (Annotation processing). <b>In order to use the annotations processing support, a 1.6 VM is
+required.</b></p>
+<p>So it can be used as a standalone application and inside an Ant build outside of Eclipse.</p>
+<h3>Running the batch compiler</h3>
+<ul>
+<li>From the command line.
+<p><code><span class="c3">java -jar org.eclipse.jdt.core_3.4.0<qualifier>.jar -classpath rt.jar A.java</span></code></p>
+<p>or:</p>
+<p><code><span class="c3">java -jar ecj.jar -classpath rt.jar A.java</span></code></p>
+
+</li>
+<li>Using the static <code>compile(String commandLine, PrintWriter outWriter, PrintWriter errWriter, CompilationProgress progress)</code> method of the class BatchCompiler.
+<pre class="c4">
+
+org.eclipse.jdt.compiler.CompilationProgress progress = null; // instantiate your subclass
+org.eclipse.jdt.internal.compiler.batch.BatchCompiler.compile(
+   "-classpath rt.jar A.java",
+   new PrintWriter(System.out),
+   new PrintWriter(System.err),
+   progress);
+</pre>
+<p>You can control how progress is reported, or how the batch compiler is canceled, by subclassing the class <i>org.eclipse.jdt.compiler.CompilationProgress</i>.</p>
+</li>
+</ul>
+<h4>Which options are available?</h4>
+
+<p>The recommended options have an orange background.</p>
+<p>When some options are being set multiple times, the batch compiler consumes them from left to right. When the warning option (-warn:....) is used without '+' or '-', this overrides the set of
+warnings previously specified. So the user should make sure that such an option is given before any other usage of the -warn option.</p>
+<p>Same applies for the -err: option.</p>
+<table border="1" cellspacing="2" cellpadding="2">
+<tr>
+<th>Name</th>
+<th colspan="3">Usage</th>
+</tr>
+<tr>
+<th colspan="4">Classpath options</th>
+</tr>
+
+<tr>
+<td class="c5" valign="top" width="250">-bootclasspath <dir 1>;<dir 2>;...;<dir P></td>
+<td class="c5" valign="top" colspan="3">This is a list of directories or jar files used to bootstrap the class files used by the compiler. By default the libraries of the running VM are used. Entries
+are separated by the platform path separator.<br />
+Each directory or file can specify access rules for types between '[' and ']'.
+<p>If no bootclasspath is specified, the compiler will infer it using the following system properties <code>sun.boot.class.path</code>, <code>vm.boot.class.path</code> or
+
+<code>org.apache.harmony.boot.class.path</code> in this order respectively.</p>
+</td>
+</tr>
+<tr>
+<td class="c5" valign="top" width="250">-cp<br />
+-classpath <dir 1>;<dir 2>;...;<dir P></td>
+
+<td class="c5" valign="top" colspan="3">This is a list of directories or jar files used to compile the source files. The default value is the value of the property "java.class.path". Entries are
+separated by the platform path separator.<br />
+Each directory or file can specify access rules for types between '[' and ']' (e.g. [-X] to forbid access to type X, [~X] to discourage access to type X, [+p/X:-p/*] to forbid access to all types in
+package p but allow access to p/X).<br />
+The compiler follows the <code>Class-Path</code> clauses of jar files' manifests recursively and appends each referenced jar file to the end of the classpath, provided it is not on the classpath
+yet.</td>
+</tr>
+<tr>
+<td valign="top" width="250">-extdirs <dir 1>;<dir 2>;...;<dir P></td>
+
+<td valign="top" colspan="3">This is a list of directories used to specify the location of extension zip/jar files. Entries are separated by the platform path separator.</td>
+</tr>
+<tr>
+<td valign="top" width="250">-endorseddirs <dir 1>;<dir 2>;...;<dir P></td>
+<td valign="top" colspan="3">This is a list of directories used to specify the location of endorsed zip/jar files. Entries are separated by the platform path separator.</td>
+</tr>
+
+<tr>
+<td valign="top" width="250">-sourcepath <dir 1>;<dir 2>;...;<dir P></td>
+<td valign="top" colspan="3">This is a list of directories used to specify the source files. Entries are separated by the platform path separator.<br />
+Each directory can specify access rules for types between '[' and ']'.</td>
+</tr>
+<tr>
+
+<td class="c5" valign="top" width="250">-d <dir 1>|none</td>
+<td class="c5" colspan="3">This is used to specify in which directory the generated .class files should be dumped. If it is omitted, no package directory structure is created.<br />
+If you want to generate no .class file at all, use <span class="c3">-d none</span>.</td>
+</tr>
+<tr>
+<td valign="top" width="250">-encoding <encoding name></td>
+<td colspan="3">Specify default encoding for all source files. Custom encoding can also be specified on a per file basis by suffixing each input source file/folder name with <span class=
+"c3">[<encoding name>]</span>. For example <span class="c3">X.java[utf8]</span> would specify the <code>UTF-8</code> encoding for the compilation unit X.java located in the current user
+directory.
+
+<p>If multiple default source file encodings are specified, the last one will be used.</p>
+<p>For example:</p>
+<ul>
+<li><span class="c3"><code>... -encoding UTF-8 X.java[Cp1252] Y.java[UTF-16] Z.java ....</code></span><br />
+All source files will be read using UTF-8 encoding (this includes <span class="c3">Z.java</span>). <span class="c3">X.java</span> will be read using Cp1252 encoding and <span class="c3">Y.java</span>
+will be read using UTF-16 encoding.</li>
+
+<li><span class="c3"><code>... -encoding UTF-8 -encoding UTF-16 ....</code></span><br />
+All source files will be read using UTF-16 encoding. The -encoding option for UTF-8 is ignored.</li>
+<li><span class="c3"><code>... -encoding Cp1252 /foo/bar/X.java[UTF-16] /foo/bar[UTF-8] ....</code></span><br />
+All source files will be read using Cp1252 encoding. X.java is the only file inside the /foo/bar directory to be read using the encoding UTF-16. All other files in that directory will use UTF-8
+encoding.</li>
+</ul>
+</td>
+</tr>
+<tr>
+<th colspan="4">Compliance options</th>
+</tr>
+<tr>
+<td valign="top" width="250">-target 1.1 to 1.7 or (5, 5.0, etc)</td>
+
+<td colspan="3">This specifies the .class file target setting. The possible value are:
+<ul>
+<li><span class="c3">1.1</span> (major version: 45 minor: 3)</li>
+<li><span class="c3">1.2</span> (major version: 46 minor: 0)</li>
+<li><span class="c3">1.3</span> (major version: 47 minor: 0)</li>
+<li><span class="c3">1.4</span> (major version: 48 minor: 0)</li>
+
+<li><span class="c3">1.5</span>, <span class="c3">5</span> or <span class="c3">5.0</span> (major version: 49 minor: 0)</li>
+<li><span class="c3">1.6</span>, <span class="c3">6</span> or <span class="c3">6.0</span> (major version: 50 minor: 0)</li>
+
+<li><span class="c3">1.7</span>, <span class="c3">7</span> or <span class="c3">7.0</span> (major version: 51 minor: 0)</li>
+</ul>
+Defaults are:
+<ul>
+<li><span class="c3">1.1</span> in <span class="c3">-1.3</span> mode</li>
+
+<li><span class="c3">1.2</span> in <span class="c3">-1.4</span> mode</li>
+<li><span class="c3">1.5</span> in <span class="c3">-1.5</span> mode</li>
+<li><span class="c3">1.6</span> in <span class="c3">-1.6</span> mode</li>
+
+<li><span class="c3">1.7</span> in <span class="c3">-1.7</span> mode</li>
+</ul>
+<p>clcd1.1 can be used to generate the StackMap attribute.</p>
+</td>
+</tr>
+<tr>
+<td valign="top">-1.3</td>
+<td colspan="3">Set compliance level to <span class="c3">1.3</span>. Implicit -source 1.3 -target 1.1.</td>
+
+</tr>
+<tr>
+<td valign="top">-1.4</td>
+<td colspan="3">Set compliance level to <span class="c3">1.4</span> (default). Implicit -source 1.3 -target 1.2.</td>
+</tr>
+<tr>
+<td valign="top">-1.5</td>
+<td colspan="3">Set compliance level to <span class="c3">1.5</span>. Implicit -source 1.5 -target 1.5.</td>
+
+</tr>
+<tr>
+<td valign="top">-1.6</td>
+<td colspan="3">Set compliance level to <span class="c3">1.6</span>. Implicit -source 1.6 -target 1.6.</td>
+</tr>
+<tr>
+<td valign="top">-1.7</td>
+<td colspan="3">Set compliance level to <span class="c3">1.7</span>. Implicit -source 1.7 -target 1.7.</td>
+</tr>
+
+<tr>
+<td valign="top" width="250">-source 1.1 to 1.7 or (5, 5.0, etc)</td>
+<td colspan="3">This is used to specify the source level expected by the compiler.<br />
+The possible value are:
+<ul>
+<li><span class="c3">1.3</span></li>
+<li><span class="c3">1.4</span></li>
+<li><span class="c3">1.5</span>, <span class="c3">5</span> or <span class="c3">5.0</span></li>
+
+<li><span class="c3">1.6</span>, <span class="c3">6</span> or <span class="c3">6.0</span></li>
+<li><span class="c3">1.7</span>, <span class="c3">7</span> or <span class="c3">7.0</span></li>
+</ul>
+Defaults are:
+<ul>
+
+<li><span class="c3">1.3</span> in <span class="c3">-1.3</span> mode</li>
+<li><span class="c3">1.3</span> in <span class="c3">-1.4</span> mode</li>
+<li><span class="c3">1.5</span> in <span class="c3">-1.5</span> mode</li>
+
+<li><span class="c3">1.6</span> in <span class="c3">-1.6</span> mode</li>
+<li><span class="c3">1.7</span> in <span class="c3">-1.7</span> mode</li>
+</ul>
+In <span class="c3">1.4</span>, <span class="c3"><i>assert</i></span> is treated as a keyword. In <span class="c3">1.5</span> and <span class="c3">1.6</span>, <span class="c3"><i>enum</i></span> and
+
+<span class="c3"><i>assert</i></span> are treated as a keywords.</td>
+</tr>
+<tr>
+<th colspan="4">Warning options</th>
+</tr>
+<tr>
+<td valign="top">-?:warn -help:warn</td>
+<td colspan="3">Display advanced warning options</td>
+</tr>
+<tr>
+<td valign="top" width="250" rowspan="70">-warn:...</td>
+
+<td valign="top" colspan="3">Specify the set of enabled warnings.<br />
+e.g. <span class="c3">-warn:unusedLocal,deprecation</span><br />
+<table>
+<tr>
+<td>-warn:none</td>
+<td>disable all warnings</td>
+</tr>
+<tr>
+<td>-warn:<warning tokens separated by ,></td>
+<td>enable exactly the listed warnings</td>
+
+</tr>
+<tr>
+<td>-warn:+<warning tokens separated by ,></td>
+<td>enable additional warnings</td>
+</tr>
+<tr>
+<td>-warn:-<warning tokens separated by ,></td>
+<td>disable specific warnings</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr>
+<th align="center" width="50">Default</th>
+<th align="left" width="150">Token name</th>
+<th align="left">Description</th>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">allDeadCode</td>
+<td valign="top">dead code including trivial if(DEBUG) check</td>
+</tr>
+
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">allDeprecation</td>
+<td valign="top">deprecation even inside deprecated code</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">allJavadoc</td>
+<td valign="top">invalid or missing javadoc</td>
+</tr>
+<tr>
+
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">allOver-ann</td>
+<td valign="top">all missing @Override annotations (superclass and superinterfaces)</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">assertIdentifier</td>
+<td valign="top">occurrence of <i>assert</i> used as identifier</td>
+
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">boxing</td>
+<td valign="top">autoboxing conversion</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">charConcat</td>
+<td valign="top">when a char array is used in a string concatenation without being converted explicitly to a string</td>
+</tr>
+
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">compareIdentical</td>
+<td valign="top">comparing identical expressions</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">conditionAssign</td>
+<td valign="top">possible accidental boolean assignment</td>
+</tr>
+<tr>
+
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">constructorName</td>
+<td valign="top">method with constructor name</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">deadCode</td>
+<td valign="top">dead code excluding trivial if (DEBUG) check</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+
+<td align="left" valign="top">dep-ann</td>
+<td valign="top">missing @Deprecated annotation</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">deprecation</td>
+<td valign="top">usage of deprecated type or member outside deprecated code</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">discouraged</td>
+
+<td valign="top">use of types matching a discouraged access rule</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">emptyBlock</td>
+<td valign="top">undocumented empty block</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">enumIdentifier</td>
+<td valign="top">occurrence of <i>enum</i> used as identifier</td>
+
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">enumSwitch</td>
+<td valign="top">incomplete enum switch</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">fallthrough</td>
+<td valign="top">possible fall-through case</td>
+</tr>
+
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">fieldHiding</td>
+<td valign="top">field hiding another variable</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">finalBound</td>
+<td valign="top">type parameter with final bound</td>
+</tr>
+<tr>
+
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">finally</td>
+<td valign="top">finally block not completing normally</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">forbidden</td>
+<td valign="top">use of types matching a forbidden access rule</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+
+<td align="left" valign="top">hashCode</td>
+<td valign="top">missing hashCode() method when overriding equals()</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">hiding</td>
+<td valign="top">macro for fieldHiding, localHiding, typeHiding and maskedCatchBlock</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">includeAssertNull</td>
+<td valign="top">raise null warnings for variables that got tainted in an assert expression</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">indirectStatic</td>
+<td valign="top">indirect reference to static member</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">intfAnnotation</td>
+<td valign="top">annotation type used as super interface</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">intfNonInherited</td>
+<td valign="top">interface non-inherited method compatibility</td>
+
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">intfRedundant</td>
+<td valign="top">find redundant superinterfaces</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">javadoc</td>
+<td valign="top">invalid javadoc</td>
+</tr>
+
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">localHiding</td>
+<td valign="top">local variable hiding another variable</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">maskedCatchBlock</td>
+<td valign="top">hidden catch block</td>
+</tr>
+<tr>
+
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">nls</td>
+<td valign="top">non-nls string literals (lacking of tags //$NON-NLS-<n>)</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">noEffectAssign</td>
+<td valign="top">assignment with no effect</td>
+</tr>
+
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">null</td>
+<td valign="top">potential missing or redundant null check</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">nullDereference</td>
+<td valign="top">missing null check</td>
+</tr>
+<tr>
+
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">over-ann</td>
+<td valign="top">missing @Override annotation (superclass only)</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">paramAssign</td>
+<td valign="top">assignment to a parameter</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+
+<td align="left" valign="top">pkgDefaultMethod</td>
+<td valign="top">attempt to override package-default method</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">raw</td>
+<td valign="top">usage a of raw type (instead of a parameterized type)</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">semicolon</td>
+
+<td valign="top">unnecessary semicolon or empty statement</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">serial</td>
+<td valign="top">missing serialVersionUID</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">specialParamHiding</td>
+<td valign="top">constructor or setter parameter hiding another field</td>
+
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">static-access</td>
+<td valign="top">macro for indirectStatic and staticReceiver</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">static-method</td>
+<td valign="top">an instance method that could be as a static method</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">staticReceiver</td>
+<td valign="top">if a non static receiver is used to get a static field or call a static method</td>
+</tr>
+
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">super</td>
+<td valign="top">overriding a method without making a super invocation</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">suppress</td>
+<td valign="top">enable @SuppressWarnings</td>
+</tr>
+<tr>
+
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">syncOverride</td>
+<td valign="top">missing synchronized in synchronized method override</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">syntheticAccess</td>
+<td valign="top">when performing synthetic access for innerclass</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">tasks</td>
+<td valign="top">enable support for tasks tags in source code</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">typeHiding</td>
+<td valign="top">type parameter hiding another type</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">unavoidableGenericProblems</td>
+<td valign="top">ignore unavoidable type safety problems due to raw APIs</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">unchecked</td>
+<td valign="top">unchecked type operation</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">unnecessaryElse</td>
+<td valign="top">unnecessary else clause</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">unqualifiedField</td>
+<td valign="top">unqualified reference to field</td>
+
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">unused</td>
+<td valign="top">macro for unusedAllocation, unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedPrivate, unusedThrown and unusedTypeArgs</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">unusedAllocation</td>
+<td valign="top">allocating an object that is not used</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">unusedArgument</td>
+<td valign="top">unused method argument</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">unusedImport</td>
+<td valign="top">unused import reference</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">unusedLabel</td>
+<td valign="top">unused label</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">unusedLocal</td>
+<td valign="top">unused local variable</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+
+<td align="left" valign="top">unusedPrivate</td>
+<td valign="top">unused private member declaration</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">unusedThrown</td>
+<td valign="top">unused declared thrown exception</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">unusedTypeArgs</td>
+<td valign="top">unused type arguments for method</td>
+</tr>
+<tr>
+<td align="center" valign="top">-</td>
+<td align="left" valign="top">uselessTypeCheck</td>
+<td valign="top">unnecessary cast/instanceof operation</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">varargsCast</td>
+<td valign="top">varargs argument need explicit cast</td>
+</tr>
+<tr>
+<td align="center" valign="top">+</td>
+<td align="left" valign="top">warningToken</td>
+<td valign="top">unhandled warning token in @SuppressWarnings</td>
+</tr>
+<tr>
+<td valign="top">-nowarn</td>
+<td colspan="3">No warning (equivalent to <span class="c3">-warn:none</span>)</td>
+</tr>
+<tr>
+<td valign="top" width="250">-err:...</td>
+<td valign="top" colspan="3">Specify the set of enabled warnings that are converted to errors.<br />
+e.g. <span class="c3">-err:unusedLocal,deprecation</span><br />
+unusedLocal and deprecation warnings will be converted to errors. All other warnings are still reported as warnings.
+<table>
+<tr>
+<td>-err:<warning tokens separated by ,></td>
+<td>convert exactly the listed warnings to errors</td>
+</tr>
+
+<tr>
+<td>-err:+<warning tokens separated by ,></td>
+<td>convert additional warnings to errors</td>
+</tr>
+<tr>
+<td>-err:-<warning tokens separated by ,></td>
+<td>remove specific warnings from being converted to errors</td>
+</tr>
+</table>
+</td>
+</tr>
+
+<tr>
+<td valign="top">-deprecation</td>
+<td colspan="3">Equivalent to <span class="c3">-warn:+deprecation</span>.</td>
+</tr>
+<tr>
+<td valign="top">-properties <file></td>
+<td colspan="3">Set warnings/errors option based on the properties file contents. This option can be used with -nowarn, -err:.. or -warn:.. options, but the last one on the command line sets the
+options to be used.<br />
+<p>The properties file contents can be generated by setting project specific settings on an existing java project and using the file in <code>.settings/org.eclipse.jdt.core.prefs</code> file as a
+properties file, or a simple text file that is defined entry/value pairs using the constants defined in the <code>org.eclipse.jdt.core.JavaCore</code> class.</p>
+
+<pre>
+...
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+...
+</pre></td>
+</tr>
+<tr>
+<th colspan="4">Debug options</th>
+</tr>
+<tr>
+<td valign="top">-g[:none|:lines,vars,source]</td>
+<td colspan="3">Set the debug attributes level<br />
+<table>
+<tr>
+<th align="left">-g</th>
+
+<td colspan="3">All debug info (equivalent to <span class="c3">-g:lines,vars,source</span>)</td>
+</tr>
+<tr>
+<th align="left">-g:none</th>
+<td colspan="3">No debug info</td>
+</tr>
+<tr>
+<th align="left">-g:[lines,vars,source]</th>
+<td colspan="3">Selective debug info</td>
+</tr>
+
+</table>
+</td>
+</tr>
+<tr>
+<td valign="top">-preserveAllLocals</td>
+<td colspan="3">Explicitly request the compiler to preserve all local variables (for debug purpose). If omitted, the compiler will remove unused locals.</td>
+</tr>
+<tr>
+<th colspan="4">Annotation processing options (require a 1.6 VM or above and are used only if the compliance is 1.6)</th>
+</tr>
+<tr>
+<td>-Akey[=value]</td>
+<td valign="top" colspan="3">Annotation processors options that are passed to annotation processors. <code>key</code> is made of identifiers separated by dots</td>
+
+</tr>
+<tr>
+<td>-proc:[only|none]</td>
+<td valign="top" colspan="3">If <code>-proc:only</code> is specified, the annotation processors will run but no compilation will be performed. If <code>-proc:none</code> is specified, annotation
+processors will not be discovered or run; compilation will proceed as if no annotation processors were found. By default the compiler must search the classpath for annotation processors, so
+specifying <code>-proc:none</code> may speed compilation if annotation processing is not required.</td>
+</tr>
+<tr>
+
+<td>-processor <class1[,class2,...]></td>
+<td valign="top" colspan="3">Qualified class names of annotation processors to run. If specified, the normal <a href=
+"http://java.sun.com/javase/6/docs/api/javax/annotation/processing/Processor.html">processor discovery process</a> will be skipped.</td>
+</tr>
+<tr>
+<td>-processorpath <dir 1>;<dir 2>;...;<dir P></td>
+
+<td valign="top" colspan="3">A list of directories or jar files which will be searched for annotation processors. Entries are separated by the platform path separator. If not specified, the classpath
+will be searched instead.</td>
+</tr>
+<tr>
+<td>-s <dir></td>
+<td valign="top" colspan="3">The directory where generated source files will be created.</td>
+</tr>
+<tr>
+<td>-XprintProcessorInfo</td>
+<td valign="top" colspan="3">Print information about which annotations and which elements a processor is asked to process</td>
+</tr>
+<tr>
+
+<td>-XprintRounds</td>
+<td valign="top" colspan="3">Print information about annotation processing rounds</td>
+</tr>
+<tr>
+<td>-classNames <class1[,class2,...]></td>
+<td valign="top" colspan="3">Qualified names of binary types that need to be processed</td>
+</tr>
+<tr>
+<th colspan="4">Ignored options (for compatibility with javac options)</th>
+</tr>
+<tr>
+
+<td>-J<option></td>
+<td valign="top" colspan="3">Pass option to the virtual machine</td>
+</tr>
+<tr>
+<td>-X<option></td>
+<td valign="top" colspan="3">Specify non-standard option. -Xemacs is not ignored.</td>
+</tr>
+<tr>
+<td>-X</td>
+<td valign="top" colspan="3">Print non-standard options and exit</td>
+
+</tr>
+<tr>
+<td>-O</td>
+<td valign="top" colspan="3">Optimize for execution time</td>
+</tr>
+<tr>
+<th colspan="4">Advanced options</th>
+</tr>
+<tr>
+<td>@<file></td>
+<td valign="top" colspan="3">Read command-line arguments from file</td>
+
+</tr>
+<tr>
+<td>-maxProblems <n></td>
+<td valign="top" colspan="3">Max number of problems per compilation unit (100 by default)</td>
+</tr>
+<tr>
+<td valign="top">-log <filename></td>
+<td colspan="3">Specify a log file in which all output from the compiler will be dumped. This is really useful if you want to debug the batch compiler or get a file which contains all errors and
+warnings from a batch build. If the extension is <b>.xml</b>, the generated log will be an xml file.</td>
+</tr>
+
+<tr>
+<td valign="top">-Xemacs</td>
+<td colspan="3">Use emacs style to present errors and warnings locations into the console and regular text logs. XML logs are unaffected by this option. With this option active, the message:<br />
+<code><span class="c3">2. WARNING in /workspace/X.java<br />
+(at line 8)...</span></code><br />
+is presented as:<br />
+<code><span class="c3">/workspace/X.java:8: warning: The method...</span></code></td>
+</tr>
+<tr>
+<td valign="top">-proceedOnError[:Fatal]</td>
+
+<td colspan="3">Keep compiling in spite of errors, dumping class files with problem methods or problem types. This is recommended only if you want to be able to run your application even if you have
+remaining errors.<br />
+With ":Fatal", all optional errors are treated as fatal and this leads to code that will abort if an error is reached at runtime. Without ":Fatal", optional errors don't prevent the proper code
+generation and the produced .class files can be run without a problem.</td>
+</tr>
+<tr>
+<td valign="top">-verbose</td>
+<td colspan="3">Print accessed/processed compilation units in the console or the log file if specified.</td>
+</tr>
+<tr>
+<td valign="top">-referenceInfo</td>
+<td colspan="3">Compute reference info. This is useful only if connected to the builder. The reference infos are useless otherwise.</td>
+</tr>
+
+<tr>
+<td valign="top">-progress</td>
+<td colspan="3">Show progress (only in -log mode).</td>
+</tr>
+<tr>
+<td valign="top">-time</td>
+<td colspan="3">Display speed information.</td>
+</tr>
+<tr>
+<td valign="top">-noExit</td>
+<td colspan="3">Do not call <span class="c3">System.exit(n)</span> at end of compilation (<span class="c3">n=0</span> if no error).</td>
+
+</tr>
+<tr>
+<td valign="top">-repeat <n></td>
+<td colspan="3">Repeat compilation process <span class="c3"><n></span> times (perf analysis).</td>
+</tr>
+<tr>
+<td valign="top">-inlineJSR</td>
+<td colspan="3">Inline JSR bytecode (implicit if target >= 1.5).</td>
+
+</tr>
+<tr>
+<td valign="top">-enableJavadoc</td>
+<td colspan="3">Consider references inside javadoc.</td>
+</tr>
+<tr>
+<th colspan="4">Helping options</th>
+</tr>
+<tr>
+<td>-? -help</td>
+<td valign="top" colspan="3">Display the help message.</td>
+</tr>
+
+<tr>
+<td valign="top">-v -version</td>
+<td colspan="3">Display the build number of the compiler. This is very useful to report a bug.</td>
+</tr>
+<tr>
+<td valign="top">-showversion</td>
+<td colspan="3">Display the build number of the compiler and continue. This is very useful to report a bug.</td>
+</tr>
+</table>
+<h4>Examples</h4>
+<table>
+<tr>
+
+<td valign="top"><code><span class="c3">d:\temp -classpath rt.jar -time -g -d d:/tmp</span></code></td>
+<td valign="top">It compiles all source files in d:\temp and its subfolders. The classpath is simply rt.jar. It generates all debug attributes and all generated .class files are dumped in d:\tmp. The
+speed of the compiler will be displayed once the batch process is completed.</td>
+</tr>
+<tr>
+<td valign="top"><code><span class="c3">d:\temp\Test.java -classpath d:\temp;rt.jar -g:none</span></code></td>
+<td valign="top">It compiles only Test.java and its dependant files if any, retrieving dependant files from d:\temp. The classpath is d:\temp followed by rt.jar, which means that all necessary
+classes are searched first in d:\temp and then in rt.jar. It generates no debug attributes and all generated .class files are dumped in d:\temp.</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-230.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-230.htm
index 5ee55d2..97cd13a 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-230.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-230.htm
@@ -18,13 +18,13 @@
  	the Eclipse default code formatter options or with custom options.
     </p>
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0" >
+      <img src="../images/ngrelt.png" alt="Related tasks">
     </p>
     <p>
       <a href="tasks-231.htm">Running the formatter application</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img src="../images/ngrelr.png" alt="Related reference">
     </p>
     <p>
       <a href="../reference/preferences/java/codestyle/ref-preferences-formatter.htm">Code Formatter</a><br>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-231.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-231.htm
index 2d01d58..f4fba62 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-231.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-231.htm
@@ -1,68 +1,129 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) Red Hat Incorporated 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) Red Hat Incorporated 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Running the Formatter Application
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
   </head>
+
   <body>
     <h1>
       Running the Formatter Application
     </h1>
     <p>
-    Running the formatter application is as simple as running the org.eclipse.jdt.core.JavaCodeFormatter application from the commandline:</p>
+      Running the formatter application is as simple as running the
+      org.eclipse.jdt.core.JavaCodeFormatter application from the commandline:
+    </p>
     <pre>
     eclipse -vm <path to virtual machine> -application org.eclipse.jdt.core.JavaCodeFormatter [ OPTIONS ] <files>
-    </pre>
+
+    
+</pre>
+<p>When invoked on MacOS, the paths to point to the configuration file or the source files can be relative, but they will be computed
+from the location of the eclipse.ini file. This is a limitation of the Eclipse launcher on MacOS. On all other platforms, the relative paths
+are computed relative to the current user directory.</p>
     <table border="1" cellspacing="0" cellpadding="5" width="600" summary="">
       <tr>
-        <td width="25%"><files></td> 
-        <td>Java source files and/or directories to format. Only files ending with .java will be formatted in the given directory.</td>
+        <td width="25%">
+          <files>
+        </td>
+        <td>
+          Java source files and/or directories to format. Only files ending
+          with .java will be formatted in the given directory.
+        </td>
+
       </tr>
     </table>
     <table border="1" cellspacing="0" cellpadding="5" width="600" summary="">
-    	<thead>
-		<tr>
-			<th><p>OPTIONS</p></th>
-			<th><p>Description</p></th>
-		</tr>
-	    </thead>
-	    <tbody>
-		<tr>
-			<td valign="top" width="25%"><p>-config <file></p></td>
-			<td valign="top"><p>Use the formatting style from the specified properties file. 
-			                    Refer to <a href="tasks-232.htm">Generating a config file for the formatter application</a>
-			                    for details.</p>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" width="25%"><p>-help</p></td>
-			<td valign="top"><p>Display the help message.</p>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" width="25%"><p>-quiet</p></td>
-			<td valign="top"><p>Only print error messages.</p>
-			</td>
-		</tr>
-		<tr>
-			<td valign="top" width="25%"><p>-verbose</p></td>
-			<td valign="top"><p>Be verbose about the formatting job.</p>
-			</td>
-		</tr>
-		</tbody>
-	</table>
+      <thead>
+        <tr>
+          <th>
+            <p>
+              OPTIONS
+            </p>
+
+          </th>
+          <th>
+            <p>
+              Description
+            </p>
+          </th>
+        </tr>
+      </thead>
+      <tbody>
+
+        <tr>
+          <td valign="top" width="25%">
+            <p>
+              -config <file>
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+
+              Use the formatting style from the specified properties file.
+              Refer to <a href="tasks-232.htm">Generating a config file for the
+              formatter application</a> for details.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" width="25%">
+            <p>
+              -help
+            </p>
+
+          </td>
+          <td valign="top">
+            <p>
+              Display the help message.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" width="25%">
+
+            <p>
+              -quiet
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Only print error messages.
+            </p>
+          </td>
+        </tr>
+
+        <tr>
+          <td valign="top" width="25%">
+            <p>
+              -verbose
+            </p>
+          </td>
+          <td valign="top">
+            <p>
+              Be verbose about the formatting job.
+            </p>
+
+          </td>
+        </tr>
+      </tbody>
+    </table>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
     </p>
     <p>
-      <a href="../reference/preferences/java/codestyle/ref-preferences-formatter.htm">Code formatter</a><br>
+      <a href=
+      "../reference/preferences/java/codestyle/ref-preferences-formatter.htm">Code
+      formatter</a><br />
+
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-232.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-232.htm
index 95ed735..e27aba8 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-232.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-232.htm
@@ -1,59 +1,63 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) Red Hat Incorporated 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) Red Hat Incorporated 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Generating a Config File for the Formatter Application
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
   </head>
+
   <body>
     <h1>
       Generating a Config File for the Formatter Application
     </h1>
     <p>
-    Generating a config file for the formatter application involves modifying the code formatter settings
-    for a Java project and copying org.eclipse.jdt.core.prefs out of the .settings directory for that project.
+      Generating a config file for the formatter application involves modifying
+      the code formatter settings for a Java project and copying
+      org.eclipse.jdt.core.prefs out of the .settings directory for that
+      project.
     </p>
     <ol>
-      <li>
-        Select a Java project, open the pop-up menu and choose <strong>Properties</strong>.
+      <li>Select a Java project, open the pop-up menu and choose
+      <strong>Properties</strong>.
       </li>
 
-      <li>
-        Select the <strong>Java Code Style > Formatter</strong> page and check <strong>Enable project specific settings</strong>.
+      <li>Select the <strong>Java Code Style > Formatter</strong> page and
+      check <strong>Enable project specific settings</strong>.
       </li>
-      <li>
-        Select or edit a profile as explained above.
+      <li>Select or edit a profile as explained above.
       </li>
-
-      <li>
-        Click <strong>OK</strong> when you are done.
+      <li>Click <strong>OK</strong> when you are done.
       </li>
-      
-      <li>
-        Use either a file manager or the command line to copy <b><code>workspace/YourJavaProject/.settings/org.eclipse.jdt.core.prefs</code></b>
-        to a new location.
+
+      <li>Use either a file manager or the command line to copy
+      <b><code>workspace/YourJavaProject/.settings/org.eclipse.jdt.core.prefs</code></b>
+      to a new location.
       </li>
-      <li>
-        If the files you want to format are using 1.5 constructs, you must add the following lines inside the preference file you just created:
-        <blockquote><code>
-        	org.eclipse.jdt.core.compiler.compliance=1.5<br>
-		org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5<br>
-		org.eclipse.jdt.core.compiler.source=1.5<br>
-		</code>
+      <li>If the files you want to format are using 1.5 constructs, you must
+      add the following lines inside the preference file you just created:
+        <blockquote>
+          <code>org.eclipse.jdt.core.compiler.compliance=1.5<br />
+          org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5<br />
+          org.eclipse.jdt.core.compiler.source=1.5<br /></code>
+
         </blockquote>
-       </li>
+      </li>
     </ol>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
     </p>
     <p>
-      <a href="../reference/preferences/java/codestyle/ref-preferences-formatter.htm">Code formatter</a><br>
+      <a href=
+      "../reference/preferences/java/codestyle/ref-preferences-formatter.htm">Code
+      formatter</a><br />
+
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-32.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-32.htm
index 824bd3a..9ea19af 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-32.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-32.htm
@@ -1,14 +1,18 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
-	   Creating JAR Files
+      Creating JAR Files
     </title>
   </head>
+
   <body>
     <h1>
       Creating JAR Files
@@ -17,19 +21,19 @@
       You can create and regenerate JAR files in the workbench.
     </p>
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0" >
+      <img src="../images/ngrelt.png" alt="Related tasks" border="0" />
     </p>
+
     <p>
-      <a href="tasks-33.htm">Creating a new JAR file</a><br>
-       <a href="tasks-36.htm">Regenerating a JAR file</a><a href="tasks-36.htm"></a>
+      <a href="tasks-33.htm">Creating a new JAR file</a><br />
+      <a href="tasks-36.htm">Regenerating a JAR file</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
-	</p>
-	<p>
-       <a href="../reference/ref-export-jar.htm">JAR file exporter</a>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+    </p>
+    <p>
+
+      <a href="../reference/ref-export-jar.htm">JAR file exporter</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-62.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-62.htm
index 24eeea2..13b6ba1 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-62.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-62.htm
@@ -1,14 +1,18 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Using the Local History
     </title>
   </head>
+
   <body>
     <h1>
       Using the Local History
@@ -17,42 +21,49 @@
       The JDT extends the workbench concept of a local history in three ways:
     </p>
     <ul>
-      <li>
-        A file can be replaced with an edition from the local history in the Package Explorer view.
+      <li>A file can be replaced with an edition from the local history in the
+      Package Explorer view.
       </li>
-      <li>
-        The JDT allows you to compare and/or replace individual Java elements (types and their members) with editions from the local history.
+
+      <li>The JDT allows you to compare and/or replace individual Java elements
+      (types and their members) with editions from the local history.
       </li>
-      <li>
-        The JDT allows you to restore Java elements (and files) deleted from the workbench that have been kept in the local history.
+      <li>The JDT allows you to restore Java elements (and files) deleted from
+      the workbench that have been kept in the local history.
       </li>
     </ul>
     <p>
-      Note: Files and Java elements such as types and their members change in time. A 'snapshot' of what they look like a point in time (as saved in the local
-      history) is called an edition.
+      Note: Files and Java elements such as types and their members change in
+      time. A 'snapshot' of what they look like a point in time (as saved in
+      the local history) is called an edition.
     </p>
     <p>
-      <img  src="../images/ngrelc.png" alt="Related concepts" border="0">
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+
     </p>
     <p>
-      	<a href="../concepts/concept-jdt.htm">Java development tools (JDT)</a><br>
-       	<a href="../concepts/concept-java-views.htm">Java views</a>
+      <a href="../concepts/concept-jdt.htm">Java development tools
+      (JDT)</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a>
     </p>
     <p>
-      <img border="0"  src="../images/ngrelt.png" alt="Related tasks">
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
     </p>
+
     <p>
-      <a href="tasks-63.htm">Replacing a Java element with a local history edition</a><br>
-      <a href="tasks-63a.htm">Comparing a Java element with a local history edition</a><br>
+      <a href="tasks-63.htm">Replacing a Java element with a local history
+      edition</a><br />
+      <a href="tasks-63a.htm">Comparing a Java element with a local history
+      edition</a><br />
       <a href="tasks-64.htm">Restoring a deleted workbench element</a>
     </p>
     <p>
-      <img border="0"  src="../images/ngrelr.png" alt="Related reference">
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
+
     </p>
     <p>
-      <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a>
-     </p>
-    
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer</a>
+    </p>
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63.htm
index 6f8e64c..176a8b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63.htm
@@ -1,74 +1,85 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Replacing a Java Element With a Local History Edition
     </title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
   </head>
   <body>
     <h1>
       Replacing a Java Element With a Local History Edition
     </h1>
     <ol>
-      <li>
-        Make sure that a Java view is visible.
+      <li>Make sure that a Java view is visible.
       </li>
-      <li>
-        Open a Java editor for the Java file in which you want to replace a Java element with an edition from the local history.
+      <li>Open a Java editor for the Java file in which you want to replace a
+      Java element with an edition from the local history.
       </li>
-      <li>
-        Activate the editor by clicking its tab in the editor area. The Outline view also displays the Java file.
-        <em>Note: The Package Explorer can be configured to show or not show
-        Java elements in files. Use the
-        <strong>Show Members in Package Explorer</strong> checkbox on the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-        <strong>Java > Appearance</strong></a> preference page to set your preference.</em>
+
+      <li>Activate the editor by clicking its tab in the editor area. The
+      Outline view also displays the Java file. <em>Note: The Package Explorer
+      can be configured to show or not show Java elements in files. Use the
+      <strong>Show Members in Package Explorer</strong> checkbox on the
+      <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Appearance preference page" /> <strong>Java >
+        Appearance</strong></a> preference page to set your preference.</em>
       </li>
-      <li>
-        Select the element that you want to replace in the Outline or the Package Explorer.
+
+      <li>Select the element that you want to replace in the Outline or the
+      Package Explorer.
       </li>
-      <li>
-        From the element's pop-up menu, select <strong>Replace With > Element from Local History</strong>.
+      <li>From the element's pop-up menu, select <strong>Replace With >
+      Element from Local History</strong>.
       </li>
-      <li>
-        In the upper pane of the resulting dialog, all available editions of the selected element in the local history are displayed.
+      <li>In the upper pane of the resulting dialog, all available editions of
+      the selected element in the local history are displayed.
       </li>
-      <li>
-        Select an edition in the upper pane to view the differences between the selected edition and the edition in the workbench.
+      <li>Select an edition in the upper pane to view the differences between
+      the selected edition and the edition in the workbench.
       </li>
-      <li>
-        When you have identified the edition with which you want to replace the existing Java element, click <strong>Replace</strong>.
+
+      <li>When you have identified the edition with which you want to replace
+      the existing Java element, click <strong>Replace</strong>.
       </li>
-      <li>
-        The local history edition replaces the current one in the editor. <em>Note: The changed compilation unit has not yet been saved at this point.</em>
+      <li>The local history edition replaces the current one in the editor.
+      <em>Note: The changed compilation unit has not yet been saved at this
+      point.</em>
       </li>
     </ol>
     <p>
-      <img  src="../images/ngrelc.png" alt="Related concepts" border="0">
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+
     </p>
     <p>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
-       <a href="../concepts/concept-java-editor.htm">Java editor</a>
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
+      <a href="../concepts/concept-java-editor.htm">Java editor</a>
     </p>
     <p>
-      <img border="0"  src="../images/ngrelt.png" alt="Related tasks">
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
     </p>
+
     <p>
       <a href="tasks-62.htm">Using the local history</a>
     </p>
     <p>
-      <img border="0"  src="../images/ngrelr.png" alt="Related reference">
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
       <a href="../reference/views/ref-view-outline.htm">Java outline</a>
+
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63a.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63a.htm
index b0d867d..7c5dac5 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63a.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-63a.htm
@@ -1,71 +1,81 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Comparing a Java Element With a Local History Edition
     </title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
   </head>
   <body>
     <h1>
       Comparing a Java Element With a Local History Edition
     </h1>
     <ol>
-      <li>
-        Make sure that a Java view is visible.
+      <li>Make sure that a Java view is visible.
       </li>
-      <li>
-        Open a Java editor for the Java file in which you want to compare a Java element with an edition from the local history.
+      <li>Open a Java editor for the Java file in which you want to compare a
+      Java element with an edition from the local history.
       </li>
-      <li>
-        Activate the editor by clicking its tab in the editor area. The Outline view also displays the Java file.
-        <em>Note: The Package Explorer can be configured to show or not show
-        Java elements in files. Use the
-        <strong>Show Members in Package Explorer</strong> checkbox on the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-        <strong>Java > Appearance</strong></a> preference page to set your preference.</em>
+
+      <li>Activate the editor by clicking its tab in the editor area. The
+      Outline view also displays the Java file. <em>Note: The Package Explorer
+      can be configured to show or not show Java elements in files. Use the
+      <strong>Show Members in Package Explorer</strong> checkbox on the
+      <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Appearance preference page" /> <strong>Java >
+        Appearance</strong></a> preference page to set your preference.</em>
       </li>
-      <li>
-        Select the element that you want to compare in the Outline or the Package Explorer.
+
+      <li>Select the element that you want to compare in the Outline or the
+      Package Explorer.
       </li>
-      <li>
-        From the element's pop-up menu, select <strong>Compare With > Element from Local History</strong>.
+      <li>From the element's pop-up menu, select <strong>Compare With >
+      Element from Local History</strong>.
       </li>
-      <li>
-        The <strong>History</strong> view opens and shows all editions of the selected element available in the local history.
+      <li>The <strong>History</strong> view opens and shows all editions of the
+      selected element available in the local history.
       </li>
-      <li>
-        Select an edition in the history view to see the differences between the selected edition and the edition in the workbench in a comparison editor.
+
+      <li>Select an edition in the history view to see the differences between
+      the selected edition and the edition in the workbench in a comparison
+      editor.
       </li>
-      <li>
-        If you are done with the comparison, click close the comparison editor.
+      <li>If you are done with the comparison, click close the comparison
+      editor.
       </li>
     </ol>
     <p>
-      <img  src="../images/ngrelc.png" alt="Related concepts" border="0">
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
     <p>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
-       <a href="../concepts/concept-java-editor.htm">Java editor</a>
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
+
+      <a href="../concepts/concept-java-editor.htm">Java editor</a>
     </p>
     <p>
-      <img border="0"  src="../images/ngrelt.png" alt="Related tasks">
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
     </p>
     <p>
       <a href="tasks-62.htm">Using the local history</a>
     </p>
+
     <p>
-      <img border="0"  src="../images/ngrelr.png" alt="Related reference">
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
       <a href="../reference/views/ref-view-outline.htm">Java outline</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-64.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-64.htm
index b72c874..21ff625 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-64.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-64.htm
@@ -1,67 +1,72 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Restoring a Deleted Workbench Element
     </title>
   </head>
+
   <body>
     <h1>
       Restoring a Deleted Workbench Element
     </h1>
     <ol>
-      <li>
-        Ensure that a Java view that show Java elements inside files (such as the Outline view) is visible.
+      <li>Ensure that a Java view that show Java elements inside files (such as
+      the Outline view) is visible.
       </li>
-      <li>
-        Open the compilation unit to which you want to add a previously removed Java element from the local history.
+      <li>Open the compilation unit to which you want to add a previously
+      removed Java element from the local history.
       </li>
-      <li>
-        Activate the editor by clicking its tab in the editor area, and the Java view shows the content of the Java file.
+      <li>Activate the editor by clicking its tab in the editor area, and the
+      Java view shows the content of the Java file.
       </li>
-      <li>
-        In the Java view, select the element to whose container type you want to restore the deleted element.
+
+      <li>In the Java view, select the element to whose container type you want
+      to restore the deleted element.
       </li>
-      <li>
-        From the type's pop-up menu in the Java view, select <strong>Restore from Local History</strong>.
+      <li>From the type's pop-up menu in the Java view, select <strong>Restore
+      from Local History</strong>.
       </li>
-      <li>
-        In the upper left pane of the resulting dialog, all available editions of the selected element in the local history are displayed.
+      <li>In the upper left pane of the resulting dialog, all available
+      editions of the selected element in the local history are displayed.
       </li>
-      <li>
-        In the left pane check all elements that you want to replace.
+      <li>In the left pane check all elements that you want to replace.
       </li>
-      <li>
-      	For every checked element select an edition in the right hand pane and view its content in the bottom pane.
+      <li>For every checked element select an edition in the right hand pane
+      and view its content in the bottom pane.
       </li>
-      <li>
-        When you have identified the edition that you want to restore, press <strong>Restore</strong>.
-        The local history editions are loaded into the editor.
+
+      <li>When you have identified the edition that you want to restore, press
+      <strong>Restore</strong>. The local history editions are loaded into the
+      editor.
       </li>
     </ol>
     <p>
-      <img  src="../images/ngrelc.png" alt="Related concepts" border="0">
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
     <p>
       <a href="../concepts/concept-java-editor.htm">Java editor</a>
+
     </p>
     <p>
-      <img border="0"  src="../images/ngrelt.png" alt="Related tasks">
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
     </p>
     <p>
       <a href="tasks-62.htm">Using the local history</a>
     </p>
     <p>
-      <img border="0"  src="../images/ngrelr.png" alt="Related reference">
+
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
     </p>
     <p>
       <a href="../reference/views/ref-view-outline.htm">Java outline</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-72.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-72.htm
deleted file mode 100644
index 757cca2..0000000
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-72.htm
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-  <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <title>
-      Navigating the JDT Workbench
-    </title>
-  </head>
-  <body>
-    <h1>
-      Navigating the JDT Workbench
-    </h1>
-    
-  </body>
-</html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-73.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-73.htm
index 33bcedf..425565b 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-73.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-73.htm
@@ -1,36 +1,42 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Opening an Editor for a Selected Element
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
   </head>
+
   <body>
     <h1>
       Opening an Editor for a Selected Element
     </h1>
     <p>
-      You can select the name of a type, method, or field in the Java source editor or in the scrapbook and open an editor on the definition of the element.
+      You can select the name of a type, method, or field in the Java source
+      editor or in the scrapbook and open an editor on the definition of the
+      element.
     </p>
     <ol>
-      <li>
-        In the Java editor, select the name of a type, method, or field. You can also just click into the name once.
+      <li>In the Java editor, select the name of a type, method, or field. You
+      can also just click into the name once.
       </li>
-      <li>
-        Do one of the following: 
+
+      <li>Do one of the following:
         <ul>
-          <li>
-            From the menu bar, select <strong>Navigate</strong> > <strong>Open Declaration</strong>
+          <li>From the menu bar, select <strong>Navigate</strong> > <strong>
+            Open Declaration</strong>
           </li>
-          <li>
-            From the editor's pop-up menu, select <strong>Open Declaration</strong>
+          <li>From the editor's pop-up menu, select <strong>Open
+          Declaration</strong>
+
           </li>
-          <li>
-            Press <strong>F3</strong>
+          <li>Press <strong>F3</strong>
           </li>
         </ul>
       </li>
@@ -38,36 +44,37 @@
     <p>
       or
     </p>
+
     <ol>
-      <li>
-        Hold down the <strong>Ctrl</strong> key.
+      <li>Hold down the <strong>Ctrl</strong> key.
       </li>
-      <li>
-        In the Java editor, move the mouse over the name of a type, method, or field until the name becomes underlined.
+      <li>In the Java editor, move the mouse over the name of a type, method,
+      or field until the name becomes underlined.
       </li>
-      <li>
-        Click the hyperlink once.
+      <li>Click the hyperlink once.
       </li>
     </ol>
-    
     <p>
-      If there are multiple definitions of the same name, a dialog is shown, and you can select one definition that you want to open. 
-      An editor opens containing the selected element.
+
+      If there are multiple definitions of the same name, a dialog is shown,
+      and you can select one definition that you want to open. An editor opens
+      containing the selected element.
     </p>
     <p>
-      <img src="../images/ngrelc.png" alt="Related concepts" border="0" >
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
     <p>
       <a href="../concepts/concept-java-editor.htm">Java editor</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
     </p>
     <p>
-      <a href="../reference/ref-menu-navigate.htm">Navigate menu</a><br>
-       <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a>
+      <a href="../reference/ref-menu-navigate.htm">Navigate menu</a><br />
+      <a href="../reference/views/ref-viewsandeditors.htm">Views and
+      editors</a>
     </p>
-    
   </body>
 </html>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-74.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-74.htm
index 95d5b70..9166f84 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-74.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-74.htm
@@ -1,14 +1,20 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Showing an Element in the Package Explorer View
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
   </head>
   <body>
     <h1>
@@ -17,52 +23,55 @@
     <p>
       You can reveal an element's location in the Package Explorer view
     </p>
-    
     <ul>
-      <li>
-        <ol>
-          <li>
-            Select a Java element or activate a Java editor.
-          </li>
-          <li>
-            From the menu bar, select <strong>Navigate</strong> > <strong>Show In</strong> > <strong>Package Explorer</strong>.
-            If the Package Explorer is not already open, then it opens in the
-            current perspective. The workbench navigates to the selected element (or the edited compilation unit).
-          </li>
-        </ol>
+
+      <li>Select a Java element or activate a Java editor.
       </li>
-      <li>
-        From the Java editor's pop-up menu, select 
-        <strong>Show In > Package Explorer</strong>. The currently edited compilation unit will be revealed.
+      <li>From the menu bar, select <strong>Navigate</strong> > <strong>Show
+      In</strong> > <strong>Package Explorer</strong>. If the Package
+      Explorer is not already open, then it opens in the current perspective.
+      The workbench navigates to the selected element (or the edited
+      compilation unit).
+      </li>
+      <li>From the Java editor's pop-up menu, select <strong>Show In >
+
+      Package Explorer</strong>. The currently edited compilation unit will be
+      revealed.
       </li>
     </ul>
     <p>
-      <strong>Note:</strong> The element might not be revealed if Package Explorer filters are active or the
-      <strong>Show Members in Package Explorer</strong> preference is cleared on the
-      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page">
-      <strong>Java > Appearance</strong></a> preference page.
+      <strong>Note:</strong> The element might not be revealed if Package
+      Explorer filters are active or the <strong>Show Members in Package
+      Explorer</strong> preference is cleared on the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Opens the Appearance preference page" /> <strong>Java >
+
+      Appearance</strong></a> preference page.
     </p>
     <p>
-      <img src="../images/ngrelc.png" alt="Related concepts" border="0" >
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
     <p>
       <a href="../concepts/concept-java-views.htm">Java views</a>
     </p>
+
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0" >
+      <img src="../images/ngrelt.png" alt="Related tasks" border="0" />
     </p>
     <p>
       <a href="tasks-executionArgs.htm">Setting execution arguments</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+
     </p>
     <p>
-      <a href="../reference/preferences/ref-preferences-java.htm">Java preference page</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a>
+      <a href="../reference/preferences/ref-preferences-java.htm">Java
+      preference page</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-75.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-75.htm
index 80bf6ae..db18cd9 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-75.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-75.htm
@@ -1,65 +1,76 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Opening a Type in the Package Explorer View
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
   </head>
+
   <body>
     <h1>
       Opening a Type in the Package Explorer View
     </h1>
     <p>
-      You can open the Package Explorer on any type that is included on a project's class path.
+      You can open the Package Explorer on any type that is included on a
+      project's class path.
     </p>
     <ol>
-		<li>
-			From the menu bar, select <strong>Navigate > Go To > Type.</strong> The Go to Type dialog opens.
-		</li>
-		<li>
-			In the <strong>Choose a type</strong> field, begin typing an expression to narrow the list of available types, using wildcards as needed. As you
-      		type, the list is filtered to display only types that match the current expression.
-      	</li>
-		<li>
-			In the <strong>Matching items</strong> list, select a type. Hint: you can press the <Strong>Down</strong> key to move to the first type.
-		</li>
-		<li>
-			Click <strong>OK</strong> when you are done. The selected type is displayed in the Package Explorer.
-    	</li>
+      <li>From the menu bar, select <strong>Navigate > Go To >
+
+      Type.</strong> The Go to Type dialog opens.
+      </li>
+      <li>In the <strong>Choose a type</strong> field, begin typing an
+      expression to narrow the list of available types, using wildcards as
+      needed. As you type, the list is filtered to display only types that
+      match the current expression.
+      </li>
+      <li>In the <strong>Matching items</strong> list, select a type. Hint: you
+      can press the <strong>Down</strong> key to move to the first type.
+      </li>
+
+      <li>Click <strong>OK</strong> when you are done. The selected type is
+      displayed in the Package Explorer.
+      </li>
     </ol>
-	
-	<p>
-	  <strong>Note:</strong> The Goto Type dialog maintains a history of recently opened types.
-	  These are shown when the dialog is opened and stay above a separator line when you start to type a filter expression.
-	</p>
-	
-	<p>
-		<strong>Note:</strong> Revealing may not be possible if Package Explorer filters are applied.
-	</p>
     <p>
-      <img src="../images/ngrelc.png" alt="Related concepts" border="0" >
+      <strong>Note:</strong> The Goto Type dialog maintains a history of
+      recently opened types. These are shown when the dialog is opened and stay
+      above a separator line when you start to type a filter expression.
+    </p>
+    <p>
+
+      <strong>Note:</strong> Revealing may not be possible if Package Explorer
+      filters are applied.
+    </p>
+    <p>
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
     <p>
       <a href="../concepts/concept-jdt.htm">Java development tools (JDT)</a>
     </p>
+
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0" >
+      <img src="../images/ngrelt.png" alt="Related tasks" border="0" />
     </p>
     <p>
-      <a href="tasks-74.htm">Showing a type's compilation unit in the Package Explorer</a>
+      <a href="tasks-74.htm">Showing a type's compilation unit in the Package
+      Explorer</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+
     </p>
     <p>
-      <a href="../reference/ref-menu-navigate.htm">Navigate actions</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a>
+      <a href="../reference/ref-menu-navigate.htm">Navigate actions</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-76.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-76.htm
index 7fbfc80..f31819f 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-76.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-76.htm
@@ -1,14 +1,18 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Opening an Editor on a Type
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
   </head>
+
   <body>
     <h1>
       Opening an Editor on a Type
@@ -17,52 +21,60 @@
       You can open an editor on any type in the workbench.
     </p>
     <ol>
-		<li>
-			Press <strong>Ctrl+Shift+T</strong> or, select <strong>Navigate</strong> > <strong>Open Type</strong> from the menu bar. The Open Type dialog opens.
-		</li>
-		<li>
-			In the <strong>Enter type name prefix or pattern</strong> field, begin typing an expression to narrow the list of available types, using wildcards as needed. As you
-			type, the list is filtered to display only types that match the current expression. CamelCase notation is also supported; that means you only need to enter the capital letters
-			of the type name.
-		</li>
-		<li>
-			In the <strong>Matching items</strong> list, select a type. Hint: you can press the <Strong>Down</strong> key to move to the first type.
-		</li>
-		<li>
-			Click <strong>OK</strong> when you are done. An editor opens on the selected type.
-		</li>
-	</ol>
-	
-	<p>
-	  <strong>Note:</strong> The Open Type dialog maintains a history of recently opened types.
-	  These are shown when the dialog is opened and stay above a separator line when you start to type a filter expression.
-	</p>
-	
+      <li>Press <strong>Ctrl+Shift+T</strong> or, select
+      <strong>Navigate</strong> > <strong>Open Type</strong> from the menu
+      bar. The Open Type dialog opens.
+      </li>
+
+      <li>In the <strong>Enter type name prefix or pattern</strong> field,
+      begin typing an expression to narrow the list of available types, using
+      wildcards as needed. As you type, the list is filtered to display only
+      types that match the current expression. CamelCase notation is also
+      supported; that means you only need to enter the capital letters of the
+      type name.
+      </li>
+      <li>In the <strong>Matching items</strong> list, select a type. Hint: you
+      can press the <strong>Down</strong> key to move to the first type.
+      </li>
+      <li>Click <strong>OK</strong> when you are done. An editor opens on the
+      selected type.
+      </li>
+
+    </ol>
     <p>
-      <strong>Note:</strong> If you open a type from a CLASS or JAR file, you will see a special editor showing only method signatures unless you have attached source to it.
+      <strong>Note:</strong> The Open Type dialog maintains a history of
+      recently opened types. These are shown when the dialog is opened and stay
+      above a separator line when you start to type a filter expression.
     </p>
-    
     <p>
-      <img src="../images/ngrelc.png" alt="Related concepts" border="0" >
+      <strong>Note:</strong> If you open a type from a CLASS or JAR file, you
+      will see a special editor showing only method signatures unless you have
+      attached source to it.
+    </p>
+    <p>
+
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
     <p>
       <a href="../concepts/concept-java-editor.htm">Java editor</a>
     </p>
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0" >
+      <img src="../images/ngrelt.png" alt="Related tasks" border="0" />
     </p>
+
     <p>
-       <a href="tasks-73.htm">Opening an editor for a selected element</a>
+      <a href="tasks-73.htm">Opening an editor for a selected element</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
     </p>
     <p>
-      <a href="../reference/ref-dialog-open-type.htm">Open type dialog</a><br>
-      <a href="../reference/ref-menu-navigate.htm">Navigate actions</a><br>
-      <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a>
+      <a href="../reference/ref-dialog-open-type.htm">Open type
+      dialog</a><br />
+
+      <a href="../reference/ref-menu-navigate.htm">Navigate actions</a><br />
+      <a href="../reference/views/ref-viewsandeditors.htm">Views and
+      editors</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-77.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-77.htm
index dee4a5b..6558d15 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-77.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-77.htm
@@ -1,14 +1,18 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
     <title>
       Opening a Package
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
   </head>
+
   <body>
     <h1>
       Opening a Package
@@ -17,31 +21,35 @@
       To reveal a package in the tree of the Package Explorer:
     </p>
     <ol>
-		<li>
-			Select <strong>Navigate</strong> > <strong>Go To</strong> > <strong>Package</strong> from the menu bar. The Go to Package dialog opens.
-		</li>
-		<li>
-			Type a package name in the <strong>Choose a package</strong> field to narrow the list of available packages, using wildcards as needed. As you type,
-			the list is filtered to display only packages that match the current expression.
-		</li>
-		<li>
-			Select a package from the list, then click <strong>OK</strong>. The selected package is displayed in the Package Explorer.
-		</li>
-	</ol>
+      <li>Select <strong>Navigate</strong> > <strong>Go To</strong> >
+
+      <strong>Package</strong> from the menu bar. The Go to Package dialog
+      opens.
+      </li>
+      <li>Type a package name in the <strong>Choose a package</strong> field to
+      narrow the list of available packages, using wildcards as needed. As you
+      type, the list is filtered to display only packages that match the
+      current expression.
+      </li>
+      <li>Select a package from the list, then click <strong>OK</strong>. The
+      selected package is displayed in the Package Explorer.
+      </li>
+    </ol>
+
     <p>
-      <img src="../images/ngrelc.png" alt="Related concepts" border="0" >
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
     </p>
     <p>
       <a href="../concepts/concept-java-views.htm">Java views</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" ><a href="../reference/ref-menu-navigate.htm"></a>
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
+
     </p>
     <p>
-      <a href="../reference/ref-menu-navigate.htm">Navigate actions</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a>
+      <a href="../reference/ref-menu-navigate.htm">Navigate actions</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-9.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-9.htm
index 54d39d0..6abfe35 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-9.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-9.htm
@@ -1,58 +1,121 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-<title>Changing the active perspective when launching</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> Changing the active perspective when launching </h1>
-You can control which perspective becomes active when a program is launched 
-and when it suspends. The setting is configurable for each launch configuration 
-type, for each of the launch modes it supports.
-<p>To activate a particular perspective when a program is launched, do the following:</p>
-<ol>
-  <li>Open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Run/Debug Perspectives preference page"> <strong>Run/Debug > Perspectives</strong></a> preference page. </li>
-  <li>Select the <strong>Always</strong> option for the <strong>Open the associated 
-    perspective when launching</strong> preference. This will cause the perspective 
-    associated with a program to become active whenever it is launched.</li>
-</ol>
-<p>To activate a particular perspective when a program is suspends, do the following:</p>
-<ol>
-  <li>Open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Run/Debug Perspectives preference page"> <strong>Run/Debug > Perspectives</strong></a> preference page. </li>
-  <li> Select the <strong>Always</strong> option for the <strong>Open the associated 
-    perspective when an application suspends</strong> preference.  This will 
-    cause the perspective associated with a program to become active whenever 
-    a program suspends.</li>
-</ol>
-<p>To associate a particular perspective with a program, do the following:</p>
-<ol>
-  <li>Open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Run/Debug Perspectives preference page"> <strong>Run/Debug > Perspectives</strong></a> preference page. </li>
-  <li>Select the type of application that you would like to 
-    associate a perspective with (for example, <strong>Java Application</strong>). </li>
-  <li>For each launch mode, select the desired perspective using the combo box. This 
-    will cause the perspective you choose to become active based on your preference 
-    settings (i.e. when a program is launched and/or when it suspends).</li>
-</ol>
-<p>If the specified perspective is not open at the time it needs to be activated, 
-  that perspective is created. </p>
-<p> <img border="0" src="../images/ngrelc.png" alt="Related concepts" > </p>
-<p> <a href="../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../concepts/cremdbug.htm">Remote debugging</a><br>
-  <a href="../concepts/clocdbug.htm">Local debugging</a><br>
-  <a href="../concepts/concept-java-perspective.htm">Java perspectives</a> </p>
-<p> <img border="0" src="../images/ngrelt.png" alt="Related tasks" > <br>
-  <a href="task-running_and_debugging.htm">Running and debugging</a><br>
-  <a href="../tasks/tasks-executionArgs.htm">Setting execution arguments</a><br>
-  <a href="task-launching_java_program.htm">Launching a Java program</a><br>
-</p>
-<p> <img border="0" src="../images/ngrelr.png" alt="Related reference" > </p>
-<p> <a href="../reference/views/console/ref-console_view.htm">Console view</a><br>
-  <a href="../reference/preferences/run-debug/ref-run_debug.htm">Debug preferences</a><br>
-  <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br>
-  <a href="../reference/menus/run/ref-menu-run.htm">Run Menu</a> </p>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Changing the active perspective when launching
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Changing the active perspective when launching
+    </h1>You can control which perspective becomes active when a program is
+    launched and when it suspends. The setting is configurable for each launch
+    configuration type, for each of the launch modes it supports.
+    <p>
+      To activate a particular perspective when a program is launched, do the
+      following:
+    </p>
+    <ol>
+      <li>Open the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'>
+
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Run/Debug Perspectives preference page" /> <strong>Run/Debug
+        > Perspectives</strong></a> preference page.
+      </li>
+      <li>Select the <strong>Always</strong> option for the <strong>Open the
+      associated perspective when launching</strong> preference. This will
+      cause the perspective associated with a program to become active whenever
+      it is launched.
+      </li>
+
+    </ol>
+    <p>
+      To activate a particular perspective when a program is suspends, do the
+      following:
+    </p>
+    <ol>
+      <li>Open the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Run/Debug Perspectives preference page" /> <strong>Run/Debug
+        > Perspectives</strong></a> preference page.
+      </li>
+
+      <li>Select the <strong>Always</strong> option for the <strong>Open the
+      associated perspective when an application suspends</strong>
+      preference.  This will cause the perspective associated with a
+      program to become active whenever a program suspends.
+      </li>
+    </ol>
+    <p>
+      To associate a particular perspective with a program, do the following:
+    </p>
+
+    <ol>
+      <li>Open the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.PerspectivePreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Run/Debug Perspectives preference page" /> <strong>Run/Debug
+        > Perspectives</strong></a> preference page.
+      </li>
+      <li>Select the type of application that you would like to associate a
+      perspective with (for example, <strong>Java Application</strong>).
+      </li>
+
+      <li>For each launch mode, select the desired perspective using the combo
+      box. This will cause the perspective you choose to become active
+      based on your preference settings (i.e. when a program is launched and/or
+      when it suspends).
+      </li>
+    </ol>
+    <p>
+      If the specified perspective is not open at the time it needs to be
+      activated, that perspective is created. 
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+
+    </p>
+    <p>
+      <a href="../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../concepts/cremdbug.htm">Remote debugging</a><br />
+      <a href="../concepts/clocdbug.htm">Local debugging</a><br />
+      <a href="../concepts/concept-java-perspective.htm">Java perspectives</a>
+    </p>
+
+    <p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="task-running_and_debugging.htm">Running and debugging</a><br />
+      <a href="../tasks/tasks-executionArgs.htm">Setting execution
+      arguments</a><br />
+      <a href="task-launching_java_program.htm">Launching a Java
+      program</a><br />
+    </p>
+    <p>
+
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
+    </p>
+    <p>
+      <a href="../reference/views/console/ref-console_view.htm">Console
+      view</a><br />
+      <a href="../reference/preferences/run-debug/ref-run_debug.htm">Debug
+      preferences</a><br />
+      <a href="../reference/views/debug/ref-debug_view.htm">Debug
+      view</a><br />
+      <a href="../reference/menus/run/ref-menu-run.htm">Run Menu</a>
+
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-JREs.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-JREs.htm
index 1719d70..a777310 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-JREs.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-JREs.htm
@@ -1,63 +1,87 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <meta name="GENERATOR" content=
+    "Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]" />
     <title>
       Working with JREs
     </title>
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+
   </head>
   <body>
     <h1>
       Working with JREs
     </h1>
     <p>
-      You can <a href="../tasks/task-add_new_jre.htm">install</a> as many different Java Runtime Environments (JREs) as you like. 
-      JREs are used to run and debug java programs.  Your JREs are managed on the
-      <a href="../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs</a> preference page.
-    </p>
-      
-    <p>
-      A JRE definition consists of:</p>
-      <ul>
-		  <li> The type of the JRE (e.g. Standard VM or Standard 1.x.x VM) </li>
-		  <li> A name </li>
-		  <li> The location where the JRE is installed </li>
-		  <li> The system libraries containing the Java system classes (like java.lang.Object). 
-		    Optionally, the system libraries can be associated with the source file containing 
-		    the source for the classes in the JRE's CLASS files and a javadoc location 
-		    (URL). </li>
-		  <li>Other information needed by the VM to build, run and debug applications.</li>
-	  </ul>
-	<p>You can <a href="../tasks/task-assign_default_jre.htm">switch</a> the default JRE for the workbench. 
-	The default JRE is used by default when building, running, and debugging applications.  Alternatively, 
-	projects may <a href="../tasks/task-choose_config_jre.htm">specify</a> a specific JRE that they should 
-	be built and run with.</p>
-  
-	<p>
-     <img src="../images/ngrelc.png" alt="Related concepts" border="0" >
-     </p>
-    <p>     
+      You can <a href="../tasks/task-add_new_jre.htm">install</a> as many
+      different Java Runtime Environments (JREs) as you like. JREs are used to
+      run and debug java programs. Your JREs are managed on the <a href=
+      "../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs</a> preference page.
+    </p>
+
+    <p>
+      A JRE definition consists of:
+    </p>
+    <ul>
+      <li>The type of the JRE (e.g. Standard VM or Standard 1.x.x VM)
+      </li>
+      <li>A name
+      </li>
+      <li>The location where the JRE is installed
+      </li>
+      <li>The system libraries containing the Java system classes (like
+      java.lang.Object). Optionally, the system libraries can be associated
+      with the source file containing the source for the classes in the JRE's
+      CLASS files and a javadoc location (URL).
+      </li>
+
+      <li>Other information needed by the VM to build, run and debug
+      applications.
+      </li>
+    </ul>
+    <p>
+      You can <a href="../tasks/task-assign_default_jre.htm">switch</a> the
+      default JRE for the workbench. The default JRE is used by default when
+      building, running, and debugging applications. Alternatively, projects
+      may <a href="../tasks/task-choose_config_jre.htm">specify</a> a specific
+      JRE that they should be built and run with.
+    </p>
+    <p>
+
+      <img src="../images/ngrelc.png" alt="Related concepts" border="0" />
+    </p>
+    <p>
       <a href="../concepts/concept-jdt.htm">Java development tools (JDT)</a>
     </p>
     <p>
-      <img src="../images/ngrelt.png" alt="Related tasks" border="0">
+      <img src="../images/ngrelt.png" alt="Related tasks" border="0" />
     </p>
+
     <p>
-      <a href="../tasks/task-add_new_jre.htm">Adding a new JRE definition</a><br>
-     <a href="tasks-deleteJRE.htm">Deleting a JRE definition</a><br>
-      <a href="../tasks/task-assign_default_jre.htm">Choosing a default JRE</a><br>
-      <a href="../tasks/task-choose_config_jre.htm">Choosing a JRE for launching a project</a>
+      <a href="../tasks/task-add_new_jre.htm">Adding a new JRE
+      definition</a><br />
+      <a href="tasks-deleteJRE.htm">Deleting a JRE definition</a><br />
+      <a href="../tasks/task-assign_default_jre.htm">Choosing a default
+      JRE</a><br />
+      <a href="../tasks/task-choose_config_jre.htm">Choosing a JRE for
+      launching a project</a>
     </p>
     <p>
-      <img src="../images/ngrelr.png" alt="Related reference" border="0" >
+
+      <img src="../images/ngrelr.png" alt="Related reference" border="0" />
     </p>
     <p>
-       <a href="../reference/preferences/java/debug/ref-installed_jres.htm">Installed JREs preference page</a>
+      <a href=
+      "../reference/preferences/java/debug/ref-installed_jres.htm">Installed
+      JREs preference page</a>
     </p>
-    
   </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-consoleAppearance.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-consoleAppearance.htm
index 9ca44a0..d984965 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-consoleAppearance.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-consoleAppearance.htm
@@ -1,14 +1,20 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Changing the appearance of the console view
     </title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
   </head>
   <body>
     <h1>
@@ -18,55 +24,67 @@
       To set the types of output (and their colors) in the Console view:
     </p>
     <ol>
-      <li>
-        Open the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.ConsolePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Console preference page">
-        <strong>Run/Debug > Console</strong></a> preference page.
+
+      <li>Open the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.ConsolePreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Console preference page" /> <strong>Run/Debug >
+        Console</strong></a> preference page.
       </li>
-      <li>
-        Checking the <strong>Show when program writes to standard out</strong> 
-        checkbox will make the Console view visible each
-        time new output is written to the console from the program's standard output stream. If there is no Console view in the current perspective, one will be created.
+      <li>Checking the <strong>Show when program writes to standard
+      out</strong> checkbox will make the Console view visible each time new
+      output is written to the console from the program's standard output
+      stream. If there is no Console view in the current perspective, one will
+      be created.
       </li>
-      <li>
-        Checking the <strong>Show when program writes to standard err</strong> 
-        checkbox will make the Console view visible each
-        time new output is written to the console from the program's standard error stream. If there is no Console view in the current perspective, one will be created.
+
+      <li>Checking the <strong>Show when program writes to standard
+      err</strong> checkbox will make the Console view visible each time new
+      output is written to the console from the program's standard error
+      stream. If there is no Console view in the current perspective, one will
+      be created.
       </li>
-      <li>
-        Click any of the color buttons to change the color for the corresponding
-        text stream.  
+      <li>Click any of the color buttons to change the color for the
+      corresponding text stream.  
       </li>
     </ol>
-    <p>To set the fonts used in the Console view:</p>
+    <p>
+      To set the fonts used in the Console view:
+    </p>
+
     <ol>
-      <li>
-        Open the
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Color and Fonts preference page">
-        <strong>General > Appearance > Colors and Fonts</strong></a> preference page.      </li>
-      <li>
-        Select <strong>Console font</strong> from the <strong>Debug</strong> category
-        and use the <strong>Change... </strong>button to change the font. 
-        (The <strong>Detail Pane Text Font</strong> can be used to change the
-        font of the debugger's default <a href="../reference/views/shared/ref-detailpane.htm"><strong>Detail Pane</strong></a>).      </li>
+      <li>Open the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Color and Fonts preference page" /> <strong>General >
+        Appearance > Colors and Fonts</strong></a> preference page.
+      </li>
+      <li>Select <strong>Console font</strong> from the <strong>Debug</strong>
+
+      category and use the <strong>Change...</strong> button to change the
+      font.  (The <strong>Detail Pane Text Font</strong> can be used to
+      change the font of the debugger's default <a href=
+      "../reference/views/shared/ref-detailpane.htm"><strong>Detail
+      Pane</strong></a>).
+      </li>
     </ol>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" >
+
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
     </p>
     <p>
-      <a href="../concepts/cdebugger.htm">Debugger</a><br>
-       <a href="../concepts/concept-java-views.htm">Java views</a>
+      <a href="../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../concepts/concept-java-views.htm">Java views</a>
     </p>
     <p>
-      <img border="0" src="../images/ngrelr.png" alt="Related reference" >
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
+
     </p>
     <p>
-      <a href="../reference/views/console/ref-console_view.htm">Console view</a><br>
-       <a href="../reference/views/ref-viewsandeditors.htm">Views and editors</a>
+      <a href="../reference/views/console/ref-console_view.htm">Console
+      view</a><br />
+      <a href="../reference/views/ref-viewsandeditors.htm">Views and
+      editors</a>
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-debug-launch.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-debug-launch.htm
index 7b5c8b3..e0c42af 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-debug-launch.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-debug-launch.htm
@@ -1,14 +1,18 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Launching a Java program in debug mode
     </title>
   </head>
+
   <body>
     <h1>
       Launching a Java program in debug mode
@@ -20,48 +24,68 @@
     <p>
       To launch a Java program in debug mode,
     </p>
-    
-<ol>
-  <li> In the <strong>Package Explorer</strong>, select the Java compilation unit 
-    or class file with the main method you want to launch. </li>
-  <li> Press the <strong>Debug</strong> [ <img src="../images/org.eclipse.debug.ui/etool16/debug_exc.png" width="16" height="16"> 
-    ] button in the workbench toolbar or select <strong>Run > Debug</strong> 
-    from the workbench menu bar. Alternatively you can select <strong>Run > 
-    Debug As > Java Application</strong> from the workbench menu bar, or select 
-    <strong>Debug As > Java Application </strong>in the <strong>Package Explorer</strong> 
-    pop-up menu or in the drop-down menu on the <strong>Debug</strong> tool bar 
-    button.</li>
-  <li> Your program is now launched and the launched process appears in the Debug 
-    view.  </li>
-</ol>
-    <p>If you want your program to stop in the <em>main</em>  method so that you
-    can step through its complete execution, create a <strong> Java Application</strong>
-    launch configuration and check the <strong>Stop in main </strong>checkbox on
-    the <strong>Main </strong>tab. </p>
-    <p>You can also debug a Java program by selecting a project instead of the
-    compilation unit or class file.  You will be prompted to select a class
-    from those classes that define a <em>main</em> method.  (If only one class with a main method is
-        found in the project, that class is launched as if you selected it.)</p>
+
+    <ol>
+      <li>In the <strong>Package Explorer</strong>, select the Java compilation
+      unit or class file with the main method you want to launch.
+      </li>
+      <li>Press the <strong>Debug</strong> [ <img src=
+      "../images/org.eclipse.debug.ui/etool16/debug_exc.png" width="16"
+        height="16" alt="The Debug button" /> ] button in the workbench toolbar
+        or select <strong>Run > Debug</strong> from the workbench menu bar.
+        Alternatively you can select <strong>Run > Debug As > Java
+        Application</strong> from the workbench menu bar, or select
+        <strong>Debug As > Java Application</strong> in the <strong>Package
+        Explorer</strong> pop-up menu or in the drop-down menu on the
+        <strong>Debug</strong> tool bar button.
+      </li>
+
+      <li>Your program is now launched and the launched process appears in the
+      Debug view. 
+      </li>
+    </ol>
+    <p>
+      If you want your program to stop in the <em>main</em> method so that you
+      can step through its complete execution, create a <strong>Java
+      Application</strong> launch configuration and check the <strong>Stop in
+      main</strong> checkbox on the <strong>Main</strong> tab. 
+
+    </p>
     <p>
-      <img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
-      <a href="../concepts/concept-java-views.htm">Java views</a><br>
-       <a href="../concepts/concept-java-editor.htm">Java editor</a><br>
-       <a href="../concepts/cdebugger.htm">Debugger</a>
+      You can also debug a Java program by selecting a project instead of the
+      compilation unit or class file.  You will be prompted to select a
+      class from those classes that define a <em>main</em> method.  (If
+      only one class with a main method is found in the project, that class is
+      launched as if you selected it.)
     </p>
     <p>
-      <img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
-      <a href="task-remotejava_launch_config.htm">Connecting to a remote VM with the Java Remote Application launcher</a><br>
-       <a href="task-relaunch_program.htm">Re-launching a program</a><br>
-       <a href="task-running_and_debugging.htm">Running and debugging</a><br>
-       <a href="../tasks/tasks-executionArgs.htm">Setting execution arguments</a><br>
-       <a href="task-stepping.htm">Stepping through the execution of a program</a><br>
+      <img border="0" src="../images/ngrelc.png" alt=
+      "Related concepts" /><br />
+
+      <a href="../concepts/concept-java-views.htm">Java views</a><br />
+      <a href="../concepts/concept-java-editor.htm">Java editor</a><br />
+      <a href="../concepts/cdebugger.htm">Debugger</a>
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="task-remotejava_launch_config.htm">Connecting to a remote VM
+      with the Java Remote Application launcher</a><br />
+
+      <a href="task-relaunch_program.htm">Re-launching a program</a><br />
+      <a href="task-running_and_debugging.htm">Running and debugging</a><br />
+      <a href="../tasks/tasks-executionArgs.htm">Setting execution
+      arguments</a><br />
+      <a href="task-stepping.htm">Stepping through the execution of a
+      program</a><br />
     </p>
     <p>
-      <img border="0" src="../images/ngrelr.png" alt="Related reference" ><br>
-      <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br>
-       <a href="../reference/views/ref-view-package-explorer.htm">Package Explorer</a><br>
+      <img border="0" src="../images/ngrelr.png" alt=
+      "Related reference" /><br />
+
+      <a href="../reference/views/debug/ref-debug_view.htm">Debug
+      view</a><br />
+      <a href="../reference/views/ref-view-package-explorer.htm">Package
+      Explorer</a><br />
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-executionArgs.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-executionArgs.htm
index 507ac95..0a166fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-executionArgs.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-executionArgs.htm
@@ -1,14 +1,20 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
   <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Style-Type" content="text/css">
-    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
     <title>
       Setting execution arguments
     </title>
-    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
   </head>
   <body>
     <h1>
@@ -19,56 +25,65 @@
       define a launch configuration that specifies the arguments.
     </p>
     <ol>
-      <li>
-        Select
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.debug.ui.commands.OpenRunConfigurations")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Run Launch Configurations dialog">
-        <strong>Run > Run Configurations...</strong></a> or
-        <a class="command-link" href='javascript:executeCommand("org.eclipse.debug.ui.commands.OpenDebugConfigurations")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Debug Launch Configurations dialog">
-        <strong>Run > Debug Configurations...</strong></a>
-        from the workbench <strong>Run</strong>
-        menu to open the list of launch configurations.   Launch
-        configurations for Java programs are shown underneath <strong>Java
-        Application </strong>in this list. 
+
+      <li>Select <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.debug.ui.commands.OpenRunConfigurations")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Run Launch Configurations dialog" /> <strong>Run > Run
+        Configurations...</strong></a> or <a class="command-link" href=
+        'javascript:executeCommand("org.eclipse.debug.ui.commands.OpenDebugConfigurations")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Debug Launch Configurations dialog" /> <strong>Run >
+        Debug Configurations...</strong></a> from the workbench
+        <strong>Run</strong> menu to open the list of launch
+        configurations.   Launch configurations for Java programs are
+        shown underneath <strong>Java Application</strong> in this list. 
+
       </li>
-      
-  <li> Select an existing configuration or create a new launch configuration by 
-    pushing the <strong>New</strong> button after selecting <strong>Java Application</strong>. 
-  </li>
-      <li>
-        On the <strong>Arguments</strong> tab for the configuration, you can
-        specify the following fields as necessary: 
+      <li>Select an existing configuration or create a new launch configuration
+      by pushing the <strong>New</strong> button after selecting <strong>Java
+      Application</strong>.
+      </li>
+      <li>On the <strong>Arguments</strong> tab for the configuration, you can
+      specify the following fields as necessary:
         <ul>
           <li>
-            <strong>Program Arguments</strong>: Application-specific values that your code is expecting (a user name or a URL for locating help files, for
-            example).
+
+            <strong>Program Arguments</strong>: Application-specific values
+            that your code is expecting (a user name or a URL for locating help
+            files, for example).
+          </li>
+          <li>
+            <strong>VM Arguments</strong>: Values meant to change the behavior
+            of the Java virtual machine (VM). For example, you may need to tell
+            the VM whether to use a just-in-time (JIT) compiler, or you may
+            need to specify the maximum heap size the VM should use. Refer to
+            your VM's documentation for more information about the available VM
+            arguments.
           </li>
           <li>
-            <strong>VM Arguments</strong>: Values meant to change the behavior of the Java virtual machine (VM). For example, you may need to tell the VM whether
-            to use a just-in-time (JIT) compiler, or you may need to specify the maximum heap size the VM should use. Refer to your VM's documentation for more information
-            about the available VM arguments.
+            <strong>Working Directory</strong>: The working directory used for
+            the launched process. To change from using the default working
+            directory, select <strong>Other</strong> and specify the workspace
+            or local directory to use for the working directory of the launched
+            process.
           </li>
-          
-      <li> <strong>Working Directory</strong>: The working directory used for 
-        the launched process. To change from using the default working directory, 
-        select <strong>Other </strong>and specify the workspace or local directory 
-        to use for the working directory of the launched process. </li>
+
         </ul>
       </li>
-      <li>
-        Click <strong>Apply</strong> or  <strong>Close</strong> when you are done. Every time you launch this configuration, these execution
-        arguments will be used.
+      <li>Click <strong>Apply</strong> or  <strong>Close</strong> when you
+      are done. Every time you launch this configuration, these execution
+      arguments will be used.
       </li>
     </ol>
     <p>
-      <img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
-      <a href="../tasks/tasks-java-local-configuration.htm">Creating a Java Application launch
-      configuration</a><br>
-      <a href="task-launching_java_program.htm">Launching a Java program</a><br>
-      <br>
+
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="../tasks/tasks-java-local-configuration.htm">Creating a Java
+      Application launch configuration</a><br />
+      <a href="task-launching_java_program.htm">Launching a Java
+      program</a><br />
+      <br />
     </p>
-    
   </body>
 </html>
-
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-java-local-configuration.htm b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-java-local-configuration.htm
index d14502b..c596373 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-java-local-configuration.htm
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tasks/tasks-java-local-configuration.htm
@@ -1,83 +1,143 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
-<title>Creating a Java application launch configuration</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> Creating a Java application launch configuration </h1>
-<p> When you choose <strong>Run >Run As >Java Application </strong>to
-  launch your class, you are running your class using a generic <strong>Java
-  Application</strong> launch configuration that derives most of the launch
-  parameters from your Java project and your workbench preferences.  In
-  some cases, you will want to override the derived parameters or specify
-  additional arguments. </p>
-<p> You do this by creating your own <strong>Java Application</strong> launch
-  configuration.  </p>
-<ol>
-  <li> Select <a class="command-link" href='javascript:executeCommand("org.eclipse.debug.ui.commands.OpenRunConfigurations")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Run Launch Configurations dialog"> <strong>Run > Run Configurations...</strong></a> or <a class="command-link" href='javascript:executeCommand("org.eclipse.debug.ui.commands.OpenDebugConfigurations")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Debug Launch Configurations dialog"> <strong>Run > Debug Configurations...</strong></a> from the workbench menu bar.  This opens a dialog that lets you
-    create, modify, and delete launch configurations of different types. </li>
-  <li> Select <strong>Java Application</strong> in the left hand list of launch 
-    configuration types, and press the <strong>New</strong> button in the toolbar. 
-    This will create a new launch configuration for a Java application. The 
-    tabs on the right hand side allow you control specific aspects of the launch. </li>
-</ol>
-<blockquote>
-  <ul>
-    <li>The <strong>Main</strong> tab defines the class to be launched. Enter 
-      the name of the project containing the class to launch in the project field, 
-      and the fully qualified name of the main class in the Main class field. Check 
-      the <strong>Stop in main</strong> checkbox if you want the program to stop 
-      in the main method whenever the program is launched in debug mode.<br>
-      Note:  You do not have to specify a project, but doing so allows a 
-      default classpath, source lookup path, and JRE to be chosen.</li>
-    <li>The <strong>Arguments</strong> tab defines the arguments to be passed 
-      to the application and to the virtual machine (if any). You can also specify 
-      the working directory to be used by the launched application.</li>
-    <li>The <strong>JRE</strong> tab defines the JRE used to run or debug the 
-      application. You can select a JRE from the already defined JREs, or define 
-      a new JRE.</li>
-    <li>The <strong>Classpath</strong> tab defines the location of class files 
-      used when running or debugging an application. By default, the user and 
-      bootstrap class locations are derived from the associated project's build 
-      path. You may override these settings here.</li>
-    <li>The <strong>Source</strong> tab defines the location of source files used 
-      to display source when debugging a Java application. By default, these settings 
-      are derived from the associated project's build path. You may override these 
-      settings here.</li>
-    <li>The <strong>Environment</strong> tab defines the environment variable 
-      values to use when running or debugging a Java application. By default, 
-      the environment is inherited from the Eclipse runtime. You may override 
-      or append to the inherited environment. Variables specified in the tab
-      always replace values in the underlying native environment. However, when
-      "Append environment to native environment" is selected the launched environment is seeded
-      with the native environment, after which variables in the tab replace (existing variables)
-      or augment the set of environment variables. When "Replace native environment with
-      specified environment" is selected, the launched environment is comprised only of the
-      variables specified in the tab.
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Creating a Java application launch configuration
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      Creating a Java application launch configuration
+    </h1>
+    <p>
+      When you choose <strong>Run >Run As >Java Application</strong> to
+      launch your class, you are running your class using a generic
+      <strong>Java Application</strong> launch configuration that derives most
+      of the launch parameters from your Java project and your workbench
+      preferences.  In some cases, you will want to override the derived
+      parameters or specify additional arguments.
+    </p>
+
+    <p>
+      You do this by creating your own <strong>Java Application</strong> launch
+      configuration. 
+    </p>
+    <ol>
+      <li>Select <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.debug.ui.commands.OpenRunConfigurations")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Run Launch Configurations dialog" /> <strong>Run > Run
+        Configurations...</strong></a> or <a class="command-link" href=
+        'javascript:executeCommand("org.eclipse.debug.ui.commands.OpenDebugConfigurations")'>
+
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "Opens the Debug Launch Configurations dialog" /> <strong>Run >
+        Debug Configurations...</strong></a> from the workbench menu bar. 
+        This opens a dialog that lets you create, modify, and delete launch
+        configurations of different types.
       </li>
-    <li>The <strong>Common</strong> tab defines general information about the 
-      launch configuration.  You may choose to store the launch configuration 
-      in a specific file and specify which perspectives become active when the 
-      launch configuration is launched.</li>
-  </ul>
-</blockquote>
-<p> <img border="0" src="../images/ngrelc.png" alt="Related concepts" > </p>
-<p> <a href="../concepts/cdebugger.htm">Debugger</a><br>
-  <a href="../concepts/clocdbug.htm">Local debugging</a> </p>
-<p> <br>
-  <img border="0" src="../images/ngrelt.png" alt="Related tasks" > </p>
-<p> <a href="task-choose_config_jre.htm">Choosing a JRE for launching a project</a><br>
-  <a href="task-launching_java_program.htm">Launching a Java program</a><br>
-  <a href="tasks-executionArgs.htm">Setting execution arguments<br>
-  </a><a href="../tasks/tasks-9.htm">Changing debugger launch options</a> </p>
-<p> <img border="0" src="../images/ngrelr.png" alt="Related reference" > </p>
-<p> <a href="../reference/preferences/run-debug/ref-run_debug.htm">Debug preferences</a><br>
-  <a href="../reference/views/debug/ref-debug_view.htm">Debug view</a><br>
-  <a href="../reference/menus/run/ref-menu-run.htm">Run Menu </a> </p>
-</body>
+      <li>Select <strong>Java Application</strong> in the left hand list of
+      launch configuration types, and press the <strong>New</strong> button in
+      the toolbar. This will create a new launch configuration for a Java
+      application. The tabs on the right hand side allow you control
+      specific aspects of the launch.
+      </li>
+
+    </ol>
+    <blockquote>
+      <ul>
+        <li>The <strong>Main</strong> tab defines the class to be launched.
+        Enter the name of the project containing the class to launch in the
+        project field, and the fully qualified name of the main class in the
+        Main class field. Check the <strong>Stop in main</strong> checkbox
+        if you want the program to stop in the main method whenever the program
+        is launched in debug mode.<br />
+          Note:  You do not have to specify a project, but doing so allows
+          a default classpath, source lookup path, and JRE to be chosen.
+        </li>
+
+        <li>The <strong>Arguments</strong> tab defines the arguments to be
+        passed to the application and to the virtual machine (if any). You can
+        also specify the working directory to be used by the launched
+        application.
+        </li>
+        <li>The <strong>JRE</strong> tab defines the JRE used to run or debug
+        the application. You can select a JRE from the already defined JREs, or
+        define a new JRE.
+        </li>
+        <li>The <strong>Classpath</strong> tab defines the location of class
+        files used when running or debugging an application. By default, the
+        user and bootstrap class locations are derived from the associated
+        project's build path. You may override these settings here.
+        </li>
+
+        <li>The <strong>Source</strong> tab defines the location of source
+        files used to display source when debugging a Java application. By
+        default, these settings are derived from the associated project's build
+        path. You may override these settings here.
+        </li>
+        <li>The <strong>Environment</strong> tab defines the environment
+        variable values to use when running or debugging a Java application. By
+        default, the environment is inherited from the Eclipse runtime. You may
+        override or append to the inherited environment. Variables specified in
+        the tab always replace values in the underlying native environment.
+        However, when "Append environment to native environment" is selected
+        the launched environment is seeded with the native environment, after
+        which variables in the tab replace (existing variables) or augment the
+        set of environment variables. When "Replace native environment with
+        specified environment" is selected, the launched environment is
+        comprised only of the variables specified in the tab.
+        </li>
+        <li>The <strong>Common</strong> tab defines general information about
+        the launch configuration.  You may choose to store the launch
+        configuration in a specific file and specify which perspectives become
+        active when the launch configuration is launched.
+        </li>
+
+      </ul>
+    </blockquote>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt="Related concepts" />
+    </p>
+    <p>
+      <a href="../concepts/cdebugger.htm">Debugger</a><br />
+      <a href="../concepts/clocdbug.htm">Local debugging</a>
+
+    </p>
+    <p>
+      <br />
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" />
+    </p>
+    <p>
+      <a href="task-choose_config_jre.htm">Choosing a JRE for launching a
+      project</a><br />
+      <a href="task-launching_java_program.htm">Launching a Java
+      program</a><br />
+
+      <a href="tasks-executionArgs.htm">Setting execution arguments<br /></a>
+      <a href="../tasks/tasks-9.htm">Changing debugger launch options</a>
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelr.png" alt="Related reference" />
+    </p>
+    <p>
+      <a href="../reference/preferences/run-debug/ref-run_debug.htm">Debug
+      preferences</a><br />
+
+      <a href="../reference/views/debug/ref-debug_view.htm">Debug
+      view</a><br />
+      <a href="../reference/menus/run/ref-menu-run.htm">Run Menu</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/assign-to-casted-quickfix.png b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/assign-to-casted-quickfix.png
index 14dda85..4eed4d6 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/assign-to-casted-quickfix.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/assign-to-casted-quickfix.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/focus-ovr.png b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/focus-ovr.png
new file mode 100644
index 0000000..d9537e2
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/focus-ovr.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/quick-outline-inherited.png b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/quick-outline-inherited.png
index ad1fca4..3b97734 100644
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/quick-outline-inherited.png and b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/images/quick-outline-inherited.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/tips/jdt_tips.html b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/jdt_tips.html
index 297f837..20495e3 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/tips/jdt_tips.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/tips/jdt_tips.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -37,7 +37,7 @@ features in this release.
 
 <h3><a name="editing_section"></a>Editing source</h3>
 
-<table border="1" cellpadding="10" cellspacing="0" width="670" bgcolor="white" summary="Editing source tips and tricks">
+<table border="1" cellpadding="10" cellspacing="0" width="670" summary="Editing source tips and tricks">
 	<tbody>
 		<tr>
 			<td width="20%" valign="top" align="left"><b>Content assist</b></td>
@@ -81,7 +81,7 @@ features in this release.
 			preference page. Types matching one of these filter patterns
 			will not appear in the Open Type dialog and will not be available to
 			content assist, quick fix and organize imports. These filter patterns
-			do not affect the Package Explorer and Hierarchy views.
+			do not affect the Package Explorer and Type Hierarchy views.
 			<p><img border="0" src="images/type-filter.png" alt="Type filter preference page"></p>
 			</td>
 		</tr>
@@ -483,11 +483,10 @@ features in this release.
 			<img border="0" src="images/quickfix-addcast3.png" alt="Add cast in method call targets"></p></td>
 		</tr>
 		<tr>
-			<td width="20%" valign="top" align="left"><b>Assign a casted
-			expression</b><br>
+			<td width="20%" valign="top" align="left"><b>Assign a cast expression</b><br>
 			</td>
 			<td width="80%" valign="top">After an 'instanceof' check, it is very common to cast the expression and assign it to a new local variable. Invoke <b>Quick
-			Assist (Ctrl+1)</b> on the 'instanceof' keyword to save yourself some typing:<br>
+			Assist (Ctrl+1)</b> on the 'instanceof' keyword or at the beginning of the block body to save yourself some typing:<br>
 			<img border="0" src="images/assign-to-casted-quickfix.png"
 				alt="'Introduce new local with casted type' quick fix">
 			</td>
@@ -607,7 +606,7 @@ features in this release.
 			element that contains the selection. You can then further expand the
 			selection by invoking the action again (or other actions from the Expand Selection To menu).</p>
 			<p>This is for example helpful to select the enclosing identifier for renames,
-			or the select adjacent statements for a subsequent Extract Method refactoring.</p>
+			or to select adjacent statements for a subsequent Extract Method refactoring.</p>
 			</td>
 		</tr>
 		<tr>
@@ -906,7 +905,7 @@ features in this release.
 
 <h3><a name="refactor_section"></a>Refactoring</h3>
 
-<table border="1" cellpadding="10" cellspacing="0" width="670" summary="Refactoring tips and tricks" bgcolor="white">
+<table border="1" cellpadding="10" cellspacing="0" width="670" summary="Refactoring tips and tricks">
 	<tbody>
 			<tr>
 			<td width="20%" valign="top" align="left"><b>Scripting of refactorings</b>
@@ -936,8 +935,7 @@ features in this release.
 
 <h3><a name="searching_section"></a>Searching</h3>
 
-<table border="1" cellpadding="10" cellspacing="0" width="670" summary="Searching tips and tricks"
-	bgcolor="white">
+<table border="1" cellpadding="10" cellspacing="0" width="670" summary="Searching tips and tricks">
 	<tbody>
 		<tr>
 			<td width="20%" valign="top" align="left"><b>Locate variables and
@@ -996,6 +994,10 @@ features in this release.
 			call chains without losing the original context: Just select a method
 			and invoke <b>Navigate > Open Call Hierarchy (Ctrl+Alt+H)</b>.
 			<p><img src="images/call_hierarchy.png"  border="0" alt="Call Hierarchy View"></p>
+			
+			<p>You can also use drag and drop to replace the view input with the selected methods.
+			<b>Ctrl+drag</b> adds the selected methods to the existing elements in the view.</p>
+			
 			<p>Methods from anonymous classes or special types like <code>Runnable</code> are
 			by default expanded with constructors, since it is often more interesting to
 			see where the object is created than where the method is invoked.
@@ -1009,8 +1011,7 @@ features in this release.
 </table>
 <h3><a name="navigation_section"></a>Code navigation and reading</h3>
 
-<table border="1" cellpadding="10" cellspacing="0" width="670" summary="Code navigation and reading tips and tricks"
-	bgcolor="white">
+<table border="1" cellpadding="10" cellspacing="0" width="670" summary="Code navigation and reading tips and tricks">
 	<tbody>
 		<tr>
 			<td width="20%" valign="top" align="left"><b>Open selection in
@@ -1049,9 +1050,11 @@ features in this release.
 		<tr>
 			<td width="20%" valign="top" align="left"><b>In-place outlines show inherited members</b></td>
 			<td valign="top" align="left" width="80%">Press <b>Ctrl+O</b> or <b>Ctrl+F3</b>
-			 again to add inherited members to an open In-place outline. Inherited members have a gray label.
+			 again to add inherited members to an open In-place outline. Inherited members have a blue label.
 			 Filter and sort the outline with the menu in the upper right corner.
 			<p><img src="images/quick-outline-inherited.png"  border="0" alt="Quick outline view"></p>
+			 The <b>Quick Outline (Ctrl+O)</b> also shows inherited members of the type that contains the current editor selection.
+			The focus types that can show inherited members are marked with a triangle ( <img src="images/focus-ovr.png" alt="Focus adornment"> ).
             </td>
 		</tr>
 		<tr>
@@ -1252,8 +1255,7 @@ features in this release.
 </table>
 <h3><a name="views_section"></a>Java views</h3>
 
-<table border="1" cellpadding="10" cellspacing="0" width="670"
-	bgcolor="white">
+<table border="1" cellpadding="10" cellspacing="0" width="670">
 	<tbody>
 		<tr>
 			<td valign="top" align="left">
@@ -1342,7 +1344,9 @@ much easier to manage workspaces containing lots of projects.
 				(Navigate > Open Type Hierarchy)</b> on an element or a selected
 				name.</li>
 				<li>You can open the Type Hierarchy view not only on types but also on
-				packages, source folders, JAR archives and Java projects.</li>
+				packages, source folders, JAR archives and Java projects. You can select
+				multiple packages, source folders, or projects, and then open a hierarchy
+				that contains all types in the selected containers.</li>
 				<li>You can Drag & Drop an element onto the Type Hierarchy view to
 				focus on that element.</li>
 				<li>You can change the orientation (from the default vertical to
@@ -1543,8 +1547,7 @@ public class HelloWorld {
 </table>
 <h3><a name="misc_section"></a>Miscellaneous</h3>
 
-<table border="1" cellpadding="10" cellspacing="0" width="670"
-	bgcolor="white">
+<table border="1" cellpadding="10" cellspacing="0" width="670">
 	<tbody>
 		<tr>
 			<td width="20%" valign="top" align="left"><b>Project specific
@@ -1817,8 +1820,7 @@ public class HelloWorld {
 
 <h3><a name="debugging_section"></a>Debugging</h3>
 
-<table border="1" cellpadding="10" cellspacing="0" width="670"
-	bgcolor="white">
+<table border="1" cellpadding="10" cellspacing="0" width="670">
 	<tbody>
 	<tr>
 			<td width="20%" valign="top" align="left">
@@ -1946,7 +1948,7 @@ public class HelloWorld {
       <p>When debugging with JavaSE-1.6, all instances of a class can be inspected by selecting a class
       in an editor outline, variables view, compilation unit or class file editor and invoking
       <b>All Instances...</b> from the context menu. A pop-up dialog will display all instances of the
-      seleted class.</p>
+      selected class.</p>
 			<p><img src="images/org.eclipse.jdt.debug.ui/all-instances.png"  alt="Display references in the variables view"></p>
 			</td>
 		</tr>		
@@ -2083,14 +2085,16 @@ public class HelloWorld {
         <p><img src="images/org.eclipse.jdt.debug.ui/step_into_selection.png"
 				alt="Stepping into selection"></p>
 			<p>When the caret is not in a method name, the feature steps into the next method on the selected line.
-			When you e.g. have line with nested method calls and the caret is a the beginning of the line, the feature
-			steps into the outermost method (unlike Step Into).</p>
+			For example, when the caret is at the beginning of the line<br>
+			<code>    assertTrue(fFull.size() == 100)</code>,<br>
+			then <b>Step into Selection</b> steps into <code>assertTrue(..)</code>
+			(unlike <b>Step Into</b>, which would step into <code>size()</code>).</p>
 				
         <p>You can also step into a method by using hyperlink navigation. Simply 
           place the cursor over the method you wish to step into and use <strong>Ctrl+Alt+Click</strong> 
           to step into the method (rather than <strong>Ctrl+Click</strong> which 
           will navigate to the source code).</p>
-        <p><b><img src="images/org.eclipse.jdt.debug.ui/hyperlink_step.png" alt="Use Ctrl+Alt+Click to step into a method hyperlink"></b></p>
+        <p><img src="images/org.eclipse.jdt.debug.ui/hyperlink_step.png" alt="Use Ctrl+Alt+Click to step into a method hyperlink"></p>
         </td>
 		</tr>
 		<tr>
@@ -2132,7 +2136,7 @@ public class HelloWorld {
       A class load breakpoint suspends execution when a specified 
           class is loaded in the virtual machine. To set a class load breakpoint, select a class in 
           the Outline view and choose <b>Toggle Class Load Breakpoint</b> from its context 
-          menu. You can also use the <b>Run > Add Class Load Breakpoint...</b> menu action to create
+          menu. You can also use the <b>Run > Add Class Load Breakpoint...</b> menu action to create
           a class load breakpoint.
 			<p><img src="images/org.eclipse.jdt.debug.ui/class-load-breakpoint.png"  alt="Class load breakpoints suspend execution when a specified class is loaded">
 </p>
@@ -2146,7 +2150,7 @@ public class HelloWorld {
           To set a method breakpoint, select a method in 
           the Outline view and choose <b>Toggle Method Breakpoint</b> from its context 
           menu. Alternatively, double click on a method declaration line in the editor ruler
-          or use the <b>Run > Toggle Method Breakpoint</b> menu action to create
+          or use the <b>Run > Toggle Method Breakpoint</b> menu action to create
           a method breakpoint in the currently selected method.
           <p>By default a method breakpoint
           only suspends execution when a method is entered. You can use the breakpoint detail
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/toc.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/toc.xml
index 9b1e3bb..a2e5ae9 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/toc.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/toc.xml
@@ -22,8 +22,12 @@
 	</topic>
 	<anchor id="jdt_reference" />
 	
-	<topic label="Tips and tricks" href="tips/jdt_tips.html"/>
-	<topic label="What's new" href="whatsNew/jdt_whatsnew.html"/>
+	<topic label="Tips and tricks" href="tips/jdt_tips.html">
+		<link toc="topics_Tips.xml" />
+	</topic>
+	<topic label="What's new" href="whatsNew/jdt_whatsnew.html">
+		<link toc="topics_WhatsNew.xml" />
+	</topic>
 	<topic label="Legal" href="notices.html"/>
 	<enablement>
 		<test property="org.eclipse.core.runtime.isBundleInstalled" args="org.eclipse.jdt.ui"/>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Concepts.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Concepts.xml
index e9e82ca..4c64b61 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Concepts.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Concepts.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
-<!-- ========================== -->
+<!-- ============================== -->
 <!-- Define topics for the Concepts -->
-<!-- ========================== -->
+<!-- ============================== -->
 <toc label="Concepts" href="concepts/concept-jdt.htm" >
    <!-- <topic label="Overview" href="concepts/concept-jdt.htm"/> -->
    <topic label="Java Projects" href="concepts/concept-java-project.htm"/>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_GettingStarted.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_GettingStarted.xml
index 2bf128d..df7e827 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_GettingStarted.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_GettingStarted.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
-<!-- ========================== -->
+<!-- ==================================== -->
 <!-- Define topics for the GettingStarted -->
-<!-- ========================== -->
+<!-- ==================================== -->
 <toc label="GettingStarted">
    <topic label="Basic tutorial" href="gettingStarted/qs-BasicTutorial.htm"> 
 	   <topic label="Preparing Eclipse" href="gettingStarted/qs-2.htm"/>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Reference.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Reference.xml
index c460fa0..93c5a31 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Reference.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Reference.xml
@@ -2,7 +2,7 @@
 <?NLS TYPE="org.eclipse.help.toc"?>
 <toc label="Reference">
 <!--
-	Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains 					this page.
+	Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains 					this page.
 
 	All topics that fall under the reference section of the help system are defined here.
 	Topics are laid out in the order that they appear in the help system. Main topics are
@@ -308,8 +308,8 @@
 		<topic label="View Layout Commands" href="reference/views/shared/ref-viewlayoutcommands.htm">
 			<topic label="Show Columns" href="reference/views/shared/ref-showcolumns.htm"/>
 			<topic label="Select Columns" href="reference/views/shared/ref-selectcolumns.htm"/>
-			<topic label="Horizontal View Orientation" href="reference/views/shared/ref-horizview.htm"/>
-			<topic label="Vertical View Orientation" href="reference/views/shared/ref-vertview.htm"/>
+			<topic label="Horizontal Layout" href="reference/views/shared/ref-horizview.htm"/>
+			<topic label="Vertical Layout" href="reference/views/shared/ref-vertview.htm"/>
 			<topic label="View Only" href="reference/views/shared/ref-viewonly.htm"/>
 		</topic>
 		<topic label="Add Watch Expression" href="reference/views/expressions/ref-addwatch.htm"/>
@@ -369,8 +369,8 @@
 		<topic label="View Layout Commands" href="reference/views/shared/ref-viewlayoutcommands.htm">
 			<topic label="Show Columns" href="reference/views/shared/ref-showcolumns.htm"/>
 			<topic label="Select Columns" href="reference/views/shared/ref-selectcolumns.htm"/>
-			<topic label="Horizontal View Orientation" href="reference/views/shared/ref-horizview.htm"/>
-			<topic label="Vertical View Orientation" href="reference/views/shared/ref-vertview.htm"/>
+			<topic label="Horizontal Layout" href="reference/views/shared/ref-horizview.htm"/>
+			<topic label="Vertical Layout" href="reference/views/shared/ref-vertview.htm"/>
 			<topic label="View Only" href="reference/views/shared/ref-viewonly.htm"/>
 		</topic>
 		<topic label="All Instances" href="reference/views/shared/ref-allinstances.htm"/>
@@ -400,7 +400,22 @@
 	Java Type Hierarchy View
 -->
 	<topic label="Type Hierarchy View" href="reference/views/ref-type-hierarchy.htm" />
+
+<!--
+	Java Call Hierarchy View
+-->
 	<topic label="Call Hierarchy View" href="reference/views/ref-call-hierarchy.htm" />
+
+<!--
+	JUnit View
+-->
+	<topic label="JUnit View" href="reference/views/ref-view-junit.htm" />
+
+<!--
+	Javadoc View
+-->
+	<topic label="Javadoc View" href="reference/views/ref-view-javadoc.htm" />
+	
 <!-- 
 	End views
  -->	
@@ -414,6 +429,7 @@
 		<topic label="Java Formatter" href="reference/ref-java-editor-formatter.htm" />
 		<topic label="Quick fix" href="reference/ref-java-editor-quickfix.htm" />
 		<topic label="Quick assist" href="reference/ref-java-editor-quickassist.htm" />
+		<topic label="Suppress warnings" href="tasks/task-suppress_warnings.htm" />
 	</topic>
 		
 <!--
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Tasks.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Tasks.xml
index 34f0f0f..1e20489 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Tasks.xml
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Tasks.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
-<!-- ========================== -->
+<!-- =========================== -->
 <!-- Define topics for the Tasks -->
-<!-- ========================== -->
+<!-- =========================== -->
 <toc label="Tasks">
 
 	<topic label="Customizing the Debugger and Console" >
@@ -109,6 +109,11 @@
 		</topic>
 	</topic>
 	<anchor id="t_scrapbook" />
+	<topic label="Compiling Java code">
+		<topic href="tasks/task-using_batch_compiler.htm" label="Using the batch compiler"></topic>
+		<topic href="tasks/task-ant_javac_adapter.htm" label="Using the ant javac adapter"></topic>
+		<topic href="tasks/task-suppress_warnings.htm" label="Excluding warnings"></topic>
+ 	</topic>
 	<topic label="Using the Formatter Application" href="tasks/tasks-230.htm">
 			<topic label="Running the formatter application" href="tasks/tasks-231.htm"></topic>
 			<topic label="Generating a config file for the formatter application" href="tasks/tasks-232.htm"></topic>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Tips.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Tips.xml
new file mode 100644
index 0000000..c36bba7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_Tips.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<!-- ===================================== -->
+<!-- Define topics for the Tips and Tricks -->
+<!-- ===================================== -->
+<toc label="Tips and tricks">
+	<topic label="Editing" href="tips/jdt_tips.html#editing_section"/>
+	<topic label="Refactoring" href="tips/jdt_tips.html#refactor_section"/>
+	<topic label="Searching" href="tips/jdt_tips.html#searching_section"/>
+	<topic label="Navigation" href="tips/jdt_tips.html#navigation_section"/>
+	<topic label="Views" href="tips/jdt_tips.html#views_section"/>
+	<topic label="Miscellaneous" href="tips/jdt_tips.html#misc_section"/>
+	<topic label="Debugging" href="tips/jdt_tips.html#debugging_section"/>
+</toc>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/topics_WhatsNew.xml b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_WhatsNew.xml
new file mode 100644
index 0000000..58080bc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/topics_WhatsNew.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<!-- ================================ -->
+<!-- Define topics for the What's New -->
+<!-- ================================ -->
+<toc label="What's New">
+	<topic label="Java Editor" href="whatsNew/jdt_whatsnew.html#JavaEditor"/>
+	<topic label="Java Formatter" href="whatsNew/jdt_whatsnew.html#JavaFormatter"/>
+	<topic label="Java Compiler" href="whatsNew/jdt_whatsnew.html#JavaCompiler"/>
+	<topic label="Java Views and Dialogs" href="whatsNew/jdt_whatsnew.html#JavaViews"/>
+	<topic label="Properties File Editor" href="whatsNew/jdt_whatsnew.html#PropertiesEditor"/>
+	<topic label="JUnit" href="whatsNew/jdt_whatsnew.html#JUnit"/>
+</toc>
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/abstract-class-hl.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/abstract-class-hl.png
new file mode 100644
index 0000000..4fad54a
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/abstract-class-hl.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/add-missing-case-statements.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/add-missing-case-statements.png
new file mode 100644
index 0000000..96518ce
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/add-missing-case-statements.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/annotations-in-javadoc.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/annotations-in-javadoc.png
deleted file mode 100644
index 1f492c3..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/annotations-in-javadoc.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/assert-null-analysis.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/assert-null-analysis.png
new file mode 100644
index 0000000..b525523
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/assert-null-analysis.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/background-computation-of-type-hierarchy.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/background-computation-of-type-hierarchy.png
deleted file mode 100644
index 1ea9489..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/background-computation-of-type-hierarchy.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/bp-details.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/bp-details.png
deleted file mode 100644
index b918791..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/bp-details.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/browser-preferences.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/browser-preferences.png
deleted file mode 100644
index 22e787f..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/browser-preferences.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/build-path-error-decorator.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/build-path-error-decorator.png
deleted file mode 100644
index e10346c..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/build-path-error-decorator.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/build-path-problems.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/build-path-problems.png
deleted file mode 100644
index 5fb1a9a..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/build-path-problems.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-formatter-preserve-space-line-comment-example.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-formatter-preserve-space-line-comment-example.png
new file mode 100644
index 0000000..cb92e15
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-formatter-preserve-space-line-comment-example.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-formatter-preserve-space-line-comment.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-formatter-preserve-space-line-comment.png
new file mode 100644
index 0000000..4eb6ccd
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-formatter-preserve-space-line-comment.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-select-inheritDoc.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-select-inheritDoc.png
new file mode 100644
index 0000000..6555c4c
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/code-select-inheritDoc.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/condition-history.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/condition-history.png
new file mode 100644
index 0000000..0b9a3a6
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/condition-history.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/edit-test-method.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/edit-test-method.png
deleted file mode 100644
index 0e91118..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/edit-test-method.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/enter-key-indent-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/enter-key-indent-preference.png
new file mode 100644
index 0000000..dc8005d
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/enter-key-indent-preference.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/escape-backslashes.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/escape-backslashes.png
new file mode 100644
index 0000000..dba8908
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/escape-backslashes.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/exchange-operands.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/exchange-operands.png
new file mode 100644
index 0000000..78880ec
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/exchange-operands.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/export-all-profiles.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/export-all-profiles.png
deleted file mode 100644
index 005802d..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/export-all-profiles.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/extract-method-continue.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/extract-method-continue.png
deleted file mode 100644
index 83927c6..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/extract-method-continue.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/extract-method-multiple-return-values.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/extract-method-multiple-return-values.png
deleted file mode 100644
index 060ed95..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/extract-method-multiple-return-values.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/filter-getters-and-setters.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/filter-getters-and-setters.png
new file mode 100644
index 0000000..5cc5868
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/filter-getters-and-setters.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/find-externalized-strings-constants.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/find-externalized-strings-constants.png
deleted file mode 100644
index e4e6423..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/find-externalized-strings-constants.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/focus-ovr.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/focus-ovr.png
new file mode 100644
index 0000000..d9537e2
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/focus-ovr.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-annotation-arguments-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-annotation-arguments-formatted.png
deleted file mode 100644
index a663b54..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-annotation-arguments-formatted.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-annotation-arguments-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-annotation-arguments-preference.png
deleted file mode 100644
index 405f9a0..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-annotation-arguments-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-method-declaration-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-method-declaration-formatted.png
deleted file mode 100644
index ece3dfc..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-method-declaration-formatted.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-method-declaration-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-method-declaration-preference.png
deleted file mode 100644
index c716a32..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-align-method-declaration-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-condense-multi-lines-comments-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-condense-multi-lines-comments-formatted.png
deleted file mode 100644
index 15a140b..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-condense-multi-lines-comments-formatted.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-condense-multi-lines-comments-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-condense-multi-lines-comments-preference.png
deleted file mode 100644
index 9d673c9..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-condense-multi-lines-comments-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-disabling-enabling-tags-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-disabling-enabling-tags-formatted.png
deleted file mode 100644
index 0ea0d37..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-disabling-enabling-tags-formatted.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-disabling-enabling-tags-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-disabling-enabling-tags-preference.png
deleted file mode 100644
index 39907b1..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-disabling-enabling-tags-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-new-line-after-label-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-new-line-after-label-formatted.png
deleted file mode 100644
index d6185a1..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-new-line-after-label-formatted.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-new-line-after-label-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-new-line-after-label-preference.png
deleted file mode 100644
index be9f89f..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-new-line-after-label-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-newline-annotation-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-newline-annotation-formatted.png
new file mode 100644
index 0000000..b5ec533
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-newline-annotation-formatted.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-newline-annotation-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-newline-annotation-preference.png
new file mode 100644
index 0000000..833a3de
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-newline-annotation-preference.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-prefer-wrapping-outer-expressions-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-prefer-wrapping-outer-expressions-formatted.png
deleted file mode 100644
index e6a1f29..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-prefer-wrapping-outer-expressions-formatted.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-prefer-wrapping-outer-expressions-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-prefer-wrapping-outer-expressions-preference.png
deleted file mode 100644
index 443b403..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-prefer-wrapping-outer-expressions-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-skip-first-column-comments-formatted.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-skip-first-column-comments-formatted.png
deleted file mode 100644
index eb20901..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-skip-first-column-comments-formatted.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-skip-first-column-comments-preference.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-skip-first-column-comments-preference.png
deleted file mode 100644
index 096bcca..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/formatter-skip-first-column-comments-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/instance-counts.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/instance-counts.png
deleted file mode 100644
index e4dc07b..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/instance-counts.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/introduce-new-local-with-cast-type.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/introduce-new-local-with-cast-type.png
new file mode 100644
index 0000000..bf37b1f
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/introduce-new-local-with-cast-type.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/javadoc-untagged-type-params.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/javadoc-untagged-type-params.png
new file mode 100644
index 0000000..50fb265
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/javadoc-untagged-type-params.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/join-variable-declaration.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/join-variable-declaration.png
new file mode 100644
index 0000000..e0f3893
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/join-variable-declaration.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-4-suite-wizard.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-4-suite-wizard.png
new file mode 100644
index 0000000..e06dfc9
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-4-suite-wizard.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-import-url.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-import-url.png
deleted file mode 100644
index 947ea42..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-import-url.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-show-new-launches.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-show-new-launches.png
new file mode 100644
index 0000000..280a200
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/junit-show-new-launches.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/local-variable-unused.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/local-variable-unused.png
new file mode 100644
index 0000000..a645375
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/local-variable-unused.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/method-can-be-static.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/method-can-be-static.png
new file mode 100644
index 0000000..7b574250
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/method-can-be-static.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/move-type-to-new-file-refactoring.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/move-type-to-new-file-refactoring.png
deleted file mode 100644
index 7d071b6..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/move-type-to-new-file-refactoring.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/multifix-problem-hover.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/multifix-problem-hover.png
deleted file mode 100644
index 82eba07..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/multifix-problem-hover.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-declared-type.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-declared-type.png
new file mode 100644
index 0000000..fdb25dc
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-declared-type.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-implementation-command.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-implementation-command.png
deleted file mode 100644
index 1c7acc3..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-implementation-command.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-return-type.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-return-type.png
new file mode 100644
index 0000000..ade7e2e
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-return-type.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-super-implementation.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-super-implementation.png
new file mode 100644
index 0000000..ea1c007
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/open-super-implementation.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/override.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/override.png
deleted file mode 100644
index 172bea2..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/override.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/package-abbreviations-off.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/package-abbreviations-off.png
deleted file mode 100644
index 4e3835b..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/package-abbreviations-off.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/package-abbreviations-on.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/package-abbreviations-on.png
deleted file mode 100644
index 606172c..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/package-abbreviations-on.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/pin-call-hierarchy-view.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/pin-call-hierarchy-view.png
new file mode 100644
index 0000000..ebd2a8a
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/pin-call-hierarchy-view.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-filter.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-filter.png
new file mode 100644
index 0000000..905942d
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-filter.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-appearance.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-appearance.png
deleted file mode 100644
index ac26c94..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-appearance.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-code.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-code.png
deleted file mode 100644
index 7d538ea..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-code.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-compiler.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-compiler.png
deleted file mode 100644
index 0221293..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/preference-transfer-compiler.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/prompt-on-deletion.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/prompt-on-deletion.png
new file mode 100644
index 0000000..2206dfc
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/prompt-on-deletion.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/properties-file-editor-hover.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/properties-file-editor-hover.png
new file mode 100644
index 0000000..74564b5
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/properties-file-editor-hover.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/put-expression-in-parentheses.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/put-expression-in-parentheses.png
new file mode 100644
index 0000000..4435bc2
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/put-expression-in-parentheses.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/put-expressions-in-parentheses.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/put-expressions-in-parentheses.png
new file mode 100644
index 0000000..9d6b630
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/put-expressions-in-parentheses.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/quick-outline-inherited-for-nested.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/quick-outline-inherited-for-nested.png
new file mode 100644
index 0000000..e3987c5
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/quick-outline-inherited-for-nested.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/refresh-element-action.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/refresh-element-action.png
deleted file mode 100644
index f4663e2..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/refresh-element-action.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/remove-from-view-action.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/remove-from-view-action.png
deleted file mode 100644
index 7cb23cc..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/remove-from-view-action.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/search-in-options.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/search-in-options.png
new file mode 100644
index 0000000..c1e3a14
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/search-in-options.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/source-attachments-in-referenced-JARs.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/source-attachments-in-referenced-JARs.png
deleted file mode 100644
index 578a051..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/source-attachments-in-referenced-JARs.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/suppress-optional-errors.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/suppress-optional-errors.png
deleted file mode 100644
index f180a21..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/suppress-optional-errors.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/suppresswarnings-javadoc.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/suppresswarnings-javadoc.png
new file mode 100644
index 0000000..7530eb8
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/suppresswarnings-javadoc.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unavoidable-generic-type-problems-example.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unavoidable-generic-type-problems-example.png
new file mode 100644
index 0000000..787bb5d
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unavoidable-generic-type-problems-example.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unavoidable-generic-type-problems.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unavoidable-generic-type-problems.png
new file mode 100644
index 0000000..ac37973
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unavoidable-generic-type-problems.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unescape-backslashes.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unescape-backslashes.png
new file mode 100644
index 0000000..dec4386
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unescape-backslashes.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unused-object-allocation.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unused-object-allocation.png
deleted file mode 100644
index bb389e9..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/unused-object-allocation.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/value-in-javadoc.png b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/value-in-javadoc.png
deleted file mode 100644
index efd2e7e..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/images/value-in-javadoc.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/jdt_whatsnew.html b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/jdt_whatsnew.html
index c80c9de..088d98b 100644
--- a/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/jdt_whatsnew.html
+++ b/eclipse/plugins/org.eclipse.jdt.doc.user/whatsNew/jdt_whatsnew.html
@@ -1,603 +1,540 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
 <meta http-equiv="Content-Language" content="en-us"/>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
 <style type="text/css">
-td {border-top: solid thin black;}
-td table tbody tr td {border-top: none;} /* no border for nested tables */
-img[alt] {background-color:#ffdddd;}
-tr {vertical-align: top;}
-ul {padding-left: 1.2em;}
+table.news td {border-top: solid thin black;}
+table.news tr {vertical-align: top;}
+table.news tr td.section {font-size: 20px; font-weight: bold;}
+table.news tr td.title {vertical-align: top; width: 30%; font-weight: bold;}
+table.news tr td.content {vertical-align: top; width: 70%;}
 </style>
-<title>What's New in 3.6 (JDT)</title>
+<title>What's New in 3.7 (JDT)</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
 </head>
 
 <body>
-<h2>What's New in 3.6 (JDT)</h2>
+<h2>What's New in 3.7 (JDT)</h2>
 <p>Here are descriptions of some of the more interesting or significant changes made to the Java development tools
-for the 3.6 release of Eclipse. They are grouped into:</p>
+for the 3.7 release of Eclipse. They are grouped into:</p>
 <ul>
 	<li><a href="#JavaEditor">Java Editor</a></li>
 	<li><a href="#JavaFormatter">Java Formatter</a></li>
-	<li><a href="#JavaRefactoring">Java Refactorings</a></li>
 	<li><a href="#JavaCompiler">Java Compiler</a></li>
 	<li><a href="#JavaViews">Java Views and Dialogs</a></li>
+	<li><a href="#PropertiesEditor">Properties File Editor</a></li>
 	<li><a href="#JUnit">JUnit</a></li>
 </ul>
 <p>
-See also the <a href="../../org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html">Eclipse Platform What's New in 3.6</a>
+See also the <a href="../../org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html">Eclipse Platform What's New</a>
 document for changes in the Platform.
 </p>
 <br/>
 <!-- *************************************************** -->
 
-
-<table cellpadding="10" cellspacing="0" width="600" summary="New and noteworthy items">
-  <colgroup>
-  <col width="30%"/>
-  <col width="70%"/>
-  </colgroup>
-
-  <tbody>  
-    <!-- ******************* Java Editor ************************************* -->
-    <tr> 
-      <td colspan="2"><a name="JavaEditor"></a> <div style="font-size: 20px; font-weight: bold;"> 
-          Java Editor </div></td>
-    </tr>
-
-  <tr id="multifix-problem-hover">
-    <td width="30%" valign="top" align="left">
-      <b>Fix multiple problems via problem hover</b>
+<table class="news" border="0" cellpadding="10" cellspacing="0" width="600" summary="New and noteworthy items">
+
+  <tbody>
+  <!-- ******************* Java Editor ************************************* -->
+  <tr>
+    <td id="JavaEditor" class="section" colspan="2">
+    <h2>Java Editor </h2>
+    </td>
+  </tr>
+
+  <tr id="open-from-clipboard">
+    <td class="title">Open Java element from clipboard</td>
+    <td class="content">
+        The new <b>Navigate > Open from Clipboard</b> command tries to open the
+        matching Java element in the editor if the clipboard contains a single line. Otherwise it
+        opens the contents in the Java Stack Trace Console.
+        <br/><br/>Examples:
+            <ul>
+             <li>java.lang.String</li>
+             <li>String</li>
+             <li>String#getBytes</li>
+             <li>String.getBytes</li>
+             <li>java.lang.String.getBytes(String)</li>
+             <li>String.java:123</li>
+             <li>at java.lang.String.matches(String.java:1550)</li>
+             <li>java.lang.String.valueOf(char) line: 1456</li>
+             <li>currentTimeMillis()</li>
+           </ul>
+     <p>Note: If the action is not enabled in a certain perspective, then you can enable the <b>Java Debug</b>
+      action group in
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Customize Perspective dialog"/>
+      <b>Window > Customize Perspective</b></a>
+      <b>> Command Groups Availability</b>.</p>
+    </td>
+  </tr>
+
+  <tr id="hyperlinks">
+    <td class="title">Hyperlinks</td>
+    <td class="content">
+        Three new hyperlinks have been added to the Java editor:
+        <ul>
+            <li><b>Open Super Implementation</b>: The action from the <b>Navigate</b> menu is now also available as a hyperlink.
+            It is enabled for overridden methods and opens the super implementation of the selected method.
+            <p><img src="images/open-super-implementation.png" alt="Open Super Implementation popup on a method"/></p>
+            </li>
+        </ul>
+        <ul>
+            <li><b>Open Declared Type</b>: This link is enabled for local variables and fields. When invoked, it
+            opens the declared type of the variable in an editor:
+            <p><img src="images/open-declared-type.png" alt="Open Declared Type popup on a variable"/></p>
+            </li>
+        </ul>
+        <ul>
+            <li><b>Open Return Type</b>: This link is enabled for methods. When invoked, it opens the return type of the method
+            in an editor:
+            <p><img src="images/open-return-type.png" alt="Open Return Type popup on a method"/></p>
+            </li>
+        </ul>
+
+      <p>By default, the hyperlink appears when you hold down the <b>Ctrl</b> key while hovering over an appropriate element,
+       or when you use the <b>Navigate > Open Hyperlink</b> command.
+       You can configure the modifier for the hyperlinks on the
+       The hyperlink style navigation can be configured on the
+       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.HyperlinkDetectorsPreferencePage)")'>
+       <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the hyperlinking preference page"/>
+       <b>General > Editors > Text Editors > Hyperlinking</b></a>
+       preference page.</p>
+    </td>
+  </tr>
+
+  <tr id="quick-assist-introduce-new-local-with-cast-type">
+    <td class="title">"Introduce new local with cast type" quick assist</td>
+    <td class="content">
+      The <b>Introduce new local with cast type</b> quick assist (<b>Ctrl+1</b>) is now not only available on the <code>instanceof</code>
+      keyword, but also in the body of the conditional statement (before the first body statement).
+      <p><img src="images/introduce-new-local-with-cast-type.png" alt="Introduce new local with cast type"/></p>
     </td>
-    <td width="70%" valign="top">
-      The problem hover now shows quick fix links that fix multiple instances of a problem in a file:
-      <p><img src="images/multifix-problem-hover.png" alt="Support for multi-fix quick fixes in problem hover"/></p>       
-      The new links behave the same as pressing <b>Ctrl+Enter</b> in the Quick Fix proposal list (<b>Ctrl+1</b>). 
+  </tr>
+
+  <tr id="quick-assist-join-variable-declaration">
+    <td class="title">"Join variable declaration" quick assist for variables initialized to null</td>
+    <td class="content">
+      The <b>Join variable declaration</b> quick assist is now also available for variables initialized to <code>null</code>.
+      <p><img src="images/join-variable-declaration.png" alt="Join variable declaration"/></p>
     </td>
   </tr>
 
-  <tr id="annotations-in-javadoc">
-    <td width="30%" valign="top" align="left">
-        <b>Javadoc hovers include annotations</b>
-    </td>
-    <td width="70%" valign="top">
-        Javadoc hovers now include annotations:
-        <p><img src="images/annotations-in-javadoc.png" alt="Javadoc hover"/></p>
+  <tr id="quick-assist-exchange-operands">
+    <td class="title">"Exchange Operands" quick assist for comparison operators</td>
+    <td class="content">
+      The <b>Exchange left and right operands for infix expression</b> quick assist is now
+      also available for the <code>!=</code>, <code><</code>, <code><=</code>, <code>></code>,
+      and <code>>=</code> operators.
+      <p><img src="images/exchange-operands.png" alt="Exchange Operands"/></p>
     </td>
   </tr>
 
-  <tr id="value-in-javadoc">
-    <td width="30%" valign="top" align="left">
-        <b>Javadoc hovers render {@value}</b>
+  <tr id="jdt-put-expression-in-parentheses">
+    <td class="title">New 'Put expression in parentheses' quick assist</td>
+    <td class="content">
+      The Java editor now offers a new quick assist <b>Put expression in parentheses</b>.
+      <p><img src="images/put-expression-in-parentheses.png" alt="Put expression in parentheses"/></p>
+      Also the <b>Add paranoiac parentheses</b> quick assist has been renamed to <b>Put expressions in parentheses</b>.
+      <p><img src="images/put-expressions-in-parentheses.png" alt="Put expressions in parentheses"/></p>
     </td>
-    <td width="70%" valign="top">
-        Javadoc hovers now render {@value} inlined:
-        <p><img src="images/value-in-javadoc.png" alt="Javadoc hover"/></p>
+  </tr>
+
+  <tr id="quick-assist-add-missing-case-statements">
+    <td class="title">'Add missing case statements' quick assist</td>
+    <td class="content">
+      The <b>Add missing case statements</b> quick assist is now available in the body of the switch statement:
+      <p><img src="images/add-missing-case-statements.png" alt="Add missing case statements"/></p>
     </td>
   </tr>
-  
-   <tr id="open-implementation-command">
-    <td width="30%" valign="top" align="left">
-        <b>Command to open an implementation</b>
+
+  <tr id="abstract-class-highlighting">
+    <td class="title">Semantic coloring for abstract classes</td>
+    <td class="content">
+      Abstract classes can now be highlighted separately in the source code:
+      <p><img src="images/abstract-class-hl.png" alt="Semantic coloring for abstract classes"/></p>
+      <p>The rendering can be configured on the <b>Java > Editor > Syntax Coloring</b> preference page.</p>
     </td>
-    <td width="70%" valign="top">
-    	The <b>Open Implementation</b> command is available from the <b>Navigate</b> menu. A key binding can be
-    	assigned on the
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens keys preference page"/>
-		<b>General > Keys</b></a> preference page.
-        <p><img src="images/open-implementation-command.png" alt="Open Implementation action in Navigate menu" /></p>
-    	<p>
-    	This action is enabled on text selections in the Java editor for overridable methods and directly opens the implementation in case there's only one, 
-    	or shows all the concrete implementations for that method in the hierarchy of its declaring type, using the Quick Type Hierarchy.</p> 
+  </tr>
+
+  <tr id="quick-outline-inherited-from-nested">
+    <td class="title">Quick Outline shows inherited members for nested type</td>
+    <td class="content">
+      The <b>Quick Outline</b> shows inherited members of top-level types when <b>Ctrl+O</b> is pressed twice.
+      Now, it also shows inherited members of the type that contains the current editor selection:
+      <p><img src="images/quick-outline-inherited-for-nested.png" alt="Quick Outline showing inherited members for a nested type"/></p>
+      <p>The focus types that can show inherited members are marked with a triangle ( <img src="images/focus-ovr.png" alt="Focus adornment"/> ).</p>
     </td>
-  </tr> 
+  </tr>
 
-  <tr id="getter-setter-content-assist">
-    <td width="30%" valign="top" align="left"><b>Improved content assist for getter and setter proposals</b></td>
-    <td width="70%" valign="top">Content assist now proposes all possible getter and setter proposals
-    in case of field name clashes and no longer proposes setter proposals for final fields.
-	</td>
+  <tr id="ctrl-drag-add-to-call-hierarchy">
+    <td class="title">Ctrl+drag to add to Call Hierarchy</td>
+    <td class="content">
+      <b>Ctrl+drag</b> now adds the selected methods to the existing elements in the <b>Call Hierarchy</b> view. Plain drag and drop continues
+      to replace the view input with the selected methods.
+     </td>
   </tr>
 
-  <tr id="new-preference-transfer-code">
-    <td width="30%" valign="top" align="left">
-        <b>New 'Java Code Style Preferences' category when importing or exporting preferences</b>
-    </td>
-    <td width="70%" valign="top">
-        When importing or exporting preferences, a new category is available that
-        allows you to control whether Java code style preferences are imported or exported:
-       <p><img src="images/preference-transfer-code.png" alt="Java code style preference transfers"/></p> 
+  <tr id="jdt-inheritDoc-clickable">
+    <td class="title">Navigate to {@inheritDoc} target</td>
+    <td class="content">
+      To quickly navigate to the target of an {@inheritDoc} tag in a Javadoc comment,
+      you can now <b>Ctrl+click</b> the tag or use <b>Navigate > Open Declaration</b>
+      to jump to the method that defines the inherited doc.
+      <p><img src="images/code-select-inheritDoc.png" alt="@inheritDoc tag on X2.foo() that overrides X1.foo()"/></p>
+      <p>In this example, the target of the <code>@inheritDoc</code> inline tag on X2.foo() is X1.foo().</p>
     </td>
   </tr>
 
-  <!-- ******************* Java Formatter ************************************* -->
-  <tr> 
-    <td colspan="2"><a name="JavaFormatter"></a> <div style="font-size: 20px; font-weight: bold;"> 
-      Java Formatter </div></td>
+  <tr id="jdt-break-continue-hyperlink">
+    <td class="title">Navigate to 'break' and 'continue' target</td>
+    <td class="content">
+      To quickly navigate to the target of a <code>break</code> or <code>continue</code> statement,
+      you can now <b>Ctrl+click</b> or use <b>Open Declaration</b> (<b>F3</b>) on <code>break</code> or <code>continue</code> keywords or their labels.
+      <p>Navigation on...</p>
+      <ul>
+	      <li><code>break</code>: jumps to the end of the target statement</li>
+	      <li><code>continue</code>: jumps to the beginning of the target statement</li>
+	      <li>a label: jumps to the label declaration</li>
+      </ul>
+    </td>
   </tr>
 
-  <tr id="formatter-disabling-enabling-tags-preference"> 
-    <td width="30%" valign="top" align="left">
-      <b>Control the formatting in code sections</b>
+  <tr id="format-element-action">
+    <td class="title">Format Java elements via Outline view</td>
+    <td class="content">
+        You can now format one or more selected elements in the Java Outline view by
+        invoking <b>Source > Format Element</b> from the main menu.
     </td>
-    <td width="70%" valign="top">
-      This preference allows you to define one tag to disable and one tag
-      to enable the formatter (see the <b>Off/On Tags</b> tab in your formatter
-      profile):
-      <p><img src="images/formatter-disabling-enabling-tags-preference.png"
-          alt="Java formatter preference page. Set the disabling and enabling tags on the 'Off/On Tags' tab of the formatter profile."/></p>
-      <p>Here is an example of formatted code which is using code sections
-      with the tags defined as shown above:</p>
-      <p><img src="images/formatter-disabling-enabling-tags-formatted.png"
-          alt="Java formatter example. The simple snippet with the formatted annotation and its element-value pairs aligned."/></p>
+  </tr>
+
+  <tr id="enter-key-indent-preference">
+    <td class="title">Disable smart indentation on 'Enter'</td>
+    <td class="content">
+        A new preference has been added to the <b>Java > Editor > Typing</b>  preference page that allows to disable smart indentation after the <b>Enter</b> key has been pressed:
+       <p><img src="images/enter-key-indent-preference.png" alt="Enter Key Indent Preference"/></p>
     </td>
   </tr>
 
-  <tr id="formatter-prefer-wrapping-outer-expressions-preference"> 
-    <td width="30%" valign="top" align="left">
-      <b>New strategy to wrap nested method calls</b>
+  <!-- ******************* Java Formatter ************************************* -->
+  <tr>
+    <td id="JavaFormatter" class="section" colspan="2">
+    <h2>Java Formatter</h2>
     </td>
-    <td width="70%" valign="top">
-      The Java formatter now tries to wrap the outermost method calls
-      first to have a better output when wrapping nested method calls.
+  </tr>
+
+  <tr id="new-code-formatter-options">
+    <td class="title">New line after annotations</td>
+    <td class="content">
+      The <b>Insert new line after annotations on members</b> option on the '<b>New Lines</b>' tab of the formatter preferences has been split up to support packages, types, fields and methods:
       <p>
-      Here is an example of a formatted code where the formatter has
-      wrapped the line earlier, e.g. between the arguments of the outermost
-      message call. Doing this, each nested method call is kept on a single
-      line:</p>
-      <p><img src="images/formatter-prefer-wrapping-outer-expressions-formatted.png"
-          alt="Java formatter example. The simple snippet with the formatted nested method calls."/></p>
+      <img src="images/formatter-newline-annotation-preference.png"
+      	alt="Java formatter preference page. Check the preference on the 'New Lines' tab of the formatter profile."
+      	title="The 'New Lines' tab of the formatter profile allows you to specify whether a new line should be inserted after the annotation or not"/>
+      </p>
+      <p>For example, with this preference activated as shown above, the formatted code looks like this:</p>
+      <p>
+      <img src="images/formatter-newline-annotation-formatted.png"
+      	alt="Java formatter example. The simple snippet with the annotations formatted."/>
+      </p>
       <p>
-      A new preference allows you to disable this new strategy, e.g. if you want to format your code as before:</p>
-      <p><img src="images/formatter-prefer-wrapping-outer-expressions-preference.png"
-          alt="Java formatter preference page. Activate the new strategy when wrapping nested method calls."/></p>
-          
-      <p><b>Note:</b> Currently the new strategy only applies to nested method
-      calls, but that might be extended to other nested expressions in future
-      versions.</p>
+      Formatter profiles can be configured on the
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens formatter preference page"/>
+      <b>Java > Code Style > Formatter</b></a> preference page.
+      </p>
     </td>
   </tr>
 
-  <tr id="formatter-new-line-after-label-preference"> 
-    <td width="30%" valign="top" align="left">
-      <b>Insert a new line after a label</b>
+  <tr id="code-formatter-preserve-space-line-comment">
+    <td class="title">Preserve whitespace before line comment</td>
+    <td class="content">
+      A code formatter option has been added to preserve white space between code and line comments:
+      <p><img src="images/code-formatter-preserve-space-line-comment-example.png" alt="Code snippet with tabs in front of a line comment"/></p>
+
+      <p>This preference can be enabled on the
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens formatter preference page"/>
+      <b>Java > Code Style > Formatter</b></a> preference page
+      on the <b>Comments</b> tab:</p>
+      <p><img src="images/code-formatter-preserve-space-line-comment.png" alt="Formatter preference page"/></p>
     </td>
+  </tr>
 
-    <td width="70%" valign="top">
-      <img src="images/formatter-new-line-after-label-preference.png"
-          alt="Java formatter preference page. Check the preference on the 'New Lines' tab of the formatter profile."/>
-      <p>For example, with this preference activated as shown above, the loop
-      will be placed on a new line after its label:</p>
-      <p><img src="images/formatter-new-line-after-label-formatted.png"
-          alt="Java formatter example. The simple snippet with a label formatted."/>
-      </p>
+  <!-- ******************* Java Compiler ************************************* -->
+  <tr>
+    <td id="JavaCompiler" class="section" colspan="2">
+    <h2>Java Compiler</h2>
     </td>
   </tr>
 
-  <tr id="formatter-align-annotation-arguments-preference"> 
-    <td width="30%" valign="top" align="left">
-      <b>Align element-value pairs in annotations</b>
+  <tr id="honor-assert-in-null-analysis">
+    <td class="title">New option to include 'assert' in null analysis</td>
+    <td class="content">
+      JDT now gives the flexibility to enable or disable null-related errors/warnings on variables that got
+      marked as potentially or definitely null inside an assert statement. If you have runtime asserts enabled,
+      you can also enable the new warning to see the null-related problems being reported because of null-related checks inside
+      the assert statement. If the option is disabled, null checks in asserts are not considered.
+
+      <p><img src="images/assert-null-analysis.png" alt="Example of asserts included in null analysis"/></p>
+      <p>The new option <b>Include 'assert' in null analysis</b> is disabled by default and can be
+      enabled on the
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'> 
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Errors/Warnings preference page"/>
+      <b>Java > Compiler > Errors/Warnings</b></a>
+      preference page.</p>
+    </td>
+  </tr>
+
+  <tr id="report-missing-param-tags">
+    <td class="title">Missing Javadoc tags for method type parameters no longer reported by default</td>
+    <td class="content">
+      JDT now provides an option to enable or disable the missing Javadoc tag error or warning for a method type parameter without a
+	  corresponding <code>@param</code> tag.
+
+	  <p><img src="images/javadoc-untagged-type-params.png" alt="Example of Javadoc without @param tags for method type parameters"/></p>
+	  <p>The new <b>Ignore method type parameters</b> option is enabled by default and can be disabled on the
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'> 
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Errors/Warnings preference page"/>
+      <b>Java > Compiler > Errors/Warnings</b></a>
+	  preference page.</p>
+    </td>
+  </tr>
+
+  <tr id="improved-unused-variable-detection">
+    <td class="title">Improved detection of unused local variables, parameters and fields</td>
+    <td class="content">
+      JDT now reports local variables, parameters, and fields of a primitive type as unused in the following scenarios:
+
+      <ul>
+        <li>compound assignment</li>
+        <li>prefix/postfix increment/decrement expression</li>
+      </ul>
+
+      <p><img src="images/local-variable-unused.png" alt="Example of unused local variable"/></p>
+      <p>In case the above expressions involve an unboxing operation, the variable is not reported as unused.</p>
+      <p>We also changed the wording from "X has never been read" to "The value of X is not used."</p></td>
+  </tr>
+
+  <tr id="new-preference-transfer">
+    <td class="title">Filter preferences on Java > Compiler > Errors/Warnings page</td>
+    <td class="content">
+        You can now filter preferences on the
+        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'> 
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Errors/Warnings preference page"/>
+        <b>Java > Compiler > Errors/Warnings</b></a>
+        page by preference
+        label text or by preference value. A word in the filter string preceded by '~' is used to filter on
+		preference values. Examples:
+	 	<ul>
+	 		<li>param</li>
+	 		<li>~off</li>
+	 		<li>~ignore</li>
+	 		<li>param ~enabled</li>
+	 		<li>~ignore param</li>
+	 	</ul>
+       <p><img src="images/preference-filter.png" alt="Filter preferences"/></p>
     </td>
-    <td width="70%" valign="top">
-      <img src="images/formatter-align-annotation-arguments-preference.png"
-          alt="Java formatter preference page. Check the preference on the 'Line Wrapping' tab of the formatter profile."/>
-      <p>For example, the two annotation arguments are each put on a new line
-      if the chosen alignment policy for this preference is <b>Wrap all elements,
-      every element on a new line</b> and if the <b>Force split</b> check-box
-      is selected:</p>
-      <p><img src="images/formatter-align-annotation-arguments-formatted.png"
-          alt="Java formatter example. The simple snippet with the formatted annotation and its element-value pairs aligned."/></p>
+  </tr>
+
+  <tr id="unavoidable-generic-type-problems">
+    <td class="title">Unavoidable generic type problems</td>
+    <td class="content">
+      A new compiler option has been added that suppresses unavoidable generic type problems.
+      <p><img src="images/unavoidable-generic-type-problems.png" alt="compiler option on the Errors/Warnings page"/></p>
+
+      <p>Those problems only show up because a type refers to an old API that uses raw types.</p>
+      <p><img src="images/unavoidable-generic-type-problems-example.png" alt="example code"/></p>
+
+      <p>When the old API is eventually generified, then these problems either go away,
+      or you will see a compile error because the type arguments you used are not correct.</p>
+
+      <p>This option is disabled by default but can be enabled on the
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'> 
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Errors/Warnings preference page"/>
+      <b>Java > Compiler > Errors/Warnings</b></a>
+      preference page.</p>
     </td>
   </tr>
 
-  <tr id="formatter-wrap-method-declaration-preference"> 
-    <td width="30%" valign="top" align="left">
-      <b>Wrap method declaration</b>
+  <tr id="method-can-be-static">
+    <td class="title">Compiler detects methods that can be static</td>
+    <td class="content">
+      Two new compiler options have been added that mark methods which can be made static because they only refer to static members.
+      <p><img src="images/method-can-be-static.png" alt="'Method can be static' compiler options on the Errors/Warnings page"/></p>
+      <p>
+      The first option marks private and final methods than can always be made static.<br/>
+      The second option also marks other methods. Note that methods can be overridden in a subclass, so if you
+      make a "potentially static" method static, this may break existing clients.
+      </p>
+
+      <p>These options are disabled by default.</p>
     </td>
-    <td width="70%" valign="top">
-      <img src="images/formatter-align-method-declaration-preference.png"
-          alt="Java formatter preference page. Check the preference on the 'Line Wrapping' tab of the formatter profile."/>
-      <p>For example, the modifier, the return type and the name of the method
-      can each be placed on a new line if the chosen alignment policy for
-      this preference is <b>Wrap all elements, every element on a new line</b>
-      and if the <b>Force split</b> check-box is selected:</p>
-      <p><img src="images/formatter-align-method-declaration-formatted.png"
-         alt="Java formatter example. The simple snippet with the formatted method declaration aligned."/></p>
+  </tr>
+
+  <tr id="jre_disk_changes">
+    <td class="title">On-disk JRE change detection</td>
+    <td class="content">
+      In the past, if a system update or another event changed a JRE used in Eclipse,
+      those changes would not be reflected in Eclipse: In some cases, this caused the JRE to stop
+      functioning. Now, these changes are accounted for, and any JRE that changed on-disk (external to Eclipse) will be updated accordingly when Eclipse restarts.
     </td>
   </tr>
 
-  <tr id="formatter-condense-multi-lines-comments-preference"> 
-    <td width="30%" valign="top" align="left">
-      <b>Put start and end of comments on separate lines</b>
+  <tr id="jdt-suppresswarnings-javadoc">
+    <td class="title">New "javadoc" token for <code>@SuppressWarnings</code> annotation</td>
+    <td class="content">
+        The <code>@SuppressWarnings</code> annotation can now also be used to suppress compiler warnings/errors related
+    	to Javadoc issues:
+        <p><img src="images/suppresswarnings-javadoc.png" alt="Suppress javadoc warnings using @SuppressWarnings("javadoc") annotation"/></p>
     </td>
+  </tr>
 
-    <td width="70%" valign="top">
-      This preference lets you to decide whether the beginning and the
-      ending characters of a multi-line comment will be placed on separate
-      lines or not:
-      <p><img src="images/formatter-condense-multi-lines-comments-preference.png"
-          alt="Java formatter preference page. Check the preferences on the 'Comments' tab of the formatter profile."/></p>
-      <p>For example with the above preferences disabled,
-      a block comment can be formatted to take less lines in the code:</p>
-      <p><img src="images/formatter-condense-multi-lines-comments-formatted.png"
-          alt="Java formatter example. The simple snippet with the block and javadoc comments formatted with less lines than with the default profile."/></p>
+  <!-- ******************* Java Views and Dialogs ************************************* -->
+  <tr>
+    <td id="JavaViews" class="section" colspan="2">
+    <h2>Java Views and Dialogs</h2>
     </td>
   </tr>
 
-  <tr id="formatter-skip-first-column-comments-preference"> 
-    <td width="30%" valign="top" align="left">
-      <b>Skip formatting of line comments starting at first column</b>
+  <tr id="open-type-hierarchy-on-multiple-java-elements">
+    <td class="title">Open Type Hierarchy on multiple type containers</td>
+    <td class="content">
+        The <b>Open Type Hierarchy</b> action now also works on multiple type containers:
+        You can select multiple packages, source folders, or projects, and then open a hierarchy that contains all types
+        in the selected containers.
     </td>
+  </tr>
 
-    <td width="70%" valign="top">
-      This preference lets you decide whether line comments which start
-      at the first column of the file will be formatted or not:
-      <p><img src="images/formatter-skip-first-column-comments-preference.png"
-          alt="Java formatter preference page. Check the preference on the 'Comments' tab of the formatter profile."/></p>
-      <p>For example, with this preference not activated as shown above,
-      the first comment is untouched after the formatting:</p>
-      <p><img src="images/formatter-skip-first-column-comments-formatted.png"
-          alt="Java formatter example. A simple snippet with line comment starting at first column."/></p>
+  <tr id="pin-call-hierarchy-view">
+    <td class="title">Pin the Call Hierarchy view	</td>
+    <td class="content">
+        The <b>Call Hierarchy</b> view now allows to pin the current view,
+        which allows you to open multiple Call Hierarchy views at the same time:
+      <p><img src="images/pin-call-hierarchy-view.png" alt="Pin the Call Hierarchy View action"/></p>
     </td>
   </tr>
 
-  <!-- *************** Java Refactoring ************************************ -->
-    <tr> 
-      <td colspan="2"><a name="JavaRefactoring"></a> <div style="font-size: 20px; font-weight: bold;"> 
-          Java Refactorings</div></td>
-    </tr>
+  <tr id="search-in-options">
+    <td class="title">Configure 'Search In...' in Call Hierarchy</td>
+    <td class="content">
+        A new <b>Search In...</b> action has been added to the <b>Call Hierarchy</b> view menu. The action shows the <b>Search In</b> dialog
+        with the same options that are already available in the <b>Search</b> dialog.
+       <p><img src="images/search-in-options.png" alt="Search In options"/></p>
+    </td>
+  </tr>
 
- <tr id="extract-method-continue">
-    <td width="30%" valign="top" align="left"><b>Extract Method improvements</b></td>
-    <td width="70%" valign="top">
-      The <b>Extract Method</b> refactoring now handles selections that contain <code>continue</code> statements.
-      To preserve the semantics of the existing code, the selection needs to include the last statement of the loop.
-      In the extracted method, <code>continue</code> statements are changed to <code>return</code>:
-      <p>
+  <!-- *********************** Debug ******************************** -->
 
-        <img src="images/extract-method-continue.png" alt="Extract method refactoring with continue" />
-      </p>
-      For a selection that would need multiple return values in the extracted method,
-      Eclipse now lists the conflicting variables in the error message:
-      <p>
-        <img src="images/extract-method-multiple-return-values.png" alt="Extract method refactoring with an ambiguous return value error" />
-      </p>
+  <tr id="conditional_bp_history">
+    <td class="title">History for breakpoint conditions</td>
+    <td class="content">
+      There is now a history for recently used breakpoint conditions:
+      <p><img src="images/condition-history.png" alt="Breakpoint condition history"/></p>
     </td>
   </tr>
 
-  <tr id="move-type-to-new-file-refactoring">
-    <td width="30%" valign="top" align="left">
-        <b>Move type to new file refactoring</b>
+  <tr id="prompt_conditional_bp">
+    <td class="title">Prompt before deleting conditional breakpoints</td>
+    <td class="content">
+      In the Java editor, if you delete a breakpoint that has a condition set on it, you will now be prompted before the breakpoint gets deleted:
+      <p><img src="images/prompt-on-deletion.png" alt="Prompt when deleting a breakpoint"/></p>
+      <p>You can specify that you would not like to be notified again when trying to remove a conditional breakpoint. This can later be changed again
+      via <b>Prompt for confirmation when deleting a conditional breakpoint from editor</b> on the
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaDebugPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Debug preference page"/>
+      <b>Java > Debug</b></a>
+      preference page.</p>
     </td>
-    <td width="70%" valign="top">
-        The <b>Convert Member Type to Top Level</b> refactoring has been renamed to <b>Move Type to New File</b> and now allows any
-        secondary type in a file to be moved into its own file. The action continues to work for member types.
-        <p><img src="images/move-type-to-new-file-refactoring.png" alt="Move Type to New File refactoring"/></p>
+  </tr>
+
+  <tr id="filter_getters_and_setters">
+    <td class="title">Step filtering for bean-style getters and setters</td>
+    <td class="content">
+      When single stepping, you can now automatically step over simple getters and setters during <b>Step Into</b>:
+      <p><img src="images/filter-getters-and-setters.png" alt="Options for step filtering on simple getters and setters"/></p>
+      <p>Consider single stepping into statements like:</p><pre>computeEffect(meters.getCurrent(), meters.getVoltage());</pre>
+      <p>Normally, this means first stepping into <tt>getCurrent</tt>, then into <tt>getVoltage</tt>, and finally into <tt>computeEffect</tt>.
+      You can now skip the first two steps (provided they are simple bean-style getters), and jump directly into the
+      <tt>computeEffect</tt> method, by selecting the <b>Filter simple getters</b> check box on the
+      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.debug.ui.JavaStepFilterPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Step Filtering preference page"/>
+      <b>Java > Debug > Step Filtering</b></a>
+      preference page.</p>
+      <p>Similarly, selecting <b>Filter simple setters</b> avoids stopping inside simple bean-style setters when using <b>Step Into</b>.</p>
     </td>
   </tr>
 
-    <!-- ******************* Java Compiler ************************************* -->
-    <tr> 
-      <td colspan="2"><a name="JavaCompiler"></a> <div style="font-size: 20px; font-weight: bold;"> 
-          Java Compiler </div></td>
-    </tr>
-
-  <tr id="override-annotation-interfaces">
-    <td width="30%" valign="top" align="left"><b>Report missing <code>@Override</code> for method implementations in 1.6 mode </b></td>
-    <td width="70%" valign="top">The compiler now reports about missing <code>@Override</code> annotation in the case where a method implements
-	a method from an interface:
-	<p><img src="images/override.png" alt="Missing @Override annotation"/></p>
-	<p>
-	This new behavior can be controlled via
-	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'> 
-	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Errors/Warnings preference page"/>
-	<b>Java > Compiler > Errors/Warnings</b></a>
-	in the <b>Annotations</b> section and configured for Clean Up and Save Actions.
-	</p>
-	<p><strong>Note:</strong> This is reported only in 1.6 mode as <code>@Override</code> annotations are not expected on a method implementation in 1.5.</p>  
-	</td>
-  </tr>
-
-  <tr id="rawtypes-token">
-    <td width="30%" valign="top" align="left"><b>New "rawtypes" token for <code>@SuppressWarnings</code> annotation</b></td>
-    <td width="70%" valign="top">The compiler now makes the distinction between warnings reported for raw type usage versus warnings reported for unchecked 
-	generic operations.
-	<p>In case it is not possible to update the code with the new token, the <code>suppressRawWhenUnchecked=true</code> system property can be set when starting Eclipse.</p>
-	</td>
-  </tr>
-
-  <tr id="suppress-optional-errors">
-    <td width="30%" valign="top" align="left"><b><code>@SuppressWarnings</code> for optional errors</b></td>
-    <td width="70%" valign="top">The <code>@SuppressWarnings</code> annotation can now also suppress optional compile errors:
-        <p><img src="images/suppress-optional-errors.png" alt="A suppressed and an unsuppressed optional error"/></p>
-        <p>In this example, <b>Local variable is never read</b> has been set to Error.</p>
-        <p>This behavior can be enabled on the
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'> 
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Errors/Warnings preference page"/>
-		<b>Java > Compiler > Errors/Warnings</b></a>
-        preference page
-        in the <b>Annotations</b> section with the check box <b>Suppress optional errors with '@SuppressWarnings'</b>.</p>
-    </td>
-  </tr>
-
-  <tr id="unused-object-allocation-detection">
-    <td width="30%" valign="top" align="left">
-        <b>Compiler detects unused object allocation</b>
-    </td>
-    <td width="70%" valign="top">
-        The Java compiler can now detect unused object allocations:
-        <p><img src="images/unused-object-allocation.png" alt="if (name == null) new IllegalArgumentException();"/></p> 
-        This detection is disabled by default and can be enabled on the
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'> 
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Errors/Warnings preference page"/>
-		<b>Java > Compiler > Errors/Warnings</b></a>
-        preference page
-        at the end of the <b>Potential programming problems</b> section.
-    </td>
-  </tr>
-  
-  <tr id="compiler-preference-transfer-compiler">
-    <td width="30%" valign="top" align="left">
-        <b>Import and export compiler preferences</b>
-    </td>
-    <td width="70%" valign="top">
-        The new 'Java Compiler Preferences' category allows to just import or export the compiler preferences:
-       <p><img src="images/preference-transfer-compiler.png" alt="New Java Compiler Preference transfer"/></p> 
-    </td>
+  <!-- ******************* Properties File Editor ************************************* -->
+  <tr>
+    <td id="PropertiesEditor" class="section" colspan="2">
+    <h2>Properties File Editor</h2>
+    </td>
   </tr>
-
-   <!-- ******************* Java Views and Dialogs ************************************* -->
-     
-     <tr> 
-      <td colspan="2"><a name="JavaViews"></a> <div style="font-size: 20px; font-weight: bold;"> 
-          Java Views and Dialogs</div></td>
-    </tr>
-
-   <tr id="new-build-path-error-decorator">
-    <td width="30%" valign="top" align="left">
-        <b>New build path error decorator</b>
-    </td>
-    <td width="70%" valign="top">
-        Build path problems are sometimes easy to miss among other problems in a project.
-        The <b>Package Explorer</b> and <b>Project Explorer</b> views now show a new 
-        decorator on Java projects and working sets that contain build path errors:
-       <p><img src="images/build-path-error-decorator.png" alt="Build path error decorator"/></p> 
-       
-        <p>The concrete errors can be seen in the <b>Problems</b> view, and if you open the view menu and select
-        <b>Group By > Java Problem Type</b>, they all show up in the Build Path category:</p>
-       <p><img src="images/build-path-problems.png" alt="Build path error decorator"/></p> 
-    </td>
-  </tr>
-
-   <tr id="package-name-abbreviations">
-    <td width="30%" valign="top" align="left">
-        <b>Package name abbreviations</b>
-    </td>
-    <td width="70%" valign="top">
-        Package names in Java views can now be abbreviated with custom rules. For example,
-        the following rules produce the rendering shown below:
-        <pre>org.eclipse.ui={UI}
-org.eclipse.ui.texteditor={T}
-org.eclipse.ui.internal.texteditor=[iT]</pre>
-        <table cellpadding="0" cellspacing="0" summary="Screenshots">
-        <tr>
-	        <td>Without abbreviations:</td>
-	        <td>With abbreviations:</td>
-        </tr>
-        <tr>
-	        <td style="padding-top:2px; padding-right:7px;"><img src="images/package-abbreviations-off.png" alt="Package Explorer with abbreviations disabled"/></td>
-	        <td style="padding-top:2px;"><img src="images/package-abbreviations-on.png" alt="Package Explorer with abbreviations enabled"/></td>
-        </tr>
-        </table>
-       
-        <p>The abbreviation rules can be configured on the
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page"/>
-		<b>Java > Appearance</b></a>
-		preference page.</p>
-    </td>
-  </tr>
-
-  <tr id="remove-from-view-action">
-    <td width="30%" valign="top" align="left">
-        <b>Remove nodes from Call Hierarchy</b>
-    </td>
-    <td width="70%" valign="top">
-        The <b>Call Hierarchy</b> now allows to remove a single or multiple nodes from the view via context menu:
-       <p><img src="images/remove-from-view-action.png" alt="Remove from View action in Call Hierarchy"/></p>        
-    </td>
-  </tr>
-  
-  <tr id="refresh-element-action">
-    <td width="30%" valign="top" align="left">
-        <b>Improved refresh in the Call Hierarchy</b>
-    </td>
-    <td width="70%" valign="top">
-        The Call Hierarchy now allows to refresh single or multiple elements at once via the <b>Refresh (F5)</b> action from the context menu:
-       <p>
-         <img src="images/refresh-element-action.png" alt="Refresh element action in Call Hierarchy"/></p> 
-       <p>
-       This will refresh the selected elements and their direct children. The action in the toolbar has been renamed to <b>Refresh View</b> and still refreshes the entire view.
-    	</p>
-    </td>
-  </tr>
-  
-  <tr id="background-computation-of-type-hierarchy">
-    <td width="30%" valign="top" align="left">
-      <b>Type Hierarchy computed in background</b>
-    </td>
-    <td width="70%" valign="top">
-      The <b>Type Hierarchy</b> is now computed in an operation that can be sent to the background
-      (or always runs in the background, depending on your settings):
-      <p><img src="images/background-computation-of-type-hierarchy.png" alt="Background computation of Type Hierarchy"/></p> 
-      <p>Your workbench is no longer blocked while a big hierarchy is computed.</p>       
-    </td>
-  </tr>
-
-  <tr id="export-all-formatter">
-    <td width="30%" valign="top" align="left">
-        <b>Export all profiles</b>
-    </td>
-    <td width="70%" valign="top">
-        The <b>Formatter</b> preference page and the <b>Clean Up</b> preference page now have an <b>Export All... </b> button that allows exporting all user-defined profiles 
-		into an XML file. The exported profiles can be imported from the XML file at once using the <b>Import...</b> button. 
-       <p><img src="images/export-all-profiles.png" alt="Export All... from Formatter preference page"/></p>        
-    </td>
-  </tr>
-
-  <tr id="open-attached-javadoc">
-    <td width="30%" valign="top" align="left"><b>Opening attached Javadoc now uses preferred web browser</b></td>
-    <td width="70%" valign="top"><b>Open External Javadoc</b> has been renamed to <b>Open Attached Javadoc</b> and now uses the configured web browser: 
-	<p><img src="images/browser-preferences.png" alt="Web Browser preferences"/></p> 
-	</td>
-  </tr>
-  
-	<tr id="instancecounts">
-	<td align="left" valign="top" width="30%"><b>Instance counts
-	</b></td>
-	<td valign="top" width="70%">The <b>Variables</b> view provides a new column
-	displaying the number of instances corresponding to the concrete type of
-	each variable. To display the column, 
-	select <b>Layout > Select Columns...</b> from the view's menu, and then
-	select <b>Instance Count</b> from the <b>Select Columns</b> dialog.
-	Note that instance counts are only available debugging on JavaSE-1.6 (or newer) and
-	are not applicable to primitive types.
-	<p><img alt="Instance Counts" title="Instance Counts" src="images/instance-counts.png"/><br/><br/></p>
-	<p>You can also display the instance count of a selected type in an editor or editor outline
-	and selecting <b>Instance Count...</b> from the context menu. The result is displayed
-	in a dialog. 
-	</p>
-	</td>
-	</tr>
-
-	<tr id="breakpoint-details">
-		<td align="left" valign="top" width="30%"><b>Java breakpoint detail</b></td>
-		<td valign="top" width="70%">The Java breakpoint detail panes now
-		display all properties in a single pane. Detail pane orientation can be configured
-		via the <b>Layout</b> view menu.
-		<p><img alt="Breakpoint Detail Panes" src="images/bp-details.png"/><br/><br/></p>
-		<p>For example, a Java line breakpoint allows its condition to be edited in place with content
-		assist. Use the <b>File > Save (Ctrl+S)</b> action to save a condition that has been edited.
-		Radio button properties are saved immediately.
-		</p>
-		</td>
-	</tr>
-
-  <tr id="source-attachments-in-referenced-JARs">
-    <td width="30%" valign="top" align="left"><b>Source attachments for referenced JARs</b></td>
-    <td width="70%" valign="top">Source attachments can now be configured separately for JARs
-        that are not directly on the classpath of a Java project, but referenced from another
-        JAR via the <code>Class-Path:</code> attribute in the <code>MANIFEST.MF</code>:
-        <p><img src="images/source-attachments-in-referenced-JARs.png" alt="Screenshot showing source attachment dialog"/></p>
-    </td>
-  </tr>
-
-  <tr id="find-externalized-strings">
-    <td width="30%" valign="top" align="left"><b>Find broken externalized strings improvements</b></td>
-    <td width="70%" valign="top"><b>Source > Find Broken Externalized Strings</b> now reports less false positives:
-    <p>• It ignores
-    all methods that don't take a single parameter of type <code>String</code>. For example, method calls like
-    <code>Messages.getResourceBundle()</code> are no longer listed as undefined keys.</p>
-  
-    <p>• Constants used for message keys are now correctly recognized.
-      In the example below, <code>MAIN_INDIRECT</code> is no longer listed as an undefined key:</p>
-     <p><img src="images/find-externalized-strings-constants.png" alt="'Find Broken Externalized Strings' handles constants example"/></p>
-    </td>
-  </tr>
-  
-    <tr id="new-preference-transfer-appearance">
-    <td width="30%" valign="top" align="left">
-        <b>New Java appearance category when importing or exporting preferences</b>
-    </td>
-    <td width="70%" valign="top">
-        There is a new category available when importing or exporting preferences that
-        allows you to control whether
-		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.AppearancePreferencePage)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Appearance preference page"/>
-		<b>Java > Appearance</b></a>
-        preferences are imported or exported:
-       <p><img src="images/preference-transfer-appearance.png" alt="Java appearance preference transfers"/></p> 
-    </td>
-  </tr>
-
-   <!-- ******************* JUnit ************************************* -->
-     
-     <tr> 
-      <td colspan="2"><a name="JUnit"></a> <div style="font-size: 20px; font-weight: bold;"> 
-          JUnit</div></td>
-    </tr>
-
-
-  <tr id="junit4.8.1">
-    <td width="30%" valign="top" align="left">
-        <b>JUnit 4.8.1</b>
-    </td>
-    <td width="70%" valign="top">
-    	The JUnit 4 version shipped with Eclipse has been updated to 4.8.1.
-    </td>
-  </tr>
-  
-  <tr id="org.junit-plugins">
-    <td width="30%" valign="top" align="left">
-      <b>2 versions of org.junit plug-in</b>
-    </td>
-    <td width="70%" valign="top">
-      The SDK now ships 2 org.junit plug-ins (versions 3.8.2 and 4.8.1). Clients that want to run JUnit Plug-in Tests with a Java 5 or later VM
-      and that require org.junit with a version bound that does not include 4.x need to update their version bound to include 4.x
-      (e.g. by specifying <code>Require-Bundle: org.junit;bundle-version="3.8.2"</code>.
-      If they don't update their bounds, both versions of org.junit are resolved at run time, which leads to errors when test classes are loaded.
-      <p>For complete details on the steps required to transition to using JUnit4 or to continue using JUnit3, please see:<br/>
-      <a href="http://wiki.eclipse.org/Eclipse/Testing/JUnit4_Changes">http://wiki.eclipse.org/Eclipse/Testing/JUnit4_Changes</a>.</p>
-    </td>
-  </tr>
-
-  <tr id="junit-open-url">
-    <td width="30%" valign="top" align="left"><b>JUnit view opens test result URL</b></td>
-    <td width="70%" valign="top">
-      The <b>JUnit</b> view can now directly load test result files from an URL. You can either just drag and drop an URL to the view or open the
-      <b>Test Run History...</b> tool bar button's drop-down and choose <b>Import from URL...</b> to enter an URL from which
-      the test results should be loaded.
-      <p>
-        <img src="images/junit-import-url.png" alt="'Import from URL...' menu item"/></p>
-      <p>
-      Supported test run formats are XML files exported from the JUnit view or
-      generated by the Ant JUnit task.</p>
+
+  <tr id="quick-assist-escape-backslashes">
+    <td class="title">New "Escape backslashes" and "Unescape backslashes" quick assists in properties file editor</td>
+    <td class="content">
+      The properties file editor now offers two new quick assists (<b>Ctrl+1</b>) to escape or unescape backslashes.
+      <p><img src="images/escape-backslashes.png" alt="Escape backslashes"/>
+      <img src="images/unescape-backslashes.png" alt="Uescape backslashes"/></p>
+
+      The <b>Escape backslashes</b> quick assist is also offered automatically on paste if the pasted text
+      contains backslashes that should be escaped.
     </td>
   </tr>
-  
-  <tr id="junit-skipped-node">
-    <td width="30%" valign="top" align="left"><b>JUnit imports test results with </b><code><skipped></code><b> nodes</b>
+
+  <tr id="properties-file-editor-hover">
+    <td class="title">Auto-escaped characters and editor hovers</td>
+    <td class="content">
+        The properties file editor now auto-escapes typed and pasted non-ISO-8859-1 characters and shows a hover containing the real text
+        if the underlying text contains special characters like \uHHHH, \t, or \n.
+      <p><img src="images/properties-file-editor-hover.png" alt="Properties file editor hover"/></p>
     </td>
-    <td width="70%" valign="top">
-        The JUnit view can now import test run files that contain <code><skipped></code> nodes.
-        Eclipse and the Ant JUnit task do not generate such nodes, but e.g. test result files from Apache Maven
-        do generate them for ignored JUnit4 tests.
+  </tr>
+
+  <!-- ******************* JUnit ************************************* -->
+  <tr>
+    <td id="JUnit" class="section" colspan="2">
+    <h2>JUnit</h2>
     </td>
   </tr>
-  
-    <tr id="edit-test-method">
-    <td width="30%" valign="top" align="left">
-      <b>Edit test method in JUnit launch configuration</b>
+
+  <tr id="junit-4-suite-wizard">
+    <td class="title">New JUnit Test Suite wizard supports JUnit 4</td>
+    <td class="content">
+        The <b>New > JUnit Test Suite</b> wizard can now also create JUnit 4 test suites:
+        <p><img src="images/junit-4-suite-wizard.png" alt="New JUnit Test Suite wizard"/></p>
+        Result:
+        <pre>@RunWith(Suite.class)
+ at SuiteClasses({ ListTest.class, SimpleTest.class })
+public class AllTests {
+}</pre>
     </td>
-    <td width="70%" valign="top">
-      In JUnit launch configurations, you can now edit the test method:
-      <p><img src="images/edit-test-method.png" alt="JUnit launch configuration on 'Test' tab"/></p>       
-      When the test method is empty, all tests in the class will be run. 
+  </tr>
+
+  <tr id="junit-show-new-launches">
+    <td class="title">Show latest JUnit test in all windows</td>
+    <td class="content">
+        By default, a new JUnit test run only shows up in the window where the test was started.
+        If you prefer to see the latest test in all open JUnit views, select
+        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.junit.preferences)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the Debug preference page"/>
+        <b>Preferences > Java > JUnit</b></a><b> > Show newly launched test in all JUnit views:</b>
+        <p><img src="images/junit-show-new-launches.png" alt="JUnit preference page"/></p>
     </td>
   </tr>
 
- <tr id="junit-split">
-    <td width="30%" valign="top" align="left"><b>org.eclipse.jdt.junit split</b></td>
-    <td width="70%" valign="top">
-      The non-UI parts of the <code>org.eclipse.jdt.junit</code> plug-in have been split off into the new plug-in
-      called <code>org.eclipse.jdt.junit.core</code>. This change does not affect existing clients of the
-      <code>org.eclipse.jdt.junit</code> plug-in, but allows new clients to use only the launcher without
-      requiring all the UI dependencies.
+  <tr id="junit-paste-url">
+    <td class="title">Paste URL into JUnit view</td>
+    <td class="content">
+      Apart from drag-and-drop or <b>Test Run History > Import from URL...</b>, you can now also
+      paste a URL into the JUnit view to load test results from the web.
+      <p>Supported test run formats are XML files exported from the JUnit view or
+      generated by the Ant JUnit task.</p>
     </td>
   </tr>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF
index 161af7a..5192dc0 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.junit.core;singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.junit.JUnitCorePlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
@@ -20,7 +20,7 @@ Require-Bundle:
  org.eclipse.core.expressions;bundle-version="[3.4.100,4.0.0)",
  org.eclipse.debug.core;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jdt.junit.runtime;bundle-version="[3.4.100,4.0.0)",
  org.eclipse.core.variables;bundle-version="[3.2.200,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
index f9e77bb..0463bfb 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitCorePlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,10 @@ public class JUnitCorePlugin extends Plugin {
 
 	public static final String CORE_PLUGIN_ID= "org.eclipse.jdt.junit.core"; //$NON-NLS-1$
 	
+	/**
+	 * Plug-in ID of the <b>UI</b> plug-in ("org.eclipse.jdt.junit").
+	 * @see #CORE_PLUGIN_ID
+	 */
 	public static final String PLUGIN_ID= "org.eclipse.jdt.junit"; //$NON-NLS-1$
 	public static final String ID_EXTENSION_POINT_TESTRUN_LISTENERS= PLUGIN_ID + "." + "testRunListeners"; //$NON-NLS-1$ //$NON-NLS-2$
 	public static final String ID_EXTENSION_POINT_TEST_KINDS= PLUGIN_ID + "." + "internal_testKinds"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -127,7 +131,7 @@ public class JUnitCorePlugin extends Plugin {
 	public void stop(BundleContext context) throws Exception {
 		fIsStopped= true;
 		try {
-			new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID).flush();
+			InstanceScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID).flush();
 			fJUnitModel.stop();
 		} finally {
 			super.stop(context);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitPreferencesConstants.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitPreferencesConstants.java
index 328ccb3..b7a3d5a 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitPreferencesConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JUnitPreferencesConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,8 +36,8 @@ public class JUnitPreferencesConstants {
 	public static final String SHOW_ON_ERROR_ONLY= JUnitCorePlugin.PLUGIN_ID + ".show_on_error"; //$NON-NLS-1$
 
 	/**
-	 * Boolean preference controlling whether the JUnit view should be shown on
-	 * errors only.
+	 * Boolean preference controlling whether '-ea' should be added to VM arguments when creating a
+	 * new JUnit launch configuration.
 	 */
 	public static final String ENABLE_ASSERTIONS= JUnitCorePlugin.PLUGIN_ID + ".enable_assertions"; //$NON-NLS-1$
 
@@ -145,6 +145,6 @@ public class JUnitPreferencesConstants {
 	}
 
 	public static void setFilterStack(boolean filter) {
-		new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putBoolean(DO_FILTER_STACK, filter);
+		InstanceScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putBoolean(DO_FILTER_STACK, filter);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JunitPreferenceInitializer.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JunitPreferenceInitializer.java
index 9f83570..ea45d6a 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JunitPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/JunitPreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ public class JunitPreferenceInitializer extends AbstractPreferenceInitializer {
 
 	/** {@inheritDoc} */
 	public void initializeDefaultPreferences() {
-		IEclipsePreferences prefs= new DefaultScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID);
+		IEclipsePreferences prefs= DefaultScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID);
 
 		prefs.putBoolean(JUnitPreferencesConstants.DO_FILTER_STACK, true);
 
@@ -47,18 +47,21 @@ public class JunitPreferenceInitializer extends AbstractPreferenceInitializer {
 		prefs.put(JUnitPreferencesConstants.JUNIT4_JAVADOC, "http://www.junit.org/junit/javadoc/4.5"); //$NON-NLS-1$
 		
 		// migrate old instance scope prefs
-		IEclipsePreferences oldInstancePrefs= new InstanceScope().getNode(JUnitCorePlugin.PLUGIN_ID);
-		IEclipsePreferences newInstancePrefs= new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID);
-		String[] oldKeys;
 		try {
-			oldKeys= oldInstancePrefs.keys();
-			for (int i= 0; i < oldKeys.length; i++ ) {
-				String key= oldKeys[i];
-				newInstancePrefs.put(key, oldInstancePrefs.get(key, null));
-				oldInstancePrefs.remove(key);
+			IEclipsePreferences newInstancePrefs= InstanceScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID);
+			
+			if (newInstancePrefs.keys().length == 0) {
+				IEclipsePreferences oldInstancePrefs= InstanceScope.INSTANCE.getNode(JUnitCorePlugin.PLUGIN_ID);
+				
+				String[] oldKeys= oldInstancePrefs.keys();
+				for (int i= 0; i < oldKeys.length; i++ ) {
+					String key= oldKeys[i];
+					newInstancePrefs.put(key, oldInstancePrefs.get(key, null));
+					oldInstancePrefs.remove(key);
+				}
+				newInstancePrefs.flush();
+				oldInstancePrefs.flush();
 			}
-			newInstancePrefs.flush();
-			oldInstancePrefs.flush();
 		} catch (BackingStoreException e) {
 			JUnitCorePlugin.log(e);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/BuildPathSupport.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/BuildPathSupport.java
index 2901976..e88c159 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/BuildPathSupport.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/BuildPathSupport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,9 +12,7 @@ package org.eclipse.jdt.internal.junit.buildpath;
 
 
 import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.io.FilenameFilter;
 
 import org.osgi.framework.Version;
 
@@ -22,11 +20,9 @@ import org.eclipse.equinox.frameworkadmin.BundleInfo;
 import org.eclipse.jdt.junit.JUnitCore;
 import org.eclipse.osgi.service.resolver.VersionRange;
 
-import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.URIUtil;
 
 import org.eclipse.jdt.core.IAccessRule;
 import org.eclipse.jdt.core.IClasspathAttribute;
@@ -44,16 +40,18 @@ public class BuildPathSupport {
 		
 		private final String bundleId;
 		private final VersionRange versionRange;
-		private final String sourceBundleId;
 		private final String bundleRoot;
+		private final String binaryImportedRoot;
+		private final String sourceBundleId;
 		private final String repositorySource;
 		private final String javadocPreferenceKey;
 
-		public JUnitPluginDescription(String bundleId, VersionRange versionRange, String bundleRoot, String sourceBundleId, String repositorySource, String javadocPreferenceKey) {
+		public JUnitPluginDescription(String bundleId, VersionRange versionRange, String bundleRoot, String binaryImportedRoot, String sourceBundleId, String repositorySource, String javadocPreferenceKey) {
 			this.bundleId= bundleId;
 			this.versionRange= versionRange;
-			this.sourceBundleId= sourceBundleId;
 			this.bundleRoot= bundleRoot;
+			this.binaryImportedRoot= binaryImportedRoot;
+			this.sourceBundleId= sourceBundleId;
 			this.repositorySource= repositorySource;
 			this.javadocPreferenceKey= javadocPreferenceKey;
 		}
@@ -71,10 +69,7 @@ public class BuildPathSupport {
 			IPath bundleLocation= P2Utils.getBundleLocationPath(bundleInfo);
 			if (bundleLocation != null) {
 				
-				IPath bundleRootLocation= bundleLocation;
-				if (bundleRoot != null)
-					bundleRootLocation= bundleLocation.append(bundleRoot);
-				
+				IPath bundleRootLocation= getLibraryLocation(bundleInfo, bundleLocation);
 				IPath srcLocation= getSourceLocation(bundleInfo);
 				
 				IAccessRule[] accessRules= { };
@@ -92,30 +87,24 @@ public class BuildPathSupport {
 			return null;
 		}
 
-		private IPath getSourceLocation(BundleInfo bundleInfo) {
-			if (bundleInfo == null)
-				return null;
+		private IPath getLibraryLocation(BundleInfo bundleInfo, IPath bundleLocation) {
+			IPath bundleRootLocation= null;
+			if (bundleRoot != null)
+				bundleRootLocation= getLocationIfExists(bundleInfo, bundleRoot);
+			
+			if (bundleRootLocation == null && binaryImportedRoot != null)
+				bundleRootLocation= getLocationIfExists(bundleInfo, binaryImportedRoot);
 			
+			if (bundleRootLocation == null)
+				bundleRootLocation= bundleLocation;
+			return bundleRootLocation;
+		}
+
+		private IPath getSourceLocation(BundleInfo bundleInfo) {
 			IPath srcLocation= null;
 			if (repositorySource != null) {
 				// Try source in workspace (from repository)
-				try {
-					URL bundleUrl= FileLocator.toFileURL(URIUtil.toURL(bundleInfo.getLocation()));
-					File bundleFile= new File(bundleUrl.getFile());
-					if (bundleFile.isDirectory()) {
-						File srcFile= new File(bundleFile, repositorySource);
-						if (srcFile.exists()) {
-							srcLocation= new Path(srcFile.getPath());
-							if (srcFile.isDirectory()) {
-								srcLocation= srcLocation.addTrailingSeparator();
-							}
-						}
-					}
-				} catch (MalformedURLException e) {
-					//continue
-				} catch (IOException e) {
-					//continue
-				}
+				srcLocation= getLocationIfExists(bundleInfo, repositorySource);
 			}
 			
 			if (srcLocation == null) {
@@ -129,17 +118,50 @@ public class BuildPathSupport {
 			}
 			return srcLocation;
 		}
+
+		private IPath getLocationIfExists(BundleInfo bundleInfo, final String entryInBundle) {
+			IPath srcLocation= null;
+			IPath bundleLocationPath= P2Utils.getBundleLocationPath(bundleInfo);
+			if (bundleLocationPath != null) {
+				File bundleFile= bundleLocationPath.toFile();
+				if (bundleFile.isDirectory()) {
+					File srcFile= null;
+					final int starIdx= entryInBundle.indexOf('*');
+					if (starIdx != -1) {
+						File[] files= bundleFile.listFiles(new FilenameFilter() {
+							private String pre= entryInBundle.substring(0, starIdx);
+							private String post= entryInBundle.substring(starIdx + 1);
+							public boolean accept(File dir, String name) {
+								return name.startsWith(pre) && name.endsWith(post);
+							}
+						});
+						if (files.length > 0) {
+							srcFile= files[0];
+						}
+					}
+					if (srcFile == null)
+						srcFile= new File(bundleFile, entryInBundle);
+					if (srcFile.exists()) {
+						srcLocation= new Path(srcFile.getPath());
+						if (srcFile.isDirectory()) {
+							srcLocation= srcLocation.addTrailingSeparator();
+						}
+					}
+				}
+			}
+			return srcLocation;
+		}
 	}
 
 	
 	public static final JUnitPluginDescription JUNIT3_PLUGIN= new JUnitPluginDescription(
-			"org.junit", new VersionRange("[3.8.2,3.9)"), "junit.jar", "org.junit.source", "source-bundle/", JUnitPreferencesConstants.JUNIT3_JAVADOC); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+			"org.junit", new VersionRange("[3.8.2,3.9)"), "junit.jar", "junit.jar", "org.junit.source", "source-bundle/", JUnitPreferencesConstants.JUNIT3_JAVADOC); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
 	
 	private static final JUnitPluginDescription JUNIT4_PLUGIN= new JUnitPluginDescription(
-			"org.junit", new VersionRange("[4.7.0,5.0.0)"), "junit.jar", "org.junit.source", "source-bundle/", JUnitPreferencesConstants.JUNIT4_JAVADOC); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+			"org.junit", new VersionRange("[4.7.0,5.0.0)"), "junit.jar", "junit.jar", "org.junit.source", "source-bundle/", JUnitPreferencesConstants.JUNIT4_JAVADOC); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
 	
 	private static final JUnitPluginDescription HAMCREST_CORE_PLUGIN= new JUnitPluginDescription(
-			"org.hamcrest.core", new VersionRange("[1.1.0,2.0.0)"), null, "org.hamcrest.core.source", "source-bundle/", JUnitPreferencesConstants.HAMCREST_CORE_JAVADOC); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			"org.hamcrest.core", new VersionRange("[1.1.0,2.0.0)"), null, "org.hamcrest.core_1.*.jar", "org.hamcrest.core.source", "source-bundle/", JUnitPreferencesConstants.HAMCREST_CORE_JAVADOC); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 
 	/**
 	 * @return the JUnit3 classpath container
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerInitializer.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerInitializer.java
index 98361d1..e1e0f24 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -152,7 +152,7 @@ public class JUnitContainerInitializer extends ClasspathContainerInitializer {
 	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#requestClasspathContainerUpdate(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathContainer)
 	 */
 	public void requestClasspathContainerUpdate(IPath containerPath, IJavaProject project, IClasspathContainer containerSuggestion) throws CoreException {
-		IEclipsePreferences preferences= new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID);
+		IEclipsePreferences preferences= InstanceScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID);
 		
 		IClasspathEntry[] entries= containerSuggestion.getClasspathEntries();
 		if (entries.length >= 1 && isValidJUnitContainerPath(containerPath)) {
@@ -166,7 +166,7 @@ public class JUnitContainerInitializer extends ClasspathContainerInitializer {
 				IClasspathAttribute[] extraAttributes= entry.getExtraAttributes();
 				if (extraAttributes.length == 0) {
 					// Revert to default
-					String defaultValue = new DefaultScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID).get(preferenceKey, ""); //$NON-NLS-1$
+					String defaultValue= DefaultScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID).get(preferenceKey, ""); //$NON-NLS-1$
 					if (!defaultValue.equals(preferences.get(preferenceKey, defaultValue))) {
 						preferences.put(preferenceKey, defaultValue);
 					}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/JUnitModel.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/JUnitModel.java
index 8861d62..3ae9b63 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/JUnitModel.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/JUnitModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Platform;
 
 import org.eclipse.debug.core.DebugPlugin;
@@ -379,6 +380,9 @@ public final class JUnitModel {
 			throwImportError(file, e);
 		} catch (IOException e) {
 			throwImportError(file, e);
+		} catch (IllegalArgumentException e) {
+			// Bug in parser: can throw IAE even if file is not null
+			throwImportError(file, e);
 		}
 		return null; // does not happen
 	}
@@ -393,9 +397,10 @@ public final class JUnitModel {
 	 * @throws InterruptedException if the import was cancelled
 	 * @since 3.6
 	 */
-	public static TestRunSession importTestRunSession(final String url, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+	public static TestRunSession importTestRunSession(String url, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 		monitor.beginTask(ModelMessages.JUnitModel_importing_from_url, IProgressMonitor.UNKNOWN);
-		final TestRunHandler handler= new TestRunHandler();
+		final String trimmedUrl= url.trim().replaceAll("\r\n?|\n", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		final TestRunHandler handler= new TestRunHandler(monitor);
 		
 		final CoreException[] exception= { null };
 		final TestRunSession[] session= { null };
@@ -406,14 +411,19 @@ public final class JUnitModel {
 					SAXParserFactory parserFactory= SAXParserFactory.newInstance();
 //					parserFactory.setValidating(true); // TODO: add DTD and debug flag
 					SAXParser parser= parserFactory.newSAXParser();
-					parser.parse(url, handler);
+					parser.parse(trimmedUrl, handler);
 					session[0]= handler.getTestRunSession();
+				} catch (OperationCanceledException e) {
+					// canceled
 				} catch (ParserConfigurationException e) {
 					storeImportError(e);
 				} catch (SAXException e) {
 					storeImportError(e);
 				} catch (IOException e) {
 					storeImportError(e);
+				} catch (IllegalArgumentException e) {
+					// Bug in parser: can throw IAE even if URL is not null
+					storeImportError(e);
 				}
 			}
 			private void storeImportError(Exception e) {
@@ -457,6 +467,9 @@ public final class JUnitModel {
 			throwImportError(swapFile, e);
 		} catch (IOException e) {
 			throwImportError(swapFile, e);
+		} catch (IllegalArgumentException e) {
+			// Bug in parser: can throw IAE even if file is not null
+			throwImportError(swapFile, e);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.java
index 301a5ff..399a969 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Mirko Raner <mirko at raner.ws> - Expose JUnitModel.exportTestRunSession(...) as API - https://bugs.eclipse.org/316199
  *******************************************************************************/
 
 package org.eclipse.jdt.internal.junit.model;
@@ -16,9 +17,11 @@ import org.eclipse.osgi.util.NLS;
 public class ModelMessages extends NLS {
 	private static final String BUNDLE_NAME= "org.eclipse.jdt.internal.junit.model.ModelMessages"; //$NON-NLS-1$
 	public static String JUnitModel_could_not_import;
+	public static String JUnitModel_could_not_export;
 	public static String JUnitModel_could_not_read;
 	public static String JUnitModel_could_not_write;
 	public static String JUnitModel_importing_from_url;
+	public static String TestRunHandler_lines_read;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.properties b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.properties
index 6c01aff..abcb0a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ModelMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
+# Copyright (c) 2009, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -7,8 +7,12 @@
 #
 # Contributors:
 #     IBM Corporation - initial API and implementation
+#     Mirko Raner <mirko at raner.ws> - Expose JUnitModel.exportTestRunSession(...) as API - https://bugs.eclipse.org/316199
 ###############################################################################
+
+JUnitModel_could_not_export=Test run could not be exported.
 JUnitModel_could_not_import=Test run could not be imported.
 JUnitModel_could_not_write=The test run could not be written to file ''{0}''.
 JUnitModel_could_not_read=The test run could not be imported from file ''{0}''.
 JUnitModel_importing_from_url=Importing from URL...
+TestRunHandler_lines_read={0} lines read
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/RemoteTestRunnerClient.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/RemoteTestRunnerClient.java
index 59e9004..7d2c158 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/RemoteTestRunnerClient.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/RemoteTestRunnerClient.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.io.PushbackReader;
 import java.io.UnsupportedEncodingException;
 import java.net.ServerSocket;
 import java.net.Socket;
@@ -25,14 +26,15 @@ import java.net.SocketException;
 import org.eclipse.core.runtime.ISafeRunnable;
 import org.eclipse.core.runtime.SafeRunner;
 
-import org.eclipse.jdt.internal.junit.runner.MessageIds;
 import org.eclipse.jdt.internal.junit.JUnitCorePlugin;
+import org.eclipse.jdt.internal.junit.runner.MessageIds;
 
 /**
  * The client side of the RemoteTestRunner. Handles the
  * marshaling of the different messages.
  */
 public class RemoteTestRunnerClient {
+	
 	public abstract class ListenerSafeRunnable implements ISafeRunnable {
 		public void handleException(Throwable exception) {
 			JUnitCorePlugin.log(exception);
@@ -141,7 +143,8 @@ public class RemoteTestRunnerClient {
 				return fDefaultState;
 			}
 			fBuffer.append(message);
-			fBuffer.append('\n');
+			if (fLastLineDelimiter != null)
+				fBuffer.append(fLastLineDelimiter);
 			return this;
 		}
 
@@ -171,7 +174,9 @@ public class RemoteTestRunnerClient {
 	            fExpectedResult.setLength(0);
 	            return fDefaultState;
 	        }
-	        fFailedTrace.append(message).append('\n');
+	        fFailedTrace.append(message);
+	        if (fLastLineDelimiter != null)
+	        	fFailedTrace.append(fLastLineDelimiter);
 	        return this;
 	    }
 	}
@@ -213,7 +218,8 @@ public class RemoteTestRunnerClient {
 	private Socket fSocket;
 	private int fPort= -1;
 	private PrintWriter fWriter;
-	private BufferedReader fBufferedReader;
+	private PushbackReader fPushbackReader;
+	private String fLastLineDelimiter;
 	/**
 	 * The protocol version
 	 */
@@ -251,9 +257,9 @@ public class RemoteTestRunnerClient {
 				fServerSocket= new ServerSocket(fServerPort);
 				fSocket= fServerSocket.accept();
 				try {
-				    fBufferedReader= new BufferedReader(new InputStreamReader(fSocket.getInputStream(), "UTF-8")); //$NON-NLS-1$
+				    fPushbackReader= new PushbackReader(new BufferedReader(new InputStreamReader(fSocket.getInputStream(), "UTF-8"))); //$NON-NLS-1$
 				} catch (UnsupportedEncodingException e) {
-				    fBufferedReader= new BufferedReader(new InputStreamReader(fSocket.getInputStream()));
+				    fPushbackReader= new PushbackReader(new BufferedReader(new InputStreamReader(fSocket.getInputStream())));
 				}
 				try {
 				    fWriter= new PrintWriter(new OutputStreamWriter(fSocket.getOutputStream(), "UTF-8"), true); //$NON-NLS-1$
@@ -261,7 +267,7 @@ public class RemoteTestRunnerClient {
 	                fWriter= new PrintWriter(new OutputStreamWriter(fSocket.getOutputStream()), true);
 	            }
 				String message;
-				while(fBufferedReader != null && (message= readMessage(fBufferedReader)) != null)
+				while(fPushbackReader != null && (message= readMessage(fPushbackReader)) != null)
 					receiveMessage(message);
 			} catch (SocketException e) {
 				notifyTestRunTerminated();
@@ -312,9 +318,9 @@ public class RemoteTestRunnerClient {
 			fWriter= null;
 		}
 		try {
-			if (fBufferedReader != null) {
-				fBufferedReader.close();
-				fBufferedReader= null;
+			if (fPushbackReader != null) {
+				fPushbackReader.close();
+				fPushbackReader= null;
 			}
 		} catch(IOException e) {
 		}
@@ -338,8 +344,30 @@ public class RemoteTestRunnerClient {
 		return fSocket != null;
 	}
 
-	private String readMessage(BufferedReader in) throws IOException {
-		return in.readLine();
+	private String readMessage(PushbackReader in) throws IOException {
+		StringBuffer buf= new StringBuffer(128);
+		int ch;
+		while ((ch= in.read()) != -1) {
+			if (ch == '\n') {
+				fLastLineDelimiter= "\n"; //$NON-NLS-1$
+				return buf.toString();
+			} else if (ch == '\r') {
+				ch= in.read();
+				if (ch == '\n') {
+					fLastLineDelimiter= "\r\n"; //$NON-NLS-1$
+				} else {
+					in.unread(ch);
+					fLastLineDelimiter= "\r"; //$NON-NLS-1$
+				}
+				return buf.toString();
+			} else {
+				buf.append((char) ch);
+			}
+		}
+		fLastLineDelimiter= null;
+		if (buf.length() == 0)
+			return null;
+		return buf.toString();
 	}
 
 	private void receiveMessage(String message) {
@@ -423,7 +451,7 @@ public class RemoteTestRunnerClient {
 				public void run() {
 					listener.testReran(testId,
 								className, testName, statusCode, trace,
-								fExpectedResult.toString(), fActualResult.toString());
+								nullifyEmpty(fExpectedResult), nullifyEmpty(fActualResult));
 				}
 			});
 		}
@@ -521,12 +549,37 @@ public class RemoteTestRunnerClient {
 			SafeRunner.run(new ListenerSafeRunnable() {
 				public void run() {
 			        listener.testFailed(fFailureKind, fFailedTestId,
-			        		fFailedTest, fFailedTrace.toString(), fExpectedResult.toString(), fActualResult.toString());
+			        		fFailedTest, fFailedTrace.toString(), nullifyEmpty(fExpectedResult), nullifyEmpty(fActualResult));
 				}
 			});
 		}
 	}
 
+	/**
+	 * Returns a comparison result from the given buffer.
+	 * Removes the terminating line delimiter.
+	 * 
+	 * @param buf the comparison result
+	 * @return the result or <code>null</code> if empty
+	 * @since 3.7
+	 */
+	private static String nullifyEmpty(StringBuffer buf) {
+		int length= buf.length();
+		if (length == 0)
+			return null;
+		
+		char last= buf.charAt(length - 1);
+		if (last == '\n') {
+			if (length > 1 && buf.charAt(length - 2) == '\r')
+				return buf.substring(0, length - 2);
+			else
+				return buf.substring(0, length - 1);
+		} else if (last == '\r') {
+			return buf.substring(0, length - 1);
+		}
+		return buf.toString();
+	}
+	
 	private void notifyTestRunTerminated() {
 		// fix for 77771 RemoteTestRunnerClient doing work after junit shutdown [JUnit]
 		if (JUnitCorePlugin.isStopped())
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunHandler.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunHandler.java
index d0f5831..09dc671 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunHandler.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,11 @@ import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 import org.xml.sax.helpers.DefaultHandler;
 
+import org.eclipse.osgi.util.NLS;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+
 import org.eclipse.core.resources.ResourcesPlugin;
 
 import org.eclipse.jdt.core.IJavaModel;
@@ -53,10 +58,17 @@ public class TestRunHandler extends DefaultHandler {
 
 	private Status fStatus;
 
+	private IProgressMonitor fMonitor;
+	private int fLastReportedLine;
+
 	public TestRunHandler() {
 
 	}
 
+	public TestRunHandler(IProgressMonitor monitor) {
+		fMonitor= monitor;
+	}
+	
 	public TestRunHandler(TestRunSession testRunSession) {
 		fTestRunSession= testRunSession;
 	}
@@ -69,6 +81,17 @@ public class TestRunHandler extends DefaultHandler {
 	}
 
 	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+		if (fLocator != null && fMonitor != null) {
+			int line= fLocator.getLineNumber();
+			if (line - 20 >= fLastReportedLine) {
+				line -= line % 20;
+				fLastReportedLine= line;
+				fMonitor.subTask(NLS.bind(ModelMessages.TestRunHandler_lines_read, new Integer(line)));
+			}
+		}
+		if (Thread.interrupted())
+			throw new OperationCanceledException();
+		
 		if (qName.equals(IXMLTags.NODE_TESTRUN)) {
 			if (fTestRunSession == null) {
 				String name= attributes.getValue(IXMLTags.ATTR_NAME);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunSession.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunSession.java
index d469250..fa6b5b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunSession.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestRunSession.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -706,7 +706,7 @@ public class TestRunSession implements ITestRunSession {
 			}
 
 			Status status= Status.convert(statusCode);
-			registerTestFailureStatus(testElement, status, trace, nullifyEmpty(expected), nullifyEmpty(actual));
+			registerTestFailureStatus(testElement, status, trace, expected, actual);
 
 			Object[] listeners= fSessionListeners.getListeners();
 			for (int i= 0; i < listeners.length; ++i) {
@@ -714,16 +714,6 @@ public class TestRunSession implements ITestRunSession {
 			}
 		}
 
-		private String nullifyEmpty(String string) {
-			int length= string.length();
-			if (length == 0)
-				return null;
-			else if (string.charAt(length - 1) == '\n')
-				return string.substring(0, length - 1);
-			else
-				return string;
-		}
-
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.junit.model.ITestRunListener2#testReran(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String)
 		 */
@@ -738,7 +728,7 @@ public class TestRunSession implements ITestRunSession {
 			TestCaseElement testCaseElement= (TestCaseElement) testElement;
 
 			Status status= Status.convert(statusCode);
-			registerTestFailureStatus(testElement, status, trace, nullifyEmpty(expectedResult), nullifyEmpty(actualResult));
+			registerTestFailureStatus(testElement, status, trace, expectedResult, actualResult);
 
 			Object[] listeners= fSessionListeners.getListeners();
 			for (int i= 0; i < listeners.length; ++i) {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/JUnitCore.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/JUnitCore.java
index 1e997be..74ee745 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/JUnitCore.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/JUnitCore.java
@@ -7,19 +7,29 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Mirko Raner <mirko at raner.ws> - Expose JUnitModel.exportTestRunSession(...) as API - https://bugs.eclipse.org/316199
  *******************************************************************************/
 
 package org.eclipse.jdt.junit;
 
 
+import java.io.File;
+import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.xml.transform.TransformerException;
+
+import org.eclipse.jdt.junit.model.ITestRunSession;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
 
 import org.eclipse.jdt.core.IClasspathContainer;
 import org.eclipse.jdt.core.IJavaElement;
@@ -27,6 +37,9 @@ import org.eclipse.jdt.core.IType;
 
 import org.eclipse.jdt.internal.junit.JUnitCorePlugin;
 import org.eclipse.jdt.internal.junit.launcher.JUnit4TestFinder;
+import org.eclipse.jdt.internal.junit.model.JUnitModel;
+import org.eclipse.jdt.internal.junit.model.ModelMessages;
+import org.eclipse.jdt.internal.junit.model.TestRunSession;
 
 /**
  * Class for accessing JUnit support; all functionality is provided by
@@ -130,4 +143,74 @@ public class JUnitCore {
 		return (IType[])result.toArray(new IType[result.size()]);
 	}
 
+	/**
+	 * Exports the given test run session into an XML report file.
+	 * 
+	 * @param testRunSession the test run session
+	 * @param file the destination
+	 * @throws CoreException if an error occurred
+	 * 
+	 * @since 3.7
+	 */
+	public static void exportTestRunSession(ITestRunSession testRunSession, File file) throws CoreException {
+		JUnitModel.exportTestRunSession((TestRunSession)testRunSession, file);
+	}
+
+	/**
+	 * Exports the given test run session to an output stream.
+	 * 
+	 * @param testRunSession the test run session
+	 * @param output the output stream
+	 * @throws CoreException if an error occurred
+	 * 
+	 * @since 3.7
+	 */
+	public static void exportTestRunSession(ITestRunSession testRunSession, OutputStream output) throws CoreException {
+		try {
+			JUnitModel.exportTestRunSession((TestRunSession)testRunSession, output);
+			
+		} catch (TransformerException exception) {
+			String pluginID= JUnitCorePlugin.getPluginId();
+			String message= ModelMessages.JUnitModel_could_not_export;
+			throw new CoreException(new Status(IStatus.ERROR, pluginID, message, exception));
+		}
+	}
+
+	/**
+	 * Imports a test run session from the given file.
+	 * 
+	 * @param file a file containing a test run session transcript
+	 * @return the imported test run session
+	 * @throws CoreException if the import failed
+	 * 
+	 * @since 3.7
+	 */
+	public static ITestRunSession importTestRunSession(File file) throws CoreException {
+		return JUnitModel.importTestRunSession(file);
+	}
+
+	/**
+	 * Imports a test run session from the given URL.
+	 * 
+	 * @param url an URL to a test run session transcript
+	 * @param monitor a progress monitor for cancellation
+	 * @return the imported test run session, or <code>null</code> if the import has been cancelled
+	 * @throws CoreException if the import failed
+	 * 
+	 * @since 3.7
+	 */
+	public static ITestRunSession importTestRunSession(final String url, IProgressMonitor monitor) throws CoreException {
+		try {
+			return JUnitModel.importTestRunSession(url, monitor);
+			
+		} catch (InvocationTargetException exception) {
+			String pluginID= JUnitCorePlugin.getPluginId();
+			String message= ModelMessages.JUnitModel_could_not_import;
+			Throwable throwable= exception.getCause() != null ? exception.getCause() : exception;
+			throw new CoreException(new Status(IStatus.ERROR, pluginID, message, throwable));
+			
+		} catch (InterruptedException interrupt) {
+			return null;
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/model/ITestSuiteElement.java b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/model/ITestSuiteElement.java
index 56d7b85..64089e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/model/ITestSuiteElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/junit/model/ITestSuiteElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,9 +24,10 @@ package org.eclipse.jdt.junit.model;
 public interface ITestSuiteElement extends ITestElementContainer {
 
 	/**
-	 * Returns the qualified type name of the suite class
-	 *
-	 * @return the qualified type name of the suite class
+	 * Returns the name of the suite. This is either the qualified type name of the
+	 * suite class, or a custom name if one has been set.
+	 * 
+	 * @return the name of the suite
 	 */
 	public String getSuiteTypeName();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.runtime/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.junit.runtime/META-INF/MANIFEST.MF
index 90202b7..d946dac 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.runtime/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.junit.runtime/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.junit.runtime;singleton:=true
-Bundle-Version: 3.4.200.qualifier
+Bundle-Version: 3.4.300.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.internal.junit.runner;x-friends:="org.eclipse.jdt.junit.core,org.eclipse.jdt.junit4.runtime,org.eclipse.pde.junit.runtime",
- org.eclipse.jdt.internal.junit.runner.junit3;x-internal:=true
+ org.eclipse.jdt.internal.junit.runner.junit3;x-friends:="org.eclipse.jdt.junit4.runtime"
 Require-Bundle: org.junit;bundle-version="3.8.2"
 Bundle-RequiredExecutionEnvironment: J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java b/eclipse/plugins/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java
index 8e46327..ab62271 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ import org.eclipse.jdt.internal.junit.runner.RemoteTestRunner;
 
 public class JUnit3TestLoader implements ITestLoader {
 	private static final String SUITE_METHODNAME= "suite"; //$NON-NLS-1$
-	private static final String SET_UP_TEST_METHOD_NAME = "setUpTest"; //$NON-NLS-1$
+	public static final String SET_UP_TEST_METHOD_NAME = "setUpTest"; //$NON-NLS-1$
 
 	// WANT: give test loaders a schema
 
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/.classpath b/eclipse/plugins/org.eclipse.jdt.junit/.classpath
index b7c5443..7a47fa8 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/.classpath
+++ b/eclipse/plugins/org.eclipse.jdt.junit/.classpath
@@ -2,7 +2,7 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="internal compatibility"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.junit/.settings/org.eclipse.jdt.core.prefs
index 6d1073a..c5893c9 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.junit/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Thu Mar 19 15:53:44 CET 2009
+#Tue Jan 25 13:10:56 CET 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -15,35 +15,37 @@ org.eclipse.jdt.core.codeComplete.localPrefixes=
 org.eclipse.jdt.core.codeComplete.localSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=fg
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
 org.eclipse.jdt.core.compiler.problem.deadCode=error
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.discouragedReference=error
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
@@ -62,6 +64,7 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=error
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
@@ -77,9 +80,11 @@ org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -100,7 +105,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF
index decdafe..5d3ecc2 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.junit/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.junit;singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.junit.ui.JUnitPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
@@ -28,7 +28,7 @@ Require-Bundle:
  org.eclipse.debug.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jdt.ui;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jdt.debug.ui;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.jdt.junit.runtime;bundle-version="[3.4.100,4.0.0)",
@@ -37,4 +37,5 @@ Require-Bundle:
  org.eclipse.core.variables;bundle-version="[3.2.200,4.0.0)",
  org.eclipse.ltk.ui.refactoring;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jdt.junit.core;bundle-version="[3.6.0,4.0.0)";visibility:=reexport
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Import-Package: com.ibm.icu.text
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/build.properties b/eclipse/plugins/org.eclipse.jdt.junit/build.properties
index 1b054dc..24fb96f 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/build.properties
+++ b/eclipse/plugins/org.eclipse.jdt.junit/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -20,3 +20,5 @@ source.. = src/,\
 
 src.includes = about.html,\
                schema/
+
+javacWarnings..=-unavoidableGenericProblems
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/internal compatibility/org/eclipse/jdt/internal/junit/launcher/TestSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.junit/internal compatibility/org/eclipse/jdt/internal/junit/launcher/TestSelectionDialog.java
index dfa40de..394886c 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/internal compatibility/org/eclipse/jdt/internal/junit/launcher/TestSelectionDialog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.junit/internal compatibility/org/eclipse/jdt/internal/junit/launcher/TestSelectionDialog.java	
@@ -43,14 +43,17 @@ public class TestSelectionDialog extends TwoPaneElementSelector {
 			fBaseLabelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_POST_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			return fBaseLabelProvider.getImage(((IType)element).getPackageFragment());
 		}
 
+		@Override
 		public String getText(Object element) {
 			return fBaseLabelProvider.getText(((IType)element).getPackageFragment());
 		}
 
+		@Override
 		public void dispose() {
 			fBaseLabelProvider.dispose();
 		}
@@ -66,6 +69,7 @@ public class TestSelectionDialog extends TwoPaneElementSelector {
 	/**
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		//PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, new Object[] { IJavaHelpContextIds.MAINTYPE_SELECTION_DIALOG });
@@ -74,6 +78,7 @@ public class TestSelectionDialog extends TwoPaneElementSelector {
 	/*
 	 * @see Window#open()
 	 */
+	@Override
 	public int open() {
 		setElements(fTypes);
 		return super.open();
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerWizardPage.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerWizardPage.java
index 161325d..58e42c3 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/buildpath/JUnitContainerWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.core.runtime.IPath;
 
@@ -54,8 +55,8 @@ public class JUnitContainerWizardPage extends NewElementWizardPage implements IC
 	private IJavaProject fProject;
 	private IClasspathEntry fContainerEntryResult;
 	private Combo fVersionCombo;
-	private Label fResolvedPath;
-	private Label fResolvedSourcePath;
+	private Text fResolvedPath;
+	private Text fResolvedSourcePath;
 
 	public JUnitContainerWizardPage() {
 		super("JUnitContainerPage"); //$NON-NLS-1$
@@ -138,7 +139,7 @@ public class JUnitContainerWizardPage extends NewElementWizardPage implements IC
 		label.setText(JUnitMessages.JUnitContainerWizardPage_resolved_label);
 		label.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false, 1, 1));
 
-		fResolvedPath= new Label(composite, SWT.WRAP);
+		fResolvedPath= new Text(composite, SWT.READ_ONLY | SWT.WRAP);
 		data= new GridData(GridData.FILL, GridData.FILL, true, false, 1, 1);
 		data.widthHint= converter.convertWidthInCharsToPixels(60);
 		fResolvedPath.setFont(composite.getFont());
@@ -149,7 +150,7 @@ public class JUnitContainerWizardPage extends NewElementWizardPage implements IC
 		label.setText(JUnitMessages.JUnitContainerWizardPage_source_location_label);
 		label.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false, 1, 1));
 
-		fResolvedSourcePath= new Label(composite, SWT.WRAP);
+		fResolvedSourcePath= new Text(composite,  SWT.READ_ONLY | SWT.WRAP);
 		data= new GridData(GridData.FILL, GridData.FILL, true, false, 1, 1);
 		data.widthHint= converter.convertWidthInCharsToPixels(60);
 		fResolvedSourcePath.setFont(composite.getFont());
@@ -159,6 +160,14 @@ public class JUnitContainerWizardPage extends NewElementWizardPage implements IC
 
 		setControl(composite);
 	}
+	
+	@Override
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible) {
+			fVersionCombo.setFocus();
+		}
+	}
 
 	protected void doSelectionChanged() {
 		JUnitStatus status= new JUnitStatus();
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/AssertionVMArg.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/AssertionVMArg.java
index 74b4e94..e65dd51 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/AssertionVMArg.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/AssertionVMArg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,7 +85,7 @@ public class AssertionVMArg {
 	}
 
 	public static void setEnableAssertionsPreference(boolean preference) {
-		new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putBoolean(JUnitPreferencesConstants.ENABLE_ASSERTIONS, preference);
+		InstanceScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putBoolean(JUnitPreferencesConstants.ENABLE_ASSERTIONS, preference);
 	}
 
 	/* not needed unless you're manipulating already entered configurations
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitTabGroup.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitTabGroup.java
index 824ecf6..3dc035d 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitTabGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/launcher/JUnitTabGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public class JUnitTabGroup extends AbstractLaunchConfigurationTabGroup {
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
 	 */
+	@Override
 	public void setDefaults(ILaunchConfigurationWorkingCopy config) {
 		super.setDefaults(config);
 		AssertionVMArg.setArgDefault(config);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/JUnitRenameParticipant.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/JUnitRenameParticipant.java
index e796eb8..5af5a21 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/JUnitRenameParticipant.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/JUnitRenameParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.jdt.internal.junit.refactoring;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -39,13 +38,13 @@ public abstract class JUnitRenameParticipant extends RenameParticipant implement
 
 		private final RenameArguments fArguments;
 
-		private List fChanges;
+		private List<Change> fChanges;
 
 		private final ILaunchManager fLaunchManager;
 
 		private boolean fShouldFlagWarnings= true;
 
-		public ChangeList(RenameArguments arguments, ILaunchManager manager, List changes) {
+		public ChangeList(RenameArguments arguments, ILaunchManager manager, List<Change> changes) {
 			fArguments= arguments;
 			fLaunchManager= manager;
 			fChanges= changes;
@@ -59,9 +58,9 @@ public abstract class JUnitRenameParticipant extends RenameParticipant implement
 		}
 
 		public void createChangeForConfigs(ILaunchConfiguration[] configs, IChangeAdder changeCreator) throws CoreException {
-			for (int i= 0; i < configs.length; i++) {
+			for (ILaunchConfiguration config : configs) {
 				fShouldFlagWarnings= true;
-				changeCreator.createChangeForConfig(this, new LaunchConfigurationContainer(configs[i]));
+				changeCreator.createChangeForConfig(this, new LaunchConfigurationContainer(config));
 			}
 		}
 
@@ -88,19 +87,20 @@ public abstract class JUnitRenameParticipant extends RenameParticipant implement
 		}
 	}
 
+	@Override
 	public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		if (!getArguments().getUpdateReferences())
 			return null;
 
 		ILaunchManager manager= getLaunchManager();
-		List launchConfigTypes= getLaunchConfigTypes();
-		List changes= new ArrayList();
-		for (Iterator types= launchConfigTypes.iterator(); types.hasNext();) {
-			String typeId= (String) types.next();
+		List<String> launchConfigTypes= getLaunchConfigTypes();
+		List<Change> changes= new ArrayList<Change>();
+		for (String typeId : launchConfigTypes) {
 			ILaunchConfigurationType type= manager.getLaunchConfigurationType(typeId);
 			ILaunchConfiguration configs[]= manager.getLaunchConfigurations(type);
 			new ChangeList(getArguments(), getLaunchManager(), changes).createChangeForConfigs(configs, this);
@@ -108,7 +108,7 @@ public abstract class JUnitRenameParticipant extends RenameParticipant implement
 				throw new OperationCanceledException();
 		}
 		if (changes.size() > 0)
-			return new CompositeChange(getChangeName(), (Change[]) changes.toArray(new Change[changes.size()]));
+			return new CompositeChange(getChangeName(), changes.toArray(new Change[changes.size()]));
 		return null;
 	}
 
@@ -121,7 +121,7 @@ public abstract class JUnitRenameParticipant extends RenameParticipant implement
 		return JUnitMessages.TypeRenameParticipant_change_name;
 	}
 
-	protected List getLaunchConfigTypes() {
+	protected List<String> getLaunchConfigTypes() {
 		return JUnitPlugin.getDefault().getJUnitLaunchConfigTypeIDs();
 	}
 
@@ -136,6 +136,7 @@ public abstract class JUnitRenameParticipant extends RenameParticipant implement
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getName() {
 		return JUnitMessages.TypeRenameParticipant_name;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigChange.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigChange.java
index c509b5e..a02d3fb 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigChange.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ public abstract class LaunchConfigChange extends Change {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object getModifiedElement() {
 		return fConfig;
 	}
@@ -45,10 +46,12 @@ public abstract class LaunchConfigChange extends Change {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void initializeValidationData(IProgressMonitor pm) {
 		// must be implemented to decide correct value of isValid
 	}
 
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus refactoringStatus= new RefactoringStatus();
 		if (!fConfig.getConfiguration().exists() && fShouldFlagWarning)
@@ -56,6 +59,7 @@ public abstract class LaunchConfigChange extends Change {
 		return refactoringStatus;
 	}
 
+	@Override
 	public Change perform(IProgressMonitor pm) throws CoreException {
 		if (!fConfig.getConfiguration().exists())
 			return new NullChange();
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigRenameChange.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigRenameChange.java
index ce9a505..8fc01e8 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigRenameChange.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigRenameChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,21 +34,25 @@ public class LaunchConfigRenameChange extends LaunchConfigChange {
 		fLaunchManager = lm;
 	}
 
+	@Override
 	protected void alterLaunchConfiguration(ILaunchConfigurationWorkingCopy copy)
 			throws CoreException {
 		if (!fLaunchManager.isExistingLaunchConfigurationName(fNewName))
 			copy.rename(fNewName);
 	}
 
+	@Override
 	protected String getOldValue(ILaunchConfiguration config) {
 		return fConfig.getName();
 	}
 
+	@Override
 	public Change getUndo(String oldValue) throws CoreException {
 		return new LaunchConfigRenameChange(fConfig, oldValue, fLaunchManager,
 				shouldFlagWarning());
 	}
 
+	@Override
 	public String getName() {
 		return Messages.format(JUnitMessages.LaunchConfigRenameChange_name,
 				new Object[] { fConfig.getName(), fNewName });
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigSetAttributeChange.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigSetAttributeChange.java
index 10a2b6d..caeb40b 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigSetAttributeChange.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/LaunchConfigSetAttributeChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ public class LaunchConfigSetAttributeChange extends LaunchConfigChange {
 		fAttributeName= attributeName;
 	}
 
+	@Override
 	protected Change getUndo(String oldValue) throws CoreException {
 		return new LaunchConfigSetAttributeChange(fConfig, fAttributeName, oldValue, shouldFlagWarning());
 	}
@@ -40,14 +41,17 @@ public class LaunchConfigSetAttributeChange extends LaunchConfigChange {
 		return fAttributeName;
 	}
 
+	@Override
 	protected void alterLaunchConfiguration(ILaunchConfigurationWorkingCopy copy) throws CoreException {
 		copy.setAttribute(fAttributeName, fNewValue);
 	}
 
+	@Override
 	protected String getOldValue(ILaunchConfiguration config) throws CoreException {
 		return config.getAttribute(fAttributeName, (String) null);
 	}
 
+	@Override
 	public String getName() {
 		return Messages.format(JUnitMessages.LaunchConfigSetAttributeChange_name, new Object[] {fAttributeName, fConfig.getName()});
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/ProjectRenameParticipant.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/ProjectRenameParticipant.java
index 99a921e..058f720 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/ProjectRenameParticipant.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/ProjectRenameParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,11 +37,13 @@ public class ProjectRenameParticipant extends JUnitRenameParticipant {
 		return JavaCore.create(project);
 	}
 
+	@Override
 	protected boolean initialize(Object element) {
 		fProject= (IJavaProject) element;
 		return true;
 	}
 
+	@Override
 	public void createChangeForConfig(JUnitRenameParticipant.ChangeList changeList, LaunchConfigurationContainer config) throws CoreException {
 
 		changeList.addAttributeChangeIfNeeded(config, IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, fProject.getElementName(), getNewName());
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/TypeRenameParticipant.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/TypeRenameParticipant.java
index d244dc9..c144572 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/TypeRenameParticipant.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/refactoring/TypeRenameParticipant.java
@@ -23,6 +23,7 @@ public class TypeRenameParticipant extends JUnitRenameParticipant {
 
 	private IType fType;
 
+	@Override
 	protected boolean initialize(Object element) {
 		fType= (IType) element;
 		return isTestOrTestSuite();
@@ -36,6 +37,7 @@ public class TypeRenameParticipant extends JUnitRenameParticipant {
 		}
 	}
 
+	@Override
 	public void createChangeForConfig(ChangeList list, LaunchConfigurationContainer config) throws CoreException {
 		String typeName= fType.getFullyQualifiedName('.');
 		String mainType= config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, (String) null);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultDialog.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultDialog.java
index 585d9ca..ac7c978 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ import org.eclipse.compare.structuremergeviewer.DiffNode;
 
 import org.eclipse.jdt.internal.junit.model.TestElement;
 
+
 public class CompareResultDialog extends TrayDialog {
     private static final String PREFIX_SUFFIX_PROPERTY= "org.eclipse.jdt.internal.junit.ui.CompareResultDialog.prefixSuffix"; //$NON-NLS-1$
 
@@ -67,7 +68,8 @@ public class CompareResultDialog extends TrayDialog {
              super(parent, style, configuration);
          }
 
-     	protected void createControls(Composite composite) {
+     	@Override
+		protected void createControls(Composite composite) {
      		super.createControls(composite);
     		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJUnitHelpContextIds.RESULT_COMPARE_DIALOG);
      	}
@@ -78,7 +80,8 @@ public class CompareResultDialog extends TrayDialog {
 //    		super.createToolItems(tbm);
 //        }
 
-        protected void configureTextViewer(TextViewer textViewer) {
+        @Override
+		protected void configureTextViewer(TextViewer textViewer) {
             if (textViewer instanceof SourceViewer) {
                 int[] prefixSuffixOffsets= (int[]) getCompareConfiguration().getProperty(PREFIX_SUFFIX_PROPERTY);
 				((SourceViewer)textViewer).configure(new CompareResultViewerConfiguration(prefixSuffixOffsets));
@@ -118,6 +121,7 @@ public class CompareResultDialog extends TrayDialog {
 			fPrefixSuffixOffsets= prefixSuffixOffsets;
 		}
 
+		@Override
 		public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
             PresentationReconciler reconciler= new PresentationReconciler();
             SimpleDamagerRepairer dr= new SimpleDamagerRepairer(fPrefixSuffixOffsets);
@@ -166,6 +170,8 @@ public class CompareResultDialog extends TrayDialog {
      */
     private final int[] fPrefixSuffix= new int[2];
 
+	private CompareViewerPane fCompareViewerPane;
+
 	public CompareResultDialog(Shell parentShell, TestElement element) {
 		super(parentShell);
 		setShellStyle((getShellStyle() & ~SWT.APPLICATION_MODAL) | SWT.TOOL);
@@ -176,6 +182,7 @@ public class CompareResultDialog extends TrayDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -190,6 +197,7 @@ public class CompareResultDialog extends TrayDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
 	 */
+	@Override
 	protected IDialogSettings getDialogBoundsSettings() {
 		return JUnitPlugin.getDefault().getDialogSettingsSection(getClass().getName());
 	}
@@ -213,31 +221,33 @@ public class CompareResultDialog extends TrayDialog {
 		fPrefixSuffix[1]= l;
 	}
 
-    protected void configureShell(Shell newShell) {
+    @Override
+	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		newShell.setText(JUnitMessages.CompareResultDialog_title);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJUnitHelpContextIds.RESULT_COMPARE_DIALOG);
 	}
 
+	@Override
 	protected void createButtonsForButtonBar(Composite parent) {
 		createButton(parent, IDialogConstants.OK_ID, JUnitMessages.CompareResultDialog_labelOK, true);
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite = (Composite)super.createDialogArea(parent);
 		GridLayout layout= new GridLayout();
 		layout.numColumns= 1;
 		composite.setLayout(layout);
 
-		CompareViewerPane pane = new CompareViewerPane(composite, SWT.BORDER | SWT.FLAT);
-		pane.setText(fTestName);
+		fCompareViewerPane= new CompareViewerPane(composite, SWT.BORDER | SWT.FLAT);
 		GridData data= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
 		data.widthHint= convertWidthInCharsToPixels(120);
 		data.heightHint= convertHeightInCharsToPixels(13);
-		pane.setLayoutData(data);
+		fCompareViewerPane.setLayoutData(data);
 
-		Control previewer= createPreviewer(pane);
-		pane.setContent(previewer);
+		Control previewer= createPreviewer(fCompareViewerPane);
+		fCompareViewerPane.setContent(previewer);
 		GridData gd= new GridData(GridData.FILL_BOTH);
 		previewer.setLayoutData(gd);
 		applyDialogFont(parent);
@@ -266,8 +276,10 @@ public class CompareResultDialog extends TrayDialog {
 	}
 
 	private void setCompareViewerInput() {
-		if (! fViewer.getControl().isDisposed())
+		if (!fViewer.getControl().isDisposed()) {
 			fViewer.setInput(new DiffNode(new CompareElement(fExpected), new CompareElement(fActual)));
+			fCompareViewerPane.setText(fTestName);
+		}
 	}
 
 	public void setInput(TestElement failedTest) {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultsAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultsAction.java
index 40c1b3d..11d150e 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CompareResultsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ public class CompareResultsAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		TestElement failedTest= fView.getFailedTest();
 		if (fOpenDialog != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CopyFailureListAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CopyFailureListAction.java
index 6bec0cf..f031cfa 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CopyFailureListAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/CopyFailureListAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class CopyFailureListAction extends Action {
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
 		TextTransfer plainTextTransfer = TextTransfer.getInstance();
 
@@ -63,8 +64,7 @@ public class CopyFailureListAction extends Action {
 		TestElement[] failures= fRunner.getAllFailures();
 
 		String lineDelim= System.getProperty("line.separator", "\n");  //$NON-NLS-1$//$NON-NLS-2$
-		for (int i= 0; i < failures.length; i++) {
-			TestElement failure= failures[i];
+		for (TestElement failure : failures) {
 			buf.append(failure.getTestName()).append(lineDelim);
 			String failureTrace= failure.getTrace();
 			if (failureTrace != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/EnableStackFilterAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/EnableStackFilterAction.java
index 90ece2e..c39f7b5 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/EnableStackFilterAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/EnableStackFilterAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ public class EnableStackFilterAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		JUnitPreferencesConstants.setFilterStack(isChecked());
 		fView.refresh();
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/GotoReferencedTestAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/GotoReferencedTestAction.java
index 314e466..8c477ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/GotoReferencedTestAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/GotoReferencedTestAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,12 +110,12 @@ public class GotoReferencedTestAction implements IWorkbenchWindowActionDelegate
 	}
 
 	private IJavaElement[] getSelectedElements(IStructuredSelection selection) {
-		List elements= selection.toList();
+		List<?> elements= selection.toList();
 		int size= elements.size();
 		if (size == 0)
 			return new IJavaElement[0];
 
-		ArrayList result= new ArrayList(size);
+		ArrayList<IJavaElement> result= new ArrayList<IJavaElement>(size);
 
 		for (int i= 0; i < size; i++) {
 			Object e= elements.get(i);
@@ -126,17 +126,17 @@ public class GotoReferencedTestAction implements IWorkbenchWindowActionDelegate
 					types= unit.getTypes();
 				} catch (JavaModelException ex) {
 				}
-				for (int j= 0; j < types.length; j++) {
-					result.add(types[j]);
+				for (IType type : types) {
+					result.add(type);
 				}
 			}
 			else if (e instanceof IMethod || e instanceof IType || e instanceof IField) {
-				result.add(e);
+				result.add((IMember) e);
 			} else {
 				return new IJavaElement[0];
 			}
 		}
-		return (IJavaElement[])result.toArray(new IJavaElement[result.size()]);
+		return result.toArray(new IJavaElement[result.size()]);
 	}
 
 	public void run(IAction action) {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitAddLibraryProposal.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitAddLibraryProposal.java
index b9ac79d..d193e62 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitAddLibraryProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitAddLibraryProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,7 +92,7 @@ public final class JUnitAddLibraryProposal implements IJavaCompletionProposal {
 
 	private static boolean addToClasspath(Shell shell, final IJavaProject project, IClasspathEntry entry, IRunnableContext context) throws JavaModelException {
 		IClasspathEntry[] oldEntries= project.getRawClasspath();
-		ArrayList newEntries= new ArrayList(oldEntries.length + 1);
+		ArrayList<IClasspathEntry> newEntries= new ArrayList<IClasspathEntry>(oldEntries.length + 1);
 		boolean added= false;
 		for (int i= 0; i < oldEntries.length; i++) {
 			IClasspathEntry curr= oldEntries[i];
@@ -127,7 +127,7 @@ public final class JUnitAddLibraryProposal implements IJavaCompletionProposal {
 			newEntries.add(entry);
 		}
 
-		final IClasspathEntry[] newCPEntries= (IClasspathEntry[]) newEntries.toArray(new IClasspathEntry[newEntries.size()]);
+		final IClasspathEntry[] newCPEntries= newEntries.toArray(new IClasspathEntry[newEntries.size()]);
 		// fix for 64974 OCE in New JUnit Test Case wizard while workspace is locked [JUnit]
 		try {
 			context.run(true, false, new IRunnableWithProgress() {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitClasspathFixProcessor.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitClasspathFixProcessor.java
index c31dc78..0a7b94d 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitClasspathFixProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitClasspathFixProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 			fRelevance= relevance;
 		}
 
+		@Override
 		public String getAdditionalProposalInfo() {
 			if (fIsJunit4) {
 				return JUnitMessages.JUnitAddLibraryProposal_junit4_info;
@@ -53,6 +54,7 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 			return JUnitMessages.JUnitAddLibraryProposal_info;
 		}
 
+		@Override
 		public Change createChange(IProgressMonitor monitor) throws CoreException {
 			if (monitor == null) {
 				monitor= new NullProgressMonitor();
@@ -66,7 +68,7 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 					entry= BuildPathSupport.getJUnit3ClasspathEntry();
 				}
 				IClasspathEntry[] oldEntries= fProject.getRawClasspath();
-				ArrayList newEntries= new ArrayList(oldEntries.length + 1);
+				ArrayList<IClasspathEntry> newEntries= new ArrayList<IClasspathEntry>(oldEntries.length + 1);
 				boolean added= false;
 				for (int i= 0; i < oldEntries.length; i++) {
 					IClasspathEntry curr= oldEntries[i];
@@ -101,7 +103,7 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 					newEntries.add(entry);
 				}
 
-				final IClasspathEntry[] newCPEntries= (IClasspathEntry[]) newEntries.toArray(new IClasspathEntry[newEntries.size()]);
+				final IClasspathEntry[] newCPEntries= newEntries.toArray(new IClasspathEntry[newEntries.size()]);
 				Change newClasspathChange= newClasspathChange(fProject, newCPEntries, fProject.getOutputLocation());
 				if (newClasspathChange != null) {
 					return newClasspathChange;
@@ -112,6 +114,7 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 			return new NullChange();
 		}
 
+		@Override
 		public String getDisplayString() {
 			if (fIsJunit4) {
 				return JUnitMessages.JUnitAddLibraryProposa_junit4_label;
@@ -119,10 +122,12 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 			return JUnitMessages.JUnitAddLibraryProposal_label;
 		}
 
+		@Override
 		public Image getImage() {
 			return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_LIBRARY);
 		}
 
+		@Override
 		public int getRelevance() {
 			return fRelevance;
 		}
@@ -132,6 +137,7 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 	private static final int JUNIT4= 2;
 
 
+	@Override
 	public ClasspathFixProposal[] getFixImportProposals(IJavaProject project, String missingType) throws CoreException {
 		String s= missingType;
 		int res= 0;
@@ -145,14 +151,14 @@ public class JUnitClasspathFixProcessor extends ClasspathFixProcessor {
 			res= JUNIT4;
 		}
 		if (res != 0) {
-			ArrayList proposals= new ArrayList();
+			ArrayList<JUnitClasspathFixProposal> proposals= new ArrayList<JUnitClasspathFixProposal>();
 			if ((res & JUNIT4) != 0 && JUnitStubUtility.is50OrHigher(project)) {
 				proposals.add(new JUnitClasspathFixProposal(project, true, 15));
 			}
 			if ((res & JUNIT3) != 0) {
 				proposals.add(new JUnitClasspathFixProposal(project, false, 15));
 			}
-			return (ClasspathFixProposal[]) proposals.toArray(new ClasspathFixProposal[proposals.size()]);
+			return proposals.toArray(new ClasspathFixProposal[proposals.size()]);
 		}
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitCopyAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitCopyAction.java
index ff960a9..b7a93a7 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitCopyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitCopyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public class JUnitCopyAction extends SelectionListenerAction {
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
 		String trace= fView.getTrace();
 		String source= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java
index 9e61ef4..5a1dd9f 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -190,6 +190,8 @@ public final class JUnitMessages extends NLS {
 
 	public static String JUnitPreferencePage_enableassertionscheckbox_label;
 
+	public static String JUnitPreferencePage_showInAllViews_label;
+
 	public static String JUnitQuickFixProcessor_add_assert_description;
 
 	public static String JUnitQuickFixProcessor_apply_problem_description;
@@ -312,5 +314,11 @@ public final class JUnitMessages extends NLS {
 
 	public static String TestRunnerViewPart_clear_history_label;
 
+	public static String TestRunnerViewPart_JUnitPasteAction_cannotpaste_message;
+
+	public static String TestRunnerViewPart_JUnitPasteAction_cannotpaste_title;
+
+	public static String TestRunnerViewPart_JUnitPasteAction_label;
+
 	public static String TestRunnerViewPart_layout_menu;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties
index 82dca4a..6f4c32e 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitMessages.properties
@@ -49,6 +49,7 @@ JUnitContainerWizardPage_warning_java5_required=JUnit 4 requires a Java 5 projec
 JUnitPreferencePage_addpackagedialog_title=Add Packages to Stack Filters
 JUnitPreferencePage_addpackagedialog_message=&Select a package to filter in the failure stack trace:
 JUnitPreferencePage_enableassertionscheckbox_label=Add '-ea' to VM arguments when creating a new &JUnit launch configuration
+JUnitPreferencePage_showInAllViews_label=S&how newly launched test in all JUnit views
 JUnitContainerWizardPage_error_version_not_available=The selected JUnit version is not available.
 
 OpenEditorAction_action_label=&Go to File
@@ -104,6 +105,9 @@ TestRunnerViewPart_toggle_automatic_label=&Automatic
 TestRunnerViewPart_toggle_horizontal_label=&Horizontal
 TestRunnerViewPart_toggle_vertical_label=&Vertical
 TestRunnerViewPart_activate_on_failure_only=Activate on &Error/Failure Only
+TestRunnerViewPart_JUnitPasteAction_cannotpaste_message=Cannot import test results from the clipboard. Please copy a valid URL first.
+TestRunnerViewPart_JUnitPasteAction_cannotpaste_title=Paste
+TestRunnerViewPart_JUnitPasteAction_label=Import &URL from Clipboard
 TestRunnerViewPart_terminate_title=Rerun Test
 TestRunnerViewPart_terminate_message=Terminate currently running tests?
 TestRunnerViewPart_test_run_history=Test Run History...
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
index 5bd5be0..beeb87b 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,7 +64,7 @@ public class JUnitPlugin extends AbstractUIPlugin {
 	/**
 	 * List storing the registered JUnit launch configuration types
 	 */
-	private List fJUnitLaunchConfigTypeIDs;
+	private List<String> fJUnitLaunchConfigTypeIDs;
 
 	private BundleContext fBundleContext;
 
@@ -190,6 +190,7 @@ public class JUnitPlugin extends AbstractUIPlugin {
 	/**
 	 * @see AbstractUIPlugin#start(BundleContext)
 	 */
+	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		fBundleContext= context;
@@ -198,6 +199,7 @@ public class JUnitPlugin extends AbstractUIPlugin {
 	/**
 	 * @see AbstractUIPlugin#stop(BundleContext)
 	 */
+	@Override
 	public void stop(BundleContext context) throws Exception {
 		fIsStopped= true;
 		super.stop(context);
@@ -212,7 +214,7 @@ public class JUnitPlugin extends AbstractUIPlugin {
 	 * @since 3.5
 	 */
 	public Object getService(String serviceName) {
-		ServiceReference reference= fBundleContext.getServiceReference(serviceName);
+		ServiceReference<?> reference= fBundleContext.getServiceReference(serviceName);
 		if (reference == null)
 			return null;
 		return fBundleContext.getService(reference);
@@ -222,15 +224,15 @@ public class JUnitPlugin extends AbstractUIPlugin {
 	 * Loads the registered JUnit launch configurations
 	 */
 	private void loadLaunchConfigTypeIDs() {
-		fJUnitLaunchConfigTypeIDs= new ArrayList();
+		fJUnitLaunchConfigTypeIDs= new ArrayList<String>();
 		IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(ID_EXTENSION_POINT_JUNIT_LAUNCHCONFIGS);
 		if (extensionPoint == null) {
 			return;
 		}
 		IConfigurationElement[] configs= extensionPoint.getConfigurationElements();
 
-		for (int i= 0; i < configs.length; i++) {
-			String configTypeID= configs[i].getAttribute("configTypeID"); //$NON-NLS-1$
+		for (IConfigurationElement config : configs) {
+			String configTypeID= config.getAttribute("configTypeID"); //$NON-NLS-1$
 			fJUnitLaunchConfigTypeIDs.add(configTypeID);
 		}
 	}
@@ -238,7 +240,7 @@ public class JUnitPlugin extends AbstractUIPlugin {
 	/**
 	 * @return a list of all JUnit launch configuration types
 	 */
-	public List/*<String>*/ getJUnitLaunchConfigTypeIDs() {
+	public List<String> getJUnitLaunchConfigTypeIDs() {
 		if (fJUnitLaunchConfigTypeIDs == null) {
 			loadLaunchConfigTypeIDs();
 		}
@@ -273,8 +275,8 @@ public class JUnitPlugin extends AbstractUIPlugin {
 			return bundles;
 
 		// Accessing unresolved bundle
-		ServiceReference serviceRef= fBundleContext.getServiceReference(PackageAdmin.class.getName());
-		PackageAdmin admin= (PackageAdmin)fBundleContext.getService(serviceRef);
+		ServiceReference<PackageAdmin> serviceRef= fBundleContext.getServiceReference(PackageAdmin.class);
+		PackageAdmin admin= fBundleContext.getService(serviceRef);
 		bundles= admin.getBundles(bundleName, version);
 		if (bundles != null && bundles.length > 0)
 			return bundles;
@@ -311,7 +313,7 @@ public class JUnitPlugin extends AbstractUIPlugin {
 				return null;
 			TestRunnerViewPart view= (TestRunnerViewPart) page.findView(TestRunnerViewPart.NAME);
 			if (view == null) {
-				// create and show the result view if it isn't created yet.
+				//	create and show the result view if it isn't created yet.
 				return (TestRunnerViewPart) page.showView(TestRunnerViewPart.NAME, null, IWorkbenchPage.VIEW_VISIBLE);
 			} else {
 				return view;
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPreferencePage.java
index f597da5..14bb68d 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,8 +98,8 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 	private static final Image IMG_CUNIT= JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_CLASS);
 	private static final Image IMG_PKG= JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
 
-	// enable assertions widget
 	private Button fEnableAssertionsCheckBox;
+	private Button fShowInAllViewsCheckBox;
 
 	// Step filter widgets
 	private Label fFilterViewerLabel;
@@ -151,6 +151,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 			fChecked= checked;
 		}
 
+		@Override
 		public boolean equals(Object o) {
 			if (!(o instanceof Filter))
 				return false;
@@ -159,6 +160,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 			return (getName().equals(other.getName()));
 		}
 
+		@Override
 		public int hashCode() {
 			return fName.hashCode();
 		}
@@ -168,6 +170,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 	 * Sorter for the filter table; sorts alphabetically ascending.
 	 */
 	private static class FilterViewerSorter extends ViewerComparator {
+		@Override
 		public int compare(Viewer viewer, Object e1, Object e2) {
 			ILabelProvider lprov= (ILabelProvider) ((ContentViewer) viewer).getLabelProvider();
 			String name1= lprov.getText(e1);
@@ -200,6 +203,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 			return (column == 0) ? getText(object) : ""; //$NON-NLS-1$
 		}
 
+		@Override
 		public String getText(Object element) {
 			return TextProcessor.process(((Filter) element).getName());
 		}
@@ -232,33 +236,33 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 	 */
 	private class StackFilterContentProvider implements IStructuredContentProvider {
 
-		private List fFilters;
+		private List<Filter> fFilters;
 
 		public StackFilterContentProvider() {
-			List active= createActiveStackFiltersList();
-			List inactive= createInactiveStackFiltersList();
+			List<String> active= createActiveStackFiltersList();
+			List<String> inactive= createInactiveStackFiltersList();
 			populateFilters(active, inactive);
 		}
 
 		public void setDefaults() {
 			fFilterViewer.remove(fFilters.toArray());
-			List active= JUnitPreferencesConstants.createDefaultStackFiltersList();
-			List inactive= new ArrayList();
+			List<String> active= JUnitPreferencesConstants.createDefaultStackFiltersList();
+			List<String> inactive= new ArrayList<String>();
 			populateFilters(active, inactive);
 		}
 
-		protected void populateFilters(List activeList, List inactiveList) {
-			fFilters= new ArrayList(activeList.size() + inactiveList.size());
+		protected void populateFilters(List<String> activeList, List<String> inactiveList) {
+			fFilters= new ArrayList<Filter>(activeList.size() + inactiveList.size());
 			populateList(activeList, true);
 			if (inactiveList.size() != 0)
 				populateList(inactiveList, false);
 		}
 
-		protected void populateList(List list, boolean checked) {
-			Iterator iterator= list.iterator();
+		protected void populateList(List<String> list, boolean checked) {
+			Iterator<String> iterator= list.iterator();
 
 			while (iterator.hasNext()) {
-				String name= (String) iterator.next();
+				String name= iterator.next();
 				addFilter(name, checked);
 			}
 		}
@@ -275,20 +279,20 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 		}
 
 		public void saveFilters() {
-			List active= new ArrayList(fFilters.size());
-			List inactive= new ArrayList(fFilters.size());
-			Iterator iterator= fFilters.iterator();
+			List<String> active= new ArrayList<String>(fFilters.size());
+			List<String> inactive= new ArrayList<String>(fFilters.size());
+			Iterator<Filter> iterator= fFilters.iterator();
 			while (iterator.hasNext()) {
-				Filter filter= (Filter) iterator.next();
+				Filter filter= iterator.next();
 				String name= filter.getName();
 				if (filter.isChecked())
 					active.add(name);
 				else
 					inactive.add(name);
 			}
-			String pref= JUnitPreferencesConstants.serializeList((String[]) active.toArray(new String[active.size()]));
+			String pref= JUnitPreferencesConstants.serializeList(active.toArray(new String[active.size()]));
 			getPreferenceStore().setValue(JUnitPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, pref);
-			pref= JUnitPreferencesConstants.serializeList((String[]) inactive.toArray(new String[inactive.size()]));
+			pref= JUnitPreferencesConstants.serializeList(inactive.toArray(new String[inactive.size()]));
 			getPreferenceStore().setValue(JUnitPreferencesConstants.PREF_INACTIVE_FILTERS_LIST, pref);
 		}
 
@@ -319,9 +323,10 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 	public JUnitPreferencePage() {
 		super();
 		setDescription(JUnitMessages.JUnitPreferencePage_description);
-		setPreferenceStore(new ScopedPreferenceStore(new InstanceScope(),JUnitCorePlugin.CORE_PLUGIN_ID));
+		setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE,JUnitCorePlugin.CORE_PLUGIN_ID));
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJUnitHelpContextIds.JUNIT_PREFERENCE_PAGE);
 
@@ -337,6 +342,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 		composite.setLayoutData(data);
 
 		createEnableAssertionsCheckbox(composite);
+		createShowInAllViewsCheckbox(composite);
 		createStackFilterPreferences(composite);
 		Dialog.applyDialogFont(composite);
 		return composite;
@@ -351,6 +357,15 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 		setAssertionCheckBoxSelection(AssertionVMArg.getEnableAssertionsPreference());
 	}
 
+	private void createShowInAllViewsCheckbox(Composite container) {
+		fShowInAllViewsCheckBox= new Button(container, SWT.CHECK | SWT.WRAP);
+		fShowInAllViewsCheckBox.setText(JUnitMessages.JUnitPreferencePage_showInAllViews_label);
+		GridData gd= getButtonGridData(fShowInAllViewsCheckBox);
+		fShowInAllViewsCheckBox.setLayoutData(gd);
+		SWTUtil.setButtonDimensionHint(fShowInAllViewsCheckBox);
+		setShowInAllViewsCheckBoxSelection(JUnitUIPreferencesConstants.getShowInAllViews());
+	}
+	
 	/**
 	 * Programatic access to enable assertions checkbox
 	 * @return boolean indicating check box selected or not
@@ -363,6 +378,14 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 		fEnableAssertionsCheckBox.setSelection(selected);
 	}
 
+	public boolean getShowInAllViewsCheckBoxSelection() {
+		return fShowInAllViewsCheckBox.getSelection();
+	}
+	
+	public void setShowInAllViewsCheckBoxSelection(boolean selected) {
+		fShowInAllViewsCheckBox.setSelection(selected);
+	}
+	
 	/*
 	 * Create a group to contain the step filter related widgets
 	 */
@@ -390,7 +413,8 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 
 		fFilterTable= new Table(layouter, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
 
-		new TableColumn(fFilterTable, SWT.NONE);
+		@SuppressWarnings("unused")
+		TableColumn tableColumn= new TableColumn(fFilterTable, SWT.NONE);
 		fFilterViewer= new CheckboxTableViewer(fFilterTable);
 		fTableEditor= new TableEditor(fFilterTable);
 		fFilterViewer.setLabelProvider(new FilterLabelProvider());
@@ -543,6 +567,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 	private void setEditorListeners(Text text) {
 		// CR means commit the changes, ESC means abort and don't commit
 		text.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent event) {
 				if (event.character == SWT.CR) {
 					if (fInvalidEditorText != null) {
@@ -558,6 +583,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 		});
 		// Consider loss of focus on the editor to mean the same as CR
 		text.addFocusListener(new FocusAdapter() {
+			@Override
 			public void focusLost(FocusEvent event) {
 				if (fInvalidEditorText != null) {
 					fEditorText.setText(fInvalidEditorText);
@@ -591,8 +617,8 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 			// otherwise, commit the new value if not a duplicate
 		} else {
 			Object[] filters= fStackFilterContentProvider.getElements(null);
-			for (int i= 0; i < filters.length; i++) {
-				Filter filter= (Filter) filters[i];
+			for (Object filter2 : filters) {
+				Filter filter= (Filter) filter2;
 				if (filter.getName().equals(trimmedValue)) {
 					removeNewFilter();
 					cleanupEditor();
@@ -696,8 +722,8 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 		if (packages == null)
 			return;
 
-		for (int i= 0; i < packages.length; i++) {
-			IJavaElement pkg= (IJavaElement) packages[i];
+		for (Object package1 : packages) {
+			IJavaElement pkg= (IJavaElement) package1;
 
 			String filter= pkg.getElementName();
 			if (filter.length() < 1)
@@ -721,12 +747,15 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 		fFilterViewer.setAllChecked(check);
 	}
 
+	@Override
 	public boolean performOk() {
 		AssertionVMArg.setEnableAssertionsPreference(getAssertionCheckBoxSelection());
+		JUnitUIPreferencesConstants.setShowInAllViews(getShowInAllViewsCheckBoxSelection());
 		fStackFilterContentProvider.saveFilters();
 		return true;
 	}
 
+	@Override
 	protected void performDefaults() {
 		setDefaultValues();
 		super.performDefaults();
@@ -734,6 +763,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 
 	private void setDefaultValues() {
 		fEnableAssertionsCheckBox.setSelection(false);
+		fShowInAllViewsCheckBox.setSelection(false);
 		fStackFilterContentProvider.setDefaults();
 	}
 
@@ -742,7 +772,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 	 *
 	 * @return list
 	 */
-	protected List createActiveStackFiltersList() {
+	protected List<String> createActiveStackFiltersList() {
 		return Arrays.asList(JUnitPreferencesConstants.getFilterPatterns());
 	}
 
@@ -751,7 +781,7 @@ public class JUnitPreferencePage extends PreferencePage implements IWorkbenchPre
 	 *
 	 * @return list
 	 */
-	protected List createInactiveStackFiltersList() {
+	protected List<String> createInactiveStackFiltersList() {
 		String[] strings=
 			JUnitPreferencesConstants.parseList(getPreferenceStore().getString(JUnitPreferencesConstants.PREF_INACTIVE_FILTERS_LIST));
 		return Arrays.asList(strings);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java
index 01e5619..1e5fb89 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class JUnitProgressBar extends Canvas {
 		super(parent, SWT.NONE);
 
 		addControlListener(new ControlAdapter() {
+			@Override
 			public void controlResized(ControlEvent e) {
 				fColorBarWidth= scale(fCurrentTickCount);
 				redraw();
@@ -150,6 +151,7 @@ public class JUnitProgressBar extends Canvas {
 		gc.fillRectangle(1, 1, fColorBarWidth, rect.height-2);
 	}
 
+	@Override
 	public Point computeSize(int wHint, int hHint, boolean changed) {
 		checkWidget();
 		Point size= new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitQuickFixProcessor.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitQuickFixProcessor.java
index abbbb54..440f766 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitQuickFixProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitQuickFixProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,7 +74,7 @@ import org.eclipse.jdt.ui.text.java.ClasspathFixProcessor.ClasspathFixProposal;
 
 public class JUnitQuickFixProcessor implements IQuickFixProcessor {
 
-	private static final HashSet ASSERT_METHOD_NAMES= new HashSet();
+	private static final HashSet<String> ASSERT_METHOD_NAMES= new HashSet<String>();
 
 	public JUnitQuickFixProcessor() {
 		ASSERT_METHOD_NAMES.add("fail"); //$NON-NLS-1$
@@ -101,9 +101,8 @@ public class JUnitQuickFixProcessor implements IQuickFixProcessor {
 	 * @see org.eclipse.jdt.ui.text.java.IQuickFixProcessor#getCorrections(org.eclipse.jdt.ui.text.java.IInvocationContext, org.eclipse.jdt.ui.text.java.IProblemLocation[])
 	 */
 	public IJavaCompletionProposal[] getCorrections(final IInvocationContext context, IProblemLocation[] locations)  {
-		ArrayList res= null;
-		for (int i= 0; i < locations.length; i++) {
-			IProblemLocation problem= locations[i];
+		ArrayList<IJavaCompletionProposal> res= null;
+		for (IProblemLocation problem : locations) {
 			int id= problem.getProblemId();
 			if (IProblem.UndefinedType == id) {
 				res= getAddJUnitToBuildPathProposals(context, problem, res);
@@ -114,16 +113,16 @@ public class JUnitQuickFixProcessor implements IQuickFixProcessor {
 		if (res == null || res.isEmpty()) {
 			return null;
 		}
-		return (IJavaCompletionProposal[]) res.toArray(new IJavaCompletionProposal[res.size()]);
+		return res.toArray(new IJavaCompletionProposal[res.size()]);
 	}
 
-	private ArrayList getAddAssertImportProposals(IInvocationContext context, IProblemLocation problem, ArrayList proposals) {
+	private ArrayList<IJavaCompletionProposal> getAddAssertImportProposals(IInvocationContext context, IProblemLocation problem, ArrayList<IJavaCompletionProposal> proposals) {
 		String[] args= problem.getProblemArguments();
 		if (args.length > 1) {
 			String methodName= args[1];
 			if (ASSERT_METHOD_NAMES.contains(methodName) && isInsideJUnit4Test(context)) {
 				if (proposals == null) {
-					proposals= new ArrayList();
+					proposals= new ArrayList<IJavaCompletionProposal>();
 				}
 				proposals.add(new AddAssertProposal(context.getASTRoot(), methodName, 9));
 				proposals.add(new AddAssertProposal(context.getASTRoot(), "*", 10)); //$NON-NLS-1$
@@ -132,7 +131,7 @@ public class JUnitQuickFixProcessor implements IQuickFixProcessor {
 		return proposals;
 	}
 
-	private ArrayList getAddJUnitToBuildPathProposals(IInvocationContext context, IProblemLocation location, ArrayList proposals) {
+	private ArrayList<IJavaCompletionProposal> getAddJUnitToBuildPathProposals(IInvocationContext context, IProblemLocation location, ArrayList<IJavaCompletionProposal> proposals) {
 		try {
 			ICompilationUnit unit= context.getCompilationUnit();
 			String qualifiedName= null;
@@ -156,10 +155,10 @@ public class JUnitQuickFixProcessor implements IQuickFixProcessor {
 					return proposals;
 				}
 				ClasspathFixProposal[] fixProposals= ClasspathFixProcessor.getContributedFixImportProposals(javaProject, qualifiedName, null);
-				for (int i= 0; i < fixProposals.length; i++) {
+				for (ClasspathFixProposal fixProposal : fixProposals) {
 					if (proposals == null)
-						proposals= new ArrayList();
-					proposals.add(new JUnitClasspathFixCorrectionProposal(javaProject, fixProposals[i], getImportRewrite(context.getASTRoot(), qualifiedName)));
+						proposals= new ArrayList<IJavaCompletionProposal>();
+					proposals.add(new JUnitClasspathFixCorrectionProposal(javaProject, fixProposal, getImportRewrite(context.getASTRoot(), qualifiedName)));
 				}
 			}
 		} catch (JavaModelException e) {
@@ -190,8 +189,8 @@ public class JUnitQuickFixProcessor implements IQuickFixProcessor {
 			IMethodBinding binding= ((MethodDeclaration) node).resolveBinding();
 			if (binding != null) {
 				IAnnotationBinding[] annotations= binding.getAnnotations();
-				for (int i= 0; i < annotations.length; i++) {
-					final ITypeBinding annotationType= annotations[i].getAnnotationType();
+				for (IAnnotationBinding annotation : annotations) {
+					final ITypeBinding annotationType= annotation.getAnnotationType();
 					if (annotationType != null && JUnitCorePlugin.JUNIT4_ANNOTATION_NAME.equals(annotationType.getQualifiedName()))
 						return true;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitUIPreferencesConstants.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitUIPreferencesConstants.java
new file mode 100644
index 0000000..bf72ab7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitUIPreferencesConstants.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.junit.ui;
+
+import org.osgi.service.prefs.BackingStoreException;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+/**
+ * Defines constants which are used to refer to values in the plugin's preference store.
+ * 
+ * @since 3.7
+ */
+public class JUnitUIPreferencesConstants {
+	/**
+	 * Boolean preference controlling whether newly launched JUnit tests should be shown in all
+	 * JUnit views (in all windows).
+	 */
+	public static final String SHOW_IN_ALL_VIEWS= JUnitPlugin.PLUGIN_ID + ".show_in_all_views"; //$NON-NLS-1$
+
+	private JUnitUIPreferencesConstants() {
+		// no instance
+	}
+
+	public static boolean getShowInAllViews() {
+		return Platform.getPreferencesService().getBoolean(JUnitPlugin.PLUGIN_ID, SHOW_IN_ALL_VIEWS, false, null);
+	}
+
+	public static void setShowInAllViews(boolean show) {
+		IEclipsePreferences preferences= InstanceScope.INSTANCE.getNode(JUnitPlugin.PLUGIN_ID);
+		preferences.putBoolean(SHOW_IN_ALL_VIEWS, show);
+		try {
+			preferences.flush();
+		} catch (BackingStoreException e) {
+			JUnitPlugin.log(e);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAction.java
index 76bf2da..3d9bfa7 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ public abstract class OpenEditorAction extends Action {
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
 		IEditorPart editor= null;
 		try {
@@ -112,9 +113,13 @@ public abstract class OpenEditorAction extends Action {
 			PlatformUI.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() {
 				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 					try {
-						if (project == null) {
+						if (project != null) {
+							result[0]= internalFindType(project, dottedName, new HashSet<IJavaProject>(), monitor);
+						}
+						if (result[0] == null) {
 							int lastDot= dottedName.lastIndexOf('.');
 							TypeNameMatchRequestor nameMatchRequestor= new TypeNameMatchRequestor() {
+								@Override
 								public void acceptTypeNameMatch(TypeNameMatch match) {
 									result[0]= match.getType();
 								}
@@ -129,8 +134,6 @@ public abstract class OpenEditorAction extends Action {
 									nameMatchRequestor,
 									IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
 									monitor);
-						} else {
-							result[0]= internalFindType(project, dottedName, new HashSet(), monitor);
 						}
 					} catch (JavaModelException e) {
 						throw new InvocationTargetException(e);
@@ -145,7 +148,7 @@ public abstract class OpenEditorAction extends Action {
 		return result[0];
 	}
 
-	private IType internalFindType(IJavaProject project, String className, Set/*<IJavaProject>*/ visitedProjects, IProgressMonitor monitor) throws JavaModelException {
+	private IType internalFindType(IJavaProject project, String className, Set<IJavaProject> visitedProjects, IProgressMonitor monitor) throws JavaModelException {
 		try {
 			if (visitedProjects.contains(project))
 				return null;
@@ -159,8 +162,8 @@ public abstract class OpenEditorAction extends Action {
 			String[] requiredProjectNames= project.getRequiredProjectNames();
 			IProgressMonitor reqMonitor= new SubProgressMonitor(monitor, 1);
 			reqMonitor.beginTask("", requiredProjectNames.length); //$NON-NLS-1$
-			for (int i= 0; i < requiredProjectNames.length; i++) {
-				IJavaProject requiredProject= javaModel.getJavaProject(requiredProjectNames[i]);
+			for (String requiredProjectName : requiredProjectNames) {
+				IJavaProject requiredProject= javaModel.getJavaProject(requiredProjectName);
 				if (requiredProject.exists()) {
 					type= internalFindType(requiredProject, className, visitedProjects, new SubProgressMonitor(reqMonitor, 1));
 					if (type != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAtLineAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAtLineAction.java
index 77c2d8c..eed984a 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAtLineAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenEditorAtLineAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class OpenEditorAtLineAction extends OpenEditorAction {
 		fLineNumber= line;
 	}
 
+	@Override
 	protected void reveal(ITextEditor textEditor) {
 		if (fLineNumber >= 0) {
 			try {
@@ -48,6 +49,7 @@ public class OpenEditorAtLineAction extends OpenEditorAction {
 		}
 	}
 
+	@Override
 	protected IJavaElement findElement(IJavaProject project, String className) throws CoreException {
 		return findType(project, className);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenTestAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenTestAction.java
index 903db11..4d7e7ad 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenTestAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/OpenTestAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,8 @@ import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.JavaConventions;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 
 import org.eclipse.jdt.internal.corext.util.JavaConventionsUtil;
@@ -48,7 +50,7 @@ public class OpenTestAction extends OpenEditorAction {
 	private int fLineNumber= -1;
 
 	public OpenTestAction(TestRunnerViewPart testRunnerPart, TestCaseElement testCase) {
-		this(testRunnerPart, testCase.getClassName(), extractRealMethodName(testCase.getTestMethodName()), true);
+		this(testRunnerPart, testCase.getClassName(), extractRealMethodName(testCase), true);
 		String trace= testCase.getTrace();
 		if (trace != null) {
 			String rawClassName= TestElement.extractRawClassName(testCase.getTestName());
@@ -79,8 +81,14 @@ public class OpenTestAction extends OpenEditorAction {
 		fMethodName= method;
 	}
 
-	private static String extractRealMethodName(String testMethodName) {
+	private static String extractRealMethodName(TestCaseElement testCase) {
+		//workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=334864 :
+		if (testCase.isIgnored() && JavaConventions.validateJavaTypeName(testCase.getTestName(), JavaCore.VERSION_1_5, JavaCore.VERSION_1_5).getSeverity() != IStatus.ERROR) {
+			return null;
+		}
+		
 		//workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=275308 :
+		String testMethodName= testCase.getTestMethodName();
 		for (int i= 0; i < testMethodName.length(); i++) {
 			if (!Character.isJavaIdentifierPart(testMethodName.charAt(i))) {
 				return testMethodName.substring(0, i);
@@ -89,6 +97,7 @@ public class OpenTestAction extends OpenEditorAction {
 		return testMethodName;
 	}
 
+	@Override
 	protected IJavaElement findElement(IJavaProject project, String className) throws JavaModelException {
 		IType type= findType(project, className);
 		if (type == null)
@@ -100,9 +109,9 @@ public class OpenTestAction extends OpenEditorAction {
 		IMethod method= findMethod(type);
 		if (method == null) {
 			ITypeHierarchy typeHierarchy= type.newSupertypeHierarchy(null);
-			IType[] types= typeHierarchy.getAllSuperclasses(type);
-			for (int i= 0; i < types.length; i++) {
-				method= findMethod(types[i]);
+			IType[] supertypes= typeHierarchy.getAllSuperclasses(type);
+			for (IType supertype : supertypes) {
+				method= findMethod(supertype);
 				if (method != null)
 					break;
 			}
@@ -128,6 +137,7 @@ public class OpenTestAction extends OpenEditorAction {
 		return null;
 	}
 
+	@Override
 	protected void reveal(ITextEditor textEditor) {
 		if (fLineNumber >= 0) {
 			try {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RerunAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RerunAction.java
index 8b7fbe7..69c9d79 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RerunAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RerunAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ public class RerunAction extends Action {
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
 		fTestRunner.rerunTest(fTestId, fClassName, fTestName, fLaunchMode);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ScrollLockAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ScrollLockAction.java
index b7e1f1c..34eadf8 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ScrollLockAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ScrollLockAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ public class ScrollLockAction extends Action {
 	/**
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
+	@Override
 	public void run() {
 		fRunnerViewPart.setAutoScroll(!isChecked());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowNextFailureAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowNextFailureAction.java
index 4c40904..61700dd 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowNextFailureAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowNextFailureAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ class ShowNextFailureAction extends Action {
 		fPart= part;
 	}
 
+	@Override
 	public void run() {
 		fPart.selectNextFailure();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowPreviousFailureAction.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowPreviousFailureAction.java
index ebae67d..1cf0871 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowPreviousFailureAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/ShowPreviousFailureAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ class ShowPreviousFailureAction extends Action {
 		fPart= part;
 	}
 
+	@Override
 	public void run() {
 		fPart.selectPreviousFailure();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestMethodSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestMethodSelectionDialog.java
index 9215e74..0a6f049 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestMethodSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestMethodSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,8 +59,9 @@ public class TestMethodSelectionDialog extends ElementListSelectionDialog {
 	private IJavaElement fElement;
 
 	public static class TestReferenceCollector extends SearchRequestor {
-		Set fResult= new HashSet(200);
+		Set<IJavaElement> fResult= new HashSet<IJavaElement>(200);
 
+		@Override
 		public void acceptSearchMatch(SearchMatch match) throws CoreException {
 			IJavaElement enclosingElement= (IJavaElement) match.getElement();
 			if (enclosingElement.getElementName().startsWith("test")) //$NON-NLS-1$
@@ -80,6 +81,7 @@ public class TestMethodSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see Windows#configureShell
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJUnitHelpContextIds.TEST_SELECTION_DIALOG);
@@ -88,6 +90,7 @@ public class TestMethodSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see Window#open()
 	 */
+	@Override
 	public int open() {
 		Object[] elements;
 		IType testType= findTestType();
@@ -116,11 +119,10 @@ public class TestMethodSelectionDialog extends ElementListSelectionDialog {
 	private IType findTestType() {
 		String qualifiedName= JUnitCorePlugin.TEST_INTERFACE_NAME;
 		IJavaProject[] projects;
-		Set result= new HashSet();
+		Set<IType> result= new HashSet<IType>();
 		try {
 			projects= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()).getJavaProjects();
-			for (int i= 0; i < projects.length; i++) {
-				IJavaProject project= projects[i];
+			for (IJavaProject project : projects) {
 				IType type= project.findType(qualifiedName);
 				if (type != null)
 					result.add(type);
@@ -140,23 +142,23 @@ public class TestMethodSelectionDialog extends ElementListSelectionDialog {
 		return selectTestType(result);
 	}
 
-	private IType selectTestType(Set result) {
+	private IType selectTestType(Set<IType> result) {
 		ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_ROOT);
 		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getParentShell(), labelProvider);
 		dialog.setTitle(JUnitMessages.TestMethodSelectionDialog_dialog_title);
 		String msg= Messages.format(JUnitMessages.TestMethodSelectionDialog_testproject, BasicElementLabels.getJavaElementName("junit.framework.Test")); //$NON-NLS-1$
 		dialog.setMessage(msg);
 		IJavaProject[] projects= new IJavaProject[result.size()];
-		IType[] testTypes= (IType[]) result.toArray(new IType[result.size()]);
+		IType[] testTypes= result.toArray(new IType[result.size()]);
 		for (int i= 0; i < projects.length; i++)
 			projects[i]= testTypes[i].getJavaProject();
 		dialog.setElements(projects);
 		if (dialog.open() == Window.CANCEL)
 			return null;
 		IJavaProject project= (IJavaProject) dialog.getFirstResult();
-		for (int i= 0; i < testTypes.length; i++) {
-			if (testTypes[i].getJavaProject().equals(project))
-				return testTypes[i];
+		for (IType testType : testTypes) {
+			if (testType.getJavaProject().equals(project))
+				return testType;
 		}
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java
index 0ceb5aa..67cd64b 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestRunnerViewPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ import org.eclipse.swt.dnd.DropTargetAdapter;
 import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.URLTransfer;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.graphics.Image;
@@ -66,6 +67,7 @@ import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.IHandler;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -83,6 +85,7 @@ import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
@@ -205,6 +208,7 @@ public class TestRunnerViewPart extends ViewPart {
 
 	private StopAction fStopAction;
 	private JUnitCopyAction fCopyAction;
+	private Action fPasteAction;
 
 	private Action fRerunLastTestAction;
 	private IHandlerActivation fRerunLastActivation;
@@ -250,7 +254,7 @@ public class TestRunnerViewPart extends ViewPart {
 	final Image fSuiteFailIcon;
 	final Image fSuiteRunningIcon;
 
-	final List fImagesToDispose;
+	final List<Image> fImagesToDispose;
 
 	// Persistence tags.
 	static final String TAG_PAGE= "page"; //$NON-NLS-1$
@@ -335,61 +339,72 @@ public class TestRunnerViewPart extends ViewPart {
 	protected boolean fPartIsVisible= false;
 
 
-	private class RunnerViewHistory extends ViewHistory {
+	private class RunnerViewHistory extends ViewHistory<TestRunSession> {
 
+		@Override
 		public void configureHistoryListAction(IAction action) {
 			action.setText(JUnitMessages.TestRunnerViewPart_history);
 		}
 
+		@Override
 		public void configureHistoryDropDownAction(IAction action) {
 			action.setToolTipText(JUnitMessages.TestRunnerViewPart_test_run_history);
 			JUnitPlugin.setLocalImageDescriptors(action, "history_list.gif"); //$NON-NLS-1$
 		}
 
+		@Override
 		public Action getClearAction() {
 			return new ClearAction();
 		}
 
+		@Override
 		public String getHistoryListDialogTitle() {
 			return JUnitMessages.TestRunnerViewPart_test_runs;
 		}
 
+		@Override
 		public String getHistoryListDialogMessage() {
 			return JUnitMessages.TestRunnerViewPart_select_test_run;
 		}
 
+		@Override
 		public Shell getShell() {
 			return fParent.getShell();
 		}
 
-		public List getHistoryEntries() {
+		@Override
+		public List<TestRunSession> getHistoryEntries() {
 			return JUnitCorePlugin.getModel().getTestRunSessions();
 		}
 
-		public Object getCurrentEntry() {
+		@Override
+		public TestRunSession getCurrentEntry() {
 			return fTestRunSession;
 		}
 
-		public void setActiveEntry(Object entry) {
-			TestRunSession deactivatedSession= setActiveTestRunSession((TestRunSession) entry);
+		@Override
+		public void setActiveEntry(TestRunSession entry) {
+			TestRunSession deactivatedSession= setActiveTestRunSession(entry);
 			if (deactivatedSession != null)
 				deactivatedSession.swapOut();
 		}
 
-		public void setHistoryEntries(List remainingEntries, Object activeEntry) {
-			setActiveTestRunSession((TestRunSession) activeEntry);
+		@Override
+		public void setHistoryEntries(List<TestRunSession> remainingEntries, TestRunSession activeEntry) {
+			setActiveTestRunSession(activeEntry);
 
-			List testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
+			List<TestRunSession> testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
 			testRunSessions.removeAll(remainingEntries);
-			for (Iterator iter= testRunSessions.iterator(); iter.hasNext();) {
-				JUnitCorePlugin.getModel().removeTestRunSession((TestRunSession) iter.next());
+			for (TestRunSession testRunSession : testRunSessions) {
+				JUnitCorePlugin.getModel().removeTestRunSession(testRunSession);
 			}
-			for (Iterator iter= remainingEntries.iterator(); iter.hasNext();) {
-				TestRunSession remaining= (TestRunSession) iter.next();
+			for (Iterator<TestRunSession> iter= remainingEntries.iterator(); iter.hasNext();) {
+				TestRunSession remaining= iter.next();
 				remaining.swapOut();
 			}
 		}
 
+		@Override
 		public ImageDescriptor getImageDescriptor(Object element) {
 			TestRunSession session= (TestRunSession) element;
 			if (session.isStopped())
@@ -409,8 +424,8 @@ public class TestRunnerViewPart extends ViewPart {
 				return fSuiteIconDescriptor;
 		}
 
-		public String getText(Object element) {
-			TestRunSession session= (TestRunSession) element;
+		@Override
+		public String getText(TestRunSession session) {
 			String testRunLabel= BasicElementLabels.getJavaElementName(session.getTestRunName());
 			if (session.getStartTime() <= 0) {
 				return testRunLabel;
@@ -420,23 +435,28 @@ public class TestRunnerViewPart extends ViewPart {
 			}
 		}
 
+		@Override
 		public void addMenuEntries(MenuManager manager) {
 			manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new ImportTestRunSessionAction(fParent.getShell()));
 			manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new ImportTestRunSessionFromURLAction(fParent.getShell()));
+			manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, fPasteAction);
 			if (fTestRunSession != null)
 				manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new ExportTestRunSessionAction(fParent.getShell(), fTestRunSession));
 		}
 
+		@Override
 		public String getMaxEntriesMessage() {
 			return JUnitMessages.TestRunnerViewPart_max_remembered;
 		}
 
+		@Override
 		public int getMaxEntries() {
 			return Platform.getPreferencesService().getInt(JUnitCorePlugin.CORE_PLUGIN_ID, JUnitPreferencesConstants.MAX_TEST_RUNS, 10, null);
 		}
 
+		@Override
 		public void setMaxEntries(int maxEntries) {
-			new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putInt(JUnitPreferencesConstants.MAX_TEST_RUNS, maxEntries);
+			InstanceScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putInt(JUnitPreferencesConstants.MAX_TEST_RUNS, maxEntries);
 		}
 	}
 
@@ -448,6 +468,7 @@ public class TestRunnerViewPart extends ViewPart {
 			fShell= shell;
 		}
 
+		@Override
 		public void run() {
 			FileDialog importDialog= new FileDialog(fShell, SWT.OPEN);
 			importDialog.setText(JUnitMessages.TestRunnerViewPart_ImportTestRunSessionAction_title);
@@ -473,13 +494,54 @@ public class TestRunnerViewPart extends ViewPart {
 		}
 	}
 	
+	private static class JUnitPasteAction extends Action {
+		private final Shell fShell;
+		private Clipboard fClipboard;
+		
+		public JUnitPasteAction(Shell shell, Clipboard clipboard) {
+			super(JUnitMessages.TestRunnerViewPart_JUnitPasteAction_label);
+			Assert.isNotNull(clipboard);
+			fShell= shell;
+			fClipboard= clipboard;
+		}
+		
+		@Override
+		public void run() {
+			String urlData= (String) fClipboard.getContents(URLTransfer.getInstance());
+			if (urlData == null) {
+				urlData= (String) fClipboard.getContents(TextTransfer.getInstance());
+			}
+			if (urlData != null && urlData.length() > 0) {
+				if (isValidUrl(urlData)) {
+					importTestRunSession(urlData);
+					return;
+				}
+			}
+			MessageDialog.openInformation(fShell,
+					JUnitMessages.TestRunnerViewPart_JUnitPasteAction_cannotpaste_title,
+					JUnitMessages.TestRunnerViewPart_JUnitPasteAction_cannotpaste_message
+			);
+		}
+
+		private boolean isValidUrl(String urlData) {
+			try {
+				@SuppressWarnings("unused")
+				URL url= new URL(urlData);
+			} catch (MalformedURLException e) {
+				return false;
+			}
+			return true;
+		}
+	}
+	
 	private static class ImportTestRunSessionFromURLAction extends Action {
 		private static class URLValidator implements IInputValidator {
 			public String isValid(String newText) {
 				if (newText.length() == 0)
 					return null;
 				try {
-					new URL(newText);
+					@SuppressWarnings("unused")
+					URL url= new URL(newText);
 					return null;
 				} catch (MalformedURLException e) {
 					return JUnitMessages.TestRunnerViewPart_ImportTestRunSessionFromURLAction_invalid_url + e.getLocalizedMessage();
@@ -496,6 +558,7 @@ public class TestRunnerViewPart extends ViewPart {
 			fShell= shell;
 		}
 		
+		@Override
 		public void run() {
 			String title= JUnitMessages.TestRunnerViewPart_ImportTestRunSessionAction_title;
 			String message= JUnitMessages.TestRunnerViewPart_ImportTestRunSessionFromURLAction_url;
@@ -506,6 +569,7 @@ public class TestRunnerViewPart extends ViewPart {
 			IInputValidator validator= new URLValidator();
 			
 			InputDialog inputDialog= new InputDialog(fShell, title, message, url, validator) {
+				@Override
 				protected Control createDialogArea(Composite parent) {
 					Control dialogArea2= super.createDialogArea(parent);
 					Object layoutData= getText().getLayoutData();
@@ -515,13 +579,16 @@ public class TestRunnerViewPart extends ViewPart {
 					}
 					return dialogArea2;
 				}
+				@Override
 				protected IDialogSettings getDialogBoundsSettings() {
 					IDialogSettings settings= dialogSettings.getSection(DIALOG_SETTINGS);
 					if (settings == null) {
 						settings= dialogSettings.addNewSection(DIALOG_SETTINGS);
 					}
+					settings.put("DIALOG_HEIGHT", Dialog.DIALOG_DEFAULT_BOUNDS); //$NON-NLS-1$
 					return settings;
 				}
+				@Override
 				protected boolean isResizable() {
 					return true;
 				}
@@ -546,6 +613,7 @@ public class TestRunnerViewPart extends ViewPart {
 			fTestRunSession= testRunSession;
 		}
 
+		@Override
 		public void run() {
 			FileDialog exportDialog= new FileDialog(fShell, SWT.SAVE);
 			exportDialog.setText(JUnitMessages.TestRunnerViewPart_ExportTestRunSessionAction_title);
@@ -586,7 +654,8 @@ public class TestRunnerViewPart extends ViewPart {
 		public void sessionAdded(final TestRunSession testRunSession) {
 			getDisplay().asyncExec(new Runnable() {
 				public void run() {
-					if (getSite().getWorkbenchWindow() == JUnitPlugin.getActiveWorkbenchWindow()) {
+					if (JUnitUIPreferencesConstants.getShowInAllViews() ||
+							getSite().getWorkbenchWindow() == JUnitPlugin.getActiveWorkbenchWindow()) {
 						if (fInfoMessage == null) {
 							String testRunLabel= BasicElementLabels.getJavaElementName(testRunSession.getTestRunName());
 							String msg;
@@ -609,10 +678,10 @@ public class TestRunnerViewPart extends ViewPart {
 			getDisplay().asyncExec(new Runnable() {
 				public void run() {
 					if (testRunSession.equals(fTestRunSession)) {
-						List testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
+						List<TestRunSession> testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
 						TestRunSession deactivatedSession;
 						if (! testRunSessions.isEmpty()) {
-							deactivatedSession= setActiveTestRunSession((TestRunSession) testRunSessions.get(0));
+							deactivatedSession= setActiveTestRunSession(testRunSessions.get(0));
 						} else {
 							deactivatedSession= setActiveTestRunSession(null);
 						}
@@ -743,6 +812,7 @@ public class TestRunnerViewPart extends ViewPart {
 			super(name);
 			setSystem(true);
 		}
+		@Override
 		public IStatus runInUIThread(IProgressMonitor monitor) {
 			if (!isDisposed()) {
 				processChangesInUI();
@@ -754,6 +824,7 @@ public class TestRunnerViewPart extends ViewPart {
 		public void stop() {
 			fRunning= false;
 		}
+		@Override
 		public boolean shouldSchedule() {
 			return fRunning;
 		}
@@ -764,11 +835,13 @@ public class TestRunnerViewPart extends ViewPart {
 			super(name);
 			setSystem(true);
 		}
+		@Override
 		public IStatus run(IProgressMonitor monitor) {
 			// wait until the test run terminates
 			fJUnitIsRunningLock.acquire();
 			return Status.OK_STATUS;
 		}
+		@Override
 		public boolean belongsTo(Object family) {
 			return family == TestRunnerViewPart.FAMILY_JUNIT_RUN;
 		}
@@ -779,9 +852,8 @@ public class TestRunnerViewPart extends ViewPart {
 			setText(JUnitMessages.TestRunnerViewPart_clear_history_label);
 
 			boolean enabled= false;
-			List testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
-			for (Iterator iter= testRunSessions.iterator(); iter.hasNext();) {
-				TestRunSession testRunSession= (TestRunSession) iter.next();
+			List<TestRunSession> testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
+			for (TestRunSession testRunSession : testRunSessions) {
 				if (! testRunSession.isRunning() && ! testRunSession.isStarting()) {
 					enabled= true;
 					break;
@@ -790,16 +862,17 @@ public class TestRunnerViewPart extends ViewPart {
 			setEnabled(enabled);
 		}
 
+		@Override
 		public void run() {
-			List testRunSessions= getRunningSessions();
-			Object first= testRunSessions.isEmpty() ? null : testRunSessions.get(0);
+			List<TestRunSession> testRunSessions= getRunningSessions();
+			TestRunSession first= testRunSessions.isEmpty() ? null : testRunSessions.get(0);
 			fViewHistory.setHistoryEntries(testRunSessions, first);
 		}
 
-		private List getRunningSessions() {
-			List testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
-			for (Iterator iter= testRunSessions.iterator(); iter.hasNext();) {
-				TestRunSession testRunSession= (TestRunSession) iter.next();
+		private List<TestRunSession> getRunningSessions() {
+			List<TestRunSession> testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
+			for (Iterator<TestRunSession> iter= testRunSessions.iterator(); iter.hasNext();) {
+				TestRunSession testRunSession= iter.next();
 				if (! testRunSession.isRunning() && ! testRunSession.isStarting()) {
 					iter.remove();
 				}
@@ -815,6 +888,7 @@ public class TestRunnerViewPart extends ViewPart {
 			JUnitPlugin.setLocalImageDescriptors(this, "stop.gif"); //$NON-NLS-1$
 		}
 
+		@Override
 		public void run() {
 			stopTest();
 			setEnabled(false);
@@ -830,6 +904,7 @@ public class TestRunnerViewPart extends ViewPart {
 			setActionDefinitionId(RERUN_LAST_COMMAND);
 		}
 
+		@Override
 		public void run(){
 			rerunTestRun();
 		}
@@ -844,6 +919,7 @@ public class TestRunnerViewPart extends ViewPart {
 			setActionDefinitionId(RERUN_FAILED_FIRST_COMMAND);
 		}
 
+		@Override
 		public void run(){
 			rerunTestFailedFirst();
 		}
@@ -872,6 +948,7 @@ public class TestRunnerViewPart extends ViewPart {
 			return fActionOrientation;
 		}
 
+		@Override
 		public void run() {
 			if (isChecked()) {
 				fOrientation= fActionOrientation;
@@ -940,6 +1017,7 @@ public class TestRunnerViewPart extends ViewPart {
 			setImageDescriptor(JUnitPlugin.getImageDescriptor("obj16/failures.gif")); //$NON-NLS-1$
 		}
 
+		@Override
 		public void run() {
 			setShowFailuresOnly(isChecked());
 		}
@@ -951,6 +1029,7 @@ public class TestRunnerViewPart extends ViewPart {
 			super(JUnitMessages.TestRunnerViewPart_show_execution_time, IAction.AS_CHECK_BOX);
 		}
 
+		@Override
 		public void run() {
 			setShowExecutionTime(isChecked());
 		}
@@ -963,6 +1042,7 @@ public class TestRunnerViewPart extends ViewPart {
 			setImageDescriptor(JUnitPlugin.getImageDescriptor("elcl16/hierarchicalLayout.gif")); //$NON-NLS-1$
 		}
 
+		@Override
 		public void run() {
 			int mode= isChecked() ? LAYOUT_HIERARCHICAL : LAYOUT_FLAT;
 			setLayoutMode(mode);
@@ -978,15 +1058,16 @@ public class TestRunnerViewPart extends ViewPart {
 		public void update() {
 			setChecked(getShowOnErrorOnly());
 		}
+		@Override
 		public void run() {
 			boolean checked= isChecked();
 			fShowOnErrorOnly= checked;
-			new InstanceScope().getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putBoolean(JUnitPreferencesConstants.SHOW_ON_ERROR_ONLY, checked);
+			InstanceScope.INSTANCE.getNode(JUnitCorePlugin.CORE_PLUGIN_ID).putBoolean(JUnitPreferencesConstants.SHOW_ON_ERROR_ONLY, checked);
 		}
 	}
 
 	public TestRunnerViewPart() {
-		fImagesToDispose= new ArrayList();
+		fImagesToDispose= new ArrayList<Image>();
 
 		fStackViewIcon= createManagedImage("eview16/stackframe.gif");//$NON-NLS-1$
 		fTestRunOKIcon= createManagedImage("eview16/junitsucc.gif"); //$NON-NLS-1$
@@ -1022,6 +1103,7 @@ public class TestRunnerViewPart extends ViewPart {
 	}
 
 
+	@Override
 	public void init(IViewSite site, IMemento memento) throws PartInitException {
 		super.init(site, memento);
 		fMemento= memento;
@@ -1038,6 +1120,7 @@ public class TestRunnerViewPart extends ViewPart {
 	}
 
 
+	@Override
 	public void saveState(IMemento memento) {
 		if (fSashForm == null) {
 			// part has not been created
@@ -1250,8 +1333,7 @@ public class TestRunnerViewPart extends ViewPart {
 			BufferedWriter bw= null;
 			try {
 				bw= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); //$NON-NLS-1$
-				for (int i= 0; i < failures.length; i++) {
-					TestElement testElement= failures[i];
+				for (TestElement testElement : failures) {
 					bw.write(testElement.getTestName());
 					bw.newLine();
 				}
@@ -1459,11 +1541,12 @@ action enablement
 
 		String testRunLabel= BasicElementLabels.getJavaElementName(fTestRunSession.getTestRunName());
 		if (testKindDisplayStr != null)
-			setTitleToolTip(MessageFormat.format(JUnitMessages.TestRunnerViewPart_titleToolTip, new String[] {testRunLabel, testKindDisplayStr}));
+			setTitleToolTip(MessageFormat.format(JUnitMessages.TestRunnerViewPart_titleToolTip, new Object[] {testRunLabel, testKindDisplayStr}));
 		else
 			setTitleToolTip(testRunLabel);
 	}
 
+	@Override
 	public synchronized void dispose(){
 		fIsDisposed= true;
 		if (fTestRunSessionListener != null)
@@ -1492,7 +1575,7 @@ action enablement
 
 	private void disposeImages() {
 		for (int i= 0; i < fImagesToDispose.size(); i++) {
-			((Image) fImagesToDispose.get(i)).dispose();
+			fImagesToDispose.get(i).dispose();
 		}
 	}
 
@@ -1598,9 +1681,11 @@ action enablement
 
 		Composite empty= new Composite(top, SWT.NONE);
 		empty.setLayout(new Layout() {
+			@Override
 			protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
 				return new Point(1, 1); // (0, 0) does not work with super-intelligent ViewForm
 			}
+			@Override
 			protected void layout(Composite composite, boolean flushCache) {
 			}
 		});
@@ -1628,11 +1713,13 @@ action enablement
 		getStatusLine().setErrorMessage(null);
 	}
 
+	@Override
 	public void setFocus() {
 		if (fTestViewer != null)
 			fTestViewer.getTestViewerControl().setFocus();
 	}
 
+	@Override
 	public void createPartControl(Composite parent) {
 		fParent= parent;
 		addResizeListener(parent);
@@ -1652,8 +1739,15 @@ action enablement
 		sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
 
 		IActionBars actionBars= getViewSite().getActionBars();
+		
 		fCopyAction = new JUnitCopyAction(fFailureTrace, fClipboard);
+		fCopyAction.setActionDefinitionId(ActionFactory.COPY.getCommandId());
 		actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), fCopyAction);
+		
+		fPasteAction= new JUnitPasteAction(parent.getShell(), fClipboard);
+		fPasteAction.setActionDefinitionId(ActionFactory.PASTE.getCommandId());
+		actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), fPasteAction);
+		
 		initPageSwitcher();
 		addDropAdapter(parent);
 
@@ -1674,9 +1768,9 @@ action enablement
 		JUnitCorePlugin.getModel().addTestRunSessionListener(fTestRunSessionListener);
 		
 		// always show youngest test run in view. simulate "sessionAdded" event to do that
-		List testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
+		List<TestRunSession> testRunSessions= JUnitCorePlugin.getModel().getTestRunSessions();
 		if (!testRunSessions.isEmpty()) {
-			fTestRunSessionListener.sessionAdded((TestRunSession)testRunSessions.get(0));
+			fTestRunSessionListener.sessionAdded(testRunSessions.get(0));
 		}
 	}
 
@@ -1684,19 +1778,23 @@ action enablement
 		DropTarget dropTarget = new DropTarget(parent, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK | DND.DROP_DEFAULT);
 		dropTarget.setTransfer(new Transfer[] { TextTransfer.getInstance() });
 		class DropAdapter extends DropTargetAdapter {
-		    public void dragEnter(DropTargetEvent event) {
+		    @Override
+			public void dragEnter(DropTargetEvent event) {
 		        event.detail = DND.DROP_COPY;
 		        event.feedback = DND.FEEDBACK_NONE;
 		    }
-		    public void dragOver(DropTargetEvent event) {
+		    @Override
+			public void dragOver(DropTargetEvent event) {
 		        event.detail = DND.DROP_COPY;
 		        event.feedback = DND.FEEDBACK_NONE;
 		    }
-		    public void dragOperationChanged(DropTargetEvent event) {
+		    @Override
+			public void dragOperationChanged(DropTargetEvent event) {
 		        event.detail = DND.DROP_COPY;
 		        event.feedback = DND.FEEDBACK_NONE;
 		    }
-		    public void drop(final DropTargetEvent event) {
+		    @Override
+			public void drop(final DropTargetEvent event) {
 		        if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
 					String url= (String) event.data;
 					importTestRunSession(url);
@@ -1707,23 +1805,29 @@ action enablement
 	}
 
 	private void initPageSwitcher() {
-		new PageSwitcher(this) {
+		@SuppressWarnings("unused")
+		PageSwitcher pageSwitcher= new PageSwitcher(this) {
+			@Override
 			public Object[] getPages() {
 				return fViewHistory.getHistoryEntries().toArray();
 			}
 
+			@Override
 			public String getName(Object page) {
-				return fViewHistory.getText(page);
+				return fViewHistory.getText((TestRunSession) page);
 			}
 
+			@Override
 			public ImageDescriptor getImageDescriptor(Object page) {
 				return fViewHistory.getImageDescriptor(page);
 			}
 
+			@Override
 			public void activatePage(Object page) {
-				fViewHistory.setActiveEntry(page);
+				fViewHistory.setActiveEntry((TestRunSession) page);
 			}
 
+			@Override
 			public int getCurrentPageIndex() {
 				return fViewHistory.getHistoryEntries().indexOf(fViewHistory.getCurrentEntry());
 			}
@@ -1779,6 +1883,7 @@ action enablement
 				fRerunLastTestAction.run();
 				return null;
 			}
+			@Override
 			public boolean isEnabled() {
 				return fRerunLastTestAction.isEnabled();
 			}
@@ -1791,6 +1896,7 @@ action enablement
 				fRerunFailedFirstAction.run();
 				return null;
 			}
+			@Override
 			public boolean isEnabled() {
 				return fRerunFailedFirstAction.isEnabled();
 			}
@@ -1919,6 +2025,7 @@ action enablement
 	/*
 	 * @see IWorkbenchPart#getTitleImage()
 	 */
+	@Override
 	public Image getTitleImage() {
 		if (fOriginalViewImage == null)
 			fOriginalViewImage= super.getTitleImage();
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java
index 6ac4678..93b2693 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,6 +104,7 @@ public class TestSessionLabelProvider extends LabelProvider implements IStyledLa
 		return null;
 	}
 
+	@Override
 	public String getText(Object element) {
 		String label= getSimpleLabel(element);
 		if (label == null) {
@@ -126,6 +127,7 @@ public class TestSessionLabelProvider extends LabelProvider implements IStyledLa
 		return addElapsedTime(label, testElement.getElapsedTimeInSeconds());
 	}
 
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof TestCaseElement) {
 			TestCaseElement testCaseElement= ((TestCaseElement) element);
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionTableContentProvider.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionTableContentProvider.java
index 39edabb..ea90e2b 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionTableContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestSessionTableContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,15 +29,14 @@ public class TestSessionTableContentProvider implements IStructuredContentProvid
 	}
 
 	public Object[] getElements(Object inputElement) {
-		ArrayList all= new ArrayList();
+		ArrayList<ITestElement> all= new ArrayList<ITestElement>();
 		addAll(all, (TestRoot) inputElement);
 		return all.toArray();
 	}
 
-	private void addAll(ArrayList all, TestSuiteElement suite) {
+	private void addAll(ArrayList<ITestElement> all, TestSuiteElement suite) {
 		ITestElement[] children= suite.getChildren();
-		for (int i= 0; i < children.length; i++) {
-			ITestElement element= children[i];
+		for (ITestElement element : children) {
 			if (element instanceof TestSuiteElement) {
 				if (((TestSuiteElement) element).getSuiteStatus().isErrorOrFailure())
 					all.add(element); // add failed suite to flat list too
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java
index 0188aef..e050d66 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/TestViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,12 +16,13 @@ package org.eclipse.jdt.internal.junit.ui;
 import java.util.AbstractList;
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
 
+import org.eclipse.jdt.junit.model.ITestElement;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.Clipboard;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -58,10 +59,10 @@ import org.eclipse.jdt.core.JavaModelException;
 
 import org.eclipse.jdt.internal.junit.model.TestCaseElement;
 import org.eclipse.jdt.internal.junit.model.TestElement;
+import org.eclipse.jdt.internal.junit.model.TestElement.Status;
 import org.eclipse.jdt.internal.junit.model.TestRoot;
 import org.eclipse.jdt.internal.junit.model.TestRunSession;
 import org.eclipse.jdt.internal.junit.model.TestSuiteElement;
-import org.eclipse.jdt.internal.junit.model.TestElement.Status;
 
 import org.eclipse.jdt.internal.ui.viewsupport.ColoringLabelProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator;
@@ -75,12 +76,14 @@ public class TestViewer {
 	}
 
 	private final class TestOpenListener extends SelectionAdapter {
+		@Override
 		public void widgetDefaultSelected(SelectionEvent e) {
 			handleDefaultSelected();
 		}
 	}
 
 	private final class FailuresOnlyFilter extends ViewerFilter {
+		@Override
 		public boolean select(Viewer viewer, Object parentElement, Object element) {
 			return select(((TestElement) element));
 		}
@@ -94,14 +97,16 @@ public class TestViewer {
 		}
 	}
 
-	private static class ReverseList extends AbstractList {
-		private final List fList;
-		public ReverseList(List list) {
+	private static class ReverseList<E> extends AbstractList<E> {
+		private final List<E> fList;
+		public ReverseList(List<E> list) {
 			fList= list;
 		}
-		public Object get(int index) {
+		@Override
+		public E get(int index) {
 			return fList.get(fList.size() - index - 1);
 		}
+		@Override
 		public int size() {
 			return fList.size();
 		}
@@ -113,6 +118,7 @@ public class TestViewer {
 			setToolTipText(JUnitMessages.ExpandAllAction_tooltip);
 		}
 
+		@Override
 		public void run(){
 			fTreeViewer.expandAll();
 		}
@@ -140,11 +146,11 @@ public class TestViewer {
 
 	private boolean fTreeNeedsRefresh;
 	private boolean fTableNeedsRefresh;
-	private HashSet/*<TestElement>*/ fNeedUpdate;
+	private HashSet<TestElement> fNeedUpdate;
 	private TestCaseElement fAutoScrollTarget;
 
-	private LinkedList/*<TestSuiteElement>*/ fAutoClose;
-	private HashSet/*<TestSuite>*/ fAutoExpand;
+	private LinkedList<TestSuiteElement> fAutoClose;
+	private HashSet<TestSuiteElement> fAutoExpand;
 
 
 	public TestViewer(Composite parent, Clipboard clipboard, TestRunnerViewPart runner) {
@@ -434,13 +440,13 @@ public class TestViewer {
 			}
 			if (! fTreeNeedsRefresh && toUpdate.length > 0) {
 				if (fTreeHasFilter)
-					for (int i= 0; i < toUpdate.length; i++)
-						updateElementInTree((TestElement) toUpdate[i]);
+					for (Object element : toUpdate)
+						updateElementInTree((TestElement) element);
 				else {
-					HashSet toUpdateWithParents= new HashSet();
+					HashSet<Object> toUpdateWithParents= new HashSet<Object>();
 					toUpdateWithParents.addAll(Arrays.asList(toUpdate));
-					for (int i= 0; i < toUpdate.length; i++) {
-						TestElement parent= ((TestElement) toUpdate[i]).getParent();
+					for (Object element : toUpdate) {
+						TestElement parent= ((TestElement) element).getParent();
 						while (parent != null) {
 							toUpdateWithParents.add(parent);
 							parent= parent.getParent();
@@ -451,8 +457,8 @@ public class TestViewer {
 			}
 			if (! fTableNeedsRefresh && toUpdate.length > 0) {
 				if (fTableHasFilter)
-					for (int i= 0; i < toUpdate.length; i++)
-						updateElementInTable((TestElement) toUpdate[i]);
+					for (Object element : toUpdate)
+						updateElementInTable((TestElement) element);
 				else
 					fTableViewer.update(toUpdate, null);
 			}
@@ -529,8 +535,7 @@ public class TestViewer {
 		}
 
 		synchronized (this) {
-			for (Iterator iter= fAutoExpand.iterator(); iter.hasNext();) {
-				TestSuiteElement suite= (TestSuiteElement) iter.next();
+			for (TestSuiteElement suite : fAutoExpand) {
 				fTreeViewer.setExpandedState(suite, true);
 			}
 			clearAutoExpand();
@@ -542,8 +547,8 @@ public class TestViewer {
 		TestSuiteElement parent= current == null ? null : (TestSuiteElement) fTreeContentProvider.getParent(current);
 		if (fAutoClose.isEmpty() || ! fAutoClose.getLast().equals(parent)) {
 			// we're in a new branch, so let's close old OK branches:
-			for (ListIterator iter= fAutoClose.listIterator(fAutoClose.size()); iter.hasPrevious();) {
-				TestSuiteElement previousAutoOpened= (TestSuiteElement) iter.previous();
+			for (ListIterator<TestSuiteElement> iter= fAutoClose.listIterator(fAutoClose.size()); iter.hasPrevious();) {
+				TestSuiteElement previousAutoOpened= iter.previous();
 				if (previousAutoOpened.equals(parent))
 					break;
 
@@ -598,9 +603,9 @@ public class TestViewer {
 		if (parent == null)
 			return null;
 
-		List siblings= Arrays.asList(parent.getChildren());
+		List<ITestElement> siblings= Arrays.asList(parent.getChildren());
 		if (! showNext)
-			siblings= new ReverseList(siblings);
+			siblings= new ReverseList<ITestElement>(siblings);
 
 		int nextIndex= siblings.indexOf(current) + 1;
 		for (int i= nextIndex; i < siblings.size(); i++) {
@@ -617,9 +622,9 @@ public class TestViewer {
 	}
 
 	private TestCaseElement getNextChildFailure(TestSuiteElement root, boolean showNext) {
-		List children= Arrays.asList(root.getChildren());
+		List<ITestElement> children= Arrays.asList(root.getChildren());
 		if (! showNext)
-			children= new ReverseList(children);
+			children= new ReverseList<ITestElement>(children);
 		for (int i= 0; i < children.size(); i++) {
 			TestElement child= (TestElement) children.get(i);
 			if (child.getStatus().isErrorOrFailure()) {
@@ -640,9 +645,9 @@ public class TestViewer {
 	}
 
 	private void clearUpdateAndExpansion() {
-		fNeedUpdate= new LinkedHashSet();
-		fAutoClose= new LinkedList();
-		fAutoExpand= new HashSet();
+		fNeedUpdate= new LinkedHashSet<TestElement>();
+		fAutoClose= new LinkedList<TestSuiteElement>();
+		fAutoExpand= new HashSet<TestSuiteElement>();
 	}
 
 	/**
@@ -667,7 +672,7 @@ public class TestViewer {
 	}
 
 	public synchronized void registerFailedForAutoScroll(TestElement testElement) {
-		Object parent= fTreeContentProvider.getParent(testElement);
+		TestSuiteElement parent= (TestSuiteElement) fTreeContentProvider.getParent(testElement);
 		if (parent != null)
 			fAutoExpand.add(parent);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/UITestRunListener.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/UITestRunListener.java
index 2347c81..d4ae574 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/UITestRunListener.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/UITestRunListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class UITestRunListener extends TestRunListener {
 	 * @see org.eclipse.jdt.junit.TestRunListener#sessionLaunched(org.eclipse.jdt.junit.model.ITestRunSession)
 	 * @since 3.6
 	 */
+	@Override
 	public void sessionLaunched(ITestRunSession session) {
 		JUnitPlugin.asyncShowTestRunnerViewPart();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/CheckedTableSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/CheckedTableSelectionDialog.java
index de5632c..bb400fd 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/CheckedTableSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/CheckedTableSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,7 +57,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 	private String fEmptyListMessage= WizardMessages.CheckedTableSelectionDialog_emptyListMessage;
 
 	private IStatus fCurrStatus= new JUnitStatus();
-	private List fFilters;
+	private List<ViewerFilter> fFilters;
 	private Object fInput;
 	private boolean fIsEmpty;
 
@@ -77,7 +77,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 		fLabelProvider= labelProvider;
 		fContentProvider= contentProvider;
 
-		setResult(new ArrayList(0));
+		setResult(new ArrayList<Object>(0));
 		setStatusLineAboveButtons(true);
 	}
 
@@ -104,7 +104,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 	 */
 	public void addFilter(ViewerFilter filter) {
 		if (fFilters == null)
-			fFilters= new ArrayList(4);
+			fFilters= new ArrayList<ViewerFilter>(4);
 
 		fFilters.add(filter);
 	}
@@ -153,6 +153,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 	/*
 	 * @see Window#open()
 	 */
+	@Override
 	public int open() {
 		fIsEmpty= evaluateIfTableEmpty(fInput);
 		BusyIndicator.showWhile(null, new Runnable() {
@@ -170,6 +171,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 	/**
 	 * Handles cancel button pressed event.
 	 */
+	@Override
 	protected void cancelPressed() {
 		setResult(null);
 		super.cancelPressed();
@@ -178,6 +180,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 	/*
 	 * @see SelectionStatusDialog#computeResult()
 	 */
+	@Override
 	protected void computeResult() {
 		setResult(Arrays.asList(fViewer.getCheckedElements()));
 	}
@@ -185,10 +188,11 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 	/*
 	 * @see Window#create()
 	 */
+	@Override
 	public void create() {
 		super.create();
 
-		List initialSelections= getInitialElementSelections();
+		List<?> initialSelections= getInitialElementSelections();
 		if (initialSelections.size() > 0) {
 			fViewer.setCheckedElements(initialSelections.toArray());
 		}
@@ -199,6 +203,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 	/*
 	 * @see Dialog#createDialogArea(Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -233,7 +238,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 
 		if (fFilters != null) {
 			for (int i= 0; i != fFilters.size(); i++)
-				fViewer.addFilter((ViewerFilter) fFilters.get(i));
+				fViewer.addFilter(fFilters.get(i));
 		}
 
 		fViewer.setInput(fInput);
@@ -257,6 +262,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 		Button selectButton= createButton(buttonComposite, IDialogConstants.SELECT_ALL_ID, WizardMessages.CheckedTableSelectionDialog_selectAll, false);
 
 		SelectionListener listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fViewer.setCheckedElements(fContentProvider.getElements(fInput));
 				updateOKStatus();
@@ -267,6 +273,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 		Button deselectButton= createButton(buttonComposite, IDialogConstants.DESELECT_ALL_ID, WizardMessages.CheckedTableSelectionDialog_deselectAll, false);
 
 		listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fViewer.setCheckedElements(new Object[0]);
 				updateOKStatus();
@@ -281,7 +288,7 @@ public class CheckedTableSelectionDialog extends SelectionStatusDialog {
 		if (elements.length > 0) {
 			if (fFilters != null) {
 				for (int i= 0; i < fFilters.size(); i++) {
-					ViewerFilter curr= (ViewerFilter)fFilters.get(i);
+					ViewerFilter curr= fFilters.get(i);
 					elements= curr.filter(fViewer, input, elements);
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
index c1e6343..1235512 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,6 @@ import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.ToolFactory;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.IMethodBinding;
@@ -44,6 +43,8 @@ import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.wizards.NewTypeWizardPage.ImportsManager;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 /**
  * Utility methods for code generation.
  * TODO: some methods are duplicated from org.eclipse.jdt.ui
@@ -296,7 +297,7 @@ public class JUnitStubUtility {
 
 	public static String[] getParameterTypeNamesForSeeTag(IMethod overridden) {
 		try {
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setProject(overridden.getJavaProject());
 			IBinding[] bindings= parser.createBindings(new IJavaElement[] { overridden }, null);
 			if (bindings.length == 1 && bindings[0] instanceof IMethodBinding) {
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/Resources.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/Resources.java
index c921330..ca669d2 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/Resources.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/Resources.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@ package org.eclipse.jdt.internal.junit.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -101,25 +100,23 @@ public class Resources {
 	 * @see org.eclipse.core.resources.IWorkspace#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object)
 	 */
 	public static IStatus makeCommittable(IResource[] resources, Object context) {
-		List readOnlyFiles= new ArrayList();
-		for (int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		List<IFile> readOnlyFiles= new ArrayList<IFile>();
+		for (IResource resource : resources) {
 			if (resource.getType() == IResource.FILE && resource.getResourceAttributes().isReadOnly())
-				readOnlyFiles.add(resource);
+				readOnlyFiles.add((IFile) resource);
 		}
 		if (readOnlyFiles.size() == 0)
 			return Status.OK_STATUS;
 
-		Map oldTimeStamps= createModificationStampMap(readOnlyFiles);
+		Map<IFile, Long> oldTimeStamps= createModificationStampMap(readOnlyFiles);
 		IStatus status= ResourcesPlugin.getWorkspace().validateEdit(
-			(IFile[]) readOnlyFiles.toArray(new IFile[readOnlyFiles.size()]), context);
+			readOnlyFiles.toArray(new IFile[readOnlyFiles.size()]), context);
 		if (!status.isOK())
 			return status;
 
 		IStatus modified= null;
-		Map newTimeStamps= createModificationStampMap(readOnlyFiles);
-		for (Iterator iter= oldTimeStamps.keySet().iterator(); iter.hasNext();) {
-			IFile file= (IFile) iter.next();
+		Map<IFile, Long> newTimeStamps= createModificationStampMap(readOnlyFiles);
+		for (IFile file : oldTimeStamps.keySet()) {
 			if (!oldTimeStamps.get(file).equals(newTimeStamps.get(file)))
 				modified= addModified(modified, file);
 		}
@@ -128,10 +125,9 @@ public class Resources {
 		return Status.OK_STATUS;
 	}
 
-	private static Map createModificationStampMap(List files){
-		Map map= new HashMap();
-		for (Iterator iter= files.iterator(); iter.hasNext(); ) {
-			IFile file= (IFile)iter.next();
+	private static Map<IFile, Long> createModificationStampMap(List<IFile> files){
+		Map<IFile, Long> map= new HashMap<IFile, Long>();
+		for (IFile file : files) {
 			map.put(file, new Long(file.getModificationStamp()));
 		}
 		return map;
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java
index 21ca88a..1961c8b 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java
@@ -33,7 +33,7 @@ import org.eclipse.jdt.internal.junit.launcher.ITestKind;
 public class TestSearchEngine extends CoreTestSearchEngine {
 
 	public static IType[] findTests(IRunnableContext context, final IJavaElement element, final ITestKind testKind) throws InvocationTargetException, InterruptedException {
-		final Set result= new HashSet();
+		final Set<IType> result= new HashSet<IType>();
 
 		IRunnableWithProgress runnable= new IRunnableWithProgress() {
 			public void run(IProgressMonitor pm) throws InterruptedException, InvocationTargetException {
@@ -45,7 +45,7 @@ public class TestSearchEngine extends CoreTestSearchEngine {
 			}
 		};
 		context.run(true, true, runnable);
-		return (IType[]) result.toArray(new IType[result.size()]);
+		return result.toArray(new IType[result.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/JUnitWizard.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/JUnitWizard.java
index 7e9ea51..572ae16 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/JUnitWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/JUnitWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public abstract class JUnitWizard extends Wizard implements INewWizard {
 	/*
 	 * @see IWizard#performFinish()
 	 */
+	@Override
 	public abstract boolean performFinish();
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizard.java
index 67e3b36..cc50c16 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestCaseCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 		initDialogSettings();
 	}
 
+	@Override
 	protected void initializeDefaultPageImageDescriptor() {
 		setDefaultPageImageDescriptor(JUnitPlugin.getImageDescriptor("wizban/newtest_wiz.png")); //$NON-NLS-1$
 	}
@@ -84,6 +85,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 	/*
 	 * @see Wizard#createPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		fPage2= new NewTestCaseWizardPageTwo();
@@ -96,6 +98,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 	/*
 	 * @see Wizard#performFinish
 	 */
+	@Override
 	public boolean performFinish() {
 		IJavaProject project= fPage1.getJavaProject();
 		IRunnableWithProgress runnable= fPage1.getRunnable();
@@ -167,6 +170,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 
 		static class ClasspathFixLabelProvider extends LabelProvider {
 
+			@Override
 			public Image getImage(Object element) {
 				if (element instanceof ClasspathFixProposal) {
 					ClasspathFixProposal classpathFixProposal= (ClasspathFixProposal) element;
@@ -175,6 +179,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 				return null;
 			}
 
+			@Override
 			public String getText(Object element) {
 				if (element instanceof ClasspathFixProposal) {
 					ClasspathFixProposal classpathFixProposal= (ClasspathFixProposal) element;
@@ -203,6 +208,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 			fSelectedFix= null;
 		}
 
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
@@ -211,6 +217,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 			return isJunit4 ? WizardMessages.NewTestCaseCreationWizard_fix_selection_junit4_description : WizardMessages.NewTestCaseCreationWizard_fix_selection_junit3_description;
 		}
 
+		@Override
 		protected Control createCustomArea(Composite composite) {
 			fNoActionRadio= new Button(composite, SWT.RADIO);
 			fNoActionRadio.setLayoutData(new GridData(SWT.LEAD, SWT.TOP, false, false));
@@ -264,8 +271,9 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 		}
 
 		private static final String BUILD_PATH_PAGE_ID= "org.eclipse.jdt.ui.propertyPages.BuildPathsPropertyPage"; //$NON-NLS-1$
-		private static final Object BUILD_PATH_BLOCK= "block_until_buildpath_applied"; //$NON-NLS-1$
+		private static final String BUILD_PATH_BLOCK= "block_until_buildpath_applied"; //$NON-NLS-1$
 
+		@Override
 		protected void buttonPressed(int buttonId) {
 			fSelectedFix= null;
 			if (buttonId == 0) {
@@ -273,7 +281,7 @@ public class NewTestCaseCreationWizard extends JUnitWizard {
 					// nothing to do
 				} else if (fOpenBuildPathRadio.getSelection()) {
 					String id= BUILD_PATH_PAGE_ID;
-					Map input= new HashMap();
+					Map<String, Boolean> input= new HashMap<String, Boolean>();
 					input.put(BUILD_PATH_BLOCK, Boolean.TRUE);
 					if (PreferencesUtil.createPropertyDialogOn(getShell(), fProject, id, new String[] { id }, input).open() != Window.OK) {
 						return;
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizard.java
index 80cb2b6..12192e2 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/NewTestSuiteCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class NewTestSuiteCreationWizard extends JUnitWizard {
 	/*
 	 * @see Wizard#createPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		fPage= new NewTestSuiteWizardPage();
@@ -64,6 +65,7 @@ public class NewTestSuiteCreationWizard extends JUnitWizard {
 	/*
 	 * @see Wizard#performFinish
 	 */
+	@Override
 	public boolean performFinish() {
 		IPackageFragment pack= fPage.getPackageFragment();
 		String filename= fPage.getTypeName() + ".java"; //$NON-NLS-1$
@@ -133,6 +135,7 @@ public class NewTestSuiteCreationWizard extends JUnitWizard {
 		return fPage;
 	}
 
+	@Override
 	protected void initializeDefaultPageImageDescriptor() {
 		setDefaultPageImageDescriptor(JUnitPlugin.getImageDescriptor("wizban/newtest_wiz.png")); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/SuiteClassesContentProvider.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/SuiteClassesContentProvider.java
index 05a7ab1..e669713 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/SuiteClassesContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/SuiteClassesContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,10 +7,14 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Utzig <mail at jutzig.de> - [JUnit] Update test suite wizard for JUnit 4: @RunWith(Suite.class)... - https://bugs.eclipse.org/155828
  *******************************************************************************/
 package org.eclipse.jdt.internal.junit.wizards;
 
+import java.text.Collator;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -20,29 +24,55 @@ import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.Viewer;
 
 import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IType;
 
 import org.eclipse.jdt.internal.junit.launcher.JUnit3TestFinder;
+import org.eclipse.jdt.internal.junit.launcher.JUnit4TestFinder;
 import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
 
 public class SuiteClassesContentProvider implements IStructuredContentProvider {
 
+	private boolean fIncludeJunit4Tests;
+
+	public SuiteClassesContentProvider() {
+		this(false);
+	}
+	
+	public SuiteClassesContentProvider(boolean includeJunit4Tests) {
+		this.fIncludeJunit4Tests = includeJunit4Tests;
+	}
+
 	public Object[] getElements(Object parent) {
 		if (! (parent instanceof IPackageFragment))
 			return new Object[0];
 		IPackageFragment pack= (IPackageFragment) parent;
 		if (! pack.exists())
 			return new Object[0];
-		return getTests(pack).toArray();
+		Set<IType> tests= getTests(pack);
+		IType[] result= tests.toArray(new IType[tests.size()]);
+		Arrays.sort(result, new Comparator<IType>() {
+			private Collator fCollator= Collator.getInstance();
+			public int compare(IType t1, IType t2) {
+				return fCollator.compare(t1.getElementName(), t2.getElementName());
+			}
+		});
+		return result;
 	}
 
-	public Set getTests(IPackageFragment pack) {
+	public Set<IType> getTests(IPackageFragment pack) {
 		try {
-			HashSet result= new HashSet();
-			new JUnit3TestFinder().findTestsInContainer(pack, result, null);
+			HashSet<IType> result= new HashSet<IType>();
+			
+			if (isIncludeJunit4Tests()) {
+				new JUnit4TestFinder().findTestsInContainer(pack, result, null);
+			} else {
+				new JUnit3TestFinder().findTestsInContainer(pack, result, null);
+			}
+			
 			return result;
 		} catch (CoreException e) {
 			JUnitPlugin.log(e);
-			return Collections.EMPTY_SET;
+			return Collections.emptySet();
 		}
 	}
 
@@ -51,4 +81,12 @@ public class SuiteClassesContentProvider implements IStructuredContentProvider {
 
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 	}
+	
+	public void setIncludeJunit4Tests(boolean includeJunit4Tests) {
+		fIncludeJunit4Tests= includeJunit4Tests;
+	}
+	
+	public boolean isIncludeJunit4Tests() {
+		return fIncludeJunit4Tests;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/UpdateTestSuite.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/UpdateTestSuite.java
index 4cf570d..f80d6d1 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/UpdateTestSuite.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/UpdateTestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Utzig <mail at jutzig.de> - [JUnit] Update test suite wizard for JUnit 4: @RunWith(Suite.class)... - https://bugs.eclipse.org/155828
  *******************************************************************************/
 package org.eclipse.jdt.internal.junit.wizards;
 
@@ -43,6 +44,7 @@ import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.ISelectionStatusValidator;
 
+import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.IBuffer;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
@@ -73,6 +75,8 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 	private IMethod fSuiteMethod;
 	private static boolean fEmptySelectionAllowed= false;
 	private Object[] fSelectedTestCases;
+	private boolean fIsJunit4;
+	private IAnnotation fSuiteClasses;
 
 	private class UpdateAllTestsValidator implements ISelectionStatusValidator {
 		/*
@@ -80,8 +84,8 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 		 */
 		public IStatus validate(Object[] selection) {
 			int count= 0;
-			for (int i= 0; i < selection.length; i++) {
-				if (selection[i] instanceof IType) {
+			for (Object element : selection) {
+				if (element instanceof IType) {
 					count++;
 				}
 			}
@@ -103,10 +107,15 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 		}
 
 		private IStatus checkRecursiveSuiteInclusion(Object[] selection){
-			IType suiteClass= fSuiteMethod.getDeclaringType();
-			for (int i= 0; i < selection.length; i++) {
-				if (selection[i] instanceof IType){
-					if (((IType)selection[i]).equals(suiteClass)){
+			IType suiteClass= null;
+			if (fIsJunit4) {
+				suiteClass= (IType) fSuiteClasses.getParent();
+			} else {
+				suiteClass= fSuiteMethod.getDeclaringType();
+			}
+			for (Object element : selection) {
+				if (element instanceof IType){
+					if (((IType)element).equals(suiteClass)){
 						return new JUnitStatus(IStatus.WARNING, WizardMessages.UpdateTestSuite_infinite_recursion);
 					}
 				}
@@ -130,43 +139,59 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 	 */
 	public void run(IAction action) {
 		ILabelProvider lprovider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
-		SuiteClassesContentProvider cprovider= new SuiteClassesContentProvider();
-
-		/* find TestClasses already in Test Suite */
-		IType testSuiteType= fTestSuite.findPrimaryType();
-		fSuiteMethod= testSuiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
-		if (fSuiteMethod.exists()) {
-			try {
-			ISourceRange range= fSuiteMethod.getSourceRange();
-			IBuffer buf= fTestSuite.getBuffer();
-			String originalContent= buf.getText(range.getOffset(), range.getLength());
-			buf.close();
-			if (getTestSuiteClassListRange(originalContent) != null) {
-				CheckedTableSelectionDialog dialog= new CheckedTableSelectionDialog(fShell, lprovider, cprovider);
-				dialog.setValidator(new UpdateAllTestsValidator());
-				dialog.setTitle(WizardMessages.UpdateAllTests_title);
-				dialog.setMessage(WizardMessages.UpdateAllTests_message);
-				Set elements= cprovider.getTests(fPack);
-				elements.remove(testSuiteType);
-				dialog.setInitialSelections(elements.toArray());
-				dialog.setSize(60, 25);
-				dialog.setInput(fPack);
-				if (dialog.open() == Window.OK) {
-					fSelectedTestCases= dialog.getResult();
-					try {
-						PlatformUI.getWorkbench().getProgressService().busyCursorWhile(getRunnable());
-					} catch (Exception e) {
-						JUnitPlugin.log(e);
+		SuiteClassesContentProvider cprovider= new SuiteClassesContentProvider(fIsJunit4);
+
+		if (fIsJunit4) {
+			/* find TestClasses already in Test Suite */
+			IType testSuiteType= fTestSuite.findPrimaryType();
+			fSuiteClasses= testSuiteType.getAnnotation("SuiteClasses"); //$NON-NLS-1$
+			if (fSuiteClasses.exists()) {
+				openTestSelectionDialog(lprovider, cprovider, testSuiteType);
+			} else {
+				noSuiteError();
+			}
+			
+		} else{
+			/* find TestClasses already in Test Suite */
+			IType testSuiteType= fTestSuite.findPrimaryType();
+			fSuiteMethod= testSuiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
+			if (fSuiteMethod.exists()) {
+				try {
+					ISourceRange range= fSuiteMethod.getSourceRange();
+					IBuffer buf= fTestSuite.getBuffer();
+					String originalContent= buf.getText(range.getOffset(), range.getLength());
+					buf.close();
+					if (getTestSuiteClassListRange(originalContent) != null) {
+						openTestSelectionDialog(lprovider, cprovider, testSuiteType);
+					} else {
+						cannotUpdateSuiteError();
 					}
+				} catch (JavaModelException e) {
+					JUnitPlugin.log(e);
 				}
 			} else {
-				cannotUpdateSuiteError();
+				noSuiteError();
 			}
-			} catch (JavaModelException e) {
+		}
+	}
+
+	private void openTestSelectionDialog(ILabelProvider lprovider, SuiteClassesContentProvider cprovider, IType testSuiteType) {
+		CheckedTableSelectionDialog dialog= new CheckedTableSelectionDialog(fShell, lprovider, cprovider);
+		dialog.setValidator(new UpdateAllTestsValidator());
+		dialog.setTitle(WizardMessages.UpdateAllTests_title);
+		dialog.setMessage(WizardMessages.UpdateAllTests_message);
+		Set<IType> elements= cprovider.getTests(fPack);
+		elements.remove(testSuiteType);
+		dialog.setInitialSelections(elements.toArray());
+		dialog.setSize(60, 25);
+		dialog.setInput(fPack);
+		if (dialog.open() == Window.OK) {
+			fSelectedTestCases= dialog.getResult();
+			try {
+				PlatformUI.getWorkbench().getProgressService().busyCursorWhile(getRunnable());
+			} catch (Exception e) {
 				JUnitPlugin.log(e);
 			}
-		} else {
-			noSuiteError();
 		}
 	}
 
@@ -183,40 +208,68 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 				if (packIJE instanceof IPackageFragment) {
 					fPack= (IPackageFragment) packIJE;
 				}
+				IType primaryType = fTestSuite.findPrimaryType();
+				if (primaryType != null) {
+					fIsJunit4 = primaryType.getAnnotation("RunWith").exists(); //$NON-NLS-1$
+				}
+				
 			}
 		}
 	}
 
-	private void updateTestCasesInSuite(IProgressMonitor monitor) {
+	public static void updateTestCasesInJunit4Suite(IProgressMonitor monitor, ICompilationUnit testSuite, IAnnotation testClassesAnnotation, Object[] selectedTestCases) throws JavaModelException {
+		try {
+			monitor.beginTask(WizardMessages.UpdateAllTests_beginTask, 5);
+
+			ISourceRange range= testClassesAnnotation.getSourceRange();
+			IDocument fullSource= new Document(testSuite.getBuffer().getContents());
+			StringBuffer source= new StringBuffer();
+			monitor.worked(1);
+			source.append(getUpdatableAnnotations(selectedTestCases));
+			fullSource.replace(range.getOffset(), range.getLength(), source.toString());
+			monitor.worked(1);
+			String formattedContent= JUnitStubUtility.formatCompilationUnit(testSuite.getJavaProject(), fullSource.get(), testSuite.findRecommendedLineSeparator());
+			IBuffer buf= testSuite.getBuffer();
+			buf.replace(0, buf.getLength(), formattedContent);
+			monitor.worked(1);
+			testSuite.save(new SubProgressMonitor(monitor, 1), true);
+			monitor.worked(1);
+
+
+		}  catch (BadLocationException e) {
+			Assert.isTrue(false, "Should never happen"); //$NON-NLS-1$
+		} finally{
+			monitor.done();
+		}
+	}
+	
+	public static void updateTestCasesInSuite(IProgressMonitor monitor, ICompilationUnit testSuite, IMethod suiteMethod, Object[] selectedTestCases) throws JavaModelException {
 		try {
 			monitor.beginTask(WizardMessages.UpdateAllTests_beginTask, 5);
-			if (! checkValidateEditStatus(fTestSuite, fShell))
-				return;
 
-			ISourceRange range= fSuiteMethod.getSourceRange();
-			IDocument fullSource= new Document(fTestSuite.getBuffer().getContents());
+			ISourceRange range= suiteMethod.getSourceRange();
+			IDocument fullSource= new Document(testSuite.getBuffer().getContents());
 			String originalContent= fullSource.get(range.getOffset(), range.getLength());
 			StringBuffer source= new StringBuffer(originalContent);
-			TestSuiteClassListRange classRange = getTestSuiteClassListRange(source.toString());
+			TestSuiteClassListRange classRange= getTestSuiteClassListRange(source.toString());
 			if (classRange != null) {
 				monitor.worked(1);
 				//					String updatableCode= source.substring(start,end+NewTestSuiteCreationWizardPage.endMarker.length());
-				source.replace(classRange.getStart(), classRange.getEnd(), getUpdatableString(fSelectedTestCases));
+				source.replace(classRange.getStart(), classRange.getEnd(), getUpdatableString(selectedTestCases));
 				fullSource.replace(range.getOffset(), range.getLength(), source.toString());
 				monitor.worked(1);
-				String formattedContent= JUnitStubUtility.formatCompilationUnit(fTestSuite.getJavaProject(), fullSource.get(), fTestSuite.findRecommendedLineSeparator());
+				String formattedContent= JUnitStubUtility.formatCompilationUnit(testSuite.getJavaProject(), fullSource.get(), testSuite.findRecommendedLineSeparator());
 				//buf.replace(range.getOffset(), range.getLength(), formattedContent);
-				IBuffer buf= fTestSuite.getBuffer();
+				IBuffer buf= testSuite.getBuffer();
 				buf.replace(0, buf.getLength(), formattedContent);
 				monitor.worked(1);
-				fTestSuite.save(new SubProgressMonitor(monitor, 1), true);
+				testSuite.save(new SubProgressMonitor(monitor, 1), true);
 				monitor.worked(1);
 			}
-		} catch (JavaModelException e) {
-			ExceptionHandler.handle(e, fShell, WizardMessages.UpdateTestSuite_update, WizardMessages.UpdateTestSuite_error);
+
 		} catch (BadLocationException e) {
 			Assert.isTrue(false, "Should never happen"); //$NON-NLS-1$
-		} finally{
+		} finally {
 			monitor.done();
 		}
 	}
@@ -234,6 +287,8 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 		end += NewTestSuiteWizardPage.NON_COMMENT_END_MARKER.length();
 		return new TestSuiteClassListRange(start, end);
 	}
+	
+	
 
 	/*
 	 * Returns the new code to be included in a new suite() or which replaces old code in an existing suite().
@@ -241,9 +296,9 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 	public static String getUpdatableString(Object[] selectedClasses) {
 		StringBuffer suite= new StringBuffer();
 		suite.append(NewTestSuiteWizardPage.START_MARKER+"\n"); //$NON-NLS-1$
-		for (int i= 0; i < selectedClasses.length; i++) {
-			if (selectedClasses[i] instanceof IType) {
-				IType testType= (IType) selectedClasses[i];
+		for (Object selectedClasse : selectedClasses) {
+			if (selectedClasse instanceof IType) {
+				IType testType= (IType) selectedClasse;
 				IMethod suiteMethod= testType.getMethod("suite", new String[] {}); //$NON-NLS-1$
 				if (!suiteMethod.exists()) {
 					suite.append("suite.addTestSuite("+testType.getElementName()+".class);"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -255,6 +310,25 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 		suite.append("\n"+NewTestSuiteWizardPage.END_MARKER); //$NON-NLS-1$
 		return suite.toString();
 	}
+	
+	/*
+	 * Returns the new test suite annotations which replace old annotations in the existing suite
+	 */
+	public static String getUpdatableAnnotations(Object[] selectedClasses) {
+		StringBuffer buffer = new StringBuffer("@SuiteClasses({"); //$NON-NLS-1$
+		for (int i= 0; i < selectedClasses.length; i++) {
+			if (selectedClasses[i] instanceof IType) {
+				IType testType= (IType) selectedClasses[i];
+				buffer.append(testType.getElementName());
+				buffer.append(".class"); //$NON-NLS-1$
+				if (i < selectedClasses.length - 1)
+					buffer.append(',');
+			}
+		}
+		buffer.append("})"); //$NON-NLS-1$
+		buffer.append("\n"); //$NON-NLS-1$
+		return buffer.toString();
+	}
 
 	public static boolean checkValidateEditStatus(ICompilationUnit testSuiteCu, Shell shell){
 		IStatus status= validateModifiesFiles(getTestSuiteFile(testSuiteCu));
@@ -285,7 +359,16 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 				if (monitor == null) {
 					monitor= new NullProgressMonitor();
 				}
-				updateTestCasesInSuite(monitor);
+				if (! checkValidateEditStatus(fTestSuite, fShell))
+					return;
+				try {
+					if (fIsJunit4)
+						updateTestCasesInJunit4Suite(monitor, fTestSuite, fSuiteClasses, fSelectedTestCases);
+					else
+						updateTestCasesInSuite(monitor, fTestSuite, fSuiteMethod, fSelectedTestCases);
+				} catch (JavaModelException e) {
+					ExceptionHandler.handle(e, fShell, WizardMessages.UpdateTestSuite_update, WizardMessages.UpdateTestSuite_error);
+				}
 			}
 		};
 	}
@@ -297,6 +380,10 @@ public class UpdateTestSuite implements IObjectActionDelegate {
 	}
 
 	private void noSuiteError() {
-		MessageDialog.openError(fShell, WizardMessages.UpdateAllTests_cannotFind_errorDialog_title, WizardMessages.UpdateAllTests_cannotFind_errorDialog_message);
+		if (fIsJunit4) {
+			MessageDialog.openError(fShell, WizardMessages.UpdateAllTests_cannotFind_annotation_errorDialog_title, WizardMessages.UpdateAllTests_cannotFind_annotation_errorDialog_message);
+		} else {
+			MessageDialog.openError(fShell, WizardMessages.UpdateAllTests_cannotFind_errorDialog_title, WizardMessages.UpdateAllTests_cannotFind_errorDialog_message);
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.java
index 36cd4a3..20add9c 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Utzig <mail at jutzig.de> - [JUnit] Update test suite wizard for JUnit 4: @RunWith(Suite.class)... - https://bugs.eclipse.org/155828
  *******************************************************************************/
 package org.eclipse.jdt.internal.junit.wizards;
 
@@ -85,9 +86,12 @@ public final class WizardMessages extends NLS {
 	public static String NewTestSuiteWizPage_typeName_error_name_not_valid;
 	public static String NewTestSuiteWizPage_typeName_error_name_name_discouraged;
 	public static String NewTestSuiteWizPage_typeName_warning_already_exists;
+	public static String NewTestSuiteWizPage_typeName_warning_already_exists_junit4;
 	public static String NewTestSuiteWizPage_typeName_error_filtered;
 	public static String NewTestSuiteWizPage_cannotUpdateDialog_title;
 	public static String NewTestSuiteWizPage_cannotUpdateDialog_message;
+	public static String NewTestClassWizPage_junit3_radio_label;
+	public static String NewTestClassWizPage_junit4_radio_label;
 	public static String NewTestClassWizPage_treeCaption_classSelected;
 	public static String NewTestClassWizPage_treeCaption_classesSelected;
 	public static String NewTestSuiteCreationWizardPage_infinite_recursion;
@@ -98,6 +102,8 @@ public final class WizardMessages extends NLS {
 	public static String UpdateAllTests_beginTask;
 	public static String UpdateAllTests_cannotUpdate_errorDialog_title;
 	public static String UpdateAllTests_cannotUpdate_errorDialog_message;
+	public static String UpdateAllTests_cannotFind_annotation_errorDialog_message;
+	public static String UpdateAllTests_cannotFind_annotation_errorDialog_title;
 	public static String UpdateAllTests_cannotFind_errorDialog_title;
 	public static String UpdateAllTests_cannotFind_errorDialog_message;
 	public static String NewJUnitWizard_op_error_title;
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.properties b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.properties
index 0f983f7..980857e 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/wizards/WizardMessages.properties
@@ -7,6 +7,7 @@
 #
 # Contributors:
 #     IBM Corporation - initial API and implementation
+#     Johannes Utzig <mail at jutzig.de> - [JUnit] Update test suite wizard for JUnit 4: @RunWith(Suite.class)... - https://bugs.eclipse.org/155828
 ###############################################################################
 #
 # Miscellaneous
@@ -89,10 +90,13 @@ NewTestSuiteWizPage_typeName_error_name_qualified=Test suite name must not be qu
 NewTestSuiteWizPage_typeName_error_name_not_valid=Test suite name is not valid.
 NewTestSuiteWizPage_typeName_error_name_name_discouraged=Warning: Test suite name is discouraged.
 NewTestSuiteWizPage_typeName_warning_already_exists=Warning: Test suite already exists. suite() method will be replaced.
+NewTestSuiteWizPage_typeName_warning_already_exists_junit4=Warning: Test suite already exists. @SuiteClasses(...) will be overwritten.
 NewTestSuiteWizPage_typeName_error_filtered= This type is hidden in the workspace due to resource filters.
 NewTestSuiteWizPage_cannotUpdateDialog_title=Cannot update suite() method
 NewTestSuiteWizPage_cannotUpdateDialog_message=The code in suite() that the wizard replaces must start with {0} and end with {1}
 
+NewTestClassWizPage_junit3_radio_label=New JUnit &3 suite
+NewTestClassWizPage_junit4_radio_label=New JUnit &4 suite
 NewTestClassWizPage_treeCaption_classSelected={0} class selected
 NewTestClassWizPage_treeCaption_classesSelected={0} classes selected
 NewTestSuiteCreationWizardPage_infinite_recursion=Warning: Adding a test suite as a test case in itself will result in infinite recursion and StackOverflowError
@@ -107,6 +111,8 @@ UpdateAllTests_message=&Test Classes to be included
 UpdateAllTests_beginTask=Recreating suite() method....
 UpdateAllTests_cannotUpdate_errorDialog_title=Cannot recreate suite() method.
 UpdateAllTests_cannotUpdate_errorDialog_message=The code in suite() that the wizard replaces must start with {0} and end with {1}
+UpdateAllTests_cannotFind_annotation_errorDialog_message=The SuiteClasses() annotation cannot be found.
+UpdateAllTests_cannotFind_annotation_errorDialog_title=Cannot find SuiteClasses() annotation.
 UpdateAllTests_cannotFind_errorDialog_title=Cannot find suite() method.
 UpdateAllTests_cannotFind_errorDialog_message=The suite() method cannot be found.
 
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
index 9f1823b..3ab7ca6 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
@@ -98,9 +98,9 @@ import org.eclipse.jdt.internal.junit.launcher.TestKindRegistry;
 import org.eclipse.jdt.internal.junit.ui.IJUnitHelpContextIds;
 import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
 import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
+import org.eclipse.jdt.internal.junit.util.CoreTestSearchEngine;
 import org.eclipse.jdt.internal.junit.util.JUnitStubUtility;
 import org.eclipse.jdt.internal.junit.util.LayoutUtil;
-import org.eclipse.jdt.internal.junit.util.CoreTestSearchEngine;
 import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
 
 import org.eclipse.jdt.launching.AbstractVMInstall;
@@ -161,7 +161,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 
 	private boolean fIsValid= true;
 	
-	private Set/*<String>*/ fMethodsCache;
+	private Set<String> fMethodsCache;
 	private String fMethodsCacheKey;
 	
 	/**
@@ -207,9 +207,10 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		fTestLoaderViewer= new ComboViewer(comp, SWT.DROP_DOWN | SWT.READ_ONLY);
 		fTestLoaderViewer.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 
-		ArrayList/*<TestKind>*/ items= TestKindRegistry.getDefault().getAllKinds();
+		ArrayList<TestKind> items= TestKindRegistry.getDefault().getAllKinds();
 		fTestLoaderViewer.setContentProvider(new ArrayContentProvider());
 		fTestLoaderViewer.setLabelProvider(new LabelProvider() {
+			@Override
 			public String getText(Object element) {
 				return ((TestKind) element).getDisplayName();
 			}
@@ -237,6 +238,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		gd.horizontalSpan = 3;
 		fTestRadioButton.setLayoutData(gd);
 		fTestRadioButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (fTestRadioButton.getSelection())
 					testModeChanged();
@@ -262,6 +264,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		fProjButton = new Button(comp, SWT.PUSH);
 		fProjButton.setText(JUnitMessages.JUnitLaunchConfigurationTab_label_browse);
 		fProjButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent evt) {
 				handleProjectButtonSelected();
 			}
@@ -289,6 +292,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		fSearchButton.setEnabled(fProjText.getText().length() > 0);
 		fSearchButton.setText(JUnitMessages.JUnitLaunchConfigurationTab_label_search);
 		fSearchButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent evt) {
 				handleSearchButtonSelected();
 			}
@@ -319,6 +323,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		fTestMethodSearchButton.setEnabled(fTestText.getText().length() > 0);
 		fTestMethodSearchButton.setText(JUnitMessages.JUnitLaunchConfigurationTab_label_search_method);
 		fTestMethodSearchButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent evt) {
 				handleTestMethodSearchButtonSelected();
 			}
@@ -356,6 +361,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		fContainerSearchButton = new Button(comp, SWT.PUSH);
 		fContainerSearchButton.setText(JUnitMessages.JUnitLaunchConfigurationTab_label_search);
 		fContainerSearchButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent evt) {
 				handleContainerSearchButtonSelected();
 			}
@@ -528,6 +534,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#dispose()
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		fTestIcon.dispose();
@@ -537,6 +544,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getImage()
 	 */
+	@Override
 	public Image getImage() {
 		return fTestIcon;
 	}
@@ -569,9 +577,8 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 			fTestContainerRadioButton.setSelection(radioSetting[1]);
 		}
 
-		final HashSet typeLookup= new HashSet();
-		for (int i= 0; i < types.length; i++) {
-			IType type= types[i];
+		final HashSet<String> typeLookup= new HashSet<String>();
+		for (IType type : types) {
 			typeLookup.add(type.getPackageFragment().getElementName() + '/' + type.getTypeQualifiedName('.'));
 		}
 		SelectionDialog dialog= null;
@@ -583,6 +590,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 					false,
 					"**", //$NON-NLS-1$
 					new TypeSelectionExtension() {
+						@Override
 						public ITypeInfoFilterExtension getFilterExtension() {
 							return new ITypeInfoFilterExtension() {
 								public boolean select(ITypeInfoRequestor requestor) {
@@ -640,7 +648,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		try {
 			IJavaProject javaProject = getJavaProject();
 			IType testType= javaProject.findType(fTestText.getText());
-			Set methodNames= getMethodsForType(javaProject, testType, getSelectedTestKind());
+			Set<String> methodNames= getMethodsForType(javaProject, testType, getSelectedTestKind());
 			String methodName= chooseMethodName(methodNames);
 			
 			if (methodName != null) {
@@ -653,15 +661,15 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		}
 	}
 
-	private Set getMethodsForType(IJavaProject javaProject, IType type, TestKind testKind) throws JavaModelException {
+	private Set<String> getMethodsForType(IJavaProject javaProject, IType type, TestKind testKind) throws JavaModelException {
 		if (javaProject == null || type == null || testKind == null)
-			return Collections.EMPTY_SET;
+			return Collections.emptySet();
 		
 		String methodsCacheKey= javaProject.getElementName() + '\n' + type.getFullyQualifiedName() + '\n' + testKind.getId();
 		if (methodsCacheKey.equals(fMethodsCacheKey))
 			return fMethodsCache;
 		
-		Set methodNames= new HashSet();
+		Set<String> methodNames= new HashSet<String>();
 		fMethodsCache= methodNames;
 		fMethodsCacheKey= methodsCacheKey;
 
@@ -669,8 +677,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 
 		while (type != null) {
 			IMethod[] methods= type.getMethods();
-			for (int i= 0; i < methods.length; i++) {
-				IMethod method= methods[i];
+			for (IMethod method : methods) {
 				int flags= method.getFlags();
 				// Only include public, non-static, no-arg methods that return void and start with "test":
 				if (Modifier.isPublic(flags) && !Modifier.isStatic(flags) &&
@@ -704,7 +711,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 		return methodNames;
 	}
 
-	private String chooseMethodName(Set methodNames) {
+	private String chooseMethodName(Set<String> methodNames) {
 		Shell shell= getShell();
 
 		ElementListSelectionDialog dialog= new ElementListSelectionDialog(shell, new LabelProvider());
@@ -793,6 +800,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration)
 	 */
+	@Override
 	public boolean isValid(ILaunchConfiguration config) {
 		validatePage();
 		return fIsValid;
@@ -818,6 +826,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#setErrorMessage(java.lang.String)
 	 * @since 3.6
 	 */
+	@Override
 	protected void setErrorMessage(String errorMessage) {
 		fIsValid= errorMessage == null;
 		super.setErrorMessage(errorMessage);
@@ -874,7 +883,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 			}
 			String methodName = fTestMethodText.getText();
 			if (methodName.length() > 0) {
-				Set methodsForType= getMethodsForType(javaProject, type, getSelectedTestKind());
+				Set<String> methodsForType= getMethodsForType(javaProject, type, getSelectedTestKind());
 				if (!methodsForType.contains(methodName)) {
 					super.setErrorMessage(Messages.format(JUnitMessages.JUnitLaunchConfigurationTab_error_test_method_not_found, new String[] { className, methodName, projectName }));
 					return;
@@ -1028,8 +1037,9 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 	}
 
 	private IJavaElement chooseContainer(IJavaElement initElement) {
-		Class[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class, IPackageFragment.class };
+		Class<?>[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class, IPackageFragment.class };
 		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) {
+			@Override
 			public boolean isSelectedValid(Object element) {
 				return true;
 			}
@@ -1037,6 +1047,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 
 		acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class, IPackageFragment.class };
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses) {
+			@Override
 			public boolean select(Viewer viewer, Object parent, Object element) {
 			    if (element instanceof IPackageFragmentRoot && ((IPackageFragmentRoot)element).isArchive())
 			        return false;
@@ -1134,6 +1145,7 @@ public class JUnitLaunchConfigurationTab extends AbstractLaunchConfigurationTab
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getId()
 	 */
+	@Override
 	public String getId() {
 		return "org.eclipse.jdt.junit.JUnitLaunchConfigurationTab"; //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java
index 2d38ad6..1b76ae3 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java
@@ -257,7 +257,7 @@ public class JUnitLaunchShortcut implements ILaunchShortcut2 {
 	 * @return ILaunchConfiguration
 	 * @throws InterruptedException if cancelled by the user
 	 */
-	private ILaunchConfiguration chooseConfiguration(List configList, String mode) throws InterruptedException {
+	private ILaunchConfiguration chooseConfiguration(List<ILaunchConfiguration> configList, String mode) throws InterruptedException {
 		IDebugModelPresentation labelProvider= DebugUITools.newDebugModelPresentation();
 		ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), labelProvider);
 		dialog.setElements(configList.toArray());
@@ -360,9 +360,9 @@ public class JUnitLaunchShortcut implements ILaunchShortcut2 {
 
 	private static boolean hasSameAttributes(ILaunchConfiguration config1, ILaunchConfiguration config2, String[] attributeToCompare) {
 		try {
-			for (int i= 0; i < attributeToCompare.length; i++) {
-				String val1= config1.getAttribute(attributeToCompare[i], EMPTY_STRING);
-				String val2= config2.getAttribute(attributeToCompare[i], EMPTY_STRING);
+			for (String element : attributeToCompare) {
+				String val1= config1.getAttribute(element, EMPTY_STRING);
+				String val2= config2.getAttribute(element, EMPTY_STRING);
 				if (!val1.equals(val2)) {
 					return false;
 				}
@@ -376,7 +376,7 @@ public class JUnitLaunchShortcut implements ILaunchShortcut2 {
 
 
 	private ILaunchConfiguration findExistingLaunchConfiguration(ILaunchConfigurationWorkingCopy temporary, String mode) throws InterruptedException, CoreException {
-		List candidateConfigs= findExistingLaunchConfigurations(temporary);
+		List<ILaunchConfiguration> candidateConfigs= findExistingLaunchConfigurations(temporary);
 
 		// If there are no existing configs associated with the IType, create
 		// one.
@@ -388,7 +388,7 @@ public class JUnitLaunchShortcut implements ILaunchShortcut2 {
 		if (candidateCount == 0) {
 			return null;
 		} else if (candidateCount == 1) {
-			return (ILaunchConfiguration) candidateConfigs.get(0);
+			return candidateConfigs.get(0);
 		} else {
 			// Prompt the user to choose a config. A null result means the user
 			// cancelled the dialog, in which case this method returns null,
@@ -402,15 +402,14 @@ public class JUnitLaunchShortcut implements ILaunchShortcut2 {
 		return null;
 	}
 
-	private List findExistingLaunchConfigurations(ILaunchConfigurationWorkingCopy temporary) throws CoreException {
+	private List<ILaunchConfiguration> findExistingLaunchConfigurations(ILaunchConfigurationWorkingCopy temporary) throws CoreException {
 		ILaunchConfigurationType configType= temporary.getType();
 
 		ILaunchConfiguration[] configs= getLaunchManager().getLaunchConfigurations(configType);
 		String[] attributeToCompare= getAttributeNamesToCompare();
 
-		ArrayList candidateConfigs= new ArrayList(configs.length);
-		for (int i= 0; i < configs.length; i++) {
-			ILaunchConfiguration config= configs[i];
+		ArrayList<ILaunchConfiguration> candidateConfigs= new ArrayList<ILaunchConfiguration>(configs.length);
+		for (ILaunchConfiguration config : configs) {
 			if (hasSameAttributes(config, temporary, attributeToCompare)) {
 				candidateConfigs.add(config);
 			}
@@ -490,8 +489,8 @@ public class JUnitLaunchShortcut implements ILaunchShortcut2 {
 					return null;
 				}
 				ILaunchConfigurationWorkingCopy workingCopy= createLaunchConfiguration(elementToLaunch);
-				List list= findExistingLaunchConfigurations(workingCopy);
-				return (ILaunchConfiguration[]) list.toArray(new ILaunchConfiguration[list.size()]);
+				List<ILaunchConfiguration> list= findExistingLaunchConfigurations(workingCopy);
+				return list.toArray(new ILaunchConfiguration[list.size()]);
 			} catch (CoreException e) {
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageOne.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageOne.java
index 8d98583..b4f4a62 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageOne.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageOne.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Sebastian Davids, sdavids at gmx.de - bug 38507
  *     Sebastian Davids, sdavids at gmx.de - 113998 [JUnit] New Test Case Wizard: Class Under Test Dialog -- allow Enums
+ *     Kris De Volder <kris.de.volder at gmail.com> - Allow changing the default superclass in NewTestCaseWizardPageOne - https://bugs.eclipse.org/312204
  *******************************************************************************/
 package org.eclipse.jdt.junit.wizards;
 
@@ -19,6 +20,8 @@ import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
 
+import com.ibm.icu.text.UTF16;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -72,8 +75,8 @@ import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
 import org.eclipse.jdt.internal.junit.util.CoreTestSearchEngine;
 import org.eclipse.jdt.internal.junit.util.JUnitStatus;
 import org.eclipse.jdt.internal.junit.util.JUnitStubUtility;
-import org.eclipse.jdt.internal.junit.util.LayoutUtil;
 import org.eclipse.jdt.internal.junit.util.JUnitStubUtility.GenStubSettings;
+import org.eclipse.jdt.internal.junit.util.LayoutUtil;
 import org.eclipse.jdt.internal.junit.wizards.MethodStubsSelectionButtonGroup;
 import org.eclipse.jdt.internal.junit.wizards.WizardMessages;
 
@@ -113,8 +116,8 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 
 	private static final String COMPLIANCE_PAGE_ID= "org.eclipse.jdt.ui.propertyPages.CompliancePreferencePage"; //$NON-NLS-1$
 	private static final String BUILD_PATH_PAGE_ID= "org.eclipse.jdt.ui.propertyPages.BuildPathsPropertyPage"; //$NON-NLS-1$
-	private static final Object BUILD_PATH_KEY_ADD_ENTRY= "add_classpath_entry"; //$NON-NLS-1$
-	private static final Object BUILD_PATH_BLOCK= "block_until_buildpath_applied"; //$NON-NLS-1$
+	private static final String BUILD_PATH_KEY_ADD_ENTRY= "add_classpath_entry"; //$NON-NLS-1$
+	private static final String BUILD_PATH_BLOCK= "block_until_buildpath_applied"; //$NON-NLS-1$
 
 	private static final String KEY_NO_LINK= "PropertyAndPreferencePage.nolink"; //$NON-NLS-1$
 
@@ -248,7 +251,6 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 			}
 		}
 		setJUnit4(isJunit4, true);
-
 		updateStatus(getStatusList());
 	}
 
@@ -287,17 +289,28 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	private void internalSetJUnit4(boolean isJUnit4) {
 		fIsJunit4= isJUnit4;
 		fJunit4Status= junit4Changed();
-		if (fIsJunit4) {
-			setSuperClass("java.lang.Object", false); //$NON-NLS-1$
-		} else {
-			setSuperClass(JUnitCorePlugin.TEST_SUPERCLASS_NAME, true);
-		}
+		if (isDefaultSuperClass() || getSuperClass().trim().equals("")) //$NON-NLS-1$
+			setSuperClass(getDefaultSuperClassName(), true);
+		fSuperClassStatus= superClassChanged(); //validate superclass field when toggled
 		handleFieldChanged(JUNIT4TOGGLE);
 	}
 
+	/**
+	 * Returns whether the super class name is one of the default super class names.
+	 * 
+	 * @return <code>true</code> if the super class name is one of the default super class names,
+	 *         <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	private boolean isDefaultSuperClass() {
+		String superClass= getSuperClass();
+		return superClass.equals(getJUnit3TestSuperclassName()) || superClass.equals("java.lang.Object"); //$NON-NLS-1$
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 		if (fieldName.equals(CONTAINER)) {
@@ -416,7 +429,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 
 		fClassUnderTestButton= new Button(composite, SWT.PUSH);
 		fClassUnderTestButton.setText(WizardMessages.NewTestCaseWizardPageOne_class_to_test_browse);
-		fClassUnderTestButton.setEnabled(true);
+		fClassUnderTestButton.setEnabled(getPackageFragmentRoot() != null);
 		fClassUnderTestButton.addSelectionListener(new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) {
 				classToTestButtonPressed();
@@ -453,6 +466,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 		inner.setLayout(layout);
 
 		SelectionAdapter listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				boolean isSelected= ((Button) e.widget).getSelection();
 				internalSetJUnit4(isSelected);
@@ -497,6 +511,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 		fLink= new Link(inner, SWT.WRAP);
 		fLink.setText("\n\n"); //$NON-NLS-1$
 		fLink.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				performBuildpathConfiguration(e.text);
 			}
@@ -516,27 +531,27 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 
 		if ("a3".equals(data)) { // add and configure JUnit 3 //$NON-NLS-1$
 			String id= BUILD_PATH_PAGE_ID;
-			Map input= new HashMap();
+			Map<String, Object> input= new HashMap<String, Object>();
 			IClasspathEntry newEntry= BuildPathSupport.getJUnit3ClasspathEntry();
 			input.put(BUILD_PATH_KEY_ADD_ENTRY, newEntry);
 			input.put(BUILD_PATH_BLOCK, Boolean.TRUE);
 			PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, id, new String[] { id }, input).open();
 		} else if ("a4".equals(data)) { // add and configure JUnit 4 //$NON-NLS-1$
 			String id= BUILD_PATH_PAGE_ID;
-			Map input= new HashMap();
+			Map<String, Object> input= new HashMap<String, Object>();
 			IClasspathEntry newEntry= BuildPathSupport.getJUnit4ClasspathEntry();
 			input.put(BUILD_PATH_KEY_ADD_ENTRY, newEntry);
 			input.put(BUILD_PATH_BLOCK, Boolean.TRUE);
 			PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, id, new String[] { id }, input).open();
 		} else if ("b".equals(data)) { // open build path //$NON-NLS-1$
 			String id= BUILD_PATH_PAGE_ID;
-			Map input= new HashMap();
+			Map<String, Object> input= new HashMap<String, Object>();
 			input.put(BUILD_PATH_BLOCK, Boolean.TRUE);
 			PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, id, new String[] { id }, input).open();
 		} else if ("c".equals(data)) { // open compliance //$NON-NLS-1$
 			String buildPath= BUILD_PATH_PAGE_ID;
 			String complianceId= COMPLIANCE_PAGE_ID;
-			Map input= new HashMap();
+			Map<String, Boolean> input= new HashMap<String, Boolean>();
 			input.put(BUILD_PATH_BLOCK, Boolean.TRUE);
 			input.put(KEY_NO_LINK, Boolean.TRUE);
 			PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, complianceId, new String[] { buildPath, complianceId  }, data).open();
@@ -604,6 +619,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#packageChanged()
 	 */
+	@Override
 	protected IStatus packageChanged() {
 		IStatus status= super.packageChanged();
 		fClassToTestCompletionProcessor.setPackageFragment(getPackageFragment());
@@ -702,6 +718,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#createTypeMembers(org.eclipse.jdt.core.IType, org.eclipse.jdt.ui.wizards.NewTypeWizardPage.ImportsManager, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
 		if (fMethodStubsButtons.isSelected(IDX_CONSTRUCTOR))
 			createConstructor(type, imports);
@@ -722,7 +739,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 			createTearDown(type, imports);
 		}
 
-		if (fClassUnderTest != null) {
+		if (fClassUnderTest != null || isJUnit4()) {
 			createTestMethodStubs(type, imports);
 		}
 
@@ -740,9 +757,9 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 		if (type.exists()) {
 			typeHierarchy= type.newSupertypeHierarchy(null);
 			superTypes= typeHierarchy.getAllSuperclasses(type);
-			for (int i= 0; i < superTypes.length; i++) {
-				if (superTypes[i].exists()) {
-					IMethod constrMethod= superTypes[i].getMethod(superTypes[i].getElementName(), new String[] {"Ljava.lang.String;"}); //$NON-NLS-1$
+			for (IType superType : superTypes) {
+				if (superType.exists()) {
+					IMethod constrMethod= superType.getMethod(superType.getElementName(), new String[] {"Ljava.lang.String;"}); //$NON-NLS-1$
 					if (constrMethod.exists() && constrMethod.isConstructor()) {
 						methodTemplate= constrMethod;
 						break;
@@ -784,9 +801,9 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 		if (type.exists()) {
 			typeHierarchy= type.newSupertypeHierarchy(null);
 			superTypes= typeHierarchy.getAllSuperclasses(type);
-			for (int i= 0; i < superTypes.length; i++) {
-				if (superTypes[i].exists()) {
-					IMethod testMethod= superTypes[i].getMethod(methodName, new String[] {});
+			for (IType superType : superTypes) {
+				if (superType.exists()) {
+					IMethod testMethod= superType.getMethod(methodName, new String[] {});
 					if (testMethod.exists()) {
 						return testMethod;
 					}
@@ -864,64 +881,87 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 
 	private void createTestMethodStubs(IType type, ImportsManager imports) throws CoreException {
 		IMethod[] methods= fPage2.getCheckedMethods();
-		if (methods.length == 0)
+		if (methods.length == 0) {
+			if (isJUnit4()) {
+				List<String> names= new ArrayList<String>();
+				createTestMethod(type, imports, null, null, names);
+			}
 			return;
+		}
 		/* find overloaded methods */
 		IMethod[] allMethodsArray= fPage2.getAllMethods();
-		List allMethods= new ArrayList();
+		List<IMethod> allMethods= new ArrayList<IMethod>();
 		allMethods.addAll(Arrays.asList(allMethodsArray));
-		List overloadedMethods= getOverloadedMethods(allMethods);
+		List<IMethod> overloadedMethods= getOverloadedMethods(allMethods);
 
 		/* used when for example both sum and Sum methods are present. Then
 		 * sum -> testSum
 		 * Sum -> testSum1
 		 */
-		List names= new ArrayList();
-		for (int i = 0; i < methods.length; i++) {
-			IMethod method= methods[i];
-			String elementName= method.getElementName();
-			StringBuffer name= new StringBuffer(PREFIX).append(Character.toUpperCase(elementName.charAt(0))).append(elementName.substring(1));
-			StringBuffer buffer= new StringBuffer();
+		List<String> names= new ArrayList<String>();
+		for (IMethod method : methods) {
+			createTestMethod(type, imports, method, overloadedMethods, names);
+		}
+	}
 
+	/**
+	 * Creates a test method.
+	 * 
+	 * @param type the type to create the method
+	 * @param imports the imports manager
+	 * @param method the method or <code>null</code>
+	 * @param overloadedMethods the list of overloaded methods or <code>null</code>
+	 * @param names the list of method names
+	 * @throws CoreException if the element could not be created
+	 * @since 3.7
+	 */
+	private void createTestMethod(IType type, ImportsManager imports, IMethod method, List<IMethod> overloadedMethods, List<String> names) throws CoreException {
+		StringBuffer buffer= new StringBuffer();
+		StringBuffer name;
+		if (method != null) {
+			String elementName= method.getElementName();
+			name= new StringBuffer(PREFIX).append(Character.toUpperCase(elementName.charAt(0))).append(elementName.substring(1));
 			final boolean contains= overloadedMethods.contains(method);
 			if (contains)
 				appendParameterNamesToMethodName(name, method.getParameterTypes());
+		} else {
+			name= new StringBuffer(PREFIX);
+		}
 
-			replaceIllegalCharacters(name);
-			/* void foo(java.lang.StringBuffer sb) {}
-			 *  void foo(mypackage1.StringBuffer sb) {}
-			 *  void foo(mypackage2.StringBuffer sb) {}
-			 * ->
-			 *  testFooStringBuffer()
-			 *  testFooStringBuffer1()
-			 *  testFooStringBuffer2()
-			 */
-			String testName= name.toString();
-			if (names.contains(testName)) {
-				int suffix= 1;
-				while (names.contains(testName + Integer.toString(suffix)))
-					suffix++;
-				name.append(Integer.toString(suffix));
-			}
-			testName= name.toString();
-			names.add(testName);
-
-			if (isAddComments()) {
-				appendMethodComment(buffer, method);
-			}
-			if (isJUnit4()) {
-				buffer.append('@').append(imports.addImport(JUnitCorePlugin.JUNIT4_ANNOTATION_NAME)).append(getLineDelimiter());
-			}
+		replaceIllegalCharacters(name);
+		/* void foo(java.lang.StringBuffer sb) {}
+		 *  void foo(mypackage1.StringBuffer sb) {}
+		 *  void foo(mypackage2.StringBuffer sb) {}
+		 * ->
+		 *  testFooStringBuffer()
+		 *  testFooStringBuffer1()
+		 *  testFooStringBuffer2()
+		 */
+		String testName= name.toString();
+		if (names.contains(testName)) {
+			int suffix= 1;
+			while (names.contains(testName + Integer.toString(suffix)))
+				suffix++;
+			name.append(Integer.toString(suffix));
+		}
+		testName= name.toString();
+		names.add(testName);
 
-			buffer.append("public ");//$NON-NLS-1$
-			if (fPage2.getCreateFinalMethodStubsButtonSelection())
-				buffer.append("final "); //$NON-NLS-1$
-			buffer.append("void ");//$NON-NLS-1$
-			buffer.append(testName);
-			buffer.append("()");//$NON-NLS-1$
-			appendTestMethodBody(buffer, type.getCompilationUnit());
-			type.createMethod(buffer.toString(), null, false, null);
+		if (isAddComments() && method != null) {
+			appendMethodComment(buffer, method);
 		}
+		if (isJUnit4()) {
+			buffer.append('@').append(imports.addImport(JUnitCorePlugin.JUNIT4_ANNOTATION_NAME)).append(getLineDelimiter());
+		}
+
+		buffer.append("public ");//$NON-NLS-1$
+		if (fPage2.getCreateFinalMethodStubsButtonSelection())
+			buffer.append("final "); //$NON-NLS-1$
+		buffer.append("void ");//$NON-NLS-1$
+		buffer.append(testName);
+		buffer.append("()");//$NON-NLS-1$
+		appendTestMethodBody(buffer, type.getCompilationUnit());
+		type.createMethod(buffer.toString(), null, false, null);
 	}
 
 	private void replaceIllegalCharacters(StringBuffer buffer) {
@@ -934,8 +974,20 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 				buffer.replace(index, index + 1, OF_TAG);
 			else if (character == '?')
 				buffer.replace(index, index + 1, QUESTION_MARK_TAG);
-			else if (!Character.isJavaIdentifierPart(character))
-				buffer.deleteCharAt(index);
+			else if (!Character.isJavaIdentifierPart(character)) {
+				// Check for surrogates
+				if (!UTF16.isSurrogate(character)) {
+					/*
+					 * XXX: Here we should create the code point and test whether
+					 * it is a Java identifier part. Currently this is not possible
+					 * because java.lang.Character in 1.4 does not support surrogates
+					 * and because com.ibm.icu.lang.UCharacter.isJavaIdentifierPart(int)
+					 * is not correctly implemented.
+					 */
+					buffer.deleteCharAt(index);
+				}
+
+			}
 		}
 	}
 
@@ -965,13 +1017,13 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	}
 
 	private void appendParameterNamesToMethodName(StringBuffer buffer, String[] parameters) {
-		for (int i= 0; i < parameters.length; i++) {
-			final StringBuffer buf= new StringBuffer(Signature.getSimpleName(Signature.toString(Signature.getElementType(parameters[i]))));
+		for (String parameter : parameters) {
+			final StringBuffer buf= new StringBuffer(Signature.getSimpleName(Signature.toString(Signature.getElementType(parameter))));
 			final char character= buf.charAt(0);
 			if (buf.length() > 0 && !Character.isUpperCase(character))
 				buf.setCharAt(0, Character.toUpperCase(character));
 			buffer.append(buf.toString());
-			for (int j= 0, arrayCount= Signature.getArrayCount(parameters[i]); j < arrayCount; j++) {
+			for (int j= 0, arrayCount= Signature.getArrayCount(parameter); j < arrayCount; j++) {
 				buffer.append("Array"); //$NON-NLS-1$
 			}
 		}
@@ -1005,14 +1057,14 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	}
 
 
-	private List getOverloadedMethods(List allMethods) {
-		List overloadedMethods= new ArrayList();
+	private List<IMethod> getOverloadedMethods(List<IMethod> allMethods) {
+		List<IMethod> overloadedMethods= new ArrayList<IMethod>();
 		for (int i= 0; i < allMethods.size(); i++) {
-			IMethod current= (IMethod) allMethods.get(i);
+			IMethod current= allMethods.get(i);
 			String currentName= current.getElementName();
 			boolean currentAdded= false;
-			for (ListIterator iter= allMethods.listIterator(i+1); iter.hasNext(); ) {
-				IMethod iterMethod= (IMethod) iter.next();
+			for (ListIterator<IMethod> iter= allMethods.listIterator(i+1); iter.hasNext(); ) {
+				IMethod iterMethod= iter.next();
 				if (iterMethod.getElementName().equals(currentName)) {
 					//method is overloaded
 					if (!currentAdded) {
@@ -1030,6 +1082,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (!visible) {
@@ -1077,18 +1130,21 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#superClassChanged()
 	 */
+	@Override
 	protected IStatus superClassChanged() {
-		// replaces the super class validation of of the normal type wizard
-		if (isJUnit4()) {
-			return new JUnitStatus();
-		}
-
+		IStatus stat= super.superClassChanged();
+		if (stat.getSeverity() != IStatus.OK)
+			return stat;
 		String superClassName= getSuperClass();
 		JUnitStatus status= new JUnitStatus();
+		boolean isJUnit4= isJUnit4();
 		if (superClassName == null || superClassName.trim().equals("")) { //$NON-NLS-1$
-			status.setError(WizardMessages.NewTestCaseWizardPageOne_error_superclass_empty);
+			if (!isJUnit4)
+				status.setError(WizardMessages.NewTestCaseWizardPageOne_error_superclass_empty);
 			return status;
 		}
+		if (isJUnit4 && superClassName.equals("java.lang.Object")) //$NON-NLS-1$
+			return status;
 		if (getPackageFragmentRoot() != null) {
 			try {
 				IType type= resolveClassNameToType(getPackageFragmentRoot().getJavaProject(), getPackageFragment(), superClassName);
@@ -1100,7 +1156,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 					status.setError(WizardMessages.NewTestCaseWizardPageOne_error_superclass_is_interface);
 					return status;
 				}
-				if (!CoreTestSearchEngine.isTestImplementor(type)) { // TODO: expensive!
+				if (!isJUnit4 && !CoreTestSearchEngine.isTestImplementor(type)) { // TODO: expensive!
 					status.setError(Messages.format(WizardMessages.NewTestCaseWizardPageOne_error_superclass_not_implementing_test_interface, BasicElementLabels.getJavaElementName(JUnitCorePlugin.TEST_INTERFACE_NAME)));
 					return status;
 				}
@@ -1114,6 +1170,7 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizardPage#canFlipToNextPage()
 	 */
+	@Override
 	public boolean canFlipToNextPage() {
 		return super.canFlipToNextPage() && getClassUnderTest() != null;
 	}
@@ -1173,4 +1230,28 @@ public class NewTestCaseWizardPageOne extends NewTypeWizardPage {
 		}
 	}
 
+	/**
+	 * Hook method that is called to determine the name of the superclass set for
+	 * a JUnit 3 style test case. By default, the name of the JUnit 3 TestCase class is
+	 * returned. Implementors can override this behavior to return the name of a
+	 * subclass instead.
+	 *
+	 * @return the fully qualified name of a subclass of the JUnit 3 TestCase class. 
+	 *
+	 * @since 3.7
+	 */
+	protected String getJUnit3TestSuperclassName() {
+		return JUnitCorePlugin.TEST_SUPERCLASS_NAME;
+	}
+
+	/**
+	 * Returns the default value for the super class field.
+	 * 
+	 * @return the default value for the super class field
+	 * @since 3.7
+	 */
+	private String getDefaultSuperClassName() {
+		return isJUnit4() ? "java.lang.Object" : getJUnit3TestSuperclassName(); //$NON-NLS-1$
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageTwo.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageTwo.java
index 4662f3e..981e7b4 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageTwo.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestCaseWizardPageTwo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -124,6 +124,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 		prefixContainer.setLayout(layout);
 
 		SelectionListener listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				doCheckBoxSelected(e.widget);
 			}
@@ -174,6 +175,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 			}
 		});
 		fMethodsTree.addFilter(new ViewerFilter() {
+			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
 				if (element instanceof IMethod) {
 					IMethod method = (IMethod) element;
@@ -197,6 +199,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 		gd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
 		fSelectAllButton.setLayoutData(gd);
 		fSelectAllButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fMethodsTree.setCheckedElements((Object[]) fMethodsTree.getInput());
 				doCheckedStateChanged();
@@ -209,6 +212,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 		gd= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
 		fDeselectAllButton.setLayoutData(gd);
 		fDeselectAllButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fMethodsTree.setCheckedElements(new Object[0]);
 				doCheckedStateChanged();
@@ -253,6 +257,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
@@ -260,7 +265,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 				return;
 			}
 
-			ArrayList types= null;
+			ArrayList<IType> types= null;
 			try {
 				ITypeHierarchy hierarchy= fClassToTest.newSupertypeHierarchy(null);
 				IType[] superTypes;
@@ -270,14 +275,14 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 					superTypes= hierarchy.getAllSuperInterfaces(fClassToTest);
 				else
 					superTypes= new IType[0];
-				types= new ArrayList(superTypes.length+1);
+				types= new ArrayList<IType>(superTypes.length+1);
 				types.add(fClassToTest);
 				types.addAll(Arrays.asList(superTypes));
 			} catch(JavaModelException e) {
 				JUnitPlugin.log(e);
 			}
 			if (types == null)
-				types= new ArrayList();
+				types= new ArrayList<IType>();
 			fMethodsTree.setContentProvider(new MethodsTreeContentProvider(types.toArray()));
 			fMethodsTree.setInput(types.toArray());
 			fMethodsTree.setSelection(new StructuredSelection(fClassToTest), true);
@@ -316,7 +321,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 
 		public MethodsTreeContentProvider(Object[] types) {
 			fTypes= types;
-			Vector methods= new Vector();
+			Vector<IMethod> methods= new Vector<IMethod>();
 			for (int i = types.length-1; i > -1; i--) {
 				Object object = types[i];
 				if (object instanceof IType) {
@@ -329,7 +334,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 							int flags= currMethod.getFlags();
 							if (!Flags.isPrivate(flags) && !Flags.isSynthetic(flags)) {
 								for (int k = 0; k < methods.size(); k++) {
-									IMethod m= ((IMethod)methods.get(k));
+									IMethod m= methods.get(k);
 									if (m.getElementName().equals(currMethod.getElementName())
 										&& m.getSignature().equals(currMethod.getSignature())) {
 										methods.set(k,currMethod);
@@ -354,7 +359,7 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 		public Object[] getChildren(Object parentElement) {
 			if (parentElement instanceof IType) {
 				IType parentType= (IType)parentElement;
-				ArrayList result= new ArrayList(fMethods.length);
+				ArrayList<IMethod> result= new ArrayList<IMethod>(fMethods.length);
 				for (int i= 0; i < fMethods.length; i++) {
 					if (fMethods[i].getDeclaringType().equals(parentType)) {
 						result.add(fMethods[i]);
@@ -427,8 +432,8 @@ public class NewTestCaseWizardPageTwo extends WizardPage {
 		fCheckedObjects= checked;
 
 		int checkedMethodCount= 0;
-		for (int i= 0; i < checked.length; i++) {
-			if (checked[i] instanceof IMethod)
+		for (Object element : checked) {
+			if (element instanceof IMethod)
 				checkedMethodCount++;
 		}
 		String label= ""; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestSuiteWizardPage.java b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestSuiteWizardPage.java
index cb6a179..34134eb 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestSuiteWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/wizards/NewTestSuiteWizardPage.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Johannes Utzig <mail at jutzig.de> - [JUnit] Update test suite wizard for JUnit 4: @RunWith(Suite.class)... - https://bugs.eclipse.org/155828
  *******************************************************************************/
 package org.eclipse.jdt.junit.wizards;
 
@@ -41,6 +42,7 @@ import org.eclipse.jface.text.IDocument;
 
 import org.eclipse.ui.PlatformUI;
 
+import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
@@ -53,8 +55,10 @@ import org.eclipse.jdt.core.JavaModelException;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.util.JavaConventionsUtil;
+import org.eclipse.jdt.internal.junit.JUnitCorePlugin;
 import org.eclipse.jdt.internal.junit.Messages;
 import org.eclipse.jdt.internal.junit.ui.IJUnitHelpContextIds;
+import org.eclipse.jdt.internal.junit.util.CoreTestSearchEngine;
 import org.eclipse.jdt.internal.junit.util.JUnitStatus;
 import org.eclipse.jdt.internal.junit.util.JUnitStubUtility;
 import org.eclipse.jdt.internal.junit.util.LayoutUtil;
@@ -100,6 +104,13 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 
 	/** Field ID of the class in suite field. */
 	public final static String CLASSES_IN_SUITE= PAGE_NAME + ".classesinsuite"; //$NON-NLS-1$
+	
+	/**
+	 * Field ID of the junit4 toggle field.
+	 *  
+	 * @since 3.7
+	 */
+	public final static String JUNIT4TOGGLE= PAGE_NAME + ".junit4toggle"; //$NON-NLS-1$
 
 	private CheckboxTableViewer fClassesInSuiteTable;
 	private IStatus fClassesInSuiteStatus;
@@ -108,6 +119,11 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 
 	private boolean fUpdatedExistingClassButton;
 
+	private Button fJUnit4Toggle;
+	private Button fJUnit3Toggle;
+	private boolean fIsJunit4;
+	private boolean fIsJunit4Enabled;
+	
 	/**
 	 * Creates a new <code>NewTestSuiteWizardPage</code>.
 	 */
@@ -131,7 +147,7 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 		GridLayout layout= new GridLayout();
 		layout.numColumns= nColumns;
 		composite.setLayout(layout);
-
+		createJUnit4Controls(composite, nColumns);
 		createContainerControls(composite, nColumns);
 		createPackageControls(composite, nColumns);
 		//createSeparator(composite, nColumns);
@@ -163,6 +179,15 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 		IJavaElement jelem= getInitialJavaElement(selection);
 		initContainerPage(jelem);
 		initSuitePage(jelem);
+		boolean isJunit4= false;
+		if (jelem != null && jelem.getElementType() != IJavaElement.JAVA_MODEL) {
+			IJavaProject project= jelem.getJavaProject();
+			isJunit4= CoreTestSearchEngine.hasTestAnnotation(project);
+			if (!isJunit4 && !CoreTestSearchEngine.hasTestCaseType(project) && JUnitStubUtility.is50OrHigher(project)) {
+				isJunit4= true;
+			}
+		}
+		setJUnit4(isJunit4, true);
 		doStatusUpdate();
 	}
 
@@ -184,9 +209,10 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(java.lang.String)
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
-		if (fieldName.equals(PACKAGE) || fieldName.equals(CONTAINER)) {
+		if (fieldName.equals(PACKAGE) || fieldName.equals(CONTAINER) || fieldName.equals(JUNIT4TOGGLE)) {
 			updateClassesInSuiteTable();
 		} else if (fieldName.equals(CLASSES_IN_SUITE)) {
 			fClassesInSuiteStatus= classesInSuiteChanged();
@@ -214,6 +240,7 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		if (visible) {
 			setFocus();
@@ -274,7 +301,7 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 			gd.horizontalSpan= nColumns-1;
 
 			fClassesInSuiteTable.getTable().setLayoutData(gd);
-			fClassesInSuiteTable.setContentProvider(new SuiteClassesContentProvider());
+			fClassesInSuiteTable.setContentProvider(new SuiteClassesContentProvider(isJUnit4()));
 			fClassesInSuiteTable.setLabelProvider(new JavaElementLabelProvider());
 			fClassesInSuiteTable.addCheckStateListener(new ICheckStateListener() {
 				public void checkStateChanged(CheckStateChangedEvent event) {
@@ -296,6 +323,7 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 			bgd.widthHint = LayoutUtil.getButtonWidthHint(selectAllButton);
 			selectAllButton.setLayoutData(bgd);
 			selectAllButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fClassesInSuiteTable.setAllChecked(true);
 					handleFieldChanged(CLASSES_IN_SUITE);
@@ -308,6 +336,7 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 			bgd.widthHint = LayoutUtil.getButtonWidthHint(deselectAllButton);
 			deselectAllButton.setLayoutData(bgd);
 			deselectAllButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fClassesInSuiteTable.setAllChecked(false);
 					handleFieldChanged(CLASSES_IN_SUITE);
@@ -328,9 +357,11 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#createTypeMembers(org.eclipse.jdt.core.IType, org.eclipse.jdt.ui.wizards.NewTypeWizardPage.ImportsManager, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
 		writeImports(imports);
-		type.createMethod(getSuiteMethodString(type), null, false, null);
+		if(!isJUnit4())
+			type.createMethod(getSuiteMethodString(type), null, false, null);
 	}
 
 	/*
@@ -351,6 +382,7 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#createType(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public void createType(IProgressMonitor monitor) throws CoreException, InterruptedException {
 		IPackageFragment pack= getPackageFragment();
 		ICompilationUnit cu= pack.getCompilationUnit(getTypeName() + ".java"); //$NON-NLS-1$
@@ -365,50 +397,53 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	}
 
 	private void updateExistingType(ICompilationUnit cu, IProgressMonitor monitor) throws JavaModelException {
-		if (! UpdateTestSuite.checkValidateEditStatus(cu, getShell()))
+		if (!UpdateTestSuite.checkValidateEditStatus(cu, getShell()))
 			return;
 		IType suiteType= cu.getType(getTypeName());
 		monitor.beginTask(WizardMessages.NewTestSuiteWizPage_createType_beginTask, 10);
-		IMethod suiteMethod= suiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
-		monitor.worked(1);
-		String lineDelimiter= cu.findRecommendedLineSeparator();
-		if (suiteMethod.exists()) {
-			ISourceRange range= suiteMethod.getSourceRange();
-			if (range != null) {
-				try {
-					IDocument fullSource= new Document(cu.getBuffer().getContents());
-					String originalContent= fullSource.get(range.getOffset(), range.getLength());
-					StringBuffer source= new StringBuffer(originalContent);
-					TestSuiteClassListRange classListRange = UpdateTestSuite.getTestSuiteClassListRange(originalContent);
-					if (classListRange != null) {
-						// TODO: copied
-						monitor.subTask(WizardMessages.NewTestSuiteWizPage_createType_updating_suite_method);
-						monitor.worked(1);
-						source.replace(classListRange.getStart(), classListRange.getEnd(), getUpdatableString());
-						fullSource.replace(range.getOffset(), range.getLength(), source.toString());
-						monitor.worked(1);
-						String formattedContent= JUnitStubUtility.formatCompilationUnit(cu.getJavaProject(), fullSource.get(), lineDelimiter);
-						cu.getBuffer().setContents(formattedContent);
-						monitor.worked(1);
-						cu.save(new SubProgressMonitor(monitor, 1), false);
-					} else {
-						cannotUpdateSuiteError();
-					}
-				} catch (BadLocationException e) {
-					Assert.isTrue(false, "Should never happen"); //$NON-NLS-1$
-				}
+		if (isJUnit4()) {
+			/* find TestClasses already in Test Suite */
+			IAnnotation suiteClasses= suiteType.getAnnotation("SuiteClasses"); //$NON-NLS-1$
+			if (suiteClasses.exists()) {
+				UpdateTestSuite.updateTestCasesInJunit4Suite(new SubProgressMonitor(monitor, 5), cu, suiteClasses, fClassesInSuiteTable.getCheckedElements());
 			} else {
-				MessageDialog.openError(getShell(), WizardMessages.NewTestSuiteWizPage_createType_updateErrorDialog_title, WizardMessages.NewTestSuiteWizPage_createType_updateErrorDialog_message);
+				cannotUpdateSuiteError();
 			}
 		} else {
-			suiteType.createMethod(getSuiteMethodString(suiteType), null, true, monitor);
-			String originalContent= cu.getSource();
-			monitor.worked(2);
-			String formattedContent= JUnitStubUtility.formatCompilationUnit(cu.getJavaProject(), originalContent, lineDelimiter);
-			cu.getBuffer().setContents(formattedContent);
+
+			IMethod suiteMethod= suiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
 			monitor.worked(1);
-			cu.save(new SubProgressMonitor(monitor, 1), false);
+			String lineDelimiter= cu.findRecommendedLineSeparator();
+			if (suiteMethod.exists()) {
+				ISourceRange range= suiteMethod.getSourceRange();
+				if (range != null) {
+					try {
+						IDocument fullSource= new Document(cu.getBuffer().getContents());
+						String originalContent= fullSource.get(range.getOffset(), range.getLength());
+						TestSuiteClassListRange classListRange= UpdateTestSuite.getTestSuiteClassListRange(originalContent);
+						if (classListRange != null) {
+							UpdateTestSuite.updateTestCasesInSuite(monitor, cu, suiteMethod, fClassesInSuiteTable.getCheckedElements());
+						} else {
+							cannotUpdateSuiteError();
+						}
+					} catch (BadLocationException e) {
+						Assert.isTrue(false, "Should never happen"); //$NON-NLS-1$
+					}
+				} else {
+					MessageDialog.openError(getShell(), WizardMessages.NewTestSuiteWizPage_createType_updateErrorDialog_title, WizardMessages.NewTestSuiteWizPage_createType_updateErrorDialog_message);
+				}
+			} else {
+				suiteType.createMethod(getSuiteMethodString(suiteType), null, true, monitor);
+				String originalContent= cu.getSource();
+				monitor.worked(2);
+				String formattedContent= JUnitStubUtility.formatCompilationUnit(cu.getJavaProject(), originalContent, lineDelimiter);
+				cu.getBuffer().setContents(formattedContent);
+				monitor.worked(1);
+				cu.save(new SubProgressMonitor(monitor, 1), false);
+			}
+
 		}
+
 		monitor.done();
 	}
 
@@ -438,6 +473,7 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#typeNameChanged()
 	 */
+	@Override
 	protected IStatus typeNameChanged() {
 		super.typeNameChanged();
 
@@ -452,6 +488,21 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 			status.setError(WizardMessages.NewTestSuiteWizPage_typeName_error_name_qualified);
 			return status;
 		}
+		
+		IPackageFragment pack= getPackageFragment();
+		if (pack != null) {
+			ICompilationUnit cu= pack.getCompilationUnit(typeName + ".java"); //$NON-NLS-1$
+			//if this cu already exists, we need to disable the
+			//junit 3 option if it is a junit 4 suite and vice versa
+			if (cu.exists()) {
+				IType type= cu.findPrimaryType();
+				if (type != null) {
+					setJUnit4(type.getAnnotation("RunWith").exists(), false); //$NON-NLS-1$
+				}
+			} else {
+				setJUnit4(isJUnit4(), true);
+			}
+		}
 
 		IStatus val= JavaConventionsUtil.validateJavaTypeName(typeName, getJavaProject());
 		if (val.getSeverity() == IStatus.ERROR) {
@@ -466,11 +517,12 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 		if (! recursiveSuiteInclusionStatus.isOK())
 			return recursiveSuiteInclusionStatus;
 
-		IPackageFragment pack= getPackageFragment();
 		if (pack != null) {
 			ICompilationUnit cu= pack.getCompilationUnit(typeName + ".java"); //$NON-NLS-1$
 			if (cu.exists()) {
-				status.setWarning(WizardMessages.NewTestSuiteWizPage_typeName_warning_already_exists);
+				status.setWarning(isJUnit4()
+						? WizardMessages.NewTestSuiteWizPage_typeName_warning_already_exists_junit4
+						: WizardMessages.NewTestSuiteWizPage_typeName_warning_already_exists);					
 				return status;
 			}
 			IResource resource= cu.getResource();
@@ -506,8 +558,14 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	}
 
 	private void writeImports(ImportsManager imports) {
-		imports.addImport("junit.framework.Test"); //$NON-NLS-1$
-		imports.addImport("junit.framework.TestSuite");		 //$NON-NLS-1$
+		if (isJUnit4()) {
+			imports.addImport("org.junit.runner.RunWith"); //$NON-NLS-1$
+			imports.addImport("org.junit.runners.Suite"); //$NON-NLS-1$
+			imports.addImport("org.junit.runners.Suite.SuiteClasses"); //$NON-NLS-1$
+		} else {
+			imports.addImport("junit.framework.Test"); //$NON-NLS-1$
+			imports.addImport("junit.framework.TestSuite"); //$NON-NLS-1$	
+		}
 	}
 
 	/**
@@ -523,4 +581,121 @@ public class NewTestSuiteWizardPage extends NewTypeWizardPage {
 	 */
 	private void saveWidgetValues() {
 	}
+	
+	
+	
+	/**
+	 * Creates the controls for the JUnit 4 toggle control. Expects a <code>GridLayout</code> with
+	 * at least 3 columns.
+	 *
+	 * @param composite the parent composite
+	 * @param nColumns number of columns to span
+	 *
+	 * @since 3.7
+	 */
+	protected void createJUnit4Controls(Composite composite, int nColumns) {
+		Composite inner= new Composite(composite, SWT.NONE);
+		inner.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, nColumns, 1));
+		GridLayout layout= new GridLayout(2, false);
+		layout.marginHeight= 0;
+		layout.marginWidth= 0;
+		inner.setLayout(layout);
+
+		SelectionAdapter listener= new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				boolean isSelected= ((Button) e.widget).getSelection();
+				internalSetJUnit4(isSelected);
+			}
+		};
+
+		fJUnit3Toggle = new Button(inner, SWT.RADIO);
+		fJUnit3Toggle.setText(WizardMessages.NewTestClassWizPage_junit3_radio_label);
+		fJUnit3Toggle.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 1, 1));
+		fJUnit3Toggle.setSelection(!fIsJunit4);
+		fJUnit3Toggle.setEnabled(fIsJunit4Enabled);
+
+		fJUnit4Toggle= new Button(inner, SWT.RADIO);
+		fJUnit4Toggle.setText(WizardMessages.NewTestClassWizPage_junit4_radio_label);
+		fJUnit4Toggle.setSelection(fIsJunit4);
+		fJUnit4Toggle.setEnabled(fIsJunit4Enabled);
+		fJUnit4Toggle.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 1, 1));
+		fJUnit4Toggle.addSelectionListener(listener);
+	}
+	
+	/**
+	 * Specifies if the test should be created as JUnit 4 test.
+	 * 
+	 * @param isJUnit4 If set, a JUnit 4 test will be created
+	 * @param isEnabled if <code>true</code> the modifier fields are
+	 * editable; otherwise they are read-only
+	 *
+	 * @since 3.7
+	 */
+	public void setJUnit4(boolean isJUnit4, boolean isEnabled) {
+		fIsJunit4Enabled= isEnabled;
+		if (fJUnit4Toggle != null && !fJUnit4Toggle.isDisposed()) {
+			fJUnit4Toggle.setSelection(isJUnit4);
+			fJUnit3Toggle.setSelection(!isJUnit4);
+			fJUnit4Toggle.setEnabled(isEnabled || isJUnit4);
+			fJUnit3Toggle.setEnabled(isEnabled || !isJUnit4); 
+		}
+		internalSetJUnit4(isJUnit4);
+	}
+
+	/**
+	 * Returns <code>true</code> if the test suite should be created as Junit 4 suite
+	 * @return returns <code>true</code> if the test suite should be created as Junit 4 test
+	 *
+	 * @since 3.7
+	 */
+	public boolean isJUnit4() {
+		return fIsJunit4;
+	}
+
+	private void internalSetJUnit4(boolean isJUnit4) {
+		if (fIsJunit4 == isJUnit4)
+			return;
+		fIsJunit4= isJUnit4;
+		if (fClassesInSuiteTable != null && fClassesInSuiteTable.getContentProvider() instanceof SuiteClassesContentProvider) {
+			SuiteClassesContentProvider provider= (SuiteClassesContentProvider)fClassesInSuiteTable.getContentProvider();
+			provider.setIncludeJunit4Tests(isJUnit4);
+		}
+		if (fIsJunit4) {
+			setSuperClass("java.lang.Object", false); //$NON-NLS-1$
+		} else {
+			setSuperClass(JUnitCorePlugin.TEST_SUPERCLASS_NAME, true);
+		}
+		handleFieldChanged(JUNIT4TOGGLE);
+	}
+	
+	@Override
+	protected String constructCUContent(ICompilationUnit cu, String typeContent, String lineDelimiter) throws CoreException {
+		if (isJUnit4()) {
+			typeContent= appendAnnotations(typeContent, lineDelimiter);
+		}
+		
+		return super.constructCUContent(cu, typeContent, lineDelimiter);
+	}
+
+	private String appendAnnotations(String typeContent, String lineDelimiter) {
+		Object[] checkedElements= fClassesInSuiteTable.getCheckedElements();
+		StringBuffer buffer = new StringBuffer("@RunWith(Suite.class)"); //$NON-NLS-1$
+		buffer.append(lineDelimiter);
+		buffer.append("@SuiteClasses({"); //$NON-NLS-1$
+		for (int i= 0; i < checkedElements.length; i++) {
+			if (checkedElements[i] instanceof IType) {
+				IType testType= (IType) checkedElements[i];
+				buffer.append(testType.getElementName());
+				buffer.append(".class"); //$NON-NLS-1$
+				if(i<checkedElements.length-1)
+					buffer.append(',');
+				
+			}
+		}
+		buffer.append("})"); //$NON-NLS-1$
+		buffer.append(lineDelimiter);
+		buffer.append(typeContent);
+		return buffer.toString();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF
index fe09d40..9ee4b36 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF
@@ -3,9 +3,9 @@ Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.jdt.junit4.runtime;singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 1.1.200.qualifier
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.internal.junit4.runner;x-internal:=true
 Require-Bundle: org.junit;bundle-version="4.7.0",
- org.eclipse.jdt.junit.runtime;bundle-version="[3.4.100,4.0.0)"
+ org.eclipse.jdt.junit.runtime;bundle-version="[3.4.200,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/scripts/exportplugin.xml b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/scripts/exportplugin.xml
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java
index a267432..d25c5ea 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,9 +12,16 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.junit4.runner;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+import junit.framework.Test;
+
 import org.eclipse.jdt.internal.junit.runner.ITestLoader;
 import org.eclipse.jdt.internal.junit.runner.ITestReference;
 import org.eclipse.jdt.internal.junit.runner.RemoteTestRunner;
+import org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader;
+import org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference;
 
 
 public class JUnit4TestLoader implements ITestLoader {
@@ -28,17 +35,40 @@ public class JUnit4TestLoader implements ITestLoader {
 		ITestReference[] refs= new ITestReference[testClasses.length];
 		for (int i= 0; i < testClasses.length; i++) {
 			Class<?> clazz= testClasses[i];
-			ITestReference ref= createTest(clazz, testName, failureNames);
+			ITestReference ref= createTest(clazz, testName, failureNames, listener);
 			refs[i]= ref;
 		}
 		return refs;
 	}
 
-	private ITestReference createTest(Class<?> clazz, String testName, String[] failureNames) {
+	private ITestReference createTest(Class<?> clazz, String testName, String[] failureNames, RemoteTestRunner listener) {
 		if (clazz == null)
 			return null;
 		if (testName == null)
 			return new JUnit4TestClassReference(clazz, failureNames);
+		else if (isJUnit3SetUpTest(clazz, testName)) {
+			JUnit3TestLoader jUnit3TestLoader= new JUnit3TestLoader();
+			Test test= jUnit3TestLoader.getTest(clazz, testName, listener);
+			return new JUnit3TestReference(test);
+		}
 		return new JUnit4TestMethodReference(clazz, testName, failureNames);
 	}
+
+	private boolean isJUnit3SetUpTest(Class<?> clazz, String testName) {
+		if (! Test.class.isAssignableFrom(clazz))
+			return false;
+		try {
+			Method testMethod= clazz.getMethod(testName);
+			if (testMethod.getAnnotation(org.junit.Test.class) != null)
+				return false;
+			
+			Method setup= clazz.getMethod(JUnit3TestLoader.SET_UP_TEST_METHOD_NAME, new Class[] { Test.class });
+			int modifiers= setup.getModifiers();
+			if (setup.getReturnType() == Test.class && Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers))
+				return true;
+		} catch (SecurityException e1) {
+		} catch (NoSuchMethodException e) {
+		}
+		return false;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestMethodReference.java b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestMethodReference.java
index 25b5ac0..de6ff0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestMethodReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestMethodReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,10 +22,15 @@ public class JUnit4TestMethodReference extends JUnit4TestReference {
 	private final Description fDescription;
 
 	public JUnit4TestMethodReference(Class<?> clazz, String methodName, String[] failureNames) {
-		super(Request.method(clazz, methodName), failureNames);
+		super(createRequest(clazz, methodName), failureNames);
 		fDescription = Description.createTestDescription(clazz, methodName);
 	}
 
+	private static Request createRequest(final Class<?> clazz, String methodName) {
+		Description method= Description.createTestDescription(clazz, methodName);
+		return Request.classWithoutSuiteMethod(clazz).filterWith(method);
+	}
+
 	public int countTestCases() {
 		return 1;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestReference.java b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestReference.java
index da15611..46339ee 100644
--- a/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestReference.java
+++ b/eclipse/plugins/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.junit.runner.Result;
 import org.junit.runner.Runner;
 import org.junit.runner.notification.RunListener;
 import org.junit.runner.notification.RunNotifier;
+import org.junit.runner.notification.StoppedByUserException;
 
 import org.eclipse.jdt.internal.junit.runner.IStopListener;
 import org.eclipse.jdt.internal.junit.runner.ITestReference;
@@ -48,6 +49,8 @@ public abstract class JUnit4TestReference implements ITestReference {
 			notifier.fireTestRunStarted(fRunner.getDescription());
 			fRunner.run(notifier);
 			notifier.fireTestRunFinished(result);
+		} catch (StoppedByUserException e) {
+			// not interesting, see https://bugs.eclipse.org/329498
 		} finally {
 			notifier.removeListener(listener);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching.macosx/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.launching.macosx/.settings/org.eclipse.jdt.core.prefs
index 6d05b3c..865b860 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching.macosx/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.launching.macosx/.settings/org.eclipse.jdt.core.prefs
@@ -1,69 +1,107 @@
-#Tue May 09 21:39:43 CEST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
+#Thu Jan 20 17:11:20 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.launching.macosx/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.launching.macosx/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..e5850e2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.launching.macosx/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:59:45 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties b/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties
index 0dbf90c..eac71b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXLauncherMessages.properties
@@ -10,8 +10,8 @@
 #    Ralf Ebert ralf at ralfebert.de - fix for #307109
 ###############################################################################
 			
-MacOSXVMType.jvmName= JVM {0}
-MacOSXVMType.jvmDefaultName= JVM {0} (MacOS X Default)
+MacOSXVMType.jvmName= {0}
+MacOSXVMType.jvmDefaultName= {0} (MacOS X Default)
 MacOSXVMType.error.notRoot=Not a JDK Root; MacOS X executable was not found
 MacOSXVMType.name=MacOS X VM
 MacOSXVMType.error.jvmDirectoryNotFound=Java VM default location "{0}" not found, JVMs were not scanned.
diff --git a/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java b/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java
index 0148213..a7f8066 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching.macosx/macosx/org/eclipse/jdt/internal/launching/macosx/MacOSXVMInstallType.java
@@ -25,6 +25,8 @@ import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.internal.launching.LaunchingPlugin;
 import org.eclipse.jdt.internal.launching.LibraryInfo;
+import org.eclipse.jdt.internal.launching.MacInstalledJREs;
+import org.eclipse.jdt.internal.launching.MacInstalledJREs.JREDescriptor;
 import org.eclipse.jdt.internal.launching.StandardVMType;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.JavaRuntime;
@@ -67,7 +69,6 @@ public class MacOSXVMInstallType extends StandardVMType {
 	private static final String JAVADOC_LOC= "/Developer/Documentation/Java/Reference/";	//$NON-NLS-1$
 	/** The doc for 1.4.1 is kept in a sub directory of the above. */ 
 	private static final String JAVADOC_SUBDIR= "/doc/api";	//$NON-NLS-1$
-		
 				
 	public String getName() {
 		return MacOSXLaunchingPlugin.getString("MacOSXVMType.name"); //$NON-NLS-1$
@@ -81,6 +82,55 @@ public class MacOSXVMInstallType extends StandardVMType {
 	 * @see IVMInstallType#detectInstallLocation()
 	 */
 	public File detectInstallLocation() {
+		try {
+			// find all installed VMs
+			File defaultLocation= null;
+			JREDescriptor[] jres= new MacInstalledJREs().getInstalledJREs();
+			for (int i= 0; i < jres.length; i++) {
+				JREDescriptor descripor = jres[i];
+				String name = jres[i].getName();
+				File home= descripor.getHome();
+				IPath path= new Path(home.getAbsolutePath());
+				String id= path.segment(path.segmentCount() - 2); // ID is the second last segment in the install path (e.g. 1.5.0)
+				if (home.exists()) {
+					boolean isDefault= i == 0;
+					IVMInstall install= findVMInstall(id);
+					if (install == null) {
+						VMStandin vm= new VMStandin(this, id);
+						vm.setInstallLocation(home);
+						String format= MacOSXLaunchingPlugin.getString(isDefault
+								? "MacOSXVMType.jvmDefaultName"		//$NON-NLS-1$
+										: "MacOSXVMType.jvmName");				//$NON-NLS-1$
+										vm.setName(MessageFormat.format(format, new Object[] { name } ));
+										vm.setLibraryLocations(getDefaultLibraryLocations(home));
+										vm.setJavadocLocation(getDefaultJavadocLocation(home));
+										
+										install= vm.convertToRealVM();
+					}
+					if (isDefault) {
+						defaultLocation= home;
+						try {
+							JavaRuntime.setDefaultVMInstall(install, null);
+						} catch (CoreException e) {
+							LaunchingPlugin.log(e);
+						}
+					}
+				}
+			}
+			return defaultLocation;
+		} catch (CoreException e) {
+			MacOSXLaunchingPlugin.getDefault().getLog().log(e.getStatus());
+			return detectInstallLocationOld();
+		}
+	}
+
+	/**
+	 * The proper way to find installed JREs is to parse the XML output produced from "java_home -X"
+	 * (see bug 325777). However, if that fails, revert to the hard coded search. 
+	 * 
+	 * @return file that points to the default JRE install
+	 */
+	private File detectInstallLocationOld() {
 		
 		String javaVMName= System.getProperty("java.vm.name");	//$NON-NLS-1$
 		if (javaVMName == null) {
@@ -95,8 +145,8 @@ public class MacOSXVMInstallType extends StandardVMType {
 
 		// find all installed VMs
 		File defaultLocation= null;
-		File[] versions= getAllVersions();
-		File currentJDK= getCurrentJDK();
+		File[] versions= getAllVersionsOld();
+		File currentJDK= getCurrentJDKOld();
 		for (int i= 0; i < versions.length; i++) {
 			File versionFile= versions[i];
 			String version= versionFile.getName();
@@ -128,8 +178,14 @@ public class MacOSXVMInstallType extends StandardVMType {
 		}
 		return defaultLocation;
 	}
-
-	private File[] getAllVersions() {
+	
+	/**
+	 * The proper way to find installed JREs is to parse the XML output produced from "java_home -X"
+	 * (see bug 325777). However, if that fails, revert to the hard coded search. 
+	 * 
+	 * @return array of files that point to JRE install directories
+	 */
+	private File[] getAllVersionsOld() {
 		File[] versionFiles= JVM_VERSIONS_FOLDER.listFiles();
 		for (int i= 0; i < versionFiles.length; i++) {
 			versionFiles[i]= resolveSymbolicLinks(versionFiles[i]);
@@ -137,7 +193,13 @@ public class MacOSXVMInstallType extends StandardVMType {
 		return versionFiles;
 	}
 
-	private File getCurrentJDK() {
+	/**
+	 * The proper way to find the default JRE is to parse the XML output produced from "java_home -X"
+	 * and take the first entry in the list. However, if that fails, revert to the hard coded search.
+	 * 
+	 * @return a file that points to the default JRE install directory
+	 */
+	private File getCurrentJDKOld() {
 		return resolveSymbolicLinks(new File(JVM_VERSIONS_FOLDER, CURRENT_JDK));
 	}
 	
@@ -255,4 +317,5 @@ public class MacOSXVMInstallType extends StandardVMType {
 	protected String getVMVersion(File javaHome, File javaExecutable) {
 		return super.getVMVersion(javaHome, javaExecutable);
 	}
+	
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/.settings/org.eclipse.jdt.core.prefs
index d759497..7a90c75 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,21 @@
-#Tue Mar 17 12:24:29 CDT 2009
+#Thu Jan 20 17:11:20 CET 2011
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -16,59 +25,83 @@ org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..092ef5c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:59:55 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/src/org/eclipse/jdt/internal/ui/macbundler/BundleWizardPage3.java b/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/src/org/eclipse/jdt/internal/ui/macbundler/BundleWizardPage3.java
index 5b9c04b..3d6bd78 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/src/org/eclipse/jdt/internal/ui/macbundler/BundleWizardPage3.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching.ui.macosx/src/org/eclipse/jdt/internal/ui/macbundler/BundleWizardPage3.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,7 +76,7 @@ public class BundleWizardPage3 extends BundleWizardBasePage {
 		fProperties.removeAll();
 		if (fBundleDescription.fProperties2 != null && fBundleDescription.fProperties2.size() > 0) {
 			Enumeration iter= fBundleDescription.fProperties2.keys();
-			for (int i= 0; iter.hasMoreElements(); i++) {
+			while (iter.hasMoreElements()) {
 				String key= (String) iter.nextElement();
 				String value= (String) fBundleDescription.fProperties2.get(key);
 				TableItem ti= new TableItem(fProperties, SWT.NONE);
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
index 51006c1..865b860 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
@@ -1,101 +1,107 @@
-#Thu Oct 15 15:00:01 CDT 2009
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=enabled
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=error
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
-org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
-org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
+#Thu Jan 20 17:11:20 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
+org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
+org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX,EXPERIMENTAL,CONTEXTLAUNCHING
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..9efd017
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:44:07 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
index 8092512..eaef234 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.launching/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.launching; singleton:=true
-Bundle-Version: 3.5.200.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.launching.LaunchingPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java
index a100165..3248fb7 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DefaultProjectClasspathEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -342,10 +342,11 @@ public class DefaultProjectClasspathEntry extends AbstractRuntimeClasspathEntry
 	}
 	
 	/**
-	 * Sets whether the runtime classpath computaion should only
+	 * Sets whether the runtime classpath computation should only
 	 * include exported entries in referenced projects.
 	 * 
-	 * @param exportedOnly
+	 * @param exportedOnly if the runtime classpath computation should only
+	 * include exported entries in referenced projects.
 	 * @since 3.2
 	 */
 	public void setExportedEntriesOnly(boolean exportedOnly) {
@@ -356,7 +357,8 @@ public class DefaultProjectClasspathEntry extends AbstractRuntimeClasspathEntry
 	 * Returns whether the classpath computation only includes exported
 	 * entries in referenced projects.
 	 * 
-	 * @return
+	 * @return if the classpath computation only includes exported
+	 * entries in referenced projects.
 	 * @since 3.2
 	 */
 	public boolean isExportedEntriesOnly() {
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java
index 29ad775..06aef5d 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -152,13 +152,13 @@ public class EECompilationParticipant extends CompilationParticipant {
 	private int getSeverityLevel(String prefkey, IProject project) {
 		IPreferencesService service = Platform.getPreferencesService();
 		List scopes = new ArrayList();
-		scopes.add(new InstanceScope());
+		scopes.add(InstanceScope.INSTANCE);
 		if(project != null) {
 			scopes.add(new ProjectScope(project));
 		}
 		String value = service.getString(LaunchingPlugin.ID_PLUGIN, prefkey, null, (IScopeContext[]) scopes.toArray(new IScopeContext[scopes.size()]));
 		if(value == null) {
-			value = LaunchingPlugin.getDefault().getPluginPreferences().getString(prefkey);
+			value = InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).get(prefkey, null);
 		}
 		if (JavaCore.ERROR.equals(value)) {
 			return IMarker.SEVERITY_ERROR;
@@ -170,14 +170,14 @@ public class EECompilationParticipant extends CompilationParticipant {
 	}	
 	
 	/**
-	 * creates a problem marker for a jre container problem
-	 * @param javaProject
-	 * @param message
-	 * @param severity
+	 * creates a problem marker for a JRE container problem
+	 * @param javaProject the {@link IJavaProject}
+	 * @param message the message to set on the new problem
+	 * @param severity the severity level for the new problem
 	 */
 	private void createJREContainerProblem(IJavaProject javaProject, String message, int severity) {
 		try {
-			IMarker marker = javaProject.getProject().createMarker(LaunchingPlugin.ID_JRE_CONTAINER_MARKER);
+			IMarker marker = javaProject.getProject().createMarker(JavaRuntime.JRE_CONTAINER_MARKER);
 			marker.setAttributes(
 				new String[] {
 						IMarker.MESSAGE,
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JREPreferenceModifyListener.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JREPreferenceModifyListener.java
index b0e1a2c..63d7a85 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JREPreferenceModifyListener.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JREPreferenceModifyListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import java.util.Set;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IPreferenceNodeVisitor;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.runtime.preferences.PreferenceModifyListener;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.JavaRuntime;
@@ -42,7 +43,7 @@ public class JREPreferenceModifyListener extends PreferenceModifyListener {
 				String jresXML = node.get(JavaRuntime.PREF_VM_XML, null);
 				if (jresXML != null) {
 					VMDefinitionsContainer vms = new VMDefinitionsContainer();
-					String pref = LaunchingPlugin.getDefault().getPluginPreferences().getString(JavaRuntime.PREF_VM_XML);
+					String pref = InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).get(JavaRuntime.PREF_VM_XML, ""); //$NON-NLS-1$
 					// names -> existing vm's
 					Map names = new HashMap();
 					Set ids = new HashSet();
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.java
index 8933b32..bea5198 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -211,6 +211,10 @@ public class LaunchingMessages extends NLS {
 	public static String PackageFragmentRootSourceContainerTypeDelegate_7;
 	public static String PackageFragmentRootSourceContainerTypeDelegate_8;
 
+	public static String ProjectClasspathVariableResolver_1;
+	public static String ProjectClasspathVariableResolver_2;
+	public static String ProjectClasspathVariableResolver_3;
+
 	static {
 		// load message values from bundle file
 		NLS.initializeMessages(BUNDLE_NAME, LaunchingMessages.class);
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.properties b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.properties
index 613d016..0b05d47 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -174,6 +174,9 @@ AbstractJavaLaunchConfigurationDelegate_20=Building prerequisite project list
 PackageFragmentRootSourceContainerTypeDelegate_6=Missing required <handle> attribute
 PackageFragmentRootSourceContainerTypeDelegate_7=Unable to restore package fragment root source container
 PackageFragmentRootSourceContainerTypeDelegate_8=Missing required <packageFragmentRoot> attribute
+ProjectClasspathVariableResolver_1=Specified Java project ''{0}'' does not exist.
+ProjectClasspathVariableResolver_2=Unable to resolve project for: ${project_classpath}
+ProjectClasspathVariableResolver_3=Variable references empty selection: ${project_classpath}
 EEVMType_1=Description is missing required property ''{0}''
 EEVMType_2=Execution Environment Description
 EEVMType_3=Install location (-Djava.home) does not exist: {0}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPlugin.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPlugin.java
index ffb4253..f24ec15 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPlugin.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPlugin.java
@@ -23,6 +23,7 @@ import java.io.OutputStream;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -50,10 +51,10 @@ import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.core.DebugPlugin;
@@ -86,7 +87,7 @@ import org.xml.sax.helpers.DefaultHandler;
 
 import com.ibm.icu.text.MessageFormat;
 
-public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChangeListener, IVMInstallChangedListener, IResourceChangeListener, ILaunchesListener, IDebugEventSetListener {
+public class LaunchingPlugin extends Plugin implements IEclipsePreferences.IPreferenceChangeListener, IVMInstallChangedListener, IResourceChangeListener, ILaunchesListener, IDebugEventSetListener {
 	
 	/**
 	 * The id of the JDT launching plug-in (value <code>"org.eclipse.jdt.launching"</code>).
@@ -103,13 +104,6 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 */
 	public static final String ID_EXTENSION_POINT_RUNTIME_CLASSPATH_ENTRIES = "runtimeClasspathEntries"; //$NON-NLS-1$
 	
-	/**
-	 * Marker type for JRE container problems.
-	 * 
-	 * @since 3.2
-	 */
-	public static final String ID_JRE_CONTAINER_MARKER = ID_PLUGIN + ".jreContainerMarker"; //$NON-NLS-1$
-	
 	private static LaunchingPlugin fgLaunchingPlugin;
 	
 	private HashMap fVMConnectors = null;
@@ -139,6 +133,12 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 */
 	private static Map fgInstallTimeMap = null;
 	/**
+	 * List of install locations that have been detected to have changed
+	 * 
+	 * @since 3.7
+	 */
+	private static HashSet fgHasChanged = new HashSet();
+	/**
 	 * Mutex for checking the time stamp of an install location
 	 * 
 	 * @since 3.7
@@ -176,7 +176,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		 * Returns the JRE container id that the given VM would map to, or
 		 * <code>null</code> if none.
 		 * 
-		 * @param vm
+		 * @param vm the new path id of the {@link IVMInstall}
 		 * @return container id or <code>null</code>
 		 */
 		private IPath getContainerId(IVMInstall vm) {
@@ -273,10 +273,11 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		/**
 		 * Re-bind classpath variables and containers affected by the JRE
 		 * changes.
-		 * @param monitor
+		 * @param monitor a progress monitor or <code>null</code>
+		 * @param projects the list of {@link IJavaProject}s to re-bind the VM to
+		 * @throws CoreException if an exception is thrown
 		 */
 		private void rebind(IProgressMonitor monitor, IJavaProject[] projects) throws CoreException {
-			 
 			if (fDefaultChanged) {
 				// re-bind JRELIB if the default VM changed
 				JavaClasspathVariablesInitializer initializer = new JavaClasspathVariablesInitializer();
@@ -383,6 +384,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 * Returns the library info that corresponds to the specified JRE install
 	 * path, or <code>null</code> if none.
 	 * 
+	 * @param javaInstallPath the absolute path to the java executable
 	 * @return the library info that corresponds to the specified JRE install
 	 * path, or <code>null</code> if none
 	 */
@@ -406,15 +408,25 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		}
 		if (info == null) {
 			fgLibraryInfoMap.remove(javaInstallPath);
+			if(fgInstallTimeMap != null) {
+				fgInstallTimeMap.remove(javaInstallPath);
+				writeInstallInfo();
+			}
+			
 		} else {
 			fgLibraryInfoMap.put(javaInstallPath, info);
 		}
+		//once the library info has been set we can forget it has changed
+		fgHasChanged.remove(javaInstallPath);
 		saveLibraryInfo();
 	}
 		
 	/**
 	 * Return a <code>java.io.File</code> object that corresponds to the specified
 	 * <code>IPath</code> in the plugin directory.
+	 * 
+	 * @param path the path to look for in the launching bundle
+	 * @return the {@link File} from the bundle or <code>null</code>
 	 */
 	public static File getFileInPlugin(IPath path) {
 		try {
@@ -429,6 +441,8 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		
 	/**
 	 * Convenience method which returns the unique identifier of this plugin.
+	 * 
+	 * @return the id of the {@link LaunchingPlugin}
 	 */
 	public static String getUniqueIdentifier() {
 		return ID_PLUGIN;
@@ -447,7 +461,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	
 	/**
 	 * Logs the specified status
-	 * @param status
+	 * @param status the status to log
 	 */
 	public static void log(IStatus status) {
 		getDefault().getLog().log(status);
@@ -455,7 +469,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	
 	/**
 	 * Logs the specified message, by creating a new <code>Status</code>
-	 * @param message
+	 * @param message the message to log as an error status
 	 */
 	public static void log(String message) {
 		log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, message, null));
@@ -463,7 +477,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		
 	/**
 	 * Logs the specified exception by creating a new <code>Status</code>
-	 * @param e
+	 * @param e the {@link Throwable} to log as an error
 	 */
 	public static void log(Throwable e) {
 		log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, e.getMessage(), e));
@@ -471,7 +485,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	
 	/**
 	 * Clears zip file cache.
-	 * Shutdown the launch config helper.
+	 * Shutdown the launch configuration helper.
 	 * 
 	 * @see Plugin#stop(BundleContext)
 	 */
@@ -481,37 +495,38 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 			DebugPlugin.getDefault().removeDebugEventListener(this);
 			ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
 			ArchiveSourceLocation.closeArchives();
-			getPluginPreferences().removePropertyChangeListener(this);
+			InstanceScope.INSTANCE.getNode(ID_PLUGIN).removePreferenceChangeListener(this);
 			JavaRuntime.removeVMInstallChangedListener(this);
 			JavaRuntime.saveVMConfiguration();
 			fgXMLParser = null;
-			ResourcesPlugin.getWorkspace().removeSaveParticipant(this);
+			ResourcesPlugin.getWorkspace().removeSaveParticipant(ID_PLUGIN);
 		} finally {
 			super.stop(context);
 		}
 	}
 	
-	/**
+	/* (non-Javadoc)
 	 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
 	 */
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		DEBUG = "true".equals(Platform.getDebugOption("org.eclipse.jdt.launching/debug"));  //$NON-NLS-1$//$NON-NLS-2$
-		ResourcesPlugin.getWorkspace().addSaveParticipant(this, new ISaveParticipant() {
+		ResourcesPlugin.getWorkspace().addSaveParticipant(ID_PLUGIN, new ISaveParticipant() {
 			public void doneSaving(ISaveContext context1) {}
 			public void prepareToSave(ISaveContext context1)	throws CoreException {}
 			public void rollback(ISaveContext context1) {}
 			public void saving(ISaveContext context1) throws CoreException {
 				try {
-					new InstanceScope().getNode(ID_PLUGIN).flush();
+					InstanceScope.INSTANCE.getNode(ID_PLUGIN).flush();
 				} catch (BackingStoreException e) {
 					log(e);
 				}
+				//catch in case any install times are still cached for removed JREs 
+				writeInstallInfo();
 			}
 		});
 
-		getPluginPreferences().addPropertyChangeListener(this);
-
+		InstanceScope.INSTANCE.getNode(ID_PLUGIN).addPreferenceChangeListener(this);
 		JavaRuntime.addVMInstallChangedListener(this);
 		ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.PRE_CLOSE);
 		DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this);
@@ -577,10 +592,11 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 			initializeRuntimeClasspathExtensions();
 		}
 		IConfigurationElement config = (IConfigurationElement) fClasspathEntryExtensions.get(id);
-		if (config == null) {
-			abort(MessageFormat.format(LaunchingMessages.LaunchingPlugin_32, new String[]{id}), null);
+		if (config != null) {
+			return (IRuntimeClasspathEntry2) config.createExecutableExtension("class"); //$NON-NLS-1$
 		}
-		return (IRuntimeClasspathEntry2) config.createExecutableExtension("class"); //$NON-NLS-1$
+		abort(MessageFormat.format(LaunchingMessages.LaunchingPlugin_32, new String[]{id}), null);
+		return null;
 	}
 	
 	/**
@@ -596,21 +612,6 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	}
 	
 	/**
-	 * Save preferences whenever the connect timeout changes.
-	 * Process changes to the list of installed JREs.
-	 * 
-	 * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(PropertyChangeEvent)
-	 */
-	public void propertyChange(PropertyChangeEvent event) {
-		String property = event.getProperty();
-		if (property.equals(JavaRuntime.PREF_VM_XML)) {
-			if (!isIgnoreVMDefPropertyChangeEvents()) {
-				processVMPrefsChanged((String)event.getOldValue(), (String)event.getNewValue());
-			}
-		}
-	}
-
-	/**
 	 * Check for differences between the old & new sets of installed JREs.
 	 * Differences may include additions, deletions and changes.  Take
 	 * appropriate action for each type of difference.
@@ -620,6 +621,9 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 * old value.  Normal user changes to the preferences result in a single propertyChange
 	 * event, with both old and new values populated.  This method handles both types
 	 * of notification.
+	 * 
+	 * @param oldValue the old preference value
+	 * @param newValue the new preference value
 	 */
 	protected void processVMPrefsChanged(String oldValue, String newValue) {
 		
@@ -707,7 +711,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 * Parse the given xml into a VM definitions container, returning an empty
 	 * container if an exception occurs.
 	 * 
-	 * @param xml
+	 * @param xml the XML to parse for VM descriptions
 	 * @return VMDefinitionsContainer
 	 */
 	private VMDefinitionsContainer getVMDefinitions(String xml) {
@@ -721,9 +725,9 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		}
 		return new VMDefinitionsContainer();
 	}
-						
-	/**
-	 * @see IVMInstallChangedListener#defaultVMInstallChanged(IVMInstall, IVMInstall)
+		
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#defaultVMInstallChanged(org.eclipse.jdt.launching.IVMInstall, org.eclipse.jdt.launching.IVMInstall)
 	 */
 	public void defaultVMInstallChanged(IVMInstall previous, IVMInstall current) {
 		if (!fBatchingChanges) {
@@ -761,26 +765,24 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		}
 	}
 
-	/**
-	 * Clear the archive cache when a project is about to be deleted/closed.
-	 * 
-	 * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent)
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
 	 */
 	public void resourceChanged(IResourceChangeEvent event) {
 		ArchiveSourceLocation.closeArchives();
 	}
 
 	/**
-	 * Allows vm property change events to be ignored
-	 * @param ignore
+	 * Allows VM property change events to be ignored
+	 * @param ignore if we should ignore VM property changed events or not
 	 */
 	public void setIgnoreVMDefPropertyChangeEvents(boolean ignore) {
 		fIgnoreVMDefPropertyChangeEvents = ignore;
 	}
 
 	/**
-	 * Returns if vm property changed event should be ignored or not
-	 * @return if vm property changed event should be ignored or not
+	 * Returns if VM property changed event should be ignored or not
+	 * @return if VM property changed event should be ignored or not
 	 */
 	public boolean isIgnoreVMDefPropertyChangeEvents() {
 		return fIgnoreVMDefPropertyChangeEvents;
@@ -793,7 +795,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 * The resulting XML is compatible with the static method <code>parseXMLIntoContainer</code>.
 	 * </p>
 	 * @return String the results of flattening this object into XML
-	 * @throws IOException if this method fails. Reasons include:<ul>
+	 * @throws CoreException if this method fails. Reasons include:<ul>
 	 * <li>serialization of the XML document failed</li>
 	 * </ul>
 	 */
@@ -820,8 +822,8 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	/**
 	 * Creates an XML element for the given info.
 	 * 
-	 * @param doc
-	 * @param info
+	 * @param doc the backing {@link Document}
+	 * @param info the {@link LibraryInfo} to add to the {@link Document}
 	 * @return Element
 	 */
 	private static Element infoAsElement(Document doc, LibraryInfo info) {
@@ -837,10 +839,10 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 * Appends path elements to the given library element, rooted by an
 	 * element of the given type.
 	 * 
-	 * @param doc
-	 * @param elementType
-	 * @param libraryElement
-	 * @param paths
+	 * @param doc the backing {@link Document}
+	 * @param elementType the kind of {@link Element} to create
+	 * @param libraryElement the {@link Element} describing a given {@link LibraryInfo} object
+	 * @param paths the paths to add
 	 */
 	private static void appendPathElements(Document doc, String elementType, Element libraryElement, String[] paths) {
 		if (paths.length > 0) {
@@ -936,17 +938,19 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	/**
 	 * Checks to see if the time stamp of the file describe by the given location string
 	 * has been modified since the last recorded time stamp. If there is no last recorded 
-	 * time stamp we assume it has changed.
+	 * time stamp we assume it has changed. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=266651 for more information
 	 * 
 	 * @param location the location of the SDK we want to check the time stamp for 
 	 * @return <code>true</code> if the time stamp has changed compared to the cached one or if there is
 	 * no recorded time stamp, <code>false</code> otherwise.
 	 * 
-	 * @since 3.6.2
-	 * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=266651
+	 * @since 3.7
 	 */
 	public static boolean timeStampChanged(String location) {
 		synchronized (installLock) {
+			if(fgHasChanged.contains(location)) {
+				return true;
+			}
 			File file = new File(location);
 			if(file.exists()) {
 				if(fgInstallTimeMap == null) {
@@ -963,6 +967,7 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 				stamp = new Long(fstamp);
 				fgInstallTimeMap.put(location, stamp);
 				writeInstallInfo();
+				fgHasChanged.add(location);
 				return true;
 			}
 		}
@@ -970,10 +975,10 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	}
 	
 	/**
-	 * Reads the file of saved time stamps and populates the {@link #fgInstallTimeMap}
+	 * Reads the file of saved time stamps and populates the {@link #fgInstallTimeMap}.
+	 * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=266651 for more information
 	 * 
-	 * @since 3.6.2
-	 * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=266651
+	 * @since 3.7
 	 */
 	private static void readInstallInfo() {
 		fgInstallTimeMap = new HashMap();
@@ -1019,12 +1024,12 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	}
 	
 	/**
-	 * Writes out the mappings of SDK install time stamps to disk.
+	 * Writes out the mappings of SDK install time stamps to disk. See 
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=266651 for more information.
 	 * 
-	 * @since 3.6.2
-	 * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=266651
+	 * @since 3.7
 	 */
-	private static synchronized void writeInstallInfo() {
+	private static void writeInstallInfo() {
 		if(fgInstallTimeMap != null) {
 			OutputStream stream= null;
 			try {
@@ -1033,12 +1038,17 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 				doc.appendChild(root);
 				Entry entry = null;
 				Element e = null;
+				String key = null;
 				for(Iterator i = fgInstallTimeMap.entrySet().iterator(); i.hasNext();) {
 					entry = (Entry) i.next();
-					e = doc.createElement("entry"); //$NON-NLS-1$
-					root.appendChild(e);
-					e.setAttribute("loc", entry.getKey().toString()); //$NON-NLS-1$
-					e.setAttribute("stamp", entry.getValue().toString()); //$NON-NLS-1$
+					key = (String) entry.getKey();
+					if(fgLibraryInfoMap == null || fgLibraryInfoMap.containsKey(key)) {
+						//only persist the info if the library map also has info OR is null - prevent persisting deleted JRE infos
+						e = doc.createElement("entry"); //$NON-NLS-1$
+						root.appendChild(e);
+						e.setAttribute("loc", key); //$NON-NLS-1$
+						e.setAttribute("stamp", entry.getValue().toString()); //$NON-NLS-1$
+					}
 				}
 				String xml = DebugPlugin.serializeDocument(doc);
 				IPath libPath = getDefault().getStateLocation();
@@ -1066,8 +1076,8 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	
 	/**
 	 * Returns paths stored in XML
-	 * @param lib
-	 * @param pathType
+	 * @param lib the library path in {@link Element} form
+	 * @param pathType the type of the path
 	 * @return paths stored in XML
 	 */
 	private static String[] getPathsFromXML(Element lib, String pathType) {
@@ -1103,33 +1113,27 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		return (String[])paths.toArray(new String[paths.size()]);
 	}
 	
-	/**
-	 * When a launch is removed, close all source archives. Prevents file
-	 * sharing violations.
-	 * 
-	 * @see ILaunchesListener#launchesRemoved(ILaunch[])
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch[])
 	 */
 	public void launchesRemoved(ILaunch[] launches) {
 		ArchiveSourceLocation.closeArchives();
 	}
 	
-	/**
-	 * @see ILaunchesListener#launchesAdded(ILaunch[])
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch[])
 	 */
 	public void launchesAdded(ILaunch[] launches) {
 	}
 	
-	/**
-	 * @see ILaunchesListener#launchesChanged(ILaunch[])
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[])
 	 */
 	public void launchesChanged(ILaunch[] launches) {
 	}
 	
-	/**
-	 * When a debug target or process terminates, close source archives.
-	 * Prevents file sharing violations.
-	 * 
-	 * @see IDebugEventSetListener#handleDebugEvents(DebugEvent[])
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[])
 	 */
 	public void handleDebugEvents(DebugEvent[] events) {
 		for (int i = 0; i < events.length; i++) {
@@ -1169,17 +1173,21 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	 * 
 	 * @param message error message
 	 * @param exception underlying exception or <code>null</code> if none
-	 * @throws CoreException
+	 * @throws CoreException if an exception occurs
 	 */
 	protected static void abort(String message, Throwable exception) throws CoreException {
 		IStatus status = new Status(IStatus.ERROR, LaunchingPlugin.getUniqueIdentifier(), 0, message, exception);
 		throw new CoreException(status);
 	}
 	
-	/*
+	/**
 	 * Compares two URL for equality, but do not connect to do DNS resolution
 	 * 
+	 * @param url1 a given URL
+	 * @param url2 another given URL to compare to url1
+	 * 
 	 * @since 3.5
+	 * @return <code>true</code> if the URLs are equal, <code>false</code> otherwise
 	 */
 	public static boolean sameURL(URL url1, URL url2) {
 		if (url1 == url2) {
@@ -1207,6 +1215,8 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 	/**
 	 * Gets the external form of this URL. In particular, it trims any white space, 
 	 * removes a trailing slash and creates a lower case string.
+	 * @param url the URL to get the {@link String} value of
+	 * @return the lower-case {@link String} form of the given URL
 	 */
 	private static String getExternalForm(URL url) {
 		String externalForm = url.toExternalForm();
@@ -1220,6 +1230,16 @@ public class LaunchingPlugin extends Plugin implements Preferences.IPropertyChan
 		return externalForm.toLowerCase();
 
 	}
-}
 
- 
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent)
+	 */
+	public void preferenceChange(PreferenceChangeEvent event) {
+		String property = event.getKey();
+		if (property.equals(JavaRuntime.PREF_VM_XML)) {
+			if (!isIgnoreVMDefPropertyChangeEvents()) {
+				processVMPrefsChanged((String)event.getOldValue(), (String)event.getNewValue());
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPreferenceInitializer.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPreferenceInitializer.java
index c19fa0b..a6fff7f 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/LaunchingPreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,8 +29,7 @@ public class LaunchingPreferenceInitializer extends AbstractPreferenceInitialize
 	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
 	 */
 	public void initializeDefaultPreferences() {
-		DefaultScope scope = new DefaultScope();
-		IEclipsePreferences dnode = scope.getNode(LaunchingPlugin.ID_PLUGIN);
+		IEclipsePreferences dnode = DefaultScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN);
 		if(dnode == null) {
 			return;
 		}
@@ -48,7 +47,7 @@ public class LaunchingPreferenceInitializer extends AbstractPreferenceInitialize
 		// associated JavaCore options, as this can trigger a job to touch the project (see 
 		// bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=260445)
 		String launchFilter = "*." + ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION; //$NON-NLS-1$
-		dnode = scope.getNode(JavaCore.PLUGIN_ID);
+		dnode = DefaultScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 		if(dnode == null) {
 			return;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/MacInstalledJREs.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/MacInstalledJREs.java
new file mode 100644
index 0000000..4ba5b40
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/MacInstalledJREs.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.launching;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.Launch;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.debug.core.model.IStreamsProxy;
+
+/**
+ * Searches for installed JREs on the Mac.
+ */
+public class MacInstalledJREs {
+	
+	/** The executable for 'java_home' */
+	private static final String JAVA_HOME_PLIST = "/usr/libexec/java_home"; //$NON-NLS-1$
+	/** The plist attribute describing the JRE home directory */
+	private static final String PLIST_JVM_HOME_PATH = "JVMHomePath"; //$NON-NLS-1$
+	/** The plist attribute describing the JRE name */
+	private static final String PLIST_JVM_NAME = "JVMName"; //$NON-NLS-1$
+	/** The plist attribute describing the JRE version */
+	private static final String PLIST_JVM_VERSION = "JVMVersion"; //$NON-NLS-1$
+	
+	/**
+	 * Describes an installed JRE on MacOS
+	 */
+	public class JREDescriptor {
+		
+		String fName;
+		File fHome;
+		String fVersion;
+		
+		/**
+		 * Constructs a new JRE descriptor 
+		 * 
+		 * @param home Home directory of the JRE
+		 * @param name JRE name
+		 * @param version JRE version
+		 */
+		public JREDescriptor(File home, String name, String version) {
+			fHome = home;
+			fName = name;
+			fVersion = version;
+		}
+		
+		/**
+		 * Returns the home installation directory for this JRE.
+		 * 
+		 * @return home directory
+		 */
+		public File getHome() {
+			return fHome;
+		}
+		
+		/**
+		 * Returns the name of the JRE.
+		 * 
+		 * @return JRE name
+		 */
+		public String getName() {
+			return fName;
+		}
+		
+		/**
+		 * Returns the version of the JRE.
+		 * 
+		 * @return JRE version
+		 */
+		public String getVersion() {
+			return fVersion;
+		}
+		
+		public boolean equals(Object obj) {
+			if (obj instanceof JREDescriptor) {
+				JREDescriptor jre = (JREDescriptor) obj;
+				return jre.fHome.equals(fHome) && jre.fName.equals(fName) && jre.fVersion.equals(fVersion);
+			}
+			return false;
+		}
+		
+		public int hashCode() {
+			return fHome.hashCode() + fName.hashCode() + fVersion.hashCode();
+		}
+	}
+	
+	/**
+	 * Parses the XML output produced from "java_home -X" (see bug 325777), and return a collection
+	 * of descriptions of JRE installations.
+	 * 
+	 * @return array of JRE descriptions installed in the OS
+	 * @exception CoreException if unable to parse the output or the executable does not exist
+	 */
+	public JREDescriptor[] getInstalledJREs() throws CoreException {
+		// locate the "java_home" executable
+		File java_home = new File(JAVA_HOME_PLIST);
+		if (!java_home.exists()) {
+			throw new CoreException(new Status(IStatus.WARNING, LaunchingPlugin.getUniqueIdentifier(), "The java_home executable does not exist")); //$NON-NLS-1$
+		}
+		String[] cmdLine = new String[] {JAVA_HOME_PLIST, "-X"}; //$NON-NLS-1$
+		Process p = null;
+		try {
+			p = DebugPlugin.exec(cmdLine, null);
+			IProcess process = DebugPlugin.newProcess(new Launch(null, ILaunchManager.RUN_MODE, null), p, "JRE Install Detection"); //$NON-NLS-1$
+			for (int i= 0; i < 600; i++) {
+				// Wait no more than 30 seconds (600 * 50 ms)
+				if (process.isTerminated()) {
+					break;
+				}
+				try {
+					Thread.sleep(50);
+				} catch (InterruptedException e) {
+					// do nothing
+				}
+			}
+			return parseJREInfo(process);
+		} finally {
+			if (p != null) {
+				p.destroy();
+			}
+		}
+	}
+	
+	/**
+	 * Parses the output from 'java_home -X'.
+	 * 
+	 * @param process process with output from 'java_home -X'
+	 * @return array JRE descriptions installed in the OS
+	 * @exception CoreException if unable to parse the output
+	 */
+	private JREDescriptor[] parseJREInfo(IProcess process) throws CoreException {
+		IStreamsProxy streamsProxy = process.getStreamsProxy();
+		String text = null;
+		if (streamsProxy != null) {
+			text = streamsProxy.getOutputStreamMonitor().getContents();
+		}
+		if (text != null && text.length() > 0) {
+			ByteArrayInputStream stream = new ByteArrayInputStream(text.getBytes());
+			Object result = new PListParser().parse(stream);
+			if (result instanceof Object[]) {
+				Object[] maps = (Object[]) result;
+				List jres= new ArrayList();
+				for (int i = 0; i < maps.length; i++) {
+					Object object = maps[i];
+					if (object instanceof Map) {
+						Map map = (Map) object;
+						Object home = map.get(PLIST_JVM_HOME_PATH);
+						Object name = map.get(PLIST_JVM_NAME);
+						Object version = map.get(PLIST_JVM_VERSION);
+						if (home instanceof String && name instanceof String && version instanceof String) {
+							JREDescriptor descriptor = new JREDescriptor(new File((String)home), (String)name, (String)version);
+							if (!jres.contains(descriptor)) { // remove duplicates
+								jres.add(descriptor);	
+							}
+						} else {
+							unexpectedFormat();
+						}
+					} else {
+						unexpectedFormat();
+					}
+				}
+				return (JREDescriptor[]) jres.toArray(new JREDescriptor[jres.size()]);
+			}
+			unexpectedFormat();
+		}
+		unexpectedFormat();
+		return null; // previous line will throw an exception
+	}
+	
+	private void unexpectedFormat() throws CoreException {
+		throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.getUniqueIdentifier(), "Output from java_home not in expected format")); //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/PListParser.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/PListParser.java
new file mode 100644
index 0000000..eb683c6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/PListParser.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.launching;
+
+import java.io.BufferedInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * Parses an XML property list into its associated objects.
+ */
+public class PListParser {
+	
+	/**
+	 * Constants for XML element names and attributes
+	 */
+	private static final String PLIST_ELEMENT = "plist"; //$NON-NLS-1$
+	private static final String KEY_ELEMENT = "key"; //$NON-NLS-1$
+	private static final String DICT_ELEMENT = "dict"; //$NON-NLS-1$
+	private static final String ARRAY_ELEMENT = "array"; //$NON-NLS-1$
+	private static final String TRUE_ELEMENT = "true"; //$NON-NLS-1$
+	private static final String FALSE_ELEMENT = "false"; //$NON-NLS-1$
+	private static final String INT_ELEMENT = "integer"; //$NON-NLS-1$
+	private static final String STRING_ELEMENT = "string"; //$NON-NLS-1$
+	
+	/**
+	 * Parses the given input stream which corresponds to an XML plist. See the DTD
+	 * here: http://www.apple.com/DTDs/PropertyList-1.0.dtd
+	 * 
+	 * @param stream XML plist input stream
+	 * @return Object(s) in the stream
+	 * @throws CoreException
+	 */
+	public Object parse(InputStream stream) throws CoreException {
+		try {
+			stream = new BufferedInputStream(stream);
+			return parseXML(stream);
+		} catch (FileNotFoundException e) {
+			abort(e);					
+		} catch (SAXException e) {
+			abort(e);					
+		} catch (ParserConfigurationException e) {
+			abort(e);					
+		} catch (IOException e) {
+			abort(e);					
+		} finally {
+			if (stream != null) {
+				try {
+					stream.close();
+				} catch (IOException e) {
+					abort(e);					
+				}
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Return a LaunchConfigurationInfo object initialized from XML contained in
+	 * the specified stream.  Simply pass out any exceptions encountered so that
+	 * caller can deal with them.  This is important since caller may need access to the
+	 * actual exception.
+	 */
+	private Object parseXML(InputStream stream) throws CoreException, ParserConfigurationException, IOException, SAXException {
+		Element root = null;
+		DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+		parser.setErrorHandler(new DefaultHandler());
+		root = parser.parse(new InputSource(stream)).getDocumentElement();
+		if (!root.getNodeName().equalsIgnoreCase(PLIST_ELEMENT)) { 
+			throw getInvalidFormatException();
+		}
+		NodeList list = root.getChildNodes();
+		Node node = null;
+		Element element = null;
+		for (int i = 0; i < list.getLength(); ++i) {
+			node = list.item(i);
+			short nodeType = node.getNodeType();
+			if (nodeType == Node.ELEMENT_NODE) {
+				element = (Element) node;
+				return parseObject(element);
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Returns an invalid format exception
+	 * 
+	 * @return an invalid format exception
+	 */
+	private CoreException getInvalidFormatException() {
+		return new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, "Invalid plist XML", null)); //$NON-NLS-1$
+	}
+	
+	/**
+	 * Parses and returns an object from the given root element, possibly <code>null</code>.
+	 * 
+	 * @param element the root node from the XML document
+	 * @return parsed object or <code>null</code>
+	 * @throws CoreException 
+	 */
+	private Object parseObject(Element element) throws CoreException {
+		String nodeName = element.getNodeName();
+		if (nodeName.equalsIgnoreCase(ARRAY_ELEMENT)) { 
+			return parseArray(element);
+		} else if (nodeName.equalsIgnoreCase(DICT_ELEMENT)) { 
+			return parseDictionary(element);
+		} else if (nodeName.equalsIgnoreCase(KEY_ELEMENT))  { 
+			return getText(element);
+		} else if (nodeName.equalsIgnoreCase(TRUE_ELEMENT)) {   
+			return Boolean.TRUE;			
+		} else if (nodeName.equalsIgnoreCase(FALSE_ELEMENT)) {    
+			return Boolean.FALSE;								
+		} else if(nodeName.equalsIgnoreCase(INT_ELEMENT)) {
+			try {
+				return new Integer(Integer.parseInt(getText(element)));
+			} catch (NumberFormatException e) {
+				abort(e);
+			}
+		} else if (nodeName.equalsIgnoreCase(STRING_ELEMENT)) {
+			return getText(element);
+		} else if (nodeName.equalsIgnoreCase(KEY_ELEMENT)) {
+			return getText(element);
+		} else {
+			// TODO: unsupported
+		}
+		return null;
+	}	
+	
+	/**
+	 * Parses and returns an array from the given root element, possibly empty.
+	 * 
+	 * @param root the root array node from the XML document
+	 * @return parsed array or <code>null</code>
+	 * @throws CoreException 
+	 */
+	private Object[] parseArray(Element root) throws CoreException {
+		List collection = new ArrayList();
+		NodeList list = root.getChildNodes();
+		Node node = null;
+		Element element = null;
+		for (int i = 0; i < list.getLength(); ++i) {
+			node = list.item(i);
+			short nodeType = node.getNodeType();
+			if (nodeType == Node.ELEMENT_NODE) {
+				element = (Element) node;
+				Object obj = parseObject(element);
+				if (obj != null) {
+					collection.add(obj);
+				}
+			}
+		}
+		return collection.toArray();
+	}	
+	
+	/**
+	 * Parses and returns a map from the given dictionary element, possibly empty.
+	 * 
+	 * @param root the root dictionary node from the XML document
+	 * @return parsed map or <code>null</code>
+	 * @throws CoreException 
+	 */
+	private Map parseDictionary(Element root) throws CoreException {
+		Map dict = new HashMap();
+		NodeList list = root.getChildNodes();
+		Node node = null;
+		Element element = null;
+		String nodeName = null;
+		String key = null;
+		for (int i = 0; i < list.getLength(); ++i) {
+			node = list.item(i);
+			short nodeType = node.getNodeType();
+			if (nodeType == Node.ELEMENT_NODE) {
+				element = (Element) node;
+				nodeName = element.getNodeName();
+				if (nodeName.equalsIgnoreCase(KEY_ELEMENT)) { 
+					key = getText(element);
+				} else {
+					dict.put(key, parseObject(element));
+				}
+			}
+		}
+		return dict;
+	}		
+	
+	/**
+	 * Returns the value of the first child text node from the given element,
+	 * or <code>null</code>.
+	 * 
+	 * @param root
+	 * @return its text or <code>null</code> if none
+	 */
+	private String getText(Element root) {
+		NodeList list = root.getChildNodes();
+		Node node = null;
+		for (int i = 0; i < list.getLength(); ++i) {
+			node = list.item(i);
+			short nodeType = node.getNodeType();
+			if (nodeType == Node.TEXT_NODE) {
+				return ((Text) node).getNodeValue();
+			}
+		}
+		return null;
+	}
+	
+	private void abort(Throwable t) throws CoreException {
+		throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, "Exception occurred parsing property list", t)); //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/ProjectClasspathVariableResolver.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/ProjectClasspathVariableResolver.java
new file mode 100644
index 0000000..7f4bd36
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/ProjectClasspathVariableResolver.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.launching;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.variables.IDynamicVariable;
+import org.eclipse.core.variables.IDynamicVariableResolver;
+import org.eclipse.core.variables.IStringVariableManager;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry2;
+import org.eclipse.jdt.launching.JavaRuntime;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Resolver for ${project_classpath:<project_name>}. Returns a string corresponding to the
+ * class path of the corresponding Java project.
+ */
+public class ProjectClasspathVariableResolver implements IDynamicVariableResolver {
+
+	public String resolveValue(IDynamicVariable variable, String argument) throws CoreException {
+		IProject proj = null;
+		if (argument == null) {
+			IResource resource = getSelectedResource();
+			if (resource != null && resource.exists()) {
+				proj = resource.getProject();
+			}
+			if (proj == null) {
+				throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, LaunchingMessages.ProjectClasspathVariableResolver_2));
+			}
+		} else {
+			proj = ResourcesPlugin.getWorkspace().getRoot().getProject(argument);
+		}
+		IJavaProject javaProject = JavaCore.create(proj);
+		if (javaProject.exists()) {
+			IRuntimeClasspathEntry2 defClassPath = (IRuntimeClasspathEntry2) JavaRuntime.newDefaultProjectClasspathEntry(javaProject);
+			IRuntimeClasspathEntry[] entries = defClassPath.getRuntimeClasspathEntries(null);
+			List collect = new ArrayList();
+			for (int i = 0; i < entries.length; i++) {
+				IRuntimeClasspathEntry[] children = JavaRuntime.resolveRuntimeClasspathEntry(entries[i], javaProject);
+				for (int j = 0; j < children.length; j++) {
+					collect.add(children[j]);
+				}
+			}
+			entries = (IRuntimeClasspathEntry[]) collect.toArray(new IRuntimeClasspathEntry[collect.size()]);
+			StringBuffer buffer = new StringBuffer();
+			for (int i = 0; i < entries.length; i++) {
+				if (i > 0) {
+					buffer.append(File.pathSeparatorChar);
+				}
+				buffer.append(entries[i].getLocation());
+			}
+			return buffer.toString();
+		} else {
+			throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, MessageFormat.format(LaunchingMessages.ProjectClasspathVariableResolver_1, new String[]{argument})));
+		}
+	}
+	
+	/**
+	 * Returns the selected resource. Uses the ${selected_resource_path} variable
+	 * to determine the selected resource. This variable is provided by the debug.ui
+	 * plug-in. Selected resource resolution is only available when the debug.ui
+	 * plug-in is present.
+	 * 
+	 * @return selected resource
+	 * @throws CoreException if there is no selection
+	 */
+	protected IResource getSelectedResource() throws CoreException {
+		IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
+		try {
+			String pathString = manager.performStringSubstitution("${selected_resource_path}"); //$NON-NLS-1$
+			return ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(pathString));
+		} catch (CoreException e) {
+			// unable to resolve a selection
+		}
+		throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, LaunchingMessages.ProjectClasspathVariableResolver_3));	
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
index a2e6ed9..ec5d6ca 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ import com.sun.jdi.connect.IllegalConnectorArgumentsException;
 import com.sun.jdi.connect.ListeningConnector;
 
 /**
- * A launcher for debugging Java main classes. Uses JDI to launch a vm in debug 
+ * A launcher for debugging Java main classes. Uses JDI to launch a VM in debug 
  * mode.
  */
 public class StandardVMDebugger extends StandardVMRunner {
@@ -61,7 +61,7 @@ public class StandardVMDebugger extends StandardVMRunner {
 	protected static final String JAVA_JVM_VERSION = "JAVA_JVM_VERSION"; //$NON-NLS-1$
 	
 	/**
-	 * Jre path segment descriptor
+	 * JRE path segment descriptor
 	 * 
 	 * String equals the word: <code>jre</code>
 	 * 
@@ -94,8 +94,8 @@ public class StandardVMDebugger extends StandardVMRunner {
 		 * Constructs a runnable to connect to a VM via the given connector
 		 * with the given connection arguments.
 		 * 
-		 * @param connector
-		 * @param map
+		 * @param connector the connector to use
+		 * @param map the argument map
 		 */
 		public ConnectRunnable(ListeningConnector connector, Map map) {
 			fConnector = connector;
@@ -133,6 +133,7 @@ public class StandardVMDebugger extends StandardVMRunner {
 
 	/**
 	 * Creates a new launcher
+	 * @param vmInstance the backing {@link IVMInstall} to launch
 	 */
 	public StandardVMDebugger(IVMInstall vmInstance) {
 		super(vmInstance);
@@ -365,13 +366,15 @@ public class StandardVMDebugger extends StandardVMRunner {
 	 * 
 	 * @param env the current array of environment variables to run with
 	 * @param jdkpath the path to the executable (javaw).
+	 * @return the altered JRE path
 	 * @since 3.3
 	 */
 	protected String[] prependJREPath(String[] env, IPath jdkpath) {
 		if(Platform.OS_WIN32.equals(Platform.getOS())) {
 			IPath jrepath = jdkpath.removeLastSegments(1);
 			if(jrepath.lastSegment().equals(BIN)) {
-				if(!jrepath.segment(jrepath.segmentCount()-2).equals(JRE)) {
+				int count = jrepath.segmentCount();
+				if(count > 1 && !jrepath.segment(count-2).equalsIgnoreCase(JRE)) {
 					jrepath = jrepath.removeLastSegments(1).append(JRE).append(BIN);
 				}
 			}
@@ -429,6 +432,7 @@ public class StandardVMDebugger extends StandardVMRunner {
 	 * @param port port the VM is connected to
 	 * @param process associated system process
 	 * @param vm JDI virtual machine
+	 * @return the {@link IDebugTarget}
 	 */
 	protected IDebugTarget createDebugTarget(VMRunnerConfiguration config, ILaunch launch, int port, IProcess process, VirtualMachine vm) {
 		return JDIDebugModel.newDebugTarget(launch, vm, renderDebugTarget(config.getClassToLaunch(), port), process, true, false, config.isResumeOnStartup());
@@ -468,8 +472,8 @@ public class StandardVMDebugger extends StandardVMRunner {
 
 	/**
 	 * Checks and forwards an error from the specified process
-	 * @param process
-	 * @throws CoreException
+	 * @param process the process to get the error message from
+	 * @throws CoreException if a problem occurs
 	 */
 	protected void checkErrorMessage(IProcess process) throws CoreException {
 		IStreamsProxy streamsProxy = process.getStreamsProxy();
@@ -486,8 +490,8 @@ public class StandardVMDebugger extends StandardVMRunner {
 		
 	/**
 	 * Allows arguments to be specified
-	 * @param map
-	 * @param portNumber
+	 * @param map argument map
+	 * @param portNumber the port number
 	 */
 	protected void specifyArguments(Map map, int portNumber) {
 		// XXX: Revisit - allows us to put a quote (") around the classpath
@@ -496,14 +500,18 @@ public class StandardVMDebugger extends StandardVMRunner {
 		
 		Connector.IntegerArgument timeoutArg= (Connector.IntegerArgument) map.get("timeout"); //$NON-NLS-1$
 		if (timeoutArg != null) {
-			int timeout = JavaRuntime.getPreferences().getInt(JavaRuntime.PREF_CONNECT_TIMEOUT);
+			int timeout = Platform.getPreferencesService().getInt(
+					LaunchingPlugin.ID_PLUGIN, 
+					JavaRuntime.PREF_CONNECT_TIMEOUT, 
+					JavaRuntime.DEF_CONNECT_TIMEOUT, 
+					null);
 			timeoutArg.setValue(timeout);
 		}
 	}
 
 	/**
 	 * Returns the default 'com.sun.jdi.SocketListen' connector
-	 * @return
+	 * @return the {@link ListeningConnector}
 	 */
 	protected ListeningConnector getConnector() {
 		List connectors= Bootstrap.virtualMachineManager().listeningConnectors();
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
index d5bbdbb..4cbf046 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
@@ -12,8 +12,6 @@
 package org.eclipse.jdt.internal.launching;
 
 
-import com.ibm.icu.text.MessageFormat;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -33,26 +31,37 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
-
-import org.eclipse.jdt.core.JavaCore;
-
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.debug.core.Launch;
 import org.eclipse.debug.core.model.IProcess;
 import org.eclipse.debug.core.model.IStreamsProxy;
-
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.launching.AbstractVMInstallType;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.LibraryLocation;
 import org.eclipse.osgi.service.environment.Constants;
 
+import com.ibm.icu.text.MessageFormat;
+
 /**
  * A VM install type for VMs the conform to the standard
  * JDK installation layout.
  */
 public class StandardVMType extends AbstractVMInstallType {
 	
+	/**
+	 * Constants for common {@link String}s
+	 * @since 3.7 
+	 */
+	private static final String RT_JAR = "rt.jar"; //$NON-NLS-1$
+	private static final String SRC = "src"; //$NON-NLS-1$
+	private static final String SRC_ZIP = "src.zip"; //$NON-NLS-1$
+	private static final String SRC_JAR = "src.jar"; //$NON-NLS-1$
+	private static final String JRE = "jre"; //$NON-NLS-1$
+	private static final String LIB = "lib"; //$NON-NLS-1$
+	private static final String BAR = "|"; //$NON-NLS-1$
+
 	public static final String ID_STANDARD_VM_TYPE = "org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType"; //$NON-NLS-1$
 	
 	/**
@@ -65,23 +74,29 @@ public class StandardVMType extends AbstractVMInstallType {
 	 * the library info during this session.
 	 */
 	private static Map fgFailedInstallPath = new HashMap();
-		
-	/**
-	 * Convenience handle to the system-specific file separator character
-	 */															
-	private static final char fgSeparator = File.separatorChar;
 
 	/**
+	 * Cache for default library locations. See {@link #getDefaultLibraryLocations(File)}
+	 * <br><br>
+	 * Map<{@link String}, {@link LibraryLocation}>
+	 * 
+	 * @since 3.7
+	 */
+	private static Map fgDefaultLibLocs = new HashMap();
+	
+	/**
 	 * The list of locations in which to look for the java executable in candidate
 	 * VM install locations, relative to the VM install location.
 	 */
 	private static final String[] fgCandidateJavaFiles = {"javaw", "javaw.exe", "java", "java.exe", "j9w", "j9w.exe", "j9", "j9.exe"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
-	private static final String[] fgCandidateJavaLocations = {"bin" + fgSeparator, "jre" + fgSeparator + "bin" + fgSeparator}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	private static final String[] fgCandidateJavaLocations = {"bin" + File.separatorChar, JRE + File.separatorChar + "bin" + File.separatorChar}; //$NON-NLS-1$ //$NON-NLS-2$ 
 	
 	/**
 	 * Starting in the specified VM install location, attempt to find the 'java' executable
 	 * file.  If found, return the corresponding <code>File</code> object, otherwise return
 	 * <code>null</code>.
+	 * @param vmInstallLocation the {@link File} location to look in
+	 * @return the {@link File} for the Java executable or <code>null</code>
 	 */
 	public static File findJavaExecutable(File vmInstallLocation) {
 		// Try each candidate in order.  The first one found wins.  Thus, the order
@@ -115,6 +130,9 @@ public class StandardVMType extends AbstractVMInstallType {
 	 * Return library information corresponding to the specified install
 	 * location. If the information does not exist, create it using the given Java
 	 * executable.
+	 * @param javaHome the Java home folder
+	 * @param javaExecutable the Java executable file
+	 * @return the {@link LibraryInfo} for the home and executable path or an empty object, never <code>null</code>
 	 */
 	protected synchronized LibraryInfo getLibraryInfo(File javaHome, File javaExecutable) {
 		String installPath = javaHome.getAbsolutePath();
@@ -138,6 +156,10 @@ public class StandardVMType extends AbstractVMInstallType {
 	/**
 	 * Return <code>true</code> if the appropriate system libraries can be found for the
 	 * specified java executable, <code>false</code> otherwise.
+	 * @param javaHome the Java home folder
+	 * @param javaExecutable the Java executable file
+	 * @return <code>true</code> if the default system libraries can be detected for the given install location
+	 * <code>false</code> otherwise
 	 */
 	protected boolean canDetectDefaultSystemLibraries(File javaHome, File javaExecutable) {
 		LibraryLocation[] locations = getDefaultLibraryLocations(javaHome);
@@ -149,8 +171,8 @@ public class StandardVMType extends AbstractVMInstallType {
 	 * Returns the version of the VM at the given location, with the given
 	 * executable.
 	 * 
-	 * @param javaHome
-	 * @param javaExecutable
+	 * @param javaHome the Java home folder
+	 * @param javaExecutable the Java executable file
 	 * @return String
 	 */
 	protected String getVMVersion(File javaHome, File javaExecutable) {
@@ -190,7 +212,7 @@ public class StandardVMType extends AbstractVMInstallType {
 		// If the reported java home directory terminates with 'jre', first see if 
 		// the parent directory contains the required libraries
 		boolean foundLibraries = false;
-		if (javaHome.getName().equalsIgnoreCase("jre")) { //$NON-NLS-1$
+		if (javaHome.getName().equalsIgnoreCase(JRE)) { 
 			File parent= new File(javaHome.getParent());			
 			if (canDetectDefaultSystemLibraries(parent, javaExecutable)) {
 				javaHome = parent;
@@ -211,32 +233,35 @@ public class StandardVMType extends AbstractVMInstallType {
 	/**
 	 * Return an <code>IPath</code> corresponding to the single library file containing the
 	 * standard Java classes for most VMs version 1.2 and above.
+	 * 
+	 * @param javaHome the Java home folder
+	 * @return the {@link IPath} to the <code>rt.jar</code> file
 	 */
 	protected IPath getDefaultSystemLibrary(File javaHome) {
-		IPath jreLibPath= new Path(javaHome.getPath()).append("lib").append("rt.jar"); //$NON-NLS-2$ //$NON-NLS-1$
+		IPath jreLibPath= new Path(javaHome.getPath()).append(LIB).append(RT_JAR); 
 		if (jreLibPath.toFile().isFile()) {
 			return jreLibPath;
 		}
-		return new Path(javaHome.getPath()).append("jre").append("lib").append("rt.jar"); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
+		return new Path(javaHome.getPath()).append(JRE).append(LIB).append(RT_JAR); 
 	}
 	
 	/**
 	 * Returns a path to the source attachment for the given library, or
 	 * an empty path if none.
 	 * 
-	 * @param libLocation
+	 * @param libLocation the {@link File} location of the library to find the source for
 	 * @return a path to the source attachment for the given library, or
 	 *  an empty path if none
 	 */
 	protected IPath getDefaultSystemLibrarySource(File libLocation) {
 		File parent= libLocation.getParentFile();
 		while (parent != null) {
-			File parentsrc= new File(parent, "src.jar"); //$NON-NLS-1$
+			File parentsrc= new File(parent, SRC_JAR);
 			if (parentsrc.isFile()) {
-				setDefaultRootPath("src");//$NON-NLS-1$
+				setDefaultRootPath(SRC);
 				return new Path(parentsrc.getPath());
 			}
-			parentsrc= new File(parent, "src.zip"); //$NON-NLS-1$
+			parentsrc= new File(parent, SRC_ZIP);
 			if (parentsrc.isFile()) {
 				setDefaultRootPath(""); //$NON-NLS-1$
 				return new Path(parentsrc.getPath());
@@ -247,11 +272,27 @@ public class StandardVMType extends AbstractVMInstallType {
 		IPath result = checkForJ9LibrarySource(libLocation);
 		if (result != null)
 			return result;
+		// check for <lib>-src.jar pattern
+		IPath libName = new Path(libLocation.getName());
+		String extension = libName.getFileExtension();
+		String prefix = libName.removeFileExtension().lastSegment();
+		if (extension != null) {
+			IPath srcPath = new Path(libLocation.getPath());
+			srcPath = srcPath.removeLastSegments(1);
+			StringBuffer buf = new StringBuffer();
+			buf.append(prefix);
+			buf.append("-src."); //$NON-NLS-1$
+			buf.append(extension);
+			srcPath = srcPath.append(buf.toString());
+			if (srcPath.toFile().exists()) {
+				return srcPath;
+			}
+		}
 		setDefaultRootPath(""); //$NON-NLS-1$
 		return Path.EMPTY; 
 	}
 
-	// J9 has a known/fixed structure for its libs and source locations.  Here just
+	// J9 has a known/fixed structure for its libraries and source locations.  Here just
 	// look for the source associated with each lib.
 	private IPath checkForJ9LibrarySource(File libLocation) {
 		File parent= libLocation.getParentFile();
@@ -271,66 +312,74 @@ public class StandardVMType extends AbstractVMInstallType {
 		return null;
 	}
 
+	/**
+	 * Returns the package root path
+	 * 
+	 * @return the package root path
+	 */
 	protected IPath getDefaultPackageRootPath() {
 		return new Path(getDefaultRootPath());
 	}
 
-	/**
-	 * NOTE: We do not add libraries from the "endorsed" directory explicitly, as
-	 * the bootpath contains these entries already (if they exist).
-	 * 
-	 * @see org.eclipse.jdt.launching.IVMInstallType#getDefaultLibraryLocations(File)
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.launching.IVMInstallType#getDefaultLibraryLocations(java.io.File)
 	 */
 	public LibraryLocation[] getDefaultLibraryLocations(File installLocation) {
+		//NOTE: We do not add libraries from the "endorsed" directory explicitly, as
+		//the bootpath contains these entries already (if they exist).
 		// Determine the java executable that corresponds to the specified install location
 		// and use this to generate library information.  If no java executable was found, 
 		// the 'standard' libraries will be returned.
-		File javaExecutable = findJavaExecutable(installLocation);
-		LibraryInfo libInfo;
-		if (javaExecutable == null) {
-			libInfo = getDefaultLibraryInfo(installLocation);
-		} else {
-			libInfo = getLibraryInfo(installLocation, javaExecutable);
-		}
-		
-		// Add all endorsed libraries - they are first, as they replace
-		List allLibs = new ArrayList(gatherAllLibraries(libInfo.getEndorsedDirs()));
-		
-		// next is the boot path libraries
-		String[] bootpath = libInfo.getBootpath();
-		List boot = new ArrayList(bootpath.length);
-		URL url = getDefaultJavadocLocation(installLocation);
-		for (int i = 0; i < bootpath.length; i++) {
-			IPath path = new Path(bootpath[i]);
-			File lib = path.toFile(); 
-			if (lib.exists() && lib.isFile()) {
-				LibraryLocation libraryLocation = new LibraryLocation(path,
-								getDefaultSystemLibrarySource(lib),
-								getDefaultPackageRootPath(),
-								url);
-				boot.add(libraryLocation);
+		List allLibs = (List) fgDefaultLibLocs.get(installLocation.getAbsolutePath());
+		if(allLibs == null) {
+			File javaExecutable = findJavaExecutable(installLocation);
+			LibraryInfo libInfo;
+			if (javaExecutable == null) {
+				libInfo = getDefaultLibraryInfo(installLocation);
+			} else {
+				libInfo = getLibraryInfo(installLocation, javaExecutable);
 			}
-		}
-		allLibs.addAll(boot);
-				
-		// Add all extension libraries
-		allLibs.addAll(gatherAllLibraries(libInfo.getExtensionDirs()));
-		
-		//remove duplicates
-		HashSet set = new HashSet();
-		LibraryLocation lib = null;
-		for(ListIterator liter = allLibs.listIterator(); liter.hasNext();) {
-			lib = (LibraryLocation) liter.next();
-			IPath systemLibraryPath = lib.getSystemLibraryPath();
-			String device = systemLibraryPath.getDevice();
-			if (device != null) {
-				// @see Bug 197866 - Installed JRE Wizard creates duplicate system libraries when drive letter is lower case
-				systemLibraryPath = systemLibraryPath.setDevice(device.toUpperCase());
+			
+			// Add all endorsed libraries - they are first, as they replace
+			allLibs = new ArrayList(gatherAllLibraries(libInfo.getEndorsedDirs()));
+			
+			// next is the boot path libraries
+			String[] bootpath = libInfo.getBootpath();
+			List boot = new ArrayList(bootpath.length);
+			URL url = getDefaultJavadocLocation(installLocation);
+			for (int i = 0; i < bootpath.length; i++) {
+				IPath path = new Path(bootpath[i]);
+				File lib = path.toFile(); 
+				if (lib.exists() && lib.isFile()) {
+					LibraryLocation libraryLocation = new LibraryLocation(path,
+									getDefaultSystemLibrarySource(lib),
+									getDefaultPackageRootPath(),
+									url);
+					boot.add(libraryLocation);
+				}
 			}
-			if(!set.add(systemLibraryPath.toOSString())) {
-				//did not add it, duplicate
-				liter.remove();
+			allLibs.addAll(boot);
+					
+			// Add all extension libraries
+			allLibs.addAll(gatherAllLibraries(libInfo.getExtensionDirs()));
+			
+			//remove duplicates
+			HashSet set = new HashSet();
+			LibraryLocation lib = null;
+			for(ListIterator liter = allLibs.listIterator(); liter.hasNext();) {
+				lib = (LibraryLocation) liter.next();
+				IPath systemLibraryPath = lib.getSystemLibraryPath();
+				String device = systemLibraryPath.getDevice();
+				if (device != null) {
+					// @see Bug 197866 - Installed JRE Wizard creates duplicate system libraries when drive letter is lower case
+					systemLibraryPath = systemLibraryPath.setDevice(device.toUpperCase());
+				}
+				if(!set.add(systemLibraryPath.toOSString())) {
+					//did not add it, duplicate
+					liter.remove();
+				}
 			}
+			fgDefaultLibLocs.put(installLocation.getAbsolutePath(), allLibs);
 		}
 		return (LibraryLocation[])allLibs.toArray(new LibraryLocation[allLibs.size()]);
 	}
@@ -338,7 +387,7 @@ public class StandardVMType extends AbstractVMInstallType {
 	/**
 	 * Returns default library information for the given install location.
 	 * 
-	 * @param installLocation
+	 * @param installLocation the VM install location
 	 * @return LibraryInfo
 	 */
 	protected LibraryInfo getDefaultLibraryInfo(File installLocation) {
@@ -403,17 +452,17 @@ public class StandardVMType extends AbstractVMInstallType {
 	 * install location. The resulting file may not exist, or be <code>null</code>
 	 * if an extension directory is not supported.
 	 * 
-	 * @param installLocation 
+	 * @param installLocation the VM install location
 	 * @return default extension directory or <code>null</code>
 	 */
 	protected File getDefaultExtensionDirectory(File installLocation) {
 		File jre = null;
-		if (installLocation.getName().equalsIgnoreCase("jre")) { //$NON-NLS-1$
+		if (installLocation.getName().equalsIgnoreCase(JRE)) { 
 			jre = installLocation;
 		} else {
-			jre = new File(installLocation, "jre"); //$NON-NLS-1$
+			jre = new File(installLocation, JRE); 
 		}
-		File lib = new File(jre, "lib"); //$NON-NLS-1$
+		File lib = new File(jre, LIB); 
 		File ext = new File(lib, "ext"); //$NON-NLS-1$
 		return ext;
 	}
@@ -423,11 +472,11 @@ public class StandardVMType extends AbstractVMInstallType {
 	 * given install location. The resulting file may not exist, or be
 	 * <code>null</code> if an endorsed directory is not supported.
 	 * 
-	 * @param installLocation 
+	 * @param installLocation the VM install location
 	 * @return default endorsed directory or <code>null</code>
 	 */
 	protected File getDefaultEndorsedDirectory(File installLocation) {
-		File lib = new File(installLocation, "lib"); //$NON-NLS-1$
+		File lib = new File(installLocation, LIB); 
 		File ext = new File(lib, "endorsed"); //$NON-NLS-1$
 		return ext;
 	}
@@ -465,19 +514,22 @@ public class StandardVMType extends AbstractVMInstallType {
 	 * and extension directories. This output is then parsed and cached for
 	 * future reference.
 	 * 
+	 * @param javaHome the Java home folder
+	 * @param javaExecutable the Java executable file
+	 * 
 	 * @return library info or <code>null</code> if none
 	 */	
 	protected LibraryInfo generateLibraryInfo(File javaHome, File javaExecutable) {
 		LibraryInfo info = null;
 		
 		// if this is 1.1.X, the properties will not exist		
-		IPath classesZip = new Path(javaHome.getAbsolutePath()).append("lib").append("classes.zip"); //$NON-NLS-1$ //$NON-NLS-2$
+		IPath classesZip = new Path(javaHome.getAbsolutePath()).append(LIB).append("classes.zip"); //$NON-NLS-1$ 
 		if (classesZip.toFile().exists()) {
 			return new LibraryInfo("1.1.x", new String[] {classesZip.toOSString()}, new String[0], new String[0]); //$NON-NLS-1$
 		}
 		//locate the launching support jar - it contains the main program to run
 		File file = LaunchingPlugin.getFileInPlugin(new Path("lib/launchingsupport.jar")); //$NON-NLS-1$
-		if (file.exists()) {	
+		if (file != null && file.exists()) {
 			String javaExecutablePath = javaExecutable.getAbsolutePath();
 			String[] cmdLine = new String[] {javaExecutablePath, "-classpath", file.getAbsolutePath(), "org.eclipse.jdt.internal.launching.support.LibraryDetector"};  //$NON-NLS-1$ //$NON-NLS-2$
 			Process p = null;
@@ -499,7 +551,7 @@ public class StandardVMType extends AbstractVMInstallType {
 				p = DebugPlugin.exec(cmdLine, null, envp);
 				IProcess process = DebugPlugin.newProcess(new Launch(null, ILaunchManager.RUN_MODE, null), p, "Library Detection"); //$NON-NLS-1$
 				for (int i= 0; i < 600; i++) {
-					// Wait no more than 30 seconds (600 * 50 mils)
+					// Wait no more than 30 seconds (600 * 50 milliseconds)
 					if (process.isTerminated()) {
 						break;
 					}
@@ -526,6 +578,9 @@ public class StandardVMType extends AbstractVMInstallType {
 	
 	/**
 	 * Parses the output from 'LibraryDetector'.
+	 * 
+	 * @param process the backing {@link IProcess} that was run
+	 * @return the new {@link LibraryInfo} object or <code>null</code>
 	 */
 	protected LibraryInfo parseLibraryInfo(IProcess process) {
 		IStreamsProxy streamsProxy = process.getStreamsProxy();
@@ -534,17 +589,17 @@ public class StandardVMType extends AbstractVMInstallType {
 			text = streamsProxy.getOutputStreamMonitor().getContents();
 		}
 		if (text != null && text.length() > 0) {
-			int index = text.indexOf("|"); //$NON-NLS-1$
+			int index = text.indexOf(BAR); 
 			if (index > 0) { 
 				String version = text.substring(0, index);
 				text = text.substring(index + 1);
-				index = text.indexOf("|"); //$NON-NLS-1$	
+				index = text.indexOf(BAR); 
 				if (index > 0) {
 					String bootPaths = text.substring(0, index);
 					String[] bootPath = parsePaths(bootPaths);
 					 
 					text = text.substring(index + 1);
-					index = text.indexOf("|"); //$NON-NLS-1$
+					index = text.indexOf(BAR); 
 					
 					if (index > 0) {
 						String extDirPaths = text.substring(0, index);
@@ -585,6 +640,7 @@ public class StandardVMType extends AbstractVMInstallType {
 			String path = vm.getInstallLocation().getAbsolutePath();
             LaunchingPlugin.setLibraryInfo(path, null);
             fgFailedInstallPath.remove(path);
+            fgDefaultLibLocs.remove(path);
 		}		
 		super.disposeVMInstall(id);
 	}
@@ -613,17 +669,15 @@ public class StandardVMType extends AbstractVMInstallType {
 	public static URL getDefaultJavadocLocation(String version) {
 		try {
 			if (version.startsWith(JavaCore.VERSION_1_7)) {
-				return new URL("http://java.sun.com/javase/7/docs/api/"); //$NON-NLS-1$
+				return new URL("http://download.oracle.com/javase/7/docs/api/"); //$NON-NLS-1$
 			} else if (version.startsWith(JavaCore.VERSION_1_6)) {
-				return new URL("http://java.sun.com/javase/6/docs/api/"); //$NON-NLS-1$
+				return new URL("http://download.oracle.com/javase/6/docs/api/"); //$NON-NLS-1$
 			} else if (version.startsWith(JavaCore.VERSION_1_5)) {
-				return new URL("http://java.sun.com/j2se/1.5.0/docs/api/"); //$NON-NLS-1$
+				return new URL("http://download.oracle.com/javase/1.5.0/docs/api/"); //$NON-NLS-1$
 			} else if (version.startsWith(JavaCore.VERSION_1_4)) {
-				return new URL("http://java.sun.com/j2se/1.4.2/docs/api/"); //$NON-NLS-1$
+				return new URL("http://download.oracle.com/javase/1.4.2/docs/api/"); //$NON-NLS-1$
 			} else if (version.startsWith(JavaCore.VERSION_1_3)) {
-				return new URL("http://java.sun.com/j2se/1.3/docs/api/"); //$NON-NLS-1$
-			} else if (version.startsWith(JavaCore.VERSION_1_2)) {
-				return new URL("http://java.sun.com/products/jdk/1.2/docs/api"); //$NON-NLS-1$
+				return new URL("http://download.oracle.com/javase/1.3/docs/api/"); //$NON-NLS-1$
 			}
 		} catch (MalformedURLException e) {
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/VMDefinitionsContainer.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/VMDefinitionsContainer.java
index 448b651..6ffcf0e 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/VMDefinitionsContainer.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/VMDefinitionsContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -242,11 +242,7 @@ public class VMDefinitionsContainer {
 	 * The resulting XML is compatible with the static method <code>parseXMLIntoContainer</code>.
 	 * </p>
 	 * @return String the results of flattening this object into XML
-	 * @throws IOException if this method fails. Reasons include:<ul>
-	 * <li>serialization of the XML document failed</li>
-	 * </ul>
-	 * @throws ParserConfigurationException if creation of the XML document failed
-	 * @throws TransformerException if serialization of the XML document failed
+	 * @throws CoreException if serialization of the XML document failed
 	 */
 	public String getAsXML() throws CoreException {
 		
@@ -280,6 +276,10 @@ public class VMDefinitionsContainer {
 	
 	/**
 	 * Create and return a node for the specified VM install type in the specified Document.
+	 * 
+	 * @param doc the backing {@link Document}
+	 * @param vmType the {@link IVMInstallType} to create an {@link Element} for
+	 * @return the new {@link Element}
 	 */
 	private Element vmTypeAsElement(Document doc, IVMInstallType vmType) {
 		
@@ -301,6 +301,10 @@ public class VMDefinitionsContainer {
 	
 	/**
 	 * Create and return a node for the specified VM in the specified Document.
+	 * 
+	 * @param doc the backing {@link Document}
+	 * @param vm the {@link IVMInstall} to create an {@link Element} for
+	 * @return the new {@link Element} representing the given {@link IVMInstall}
 	 */
 	private Element vmAsElement(Document doc, IVMInstall vm) {
 		
@@ -369,6 +373,10 @@ public class VMDefinitionsContainer {
 	/**
 	 * Create and return a 'libraryLocations' node.  This node owns subordinate nodes that
 	 * list individual library locations.
+	 * 
+	 * @param doc the backing {@link Document}
+	 * @param locations the array of {@link LibraryLocation}s to create an {@link Element} for
+	 * @return the new {@link Element} for the given {@link LibraryLocation}s
 	 */
 	private static Element libraryLocationsAsElement(Document doc, LibraryLocation[] locations) {
 		Element root = doc.createElement("libraryLocations");       //$NON-NLS-1$
@@ -465,8 +473,11 @@ public class VMDefinitionsContainer {
 	}
 	
 	/**
-	 * For the specified vm type node, parse all subordinate VM definitions and add them
+	 * For the specified VM type node, parse all subordinate VM definitions and add them
 	 * to the specified container.
+	 * 
+	 * @param vmTypeElement the {@link Element} to populate the {@link VMDefinitionsContainer} from
+	 * @param container the {@link VMDefinitionsContainer} to populate from the {@link Element}
 	 */
 	private static void populateVMTypes(Element vmTypeElement, VMDefinitionsContainer container) {
 		// Retrieve the 'id' attribute and the corresponding VM type object
@@ -538,57 +549,61 @@ public class VMDefinitionsContainer {
 			vmStandin.setName(name);
 			File installLocation= new File(installPath);
 			vmStandin.setInstallLocation(installLocation);
+			String install = installLocation.getAbsolutePath();
+			//only consider a VM changed it is a standard VM
+			boolean changed = StandardVMType.ID_STANDARD_VM_TYPE.equals(vmType.getId()) && 
+										LaunchingPlugin.timeStampChanged(install);
 			container.addVM(vmStandin);
 			
 			// Look for subordinate nodes.  These may be 'libraryLocation',
 			// 'libraryLocations' or 'versionInfo'.
-			NodeList list = vmElement.getChildNodes();
-			int length = list.getLength();
-			for (int i = 0; i < length; ++i) {
-				Node node = list.item(i);
-				short type = node.getNodeType();
-				if (type == Node.ELEMENT_NODE) {
-					Element subElement = (Element)node;
-					String subElementName = subElement.getNodeName();
-					if (subElementName.equals("libraryLocation")) { //$NON-NLS-1$
-						LibraryLocation loc = getLibraryLocation(subElement);
+			if(!changed) {
+				NodeList list = vmElement.getChildNodes();
+				int length = list.getLength();
+				for (int i = 0; i < length; ++i) {
+					Node node = list.item(i);
+					short type = node.getNodeType();
+					if (type == Node.ELEMENT_NODE) {
+						Element subElement = (Element)node;
+						String subElementName = subElement.getNodeName();
+						if (subElementName.equals("libraryLocation")) { //$NON-NLS-1$
+							LibraryLocation loc = getLibraryLocation(subElement);
 						vmStandin.setLibraryLocations(new LibraryLocation[]{loc});
-					} else if (subElementName.equals("libraryLocations")) { //$NON-NLS-1$
-						setLibraryLocations(vmStandin, subElement);
-					} else if (subElementName.equals("attributeMap")) { //$NON-NLS-1$
-						NodeList entries = subElement.getElementsByTagName("entry"); //$NON-NLS-1$
-						for (int j = 0; j < entries.getLength(); j++) {
-							Node entryNode = entries.item(j);
-							if (entryNode instanceof Element) {
-								Element entryElement = (Element) entryNode;
-								String key = entryElement.getAttribute("key"); //$NON-NLS-1$
-								String value = entryElement.getAttribute("value"); //$NON-NLS-1$
-								if (key != null && value != null) {
-									vmStandin.setAttribute(key, value);
+						} else if (subElementName.equals("libraryLocations")) { //$NON-NLS-1$
+							setLibraryLocations(vmStandin, subElement);
+						} else if (subElementName.equals("attributeMap")) { //$NON-NLS-1$
+							NodeList entries = subElement.getElementsByTagName("entry"); //$NON-NLS-1$
+							for (int j = 0; j < entries.getLength(); j++) {
+								Node entryNode = entries.item(j);
+								if (entryNode instanceof Element) {
+									Element entryElement = (Element) entryNode;
+									String key = entryElement.getAttribute("key"); //$NON-NLS-1$
+									String value = entryElement.getAttribute("value"); //$NON-NLS-1$
+									if (key != null && value != null) {
+										vmStandin.setAttribute(key, value);
+									}
 								}
 							}
 						}
 					}
+					
+					// javadoc URL
+					String externalForm = vmElement.getAttribute("javadocURL"); //$NON-NLS-1$
+					if (externalForm != null && externalForm.length() > 0) {
+						try {
+							vmStandin.setJavadocLocation(new URL(externalForm));
+						} catch (MalformedURLException e) {
+							container.addStatus(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN,
+									MessageFormat.format(LaunchingMessages.VMDefinitionsContainer_6, new String[]{name}), e));
+						}
+					}
 				}
 			}
-			
-			// javadoc URL
-			String externalForm = vmElement.getAttribute("javadocURL"); //$NON-NLS-1$
-			if (externalForm != null && externalForm.length() > 0) {
-				try {
-					vmStandin.setJavadocLocation(new URL(externalForm));
-				} catch (MalformedURLException e) {
-					container.addStatus(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN,
-							MessageFormat.format(LaunchingMessages.VMDefinitionsContainer_6, new String[]{name}), e));
-				}
-			}
-			
 			// vm Arguments
 			String vmArgs = vmElement.getAttribute("vmargs"); //$NON-NLS-1$
 			if (vmArgs != null && vmArgs.length() >0) {
 				vmStandin.setVMArgs(vmArgs);
 			}
-
 		} else {
 			String installPath= vmElement.getAttribute("path"); //$NON-NLS-1$
 			String name = vmElement.getAttribute("name"); //$NON-NLS-1$
@@ -608,6 +623,9 @@ public class VMDefinitionsContainer {
 	/**
 	 * Create & return a LibraryLocation object populated from the attribute values
 	 * in the specified node.
+	 * 
+	 * @param libLocationElement the {@link Element} to parse the {@link LibraryLocation} from
+	 * @return the new {@link LibraryLocation} or <code>null</code> if the {@link Element} was malformed
 	 */
 	private static LibraryLocation getLibraryLocation(Element libLocationElement) {
 		String jreJar= libLocationElement.getAttribute("jreJar"); //$NON-NLS-1$
@@ -634,6 +652,9 @@ public class VMDefinitionsContainer {
 	/**
 	 * Set the LibraryLocations on the specified VM, by extracting the subordinate
 	 * nodes from the specified 'lirbaryLocations' node.
+	 * 
+	 * @param vm the {@link IVMInstall} to populate from the given {@link Element}
+	 * @param libLocationsElement the {@link Element} to populate the {@link IVMInstall} with
 	 */
 	private static void setLibraryLocations(IVMInstall vm, Element libLocationsElement) {
 		NodeList list = libLocationsElement.getChildNodes();
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.java
index c54b623..49d10a5 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,4 +28,7 @@ public class EnvironmentMessages extends NLS {
 	}
 
 	public static String EnvironmentsManager_0;
+	public static String ExecutionEnvironmentVariableResolver_0;
+	public static String ExecutionEnvironmentVariableResolver_1;
+	public static String ExecutionEnvironmentVariableResolver_2;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.properties b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.properties
index ccc9fe6..ee45c8b 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2006 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,3 +9,6 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 EnvironmentsManager_0=JRE not compatible with environment {0}
+ExecutionEnvironmentVariableResolver_0=Execution environment unspecified for ee_home variable
+ExecutionEnvironmentVariableResolver_1=Specified execution environment does not exist:  {0}
+ExecutionEnvironmentVariableResolver_2=No JRE found for specified execution environment:  {0}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentsManager.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentsManager.java
index ba61ea6..21c33d7 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentsManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/EnvironmentsManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -28,7 +28,9 @@ import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.jdt.internal.launching.LaunchingPlugin;
 import org.eclipse.jdt.launching.IVMInstall;
@@ -54,7 +56,7 @@ import com.ibm.icu.text.MessageFormat;
  * 
  * @since 3.2
  */
-public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMInstallChangedListener, IPropertyChangeListener {
+public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMInstallChangedListener, IPreferenceChangeListener {
 
 	/**
 	 * Extension configuration element name.
@@ -99,12 +101,12 @@ public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMIn
 	private Map fAnalyzers = null;
 	
 	/**
-	 * <code>true</code> while updating the default settings pref
+	 * <code>true</code> while updating the default settings preferences
 	 */
 	private boolean fIsUpdatingDefaults = false;
 	
 	/**
-	 * Whether compatibile environnments have been initialized
+	 * Whether compatible environments have been initialized
 	 */
 	private boolean fInitializedCompatibilities = false;
 
@@ -145,7 +147,7 @@ public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMIn
 	 */
 	private EnvironmentsManager() {
 		JavaRuntime.addVMInstallChangedListener(this);
-		LaunchingPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(this);
+		InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).addPreferenceChangeListener(this);
 	}
 
 	/* (non-Javadoc)
@@ -178,7 +180,7 @@ public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMIn
 	/**
 	 * Returns all registered analyzers 
 	 * 
-	 * @return
+	 * @return all registered analyzers
 	 */
 	public synchronized Analyzer[] getAnalyzers() { 
 		initializeExtensions();
@@ -249,10 +251,10 @@ public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMIn
 	}
 	
 	/**
-	 * Reads persisted default VMs from pref store
+	 * Reads persisted default VMs from the preference store
 	 */
 	private synchronized void initializeDefaultVMs() {
-		String xml = LaunchingPlugin.getDefault().getPluginPreferences().getString(PREF_DEFAULT_ENVIRONMENTS_XML);
+		String xml = InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).get(PREF_DEFAULT_ENVIRONMENTS_XML, ""); //$NON-NLS-1$
 		try {
 			if (xml.length() > 0) {
 				DocumentBuilder parser = LaunchingPlugin.getParser();
@@ -292,6 +294,8 @@ public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMIn
 	/**
 	 * Returns an XML description of default VMs per environment. Returns
 	 * an empty string when there are none. 
+	 * @return an XML description of default VMs per environment. Returns
+	 * an empty string when there are none.
 	 */
 	private String getDefatulVMsAsXML() {
 		int count = 0;
@@ -321,10 +325,10 @@ public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMIn
 	}
 	
 	/**
-	 * Analyzes and compatible execution environments for the given vm install.
+	 * Analyzes compatible execution environments for the given VM install.
 	 * 
-	 * @param vm
-	 * @param monitor
+	 * @param vm the {@link IVMInstall} to find environments for
+	 * @param monitor a progress monitor or <code>null</code>
 	 */
 	private void analyze(IVMInstall vm, IProgressMonitor monitor) {
 		Analyzer[] analyzers = getAnalyzers();
@@ -390,23 +394,22 @@ public class EnvironmentsManager implements IExecutionEnvironmentsManager, IVMIn
 	synchronized void updateDefaultVMs() {
 		try {
 			fIsUpdatingDefaults = true;
-			LaunchingPlugin.getDefault().getPluginPreferences().setValue(PREF_DEFAULT_ENVIRONMENTS_XML, getDefatulVMsAsXML());
+			InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).put(PREF_DEFAULT_ENVIRONMENTS_XML, getDefatulVMsAsXML());
 		} finally {
 			fIsUpdatingDefaults = false;
 		}
 	}
-	
+
 	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent)
+	 * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent)
 	 */
-	public synchronized void propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent event) {
+	public void preferenceChange(PreferenceChangeEvent event) {
 		// don't respond to myself
 		if (fIsUpdatingDefaults) {
 			return;
 		}
-		if (event.getProperty().equals(PREF_DEFAULT_ENVIRONMENTS_XML)) {
+		if (event.getKey().equals(PREF_DEFAULT_ENVIRONMENTS_XML)) {
 			initializeDefaultVMs();
 		}
 	}
-		
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java
index a32d2e3..4fa4980 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -159,7 +159,7 @@ class ExecutionEnvironment implements IExecutionEnvironment {
 	
 	/**
 	 * Constructor
-	 * @param element
+	 * @param element the backing {@link IConfigurationElement}
 	 */
 	ExecutionEnvironment(IConfigurationElement element) {
 		fElement = element;
@@ -268,11 +268,11 @@ class ExecutionEnvironment implements IExecutionEnvironment {
 	}
 
 	/**
-	 * Adds the specified vm to the listing of compatible vms, also
-	 * adds the vm to the listing of stricly compatible ones based on
+	 * Adds the specified VM to the listing of compatible VMs, also
+	 * adds the VM to the listing of strictly compatible ones based on
 	 * the strictlyCompatible flag
-	 * @param vm
-	 * @param strictlyCompatible
+	 * @param vm the VM to add to the environment
+	 * @param strictlyCompatible if it is strictly compatible
 	 */
 	void add(IVMInstall vm, boolean strictlyCompatible) {
 		if (fCompatibleVMs.contains(vm)) {
@@ -285,8 +285,8 @@ class ExecutionEnvironment implements IExecutionEnvironment {
 	}
 	
 	/**
-	 * Removes the specified vm from the listings of vms
-	 * @param vm
+	 * Removes the specified VM from the listings of VMs
+	 * @param vm the VM to remove
 	 */
 	void remove(IVMInstall vm) {
 		fCompatibleVMs.remove(vm);
@@ -294,8 +294,8 @@ class ExecutionEnvironment implements IExecutionEnvironment {
 	}
 	
 	/**
-	 * Sets the default vm to be the one specified
-	 * @param vm
+	 * Sets the default VM to be the one specified
+	 * @param vm the VM to set as the default
 	 */
 	void initDefaultVM(IVMInstall vm) {
 		fDefault = vm;
@@ -360,10 +360,13 @@ class ExecutionEnvironment implements IExecutionEnvironment {
 	
 	/**
 	 * Returns a map of participant to the access rules for that participant for the given
-	 * vm, libraries, and project.
+	 * VM, libraries, and project.
 	 * 
-	 * @param participants
-	 * @return
+	 * @param participants access rule participants
+	 * @param vm the VM
+	 * @param libraries the {@link LibraryLocation}s 
+	 * @param project the {@link IJavaProject} context
+	 * @return the mapping of {@link IAccessRuleParticipant} to {@link IAccessRule}s
 	 */
 	private Map collectRulesByParticipant(IAccessRuleParticipant[] participants, IVMInstall vm, LibraryLocation[] libraries, IJavaProject project) {
 		Map map = new HashMap();
@@ -377,6 +380,9 @@ class ExecutionEnvironment implements IExecutionEnvironment {
 	/**
 	 * Adds the access rules to each list in the given collection. If the last rule in a 
 	 * given collection is the wild card pattern then no more rules are added to that collection.
+	 * 
+	 * @param accessRules the list of {@link IAccessRule}s
+	 * @param collect the array of lists to collect the {@link IAccessRule}s in
 	 */
 	private void addRules(IAccessRule[][] accessRules, List[] collect) {
 		for (int i = 0; i < accessRules.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironmentVariableResolver.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironmentVariableResolver.java
new file mode 100644
index 0000000..1003e4e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/environments/ExecutionEnvironmentVariableResolver.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.launching.environments;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.variables.IDynamicVariable;
+import org.eclipse.core.variables.IDynamicVariableResolver;
+import org.eclipse.jdt.internal.launching.LaunchingPlugin;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Resolves variables of the form ${ee_home:<id>}
+ */
+public class ExecutionEnvironmentVariableResolver implements IDynamicVariableResolver {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.variables.IDynamicVariableResolver#resolveValue(org.eclipse.core.variables.IDynamicVariable, java.lang.String)
+	 */
+	public String resolveValue(IDynamicVariable variable, String argument) throws CoreException {
+		if (argument == null) {
+			throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, EnvironmentMessages.ExecutionEnvironmentVariableResolver_0));
+		}
+		IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
+		IExecutionEnvironment env = manager.getEnvironment(argument);
+		if (env == null) {
+			throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, MessageFormat.format(EnvironmentMessages.ExecutionEnvironmentVariableResolver_1, new String[]{argument})));
+		}
+		IPath path = JavaRuntime.newJREContainerPath(env);
+		IVMInstall jre = JavaRuntime.getVMInstall(path);
+		if (jre == null) {
+			throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.ID_PLUGIN, MessageFormat.format(EnvironmentMessages.ExecutionEnvironmentVariableResolver_2, new String[]{argument})));
+		}
+		return jre.getInstallLocation().getAbsolutePath();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractVMInstall.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractVMInstall.java
index 0d7c5c4..f6c4c54 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractVMInstall.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractVMInstall.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Preferences;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.ILaunchManager;
@@ -227,7 +228,7 @@ public abstract class AbstractVMInstall implements IVMInstall, IVMInstall2, IVMI
 	/**
 	 * Whether this VM should fire property change notifications.
 	 * 
-	 * @param notify
+	 * @param notify if this VM should fire property change notifications.
 	 * @since 2.1
 	 */
 	protected void setNotify(boolean notify) {
@@ -349,7 +350,7 @@ public abstract class AbstractVMInstall implements IVMInstall, IVMInstall2, IVMI
 		if (!cached) {		
 			// launch VM to evaluate properties
 			File file = LaunchingPlugin.getFileInPlugin(new Path("lib/launchingsupport.jar")); //$NON-NLS-1$
-			if (file.exists()) {
+			if (file != null && file.exists()) {
 				String javaVersion = getJavaVersion();
 				boolean hasXMLSupport = false;
 				if (javaVersion != null) {
@@ -385,7 +386,11 @@ public abstract class AbstractVMInstall implements IVMInstall, IVMInstall2, IVMI
 				IProcess process = processes[0];
 				try {
 					int total = 0;
-					int max = JavaRuntime.getPreferences().getInt(JavaRuntime.PREF_CONNECT_TIMEOUT);
+					int max = Platform.getPreferencesService().getInt(
+							LaunchingPlugin.ID_PLUGIN, 
+							JavaRuntime.PREF_CONNECT_TIMEOUT, 
+							JavaRuntime.DEF_CONNECT_TIMEOUT, 
+							null);
 					while (!process.isTerminated()) {
 						try {
 							if (total > max) {
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
index 7aaaef5..c5477b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,18 +31,10 @@ import java.util.Set;
 
 import javax.xml.parsers.DocumentBuilder;
 
-import com.ibm.icu.text.MessageFormat;
-
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import org.eclipse.core.variables.IStringVariableManager;
-import org.eclipse.core.variables.VariablesPlugin;
-
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
@@ -56,22 +48,18 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Preferences;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.preferences.BundleDefaultsScope;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.core.variables.IStringVariableManager;
+import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.sourcelookup.ISourceContainer;
-
 import org.eclipse.jdt.core.IClasspathAttribute;
 import org.eclipse.jdt.core.IClasspathContainer;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IJavaModel;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
-
 import org.eclipse.jdt.internal.launching.CompositeId;
 import org.eclipse.jdt.internal.launching.DefaultEntryResolver;
 import org.eclipse.jdt.internal.launching.DefaultProjectClasspathEntry;
@@ -90,10 +78,17 @@ import org.eclipse.jdt.internal.launching.VMDefinitionsContainer;
 import org.eclipse.jdt.internal.launching.VMListener;
 import org.eclipse.jdt.internal.launching.VariableClasspathEntry;
 import org.eclipse.jdt.internal.launching.environments.EnvironmentsManager;
-
 import org.eclipse.jdt.launching.environments.ExecutionEnvironmentDescription;
 import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
 import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
+import org.osgi.service.prefs.BackingStoreException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import com.ibm.icu.text.MessageFormat;
 
 /**
  * The central access point for launching support. This class manages
@@ -189,6 +184,13 @@ public final class JavaRuntime {
 	public static final String JRE_CONTAINER = LaunchingPlugin.getUniqueIdentifier() + ".JRE_CONTAINER"; //$NON-NLS-1$
 	
 	/**
+	 * Marker type identifier for JRE container problems.
+	 * 
+	 * @since 3.6
+	 */
+	public static final String JRE_CONTAINER_MARKER = LaunchingPlugin.getUniqueIdentifier() + ".jreContainerMarker"; //$NON-NLS-1$
+	
+	/**
 	 * A status code indicating that a JRE could not be resolved for a project.
 	 * When a JRE cannot be resolved for a project by this plug-in's container
 	 * initializer, an exception is thrown with this status code. A status handler
@@ -330,7 +332,7 @@ public final class JavaRuntime {
 	}
 
 	/**
-	 * Initializes vm type extensions.
+	 * Initializes VM type extensions.
 	 */
 	private static void initializeVMTypeExtensions() {
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(LaunchingPlugin.ID_PLUGIN, "vmInstallTypes"); //$NON-NLS-1$
@@ -413,9 +415,10 @@ public final class JavaRuntime {
 	 * Sets a VM as the system-wide default VM, and notifies registered VM install
 	 * change listeners of the change.
 	 * 
-	 * @param vm	The vm to make the default. May be <code>null</code> to clear
+	 * @param vm	The VM to make the default. May be <code>null</code> to clear
 	 * 				the default.
 	 * @param monitor progress monitor or <code>null</code>
+	 * @throws CoreException if trying to set the default VM install encounters problems
 	 */
 	public static void setDefaultVMInstall(IVMInstall vm, IProgressMonitor monitor) throws CoreException {
 		setDefaultVMInstall(vm, monitor, true);
@@ -425,11 +428,12 @@ public final class JavaRuntime {
 	 * Sets a VM as the system-wide default VM, and notifies registered VM install
 	 * change listeners of the change.
 	 * 
-	 * @param vm	The vm to make the default. May be <code>null</code> to clear
+	 * @param vm	The VM to make the default. May be <code>null</code> to clear
 	 * 				the default.
 	 * @param monitor progress monitor or <code>null</code>
 	 * @param savePreference If <code>true</code>, update workbench preferences to reflect
 	 * 		   				  the new default VM.
+	 * @throws CoreException if trying to set the default VM install encounters problems
 	 * @since 2.1
 	 */
 	public static void setDefaultVMInstall(IVMInstall vm, IProgressMonitor monitor, boolean savePreference) throws CoreException {
@@ -542,6 +546,7 @@ public final class JavaRuntime {
 	 * Returns a String that uniquely identifies the specified VM across all VM types.
 	 * 
 	 * @param vm the instance of IVMInstallType to be identified
+	 * @return the unique identifier for the specified VM
 	 * 
 	 * @since 2.1
 	 */
@@ -557,9 +562,10 @@ public final class JavaRuntime {
 	
 	/**
 	 * Return the VM corresponding to the specified composite Id.  The id uniquely
-	 * identifies a VM across all vm types.
+	 * identifies a VM across all VM types.
 	 * 
 	 * @param idString the composite id that specifies an instance of IVMInstall
+	 * @return the VM corresponding to the specified composite Id.
 	 * 
 	 * @since 2.1
 	 */
@@ -746,6 +752,7 @@ public final class JavaRuntime {
 	 * Computes and returns the default unresolved runtime classpath for the
 	 * given project.
 	 * 
+	 * @param project the {@link IJavaProject} to compute the unresolved runtime classpath for
 	 * @return runtime classpath entries
 	 * @exception CoreException if unable to compute the runtime classpath
 	 * @see IRuntimeClasspathEntry
@@ -941,11 +948,11 @@ public final class JavaRuntime {
 	 * Default resolution for a classpath variable - resolve to an archive. Only
 	 * one of project/configuration can be non-null.
 	 * 
-	 * @param entry
+	 * @param entry the {@link IRuntimeClasspathEntry} to try and resolve
 	 * @param project the project context or <code>null</code>
 	 * @param configuration configuration context or <code>null</code>
 	 * @return IRuntimeClasspathEntry[]
-	 * @throws CoreException
+	 * @throws CoreException if a problem is encountered trying to resolve the given classpath entry
 	 */
 	private static IRuntimeClasspathEntry[] resolveVariableEntry(IRuntimeClasspathEntry entry, IJavaProject project, ILaunchConfiguration configuration) throws CoreException {
 		// default resolution - an archive
@@ -993,10 +1000,10 @@ public final class JavaRuntime {
 	 * of the given project, or null if the project only uses the default
 	 * output location.
 	 * 
-	 * @param project
+	 * @param project the {@link IJavaProject} to resolve the output locations for
 	 * @param classpathProperty the type of classpath entries to create
 	 * @return IRuntimeClasspathEntry[] or <code>null</code>
-	 * @throws CoreException
+	 * @throws CoreException if output resolution encounters a problem
 	 */
 	private static IRuntimeClasspathEntry[] resolveOutputLocations(IJavaProject project, int classpathProperty) throws CoreException {
 		List nonDefault = new ArrayList();
@@ -1097,6 +1104,10 @@ public final class JavaRuntime {
 	/**
 	 * Performs default resolution for a container entry.
 	 * Delegates to the Java model.
+	 * @param entry the {@link IRuntimeClasspathEntry} to compute default container entries for
+	 * @param config the backing {@link ILaunchConfiguration}
+	 * @return the complete listing of default container entries or an empty list, never <code>null</code>
+	 * @throws CoreException if the computation encounters a problem
 	 */
 	private static IRuntimeClasspathEntry[] computeDefaultContainerEntries(IRuntimeClasspathEntry entry, ILaunchConfiguration config) throws CoreException {
 		IJavaProject project = entry.getJavaProject();
@@ -1109,6 +1120,10 @@ public final class JavaRuntime {
 	/**
 	 * Performs default resolution for a container entry.
 	 * Delegates to the Java model.
+	 * @param entry the {@link IRuntimeClasspathEntry} to compute default container entries for
+	 * @param project the backing {@link IJavaProject}
+	 * @return the complete listing of default container entries or an empty list, never <code>null</code>
+	 * @throws CoreException if the computation encounters a problem
 	 */
 	private static IRuntimeClasspathEntry[] computeDefaultContainerEntries(IRuntimeClasspathEntry entry, IJavaProject project) throws CoreException {
 		if (project == null || entry == null) {
@@ -1216,8 +1231,11 @@ public final class JavaRuntime {
 	
 	/**
 	 * Return the <code>IJavaProject</code> referenced in the specified configuration or
-	 * <code>null</code> if none.
-	 *
+	 * <code>null</code> if none. This method looks for the existence of the {@link IJavaLaunchConfigurationConstants#ATTR_PROJECT_NAME}
+	 * attribute in the given configuration.
+	 * 
+	 * @param configuration the {@link ILaunchConfiguration} to try and compute the {@link IJavaProject} from
+	 * @return the referenced {@link IJavaProject} or <code>null</code>
 	 * @exception CoreException if the referenced Java project does not exist
 	 * @since 2.0
 	 */
@@ -1238,6 +1256,7 @@ public final class JavaRuntime {
 				
 	/**
 	 * Convenience method to get the java model.
+	 * @return the {@link IJavaModel} made against the {@link IWorkspaceRoot}
 	 */
 	private static IJavaModel getJavaModel() {
 		return JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
@@ -1298,9 +1317,10 @@ public final class JavaRuntime {
 	/**
 	 * Returns the VM of the given type with the specified name.
 	 * 
-	 * @param type vm type identifier
-	 * @param name vm name
-	 * @return vm install
+	 * @param type VM type identifier
+	 * @param name VM name
+	 * @param configuration the backing {@link ILaunchConfiguration}
+	 * @return VM install
 	 * @exception CoreException if unable to resolve
 	 * @since 3.2
 	 */
@@ -1335,6 +1355,7 @@ public final class JavaRuntime {
 	 * @param message the status message
 	 * @param exception lower level exception associated with the
 	 *  error, or <code>null</code> if none
+	 * @throws CoreException a {@link CoreException} wrapper
 	 */
 	private static void abort(String message, Throwable exception) throws CoreException {
 		abort(message, IJavaLaunchConfigurationConstants.ERR_INTERNAL_ERROR, exception);
@@ -1349,6 +1370,7 @@ public final class JavaRuntime {
 	 * @param exception lower level exception associated with the
 	 * 
 	 *  error, or <code>null</code> if none
+	 * @throws CoreException a {@link CoreException} wrapper
 	 */
 	private static void abort(String message, int code, Throwable exception) throws CoreException {
 		throw new CoreException(new Status(IStatus.ERROR, LaunchingPlugin.getUniqueIdentifier(), code, message, exception));
@@ -1391,6 +1413,7 @@ public final class JavaRuntime {
 	 * <ul>
 	 * This state will be read again upon first access to VM
 	 * configuration information.
+	 * @throws CoreException if trying to save the current state of VMs encounters a problem
 	 */
 	public static void saveVMConfiguration() throws CoreException {
 		if (fgVMTypes == null) {
@@ -1398,14 +1421,14 @@ public final class JavaRuntime {
 			return;
 		}
 		String xml = getVMsAsXML();
-		getPreferences().setValue(PREF_VM_XML, xml);
+		InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).put(PREF_VM_XML, xml);
 		savePreferences();
 	}
 	
 	/**
 	 * Returns the listing of currently installed VMs as a single XML file
 	 * @return an XML representation of all of the currently installed VMs
-	 * @throws CoreException
+	 * @throws CoreException if trying to compute the XML for the VM state encounters a problem
 	 */
 	private static String getVMsAsXML() throws CoreException {
 		VMDefinitionsContainer container = new VMDefinitionsContainer();
@@ -1424,15 +1447,18 @@ public final class JavaRuntime {
 	
 	/**
 	 * This method loads installed JREs based an existing user preference
-	 * or old vm configurations file. The VMs found in the preference
-	 * or vm configurations file are added to the given VM definitions container.
+	 * or old VM configurations file. The VMs found in the preference
+	 * or VM configurations file are added to the given VM definitions container.
 	 * 
 	 * Returns whether the user preferences should be set - i.e. if it was
 	 * not already set when initialized.
+	 * @param vmDefs the container to add persisted VM information to
+	 * @return whether the user preferences should be set
+	 * @throws IOException if reading the {@link #PREF_VM_XML} preference stream encounters a problem
 	 */
 	private static boolean addPersistedVMs(VMDefinitionsContainer vmDefs) throws IOException {
 		// Try retrieving the VM preferences from the preference store
-		String vmXMLString = getPreferences().getString(PREF_VM_XML);
+		String vmXMLString = InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).get(PREF_VM_XML, ""); //$NON-NLS-1$
 		
 		// If the preference was found, load VMs from it into memory
 		if (vmXMLString.length() > 0) {
@@ -1461,6 +1487,7 @@ public final class JavaRuntime {
 	
 	/**
 	 * Loads contributed VM installs
+	 * @param vmDefs the container to add contributed VM install information to
 	 * @since 3.2
 	 */
 	private static void addVMExtensions(VMDefinitionsContainer vmDefs) {
@@ -1596,9 +1623,9 @@ public final class JavaRuntime {
     /**
      * Performs string substitution on the given expression.
      * 
-     * @param expression
+     * @param expression the expression to evaluate
      * @return expression after string substitution
-     * @throws CoreException
+     * @throws CoreException if the substitution encounters a problem
      * @since 3.2
      */
     private static String substitute(String expression) throws CoreException {
@@ -1609,8 +1636,8 @@ public final class JavaRuntime {
      * Returns whether the VM install with the specified id was contributed via
      * the vmInstalls extension point.
      * 
-     * @param id vm id
-     * @return whether the vm install was contributed via extension point
+     * @param id VM id
+     * @return whether the VM install was contributed via extension point
      * @since 3.2
      */
     public static boolean isContributedVMInstall(String id) {
@@ -1621,6 +1648,7 @@ public final class JavaRuntime {
 	/**
 	 * Evaluates library locations for a IVMInstall. If no library locations are set on the install, a default
 	 * location is evaluated and checked if it exists.
+	 * @param vm the {@link IVMInstall} to compute locations for
 	 * @return library locations with paths that exist or are empty
 	 * @since 2.0
 	 */
@@ -1682,13 +1710,13 @@ public final class JavaRuntime {
 	/**
 	 * Detect the VM that Eclipse is running on.
 	 * 
-	 * @return a VM standin representing the VM that Eclipse is running on, or
+	 * @return a VM stand-in representing the VM that Eclipse is running on, or
 	 * <code>null</code> if unable to detect the runtime VM
 	 */
 	private static VMStandin detectEclipseRuntime() {
 		// Try to detect a VM for each declared VM type
 		IVMInstallType[] vmTypes= getVMInstallTypes();
-		// If we are running from an EE file, setup the vm from it
+		// If we are running from an EE file, setup the VM from it
 		for (int i = 0; i < vmTypes.length; i++) {
 			if (vmTypes[i] instanceof EEVMType){
 				String eeFileName = System.getProperty("ee.filename"); //$NON-NLS-1$
@@ -1704,7 +1732,7 @@ public final class JavaRuntime {
 							unique++;
 						}
 
-						// Create a standin for the detected VM and add it to the result collector
+						// Create a stand-in for the detected VM and add it to the result collector
 						String vmID = String.valueOf(unique);
 						try{
 							return createVMFromDefinitionFile(vmFile, "", vmID); //$NON-NLS-1$
@@ -1716,7 +1744,7 @@ public final class JavaRuntime {
 			}
 		}
 
-		// Try to create a vm install using the install location
+		// Try to create a VM install using the install location
 		for (int i = 0; i < vmTypes.length; i++) {
 			File detectedLocation= vmTypes[i].detectInstallLocation();
 			if (detectedLocation != null) {
@@ -1728,7 +1756,7 @@ public final class JavaRuntime {
 					unique++;
 				}
 
-				// Create a standin for the detected VM and add it to the result collector
+				// Create a stand-in for the detected VM and add it to the result collector
 				String vmID = String.valueOf(unique);
 				VMStandin detectedVMStandin = new VMStandin(vmType, vmID);
 				detectedVMStandin.setInstallLocation(detectedLocation);
@@ -1793,6 +1821,8 @@ public final class JavaRuntime {
 	
 	/**
 	 * Make the name of a detected VM stand out.
+	 * @param vm the VM to generate a name for
+	 * @return the new name or <code>JRE</code>
 	 */
 	private static String generateDetectedVMName(IVMInstall vm) {
 		String name = vm.getInstallLocation().getName();
@@ -1855,8 +1885,8 @@ public final class JavaRuntime {
 	 * Returns a path for the JRE classpath container identifying the
 	 * specified VM install by type and name.
 	 * 
-	 * @param typeId vm install type identifier
-	 * @param name vm install name
+	 * @param typeId VM install type identifier
+	 * @param name VM install name
 	 * @return classpath container path
 	 * @since 3.2
 	 */
@@ -1886,7 +1916,7 @@ public final class JavaRuntime {
 	 * Returns the JRE referenced by the specified JRE classpath container
 	 * path or <code>null</code> if none.
 	 * 
-	 * @param jreContainerPath
+	 * @param jreContainerPath the path to the container to try and resolve the {@link IVMInstall} from
 	 * @return JRE referenced by the specified JRE classpath container
 	 *  path or <code>null</code>
 	 * @since 3.2
@@ -1899,8 +1929,8 @@ public final class JavaRuntime {
 	 * Returns the identifier of the VM install type referenced by the
 	 * given JRE classpath container path, or <code>null</code> if none.
 	 * 
-	 * @param jreContainerPath
-	 * @return vm install type identifier or <code>null</code>
+	 * @param jreContainerPath the path to the container to try and resolve the {@link IVMInstallType} id from
+	 * @return VM install type identifier or <code>null</code>
 	 * @since 3.2
 	 */
 	public static String getVMInstallTypeId(IPath jreContainerPath) {
@@ -1914,7 +1944,7 @@ public final class JavaRuntime {
 	 * Returns the name of the VM install referenced by the
 	 * given JRE classpath container path, or <code>null</code> if none.
 	 * 
-	 * @param jreContainerPath
+	 * @param jreContainerPath the path to the container to try an resolve the {@link IVMInstall} name from
 	 * @return vm name or <code>null</code>
 	 * @since 3.2
 	 */
@@ -1955,7 +1985,7 @@ public final class JavaRuntime {
 	 * default JRE is used to create a container path.</li>
 	 * </ol>
 	 * </p>
-	 * @param configuration
+	 * @param configuration the backing {@link ILaunchConfiguration}
 	 * @return classpath container path identifying a JRE or <code>null</code>
 	 * @exception org.eclipse.core.runtime.CoreException if an exception occurs retrieving
 	 *  attributes from the specified launch configuration
@@ -2039,10 +2069,10 @@ public final class JavaRuntime {
 	}
 	
 	/**
-	 * Returns whether the given runtime classpath entry refers to a vm install.
+	 * Returns whether the given runtime classpath entry refers to a VM install.
 	 * 
-	 * @param entry
-	 * @return whether the given runtime classpath entry refers to a vm install
+	 * @param entry the entry to check
+	 * @return whether the given runtime classpath entry refers to a VM install
 	 * @since 3.2
 	 */
 	public static boolean isVMInstallReference(IRuntimeClasspathEntry entry) {
@@ -2104,7 +2134,12 @@ public final class JavaRuntime {
 	 * @since 2.0
 	 */
 	public static void savePreferences() {
-		LaunchingPlugin.getDefault().savePluginPreferences();
+		IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN);
+		try {
+			prefs.flush();
+		} catch (BackingStoreException e) {
+			LaunchingPlugin.log(e);
+		}
 	}
 	
 	/**
@@ -2133,6 +2168,7 @@ public final class JavaRuntime {
 	
 	/**
 	 * Returns all registered variable resolvers.
+	 * @return the initialized map of {@link RuntimeClasspathEntryResolver}s for variables
 	 */
 	private static Map getVariableResolvers() {
 		if (fgVariableResolvers == null) {
@@ -2143,6 +2179,7 @@ public final class JavaRuntime {
 	
 	/**
 	 * Returns all registered container resolvers.
+	 * @return the initialized map of {@link RuntimeClasspathEntryResolver}s for containers
 	 */
 	private static Map getContainerResolvers() {
 		if (fgContainerResolvers == null) {
@@ -2153,6 +2190,7 @@ public final class JavaRuntime {
 	
 	/**
 	 * Returns all registered runtime classpath entry resolvers.
+	 * @return the initialized map of {@link RuntimeClasspathEntryResolver}s for classpath entries
 	 */
 	private static Map getEntryResolvers() {
 		if (fgRuntimeClasspathEntryResolvers == null) {
@@ -2189,6 +2227,7 @@ public final class JavaRuntime {
 
 	/**
 	 * Returns all registered classpath providers.
+	 * @return the initialized map of {@link RuntimeClasspathProvider}s
 	 */
 	private static Map getClasspathProviders() {
 		if (fgPathProviders == null) {
@@ -2330,8 +2369,9 @@ public final class JavaRuntime {
 	
 	/**
 	 * Return the String representation of the default output directory of the
-	 * launch config's project or <code>null</code> if there is no config, no
+	 * launch config's project or <code>null</code> if there is no configuration, no
 	 * project or some sort of problem.
+	 * @param config the {@link ILaunchConfiguration}
 	 * 
 	 * @return the default output directory for the specified launch
 	 * configuration's project
@@ -2460,7 +2500,7 @@ public final class JavaRuntime {
 	 * @param classpathEntries the project's raw classpath
 	 * @param entries collection to add java library path entries to
 	 * @return required project classpath entries or <code>null</code>
-	 * @throws CoreException
+	 * @throws CoreException if an exception occurs
 	 * @since 3.1
 	 */
 	private static IClasspathEntry[] processJavaLibraryPathEntries(IJavaProject project, boolean collectRequired, IClasspathEntry[] classpathEntries, List entries) throws CoreException {
@@ -2687,13 +2727,11 @@ public final class JavaRuntime {
 			if (setPref) {
 				try {
 					String xml = vmDefs.getAsXML();
-					LaunchingPlugin.getDefault().getPluginPreferences().setValue(PREF_VM_XML, xml);
+					InstanceScope.INSTANCE.getNode(LaunchingPlugin.ID_PLUGIN).put(PREF_VM_XML, xml);
 				}  catch (CoreException e) {
 					LaunchingPlugin.log(e);
 				}
-				
 			}
-			
 			// update compliance if required
 			if (updateCompliance) {
 				updateCompliance(getDefaultVMInstall());
@@ -2702,9 +2740,9 @@ public final class JavaRuntime {
 	}
 	
 	/**
-	 * Update compiler compliance settings based on the given vm.
+	 * Update compiler compliance settings based on the given VM.
 	 * 
-	 * @param vm
+	 * @param vm the backing {@link IVMInstall}
 	 */
 	private static void updateCompliance(IVMInstall vm) {
         if (vm instanceof IVMInstall2) {
@@ -2716,7 +2754,7 @@ public final class JavaRuntime {
             	} else if (javaVersion.startsWith(JavaCore.VERSION_1_6)) {
             		compliance = JavaCore.VERSION_1_6;
             	} else if (javaVersion.startsWith(JavaCore.VERSION_1_7)) {
-            		// since 1.7 compliance options are not yet supported, default to 1.6 compliance when running on 1.7
+            		// since 1.7 compliance options are not yet supported, default to 1.6 compliance when running on 1.7, see https://bugs.eclipse.org/321043
             		compliance = JavaCore.VERSION_1_6;
             	}
             	if (compliance != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/plugin.properties b/eclipse/plugins/org.eclipse.jdt.launching/plugin.properties
index 5836465..bdb463c 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/plugin.properties
+++ b/eclipse/plugins/org.eclipse.jdt.launching/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -56,3 +56,6 @@ environment.description.9 = Java Platform, Standard Edition 6.0
 environment.description.11 = Java Platform, Standard Edition 7.0
 
 classpathVariableInitializer.deprecated = Use the JRE System Library instead
+
+ee.home.description = Returns the absolute file system path of the JRE home directory corresponding to the specified execution environment. An execution environment identifier must be provided as an argument.
+project.classpath.description = Returns the resolved class path of a project. A project name can be provided as an argument. If no argument is provided, the target project is the project of the selected resource.
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/plugin.xml b/eclipse/plugins/org.eclipse.jdt.launching/plugin.xml
index dc0b959..a9afc7e 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/plugin.xml
+++ b/eclipse/plugins/org.eclipse.jdt.launching/plugin.xml
@@ -294,5 +294,18 @@
             </managedMarker>
          </compilationParticipant>
       </extension>
+      <extension
+            point="org.eclipse.core.variables.dynamicVariables">
+         <variable
+               description="%ee.home.description"
+               name="ee_home"
+               resolver="org.eclipse.jdt.internal.launching.environments.ExecutionEnvironmentVariableResolver">
+         </variable>
+         <variable
+               description="%project.classpath.description"
+               name="project_classpath"
+               resolver="org.eclipse.jdt.internal.launching.ProjectClasspathVariableResolver">
+         </variable>
+      </extension>
      
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/r3_0_changes.html b/eclipse/plugins/org.eclipse.jdt.launching/r3_0_changes.html
deleted file mode 100644
index 8ba085d..0000000
--- a/eclipse/plugins/org.eclipse.jdt.launching/r3_0_changes.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<html>
-<head>
-<title>3.0 JDT Launching Change Notes</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
-<h1>3.0 JDT Launching Change Notes</h1>
-<p>This document describes important changes in the 3.0 JDT launching support, relative 
-  to the 2.1 release.</p>
-<h2>API Changes</h2>
-<h3>VMRunnerConfiguration contains environment</h3>
-<p>Two methods have been added to the <code>VMRunnerConfiguration</code> type
-  to support the setting and retrieving of environment variables.
-<p>Implementors of <code>IVMRunner</code> should call <code>VMRunnerConfiguration.getEnvironment()</code> 
-  and pass that environment into the executed VM. Clients who use <code>DebugPlugin#exec(String[] 
-  cmdLine, File workingDirectory)</code> can do this by calling <code>DebugPlugin#exec(String[] 
-  cmdLine, File workingDirectory, String[] envp)</code> instead. Simply passing 
-  in the result from <code>getEnvironment()</code> is sufficient.</p>
-<h3>VMRunnerConfiguration and Bootstrap Classes</h3>
-<p>In prior releases, the <code>VMRunnerConfiguration</code> had one attribute 
-  to describe a boot path. The attribute is a collection of <code>Strings</code> 
-  to be specified in the -<code>Xbootclasspath</code> argument. Three new attributes 
-  have been added to the VM specific attributes map to support VMs that allow 
-  for prepending and appending to the boot path. The newly added attributes are 
-  defined in <code>IJavaLanuchConfigurationConstants</code>:</p>
-<ul>
-  <li><code>ATTR_BOOTPAH_PREPEND</code> - an array of strings describing paths 
-    in the local file system to be prepended to the boot path (the <code>-Xbootclasspath/p</code> 
-    argument)</li>
-  <li><code>ATTR_BOOTPATH</code> - an array of strings describing paths in the 
-    local file system to be placed on the boot path (the <code>-Xbootclasspath</code> 
-    argument)</li>
-  <li><code>ATTR_BOOTPATH_APPEND</code> - an array of strings describing paths 
-    in the local file system to be appended to the boot path (the <code>-Xbootclasspath/a</code> 
-    argument)</li>
-</ul>
-<p>The old attribute,<code> getBootClassPath()</code> still exists, and contains 
-  a complete path equivalent to that of the three new attributes. However, <code>VMRunners</code> 
-  that support the new boot path options should take advantage of the new attributes, 
-  found in the VM specific attributes map (i.e. <code>VMRunnerConfiguration.getVMSpecificAttributesMap()</code>). 
-  The attributes are computed dynamically at launch time based on the classpath 
-  attribute associated with a launch configiuration. The boothpath attributes 
-  themselves are not stored in launch configurations.</p>
-<h3>Default VM Arguments</h3>
-<p>To allow a specific set of VM arguments to be used every time a specific VM 
-  is launched (without having to specify the arguments on all associated launch 
-  configurations), a new "VM arguments" attribute has been added to 
-  <code>IVMInstall</code>, along with getter and setter methods. Although clients 
-  may implement this interface, the additional API is intended to be non-breaking, 
-  since clients who implement the interface should be subclassing <code>AbstractVMInstall</code>, 
-  where the new feature is implemented. Existing VM runners need to honor the 
-  new attributes when launching a VM. A convenience method (<code>combineVmArgs</code>) 
-  has been added to <code>AbstractVMRunner</code> to combine VM arguments specified 
-  on a runner configuration and a VM install.</p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/scripts/buildLaunchingSupportJAR.xml b/eclipse/plugins/org.eclipse.jdt.launching/scripts/buildLaunchingSupportJAR.xml
index 6f80d43..0ae8a00 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/scripts/buildLaunchingSupportJAR.xml
+++ b/eclipse/plugins/org.eclipse.jdt.launching/scripts/buildLaunchingSupportJAR.xml
@@ -1,5 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
<!--
-     Copyright (c) 2005, 2008 IBM Corporation and others.
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.launching/support/org/eclipse/jdt/internal/launching/support/LibraryDetector.java b/eclipse/plugins/org.eclipse.jdt.launching/support/org/eclipse/jdt/internal/launching/support/LibraryDetector.java
index 3d00511..e1a456e 100644
--- a/eclipse/plugins/org.eclipse.jdt.launching/support/org/eclipse/jdt/internal/launching/support/LibraryDetector.java
+++ b/eclipse/plugins/org.eclipse.jdt.launching/support/org/eclipse/jdt/internal/launching/support/LibraryDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.launching.support;
 
+import java.util.Enumeration;
 
 /**
  * Used to discover the boot path, extension directories, and endorsed
@@ -45,7 +46,21 @@ public class LibraryDetector {
 		} else {
 			System.out.print(System.getProperty("java.version")); //$NON-NLS-1$
 			System.out.print("|"); //$NON-NLS-1$
-			System.out.print(System.getProperty("sun.boot.class.path")); //$NON-NLS-1$
+			// get the boot class path - the property may vary for different vendors
+			Enumeration keys = System.getProperties().keys();
+			boolean found = false;
+			while (keys.hasMoreElements()) {
+				String key = (String) keys.nextElement();
+				if (key.endsWith(".boot.class.path")) { //$NON-NLS-1$
+					found = true;
+					System.out.print(System.getProperty(key));
+					break;
+				}
+			}
+			if (!found) {
+				// old behavior
+				System.out.print(System.getProperty("sun.boot.class.path")); //$NON-NLS-1$
+			}
 		}
 		System.out.print("|"); //$NON-NLS-1$
 		System.out.print(System.getProperty("java.ext.dirs")); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/.classpath b/eclipse/plugins/org.eclipse.jdt.ui/.classpath
index bcbef41..4bc88dd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/.classpath
+++ b/eclipse/plugins/org.eclipse.jdt.ui/.classpath
@@ -6,7 +6,7 @@
 	<classpathentry kind="src" path="core extension"/>
 	<classpathentry kind="src" output="bin-jar-in-jar-loader" path="jar in jar loader"/>
 	<classpathentry kind="src" path="internal compatibility"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/.externalToolBuilders/Build Jar in Jar Loader.launch b/eclipse/plugins/org.eclipse.jdt.ui/.externalToolBuilders/Build Jar in Jar Loader.launch
index 4298d47..1efda79 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/.externalToolBuilders/Build Jar in Jar Loader.launch	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/.externalToolBuilders/Build Jar in Jar Loader.launch	
@@ -20,6 +20,6 @@
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.jdt.ui"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?>
<resources>
<item path="/org.eclipse.jdt.ui/jar in jar loader" type="2"/>
<item path="/org.eclipse.jdt.ui/scripts/buildExtraJAR.xml" type="1"/>
</resources>}"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.jdt.ui/scripts/build_jar-in-jar-loader.xml}"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="auto,full,incremental"/>
 <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
 </launchConfiguration>
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.core.prefs
index 86799d7..75dc1ba 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Fri Nov 28 09:49:27 CET 2008
+#Mon Feb 28 10:31:28 CET 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -15,18 +15,20 @@ org.eclipse.jdt.core.codeComplete.localPrefixes=
 org.eclipse.jdt.core.codeComplete.localSuffixes=
 org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=fg
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
 org.eclipse.jdt.core.compiler.problem.deadCode=error
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
@@ -34,16 +36,17 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=error
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=error
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
@@ -62,6 +65,7 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=error
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
@@ -75,13 +79,16 @@ org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
@@ -100,9 +107,10 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
@@ -113,6 +121,7 @@ org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=48
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
@@ -157,10 +166,16 @@ org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
 org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
 org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
 org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
 org.eclipse.jdt.core.formatter.compact_else_if=true
 org.eclipse.jdt.core.formatter.continuation_indentation=2
 org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
 org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
@@ -172,9 +187,14 @@ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
 org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
@@ -194,10 +214,10 @@ org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
 org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
 org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
 org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
@@ -357,7 +377,9 @@ org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=3
 org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
 org.eclipse.jdt.core.formatter.tabulation.char=tab
 org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.ui.prefs
index ee52089..c7f4c1b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.ui.prefs
+++ b/eclipse/plugins/org.eclipse.jdt.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -1,7 +1,7 @@
-#Tue Jul 15 15:34:15 CEST 2008
+#Wed Jan 05 12:52:35 CET 2011
 eclipse.preferences.version=1
 formatter_profile=_JDT UI Code Style Conventions
-formatter_settings_version=11
+formatter_settings_version=12
 org.eclipse.jdt.ui.exception.name=e
 org.eclipse.jdt.ui.gettersetter.use.is=true
 org.eclipse.jdt.ui.ignorelowercasenames=true
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
index b0fba75..5bc39b6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.ui; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.ui.JavaPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
@@ -116,26 +116,26 @@ Require-Bundle:
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.variables;bundle-version="[3.2.200,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.6.0,4.0.0)",
- org.eclipse.search;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.search;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.debug.core;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.debug.ui;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.jdt.launching;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.jdt.launching;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.compare;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.team.ui;bundle-version="[3.4.100,4.0.0)",
  org.eclipse.team.core;bundle-version="[3.4.100,4.0.0)",
- org.eclipse.jface.text;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.console;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.ui.workbench.texteditor;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.ui.workbench.texteditor;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.views;bundle-version="[3.3.100,4.0.0)",
  org.eclipse.ui.editors;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.6.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.ltk.core.refactoring;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ltk.ui.refactoring;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.forms;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.ui.navigator;bundle-version="[3.3.200,4.0.0)",
  org.eclipse.ui.navigator.resources;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.jdt.core.manipulation;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.jdt.core.manipulation;bundle-version="[1.4.0,2.0.0)",
  com.ibm.icu;bundle-version="3.4.4"
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/build.properties b/eclipse/plugins/org.eclipse.jdt.ui/build.properties
index dd8d112..5cb0fd6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/build.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,4 +30,7 @@ source.. = core refactoring/,\
                ui refactoring/,\
                core extension/,\
                internal compatibility/
+src.excludes = jar in jar loader/
 jars.compile.order = .
+customBuildCallbacks = customBuildCallbacks.xml
+javacWarnings..=-raw,-unchecked
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/BuildpathDelta.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/BuildpathDelta.java
index b420d23..f08dec1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/BuildpathDelta.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/BuildpathDelta.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,19 +23,19 @@ public class BuildpathDelta {
 
 	private final String fOperationDescription;
 	private CPListElement[] fNewEntries;
-	private final List fCreatedResources;
+	private final List<IResource> fCreatedResources;
 	private IPath fOutputLocation;
-	private final List fDeletedResources;
-	private final List fAddedEntries;
-	private final ArrayList fRemovedEntries;
+	private final List<IResource> fDeletedResources;
+	private final List<CPListElement> fAddedEntries;
+	private final ArrayList<CPListElement> fRemovedEntries;
 
 	public BuildpathDelta(String operationDescription) {
 		fOperationDescription= operationDescription;
 
-		fCreatedResources= new ArrayList();
-		fDeletedResources= new ArrayList();
-		fAddedEntries= new ArrayList();
-		fRemovedEntries= new ArrayList();
+		fCreatedResources= new ArrayList<IResource>();
+		fDeletedResources= new ArrayList<IResource>();
+		fAddedEntries= new ArrayList<CPListElement>();
+		fRemovedEntries= new ArrayList<CPListElement>();
     }
 
 	public String getOperationDescription() {
@@ -47,11 +47,11 @@ public class BuildpathDelta {
 	}
 
 	public IResource[] getCreatedResources() {
-		return (IResource[])fCreatedResources.toArray(new IResource[fCreatedResources.size()]);
+		return fCreatedResources.toArray(new IResource[fCreatedResources.size()]);
 	}
 
 	public IResource[] getDeletedResources() {
-		return (IResource[])fDeletedResources.toArray(new IResource[fDeletedResources.size()]);
+		return fDeletedResources.toArray(new IResource[fDeletedResources.size()]);
 	}
 
 	public IPath getDefaultOutputLocation() {
@@ -74,7 +74,7 @@ public class BuildpathDelta {
 		fDeletedResources.add(resource);
     }
 
-    public List getAddedEntries() {
+    public List<CPListElement> getAddedEntries() {
 	    return fAddedEntries;
     }
 
@@ -82,7 +82,7 @@ public class BuildpathDelta {
     	fAddedEntries.add(entry);
     }
 
-    public List getRemovedEntries() {
+    public List<CPListElement> getRemovedEntries() {
     	return fRemovedEntries;
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java
index 36bed9d..f695543 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,38 +25,38 @@ import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
 public class CPJavaProject {
 
 	public static CPJavaProject createFromExisting(IJavaProject javaProject) throws CoreException {
-		List classpathEntries= ClasspathModifier.getExistingEntries(javaProject);
+		List<CPListElement> classpathEntries= ClasspathModifier.getExistingEntries(javaProject);
 		return new CPJavaProject(javaProject, classpathEntries, javaProject.getOutputLocation());
     }
 
 	private final IJavaProject fJavaProject;
-    private final List fCPListElements;
+    private final List<CPListElement> fCPListElements;
 	private IPath fDefaultOutputLocation;
 
-	public CPJavaProject(IJavaProject javaProject, List cpListElements, IPath defaultOutputLocation) {
+	public CPJavaProject(IJavaProject javaProject, List<CPListElement> cpListElements, IPath defaultOutputLocation) {
 		fJavaProject= javaProject;
 		fCPListElements= cpListElements;
 		fDefaultOutputLocation= defaultOutputLocation;
     }
 
     public CPJavaProject createWorkingCopy() {
-    	List newList= new ArrayList(fCPListElements.size());
-    	for (Iterator iterator= fCPListElements.iterator(); iterator.hasNext();) {
-	        CPListElement element= (CPListElement)iterator.next();
+    	List<CPListElement> newList= new ArrayList<CPListElement>(fCPListElements.size());
+    	for (Iterator<CPListElement> iterator= fCPListElements.iterator(); iterator.hasNext();) {
+	        CPListElement element= iterator.next();
 	        newList.add(element.copy());
         }
 		return new CPJavaProject(fJavaProject, newList, fDefaultOutputLocation);
     }
 
     public CPListElement get(int index) {
-    	return (CPListElement)fCPListElements.get(index);
+    	return fCPListElements.get(index);
     }
 
     public IClasspathEntry[] getClasspathEntries() {
     	IClasspathEntry[] result= new IClasspathEntry[fCPListElements.size()];
     	int i= 0;
-    	for (Iterator iterator= fCPListElements.iterator(); iterator.hasNext();) {
-	        CPListElement element= (CPListElement)iterator.next();
+    	for (Iterator<CPListElement> iterator= fCPListElements.iterator(); iterator.hasNext();) {
+	        CPListElement element= iterator.next();
 	        result[i]= element.getClasspathEntry();
 	        i++;
         }
@@ -67,7 +67,7 @@ public class CPJavaProject {
 		return ClasspathModifier.getClasspathEntry(fCPListElements, element);
     }
 
-    public List getCPListElements() {
+    public List<CPListElement> getCPListElements() {
 	    return fCPListElements;
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java
index 9140a5c..4781fac 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileStore;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -78,7 +79,7 @@ public class ClasspathModifier {
 		if (!allowInvalidCP && cpProject.getDefaultOutputLocation().segmentCount() == 1 && !projectPath.equals(elementToChange.getPath())) {
 			String outputFolderName= PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME);
 			cpProject.setDefaultOutputLocation(cpProject.getDefaultOutputLocation().append(outputFolderName));
-			List existingEntries= cpProject.getCPListElements();
+			List<CPListElement> existingEntries= cpProject.getCPListElements();
 			CPListElement elem= ClasspathModifier.getListElement(javaProject.getPath(), existingEntries);
             if (elem != null) {
             	existingEntries.remove(elem);
@@ -87,7 +88,7 @@ public class ClasspathModifier {
 		}
 
 		if (outputPath != null)
-			exclude(outputPath, cpProject.getCPListElements(), new ArrayList(), cpProject.getJavaProject(), null);
+			exclude(outputPath, cpProject.getCPListElements(), new ArrayList<CPListElement>(), cpProject.getJavaProject(), null);
 
 		IPath oldOutputLocation= (IPath)elementToChange.getAttribute(CPListElement.OUTPUT);
         if (oldOutputLocation != null && oldOutputLocation.segmentCount() > 1 && !oldOutputLocation.equals(cpProject.getDefaultOutputLocation())) {
@@ -97,7 +98,7 @@ public class ClasspathModifier {
 		elementToChange.setAttribute(CPListElement.OUTPUT, outputPath);
 
 		result.setDefaultOutputLocation(cpProject.getDefaultOutputLocation());
-		result.setNewEntries((CPListElement[])cpProject.getCPListElements().toArray(new CPListElement[cpProject.getCPListElements().size()]));
+		result.setNewEntries(cpProject.getCPListElements().toArray(new CPListElement[cpProject.getCPListElements().size()]));
 		if (outputPath != null && outputPath.segmentCount() > 1) {
 			result.addCreatedResource(workspace.getRoot().getFolder(outputPath));
 		}
@@ -140,7 +141,7 @@ public class ClasspathModifier {
 			result= new StatusInfo(IStatus.INFO, Messages.format(NewWizardMessages.OutputLocationDialog_removeProjectFromBP, BasicElementLabels.getPathLabel(cpProject.getDefaultOutputLocation(), false)));
 		}
 
-		exclude(outputPath, cpProject.getCPListElements(), new ArrayList(), cpProject.getJavaProject(), null);
+		exclude(outputPath, cpProject.getCPListElements(), new ArrayList<CPListElement>(), cpProject.getJavaProject(), null);
 
 		IPath oldOutputLocation= (IPath)elementToChange.getAttribute(CPListElement.OUTPUT);
         if (oldOutputLocation != null && oldOutputLocation.segmentCount() > 1 && !oldOutputLocation.equals(cpProject.getDefaultOutputLocation())) {
@@ -193,9 +194,9 @@ public class ClasspathModifier {
 
     	IJavaProject javaProject= cpProject.getJavaProject();
 
-    	List newEntries= new ArrayList();
-    	List duplicateEntries= new ArrayList();
-    	List existingEntries= cpProject.getCPListElements();
+    	List<CPListElement> newEntries= new ArrayList<CPListElement>();
+    	List<CPListElement> duplicateEntries= new ArrayList<CPListElement>();
+    	List<CPListElement> existingEntries= cpProject.getCPListElements();
     	for (int i= 0; i < absolutePaths.length; i++) {
 	        CPListElement newEntry= new CPListElement(javaProject, IClasspathEntry.CPE_LIBRARY, absolutePaths[i], null);
 	        if (existingEntries.contains(newEntry)) {
@@ -209,13 +210,13 @@ public class ClasspathModifier {
 			String message;
 			if (duplicateEntries.size() > 1) {
 				StringBuffer buf= new StringBuffer();
-				for (Iterator iterator= duplicateEntries.iterator(); iterator.hasNext();) {
-	                CPListElement dup= (CPListElement)iterator.next();
+				for (Iterator<CPListElement> iterator= duplicateEntries.iterator(); iterator.hasNext();) {
+	                CPListElement dup= iterator.next();
 	                buf.append('\n').append(BasicElementLabels.getResourceName(dup.getPath().lastSegment()));
                 }
 				message= Messages.format(NewWizardMessages.AddArchiveToBuildpathAction_DuplicateArchivesInfo_message, buf.toString());
 			} else {
-				message= Messages.format(NewWizardMessages.AddArchiveToBuildpathAction_DuplicateArchiveInfo_message, BasicElementLabels.getResourceName(((CPListElement)duplicateEntries.get(0)).getPath().lastSegment()));
+				message= Messages.format(NewWizardMessages.AddArchiveToBuildpathAction_DuplicateArchiveInfo_message, BasicElementLabels.getResourceName(duplicateEntries.get(0).getPath().lastSegment()));
 			}
 			result= new StatusInfo(IStatus.INFO, message);
 		}
@@ -226,8 +227,8 @@ public class ClasspathModifier {
 		cpProject= cpProject.createWorkingCopy();
 		existingEntries= cpProject.getCPListElements();
 
-		for (Iterator iterator= newEntries.iterator(); iterator.hasNext();) {
-            CPListElement newEntry= (CPListElement)iterator.next();
+		for (Iterator<CPListElement> iterator= newEntries.iterator(); iterator.hasNext();) {
+            CPListElement newEntry= iterator.next();
             insertAtEndOfCategory(newEntry, existingEntries);
         }
 
@@ -243,7 +244,7 @@ public class ClasspathModifier {
 
     	IJavaProject javaProject= cpProject.getJavaProject();
 
-    	List existingEntries= cpProject.getCPListElements();
+    	List<CPListElement> existingEntries= cpProject.getCPListElements();
     	for (int i= 0; i < absolutePaths.length; i++) {
 	        CPListElement newEntry= new CPListElement(javaProject, IClasspathEntry.CPE_LIBRARY, absolutePaths[i], null);
 	        if (!existingEntries.contains(newEntry)) {
@@ -252,7 +253,7 @@ public class ClasspathModifier {
 	        }
         }
 
-		result.setNewEntries((CPListElement[])existingEntries.toArray(new CPListElement[existingEntries.size()]));
+		result.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
 		result.setDefaultOutputLocation(cpProject.getDefaultOutputLocation());
 		return result;
     }
@@ -263,7 +264,7 @@ public class ClasspathModifier {
 		IPath projectPath= javaProject.getPath();
         IWorkspaceRoot workspaceRoot= javaProject.getProject().getWorkspace().getRoot();
 
-    	List existingEntries= cpProject.getCPListElements();
+    	List<CPListElement> existingEntries= cpProject.getCPListElements();
 		BuildpathDelta result= new BuildpathDelta(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_RemoveFromCP_tooltip);
 
 		for (int i= 0; i < toRemove.length; i++) {
@@ -283,15 +284,15 @@ public class ClasspathModifier {
         }
 
 		result.setDefaultOutputLocation(cpProject.getDefaultOutputLocation());
-    	result.setNewEntries((CPListElement[])existingEntries.toArray(new CPListElement[existingEntries.size()]));
+    	result.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
 
 	    return result;
     }
 
     private static boolean containsSourceFolders(CPJavaProject cpProject) {
-    	List elements= cpProject.getCPListElements();
-    	for (Iterator iterator= elements.iterator(); iterator.hasNext();) {
-	        CPListElement element= (CPListElement)iterator.next();
+    	List<CPListElement> elements= cpProject.getCPListElements();
+    	for (Iterator<CPListElement> iterator= elements.iterator(); iterator.hasNext();) {
+	        CPListElement element= iterator.next();
 	        if (element.getEntryKind() == IClasspathEntry.CPE_SOURCE)
 	        	return true;
         }
@@ -299,9 +300,9 @@ public class ClasspathModifier {
     }
 
 	private static void include(CPJavaProject cpProject, IPath path) {
-	    List elements= cpProject.getCPListElements();
-	    for (Iterator iterator= elements.iterator(); iterator.hasNext();) {
-	        CPListElement element= (CPListElement)iterator.next();
+	    List<CPListElement> elements= cpProject.getCPListElements();
+	    for (Iterator<CPListElement> iterator= elements.iterator(); iterator.hasNext();) {
+	        CPListElement element= iterator.next();
 	        element.removeFromExclusions(path);
 	    }
     }
@@ -315,9 +316,9 @@ public class ClasspathModifier {
 	 * build path entries of the project
 	 * @throws JavaModelException
 	 */
-	public static List getExistingEntries(IJavaProject project) throws JavaModelException {
+	public static List<CPListElement> getExistingEntries(IJavaProject project) throws JavaModelException {
 		IClasspathEntry[] classpathEntries= project.getRawClasspath();
-		ArrayList newClassPath= new ArrayList();
+		ArrayList<CPListElement> newClassPath= new ArrayList<CPListElement>();
 		for (int i= 0; i < classpathEntries.length; i++) {
 			IClasspathEntry curr= classpathEntries[i];
 			newClassPath.add(CPListElement.createFromExisting(curr, project));
@@ -338,12 +339,12 @@ public class ClasspathModifier {
 	 * the roots own <code>IClasspathEntry</code> converted to a <code>CPListElement</code>.
 	 * @throws JavaModelException
 	 */
-	public static CPListElement getClasspathEntry(List elements, IPackageFragmentRoot root) throws JavaModelException {
+	public static CPListElement getClasspathEntry(List<CPListElement> elements, IPackageFragmentRoot root) throws JavaModelException {
 		IClasspathEntry entry= root.getRawClasspathEntry();
 		for (int i= 0; i < elements.size(); i++) {
-			CPListElement element= (CPListElement) elements.get(i);
+			CPListElement element= elements.get(i);
 			if (element.getPath().equals(root.getPath()) && element.getEntryKind() == entry.getEntryKind())
-				return (CPListElement) elements.get(i);
+				return elements.get(i);
 		}
 		CPListElement newElement= CPListElement.createFromExisting(entry, root.getJavaProject());
 		elements.add(newElement);
@@ -516,7 +517,7 @@ public class ClasspathModifier {
 	}
 
 	/**
-	 * Check wheter the output location of the <code>IPackageFragmentRoot</code>
+	 * Check whether the output location of the <code>IPackageFragmentRoot</code>
 	 * is <code>null</code>. If this holds, then the root
 	 * does use the default output folder.
 	 *
@@ -641,7 +642,7 @@ public class ClasspathModifier {
 	}
 
 	/**
-	 * Check whether the input paramenter of type <code>
+	 * Check whether the input parameter of type <code>
 	 * IPackageFragmentRoot</code> has either it's inclusion or
 	 * exclusion filter or both set (that means they are
 	 * not empty).
@@ -676,7 +677,7 @@ public class ClasspathModifier {
 	 * @throws CoreException
 	 * @throws OperationCanceledException
 	 */
-	public static CPListElement addToClasspath(IResource resource, List existingEntries, List newEntries, IJavaProject project, IProgressMonitor monitor) throws OperationCanceledException, CoreException {
+	public static CPListElement addToClasspath(IResource resource, List<CPListElement> existingEntries, List<CPListElement> newEntries, IJavaProject project, IProgressMonitor monitor) throws OperationCanceledException, CoreException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 		try {
@@ -718,7 +719,7 @@ public class ClasspathModifier {
 	 * @throws CoreException
 	 * @throws OperationCanceledException
 	 */
-	public static CPListElement addToClasspath(IJavaElement javaElement, List existingEntries, List newEntries, IJavaProject project, IProgressMonitor monitor) throws OperationCanceledException, CoreException {
+	public static CPListElement addToClasspath(IJavaElement javaElement, List<CPListElement> existingEntries, List<CPListElement> newEntries, IJavaProject project, IProgressMonitor monitor) throws OperationCanceledException, CoreException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 		try {
@@ -739,7 +740,7 @@ public class ClasspathModifier {
 	 * @param monitor progress monitor, can be <code>null</code>
 	 * @return returns the Java project
 	 */
-	public static IJavaProject removeFromClasspath(IJavaProject project, List existingEntries, IProgressMonitor monitor) {
+	public static IJavaProject removeFromClasspath(IJavaProject project, List<CPListElement> existingEntries, IProgressMonitor monitor) {
 		CPListElement elem= getListElement(project.getPath(), existingEntries);
 		if (elem != null) {
 			existingEntries.remove(elem);
@@ -756,22 +757,22 @@ public class ClasspathModifier {
 	 * entries of the project.
 	 * @return returns a <code>List</code> of <code>CPListElement</code> of modified elements, not null.
 	 */
-	public static List removeFilters(IPath path, IJavaProject project, List existingEntries) {
+	public static List<CPListElement> removeFilters(IPath path, IJavaProject project, List<CPListElement> existingEntries) {
 		if (path == null)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		IPath projPath= project.getPath();
 		if (projPath.isPrefixOf(path)) {
 			path= path.removeFirstSegments(projPath.segmentCount()).addTrailingSeparator();
 		}
 
-		List result= new ArrayList();
-		for (Iterator iter= existingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= (CPListElement)iter.next();
+		List<CPListElement> result= new ArrayList<CPListElement>();
+		for (Iterator<CPListElement> iter= existingEntries.iterator(); iter.hasNext();) {
+			CPListElement element= iter.next();
 			boolean hasChange= false;
 			IPath[] exlusions= (IPath[])element.getAttribute(CPListElement.EXCLUSION);
 			if (exlusions != null) {
-				List exlusionList= new ArrayList(exlusions.length);
+				List<IPath> exlusionList= new ArrayList<IPath>(exlusions.length);
 				for (int i= 0; i < exlusions.length; i++) {
 					if (!exlusions[i].equals(path)) {
 						exlusionList.add(exlusions[i]);
@@ -784,7 +785,7 @@ public class ClasspathModifier {
 
 			IPath[] inclusion= (IPath[])element.getAttribute(CPListElement.INCLUSION);
 			if (inclusion != null) {
-				List inclusionList= new ArrayList(inclusion.length);
+				List<IPath> inclusionList= new ArrayList<IPath>(inclusion.length);
 				for (int i= 0; i < inclusion.length; i++) {
 					if (!inclusion[i].equals(path)) {
 						inclusionList.add(inclusion[i]);
@@ -856,7 +857,7 @@ public class ClasspathModifier {
 	 * @param monitor progress monitor, can be <code>null</code>
 	 * @throws JavaModelException
 	 */
-	public static void exclude(IPath path, List existingEntries, List newEntries, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	public static void exclude(IPath path, List<CPListElement> existingEntries, List<CPListElement> newEntries, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 		try {
@@ -957,7 +958,7 @@ public class ClasspathModifier {
 		try {
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_ResetFilters, 3);
 
-			List exclusionList= getFoldersOnCP(element.getPath(), project, new SubProgressMonitor(monitor, 2));
+			List<Path> exclusionList= getFoldersOnCP(element.getPath(), project, new SubProgressMonitor(monitor, 2));
 			IPath outputLocation= (IPath) entry.getAttribute(CPListElement.OUTPUT);
 			if (outputLocation != null) {
 				IPath[] exclusionPatterns= (IPath[]) entry.getAttribute(CPListElement.EXCLUSION);
@@ -965,7 +966,7 @@ public class ClasspathModifier {
 					exclusionList.add(new Path(completeName(outputLocation.lastSegment())));
 				}
 			}
-			IPath[] exclusions= (IPath[]) exclusionList.toArray(new IPath[exclusionList.size()]);
+			IPath[] exclusions= exclusionList.toArray(new IPath[exclusionList.size()]);
 
 			entry.setAttribute(CPListElement.INCLUSION, new IPath[0]);
 			entry.setAttribute(CPListElement.EXCLUSION, exclusions);
@@ -999,10 +1000,10 @@ public class ClasspathModifier {
 	 * @return the <code>CPListElement</code> found in the list (matching by using the path) or
 	 * the second <code>CPListElement</code> parameter itself if there is no match.
 	 */
-	public static CPListElement getClasspathEntry(List elements, CPListElement cpElement) {
+	public static CPListElement getClasspathEntry(List<CPListElement> elements, CPListElement cpElement) {
 		for (int i= 0; i < elements.size(); i++) {
-			if (((CPListElement) elements.get(i)).getPath().equals(cpElement.getPath()))
-				return (CPListElement) elements.get(i);
+			if (elements.get(i).getPath().equals(cpElement.getPath()))
+				return elements.get(i);
 		}
 		elements.add(cpElement);
 		return cpElement;
@@ -1013,12 +1014,12 @@ public class ClasspathModifier {
 	 *
 	 * @param path the path to found an entry for
 	 * @param elements a list of <code>CPListElement</code>s
-	 * @return the mathed <code>CPListElement</code> or <code>null</code> if
+	 * @return the matched <code>CPListElement</code> or <code>null</code> if
 	 * no match could be found
 	 */
-	public static CPListElement getListElement(IPath path, List elements) {
+	public static CPListElement getListElement(IPath path, List<CPListElement> elements) {
 		for (int i= 0; i < elements.size(); i++) {
-			CPListElement element= (CPListElement) elements.get(i);
+			CPListElement element= elements.get(i);
 			if (element.getEntryKind() == IClasspathEntry.CPE_SOURCE && element.getPath().equals(path)) {
 				return element;
 			}
@@ -1026,7 +1027,7 @@ public class ClasspathModifier {
 		return null;
 	}
 
-	public static void commitClassPath(List newEntries, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	public static void commitClassPath(List<CPListElement> newEntries, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 
@@ -1054,7 +1055,7 @@ public class ClasspathModifier {
 		monitor.beginTask("", 2); //$NON-NLS-1$
 
 		try {
-			List cpListElements= cpProject.getCPListElements();
+			List<CPListElement> cpListElements= cpProject.getCPListElements();
 			IClasspathEntry[] entries= convert(cpListElements);
 			IPath outputLocation= cpProject.getDefaultOutputLocation();
 
@@ -1082,8 +1083,8 @@ public class ClasspathModifier {
 	 * @param project the Java project
 	 * @return a list of elements corresponding to the passed entries.
 	 */
-	public static List getCorrespondingElements(List entries, IJavaProject project) {
-		List result= new ArrayList();
+	public static List<?> getCorrespondingElements(List<?> entries, IJavaProject project) {
+		List<IAdaptable> result= new ArrayList<IAdaptable>();
 		for (int i= 0; i < entries.size(); i++) {
 			Object element= entries.get(i);
 			IPath path;
@@ -1185,14 +1186,14 @@ public class ClasspathModifier {
 			if (!contains(path, paths, new SubProgressMonitor(monitor, 5)))
 				return paths;
 
-			ArrayList newPaths= new ArrayList();
+			ArrayList<IPath> newPaths= new ArrayList<IPath>();
 			for (int i= 0; i < paths.length; i++) {
 				monitor.worked(1);
 				if (!paths[i].equals(path))
 					newPaths.add(paths[i]);
 			}
 
-			return (IPath[]) newPaths.toArray(new IPath[newPaths.size()]);
+			return newPaths.toArray(new IPath[newPaths.size()]);
 		} finally {
 			monitor.done();
 		}
@@ -1217,10 +1218,10 @@ public class ClasspathModifier {
 	 * of <code>path</code> and which are on the build path
 	 * @throws JavaModelException
 	 */
-	private static List getFoldersOnCP(IPath path, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	private static List<Path> getFoldersOnCP(IPath path, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
-		List srcFolders= new ArrayList();
+		List<Path> srcFolders= new ArrayList<Path>();
 		IClasspathEntry[] cpEntries= project.getRawClasspath();
 		for (int i= 0; i < cpEntries.length; i++) {
 			IPath cpPath= cpEntries[i].getPath();
@@ -1246,7 +1247,7 @@ public class ClasspathModifier {
 	}
 
 	/**
-	 * Sets and validates the new entries. Note that the elments of
+	 * Sets and validates the new entries. Note that the elements of
 	 * the list containing the new entries will be added to the list of
 	 * existing entries (therefore, there is no return list for this method).
 	 *
@@ -1256,11 +1257,11 @@ public class ClasspathModifier {
 	 * @param monitor a progress monitor, can be <code>null</code>
 	 * @throws CoreException in case that validation on one of the new entries fails
 	 */
-	public static void setNewEntry(List existingEntries, List newEntries, IJavaProject project, IProgressMonitor monitor) throws CoreException {
+	public static void setNewEntry(List<CPListElement> existingEntries, List<CPListElement> newEntries, IJavaProject project, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_SetNewEntry, existingEntries.size());
 			for (int i= 0; i < newEntries.size(); i++) {
-				CPListElement entry= (CPListElement) newEntries.get(i);
+				CPListElement entry= newEntries.get(i);
 				validateAndAddEntry(entry, existingEntries, project);
 				monitor.worked(1);
 			}
@@ -1277,10 +1278,10 @@ public class ClasspathModifier {
 	 * @return an array containing build path entries
 	 * corresponding to the list
 	 */
-	private static IClasspathEntry[] convert(List list) {
+	private static IClasspathEntry[] convert(List<CPListElement> list) {
 		IClasspathEntry[] entries= new IClasspathEntry[list.size()];
 		for (int i= 0; i < list.size(); i++) {
-			CPListElement element= (CPListElement) list.get(i);
+			CPListElement element= list.get(i);
 			entries[i]= element.getClasspathEntry();
 		}
 		return entries;
@@ -1290,14 +1291,14 @@ public class ClasspathModifier {
 	 * Validate the new entry in the context of the existing entries. Furthermore,
 	 * check if exclusion filters need to be applied and do so if necessary.
 	 *
-	 * If validation was successfull, add the new entry to the list of existing entries.
+	 * If validation was successful, add the new entry to the list of existing entries.
 	 *
 	 * @param entry the entry to be validated and added to the list of existing entries.
 	 * @param existingEntries a list of existing entries representing the build path
 	 * @param project the Java project
 	 * @throws CoreException in case that validation fails
 	 */
-	private static void validateAndAddEntry(CPListElement entry, List existingEntries, IJavaProject project) throws CoreException {
+	private static void validateAndAddEntry(CPListElement entry, List<CPListElement> existingEntries, IJavaProject project) throws CoreException {
 		IPath path= entry.getPath();
 		IPath projPath= project.getProject().getFullPath();
 		IWorkspaceRoot workspaceRoot= ResourcesPlugin.getWorkspace().getRoot();
@@ -1329,7 +1330,7 @@ public class ClasspathModifier {
 			}
 
 			for (int i= 0; i < existingEntries.size(); i++) {
-				CPListElement curr= (CPListElement) existingEntries.get(i);
+				CPListElement curr= existingEntries.get(i);
 				if (curr.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 					if (path.equals(curr.getPath()) && !project.getPath().equals(path)) {
 						rootStatus.setError(NewWizardMessages.NewSourceFolderWizardPage_error_AlreadyExisting);
@@ -1339,7 +1340,7 @@ public class ClasspathModifier {
 			}
 
 			if (!isExternal && !entry.getPath().equals(project.getPath()))
-				exclude(entry.getPath(), existingEntries, new ArrayList(), project, null);
+				exclude(entry.getPath(), existingEntries, new ArrayList<CPListElement>(), project, null);
 
 			IPath outputLocation= project.getOutputLocation();
 			insertAtEndOfCategory(entry, existingEntries);
@@ -1373,9 +1374,9 @@ public class ClasspathModifier {
 		}
 	}
 
-	private static void insertAtEndOfCategory(CPListElement entry, List existingEntries) {
+	private static void insertAtEndOfCategory(CPListElement entry, List<CPListElement> existingEntries) {
 		int length= existingEntries.size();
-		CPListElement[] elements= (CPListElement[])existingEntries.toArray(new CPListElement[length]);
+		CPListElement[] elements= existingEntries.toArray(new CPListElement[length]);
 		int i= 0;
 		while (i < length && elements[i].getClasspathEntry().getEntryKind() != entry.getClasspathEntry().getEntryKind()) {
 			i++;
@@ -1432,9 +1433,10 @@ public class ClasspathModifier {
 		return entry.getEntryKind() == kind;
 	}
 
-	public static OutputFolderValidator getValidator(final List newElements, final IJavaProject project) throws JavaModelException {
+	public static OutputFolderValidator getValidator(final List<?> newElements, final IJavaProject project) throws JavaModelException {
 		return new OutputFolderValidator(newElements, project) {
 
+			@Override
 			public boolean validate(IPath outputLocation) {
 				for (int i= 0; i < newElements.size(); i++) {
 					if (isInvalid(newElements.get(i), outputLocation))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java
index 2b55998..0ddba8e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,6 @@ import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
@@ -39,6 +38,7 @@ import org.eclipse.jdt.core.search.SearchEngine;
 import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.util.StringMatcher;
 
 public class CallHierarchy {
@@ -71,7 +71,7 @@ public class CallHierarchy {
         settings.setValue(PREF_USE_IMPLEMENTORS, enabled);
     }
 
-    public Collection getImplementingMethods(IMethod method) {
+    public Collection<IJavaElement> getImplementingMethods(IMethod method) {
         if (isSearchUsingImplementorsEnabled()) {
             IJavaElement[] result = Implementors.getInstance().searchForImplementors(new IJavaElement[] {
                         method
@@ -82,10 +82,10 @@ public class CallHierarchy {
             }
         }
 
-        return new ArrayList(0);
+        return new ArrayList<IJavaElement>(0);
     }
 
-    public Collection getInterfaceMethods(IMethod method) {
+    public Collection<IJavaElement> getInterfaceMethods(IMethod method) {
         if (isSearchUsingImplementorsEnabled()) {
             IJavaElement[] result = Implementors.getInstance().searchForInterfaces(new IJavaElement[] {
                         method
@@ -96,7 +96,7 @@ public class CallHierarchy {
             }
         }
 
-        return new ArrayList(0);
+        return new ArrayList<IJavaElement>(0);
     }
 
     public MethodWrapper[] getCallerRoots(IMember[] members) {
@@ -108,7 +108,7 @@ public class CallHierarchy {
     }
 
 	private MethodWrapper[] getRoots(IMember[] members, boolean callers) {
-		ArrayList roots= new ArrayList();
+		ArrayList<MethodWrapper> roots= new ArrayList<MethodWrapper>();
     	for (int i= 0; i < members.length; i++) {
 			IMember member= members[i];
 			if (member instanceof IType) {
@@ -134,10 +134,10 @@ public class CallHierarchy {
 				addRoot(member, roots, callers);
 			}
 		}
-    	return (MethodWrapper[]) roots.toArray(new MethodWrapper[roots.size()]);
+    	return roots.toArray(new MethodWrapper[roots.size()]);
 	}
 
-	private void addRoot(IMember member, ArrayList roots, boolean callers) {
+	private void addRoot(IMember member, ArrayList<MethodWrapper> roots, boolean callers) {
 		MethodCall methodCall= new MethodCall(member);
 		MethodWrapper root;
 		if (callers) {
@@ -252,10 +252,10 @@ public class CallHierarchy {
         return fFilters;
     }
 
-    public static boolean arePossibleInputElements(List elements) {
+    public static boolean arePossibleInputElements(List<?> elements) {
 		if (elements.size() < 1)
 			return false;
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			if (! isPossibleInputElement(iter.next()))
 				return false;
 		}
@@ -269,7 +269,7 @@ public class CallHierarchy {
 	 * @return an array of {@link StringMatcher} objects
 	 */
     private static StringMatcher[] parseList(String listString) {
-        List list = new ArrayList(10);
+        List<StringMatcher> list = new ArrayList<StringMatcher>(10);
         StringTokenizer tokenizer = new StringTokenizer(listString, ","); //$NON-NLS-1$
 
         while (tokenizer.hasMoreTokens()) {
@@ -277,14 +277,14 @@ public class CallHierarchy {
             list.add(new StringMatcher(textFilter, false, false));
         }
 
-        return (StringMatcher[]) list.toArray(new StringMatcher[list.size()]);
+        return list.toArray(new StringMatcher[list.size()]);
     }
 
     static CompilationUnit getCompilationUnitNode(IMember member, boolean resolveBindings) {
     	ITypeRoot typeRoot= member.getTypeRoot();
         try {
 	    	if (typeRoot.exists() && typeRoot.getBuffer() != null) {
-				ASTParser parser= ASTParser.newParser(AST.JLS3);
+				ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				parser.setSource(typeRoot);
 				parser.setResolveBindings(resolveBindings);
 				return (CompilationUnit) parser.createAST(null);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallLocation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallLocation.java
index 432db4d..175a9f2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallLocation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallLocation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -119,7 +119,8 @@ public class CallLocation implements IAdaptable {
         return buffer;
     }
 
-    public String toString() {
+    @Override
+	public String toString() {
         return getCallText();
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java
index 85d261f..5babe94 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@ class CallSearchResultCollector {
     /**
      * A map from handle identifier ({@link String}) to {@link MethodCall}.
      */
-    private Map fCalledMembers;
+    private Map<String, MethodCall> fCalledMembers;
 
     public CallSearchResultCollector() {
         this.fCalledMembers = createCalledMethodsData();
@@ -31,7 +31,7 @@ class CallSearchResultCollector {
     /**
      * @return a map from handle identifier ({@link String}) to {@link MethodCall}
      */
-    public Map getCallers() {
+    public Map<String, MethodCall> getCallers() {
         return fCalledMembers;
     }
 
@@ -42,7 +42,7 @@ class CallSearchResultCollector {
     protected void addMember(IMember member, IMember calledMember, int start, int end, int lineNumber) {
         if ((member != null) && (calledMember != null)) {
             if (!isIgnored(calledMember)) {
-                MethodCall methodCall = (MethodCall) fCalledMembers.get(calledMember.getHandleIdentifier());
+                MethodCall methodCall = fCalledMembers.get(calledMember.getHandleIdentifier());
 
                 if (methodCall == null) {
                     methodCall = new MethodCall(calledMember);
@@ -55,8 +55,8 @@ class CallSearchResultCollector {
         }
     }
 
-    protected Map createCalledMethodsData() {
-        return new HashMap();
+    protected Map<String, MethodCall> createCalledMethodsData() {
+        return new HashMap<String, MethodCall>();
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeAnalyzerVisitor.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeAnalyzerVisitor.java
index c9a8f04..1ea7de2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeAnalyzerVisitor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeAnalyzerVisitor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.Map;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 
+import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.ISourceRange;
@@ -71,14 +72,15 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
     /**
      * @return a map from handle identifier ({@link String}) to {@link MethodCall}
      */
-    public Map getCallees() {
+    public Map<String, MethodCall> getCallees() {
         return fSearchResults.getCallers();
     }
 
     /* (non-Javadoc)
      * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ClassInstanceCreation)
      */
-    public boolean visit(ClassInstanceCreation node) {
+    @Override
+	public boolean visit(ClassInstanceCreation node) {
         progressMonitorWorked(1);
         if (!isFurtherTraversalNecessary(node)) {
             return false;
@@ -98,7 +100,8 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
      *
      * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConstructorInvocation)
      */
-    public boolean visit(ConstructorInvocation node) {
+    @Override
+	public boolean visit(ConstructorInvocation node) {
         progressMonitorWorked(1);
         if (!isFurtherTraversalNecessary(node)) {
             return false;
@@ -114,16 +117,17 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
     /**
      * @see HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.AbstractTypeDeclaration)
      */
-    public boolean visit(AbstractTypeDeclaration node) {
+    @Override
+	public boolean visit(AbstractTypeDeclaration node) {
     	progressMonitorWorked(1);
     	if (!isFurtherTraversalNecessary(node)) {
     		return false;
     	}
 
     	if (isNodeWithinMethod(node)) {
-    		List bodyDeclarations= node.bodyDeclarations();
-    		for (Iterator iter= bodyDeclarations.iterator(); iter.hasNext(); ) {
-				BodyDeclaration bodyDeclaration= (BodyDeclaration) iter.next();
+    		List<BodyDeclaration> bodyDeclarations= node.bodyDeclarations();
+    		for (Iterator<BodyDeclaration> iter= bodyDeclarations.iterator(); iter.hasNext(); ) {
+				BodyDeclaration bodyDeclaration= iter.next();
 				if (bodyDeclaration instanceof MethodDeclaration) {
 					MethodDeclaration child= (MethodDeclaration) bodyDeclaration;
 					if (child.isConstructor()) {
@@ -140,7 +144,8 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
     /**
      * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodDeclaration)
      */
-    public boolean visit(MethodDeclaration node) {
+    @Override
+	public boolean visit(MethodDeclaration node) {
         progressMonitorWorked(1);
         return isFurtherTraversalNecessary(node);
     }
@@ -152,7 +157,8 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
      *
      * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodInvocation)
      */
-    public boolean visit(MethodInvocation node) {
+    @Override
+	public boolean visit(MethodInvocation node) {
         progressMonitorWorked(1);
         if (!isFurtherTraversalNecessary(node)) {
             return false;
@@ -173,7 +179,8 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
      *
      * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperConstructorInvocation)
      */
-    public boolean visit(SuperConstructorInvocation node) {
+    @Override
+	public boolean visit(SuperConstructorInvocation node) {
         progressMonitorWorked(1);
         if (!isFurtherTraversalNecessary(node)) {
             return false;
@@ -195,7 +202,8 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
      *
      * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodInvocation)
      */
-    public boolean visit(SuperMethodInvocation node) {
+    @Override
+	public boolean visit(SuperMethodInvocation node) {
         progressMonitorWorked(1);
         if (!isFurtherTraversalNecessary(node)) {
             return false;
@@ -214,7 +222,8 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
      *
      * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AnonymousClassDeclaration)
      */
-    public boolean visit(AnonymousClassDeclaration node) {
+    @Override
+	public boolean visit(AnonymousClassDeclaration node) {
         return isNodeEnclosingMethod(node);
     }
 
@@ -325,7 +334,7 @@ class CalleeAnalyzerVisitor extends HierarchicalASTVisitor {
     }
 
     private IMethod findImplementingMethods(IMethod calledMethod) {
-        Collection implementingMethods = CallHierarchy.getDefault()
+        Collection<IJavaElement> implementingMethods = CallHierarchy.getDefault()
                                                         .getImplementingMethods(calledMethod);
 
         if ((implementingMethods.size() == 0) || (implementingMethods.size() > 1)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeMethodWrapper.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeMethodWrapper.java
index d384ea1..e5d76e3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeMethodWrapper.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CalleeMethodWrapper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,16 +22,13 @@ import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 
 class CalleeMethodWrapper extends MethodWrapper {
-    private Comparator fMethodWrapperComparator = new MethodWrapperComparator();
+    private Comparator<MethodWrapper> fMethodWrapperComparator = new MethodWrapperComparator();
 
-    private static class MethodWrapperComparator implements Comparator {
+    private static class MethodWrapperComparator implements Comparator<MethodWrapper> {
         /* (non-Javadoc)
          * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
          */
-        public int compare(Object o1, Object o2) {
-            MethodWrapper m1 = (MethodWrapper) o1;
-            MethodWrapper m2 = (MethodWrapper) o2;
-
+        public int compare(MethodWrapper m1, MethodWrapper m2) {
             CallLocation callLocation1 = m1.getMethodCall().getFirstCallLocation();
             CallLocation callLocation2 = m2.getMethodCall().getFirstCallLocation();
 
@@ -54,7 +51,8 @@ class CalleeMethodWrapper extends MethodWrapper {
 	/* Returns the calls sorted after the call location
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#getCalls()
      */
-    public MethodWrapper[] getCalls(IProgressMonitor progressMonitor) {
+    @Override
+	public MethodWrapper[] getCalls(IProgressMonitor progressMonitor) {
         MethodWrapper[] result = super.getCalls(progressMonitor);
         Arrays.sort(result, fMethodWrapperComparator);
 
@@ -64,21 +62,24 @@ class CalleeMethodWrapper extends MethodWrapper {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#getTaskName()
      */
-    protected String getTaskName() {
+    @Override
+	protected String getTaskName() {
         return CallHierarchyMessages.CalleeMethodWrapper_taskname;
     }
 
 	/*
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#createMethodWrapper(org.eclipse.jdt.internal.corext.callhierarchy.MethodCall)
      */
-    protected MethodWrapper createMethodWrapper(MethodCall methodCall) {
+    @Override
+	protected MethodWrapper createMethodWrapper(MethodCall methodCall) {
         return new CalleeMethodWrapper(this, methodCall);
     }
 
     /*
      * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#canHaveChildren()
      */
-    public boolean canHaveChildren() {
+    @Override
+	public boolean canHaveChildren() {
     	return true;
     }
 
@@ -86,7 +87,8 @@ class CalleeMethodWrapper extends MethodWrapper {
      * Find callees called from the current method.
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#findChildren(org.eclipse.core.runtime.IProgressMonitor)
      */
-    protected Map findChildren(IProgressMonitor progressMonitor) {
+    @Override
+	protected Map<String, MethodCall> findChildren(IProgressMonitor progressMonitor) {
     	IMember member= getMember();
 		if (member.exists()) {
 			CompilationUnit cu= CallHierarchy.getCompilationUnitNode(member, true);
@@ -101,6 +103,6 @@ class CalleeMethodWrapper extends MethodWrapper {
 				return visitor.getCallees();
 			}
 		}
-        return new HashMap(0);
+        return new HashMap<String, MethodCall>(0);
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java
index 74718c2..bceeb2b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,13 +64,15 @@ public class CallerMethodWrapper extends MethodWrapper {
         return CallHierarchy.getDefault().getSearchScope();
     }
 
-    protected String getTaskName() {
+    @Override
+	protected String getTaskName() {
         return CallHierarchyMessages.CallerMethodWrapper_taskname;
     }
 
     /* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#createMethodWrapper(org.eclipse.jdt.internal.corext.callhierarchy.MethodCall)
 	 */
+	@Override
 	public MethodWrapper createMethodWrapper(MethodCall methodCall) {
         return new CallerMethodWrapper(this, methodCall);
     }
@@ -78,6 +80,7 @@ public class CallerMethodWrapper extends MethodWrapper {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#canHaveChildren()
 	 */
+	@Override
 	public boolean canHaveChildren() {
 		IMember member= getMember();
 		if (member instanceof IField) {
@@ -93,7 +96,8 @@ public class CallerMethodWrapper extends MethodWrapper {
 	 * @return The result of the search for children
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#findChildren(org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	protected Map findChildren(IProgressMonitor progressMonitor) {
+	@Override
+	protected Map<String, MethodCall> findChildren(IProgressMonitor progressMonitor) {
 		try {
 
 			IProgressMonitor monitor= new SubProgressMonitor(progressMonitor, 95, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
@@ -140,7 +144,7 @@ public class CallerMethodWrapper extends MethodWrapper {
 				pattern= SearchPattern.createPattern(member, limitTo, SearchUtils.GENERICS_AGNOSTIC_MATCH_RULE);
 			}
 			if (pattern == null) { // e.g. for initializers
-				return new HashMap(0);
+				return new HashMap<String, MethodCall>(0);
 			}
 
 			SearchEngine searchEngine= new SearchEngine();
@@ -154,7 +158,7 @@ public class CallerMethodWrapper extends MethodWrapper {
 
 		} catch (CoreException e) {
 			JavaPlugin.log(e);
-			return new HashMap(0);
+			return new HashMap<String, MethodCall>(0);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/IImplementorFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/IImplementorFinder.java
index 1540d63..8d8864a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/IImplementorFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/IImplementorFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,11 +22,11 @@ public interface IImplementorFinder {
     /**
      * Find implementors of the specified IType instance.
      */
-    public abstract Collection findImplementingTypes(IType type,
+    public abstract Collection<IType> findImplementingTypes(IType type,
         IProgressMonitor progressMonitor);
 
     /**
      * Find interfaces which are implemented by the specified IType instance.
      */
-    public abstract Collection findInterfaces(IType type, IProgressMonitor progressMonitor);
+    public abstract Collection<IType> findInterfaces(IType type, IProgressMonitor progressMonitor);
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/Implementors.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/Implementors.java
index b7f733b..cd53e62 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/Implementors.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/Implementors.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,12 +122,12 @@ public class Implementors {
     }
 
     private IType[] findImplementingTypes(IType type, IProgressMonitor progressMonitor) {
-        Collection implementingTypes = new ArrayList();
+        Collection<IType> implementingTypes = new ArrayList<IType>();
 
         IImplementorFinder[] finders = getImplementorFinders();
 
         for (int i = 0; (i < finders.length) && !progressMonitor.isCanceled(); i++) {
-            Collection types = finders[i].findImplementingTypes(type,
+            Collection<IType> types = finders[i].findImplementingTypes(type,
                     new SubProgressMonitor(progressMonitor, 10,
                         SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
 
@@ -136,16 +136,16 @@ public class Implementors {
             }
         }
 
-        return (IType[]) implementingTypes.toArray(new IType[implementingTypes.size()]);
+        return implementingTypes.toArray(new IType[implementingTypes.size()]);
     }
 
     private IType[] findInterfaces(IType type, IProgressMonitor progressMonitor) {
-        Collection interfaces = new ArrayList();
+        Collection<IType> interfaces = new ArrayList<IType>();
 
         IImplementorFinder[] finders = getImplementorFinders();
 
         for (int i = 0; (i < finders.length) && !progressMonitor.isCanceled(); i++) {
-            Collection types = finders[i].findInterfaces(type,
+            Collection<IType> types = finders[i].findInterfaces(type,
                     new SubProgressMonitor(progressMonitor, 10,
                         SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
 
@@ -154,7 +154,7 @@ public class Implementors {
             }
         }
 
-        return (IType[]) interfaces.toArray(new IType[interfaces.size()]);
+        return interfaces.toArray(new IType[interfaces.size()]);
     }
 
     /**
@@ -168,7 +168,7 @@ public class Implementors {
      */
     private IJavaElement[] findMethods(IMethod method, IType[] types,
         IProgressMonitor progressMonitor) {
-        Collection foundMethods = new ArrayList();
+        Collection<IMethod> foundMethods = new ArrayList<IMethod>();
 
         SubProgressMonitor subProgressMonitor = new SubProgressMonitor(progressMonitor,
                 10, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
@@ -191,6 +191,6 @@ public class Implementors {
             subProgressMonitor.done();
         }
 
-        return (IJavaElement[]) foundMethods.toArray(new IJavaElement[foundMethods.size()]);
+        return foundMethods.toArray(new IJavaElement[foundMethods.size()]);
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/JavaImplementorFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/JavaImplementorFinder.java
index 9a64579..fa47e4f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/JavaImplementorFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/JavaImplementorFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,14 +27,14 @@ public class JavaImplementorFinder implements IImplementorFinder {
     /* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.IImplementorFinder#findImplementingTypes(org.eclipse.jdt.core.IType, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public Collection findImplementingTypes(IType type, IProgressMonitor progressMonitor) {
+	public Collection<IType> findImplementingTypes(IType type, IProgressMonitor progressMonitor) {
         ITypeHierarchy typeHierarchy;
 
         try {
             typeHierarchy = type.newTypeHierarchy(progressMonitor);
 
             IType[] implementingTypes = typeHierarchy.getAllClasses();
-            HashSet result = new HashSet(Arrays.asList(implementingTypes));
+            HashSet<IType> result = new HashSet<IType>(Arrays.asList(implementingTypes));
 
             return result;
         } catch (JavaModelException e) {
@@ -47,14 +47,14 @@ public class JavaImplementorFinder implements IImplementorFinder {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.callhierarchy.IImplementorFinder#findInterfaces(org.eclipse.jdt.core.IType, org.eclipse.core.runtime.IProgressMonitor)
      */
-    public Collection findInterfaces(IType type, IProgressMonitor progressMonitor) {
+    public Collection<IType> findInterfaces(IType type, IProgressMonitor progressMonitor) {
         ITypeHierarchy typeHierarchy;
 
         try {
             typeHierarchy = type.newSupertypeHierarchy(progressMonitor);
 
             IType[] interfaces = typeHierarchy.getAllSuperInterfaces(type);
-            HashSet result = new HashSet(Arrays.asList(interfaces));
+            HashSet<IType> result = new HashSet<IType>(Arrays.asList(interfaces));
 
             return result;
         } catch (JavaModelException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodCall.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodCall.java
index 78f5af1..b217630 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodCall.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodCall.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@ import org.eclipse.jdt.core.IMember;
 
 public class MethodCall {
     private IMember fMember;
-    private List fCallLocations;
+    private List<CallLocation> fCallLocations;
 
     /**
      * @param enclosingElement
@@ -31,13 +31,13 @@ public class MethodCall {
     /**
      *
      */
-    public Collection getCallLocations() {
+    public Collection<CallLocation> getCallLocations() {
         return fCallLocations;
     }
 
     public CallLocation getFirstCallLocation() {
         if ((fCallLocations != null) && !fCallLocations.isEmpty()) {
-            return (CallLocation) fCallLocations.get(0);
+            return fCallLocations.get(0);
         } else {
             return null;
         }
@@ -50,7 +50,7 @@ public class MethodCall {
     /**
      * @return Object
      */
-    public Object getKey() {
+    public String getKey() {
         return getMember().getHandleIdentifier();
     }
 
@@ -66,7 +66,7 @@ public class MethodCall {
      */
     public void addCallLocation(CallLocation location) {
         if (fCallLocations == null) {
-            fCallLocations = new ArrayList();
+            fCallLocations = new ArrayList<CallLocation>();
         }
 
         fCallLocations.add(location);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodReferencesSearchRequestor.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodReferencesSearchRequestor.java
index eb390e9..5945fab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodReferencesSearchRequestor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodReferencesSearchRequestor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,14 +26,15 @@ class MethodReferencesSearchRequestor extends SearchRequestor {
         fSearchResults = new CallSearchResultCollector();
     }
 
-    public Map getCallers() {
+    public Map<String, MethodCall> getCallers() {
         return fSearchResults.getCallers();
     }
 
     /* (non-Javadoc)
      * @see org.eclipse.jdt.core.search.SearchRequestor#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)
      */
-    public void acceptSearchMatch(SearchMatch match) {
+    @Override
+	public void acceptSearchMatch(SearchMatch match) {
         if (fRequireExactMatch && (match.getAccuracy() != SearchMatch.A_ACCURATE)) {
             return;
         }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodWrapper.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodWrapper.java
index 5310540..fc5cad4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodWrapper.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/MethodWrapper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,14 +36,14 @@ import org.eclipse.jdt.internal.ui.callhierarchy.MethodWrapperWorkbenchAdapter;
  *
  */
 public abstract class MethodWrapper extends PlatformObject {
-    private Map fElements = null;
+    private Map<String, MethodCall> fElements = null;
 
     /*
      * A cache of previously found methods. This cache should be searched
      * before adding a "new" method object reference to the list of elements.
      * This way previously found methods won't be searched again.
      */
-    private Map fMethodCache;
+    private Map<String, Map<String, MethodCall>> fMethodCache;
     private final MethodCall fMethodCall;
     private final MethodWrapper fParent;
     private int fLevel;
@@ -57,7 +57,7 @@ public abstract class MethodWrapper extends PlatformObject {
         Assert.isNotNull(methodCall);
 
         if (parent == null) {
-            setMethodCache(new HashMap());
+            setMethodCache(new HashMap<String, Map<String, MethodCall>>());
             fLevel = 1;
         } else {
             setMethodCache(parent.getMethodCache());
@@ -68,7 +68,8 @@ public abstract class MethodWrapper extends PlatformObject {
         this.fParent = parent;
     }
 
-    public Object getAdapter(Class adapter) {
+    @Override
+	public Object getAdapter(Class adapter) {
 		if (adapter == IJavaElement.class) {
 	        return getMember();
 	    } else if (adapter == IWorkbenchAdapter.class){
@@ -86,7 +87,7 @@ public abstract class MethodWrapper extends PlatformObject {
         MethodWrapper[] result = new MethodWrapper[fElements.size()];
         int i = 0;
 
-        for (Iterator iter = fElements.keySet().iterator(); iter.hasNext();) {
+        for (Iterator<String> iter = fElements.keySet().iterator(); iter.hasNext();) {
             MethodCall methodCall = getMethodCallFromMap(fElements, iter.next());
             result[i++] = createMethodWrapper(methodCall);
         }
@@ -135,7 +136,8 @@ public abstract class MethodWrapper extends PlatformObject {
 		fFieldSearchMode= fieldSearchMode;
 	}
 
-    public boolean equals(Object oth) {
+    @Override
+	public boolean equals(Object oth) {
         if (this == oth) {
             return true;
         }
@@ -178,7 +180,8 @@ public abstract class MethodWrapper extends PlatformObject {
         return true;
     }
 
-    public int hashCode() {
+    @Override
+	public int hashCode() {
         final int PRIME = 1000003;
         int result = 0;
 
@@ -193,14 +196,14 @@ public abstract class MethodWrapper extends PlatformObject {
         return result;
     }
 
-    private void setMethodCache(Map methodCache) {
+    private void setMethodCache(Map<String, Map<String, MethodCall>> methodCache) {
         fMethodCache = methodCache;
     }
 
     protected abstract String getTaskName();
 
     private void addCallToCache(MethodCall methodCall) {
-        Map cachedCalls = lookupMethod(this.getMethodCall());
+        Map<String, MethodCall> cachedCalls = lookupMethod(this.getMethodCall());
         cachedCalls.put(methodCall.getKey(), methodCall);
     }
 
@@ -213,10 +216,10 @@ public abstract class MethodWrapper extends PlatformObject {
     protected abstract MethodWrapper createMethodWrapper(MethodCall methodCall);
 
     private void doFindChildren(IProgressMonitor progressMonitor) {
-        Map existingResults = lookupMethod(getMethodCall());
+        Map<String, MethodCall> existingResults = lookupMethod(getMethodCall());
 
         if (existingResults != null && !existingResults.isEmpty()) {
-            fElements = new HashMap();
+            fElements = new HashMap<String, MethodCall>();
             fElements.putAll(existingResults);
         } else {
             initCalls();
@@ -273,14 +276,14 @@ public abstract class MethodWrapper extends PlatformObject {
      *
      * @return a map from handle identifier ({@link String}) to {@link MethodCall}
      */
-    protected abstract Map findChildren(IProgressMonitor progressMonitor);
+    protected abstract Map<String, MethodCall> findChildren(IProgressMonitor progressMonitor);
 
-    private Map getMethodCache() {
+    private Map<String, Map<String, MethodCall>> getMethodCache() {
         return fMethodCache;
     }
 
     private void initCalls() {
-        this.fElements = new HashMap();
+        this.fElements = new HashMap<String, MethodCall>();
 
         initCacheForMethod();
     }
@@ -290,14 +293,14 @@ public abstract class MethodWrapper extends PlatformObject {
      * @param methodCall the method call
      * @return the List of previously found search results
      */
-    private Map lookupMethod(MethodCall methodCall) {
-        return (Map) getMethodCache().get(methodCall.getKey());
+    private Map<String, MethodCall> lookupMethod(MethodCall methodCall) {
+        return getMethodCache().get(methodCall.getKey());
     }
 
     private void performSearch(IProgressMonitor progressMonitor) {
         fElements = findChildren(progressMonitor);
 
-        for (Iterator iter = fElements.keySet().iterator(); iter.hasNext();) {
+        for (Iterator<String> iter = fElements.keySet().iterator(); iter.hasNext();) {
             checkCanceled(progressMonitor);
 
             MethodCall methodCall = getMethodCallFromMap(fElements, iter.next());
@@ -305,12 +308,12 @@ public abstract class MethodWrapper extends PlatformObject {
         }
     }
 
-    private MethodCall getMethodCallFromMap(Map elements, Object key) {
-        return (MethodCall) elements.get(key);
+    private MethodCall getMethodCallFromMap(Map<String, MethodCall> elements, String key) {
+        return elements.get(key);
     }
 
     private void initCacheForMethod() {
-        Map cachedCalls = new HashMap();
+        Map<String, MethodCall> cachedCalls = new HashMap<String, MethodCall>();
         getMethodCache().put(this.getMethodCall().getKey(), cachedCalls);
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java
index a793782..15ee375 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ package org.eclipse.jdt.internal.corext.callhierarchy;
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#canHaveChildren()
 		 */
+		@Override
 		public boolean canHaveChildren() {
 			return true;
 	}
@@ -37,6 +38,7 @@ package org.eclipse.jdt.internal.corext.callhierarchy;
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper#isRecursive()
 		 */
+		@Override
 		public boolean isRecursive() {
 			return false;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java
index 6286873..8325113 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,7 +73,7 @@ public final class AddDelegateMethodsOperation implements IWorkspaceRunnable {
 	private boolean fApply= true;
 
 	/** The method binding keys for which a method was generated */
-	private final List fCreated= new ArrayList();
+	private final List<IMethodBinding> fCreated= new ArrayList<IMethodBinding>();
 
 	/** The resulting text edit */
 	private TextEdit fResultingEdit= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java
index c9b5c42..3c811c7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -314,9 +314,9 @@ public final class AddGetterSetterOperation implements IWorkspaceRunnable {
 
 			fSkipAllExisting= (fSkipExistingQuery == null);
 			
-			Set accessors = new HashSet(Arrays.asList(fAccessorFields));
-			Set getters = new HashSet(Arrays.asList(fGetterFields));
-			Set setters= new HashSet(Arrays.asList(fSetterFields));
+			Set<IField> accessors = new HashSet<IField>(Arrays.asList(fAccessorFields));
+			Set<IField> getters = new HashSet<IField>(Arrays.asList(fGetterFields));
+			Set<IField> setters= new HashSet<IField>(Arrays.asList(fSetterFields));
 			IField[] fields= fType.getFields(); // generate methods in order of field declarations
 			if (!fSort) {
 				for (int i= 0; i < fields.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java
index 5a072bc..33b0512 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -426,21 +426,21 @@ public class AddImportsOperation implements IWorkspaceRunnable {
 			typeKinds= ASTResolving.getPossibleTypeKinds(nameNode, is50OrHigher);
 		}
 
-		ArrayList typeInfos= new ArrayList();
+		ArrayList<TypeNameMatch> typeInfos= new ArrayList<TypeNameMatch>();
 		TypeNameMatchCollector requestor= new TypeNameMatchCollector(typeInfos);
 		int matchMode= SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE;
 		new SearchEngine().searchAllTypeNames(null, matchMode, simpleTypeName.toCharArray(), matchMode, getSearchForConstant(typeKinds), searchScope, requestor, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, monitor);
 
-		ArrayList typeRefsFound= new ArrayList(typeInfos.size());
+		ArrayList<TypeNameMatch> typeRefsFound= new ArrayList<TypeNameMatch>(typeInfos.size());
 		for (int i= 0, len= typeInfos.size(); i < len; i++) {
-			TypeNameMatch curr= (TypeNameMatch) typeInfos.get(i);
+			TypeNameMatch curr= typeInfos.get(i);
 			if (curr.getPackageName().length() > 0) { // do not suggest imports from the default package
 				if (isOfKind(curr, typeKinds, is50OrHigher) && isVisible(curr)) {
 					typeRefsFound.add(curr);
 				}
 			}
 		}
-		return (TypeNameMatch[]) typeRefsFound.toArray(new TypeNameMatch[typeRefsFound.size()]);
+		return typeRefsFound.toArray(new TypeNameMatch[typeRefsFound.size()]);
 	}
 
 	private boolean isOfKind(TypeNameMatch curr, int typeKinds, boolean is50OrHigher) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedConstructorsOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedConstructorsOperation.java
index 441f17d..c236c87 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedConstructorsOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedConstructorsOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,8 +38,8 @@ import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 
@@ -59,7 +59,7 @@ public final class AddUnimplementedConstructorsOperation implements IWorkspaceRu
 	private String[] fCreatedImports;
 
 	/** The method binding keys for which a constructor was generated */
-	private final List fCreatedMethods= new ArrayList();
+	private final List<String> fCreatedMethods= new ArrayList<String>();
 
 	/** Should the import edits be applied? */
 	private final boolean fImports;
@@ -277,7 +277,7 @@ public final class AddUnimplementedConstructorsOperation implements IWorkspaceRu
 
 	private ASTNode getNodeToInsertBefore(ListRewrite rewriter) {
 		if (fInsertPos != -1) {
-			List members= rewriter.getOriginalList();
+			List<?> members= rewriter.getOriginalList();
 			for (int i= 0; i < members.size(); i++) {
 				ASTNode curr= (ASTNode) members.get(i);
 				if (curr.getStartPosition() >= fInsertPos) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java
index 1f00386..24511af 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,8 +39,8 @@ import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.MethodsSourcePositionComparator;
@@ -61,7 +61,7 @@ public final class AddUnimplementedMethodsOperation implements IWorkspaceRunnabl
 	private String[] fCreatedImports;
 
 	/** The method binding keys for which a method was generated */
-	private final List fCreatedMethods= new ArrayList();
+	private final List<String> fCreatedMethods= new ArrayList<String>();
 
 	/** Should the import edits be applied? */
 	private final boolean fImports;
@@ -238,7 +238,7 @@ public final class AddUnimplementedMethodsOperation implements IWorkspaceRunnabl
 
 	private ASTNode getNodeToInsertBefore(ListRewrite rewriter) {
 		if (fInsertPos != -1) {
-			List members= rewriter.getOriginalList();
+			List<?> members= rewriter.getOriginalList();
 			for (int i= 0; i < members.size(); i++) {
 				ASTNode curr= (ASTNode) members.get(i);
 				if (curr.getStartPosition() >= fInsertPos) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java
index c5f2931..e72151e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
 
@@ -76,6 +77,7 @@ public class ContextSensitiveImportRewriteContext extends ImportRewriteContext {
 		fImportedNames= null;
 	}
 
+	@Override
 	public int findInContext(String qualifier, String name, int kind) {
 		IBinding[] declarationsInScope= getDeclarationsInScope();
 		for (int i= 0; i < declarationsInScope.length; i++) {
@@ -105,9 +107,9 @@ public class ContextSensitiveImportRewriteContext extends ImportRewriteContext {
 			}
 		}
 
-		List list= fCompilationUnit.types();
-		for (Iterator iter= list.iterator(); iter.hasNext();) {
-			AbstractTypeDeclaration type= (AbstractTypeDeclaration)iter.next();
+		List<AbstractTypeDeclaration> list= fCompilationUnit.types();
+		for (Iterator<AbstractTypeDeclaration> iter= list.iterator(); iter.hasNext();) {
+			AbstractTypeDeclaration type= iter.next();
 			ITypeBinding binding= type.resolveBinding();
 			if (binding != null) {
 				if (isSameType(binding, qualifier, name)) {
@@ -220,9 +222,9 @@ public class ContextSensitiveImportRewriteContext extends ImportRewriteContext {
 			if (javaElement != null)
 				project= javaElement.getJavaProject();
 
-			List imports= new ArrayList();
+			List<SimpleName> imports= new ArrayList<SimpleName>();
 			ImportReferencesCollector.collect(fCompilationUnit, project, null, imports, null);
-			fImportedNames= (Name[])imports.toArray(new Name[imports.size()]);
+			fImportedNames= imports.toArray(new Name[imports.size()]);
 		}
 		return fImportedNames;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java
index daa2e03..8416c46 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -198,7 +198,7 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 	private int fDoubleCount;
 
 	/** The primitive types to generate custom hashCode() methods for */
-	private List fCustomHashCodeTypes= new ArrayList();
+	private List<ITypeBinding> fCustomHashCodeTypes= new ArrayList<ITypeBinding>();
 
 	/** <code>true</code> to use 'instanceof' to compare types, <code>false</code> otherwise */
 	private final boolean fUseInstanceOf;
@@ -290,7 +290,7 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 			// get the declaration and the rewrite
 			AbstractTypeDeclaration declaration= (AbstractTypeDeclaration) ASTNodes.findDeclaration(fType, fRewrite.getRoot());
 			ListRewrite rewriter= fRewrite.getASTRewrite().getListRewrite(declaration, declaration.getBodyDeclarationsProperty());
-			final List list= (List) declaration.getStructuralProperty(declaration.getBodyDeclarationsProperty());
+			final List<BodyDeclaration> list= (List<BodyDeclaration>) declaration.getStructuralProperty(declaration.getBodyDeclarationsProperty());
 			if (fType != null && rewriter != null) {
 
 				ICompilationUnit cu= (ICompilationUnit) fUnit.getJavaElement();
@@ -315,8 +315,8 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 				addMethod(rewriter, equalsMethod, hashCodeMethod, oldHash);
 
 				// helpers
-				for (final Iterator iterator= fCustomHashCodeTypes.iterator(); iterator.hasNext();) {
-					final ITypeBinding binding= (ITypeBinding) iterator.next();
+				for (final Iterator<ITypeBinding> iterator= fCustomHashCodeTypes.iterator(); iterator.hasNext();) {
+					final ITypeBinding binding= iterator.next();
 
 					if (findMethodToReplace(list, METHODNAME_HASH_CODE, objectAsParam) == null) {
 						final MethodDeclaration helperDecl= createHashCodeHelper(binding);
@@ -344,9 +344,9 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 		return fType.isMember() && !Modifier.isStatic(fType.getModifiers());
 	}
 
-	private BodyDeclaration findMethodToReplace(final List list, String name, ITypeBinding[] paramTypes) {
-		for (final Iterator iterator= list.iterator(); iterator.hasNext();) {
-			final BodyDeclaration bodyDecl= (BodyDeclaration) iterator.next();
+	private BodyDeclaration findMethodToReplace(final List<BodyDeclaration> list, String name, ITypeBinding[] paramTypes) {
+		for (final Iterator<BodyDeclaration> iterator= list.iterator(); iterator.hasNext();) {
+			final BodyDeclaration bodyDecl= iterator.next();
 			if (bodyDecl instanceof MethodDeclaration) {
 				final MethodDeclaration method= (MethodDeclaration) bodyDecl;
 				final IMethodBinding binding= method.resolveBinding();
@@ -470,7 +470,7 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 
 	private Statement[] createAddSimpleHashCode(ITypeBinding type, IHashCodeAccessProvider provider, String name, boolean singleTemp) {
 
-		List statements= new ArrayList();
+		List<Statement> statements= new ArrayList<Statement>();
 
 		if (!type.isPrimitive()) {
 			// (element == null ? 0 : element.hashCode())
@@ -533,7 +533,7 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 			statements.add(prepareAssignment(createShiftAssignment(fAst.newSimpleName(VARIABLE_NAME_DOUBLE_TEMPORARY), fAst.newSimpleName(VARIABLE_NAME_DOUBLE_TEMPORARY))));
 		}
 
-		return (Statement[]) statements.toArray(new Statement[statements.size()]);
+		return statements.toArray(new Statement[statements.size()]);
 	}
 
 	private Statement createAddArrayHashCode(IVariableBinding binding) {
@@ -592,7 +592,7 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 		hashCodeMethod.setReturnType2(fAst.newPrimitiveType(PrimitiveType.INT));
 
 		// ARGUMENTS
-		List parameters= hashCodeMethod.parameters();
+		List<SingleVariableDeclaration> parameters= hashCodeMethod.parameters();
 		SingleVariableDeclaration hashCodeParam= fAst.newSingleVariableDeclaration();
 		if (!binding.isPrimitive())
 			hashCodeParam.setType(fAst.newArrayType(fAst.newSimpleType(getQualifiedName(JAVA_LANG_OBJECT)), 1));
@@ -772,7 +772,7 @@ public final class GenerateHashCodeEqualsOperation implements IWorkspaceRunnable
 		equalsMethodDeclaration.setConstructor(false);
 		equalsMethodDeclaration.setReturnType2(fAst.newPrimitiveType(PrimitiveType.BOOLEAN));
 
-		List parameters= equalsMethodDeclaration.parameters();
+		List<SingleVariableDeclaration> parameters= equalsMethodDeclaration.parameters();
 		SingleVariableDeclaration equalsParam= fAst.newSingleVariableDeclaration();
 		equalsParam.setType(fRewrite.getImportRewrite().addImport(fAst.resolveWellKnownType(JAVA_LANG_OBJECT), fAst, fImportRewriteContext));
 		equalsParam.setName(fAst.newSimpleName(VARIABLE_NAME_EQUALS_PARAM));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GetterSetterUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GetterSetterUtil.java
index f388b81..c3f5e37 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GetterSetterUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GetterSetterUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Assignment;
+import org.eclipse.jdt.core.dom.Assignment.Operator;
 import org.eclipse.jdt.core.dom.CastExpression;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ITypeBinding;
@@ -33,10 +34,10 @@ import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.PostfixExpression;
 import org.eclipse.jdt.core.dom.PrefixExpression;
 import org.eclipse.jdt.core.dom.PrimitiveType;
-import org.eclipse.jdt.core.dom.Assignment.Operator;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.JdtFlags;
 
@@ -260,8 +261,14 @@ public class GetterSetterUtil {
 				InfixExpression infix= ast.newInfixExpression();
 				infix.setLeftOperand(getterExpression);
 				infix.setOperator(ASTNodes.convertToInfixOperator(assignment.getOperator()));
-				infix.setRightOperand(copiedRightOp);
 				ITypeBinding infixType= infix.resolveTypeBinding();
+				if (NecessaryParenthesesChecker.needsParentheses(copiedRightOp, infix, InfixExpression.RIGHT_OPERAND_PROPERTY)) {
+					//TODO: this introduces extra parentheses as the new "infix" node doesn't have bindings
+					ParenthesizedExpression p= ast.newParenthesizedExpression();
+					p.setExpression(copiedRightOp);
+					copiedRightOp= p;
+				}
+				infix.setRightOperand(copiedRightOp);
 				return createNarrowCastIfNessecary(infix, infixType, ast, variableType, is50OrHigher);
 			}
 		} else if (node.getNodeType() == ASTNode.POSTFIX_EXPRESSION) {
@@ -336,7 +343,7 @@ public class GetterSetterUtil {
 			castTo= ast.newPrimitiveType(PrimitiveType.SHORT);
 		if (castTo != null) {
 			CastExpression cast= ast.newCastExpression();
-			if (ASTNodes.needsParentheses(expression)) {
+			if (NecessaryParenthesesChecker.needsParentheses(expression, cast, CastExpression.EXPRESSION_PROPERTY)) {
 				ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
 				parenthesized.setExpression(expression);
 				cast.setExpression(parenthesized);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ImportReferencesCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ImportReferencesCollector.java
index 53a30bb..e267d39 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ImportReferencesCollector.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ImportReferencesCollector.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ import org.eclipse.jdt.core.dom.MemberRef;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.MethodRef;
+import org.eclipse.jdt.core.dom.MethodRefParameter;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NormalAnnotation;
@@ -55,11 +56,11 @@ import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 
 public class ImportReferencesCollector extends GenericVisitor {
 
-	public static void collect(ASTNode node, IJavaProject project, Region rangeLimit, Collection resultingTypeImports, Collection resultingStaticImports) {
+	public static void collect(ASTNode node, IJavaProject project, Region rangeLimit, Collection<SimpleName> resultingTypeImports, Collection<SimpleName> resultingStaticImports) {
 		collect(node, project, rangeLimit, false, resultingTypeImports, resultingStaticImports);
 	}
 
-	public static void collect(ASTNode node, IJavaProject project, Region rangeLimit, boolean skipMethodBodies, Collection resultingTypeImports, Collection resultingStaticImports) {
+	public static void collect(ASTNode node, IJavaProject project, Region rangeLimit, boolean skipMethodBodies, Collection<SimpleName> resultingTypeImports, Collection<SimpleName> resultingStaticImports) {
 		ASTNode root= node.getRoot();
 		CompilationUnit astRoot= root instanceof CompilationUnit ? (CompilationUnit) root : null;
 		node.accept(new ImportReferencesCollector(project, astRoot, rangeLimit, skipMethodBodies, resultingTypeImports, resultingStaticImports));
@@ -67,11 +68,11 @@ public class ImportReferencesCollector extends GenericVisitor {
 
 	private CompilationUnit fASTRoot;
 	private Region fSubRange;
-	private Collection/*<Name>*/ fTypeImports;
-	private Collection/*<Name>*/ fStaticImports;
+	private Collection<SimpleName> fTypeImports;
+	private Collection<SimpleName> fStaticImports;
 	private boolean fSkipMethodBodies;
 
-	private ImportReferencesCollector(IJavaProject project, CompilationUnit astRoot, Region rangeLimit, boolean skipMethodBodies, Collection resultingTypeImports, Collection resultingStaticImports) {
+	private ImportReferencesCollector(IJavaProject project, CompilationUnit astRoot, Region rangeLimit, boolean skipMethodBodies, Collection<SimpleName> resultingTypeImports, Collection<SimpleName> resultingStaticImports) {
 		super(processJavadocComments(astRoot));
 		fTypeImports= resultingTypeImports;
 		fStaticImports= resultingStaticImports;
@@ -142,7 +143,8 @@ public class ImportReferencesCollector extends GenericVisitor {
 		}
 
 		IBinding binding= name.resolveBinding();
-		if (binding == null || binding instanceof ITypeBinding || !Modifier.isStatic(binding.getModifiers()) || ((SimpleName) name).isDeclaration()) {
+		SimpleName simpleName= (SimpleName)name;
+		if (binding == null || binding instanceof ITypeBinding || !Modifier.isStatic(binding.getModifiers()) || simpleName.isDeclaration()) {
 			return;
 		}
 
@@ -152,24 +154,24 @@ public class ImportReferencesCollector extends GenericVisitor {
 				varBinding= varBinding.getVariableDeclaration();
 				ITypeBinding declaringClass= varBinding.getDeclaringClass();
 				if (declaringClass != null && !declaringClass.isLocal()) {
-					if (new ScopeAnalyzer(fASTRoot).isDeclaredInScope(varBinding, (SimpleName)name, ScopeAnalyzer.VARIABLES | ScopeAnalyzer.CHECK_VISIBILITY))
+					if (new ScopeAnalyzer(fASTRoot).isDeclaredInScope(varBinding, simpleName, ScopeAnalyzer.VARIABLES | ScopeAnalyzer.CHECK_VISIBILITY))
 							return;
-					fStaticImports.add(name);
+					fStaticImports.add(simpleName);
 				}
 			}
 		} else if (binding instanceof IMethodBinding) {
 			IMethodBinding methodBinding= ((IMethodBinding) binding).getMethodDeclaration();
 			ITypeBinding declaringClass= methodBinding.getDeclaringClass();
 			if (declaringClass != null && !declaringClass.isLocal()) {
-				if (new ScopeAnalyzer(fASTRoot).isDeclaredInScope(methodBinding, (SimpleName)name, ScopeAnalyzer.METHODS | ScopeAnalyzer.CHECK_VISIBILITY))
+				if (new ScopeAnalyzer(fASTRoot).isDeclaredInScope(methodBinding, simpleName, ScopeAnalyzer.METHODS | ScopeAnalyzer.CHECK_VISIBILITY))
 						return;
-				fStaticImports.add(name);
+				fStaticImports.add(simpleName);
 			}
 		}
 
 	}
 
-	private void doVisitChildren(List elements) {
+	private void doVisitChildren(List<? extends ASTNode> elements) {
 		int nElements= elements.size();
 		for (int i= 0; i < nElements; i++) {
 			((ASTNode) elements.get(i)).accept(this);
@@ -185,6 +187,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visitNode(org.eclipse.jdt.core.dom.ASTNode)
 	 */
+	@Override
 	protected boolean visitNode(ASTNode node) {
 		return isAffected(node);
 	}
@@ -192,6 +195,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ArrayType)
 	 */
+	@Override
 	public boolean visit(ArrayType node) {
 		doVisitNode(node.getElementType());
 		return false;
@@ -200,6 +204,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SimpleType)
 	 */
+	@Override
 	public boolean visit(SimpleType node) {
 		typeRefFound(node.getName());
 		return false;
@@ -208,6 +213,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(QualifiedType)
 	 */
+	@Override
 	public boolean visit(QualifiedType node) {
 		// nothing to do here, let the qualifier be visited
 		return true;
@@ -216,6 +222,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(QualifiedName)
 	 */
+	@Override
 	public boolean visit(QualifiedName node) {
 		possibleTypeRefFound(node); // possible ref
 		possibleStaticImportFound(node);
@@ -225,6 +232,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ImportDeclaration)
 	 */
+	@Override
 	public boolean visit(ImportDeclaration node) {
 		return false;
 	}
@@ -232,6 +240,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(PackageDeclaration)
 	 */
+	@Override
 	public boolean visit(PackageDeclaration node) {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			doVisitNode(node.getJavadoc());
@@ -243,6 +252,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ThisExpression)
 	 */
+	@Override
 	public boolean visit(ThisExpression node) {
 		typeRefFound(node.getQualifier());
 		return false;
@@ -265,6 +275,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ClassInstanceCreation)
 	 */
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		doVisitChildren(node.typeArguments());
 		doVisitNode(node.getType());
@@ -279,6 +290,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#endVisit(MethodInvocation)
 	 */
+	@Override
 	public boolean visit(MethodInvocation node) {
 		evalQualifyingExpression(node.getExpression(), node.getName());
 		doVisitChildren(node.typeArguments());
@@ -289,6 +301,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SuperConstructorInvocation)
 	 */
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		if (!isAffected(node)) {
 			return false;
@@ -303,6 +316,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(FieldAccess)
 	 */
+	@Override
 	public boolean visit(FieldAccess node) {
 		evalQualifyingExpression(node.getExpression(), node.getName());
 		return false;
@@ -311,6 +325,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SimpleName)
 	 */
+	@Override
 	public boolean visit(SimpleName node) {
 		// if the call gets here, it can only be a variable reference
 		possibleStaticImportFound(node);
@@ -320,6 +335,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.MarkerAnnotation)
 	 */
+	@Override
 	public boolean visit(MarkerAnnotation node) {
 		typeRefFound(node.getTypeName());
 		return false;
@@ -328,6 +344,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.MarkerAnnotation)
 	 */
+	@Override
 	public boolean visit(NormalAnnotation node) {
 		typeRefFound(node.getTypeName());
 		doVisitChildren(node.values());
@@ -337,6 +354,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.MarkerAnnotation)
 	 */
+	@Override
 	public boolean visit(SingleMemberAnnotation node) {
 		typeRefFound(node.getTypeName());
 		doVisitNode(node.getValue());
@@ -346,6 +364,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(TypeDeclaration)
 	 */
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		if (!isAffected(node)) {
 			return false;
@@ -356,6 +375,7 @@ public class ImportReferencesCollector extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(MethodDeclaration)
 	 */
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		if (!isAffected(node)) {
 			return false;
@@ -371,9 +391,9 @@ public class ImportReferencesCollector extends GenericVisitor {
 			doVisitNode(node.getReturnType2());
 		}
 		doVisitChildren(node.parameters());
-		Iterator iter=node.thrownExceptions().iterator();
+		Iterator<Name> iter=node.thrownExceptions().iterator();
 		while (iter.hasNext()) {
-			typeRefFound((Name) iter.next());
+			typeRefFound(iter.next());
 		}
 		if (!fSkipMethodBodies) {
 			doVisitNode(node.getBody());
@@ -381,9 +401,10 @@ public class ImportReferencesCollector extends GenericVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(TagElement node) {
 		String tagName= node.getTagName();
-		List list= node.fragments();
+		List<? extends ASTNode> list= node.fragments();
 		int idx= 0;
 		if (tagName != null && !list.isEmpty()) {
 			Object first= list.get(0);
@@ -398,11 +419,12 @@ public class ImportReferencesCollector extends GenericVisitor {
 			}
 		}
 		for (int i= idx; i < list.size(); i++) {
-			doVisitNode((ASTNode) list.get(i));
+			doVisitNode(list.get(i));
 		}
 		return false;
 	}
 
+	@Override
 	public boolean visit(MemberRef node) {
 		Name qualifier= node.getQualifier();
 		if (qualifier != null) {
@@ -411,12 +433,13 @@ public class ImportReferencesCollector extends GenericVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(MethodRef node) {
 		Name qualifier= node.getQualifier();
 		if (qualifier != null) {
 			typeRefFound(qualifier);
 		}
-		List list= node.parameters();
+		List<MethodRefParameter> list= node.parameters();
 		if (list != null) {
 			doVisitChildren(list); // visit MethodRefParameter with Type
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java
index 2bca6a5..ac596e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/OrganizeImportsOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,17 +88,17 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 		private static class UnresolvedTypeData {
 			final SimpleName ref;
 			final int typeKinds;
-			final List foundInfos;
+			final List<TypeNameMatch> foundInfos;
 
 			public UnresolvedTypeData(SimpleName ref) {
 				this.ref= ref;
 				this.typeKinds= ASTResolving.getPossibleTypeKinds(ref, true);
-				this.foundInfos= new ArrayList(3);
+				this.foundInfos= new ArrayList<TypeNameMatch>(3);
 			}
 
 			public void addInfo(TypeNameMatch info) {
 				for (int i= this.foundInfos.size() - 1; i >= 0; i--) {
-					TypeNameMatch curr= (TypeNameMatch) this.foundInfos.get(i);
+					TypeNameMatch curr= this.foundInfos.get(i);
 					if (curr.getTypeContainerName().equals(info.getTypeContainerName())) {
 						return; // not added. already contains type with same name
 					}
@@ -107,10 +107,10 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 			}
 		}
 
-		private Set fOldSingleImports;
-		private Set fOldDemandImports;
+		private Set<String> fOldSingleImports;
+		private Set<String> fOldDemandImports;
 
-		private Set fImplicitImports;
+		private Set<String> fImplicitImports;
 
 		private ImportRewrite fImpStructure;
 
@@ -121,13 +121,13 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 		private ScopeAnalyzer fAnalyzer;
 		private boolean fAllowDefaultPackageImports;
 
-		private Map fUnresolvedTypes;
-		private Set fImportsAdded;
+		private Map<String, UnresolvedTypeData> fUnresolvedTypes;
+		private Set<String> fImportsAdded;
 		private TypeNameMatch[][] fOpenChoices;
 		private SourceRange[] fSourceRanges;
 
 
-		public TypeReferenceProcessor(Set oldSingleImports, Set oldDemandImports, CompilationUnit root, ImportRewrite impStructure, boolean ignoreLowerCaseNames) {
+		public TypeReferenceProcessor(Set<String> oldSingleImports, Set<String> oldDemandImports, CompilationUnit root, ImportRewrite impStructure, boolean ignoreLowerCaseNames) {
 			fOldSingleImports= oldSingleImports;
 			fOldDemandImports= oldDemandImports;
 			fImpStructure= impStructure;
@@ -135,7 +135,7 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 
 			ICompilationUnit cu= impStructure.getCompilationUnit();
 
-			fImplicitImports= new HashSet(3);
+			fImplicitImports= new HashSet<String>(3);
 			fImplicitImports.add(""); //$NON-NLS-1$
 			fImplicitImports.add("java.lang"); //$NON-NLS-1$
 			fImplicitImports.add(cu.getParent().getElementName());
@@ -146,8 +146,8 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 
 			fAllowDefaultPackageImports= cu.getJavaProject().getOption(JavaCore.COMPILER_SOURCE, true).equals(JavaCore.VERSION_1_3);
 
-			fImportsAdded= new HashSet();
-			fUnresolvedTypes= new HashMap();
+			fImportsAdded= new HashSet<String>();
+			fUnresolvedTypes= new HashMap<String, UnresolvedTypeData>();
 		}
 
 		private boolean needsImport(ITypeBinding typeBinding, SimpleName ref) {
@@ -235,10 +235,10 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 				}
 				char[][] allTypes= new char[nUnresolved][];
 				int i= 0;
-				for (Iterator iter= fUnresolvedTypes.keySet().iterator(); iter.hasNext();) {
-					allTypes[i++]= ((String) iter.next()).toCharArray();
+				for (Iterator<String> iter= fUnresolvedTypes.keySet().iterator(); iter.hasNext();) {
+					allTypes[i++]= iter.next().toCharArray();
 				}
-				final ArrayList typesFound= new ArrayList();
+				final ArrayList<TypeNameMatch> typesFound= new ArrayList<TypeNameMatch>();
 				final IJavaProject project= fCurrPackage.getJavaProject();
 				IJavaSearchScope scope= SearchEngine.createJavaSearchScope(new IJavaElement[] { project });
 				TypeNameMatchCollector collector= new TypeNameMatchCollector(typesFound);
@@ -247,8 +247,8 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 				boolean is50OrHigher= 	JavaModelUtil.is50OrHigher(project);
 
 				for (i= 0; i < typesFound.size(); i++) {
-					TypeNameMatch curr= (TypeNameMatch) typesFound.get(i);
-					UnresolvedTypeData data= (UnresolvedTypeData) fUnresolvedTypes.get(curr.getSimpleTypeName());
+					TypeNameMatch curr= typesFound.get(i);
+					UnresolvedTypeData data= fUnresolvedTypes.get(curr.getSimpleTypeName());
 					if (data != null && isVisible(curr) && isOfKind(curr, data.typeKinds, is50OrHigher)) {
 						if (fAllowDefaultPackageImports || curr.getPackageName().length() > 0) {
 							data.addInfo(curr);
@@ -256,10 +256,10 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 					}
 				}
 
-				ArrayList openChoices= new ArrayList(nUnresolved);
-				ArrayList sourceRanges= new ArrayList(nUnresolved);
-				for (Iterator iter= fUnresolvedTypes.values().iterator(); iter.hasNext();) {
-					UnresolvedTypeData data= (UnresolvedTypeData) iter.next();
+				ArrayList<TypeNameMatch[]> openChoices= new ArrayList<TypeNameMatch[]>(nUnresolved);
+				ArrayList<SourceRange> sourceRanges= new ArrayList<SourceRange>(nUnresolved);
+				for (Iterator<UnresolvedTypeData> iter= fUnresolvedTypes.values().iterator(); iter.hasNext();) {
+					UnresolvedTypeData data= iter.next();
 					TypeNameMatch[] openChoice= processTypeInfo(data.foundInfos);
 					if (openChoice != null) {
 						openChoices.add(openChoice);
@@ -269,21 +269,21 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 				if (openChoices.isEmpty()) {
 					return false;
 				}
-				fOpenChoices= (TypeNameMatch[][]) openChoices.toArray(new TypeNameMatch[openChoices.size()][]);
-				fSourceRanges= (SourceRange[]) sourceRanges.toArray(new SourceRange[sourceRanges.size()]);
+				fOpenChoices= openChoices.toArray(new TypeNameMatch[openChoices.size()][]);
+				fSourceRanges= sourceRanges.toArray(new SourceRange[sourceRanges.size()]);
 				return true;
 			} finally {
 				monitor.done();
 			}
 		}
 
-		private TypeNameMatch[] processTypeInfo(List typeRefsFound) {
+		private TypeNameMatch[] processTypeInfo(List<TypeNameMatch> typeRefsFound) {
 			int nFound= typeRefsFound.size();
 			if (nFound == 0) {
 				// nothing found
 				return null;
 			} else if (nFound == 1) {
-				TypeNameMatch typeRef= (TypeNameMatch) typeRefsFound.get(0);
+				TypeNameMatch typeRef= typeRefsFound.get(0);
 				fImpStructure.addImport(typeRef.getFullyQualifiedName());
 				return null;
 			} else {
@@ -292,7 +292,7 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 
 				// multiple found, use old imports to find an entry
 				for (int i= 0; i < nFound; i++) {
-					TypeNameMatch typeRef= (TypeNameMatch) typeRefsFound.get(i);
+					TypeNameMatch typeRef= typeRefsFound.get(i);
 					String fullName= typeRef.getFullyQualifiedName();
 					String containerName= typeRef.getTypeContainerName();
 					if (fOldSingleImports.contains(fullName)) {
@@ -313,7 +313,7 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 					return null;
 				}
 				// return the open choices
-				return (TypeNameMatch[]) typeRefsFound.toArray(new TypeNameMatch[nFound]);
+				return typeRefsFound.toArray(new TypeNameMatch[nFound]);
 			}
 		}
 
@@ -426,10 +426,10 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 
 			ImportRewrite importsRewrite= StubUtility.createImportRewrite(astRoot, false);
 
-			Set/*<String>*/ oldSingleImports= new HashSet();
-			Set/*<String>*/  oldDemandImports= new HashSet();
-			List/*<SimpleName>*/ typeReferences= new ArrayList();
-			List/*<SimpleName>*/ staticReferences= new ArrayList();
+			Set<String> oldSingleImports= new HashSet<String>();
+			Set<String>  oldDemandImports= new HashSet<String>();
+			List<SimpleName> typeReferences= new ArrayList<SimpleName>();
+			List<SimpleName> staticReferences= new ArrayList<SimpleName>();
 
 			if (!collectReferences(astRoot, typeReferences, staticReferences, oldSingleImports, oldDemandImports))
 				return null;
@@ -438,9 +438,9 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 
 			TypeReferenceProcessor processor= new TypeReferenceProcessor(oldSingleImports, oldDemandImports, astRoot, importsRewrite, fIgnoreLowerCaseNames);
 
-			Iterator refIterator= typeReferences.iterator();
+			Iterator<SimpleName> refIterator= typeReferences.iterator();
 			while (refIterator.hasNext()) {
-				SimpleName typeRef= (SimpleName) refIterator.next();
+				SimpleName typeRef= refIterator.next();
 				processor.add(typeRef);
 			}
 
@@ -471,8 +471,8 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 		}
 	}
 
-	private void determineImportDifferences(ImportRewrite importsStructure, Set oldSingleImports, Set oldDemandImports) {
-  		ArrayList importsAdded= new ArrayList();
+	private void determineImportDifferences(ImportRewrite importsStructure, Set<String> oldSingleImports, Set<String> oldDemandImports) {
+  		ArrayList<String> importsAdded= new ArrayList<String>();
   		importsAdded.addAll(Arrays.asList(importsStructure.getCreatedImports()));
   		importsAdded.addAll(Arrays.asList(importsStructure.getCreatedStaticImports()));
 
@@ -493,9 +493,9 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 	}
 
 
-	private void addStaticImports(List/*<SimpleName>*/ staticReferences, ImportRewrite importsStructure) {
+	private void addStaticImports(List<SimpleName> staticReferences, ImportRewrite importsStructure) {
 		for (int i= 0; i < staticReferences.size(); i++) {
-			Name name= (Name) staticReferences.get(i);
+			Name name= staticReferences.get(i);
 			IBinding binding= name.resolveBinding();
 			if (binding != null) { // paranoia check
 				importsStructure.addStaticImport(binding);
@@ -505,7 +505,7 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 
 
 	// find type references in a compilation unit
-	private boolean collectReferences(CompilationUnit astRoot, List typeReferences, List staticReferences, Set oldSingleImports, Set oldDemandImports) {
+	private boolean collectReferences(CompilationUnit astRoot, List<SimpleName> typeReferences, List<SimpleName> staticReferences, Set<String> oldSingleImports, Set<String> oldDemandImports) {
 		if (!fAllowSyntaxErrors) {
 			IProblem[] problems= astRoot.getProblems();
 			for (int i= 0; i < problems.length; i++) {
@@ -516,9 +516,9 @@ public class OrganizeImportsOperation implements IWorkspaceRunnable {
 				}
 			}
 		}
-		List imports= astRoot.imports();
+		List<ImportDeclaration> imports= astRoot.imports();
 		for (int i= 0; i < imports.size(); i++) {
-			ImportDeclaration curr= (ImportDeclaration) imports.get(i);
+			ImportDeclaration curr= imports.get(i);
 			String id= ASTResolving.getFullName(curr.getName());
 			if (curr.isOnDemand()) {
 				oldDemandImports.add(id);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java
index 9bd4d8b..66ff337 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,6 @@ import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
 
 import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
@@ -42,6 +41,7 @@ import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.util.JdtFlags;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.MembersOrderPreferenceCache;
 
 /**
@@ -53,7 +53,7 @@ public class SortMembersOperation implements IWorkspaceRunnable {
 	/**
 	 * Default comparator for body declarations.
 	 */
-	public static class DefaultJavaElementComparator implements Comparator {
+	public static class DefaultJavaElementComparator implements Comparator<BodyDeclaration> {
 
 		private final Collator fCollator;
 		private final MembersOrderPreferenceCache fMemberOrderCache;
@@ -117,10 +117,7 @@ public class SortMembersOperation implements IWorkspaceRunnable {
 		 * @see Comparator#compare(java.lang.Object, java.lang.Object)
 		 * @see CompilationUnitSorter#sort(int, org.eclipse.jdt.core.ICompilationUnit, int[], java.util.Comparator, int, org.eclipse.core.runtime.IProgressMonitor)
 		 */
-		public int compare(Object e1, Object e2) {
-			BodyDeclaration bodyDeclaration1= (BodyDeclaration) e1;
-			BodyDeclaration bodyDeclaration2= (BodyDeclaration) e2;
-
+		public int compare(BodyDeclaration bodyDeclaration1, BodyDeclaration bodyDeclaration2) {
 			if (fDoNotSortFields && isSortPreserved(bodyDeclaration1) && isSortPreserved(bodyDeclaration2)) {
 				return preserveRelativeOrder(bodyDeclaration1, bodyDeclaration2);
 			}
@@ -164,15 +161,15 @@ public class SortMembersOperation implements IWorkspaceRunnable {
 						}
 
 						// if names equal, sort by parameter types
-						List parameters1= method1.parameters();
-						List parameters2= method2.parameters();
+						List<SingleVariableDeclaration> parameters1= method1.parameters();
+						List<SingleVariableDeclaration> parameters2= method2.parameters();
 						int length1= parameters1.size();
 						int length2= parameters2.size();
 
 						int len= Math.min(length1, length2);
 						for (int i= 0; i < len; i++) {
-							SingleVariableDeclaration param1= (SingleVariableDeclaration) parameters1.get(i);
-							SingleVariableDeclaration param2= (SingleVariableDeclaration) parameters2.get(i);
+							SingleVariableDeclaration param1= parameters1.get(i);
+							SingleVariableDeclaration param2= parameters2.get(i);
 							cmp= this.fCollator.compare(buildSignature(param1.getType()), buildSignature(param2.getType()));
 							if (cmp != 0) {
 								return cmp;
@@ -308,7 +305,7 @@ public class SortMembersOperation implements IWorkspaceRunnable {
 	 * </ul>
 	 */
 	public void run(IProgressMonitor monitor) throws CoreException {
-		CompilationUnitSorter.sort(AST.JLS3, fCompilationUnit, fPositions, new DefaultJavaElementComparator(fDoNotSortFields), 0, monitor);
+		CompilationUnitSorter.sort(ASTProvider.SHARED_AST_LEVEL, fCompilationUnit, fPositions, new DefaultJavaElementComparator(fDoNotSortFields), 0, monitor);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility.java
index 230ee0b..86cb55e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.lang.reflect.Modifier;
 import java.util.AbstractList;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -106,6 +107,7 @@ import org.eclipse.jdt.ui.PreferenceConstants;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaUIStatus;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.text.correction.ASTResolving;
 import org.eclipse.jdt.internal.ui.viewsupport.ProjectTemplateStore;
 
@@ -113,9 +115,9 @@ public class StubUtility {
 
 	private static final String[] EMPTY= new String[0];
 
-	private static final Set VALID_TYPE_BODY_TEMPLATES;
+	private static final Set<String> VALID_TYPE_BODY_TEMPLATES;
 	static {
-		VALID_TYPE_BODY_TEMPLATES= new HashSet();
+		VALID_TYPE_BODY_TEMPLATES= new HashSet<String>();
 		VALID_TYPE_BODY_TEMPLATES.add(CodeTemplateContextType.CLASSBODY_ID);
 		VALID_TYPE_BODY_TEMPLATES.add(CodeTemplateContextType.INTERFACEBODY_ID);
 		VALID_TYPE_BODY_TEMPLATES.add(CodeTemplateContextType.ENUMBODY_ID);
@@ -324,7 +326,7 @@ public class StubUtility {
 	 */
 	private static String[] getParameterTypeNamesForSeeTag(IMethod overridden) {
 		try {
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setProject(overridden.getJavaProject());
 			IBinding[] bindings= parser.createBindings(new IJavaElement[] { overridden }, null);
 			if (bindings.length == 1 && bindings[0] instanceof IMethodBinding) {
@@ -476,7 +478,7 @@ public class StubUtility {
 		IDocument doc= new Document(buffer.getString());
 		int nLines= doc.getNumberOfLines();
 		MultiTextEdit edit= new MultiTextEdit();
-		HashSet removedLines= new HashSet();
+		HashSet<Integer> removedLines= new HashSet<Integer>();
 		for (int i= 0; i < variables.length; i++) {
 			TemplateVariable position= findVariable(buffer, variables[i]); // look if Javadoc tags have to be added
 			if (position == null || position.getLength() > 0) {
@@ -651,22 +653,22 @@ public class StubUtility {
 		}
 
 		IDocument textBuffer= new Document(str);
-		List typeParams= decl.typeParameters();
+		List<TypeParameter> typeParams= shouldGenerateMethodTypeParameterTags(cu.getJavaProject()) ? decl.typeParameters() : Collections.emptyList();
 		String[] typeParamNames= new String[typeParams.size()];
 		for (int i= 0; i < typeParamNames.length; i++) {
-			TypeParameter elem= (TypeParameter)typeParams.get(i);
+			TypeParameter elem= typeParams.get(i);
 			typeParamNames[i]= elem.getName().getIdentifier();
 		}
-		List params= decl.parameters();
+		List<SingleVariableDeclaration> params= decl.parameters();
 		String[] paramNames= new String[params.size()];
 		for (int i= 0; i < paramNames.length; i++) {
-			SingleVariableDeclaration elem= (SingleVariableDeclaration)params.get(i);
+			SingleVariableDeclaration elem= params.get(i);
 			paramNames[i]= elem.getName().getIdentifier();
 		}
-		List exceptions= decl.thrownExceptions();
+		List<Name> exceptions= decl.thrownExceptions();
 		String[] exceptionNames= new String[exceptions.size()];
 		for (int i= 0; i < exceptionNames.length; i++) {
-			exceptionNames[i]= ASTNodes.getSimpleNameIdentifier((Name)exceptions.get(i));
+			exceptionNames[i]= ASTNodes.getSimpleNameIdentifier(exceptions.get(i));
 		}
 
 		String returnType= null;
@@ -684,6 +686,10 @@ public class StubUtility {
 		return textBuffer.get();
 	}
 
+	public static boolean shouldGenerateMethodTypeParameterTags(IJavaProject project) {
+		return JavaCore.ENABLED.equals(project.getOption(JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS, true));
+	}
+
 	/**
 	 * @param decl the method declaration
 	 * @return the return type
@@ -802,7 +808,7 @@ public class StubUtility {
 				return lineDelimiter;
 		}
 		// workspace preference
-		scopeContext= new IScopeContext[] { new InstanceScope() };
+		scopeContext= new IScopeContext[] { InstanceScope.INSTANCE };
 		String platformDefault= System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		return Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, platformDefault, scopeContext);
 	}
@@ -906,8 +912,8 @@ public class StubUtility {
 
 	// --------------------------- name suggestions --------------------------
 
-	public static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, ITypeBinding expectedType, Expression assignedExpression, Collection excluded) {
-		LinkedHashSet res= new LinkedHashSet(); // avoid duplicates but keep order
+	public static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, ITypeBinding expectedType, Expression assignedExpression, Collection<String> excluded) {
+		LinkedHashSet<String> res= new LinkedHashSet<String>(); // avoid duplicates but keep order
 
 		if (assignedExpression != null) {
 			String nameFromExpression= getBaseNameFromExpression(project, assignedExpression, variableKind);
@@ -940,11 +946,11 @@ public class StubUtility {
 		if (res.isEmpty()) {
 			return getDefaultVariableNameSuggestions(variableKind, excluded);
 		}
-		return (String[])res.toArray(new String[res.size()]);
+		return res.toArray(new String[res.size()]);
 	}
 
-	public static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, Type expectedType, Expression assignedExpression, Collection excluded) {
-		LinkedHashSet res= new LinkedHashSet(); // avoid duplicates but keep order
+	public static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, Type expectedType, Expression assignedExpression, Collection<String> excluded) {
+		LinkedHashSet<String> res= new LinkedHashSet<String>(); // avoid duplicates but keep order
 
 		if (assignedExpression != null) {
 			String nameFromExpression= getBaseNameFromExpression(project, assignedExpression, variableKind);
@@ -966,10 +972,10 @@ public class StubUtility {
 		if (res.isEmpty()) {
 			return getDefaultVariableNameSuggestions(variableKind, excluded);
 		}
-		return (String[])res.toArray(new String[res.size()]);
+		return res.toArray(new String[res.size()]);
 	}
 
-	private static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, Type expectedType, Collection excluded, boolean evaluateDefault) {
+	private static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, Type expectedType, Collection<String> excluded, boolean evaluateDefault) {
 		int dim= 0;
 		if (expectedType.isArrayType()) {
 			ArrayType arrayType= (ArrayType)expectedType;
@@ -987,7 +993,7 @@ public class StubUtility {
 		return EMPTY;
 	}
 
-	private static String[] getDefaultVariableNameSuggestions(int variableKind, Collection excluded) {
+	private static String[] getDefaultVariableNameSuggestions(int variableKind, Collection<String> excluded) {
 		String prop= variableKind == NamingConventions.VK_STATIC_FINAL_FIELD ? "X" : "x"; //$NON-NLS-1$//$NON-NLS-2$
 		String name= prop;
 		int i= 1;
@@ -1019,24 +1025,24 @@ public class StubUtility {
 	 *         <code>evaluateDefault</code> is set to false, an empty array is returned if there is
 	 *         no good suggestion for the given base name.
 	 */
-	public static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, String baseName, int dimensions, Collection excluded, boolean evaluateDefault) {
+	public static String[] getVariableNameSuggestions(int variableKind, IJavaProject project, String baseName, int dimensions, Collection<String> excluded, boolean evaluateDefault) {
 		return NamingConventions.suggestVariableNames(variableKind, NamingConventions.BK_TYPE_NAME, removeTypeArguments(baseName), project, dimensions, getExcludedArray(excluded), evaluateDefault);
 	}
 
-	private static String[] getExcludedArray(Collection excluded) {
+	private static String[] getExcludedArray(Collection<String> excluded) {
 		if (excluded == null) {
 			return null;
 		} else if (excluded instanceof ExcludedCollection) {
 			return ((ExcludedCollection)excluded).getExcludedArray();
 		}
-		return (String[])excluded.toArray(new String[excluded.size()]);
+		return excluded.toArray(new String[excluded.size()]);
 	}
 
 
 	private static final String[] KNOWN_METHOD_NAME_PREFIXES= { "get", "is", "to" }; //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-1$
 
 
-	private static void add(String[] names, Set result) {
+	private static void add(String[] names, Set<String> result) {
 		for (int i= 0; i < names.length; i++) {
 			result.add(names[i]);
 		}
@@ -1095,7 +1101,7 @@ public class StubUtility {
 		return name;
 	}
 
-	private static String getBaseNameFromLocationInParent(Expression assignedExpression, List arguments, IMethodBinding binding) {
+	private static String getBaseNameFromLocationInParent(Expression assignedExpression, List<Expression> arguments, IMethodBinding binding) {
 		if (binding == null)
 			return null;
 
@@ -1194,7 +1200,7 @@ public class StubUtility {
 
 	public static String[][] suggestArgumentNamesWithProposals(IJavaProject project, String[] paramNames) {
 		String[][] newNames= new String[paramNames.length][];
-		ArrayList takenNames= new ArrayList();
+		ArrayList<String> takenNames= new ArrayList<String>();
 
 		// Ensure that the code generation preferences are respected
 		for (int i= 0; i < paramNames.length; i++) {
@@ -1204,12 +1210,12 @@ public class StubUtility {
 			String[] proposedNames= getVariableNameSuggestions(NamingConventions.VK_PARAMETER, project, curr, 0, takenNames, true);
 			if (!curr.equals(baseName)) {
 				// make the existing name to favorite
-				LinkedHashSet updatedNames= new LinkedHashSet();
+				LinkedHashSet<String> updatedNames= new LinkedHashSet<String>();
 				updatedNames.add(curr);
 				for (int k= 0; k < proposedNames.length; k++) {
 					updatedNames.add(proposedNames[k]);
 				}
-				proposedNames= (String[])updatedNames.toArray(new String[updatedNames.size()]);
+				proposedNames= updatedNames.toArray(new String[updatedNames.size()]);
 			}
 			newNames[i]= proposedNames;
 			takenNames.add(proposedNames[0]);
@@ -1250,7 +1256,7 @@ public class StubUtility {
 					String[] paramNames= method.getParameterNames();
 					if (paramNames.length == nParams) {
 						String[] namesArray= EMPTY;
-						ArrayList newNames= new ArrayList(paramNames.length);
+						ArrayList<String> newNames= new ArrayList<String>(paramNames.length);
 						// Ensure that the code generation preferences are respected
 						for (int i= 0; i < paramNames.length; i++) {
 							String curr= paramNames[i];
@@ -1261,7 +1267,7 @@ public class StubUtility {
 							} else {
 								newNames.add(suggestArgumentName(project, curr, namesArray));
 							}
-							namesArray= (String[])newNames.toArray(new String[newNames.size()]);
+							namesArray= newNames.toArray(new String[newNames.size()]);
 						}
 						return namesArray;
 					}
@@ -1312,7 +1318,7 @@ public class StubUtility {
 		return NamingConventions.VK_STATIC_FINAL_FIELD;
 	}
 
-	private static class ExcludedCollection extends AbstractList {
+	private static class ExcludedCollection extends AbstractList<String> {
 		private String[] fExcluded;
 
 		public ExcludedCollection(String[] excluded) {
@@ -1323,14 +1329,17 @@ public class StubUtility {
 			return fExcluded;
 		}
 
+		@Override
 		public int size() {
 			return fExcluded.length;
 		}
 
-		public Object get(int index) {
+		@Override
+		public String get(int index) {
 			return fExcluded[index];
 		}
 
+		@Override
 		public int indexOf(Object o) {
 			if (o instanceof String) {
 				for (int i= 0; i < fExcluded.length; i++) {
@@ -1341,6 +1350,7 @@ public class StubUtility {
 			return -1;
 		}
 
+		@Override
 		public boolean contains(Object o) {
 			return indexOf(o) != -1;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java
index 47419d3..919aaee 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ import org.eclipse.jdt.core.dom.Javadoc;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.PrimitiveType;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
@@ -53,8 +54,8 @@ import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeParameter;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.AddDelegateMethodsOperation.DelegateEntry;
 import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
@@ -65,7 +66,7 @@ import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.ui.CodeGeneration;
 
 /**
- * Utilities for code generation based on ast rewrite.
+ * Utilities for code generation based on AST rewrite.
  *
  * @since 3.1
  */
@@ -88,14 +89,14 @@ public final class StubUtility2 {
 		decl.setConstructor(true);
 
 		ITypeBinding[] typeParams= binding.getTypeParameters();
-		List typeParameters= decl.typeParameters();
+		List<TypeParameter> typeParameters= decl.typeParameters();
 		for (int i= 0; i < typeParams.length; i++) {
 			ITypeBinding curr= typeParams[i];
 			TypeParameter newTypeParam= ast.newTypeParameter();
 			newTypeParam.setName(ast.newSimpleName(curr.getName()));
 			ITypeBinding[] typeBounds= curr.getTypeBounds();
 			if (typeBounds.length != 1 || !"java.lang.Object".equals(typeBounds[0].getQualifiedName())) {//$NON-NLS-1$
-				List newTypeBounds= newTypeParam.typeBounds();
+				List<Type> newTypeBounds= newTypeParam.typeBounds();
 				for (int k= 0; k < typeBounds.length; k++) {
 					newTypeBounds.add(imports.addImport(typeBounds[k], ast, context));
 				}
@@ -103,9 +104,9 @@ public final class StubUtility2 {
 			typeParameters.add(newTypeParam);
 		}
 
-		List parameters= createParameters(unit.getJavaProject(), imports, context, ast, binding, decl);
+		List<SingleVariableDeclaration> parameters= createParameters(unit.getJavaProject(), imports, context, ast, binding, decl);
 
-		List thrownExceptions= decl.thrownExceptions();
+		List<Name> thrownExceptions= decl.thrownExceptions();
 		ITypeBinding[] excTypes= binding.getExceptionTypes();
 		for (int i= 0; i < excTypes.length; i++) {
 			String excTypeName= imports.addImport(excTypes[i], context);
@@ -120,8 +121,8 @@ public final class StubUtility2 {
 		if (!omitSuperForDefConst || !parameters.isEmpty()) {
 			SuperConstructorInvocation invocation= ast.newSuperConstructorInvocation();
 			SingleVariableDeclaration varDecl= null;
-			for (Iterator iterator= parameters.iterator(); iterator.hasNext();) {
-				varDecl= (SingleVariableDeclaration) iterator.next();
+			for (Iterator<SingleVariableDeclaration> iterator= parameters.iterator(); iterator.hasNext();) {
+				varDecl= iterator.next();
 				invocation.arguments().add(ast.newSimpleName(varDecl.getName().getIdentifier()));
 			}
 			bodyStatement= ASTNodes.asFormattedString(invocation, 0, delimiter, unit.getJavaProject().getOptions(true));
@@ -130,11 +131,11 @@ public final class StubUtility2 {
 		if (todo) {
 			String placeHolder= CodeGeneration.getMethodBodyContent(unit, type, binding.getName(), true, bodyStatement, delimiter);
 			if (placeHolder != null) {
-				ASTNode todoNode= rewrite.createStringPlaceholder(placeHolder, ASTNode.RETURN_STATEMENT);
+				ReturnStatement todoNode= (ReturnStatement) rewrite.createStringPlaceholder(placeHolder, ASTNode.RETURN_STATEMENT);
 				body.statements().add(todoNode);
 			}
 		} else {
-			ASTNode statementNode= rewrite.createStringPlaceholder(bodyStatement, ASTNode.RETURN_STATEMENT);
+			ReturnStatement statementNode= (ReturnStatement) rewrite.createStringPlaceholder(bodyStatement, ASTNode.RETURN_STATEMENT);
 			body.statements().add(statementNode);
 		}
 
@@ -156,17 +157,17 @@ public final class StubUtility2 {
 		decl.setName(ast.newSimpleName(typeBinding.getName()));
 		decl.setConstructor(true);
 
-		List parameters= decl.parameters();
+		List<SingleVariableDeclaration> parameters= decl.parameters();
 		if (superConstructor != null) {
 			ITypeBinding[] typeParams= superConstructor.getTypeParameters();
-			List typeParameters= decl.typeParameters();
+			List<TypeParameter> typeParameters= decl.typeParameters();
 			for (int i= 0; i < typeParams.length; i++) {
 				ITypeBinding curr= typeParams[i];
 				TypeParameter newTypeParam= ast.newTypeParameter();
 				newTypeParam.setName(ast.newSimpleName(curr.getName()));
 				ITypeBinding[] typeBounds= curr.getTypeBounds();
 				if (typeBounds.length != 1 || !"java.lang.Object".equals(typeBounds[0].getQualifiedName())) {//$NON-NLS-1$
-					List newTypeBounds= newTypeParam.typeBounds();
+					List<Type> newTypeBounds= newTypeParam.typeBounds();
 					for (int k= 0; k < typeBounds.length; k++) {
 						newTypeBounds.add(imports.addImport(typeBounds[k], ast, context));
 					}
@@ -176,7 +177,7 @@ public final class StubUtility2 {
 
 			createParameters(unit.getJavaProject(), imports, context, ast, superConstructor, decl);
 
-			List thrownExceptions= decl.thrownExceptions();
+			List<Name> thrownExceptions= decl.thrownExceptions();
 			ITypeBinding[] excTypes= superConstructor.getExceptionTypes();
 			for (int i= 0; i < excTypes.length; i++) {
 				String excTypeName= imports.addImport(excTypes[i], context);
@@ -192,18 +193,18 @@ public final class StubUtility2 {
 		if (superConstructor != null) {
 			SuperConstructorInvocation invocation= ast.newSuperConstructorInvocation();
 			SingleVariableDeclaration varDecl= null;
-			for (Iterator iterator= parameters.iterator(); iterator.hasNext();) {
-				varDecl= (SingleVariableDeclaration) iterator.next();
+			for (Iterator<SingleVariableDeclaration> iterator= parameters.iterator(); iterator.hasNext();) {
+				varDecl= iterator.next();
 				invocation.arguments().add(ast.newSimpleName(varDecl.getName().getIdentifier()));
 			}
 			body.statements().add(invocation);
 		}
 
-		List prohibited= new ArrayList();
-		for (final Iterator iterator= parameters.iterator(); iterator.hasNext();)
-			prohibited.add(((SingleVariableDeclaration) iterator.next()).getName().getIdentifier());
+		List<String> prohibited= new ArrayList<String>();
+		for (final Iterator<SingleVariableDeclaration> iterator= parameters.iterator(); iterator.hasNext();)
+			prohibited.add(iterator.next().getName().getIdentifier());
 		String param= null;
-		List list= new ArrayList(prohibited);
+		List<String> list= new ArrayList<String>(prohibited);
 		String[] excluded= null;
 		for (int i= 0; i < variableBindings.length; i++) {
 			SingleVariableDeclaration var= ast.newSingleVariableDeclaration();
@@ -216,7 +217,7 @@ public final class StubUtility2 {
 			parameters.add(var);
 		}
 
-		list= new ArrayList(prohibited);
+		list= new ArrayList<String>(prohibited);
 		for (int i= 0; i < variableBindings.length; i++) {
 			excluded= new String[list.size()];
 			list.toArray(excluded);
@@ -262,14 +263,14 @@ public final class StubUtility2 {
 		decl.setConstructor(false);
 
 		ITypeBinding[] typeParams= delegate.getTypeParameters();
-		List typeParameters= decl.typeParameters();
+		List<TypeParameter> typeParameters= decl.typeParameters();
 		for (int i= 0; i < typeParams.length; i++) {
 			ITypeBinding curr= typeParams[i];
 			TypeParameter newTypeParam= ast.newTypeParameter();
 			newTypeParam.setName(ast.newSimpleName(curr.getName()));
 			ITypeBinding[] typeBounds= curr.getTypeBounds();
 			if (typeBounds.length != 1 || !"java.lang.Object".equals(typeBounds[0].getQualifiedName())) {//$NON-NLS-1$
-				List newTypeBounds= newTypeParam.typeBounds();
+				List<Type> newTypeBounds= newTypeParam.typeBounds();
 				for (int k= 0; k < typeBounds.length; k++) {
 					newTypeBounds.add(imports.addImport(typeBounds[k], ast, context));
 				}
@@ -279,7 +280,7 @@ public final class StubUtility2 {
 
 		decl.setReturnType2(imports.addImport(delegate.getReturnType(), ast, context));
 
-		List parameters= decl.parameters();
+		List<SingleVariableDeclaration> parameters= decl.parameters();
 		ITypeBinding[] params= delegate.getParameterTypes();
 		String[] paramNames= StubUtility.suggestArgumentNames(unit.getJavaProject(), delegate);
 		for (int i= 0; i < params.length; i++) {
@@ -300,7 +301,7 @@ public final class StubUtility2 {
 			parameters.add(varDecl);
 		}
 
-		List thrownExceptions= decl.thrownExceptions();
+		List<Name> thrownExceptions= decl.thrownExceptions();
 		ITypeBinding[] excTypes= delegate.getExceptionTypes();
 		for (int i= 0; i < excTypes.length; i++) {
 			String excTypeName= imports.addImport(excTypes[i], context);
@@ -315,7 +316,7 @@ public final class StubUtility2 {
 		Statement statement= null;
 		MethodInvocation invocation= ast.newMethodInvocation();
 		invocation.setName(ast.newSimpleName(delegate.getName()));
-		List arguments= invocation.arguments();
+		List<Expression> arguments= invocation.arguments();
 		for (int i= 0; i < params.length; i++)
 			arguments.add(ast.newSimpleName(paramNames[i]));
 		if (settings.useKeywordThis) {
@@ -376,28 +377,35 @@ public final class StubUtility2 {
 
 		decl.setName(ast.newSimpleName(binding.getName()));
 		decl.setConstructor(false);
-
-		ITypeBinding[] typeParams= binding.getTypeParameters();
-		List typeParameters= decl.typeParameters();
-		for (int i= 0; i < typeParams.length; i++) {
-			ITypeBinding curr= typeParams[i];
-			TypeParameter newTypeParam= ast.newTypeParameter();
-			newTypeParam.setName(ast.newSimpleName(curr.getName()));
-			ITypeBinding[] typeBounds= curr.getTypeBounds();
-			if (typeBounds.length != 1 || !"java.lang.Object".equals(typeBounds[0].getQualifiedName())) {//$NON-NLS-1$
-				List newTypeBounds= newTypeParam.typeBounds();
-				for (int k= 0; k < typeBounds.length; k++) {
-					newTypeBounds.add(imports.addImport(typeBounds[k], ast, context));
+		
+		ITypeBinding bindingReturnType= binding.getReturnType();
+		
+		if (JavaModelUtil.is50OrHigher(unit.getJavaProject())) {
+			ITypeBinding[] typeParams= binding.getTypeParameters();
+			List<TypeParameter> typeParameters= decl.typeParameters();
+			for (int i= 0; i < typeParams.length; i++) {
+				ITypeBinding curr= typeParams[i];
+				TypeParameter newTypeParam= ast.newTypeParameter();
+				newTypeParam.setName(ast.newSimpleName(curr.getName()));
+				ITypeBinding[] typeBounds= curr.getTypeBounds();
+				if (typeBounds.length != 1 || !"java.lang.Object".equals(typeBounds[0].getQualifiedName())) {//$NON-NLS-1$
+					List<Type> newTypeBounds= newTypeParam.typeBounds();
+					for (int k= 0; k < typeBounds.length; k++) {
+						newTypeBounds.add(imports.addImport(typeBounds[k], ast, context));
+					}
 				}
+				typeParameters.add(newTypeParam);
 			}
-			typeParameters.add(newTypeParam);
+			
+		} else {
+			bindingReturnType= bindingReturnType.getErasure();
 		}
+		
+		decl.setReturnType2(imports.addImport(bindingReturnType, ast, context));
 
-		decl.setReturnType2(imports.addImport(binding.getReturnType(), ast, context));
-
-		List parameters= createParameters(unit.getJavaProject(), imports, context, ast, binding, decl);
+		List<SingleVariableDeclaration> parameters= createParameters(unit.getJavaProject(), imports, context, ast, binding, decl);
 
-		List thrownExceptions= decl.thrownExceptions();
+		List<Name> thrownExceptions= decl.thrownExceptions();
 		ITypeBinding[] excTypes= binding.getExceptionTypes();
 		for (int i= 0; i < excTypes.length; i++) {
 			String excTypeName= imports.addImport(excTypes[i], context);
@@ -406,7 +414,7 @@ public final class StubUtility2 {
 
 		String delimiter= unit.findRecommendedLineSeparator();
 		if (!deferred) {
-			Map options= unit.getJavaProject().getOptions(true);
+			Map<String, String> options= unit.getJavaProject().getOptions(true);
 
 			Block body= ast.newBlock();
 			decl.setBody(body);
@@ -424,8 +432,8 @@ public final class StubUtility2 {
 				SuperMethodInvocation invocation= ast.newSuperMethodInvocation();
 				invocation.setName(ast.newSimpleName(binding.getName()));
 				SingleVariableDeclaration varDecl= null;
-				for (Iterator iterator= parameters.iterator(); iterator.hasNext();) {
-					varDecl= (SingleVariableDeclaration) iterator.next();
+				for (Iterator<SingleVariableDeclaration> iterator= parameters.iterator(); iterator.hasNext();) {
+					varDecl= iterator.next();
 					invocation.arguments().add(ast.newSimpleName(varDecl.getName().getIdentifier()));
 				}
 				Expression expression= invocation;
@@ -441,7 +449,7 @@ public final class StubUtility2 {
 
 			String placeHolder= CodeGeneration.getMethodBodyContent(unit, type, binding.getName(), false, bodyStatement, delimiter);
 			if (placeHolder != null) {
-				ASTNode todoNode= rewrite.createStringPlaceholder(placeHolder, ASTNode.RETURN_STATEMENT);
+				ReturnStatement todoNode= (ReturnStatement) rewrite.createStringPlaceholder(placeHolder, ASTNode.RETURN_STATEMENT);
 				body.statements().add(todoNode);
 			}
 		}
@@ -460,29 +468,37 @@ public final class StubUtility2 {
 		return decl;
 	}
 
-	private static List createParameters(IJavaProject project, ImportRewrite imports, ImportRewriteContext context, AST ast, IMethodBinding binding, MethodDeclaration decl) {
-		List parameters= decl.parameters();
+	private static List<SingleVariableDeclaration> createParameters(IJavaProject project, ImportRewrite imports, ImportRewriteContext context, AST ast, IMethodBinding binding, MethodDeclaration decl) {
+		boolean is50OrHigher= JavaModelUtil.is50OrHigher(project);
+		List<SingleVariableDeclaration> parameters= decl.parameters();
 		ITypeBinding[] params= binding.getParameterTypes();
 		String[] paramNames= StubUtility.suggestArgumentNames(project, binding);
 		for (int i= 0; i < params.length; i++) {
 			SingleVariableDeclaration var= ast.newSingleVariableDeclaration();
 			if (binding.isVarargs() && params[i].isArray() && i == params.length - 1) {
-				StringBuffer buffer= new StringBuffer(imports.addImport(params[i].getElementType(), context));
+				ITypeBinding type= params[i].getElementType();
+				if (!is50OrHigher)
+					type= type.getErasure();
+				StringBuffer buffer= new StringBuffer(imports.addImport(type, context));
 				for (int dim= 1; dim < params[i].getDimensions(); dim++)
 					buffer.append("[]"); //$NON-NLS-1$
 				var.setType(ASTNodeFactory.newType(ast, buffer.toString()));
 				var.setVarargs(true);
-			} else
-				var.setType(imports.addImport(params[i], ast, context));
+			} else {
+				ITypeBinding type= params[i];
+				if (!is50OrHigher)
+					type= type.getErasure();
+				var.setType(imports.addImport(type, ast, context));
+			}
 			var.setName(ast.newSimpleName(paramNames[i]));
 			parameters.add(var);
 		}
 		return parameters;
 	}
 
-	private static IMethodBinding findMethodBinding(IMethodBinding method, List allMethods) {
+	private static IMethodBinding findMethodBinding(IMethodBinding method, List<IMethodBinding> allMethods) {
 		for (int i= 0; i < allMethods.size(); i++) {
-			IMethodBinding curr= (IMethodBinding) allMethods.get(i);
+			IMethodBinding curr= allMethods.get(i);
 			if (Bindings.isSubsignature(method, curr)) {
 				return curr;
 			}
@@ -490,16 +506,16 @@ public final class StubUtility2 {
 		return null;
 	}
 
-	private static IMethodBinding findOverridingMethod(IMethodBinding method, List allMethods) {
+	private static IMethodBinding findOverridingMethod(IMethodBinding method, List<IMethodBinding> allMethods) {
 		for (int i= 0; i < allMethods.size(); i++) {
-			IMethodBinding curr= (IMethodBinding) allMethods.get(i);
+			IMethodBinding curr= allMethods.get(i);
 			if (Bindings.areOverriddenMethods(curr, method) || Bindings.isSubsignature(curr, method))
 				return curr;
 		}
 		return null;
 	}
 
-	private static void findUnimplementedInterfaceMethods(ITypeBinding typeBinding, HashSet visited, ArrayList allMethods, IPackageBinding currPack, ArrayList toImplement) {
+	private static void findUnimplementedInterfaceMethods(ITypeBinding typeBinding, HashSet<ITypeBinding> visited, ArrayList<IMethodBinding> allMethods, IPackageBinding currPack, ArrayList<IMethodBinding> toImplement) {
 		if (visited.add(typeBinding)) {
 			IMethodBinding[] typeMethods= typeBinding.getDeclaredMethods();
 			for (int i= 0; i < typeMethods.length; i++) {
@@ -519,8 +535,8 @@ public final class StubUtility2 {
 	}
 
 	public static DelegateEntry[] getDelegatableMethods(ITypeBinding binding) {
-		final List tuples= new ArrayList();
-		final List declared= new ArrayList();
+		final List<DelegateEntry> tuples= new ArrayList<DelegateEntry>();
+		final List<IMethodBinding> declared= new ArrayList<IMethodBinding>();
 		IMethodBinding[] typeMethods= binding.getDeclaredMethods();
 		for (int index= 0; index < typeMethods.length; index++)
 			declared.add(typeMethods[index]);
@@ -528,13 +544,13 @@ public final class StubUtility2 {
 		for (int index= 0; index < typeFields.length; index++) {
 			IVariableBinding fieldBinding= typeFields[index];
 			if (fieldBinding.isField() && !fieldBinding.isEnumConstant() && !fieldBinding.isSynthetic())
-				getDelegatableMethods(new ArrayList(declared), fieldBinding, fieldBinding.getType(), binding, tuples);
+				getDelegatableMethods(new ArrayList<IMethodBinding>(declared), fieldBinding, fieldBinding.getType(), binding, tuples);
 		}
 		// list of tuple<IVariableBinding, IMethodBinding>
-		return (DelegateEntry[]) tuples.toArray(new DelegateEntry[tuples.size()]);
+		return tuples.toArray(new DelegateEntry[tuples.size()]);
 	}
 
-	private static void getDelegatableMethods(List methods, IVariableBinding fieldBinding, ITypeBinding typeBinding, ITypeBinding binding, List/*DelegateEntry*/ result) {
+	private static void getDelegatableMethods(List<IMethodBinding> methods, IVariableBinding fieldBinding, ITypeBinding typeBinding, ITypeBinding binding, List<DelegateEntry> result) {
 		boolean match= false;
 		if (typeBinding.isTypeVariable()) {
 			ITypeBinding[] typeBounds= typeBinding.getTypeBounds();
@@ -554,7 +570,7 @@ public final class StubUtility2 {
 				match= false;
 				final IMethodBinding methodBinding= candidates[index];
 				for (int offset= 0; offset < methods.size() && !match; offset++) {
-					if (Bindings.areOverriddenMethods((IMethodBinding) methods.get(offset), methodBinding))
+					if (Bindings.areOverriddenMethods(methods.get(offset), methodBinding))
 						match= true;
 				}
 				if (!match) {
@@ -572,7 +588,7 @@ public final class StubUtility2 {
 	}
 
 	private static IMethodBinding[] getDelegateCandidates(ITypeBinding binding, ITypeBinding hierarchy) {
-		List allMethods= new ArrayList();
+		List<IMethodBinding> allMethods= new ArrayList<IMethodBinding>();
 		boolean isInterface= binding.isInterface();
 		IMethodBinding[] typeMethods= binding.getDeclaredMethods();
 		for (int index= 0; index < typeMethods.length; index++) {
@@ -591,10 +607,10 @@ public final class StubUtility2 {
 					allMethods.add(typeMethods[index]);
 			}
 		}
-		return (IMethodBinding[]) allMethods.toArray(new IMethodBinding[allMethods.size()]);
+		return allMethods.toArray(new IMethodBinding[allMethods.size()]);
 	}
 
-	private static List getImplementationModifiers(AST ast, IMethodBinding method, boolean deferred) {
+	private static List<Modifier> getImplementationModifiers(AST ast, IMethodBinding method, boolean deferred) {
 		int modifiers= method.getModifiers() & ~Modifier.ABSTRACT & ~Modifier.NATIVE & ~Modifier.PRIVATE;
 		if (deferred) {
 			modifiers= modifiers & ~Modifier.PROTECTED;
@@ -604,7 +620,7 @@ public final class StubUtility2 {
 	}
 
 	public static IMethodBinding[] getOverridableMethods(AST ast, ITypeBinding typeBinding, boolean isSubType) {
-		List allMethods= new ArrayList();
+		List<IMethodBinding> allMethods= new ArrayList<IMethodBinding>();
 		IMethodBinding[] typeMethods= typeBinding.getDeclaredMethods();
 		for (int index= 0; index < typeMethods.length; index++) {
 			final int modifiers= typeMethods[index].getModifiers();
@@ -638,16 +654,16 @@ public final class StubUtility2 {
 		int modifiers= 0;
 		if (!typeBinding.isInterface()) {
 			for (int index= allMethods.size() - 1; index >= 0; index--) {
-				IMethodBinding method= (IMethodBinding) allMethods.get(index);
+				IMethodBinding method= allMethods.get(index);
 				modifiers= method.getModifiers();
 				if (Modifier.isFinal(modifiers))
 					allMethods.remove(index);
 			}
 		}
-		return (IMethodBinding[]) allMethods.toArray(new IMethodBinding[allMethods.size()]);
+		return allMethods.toArray(new IMethodBinding[allMethods.size()]);
 	}
 
-	private static void getOverridableMethods(AST ast, ITypeBinding superBinding, List allMethods) {
+	private static void getOverridableMethods(AST ast, ITypeBinding superBinding, List<IMethodBinding> allMethods) {
 		IMethodBinding[] methods= superBinding.getDeclaredMethods();
 		for (int offset= 0; offset < methods.length; offset++) {
 			final int modifiers= methods[offset].getModifiers();
@@ -672,8 +688,8 @@ public final class StubUtility2 {
 	}
 
 	public static IMethodBinding[] getUnimplementedMethods(ITypeBinding typeBinding, boolean implementAbstractsOfInput) {
-		ArrayList allMethods= new ArrayList();
-		ArrayList toImplement= new ArrayList();
+		ArrayList<IMethodBinding> allMethods= new ArrayList<IMethodBinding>();
+		ArrayList<IMethodBinding> toImplement= new ArrayList<IMethodBinding>();
 
 		IMethodBinding[] typeMethods= typeBinding.getDeclaredMethods();
 		for (int i= 0; i < typeMethods.length; i++) {
@@ -700,7 +716,7 @@ public final class StubUtility2 {
 		}
 
 		for (int i= 0; i < allMethods.size(); i++) {
-			IMethodBinding curr= (IMethodBinding) allMethods.get(i);
+			IMethodBinding curr= allMethods.get(i);
 			int modifiers= curr.getModifiers();
 			if ((Modifier.isAbstract(modifiers) || curr.getDeclaringClass().isInterface()) && (implementAbstractsOfInput || typeBinding != curr.getDeclaringClass())) {
 				// implement all abstract methods
@@ -708,7 +724,7 @@ public final class StubUtility2 {
 			}
 		}
 
-		HashSet visited= new HashSet();
+		HashSet<ITypeBinding> visited= new HashSet<ITypeBinding>();
 		ITypeBinding curr= typeBinding;
 		while (curr != null) {
 			ITypeBinding[] superInterfaces= curr.getInterfaces();
@@ -718,18 +734,18 @@ public final class StubUtility2 {
 			curr= curr.getSuperclass();
 		}
 
-		return (IMethodBinding[]) toImplement.toArray(new IMethodBinding[toImplement.size()]);
+		return toImplement.toArray(new IMethodBinding[toImplement.size()]);
 	}
 
 	public static IMethodBinding[] getVisibleConstructors(ITypeBinding binding, boolean accountExisting, boolean proposeDefault) {
-		List constructorMethods= new ArrayList();
-		List existingConstructors= null;
+		List<IMethodBinding> constructorMethods= new ArrayList<IMethodBinding>();
+		List<IMethodBinding> existingConstructors= null;
 		ITypeBinding superType= binding.getSuperclass();
 		if (superType == null)
 			return new IMethodBinding[0];
 		if (accountExisting) {
 			IMethodBinding[] methods= binding.getDeclaredMethods();
-			existingConstructors= new ArrayList(methods.length);
+			existingConstructors= new ArrayList<IMethodBinding>(methods.length);
 			for (int index= 0; index < methods.length; index++) {
 				IMethodBinding method= methods[index];
 				if (method.isConstructor() && !method.isDefaultConstructor())
@@ -759,7 +775,7 @@ public final class StubUtility2 {
 					constructorMethods.add(method);
 			}
 		}
-		return (IMethodBinding[]) constructorMethods.toArray(new IMethodBinding[constructorMethods.size()]);
+		return constructorMethods.toArray(new IMethodBinding[constructorMethods.size()]);
 	}
 
 
@@ -780,9 +796,9 @@ public final class StubUtility2 {
 			}
 			int insertPos= sourceRange.getOffset();
 
-			List members= listRewrite.getOriginalList();
+			List<? extends ASTNode> members= listRewrite.getOriginalList();
 			for (int i= 0; i < members.size(); i++) {
-				ASTNode curr= (ASTNode) members.get(i);
+				ASTNode curr= members.get(i);
 				if (curr.getStartPosition() >= insertPos) {
 					return curr;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java
index 9513569..2d38782 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,7 +168,7 @@ public abstract class AbstractToStringGenerator {
 
 	protected boolean needCollectionToStringMethod;
 
-	protected List typesThatNeedArrayToStringMethod;
+	protected List<ITypeBinding> typesThatNeedArrayToStringMethod;
 
 	public RefactoringStatus checkConditions() {
 		return new RefactoringStatus();
@@ -208,8 +208,8 @@ public abstract class AbstractToStringGenerator {
 		return toStringMethod;
 	}
 
-	public List generateHelperMethods() {
-		List result= new ArrayList();
+	public List<MethodDeclaration> generateHelperMethods() {
+		List<MethodDeclaration> result= new ArrayList<MethodDeclaration>();
 		if (needCollectionToStringMethod)
 			result.add(createHelperToStringMethod(false));
 
@@ -372,8 +372,8 @@ public abstract class AbstractToStringGenerator {
 			// i < length;
 			forStatement.setExpression(createInfixExpression(fAst.newSimpleName(indexName), Operator.LESS, fAst.newSimpleName(lengthParamName)));
 
-			for (Iterator iterator= typesThatNeedArrayToStringMethod.iterator(); iterator.hasNext();) {
-				ITypeBinding typeBinding= (ITypeBinding)iterator.next();
+			for (Iterator<ITypeBinding> iterator= typesThatNeedArrayToStringMethod.iterator(); iterator.hasNext();) {
+				ITypeBinding typeBinding= iterator.next();
 				//if (array instanceof int[]) {
 				String typeName= typeBinding.getName();
 				PrimitiveType.Code code= null;
@@ -460,7 +460,7 @@ public abstract class AbstractToStringGenerator {
 	protected void initialize() {
 		needMaxLenVariable= false;
 		needCollectionToStringMethod= false;
-		typesThatNeedArrayToStringMethod= new ArrayList();
+		typesThatNeedArrayToStringMethod= new ArrayList<ITypeBinding>();
 
 		checkNeedForHelperMethods();
 
@@ -855,10 +855,10 @@ public abstract class AbstractToStringGenerator {
 		return fAst.newName(importedName);
 	}
 	
-	private Set excluded;
+	private Set<String> excluded;
 	protected String createNameSuggestion(String baseName, int variableKind) {
 		if (excluded == null) {
-			excluded= new HashSet();
+			excluded= new HashSet<String>();
 			IVariableBinding[] fields= fContext.getTypeBinding().getDeclaredFields();
 			for (int i= 0; i < fields.length; i++) {
 				excluded.add(fields[i].getName());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java
index 410f13c..a1a6319 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IfStatement;
+import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Name;
@@ -40,7 +41,6 @@ import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.StringLiteral;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
-import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationMessages;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
@@ -79,7 +79,7 @@ import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
  */
 public class CustomBuilderGenerator extends AbstractToStringGenerator {
 
-	private final List primitiveTypes= Arrays.asList(new String[] { "byte", "short", "char", "int", "long", "float", "double", "boolean" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+	private final List<String> primitiveTypes= Arrays.asList(new String[] { "byte", "short", "char", "int", "long", "float", "double", "boolean" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
 
 	private final String[] wrapperTypes= new String[] { "java.lang.Byte", "java.lang.Short", "java.lang.Character", "java.lang.Integer", "java.lang.Long", "java.lang.Float", "java.lang.Double", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
 			"java.lang.Boolean" }; //$NON-NLS-1$
@@ -118,8 +118,9 @@ public class CustomBuilderGenerator extends AbstractToStringGenerator {
 	 * 
 	 * value: {@link AppendMethodInformation} - information about corresponding method
 	 */
-	private HashMap appendMethodSpecificTypes= new HashMap();
+	private HashMap<String, AppendMethodInformation> appendMethodSpecificTypes= new HashMap<String, AppendMethodInformation>();
 
+	@Override
 	public RefactoringStatus checkConditions() {
 		RefactoringStatus status= super.checkConditions();
 		if (fContext.isCustomArray() || fContext.isLimitItems())
@@ -127,9 +128,11 @@ public class CustomBuilderGenerator extends AbstractToStringGenerator {
 		return status;
 	}
 
+	@Override
 	protected void addElement(Object element) {
 	}
 
+	@Override
 	protected void initialize() {
 		super.initialize();
 
@@ -138,6 +141,7 @@ public class CustomBuilderGenerator extends AbstractToStringGenerator {
 		tidyAppendsMethodsMap();
 	}
 
+	@Override
 	public MethodDeclaration generateToStringMethod() throws CoreException {
 		initialize();
 
@@ -236,7 +240,7 @@ public class CustomBuilderGenerator extends AbstractToStringGenerator {
 					IType returnType= javaProject.findType(returnTypeName);
 					appendMethodInformation.returnsBuilder= (returnType != null) && returnType.newSupertypeHierarchy(null).contains(type);
 
-					AppendMethodInformation oldAMI= (AppendMethodInformation)appendMethodSpecificTypes.get(specyficType);
+					AppendMethodInformation oldAMI= appendMethodSpecificTypes.get(specyficType);
 					if (oldAMI == null || oldAMI.methodType < appendMethodInformation.methodType) {
 						appendMethodSpecificTypes.put(specyficType, appendMethodInformation);
 					}
@@ -252,11 +256,11 @@ public class CustomBuilderGenerator extends AbstractToStringGenerator {
 	 * parametersType is worse than for java.lang.Object.
 	 */
 	private void tidyAppendsMethodsMap() {
-		int objectParametersType= ((AppendMethodInformation)appendMethodSpecificTypes.get("java.lang.Object")).methodType; //$NON-NLS-1$
-		Set entrySet= appendMethodSpecificTypes.entrySet();
-		for (Iterator iterator= entrySet.iterator(); iterator.hasNext();) {
-			Map.Entry entry= (Map.Entry)iterator.next();
-			if (((AppendMethodInformation)entry.getValue()).methodType < objectParametersType) {
+		int objectParametersType= appendMethodSpecificTypes.get("java.lang.Object").methodType; //$NON-NLS-1$
+		Set<Map.Entry<String, AppendMethodInformation>> entrySet= appendMethodSpecificTypes.entrySet();
+		for (Iterator<Map.Entry<String, AppendMethodInformation>> iterator= entrySet.iterator(); iterator.hasNext();) {
+			Map.Entry<String, AppendMethodInformation> entry= iterator.next();
+			if (entry.getValue().methodType < objectParametersType) {
 				iterator.remove();
 			}
 		}
@@ -268,11 +272,11 @@ public class CustomBuilderGenerator extends AbstractToStringGenerator {
 
 		Expression memberAccessExpression= null;
 
-		AppendMethodInformation ami= (AppendMethodInformation)appendMethodSpecificTypes.get(memberTypeName);
+		AppendMethodInformation ami= appendMethodSpecificTypes.get(memberTypeName);
 		if (ami == null && memberType.isPrimitive()) {
 			memberTypeName= wrapperTypes[primitiveTypes.indexOf(memberTypeName)];
 			memberType= fAst.resolveWellKnownType(memberTypeName);
-			ami= (AppendMethodInformation)appendMethodSpecificTypes.get(memberTypeName);
+			ami= appendMethodSpecificTypes.get(memberTypeName);
 			if (!getContext().is50orHigher()) {
 				ClassInstanceCreation classInstance= fAst.newClassInstanceCreation();
 				classInstance.setType(fAst.newSimpleType(addImport(memberTypeName)));
@@ -286,7 +290,7 @@ public class CustomBuilderGenerator extends AbstractToStringGenerator {
 				memberTypeName= memberType.getQualifiedName();
 			else
 				memberTypeName= "java.lang.Object"; //$NON-NLS-1$
-			ami= (AppendMethodInformation)appendMethodSpecificTypes.get(memberTypeName);
+			ami= appendMethodSpecificTypes.get(memberTypeName);
 		}
 
 		if (memberAccessExpression == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java
index 9f50df6..7812150 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 Mateusz Matela and others.
+ * Copyright (c) 2010, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,14 +86,14 @@ public class GenerateToStringOperation implements IWorkspaceRunnable {
 
 				MethodDeclaration toStringMethod= fGenerator.generateToStringMethod();
 
-				final List list= (List)declaration.getStructuralProperty(declaration.getBodyDeclarationsProperty());
+				final List<BodyDeclaration> list= (List<BodyDeclaration>) declaration.getStructuralProperty(declaration.getBodyDeclarationsProperty());
 				BodyDeclaration replace= findMethodToReplace(list, toStringMethod);
 				if (replace == null || ((Boolean)toStringMethod.getProperty(AbstractToStringGenerator.OVERWRITE_METHOD_PROPERTY)).booleanValue())
 					insertMethod(toStringMethod, rewriter, replace);
 
-				List helperMethods= fGenerator.generateHelperMethods();
-				for (Iterator iterator= helperMethods.iterator(); iterator.hasNext();) {
-					MethodDeclaration method= (MethodDeclaration)iterator.next();
+				List<MethodDeclaration> helperMethods= fGenerator.generateHelperMethods();
+				for (Iterator<MethodDeclaration> iterator= helperMethods.iterator(); iterator.hasNext();) {
+					MethodDeclaration method= iterator.next();
 					replace= findMethodToReplace(list, method);
 					if (replace == null || ((Boolean)method.getProperty(AbstractToStringGenerator.OVERWRITE_METHOD_PROPERTY)).booleanValue()) {
 						insertMethod(method, rewriter, replace);
@@ -137,17 +137,17 @@ public class GenerateToStringOperation implements IWorkspaceRunnable {
 	 * @return declaration of method from the list that has the same name and parameter types, or
 	 *         null if not found
 	 */
-	protected BodyDeclaration findMethodToReplace(final List list, MethodDeclaration method) {
-		for (final Iterator iterator= list.iterator(); iterator.hasNext();) {
-			final BodyDeclaration bodyDecl= (BodyDeclaration)iterator.next();
+	protected BodyDeclaration findMethodToReplace(final List<BodyDeclaration> list, MethodDeclaration method) {
+		for (final Iterator<BodyDeclaration> iterator= list.iterator(); iterator.hasNext();) {
+			final BodyDeclaration bodyDecl= iterator.next();
 			if (bodyDecl instanceof MethodDeclaration) {
 				final MethodDeclaration method2= (MethodDeclaration)bodyDecl;
 				if (method2.getName().getIdentifier().equals(method.getName().getIdentifier()) && method2.parameters().size() == method.parameters().size()) {
-					Iterator iterator1= method.parameters().iterator();
-					Iterator iterator2= method2.parameters().iterator();
+					Iterator<SingleVariableDeclaration> iterator1= method.parameters().iterator();
+					Iterator<SingleVariableDeclaration> iterator2= method2.parameters().iterator();
 					boolean ok= true;
 					while (iterator1.hasNext()) {
-						if (!((SingleVariableDeclaration)iterator1.next()).getType().subtreeMatch(new ASTMatcher(), ((SingleVariableDeclaration)iterator2.next()).getType())) {
+						if (!iterator1.next().getType().subtreeMatch(new ASTMatcher(), iterator2.next().getType())) {
 							ok= false;
 							break;
 						}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java
index ceea7d2..16e0814 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ public class StringBuilderChainGenerator extends StringBuilderGenerator {
 		}
 	}
 
+	@Override
 	protected void addElement(Object element, Block block) {
 		if (block != temporaryBlock) {
 			flushTemporaryExpression();
@@ -90,6 +91,7 @@ public class StringBuilderChainGenerator extends StringBuilderGenerator {
 		}
 	}
 
+	@Override
 	protected void addMemberCheckNull(Object member, boolean addSeparator) {
 		IfStatement ifStatement= fAst.newIfStatement();
 		ifStatement.setExpression(createInfixExpression(createMemberAccessExpression(member, true, true), Operator.NOT_EQUALS, fAst.newNullLiteral()));
@@ -111,6 +113,7 @@ public class StringBuilderChainGenerator extends StringBuilderGenerator {
 		toStringMethod.getBody().statements().add(ifStatement);
 	}
 
+	@Override
 	protected void complete() throws CoreException {
 		flushTemporaryExpression();
 		super.complete();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java
index ca6d430..a4671c0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class StringBuilderGenerator extends AbstractToStringGenerator {
 		}
 	}
 
+	@Override
 	protected void initialize() {
 		super.initialize();
 		fBuilderVariableName= createNameSuggestion(getContext().is50orHigher() ? "builder" : "buffer", NamingConventions.VK_LOCAL); //$NON-NLS-1$ //$NON-NLS-2$
@@ -84,6 +85,7 @@ public class StringBuilderGenerator extends AbstractToStringGenerator {
 		toStringMethod.getBody().statements().add(vStatement);
 	}
 
+	@Override
 	protected void complete() throws CoreException {
 		flushBuffer(null);
 		super.complete();
@@ -101,6 +103,7 @@ public class StringBuilderGenerator extends AbstractToStringGenerator {
 		}
 	}
 
+	@Override
 	protected void addMemberCheckNull(Object member, boolean addSeparator) {
 		IfStatement ifStatement= fAst.newIfStatement();
 		ifStatement.setExpression(createInfixExpression(createMemberAccessExpression(member, true, true), Operator.NOT_EQUALS, fAst.newNullLiteral()));
@@ -122,6 +125,7 @@ public class StringBuilderGenerator extends AbstractToStringGenerator {
 		toStringMethod.getBody().statements().add(ifStatement);
 	}
 
+	@Override
 	protected void addElement(Object element) {
 		addElement(element, toStringMethod.getBody());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java
index db17c40..5acb9a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,11 +78,13 @@ public class StringConcatenationGenerator extends AbstractToStringGenerator {
 
 	private SumExpressionBuilder toStringExpressionBuilder;
 
+	@Override
 	protected void initialize() {
 		super.initialize();
 		toStringExpressionBuilder= new SumExpressionBuilder(null);
 	}
 
+	@Override
 	protected void complete() throws CoreException {
 		super.complete();
 		ReturnStatement returnStatement= fAst.newReturnStatement();
@@ -90,6 +92,7 @@ public class StringConcatenationGenerator extends AbstractToStringGenerator {
 		toStringMethod.getBody().statements().add(returnStatement);
 	}
 
+	@Override
 	protected void addElement(Object element) {
 		addElement(element, toStringExpressionBuilder);
 	}
@@ -109,6 +112,7 @@ public class StringConcatenationGenerator extends AbstractToStringGenerator {
 		}
 	}
 
+	@Override
 	protected void addMember(Object member, boolean addSeparator) {
 		boolean[] interfaces= implementsInterfaces(getMemberType(member).getErasure(), new String[] { "java.util.Collection", "java.util.Map" }); //$NON-NLS-1$ //$NON-NLS-2$
 		if (getContext().isLimitItems() && getContext().isSkipNulls() && (interfaces[0] || interfaces[1] || getMemberType(member).isArray())) {
@@ -118,6 +122,7 @@ public class StringConcatenationGenerator extends AbstractToStringGenerator {
 		}
 	}
 
+	@Override
 	protected void addMemberCheckNull(Object member, boolean addSeparator) {
 		ConditionalExpression cExpression= fAst.newConditionalExpression();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java
index 7c914b4..a45d8fb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,16 +44,18 @@ import org.eclipse.jdt.core.dom.StringLiteral;
  * @since 3.5
  */
 public class StringFormatGenerator extends AbstractToStringGenerator {
-	private List arguments;
+	private List<Expression> arguments;
 
 	private StringBuffer buffer;
 
+	@Override
 	protected void initialize() {
 		super.initialize();
-		arguments= new ArrayList();
+		arguments= new ArrayList<Expression>();
 		buffer= new StringBuffer();
 	}
 
+	@Override
 	protected void complete() throws CoreException {
 		super.complete();
 		ReturnStatement rStatement= fAst.newReturnStatement();
@@ -80,6 +82,7 @@ public class StringFormatGenerator extends AbstractToStringGenerator {
 		toStringMethod.getBody().statements().add(rStatement);
 	}
 
+	@Override
 	protected Object processElement(String templateElement, Object member) {
 		if (templateElement == ToStringTemplateParser.MEMBER_VALUE_VARIABLE) {
 			return createMemberAccessExpression(member, false, false);
@@ -87,12 +90,13 @@ public class StringFormatGenerator extends AbstractToStringGenerator {
 		return super.processElement(templateElement, member);
 	}
 
+	@Override
 	protected void addElement(Object element) {
 		if (element instanceof String) {
 			buffer.append((String)element);
 		}
 		if (element instanceof Expression) {
-			arguments.add(element);
+			arguments.add((Expression) element);
 			if (getContext().is50orHigher()) {
 				buffer.append("%s"); //$NON-NLS-1$
 			} else {
@@ -101,6 +105,7 @@ public class StringFormatGenerator extends AbstractToStringGenerator {
 		}
 	}
 
+	@Override
 	protected Expression createMemberAccessExpression(Object member, boolean ignoreArraysCollections, boolean ignoreNulls) {
 		ITypeBinding type= getMemberType(member);
 		if (!getContext().is50orHigher() && type.isPrimitive()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java
index 9054bf6..3d0b39b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Mateusz Matela and others.
+ * Copyright (c) 2008, 2009 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java
index ec284ba..609449a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Mateusz Matela and others.
+ * Copyright (c) 2008, 2009 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java
index 1c9149f..622a1d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,7 +56,7 @@ public class ToStringTemplateParser {
 
 	protected String[] ending;
 
-	protected Map descriptions;
+	protected Map<String, String> descriptions;
 
 	/** The variable that inserts the name of the object's class **/
 	public final static String OBJECT_NAME_VARIABLE= "${object.className}"; //$NON-NLS-1$
@@ -154,7 +154,7 @@ public class ToStringTemplateParser {
 		String[] emptyArray= new String[0];
 		int beginningEnd= firstOccuranceOf(template, getMemberRelatedVariables());
 		if (beginningEnd >= 0) {
-			beginning= (String[])extractElements(template.substring(0, beginningEnd), getObjectRelatedVariables()).toArray(emptyArray);
+			beginning= extractElements(template.substring(0, beginningEnd), getObjectRelatedVariables()).toArray(emptyArray);
 		} else {
 			beginningEnd= 0;
 			beginning= emptyArray;
@@ -163,17 +163,17 @@ public class ToStringTemplateParser {
 		if (endingStart == -1)
 			endingStart= template.length();
 
-		ArrayList bodyList= extractElements(template.substring(beginningEnd, endingStart), getObjectAndMemberRelatedVariables());
+		ArrayList<String> bodyList= extractElements(template.substring(beginningEnd, endingStart), getObjectAndMemberRelatedVariables());
 
 		try {
-			separator= (String)bodyList.get(bodyList.size() - 1);
+			separator= bodyList.get(bodyList.size() - 1);
 			bodyList.remove(bodyList.size() - 1);
 		} catch (Exception e) {
 			separator= ""; //$NON-NLS-1$
 		}
 
-		body= (String[])bodyList.toArray(emptyArray);
-		ending= (String[])extractElements(template.substring(endingStart + ToStringTemplateParser.OTHER_MEMBERS_VARIABLE.length()), getObjectRelatedVariables()).toArray(emptyArray);
+		body= bodyList.toArray(emptyArray);
+		ending= extractElements(template.substring(endingStart + ToStringTemplateParser.OTHER_MEMBERS_VARIABLE.length()), getObjectRelatedVariables()).toArray(emptyArray);
 
 	}
 
@@ -187,8 +187,8 @@ public class ToStringTemplateParser {
 		return result;
 	}
 
-	protected ArrayList extractElements(String template, String[] wantedVariables) {
-		ArrayList result= new ArrayList();
+	protected ArrayList<String> extractElements(String template, String[] wantedVariables) {
+		ArrayList<String> result= new ArrayList<String>();
 		while (true) {
 			if (template.length() == 0)
 				break;
@@ -230,9 +230,9 @@ public class ToStringTemplateParser {
 		return separator;
 	}
 
-	public Map getVariableDescriptions() {
+	public Map<String, String> getVariableDescriptions() {
 		if (descriptions == null) {
-			descriptions= new HashMap();
+			descriptions= new HashMap<String, String>();
 			for (int i= 0; i < ToStringTemplateParser.VARIABLES.length; i++)
 				descriptions.put(ToStringTemplateParser.VARIABLES[i], ToStringTemplateParser.VARIABLE_DESCRIPTIONS[i]);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java
index 7d321d8..52b7d66 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,11 +23,12 @@ import org.eclipse.core.runtime.SubProgressMonitor;
 
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
 import org.eclipse.jdt.core.dom.IBinding;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 /**
  * Creates AST from a set of compilation units. Uses the
  * batch parser. Splits the set of compilation units in subsets
@@ -98,14 +99,14 @@ public class ASTBatchParser {
 				if (units.length <= MAX_AT_ONCE) {
 					createParser(units[0].getJavaProject()).createASTs(units, bindingKeys, requestor, new SubProgressMonitor(monitor, units.length));
 				} else {
-					List list= Arrays.asList(units);
+					List<ICompilationUnit> list= Arrays.asList(units);
 					int end= 0;
 					int cursor= 0;
 					while (cursor < units.length) {
 						end= Math.min(end + MAX_AT_ONCE, units.length);
-						List toParse= list.subList(cursor, end);
+						List<ICompilationUnit> toParse= list.subList(cursor, end);
 
-						createParser(units[0].getJavaProject()).createASTs((ICompilationUnit[]) toParse.toArray(new ICompilationUnit[toParse.size()]), bindingKeys, requestor,
+						createParser(units[0].getJavaProject()).createASTs(toParse.toArray(new ICompilationUnit[toParse.size()]), bindingKeys, requestor,
 								new SubProgressMonitor(monitor, toParse.size()));
 						cursor= end;
 					}
@@ -127,7 +128,7 @@ public class ASTBatchParser {
 	 * @return an AST parser capable of creating ASTs of compilation units in project
 	 */
 	protected ASTParser createParser(IJavaProject project) {
-		ASTParser result= ASTParser.newParser(AST.JLS3);
+		ASTParser result= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		result.setResolveBindings(true);
 		result.setProject(project);
 
@@ -138,25 +139,25 @@ public class ASTBatchParser {
 		if (hasOnlyOneProject(units))
 			return new ICompilationUnit[][] { units };
 
-		Hashtable projectTable= new Hashtable();
+		Hashtable<IJavaProject, ArrayList<ICompilationUnit>> projectTable= new Hashtable<IJavaProject, ArrayList<ICompilationUnit>>();
 
 		for (int i= 0; i < units.length; i++) {
 			ICompilationUnit unit= units[i];
-			ArrayList list= (ArrayList) projectTable.get(unit.getJavaProject());
+			ArrayList<ICompilationUnit> list= projectTable.get(unit.getJavaProject());
 			if (list == null) {
-				list= new ArrayList();
+				list= new ArrayList<ICompilationUnit>();
 				projectTable.put(unit.getJavaProject(), list);
 			}
 			list.add(unit);
 		}
 
-		Collection values= projectTable.values();
+		Collection<ArrayList<ICompilationUnit>> values= projectTable.values();
 
 		ICompilationUnit[][] result= new ICompilationUnit[values.size()][];
 		int i= 0;
-		for (Iterator iterator= values.iterator(); iterator.hasNext();) {
-			ArrayList cus= (ArrayList) iterator.next();
-			result[i]= (ICompilationUnit[]) cus.toArray(new ICompilationUnit[cus.size()]);
+		for (Iterator<ArrayList<ICompilationUnit>> iterator= values.iterator(); iterator.hasNext();) {
+			ArrayList<ICompilationUnit> cus= iterator.next();
+			result[i]= cus.toArray(new ICompilationUnit[cus.size()]);
 			i++;
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java
index a7a271c..5b6dbb9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ import org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.eclipse.jdt.core.dom.FieldAccess;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.ForStatement;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IfStatement;
 import org.eclipse.jdt.core.dom.ImportDeclaration;
 import org.eclipse.jdt.core.dom.InfixExpression;
@@ -108,6 +109,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.WhileStatement;
 import org.eclipse.jdt.core.dom.WildcardType;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 
 public class ASTFlattener extends GenericVisitor {
 
@@ -141,7 +144,7 @@ public class ASTFlattener extends GenericVisitor {
 	}
 
 	public static String asString(ASTNode node) {
-		Assert.isTrue(node.getAST().apiLevel() == AST.JLS3);
+		Assert.isTrue(node.getAST().apiLevel() == ASTProvider.SHARED_AST_LEVEL);
 
 		ASTFlattener flattener= new ASTFlattener();
 		node.accept(flattener);
@@ -149,6 +152,7 @@ public class ASTFlattener extends GenericVisitor {
 	}
 
 
+	@Override
 	protected boolean visitNode(ASTNode node) {
 		Assert.isTrue(false, "No implementation to flatten node: " + node.toString()); //$NON-NLS-1$
 		return false;
@@ -159,10 +163,10 @@ public class ASTFlattener extends GenericVisitor {
 	 * Used for 3.0 modifiers and annotations.
 	 *
 	 * @param ext the list of modifier and annotation nodes
-	 * (element type: <code>IExtendedModifiers</code>)
+	 * (element type: <code>IExtendedModifier</code>)
 	 */
-	private void printModifiers(List ext) {
-		for (Iterator it= ext.iterator(); it.hasNext();) {
+	private void printModifiers(List<IExtendedModifier> ext) {
+		for (Iterator<IExtendedModifier> it= ext.iterator(); it.hasNext();) {
 			ASTNode p= (ASTNode) it.next();
 			p.accept(this);
 			this.fBuffer.append(" ");//$NON-NLS-1$
@@ -173,6 +177,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(AnnotationTypeDeclaration)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -181,8 +186,8 @@ public class ASTFlattener extends GenericVisitor {
 		this.fBuffer.append("@interface ");//$NON-NLS-1$
 		node.getName().accept(this);
 		this.fBuffer.append(" {");//$NON-NLS-1$
-		for (Iterator it= node.bodyDeclarations().iterator(); it.hasNext();) {
-			BodyDeclaration d= (BodyDeclaration) it.next();
+		for (Iterator<BodyDeclaration> it= node.bodyDeclarations().iterator(); it.hasNext();) {
+			BodyDeclaration d= it.next();
 			d.accept(this);
 		}
 		this.fBuffer.append("}");//$NON-NLS-1$
@@ -193,6 +198,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(AnnotationTypeMemberDeclaration)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(AnnotationTypeMemberDeclaration node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -213,10 +219,12 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(AnonymousClassDeclaration)
 	 */
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		this.fBuffer.append("{");//$NON-NLS-1$
-		for (Iterator it= node.bodyDeclarations().iterator(); it.hasNext();) {
-			BodyDeclaration b= (BodyDeclaration) it.next();
+		List<BodyDeclaration> bodyDeclarations= node.bodyDeclarations();
+		for (Iterator<BodyDeclaration> it= bodyDeclarations.iterator(); it.hasNext();) {
+			BodyDeclaration b= it.next();
 			b.accept(this);
 		}
 		this.fBuffer.append("}");//$NON-NLS-1$
@@ -226,6 +234,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ArrayAccess)
 	 */
+	@Override
 	public boolean visit(ArrayAccess node) {
 		node.getArray().accept(this);
 		this.fBuffer.append("[");//$NON-NLS-1$
@@ -237,15 +246,16 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ArrayCreation)
 	 */
+	@Override
 	public boolean visit(ArrayCreation node) {
 		this.fBuffer.append("new ");//$NON-NLS-1$
 		ArrayType at= node.getType();
 		int dims= at.getDimensions();
 		Type elementType= at.getElementType();
 		elementType.accept(this);
-		for (Iterator it= node.dimensions().iterator(); it.hasNext();) {
+		for (Iterator<Expression> it= node.dimensions().iterator(); it.hasNext();) {
 			this.fBuffer.append("[");//$NON-NLS-1$
-			Expression e= (Expression) it.next();
+			Expression e= it.next();
 			e.accept(this);
 			this.fBuffer.append("]");//$NON-NLS-1$
 			dims--;
@@ -263,10 +273,11 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ArrayInitializer)
 	 */
+	@Override
 	public boolean visit(ArrayInitializer node) {
 		this.fBuffer.append("{");//$NON-NLS-1$
-		for (Iterator it= node.expressions().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.expressions().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -279,6 +290,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ArrayType)
 	 */
+	@Override
 	public boolean visit(ArrayType node) {
 		node.getComponentType().accept(this);
 		this.fBuffer.append("[]");//$NON-NLS-1$
@@ -288,6 +300,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(AssertStatement)
 	 */
+	@Override
 	public boolean visit(AssertStatement node) {
 		this.fBuffer.append("assert ");//$NON-NLS-1$
 		node.getExpression().accept(this);
@@ -302,6 +315,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(Assignment)
 	 */
+	@Override
 	public boolean visit(Assignment node) {
 		node.getLeftHandSide().accept(this);
 		this.fBuffer.append(node.getOperator().toString());
@@ -312,10 +326,11 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(Block)
 	 */
+	@Override
 	public boolean visit(Block node) {
 		this.fBuffer.append("{");//$NON-NLS-1$
-		for (Iterator it= node.statements().iterator(); it.hasNext();) {
-			Statement s= (Statement) it.next();
+		for (Iterator<Statement> it= node.statements().iterator(); it.hasNext();) {
+			Statement s= it.next();
 			s.accept(this);
 		}
 		this.fBuffer.append("}");//$NON-NLS-1$
@@ -326,6 +341,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(BlockComment)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(BlockComment node) {
 		this.fBuffer.append("/* */");//$NON-NLS-1$
 		return false;
@@ -334,6 +350,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(BooleanLiteral)
 	 */
+	@Override
 	public boolean visit(BooleanLiteral node) {
 		if (node.booleanValue() == true) {
 			this.fBuffer.append("true");//$NON-NLS-1$
@@ -346,6 +363,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(BreakStatement)
 	 */
+	@Override
 	public boolean visit(BreakStatement node) {
 		this.fBuffer.append("break");//$NON-NLS-1$
 		if (node.getLabel() != null) {
@@ -359,6 +377,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(CastExpression)
 	 */
+	@Override
 	public boolean visit(CastExpression node) {
 		this.fBuffer.append("(");//$NON-NLS-1$
 		node.getType().accept(this);
@@ -370,6 +389,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(CatchClause)
 	 */
+	@Override
 	public boolean visit(CatchClause node) {
 		this.fBuffer.append("catch (");//$NON-NLS-1$
 		node.getException().accept(this);
@@ -381,6 +401,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(CharacterLiteral)
 	 */
+	@Override
 	public boolean visit(CharacterLiteral node) {
 		this.fBuffer.append(node.getEscapedValue());
 		return false;
@@ -389,6 +410,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ClassInstanceCreation)
 	 */
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		if (node.getExpression() != null) {
 			node.getExpression().accept(this);
@@ -398,8 +420,8 @@ public class ASTFlattener extends GenericVisitor {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
-				for (Iterator it= node.typeArguments().iterator(); it.hasNext();) {
-					Type t= (Type) it.next();
+				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
+					Type t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(",");//$NON-NLS-1$
@@ -410,8 +432,8 @@ public class ASTFlattener extends GenericVisitor {
 			node.getType().accept(this);
 		}
 		this.fBuffer.append("(");//$NON-NLS-1$
-		for (Iterator it= node.arguments().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.arguments().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -427,16 +449,17 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(CompilationUnit)
 	 */
+	@Override
 	public boolean visit(CompilationUnit node) {
 		if (node.getPackage() != null) {
 			node.getPackage().accept(this);
 		}
-		for (Iterator it= node.imports().iterator(); it.hasNext();) {
-			ImportDeclaration d= (ImportDeclaration) it.next();
+		for (Iterator<ImportDeclaration> it= node.imports().iterator(); it.hasNext();) {
+			ImportDeclaration d= it.next();
 			d.accept(this);
 		}
-		for (Iterator it= node.types().iterator(); it.hasNext();) {
-			AbstractTypeDeclaration d= (AbstractTypeDeclaration) it.next();
+		for (Iterator<AbstractTypeDeclaration> it= node.types().iterator(); it.hasNext();) {
+			AbstractTypeDeclaration d= it.next();
 			d.accept(this);
 		}
 		return false;
@@ -445,6 +468,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ConditionalExpression)
 	 */
+	@Override
 	public boolean visit(ConditionalExpression node) {
 		node.getExpression().accept(this);
 		this.fBuffer.append("?");//$NON-NLS-1$
@@ -457,12 +481,13 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ConstructorInvocation)
 	 */
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
-				for (Iterator it= node.typeArguments().iterator(); it.hasNext();) {
-					Type t= (Type) it.next();
+				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
+					Type t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(",");//$NON-NLS-1$
@@ -472,8 +497,8 @@ public class ASTFlattener extends GenericVisitor {
 			}
 		}
 		this.fBuffer.append("this(");//$NON-NLS-1$
-		for (Iterator it= node.arguments().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.arguments().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -486,6 +511,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ContinueStatement)
 	 */
+	@Override
 	public boolean visit(ContinueStatement node) {
 		this.fBuffer.append("continue");//$NON-NLS-1$
 		if (node.getLabel() != null) {
@@ -499,6 +525,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(DoStatement)
 	 */
+	@Override
 	public boolean visit(DoStatement node) {
 		this.fBuffer.append("do ");//$NON-NLS-1$
 		node.getBody().accept(this);
@@ -511,6 +538,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(EmptyStatement)
 	 */
+	@Override
 	public boolean visit(EmptyStatement node) {
 		this.fBuffer.append(";");//$NON-NLS-1$
 		return false;
@@ -520,6 +548,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(EnhancedForStatement)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(EnhancedForStatement node) {
 		this.fBuffer.append("for (");//$NON-NLS-1$
 		node.getParameter().accept(this);
@@ -534,6 +563,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(EnumConstantDeclaration)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(EnumConstantDeclaration node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -542,8 +572,8 @@ public class ASTFlattener extends GenericVisitor {
 		node.getName().accept(this);
 		if (!node.arguments().isEmpty()) {
 			this.fBuffer.append("(");//$NON-NLS-1$
-			for (Iterator it= node.arguments().iterator(); it.hasNext();) {
-				Expression e= (Expression) it.next();
+			for (Iterator<Expression> it= node.arguments().iterator(); it.hasNext();) {
+				Expression e= it.next();
 				e.accept(this);
 				if (it.hasNext()) {
 					this.fBuffer.append(",");//$NON-NLS-1$
@@ -561,6 +591,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(EnumDeclaration)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -571,8 +602,8 @@ public class ASTFlattener extends GenericVisitor {
 		this.fBuffer.append(" ");//$NON-NLS-1$
 		if (!node.superInterfaceTypes().isEmpty()) {
 			this.fBuffer.append("implements ");//$NON-NLS-1$
-			for (Iterator it= node.superInterfaceTypes().iterator(); it.hasNext();) {
-				Type t= (Type) it.next();
+			for (Iterator<Type> it= node.superInterfaceTypes().iterator(); it.hasNext();) {
+				Type t= it.next();
 				t.accept(this);
 				if (it.hasNext()) {
 					this.fBuffer.append(", ");//$NON-NLS-1$
@@ -581,8 +612,8 @@ public class ASTFlattener extends GenericVisitor {
 			this.fBuffer.append(" ");//$NON-NLS-1$
 		}
 		this.fBuffer.append("{");//$NON-NLS-1$
-		for (Iterator it = node.enumConstants().iterator(); it.hasNext(); ) {
-			EnumConstantDeclaration d = (EnumConstantDeclaration) it.next();
+		for (Iterator<EnumConstantDeclaration> it = node.enumConstants().iterator(); it.hasNext(); ) {
+			EnumConstantDeclaration d = it.next();
 			d.accept(this);
 			// enum constant declarations do not include punctuation
 			if (it.hasNext()) {
@@ -592,8 +623,8 @@ public class ASTFlattener extends GenericVisitor {
 		}
 		if (!node.bodyDeclarations().isEmpty()) {
 			this.fBuffer.append("; ");//$NON-NLS-1$
-			for (Iterator it = node.bodyDeclarations().iterator(); it.hasNext(); ) {
-				BodyDeclaration d = (BodyDeclaration) it.next();
+			for (Iterator<BodyDeclaration> it = node.bodyDeclarations().iterator(); it.hasNext(); ) {
+				BodyDeclaration d = it.next();
 				d.accept(this);
 				// other body declarations include trailing punctuation
 			}
@@ -605,6 +636,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ExpressionStatement)
 	 */
+	@Override
 	public boolean visit(ExpressionStatement node) {
 		node.getExpression().accept(this);
 		this.fBuffer.append(";");//$NON-NLS-1$
@@ -614,6 +646,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(FieldAccess)
 	 */
+	@Override
 	public boolean visit(FieldAccess node) {
 		node.getExpression().accept(this);
 		this.fBuffer.append(".");//$NON-NLS-1$
@@ -624,6 +657,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(FieldDeclaration)
 	 */
+	@Override
 	public boolean visit(FieldDeclaration node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -633,8 +667,8 @@ public class ASTFlattener extends GenericVisitor {
 		}
 		node.getType().accept(this);
 		this.fBuffer.append(" ");//$NON-NLS-1$
-		for (Iterator it= node.fragments().iterator(); it.hasNext();) {
-			VariableDeclarationFragment f= (VariableDeclarationFragment) it.next();
+		for (Iterator<VariableDeclarationFragment> it= node.fragments().iterator(); it.hasNext();) {
+			VariableDeclarationFragment f= it.next();
 			f.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(", ");//$NON-NLS-1$
@@ -647,10 +681,11 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ForStatement)
 	 */
+	@Override
 	public boolean visit(ForStatement node) {
 		this.fBuffer.append("for (");//$NON-NLS-1$
-		for (Iterator it= node.initializers().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.initializers().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 		}
 		this.fBuffer.append("; ");//$NON-NLS-1$
@@ -658,8 +693,8 @@ public class ASTFlattener extends GenericVisitor {
 			node.getExpression().accept(this);
 		}
 		this.fBuffer.append("; ");//$NON-NLS-1$
-		for (Iterator it= node.updaters().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.updaters().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 		}
 		this.fBuffer.append(") ");//$NON-NLS-1$
@@ -670,6 +705,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(IfStatement)
 	 */
+	@Override
 	public boolean visit(IfStatement node) {
 		this.fBuffer.append("if (");//$NON-NLS-1$
 		node.getExpression().accept(this);
@@ -685,6 +721,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ImportDeclaration)
 	 */
+	@Override
 	public boolean visit(ImportDeclaration node) {
 		this.fBuffer.append("import ");//$NON-NLS-1$
 		if (node.getAST().apiLevel() >= AST.JLS3) {
@@ -703,18 +740,19 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(InfixExpression)
 	 */
+	@Override
 	public boolean visit(InfixExpression node) {
 		node.getLeftOperand().accept(this);
 		this.fBuffer.append(' '); // for cases like x= i - -1; or x= i++ + ++i;
 		this.fBuffer.append(node.getOperator().toString());
 		this.fBuffer.append(' ');
 		node.getRightOperand().accept(this);
-		final List extendedOperands = node.extendedOperands();
+		final List<Expression>extendedOperands = node.extendedOperands();
 		if (extendedOperands.size() != 0) {
 			this.fBuffer.append(' ');
-			for (Iterator it = extendedOperands.iterator(); it.hasNext(); ) {
+			for (Iterator<Expression> it = extendedOperands.iterator(); it.hasNext(); ) {
 				this.fBuffer.append(node.getOperator().toString()).append(' ');
-				Expression e = (Expression) it.next();
+				Expression e = it.next();
 				e.accept(this);
 			}
 		}
@@ -724,6 +762,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(InstanceofExpression)
 	 */
+	@Override
 	public boolean visit(InstanceofExpression node) {
 		node.getLeftOperand().accept(this);
 		this.fBuffer.append(" instanceof ");//$NON-NLS-1$
@@ -734,6 +773,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(Initializer)
 	 */
+	@Override
 	public boolean visit(Initializer node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -748,10 +788,11 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(Javadoc)
 	 */
+	@Override
 	public boolean visit(Javadoc node) {
 		this.fBuffer.append("/** ");//$NON-NLS-1$
-		for (Iterator it= node.tags().iterator(); it.hasNext();) {
-			ASTNode e= (ASTNode) it.next();
+		for (Iterator<TagElement> it= node.tags().iterator(); it.hasNext();) {
+			ASTNode e= it.next();
 			e.accept(this);
 		}
 		this.fBuffer.append("\n */");//$NON-NLS-1$
@@ -761,6 +802,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(LabeledStatement)
 	 */
+	@Override
 	public boolean visit(LabeledStatement node) {
 		node.getLabel().accept(this);
 		this.fBuffer.append(": ");//$NON-NLS-1$
@@ -772,6 +814,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(LineComment)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(LineComment node) {
 		this.fBuffer.append("//\n");//$NON-NLS-1$
 		return false;
@@ -781,6 +824,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(MarkerAnnotation)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(MarkerAnnotation node) {
 		this.fBuffer.append("@");//$NON-NLS-1$
 		node.getTypeName().accept(this);
@@ -791,6 +835,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(MemberRef)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(MemberRef node) {
 		if (node.getQualifier() != null) {
 			node.getQualifier().accept(this);
@@ -804,6 +849,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(MemberValuePair)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(MemberValuePair node) {
 		node.getName().accept(this);
 		this.fBuffer.append("=");//$NON-NLS-1$
@@ -815,6 +861,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(MethodRef)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(MethodRef node) {
 		if (node.getQualifier() != null) {
 			node.getQualifier().accept(this);
@@ -822,8 +869,8 @@ public class ASTFlattener extends GenericVisitor {
 		this.fBuffer.append("#");//$NON-NLS-1$
 		node.getName().accept(this);
 		this.fBuffer.append("(");//$NON-NLS-1$
-		for (Iterator it= node.parameters().iterator(); it.hasNext();) {
-			MethodRefParameter e= (MethodRefParameter) it.next();
+		for (Iterator<MethodRefParameter> it= node.parameters().iterator(); it.hasNext();) {
+			MethodRefParameter e= it.next();
 			e.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -837,6 +884,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(MethodRefParameter)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(MethodRefParameter node) {
 		node.getType().accept(this);
 		if (node.getAST().apiLevel() >= AST.JLS3) {
@@ -854,6 +902,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(MethodDeclaration)
 	 */
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -862,8 +911,8 @@ public class ASTFlattener extends GenericVisitor {
 			printModifiers(node.modifiers());
 			if (!node.typeParameters().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
-				for (Iterator it= node.typeParameters().iterator(); it.hasNext();) {
-					TypeParameter t= (TypeParameter) it.next();
+				for (Iterator<TypeParameter> it= node.typeParameters().iterator(); it.hasNext();) {
+					TypeParameter t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(", ");//$NON-NLS-1$
@@ -883,8 +932,8 @@ public class ASTFlattener extends GenericVisitor {
 		}
 		node.getName().accept(this);
 		this.fBuffer.append("(");//$NON-NLS-1$
-		for (Iterator it= node.parameters().iterator(); it.hasNext();) {
-			SingleVariableDeclaration v= (SingleVariableDeclaration) it.next();
+		for (Iterator<SingleVariableDeclaration> it= node.parameters().iterator(); it.hasNext();) {
+			SingleVariableDeclaration v= it.next();
 			v.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(", ");//$NON-NLS-1$
@@ -896,8 +945,8 @@ public class ASTFlattener extends GenericVisitor {
 		}
 		if (!node.thrownExceptions().isEmpty()) {
 			this.fBuffer.append(" throws ");//$NON-NLS-1$
-			for (Iterator it= node.thrownExceptions().iterator(); it.hasNext();) {
-				Name n= (Name) it.next();
+			for (Iterator<Name> it= node.thrownExceptions().iterator(); it.hasNext();) {
+				Name n= it.next();
 				n.accept(this);
 				if (it.hasNext()) {
 					this.fBuffer.append(", ");//$NON-NLS-1$
@@ -916,6 +965,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(MethodInvocation)
 	 */
+	@Override
 	public boolean visit(MethodInvocation node) {
 		if (node.getExpression() != null) {
 			node.getExpression().accept(this);
@@ -924,8 +974,8 @@ public class ASTFlattener extends GenericVisitor {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
-				for (Iterator it= node.typeArguments().iterator(); it.hasNext();) {
-					Type t= (Type) it.next();
+				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
+					Type t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(",");//$NON-NLS-1$
@@ -936,8 +986,8 @@ public class ASTFlattener extends GenericVisitor {
 		}
 		node.getName().accept(this);
 		this.fBuffer.append("(");//$NON-NLS-1$
-		for (Iterator it= node.arguments().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.arguments().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -951,6 +1001,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(Modifier)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(Modifier node) {
 		this.fBuffer.append(node.getKeyword().toString());
 		return false;
@@ -960,12 +1011,13 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(NormalAnnotation)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(NormalAnnotation node) {
 		this.fBuffer.append("@");//$NON-NLS-1$
 		node.getTypeName().accept(this);
 		this.fBuffer.append("(");//$NON-NLS-1$
-		for (Iterator it= node.values().iterator(); it.hasNext();) {
-			MemberValuePair p= (MemberValuePair) it.next();
+		for (Iterator<MemberValuePair> it= node.values().iterator(); it.hasNext();) {
+			MemberValuePair p= it.next();
 			p.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -978,6 +1030,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(NullLiteral)
 	 */
+	@Override
 	public boolean visit(NullLiteral node) {
 		this.fBuffer.append("null");//$NON-NLS-1$
 		return false;
@@ -986,6 +1039,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(NumberLiteral)
 	 */
+	@Override
 	public boolean visit(NumberLiteral node) {
 		this.fBuffer.append(node.getToken());
 		return false;
@@ -994,13 +1048,14 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(PackageDeclaration)
 	 */
+	@Override
 	public boolean visit(PackageDeclaration node) {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			if (node.getJavadoc() != null) {
 				node.getJavadoc().accept(this);
 			}
-			for (Iterator it= node.annotations().iterator(); it.hasNext();) {
-				Annotation p= (Annotation) it.next();
+			for (Iterator<Annotation> it= node.annotations().iterator(); it.hasNext();) {
+				Annotation p= it.next();
 				p.accept(this);
 				this.fBuffer.append(" ");//$NON-NLS-1$
 			}
@@ -1015,11 +1070,12 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(ParameterizedType)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(ParameterizedType node) {
 		node.getType().accept(this);
 		this.fBuffer.append("<");//$NON-NLS-1$
-		for (Iterator it= node.typeArguments().iterator(); it.hasNext();) {
-			Type t= (Type) it.next();
+		for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
+			Type t= it.next();
 			t.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -1032,6 +1088,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ParenthesizedExpression)
 	 */
+	@Override
 	public boolean visit(ParenthesizedExpression node) {
 		this.fBuffer.append("(");//$NON-NLS-1$
 		node.getExpression().accept(this);
@@ -1042,6 +1099,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(PostfixExpression)
 	 */
+	@Override
 	public boolean visit(PostfixExpression node) {
 		node.getOperand().accept(this);
 		this.fBuffer.append(node.getOperator().toString());
@@ -1051,6 +1109,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(PrefixExpression)
 	 */
+	@Override
 	public boolean visit(PrefixExpression node) {
 		this.fBuffer.append(node.getOperator().toString());
 		node.getOperand().accept(this);
@@ -1060,6 +1119,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(PrimitiveType)
 	 */
+	@Override
 	public boolean visit(PrimitiveType node) {
 		this.fBuffer.append(node.getPrimitiveTypeCode().toString());
 		return false;
@@ -1068,6 +1128,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(QualifiedName)
 	 */
+	@Override
 	public boolean visit(QualifiedName node) {
 		node.getQualifier().accept(this);
 		this.fBuffer.append(".");//$NON-NLS-1$
@@ -1079,6 +1140,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(QualifiedType)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(QualifiedType node) {
 		node.getQualifier().accept(this);
 		this.fBuffer.append(".");//$NON-NLS-1$
@@ -1089,6 +1151,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ReturnStatement)
 	 */
+	@Override
 	public boolean visit(ReturnStatement node) {
 		this.fBuffer.append("return");//$NON-NLS-1$
 		if (node.getExpression() != null) {
@@ -1102,6 +1165,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SimpleName)
 	 */
+	@Override
 	public boolean visit(SimpleName node) {
 		this.fBuffer.append(node.getIdentifier());
 		return false;
@@ -1110,6 +1174,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SimpleType)
 	 */
+	@Override
 	public boolean visit(SimpleType node) {
 		return true;
 	}
@@ -1118,6 +1183,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(SingleMemberAnnotation)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(SingleMemberAnnotation node) {
 		this.fBuffer.append("@");//$NON-NLS-1$
 		node.getTypeName().accept(this);
@@ -1130,6 +1196,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SingleVariableDeclaration)
 	 */
+	@Override
 	public boolean visit(SingleVariableDeclaration node) {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			printModifiers(node.modifiers());
@@ -1155,6 +1222,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(StringLiteral)
 	 */
+	@Override
 	public boolean visit(StringLiteral node) {
 		this.fBuffer.append(node.getEscapedValue());
 		return false;
@@ -1163,6 +1231,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SuperConstructorInvocation)
 	 */
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		if (node.getExpression() != null) {
 			node.getExpression().accept(this);
@@ -1171,8 +1240,8 @@ public class ASTFlattener extends GenericVisitor {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
-				for (Iterator it= node.typeArguments().iterator(); it.hasNext();) {
-					Type t= (Type) it.next();
+				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
+					Type t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(",");//$NON-NLS-1$
@@ -1182,8 +1251,8 @@ public class ASTFlattener extends GenericVisitor {
 			}
 		}
 		this.fBuffer.append("super(");//$NON-NLS-1$
-		for (Iterator it= node.arguments().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.arguments().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -1196,6 +1265,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SuperFieldAccess)
 	 */
+	@Override
 	public boolean visit(SuperFieldAccess node) {
 		if (node.getQualifier() != null) {
 			node.getQualifier().accept(this);
@@ -1209,6 +1279,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SuperMethodInvocation)
 	 */
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		if (node.getQualifier() != null) {
 			node.getQualifier().accept(this);
@@ -1218,8 +1289,8 @@ public class ASTFlattener extends GenericVisitor {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
-				for (Iterator it= node.typeArguments().iterator(); it.hasNext();) {
-					Type t= (Type) it.next();
+				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
+					Type t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(",");//$NON-NLS-1$
@@ -1230,8 +1301,8 @@ public class ASTFlattener extends GenericVisitor {
 		}
 		node.getName().accept(this);
 		this.fBuffer.append("(");//$NON-NLS-1$
-		for (Iterator it= node.arguments().iterator(); it.hasNext();) {
-			Expression e= (Expression) it.next();
+		for (Iterator<Expression> it= node.arguments().iterator(); it.hasNext();) {
+			Expression e= it.next();
 			e.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(",");//$NON-NLS-1$
@@ -1244,6 +1315,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SwitchCase)
 	 */
+	@Override
 	public boolean visit(SwitchCase node) {
 		if (node.isDefault()) {
 			this.fBuffer.append("default :");//$NON-NLS-1$
@@ -1258,13 +1330,14 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SwitchStatement)
 	 */
+	@Override
 	public boolean visit(SwitchStatement node) {
 		this.fBuffer.append("switch (");//$NON-NLS-1$
 		node.getExpression().accept(this);
 		this.fBuffer.append(") ");//$NON-NLS-1$
 		this.fBuffer.append("{");//$NON-NLS-1$
-		for (Iterator it= node.statements().iterator(); it.hasNext();) {
-			Statement s= (Statement) it.next();
+		for (Iterator<Statement> it= node.statements().iterator(); it.hasNext();) {
+			Statement s= it.next();
 			s.accept(this);
 		}
 		this.fBuffer.append("}");//$NON-NLS-1$
@@ -1274,6 +1347,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(SynchronizedStatement)
 	 */
+	@Override
 	public boolean visit(SynchronizedStatement node) {
 		this.fBuffer.append("synchronized (");//$NON-NLS-1$
 		node.getExpression().accept(this);
@@ -1286,6 +1360,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(TagElement)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(TagElement node) {
 		if (node.isNested()) {
 			// nested tags are always enclosed in braces
@@ -1300,8 +1375,8 @@ public class ASTFlattener extends GenericVisitor {
 			previousRequiresWhiteSpace= true;
 		}
 		boolean previousRequiresNewLine= false;
-		for (Iterator it= node.fragments().iterator(); it.hasNext();) {
-			ASTNode e= (ASTNode) it.next();
+		for (Iterator<? extends ASTNode> it= node.fragments().iterator(); it.hasNext();) {
+			ASTNode e= it.next();
 			// assume text elements include necessary leading and trailing whitespace
 			// but Name, MemberRef, MethodRef, and nested TagElement do not include white space
 			boolean currentIncludesWhiteSpace= (e instanceof TextElement);
@@ -1326,6 +1401,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(TextElement)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(TextElement node) {
 		this.fBuffer.append(node.getText());
 		return false;
@@ -1334,6 +1410,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ThisExpression)
 	 */
+	@Override
 	public boolean visit(ThisExpression node) {
 		if (node.getQualifier() != null) {
 			node.getQualifier().accept(this);
@@ -1346,6 +1423,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(ThrowStatement)
 	 */
+	@Override
 	public boolean visit(ThrowStatement node) {
 		this.fBuffer.append("throw ");//$NON-NLS-1$
 		node.getExpression().accept(this);
@@ -1356,12 +1434,13 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(TryStatement)
 	 */
+	@Override
 	public boolean visit(TryStatement node) {
 		this.fBuffer.append("try ");//$NON-NLS-1$
 		node.getBody().accept(this);
 		this.fBuffer.append(" ");//$NON-NLS-1$
-		for (Iterator it= node.catchClauses().iterator(); it.hasNext();) {
-			CatchClause cc= (CatchClause) it.next();
+		for (Iterator<CatchClause> it= node.catchClauses().iterator(); it.hasNext();) {
+			CatchClause cc= it.next();
 			cc.accept(this);
 		}
 		if (node.getFinally() != null) {
@@ -1374,6 +1453,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(TypeDeclaration)
 	 */
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
@@ -1386,8 +1466,8 @@ public class ASTFlattener extends GenericVisitor {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			if (!node.typeParameters().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
-				for (Iterator it= node.typeParameters().iterator(); it.hasNext();) {
-					TypeParameter t= (TypeParameter) it.next();
+				for (Iterator<TypeParameter> it= node.typeParameters().iterator(); it.hasNext();) {
+					TypeParameter t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(",");//$NON-NLS-1$
@@ -1405,8 +1485,8 @@ public class ASTFlattener extends GenericVisitor {
 			}
 			if (!node.superInterfaceTypes().isEmpty()) {
 				this.fBuffer.append(node.isInterface() ? "extends " : "implements ");//$NON-NLS-2$//$NON-NLS-1$
-				for (Iterator it= node.superInterfaceTypes().iterator(); it.hasNext();) {
-					Type t= (Type) it.next();
+				for (Iterator<Type> it= node.superInterfaceTypes().iterator(); it.hasNext();) {
+					Type t= it.next();
 					t.accept(this);
 					if (it.hasNext()) {
 						this.fBuffer.append(", ");//$NON-NLS-1$
@@ -1417,8 +1497,8 @@ public class ASTFlattener extends GenericVisitor {
 		}
 		this.fBuffer.append("{");//$NON-NLS-1$
 		BodyDeclaration prev= null;
-		for (Iterator it= node.bodyDeclarations().iterator(); it.hasNext();) {
-			BodyDeclaration d= (BodyDeclaration) it.next();
+		for (Iterator<BodyDeclaration> it= node.bodyDeclarations().iterator(); it.hasNext();) {
+			BodyDeclaration d= it.next();
 			if (prev instanceof EnumConstantDeclaration) {
 				// enum constant declarations do not include punctuation
 				if (d instanceof EnumConstantDeclaration) {
@@ -1440,6 +1520,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(TypeDeclarationStatement)
 	 */
+	@Override
 	public boolean visit(TypeDeclarationStatement node) {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			node.getDeclaration().accept(this);
@@ -1450,6 +1531,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(TypeLiteral)
 	 */
+	@Override
 	public boolean visit(TypeLiteral node) {
 		node.getType().accept(this);
 		this.fBuffer.append(".class");//$NON-NLS-1$
@@ -1460,12 +1542,13 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(TypeParameter)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(TypeParameter node) {
 		node.getName().accept(this);
 		if (!node.typeBounds().isEmpty()) {
 			this.fBuffer.append(" extends ");//$NON-NLS-1$
-			for (Iterator it= node.typeBounds().iterator(); it.hasNext();) {
-				Type t= (Type) it.next();
+			for (Iterator<Type> it= node.typeBounds().iterator(); it.hasNext();) {
+				Type t= it.next();
 				t.accept(this);
 				if (it.hasNext()) {
 					this.fBuffer.append(" & ");//$NON-NLS-1$
@@ -1478,14 +1561,15 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(VariableDeclarationExpression)
 	 */
+	@Override
 	public boolean visit(VariableDeclarationExpression node) {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		node.getType().accept(this);
 		this.fBuffer.append(" ");//$NON-NLS-1$
-		for (Iterator it= node.fragments().iterator(); it.hasNext();) {
-			VariableDeclarationFragment f= (VariableDeclarationFragment) it.next();
+		for (Iterator<VariableDeclarationFragment> it= node.fragments().iterator(); it.hasNext();) {
+			VariableDeclarationFragment f= it.next();
 			f.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(", ");//$NON-NLS-1$
@@ -1497,6 +1581,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(VariableDeclarationFragment)
 	 */
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		node.getName().accept(this);
 		for (int i= 0; i < node.getExtraDimensions(); i++) {
@@ -1512,14 +1597,15 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(VariableDeclarationStatement)
 	 */
+	@Override
 	public boolean visit(VariableDeclarationStatement node) {
 		if (node.getAST().apiLevel() >= AST.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		node.getType().accept(this);
 		this.fBuffer.append(" ");//$NON-NLS-1$
-		for (Iterator it= node.fragments().iterator(); it.hasNext();) {
-			VariableDeclarationFragment f= (VariableDeclarationFragment) it.next();
+		for (Iterator<VariableDeclarationFragment> it= node.fragments().iterator(); it.hasNext();) {
+			VariableDeclarationFragment f= it.next();
 			f.accept(this);
 			if (it.hasNext()) {
 				this.fBuffer.append(", ");//$NON-NLS-1$
@@ -1533,6 +1619,7 @@ public class ASTFlattener extends GenericVisitor {
 	 * @see ASTVisitor#visit(WildcardType)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean visit(WildcardType node) {
 		this.fBuffer.append("?");//$NON-NLS-1$
 		Type bound= node.getBound();
@@ -1550,6 +1637,7 @@ public class ASTFlattener extends GenericVisitor {
 	/*
 	 * @see ASTVisitor#visit(WhileStatement)
 	 */
+	@Override
 	public boolean visit(WhileStatement node) {
 		this.fBuffer.append("while (");//$NON-NLS-1$
 		node.getExpression().accept(this);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java
index 0485e3a..b47e7eb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,10 +16,13 @@ import java.util.List;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.InfixExpression;
+import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.Name;
@@ -29,7 +32,6 @@ import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.TypeParameter;
 import org.eclipse.jdt.core.dom.VariableDeclaration;
-import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 
 public class ASTNodeFactory {
 
@@ -48,6 +50,7 @@ public class ASTNodeFactory {
 			super(true);
 		}
 
+		@Override
 		protected boolean visitNode(ASTNode node) {
 			node.setSourceRange(-1, 0);
 			return true;
@@ -81,7 +84,7 @@ public class ASTNodeFactory {
 		ASTParser p= ASTParser.newParser(ast.apiLevel());
 		p.setSource(buffer.toString().toCharArray());
 		CompilationUnit root= (CompilationUnit) p.createAST(null);
-		List list= root.types();
+		List<AbstractTypeDeclaration> list= root.types();
 		TypeDeclaration typeDecl= (TypeDeclaration) list.get(0);
 		MethodDeclaration methodDecl= typeDecl.getMethods()[0];
 		TypeParameter tp= (TypeParameter) methodDecl.typeParameters().get(0);
@@ -98,7 +101,7 @@ public class ASTNodeFactory {
 		ASTParser p= ASTParser.newParser(ast.apiLevel());
 		p.setSource(buffer.toString().toCharArray());
 		CompilationUnit root= (CompilationUnit) p.createAST(null);
-		List list= root.types();
+		List<AbstractTypeDeclaration> list= root.types();
 		TypeDeclaration typeDecl= (TypeDeclaration) list.get(0);
 		MethodDeclaration methodDecl= typeDecl.getMethods()[0];
 		ASTNode type= methodDecl.getReturnType2();
@@ -178,7 +181,7 @@ public class ASTNodeFactory {
 	 * @param modifiers The modifier flags describing the modifier nodes to create.
 	 * @return Returns a list of nodes of type {@link Modifier}.
 	 */
-	public static List newModifiers(AST ast, int modifiers) {
+	public static List<Modifier> newModifiers(AST ast, int modifiers) {
 		return ast.newModifiers(modifiers);
 	}
 
@@ -190,8 +193,8 @@ public class ASTNodeFactory {
 	 * to use {@link ASTNode#copySubtrees(AST, List)}.
 	 * @return Returns a list of nodes of type {@link Modifier}.
 	 */
-	public static List newModifiers(AST ast, List modifierNodes) {
-		List res= new ArrayList(modifierNodes.size());
+	public static List<Modifier> newModifiers(AST ast, List<? extends IExtendedModifier> modifierNodes) {
+		List<Modifier> res= new ArrayList<Modifier>(modifierNodes.size());
 		for (int i= 0; i < modifierNodes.size(); i++) {
 			Object curr= modifierNodes.get(i);
 			if (curr instanceof Modifier) {
@@ -201,14 +204,14 @@ public class ASTNodeFactory {
 		return res;
 	}
 
-	public static Expression newInfixExpression(AST ast, Operator operator, ArrayList/*<Expression>*/ operands) {
+	public static Expression newInfixExpression(AST ast, Operator operator, ArrayList<Expression> operands) {
 		if (operands.size() == 1)
-			return (Expression) operands.get(0);
+			return operands.get(0);
 
 		InfixExpression result= ast.newInfixExpression();
 		result.setOperator(operator);
-		result.setLeftOperand((Expression) operands.get(0));
-		result.setRightOperand((Expression) operands.get(1));
+		result.setLeftOperand(operands.get(0));
+		result.setRightOperand(operands.get(1));
 		result.extendedOperands().addAll(operands.subList(2, operands.size()));
 		return result;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java
index a18e10d..1e7dcd3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,6 @@ import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
-import org.eclipse.jdt.core.dom.ArrayAccess;
 import org.eclipse.jdt.core.dom.ArrayType;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
@@ -57,6 +56,7 @@ import org.eclipse.jdt.core.dom.FieldAccess;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.ForStatement;
 import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
@@ -73,13 +73,10 @@ import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.PrimitiveType;
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.QualifiedType;
-import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SimpleType;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
-import org.eclipse.jdt.core.dom.SwitchCase;
-import org.eclipse.jdt.core.dom.SwitchStatement;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.VariableDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
@@ -88,7 +85,6 @@ import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.WhileStatement;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
-import org.eclipse.jdt.internal.corext.refactoring.code.OperatorPrecedence;
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
 import org.eclipse.jdt.internal.corext.util.Strings;
 
@@ -122,7 +118,7 @@ public class ASTNodes {
 		return flattener.getResult();
 	}
 
-	public static String asFormattedString(ASTNode node, int indent, String lineDelim, Map options) {
+	public static String asFormattedString(ASTNode node, int indent, String lineDelim, Map<String, String> options) {
 		String unformatted= asString(node);
 		TextEdit edit= CodeFormatterUtil.format2(node, unformatted, indent, lineDelim, options);
 		if (edit != null) {
@@ -177,10 +173,10 @@ public class ASTNodes {
      * @param node the node in question
      * @return the list that contains the node or <code>null</code>
      */
-    public static List getContainingList(ASTNode node) {
+    public static List<? extends ASTNode> getContainingList(ASTNode node) {
     	StructuralPropertyDescriptor locationInParent= node.getLocationInParent();
     	if (locationInParent != null && locationInParent.isChildListProperty()) {
-    		return (List) node.getParent().getStructuralProperty(locationInParent);
+    		return (List<? extends ASTNode>) node.getParent().getStructuralProperty(locationInParent);
     	}
     	return null;
     }
@@ -190,22 +186,23 @@ public class ASTNodes {
 	 * @param node the node to get the children for
 	 * @return the children
 	 */
-	public static List getChildren(ASTNode node) {
+	public static List<ASTNode> getChildren(ASTNode node) {
 		ChildrenCollector visitor= new ChildrenCollector();
 		node.accept(visitor);
 		return visitor.result;
 	}
 
 	private static class ChildrenCollector extends GenericVisitor {
-		public List result;
+		public List<ASTNode> result;
 
 		public ChildrenCollector() {
 			super(true);
 			result= null;
 		}
+		@Override
 		protected boolean visitNode(ASTNode node) {
 			if (result == null) { // first visitNode: on the node's parent: do nothing, return true
-				result= new ArrayList();
+				result= new ArrayList<ASTNode>();
 				return true;
 			}
 			result.add(node);
@@ -285,7 +282,7 @@ public class ASTNodes {
 		return dim;
 	}
 
-	public static List getModifiers(VariableDeclaration declaration) {
+	public static List<IExtendedModifier> getModifiers(VariableDeclaration declaration) {
 		Assert.isNotNull(declaration);
 		if (declaration instanceof SingleVariableDeclaration) {
 			return ((SingleVariableDeclaration)declaration).modifiers();
@@ -296,7 +293,7 @@ public class ASTNodes {
 			else if (parent instanceof VariableDeclarationStatement)
 				return ((VariableDeclarationStatement)parent).modifiers();
 		}
-		return new ArrayList(0);
+		return new ArrayList<IExtendedModifier>(0);
 	}
 
 	public static boolean isSingleDeclaration(VariableDeclaration declaration) {
@@ -329,7 +326,7 @@ public class ASTNodes {
 		return Modifier.isStatic(declaration.getModifiers());
 	}
 
-	public static List getBodyDeclarations(ASTNode node) {
+	public static List<BodyDeclaration> getBodyDeclarations(ASTNode node) {
 		if (node instanceof AbstractTypeDeclaration) {
 			return ((AbstractTypeDeclaration)node).bodyDeclarations();
 		} else if (node instanceof AnonymousClassDeclaration) {
@@ -340,6 +337,13 @@ public class ASTNodes {
 		return null;
 	}
 
+	/**
+	 * Returns the structural property descriptor for the "bodyDeclarations" property
+	 * of this node (element type: {@link BodyDeclaration}).
+	 * 
+	 * @param node the node, either an {@link AbstractTypeDeclaration} or an {@link AnonymousClassDeclaration}
+	 * @return the property descriptor
+	 */
 	public static ChildListPropertyDescriptor getBodyDeclarationsProperty(ASTNode node) {
 		if (node instanceof AbstractTypeDeclaration) {
 			return ((AbstractTypeDeclaration)node).getBodyDeclarationsProperty();
@@ -354,18 +358,22 @@ public class ASTNodes {
 	public static String getTypeName(Type type) {
 		final StringBuffer buffer= new StringBuffer();
 		ASTVisitor visitor= new ASTVisitor() {
+			@Override
 			public boolean visit(PrimitiveType node) {
 				buffer.append(node.getPrimitiveTypeCode().toString());
 				return false;
 			}
+			@Override
 			public boolean visit(SimpleName node) {
 				buffer.append(node.getIdentifier());
 				return false;
 			}
+			@Override
 			public boolean visit(QualifiedName node) {
 				buffer.append(node.getName().getIdentifier());
 				return false;
 			}
+			@Override
 			public void endVisit(ArrayType node) {
 				buffer.append("[]"); //$NON-NLS-1$
 			}
@@ -429,63 +437,11 @@ public class ASTNodes {
 			|| locationInParent == DoStatement.BODY_PROPERTY;
 	}
 
-	public static boolean needsParentheses(Expression expression) {
-		int type= expression.getNodeType();
-		return type == ASTNode.INFIX_EXPRESSION || type == ASTNode.CONDITIONAL_EXPRESSION ||
-			type == ASTNode.PREFIX_EXPRESSION || type == ASTNode.POSTFIX_EXPRESSION ||
-			type == ASTNode.CAST_EXPRESSION || type == ASTNode.INSTANCEOF_EXPRESSION;
-	}
-
-	/**
-	 * Checks whether <code>substitute</code> must be parenthesized when used to replace
-	 * <code>location</code>.
-	 * 
-	 * @param substitute substitute expression
-	 * @param location expression to be replaced
-	 * @return <code>true</code> iff <code>substitute</code> must be parenthesized when used to
-	 *         replace <code>location</code>
-	 */
-	public static boolean substituteMustBeParenthesized(Expression substitute, Expression location) {
-		if (substitute instanceof Assignment) //for esthetic reasons
-			return true;
-
-    	if (!needsParentheses(substitute))
-    		return false;
-
-    	ASTNode parent= location.getParent();
-    	StructuralPropertyDescriptor locationInParent= location.getLocationInParent();
-		if (locationInParent instanceof ChildListPropertyDescriptor && locationInParent != InfixExpression.EXTENDED_OPERANDS_PROPERTY) {
-			// e.g. argument lists of MethodInvocation, ClassInstanceCreation, ...
-   			return false;
-    	} else if (locationInParent == VariableDeclarationFragment.INITIALIZER_PROPERTY) {
-   			return false;
-    	} else if (locationInParent == SingleVariableDeclaration.INITIALIZER_PROPERTY) {
-    		return false;
-    	} else if (locationInParent == ReturnStatement.EXPRESSION_PROPERTY) {
-    		return false;
-    	} else if (locationInParent == EnhancedForStatement.EXPRESSION_PROPERTY) {
-    		return false;
-    	} else if (locationInParent == SwitchStatement.EXPRESSION_PROPERTY) {
-    		return false;
-    	} else if (locationInParent == SwitchCase.EXPRESSION_PROPERTY) {
-    		return false;
-    	} else if (locationInParent == ArrayAccess.INDEX_PROPERTY) {
-    		return false;
-    	} else if (parent instanceof Expression) {
-			int substitutePrecedence= OperatorPrecedence.getExpressionPrecedence(substitute);
-			int locationPrecedence= OperatorPrecedence.getExpressionPrecedence((Expression)parent);
-			if (substitutePrecedence > locationPrecedence)
-				return false;
-		}
-
-        return true;
-	}
-
 	/**
 	 * Returns the type to which an inlined variable initializer should be cast, or
 	 * <code>null</code> if no cast is necessary.
 	 * 
-	 * @param initializer the initializer expression of the variable to inline 
+	 * @param initializer the initializer expression of the variable to inline
 	 * @param reference the reference to the variable (which is to be inlined)
 	 * @return a type binding to which the initializer should be cast, or <code>null</code> iff no cast is necessary
 	 * @since 3.6
@@ -496,16 +452,28 @@ public class ASTNodes {
 		if (initializerType == null || referenceType == null)
 			return null;
 		
-		if (initializerType.isPrimitive() && referenceType.isPrimitive() && ! referenceType.isEqualTo(initializerType))
+		if (initializerType.isPrimitive() && referenceType.isPrimitive() && ! referenceType.isEqualTo(initializerType)) {
 			return referenceType;
-		else if (initializerType.isPrimitive() && ! referenceType.isPrimitive()) { // initializer is autoboxed
+			
+		} else if (initializerType.isPrimitive() && ! referenceType.isPrimitive()) { // initializer is autoboxed
 			ITypeBinding unboxedReferenceType= Bindings.getUnboxedTypeBinding(referenceType, reference.getAST());
-			if (unboxedReferenceType != initializerType)
+			if (!unboxedReferenceType.isEqualTo(initializerType))
 				return unboxedReferenceType;
 			else if (needsExplicitBoxing(reference))
 				return referenceType;
-		} else if (! TypeRules.canAssign(initializerType, referenceType))
-			return referenceType;
+			
+		} else if (! initializerType.isPrimitive() && referenceType.isPrimitive()) { // initializer is autounboxed
+			ITypeBinding unboxedInitializerType= Bindings.getUnboxedTypeBinding(initializerType, reference.getAST());
+			if (!unboxedInitializerType.isEqualTo(referenceType))
+				return referenceType;
+			
+		} else if (initializerType.isRawType() && referenceType.isParameterizedType()) {
+			return referenceType; // don't lose the unchecked conversion
+			
+		} else if (! TypeRules.canAssign(initializerType, referenceType)) {
+			if (!Bindings.containsTypeVariables(referenceType))
+				return referenceType;
+		}
 		
 		return null;
 	}
@@ -541,7 +509,7 @@ public class ASTNodes {
 	 * @param parentClass the class of the sought ancestor node
 	 * @return the closest ancestor of <code>node</code> that is an instance of <code>parentClass</code>, or <code>null</code> if none
 	 */
-	public static ASTNode getParent(ASTNode node, Class parentClass) {
+	public static ASTNode getParent(ASTNode node, Class<? extends ASTNode> parentClass) {
 		do {
 			node= node.getParent();
 		} while (node != null && !parentClass.isInstance(node));
@@ -704,7 +672,7 @@ public class ASTNodes {
 		if (root == node)
 			return problems;
 		final int iterations= computeIterations(scope);
-		List result= new ArrayList(5);
+		List<IProblem> result= new ArrayList<IProblem>(5);
 		for (int i= 0; i < problems.length; i++) {
 			IProblem problem= problems[i];
 			boolean consider= false;
@@ -729,7 +697,7 @@ public class ASTNodes {
 				} while ((temp= temp.getParent()) != null && count > 0);
 			}
 		}
-		return (IProblem[]) result.toArray(new IProblem[result.size()]);
+		return result.toArray(new IProblem[result.size()]);
 	}
 
 	public static Message[] getMessages(ASTNode node, int flags) {
@@ -740,7 +708,7 @@ public class ASTNodes {
 		if (root == node)
 			return messages;
 		final int iterations= computeIterations(flags);
-		List result= new ArrayList(5);
+		List<Message> result= new ArrayList<Message>(5);
 		for (int i= 0; i < messages.length; i++) {
 			Message message= messages[i];
 			ASTNode temp= node;
@@ -756,7 +724,7 @@ public class ASTNodes {
 				}
 			} while ((temp= temp.getParent()) != null && count > 0);
 		}
-		return (Message[]) result.toArray(new Message[result.size()]);
+		return result.toArray(new Message[result.size()]);
 	}
 
 	private static int computeIterations(int flags) {
@@ -818,7 +786,7 @@ public class ASTNodes {
 	 * @param container a list containing objects of type <code>BodyDeclaration</code>
 	 * @return the insertion index to be used
 	 */
-	public static int getInsertionIndex(BodyDeclaration member, List container) {
+	public static int getInsertionIndex(BodyDeclaration member, List<? extends BodyDeclaration> container) {
 		int containerSize= container.size();
 
 		MembersOrderPreferenceCache orderStore= JavaPlugin.getDefault().getMemberOrderPreferenceCache();
@@ -829,7 +797,7 @@ public class ASTNodes {
 		int insertPosOrderIndex= -1;
 
 		for (int i= containerSize - 1; i >= 0; i--) {
-			int currOrderIndex= getOrderPreference((BodyDeclaration) container.get(i), orderStore);
+			int currOrderIndex= getOrderPreference(container.get(i), orderStore);
 			if (orderIndex == currOrderIndex) {
 				if (insertPosOrderIndex != orderIndex) { // no perfect match yet
 					insertPos= i + 1; // after a same kind
@@ -856,6 +824,7 @@ public class ASTNodes {
 		} else {
 			final SimpleName[] result= new SimpleName[1];
 			ASTVisitor visitor= new ASTVisitor() {
+				@Override
 				public boolean visit(QualifiedName qualifiedName) {
 					Name left= qualifiedName.getQualifier();
 					if (left instanceof SimpleName)
@@ -873,6 +842,7 @@ public class ASTNodes {
 	public static SimpleType getLeftMostSimpleType(QualifiedType type) {
 		final SimpleType[] result= new SimpleType[1];
 		ASTVisitor visitor= new ASTVisitor() {
+			@Override
 			public boolean visit(QualifiedType qualifiedType) {
 				Type left= qualifiedType.getQualifier();
 				if (left instanceof SimpleType)
@@ -913,6 +883,7 @@ public class ASTNodes {
 	 */
 	public static void setFlagsToAST(ASTNode root, final int flags) {
 		root.accept(new GenericVisitor(true) {
+			@Override
 			protected boolean visitNode(ASTNode node) {
 				node.setFlags(node.getFlags() | flags);
 				return true;
@@ -943,7 +914,7 @@ public class ASTNodes {
 		}
 	}
 
-	public static Modifier findModifierNode(int flag, List modifiers) {
+	public static Modifier findModifierNode(int flag, List<IExtendedModifier> modifiers) {
 		for (int i= 0; i < modifiers.size(); i++) {
 			Object curr= modifiers.get(i);
 			if (curr instanceof Modifier && ((Modifier) curr).getKeyword().toFlagValue() == flag) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java
index 76535e6..b87a343 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Bindings.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,7 +173,7 @@ public class Bindings {
 	}
 
 	public static String getTypeQualifiedName(ITypeBinding type) {
-		List result= new ArrayList(5);
+		List<String> result= new ArrayList<String>(5);
 		createName(type, false, result);
 
 		StringBuffer buffer= new StringBuffer();
@@ -181,7 +181,7 @@ public class Bindings {
 			if (i > 0) {
 				buffer.append('.');
 			}
-			buffer.append(((String) result.get(i)));
+			buffer.append(result.get(i));
 		}
 		return buffer.toString();
 	}
@@ -226,7 +226,7 @@ public class Bindings {
 	}
 
 
-	private static void createName(ITypeBinding type, boolean includePackage, List list) {
+	private static void createName(ITypeBinding type, boolean includePackage, List<String> list) {
 		ITypeBinding baseType= type;
 		if (type.isArray()) {
 			baseType= type.getElementType();
@@ -251,15 +251,15 @@ public class Bindings {
 
 
 	public static String[] getNameComponents(ITypeBinding type) {
-		List result= new ArrayList(5);
+		List<String> result= new ArrayList<String>(5);
 		createName(type, false, result);
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	public static String[] getAllNameComponents(ITypeBinding type) {
-		List result= new ArrayList(5);
+		List<String> result= new ArrayList<String>(5);
 		createName(type, true, result);
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	public static ITypeBinding getTopLevelType(ITypeBinding type) {
@@ -308,7 +308,7 @@ public class Bindings {
 	 * Finds the field specified by <code>fieldName</code> in
 	 * the type hierarchy denoted by the given type. Returns <code>null</code> if no such field
 	 * exists. If the field is defined in more than one super type only the first match is
-	 * returned. First the super class is examined and than the implemented interfaces.
+	 * returned. First the super class is examined and then the implemented interfaces.
 	 * @param type The type to search the field in
 	 * @param fieldName The name of the field to find
 	 * @return the variable binding representing the field
@@ -361,7 +361,8 @@ public class Bindings {
 	 * Finds the method specified by <code>methodName</code> and </code>parameters</code> in
 	 * the type hierarchy denoted by the given type. Returns <code>null</code> if no such method
 	 * exists. If the method is defined in more than one super type only the first match is
-	 * returned. First the super class is examined and than the implemented interfaces.
+	 * returned. First the super class is examined and then the implemented interfaces.
+	 * 
 	 * @param type The type to search the method in
 	 * @param methodName The name of the method to find
 	 * @param parameters The parameter types of the method to find. If <code>null</code> is passed, only the name is matched and parameters are ignored.
@@ -414,7 +415,7 @@ public class Bindings {
 	 * Finds the method specified by <code>methodName</code> and </code>parameters</code> in
 	 * the type hierarchy denoted by the given type. Returns <code>null</code> if no such method
 	 * exists. If the method is defined in more than one super type only the first match is
-	 * returned. First the super class is examined and than the implemented interfaces.
+	 * returned. First the super class is examined and then the implemented interfaces.
 	 * @param type the type to search the method in
 	 * @param methodName The name of the method to find
 	 * @param parameters The parameter types of the method to find. If <code>null</code> is passed, only the name is matched and parameters are ignored.
@@ -458,7 +459,7 @@ public class Bindings {
 	/**
 	 * Finds a method in the hierarchy of <code>type</code> that is overridden by </code>binding</code>.
 	 * Returns <code>null</code> if no such method exists. If the method is defined in more than one super type only the first match is
-	 * returned. First the super class is examined and than the implemented interfaces.
+	 * returned. First the super class is examined and then the implemented interfaces.
 	 * @param type The type to search the method in
 	 * @param binding The method that overrides
 	 * @return the method binding overridden the method
@@ -533,13 +534,13 @@ public class Bindings {
 	 * @return all super types (excluding <code>type</code>)
 	 */
 	public static ITypeBinding[] getAllSuperTypes(ITypeBinding type) {
-		Set result= new HashSet();
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
 		collectSuperTypes(type, result);
 		result.remove(type);
-		return (ITypeBinding[]) result.toArray(new ITypeBinding[result.size()]);
+		return result.toArray(new ITypeBinding[result.size()]);
 	}
 
-	private static void collectSuperTypes(ITypeBinding curr, Set collection) {
+	private static void collectSuperTypes(ITypeBinding curr, Set<ITypeBinding> collection) {
 		if (collection.add(curr)) {
 			ITypeBinding[] interfaces= curr.getInterfaces();
 			for (int i= 0; i < interfaces.length; i++) {
@@ -670,8 +671,8 @@ public class Bindings {
 			//Compare type parameter bounds:
 			for (int i= 0; i < m1TypeParams.length; i++) {
 				// loop over m1TypeParams, which is either empty, or equally long as m2TypeParams
-				Set m1Bounds= getTypeBoundsForSubsignature(m1TypeParams[i]);
-				Set m2Bounds= getTypeBoundsForSubsignature(m2TypeParams[i]);
+				Set<ITypeBinding> m1Bounds= getTypeBoundsForSubsignature(m1TypeParams[i]);
+				Set<ITypeBinding> m2Bounds= getTypeBoundsForSubsignature(m2TypeParams[i]);
 				if (! m1Bounds.equals(m2Bounds))
 					return false;
 			}
@@ -680,11 +681,10 @@ public class Bindings {
 				return true;
 			for (int i= 0; i < m1Params.length; i++) {
 				ITypeBinding m1Param= m1Params[i];
-				if (containsTypeVariables(m1Param))
+				ITypeBinding m2Param= m2Params[i];
+				if (containsTypeVariables(m1Param) || m1Param.isRawType())
 					m1Param= m1Param.getErasure(); // try to achieve effect of "rename type variables"
-				else if (m1Param.isRawType())
-					m1Param= m1Param.getTypeDeclaration();
-				if (! (equals(m1Param, m2Params[i].getErasure()))) // can erase m2
+				if (! (equals(m1Param, m2Param) || equals(m1Param, m2Param.getErasure())))
 					return false;
 			}
 			return true;
@@ -695,16 +695,17 @@ public class Bindings {
 				return true;
 			for (int i= 0; i < m1Params.length; i++) {
 				ITypeBinding m1Param= m1Params[i];
+				ITypeBinding m2Param= m2Params[i];
 				if (m1Param.isRawType())
 					m1Param= m1Param.getTypeDeclaration();
-				if (! (equals(m1Param, m2Params[i].getErasure()))) // can erase m2
+				if (! (equals(m1Param, m2Param) || equals(m1Param, m2Param.getErasure())))
 					return false;
 			}
 			return true;
 		}
 	}
 
-	private static boolean containsTypeVariables(ITypeBinding type) {
+	static boolean containsTypeVariables(ITypeBinding type) {
 		if (type.isTypeVariable())
 			return true;
 		if (type.isArray())
@@ -727,13 +728,13 @@ public class Bindings {
 		return false;
 	}
 
-	private static Set getTypeBoundsForSubsignature(ITypeBinding typeParameter) {
+	private static Set<ITypeBinding> getTypeBoundsForSubsignature(ITypeBinding typeParameter) {
 		ITypeBinding[] typeBounds= typeParameter.getTypeBounds();
 		int count= typeBounds.length;
 		if (count == 0)
-			return Collections.EMPTY_SET;
+			return Collections.emptySet();
 
-		Set result= new HashSet(typeBounds.length);
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>(typeBounds.length);
 		for (int i= 0; i < typeBounds.length; i++) {
 			ITypeBinding bound= typeBounds[i];
 			if ("java.lang.Object".equals(typeBounds[0].getQualifiedName())) //$NON-NLS-1$
@@ -837,22 +838,45 @@ public class Bindings {
 
 	/**
 	 * Returns <code>true</code> if the given type is a super type of a candidate.
-	 * <code>true</code> is returned if the two type bindings are identical (TODO)
+	 * <code>true</code> is returned if the two type bindings are identical.
+	 * 
+	 * <p><b>Warning:</b> With the addition of generics, this method is valid in less
+	 * cases than before. Consider using {@link TypeRules#canAssign(ITypeBinding, ITypeBinding)}
+	 * if you're dealing with types of variables. The classical notion of supertypes
+	 * only makes sense if you really need to walk the type hierarchy but don't need to play
+	 * the assignment rules.</p>
+	 * 
 	 * @param possibleSuperType the type to inspect
 	 * @param type the type whose super types are looked at
 	 * @return <code>true</code> iff <code>possibleSuperType</code> is
 	 * 		a super type of <code>type</code> or is equal to it
 	 */
 	public static boolean isSuperType(ITypeBinding possibleSuperType, ITypeBinding type) {
+		return isSuperType(possibleSuperType, type, true);
+	}
+	
+	/**
+	 * Returns <code>true</code> if the given type is a super type of a candidate.
+	 * <code>true</code> is returned if the two type bindings are identical (TODO)
+	 * @param possibleSuperType the type to inspect
+	 * @param type the type whose super types are looked at
+	 * @param considerTypeArguments if <code>true</code>, consider type arguments of <code>type</code>
+	 * @return <code>true</code> iff <code>possibleSuperType</code> is
+	 * 		a super type of <code>type</code> or is equal to it
+	 */
+	public static boolean isSuperType(ITypeBinding possibleSuperType, ITypeBinding type, boolean considerTypeArguments) {
 		if (type.isArray() || type.isPrimitive()) {
 			return false;
 		}
+		if (! considerTypeArguments) {
+			type= type.getTypeDeclaration();
+		}
 		if (Bindings.equals(type, possibleSuperType)) {
 			return true;
 		}
 		ITypeBinding superClass= type.getSuperclass();
 		if (superClass != null) {
-			if (isSuperType(possibleSuperType, superClass)) {
+			if (isSuperType(possibleSuperType, superClass, considerTypeArguments)) {
 				return true;
 			}
 		}
@@ -860,7 +884,7 @@ public class Bindings {
 		if (possibleSuperType.isInterface()) {
 			ITypeBinding[] superInterfaces= type.getInterfaces();
 			for (int i= 0; i < superInterfaces.length; i++) {
-				if (isSuperType(possibleSuperType, superInterfaces[i])) {
+				if (isSuperType(possibleSuperType, superInterfaces[i], considerTypeArguments)) {
 					return true;
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java
index 4a0265c..d002994 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ public class BodyDeclarationRewrite {
 	}
 
 	public void insert(BodyDeclaration decl, TextEditGroup description) {
-		List container= ASTNodes.getBodyDeclarations(fTypeNode);
+		List<BodyDeclaration> container= ASTNodes.getBodyDeclarations(fTypeNode);
 		int index= ASTNodes.getInsertionIndex(decl, container);
 		fListRewrite.insertAt(decl, index, description);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/CodeScopeBuilder.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/CodeScopeBuilder.java
index 0686c69..b029887 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/CodeScopeBuilder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/CodeScopeBuilder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.Block;
@@ -35,8 +34,8 @@ public class CodeScopeBuilder extends ASTVisitor {
 		private Scope fParent;
 		private int fStart;
 		private int fLength;
-		private List fNames;
-		private List fChildren;
+		private List<String> fNames;
+		private List<Scope> fChildren;
 		private int fCursorOffset;
 		Scope(Scope parent, int start, int length) {
 			fParent= parent;
@@ -50,20 +49,20 @@ public class CodeScopeBuilder extends ASTVisitor {
 		}
 		private void addChild(Scope child) {
 			if (fChildren == null)
-				fChildren= new ArrayList(2);
+				fChildren= new ArrayList<Scope>(2);
 			fChildren.add(child);
 		}
 		private void addName(String name) {
 			if (fNames == null)
-				fNames= new ArrayList(2);
+				fNames= new ArrayList<String>(2);
 			fNames.add(name);
 		}
 		public Scope findScope(int start, int length) {
 			if (fStart <= start && start + length <= fStart + fLength) {
 				if (fChildren == null)
 					return this;
-				for (Iterator iter= fChildren.iterator(); iter.hasNext();) {
-					Scope scope= ((Scope)iter.next()).findScope(start, length);
+				for (Iterator<Scope> iter= fChildren.iterator(); iter.hasNext();) {
+					Scope scope= iter.next().findScope(start, length);
 					if (scope != null)
 						return scope;
 				}
@@ -85,8 +84,8 @@ public class CodeScopeBuilder extends ASTVisitor {
 			if (internalIsInUse(name))
 				return true;
 			if (fChildren != null) {
-				for (Iterator iter= fChildren.iterator(); iter.hasNext();) {
-					Scope child= (Scope) iter.next();
+				for (Iterator<Scope> iter= fChildren.iterator(); iter.hasNext();) {
+					Scope child= iter.next();
 					if (fCursorOffset < child.fStart && child.isInUseDown(name)) {
 						return true;
 					}
@@ -107,8 +106,8 @@ public class CodeScopeBuilder extends ASTVisitor {
 				return true;
 			if (fChildren == null)
 				return false;
-			for (Iterator iter= fChildren.iterator(); iter.hasNext();) {
-				Scope scope= (Scope) iter.next();
+			for (Iterator<Scope> iter= fChildren.iterator(); iter.hasNext();) {
+				Scope scope= iter.next();
 				if (scope.isInUseDown(name))
 					return true;
 			}
@@ -119,7 +118,7 @@ public class CodeScopeBuilder extends ASTVisitor {
 	private IBinding fIgnoreBinding;
 	private Selection fIgnoreRange;
 	private Scope fScope;
-	private List fScopes;
+	private List<Scope> fScopes;
 
 	public static Scope perform(BodyDeclaration node, IBinding ignore) {
 		CodeScopeBuilder collector= new CodeScopeBuilder(node, ignore);
@@ -135,16 +134,17 @@ public class CodeScopeBuilder extends ASTVisitor {
 
 	private CodeScopeBuilder(ASTNode node, IBinding ignore) {
 		fScope= new Scope(null, node.getStartPosition(), node.getLength());
-		fScopes= new ArrayList();
+		fScopes= new ArrayList<Scope>();
 		fIgnoreBinding= ignore;
 	}
 
 	private CodeScopeBuilder(ASTNode node, Selection ignore) {
 		fScope= new Scope(null, node.getStartPosition(), node.getLength());
-		fScopes= new ArrayList();
+		fScopes= new ArrayList<Scope>();
 		fIgnoreRange= ignore;
 	}
 
+	@Override
 	public boolean visit(CatchClause node) {
 		// open a new scope for the exception declaration.
 		fScopes.add(fScope);
@@ -152,10 +152,12 @@ public class CodeScopeBuilder extends ASTVisitor {
 		return true;
 	}
 
+	@Override
 	public void endVisit(CatchClause node) {
-		fScope= (Scope)fScopes.remove(fScopes.size() - 1);
+		fScope= fScopes.remove(fScopes.size() - 1);
 	}
 
+	@Override
 	public boolean visit(SimpleName node) {
 		if (fIgnoreBinding != null && Bindings.equals(fIgnoreBinding, node.resolveBinding()))
 			return false;
@@ -165,12 +167,14 @@ public class CodeScopeBuilder extends ASTVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(QualifiedName node) {
 		// only consider the left most identifier.
 		node.getQualifier().accept(this);
 		return false;
 	}
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		Expression receiver= node.getExpression();
 		if (receiver == null) {
@@ -184,41 +188,42 @@ public class CodeScopeBuilder extends ASTVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(TypeDeclarationStatement node) {
-		if (node.getAST().apiLevel() == AST.JLS2) {
-			fScope.addName(node.getTypeDeclaration().getName().getIdentifier());
-		} else {
-			fScope.addName(node.getDeclaration().getName().getIdentifier());
-		}
+		fScope.addName(node.getDeclaration().getName().getIdentifier());
 		return false;
 	}
 
+	@Override
 	public boolean visit(Block node) {
 		fScopes.add(fScope);
 		fScope= new Scope(fScope, node.getStartPosition(), node.getLength());
 		return true;
 	}
 
+	@Override
 	public void endVisit(Block node) {
-		fScope= (Scope)fScopes.remove(fScopes.size() - 1);
+		fScope= fScopes.remove(fScopes.size() - 1);
 	}
 
+	@Override
 	public boolean visit(ForStatement node) {
 		fScopes.add(fScope);
 		fScope= new Scope(fScope, node.getStartPosition(), node.getLength());
 		return true;
 	}
 
+	@Override
 	public void endVisit(ForStatement node) {
-		fScope= (Scope)fScopes.remove(fScopes.size() - 1);
+		fScope= fScopes.remove(fScopes.size() - 1);
 	}
 
-	private void accept(List list) {
+	private void accept(List<Expression> list) {
 		int size;
 		if (list == null || (size= list.size()) == 0)
 			return;
 		for (int i= 0; i < size; i++) {
-			((ASTNode)list.get(i)).accept(this);
+			list.get(i).accept(this);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java
index 4ea82ae..8b900f5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -135,192 +135,254 @@ public class GenericVisitor extends ASTVisitor {
 		// do nothing
 	}
 
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ArrayAccess node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ArrayCreation node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ArrayInitializer node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ArrayType node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(AssertStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(Assignment node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(Block node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(BooleanLiteral node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(BreakStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(CastExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(CatchClause node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(CharacterLiteral node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(CompilationUnit node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ConditionalExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ContinueStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(DoStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(EmptyStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ExpressionStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(FieldAccess node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(FieldDeclaration node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ForStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(IfStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ImportDeclaration node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(InfixExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(InstanceofExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(Initializer node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(Javadoc node) {
 		if (super.visit(node))
 			return visitNode(node);
 		else
 			return false;
 	}
+	@Override
 	public boolean visit(LabeledStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(MethodInvocation node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(NullLiteral node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(NumberLiteral node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(PackageDeclaration node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ParenthesizedExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(PostfixExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(PrefixExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(PrimitiveType node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(QualifiedName node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ReturnStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SimpleName node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SimpleType node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(StringLiteral node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SuperFieldAccess node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SwitchCase node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SwitchStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SynchronizedStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ThisExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(ThrowStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(TryStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(TypeDeclarationStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(TypeLiteral node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(SingleVariableDeclaration node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(VariableDeclarationExpression node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(VariableDeclarationStatement node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		return visitNode(node);
 	}
+	@Override
 	public boolean visit(WhileStatement node) {
 		return visitNode(node);
 	}
@@ -328,313 +390,396 @@ public class GenericVisitor extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AnnotationTypeDeclaration)
 	 */
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration)
 	 */
+	@Override
 	public boolean visit(AnnotationTypeMemberDeclaration node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.BlockComment)
 	 */
+	@Override
 	public boolean visit(BlockComment node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.EnhancedForStatement)
 	 */
+	@Override
 	public boolean visit(EnhancedForStatement node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.EnumConstantDeclaration)
 	 */
+	@Override
 	public boolean visit(EnumConstantDeclaration node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.EnumDeclaration)
 	 */
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.LineComment)
 	 */
+	@Override
 	public boolean visit(LineComment node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MarkerAnnotation)
 	 */
+	@Override
 	public boolean visit(MarkerAnnotation node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MemberRef)
 	 */
+	@Override
 	public boolean visit(MemberRef node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MemberValuePair)
 	 */
+	@Override
 	public boolean visit(MemberValuePair node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodRef)
 	 */
+	@Override
 	public boolean visit(MethodRef node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodRefParameter)
 	 */
+	@Override
 	public boolean visit(MethodRefParameter node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Modifier)
 	 */
+	@Override
 	public boolean visit(Modifier node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.NormalAnnotation)
 	 */
+	@Override
 	public boolean visit(NormalAnnotation node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ParameterizedType)
 	 */
+	@Override
 	public boolean visit(ParameterizedType node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.QualifiedType)
 	 */
+	@Override
 	public boolean visit(QualifiedType node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SingleMemberAnnotation)
 	 */
+	@Override
 	public boolean visit(SingleMemberAnnotation node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TagElement)
 	 */
+	@Override
 	public boolean visit(TagElement node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TextElement)
 	 */
+	@Override
 	public boolean visit(TextElement node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeParameter)
 	 */
+	@Override
 	public boolean visit(TypeParameter node) {
 		return visitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.WildcardType)
 	 */
+	@Override
 	public boolean visit(WildcardType node) {
 		return visitNode(node);
 	}
 
+	@Override
 	public void endVisit(AnonymousClassDeclaration node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ArrayAccess node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ArrayCreation node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ArrayInitializer node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ArrayType node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(AssertStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(Assignment node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(Block node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(BooleanLiteral node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(BreakStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(CastExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(CatchClause node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(CharacterLiteral node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ClassInstanceCreation node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(CompilationUnit node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ConditionalExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ConstructorInvocation node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ContinueStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(DoStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(EmptyStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ExpressionStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(FieldAccess node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(FieldDeclaration node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ForStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(IfStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ImportDeclaration node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(InfixExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(InstanceofExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(Initializer node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(Javadoc node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(LabeledStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(MethodDeclaration node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(MethodInvocation node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(NullLiteral node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(NumberLiteral node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(PackageDeclaration node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ParenthesizedExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(PostfixExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(PrefixExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(PrimitiveType node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(QualifiedName node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ReturnStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SimpleName node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SimpleType node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(StringLiteral node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SuperConstructorInvocation node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SuperFieldAccess node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SuperMethodInvocation node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SwitchCase node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SwitchStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SynchronizedStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ThisExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(ThrowStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(TryStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(TypeDeclaration node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(TypeDeclarationStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(TypeLiteral node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(SingleVariableDeclaration node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(VariableDeclarationExpression node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(VariableDeclarationStatement node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(VariableDeclarationFragment node) {
 		endVisitNode(node);
 	}
+	@Override
 	public void endVisit(WhileStatement node) {
 		endVisitNode(node);
 	}
@@ -643,126 +788,147 @@ public class GenericVisitor extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.AnnotationTypeDeclaration)
 	 */
+	@Override
 	public void endVisit(AnnotationTypeDeclaration node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration)
 	 */
+	@Override
 	public void endVisit(AnnotationTypeMemberDeclaration node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.BlockComment)
 	 */
+	@Override
 	public void endVisit(BlockComment node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.EnhancedForStatement)
 	 */
+	@Override
 	public void endVisit(EnhancedForStatement node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.EnumConstantDeclaration)
 	 */
+	@Override
 	public void endVisit(EnumConstantDeclaration node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.EnumDeclaration)
 	 */
+	@Override
 	public void endVisit(EnumDeclaration node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.LineComment)
 	 */
+	@Override
 	public void endVisit(LineComment node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.MarkerAnnotation)
 	 */
+	@Override
 	public void endVisit(MarkerAnnotation node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.MemberRef)
 	 */
+	@Override
 	public void endVisit(MemberRef node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.MemberValuePair)
 	 */
+	@Override
 	public void endVisit(MemberValuePair node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.MethodRef)
 	 */
+	@Override
 	public void endVisit(MethodRef node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.MethodRefParameter)
 	 */
+	@Override
 	public void endVisit(MethodRefParameter node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.Modifier)
 	 */
+	@Override
 	public void endVisit(Modifier node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.NormalAnnotation)
 	 */
+	@Override
 	public void endVisit(NormalAnnotation node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.ParameterizedType)
 	 */
+	@Override
 	public void endVisit(ParameterizedType node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.QualifiedType)
 	 */
+	@Override
 	public void endVisit(QualifiedType node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.SingleMemberAnnotation)
 	 */
+	@Override
 	public void endVisit(SingleMemberAnnotation node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.TagElement)
 	 */
+	@Override
 	public void endVisit(TagElement node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.TextElement)
 	 */
+	@Override
 	public void endVisit(TextElement node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.TypeParameter)
 	 */
+	@Override
 	public void endVisit(TypeParameter node) {
 		endVisitNode(node);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#endVisit(org.eclipse.jdt.core.dom.WildcardType)
 	 */
+	@Override
 	public void endVisit(WildcardType node) {
 		endVisitNode(node);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java
index 0408beb..4d75ad9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,12 +122,11 @@ import org.eclipse.jdt.core.dom.WildcardType;
  * </p>
  * 
  * <p>
- * This class has a visit(XX node) method for every for every class (concrete or abstract) XX in the
- * ASTNode hierarchy. In this class' default implementations of these methods, the method
- * corresponding to a given ASTNode descendant class will call (and return the return value of) the
- * visit(YY) method for it's superclass YY, with the exception of the visit(ASTNode) method which
- * simply returns true, since ASTNode doesn't have a superclass that is within the ASTNode
- * hierarchy.
+ * This class has a visit(XX node) method for every class (concrete or abstract) XX in the ASTNode
+ * hierarchy. In this class' default implementations of these methods, the method corresponding to a
+ * given ASTNode descendant class will call (and return the return value of) the visit(YY) method
+ * for it's superclass YY, with the exception of the visit(ASTNode) method which simply returns
+ * true, since ASTNode doesn't have a superclass that is within the ASTNode hierarchy.
  * </p>
  * 
  * <p>
@@ -185,10 +184,12 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 		// do nothing
 	}
 
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(AnonymousClassDeclaration node) {
 		endVisit((ASTNode)node);
 	}
@@ -211,78 +212,96 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 		endVisit((BodyDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		return visit((AbstractTypeDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(AnnotationTypeDeclaration node) {
 		endVisit((AbstractTypeDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		return visit((AbstractTypeDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(EnumDeclaration node) {
 		endVisit((AbstractTypeDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		return visit((AbstractTypeDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(TypeDeclaration node) {
 		endVisit((AbstractTypeDeclaration)node);
 	}
 
 	//---- End AbstractTypeDeclaration Hierarchy ---------------------------
 
+	@Override
 	public boolean visit(AnnotationTypeMemberDeclaration node) {
 		return visit((BodyDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(AnnotationTypeMemberDeclaration node) {
 		endVisit((BodyDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(EnumConstantDeclaration node) {
 		return visit((BodyDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(EnumConstantDeclaration node) {
 		endVisit((BodyDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(FieldDeclaration node) {
 		return visit((BodyDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(FieldDeclaration node) {
 		endVisit((BodyDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(Initializer node) {
 		return visit((BodyDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(Initializer node) {
 		endVisit((BodyDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		return visit((BodyDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(MethodDeclaration node) {
 		endVisit((BodyDeclaration)node);
 	}
 
 //---- End BodyDeclaration Hierarchy -----------------------------
 
+	@Override
 	public boolean visit(CatchClause node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(CatchClause node) {
 		endVisit((ASTNode)node);
 	}
@@ -296,36 +315,44 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(BlockComment node) {
 		return visit((Comment)node);
 	}
 
+	@Override
 	public void endVisit(BlockComment node) {
 		endVisit((Comment)node);
 	}
 
+	@Override
 	public boolean visit(Javadoc node) {
 		return visit((Comment)node);
 	}
 
+	@Override
 	public void endVisit(Javadoc node) {
 		endVisit((Comment)node);
 	}
 
+	@Override
 	public boolean visit(LineComment node) {
 		return visit((Comment)node);
 	}
 
+	@Override
 	public void endVisit(LineComment node) {
 		endVisit((Comment)node);
 	}
 
 //---- End Comment Hierarchy -----------------------------
 
+	@Override
 	public boolean visit(CompilationUnit node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(CompilationUnit node) {
 		endVisit((ASTNode)node);
 	}
@@ -348,132 +375,164 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(MarkerAnnotation node) {
 		return visit((Annotation)node);
 	}
 
+	@Override
 	public void endVisit(MarkerAnnotation node) {
 		endVisit((Annotation)node);
 	}
 
+	@Override
 	public boolean visit(NormalAnnotation node) {
 		return visit((Annotation)node);
 	}
 
+	@Override
 	public void endVisit(NormalAnnotation node) {
 		endVisit((Annotation)node);
 	}
 
+	@Override
 	public boolean visit(SingleMemberAnnotation node) {
 		return visit((Annotation)node);
 	}
 
+	@Override
 	public void endVisit(SingleMemberAnnotation node) {
 		endVisit((Annotation)node);
 	}
 
 	//---- End Annotation Hierarchy -----------------------------
 
+	@Override
 	public boolean visit(ArrayAccess node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(ArrayAccess node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(ArrayCreation node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(ArrayCreation node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(ArrayInitializer node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(ArrayInitializer node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(Assignment node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(Assignment node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(BooleanLiteral node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(BooleanLiteral node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(CastExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(CastExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(CharacterLiteral node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(CharacterLiteral node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(ClassInstanceCreation node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(ConditionalExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(ConditionalExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(FieldAccess node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(FieldAccess node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(InfixExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(InfixExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(InstanceofExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(InstanceofExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(MethodInvocation node) {
 		endVisit((Expression)node);
 	}
@@ -487,166 +546,206 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(QualifiedName node) {
 		return visit((Name)node);
 	}
 
+	@Override
 	public void endVisit(QualifiedName node) {
 		endVisit((Name)node);
 	}
 
+	@Override
 	public boolean visit(SimpleName node) {
 		return visit((Name)node);
 	}
 
+	@Override
 	public void endVisit(SimpleName node) {
 		endVisit((Name)node);
 	}
 
 	//---- End Name Hierarchy ------------------------------------
 
+	@Override
 	public boolean visit(NullLiteral node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(NullLiteral node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(NumberLiteral node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(NumberLiteral node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(ParenthesizedExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(ParenthesizedExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(PostfixExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(PostfixExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(PrefixExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(PrefixExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(StringLiteral node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(StringLiteral node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(SuperFieldAccess node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(SuperFieldAccess node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(SuperMethodInvocation node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(ThisExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(ThisExpression node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(TypeLiteral node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(TypeLiteral node) {
 		endVisit((Expression)node);
 	}
 
+	@Override
 	public boolean visit(VariableDeclarationExpression node) {
 		return visit((Expression)node);
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationExpression node) {
 		endVisit((Expression)node);
 	}
 
 	//---- End Expression Hierarchy ----------------------------------
 
+	@Override
 	public boolean visit(ImportDeclaration node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(ImportDeclaration node) {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(MemberRef node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(MemberRef node) {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(MemberValuePair node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(MemberValuePair node) {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(MethodRef node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(MethodRef node) {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(MethodRefParameter node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(MethodRefParameter node) {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(Modifier node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(Modifier node) {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(PackageDeclaration node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(PackageDeclaration node) {
 		endVisit((ASTNode)node);
 	}
@@ -661,196 +760,244 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 	}
 
 
+	@Override
 	public boolean visit(AssertStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(AssertStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(Block node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(Block node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(BreakStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(BreakStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(ConstructorInvocation node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(ContinueStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(ContinueStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(DoStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(DoStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(EmptyStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(EmptyStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(EnhancedForStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(EnhancedForStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(ExpressionStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(ExpressionStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(ForStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(ForStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(IfStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(IfStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(LabeledStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(LabeledStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(ReturnStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(ReturnStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(SuperConstructorInvocation node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(SwitchCase node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(SwitchCase node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(SwitchStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(SwitchStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(SynchronizedStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(SynchronizedStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(ThrowStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(ThrowStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(TryStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(TryStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(TypeDeclarationStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(TypeDeclarationStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(VariableDeclarationStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationStatement node) {
 		endVisit((Statement)node);
 	}
 
+	@Override
 	public boolean visit(WhileStatement node) {
 		return visit((Statement)node);
 	}
 
+	@Override
 	public void endVisit(WhileStatement node) {
 		endVisit((Statement)node);
 	}
 
 //---- End Statement Hierarchy ----------------------------------
 
+	@Override
 	public boolean visit(TagElement node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(TagElement node) {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(TextElement node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(TextElement node) {
 		endVisit((ASTNode)node);
 	}
@@ -865,60 +1012,74 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(ArrayType node) {
 		return visit((Type)node);
 	}
 
+	@Override
 	public void endVisit(ArrayType node) {
 		endVisit((Type)node);
 	}
 
+	@Override
 	public boolean visit(ParameterizedType node) {
 		return visit((Type)node);
 	}
 
+	@Override
 	public void endVisit(ParameterizedType node) {
 		endVisit((Type)node);
 	}
 
+	@Override
 	public boolean visit(PrimitiveType node) {
 		return visit((Type)node);
 	}
 
+	@Override
 	public void endVisit(PrimitiveType node) {
 		endVisit((Type)node);
 	}
 
+	@Override
 	public boolean visit(QualifiedType node) {
 		return visit((Type)node);
 	}
 
+	@Override
 	public void endVisit(QualifiedType node) {
 		endVisit((Type)node);
 	}
 
+	@Override
 	public boolean visit(SimpleType node) {
 		return visit((Type)node);
 	}
 
+	@Override
 	public void endVisit(SimpleType node) {
 		endVisit((Type)node);
 	}
 
+	@Override
 	public boolean visit(WildcardType node) {
 		return visit((Type)node);
 	}
 
+	@Override
 	public void endVisit(WildcardType node) {
 		endVisit((Type)node);
 	}
 
 //---- End Type Hierarchy ----------------------------------------
 
+	@Override
 	public boolean visit(TypeParameter node) {
 		return visit((ASTNode)node);
 	}
 
+	@Override
 	public void endVisit(TypeParameter node) {
 		endVisit((ASTNode)node);
 	}
@@ -933,18 +1094,22 @@ public abstract class HierarchicalASTVisitor extends ASTVisitor {
 		endVisit((ASTNode)node);
 	}
 
+	@Override
 	public boolean visit(SingleVariableDeclaration node) {
 		return visit((VariableDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(SingleVariableDeclaration node) {
 		endVisit((VariableDeclaration)node);
 	}
 
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		return visit((VariableDeclaration)node);
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationFragment node) {
 		endVisit((VariableDeclaration)node);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/JdtASTMatcher.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/JdtASTMatcher.java
index 7929963..51635f7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/JdtASTMatcher.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/JdtASTMatcher.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import org.eclipse.jdt.core.dom.SimpleName;
 
 public class JdtASTMatcher extends ASTMatcher {
 
+	@Override
 	public boolean match(SimpleName node, Object other) {
 		boolean isomorphic= super.match(node, other);
 		if (! isomorphic || !(other instanceof SimpleName))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java
index f9db707..917f565 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,10 +48,10 @@ public class LinkedNodeFinder  {
 	 * @return Return
 	 */
 	public static SimpleName[] findByBinding(ASTNode root, IBinding binding) {
-		ArrayList res= new ArrayList();
+		ArrayList<SimpleName> res= new ArrayList<SimpleName>();
 		BindingFinder nodeFinder= new BindingFinder(binding, res);
 		root.accept(nodeFinder);
-		return (SimpleName[]) res.toArray(new SimpleName[res.size()]);
+		return res.toArray(new SimpleName[res.size()]);
 	}
 
 	/**
@@ -73,10 +73,10 @@ public class LinkedNodeFinder  {
 		}
 		int parentKind= name.getParent().getNodeType();
 		if (parentKind == ASTNode.LABELED_STATEMENT || parentKind == ASTNode.BREAK_STATEMENT || parentKind == ASTNode.CONTINUE_STATEMENT) {
-			ArrayList res= new ArrayList();
+			ArrayList<SimpleName> res= new ArrayList<SimpleName>();
 			LabelFinder nodeFinder= new LabelFinder(name, res);
 			root.accept(nodeFinder);
-			return (SimpleName[]) res.toArray(new SimpleName[res.size()]);
+			return res.toArray(new SimpleName[res.size()]);
 		}
 		return new SimpleName[] { name };
 	}
@@ -124,7 +124,7 @@ public class LinkedNodeFinder  {
 
 
 	public static SimpleName[] findByProblems(ASTNode parent, SimpleName nameNode) {
-		ArrayList res= new ArrayList();
+		ArrayList<SimpleName> res= new ArrayList<SimpleName>();
 
 		ASTNode astRoot = parent.getRoot();
 		if (!(astRoot instanceof CompilationUnit)) {
@@ -152,21 +152,21 @@ public class LinkedNodeFinder  {
 				if ((nameNodeKind & currKind) != 0) {
 					ASTNode node= NodeFinder.perform(parent, probStart, (probEnd - probStart));
 					if (node instanceof SimpleName && name.equals(((SimpleName) node).getIdentifier())) {
-						res.add(node);
+						res.add((SimpleName) node);
 					}
 				}
 			}
 		}
-		return (SimpleName[]) res.toArray(new SimpleName[res.size()]);
+		return res.toArray(new SimpleName[res.size()]);
 	}
 
 	private static class LabelFinder extends ASTVisitor {
 
 		private SimpleName fLabel;
 		private ASTNode fDefiningLabel;
-		private ArrayList fResult;
+		private ArrayList<SimpleName> fResult;
 
-		public LabelFinder(SimpleName label, ArrayList result) {
+		public LabelFinder(SimpleName label, ArrayList<SimpleName> result) {
 			super(true);
 			fLabel= label;
 			fResult= result;
@@ -177,6 +177,7 @@ public class LinkedNodeFinder  {
 			return label != null && fLabel.getIdentifier().equals(label.getIdentifier());
 		}
 
+		@Override
 		public boolean visit(BreakStatement node) {
 			SimpleName label= node.getLabel();
 			if (fDefiningLabel != null && isSameLabel(label) && ASTNodes.isParent(label, fDefiningLabel)) {
@@ -185,6 +186,7 @@ public class LinkedNodeFinder  {
 			return false;
 		}
 
+		@Override
 		public boolean visit(ContinueStatement node) {
 			SimpleName label= node.getLabel();
 			if (fDefiningLabel != null && isSameLabel(label) && ASTNodes.isParent(label, fDefiningLabel)) {
@@ -193,6 +195,7 @@ public class LinkedNodeFinder  {
 			return false;
 		}
 
+		@Override
 		public boolean visit(LabeledStatement node) {
 			if (fDefiningLabel == null) {
 				SimpleName label= node.getLabel();
@@ -209,14 +212,15 @@ public class LinkedNodeFinder  {
 	private static class BindingFinder extends ASTVisitor {
 
 		private IBinding fBinding;
-		private ArrayList fResult;
+		private ArrayList<SimpleName> fResult;
 
-		public BindingFinder(IBinding binding, ArrayList result) {
+		public BindingFinder(IBinding binding, ArrayList<SimpleName> result) {
 			super(true);
 			fBinding= getDeclaration(binding);
 			fResult= result;
 		}
 
+		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding= node.resolveBinding();
 			if (binding == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LocalVariableIndex.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LocalVariableIndex.java
index f1b3426..2d356dd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LocalVariableIndex.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/LocalVariableIndex.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,11 +68,13 @@ public class LocalVariableIndex extends ASTVisitor {
 		return counter.fTopIndex;
 	}
 
+	@Override
 	public boolean visit(SingleVariableDeclaration node) {
 		handleVariableBinding(node.resolveBinding());
 		return true;
 	}
 
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		handleVariableBinding(node.resolveBinding());
 		return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java
index de6fe95..6664dbd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.dom;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
@@ -31,8 +32,12 @@ import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+import org.eclipse.jdt.core.dom.rewrite.ITrackedNodePosition;
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
+import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup;
+import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup.PositionInformation;
+
 /**
  *
  */
@@ -90,9 +95,10 @@ public class ModifierRewrite {
 	 * @param modifiers the modifiers to set
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
 	 *            <code>null</code> if ungrouped
+	 * @return a tracked position that contains the changed modifiers
 	 */
-	public void setModifiers(int modifiers, TextEditGroup editGroup) {
-		internalSetModifiers(modifiers, -1, editGroup);
+	public PositionInformation setModifiers(int modifiers, TextEditGroup editGroup) {
+		return internalSetModifiers(modifiers, -1, editGroup);
 	}
 
 	/**
@@ -103,9 +109,10 @@ public class ModifierRewrite {
 	 * @param excluded the modifiers to remove
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
 	 *            <code>null</code> if ungrouped
+	 * @return a tracked position that contains the changed modifiers
 	 */
-	public void setModifiers(int included, int excluded, TextEditGroup editGroup) {
-		internalSetModifiers(included, included | excluded, editGroup);
+	public PositionInformation setModifiers(int included, int excluded, TextEditGroup editGroup) {
+		return 	internalSetModifiers(included, included | excluded, editGroup);
 	}
 
 	/**
@@ -115,9 +122,10 @@ public class ModifierRewrite {
 	 * @param visibilityFlags the new visibility modifiers
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
 	 *            <code>null</code> if ungrouped
+	 * @return a tracked position that contains the changed modifiers, or <code>null</code> iff <code>editGroup == null</code>
 	 */
-	public void setVisibility(int visibilityFlags, TextEditGroup editGroup) {
-		internalSetModifiers(visibilityFlags, VISIBILITY_MODIFIERS, editGroup);
+	public PositionInformation setVisibility(int visibilityFlags, TextEditGroup editGroup) {
+		return internalSetModifiers(visibilityFlags, VISIBILITY_MODIFIERS, editGroup);
 	}
 
 	public void copyAllModifiers(ASTNode otherDecl, TextEditGroup editGroup) {
@@ -126,13 +134,13 @@ public class ModifierRewrite {
 	
 	public void copyAllModifiers(ASTNode otherDecl, TextEditGroup editGroup, boolean copyIndividually) {
 		ListRewrite modifierList= evaluateListRewrite(fModifierRewrite.getASTRewrite(), otherDecl);
-		List originalList= modifierList.getOriginalList();
+		List<IExtendedModifier> originalList= modifierList.getOriginalList();
 		if (originalList.isEmpty()) {
 			return;
 		}
 
 		if (copyIndividually) {
-			for (Iterator iterator= originalList.iterator(); iterator.hasNext();) {
+			for (Iterator<IExtendedModifier> iterator= originalList.iterator(); iterator.hasNext();) {
 				ASTNode modifier= (ASTNode) iterator.next();
 				ASTNode copy= fModifierRewrite.getASTRewrite().createCopyTarget(modifier);
 				if (copy != null) { //paranoia check (only left here because we're in RC1)
@@ -149,10 +157,10 @@ public class ModifierRewrite {
 
 	public void copyAllAnnotations(ASTNode otherDecl, TextEditGroup editGroup) {
 		ListRewrite modifierList= evaluateListRewrite(fModifierRewrite.getASTRewrite(), otherDecl);
-		List originalList= modifierList.getOriginalList();
+		List<IExtendedModifier> originalList= modifierList.getOriginalList();
 
-		for (Iterator iterator= originalList.iterator(); iterator.hasNext();) {
-			IExtendedModifier modifier= (IExtendedModifier) iterator.next();
+		for (Iterator<IExtendedModifier> iterator= originalList.iterator(); iterator.hasNext();) {
+			IExtendedModifier modifier= iterator.next();
 			if (modifier.isAnnotation()) {
 				fModifierRewrite.insertLast(fModifierRewrite.getASTRewrite().createCopyTarget((Annotation) modifier), editGroup);
 			}
@@ -167,12 +175,16 @@ public class ModifierRewrite {
 	 * @param consideredFlags mask of modifiers to consider
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
 	 *            <code>null</code> if ungrouped
+	 * @return a tracked position that contains the changed modifiers
 	 */
-	private void internalSetModifiers(int modifiers, int consideredFlags, TextEditGroup editGroup) {
+	private PositionInformation internalSetModifiers(int modifiers, int consideredFlags, TextEditGroup editGroup) {
 		int newModifiers= modifiers & consideredFlags;
 
+		ITrackedNodePosition trackedFallback= null;
+		List<ITrackedNodePosition> trackedNodes= new ArrayList<ITrackedNodePosition>();
+
 		// remove modifiers
-		List originalList= fModifierRewrite.getOriginalList();
+		List<IExtendedModifier> originalList= fModifierRewrite.getOriginalList();
 		for (int i= 0; i < originalList.size(); i++) {
 			ASTNode curr= (ASTNode) originalList.get(i);
 			if (curr instanceof Modifier) {
@@ -180,6 +192,8 @@ public class ModifierRewrite {
 				if ((consideredFlags & flag) != 0) {
 					if ((newModifiers & flag) == 0) {
 						fModifierRewrite.remove(curr, editGroup);
+						if (trackedFallback == null)
+							trackedFallback= fModifierRewrite.getASTRewrite().track(curr);
 					}
 					newModifiers &= ~flag;
 				}
@@ -188,17 +202,17 @@ public class ModifierRewrite {
 
 		// find last annotation
 		IExtendedModifier lastAnnotation= null;
-		List extendedList= fModifierRewrite.getRewrittenList();
+		List<IExtendedModifier> extendedList= fModifierRewrite.getRewrittenList();
 		for (int i= 0; i < extendedList.size(); i++) {
-			IExtendedModifier curr= (IExtendedModifier) extendedList.get(i);
+			IExtendedModifier curr= extendedList.get(i);
 			if (curr.isAnnotation())
 				lastAnnotation= curr;
 		}
 
 		// add modifiers
-		List newNodes= ASTNodeFactory.newModifiers(fAst, newModifiers);
+		List<Modifier> newNodes= ASTNodeFactory.newModifiers(fAst, newModifiers);
 		for (int i= 0; i < newNodes.size(); i++) {
-			Modifier curr= (Modifier) newNodes.get(i);
+			Modifier curr= newNodes.get(i);
 			if ((curr.getKeyword().toFlagValue() & VISIBILITY_MODIFIERS) != 0) {
 				if (lastAnnotation != null)
 					fModifierRewrite.insertAfter(curr, (ASTNode) lastAnnotation, editGroup);
@@ -207,6 +221,17 @@ public class ModifierRewrite {
 			} else {
 				fModifierRewrite.insertLast(curr, editGroup);
 			}
+			trackedNodes.add(fModifierRewrite.getASTRewrite().track(curr));
+		}
+		
+		if (trackedNodes.isEmpty()) {
+			if (trackedFallback == null) {
+				// out of tricks...
+				trackedFallback= fModifierRewrite.getASTRewrite().track(fModifierRewrite.getParent());
+			}
+			return new LinkedProposalPositionGroup.StartPositionInformation(trackedFallback);
+		} else {
+			return new LinkedProposalPositionGroup.TrackedNodesPosition(trackedNodes);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/NecessaryParenthesesChecker.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/NecessaryParenthesesChecker.java
new file mode 100644
index 0000000..4ab18c1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/NecessaryParenthesesChecker.java	
@@ -0,0 +1,302 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jdt.internal.corext.dom;
+
+import java.util.Iterator;
+
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ArrayAccess;
+import org.eclipse.jdt.core.dom.AssertStatement;
+import org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
+import org.eclipse.jdt.core.dom.ConditionalExpression;
+import org.eclipse.jdt.core.dom.DoStatement;
+import org.eclipse.jdt.core.dom.EnhancedForStatement;
+import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.ForStatement;
+import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.IfStatement;
+import org.eclipse.jdt.core.dom.InfixExpression;
+import org.eclipse.jdt.core.dom.InfixExpression.Operator;
+import org.eclipse.jdt.core.dom.ParenthesizedExpression;
+import org.eclipse.jdt.core.dom.ReturnStatement;
+import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
+import org.eclipse.jdt.core.dom.SwitchCase;
+import org.eclipse.jdt.core.dom.SwitchStatement;
+import org.eclipse.jdt.core.dom.SynchronizedStatement;
+import org.eclipse.jdt.core.dom.ThrowStatement;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+import org.eclipse.jdt.core.dom.WhileStatement;
+
+import org.eclipse.jdt.internal.corext.refactoring.code.OperatorPrecedence;
+
+/**
+ * Helper class to check if an expression requires parentheses.
+ * 
+ * @since 3.7
+ */
+public class NecessaryParenthesesChecker {
+
+	/*
+	 * Get the expression wrapped by the parentheses
+	 * i.e. ((((expression)))) -> expression
+	 */
+	private static Expression getExpression(ParenthesizedExpression node) {
+		Expression expression= node.getExpression();
+		while (expression instanceof ParenthesizedExpression) {
+			expression= ((ParenthesizedExpression)expression).getExpression();
+		}
+		return expression;
+	}
+
+	private static boolean expressionTypeNeedsParentheses(Expression expression) {
+		int type= expression.getNodeType();
+		return type == ASTNode.INFIX_EXPRESSION
+				|| type == ASTNode.CONDITIONAL_EXPRESSION
+				|| type == ASTNode.PREFIX_EXPRESSION
+				|| type == ASTNode.POSTFIX_EXPRESSION
+				|| type == ASTNode.CAST_EXPRESSION
+				|| type == ASTNode.INSTANCEOF_EXPRESSION
+				|| type == ASTNode.ARRAY_CREATION
+				|| type == ASTNode.ASSIGNMENT;
+	}
+
+	private static boolean locationNeedsParentheses(StructuralPropertyDescriptor locationInParent) {
+		if (locationInParent instanceof ChildListPropertyDescriptor && locationInParent != InfixExpression.EXTENDED_OPERANDS_PROPERTY) {
+			// e.g. argument lists of MethodInvocation, ClassInstanceCreation, dimensions of ArrayCreation ...
+			return false;
+		}
+		if (locationInParent == VariableDeclarationFragment.INITIALIZER_PROPERTY
+				|| locationInParent == SingleVariableDeclaration.INITIALIZER_PROPERTY
+				|| locationInParent == ReturnStatement.EXPRESSION_PROPERTY
+				|| locationInParent == EnhancedForStatement.EXPRESSION_PROPERTY
+				|| locationInParent == ForStatement.EXPRESSION_PROPERTY
+				|| locationInParent == WhileStatement.EXPRESSION_PROPERTY
+				|| locationInParent == DoStatement.EXPRESSION_PROPERTY
+				|| locationInParent == AssertStatement.EXPRESSION_PROPERTY
+				|| locationInParent == AssertStatement.MESSAGE_PROPERTY
+				|| locationInParent == IfStatement.EXPRESSION_PROPERTY
+				|| locationInParent == SwitchStatement.EXPRESSION_PROPERTY
+				|| locationInParent == SwitchCase.EXPRESSION_PROPERTY
+				|| locationInParent == ArrayAccess.INDEX_PROPERTY
+				|| locationInParent == ThrowStatement.EXPRESSION_PROPERTY
+				|| locationInParent == SynchronizedStatement.EXPRESSION_PROPERTY
+				|| locationInParent == ParenthesizedExpression.EXPRESSION_PROPERTY) {
+			return false;
+		}
+		return true;
+	}
+
+	/*
+	 * Do all operands in expression have same type
+	 */
+	private static boolean isAllOperandsHaveSameType(InfixExpression expression) {
+		ITypeBinding binding= expression.getLeftOperand().resolveTypeBinding();
+		if (binding == null)
+			return false;
+	
+		ITypeBinding current= expression.getRightOperand().resolveTypeBinding();
+		if (binding != current)
+			return false;
+	
+		for (Iterator<Expression> iterator= expression.extendedOperands().iterator(); iterator.hasNext();) {
+			Expression operand= iterator.next();
+			current= operand.resolveTypeBinding();
+			if (binding != current)
+				return false;
+		}
+	
+		return true;
+	}
+
+	/*
+	 * Is the expression of integer type
+	 */
+	private static boolean isExpressionIntegerType(Expression expression) {
+		ITypeBinding binding= expression.resolveTypeBinding();
+		if (binding == null)
+			return false;
+
+		if (!binding.isPrimitive())
+			return false;
+
+		String name= binding.getName();
+		if (isIntegerNumber(name))
+			return true;
+
+		return false;
+	}
+
+	private static boolean isExpressionStringType(Expression expression) {
+		ITypeBinding binding= expression.resolveTypeBinding();
+		if (binding == null)
+			return false;
+
+		return "java.lang.String".equals(binding.getQualifiedName()); //$NON-NLS-1$
+	}
+
+	/*
+	 * Is the given expression associative?
+	 * 
+	 * This is true if and only if:<br>
+	 * <code>left operator (right) == (right) operator left == right operator left</code>
+	 */
+	private static boolean isAssociative(InfixExpression expression) {
+		Operator operator= expression.getOperator();
+
+		if (operator == InfixExpression.Operator.PLUS)
+			return isExpressionStringType(expression) || isExpressionIntegerType(expression) && isAllOperandsHaveSameType(expression);
+
+		if (operator == InfixExpression.Operator.TIMES)
+			return isExpressionIntegerType(expression) && isAllOperandsHaveSameType(expression);
+
+		if (operator == InfixExpression.Operator.CONDITIONAL_AND
+				|| operator == InfixExpression.Operator.CONDITIONAL_OR
+				|| operator == InfixExpression.Operator.AND
+				|| operator == InfixExpression.Operator.OR
+				|| operator == InfixExpression.Operator.XOR)
+			return true;
+	
+		return false;
+	}
+
+	private static boolean isIntegerNumber(String name) {
+		return "int".equals(name) || "long".equals(name) || "byte".equals(name) || "char".equals(name) || "short".equals(name); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+	}
+
+	private static boolean needsParenthesesInInfixExpression(Expression expression, InfixExpression parentInfix, StructuralPropertyDescriptor locationInParent) {
+		if (locationInParent == InfixExpression.LEFT_OPERAND_PROPERTY) {
+			//we have (expr op expr) op expr
+			//infix expressions are evaluated from left to right -> parentheses not needed
+			return false;
+		} else if (isAssociative(parentInfix)) {
+			//we have parent op (expr op expr) and op is associative
+			//left op (right) == (right) op left == right op left
+			if (expression instanceof InfixExpression) {
+				InfixExpression infixExpression= (InfixExpression)expression;
+				Operator operator= infixExpression.getOperator();
+
+				if (isExpressionStringType(parentInfix)) {
+					if (parentInfix.getOperator() == InfixExpression.Operator.PLUS && operator == InfixExpression.Operator.PLUS && isExpressionStringType(infixExpression)) {
+						// 1 + ("" + 2) == 1 + "" + 2
+						// 1 + (2 + "") != 1 + 2 + ""
+						// "" + (2 + "") == "" + 2 + ""
+						return !isExpressionStringType(infixExpression.getLeftOperand()) && !isExpressionStringType(parentInfix.getLeftOperand());
+					}
+					//"" + (1 + 2), "" + (1 - 2) etc
+					return true;
+				}
+
+				if (parentInfix.getOperator() != InfixExpression.Operator.TIMES)
+					return false;
+	
+				if (operator == InfixExpression.Operator.TIMES)
+					// x * (y * z) == x * y * z
+					return false;
+	
+				if (operator == InfixExpression.Operator.REMAINDER || operator == InfixExpression.Operator.DIVIDE)
+					// x * (y % z) != x * y % z , x * (y / z) == x * y / z rounding involved
+					return true;
+	
+				return false;
+			}
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	/**
+	 * Can the parentheses be removed from the parenthesized expression ?
+	 * 
+	 * <p>
+	 * <b>Note:</b> The parenthesized expression must not be an unparented node.
+	 * </p>
+	 * 
+	 * @param expression the parenthesized expression
+	 * @return <code>true</code> if parentheses can be removed, <code>false</code> otherwise.
+	 */
+	public static boolean canRemoveParentheses(Expression expression) {
+		return canRemoveParentheses(expression, expression.getParent(), expression.getLocationInParent());
+	}
+
+	/**
+	 * Can the parentheses be removed from the parenthesized expression when inserted into
+	 * <code>parent</code> at <code>locationInParent</code> ?
+	 * 
+	 * <p>
+	 * <b>Note:</b> The parenthesized expression can be an unparented node.
+	 * </p>
+	 * 
+	 * @param expression the parenthesized expression
+	 * @param parent the parent node
+	 * @param locationInParent location of expression in the parent
+	 * @return <code>true</code> if parentheses can be removed, <code>false</code> otherwise.
+	 */
+	public static boolean canRemoveParentheses(Expression expression, ASTNode parent, StructuralPropertyDescriptor locationInParent) {
+		if (!(expression instanceof ParenthesizedExpression)) {
+			return false;
+		}
+		return !needsParentheses(getExpression((ParenthesizedExpression)expression), parent, locationInParent);
+	}
+
+	/**
+	 * Does the <code>expression</code> need parentheses when inserted into <code>parent</code> at
+	 * <code>locationInParent</code> ?
+	 * 
+	 * <p>
+	 * <b>Note:</b> The expression can be an unparented node.
+	 * </p>
+	 * 
+	 * @param expression the expression
+	 * @param parent the parent node
+	 * @param locationInParent location of expression in the parent
+	 * @return <code>true</code> if the expression needs parentheses, <code>false</code> otherwise.
+	 */
+	public static boolean needsParentheses(Expression expression, ASTNode parent, StructuralPropertyDescriptor locationInParent) {
+		if (!expressionTypeNeedsParentheses(expression))
+			return false;
+
+		if (!locationNeedsParentheses(locationInParent)) {
+			return false;
+		}
+
+		if (parent instanceof Expression) {
+			Expression parentExpression= (Expression)parent;
+
+			int expressionPrecedence= OperatorPrecedence.getExpressionPrecedence(expression);
+			int parentPrecedence= OperatorPrecedence.getExpressionPrecedence(parentExpression);
+
+			if (expressionPrecedence > parentPrecedence)
+				//(opEx) opParent and opEx binds more -> parentheses not needed
+				return false;
+
+			if (expressionPrecedence < parentPrecedence)
+				//(opEx) opParent and opEx binds less -> parentheses needed
+				return true;
+
+			//(opEx) opParent binds equal
+
+			if (parentExpression instanceof InfixExpression) {
+				return needsParenthesesInInfixExpression(expression, (InfixExpression)parentExpression, locationInParent);
+			}
+
+			if (parentExpression instanceof ConditionalExpression && locationInParent == ConditionalExpression.EXPRESSION_PROPERTY) {
+				return true;
+			}
+
+			return false;
+		}
+
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java
index f6f6385..cb444ea 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,16 +85,16 @@ public class ScopeAnalyzer {
 
 	private static class DefaultBindingRequestor implements IBindingRequestor {
 
-		private final List fResult;
-		private final HashSet fNamesAdded;
+		private final List<IBinding> fResult;
+		private final HashSet<String> fNamesAdded;
 		private final int fFlags;
 		private final ITypeBinding fParentTypeBinding;
 
 		public DefaultBindingRequestor(ITypeBinding parentTypeBinding, int flags) {
 			fParentTypeBinding= parentTypeBinding;
 			fFlags= flags;
-			fResult= new ArrayList();
-			fNamesAdded= new HashSet();
+			fResult= new ArrayList<IBinding>();
+			fNamesAdded= new HashSet<String>();
 		}
 
 		public DefaultBindingRequestor() {
@@ -115,10 +115,10 @@ public class ScopeAnalyzer {
 			return false;
 		}
 
-		public List getResult() {
+		public List<IBinding> getResult() {
 			if (hasFlag(CHECK_VISIBILITY, fFlags)) {
 				for (int i= fResult.size() - 1; i >= 0; i--) {
-					IBinding binding= (IBinding) fResult.get(i);
+					IBinding binding= fResult.get(i);
 					if (!isVisible(binding, fParentTypeBinding)) {
 						fResult.remove(i);
 					}
@@ -129,12 +129,12 @@ public class ScopeAnalyzer {
 
 	}
 
-	private final HashSet fTypesVisited;
+	private final HashSet<ITypeBinding> fTypesVisited;
 
 	private final CompilationUnit fRoot;
 
 	public ScopeAnalyzer(CompilationUnit root) {
-		fTypesVisited= new HashSet();
+		fTypesVisited= new HashSet<ITypeBinding>();
 		fRoot= root;
 	}
 
@@ -260,9 +260,9 @@ public class ScopeAnalyzer {
 					return true;
 			} else if (hasFlag(TYPES, flags)) {
 				if (fRoot.findDeclaringNode(binding) != null) {
-					List types= fRoot.types();
+					List<AbstractTypeDeclaration> types= fRoot.types();
 					for (int i= 0; i < types.size(); i++) {
-						if (requestor.acceptBinding(((AbstractTypeDeclaration) types.get(i)).resolveBinding()))
+						if (requestor.acceptBinding(types.get(i).resolveBinding()))
 							return true;
 					}
 				}
@@ -365,8 +365,8 @@ public class ScopeAnalyzer {
 					addInherited(binding, flags, requestor);
 				}
 
-				List result= requestor.getResult();
-				return (IBinding[]) result.toArray(new IBinding[result.size()]);
+				List<IBinding> result= requestor.getResult();
+				return result.toArray(new IBinding[result.size()]);
 			}
 			return NO_BINDING;
 		} finally {
@@ -469,14 +469,14 @@ public class ScopeAnalyzer {
 
 	private IVariableBinding[] getEnumContants(ITypeBinding binding) {
 		IVariableBinding[] declaredFields= binding.getDeclaredFields();
-		ArrayList res= new ArrayList(declaredFields.length);
+		ArrayList<IVariableBinding> res= new ArrayList<IVariableBinding>(declaredFields.length);
 		for (int i= 0; i < declaredFields.length; i++) {
 			IVariableBinding curr= declaredFields[i];
 			if (curr.isEnumConstant()) {
 				res.add(curr);
 			}
 		}
-		return (IVariableBinding[]) res.toArray(new IVariableBinding[res.size()]);
+		return res.toArray(new IVariableBinding[res.size()]);
 	}
 
 	private boolean hasEnumContants(IBinding declaration, ITypeBinding binding) {
@@ -507,8 +507,8 @@ public class ScopeAnalyzer {
 			if (binding != null) {
 				addTypeDeclarations(binding, flags, requestor);
 			}
-			List result= requestor.getResult();
-			return (IBinding[]) result.toArray(new IBinding[result.size()]);
+			List<IBinding> result= requestor.getResult();
+			return result.toArray(new IBinding[result.size()]);
 		} finally {
 			clearLists();
 		}
@@ -613,8 +613,8 @@ public class ScopeAnalyzer {
 				DefaultBindingRequestor requestor= new DefaultBindingRequestor();
 				DeclarationsAfterVisitor visitor= new DeclarationsAfterVisitor(node.getStartPosition(), flags, requestor);
 				declaration.accept(visitor);
-				List result= requestor.getResult();
-				return (IBinding[])result.toArray(new IBinding[result.size()]);
+				List<IBinding> result= requestor.getResult();
+				return result.toArray(new IBinding[result.size()]);
 			}
 			return NO_BINDING;
 		} finally {
@@ -644,6 +644,7 @@ public class ScopeAnalyzer {
 			return start <= fPosition && fPosition < end;
 		}
 
+		@Override
 		public boolean visit(MethodDeclaration node) {
 			if (isInside(node)) {
 				Block body= node.getBody();
@@ -662,6 +663,7 @@ public class ScopeAnalyzer {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.TypeParameter)
 		 */
+		@Override
 		public boolean visit(TypeParameter node) {
 			if (hasFlag(TYPES, fFlags) && node.getStartPosition() < fPosition) {
 				fBreak= fRequestor.acceptBinding(node.getName().resolveBinding());
@@ -669,6 +671,7 @@ public class ScopeAnalyzer {
 			return !fBreak;
 		}
 
+		@Override
 		public boolean visit(SwitchCase node) {
 			// switch on enum allows to use enum constants without qualification
 			if (hasFlag(VARIABLES, fFlags) && !node.isDefault() && isInside(node.getExpression())) {
@@ -689,18 +692,22 @@ public class ScopeAnalyzer {
 			return false;
 		}
 
+		@Override
 		public boolean visit(Initializer node) {
 			return !fBreak && isInside(node);
 		}
 
+		@Override
 		public boolean visit(Statement node) {
 			return !fBreak && isInside(node);
 		}
 
+		@Override
 		public boolean visit(ASTNode node) {
 			return false;
 		}
 
+		@Override
 		public boolean visit(Block node) {
 			if (isInside(node)) {
 				visitBackwards(node.statements());
@@ -708,6 +715,7 @@ public class ScopeAnalyzer {
 			return false;
 		}
 
+		@Override
 		public boolean visit(VariableDeclaration node) {
 			if (hasFlag(VARIABLES, fFlags) && node.getStartPosition() < fPosition) {
 				fBreak= fRequestor.acceptBinding(node.resolveBinding());
@@ -715,16 +723,19 @@ public class ScopeAnalyzer {
 			return !fBreak;
 		}
 
+		@Override
 		public boolean visit(VariableDeclarationStatement node) {
 			visitBackwards(node.fragments());
 			return false;
 		}
 
+		@Override
 		public boolean visit(VariableDeclarationExpression node) {
 			visitBackwards(node.fragments());
 			return false;
 		}
 
+		@Override
 		public boolean visit(CatchClause node) {
 			if (isInside(node)) {
 				node.getBody().accept(this);
@@ -733,6 +744,7 @@ public class ScopeAnalyzer {
 			return false;
 		}
 
+		@Override
 		public boolean visit(ForStatement node) {
 			if (isInside(node)) {
 				node.getBody().accept(this);
@@ -741,6 +753,7 @@ public class ScopeAnalyzer {
 			return false;
 		}
 
+		@Override
 		public boolean visit(TypeDeclarationStatement node) {
 			if (hasFlag(TYPES, fFlags) && node.getStartPosition() + node.getLength() < fPosition) {
 				fBreak= fRequestor.acceptBinding(node.resolveBinding());
@@ -749,12 +762,12 @@ public class ScopeAnalyzer {
 			return !fBreak && isInside(node);
 		}
 
-		private void visitBackwards(List list) {
+		private void visitBackwards(List<? extends ASTNode> list) {
 			if (fBreak)
 				return;
 
 			for (int i= list.size() - 1; i >= 0; i--) {
-				ASTNode curr= (ASTNode) list.get(i);
+				ASTNode curr= list.get(i);
 				if (curr.getStartPosition() <  fPosition) {
 					curr.accept(this);
 				}
@@ -775,10 +788,12 @@ public class ScopeAnalyzer {
 			fBreak= false;
 		}
 
+		@Override
 		public boolean visit(ASTNode node) {
 			return !fBreak;
 		}
 
+		@Override
 		public boolean visit(VariableDeclaration node) {
 			if (hasFlag(VARIABLES, fFlags) && fPosition < node.getStartPosition()) {
 				fBreak= fRequestor.acceptBinding(node.resolveBinding());
@@ -786,10 +801,12 @@ public class ScopeAnalyzer {
 			return false;
 		}
 
+		@Override
 		public boolean visit(AnonymousClassDeclaration node) {
 			return false;
 		}
 
+		@Override
 		public boolean visit(TypeDeclarationStatement node) {
 			if (hasFlag(TYPES, fFlags) && fPosition < node.getStartPosition()) {
 				fBreak= fRequestor.acceptBinding(node.resolveBinding());
@@ -815,8 +832,8 @@ public class ScopeAnalyzer {
 		return false;
 	}
 
-	public Collection getUsedVariableNames(int offset, int length) {
-		HashSet result= new HashSet();
+	public Collection<String> getUsedVariableNames(int offset, int length) {
+		HashSet<String> result= new HashSet<String>();
 		IBinding[] bindingsBefore= getDeclarationsInScope(offset, VARIABLES);
 		for (int i= 0; i < bindingsBefore.length; i++) {
 			result.add(bindingsBefore[i].getName());
@@ -825,9 +842,9 @@ public class ScopeAnalyzer {
 		for (int i= 0; i < bindingsAfter.length; i++) {
 			result.add(bindingsAfter[i].getName());
 		}
-		List imports= fRoot.imports();
+		List<ImportDeclaration> imports= fRoot.imports();
 		for (int i= 0; i < imports.size(); i++) {
-			ImportDeclaration decl= (ImportDeclaration) imports.get(i);
+			ImportDeclaration decl= imports.get(i);
 			if (decl.isStatic() && !decl.isOnDemand()) {
 				result.add(ASTNodes.getSimpleNameIdentifier(decl.getName()));
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Selection.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Selection.java
index 501db7b..79aef0e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Selection.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/Selection.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -157,6 +157,7 @@ public class Selection {
 		return nodeBeforeSelection || selectionBeforeNode;
 	}
 
+	@Override
 	public String toString() {
 		return "<start == " + fStart + ", length == " + fLength + "/>";  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/SelectionAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/SelectionAnalyzer.java
index 6e76023..a26d5f7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/SelectionAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/SelectionAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ public class SelectionAnalyzer extends GenericVisitor {
 	private ASTNode fLastCoveringNode;
 
 	// Selected nodes
-	private List fSelectedNodes;
+	private List<ASTNode> fSelectedNodes;
 
 	public SelectionAnalyzer(Selection selection, boolean traverseSelectedNode) {
 		super(true);
@@ -41,6 +41,10 @@ public class SelectionAnalyzer extends GenericVisitor {
 		fTraverseSelectedNode= traverseSelectedNode;
 	}
 
+	protected void setSelection(Selection selection) {
+		fSelection= selection;
+	}
+
 	public boolean hasSelectedNodes() {
 		return fSelectedNodes != null && !fSelectedNodes.isEmpty();
 	}
@@ -48,19 +52,19 @@ public class SelectionAnalyzer extends GenericVisitor {
 	public ASTNode[] getSelectedNodes() {
 		if (fSelectedNodes == null || fSelectedNodes.isEmpty())
 			return new ASTNode[0];
-		return (ASTNode[]) fSelectedNodes.toArray(new ASTNode[fSelectedNodes.size()]);
+		return fSelectedNodes.toArray(new ASTNode[fSelectedNodes.size()]);
 	}
 
 	public ASTNode getFirstSelectedNode() {
 		if (fSelectedNodes == null || fSelectedNodes.isEmpty())
 			return null;
-		return (ASTNode)fSelectedNodes.get(0);
+		return fSelectedNodes.get(0);
 	}
 
 	public ASTNode getLastSelectedNode() {
 		if (fSelectedNodes == null || fSelectedNodes.isEmpty())
 			return null;
-		return (ASTNode)fSelectedNodes.get(fSelectedNodes.size() - 1);
+		return fSelectedNodes.get(fSelectedNodes.size() - 1);
 	}
 
 	public boolean isExpressionSelected() {
@@ -72,8 +76,8 @@ public class SelectionAnalyzer extends GenericVisitor {
 	public IRegion getSelectedNodeRange() {
 		if (fSelectedNodes == null || fSelectedNodes.isEmpty())
 			return null;
-		ASTNode firstNode= (ASTNode)fSelectedNodes.get(0);
-		ASTNode lastNode= (ASTNode)fSelectedNodes.get(fSelectedNodes.size() - 1);
+		ASTNode firstNode= fSelectedNodes.get(0);
+		ASTNode lastNode= fSelectedNodes.get(fSelectedNodes.size() - 1);
 		int start= firstNode.getStartPosition();
 		return new Region(start, lastNode.getStartPosition() + lastNode.getLength() - start);
 	}
@@ -82,12 +86,13 @@ public class SelectionAnalyzer extends GenericVisitor {
 		return fLastCoveringNode;
 	}
 
-	protected Selection getSelection() {
+	public Selection getSelection() {
 		return fSelection;
 	}
 
 	//--- node management ---------------------------------------------------------
 
+	@Override
 	protected boolean visitNode(ASTNode node) {
 		// The selection lies behind the node.
 		if (fSelection.liesOutside(node)) {
@@ -115,7 +120,7 @@ public class SelectionAnalyzer extends GenericVisitor {
 	}
 
 	protected void handleFirstSelectedNode(ASTNode node) {
-		fSelectedNodes= new ArrayList(5);
+		fSelectedNodes= new ArrayList<ASTNode>(5);
 		fSelectedNodes.add(node);
 	}
 
@@ -129,7 +134,7 @@ public class SelectionAnalyzer extends GenericVisitor {
 		return false;
 	}
 
-	protected List internalGetSelectedNodes() {
+	protected List<ASTNode> internalGetSelectedNodes() {
 		return fSelectedNodes;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java
index aeb5595..ab76aa7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class StatementRewrite extends ReplaceRewrite {
 		super(rewrite, nodes);
 	}
 
+	@Override
 	protected void handleOneMany(ASTNode[] replacements, TextEditGroup description) {
 		AST ast= fToReplace[0].getAST();
 		// to replace == 1, but more than one replacement. Have to check if we
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java
index 11cda39..e3fdbd0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,9 @@ package org.eclipse.jdt.internal.corext.dom;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.PrimitiveType;
-import org.eclipse.jdt.core.dom.PrimitiveType.Code;
+
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TypeEnvironment;
 
 /**
  * Helper class to check if objects are assignable to each other.
@@ -24,102 +26,17 @@ import org.eclipse.jdt.core.dom.PrimitiveType.Code;
 public class TypeRules {
 
 	/**
-	 * Tests if a two primitive types are assign compatible
-	 * @param toAssignCode The binding of the type to assign
-	 * @param definedTypeCode The type of the object that is assigned
-	 * @return boolean Returns true if definedType = typeToAssign is true
-	 */
-	public static boolean canAssignPrimitive(PrimitiveType.Code toAssignCode, PrimitiveType.Code definedTypeCode) {
-		//	definedTypeCode = typeCodeToAssign;
-		if (toAssignCode == definedTypeCode) {
-			return true;
-		}
-		if (definedTypeCode == PrimitiveType.BOOLEAN || toAssignCode == PrimitiveType.BOOLEAN) {
-			return false;
-		}
-		if (definedTypeCode == PrimitiveType.CHAR && toAssignCode == PrimitiveType.BYTE) {
-			return false;
-		}
-		return getTypeOrder(definedTypeCode) > getTypeOrder(toAssignCode);
-	}
-
-	/**
 	 * Tests if two types are assign compatible. Void types are never compatible.
+	 * 
 	 * @param typeToAssign The binding of the type to assign
 	 * @param definedType The type of the object that is assigned
-	 * @return boolean Returns true if definedType = typeToAssign is true
+	 * @return <code>true</code> iff definedType = typeToAssign is a valid assignment
 	 */
 	public static boolean canAssign(ITypeBinding typeToAssign, ITypeBinding definedType) {
-		//see bug 80715
-
-		// definedType = typeToAssign;
-
-		String voidName= PrimitiveType.VOID.toString();
-		if (voidName.equals(typeToAssign.getName()) || voidName.equals(definedType.getName())) {
-			return false;
-		}
-
-		if (typeToAssign.isNullType()) {
-			return !definedType.isPrimitive();
-		}
-		if (definedType.isArray()) {
-			if (!typeToAssign.isArray()) {
-				return false; // can not assign a non-array type to an array
-			}
-			int definedDim= definedType.getDimensions();
-			int toAssignDim= typeToAssign.getDimensions();
-			if (definedDim == toAssignDim) {
-				definedType= definedType.getElementType();
-				typeToAssign= typeToAssign.getElementType();
-				if (typeToAssign.isPrimitive() && typeToAssign != definedType) {
-					return false; // can't assign arrays of different primitive types to each other
-				}
-				// fall through
-			} else if (definedDim < toAssignDim) {
-				return isArrayCompatible(definedType.getElementType());
-			} else {
-				return false;
-			}
-		}
-
-		if (typeToAssign.isPrimitive()) {
-			if (!definedType.isPrimitive()) {
-				return false;
-			}
-			PrimitiveType.Code toAssignCode= PrimitiveType.toCode(typeToAssign.getName());
-			PrimitiveType.Code definedTypeCode= PrimitiveType.toCode(definedType.getName());
-			return canAssignPrimitive(toAssignCode, definedTypeCode);
-		} else {
-			if (definedType.isPrimitive()) {
-				return false;
-			}
-
-			if (typeToAssign.isArray()) {
-				return isArrayCompatible(definedType);
-			}
-			if (isJavaLangObject(definedType)) {
-				return true;
-			}
-			return Bindings.isSuperType(definedType, typeToAssign);
-		}
-	}
-
-	private static int getTypeOrder(Code type) {
-		if (type == PrimitiveType.BYTE)
-			return 2;
-		if (type == PrimitiveType.CHAR)
-			return 3;
-		if (type == PrimitiveType.SHORT)
-			return 3;
-		if (type == PrimitiveType.INT)
-			return 4;
-		if (type == PrimitiveType.LONG)
-			return 5;
-		if (type == PrimitiveType.FLOAT)
-			return 6;
-		if (type == PrimitiveType.DOUBLE)
-			return 7;
-		return 0;
+		TypeEnvironment typeEnvironment= new TypeEnvironment(false, true);
+		TType defined= typeEnvironment.create(definedType);
+		TType toAssign= typeEnvironment.create(typeToAssign);
+		return toAssign.canAssignTo(defined);
 	}
 
 	public static boolean isArrayCompatible(ITypeBinding definedType) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java
index c5f8cfa..7349253 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,10 @@
 package org.eclipse.jdt.internal.corext.dom;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.runtime.Assert;
 
@@ -24,6 +26,8 @@ import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
 import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
+import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.SwitchStatement;
 import org.eclipse.jdt.core.dom.Type;
@@ -47,11 +51,23 @@ public class VariableDeclarationRewrite {
 	}
 
 	public static void rewriteModifiers(final FieldDeclaration declarationNode, final VariableDeclarationFragment[] toChange, final int includedModifiers, final int excludedModifiers, final ASTRewrite rewrite, final TextEditGroup group) {
-		final List fragmentsToChange= Arrays.asList(toChange);
+		final List<VariableDeclarationFragment> fragmentsToChange= Arrays.asList(toChange);
 		AST ast= declarationNode.getAST();
-
-		List fragments= declarationNode.fragments();
-		Iterator iter= fragments.iterator();
+/*
+ * Problem: Same declarationNode can be the subject of multiple calls to this method.
+ * For the 2nd++ calls, the original declarationNode has already been rewritten, and this has to be taken into account.
+ * 
+ * Assumption:
+ * - Modifiers for each VariableDeclarationFragment are modified at most once.
+ * 
+ * Solution:
+ * - Maintain a map from original VariableDeclarationFragments to their new FieldDeclaration.
+ * - Original modifiers in declarationNode belong to the first fragment.
+ * - When a later fragment needs different modifiers, we create a new FieldDeclaration and move all successive fragments into that declaration
+ * - When a fragment has been moved to a new declaration, make sure we don't create a new move target again, but instead use the already created one 
+ */
+		List<VariableDeclarationFragment> fragments= declarationNode.fragments();
+		Iterator<VariableDeclarationFragment> iter= fragments.iterator();
 
 		ListRewrite blockRewrite;
 		if (declarationNode.getParent() instanceof AbstractTypeDeclaration) {
@@ -60,51 +76,107 @@ public class VariableDeclarationRewrite {
 			blockRewrite= rewrite.getListRewrite(declarationNode.getParent(), AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY);
 		}
 
-		VariableDeclarationFragment lastFragment= (VariableDeclarationFragment)iter.next();
+		VariableDeclarationFragment lastFragment= iter.next();
 		ASTNode lastStatement= declarationNode;
 
-		boolean modifiersModified= false;
 		if (fragmentsToChange.contains(lastFragment)) {
 			ModifierRewrite modifierRewrite= ModifierRewrite.create(rewrite, declarationNode);
 			modifierRewrite.setModifiers(includedModifiers, excludedModifiers, group);
-			modifiersModified= true;
 		}
 
 		ListRewrite fragmentsRewrite= null;
 		while (iter.hasNext()) {
-			VariableDeclarationFragment currentFragment= (VariableDeclarationFragment)iter.next();
-
-			if (fragmentsToChange.contains(lastFragment) != fragmentsToChange.contains(currentFragment)) {
-
-					FieldDeclaration newStatement= ast.newFieldDeclaration((VariableDeclarationFragment)rewrite.createMoveTarget(currentFragment));
-					newStatement.setType((Type)rewrite.createCopyTarget(declarationNode.getType()));
-
-					ModifierRewrite modifierRewrite= ModifierRewrite.create(rewrite, newStatement);
-					if (fragmentsToChange.contains(currentFragment)) {
-						modifierRewrite.copyAllAnnotations(declarationNode, group);
-						int newModifiers= (declarationNode.getModifiers() & ~excludedModifiers) | includedModifiers;
-						modifierRewrite.setModifiers(newModifiers, excludedModifiers, group);
-					} else {
-						modifierRewrite.copyAllModifiers(declarationNode, group, modifiersModified);
+			VariableDeclarationFragment currentFragment= iter.next();
+			
+			Map<VariableDeclarationFragment, MovedFragment> lookup= (Map<VariableDeclarationFragment, MovedFragment>) rewrite.getProperty(MovedFragment.class.getName());
+			if (lookup == null) {
+				lookup= new HashMap<VariableDeclarationFragment, MovedFragment>();
+				rewrite.setProperty(MovedFragment.class.getName(), lookup);
+			}
+			MovedFragment currentMovedFragment= lookup.get(currentFragment);
+			
+			boolean changeLast= fragmentsToChange.contains(lastFragment);
+			boolean changeCurrent= fragmentsToChange.contains(currentFragment);
+			if (changeLast != changeCurrent || lookup.containsKey(lastFragment)) {
+				ModifierRewrite modifierRewrite= null;
+				if (currentMovedFragment != null) {
+					// Current fragment has already been moved.
+					
+					if (currentMovedFragment.fUsesOriginalModifiers) {
+						// Need to put in the right modifiers (removing any existing ones).
+						modifierRewrite= ModifierRewrite.create(rewrite, currentMovedFragment.fDeclaration);
+						ListRewrite listRewrite= rewrite.getListRewrite(currentMovedFragment.fDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY);
+						List<IExtendedModifier> extendedList= listRewrite.getRewrittenList();
+						for (int i= 0; i < extendedList.size(); i++) {
+							ASTNode curr= (ASTNode)extendedList.get(i);
+							if (curr instanceof Modifier)
+								rewrite.remove(curr, group);
+						}
 					}
+					// otherwise, don't need to touch the modifiers, so leave modifierRewrite null
+					
+				} else { // need to split an existing field declaration
+					VariableDeclarationFragment moveTarget;
+					moveTarget= (VariableDeclarationFragment)rewrite.createMoveTarget(currentFragment);
+					
+					FieldDeclaration newStatement= (FieldDeclaration)ast.createInstance(FieldDeclaration.class);
+					rewrite.getListRewrite(newStatement, FieldDeclaration.FRAGMENTS_PROPERTY).insertLast(moveTarget, group);
+					lookup.put(currentFragment, new MovedFragment(moveTarget, newStatement, !changeCurrent));
+					rewrite.set(newStatement, FieldDeclaration.TYPE_PROPERTY, rewrite.createCopyTarget(declarationNode.getType()), group);
+
+					modifierRewrite= ModifierRewrite.create(rewrite, newStatement);
+					modifierRewrite.copyAllAnnotations(declarationNode, group);
 					blockRewrite.insertAfter(newStatement, lastStatement, group);
 
 					fragmentsRewrite= rewrite.getListRewrite(newStatement, FieldDeclaration.FRAGMENTS_PROPERTY);
 					lastStatement= newStatement;
+				}
+				
+				if (modifierRewrite != null) {
+					if (changeCurrent) {
+						int newModifiers= (declarationNode.getModifiers() & ~excludedModifiers) | includedModifiers;
+						modifierRewrite.setModifiers(newModifiers, excludedModifiers, group);
+					} else {
+						int newModifiers= declarationNode.getModifiers();
+						modifierRewrite.setModifiers(newModifiers, Modifier.NONE, group);
+					}
+				}
+					
 			} else if (fragmentsRewrite != null) {
-				ASTNode fragment0= rewrite.createMoveTarget(currentFragment);
+				VariableDeclarationFragment fragment0;
+				boolean usesOriginalModifiers= true;
+				if (currentMovedFragment != null) {
+					fragment0= currentMovedFragment.fMoveTarget;
+					usesOriginalModifiers= currentMovedFragment.fUsesOriginalModifiers;
+					rewrite.getListRewrite(currentMovedFragment.fDeclaration, FieldDeclaration.FRAGMENTS_PROPERTY).remove(fragment0, group);
+				} else {
+					fragment0= (VariableDeclarationFragment)rewrite.createMoveTarget(currentFragment);
+				}
+				lookup.put(currentFragment, new MovedFragment(fragment0, lastStatement, usesOriginalModifiers));
 				fragmentsRewrite.insertLast(fragment0, group);
 			}
 			lastFragment= currentFragment;
 		}
 	}
+	
+	private static class MovedFragment {
+		final VariableDeclarationFragment fMoveTarget;
+		final ASTNode fDeclaration;
+		boolean fUsesOriginalModifiers;
+		
+		public MovedFragment(VariableDeclarationFragment moveTarget, ASTNode declaration, boolean usesOriginalModifiers) {
+			fMoveTarget= moveTarget;
+			fDeclaration= declaration;
+			fUsesOriginalModifiers= usesOriginalModifiers;
+		}
+	}
 
 	public static void rewriteModifiers(final VariableDeclarationStatement declarationNode, final VariableDeclarationFragment[] toChange, final int includedModifiers, final int excludedModifiers, ASTRewrite rewrite, final TextEditGroup group) {
-		final List fragmentsToChange= Arrays.asList(toChange);
+		final List<VariableDeclarationFragment> fragmentsToChange= Arrays.asList(toChange);
 		AST ast= declarationNode.getAST();
 
-		List fragments= declarationNode.fragments();
-		Iterator iter= fragments.iterator();
+		List<VariableDeclarationFragment> fragments= declarationNode.fragments();
+		Iterator<VariableDeclarationFragment> iter= fragments.iterator();
 
 		ListRewrite blockRewrite= null;
 		ASTNode parentStatement= declarationNode.getParent();
@@ -117,7 +189,7 @@ public class VariableDeclarationRewrite {
 			Assert.isTrue(false);
 		}
 
-		VariableDeclarationFragment lastFragment= (VariableDeclarationFragment)iter.next();
+		VariableDeclarationFragment lastFragment= iter.next();
 		ASTNode lastStatement= declarationNode;
 
 		boolean modifiersModified= false;
@@ -129,7 +201,7 @@ public class VariableDeclarationRewrite {
 
 		ListRewrite fragmentsRewrite= null;
 		while (iter.hasNext()) {
-			VariableDeclarationFragment currentFragment= (VariableDeclarationFragment)iter.next();
+			VariableDeclarationFragment currentFragment= iter.next();
 
 			if (fragmentsToChange.contains(lastFragment) != fragmentsToChange.contains(currentFragment)) {
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTFragmentFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTFragmentFactory.java
index fb04a0e..0738c66 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTFragmentFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTFragmentFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -115,6 +115,7 @@ public class ASTFragmentFactory {
 			return new FragmentForFullSubtreeFactory().createFragment(node);
 		}
 
+		@Override
 		public boolean visit(InfixExpression node) {
 			/* Try creating an associative infix expression fragment
 			/* for the full subtree.  If this is not applicable,
@@ -127,10 +128,12 @@ public class ASTFragmentFactory {
 			setFragment(fragment);
 			return false;
 		}
+		@Override
 		public boolean visit(Expression node) {
 			setFragment(new SimpleExpressionFragment(node));
 			return false;
 		}
+		@Override
 		public boolean visit(ASTNode node) {
 			setFragment(new SimpleFragment(node));
 			return false;
@@ -146,6 +149,7 @@ public class ASTFragmentFactory {
 			return new FragmentForSubPartBySourceRangeFactory().createFragment(node, range, cu);
 		}
 
+		@Override
 		public boolean visit(InfixExpression node) {
 			try {
 				setFragment(createInfixExpressionSubPartFragmentBySourceRange(node, fRange, fCu));
@@ -155,6 +159,7 @@ public class ASTFragmentFactory {
 			return false;
 		}
 
+		@Override
 		public boolean visit(ASTNode node) {
 			//let fragment be null
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTMatchingFragmentFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTMatchingFragmentFinder.java
index b2c9a82..2f629b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTMatchingFragmentFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/ASTMatchingFragmentFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,7 @@ class ASTMatchingFragmentFinder extends GenericVisitor {
 	}
 
 	private ASTFragment fFragmentToMatch;
-	private Set fMatches= new HashSet();
+	private Set<IASTFragment> fMatches= new HashSet<IASTFragment>();
 
 	private ASTMatchingFragmentFinder(ASTFragment toMatch) {
 		super(true);
@@ -37,13 +37,15 @@ class ASTMatchingFragmentFinder extends GenericVisitor {
 		return getMatches();
 	}
 	private IASTFragment[] getMatches() {
-		return (IASTFragment[]) fMatches.toArray(new IASTFragment[fMatches.size()]);
+		return fMatches.toArray(new IASTFragment[fMatches.size()]);
 	}
 
+	@Override
 	public boolean visit(Javadoc node) {
 		return false;
 	}
 
+	@Override
 	protected boolean visitNode(ASTNode node) {
 		IASTFragment[] localMatches= fFragmentToMatch.getMatchingFragmentsWithNode(node);
 		for(int i= 0; i < localMatches.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/AssociativeInfixExpressionFragment.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/AssociativeInfixExpressionFragment.java
index 9c81b6d..aabb804 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/AssociativeInfixExpressionFragment.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/AssociativeInfixExpressionFragment.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ import org.eclipse.jdt.internal.corext.dom.JdtASTMatcher;
 
 class AssociativeInfixExpressionFragment extends ASTFragment implements IExpressionFragment {
 
-	private final List/*<Expression>*/ fOperands;
+	private final List<Expression> fOperands;
 	private final InfixExpression fGroupRoot;
 
 	public static IExpressionFragment createSubPartFragmentBySourceRange(InfixExpression node, ISourceRange range, ICompilationUnit cu) throws JavaModelException {
@@ -53,8 +53,8 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		InfixExpression groupRoot= findGroupRoot(node);
 		Assert.isTrue(isAGroupRoot(groupRoot));
 
-		List/*<Expression>*/ groupMembers= AssociativeInfixExpressionFragment.findGroupMembersInOrderFor(groupRoot);
-		List/*<Expression>*/ subGroup= findSubGroupForSourceRange(groupMembers, range);
+		List<Expression> groupMembers= AssociativeInfixExpressionFragment.findGroupMembersInOrderFor(groupRoot);
+		List<Expression> subGroup= findSubGroupForSourceRange(groupMembers, range);
 		if(subGroup.isEmpty() || rangeIncludesExtraNonWhitespace(range, subGroup, cu))
 			return null;
 
@@ -70,7 +70,7 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		InfixExpression groupRoot= findGroupRoot(node);
 		Assert.isTrue(isAGroupRoot(groupRoot));
 
-		List/*<Expression>*/ groupMembers= AssociativeInfixExpressionFragment.findGroupMembersInOrderFor(node);
+		List<Expression> groupMembers= AssociativeInfixExpressionFragment.findGroupMembersInOrderFor(node);
 
 		return new AssociativeInfixExpressionFragment(groupRoot, groupMembers);
 	}
@@ -91,17 +91,17 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		return node;
 	}
 
-	private static List findSubGroupForSourceRange(List/*<Expression>*/group, ISourceRange range) {
+	private static List<Expression> findSubGroupForSourceRange(List<Expression> group, ISourceRange range) {
 		Assert.isTrue(!group.isEmpty());
 
-		List subGroup= new ArrayList();
+		List<Expression> subGroup= new ArrayList<Expression>();
 
 		boolean entered= false, exited= false;
-		if(range.getOffset() == ((ASTNode)group.get(0)).getStartPosition())
+		if(range.getOffset() == group.get(0).getStartPosition())
 			entered= true;
 		for(int i= 0; i < group.size() - 1; i++) {
-			ASTNode member= (ASTNode) group.get(i);
-			ASTNode nextMember= (ASTNode) group.get(i + 1);
+			Expression member= group.get(i);
+			Expression nextMember= group.get(i + 1);
 
 			if(entered) {
 				subGroup.add(member);
@@ -115,14 +115,14 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 					entered= true;
 			}
 		}
-		ASTNode lastGroupMember= (ASTNode)group.get(group.size() - 1);
+		Expression lastGroupMember= group.get(group.size() - 1);
 		if (Util.getEndExclusive(range) == Util.getEndExclusive(SourceRangeFactory.create(lastGroupMember))) {
 			subGroup.add(lastGroupMember);
 			exited= true;
 		}
 
 		if(!exited)
-			return new ArrayList(0);
+			return new ArrayList<Expression>(0);
 		return subGroup;
 	}
 
@@ -139,16 +139,17 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		        && pos <= next.getStartPosition();
 	}
 
-	private static boolean rangeIncludesExtraNonWhitespace(ISourceRange range, List/*<Expression>*/operands, ICompilationUnit cu) throws JavaModelException {
+	private static boolean rangeIncludesExtraNonWhitespace(ISourceRange range, List<Expression> operands, ICompilationUnit cu) throws JavaModelException {
 		return Util.rangeIncludesNonWhitespaceOutsideRange(range, getRangeOfOperands(operands), cu.getBuffer());
 	}
 
-	private static ISourceRange getRangeOfOperands(List/*<Expression>*/operands) {
-		Expression first= (Expression) operands.get(0);
-		Expression last= (Expression) operands.get(operands.size() - 1);
+	private static ISourceRange getRangeOfOperands(List<Expression> operands) {
+		Expression first= operands.get(0);
+		Expression last= operands.get(operands.size() - 1);
 		return new SourceRange(first.getStartPosition(), last.getStartPosition() + last.getLength() - first.getStartPosition());
 	}
 
+	@Override
 	public IASTFragment[] getMatchingFragmentsWithNode(ASTNode node) {
 		IASTFragment fragmentForNode= ASTFragmentFactory.createFragmentForFullSubtree(node);
 		if (fragmentForNode instanceof AssociativeInfixExpressionFragment) {
@@ -164,12 +165,12 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 	 *
 	 * @param source the source to look for matching subsequences
 	 * @param toMatch the sequence to match
-	 * @return returns a List of Lists of <code>ASTNode</code>s
+	 * @return returns a List of Lists of <code>Expression</code>s
 	 */
-	private static List getMatchingContiguousNodeSubsequences(List source, List toMatch) {
+	private static List<List<Expression>> getMatchingContiguousNodeSubsequences(List<Expression> source, List<Expression> toMatch) {
 		//naive implementation:
 
-		List subsequences= new ArrayList();
+		List<List<Expression>> subsequences= new ArrayList<List<Expression>>();
 
 		for(int i= 0; i < source.size();) {
 			if(matchesAt(i, source, toMatch)) {
@@ -182,12 +183,12 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		return subsequences;
 	}
 
-	private static boolean matchesAt(int index, List subject, List toMatch) {
+	private static boolean matchesAt(int index, List<Expression> subject, List<Expression> toMatch) {
 		if(index + toMatch.size() > subject.size())
 			return false;
 		for(int i= 0; i < toMatch.size(); i++, index++) {
 			if(!JdtASTMatcher.doNodesMatch(
-			        (ASTNode) subject.get(index), (ASTNode) toMatch.get(i)
+			        subject.get(index), toMatch.get(i)
 			    )
 			)
 				return false;
@@ -221,7 +222,7 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		        || operator == InfixExpression.Operator.CONDITIONAL_AND;
 	}
 
-	private AssociativeInfixExpressionFragment(InfixExpression groupRoot, List/*<Expression>*/ operands) {
+	private AssociativeInfixExpressionFragment(InfixExpression groupRoot, List<Expression> operands) {
 		Assert.isTrue(isAGroupRoot(groupRoot));
 		Assert.isTrue(operands.size() >= 2);
 		fGroupRoot= groupRoot;
@@ -241,12 +242,12 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		if (getOperands().size() != other.getOperands().size())
 			return false;
 
-		Iterator myOperands= getOperands().iterator();
-		Iterator othersOperands= other.getOperands().iterator();
+		Iterator<Expression> myOperands= getOperands().iterator();
+		Iterator<Expression> othersOperands= other.getOperands().iterator();
 
 		while (myOperands.hasNext() && othersOperands.hasNext()) {
-			ASTNode myOperand= (ASTNode) myOperands.next();
-			ASTNode othersOperand= (ASTNode) othersOperands.next();
+			Expression myOperand= myOperands.next();
+			Expression othersOperand= othersOperands.next();
 
 			if (! JdtASTMatcher.doNodesMatch(myOperand, othersOperand))
 				return false;
@@ -270,7 +271,7 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		if(kinToMatch.getOperator() != getOperator())
 			return new IASTFragment[0];
 
-		List matchingSubsequences=
+		List<List<Expression>> matchingSubsequences=
 			getMatchingContiguousNodeSubsequences(
 				getOperands(),
 				kinToMatch.getOperands()
@@ -280,7 +281,7 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		for(int i= 0; i < matchingSubsequences.size(); i++) {
 			IASTFragment match= new AssociativeInfixExpressionFragment(
 		                           fGroupRoot,
-		                           (List) matchingSubsequences.get(i)
+		                           matchingSubsequences.get(i)
 		                );
 			Assert.isTrue(match.matches(toMatch) || toMatch.matches(match));
 		    matches[i]= match;
@@ -290,8 +291,8 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 
 	private IASTFragment[] getSubFragmentsWithAnotherNodeMatching(IASTFragment toMatch) {
 		IASTFragment[] result= new IASTFragment[0];
-		for (Iterator iter= getOperands().iterator(); iter.hasNext();) {
-			ASTNode operand= (ASTNode) iter.next();
+		for (Iterator<Expression> iter= getOperands().iterator(); iter.hasNext();) {
+			ASTNode operand= iter.next();
 			result= union(result, ASTMatchingFragmentFinder.findMatchingFragments(operand, (ASTFragment)toMatch));
 		}
 		return result;
@@ -344,16 +345,16 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 	}
 
 	private int getEndPositionExclusive() {
-		List operands= getOperands();
-		ASTNode lastNode= (ASTNode) operands.get(operands.size() - 1);
+		List<Expression> operands= getOperands();
+		ASTNode lastNode= operands.get(operands.size() - 1);
 		return lastNode.getStartPosition() + lastNode.getLength();
 	}
 
 	public int getStartPosition() {
-		return ((ASTNode) getOperands().get(0)).getStartPosition();
+		return getOperands().get(0).getStartPosition();
 	}
 
-	public List getOperands() {
+	public List<Expression> getOperands() {
 		return fOperands;
 	}
 
@@ -362,7 +363,7 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 	}
 
 	public Expression createCopyTarget(ASTRewrite rewrite, boolean removeSurroundingParenthesis) throws JavaModelException {
-		List allOperands= findGroupMembersInOrderFor(fGroupRoot);
+		List<Expression> allOperands= findGroupMembersInOrderFor(fGroupRoot);
 		if (allOperands.size() == fOperands.size()) {
 			return (Expression) rewrite.createCopyTarget(fGroupRoot);
 		}
@@ -390,7 +391,7 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 	public void replace(ASTRewrite rewrite, ASTNode replacement, TextEditGroup textEditGroup) {
 		ASTNode groupNode= getGroupRoot();
 
-		List allOperands= findGroupMembersInOrderFor(getGroupRoot());
+		List<Expression> allOperands= findGroupMembersInOrderFor(getGroupRoot());
 		if (allOperands.size() == fOperands.size()) {
 			if (replacement instanceof Name && groupNode.getParent() instanceof ParenthesizedExpression) {
 				// replace including the parenthesized expression around it
@@ -405,12 +406,12 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		// Problem is that the nodes to replace may not be all in the same InfixExpression.
 		int first= allOperands.indexOf(fOperands.get(0));
 		int after= first + fOperands.size();
-		ArrayList newOperands= new ArrayList();
+		ArrayList<Expression> newOperands= new ArrayList<Expression>();
 		for (int i= 0; i < allOperands.size(); i++) {
 			if (i < first || after <= i) {
-				newOperands.add(rewrite.createCopyTarget((Expression) allOperands.get(i)));
+				newOperands.add((Expression) rewrite.createCopyTarget(allOperands.get(i)));
 			} else /* i == first */ {
-				newOperands.add(replacement);
+				newOperands.add((Expression) replacement);
 				i= after - 1;
 			}
 		}
@@ -418,12 +419,12 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 		rewrite.replace(groupNode, newExpression, textEditGroup);
 	}
 
-	private static ArrayList/*<Expression>*/ findGroupMembersInOrderFor(InfixExpression groupRoot) {
+	private static ArrayList<Expression> findGroupMembersInOrderFor(InfixExpression groupRoot) {
 		return new GroupMemberFinder(groupRoot).fMembersInOrder;
 	}
 
 	private static class GroupMemberFinder extends GenericVisitor {
-		private ArrayList/*<Expression>*/ fMembersInOrder= new ArrayList();
+		private ArrayList<Expression> fMembersInOrder= new ArrayList<Expression>();
 		private InfixExpression fGroupRoot;
 
 		public GroupMemberFinder(InfixExpression groupRoot) {
@@ -432,19 +433,22 @@ class AssociativeInfixExpressionFragment extends ASTFragment implements IExpress
 			fGroupRoot= groupRoot;
 			fGroupRoot.accept(this);
 		}
+		@Override
 		protected boolean visitNode(ASTNode node) {
 			if (node instanceof InfixExpression && ((InfixExpression) node).getOperator() == fGroupRoot.getOperator())
 				return true;
 
-			fMembersInOrder.add(node);
+			fMembersInOrder.add((Expression) node);
 			return false;
 		}
 	}
 
+	@Override
 	public int hashCode() {
 		return fGroupRoot.hashCode();
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/SimpleFragment.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/SimpleFragment.java
index 25ae722..6d596af 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/SimpleFragment.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/fragments/SimpleFragment.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ class SimpleFragment extends ASTFragment {
 		fNode= node;
 	}
 
+	@Override
 	public IASTFragment[] getMatchingFragmentsWithNode(ASTNode node) {
 		if (! JdtASTMatcher.doNodesMatch(getAssociatedNode(), node))
 			return new IASTFragment[0];
@@ -67,10 +68,12 @@ class SimpleFragment extends ASTFragment {
 		}
 	}
 
+	@Override
 	public int hashCode() {
 		return fNode.hashCode();
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractFix.java
index 5a8ae57..8ddbeb1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,8 @@ package org.eclipse.jdt.internal.corext.fix;
 
 import org.eclipse.core.runtime.IStatus;
 
-import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 
-
-public abstract class AbstractFix implements ICleanUpFix, IProposableFix, ILinkedFix {
+public abstract class AbstractFix implements IProposableFix, ILinkedFix {
 
 	private final String fDisplayString;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperation.java
index fd43e60..19a8ca5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,6 +85,7 @@ public abstract class AbstractSerialVersionOperation extends CompilationUnitRewr
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel positionGroups) throws CoreException {
 		final ASTRewrite rewrite= cuRewrite.getASTRewrite();
 		VariableDeclarationFragment fragment= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java
index e07bca9..55b79c4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ public class AddUnimplementedMethodsOperation extends CompilationUnitRewriteOper
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 		IMethodBinding[] unimplementedMethods= getUnimplementedMethods(fTypeNode);
 		if (unimplementedMethods.length == 0)
@@ -111,6 +112,7 @@ public class AddUnimplementedMethodsOperation extends CompilationUnitRewriteOper
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getAdditionalInfo() {
 		if (fTypeNode instanceof EnumDeclaration)
 			return CorrectionMessages.UnimplementedMethodsCorrectionProposal_enum_info;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java
index 95d1a8b..4799c58 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1025,7 +1025,7 @@ public class CleanUpConstants {
 	 * Following code snippet can load the profiles:
 	 * 
 	 * <pre>
-	 * List profiles= new ProfileStore(CLEANUP_PROFILES, new CleanUpVersioner()).readProfiles(new InstanceScope());
+	 * List profiles= new ProfileStore(CLEANUP_PROFILES, new CleanUpVersioner()).readProfiles(InstanceScope.INSTANCE);
 	 * </pre>
 	 * 
 	 * @since 3.3
@@ -1264,8 +1264,8 @@ public class CleanUpConstants {
 
 	public static void initDefaults(IPreferenceStore store) {
 		CleanUpOptions settings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
-		for (Iterator iterator= settings.getKeys().iterator(); iterator.hasNext();) {
-			String key= (String)iterator.next();
+		for (Iterator<String> iterator= settings.getKeys().iterator(); iterator.hasNext();) {
+			String key= iterator.next();
 			store.setDefault(key, settings.getValue(key));
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java
index 418f7bd..a94a61a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -103,8 +103,8 @@ import org.eclipse.jdt.ui.cleanup.ICleanUp;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.actions.ActionUtil;
 import org.eclipse.jdt.internal.ui.dialogs.OptionalMessageDialog;
-import org.eclipse.jdt.internal.ui.fix.MapCleanUpOptions;
 import org.eclipse.jdt.internal.ui.fix.IMultiLineCleanUp.MultiLineCleanUpContext;
+import org.eclipse.jdt.internal.ui.fix.MapCleanUpOptions;
 import org.eclipse.jdt.internal.ui.javaeditor.saveparticipant.IPostSaveListener;
 import org.eclipse.jdt.internal.ui.preferences.BulletListBlock;
 import org.eclipse.jdt.internal.ui.preferences.SaveParticipantPreferencePage;
@@ -128,6 +128,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 			fUndos= undos;
 		}
 
+		@Override
 		public final boolean needsSaving() {
 			return true;
 		}
@@ -135,6 +136,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public Change perform(IProgressMonitor pm) throws CoreException {
 			if (isValid(pm).hasFatalError())
 				return new NullChange();
@@ -151,7 +153,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 				
 				final IDocument document= buffer.getDocument();
 				final long oldFileValue= fFile.getModificationStamp();
-				final LinkedList undoEditCollector= new LinkedList();
+				final LinkedList<UndoEdit> undoEditCollector= new LinkedList<UndoEdit>();
 				final long[] oldDocValue= new long[1];
 				final boolean[] setContentStampSuccess= { false };
 				
@@ -210,7 +212,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 					fFile.revertModificationStamp(fFileStamp);
 				}
 
-				return new CleanUpSaveUndo(getName(), fFile, ((UndoEdit[]) undoEditCollector.toArray(new UndoEdit[undoEditCollector.size()])), oldDocValue[0], oldFileValue);
+				return new CleanUpSaveUndo(getName(), fFile, undoEditCollector.toArray(new UndoEdit[undoEditCollector.size()]), oldDocValue[0], oldFileValue);
 			} catch (BadLocationException e) {
 				throw wrapBadLocationException(e);
 			} finally {
@@ -219,7 +221,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 			}
 		}
 
-		private void performEdit(IDocument document, long oldFileValue, LinkedList editCollector, long[] oldDocValue, boolean[] setContentStampSuccess) throws MalformedTreeException, BadLocationException, CoreException {
+		private void performEdit(IDocument document, long oldFileValue, LinkedList<UndoEdit> editCollector, long[] oldDocValue, boolean[] setContentStampSuccess) throws MalformedTreeException, BadLocationException, CoreException {
 			if (document instanceof IDocumentExtension4) {
 				oldDocValue[0]= ((IDocumentExtension4)document).getModificationStamp();
 			} else {
@@ -258,6 +260,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.IconAndMessageDialog#createMessageArea(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createMessageArea(Composite parent) {
 			initializeDialogUnits(parent);
 
@@ -296,6 +299,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 				/*
 				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					PreferencesUtil.createPreferenceDialogOn(getShell(), SaveParticipantPreferencePage.PREFERENCE_PAGE_ID, null, null).open();
 				}
@@ -339,7 +343,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 			long oldDocValue= getDocumentStamp((IFile)unit.getResource(), new SubProgressMonitor(monitor, 2));
 
 			CompositeChange result= new CompositeChange(FixMessages.CleanUpPostSaveListener_SaveAction_ChangeName);
-			LinkedList undoEdits= new LinkedList();
+			LinkedList<UndoEdit> undoEdits= new LinkedList<UndoEdit>();
 
 			if (FIRST_CALL && !FIRST_CALL_DONE) {
 				FIRST_CALL= false;
@@ -347,9 +351,9 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 			} else {
 				FIRST_CALL= true;
 			}
-			HashSet slowCleanUps;
+			HashSet<ICleanUp> slowCleanUps;
 			if (FIRST_CALL_DONE) {
-				slowCleanUps= new HashSet();
+				slowCleanUps= new HashSet<ICleanUp>();
 			} else {
 				slowCleanUps= null;
 			}
@@ -368,9 +372,9 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
     				if (showStatus(preCondition) != Window.OK)
     					return;
 
-    				Map options= new HashMap();
+    				Map<String, String> options= new HashMap<String, String>();
     				for (int i= 0; i < cleanUps.length; i++) {
-    					Map map= cleanUps[i].getRequirements().getCompilerOptions();
+    					Map<String, String> map= cleanUps[i].getRequirements().getCompilerOptions();
     					if (map != null) {
     						options.putAll(map);
     					}
@@ -388,7 +392,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
     					context= new MultiLineCleanUpContext(unit, ast, changedRegions);
     				}
 
-    				ArrayList undoneCleanUps= new ArrayList();
+    				ArrayList<ICleanUp> undoneCleanUps= new ArrayList<ICleanUp>();
 					CleanUpChange change= CleanUpRefactoring.calculateChange(context, cleanUps, undoneCleanUps, slowCleanUps);
 
     				RefactoringStatus postCondition= new RefactoringStatus();
@@ -399,7 +403,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
     				if (showStatus(postCondition) != Window.OK)
     					return;
 
-    				cleanUps= (ICleanUp[])undoneCleanUps.toArray(new ICleanUp[undoneCleanUps.size()]);
+    				cleanUps= undoneCleanUps.toArray(new ICleanUp[undoneCleanUps.size()]);
     				if (change != null) {
     					result.add(change);
 
@@ -425,7 +429,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 			}
 
 			if (undoEdits.size() > 0) {
-    			UndoEdit[] undoEditArray= (UndoEdit[])undoEdits.toArray(new UndoEdit[undoEdits.size()]);
+    			UndoEdit[] undoEditArray= undoEdits.toArray(new UndoEdit[undoEdits.size()]);
     			CleanUpSaveUndo undo= new CleanUpSaveUndo(result.getName(), (IFile)unit.getResource(), undoEditArray, oldDocValue, oldFileValue);
     			undo.initializeValidationData(new NullProgressMonitor());
     			manager.addUndo(result.getName(), undo);
@@ -440,12 +444,12 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 
 	private static ICleanUp[] getCleanUps(IProject project) throws CoreException {
 		ICleanUp[] cleanUps;
-		Map settings= CleanUpPreferenceUtil.loadSaveParticipantOptions(new ProjectScope(project));
+		Map<String, String> settings= CleanUpPreferenceUtil.loadSaveParticipantOptions(new ProjectScope(project));
 		if (settings == null) {
-			IEclipsePreferences contextNode= new InstanceScope().getNode(JavaUI.ID_PLUGIN);
+			IEclipsePreferences contextNode= InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN);
 			String id= contextNode.get(CleanUpConstants.CLEANUP_ON_SAVE_PROFILE, null);
 			if (id == null) {
-				id= new DefaultScope().getNode(JavaUI.ID_PLUGIN).get(CleanUpConstants.CLEANUP_ON_SAVE_PROFILE, CleanUpConstants.DEFAULT_SAVE_PARTICIPANT_PROFILE);
+				id= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).get(CleanUpConstants.CLEANUP_ON_SAVE_PROFILE, CleanUpConstants.DEFAULT_SAVE_PARTICIPANT_PROFILE);
 			}
 			throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, Messages.format(FixMessages.CleanUpPostSaveListener_unknown_profile_error_message, id)));
 		}
@@ -453,11 +457,11 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 		if (CleanUpOptions.TRUE.equals(settings.get(CleanUpConstants.CLEANUP_ON_SAVE_ADDITIONAL_OPTIONS))) {
 			cleanUps= getCleanUps(settings, null);
 		} else {
-			HashMap filteredSettins= new HashMap();
+			HashMap<String, String> filteredSettins= new HashMap<String, String>();
 			filteredSettins.put(CleanUpConstants.FORMAT_SOURCE_CODE, settings.get(CleanUpConstants.FORMAT_SOURCE_CODE));
 			filteredSettins.put(CleanUpConstants.FORMAT_SOURCE_CODE_CHANGES_ONLY, settings.get(CleanUpConstants.FORMAT_SOURCE_CODE_CHANGES_ONLY));
 			filteredSettins.put(CleanUpConstants.ORGANIZE_IMPORTS, settings.get(CleanUpConstants.ORGANIZE_IMPORTS));
-			Set ids= new HashSet(2);
+			Set<String> ids= new HashSet<String>(2);
 			ids.add("org.eclipse.jdt.ui.cleanup.format"); //$NON-NLS-1$
 			ids.add("org.eclipse.jdt.ui.cleanup.imports"); //$NON-NLS-1$
 			cleanUps= getCleanUps(filteredSettins, ids);
@@ -466,7 +470,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 		return cleanUps;
 	}
 
-	private static ICleanUp[] getCleanUps(Map settings, Set ids) {
+	private static ICleanUp[] getCleanUps(Map<String, String> settings, Set<String> ids) {
 		ICleanUp[] result= JavaPlugin.getDefault().getCleanUpRegistry().createCleanUps(ids);
 
 		for (int i= 0; i < result.length; i++) {
@@ -544,14 +548,14 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 
 				performChangeOperation.run(new SubProgressMonitor(monitor, 5));
 
-				ArrayList result= new ArrayList();
+				ArrayList<Region> result= new ArrayList<Region>();
 				for (int i= 0; i < positions.length; i++) {
 					Position position= positions[i];
 					if (!position.isDeleted())
 						result.add(new Region(position.getOffset(), position.getLength()));
 				}
 
-				return (IRegion[]) result.toArray(new IRegion[result.size()]);
+				return result.toArray(new IRegion[result.size()]);
 			} finally {
 				document.removePositionUpdater(updater);
 				try {
@@ -586,7 +590,7 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 		return false;
 	}
 
-	private CompilationUnit createAst(ICompilationUnit unit, Map cleanUpOptions, IProgressMonitor monitor) {
+	private CompilationUnit createAst(ICompilationUnit unit, Map<String, String> cleanUpOptions, IProgressMonitor monitor) {
 		IJavaProject project= unit.getJavaProject();
 		if (compatibleOptions(project, cleanUpOptions)) {
 			CompilationUnit ast= SharedASTProvider.getAST(unit, SharedASTProvider.WAIT_NO, monitor);
@@ -597,23 +601,23 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 		ASTParser parser= CleanUpRefactoring.createCleanUpASTParser();
 		parser.setSource(unit);
 
-		Map compilerOptions= RefactoringASTParser.getCompilerOptions(unit.getJavaProject());
+		Map<String, String> compilerOptions= RefactoringASTParser.getCompilerOptions(unit.getJavaProject());
 		compilerOptions.putAll(cleanUpOptions);
 		parser.setCompilerOptions(compilerOptions);
 
 		return (CompilationUnit)parser.createAST(monitor);
 	}
 
-	private boolean compatibleOptions(IJavaProject project, Map cleanUpOptions) {
+	private boolean compatibleOptions(IJavaProject project, Map<String, String> cleanUpOptions) {
 		if (cleanUpOptions.size() == 0)
 			return true;
 
-		Map projectOptions= project.getOptions(true);
+		Map<String, String> projectOptions= project.getOptions(true);
 
-		for (Iterator iterator= cleanUpOptions.keySet().iterator(); iterator.hasNext();) {
-	        String key= (String)iterator.next();
-	        String projectOption= (String)projectOptions.get(key);
-			String cleanUpOption= (String)cleanUpOptions.get(key);
+		for (Iterator<String> iterator= cleanUpOptions.keySet().iterator(); iterator.hasNext();) {
+	        String key= iterator.next();
+	        String projectOption= projectOptions.get(key);
+			String cleanUpOption= cleanUpOptions.get(key);
 			if (!strongerEquals(projectOption, cleanUpOption))
 				return false;
         }
@@ -662,11 +666,11 @@ public class CleanUpPostSaveListener implements IPostSaveListener {
 		return new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, 0, message, e));
 	}
 
-	private void showSlowCleanUpsWarning(HashSet slowCleanUps) {
+	private void showSlowCleanUpsWarning(HashSet<ICleanUp> slowCleanUps) {
 
 		final StringBuffer cleanUpNames= new StringBuffer();
-		for (Iterator iterator= slowCleanUps.iterator(); iterator.hasNext();) {
-			ICleanUp cleanUp= (ICleanUp)iterator.next();
+		for (Iterator<ICleanUp> iterator= slowCleanUps.iterator(); iterator.hasNext();) {
+			ICleanUp cleanUp= iterator.next();
 			String[] descriptions= cleanUp.getStepDescriptions();
 			if (descriptions != null) {
 				for (int i= 0; i < descriptions.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java
index b4a4cd4..24102cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,22 +32,21 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpMessages;
 import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpProfileManager;
 import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpProfileVersioner;
-import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager;
-import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.BuiltInProfile;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.CustomProfile;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.KeySet;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile;
+import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 
 public class CleanUpPreferenceUtil {
 
 	public static final String SAVE_PARTICIPANT_KEY_PREFIX= "sp_"; //$NON-NLS-1$
 
-	public static Map loadOptions(IScopeContext context) {
+	public static Map<String, String> loadOptions(IScopeContext context) {
     	return loadOptions(context, CleanUpConstants.CLEANUP_PROFILE, CleanUpConstants.DEFAULT_PROFILE);
     }
 
-	private static Map loadOptions(IScopeContext context, String profileIdKey, String defaultProfileId) {
+	private static Map<String, String> loadOptions(IScopeContext context, String profileIdKey, String defaultProfileId) {
     	IEclipsePreferences contextNode= context.getNode(JavaUI.ID_PLUGIN);
     	String id= contextNode.get(profileIdKey, null);
 
@@ -55,19 +54,19 @@ public class CleanUpPreferenceUtil {
     		return loadFromProject(context);
     	}
 
-    	InstanceScope instanceScope= new InstanceScope();
+		IScopeContext instanceScope= InstanceScope.INSTANCE;
     	if (id == null) {
     		if (ProjectScope.SCOPE.equals(context.getName())) {
     			id= instanceScope.getNode(JavaUI.ID_PLUGIN).get(profileIdKey, null);
     		}
     		if (id == null) {
-    			id= new DefaultScope().getNode(JavaUI.ID_PLUGIN).get(profileIdKey, defaultProfileId);
+				id= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).get(profileIdKey, defaultProfileId);
     		}
     	}
 
-    	List builtInProfiles= getBuiltInProfiles();
-    	for (Iterator iterator= builtInProfiles.iterator(); iterator.hasNext();) {
-    		Profile profile= (Profile)iterator.next();
+    	List<Profile> builtInProfiles= getBuiltInProfiles();
+    	for (Iterator<Profile> iterator= builtInProfiles.iterator(); iterator.hasNext();) {
+    		Profile profile= iterator.next();
             if (id.equals(profile.getID()))
             	return profile.getSettings();
         }
@@ -78,7 +77,7 @@ public class CleanUpPreferenceUtil {
     	CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
         ProfileStore profileStore= new ProfileStore(CleanUpConstants.CLEANUP_PROFILES, versioner);
 
-        List list= null;
+        List<Profile> list= null;
         try {
             list= profileStore.readProfiles(instanceScope);
         } catch (CoreException e1) {
@@ -87,8 +86,8 @@ public class CleanUpPreferenceUtil {
         if (list == null)
         	return null;
 
-        for (Iterator iterator= list.iterator(); iterator.hasNext();) {
-        	Profile profile= (Profile)iterator.next();
+        for (Iterator<Profile> iterator= list.iterator(); iterator.hasNext();) {
+        	Profile profile= iterator.next();
         	if (id.equals(profile.getID()))
         		return profile.getSettings();
         }
@@ -96,8 +95,8 @@ public class CleanUpPreferenceUtil {
     	return null;
     }
 
-	private static Map loadFromProject(IScopeContext context) {
-		final Map profileOptions= new HashMap();
+	private static Map<String, String> loadFromProject(IScopeContext context) {
+		final Map<String, String> profileOptions= new HashMap<String, String>();
 		IEclipsePreferences uiPrefs= context.getNode(JavaUI.ID_PLUGIN);
 
     	CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
@@ -109,9 +108,9 @@ public class CleanUpPreferenceUtil {
 		for (int i= 0; i < keySets.length; i++) {
 	        KeySet keySet= keySets[i];
 	        IEclipsePreferences preferences= context.getNode(keySet.getNodeName());
-	        for (final Iterator keyIter = keySet.getKeys().iterator(); keyIter.hasNext(); ) {
-				final String key= (String) keyIter.next();
-				Object val= preferences.get(key, null);
+	        for (final Iterator<String> keyIter = keySet.getKeys().iterator(); keyIter.hasNext(); ) {
+				final String key= keyIter.next();
+				String val= preferences.get(key, null);
 				if (val != null) {
 					hasValues= true;
 				} else {
@@ -133,12 +132,12 @@ public class CleanUpPreferenceUtil {
 		return profile.getSettings();
     }
 
-	public static Map loadSaveParticipantOptions(IScopeContext context) {
+	public static Map<String, String> loadSaveParticipantOptions(IScopeContext context) {
 		IEclipsePreferences node;
 		if (hasSettingsInScope(context)) {
 			node= context.getNode(JavaUI.ID_PLUGIN);
 		} else {
-			IScopeContext instanceScope= new InstanceScope();
+			IScopeContext instanceScope= InstanceScope.INSTANCE;
 			if (hasSettingsInScope(instanceScope)) {
 				node= instanceScope.getNode(JavaUI.ID_PLUGIN);
 			} else {
@@ -146,30 +145,30 @@ public class CleanUpPreferenceUtil {
 			}
 		}
 
-		Map result= new HashMap();
-		Set keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
-		for (Iterator iterator= keys.iterator(); iterator.hasNext();) {
-	        String key= (String)iterator.next();
+		Map<String, String> result= new HashMap<String, String>();
+		Set<String> keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
+		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
+	        String key= iterator.next();
 	        result.put(key, node.get(SAVE_PARTICIPANT_KEY_PREFIX + key, CleanUpOptions.FALSE));
         }
 
 		return result;
 	}
 
-    public static void saveSaveParticipantOptions(IScopeContext context, Map settings) {
+    public static void saveSaveParticipantOptions(IScopeContext context, Map<String, String> settings) {
     	IEclipsePreferences node= context.getNode(JavaUI.ID_PLUGIN);
-    	for (Iterator iterator= settings.keySet().iterator(); iterator.hasNext();) {
-	        String key= (String)iterator.next();
-	        node.put(SAVE_PARTICIPANT_KEY_PREFIX + key, (String)settings.get(key));
+    	for (Iterator<String> iterator= settings.keySet().iterator(); iterator.hasNext();) {
+	        String key= iterator.next();
+	        node.put(SAVE_PARTICIPANT_KEY_PREFIX + key, settings.get(key));
         }
     }
 
 	public static boolean hasSettingsInScope(IScopeContext context) {
     	IEclipsePreferences node= context.getNode(JavaUI.ID_PLUGIN);
 
-    	Set keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
-		for (Iterator iterator= keys.iterator(); iterator.hasNext();) {
-			String key= (String)iterator.next();
+    	Set<String> keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
+		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
+			String key= iterator.next();
 			if (node.get(SAVE_PARTICIPANT_KEY_PREFIX + key, null) != null)
 				return true;
         }
@@ -178,18 +177,18 @@ public class CleanUpPreferenceUtil {
     }
 
 	/**
-	 * Returns a list of {@link ProfileManager.Profile} stored in the <code>scope</code>
-	 * including the built in profiles.
+	 * Returns a list of {@link org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile} stored in the <code>scope</code>,
+	 * including the built-in profiles.
 	 * @param scope the context from which to retrieve the profiles
 	 * @return list of profiles, not null
 	 * @since 3.3
 	 */
-	public static List loadProfiles(IScopeContext scope) {
+	public static List<Profile> loadProfiles(IScopeContext scope) {
 
         CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
     	ProfileStore profileStore= new ProfileStore(CleanUpConstants.CLEANUP_PROFILES, versioner);
 
-    	List list= null;
+    	List<Profile> list= null;
         try {
             list= profileStore.readProfiles(scope);
         } catch (CoreException e1) {
@@ -209,10 +208,10 @@ public class CleanUpPreferenceUtil {
 	 * @return the list of built in profiles, not null
 	 * @since 3.3
 	 */
-	public static List getBuiltInProfiles() {
-    	ArrayList result= new ArrayList();
+	public static List<Profile> getBuiltInProfiles() {
+    	ArrayList<Profile> result= new ArrayList<Profile>();
 
-    	Map settings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getMap();
+    	Map<String, String> settings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getMap();
     	final Profile eclipseProfile= new BuiltInProfile(CleanUpConstants.ECLIPSE_PROFILE, CleanUpMessages.CleanUpProfileManager_ProfileName_EclipseBuildIn, settings, 2, CleanUpProfileVersioner.CURRENT_VERSION, CleanUpProfileVersioner.PROFILE_KIND);
     	result.add(eclipseProfile);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java
index 837ddba..288e08d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ProjectScope;
 import org.eclipse.core.resources.ResourcesPlugin;
 
@@ -80,8 +81,8 @@ import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 import org.eclipse.jdt.ui.text.java.IProblemLocation;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.fix.MapCleanUpOptions;
 import org.eclipse.jdt.internal.ui.fix.IMultiFix.MultiFixContext;
+import org.eclipse.jdt.internal.ui.fix.MapCleanUpOptions;
 import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.refactoring.IScheduledRefactoring;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
@@ -126,6 +127,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected Change createUndoChange(UndoEdit edit, ContentStamp stampToRestore) {
 		    fUndoEdit= edit;
 			return super.createUndoChange(edit, stampToRestore);
@@ -138,6 +140,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		/*
 		 * @see org.eclipse.ltk.core.refactoring.TextChange#perform(org.eclipse.core.runtime.IProgressMonitor)
 		 */
+		@Override
 		public Change perform(final IProgressMonitor pm) throws CoreException {
 			if (Display.getCurrent() == null) {
 				final Change[] result= new Change[1];
@@ -213,6 +216,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void internalWorked(double work) {
 			fRealWork+= work;
 		}
@@ -227,6 +231,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 			fRealWork= 0.0;
 		}
 
+		@Override
 		public void done() {}
 
 		public int getIndex() {
@@ -241,18 +246,18 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 
 	private static class CleanUpASTRequestor extends ASTRequestor {
 
-		private final List/*<ParseListElement>*/fUndoneElements;
-		private final Hashtable/*<ICompilationUnit, Change>*/fSolutions;
-		private final Hashtable/*<ICompilationUnit, ParseListElement>*/fCompilationUnitParseElementMap;
+		private final List<ParseListElement> fUndoneElements;
+		private final Hashtable<ICompilationUnit, List<CleanUpChange>> fSolutions;
+		private final Hashtable<ICompilationUnit, ParseListElement> fCompilationUnitParseElementMap;
 		private final CleanUpRefactoringProgressMonitor fMonitor;
 
-		public CleanUpASTRequestor(List parseList, Hashtable solutions, CleanUpRefactoringProgressMonitor monitor) {
+		public CleanUpASTRequestor(List<ParseListElement> parseList, Hashtable<ICompilationUnit, List<CleanUpChange>> solutions, CleanUpRefactoringProgressMonitor monitor) {
 			fSolutions= solutions;
 			fMonitor= monitor;
-			fUndoneElements= new ArrayList();
-			fCompilationUnitParseElementMap= new Hashtable(parseList.size());
-			for (Iterator iter= parseList.iterator(); iter.hasNext();) {
-				ParseListElement element= (ParseListElement)iter.next();
+			fUndoneElements= new ArrayList<ParseListElement>();
+			fCompilationUnitParseElementMap= new Hashtable<ICompilationUnit, ParseListElement>(parseList.size());
+			for (Iterator<ParseListElement> iter= parseList.iterator(); iter.hasNext();) {
+				ParseListElement element= iter.next();
 				fCompilationUnitParseElementMap.put(element.getTarget().getCompilationUnit(), element);
 			}
 		}
@@ -260,12 +265,13 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void acceptAST(ICompilationUnit source, CompilationUnit ast) {
 
 			fMonitor.subTask(fMonitor.getSubTaskMessage(source));
 
 			ICompilationUnit primary= (ICompilationUnit)source.getPrimaryElement();
-			ParseListElement element= (ParseListElement)fCompilationUnitParseElementMap.get(primary);
+			ParseListElement element= fCompilationUnitParseElementMap.get(primary);
 			CleanUpTarget target= element.getTarget();
 
 			CleanUpContext context;
@@ -288,12 +294,12 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 			acceptAST(source, null);
 		}
 
-		public List getUndoneElements() {
+		public List<ParseListElement> getUndoneElements() {
 			return fUndoneElements;
 		}
 
 		private ICleanUp[] calculateSolutions(CleanUpContext context, ICleanUp[] cleanUps) {
-			List/*<ICleanUp>*/result= new ArrayList();
+			List<ICleanUp>result= new ArrayList<ICleanUp>();
 			CleanUpChange solution;
 			try {
 				solution= calculateChange(context, cleanUps, result, null);
@@ -305,15 +311,15 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 				integrateSolution(solution, context.getCompilationUnit());
 			}
 
-			return (ICleanUp[])result.toArray(new ICleanUp[result.size()]);
+			return result.toArray(new ICleanUp[result.size()]);
 		}
 
 		private void integrateSolution(CleanUpChange solution, ICompilationUnit source) {
 			ICompilationUnit primary= source.getPrimary();
 
-			List changes= (List)fSolutions.get(primary);
+			List<CleanUpChange> changes= fSolutions.get(primary);
 			if (changes == null) {
-				changes= new ArrayList();
+				changes= new ArrayList<CleanUpChange>();
 				fSolutions.put(primary, changes);
 			}
 			changes.add(solution);
@@ -322,26 +328,26 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 
 	private class CleanUpFixpointIterator {
 
-		private List/*<ParseListElement>*/fParseList;
-		private final Hashtable/*<ICompilationUnit, List<CleanUpChange>>*/fSolutions;
-		private final Hashtable/*<ICompilationUnit (primary), ICompilationUnit (working copy)>*/fWorkingCopies;
-		private final Map fCleanUpOptions;
+		private List<ParseListElement> fParseList;
+		private final Hashtable<ICompilationUnit, List<CleanUpChange>> fSolutions;
+		private final Hashtable<ICompilationUnit, ICompilationUnit> fWorkingCopies; // map from primary to working copy
+		private final Map<String, String> fCleanUpOptions;
 		private final int fSize;
 		private int fIndex;
 
 		public CleanUpFixpointIterator(CleanUpTarget[] targets, ICleanUp[] cleanUps) {
-			fSolutions= new Hashtable(targets.length);
-			fWorkingCopies= new Hashtable();
+			fSolutions= new Hashtable<ICompilationUnit, List<CleanUpChange>>(targets.length);
+			fWorkingCopies= new Hashtable<ICompilationUnit, ICompilationUnit>();
 
-			fParseList= new ArrayList(targets.length);
+			fParseList= new ArrayList<ParseListElement>(targets.length);
 			for (int i= 0; i < targets.length; i++) {
 				fParseList.add(new ParseListElement(targets[i], cleanUps));
 			}
 
-			fCleanUpOptions= new Hashtable();
+			fCleanUpOptions= new Hashtable<String, String>();
 			for (int i= 0; i < cleanUps.length; i++) {
 				ICleanUp cleanUp= cleanUps[i];
-				Map currentCleanUpOption= cleanUp.getRequirements().getCompilerOptions();
+				Map<String, String> currentCleanUpOption= cleanUp.getRequirements().getCompilerOptions();
 				if (currentCleanUpOption != null)
 					fCleanUpOptions.putAll(currentCleanUpOption);
 			}
@@ -355,22 +361,22 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		}
 
 		public void next(IProgressMonitor monitor) throws CoreException {
-			List parseList= new ArrayList();
-			List sourceList= new ArrayList();
+			List<ICompilationUnit> parseList= new ArrayList<ICompilationUnit>();
+			List<ICompilationUnit> sourceList= new ArrayList<ICompilationUnit>();
 
 			try {
-				for (Iterator iter= fParseList.iterator(); iter.hasNext();) {
-					ParseListElement element= (ParseListElement)iter.next();
+				for (Iterator<ParseListElement> iter= fParseList.iterator(); iter.hasNext();) {
+					ParseListElement element= iter.next();
 
 					ICompilationUnit compilationUnit= element.getTarget().getCompilationUnit();
 					if (fSolutions.containsKey(compilationUnit)) {
 						if (fWorkingCopies.containsKey(compilationUnit)) {
-							compilationUnit= (ICompilationUnit)fWorkingCopies.get(compilationUnit);
+							compilationUnit= fWorkingCopies.get(compilationUnit);
 						} else {
 							compilationUnit= compilationUnit.getWorkingCopy(new WorkingCopyOwner() {}, null);
 							fWorkingCopies.put(compilationUnit.getPrimary(), compilationUnit);
 						}
-						applyChange(compilationUnit, (List)fSolutions.get(compilationUnit.getPrimary()));
+						applyChange(compilationUnit, fSolutions.get(compilationUnit.getPrimary()));
 					}
 
 					if (requiresAST(element.getCleanUps())) {
@@ -384,26 +390,27 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 				CleanUpASTRequestor requestor= new CleanUpASTRequestor(fParseList, fSolutions, cuMonitor);
 				if (parseList.size() > 0) {
 					ASTBatchParser parser= new ASTBatchParser() {
+						@Override
 						protected ASTParser createParser(IJavaProject project) {
 							ASTParser result= createCleanUpASTParser();
 							result.setProject(project);
 
-							Map options= RefactoringASTParser.getCompilerOptions(project);
+							Map<String, String> options= RefactoringASTParser.getCompilerOptions(project);
 							options.putAll(fCleanUpOptions);
 							result.setCompilerOptions(options);
 							return result;
 						}
 					};
 					try {
-						ICompilationUnit[] units= (ICompilationUnit[])parseList.toArray(new ICompilationUnit[parseList.size()]);
+						ICompilationUnit[] units= parseList.toArray(new ICompilationUnit[parseList.size()]);
 						parser.createASTs(units, new String[0], requestor, cuMonitor);
 					} catch (FixCalculationException e) {
 						throw e.getException();
 					}
 				}
 
-				for (Iterator iterator= sourceList.iterator(); iterator.hasNext();) {
-					ICompilationUnit cu= (ICompilationUnit)iterator.next();
+				for (Iterator<ICompilationUnit> iterator= sourceList.iterator(); iterator.hasNext();) {
+					ICompilationUnit cu= iterator.next();
 
 					monitor.worked(1);
 
@@ -420,8 +427,8 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		}
 
 		public void dispose() {
-			for (Iterator iterator= fWorkingCopies.values().iterator(); iterator.hasNext();) {
-				ICompilationUnit cu= (ICompilationUnit)iterator.next();
+			for (Iterator<ICompilationUnit> iterator= fWorkingCopies.values().iterator(); iterator.hasNext();) {
+				ICompilationUnit cu= iterator.next();
 				try {
 					cu.discardWorkingCopy();
 				} catch (JavaModelException e) {
@@ -443,11 +450,11 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 
 			Change[] result= new Change[fSolutions.size()];
 			int i=0;
-			for (Iterator iterator= fSolutions.entrySet().iterator(); iterator.hasNext();) {
-				Map.Entry entry= (Map.Entry)iterator.next();
+			for (Iterator<Entry<ICompilationUnit, List<CleanUpChange>>> iterator= fSolutions.entrySet().iterator(); iterator.hasNext();) {
+				Entry<ICompilationUnit, List<CleanUpChange>>  entry= iterator.next();
 
-				List changes= (List)entry.getValue();
-				ICompilationUnit unit= (ICompilationUnit)entry.getKey();
+				List<CleanUpChange> changes= entry.getValue();
+				ICompilationUnit unit= entry.getKey();
 
 				int saveMode;
 				if (fLeaveFilesDirty) {
@@ -457,13 +464,13 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 				}
 
 				if (changes.size() == 1) {
-					CleanUpChange change= (CleanUpChange)changes.get(0);
+					CleanUpChange change= changes.get(0);
 					change.setSaveMode(saveMode);
 					result[i]= change;
 				} else {
 					MultiStateCompilationUnitChange mscuc= new MultiStateCompilationUnitChange(getChangeName(unit), unit);
 					for (int j= 0; j < changes.size(); j++) {
-						mscuc.addChange(createGroupFreeChange((CleanUpChange)changes.get(j)));
+						mscuc.addChange(createGroupFreeChange(changes.get(j)));
 					}
 					mscuc.setSaveMode(saveMode);
 					result[i]= mscuc;
@@ -482,10 +489,10 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	        return result;
         }
 
-		private void applyChange(ICompilationUnit compilationUnit, List changes) throws JavaModelException, CoreException {
-			IDocument document= new Document(((CompilationUnitChange)changes.get(0)).getCurrentContent(new NullProgressMonitor()));
+		private void applyChange(ICompilationUnit compilationUnit, List<CleanUpChange> changes) throws JavaModelException, CoreException {
+			IDocument document= new Document(changes.get(0).getCurrentContent(new NullProgressMonitor()));
 			for (int i= 0; i < changes.size(); i++) {
-				CleanUpChange change= (CleanUpChange)changes.get(i);
+				CleanUpChange change= changes.get(i);
 				TextEdit edit= change.getEdit().copy();
 
 				try {
@@ -508,8 +515,8 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	 */
 	private static final int SLOW_CLEAN_UP_THRESHOLD= 2000;
 
-	private final List/*<ICleanUp>*/fCleanUps;
-	private final Hashtable/*<IJavaProject, List<CleanUpTarget>*/fProjects;
+	private final List<ICleanUp> fCleanUps;
+	private final Hashtable<IJavaProject, List<CleanUpTarget>> fProjects;
 	private Change fChange;
 	private boolean fLeaveFilesDirty;
 	private final String fName;
@@ -522,8 +529,8 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 
 	public CleanUpRefactoring(String name) {
 		fName= name;
-		fCleanUps= new ArrayList();
-		fProjects= new Hashtable();
+		fCleanUps= new ArrayList<ICleanUp>();
+		fProjects= new Hashtable<IJavaProject, List<CleanUpTarget>>();
 		fUseOptionsFromProfile= false;
 	}
 
@@ -539,25 +546,25 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 
 		IJavaProject javaProject= target.getCompilationUnit().getJavaProject();
 		if (!fProjects.containsKey(javaProject))
-			fProjects.put(javaProject, new ArrayList());
+			fProjects.put(javaProject, new ArrayList<CleanUpTarget>());
 
-		List targets= (List)fProjects.get(javaProject);
+		List<CleanUpTarget> targets= fProjects.get(javaProject);
 		targets.add(target);
 	}
 
 	public CleanUpTarget[] getCleanUpTargets() {
-		List result= new ArrayList();
-		for (Iterator iter= fProjects.values().iterator(); iter.hasNext();) {
-			List projectTargets= (List)iter.next();
+		List<CleanUpTarget> result= new ArrayList<CleanUpTarget>();
+		for (Iterator<List<CleanUpTarget>> iter= fProjects.values().iterator(); iter.hasNext();) {
+			List<CleanUpTarget> projectTargets= iter.next();
 			result.addAll(projectTargets);
 		}
-		return (CleanUpTarget[])result.toArray(new CleanUpTarget[result.size()]);
+		return result.toArray(new CleanUpTarget[result.size()]);
 	}
 
 	public int getCleanUpTargetsSize() {
 		int result= 0;
-		for (Iterator iter= fProjects.values().iterator(); iter.hasNext();) {
-			List projectTargets= (List)iter.next();
+		for (Iterator<List<CleanUpTarget>> iter= fProjects.values().iterator(); iter.hasNext();) {
+			List<CleanUpTarget> projectTargets= iter.next();
 			result+= projectTargets.size();
 		}
 		return result;
@@ -576,11 +583,11 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	}
 
 	public ICleanUp[] getCleanUps() {
-		return (ICleanUp[])fCleanUps.toArray(new ICleanUp[fCleanUps.size()]);
+		return fCleanUps.toArray(new ICleanUp[fCleanUps.size()]);
 	}
 
 	public IJavaProject[] getProjects() {
-		return (IJavaProject[])fProjects.keySet().toArray(new IJavaProject[fProjects.keySet().size()]);
+		return fProjects.keySet().toArray(new IJavaProject[fProjects.keySet().size()]);
 	}
 
 	public void setLeaveFilesDirty(boolean leaveFilesDirty) {
@@ -590,6 +597,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#getName()
 	 */
+	@Override
 	public String getName() {
 		return fName;
 	}
@@ -597,6 +605,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		if (pm != null) {
 			pm.beginTask("", 1); //$NON-NLS-1$
@@ -609,6 +618,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		if (pm != null) {
 			pm.beginTask("", 1); //$NON-NLS-1$
@@ -621,6 +631,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 
 		if (pm == null)
@@ -644,11 +655,11 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		try {
 			DynamicValidationStateChange change= new DynamicValidationStateChange(getName());
 			change.setSchedulingRule(getSchedulingRule());
-			for (Iterator projectIter= fProjects.entrySet().iterator(); projectIter.hasNext();) {
-				Map.Entry entry= (Entry) projectIter.next();
-				IJavaProject project= (IJavaProject) entry.getKey();
-				List targetsList= (List) entry.getValue();
-				CleanUpTarget[] targets= (CleanUpTarget[])targetsList.toArray(new CleanUpTarget[targetsList.size()]);
+			for (Iterator<Entry<IJavaProject, List<CleanUpTarget>>> projectIter= fProjects.entrySet().iterator(); projectIter.hasNext();) {
+				Entry<IJavaProject, List<CleanUpTarget>> entry= projectIter.next();
+				IJavaProject project= entry.getKey();
+				List<CleanUpTarget> targetsList= entry.getValue();
+				CleanUpTarget[] targets= targetsList.toArray(new CleanUpTarget[targetsList.size()]);
 
 				if (fUseOptionsFromProfile) {
 					result.merge(setOptionsFromProfile(project, cleanUps));
@@ -672,9 +683,9 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 			}
 			fChange= change;
 
-			List files= new ArrayList();
+			List<IResource> files= new ArrayList<IResource>();
 			findFilesToBeModified(change, files);
-			result.merge(Checks.validateModifiesFiles((IFile[])files.toArray(new IFile[files.size()]), getValidationContext()));
+			result.merge(Checks.validateModifiesFiles(files.toArray(new IFile[files.size()]), getValidationContext()));
 		} finally {
 			pm.done();
 		}
@@ -682,7 +693,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		return result;
 	}
 
-	private void findFilesToBeModified(CompositeChange change, List result) throws JavaModelException {
+	private void findFilesToBeModified(CompositeChange change, List<IResource> result) throws JavaModelException {
 		Change[] children= change.getChildren();
 		for (int i= 0; i < children.length; i++) {
 			Change child= children[i];
@@ -715,7 +726,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	}
 
 	private RefactoringStatus setOptionsFromProfile(IJavaProject javaProject, ICleanUp[] cleanUps) {
-		Map options= CleanUpPreferenceUtil.loadOptions(new ProjectScope(javaProject.getProject()));
+		Map<String, String> options= CleanUpPreferenceUtil.loadOptions(new ProjectScope(javaProject.getProject()));
 		if (options == null)
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(FixMessages.CleanUpRefactoring_could_not_retrive_profile, BasicElementLabels.getResourceName(javaProject.getProject())));
 
@@ -778,7 +789,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 		return buf.toString();
 	}
 
-	public static CleanUpChange calculateChange(CleanUpContext context, ICleanUp[] cleanUps, List undoneCleanUps, HashSet slowCleanUps) throws CoreException {
+	public static CleanUpChange calculateChange(CleanUpContext context, ICleanUp[] cleanUps, List<ICleanUp> undoneCleanUps, HashSet<ICleanUp> slowCleanUps) throws CoreException {
 		if (cleanUps.length == 0)
 			return null;
 
@@ -849,6 +860,7 @@ public class CleanUpRefactoring extends Refactoring implements IScheduledRefacto
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#getRefactoringTickProvider()
 	 */
+	@Override
 	protected RefactoringTickProvider doGetRefactoringTickProvider() {
 		return CLEAN_UP_REFACTORING_TICK_PROVIDER;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java
index a67d062..d3e696b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -260,9 +260,9 @@ public class CleanUpRegistry {
 	 * @return an array of clean ups
 	 * @since 3.5
 	 */
-	public synchronized ICleanUp[] createCleanUps(Set ids) {
+	public synchronized ICleanUp[] createCleanUps(Set<String> ids) {
 		ensureCleanUpsRegistered();
-		ArrayList result= new ArrayList(fCleanUpDescriptors.length);
+		ArrayList<ICleanUp> result= new ArrayList<ICleanUp>(fCleanUpDescriptors.length);
 		for (int i= 0; i < fCleanUpDescriptors.length; i++) {
 			if (ids == null || ids.contains(fCleanUpDescriptors[i].getId())) {
 				ICleanUp cleanUp= fCleanUpDescriptors[i].createCleanUp();
@@ -270,7 +270,7 @@ public class CleanUpRegistry {
 					result.add(cleanUp);
 			}
 		}
-		return (ICleanUp[])result.toArray(new ICleanUp[result.size()]);
+		return result.toArray(new ICleanUp[result.size()]);
 	}
 
 	/**
@@ -284,12 +284,12 @@ public class CleanUpRegistry {
 	public synchronized CleanUpTabPageDescriptor[] getCleanUpTabPageDescriptors(int kind) {
 		ensurePagesRegistered();
 
-		ArrayList result= new ArrayList();
+		ArrayList<CleanUpTabPageDescriptor> result= new ArrayList<CleanUpTabPageDescriptor>();
 		for (int i= 0; i < fPageDescriptors.length; i++) {
 			if (fPageDescriptors[i].getKind() == kind)
 				result.add(fPageDescriptors[i]);
 		}
-		return (CleanUpTabPageDescriptor[])result.toArray(new CleanUpTabPageDescriptor[result.size()]);
+		return result.toArray(new CleanUpTabPageDescriptor[result.size()]);
 	}
 
 	/**
@@ -321,7 +321,7 @@ public class CleanUpRegistry {
 			return;
 
 
-		final ArrayList descriptors= new ArrayList();
+		final ArrayList<CleanUpDescriptor> descriptors= new ArrayList<CleanUpDescriptor>();
 
 		IExtensionPoint point= Platform.getExtensionRegistry().getExtensionPoint(JavaPlugin.getPluginId(), EXTENSION_POINT_NAME);
 		IConfigurationElement[] elements= point.getConfigurationElements();
@@ -336,7 +336,7 @@ public class CleanUpRegistry {
 
 		// Make sure we filter those who fail or misbehave
 		for (int i= 0; i < descriptors.size(); i++) {
-			final CleanUpDescriptor cleanUpDescriptor= (CleanUpDescriptor)descriptors.get(i);
+			final CleanUpDescriptor cleanUpDescriptor= descriptors.get(i);
 			final boolean disable[]= new boolean[1];
 			ISafeRunnable runnable= new SafeRunnable() {
 				
@@ -355,6 +355,7 @@ public class CleanUpRegistry {
 						}
 					}
 				}
+				@Override
 				public void handleException(Throwable t) {
 					disable[0]= true;
 					String message= Messages.format(FixMessages.CleanUpRegistry_cleanUpCreation_error, new String[] { cleanUpDescriptor.getId(),
@@ -369,7 +370,7 @@ public class CleanUpRegistry {
 				descriptors.remove(i--);
 		}
 
-		fCleanUpDescriptors= (CleanUpDescriptor[])descriptors.toArray(new CleanUpDescriptor[descriptors.size()]);
+		fCleanUpDescriptors= descriptors.toArray(new CleanUpDescriptor[descriptors.size()]);
 		sort(fCleanUpDescriptors);
 
 	}
@@ -415,7 +416,7 @@ public class CleanUpRegistry {
 		if (fPageDescriptors != null)
 			return;
 		
-		ArrayList result= new ArrayList();
+		ArrayList<CleanUpTabPageDescriptor> result= new ArrayList<CleanUpTabPageDescriptor>();
 
 		IExtensionPoint point= Platform.getExtensionRegistry().getExtensionPoint(JavaPlugin.getPluginId(), EXTENSION_POINT_NAME);
 		IConfigurationElement[] elements= point.getConfigurationElements();
@@ -427,11 +428,11 @@ public class CleanUpRegistry {
 			}
 		}
 
-		fPageDescriptors= (CleanUpTabPageDescriptor[])result.toArray(new CleanUpTabPageDescriptor[result.size()]);
-		Arrays.sort(fPageDescriptors, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				String name1= ((CleanUpTabPageDescriptor)o1).getName();
-				String name2= ((CleanUpTabPageDescriptor)o2).getName();
+		fPageDescriptors= result.toArray(new CleanUpTabPageDescriptor[result.size()]);
+		Arrays.sort(fPageDescriptors, new Comparator<CleanUpTabPageDescriptor>() {
+			public int compare(CleanUpTabPageDescriptor o1, CleanUpTabPageDescriptor o2) {
+				String name1= o1.getName();
+				String name2= o2.getName();
 				return Collator.getInstance().compare(name1.replaceAll("&", ""), name2.replaceAll("&", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 			}
 		});
@@ -441,7 +442,7 @@ public class CleanUpRegistry {
 		if (fCleanUpInitializerDescriptors != null)
 			return;
 
-		ArrayList result= new ArrayList();
+		ArrayList<CleanUpInitializerDescriptor> result= new ArrayList<CleanUpInitializerDescriptor>();
 
 		IExtensionPoint point= Platform.getExtensionRegistry().getExtensionPoint(JavaPlugin.getPluginId(), EXTENSION_POINT_NAME);
 		IConfigurationElement[] elements= point.getConfigurationElements();
@@ -453,7 +454,7 @@ public class CleanUpRegistry {
 			}
 		}
 
-		fCleanUpInitializerDescriptors= (CleanUpInitializerDescriptor[])result.toArray(new CleanUpInitializerDescriptor[result.size()]);
+		fCleanUpInitializerDescriptors= result.toArray(new CleanUpInitializerDescriptor[result.size()]);
 	}
 
 	private static int getCleanUpKind(String kind) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java
index 9df9c10..7417142 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,11 +54,11 @@ public class CodeFormatFix implements ICleanUpFix {
 		if (!format && !removeTrailingWhitespacesAll && !removeTrailingWhitespacesIgnorEmpty && !correctIndentation)
 			return null;
 
-		ArrayList groups= new ArrayList();
+		ArrayList<CategorizedTextEditGroup> groups= new ArrayList<CategorizedTextEditGroup>();
 
 		MultiTextEdit formatEdit= new MultiTextEdit();
 		if (format) {
-			Map formatterSettings= new HashMap(cu.getJavaProject().getOptions(true));
+			Map<String, String> formatterSettings= new HashMap<String, String>(cu.getJavaProject().getOptions(true));
 
 			String content= cu.getBuffer().getContents();
 			Document document= new Document(content);
@@ -184,7 +184,7 @@ public class CodeFormatFix implements ICleanUpFix {
 		change.setEdit(resultEdit);
 
 		for (int i= 0, size= groups.size(); i < size; i++) {
-			TextEditGroup group= (TextEditGroup) groups.get(i);
+			TextEditGroup group= groups.get(i);
 			change.addTextEditGroup(group);
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFix.java
index 84e5603..b9c8f56 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,7 +76,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 
 	private final static class CodeStyleVisitor extends GenericVisitor {
 
-		private final List/*<CompilationUnitRewriteOperation>*/ fResult;
+		private final List<CompilationUnitRewriteOperation> fResult;
 		private final ImportRewrite fImportRewrite;
 		private final boolean fFindUnqualifiedAccesses;
 		private final boolean fFindUnqualifiedStaticAccesses;
@@ -88,7 +88,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 				boolean findUnqualifiedStaticAccesses,
 				boolean findUnqualifiedMethodAccesses,
 				boolean findUnqualifiedStaticMethodAccesses,
-				List resultingCollection) {
+				List<CompilationUnitRewriteOperation> resultingCollection) {
 
 			fFindUnqualifiedAccesses= findUnqualifiedAccesses;
 			fFindUnqualifiedStaticAccesses= findUnqualifiedStaticAccesses;
@@ -101,6 +101,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			if (!fFindUnqualifiedStaticAccesses && !fFindUnqualifiedStaticMethodAccesses && node.isInterface())
 				return false;
@@ -108,6 +109,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(QualifiedName node) {
 			if (fFindUnqualifiedAccesses || fFindUnqualifiedStaticAccesses) {
 				ASTNode simpleName= node;
@@ -121,6 +123,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 			return false;
 		}
 
+		@Override
 		public boolean visit(SimpleName node) {
 			if (fFindUnqualifiedAccesses || fFindUnqualifiedStaticAccesses) {
 				handleSimpleName(node);
@@ -131,6 +134,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(MethodInvocation node) {
 			if (!fFindUnqualifiedMethodAccesses && !fFindUnqualifiedStaticMethodAccesses)
 				return true;
@@ -233,14 +237,14 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 	private static class ThisQualifierVisitor extends GenericVisitor {
 
 		private final CompilationUnit fCompilationUnit;
-		private final List fOperations;
+		private final List<CompilationUnitRewriteOperation> fOperations;
 		private final boolean fRemoveFieldQualifiers;
 		private final boolean fRemoveMethodQualifiers;
 
 		public ThisQualifierVisitor(boolean removeFieldQualifiers,
 									boolean removeMethodQualifiers,
 									CompilationUnit compilationUnit,
-									List result) {
+									List<CompilationUnitRewriteOperation> result) {
 			fRemoveFieldQualifiers= removeFieldQualifiers;
 			fRemoveMethodQualifiers= removeMethodQualifiers;
 			fCompilationUnit= compilationUnit;
@@ -250,6 +254,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(final FieldAccess node) {
 			if (!fRemoveFieldQualifiers)
 				return true;
@@ -278,9 +283,17 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 					//the field. It's possible that the inner type inherits the same field. We must not remove
 					//the qualifier in this case.
 					return true;
+				
+				ITypeBinding enclosingTypeBinding= Bindings.getBindingOfParentType(node);
+				if (enclosingTypeBinding == null || Bindings.isSuperType(variablesDeclaringClass, enclosingTypeBinding))
+					//We have a reference to a field of an outer type, and this type inherited
+					//the field. The inner type inherits the same field. We must not remove
+					//the qualifier in this case.
+					return true;
 			}
 
 			fOperations.add(new CompilationUnitRewriteOperation() {
+				@Override
 				public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 					ASTRewrite rewrite= cuRewrite.getASTRewrite();
 					TextEditGroup group= createTextEditGroup(FixMessages.CodeStyleFix_removeThis_groupDescription, cuRewrite);
@@ -293,6 +306,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(final MethodInvocation node) {
 			if (!fRemoveMethodQualifiers)
 				return true;
@@ -327,6 +341,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 			}
 
 			fOperations.add(new CompilationUnitRewriteOperation() {
+				@Override
 				public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 					ASTRewrite rewrite= cuRewrite.getASTRewrite();
 					TextEditGroup group= createTextEditGroup(FixMessages.CodeStyleFix_removeThis_groupDescription, cuRewrite);
@@ -384,6 +399,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			TextEditGroup group= createTextEditGroup(getDescription(), cuRewrite);
@@ -416,6 +432,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			CompilationUnit compilationUnit= cuRewrite.getRoot();
@@ -441,9 +458,9 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 
 		private final ITypeBinding fDeclaringTypeBinding;
 		private final Expression fQualifier;
-		private final HashMap fCreatedBlocks;
+		private final HashMap<ASTNode, Block> fCreatedBlocks;
 
-		public ToStaticAccessOperation(ITypeBinding declaringTypeBinding, Expression qualifier, HashMap createdBlocks) {
+		public ToStaticAccessOperation(ITypeBinding declaringTypeBinding, Expression qualifier, HashMap<ASTNode, Block> createdBlocks) {
 			fDeclaringTypeBinding= declaringTypeBinding;
 			fQualifier= qualifier;
 			fCreatedBlocks= createdBlocks;
@@ -456,6 +473,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			TextEditGroup group= createTextEditGroup(FixMessages.CodeStyleFix_ChangeAccessUsingDeclaring_description, cuRewrite);
 
@@ -485,7 +503,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 			} else {
 				Block block;
 				if (fCreatedBlocks.containsKey(statement.getParent())) {
-					block= (Block) fCreatedBlocks.get(statement.getParent());
+					block= fCreatedBlocks.get(statement.getParent());
 				} else {
 					block= ast.newBlock();
 				}
@@ -502,7 +520,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 					ASTNode parent= statement.getParent();
 					astRewrite.set(parent, statement.getLocationInParent(), block, group);
 				} else {
-					List rewrittenList= listRewrite.getRewrittenList();
+					List<?> rewrittenList= listRewrite.getRewrittenList();
 					lastStatement= (ASTNode) rewrittenList.get(rewrittenList.size() - 1);
 				}
 
@@ -515,7 +533,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		if (!isNonStaticAccess(problem))
 			return null;
 
-		ToStaticAccessOperation operations[]= createToStaticAccessOperations(compilationUnit, new HashMap(), problem, false);
+		ToStaticAccessOperation operations[]= createToStaticAccessOperations(compilationUnit, new HashMap<ASTNode, Block>(), problem, false);
 		if (operations == null)
 			return null;
 
@@ -546,7 +564,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		if (!isIndirectStaticAccess(problem))
 			return null;
 
-		ToStaticAccessOperation operations[]= createToStaticAccessOperations(compilationUnit, new HashMap(), problem, false);
+		ToStaticAccessOperation operations[]= createToStaticAccessOperations(compilationUnit, new HashMap<ASTNode, Block>(), problem, false);
 		if (operations == null)
 			return null;
 
@@ -567,7 +585,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		if (!addThisQualifier && !changeNonStaticAccessToStatic && !qualifyStaticFieldAccess && !changeIndirectStaticAccessToDirect && !qualifyMethodAccess && !qualifyStaticMethodAccess && !removeFieldQualifier && !removeMethodQualifier)
 			return null;
 
-		List/*<CompilationUnitRewriteOperation>*/ operations= new ArrayList();
+		List<CompilationUnitRewriteOperation> operations= new ArrayList<CompilationUnitRewriteOperation>();
 		if (addThisQualifier || qualifyStaticFieldAccess || qualifyMethodAccess || qualifyStaticMethodAccess) {
 			CodeStyleVisitor codeStyleVisitor= new CodeStyleVisitor(compilationUnit, addThisQualifier, qualifyStaticFieldAccess, qualifyMethodAccess, qualifyStaticMethodAccess, operations);
 			compilationUnit.accept(codeStyleVisitor);
@@ -588,7 +606,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		if (operations.isEmpty())
 			return null;
 
-		CompilationUnitRewriteOperation[] operationsArray= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+		CompilationUnitRewriteOperation[] operationsArray= operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
 		return new CodeStyleFix(FixMessages.CodeStyleFix_change_name, compilationUnit, operationsArray);
 	}
 
@@ -600,7 +618,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		if (!addThisQualifier && !changeNonStaticAccessToStatic && !changeIndirectStaticAccessToDirect)
 			return null;
 
-		List/*<CompilationUnitRewriteOperation>*/ operations= new ArrayList();
+		List<CompilationUnitRewriteOperation> operations= new ArrayList<CompilationUnitRewriteOperation>();
 		if (addThisQualifier) {
 			for (int i= 0; i < problems.length; i++) {
 				IProblemLocation problem= problems[i];
@@ -617,15 +635,15 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 		if (operations.isEmpty())
 			return null;
 
-		CompilationUnitRewriteOperation[] operationsArray= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+		CompilationUnitRewriteOperation[] operationsArray= operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
 		return new CodeStyleFix(FixMessages.CodeStyleFix_change_name, compilationUnit, operationsArray);
 	}
 
-	private static void addToStaticAccessOperations(CompilationUnit compilationUnit, IProblemLocation[] problems, boolean changeNonStaticAccessToStatic, boolean changeIndirectStaticAccessToDirect, List result) {
+	private static void addToStaticAccessOperations(CompilationUnit compilationUnit, IProblemLocation[] problems, boolean changeNonStaticAccessToStatic, boolean changeIndirectStaticAccessToDirect, List<CompilationUnitRewriteOperation> result) {
 		if (!changeNonStaticAccessToStatic && !changeIndirectStaticAccessToDirect)
 			return;
 
-		HashMap createdBlocks= new HashMap();
+		HashMap<ASTNode, Block> createdBlocks= new HashMap<ASTNode, Block>();
 		for (int i= 0; i < problems.length; i++) {
 			IProblemLocation problem= problems[i];
 			boolean isNonStaticAccess= changeNonStaticAccessToStatic && isNonStaticAccess(problem);
@@ -670,7 +688,7 @@ public class CodeStyleFix extends CompilationUnitRewriteOperationsFix {
 				|| problem.getProblemId() == IProblem.NonStaticAccessToStaticMethod);
 	}
 
-	private static ToStaticAccessOperation[] createToStaticAccessOperations(CompilationUnit astRoot, HashMap createdBlocks, IProblemLocation problem, boolean conservative) {
+	private static ToStaticAccessOperation[] createToStaticAccessOperations(CompilationUnit astRoot, HashMap<ASTNode, Block> createdBlocks, IProblemLocation problem, boolean conservative) {
 		ASTNode selectedNode= problem.getCoveringNode(astRoot);
 		if (selectedNode == null) {
 			return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CompilationUnitRewriteOperationsFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CompilationUnitRewriteOperationsFix.java
index ec5e880..34f5513 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CompilationUnitRewriteOperationsFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CompilationUnitRewriteOperationsFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ public class CompilationUnitRewriteOperationsFix extends AbstractFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public LinkedProposalModel getLinkedPositions() {
 		if (!fLinkedProposalModel.hasLinkedPositions())
 			return null;
@@ -110,6 +111,7 @@ public class CompilationUnitRewriteOperationsFix extends AbstractFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getAdditionalProposalInfo(){
 		StringBuffer sb= new StringBuffer();
 		for (int i= 0; i < fOperations.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ControlStatementsFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ControlStatementsFix.java
index d9348ed..a0b4bfe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ControlStatementsFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ControlStatementsFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 
 	private final static class ControlStatementFinder extends GenericVisitor {
 
-		private final List/*<CompilationUnitRewriteOperation>*/ fResult;
+		private final List<CompilationUnitRewriteOperation> fResult;
 		private final boolean fFindControlStatementsWithoutBlock;
 		private final boolean fRemoveUnnecessaryBlocks;
 		private final boolean fRemoveUnnecessaryBlocksOnlyWhenReturnOrThrow;
@@ -49,7 +49,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		public ControlStatementFinder(boolean findControlStatementsWithoutBlock,
 				boolean removeUnnecessaryBlocks,
 				boolean removeUnnecessaryBlocksOnlyWhenReturnOrThrow,
-				List resultingCollection) {
+				List<CompilationUnitRewriteOperation> resultingCollection) {
 
 			fFindControlStatementsWithoutBlock= findControlStatementsWithoutBlock;
 			fRemoveUnnecessaryBlocks= removeUnnecessaryBlocks;
@@ -60,6 +60,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.DoStatement)
 		 */
+		@Override
 		public boolean visit(DoStatement node) {
 			handle(node.getBody(), DoStatement.BODY_PROPERTY);
 
@@ -69,6 +70,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.ForStatement)
 		 */
+		@Override
 		public boolean visit(ForStatement node) {
 			handle(node.getBody(), ForStatement.BODY_PROPERTY);
 
@@ -78,6 +80,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(EnhancedForStatement node) {
 			handle(node.getBody(), EnhancedForStatement.BODY_PROPERTY);
 
@@ -87,6 +90,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.IfStatement)
 		 */
+		@Override
 		public boolean visit(IfStatement statement) {
 			handle(statement.getThenStatement(), IfStatement.THEN_STATEMENT_PROPERTY);
 
@@ -101,6 +105,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.WhileStatement)
 		 */
+		@Override
 		public boolean visit(WhileStatement node) {
 			handle(node.getBody(), WhileStatement.BODY_PROPERTY);
 
@@ -187,6 +192,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			String label;
@@ -220,6 +226,7 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 
@@ -247,11 +254,11 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
         		return false;
 
         	Block block= (Block)child;
-        	List list= block.statements();
+        	List<Statement> list= block.statements();
         	if (list.size() != 1)
         		return false;
 
-        	ASTNode singleStatement= (ASTNode)list.get(0);
+        	ASTNode singleStatement= list.get(0);
 
         	if (onlyReturnAndThrows)
         		if (!(singleStatement instanceof ReturnStatement) && !(singleStatement instanceof ThrowStatement))
@@ -368,9 +375,9 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		}
 
 		if (statement instanceof IfStatement) {
-			List result= new ArrayList();
+			List<ControlStatementsFix> result= new ArrayList<ControlStatementsFix>();
 
-			List removeAllList= new ArrayList();
+			List<RemoveBlockOperation> removeAllList= new ArrayList<RemoveBlockOperation>();
 
 			IfElseIterator iter= new IfElseIterator((IfStatement)statement);
 			IfStatement item= null;
@@ -392,11 +399,11 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
             }
 
 			if (removeAllList.size() > 1) {
-				CompilationUnitRewriteOperation[] allConvert= (CompilationUnitRewriteOperation[])removeAllList.toArray(new CompilationUnitRewriteOperation[removeAllList.size()]);
+				CompilationUnitRewriteOperation[] allConvert= removeAllList.toArray(new CompilationUnitRewriteOperation[removeAllList.size()]);
 				result.add(new ControlStatementsFix(FixMessages.ControlStatementsFix_removeIfElseBlock_proposalDescription, compilationUnit, allConvert));
             }
 
-            return (ControlStatementsFix[])result.toArray(new ControlStatementsFix[result.size()]);
+            return result.toArray(new ControlStatementsFix[result.size()]);
 		} else if (statement instanceof WhileStatement) {
 			if (RemoveBlockOperation.satisfiesQuickAssistPrecondition(statement, WhileStatement.BODY_PROPERTY)) {
 				RemoveBlockOperation op= new RemoveBlockOperation(statement, WhileStatement.BODY_PROPERTY);
@@ -430,14 +437,14 @@ public class ControlStatementsFix extends CompilationUnitRewriteOperationsFix {
 		if (!convertSingleStatementToBlock && !removeUnnecessaryBlock && !removeUnnecessaryBlockContainingReturnOrThrow)
 			return null;
 
-		List operations= new ArrayList();
+		List<CompilationUnitRewriteOperation> operations= new ArrayList<CompilationUnitRewriteOperation>();
 		ControlStatementFinder finder= new ControlStatementFinder(convertSingleStatementToBlock, removeUnnecessaryBlock, removeUnnecessaryBlockContainingReturnOrThrow, operations);
 		compilationUnit.accept(finder);
 
 		if (operations.isEmpty())
 			return null;
 
-		CompilationUnitRewriteOperation[] ops= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+		CompilationUnitRewriteOperation[] ops= operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
 		return new ControlStatementsFix(FixMessages.ControlStatementsFix_change_name, compilationUnit, ops);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java
index fd1c51d..2b6bc0b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertForLoopOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.InfixExpression;
+import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NumberLiteral;
@@ -47,7 +48,6 @@ import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
-import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
@@ -86,6 +86,7 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 		fMakeFinal= makeFinal;
 	}
 
+	@Override
 	public IStatus satisfiesPreconditions() {
 		ForStatement statement= getForStatement();
 		CompilationUnit ast= (CompilationUnit)statement.getRoot();
@@ -122,11 +123,11 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 	 * </ul>
 	 */
 	private boolean validateInitializers(ForStatement statement) {
-		List initializers= statement.initializers();
+		List<Expression> initializers= statement.initializers();
 		if (initializers.size() != 1)
 			return false;
 
-		Expression expression= (Expression)initializers.get(0);
+		Expression expression= initializers.get(0);
 		if (!(expression instanceof VariableDeclarationExpression))
 			return false;
 
@@ -141,25 +142,25 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 		if (!PrimitiveType.INT.toString().equals(declarationBinding.getQualifiedName()))
 			return false;
 
-		List fragments= declaration.fragments();
+		List<VariableDeclarationFragment> fragments= declaration.fragments();
 		if (fragments.size() == 1) {
-			IVariableBinding indexBinding= getIndexBindingFromFragment((VariableDeclarationFragment)fragments.get(0));
+			IVariableBinding indexBinding= getIndexBindingFromFragment(fragments.get(0));
 			if (indexBinding == null)
 				return false;
 
 			fIndexBinding= indexBinding;
 			return true;
 		} else if (fragments.size() == 2) {
-			IVariableBinding indexBinding= getIndexBindingFromFragment((VariableDeclarationFragment)fragments.get(0));
+			IVariableBinding indexBinding= getIndexBindingFromFragment(fragments.get(0));
 			if (indexBinding == null) {
-				indexBinding= getIndexBindingFromFragment((VariableDeclarationFragment)fragments.get(1));
+				indexBinding= getIndexBindingFromFragment(fragments.get(1));
 				if (indexBinding == null)
 					return false;
 
-				if (!validateLengthFragment((VariableDeclarationFragment)fragments.get(0)))
+				if (!validateLengthFragment(fragments.get(0)))
 					return false;
 			} else {
-				if (!validateLengthFragment((VariableDeclarationFragment)fragments.get(1)))
+				if (!validateLengthFragment(fragments.get(1)))
 					return false;
 			}
 
@@ -329,11 +330,11 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 	 * <ul>
 	 */
 	private boolean validateUpdaters(ForStatement statement) {
-		List updaters= statement.updaters();
+		List<Expression> updaters= statement.updaters();
 		if (updaters.size() != 1)
 			return false;
 
-		Expression updater= (Expression)updaters.get(0);
+		Expression updater= updaters.get(0);
 		if (updater instanceof PostfixExpression) {
 			PostfixExpression postfix= (PostfixExpression)updater;
 
@@ -402,6 +403,7 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 				/**
 				 * {@inheritDoc}
 				 */
+				@Override
 				protected boolean visitNode(ASTNode node) {
 					if (node instanceof Name) {
 						Name name= (Name)node;
@@ -468,6 +470,7 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 					return false;
 				}
 
+				@Override
 				public boolean visit(ArrayAccess node) {
 					if (fElementDeclaration != null)
 						return super.visit(node);
@@ -502,6 +505,7 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 		return null;
 	}
 
+	@Override
 	public String getIntroducedVariableName() {
 		if (fElementDeclaration != null) {
 			return fElementDeclaration.getName().getIdentifier();
@@ -516,6 +520,7 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel positionGroups) throws CoreException {
 		TextEditGroup group= createTextEditGroup(FixMessages.Java50Fix_ConvertToEnhancedForLoop_description, cuRewrite);
 		ASTRewrite rewrite= cuRewrite.getASTRewrite();
@@ -533,6 +538,7 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 		rewrite.replace(getForStatement(), statement, group);
 	}
 
+	@Override
 	protected Statement convert(CompilationUnitRewrite cuRewrite, TextEditGroup group, LinkedProposalModel positionGroups) throws CoreException {
 		ASTRewrite rewrite= cuRewrite.getASTRewrite();
 		ImportRewrite importRewrite= cuRewrite.getImportRewrite();
@@ -576,6 +582,7 @@ public class ConvertForLoopOperation extends ConvertLoopOperation {
 		final AST ast= body.getAST();
 
 		body.accept(new GenericVisitor() {
+			@Override
 			public boolean visit(ArrayAccess node) {
 				IBinding binding= getBinding(node.getArray());
 				if (arrayBinding.equals(binding)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java
index dd750ce..a95943d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -121,7 +121,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 	private IVariableBinding fIterator= null;
 
 	/** The nodes of the element variable occurrences */
-	private final List fOccurrences= new ArrayList(2);
+	private final List<Expression> fOccurrences= new ArrayList<Expression>(2);
 
 	private EnhancedForStatement fEnhancedForLoop;
 
@@ -136,6 +136,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 		fMakeFinal= makeFinal;
 	}
 
+	@Override
 	public String getIntroducedVariableName() {
 		if (fElement != null) {
 			return fElement.getName();
@@ -210,6 +211,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel positionGroups) throws CoreException {
 		final TextEditGroup group= createTextEditGroup(FixMessages.Java50Fix_ConvertToEnhancedForLoop_description, cuRewrite);
 
@@ -228,6 +230,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 		astRewrite.replace(getForStatement(), statement, group);
 	}
 
+	@Override
 	protected Statement convert(CompilationUnitRewrite cuRewrite, final TextEditGroup group, final LinkedProposalModel positionGroups) throws CoreException {
 		final AST ast= cuRewrite.getAST();
 		final ASTRewrite astRewrite= cuRewrite.getASTRewrite();
@@ -255,8 +258,8 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 			final ListRewrite list;
 			if (body instanceof Block) {
 				list= astRewrite.getListRewrite(body, Block.STATEMENTS_PROPERTY);
-				for (final Iterator iterator= fOccurrences.iterator(); iterator.hasNext();) {
-					final Statement parent= (Statement)ASTNodes.getParent((ASTNode)iterator.next(), Statement.class);
+				for (final Iterator<Expression> iterator= fOccurrences.iterator(); iterator.hasNext();) {
+					final Statement parent= (Statement)ASTNodes.getParent(iterator.next(), Statement.class);
 					if (parent != null && list.getRewrittenList().contains(parent)) {
 						list.remove(parent, null);
 						remover.registerRemovedNode(parent);
@@ -276,6 +279,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 					return false;
 				}
 
+				@Override
 				public final boolean visit(final MethodInvocation node) {
 					final IMethodBinding binding= node.resolveMethodBinding();
 					if (binding != null && (binding.getName().equals("next") || binding.getName().equals("nextElement"))) { //$NON-NLS-1$ //$NON-NLS-2$
@@ -293,6 +297,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 					return super.visit(node);
 				}
 
+				@Override
 				public final boolean visit(final SimpleName node) {
 					if (fElement != null) {
 						final IBinding binding= node.resolveBinding();
@@ -321,8 +326,8 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 		fEnhancedForLoop.setParameter(declaration);
 		fEnhancedForLoop.setExpression(getExpression(astRewrite));
 
-		for (Iterator iterator= getForStatement().initializers().iterator(); iterator.hasNext();) {
-			ASTNode node= (ASTNode)iterator.next();
+		for (Iterator<Expression> iterator= getForStatement().initializers().iterator(); iterator.hasNext();) {
+			ASTNode node= iterator.next();
 			if (node instanceof VariableDeclarationExpression) {
 				VariableDeclarationExpression variableDeclarationExpression= (VariableDeclarationExpression) node;
 				remover.registerRemovedNode(variableDeclarationExpression.getType());
@@ -331,8 +336,8 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 			}
 		}
 
-		for (Iterator iterator= getForStatement().updaters().iterator(); iterator.hasNext();) {
-			ASTNode node= (ASTNode)iterator.next();
+		for (Iterator<Expression> iterator= getForStatement().updaters().iterator(); iterator.hasNext();) {
+			ASTNode node= iterator.next();
 			remover.registerRemovedNode(node);
 		}
 
@@ -345,6 +350,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 	 * @return A status with severity <code>IStatus.Error</code> if not
 	 *         applicable
 	 */
+	@Override
 	public final IStatus satisfiesPreconditions() {
 		IStatus resultStatus= StatusInfo.OK_STATUS;
 		if (JavaModelUtil.is50OrHigher(getJavaProject())) {
@@ -352,24 +358,25 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 			if (resultStatus.getSeverity() == IStatus.ERROR)
 				return resultStatus;
 
-			List updateExpressions= (List)getForStatement().getStructuralProperty(ForStatement.UPDATERS_PROPERTY);
+			List<Expression> updateExpressions= (List<Expression>) getForStatement().getStructuralProperty(ForStatement.UPDATERS_PROPERTY);
 			if (updateExpressions.size() == 1) {
-				resultStatus= new StatusInfo(IStatus.WARNING, Messages.format(FixMessages.ConvertIterableLoopOperation_RemoveUpdateExpression_Warning, BasicElementLabels.getJavaCodeString(((Expression)updateExpressions.get(0)).toString())));
+				resultStatus= new StatusInfo(IStatus.WARNING, Messages.format(FixMessages.ConvertIterableLoopOperation_RemoveUpdateExpression_Warning, BasicElementLabels.getJavaCodeString(updateExpressions.get(0).toString())));
 			} else if (updateExpressions.size() > 1) {
 				resultStatus= new StatusInfo(IStatus.WARNING, FixMessages.ConvertIterableLoopOperation_RemoveUpdateExpressions_Warning);
 			}
 
-			for (final Iterator outer= getForStatement().initializers().iterator(); outer.hasNext();) {
-				final Expression initializer= (Expression)outer.next();
+			for (final Iterator<Expression> outer= getForStatement().initializers().iterator(); outer.hasNext();) {
+				final Expression initializer= outer.next();
 				if (initializer instanceof VariableDeclarationExpression) {
 					final VariableDeclarationExpression declaration= (VariableDeclarationExpression)initializer;
-					List fragments= declaration.fragments();
+					List<VariableDeclarationFragment> fragments= declaration.fragments();
 					if (fragments.size() != 1) {
 						return new StatusInfo(IStatus.ERROR, ""); //$NON-NLS-1$
 					} else {
-						final VariableDeclarationFragment fragment= (VariableDeclarationFragment)fragments.get(0);
+						final VariableDeclarationFragment fragment= fragments.get(0);
 						fragment.accept(new ASTVisitor() {
 
+							@Override
 							public final boolean visit(final MethodInvocation node) {
 								final IMethodBinding binding= node.resolveMethodBinding();
 								if (binding != null) {
@@ -413,6 +420,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 								return true;
 							}
 
+							@Override
 							public final boolean visit(final VariableDeclarationFragment node) {
 								final IVariableBinding binding= node.resolveBinding();
 								if (binding != null) {
@@ -441,6 +449,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 				final ITypeBinding iterable= getIterableType(fIterator.getType());
 				statement.accept(new ASTVisitor() {
 
+					@Override
 					public final boolean visit(final Assignment node) {
 						return visit(node.getLeftHandSide(), node.getRightHandSide());
 					}
@@ -508,6 +517,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 					/**
 					 * {@inheritDoc}
 					 */
+					@Override
 					public boolean visit(MethodInvocation invocation) {
 						final IMethodBinding binding= invocation.resolveMethodBinding();
 						if (binding != null) {
@@ -537,6 +547,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 						return true;
 					}
 
+					@Override
 					public final boolean visit(final VariableDeclarationFragment node) {
 						return visit(node.getName(), node.getInitializer());
 					}
@@ -549,6 +560,7 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 
 				if (fElement != null) {
 					statement.accept(new ASTVisitor() {
+						@Override
 						public final boolean visit(final VariableDeclarationFragment node) {
 							if (node.getInitializer() instanceof NullLiteral) {
 								SimpleName name= node.getName();
@@ -566,10 +578,12 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 			if (root != null) {
 				root.accept(new ASTVisitor() {
 
+					@Override
 					public final boolean visit(final ForStatement node) {
 						return false;
 					}
 
+					@Override
 					public final boolean visit(final SimpleName node) {
 						final IBinding binding= node.resolveBinding();
 						if (binding != null && binding.equals(fElement))
@@ -618,24 +632,22 @@ public final class ConvertIterableLoopOperation extends ConvertLoopOperation {
 
 	private IStatus checkIteratorCondition() {
 
-		List initializers= getForStatement().initializers();
+		List<Expression> initializers= getForStatement().initializers();
 		if (initializers.size() != 1)
 			return SEMANTIC_CHANGE_WARNING_STATUS;
 
-		Expression expression= (Expression)initializers.get(0);
+		Expression expression= initializers.get(0);
 		if (!(expression instanceof VariableDeclarationExpression))
 			return SEMANTIC_CHANGE_WARNING_STATUS;
 
 		VariableDeclarationExpression declaration= (VariableDeclarationExpression)expression;
-		List variableDeclarationFragments= declaration.fragments();
+		List<VariableDeclarationFragment> variableDeclarationFragments= declaration.fragments();
 		if (variableDeclarationFragments.size() != 1)
 			return SEMANTIC_CHANGE_WARNING_STATUS;
 
-		Object declarationFragment= variableDeclarationFragments.get(0);
-		if (!(declarationFragment instanceof VariableDeclarationFragment))
-			return SEMANTIC_CHANGE_WARNING_STATUS;
+		VariableDeclarationFragment declarationFragment= variableDeclarationFragments.get(0);
 
-		Expression initializer= ((VariableDeclarationFragment)declarationFragment).getInitializer();
+		Expression initializer= declarationFragment.getInitializer();
 		if (!(initializer instanceof MethodInvocation))
 			return SEMANTIC_CHANGE_WARNING_STATUS;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopFix.java
index 497f54b..1400858 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,23 +32,24 @@ public class ConvertLoopFix extends CompilationUnitRewriteOperationsFix {
 
 	private final static class ControlStatementFinder extends GenericVisitor {
 
-		private final List/*<CompilationUnitRewriteOperation>*/fResult;
-		private final Hashtable fUsedNames;
+		private final List<ConvertLoopOperation> fResult;
+		private final Hashtable<ForStatement, String> fUsedNames;
 		private final boolean fFindForLoopsToConvert;
 		private final boolean fConvertIterableForLoops;
 		private final boolean fMakeFinal;
 
-		public ControlStatementFinder(boolean findForLoopsToConvert, boolean convertIterableForLoops, boolean makeFinal, List resultingCollection) {
+		public ControlStatementFinder(boolean findForLoopsToConvert, boolean convertIterableForLoops, boolean makeFinal, List<ConvertLoopOperation> resultingCollection) {
 			fFindForLoopsToConvert= findForLoopsToConvert;
 			fConvertIterableForLoops= convertIterableForLoops;
 			fMakeFinal= makeFinal;
 			fResult= resultingCollection;
-			fUsedNames= new Hashtable();
+			fUsedNames= new Hashtable<ForStatement, String>();
 		}
 
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.ForStatement)
 		 */
+		@Override
 		public boolean visit(ForStatement node) {
 			if (fFindForLoopsToConvert || fConvertIterableForLoops) {
 				ForStatement current= node;
@@ -78,8 +79,8 @@ public class ConvertLoopFix extends CompilationUnitRewriteOperationsFix {
 
 		private ConvertLoopOperation getConvertOperation(ForStatement node) {
 
-			Collection usedNamesCollection= fUsedNames.values();
-			String[] usedNames= (String[])usedNamesCollection.toArray(new String[usedNamesCollection.size()]);
+			Collection<String> usedNamesCollection= fUsedNames.values();
+			String[] usedNames= usedNamesCollection.toArray(new String[usedNamesCollection.size()]);
 			ConvertLoopOperation convertForLoopOperation= new ConvertForLoopOperation(node, usedNames, fMakeFinal);
 			if (convertForLoopOperation.satisfiesPreconditions().isOK()) {
 				if (fFindForLoopsToConvert) {
@@ -100,6 +101,7 @@ public class ConvertLoopFix extends CompilationUnitRewriteOperationsFix {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#endVisit(org.eclipse.jdt.core.dom.ForStatement)
 		 */
+		@Override
 		public void endVisit(ForStatement node) {
 			if (fFindForLoopsToConvert || fConvertIterableForLoops) {
 				fUsedNames.remove(node);
@@ -116,14 +118,14 @@ public class ConvertLoopFix extends CompilationUnitRewriteOperationsFix {
 		if (!convertForLoops && !convertIterableForLoops)
 			return null;
 
-		List operations= new ArrayList();
+		List<ConvertLoopOperation> operations= new ArrayList<ConvertLoopOperation>();
 		ControlStatementFinder finder= new ControlStatementFinder(convertForLoops, convertIterableForLoops, makeFinal, operations);
 		compilationUnit.accept(finder);
 
 		if (operations.isEmpty())
 			return null;
 
-		CompilationUnitRewriteOperation[] ops= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+		CompilationUnitRewriteOperation[] ops= operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
 		return new ConvertLoopFix(FixMessages.ControlStatementsFix_change_name, compilationUnit, ops, null);
 	}
 
@@ -154,6 +156,7 @@ public class ConvertLoopFix extends CompilationUnitRewriteOperationsFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public IStatus getStatus() {
 		return fStatus;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopOperation.java
index 64fac8b..d144f67 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ConvertLoopOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,20 +75,22 @@ public abstract class ConvertLoopOperation extends CompilationUnitRewriteOperati
 	}
 
 	protected String[] getUsedVariableNames() {
-		final List results= new ArrayList();
+		final List<String> results= new ArrayList<String>();
 
 		ForStatement forStatement= getForStatement();
 		CompilationUnit root= (CompilationUnit)forStatement.getRoot();
 
-		Collection variableNames= new ScopeAnalyzer(root).getUsedVariableNames(forStatement.getStartPosition(), forStatement.getLength());
+		Collection<String> variableNames= new ScopeAnalyzer(root).getUsedVariableNames(forStatement.getStartPosition(), forStatement.getLength());
 		results.addAll(variableNames);
 
 		forStatement.accept(new GenericVisitor() {
+			@Override
 			public boolean visit(SingleVariableDeclaration node) {
 				results.add(node.getName().getIdentifier());
 				return super.visit(node);
 			}
 
+			@Override
 			public boolean visit(VariableDeclarationFragment fragment) {
 				results.add(fragment.getName().getIdentifier());
 				return super.visit(fragment);
@@ -97,7 +99,7 @@ public abstract class ConvertLoopOperation extends CompilationUnitRewriteOperati
 
 		results.addAll(Arrays.asList(fUsedNames));
 
-		return (String[])results.toArray(new String[results.size()]);
+		return results.toArray(new String[results.size()]);
 	}
 
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java
index 5493a37..0a21fa9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,6 @@ package org.eclipse.jdt.internal.corext.fix;
 
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
 
 import org.eclipse.core.runtime.CoreException;
 
@@ -22,16 +21,13 @@ import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.dom.ConditionalExpression;
 import org.eclipse.jdt.core.dom.Expression;
-import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.InfixExpression;
 import org.eclipse.jdt.core.dom.InstanceofExpression;
 import org.eclipse.jdt.core.dom.ParenthesizedExpression;
-import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 
-import org.eclipse.jdt.internal.corext.refactoring.code.OperatorPrecedence;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
 import org.eclipse.jdt.internal.corext.refactoring.util.NoCommentSourceRangeComputer;
 
@@ -41,12 +37,13 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 
 	private static final class MissingParenthesisVisitor extends ASTVisitor {
 
-		private final ArrayList fNodes;
+		private final ArrayList<ASTNode> fNodes;
 
-		private MissingParenthesisVisitor(ArrayList nodes) {
+		private MissingParenthesisVisitor(ArrayList<ASTNode> nodes) {
 			fNodes= nodes;
 		}
 
+		@Override
 		public void postVisit(ASTNode node) {
 			if (needsParentesis(node)) {
 				fNodes.add(node);
@@ -54,11 +51,9 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 		}
 
 		private boolean needsParentesis(ASTNode node) {
-			// check that parent is && or ||
 			if (!(node.getParent() instanceof InfixExpression))
 				return false;
 
-			// we want to add parenthesis around arithmetic operators and instanceof
 			if (node instanceof InstanceofExpression)
 				return true;
 
@@ -72,16 +67,7 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 				if (parentOperator == operator)
 					return false;
 
-
-				return (operator == InfixExpression.Operator.LESS)
-						|| (operator == InfixExpression.Operator.GREATER)
-						|| (operator == InfixExpression.Operator.LESS_EQUALS)
-						|| (operator == InfixExpression.Operator.GREATER_EQUALS)
-						|| (operator == InfixExpression.Operator.EQUALS)
-						|| (operator == InfixExpression.Operator.NOT_EQUALS)
-
-						|| (operator == InfixExpression.Operator.CONDITIONAL_AND)
-						|| (operator == InfixExpression.Operator.CONDITIONAL_OR);
+				return true;
 			}
 
 			return false;
@@ -90,176 +76,20 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 
 	private static final class UnnecessaryParenthesisVisitor extends ASTVisitor {
 
-		private final ArrayList fNodes;
+		private final ArrayList<ParenthesizedExpression> fNodes;
 
-		private UnnecessaryParenthesisVisitor(ArrayList nodes) {
+		private UnnecessaryParenthesisVisitor(ArrayList<ParenthesizedExpression> nodes) {
 			fNodes= nodes;
 		}
 
+		@Override
 		public boolean visit(ParenthesizedExpression node) {
-			if (canRemoveParenthesis(node)) {
+			if (NecessaryParenthesesChecker.canRemoveParentheses(node)) {
 				fNodes.add(node);
 			}
 
 			return true;
 		}
-
-		/*
-		 * Can the parenthesis around node be removed?
-		 */
-		private boolean canRemoveParenthesis(ParenthesizedExpression node) {
-			ASTNode parent= node.getParent();
-			if (!(parent instanceof Expression))
-				return true;
-
-			Expression parentExpression= (Expression) parent;
-			if (parentExpression instanceof ParenthesizedExpression)
-				return true;
-
-			Expression expression= getExpression(node);
-
-			int expressionPrecedence= OperatorPrecedence.getExpressionPrecedence(expression);
-			int parentPrecedence= OperatorPrecedence.getExpressionPrecedence(parentExpression);
-
-			if (expressionPrecedence > parentPrecedence)
-				//(opEx) opParent and opEx binds more -> can safely remove
-				return true;
-
-			if (expressionPrecedence < parentPrecedence)
-				//(opEx) opParent and opEx binds less -> do not remove
-				return false;
-
-			//(opEx) opParent binds equal
-
-			if (parentExpression instanceof InfixExpression) {
-				InfixExpression parentInfix= (InfixExpression) parentExpression;
-				if (parentInfix.getLeftOperand() == node) {
-					//we have (expr op expr) op expr
-					//infix expressions are evaluated from left to right -> can safely remove
-					return true;
-				} else if (isAssociative(parentInfix)) {
-					//we have parent op (expr op expr) and op is associative
-					//left op (right) == (right) op left == right op left
-					if (expression instanceof InfixExpression) {
-						InfixExpression infixExpression= (InfixExpression) expression;
-						Operator operator= infixExpression.getOperator();
-						if (parentInfix.getOperator() != InfixExpression.Operator.TIMES)
-							return true;
-
-						if (operator == InfixExpression.Operator.TIMES)
-							// x * (y * z) == x * y * z
-							return true;
-
-						if (operator == InfixExpression.Operator.REMAINDER)
-							// x * (y % z) != x * y % z
-							return false;
-
-						//x * (y / z) == z * y / z  iff no rounding
-						ITypeBinding binding= infixExpression.resolveTypeBinding();
-						if (binding == null)
-							return false;
-
-						if (!binding.isPrimitive())
-							return false;
-
-						String name= binding.getName();
-						if (isIntegerNumber(name))
-							//rounding involved
-							return false;
-
-						return true;
-					}
-					return true;
-				} else {
-					return false;
-				}
-			} else if (parentExpression instanceof ConditionalExpression) {
-				ConditionalExpression conditionalExpression= (ConditionalExpression) parentExpression;
-				if (conditionalExpression.getElseExpression() != node)
-					return false;
-			}
-
-			return true;
-		}
-
-		private boolean isIntegerNumber(String name) {
-			return "int".equals(name) || "long".equals(name) || "byte".equals(name) || "char".equals(name) || "short".equals(name); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		}
-
-		/*
-		 * Get the expression wrapped by the parentheses
-		 * i.e. ((((expression)))) -> expression
-		 */
-		private Expression getExpression(ParenthesizedExpression node) {
-			Expression expression= node.getExpression();
-			while (expression instanceof ParenthesizedExpression) {
-				expression= ((ParenthesizedExpression) expression).getExpression();
-			}
-			return expression;
-		}
-
-		/**
-		 * Is the given expression associative?
-		 * <p>
-		 * This is true if and only if:<br>
-		 * <code>left operator (right) == (right) operator left == right operator left</code>
-		 * </p>
-		 *
-		 * @param expression the expression to inspect
-		 * @return true if expression is associative
-		 */
-		public static boolean isAssociative(InfixExpression expression) {
-			Operator operator= expression.getOperator();
-			if (operator == InfixExpression.Operator.PLUS) {
-				return isAllOperandsHaveSameType(expression);
-			}
-
-			if (operator == Operator.LESS || operator == Operator.LESS_EQUALS || operator == Operator.GREATER || operator == Operator.GREATER_EQUALS) {
-				return isAllOperandsHaveSameType(expression);
-			}
-
-			if (operator == InfixExpression.Operator.CONDITIONAL_AND)
-				return true;
-
-			if (operator == InfixExpression.Operator.CONDITIONAL_OR)
-				return true;
-
-			if (operator == InfixExpression.Operator.AND)
-				return true;
-
-			if (operator == InfixExpression.Operator.OR)
-				return true;
-
-			if (operator == InfixExpression.Operator.XOR)
-				return true;
-
-			if (operator == InfixExpression.Operator.TIMES)
-				return true;
-
-			return false;
-		}
-
-		/*
-		 * Do all operands in expression have same type
-		 */
-		private static boolean isAllOperandsHaveSameType(InfixExpression expression) {
-			ITypeBinding binding= expression.getLeftOperand().resolveTypeBinding();
-			if (binding == null)
-				return false;
-
-			ITypeBinding current= expression.getRightOperand().resolveTypeBinding();
-			if (binding != current)
-				return false;
-
-			for (Iterator iterator= expression.extendedOperands().iterator(); iterator.hasNext();) {
-				Expression operand= (Expression) iterator.next();
-				current= operand.resolveTypeBinding();
-				if (binding != current)
-					return false;
-			}
-
-			return true;
-		}
 	}
 
 	private static class AddParenthesisOperation extends CompilationUnitRewriteOperation {
@@ -273,8 +103,9 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
-			TextEditGroup group= createTextEditGroup(FixMessages.ExpressionsFix_addParanoiacParenthesis_description, cuRewrite);
+			TextEditGroup group= createTextEditGroup(FixMessages.ExpressionsFix_addParanoiacParentheses_description, cuRewrite);
 
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
@@ -292,23 +123,24 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 
 	private static class RemoveParenthesisOperation extends CompilationUnitRewriteOperation {
 
-		private final HashSet/*<ParenthesizedExpression>*/ fExpressions;
+		private final HashSet<ParenthesizedExpression> fExpressions;
 
-		public RemoveParenthesisOperation(HashSet expressions) {
+		public RemoveParenthesisOperation(HashSet<ParenthesizedExpression> expressions) {
 			fExpressions= expressions;
 		}
 
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
-			TextEditGroup group= createTextEditGroup(FixMessages.ExpressionsFix_removeUnnecessaryParenthesis_description, cuRewrite);
+			TextEditGroup group= createTextEditGroup(FixMessages.ExpressionsFix_removeUnnecessaryParentheses_description, cuRewrite);
 
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			rewrite.setTargetSourceRangeComputer(new NoCommentSourceRangeComputer());
 
 			while (fExpressions.size() > 0) {
-				ParenthesizedExpression parenthesizedExpression= (ParenthesizedExpression)fExpressions.iterator().next();
+				ParenthesizedExpression parenthesizedExpression= fExpressions.iterator().next();
 				fExpressions.remove(parenthesizedExpression);
 				ParenthesizedExpression down= parenthesizedExpression;
 				while (fExpressions.contains(down.getExpression())) {
@@ -336,23 +168,23 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 		if (coveredNodes.length == 0)
 			return null;
 		// check sub-expressions in fully covered nodes
-		final ArrayList changedNodes = new ArrayList();
+		final ArrayList<ASTNode> changedNodes = new ArrayList<ASTNode>();
 		for (int i= 0; i < coveredNodes.length; i++) {
 			ASTNode covered = coveredNodes[i];
 			if (covered instanceof InfixExpression)
 				covered.accept(new MissingParenthesisVisitor(changedNodes));
 		}
-		if (changedNodes.isEmpty())
+		if (changedNodes.isEmpty() || (changedNodes.size() == 1 && changedNodes.get(0).equals(coveredNodes[0])))
 			return null;
 
 
-		CompilationUnitRewriteOperation op= new AddParenthesisOperation((Expression[])changedNodes.toArray(new Expression[changedNodes.size()]));
-		return new ExpressionsFix(FixMessages.ExpressionsFix_addParanoiacParenthesis_description, compilationUnit, new CompilationUnitRewriteOperation[] {op});
+		CompilationUnitRewriteOperation op= new AddParenthesisOperation(changedNodes.toArray(new Expression[changedNodes.size()]));
+		return new ExpressionsFix(FixMessages.ExpressionsFix_addParanoiacParentheses_description, compilationUnit, new CompilationUnitRewriteOperation[] {op});
 	}
 
 	public static ExpressionsFix createRemoveUnnecessaryParenthesisFix(CompilationUnit compilationUnit, ASTNode[] nodes) {
 		// check sub-expressions in fully covered nodes
-		final ArrayList changedNodes= new ArrayList();
+		final ArrayList<ParenthesizedExpression> changedNodes= new ArrayList<ParenthesizedExpression>();
 		for (int i= 0; i < nodes.length; i++) {
 			ASTNode covered= nodes[i];
 			if (covered instanceof ParenthesizedExpression || covered instanceof InfixExpression)
@@ -361,9 +193,9 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 		if (changedNodes.isEmpty())
 			return null;
 
-		HashSet expressions= new HashSet(changedNodes);
+		HashSet<ParenthesizedExpression> expressions= new HashSet<ParenthesizedExpression>(changedNodes);
 		RemoveParenthesisOperation op= new RemoveParenthesisOperation(expressions);
-		return new ExpressionsFix(FixMessages.ExpressionsFix_removeUnnecessaryParenthesis_description, compilationUnit, new CompilationUnitRewriteOperation[] {op});
+		return new ExpressionsFix(FixMessages.ExpressionsFix_removeUnnecessaryParentheses_description, compilationUnit, new CompilationUnitRewriteOperation[] {op});
 	}
 
 	public static ICleanUpFix createCleanUp(CompilationUnit compilationUnit,
@@ -371,24 +203,24 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 			boolean removeUnnecessaryParenthesis) {
 
 		if (addParanoicParentesis) {
-			final ArrayList changedNodes = new ArrayList();
+			final ArrayList<ASTNode> changedNodes = new ArrayList<ASTNode>();
 			compilationUnit.accept(new MissingParenthesisVisitor(changedNodes));
 
 			if (changedNodes.isEmpty())
 				return null;
 
-			CompilationUnitRewriteOperation op= new AddParenthesisOperation((Expression[])changedNodes.toArray(new Expression[changedNodes.size()]));
-			return new ExpressionsFix(FixMessages.ExpressionsFix_add_parenthesis_change_name, compilationUnit, new CompilationUnitRewriteOperation[] {op});
+			CompilationUnitRewriteOperation op= new AddParenthesisOperation(changedNodes.toArray(new Expression[changedNodes.size()]));
+			return new ExpressionsFix(FixMessages.ExpressionsFix_add_parentheses_change_name, compilationUnit, new CompilationUnitRewriteOperation[] {op});
 		} else if (removeUnnecessaryParenthesis) {
-			final ArrayList changedNodes = new ArrayList();
+			final ArrayList<ParenthesizedExpression> changedNodes = new ArrayList<ParenthesizedExpression>();
 			compilationUnit.accept(new UnnecessaryParenthesisVisitor(changedNodes));
 
 			if (changedNodes.isEmpty())
 				return null;
 
-			HashSet expressions= new HashSet(changedNodes);
+			HashSet<ParenthesizedExpression> expressions= new HashSet<ParenthesizedExpression>(changedNodes);
 			CompilationUnitRewriteOperation op= new RemoveParenthesisOperation(expressions);
-			return new ExpressionsFix(FixMessages.ExpressionsFix_remove_parenthesis_change_name, compilationUnit, new CompilationUnitRewriteOperation[] {op});
+			return new ExpressionsFix(FixMessages.ExpressionsFix_remove_parentheses_change_name, compilationUnit, new CompilationUnitRewriteOperation[] {op});
 		}
 		return null;
 	}
@@ -396,5 +228,4 @@ public class ExpressionsFix extends CompilationUnitRewriteOperationsFix {
 	protected ExpressionsFix(String name, CompilationUnit compilationUnit, CompilationUnitRewriteOperation[] fixRewriteOperations) {
 		super(name, compilationUnit, fixRewriteOperations);
 	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java
index 9a639f3..8a5a4d1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,8 +47,8 @@ public final class FixMessages extends NLS {
 	public static String ConvertIterableLoopOperation_RemoveUpdateExpression_Warning;
 	public static String ConvertIterableLoopOperation_RemoveUpdateExpressions_Warning;
 	public static String ConvertIterableLoopOperation_semanticChangeWarning;
-	public static String ExpressionsFix_add_parenthesis_change_name;
-	public static String ExpressionsFix_remove_parenthesis_change_name;
+	public static String ExpressionsFix_add_parentheses_change_name;
+	public static String ExpressionsFix_remove_parentheses_change_name;
 	public static String ImportsFix_OrganizeImports_Description;
 	public static String Java50Fix_add_annotations_change_name;
 	public static String Java50Fix_add_type_parameters_change_name;
@@ -110,8 +110,8 @@ public final class FixMessages extends NLS {
 	public static String ControlStatementsFix_removeIfElseBlock_proposalDescription;
 	public static String ControlStatementsFix_removeBrackets_proposalDescription;
 
-	public static String ExpressionsFix_addParanoiacParenthesis_description;
-	public static String ExpressionsFix_removeUnnecessaryParenthesis_description;
+	public static String ExpressionsFix_addParanoiacParentheses_description;
+	public static String ExpressionsFix_removeUnnecessaryParentheses_description;
 	public static String VariableDeclarationFix_add_final_change_name;
 
 	public static String VariableDeclarationFix_changeModifierOfUnknownToFinal_description;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties
index d7ce3a7..306f7d3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2010 IBM Corporation and others.
+# Copyright (c) 2005, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -74,10 +74,10 @@ ControlStatementsFix_removeIfBlock_proposalDescription=Change 'if' block to stat
 ControlStatementsFix_removeElseBlock_proposalDescription=Change 'else' block to statement
 ControlStatementsFix_removeIfElseBlock_proposalDescription=Change 'if-else' blocks to statements
 ControlStatementsFix_removeBrackets_proposalDescription=Remove block from body statement
-ExpressionsFix_addParanoiacParenthesis_description=Add paranoiac parenthesis for conditions
-ExpressionsFix_add_parenthesis_change_name=Add Parenthesis
-ExpressionsFix_removeUnnecessaryParenthesis_description=Remove extra parenthesis
-ExpressionsFix_remove_parenthesis_change_name=Remove Parenthesis
+ExpressionsFix_addParanoiacParentheses_description=Put expressions in parentheses
+ExpressionsFix_add_parentheses_change_name=Add Parentheses
+ExpressionsFix_removeUnnecessaryParentheses_description=Remove extra parentheses
+ExpressionsFix_remove_parentheses_change_name=Remove Parentheses
 
 VariableDeclarationFix_changeModifierOfUnknownToFinal_description=Change modifier to final
 VariableDeclarationFix_add_final_change_name=Add final
@@ -94,7 +94,7 @@ ImportsFix_OrganizeImports_Description=Organize Imports
 
 CleanUpPostSaveListener_name=Code Clean Up
 CleanUpPostSaveListener_SaveAction_ChangeName=Save Actions
-CleanUpPostSaveListener_SlowCleanUpDialog_link=If this happens again we recommend to disabled the corresponding save actions on the <a>Save Actions Preference Page</a>.
+CleanUpPostSaveListener_SlowCleanUpDialog_link=If this happens again we recommend to disabled the corresponding save actions on the <a>'Save Actions'</a> preference page.
 CleanUpPostSaveListener_SlowCleanUpDialog_title=Slow Save Actions
 CleanUpPostSaveListener_SlowCleanUpWarningDialog_explain=Some of the following save actions are very slow:
 CleanUpPostSaveListener_unknown_profile_error_message=Clean Up save participant could not retrieve profile with id ''{0}''
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java
index 334a593..9792d2f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,6 +91,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			AST ast= cuRewrite.getRoot().getAST();
 			ListRewrite listRewrite= cuRewrite.getASTRewrite().getListRewrite(fBodyDeclaration, fBodyDeclaration.getModifiersProperty());
@@ -112,6 +113,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel positionGroups) throws CoreException {
 			InferTypeArgumentsTCModel model= new InferTypeArgumentsTCModel();
 			InferTypeArgumentsConstraintCreator creator= new InferTypeArgumentsConstraintCreator(model, true);
@@ -123,27 +125,25 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 			InferTypeArgumentsUpdate update= solver.solveConstraints(new NullProgressMonitor());
 			solver= null; //free caches
 
-			ASTNode[] nodes= InferTypeArgumentsRefactoring.inferArguments(fTypes, update, model, cuRewrite);
+			ParameterizedType[] nodes= InferTypeArgumentsRefactoring.inferArguments(fTypes, update, model, cuRewrite);
 			if (nodes.length == 0)
 				return;
 
 			ASTRewrite astRewrite= cuRewrite.getASTRewrite();
 			for (int i= 0; i < nodes.length; i++) {
-				if (nodes[i] instanceof ParameterizedType) {
-					ParameterizedType type= (ParameterizedType)nodes[0];
-					List args= (List)type.getStructuralProperty(ParameterizedType.TYPE_ARGUMENTS_PROPERTY);
-					int j= 0;
-					for (Iterator iter= args.iterator(); iter.hasNext();) {
-						LinkedProposalPositionGroup group= new LinkedProposalPositionGroup("G" + i + "_" + j); //$NON-NLS-1$ //$NON-NLS-2$
-						Type argType= (Type)iter.next();
-						if (!positionGroups.hasLinkedPositions()) {
-							group.addPosition(astRewrite.track(argType), true);
-						} else {
-							group.addPosition(astRewrite.track(argType), false);
-						}
-						positionGroups.addPositionGroup(group);
-						j++;
+				ParameterizedType type= nodes[i];
+				List<Type> args= (List<Type>) type.getStructuralProperty(ParameterizedType.TYPE_ARGUMENTS_PROPERTY);
+				int j= 0;
+				for (Iterator<Type> iter= args.iterator(); iter.hasNext();) {
+					LinkedProposalPositionGroup group= new LinkedProposalPositionGroup("G" + i + "_" + j); //$NON-NLS-1$ //$NON-NLS-2$
+					Type argType= iter.next();
+					if (!positionGroups.hasLinkedPositions()) {
+						group.addPosition(astRewrite.track(argType), true);
+					} else {
+						group.addPosition(astRewrite.track(argType), false);
 					}
+					positionGroups.addPositionGroup(group);
+					j++;
 				}
 			}
 			positionGroups.setEndPosition(astRewrite.track(nodes[0]));
@@ -199,12 +199,12 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 	}
 
 	public static Java50Fix createRawTypeReferenceFix(CompilationUnit compilationUnit, IProblemLocation problem) {
-		List operations= new ArrayList();
+		List<CompilationUnitRewriteOperation> operations= new ArrayList<CompilationUnitRewriteOperation>();
 		SimpleType node= createRawTypeReferenceOperations(compilationUnit, new IProblemLocation[] {problem}, operations);
 		if (operations.size() == 0)
 			return null;
 
-		return new Java50Fix(Messages.format(FixMessages.Java50Fix_AddTypeArguments_description,  BasicElementLabels.getJavaElementName(node.getName().getFullyQualifiedName())), compilationUnit, (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]));
+		return new Java50Fix(Messages.format(FixMessages.Java50Fix_AddTypeArguments_description,  BasicElementLabels.getJavaElementName(node.getName().getFullyQualifiedName())), compilationUnit, operations.toArray(new CompilationUnitRewriteOperation[operations.size()]));
 	}
 
 	public static ICleanUpFix createCleanUp(CompilationUnit compilationUnit,
@@ -220,7 +220,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		if (!addOverrideAnnotation && !addDeprecatedAnnotation && !rawTypeReference)
 			return null;
 
-		List/*<CompilationUnitRewriteOperation>*/ operations= new ArrayList();
+		List<CompilationUnitRewriteOperation> operations= new ArrayList<CompilationUnitRewriteOperation>();
 
 		IProblem[] problems= compilationUnit.getProblems();
 		IProblemLocation[] locations= new IProblemLocation[problems.length];
@@ -247,7 +247,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 			fixName= FixMessages.Java50Fix_add_annotations_change_name;
 		}
 
-		CompilationUnitRewriteOperation[] operationsArray= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+		CompilationUnitRewriteOperation[] operationsArray= operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
 		return new Java50Fix(fixName, compilationUnit, operationsArray);
 	}
 
@@ -264,7 +264,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		if (!addOverrideAnnotation && !addDeprecatedAnnotation && !rawTypeReferences)
 			return null;
 
-		List/*<CompilationUnitRewriteOperation>*/ operations= new ArrayList();
+		List<CompilationUnitRewriteOperation> operations= new ArrayList<CompilationUnitRewriteOperation>();
 
 		if (addOverrideAnnotation)
 			createAddOverrideAnnotationOperations(compilationUnit, addOverrideInterfaceAnnotation, problems, operations);
@@ -279,11 +279,11 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		if (operations.size() == 0)
 			return null;
 
-		CompilationUnitRewriteOperation[] operationsArray= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+		CompilationUnitRewriteOperation[] operationsArray= operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
 		return new Java50Fix(FixMessages.Java50Fix_add_annotations_change_name, compilationUnit, operationsArray);
 	}
 
-	private static void createAddDeprecatedAnnotationOperations(CompilationUnit compilationUnit, IProblemLocation[] locations, List result) {
+	private static void createAddDeprecatedAnnotationOperations(CompilationUnit compilationUnit, IProblemLocation[] locations, List<CompilationUnitRewriteOperation> result) {
 		for (int i= 0; i < locations.length; i++) {
 			IProblemLocation problem= locations[i];
 
@@ -302,7 +302,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		}
 	}
 
-	private static void createAddOverrideAnnotationOperations(CompilationUnit compilationUnit, boolean addOverrideInterfaceAnnotation, IProblemLocation[] locations, List result) {
+	private static void createAddOverrideAnnotationOperations(CompilationUnit compilationUnit, boolean addOverrideInterfaceAnnotation, IProblemLocation[] locations, List<CompilationUnitRewriteOperation> result) {
 		for (int i= 0; i < locations.length; i++) {
 			IProblemLocation problem= locations[i];
 			int problemId= problem.getProblemId();
@@ -324,32 +324,32 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		}
 	}
 
-	private static SimpleType createRawTypeReferenceOperations(CompilationUnit compilationUnit, IProblemLocation[] locations, List operations) {
+	private static SimpleType createRawTypeReferenceOperations(CompilationUnit compilationUnit, IProblemLocation[] locations, List<CompilationUnitRewriteOperation> operations) {
 		if (hasFatalError(compilationUnit))
 			return null;
 
-		List/*<SimpleType>*/ result= new ArrayList();
+		List<SimpleType> result= new ArrayList<SimpleType>();
 		for (int i= 0; i < locations.length; i++) {
 			IProblemLocation problem= locations[i];
 
 			if (isRawTypeReferenceProblem(problem.getProblemId())) {
 				ASTNode node= problem.getCoveredNode(compilationUnit);
 				if (node instanceof ClassInstanceCreation) {
-					ASTNode rawReference= (ASTNode)node.getStructuralProperty(ClassInstanceCreation.TYPE_PROPERTY);
+					Type rawReference= (Type)node.getStructuralProperty(ClassInstanceCreation.TYPE_PROPERTY);
 					if (isRawTypeReference(rawReference)) {
-						result.add(rawReference);
+						result.add((SimpleType) rawReference);
 					}
 				} else if (node instanceof SimpleName) {
 					ASTNode rawReference= node.getParent();
 					if (isRawTypeReference(rawReference)) {
 						ASTNode parent= rawReference.getParent();
 						if (!(parent instanceof ArrayType || parent instanceof ParameterizedType))
-							result.add(rawReference);
+							result.add((SimpleType) rawReference);
 					}
 				} else if (node instanceof MethodInvocation) {
 					MethodInvocation invocation= (MethodInvocation)node;
 
-					ASTNode rawReference= getRawReference(invocation, compilationUnit);
+					SimpleType rawReference= getRawReference(invocation, compilationUnit);
 					if (rawReference != null) {
 						result.add(rawReference);
 					}
@@ -360,7 +360,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		if (result.size() == 0)
 			return null;
 
-		SimpleType[] types= (SimpleType[])result.toArray(new SimpleType[result.size()]);
+		SimpleType[] types= result.toArray(new SimpleType[result.size()]);
 		operations.add(new AddTypeParametersOperation(types));
 		return types[0];
 	}
@@ -405,10 +405,10 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		return id == IProblem.UnsafeTypeConversion || id == IProblem.RawTypeReference || id == IProblem.UnsafeRawMethodInvocation;
 	}
 
-	private static ASTNode getRawReference(MethodInvocation invocation, CompilationUnit compilationUnit) {
+	private static SimpleType getRawReference(MethodInvocation invocation, CompilationUnit compilationUnit) {
 		Name name1= (Name)invocation.getStructuralProperty(MethodInvocation.NAME_PROPERTY);
 		if (name1 instanceof SimpleName) {
-			ASTNode rawReference= getRawReference((SimpleName)name1, compilationUnit);
+			SimpleType rawReference= getRawReference((SimpleName)name1, compilationUnit);
 			if (rawReference != null) {
 				return rawReference;
 			}
@@ -416,7 +416,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 
 		Expression expr= (Expression)invocation.getStructuralProperty(MethodInvocation.EXPRESSION_PROPERTY);
 		if (expr instanceof SimpleName) {
-			ASTNode rawReference= getRawReference((SimpleName)expr, compilationUnit);
+			SimpleType rawReference= getRawReference((SimpleName)expr, compilationUnit);
 			if (rawReference != null) {
 				return rawReference;
 			}
@@ -424,20 +424,20 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 			Name name= (Name)expr;
 			while (name instanceof QualifiedName) {
 				SimpleName simpleName= (SimpleName)name.getStructuralProperty(QualifiedName.NAME_PROPERTY);
-				ASTNode rawReference= getRawReference(simpleName, compilationUnit);
+				SimpleType rawReference= getRawReference(simpleName, compilationUnit);
 				if (rawReference != null) {
 					return rawReference;
 				}
 				name= (Name)name.getStructuralProperty(QualifiedName.QUALIFIER_PROPERTY);
 			}
 			if (name instanceof SimpleName) {
-				ASTNode rawReference= getRawReference((SimpleName)name, compilationUnit);
+				SimpleType rawReference= getRawReference((SimpleName)name, compilationUnit);
 				if (rawReference != null) {
 					return rawReference;
 				}
 			}
 		} else if (expr instanceof MethodInvocation) {
-			ASTNode rawReference= getRawReference((MethodInvocation)expr, compilationUnit);
+			SimpleType rawReference= getRawReference((MethodInvocation)expr, compilationUnit);
 			if (rawReference != null) {
 				return rawReference;
 			}
@@ -445,7 +445,7 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 		return null;
 	}
 
-	private static ASTNode getRawReference(SimpleName name, CompilationUnit compilationUnit) {
+	private static SimpleType getRawReference(SimpleName name, CompilationUnit compilationUnit) {
 		SimpleName[] names= LinkedNodeFinder.findByNode(compilationUnit, name);
 		for (int j= 0; j < names.length; j++) {
 			if (names[j].getParent() instanceof VariableDeclarationFragment) {
@@ -454,23 +454,23 @@ public class Java50Fix extends CompilationUnitRewriteOperationsFix {
 					VariableDeclarationStatement statement= (VariableDeclarationStatement)fragment.getParent();
 					ASTNode result= (ASTNode)statement.getStructuralProperty(VariableDeclarationStatement.TYPE_PROPERTY);
 					if (isRawTypeReference(result))
-						return result;
+						return (SimpleType) result;
 				} else if (fragment.getParent() instanceof FieldDeclaration) {
 					FieldDeclaration declaration= (FieldDeclaration)fragment.getParent();
 					ASTNode result= (ASTNode)declaration.getStructuralProperty(FieldDeclaration.TYPE_PROPERTY);
 					if (isRawTypeReference(result))
-						return result;
+						return (SimpleType) result;
 				}
 			} else if (names[j].getParent() instanceof SingleVariableDeclaration) {
 				SingleVariableDeclaration declaration= (SingleVariableDeclaration)names[j].getParent();
 				ASTNode result= (ASTNode)declaration.getStructuralProperty(SingleVariableDeclaration.TYPE_PROPERTY);
 				if (isRawTypeReference(result))
-					return result;
+					return (SimpleType) result;
 			} else if (names[j].getParent() instanceof MethodDeclaration) {
 				MethodDeclaration methodDecl= (MethodDeclaration)names[j].getParent();
 				ASTNode result= (ASTNode)methodDecl.getStructuralProperty(MethodDeclaration.RETURN_TYPE2_PROPERTY);
 				if (isRawTypeReference(result))
-					return result;
+					return (SimpleType) result;
 			}
 		}
 		return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalModel.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalModel.java
index 0ff8604..8ad9bab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalModel.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalModel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@ import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup.PositionI
 
 public class LinkedProposalModel {
 
-	private Map/*<String, PositionGroup>*/ fPositionGroups;
+	private Map<String, LinkedProposalPositionGroup> fPositionGroups;
 	private LinkedProposalPositionGroup.PositionInformation fEndPosition;
 
 	public void addPositionGroup(LinkedProposalPositionGroup positionGroup) {
@@ -29,13 +29,13 @@ public class LinkedProposalModel {
 		}
 
 		if (fPositionGroups == null) {
-			fPositionGroups= new HashMap();
+			fPositionGroups= new HashMap<String, LinkedProposalPositionGroup>();
 		}
 		fPositionGroups.put(positionGroup.getGroupId(), positionGroup);
 	}
 
 	public LinkedProposalPositionGroup getPositionGroup(String groupId, boolean createIfNotExisting) {
-		LinkedProposalPositionGroup group= fPositionGroups != null ? (LinkedProposalPositionGroup) fPositionGroups.get(groupId) : null;
+		LinkedProposalPositionGroup group= fPositionGroups != null ? fPositionGroups.get(groupId) : null;
 		if (createIfNotExisting && group == null) {
 			group= new LinkedProposalPositionGroup(groupId);
 			addPositionGroup(group);
@@ -43,11 +43,11 @@ public class LinkedProposalModel {
 		return group;
 	}
 
-	public Iterator getPositionGroupIterator() {
+	public Iterator<LinkedProposalPositionGroup> getPositionGroupIterator() {
 		if (fPositionGroups == null) {
-			return new Iterator() {
+			return new Iterator<LinkedProposalPositionGroup>() {
 				public boolean hasNext() {return false;}
-				public Object next() {return null;}
+				public LinkedProposalPositionGroup next() {return null;}
 				public void remove() {}
 			};
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java
index 398d94c..058a6e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.jdt.internal.corext.fix;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import org.eclipse.swt.graphics.Image;
@@ -103,19 +104,100 @@ public class LinkedProposalPositionGroup {
 			fIsFirst= isFirst;
 		}
 
+		@Override
 		public int getOffset() {
 			return fPos.getStartPosition();
 		}
 
+		@Override
 		public int getLength() {
 			return fPos.getLength();
 		}
 
+		@Override
 		public int getSequenceRank() {
 			return fIsFirst ? 0 : 1;
 		}
 	}
 
+	/**
+	 * A position that contains all of the given tracked node positions.
+	 * 
+	 * @since 3.7
+	 */
+	public static class TrackedNodesPosition extends PositionInformation {
+		
+		private final Collection<ITrackedNodePosition> fPos;
+		
+		/**
+		 * A position that contains all of the given tracked node positions.
+		 * 
+		 * @param pos the positions
+		 */
+		public TrackedNodesPosition(Collection<ITrackedNodePosition> pos) {
+			fPos= pos;
+		}
+		
+		@Override
+		public int getOffset() {
+			int minStart= Integer.MAX_VALUE;
+			for (ITrackedNodePosition node : fPos) {
+				minStart= Math.min(minStart, node.getStartPosition());
+			}
+			return minStart == Integer.MAX_VALUE ? -1 : minStart;
+		}
+		
+		@Override
+		public int getLength() {
+			int minStart= Integer.MAX_VALUE;
+			int maxEnd= 0;
+			for (ITrackedNodePosition node : fPos) {
+				minStart= Math.min(minStart, node.getStartPosition());
+				maxEnd= Math.max(maxEnd, node.getStartPosition() + node.getLength());
+			}
+			return minStart == Integer.MAX_VALUE ? 0 : maxEnd - getOffset();
+		}
+		
+		@Override
+		public int getSequenceRank() {
+			return 0;
+		}
+	}
+	
+	/**
+	 * A position for the start of the given tracked node position.
+	 * 
+	 * @since 3.7
+	 */
+	public static class StartPositionInformation extends PositionInformation {
+		
+		private ITrackedNodePosition fPos;
+
+		/**
+		 * A position for the start of the given tracked node position.
+		 * 
+		 * @param pos the position
+		 */
+		public StartPositionInformation(ITrackedNodePosition pos) {
+			fPos= pos;
+		}
+		
+		@Override
+		public int getOffset() {
+			return fPos.getStartPosition();
+		}
+		
+		@Override
+		public int getLength() {
+			return 0;
+		}
+		
+		@Override
+		public int getSequenceRank() {
+			return 0;
+		}
+	}
+	
 	private static final class JavaLinkedModeProposal extends Proposal {
 		private final ITypeBinding fTypeProposal;
 		private final ICompilationUnit fCompilationUnit;
@@ -133,6 +215,7 @@ public class LinkedProposalPositionGroup {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.fix.PositionGroup.Proposal#computeEdits(int, org.eclipse.jface.text.link.LinkedPosition, char, int, org.eclipse.jface.text.link.LinkedModeModel)
 		 */
+		@Override
 		public TextEdit computeEdits(int offset, LinkedPosition position, char trigger, int stateMask, LinkedModeModel model) throws CoreException {
 			ImportRewrite impRewrite= StubUtility.createImportRewrite(fCompilationUnit, true);
 			String replaceString= impRewrite.addImport(fTypeProposal);
@@ -146,14 +229,14 @@ public class LinkedProposalPositionGroup {
 
 
 	private final String fGroupId;
-	private final List/*<Position>*/ fPositions;
-	private final List/*<Proposal>*/ fProposals;
+	private final List<PositionInformation> fPositions;
+	private final List<Proposal> fProposals;
 
 
 	public LinkedProposalPositionGroup(String groupID) {
 		fGroupId= groupID;
-		fPositions= new ArrayList();
-		fProposals= new ArrayList();
+		fPositions= new ArrayList<PositionInformation>();
+		fProposals= new ArrayList<Proposal>();
 	}
 
 	public void addPosition(PositionInformation position) {
@@ -182,11 +265,11 @@ public class LinkedProposalPositionGroup {
 	}
 
 	public PositionInformation[] getPositions() {
-		return (PositionInformation[])fPositions.toArray(new PositionInformation[fPositions.size()]);
+		return fPositions.toArray(new PositionInformation[fPositions.size()]);
 	}
 
 	public Proposal[] getProposals() {
-		return (Proposal[])fProposals.toArray(new Proposal[fProposals.size()]);
+		return fProposals.toArray(new Proposal[fProposals.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java
index 7163e55..dd34f48 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,6 @@ import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
@@ -63,6 +62,7 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 import org.eclipse.jdt.ui.text.java.IProblemLocation;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.text.correction.ProblemLocation;
 import org.eclipse.jdt.internal.ui.text.correction.SerialVersionHashOperation;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
@@ -85,12 +85,12 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 
 		private final IJavaProject fProject;
 		private final ICompilationUnit[] fCompilationUnits;
-		private final Hashtable /*<bindingKey, Long>*/ fIdsTable;
+		private final Hashtable<String, Long> fIdsTable;
 
 		public SerialVersionHashContext(IJavaProject project, ICompilationUnit[] compilationUnits) {
 			fProject= project;
 			fCompilationUnits= compilationUnits;
-			fIdsTable= new Hashtable();
+			fIdsTable= new Hashtable<String, Long>();
         }
 
 		public RefactoringStatus initialize(IProgressMonitor monitor) throws CoreException {
@@ -110,7 +110,7 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 					throw new OperationCanceledException();
 
 				result= new RefactoringStatus();
-				ASTParser parser= ASTParser.newParser(AST.JLS3);
+				ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				parser.setProject(fProject);
 				IBinding[] bindings= parser.createBindings(types, new SubProgressMonitor(monitor, 1));
 				for (int i= 0; i < bindings.length; i++) {
@@ -141,7 +141,7 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 		 * {@inheritDoc}
 		 */
 		public Long getSerialVersionId(ITypeBinding binding) {
-			return (Long) fIdsTable.get(binding.getKey());
+			return fIdsTable.get(binding.getKey());
 		}
 
 		protected void setSerialVersionId(ITypeBinding binding, Long id) {
@@ -154,13 +154,13 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 
 				IType serializable= project.findType(SERIALIZABLE_NAME);
 
-				List types= new ArrayList();
+				List<IType> types= new ArrayList<IType>();
 
 				if (compilationUnits.length > 500) {
 					//500 is a guess. Building the type hierarchy on serializable is very expensive
 					//depending on how many subtypes exit in the project.
 
-					HashSet cus= new HashSet();
+					HashSet<ICompilationUnit> cus= new HashSet<ICompilationUnit>();
 					for (int i= 0; i < compilationUnits.length; i++) {
 						cus.add(compilationUnits[i]);
 					}
@@ -179,13 +179,13 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
                     }
 				}
 
-				return (IType[])types.toArray(new IType[types.size()]);
+				return types.toArray(new IType[types.size()]);
 			} finally {
 				monitor.done();
 			}
 		}
 
-		private void addTypes(IType[] allSubtypes, HashSet cus, List types) throws JavaModelException {
+		private void addTypes(IType[] allSubtypes, HashSet<ICompilationUnit> cus, List<IType> types) throws JavaModelException {
 			for (int i= 0; i < allSubtypes.length; i++) {
 				IType type= allSubtypes[i];
 
@@ -198,7 +198,7 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 			}
 		}
 
-		private void collectChildrenWithMissingSerialVersionId(IJavaElement[] children, IType serializable, List result) throws JavaModelException {
+		private void collectChildrenWithMissingSerialVersionId(IJavaElement[] children, IType serializable, List<IType> result) throws JavaModelException {
 			for (int i= 0; i < children.length; i++) {
 				IJavaElement child= children[i];
 				if (child instanceof IType) {
@@ -240,6 +240,7 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected boolean addInitializer(VariableDeclarationFragment fragment, ASTNode declarationNode) {
 			ITypeBinding typeBinding= getTypeBinding(declarationNode);
 			if (typeBinding == null)
@@ -256,6 +257,7 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected void addLinkedPositions(ASTRewrite rewrite, VariableDeclarationFragment fragment, LinkedProposalModel positionGroups) {}
 
 	}
@@ -347,7 +349,7 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 			if (unit == null)
 				return null;
 
-			List declarationNodes= new ArrayList();
+			List<ASTNode> declarationNodes= new ArrayList<ASTNode>();
 			for (int i= 0; i < problems.length; i++) {
 				if (problems[i].getProblemId() == IProblem.MissingSerialVersion) {
 					final SimpleName simpleName= getSelectedName(compilationUnit, problems[i]);
@@ -362,11 +364,11 @@ public class PotentialProgrammingProblemsFix extends CompilationUnitRewriteOpera
 			if (declarationNodes.size() == 0)
 				return null;
 
-			for (Iterator iter= declarationNodes.iterator(); iter.hasNext();) {
-	            ASTNode declarationNode= (ASTNode) iter.next();
+			for (Iterator<ASTNode> iter= declarationNodes.iterator(); iter.hasNext();) {
+	            ASTNode declarationNode= iter.next();
 	            ITypeBinding binding= getTypeBinding(declarationNode);
 	            if (fCurrentContext.getSerialVersionId(binding) != null) {
-	            	SerialVersionHashBatchOperation op= new SerialVersionHashBatchOperation(unit, (ASTNode[])declarationNodes.toArray(new ASTNode[declarationNodes.size()]), fCurrentContext);
+	            	SerialVersionHashBatchOperation op= new SerialVersionHashBatchOperation(unit, declarationNodes.toArray(new ASTNode[declarationNodes.size()]), fCurrentContext);
 	    			return new PotentialProgrammingProblemsFix(FixMessages.PotentialProgrammingProblemsFix_add_id_change_name, compilationUnit, new CompilationUnitRewriteOperation[] {op});
 	            }
             }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/SerialVersionDefaultOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/SerialVersionDefaultOperation.java
index e958889..719e93c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/SerialVersionDefaultOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/SerialVersionDefaultOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public final class SerialVersionDefaultOperation extends AbstractSerialVersionOp
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean addInitializer(final VariableDeclarationFragment fragment, final ASTNode declarationNode) {
 		Assert.isNotNull(fragment);
 
@@ -57,6 +58,7 @@ public final class SerialVersionDefaultOperation extends AbstractSerialVersionOp
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void addLinkedPositions(final ASTRewrite rewrite, final VariableDeclarationFragment fragment, final LinkedProposalModel positionGroups) {
 
 		Assert.isNotNull(rewrite);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java
index 428f4c1..0f841f3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -107,9 +107,9 @@ public class StringFix implements IProposableFix {
 		if (!cu.isStructureKnown())
 			return null; //[clean up] 'Remove unnecessary $NLS-TAGS$' removes necessary ones in case of syntax errors: https://bugs.eclipse.org/bugs/show_bug.cgi?id=285814 : 
 		
-		List result= new ArrayList();
+		List<CategorizedTextEditGroup> result= new ArrayList<CategorizedTextEditGroup>();
 
-		List missingNLSProblems= new ArrayList();
+		List<IProblemLocation> missingNLSProblems= new ArrayList<IProblemLocation>();
 		for (int i= 0; i < problems.length; i++) {
 			IProblemLocation problem= problems[i];
 			if (addNLSTag && problem.getProblemId() == IProblem.NonExternalizedStringLiteral) {
@@ -129,8 +129,8 @@ public class StringFix implements IProposableFix {
 		if (!missingNLSProblems.isEmpty()) {
 			int[] positions= new int[missingNLSProblems.size()];
 			int i=0;
-			for (Iterator iter= missingNLSProblems.iterator(); iter.hasNext();) {
-				IProblemLocation problem= (IProblemLocation)iter.next();
+			for (Iterator<IProblemLocation> iter= missingNLSProblems.iterator(); iter.hasNext();) {
+				IProblemLocation problem= iter.next();
 				positions[i]= problem.getOffset();
 				i++;
 			}
@@ -145,7 +145,7 @@ public class StringFix implements IProposableFix {
 		if (result.isEmpty())
 			return null;
 
-		return new StringFix("", compilationUnit, (TextEditGroup[])result.toArray(new TextEditGroup[result.size()])); //$NON-NLS-1$
+		return new StringFix("", compilationUnit, result.toArray(new TextEditGroup[result.size()])); //$NON-NLS-1$
 	}
 
 	private static ReplaceEdit getReplace(int offset, int length, IBuffer buffer, boolean removeLeadingIndents) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnimplementedCodeFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnimplementedCodeFix.java
index 6b14850..d740c8e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnimplementedCodeFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnimplementedCodeFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,7 @@ public class UnimplementedCodeFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedProposalPositions) throws CoreException {
 			AST ast= cuRewrite.getAST();
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
@@ -87,7 +88,7 @@ public class UnimplementedCodeFix extends CompilationUnitRewriteOperationsFix {
 		if (problems.length == 0)
 			return null;
 
-		ArrayList operations= new ArrayList();
+		ArrayList<CompilationUnitRewriteOperation> operations= new ArrayList<CompilationUnitRewriteOperation>();
 
 		for (int i= 0; i < problems.length; i++) {
 			IProblemLocation problem= problems[i];
@@ -113,7 +114,7 @@ public class UnimplementedCodeFix extends CompilationUnitRewriteOperationsFix {
 		} else {
 			label= CorrectionMessages.UnimplementedCodeFix_MakeAbstractFix_label;
 		}
-		return new UnimplementedCodeFix(label, root, (CompilationUnitRewriteOperation[]) operations.toArray(new CompilationUnitRewriteOperation[operations.size()]));
+		return new UnimplementedCodeFix(label, root, operations.toArray(new CompilationUnitRewriteOperation[operations.size()]));
 	}
 
 	public static IProposableFix createAddUnimplementedMethodsFix(final CompilationUnit root, IProblemLocation problem) {
@@ -131,6 +132,7 @@ public class UnimplementedCodeFix extends CompilationUnitRewriteOperationsFix {
 			return new IProposableFix() {
 				public CompilationUnitChange createChange(IProgressMonitor progressMonitor) throws CoreException {
 					CompilationUnitChange change= new CompilationUnitChange(CorrectionMessages.UnimplementedMethodsCorrectionProposal_description, (ICompilationUnit) root.getJavaElement()) {
+						@Override
 						public Change perform(IProgressMonitor pm) throws CoreException {
 							Shell shell= PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
 							String dialogTitle= CorrectionMessages.UnimplementedMethodsCorrectionProposal_description;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnusedCodeFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnusedCodeFix.java
index ec7a8af..b43d979 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnusedCodeFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnusedCodeFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.LinkedNodeFinder;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -83,22 +84,25 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 
 	private static class SideEffectFinder extends ASTVisitor {
 
-		private final ArrayList fSideEffectNodes;
+		private final ArrayList<Expression> fSideEffectNodes;
 
-		public SideEffectFinder(ArrayList res) {
+		public SideEffectFinder(ArrayList<Expression> res) {
 			fSideEffectNodes= res;
 		}
 
+		@Override
 		public boolean visit(Assignment node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(PostfixExpression node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(PrefixExpression node) {
 			Object operator= node.getOperator();
 			if (operator == PrefixExpression.Operator.INCREMENT || operator == PrefixExpression.Operator.DECREMENT) {
@@ -107,16 +111,19 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 			return false;
 		}
 
+		@Override
 		public boolean visit(MethodInvocation node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(ClassInstanceCreation node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(SuperMethodInvocation node) {
 			fSideEffectNodes.add(node);
 			return false;
@@ -134,6 +141,7 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			ImportDeclaration node= fImportDeclaration;
 			TextEditGroup group= createTextEditGroup(FixMessages.UnusedCodeFix_RemoveImport_description, cuRewrite);
@@ -157,6 +165,7 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			for (int i= 0; i < fUnusedNames.length; i++) {
 				removeUnusedName(cuRewrite, fUnusedNames[i]);
@@ -263,7 +272,7 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 			} else if (nameParentType == ASTNode.VARIABLE_DECLARATION_FRAGMENT) {
 				VariableDeclarationFragment frag= (VariableDeclarationFragment) parent;
 				ASTNode varDecl= frag.getParent();
-				List fragments;
+				List<VariableDeclarationFragment> fragments;
 				if (varDecl instanceof VariableDeclarationExpression) {
 					fragments= ((VariableDeclarationExpression) varDecl).fragments();
 				} else if (varDecl instanceof FieldDeclaration) {
@@ -324,6 +333,14 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 						}
 					}
 				}
+			} else if (nameParentType == ASTNode.POSTFIX_EXPRESSION || nameParentType == ASTNode.PREFIX_EXPRESSION) {
+				Expression expression= (Expression)parent;
+				ASTNode expressionParent= expression.getParent();
+				if (expressionParent.getNodeType() == ASTNode.EXPRESSION_STATEMENT) {
+					removeStatement(rewrite, expressionParent, group);
+				} else {
+					rewrite.remove(expression, group);
+				}
 			}
 		}
 
@@ -337,11 +354,11 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 				statementRewrite.insertAfter(newInitializer, originalStatement, group);
 
 				VariableDeclarationStatement newDeclaration= null;
-				List fragments= originalStatement.fragments();
+				List<VariableDeclarationFragment> fragments= originalStatement.fragments();
 				int fragIndex= fragments.indexOf(frag);
-				ListIterator fragmentIterator= fragments.listIterator(fragIndex+1);
+				ListIterator<VariableDeclarationFragment> fragmentIterator= fragments.listIterator(fragIndex+1);
 				while (fragmentIterator.hasNext()) {
-					VariableDeclarationFragment currentFragment= (VariableDeclarationFragment) fragmentIterator.next();
+					VariableDeclarationFragment currentFragment= fragmentIterator.next();
 					VariableDeclarationFragment movedFragment= (VariableDeclarationFragment) rewrite.createMoveTarget(currentFragment);
 					if (newDeclaration == null) {
 						newDeclaration= rewrite.getAST().newVariableDeclarationStatement(movedFragment);
@@ -362,16 +379,12 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 		private void removeVariableWithInitializer(ASTRewrite rewrite, ASTNode initializerNode, ASTNode statementNode, TextEditGroup group) {
 			boolean performRemove= fForceRemove;
 			if (!performRemove) {
-				ArrayList sideEffectNodes= new ArrayList();
+				ArrayList<Expression> sideEffectNodes= new ArrayList<Expression>();
 				initializerNode.accept(new SideEffectFinder(sideEffectNodes));
 				performRemove= sideEffectNodes.isEmpty();
 			}
 			if (performRemove) {
-				if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) {
-					rewrite.replace(statementNode, rewrite.getAST().newBlock(), group);
-				} else {
-					rewrite.remove(statementNode, group);
-				}
+				removeStatement(rewrite, statementNode, group);
 				fRemovedAssignmentsCount++;
 			} else {
 				ASTNode initNode = rewrite.createMoveTarget(initializerNode);
@@ -381,6 +394,15 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 			}
 		}
 
+		private void removeStatement(ASTRewrite rewrite, ASTNode statementNode, TextEditGroup group) {
+			if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) {
+				rewrite.replace(statementNode, rewrite.getAST().newBlock(), group);
+			} else {
+				rewrite.remove(statementNode, group);
+			}
+		}
+
+		@Override
 		public String getAdditionalInfo() {
 			StringBuffer sb=new StringBuffer();
 			if (fRemovedAssignmentsCount == 1) {
@@ -413,6 +435,7 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 
 			TextEditGroup group= createTextEditGroup(FixMessages.UnusedCodeFix_RemoveCast_description, cuRewrite);
@@ -423,32 +446,33 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 			Expression expression= cast.getExpression();
 			ASTNode placeholder= rewrite.createCopyTarget(expression);
 
-			if (ASTNodes.needsParentheses(expression)) {
+			if (NecessaryParenthesesChecker.needsParentheses(expression, cast.getParent(), cast.getLocationInParent())) {
 				rewrite.replace(fCast, placeholder, group);
 			} else {
-				rewrite.replace(fSelectedNode, placeholder, group);
+				rewrite.replace(fCast.getParent() instanceof ParenthesizedExpression ? fCast.getParent() : fSelectedNode, placeholder, group);
 			}
 		}
 	}
 
 	private static class RemoveAllCastOperation extends CompilationUnitRewriteOperation {
 
-		private final HashSet fUnnecessaryCasts;
+		private final HashSet<CastExpression> fUnnecessaryCasts;
 
-		public RemoveAllCastOperation(HashSet unnecessaryCasts) {
+		public RemoveAllCastOperation(HashSet<CastExpression> unnecessaryCasts) {
 			fUnnecessaryCasts= unnecessaryCasts;
 		}
 
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 
 			TextEditGroup group= createTextEditGroup(FixMessages.UnusedCodeFix_RemoveCast_description, cuRewrite);
 
 			while (fUnnecessaryCasts.size() > 0) {
-				CastExpression castExpression= (CastExpression)fUnnecessaryCasts.iterator().next();
+				CastExpression castExpression= fUnnecessaryCasts.iterator().next();
 				fUnnecessaryCasts.remove(castExpression);
 				CastExpression down= castExpression;
 				while (fUnnecessaryCasts.contains(down.getExpression())) {
@@ -456,7 +480,8 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 					fUnnecessaryCasts.remove(down);
 				}
 
-				ASTNode move= rewrite.createMoveTarget(down.getExpression());
+				Expression expression= down.getExpression();
+				ASTNode move= rewrite.createMoveTarget(expression);
 
 				CastExpression top= castExpression;
 				while (fUnnecessaryCasts.contains(top.getParent())) {
@@ -464,7 +489,11 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 					fUnnecessaryCasts.remove(top);
 				}
 
-				rewrite.replace(top, move, group);
+				ASTNode toReplace= top;
+				if (top.getParent() instanceof ParenthesizedExpression && !NecessaryParenthesesChecker.needsParentheses(expression, top.getParent(), top.getLocationInParent())) {
+					toReplace= top.getParent();
+				}
+				rewrite.replace(toReplace, move, group);
 			}
 		}
 	}
@@ -475,7 +504,7 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 			if (node != null) {
 				String label= FixMessages.UnusedCodeFix_RemoveImport_description;
 				RemoveImportOperation operation= new RemoveImportOperation(node);
-				Map options= new Hashtable();
+				Map<String, String> options= new Hashtable<String, String>();
 				options.put(CleanUpConstants.REMOVE_UNUSED_CODE_IMPORTS, CleanUpOptions.TRUE);
 				return new UnusedCodeFix(label, compilationUnit, new CompilationUnitRewriteOperation[] {operation}, options);
 			}
@@ -563,9 +592,9 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 			boolean removeUnusedImports,
 			boolean removeUnusedCast) {
 
-		List/*<CompilationUnitRewriteOperation>*/ result= new ArrayList();
-		Hashtable/*<ASTNode, List>*/ variableDeclarations= new Hashtable();
-		HashSet/*/CastExpression>*/ unnecessaryCasts= new HashSet();
+		List<CompilationUnitRewriteOperation> result= new ArrayList<CompilationUnitRewriteOperation>();
+		Hashtable<ASTNode, List<SimpleName>> variableDeclarations= new Hashtable<ASTNode, List<SimpleName>>();
+		HashSet<CastExpression> unnecessaryCasts= new HashSet<CastExpression>();
 		for (int i= 0; i < problems.length; i++) {
 			IProblemLocation problem= problems[i];
 			int id= problem.getProblemId();
@@ -600,9 +629,9 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 						if (parent != null) {
 							ASTNode varDecl= parent.getParent();
 							if (!variableDeclarations.containsKey(varDecl)) {
-								variableDeclarations.put(varDecl, new ArrayList());
+								variableDeclarations.put(varDecl, new ArrayList<SimpleName>());
 							}
-							((List)variableDeclarations.get(varDecl)).add(name);
+							variableDeclarations.get(varDecl).add(name);
 						} else {
 							result.add(new RemoveUnusedMemberOperation(new SimpleName[] {name}, false));
 						}
@@ -619,14 +648,14 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 				}
 
 				if (curr instanceof CastExpression) {
-					unnecessaryCasts.add(curr);
+					unnecessaryCasts.add((CastExpression) curr);
 				}
 			}
 		}
-		for (Iterator iter= variableDeclarations.keySet().iterator(); iter.hasNext();) {
-			ASTNode node= (ASTNode)iter.next();
-			List names= (List)variableDeclarations.get(node);
-			result.add(new RemoveUnusedMemberOperation((SimpleName[])names.toArray(new SimpleName[names.size()]), false));
+		for (Iterator<ASTNode> iter= variableDeclarations.keySet().iterator(); iter.hasNext();) {
+			ASTNode node= iter.next();
+			List<SimpleName> names= variableDeclarations.get(node);
+			result.add(new RemoveUnusedMemberOperation(names.toArray(new SimpleName[names.size()]), false));
 		}
 		if (unnecessaryCasts.size() > 0)
 			result.add(new RemoveAllCastOperation(unnecessaryCasts));
@@ -634,7 +663,7 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 		if (result.size() == 0)
 			return null;
 
-		return new UnusedCodeFix(FixMessages.UnusedCodeFix_change_name, compilationUnit, (CompilationUnitRewriteOperation[])result.toArray(new CompilationUnitRewriteOperation[result.size()]));
+		return new UnusedCodeFix(FixMessages.UnusedCodeFix_change_name, compilationUnit, result.toArray(new CompilationUnitRewriteOperation[result.size()]));
 	}
 
 	private static boolean isFormalParameterInEnhancedForStatement(SimpleName name) {
@@ -676,7 +705,7 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 			return false;
 		}
 
-		ArrayList sideEffects= new ArrayList();
+		ArrayList<Expression> sideEffects= new ArrayList<Expression>();
 		node.accept(new SideEffectFinder(sideEffects));
 		return sideEffects.size() > 0;
 	}
@@ -715,8 +744,8 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 		}
 	}
 
-	private static Map getCleanUpOptions(IBinding binding, boolean removeAll) {
-		Map result= new Hashtable();
+	private static Map<String, String> getCleanUpOptions(IBinding binding, boolean removeAll) {
+		Map<String, String> result= new Hashtable<String, String>();
 
 		result.put(CleanUpConstants.REMOVE_UNUSED_CODE_PRIVATE_MEMBERS, CleanUpOptions.TRUE);
 		switch (binding.getKind()) {
@@ -753,13 +782,13 @@ public class UnusedCodeFix extends CompilationUnitRewriteOperationsFix {
 		return null;
 	}
 
-	private final Map fCleanUpOptions;
+	private final Map<String, String> fCleanUpOptions;
 
 	private UnusedCodeFix(String name, CompilationUnit compilationUnit, CompilationUnitRewriteOperation[] fixRewriteOperations) {
 		this(name, compilationUnit, fixRewriteOperations, null);
 	}
 
-	private UnusedCodeFix(String name, CompilationUnit compilationUnit, CompilationUnitRewriteOperation[] fixRewriteOperations, Map options) {
+	private UnusedCodeFix(String name, CompilationUnit compilationUnit, CompilationUnitRewriteOperation[] fixRewriteOperations, Map<String, String> options) {
 		super(name, compilationUnit, fixRewriteOperations);
 		fCleanUpOptions= options;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java
index 1837daf..38ddee7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,15 +60,16 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 
 	private static class WrittenNamesFinder extends GenericVisitor {
 
-		private final HashMap fResult;
+		private final HashMap<IBinding, List<SimpleName>> fResult;
 
-		public WrittenNamesFinder(HashMap result) {
+		public WrittenNamesFinder(HashMap<IBinding, List<SimpleName>> result) {
 			fResult= result;
 		}
 
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(SimpleName node) {
 			if (node.getParent() instanceof VariableDeclarationFragment)
 				return super.visit(node);
@@ -81,11 +82,11 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 
 			binding= ((IVariableBinding)binding).getVariableDeclaration();
 			if (ASTResolving.isWriteAccess(node)) {
-				List list;
+				List<SimpleName> list;
 				if (fResult.containsKey(binding)) {
-					list= (List)fResult.get(binding);
+					list= fResult.get(binding);
 				} else {
-					list= new ArrayList();
+					list= new ArrayList<SimpleName>();
 				}
 				list.add(node);
 				fResult.put(binding, list);
@@ -97,6 +98,7 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 
 	private static class ReturnFinder extends ASTVisitor {
 		boolean foundOne;
+		@Override
 		public boolean visit(ReturnStatement node) {
 			foundOne= true;
 			return super.visit(node);
@@ -105,8 +107,8 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 
 	private static class VariableDeclarationFinder extends GenericVisitor {
 
-		private final List fResult;
-		private final HashMap fWrittenVariables;
+		private final List<ModifierChangeOperation> fResult;
+		private final HashMap<IBinding, List<SimpleName>> fWrittenVariables;
 		private final boolean fAddFinalFields;
 		private final boolean fAddFinalParameters;
 		private final boolean fAddFinalLocals;
@@ -114,7 +116,7 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		public VariableDeclarationFinder(boolean addFinalFields,
 				boolean addFinalParameters,
 				boolean addFinalLocals,
-				final List result, final HashMap writtenNames) {
+				final List<ModifierChangeOperation> result, final HashMap<IBinding, List<SimpleName>> writtenNames) {
 
 			super();
 			fAddFinalFields= addFinalFields;
@@ -127,13 +129,14 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(FieldDeclaration node) {
 			if (fAddFinalFields)
 				handleFragments(node.fragments(), node);
 
-			List fragments= node.fragments();
-			for (Iterator iterator= fragments.iterator(); iterator.hasNext();) {
-				VariableDeclarationFragment fragment= (VariableDeclarationFragment) iterator.next();
+			List<VariableDeclarationFragment> fragments= node.fragments();
+			for (Iterator<VariableDeclarationFragment> iterator= fragments.iterator(); iterator.hasNext();) {
+				VariableDeclarationFragment fragment= iterator.next();
 				Expression initializer= fragment.getInitializer();
 				if (initializer != null) {
 					initializer.accept(this);
@@ -146,13 +149,14 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(VariableDeclarationStatement node) {
 			if (fAddFinalLocals)
 				handleFragments(node.fragments(), node);
 
-			List fragments= node.fragments();
-			for (Iterator iterator= fragments.iterator(); iterator.hasNext();) {
-				VariableDeclarationFragment fragment= (VariableDeclarationFragment) iterator.next();
+			List<VariableDeclarationFragment> fragments= node.fragments();
+			for (Iterator<VariableDeclarationFragment> iterator= fragments.iterator(); iterator.hasNext();) {
+				VariableDeclarationFragment fragment= iterator.next();
 				Expression initializer= fragment.getInitializer();
 				if (initializer != null) {
 					initializer.accept(this);
@@ -165,6 +169,7 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(VariableDeclarationExpression node) {
 			if (fAddFinalLocals && node.fragments().size() == 1) {
 				SimpleName name= ((VariableDeclarationFragment)node.fragments().get(0)).getName();
@@ -186,11 +191,11 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 			return false;
 		}
 
-		private boolean handleFragments(List list, ASTNode declaration) {
-			List toChange= new ArrayList();
+		private boolean handleFragments(List<VariableDeclarationFragment> list, ASTNode declaration) {
+			List<VariableDeclarationFragment> toChange= new ArrayList<VariableDeclarationFragment>();
 
-			for (Iterator iter= list.iterator(); iter.hasNext();) {
-				VariableDeclarationFragment fragment= (VariableDeclarationFragment)iter.next();
+			for (Iterator<VariableDeclarationFragment> iter= list.iterator(); iter.hasNext();) {
+				VariableDeclarationFragment fragment= iter.next();
 				SimpleName name= fragment.getName();
 				IBinding resolveBinding= name.resolveBinding();
 				if (canAddFinal(resolveBinding, declaration)) {
@@ -233,14 +238,14 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 			if (declaringClass == null)
 				return false;
 
-			ArrayList writes= (ArrayList)fWrittenVariables.get(binding);
+			List<SimpleName> writes= fWrittenVariables.get(binding);
 			if (!isWrittenInTypeConstructors(writes, declaringClass))
 				return false;
 
-			HashSet writingConstructorBindings= new HashSet();
-			ArrayList writingConstructors= new ArrayList();
+			HashSet<IMethodBinding> writingConstructorBindings= new HashSet<IMethodBinding>();
+			ArrayList<MethodDeclaration> writingConstructors= new ArrayList<MethodDeclaration>();
 			for (int i= 0; i < writes.size(); i++) {
-	            SimpleName name= (SimpleName)writes.get(i);
+	            SimpleName name= writes.get(i);
 	            MethodDeclaration constructor= getWritingConstructor(name);
 	            if (writingConstructors.contains(constructor))//variable is written twice or more in constructor
 	            	return false;
@@ -257,12 +262,12 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
             }
 
 			for (int i= 0; i < writingConstructors.size(); i++) {
-	            MethodDeclaration constructor= (MethodDeclaration)writingConstructors.get(i);
+	            MethodDeclaration constructor= writingConstructors.get(i);
 	            if (callsWritingConstructor(constructor, writingConstructorBindings))//writing constructor calls other writing constructor
 	            	return false;
             }
 
-			MethodDeclaration constructor= (MethodDeclaration)writingConstructors.get(0);
+			MethodDeclaration constructor= writingConstructors.get(0);
 			TypeDeclaration typeDecl= (TypeDeclaration)ASTNodes.getParent(constructor, TypeDeclaration.class);
 			if (typeDecl == null)
 				return false;
@@ -290,22 +295,22 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 			return retFinder.foundOne;
 		}
 
-		private boolean callsWritingConstructor(MethodDeclaration methodDeclaration, HashSet writingConstructorBindings) {
-			HashSet visitedMethodDeclarations= new HashSet();
+		private boolean callsWritingConstructor(MethodDeclaration methodDeclaration, HashSet<IMethodBinding> writingConstructorBindings) {
+			HashSet<MethodDeclaration> visitedMethodDeclarations= new HashSet<MethodDeclaration>();
 			visitedMethodDeclarations.add(methodDeclaration);
 			return callsWritingConstructor(methodDeclaration, writingConstructorBindings, visitedMethodDeclarations);
 		}
 
-		private boolean callsWritingConstructor(MethodDeclaration methodDeclaration, HashSet writingConstructorBindings, Set visitedMethodDeclarations) {
+		private boolean callsWritingConstructor(MethodDeclaration methodDeclaration, HashSet<IMethodBinding> writingConstructorBindings, Set<MethodDeclaration> visitedMethodDeclarations) {
 			Block body= methodDeclaration.getBody();
 			if (body == null)
 				return false;
 
-			List statements= body.statements();
+			List<Statement> statements= body.statements();
 			if (statements.size() == 0)
 				return false;
 
-			Statement statement= (Statement)statements.get(0);
+			Statement statement= statements.get(0);
 			if (!(statement instanceof ConstructorInvocation))
 				return false;
 
@@ -329,10 +334,10 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 			}
 		}
 
-		private boolean isWrittenInTypeConstructors(ArrayList writes, ITypeBinding declaringClass) {
+		private boolean isWrittenInTypeConstructors(List<SimpleName> writes, ITypeBinding declaringClass) {
 
 			for (int i= 0; i < writes.size(); i++) {
-	            SimpleName name= (SimpleName)writes.get(i);
+	            SimpleName name= writes.get(i);
 
 	            MethodDeclaration methodDeclaration= getWritingConstructor(name);
 	            if (methodDeclaration == null)
@@ -376,6 +381,7 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(VariableDeclarationFragment node) {
 			SimpleName name= node.getName();
 
@@ -397,6 +403,7 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean visit(SingleVariableDeclaration node) {
 			SimpleName name= node.getName();
 
@@ -444,11 +451,11 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 	private static class ModifierChangeOperation extends CompilationUnitRewriteOperation {
 
 		private final ASTNode fDeclaration;
-		private final List fToChange;
+		private final List<VariableDeclarationFragment> fToChange;
 		private final int fIncludedModifiers;
 		private final int fExcludedModifiers;
 
-		public ModifierChangeOperation(ASTNode declaration, List toChange, int includedModifiers, int excludedModifiers) {
+		public ModifierChangeOperation(ASTNode declaration, List<VariableDeclarationFragment> toChange, int includedModifiers, int excludedModifiers) {
 			fDeclaration= declaration;
 			fToChange= toChange;
 			fIncludedModifiers= includedModifiers;
@@ -458,16 +465,17 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 
 			TextEditGroup group= createTextEditGroup(FixMessages.VariableDeclarationFix_changeModifierOfUnknownToFinal_description, cuRewrite);
 
 			if (fDeclaration instanceof VariableDeclarationStatement) {
-				VariableDeclarationFragment[] toChange= (VariableDeclarationFragment[])fToChange.toArray(new VariableDeclarationFragment[fToChange.size()]);
+				VariableDeclarationFragment[] toChange= fToChange.toArray(new VariableDeclarationFragment[fToChange.size()]);
 				VariableDeclarationRewrite.rewriteModifiers((VariableDeclarationStatement)fDeclaration, toChange, fIncludedModifiers, fExcludedModifiers, rewrite, group);
 			} else if (fDeclaration instanceof FieldDeclaration) {
-				VariableDeclarationFragment[] toChange= (VariableDeclarationFragment[])fToChange.toArray(new VariableDeclarationFragment[fToChange.size()]);
+				VariableDeclarationFragment[] toChange= fToChange.toArray(new VariableDeclarationFragment[fToChange.size()]);
 				VariableDeclarationRewrite.rewriteModifiers((FieldDeclaration)fDeclaration, toChange, fIncludedModifiers, fExcludedModifiers, rewrite, group);
 			} else if (fDeclaration instanceof SingleVariableDeclaration) {
 				VariableDeclarationRewrite.rewriteModifiers((SingleVariableDeclaration)fDeclaration, fIncludedModifiers, fExcludedModifiers, rewrite, group);
@@ -478,15 +486,12 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 	}
 
 	public static VariableDeclarationFix createChangeModifierToFinalFix(final CompilationUnit compilationUnit, ASTNode[] selectedNodes) {
-		HashMap writtenNames= new HashMap();
+		HashMap<IBinding, List<SimpleName>> writtenNames= new HashMap<IBinding, List<SimpleName>>();
 		WrittenNamesFinder finder= new WrittenNamesFinder(writtenNames);
 		compilationUnit.accept(finder);
-		List ops= new ArrayList();
+		List<ModifierChangeOperation> ops= new ArrayList<ModifierChangeOperation>();
 		VariableDeclarationFinder visitor= new VariableDeclarationFinder(true, true, true, ops, writtenNames);
 		if (selectedNodes.length == 1) {
-			if (selectedNodes[0] instanceof SimpleName) {
-				selectedNodes[0]= selectedNodes[0].getParent();
-			}
 			selectedNodes[0].accept(visitor);
 		} else {
 			for (int i= 0; i < selectedNodes.length; i++) {
@@ -497,7 +502,7 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		if (ops.size() == 0)
 			return null;
 
-		CompilationUnitRewriteOperation[] result= (CompilationUnitRewriteOperation[])ops.toArray(new CompilationUnitRewriteOperation[ops.size()]);
+		CompilationUnitRewriteOperation[] result= ops.toArray(new CompilationUnitRewriteOperation[ops.size()]);
 		String label;
 		if (result.length == 1) {
 			label= FixMessages.VariableDeclarationFix_changeModifierOfUnknownToFinal_description;
@@ -513,18 +518,18 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 		if (!addFinalFields && !addFinalParameters && !addFinalLocals)
 			return null;
 
-		HashMap writtenNames= new HashMap();
+		HashMap<IBinding, List<SimpleName>> writtenNames= new HashMap<IBinding, List<SimpleName>>();
 		WrittenNamesFinder finder= new WrittenNamesFinder(writtenNames);
 		compilationUnit.accept(finder);
 
-		List operations= new ArrayList();
+		List<ModifierChangeOperation> operations= new ArrayList<ModifierChangeOperation>();
 		VariableDeclarationFinder visitor= new VariableDeclarationFinder(addFinalFields, addFinalParameters, addFinalLocals, operations, writtenNames);
 		compilationUnit.accept(visitor);
 
 		if (operations.isEmpty())
 			return null;
 
-		return new VariableDeclarationFix(FixMessages.VariableDeclarationFix_add_final_change_name, compilationUnit, (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]));
+		return new VariableDeclarationFix(FixMessages.VariableDeclarationFix_add_final_change_name, compilationUnit, operations.toArray(new CompilationUnitRewriteOperation[operations.size()]));
 	}
 
 	private static ModifierChangeOperation createAddFinalOperation(SimpleName name, ASTNode decl) {
@@ -536,18 +541,18 @@ public class VariableDeclarationFix extends CompilationUnitRewriteOperationsFix
 			return null;
 
 		if (decl instanceof SingleVariableDeclaration) {
-			return new ModifierChangeOperation(decl, new ArrayList(), Modifier.FINAL, Modifier.NONE);
+			return new ModifierChangeOperation(decl, new ArrayList<VariableDeclarationFragment>(), Modifier.FINAL, Modifier.NONE);
 		} else if (decl instanceof VariableDeclarationExpression) {
-			return new ModifierChangeOperation(decl, new ArrayList(), Modifier.FINAL, Modifier.NONE);
+			return new ModifierChangeOperation(decl, new ArrayList<VariableDeclarationFragment>(), Modifier.FINAL, Modifier.NONE);
 		} else if (decl instanceof VariableDeclarationFragment){
 			VariableDeclarationFragment frag= (VariableDeclarationFragment)decl;
 			decl= decl.getParent();
 			if (decl instanceof FieldDeclaration || decl instanceof VariableDeclarationStatement) {
-				List list= new ArrayList();
+				List<VariableDeclarationFragment> list= new ArrayList<VariableDeclarationFragment>();
 				list.add(frag);
 				return new ModifierChangeOperation(decl, list, Modifier.FINAL, Modifier.NONE);
 			} else if (decl instanceof VariableDeclarationExpression) {
-				return new ModifierChangeOperation(decl, new ArrayList(), Modifier.FINAL, Modifier.NONE);
+				return new ModifierChangeOperation(decl, new ArrayList<VariableDeclarationFragment>(), Modifier.FINAL, Modifier.NONE);
 			}
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java
index 5c3f3a7..6f3feac 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class JavaDocCommentReader extends SingleCharReader {
 	/**
 	 * @see java.io.Reader#read()
 	 */
+	@Override
 	public int read() {
 		if (fCurrPos < fEndPos) {
 			char ch;
@@ -71,6 +72,7 @@ public class JavaDocCommentReader extends SingleCharReader {
 	/**
 	 * @see java.io.Reader#close()
 	 */
+	@Override
 	public void close() {
 		fBuffer= null;
 	}
@@ -78,6 +80,7 @@ public class JavaDocCommentReader extends SingleCharReader {
 	/**
 	 * @see java.io.Reader#reset()
 	 */
+	@Override
 	public void reset() {
 		fCurrPos= fStartPos;
 		fWasNewLine= true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java
index 8bcc611..991133a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,6 +87,7 @@ import org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter;
 import org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathSupport;
 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
 
+
 public class JavaDocLocations {
 
 	private static final String JAR_PROTOCOL= "jar"; //$NON-NLS-1$
@@ -103,7 +104,7 @@ public class JavaDocLocations {
 	private static final QualifiedName PROJECT_JAVADOC= new QualifiedName(JavaUI.ID_PLUGIN, "project_javadoc_location"); //$NON-NLS-1$
 
 	public static void migrateToClasspathAttributes() {
-		final Map oldLocations= loadOldForCompatibility();
+		final Map<IPath, String> oldLocations= loadOldForCompatibility();
 		if (oldLocations.isEmpty()) {
 			IPreferenceStore preferenceStore= PreferenceConstants.getPreferenceStore();
 			preferenceStore.setValue(PREF_JAVADOCLOCATIONS, ""); //$NON-NLS-1$
@@ -112,6 +113,7 @@ public class JavaDocLocations {
 		}
 
 		Job job= new Job(CorextMessages.JavaDocLocations_migratejob_name) {
+			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				try {
 					IWorkspaceRunnable runnable= new IWorkspaceRunnable() {
@@ -134,14 +136,14 @@ public class JavaDocLocations {
 		job.schedule();
 	}
 
-	final static void updateClasspathEntries(Map oldLocationMap, IProgressMonitor monitor) throws JavaModelException {
+	final static void updateClasspathEntries(Map<IPath, String> oldLocationMap, IProgressMonitor monitor) throws JavaModelException {
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		IJavaProject[] javaProjects= JavaCore.create(root).getJavaProjects();
 		try {
 			monitor.beginTask(CorextMessages.JavaDocLocations_migrate_operation, javaProjects.length);
 			for (int i= 0; i < javaProjects.length; i++) {
 				IJavaProject project= javaProjects[i];
-				String projectJavadoc= (String) oldLocationMap.get(project.getPath());
+				String projectJavadoc= oldLocationMap.get(project.getPath());
 				if (projectJavadoc != null) {
 					try {
 						setProjectJavadocLocation(project, projectJavadoc);
@@ -170,7 +172,7 @@ public class JavaDocLocations {
 		}
 	}
 
-	private static IClasspathEntry getConvertedEntry(IClasspathEntry entry, IJavaProject project, Map oldLocationMap) {
+	private static IClasspathEntry getConvertedEntry(IClasspathEntry entry, IJavaProject project, Map<IPath, String> oldLocationMap) {
 		IPath path= null;
 		switch (entry.getEntryKind()) {
 			case IClasspathEntry.CPE_SOURCE:
@@ -197,7 +199,7 @@ public class JavaDocLocations {
 				return null;
 			}
 		}
-		String libraryJavadocLocation= (String) oldLocationMap.get(path);
+		String libraryJavadocLocation= oldLocationMap.get(path);
 		if (libraryJavadocLocation != null) {
 			CPListElement element= CPListElement.createFromExisting(entry, project);
 			element.setAttribute(CPListElement.JAVADOC, libraryJavadocLocation);
@@ -206,7 +208,7 @@ public class JavaDocLocations {
 		return null;
 	}
 
-	private static void convertContainer(IClasspathEntry entry, IJavaProject project, Map oldLocationMap) {
+	private static void convertContainer(IClasspathEntry entry, IJavaProject project, Map<IPath, String> oldLocationMap) {
 		try {
 			IClasspathContainer container= JavaCore.getClasspathContainer(entry.getPath(), project);
 			if (container == null) {
@@ -327,8 +329,8 @@ public class JavaDocLocations {
 		return new JavaUIException(JavaUIStatus.createError(IStatus.ERROR, message, t));
 	}
 
-	private static Map/*<Path, String>*/ loadOldForCompatibility() {
-		HashMap resultingOldLocations= new HashMap();
+	private static Map<IPath, String> loadOldForCompatibility() {
+		HashMap<IPath, String> resultingOldLocations= new HashMap<IPath, String>();
 
 		// in 3.0, the javadoc locations were stored as one big string in the preferences
 		String string= PreferenceConstants.getPreferenceStore().getString(PREF_JAVADOCLOCATIONS);
@@ -409,7 +411,7 @@ public class JavaDocLocations {
 		return resultingOldLocations;
 	}
 
-	private static void loadFromStream(InputSource inputSource, Map/*<Path, String>*/ oldLocations) throws CoreException {
+	private static void loadFromStream(InputSource inputSource, Map<IPath, String> oldLocations) throws CoreException {
 		Element cpElement;
 		try {
 			DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
@@ -547,8 +549,10 @@ public class JavaDocLocations {
 		IPackageFragment pack= type.getPackageFragment();
 		String packPath= pack.getElementName().replace('.', '/');
 		String typePath= type.getTypeQualifiedName('.');
-		buf.append(packPath);
-		buf.append('/');
+		if (packPath.length() > 0) {
+			buf.append(packPath);
+			buf.append('/');
+		}
 		buf.append(typePath);
 		buf.append(".html"); //$NON-NLS-1$
 	}
@@ -600,7 +604,10 @@ public class JavaDocLocations {
 				if (baseURL.getProtocol().equals(JAR_PROTOCOL)) {
 					// It's a JarURLConnection, which is not known to the browser widget.
 					// Let's start the help web server:
-					baseURL= PlatformUI.getWorkbench().getHelpSystem().resolve(baseURL.toExternalForm(), true);
+					URL baseURL2= PlatformUI.getWorkbench().getHelpSystem().resolve(baseURL.toExternalForm(), true);
+					if (baseURL2 != null) { // can be null if org.eclipse.help.ui is not available
+						baseURL= baseURL2;
+					}
 				}
 				return baseURL.toExternalForm();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractJavaContextType.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractJavaContextType.java
index 4ef4c32..daef609 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractJavaContextType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractJavaContextType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 			super(type, description);
 		}
 
+		@Override
 		protected String[] resolveAll(TemplateContext context) {
 	        JavaContext jc= (JavaContext) context;
 	        Variable[] iterables= getLocalVariables(jc);
@@ -56,6 +57,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		/*
 		 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 		 */
+		@Override
 		public void resolve(TemplateVariable variable, TemplateContext context) {
 			if (variable instanceof MultiVariable) {
 				JavaContext jc= (JavaContext) context;
@@ -83,6 +85,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 			super("array", JavaTemplateMessages.JavaContextType_variable_description_array);  //$NON-NLS-1$
 		}
 
+		@Override
 		protected Variable[] getLocalVariables(JavaContext jc) {
 			return jc.getArrays();
 		}
@@ -93,6 +96,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		    super("iterable", JavaTemplateMessages.JavaContextType_variable_description_iterable);  //$NON-NLS-1$
 		}
 
+		@Override
 		protected Variable[] getLocalVariables(JavaContext jc) {
 			return jc.getIterables();
 		}
@@ -105,7 +109,8 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 	     	super(type, desc);
 	     	fMasterName= master;
 	    }
-	    protected String[] resolveAll(TemplateContext context) {
+	    @Override
+		protected String[] resolveAll(TemplateContext context) {
 	        JavaContext jc= (JavaContext) context;
 	        Variable[] iterables= getLocalVariables(jc);
 	        String[] types= new String[iterables.length];
@@ -119,6 +124,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		/*
 		 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 		 */
+		@Override
 		public void resolve(TemplateVariable variable, TemplateContext context) {
 			if (variable instanceof MultiVariable) {
 				JavaContext jc= (JavaContext) context;
@@ -155,6 +161,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		public ArrayType() {
 			super("array_type", JavaTemplateMessages.JavaContextType_variable_description_array_type, "array");  //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		@Override
 		protected Variable[] getLocalVariables(JavaContext jc) {
 			return jc.getArrays();
 		}
@@ -164,6 +171,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		public IterableType() {
 	     	super("iterable_type", JavaTemplateMessages.JavaContextType_variable_description_iterable_type, "iterable");  //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		@Override
 		protected Variable[] getLocalVariables(JavaContext jc) {
 			return jc.getIterables();
 		}
@@ -177,7 +185,8 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 	     	fMasterName= master;
 	    }
 
-	    protected String[] resolveAll(TemplateContext context) {
+	    @Override
+		protected String[] resolveAll(TemplateContext context) {
 	        JavaContext jc= (JavaContext) context;
 	        Variable[] iterables= getLocalVariables(jc);
 	        String[] elements= new String[iterables.length];
@@ -195,6 +204,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		/*
 		 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 		 */
+		@Override
 		public void resolve(TemplateVariable variable, TemplateContext context) {
 			if (variable instanceof MultiVariable) {
 				JavaContext jc= (JavaContext) context;
@@ -233,6 +243,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		public ArrayElement() {
 			super("array_element", JavaTemplateMessages.JavaContextType_variable_description_array_element, "array");	 //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		@Override
 		protected Variable[] getLocalVariables(JavaContext jc) {
 			return jc.getArrays();
 		}
@@ -242,6 +253,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		public IterableElement() {
 	     	super("iterable_element", JavaTemplateMessages.JavaContextType_variable_description_iterable_element, "iterable");	 //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		@Override
 		protected Variable[] getLocalVariables(JavaContext jc) {
 			return jc.getIterables();
 		}
@@ -276,6 +288,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		public Todo() {
 			super("todo", JavaTemplateMessages.JavaContextType_variable_description_todo);  //$NON-NLS-1$
 		}
+		@Override
 		protected String resolve(TemplateContext context) {
 			JavaContext javaContext= (JavaContext) context;
 			ICompilationUnit compilationUnit= javaContext.getCompilationUnit();
@@ -312,7 +325,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 		// global
 		addResolver(new GlobalTemplateVariables.Cursor());
 		addResolver(new GlobalTemplateVariables.WordSelection());
-		addResolver(new GlobalTemplateVariables.LineSelection());
+		addResolver(new SurroundWithLineSelection());
 		addResolver(new GlobalTemplateVariables.Dollar());
 		addResolver(new GlobalTemplateVariables.Date());
 		addResolver(new GlobalTemplateVariables.Year());
@@ -346,6 +359,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, int, int, org.eclipse.jdt.core.ICompilationUnit)
 	 */
+	@Override
 	public CompilationUnitContext createContext(IDocument document, int offset, int length, ICompilationUnit compilationUnit) {
 		JavaContext javaContext= new JavaContext(this, document, offset, length, compilationUnit);
 		initializeContext(javaContext);
@@ -355,6 +369,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.Position, org.eclipse.jdt.core.ICompilationUnit)
 	 */
+	@Override
 	public CompilationUnitContext createContext(IDocument document, Position completionPosition, ICompilationUnit compilationUnit) {
 		JavaContext javaContext= new JavaContext(this, document, completionPosition, compilationUnit);
 		initializeContext(javaContext);
@@ -364,7 +379,7 @@ public abstract class AbstractJavaContextType extends CompilationUnitContextType
 	/**
 	 * Hook to initialize the context
 	 *
-	 * @param context
+	 * @param context the context
 	 */
 	protected void initializeContext(JavaContext context) {
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractVariableResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractVariableResolver.java
index aedd7d1..008ca82 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractVariableResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/AbstractVariableResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,26 +56,27 @@ public abstract class AbstractVariableResolver extends TemplateVariableResolver
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
 
 		if (variable instanceof JavaVariable) {
 			JavaContext jc= (JavaContext) context;
 			JavaVariable jv= (JavaVariable) variable;
 
-			List params= variable.getVariableType().getParams();
+			List<String> params= variable.getVariableType().getParams();
 			if (params.size() == 0) {
 				fVariables= getVisibleVariables(fDefaultType, jc);
 				jv.setParamType(fDefaultType);
 			} else if (params.size() == 1) {
-				String type= (String) params.get(0);
+				String type= params.get(0);
 				fVariables= getVisibleVariables(type, jc);
 				jv.setParamType(type);
 			} else {
-				ArrayList variables= new ArrayList();
-				for (Iterator iterator= params.iterator(); iterator.hasNext();) {
-					variables.addAll(Arrays.asList(getVisibleVariables((String) iterator.next(), jc)));
+				ArrayList<Variable> variables= new ArrayList<Variable>();
+				for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) {
+					variables.addAll(Arrays.asList(getVisibleVariables(iterator.next(), jc)));
 				}
-				fVariables= (Variable[]) variables.toArray(new Variable[variables.size()]);
+				fVariables= variables.toArray(new Variable[variables.size()]);
 
 				//set to default type, a template which references to the type
 				//of _the_ parameter will not correctly work anyway
@@ -100,6 +101,7 @@ public abstract class AbstractVariableResolver extends TemplateVariableResolver
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolveAll(org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	protected String[] resolveAll(TemplateContext context) {
 
 		String[] names= new String[fVariables.length];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContext.java
index ac59088..8bf6519 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,11 +48,12 @@ public class CodeTemplateContext extends TemplateContext {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.TemplateContext#evaluate(org.eclipse.jdt.internal.corext.template.Template)
 	 */
+	@Override
 	public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException {
 		// test that all variables are defined
-		Iterator iterator= getContextType().resolvers();
+		Iterator<TemplateVariableResolver> iterator= getContextType().resolvers();
 		while (iterator.hasNext()) {
-			TemplateVariableResolver var= (TemplateVariableResolver) iterator.next();
+			TemplateVariableResolver var= iterator.next();
 			if (var instanceof CodeTemplateContextType.CodeTemplateVariableResolver) {
 				Assert.isNotNull(getVariable(var.getType()), "Variable " + var.getType() + "not defined"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
@@ -97,6 +98,7 @@ public class CodeTemplateContext extends TemplateContext {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.template.TemplateContext#canEvaluate(org.eclipse.jdt.internal.corext.template.Template)
 	 */
+	@Override
 	public boolean canEvaluate(Template template) {
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContextType.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContextType.java
index d5087eb..36a444f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContextType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CodeTemplateContextType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,6 +122,7 @@ public class CodeTemplateContextType extends TemplateContextType {
 			super(type, description);
 		}
 
+		@Override
 		protected String resolve(TemplateContext context) {
 			return context.getVariable(getType());
 		}
@@ -135,6 +136,7 @@ public class CodeTemplateContextType extends TemplateContextType {
 			super(TAGS,  JavaTemplateMessages.CodeTemplateContextType_variable_description_tags);
 		}
 
+		@Override
 		protected String resolve(TemplateContext context) {
 			return "@"; //$NON-NLS-1$
 		}
@@ -149,6 +151,7 @@ public class CodeTemplateContextType extends TemplateContextType {
 			super("todo", JavaTemplateMessages.CodeTemplateContextType_variable_description_todo);  //$NON-NLS-1$
 		}
 
+		@Override
 		protected String resolve(TemplateContext context) {
 			String todoTaskTag= StubUtility.getTodoTaskTag(((CodeTemplateContext) context).getJavaProject());
 			if (todoTaskTag == null)
@@ -278,8 +281,9 @@ public class CodeTemplateContextType extends TemplateContextType {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.ContextType#validateVariables(org.eclipse.jdt.internal.corext.template.TemplateVariable[])
 	 */
+	@Override
 	protected void validateVariables(TemplateVariable[] variables) throws TemplateException {
-		ArrayList required=  new ArrayList(5);
+		ArrayList<String> required=  new ArrayList<String>(5);
 		String contextName= getId();
 		if (NEWTYPE_CONTEXTTYPE.equals(contextName)) {
 			required.add(PACKAGE_DECLARATION);
@@ -294,7 +298,7 @@ public class CodeTemplateContextType extends TemplateContextType {
 			required.remove(type);
 		}
 		if (!required.isEmpty()) {
-			String missing= BasicElementLabels.getJavaElementName((String) required.get(0));
+			String missing= BasicElementLabels.getJavaElementName(required.get(0));
 			throw new TemplateException(Messages.format(JavaTemplateMessages.CodeTemplateContextType_validate_missingvariable, missing));
 		}
 		super.validateVariables(variables);
@@ -333,6 +337,7 @@ public class CodeTemplateContextType extends TemplateContextType {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.ContextType#validate(java.lang.String)
 	 */
+	@Override
 	public void validate(String pattern) throws TemplateException {
 		super.validate(pattern);
 		if (fIsComment) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java
index b7de8b9..451a532 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -204,13 +204,13 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 				} else {
 					ITypeHierarchy hierarchy= sub.newSupertypeHierarchy(null);
 					IType[] allTypes= hierarchy.getAllTypes();
-					List matches= new ArrayList();
+					List<IType> matches= new ArrayList<IType>();
 					for (int i= 0; i < allTypes.length; i++) {
 						IType type= allTypes[i];
 						if (type.getElementName().equals(supertype))
 							matches.add(type);
 					}
-					return (IType[]) matches.toArray(new IType[matches.size()]);
+					return matches.toArray(new IType[matches.size()]);
 				}
 
 			} catch (JavaModelException e) {
@@ -273,7 +273,7 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 
 			for (int i= 0; i < signatures.length; i++) {
 				String sig= signatures[i];
-				String local= (String) fLocalTypes.get(Signature.getElementType(sig));
+				String local= fLocalTypes.get(Signature.getElementType(sig));
 				int dim= Signature.getArrayCount(sig);
 				if (local != null && dim > 0) {
 					StringBuffer array= new StringBuffer(local);
@@ -299,7 +299,7 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 		 * @since 3.3
 		 */
 		public String[] getTypeArgumentBoundSignatures(String type, int index) {
-			List all= new ArrayList();
+			List<String> all= new ArrayList<String>();
 			IType[] supertypes= getSupertypes(type);
 			if (fUnit != null) {
 				for (int i= 0; i < supertypes.length; i++) {
@@ -314,12 +314,13 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 			}
 			if (all.isEmpty())
 				return new String[] {Signature.createTypeSignature("java.lang.Object", true)}; //$NON-NLS-1$
-			return (String[]) all.toArray(new String[all.size()]);
+			return all.toArray(new String[all.size()]);
 		}
 
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
 			String type;
 			switch (fType) {
@@ -351,7 +352,7 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 		private final ITypeHierarchy fHierarchy;
 		private final Variable fVariable;
 		private final IType fType;
-		private final List fBounds= new ArrayList();
+		private final List<String> fBounds= new ArrayList<String>();
 
 		/**
 		 * Creates a new type parameter resolver to compute the bindings of type
@@ -420,7 +421,7 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 		public String[] computeBinding(IType superType, int index) throws JavaModelException, IndexOutOfBoundsException {
 			initBounds();
 			computeTypeParameterBinding(superType, index);
-			return (String[]) fBounds.toArray(new String[fBounds.size()]);
+			return fBounds.toArray(new String[fBounds.size()]);
 		}
 
 		/**
@@ -605,8 +606,8 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 				return;
 
 			boolean found= false;
-			for (ListIterator it= fBounds.listIterator(); it.hasNext();) {
-				String old= (String) it.next();
+			for (ListIterator<String> it= fBounds.listIterator(); it.hasNext();) {
+				String old= it.next();
 				if (isTrueSubtypeOf(boundSignature, old)) {
 					if (!found) {
 						it.set(boundSignature);
@@ -694,9 +695,9 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 
 	private ICompilationUnit fUnit;
 
-	private List fLocalVariables= new ArrayList();
-	private List fFields= new ArrayList();
-	private Map fLocalTypes= new HashMap();
+	private List<Variable> fLocalVariables= new ArrayList<Variable>();
+	private List<Variable> fFields= new ArrayList<Variable>();
+	private Map<String, String> fLocalTypes= new HashMap<String, String>();
 
 	private boolean fError;
 
@@ -751,6 +752,7 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	/*
 	 * @see org.eclipse.jdt.core.CompletionRequestor#accept(org.eclipse.jdt.core.CompletionProposal)
 	 */
+	@Override
 	public void accept(CompletionProposal proposal) {
 
 		String name= String.valueOf(proposal.getCompletion());
@@ -775,6 +777,7 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	/*
 	 * @see org.eclipse.jdt.core.CompletionRequestor#completionFailure(org.eclipse.jdt.core.compiler.IProblem)
 	 */
+	@Override
 	public void completionFailure(IProblem problem) {
 		fError= true;
 	}
@@ -797,8 +800,8 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	public String[] getLocalVariableNames() {
 		String[] names= new String[fLocalVariables.size()];
 		int i= 0;
-		for (ListIterator iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
-			Variable localVariable= (Variable) iterator.previous();
+		for (ListIterator<Variable> iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
+			Variable localVariable= iterator.previous();
 			names[i++]= localVariable.getName();
 		}
 		return names;
@@ -813,8 +816,8 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	public String[] getFieldNames() {
 		String[] names= new String[fFields.size()];
 		int i= 0;
-		for (ListIterator iterator= fFields.listIterator(fFields.size()); iterator.hasPrevious();) {
-			Variable field= (Variable)iterator.previous();
+		for (ListIterator<Variable> iterator= fFields.listIterator(fFields.size()); iterator.hasPrevious();) {
+			Variable field= iterator.previous();
 			names[i++]= field.getName();
 		}
 		return names;
@@ -826,16 +829,16 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	 * @return all local arrays
 	 */
 	public Variable[] findLocalArrays() {
-		List arrays= new ArrayList();
+		List<Variable> arrays= new ArrayList<Variable>();
 
-		for (ListIterator iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
-			Variable localVariable= (Variable) iterator.previous();
+		for (ListIterator<Variable> iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
+			Variable localVariable= iterator.previous();
 
 			if (localVariable.isArray())
 				arrays.add(localVariable);
 		}
 
-		return (Variable[]) arrays.toArray(new Variable[arrays.size()]);
+		return arrays.toArray(new Variable[arrays.size()]);
 	}
 
 	/**
@@ -846,16 +849,16 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	 * @return all local variables matching <code>clazz</code>
 	 */
 	public Variable[] findLocalVariables(String clazz) {
-		List matches= new ArrayList();
+		List<Variable> matches= new ArrayList<Variable>();
 
-		for (ListIterator iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
-			Variable localVariable= (Variable) iterator.previous();
+		for (ListIterator<Variable> iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
+			Variable localVariable= iterator.previous();
 
 			if (localVariable.isSubtypeOf(clazz))
 				matches.add(localVariable);
 		}
 
-		return (Variable[]) matches.toArray(new Variable[matches.size()]);
+		return matches.toArray(new Variable[matches.size()]);
 	}
 
 	/**
@@ -866,16 +869,16 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	 * @return all local variables matching <code>clazz</code>
 	 */
 	public Variable[] findFieldVariables(String clazz) {
-		List matches= new ArrayList();
+		List<Variable> matches= new ArrayList<Variable>();
 
-		for (ListIterator iterator= fFields.listIterator(fFields.size()); iterator.hasPrevious();) {
-			Variable localVariable= (Variable)iterator.previous();
+		for (ListIterator<Variable> iterator= fFields.listIterator(fFields.size()); iterator.hasPrevious();) {
+			Variable localVariable= iterator.previous();
 
 			if (localVariable.isSubtypeOf(clazz))
 				matches.add(localVariable);
 		}
 
-		return (Variable[]) matches.toArray(new Variable[matches.size()]);
+		return matches.toArray(new Variable[matches.size()]);
 	}
 
 	/**
@@ -887,16 +890,16 @@ final class CompilationUnitCompletion extends CompletionRequestor {
 	 * @return all local <code>Iterable</code>s and arrays
 	 */
 	public Variable[] findLocalIterables() {
-		List iterables= new ArrayList();
+		List<Variable> iterables= new ArrayList<Variable>();
 
-		for (ListIterator iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
-			Variable localVariable= (Variable) iterator.previous();
+		for (ListIterator<Variable> iterator= fLocalVariables.listIterator(fLocalVariables.size()); iterator.hasPrevious();) {
+			Variable localVariable= iterator.previous();
 
 			if (localVariable.isArray() || localVariable.isIterable())
 				iterables.add(localVariable);
 		}
 
-		return (Variable[]) iterables.toArray(new Variable[iterables.size()]);
+		return iterables.toArray(new Variable[iterables.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitContextType.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitContextType.java
index 8f6d875..0a2e30f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitContextType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitContextType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.jdt.internal.corext.template.java;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.Position;
 import org.eclipse.jface.text.templates.GlobalTemplateVariables;
+import org.eclipse.jface.text.templates.SimpleTemplateVariableResolver;
 import org.eclipse.jface.text.templates.TemplateContext;
 import org.eclipse.jface.text.templates.TemplateContextType;
 import org.eclipse.jface.text.templates.TemplateException;
@@ -39,7 +40,8 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 	 	public ReturnType() {
 	 	 	super("return_type", JavaTemplateMessages.CompilationUnitContextType_variable_description_return_type);  //$NON-NLS-1$
 	 	}
-	 	protected String resolve(TemplateContext context) {
+	 	@Override
+		protected String resolve(TemplateContext context) {
 			IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD);
 			if (element == null)
 				return null;
@@ -56,6 +58,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 		public File() {
 			super("file", JavaTemplateMessages.CompilationUnitContextType_variable_description_file);  //$NON-NLS-1$
 		}
+		@Override
 		protected String resolve(TemplateContext context) {
 			ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit();
 
@@ -65,6 +68,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 		/*
 		 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext)
 		 */
+		@Override
 		protected boolean isUnambiguous(TemplateContext context) {
 			return resolve(context) != null;
 		}
@@ -75,6 +79,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 			super("primary_type_name", JavaTemplateMessages.CompilationUnitContextType_variable_description_primary_type_name);  //$NON-NLS-1$
 
 		}
+		@Override
 		protected String resolve(TemplateContext context) {
 			ICompilationUnit unit= ((CompilationUnitContext) context).getCompilationUnit();
 			if (unit == null)
@@ -85,6 +90,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 		/*
 		 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext)
 		 */
+		@Override
 		protected boolean isUnambiguous(TemplateContext context) {
 			return resolve(context) != null;
 		}
@@ -97,6 +103,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 			super(name, description);
 			fElementType= elementType;
 		}
+		@Override
 		protected String resolve(TemplateContext context) {
 			IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(fElementType);
 			if (element instanceof IType)
@@ -107,6 +114,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 		/*
 		 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#isUnambiguous(org.eclipse.jface.text.templates.TemplateContext)
 		 */
+		@Override
 		protected boolean isUnambiguous(TemplateContext context) {
 			return resolve(context) != null;
 		}
@@ -156,6 +164,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 		public Arguments() {
 			super("enclosing_method_arguments", JavaTemplateMessages.CompilationUnitContextType_variable_description_enclosing_method_arguments);  //$NON-NLS-1$
 		}
+		@Override
 		protected String resolve(TemplateContext context) {
 			IJavaElement element= ((CompilationUnitContext) context).findEnclosingElement(IJavaElement.METHOD);
 			if (element == null)
@@ -192,6 +201,33 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 	}
 */
 
+	/**
+	 * The line selection variable determines templates that work on selected
+	 * lines.
+	 * <p>
+	 * This class contains additional description that tells about the
+	 * 'Source > Surround With > ...' menu.</p>
+	 * 
+	 * @since 3.7
+	 * @see org.eclipse.jface.text.templates.GlobalTemplateVariables.LineSelection
+	 */
+	protected static class SurroundWithLineSelection extends SimpleTemplateVariableResolver {
+	
+		/**
+		 * Creates a new line selection variable
+		 */
+		public SurroundWithLineSelection() {
+			super(org.eclipse.jface.text.templates.GlobalTemplateVariables.LineSelection.NAME, JavaTemplateMessages.CompilationUnitContextType_variable_description_line_selection);
+		}
+		@Override
+		protected String resolve(TemplateContext context) {
+			String selection= context.getVariable(org.eclipse.jface.text.templates.GlobalTemplateVariables.SELECTION);
+			if (selection == null)
+				return ""; //$NON-NLS-1$
+			return selection;
+		}
+	}
+
 	/*
 	 * @see ContextType#ContextType(String)
 	 */
@@ -208,6 +244,7 @@ public abstract class CompilationUnitContextType extends TemplateContextType {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.template.ContextType#validateVariables(org.eclipse.jdt.internal.corext.template.TemplateVariable[])
 	 */
+	@Override
 	protected void validateVariables(TemplateVariable[] variables) throws TemplateException {
 		// check for multiple cursor variables
 		for (int i= 0; i < variables.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ElementTypeResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ElementTypeResolver.java
index 05d8e1b..acd8b0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ElementTypeResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ElementTypeResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,20 +30,21 @@ public class ElementTypeResolver extends TemplateVariableResolver {
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 * @since 3.3
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
 		if (!(variable instanceof MultiVariable)) {
 			super.resolve(variable, context);
 			return;
 		}
 		MultiVariable mv= (MultiVariable) variable;
-		List params= variable.getVariableType().getParams();
+		List<String> params= variable.getVariableType().getParams();
 		if (params.isEmpty()) {
 			super.resolve(variable, context);
 			return;
 		}
 
 		JavaContext jc= (JavaContext) context;
-		String reference= (String) params.get(0);
+		String reference= params.get(0);
 		TemplateVariable refVar= jc.getTemplateVariable(reference);
 		if (refVar instanceof JavaVariable) {
 			JavaVariable jvar= (JavaVariable) refVar;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ExceptionVariableNameResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ExceptionVariableNameResolver.java
index 32bc5be..c32a2eb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ExceptionVariableNameResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ExceptionVariableNameResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
  */
 public class ExceptionVariableNameResolver extends TemplateVariableResolver {
 
+	@Override
 	protected String[] resolveAll(TemplateContext context) {
 		if (context instanceof JavaContext) {
 			JavaContext jc= (JavaContext) context;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/FieldResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/FieldResolver.java
index 1452678..3b66ea4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/FieldResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/FieldResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class FieldResolver extends AbstractVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.template.java.AbstractVariableResolver#getVisibleVariables(java.lang.String, org.eclipse.jdt.internal.corext.template.java.JavaContext)
 	 */
+	@Override
 	protected Variable[] getVisibleVariables(String type, JavaContext context) {
 		return context.getFields(type);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java
index c631161..10193f8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,16 +38,17 @@ public class ImportsResolver extends TemplateVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
 		variable.setUnambiguous(true);
 		variable.setValue(""); //$NON-NLS-1$
 
 		if (context instanceof JavaContext) {
 			JavaContext jc= (JavaContext) context;
-			List params= variable.getVariableType().getParams();
+			List<String> params= variable.getVariableType().getParams();
 			if (params.size() > 0) {
-				for (Iterator iterator= params.iterator(); iterator.hasNext();) {
-					String typeName= (String) iterator.next();
+				for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) {
+					String typeName= iterator.next();
 					jc.addImport(typeName);
 				}
 			}
@@ -59,6 +60,7 @@ public class ImportsResolver extends TemplateVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolveAll(org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	protected String[] resolveAll(TemplateContext context) {
 		return new String[0];
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContext.java
index e8bcd3c..d55dd94 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,11 +98,11 @@ public class JavaContext extends CompilationUnitContext {
 	 * The list of used local names.
 	 * @since 3.3
 	 */
-	private Set fUsedNames= new HashSet();
-	private Map fVariables= new HashMap();
+	private Set<String> fUsedNames= new HashSet<String>();
+	private Map<String, MultiVariable> fVariables= new HashMap<String, MultiVariable>();
 	private ImportRewrite fImportRewrite;
 
-	private Set fCompatibleContextTypeIds;
+	private Set<String> fCompatibleContextTypeIds;
 
 	/**
 	 * Creates a java template context.
@@ -137,7 +137,7 @@ public class JavaContext extends CompilationUnitContext {
 	 */
 	public void addCompatibleContextType(String contextTypeId) {
 		if (fCompatibleContextTypeIds == null)
-			fCompatibleContextTypeIds= new HashSet();
+			fCompatibleContextTypeIds= new HashSet<String>();
 		fCompatibleContextTypeIds.add(contextTypeId);
 	}
 
@@ -163,6 +163,7 @@ public class JavaContext extends CompilationUnitContext {
 	/*
 	 * @see TemplateContext#evaluate(Template template)
 	 */
+	@Override
 	public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException {
 		clear();
 
@@ -170,6 +171,7 @@ public class JavaContext extends CompilationUnitContext {
 			throw new TemplateException(JavaTemplateMessages.Context_error_cannot_evaluate);
 
 		TemplateTranslator translator= new TemplateTranslator() {
+			@Override
 			protected TemplateVariable createVariable(TemplateVariableType type, String name, int[] offsets) {
 //				TemplateVariableResolver resolver= getContextType().getResolver(type.getName());
 //				return resolver.createVariable();
@@ -205,6 +207,7 @@ public class JavaContext extends CompilationUnitContext {
 	/*
 	 * @see TemplateContext#canEvaluate(Template templates)
 	 */
+	@Override
 	public boolean canEvaluate(Template template) {
 		if (!hasCompatibleContextType(template))
 			return false;
@@ -224,9 +227,9 @@ public class JavaContext extends CompilationUnitContext {
 		if (fCompatibleContextTypeIds == null)
 			return false;
 
-		Iterator iter= fCompatibleContextTypeIds.iterator();
+		Iterator<String> iter= fCompatibleContextTypeIds.iterator();
 		while (iter.hasNext()) {
-			if (template.matches(key, (String)iter.next()))
+			if (template.matches(key, iter.next()))
 				return true;
 		}
 
@@ -236,6 +239,7 @@ public class JavaContext extends CompilationUnitContext {
 	/*
 	 * @see DocumentTemplateContext#getCompletionPosition();
 	 */
+	@Override
 	public int getStart() {
 
 		if (fIsManaged && getCompletionLength() > 0)
@@ -266,6 +270,7 @@ public class JavaContext extends CompilationUnitContext {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getEnd()
 	 */
+	@Override
 	public int getEnd() {
 
 		if (fIsManaged || getCompletionLength() == 0)
@@ -290,6 +295,7 @@ public class JavaContext extends CompilationUnitContext {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getKey()
 	 */
+	@Override
 	public String getKey() {
 
 		if (getCompletionLength() == 0)
@@ -378,9 +384,9 @@ public class JavaContext extends CompilationUnitContext {
 	 * @since 3.3
 	 */
 	private void arrange(Variable[] variables) {
-		Arrays.sort(variables, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				return rank((Variable) o1) - rank((Variable) o2);
+		Arrays.sort(variables, new Comparator<Variable>() {
+			public int compare(Variable o1, Variable o2) {
+				return rank(o1) - rank(o2);
 			}
 
 			private int rank(Variable l) {
@@ -652,20 +658,20 @@ public class JavaContext extends CompilationUnitContext {
 			typeKinds= ASTResolving.getPossibleTypeKinds(nameNode, is50OrHigher);
 		}
 
-		ArrayList typeInfos= new ArrayList();
+		ArrayList<TypeNameMatch> typeInfos= new ArrayList<TypeNameMatch>();
 		TypeNameMatchCollector requestor= new TypeNameMatchCollector(typeInfos);
 		new SearchEngine().searchAllTypeNames(null, 0, simpleTypeName.toCharArray(), SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE, getSearchForConstant(typeKinds), searchScope, requestor, IJavaSearchConstants.FORCE_IMMEDIATE_SEARCH, monitor);
 
-		ArrayList typeRefsFound= new ArrayList(typeInfos.size());
+		ArrayList<TypeNameMatch> typeRefsFound= new ArrayList<TypeNameMatch>(typeInfos.size());
 		for (int i= 0, len= typeInfos.size(); i < len; i++) {
-			TypeNameMatch curr= (TypeNameMatch) typeInfos.get(i);
+			TypeNameMatch curr= typeInfos.get(i);
 			if (curr.getPackageName().length() > 0) { // do not suggest imports from the default package
 				if (isOfKind(curr, typeKinds, is50OrHigher) && isVisible(curr, cu)) {
 					typeRefsFound.add(curr);
 				}
 			}
 		}
-		return (TypeNameMatch[]) typeRefsFound.toArray(new TypeNameMatch[typeRefsFound.size()]);
+		return typeRefsFound.toArray(new TypeNameMatch[typeRefsFound.size()]);
 	}
 
 	private int getSearchForConstant(int typeKinds) {
@@ -742,7 +748,7 @@ public class JavaContext extends CompilationUnitContext {
 	}
 
 	TemplateVariable getTemplateVariable(String name) {
-		TemplateVariable variable= (TemplateVariable) fVariables.get(name);
+		TemplateVariable variable= fVariables.get(name);
 		if (variable != null && !variable.isResolved())
 			getContextType().resolve(variable, this);
 		return variable;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextType.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextType.java
index 9511e02..3e69ccd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class JavaContextType extends AbstractJavaContextType {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.template.java.AbstractJavaContextType#initializeContext(org.eclipse.jdt.internal.corext.template.java.JavaContext)
 	 */
+	@Override
 	protected void initializeContext(JavaContext context) {
 		if (!getId().equals(JavaContextType.ID_ALL)) { // a specific context must also allow the templates that work everywhere
 			context.addCompatibleContextType(JavaContextType.ID_ALL);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContext.java
index 300cc4c..3972715 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,7 @@ public class JavaDocContext extends CompilationUnitContext {
 	/*
 	 * @see TemplateContext#canEvaluate(Template templates)
 	 */
+	@Override
 	public boolean canEvaluate(Template template) {
 		String key= getKey();
 
@@ -86,6 +87,7 @@ public class JavaDocContext extends CompilationUnitContext {
 	/*
 	 * @see DocumentTemplateContext#getStart()
 	 */
+	@Override
 	public int getStart() {
 		if (fIsManaged && getCompletionLength() > 0)
 			return super.getStart();
@@ -140,6 +142,7 @@ public class JavaDocContext extends CompilationUnitContext {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getEnd()
 	 */
+	@Override
 	public int getEnd() {
 
 		if (fIsManaged || getCompletionLength() == 0)
@@ -164,6 +167,7 @@ public class JavaDocContext extends CompilationUnitContext {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getKey()
 	 */
+	@Override
 	public String getKey() {
 
 		if (getCompletionLength() == 0)
@@ -186,6 +190,7 @@ public class JavaDocContext extends CompilationUnitContext {
 	/*
 	 * @see TemplateContext#evaluate(Template)
 	 */
+	@Override
 	public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException {
 		TemplateTranslator translator= new TemplateTranslator();
 		TemplateBuffer buffer= translator.translate(template);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContextType.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContextType.java
index ce50c44..b7cf5fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContextType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaDocContextType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,8 @@ package org.eclipse.jdt.internal.corext.template.java;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.Position;
 import org.eclipse.jface.text.templates.GlobalTemplateVariables;
+import org.eclipse.jface.text.templates.SimpleTemplateVariableResolver;
+import org.eclipse.jface.text.templates.TemplateContext;
 
 import org.eclipse.jdt.core.ICompilationUnit;
 
@@ -23,6 +25,33 @@ import org.eclipse.jdt.core.ICompilationUnit;
 public class JavaDocContextType extends CompilationUnitContextType {
 
 	/**
+	 * The word selection variable determines templates that work on a full
+	 * lines selection.
+	 * <p>
+	 * This class contains additional description that tells about the
+	 * 'Source > Surround With > ...' menu.</p>
+	 * 
+	 * @since 3.7
+	 * @see org.eclipse.jface.text.templates.GlobalTemplateVariables.WordSelection
+	 */
+	protected static class SurroundWithWordSelection extends SimpleTemplateVariableResolver {
+	
+		/**
+		 * Creates a new word selection variable
+		 */
+		public SurroundWithWordSelection() {
+			super(org.eclipse.jface.text.templates.GlobalTemplateVariables.WordSelection.NAME, JavaTemplateMessages.JavaDocContextType_variable_description_word_selection);
+		}
+		@Override
+		protected String resolve(TemplateContext context) {
+			String selection= context.getVariable(org.eclipse.jface.text.templates.GlobalTemplateVariables.SELECTION);
+			if (selection == null)
+				return ""; //$NON-NLS-1$
+			return selection;
+		}
+	}
+
+	/**
 	 * The id under which this context type is registered
 	 */
 	public static final String ID= "javadoc"; //$NON-NLS-1$
@@ -34,8 +63,8 @@ public class JavaDocContextType extends CompilationUnitContextType {
 
 		// global
 		addResolver(new GlobalTemplateVariables.Cursor());
-		addResolver(new GlobalTemplateVariables.LineSelection());
-		addResolver(new GlobalTemplateVariables.WordSelection());
+		addResolver(new SurroundWithLineSelection());
+		addResolver(new SurroundWithWordSelection());
 		addResolver(new GlobalTemplateVariables.Dollar());
 		addResolver(new GlobalTemplateVariables.Date());
 		addResolver(new GlobalTemplateVariables.Year());
@@ -56,6 +85,7 @@ public class JavaDocContextType extends CompilationUnitContextType {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, int, int, org.eclipse.jdt.core.ICompilationUnit)
 	 */
+	@Override
 	public CompilationUnitContext createContext(IDocument document, int offset, int length, ICompilationUnit compilationUnit) {
 		return new JavaDocContext(this, document, offset, length, compilationUnit);
 	}
@@ -63,6 +93,7 @@ public class JavaDocContextType extends CompilationUnitContextType {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.Position, org.eclipse.jdt.core.ICompilationUnit)
 	 */
+	@Override
 	public CompilationUnitContext createContext(IDocument document, Position completionPosition, ICompilationUnit compilationUnit) {
 		return new JavaDocContext(this, document, completionPosition, compilationUnit);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java
index 6b2ea04..0c3d1e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,6 @@ import org.eclipse.jface.text.BadPositionCategoryException;
 import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.Position;
 import org.eclipse.jface.text.TypedPosition;
 import org.eclipse.jface.text.rules.FastPartitioner;
 import org.eclipse.jface.text.source.LineRange;
@@ -74,11 +73,11 @@ public class JavaFormatter {
 		private static final String CATEGORY= "__template_variables"; //$NON-NLS-1$
 		private Document fDocument;
 		private final TemplateBuffer fBuffer;
-		private List fPositions;
+		private List<TypedPosition> fPositions;
 
 		/**
 		 * Creates a new tracker.
-		 *
+		 * 
 		 * @param buffer the buffer to track
 		 * @throws MalformedTreeException
 		 * @throws BadLocationException
@@ -149,11 +148,11 @@ public class JavaFormatter {
 			return fBuffer;
 		}
 
-		private List createRangeMarkers(TemplateVariable[] variables, IDocument document) throws MalformedTreeException, BadLocationException {
-			Map markerToOriginal= new HashMap();
+		private List<TypedPosition> createRangeMarkers(TemplateVariable[] variables, IDocument document) throws MalformedTreeException, BadLocationException {
+			Map<ReplaceEdit, String> markerToOriginal= new HashMap<ReplaceEdit, String>();
 
 			MultiTextEdit root= new MultiTextEdit(0, document.getLength());
-			List edits= new ArrayList();
+			List<TextEdit> edits= new ArrayList<TextEdit>();
 			boolean hasModifications= false;
 			for (int i= 0; i != variables.length; i++) {
 				final TemplateVariable variable= variables[i];
@@ -184,12 +183,12 @@ public class JavaFormatter {
 				root.apply(document, TextEdit.UPDATE_REGIONS);
 			}
 
-			List positions= new ArrayList();
-			for (Iterator it= edits.iterator(); it.hasNext();) {
-				TextEdit edit= (TextEdit) it.next();
+			List<TypedPosition> positions= new ArrayList<TypedPosition>();
+			for (Iterator<TextEdit> it= edits.iterator(); it.hasNext();) {
+				TextEdit edit= it.next();
 				try {
 					// abuse TypedPosition to piggy back the original contents of the position
-					final TypedPosition pos= new TypedPosition(edit.getOffset(), edit.getLength(), (String) markerToOriginal.get(edit));
+					final TypedPosition pos= new TypedPosition(edit.getOffset(), edit.getLength(), markerToOriginal.get(edit));
 					document.addPosition(CATEGORY, pos);
 					positions.add(pos);
 				} catch (BadPositionCategoryException x) {
@@ -205,11 +204,11 @@ public class JavaFormatter {
 			return length == 0 || Character.isWhitespace(value.charAt(0)) || Character.isWhitespace(value.charAt(length - 1));
 		}
 
-		private void removeRangeMarkers(List positions, IDocument document, TemplateVariable[] variables) throws MalformedTreeException, BadLocationException, BadPositionCategoryException {
+		private void removeRangeMarkers(List<TypedPosition> positions, IDocument document, TemplateVariable[] variables) throws MalformedTreeException, BadLocationException, BadPositionCategoryException {
 
 			// revert previous changes
-			for (Iterator it= positions.iterator(); it.hasNext();) {
-				TypedPosition position= (TypedPosition) it.next();
+			for (Iterator<TypedPosition> it= positions.iterator(); it.hasNext();) {
+				TypedPosition position= it.next();
 				// remove and re-add in order to not confuse ExclusivePositionUpdater
 				document.removePosition(CATEGORY, position);
 				final String original= position.getType();
@@ -220,13 +219,13 @@ public class JavaFormatter {
 				document.addPosition(position);
 			}
 
-			Iterator it= positions.iterator();
+			Iterator<TypedPosition> it= positions.iterator();
 			for (int i= 0; i != variables.length; i++) {
 				TemplateVariable variable= variables[i];
 
 				int[] offsets= new int[variable.getOffsets().length];
 				for (int j= 0; j != offsets.length; j++)
-					offsets[j]= ((Position) it.next()).getOffset();
+					offsets[j]= it.next().getOffset();
 
 				variable.setOffsets(offsets);
 			}
@@ -262,7 +261,7 @@ public class JavaFormatter {
 
 			internalFormat(document, context);
 			convertLineDelimiters(document);
-			if (!isReplacedAreaEmpty(context))
+			if (!(context instanceof JavaDocContext) && !isReplacedAreaEmpty(context))
 				trimStart(document);
 
 			tracker.updateBuffer();
@@ -288,7 +287,8 @@ public class JavaFormatter {
 				// ignore and indent
 			}
 		}
-		indent(document);
+		if (!(context instanceof JavaDocContext))
+			indent(document);
 	}
 
 	private void convertLineDelimiters(IDocument document) throws BadLocationException {
@@ -335,7 +335,7 @@ public class JavaFormatter {
 	}
 
 	private void format(IDocument doc, CompilationUnitContext context) throws BadLocationException {
-		Map options;
+		Map<String, String> options;
 		IJavaProject project= context.getJavaProject();
 		if (project != null)
 			options= project.getOptions(true);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.java
index 24dce7b..68ffc6e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ final class JavaTemplateMessages extends NLS {
 	public static String CompilationUnitContextType_variable_description_enclosing_package;
 	public static String CompilationUnitContextType_variable_description_enclosing_project;
 	public static String CompilationUnitContextType_variable_description_enclosing_method_arguments;
+	public static String CompilationUnitContextType_variable_description_line_selection;
 	public static String CompilationUnitContextType_variable_description_return_type;
 	public static String JavaContextType_variable_description_array;
 	public static String JavaContextType_variable_description_array_type;
@@ -45,6 +46,7 @@ final class JavaTemplateMessages extends NLS {
 	public static String JavaContext_error_title;
 	public static String JavaContext_error_message;
 	public static String JavaContext_unexpected_error_message;
+	public static String JavaDocContextType_variable_description_word_selection;
 	public static String CodeTemplateContextType_variable_description_todo;
 	public static String CodeTemplateContextType_variable_description_packdeclaration;
 	public static String CodeTemplateContextType_variable_description_typedeclaration;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.properties
index db5a5e1..085c59f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.properties	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaTemplateMessages.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ CompilationUnitContextType_variable_description_enclosing_type=Enclosing type na
 CompilationUnitContextType_variable_description_enclosing_package=Enclosing package name
 CompilationUnitContextType_variable_description_enclosing_project=Enclosing project name
 CompilationUnitContextType_variable_description_enclosing_method_arguments=Argument names of enclosing method
+CompilationUnitContextType_variable_description_line_selection=The selected lines<br><br>Templates that contain this variable will also be shown in the 'Source > Surround With > ...' menu.
 CompilationUnitContextType_variable_description_return_type=Enclosing method return type
 
 JavaContextType_variable_description_array=A proposal for an array
@@ -35,6 +36,7 @@ JavaContextType_variable_description_todo=Todo task tag
 JavaContext_error_title=Template Error
 JavaContext_error_message=Template file incomplete or has errors.  You can load the default templates from the template preferences page (Java>Templates).
 JavaContext_unexpected_error_message=An unexpected error occurred while evaluating a template. See the error log for details.
+JavaDocContextType_variable_description_word_selection=The selected word<br><br>Javadoc templates that contain this variable will also be shown in the 'Source > Surround With > ...' menu.
 
 CodeTemplateContextType_variable_description_todo=Todo task tag
 CodeTemplateContextType_variable_description_packdeclaration=Package declaration of the new type
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaVariable.java
index 518b006..f28f8e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public final class JavaVariable extends MultiVariable {
 	 * @see org.eclipse.jdt.internal.ui.text.template.contentassist.MultiVariable#toString(java.lang.Object)
 	 * @since 3.3
 	 */
+	@Override
 	public String toString(Object object) {
 		if (object instanceof Variable)
 			return ((Variable) object).getName();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java
index abafd7b..7a263ea 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ public class LinkResolver extends TemplateVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
 
 		variable.setUnambiguous(false);
@@ -49,12 +50,12 @@ public class LinkResolver extends TemplateVariableResolver {
 			JavaContext jc= (JavaContext) context;
 			JavaVariable jv= (JavaVariable) variable;
 
-			List params= variable.getVariableType().getParams();
+			List<String> params= variable.getVariableType().getParams();
 			if (params.size() > 0) {
 				fProposals= new String[params.size()];
 				int i= 0;
-				for (Iterator iterator= params.iterator(); iterator.hasNext();) {
-					String param= (String) iterator.next();
+				for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) {
+					String param= iterator.next();
 					fProposals[i]= param;
 					i++;
 				}
@@ -74,6 +75,7 @@ public class LinkResolver extends TemplateVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolveAll(org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	protected String[] resolveAll(TemplateContext context) {
 		return fProposals;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LocalVarResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LocalVarResolver.java
index a990f97..b3e819b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LocalVarResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LocalVarResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class LocalVarResolver extends AbstractVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.template.java.AbstractVariableResolver#getVisibleVariables(java.lang.String, org.eclipse.jdt.internal.corext.template.java.JavaContext)
 	 */
+	@Override
 	protected Variable[] getVisibleVariables(String type, JavaContext context) {
 		return context.getLocalVariables(type);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/NameResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/NameResolver.java
index 51e1a6e..b65dc5f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/NameResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/NameResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,13 +45,14 @@ public class NameResolver extends TemplateVariableResolver {
 	/*
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
-		List params= variable.getVariableType().getParams();
+		List<String> params= variable.getVariableType().getParams();
 		String param;
 		if (params.size() == 0)
 			param= fDefaultType;
 		else
-			param= (String) params.get(0);
+			param= params.get(0);
 		JavaContext jc= (JavaContext) context;
 		TemplateVariable ref= jc.getTemplateVariable(param);
 		MultiVariable mv= (MultiVariable) variable;
@@ -79,7 +80,7 @@ public class NameResolver extends TemplateVariableResolver {
 	}
 
 	private Object[] flatten(Object[][] allValues) {
-		List flattened= new ArrayList(allValues.length);
+		List<Object> flattened= new ArrayList<Object>(allValues.length);
 		for (int i= 0; i < allValues.length; i++) {
 			flattened.addAll(Arrays.asList(allValues[i]));
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/SWTContextType.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/SWTContextType.java
index 0c1fce8..7e4294c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/SWTContextType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/SWTContextType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class SWTContextType extends AbstractJavaContextType {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.template.java.AbstractJavaContextType#initializeContext(org.eclipse.jdt.internal.corext.template.java.JavaContext)
 	 */
+	@Override
 	protected void initializeContext(JavaContext context) {
 		if (!getId().equals(SWTContextType.ID_ALL)) { // a specific context must also allow the templates that work everywhere
 			context.addCompatibleContextType(SWTContextType.ID_ALL);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java
index d5ddd61..ad7d2b6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,16 +38,17 @@ public class StaticImportResolver extends TemplateVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
 		variable.setUnambiguous(true);
 		variable.setValue(""); //$NON-NLS-1$
 
 		if (context instanceof JavaContext) {
 			JavaContext jc= (JavaContext) context;
-			List params= variable.getVariableType().getParams();
+			List<String> params= variable.getVariableType().getParams();
 			if (params.size() > 0) {
-				for (Iterator iterator= params.iterator(); iterator.hasNext();) {
-					String qualifiedMemberName= (String) iterator.next();
+				for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) {
+					String qualifiedMemberName= iterator.next();
 					jc.addStaticImport(qualifiedMemberName);
 				}
 			}
@@ -59,6 +60,7 @@ public class StaticImportResolver extends TemplateVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolveAll(org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	protected String[] resolveAll(TemplateContext context) {
 		return new String[0];
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java
index d916a9f..0ab71b7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,7 +63,7 @@ public class TemplateSet {
 	private static final String DESCRIPTION_ATTRIBUTE= "description"; //$NON-NLS-1$
 	private static final String CONTEXT_ATTRIBUTE= "context"; //$NON-NLS-1$
 
-	private List fTemplates= new ArrayList();
+	private List<Template> fTemplates= new ArrayList<Template>();
 	private String fTemplateTag;
 
 	private static final int TEMPLATE_PARSE_EXCEPTION= 10002;
@@ -239,7 +239,7 @@ public class TemplateSet {
 			document.appendChild(root);
 
 			for (int i= 0; i != fTemplates.size(); i++) {
-				Template template= (Template) fTemplates.get(i);
+				Template template= fTemplates.get(i);
 
 				Node node= document.createElement(getTemplateTag());
 				root.appendChild(node);
@@ -309,8 +309,8 @@ public class TemplateSet {
 	}
 
 	private boolean exists(Template template) {
-		for (Iterator iterator = fTemplates.iterator(); iterator.hasNext();) {
-			Template anotherTemplate = (Template) iterator.next();
+		for (Iterator<Template> iterator = fTemplates.iterator(); iterator.hasNext();) {
+			Template anotherTemplate = iterator.next();
 
 			if (template.equals(anotherTemplate))
 				return true;
@@ -341,7 +341,7 @@ public class TemplateSet {
 	 * @return all templates
 	 */
 	public Template[] getTemplates() {
-		return (Template[]) fTemplates.toArray(new Template[fTemplates.size()]);
+		return fTemplates.toArray(new Template[fTemplates.size()]);
 	}
 
 	/**
@@ -351,14 +351,14 @@ public class TemplateSet {
 	 * @return the templates with the given name
 	 */
 	public Template[] getTemplates(String name) {
-		ArrayList res= new ArrayList();
-		for (Iterator iterator= fTemplates.iterator(); iterator.hasNext();) {
-			Template curr= (Template) iterator.next();
+		ArrayList<Template> res= new ArrayList<Template>();
+		for (Iterator<Template> iterator= fTemplates.iterator(); iterator.hasNext();) {
+			Template curr= iterator.next();
 			if (curr.getName().equals(name)) {
 				res.add(curr);
 			}
 		}
-		return (Template[]) res.toArray(new Template[res.size()]);
+		return res.toArray(new Template[res.size()]);
 	}
 
 	/**
@@ -368,8 +368,8 @@ public class TemplateSet {
 	 * @return the first template with the given name
 	 */
 	public Template getFirstTemplate(String name) {
-		for (Iterator iterator= fTemplates.iterator(); iterator.hasNext();) {
-			Template curr= (Template) iterator.next();
+		for (Iterator<Template> iterator= fTemplates.iterator(); iterator.hasNext();) {
+			Template curr= iterator.next();
 			if (curr.getName().equals(name)) {
 				return curr;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeResolver.java
index c92442e..0816ab6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,13 +42,14 @@ public class TypeResolver extends TemplateVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
-		List params= variable.getVariableType().getParams();
+		List<String> params= variable.getVariableType().getParams();
 		String param;
 		if (params.size() == 0)
 			param= fDefaultType;
 		else
-			param= (String) params.get(0);
+			param= params.get(0);
 
 		JavaContext jc= (JavaContext) context;
 		MultiVariable mv= (MultiVariable) variable;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeVariableResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeVariableResolver.java
index 1a55260..cca7797 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeVariableResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TypeVariableResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,23 +36,24 @@ public class TypeVariableResolver extends TemplateVariableResolver {
 	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolve(org.eclipse.jface.text.templates.TemplateVariable, org.eclipse.jface.text.templates.TemplateContext)
 	 * @since 3.3
 	 */
+	@Override
 	public void resolve(TemplateVariable variable, TemplateContext context) {
 		if (!(variable instanceof MultiVariable)) {
 			super.resolve(variable, context);
 			return;
 		}
 		MultiVariable mv= (MultiVariable) variable;
-		List params= variable.getVariableType().getParams();
+		List<String> params= variable.getVariableType().getParams();
 		if (params.isEmpty()) {
 			super.resolve(variable, context);
 			return;
 		}
 
 		JavaContext jc= (JavaContext) context;
-		String reference= (String) params.get(0);
+		String reference= params.get(0);
 		int index= 0;
 		if (params.size() > 1) {
-			String indexParam= (String) params.get(1);
+			String indexParam= params.get(1);
 			try {
 				index= Integer.parseInt(indexParam);
 			} catch (NumberFormatException x) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/VarResolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/VarResolver.java
index 6c61c1b..ece6bdb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/VarResolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/VarResolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class VarResolver extends AbstractVariableResolver {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.template.java.AbstractVariableResolver#getVisibleVariables(java.lang.String, org.eclipse.jdt.internal.corext.template.java.JavaContext)
 	 */
+	@Override
 	protected Variable[] getVisibleVariables(String type, JavaContext context) {
 		Variable[] localVariables= context.getLocalVariables(type);
 		Variable[] fields= context.getFields(type);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CodeFormatterUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CodeFormatterUtil.java
index 3181eab..f73a580 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CodeFormatterUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CodeFormatterUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,7 +46,7 @@ public class CodeFormatterUtil {
 	 * @return the indent string
 	 */
 	public static String createIndentString(int indentationUnits, IJavaProject project) {
-		Map options= project != null ? project.getOptions(true) : JavaCore.getOptions();
+		Map<String, String> options= project != null ? project.getOptions(true) : JavaCore.getOptions();
 		return ToolFactory.createCodeFormatter(options).createIndentationString(indentationUnits);
 	}
 
@@ -150,11 +150,11 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param project
 	 *        The project from which to retrieve the formatter options from
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return the formatted source string
 	 */
 	public static String format(int kind, String source, int indentationLevel, String lineSeparator, IJavaProject project) {
-		Map options= project != null ? project.getOptions(true) : null;
+		Map<String, String> options= project != null ? project.getOptions(true) : null;
 		return format(kind, source, indentationLevel, lineSeparator, options);
 	}
 
@@ -174,11 +174,11 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param options
 	 *        The options map to use for formatting with the default code formatter.
-	 *        Recognized options are documented on <code>JavaCore#getDefaultOptions()</code>.
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        Recognized options are documented on {@link JavaCore#getDefaultOptions()}.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return the formatted source string
 	 */
-	public static String format(int kind, String source, int indentationLevel, String lineSeparator, Map options) {
+	public static String format(int kind, String source, int indentationLevel, String lineSeparator, Map<String, String> options) {
 		TextEdit edit= format2(kind, source, indentationLevel, lineSeparator, options);
 		if (edit == null) {
 			return source;
@@ -214,13 +214,13 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param options
 	 *        The options map to use for formatting with the default code formatter.
-	 *        Recognized options are documented on <code>JavaCore#getDefaultOptions()</code>.
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        Recognized options are documented on {@link JavaCore#getDefaultOptions()}.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return an TextEdit describing the changes required to format source
 	 * @throws IllegalArgumentException
 	 *         If the offset and length are not inside the string, a IllegalArgumentException is thrown.
 	 */
-	public static TextEdit format2(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator, Map options) {
+	public static TextEdit format2(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator, Map<String, String> options) {
 		if (offset < 0 || length < 0 || offset + length > source.length()) {
 			throw new IllegalArgumentException("offset or length outside of string. offset: " + offset + ", length: " + length + ", string size: " + source.length()); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 		}
@@ -244,13 +244,13 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param options
 	 *        The options map to use for formatting with the default code formatter.
-	 *        Recognized options are documented on <code>JavaCore#getDefaultOptions()</code>.
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        Recognized options are documented on {@link JavaCore#getDefaultOptions()}.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return an TextEdit describing the changes required to format source
 	 * @throws IllegalArgumentException
 	 *         If the offset and length are not inside the string, a IllegalArgumentException is thrown.
 	 */
-	public static TextEdit format2(int kind, String source, int indentationLevel, String lineSeparator, Map options) {
+	public static TextEdit format2(int kind, String source, int indentationLevel, String lineSeparator, Map<String, String> options) {
 		return format2(kind, source, 0, source.length(), indentationLevel, lineSeparator, options);
 	}
 
@@ -275,13 +275,13 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param options
 	 *        The options map to use for formatting with the default code formatter.
-	 *        Recognized options are documented on <code>JavaCore#getDefaultOptions()</code>.
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        Recognized options are documented on {@link JavaCore#getDefaultOptions()}.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return an TextEdit describing the changes required to format source
 	 * @throws IllegalArgumentException
 	 *         If the offset and length are not inside the string, a IllegalArgumentException is thrown.
 	 */
-	public static TextEdit reformat(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator, Map options) {
+	public static TextEdit reformat(int kind, String source, int offset, int length, int indentationLevel, String lineSeparator, Map<String, String> options) {
 		if (offset < 0 || length < 0 || offset + length > source.length()) {
 			throw new IllegalArgumentException("offset or length outside of string. offset: " + offset + ", length: " + length + ", string size: " + source.length()); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 		}
@@ -312,14 +312,14 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param options
 	 *        The options map to use for formatting with the default code formatter.
-	 *        Recognized options are documented on <code>JavaCore#getDefaultOptions()</code>.
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        Recognized options are documented on {@link JavaCore#getDefaultOptions()}.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return an TextEdit describing the changes required to format source
 	 * @throws IllegalArgumentException if there is no region, a region overlaps with another region, or the regions are not
 	 *         sorted in the ascending order.
 	 * @since 3.4
 	 */
-	public static TextEdit reformat(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator, Map options) {
+	public static TextEdit reformat(int kind, String source, IRegion[] regions, int indentationLevel, String lineSeparator, Map<String, String> options) {
 		return ToolFactory.createCodeFormatter(options, ToolFactory.M_FORMAT_EXISTING).format(kind, source, regions, indentationLevel, lineSeparator);
 	}
 
@@ -341,13 +341,13 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param options
 	 *        The options map to use for formatting with the default code formatter.
-	 *        Recognized options are documented on <code>JavaCore#getDefaultOptions()</code>.
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        Recognized options are documented on {@link JavaCore#getDefaultOptions()}.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return an TextEdit describing the changes required to format source
 	 * @throws IllegalArgumentException
 	 *         If the offset and length are not inside the string, a IllegalArgumentException is thrown.
 	 */
-	public static TextEdit reformat(int kind, String source, int indentationLevel, String lineSeparator, Map options) {
+	public static TextEdit reformat(int kind, String source, int indentationLevel, String lineSeparator, Map<String, String> options) {
 		return reformat(kind, source, 0, source.length(), indentationLevel, lineSeparator, options);
 	}
 
@@ -369,13 +369,13 @@ public class CodeFormatterUtil {
 	 *        if set to <code>null</code>, then the platform default one will be used.
 	 * @param options
 	 *        The options map to use for formatting with the default code formatter.
-	 *        Recognized options are documented on <code>JavaCore#getDefaultOptions()</code>.
-	 *        If set to <code>null</code>, then use the current settings from <code>JavaCore#getOptions</code>.
+	 *        Recognized options are documented on {@link JavaCore#getDefaultOptions()}.
+	 *        If set to <code>null</code>, then use the current settings from {@link JavaCore#getOptions()}.
 	 * @return an TextEdit describing the changes required to format source
 	 * @throws IllegalArgumentException
 	 *         If the offset and length are not inside the string, a IllegalArgumentException is thrown.
 	 */
-	public static TextEdit format2(ASTNode node, String source, int indentationLevel, String lineSeparator, Map options) {
+	public static TextEdit format2(ASTNode node, String source, int indentationLevel, String lineSeparator, Map<String, String> options) {
 		int code;
 		String prefix= ""; //$NON-NLS-1$
 		String suffix= ""; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CollectionsUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CollectionsUtil.java
new file mode 100644
index 0000000..1eccfc8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CollectionsUtil.java	
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.corext.util;
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+
+public class CollectionsUtil {
+	/**
+	 * Returns an array containing all of the elements in the given collection. This is a
+	 * compile-time type-safe alternative to {@link Collection#toArray(Object[])}.
+	 * 
+	 * @param collection the source collection
+	 * @param clazz the type of the array elements
+	 * @param <A> the type of the array elements
+	 * @return an array of type <code>A</code> containing all of the elements in the given
+	 *         collection
+	 * 
+	 * @throws NullPointerException if the specified collection or class is null
+	 * 
+	 * @see <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7023484">Sun bug 7023484</a>
+	 */
+	public static <A> A[] toArray(Collection<? extends A> collection, Class<A> clazz) {
+		Object array= Array.newInstance(clazz, collection.size());
+		@SuppressWarnings("unchecked")
+		A[] typedArray= collection.toArray((A[]) array);
+		return typedArray;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java
index b8939eb..6040ae2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,17 +40,9 @@ import org.eclipse.jdt.internal.corext.codemanipulation.AddDelegateMethodsOperat
  * type <code>T</code></li>
  * </ul>
  */
-public class DelegateEntryComparator implements Comparator {
+public class DelegateEntryComparator implements Comparator<DelegateEntry> {
 
-	public int compare(Object o1, Object o2) {
-		if (!(o1 instanceof DelegateEntry)) {
-			return 0;
-		}
-		if (!(o2 instanceof DelegateEntry)) {
-			return 0;
-		}
-		DelegateEntry firstEntry= (DelegateEntry)o1;
-		DelegateEntry secondEntry= (DelegateEntry)o2;
+	public int compare(DelegateEntry firstEntry, DelegateEntry secondEntry) {
 		IVariableBinding firstVariable= firstEntry.field;
 		IVariableBinding secondVariable= secondEntry.field;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java
index 7fc696b..7e67222 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,23 +71,24 @@ public abstract class History {
 		return new JavaUIException(JavaUIStatus.createError(IStatus.ERROR, message, t));
 	}
 
-	private final Map fHistory;
-	private final Hashtable fPositions;
+	private final Map<Object, Object> fHistory;
+	private final Hashtable<Object, Integer> fPositions;
 	private final String fFileName;
 	private final String fRootNodeName;
 	private final String fInfoNodeName;
 
 	public History(String fileName, String rootNodeName, String infoNodeName) {
-		fHistory= new LinkedHashMap(80, 0.75f, true) {
+		fHistory= new LinkedHashMap<Object, Object>(80, 0.75f, true) {
 			private static final long serialVersionUID= 1L;
-			protected boolean removeEldestEntry(Map.Entry eldest) {
+			@Override
+			protected boolean removeEldestEntry(Map.Entry<Object, Object> eldest) {
 				return size() > MAX_HISTORY_SIZE;
 			}
 		};
 		fFileName= fileName;
 		fRootNodeName= rootNodeName;
 		fInfoNodeName= infoNodeName;
-		fPositions= new Hashtable(MAX_HISTORY_SIZE);
+		fPositions= new Hashtable<Object, Integer>(MAX_HISTORY_SIZE);
 	}
 
 	public History(String fileName) {
@@ -136,7 +137,7 @@ public abstract class History {
 		if (!containsKey(key))
 			return 0.0f;
 
-		int pos= ((Integer)fPositions.get(key)).intValue() + 1;
+		int pos= fPositions.get(key).intValue() + 1;
 
 		//containsKey(key) implies fHistory.size()>0
 		return (float)pos / (float)fHistory.size();
@@ -154,7 +155,7 @@ public abstract class History {
 		if (!containsKey(key))
 			return -1;
 
-		return ((Integer)fPositions.get(key)).intValue();
+		return fPositions.get(key).intValue();
 	}
 
 	public synchronized void load() {
@@ -206,11 +207,11 @@ public abstract class History {
 		}
 	}
 
-	protected Set getKeys() {
+	protected Set<Object> getKeys() {
 		return fHistory.keySet();
 	}
 
-	protected Collection getValues() {
+	protected Collection<Object> getValues() {
 		return fHistory.values();
 	}
 
@@ -240,9 +241,9 @@ public abstract class History {
 
 	private void rebuildPositions() {
 		fPositions.clear();
-		Collection values= fHistory.values();
+		Collection<Object> values= fHistory.values();
 		int pos=0;
-		for (Iterator iter= values.iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter= values.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			fPositions.put(getKey(element), new Integer(pos));
 			pos++;
@@ -293,7 +294,7 @@ public abstract class History {
 			Element rootElement = document.createElement(fRootNodeName);
 			document.appendChild(rootElement);
 
-			Iterator values= getValues().iterator();
+			Iterator<Object> values= getValues().iterator();
 			while (values.hasNext()) {
 				Object object= values.next();
 				Element element= document.createElement(fInfoNodeName);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java
index dcd2548..79d65e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,12 +63,14 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 		return null;
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (!(obj instanceof JavaElementResourceMapping))
 			return false;
 		return getJavaElement().equals(((JavaElementResourceMapping)obj).getJavaElement());
 	}
 
+	@Override
 	public int hashCode() {
 		IJavaElement javaElement= getJavaElement();
 		if (javaElement == null)
@@ -77,10 +79,12 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 		return javaElement.hashCode();
 	}
 
+	@Override
 	public String getModelProviderId() {
 		return JavaModelProvider.JAVA_MODEL_PROVIDER_ID;
 	}
 
+	@Override
 	public boolean contains(ResourceMapping mapping) {
 		if (mapping instanceof JavaElementResourceMapping) {
 			JavaElementResourceMapping javaMapping = (JavaElementResourceMapping) mapping;
@@ -100,9 +104,11 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 			Assert.isNotNull(model);
 			fJavaModel= model;
 		}
+		@Override
 		public Object getModelObject() {
 			return fJavaModel;
 		}
+		@Override
 		public IProject[] getProjects() {
 			IJavaProject[] projects= null;
 			try {
@@ -117,6 +123,7 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 			}
 			return result;
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			IJavaProject[] projects= fJavaModel.getJavaProjects();
 			ResourceTraversal[] result= new ResourceTraversal[projects.length];
@@ -133,12 +140,15 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 			Assert.isNotNull(project);
 			fProject= project;
 		}
+		@Override
 		public Object getModelObject() {
 			return fProject;
 		}
+		@Override
 		public IProject[] getProjects() {
 			return new IProject[] {fProject.getProject() };
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			return new ResourceTraversal[] {
 				new ResourceTraversal(new IResource[] {fProject.getProject()}, IResource.DEPTH_INFINITE, 0)
@@ -152,12 +162,15 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 			Assert.isNotNull(root);
 			fRoot= root;
 		}
+		@Override
 		public Object getModelObject() {
 			return fRoot;
 		}
+		@Override
 		public IProject[] getProjects() {
 			return new IProject[] {fRoot.getJavaProject().getProject() };
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			return new ResourceTraversal[] {
 				new ResourceTraversal(new IResource[] {fRoot.getResource()}, IResource.DEPTH_INFINITE, 0)
@@ -171,12 +184,15 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 			Assert.isNotNull(pack);
 			fPack= pack;
 		}
+		@Override
 		public Object getModelObject() {
 			return fPack;
 		}
+		@Override
 		public IProject[] getProjects() {
 			return new IProject[] { fPack.getJavaProject().getProject() };
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			if (context instanceof RemoteResourceMappingContext) {
 				return getRemotePackageFragmentTraversals(fPack, (RemoteResourceMappingContext)context, monitor);
@@ -187,7 +203,7 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 	}
 
 	private static ResourceTraversal[] getPackageFragmentTraversals(IPackageFragment pack) throws CoreException {
-		ArrayList res= new ArrayList();
+		ArrayList<ResourceTraversal> res= new ArrayList<ResourceTraversal>();
 		IContainer container= (IContainer)pack.getResource();
 		
 		if (container != null) {
@@ -203,11 +219,11 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 			}
 		}
 	
-		return (ResourceTraversal[]) res.toArray(new ResourceTraversal[res.size()]);
+		return res.toArray(new ResourceTraversal[res.size()]);
 	}
 
 	private static ResourceTraversal[] getRemotePackageFragmentTraversals(IPackageFragment pack, RemoteResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
-		ArrayList res= new ArrayList();
+		ArrayList<ResourceTraversal> res= new ArrayList<ResourceTraversal>();
 		IContainer container= (IContainer)pack.getResource();
 		
 		if (container != null) {
@@ -226,7 +242,7 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 				}
 			}
 		}
-		return (ResourceTraversal[]) res.toArray(new ResourceTraversal[res.size()]);
+		return res.toArray(new ResourceTraversal[res.size()]);
 	}
 	
 	private static final class CompilationUnitResourceMapping extends JavaElementResourceMapping {
@@ -235,12 +251,15 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 			Assert.isNotNull(unit);
 			fUnit= unit;
 		}
+		@Override
 		public Object getModelObject() {
 			return fUnit;
 		}
+		@Override
 		public IProject[] getProjects() {
 			return new IProject[] {fUnit.getJavaProject().getProject() };
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			return new ResourceTraversal[] {
 				new ResourceTraversal(new IResource[] {fUnit.getResource()}, IResource.DEPTH_ONE, 0)
@@ -253,12 +272,15 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 		private ClassFileResourceMapping(IClassFile classFile) {
 			fClassFile= classFile;
 		}
+		@Override
 		public Object getModelObject() {
 			return fClassFile;
 		}
+		@Override
 		public IProject[] getProjects() {
 			return new IProject[] { fClassFile.getJavaProject().getProject() };
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			return new ResourceTraversal[] {
 				new ResourceTraversal(new IResource[] {fClassFile.getResource()}, IResource.DEPTH_ONE, 0)
@@ -271,18 +293,21 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 		private LogicalPackageResourceMapping(IPackageFragment[] fragments) {
 			fFragments= fragments;
 		}
+		@Override
 		public Object getModelObject() {
 			return fFragments;
 		}
+		@Override
 		public IProject[] getProjects() {
-			Set result= new HashSet();
+			Set<IProject> result= new HashSet<IProject>();
 			for (int i= 0; i < fFragments.length; i++) {
 				result.add(fFragments[i].getJavaProject().getProject());
 			}
-			return (IProject[])result.toArray(new IProject[result.size()]);
+			return result.toArray(new IProject[result.size()]);
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
-			List result= new ArrayList();
+			List<ResourceTraversal> result= new ArrayList<ResourceTraversal>();
 			if (context instanceof RemoteResourceMappingContext) {
 				for (int i= 0; i < fFragments.length; i++) {
 					result.addAll(Arrays.asList(getRemotePackageFragmentTraversals(fFragments[i], (RemoteResourceMappingContext)context, monitor)));
@@ -292,9 +317,10 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 					result.addAll(Arrays.asList(getPackageFragmentTraversals(fFragments[i])));
 				}
 			}
-			return (ResourceTraversal[])result.toArray(new ResourceTraversal[result.size()]);
+			return result.toArray(new ResourceTraversal[result.size()]);
 		}
 
+		@Override
 		public String getModelProviderId() {
 			return JavaModelProvider.JAVA_MODEL_PROVIDER_ID;
 		}
@@ -371,7 +397,7 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 
 	public static ResourceMapping create(LogicalPackage logicalPackage) {
 		IPackageFragment[] fragments= logicalPackage.getFragments();
-		List toProcess= new ArrayList(fragments.length);
+		List<IPackageFragment> toProcess= new ArrayList<IPackageFragment>(fragments.length);
 		for (int i= 0; i < fragments.length; i++) {
 			// only add if not part of an archive
 			IPackageFragmentRoot root= (IPackageFragmentRoot)fragments[i].getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
@@ -381,6 +407,6 @@ public abstract class JavaElementResourceMapping extends ResourceMapping {
 		}
 		if (toProcess.size() == 0)
 			return null;
-		return new LogicalPackageResourceMapping((IPackageFragment[])toProcess.toArray(new IPackageFragment[toProcess.size()]));
+		return new LogicalPackageResourceMapping(toProcess.toArray(new IPackageFragment[toProcess.size()]));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java
index e0f57f5..afe32bc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,6 @@ import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJarEntryResource;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.ILocalVariable;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IPackageFragment;
@@ -66,7 +65,7 @@ public final class JavaModelUtil {
 	
 	/**
 	 * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=309163
-	 * @since 3.6
+	 * @since 3.7
 	 */
 	public static final boolean HIDE_VERSION_1_7= true;
 
@@ -457,6 +456,19 @@ public final class JavaModelUtil {
 		return cu.getOwner() == null;
 	}
 
+	/**
+	 * Checks whether the given type signature is from a primitive type.
+	 * 
+	 * @param typeSignature the type signature string to check
+	 * @return <code>true</code> if the type is a primitive type, <code> false</code> otherwise
+	 * @throws JavaModelException if this element does not exist or if an exception occurs while
+	 *             accessing its corresponding resource.
+	 * @since 3.7
+	 */
+	public static boolean isPrimitive(String typeSignature) throws JavaModelException {
+		return Signature.getTypeSignatureKind(Signature.getElementType(typeSignature)) == Signature.BASE_TYPE_SIGNATURE;
+	}
+
 	/*
      * Don't log not-exists exceptions
      *
@@ -531,7 +543,7 @@ public final class JavaModelUtil {
 	 *
 	 * @see IClasspathEntry#getExclusionPatterns
 	 */
-	public final static boolean isExcluded(IPath resourcePath, char[][] exclusionPatterns) {
+	public static boolean isExcluded(IPath resourcePath, char[][] exclusionPatterns) {
 		if (exclusionPatterns == null) return false;
 		char[] path = resourcePath.toString().toCharArray();
 		for (int i = 0, length = exclusionPatterns.length; i < length; i++)
@@ -630,14 +642,14 @@ public final class JavaModelUtil {
 	 *             accessing its corresponding resource
 	 */
 	public static ICompilationUnit[] getAllCompilationUnits(IJavaElement[] javaElements) throws JavaModelException {
-		HashSet result= new HashSet();
+		HashSet<ICompilationUnit> result= new HashSet<ICompilationUnit>();
 		for (int i= 0; i < javaElements.length; i++) {
 			addAllCus(result, javaElements[i]);
 		}
-		return (ICompilationUnit[]) result.toArray(new ICompilationUnit[result.size()]);
+		return result.toArray(new ICompilationUnit[result.size()]);
 	}
 
-	private static void addAllCus(HashSet/*<ICompilationUnit>*/ collector, IJavaElement javaElement) throws JavaModelException {
+	private static void addAllCus(HashSet<ICompilationUnit> collector, IJavaElement javaElement) throws JavaModelException {
 		switch (javaElement.getElementType()) {
 			case IJavaElement.JAVA_PROJECT:
 				IJavaProject javaProject= (IJavaProject) javaElement;
@@ -661,13 +673,13 @@ public final class JavaModelUtil {
 				return;
 
 			case IJavaElement.COMPILATION_UNIT:
-				collector.add(javaElement);
+				collector.add((ICompilationUnit) javaElement);
 				return;
 
 			default:
 				IJavaElement cu= javaElement.getAncestor(IJavaElement.COMPILATION_UNIT);
 				if (cu != null)
-					collector.add(cu);
+					collector.add((ICompilationUnit) cu);
 		}
 	}
 
@@ -676,15 +688,15 @@ public final class JavaModelUtil {
 	 * Sets all compliance settings in the given map to 5.0
 	 * @param map the map to update
 	 */
-	public static void set50ComplianceOptions(Map map) {
+	public static void set50ComplianceOptions(Map<String, String> map) {
 		setComplianceOptions(map, JavaCore.VERSION_1_5);
 	}
 
-	public static void setComplianceOptions(Map map, String compliance) {
+	public static void setComplianceOptions(Map<String, String> map, String compliance) {
 		JavaCore.setComplianceOptions(compliance, map);
 	}
 
-	public static void setDefaultClassfileOptions(Map map, String compliance) {
+	public static void setDefaultClassfileOptions(Map<String, String> map, String compliance) {
 		map.put(JavaCore.COMPILER_CODEGEN_INLINE_JSR_BYTECODE, is50OrHigher(compliance) ? JavaCore.ENABLED : JavaCore.DISABLED);
 		map.put(JavaCore.COMPILER_LOCAL_VARIABLE_ATTR, JavaCore.GENERATE);
 		map.put(JavaCore.COMPILER_LINE_NUMBER_ATTR, JavaCore.GENERATE);
@@ -773,7 +785,7 @@ public final class JavaModelUtil {
 	}
 
 	public static String getExecutionEnvironmentCompliance(IExecutionEnvironment executionEnvironment) {
-		Map complianceOptions= executionEnvironment.getComplianceOptions();
+		Map<String, String> complianceOptions= executionEnvironment.getComplianceOptions();
 		if (complianceOptions != null) {
 			Object compliance= complianceOptions.get(JavaCore.COMPILER_COMPLIANCE);
 			if (compliance instanceof String)
@@ -867,30 +879,6 @@ public final class JavaModelUtil {
 	}
 
 	/**
-	 * Returns true iff the given local variable is a parameter of its declaring method.
-	 *
-	 * TODO replace this method with new API when available:
-	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=48420
-	 *
-	 * @param currentLocal the local variable to test
-	 *
-	 * @return returns true if the variable is a parameter
-	 * @throws JavaModelException if getting the method parameter names fails
-	 */
-	public static boolean isParameter(ILocalVariable currentLocal) throws JavaModelException {
-
-		final IJavaElement parent= currentLocal.getParent();
-		if (parent instanceof IMethod) {
-			final String[] params= ((IMethod) parent).getParameterNames();
-			for (int i= 0; i < params.length; i++) {
-				if (params[i].equals(currentLocal.getElementName()))
-					return true;
-			}
-		}
-		return false;
-	}
-
-	/**
 	 * Tells whether the given CU is the package-info.java.
 	 *
 	 * @param cu the compilation unit to test
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java
index ee031ee..ca664e2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,21 +12,38 @@
 package org.eclipse.jdt.internal.corext.util;
 
 import java.util.LinkedHashMap;
+import java.util.Map;
 
 /**
- *
+ * Least-recently-used cache. When the map tops the maximum size configured in the constructor, it
+ * automatically removes the oldest entry in terms of last access.
+ * <p>
+ * Invoking the <tt>put</tt> or <tt>get</tt> method results in an access to the corresponding entry.
+ * The <tt>putAll</tt> method generates one entry access for each mapping in the specified map, in
+ * the order that key-value mappings are provided by the specified map's entry set iterator. <i>No
+ * other methods generate entry accesses.</i> In particular, operations on collection-views do
+ * <i>not</i> affect the order of iteration of the backing map.
+ * 
+ * @param <K> type of the keys
+ * @param <V> type of the values
  */
-public class LRUMap extends LinkedHashMap {
+public class LRUMap<K,V> extends LinkedHashMap<K,V> {
 
 	private static final long serialVersionUID= 1L;
 	private final int fMaxSize;
 
+	/**
+	 * Creates an empty LRU map with the given maximum size.
+	 * 
+	 * @param maxSize the maximum number of elements in the cache
+	 */
 	public LRUMap(int maxSize) {
 		super(maxSize, 0.75f, true);
 		fMaxSize= maxSize;
 	}
 
-	protected boolean removeEldestEntry(java.util.Map.Entry eldest) {
+	@Override
+	protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
 		return size() > fMaxSize;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodOverrideTester.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodOverrideTester.java
index 7467040..250d0b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodOverrideTester.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodOverrideTester.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ public class MethodOverrideTester {
 
 		public static final Substitutions EMPTY_SUBST= new Substitutions();
 
-		private HashMap fMap;
+		private HashMap<String, String[]> fMap;
 
 		public Substitutions() {
 			fMap= null;
@@ -39,14 +39,14 @@ public class MethodOverrideTester {
 
 		public void addSubstitution(String typeVariable, String substitution, String erasure) {
 			if (fMap == null) {
-				fMap= new HashMap(3);
+				fMap= new HashMap<String, String[]>(3);
 			}
 			fMap.put(typeVariable, new String[] { substitution, erasure });
 		}
 
 		private String[] getSubstArray(String typeVariable) {
 			if (fMap != null) {
-				return (String[]) fMap.get(typeVariable);
+				return fMap.get(typeVariable);
 			}
 			return null;
 		}
@@ -71,8 +71,8 @@ public class MethodOverrideTester {
 	private final IType fFocusType;
 	private final ITypeHierarchy fHierarchy;
 
-	private Map /* <IMethod, Substitutions> */ fMethodSubstitutions;
-	private Map /* <IType, Substitutions> */ fTypeVariableSubstitutions;
+	private Map <IMethod, Substitutions> fMethodSubstitutions;
+	private Map<IType, Substitutions> fTypeVariableSubstitutions;
 
 	public MethodOverrideTester(IType focusType, ITypeHierarchy hierarchy) {
 		if (focusType == null || hierarchy == null) {
@@ -99,7 +99,7 @@ public class MethodOverrideTester {
 	 * @param overriding the overriding method
 	 * @param testVisibility If true the result is tested on visibility. Null is returned if the method is not visible.
 	 * @return the declaring method, or <code>null</code>
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public IMethod findDeclaringMethod(IMethod overriding, boolean testVisibility) throws JavaModelException {
 		IMethod result= null;
@@ -117,7 +117,7 @@ public class MethodOverrideTester {
 	 * @param overriding the overriding method
 	 * @param testVisibility If true the result is tested on visibility. Null is returned if the method is not visible.
 	 * @return a method that is directly overridden by the given method, or <code>null</code>
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public IMethod findOverriddenMethod(IMethod overriding, boolean testVisibility) throws JavaModelException {
 		int flags= overriding.getFlags();
@@ -129,19 +129,17 @@ public class MethodOverrideTester {
 		IType superClass= fHierarchy.getSuperclass(type);
 		if (superClass != null) {
 			IMethod res= findOverriddenMethodInHierarchy(superClass, overriding);
-			if (res != null && !Flags.isPrivate(res.getFlags())) {
+			if (res != null) {
 				if (!testVisibility || JavaModelUtil.isVisibleInHierarchy(res, type.getPackageFragment())) {
 					return res;
 				}
 			}
 		}
-		if (!overriding.isConstructor()) {
-			IType[] interfaces= fHierarchy.getSuperInterfaces(type);
-			for (int i= 0; i < interfaces.length; i++) {
-				IMethod res= findOverriddenMethodInHierarchy(interfaces[i], overriding);
-				if (res != null) {
-					return res; // methods from interfaces are always public and therefore visible
-				}
+		IType[] interfaces= fHierarchy.getSuperInterfaces(type);
+		for (int i= 0; i < interfaces.length; i++) {
+			IMethod res= findOverriddenMethodInHierarchy(interfaces[i], overriding);
+			if (res != null) {
+				return res; // methods from interfaces are always public and therefore visible
 			}
 		}
 		return null;
@@ -153,7 +151,7 @@ public class MethodOverrideTester {
 	 * 	@param type The type to find methods in
 	 * @param overriding The overriding method
 	 * @return The first overridden method or <code>null</code> if no method is overridden
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public IMethod findOverriddenMethodInHierarchy(IType type, IMethod overriding) throws JavaModelException {
 		IMethod method= findOverriddenMethodInType(type, overriding);
@@ -167,13 +165,11 @@ public class MethodOverrideTester {
 				return res;
 			}
 		}
-		if (!overriding.isConstructor()) {
-			IType[] superInterfaces= fHierarchy.getSuperInterfaces(type);
-			for (int i= 0; i < superInterfaces.length; i++) {
-				IMethod res= findOverriddenMethodInHierarchy(superInterfaces[i], overriding);
-				if (res != null) {
-					return res;
-				}
+		IType[] superInterfaces= fHierarchy.getSuperInterfaces(type);
+		for (int i= 0; i < superInterfaces.length; i++) {
+			IMethod res= findOverriddenMethodInHierarchy(superInterfaces[i], overriding);
+			if (res != null) {
+				return res;
 			}
 		}
 		return method;
@@ -185,13 +181,20 @@ public class MethodOverrideTester {
 	 * @param overriddenType The type to find methods in
 	 * @param overriding The overriding method
 	 * @return The first overridden method or <code>null</code> if no method is overridden
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public IMethod findOverriddenMethodInType(IType overriddenType, IMethod overriding) throws JavaModelException {
+		int flags= overriding.getFlags();
+		if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overriding.isConstructor())
+			return null;
 		IMethod[] overriddenMethods= overriddenType.getMethods();
 		for (int i= 0; i < overriddenMethods.length; i++) {
-			if (isSubsignature(overriding, overriddenMethods[i])) {
-				return overriddenMethods[i];
+			IMethod overridden= overriddenMethods[i];
+			flags= overridden.getFlags();
+			if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overridden.isConstructor())
+				continue;
+			if (isSubsignature(overriding, overridden)) {
+				return overridden;
 			}
 		}
 		return null;
@@ -202,13 +205,20 @@ public class MethodOverrideTester {
 	 * @param overridingType The type to find methods in
 	 * @param overridden The overridden method
 	 * @return The overriding method or <code>null</code> if no method is overriding.
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public IMethod findOverridingMethodInType(IType overridingType, IMethod overridden) throws JavaModelException {
+		int flags= overridden.getFlags();
+		if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overridden.isConstructor())
+			return null;
 		IMethod[] overridingMethods= overridingType.getMethods();
 		for (int i= 0; i < overridingMethods.length; i++) {
-			if (isSubsignature(overridingMethods[i], overridden)) {
-				return overridingMethods[i];
+			IMethod overriding= overridingMethods[i];
+			flags= overriding.getFlags();
+			if (Flags.isPrivate(flags) || Flags.isStatic(flags) || overriding.isConstructor())
+				continue;
+			if (isSubsignature(overriding, overridden)) {
+				return overriding;
 			}
 		}
 		return null;
@@ -222,7 +232,7 @@ public class MethodOverrideTester {
 	 * 		This is one of the requirements for m1 to override m2.
 	 * 		Accessibility and return types are not taken into account.
 	 * 		Note that subsignature is <em>not</em> symmetric!
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public boolean isSubsignature(IMethod overriding, IMethod overridden) throws JavaModelException {
 		if (!overridden.getElementName().equals(overriding.getElementName())) {
@@ -337,10 +347,10 @@ public class MethodOverrideTester {
 	 */
 	private Substitutions getMethodSubstitions(IMethod method) throws JavaModelException {
 		if (fMethodSubstitutions == null) {
-			fMethodSubstitutions= new LRUMap(3);
+			fMethodSubstitutions= new LRUMap<IMethod, Substitutions>(3);
 		}
 
-		Substitutions s= (Substitutions) fMethodSubstitutions.get(method);
+		Substitutions s= fMethodSubstitutions.get(method);
 		if (s == null) {
 			ITypeParameter[] typeParameters= method.getTypeParameters();
 			if (typeParameters.length == 0) {
@@ -363,10 +373,10 @@ public class MethodOverrideTester {
 	 */
 	private Substitutions getTypeSubstitions(IType type) throws JavaModelException {
 		if (fTypeVariableSubstitutions == null) {
-			fTypeVariableSubstitutions= new HashMap();
+			fTypeVariableSubstitutions= new HashMap<IType, Substitutions>();
 			computeSubstitutions(fFocusType, null, null);
 		}
-		Substitutions subst= (Substitutions) fTypeVariableSubstitutions.get(type);
+		Substitutions subst= fTypeVariableSubstitutions.get(type);
 		if (subst == null) {
 			return Substitutions.EMPTY_SUBST;
 		}
@@ -442,7 +452,7 @@ public class MethodOverrideTester {
 	 * @param typeSig The type signature to translate
 	 * @param context The context for the substitution
 	 * @return a type name
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	private String getSubstitutedTypeName(String typeSig, IMember context) throws JavaModelException {
 		return internalGetSubstitutedTypeName(typeSig, context, false, new StringBuffer()).toString();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java
index aed4713..dd63cac 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,7 +44,7 @@ import org.eclipse.jdt.core.dom.ITypeBinding;
  * defines <code>m1</code> in <code>implements</code> clause of declaration of type <code>T</code></li>
  * </ul>
  */
-public class MethodsSourcePositionComparator implements Comparator {
+public class MethodsSourcePositionComparator implements Comparator<IMethodBinding> {
 
 	private final ITypeBinding fTypeBinding;
 
@@ -55,15 +55,10 @@ public class MethodsSourcePositionComparator implements Comparator {
 		fTypeBinding= typeBinding;
 	}
 
-	public int compare(Object o1, Object o2) {
-		if (!(o1 instanceof IMethodBinding)) {
+	public int compare(IMethodBinding firstMethodBinding, IMethodBinding secondMethodBinding) {
+		if (firstMethodBinding == null || secondMethodBinding == null) {
 			return 0;
 		}
-		if (!(o2 instanceof IMethodBinding)) {
-			return 0;
-		}
-		IMethodBinding firstMethodBinding= (IMethodBinding)o1;
-		IMethodBinding secondMethodBinding= (IMethodBinding)o2;
 		ITypeBinding firstMethodType= firstMethodBinding.getDeclaringClass();
 		ITypeBinding secondMethodType= secondMethodBinding.getDeclaringClass();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java
index e277d54..dbfeffd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,11 +151,13 @@ public class OpenTypeHistory extends History {
 		public UpdateJob() {
 			super(CorextMessages.TypeInfoHistory_consistency_check);
 		}
+		@Override
 		protected IStatus run(IProgressMonitor monitor) {
 			OpenTypeHistory history= OpenTypeHistory.getInstance();
 			history.internalCheckConsistency(monitor);
 			return Status.OK_STATUS;
 		}
+		@Override
 		public boolean belongsTo(Object family) {
 			return FAMILY.equals(family);
 		}
@@ -164,7 +166,7 @@ public class OpenTypeHistory extends History {
 	// Needs to be volatile since accesses aren't synchronized.
 	private volatile boolean fNeedsConsistencyCheck;
 	// Map of cached time stamps
-	private Map fTimestampMapping;
+	private Map<TypeNameMatch, Long> fTimestampMapping;
 
 	private final IElementChangedListener fDeltaListener;
 	private final UpdateJob fUpdateJob;
@@ -192,7 +194,7 @@ public class OpenTypeHistory extends History {
 
 	private OpenTypeHistory() {
 		super(FILENAME, NODE_ROOT, NODE_TYPE_INFO);
-		fTimestampMapping= new HashMap();
+		fTimestampMapping= new HashMap<TypeNameMatch, Long>();
 		fNeedsConsistencyCheck= true;
 		load();
 		fDeltaListener= new TypeHistoryDeltaListener();
@@ -262,11 +264,11 @@ public class OpenTypeHistory extends History {
 	}
 
 	public synchronized TypeNameMatch[] getTypeInfos() {
-		Collection values= getValues();
+		Collection<Object> values= getValues();
 		int size= values.size();
 		TypeNameMatch[] result= new TypeNameMatch[size];
 		int i= size - 1;
-		for (Iterator iter= values.iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter= values.iterator(); iter.hasNext();) {
 			result[i]= (TypeNameMatch)iter.next();
 			i--;
 		}
@@ -274,18 +276,19 @@ public class OpenTypeHistory extends History {
 	}
 
 	public synchronized TypeNameMatch[] getFilteredTypeInfos(TypeInfoFilter filter) {
-		Collection values= getValues();
-		List result= new ArrayList();
-		for (Iterator iter= values.iterator(); iter.hasNext();) {
+		Collection<Object> values= getValues();
+		List<TypeNameMatch> result= new ArrayList<TypeNameMatch>();
+		for (Iterator<Object> iter= values.iterator(); iter.hasNext();) {
 			TypeNameMatch type= (TypeNameMatch)iter.next();
 			if ((filter == null || filter.matchesHistoryElement(type)) && !TypeFilter.isFiltered(type.getFullyQualifiedName()))
 				result.add(type);
 		}
 		Collections.reverse(result);
-		return (TypeNameMatch[])result.toArray(new TypeNameMatch[result.size()]);
+		return result.toArray(new TypeNameMatch[result.size()]);
 
 	}
 
+	@Override
 	protected Object getKey(Object object) {
 		return object;
 	}
@@ -294,13 +297,13 @@ public class OpenTypeHistory extends History {
 		// Setting fNeedsConsistencyCheck is necessary here since
 		// markAsInconsistent isn't synchronized.
 		fNeedsConsistencyCheck= true;
-		List typesToCheck= new ArrayList(getKeys());
+		List<Object> typesToCheck= new ArrayList<Object>(getKeys());
 		monitor.beginTask(CorextMessages.TypeInfoHistory_consistency_check, typesToCheck.size());
 		monitor.setTaskName(CorextMessages.TypeInfoHistory_consistency_check);
-		for (Iterator iter= typesToCheck.iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter= typesToCheck.iterator(); iter.hasNext();) {
 			TypeNameMatch type= (TypeNameMatch)iter.next();
 			long currentTimestamp= getContainerTimestamp(type);
-			Long lastTested= (Long)fTimestampMapping.get(type);
+			Long lastTested= fTimestampMapping.get(type);
 			if (lastTested != null && currentTimestamp != IResource.NULL_STAMP && currentTimestamp == lastTested.longValue() && !isContainerDirty(type))
 				continue;
 			try {
@@ -379,6 +382,7 @@ public class OpenTypeHistory extends History {
 		save();
 	}
 
+	@Override
 	protected Object createFromElement(Element type) {
 		String handle= type.getAttribute(NODE_HANDLE);
 		if (handle == null )
@@ -410,12 +414,13 @@ public class OpenTypeHistory extends History {
 		return info;
 	}
 
+	@Override
 	protected void setAttributes(Object object, Element typeElement) {
 		TypeNameMatch type= (TypeNameMatch) object;
 		String handleId= type.getType().getHandleIdentifier();
 		typeElement.setAttribute(NODE_HANDLE, handleId);
 		typeElement.setAttribute(NODE_MODIFIERS, Integer.toString(type.getModifiers()));
-		Long timestamp= (Long) fTimestampMapping.get(type);
+		Long timestamp= fTimestampMapping.get(type);
 		if (timestamp == null) {
 			typeElement.setAttribute(NODE_TIMESTAMP, Long.toString(IResource.NULL_STAMP));
 		} else {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/QualifiedTypeNameHistory.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/QualifiedTypeNameHistory.java
index bf1f76b..f644283 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/QualifiedTypeNameHistory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/QualifiedTypeNameHistory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,7 @@ public class QualifiedTypeNameHistory extends History {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void setAttributes(Object object, Element element) {
 		element.setAttribute(NODE_NAME, (String)object);
 	}
@@ -43,6 +44,7 @@ public class QualifiedTypeNameHistory extends History {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object createFromElement(Element element) {
 		return element.getAttribute(NODE_NAME);
 	}
@@ -50,6 +52,7 @@ public class QualifiedTypeNameHistory extends History {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object getKey(Object object) {
 		return object;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Resources.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Resources.java
index 22f855d..882f068 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Resources.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Resources.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ public class Resources {
 	 * @see org.eclipse.core.resources.IWorkspace#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object)
 	 */
 	public static IStatus makeCommittable(IResource[] resources, Object context) {
-		List readOnlyFiles= new ArrayList();
+		List<IResource> readOnlyFiles= new ArrayList<IResource>();
 		for (int i= 0; i < resources.length; i++) {
 			IResource resource= resources[i];
 			if (resource.getType() == IResource.FILE && isReadOnly(resource))
@@ -115,16 +115,16 @@ public class Resources {
 		if (readOnlyFiles.size() == 0)
 			return Status.OK_STATUS;
 
-		Map oldTimeStamps= createModificationStampMap(readOnlyFiles);
+		Map<IFile, Long> oldTimeStamps= createModificationStampMap(readOnlyFiles);
 		IStatus status= ResourcesPlugin.getWorkspace().validateEdit(
-			(IFile[]) readOnlyFiles.toArray(new IFile[readOnlyFiles.size()]), context);
+			readOnlyFiles.toArray(new IFile[readOnlyFiles.size()]), context);
 		if (!status.isOK())
 			return status;
 
 		IStatus modified= null;
-		Map newTimeStamps= createModificationStampMap(readOnlyFiles);
-		for (Iterator iter= oldTimeStamps.keySet().iterator(); iter.hasNext();) {
-			IFile file= (IFile) iter.next();
+		Map<IFile, Long> newTimeStamps= createModificationStampMap(readOnlyFiles);
+		for (Iterator<IFile> iter= oldTimeStamps.keySet().iterator(); iter.hasNext();) {
+			IFile file= iter.next();
 			if (!oldTimeStamps.get(file).equals(newTimeStamps.get(file)))
 				modified= addModified(modified, file);
 		}
@@ -133,9 +133,9 @@ public class Resources {
 		return Status.OK_STATUS;
 	}
 
-	private static Map createModificationStampMap(List files){
-		Map map= new HashMap();
-		for (Iterator iter= files.iterator(); iter.hasNext(); ) {
+	private static Map<IFile, Long> createModificationStampMap(List<IResource> files){
+		Map<IFile, Long> map= new HashMap<IFile, Long>();
+		for (Iterator<IResource> iter= files.iterator(); iter.hasNext(); ) {
 			IFile file= (IFile)iter.next();
 			map.put(file, new Long(file.getModificationStamp()));
 		}
@@ -194,13 +194,13 @@ public class Resources {
 	 * @return the local locations
 	 */
 	public static String[] getLocationOSStrings(IResource[] resources) {
-		List result= new ArrayList(resources.length);
+		List<String> result= new ArrayList<String>(resources.length);
 		for (int i= 0; i < resources.length; i++) {
 			IPath location= resources[i].getLocation();
 			if (location != null)
 				result.add(location.toOSString());
 		}
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/SuperTypeHierarchyCache.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/SuperTypeHierarchyCache.java
index c047126..bbe119c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/SuperTypeHierarchyCache.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/SuperTypeHierarchyCache.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class SuperTypeHierarchyCache {
 		/* (non-Javadoc)
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
 			return "Super hierarchy of: " + fTypeHierarchy.getType().getElementName(); //$NON-NLS-1$
 		}
@@ -70,8 +71,8 @@ public class SuperTypeHierarchyCache {
 
 	private static final int CACHE_SIZE= 8;
 
-	private static ArrayList fgHierarchyCache= new ArrayList(CACHE_SIZE);
-	private static Map fgMethodOverrideTesterCache= new LRUMap(CACHE_SIZE);
+	private static ArrayList<HierarchyCacheEntry> fgHierarchyCache= new ArrayList<HierarchyCacheEntry>(CACHE_SIZE);
+	private static Map<IType, MethodOverrideTester> fgMethodOverrideTesterCache= new LRUMap<IType, MethodOverrideTester>(CACHE_SIZE);
 
 	private static int fgCacheHits= 0;
 	private static int fgCacheMisses= 0;
@@ -85,7 +86,7 @@ public class SuperTypeHierarchyCache {
 	 *
 	 * @param type the focus type
 	 * @return a supertype hierarchy that contains <code>type</code>
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public static ITypeHierarchy getTypeHierarchy(IType type) throws JavaModelException {
 		return getTypeHierarchy(type, null);
@@ -94,12 +95,12 @@ public class SuperTypeHierarchyCache {
 	public static MethodOverrideTester getMethodOverrideTester(IType type) throws JavaModelException {
 		MethodOverrideTester test= null;
 		synchronized (fgMethodOverrideTesterCache) {
-			test= (MethodOverrideTester) fgMethodOverrideTesterCache.get(type);
+			test= fgMethodOverrideTesterCache.get(type);
 		}
 		if (test == null) {
 			ITypeHierarchy hierarchy= getTypeHierarchy(type); // don't nest the locks
 			synchronized (fgMethodOverrideTesterCache) {
-				test= (MethodOverrideTester) fgMethodOverrideTesterCache.get(type); // test again after waiting a long time for 'getTypeHierarchy'
+				test= fgMethodOverrideTesterCache.get(type); // test again after waiting a long time for 'getTypeHierarchy'
 				if (test == null) {
 					test= new MethodOverrideTester(type, hierarchy);
 					fgMethodOverrideTesterCache.put(type, test);
@@ -111,8 +112,8 @@ public class SuperTypeHierarchyCache {
 
 	private static void removeMethodOverrideTester(ITypeHierarchy hierarchy) {
 		synchronized (fgMethodOverrideTesterCache) {
-			for (Iterator iter= fgMethodOverrideTesterCache.values().iterator(); iter.hasNext();) {
-				MethodOverrideTester curr= (MethodOverrideTester) iter.next();
+			for (Iterator<MethodOverrideTester> iter= fgMethodOverrideTesterCache.values().iterator(); iter.hasNext();) {
+				MethodOverrideTester curr= iter.next();
 				if (curr.getTypeHierarchy().equals(hierarchy)) {
 					iter.remove();
 				}
@@ -130,7 +131,7 @@ public class SuperTypeHierarchyCache {
 	 * @param type the focus type
 	 * @param progressMonitor progress monitor
 	 * @return a supertype hierarchy that contains <code>type</code>
-	 * @throws JavaModelException
+	 * @throws JavaModelException if a problem occurs
 	 */
 	public static ITypeHierarchy getTypeHierarchy(IType type, IProgressMonitor progressMonitor) throws JavaModelException {
 		ITypeHierarchy hierarchy= findTypeHierarchyInCache(type);
@@ -150,9 +151,9 @@ public class SuperTypeHierarchyCache {
 			if (nEntries >= CACHE_SIZE) {
 				// find obsolete entries or remove entry that was least recently accessed
 				HierarchyCacheEntry oldest= null;
-				ArrayList obsoleteHierarchies= new ArrayList(CACHE_SIZE);
+				ArrayList<HierarchyCacheEntry> obsoleteHierarchies= new ArrayList<HierarchyCacheEntry>(CACHE_SIZE);
 				for (int i= 0; i < nEntries; i++) {
-					HierarchyCacheEntry entry= (HierarchyCacheEntry) fgHierarchyCache.get(i);
+					HierarchyCacheEntry entry= fgHierarchyCache.get(i);
 					ITypeHierarchy curr= entry.getTypeHierarchy();
 					if (!curr.exists() || hierarchy.contains(curr.getType())) {
 						obsoleteHierarchies.add(entry);
@@ -164,7 +165,7 @@ public class SuperTypeHierarchyCache {
 				}
 				if (!obsoleteHierarchies.isEmpty()) {
 					for (int i= 0; i < obsoleteHierarchies.size(); i++) {
-						removeHierarchyEntryFromCache((HierarchyCacheEntry) obsoleteHierarchies.get(i));
+						removeHierarchyEntryFromCache(obsoleteHierarchies.get(i));
 					}
 				} else if (oldest != null) {
 					removeHierarchyEntryFromCache(oldest);
@@ -189,7 +190,7 @@ public class SuperTypeHierarchyCache {
 	private static ITypeHierarchy findTypeHierarchyInCache(IType type) {
 		synchronized (fgHierarchyCache) {
 			for (int i= fgHierarchyCache.size() - 1; i>= 0; i--) {
-				HierarchyCacheEntry curr= (HierarchyCacheEntry) fgHierarchyCache.get(i);
+				HierarchyCacheEntry curr= fgHierarchyCache.get(i);
 				ITypeHierarchy hierarchy= curr.getTypeHierarchy();
 				if (!hierarchy.exists()) {
 					removeHierarchyEntryFromCache(curr);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeNameMatchCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeNameMatchCollector.java
index ea21579..3589c73 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeNameMatchCollector.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeNameMatchCollector.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,25 +14,39 @@ import java.util.Collection;
 
 import org.eclipse.core.runtime.Assert;
 
+import org.eclipse.jdt.core.IAccessRule;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.search.TypeNameMatch;
 import org.eclipse.jdt.core.search.TypeNameMatchRequestor;
 
 public class TypeNameMatchCollector extends TypeNameMatchRequestor {
 
-	private final Collection fCollection;
+	private final Collection<TypeNameMatch> fCollection;
 
-	public TypeNameMatchCollector(Collection collection) {
+	public TypeNameMatchCollector(Collection<TypeNameMatch> collection) {
 		Assert.isNotNull(collection);
 		fCollection= collection;
 	}
 
 	private boolean inScope(TypeNameMatch match) {
-		return !TypeFilter.isFiltered(match);
+		if (TypeFilter.isFiltered(match))
+			return false;
+		
+		int accessibility= match.getAccessibility();
+		switch (accessibility) {
+			case IAccessRule.K_NON_ACCESSIBLE:
+				return JavaCore.DISABLED.equals(JavaCore.getOption(JavaCore.CODEASSIST_FORBIDDEN_REFERENCE_CHECK));
+			case IAccessRule.K_DISCOURAGED:
+				return JavaCore.DISABLED.equals(JavaCore.getOption(JavaCore.CODEASSIST_DISCOURAGED_REFERENCE_CHECK));
+			default:
+				return true;
+		}
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.search.TypeNameMatchRequestor#acceptTypeNameMatch(org.eclipse.jdt.core.search.TypeNameMatch)
 	 */
+	@Override
 	public void acceptTypeNameMatch(TypeNameMatch match) {
 		if (inScope(match)) {
 			fCollection.add(match);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/AbstractJavaElementRenameChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/AbstractJavaElementRenameChange.java
index 23cbbc9..b74a59c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/AbstractJavaElementRenameChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/AbstractJavaElementRenameChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,10 +53,12 @@ public abstract class AbstractJavaElementRenameChange extends ResourceChange {
 
 	protected abstract void doRename(IProgressMonitor pm) throws CoreException;
 
+	@Override
 	public Object getModifiedElement() {
 		return JavaCore.create(getResource());
 	}
 
+	@Override
 	protected IResource getModifiedResource() {
 		return getResource();
 	}
@@ -77,6 +79,7 @@ public abstract class AbstractJavaElementRenameChange extends ResourceChange {
 		return fResourcePath;
 	}
 
+	@Override
 	public final Change perform(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.AbstractRenameChange_Renaming, 1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/Checks.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/Checks.java
index 5812453..6afc1d2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/Checks.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/Checks.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IBinding;
@@ -158,7 +159,7 @@ public class Checks {
 	 */
 	public static RefactoringStatus checkMethodName(String name, IJavaElement context) {
 		RefactoringStatus status= checkName(name, JavaConventionsUtil.validateMethodName(name, context));
-		if (status.isOK() && startsWithUpperCase(name))
+		if (status.isOK() && !startsWithLowerCase(name))
 			return RefactoringStatus.createWarningStatus(RefactoringCoreMessages.Checks_method_names_lowercase);
 		else
 			return status;
@@ -219,16 +220,6 @@ public class Checks {
 			return new RefactoringStatus();
 	}
 
-	public static boolean startsWithUpperCase(String s) {
-		if (s == null)
-			return false;
-		else if ("".equals(s)) //$NON-NLS-1$
-			return false;
-		else
-			//workaround for JDK bug (see 26529)
-			return s.charAt(0) == Character.toUpperCase(s.charAt(0));
-	}
-
 	public static boolean startsWithLowerCase(String s){
 		if (s == null)
 			return false;
@@ -401,7 +392,7 @@ public class Checks {
 			return false;
 		if (node instanceof Name) {
 			IBinding binding= ((Name) node).resolveBinding();
-			return !(binding instanceof ITypeBinding);
+			return binding == null || binding instanceof IVariableBinding;
 		}
 		return true;
 	}
@@ -572,7 +563,7 @@ public class Checks {
 	 * @throws JavaModelException
 	 */
 	public static SearchResultGroup[] excludeCompilationUnits(SearchResultGroup[] grouped, RefactoringStatus status) throws JavaModelException{
-		List result= new ArrayList();
+		List<SearchResultGroup> result= new ArrayList<SearchResultGroup>();
 		boolean wasEmpty= grouped.length == 0;
 		for (int i= 0; i < grouped.length; i++){
 			IResource resource= grouped[i].getResource();
@@ -591,7 +582,7 @@ public class Checks {
 		if ((!wasEmpty) && result.isEmpty())
 			status.addFatalError(RefactoringCoreMessages.Checks_all_excluded);
 
-		return (SearchResultGroup[])result.toArray(new SearchResultGroup[result.size()]);
+		return result.toArray(new SearchResultGroup[result.size()]);
 	}
 
 	public static RefactoringStatus checkCompileErrorsInAffectedFiles(SearchResultGroup[] grouped) throws JavaModelException {
@@ -850,11 +841,14 @@ public class Checks {
 	 *          Checks.NOT_RVALUE_MISC  	if e is not an rvalue for some other reason
 	 */
 	public static int checkExpressionIsRValue(Expression e) {
-		if(e instanceof Name) {
+		if (e instanceof Name) {
 			if(!(((Name) e).resolveBinding() instanceof IVariableBinding)) {
 				return NOT_RVALUE_MISC;
 			}
 		}
+		if (e instanceof Annotation)
+			return NOT_RVALUE_MISC;
+			
 
 		ITypeBinding tb= e.resolveTypeBinding();
 		boolean guessingRequired= false;
@@ -870,7 +864,7 @@ public class Checks {
 		return guessingRequired ? IS_RVALUE_GUESSED : IS_RVALUE;
 	}
 
-	public static boolean isDeclaredIn(VariableDeclaration tempDeclaration, Class astNodeClass) {
+	public static boolean isDeclaredIn(VariableDeclaration tempDeclaration, Class<? extends ASTNode> astNodeClass) {
 		ASTNode initializer= ASTNodes.getParent(tempDeclaration, astNodeClass);
 		if (initializer == null)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CollectingSearchRequestor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CollectingSearchRequestor.java
index 32047d5..331acd9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CollectingSearchRequestor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CollectingSearchRequestor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ import org.eclipse.jdt.internal.corext.refactoring.base.ReferencesInBinaryContex
  * inside a binary element are not collected (but added to the context if they are accurate).
  */
 public class CollectingSearchRequestor extends SearchRequestor {
-	private final ArrayList/*<SearchMatch>*/ fFound;
+	private final ArrayList<SearchMatch> fFound;
 	private final ReferencesInBinaryContext fBinaryRefs;
 
 	public CollectingSearchRequestor() {
@@ -40,7 +40,7 @@ public class CollectingSearchRequestor extends SearchRequestor {
 	}
 
 	public CollectingSearchRequestor(ReferencesInBinaryContext binaryRefs) {
-		fFound= new ArrayList();
+		fFound= new ArrayList<SearchMatch>();
 		fBinaryRefs= binaryRefs;
 	}
 
@@ -53,6 +53,7 @@ public class CollectingSearchRequestor extends SearchRequestor {
 	 *
 	 * @see org.eclipse.jdt.core.search.SearchRequestor#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)
 	 */
+	@Override
 	public void acceptSearchMatch(SearchMatch match) throws CoreException {
 		if (! filterMatch(match))
 			collectMatch(match);
@@ -109,7 +110,7 @@ public class CollectingSearchRequestor extends SearchRequestor {
 	/**
 	 * @return a List of {@link SearchMatch}es (not sorted)
 	 */
-	public List/*<SearchMatch>*/ getResults() {
+	public List<SearchMatch> getResults() {
 		return fFound;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CuCollectingSearchRequestor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CuCollectingSearchRequestor.java
index 5635517..aa9a743 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CuCollectingSearchRequestor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/CuCollectingSearchRequestor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class CuCollectingSearchRequestor extends CollectingSearchRequestor {
 	 * @throws CoreException
 	 * @deprecated
 	 */
+	@Override
 	public final void acceptSearchMatch(SearchMatch match) throws CoreException {
 		if (filterMatch(match))
 			return;
@@ -83,6 +84,7 @@ public class CuCollectingSearchRequestor extends CollectingSearchRequestor {
 		collectMatch(match);
 	}
 
+	@Override
 	public void endReporting() {
 		fProjectCache= null;
 		fScannerCache= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java
index 16c0dea..0479526 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,6 +83,7 @@ public class ExceptionInfo {
 		return fTypeBinding;
 	}
 
+	@Override
 	public String toString() {
 		StringBuffer result= new StringBuffer();
 		switch (fKind) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JDTRefactoringDescriptorComment.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JDTRefactoringDescriptorComment.java
index 678429b..5bb13ce 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JDTRefactoringDescriptorComment.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JDTRefactoringDescriptorComment.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 
 import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
 
@@ -85,7 +86,7 @@ public final class JDTRefactoringDescriptorComment {
 	private final String fProject;
 
 	/** The settings list */
-	private final List fSettings= new ArrayList(6);
+	private final List<String> fSettings= new ArrayList<String>(6);
 
 	/**
 	 * Creates a new JDT refactoring descriptor comment.
@@ -144,8 +145,8 @@ public final class JDTRefactoringDescriptorComment {
 			buffer.append(LINE_DELIMITER);
 			buffer.append(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptorComment_original_project, BasicElementLabels.getResourceName(fProject)));
 		}
-		for (final Iterator iterator= fSettings.iterator(); iterator.hasNext();) {
-			final String setting= (String) iterator.next();
+		for (final Iterator<String> iterator= fSettings.iterator(); iterator.hasNext();) {
+			final String setting= iterator.next();
 			buffer.append(LINE_DELIMITER);
 			buffer.append(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptor_inferred_setting_pattern, setting));
 		}
@@ -215,7 +216,7 @@ public final class JDTRefactoringDescriptorComment {
 				if (destination != null)
 					fSettings.add(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptorComment_destination_pattern, JavaElementLabels.getTextLabel(destination, JavaElementLabels.ALL_FULLY_QUALIFIED)));
 			}
-			final List list= new ArrayList();
+			final List<IAdaptable> list= new ArrayList<IAdaptable>();
 			list.addAll(Arrays.asList(policy.getJavaElements()));
 			list.addAll(Arrays.asList(policy.getResources()));
 			final Object[] elements= list.toArray();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JavaRefactoringArguments.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JavaRefactoringArguments.java
index 7e98fed..acd98ee 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JavaRefactoringArguments.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/JavaRefactoringArguments.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
 public final class JavaRefactoringArguments {
 
 	/** The attribute map (element type: <code><String, String></code>) */
-	private final Map fAttributes;
+	private final Map<String, String> fAttributes;
 
 	/** The name of the project, or <code>null</code> for the workspace */
 	private String fProject;
@@ -34,7 +34,7 @@ public final class JavaRefactoringArguments {
 	 * @param arguments
 	 *            the arguments
 	 */
-	public JavaRefactoringArguments(String project, Map arguments) {
+	public JavaRefactoringArguments(String project, Map<String, String> arguments) {
 		fProject= project;
 		fAttributes= arguments;
 	}
@@ -47,7 +47,7 @@ public final class JavaRefactoringArguments {
 	 * @return the attribute value, or <code>null</code>
 	 */
 	public String getAttribute(final String name) {
-		return (String) fAttributes.get(name);
+		return fAttributes.get(name);
 	}
 
 	/**
@@ -62,6 +62,7 @@ public final class JavaRefactoringArguments {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String toString() {
 		return getClass().getName() + fAttributes.toString();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ParameterInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ParameterInfo.java
index 65c5a63..4982c76 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ParameterInfo.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ParameterInfo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -176,6 +176,7 @@ public class ParameterInfo {
 		fDefaultValue= value;
 	}
 
+	@Override
 	public String toString() {
 		return fOldTypeName + " " + fOldName + " @" + fOldIndex + " -> " //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 		+ fNewTypeName + " " + fNewName + ": " + fDefaultValue  //$NON-NLS-1$//$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java
index 60de26d..7051035 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,16 +91,16 @@ public final class RefactoringAvailabilityTester {
 	}
 
 	public static IJavaElement[] getJavaElements(final Object[] elements) {
-		List result= new ArrayList();
+		List<IJavaElement> result= new ArrayList<IJavaElement>();
 		for (int index= 0; index < elements.length; index++) {
 			if (elements[index] instanceof IJavaElement)
-				result.add(elements[index]);
+				result.add((IJavaElement) elements[index]);
 		}
-		return (IJavaElement[]) result.toArray(new IJavaElement[result.size()]);
+		return result.toArray(new IJavaElement[result.size()]);
 	}
 
 	public static IMember[] getPullUpMembers(final IType type) throws JavaModelException {
-		final List list= new ArrayList(3);
+		final List<IMember> list= new ArrayList<IMember>(3);
 		if (type.exists()) {
 			IMember[] members= type.getFields();
 			for (int index= 0; index < members.length; index++) {
@@ -118,11 +118,11 @@ public final class RefactoringAvailabilityTester {
 					list.add(members[index]);
 			}
 		}
-		return (IMember[]) list.toArray(new IMember[list.size()]);
+		return list.toArray(new IMember[list.size()]);
 	}
 
 	public static IMember[] getPushDownMembers(final IType type) throws JavaModelException {
-		final List list= new ArrayList(3);
+		final List<IMember> list= new ArrayList<IMember>(3);
 		if (type.exists()) {
 			IMember[] members= type.getFields();
 			for (int index= 0; index < members.length; index++) {
@@ -135,16 +135,16 @@ public final class RefactoringAvailabilityTester {
 					list.add(members[index]);
 			}
 		}
-		return (IMember[]) list.toArray(new IMember[list.size()]);
+		return list.toArray(new IMember[list.size()]);
 	}
 
 	public static IResource[] getResources(final Object[] elements) {
-		List result= new ArrayList();
+		List<IResource> result= new ArrayList<IResource>();
 		for (int index= 0; index < elements.length; index++) {
 			if (elements[index] instanceof IResource)
-				result.add(elements[index]);
+				result.add((IResource) elements[index]);
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	public static IType getSingleSelectedType(IStructuredSelection selection) throws JavaModelException {
@@ -296,7 +296,7 @@ public final class RefactoringAvailabilityTester {
 	}
 
 	public static boolean isExternalizeStringsAvailable(final IStructuredSelection selection) throws JavaModelException {
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IJavaElement) {
 				IJavaElement javaElement= (IJavaElement)element;
@@ -329,7 +329,8 @@ public final class RefactoringAvailabilityTester {
 	}
 
 	public static boolean isExtractConstantAvailable(final JavaTextSelection selection) {
-		return (selection.resolveInClassInitializer() || selection.resolveInMethodBody() || selection.resolveInVariableInitializer()) && Checks.isExtractableExpression(selection.resolveSelectedNodes(), selection.resolveCoveringNode());
+		return (selection.resolveInClassInitializer() || selection.resolveInMethodBody() || selection.resolveInVariableInitializer() || selection.resolveInAnnotation())
+				&& Checks.isExtractableExpression(selection.resolveSelectedNodes(), selection.resolveCoveringNode());
 	}
 
 	public static boolean isExtractInterfaceAvailable(final IStructuredSelection selection) throws JavaModelException {
@@ -372,9 +373,9 @@ public final class RefactoringAvailabilityTester {
 	}
 
 	public static boolean isExtractMethodAvailable(final JavaTextSelection selection) {
-		return (selection.resolveInMethodBody()
-				|| selection.resolveInClassInitializer()
-				|| selection.resolveInVariableInitializer()) && RefactoringAvailabilityTester.isExtractMethodAvailable(selection.resolveSelectedNodes());
+		return (selection.resolveInMethodBody() || selection.resolveInClassInitializer() || selection.resolveInVariableInitializer())
+			&& !selection.resolveInAnnotation()
+			&& RefactoringAvailabilityTester.isExtractMethodAvailable(selection.resolveSelectedNodes());
 	}
 
 	public static boolean isExtractSupertypeAvailable(IMember member) throws JavaModelException {
@@ -431,13 +432,15 @@ public final class RefactoringAvailabilityTester {
 				if (type != null)
 					return Checks.isAvailable(type) && isExtractSupertypeAvailable(new IType[] { type});
 			}
-			for (final Iterator iterator= selection.iterator(); iterator.hasNext();) {
+			for (final Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
 				if (!(iterator.next() instanceof IMember))
 					return false;
 			}
-			final Set members= new HashSet();
-			members.addAll(Arrays.asList(selection.toArray()));
-			return isExtractSupertypeAvailable((IMember[]) members.toArray(new IMember[members.size()]));
+			final Set<IMember> members= new HashSet<IMember>();
+			@SuppressWarnings("unchecked")
+			List<IMember> selectionList= (List<IMember>) (List<?>) Arrays.asList(selection.toArray());
+			members.addAll(selectionList);
+			return isExtractSupertypeAvailable(members.toArray(new IMember[members.size()]));
 		}
 		return false;
 	}
@@ -451,7 +454,9 @@ public final class RefactoringAvailabilityTester {
 
 	public static boolean isExtractTempAvailable(final JavaTextSelection selection) {
 		final ASTNode[] nodes= selection.resolveSelectedNodes();
-		return (selection.resolveInMethodBody() || selection.resolveInClassInitializer()) && (Checks.isExtractableExpression(nodes, selection.resolveCoveringNode()) || (nodes != null && nodes.length == 1 && nodes[0] instanceof ExpressionStatement));
+		return (selection.resolveInMethodBody() || selection.resolveInClassInitializer())
+				&& !selection.resolveInAnnotation()
+				&& (Checks.isExtractableExpression(nodes, selection.resolveCoveringNode()) || (nodes != null && nodes.length == 1 && nodes[0] instanceof ExpressionStatement));
 	}
 
 	public static boolean isGeneralizeTypeAvailable(final IJavaElement element) throws JavaModelException {
@@ -546,7 +551,7 @@ public final class RefactoringAvailabilityTester {
 		if (selection.isEmpty())
 			return false;
 
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (!(element instanceof IJavaElement))
 				return false;
@@ -769,7 +774,9 @@ public final class RefactoringAvailabilityTester {
 	}
 
 	public static boolean isIntroduceParameterAvailable(final JavaTextSelection selection) {
-		return selection.resolveInMethodBody() && isIntroduceParameterAvailable(selection.resolveSelectedNodes(), selection.resolveCoveringNode());
+		return selection.resolveInMethodBody()
+				&& !selection.resolveInAnnotation()
+				&& isIntroduceParameterAvailable(selection.resolveSelectedNodes(), selection.resolveCoveringNode());
 	}
 
 	public static boolean isMoveAvailable(final IResource[] resources, final IJavaElement[] elements) throws JavaModelException {
@@ -950,13 +957,15 @@ public final class RefactoringAvailabilityTester {
 				if (type != null)
 					return Checks.isAvailable(type) && isPullUpAvailable(new IType[] { type});
 			}
-			for (final Iterator iterator= selection.iterator(); iterator.hasNext();) {
+			for (final Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
 				if (!(iterator.next() instanceof IMember))
 					return false;
 			}
-			final Set members= new HashSet();
-			members.addAll(Arrays.asList(selection.toArray()));
-			return isPullUpAvailable((IMember[]) members.toArray(new IMember[members.size()]));
+			final Set<IMember> members= new HashSet<IMember>();
+			@SuppressWarnings("unchecked")
+			List<IMember> selectionList= (List<IMember>) (List<?>) Arrays.asList(selection.toArray());
+			members.addAll(selectionList);
+			return isPullUpAvailable(members.toArray(new IMember[members.size()]));
 		}
 		return false;
 	}
@@ -1018,13 +1027,15 @@ public final class RefactoringAvailabilityTester {
 				if (type != null)
 					return isPushDownAvailable(new IType[] { type});
 			}
-			for (final Iterator iterator= selection.iterator(); iterator.hasNext();) {
+			for (final Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
 				if (!(iterator.next() instanceof IMember))
 					return false;
 			}
-			final Set members= new HashSet();
-			members.addAll(Arrays.asList(selection.toArray()));
-			return isPushDownAvailable((IMember[]) members.toArray(new IMember[members.size()]));
+			final Set<IMember> members= new HashSet<IMember>();
+			@SuppressWarnings("unchecked")
+			List<IMember> selectionList= (List<IMember>) (List<?>) Arrays.asList(selection.toArray());
+			members.addAll(selectionList);
+			return isPushDownAvailable(members.toArray(new IMember[members.size()]));
 		}
 		return false;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java
index e9e88a5..173037b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -535,6 +535,8 @@ public final class RefactoringCoreMessages extends NLS {
 
 	public static String ExtractMethodAnalyzer_cannot_extract_for_updater;
 
+	public static String ExtractMethodAnalyzer_cannot_extract_from_annotation;
+
 	public static String ExtractMethodAnalyzer_cannot_extract_method_name_reference;
 
 	public static String ExtractMethodAnalyzer_cannot_extract_part_of_qualified_name;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java
index 3ff5f9a..a651cab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -400,9 +400,9 @@ public final class RefactoringExecutionStarter {
 	public static void startMoveStaticMembersRefactoring(final IMember[] members, final Shell shell) throws JavaModelException {
 		if (!RefactoringAvailabilityTester.isMoveStaticAvailable(members))
 			return;
-		final Set set= new HashSet();
+		final Set<IMember> set= new HashSet<IMember>();
 		set.addAll(Arrays.asList(members));
-		final IMember[] elements= (IMember[]) set.toArray(new IMember[set.size()]);
+		final IMember[] elements= set.toArray(new IMember[set.size()]);
 		IJavaProject project= null;
 		if (elements.length > 0)
 			project= elements[0].getJavaProject();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringScopeFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringScopeFactory.java
index 20afa38..02e7e60 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringScopeFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringScopeFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ public class RefactoringScopeFactory {
 	/*
 	 * Adds to <code> projects </code> IJavaProject objects for all projects directly or indirectly referencing focus. @param projects IJavaProjects will be added to this set
 	 */
-	private static void addReferencingProjects(IJavaProject focus, Set projects) throws JavaModelException {
+	private static void addReferencingProjects(IJavaProject focus, Set<IJavaProject> projects) throws JavaModelException {
 		IProject[] referencingProjects= focus.getProject().getReferencingProjects();
 		for (int i= 0; i < referencingProjects.length; i++) {
 			IJavaProject candidate= JavaCore.create(referencingProjects[i]);
@@ -55,7 +55,7 @@ public class RefactoringScopeFactory {
 		}
 	}
 
-	private static void addRelatedReferencing(IJavaProject focus, Set projects) throws CoreException {
+	private static void addRelatedReferencing(IJavaProject focus, Set<IJavaProject> projects) throws CoreException {
 		IProject[] referencingProjects= focus.getProject().getReferencingProjects();
 		for (int i= 0; i < referencingProjects.length; i++) {
 			IJavaProject candidate= JavaCore.create(referencingProjects[i]);
@@ -72,7 +72,7 @@ public class RefactoringScopeFactory {
 		}
 	}
 
-	private static void addRelatedReferenced(IJavaProject focus, Set projects) throws CoreException {
+	private static void addRelatedReferenced(IJavaProject focus, Set<IJavaProject> projects) throws CoreException {
 		IProject[] referencedProjects= focus.getProject().getReferencedProjects();
 		for (int i= 0; i < referencedProjects.length; i++) {
 			IJavaProject candidate= JavaCore.create(referencedProjects[i]);
@@ -184,11 +184,11 @@ public class RefactoringScopeFactory {
 	 * @return the search scope
 	 */
 	public static IJavaSearchScope createReferencedScope(IJavaElement[] javaElements) {
-		Set projects= new HashSet();
+		Set<IJavaProject> projects= new HashSet<IJavaProject>();
 		for (int i= 0; i < javaElements.length; i++) {
 			projects.add(javaElements[i].getJavaProject());
 		}
-		IJavaProject[] prj= (IJavaProject[]) projects.toArray(new IJavaProject[projects.size()]);
+		IJavaProject[] prj= projects.toArray(new IJavaProject[projects.size()]);
 		return SearchEngine.createJavaSearchScope(prj, true);
 	}
 
@@ -201,11 +201,11 @@ public class RefactoringScopeFactory {
 	 * @return the search scope
 	 */
 	public static IJavaSearchScope createReferencedScope(IJavaElement[] javaElements, int includeMask) {
-		Set projects= new HashSet();
+		Set<IJavaProject> projects= new HashSet<IJavaProject>();
 		for (int i= 0; i < javaElements.length; i++) {
 			projects.add(javaElements[i].getJavaProject());
 		}
-		IJavaProject[] prj= (IJavaProject[]) projects.toArray(new IJavaProject[projects.size()]);
+		IJavaProject[] prj= projects.toArray(new IJavaProject[projects.size()]);
 		return SearchEngine.createJavaSearchScope(prj, includeMask);
 	}
 
@@ -227,10 +227,10 @@ public class RefactoringScopeFactory {
 	 * @return Array of IPackageFragmentRoot, one element for each packageFragmentRoot which lies within a project in <code> projects </code> .
 	 */
 	private static IPackageFragmentRoot[] getAllScopeElements(IJavaProject project, boolean onlySourceRoots) throws JavaModelException {
-		Collection referencingProjects= getReferencingProjects(project);
-		List result= new ArrayList();
-		for (Iterator it= referencingProjects.iterator(); it.hasNext();) {
-			IJavaProject javaProject= (IJavaProject) it.next();
+		Collection<IJavaProject> referencingProjects= getReferencingProjects(project);
+		List<IPackageFragmentRoot> result= new ArrayList<IPackageFragmentRoot>();
+		for (Iterator<IJavaProject> it= referencingProjects.iterator(); it.hasNext();) {
+			IJavaProject javaProject= it.next();
 			IPackageFragmentRoot[] roots= javaProject.getPackageFragmentRoots();
 			// Add all package fragment roots except archives
 			for (int i= 0; i < roots.length; i++) {
@@ -239,7 +239,7 @@ public class RefactoringScopeFactory {
 					result.add(root);
 			}
 		}
-		return (IPackageFragmentRoot[]) result.toArray(new IPackageFragmentRoot[result.size()]);
+		return result.toArray(new IPackageFragmentRoot[result.size()]);
 	}
 
 	/*
@@ -263,17 +263,17 @@ public class RefactoringScopeFactory {
 	}
 
 	private static IJavaProject[] getRelatedProjects(IJavaProject focus) throws CoreException {
-		final Set projects= new HashSet();
+		final Set<IJavaProject> projects= new HashSet<IJavaProject>();
 
 		addRelatedReferencing(focus, projects);
 		addRelatedReferenced(focus, projects);
 
 		projects.add(focus);
-		return (IJavaProject[]) projects.toArray(new IJavaProject[projects.size()]);
+		return projects.toArray(new IJavaProject[projects.size()]);
 	}
 
-	private static Collection getReferencingProjects(IJavaProject focus) throws JavaModelException {
-		Set projects= new HashSet();
+	private static Collection<IJavaProject> getReferencingProjects(IJavaProject focus) throws JavaModelException {
+		Set<IJavaProject> projects= new HashSet<IJavaProject>();
 
 		addReferencingProjects(focus, projects);
 		projects.add(focus);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine.java
index 01c27e4..f2d178e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,9 +59,10 @@ public class RefactoringSearchEngine {
 
 		class ResourceSearchRequestor extends SearchRequestor{
 			boolean hasPotentialMatches= false ;
-			Set resources= new HashSet(5);
+			Set<IResource> resources= new HashSet<IResource>(5);
 			private IResource fLastResource;
 
+			@Override
 			public void acceptSearchMatch(SearchMatch match) {
 				if (!tolerateInAccurateMatches && match.getAccuracy() == SearchMatch.A_INACCURATE) {
 					hasPotentialMatches= true;
@@ -79,9 +80,9 @@ public class RefactoringSearchEngine {
 			throw new JavaModelException(e);
 		}
 
-		List result= new ArrayList(requestor.resources.size());
-		for (Iterator iter= requestor.resources.iterator(); iter.hasNext(); ) {
-			IResource resource= (IResource) iter.next();
+		List<IJavaElement> result= new ArrayList<IJavaElement>(requestor.resources.size());
+		for (Iterator<IResource> iter= requestor.resources.iterator(); iter.hasNext(); ) {
+			IResource resource= iter.next();
 			IJavaElement element= JavaCore.create(resource);
 			if (element instanceof ICompilationUnit) {
 				result.add(element);
@@ -90,7 +91,7 @@ public class RefactoringSearchEngine {
 			}
 		}
 		addStatusErrors(status, requestor.hasPotentialMatches, hasNonCuMatches);
-		return (ICompilationUnit[]) result.toArray(new ICompilationUnit[result.size()]);
+		return result.toArray(new ICompilationUnit[result.size()]);
 	}
 
 	//TODO: throw CoreException
@@ -155,22 +156,22 @@ public class RefactoringSearchEngine {
 	 * @param status the status to report errors.
 	 * @return a SearchResultGroup[], grouped by SearchMatch#getResource()
 	 */
-	public static SearchResultGroup[] groupByCu(List matchList, RefactoringStatus status) {
-		Map/*<IResource, List<SearchMatch>>*/ grouped= new HashMap();
+	public static SearchResultGroup[] groupByCu(List<SearchMatch> matchList, RefactoringStatus status) {
+		Map<IResource, List<SearchMatch>> grouped= new HashMap<IResource, List<SearchMatch>>();
 		boolean hasPotentialMatches= false;
 		boolean hasNonCuMatches= false;
 
-		for (Iterator iter= matchList.iterator(); iter.hasNext();) {
-			SearchMatch searchMatch= (SearchMatch) iter.next();
+		for (Iterator<SearchMatch> iter= matchList.iterator(); iter.hasNext();) {
+			SearchMatch searchMatch= iter.next();
 			if (searchMatch.getAccuracy() == SearchMatch.A_INACCURATE)
 				hasPotentialMatches= true;
 			if (! grouped.containsKey(searchMatch.getResource()))
-				grouped.put(searchMatch.getResource(), new ArrayList(1));
-			((List) grouped.get(searchMatch.getResource())).add(searchMatch);
+				grouped.put(searchMatch.getResource(), new ArrayList<SearchMatch>(1));
+			grouped.get(searchMatch.getResource()).add(searchMatch);
 		}
 
-		for (Iterator iter= grouped.keySet().iterator(); iter.hasNext();) {
-			IResource resource= (IResource) iter.next();
+		for (Iterator<IResource> iter= grouped.keySet().iterator(); iter.hasNext();) {
+			IResource resource= iter.next();
 			IJavaElement element= JavaCore.create(resource);
 			if (! (element instanceof ICompilationUnit)) {
 				iter.remove();
@@ -180,10 +181,10 @@ public class RefactoringSearchEngine {
 
 		SearchResultGroup[] result= new SearchResultGroup[grouped.keySet().size()];
 		int i= 0;
-		for (Iterator iter= grouped.keySet().iterator(); iter.hasNext();) {
-			IResource resource= (IResource) iter.next();
-			List searchMatches= (List) grouped.get(resource);
-			SearchMatch[] matchArray= (SearchMatch[]) searchMatches.toArray(new SearchMatch[searchMatches.size()]);
+		for (Iterator<IResource> iter= grouped.keySet().iterator(); iter.hasNext();) {
+			IResource resource= iter.next();
+			List<SearchMatch> searchMatches= grouped.get(resource);
+			SearchMatch[] matchArray= searchMatches.toArray(new SearchMatch[searchMatches.size()]);
 			result[i]= new SearchResultGroup(resource, matchArray);
 			i++;
 		}
@@ -194,14 +195,14 @@ public class RefactoringSearchEngine {
 	public static SearchPattern createOrPattern(IJavaElement[] elements, int limitTo) {
 		if (elements == null || elements.length == 0)
 			return null;
-		Set set= new HashSet(Arrays.asList(elements));
-		Iterator iter= set.iterator();
-		IJavaElement first= (IJavaElement)iter.next();
+		Set<IJavaElement> set= new HashSet<IJavaElement>(Arrays.asList(elements));
+		Iterator<IJavaElement> iter= set.iterator();
+		IJavaElement first= iter.next();
 		SearchPattern pattern= SearchPattern.createPattern(first, limitTo, SearchUtils.GENERICS_AGNOSTIC_MATCH_RULE);
 		if (pattern == null) // check for bug 90138
 			throw new IllegalArgumentException("Invalid java element: " + first.getHandleIdentifier() + "\n" + first.toString()); //$NON-NLS-1$ //$NON-NLS-2$
 		while(iter.hasNext()){
-			IJavaElement each= (IJavaElement)iter.next();
+			IJavaElement each= iter.next();
 			SearchPattern nextPattern= SearchPattern.createPattern(each, limitTo, SearchUtils.GENERICS_AGNOSTIC_MATCH_RULE);
 			if (nextPattern == null) // check for bug 90138
 				throw new IllegalArgumentException("Invalid java element: " + each.getHandleIdentifier() + "\n" + each.toString()); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine2.java
index ca81ef3..881d9d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringSearchEngine2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,11 +75,12 @@ public final class RefactoringSearchEngine2 {
 	private class RefactoringCompilationUnitCollector extends RefactoringSearchCollector {
 
 		/** The collected compilation units */
-		private final Set fCollectedUnits= new HashSet();
+		private final Set<ICompilationUnit> fCollectedUnits= new HashSet<ICompilationUnit>();
 
 		/** The inaccurate matches */
-		private final Set fInaccurateMatches= new HashSet();
+		private final Set<SearchMatch> fInaccurateMatches= new HashSet<SearchMatch>();
 
+		@Override
 		public final void acceptSearchMatch(final SearchMatch match) throws CoreException {
 			final SearchMatch accepted= fRequestor.acceptSearchMatch(match);
 			if (accepted != null) {
@@ -87,7 +88,7 @@ public final class RefactoringSearchEngine2 {
 				if (!resource.equals(fLastResource)) {
 					final IJavaElement element= JavaCore.create(resource);
 					if (element instanceof ICompilationUnit)
-						fCollectedUnits.add(element);
+						fCollectedUnits.add((ICompilationUnit) element);
 				}
 				if (fInaccurate && accepted.getAccuracy() == SearchMatch.A_INACCURATE && !fInaccurateMatches.contains(accepted)) {
 					fStatus.addEntry(fSeverity, Messages.format(RefactoringCoreMessages.RefactoringSearchEngine_inaccurate_match, BasicElementLabels.getResourceName(accepted.getResource())), null, null, RefactoringStatusEntry.NO_CODE);
@@ -96,21 +97,25 @@ public final class RefactoringSearchEngine2 {
 			}
 		}
 
+		@Override
 		public final void clearResults() {
 			super.clearResults();
 			fCollectedUnits.clear();
 			fInaccurateMatches.clear();
 		}
 
-		public final Collection getBinaryResources() {
-			return Collections.EMPTY_SET;
+		@Override
+		public final Collection<IResource> getBinaryResources() {
+			return Collections.emptySet();
 		}
 
-		public final Collection getCollectedMatches() {
+		@Override
+		public final Collection<ICompilationUnit> getCollectedMatches() {
 			return fCollectedUnits;
 		}
 
-		public final Collection getInaccurateMatches() {
+		@Override
+		public final Collection<SearchMatch> getInaccurateMatches() {
 			return fInaccurateMatches;
 		}
 	}
@@ -123,25 +128,26 @@ public final class RefactoringSearchEngine2 {
 			fLastResource= null;
 		}
 
-		public abstract Collection getBinaryResources();
+		public abstract Collection<IResource> getBinaryResources();
 
-		public abstract Collection getCollectedMatches();
+		public abstract Collection<?> getCollectedMatches();
 
-		public abstract Collection getInaccurateMatches();
+		public abstract Collection<SearchMatch> getInaccurateMatches();
 	}
 
 	/** Search requestor which collects every search match */
 	private class RefactoringSearchMatchCollector extends RefactoringSearchCollector {
 
 		/** The binary resources */
-		private final Set fBinaryResources= new HashSet();
+		private final Set<IResource> fBinaryResources= new HashSet<IResource>();
 
 		/** The collected matches */
-		private final List fCollectedMatches= new ArrayList();
+		private final List<SearchMatch> fCollectedMatches= new ArrayList<SearchMatch>();
 
 		/** The inaccurate matches */
-		private final Set fInaccurateMatches= new HashSet();
+		private final Set<SearchMatch> fInaccurateMatches= new HashSet<SearchMatch>();
 
+		@Override
 		public final void acceptSearchMatch(final SearchMatch match) throws CoreException {
 			final SearchMatch accepted= fRequestor.acceptSearchMatch(match);
 			if (accepted != null) {
@@ -167,6 +173,7 @@ public final class RefactoringSearchEngine2 {
 			}
 		}
 
+		@Override
 		public final void clearResults() {
 			super.clearResults();
 			fCollectedMatches.clear();
@@ -174,15 +181,18 @@ public final class RefactoringSearchEngine2 {
 			fBinaryResources.clear();
 		}
 
-		public final Collection getBinaryResources() {
+		@Override
+		public final Collection<IResource> getBinaryResources() {
 			return fBinaryResources;
 		}
 
-		public final Collection getCollectedMatches() {
+		@Override
+		public final Collection<SearchMatch> getCollectedMatches() {
 			return fCollectedMatches;
 		}
 
-		public final Collection getInaccurateMatches() {
+		@Override
+		public final Collection<SearchMatch> getInaccurateMatches() {
 			return fInaccurateMatches;
 		}
 	}
@@ -263,10 +273,10 @@ public final class RefactoringSearchEngine2 {
 	 */
 	public final ICompilationUnit[] getAffectedCompilationUnits() {
 		if (fGranularity == GRANULARITY_COMPILATION_UNIT) {
-			final Collection collection= getCollector().getCollectedMatches();
+			final Collection<?> collection= getCollector().getCollectedMatches();
 			final ICompilationUnit[] units= new ICompilationUnit[collection.size()];
 			int index= 0;
-			for (final Iterator iterator= collection.iterator(); iterator.hasNext(); index++)
+			for (final Iterator<?> iterator= collection.iterator(); iterator.hasNext(); index++)
 				units[index]= (ICompilationUnit) iterator.next();
 			return units;
 		} else {
@@ -283,27 +293,31 @@ public final class RefactoringSearchEngine2 {
 	 * <p>
 	 * In order to retrieve the java projects, grouping by resource must have been enabled before searching.
 	 *
-	 * @return the java projects of the previous queries (element type: <code>&ltIJavaProject, Collection&ltSearchResultGroup&gt&gt</code>)
+	 * @return the java projects of the previous queries (element type:
+	 * <code><IJavaProject, Collection<SearchResultGroup>></code> if granularity is {@link #GRANULARITY_SEARCH_MATCH} or
+	 * <code><IJavaProject, Collection<ICompilationUnit>></code> if it is {@link #GRANULARITY_COMPILATION_UNIT}).
 	 */
-	public final Map getAffectedProjects() {
-		final Map map= new HashMap();
+	public final Map<IJavaProject, ? extends Set<?>> getAffectedProjects() {
 		IJavaProject project= null;
 		ICompilationUnit unit= null;
 		if (fGranularity == GRANULARITY_COMPILATION_UNIT) {
+			final Map<IJavaProject, Set<ICompilationUnit>> map= new HashMap<IJavaProject, Set<ICompilationUnit>>();
 			final ICompilationUnit[] units= getAffectedCompilationUnits();
 			for (int index= 0; index < units.length; index++) {
 				unit= units[index];
 				project= unit.getJavaProject();
 				if (project != null) {
-					Set set= (Set) map.get(project);
+					Set<ICompilationUnit> set= map.get(project);
 					if (set == null) {
-						set= new HashSet();
+						set= new HashSet<ICompilationUnit>();
 						map.put(project, set);
 					}
 					set.add(unit);
 				}
 			}
+			return map;
 		} else {
+			final Map<IJavaProject, Set<SearchResultGroup>> map= new HashMap<IJavaProject, Set<SearchResultGroup>>();
 			final SearchResultGroup[] groups= getGroupedMatches();
 			SearchResultGroup group= null;
 			for (int index= 0; index < groups.length; index++) {
@@ -312,17 +326,17 @@ public final class RefactoringSearchEngine2 {
 				if (unit != null) {
 					project= unit.getJavaProject();
 					if (project != null) {
-						Set set= (Set) map.get(project);
+						Set<SearchResultGroup> set= map.get(project);
 						if (set == null) {
-							set= new HashSet();
+							set= new HashSet<SearchResultGroup>();
 							map.put(project, set);
 						}
 						set.add(group);
 					}
 				}
 			}
+			return map;
 		}
-		return map;
 	}
 
 	/**
@@ -348,32 +362,32 @@ public final class RefactoringSearchEngine2 {
 	 * @return the found search matches
 	 */
 	private SearchResultGroup[] getGroupedMatches() {
-		final Map grouped= new HashMap();
-		List matches= null;
+		final Map<IResource, List<SearchMatch>> grouped= new HashMap<IResource, List<SearchMatch>>();
+		List<SearchMatch> matches= null;
 		IResource resource= null;
 		SearchMatch match= null;
-		for (final Iterator iterator= getSearchMatches().iterator(); iterator.hasNext();) {
+		for (final Iterator<?> iterator= getSearchMatches().iterator(); iterator.hasNext();) {
 			match= (SearchMatch) iterator.next();
 			resource= match.getResource();
 			if (!grouped.containsKey(resource))
-				grouped.put(resource, new ArrayList(4));
-			matches= (List) grouped.get(resource);
+				grouped.put(resource, new ArrayList<SearchMatch>(4));
+			matches= grouped.get(resource);
 			matches.add(match);
 		}
 		if (fBinary) {
-			final Collection collection= getCollector().getBinaryResources();
-			for (final Iterator iterator= grouped.keySet().iterator(); iterator.hasNext();) {
-				resource= (IResource) iterator.next();
+			final Collection<IResource> collection= getCollector().getBinaryResources();
+			for (final Iterator<IResource> iterator= grouped.keySet().iterator(); iterator.hasNext();) {
+				resource= iterator.next();
 				if (collection.contains(resource))
 					iterator.remove();
 			}
 		}
 		final SearchResultGroup[] result= new SearchResultGroup[grouped.keySet().size()];
 		int index= 0;
-		for (final Iterator iterator= grouped.keySet().iterator(); iterator.hasNext();) {
-			resource= (IResource) iterator.next();
-			matches= (List) grouped.get(resource);
-			result[index++]= new SearchResultGroup(resource, ((SearchMatch[]) matches.toArray(new SearchMatch[matches.size()])));
+		for (final Iterator<IResource> iterator= grouped.keySet().iterator(); iterator.hasNext();) {
+			resource= iterator.next();
+			matches= grouped.get(resource);
+			result[index++]= new SearchResultGroup(resource, matches.toArray(new SearchMatch[matches.size()]));
 		}
 		return result;
 	}
@@ -414,13 +428,13 @@ public final class RefactoringSearchEngine2 {
 	 *
 	 * @return the filtered search matches
 	 */
-	private Collection getSearchMatches() {
-		Collection results= null;
+	private Collection<?> getSearchMatches() {
+		Collection<?> results= null;
 		if (fInaccurate) {
-			results= new LinkedList(getCollector().getCollectedMatches());
-			final Collection collection= getCollector().getInaccurateMatches();
+			results= new LinkedList<Object>(getCollector().getCollectedMatches());
+			final Collection<SearchMatch> collection= getCollector().getInaccurateMatches();
 			SearchMatch match= null;
-			for (final Iterator iterator= results.iterator(); iterator.hasNext();) {
+			for (final Iterator<?> iterator= results.iterator(); iterator.hasNext();) {
 				match= (SearchMatch) iterator.next();
 				if (collection.contains(match))
 					iterator.remove();
@@ -445,12 +459,12 @@ public final class RefactoringSearchEngine2 {
 	 * @return the found search matches
 	 */
 	private SearchMatch[] getUngroupedMatches() {
-		Collection results= null;
+		Collection<?> results= null;
 		if (fBinary) {
-			results= new LinkedList(getSearchMatches());
-			final Collection collection= getCollector().getBinaryResources();
+			results= new LinkedList<Object>(getSearchMatches());
+			final Collection<IResource> collection= getCollector().getBinaryResources();
 			SearchMatch match= null;
-			for (final Iterator iterator= results.iterator(); iterator.hasNext();) {
+			for (final Iterator<?> iterator= results.iterator(); iterator.hasNext();) {
 				match= (SearchMatch) iterator.next();
 				if (collection.contains(match.getResource()))
 					iterator.remove();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ReturnTypeInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ReturnTypeInfo.java
index f7ac50e..eab5814 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ReturnTypeInfo.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ReturnTypeInfo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ public class ReturnTypeInfo {
 		return !fOldTypeName.equals(fNewTypeName);
 	}
 
+	@Override
 	public String toString() {
 		return fOldTypeName + " -> " + fNewTypeName; //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/SearchResultGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/SearchResultGroup.java
index 4967032..349e3d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/SearchResultGroup.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/SearchResultGroup.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,12 +29,12 @@ import org.eclipse.jdt.internal.corext.util.SearchUtils;
 public class SearchResultGroup {
 
 	private final IResource fResouce;
-	private final List fSearchMatches;
+	private final List<SearchMatch> fSearchMatches;
 
 	public SearchResultGroup(IResource res, SearchMatch[] matches){
 		Assert.isNotNull(matches);
 		fResouce= res;
-		fSearchMatches= new ArrayList(Arrays.asList(matches));
+		fSearchMatches= new ArrayList<SearchMatch>(Arrays.asList(matches));
 	}
 
 	public void add(SearchMatch match) {
@@ -47,15 +47,15 @@ public class SearchResultGroup {
 	}
 
 	public SearchMatch[] getSearchResults() {
-		return (SearchMatch[]) fSearchMatches.toArray(new SearchMatch[fSearchMatches.size()]);
+		return fSearchMatches.toArray(new SearchMatch[fSearchMatches.size()]);
 	}
 
 	public static IResource[] getResources(SearchResultGroup[] searchResultGroups){
-		Set resourceSet= new HashSet(searchResultGroups.length);
+		Set<IResource> resourceSet= new HashSet<IResource>(searchResultGroups.length);
 		for (int i= 0; i < searchResultGroups.length; i++) {
 			resourceSet.add(searchResultGroups[i].getResource());
 		}
-		return (IResource[]) resourceSet.toArray(new IResource[resourceSet.size()]);
+		return resourceSet.toArray(new IResource[resourceSet.size()]);
 	}
 
 	public ICompilationUnit getCompilationUnit(){
@@ -64,11 +64,12 @@ public class SearchResultGroup {
 		return SearchUtils.getCompilationUnit(getSearchResults()[0]);
 	}
 
+	@Override
 	public String toString() {
 		StringBuffer buf= new StringBuffer(fResouce.getFullPath().toString());
 		buf.append('\n');
 		for (int i= 0; i < fSearchMatches.size(); i++) {
-			SearchMatch match= (SearchMatch) fSearchMatches.get(i);
+			SearchMatch match= fSearchMatches.get(i);
 			buf.append("  ").append(match.getOffset()).append(", ").append(match.getLength()); //$NON-NLS-1$//$NON-NLS-2$
 			buf.append(match.getAccuracy() == SearchMatch.A_ACCURATE ? "; acc" : "; inacc"); //$NON-NLS-1$//$NON-NLS-2$
 			if (match.isInsideDocComment())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java
index e3ac639..eb3d032 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,6 @@ import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.WorkingCopyOwner;
 import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
@@ -82,6 +81,7 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.internal.corext.util.TypeNameMatchCollector;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaTypeCompletionProcessor;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
@@ -92,10 +92,10 @@ public class TypeContextChecker {
 
 		private final IMethod fMethod;
 		private final StubTypeContext fStubTypeContext;
-		private final List/*<ParameterInfo>*/ fParameterInfos;
+		private final List<ParameterInfo> fParameterInfos;
 		private final ReturnTypeInfo fReturnTypeInfo;
 
-		public MethodTypesChecker(IMethod method, StubTypeContext stubTypeContext, List/*<ParameterInfo>*/ parameterInfos, ReturnTypeInfo returnTypeInfo) {
+		public MethodTypesChecker(IMethod method, StubTypeContext stubTypeContext, List<ParameterInfo> parameterInfos, ReturnTypeInfo returnTypeInfo) {
 			fMethod= method;
 			fStubTypeContext= stubTypeContext;
 			fParameterInfos= parameterInfos;
@@ -111,7 +111,7 @@ public class TypeContextChecker {
 			int parameterCount= fParameterInfos.size();
 			String[] types= new String[parameterCount + 1];
 			for (int i= 0; i < parameterCount; i++)
-				types[i]= ParameterInfo.stripEllipsis(((ParameterInfo) fParameterInfos.get(i)).getNewTypeName());
+				types[i]= ParameterInfo.stripEllipsis((fParameterInfos.get(i)).getNewTypeName());
 			types[parameterCount]= fReturnTypeInfo.getNewTypeName();
 			RefactoringStatus[] semanticsResults= new RefactoringStatus[parameterCount + 1];
 			ITypeBinding[] typeBindings= resolveBindings(types, semanticsResults, true);
@@ -126,7 +126,7 @@ public class TypeContextChecker {
 				typeBindings= resolveBindings(types, semanticsResults2, false);
 
 			for (int i= 0; i < fParameterInfos.size(); i++) {
-				ParameterInfo parameterInfo= (ParameterInfo) fParameterInfos.get(i);
+				ParameterInfo parameterInfo= fParameterInfos.get(i);
 				if (!parameterInfo.isResolve())
 					continue;
 				if (parameterInfo.getOldTypeBinding() != null && ! parameterInfo.isTypeNameChanged()) {
@@ -166,15 +166,15 @@ public class TypeContextChecker {
 			ICompilationUnit wc= fMethod.getCompilationUnit().getWorkingCopy(new WorkingCopyOwner() {/*subclass*/}, new NullProgressMonitor());
 			try {
 				wc.getBuffer().setContents(cuString.toString());
-				CompilationUnit compilationUnit= new RefactoringASTParser(AST.JLS3).parse(wc, true);
+				CompilationUnit compilationUnit= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(wc, true);
 				ASTNode method= NodeFinder.perform(compilationUnit, offsetBeforeMethodName, METHOD_NAME.length()).getParent();
 				Type[] typeNodes= new Type[types.length];
 				if (method instanceof MethodDeclaration) {
 					MethodDeclaration methodDeclaration= (MethodDeclaration) method;
 					typeNodes[parameterCount]= methodDeclaration.getReturnType2();
-					List/*<SingleVariableDeclaration>*/ parameters= methodDeclaration.parameters();
+					List<SingleVariableDeclaration> parameters= methodDeclaration.parameters();
 					for (int i= 0; i < parameterCount; i++)
-						typeNodes[i]= ((SingleVariableDeclaration) parameters.get(i)).getType();
+						typeNodes[i]= parameters.get(i).getType();
 
 				} else if (method instanceof AnnotationTypeMemberDeclaration) {
 					typeNodes[0]= ((AnnotationTypeMemberDeclaration) method).getType();
@@ -253,14 +253,17 @@ public class TypeContextChecker {
 				}
 			}
 			ASTFlattener flattener= new ASTFlattener() {
+				@Override
 				public boolean visit(SimpleName node) {
 					appendResolved(node.getIdentifier());
 					return false;
 				}
+				@Override
 				public boolean visit(QualifiedName node) {
 					appendResolved(node.getFullyQualifiedName());
 					return false;
 				}
+				@Override
 				public boolean visit(QualifiedType node) {
 					appendResolved(ASTNodes.asString(node));
 					return false;
@@ -296,13 +299,13 @@ public class TypeContextChecker {
 				}
 			}
 
-			List typeRefsFound= findTypeInfos(elementTypeName, declaringType, pm);
+			List<TypeNameMatch> typeRefsFound= findTypeInfos(elementTypeName, declaringType, pm);
 			if (typeRefsFound.size() == 0){
 				String msg= Messages.format(RefactoringCoreMessages.TypeContextChecker_not_unique, BasicElementLabels.getJavaElementName(elementTypeName));
 				status.addError(msg);
 				return elementTypeName;
 			} else if (typeRefsFound.size() == 1){
-				TypeNameMatch typeInfo= (TypeNameMatch) typeRefsFound.get(0);
+				TypeNameMatch typeInfo= typeRefsFound.get(0);
 				return typeInfo.getFullyQualifiedName();
 			} else {
 				Assert.isTrue(typeRefsFound.size() > 1);
@@ -313,17 +316,17 @@ public class TypeContextChecker {
 			}
 		}
 
-		private static List findTypeInfos(String typeName, IType contextType, IProgressMonitor pm) throws JavaModelException {
+		private static List<TypeNameMatch> findTypeInfos(String typeName, IType contextType, IProgressMonitor pm) throws JavaModelException {
 			IJavaSearchScope scope= SearchEngine.createJavaSearchScope(new IJavaProject[]{contextType.getJavaProject()}, true);
 			IPackageFragment currPackage= contextType.getPackageFragment();
-			ArrayList collectedInfos= new ArrayList();
+			ArrayList<TypeNameMatch> collectedInfos= new ArrayList<TypeNameMatch>();
 			TypeNameMatchCollector requestor= new TypeNameMatchCollector(collectedInfos);
 			int matchMode= SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE;
 			new SearchEngine().searchAllTypeNames(null, matchMode, typeName.toCharArray(), matchMode, IJavaSearchConstants.TYPE, scope, requestor, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, pm);
 
-			List result= new ArrayList();
-			for (Iterator iter= collectedInfos.iterator(); iter.hasNext();) {
-				TypeNameMatch curr= (TypeNameMatch) iter.next();
+			List<TypeNameMatch> result= new ArrayList<TypeNameMatch>();
+			for (Iterator<TypeNameMatch> iter= collectedInfos.iterator(); iter.hasNext();) {
+				TypeNameMatch curr= iter.next();
 				IType type= curr.getType();
 				if (type != null) {
 					boolean visible=true;
@@ -345,10 +348,10 @@ public class TypeContextChecker {
 	private static class MethodTypesSyntaxChecker {
 
 		private final IMethod fMethod;
-		private final List/*<ParameterInfo>*/ fParameterInfos;
+		private final List<ParameterInfo> fParameterInfos;
 		private final ReturnTypeInfo fReturnTypeInfo;
 
-		public MethodTypesSyntaxChecker(IMethod method, List/*<ParameterInfo>*/ parameterInfos, ReturnTypeInfo returnTypeInfo) {
+		public MethodTypesSyntaxChecker(IMethod method, List<ParameterInfo> parameterInfos, ReturnTypeInfo returnTypeInfo) {
 			fMethod= method;
 			fParameterInfos= parameterInfos;
 			fReturnTypeInfo= returnTypeInfo;
@@ -359,7 +362,7 @@ public class TypeContextChecker {
 			RefactoringStatus[] results= new RefactoringStatus[parameterCount + 1];
 			results[parameterCount]= checkReturnTypeSyntax();
 			for (int i= 0; i < parameterCount; i++) {
-				ParameterInfo info= (ParameterInfo) fParameterInfos.get(i);
+				ParameterInfo info= fParameterInfos.get(i);
 				if (!info.isDeleted())
 					results[i]= checkParameterTypeSyntax(info);
 			}
@@ -378,7 +381,7 @@ public class TypeContextChecker {
 				String msg= RefactoringCoreMessages.TypeContextChecker_return_type_not_empty;
 				return RefactoringStatus.createFatalErrorStatus(msg);
 			}
-			List problemsCollector= new ArrayList(0);
+			List<String> problemsCollector= new ArrayList<String>(0);
 			Type parsedType= parseType(newTypeName, fMethod.getJavaProject(), problemsCollector);
 			if (parsedType == null) {
 				String msg= Messages.format(RefactoringCoreMessages.TypeContextChecker_invalid_return_type, BasicElementLabels.getJavaElementName(newTypeName));
@@ -388,8 +391,8 @@ public class TypeContextChecker {
 				return null;
 
 			RefactoringStatus result= new RefactoringStatus();
-			for (Iterator iter= problemsCollector.iterator(); iter.hasNext();) {
-				String[] keys= new String[]{ BasicElementLabels.getJavaElementName(newTypeName), BasicElementLabels.getJavaElementName((String) iter.next())};
+			for (Iterator<String> iter= problemsCollector.iterator(); iter.hasNext();) {
+				String[] keys= new String[]{ BasicElementLabels.getJavaElementName(newTypeName), BasicElementLabels.getJavaElementName(iter.next())};
 				String msg= Messages.format(RefactoringCoreMessages.TypeContextChecker_invalid_return_type_syntax, keys);
 				result.addError(msg);
 			}
@@ -409,7 +412,7 @@ public class TypeContextChecker {
 
 	}
 
-	private static Type parseType(String typeString, IJavaProject javaProject, List/*<IProblem>*/ problemsCollector) {
+	private static Type parseType(String typeString, IJavaProject javaProject, List<String> problemsCollector) {
 		if ("".equals(typeString.trim())) //speed up for a common case //$NON-NLS-1$
 			return null;
 		if (! typeString.trim().equals(typeString))
@@ -420,7 +423,7 @@ public class TypeContextChecker {
 		int offset= cuBuff.length();
 		cuBuff.append(typeString).append(" m();}"); //$NON-NLS-1$
 
-		ASTParser p= ASTParser.newParser(AST.JLS3);
+		ASTParser p= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		p.setSource(cuBuff.toString().toCharArray());
 		p.setProject(javaProject);
 		CompilationUnit cu= (CompilationUnit) p.createAST(null);
@@ -455,12 +458,12 @@ public class TypeContextChecker {
 			return typeBinding;
 	}
 
-	public static RefactoringStatus[] checkAndResolveMethodTypes(IMethod method, StubTypeContext stubTypeContext, List parameterInfos, ReturnTypeInfo returnTypeInfo) throws CoreException {
+	public static RefactoringStatus[] checkAndResolveMethodTypes(IMethod method, StubTypeContext stubTypeContext, List<ParameterInfo> parameterInfos, ReturnTypeInfo returnTypeInfo) throws CoreException {
 		MethodTypesChecker checker= new MethodTypesChecker(method, stubTypeContext, parameterInfos, returnTypeInfo);
 		return checker.checkAndResolveMethodTypes();
 	}
 
-	public static RefactoringStatus[] checkMethodTypesSyntax(IMethod method, List parameterInfos, ReturnTypeInfo returnTypeInfo) {
+	public static RefactoringStatus[] checkMethodTypesSyntax(IMethod method, List<ParameterInfo> parameterInfos, ReturnTypeInfo returnTypeInfo) {
 		MethodTypesSyntaxChecker checker= new MethodTypesSyntaxChecker(method, parameterInfos, returnTypeInfo);
 		return checker.checkSyntax();
 	}
@@ -479,7 +482,7 @@ public class TypeContextChecker {
 			return RefactoringStatus.createFatalErrorStatus(msg);
 		}
 
-		List problemsCollector= new ArrayList(0);
+		List<String> problemsCollector= new ArrayList<String>(0);
 		Type parsedType= parseType(newTypeName, project, problemsCollector);
 		boolean valid= parsedType != null;
 		if (valid && parsedType instanceof PrimitiveType)
@@ -492,9 +495,9 @@ public class TypeContextChecker {
 			return null;
 
 		RefactoringStatus result= new RefactoringStatus();
-		for (Iterator iter= problemsCollector.iterator(); iter.hasNext();) {
+		for (Iterator<String> iter= problemsCollector.iterator(); iter.hasNext();) {
 			String msg= Messages.format(RefactoringCoreMessages.TypeContextChecker_invalid_type_syntax,
-					new String[]{BasicElementLabels.getJavaElementName(newTypeName), BasicElementLabels.getJavaElementName((String) iter.next())});
+					new String[]{BasicElementLabels.getJavaElementName(newTypeName), BasicElementLabels.getJavaElementName(iter.next())});
 			result.addError(msg);
 		}
 		return result;
@@ -508,9 +511,9 @@ public class TypeContextChecker {
 		PackageDeclaration pack= root.getPackage();
 		if (pack != null)
 			introEnd= pack.getStartPosition() + pack.getLength();
-		List imports= root.imports();
+		List<ImportDeclaration> imports= root.imports();
 		if (imports.size() > 0) {
-			ImportDeclaration lastImport= (ImportDeclaration) imports.get(imports.size() - 1);
+			ImportDeclaration lastImport= imports.get(imports.size() - 1);
 			introEnd= lastImport.getStartPosition() + lastImport.getLength();
 		}
 		bufBefore.append(cu.getBuffer().getText(0, introEnd));
@@ -521,10 +524,10 @@ public class TypeContextChecker {
 		return new StubTypeContext(cu, bufBefore.toString(), bufAfter.toString());
 	}
 
-	private static void fillWithTypeStubs(final StringBuffer bufBefore, final StringBuffer bufAfter, final int focalPosition, List/*<? extends BodyDeclaration>*/ types) {
+	private static void fillWithTypeStubs(final StringBuffer bufBefore, final StringBuffer bufAfter, final int focalPosition, List<? extends BodyDeclaration> types) {
 		StringBuffer buf;
-		for (Iterator iter= types.iterator(); iter.hasNext();) {
-			BodyDeclaration bodyDeclaration= (BodyDeclaration) iter.next();
+		for (Iterator<? extends BodyDeclaration> iter= types.iterator(); iter.hasNext();) {
+			BodyDeclaration bodyDeclaration= iter.next();
 			if (! (bodyDeclaration instanceof AbstractTypeDeclaration)) {
 				//account for local classes:
 				if (! (bodyDeclaration instanceof MethodDeclaration))
@@ -542,10 +545,12 @@ public class TypeContextChecker {
 				buf.append("(){\n"); //$NON-NLS-1$
 				Block body= methodDeclaration.getBody();
 				body.accept(new HierarchicalASTVisitor() {
+					@Override
 					public boolean visit(AbstractTypeDeclaration node) {
 						fillWithTypeStubs(bufBefore, bufAfter, focalPosition, Collections.singletonList(node));
 						return false;
 					}
+					@Override
 					public boolean visit(ClassInstanceCreation node) {
 						AnonymousClassDeclaration anonDecl= node.getAnonymousClassDeclaration();
 						if (anonDecl == null)
@@ -580,7 +585,7 @@ public class TypeContextChecker {
 					buf.append(" extends "); //$NON-NLS-1$
 					buf.append(ASTNodes.asString(type.getSuperclassType()));
 				}
-				List superInterfaces= type.superInterfaceTypes();
+				List<Type> superInterfaces= type.superInterfaceTypes();
 				appendSuperInterfaces(buf, superInterfaces);
 
 			} else if (decl instanceof AnnotationTypeDeclaration) {
@@ -592,7 +597,7 @@ public class TypeContextChecker {
 				EnumDeclaration enumDecl= (EnumDeclaration) decl;
 				buf.append("enum "); //$NON-NLS-1$
 				buf.append(enumDecl.getName().getIdentifier());
-				List superInterfaces= enumDecl.superInterfaceTypes();
+				List<Type> superInterfaces= enumDecl.superInterfaceTypes();
 				appendSuperInterfaces(buf, superInterfaces);
 			}
 
@@ -605,12 +610,12 @@ public class TypeContextChecker {
 		}
 	}
 
-	private static void appendTypeParameters(StringBuffer buf, List typeParameters) {
+	private static void appendTypeParameters(StringBuffer buf, List<TypeParameter> typeParameters) {
 		int typeParametersCount= typeParameters.size();
 		if (typeParametersCount > 0) {
 			buf.append('<');
 			for (int i= 0; i < typeParametersCount; i++) {
-				TypeParameter typeParameter= (TypeParameter) typeParameters.get(i);
+				TypeParameter typeParameter= typeParameters.get(i);
 				buf.append(ASTNodes.asString(typeParameter));
 				if (i < typeParametersCount - 1)
 					buf.append(',');
@@ -619,9 +624,9 @@ public class TypeContextChecker {
 		}
 	}
 
-	private static void appendModifiers(StringBuffer buf, List modifiers) {
-		for (Iterator iterator= modifiers.iterator(); iterator.hasNext();) {
-			IExtendedModifier extendedModifier= (IExtendedModifier) iterator.next();
+	private static void appendModifiers(StringBuffer buf, List<IExtendedModifier> modifiers) {
+		for (Iterator<IExtendedModifier> iterator= modifiers.iterator(); iterator.hasNext();) {
+			IExtendedModifier extendedModifier= iterator.next();
 			if (extendedModifier.isModifier()) {
 				Modifier modifier= (Modifier) extendedModifier;
 				buf.append(modifier.getKeyword().toString()).append(' ');
@@ -629,12 +634,12 @@ public class TypeContextChecker {
 		}
 	}
 
-	private static void appendSuperInterfaces(StringBuffer buf, List superInterfaces) {
+	private static void appendSuperInterfaces(StringBuffer buf, List<Type> superInterfaces) {
 		int superInterfaceCount= superInterfaces.size();
 		if (superInterfaceCount > 0) {
 			buf.append(" implements "); //$NON-NLS-1$
 			for (int i= 0; i < superInterfaceCount; i++) {
-				Type superInterface= (Type) superInterfaces.get(i);
+				Type superInterface= superInterfaces.get(i);
 				buf.append(ASTNodes.asString(superInterface));
 				if (i < superInterfaceCount - 1)
 					buf.append(',');
@@ -660,7 +665,7 @@ public class TypeContextChecker {
 				ISourceRange typeSourceRange= enclosingType.getSourceRange();
 				int focalPosition= typeSourceRange.getOffset() + typeSourceRange.getLength() - 1; // before closing brace
 
-				ASTParser parser= ASTParser.newParser(AST.JLS3);
+				ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				parser.setSource(cu);
 				parser.setFocalPosition(focalPosition);
 				CompilationUnit compilationUnit= (CompilationUnit) parser.createAST(null);
@@ -705,9 +710,9 @@ public class TypeContextChecker {
 		int offset= cuBuff.length();
 		cuBuff.append(superType).append(" {}"); //$NON-NLS-1$
 
-		ASTParser p= ASTParser.newParser(AST.JLS3);
+		ASTParser p= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		p.setSource(cuBuff.toString().toCharArray());
-		Map options= new HashMap();
+		Map<String, String> options= new HashMap<String, String>();
 		JavaModelUtil.set50ComplianceOptions(options);
 		p.setCompilerOptions(options);
 		CompilationUnit cu= (CompilationUnit) p.createAST(null);
@@ -739,7 +744,7 @@ public class TypeContextChecker {
 			ICompilationUnit wc= typeHandle.getCompilationUnit().getWorkingCopy(new WorkingCopyOwner() {/*subclass*/}, new NullProgressMonitor());
 			try {
 				wc.getBuffer().setContents(cuString.toString());
-				CompilationUnit compilationUnit= new RefactoringASTParser(AST.JLS3).parse(wc, true);
+				CompilationUnit compilationUnit= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(wc, true);
 				ASTNode type= NodeFinder.perform(compilationUnit, superClassContext.getBeforeString().length(), superclass.length());
 				if (type instanceof Type) {
 					return handleBug84585(((Type) type).resolveBinding());
@@ -776,7 +781,7 @@ public class TypeContextChecker {
 			ICompilationUnit wc= typeHandle.getCompilationUnit().getWorkingCopy(new WorkingCopyOwner() {/*subclass*/}, new NullProgressMonitor());
 			try {
 				wc.getBuffer().setContents(cuString.toString());
-				CompilationUnit compilationUnit= new RefactoringASTParser(AST.JLS3).parse(wc, true);
+				CompilationUnit compilationUnit= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(wc, true);
 				for (int i= 0; i <= last; i++) {
 					ASTNode type= NodeFinder.perform(compilationUnit, interfaceOffsets[i], interfaces[i].length());
 					if (type instanceof Type) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java
index dc88bbf..1904427 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,6 @@ import org.eclipse.jdt.core.IImportContainer;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.ISourceReference;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -39,6 +38,8 @@ import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgUtils;
 import org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil;
 import org.eclipse.jdt.internal.corext.util.Strings;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 /**
  * A tuple used to keep source of an element and its type.
  * @see IJavaElement
@@ -82,6 +83,7 @@ public class TypedSource {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (! (other instanceof TypedSource))
 			return false;
@@ -93,6 +95,7 @@ public class TypedSource {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return getSource().hashCode() ^ (97 * getType());
 	}
@@ -112,27 +115,27 @@ public class TypedSource {
 		Arrays.sort(typedSources, createTypeComparator());
 	}
 
-	public static Comparator createTypeComparator() {
-		return new Comparator(){
-			public int compare(Object arg0, Object arg1) {
-				return ((TypedSource)arg0).getType() - ((TypedSource)arg1).getType();
+	public static Comparator<TypedSource> createTypeComparator() {
+		return new Comparator<TypedSource>(){
+			public int compare(TypedSource arg0, TypedSource arg1) {
+				return arg0.getType() - arg1.getType();
 			}
 		};
 	}
 	public static TypedSource[] createTypedSources(IJavaElement[] javaElements) throws CoreException {
 		//Map<ICompilationUnit, List<IJavaElement>>
-		Map grouped= ReorgUtils.groupByCompilationUnit(Arrays.asList(javaElements));
-		List result= new ArrayList(javaElements.length);
-		for (Iterator iter= grouped.keySet().iterator(); iter.hasNext();) {
-			ICompilationUnit cu= (ICompilationUnit) iter.next();
-			for (Iterator iterator= ((List) grouped.get(cu)).iterator(); iterator.hasNext();) {
+		Map<ICompilationUnit, List<IJavaElement>> grouped= ReorgUtils.groupByCompilationUnit(Arrays.asList(javaElements));
+		List<TypedSource> result= new ArrayList<TypedSource>(javaElements.length);
+		for (Iterator<ICompilationUnit> iter= grouped.keySet().iterator(); iter.hasNext();) {
+			ICompilationUnit cu= iter.next();
+			for (Iterator<IJavaElement> iterator= grouped.get(cu).iterator(); iterator.hasNext();) {
 				SourceTuple tuple= new SourceTuple(cu);
-				TypedSource[] ts= createTypedSources((IJavaElement) iterator.next(), tuple);
+				TypedSource[] ts= createTypedSources(iterator.next(), tuple);
 				if (ts != null)
 					result.addAll(Arrays.asList(ts));
 			}
 		}
-		return (TypedSource[]) result.toArray(new TypedSource[result.size()]);
+		return result.toArray(new TypedSource[result.size()]);
 	}
 
 	private static TypedSource[] createTypedSources(IJavaElement elem, SourceTuple tuple) throws CoreException {
@@ -147,11 +150,11 @@ public class TypedSource {
 
 	private static TypedSource[] createTypedSourcesForImportContainer(SourceTuple tuple, IImportContainer container) throws JavaModelException, CoreException {
 		IJavaElement[] imports= container.getChildren();
-		List result= new ArrayList(imports.length);
+		List<TypedSource> result= new ArrayList<TypedSource>(imports.length);
 		for (int i= 0; i < imports.length; i++) {
 			result.addAll(Arrays.asList(createTypedSources(imports[i], tuple)));
 		}
-		return (TypedSource[]) result.toArray(new TypedSource[result.size()]);
+		return result.toArray(new TypedSource[result.size()]);
 	}
 
 	private static String getFieldSource(IField field, SourceTuple tuple) throws CoreException {
@@ -161,7 +164,7 @@ public class TypedSource {
 				return source;
 		} else {
 			if (tuple.node == null) {
-				ASTParser parser= ASTParser.newParser(AST.JLS3);
+				ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				parser.setSource(tuple.unit);
 				tuple.node= (CompilationUnit) parser.createAST(null);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStatusContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStatusContext.java
index 029cb61..64abd7f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStatusContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStatusContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,15 +37,19 @@ public abstract class JavaStatusContext extends RefactoringStatusContext {
 		private MemberSourceContext(IMember member) {
 			fMember= member;
 		}
+		@Override
 		public boolean isBinary() {
 			return fMember.isBinary();
 		}
+		@Override
 		public ICompilationUnit getCompilationUnit() {
 			return fMember.getCompilationUnit();
 		}
+		@Override
 		public IClassFile getClassFile() {
 			return fMember.getClassFile();
 		}
+		@Override
 		public ISourceRange getSourceRange() {
 			try {
 				return fMember.getSourceRange();
@@ -60,15 +64,19 @@ public abstract class JavaStatusContext extends RefactoringStatusContext {
 		private ImportDeclarationSourceContext(IImportDeclaration declaration) {
 			fImportDeclartion= declaration;
 		}
+		@Override
 		public boolean isBinary() {
 			return false;
 		}
+		@Override
 		public ICompilationUnit getCompilationUnit() {
 			return (ICompilationUnit)fImportDeclartion.getParent().getParent();
 		}
+		@Override
 		public IClassFile getClassFile() {
 			return null;
 		}
+		@Override
 		public ISourceRange getSourceRange() {
 			try {
 				return fImportDeclartion.getSourceRange();
@@ -87,18 +95,23 @@ public abstract class JavaStatusContext extends RefactoringStatusContext {
 			if (fSourceRange == null)
 				fSourceRange= new SourceRange(0,0);
 		}
+		@Override
 		public boolean isBinary() {
 			return false;
 		}
+		@Override
 		public ICompilationUnit getCompilationUnit() {
 			return fCUnit;
 		}
+		@Override
 		public IClassFile getClassFile() {
 			return null;
 		}
+		@Override
 		public ISourceRange getSourceRange() {
 			return fSourceRange;
 		}
+		@Override
 		public String toString() {
 			return getSourceRange() + " in " + super.toString(); //$NON-NLS-1$
 		}
@@ -113,18 +126,23 @@ public abstract class JavaStatusContext extends RefactoringStatusContext {
 			if (fSourceRange == null)
 				fSourceRange= new SourceRange(0,0);
 		}
+		@Override
 		public boolean isBinary() {
 			return true;
 		}
+		@Override
 		public ICompilationUnit getCompilationUnit() {
 			return null;
 		}
+		@Override
 		public IClassFile getClassFile() {
 			return fClassFile;
 		}
+		@Override
 		public ISourceRange getSourceRange() {
 			return fSourceRange;
 		}
+		@Override
 		public String toString() {
 			return getSourceRange() + " in " + super.toString(); //$NON-NLS-1$
 		}
@@ -264,6 +282,7 @@ public abstract class JavaStatusContext extends RefactoringStatusContext {
 	/* (non-Javadoc)
 	 * Method declared on Context.
 	 */
+	@Override
 	public Object getCorrespondingElement() {
 		if (isBinary())
 			return getClassFile();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStringStatusContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStringStatusContext.java
index 494a6b5..d9ab22e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStringStatusContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/JavaStringStatusContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public class JavaStringStatusContext extends RefactoringStatusContext {
 	/* (non-Javadoc)
 	 * @see RefactoringStatusContext#getCorrespondingElement()
 	 */
+	@Override
 	public Object getCorrespondingElement() {
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/ReferencesInBinaryContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/ReferencesInBinaryContext.java
index 308090a..69e3b75 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/ReferencesInBinaryContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/base/ReferencesInBinaryContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@ import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 
 public class ReferencesInBinaryContext extends RefactoringStatusContext {
 
-	private List/*<SearchMatch>*/fMatches= new ArrayList();
+	private List<SearchMatch> fMatches= new ArrayList<SearchMatch>();
 
 	private final String fDescription;
 
@@ -39,13 +39,14 @@ public class ReferencesInBinaryContext extends RefactoringStatusContext {
 		fMatches.add(match);
 	}
 
-	public List/*<SearchMatch>*/getMatches() {
+	public List<SearchMatch> getMatches() {
 		return fMatches;
 	}
 
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.RefactoringStatusContext#getCorrespondingElement()
 	 */
+	@Override
 	public Object getCorrespondingElement() {
 		return null;
 	}
@@ -56,6 +57,7 @@ public class ReferencesInBinaryContext extends RefactoringStatusContext {
 		}
 	}
 
+	@Override
 	public String toString() {
 		return fDescription + " (" + fMatches.size() + " matches)"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/AbstractCodeCreationOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/AbstractCodeCreationOperation.java
index cddbeb0..d5c8fa3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/AbstractCodeCreationOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/AbstractCodeCreationOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,7 @@ public abstract class AbstractCodeCreationOperation implements IWorkspaceRunnabl
 	protected final URI fOutputURI;
 
 	/** The list of packages to create stubs for */
-	protected final List fPackages;
+	protected final List<IPackageFragment> fPackages;
 
 	/**
 	 * Creates a new abstract code creation operation.
@@ -58,7 +58,7 @@ public abstract class AbstractCodeCreationOperation implements IWorkspaceRunnabl
 	 * @param packages
 	 *            the list of packages to create code for
 	 */
-	protected AbstractCodeCreationOperation(final URI uri, final List packages) {
+	protected AbstractCodeCreationOperation(final URI uri, final List<IPackageFragment> packages) {
 		Assert.isNotNull(uri);
 		Assert.isNotNull(packages);
 		fOutputURI= uri;
@@ -145,8 +145,8 @@ public abstract class AbstractCodeCreationOperation implements IWorkspaceRunnabl
 		monitor.beginTask(getOperationLabel(), 100 * fPackages.size());
 		try {
 			final StringBuffer buffer= new StringBuffer(128);
-			for (final Iterator iterator= fPackages.iterator(); iterator.hasNext();) {
-				final IPackageFragment fragment= (IPackageFragment) iterator.next();
+			for (final Iterator<IPackageFragment> iterator= fPackages.iterator(); iterator.hasNext();) {
+				final IPackageFragment fragment= iterator.next();
 				final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 100);
 				final IClassFile[] files= fragment.getClassFiles();
 				final int size= files.length;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/SourceCreationOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/SourceCreationOperation.java
index 2d62991..a5ca47f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/SourceCreationOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/SourceCreationOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.jdt.core.IClassFile;
+import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IType;
 
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
@@ -40,7 +41,7 @@ public class SourceCreationOperation extends AbstractCodeCreationOperation {
 	 * @param packages
 	 *            the list of packages to create source for
 	 */
-	public SourceCreationOperation(final URI uri, final List packages) {
+	public SourceCreationOperation(final URI uri, final List<IPackageFragment> packages) {
 		super(uri, packages);
 	}
 
@@ -49,6 +50,7 @@ public class SourceCreationOperation extends AbstractCodeCreationOperation {
 	 *
 	 * @return the operation label
 	 */
+	@Override
 	protected String getOperationLabel() {
 		return RefactoringCoreMessages.SourceCreationOperation_creating_source_folder;
 	}
@@ -65,6 +67,7 @@ public class SourceCreationOperation extends AbstractCodeCreationOperation {
 	 * @throws CoreException
 	 *             if an error occurs
 	 */
+	@Override
 	protected void run(final IClassFile file, final IFileStore parent, final IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(getOperationLabel(), 2);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreationOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreationOperation.java
index 06a0696..19fd002 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreationOperation.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreationOperation.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.SubProgressMonitor;
 
 import org.eclipse.jdt.core.IClassFile;
+import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IType;
 
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
@@ -44,7 +45,7 @@ public class StubCreationOperation extends AbstractCodeCreationOperation {
 	 * @param packages
 	 *            the list of packages to create stubs for
 	 */
-	public StubCreationOperation(final URI uri, final List packages) {
+	public StubCreationOperation(final URI uri, final List<IPackageFragment> packages) {
 		this(uri, packages, false);
 	}
 
@@ -59,7 +60,7 @@ public class StubCreationOperation extends AbstractCodeCreationOperation {
 	 *            <code>true</code> to generate stubs for private and package
 	 *            visible members as well, <code>false</code> otherwise
 	 */
-	public StubCreationOperation(final URI uri, final List packages, final boolean stub) {
+	public StubCreationOperation(final URI uri, final List<IPackageFragment> packages, final boolean stub) {
 		super(uri, packages);
 		fStubInvisible= stub;
 	}
@@ -67,6 +68,7 @@ public class StubCreationOperation extends AbstractCodeCreationOperation {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getOperationLabel() {
 		return RefactoringCoreMessages.StubCreationOperation_creating_type_stubs;
 	}
@@ -83,6 +85,7 @@ public class StubCreationOperation extends AbstractCodeCreationOperation {
 	 * @throws CoreException
 	 *             if an error occurs
 	 */
+	@Override
 	protected void run(final IClassFile file, final IFileStore parent, final IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.StubCreationOperation_creating_type_stubs, 2);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java
index 35ebeff..940d3c9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,9 +19,12 @@ import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.SubProgressMonitor;
 
 import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.IAnnotatable;
+import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IMemberValuePair;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeParameter;
@@ -45,7 +48,7 @@ public class StubCreator {
 
 	protected void appendEnumConstants(final IType type) throws JavaModelException {
 		final IField[] fields= type.getFields();
-		final List list= new ArrayList(fields.length);
+		final List<IField> list= new ArrayList<IField>(fields.length);
 		for (int index= 0; index < fields.length; index++) {
 			final IField field= fields[index];
 			if (Flags.isEnum(field.getFlags()))
@@ -54,7 +57,7 @@ public class StubCreator {
 		for (int index= 0; index < list.size(); index++) {
 			if (index > 0)
 				fBuffer.append(","); //$NON-NLS-1$
-			fBuffer.append(((IField) list.get(index)).getElementName());
+			fBuffer.append(list.get(index).getElementName());
 		}
 		fBuffer.append(";"); //$NON-NLS-1$
 	}
@@ -97,6 +100,11 @@ public class StubCreator {
 	}
 
 	protected void appendFlags(final IMember member) throws JavaModelException {
+		if (member instanceof IAnnotatable)
+			for (IAnnotation annotation : ((IAnnotatable) member).getAnnotations()) {
+				appendAnnotation(annotation);
+			}
+		
 		int flags= member.getFlags();
 		final int kind= member.getElementType();
 		if (kind == IJavaElement.TYPE) {
@@ -115,6 +123,52 @@ public class StubCreator {
 			fBuffer.append(Flags.toString(flags));
 	}
 
+	private void appendAnnotation(IAnnotation annotation) throws JavaModelException {
+		fBuffer.append('@');
+		fBuffer.append(annotation.getElementName());
+		fBuffer.append('(');
+		
+		IMemberValuePair[] memberValuePairs= annotation.getMemberValuePairs();
+		for (IMemberValuePair pair : memberValuePairs) {
+			fBuffer.append(pair.getMemberName());
+			fBuffer.append('=');
+			appendAnnotationValue(pair.getValue(), pair.getValueKind());
+			fBuffer.append(',');
+		}
+		if (memberValuePairs.length > 0)
+			fBuffer.deleteCharAt(fBuffer.length() - 1);
+		
+		fBuffer.append(')').append('\n');
+	}
+
+	private void appendAnnotationValue(Object value, int valueKind) throws JavaModelException {
+		if (value instanceof Object[]) {
+			Object[] objects= (Object[]) value;
+			fBuffer.append('{');
+			for (Object object : objects) {
+				appendAnnotationValue(object, valueKind);
+				fBuffer.append(',');
+			}
+			if (objects.length > 0)
+				fBuffer.deleteCharAt(fBuffer.length() - 1);
+			fBuffer.append('}');
+			
+		} else {
+			switch (valueKind) {
+				case IMemberValuePair.K_ANNOTATION:
+					appendAnnotation((IAnnotation) value);
+					break;
+				case IMemberValuePair.K_STRING:
+					fBuffer.append('"').append(value).append('"');
+					break;
+					
+				default:
+					fBuffer.append(value);
+					break;
+			}
+		}
+	}
+
 	protected void appendMembers(final IType type, final IProgressMonitor monitor) throws JavaModelException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.StubCreationOperation_creating_type_stubs, 1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/AbstractDeleteChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/AbstractDeleteChange.java
index 61e0e24..735eaf7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/AbstractDeleteChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/AbstractDeleteChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ abstract class AbstractDeleteChange extends ResourceChange {
 	/* non java-doc
 	 * @see IChange#perform(ChangeContext, IProgressMonitor)
 	 */
+	@Override
 	public final Change perform(IProgressMonitor pm) throws CoreException {
 		try {
 			Change undo= doDelete(pm);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java
index e6cc538..e94ba74 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,14 +46,14 @@ public class ClasspathChange extends ResourceChange {
 
 	public static ClasspathChange removeEntryChange(IJavaProject project, IClasspathEntry entryToRemove) throws JavaModelException {
 		IClasspathEntry[] rawClasspath= project.getRawClasspath();
-		ArrayList newClasspath= new ArrayList();
+		ArrayList<IClasspathEntry> newClasspath= new ArrayList<IClasspathEntry>();
 		for (int i= 0; i < rawClasspath.length; i++) {
 			IClasspathEntry curr= rawClasspath[i];
 			if (curr.getEntryKind() != entryToRemove.getEntryKind() || !curr.getPath().equals(entryToRemove.getPath())) {
 				newClasspath.add(curr);
 			}
 		}
-		IClasspathEntry[] entries= (IClasspathEntry[]) newClasspath.toArray(new IClasspathEntry[newClasspath.size()]);
+		IClasspathEntry[] entries= newClasspath.toArray(new IClasspathEntry[newClasspath.size()]);
 		IPath outputLocation= project.getOutputLocation();
 
 		return newChange(project, entries, outputLocation);
@@ -78,6 +78,7 @@ public class ClasspathChange extends ResourceChange {
 		setValidationMethod(VALIDATE_NOT_DIRTY | VALIDATE_NOT_READ_ONLY);
 	}
 
+	@Override
 	public Change perform(IProgressMonitor pm) throws CoreException {
 		pm.beginTask(RefactoringCoreMessages.ClasspathChange_progress_message, 1);
 		try {
@@ -96,14 +97,17 @@ public class ClasspathChange extends ResourceChange {
 		}
 	}
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.ClasspathChange_change_name;
 	}
 
+	@Override
 	protected IResource getModifiedResource() {
 		return fProject.getResource();
 	}
 
+	@Override
 	public Object getModifiedElement() {
 		return fProject;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CompilationUnitReorgChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CompilationUnitReorgChange.java
index 40f07b1..e01a0df 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CompilationUnitReorgChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CompilationUnitReorgChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ abstract class CompilationUnitReorgChange extends ResourceChange {
 		fCuHandle= cuHandle;
 	}
 
+	@Override
 	public final Change perform(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		pm.beginTask(getName(), 1);
 		try {
@@ -71,6 +72,7 @@ abstract class CompilationUnitReorgChange extends ResourceChange {
 
 	abstract Change doPerformReorg(IProgressMonitor pm) throws CoreException, OperationCanceledException;
 
+	@Override
 	public Object getModifiedElement() {
 		return getCu();
 	}
@@ -78,6 +80,7 @@ abstract class CompilationUnitReorgChange extends ResourceChange {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.JDTChange#getModifiedResource()
 	 */
+	@Override
 	protected IResource getModifiedResource() {
 		ICompilationUnit cu= getCu();
 		if (cu != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyCompilationUnitChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyCompilationUnitChange.java
index 408baeb..d1142d0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyCompilationUnitChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyCompilationUnitChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,11 +35,13 @@ public class CopyCompilationUnitChange extends CompilationUnitReorgChange {
 		setValidationMethod(SAVE_IF_DIRTY);
 	}
 
+	@Override
 	Change doPerformReorg(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		getCu().copy(getDestinationPackage(), null, getNewName(), true, pm);
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		return Messages.format(RefactoringCoreMessages.CopyCompilationUnitChange_copy,
 			new String[]{ BasicElementLabels.getFileName(getCu()), getPackageName(getDestinationPackage())});
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageChange.java
index 4ef839c..b660566 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,11 +31,13 @@ public class CopyPackageChange extends PackageReorgChange {
 		super(pack, dest, nameQuery);
 	}
 
+	@Override
 	protected Change doPerformReorg(IProgressMonitor pm) throws JavaModelException, OperationCanceledException {
 		getPackage().copy(getDestination(), null, getNewName(), true, pm);
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		String packageName= JavaElementLabels.getElementLabel(getPackage(), JavaElementLabels.ALL_DEFAULT);
 		String destinationName= JavaElementLabels.getElementLabel(getDestination(), JavaElementLabels.ALL_DEFAULT);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageFragmentRootChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageFragmentRootChange.java
index 191da0d..8144d86 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageFragmentRootChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyPackageFragmentRootChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,11 +35,13 @@ public class CopyPackageFragmentRootChange extends PackageFragmentRootReorgChang
 		super(root, destination, newNameQuery, updateClasspathQuery);
 	}
 
+	@Override
 	protected Change doPerformReorg(IPath destinationPath, IProgressMonitor pm) throws JavaModelException {
 		getRoot().copy(destinationPath, getResourceUpdateFlags(), getUpdateModelFlags(true), null, pm);
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		String rootName= JavaElementLabels.getElementLabel(getRoot(), JavaElementLabels.ALL_DEFAULT);
 		String destinationName= BasicElementLabels.getResourceName(getDestination());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyResourceChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyResourceChange.java
index 17d9572..6bf3ea0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyResourceChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CopyResourceChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ public class CopyResourceChange extends ResourceChange {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Change#getName()
 	 */
+	@Override
 	public String getName() {
 		return Messages.format(RefactoringCoreMessages.CopyResourceString_copy, new String[] { BasicElementLabels.getPathLabel(getResource().getFullPath(), false), BasicElementLabels.getResourceName(getDestination()) });
 	}
@@ -64,6 +65,7 @@ public class CopyResourceChange extends ResourceChange {
 	/* non java-doc
 	 * @see IChange#perform(ChangeContext, IProgressMonitor)
 	 */
+	@Override
 	public final Change perform(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		try{
 			pm.beginTask(getName(), 2);
@@ -129,6 +131,7 @@ public class CopyResourceChange extends ResourceChange {
 		return name;
 	}
 
+	@Override
 	protected IResource getModifiedResource() {
 		return getResource();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreateCompilationUnitChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreateCompilationUnitChange.java
index 26bf5aa..d0665c4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreateCompilationUnitChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreateCompilationUnitChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ public final class CreateCompilationUnitChange extends CreateTextFileChange {
 		fUnit= unit;
 	}
 
+	@Override
 	public String getName() {
 		String cuName= BasicElementLabels.getFileName(fUnit);
 		String cuContainerName= BasicElementLabels.getPathLabel(fUnit.getParent().getPath(), false);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreatePackageChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreatePackageChange.java
index fa2ddfb..71acbc7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreatePackageChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/CreatePackageChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public class CreatePackageChange extends ResourceChange {
 		fPackageFragment= pack;
 	}
 
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor pm) {
 		// Don't do any checking. Peform handles the case
 		// that the package already exists. Furthermore
@@ -43,6 +44,7 @@ public class CreatePackageChange extends ResourceChange {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	public Change perform(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.CreatePackageChange_Creating_package, 1);
@@ -60,10 +62,12 @@ public class CreatePackageChange extends ResourceChange {
 		}
 	}
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.CreatePackageChange_Create_package;
 	}
 
+	@Override
 	public Object getModifiedElement() {
 		return fPackageFragment;
 	}
@@ -71,6 +75,7 @@ public class CreatePackageChange extends ResourceChange {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.JDTChange#getModifiedResource()
 	 */
+	@Override
 	protected IResource getModifiedResource() {
 		return fPackageFragment.getResource();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java
index c5e2ccf..8bff302 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,11 +82,13 @@ public class DeletePackageFragmentRootChange extends AbstractDeleteChange {
 		}
 	}
 
+	@Override
 	public String getName() {
 		String rootName= JavaElementLabels.getElementLabel(getRoot(), JavaElementLabels.ALL_DEFAULT);
 		return Messages.format(RefactoringCoreMessages.DeletePackageFragmentRootChange_delete, rootName);
 	}
 
+	@Override
 	public Object getModifiedElement() {
 		return getRoot();
 	}
@@ -94,6 +96,7 @@ public class DeletePackageFragmentRootChange extends AbstractDeleteChange {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.JDTChange#getModifiedResource()
 	 */
+	@Override
 	protected IResource getModifiedResource() {
 		return getRoot().getResource();
 	}
@@ -102,6 +105,7 @@ public class DeletePackageFragmentRootChange extends AbstractDeleteChange {
 		return (IPackageFragmentRoot)JavaCore.create(fHandle);
 	}
 
+	@Override
 	protected Change doDelete(IProgressMonitor pm) throws CoreException {
 		if (! confirmDeleteIfReferenced())
 			return new NullChange();
@@ -115,7 +119,7 @@ public class DeletePackageFragmentRootChange extends AbstractDeleteChange {
 
 		ResourceDescription rootDescription = ResourceDescription.fromResource(rootResource);
 		IJavaProject[] referencingProjects= JavaElementUtil.getReferencingProjects(root);
-		HashMap/*<IFile, String>*/ classpathFilesContents= new HashMap();
+		HashMap<IFile, String> classpathFilesContents= new HashMap<IFile, String>();
 		for (int i= 0; i < referencingProjects.length; i++) {
 			IJavaProject javaProject= referencingProjects[i];
 			IFile classpathFile= javaProject.getProject().getFile(".classpath"); //$NON-NLS-1$
@@ -127,10 +131,10 @@ public class DeletePackageFragmentRootChange extends AbstractDeleteChange {
 		root.delete(resourceUpdateFlags, jCoreUpdateFlags, new SubProgressMonitor(pm, 1));
 
 		rootDescription.recordStateFromHistory(rootResource, new SubProgressMonitor(pm, 1));
-		for (Iterator iterator= classpathFilesContents.entrySet().iterator(); iterator.hasNext();) {
-			Entry entry= (Entry) iterator.next();
-			IFile file= (IFile) entry.getKey();
-			String contents= (String) entry.getValue();
+		for (Iterator<Entry<IFile, String>> iterator= classpathFilesContents.entrySet().iterator(); iterator.hasNext();) {
+			Entry<IFile, String> entry= iterator.next();
+			IFile file= entry.getKey();
+			String contents= entry.getValue();
 			//Restore time stamps? This should probably be some sort of UndoTextFileChange.
 			TextFileChange classpathUndo= new TextFileChange(Messages.format(RefactoringCoreMessages.DeletePackageFragmentRootChange_restore_file, BasicElementLabels.getPathLabel(file.getFullPath(), true)), file);
 			classpathUndo.setEdit(new ReplaceEdit(0, getFileLength(file), contents));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java
index 143d212..1695f61 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,6 +62,7 @@ public class DeleteSourceManipulationChange extends AbstractDeleteChange {
 	/*
 	 * @see IChange#getName()
 	 */
+	@Override
 	public String getName() {
 		IJavaElement javaElement= getJavaElement(getSourceManipulation());
 		return Messages.format(RefactoringCoreMessages.DeleteSourceManipulationChange_0, JavaElementLabels.getElementLabel(javaElement, JavaElementLabels.ALL_DEFAULT));
@@ -70,6 +71,7 @@ public class DeleteSourceManipulationChange extends AbstractDeleteChange {
 	/*
 	 * @see IChange#getModifiedLanguageElement()
 	 */
+	@Override
 	public Object getModifiedElement() {
 		return JavaCore.create(fHandle);
 	}
@@ -77,6 +79,7 @@ public class DeleteSourceManipulationChange extends AbstractDeleteChange {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.JDTChange#getModifiedResource()
 	 */
+	@Override
 	protected IResource getModifiedResource() {
 		IJavaElement elem= JavaCore.create(fHandle);
 		if (elem != null) {
@@ -88,6 +91,7 @@ public class DeleteSourceManipulationChange extends AbstractDeleteChange {
 	/*
 	 * @see DeleteChange#doDelete(IProgressMonitor)
 	 */
+	@Override
 	protected Change doDelete(IProgressMonitor pm) throws CoreException {
 		ISourceManipulation element= getSourceManipulation();
 		// we have to save dirty compilation units before deleting them. Otherwise
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationRefactoringChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationRefactoringChange.java
index 3f6702f..4d348bf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationRefactoringChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationRefactoringChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ public final class DynamicValidationRefactoringChange extends DynamicValidationS
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ChangeDescriptor getDescriptor() {
 		return new RefactoringChangeDescriptor(fDescriptor);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java
index 30aac5a..a73419c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class DynamicValidationStateChange extends CompositeChange implements Wor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void initializeValidationData(IProgressMonitor pm) {
 		super.initializeValidationData(pm);
 		WorkspaceTracker.INSTANCE.addListener(this);
@@ -70,6 +71,7 @@ public class DynamicValidationStateChange extends CompositeChange implements Wor
 		fTimeStamp= System.currentTimeMillis();
 	}
 
+	@Override
 	public void dispose() {
 		if (fListenerRegistered) {
 			WorkspaceTracker.INSTANCE.removeListener(this);
@@ -81,6 +83,7 @@ public class DynamicValidationStateChange extends CompositeChange implements Wor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
 		if (fValidationState == null) {
 			return super.isValid(pm);
@@ -91,6 +94,7 @@ public class DynamicValidationStateChange extends CompositeChange implements Wor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Change perform(IProgressMonitor pm) throws CoreException {
 		final Change[] result= new Change[1];
 		IWorkspaceRunnable runnable= new IWorkspaceRunnable() {
@@ -105,6 +109,7 @@ public class DynamicValidationStateChange extends CompositeChange implements Wor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Change createUndoChange(Change[] childUndos) {
 		DynamicValidationStateChange result= new DynamicValidationStateChange(getName());
 		for (int i= 0; i < childUndos.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MoveCompilationUnitChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MoveCompilationUnitChange.java
index 2582e51..aa986dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MoveCompilationUnitChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MoveCompilationUnitChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,11 +52,13 @@ public class MoveCompilationUnitChange extends CompilationUnitReorgChange {
 		setValidationMethod(SAVE_IF_DIRTY | VALIDATE_NOT_READ_ONLY);
 	}
 
+	@Override
 	public String getName() {
 		return Messages.format(RefactoringCoreMessages.MoveCompilationUnitChange_name,
 		new String[]{BasicElementLabels.getFileName(getCu()), getPackageName(getDestinationPackage())});
 	}
 
+	@Override
 	Change doPerformReorg(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		String name;
 		String newName= getNewName();
@@ -108,7 +110,7 @@ public class MoveCompilationUnitChange extends CompilationUnitReorgChange {
 		String packageName= destination.getElementName();
 		String[] split= packageName.split("\\."); //$NON-NLS-1$
 
-		ArrayList created= new ArrayList();
+		ArrayList<IPackageFragment> created= new ArrayList<IPackageFragment>();
 
 		StringBuffer name= new StringBuffer();
 		name.append(split[0]);
@@ -120,7 +122,7 @@ public class MoveCompilationUnitChange extends CompilationUnitReorgChange {
 
 			if (fragment.equals(destination)) {
 				root.createPackageFragment(name.toString(), true, pm);
-				return (IPackageFragment[]) created.toArray(new IPackageFragment[created.size()]);
+				return created.toArray(new IPackageFragment[created.size()]);
 			}
 
 			name.append("."); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageChange.java
index 4954926..8b9275a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,11 +30,13 @@ public class MovePackageChange extends PackageReorgChange {
 		super(pack, dest, null);
 	}
 
+	@Override
 	protected Change doPerformReorg(IProgressMonitor pm) throws JavaModelException, OperationCanceledException {
 		getPackage().move(getDestination(), null, getNewName(), true, pm);
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		String packageName= JavaElementLabels.getElementLabel(getPackage(), JavaElementLabels.ALL_DEFAULT);
 		String destinationName= JavaElementLabels.getElementLabel(getDestination(), JavaElementLabels.ALL_DEFAULT);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageFragmentRootChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageFragmentRootChange.java
index c33553f..77ff8f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageFragmentRootChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MovePackageFragmentRootChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,11 +34,13 @@ public class MovePackageFragmentRootChange extends PackageFragmentRootReorgChang
 		super(root, destination, null, updateClasspathQuery);
 	}
 
+	@Override
 	protected Change doPerformReorg(IPath destinationPath, IProgressMonitor pm) throws JavaModelException {
 		getRoot().move(destinationPath, getResourceUpdateFlags(), getUpdateModelFlags(false), null, pm);
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		String rootName= JavaElementLabels.getElementLabel(getRoot(), JavaElementLabels.ALL_DEFAULT);
 		String destinationName= BasicElementLabels.getResourceName(getDestination());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MultiStateCompilationUnitChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MultiStateCompilationUnitChange.java
index 2f96a52..8ce358d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MultiStateCompilationUnitChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/MultiStateCompilationUnitChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public final class MultiStateCompilationUnitChange extends MultiStateTextFileCha
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.Change#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public final Object getAdapter(final Class adapter) {
 
 		if (ICompilationUnit.class.equals(adapter))
@@ -70,6 +71,7 @@ public final class MultiStateCompilationUnitChange extends MultiStateTextFileCha
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getName() {
 		return Messages.format(RefactoringCoreMessages.MultiStateCompilationUnitChange_name_pattern, new String[] { BasicElementLabels.getFileName(fUnit), BasicElementLabels.getPathLabel(fUnit.getParent().getPath(), false) });
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageFragmentRootReorgChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageFragmentRootReorgChange.java
index f101002..10571c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageFragmentRootReorgChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageFragmentRootReorgChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ abstract class PackageFragmentRootReorgChange extends ResourceChange {
 	}
 
 
+	@Override
 	public final Change perform(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		pm.beginTask(getName(), 2);
 		try {
@@ -76,6 +77,7 @@ abstract class PackageFragmentRootReorgChange extends ResourceChange {
 
 	protected abstract Change doPerformReorg(IPath destinationPath, IProgressMonitor pm) throws JavaModelException;
 
+	@Override
 	public Object getModifiedElement() {
 		return getRoot();
 	}
@@ -83,6 +85,7 @@ abstract class PackageFragmentRootReorgChange extends ResourceChange {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.JDTChange#getModifiedResource()
 	 */
+	@Override
 	protected IResource getModifiedResource() {
 		IPackageFragmentRoot root= getRoot();
 		if (root != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageReorgChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageReorgChange.java
index 6c264cf..25217dd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageReorgChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/PackageReorgChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ abstract class PackageReorgChange extends ResourceChange {
 
 	abstract Change doPerformReorg(IProgressMonitor pm) throws JavaModelException, OperationCanceledException;
 
+	@Override
 	public final Change perform(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		pm.beginTask(getName(), 1);
 		try {
@@ -63,6 +64,7 @@ abstract class PackageReorgChange extends ResourceChange {
 		}
 	}
 
+	@Override
 	public Object getModifiedElement() {
 		return getPackage();
 	}
@@ -70,6 +72,7 @@ abstract class PackageReorgChange extends ResourceChange {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.JDTChange#getModifiedResource()
 	 */
+	@Override
 	protected IResource getModifiedResource() {
 		IPackageFragment pack= getPackage();
 		if (pack != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameCompilationUnitChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameCompilationUnitChange.java
index 2f512e3..6cb965d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameCompilationUnitChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameCompilationUnitChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ public final class RenameCompilationUnitChange extends AbstractJavaElementRename
 		setValidationMethod(VALIDATE_NOT_READ_ONLY | SAVE_IF_DIRTY);
 	}
 
+	@Override
 	protected IPath createNewPath() {
 		final IPath path= getResourcePath();
 		if (path.getFileExtension() != null)
@@ -49,16 +50,19 @@ public final class RenameCompilationUnitChange extends AbstractJavaElementRename
 			return path.removeLastSegments(1).append(getNewName());
 	}
 
+	@Override
 	protected Change createUndoChange(long stampToRestore) throws JavaModelException {
 		return new RenameCompilationUnitChange(createNewPath(), getNewName(), getOldName(), stampToRestore);
 	}
 
+	@Override
 	protected void doRename(IProgressMonitor pm) throws CoreException {
 		ICompilationUnit cu= (ICompilationUnit) getModifiedElement();
 		if (cu != null)
 			cu.rename(getNewName(), false, pm);
 	}
 
+	@Override
 	public String getName() {
 		String[] keys= new String[] { BasicElementLabels.getJavaElementName(getOldName()), BasicElementLabels.getJavaElementName(getNewName())};
 		return Messages.format(RefactoringCoreMessages.RenameCompilationUnitChange_name, keys);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java
index c1cdadf..7872598 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,14 +53,17 @@ public final class RenameJavaProjectChange extends AbstractJavaElementRenameChan
 		return JavaCore.newProjectEntry(createNewPath(), oldEntry.getAccessRules(), oldEntry.combineAccessRules(), oldEntry.getExtraAttributes(), oldEntry.isExported());
 	}
 
+	@Override
 	protected IPath createNewPath() {
 		return getResourcePath().removeLastSegments(1).append(getNewName());
 	}
 
+	@Override
 	protected Change createUndoChange(long stampToRestore) throws JavaModelException {
 		return new RenameJavaProjectChange(createNewPath(), getNewName(), getOldName(), stampToRestore, fUpdateReferences);
 	}
 
+	@Override
 	protected void doRename(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(getName(), 2);
@@ -81,6 +84,7 @@ public final class RenameJavaProjectChange extends AbstractJavaElementRenameChan
 		return (IJavaProject) getModifiedElement();
 	}
 
+	@Override
 	public String getName() {
 		String[] keys= new String[] { BasicElementLabels.getJavaElementName(getOldName()), BasicElementLabels.getJavaElementName(getNewName())};
 		return Messages.format(RefactoringCoreMessages.RenameJavaProjectChange_rename, keys);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java
index 58987ce..457dd54 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,7 +50,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		return new Path(packageName.replace('.', IPath.SEPARATOR));
 	}
 
-	private Map fCompilationUnitStamps;
+	private Map<IResource, Long> fCompilationUnitStamps;
 
 	private final boolean fRenameSubpackages;
 
@@ -59,7 +59,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		Assert.isTrue(!pack.isReadOnly(), "package must not be read only"); //$NON-NLS-1$
 	}
 
-	private RenamePackageChange(IPath resourcePath, String oldName, String newName, long stampToRestore, Map compilationUnitStamps, boolean renameSubpackages) {
+	private RenamePackageChange(IPath resourcePath, String oldName, String newName, long stampToRestore, Map<IResource, Long> compilationUnitStamps, boolean renameSubpackages) {
 		super(resourcePath, oldName, newName, stampToRestore);
 		fCompilationUnitStamps= compilationUnitStamps;
 		fRenameSubpackages= renameSubpackages;
@@ -67,7 +67,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		setValidationMethod(VALIDATE_NOT_DIRTY);
 	}
 
-	private void addStamps(Map stamps, ICompilationUnit[] units) {
+	private void addStamps(Map<IResource, Long> stamps, ICompilationUnit[] units) {
 		for (int i= 0; i < units.length; i++) {
 			IResource resource= units[i].getResource();
 			long stamp= IResource.NULL_STAMP;
@@ -77,6 +77,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		}
 	}
 
+	@Override
 	protected IPath createNewPath() {
 		IPackageFragment oldPackage= getPackage();
 		IPath oldPackageName= createPath(oldPackage.getElementName());
@@ -90,11 +91,12 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		return oldPackage.getPath().removeLastSegments(oldPackagePath.segmentCount()).append(newPackagePath);
 	}
 
+	@Override
 	protected Change createUndoChange(long stampToRestore) throws CoreException {
 		IPackageFragment pack= getPackage();
 		if (pack == null)
 			return new NullChange();
-		Map stamps= new HashMap();
+		Map<IResource, Long> stamps= new HashMap<IResource, Long>();
 		if (!fRenameSubpackages) {
 			addStamps(stamps, pack.getCompilationUnits());
 		} else {
@@ -109,6 +111,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		// not merge the source package into an existing target.
 	}
 
+	@Override
 	protected void doRename(IProgressMonitor pm) throws CoreException {
 		IPackageFragment pack= getPackage();
 		if (pack == null)
@@ -119,10 +122,10 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 
 		} else {
 			IPackageFragment[] allPackages= JavaElementUtil.getPackageAndSubpackages(pack);
-			Arrays.sort(allPackages, new Comparator() {
-				public int compare(Object o1, Object o2) {
-					String p1= ((IPackageFragment) o1).getElementName();
-					String p2= ((IPackageFragment) o2).getElementName();
+			Arrays.sort(allPackages, new Comparator<IPackageFragment>() {
+				public int compare(IPackageFragment o1, IPackageFragment o2) {
+					String p1= o1.getElementName();
+					String p2= o2.getElementName();
 					return p1.compareTo(p2);
 				}
 			});
@@ -141,6 +144,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		}
 	}
 
+	@Override
 	public String getName() {
 		String msg= fRenameSubpackages ? RefactoringCoreMessages.RenamePackageChange_name_with_subpackages : RefactoringCoreMessages.RenamePackageChange_name;
 		String[] keys= { BasicElementLabels.getJavaElementName(getOldName()), BasicElementLabels.getJavaElementName(getNewName())};
@@ -155,6 +159,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 		return (IPackageFragment) getModifiedElement();
 	}
 
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
 		pm.beginTask("", 2); //$NON-NLS-1$
 		RefactoringStatus result;
@@ -212,7 +217,7 @@ public final class RenamePackageChange extends AbstractJavaElementRenameChange {
 				for (int i= 0; i < units.length; i++) {
 					IResource resource= units[i].getResource();
 					if (resource != null) {
-						Long stamp= (Long) fCompilationUnitStamps.get(resource);
+						Long stamp= fCompilationUnitStamps.get(resource);
 						if (stamp != null) {
 							resource.revertModificationStamp(stamp.longValue());
 						}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameSourceFolderChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameSourceFolderChange.java
index 2a53d0b..e88828b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameSourceFolderChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameSourceFolderChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,14 +87,17 @@ public final class RenameSourceFolderChange extends AbstractJavaElementRenameCha
 		super(resourcePath, oldName, newName, stampToRestore);
 	}
 
+	@Override
 	protected IPath createNewPath() {
 		return getResourcePath().removeLastSegments(1).append(getNewName());
 	}
 
+	@Override
 	protected Change createUndoChange(long stampToRestore) {
 		return new RenameSourceFolderChange(createNewPath(), getNewName(), getOldName(), stampToRestore);
 	}
 
+	@Override
 	protected void doRename(IProgressMonitor pm) throws CoreException {
 		IPackageFragmentRoot sourceFolder= getSourceFolder();
 		if (sourceFolder != null)
@@ -112,6 +115,7 @@ public final class RenameSourceFolderChange extends AbstractJavaElementRenameCha
 		return IPackageFragmentRoot.DESTINATION_PROJECT_CLASSPATH | IPackageFragmentRoot.ORIGINATING_PROJECT_CLASSPATH | IPackageFragmentRoot.OTHER_REFERRING_PROJECTS_CLASSPATH | IPackageFragmentRoot.REPLACE;
 	}
 
+	@Override
 	public String getName() {
 		String[] keys= { BasicElementLabels.getJavaElementName(getOldName()), BasicElementLabels.getJavaElementName(getNewName())};
 		return Messages.format(RefactoringCoreMessages.RenameSourceFolderChange_rename, keys);
@@ -125,6 +129,7 @@ public final class RenameSourceFolderChange extends AbstractJavaElementRenameCha
 		return (IPackageFragmentRoot) getModifiedElement();
 	}
 
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus result= super.isValid(pm);
 		if (result.hasFatalError())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoDeleteResourceChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoDeleteResourceChange.java
index 894d3b7..64e31df 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoDeleteResourceChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoDeleteResourceChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,18 +37,22 @@ public class UndoDeleteResourceChange extends Change {
 		fResourceDescription= resourceDescription;
 	}
 
+	@Override
 	public void initializeValidationData(IProgressMonitor pm) {
 
 	}
 
+	@Override
 	public Object getModifiedElement() {
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		return Messages.format(RefactoringCoreMessages.UndoDeleteResourceChange_change_name, BasicElementLabels.getResourceName(fResourceDescription.getName()));
 	}
 
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		if (! fResourceDescription.isValid()) {
 			return RefactoringStatus.createFatalErrorStatus(
@@ -67,12 +71,14 @@ public class UndoDeleteResourceChange extends Change {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	public Change perform(IProgressMonitor pm) throws CoreException {
 		IResource created= fResourceDescription.createResource(pm);
 		created.refreshLocal(IResource.DEPTH_INFINITE, new SubProgressMonitor(pm, 1));
 		return new DeleteResourceChange(created.getFullPath(), true);
 	}
 
+	@Override
 	public String toString() {
 		return "Remove " + fResourceDescription.getName(); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoablePackageDeleteChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoablePackageDeleteChange.java
index 07e78f2..a929360 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoablePackageDeleteChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/UndoablePackageDeleteChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,19 +25,20 @@ import org.eclipse.ltk.core.refactoring.Change;
 
 public class UndoablePackageDeleteChange extends DynamicValidationStateChange {
 
-	private final List/*<IResource>*/ fPackageDeletes;
+	private final List<IResource> fPackageDeletes;
 
-	public UndoablePackageDeleteChange(String name, List/*<IResource>*/ packageDeletes) {
+	public UndoablePackageDeleteChange(String name, List<IResource> packageDeletes) {
 		super(name);
 		fPackageDeletes= packageDeletes;
 	}
 
+	@Override
 	public Change perform(IProgressMonitor pm) throws CoreException {
 		int count= fPackageDeletes.size();
 		pm.beginTask("", count * 3); //$NON-NLS-1$
 		ResourceDescription[] packageDeleteDescriptions= new ResourceDescription[fPackageDeletes.size()];
 		for (int i= 0; i < fPackageDeletes.size(); i++) {
-			IResource resource= (IResource) fPackageDeletes.get(i);
+			IResource resource= fPackageDeletes.get(i);
 			packageDeleteDescriptions[i]= ResourceDescription.fromResource(resource);
 			pm.worked(1);
 		}
@@ -45,7 +46,7 @@ public class UndoablePackageDeleteChange extends DynamicValidationStateChange {
 		DynamicValidationStateChange result= (DynamicValidationStateChange) super.perform(new SubProgressMonitor(pm, count));
 
 		for (int i= 0; i < fPackageDeletes.size(); i++) {
-			IResource resource= (IResource) fPackageDeletes.get(i);
+			IResource resource= fPackageDeletes.get(i);
 			ResourceDescription resourceDescription= packageDeleteDescriptions[i];
 			resourceDescription.recordStateFromHistory(resource, new SubProgressMonitor(pm, 1));
 			result.add(new UndoDeleteResourceChange(resourceDescription));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/AstMatchingNodeFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/AstMatchingNodeFinder.java
index 325120f..5b6fe73 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/AstMatchingNodeFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/AstMatchingNodeFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -115,18 +115,18 @@ class AstMatchingNodeFinder {
 
 	private static class Visitor extends ASTVisitor{
 
-		Collection fFound;
+		Collection<ASTNode> fFound;
 		ASTMatcher fMatcher;
 		ASTNode fNodeToMatch;
 
 		Visitor(ASTNode nodeToMatch){
 			fNodeToMatch= nodeToMatch;
-			fFound= new ArrayList();
+			fFound= new ArrayList<ASTNode>();
 			fMatcher= new JdtASTMatcher();
 		}
 
 		ASTNode[] getMatchingNodes(){
-			return (ASTNode[]) fFound.toArray(new ASTNode[fFound.size()]);
+			return fFound.toArray(new ASTNode[fFound.size()]);
 		}
 
 		private boolean matches(ASTNode node){
@@ -134,498 +134,581 @@ class AstMatchingNodeFinder {
 			return false;
 		}
 
+		@Override
 		public boolean visit(AnonymousClassDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ArrayAccess node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ArrayCreation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ArrayInitializer node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ArrayType node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(AssertStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(Assignment node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(Block node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(BooleanLiteral node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(BreakStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(CastExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(CatchClause node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(CharacterLiteral node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ClassInstanceCreation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(CompilationUnit node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ConditionalExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ConstructorInvocation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ContinueStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(DoStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(EmptyStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ExpressionStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(FieldAccess node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(FieldDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ForStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(IfStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ImportDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(InfixExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(Initializer node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
-        public boolean visit(InstanceofExpression node) {
+        @Override
+		public boolean visit(InstanceofExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
         }
 
+		@Override
 		public boolean visit(Javadoc node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(LabeledStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(MethodDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(MethodInvocation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(NullLiteral node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(NumberLiteral node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(PackageDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ParenthesizedExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(PostfixExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(PrefixExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(PrimitiveType node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(QualifiedName node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ReturnStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SimpleName node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SimpleType node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SingleVariableDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(StringLiteral node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SuperConstructorInvocation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SuperFieldAccess node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SuperMethodInvocation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SwitchCase node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SwitchStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SynchronizedStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ThisExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ThrowStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(TryStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(TypeDeclarationStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(TypeLiteral node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(VariableDeclarationExpression node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(VariableDeclarationFragment node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(VariableDeclarationStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(WhileStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(AnnotationTypeDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(AnnotationTypeMemberDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(BlockComment node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(EnhancedForStatement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(EnumConstantDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(EnumDeclaration node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(LineComment node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(MarkerAnnotation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(MemberRef node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(MemberValuePair node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(MethodRef node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(MethodRefParameter node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(Modifier node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(NormalAnnotation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(ParameterizedType node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(QualifiedType node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(SingleMemberAnnotation node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(TagElement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(TextElement node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(TypeParameter node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(WildcardType node) {
 			if (node.subtreeMatch(fMatcher, fNodeToMatch))
 				return matches(node);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallContext.java
index 72d3968..b686b4a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.refactoring.code;
 
+import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IMethodBinding;
@@ -21,12 +22,13 @@ import org.eclipse.jdt.internal.corext.dom.CodeScopeBuilder;
 public class CallContext {
 
 	public ASTNode invocation;
-	public String[] arguments;
+	public Expression[] arguments;
 	public String receiver;
 	public boolean receiverIsStatic;
 	public CodeScopeBuilder.Scope scope;
 	public int callMode;
 	public ImportRewrite importer;
+	public ICompilationUnit compilationUnit;
 
 	public CallContext(ASTNode inv, CodeScopeBuilder.Scope s, int cm, ImportRewrite i) {
 		super();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallInliner.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallInliner.java
index 81f727f..9d5b0b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallInliner.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/CallInliner.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,7 +44,6 @@ import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
-import org.eclipse.jdt.core.dom.ArrayCreation;
 import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
@@ -80,8 +79,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.WhileStatement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.Corext;
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
@@ -92,6 +91,7 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
 import org.eclipse.jdt.internal.corext.dom.CodeScopeBuilder;
 import org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor;
 import org.eclipse.jdt.internal.corext.dom.LocalVariableIndex;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.dom.Selection;
 import org.eclipse.jdt.internal.corext.dom.TypeBindingVisitor;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
@@ -131,7 +131,7 @@ public class CallInliner {
 	private FlowInfo fFlowInfo;
 	private CodeScopeBuilder.Scope fInvocationScope;
 	private boolean fFieldInitializer;
-	private List fLocals;
+	private List<VariableDeclarationStatement> fLocals;
 	private CallContext fContext;
 
 	private class InlineEvaluator extends HierarchicalASTVisitor {
@@ -147,6 +147,7 @@ public class CallInliner {
 			fResult= result;
 			return false;
 		}
+		@Override
 		public boolean visit(Expression node) {
 			int accessMode= fFormalArgument.getSimplifiedAccessMode();
 			if (accessMode == FlowInfo.WRITE)
@@ -157,6 +158,7 @@ public class CallInliner {
 				return setResult(true);
 			return setResult(fFormalArgument.getNumberOfAccesses() <= 1);
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding= node.resolveBinding();
 			if (binding instanceof IVariableBinding) {
@@ -171,12 +173,15 @@ public class CallInliner {
 			}
 			return setResult(false);
 		}
+		@Override
 		public boolean visit(FieldAccess node) {
 			return visit(node.getName());
 		}
+		@Override
 		public boolean visit(SuperFieldAccess node) {
 			return visit(node.getName());
 		}
+		@Override
 		public boolean visit(ThisExpression node) {
 			int accessMode= fFormalArgument.getSimplifiedAccessMode();
 			if (accessMode == FlowInfo.READ || accessMode == FlowInfo.UNUSED)
@@ -236,7 +241,7 @@ public class CallInliner {
 		fBuffer= RefactoringFileBuffers.acquire(fCUnit);
 		fSourceProvider= provider;
 		fImportRewrite= StubUtility.createImportRewrite(targetAstRoot, true);
-		fLocals= new ArrayList(3);
+		fLocals= new ArrayList<VariableDeclarationStatement>(3);
 		fRewrite= ASTRewrite.create(targetAstRoot.getAST());
 		fRewrite.setTargetSourceRangeComputer(new NoCommentSourceRangeComputer());
 		fTypeEnvironment= new TypeEnvironment();
@@ -274,7 +279,7 @@ public class CallInliner {
 	public RefactoringStatus initialize(ASTNode invocation, int severity) {
 		RefactoringStatus result= new RefactoringStatus();
 		fInvocation= invocation;
-		fLocals= new ArrayList(3);
+		fLocals= new ArrayList<VariableDeclarationStatement>(3);
 
 		checkMethodDeclaration(result, severity);
 		if (result.getSeverity() >= severity)
@@ -345,8 +350,7 @@ public class CallInliner {
 
 	private void checkInvocationContext(RefactoringStatus result, int severity) {
 		if (fInvocation.getNodeType() == ASTNode.METHOD_INVOCATION) {
-			Expression exp= ((MethodInvocation)fInvocation).getExpression();
-			if (exp != null && exp.resolveTypeBinding() == null) {
+			if (((MethodInvocation)fInvocation).resolveTypeBinding() == null) {
 				addEntry(result, RefactoringCoreMessages.CallInliner_receiver_type,
 					RefactoringStatusCodes.INLINE_METHOD_NULL_BINDING, severity);
 				return;
@@ -480,9 +484,9 @@ public class CallInliner {
 		}
 	}
 
-	public RefactoringStatus perform(TextEditGroup textEditGroup) {
+	public RefactoringStatus perform(TextEditGroup textEditGroup) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
-		String[] blocks= fSourceProvider.getCodeBlocks(fContext);
+		String[] blocks= fSourceProvider.getCodeBlocks(fContext, fImportRewrite);
 		if(!fFieldInitializer) {
 			initializeInsertionPoint(fSourceProvider.getNumberOfStatements() + fLocals.size());
 		}
@@ -496,24 +500,21 @@ public class CallInliner {
 		return fRewrite.rewriteAST(fBuffer.getDocument(), fCUnit.getJavaProject().getOptions(true));
 	}
 
-	private void computeRealArguments() throws BadLocationException {
-		List arguments= Invocations.getArguments(fInvocation);
-		Set canNotInline= crossCheckArguments(arguments);
+	private void computeRealArguments() {
+		List<Expression> arguments= Invocations.getArguments(fInvocation);
+		Set<Expression> canNotInline= crossCheckArguments(arguments);
 		boolean needsVarargBoxing= needsVarargBoxing(arguments);
 		int varargIndex= fSourceProvider.getVarargIndex();
-		String[] realArguments= new String[needsVarargBoxing ? varargIndex + 1 : arguments.size()];
+		AST ast= fInvocation.getAST();
+		Expression[] realArguments= new Expression[needsVarargBoxing ? varargIndex + 1 : arguments.size()];
 		for (int i= 0; i < (needsVarargBoxing ? varargIndex : arguments.size()); i++) {
-			Expression expression= (Expression)arguments.get(i);
+			Expression expression= arguments.get(i);
 			ParameterData parameter= fSourceProvider.getParameterData(i);
 			if (canInline(expression, parameter) && !canNotInline.contains(expression)) {
-				realArguments[i] = getContent(expression);
-				// fixes bugs #35905, #38471
-				if (argumentNeedsParenthesis(expression, parameter)) {
-					realArguments[i] = "(" + realArguments[i] + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-				}
+				realArguments[i]= expression;
 			} else {
 				String name= fInvocationScope.createName(parameter.getName(), true);
-				realArguments[i]= name;
+				realArguments[i]= ast.newSimpleName(name);
 				fLocals.add(createLocalDeclaration(
 					parameter.getTypeBinding(), name,
 					(Expression)fRewrite.createCopyTarget(expression)));
@@ -522,24 +523,24 @@ public class CallInliner {
 		if (needsVarargBoxing) {
 			ParameterData parameter= fSourceProvider.getParameterData(varargIndex);
 			String name= fInvocationScope.createName(parameter.getName(), true);
-			realArguments[varargIndex]= name;
-			AST ast= fInvocation.getAST();
+			realArguments[varargIndex]= ast.newSimpleName(name);
 			Type type= fImportRewrite.addImport(parameter.getTypeBinding(), ast);
 			VariableDeclarationFragment fragment= ast.newVariableDeclarationFragment();
 			fragment.setName(ast.newSimpleName(name));
 			ArrayInitializer initializer= ast.newArrayInitializer();
 			for (int i= varargIndex; i < arguments.size(); i++) {
-				initializer.expressions().add(fRewrite.createCopyTarget((ASTNode)arguments.get(i)));
+				initializer.expressions().add(fRewrite.createCopyTarget(arguments.get(i)));
 			}
 			fragment.setInitializer(initializer);
 			VariableDeclarationStatement decl= ast.newVariableDeclarationStatement(fragment);
 			decl.setType(type);
 			fLocals.add(decl);
 		}
+		fContext.compilationUnit= fCUnit;
 		fContext.arguments= realArguments;
 	}
 
-	private boolean needsVarargBoxing(List arguments) {
+	private boolean needsVarargBoxing(List<Expression> arguments) {
 		if (!fSourceProvider.isVarargs())
 			return false;
 		/*
@@ -553,7 +554,7 @@ public class CallInliner {
 		// parameter is array type
 		// one arg
 		if (index == arguments.size() - 1) {
-			ITypeBinding argument= ((Expression)arguments.get(index)).resolveTypeBinding();
+			ITypeBinding argument= arguments.get(index).resolveTypeBinding();
 			if (argument == null)
 				return false;
 			ITypeBinding parameter= fSourceProvider.getParameterData(index).getTypeBinding();
@@ -562,17 +563,6 @@ public class CallInliner {
 		return true;
 	}
 
-	private boolean argumentNeedsParenthesis(Expression expression, ParameterData param) {
-		if (expression instanceof CastExpression || expression instanceof ArrayCreation)
-			return true;
-		int argPrecedence= OperatorPrecedence.getExpressionPrecedence(expression);
-		int paramPrecedence= param.getOperatorPrecedence();
-		if (argPrecedence != Integer.MAX_VALUE && paramPrecedence != Integer.MAX_VALUE)
-			return argPrecedence < paramPrecedence;
-
-		return false;
-	}
-
 	private void computeReceiver() throws BadLocationException {
 		Expression receiver= Invocations.getExpression(fInvocation);
 		if (receiver == null)
@@ -610,8 +600,8 @@ public class CallInliner {
 	private void addNewLocals(TextEditGroup textEditGroup) {
 		if (fLocals.isEmpty())
 			return;
-		for (Iterator iter= fLocals.iterator(); iter.hasNext();) {
-			ASTNode element= (ASTNode)iter.next();
+		for (Iterator<VariableDeclarationStatement> iter= fLocals.iterator(); iter.hasNext();) {
+			ASTNode element= iter.next();
 			fListRewrite.insertAt(element, fInsertionIndex++, textEditGroup);
 		}
 	}
@@ -653,16 +643,27 @@ public class CallInliner {
 				node= fRewrite.createStringPlaceholder(block, ASTNode.METHOD_INVOCATION);
 
 				// fixes bug #24941
-				if(needsExplicitCast(status)) {
+				if (needsExplicitCast(status)) {
 					AST ast= node.getAST();
 					CastExpression castExpression= ast.newCastExpression();
 					Type returnType= fImportRewrite.addImport(fSourceProvider.getReturnType(), ast);
 					castExpression.setType(returnType);
+
+					if (NecessaryParenthesesChecker.needsParentheses(fSourceProvider.getReturnExpressions().get(0), castExpression, CastExpression.EXPRESSION_PROPERTY)) {
+						ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
+						parenthesized.setExpression((Expression)node);
+						node= parenthesized;
+					}
+
 					castExpression.setExpression((Expression)node);
 					node= castExpression;
-				}
 
-				if (needsParenthesis()) {
+					if (NecessaryParenthesesChecker.needsParentheses(castExpression, fTargetNode.getParent(), fTargetNode.getLocationInParent())) {
+						ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
+						parenthesized.setExpression((Expression)node);
+						node= parenthesized;
+					}
+				} else if (fSourceProvider.needsReturnedExpressionParenthesis(fTargetNode.getParent(), fTargetNode.getLocationInParent())) {
 					ParenthesizedExpression pExp= fTargetNode.getAST().newParenthesizedExpression();
 					pExp.setExpression((Expression)node);
 					node= pExp;
@@ -695,10 +696,16 @@ public class CallInliner {
 		// returned expression then we don't need an explicit cast.
 		if (fSourceProvider.returnTypeMatchesReturnExpressions())
 				return false;
-		ASTNode parent= fTargetNode.getParent();
-		int nodeType= parent.getNodeType();
-		if (nodeType == ASTNode.METHOD_INVOCATION) {
-			MethodInvocation methodInvocation= (MethodInvocation)parent;
+
+		List<Expression> returnExprs= fSourceProvider.getReturnExpressions();
+		// it is inferred that only methods consisting of a single
+		// return statement can be inlined as parameters in other
+		// method invocations
+		if (returnExprs.size() != 1)
+			return false;
+
+		if (fTargetNode.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
+			MethodInvocation methodInvocation= (MethodInvocation)fTargetNode.getParent();
 			if(methodInvocation.getExpression() == fTargetNode)
 				return false;
 			IMethodBinding method= methodInvocation.resolveMethodBinding();
@@ -709,45 +716,26 @@ public class CallInliner {
 			}
 			ITypeBinding[] parameters= method.getParameterTypes();
 			int argumentIndex= methodInvocation.arguments().indexOf(fInvocation);
-			List returnExprs= fSourceProvider.getReturnExpressions();
-			// it is inferred that only methods consisting of a single
-			// return statement can be inlined as parameters in other
-			// method invocations
-			if (returnExprs.size() != 1)
-				return false;
-			parameters[argumentIndex]= ((Expression)returnExprs.get(0)).resolveTypeBinding();
+
+			parameters[argumentIndex]= returnExprs.get(0).resolveTypeBinding();
 
 			ITypeBinding type= ASTNodes.getReceiverTypeBinding(methodInvocation);
 			TypeBindingVisitor visitor= new AmbiguousMethodAnalyzer(
 				fTypeEnvironment, method, fTypeEnvironment.create(parameters));
 			if(!visitor.visit(type)) {
 				return true;
-			}
-			else if(type.isInterface()) {
+			} else if (type.isInterface()) {
 				return !Bindings.visitInterfaces(type, visitor);
-			}
-			else if(Modifier.isAbstract(type.getModifiers())) {
+			} else if (Modifier.isAbstract(type.getModifiers())) {
 				return !Bindings.visitHierarchy(type, visitor);
-			}
-			else {
+			} else {
 				// it is not needed to visit interfaces if receiver is a concrete class
 				return !Bindings.visitSuperclasses(type, visitor);
 			}
+		} else {
+			ITypeBinding explicitCast= ASTNodes.getExplicitCast(returnExprs.get(0), (Expression)fTargetNode);
+			return explicitCast != null;
 		}
-		return false;
-	}
-
-	private boolean needsParenthesis() {
-		if (!fSourceProvider.needsReturnedExpressionParenthesis())
-			return false;
-		ASTNode parent= fTargetNode.getParent();
-		int type= parent.getNodeType();
-		return
-			type == ASTNode.METHOD_INVOCATION ||
-			(parent instanceof Expression && type != ASTNode.ASSIGNMENT) ||
-			(fSourceProvider.returnsConditionalExpression() &&
-				type == ASTNode.VARIABLE_DECLARATION_FRAGMENT &&
-				((VariableDeclarationFragment)parent).getInitializer() == fTargetNode);
 	}
 
 	private VariableDeclarationStatement createLocalDeclaration(ITypeBinding type, String name, Expression initializer) {
@@ -771,12 +759,13 @@ public class CallInliner {
      * @param arguments the arguments
      * @return all arguments that cannot be inlined
      */
-	private Set crossCheckArguments(List arguments) {
-		final Set assigned= new HashSet();
-		final Set result= new HashSet();
-		for (Iterator iter= arguments.iterator(); iter.hasNext();) {
-			final Expression expression= (Expression) iter.next();
+	private Set<Expression> crossCheckArguments(List<Expression> arguments) {
+		final Set<IBinding> assigned= new HashSet<IBinding>();
+		final Set<Expression> result= new HashSet<Expression>();
+		for (Iterator<Expression> iter= arguments.iterator(); iter.hasNext();) {
+			final Expression expression= iter.next();
 			expression.accept(new ASTVisitor() {
+				@Override
 				public boolean visit(Assignment node) {
 					Expression lhs= node.getLeftHandSide();
 					if (lhs instanceof Name) {
@@ -790,10 +779,11 @@ public class CallInliner {
 				}
 			});
 		}
-		for (Iterator iter= arguments.iterator(); iter.hasNext();) {
-			final Expression expression= (Expression) iter.next();
+		for (Iterator<Expression> iter= arguments.iterator(); iter.hasNext();) {
+			final Expression expression= iter.next();
 			if (!result.contains(expression)) {
 				expression.accept(new HierarchicalASTVisitor() {
+					@Override
 					public boolean visit(Name node) {
 						IBinding binding= node.resolveBinding();
 						if (binding != null && assigned.contains(binding))
@@ -900,10 +890,6 @@ public class CallInliner {
 				&& fSourceProvider.isDangligIf();
 	}
 
-	private String getContent(ASTNode node) throws BadLocationException {
-		return fBuffer.getDocument().get(node.getStartPosition(), node.getLength());
-	}
-
 	private boolean isControlStatement(ASTNode node) {
 		int type= node.getNodeType();
 		return type == ASTNode.IF_STATEMENT || type == ASTNode.FOR_STATEMENT || type == ASTNode.ENHANCED_FOR_STATEMENT ||
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java
index 1462924..8bb9a0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,22 +51,27 @@ class ConstantChecks {
 			super(ex);
 		}
 
+		@Override
 		public boolean visit(SuperFieldAccess node) {
 			fResult= false;
 			return false;
 		}
+		@Override
 		public boolean visit(SuperMethodInvocation node) {
 			fResult= false;
 			return false;
 		}
+		@Override
 		public boolean visit(ThisExpression node) {
 			fResult= false;
 			return false;
 		}
+		@Override
 		public boolean visit(FieldAccess node) {
 			fResult= new LoadTimeConstantChecker((IExpressionFragment) ASTFragmentFactory.createFragmentForFullSubtree(node.getExpression())).check();
 			return false;
 		}
+		@Override
 		public boolean visit(MethodInvocation node) {
 			if(node.getExpression() == null) {
 				visitName(node.getName());
@@ -76,9 +81,11 @@ class ConstantChecks {
 
 			return false;
 		}
+		@Override
 		public boolean visit(QualifiedName node) {
 			return visitName(node);
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			return visitName(node);
 		}
@@ -128,22 +135,27 @@ class ConstantChecks {
 			super(ex);
 		}
 
+		@Override
 		public boolean visit(SuperFieldAccess node) {
 			fResult= false;
 			return false;
 		}
+		@Override
 		public boolean visit(SuperMethodInvocation node) {
 			fResult= false;
 			return false;
 		}
+		@Override
 		public boolean visit(ThisExpression node) {
 			fResult= false;
 			return false;
 		}
 
+		@Override
 		public boolean visit(QualifiedName node) {
 			return visitName(node);
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			return visitName(node);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java
index f954143..a5652b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -123,9 +123,10 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 
 	public static class TypeVariableFinder extends ASTVisitor {
 
-		private final Map fBindings= new HashMap();
-		private final List fFound= new ArrayList();
+		private final Map<String, ITypeBinding> fBindings= new HashMap<String, ITypeBinding>();
+		private final List<ITypeBinding> fFound= new ArrayList<ITypeBinding>();
 
+		@Override
 		public final boolean visit(final SimpleName node) {
 			Assert.isNotNull(node);
 			final ITypeBinding binding= node.resolveTypeBinding();
@@ -154,7 +155,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 
     private CompilationUnit fCompilationUnitNode;
     private AnonymousClassDeclaration fAnonymousInnerClassNode;
-    private Set fClassNamesUsed;
+    private Set<String> fClassNamesUsed;
 	private boolean fSelfInitializing= false;
 
 	private LinkedProposalModel fLinkedProposalModel;
@@ -248,7 +249,8 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
         fDeclareStatic= declareStatic;
     }
 
-    public String getName() {
+    @Override
+	public String getName() {
         return RefactoringCoreMessages.ConvertAnonymousToNestedRefactoring_name;
     }
 
@@ -260,7 +262,8 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
     	return StubUtility.doAddComments(fCu.getJavaProject());
     }
 
-    public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
+    @Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
         RefactoringStatus result= Checks.validateModifiesFiles(
         	ResourceUtil.getFiles(new ICompilationUnit[]{fCu}),
 			getValidationContext());
@@ -296,11 +299,11 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 			final AbstractTypeDeclaration declaration= (AbstractTypeDeclaration) ASTNodes.getParent(fAnonymousInnerClassNode, AbstractTypeDeclaration.class);
 			if (declaration instanceof TypeDeclaration) {
 				final AbstractTypeDeclaration[] nested= ((TypeDeclaration) declaration).getTypes();
-				fClassNamesUsed= new HashSet(nested.length);
+				fClassNamesUsed= new HashSet<String>(nested.length);
 				for (int index= 0; index < nested.length; index++)
 					fClassNamesUsed.add(nested[index].getName().getIdentifier());
 			} else
-				fClassNamesUsed= Collections.EMPTY_SET;
+				fClassNamesUsed= Collections.emptySet();
 		}
 	}
 
@@ -341,12 +344,12 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
     }
 
     private boolean accessesAnonymousFields() {
-        List anonymousInnerFieldTypes = getAllEnclosingAnonymousTypesField();
-        List accessedField = getAllAccessedFields();
-        final Iterator it = anonymousInnerFieldTypes.iterator();
+        List<IVariableBinding> anonymousInnerFieldTypes = getAllEnclosingAnonymousTypesField();
+        List<IBinding> accessedField = getAllAccessedFields();
+        final Iterator<IVariableBinding> it = anonymousInnerFieldTypes.iterator();
         while(it.hasNext()) {
-            final IVariableBinding variableBinding = (IVariableBinding) it.next();
-            final Iterator it2 = accessedField.iterator();
+            final IVariableBinding variableBinding = it.next();
+            final Iterator<IBinding> it2 = accessedField.iterator();
             while (it2.hasNext()) {
                 IVariableBinding variableBinding2 = (IVariableBinding) it2.next();
                 if(Bindings.equals(variableBinding, variableBinding2)) {
@@ -357,11 +360,12 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
         return false;
     }
 
-	private List getAllAccessedFields() {
-		final List accessedFields= new ArrayList();
+	private List<IBinding> getAllAccessedFields() {
+		final List<IBinding> accessedFields= new ArrayList<IBinding>();
 
 		ASTVisitor visitor= new ASTVisitor() {
 
+			@Override
 			public boolean visit(FieldAccess node) {
 				final IVariableBinding binding= node.resolveFieldBinding();
 				if (binding != null && !binding.isEnumConstant())
@@ -369,6 +373,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 				return super.visit(node);
 			}
 
+			@Override
 			public boolean visit(QualifiedName node) {
 				final IBinding binding= node.resolveBinding();
 				if (binding != null && binding instanceof IVariableBinding) {
@@ -379,6 +384,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 				return super.visit(node);
 			}
 
+			@Override
 			public boolean visit(SimpleName node) {
 				final IBinding binding= node.resolveBinding();
 				if (binding != null && binding instanceof IVariableBinding) {
@@ -389,6 +395,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 				return super.visit(node);
 			}
 
+			@Override
 			public boolean visit(SuperFieldAccess node) {
 				final IVariableBinding binding= node.resolveFieldBinding();
 				if (binding != null && !binding.isEnumConstant())
@@ -401,8 +408,8 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 		return accessedFields;
 	}
 
-    private List getAllEnclosingAnonymousTypesField() {
-		final List ans= new ArrayList();
+    private List<IVariableBinding> getAllEnclosingAnonymousTypesField() {
+		final List<IVariableBinding> ans= new ArrayList<IVariableBinding>();
 		final AbstractTypeDeclaration declaration= (AbstractTypeDeclaration) ASTNodes.getParent(fAnonymousInnerClassNode, AbstractTypeDeclaration.class);
 		AnonymousClassDeclaration anonymous= (AnonymousClassDeclaration) ASTNodes.getParent(fAnonymousInnerClassNode, ASTNode.ANONYMOUS_CLASS_DECLARATION);
 		while (anonymous != null) {
@@ -432,7 +439,8 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
     /*
      * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkInput(org.eclipse.core.runtime.IProgressMonitor)
      */
-    public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
+    @Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
         try {
             RefactoringStatus status= validateInput();
             if (accessesAnonymousFields())
@@ -455,6 +463,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
     /*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		final CompilationUnitChange result= createCompilationUnitChange(pm);
 		result.setDescriptor(createRefactoringDescriptor());
@@ -462,7 +471,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 	}
 
 	private ITypeBinding[] getTypeParameters() {
-		final List parameters= new ArrayList(4);
+		final List<ITypeBinding> parameters= new ArrayList<ITypeBinding>(4);
 		final ClassInstanceCreation creation= (ClassInstanceCreation) fAnonymousInnerClassNode.getParent();
 		if (fDeclareStatic) {
 			final TypeVariableFinder finder= new TypeVariableFinder();
@@ -473,8 +482,8 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 			if (declaration != null) {
 				ITypeBinding binding= null;
 				TypeParameter parameter= null;
-				for (final Iterator iterator= declaration.typeParameters().iterator(); iterator.hasNext();) {
-					parameter= (TypeParameter) iterator.next();
+				for (final Iterator<TypeParameter> iterator= declaration.typeParameters().iterator(); iterator.hasNext();) {
+					parameter= iterator.next();
 					binding= parameter.resolveBinding();
 					if (binding != null)
 						parameters.add(binding);
@@ -484,13 +493,13 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 		final TypeVariableFinder finder= new TypeVariableFinder();
 		creation.accept(finder);
 		final ITypeBinding[] variables= finder.getResult();
-		final List remove= new ArrayList(4);
+		final List<ITypeBinding> remove= new ArrayList<ITypeBinding>(4);
 		boolean match= false;
 		ITypeBinding binding= null;
 		ITypeBinding variable= null;
-		for (final Iterator iterator= parameters.iterator(); iterator.hasNext();) {
+		for (final Iterator<ITypeBinding> iterator= parameters.iterator(); iterator.hasNext();) {
 			match= false;
-			binding= (ITypeBinding) iterator.next();
+			binding= iterator.next();
 			for (int index= 0; index < variables.length; index++) {
 				variable= variables[index];
 				if (variable.equals(binding))
@@ -520,7 +529,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 	private RefactoringChangeDescriptor createRefactoringDescriptor() {
 		final ITypeBinding binding= fAnonymousInnerClassNode.resolveBinding();
 		final String[] labels= new String[] { BindingLabelProvider.getBindingLabel(binding, JavaElementLabels.ALL_FULLY_QUALIFIED), BindingLabelProvider.getBindingLabel(binding.getDeclaringMethod(), JavaElementLabels.ALL_FULLY_QUALIFIED)};
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		final String projectName= fCu.getJavaProject().getElementName();
 		final int flags= RefactoringDescriptor.STRUCTURAL_CHANGE | JavaRefactoringDescriptor.JAR_REFACTORING | JavaRefactoringDescriptor.JAR_SOURCE_ATTACHMENT;
 		final String description= RefactoringCoreMessages.ConvertAnonymousToNestedRefactoring_descriptor_description_short;
@@ -590,19 +599,19 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
     }
 
     private void copyArguments(CompilationUnitRewrite rewrite, ClassInstanceCreation newClassCreation) {
-    	Iterator iter= ((ClassInstanceCreation) fAnonymousInnerClassNode.getParent()).arguments().iterator();
+    	Iterator<Expression> iter= ((ClassInstanceCreation) fAnonymousInnerClassNode.getParent()).arguments().iterator();
     	if (!iter.hasNext())
     		return;
 
     	IMethodBinding superConstructorBinding= getSuperConstructorBinding();
     	ITypeBinding[] parameterTypes= superConstructorBinding.getParameterTypes();
 
-    	List arguments= newClassCreation.arguments();
+    	List<Expression> arguments= newClassCreation.arguments();
 		ASTRewrite astRewrite= rewrite.getASTRewrite();
 		int last= parameterTypes.length - 1;
 
 		for (int i= 0; i < last; i++) {
-			arguments.add(astRewrite.createCopyTarget((Expression) iter.next()));
+			arguments.add((Expression) astRewrite.createCopyTarget(iter.next()));
 		}
     	if (superConstructorBinding.isVarargs()) {
     		AST ast= astRewrite.getAST();
@@ -614,7 +623,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
     		arguments= initializer.expressions();
     	}
     	while (iter.hasNext()) {
-    		arguments.add(astRewrite.createCopyTarget((Expression) iter.next()));
+    		arguments.add((Expression) astRewrite.createCopyTarget(iter.next()));
     	}
     }
 
@@ -626,9 +635,9 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
         rewrite.getASTRewrite().getListRewrite(declarations, declarations.getBodyDeclarationsProperty()).insertAt(createNewNestedClass(rewrite, typeParameters), index, null);
     }
 
-    private static int findIndexOfFistNestedClass(List bodyDeclarations) {
-        for (int i= 0, n= bodyDeclarations.size(); i < n; i++) {
-            BodyDeclaration each= (BodyDeclaration)bodyDeclarations.get(i);
+    private static int findIndexOfFistNestedClass(List<BodyDeclaration> list) {
+        for (int i= 0, n= list.size(); i < n; i++) {
+            BodyDeclaration each= list.get(i);
             if (isNestedType(each))
                 return i;
         }
@@ -661,7 +670,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 		IJavaProject project= fCu.getJavaProject();
 
 		IVariableBinding[] bindings= getUsedLocalVariables();
-		ArrayList fieldNames= new ArrayList();
+		ArrayList<String> fieldNames= new ArrayList<String>();
 		for (int i= 0; i < bindings.length; i++) {
 			String name= StubUtility.getBaseName(bindings[i], project);
 			String[] fieldNameProposals= StubUtility.getVariableNameSuggestions(NamingConventions.VK_INSTANCE_FIELD, project, name, 0, fieldNames, true);
@@ -675,9 +684,9 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 				}
 			}
 		}
-		String[] allFieldNames= (String[]) fieldNames.toArray(new String[fieldNames.size()]);
+		String[] allFieldNames= fieldNames.toArray(new String[fieldNames.size()]);
 
-		List newBodyDeclarations= newDeclaration.bodyDeclarations();
+		List<BodyDeclaration> newBodyDeclarations= newDeclaration.bodyDeclarations();
 
 		createFieldsForAccessedLocals(rewrite, bindings, allFieldNames, newBodyDeclarations);
 
@@ -707,7 +716,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 		return newDeclaration;
 	}
 
-	private void updateAndMoveBodyDeclarations(CompilationUnitRewrite rewriter, IVariableBinding[] bindings, String[] fieldNames, List newBodyDeclarations, MethodDeclaration newConstructorDecl) {
+	private void updateAndMoveBodyDeclarations(CompilationUnitRewrite rewriter, IVariableBinding[] bindings, String[] fieldNames, List<BodyDeclaration> newBodyDeclarations, MethodDeclaration newConstructorDecl) {
 		final ASTRewrite astRewrite= rewriter.getASTRewrite();
 		final AST ast= astRewrite.getAST();
 
@@ -715,8 +724,8 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 
 		int fieldInsertIndex= newConstructorDecl != null ? newBodyDeclarations.lastIndexOf(newConstructorDecl) : newBodyDeclarations.size();
 
-		for (Iterator iterator= fAnonymousInnerClassNode.bodyDeclarations().iterator(); iterator.hasNext();) {
-			BodyDeclaration body= (BodyDeclaration) iterator.next();
+		for (Iterator<BodyDeclaration> iterator= fAnonymousInnerClassNode.bodyDeclarations().iterator(); iterator.hasNext();) {
+			BodyDeclaration body= iterator.next();
 
 			for (int i= 0; i < bindings.length; i++) {
 				SimpleName[] names= LinkedNodeFinder.findByBinding(body, bindings[i]);
@@ -735,19 +744,19 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 				}
 			}
 			if (body instanceof Initializer || body instanceof FieldDeclaration) {
-				newBodyDeclarations.add(fieldInsertIndex++, astRewrite.createMoveTarget(body));
+				newBodyDeclarations.add(fieldInsertIndex++, (BodyDeclaration) astRewrite.createMoveTarget(body));
 			} else {
-				newBodyDeclarations.add(astRewrite.createMoveTarget(body));
+				newBodyDeclarations.add((BodyDeclaration) astRewrite.createMoveTarget(body));
 			}
 		}
 
 		if (newConstructorDecl != null) {
 			// move initialization of existing fields to constructor if an outer is referenced
-			List bodyStatements= newConstructorDecl.getBody().statements();
+			List<Statement> bodyStatements= newConstructorDecl.getBody().statements();
 
-			List fieldsToInitializeInConstructor= getFieldsToInitializeInConstructor();
-			for (Iterator iter= fieldsToInitializeInConstructor.iterator(); iter.hasNext();) {
-				VariableDeclarationFragment fragment= (VariableDeclarationFragment) iter.next();
+			List<VariableDeclarationFragment> fieldsToInitializeInConstructor= getFieldsToInitializeInConstructor();
+			for (Iterator<VariableDeclarationFragment> iter= fieldsToInitializeInConstructor.iterator(); iter.hasNext();) {
+				VariableDeclarationFragment fragment= iter.next();
 				Expression initializer= fragment.getInitializer();
 				Expression replacement= (Expression) astRewrite.get(fragment, VariableDeclarationFragment.INITIALIZER_PROPERTY);
 				if (replacement == initializer) {
@@ -760,7 +769,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 		}
 	}
 
-    private void createFieldsForAccessedLocals(CompilationUnitRewrite rewrite, IVariableBinding[] varBindings, String[] fieldNames, List newBodyDeclarations) throws CoreException {
+    private void createFieldsForAccessedLocals(CompilationUnitRewrite rewrite, IVariableBinding[] varBindings, String[] fieldNames, List<BodyDeclaration> newBodyDeclarations) throws CoreException {
 		final ImportRewrite importRewrite= rewrite.getImportRewrite();
 		final ASTRewrite astRewrite= rewrite.getASTRewrite();
 		final AST ast= astRewrite.getAST();
@@ -796,21 +805,22 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 
 
     private IVariableBinding[] getUsedLocalVariables() {
-        final Set result= new HashSet(0);
+        final Set<IBinding> result= new HashSet<IBinding>(0);
         collectRefrencedVariables(fAnonymousInnerClassNode, result);
-        ArrayList usedLocals= new ArrayList();
-        for (Iterator iterator= result.iterator(); iterator.hasNext();) {
+        ArrayList<IVariableBinding> usedLocals= new ArrayList<IVariableBinding>();
+        for (Iterator<IBinding> iterator= result.iterator(); iterator.hasNext();) {
         	IVariableBinding next= (IVariableBinding) iterator.next();
 			if (isBindingToTemp(next)) {
         		usedLocals.add(next);
         	}
 		}
-        return (IVariableBinding[])usedLocals.toArray(new IVariableBinding[usedLocals.size()]);
+        return usedLocals.toArray(new IVariableBinding[usedLocals.size()]);
     }
 
-    private void collectRefrencedVariables(ASTNode root, final Set result) {
+    private void collectRefrencedVariables(ASTNode root, final Set<IBinding> result) {
     	root.accept(new ASTVisitor() {
-            public boolean visit(SimpleName node) {
+            @Override
+			public boolean visit(SimpleName node) {
                 IBinding binding= node.resolveBinding();
                 if (binding instanceof IVariableBinding)
                 	result.add(binding);
@@ -853,10 +863,10 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 
 		newConstructor.setBody(ast.newBlock());
 
-		List newStatements= newConstructor.getBody().statements();
+		List<Statement> newStatements= newConstructor.getBody().statements();
 
-        List newParameters= newConstructor.parameters();
-        List newParameterNames= new ArrayList();
+        List<SingleVariableDeclaration> newParameters= newConstructor.parameters();
+        List<String> newParameterNames= new ArrayList<String>();
 
         // add parameters for elements passed with the instance creation
         if (!instanceCreation.arguments().isEmpty()) {
@@ -920,7 +930,7 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 
 		if (doAddComments()) {
 			try {
-				String[] allParamNames= (String[]) newParameterNames.toArray(new String[newParameterNames.size()]);
+				String[] allParamNames= newParameterNames.toArray(new String[newParameterNames.size()]);
 				String string= CodeGeneration.getMethodComment(fCu, fClassName, fClassName, allParamNames, new String[0], null, new String[0], null, StubUtility.getLineDelimiterUsed(fCu));
 				if (string != null) {
 					Javadoc javadoc= (Javadoc) astRewrite.createStringPlaceholder(string, ASTNode.JAVADOC);
@@ -951,14 +961,14 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
 
 
     // live List of VariableDeclarationFragments
-    private List getFieldsToInitializeInConstructor() {
-        List result= new ArrayList(0);
-        for (Iterator iter= fAnonymousInnerClassNode.bodyDeclarations().iterator(); iter.hasNext(); ) {
+    private List<VariableDeclarationFragment> getFieldsToInitializeInConstructor() {
+        List<VariableDeclarationFragment> result= new ArrayList<VariableDeclarationFragment>(0);
+        for (Iterator<BodyDeclaration> iter= fAnonymousInnerClassNode.bodyDeclarations().iterator(); iter.hasNext(); ) {
             Object element= iter.next();
             if (element instanceof FieldDeclaration) {
-            	List fragments= ((FieldDeclaration) element).fragments();
-                for (Iterator fragmentIter= fragments.iterator(); fragmentIter.hasNext(); ) {
-                    VariableDeclarationFragment fragment= (VariableDeclarationFragment) fragmentIter.next();
+            	List<VariableDeclarationFragment> fragments= ((FieldDeclaration) element).fragments();
+                for (Iterator<VariableDeclarationFragment> fragmentIter= fragments.iterator(); fragmentIter.hasNext(); ) {
+                    VariableDeclarationFragment fragment= fragmentIter.next();
                     if (isToBeInitializerInConstructor(fragment, result))
                         result.add(fragment);
                 }
@@ -967,17 +977,17 @@ public class ConvertAnonymousToNestedRefactoring extends Refactoring {
         return result;
     }
 
-    private boolean isToBeInitializerInConstructor(VariableDeclarationFragment fragment, List fieldsToInitialize) {
+    private boolean isToBeInitializerInConstructor(VariableDeclarationFragment fragment, List<VariableDeclarationFragment> fieldsToInitialize) {
     	return fragment.getInitializer() != null && areLocalsUsedIn(fragment.getInitializer(), fieldsToInitialize);
     }
 
-    private boolean areLocalsUsedIn(Expression fieldInitializer, List fieldsToInitialize) {
-        Set localsUsed= new HashSet(0);
+    private boolean areLocalsUsedIn(Expression fieldInitializer, List<VariableDeclarationFragment> fieldsToInitialize) {
+        Set<IBinding> localsUsed= new HashSet<IBinding>(0);
         collectRefrencedVariables(fieldInitializer, localsUsed);
 
         ITypeBinding anonType= fAnonymousInnerClassNode.resolveBinding();
 
-        for (Iterator iterator= localsUsed.iterator(); iterator.hasNext();) {
+        for (Iterator<IBinding> iterator= localsUsed.iterator(); iterator.hasNext();) {
 			IVariableBinding curr= (IVariableBinding) iterator.next();
 			if (isBindingToTemp(curr)) { // reference a local from outside
 				return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java
index f541092..5f3e904 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,10 +29,11 @@ import org.eclipse.jdt.internal.corext.refactoring.util.AbstractExceptionAnalyze
 		for (int i= 0; i < statements.length; i++) {
 			statements[i].accept(analyzer);
 		}
-		List exceptions= analyzer.getCurrentExceptions();
-		return (ITypeBinding[]) exceptions.toArray(new ITypeBinding[exceptions.size()]);
+		List<ITypeBinding> exceptions= analyzer.getCurrentExceptions();
+		return exceptions.toArray(new ITypeBinding[exceptions.size()]);
 	}
 
+	@Override
 	public boolean visit(ThrowStatement node) {
 		ITypeBinding exception= node.getExpression().resolveTypeBinding();
 		if (exception == null)		// Safety net for null bindings when compiling fails.
@@ -42,14 +43,17 @@ import org.eclipse.jdt.internal.corext.refactoring.util.AbstractExceptionAnalyze
 		return true;
 	}
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		return handleExceptions((IMethodBinding)node.getName().resolveBinding());
 	}
 
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		return handleExceptions((IMethodBinding)node.getName().resolveBinding());
 	}
 
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		return handleExceptions(node.resolveConstructorBinding());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java
index b2ffc89..c70080a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
+import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.EnumDeclaration;
@@ -51,6 +52,7 @@ import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.eclipse.jdt.core.dom.FieldAccess;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.Initializer;
 import org.eclipse.jdt.core.dom.Javadoc;
@@ -100,6 +102,7 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.CodeGeneration;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.text.correction.ASTResolving;
 import org.eclipse.jdt.internal.ui.text.correction.ModifierCorrectionSubProcessor;
@@ -190,6 +193,7 @@ public class ExtractConstantRefactoring extends Refactoring {
 		fLinkedProposalModel= linkedProposalModel;
 	}
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.ExtractConstantRefactoring_name;
 	}
@@ -258,8 +262,8 @@ public class ExtractConstantRefactoring extends Refactoring {
 		if (fExcludedVariableNames == null) {
 			try {
 				IExpressionFragment expr= getSelectedExpression();
-				Collection takenNames= new ScopeAnalyzer(fCuRewrite.getRoot()).getUsedVariableNames(expr.getStartPosition(), expr.getLength());
-				fExcludedVariableNames= (String[]) takenNames.toArray(new String[takenNames.size()]);
+				Collection<String> takenNames= new ScopeAnalyzer(fCuRewrite.getRoot()).getUsedVariableNames(expr.getStartPosition(), expr.getLength());
+				fExcludedVariableNames= takenNames.toArray(new String[takenNames.size()]);
 			} catch (JavaModelException e) {
 				fExcludedVariableNames= new String[0];
 			}
@@ -267,6 +271,7 @@ public class ExtractConstantRefactoring extends Refactoring {
 		return fExcludedVariableNames;
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask("", 7); //$NON-NLS-1$
@@ -290,8 +295,12 @@ public class ExtractConstantRefactoring extends Refactoring {
 			if (isLiteralNodeSelected())
 				fReplaceAllOccurrences= false;
 
+			if (isInTypeDeclarationAnnotation(getSelectedExpression().getAssociatedNode())) {
+				fVisibility= JdtFlags.VISIBILITY_STRING_PACKAGE;
+			}
+			
 			ITypeBinding targetType= getContainingTypeBinding();
-			if (targetType.isAnnotation() || targetType.isInterface()) {
+			if (targetType.isInterface()) {
 				fTargetIsInterface= true;
 				fVisibility= JdtFlags.VISIBILITY_STRING_PUBLIC;
 			}
@@ -442,6 +451,7 @@ public class ExtractConstantRefactoring extends Refactoring {
 	}
 
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask(RefactoringCoreMessages.ExtractConstantRefactoring_checking_preconditions, 2);
 
@@ -472,7 +482,7 @@ public class ExtractConstantRefactoring extends Refactoring {
 
 	private void checkSource(SubProgressMonitor monitor, RefactoringStatus result) throws CoreException {
 		String newCuSource= fChange.getPreviewContent(new NullProgressMonitor());
-		CompilationUnit newCUNode= new RefactoringASTParser(AST.JLS3).parse(newCuSource, fCu, true, true, monitor);
+		CompilationUnit newCUNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(newCuSource, fCu, true, true, monitor);
 
 		IProblem[] newProblems= RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, fCuRewrite.getRoot());
 		for (int i= 0; i < newProblems.length; i++) {
@@ -486,12 +496,12 @@ public class ExtractConstantRefactoring extends Refactoring {
 		Type type= getConstantType();
 
 		IExpressionFragment fragment= getSelectedExpression();
-		String initializerSource= fCu.getBuffer().getText(fragment.getStartPosition(), fragment.getLength());
+		Expression initializer= getSelectedExpression().createCopyTarget(fCuRewrite.getASTRewrite(), true);
 
 		AST ast= fCuRewrite.getAST();
 		VariableDeclarationFragment variableDeclarationFragment= ast.newVariableDeclarationFragment();
 		variableDeclarationFragment.setName(ast.newSimpleName(fConstantName));
-		variableDeclarationFragment.setInitializer((Expression) fCuRewrite.getASTRewrite().createStringPlaceholder(initializerSource, ASTNode.SIMPLE_NAME));
+		variableDeclarationFragment.setInitializer(initializer);
 
 		FieldDeclaration fieldDeclaration= ast.newFieldDeclaration(variableDeclarationFragment);
 		fieldDeclaration.setType(type);
@@ -560,6 +570,7 @@ public class ExtractConstantRefactoring extends Refactoring {
 		return fConstantTypeCache;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		ExtractConstantDescriptor descriptor= createRefactoringDescriptor();
 		fChange.setDescriptor(new RefactoringChangeDescriptor(descriptor));
@@ -567,7 +578,7 @@ public class ExtractConstantRefactoring extends Refactoring {
 	}
 
 	private ExtractConstantDescriptor createRefactoringDescriptor() {
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fCu.getJavaProject();
 		if (javaProject != null)
@@ -608,10 +619,18 @@ public class ExtractConstantRefactoring extends Refactoring {
 		IASTFragment[] fragmentsToReplace= getFragmentsToReplace();
 		for (int i= 0; i < fragmentsToReplace.length; i++) {
 			IASTFragment fragment= fragmentsToReplace[i];
+			ASTNode node= fragment.getAssociatedNode();
+			boolean inTypeDeclarationAnnotation= isInTypeDeclarationAnnotation(node);
+			if (inTypeDeclarationAnnotation && JdtFlags.VISIBILITY_STRING_PRIVATE == getVisibility())
+				continue;
 
 			SimpleName ref= ast.newSimpleName(fConstantName);
 			Name replacement= ref;
-			if (qualifyReferencesWithDeclaringClassName()) {
+			boolean qualifyReference= qualifyReferencesWithDeclaringClassName();
+			if (!qualifyReference) {
+				qualifyReference= inTypeDeclarationAnnotation;
+			}
+			if (qualifyReference) {
 				replacement= ast.newQualifiedName(ast.newSimpleName(getContainingTypeBinding().getName()), ref);
 			}
 			TextEditGroup description= fCuRewrite.createGroupDescription(RefactoringCoreMessages.ExtractConstantRefactoring_replace);
@@ -622,15 +641,20 @@ public class ExtractConstantRefactoring extends Refactoring {
 		}
 	}
 
+	private boolean isInTypeDeclarationAnnotation(ASTNode node) throws JavaModelException {
+		ASTNode enclosingAnnotation= ASTNodes.getParent(node, Annotation.class);
+		return enclosingAnnotation != null && enclosingAnnotation.getParent() == getContainingTypeDeclarationNode();
+	}
+
 	private void computeConstantDeclarationLocation() throws JavaModelException {
 		if (isDeclarationLocationComputed())
 			return;
 
 		BodyDeclaration lastStaticDependency= null;
-		Iterator decls= getContainingTypeDeclarationNode().bodyDeclarations().iterator();
+		Iterator<BodyDeclaration> decls= getContainingTypeDeclarationNode().bodyDeclarations().iterator();
 
 		while (decls.hasNext()) {
-			BodyDeclaration decl= (BodyDeclaration) decls.next();
+			BodyDeclaration decl= decls.next();
 
 			int modifiers;
 			if (decl instanceof FieldDeclaration)
@@ -670,8 +694,8 @@ public class ExtractConstantRefactoring extends Refactoring {
 
 		if(bd instanceof FieldDeclaration) {
 			FieldDeclaration fieldDecl = (FieldDeclaration) bd;
-			for(Iterator fragments = fieldDecl.fragments().iterator(); fragments.hasNext();) {
-				VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragments.next();
+			for(Iterator<VariableDeclarationFragment> fragments = fieldDecl.fragments().iterator(); fragments.hasNext();) {
+				VariableDeclarationFragment fragment = fragments.next();
 				SimpleName staticFieldName = fragment.getName();
 				if(selected.getSubFragmentsMatching(ASTFragmentFactory.createFragmentForFullSubtree(staticFieldName)).length != 0)
 					return true;
@@ -721,13 +745,12 @@ public class ExtractConstantRefactoring extends Refactoring {
 	}
 
 	/*
-	 * Elements returned by next() are BodyDeclaration
-	 * instances.
+	 * Elements returned by next() are BodyDeclaration or Annotation instances.
 	 */
-	private Iterator getReplacementScope() throws JavaModelException {
+	private Iterator<ASTNode> getReplacementScope() throws JavaModelException {
 		boolean declPredecessorReached= false;
 
-		Collection scope= new ArrayList();
+		Collection<ASTNode> scope= new ArrayList<ASTNode>();
 
 		AbstractTypeDeclaration containingType= getContainingTypeDeclarationNode();
 		if (containingType instanceof EnumDeclaration) {
@@ -735,9 +758,16 @@ public class ExtractConstantRefactoring extends Refactoring {
 			EnumDeclaration enumDeclaration= (EnumDeclaration) containingType;
 			scope.addAll(enumDeclaration.enumConstants());
 		}
+		
+		for (Iterator<IExtendedModifier> iter= containingType.modifiers().iterator(); iter.hasNext();) {
+			IExtendedModifier modifier= iter.next();
+			if (modifier instanceof Annotation) {
+				scope.add((ASTNode) modifier);
+			}
+		}
 
-		for (Iterator bodyDeclarations = containingType.bodyDeclarations().iterator(); bodyDeclarations.hasNext();) {
-		    BodyDeclaration bodyDeclaration= (BodyDeclaration) bodyDeclarations.next();
+		for (Iterator<BodyDeclaration> bodyDeclarations = containingType.bodyDeclarations().iterator(); bodyDeclarations.hasNext();) {
+		    BodyDeclaration bodyDeclaration= bodyDeclarations.next();
 
 		    if(bodyDeclaration == getNodeToInsertConstantDeclarationAfter())
 		    	declPredecessorReached= true;
@@ -749,29 +779,29 @@ public class ExtractConstantRefactoring extends Refactoring {
 	}
 
 	private IASTFragment[] getFragmentsToReplace() throws JavaModelException {
-		List toReplace = new ArrayList();
+		List<IASTFragment> toReplace = new ArrayList<IASTFragment>();
 		if (fReplaceAllOccurrences) {
-			Iterator replacementScope = getReplacementScope();
+			Iterator<ASTNode> replacementScope = getReplacementScope();
 			while(replacementScope.hasNext()) {
-				BodyDeclaration bodyDecl = (BodyDeclaration) replacementScope.next();
-				IASTFragment[] allMatches= ASTFragmentFactory.createFragmentForFullSubtree(bodyDecl).getSubFragmentsMatching(getSelectedExpression());
+				ASTNode scope= replacementScope.next();
+				IASTFragment[] allMatches= ASTFragmentFactory.createFragmentForFullSubtree(scope).getSubFragmentsMatching(getSelectedExpression());
 				IASTFragment[] replaceableMatches = retainOnlyReplacableMatches(allMatches);
 				for(int i = 0; i < replaceableMatches.length; i++)
 					toReplace.add(replaceableMatches[i]);
 			}
 		} else if (canReplace(getSelectedExpression()))
 			toReplace.add(getSelectedExpression());
-		return (IASTFragment[]) toReplace.toArray(new IASTFragment[toReplace.size()]);
+		return toReplace.toArray(new IASTFragment[toReplace.size()]);
 	}
 
 	// !! - like one in ExtractTempRefactoring
 	private static IASTFragment[] retainOnlyReplacableMatches(IASTFragment[] allMatches) {
-		List result= new ArrayList(allMatches.length);
+		List<IASTFragment> result= new ArrayList<IASTFragment>(allMatches.length);
 		for (int i= 0; i < allMatches.length; i++) {
 			if (canReplace(allMatches[i]))
 				result.add(allMatches[i]);
 		}
-		return (IASTFragment[]) result.toArray(new IASTFragment[result.size()]);
+		return result.toArray(new IASTFragment[result.size()]);
 	}
 
 	// !! - like one in ExtractTempRefactoring
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java
index 6e37f6e..b8032b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ import org.eclipse.jdt.core.compiler.ITerminalSymbols;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
@@ -233,6 +234,8 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 				status.addFatalError(RefactoringCoreMessages.ExtractMethodAnalyzer_cannot_extract_type_reference, JavaStatusContext.create(fCUnit, node));
 			} else if (node.getLocationInParent() == SwitchCase.EXPRESSION_PROPERTY) {
 				status.addFatalError(RefactoringCoreMessages.ExtractMethodAnalyzer_cannot_extract_switch_case, JavaStatusContext.create(fCUnit, node));
+			} else if (node instanceof Annotation || ASTNodes.getParent(node, Annotation.class) != null) {
+				status.addFatalError(RefactoringCoreMessages.ExtractMethodAnalyzer_cannot_extract_from_annotation, JavaStatusContext.create(fCUnit, node));
 			}
 		}
 	}
@@ -308,9 +311,9 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
 	//---- Input checking -----------------------------------------------------------------------------------
 
-	public void checkInput(RefactoringStatus status, String methodName) {
+	public void checkInput(RefactoringStatus status, String methodName, ASTNode destination) {
 		ITypeBinding[] arguments= getArgumentTypes();
-		ITypeBinding type= ASTNodes.getEnclosingType(fEnclosingBodyDeclaration);
+		ITypeBinding type= ASTNodes.getEnclosingType(destination);
 		status.merge(Checks.checkMethodInType(type, methodName, arguments));
 		status.merge(Checks.checkMethodInHierarchy(type.getSuperclass(), methodName, null, arguments));
 	}
@@ -374,8 +377,8 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		
 		if (body != lastSelectedNode) {
 			Block block= (Block)body;
-			List statements= block.statements();
-			ASTNode lastStatementInLoop= (ASTNode)statements.get(statements.size() - 1);
+			List<Statement> statements= block.statements();
+			ASTNode lastStatementInLoop= statements.get(statements.size() - 1);
 			if (lastSelectedNode != lastStatementInLoop)
 				return RefactoringCoreMessages.ExtractMethodAnalyzer_branch_mismatch;
 		}
@@ -384,8 +387,9 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		for (int i= 0; i < selectedNodes.length; i++) {
 			final ASTNode astNode= selectedNodes[i];
 			astNode.accept(new ASTVisitor() {
-				ArrayList fLocalLoopLabels= new ArrayList();
+				ArrayList<String> fLocalLoopLabels= new ArrayList<String>();
 				
+				@Override
 				public boolean visit(BreakStatement node) {
 					SimpleName label= node.getLabel();
 					if (label != null && !fLocalLoopLabels.contains(label.getIdentifier())) {
@@ -396,6 +400,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 					return false;
 				}
 				
+				@Override
 				public boolean visit(LabeledStatement node) {
 					SimpleName label= node.getLabel();
 					if (label != null)
@@ -403,6 +408,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 					return true;
 				}
 				
+				@Override
 				public void endVisit(ContinueStatement node) {
 					SimpleName label= node.getLabel();
 					if (label != null && !fLocalLoopLabels.contains(label.getIdentifier())) {
@@ -470,7 +476,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 				body= ((Initializer) fEnclosingBodyDeclaration).getBody();
 			}
 			if (body != null) {
-				List statements= body.statements();
+				List<Statement> statements= body.statements();
 				fIsLastStatementSelected= nodes[nodes.length - 1] == statements.get(statements.size() - 1);
 			}
 		}
@@ -484,19 +490,19 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 	}
 
 	private IVariableBinding[] removeSelectedDeclarations(IVariableBinding[] bindings) {
-		List result= new ArrayList(bindings.length);
+		List<IVariableBinding> result= new ArrayList<IVariableBinding>(bindings.length);
 		Selection selection= getSelection();
 		for (int i= 0; i < bindings.length; i++) {
 			ASTNode decl= ((CompilationUnit)fEnclosingBodyDeclaration.getRoot()).findDeclaringNode(bindings[i]);
 			if (!selection.covers(decl))
 				result.add(bindings[i]);
 		}
-		return (IVariableBinding[])result.toArray(new IVariableBinding[result.size()]);
+		return result.toArray(new IVariableBinding[result.size()]);
 	}
 
 	private ITypeBinding[] computeTypeVariables(ITypeBinding[] bindings) {
 		Selection selection= getSelection();
-		Set result= new HashSet();
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
 		// first remove all type variables that come from outside of the method
 		// or are covered by the selection
 		CompilationUnit compilationUnit= (CompilationUnit)fEnclosingBodyDeclaration.getRoot();
@@ -515,7 +521,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 					result.add(type);
 			}
 		}
-		return (ITypeBinding[])result.toArray(new ITypeBinding[result.size()]);
+		return result.toArray(new ITypeBinding[result.size()]);
 	}
 
 	private void computeOutput(RefactoringStatus status) {
@@ -530,7 +536,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		IRegion region= getSelectedNodeRange();
 		Selection selection= Selection.createFromStartLength(region.getOffset(), region.getLength());
 
-		List localReads= new ArrayList();
+		List<IVariableBinding> localReads= new ArrayList<IVariableBinding>();
 		flowContext.setComputeMode(FlowContext.ARGUMENTS);
 		FlowInfo argInfo= new InputFlowAnalyzer(flowContext, selection, true).perform(fEnclosingBodyDeclaration);
 		IVariableBinding[] reads= argInfo.get(flowContext, FlowInfo.READ | FlowInfo.READ_POTENTIAL | FlowInfo.UNKNOWN);
@@ -554,7 +560,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 				fReturnValue= null;
 				StringBuffer affectedLocals= new StringBuffer();
 				for (int i= 0; i < localReads.size(); i++) {
-					IVariableBinding binding= (IVariableBinding)localReads.get(i);
+					IVariableBinding binding= localReads.get(i);
 					String bindingName= BindingLabelProvider.getBindingLabel(binding, BindingLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.F_PRE_TYPE_SIGNATURE);
 					affectedLocals.append(bindingName);
 					if (i != localReads.size() - 1) {
@@ -565,7 +571,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 				status.addFatalError(message, JavaStatusContext.create(fCUnit, getSelection()));
 				return;
 		}
-		List callerLocals= new ArrayList(5);
+		List<IVariableBinding> callerLocals= new ArrayList<IVariableBinding>(5);
 		FlowInfo localInfo= new InputFlowAnalyzer(flowContext, selection, false).perform(fEnclosingBodyDeclaration);
 		IVariableBinding[] writes= localInfo.get(flowContext, FlowInfo.WRITE | FlowInfo.WRITE_POTENTIAL | FlowInfo.UNKNOWN);
 		for (int i= 0; i < writes.length; i++) {
@@ -573,7 +579,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 			if (getSelection().covers(ASTNodes.findDeclaration(write, fEnclosingBodyDeclaration)))
 				callerLocals.add(write);
 		}
-		fCallerLocals= (IVariableBinding[])callerLocals.toArray(new IVariableBinding[callerLocals.size()]);
+		fCallerLocals= callerLocals.toArray(new IVariableBinding[callerLocals.size()]);
 		if (fReturnValue != null && getSelection().covers(ASTNodes.findDeclaration(fReturnValue, fEnclosingBodyDeclaration)))
 			fReturnLocal= fReturnValue;
 	}
@@ -632,14 +638,14 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 	public ITypeBinding[] getExceptions(boolean includeRuntimeExceptions) {
 		if (includeRuntimeExceptions)
 			return fAllExceptions;
-		List result= new ArrayList(fAllExceptions.length);
+		List<ITypeBinding> result= new ArrayList<ITypeBinding>(fAllExceptions.length);
 		for (int i= 0; i < fAllExceptions.length; i++) {
 			ITypeBinding exception= fAllExceptions[i];
 			if (!includeRuntimeExceptions && Bindings.isRuntimeException(exception))
 				continue;
 			result.add(exception);
 		}
-		return (ITypeBinding[]) result.toArray(new ITypeBinding[result.size()]);
+		return result.toArray(new ITypeBinding[result.size()]);
 	}
 
 	private void computeExceptions() {
@@ -648,11 +654,13 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
 	//---- Special visitor methods ---------------------------------------------------------------------------
 
+	@Override
 	protected void handleNextSelectedNode(ASTNode node) {
 		super.handleNextSelectedNode(node);
 		checkParent(node);
 	}
 
+	@Override
 	protected boolean handleSelectionEndsIn(ASTNode node) {
 		invalidSelection(RefactoringCoreMessages.StatementAnalyzer_doesNotCover, JavaStatusContext.create(fCUnit, node));
 		return super.handleSelectionEndsIn(node);
@@ -668,6 +676,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		invalidSelection(RefactoringCoreMessages.ExtractMethodAnalyzer_parent_mismatch);
 	}
 
+	@Override
 	public void endVisit(CompilationUnit node) {
 		RefactoringStatus status= getStatus();
 		superCall: {
@@ -739,6 +748,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		super.endVisit(node);
 	}
 
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		boolean result= super.visit(node);
 		if (isFirstSelectedNode(node)) {
@@ -748,9 +758,10 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		return result;
 	}
 
+	@Override
 	public boolean visit(Assignment node) {
 		boolean result= super.visit(node);
-		if (getSelection().getVisitSelectionMode(node.getLeftHandSide()) == Selection.SELECTED) {
+		if (getSelection().covers(node.getLeftHandSide()) || getSelection().coveredBy(node.getLeftHandSide())) {
 			invalidSelection(
 				RefactoringCoreMessages.ExtractMethodAnalyzer_leftHandSideOfAssignment,
 				JavaStatusContext.create(fCUnit, node));
@@ -759,6 +770,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		return result;
 	}
 
+	@Override
 	public boolean visit(DoStatement node) {
 		boolean result= super.visit(node);
 
@@ -775,6 +787,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		return result;
 	}
 
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		Block body= node.getBody();
 		if (body == null)
@@ -788,10 +801,12 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		return visitConstructorInvocation(node, super.visit(node));
 	}
 
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		return visitConstructorInvocation(node, super.visit(node));
 	}
@@ -804,6 +819,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		return superResult;
 	}
 
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		boolean result= super.visit(node);
 		if (isFirstSelectedNode(node)) {
@@ -813,6 +829,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		return result;
 	}
 
+	@Override
 	public void endVisit(ForStatement node) {
 		if (getSelection().getEndVisitSelectionMode(node) == Selection.AFTER) {
 			if (node.initializers().contains(getFirstSelectedNode())) {
@@ -824,11 +841,13 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 		super.endVisit(node);
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationExpression node) {
 		checkTypeInDeclaration(node.getType());
 		super.endVisit(node);
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationStatement node) {
 		checkTypeInDeclaration(node.getType());
 		super.endVisit(node);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java
index 1b0e0bc..c75a7e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,11 +75,14 @@ import org.eclipse.jdt.core.dom.LabeledStatement;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Statement;
+import org.eclipse.jdt.core.dom.ThisExpression;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.TypeParameter;
@@ -89,8 +92,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.WhileStatement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.ExtractMethodDescriptor;
@@ -150,8 +153,8 @@ public class ExtractMethodRefactoring extends Refactoring {
 	private int fVisibility;
 	private String fMethodName;
 	private boolean fThrowRuntimeExceptions;
-	private List fParameterInfos;
-	private Set fUsedNames;
+	private List<ParameterInfo> fParameterInfos;
+	private Set<String> fUsedNames;
 	private boolean fGenerateJavadoc;
 	private boolean fReplaceDuplicates;
 	private SnippetFinder.Match[] fDuplicates;
@@ -168,51 +171,61 @@ public class ExtractMethodRefactoring extends Refactoring {
 	private static final String KEY_NAME= "name"; //$NON-NLS-1$
 
 	private static class UsedNamesCollector extends ASTVisitor {
-		private Set result= new HashSet();
-		private Set fIgnore= new HashSet();
-		public static Set perform(ASTNode[] nodes) {
+		private Set<String> result= new HashSet<String>();
+		private Set<SimpleName> fIgnore= new HashSet<SimpleName>();
+		public static Set<String> perform(ASTNode[] nodes) {
 			UsedNamesCollector collector= new UsedNamesCollector();
 			for (int i= 0; i < nodes.length; i++) {
 				nodes[i].accept(collector);
 			}
 			return collector.result;
 		}
+		@Override
 		public boolean visit(FieldAccess node) {
 			Expression exp= node.getExpression();
 			if (exp != null)
 				fIgnore.add(node.getName());
 			return true;
 		}
+		@Override
 		public void endVisit(FieldAccess node) {
 			fIgnore.remove(node.getName());
 		}
+		@Override
 		public boolean visit(MethodInvocation node) {
 			Expression exp= node.getExpression();
 			if (exp != null)
 				fIgnore.add(node.getName());
 			return true;
 		}
+		@Override
 		public void endVisit(MethodInvocation node) {
 			fIgnore.remove(node.getName());
 		}
+		@Override
 		public boolean visit(QualifiedName node) {
 			fIgnore.add(node.getName());
 			return true;
 		}
+		@Override
 		public void endVisit(QualifiedName node) {
 			fIgnore.remove(node.getName());
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			if (!fIgnore.contains(node))
 				result.add(node.getIdentifier());
 			return true;
 		}
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			return visitType(node);
 		}
+		@Override
 		public boolean visit(AnnotationTypeDeclaration node) {
 			return visitType(node);
 		}
+		@Override
 		public boolean visit(EnumDeclaration node) {
 			return visitType(node);
 		}
@@ -260,7 +273,8 @@ public class ExtractMethodRefactoring extends Refactoring {
 		fLinkedProposalModel= linkedProposalModel;
 	}
 
-	 public String getName() {
+	 @Override
+	public String getName() {
 	 	return RefactoringCoreMessages.ExtractMethodRefactoring_name;
 	 }
 
@@ -272,6 +286,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 	 * @return the refactoring status describing the result of the activation check.
 	 * @throws CoreException if checking fails
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
 		pm.beginTask("", 100); //$NON-NLS-1$
@@ -293,6 +308,9 @@ public class ExtractMethodRefactoring extends Refactoring {
 		fAST= fRoot.getAST();
 		fRoot.accept(createVisitor());
 
+		fSelectionStart= fAnalyzer.getSelection().getOffset();
+		fSelectionLength= fAnalyzer.getSelection().getLength();
+
 		result.merge(fAnalyzer.checkInitialConditions(fImportRewriter));
 		if (result.hasFatalError())
 			return result;
@@ -351,7 +369,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 	 * Returns the parameter infos.
 	 * @return a list of parameter infos.
 	 */
-	public List getParameterInfos() {
+	public List<ParameterInfo> getParameterInfos() {
 		return fParameterInfos;
 	}
 
@@ -390,11 +408,11 @@ public class ExtractMethodRefactoring extends Refactoring {
 	 */
 	public RefactoringStatus checkParameterNames() {
 		RefactoringStatus result= new RefactoringStatus();
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo parameter= (ParameterInfo)iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo parameter= iter.next();
 			result.merge(Checks.checkIdentifier(parameter.getNewName(), fCUnit));
-			for (Iterator others= fParameterInfos.iterator(); others.hasNext();) {
-				ParameterInfo other= (ParameterInfo) others.next();
+			for (Iterator<ParameterInfo> others= fParameterInfos.iterator(); others.hasNext();) {
+				ParameterInfo other= others.next();
 				if (parameter != other && other.getNewName().equals(parameter.getNewName())) {
 					result.addError(Messages.format(
 						RefactoringCoreMessages.ExtractMethodRefactoring_error_sameParameter,
@@ -417,8 +435,8 @@ public class ExtractMethodRefactoring extends Refactoring {
 	 * @return validation status
 	 */
 	public RefactoringStatus checkVarargOrder() {
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo)iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (info.isOldVarargs() && iter.hasNext()) {
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(
 					 RefactoringCoreMessages.ExtractMethodRefactoring_error_vararg_ordering,
@@ -433,13 +451,14 @@ public class ExtractMethodRefactoring extends Refactoring {
 	 *
 	 * @return names already in use.
 	 */
-	public Set getUsedNames() {
+	public Set<String> getUsedNames() {
 		return fUsedNames;
 	}
 
 	/* (non-Javadoc)
 	 * Method declared in Refactoring
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask(RefactoringCoreMessages.ExtractMethodRefactoring_checking_new_name, 2);
 		pm.subTask(EMPTY);
@@ -453,7 +472,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 
 		BodyDeclaration node= fAnalyzer.getEnclosingBodyDeclaration();
 		if (node != null) {
-			fAnalyzer.checkInput(result, fMethodName);
+			fAnalyzer.checkInput(result, fMethodName, fDestination);
 			pm.worked(1);
 		}
 		pm.done();
@@ -463,6 +482,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 	/* (non-Javadoc)
 	 * Method declared in IRefactoring
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		if (fMethodName == null)
 			return null;
@@ -517,7 +537,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 				container.insert(mm, insertDesc);
 			}
 
-			replaceDuplicates(result);
+			replaceDuplicates(result, mm.getModifiers());
 			replaceBranches(result);
 
 			if (fImportRewriter.hasRecordedChanges()) {
@@ -541,7 +561,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 		for (int i= 0; i < selectedNodes.length; i++) {
 			ASTNode astNode= selectedNodes[i];
 			astNode.accept(new ASTVisitor() {
-				private LinkedList fOpenLoopLabels= new LinkedList();
+				private LinkedList<String> fOpenLoopLabels= new LinkedList<String>();
 
 				private void registerLoopLabel(Statement node) {
 					String identifier;
@@ -554,42 +574,51 @@ public class ExtractMethodRefactoring extends Refactoring {
 					fOpenLoopLabels.add(identifier);
 				}
 				
+				@Override
 				public boolean visit(ForStatement node) {
 					registerLoopLabel(node);
 					return super.visit(node);
 				}
 
+				@Override
 				public void endVisit(ForStatement node) {
 					fOpenLoopLabels.removeLast();
 				}
 
+				@Override
 				public boolean visit(WhileStatement node) {
 					registerLoopLabel(node);
 					return super.visit(node);
 				}
 
+				@Override
 				public void endVisit(WhileStatement node) {
 					fOpenLoopLabels.removeLast();
 				}
 
+				@Override
 				public boolean visit(EnhancedForStatement node) {
 					registerLoopLabel(node);
 					return super.visit(node);
 				}
 
+				@Override
 				public void endVisit(EnhancedForStatement node) {
 					fOpenLoopLabels.removeLast();
 				}
 
+				@Override
 				public boolean visit(DoStatement node) {
 					registerLoopLabel(node);
 					return super.visit(node);
 				}
 
+				@Override
 				public void endVisit(DoStatement node) {
 					fOpenLoopLabels.removeLast();
 				}
 
+				@Override
 				public void endVisit(ContinueStatement node) {
 					final SimpleName label= node.getLabel();
 					if (fOpenLoopLabels.isEmpty() || (label != null && !fOpenLoopLabels.contains(label.getIdentifier()))) {
@@ -610,7 +639,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 	}
 
 	private ExtractMethodDescriptor getRefactoringDescriptor() {
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fCUnit.getJavaProject();
 		if (javaProject != null)
@@ -716,7 +745,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 
 	private void initializeParameterInfos() {
 		IVariableBinding[] arguments= fAnalyzer.getArguments();
-		fParameterInfos= new ArrayList(arguments.length);
+		fParameterInfos= new ArrayList<ParameterInfo>(arguments.length);
 		ASTNode root= fAnalyzer.getEnclosingBodyDeclaration();
 		ParameterInfo vararg= null;
 		for (int i= 0; i < arguments.length; i++) {
@@ -741,8 +770,8 @@ public class ExtractMethodRefactoring extends Refactoring {
 
 	private void initializeUsedNames() {
 		fUsedNames= UsedNamesCollector.perform(fAnalyzer.getSelectedNodes());
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo parameter= (ParameterInfo)iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo parameter= iter.next();
 			fUsedNames.remove(parameter.getOldName());
 		}
 	}
@@ -758,7 +787,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 	}
 
 	private void initializeDestinations() {
-		List result= new ArrayList();
+		List<ASTNode> result= new ArrayList<ASTNode>();
 		BodyDeclaration decl= fAnalyzer.getEnclosingBodyDeclaration();
 		ASTNode current= getNextParent(decl);
 		result.add(current);
@@ -772,7 +801,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 				next= getNextParent(next);
 			}
 		}
-		fDestinations= (ASTNode[])result.toArray(new ASTNode[result.size()]);
+		fDestinations= result.toArray(new ASTNode[result.size()]);
 		fDestination= fDestinations[fDestinationIndex];
 	}
 
@@ -798,8 +827,8 @@ public class ExtractMethodRefactoring extends Refactoring {
 
 	//---- Code generation -----------------------------------------------------------------------
 
-	private ASTNode[] createCallNodes(SnippetFinder.Match duplicate) {
-		List result= new ArrayList(2);
+	private ASTNode[] createCallNodes(SnippetFinder.Match duplicate, int modifiers) {
+		List<ASTNode> result= new ArrayList<ASTNode>(2);
 
 		IVariableBinding[] locals= fAnalyzer.getCallerLocals();
 		for (int i= 0; i < locals.length; i++) {
@@ -808,9 +837,27 @@ public class ExtractMethodRefactoring extends Refactoring {
 
 		MethodInvocation invocation= fAST.newMethodInvocation();
 		invocation.setName(fAST.newSimpleName(fMethodName));
-		List arguments= invocation.arguments();
+		ASTNode typeNode= ASTResolving.findParentType(fAnalyzer.getEnclosingBodyDeclaration());
+		RefactoringStatus status= new RefactoringStatus();
+		while (fDestination != typeNode) {
+			fAnalyzer.checkInput(status, fMethodName, typeNode);
+			if (!status.isOK()) {
+				SimpleName destinationTypeName= fAST.newSimpleName(ASTNodes.getEnclosingType(fDestination).getName());
+				if ((modifiers & Modifier.STATIC) == 0) {
+					ThisExpression thisExpression= fAST.newThisExpression();
+					thisExpression.setQualifier(destinationTypeName);
+					invocation.setExpression(thisExpression);
+				} else {
+					invocation.setExpression(destinationTypeName);
+				}
+				break;
+			}
+			typeNode= typeNode.getParent();
+		}
+
+		List<Expression> arguments= invocation.arguments();
 		for (int i= 0; i < fParameterInfos.size(); i++) {
-			ParameterInfo parameter= (ParameterInfo)fParameterInfos.get(i);
+			ParameterInfo parameter= fParameterInfos.get(i);
 			arguments.add(ASTNodeFactory.newName(fAST, getMappedName(duplicate, parameter)));
 		}
 		if (fLinkedProposalModel != null) {
@@ -854,7 +901,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 		if (returnKind == ExtractMethodAnalyzer.RETURN_STATEMENT_VOID && !fAnalyzer.isLastStatementSelected()) {
 			result.add(fAST.newReturnStatement());
 		}
-		return (ASTNode[])result.toArray(new ASTNode[result.size()]);
+		return result.toArray(new ASTNode[result.size()]);
 	}
 
 	private IVariableBinding getMappedBinding(SnippetFinder.Match duplicate, IVariableBinding org) {
@@ -869,7 +916,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 		return duplicate.getMappedName(paramter.getOldBinding()).getIdentifier();
 	}
 
-	private void replaceDuplicates(CompilationUnitChange result) {
+	private void replaceDuplicates(CompilationUnitChange result, int modifiers) {
 		int numberOf= getNumberOfDuplicates();
 		if (numberOf == 0 || !fReplaceDuplicates)
 			return;
@@ -886,8 +933,15 @@ public class ExtractMethodRefactoring extends Refactoring {
 			SnippetFinder.Match duplicate= fDuplicates[d];
 			if (!duplicate.isMethodBody()) {
 				if (isDestinationReachable(duplicate.getEnclosingMethod())) {
-					ASTNode[] callNodes= createCallNodes(duplicate);
-					new StatementRewrite(fRewriter, duplicate.getNodes()).replace(callNodes, description);
+					ASTNode[] callNodes= createCallNodes(duplicate, modifiers);
+					ASTNode[] duplicateNodes= duplicate.getNodes();
+					for (int i= 0; i < duplicateNodes.length; i++) {
+						ASTNode parent= duplicateNodes[i].getParent();
+						if (parent instanceof ParenthesizedExpression) {
+							duplicateNodes[i]= parent;
+						}
+					}
+					new StatementRewrite(fRewriter, duplicateNodes).replace(callNodes, description);
 				}
 			}
 		}
@@ -903,7 +957,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 
 	private MethodDeclaration createNewMethod(ASTNode[] selectedNodes, String lineDelimiter, TextEditGroup substitute) throws CoreException {
 		MethodDeclaration result= createNewMethodDeclaration();
-		result.setBody(createMethodBody(selectedNodes, substitute));
+		result.setBody(createMethodBody(selectedNodes, substitute, result.getModifiers()));
 		if (fGenerateJavadoc) {
 			AbstractTypeDeclaration enclosingType=
 				(AbstractTypeDeclaration)ASTNodes.getParent(fAnalyzer.getEnclosingBodyDeclaration(), AbstractTypeDeclaration.class);
@@ -926,14 +980,16 @@ public class ExtractMethodRefactoring extends Refactoring {
 		}
 		if (enclosingBodyDeclaration instanceof BodyDeclaration) { // should always be the case
 			int enclosingModifiers= ((BodyDeclaration)enclosingBodyDeclaration).getModifiers();
-			boolean shouldBeStatic= Modifier.isStatic(enclosingModifiers) || fAnalyzer.getForceStatic();
+			boolean shouldBeStatic= Modifier.isStatic(enclosingModifiers)
+					|| enclosingBodyDeclaration instanceof EnumDeclaration
+					|| fAnalyzer.getForceStatic();
 			if (shouldBeStatic) {
 				modifiers|= Modifier.STATIC;
 			}
 		}
 
 		ITypeBinding[] typeVariables= computeLocalTypeVariables();
-		List typeParameters= result.typeParameters();
+		List<TypeParameter> typeParameters= result.typeParameters();
 		for (int i= 0; i < typeVariables.length; i++) {
 			TypeParameter parameter= fAST.newTypeParameter();
 			parameter.setName(fAST.newSimpleName(typeVariables[i].getName()));
@@ -944,9 +1000,9 @@ public class ExtractMethodRefactoring extends Refactoring {
 		result.setReturnType2((Type)ASTNode.copySubtree(fAST, fAnalyzer.getReturnType()));
 		result.setName(fAST.newSimpleName(fMethodName));
 
-		List parameters= result.parameters();
+		List<SingleVariableDeclaration> parameters= result.parameters();
 		for (int i= 0; i < fParameterInfos.size(); i++) {
-			ParameterInfo info= (ParameterInfo)fParameterInfos.get(i);
+			ParameterInfo info= fParameterInfos.get(i);
 			VariableDeclaration infoDecl= getVariableDeclaration(info);
 			SingleVariableDeclaration parameter= fAST.newSingleVariableDeclaration();
 			parameter.modifiers().addAll(ASTNodeFactory.newModifiers(fAST, ASTNodes.getModifiers(infoDecl)));
@@ -956,7 +1012,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 			parameters.add(parameter);
 		}
 
-		List exceptions= result.thrownExceptions();
+		List<Name> exceptions= result.thrownExceptions();
 		ITypeBinding[] exceptionTypes= fAnalyzer.getExceptions(fThrowRuntimeExceptions);
 		ImportRewriteContext context= new ContextSensitiveImportRewriteContext(enclosingBodyDeclaration, fImportRewriter);
 		for (int i= 0; i < exceptionTypes.length; i++) {
@@ -967,19 +1023,19 @@ public class ExtractMethodRefactoring extends Refactoring {
 	}
 
 	private ITypeBinding[] computeLocalTypeVariables() {
-		List result= new ArrayList(Arrays.asList(fAnalyzer.getTypeVariables()));
+		List<ITypeBinding> result= new ArrayList<ITypeBinding>(Arrays.asList(fAnalyzer.getTypeVariables()));
 		for (int i= 0; i < fParameterInfos.size(); i++) {
-			ParameterInfo info= (ParameterInfo)fParameterInfos.get(i);
+			ParameterInfo info= fParameterInfos.get(i);
 			processVariable(result, info.getOldBinding());
 		}
 		IVariableBinding[] methodLocals= fAnalyzer.getMethodLocals();
 		for (int i= 0; i < methodLocals.length; i++) {
 			processVariable(result, methodLocals[i]);
 		}
-		return (ITypeBinding[])result.toArray(new ITypeBinding[result.size()]);
+		return result.toArray(new ITypeBinding[result.size()]);
 	}
 
-	private void processVariable(List result, IVariableBinding variable) {
+	private void processVariable(List<ITypeBinding> result, IVariableBinding variable) {
 		if (variable == null)
 			return;
 		ITypeBinding binding= variable.getType();
@@ -997,7 +1053,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 		}
 	}
 
-	private Block createMethodBody(ASTNode[] selectedNodes, TextEditGroup substitute) {
+	private Block createMethodBody(ASTNode[] selectedNodes, TextEditGroup substitute, int modifiers) {
 		Block result= fAST.newBlock();
 		ListRewrite statements= fRewriter.getListRewrite(result, Block.STATEMENTS_PROPERTY);
 
@@ -1010,8 +1066,8 @@ public class ExtractMethodRefactoring extends Refactoring {
 			}
 		}
 
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo parameter= (ParameterInfo)iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo parameter= iter.next();
 			if (parameter.isRenamed()) {
 				for (int n= 0; n < selectedNodes.length; n++) {
 					SimpleName[] oldNames= LinkedNodeFinder.findByBinding(selectedNodes[n], parameter.getOldBinding());
@@ -1023,7 +1079,7 @@ public class ExtractMethodRefactoring extends Refactoring {
 		}
 
 		boolean extractsExpression= fAnalyzer.isExpressionSelected();
-		ASTNode[] callNodes= createCallNodes(null);
+		ASTNode[] callNodes= createCallNodes(null, modifiers);
 		ASTNode replacementNode;
 		if (callNodes.length == 1) {
 			replacementNode= callNodes[0];
@@ -1035,13 +1091,15 @@ public class ExtractMethodRefactoring extends Refactoring {
 			ITypeBinding binding= fAnalyzer.getExpressionBinding();
 			if (binding != null && (!binding.isPrimitive() || !"void".equals(binding.getName()))) { //$NON-NLS-1$
 				ReturnStatement rs= fAST.newReturnStatement();
-				rs.setExpression((Expression)fRewriter.createMoveTarget(selectedNodes[0]));
+				rs.setExpression((Expression)fRewriter.createMoveTarget(selectedNodes[0] instanceof ParenthesizedExpression
+						? ((ParenthesizedExpression)selectedNodes[0]).getExpression()
+						: selectedNodes[0]));
 				statements.insertLast(rs, null);
 			} else {
 				ExpressionStatement st= fAST.newExpressionStatement((Expression)fRewriter.createMoveTarget(selectedNodes[0]));
 				statements.insertLast(st, null);
 			}
-			fRewriter.replace(selectedNodes[0], replacementNode, substitute);
+			fRewriter.replace(selectedNodes[0].getParent() instanceof ParenthesizedExpression ? selectedNodes[0].getParent() : selectedNodes[0], replacementNode, substitute);
 		} else {
 			if (selectedNodes.length == 1) {
 				statements.insertLast(fRewriter.createMoveTarget(selectedNodes[0]), substitute);
@@ -1066,8 +1124,8 @@ public class ExtractMethodRefactoring extends Refactoring {
 	}
 
 	private String getName(IVariableBinding binding) {
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo)iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (Bindings.equals(binding, info.getOldBinding())) {
 				return info.getNewName();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java
index c152795..2d915ad 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
@@ -128,6 +129,7 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.text.correction.ASTResolving;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
@@ -142,11 +144,11 @@ public class ExtractTempRefactoring extends Refactoring {
 
 	private static final class ForStatementChecker extends ASTVisitor {
 
-		private final Collection fForInitializerVariables;
+		private final Collection<IVariableBinding> fForInitializerVariables;
 
 		private boolean fReferringToForVariable= false;
 
-		public ForStatementChecker(Collection forInitializerVariables) {
+		public ForStatementChecker(Collection<IVariableBinding> forInitializerVariables) {
 			Assert.isNotNull(forInitializerVariables);
 			fForInitializerVariables= forInitializerVariables;
 		}
@@ -155,6 +157,7 @@ public class ExtractTempRefactoring extends Refactoring {
 			return fReferringToForVariable;
 		}
 
+		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding= node.resolveBinding();
 			if (binding != null && fForInitializerVariables.contains(binding)) {
@@ -212,10 +215,10 @@ public class ExtractTempRefactoring extends Refactoring {
 	}
 
 	// return List<IVariableBinding>
-	private static List getForInitializedVariables(VariableDeclarationExpression variableDeclarations) {
-		List forInitializerVariables= new ArrayList(1);
-		for (Iterator iter= variableDeclarations.fragments().iterator(); iter.hasNext();) {
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) iter.next();
+	private static List<IVariableBinding> getForInitializedVariables(VariableDeclarationExpression variableDeclarations) {
+		List<IVariableBinding> forInitializerVariables= new ArrayList<IVariableBinding>(1);
+		for (Iterator<VariableDeclarationFragment> iter= variableDeclarations.fragments().iterator(); iter.hasNext();) {
+			VariableDeclarationFragment fragment= iter.next();
 			IVariableBinding binding= fragment.resolveBinding();
 			if (binding != null)
 				forInitializerVariables.add(binding);
@@ -243,13 +246,13 @@ public class ExtractTempRefactoring extends Refactoring {
 
 	private static ASTNode[] getParents(ASTNode node) {
 		ASTNode current= node;
-		List parents= new ArrayList();
+		List<ASTNode> parents= new ArrayList<ASTNode>();
 		do {
 			parents.add(current.getParent());
 			current= current.getParent();
 		} while (current.getParent() != null);
 		Collections.reverse(parents);
-		return (ASTNode[]) parents.toArray(new ASTNode[parents.size()]);
+		return parents.toArray(new ASTNode[parents.size()]);
 	}
 
 	private static boolean isLeftValue(ASTNode node) {
@@ -283,9 +286,9 @@ public class ExtractTempRefactoring extends Refactoring {
 			if (parent instanceof ForStatement) {
 				ForStatement forStmt= (ForStatement) parent;
 				if (forStmt.initializers().contains(current) || forStmt.updaters().contains(current) || forStmt.getExpression() == current) {
-					List initializers= forStmt.initializers();
+					List<Expression> initializers= forStmt.initializers();
 					if (initializers.size() == 1 && initializers.get(0) instanceof VariableDeclarationExpression) {
-						List forInitializerVariables= getForInitializedVariables((VariableDeclarationExpression) initializers.get(0));
+						List<IVariableBinding> forInitializerVariables= getForInitializedVariables((VariableDeclarationExpression) initializers.get(0));
 						ForStatementChecker checker= new ForStatementChecker(forInitializerVariables);
 						expression.accept(checker);
 						if (checker.isReferringToForVariable())
@@ -313,12 +316,12 @@ public class ExtractTempRefactoring extends Refactoring {
 	}
 
 	private static IASTFragment[] retainOnlyReplacableMatches(IASTFragment[] allMatches) {
-		List result= new ArrayList(allMatches.length);
+		List<IASTFragment> result= new ArrayList<IASTFragment>(allMatches.length);
 		for (int i= 0; i < allMatches.length; i++) {
 			if (canReplace(allMatches[i]))
 				result.add(allMatches[i]);
 		}
-		return (IASTFragment[]) result.toArray(new IASTFragment[result.size()]);
+		return result.toArray(new IASTFragment[result.size()]);
 	}
 
 	private CompilationUnit fCompilationUnitNode;
@@ -412,7 +415,7 @@ public class ExtractTempRefactoring extends Refactoring {
 		IASTFragment[] fragmentsToReplace= retainOnlyReplacableMatches(getMatchingFragments());
 		//TODO: should not have to prune duplicates here...
 		ASTRewrite rewrite= fCURewrite.getASTRewrite();
-		HashSet seen= new HashSet();
+		HashSet<IASTFragment> seen= new HashSet<IASTFragment>();
 		for (int i= 0; i < fragmentsToReplace.length; i++) {
 			IASTFragment fragment= fragmentsToReplace[i];
 			if (! seen.add(fragment))
@@ -475,6 +478,7 @@ public class ExtractTempRefactoring extends Refactoring {
 		return binding;
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.ExtractTempRefactoring_checking_preconditions, 4);
@@ -505,7 +509,7 @@ public class ExtractTempRefactoring extends Refactoring {
 	}
 
 	private final ExtractLocalDescriptor createRefactoringDescriptor() {
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fCu.getJavaProject();
 		if (javaProject != null)
@@ -551,7 +555,7 @@ public class ExtractTempRefactoring extends Refactoring {
 
 	private void checkNewSource(SubProgressMonitor monitor, RefactoringStatus result) throws CoreException {
 		String newCuSource= fChange.getPreviewContent(new NullProgressMonitor());
-		CompilationUnit newCUNode= new RefactoringASTParser(AST.JLS3).parse(newCuSource, fCu, true, true, monitor);
+		CompilationUnit newCUNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(newCuSource, fCu, true, true, monitor);
 		IProblem[] newProblems= RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, fCompilationUnitNode);
 		for (int i= 0; i < newProblems.length; i++) {
 			IProblem problem= newProblems[i];
@@ -560,6 +564,7 @@ public class ExtractTempRefactoring extends Refactoring {
 		}
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask("", 6); //$NON-NLS-1$
@@ -613,11 +618,11 @@ public class ExtractTempRefactoring extends Refactoring {
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_explicit_constructor);
 			pm.worked(1);
 
-			if (getEnclosingBodyNode() == null)
+			ASTNode associatedNode= selectedExpression.getAssociatedNode();
+			if (getEnclosingBodyNode() == null || ASTNodes.getParent(associatedNode, Annotation.class) != null)
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_expr_in_method_or_initializer);
 			pm.worked(1);
 
-			ASTNode associatedNode= selectedExpression.getAssociatedNode();
 			if (associatedNode instanceof Name && associatedNode.getParent() instanceof ClassInstanceCreation && associatedNode.getLocationInParent() == ClassInstanceCreation.TYPE_PROPERTY)
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractTempRefactoring_name_in_new);
 			pm.worked(1);
@@ -732,6 +737,7 @@ public class ExtractTempRefactoring extends Refactoring {
 		listRewrite.insertBefore(declaration, target, groupDescription);
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.ExtractTempRefactoring_checking_preconditions, 1);
@@ -762,8 +768,8 @@ public class ExtractTempRefactoring extends Refactoring {
 		for (int i= 0; i < matchNodes.length; i++) {
 			matchingNodesParents[i]= getParents(matchNodes[i]);
 		}
-		List l= Arrays.asList(getLongestArrayPrefix(matchingNodesParents));
-		return (ASTNode[]) l.toArray(new ASTNode[l.size()]);
+		List<Object> l= Arrays.asList(getLongestArrayPrefix(matchingNodesParents));
+		return l.toArray(new ASTNode[l.size()]);
 	}
 
 	private Block getEnclosingBodyNode() throws JavaModelException {
@@ -804,10 +810,10 @@ public class ExtractTempRefactoring extends Refactoring {
 		IASTFragment[] nodesToReplace= retainOnlyReplacableMatches(getMatchingFragments());
 		if (nodesToReplace.length == 0)
 			return getSelectedExpression();
-		Comparator comparator= new Comparator() {
+		Comparator<IASTFragment> comparator= new Comparator<IASTFragment>() {
 
-			public int compare(Object o1, Object o2) {
-				return ((IASTFragment) o1).getStartPosition() - ((IASTFragment) o2).getStartPosition();
+			public int compare(IASTFragment o1, IASTFragment o2) {
+				return o1.getStartPosition() - o2.getStartPosition();
 			}
 		};
 		Arrays.sort(nodesToReplace, comparator);
@@ -830,6 +836,7 @@ public class ExtractTempRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.ExtractTempRefactoring_name;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java
index 930fac7..923f455 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,8 +83,8 @@ import org.eclipse.jdt.core.dom.TypeDeclarationStatement;
 import org.eclipse.jdt.core.dom.VariableDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.InlineConstantDescriptor;
@@ -100,6 +100,7 @@ import org.eclipse.jdt.internal.corext.codemanipulation.ImportReferencesCollecto
 import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.dom.fragments.ASTFragmentFactory;
 import org.eclipse.jdt.internal.corext.dom.fragments.IExpressionFragment;
 import org.eclipse.jdt.internal.corext.refactoring.Checks;
@@ -124,6 +125,7 @@ import org.eclipse.jdt.internal.corext.util.Strings;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 
 public class InlineConstantRefactoring extends Refactoring {
 
@@ -190,17 +192,17 @@ public class InlineConstantRefactoring extends Refactoring {
 
 			private final Expression fInitializer;
 			private ASTRewrite fInitializerRewrite;
-			private final HashSet fStaticImportsInInitializer2;
+			private final HashSet<SimpleName> fStaticImportsInInitializer2;
 
 			// cache:
-			private Set fNamesDeclaredLocallyAtNewLocation;
+			private Set<String> fNamesDeclaredLocallyAtNewLocation;
 
 			private final Expression fNewLocation;
-			private final HashSet fStaticImportsInReference;
+			private final HashSet<SimpleName> fStaticImportsInReference;
 			private final CompilationUnitRewrite fNewLocationCuRewrite;
 			private final ImportRewriteContext fNewLocationContext;
 
-			public InitializerTraversal(Expression initializer, HashSet staticImportsInInitializer, Expression newLocation, HashSet staticImportsInReference, CompilationUnitRewrite newLocationCuRewrite) {
+			public InitializerTraversal(Expression initializer, HashSet<SimpleName> staticImportsInInitializer, Expression newLocation, HashSet<SimpleName> staticImportsInReference, CompilationUnitRewrite newLocationCuRewrite) {
 				fInitializer= initializer;
 				fInitializerRewrite= ASTRewrite.create(initializer.getAST());
 				fStaticImportsInInitializer2= staticImportsInInitializer;
@@ -217,16 +219,17 @@ public class InlineConstantRefactoring extends Refactoring {
 			 * @param scope not a TypeDeclaration
 			 * @return Set containing Strings representing simple names
 			 */
-			private Set getLocallyDeclaredNames(BodyDeclaration scope) {
+			private Set<String> getLocallyDeclaredNames(BodyDeclaration scope) {
 				Assert.isTrue(!(scope instanceof AbstractTypeDeclaration));
 
-				final Set result= new HashSet();
+				final Set<String> result= new HashSet<String>();
 
 				if (scope instanceof FieldDeclaration)
 					return result;
 
 				scope.accept(new HierarchicalASTVisitor() {
 
+					@Override
 					public boolean visit(AbstractTypeDeclaration node) {
 						Assert.isTrue(node.getParent() instanceof TypeDeclarationStatement);
 
@@ -234,10 +237,12 @@ public class InlineConstantRefactoring extends Refactoring {
 						return false;
 					}
 
+					@Override
 					public boolean visit(AnonymousClassDeclaration anonDecl) {
 						return false;
 					}
 
+					@Override
 					public boolean visit(VariableDeclaration varDecl) {
 						result.add(varDecl.getName().getIdentifier());
 						return false;
@@ -283,23 +288,26 @@ public class InlineConstantRefactoring extends Refactoring {
 				}
 			}
 
+			@Override
 			public boolean visit(FieldAccess fieldAccess) {
 				fieldAccess.getExpression().accept(this);
 				return false;
 			}
 
+			@Override
 			public boolean visit(MethodInvocation invocation) {
 				if (invocation.getExpression() == null)
 					qualifyUnqualifiedMemberNameIfNecessary(invocation.getName());
 				else
 					invocation.getExpression().accept(this);
 
-				for (Iterator it= invocation.arguments().iterator(); it.hasNext();)
-					((Expression) it.next()).accept(this);
+				for (Iterator<Expression> it= invocation.arguments().iterator(); it.hasNext();)
+					it.next().accept(this);
 
 				return false;
 			}
 
+			@Override
 			public boolean visit(Name name) {
 				SimpleName leftmost= getLeftmost(name);
 
@@ -347,7 +355,7 @@ public class InlineConstantRefactoring extends Refactoring {
 				return getNamesDeclaredLocallyAtNewLocation().contains(memberName.getIdentifier());
 			}
 
-			private Set getNamesDeclaredLocallyAtNewLocation() {
+			private Set<String> getNamesDeclaredLocallyAtNewLocation() {
 				if (fNamesDeclaredLocallyAtNewLocation != null)
 					return fNamesDeclaredLocallyAtNewLocation;
 
@@ -423,10 +431,10 @@ public class InlineConstantRefactoring extends Refactoring {
 		private final VariableDeclarationFragment fDeclarationToRemove;
 		private final CompilationUnitRewrite fCuRewrite;
 		private final TightSourceRangeComputer fSourceRangeComputer;
-		private final HashSet fStaticImportsInInitializer;
+		private final HashSet<SimpleName> fStaticImportsInInitializer;
 		private final boolean fIs15;
 
-		private InlineTargetCompilationUnit(CompilationUnitRewrite cuRewrite, Name[] references, InlineConstantRefactoring refactoring, HashSet staticImportsInInitializer) {
+		private InlineTargetCompilationUnit(CompilationUnitRewrite cuRewrite, Name[] references, InlineConstantRefactoring refactoring, HashSet<SimpleName> staticImportsInInitializer) {
 			fInitializer= refactoring.getInitializer();
 			fInitializerUnit= refactoring.getDeclaringCompilationUnit();
 
@@ -445,7 +453,7 @@ public class InlineConstantRefactoring extends Refactoring {
 				fReferences[i]= getQualifiedReference(references[i]);
 
 			fIs15= JavaModelUtil.is50OrHigher(cuRewrite.getCu().getJavaProject());
-			fStaticImportsInInitializer= fIs15 ? staticImportsInInitializer : new HashSet(0);
+			fStaticImportsInInitializer= fIs15 ? staticImportsInInitializer : new HashSet<SimpleName>(0);
 		}
 
 		private static Expression getQualifiedReference(Name fieldName) {
@@ -501,7 +509,7 @@ public class InlineConstantRefactoring extends Refactoring {
 			if (explicitCast != null) {
 				CastExpression cast= ast.newCastExpression();
 				Expression modifiedInitializerExpr= (Expression) fCuRewrite.getASTRewrite().createStringPlaceholder(modifiedInitializer, reference.getNodeType());
-				if (ASTNodes.substituteMustBeParenthesized(fInitializer, cast)) {
+				if (NecessaryParenthesesChecker.needsParentheses(fInitializer, cast, CastExpression.EXPRESSION_PROPERTY)) {
 					ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
 					parenthesized.setExpression(modifiedInitializerExpr);
 					modifiedInitializerExpr= parenthesized;
@@ -531,7 +539,7 @@ public class InlineConstantRefactoring extends Refactoring {
 				isStringPlaceholder= true;
 			}
 
-			if (ASTNodes.substituteMustBeParenthesized((isStringPlaceholder ? fInitializer : newReference), reference)) {
+			if (NecessaryParenthesesChecker.needsParentheses((isStringPlaceholder ? fInitializer : newReference), reference.getParent(), reference.getLocationInParent())) {
 				ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
 				parenthesized.setExpression(newReference);
 				newReference= parenthesized;
@@ -542,10 +550,10 @@ public class InlineConstantRefactoring extends Refactoring {
 		}
 
 		private String prepareInitializerForLocation(Expression location) throws CoreException {
-			HashSet staticImportsInReference= new HashSet();
+			HashSet<SimpleName> staticImportsInReference= new HashSet<SimpleName>();
 			final IJavaProject project= fCuRewrite.getCu().getJavaProject();
 			if (fIs15)
-				ImportReferencesCollector.collect(location, project, null, new ArrayList(), staticImportsInReference);
+				ImportReferencesCollector.collect(location, project, null, new ArrayList<SimpleName>(), staticImportsInReference);
 
 			InitializerTraversal traversal= new InitializerTraversal(fInitializer, fStaticImportsInInitializer, location, staticImportsInReference, fCuRewrite);
 			ASTRewrite initializerRewrite= traversal.getInitializerRewrite();
@@ -688,6 +696,7 @@ public class InlineConstantRefactoring extends Refactoring {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.InlineConstantRefactoring_name;
 	}
@@ -702,6 +711,7 @@ public class InlineConstantRefactoring extends Refactoring {
 		return fField;
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask("", 3); //$NON-NLS-1$
@@ -793,14 +803,15 @@ public class InlineConstantRefactoring extends Refactoring {
 		return fField.getCompilationUnit();
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
 		pm.beginTask("", 3); //$NON-NLS-1$
 
 		try {
-			List/*<CompilationUnitChange>*/changes= new ArrayList();
-			HashSet staticImportsInInitializer= new HashSet();
-			ImportReferencesCollector.collect(getInitializer(), fField.getJavaProject(), null, new ArrayList(), staticImportsInInitializer);
+			List<CompilationUnitChange>changes= new ArrayList<CompilationUnitChange>();
+			HashSet<SimpleName> staticImportsInInitializer= new HashSet<SimpleName>();
+			ImportReferencesCollector.collect(getInitializer(), fField.getJavaProject(), null, new ArrayList<SimpleName>(), staticImportsInInitializer);
 
 			if (getReplaceAllReferences()) {
 				SearchResultGroup[] searchResultGroups= findReferences(pm, result);
@@ -833,8 +844,8 @@ public class InlineConstantRefactoring extends Refactoring {
 
 			if (getRemoveDeclaration() && getReplaceAllReferences()) {
 				boolean declarationRemoved= false;
-				for (Iterator iter= changes.iterator(); iter.hasNext();) {
-					CompilationUnitChange change= (CompilationUnitChange) iter.next();
+				for (Iterator<CompilationUnitChange> iter= changes.iterator(); iter.hasNext();) {
+					CompilationUnitChange change= iter.next();
 					if (change.getCompilationUnit().equals(fDeclarationCuRewrite.getCu())) {
 						declarationRemoved= true;
 						break;
@@ -850,14 +861,14 @@ public class InlineConstantRefactoring extends Refactoring {
 
 			ICompilationUnit[] cus= new ICompilationUnit[changes.size()];
 			for (int i= 0; i < changes.size(); i++) {
-				CompilationUnitChange change= (CompilationUnitChange) changes.get(i);
+				CompilationUnitChange change= changes.get(i);
 				cus[i]= change.getCompilationUnit();
 			}
 			result.merge(Checks.validateModifiesFiles(ResourceUtil.getFiles(cus), getValidationContext()));
 
 			pm.worked(1);
 
-			fChanges= (CompilationUnitChange[]) changes.toArray(new CompilationUnitChange[changes.size()]);
+			fChanges= changes.toArray(new CompilationUnitChange[changes.size()]);
 
 			return result;
 
@@ -903,10 +914,11 @@ public class InlineConstantRefactoring extends Refactoring {
 		return (SearchResultGroup[]) engine.getResults();
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.InlineConstantRefactoring_preview, 2);
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			IJavaProject javaProject= fSelectionCu.getJavaProject();
 			if (javaProject != null)
@@ -1012,7 +1024,7 @@ public class InlineConstantRefactoring extends Refactoring {
 					fSelectionCu= field.getCompilationUnit();
 				} else
 					return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_illegal_argument, new Object[] { handle, JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT}));
-				final ASTParser parser= ASTParser.newParser(AST.JLS3);
+				final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				parser.setResolveBindings(true);
 				parser.setSource(fSelectionCu);
 				final CompilationUnit unit= (CompilationUnit) parser.createAST(null);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineMethodRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineMethodRefactoring.java
index cc919a5..f4c881a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineMethodRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineMethodRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,6 @@ import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -82,6 +81,7 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.JavaElementLabels;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
@@ -187,6 +187,7 @@ public class InlineMethodRefactoring extends Refactoring {
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.InlineMethodRefactoring_name;
 	}
@@ -244,6 +245,7 @@ public class InlineMethodRefactoring extends Refactoring {
 		return fTargetProvider.checkActivation();
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
 		if (fSourceProvider == null && Invocations.isInvocation(fInitialNode)) {
@@ -256,6 +258,7 @@ public class InlineMethodRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask("", 20); //$NON-NLS-1$
 		fChangeManager= new TextChangeManager();
@@ -350,6 +353,7 @@ public class InlineMethodRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		if (fDeleteSource && fCurrentMode == Mode.INLINE_ALL) {
 			TextChange change= fChangeManager.get((ICompilationUnit) fSourceProvider.getTypeRoot());
@@ -369,7 +373,7 @@ public class InlineMethodRefactoring extends Refactoring {
 			}
 			change.addTextEditGroup(description);
 		}
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fInitialTypeRoot.getJavaProject();
 		if (javaProject != null)
@@ -411,7 +415,7 @@ public class InlineMethodRefactoring extends Refactoring {
 			CompilationUnit methodDeclarationAstRoot;
 			ICompilationUnit methodCu= method.getCompilationUnit();
 			if (methodCu != null) {
-				methodDeclarationAstRoot= new RefactoringASTParser(AST.JLS3).parse(methodCu, true);
+				methodDeclarationAstRoot= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(methodCu, true);
 			} else {
 				IClassFile classFile= method.getClassFile();
 				if (! JavaElementUtil.isSourceAvailable(classFile)) {
@@ -419,7 +423,7 @@ public class InlineMethodRefactoring extends Refactoring {
 					status.addFatalError(Messages.format(RefactoringCoreMessages.InlineMethodRefactoring_error_classFile, methodLabel));
 					return null;
 				}
-				methodDeclarationAstRoot= new RefactoringASTParser(AST.JLS3).parse(classFile, true);
+				methodDeclarationAstRoot= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(classFile, true);
 			}
 			ASTNode node= methodDeclarationAstRoot.findDeclaringNode(methodBinding.getMethodDeclaration().getKey());
 			if (node instanceof MethodDeclaration) {
@@ -431,7 +435,7 @@ public class InlineMethodRefactoring extends Refactoring {
 	}
 
 	private IFile[] getFilesToBeModified(ICompilationUnit[] units) {
-		List result= new ArrayList(units.length + 1);
+		List<IFile> result= new ArrayList<IFile>(units.length + 1);
 		IFile file;
 		for (int i= 0; i < units.length; i++) {
 			file= getFile(units[i]);
@@ -443,7 +447,7 @@ public class InlineMethodRefactoring extends Refactoring {
 			if (file != null && !result.contains(file))
 				result.add(file);
 		}
-		return (IFile[])result.toArray(new IFile[result.size()]);
+		return result.toArray(new IFile[result.size()]);
 	}
 
 	private IFile getFile(ICompilationUnit unit) {
@@ -514,12 +518,12 @@ public class InlineMethodRefactoring extends Refactoring {
 		for (int i= 0; i < invocations.length; i++) {
 			removeNestedCalls(status, unit, parents, invocations, i);
 		}
-		List result= new ArrayList();
+		List<ASTNode> result= new ArrayList<ASTNode>();
 		for (int i= 0; i < invocations.length; i++) {
 			if (invocations[i] != null)
 				result.add(invocations[i]);
 		}
-		return (ASTNode[])result.toArray(new ASTNode[result.size()]);
+		return result.toArray(new ASTNode[result.size()]);
 	}
 
 	private void removeNestedCalls(RefactoringStatus status, ICompilationUnit unit, ASTNode[] parents, ASTNode[] invocations, int index) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java
index 193096e..2d31d41 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,7 @@ import org.eclipse.jdt.core.refactoring.descriptors.InlineLocalVariableDescripto
 import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.refactoring.Checks;
 import org.eclipse.jdt.internal.corext.refactoring.JDTRefactoringDescriptorComment;
 import org.eclipse.jdt.internal.corext.refactoring.JavaRefactoringArguments;
@@ -90,6 +91,7 @@ import org.eclipse.jdt.internal.corext.refactoring.rename.TempOccurrenceAnalyzer
 import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
 import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
 import org.eclipse.jdt.internal.corext.refactoring.util.ResourceUtil;
+import org.eclipse.jdt.internal.corext.refactoring.util.TightSourceRangeComputer;
 import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.internal.corext.util.Strings;
 
@@ -185,6 +187,7 @@ public class InlineTempRefactoring extends Refactoring {
 	/*
 	 * @see IRefactoring#getName()
 	 */
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.InlineTempRefactoring_name;
 	}
@@ -192,6 +195,7 @@ public class InlineTempRefactoring extends Refactoring {
 	/*
 	 * @see Refactoring#checkActivation(IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask("", 1); //$NON-NLS-1$
@@ -258,6 +262,7 @@ public class InlineTempRefactoring extends Refactoring {
 	/*
 	 * @see Refactoring#checkInput(IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask("", 1); //$NON-NLS-1$
@@ -269,10 +274,11 @@ public class InlineTempRefactoring extends Refactoring {
 
 	//----- changes
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.InlineTempRefactoring_preview, 2);
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			IJavaProject javaProject= fCu.getJavaProject();
 			if (javaProject != null)
@@ -324,17 +330,20 @@ public class InlineTempRefactoring extends Refactoring {
 		TextEditGroup groupDesc= cuRewrite.createGroupDescription(RefactoringCoreMessages.InlineTempRefactoring_remove_edit_name);
 		ASTNode parent= variableDeclaration.getParent();
 		ASTRewrite rewrite= cuRewrite.getASTRewrite();
+		TightSourceRangeComputer sourceRangeComputer= new TightSourceRangeComputer();
+		rewrite.setTargetSourceRangeComputer(sourceRangeComputer);
 		if (parent instanceof VariableDeclarationStatement && ((VariableDeclarationStatement) parent).fragments().size() == 1) {
+			sourceRangeComputer.addTightSourceNode(parent);
 			rewrite.remove(parent, groupDesc);
 		} else {
+			sourceRangeComputer.addTightSourceNode(variableDeclaration);
 			rewrite.remove(variableDeclaration, groupDesc);
 		}
 	}
 
 	private Expression getInitializerSource(CompilationUnitRewrite rewrite, SimpleName reference) throws JavaModelException {
 		Expression copy= getModifiedInitializerSource(rewrite, reference);
-		boolean brackets= ASTNodes.substituteMustBeParenthesized(copy, reference);
-		if (brackets) {
+		if (NecessaryParenthesesChecker.needsParentheses(copy, reference.getParent(), reference.getLocationInParent())) {
 			ParenthesizedExpression parentExpr= rewrite.getAST().newParenthesizedExpression();
 			parentExpr.setExpression(copy);
 			return parentExpr;
@@ -367,7 +376,7 @@ public class InlineTempRefactoring extends Refactoring {
 		ITypeBinding explicitCast= ASTNodes.getExplicitCast(initializer, reference);
 		if (explicitCast != null) {
 			CastExpression cast= ast.newCastExpression();
-			if (ASTNodes.substituteMustBeParenthesized(copy, cast)) {
+			if (NecessaryParenthesesChecker.needsParentheses(initializer, cast, CastExpression.EXPRESSION_PROPERTY)) {
 				ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
 				parenthesized.setExpression(copy);
 				copy= parenthesized;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java
index dd8e80a..83a45b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ import org.eclipse.jdt.core.dom.ParameterizedType;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
 import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
 import org.eclipse.jdt.core.dom.Type;
@@ -363,6 +364,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkActivation(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.IntroduceFactory_checkingActivation, 1);
@@ -384,7 +386,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	 * call sites to the constructor.
 	 */
 	private ICompilationUnit[] collectAffectedUnits(SearchResultGroup[] searchHits) {
-		Collection	result= new ArrayList();
+		Collection<ICompilationUnit>	result= new ArrayList<ICompilationUnit>();
 		boolean hitInFactoryClass= false;
 
 		for(int i=0; i < searchHits.length; i++) {
@@ -397,7 +399,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 		}
 		if (!hitInFactoryClass)
 			result.add(fFactoryUnitHandle);
-		return (ICompilationUnit[]) result.toArray(new ICompilationUnit[result.size()]);
+		return result.toArray(new ICompilationUnit[result.size()]);
 	}
 
 	/**
@@ -445,7 +447,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	 * (i.e. are binary and therefore can't be modified).
 	 */
 	private SearchResultGroup[] excludeBinaryUnits(SearchResultGroup[] groups) {
-		Collection/*<SearchResultGroup>*/	result= new ArrayList();
+		Collection<SearchResultGroup>	result= new ArrayList<SearchResultGroup>();
 
 		for (int i = 0; i < groups.length; i++) {
 			SearchResultGroup	rg=   groups[i];
@@ -456,7 +458,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 			else
 				fCallSitesInBinaryUnits= true;
 		}
-		return (SearchResultGroup[]) result.toArray(new SearchResultGroup[result.size()]);
+		return result.toArray(new SearchResultGroup[result.size()]);
 	}
 
 	/**
@@ -523,6 +525,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkInput(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.IntroduceFactory_checking_preconditions, 1);
@@ -562,11 +565,11 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 		MethodDeclaration	ctorDecl= (MethodDeclaration) ctorUnit.findDeclaringNode(fCtorBinding.getKey());
 
 		if (ctorDecl != null) {
-			List	formalArgs= ctorDecl.parameters();
-			int		i= 0;
+			List<SingleVariableDeclaration>	formalArgs= ctorDecl.parameters();
+			int i= 0;
 
-			for(Iterator iter= formalArgs.iterator(); iter.hasNext(); i++) {
-				SingleVariableDeclaration	svd= (SingleVariableDeclaration) iter.next();
+			for(Iterator<SingleVariableDeclaration> iter= formalArgs.iterator(); iter.hasNext(); i++) {
+				SingleVariableDeclaration svd= iter.next();
 
 				names[i]= svd.getName().getIdentifier();
 			}
@@ -594,7 +597,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 		ClassInstanceCreation	newCtorCall= ast.newClassInstanceCreation();
 		ReturnStatement			ret= ast.newReturnStatement();
 		Block		body= ast.newBlock();
-		List		stmts= body.statements();
+		List<Statement>		stmts= body.statements();
 		String		retTypeName= ctorBinding.getName();
 
 		createFactoryMethodSignature(ast, newMethod);
@@ -633,7 +636,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
         else {
             Type baseType= ast.newSimpleType(ast.newSimpleName(ctorTypeName));
             ParameterizedType newInstantiatedType= ast.newParameterizedType(baseType);
-            List/*<Type>*/ newInstTypeArgs= newInstantiatedType.typeArguments();
+            List<Type> newInstTypeArgs= newInstantiatedType.typeArguments();
 
             for(int i= 0; i < ctorOwnerTypeParameters.length; i++) {
                 Type typeArg= ASTNodeFactory.newType(ast, ctorOwnerTypeParameters[i].getName());
@@ -661,7 +664,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
         else {
             Type baseType= ast.newSimpleType(ast.newSimpleName(retTypeName));
             ParameterizedType newRetType= ast.newParameterizedType(baseType);
-            List/*<Type>*/ newRetTypeArgs= newRetType.typeArguments();
+            List<Type> newRetTypeArgs= newRetType.typeArguments();
 
             for(int i= 0; i < ctorOwnerTypeParameters.length; i++) {
                 Type retTypeArg= ASTNodeFactory.newType(ast, ctorOwnerTypeParameters[i].getName());
@@ -684,7 +687,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	 * @param newMethod the <code>MethodDeclaration</code> for the factory method
 	 */
 	private void createFactoryMethodSignature(AST ast, MethodDeclaration newMethod) {
-		List argDecls= newMethod.parameters();
+		List<SingleVariableDeclaration> argDecls= newMethod.parameters();
 
 		for(int i=0; i < fArgTypes.length; i++) {
 			SingleVariableDeclaration argDecl= ast.newSingleVariableDeclaration();
@@ -705,7 +708,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 		}
 
 		ITypeBinding[] ctorExcepts= fCtorBinding.getExceptionTypes();
-		List exceptions= newMethod.thrownExceptions();
+		List<Name> exceptions= newMethod.thrownExceptions();
 
 		for(int i=0; i < ctorExcepts.length; i++) {
 			String excName= fImportRewriter.addImport(ctorExcepts[i]);
@@ -735,11 +738,11 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	 */
 	private void copyTypeParameters(AST ast, MethodDeclaration newMethod) {
 		ITypeBinding[] ctorOwnerTypeParms= fCtorBinding.getDeclaringClass().getTypeParameters();
-		List/*<TypeParameter>*/ factoryMethodTypeParms= newMethod.typeParameters();
+		List<TypeParameter> factoryMethodTypeParms= newMethod.typeParameters();
 		for(int i= 0; i < ctorOwnerTypeParms.length; i++) {
             TypeParameter newParm= ast.newTypeParameter();
             ITypeBinding[] parmTypeBounds= ctorOwnerTypeParms[i].getTypeBounds();
-            List/*<Type>*/ newParmBounds= newParm.typeBounds();
+            List<Type> newParmBounds= newParm.typeBounds();
 
             newParm.setName(ast.newSimpleName(ctorOwnerTypeParms[i].getName()));
             for(int b=0; b < parmTypeBounds.length; b++) {
@@ -785,12 +788,12 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	 * the factory method
 	 */
 	private void createFactoryMethodConstructorArgs(AST ast, ClassInstanceCreation newCtorCall) {
-		List argList= newCtorCall.arguments();
+		List<Expression> argList= newCtorCall.arguments();
 
 		for(int i=0; i < fArgTypes.length; i++) {
 			ASTNode ctorArg= ast.newSimpleName(fFormalArgNames[i]);
 
-			argList.add(ctorArg);
+			argList.add((Expression) ctorArg);
 		}
 	}
 
@@ -830,9 +833,9 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 
 		factoryMethodCall.setName(ast.newSimpleName(fNewMethodName));
 
-		List actualCtorArgsList= actualCtorArgs.getRewrittenList();
+		List<Expression> actualCtorArgsList= actualCtorArgs.getRewrittenList();
 		for (int i=0; i < actualCtorArgsList.size(); i++) {
-			Expression actualCtorArg= (Expression) actualCtorArgsList.get(i);
+			Expression actualCtorArg= actualCtorArgsList.get(i);
 			
 			ASTNode movedArg;
 			if (ASTNodes.isExistingNode(actualCtorArg)) {
@@ -973,15 +976,13 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	private boolean replaceConstructorCalls(SearchResultGroup rg, CompilationUnit unit, ASTRewrite unitRewriter, CompilationUnitChange unitChange) throws CoreException {
 		Assert.isTrue(ASTCreator.getCu(unit).equals(rg.getCompilationUnit()));
 		SearchMatch[] hits= rg.getSearchResults();
-		Arrays.sort(hits, new Comparator() {
+		Arrays.sort(hits, new Comparator<SearchMatch>() {
 			/**
 			 * Sort by descending offset, such that nested constructor calls are processed first.
 			 * This is necessary, since they can only be moved into the factory method invocation
 			 * after they have been rewritten.
 			 */
-			public int compare(Object o1, Object o2) {
-				SearchMatch m1= (SearchMatch)o1;
-				SearchMatch m2= (SearchMatch)o2;
+			public int compare(SearchMatch m1, SearchMatch m2) {
 				return m2.getOffset() - m1.getOffset();
 			}
 		});
@@ -1118,11 +1119,12 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.IntroduceFactory_createChanges, fAllCallsTo.length);
 			final ITypeBinding binding= fFactoryOwningClass.resolveBinding();
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			IJavaProject javaProject= fCUHandle.getJavaProject();
 			if (javaProject != null)
@@ -1183,6 +1185,7 @@ public class IntroduceFactoryRefactoring extends Refactoring {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#getName()
 	 */
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.IntroduceFactory_name;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java
index 7e5adb7..a932e2d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,11 +54,13 @@ import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.Javadoc;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.ParameterizedType;
@@ -70,9 +72,8 @@ import org.eclipse.jdt.core.dom.SuperMethodInvocation;
 import org.eclipse.jdt.core.dom.ThisExpression;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeParameter;
-import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.IntroduceIndirectionDescriptor;
@@ -103,6 +104,7 @@ import org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2;
 import org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil;
 import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
 import org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor;
+import org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.IncomingMemberVisibilityAdjustment;
 import org.eclipse.jdt.internal.corext.refactoring.util.ResourceUtil;
 import org.eclipse.jdt.internal.corext.refactoring.util.TextChangeManager;
 import org.eclipse.jdt.internal.corext.util.JdtFlags;
@@ -113,6 +115,7 @@ import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 /**
@@ -205,7 +208,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 	/**
 	 * CompilationUnitRewrites for all affected cus
 	 */
-	private Map/* <ICompilationUnit,CompilationUnitRewrite> */fRewrites;
+	private Map<ICompilationUnit, CompilationUnitRewrite> fRewrites;
 	/**
 	 * Text change manager (actually a CompilationUnitChange manager) which
 	 * manages all changes.
@@ -221,7 +224,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 	/**
 	 * Visibility adjustments for the intermediary
 	 */
-	private Map/*IMember, IVisibilityAdjustment*/ fIntermediaryAdjustments;
+	private Map<IMember, IncomingMemberVisibilityAdjustment> fIntermediaryAdjustments;
 
 
 	private class NoOverrideProgressMonitor extends SubProgressMonitor {
@@ -230,6 +233,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 			super(monitor, ticks, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
 		}
 
+		@Override
 		public void setTaskName(String name) {
 			// do nothing
 		}
@@ -266,6 +270,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 
 	// ********* UI INTERACTION AND STARTUP OPTIONS ************
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.IntroduceIndirectionRefactoring_introduce_indirection_name;
 	}
@@ -366,10 +371,11 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 
 	// ********** CONDITION CHECKING **********
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.IntroduceIndirectionRefactoring_checking_activation, 1);
-			fRewrites= new HashMap();
+			fRewrites= new HashMap<ICompilationUnit, CompilationUnitRewrite>();
 
 			// This refactoring has been invoked on
 			// (1) a TextSelection inside an ICompilationUnit or inside an IClassFile (definitely with source), or
@@ -390,7 +396,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 					selectionNode= getSelectedNode(fSelectionCompilationUnit, selectionCURoot, fSelectionStart, fSelectionLength);
 				} else {
 					// binary class file - no cu rewrite
-					ASTParser parser= ASTParser.newParser(AST.JLS3);
+					ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 					parser.setResolveBindings(true);
 					parser.setSource(fSelectionClassFile);
 					selectionCURoot= (CompilationUnit) parser.createAST(null);
@@ -433,7 +439,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 					fTargetMethodBinding= declaration.resolveBinding().getMethodDeclaration();
 				} else {
 					// binary method - no CURewrite available (and none needed as we cannot update the method anyway)
-					ASTParser parser= ASTParser.newParser(AST.JLS3);
+					ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 					parser.setProject(fTargetMethod.getJavaProject());
 					IBinding[] bindings= parser.createBindings(new IJavaElement[] { fTargetMethod }, null);
 					fTargetMethodBinding= ((IMethodBinding) bindings[0]).getMethodDeclaration();
@@ -465,14 +471,15 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 		}
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 
 		RefactoringStatus result= new RefactoringStatus();
 		fTextChangeManager= new TextChangeManager();
 		fIntermediaryFirstParameterType= null;
 		fIntermediaryClassBinding= null;
-		for (Iterator iter= fRewrites.values().iterator(); iter.hasNext();)
-			((CompilationUnitRewrite) iter.next()).clearASTAndImportRewrites();
+		for (Iterator<CompilationUnitRewrite> iter= fRewrites.values().iterator(); iter.hasNext();)
+			iter.next().clearASTAndImportRewrites();
 
 		int startupTicks= 5;
 		int hierarchyTicks= 5;
@@ -495,7 +502,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 		fIntermediaryClassBinding= typeToBinding(fIntermediaryClass, imRewrite.getRoot());
 
 		fAdjustor= new MemberVisibilityAdjustor(fIntermediaryClass, fIntermediaryClass);
-		fIntermediaryAdjustments= new HashMap();
+		fIntermediaryAdjustments= new HashMap<IMember, IncomingMemberVisibilityAdjustment>();
 
 		// check static method in non-static nested type
 		if (fIntermediaryClassBinding.isNested() && !Modifier.isStatic(fIntermediaryClassBinding.getModifiers()))
@@ -732,8 +739,9 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 
 	// ******************** CHANGE CREATION ***********************
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fTargetMethod.getJavaProject();
 		if (javaProject != null)
@@ -772,11 +780,11 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 	 */
 	private RefactoringStatus checkCanCreateIntermediaryMethod() throws JavaModelException {
 		// check if method already exists:
-		List parameterBindings= new ArrayList();
+		List<ITypeBinding> parameterBindings= new ArrayList<ITypeBinding>();
 		if (!isStaticTarget())
 			parameterBindings.add(fIntermediaryFirstParameterType);
 		parameterBindings.addAll(Arrays.asList(fTargetMethodBinding.getParameterTypes()));
-		return Checks.checkMethodInType(fIntermediaryClassBinding, fIntermediaryMethodName, (ITypeBinding[]) parameterBindings.toArray(new ITypeBinding[parameterBindings.size()]));
+		return Checks.checkMethodInType(fIntermediaryClassBinding, fIntermediaryMethodName, parameterBindings.toArray(new ITypeBinding[parameterBindings.size()]));
 	}
 
 	private void createIntermediaryMethod() throws CoreException {
@@ -792,7 +800,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 		intermediary.setName(ast.newSimpleName(fIntermediaryMethodName));
 
 		// Flags
-		List modifiers= intermediary.modifiers();
+		List<IExtendedModifier> modifiers= intermediary.modifiers();
 		modifiers.add(imRewrite.getAST().newModifier(ModifierKeyword.PUBLIC_KEYWORD));
 		modifiers.add(imRewrite.getAST().newModifier(ModifierKeyword.STATIC_KEYWORD));
 
@@ -865,11 +873,11 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 				.createGroupDescription(RefactoringCoreMessages.IntroduceIndirectionRefactoring_group_description_create_new_method));
 	}
 
-	private void addTypeParameters(CompilationUnitRewrite imRewrite, List newTypeParameters, ITypeBinding parent) {
+	private void addTypeParameters(CompilationUnitRewrite imRewrite, List<TypeParameter> list, ITypeBinding parent) {
 
 		ITypeBinding enclosing= parent.getDeclaringClass();
 		if (enclosing != null)
-			addTypeParameters(imRewrite, newTypeParameters, enclosing);
+			addTypeParameters(imRewrite, list, enclosing);
 
 		ITypeBinding[] typeParameters= parent.getTypeParameters();
 		for (int i= 0; i < typeParameters.length; i++) {
@@ -879,7 +887,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 			for (int j= 0; j < bounds.length; j++)
 				if (!"java.lang.Object".equals(bounds[j].getQualifiedName())) //$NON-NLS-1$
 					ntp.typeBounds().add(imRewrite.getImportRewrite().addImport(bounds[j], imRewrite.getAST()));
-			newTypeParameters.add(ntp);
+			list.add(ntp);
 		}
 	}
 
@@ -955,8 +963,8 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 			return createWarningAboutCall(enclosing, originalInvocation, RefactoringCoreMessages.IntroduceIndirectionRefactoring_call_warning_type_arguments);
 
 		MethodInvocation newInvocation= unitRewriter.getAST().newMethodInvocation();
-		List newInvocationArgs= newInvocation.arguments();
-		List originalInvocationArgs= originalInvocation.arguments();
+		List<Expression> newInvocationArgs= newInvocation.arguments();
+		List<Expression> originalInvocationArgs= originalInvocation.arguments();
 
 		// static call => always use a qualifier
 		String qualifier= unitRewriter.getImportRewrite().addImport(fIntermediaryClassBinding);
@@ -977,7 +985,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 					return status;
 				newInvocationArgs.add(expr);
 			} else {
-				ASTNode expressionAsParam= unitRewriter.getASTRewrite().createMoveTarget(expression);
+				Expression expressionAsParam= (Expression) unitRewriter.getASTRewrite().createMoveTarget(expression);
 				newInvocationArgs.add(expressionAsParam);
 			}
 		} else {
@@ -990,8 +998,8 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 		}
 
 		for (int i= 0; i < originalInvocationArgs.size(); i++) {
-			Expression originalInvocationArg= (Expression) originalInvocationArgs.get(i);
-			ASTNode movedArg= unitRewriter.getASTRewrite().createMoveTarget(originalInvocationArg);
+			Expression originalInvocationArg= originalInvocationArgs.get(i);
+			Expression movedArg= (Expression) unitRewriter.getASTRewrite().createMoveTarget(originalInvocationArg);
 			newInvocationArgs.add(movedArg);
 		}
 
@@ -1096,12 +1104,12 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 	 * Helper method for retrieving a *bottom-up* list of super type bindings
 	 */
 	private ITypeBinding[] getTypeAndAllSuperTypes(ITypeBinding type) {
-		List result= new ArrayList();
+		List<ITypeBinding> result= new ArrayList<ITypeBinding>();
 		collectSuperTypes(type, result);
-		return (ITypeBinding[]) result.toArray(new ITypeBinding[result.size()]);
+		return result.toArray(new ITypeBinding[result.size()]);
 	}
 
-	private void collectSuperTypes(ITypeBinding curr, List list) {
+	private void collectSuperTypes(ITypeBinding curr, List<ITypeBinding> list) {
 		if (list.add(curr.getTypeDeclaration())) {
 			ITypeBinding[] interfaces= curr.getInterfaces();
 			for (int i= 0; i < interfaces.length; i++) {
@@ -1115,7 +1123,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 	}
 
 	private CompilationUnitRewrite getCachedCURewrite(ICompilationUnit unit) {
-		CompilationUnitRewrite rewrite= (CompilationUnitRewrite) fRewrites.get(unit);
+		CompilationUnitRewrite rewrite= fRewrites.get(unit);
 		if (rewrite == null) {
 			rewrite= new CompilationUnitRewrite(unit);
 			fRewrites.put(unit, rewrite);
@@ -1128,7 +1136,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 	}
 
 	private void createChangeAndDiscardRewrite(ICompilationUnit compilationUnit) throws CoreException {
-		CompilationUnitRewrite rewrite= (CompilationUnitRewrite) fRewrites.get(compilationUnit);
+		CompilationUnitRewrite rewrite= fRewrites.get(compilationUnit);
 		if (rewrite != null) {
 			fTextChangeManager.manage(compilationUnit, rewrite.createChange(true));
 			fRewrites.remove(compilationUnit);
@@ -1202,9 +1210,9 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 	}
 
 	private IFile[] getAllFilesToModify() {
-		List cus= new ArrayList();
+		List<ICompilationUnit> cus= new ArrayList<ICompilationUnit>();
 		cus.addAll(Arrays.asList(fTextChangeManager.getAllCompilationUnits()));
-		return ResourceUtil.getFiles((ICompilationUnit[]) cus.toArray(new ICompilationUnit[cus.size()]));
+		return ResourceUtil.getFiles(cus.toArray(new ICompilationUnit[cus.size()]));
 	}
 
 	private boolean isStaticTarget() throws JavaModelException {
@@ -1263,11 +1271,11 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 
 	private RefactoringStatus adjustVisibility(IMember whoToAdjust, ModifierKeyword neededVisibility, boolean alsoIncreaseEnclosing, IProgressMonitor monitor) throws CoreException {
 
-		Map adjustments;
+		Map<IMember, IncomingMemberVisibilityAdjustment> adjustments;
 		if (isRewriteKept(whoToAdjust.getCompilationUnit()))
 			adjustments= fIntermediaryAdjustments;
 		else
-			adjustments= new HashMap();
+			adjustments= new HashMap<IMember, IncomingMemberVisibilityAdjustment>();
 
 		int existingAdjustments= adjustments.size();
 		addAdjustment(whoToAdjust, neededVisibility, adjustments);
@@ -1291,11 +1299,11 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 
 		try {
 			monitor.beginTask(RefactoringCoreMessages.MemberVisibilityAdjustor_adjusting, 2);
-			Map rewrites;
+			Map<ICompilationUnit, CompilationUnitRewrite> rewrites;
 			if (!isRewriteKept(whoToAdjust.getCompilationUnit())) {
 				CompilationUnitRewrite rewrite= new CompilationUnitRewrite(whoToAdjust.getCompilationUnit());
 				rewrite.setResolveBindings(false);
-				rewrites= new HashMap();
+				rewrites= new HashMap<ICompilationUnit, CompilationUnitRewrite>();
 				rewrites.put(whoToAdjust.getCompilationUnit(), rewrite);
 				status.merge(rewriteVisibility(adjustments, rewrites, new SubProgressMonitor(monitor, 1, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)));
 				rewrite.attachChange((CompilationUnitChange) fTextChangeManager.get(whoToAdjust.getCompilationUnit()), true, new SubProgressMonitor(monitor, 1, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
@@ -1306,7 +1314,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 		return status;
 	}
 
-	private RefactoringStatus rewriteVisibility(Map adjustments, Map rewrites, IProgressMonitor monitor) throws JavaModelException {
+	private RefactoringStatus rewriteVisibility(Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, Map<ICompilationUnit, CompilationUnitRewrite> rewrites, IProgressMonitor monitor) throws JavaModelException {
 		RefactoringStatus status= new RefactoringStatus();
 		fAdjustor.setRewrites(rewrites);
 		fAdjustor.setAdjustments(adjustments);
@@ -1315,7 +1323,7 @@ public class IntroduceIndirectionRefactoring extends Refactoring {
 		return status;
 	}
 
-	private void addAdjustment(IMember whoToAdjust, ModifierKeyword neededVisibility, Map adjustments) throws JavaModelException {
+	private void addAdjustment(IMember whoToAdjust, ModifierKeyword neededVisibility, Map<IMember, IncomingMemberVisibilityAdjustment> adjustments) throws JavaModelException {
 		ModifierKeyword currentVisibility= ModifierKeyword.fromFlagValue(JdtFlags.getVisibilityCode(whoToAdjust));
 		if (MemberVisibilityAdjustor.hasLowerVisibility(currentVisibility, neededVisibility)
 				&& MemberVisibilityAdjustor.needsVisibilityAdjustments(whoToAdjust, neededVisibility, adjustments))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java
index 2894575..818b6cd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
  *       o introduce parameter throws NPE if there are compiler errors
  *         (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=48325)
  *******************************************************************************/
-
 package org.eclipse.jdt.internal.corext.refactoring.code;
 
 import java.util.Arrays;
@@ -43,6 +42,7 @@ import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.SourceRange;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.ClassInstanceCreation;
@@ -55,6 +55,7 @@ import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.NullLiteral;
+import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
@@ -91,6 +92,7 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
+
 public class IntroduceParameterRefactoring extends Refactoring implements IDelegateUpdating {
 
 	private static final String ATTRIBUTE_ARGUMENT= "argument"; //$NON-NLS-1$
@@ -157,12 +159,14 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 
 	// ------------------- /IDelegateUpdating ---------------------
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.IntroduceParameterRefactoring_name;
 	}
 
 	//--- checkActivation
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask("", 7); //$NON-NLS-1$
@@ -236,6 +240,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 			addParameterInfo(cuRewrite);
 
 			fChangeSignatureProcessor.setBodyUpdater(new BodyUpdater() {
+				@Override
 				public void updateBody(MethodDeclaration methodDeclaration, CompilationUnitRewrite rewrite, RefactoringStatus updaterResult) {
 					replaceSelectedExpression(rewrite);
 				}
@@ -253,12 +258,13 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 		ITypeBinding typeBinding= Bindings.normalizeForDeclarationUse(fSelectedExpression.resolveTypeBinding(), fSelectedExpression.getAST());
 		String typeName= cuRewrite.getImportRewrite().addImport(typeBinding);
 		String name= fParameterName != null ? fParameterName : guessedParameterName();
-		String defaultValue= fSourceCU.getBuffer().getText(fSelectedExpression.getStartPosition(), fSelectedExpression.getLength());
+		Expression expression= fSelectedExpression instanceof ParenthesizedExpression ? ((ParenthesizedExpression)fSelectedExpression).getExpression() : fSelectedExpression;
+		String defaultValue= fSourceCU.getBuffer().getText(expression.getStartPosition(), expression.getLength());
 		fParameter= ParameterInfo.createInfoForAddedParameter(typeBinding, typeName, name, defaultValue);
 		if (fArguments == null) {
-			List parameterInfos= fChangeSignatureProcessor.getParameterInfos();
+			List<ParameterInfo> parameterInfos= fChangeSignatureProcessor.getParameterInfos();
 			int parametersCount= parameterInfos.size();
-			if (parametersCount > 0 && ((ParameterInfo) parameterInfos.get(parametersCount - 1)).isOldVarargs())
+			if (parametersCount > 0 && parameterInfos.get(parametersCount - 1).isOldVarargs())
 				parameterInfos.add(parametersCount - 1, fParameter);
 			else
 				parameterInfos.add(fParameter);
@@ -275,7 +281,8 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 
 		ASTNode newExpression= cuRewrite.getRoot().getAST().newSimpleName(fParameter.getNewName());
 		String description= RefactoringCoreMessages.IntroduceParameterRefactoring_replace;
-		cuRewrite.getASTRewrite().replace(expression, newExpression, cuRewrite.createGroupDescription(description));
+		cuRewrite.getASTRewrite().replace(expression.getParent() instanceof ParenthesizedExpression
+				? expression.getParent() : expression, newExpression, cuRewrite.createGroupDescription(description));
 	}
 
 	private void initializeSelectedExpression(CompilationUnitRewrite cuRewrite) throws JavaModelException {
@@ -308,7 +315,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 			}
 
 			MethodDeclaration methodDeclaration= (MethodDeclaration) ASTNodes.getParent(fSelectedExpression, MethodDeclaration.class);
-			if (methodDeclaration == null)
+			if (methodDeclaration == null || ASTNodes.getParent(fSelectedExpression, Annotation.class) != null)
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.IntroduceParameterRefactoring_expression_in_method);
 			if (methodDeclaration.resolveBinding() == null)
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.IntroduceParameterRefactoring_no_binding);
@@ -386,7 +393,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 		}
 	}
 
-	public List getParameterInfos() {
+	public List<ParameterInfo> getParameterInfos() {
 		return fChangeSignatureProcessor.getParameterInfos();
 	}
 
@@ -425,22 +432,22 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 	 * @return proposed variable names (may be empty, but not null).
 	 */
 	public String[] guessParameterNames() {
-		LinkedHashSet proposals= new LinkedHashSet(); //retain ordering, but prevent duplicates
+		LinkedHashSet<String> proposals= new LinkedHashSet<String>(); //retain ordering, but prevent duplicates
 		if (fSelectedExpression instanceof MethodInvocation){
 			proposals.addAll(guessTempNamesFromMethodInvocation((MethodInvocation) fSelectedExpression, fExcludedParameterNames));
 		}
 		proposals.addAll(guessTempNamesFromExpression(fSelectedExpression, fExcludedParameterNames));
-		return (String[]) proposals.toArray(new String[proposals.size()]);
+		return proposals.toArray(new String[proposals.size()]);
 	}
 
-	private List/*<String>*/ guessTempNamesFromMethodInvocation(MethodInvocation selectedMethodInvocation, String[] excludedVariableNames) {
+	private List<String> guessTempNamesFromMethodInvocation(MethodInvocation selectedMethodInvocation, String[] excludedVariableNames) {
 		String methodName= selectedMethodInvocation.getName().getIdentifier();
 		for (int i= 0; i < KNOWN_METHOD_NAME_PREFIXES.length; i++) {
 			String prefix= KNOWN_METHOD_NAME_PREFIXES[i];
 			if (! methodName.startsWith(prefix))
 				continue; //not this prefix
 			if (methodName.length() == prefix.length())
-				return Collections.EMPTY_LIST; // prefix alone -> don't take method name
+				return Collections.emptyList(); // prefix alone -> don't take method name
 			char firstAfterPrefix= methodName.charAt(prefix.length());
 			if (! Character.isUpperCase(firstAfterPrefix))
 				continue; //not uppercase after prefix
@@ -453,7 +460,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 		return Arrays.asList(proposals);
 	}
 
-	private List/*<String>*/ guessTempNamesFromExpression(Expression selectedExpression, String[] excluded) {
+	private List<String> guessTempNamesFromExpression(Expression selectedExpression, String[] excluded) {
 		ITypeBinding expressionBinding= Bindings.normalizeForDeclarationUse(
 			selectedExpression.resolveTypeBinding(),
 			selectedExpression.getAST());
@@ -461,7 +468,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 		if (typeName.length() == 0)
 			typeName= expressionBinding.getName();
 		if (typeName.length() == 0)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 		int typeParamStart= typeName.indexOf("<"); //$NON-NLS-1$
 		if (typeParamStart != -1)
 			typeName= typeName.substring(0, typeParamStart);
@@ -495,6 +502,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 
 //--- checkInput
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		fChangeSignatureRefactoring.setValidationContext(getValidationContext());
 		try {
@@ -504,6 +512,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 		}
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		fChangeSignatureRefactoring.setValidationContext(getValidationContext());
 		try {
@@ -519,9 +528,9 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 		ChangeMethodSignatureDescriptor extended= (ChangeMethodSignatureDescriptor) fChangeSignatureProcessor.createDescriptor();
 		RefactoringContribution contribution= RefactoringCore.getRefactoringContribution(IJavaRefactorings.CHANGE_METHOD_SIGNATURE);
 
-		Map argumentsMap= contribution.retrieveArgumentMap(extended);
+		Map<String, String> argumentsMap= contribution.retrieveArgumentMap(extended);
 
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		arguments.put(ATTRIBUTE_ARGUMENT, fParameter.getNewName());
 		arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_SELECTION, new Integer(fSelectionStart).toString() + " " + new Integer(fSelectionLength).toString()); //$NON-NLS-1$
 		arguments.putAll(argumentsMap);
@@ -565,7 +574,7 @@ public class IntroduceParameterRefactoring extends Refactoring implements IDeleg
 			if (element == null || !element.exists() || element.getElementType() != IJavaElement.COMPILATION_UNIT)
 				return JavaRefactoringDescriptorUtil.createInputFatalStatus(element, getName(), IJavaRefactorings.INTRODUCE_PARAMETER);
 			else
-				fSourceCU= ((IMethod) element).getCompilationUnit();
+				fSourceCU= (ICompilationUnit)element;
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT));
 		final String name= arguments.getAttribute(ATTRIBUTE_ARGUMENT);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java
index b2cf5c2..1e9d698 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,34 +17,78 @@ import java.util.List;
 
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
+import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.ConstructorInvocation;
+import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
 import org.eclipse.jdt.core.dom.SuperMethodInvocation;
 
 public class Invocations {
 
-	public static List getArguments(ASTNode invocation) {
-		switch(invocation.getNodeType()) {
+	public static List<Expression> getArguments(ASTNode invocation) {
+		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 				return ((MethodInvocation)invocation).arguments();
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return ((SuperMethodInvocation)invocation).arguments();
+				
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return ((ConstructorInvocation)invocation).arguments();
+			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
+				return ((SuperConstructorInvocation)invocation).arguments();
+				
+			case ASTNode.CLASS_INSTANCE_CREATION:
+				return ((ClassInstanceCreation)invocation).arguments();
+			case ASTNode.ENUM_CONSTANT_DECLARATION:
+				return ((EnumConstantDeclaration)invocation).arguments();
+				
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
 	}
 
+	public static ChildListPropertyDescriptor getArgumentsProperty(ASTNode invocation) {
+		switch (invocation.getNodeType()) {
+			case ASTNode.METHOD_INVOCATION:
+				return MethodInvocation.ARGUMENTS_PROPERTY;
+			case ASTNode.SUPER_METHOD_INVOCATION:
+				return SuperMethodInvocation.ARGUMENTS_PROPERTY;
+				
+			case ASTNode.CONSTRUCTOR_INVOCATION:
+				return ConstructorInvocation.ARGUMENTS_PROPERTY;
+			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
+				return SuperConstructorInvocation.ARGUMENTS_PROPERTY;
+				
+			case ASTNode.CLASS_INSTANCE_CREATION:
+				return ClassInstanceCreation.ARGUMENTS_PROPERTY;
+			case ASTNode.ENUM_CONSTANT_DECLARATION:
+				return EnumConstantDeclaration.ARGUMENTS_PROPERTY;
+				
+			default:
+				throw new IllegalArgumentException(invocation.toString());
+		}
+	}
+	
 	public static Expression getExpression(ASTNode invocation) {
-		switch(invocation.getNodeType()) {
+		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 				return ((MethodInvocation)invocation).getExpression();
 			case ASTNode.SUPER_METHOD_INVOCATION:
+				return null;
+				
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return null;
+			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
+				return ((SuperConstructorInvocation)invocation).getExpression();
+				
+			case ASTNode.CLASS_INSTANCE_CREATION:
+				return ((ClassInstanceCreation)invocation).getExpression();
+			case ASTNode.ENUM_CONSTANT_DECLARATION:
+				return null;
+				
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
@@ -55,27 +99,58 @@ public class Invocations {
 		return type == ASTNode.METHOD_INVOCATION || type == ASTNode.SUPER_METHOD_INVOCATION ||
 			type == ASTNode.CONSTRUCTOR_INVOCATION;
 	}
+	
+	public static boolean isInvocationWithArguments(ASTNode node) {
+		switch (node.getNodeType()) {
+			case ASTNode.METHOD_INVOCATION:
+			case ASTNode.SUPER_METHOD_INVOCATION:
+				
+			case ASTNode.CONSTRUCTOR_INVOCATION:
+			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
+				
+			case ASTNode.CLASS_INSTANCE_CREATION:
+			case ASTNode.ENUM_CONSTANT_DECLARATION:
+				return true;
+				
+			default:
+				return false;
+		}
+	}
 
 	public static IMethodBinding resolveBinding(ASTNode invocation) {
-		switch(invocation.getNodeType()) {
+		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 				return ((MethodInvocation)invocation).resolveMethodBinding();
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return ((SuperMethodInvocation)invocation).resolveMethodBinding();
+				
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return ((ConstructorInvocation)invocation).resolveConstructorBinding();
+			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
+				return ((SuperConstructorInvocation)invocation).resolveConstructorBinding();
+				
+			case ASTNode.CLASS_INSTANCE_CREATION:
+				return ((ClassInstanceCreation)invocation).resolveConstructorBinding();
+			case ASTNode.ENUM_CONSTANT_DECLARATION:
+				return ((EnumConstantDeclaration)invocation).resolveConstructorBinding();
+				
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
 	}
 
 	public static boolean isResolvedTypeInferredFromExpectedType(Expression invocation) {
-		switch(invocation.getNodeType()) {
+		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 				return ((MethodInvocation) invocation).isResolvedTypeInferredFromExpectedType();
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return ((SuperMethodInvocation) invocation).isResolvedTypeInferredFromExpectedType();
+				
 			case ASTNode.CONSTRUCTOR_INVOCATION:
+			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
+				
+			case ASTNode.CLASS_INSTANCE_CREATION:
+			case ASTNode.ENUM_CONSTANT_DECLARATION:
 				return false;
 			default:
 				throw new IllegalArgumentException(invocation.toString());
@@ -83,13 +158,21 @@ public class Invocations {
 	}
 
 	public static ChildListPropertyDescriptor getTypeArgumentsProperty(Expression invocation) {
-		switch(invocation.getNodeType()) {
+		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 				return MethodInvocation.TYPE_ARGUMENTS_PROPERTY;
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return SuperMethodInvocation.TYPE_ARGUMENTS_PROPERTY;
+				
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return ConstructorInvocation.TYPE_ARGUMENTS_PROPERTY;
+			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
+				return SuperConstructorInvocation.TYPE_ARGUMENTS_PROPERTY;
+				
+			case ASTNode.CLASS_INSTANCE_CREATION:
+				return ClassInstanceCreation.TYPE_ARGUMENTS_PROPERTY;
+				
+			case ASTNode.ENUM_CONSTANT_DECLARATION:
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/LocalTypeAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/LocalTypeAnalyzer.java
index f7a3181..a384f6e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/LocalTypeAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/LocalTypeAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,8 +32,8 @@ import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 public class LocalTypeAnalyzer extends ASTVisitor {
 
 	private Selection fSelection;
-	private List fTypeDeclarationsBefore= new ArrayList(2);
-	private List fTypeDeclarationsSelected= new ArrayList(2);
+	private List<AbstractTypeDeclaration> fTypeDeclarationsBefore= new ArrayList<AbstractTypeDeclaration>(2);
+	private List<AbstractTypeDeclaration> fTypeDeclarationsSelected= new ArrayList<AbstractTypeDeclaration>(2);
 	private String fBeforeTypeReferenced;
 	private String fSelectedTypeReferenced;
 
@@ -51,6 +51,7 @@ public class LocalTypeAnalyzer extends ASTVisitor {
 		fSelection= selection;
 	}
 
+	@Override
 	public boolean visit(SimpleName node) {
 		if (node.isDeclaration())
 			return true;
@@ -61,14 +62,17 @@ public class LocalTypeAnalyzer extends ASTVisitor {
 		return true;
 	}
 
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		return visitType(node);
 	}
 
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		return visitType(node);
 	}
 
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		return visitType(node);
 	}
@@ -103,9 +107,9 @@ public class LocalTypeAnalyzer extends ASTVisitor {
 		}
 	}
 
-	private boolean checkBinding(List declarations, ITypeBinding binding) {
-		for (Iterator iter= declarations.iterator(); iter.hasNext();) {
-			AbstractTypeDeclaration declaration= (AbstractTypeDeclaration)iter.next();
+	private boolean checkBinding(List<AbstractTypeDeclaration> declarations, ITypeBinding binding) {
+		for (Iterator<AbstractTypeDeclaration> iter= declarations.iterator(); iter.hasNext();) {
+			AbstractTypeDeclaration declaration= iter.next();
 			if (declaration.resolveBinding() == binding) {
 				return true;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/NameCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/NameCollector.java
index 9645162..4b00420 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/NameCollector.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/NameCollector.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,11 +23,12 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 import org.eclipse.jdt.internal.corext.dom.Selection;
 
 class NameCollector extends GenericVisitor {
-	private List names= new ArrayList();
+	private List<String> names= new ArrayList<String>();
 	private Selection fSelection;
 	public NameCollector(ASTNode node) {
 		fSelection= Selection.createFromStartLength(node.getStartPosition(), node.getLength());
 	}
+	@Override
 	protected boolean visitNode(ASTNode node) {
 		if (node.getStartPosition() > fSelection.getInclusiveEnd())
 			return true;
@@ -35,31 +36,36 @@ class NameCollector extends GenericVisitor {
 			return true;
 		return false;
 	}
+	@Override
 	public boolean visit(SimpleName node) {
 		names.add(node.getIdentifier());
 		return super.visit(node);
 	}
+	@Override
 	public boolean visit(VariableDeclarationStatement node) {
 		return true;
 	}
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		boolean result= super.visit(node);
 		if (!result)
 			names.add(node.getName().getIdentifier());
 		return result;
 	}
+	@Override
 	public boolean visit(SingleVariableDeclaration node) {
 		boolean result= super.visit(node);
 		if (!result)
 			names.add(node.getName().getIdentifier());
 		return result;
 	}
+	@Override
 	public boolean visit(TypeDeclarationStatement node) {
 		names.add(node.getDeclaration().getName().getIdentifier());
 		return false;
 	}
 
-    List getNames() {
+    List<String> getNames() {
         return names;
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/OperatorPrecedence.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/OperatorPrecedence.java
index ea3ac24..8f6e31f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/OperatorPrecedence.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/OperatorPrecedence.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,11 +18,11 @@ import org.eclipse.jdt.core.dom.ConditionalExpression;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.FieldAccess;
 import org.eclipse.jdt.core.dom.InfixExpression;
+import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 import org.eclipse.jdt.core.dom.InstanceofExpression;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.PostfixExpression;
 import org.eclipse.jdt.core.dom.PrefixExpression;
-import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 
 public class OperatorPrecedence {
 
@@ -34,7 +34,7 @@ public class OperatorPrecedence {
 	private static final int BITWISE_EXCLUSIVE_OR=	5;
 	private static final int BITWISE_AND=			6;
 	private static final int EQUALITY=				7;
-	private static final int RATIONAL=				8;
+	private static final int RELATIONAL= 			8;
 	private static final int SHIFT=					9;
 	private static final int ADDITIVE=				10;
 	private static final int MULTIPLICATIVE=		11;
@@ -71,7 +71,7 @@ public class OperatorPrecedence {
 		} else if (expression instanceof ConditionalExpression) {
 			return CONDITIONAL;
 		} else if (expression instanceof InstanceofExpression) {
-			return RATIONAL;
+			return RELATIONAL;
 		} else if (expression instanceof CastExpression) {
 			return TYPEGENERATION;
 		} else if (expression instanceof ClassInstanceCreation) {
@@ -124,7 +124,7 @@ public class OperatorPrecedence {
 		} else if (operator == Operator.EQUALS || operator == Operator.NOT_EQUALS) {
 			return EQUALITY;
 		} else if (operator == Operator.LESS || operator == Operator.LESS_EQUALS || operator == Operator.GREATER || operator == Operator.GREATER_EQUALS) {
-			return RATIONAL;
+			return RELATIONAL;
 		} else if (operator == Operator.LEFT_SHIFT || operator == Operator.RIGHT_SHIFT_SIGNED || operator == Operator.RIGHT_SHIFT_UNSIGNED) {
 			return SHIFT;
 		} else if (operator == Operator.PLUS || operator == Operator.MINUS) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java
index e06860e..b4a3994 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,8 +13,8 @@ package org.eclipse.jdt.internal.corext.refactoring.code;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 
 import org.eclipse.jdt.internal.corext.refactoring.code.flow.FlowInfo;
@@ -25,14 +25,14 @@ import org.eclipse.jdt.internal.corext.refactoring.code.flow.FlowInfo;
 
 	private SingleVariableDeclaration fDeclaration;
 	private int fAccessMode;
-	private List fReferences;
+	private List<SimpleName> fReferences;
 	private int fOperatorPrecedence;
 
 	public ParameterData(SingleVariableDeclaration decl) {
 		super();
 		fDeclaration= decl;
 		fAccessMode= FlowInfo.UNUSED;
-		fReferences= new ArrayList(2);
+		fReferences= new ArrayList<SimpleName>(2);
 		fOperatorPrecedence= -1;
 	}
 
@@ -44,11 +44,11 @@ import org.eclipse.jdt.internal.corext.refactoring.code.flow.FlowInfo;
 		return fDeclaration.resolveBinding().getType();
 	}
 
-	public void addReference(ASTNode node) {
+	public void addReference(SimpleName node) {
 		fReferences.add(node);
 	}
 
-	public List references() {
+	public List<SimpleName> references() {
 		return fReferences;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java
index cd1fd98..e5b6c8d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.ArrayType;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
+import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CatchClause;
 import org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -50,6 +51,7 @@ import org.eclipse.jdt.core.dom.ConstructorInvocation;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
@@ -188,7 +190,8 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
    		status.merge(initializeStatus);
     }
 
-    public String getName() {
+    @Override
+	public String getName() {
         return RefactoringCoreMessages.PromoteTempToFieldRefactoring_name;
     }
 
@@ -303,6 +306,7 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
     /*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkActivation(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus result= Checks.validateModifiesFiles(
 			ResourceUtil.getFiles(new ICompilationUnit[]{fCu}),
@@ -373,14 +377,14 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
 		final AbstractTypeDeclaration type= getEnclosingType();
 		if (type instanceof TypeDeclaration) {
 			FieldDeclaration[] fields= ((TypeDeclaration) type).getFields();
-			List result= new ArrayList(fields.length);
+			List<String> result= new ArrayList<String>(fields.length);
 			for (int i= 0; i < fields.length; i++) {
-				for (Iterator iter= fields[i].fragments().iterator(); iter.hasNext();) {
-					VariableDeclarationFragment field= (VariableDeclarationFragment) iter.next();
+				for (Iterator<VariableDeclarationFragment> iter= fields[i].fragments().iterator(); iter.hasNext();) {
+					VariableDeclarationFragment field= iter.next();
 					result.add(field.getName().getIdentifier());
 				}
 			}
-			return (String[]) result.toArray(new String[result.size()]);
+			return result.toArray(new String[result.size()]);
 		}
 		return new String[] {};
 	}
@@ -443,7 +447,8 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
     /*
      * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkInput(org.eclipse.core.runtime.IProgressMonitor)
      */
-    public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
+    @Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
     	try{
 	        RefactoringStatus result= new RefactoringStatus();
 	        result.merge(checkClashesWithExistingFields());
@@ -466,12 +471,13 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
 				if (!method.isConstructor())
 					continue;
 				NameCollector nameCollector= new NameCollector(method) {
+					@Override
 					protected boolean visitNode(ASTNode node) {
 						return true;
 					}
 				};
 				method.accept(nameCollector);
-				List names= nameCollector.getNames();
+				List<String> names= nameCollector.getNames();
 				if (names.contains(fFieldName)) {
 					String[] keys= { BasicElementLabels.getJavaElementName(fFieldName), BindingLabelProvider.getBindingLabel(method.resolveBinding(), JavaElementLabels.ALL_FULLY_QUALIFIED)};
 					String msg= Messages.format(RefactoringCoreMessages.PromoteTempToFieldRefactoring_Name_conflict, keys);
@@ -510,20 +516,21 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
     }
 
     private FieldDeclaration[] getFieldDeclarations(ChildListPropertyDescriptor descriptor) {
-    	final List bodyDeclarations= (List) getMethodDeclaration().getParent().getStructuralProperty(descriptor);
-    	List fields= new ArrayList(1);
-    	for (Iterator iter= bodyDeclarations.iterator(); iter.hasNext();) {
+    	final List<BodyDeclaration> bodyDeclarations= (List<BodyDeclaration>) getMethodDeclaration().getParent().getStructuralProperty(descriptor);
+    	List<FieldDeclaration> fields= new ArrayList<FieldDeclaration>(1);
+    	for (Iterator<BodyDeclaration> iter= bodyDeclarations.iterator(); iter.hasNext();) {
 	        Object each= iter.next();
 	        if (each instanceof FieldDeclaration)
-	        	fields.add(each);
+	        	fields.add((FieldDeclaration) each);
         }
-        return (FieldDeclaration[]) fields.toArray(new FieldDeclaration[fields.size()]);
+        return fields.toArray(new FieldDeclaration[fields.size()]);
     }
 
     /*
      * @see org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring#createChange(org.eclipse.core.runtime.IProgressMonitor)
      */
-    public Change createChange(IProgressMonitor pm) throws CoreException {
+    @Override
+	public Change createChange(IProgressMonitor pm) throws CoreException {
     	pm.beginTask("", 1); //$NON-NLS-1$
     	try {
     		if (fFieldName.length() == 0) {
@@ -617,7 +624,7 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
 	}
 
 	private int computeInsertIndexForNewConstructor(AbstractTypeDeclaration declaration) {
-    	List declarations= declaration.bodyDeclarations();
+    	List<BodyDeclaration> declarations= declaration.bodyDeclarations();
     	if (declarations.isEmpty())
 	        return 0;
 		int index= findFirstMethodIndex(declaration);
@@ -646,7 +653,7 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
     	Assert.isTrue(constructor.isConstructor());
         if (constructor.getBody() == null)
         	return false;
-        List statements= constructor.getBody().statements();
+        List<Statement> statements= constructor.getBody().statements();
         if (statements == null)
         	return false;
         if (statements.size() > 0 && statements.get(0) instanceof ConstructorInvocation)
@@ -657,20 +664,20 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
     private static MethodDeclaration[] getAllConstructors(AbstractTypeDeclaration typeDeclaration) {
 		if (typeDeclaration instanceof TypeDeclaration) {
 			MethodDeclaration[] allMethods= ((TypeDeclaration) typeDeclaration).getMethods();
-			List result= new ArrayList(Math.min(allMethods.length, 1));
+			List<MethodDeclaration> result= new ArrayList<MethodDeclaration>(Math.min(allMethods.length, 1));
 			for (int i= 0; i < allMethods.length; i++) {
 				MethodDeclaration declaration= allMethods[i];
 				if (declaration.isConstructor())
 					result.add(declaration);
 			}
-			return (MethodDeclaration[]) result.toArray(new MethodDeclaration[result.size()]);
+			return result.toArray(new MethodDeclaration[result.size()]);
 		}
 		return new MethodDeclaration[] {};
 	}
 
 
 	private ConvertLocalVariableDescriptor getRefactoringDescriptor() {
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fCu.getJavaProject();
 		if (javaProject != null)
@@ -732,7 +739,7 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
 
 		Statement newStatement= createNewAssignmentStatement(rewrite);
 
-    	List fragments= tempDeclarationStatement.fragments();
+    	List<VariableDeclarationFragment> fragments= tempDeclarationStatement.fragments();
 
 		int fragmentIndex= fragments.indexOf(fTempDeclarationNode);
 		Assert.isTrue(fragmentIndex != -1);
@@ -743,7 +750,7 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
 		}
 
         for (int i1= fragmentIndex, n = fragments.size(); i1 < n; i1++) {
-        	VariableDeclarationFragment fragment= (VariableDeclarationFragment)fragments.get(i1);
+        	VariableDeclarationFragment fragment= fragments.get(i1);
         	rewrite.remove(fragment, null);
         }
         if (fragmentIndex == 0)
@@ -754,12 +761,12 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
         listRewrite.insertAt(newStatement, statementIndex + 1, null);
 
         if (fragmentIndex + 1 < fragments.size()){
-            VariableDeclarationFragment firstFragmentAfter= (VariableDeclarationFragment)fragments.get(fragmentIndex + 1);
+            VariableDeclarationFragment firstFragmentAfter= fragments.get(fragmentIndex + 1);
             VariableDeclarationFragment copyfirstFragmentAfter= (VariableDeclarationFragment)rewrite.createCopyTarget(firstFragmentAfter);
         	VariableDeclarationStatement statement= getAST().newVariableDeclarationStatement(copyfirstFragmentAfter);
          	Type type= (Type)rewrite.createCopyTarget(tempDeclarationStatement.getType());
         	statement.setType(type);
-        	List modifiers= tempDeclarationStatement.modifiers();
+        	List<IExtendedModifier> modifiers= tempDeclarationStatement.modifiers();
         	if (modifiers.size() > 0) {
         		ListRewrite modifiersRewrite= rewrite.getListRewrite(tempDeclarationStatement, VariableDeclarationStatement.MODIFIERS2_PROPERTY);
         		ASTNode firstModifier= (ASTNode) modifiers.get(0);
@@ -768,7 +775,7 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
 	        	statement.modifiers().add(modifiersCopy);
         	}
         	for (int i= fragmentIndex + 2; i < fragments.size(); i++) {
-        		VariableDeclarationFragment fragment= (VariableDeclarationFragment)fragments.get(i);
+        		VariableDeclarationFragment fragment= fragments.get(i);
                 VariableDeclarationFragment fragmentCopy= (VariableDeclarationFragment)rewrite.createCopyTarget(fragment);
                 statement.fragments().add(fragmentCopy);
             }
@@ -805,11 +812,11 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
 
     private void addLocalDeclarationRemoval(ASTRewrite rewrite) {
 		VariableDeclarationStatement tempDeclarationStatement= getTempDeclarationStatement();
-    	List fragments= tempDeclarationStatement.fragments();
+    	List<VariableDeclarationFragment> fragments= tempDeclarationStatement.fragments();
 
     	int fragmentIndex= fragments.indexOf(fTempDeclarationNode);
     	Assert.isTrue(fragmentIndex != -1);
-        VariableDeclarationFragment fragment= (VariableDeclarationFragment)fragments.get(fragmentIndex);
+        VariableDeclarationFragment fragment= fragments.get(fragmentIndex);
         rewrite.remove(fragment, null);
         if (fragments.size() == 1)
 			rewrite.remove(tempDeclarationStatement, null);
@@ -823,7 +830,7 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
     	if (fields.length == 0)
     		insertIndex= 0;
     	else
-    		insertIndex= ((List) parent.getStructuralProperty(descriptor)).indexOf(fields[fields.length - 1]) + 1;
+    		insertIndex= ((List<? extends ASTNode>) parent.getStructuralProperty(descriptor)).indexOf(fields[fields.length - 1]) + 1;
 
     	final FieldDeclaration declaration= createNewFieldDeclaration(rewrite);
 		rewrite.getListRewrite(parent, descriptor).insertAt(declaration, insertIndex, null);
@@ -863,19 +870,20 @@ public class PromoteTempToFieldRefactoring extends Refactoring {
     }
 
     private static class LocalTypeAndVariableUsageAnalyzer extends HierarchicalASTVisitor{
-    	private final List fLocalDefinitions= new ArrayList(0); // List of IBinding (Variable and Type)
-    	private final List fLocalReferencesToEnclosing= new ArrayList(0); // List of ASTNodes
-		private final List fMethodTypeVariables;
+    	private final List<IBinding> fLocalDefinitions= new ArrayList<IBinding>(0); // List of IBinding (Variable and Type)
+    	private final List<SimpleName> fLocalReferencesToEnclosing= new ArrayList<SimpleName>(0); // List of ASTNodes
+		private final List<ITypeBinding> fMethodTypeVariables;
 		private boolean fClassTypeVariablesUsed= false;
     	public LocalTypeAndVariableUsageAnalyzer(ITypeBinding[] methodTypeVariables) {
 			fMethodTypeVariables= Arrays.asList(methodTypeVariables);
 		}
-		public List getUsageOfEnclosingNodes(){
+		public List<SimpleName> getUsageOfEnclosingNodes(){
 			return fLocalReferencesToEnclosing;
 		}
 		public boolean getClassTypeVariablesUsed() {
 			return fClassTypeVariablesUsed;
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			ITypeBinding typeBinding= node.resolveTypeBinding();
 			if (typeBinding != null && typeBinding.isLocal()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java
index a7d3f8d..3134ab7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,6 +85,7 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
@@ -144,6 +145,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
    		status.merge(initializeStatus);
     }
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.ReplaceInvocationsRefactoring_name;
 	}
@@ -176,6 +178,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 		fParameterNames= parameterNames;
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		// TargetProvider must get an untampered AST with original invocation node
 		// SourceProvider must get a tweaked AST with method body / parameter names replaced
@@ -187,7 +190,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReplaceInvocationsRefactoring_cannot_replace_in_binary);
 
 			ICompilationUnit cu= (ICompilationUnit) fSelectionTypeRoot;
-			CompilationUnit root= new RefactoringASTParser(AST.JLS3).parse(cu, true);
+			CompilationUnit root= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(cu, true);
 			fSelectionNode= getTargetNode(cu, root, fSelectionStart, fSelectionLength);
 			if (fSelectionNode == null)
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReplaceInvocationsRefactoring_select_method_to_apply);
@@ -206,7 +209,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 			fMethod= (IMethod) fMethodBinding.getJavaElement();
 
 		} else {
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setProject(fMethod.getJavaProject());
 			IBinding[] bindings= parser.createBindings(new IJavaElement[] { fMethod }, null);
 			fMethodBinding= (IMethodBinding) bindings[0];
@@ -230,7 +233,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 		ICompilationUnit methodCu= (method).getCompilationUnit();
 		if (methodCu != null) {
 			typeRoot= methodCu;
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setSource(methodCu);
 			parser.setFocalPosition(method.getNameRange().getOffset());
 			CompilationUnit compilationUnit= (CompilationUnit) parser.createAST(null);
@@ -240,9 +243,9 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 			Block newBody= ast.newBlock();
 			newBody.statements().add(rewrite.createStringPlaceholder(fBody, ASTNode.EMPTY_STATEMENT));
 			rewrite.replace(methodDecl.getBody(), newBody, null);
-			List parameters= methodDecl.parameters();
+			List<SingleVariableDeclaration> parameters= methodDecl.parameters();
 			for (int i= 0; i < parameters.size(); i++) {
-				SingleVariableDeclaration parameter= (SingleVariableDeclaration) parameters.get(i);
+				SingleVariableDeclaration parameter= parameters.get(i);
 				rewrite.set(parameter.getName(), SimpleName.IDENTIFIER_PROPERTY, fParameterNames[i], null);
 			}
 			TextEdit textEdit= rewrite.rewriteAST();
@@ -256,12 +259,13 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 			}
 			source= document;
 
-			methodDeclarationAstRoot= new RefactoringASTParser(AST.JLS3).parse(source.get(), methodCu, true, true, null);
+			methodDeclarationAstRoot= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(source.get(), methodCu, true, true, null);
 
 		} else {
 			IClassFile classFile= method.getClassFile();
 			//TODO: use source if available?
 			StubCreator stubCreator= new StubCreator(true) {
+				@Override
 				protected void appendMethodBody(IMethod currentMethod) throws JavaModelException {
 					if (currentMethod.equals(method)) {
 						fBuffer.append(fBody);
@@ -272,6 +276,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 				/*
 				 * @see org.eclipse.jdt.internal.corext.refactoring.binary.StubCreator#appendMethodParameterName(org.eclipse.jdt.core.IMethod, int)
 				 */
+				@Override
 				protected void appendMethodParameterName(IMethod currentMethod, int index) {
 					if (currentMethod.equals(method)) {
 						fBuffer.append(fParameterNames[index]);
@@ -283,7 +288,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 
 			String stub= stubCreator.createStub(classFile.getType(), null);
 			source= new Document(stub);
-			methodDeclarationAstRoot= new RefactoringASTParser(AST.JLS3).parse(stub, classFile, true, true, null);
+			methodDeclarationAstRoot= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(stub, classFile, true, true, null);
 			typeRoot= classFile;
 		}
 		ASTNode node= methodDeclarationAstRoot.findDeclaringNode(methodBinding.getKey());
@@ -329,6 +334,7 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 		return null;
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask("", 20); //$NON-NLS-1$
 		fChangeManager= new TextChangeManager();
@@ -427,9 +433,10 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		// TODO: update for fSelectionStart == -1
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fSelectionTypeRoot.getJavaProject();
 		if (javaProject != null)
@@ -452,14 +459,14 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 	}
 
 	private IFile[] getFilesToBeModified(ICompilationUnit[] units) {
-		List result= new ArrayList(units.length + 1);
+		List<IFile> result= new ArrayList<IFile>(units.length + 1);
 		IFile file;
 		for (int i= 0; i < units.length; i++) {
 			file= getFile(units[i]);
 			if (file != null)
 				result.add(file);
 		}
-		return (IFile[])result.toArray(new IFile[result.size()]);
+		return result.toArray(new IFile[result.size()]);
 	}
 
 	private IFile getFile(ICompilationUnit unit) {
@@ -530,12 +537,12 @@ public class ReplaceInvocationsRefactoring extends Refactoring {
 		for (int i= 0; i < invocations.length; i++) {
 			removeNestedCalls(status, unit, parents, invocations, i);
 		}
-		List result= new ArrayList();
+		List<ASTNode> result= new ArrayList<ASTNode>();
 		for (int i= 0; i < invocations.length; i++) {
 			if (invocations[i] != null)
 				result.add(invocations[i]);
 		}
-		return (ASTNode[])result.toArray(new ASTNode[result.size()]);
+		return result.toArray(new ASTNode[result.size()]);
 	}
 
 	private void removeNestedCalls(RefactoringStatus status, ICompilationUnit unit, ASTNode[] parents, ASTNode[] invocations, int index) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java
index 79bbd37..6fb18b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,12 +44,12 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 /* package */ class SnippetFinder extends GenericVisitor {
 
 	public static class Match {
-		private List fNodes;
-		private Map fLocalMappings;
+		private List<ASTNode> fNodes;
+		private Map<IVariableBinding, SimpleName> fLocalMappings;
 
 		public Match() {
-			fNodes= new ArrayList(10);
-			fLocalMappings= new HashMap();
+			fNodes= new ArrayList<ASTNode>(10);
+			fLocalMappings= new HashMap<IVariableBinding, SimpleName>();
 		}
 		public void add(ASTNode node) {
 			fNodes.add(node);
@@ -58,7 +58,7 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 			if (fNodes.size() == 0)
 				return true;
 			ASTNode parent= node.getParent();
-			if(((ASTNode)fNodes.get(0)).getParent() != parent)
+			if(fNodes.get(0).getParent() != parent)
 				return false;
 			// Here we know that we have two elements. In this case the
 			// parent must be a block or a switch statement. Otherwise a
@@ -68,16 +68,16 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 			return nodeType == ASTNode.BLOCK || nodeType == ASTNode.SWITCH_STATEMENT;
 		}
 		public ASTNode[] getNodes() {
-			return (ASTNode[])fNodes.toArray(new ASTNode[fNodes.size()]);
+			return fNodes.toArray(new ASTNode[fNodes.size()]);
 		}
 		public void addLocal(IVariableBinding org, SimpleName local) {
 			fLocalMappings.put(org, local);
 		}
 		public SimpleName getMappedName(IVariableBinding org) {
-			return (SimpleName)fLocalMappings.get(org);
+			return fLocalMappings.get(org);
 		}
 		public IVariableBinding getMappedBinding(IVariableBinding org) {
-			SimpleName name= (SimpleName) fLocalMappings.get(org);
+			SimpleName name= fLocalMappings.get(org);
 			return ASTNodes.getVariableBinding(name);
 		}
 		public boolean isEmpty() {
@@ -91,7 +91,7 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 		 * @return whether the duplicte is the whole method body
 		 */
 		public boolean isMethodBody() {
-			ASTNode first= (ASTNode)fNodes.get(0);
+			ASTNode first= fNodes.get(0);
 			if (first.getParent() == null)
 				return false;
 			ASTNode candidate= first.getParent().getParent();
@@ -101,12 +101,13 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 			return method.getBody().statements().size() == fNodes.size();
 		}
 		public MethodDeclaration getEnclosingMethod() {
-			ASTNode first= (ASTNode)fNodes.get(0);
+			ASTNode first= fNodes.get(0);
 			return (MethodDeclaration)ASTNodes.getParent(first, ASTNode.METHOD_DECLARATION);
 		}
 	}
 
 	private class Matcher extends ASTMatcher {
+		@Override
 		public boolean match(SimpleName candidate, Object s) {
 			if (!(s instanceof SimpleName))
 				return false;
@@ -137,7 +138,7 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 		}
 	}
 
-	private List fResult= new ArrayList(2);
+	private List<Match> fResult= new ArrayList<Match>(2);
 	private Match fMatch;
 	private ASTNode[] fSnippet;
 	private int fIndex;
@@ -155,8 +156,8 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 		Assert.isTrue(start instanceof AbstractTypeDeclaration || start instanceof AnonymousClassDeclaration);
 		SnippetFinder finder= new SnippetFinder(snippet);
 		start.accept(finder);
-		for (Iterator iter = finder.fResult.iterator(); iter.hasNext();) {
-			Match match = (Match)iter.next();
+		for (Iterator<Match> iter = finder.fResult.iterator(); iter.hasNext();) {
+			Match match = iter.next();
 			ASTNode[] nodes= match.getNodes();
 			// doesn't match if the candidate is the left hand side of an
 			// assignment and the snippet consists of a single node.
@@ -165,7 +166,7 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 				iter.remove();
 			}
 		}
-		return (Match[])finder.fResult.toArray(new Match[finder.fResult.size()]);
+		return finder.fResult.toArray(new Match[finder.fResult.size()]);
 	}
 
 	private static boolean isLeftHandSideOfAssignment(ASTNode node) {
@@ -193,39 +194,46 @@ import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 		return false;
 	}
 
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		if (++fTypes > 1)
 			return false;
 		return super.visit(node);
 	}
 
+	@Override
 	public void endVisit(TypeDeclaration node) {
 		--fTypes;
 		super.endVisit(node);
 	}
 
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		if (++fTypes > 1)
 			return false;
 		return super.visit(node);
 	}
 
+	@Override
 	public void endVisit(EnumDeclaration node) {
 		--fTypes;
 		super.endVisit(node);
 	}
 
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		if (++fTypes > 1)
 			return false;
 		return super.visit(node);
 	}
 
+	@Override
 	public void endVisit(AnnotationTypeDeclaration node) {
 		--fTypes;
 		super.endVisit(node);
 	}
 
+	@Override
 	protected boolean visitNode(ASTNode node) {
 		if (matches(node)) {
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceAnalyzer.java
index c5da1d9..c8fb26e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
 import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
 import org.eclipse.jdt.core.dom.SuperMethodInvocation;
@@ -69,10 +70,10 @@ class SourceAnalyzer  {
 
 	public static class NameData {
 		private String fName;
-		private List fReferences;
+		private List<SimpleName> fReferences;
 		public NameData(String n) {
 			fName= n;
-			fReferences= new ArrayList(2);
+			fReferences= new ArrayList<SimpleName>(2);
 		}
 		public String getName() {
 			return fName;
@@ -80,7 +81,7 @@ class SourceAnalyzer  {
 		public void addReference(SimpleName ref) {
 			fReferences.add(ref);
 		}
-		public List references() {
+		public List<SimpleName> references() {
 			return fReferences;
 		}
 	}
@@ -89,24 +90,30 @@ class SourceAnalyzer  {
 		public RefactoringStatus status= new RefactoringStatus();
 		private ASTNode fLastNode= getLastNode();
 		private IMethodBinding fBinding= getBinding();
+		@Override
 		public boolean visit(ReturnStatement node) {
 			if (node != fLastNode) {
 				fInterruptedExecutionFlow= true;
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(EnumDeclaration node) {
 			return false;
 		}
+		@Override
 		public boolean visit(AnnotationTypeDeclaration node) {
 			return false;
 		}
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			return false;
 		}
+		@Override
 		public boolean visit(AnonymousClassDeclaration node) {
 			return false;
 		}
+		@Override
 		public boolean visit(MethodInvocation node) {
 			IMethodBinding methodBinding= node.resolveMethodBinding();
 			if (methodBinding != null)
@@ -117,6 +124,7 @@ class SourceAnalyzer  {
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding= node.resolveBinding();
 			if (binding == null && !status.hasFatalError()) {
@@ -130,6 +138,7 @@ class SourceAnalyzer  {
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(ThisExpression node) {
 			if (node.getQualifier() != null) {
 				status.addFatalError(
@@ -140,10 +149,10 @@ class SourceAnalyzer  {
 			return true;
 		}
 		private ASTNode getLastNode() {
-			List statements= fDeclaration.getBody().statements();
+			List<Statement> statements= fDeclaration.getBody().statements();
 			if (statements.size() == 0)
 				return null;
-			return (ASTNode)statements.get(statements.size() - 1);
+			return statements.get(statements.size() - 1);
 		}
 		private IMethodBinding getBinding() {
 			IMethodBinding result= fDeclaration.resolveBinding();
@@ -155,21 +164,27 @@ class SourceAnalyzer  {
 
 	private class UpdateCollector extends ASTVisitor {
 		private int fTypeCounter;
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			return visitType(node);
 		}
+		@Override
 		public void endVisit(TypeDeclaration node) {
 			fTypeCounter--;
 		}
+		@Override
 		public boolean visit(EnumDeclaration node) {
 			return visitType(node);
 		}
+		@Override
 		public void endVisit(EnumDeclaration node) {
 			fTypeCounter--;
 		}
+		@Override
 		public boolean visit(AnnotationTypeDeclaration node) {
 			return visitType(node);
 		}
+		@Override
 		public void endVisit(AnnotationTypeDeclaration node) {
 			fTypeCounter--;
 		}
@@ -179,29 +194,34 @@ class SourceAnalyzer  {
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(AnonymousClassDeclaration node) {
 			fTypeCounter++;
 			return true;
 		}
+		@Override
 		public void endVisit(AnonymousClassDeclaration node) {
 			fTypeCounter--;
 		}
+		@Override
 		public boolean visit(FieldAccess node) {
 			// only visit the expression and not the simple name
 			node.getExpression().accept(this);
 			addReferencesToName(node.getName());
 			return false;
 		}
+		@Override
 		public boolean visit(MethodDeclaration node) {
 			if (node.isConstructor()) {
 				AbstractTypeDeclaration decl= (AbstractTypeDeclaration) ASTNodes.getParent(node, AbstractTypeDeclaration.class);
-				NameData name= (NameData)fNames.get(decl.getName().resolveBinding());
+				NameData name= fNames.get(decl.getName().resolveBinding());
 				if (name != null) {
 					name.addReference(node.getName());
 				}
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(MethodInvocation node) {
 			if (fTypeCounter == 0) {
 				Expression receiver= node.getExpression();
@@ -211,18 +231,21 @@ class SourceAnalyzer  {
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(SuperMethodInvocation node) {
 			if (fTypeCounter == 0) {
 				fHasSuperMethodInvocation= true;
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(SuperConstructorInvocation node) {
 			if (fTypeCounter == 0) {
 				fHasSuperMethodInvocation= true;
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(ClassInstanceCreation node) {
 			if (fTypeCounter == 0) {
 				Expression receiver= node.getExpression();
@@ -233,16 +256,19 @@ class SourceAnalyzer  {
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(SingleVariableDeclaration node) {
 			if (fTypeCounter == 0)
 				addNameReference(node.getName());
 			return true;
 		}
+		@Override
 		public boolean visit(VariableDeclarationFragment node) {
 			if (fTypeCounter == 0)
 				addNameReference(node.getName());
 			return true;
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			addReferencesToName(node);
 			IBinding binding= node.resolveBinding();
@@ -264,7 +290,7 @@ class SourceAnalyzer  {
 					}
 				} else if (!vb.isField()) {
 					// we have a local. Check if it is a parameter.
-					ParameterData data= (ParameterData)fParameters.get(binding);
+					ParameterData data= fParameters.get(binding);
 					if (data != null) {
 						ASTNode parent= node.getParent();
 						if (parent instanceof Expression) {
@@ -278,6 +304,7 @@ class SourceAnalyzer  {
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(ThisExpression node) {
 			if (fTypeCounter == 0) {
 				fImplicitReceivers.add(node);
@@ -286,11 +313,11 @@ class SourceAnalyzer  {
 		}
 		private void addReferencesToName(SimpleName node) {
 			IBinding binding= node.resolveBinding();
-			ParameterData data= (ParameterData)fParameters.get(binding);
+			ParameterData data= fParameters.get(binding);
 			if (data != null)
 				data.addReference(node);
 
-			NameData name= (NameData)fNames.get(binding);
+			NameData name= fNames.get(binding);
 			if (name != null)
 				name.addReference(node);
 		}
@@ -298,9 +325,9 @@ class SourceAnalyzer  {
 			fNames.put(name.resolveBinding(), new NameData(name.getIdentifier()));
 		}
 		private void addTypeVariableReference(ITypeBinding variable, SimpleName name) {
-			NameData data= (NameData)fTypeParameterMapping.get(variable);
+			NameData data= fTypeParameterMapping.get(variable);
 			if (data == null) {
-				data= (NameData)fMethodTypeParameterMapping.get(variable);
+				data= fMethodTypeParameterMapping.get(variable);
 			}
 			data.addReference(name);
 		}
@@ -314,6 +341,7 @@ class SourceAnalyzer  {
 		public VarargAnalyzer(IBinding parameter) {
 			fParameter= parameter;
 		}
+		@Override
 		public boolean visit(ArrayAccess node) {
 			Expression array= node.getArray();
 			if (array instanceof SimpleName && fParameter.isEqualTo(((SimpleName)array).resolveBinding())) {
@@ -325,21 +353,21 @@ class SourceAnalyzer  {
 
 	private ITypeRoot fTypeRoot;
 	private MethodDeclaration fDeclaration;
-	private Map fParameters;
-	private Map fNames;
-	private List fImplicitReceivers;
+	private Map<IVariableBinding, ParameterData> fParameters;
+	private Map<IBinding, NameData> fNames;
+	private List<Expression> fImplicitReceivers;
 
 	private boolean fArrayAccess;
 	private boolean fHasSuperMethodInvocation;
 
-	private List/*<Name>*/ fTypesToImport;
-	private List/*<Name>*/ fStaticsToImport;
+	private List<SimpleName> fTypesToImport;
+	private List<SimpleName> fStaticsToImport;
 
-	private List/*<NameData>*/ fTypeParameterReferences;
-	private Map/*<ITypeBinding, NameData>*/ fTypeParameterMapping;
+	private List<NameData> fTypeParameterReferences;
+	private Map<ITypeBinding, NameData> fTypeParameterMapping;
 
-	private List/*<NameData>*/ fMethodTypeParameterReferences;
-	private Map/*<ITypeBinding, NameData>*/ fMethodTypeParameterMapping;
+	private List<NameData> fMethodTypeParameterReferences;
+	private Map<ITypeBinding, NameData> fMethodTypeParameterMapping;
 
 	private boolean fInterruptedExecutionFlow;
 
@@ -386,10 +414,10 @@ class SourceAnalyzer  {
 		fDeclaration.accept(analyzer);
 		result.merge(analyzer.status);
 		if (!result.hasFatalError()) {
-			List parameters= fDeclaration.parameters();
-			fParameters= new HashMap(parameters.size() * 2);
-			for (Iterator iter= parameters.iterator(); iter.hasNext();) {
-				SingleVariableDeclaration element= (SingleVariableDeclaration) iter.next();
+			List<SingleVariableDeclaration> parameters= fDeclaration.parameters();
+			fParameters= new HashMap<IVariableBinding, ParameterData>(parameters.size() * 2);
+			for (Iterator<SingleVariableDeclaration> iter= parameters.iterator(); iter.hasNext();) {
+				SingleVariableDeclaration element= iter.next();
 				IVariableBinding binding= element.resolveBinding();
 				if (binding == null) {
 					result.addFatalError(
@@ -397,13 +425,13 @@ class SourceAnalyzer  {
 						JavaStatusContext.create(fTypeRoot, fDeclaration));
 					return result;
 				}
-				fParameters.put(binding, element.getProperty(ParameterData.PROPERTY));
+				fParameters.put(binding, (ParameterData) element.getProperty(ParameterData.PROPERTY));
 			}
-			fNames= new HashMap();
-			fImplicitReceivers= new ArrayList(2);
+			fNames= new HashMap<IBinding, NameData>();
+			fImplicitReceivers= new ArrayList<Expression>(2);
 
-			fTypeParameterReferences= new ArrayList(0);
-			fTypeParameterMapping= new HashMap();
+			fTypeParameterReferences= new ArrayList<NameData>(0);
+			fTypeParameterMapping= new HashMap<ITypeBinding, NameData>();
 			ITypeBinding declaringType= declarationBinding.getDeclaringClass();
 			if (declaringType == null) {
 				result.addFatalError(
@@ -418,8 +446,8 @@ class SourceAnalyzer  {
 				fTypeParameterMapping.put(typeParameters[i], data);
 			}
 
-			fMethodTypeParameterReferences= new ArrayList(0);
-			fMethodTypeParameterMapping= new HashMap();
+			fMethodTypeParameterReferences= new ArrayList<NameData>(0);
+			fMethodTypeParameterMapping= new HashMap<ITypeBinding, NameData>();
 			IMethodBinding method= declarationBinding;
 			typeParameters= method.getTypeParameters();
 			for (int i= 0; i < typeParameters.length; i++) {
@@ -430,9 +458,9 @@ class SourceAnalyzer  {
 
 		}
 		if (fDeclaration.isVarargs()) {
-			List parameters= fDeclaration.parameters();
+			List<SingleVariableDeclaration> parameters= fDeclaration.parameters();
 			VarargAnalyzer vAnalyzer= new VarargAnalyzer(
-				((SingleVariableDeclaration)parameters.get(parameters.size() - 1)).getName().resolveBinding());
+				parameters.get(parameters.size() - 1).getName().resolveBinding());
 			fDeclaration.getBody().accept(vAnalyzer);
 		}
 		return result;
@@ -442,8 +470,8 @@ class SourceAnalyzer  {
 		Block body= fDeclaration.getBody();
 		// first collect the static imports. This is necessary to not mark
 		// static imported fields and methods as implicit visible.
-		fTypesToImport= new ArrayList();
-		fStaticsToImport= new ArrayList();
+		fTypesToImport= new ArrayList<SimpleName>();
+		fStaticsToImport= new ArrayList<SimpleName>();
 		ImportReferencesCollector.collect(body, fTypeRoot.getJavaProject(), null, fTypesToImport, fStaticsToImport);
 
 		// Now collect implicit references and name references
@@ -456,35 +484,35 @@ class SourceAnalyzer  {
 		InOutFlowAnalyzer flowAnalyzer= new InOutFlowAnalyzer(context);
 		FlowInfo info= flowAnalyzer.perform(getStatements());
 
-		for (Iterator iter= fDeclaration.parameters().iterator(); iter.hasNext();) {
-			SingleVariableDeclaration element= (SingleVariableDeclaration) iter.next();
+		for (Iterator<SingleVariableDeclaration> iter= fDeclaration.parameters().iterator(); iter.hasNext();) {
+			SingleVariableDeclaration element= iter.next();
 			IVariableBinding binding= element.resolveBinding();
 			ParameterData data= (ParameterData)element.getProperty(ParameterData.PROPERTY);
 			data.setAccessMode(info.getAccessMode(context, binding));
 		}
 	}
 
-	public Collection getUsedNames() {
+	public Collection<NameData> getUsedNames() {
 		return fNames.values();
 	}
 
-	public List getImplicitReceivers() {
+	public List<Expression> getImplicitReceivers() {
 		return fImplicitReceivers;
 	}
 
-	public List getTypesToImport() {
+	public List<SimpleName> getTypesToImport() {
 		return fTypesToImport;
 	}
 
-	public List getStaticsToImport() {
+	public List<SimpleName> getStaticsToImport() {
 		return fStaticsToImport;
 	}
 
-	public List getTypeParameterReferences() {
+	public List<NameData> getTypeParameterReferences() {
 		return fTypeParameterReferences;
 	}
 
-	public List getMethodTypeParameterReferences() {
+	public List<NameData> getMethodTypeParameterReferences() {
 		return fMethodTypeParameterReferences;
 	}
 
@@ -497,8 +525,8 @@ class SourceAnalyzer  {
 	}
 
 	private ASTNode[] getStatements() {
-		List statements= fDeclaration.getBody().statements();
-		return (ASTNode[]) statements.toArray(new ASTNode[statements.size()]);
+		List<Statement> statements= fDeclaration.getBody().statements();
+		return statements.toArray(new ASTNode[statements.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java
index e09970a..114d29f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,9 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.core.filebuffers.ITextFileBuffer;
 
 import org.eclipse.text.edits.MalformedTreeException;
 import org.eclipse.text.edits.MultiTextEdit;
@@ -42,9 +45,11 @@ import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 
 import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.Block;
+import org.eclipse.jdt.core.dom.CastExpression;
 import org.eclipse.jdt.core.dom.ChildPropertyDescriptor;
 import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -64,10 +69,12 @@ import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Statement;
+import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
 import org.eclipse.jdt.core.dom.ThisExpression;
 import org.eclipse.jdt.core.dom.WhileStatement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
@@ -78,7 +85,9 @@ import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRe
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
 import org.eclipse.jdt.internal.corext.dom.CodeScopeBuilder;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.refactoring.code.SourceAnalyzer.NameData;
+import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringFileBuffers;
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
 import org.eclipse.jdt.internal.corext.util.Strings;
 
@@ -96,7 +105,7 @@ public class SourceProvider {
 	private SourceAnalyzer fAnalyzer;
 	private boolean fMustEvalReturnedExpression;
 	private boolean fReturnValueNeedsLocalVariable;
-	private List fReturnExpressions;
+	private List<Expression> fReturnExpressions;
 	private IDocument fSource;
 
 	private static final int EXPRESSION_MODE= 1;
@@ -106,6 +115,7 @@ public class SourceProvider {
 
 
 	private class ReturnAnalyzer extends ASTVisitor {
+		@Override
 		public boolean visit(ReturnStatement node) {
 			Expression expression= node.getExpression();
 			if (!(ASTNodes.isLiteral(expression) || expression instanceof Name)) {
@@ -123,22 +133,22 @@ public class SourceProvider {
 		super();
 		fTypeRoot= typeRoot;
 		fDeclaration= declaration;
-		List parameters= fDeclaration.parameters();
-		for (Iterator iter= parameters.iterator(); iter.hasNext();) {
-			SingleVariableDeclaration element= (SingleVariableDeclaration)iter.next();
+		List<SingleVariableDeclaration> parameters= fDeclaration.parameters();
+		for (Iterator<SingleVariableDeclaration> iter= parameters.iterator(); iter.hasNext();) {
+			SingleVariableDeclaration element= iter.next();
 			ParameterData data= new ParameterData(element);
 			element.setProperty(ParameterData.PROPERTY, data);
 		}
 		fAnalyzer= new SourceAnalyzer(fTypeRoot, fDeclaration);
 		fReturnValueNeedsLocalVariable= true;
-		fReturnExpressions= new ArrayList();
+		fReturnExpressions= new ArrayList<Expression>();
 	}
 
 	/**
 	 * TODO: unit's source does not match contents of source document and declaration node.
 	 * @param typeRoot the type root
-	 * @param source document contining the content of the type root
-	 * @param declaration
+	 * @param source document containing the content of the type root
+	 * @param declaration method declaration node
 	 */
 	public SourceProvider(ITypeRoot typeRoot, IDocument source, MethodDeclaration declaration) {
 		this(typeRoot, declaration);
@@ -174,6 +184,7 @@ public class SourceProvider {
 		public boolean getResult() {
 			return fResult;
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			if(!fResult) {
 				fResult= Bindings.equals(fBinding, node.resolveBinding());
@@ -222,25 +233,25 @@ public class SourceProvider {
 	}
 
 	public boolean isSimpleFunction() {
-		List statements= fDeclaration.getBody().statements();
+		List<Statement> statements= fDeclaration.getBody().statements();
 		if (statements.size() != 1)
 			return false;
 		return statements.get(0) instanceof ReturnStatement;
 	}
 
 	public boolean isLastStatementReturn() {
-		List statements= fDeclaration.getBody().statements();
+		List<Statement> statements= fDeclaration.getBody().statements();
 		if (statements.size() == 0)
 			return false;
 		return statements.get(statements.size() - 1) instanceof ReturnStatement;
 	}
 
 	public boolean isDangligIf() {
-		List statements= fDeclaration.getBody().statements();
+		List<Statement> statements= fDeclaration.getBody().statements();
 		if (statements.size() != 1)
 			return false;
 
-		ASTNode p= (ASTNode) statements.get(0);
+		ASTNode p= statements.get(0);
 
 		while (true) {
 			if (p instanceof IfStatement) {
@@ -283,14 +294,14 @@ public class SourceProvider {
 		return fDeclaration.resolveBinding().getReturnType();
 	}
 
-	public List getReturnExpressions() {
+	public List<Expression> getReturnExpressions() {
 		return fReturnExpressions;
 	}
 
 	public boolean returnTypeMatchesReturnExpressions() {
 		ITypeBinding returnType= getReturnType();
-		for (Iterator iter= fReturnExpressions.iterator(); iter.hasNext();) {
-			Expression expression= (Expression)iter.next();
+		for (Iterator<Expression> iter= fReturnExpressions.iterator(); iter.hasNext();) {
+			Expression expression= iter.next();
 			if (!Bindings.equals(returnType, expression.resolveTypeBinding()))
 				return false;
 		}
@@ -306,10 +317,10 @@ public class SourceProvider {
 		return fTypeRoot;
 	}
 
-	public boolean needsReturnedExpressionParenthesis() {
+	public boolean needsReturnedExpressionParenthesis(ASTNode parent, StructuralPropertyDescriptor locationInParent) {
 		ASTNode last= getLastStatement();
 		if (last instanceof ReturnStatement) {
-			return ASTNodes.needsParentheses(((ReturnStatement)last).getExpression());
+			return NecessaryParenthesesChecker.needsParentheses(((ReturnStatement)last).getExpression(), parent, locationInParent);
 		}
 		return false;
 	}
@@ -340,9 +351,9 @@ public class SourceProvider {
 		return rewriter.rewriteAST(fDocument, fTypeRoot.getJavaProject().getOptions(true));
 	}
 
-	public String[] getCodeBlocks(CallContext context) {
+	public String[] getCodeBlocks(CallContext context, ImportRewrite importRewrite) throws CoreException {
 		final ASTRewrite rewriter= ASTRewrite.create(fDeclaration.getAST());
-		replaceParameterWithExpression(rewriter, context.arguments);
+		replaceParameterWithExpression(rewriter, context, importRewrite);
 		updateImplicitReceivers(rewriter, context);
 		makeNamesUnique(rewriter, context.scope);
 		updateTypeReferences(rewriter, context);
@@ -350,7 +361,7 @@ public class SourceProvider {
 		updateTypeVariables(rewriter, context);
 		updateMethodTypeVariable(rewriter, context);
 
-		List ranges= null;
+		List<IRegion> ranges= null;
 		if (hasReturnValue()) {
 			if (context.callMode == ASTNode.RETURN_STATEMENT) {
 				ranges= getStatementRanges();
@@ -370,14 +381,14 @@ public class SourceProvider {
 		int size= ranges.size();
 		RangeMarker[] markers= new RangeMarker[size];
 		for (int i= 0; i < markers.length; i++) {
-			IRegion range= (IRegion)ranges.get(i);
+			IRegion range= ranges.get(i);
 			markers[i]= new RangeMarker(range.getOffset(), range.getLength());
 		}
 		int split;
 		if (size <= 1) {
 			split= Integer.MAX_VALUE;
 		} else {
-			IRegion region= (IRegion)ranges.get(0);
+			IRegion region= ranges.get(0);
 			split= region.getOffset() + region.getLength();
 		}
 		TextEdit[] edits= dummy.removeChildren();
@@ -405,28 +416,66 @@ public class SourceProvider {
 		return new String[] {};
 	}
 
-	private void replaceParameterWithExpression(ASTRewrite rewriter, String[] expressions) {
-		for (int i= 0; i < expressions.length; i++) {
-			String expression= expressions[i];
-			ParameterData parameter= getParameterData(i);
-			List references= parameter.references();
-			for (Iterator iter= references.iterator(); iter.hasNext();) {
-				ASTNode element= (ASTNode) iter.next();
-				ASTNode newNode= rewriter.createStringPlaceholder(expression, element.getNodeType());
-				rewriter.replace(element, newNode, null);
+	private Expression createParenthesizedExpression(Expression newExpression, AST ast) {
+		ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
+		parenthesized.setExpression(newExpression);
+		return parenthesized;
+	}
+
+	private void replaceParameterWithExpression(ASTRewrite rewriter, CallContext context, ImportRewrite importRewrite) throws CoreException {
+		Expression[] arguments= context.arguments;
+		try {
+			ITextFileBuffer buffer= RefactoringFileBuffers.acquire(context.compilationUnit);
+			for (int i= 0; i < arguments.length; i++) {
+				Expression expression= arguments[i];
+				String expressionString= null;
+				if (expression instanceof SimpleName) {
+					expressionString= ((SimpleName)expression).getIdentifier();
+				} else {
+					try {
+						expressionString= buffer.getDocument().get(expression.getStartPosition(), expression.getLength());
+					} catch (BadLocationException exception) {
+						JavaPlugin.log(exception);
+						continue;
+					}
+				}
+				ParameterData parameter= getParameterData(i);
+				List<SimpleName> references= parameter.references();
+				for (Iterator<SimpleName> iter= references.iterator(); iter.hasNext();) {
+					ASTNode element= iter.next();
+					Expression newExpression= (Expression)rewriter.createStringPlaceholder(expressionString, expression.getNodeType());
+					AST ast= rewriter.getAST();
+					ITypeBinding explicitCast= ASTNodes.getExplicitCast(expression, (Expression)element);
+					if (explicitCast != null) {
+						CastExpression cast= ast.newCastExpression();
+						if (NecessaryParenthesesChecker.needsParentheses(expression, cast, CastExpression.EXPRESSION_PROPERTY)) {
+							newExpression= createParenthesizedExpression(newExpression, ast);
+						}
+						cast.setExpression(newExpression);
+						ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(expression, importRewrite);
+						cast.setType(importRewrite.addImport(explicitCast, ast, importRewriteContext));
+						expression= newExpression= cast;
+					}
+					if (NecessaryParenthesesChecker.needsParentheses(expression, element.getParent(), element.getLocationInParent())) {
+						newExpression= createParenthesizedExpression(newExpression, ast);
+					}
+					rewriter.replace(element, newExpression, null);
+				}
 			}
+		} finally {
+			RefactoringFileBuffers.release(context.compilationUnit);
 		}
 	}
 
 	private void makeNamesUnique(ASTRewrite rewriter, CodeScopeBuilder.Scope scope) {
-		Collection usedCalleeNames= fAnalyzer.getUsedNames();
-		for (Iterator iter= usedCalleeNames.iterator(); iter.hasNext();) {
-			SourceAnalyzer.NameData nd= (SourceAnalyzer.NameData) iter.next();
+		Collection<NameData> usedCalleeNames= fAnalyzer.getUsedNames();
+		for (Iterator<NameData> iter= usedCalleeNames.iterator(); iter.hasNext();) {
+			SourceAnalyzer.NameData nd= iter.next();
 			if (scope.isInUse(nd.getName())) {
 				String newName= scope.createName(nd.getName(), true);
-				List references= nd.references();
-				for (Iterator refs= references.iterator(); refs.hasNext();) {
-					SimpleName element= (SimpleName) refs.next();
+				List<SimpleName> references= nd.references();
+				for (Iterator<SimpleName> refs= references.iterator(); refs.hasNext();) {
+					SimpleName element= refs.next();
 					ASTNode newNode= rewriter.createStringPlaceholder(newName, ASTNode.METHOD_INVOCATION);
 					rewriter.replace(element, newNode, null);
 				}
@@ -437,9 +486,9 @@ public class SourceProvider {
 	private void updateImplicitReceivers(ASTRewrite rewriter, CallContext context) {
 		if (context.receiver == null)
 			return;
-		List implicitReceivers= fAnalyzer.getImplicitReceivers();
-		for (Iterator iter= implicitReceivers.iterator(); iter.hasNext();) {
-			ASTNode node= (ASTNode)iter.next();
+		List<Expression> implicitReceivers= fAnalyzer.getImplicitReceivers();
+		for (Iterator<Expression> iter= implicitReceivers.iterator(); iter.hasNext();) {
+			ASTNode node= iter.next();
 			ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(node, context.importer);
 			if (node instanceof MethodInvocation) {
 				final MethodInvocation inv= (MethodInvocation)node;
@@ -470,8 +519,8 @@ public class SourceProvider {
 
 	private void updateTypeReferences(ASTRewrite rewriter, CallContext context) {
 		ImportRewrite importer= context.importer;
-		for (Iterator iter= fAnalyzer.getTypesToImport().iterator(); iter.hasNext();) {
-			Name element= (Name)iter.next();
+		for (Iterator<SimpleName> iter= fAnalyzer.getTypesToImport().iterator(); iter.hasNext();) {
+			Name element= iter.next();
 			ITypeBinding binding= ASTNodes.getTypeBinding(element);
 			if (binding != null && !binding.isLocal()) {
 				// We have collected names not types. So we have to import
@@ -491,8 +540,8 @@ public class SourceProvider {
 
 	private void updateStaticReferences(ASTRewrite rewriter, CallContext context) {
 		ImportRewrite importer= context.importer;
-		for (Iterator iter= fAnalyzer.getStaticsToImport().iterator(); iter.hasNext();) {
-			Name element= (Name)iter.next();
+		for (Iterator<SimpleName> iter= fAnalyzer.getStaticsToImport().iterator(); iter.hasNext();) {
+			Name element= iter.next();
 			IBinding binding= element.resolveBinding();
 			if (binding != null) {
 				String s= importer.addStaticImport(binding);
@@ -546,32 +595,32 @@ public class SourceProvider {
 		rewriteReferences(rewriter, method.getTypeArguments(), fAnalyzer.getMethodTypeParameterReferences());
 	}
 
-	private void rewriteReferences(ASTRewrite rewriter, ITypeBinding[] typeArguments, List typeParameterReferences) {
+	private void rewriteReferences(ASTRewrite rewriter, ITypeBinding[] typeArguments, List<NameData> typeParameterReferences) {
 		if (typeArguments.length == 0)
 			return;
 		Assert.isTrue(typeArguments.length == typeParameterReferences.size());
 		for (int i= 0; i < typeArguments.length; i++) {
-			SourceAnalyzer.NameData refData= (NameData)typeParameterReferences.get(i);
-			List references= refData.references();
+			SourceAnalyzer.NameData refData= typeParameterReferences.get(i);
+			List<SimpleName> references= refData.references();
 			String newName= typeArguments[i].getName();
-			for (Iterator iter= references.iterator(); iter.hasNext();) {
-				SimpleName name= (SimpleName)iter.next();
+			for (Iterator<SimpleName> iter= references.iterator(); iter.hasNext();) {
+				SimpleName name= iter.next();
 				rewriter.replace(name, rewriter.createStringPlaceholder(newName, ASTNode.SIMPLE_NAME), null);
 			}
 		}
 	}
 
 	private ASTNode getLastStatement() {
-		List statements= fDeclaration.getBody().statements();
+		List<Statement> statements= fDeclaration.getBody().statements();
 		if (statements.isEmpty())
 			return null;
-		return (ASTNode)statements.get(statements.size() - 1);
+		return statements.get(statements.size() - 1);
 	}
 
-	private List getReturnStatementRanges() {
+	private List<IRegion> getReturnStatementRanges() {
 		fMarkerMode= RETURN_STATEMENT_MODE;
-		List result= new ArrayList(1);
-		List statements= fDeclaration.getBody().statements();
+		List<IRegion> result= new ArrayList<IRegion>(1);
+		List<Statement> statements= fDeclaration.getBody().statements();
 		int size= statements.size();
 		if (size <= 1)
 			return result;
@@ -579,10 +628,10 @@ public class SourceProvider {
 		return result;
 	}
 
-	private List getStatementRanges() {
+	private List<IRegion> getStatementRanges() {
 		fMarkerMode= STATEMENT_MODE;
-		List result= new ArrayList(1);
-		List statements= fDeclaration.getBody().statements();
+		List<IRegion> result= new ArrayList<IRegion>(1);
+		List<Statement> statements= fDeclaration.getBody().statements();
 		int size= statements.size();
 		if (size == 0)
 			return result;
@@ -590,10 +639,10 @@ public class SourceProvider {
 		return result;
 	}
 
-	private List getExpressionRanges() {
+	private List<IRegion> getExpressionRanges() {
 		fMarkerMode= EXPRESSION_MODE;
-		List result= new ArrayList(2);
-		List statements= fDeclaration.getBody().statements();
+		List<IRegion> result= new ArrayList<IRegion>(2);
+		List<Statement> statements= fDeclaration.getBody().statements();
 		ReturnStatement rs= null;
 		int size= statements.size();
 		ASTNode node;
@@ -601,7 +650,7 @@ public class SourceProvider {
 			case 0:
 				return result;
 			case 1:
-				node= (ASTNode)statements.get(0);
+				node= statements.get(0);
 				if (node.getNodeType() == ASTNode.RETURN_STATEMENT) {
 					rs= (ReturnStatement)node;
 				} else {
@@ -609,7 +658,7 @@ public class SourceProvider {
 				}
 				break;
 			default: {
-				node= (ASTNode)statements.get(size - 1);
+				node= statements.get(size - 1);
 				if (node.getNodeType() == ASTNode.RETURN_STATEMENT) {
 					result.add(createRange(statements, size - 2));
 					rs= (ReturnStatement)node;
@@ -626,9 +675,9 @@ public class SourceProvider {
 		return result;
 	}
 
-	private IRegion createRange(List statements, int end) {
-		ASTNode first= (ASTNode)statements.get(0);
-		ASTNode last= (ASTNode)statements.get(end);
+	private IRegion createRange(List<Statement> statements, int end) {
+		ASTNode first= statements.get(0);
+		ASTNode last= statements.get(end);
 		return createRange(first, last);
 	}
 
@@ -664,11 +713,11 @@ public class SourceProvider {
 	}
 
 	private boolean isSingleControlStatementWithoutBlock() {
-		List statements= fDeclaration.getBody().statements();
+		List<Statement> statements= fDeclaration.getBody().statements();
 		int size= statements.size();
 		if (size != 1)
 			return false;
-		Statement statement= (Statement) statements.get(size - 1);
+		Statement statement= statements.get(size - 1);
 		int nodeType= statement.getNodeType();
 		if (nodeType == ASTNode.IF_STATEMENT) {
 			IfStatement ifStatement= (IfStatement) statement;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TargetProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TargetProvider.java
index de2e87d..a001cea 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TargetProvider.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TargetProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,7 +33,6 @@ import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.SourceRange;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
@@ -67,6 +66,8 @@ import org.eclipse.jdt.internal.corext.refactoring.base.ReferencesInBinaryContex
 import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
 import org.eclipse.jdt.internal.corext.util.SearchUtils;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 /**
  * A TargetProvider provides all targets that have to be adapted, i.e. all method invocations that should be inlined.
  */
@@ -135,20 +136,26 @@ abstract class TargetProvider {
 		public ErrorTargetProvider(RefactoringStatus status) {
 			fErrorStatus= status;
 		}
+		@Override
 		public RefactoringStatus checkActivation() throws JavaModelException {
 			return fErrorStatus;
 		}
+		@Override
 		public void initialize() {
 		}
+		@Override
 		public ICompilationUnit[] getAffectedCompilationUnits(RefactoringStatus status, ReferencesInBinaryContext binaryRefs, IProgressMonitor pm) throws JavaModelException {
 			return null;
 		}
+		@Override
 		public BodyDeclaration[] getAffectedBodyDeclarations(ICompilationUnit unit, IProgressMonitor pm) {
 			return null;
 		}
+		@Override
 		public ASTNode[] getInvocations(BodyDeclaration declaration, IProgressMonitor pm) {
 			return null;
 		}
+		@Override
 		public int getStatusSeverity() {
 			return 0;
 		}
@@ -165,12 +172,15 @@ abstract class TargetProvider {
 			fCUnit= cu;
 			fInvocation= invocation;
 		}
+		@Override
 		public void initialize() {
 			fIterated= false;
 		}
+		@Override
 		public ICompilationUnit[] getAffectedCompilationUnits(RefactoringStatus status, ReferencesInBinaryContext binaryRefs, IProgressMonitor pm) {
 			return new ICompilationUnit[] { fCUnit };
 		}
+		@Override
 		public BodyDeclaration[] getAffectedBodyDeclarations(ICompilationUnit unit, IProgressMonitor pm) {
 			Assert.isTrue(unit == fCUnit);
 			if (fIterated)
@@ -181,6 +191,7 @@ abstract class TargetProvider {
 			};
 		}
 
+		@Override
 		public ASTNode[] getInvocations(BodyDeclaration declaration, IProgressMonitor pm) {
 			fastDone(pm);
 			if (fIterated)
@@ -188,29 +199,32 @@ abstract class TargetProvider {
 			fIterated= true;
 			return new ASTNode[] { fInvocation };
 		}
+		@Override
 		public RefactoringStatus checkActivation() throws JavaModelException {
 			return new RefactoringStatus();
 		}
+		@Override
 		public int getStatusSeverity() {
 			return RefactoringStatus.FATAL;
 		}
+		@Override
 		public boolean isSingle() {
 			return true;
 		}
 	}
 
 	private static class BodyData {
-		private List fInvocations;
+		private List<ASTNode> fInvocations;
 
 		public BodyData() {
 		}
 		public void addInvocation(ASTNode node) {
 			if (fInvocations == null)
-				fInvocations= new ArrayList(2);
+				fInvocations= new ArrayList<ASTNode>(2);
 			fInvocations.add(node);
 		}
 		public ASTNode[] getInvocations() {
-			return (ASTNode[])fInvocations.toArray(new ASTNode[fInvocations.size()]);
+			return fInvocations.toArray(new ASTNode[fInvocations.size()]);
 		}
 		public boolean hasInvocations() {
 			return fInvocations != null && !fInvocations.isEmpty();
@@ -218,8 +232,8 @@ abstract class TargetProvider {
 	}
 
 	private static class InvocationFinder extends ASTVisitor {
-		Map/*<BodyDeclaration, BodyData>*/ result= new HashMap(2);
-		Stack/*<BodyData>*/ fBodies= new Stack();
+		Map<BodyDeclaration, BodyData> result= new HashMap<BodyDeclaration, BodyData>(2);
+		Stack<BodyData> fBodies= new Stack<BodyData>();
 		BodyData fCurrent;
 		private IMethodBinding fBinding;
 		public InvocationFinder(IMethodBinding binding) {
@@ -227,45 +241,55 @@ abstract class TargetProvider {
 			fBinding= binding.getMethodDeclaration();
 			Assert.isNotNull(fBinding);
 		}
+		@Override
 		public boolean visit(MethodInvocation node) {
-			if (matches(node.getName().resolveBinding()) && fCurrent != null) {
+			if (node.resolveTypeBinding() != null && matches(node.resolveMethodBinding()) && fCurrent != null) {
 				fCurrent.addInvocation(node);
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(SuperMethodInvocation node) {
 			if (matches(node.getName().resolveBinding()) && fCurrent != null) {
 				fCurrent.addInvocation(node);
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(ConstructorInvocation node) {
 			if (matches(node.resolveConstructorBinding()) && fCurrent != null) {
 				fCurrent.addInvocation(node);
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(ClassInstanceCreation node) {
 			if (matches(node.resolveConstructorBinding()) && fCurrent != null) {
 				fCurrent.addInvocation(node);
 			}
 			return true;
 		}
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			return visitType();
 		}
+		@Override
 		public void endVisit(TypeDeclaration node) {
 			endVisitBodyDeclaration();
 		}
+		@Override
 		public boolean visit(EnumDeclaration node) {
 			return visitType();
 		}
+		@Override
 		public void endVisit(EnumDeclaration node) {
 			endVisitBodyDeclaration();
 		}
+		@Override
 		public boolean visit(AnnotationTypeDeclaration node) {
 			return visitType();
 		}
+		@Override
 		public void endVisit(AnnotationTypeDeclaration node) {
 			endVisitBodyDeclaration();
 		}
@@ -280,20 +304,24 @@ abstract class TargetProvider {
 			return true;
 		}
 		protected void endVisitBodyDeclaration() {
-			fCurrent= (BodyData)fBodies.remove(fBodies.size() - 1);
+			fCurrent= fBodies.remove(fBodies.size() - 1);
 		}
+		@Override
 		public boolean visit(FieldDeclaration node) {
 			return visitNonTypeBodyDeclaration();
 		}
+		@Override
 		public void endVisit(FieldDeclaration node) {
 			if (fCurrent.hasInvocations()) {
 				result.put(node, fCurrent);
 			}
 			endVisitBodyDeclaration();
 		}
+		@Override
 		public boolean visit(MethodDeclaration node) {
 			return visitNonTypeBodyDeclaration();
 		}
+		@Override
 		public void endVisit(MethodDeclaration node) {
 			if (fCurrent.hasInvocations()) {
 				result.put(node, fCurrent);
@@ -301,9 +329,11 @@ abstract class TargetProvider {
 			endVisitBodyDeclaration();
 
 		}
+		@Override
 		public boolean visit(Initializer node) {
 			return visitNonTypeBodyDeclaration();
 		}
+		@Override
 		public void endVisit(Initializer node) {
 			if (fCurrent.hasInvocations()) {
 				result.put(node, fCurrent);
@@ -320,13 +350,14 @@ abstract class TargetProvider {
 	private static class LocalTypeTargetProvider extends TargetProvider {
 		private ICompilationUnit fCUnit;
 		private MethodDeclaration fDeclaration;
-		private Map fBodies;
+		private Map<BodyDeclaration, BodyData> fBodies;
 		public LocalTypeTargetProvider(ICompilationUnit unit, MethodDeclaration declaration) {
 			Assert.isNotNull(unit);
 			Assert.isNotNull(declaration);
 			fCUnit= unit;
 			fDeclaration= declaration;
 		}
+		@Override
 		public void initialize() {
 			IMethodBinding methodBinding= fDeclaration.resolveBinding();
 			InvocationFinder finder;
@@ -338,12 +369,14 @@ abstract class TargetProvider {
 				//scope of local class is enclosing block
 				ASTNode block= type.getParent().getParent();
 				finder= new InvocationFinder(methodBinding) {
+					@Override
 					public boolean visit(Block node) {
 						return visitNonTypeBodyDeclaration();
 					}
+					@Override
 					public void endVisit(Block node) {
 						if (fCurrent.hasInvocations()) {
-							result.put(ASTNodes.getParent(node, BodyDeclaration.class), fCurrent);
+							result.put((BodyDeclaration) ASTNodes.getParent(node, BodyDeclaration.class), fCurrent);
 						}
 						endVisitBodyDeclaration();
 					}
@@ -352,29 +385,34 @@ abstract class TargetProvider {
 			}
 			fBodies= finder.result;
 		}
+		@Override
 		public ICompilationUnit[] getAffectedCompilationUnits(RefactoringStatus status, ReferencesInBinaryContext binaryRefs, IProgressMonitor pm) {
 			fastDone(pm);
 			return new ICompilationUnit[] { fCUnit };
 		}
 
+		@Override
 		public BodyDeclaration[] getAffectedBodyDeclarations(ICompilationUnit unit, IProgressMonitor pm) {
 			Assert.isTrue(unit == fCUnit);
-			Set result= fBodies.keySet();
+			Set<BodyDeclaration> result= fBodies.keySet();
 			fastDone(pm);
-			return (BodyDeclaration[])result.toArray(new BodyDeclaration[result.size()]);
+			return result.toArray(new BodyDeclaration[result.size()]);
 		}
 
+		@Override
 		public ASTNode[] getInvocations(BodyDeclaration declaration, IProgressMonitor pm) {
-			BodyData data= (BodyData)fBodies.get(declaration);
+			BodyData data= fBodies.get(declaration);
 			Assert.isNotNull(data);
 			fastDone(pm);
 			return data.getInvocations();
 		}
 
+		@Override
 		public RefactoringStatus checkActivation() throws JavaModelException {
 			return new RefactoringStatus();
 		}
 
+		@Override
 		public int getStatusSeverity() {
 			return RefactoringStatus.ERROR;
 		}
@@ -382,24 +420,27 @@ abstract class TargetProvider {
 
 	private static class MemberTypeTargetProvider extends TargetProvider {
 		private final IMethodBinding fMethodBinding;
-		private Map fCurrentBodies;
+		private Map<BodyDeclaration, BodyData> fCurrentBodies;
 		public MemberTypeTargetProvider(IMethodBinding methodBinding) {
 			Assert.isNotNull(methodBinding);
 			fMethodBinding= methodBinding;
 		}
+		@Override
 		public void initialize() {
 			// do nothing.
 		}
 
+		@Override
 		public ICompilationUnit[] getAffectedCompilationUnits(final RefactoringStatus status, ReferencesInBinaryContext binaryRefs, IProgressMonitor pm) throws CoreException {
 			IMethod method= (IMethod)fMethodBinding.getJavaElement();
 			Assert.isTrue(method != null);
 
 			SearchPattern pattern= SearchPattern.createPattern(method, IJavaSearchConstants.REFERENCES, SearchUtils.GENERICS_AGNOSTIC_MATCH_RULE);
 			IJavaSearchScope scope= RefactoringScopeFactory.create(method, true, false);
-			final HashSet affectedCompilationUnits= new HashSet();
+			final HashSet<ICompilationUnit> affectedCompilationUnits= new HashSet<ICompilationUnit>();
 			CollectingSearchRequestor requestor= new CollectingSearchRequestor(binaryRefs) {
 				private ICompilationUnit fLastCU;
+				@Override
 				public void acceptSearchMatch(SearchMatch match) throws CoreException {
 					if (filterMatch(match))
 						return;
@@ -423,30 +464,34 @@ abstract class TargetProvider {
 				}
 			};
 			new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(), scope, requestor, new SubProgressMonitor(pm, 1));
-			return (ICompilationUnit[]) affectedCompilationUnits.toArray(new ICompilationUnit[affectedCompilationUnits.size()]);
+			return affectedCompilationUnits.toArray(new ICompilationUnit[affectedCompilationUnits.size()]);
 		}
 
+		@Override
 		public BodyDeclaration[] getAffectedBodyDeclarations(ICompilationUnit unit, IProgressMonitor pm) {
-			ASTNode root= new RefactoringASTParser(AST.JLS3).parse(unit, true);
+			ASTNode root= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(unit, true);
 			InvocationFinder finder= new InvocationFinder(fMethodBinding);
 			root.accept(finder);
 			fCurrentBodies= finder.result;
-			Set result= fCurrentBodies.keySet();
+			Set<BodyDeclaration> result= fCurrentBodies.keySet();
 			fastDone(pm);
-			return (BodyDeclaration[])result.toArray(new BodyDeclaration[result.size()]);
+			return result.toArray(new BodyDeclaration[result.size()]);
 		}
 
+		@Override
 		public ASTNode[] getInvocations(BodyDeclaration declaration, IProgressMonitor pm) {
-			BodyData data= (BodyData)fCurrentBodies.get(declaration);
+			BodyData data= fCurrentBodies.get(declaration);
 			Assert.isNotNull(data);
 			fastDone(pm);
 			return data.getInvocations();
 		}
 
+		@Override
 		public RefactoringStatus checkActivation() throws JavaModelException {
 			return new RefactoringStatus();
 		}
 
+		@Override
 		public int getStatusSeverity() {
 			return RefactoringStatus.ERROR;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TempAssignmentFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TempAssignmentFinder.java
index b66982e..9328b95 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TempAssignmentFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/TempAssignmentFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ public class TempAssignmentFinder extends ASTVisitor{
 
 	//-- visit methods
 
+	@Override
 	public boolean visit(Assignment assignment) {
 		if (! isAssignmentToTemp(assignment))
 			return true;
@@ -61,6 +62,7 @@ public class TempAssignmentFinder extends ASTVisitor{
 		return false;
 	}
 
+	@Override
 	public boolean visit(PostfixExpression postfixExpression) {
 		if (postfixExpression.getOperand() == null)
 			return true;
@@ -74,6 +76,7 @@ public class TempAssignmentFinder extends ASTVisitor{
 		return false;
 	}
 
+	@Override
 	public boolean visit(PrefixExpression prefixExpression) {
 		if (prefixExpression.getOperand() == null)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/BranchFlowInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/BranchFlowInfo.java
index 2ba15ba..90e559c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/BranchFlowInfo.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/BranchFlowInfo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@ class BranchFlowInfo extends FlowInfo {
 
 	public BranchFlowInfo(SimpleName label, FlowContext context) {
 		super(NO_RETURN);
-		fBranches= new HashSet(2);
+		fBranches= new HashSet<String>(2);
 		fBranches.add(makeString(label));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java
index 09efd56..73fbe7d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -117,8 +117,8 @@ abstract class FlowAnalyzer extends GenericVisitor {
 
 	static protected class SwitchData {
 		private boolean fHasDefaultCase;
-		private List fRanges= new ArrayList(4);
-		private List fInfos= new ArrayList(4);
+		private List<IRegion> fRanges= new ArrayList<IRegion>(4);
+		private List<FlowInfo> fInfos= new ArrayList<FlowInfo>(4);
 		public void setHasDefaultCase() {
 			fHasDefaultCase= true;
 		}
@@ -130,17 +130,17 @@ abstract class FlowAnalyzer extends GenericVisitor {
 			fInfos.add(info);
 		}
 		public IRegion[] getRanges() {
-			return (IRegion[]) fRanges.toArray(new IRegion[fRanges.size()]);
+			return fRanges.toArray(new IRegion[fRanges.size()]);
 		}
 		public FlowInfo[] getInfos() {
-			return (FlowInfo[]) fInfos.toArray(new FlowInfo[fInfos.size()]);
+			return fInfos.toArray(new FlowInfo[fInfos.size()]);
 		}
 		public FlowInfo getInfo(int index) {
-			return (FlowInfo)fInfos.get(index);
+			return fInfos.get(index);
 		}
 	}
 
-	private HashMap fData = new HashMap(100);
+	private HashMap<ASTNode, FlowInfo> fData = new HashMap<ASTNode, FlowInfo>(100);
 	/* package */ FlowContext fFlowContext= null;
 
 	public FlowAnalyzer(FlowContext context) {
@@ -155,6 +155,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		return !traverseNode(node);
 	}
 
+	@Override
 	protected final boolean visitNode(ASTNode node) {
 		return traverseNode(node);
 	}
@@ -224,7 +225,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 	//---- Helpers to access flow analysis objects ----------------------------------------
 
 	protected FlowInfo getFlowInfo(ASTNode node) {
-		return (FlowInfo)fData.remove(node);
+		return fData.remove(node);
 	}
 
 	protected void setFlowInfo(ASTNode node, FlowInfo info) {
@@ -238,12 +239,12 @@ abstract class FlowAnalyzer extends GenericVisitor {
 	}
 
 	protected FlowInfo accessFlowInfo(ASTNode node) {
-		return (FlowInfo)fData.get(node);
+		return fData.get(node);
 	}
 
 	//---- Helpers to process sequential flow infos -------------------------------------
 
-	protected GenericSequentialFlowInfo processSequential(ASTNode parent, List nodes) {
+	protected GenericSequentialFlowInfo processSequential(ASTNode parent, List<? extends ASTNode> nodes) {
 		GenericSequentialFlowInfo result= createSequential(parent);
 		process(result, nodes);
 		return result;
@@ -271,7 +272,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		return result;
 	}
 
-	protected GenericSequentialFlowInfo createSequential(List nodes) {
+	protected GenericSequentialFlowInfo createSequential(List<? extends ASTNode> nodes) {
 		GenericSequentialFlowInfo result= createSequential();
 		process(result, nodes);
 		return result;
@@ -279,11 +280,11 @@ abstract class FlowAnalyzer extends GenericVisitor {
 
 	//---- Generic merge methods --------------------------------------------------------
 
-	protected void process(GenericSequentialFlowInfo info, List nodes) {
+	protected void process(GenericSequentialFlowInfo info, List<? extends ASTNode> nodes) {
 		if (nodes == null)
 			return;
-		for (Iterator iter= nodes.iterator(); iter.hasNext();) {
-			info.merge(getFlowInfo((ASTNode)iter.next()), fFlowContext);
+		for (Iterator<? extends ASTNode> iter= nodes.iterator(); iter.hasNext();) {
+			info.merge(getFlowInfo(iter.next()), fFlowContext);
 		}
 	}
 
@@ -301,19 +302,21 @@ abstract class FlowAnalyzer extends GenericVisitor {
 
 	//---- special visit methods -------------------------------------------------------
 
+	@Override
 	public boolean visit(EmptyStatement node) {
 		// Empty statements aren't of any interest.
 		return false;
 	}
 
+	@Override
 	public boolean visit(TryStatement node) {
 		if (traverseNode(node)) {
 			fFlowContext.pushExcptions(node);
 			node.getBody().accept(this);
 			fFlowContext.popExceptions();
-			List catchClauses= node.catchClauses();
-			for (Iterator iter= catchClauses.iterator(); iter.hasNext();) {
-				((CatchClause)iter.next()).accept(this);
+			List<CatchClause> catchClauses= node.catchClauses();
+			for (Iterator<CatchClause> iter= catchClauses.iterator(); iter.hasNext();) {
+				iter.next().accept(this);
 			}
 			Block finallyBlock= node.getFinally();
 			if (finallyBlock != null) {
@@ -327,15 +330,15 @@ abstract class FlowAnalyzer extends GenericVisitor {
 
 	protected SwitchData createSwitchData(SwitchStatement node) {
 		SwitchData result= new SwitchData();
-		List statements= node.statements();
+		List<Statement> statements= node.statements();
 		if (statements.isEmpty())
 			return result;
 
 		int start= -1, end= -1;
 		GenericSequentialFlowInfo info= null;
 
-		for (Iterator iter= statements.iterator(); iter.hasNext(); ) {
-			Statement statement= (Statement)iter.next();
+		for (Iterator<Statement> iter= statements.iterator(); iter.hasNext(); ) {
+			Statement statement= iter.next();
 			if (statement instanceof SwitchCase) {
 				SwitchCase switchCase= (SwitchCase)statement;
 				if (switchCase.isDefault()) {
@@ -373,6 +376,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 
 	//---- concret endVisit methods ---------------------------------------------------
 
+	@Override
 	public void endVisit(AnnotationTypeDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -380,6 +384,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.setNoReturn();
 	}
 
+	@Override
 	public void endVisit(AnnotationTypeMemberDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -387,6 +392,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.setNoReturn();
 	}
 
+	@Override
 	public void endVisit(AnonymousClassDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -394,12 +400,14 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.setNoReturn();
 	}
 
+	@Override
 	public void endVisit(ArrayAccess node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getArray(), node.getIndex());
 	}
 
+	@Override
 	public void endVisit(ArrayCreation node) {
 		if (skipNode(node))
 			return;
@@ -408,18 +416,21 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.getInitializer());
 	}
 
+	@Override
 	public void endVisit(ArrayInitializer node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.expressions());
 	}
 
+	@Override
 	public void endVisit(ArrayType node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getElementType());
 	}
 
+	@Override
 	public void endVisit(AssertStatement node) {
 		if (skipNode(node))
 			return;
@@ -429,6 +440,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.merge(getFlowInfo(node.getMessage()), null, fFlowContext);
 	}
 
+	@Override
 	public void endVisit(Assignment node) {
 		if (skipNode(node))
 			return;
@@ -450,6 +462,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.merge(lhs, fFlowContext);
 	}
 
+	@Override
 	public void endVisit(Block node) {
 		if (skipNode(node))
 			return;
@@ -458,32 +471,38 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.statements());
 	}
 
+	@Override
 	public void endVisit(BooleanLiteral node) {
 		// Leaf node.
 	}
 
+	@Override
 	public void endVisit(BreakStatement node) {
 		if (skipNode(node))
 			return;
 		setFlowInfo(node, createBranch(node.getLabel()));
 	}
 
+	@Override
 	public void endVisit(CastExpression node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getType(), node.getExpression());
 	}
 
+	@Override
 	public void endVisit(CatchClause node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getException(), node.getBody());
 	}
 
+	@Override
 	public void endVisit(CharacterLiteral node) {
 		// Leaf node.
 	}
 
+	@Override
 	public void endVisit(ClassInstanceCreation node) {
 		if (skipNode(node))
 			return;
@@ -493,6 +512,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.getAnonymousClassDeclaration());
 	}
 
+	@Override
 	public void endVisit(CompilationUnit node) {
 		if (skipNode(node))
 			return;
@@ -500,6 +520,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.types());
 	}
 
+	@Override
 	public void endVisit(ConditionalExpression node) {
 		if (skipNode(node))
 			return;
@@ -512,18 +533,21 @@ abstract class FlowAnalyzer extends GenericVisitor {
 			fFlowContext);
 	}
 
+	@Override
 	public void endVisit(ConstructorInvocation node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.arguments());
 	}
 
+	@Override
 	public void endVisit(ContinueStatement node) {
 		if (skipNode(node))
 			return;
 		setFlowInfo(node, createBranch(node.getLabel()));
 	}
 
+	@Override
 	public void endVisit(DoStatement node) {
 		if (skipNode(node))
 			return;
@@ -534,10 +558,12 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.removeLabel(null);
 	}
 
+	@Override
 	public void endVisit(EmptyStatement node) {
 		// Leaf node.
 	}
 
+	@Override
 	public void endVisit(EnhancedForStatement node) {
 		if (skipNode(node))
 			return;
@@ -549,6 +575,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		forInfo.removeLabel(null);
 	}
 
+	@Override
 	public void endVisit(EnumConstantDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -556,6 +583,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.getAnonymousClassDeclaration());
 	}
 
+	@Override
 	public void endVisit(EnumDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -565,18 +593,21 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.setNoReturn();
 	}
 
+	@Override
 	public void endVisit(ExpressionStatement node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getExpression());
 	}
 
+	@Override
 	public void endVisit(FieldAccess node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getExpression(), node.getName());
 	}
 
+	@Override
 	public void endVisit(FieldDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -584,6 +615,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.fragments());
 	}
 
+	@Override
 	public void endVisit(ForStatement node) {
 		if (skipNode(node))
 			return;
@@ -597,6 +629,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		forInfo.removeLabel(null);
 	}
 
+	@Override
 	public void endVisit(IfStatement node) {
 		if (skipNode(node))
 			return;
@@ -606,12 +639,14 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.merge(getFlowInfo(node.getThenStatement()), getFlowInfo(node.getElseStatement()), fFlowContext);
 	}
 
+	@Override
 	public void endVisit(ImportDeclaration node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getName());
 	}
 
+	@Override
 	public void endVisit(InfixExpression node) {
 		if (skipNode(node))
 			return;
@@ -619,22 +654,26 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.extendedOperands());
 	}
 
+	@Override
 	public void endVisit(InstanceofExpression node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getLeftOperand(), node.getRightOperand());
 	}
 
+	@Override
 	public void endVisit(Initializer node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getBody());
 	}
 
+	@Override
 	public void endVisit(Javadoc node) {
 		// no influence on flow analysis
 	}
 
+	@Override
 	public void endVisit(LabeledStatement node) {
 		if (skipNode(node))
 			return;
@@ -643,10 +682,12 @@ abstract class FlowAnalyzer extends GenericVisitor {
 			info.removeLabel(node.getLabel());
 	}
 
+	@Override
 	public void endVisit(MarkerAnnotation node) {
 		// nothing to do for marker annotations;
 	}
 
+	@Override
 	public void endVisit(MemberValuePair node) {
 		if (skipNode(node))
 			return;
@@ -664,6 +705,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 
 	}
 
+	@Override
 	public void endVisit(MethodDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -673,10 +715,12 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.getBody());
 	}
 
+	@Override
 	public void endVisit(MethodInvocation node) {
 		endVisitMethodInvocation(node, node.getExpression(), node.arguments(), getMethodBinding(node.getName()));
 	}
 
+	@Override
 	public void endVisit(NormalAnnotation node) {
 		if (skipNode(node))
 			return;
@@ -684,20 +728,24 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.values());
 	}
 
+	@Override
 	public void endVisit(NullLiteral node) {
 		// Leaf node.
 	}
 
+	@Override
 	public void endVisit(NumberLiteral node) {
 		// Leaf node.
 	}
 
+	@Override
 	public void endVisit(PackageDeclaration node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getName());
 	}
 
+	@Override
 	public void endVisit(ParameterizedType node) {
 		if (skipNode(node))
 			return;
@@ -705,16 +753,19 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.typeArguments());
 	}
 
+	@Override
 	public void endVisit(ParenthesizedExpression node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getExpression());
 	}
 
+	@Override
 	public void endVisit(PostfixExpression node) {
 		endVisitIncDecOperation(node, node.getOperand());
 	}
 
+	@Override
 	public void endVisit(PrefixExpression node) {
 		PrefixExpression.Operator op= node.getOperator();
 		if (PrefixExpression.Operator.INCREMENT.equals(op) || PrefixExpression.Operator.DECREMENT.equals(op)) {
@@ -724,22 +775,26 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		}
 	}
 
+	@Override
 	public void endVisit(PrimitiveType node) {
 		// Leaf node
 	}
 
+	@Override
 	public void endVisit(QualifiedName node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getQualifier(), node.getName());
 	}
 
+	@Override
 	public void endVisit(QualifiedType node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getQualifier(), node.getName());
 	}
 
+	@Override
 	public void endVisit(ReturnStatement node) {
 		if (skipNode(node))
 			return;
@@ -753,6 +808,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		}
 	}
 
+	@Override
 	public void endVisit(SimpleName node) {
 		if (skipNode(node) || node.isDeclaration())
 			return;
@@ -773,18 +829,21 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		}
 	}
 
+	@Override
 	public void endVisit(SimpleType node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getName());
 	}
 
+	@Override
 	public void endVisit(SingleMemberAnnotation node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getValue());
 	}
 
+	@Override
 	public void endVisit(SingleVariableDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -799,34 +858,41 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.merge(nameInfo, fFlowContext);
 	}
 
+	@Override
 	public void endVisit(StringLiteral node) {
 		// Leaf node
 	}
 
+	@Override
 	public void endVisit(SuperConstructorInvocation node) {
 		endVisitMethodInvocation(node, node.getExpression(), node.arguments(), node.resolveConstructorBinding());
 	}
 
+	@Override
 	public void endVisit(SuperFieldAccess node) {
 		if (skipNode(node))
 			return;
 		processSequential(node, node.getQualifier(), node.getName());
 	}
 
+	@Override
 	public void endVisit(SuperMethodInvocation node) {
 		endVisitMethodInvocation(node, node.getQualifier(), node.arguments(), getMethodBinding(node.getName()));
 	}
 
+	@Override
 	public void endVisit(SwitchCase node) {
 		endVisitNode(node);
 	}
 
+	@Override
 	public void endVisit(SwitchStatement node) {
 		if (skipNode(node))
 			return;
 		endVisit(node, createSwitchData(node));
 	}
 
+	@Override
 	public void endVisit(SynchronizedStatement node) {
 		if (skipNode(node))
 			return;
@@ -834,12 +900,14 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.getBody());
 	}
 
+	@Override
 	public void endVisit(ThisExpression node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getQualifier());
 	}
 
+	@Override
 	public void endVisit(ThrowStatement node) {
 		if (skipNode(node))
 			return;
@@ -850,6 +918,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.mergeException(expression.resolveTypeBinding(), fFlowContext);
 	}
 
+	@Override
 	public void endVisit(TryStatement node) {
 		if (skipNode(node))
 			return;
@@ -857,8 +926,8 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		setFlowInfo(node, info);
 		info.mergeTry(getFlowInfo(node.getBody()), fFlowContext);
 		info.removeExceptions(node);
-		for (Iterator iter= node.catchClauses().iterator(); iter.hasNext();) {
-			CatchClause element= (CatchClause)iter.next();
+		for (Iterator<CatchClause> iter= node.catchClauses().iterator(); iter.hasNext();) {
+			CatchClause element= iter.next();
 			info.mergeCatch(getFlowInfo(element), fFlowContext);
 		}
 		info.mergeFinally(getFlowInfo(node.getFinally()), fFlowContext);
@@ -866,6 +935,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 
 	// TODO account for enums and annotations
 
+	@Override
 	public void endVisit(TypeDeclaration node) {
 		if (skipNode(node))
 			return;
@@ -875,18 +945,21 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.setNoReturn();
 	}
 
+	@Override
 	public void endVisit(TypeDeclarationStatement node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getDeclaration());
 	}
 
+	@Override
 	public void endVisit(TypeLiteral node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getType());
 	}
 
+	@Override
 	public void endVisit(TypeParameter node) {
 		if (skipNode(node))
 			return;
@@ -894,6 +967,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.typeBounds());
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationExpression node) {
 		if (skipNode(node))
 			return;
@@ -901,6 +975,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.fragments());
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationStatement node) {
 		if (skipNode(node))
 			return;
@@ -908,6 +983,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		process(info, node.fragments());
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationFragment node) {
 		if (skipNode(node))
 			return;
@@ -922,6 +998,7 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.merge(nameInfo, fFlowContext);
 	}
 
+	@Override
 	public void endVisit(WhileStatement node) {
 		if (skipNode(node))
 			return;
@@ -932,19 +1009,20 @@ abstract class FlowAnalyzer extends GenericVisitor {
 		info.removeLabel(null);
 	}
 
+	@Override
 	public void endVisit(WildcardType node) {
 		if (skipNode(node))
 			return;
 		assignFlowInfo(node, node.getBound());
 	}
 
-	private void endVisitMethodInvocation(ASTNode node, ASTNode receiver, List arguments, IMethodBinding binding) {
+	private void endVisitMethodInvocation(ASTNode node, ASTNode receiver, List<Expression> arguments, IMethodBinding binding) {
 		if (skipNode(node))
 			return;
 		MessageSendFlowInfo info= createMessageSendFlowInfo();
 		setFlowInfo(node, info);
-		for (Iterator iter= arguments.iterator(); iter.hasNext();) {
-			Expression arg= (Expression) iter.next();
+		for (Iterator<Expression> iter= arguments.iterator(); iter.hasNext();) {
+			Expression arg= iter.next();
 			info.mergeArgument(getFlowInfo(arg), fFlowContext);
 		}
 		info.mergeReceiver(getFlowInfo(receiver), fFlowContext);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowContext.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowContext.java
index dbf98f0..1609fc0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowContext.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowContext.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,14 +38,14 @@ public class FlowContext {
 	private boolean fLoopReentranceMode;
 	private Enum fComputeMode;
 	private IVariableBinding[] fLocals;
-	private List fExceptionStack;
+	private List<List<CatchClause>> fExceptionStack;
 
-	private static final List EMPTY_CATCH_CLAUSE= new ArrayList(0);
+	private static final List<CatchClause> EMPTY_CATCH_CLAUSE= new ArrayList<CatchClause>(0);
 
 	public FlowContext(int start, int length) {
 		fStart= start;
 		fLength= length;
-		fExceptionStack= new ArrayList(3);
+		fExceptionStack= new ArrayList<List<CatchClause>>(3);
 	}
 
 	public void setConsiderAccessMode(boolean b) {
@@ -117,7 +117,7 @@ public class FlowContext {
 	//---- Exception handling --------------------------------------------------------
 
 	void pushExcptions(TryStatement node) {
-		List catchClauses= node.catchClauses();
+		List<CatchClause> catchClauses= node.catchClauses();
 		if (catchClauses == null)
 			catchClauses= EMPTY_CATCH_CLAUSE;
 		fExceptionStack.add(catchClauses);
@@ -129,9 +129,9 @@ public class FlowContext {
 	}
 
 	boolean isExceptionCaught(ITypeBinding excpetionType) {
-		for (Iterator exceptions= fExceptionStack.iterator(); exceptions.hasNext(); ) {
-			for (Iterator catchClauses= ((List)exceptions.next()).iterator(); catchClauses.hasNext(); ) {
-				SingleVariableDeclaration catchedException= ((CatchClause)catchClauses.next()).getException();
+		for (Iterator<List<CatchClause>> exceptions= fExceptionStack.iterator(); exceptions.hasNext(); ) {
+			for (Iterator<CatchClause> catchClauses= exceptions.next().iterator(); catchClauses.hasNext(); ) {
+				SingleVariableDeclaration catchedException= catchClauses.next().getException();
 				IVariableBinding binding= catchedException.resolveBinding();
 				if (binding == null)
 					continue;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java
index d3fafb8..0d4bd08 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,9 +88,9 @@ public abstract class FlowInfo {
 
 	protected int fReturnKind;
 	protected int[] fAccessModes;
-	protected Set fBranches;
-	protected Set fExceptions;
-	protected Set fTypeVariables;
+	protected Set<String> fBranches;
+	protected Set<ITypeBinding> fExceptions;
+	protected Set<ITypeBinding> fTypeVariables;
 
 	protected FlowInfo() {
 		this(UNDEFINED);
@@ -169,7 +169,7 @@ public abstract class FlowInfo {
 		return fBranches != null && !fBranches.isEmpty();
 	}
 
-	protected Set getBranches() {
+	protected Set<String> getBranches() {
 		return fBranches;
 	}
 
@@ -193,7 +193,7 @@ public abstract class FlowInfo {
 	public ITypeBinding[] getExceptions() {
 		if (fExceptions == null)
 			return new ITypeBinding[0];
-		return (ITypeBinding[]) fExceptions.toArray(new ITypeBinding[fExceptions.size()]);
+		return fExceptions.toArray(new ITypeBinding[fExceptions.size()]);
 	}
 
 	protected boolean hasUncaughtException() {
@@ -202,7 +202,7 @@ public abstract class FlowInfo {
 
 	protected void addException(ITypeBinding type) {
 		if (fExceptions == null)
-			fExceptions= new HashSet(2);
+			fExceptions= new HashSet<ITypeBinding>(2);
 		fExceptions.add(type);
 	}
 
@@ -210,11 +210,11 @@ public abstract class FlowInfo {
 		if (fExceptions == null)
 			return;
 
-		List catchClauses= node.catchClauses();
+		List<CatchClause> catchClauses= node.catchClauses();
 		if (catchClauses.isEmpty())
 			return;
 		// Make sure we have a copy since we are modifying the fExceptions list
-		ITypeBinding[] exceptions= (ITypeBinding[]) fExceptions.toArray(new ITypeBinding[fExceptions.size()]);
+		ITypeBinding[] exceptions= fExceptions.toArray(new ITypeBinding[fExceptions.size()]);
 		for (int i= 0; i < exceptions.length; i++) {
 			handleException(catchClauses, exceptions[i]);
 		}
@@ -222,9 +222,9 @@ public abstract class FlowInfo {
 			fExceptions= null;
 	}
 
-	private void handleException(List catchClauses, ITypeBinding type) {
-		for (Iterator iter= catchClauses.iterator(); iter.hasNext();) {
-			IVariableBinding binding= ((CatchClause)iter.next()).getException().resolveBinding();
+	private void handleException(List<CatchClause> catchClauses, ITypeBinding type) {
+		for (Iterator<CatchClause> iter= catchClauses.iterator(); iter.hasNext();) {
+			IVariableBinding binding= iter.next().getException().resolveBinding();
 			if (binding == null)
 				continue;
 			ITypeBinding catchedType= binding.getType();
@@ -243,12 +243,12 @@ public abstract class FlowInfo {
 	public ITypeBinding[] getTypeVariables() {
 		if (fTypeVariables == null)
 			return new ITypeBinding[0];
-		return (ITypeBinding[])fTypeVariables.toArray(new ITypeBinding[fTypeVariables.size()]);
+		return fTypeVariables.toArray(new ITypeBinding[fTypeVariables.size()]);
 	}
 
 	protected void addTypeVariable(ITypeBinding typeParameter) {
 		if (fTypeVariables == null)
-			fTypeVariables= new HashSet();
+			fTypeVariables= new HashSet<ITypeBinding>();
 		fTypeVariables.add(typeParameter);
 	}
 
@@ -285,12 +285,12 @@ public abstract class FlowInfo {
 		fExceptions= mergeSets(fExceptions, otherInfo.fExceptions);
 	}
 
-	private static Set mergeSets(Set thisSet, Set otherSet) {
+	private static <T> Set<T> mergeSets(Set<T> thisSet, Set<T> otherSet) {
 		if (otherSet != null) {
 			if (thisSet == null) {
 				thisSet= otherSet;
 			} else {
-				Iterator iter= otherSet.iterator();
+				Iterator<T> iter= otherSet.iterator();
 				while (iter.hasNext()) {
 					thisSet.add(iter.next());
 				}
@@ -311,7 +311,7 @@ public abstract class FlowInfo {
 	 * @return an array of local variable bindings conforming to the given type.
 	 */
 	public IVariableBinding[] get(FlowContext context, int mode) {
-		List result= new ArrayList();
+		List<IVariableBinding> result= new ArrayList<IVariableBinding>();
 		int[] locals= getAccessModes();
 		if (locals == null)
 			return EMPTY_ARRAY;
@@ -320,7 +320,7 @@ public abstract class FlowInfo {
 			if ((accessMode & mode) != 0)
 				result.add(context.getLocalFromIndex(i));
 		}
-		return (IVariableBinding[])result.toArray(new IVariableBinding[result.size()]);
+		return result.toArray(new IVariableBinding[result.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InOutFlowAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InOutFlowAnalyzer.java
index 7250c76..c5539d2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InOutFlowAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InOutFlowAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,41 +43,48 @@ public class InOutFlowAnalyzer extends FlowAnalyzer {
 		return result;
 	}
 
+	@Override
 	protected boolean traverseNode(ASTNode node) {
 		// we are only traversing the selected nodes.
 		return true;
 	}
 
+	@Override
 	protected boolean createReturnFlowInfo(ReturnStatement node) {
 		// we are only traversing selected nodes.
 		return true;
 	}
 
+	@Override
 	public void endVisit(Block node) {
 		super.endVisit(node);
 		clearAccessMode(accessFlowInfo(node), node.statements());
 	}
 
+	@Override
 	public void endVisit(CatchClause node) {
 		super.endVisit(node);
 		clearAccessMode(accessFlowInfo(node), node.getException());
 	}
 
+	@Override
 	public void endVisit(EnhancedForStatement node) {
 		super.endVisit(node);
 		clearAccessMode(accessFlowInfo(node), node.getParameter());
 	}
 
+	@Override
 	public void endVisit(ForStatement node) {
 		super.endVisit(node);
 		clearAccessMode(accessFlowInfo(node), node.initializers());
 	}
 
+	@Override
 	public void endVisit(MethodDeclaration node) {
 		super.endVisit(node);
 		FlowInfo info= accessFlowInfo(node);
-		for (Iterator iter= node.parameters().iterator(); iter.hasNext();) {
-			clearAccessMode(info, (SingleVariableDeclaration)iter.next());
+		for (Iterator<SingleVariableDeclaration> iter= node.parameters().iterator(); iter.hasNext();) {
+			clearAccessMode(info, iter.next());
 		}
 	}
 
@@ -87,12 +94,12 @@ public class InOutFlowAnalyzer extends FlowAnalyzer {
 			info.clearAccessMode(binding, fFlowContext);
 	}
 
-	private void clearAccessMode(FlowInfo info, List nodes) {
+	private void clearAccessMode(FlowInfo info, List<? extends ASTNode> nodes) {
 		if (nodes== null || nodes.isEmpty() || info == null)
 			return;
-		for (Iterator iter= nodes.iterator(); iter.hasNext(); ) {
+		for (Iterator<? extends ASTNode> iter= nodes.iterator(); iter.hasNext(); ) {
 			Object node= iter.next();
-			Iterator fragments= null;
+			Iterator<VariableDeclarationFragment> fragments= null;
 			if (node instanceof VariableDeclarationStatement) {
 				fragments= ((VariableDeclarationStatement)node).fragments().iterator();
 			} else if (node instanceof VariableDeclarationExpression) {
@@ -100,7 +107,7 @@ public class InOutFlowAnalyzer extends FlowAnalyzer {
 			}
 			if (fragments != null) {
 				while (fragments.hasNext()) {
-					clearAccessMode(info, (VariableDeclarationFragment)fragments.next());
+					clearAccessMode(info, fragments.next());
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InputFlowAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InputFlowAnalyzer.java
index 9e449a6..238d654 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InputFlowAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/flow/InputFlowAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,9 +44,11 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 			fSelection= selection;
 			fLoopNode= loopNode;
 		}
+		@Override
 		protected boolean traverseNode(ASTNode node) {
 			return true; // end <= fSelection.end || fSelection.enclosedBy(start, end);
 		}
+		@Override
 		protected boolean createReturnFlowInfo(ReturnStatement node) {
 			// Make sure that the whole return statement is selected or located before the selection.
 			return node.getStartPosition() + node.getLength() <= fSelection.getExclusiveEnd();
@@ -62,6 +64,7 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 				fFlowContext.setLoopReentranceMode(false);
 			}
 		}
+		@Override
 		public void endVisit(DoStatement node) {
 			if (skipNode(node))
 				return;
@@ -71,6 +74,7 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 			// No need to merge the condition. It was already considered by the InputFlowAnalyzer.
 			info.removeLabel(null);
 		}
+		@Override
 		public void endVisit(EnhancedForStatement node) {
 			if (skipNode(node))
 				return;
@@ -92,6 +96,7 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 			}
 			forInfo.removeLabel(null);
 		}
+		@Override
 		public void endVisit(ForStatement node) {
 			if (skipNode(node))
 				return;
@@ -142,31 +147,37 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 		return getFlowInfo(node);
 	}
 
+	@Override
 	protected boolean traverseNode(ASTNode node) {
 		return node.getStartPosition() + node.getLength() > fSelection.getInclusiveEnd();
 	}
 
+	@Override
 	protected boolean createReturnFlowInfo(ReturnStatement node) {
 		// Make sure that the whole return statement is located after the selection. There can be cases like
 		// return i + [x + 10] * 10; In this case we must not create a return info node.
 		return node.getStartPosition() >= fSelection.getInclusiveEnd();
 	}
 
+	@Override
 	public boolean visit(DoStatement node) {
 		createLoopReentranceVisitor(node);
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(EnhancedForStatement node) {
 		createLoopReentranceVisitor(node);
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(ForStatement node) {
 		createLoopReentranceVisitor(node);
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(WhileStatement node) {
 		createLoopReentranceVisitor(node);
 		return super.visit(node);
@@ -177,6 +188,7 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 			fLoopReentranceVisitor= new LoopReentranceVisitor(fFlowContext, fSelection, node);
 	}
 
+	@Override
 	public void endVisit(ConditionalExpression node) {
 		if (skipNode(node))
 			return;
@@ -192,11 +204,13 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 		}
 	}
 
+	@Override
 	public void endVisit(DoStatement node) {
 		super.endVisit(node);
 		handleLoopReentrance(node);
 	}
 
+	@Override
 	public void endVisit(IfStatement node) {
 		if (skipNode(node))
 			return;
@@ -212,16 +226,19 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 		}
 	}
 
+	@Override
 	public void endVisit(EnhancedForStatement node) {
 		super.endVisit(node);
 		handleLoopReentrance(node);
 	}
 
+	@Override
 	public void endVisit(ForStatement node) {
 		super.endVisit(node);
 		handleLoopReentrance(node);
 	}
 
+	@Override
 	public void endVisit(SwitchStatement node) {
 		if (skipNode(node))
 			return;
@@ -241,6 +258,7 @@ public class InputFlowAnalyzer extends FlowAnalyzer {
 		super.endVisit(node, data);
 	}
 
+	@Override
 	public void endVisit(WhileStatement node) {
 		super.endVisit(node);
 		handleLoopReentrance(node);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateCreator.java
index 91d08c8..1a96360 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -414,7 +414,7 @@ public abstract class DelegateCreator {
 		int firstParam= msg.indexOf("{0}"); //$NON-NLS-1$
 		Assert.isTrue(firstParam != -1);
 
-		List fragments= new ArrayList();
+		List<ASTNode> fragments= new ArrayList<ASTNode>();
 		TextElement text= getAst().newTextElement();
 		text.setText(msg.substring(0, firstParam).trim());
 		fragments.add(text);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateFieldCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateFieldCreator.java
index db35039..1c16a88 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateFieldCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateFieldCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ public class DelegateFieldCreator extends DelegateCreator {
 
 	private VariableDeclarationFragment fOldFieldFragment;
 
+	@Override
 	protected void initialize() {
 
 		Assert.isTrue(getDeclaration() instanceof FieldDeclaration);
@@ -51,12 +52,14 @@ public class DelegateFieldCreator extends DelegateCreator {
 		setInsertBefore(false); // delegate must be inserted after the original field that is referenced in the initializer
 	}
 
+	@Override
 	protected ASTNode createBody(BodyDeclaration fd) throws JavaModelException {
 		FieldDeclaration result= (FieldDeclaration) fd;
 		Expression initializer= createDelegateFieldInitializer(result);
 		return initializer;
 	}
 
+	@Override
 	protected ASTNode createDocReference(BodyDeclaration declaration) {
 		MemberRef ref= getAst().newMemberRef();
 		ref.setName(getAst().newSimpleName(getNewElementName()));
@@ -66,22 +69,27 @@ public class DelegateFieldCreator extends DelegateCreator {
 		return ref;
 	}
 
+	@Override
 	protected ASTNode getBodyHead(BodyDeclaration result) {
 		return fOldFieldFragment;
 	}
 
+	@Override
 	protected ChildPropertyDescriptor getJavaDocProperty() {
 		return FieldDeclaration.JAVADOC_PROPERTY;
 	}
 
+	@Override
 	protected ChildPropertyDescriptor getBodyProperty() {
 		return VariableDeclarationFragment.INITIALIZER_PROPERTY;
 	}
 
+	@Override
 	protected IBinding getDeclarationBinding() {
 		return fOldFieldFragment.resolveBinding();
 	}
 
+	@Override
 	protected String getTextEditGroupLabel() {
 		return RefactoringCoreMessages.DelegateFieldCreator_text_edit_group_label;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateMethodCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateMethodCreator.java
index dba7d5f..dcc22ca 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateMethodCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/delegates/DelegateMethodCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.ChildPropertyDescriptor;
 import org.eclipse.jdt.core.dom.ConstructorInvocation;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
@@ -46,6 +47,7 @@ public class DelegateMethodCreator extends DelegateCreator {
 	private ASTNode fDelegateInvocation;
 	private MethodRef fDocMethodReference;
 
+	@Override
 	protected void initialize() {
 
 		Assert.isTrue(getDeclaration() instanceof MethodDeclaration);
@@ -56,6 +58,7 @@ public class DelegateMethodCreator extends DelegateCreator {
 		setInsertBefore(true);
 	}
 
+	@Override
 	protected ASTNode createBody(BodyDeclaration bd) throws JavaModelException {
 
 		MethodDeclaration methodDeclaration= (MethodDeclaration) bd;
@@ -67,6 +70,7 @@ public class DelegateMethodCreator extends DelegateCreator {
 		return createDelegateMethodBody(methodDeclaration);
 	}
 
+	@Override
 	protected ASTNode createDocReference(final BodyDeclaration declaration) throws JavaModelException {
 		fDocMethodReference= getAst().newMethodRef();
 		fDocMethodReference.setName(getAst().newSimpleName(getNewElementName()));
@@ -76,14 +80,17 @@ public class DelegateMethodCreator extends DelegateCreator {
 		return fDocMethodReference;
 	}
 
+	@Override
 	protected ASTNode getBodyHead(BodyDeclaration result) {
 		return result;
 	}
 
+	@Override
 	protected ChildPropertyDescriptor getJavaDocProperty() {
 		return MethodDeclaration.JAVADOC_PROPERTY;
 	}
 
+	@Override
 	protected ChildPropertyDescriptor getBodyProperty() {
 		return MethodDeclaration.BODY_PROPERTY;
 	}
@@ -138,12 +145,14 @@ public class DelegateMethodCreator extends DelegateCreator {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected IBinding getDeclarationBinding() {
 		final MethodDeclaration declaration= (MethodDeclaration) getDeclaration();
 		return declaration.resolveBinding();
 	}
 
-	private void createArguments(final MethodDeclaration declaration, final List arguments, boolean methodInvocation) throws JavaModelException {
+	@SuppressWarnings("unchecked")
+	private void createArguments(final MethodDeclaration declaration, final List<? extends ASTNode> arguments, boolean methodInvocation) {
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(arguments);
 		SingleVariableDeclaration variable= null;
@@ -154,23 +163,23 @@ public class DelegateMethodCreator extends DelegateCreator {
 			if (methodInvocation) {
 				// we are creating method invocation parameters
 				final SimpleName expression= getAst().newSimpleName(variable.getName().getIdentifier());
-				arguments.add(expression);
+				((List<Expression>) arguments).add(expression);
 			} else {
 				// we are creating type info for the javadoc
 				final MethodRefParameter parameter= getAst().newMethodRefParameter();
 				parameter.setType(ASTNodeFactory.newType(getAst(), variable));
 				if ((index == size - 1) && declaration.isVarargs())
 					parameter.setVarargs(true);
-				arguments.add(parameter);
+				((List<MethodRefParameter>) arguments).add(parameter);
 			}
 		}
 	}
 
-	private Block createDelegateMethodBody(final MethodDeclaration declaration) throws JavaModelException {
+	private Block createDelegateMethodBody(final MethodDeclaration declaration) {
 		Assert.isNotNull(declaration);
 
 		MethodDeclaration old= (MethodDeclaration) getDeclaration();
-		List arguments;
+		List<Expression> arguments;
 		Statement call;
 		if (old.isConstructor()) {
 			ConstructorInvocation invocation= getAst().newConstructorInvocation();
@@ -217,6 +226,7 @@ public class DelegateMethodCreator extends DelegateCreator {
 		return statement;
 	}
 
+	@Override
 	protected String getTextEditGroupLabel() {
 		return RefactoringCoreMessages.DelegateMethodCreator_text_edit_group_field;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ElementStructureEnvironment.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ElementStructureEnvironment.java
index d78afa3..e7a800c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ElementStructureEnvironment.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ElementStructureEnvironment.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,10 +17,10 @@ import org.eclipse.jdt.internal.corext.refactoring.generics.ParametricStructureC
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ConstraintVariable2;
 
 /*package*/ final class ElementStructureEnvironment {
-	private final Map/*<ConstraintVariable, IType>*/ fElemStructure;
+	private final Map<ConstraintVariable2, ParametricStructure> fElemStructure;
 
 	public ElementStructureEnvironment(){
-		fElemStructure= new LinkedHashMap();
+		fElemStructure= new LinkedHashMap<ConstraintVariable2, ParametricStructure>();
 	}
 
 	public void setElemStructure(ConstraintVariable2 v, ParametricStructure t) {
@@ -28,6 +28,6 @@ import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ConstraintVa
 	}
 
 	public ParametricStructure elemStructure(ConstraintVariable2 v) {
-		return (ParametricStructure) fElemStructure.get(v);
+		return fElemStructure.get(v);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java
index 6cb31e9..7da87cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -96,16 +96,19 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		fAssumeCloneReturnsSameType= assumeCloneReturnsSameType;
 	}
 
+	@Override
 	public boolean visit(CompilationUnit node) {
 		fTCModel.newCu(); //TODO: make sure that accumulators are reset after last CU!
 		fCU= (ICompilationUnit) node.getJavaElement();
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(Javadoc node) {
 		return false;
 	}
 
+	@Override
 	public boolean visit(Type node) {
 		return false; //TODO
 	}
@@ -113,6 +116,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.Type)
 	 */
+	@Override
 	public void endVisit(Type node) {
 		if (node.isParameterizedType()) {
 			// retain already parameterized types
@@ -124,6 +128,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		}
 	}
 
+	@Override
 	public void endVisit(SimpleName node) {
 		if (node.resolveBoxing()) {
 			ImmutableTypeVariable2 boxed= fTCModel.makeImmutableTypeVariable(node.resolveTypeBinding(), node);
@@ -157,7 +162,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 						setConstraintVariable(node, returnTypeCv);
 						// Elem[retVal] =^= Elem[receiver]
 						TType declaredVariableTType= fTCModel.createTType(declaredVariableType);
-						fTCModel.createTypeVariablesEqualityConstraints(receiverCv, Collections.EMPTY_MAP, returnTypeCv, declaredVariableTType);
+						fTCModel.createTypeVariablesEqualityConstraints(receiverCv, Collections.<String, IndependentTypeVariable2>emptyMap(), returnTypeCv, declaredVariableTType);
 						return;
 					}
 				}
@@ -190,6 +195,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 			return receiver;
 	}
 
+	@Override
 	public void endVisit(FieldAccess node) {
 		if (node.resolveBoxing()) {
 			ImmutableTypeVariable2 boxed= fTCModel.makeImmutableTypeVariable(node.resolveTypeBinding(), node);
@@ -200,6 +206,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		setConstraintVariable(node, nameCv);
 	}
 
+	@Override
 	public void endVisit(QualifiedName node) {
 		if (node.resolveBoxing()) {
 			ImmutableTypeVariable2 boxed= fTCModel.makeImmutableTypeVariable(node.resolveTypeBinding(), node);
@@ -210,6 +217,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		setConstraintVariable(node, cv);
 	}
 
+	@Override
 	public void endVisit(ArrayAccess node) {
 		if (node.resolveBoxing()) {
 			ImmutableTypeVariable2 boxed= fTCModel.makeImmutableTypeVariable(node.resolveTypeBinding(), node);
@@ -225,6 +233,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		setConstraintVariable(node, arrayElementCv);
 	}
 
+	@Override
 	public void endVisit(Assignment node) {
 		Expression lhs= node.getLeftHandSide();
 		Expression rhs= node.getRightHandSide();
@@ -250,6 +259,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		//TODO: other implicit conversions: numeric promotion, autoboxing?
 	}
 
+	@Override
 	public void endVisit(CastExpression node) {
 //		if (! (expressionCv instanceof CollectionElementVariable2))
 //			return; //TODO: returns too early when dealing with nested collections.
@@ -300,6 +310,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 
 	}
 
+	@Override
 	public void endVisit(ParenthesizedExpression node) {
 		if (node.resolveBoxing()) {
 			ImmutableTypeVariable2 boxed= fTCModel.makeImmutableTypeVariable(node.resolveTypeBinding(), node);
@@ -310,12 +321,14 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		setConstraintVariable(node, expressionCv);
 	}
 
+	@Override
 	public void endVisit(ConditionalExpression node) {
 		// for now, no support for passing generic types through conditional expressions
 		ImmutableTypeVariable2 boxed= fTCModel.makeImmutableTypeVariable(node.resolveTypeBinding(), node);
 		setConstraintVariable(node, boxed);
 	}
 
+	@Override
 	public boolean visit(CatchClause node) {
 		SingleVariableDeclaration exception= node.getException();
 		IVariableBinding variableBinding= exception.resolveBinding();
@@ -324,42 +337,49 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		return true;
 	}
 
+	@Override
 	public void endVisit(StringLiteral node) {
 		ITypeBinding typeBinding= node.resolveTypeBinding();
 		ImmutableTypeVariable2 cv= fTCModel.makeImmutableTypeVariable(typeBinding, /*no boxing*/null);
 		setConstraintVariable(node, cv);
 	}
 
+	@Override
 	public void endVisit(NumberLiteral node) {
 		ITypeBinding typeBinding= node.resolveTypeBinding();
 		ImmutableTypeVariable2 cv= fTCModel.makeImmutableTypeVariable(typeBinding, node);
 		setConstraintVariable(node, cv);
 	}
 
+	@Override
 	public void endVisit(BooleanLiteral node) {
 		ITypeBinding typeBinding= node.resolveTypeBinding();
 		ImmutableTypeVariable2 cv= fTCModel.makeImmutableTypeVariable(typeBinding, node);
 		setConstraintVariable(node, cv);
 	}
 
+	@Override
 	public void endVisit(CharacterLiteral node) {
 		ITypeBinding typeBinding= node.resolveTypeBinding();
 		ImmutableTypeVariable2 cv= fTCModel.makeImmutableTypeVariable(typeBinding, node);
 		setConstraintVariable(node, cv);
 	}
 
+	@Override
 	public void endVisit(ThisExpression node) {
 		ITypeBinding typeBinding= node.resolveTypeBinding();
 		ImmutableTypeVariable2 cv= fTCModel.makeImmutableTypeVariable(typeBinding, /*no boxing*/null);
 		setConstraintVariable(node, cv);
 	}
 
+	@Override
 	public void endVisit(TypeLiteral node) {
 		ITypeBinding typeBinding= node.resolveTypeBinding();
 		ImmutableTypeVariable2 cv= fTCModel.makeImmutableTypeVariable(typeBinding, /*no boxing*/null);
 		setConstraintVariable(node, cv);
 	}
 
+	@Override
 	public void endVisit(MethodDeclaration node) {
 		IMethodBinding methodBinding= node.resolveBinding();
 
@@ -430,6 +450,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		}
 	}
 
+	@Override
 	public void endVisit(MethodInvocation node) {
 		IMethodBinding methodBinding= node.resolveMethodBinding();
 		if (methodBinding == null)
@@ -470,7 +491,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 //			fTCModel.createSubtypeConstraint(classTypeVariable, boundType);
 
 		} else {
-			Map/*<String, IndependentTypeVariable2>*/ methodTypeVariables= createMethodTypeArguments(methodBinding);
+			Map<String, IndependentTypeVariable2> methodTypeVariables= createMethodTypeArguments(methodBinding);
 
 			doVisitMethodInvocationReturnType(node, methodBinding, receiver, methodTypeVariables);
 			doVisitMethodInvocationArguments(methodBinding, node.arguments(), receiver, methodTypeVariables, /*no created type*/null);
@@ -481,13 +502,13 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 	/**
 	 * @return a map from type variable key to type variable constraint variable
 	 */
-	private Map/*<String, IndependentTypeVariable2>*/ createMethodTypeArguments(IMethodBinding methodBinding) {
+	private Map<String, IndependentTypeVariable2> createMethodTypeArguments(IMethodBinding methodBinding) {
 		ITypeBinding[] methodTypeParameters= methodBinding.getMethodDeclaration().getTypeParameters();
-		Map methodTypeVariables;
+		Map<String, IndependentTypeVariable2> methodTypeVariables;
 		if (methodTypeParameters.length == 0) {
-			methodTypeVariables= Collections.EMPTY_MAP;
+			methodTypeVariables= Collections.emptyMap();
 		} else {
-			methodTypeVariables= new HashMap();
+			methodTypeVariables= new HashMap<String, IndependentTypeVariable2>();
 			for (int i= 0; i < methodTypeParameters.length; i++) {
 				ITypeBinding methodTypeParameter= methodTypeParameters[i];
 				//TODO: typeVariable does not need a type binding - only used in equality constraints
@@ -499,7 +520,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		return methodTypeVariables;
 	}
 
-	private void doVisitMethodInvocationReturnType(MethodInvocation node, IMethodBinding methodBinding, Expression receiver, Map/*<String, IndependentTypeVariable2>*/ methodTypeVariables) {
+	private void doVisitMethodInvocationReturnType(MethodInvocation node, IMethodBinding methodBinding, Expression receiver, Map<String, IndependentTypeVariable2> methodTypeVariables) {
 		ITypeBinding declaredReturnType= methodBinding.getMethodDeclaration().getReturnType();
 
 		if (declaredReturnType.isPrimitive()) {
@@ -507,7 +528,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 			setConstraintVariable(node, boxed);
 
 		} else 	if (declaredReturnType.isTypeVariable()) {
-			ConstraintVariable2 methodTypeVariableCv= (ConstraintVariable2) methodTypeVariables.get(declaredReturnType.getKey());
+			ConstraintVariable2 methodTypeVariableCv= methodTypeVariables.get(declaredReturnType.getKey());
 			if (methodTypeVariableCv != null) {
 				// e.g. in Collections: <T ..> T min(Collection<? extends T> coll):
 				setConstraintVariable(node, methodTypeVariableCv); //TODO: should be [retVal] <= Elem[arg] in this case?
@@ -575,12 +596,12 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 				&& receiver.resolveTypeBinding() != methodBinding.getMethodDeclaration().getReturnType();
 	}
 
-	private void doVisitMethodInvocationArguments(IMethodBinding methodBinding, List arguments, Expression receiver, Map methodTypeVariables, Type createdType) {
+	private void doVisitMethodInvocationArguments(IMethodBinding methodBinding, List<Expression> arguments, Expression receiver, Map<String, IndependentTypeVariable2> methodTypeVariables, Type createdType) {
 		//TODO: connect generic method type parameters, e.g. <T> void take(T t, List<T> ts)
 		ITypeBinding[] declaredParameterTypes= methodBinding.getMethodDeclaration().getParameterTypes();
 		int lastParamIdx= declaredParameterTypes.length - 1;
 		for (int i= 0; i < arguments.size(); i++) {
-			Expression arg= (Expression) arguments.get(i);
+			Expression arg= arguments.get(i);
 			ConstraintVariable2 argCv= getConstraintVariable(arg);
 			if (argCv == null)
 				continue;
@@ -604,7 +625,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 
 			if (declaredParameterType.isTypeVariable()) {
 
-				ConstraintVariable2 methodTypeVariableCv= (ConstraintVariable2) methodTypeVariables.get(declaredParameterType.getBindingKey());
+				ConstraintVariable2 methodTypeVariableCv= methodTypeVariables.get(declaredParameterType.getBindingKey());
 				if (methodTypeVariableCv != null) {
 					// e.g. t in "<T> void take(T t, List<T> ts)"
 					fTCModel.createSubtypeConstraint(argCv, methodTypeVariableCv);
@@ -647,7 +668,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 						WildcardType wildcardTypeArgument= (WildcardType) typeArgument;
 						TType bound= wildcardTypeArgument.getBound();
 						if (bound != null && bound.isTypeVariable()) {
-							ConstraintVariable2 methodTypeVariableCv= (ConstraintVariable2) methodTypeVariables.get(bound.getBindingKey());
+							ConstraintVariable2 methodTypeVariableCv= methodTypeVariables.get(bound.getBindingKey());
 							if (methodTypeVariableCv != null) {
 								//e.g. in Collections: <T ..> T min(Collection<? extends T> coll):
 								createWildcardConstraint(wildcardTypeArgument, argElementCv, methodTypeVariableCv);
@@ -672,7 +693,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 						}
 
 					} else if (typeArgument.isTypeVariable()) {
-						ConstraintVariable2 methodTypeVariableCv= (ConstraintVariable2) methodTypeVariables.get(typeArgument.getBindingKey());
+						ConstraintVariable2 methodTypeVariableCv= methodTypeVariables.get(typeArgument.getBindingKey());
 						if (methodTypeVariableCv != null) {
 							//e.g. in Collections: <T> List<T> synchronizedList(List<T> list)
 							fTCModel.createEqualsConstraint(argElementCv, methodTypeVariableCv);
@@ -701,7 +722,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 				//TODO: check methodBinding.isVarargs() !
 				TType declaredElementType= ((org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType) declaredParameterType).getElementType();
 				if (declaredElementType.isTypeVariable()) {
-					ConstraintVariable2 methodTypeVariableCv= (ConstraintVariable2) methodTypeVariables.get(declaredElementType.getBindingKey());
+					ConstraintVariable2 methodTypeVariableCv= methodTypeVariables.get(declaredElementType.getBindingKey());
 					if (methodTypeVariableCv != null) {
 						ArrayElementVariable2 argElementCv= fTCModel.getArrayElementVariable(argCv);
 						//e.g. in Arrays: <T> List<T> asList(T... a): //<T> List<T> asList(T[] a)
@@ -734,6 +755,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 			fTCModel.createSubtypeConstraint(paramElementCv, argElementCv);
 	}
 
+	@Override
 	public void endVisit(ClassInstanceCreation node) {
 		Expression receiver= node.getExpression();
 		Type createdType= node.getType();
@@ -748,11 +770,12 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		setConstraintVariable(node, typeCv);
 
 		IMethodBinding methodBinding= node.resolveConstructorBinding();
-		Map methodTypeVariables= createMethodTypeArguments(methodBinding);
-		List arguments= node.arguments();
+		Map<String, IndependentTypeVariable2> methodTypeVariables= createMethodTypeArguments(methodBinding);
+		List<Expression> arguments= node.arguments();
 		doVisitMethodInvocationArguments(methodBinding, arguments, receiver, methodTypeVariables, createdType);
 	}
 
+	@Override
 	public void endVisit(ArrayCreation node) {
 		ArrayType arrayType= node.getType();
 		TypeVariable2 arrayTypeCv= (TypeVariable2) getConstraintVariable(arrayType);
@@ -762,6 +785,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		//TODO: constraints for array initializer?
 	}
 
+	@Override
 	public void endVisit(ReturnStatement node) {
 		Expression expression= node.getExpression();
 		if (expression == null)
@@ -783,6 +807,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		fTCModel.createElementEqualsConstraints(returnTypeCv, expressionCv);
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationExpression node) {
 		// Constrain the types of the child VariableDeclarationFragments to be equal to one
 		// another, since the initializers in a 'for' statement can only have one type.
@@ -794,14 +819,15 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 
 		setConstraintVariable(node, typeCv);
 
-		List fragments= node.fragments();
-		for (Iterator iter= fragments.iterator(); iter.hasNext();) {
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) iter.next();
+		List<VariableDeclarationFragment> fragments= node.fragments();
+		for (Iterator<VariableDeclarationFragment> iter= fragments.iterator(); iter.hasNext();) {
+			VariableDeclarationFragment fragment= iter.next();
 			ConstraintVariable2 fragmentCv= getConstraintVariable(fragment);
 			fTCModel.createElementEqualsConstraints(typeCv, fragmentCv);
 		}
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationStatement node) {
 		// TODO: in principle, no need to tie the VariableDeclarationFragments together.
 		// The VariableDeclarationExpression can be split up when fragments get different types.
@@ -809,6 +835,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		endVisitFieldVariableDeclaration(node.getType(), node.fragments());
 	}
 
+	@Override
 	public void endVisit(FieldDeclaration node) {
 		// TODO: in principle, no need to tie the VariableDeclarationFragments together.
 		// The FieldDeclaration can be split up when fragments get different types.
@@ -816,18 +843,19 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		endVisitFieldVariableDeclaration(node.getType(), node.fragments());
 	}
 
-	private void endVisitFieldVariableDeclaration(Type type, List variableDeclarationFragments) {
+	private void endVisitFieldVariableDeclaration(Type type, List<VariableDeclarationFragment> list) {
 		ConstraintVariable2 typeCv= getConstraintVariable(type);
 		if (typeCv == null)
 			return;
 
-		for (Iterator iter= variableDeclarationFragments.iterator(); iter.hasNext();) {
-			VariableDeclarationFragment fragment= (VariableDeclarationFragment) iter.next();
+		for (Iterator<VariableDeclarationFragment> iter= list.iterator(); iter.hasNext();) {
+			VariableDeclarationFragment fragment= iter.next();
 			ConstraintVariable2 fragmentCv= getConstraintVariable(fragment);
 			fTCModel.createElementEqualsConstraints(typeCv, fragmentCv);
 		}
 	}
 
+	@Override
 	public void endVisit(SingleVariableDeclaration node) {
 		// used for formal method parameters and catch clauses
 		//TODO: extra dimensions?
@@ -868,6 +896,7 @@ public class InferTypeArgumentsConstraintCreator extends HierarchicalASTVisitor
 		//fTCFactory.createSubtypeConstraint(initializerCv, nameCv); //TODO: not for augment raw container clients
 	}
 
+	@Override
 	public void endVisit(VariableDeclarationFragment node) {
 		VariableVariable2 cv= fTCModel.makeDeclaredVariableVariable(node.resolveBinding(), fCU);
 		if (cv == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java
index 6d6b0e2..6b00a4b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,13 +28,11 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.SubProgressMonitor;
 
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.JavaModelException;
 
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.HierarchyType;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
-import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TypeEnvironment;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.EnumeratedTypeSet;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.SingletonTypeSet;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet;
@@ -52,9 +50,9 @@ import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.TypeEquivale
 
 public class InferTypeArgumentsConstraintsSolver {
 
-	private static class TTypeComparator implements Comparator {
-		public int compare(Object o1, Object o2) {
-			return ((TType) o1).getPrettySignature().compareTo(((TType) o2).getPrettySignature());
+	private static class TTypeComparator implements Comparator<TType> {
+		public int compare(TType o1, TType o2) {
+			return o1.getPrettySignature().compareTo(o2.getPrettySignature());
 		}
 		public static TTypeComparator INSTANCE= new TTypeComparator();
 	}
@@ -69,14 +67,14 @@ public class InferTypeArgumentsConstraintsSolver {
 	 * nodes in the constraint graph that remain to be (re-)processed. Entries
 	 * are <code>ConstraintVariable2</code>s.
 	 */
-	private LinkedList/*<ConstraintVariable2>*/ fWorkList;
+	private LinkedList<ConstraintVariable2> fWorkList;
 
 	private InferTypeArgumentsUpdate fUpdate;
 
 
 	public InferTypeArgumentsConstraintsSolver(InferTypeArgumentsTCModel typeConstraintFactory) {
 		fTCModel= typeConstraintFactory;
-		fWorkList= new LinkedList();
+		fWorkList= new LinkedList<ConstraintVariable2>();
 	}
 
 	public InferTypeArgumentsUpdate solveConstraints(IProgressMonitor pm) {
@@ -89,23 +87,23 @@ public class InferTypeArgumentsConstraintsSolver {
 
 		fTypeSetEnvironment= new TypeSetEnvironment(fTCModel.getTypeEnvironment());
 		ParametricStructureComputer parametricStructureComputer= new ParametricStructureComputer(allConstraintVariables, fTCModel);
-		Collection/*<CollectionElementVariable2>*/ newVars= parametricStructureComputer.createElemConstraintVariables();
+		Collection<CollectionElementVariable2> newVars= parametricStructureComputer.createElemConstraintVariables();
 
-		ArrayList newAllConstraintVariables= new ArrayList();
+		ArrayList<ConstraintVariable2> newAllConstraintVariables= new ArrayList<ConstraintVariable2>();
 		newAllConstraintVariables.addAll(Arrays.asList(allConstraintVariables));
 		newAllConstraintVariables.addAll(newVars);
-		allConstraintVariables= (ConstraintVariable2[]) newAllConstraintVariables.toArray(new ConstraintVariable2[newAllConstraintVariables.size()]);
+		allConstraintVariables= newAllConstraintVariables.toArray(new ConstraintVariable2[newAllConstraintVariables.size()]);
 
 
 		//loop over all TypeEquivalenceSets and unify the elements from the fElemStructureEnv with the existing TypeEquivalenceSets
-		HashSet allTypeEquivalenceSets= new HashSet();
+		HashSet<TypeEquivalenceSet> allTypeEquivalenceSets= new HashSet<TypeEquivalenceSet>();
 		for (int i= 0; i < allConstraintVariables.length; i++) {
 			TypeEquivalenceSet typeEquivalenceSet= allConstraintVariables[i].getTypeEquivalenceSet();
 			if (typeEquivalenceSet != null)
 				allTypeEquivalenceSets.add(typeEquivalenceSet);
 		}
-		for (Iterator iter= allTypeEquivalenceSets.iterator(); iter.hasNext();) {
-			TypeEquivalenceSet typeEquivalenceSet= (TypeEquivalenceSet) iter.next();
+		for (Iterator<TypeEquivalenceSet> iter= allTypeEquivalenceSets.iterator(); iter.hasNext();) {
+			TypeEquivalenceSet typeEquivalenceSet= iter.next();
 			ConstraintVariable2[] contributingVariables= typeEquivalenceSet.getContributingVariables();
 			for (int i= 0; i < contributingVariables.length; i++) {
 				for (int j= i + 1; j < contributingVariables.length; j++) {
@@ -196,9 +194,9 @@ public class InferTypeArgumentsConstraintsSolver {
 		pm.beginTask("", fWorkList.size() * 3); //$NON-NLS-1$
 		while (! fWorkList.isEmpty()) {
 			// Get a variable whose type estimate has changed
-			ConstraintVariable2 cv= (ConstraintVariable2) fWorkList.removeFirst();
-			List/*<ITypeConstraint2>*/ usedIn= fTCModel.getUsedIn(cv);
-			processConstraints(usedIn, cv);
+			ConstraintVariable2 cv= fWorkList.removeFirst();
+			List<ITypeConstraint2> usedIn= fTCModel.getUsedIn(cv);
+			processConstraints(usedIn);
 			pm.worked(1);
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
@@ -214,14 +212,13 @@ public class InferTypeArgumentsConstraintsSolver {
 	 *
 	 * @param usedIn the <code>List</code> of <code>ITypeConstraint2</code>s
 	 * to process
-	 * @param changedCv the constraint variable whose type bound has changed
 	 */
-	private void processConstraints(List/*<ITypeConstraint2>*/ usedIn, ConstraintVariable2 changedCv) {
-		int i= 0;
-		for (Iterator iter= usedIn.iterator(); iter.hasNext(); i++) {
-			ITypeConstraint2 tc= (ITypeConstraint2) iter.next();
+	private void processConstraints(List<ITypeConstraint2> usedIn) {
+		Iterator<ITypeConstraint2> iter= usedIn.iterator();
+		while (iter.hasNext()) {
+			ITypeConstraint2 tc= iter.next();
 
-				maintainSimpleConstraint(changedCv, tc);
+				maintainSimpleConstraint(tc);
 				//TODO: prune tcs which cannot cause further changes
 				// Maybe these should be pruned after a special first loop over all ConstraintVariables,
 				// Since this can only happen once for every CV in the work list.
@@ -230,7 +227,7 @@ public class InferTypeArgumentsConstraintsSolver {
 		}
 	}
 
-	private void maintainSimpleConstraint(ConstraintVariable2 changedCv, ITypeConstraint2 stc) {
+	private void maintainSimpleConstraint(ITypeConstraint2 stc) {
 		ConstraintVariable2 left= stc.getLeft();
 		ConstraintVariable2 right= stc.getRight();
 
@@ -301,14 +298,14 @@ public class InferTypeArgumentsConstraintsSolver {
 
 		} else {
 			EnumeratedTypeSet lowerBound= typeEstimate.lowerBound().enumerate();
-			ArrayList/*<TType>*/ interfaceCandidates= null;
-			for (Iterator iter= lowerBound.iterator(); iter.hasNext();) {
-				TType type= (TType) iter.next();
+			ArrayList<TType> interfaceCandidates= null;
+			for (Iterator<TType> iter= lowerBound.iterator(); iter.hasNext();) {
+				TType type= iter.next();
 				if (! type.isInterface()) {
 					return type;
 				} else {
 					if (interfaceCandidates == null)
-						interfaceCandidates= new ArrayList(2);
+						interfaceCandidates= new ArrayList<TType>(2);
 					interfaceCandidates.add(type);
 				}
 			}
@@ -316,32 +313,33 @@ public class InferTypeArgumentsConstraintsSolver {
 			if (interfaceCandidates == null || interfaceCandidates.size() == 0) {
 				return null;
 			} else if (interfaceCandidates.size() == 1) {
-				return (TType) interfaceCandidates.get(0);
+				return interfaceCandidates.get(0);
 			} else {
-				ArrayList nontaggingCandidates= getNonTaggingInterfaces(interfaceCandidates);
+				ArrayList<TType> nontaggingCandidates= getNonTaggingInterfaces(interfaceCandidates);
 				if (nontaggingCandidates.size() != 0) {
-					return (TType) Collections.min(nontaggingCandidates, TTypeComparator.INSTANCE);
+					return Collections.min(nontaggingCandidates, TTypeComparator.INSTANCE);
 				} else {
-					return (TType) Collections.min(interfaceCandidates, TTypeComparator.INSTANCE);
+					return Collections.min(interfaceCandidates, TTypeComparator.INSTANCE);
 				}
 			}
 		}
 	}
 
 	private static final int MAX_CACHE= 1024;
-	private Map/*<TType, Boolean>*/ fInterfaceTaggingCache= new LinkedHashMap(MAX_CACHE, 0.75f, true) {
+	private Map<TType, Boolean> fInterfaceTaggingCache= new LinkedHashMap<TType, Boolean>(MAX_CACHE, 0.75f, true) {
 		private static final long serialVersionUID= 1L;
-		protected boolean removeEldestEntry(Map.Entry eldest) {
+		@Override
+		protected boolean removeEldestEntry(Map.Entry<TType, Boolean> eldest) {
 			return size() > MAX_CACHE;
 		}
 	};
 
-	private ArrayList getNonTaggingInterfaces(ArrayList interfaceCandidates) {
-		ArrayList unresolvedTypes= new ArrayList();
-		ArrayList nonTagging= new ArrayList();
+	private ArrayList<TType> getNonTaggingInterfaces(ArrayList<TType> interfaceCandidates) {
+		ArrayList<TType> unresolvedTypes= new ArrayList<TType>();
+		ArrayList<TType> nonTagging= new ArrayList<TType>();
 
 		for (int i= 0; i < interfaceCandidates.size(); i++) {
-			TType interf= (TType) interfaceCandidates.get(i);
+			TType interf= interfaceCandidates.get(i);
 			Object isTagging= fInterfaceTaggingCache.get(interf);
 			if (isTagging == null)
 				unresolvedTypes.add(interf);
@@ -350,16 +348,14 @@ public class InferTypeArgumentsConstraintsSolver {
 		}
 
 		if (unresolvedTypes.size() != 0) {
-			TType[] interfaces= (TType[]) unresolvedTypes.toArray(new TType[unresolvedTypes.size()]);
-			HierarchyType firstInterface= (HierarchyType) interfaces[0];
-			IJavaProject javaProject= firstInterface.getJavaElementType().getJavaProject();
-			ITypeBinding[] interfaceBindings= TypeEnvironment.createTypeBindings(interfaces, javaProject); //expensive...
-			for (int i= 0; i < interfaceBindings.length; i++) {
-				if (interfaceBindings[i].getDeclaredMethods().length == 0) {
-					fInterfaceTaggingCache.put(interfaces[i], Boolean.TRUE);
+			TType[] interfaces= unresolvedTypes.toArray(new TType[unresolvedTypes.size()]);
+			for (int i= 0; i < interfaces.length; i++) {
+				TType interf= interfaces[i];
+				if (isTaggingInterface(interf)) {
+					fInterfaceTaggingCache.put(interf, Boolean.TRUE);
 				} else {
-					fInterfaceTaggingCache.put(interfaces[i], Boolean.FALSE);
-					nonTagging.add(interfaces[i]);
+					fInterfaceTaggingCache.put(interf, Boolean.FALSE);
+					nonTagging.add(interf);
 				}
 			}
 		}
@@ -367,6 +363,17 @@ public class InferTypeArgumentsConstraintsSolver {
 		return nonTagging;
 	}
 
+	private static boolean isTaggingInterface(TType interf) {
+		if (interf instanceof HierarchyType) {
+			try {
+				return ((HierarchyType) interf).getJavaElementType().getMethods().length == 0;
+			} catch (JavaModelException e) {
+				// assume it's not
+			}
+		}
+		return false;
+	}
+
 	private void findCastsToRemove(CastVariable2[] castVariables) {
 		for (int i= 0; i < castVariables.length; i++) {
 			CastVariable2 castCv= castVariables[i];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java
index 0fbe488..1f8047c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,8 +17,8 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -43,7 +43,6 @@ import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
@@ -91,6 +90,7 @@ import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.IJavaStatusConstants;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 public class InferTypeArgumentsRefactoring extends Refactoring {
@@ -124,6 +124,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#getName()
 	 */
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.InferTypeArgumentsRefactoring_name;
 	}
@@ -147,6 +148,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		RefactoringStatus result= check15();
 		pm.done();
@@ -156,20 +158,21 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(final IProgressMonitor pm) throws CoreException, OperationCanceledException {
-		HashMap/*<IJavaProject, List<JavaElement>>*/ projectsToElements= getJavaElementsPerProject(fElements);
+		HashMap<IJavaProject, ArrayList<IJavaElement>> projectsToElements= getJavaElementsPerProject(fElements);
 		pm.beginTask("", projectsToElements.size() + 2); //$NON-NLS-1$
 		final RefactoringStatus result= new RefactoringStatus();
 		try {
 			fTCModel= new InferTypeArgumentsTCModel();
 			final InferTypeArgumentsConstraintCreator unitCollector= new InferTypeArgumentsConstraintCreator(fTCModel, fAssumeCloneReturnsSameType);
 
-			for (Iterator iter= projectsToElements.entrySet().iterator(); iter.hasNext(); ) {
-				Entry entry= (Entry) iter.next();
-				IJavaProject project= (IJavaProject) entry.getKey();
-				List javaElementsList= (List) entry.getValue();
-				IJavaElement[] javaElements= (IJavaElement[]) javaElementsList.toArray(new IJavaElement[javaElementsList.size()]);
-				List cus= Arrays.asList(JavaModelUtil.getAllCompilationUnits(javaElements));
+			for (Iterator<Entry<IJavaProject, ArrayList<IJavaElement>>> iter= projectsToElements.entrySet().iterator(); iter.hasNext(); ) {
+				Entry<IJavaProject, ArrayList<IJavaElement>> entry= iter.next();
+				IJavaProject project= entry.getKey();
+				ArrayList<IJavaElement> javaElementsList= entry.getValue();
+				IJavaElement[] javaElements= javaElementsList.toArray(new IJavaElement[javaElementsList.size()]);
+				List<ICompilationUnit> cus= Arrays.asList(JavaModelUtil.getAllCompilationUnits(javaElements));
 
 				int batchSize= 150;
 				int batches= ((cus.size()-1) / batchSize) + 1;
@@ -177,16 +180,17 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 				projectMonitor.beginTask("", batches); //$NON-NLS-1$
 				projectMonitor.setTaskName(RefactoringCoreMessages.InferTypeArgumentsRefactoring_building);
 				for (int i= 0; i < batches; i++) {
-					List batch= cus.subList(i * batchSize, Math.min(cus.size(), (i + 1) * batchSize));
-					ICompilationUnit[] batchCus= (ICompilationUnit[]) batch.toArray(new ICompilationUnit[batch.size()]);
+					List<ICompilationUnit> batch= cus.subList(i * batchSize, Math.min(cus.size(), (i + 1) * batchSize));
+					ICompilationUnit[] batchCus= batch.toArray(new ICompilationUnit[batch.size()]);
 					final SubProgressMonitor batchMonitor= new SubProgressMonitor(projectMonitor, 1);
 					batchMonitor.subTask(RefactoringCoreMessages.InferTypeArgumentsRefactoring_calculating_dependencies);
 
-					ASTParser parser= ASTParser.newParser(AST.JLS3);
+					ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 					parser.setProject(project);
 					parser.setCompilerOptions(RefactoringASTParser.getCompilerOptions(project));
 					parser.setResolveBindings(true);
 					parser.createASTs(batchCus, new String[0], new ASTRequestor() {
+						@Override
 						public void acceptAST(final ICompilationUnit source, final CompilationUnit ast) {
 							batchMonitor.subTask(BasicElementLabels.getFileName(source));
 
@@ -214,6 +218,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 
 							fTCModel.newCu();
 						}
+						@Override
 						public void acceptBinding(String bindingKey, IBinding binding) {
 							//do nothing
 						}
@@ -253,14 +258,14 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 		fTCModel= null;
 	}
 
-	private HashMap getJavaElementsPerProject(IJavaElement[] elements) {
-		HashMap/*<IJavaProject, List<JavaElement>>*/ result= new HashMap/*<IJavaProject, List<JavaElement>>*/();
+	private HashMap<IJavaProject, ArrayList<IJavaElement>> getJavaElementsPerProject(IJavaElement[] elements) {
+		HashMap<IJavaProject, ArrayList<IJavaElement>> result= new HashMap<IJavaProject, ArrayList<IJavaElement>>();
 		for (int i= 0; i < elements.length; i++) {
 			IJavaElement element= elements[i];
 			IJavaProject javaProject= element.getJavaProject();
-			ArrayList javaElements= (ArrayList) result.get(javaProject);
+			ArrayList<IJavaElement> javaElements= result.get(javaProject);
 			if (javaElements == null) {
-				javaElements= new ArrayList();
+				javaElements= new ArrayList<IJavaElement>();
 				result.put(javaProject, javaElements);
 			}
 			javaElements.add(element);
@@ -270,7 +275,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 
 	private RefactoringStatus check15() throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
-		HashSet/*<IJavaProject>*/ checkedProjects= new HashSet/*<IJavaProject>*/();
+		HashSet<IJavaProject> checkedProjects= new HashSet<IJavaProject>();
 
 		for (int i= 0; i < fElements.length; i++) {
 			IJavaProject javaProject= fElements[i].getJavaProject();
@@ -289,31 +294,31 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 	}
 
 	private void rewriteDeclarations(InferTypeArgumentsUpdate update, IProgressMonitor pm) throws CoreException {
-		HashMap/*<ICompilationUnit, CuUpdate>*/ updates= update.getUpdates();
+		HashMap<ICompilationUnit, CuUpdate> updates= update.getUpdates();
 
-		Set entrySet= updates.entrySet();
+		Set<Entry<ICompilationUnit, CuUpdate>> entrySet= updates.entrySet();
 		pm.beginTask("", entrySet.size()); //$NON-NLS-1$
 		pm.setTaskName(RefactoringCoreMessages.InferTypeArgumentsRefactoring_creatingChanges);
-		for (Iterator iter= entrySet.iterator(); iter.hasNext();) {
+		for (Iterator<Entry<ICompilationUnit, CuUpdate>> iter= entrySet.iterator(); iter.hasNext();) {
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
 
-			Map.Entry entry= (Map.Entry) iter.next();
-			ICompilationUnit cu= (ICompilationUnit) entry.getKey();
+			Entry<ICompilationUnit, CuUpdate> entry= iter.next();
+			ICompilationUnit cu= entry.getKey();
 			pm.worked(1);
 			pm.subTask(BasicElementLabels.getFileName(cu));
 
 			CompilationUnitRewrite rewrite= new CompilationUnitRewrite(cu);
 			rewrite.setResolveBindings(false);
-			CuUpdate cuUpdate= (CuUpdate) entry.getValue();
+			CuUpdate cuUpdate= entry.getValue();
 
-			for (Iterator cvIter= cuUpdate.getDeclarations().iterator(); cvIter.hasNext();) {
-				ConstraintVariable2 cv= (ConstraintVariable2) cvIter.next();
+			for (Iterator<CollectionElementVariable2> cvIter= cuUpdate.getDeclarations().iterator(); cvIter.hasNext();) {
+				ConstraintVariable2 cv= cvIter.next();
 				rewriteConstraintVariable(cv, rewrite, fTCModel, fLeaveUnconstrainedRaw, null);
 			}
 
-			for (Iterator castsIter= cuUpdate.getCastsToRemove().iterator(); castsIter.hasNext();) {
-				CastVariable2 castCv= (CastVariable2) castsIter.next();
+			for (Iterator<CastVariable2> castsIter= cuUpdate.getCastsToRemove().iterator(); castsIter.hasNext();) {
+				CastVariable2 castCv= castsIter.next();
 				rewriteCastVariable(castCv, rewrite, fTCModel);
 			}
 
@@ -329,24 +334,24 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 		for (int i= 0; i < types.length; i++) {
 			types[i].setProperty(REWRITTEN, null);
 		}
-		List result= new ArrayList();
-		HashMap/*<ICompilationUnit, CuUpdate>*/ updates= update.getUpdates();
-		Set entrySet= updates.entrySet();
-		for (Iterator iter= entrySet.iterator(); iter.hasNext();) {
+		List<ParameterizedType> result= new ArrayList<ParameterizedType>();
+		HashMap<ICompilationUnit, CuUpdate> updates= update.getUpdates();
+		Set<Entry<ICompilationUnit, CuUpdate>> entrySet= updates.entrySet();
+		for (Iterator<Entry<ICompilationUnit, CuUpdate>> iter= entrySet.iterator(); iter.hasNext();) {
 
-			Map.Entry entry= (Map.Entry) iter.next();
+			Entry<ICompilationUnit, CuUpdate> entry= iter.next();
 
 			rewrite.setResolveBindings(false);
-			CuUpdate cuUpdate= (CuUpdate) entry.getValue();
+			CuUpdate cuUpdate= entry.getValue();
 
-			for (Iterator cvIter= cuUpdate.getDeclarations().iterator(); cvIter.hasNext();) {
-				ConstraintVariable2 cv= (ConstraintVariable2) cvIter.next();
+			for (Iterator<CollectionElementVariable2> cvIter= cuUpdate.getDeclarations().iterator(); cvIter.hasNext();) {
+				ConstraintVariable2 cv= cvIter.next();
 				ParameterizedType newNode= rewriteConstraintVariable(cv, rewrite, model, false, types);
 				if (newNode != null)
 					result.add(newNode);
 			}
 		}
-		return (ParameterizedType[])result.toArray(new ParameterizedType[result.size()]);
+		return result.toArray(new ParameterizedType[result.size()]);
 	}
 
 	private static ParameterizedType rewriteConstraintVariable(ConstraintVariable2 cv, CompilationUnitRewrite rewrite, InferTypeArgumentsTCModel tCModel, boolean leaveUnconstraindRaw, SimpleType[] types) {
@@ -376,7 +381,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 				return null;
 			originalType.setProperty(REWRITTEN, REWRITTEN);
 
-			ArrayList typeArgumentCvs= getTypeArgumentCvs(typeCv, tCModel);
+			ArrayList<CollectionElementVariable2> typeArgumentCvs= getTypeArgumentCvs(typeCv, tCModel);
 			Type[] typeArguments= getTypeArguments(originalType, typeArgumentCvs, rewrite, tCModel, leaveUnconstraindRaw);
 			if (typeArguments == null)
 				return null;
@@ -412,13 +417,13 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 	 *            <code>false</code> to infer <code><?></code> if possible
 	 * @return the new type arguments, or <code>null</code> iff an argument could not be inferred
 	 */
-	private static Type[] getTypeArguments(Type baseType, ArrayList typeArgumentCvs, CompilationUnitRewrite rewrite, InferTypeArgumentsTCModel tCModel, boolean leaveUnconstraindRaw) {
+	private static Type[] getTypeArguments(Type baseType, ArrayList<CollectionElementVariable2> typeArgumentCvs, CompilationUnitRewrite rewrite, InferTypeArgumentsTCModel tCModel, boolean leaveUnconstraindRaw) {
 		if (typeArgumentCvs.size() == 0)
 			return null;
 
 		Type[] typeArguments= new Type[typeArgumentCvs.size()];
 		for (int i= 0; i < typeArgumentCvs.size(); i++) {
-			CollectionElementVariable2 elementCv= (CollectionElementVariable2) typeArgumentCvs.get(i);
+			CollectionElementVariable2 elementCv= typeArgumentCvs.get(i);
 			Type typeArgument;
 			TType chosenType= InferTypeArgumentsConstraintsSolver.getChosenType(elementCv);
 			if (chosenType != null) {
@@ -428,7 +433,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 					chosenType= chosenType.getTypeDeclaration();
 				BindingKey bindingKey= new BindingKey(chosenType.getBindingKey());
 				typeArgument= rewrite.getImportRewrite().addImportFromSignature(bindingKey.toSignature(), rewrite.getAST());
-				ArrayList nestedTypeArgumentCvs= getTypeArgumentCvs(elementCv, tCModel);
+				ArrayList<CollectionElementVariable2> nestedTypeArgumentCvs= getTypeArgumentCvs(elementCv, tCModel);
 				Type[] nestedTypeArguments= getTypeArguments(typeArgument, nestedTypeArgumentCvs, rewrite, tCModel, leaveUnconstraindRaw); //recursion
 				if (nestedTypeArguments != null) {
 					ParameterizedType parameterizedType= rewrite.getAST().newParameterizedType(typeArgument);
@@ -466,11 +471,11 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 		return typeArguments;
 	}
 
-	private static ArrayList/*<CollectionElementVariable2>*/ getTypeArgumentCvs(ConstraintVariable2 baseCv, InferTypeArgumentsTCModel tCModel) {
-		Map elementCvs= tCModel.getElementVariables(baseCv);
-		ArrayList typeArgumentCvs= new ArrayList();
-		for (Iterator iter= elementCvs.values().iterator(); iter.hasNext();) {
-			CollectionElementVariable2 elementCv= (CollectionElementVariable2) iter.next();
+	private static ArrayList<CollectionElementVariable2> getTypeArgumentCvs(ConstraintVariable2 baseCv, InferTypeArgumentsTCModel tCModel) {
+		Map<String, CollectionElementVariable2> elementCvs= tCModel.getElementVariables(baseCv);
+		ArrayList<CollectionElementVariable2> typeArgumentCvs= new ArrayList<CollectionElementVariable2>();
+		for (Iterator<CollectionElementVariable2> iter= elementCvs.values().iterator(); iter.hasNext();) {
+			CollectionElementVariable2 elementCv= iter.next();
 			int index= elementCv.getDeclarationTypeVariableIndex();
 			if (index != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX) {
 				while (index >= typeArgumentCvs.size())
@@ -526,9 +531,9 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 	}
 
 	private static boolean hasUnboundElement(ConstraintVariable2 methodReceiverCv, InferTypeArgumentsTCModel tCModel) {
-		ArrayList/*<CollectionElementVariable2>*/ typeArgumentCvs= getTypeArgumentCvs(methodReceiverCv, tCModel);
-		for (Iterator iter= typeArgumentCvs.iterator(); iter.hasNext();) {
-			CollectionElementVariable2 elementCv= (CollectionElementVariable2) iter.next();
+		ArrayList<CollectionElementVariable2> typeArgumentCvs= getTypeArgumentCvs(methodReceiverCv, tCModel);
+		for (Iterator<CollectionElementVariable2> iter= typeArgumentCvs.iterator(); iter.hasNext();) {
+			CollectionElementVariable2 elementCv= iter.next();
 			TType chosenElementType= InferTypeArgumentsConstraintsSolver.getChosenType(elementCv);
 			if (chosenElementType == null)
 				return true;
@@ -539,13 +544,15 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		pm.beginTask("", 1); //$NON-NLS-1$
 		try {
 			DynamicValidationStateChange result= new DynamicValidationStateChange(RefactoringCoreMessages.InferTypeArgumentsRefactoring_name, fChangeManager.getAllChanges()) {
 
+				@Override
 				public final ChangeDescriptor getDescriptor() {
-					final Map arguments= new HashMap();
+					final Map<String, String> arguments= new HashMap<String, String>();
 					final IJavaProject project= getSingleProject();
 					final String description= RefactoringCoreMessages.InferTypeArgumentsRefactoring_descriptor_description;
 					final String header= project != null ? Messages.format(RefactoringCoreMessages.InferTypeArgumentsRefactoring_descriptor_description_project, BasicElementLabels.getJavaElementName(project.getElementName())) : RefactoringCoreMessages.InferTypeArgumentsRefactoring_descriptor_description;
@@ -599,7 +606,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_LEAVE));
 		int count= 1;
-		final List elements= new ArrayList();
+		final List<IJavaElement> elements= new ArrayList<IJavaElement>();
 		String handle= null;
 		String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		final RefactoringStatus status= new RefactoringStatus();
@@ -612,7 +619,7 @@ public class InferTypeArgumentsRefactoring extends Refactoring {
 			count++;
 			attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		}
-		fElements= (IJavaElement[]) elements.toArray(new IJavaElement[elements.size()]);
+		fElements= elements.toArray(new IJavaElement[elements.size()]);
 		if (elements.isEmpty())
 			return JavaRefactoringDescriptorUtil.createInputFatalStatus(null, getName(), IJavaRefactorings.INFER_TYPE_ARGUMENTS);
 		if (!status.isOK())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java
index 3a5517d..c915bef 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
@@ -68,39 +69,40 @@ public class InferTypeArgumentsTCModel {
 	private static final String ARRAY_ELEMENT= "ArrayElement"; //$NON-NLS-1$
 	private static final String USED_IN= "UsedIn"; //$NON-NLS-1$
 	private static final String METHOD_RECEIVER= "MethodReceiver"; //$NON-NLS-1$
-	private static final Map EMPTY_COLLECTION_ELEMENT_VARIABLES_MAP= Collections.EMPTY_MAP;
+	private static final Map<String, CollectionElementVariable2> EMPTY_COLLECTION_ELEMENT_VARIABLES_MAP= Collections.emptyMap();
 
 	protected static boolean fStoreToString= DEBUG;
 
 	/**
 	 * Map from a {@link ConstraintVariable2} to itself.
 	 */
-	private HashMap/*<ConstraintVariable2, ConstraintVariable2>*/ fConstraintVariables;
+	private HashMap<ConstraintVariable2, ConstraintVariable2> fConstraintVariables;
 	/**
 	 * Map from a {@link ITypeConstraint2} to itself.
 	 */
-	private HashMap/*<ITypeConstraint2, ITypeConstraint2>*/ fTypeConstraints;
-	private Collection/*CastVariable2*/ fCastVariables;
+	private HashMap<ITypeConstraint2, ITypeConstraint2> fTypeConstraints;
+	private Collection<CastVariable2> fCastVariables;
 
-	private HashSet fCuScopedConstraintVariables;
+	private HashSet<ConstraintVariable2> fCuScopedConstraintVariables;
 
 	private TypeEnvironment fTypeEnvironment;
 
 	private static final int MAX_TTYPE_CACHE= 1024;
-	private Map/*<String, TType>*/ fTTypeCache= new LinkedHashMap(MAX_TTYPE_CACHE, 0.75f, true) {
+	private Map<String, TType> fTTypeCache= new LinkedHashMap<String, TType>(MAX_TTYPE_CACHE, 0.75f, true) {
 		private static final long serialVersionUID= 1L;
-		protected boolean removeEldestEntry(Map.Entry eldest) {
+		@Override
+		protected boolean removeEldestEntry(Map.Entry<String, TType> eldest) {
 			return size() > MAX_TTYPE_CACHE;
 		}
 	};
 
 
 	public InferTypeArgumentsTCModel() {
-		fTypeConstraints= new HashMap();
-		fConstraintVariables= new LinkedHashMap(); // make iteration independent of hashCode() implementation
-		fCastVariables= new ArrayList();
+		fTypeConstraints= new HashMap<ITypeConstraint2, ITypeConstraint2>();
+		fConstraintVariables= new LinkedHashMap<ConstraintVariable2, ConstraintVariable2>(); // make iteration independent of hashCode() implementation
+		fCastVariables= new ArrayList<CastVariable2>();
 
-		fCuScopedConstraintVariables= new HashSet();
+		fCuScopedConstraintVariables= new HashSet<ConstraintVariable2>();
 
 		fTypeEnvironment= new TypeEnvironment(true);
 	}
@@ -144,14 +146,15 @@ public class InferTypeArgumentsTCModel {
 	 * @param cv
 	 * @return a List of ITypeConstraint2s where cv is used
 	 */
-	public List/*<ITypeConstraint2>*/ getUsedIn(ConstraintVariable2 cv) {
+	@SuppressWarnings("unchecked")
+	public List<ITypeConstraint2> getUsedIn(ConstraintVariable2 cv) {
 		Object usedIn= cv.getData(USED_IN);
 		if (usedIn == null)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 		else if (usedIn instanceof ArrayList)
-			return Collections.unmodifiableList((ArrayList) usedIn);
+			return Collections.unmodifiableList((ArrayList<ITypeConstraint2>) usedIn);
 		else
-			return Collections.singletonList(usedIn);
+			return Collections.singletonList((ITypeConstraint2) usedIn);
 	}
 
 	public void newCu() {
@@ -161,8 +164,8 @@ public class InferTypeArgumentsTCModel {
 	}
 
 	private void pruneUnusedCuScopedCvs() {
-		for (Iterator iter= fCuScopedConstraintVariables.iterator(); iter.hasNext();) {
-			ConstraintVariable2 cv= (ConstraintVariable2) iter.next();
+		for (Iterator<ConstraintVariable2> iter= fCuScopedConstraintVariables.iterator(); iter.hasNext();) {
+			ConstraintVariable2 cv= iter.next();
 			pruneCvIfUnused(cv);
 		}
 	}
@@ -180,9 +183,9 @@ public class InferTypeArgumentsTCModel {
 		if (arrayElementVariable != null && ! pruneCvIfUnused(arrayElementVariable))
 			return false;
 
-		Map elementVariables= getElementVariables(cv);
-		for (Iterator iter= elementVariables.values().iterator(); iter.hasNext();) {
-			CollectionElementVariable2 elementVariable= (CollectionElementVariable2) iter.next();
+		Map<String, CollectionElementVariable2> elementVariables= getElementVariables(cv);
+		for (Iterator<CollectionElementVariable2> iter= elementVariables.values().iterator(); iter.hasNext();) {
+			CollectionElementVariable2 elementVariable= iter.next();
 			if (! pruneCvIfUnused(elementVariable))
 				return false;
 		}
@@ -194,18 +197,18 @@ public class InferTypeArgumentsTCModel {
 	public ConstraintVariable2[] getAllConstraintVariables() {
 		ConstraintVariable2[] result= new ConstraintVariable2[fConstraintVariables.size()];
 		int i= 0;
-		for (Iterator iter= fConstraintVariables.keySet().iterator(); iter.hasNext(); i++)
-			result[i]= (ConstraintVariable2) iter.next();
+		for (Iterator<ConstraintVariable2> iter= fConstraintVariables.keySet().iterator(); iter.hasNext(); i++)
+			result[i]= iter.next();
 		return result;
 	}
 
 	public ITypeConstraint2[] getAllTypeConstraints() {
-		Set typeConstraints= fTypeConstraints.keySet();
-		return (ITypeConstraint2[]) typeConstraints.toArray(new ITypeConstraint2[typeConstraints.size()]);
+		Set<ITypeConstraint2> typeConstraints= fTypeConstraints.keySet();
+		return typeConstraints.toArray(new ITypeConstraint2[typeConstraints.size()]);
 	}
 
 	public CastVariable2[] getCastVariables() {
-		return (CastVariable2[]) fCastVariables.toArray(new CastVariable2[fCastVariables.size()]);
+		return fCastVariables.toArray(new CastVariable2[fCastVariables.size()]);
 	}
 
 	/**
@@ -252,11 +255,12 @@ public class InferTypeArgumentsTCModel {
 		if (usedIn == null) {
 			storedCv.setData(USED_IN, typeConstraint);
 		} else if (usedIn instanceof ArrayList) {
-			ArrayList usedInList= (ArrayList) usedIn;
+			@SuppressWarnings("unchecked")
+			ArrayList<ITypeConstraint2> usedInList= (ArrayList<ITypeConstraint2>) usedIn;
 			usedInList.add(typeConstraint);
 		} else {
-			ArrayList usedInList= new ArrayList(2);
-			usedInList.add(usedIn);
+			ArrayList<ITypeConstraint2> usedInList= new ArrayList<ITypeConstraint2>(2);
+			usedInList.add((ITypeConstraint2) usedIn);
 			usedInList.add(typeConstraint);
 			storedCv.setData(USED_IN, usedInList);
 		}
@@ -294,7 +298,7 @@ public class InferTypeArgumentsTCModel {
 
 	public TType createTType(ITypeBinding typeBinding) {
 		String key= typeBinding.getKey();
-		TType cached= (TType) fTTypeCache.get(key);
+		TType cached= fTTypeCache.get(key);
 		if (cached != null)
 			return cached;
 		TType type= fTypeEnvironment.create(typeBinding);
@@ -530,14 +534,14 @@ public class InferTypeArgumentsTCModel {
 
 	public CollectionElementVariable2 getElementVariable(ConstraintVariable2 constraintVariable, ITypeBinding typeVariable) {
 		Assert.isTrue(typeVariable.isTypeVariable()); // includes null check
-		HashMap typeVarToElementVars= (HashMap) constraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
+		HashMap<String, CollectionElementVariable2> typeVarToElementVars= (HashMap<String, CollectionElementVariable2>) constraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
 		if (typeVarToElementVars == null)
 			return null;
-		return (CollectionElementVariable2) typeVarToElementVars.get(typeVariable.getKey());
+		return typeVarToElementVars.get(typeVariable.getKey());
 	}
 
-	public Map/*<String typeVariableKey, CollectionElementVariable2>*/ getElementVariables(ConstraintVariable2 constraintVariable) {
-		Map elementVariables= (Map) constraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
+	public Map<String, CollectionElementVariable2> getElementVariables(ConstraintVariable2 constraintVariable) {
+		Map<String, CollectionElementVariable2> elementVariables= (Map<String, CollectionElementVariable2>) constraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
 		if (elementVariables == null)
 			return EMPTY_COLLECTION_ELEMENT_VARIABLES_MAP;
 		else
@@ -703,7 +707,7 @@ public class InferTypeArgumentsTCModel {
 	 * @param referenceCv the type constraint variable of a type reference
 	 * @param reference the declared type reference
 	 */
-	public void createTypeVariablesEqualityConstraints(ConstraintVariable2 expressionCv, Map/*<String, IndependentTypeVariable2>*/ methodTypeVariables, ConstraintVariable2 referenceCv, TType reference) {
+	public void createTypeVariablesEqualityConstraints(ConstraintVariable2 expressionCv, Map<String, IndependentTypeVariable2> methodTypeVariables, ConstraintVariable2 referenceCv, TType reference) {
 		if (reference.isParameterizedType() || reference.isRawType()) {
 			TType[] referenceTypeArguments= null;
 			if (reference.isParameterizedType()) {
@@ -761,9 +765,9 @@ public class InferTypeArgumentsTCModel {
 		}
 	}
 
-	private ConstraintVariable2 getElementTypeCv(TType elementType, ConstraintVariable2 expressionCv, Map methodTypeVariables) {
+	private ConstraintVariable2 getElementTypeCv(TType elementType, ConstraintVariable2 expressionCv, Map<String, IndependentTypeVariable2> methodTypeVariables) {
 		if (elementType.isTypeVariable()) {
-			ConstraintVariable2 elementTypeCv= (ConstraintVariable2) methodTypeVariables.get(elementType.getBindingKey());
+			ConstraintVariable2 elementTypeCv= methodTypeVariables.get(elementType.getBindingKey());
 			if (elementTypeCv != null)
 				return elementTypeCv;
 			if (expressionCv != null)
@@ -787,10 +791,10 @@ public class InferTypeArgumentsTCModel {
 	}
 
 	private void setElementVariable(ConstraintVariable2 typeConstraintVariable, CollectionElementVariable2 elementVariable, TypeVariable typeVariable) {
-		HashMap keyToElementVar= (HashMap) typeConstraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
+		HashMap<String, CollectionElementVariable2> keyToElementVar= (HashMap<String, CollectionElementVariable2>) typeConstraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
 		String key= typeVariable.getBindingKey();
 		if (keyToElementVar == null) {
-			keyToElementVar= new HashMap();
+			keyToElementVar= new HashMap<String, CollectionElementVariable2>();
 			typeConstraintVariable.setData(INDEXED_COLLECTION_ELEMENTS, keyToElementVar);
 		} else {
 			Object existingElementVar= keyToElementVar.get(key);
@@ -803,10 +807,10 @@ public class InferTypeArgumentsTCModel {
 
 	public CollectionElementVariable2 getElementVariable(ConstraintVariable2 constraintVariable, TypeVariable typeVariable) {
 		Assert.isTrue(typeVariable.isTypeVariable()); // includes null check
-		HashMap typeVarToElementVars= (HashMap) constraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
+		HashMap<String, CollectionElementVariable2> typeVarToElementVars= (HashMap<String, CollectionElementVariable2>) constraintVariable.getData(INDEXED_COLLECTION_ELEMENTS);
 		if (typeVarToElementVars == null)
 			return null;
-		return (CollectionElementVariable2) typeVarToElementVars.get(typeVariable.getBindingKey());
+		return typeVarToElementVars.get(typeVariable.getBindingKey());
 	}
 
 	public void createElementEqualsConstraints(ConstraintVariable2 cv, ConstraintVariable2 initializerCv) {
@@ -821,14 +825,14 @@ public class InferTypeArgumentsTCModel {
 		if (cv == null || initializerCv == null)
 			return;
 
-		Map leftElements= getElementVariables(cv);
-		Map rightElements= getElementVariables(initializerCv);
-		for (Iterator leftIter= leftElements.entrySet().iterator(); leftIter.hasNext();) {
-			Map.Entry leftEntry= (Map.Entry) leftIter.next();
-			String leftTypeVariableKey= (String) leftEntry.getKey();
-			CollectionElementVariable2 rightElementVariable= (CollectionElementVariable2) rightElements.get(leftTypeVariableKey);
+		Map<String, CollectionElementVariable2> leftElements= getElementVariables(cv);
+		Map<String, CollectionElementVariable2> rightElements= getElementVariables(initializerCv);
+		for (Iterator<Entry<String, CollectionElementVariable2>> leftIter= leftElements.entrySet().iterator(); leftIter.hasNext();) {
+			Entry<String, CollectionElementVariable2> leftEntry= leftIter.next();
+			String leftTypeVariableKey= leftEntry.getKey();
+			CollectionElementVariable2 rightElementVariable= rightElements.get(leftTypeVariableKey);
 			if (rightElementVariable != null) {
-				CollectionElementVariable2 leftElementVariable= (CollectionElementVariable2) leftEntry.getValue();
+				CollectionElementVariable2 leftElementVariable= leftEntry.getValue();
 				createEqualsConstraint(leftElementVariable, rightElementVariable);
 				internalCreateElementEqualsConstraints(leftElementVariable, rightElementVariable, false); // recursive
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsUpdate.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsUpdate.java
index 66d7cec..842833c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsUpdate.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsUpdate.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,21 +24,21 @@ import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.CollectionEl
 
 public class InferTypeArgumentsUpdate {
 	public static class CuUpdate {
-		private List fDeclarations= new ArrayList();
-		private List fCastsToRemove= new ArrayList();
+		private List<CollectionElementVariable2> fDeclarations= new ArrayList<CollectionElementVariable2>();
+		private List<CastVariable2> fCastsToRemove= new ArrayList<CastVariable2>();
 
-		public List/*<CollectionElementVariable2>*/ getDeclarations() {
+		public List<CollectionElementVariable2> getDeclarations() {
 			return fDeclarations;
 		}
 
-		public List/*<CastVariable2>*/ getCastsToRemove() {
+		public List<CastVariable2> getCastsToRemove() {
 			return fCastsToRemove;
 		}
 	}
 
-	private HashMap/*<ICompilationUnit, CuUpdate>*/ fUpdates= new HashMap();
+	private HashMap<ICompilationUnit, CuUpdate> fUpdates= new HashMap<ICompilationUnit, CuUpdate>();
 
-	public HashMap/*<ICompilationUnit, CuUpdate>*/ getUpdates() {
+	public HashMap<ICompilationUnit, CuUpdate> getUpdates() {
 		return fUpdates;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java
index f712bae..97a30d4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.Generic
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.CollectionElementVariable2;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ConstraintVariable2;
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ITypeConstraint2;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.SubTypeConstraint2;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.TypeEquivalenceSet;
 
@@ -58,6 +59,7 @@ public class ParametricStructureComputer {
 			return fBase;
 		}
 
+		@Override
 		public String toString() {
 			if (this == NONE)
 				return "NONE"; //$NON-NLS-1$
@@ -99,7 +101,7 @@ public class ParametricStructureComputer {
 	}
 
 
-	private Stack/*<ConstraintVariable2>*/ fWorkList2= new Stack();
+	private Stack<ConstraintVariable2> fWorkList2= new Stack<ConstraintVariable2>();
 
 
 	private void setStructureAndPush(ConstraintVariable2 v, ParametricStructure structure) {
@@ -203,10 +205,10 @@ public class ParametricStructureComputer {
 			dumpContainerStructure();
 
 		while (!fWorkList2.isEmpty()) {
-			ConstraintVariable2 v= (ConstraintVariable2) fWorkList2.pop();
-			List/*<ITypeConstraint>*/ usedIn= fTCModel.getUsedIn(v);
+			ConstraintVariable2 v= fWorkList2.pop();
+			List<ITypeConstraint2> usedIn= fTCModel.getUsedIn(v);
 
-			for(Iterator/*<ITypeConstraint>*/ iter= usedIn.iterator(); iter.hasNext(); ) {
+			for(Iterator<ITypeConstraint2> iter= usedIn.iterator(); iter.hasNext(); ) {
 				SubTypeConstraint2 stc= (SubTypeConstraint2) iter.next();
 
 				ConstraintVariable2 lhs= stc.getLeft();
@@ -312,8 +314,8 @@ public class ParametricStructureComputer {
 		// Propagate structure from container variable to any subsidiary element variables
 		if (elemStructure(v) != ParametricStructure.NONE && fTCModel.getElementVariables(v).size() > 0) {
 			ParametricStructure t= elemStructure(v);
-			for(Iterator iterator=fTCModel.getElementVariables(v).values().iterator(); iterator.hasNext(); ) {
-				CollectionElementVariable2 typeVar= (CollectionElementVariable2) iterator.next();
+			for(Iterator<CollectionElementVariable2> iterator=fTCModel.getElementVariables(v).values().iterator(); iterator.hasNext(); ) {
+				CollectionElementVariable2 typeVar= iterator.next();
 				int declarationTypeVariableIndex= typeVar.getDeclarationTypeVariableIndex();
 
 				if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX)
@@ -414,6 +416,7 @@ public class ParametricStructureComputer {
 		static public TypeOperator Equals= new TypeOperator("=^="); //$NON-NLS-1$
 		static public TypeOperator SubType= new TypeOperator("<="); //$NON-NLS-1$
 		static public TypeOperator SuperType= new TypeOperator("=>"); //$NON-NLS-1$
+		@Override
 		public String toString() {
 			return fOp;
 		}
@@ -475,8 +478,8 @@ public class ParametricStructureComputer {
 		return fElemStructureEnv.elemStructure(v);
 	}
 
-	public Collection/*<CollectionElementVariable2>*/ createElemConstraintVariables() {
-		Collection newVars= new HashSet();
+	public Collection<CollectionElementVariable2> createElemConstraintVariables() {
+		Collection<CollectionElementVariable2> newVars= new HashSet<CollectionElementVariable2>();
 
 		computeContainerStructure();
 
@@ -503,11 +506,11 @@ public class ParametricStructureComputer {
 		return newVars;
 	}
 
-	private Collection/*ConstraintVariable2*/ createVariablesFor(ConstraintVariable2 v) {
+	private Collection<CollectionElementVariable2> createVariablesFor(ConstraintVariable2 v) {
 		ParametricStructure t= elemStructure(v);
 
 		if (t == null || t == ParametricStructure.NONE)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		ParametricStructure parmType= t;
 		TType base = parmType.getBase();
@@ -517,42 +520,42 @@ public class ParametricStructureComputer {
 		throw new IllegalStateException("Attempt to create element variables for parametric variable of unknown type: " + parmType); //$NON-NLS-1$
 	}
 
-	private Collection/*<ConstraintVariable2>*/ getElementVariables(GenericType base, ConstraintVariable2 parent) {
+	private Collection<CollectionElementVariable2> getElementVariables(GenericType base, ConstraintVariable2 parent) {
 		fTCModel.makeElementVariables(parent, base);
 		return fTCModel.getElementVariables(parent).values();
 	}
 
-	private Collection/*ConstraintVariable2*/ createAndInitVars(ConstraintVariable2 v, ParametricStructure parmType) {
+	private Collection<CollectionElementVariable2> createAndInitVars(ConstraintVariable2 v, ParametricStructure parmType) {
 //TODO (->): in InferTypeArgumentsConstraintsSolver#createInitialEstimate(..)
 //->		fTypeEstimates.setEstimateOf(v, SubTypesOfSingleton.create(ParametricStructure.getBaseContainerType(parmType.getBase(), sHierarchy)));
-		Collection/*<ConstraintVariable2>*/ elementVars= getElementVariables(parmType.getBase(), v);
+		Collection<CollectionElementVariable2> elementVars= getElementVariables(parmType.getBase(), v);
 //->		setNewTypeParamEstimateForEach(elementVars);
-		Collection result= createVars(elementVars, parmType.getParameters());
+		Collection<CollectionElementVariable2> result= createVars(elementVars, parmType.getParameters());
 		return result;
 	}
 
-	private Collection/*ConstraintVariable2*/ createVars(Collection/*ConstraintVariable2>*/ cvs, ParametricStructure[] parms) {
+	private Collection<CollectionElementVariable2> createVars(Collection<CollectionElementVariable2> cvs, ParametricStructure[] parms) {
 		if (parms.length > 0) { // happens, e.g., for Properties (non-parametric)
 //			Assert.isTrue(cvs.size() == parms.length, "cvs.length==" + cvs.size() + " parms.length=" + parms.length); //assumption is wrong in presence of NOT_DECLARED_TYPE_VARIABLE_INDEX
-			for (Iterator iter= cvs.iterator(); iter.hasNext(); ) {
-				CollectionElementVariable2 childVar= (CollectionElementVariable2) iter.next();
+			for (Iterator<CollectionElementVariable2> iter= cvs.iterator(); iter.hasNext(); ) {
+				CollectionElementVariable2 childVar= iter.next();
 				int declarationTypeVariableIndex= childVar.getDeclarationTypeVariableIndex();
 
 				if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX)
 					setElemStructure(childVar, parms[declarationTypeVariableIndex]);
 			}
 		} else {
-			for (Iterator iter= cvs.iterator(); iter.hasNext(); ) {
-				CollectionElementVariable2 childVar= (CollectionElementVariable2) iter.next();
+			for (Iterator<CollectionElementVariable2> iter= cvs.iterator(); iter.hasNext(); ) {
+				CollectionElementVariable2 childVar= iter.next();
 				int declarationTypeVariableIndex= childVar.getDeclarationTypeVariableIndex();
 
 				if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX)
 					setElemStructure(childVar, ParametricStructure.NONE);
 			}
 		}
-		List result= new ArrayList(cvs.size() * 2);//roughly
-		for (Iterator iter= cvs.iterator(); iter.hasNext(); ) {
-			CollectionElementVariable2 childVar= (CollectionElementVariable2) iter.next();
+		List<CollectionElementVariable2> result= new ArrayList<CollectionElementVariable2>(cvs.size() * 2);//roughly
+		for (Iterator<CollectionElementVariable2> iter= cvs.iterator(); iter.hasNext(); ) {
+			CollectionElementVariable2 childVar= iter.next();
 			int declarationTypeVariableIndex= childVar.getDeclarationTypeVariableIndex();
 
 			if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java
index e753ce1..32b34ce 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -221,8 +221,8 @@ public class AccessorClassCreator {
 	}
 
 	private String createStaticFields() {
-		HashSet added= new HashSet();
-		List subs= new ArrayList();
+		HashSet<String> added= new HashSet<String>();
+		List<NLSSubstitution> subs= new ArrayList<NLSSubstitution>();
 		for (int i= 0; i < fNLSSubstitutions.length; i++) {
 			NLSSubstitution substitution= fNLSSubstitutions[i];
 			int newState= substitution.getState();
@@ -231,17 +231,15 @@ public class AccessorClassCreator {
 					subs.add(substitution);
 			}
 		}
-		Collections.sort(subs, new Comparator() {
+		Collections.sort(subs, new Comparator<NLSSubstitution>() {
 			private Collator fCollator= Collator.getInstance();
-			public int compare(Object o1, Object o2) {
-				NLSSubstitution s0= (NLSSubstitution)o1;
-				NLSSubstitution s1= (NLSSubstitution)o2;
+			public int compare(NLSSubstitution s0, NLSSubstitution s1) {
 				return fCollator.compare(s0.getKey(), s1.getKey());
 			}
 		});
 		StringBuffer buf= new StringBuffer();
-		for (Iterator iter= subs.iterator(); iter.hasNext();) {
-			NLSSubstitution element= (NLSSubstitution)iter.next();
+		for (Iterator<NLSSubstitution> iter= subs.iterator(); iter.hasNext();) {
+			NLSSubstitution element= iter.next();
 			appendStaticField(buf, element);
 		}
 		return buf.toString();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java
index b49be13..eb1c09b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,7 +68,7 @@ public class AccessorClassModifier {
 	private ASTRewrite fASTRewrite;
 	private ListRewrite fListRewrite;
 	private ICompilationUnit fCU;
-	private List fFields;
+	private List<FieldDeclaration> fFields;
 
 	private AccessorClassModifier(ICompilationUnit cu) throws CoreException {
 
@@ -81,11 +81,12 @@ public class AccessorClassModifier {
 		AbstractTypeDeclaration parent= null;
 		if (fRoot.types().size() > 0) {
 			parent= (AbstractTypeDeclaration)fRoot.types().get(0);
-			fFields= new ArrayList();
+			fFields= new ArrayList<FieldDeclaration>();
 			parent.accept(new GenericVisitor() {
 				/**
 				 * {@inheritDoc}
 				 */
+				@Override
 				public boolean visit(FieldDeclaration node) {
 					int modifiers= node.getModifiers();
 					if (!Modifier.isPublic(modifiers))
@@ -94,11 +95,11 @@ public class AccessorClassModifier {
 					if (!Modifier.isStatic(modifiers))
 						return false;
 
-					List fragments= node.fragments();
+					List<VariableDeclarationFragment> fragments= node.fragments();
 					if (fragments.size() != 1)
 						return false;
 
-					VariableDeclarationFragment fragment= (VariableDeclarationFragment)fragments.get(0);
+					VariableDeclarationFragment fragment= fragments.get(0);
 					if (fragment.getInitializer() != null)
 						return false;
 
@@ -138,8 +139,8 @@ public class AccessorClassModifier {
 
 	public static Change create(ICompilationUnit cu, NLSSubstitution[] substitutions) throws CoreException {
 
-		Map newKeyToSubstMap= NLSPropertyFileModifier.getNewKeyToSubstitutionMap(substitutions);
-		Map oldKeyToSubstMap= NLSPropertyFileModifier.getOldKeyToSubstitutionMap(substitutions);
+		Map<String, NLSSubstitution> newKeyToSubstMap= NLSPropertyFileModifier.getNewKeyToSubstitutionMap(substitutions);
+		Map<String, NLSSubstitution> oldKeyToSubstMap= NLSPropertyFileModifier.getOldKeyToSubstitutionMap(substitutions);
 
 		AccessorClassModifier sourceModification= new AccessorClassModifier(cu);
 
@@ -214,6 +215,7 @@ public class AccessorClassModifier {
 		try {
 			astRoot.accept(new ASTVisitor() {
 
+				@Override
 				public boolean visit(VariableDeclarationFragment node) {
 					if (name.equals(node.getName().getFullyQualifiedName())) {
 						result[0]= node.getParent();
@@ -248,31 +250,31 @@ public class AccessorClassModifier {
 			fListRewrite.insertLast(fieldDeclaration, editGroup);
 			fFields.add(fieldDeclaration);
 		} else {
-			ArrayList identifiers= new ArrayList();
-			for (Iterator iterator= fFields.iterator(); iterator.hasNext();) {
-				FieldDeclaration field= (FieldDeclaration) iterator.next();
+			ArrayList<String> identifiers= new ArrayList<String>();
+			for (Iterator<FieldDeclaration> iterator= fFields.iterator(); iterator.hasNext();) {
+				FieldDeclaration field= iterator.next();
 				VariableDeclarationFragment fragment= (VariableDeclarationFragment) field.fragments().get(0);
 				identifiers.add(fragment.getName().getIdentifier());
 			}
 
 			int insertionPosition= NLSUtil.getInsertionPosition(key, identifiers);
 			if (insertionPosition < 0) {
-				fListRewrite.insertBefore(fieldDeclaration, (ASTNode) fFields.get(0), editGroup);
+				fListRewrite.insertBefore(fieldDeclaration, fFields.get(0), editGroup);
 				fFields.add(0, fieldDeclaration);
 			} else {
 				if (identifiers.size() == insertionPosition + 1) {
-					fListRewrite.insertAfter(fieldDeclaration, (ASTNode) fFields.get(insertionPosition), editGroup);
+					fListRewrite.insertAfter(fieldDeclaration, fFields.get(insertionPosition), editGroup);
 				} else {
-					String beforeKey= (String) identifiers.get(insertionPosition);
-					String afterKey= (String) identifiers.get(insertionPosition + 1);
+					String beforeKey= identifiers.get(insertionPosition);
+					String afterKey= identifiers.get(insertionPosition + 1);
 					int distBefore= NLSUtil.invertDistance(key, beforeKey);
 					int distAfter= NLSUtil.invertDistance(key, afterKey);
 					if (distBefore > distAfter) {
-						fListRewrite.insertAfter(fieldDeclaration, (ASTNode) fFields.get(insertionPosition), editGroup);
+						fListRewrite.insertAfter(fieldDeclaration, fFields.get(insertionPosition), editGroup);
 					} else if (distBefore == distAfter && Collator.getInstance().compare(beforeKey, afterKey) < 0) {
-						fListRewrite.insertAfter(fieldDeclaration, (ASTNode) fFields.get(insertionPosition), editGroup);
+						fListRewrite.insertAfter(fieldDeclaration, fFields.get(insertionPosition), editGroup);
 					} else {
-						fListRewrite.insertBefore(fieldDeclaration, (ASTNode) fFields.get(insertionPosition + 1), editGroup);
+						fListRewrite.insertBefore(fieldDeclaration, fFields.get(insertionPosition + 1), editGroup);
 					}
 				}
 				fFields.add(insertionPosition + 1, fieldDeclaration);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassReference.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassReference.java
index cafc144..f21d42f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassReference.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassReference.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,7 +44,8 @@ public class AccessorClassReference {
 		return fResourceBundleName;
 	}
 
-    public boolean equals(Object obj) {
+    @Override
+	public boolean equals(Object obj) {
         if (obj instanceof AccessorClassReference) {
             AccessorClassReference cmp = (AccessorClassReference) obj;
             return fBinding == cmp.fBinding;
@@ -52,7 +53,8 @@ public class AccessorClassReference {
         return false;
     }
 
-    public int hashCode() {
+    @Override
+	public int hashCode() {
         return fBinding.hashCode();
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java
index 500963c..d184f55 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,6 +68,7 @@ public class NLSAccessorFieldRenameParticipant extends RenameParticipant {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getName() {
 		return NLSMessages.NLSAccessorFieldRenameParticipant_participantName;
 	}
@@ -75,6 +76,7 @@ public class NLSAccessorFieldRenameParticipant extends RenameParticipant {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException {
 		if (pm == null)
 			pm= new NullProgressMonitor();
@@ -146,6 +148,7 @@ public class NLSAccessorFieldRenameParticipant extends RenameParticipant {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		return fChange;
 	}
@@ -153,6 +156,7 @@ public class NLSAccessorFieldRenameParticipant extends RenameParticipant {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean initialize(Object element) {
 		fField= (IField) element;
 		return true;
@@ -161,6 +165,7 @@ public class NLSAccessorFieldRenameParticipant extends RenameParticipant {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean initialize(RefactoringProcessor processor, Object element, RefactoringArguments arguments) {
 		fNewName= ((RenameArguments) arguments).getNewName();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java
index f9baf2a..d8b8e00 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -109,6 +109,7 @@ public class NLSElement {
 	 * Method declared in Object.
 	 * only for debugging
 	 */
+	@Override
 	public String toString() {
 		return fPosition + ": " + fValue + "    Tag position: " + //$NON-NLS-2$ //$NON-NLS-1$
 				(hasTag() ? fTagPosition.toString() : "no tag found"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java
index b6642f9..b8492ec 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,7 +78,7 @@ public class NLSHint {
 
 		if (accessClassRef == null) {
 			// Look for Eclipse NLS approach
-			List eclipseNLSLines= new ArrayList();
+			List<NLSLine> eclipseNLSLines= new ArrayList<NLSLine>();
 			accessClassRef= createEclipseNLSLines(getDocument(cu), astRoot, eclipseNLSLines);
 			if (!eclipseNLSLines.isEmpty()) {
 				NLSLine[] rawLines= lines;
@@ -88,7 +88,7 @@ public class NLSHint {
 				for (int i= 0; i < rawLinesLength; i++)
 					lines[i]= rawLines[i];
 				for (int i= 0; i < eclipseLinesLength; i++)
-					lines[i+rawLinesLength]= (NLSLine)eclipseNLSLines.get(i);
+					lines[i+rawLinesLength]= eclipseNLSLines.get(i);
 			}
 		}
 
@@ -126,16 +126,17 @@ public class NLSHint {
 		}
 	}
 
-	private AccessorClassReference createEclipseNLSLines(final IDocument document, CompilationUnit astRoot, List nlsLines) {
+	private AccessorClassReference createEclipseNLSLines(final IDocument document, CompilationUnit astRoot, List<NLSLine> nlsLines) {
 
 		final AccessorClassReference[] firstAccessor= new AccessorClassReference[1];
-		final SortedMap lineToNLSLine= new TreeMap();
+		final SortedMap<Integer, NLSLine> lineToNLSLine= new TreeMap<Integer, NLSLine>();
 
 		astRoot.accept(new ASTVisitor() {
 
 			private ICompilationUnit fCache_CU;
 			private CompilationUnit fCache_AST;
 
+			@Override
 			public boolean visit(QualifiedName node) {
 				ITypeBinding type= node.getQualifier().resolveTypeBinding();
 				if (type != null) {
@@ -147,7 +148,7 @@ public class NLSHint {
 						} catch (BadLocationException e) {
 							return true; // ignore and continue
 						}
-						NLSLine nlsLine= (NLSLine)lineToNLSLine.get(line);
+						NLSLine nlsLine= lineToNLSLine.get(line);
 						if (nlsLine == null) {
 							nlsLine=  new NLSLine(line.intValue());
 							lineToNLSLine.put(line, nlsLine);
@@ -205,7 +206,7 @@ public class NLSHint {
 	}
 
 	private NLSSubstitution[] createSubstitutions(NLSLine[] lines, Properties props, CompilationUnit astRoot) {
-		List result= new ArrayList();
+		List<NLSSubstitution> result= new ArrayList<NLSSubstitution>();
 
 		for (int i= 0; i < lines.length; i++) {
 			NLSElement[] elements= lines[i].getElements();
@@ -229,7 +230,7 @@ public class NLSHint {
 				}
 			}
 		}
-		return (NLSSubstitution[]) result.toArray(new NLSSubstitution[result.size()]);
+		return result.toArray(new NLSSubstitution[result.size()]);
 	}
 
 	private static AccessorClassReference findFirstAccessorReference(NLSLine[] lines, CompilationUnit astRoot) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java
index 57a808e..4e875b8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,12 +134,12 @@ public class NLSHintHelper {
 
 			if (parent instanceof MethodInvocation) {
 				MethodInvocation methodInvocation= (MethodInvocation) parent;
-				List args= methodInvocation.arguments();
+				List<Expression> args= methodInvocation.arguments();
 				if (args.size() != 1 && args.indexOf(nlsStringLiteral) != 0) {
 					return null; // must be the only argument in lookup method
 				}
 
-				Expression firstArgument= (Expression)args.get(0);
+				Expression firstArgument= args.get(0);
 				ITypeBinding argumentBinding= firstArgument.resolveTypeBinding();
 				if (argumentBinding == null || !argumentBinding.getQualifiedName().equals("java.lang.String")) { //$NON-NLS-1$
 					return null;
@@ -214,12 +214,13 @@ public class NLSHintHelper {
 		if (astRoot == null)
 			return null;
 
-		final Map resultCollector= new HashMap(5);
+		final Map<Object, Object> resultCollector= new HashMap<Object, Object>(5);
 		final Object RESULT_KEY= new Object();
 		final Object FIELD_KEY= new Object();
 
 		astRoot.accept(new ASTVisitor() {
 
+			@Override
 			public boolean visit(MethodInvocation node) {
 				IMethodBinding method= node.resolveMethodBinding();
 				if (method == null)
@@ -244,6 +245,7 @@ public class NLSHintHelper {
 				return false;
 			}
 
+			@Override
 			public boolean visit(VariableDeclarationFragment node) {
 				Expression initializer= node.getInitializer();
 				String bundleName= getBundleName(initializer);
@@ -256,6 +258,7 @@ public class NLSHintHelper {
 				return true;
 			}
 
+			@Override
 			public boolean visit(Assignment node) {
 				if (node.getLeftHandSide() instanceof Name) {
 					String bundleName= getBundleName(node.getRightHandSide());
@@ -293,8 +296,16 @@ public class NLSHintHelper {
 		Object fieldName;
 		String result;
 
-		// First try hard-coded bundle name String field names from NLS tooling:
-		Iterator iter= resultCollector.keySet().iterator();
+		result= (String)resultCollector.get(RESULT_KEY);
+		if (result != null)
+			return result;
+
+		fieldName= resultCollector.get(FIELD_KEY);
+		if (fieldName != null)
+			return (String)resultCollector.get(fieldName);
+
+		// Now try hard-coded bundle name String field names from NLS tooling:
+		Iterator<Object> iter= resultCollector.keySet().iterator();
 		while (iter.hasNext()) {
 			Object o= iter.next();
 			if (!(o instanceof IBinding))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java
index c4b94eb..0452026 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,12 +20,12 @@ import org.eclipse.core.runtime.Assert;
 public class NLSLine {
 
 	private int fLineNumber;
-	private List fElements;
+	private List<NLSElement> fElements;
 
 	public NLSLine(int lineNumber) {
 		fLineNumber= lineNumber;
 		Assert.isTrue(fLineNumber >= 0);
-		fElements= new ArrayList();
+		fElements= new ArrayList<NLSElement>();
 	}
 
 	public int getLineNumber() {
@@ -43,11 +43,11 @@ public class NLSLine {
 	}
 
 	public NLSElement[] getElements() {
-		return (NLSElement[]) fElements.toArray(new NLSElement[fElements.size()]);
+		return fElements.toArray(new NLSElement[fElements.size()]);
 	}
 
 	public NLSElement get(int index) {
-		return (NLSElement)fElements.get(index);
+		return fElements.get(index);
 	}
 
 	public boolean exists(int index) {
@@ -62,10 +62,11 @@ public class NLSLine {
 	 * only for debugging
 	 * @see Object#toString()
 	 */
+	@Override
 	public String toString() {
 		StringBuffer result= new StringBuffer();
 		result.append("Line: " + fLineNumber + "\n"); //$NON-NLS-2$ //$NON-NLS-1$
-		for (Iterator iter= fElements.iterator(); iter.hasNext(); ) {
+		for (Iterator<NLSElement> iter= fElements.iterator(); iter.hasNext(); ) {
 			result.append("\t"); //$NON-NLS-1$
 			result.append(iter.next().toString());
 			result.append("\n"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java
index 4a7ca6b..9550290 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,8 +91,8 @@ public class NLSPropertyFileModifier {
 	private static void addChanges(TextChange textChange, NLSSubstitution[] substitutions) throws CoreException {
 		PropertyFileDocumentModel model= new PropertyFileDocumentModel(textChange.getCurrentDocument(new NullProgressMonitor()));
 
-		Map newKeyToSubstMap= getNewKeyToSubstitutionMap(substitutions);
-		Map oldKeyToSubstMap= getOldKeyToSubstitutionMap(substitutions);
+		Map<String, NLSSubstitution> newKeyToSubstMap= getNewKeyToSubstitutionMap(substitutions);
+		Map<String, NLSSubstitution> oldKeyToSubstMap= getOldKeyToSubstitutionMap(substitutions);
 
 		addInsertEdits(textChange, substitutions, newKeyToSubstMap, oldKeyToSubstMap, model);
 		addRemoveEdits(textChange, substitutions, newKeyToSubstMap, oldKeyToSubstMap, model);
@@ -105,13 +105,13 @@ public class NLSPropertyFileModifier {
 	 * @param substitutions the substitutions to add to the map
 	 * @return the map containing the substitutions
 	 */
-	static HashMap getNewKeyToSubstitutionMap(NLSSubstitution[] substitutions) {
-		HashMap keyToSubstMap= new HashMap(substitutions.length);
+	static HashMap<String, NLSSubstitution> getNewKeyToSubstitutionMap(NLSSubstitution[] substitutions) {
+		HashMap<String, NLSSubstitution> keyToSubstMap= new HashMap<String, NLSSubstitution>(substitutions.length);
 		// find all duplicates
 		for (int i= 0; i < substitutions.length; i++) {
 			NLSSubstitution curr= substitutions[i];
 			if (curr.getState() == NLSSubstitution.EXTERNALIZED) {
-				NLSSubstitution val= (NLSSubstitution) keyToSubstMap.get(curr.getKey());
+				NLSSubstitution val= keyToSubstMap.get(curr.getKey());
 				if (val == null || (val.hasPropertyFileChange() && !curr.hasPropertyFileChange())) {
 					keyToSubstMap.put(curr.getKey(), curr); // store if first or if stored in new and we are existing
 				}
@@ -126,15 +126,15 @@ public class NLSPropertyFileModifier {
 	 * @param substitutions the substitutions to add to the map
 	 * @return the map containing the substitutions
 	 */
-	static HashMap getOldKeyToSubstitutionMap(NLSSubstitution[] substitutions) {
-		HashMap keyToSubstMap= new HashMap(substitutions.length);
+	static HashMap<String, NLSSubstitution> getOldKeyToSubstitutionMap(NLSSubstitution[] substitutions) {
+		HashMap<String, NLSSubstitution> keyToSubstMap= new HashMap<String, NLSSubstitution>(substitutions.length);
 		// find all duplicates
 		for (int i= 0; i < substitutions.length; i++) {
 			NLSSubstitution curr= substitutions[i];
 			if (curr.getInitialState() == NLSSubstitution.EXTERNALIZED) {
 				String key= curr.getInitialKey();
 				if (key != null) {
-					NLSSubstitution fav= (NLSSubstitution) keyToSubstMap.get(key);
+					NLSSubstitution fav= keyToSubstMap.get(key);
 					if (fav == null || (fav.hasStateChanged() && !curr.hasStateChanged())) {
 						keyToSubstMap.put(key, curr); // store if first or if stored will not be externalized anymore
 					}
@@ -144,7 +144,7 @@ public class NLSPropertyFileModifier {
 		return keyToSubstMap;
 	}
 
-	static boolean doReplace(NLSSubstitution substitution, Map newKeyToSubstMap, Map oldKeyToSubstMap) {
+	static boolean doReplace(NLSSubstitution substitution, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap) {
 		if (substitution.getState() != NLSSubstitution.EXTERNALIZED || substitution.hasStateChanged() || substitution.getInitialValue() == null) {
 			return false; // was not in property file before
 		}
@@ -159,14 +159,14 @@ public class NLSPropertyFileModifier {
 		return false;
 	}
 
-	private static void addReplaceEdits(TextChange textChange, NLSSubstitution[] substitutions, Map newKeyToSubstMap, Map oldKeyToSubstMap, PropertyFileDocumentModel model) {
+	private static void addReplaceEdits(TextChange textChange, NLSSubstitution[] substitutions, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap, PropertyFileDocumentModel model) {
 		for (int i= 0; i < substitutions.length; i++) {
 			NLSSubstitution substitution= substitutions[i];
 			if (doReplace(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
 				KeyValuePair initialPair= new KeyValuePair(substitution.getInitialKey(), substitution.getInitialValue());
 
-				String key= PropertyFileDocumentModel.unwindEscapeChars(substitution.getKey());
-				String value= PropertyFileDocumentModel.unwindValue(substitution.getValue()) + model.getLineDelimiter();
+				String key= PropertyFileDocumentModel.escape(substitution.getKey(), false);
+				String value= PropertyFileDocumentModel.escape(substitution.getValue(), true) + model.getLineDelimiter();
 				KeyValuePair newPair= new KeyValuePair(key, value);
 				TextEdit edit= model.replace(initialPair, newPair);
 				if (edit != null) {
@@ -176,7 +176,7 @@ public class NLSPropertyFileModifier {
 		}
 	}
 
-	static boolean doInsert(NLSSubstitution substitution, Map newKeyToSubstMap, Map oldKeyToSubstMap) {
+	static boolean doInsert(NLSSubstitution substitution, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap) {
 		if (substitution.getState() != NLSSubstitution.EXTERNALIZED) {
 			return false; // does not go into the property file
 		}
@@ -191,25 +191,25 @@ public class NLSPropertyFileModifier {
 		return false;
 	}
 
-	private static void addInsertEdits(TextChange textChange, NLSSubstitution[] substitutions, Map newKeyToSubstMap, Map oldKeyToSubstMap, PropertyFileDocumentModel model) {
-		ArrayList keyValuePairsToAdd= new ArrayList();
+	private static void addInsertEdits(TextChange textChange, NLSSubstitution[] substitutions, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap, PropertyFileDocumentModel model) {
+		ArrayList<KeyValuePair> keyValuePairsToAdd= new ArrayList<KeyValuePair>();
 
 		for (int i= 0; i < substitutions.length; i++) {
 			NLSSubstitution substitution= substitutions[i];
 
 			if (doInsert(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
-				String value= PropertyFileDocumentModel.unwindValue(substitution.getValueNonEmpty()) + model.getLineDelimiter();
-				String key= PropertyFileDocumentModel.unwindEscapeChars(substitution.getKey());
+				String value= PropertyFileDocumentModel.escape(substitution.getValueNonEmpty(), true) + model.getLineDelimiter();
+				String key= PropertyFileDocumentModel.escape(substitution.getKey(), false);
 				keyValuePairsToAdd.add(new KeyValuePair(key, value));
 			}
 		}
 
 		if (keyValuePairsToAdd.size() > 0) {
-			model.insert((KeyValuePair[]) keyValuePairsToAdd.toArray(new KeyValuePair[keyValuePairsToAdd.size()]), textChange);
+			model.insert(keyValuePairsToAdd.toArray(new KeyValuePair[keyValuePairsToAdd.size()]), textChange);
 		}
 	}
 
-	static boolean doRemove(NLSSubstitution substitution, Map newKeyToSubstMap, Map oldKeyToSubstMap) {
+	static boolean doRemove(NLSSubstitution substitution, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap) {
 		if (substitution.getInitialState() != NLSSubstitution.EXTERNALIZED || substitution.getInitialKey() == null) {
 			return false; // was not in property file before
 		}
@@ -226,7 +226,7 @@ public class NLSPropertyFileModifier {
 		return false;
 	}
 
-	private static void addRemoveEdits(TextChange textChange, NLSSubstitution[] substitutions, Map newKeyToSubstMap, Map oldKeyToSubstMap, PropertyFileDocumentModel model) {
+	private static void addRemoveEdits(TextChange textChange, NLSSubstitution[] substitutions, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap, PropertyFileDocumentModel model) {
 		for (int i= 0; i < substitutions.length; i++) {
 			NLSSubstitution substitution= substitutions[i];
 			if (doRemove(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java
index e04a753..1a98ea9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -155,10 +155,12 @@ public class NLSRefactoring extends Refactoring {
 		return fCu;
 	}
 
+	@Override
 	public String getName() {
 		return Messages.format(NLSMessages.NLSRefactoring_compilation_unit, BasicElementLabels.getFileName(fCu));
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 
 		if (fSubstitutions.length == 0) {
@@ -168,6 +170,7 @@ public class NLSRefactoring extends Refactoring {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		checkParameters();
 		try {
@@ -214,6 +217,7 @@ public class NLSRefactoring extends Refactoring {
 		}
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		try {
 			checkParameters();
@@ -263,7 +267,7 @@ public class NLSRefactoring extends Refactoring {
 
 	private IFile[] getAllFilesToModify() {
 
-		List files= new ArrayList(2);
+		List<IResource> files= new ArrayList<IResource>(2);
 		if (willModifySource()) {
 			IResource resource= fCu.getResource();
 			if (resource.exists()) {
@@ -285,7 +289,7 @@ public class NLSRefactoring extends Refactoring {
 			}
 		}
 
-		return (IFile[]) files.toArray(new IFile[files.size()]);
+		return files.toArray(new IFile[files.size()]);
 	}
 
 	public IFile getPropertyFileHandle() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSScanner.java
index 1cd0462..3f2173d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSScanner.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSScanner.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public class NLSScanner {
 	}
 
 	private static NLSLine[] scan(IScanner scanner, char[] content) throws InvalidInputException, BadLocationException {
-		List lines= new ArrayList();
+		List<NLSLine> lines= new ArrayList<NLSLine>();
 		scanner.setSource(content);
 		int token= scanner.getNextToken();
 		int currentLineNr= -1;
@@ -68,7 +68,7 @@ public class NLSScanner {
 		 * a) >=0: parenthesis counter per nested annotation level, or
 		 * b)  -1: read a '@' or '.' in annotation type, waiting for identifier to complete annotation.
 		 */
-		LinkedList insideAnnotation= new LinkedList();
+		LinkedList<int[]> insideAnnotation= new LinkedList<int[]>();
 		int defaultCounter= 0; // counting up tokens starting with 'default'
 
 		while (token != ITerminalSymbols.TokenNameEOF) {
@@ -83,7 +83,7 @@ public class NLSScanner {
 
 				case ITerminalSymbols.TokenNameIdentifier:
 					if (! insideAnnotation.isEmpty()) {
-						int[] parenCounter= (int[]) insideAnnotation.getLast();
+						int[] parenCounter= insideAnnotation.getLast();
 						if (parenCounter[0] == -1)
 							parenCounter[0]= 0;
 						else if (parenCounter[0] == 0)
@@ -93,7 +93,7 @@ public class NLSScanner {
 
 				case ITerminalSymbols.TokenNameDOT:
 					if (! insideAnnotation.isEmpty()) {
-						int[] parenCounter= (int[]) insideAnnotation.getLast();
+						int[] parenCounter= insideAnnotation.getLast();
 						if (parenCounter[0] == 0)
 							parenCounter[0]= -1;
 						else if (parenCounter[0] == -1)
@@ -103,11 +103,11 @@ public class NLSScanner {
 
 				case ITerminalSymbols.TokenNameLPAREN:
 					if (! insideAnnotation.isEmpty())
-						++((int[]) insideAnnotation.getLast())[0];
+						++insideAnnotation.getLast()[0];
 					break;
 				case ITerminalSymbols.TokenNameRPAREN:
 					if (! insideAnnotation.isEmpty()) {
-						int parenCount= --((int[]) insideAnnotation.getLast())[0];
+						int parenCount= --insideAnnotation.getLast()[0];
 						if (parenCount <= 0) {
 							insideAnnotation.removeLast();
 						}
@@ -169,7 +169,7 @@ public class NLSScanner {
 			token= scanner.getNextToken();
 		}
 		NLSLine[] result;
-		result= (NLSLine[])lines.toArray(new NLSLine[lines.size()]);
+		result= lines.toArray(new NLSLine[lines.size()]);
 		IDocument document= new Document(String.valueOf(scanner.getSource()));
 		for (int i= 0; i < result.length; i++) {
 			setTagPositions(document, result[i]);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java
index b59ad07..c40faff 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,11 +62,14 @@ public class NLSSourceModifier {
 		MultiTextEdit multiTextEdit= new MultiTextEdit();
 		change.setEdit(multiTextEdit);
 
-		accessorClassName= sourceModification.createImportForAccessor(multiTextEdit, accessorClassName, accessorPackage, cu);
-
+		boolean createImportForAccessor= true;
 		for (int i= 0; i < subs.length; i++) {
 			NLSSubstitution substitution= subs[i];
 			int newState= substitution.getState();
+			if (newState == NLSSubstitution.EXTERNALIZED && createImportForAccessor) {
+				accessorClassName= sourceModification.createImportForAccessor(multiTextEdit, accessorClassName, accessorPackage, cu);
+				createImportForAccessor= false;
+			}
 			if (substitution.hasStateChanged()) {
 				if (newState == NLSSubstitution.EXTERNALIZED) {
 					if (substitution.getInitialState() == NLSSubstitution.INTERNALIZED) {
@@ -87,7 +90,7 @@ public class NLSSourceModifier {
 					}
 				} else if (newState == NLSSubstitution.IGNORED) {
 					if (substitution.getInitialState() == NLSSubstitution.INTERNALIZED) {
-						sourceModification.addNLS(substitution, change, accessorClassName);
+						sourceModification.addNLS(substitution, change, null);
 						if (substitution.isValueRename()) {
 							sourceModification.replaceValue(substitution, change);
 						}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java
index 6c5eba5..5fc14f4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -111,7 +111,7 @@ public class NLSUtil {
 	 * @throws CoreException if scanning fails
 	 */
 	public static TextEdit[] createNLSEdits(ICompilationUnit cu, int[] positions) throws CoreException {
-		List result= new ArrayList();
+		List<InsertEdit> result= new ArrayList<InsertEdit>();
 		try {
 			NLSLine[] allLines= NLSScanner.scan(cu);
 			for (int i= 0; i < allLines.length; i++) {
@@ -148,7 +148,7 @@ public class NLSUtil {
 		if (result.isEmpty())
 			return null;
 
-		return (TextEdit[])result.toArray(new TextEdit[result.size()]);
+		return result.toArray(new TextEdit[result.size()]);
 	}
 
 	private static NLSLine scanCurrentLine(ICompilationUnit cu, int position) throws JavaModelException {
@@ -237,13 +237,13 @@ public class NLSUtil {
 	 * @return the position in <code>keys</code> after which key must be inserted, returns -1 for before
 	 * @since 3.4
 	 */
-	public static int getInsertionPosition(String key, List keys) {
+	public static int getInsertionPosition(String key, List<String> keys) {
 		int result= 0;
 
 		int invertDistance= Integer.MIN_VALUE;
 		int i= 0;
-		for (Iterator iterator= keys.iterator(); iterator.hasNext();) {
-			String string= (String) iterator.next();
+		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
+			String string= iterator.next();
 
 			int currentInvertDistance= invertDistance(key, string);
 			if (currentInvertDistance > invertDistance) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java
index 6b32420..500fe23 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,13 +31,14 @@ import org.eclipse.ltk.core.refactoring.TextChange;
 
 import org.eclipse.jdt.internal.corext.refactoring.changes.TextChangeCompatibility;
 import org.eclipse.jdt.internal.corext.util.Messages;
+import org.eclipse.jdt.internal.corext.util.Strings;
 
+import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileEscapes;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 public class PropertyFileDocumentModel {
 
-	private static final char[] HEX_DIGITS = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
-    private List fKeyValuePairs;
+	private List<KeyValuePairModell> fKeyValuePairs;
     private String fLineDelimiter;
 
     public PropertyFileDocumentModel(IDocument document) {
@@ -60,7 +61,7 @@ public class PropertyFileDocumentModel {
 	 */
     public KeyValuePair getKeyValuePair(String key) {
     	for (int i= 0; i < fKeyValuePairs.size(); i++) {
-            KeyValuePairModell keyValuePair = (KeyValuePairModell) fKeyValuePairs.get(i);
+            KeyValuePairModell keyValuePair = fKeyValuePairs.get(i);
             if (keyValuePair.getKey().equals(key)) {
             	return keyValuePair;
             }
@@ -71,7 +72,7 @@ public class PropertyFileDocumentModel {
     private InsertEdit insert(KeyValuePair keyValuePair) {
         KeyValuePairModell keyValuePairModell = new KeyValuePairModell(keyValuePair);
         int index = findInsertPosition(keyValuePairModell);
-        KeyValuePairModell insertHere = (KeyValuePairModell) fKeyValuePairs.get(index);
+        KeyValuePairModell insertHere = fKeyValuePairs.get(index);
         int offset = insertHere.fOffset;
 
         String extra= ""; //$NON-NLS-1$
@@ -80,7 +81,7 @@ public class PropertyFileDocumentModel {
         	((LastKeyValuePair)insertHere).resetNeedsNewLine();
         	offset-= insertHere.fLeadingWhiteSpaces;
         } else if (index > 0) {
-        	String beforeKey= ((KeyValuePair) fKeyValuePairs.get(index - 1)).fKey;
+        	String beforeKey= fKeyValuePairs.get(index - 1).fKey;
 			String afterKey= insertHere.fKey;
 			String key= keyValuePair.fKey;
 			int distBefore= NLSUtil.invertDistance(key, beforeKey);
@@ -110,17 +111,15 @@ public class PropertyFileDocumentModel {
      */
     public void insert(KeyValuePair[] keyValuePairs, TextChange change) {
 
-        ArrayList sorted= new ArrayList(Arrays.asList(keyValuePairs));
-        Collections.sort(sorted, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				KeyValuePair p1= (KeyValuePair) o1;
-				KeyValuePair p2= (KeyValuePair) o2;
+        ArrayList<KeyValuePair> sorted= new ArrayList<KeyValuePair>(Arrays.asList(keyValuePairs));
+        Collections.sort(sorted, new Comparator<KeyValuePair>() {
+			public int compare(KeyValuePair p1, KeyValuePair p2) {
 				return Collator.getInstance().compare(p1.fKey, p2.fKey);
 			}
         });
 
         for (int i = 0; i < sorted.size(); i++) {
-            KeyValuePair curr= (KeyValuePair) sorted.get(i);
+            KeyValuePair curr= sorted.get(i);
 			InsertEdit insertEdit= insert(curr);
 
             String message= Messages.format(NLSMessages.NLSPropertyFileModifier_add_entry, BasicElementLabels.getJavaElementName(curr.getKey()));
@@ -129,8 +128,8 @@ public class PropertyFileDocumentModel {
     }
 
     public DeleteEdit remove(String key) {
-    	for (Iterator iter = fKeyValuePairs.iterator(); iter.hasNext();) {
-            KeyValuePairModell keyValuePair = (KeyValuePairModell) iter.next();
+    	for (Iterator<KeyValuePairModell> iter = fKeyValuePairs.iterator(); iter.hasNext();) {
+            KeyValuePairModell keyValuePair = iter.next();
             if (keyValuePair.fKey.equals(key)) {
             	return new DeleteEdit(keyValuePair.fOffset, keyValuePair.getLength());
             }
@@ -139,8 +138,8 @@ public class PropertyFileDocumentModel {
     }
 
     public ReplaceEdit replace(KeyValuePair toReplace, KeyValuePair replaceWith) {
-        for (Iterator iter = fKeyValuePairs.iterator(); iter.hasNext();) {
-            KeyValuePairModell keyValuePair = (KeyValuePairModell) iter.next();
+        for (Iterator<KeyValuePairModell> iter = fKeyValuePairs.iterator(); iter.hasNext();) {
+            KeyValuePairModell keyValuePair = iter.next();
             if (keyValuePair.fKey.equals(toReplace.getKey())) {
                 String newText= new KeyValuePairModell(replaceWith).getKeyValueText();
                 return new ReplaceEdit(keyValuePair.fOffset, keyValuePair.getLength(), newText);
@@ -150,9 +149,9 @@ public class PropertyFileDocumentModel {
     }
 
     private int findInsertPosition(KeyValuePairModell keyValuePair) {
-    	ArrayList keys= new ArrayList();
+    	ArrayList<String> keys= new ArrayList<String>();
         for (int i= 0; i < fKeyValuePairs.size(); i++) {
-            KeyValuePairModell element = (KeyValuePairModell) fKeyValuePairs.get(i);
+            KeyValuePairModell element = fKeyValuePairs.get(i);
             if (! (element instanceof LastKeyValuePair))
             	keys.add(element.getKey());
         }
@@ -166,7 +165,7 @@ public class PropertyFileDocumentModel {
     }
 
     private void parsePropertyDocument(IDocument document) {
-        fKeyValuePairs = new ArrayList();
+        fKeyValuePairs = new ArrayList<KeyValuePairModell>();
 
         SimpleLineReader reader = new SimpleLineReader(document);
         int offset = 0;
@@ -176,8 +175,8 @@ public class PropertyFileDocumentModel {
             if (!SimpleLineReader.isCommentOrWhiteSpace(line)) {
                 int idx = getIndexOfSeparationCharacter(line);
                 if (idx != -1) {
-                	String key= line.substring(0, idx);
-                	String value= line.substring(idx + 1);
+					String key= line.substring(0, idx).trim();
+					String value= Strings.trimLeadingTabsAndSpaces(line.substring(idx + 1));
                     fKeyValuePairs.add(new KeyValuePairModell(key, value, offset, leadingWhiteSpaces));
                     leadingWhiteSpaces = 0;
                 }
@@ -210,74 +209,23 @@ public class PropertyFileDocumentModel {
             minIndex = Math.max(indexOfEven, indexOfColumn);
         }
 
-        if ((minIndex != -1) && (indexOfBlank != -1)) {
-            minIndex = Math.min(minIndex, indexOfBlank);
-        } else {
-            minIndex = Math.max(minIndex, indexOfBlank);
+		if ((minIndex == -1) && (indexOfBlank != -1)) {
+			minIndex= indexOfBlank;
         }
 
         return minIndex;
     }
 
-    public static String unwindEscapeChars(String s){
+	public static String escape(String s, boolean escapeCommentCharsAndLeadingWhitespaces) {
 		StringBuffer sb= new StringBuffer(s.length());
 		int length= s.length();
 		for (int i= 0; i < length; i++){
 			char c= s.charAt(i);
-			sb.append(getUnwoundString(c));
+			sb.append(PropertiesFileEscapes.escape(c));
 		}
-		return sb.toString();
-	}
-
-	public static String unwindValue(String value) {
-		return escapeLeadingWhiteSpaces(escapeCommentChars(unwindEscapeChars(value)));
-	}
-
-	private static String getUnwoundString(char c){
-	        	switch(c){
-	        		case '\b' :
-	        			return "\\b";//$NON-NLS-1$
-	        		case '\t' :
-	        			return "\\t";//$NON-NLS-1$
-	        		case '\n' :
-	        			return "\\n";//$NON-NLS-1$
-	        		case '\f' :
-	        			return "\\f";//$NON-NLS-1$
-	        		case '\r' :
-	        			return "\\r";//$NON-NLS-1$
-
-//      			These can be used unescaped in properties file:
-//      			case '\"' :
-//      			return "\\\"";//$NON-NLS-1$
-//      			case '\'' :
-//      			return "\\\'";//$NON-NLS-1$
-
-	        		case '\\' :
-	        			return "\\\\";//$NON-NLS-1$
-
-//      			This is only done when writing to the .properties file in #unwindValue(String)
-//      			case '!':
-//      			return "\\!";//$NON-NLS-1$
-//      			case '#':
-//      			return "\\#";//$NON-NLS-1$
-
-	        		default:
-	        			if (((c < 0x0020) || (c > 0x007e))){
-	        				return new StringBuffer()
-							.append('\\')
-							.append('u')
-							.append(toHex((c >> 12) & 0xF))
-							.append(toHex((c >>  8) & 0xF))
-							.append(toHex((c >>  4) & 0xF))
-							.append(toHex( c        & 0xF)).toString();
-
-	        			} else
-	        				return String.valueOf(c);
-	        	}
-	        }
-
-	private static char toHex(int halfByte) {
-		return HEX_DIGITS[(halfByte & 0xF)];
+		if(!escapeCommentCharsAndLeadingWhitespaces)
+			return sb.toString();
+		return escapeLeadingWhiteSpaces(escapeCommentChars(sb.toString()));
 	}
 
 	private static String escapeCommentChars(String string) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/changes/CreateFileChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/changes/CreateFileChange.java
index adbab26..463d143 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/changes/CreateFileChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/changes/CreateFileChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,6 +87,7 @@ public class CreateFileChange extends ResourceChange {
 		fExplicitEncoding= explicit;
 	}
 
+	@Override
 	public String getName() {
 		if (fChangeName == null)
 			return Messages.format(NLSChangesMessages.createFile_Create_file, BasicElementLabels.getPathLabel(fPath, false));
@@ -114,10 +115,12 @@ public class CreateFileChange extends ResourceChange {
 		return fPath;
 	}
 
+	@Override
 	protected IResource getModifiedResource() {
 		return ResourcesPlugin.getWorkspace().getRoot().getFile(fPath);
 	}
 
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
 		IFile file= ResourcesPlugin.getWorkspace().getRoot().getFile(fPath);
@@ -140,6 +143,7 @@ public class CreateFileChange extends ResourceChange {
 		return result;
 	}
 
+	@Override
 	public Change perform(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 
 		InputStream is= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/JavaProcessors.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/JavaProcessors.java
index b6f2eb4..7248a4d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/JavaProcessors.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/JavaProcessors.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,13 +38,13 @@ public class JavaProcessors {
 	}
 
 	public static String[] computeAffectedNaturs(IJavaElement[] elements) throws CoreException {
-		Set result= new HashSet();
+		Set<String> result= new HashSet<String>();
 		for (int i= 0; i < elements.length; i++) {
 			String[] natures= computeAffectedNatures(elements[i]);
 			for (int j= 0; j < natures.length; j++) {
 				result.add(natures[j]);
 			}
 		}
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/RefactoringProcessors.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/RefactoringProcessors.java
index ed1a236..f977df7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/RefactoringProcessors.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/RefactoringProcessors.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,13 +20,13 @@ import org.eclipse.core.resources.IProject;
 public class RefactoringProcessors {
 
 	public static String[] getNatures(IProject[] projects) throws CoreException {
-		Set result= new HashSet();
+		Set<String> result= new HashSet<String>();
 		for (int i= 0; i < projects.length; i++) {
 			String[] pns= projects[i].getDescription().getNatureIds();
 			for (int p = 0; p < pns.length; p++) {
 				result.add(pns[p]);
 			}
 		}
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java
index 5a93dd6..c942198 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,20 +47,20 @@ import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
  */
 public class ResourceModifications {
 
-	private List/*<IResource>*/ fCreate;
-	private List/*<IResource>*/ fDelete;
+	private List<IResource> fCreate;
+	private List<IResource> fDelete;
 
-	private List/*<IResource>*/ fMove;
-	private List/*<MoveArguments>*/ fMoveArguments;
+	private List<IResource> fMove;
+	private List<MoveArguments> fMoveArguments;
 
-	private List/*<IResource>*/ fRename;
-	private List/*<RenameArguments>*/ fRenameArguments;
+	private List<IResource> fRename;
+	private List<RenameArguments> fRenameArguments;
 
-	private List/*<IResource>*/ fCopy;
-	private List/*<CopyArguments>*/ fCopyArguments;
+	private List<IResource> fCopy;
+	private List<CopyArguments> fCopyArguments;
 
 	private int fIgnoreCount;
-	private List/*<DeltaDescription>*/ fDeltaDescriptions;
+	private List<DeltaDescription> fDeltaDescriptions;
 
 	public static abstract class DeltaDescription {
 		protected IResource fResource;
@@ -75,9 +75,11 @@ public class ResourceModifications {
 		public DeleteDescription(IResource resource) {
 			super(resource);
 		}
+		@Override
 		public void buildDelta(IResourceChangeDescriptionFactory builder) {
 			builder.delete(fResource);
 		}
+		@Override
 		public IPath getDestinationPath() {
 			return null;
 		}
@@ -86,9 +88,11 @@ public class ResourceModifications {
 		public ChangedDescription(IFile resource) {
 			super(resource);
 		}
+		@Override
 		public void buildDelta(IResourceChangeDescriptionFactory builder) {
 			builder.change((IFile)fResource);
 		}
+		@Override
 		public IPath getDestinationPath() {
 			return null;
 		}
@@ -97,9 +101,11 @@ public class ResourceModifications {
 		public CreateDescription(IResource resource) {
 			super(resource);
 		}
+		@Override
 		public void buildDelta(IResourceChangeDescriptionFactory builder) {
 			builder.create(fResource);
 		}
+		@Override
 		public IPath getDestinationPath() {
 			return fResource.getFullPath();
 		}
@@ -110,6 +116,7 @@ public class ResourceModifications {
 			super(resource);
 			fDestination= destination;
 		}
+		@Override
 		public void buildDelta(IResourceChangeDescriptionFactory builder) {
 			IResource existing= ResourcesPlugin.getWorkspace().getRoot().findMember(fDestination);
 			if (existing != null && !existing.equals(fResource)) {
@@ -117,6 +124,7 @@ public class ResourceModifications {
 			}
 			builder.move(fResource, fDestination);
 		}
+		@Override
 		public IPath getDestinationPath() {
 			return fDestination;
 		}
@@ -127,6 +135,7 @@ public class ResourceModifications {
 			super(resource);
 			fDestination= destination;
 		}
+		@Override
 		public void buildDelta(IResourceChangeDescriptionFactory builder) {
 			IResource existing= ResourcesPlugin.getWorkspace().getRoot().findMember(fDestination);
 			if (existing != null && !existing.equals(fResource)) {
@@ -134,6 +143,7 @@ public class ResourceModifications {
 			}
 			builder.copy(fResource, fDestination);
 		}
+		@Override
 		public IPath getDestinationPath() {
 			return fDestination;
 		}
@@ -159,7 +169,7 @@ public class ResourceModifications {
 	 */
 	public void addCreate(IResource create) {
 		if (fCreate == null)
-			fCreate= new ArrayList(2);
+			fCreate= new ArrayList<IResource>(2);
 		fCreate.add(create);
 		if (fIgnoreCount == 0) {
 			internalAdd(new CreateDescription(create));
@@ -174,7 +184,7 @@ public class ResourceModifications {
 	 */
 	public void addDelete(IResource delete) {
 		if (fDelete == null)
-			fDelete= new ArrayList(2);
+			fDelete= new ArrayList<IResource>(2);
 		fDelete.add(delete);
 		if (fIgnoreCount == 0) {
 			internalAdd(new DeleteDescription(delete));
@@ -190,8 +200,8 @@ public class ResourceModifications {
 	 */
 	public void addMove(IResource move, MoveArguments arguments) {
 		if (fMove == null) {
-			fMove= new ArrayList(2);
-			fMoveArguments= new ArrayList(2);
+			fMove= new ArrayList<IResource>(2);
+			fMoveArguments= new ArrayList<MoveArguments>(2);
 		}
 		fMove.add(move);
 		fMoveArguments.add(arguments);
@@ -210,8 +220,8 @@ public class ResourceModifications {
 	 */
 	public void addCopy(IResource copy, CopyArguments arguments) {
 		if (fCopy == null) {
-			fCopy= new ArrayList(2);
-			fCopyArguments= new ArrayList(2);
+			fCopy= new ArrayList<IResource>(2);
+			fCopyArguments= new ArrayList<CopyArguments>(2);
 		}
 		fCopy.add(copy);
 		fCopyArguments.add(arguments);
@@ -229,8 +239,8 @@ public class ResourceModifications {
 		Assert.isNotNull(rename);
 		Assert.isNotNull(arguments);
 		if (fRename == null) {
-			fRename= new ArrayList(2);
-			fRenameArguments= new ArrayList(2);
+			fRename= new ArrayList<IResource>(2);
+			fRenameArguments= new ArrayList<RenameArguments>(2);
 		}
 		fRename.add(rename);
 		fRenameArguments.add(arguments);
@@ -241,10 +251,10 @@ public class ResourceModifications {
 	}
 
 	public RefactoringParticipant[] getParticipants(RefactoringStatus status, RefactoringProcessor processor, String[] natures, SharableParticipants shared) {
-		List result= new ArrayList(5);
+		List<RefactoringParticipant> result= new ArrayList<RefactoringParticipant>(5);
 		if (fDelete != null) {
 			DeleteArguments arguments= new DeleteArguments();
-			for (Iterator iter= fDelete.iterator(); iter.hasNext();) {
+			for (Iterator<IResource> iter= fDelete.iterator(); iter.hasNext();) {
 				DeleteParticipant[] deletes= ParticipantManager.loadDeleteParticipants(status,
 					processor, iter.next(),
 					arguments, natures, shared);
@@ -253,7 +263,7 @@ public class ResourceModifications {
 		}
 		if (fCreate != null) {
 			CreateArguments arguments= new CreateArguments();
-			for (Iterator iter= fCreate.iterator(); iter.hasNext();) {
+			for (Iterator<IResource> iter= fCreate.iterator(); iter.hasNext();) {
 				CreateParticipant[] creates= ParticipantManager.loadCreateParticipants(status,
 					processor, iter.next(),
 					arguments, natures, shared);
@@ -263,7 +273,7 @@ public class ResourceModifications {
 		if (fMove != null) {
 			for (int i= 0; i < fMove.size(); i++) {
 				Object element= fMove.get(i);
-				MoveArguments arguments= (MoveArguments)fMoveArguments.get(i);
+				MoveArguments arguments= fMoveArguments.get(i);
 				MoveParticipant[] moves= ParticipantManager.loadMoveParticipants(status,
 					processor, element,
 					arguments, natures, shared);
@@ -274,7 +284,7 @@ public class ResourceModifications {
 		if (fCopy != null) {
 			for (int i= 0; i < fCopy.size(); i++) {
 				Object element= fCopy.get(i);
-				CopyArguments arguments= (CopyArguments)fCopyArguments.get(i);
+				CopyArguments arguments= fCopyArguments.get(i);
 				CopyParticipant[] copies= ParticipantManager.loadCopyParticipants(status,
 					processor, element,
 					arguments, natures, shared);
@@ -284,14 +294,14 @@ public class ResourceModifications {
 		if (fRename != null) {
 			for (int i= 0; i < fRename.size(); i++) {
 				Object resource= fRename.get(i);
-				RenameArguments arguments= (RenameArguments) fRenameArguments.get(i);
+				RenameArguments arguments= fRenameArguments.get(i);
 				RenameParticipant[] renames= ParticipantManager.loadRenameParticipants(status,
 					processor, resource,
 					arguments, natures, shared);
 				result.addAll(Arrays.asList(renames));
 			}
 		}
-		return (RefactoringParticipant[])result.toArray(new RefactoringParticipant[result.size()]);
+		return result.toArray(new RefactoringParticipant[result.size()]);
 	}
 
 	public void ignoreForDelta() {
@@ -326,8 +336,8 @@ public class ResourceModifications {
 		if (fDeltaDescriptions == null)
 			return false;
 		IPath fullPath= resource.getFullPath();
-		for (Iterator iter= fDeltaDescriptions.iterator(); iter.hasNext();) {
-			DeltaDescription delta= (DeltaDescription) iter.next();
+		for (Iterator<DeltaDescription> iter= fDeltaDescriptions.iterator(); iter.hasNext();) {
+			DeltaDescription delta= iter.next();
 			if (fullPath.equals(delta.getDestinationPath()))
 				return true;
 		}
@@ -337,8 +347,8 @@ public class ResourceModifications {
 	public void buildDelta(IResourceChangeDescriptionFactory builder) {
 		if (fDeltaDescriptions == null)
 			return;
-		for (Iterator iter= fDeltaDescriptions.iterator(); iter.hasNext();) {
-			((DeltaDescription) iter.next()).buildDelta(builder);
+		for (Iterator<DeltaDescription> iter= fDeltaDescriptions.iterator(); iter.hasNext();) {
+			iter.next().buildDelta(builder);
 		}
 	}
 
@@ -359,7 +369,7 @@ public class ResourceModifications {
 
 	private void internalAdd(DeltaDescription description) {
 		if (fDeltaDescriptions == null)
-			fDeltaDescriptions= new ArrayList();
+			fDeltaDescriptions= new ArrayList<DeltaDescription>();
 		fDeltaDescriptions.add(description);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceProcessors.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceProcessors.java
index 1434d4f..74f7afd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceProcessors.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceProcessors.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,22 +22,22 @@ public class ResourceProcessors {
 
 	public static String[] computeAffectedNatures(IResource resource) throws CoreException {
 		IProject project= resource.getProject();
-		Set result= new HashSet();
-		Set visitedProjects= new HashSet();
+		Set<String> result= new HashSet<String>();
+		Set<IProject> visitedProjects= new HashSet<IProject>();
 		computeNatures(result, visitedProjects, project);
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	public static String[] computeAffectedNatures(IResource[] resources) throws CoreException {
-		Set result= new HashSet();
-		Set visitedProjects= new HashSet();
+		Set<String> result= new HashSet<String>();
+		Set<IProject> visitedProjects= new HashSet<IProject>();
 		for (int i= 0; i < resources.length; i++) {
 			computeNatures(result, visitedProjects, resources[i].getProject());
 		}
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
-	private static void computeNatures(Set result, Set visitedProjects, IProject focus) throws CoreException {
+	private static void computeNatures(Set<String> result, Set<IProject> visitedProjects, IProject focus) throws CoreException {
 		if (visitedProjects.contains(focus))
 			return;
 		String[] pns= focus.getDescription().getNatureIds();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties
index be3b8c5..055df80 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -115,6 +115,7 @@ ExtractMethodAnalyzer_cannot_extract_anonymous_type=Cannot extract the body of a
 ExtractMethodAnalyzer_cannot_extract_variable_declaration_fragment=Cannot extract a variable declaration fragment. Select whole declaration statement.
 ExtractMethodAnalyzer_cannot_extract_for_initializer=Cannot extract initialization part of a \'for\' statement.
 ExtractMethodAnalyzer_cannot_extract_for_updater=Cannot extract increment part of a \'for\' statement.
+ExtractMethodAnalyzer_cannot_extract_from_annotation=Cannot extract out of an annotation.
 ExtractMethodAnalyzer_cannot_extract_variable_declaration=Cannot extract parts of a variable declaration. Select whole declaration.
 ExtractMethodAnalyzer_cannot_extract_type_reference=Cannot extract a single type reference.
 ExtractMethodAnalyzer_cannot_extract_switch_case=Cannot extract the expression of a case statement.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java
index 8c55a22..70fbfd7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,10 +36,12 @@ public abstract class JavaRenameProcessor extends RenameProcessor implements INa
 	private String fNewElementName;
 	private RenameModifications fRenameModifications;
 
+	@Override
 	public final RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants shared) throws CoreException {
 		return fRenameModifications.loadParticipants(status, this, getAffectedProjectNatures(), shared);
 	}
 
+	@Override
 	public final RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		ResourceChangeChecker checker= (ResourceChangeChecker) context.getChecker(ResourceChangeChecker.class);
 		IResourceChangeDescriptionFactory deltaFactory= checker.getDeltaFactory();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java
index e740ba3..8aca3a1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ class MethodOccurenceCollector extends CuCollectingSearchRequestor {
 		fName= methodName;
 	}
 
+	@Override
 	public void acceptSearchMatch(ICompilationUnit unit, SearchMatch match) throws CoreException {
 		if (match instanceof MethodReferenceMatch
 				&& ((MethodReferenceMatch) match).isSuperInvocation()
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java
index 38e2f46..525e0d3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,24 +75,24 @@ public class RefactoringAnalyzeUtil {
 	}
 
 	public static IProblem[] getIntroducedCompileProblems(CompilationUnit newCUNode, CompilationUnit oldCuNode) {
-		Set subResult= new HashSet();
-		Set oldProblems= getOldProblems(oldCuNode);
+		Set<IProblem> subResult= new HashSet<IProblem>();
+		Set<IProblem> oldProblems= getOldProblems(oldCuNode);
 		IProblem[] newProblems= ASTNodes.getProblems(newCUNode, ASTNodes.INCLUDE_ALL_PARENTS, ASTNodes.PROBLEMS);
 		for (int i= 0; i < newProblems.length; i++) {
 			IProblem correspondingOld= findCorrespondingProblem(oldProblems, newProblems[i]);
 			if (correspondingOld == null)
 				subResult.add(newProblems[i]);
 		}
-		return (IProblem[]) subResult.toArray(new IProblem[subResult.size()]);
+		return subResult.toArray(new IProblem[subResult.size()]);
 	}
 
 	public static IRegion getNewTextRange(TextEdit edit, TextChange change){
 		return change.getPreviewEdit(edit).getRegion();
 	}
 
-	private static IProblem findCorrespondingProblem(Set oldProblems, IProblem iProblem) {
-		for (Iterator iter= oldProblems.iterator(); iter.hasNext();) {
-			IProblem oldProblem= (IProblem) iter.next();
+	private static IProblem findCorrespondingProblem(Set<IProblem> oldProblems, IProblem iProblem) {
+		for (Iterator<IProblem> iter= oldProblems.iterator(); iter.hasNext();) {
+			IProblem oldProblem= iter.next();
 			if (isCorresponding(oldProblem, iProblem))
 				return oldProblem;
 		}
@@ -120,7 +120,7 @@ public class RefactoringAnalyzeUtil {
 		return getSimpleName(node);
 	}
 
-	private static Set getOldProblems(CompilationUnit oldCuNode) {
-		return new HashSet(Arrays.asList(ASTNodes.getProblems(oldCuNode, ASTNodes.INCLUDE_ALL_PARENTS, ASTNodes.PROBLEMS)));
+	private static Set<IProblem> getOldProblems(CompilationUnit oldCuNode) {
+		return new HashSet<IProblem>(Arrays.asList(ASTNodes.getProblems(oldCuNode, ASTNodes.INCLUDE_ALL_PARENTS, ASTNodes.PROBLEMS)));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringHandleTransplanter.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringHandleTransplanter.java
index 4f6c95d..2c5c2e9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringHandleTransplanter.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringHandleTransplanter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,18 +41,18 @@ public class RefactoringHandleTransplanter {
 
 	private final IType fOldType;
 	private final IType fNewType;
-	private final Map/*<IJavaElement, String>*/ fRefactoredSimilarElements;
+	private final Map<IJavaElement, String> fRefactoredSimilarElements;
 
 	/**
 	 * @param oldType old type
 	 * @param newType renamed type
 	 * @param refactoredSimilarElements map from similar element (IJavaElement) to new name (String), or <code>null</code>
 	 */
-	public RefactoringHandleTransplanter(IType oldType, IType newType, Map/*<IJavaElement, String>*/ refactoredSimilarElements) {
+	public RefactoringHandleTransplanter(IType oldType, IType newType, Map<IJavaElement, String> refactoredSimilarElements) {
 		fOldType= oldType;
 		fNewType= newType;
 		if (refactoredSimilarElements == null)
-			fRefactoredSimilarElements= Collections.EMPTY_MAP;
+			fRefactoredSimilarElements= Collections.emptyMap();
 		else
 			fRefactoredSimilarElements= refactoredSimilarElements;
 	}
@@ -69,18 +69,18 @@ public class RefactoringHandleTransplanter {
 		/*
 		 * Create a list of handles from top-level type to the handle
 		 */
-		final LinkedList oldElements= new LinkedList();
+		final LinkedList<IMember> oldElements= new LinkedList<IMember>();
 		addElements(handle, oldElements);
 
 		/*
 		 * Step through the elements and re-locate them in the new parents.
 		 */
-		final IMember[] newElements= convertElements((IMember[]) oldElements.toArray(new IMember[0]));
+		final IMember[] newElements= convertElements(oldElements.toArray(new IMember[0]));
 
 		return newElements[newElements.length - 1];
 	}
 
-	private void addElements(IMember element, LinkedList chain) {
+	private void addElements(IMember element, LinkedList<IMember> chain) {
 		chain.addFirst(element);
 		IJavaElement parent= element.getParent();
 		if (parent instanceof IMember)
@@ -197,7 +197,7 @@ public class RefactoringHandleTransplanter {
 	}
 
 	private String resolveElementName(IJavaElement element) {
-		final String newName= (String) fRefactoredSimilarElements.get(element);
+		final String newName= fRefactoredSimilarElements.get(element);
 		if (newName != null)
 			return newName;
 		else
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java
index ba249d8..5db8b7f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public class RefactoringScanner {
 	private final String fQualifier;
 
 	private IScanner fScanner;
-	private Set fMatches; //Set<TextMatch>
+	private Set<TextMatch> fMatches; //Set<TextMatch>
 
 
 	public RefactoringScanner(String name, String qualifier) {
@@ -67,7 +67,7 @@ public class RefactoringScanner {
 
 	public void scan(ICompilationUnit cu)	throws JavaModelException {
 		char[] chars= cu.getBuffer().getCharacters();
-		fMatches= new HashSet();
+		fMatches= new HashSet<TextMatch>();
 		fScanner= ToolFactory.createScanner(true, true, false, true);
 		fScanner.setSource(chars);
 
@@ -81,10 +81,17 @@ public class RefactoringScanner {
 		fScanner= null;
 	}
 
-	/** only for testing */
+	/**
+	 * Scan the given text.
+	 * <p>
+	 * <strong>NOTE:</strong> Use only for testing.
+	 * </p>
+	 * 
+	 * @param text the text
+	 */
 	public void scan(String text) {
 		char[] chars= text.toCharArray();
-		fMatches= new HashSet();
+		fMatches= new HashSet<TextMatch>();
 		fScanner= ToolFactory.createScanner(true, true, false, true);
 		fScanner.setSource(chars);
 		doScan();
@@ -208,7 +215,7 @@ public class RefactoringScanner {
 	/**
 	 * @return Set of TextMatch
 	 */
-	public Set getMatches() {
+	public Set<TextMatch> getMatches() {
 		return fMatches;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java
index 0e36552..376fd24 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,6 @@ import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.SourceRange;
 import org.eclipse.jdt.core.WorkingCopyOwner;
 import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -70,6 +69,7 @@ import org.eclipse.jdt.internal.corext.refactoring.util.TextChangeManager;
 import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.internal.corext.util.SearchUtils;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 class RenameAnalyzeUtil {
@@ -89,25 +89,26 @@ class RenameAnalyzeUtil {
 
 		private static class NameNodeVisitor extends ASTVisitor {
 
-			private Collection fRanges;
-			private Collection fProblemNodes;
+			private Collection<IRegion> fRanges;
+			private Collection<SimpleName> fProblemNodes;
 			private String fKey;
 
 			public NameNodeVisitor(TextEdit[] edits, TextChange change, String key) {
 				Assert.isNotNull(edits);
 				Assert.isNotNull(key);
 
-				fRanges= new HashSet(Arrays.asList(RefactoringAnalyzeUtil.getNewRanges(edits, change)));
-				fProblemNodes= new ArrayList(0);
+				fRanges= new HashSet<IRegion>(Arrays.asList(RefactoringAnalyzeUtil.getNewRanges(edits, change)));
+				fProblemNodes= new ArrayList<SimpleName>(0);
 				fKey= key;
 			}
 
 			public SimpleName[] getProblemNodes() {
-				return (SimpleName[]) fProblemNodes.toArray(new SimpleName[fProblemNodes.size()]);
+				return fProblemNodes.toArray(new SimpleName[fProblemNodes.size()]);
 			}
 
 			//----- visit methods
 
+			@Override
 			public boolean visit(SimpleName node) {
 				VariableDeclaration decl= getVariableDeclaration(node);
 				if (decl == null)
@@ -259,7 +260,7 @@ class RenameAnalyzeUtil {
 			SearchResultGroup[] oldReferences, SearchResultGroup[] newReferences, String newElementName) {
 		RefactoringStatus result= new RefactoringStatus();
 
-		HashMap cuToNewResults= new HashMap(newReferences.length);
+		HashMap<ICompilationUnit, SearchMatch[]> cuToNewResults= new HashMap<ICompilationUnit, SearchMatch[]>(newReferences.length);
 		for (int i1= 0; i1 < newReferences.length; i1++) {
 			ICompilationUnit cu= newReferences[i1].getCompilationUnit();
 			if (cu != null)
@@ -273,7 +274,7 @@ class RenameAnalyzeUtil {
 			if (cu == null)
 				continue;
 
-			SearchMatch[] newSearchMatches= (SearchMatch[]) cuToNewResults.remove(cu);
+			SearchMatch[] newSearchMatches= cuToNewResults.remove(cu);
 			if (newSearchMatches == null) {
 				for (int j = 0; j < oldMatches.length; j++) {
 					SearchMatch oldMatch = oldMatches[j];
@@ -284,10 +285,10 @@ class RenameAnalyzeUtil {
 			}
 		}
 
-		for (Iterator iter= cuToNewResults.entrySet().iterator(); iter.hasNext();) {
-			Map.Entry entry= (Entry) iter.next();
-			ICompilationUnit cu= (ICompilationUnit) entry.getKey();
-			SearchMatch[] newSearchMatches= (SearchMatch[]) entry.getValue();
+		for (Iterator<Entry<ICompilationUnit, SearchMatch[]>> iter= cuToNewResults.entrySet().iterator(); iter.hasNext();) {
+			Entry<ICompilationUnit, SearchMatch[]> entry= iter.next();
+			ICompilationUnit cu= entry.getKey();
+			SearchMatch[] newSearchMatches= entry.getValue();
 			for (int i= 0; i < newSearchMatches.length; i++) {
 				SearchMatch newMatch= newSearchMatches[i];
 				addReferenceShadowedError(cu, newMatch, newElementName, result);
@@ -298,18 +299,18 @@ class RenameAnalyzeUtil {
 
 	private static void analyzeChanges(ICompilationUnit cu, TextChange change,
 			SearchMatch[] oldMatches, SearchMatch[] newMatches, String newElementName, RefactoringStatus result) {
-		Map updatedOldOffsets= getUpdatedChangeOffsets(change, oldMatches);
+		Map<Integer, SearchMatch> updatedOldOffsets= getUpdatedChangeOffsets(change, oldMatches);
 		for (int i= 0; i < newMatches.length; i++) {
 			SearchMatch newMatch= newMatches[i];
 			Integer offsetInNew= new Integer(newMatch.getOffset());
-			SearchMatch oldMatch= (SearchMatch) updatedOldOffsets.remove(offsetInNew);
+			SearchMatch oldMatch= updatedOldOffsets.remove(offsetInNew);
 			if (oldMatch == null) {
 				addReferenceShadowedError(cu, newMatch, newElementName, result);
 			}
 		}
-		for (Iterator iter= updatedOldOffsets.values().iterator(); iter.hasNext();) {
+		for (Iterator<SearchMatch> iter= updatedOldOffsets.values().iterator(); iter.hasNext();) {
 			// remaining old matches are not found any more -> they have been shadowed
-			SearchMatch oldMatch= (SearchMatch) iter.next();
+			SearchMatch oldMatch= iter.next();
 			addShadowsError(cu, oldMatch, result);
 		}
 	}
@@ -320,12 +321,12 @@ class RenameAnalyzeUtil {
 	 * @param oldMatches
 	 * @return Map <Integer updatedOffset, SearchMatch oldMatch>
 	 */
-	private static Map getUpdatedChangeOffsets(TextChange change, SearchMatch[] oldMatches) {
-		Map/*<Integer updatedOffset, SearchMatch oldMatch>*/ updatedOffsets= new HashMap();
-		Map oldToUpdatedOffsets= getEditChangeOffsetUpdates(change);
+	private static Map<Integer, SearchMatch> getUpdatedChangeOffsets(TextChange change, SearchMatch[] oldMatches) {
+		Map<Integer, SearchMatch> updatedOffsets= new HashMap<Integer, SearchMatch>();
+		Map<Integer, Integer> oldToUpdatedOffsets= getEditChangeOffsetUpdates(change);
 		for (int i= 0; i < oldMatches.length; i++) {
 			SearchMatch oldMatch= oldMatches[i];
-			Integer updatedOffset= (Integer) oldToUpdatedOffsets.get(new Integer(oldMatch.getOffset()));
+			Integer updatedOffset= oldToUpdatedOffsets.get(new Integer(oldMatch.getOffset()));
 			if (updatedOffset == null)
 				updatedOffset= new Integer(-1); //match not updated
 			updatedOffsets.put(updatedOffset, oldMatch);
@@ -338,9 +339,9 @@ class RenameAnalyzeUtil {
 	 * @param change
 	 * @return Map <Integer oldOffset, Integer updatedOffset>
 	 */
-	private static Map getEditChangeOffsetUpdates(TextChange change) {
+	private static Map<Integer, Integer> getEditChangeOffsetUpdates(TextChange change) {
 		TextEditChangeGroup[] editChanges= change.getTextEditChangeGroups();
-		Map/*<oldOffset, newOffset>*/ offsetUpdates= new HashMap(editChanges.length);
+		Map<Integer, Integer> offsetUpdates= new HashMap<Integer, Integer>(editChanges.length);
 		for (int i= 0; i < editChanges.length; i++) {
 			TextEditChangeGroup editChange= editChanges[i];
 			IRegion oldRegion= editChange.getRegion();
@@ -416,7 +417,7 @@ class RenameAnalyzeUtil {
 		ICompilationUnit compilationUnit= (ICompilationUnit) oldCUNode.getJavaElement();
 
 		String newCuSource= cuChange.getPreviewContent(new NullProgressMonitor());
-		CompilationUnit newCUNode= new RefactoringASTParser(AST.JLS3).parse(newCuSource, compilationUnit, true, recovery, null);
+		CompilationUnit newCUNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(newCuSource, compilationUnit, true, recovery, null);
 
 		result.merge(analyzeCompileErrors(newCuSource, newCUNode, oldCUNode));
 		if (result.hasError())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java
index db8c1c4..892aa55 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -89,26 +89,32 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 		status.merge(initializeStatus);
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.RENAME_COMPILATION_UNIT_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() {
 		return RefactoringAvailabilityTester.isRenameAvailable(fCu);
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameCompilationUnitRefactoring_name;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fCu);
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] {fCu};
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() {
 		RenameModifications result= new RenameModifications();
 		result.rename(fCu, new RenameArguments(getNewElementName(), getUpdateReferences()));
@@ -122,6 +128,7 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
 		if (!fWillRenameType) {
 			IFile file= ResourceUtil.getFile(fCu);
@@ -131,6 +138,7 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 		return new IFile[0];
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_REFACTORING;
 	}
@@ -157,6 +165,7 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 		return result;
 	}
 
+	@Override
 	public void setNewElementName(String newName) {
 		super.setNewElementName(newName);
 		if (fWillRenameType)
@@ -287,6 +296,7 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 
 	// --- preconditions ----------------------------------
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		if (fRenameTypeProcessor != null && ! fCu.isStructureKnown()){
 			fRenameTypeProcessor= null;
@@ -306,6 +316,7 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 		return new RefactoringStatus();
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		try{
 			if (fWillRenameType && (!fCu.isStructureKnown())){
@@ -375,6 +386,7 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 		return fileName.substring(0, fileName.lastIndexOf(".")); //$NON-NLS-1$
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		// renaming the file is taken care of in renameTypeRefactoring
 		if (fWillRenameType)
@@ -423,6 +435,7 @@ public final class RenameCompilationUnitProcessor extends JavaRenameProcessor im
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Change postCreateChange(Change[] participantChanges, IProgressMonitor pm) throws CoreException {
 		if (fWillRenameType)
 			return fRenameTypeProcessor.postCreateChange(participantChanges, pm);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameEnumConstProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameEnumConstProcessor.java
index 6251f6b..fea557b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameEnumConstProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameEnumConstProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@ public final class RenameEnumConstProcessor extends RenameFieldProcessor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor#canEnableGetterRenaming()
 	 */
+	@Override
 	public String canEnableGetterRenaming() throws CoreException {
 		return ""; //$NON-NLS-1$
 	}
@@ -78,6 +79,7 @@ public final class RenameEnumConstProcessor extends RenameFieldProcessor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor#canEnableSetterRenaming()
 	 */
+	@Override
 	public String canEnableSetterRenaming() throws CoreException {
 		return ""; //$NON-NLS-1$
 	}
@@ -85,6 +87,7 @@ public final class RenameEnumConstProcessor extends RenameFieldProcessor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.tagging.INameUpdating#checkNewElementName(java.lang.String)
 	 */
+	@Override
 	public RefactoringStatus checkNewElementName(String newName) throws CoreException {
 		RefactoringStatus result= Checks.checkEnumConstantName(newName, getField());
 		if (Checks.isAlreadyNamed(getField(), newName))
@@ -94,6 +97,7 @@ public final class RenameEnumConstProcessor extends RenameFieldProcessor {
 		return result;
 	}
 
+	@Override
 	protected RenameJavaElementDescriptor createRefactoringDescriptor() {
 		final IField field= getField();
 		String project= null;
@@ -128,6 +132,7 @@ public final class RenameEnumConstProcessor extends RenameFieldProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
 	 */
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.RENAME_ENUM_CONSTANT_PROCESSOR;
 	}
@@ -135,6 +140,7 @@ public final class RenameEnumConstProcessor extends RenameFieldProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
 	 */
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameEnumConstRefactoring_name;
 	}
@@ -167,6 +173,7 @@ public final class RenameEnumConstProcessor extends RenameFieldProcessor {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameEnumConstAvailable(getField());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java
index e3634f4..7c0441c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -171,18 +171,22 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 		fRenameSetter= false;
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.RENAME_FIELD_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameFieldAvailable(fField);
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameFieldRefactoring_name;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fField);
 	}
@@ -191,10 +195,12 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 		return fField;
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] { fField};
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		result.rename(fField, new RenameArguments(getNewElementName(), getUpdateReferences()));
@@ -213,6 +219,7 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() {
 		return ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits());
 	}
@@ -403,10 +410,12 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 		return count;
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_REFACTORING;
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		IField primary= (IField) fField.getPrimaryElement();
 		if (primary == null || !primary.exists()) {
@@ -418,6 +427,7 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 		return Checks.checkIfCuBroken(fField);
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		try{
 			pm.beginTask("", 18); //$NON-NLS-1$
@@ -588,6 +598,7 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.RenameFieldRefactoring_checking, 1);
@@ -818,7 +829,7 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 			RefactoringStatus result= new RefactoringStatus();
 			SearchResultGroup[] oldReferences= fReferences;
 
-			List compilationUnitsToModify= new ArrayList();
+			List<ICompilationUnit> compilationUnitsToModify= new ArrayList<ICompilationUnit>();
 			if (fIsComposite) {
 				// limited change set, no accessors.
 				for (int i= 0; i < oldReferences.length; i++)
@@ -829,7 +840,7 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 				compilationUnitsToModify.addAll(Arrays.asList(fChangeManager.getAllCompilationUnits()));
 			}
 
-			newWorkingCopies= RenameAnalyzeUtil.createNewWorkingCopies((ICompilationUnit[]) compilationUnitsToModify.toArray(new ICompilationUnit[compilationUnitsToModify.size()]),
+			newWorkingCopies= RenameAnalyzeUtil.createNewWorkingCopies(compilationUnitsToModify.toArray(new ICompilationUnit[compilationUnitsToModify.size()]),
 					fChangeManager, newWCOwner, new SubProgressMonitor(pm, 1));
 
 			SearchResultGroup[] newReferences= getNewReferences(new SubProgressMonitor(pm, 1), result, newWCOwner, newWorkingCopies);
@@ -861,6 +872,7 @@ public class RenameFieldProcessor extends JavaRenameProcessor implements IRefere
 			// and the javadoc) which are OK and must not be reported.
 			final IField oldField= getFieldInWorkingCopy(declaringCuWorkingCopy, getCurrentElementName());
 			requestor= new CollectingSearchRequestor() {
+				@Override
 				public void acceptSearchMatch(SearchMatch match) throws CoreException {
 					if (!oldField.equals(match.getElement()))
 						super.acceptSearchMatch(match);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameJavaProjectProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameJavaProjectProcessor.java
index 23bca81..a8e373a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameJavaProjectProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameJavaProjectProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,22 +76,27 @@ public final class RenameJavaProjectProcessor extends JavaRenameProcessor implem
 		status.merge(initializeStatus);
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.RENAME_JAVA_PROJECT_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameAvailable(fProject);
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameJavaProjectRefactoring_rename;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fProject);
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] {fProject};
 	}
@@ -101,12 +106,14 @@ public final class RenameJavaProjectProcessor extends JavaRenameProcessor implem
 		return JavaCore.create(ResourcesPlugin.getWorkspace().getRoot().findMember(newPath));
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		result.rename(fProject, new RenameArguments(getNewElementName(), getUpdateReferences()));
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
 		IFile projectFile= fProject.getProject().getFile(".project"); //$NON-NLS-1$
 		if (projectFile != null && projectFile.exists()) {
@@ -115,6 +122,7 @@ public final class RenameJavaProjectProcessor extends JavaRenameProcessor implem
 		return new IFile[0];
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_ALL;
 	}
@@ -135,6 +143,7 @@ public final class RenameJavaProjectProcessor extends JavaRenameProcessor implem
 		return fProject.getElementName();
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		return new RefactoringStatus();
 	}
@@ -153,6 +162,7 @@ public final class RenameJavaProjectProcessor extends JavaRenameProcessor implem
 		return new RefactoringStatus();
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		pm.beginTask("", 1); //$NON-NLS-1$
 		try{
@@ -185,6 +195,7 @@ public final class RenameJavaProjectProcessor extends JavaRenameProcessor implem
 		return newProjectStore.fetchInfo().exists();
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask("", 1); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java
index 06b8efc..723445f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -131,6 +131,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.rename.JavaRenameProcessor#getAffectedProjectNatures()
 	 */
+	@Override
 	protected final String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fLocalVariable);
 	}
@@ -138,6 +139,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getElements()
 	 */
+	@Override
 	public Object[] getElements() {
 		return new Object[] { fLocalVariable };
 	}
@@ -145,6 +147,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
 	 */
+	@Override
 	public String getIdentifier() {
 		return IDENTIFIER;
 	}
@@ -152,6 +155,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
 	 */
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameTempRefactoring_rename;
 	}
@@ -159,6 +163,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
 	 */
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameAvailable(fLocalVariable);
 	}
@@ -187,6 +192,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.tagging.INameUpdating#getNewElementName()
 	 */
+	@Override
 	public String getNewElementName() {
 		return fNewName;
 	}
@@ -194,6 +200,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.tagging.INameUpdating#setNewElementName(java.lang.String)
 	 */
+	@Override
 	public void setNewElementName(String newName) {
 		Assert.isNotNull(newName);
 		fNewName= newName;
@@ -206,6 +213,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 		return null; //cannot create an ILocalVariable
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		initAST();
 		if (fTempDeclarationNode == null || fTempDeclarationNode.resolveBinding() == null)
@@ -233,20 +241,24 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 		fCurrentName= fTempDeclarationNode.getName().getIdentifier();
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		result.rename(fLocalVariable, new RenameArguments(getNewElementName(), getUpdateReferences()));
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
 		return new IFile[] {ResourceUtil.getFile(fCu)};
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_NOTHING;
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context)
 			throws CoreException, OperationCanceledException {
 		try {
@@ -341,6 +353,7 @@ public class RenameLocalVariableProcessor extends JavaRenameProcessor implements
 		return new ReplaceEdit(offset, fCurrentName.length(), fNewName);
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.RenameTypeProcessor_creating_changes, 1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java
index 4ae93ec..46cf543 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,7 +104,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 	private SearchResultGroup[] fOccurrences;
 	private boolean fUpdateReferences;
 	private IMethod fMethod;
-	private Set/*<IMethod>*/ fMethodsToRename;
+	private Set<IMethod> fMethodsToRename;
 	private TextChangeManager fChangeManager;
 	private WorkingCopyOwner fWorkingCopyOwner;
 	private boolean fIsComposite;
@@ -159,40 +159,48 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 		setNewElementName(other.getNewElementName());
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.RENAME_METHOD_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameAvailable(fMethod);
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameMethodRefactoring_name;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fMethod);
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] {fMethod};
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		RenameArguments args= new RenameArguments(getNewElementName(), getUpdateReferences());
-		for (Iterator iter= fMethodsToRename.iterator(); iter.hasNext();) {
-			IMethod method= (IMethod) iter.next();
+		for (Iterator<IMethod> iter= fMethodsToRename.iterator(); iter.hasNext();) {
+			IMethod method= iter.next();
 			result.rename(method, args);
 		}
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
 		return ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits());
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_REFACTORING;
 	}
@@ -207,7 +215,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 		Assert.isNotNull(newName, "new name"); //$NON-NLS-1$
 
 		RefactoringStatus status= Checks.checkName(newName, JavaConventionsUtil.validateMethodName(newName, fMethod));
-		if (status.isOK() && Checks.startsWithUpperCase(newName))
+		if (status.isOK() && !Checks.startsWithLowerCase(newName))
 			status= RefactoringStatus.createWarningStatus(fIsComposite
 					? Messages.format(RefactoringCoreMessages.Checks_method_names_lowercase2, new String[] { BasicElementLabels.getJavaElementName(newName), getDeclaringTypeLabel()})
 					: RefactoringCoreMessages.Checks_method_names_lowercase);
@@ -234,15 +242,15 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 	private void initializeMethodsToRename(IProgressMonitor pm, ReferencesInBinaryContext binaryRefs) throws CoreException {
 		if (fMethodsToRename == null) {
 			IMethod[] rippleMethods= RippleMethodFinder2.getRelatedMethods(getMethod(), binaryRefs, pm, null);
-			fMethodsToRename= new HashSet(Arrays.asList(rippleMethods));
+			fMethodsToRename= new HashSet<IMethod>(Arrays.asList(rippleMethods));
 		}
 	}
 
 	protected void setMethodsToRename(IMethod[] methods) {
-		fMethodsToRename= new HashSet(Arrays.asList(methods));
+		fMethodsToRename= new HashSet<IMethod>(Arrays.asList(methods));
 	}
 
-	protected Set getMethodsToRename() {
+	protected Set<IMethod> getMethodsToRename() {
 		return fMethodsToRename;
 	}
 
@@ -280,6 +288,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 
 	//----------- preconditions ------------------
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		if (! fMethod.exists()){
 			String message= Messages.format(RefactoringCoreMessages.RenameMethodRefactoring_deleted,
@@ -296,6 +305,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 		return result;
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		try{
 			RefactoringStatus result= new RefactoringStatus();
@@ -386,10 +396,11 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 	}
 
 	private IType[] searchForOuterTypesOfReferences(IMethod[] newNameMethods, IProgressMonitor pm) throws CoreException {
-		final Set outerTypesOfReferences= new HashSet();
+		final Set<IType> outerTypesOfReferences= new HashSet<IType>();
 		SearchPattern pattern= RefactoringSearchEngine.createOrPattern(newNameMethods, IJavaSearchConstants.REFERENCES);
 		IJavaSearchScope scope= createRefactoringScope(getMethod());
 		SearchRequestor requestor= new SearchRequestor() {
+			@Override
 			public void acceptSearchMatch(SearchMatch match) throws CoreException {
 				Object element= match.getElement();
 				if (!(element instanceof IMember))
@@ -405,24 +416,25 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 		};
 		new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(),
 				scope, requestor, pm);
-		return (IType[]) outerTypesOfReferences.toArray(new IType[outerTypesOfReferences.size()]);
+		return outerTypesOfReferences.toArray(new IType[outerTypesOfReferences.size()]);
 	}
 
 	private IMethod[] searchForDeclarationsOfClashingMethods(IProgressMonitor pm) throws CoreException {
-		final List results= new ArrayList();
+		final List<IMethod> results= new ArrayList<IMethod>();
 		SearchPattern pattern= createNewMethodPattern();
 		IJavaSearchScope scope= RefactoringScopeFactory.create(getMethod().getJavaProject());
 		SearchRequestor requestor= new SearchRequestor() {
+			@Override
 			public void acceptSearchMatch(SearchMatch match) throws CoreException {
 				Object method= match.getElement();
 				if (method instanceof IMethod) // check for bug 90138: [refactoring] [rename] Renaming method throws internal exception
-					results.add(method);
+					results.add((IMethod) method);
 				else
 					JavaPlugin.logErrorMessage("Unexpected element in search match: " + match.toString()); //$NON-NLS-1$
 			}
 		};
 		new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(), scope, requestor, pm);
-		return (IMethod[]) results.toArray(new IMethod[results.size()]);
+		return results.toArray(new IMethod[results.size()]);
 	}
 
 	private SearchPattern createNewMethodPattern() {
@@ -448,9 +460,9 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 	}
 
 	private SearchPattern createOccurrenceSearchPattern() {
-		HashSet methods= new HashSet(fMethodsToRename);
+		HashSet<IMethod> methods= new HashSet<IMethod>(fMethodsToRename);
 		methods.add(fMethod);
-		IMethod[] ms= (IMethod[]) methods.toArray(new IMethod[methods.size()]);
+		IMethod[] ms= methods.toArray(new IMethod[methods.size()]);
 		return RefactoringSearchEngine.createOrPattern(ms, IJavaSearchConstants.ALL_OCCURRENCES);
 	}
 
@@ -466,8 +478,8 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 
 	private RefactoringStatus checkRelatedMethods() throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
-		for (Iterator iter= fMethodsToRename.iterator(); iter.hasNext(); ) {
-			IMethod method= (IMethod)iter.next();
+		for (Iterator<IMethod> iter= fMethodsToRename.iterator(); iter.hasNext(); ) {
+			IMethod method= iter.next();
 
 			result.merge(Checks.checkIfConstructorName(method, getNewElementName(), method.getDeclaringType().getElementName()));
 
@@ -514,8 +526,8 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 			IMethod[] wcOldMethods= new IMethod[fMethodsToRename.size()];
 			IMethod[] wcNewMethods= new IMethod[fMethodsToRename.size()];
 			int i= 0;
-			for (Iterator iter= fMethodsToRename.iterator(); iter.hasNext(); i++) {
-				IMethod method= (IMethod) iter.next();
+			for (Iterator<IMethod> iter= fMethodsToRename.iterator(); iter.hasNext(); i++) {
+				IMethod method= iter.next();
 				ICompilationUnit newCu= RenameAnalyzeUtil.findWorkingCopyForCu(newDeclarationWCs, method.getCompilationUnit());
 				IType typeWc= (IType) JavaModelUtil.findInCompilationUnit(newCu, method.getDeclaringType());
 				if (typeWc == null)
@@ -586,6 +598,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 			// Note that except these ocurrences, the delegate bodies are empty
 			// (as they were created this way).
 			requestor= new MethodOccurenceCollector(getNewElementName()) {
+				@Override
 				public void acceptSearchMatch(ICompilationUnit unit, SearchMatch match) throws CoreException {
 					for (int i= 0; i < wcOldMethods.length; i++)
 						if (wcOldMethods[i].equals(match.getElement()))
@@ -598,8 +611,8 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 
 		SearchEngine searchEngine= new SearchEngine(fWorkingCopyOwner);
 
-		ArrayList needWCs= new ArrayList();
-		HashSet declaringCUs= new HashSet(newDeclarationWCs.length);
+		ArrayList<ICompilationUnit> needWCs= new ArrayList<ICompilationUnit>();
+		HashSet<ICompilationUnit> declaringCUs= new HashSet<ICompilationUnit>(newDeclarationWCs.length);
 		for (int i= 0; i < newDeclarationWCs.length; i++)
 			declaringCUs.add(newDeclarationWCs[i].getPrimary());
 		for (int i= 0; i < fOccurrences.length; i++) {
@@ -610,7 +623,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 		ICompilationUnit[] otherWCs= null;
 		try {
 			otherWCs= RenameAnalyzeUtil.createNewWorkingCopies(
-					(ICompilationUnit[]) needWCs.toArray(new ICompilationUnit[needWCs.size()]),
+					needWCs.toArray(new ICompilationUnit[needWCs.size()]),
 					fChangeManager, fWorkingCopyOwner, new SubProgressMonitor(pm, 1));
 			searchEngine.search(refsPattern, searchParticipants, scope,	requestor, new SubProgressMonitor(pm, 1));
 		} finally {
@@ -626,12 +639,12 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 	}
 
 	private ICompilationUnit[] getDeclarationCUs() {
-		Set cus= new HashSet();
-		for (Iterator iter= fMethodsToRename.iterator(); iter.hasNext();) {
-			IMethod method= (IMethod) iter.next();
+		Set<ICompilationUnit> cus= new HashSet<ICompilationUnit>();
+		for (Iterator<IMethod> iter= fMethodsToRename.iterator(); iter.hasNext();) {
+			IMethod method= iter.next();
 			cus.add(method.getCompilationUnit());
 		}
-		return (ICompilationUnit[]) cus.toArray(new ICompilationUnit[cus.size()]);
+		return cus.toArray(new ICompilationUnit[cus.size()]);
 	}
 
 	private IMethod getMethodInWorkingCopy(IMethod method, String elementName, IType typeWc) {
@@ -640,16 +653,16 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 	}
 
 	//-------
-	private static IMethod[] classesDeclareMethodName(ITypeHierarchy hier, List classes, IMethod method, String newName)  throws CoreException {
-		Set result= new HashSet();
+	private static IMethod[] classesDeclareMethodName(ITypeHierarchy hier, List<IType> classes, IMethod method, String newName)  throws CoreException {
+		Set<IMethod> result= new HashSet<IMethod>();
 		IType type= method.getDeclaringType();
-		List subtypes= Arrays.asList(hier.getAllSubtypes(type));
+		List<IType> subtypes= Arrays.asList(hier.getAllSubtypes(type));
 
 		int parameterCount= method.getParameterTypes().length;
 		boolean isMethodPrivate= JdtFlags.isPrivate(method);
 
-		for (Iterator iter= classes.iterator(); iter.hasNext(); ){
-			IType clazz= (IType) iter.next();
+		for (Iterator<IType> iter= classes.iterator(); iter.hasNext(); ){
+			IType clazz= iter.next();
 			IMethod[] methods= clazz.getMethods();
 			boolean isSubclass= subtypes.contains(clazz);
 			for (int j= 0; j < methods.length; j++) {
@@ -662,12 +675,12 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 					result.add(foundMethod);
 			}
 		}
-		return (IMethod[]) result.toArray(new IMethod[result.size()]);
+		return result.toArray(new IMethod[result.size()]);
 	}
 
 	final static IMethod[] hierarchyDeclaresMethodName(IProgressMonitor pm, ITypeHierarchy hierarchy, IMethod method, String newName) throws CoreException {
 		try {
-			Set result= new HashSet();
+			Set<IMethod> result= new HashSet<IMethod>();
 			IType type= method.getDeclaringType();
 			IMethod foundMethod= Checks.findMethod(newName, method.getParameterTypes().length, false, type);
 			if (foundMethod != null)
@@ -679,7 +692,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 			IMethod[] foundInImplementingClasses= classesDeclareMethodName(hierarchy, Arrays.asList(implementingClasses), method, newName);
 			if (foundInImplementingClasses != null)
 				result.addAll(Arrays.asList(foundInImplementingClasses));
-			return (IMethod[]) result.toArray(new IMethod[result.size()]);
+			return result.toArray(new IMethod[result.size()]);
 		} finally {
 			if (pm != null) {
 				pm.done();
@@ -687,10 +700,11 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 		}
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		try {
 			final TextChange[] changes= fChangeManager.getAllChanges();
-			final List list= new ArrayList(changes.length);
+			final List<TextChange> list= new ArrayList<TextChange>(changes.length);
 			list.addAll(Arrays.asList(changes));
 			String project= null;
 			IJavaProject javaProject= fMethod.getJavaProject();
@@ -723,7 +737,7 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 			descriptor.setUpdateReferences(fUpdateReferences);
 			descriptor.setKeepOriginal(fDelegateUpdating);
 			descriptor.setDeprecateDelegate(fDelegateDeprecation);
-			return new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.RenameMethodProcessor_change_name, (Change[]) list.toArray(new Change[list.size()]));
+			return new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.RenameMethodProcessor_change_name, list.toArray(new Change[list.size()]));
 		} finally {
 			monitor.done();
 		}
@@ -755,8 +769,8 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 
 			// Split matches into declaration and non-declaration matches
 
-			List declarationsInThisCu= new ArrayList();
-			List referencesInThisCu= new ArrayList();
+			List<SearchMatch> declarationsInThisCu= new ArrayList<SearchMatch>();
+			List<SearchMatch> referencesInThisCu= new ArrayList<SearchMatch>();
 
 			for (int j= 0; j < results.length; j++) {
 				if (results[j] instanceof MethodDeclarationMatch)
@@ -773,8 +787,8 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 					CompilationUnitRewrite rewrite= new CompilationUnitRewrite(cu);
 					rewrite.setResolveBindings(true);
 
-					for (Iterator iter= declarationsInThisCu.iterator(); iter.hasNext();) {
-						SearchMatch element= (SearchMatch) iter.next();
+					for (Iterator<SearchMatch> iter= declarationsInThisCu.iterator(); iter.hasNext();) {
+						SearchMatch element= iter.next();
 						MethodDeclaration method= ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) element.getElement(), rewrite.getRoot());
 						DelegateCreator creator= new DelegateMethodCreator();
 						creator.setDeclareDeprecated(fDelegateDeprecation);
@@ -792,16 +806,16 @@ public abstract class RenameMethodProcessor extends JavaRenameProcessor implemen
 				}
 
 				// Update the normal methods
-				for (Iterator iter= declarationsInThisCu.iterator(); iter.hasNext();) {
-					SearchMatch element= (SearchMatch) iter.next();
+				for (Iterator<SearchMatch> iter= declarationsInThisCu.iterator(); iter.hasNext();) {
+					SearchMatch element= iter.next();
 					simpleUpdate(element, cu, manager.get(cu));
 				}
 			}
 
 			// Second, handle references
 			if (fUpdateReferences) {
-				for (Iterator iter= referencesInThisCu.iterator(); iter.hasNext();) {
-					SearchMatch element= (SearchMatch) iter.next();
+				for (Iterator<SearchMatch> iter= referencesInThisCu.iterator(); iter.hasNext();) {
+					SearchMatch element= iter.next();
 					simpleUpdate(element, cu, manager.get(cu));
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java
index 4ce669a..4ad5e9c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,14 +58,14 @@ import org.eclipse.jdt.internal.corext.refactoring.reorg.RefactoringModification
 
 public class RenameModifications extends RefactoringModifications {
 
-	private List fRename;
-	private List fRenameArguments;
-	private List fParticipantDescriptorFilter;
+	private List<Object> fRename;
+	private List<RefactoringArguments> fRenameArguments;
+	private List<IParticipantDescriptorFilter> fParticipantDescriptorFilter;
 
 	public RenameModifications() {
-		fRename= new ArrayList();
-		fRenameArguments= new ArrayList();
-		fParticipantDescriptorFilter= new ArrayList();
+		fRename= new ArrayList<Object>();
+		fRenameArguments= new ArrayList<RefactoringArguments>();
+		fParticipantDescriptorFilter= new ArrayList<IParticipantDescriptorFilter>();
 	}
 
 	public void rename(IResource resource, RenameArguments args) {
@@ -161,6 +161,7 @@ public class RenameModifications extends RefactoringModifications {
 		add(typeParameter, arguments, null);
 	}
 
+	@Override
 	public void buildDelta(IResourceChangeDescriptionFactory builder) {
 		for (int i= 0; i < fRename.size(); i++) {
 			Object element= fRename.get(i);
@@ -171,8 +172,9 @@ public class RenameModifications extends RefactoringModifications {
 		getResourceModifications().buildDelta(builder);
 	}
 
+	@Override
 	public void buildValidateEdits(ValidateEditChecker checker) {
-		for (Iterator iter= fRename.iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter= fRename.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof ICompilationUnit) {
 				ICompilationUnit unit= (ICompilationUnit)element;
@@ -184,17 +186,18 @@ public class RenameModifications extends RefactoringModifications {
 		}
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, RefactoringProcessor owner, String[] natures, SharableParticipants shared) {
-		List result= new ArrayList();
+		List<RefactoringParticipant> result= new ArrayList<RefactoringParticipant>();
 		for (int i= 0; i < fRename.size(); i++) {
 			result.addAll(Arrays.asList(ParticipantManager.loadRenameParticipants(status,
 				owner, fRename.get(i),
 				(RenameArguments) fRenameArguments.get(i),
-				(IParticipantDescriptorFilter) fParticipantDescriptorFilter.get(i),
+				fParticipantDescriptorFilter.get(i),
 				natures, shared)));
 		}
 		result.addAll(Arrays.asList(getResourceModifications().getParticipants(status, owner, natures, shared)));
-		return (RefactoringParticipant[]) result.toArray(new RefactoringParticipant[result.size()]);
+		return result.toArray(new RefactoringParticipant[result.size()]);
 	}
 
 	private void add(Object element, RefactoringArguments args, IParticipantDescriptorFilter filter) {
@@ -232,14 +235,14 @@ public class RenameModifications extends RefactoringModifications {
 		createIncludingParents(target);
 		MoveArguments arguments= new MoveArguments(target, args.getUpdateReferences());
 		IResource[] resourcesToMove= collectResourcesOfInterest(pack);
-		Set allMembers= new HashSet(Arrays.asList(container.members()));
+		Set<IResource> allMembers= new HashSet<IResource>(Arrays.asList(container.members()));
 		for (int i= 0; i < resourcesToMove.length; i++) {
 			IResource toMove= resourcesToMove[i];
 			getResourceModifications().addMove(toMove, arguments);
 			allMembers.remove(toMove);
 		}
-		for (Iterator iter= allMembers.iterator(); iter.hasNext();) {
-			IResource element= (IResource) iter.next();
+		for (Iterator<IResource> iter= allMembers.iterator(); iter.hasNext();) {
+			IResource element= iter.next();
 			if (element instanceof IFile) {
 				getResourceModifications().addDelete(element);
 				iter.remove();
@@ -260,14 +263,14 @@ public class RenameModifications extends RefactoringModifications {
 		IJavaElement[] allPackages= root.getChildren();
 		if (pack.isDefaultPackage())
 			return new IPackageFragment[0];
-		ArrayList result= new ArrayList();
+		ArrayList<IPackageFragment> result= new ArrayList<IPackageFragment>();
 		String prefix= pack.getElementName() + '.';
 		for (int i= 0; i < allPackages.length; i++) {
 			IPackageFragment currentPackage= (IPackageFragment) allPackages[i];
 			if (currentPackage.getElementName().startsWith(prefix))
 				result.add(currentPackage);
 		}
-		return (IPackageFragment[]) result.toArray(new IPackageFragment[result.size()]);
+		return result.toArray(new IPackageFragment[result.size()]);
 	}
 
 	private IFolder computeTargetFolder(IPackageFragment rootPackage, RenameArguments args, IPackageFragment pack) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java
index 6fec4e2..7c6d8fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,12 +82,14 @@ public class RenameNonVirtualMethodProcessor extends RenameMethodProcessor {
 		status.merge(initializeStatus);
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameNonVirtualMethodAvailable(getMethod());
 	}
 
 	//----------- preconditions --------------
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext checkContext) throws CoreException {
 		try{
 			pm.beginTask("", 3); //$NON-NLS-1$
@@ -126,6 +128,7 @@ public class RenameNonVirtualMethodProcessor extends RenameMethodProcessor {
 	/*
 	 * @see RenameMethodProcessor#addOccurrences(org.eclipse.jdt.internal.corext.refactoring.util.TextChangeManager, org.eclipse.core.runtime.IProgressMonitor, RefactoringStatus)
 	 */
+	@Override
 	protected void addOccurrences(TextChangeManager manager, IProgressMonitor pm, RefactoringStatus status) throws CoreException {
 		pm.beginTask("", 1); //$NON-NLS-1$
 		// declaration update must be registered first
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java
index 5b51aef..85c65e9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,34 +151,41 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		status.merge(initialize(arguments));
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IDENTIFIER;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameAvailable(fPackage);
 	}
 
+	@Override
 	public String getProcessorName(){
 		return RefactoringCoreMessages.RenamePackageRefactoring_name;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fPackage);
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] {fPackage};
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		result.rename(fPackage, new RenameArguments(getNewElementName(), getUpdateReferences()), fRenameSubpackages);
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
-		Set combined= new HashSet();
+		Set<IFile> combined= new HashSet<IFile>();
 		combined.addAll(Arrays.asList(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits())));
 		if (fRenameSubpackages) {
 			IPackageFragment[] allPackages= JavaElementUtil.getPackageAndSubpackages(fPackage);
@@ -190,9 +197,10 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		}
 		if (fQualifiedNameSearchResult != null)
 			combined.addAll(Arrays.asList(fQualifiedNameSearchResult.getAllFiles()));
-		return (IFile[]) combined.toArray(new IFile[combined.size()]);
+		return combined.toArray(new IFile[combined.size()]);
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_ALL;
 	}
@@ -275,6 +283,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 
 	public IJavaElement getRefactoredJavaElement(IJavaElement original) {
 		return new GenericRefactoringHandleTransplanter() {
+			@Override
 			protected IPackageFragment transplantHandle(IPackageFragmentRoot parent, IPackageFragment element) {
 				if (! fRenameSubpackages) {
 					if (fPackage.equals(element))
@@ -291,6 +300,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 				return super.transplantHandle(parent, element);
 			}
 
+			@Override
 			protected IMethod transplantHandle(IType parent, IMethod element) {
 				String[] parameterTypes= resolveParameterTypes(element);
 				return parent.getMethod(element.getElementName(), parameterTypes);
@@ -368,10 +378,12 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		return root.getPackageFragment(getNewElementName());
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		try{
 			pm.beginTask("", 23 + (fUpdateQualifiedNames ? 10 : 0) + (fUpdateTextualMatches ? 10 : 0)); //$NON-NLS-1$
@@ -513,7 +525,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 	private RefactoringStatus checkPackageName(String newName) throws CoreException {
 		RefactoringStatus status= new RefactoringStatus();
 		IPackageFragmentRoot[] roots= fPackage.getJavaProject().getPackageFragmentRoots();
-		Set topLevelTypeNames= getTopLevelTypeNames();
+		Set<String> topLevelTypeNames= getTopLevelTypeNames();
 		for (int i= 0; i < roots.length; i++) {
 			IPackageFragmentRoot root= roots[i];
 			if (! isPackageNameOkInRoot(newName, root)) {
@@ -527,25 +539,25 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		return status;
 	}
 
-	private Set getTopLevelTypeNames() throws CoreException {
+	private Set<String> getTopLevelTypeNames() throws CoreException {
 		ICompilationUnit[] cus= fPackage.getCompilationUnits();
-		Set result= new HashSet(2 * cus.length);
+		Set<String> result= new HashSet<String>(2 * cus.length);
 		for (int i= 0; i < cus.length; i++) {
 			result.addAll(getTopLevelTypeNames(cus[i]));
 		}
 		return result;
 	}
 
-	private static Collection getTopLevelTypeNames(ICompilationUnit iCompilationUnit) throws CoreException {
+	private static Collection<String> getTopLevelTypeNames(ICompilationUnit iCompilationUnit) throws CoreException {
 		IType[] types= iCompilationUnit.getTypes();
-		List result= new ArrayList(types.length);
+		List<String> result= new ArrayList<String>(types.length);
 		for (int i= 0; i < types.length; i++) {
 			result.add(types[i].getElementName());
 		}
 		return result;
 	}
 
-	private RefactoringStatus checkTypeNameConflicts(IPackageFragmentRoot root, String newName, Set topLevelTypeNames) throws CoreException {
+	private RefactoringStatus checkTypeNameConflicts(IPackageFragmentRoot root, String newName, Set<String> topLevelTypeNames) throws CoreException {
 		IPackageFragment otherPack= root.getPackageFragment(newName);
 		if (fPackage.equals(otherPack))
 			return null;
@@ -557,7 +569,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		return result;
 	}
 
-	private RefactoringStatus checkTypeNameConflicts(ICompilationUnit iCompilationUnit, Set topLevelTypeNames) throws CoreException {
+	private RefactoringStatus checkTypeNameConflicts(ICompilationUnit iCompilationUnit, Set<String> topLevelTypeNames) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
 		IType[] types= iCompilationUnit.getTypes();
 
@@ -573,6 +585,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.RenamePackageRefactoring_creating_change, 1);
@@ -621,6 +634,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		return JavaElementLabels.getElementLabel(javaElement, JavaElementLabels.ALL_DEFAULT);
 	}
 
+	@Override
 	public Change postCreateChange(Change[] participantChanges, IProgressMonitor pm) throws CoreException {
 		if (fQualifiedNameSearchResult != null) {
 			CompositeChange parent= (CompositeChange) fRenamePackageChange.getParent();
@@ -669,12 +683,12 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		 * <p>- from fPackage: may have unimported references to types of namesake packages
 		 * <p>- both: may have unused imports of namesake packages.
 		 * <p>Mutable List of SearchResultGroup. */
-		private List fReferencesToTypesInNamesakes;
+		private List<SearchResultGroup> fReferencesToTypesInNamesakes;
 
 		/** References in CUs from namesake packages to types in fPackage.
 		 * <p>These need an import with the new package name.
 		 * <p>Mutable List of SearchResultGroup. */
-		private List fReferencesToTypesInPackage;
+		private List<SearchResultGroup> fReferencesToTypesInPackage;
 
 		public PackageRenamer(IPackageFragment pack, RenamePackageProcessor processor, TextChangeManager textChangeManager, ImportsManager importsManager) {
 			fPackage= pack;
@@ -754,15 +768,15 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 			}
 
 			if (fReferencesToTypesInNamesakes.size() != 0) {
-				for (Iterator iter= fReferencesToTypesInNamesakes.iterator(); iter.hasNext();) {
-					SearchResultGroup referencesToTypesInNamesakes= (SearchResultGroup) iter.next();
+				for (Iterator<SearchResultGroup> iter= fReferencesToTypesInNamesakes.iterator(); iter.hasNext();) {
+					SearchResultGroup referencesToTypesInNamesakes= iter.next();
 					addTypeImports(referencesToTypesInNamesakes);
 					pm.worked(1);
 				}
 			}
 			if (fReferencesToTypesInPackage.size() != 0) {
-				for (Iterator iter= fReferencesToTypesInPackage.iterator(); iter.hasNext();) {
-					SearchResultGroup namesakeReferencesToPackage= (SearchResultGroup) iter.next();
+				for (Iterator<SearchResultGroup> iter= fReferencesToTypesInPackage.iterator(); iter.hasNext();) {
+					SearchResultGroup namesakeReferencesToPackage= iter.next();
 					updateTypeImports(namesakeReferencesToPackage);
 					pm.worked(1);
 				}
@@ -774,9 +788,9 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		 *  @param cu the cu
 		 *  @param searchResultGroups List of SearchResultGroup
 		 *  @return the SearchResultGroup for cu, or null iff not found */
-		private static SearchResultGroup extractGroupFor(ICompilationUnit cu, List searchResultGroups) {
-			for (Iterator iter= searchResultGroups.iterator(); iter.hasNext();) {
-				SearchResultGroup group= (SearchResultGroup) iter.next();
+		private static SearchResultGroup extractGroupFor(ICompilationUnit cu, List<SearchResultGroup> searchResultGroups) {
+			for (Iterator<SearchResultGroup> iter= searchResultGroups.iterator(); iter.hasNext();) {
+				SearchResultGroup group= iter.next();
 				if (cu.equals(group.getCompilationUnit())) {
 					iter.remove();
 					return group;
@@ -806,7 +820,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		 * <p>- all CUs from fOccurrences which are not in a namesake package
 		 */
 		private IJavaSearchScope getPackageAndOccurrencesWithoutNamesakesScope() {
-			List scopeList= new ArrayList();
+			List<IJavaElement> scopeList= new ArrayList<IJavaElement>();
 			scopeList.add(fPackage);
 			for (int i= 0; i < fOccurrences.length; i++) {
 				ICompilationUnit cu= fOccurrences[i].getCompilationUnit();
@@ -816,10 +830,10 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 				if (! pack.getElementName().equals(fPackage.getElementName()))
 					scopeList.add(cu);
 			}
-			return SearchEngine.createJavaSearchScope((IJavaElement[]) scopeList.toArray(new IJavaElement[scopeList.size()]));
+			return SearchEngine.createJavaSearchScope(scopeList.toArray(new IJavaElement[scopeList.size()]));
 		}
 
-		private List getReferencesToTypesInNamesakes(IProgressMonitor pm, RefactoringStatus status) throws CoreException {
+		private List<SearchResultGroup> getReferencesToTypesInNamesakes(IProgressMonitor pm, RefactoringStatus status) throws CoreException {
 			pm.beginTask("", 2); //$NON-NLS-1$
 			// e.g. renaming B-p.p; project C requires B, X and has ref to B-p.p and X-p.p;
 			// goal: find refs to X-p.p in CUs from fOccurrences
@@ -834,7 +848,7 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 			IPackageFragment[] namesakePackages= getNamesakePackages(namesakePackagesScope, new SubProgressMonitor(pm, 1));
 			if (namesakePackages.length == 0) {
 				pm.done();
-				return new ArrayList(0);
+				return new ArrayList<SearchResultGroup>(0);
 			}
 
 			// (2) find refs in fOccurrences and fPackage to namesake packages
@@ -843,41 +857,41 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 			IType[] typesToSearch= getTypesInPackages(namesakePackages);
 			if (typesToSearch.length == 0) {
 				pm.done();
-				return new ArrayList(0);
+				return new ArrayList<SearchResultGroup>(0);
 			}
 			SearchPattern pattern= RefactoringSearchEngine.createOrPattern(typesToSearch, IJavaSearchConstants.REFERENCES);
 			IJavaSearchScope scope= getPackageAndOccurrencesWithoutNamesakesScope();
 			SearchResultGroup[] results= RefactoringSearchEngine.search(pattern, scope, new SubProgressMonitor(pm, 1), status);
 			pm.done();
-			return new ArrayList(Arrays.asList(results));
+			return new ArrayList<SearchResultGroup>(Arrays.asList(results));
 		}
 
-		private List getReferencesToTypesInPackage(IProgressMonitor pm, ReferencesInBinaryContext binaryRefs, RefactoringStatus status) throws CoreException {
+		private List<SearchResultGroup> getReferencesToTypesInPackage(IProgressMonitor pm, ReferencesInBinaryContext binaryRefs, RefactoringStatus status) throws CoreException {
 			pm.beginTask("", 2); //$NON-NLS-1$
 			IJavaSearchScope referencedFromNamesakesScope= RefactoringScopeFactory.create(fPackage, true, false);
 			IPackageFragment[] namesakePackages= getNamesakePackages(referencedFromNamesakesScope, new SubProgressMonitor(pm, 1));
 			if (namesakePackages.length == 0) {
 				pm.done();
-				return new ArrayList(0);
+				return new ArrayList<SearchResultGroup>(0);
 			}
 
 			IJavaSearchScope scope= SearchEngine.createJavaSearchScope(namesakePackages);
 			IType[] typesToSearch= getTypesInPackage(fPackage);
 			if (typesToSearch.length == 0) {
 				pm.done();
-				return new ArrayList(0);
+				return new ArrayList<SearchResultGroup>(0);
 			}
 			SearchPattern pattern= RefactoringSearchEngine.createOrPattern(typesToSearch, IJavaSearchConstants.REFERENCES);
 			CollectingSearchRequestor requestor= new CuCollectingSearchRequestor(binaryRefs);
 			SearchResultGroup[] results= RefactoringSearchEngine.search(pattern, scope, requestor, new SubProgressMonitor(pm, 1), status);
 			pm.done();
-			return new ArrayList(Arrays.asList(results));
+			return new ArrayList<SearchResultGroup>(Arrays.asList(results));
 		}
 
 		private IType[] getTypesInPackage(IPackageFragment packageFragment) throws JavaModelException {
-			List types= new ArrayList();
+			List<IType> types= new ArrayList<IType>();
 			addContainedTypes(packageFragment, types);
-			return (IType[]) types.toArray(new IType[types.size()]);
+			return types.toArray(new IType[types.size()]);
 		}
 
 		/**
@@ -889,8 +903,9 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		private IPackageFragment[] getNamesakePackages(IJavaSearchScope scope, IProgressMonitor pm) throws CoreException {
 			SearchPattern pattern= SearchPattern.createPattern(fPackage.getElementName(), IJavaSearchConstants.PACKAGE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE);
 
-			final HashSet packageFragments= new HashSet();
+			final HashSet<IPackageFragment> packageFragments= new HashSet<IPackageFragment>();
 			SearchRequestor requestor= new SearchRequestor() {
+				@Override
 				public void acceptSearchMatch(SearchMatch match) throws CoreException {
 					IJavaElement enclosingElement= SearchUtils.getEnclosingJavaElement(match);
 					if (enclosingElement instanceof IPackageFragment) {
@@ -902,19 +917,19 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 			};
 			new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(), scope, requestor, pm);
 
-			return (IPackageFragment[]) packageFragments.toArray(new IPackageFragment[packageFragments.size()]);
+			return packageFragments.toArray(new IPackageFragment[packageFragments.size()]);
 		}
 
 		private IType[] getTypesInPackages(IPackageFragment[] packageFragments) throws JavaModelException {
-			List types= new ArrayList();
+			List<IType> types= new ArrayList<IType>();
 			for (int i= 0; i < packageFragments.length; i++) {
 				IPackageFragment pack= packageFragments[i];
 				addContainedTypes(pack, types);
 			}
-			return (IType[]) types.toArray(new IType[types.size()]);
+			return types.toArray(new IType[types.size()]);
 		}
 
-		private void addContainedTypes(IPackageFragment pack, List typesCollector) throws JavaModelException {
+		private void addContainedTypes(IPackageFragment pack, List<IType> typesCollector) throws JavaModelException {
 			IJavaElement[] children= pack.getChildren();
 			for (int c= 0; c < children.length; c++) {
 				IJavaElement child= children[c];
@@ -1017,10 +1032,10 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 	 */
 	static class ImportsManager {
 		public static class ImportChange {
-			private ArrayList/*<String>*/ fStaticToRemove= new ArrayList();
-			private ArrayList/*<String[2]>*/ fStaticToAdd= new ArrayList();
-			private ArrayList/*<String>*/ fToRemove= new ArrayList();
-			private ArrayList/*<String>*/ fToAdd= new ArrayList();
+			private ArrayList<String> fStaticToRemove= new ArrayList<String>();
+			private ArrayList<String[]> fStaticToAdd= new ArrayList<String[]>();
+			private ArrayList<String> fToRemove= new ArrayList<String>();
+			private ArrayList<String> fToAdd= new ArrayList<String>();
 
 			public void removeStaticImport(String elementName) {
 				fStaticToRemove.add(elementName);
@@ -1039,10 +1054,10 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 			}
 		}
 
-		private HashMap/*<ICompilationUnit, ImportChange>*/ fImportChanges= new HashMap();
+		private HashMap<ICompilationUnit, ImportChange> fImportChanges= new HashMap<ICompilationUnit, ImportChange>();
 
 		public ImportChange getImportChange(ICompilationUnit cu) {
-			ImportChange importChange= (ImportChange) fImportChanges.get(cu);
+			ImportChange importChange= fImportChanges.get(cu);
 			if (importChange == null) {
 				importChange= new ImportChange();
 				fImportChanges.put(cu, importChange);
@@ -1051,25 +1066,25 @@ public class RenamePackageProcessor extends JavaRenameProcessor implements
 		}
 
 		public void rewriteImports(TextChangeManager changeManager, IProgressMonitor pm) throws CoreException {
-			for (Iterator iter= fImportChanges.entrySet().iterator(); iter.hasNext();) {
-				Entry entry= (Entry) iter.next();
-				ICompilationUnit cu= (ICompilationUnit) entry.getKey();
-				ImportChange importChange= (ImportChange) entry.getValue();
+			for (Iterator<Entry<ICompilationUnit, ImportChange>> iter= fImportChanges.entrySet().iterator(); iter.hasNext();) {
+				Entry<ICompilationUnit, ImportChange> entry= iter.next();
+				ICompilationUnit cu= entry.getKey();
+				ImportChange importChange= entry.getValue();
 
 				ImportRewrite importRewrite= StubUtility.createImportRewrite(cu, true);
 				importRewrite.setFilterImplicitImports(false);
-				for (Iterator iterator= importChange.fStaticToRemove.iterator(); iterator.hasNext();) {
-					importRewrite.removeStaticImport((String) iterator.next());
+				for (Iterator<String> iterator= importChange.fStaticToRemove.iterator(); iterator.hasNext();) {
+					importRewrite.removeStaticImport(iterator.next());
 				}
-				for (Iterator iterator= importChange.fToRemove.iterator(); iterator.hasNext();) {
-					importRewrite.removeImport((String) iterator.next());
+				for (Iterator<String> iterator= importChange.fToRemove.iterator(); iterator.hasNext();) {
+					importRewrite.removeImport(iterator.next());
 				}
-				for (Iterator iterator= importChange.fStaticToAdd.iterator(); iterator.hasNext();) {
-					String[] toAdd= (String[]) iterator.next();
+				for (Iterator<String[]> iterator= importChange.fStaticToAdd.iterator(); iterator.hasNext();) {
+					String[] toAdd= iterator.next();
 					importRewrite.addStaticImport(toAdd[0], toAdd[1], true);
 				}
-				for (Iterator iterator= importChange.fToAdd.iterator(); iterator.hasNext();) {
-					importRewrite.addImport((String) iterator.next());
+				for (Iterator<String> iterator= importChange.fToAdd.iterator(); iterator.hasNext();) {
+					importRewrite.addImport(iterator.next());
 				}
 
 				if (importRewrite.hasRecordedChanges()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java
index b04cd88..e16587b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,22 +73,27 @@ public final class RenameSourceFolderProcessor extends JavaRenameProcessor {
 	}
 
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.RENAME_SOURCE_FOLDER_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameAvailable(fSourceFolder);
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameSourceFolderRefactoring_rename;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fSourceFolder);
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] {fSourceFolder};
 	}
@@ -102,16 +107,19 @@ public final class RenameSourceFolderProcessor extends JavaRenameProcessor {
 		return null;
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_ALL;
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		result.rename(fSourceFolder, new RenameArguments(getNewElementName(), getUpdateReferences()));
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
 		return new IFile[0];
 	}
@@ -122,6 +130,7 @@ public final class RenameSourceFolderProcessor extends JavaRenameProcessor {
 		return fSourceFolder.getElementName();
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		return new RefactoringStatus();
 	}
@@ -157,6 +166,7 @@ public final class RenameSourceFolderProcessor extends JavaRenameProcessor {
 		return fSourceFolder.getPath().removeLastSegments(1).append(newName).toString();
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		pm.beginTask("", 1); //$NON-NLS-1$
 		try{
@@ -170,6 +180,7 @@ public final class RenameSourceFolderProcessor extends JavaRenameProcessor {
 		return true;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		monitor.beginTask(RefactoringCoreMessages.RenameTypeRefactoring_creating_change, 1);
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeParameterProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeParameterProcessor.java
index 38b640a..58dabdb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeParameterProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeParameterProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -119,6 +119,7 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 			return fRewrite.createChange(true);
 		}
 
+		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding= node.resolveBinding();
 			if (fBinding == binding) {
@@ -137,6 +138,7 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 			return true;
 		}
 
+		@Override
 		public boolean visit(AbstractTypeDeclaration node) {
 			String name= node.getName().getIdentifier();
 			if (name.equals(getNewElementName())) {
@@ -178,20 +180,24 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 		status.merge(initialize(arguments));
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		result.rename(fTypeParameter, new RenameArguments(getNewElementName(), getUpdateReferences()));
 		return result;
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
 		return new IFile[] {ResourceUtil.getFile(fTypeParameter.getDeclaringMember().getCompilationUnit())};
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_NOTHING;
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor monitor, CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		Assert.isNotNull(context);
@@ -217,6 +223,7 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 		return status;
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		if (!fTypeParameter.exists())
@@ -248,6 +255,7 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		try {
@@ -315,6 +323,7 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 		return status;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fTypeParameter);
 	}
@@ -323,10 +332,12 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 		return fTypeParameter.getElementName();
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] { fTypeParameter};
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IDENTIFIER;
 	}
@@ -346,6 +357,7 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 		return null;
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameTypeParameterProcessor_name;
 	}
@@ -389,6 +401,7 @@ public class RenameTypeParameterProcessor extends JavaRenameProcessor implements
 		return new RefactoringStatus();
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameAvailable(fTypeParameter);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java
index aa3b8df..730b729 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,7 +69,6 @@ import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
@@ -123,6 +122,7 @@ import org.eclipse.jdt.ui.refactoring.IRefactoringProcessorIds;
 import org.eclipse.jdt.ui.refactoring.RefactoringSaveHelper;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpdating, IReferenceUpdating, IQualifiedNameUpdating, ISimilarDeclarationUpdating, IResourceMapper, IJavaElementMapper {
@@ -153,13 +153,13 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	// --- similar elements
 
 	private boolean fUpdateSimilarElements;
-	private Map/* <IJavaElement, String> */fFinalSimilarElementToName= null;
+	private Map<IJavaElement, String> fFinalSimilarElementToName= null;
 	private int fRenamingStrategy;
 
 	// Preloaded information for the UI.
-	private LinkedHashMap/* <IJavaElement, String> */fPreloadedElementToName= null;
-	private Map/* <IJavaElement, Boolean> */fPreloadedElementToSelection= null;
-	private LinkedHashMap/* <IJavaElement, String> */fPreloadedElementToNameDefault= null;
+	private LinkedHashMap<IJavaElement, String> fPreloadedElementToName= null;
+	private Map<IJavaElement, Boolean> fPreloadedElementToSelection= null;
+	private LinkedHashMap<IJavaElement, String> fPreloadedElementToNameDefault= null;
 
 	// Cache information to decide whether to
 	// re-update references and preload info
@@ -187,6 +187,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		public NoOverrideProgressMonitor(IProgressMonitor monitor, int ticks) {
 			super(monitor, ticks, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
 		}
+		@Override
 		public void setTaskName(String name) {
 			// do nothing
 		}
@@ -215,26 +216,32 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		return fType;
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.RENAME_TYPE_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameAvailable(fType);
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.RenameTypeRefactoring_name;
 	}
 
+	@Override
 	protected String[] getAffectedProjectNatures() throws CoreException {
 		return JavaProcessors.computeAffectedNatures(fType);
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] {fType};
 	}
 
+	@Override
 	protected RenameModifications computeRenameModifications() {
 		RenameModifications result= new RenameModifications();
 		result.rename(fType, new RenameTypeArguments(getNewElementName(), getUpdateReferences(),
@@ -306,16 +313,18 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		return new ParticipantDescriptorFilter();
 	}
 
+	@Override
 	protected IFile[] getChangedFiles() throws CoreException {
-		List result= new ArrayList();
+		List<IFile> result= new ArrayList<IFile>();
 		result.addAll(Arrays.asList(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits())));
 		if (fQualifiedNameSearchResult != null)
 			result.addAll(Arrays.asList(fQualifiedNameSearchResult.getAllFiles()));
 		if (willRenameCU())
 			result.add(ResourceUtil.getFile(fType.getCompilationUnit()));
-		return (IFile[]) result.toArray(new IFile[result.size()]);
+		return result.toArray(new IFile[result.size()]);
 	}
 
+	@Override
 	public int getSaveMode() {
 		return RefactoringSaveHelper.SAVE_REFACTORING;
 	}
@@ -405,8 +414,8 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	public IJavaElement[] getSimilarElements() {
 		if (fFinalSimilarElementToName == null)
 			return null;
-		Set keys= fFinalSimilarElementToName.keySet();
-		return (IJavaElement[])keys.toArray(new IJavaElement[keys.size()]);
+		Set<IJavaElement> keys= fFinalSimilarElementToName.keySet();
+		return keys.toArray(new IJavaElement[keys.size()]);
 	}
 
 	/**
@@ -435,6 +444,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		return element;
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		IType primary= (IType) fType.getPrimaryElement();
 		if (primary == null || !primary.exists()) {
@@ -446,6 +456,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		return Checks.checkIfCuBroken(fType);
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		Assert.isNotNull(fType, "type"); //$NON-NLS-1$
 		Assert.isNotNull(getNewElementName(), "newName"); //$NON-NLS-1$
@@ -598,8 +609,8 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 			binaryRefs.addErrorIfNecessary(fCachedRefactoringStatus);
 			fReferences= Checks.excludeCompilationUnits(fReferences, fCachedRefactoringStatus);
 
-			fPreloadedElementToName= new LinkedHashMap();
-			fPreloadedElementToSelection= new HashMap();
+			fPreloadedElementToName= new LinkedHashMap<IJavaElement, String>();
+			fPreloadedElementToSelection= new HashMap<IJavaElement, Boolean>();
 
 			final String unQualifiedTypeName= fType.getElementName();
 
@@ -622,7 +633,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 							continue;
 
 						final TypeReferenceMatch match= (TypeReferenceMatch) results[j];
-						final List matches= new ArrayList();
+						final List<IJavaElement> matches= new ArrayList<IJavaElement>();
 
 						if (match.getLocalElement() != null) {
 							if (match.getLocalElement() instanceof ILocalVariable) {
@@ -630,15 +641,15 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 							}
 							// else don't update (e.g. match in type parameter, annotation, ...)
 						} else {
-							matches.add(match.getElement());
+							matches.add((IJavaElement) match.getElement());
 						}
 
 						final IJavaElement[] others= match.getOtherElements();
 						if (others != null)
 							matches.addAll(Arrays.asList(others));
 
-						for (Iterator iter= matches.iterator(); iter.hasNext();) {
-							final IJavaElement element= (IJavaElement) iter.next();
+						for (Iterator<IJavaElement> iter= matches.iterator(); iter.hasNext();) {
+							final IJavaElement element= iter.next();
 
 							if (! (element instanceof IMethod) && ! (element instanceof IField) && ! (element instanceof ILocalVariable))
 								continue;
@@ -662,7 +673,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 								final ILocalVariable currentLocal= (ILocalVariable) element;
 								final boolean isParameter;
 
-								if (JavaModelUtil.isParameter(currentLocal)) {
+								if (currentLocal.isParameter()) {
 									addMethodRename(unQualifiedTypeName, sugg, (IMethod) currentLocal.getParent());
 									isParameter= true;
 								} else
@@ -681,11 +692,11 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 				}
 			}
 
-			for (Iterator iter= fPreloadedElementToName.keySet().iterator(); iter.hasNext();) {
-				IJavaElement element= (IJavaElement) iter.next();
+			for (Iterator<IJavaElement> iter= fPreloadedElementToName.keySet().iterator(); iter.hasNext();) {
+				IJavaElement element= iter.next();
 				fPreloadedElementToSelection.put(element, Boolean.TRUE);
 			}
-			fPreloadedElementToNameDefault= (LinkedHashMap) fPreloadedElementToName.clone();
+			fPreloadedElementToNameDefault= (LinkedHashMap<IJavaElement, String>) fPreloadedElementToName.clone();
 
 		} catch (OperationCanceledException e) {
 			fReferences= null;
@@ -859,9 +870,10 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	private RefactoringStatus analyseEnclosedTypes() throws CoreException {
 		final ISourceRange typeRange= fType.getSourceRange();
 		final RefactoringStatus result= new RefactoringStatus();
-		CompilationUnit cuNode= new RefactoringASTParser(AST.JLS3).parse(fType.getCompilationUnit(), false);
+		CompilationUnit cuNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(fType.getCompilationUnit(), false);
 		cuNode.accept(new ASTVisitor(){
 
+			@Override
 			public boolean visit(TypeDeclaration node){ // enums and annotations can't be local
 				if (node.getStartPosition() <= typeRange.getOffset())
 					return true;
@@ -976,22 +988,23 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	}
 
 	private static ICompilationUnit[] isIntersectionEmpty(ICompilationUnit[] a1, ICompilationUnit[] a2){
-		Set set1= new HashSet(Arrays.asList(a1));
-		Set set2= new HashSet(Arrays.asList(a2));
+		Set<ICompilationUnit> set1= new HashSet<ICompilationUnit>(Arrays.asList(a1));
+		Set<ICompilationUnit> set2= new HashSet<ICompilationUnit>(Arrays.asList(a2));
 		set1.retainAll(set2);
-		return (ICompilationUnit[]) set1.toArray(new ICompilationUnit[set1.size()]);
+		return set1.toArray(new ICompilationUnit[set1.size()]);
 	}
 
 	private static ICompilationUnit[] getCus(SearchResultGroup[] searchResultGroups){
-		List cus= new ArrayList(searchResultGroups.length);
+		List<ICompilationUnit> cus= new ArrayList<ICompilationUnit>(searchResultGroups.length);
 		for (int i= 0; i < searchResultGroups.length; i++) {
 			ICompilationUnit cu= searchResultGroups[i].getCompilationUnit();
 			if (cu != null)
 				cus.add(cu);
 		}
-		return (ICompilationUnit[]) cus.toArray(new ICompilationUnit[cus.size()]);
+		return cus.toArray(new ICompilationUnit[cus.size()]);
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.RenameTypeRefactoring_creating_change, 4);
@@ -1056,6 +1069,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		}
 	}
 
+	@Override
 	public Change postCreateChange(Change[] participantChanges, IProgressMonitor pm) throws CoreException {
 		if (fQualifiedNameSearchResult != null) {
 			try {
@@ -1235,10 +1249,10 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		Assert.isNotNull(fPreloadedElementToSelection);
 
 		final RefactoringStatus status= new RefactoringStatus();
-		final Set handledTopLevelMethods= new HashSet();
-		final Set warnings= new HashSet();
-		final List processors= new ArrayList();
-		fFinalSimilarElementToName= new HashMap();
+		final Set<IMethod> handledTopLevelMethods= new HashSet<IMethod>();
+		final Set<Warning> warnings= new HashSet<Warning>();
+		final List<RefactoringProcessor> processors= new ArrayList<RefactoringProcessor>();
+		fFinalSimilarElementToName= new HashMap<IJavaElement, String>();
 
 		CompilationUnit currentResolvedCU= null;
 		ICompilationUnit currentCU= null;
@@ -1249,15 +1263,15 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		progressMonitor.beginTask("", max * 3); //$NON-NLS-1$
 		progressMonitor.setTaskName(RefactoringCoreMessages.RenameTypeProcessor_checking_similarly_named_declarations_refactoring_conditions);
 
-		for (Iterator iter= fPreloadedElementToName.keySet().iterator(); iter.hasNext();) {
+		for (Iterator<IJavaElement> iter= fPreloadedElementToName.keySet().iterator(); iter.hasNext();) {
 
-			final IJavaElement element= (IJavaElement) iter.next();
+			final IJavaElement element= iter.next();
 
 			current++;
 			progressMonitor.worked(3);
 
 			// not selected? -> skip
-			if (! ((Boolean) (fPreloadedElementToSelection.get(element))).booleanValue())
+			if (! (fPreloadedElementToSelection.get(element)).booleanValue())
 				continue;
 
 			// already registered? (may happen with overridden methods) -> skip
@@ -1280,14 +1294,14 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 				processors.clear();
 			}
 
-			final String newName= (String) fPreloadedElementToName.get(element);
+			final String newName= fPreloadedElementToName.get(element);
 			RefactoringProcessor processor= null;
 
 			if (element instanceof ILocalVariable) {
 				final ILocalVariable currentLocal= (ILocalVariable) element;
 
 				if (currentResolvedCU == null)
-					currentResolvedCU= new RefactoringASTParser(AST.JLS3).parse(currentCU, true);
+					currentResolvedCU= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(currentCU, true);
 
 				processor= createLocalRenameProcessor(currentLocal, newName, currentResolvedCU);
 
@@ -1376,17 +1390,17 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		return status;
 	}
 
-	private void checkCUCompleteConditions(final RefactoringStatus status, CompilationUnit currentResolvedCU, ICompilationUnit currentCU, List processors) throws CoreException {
+	private void checkCUCompleteConditions(final RefactoringStatus status, CompilationUnit currentResolvedCU, ICompilationUnit currentCU, List<RefactoringProcessor> processors) throws CoreException {
 
 		// check local variable conditions
-		List locals= getProcessorsOfType(processors, RenameLocalVariableProcessor.class);
+		List<RefactoringProcessor> locals= getProcessorsOfType(processors, RenameLocalVariableProcessor.class);
 		if (!locals.isEmpty()) {
 			RenameAnalyzeUtil.LocalAnalyzePackage[] analyzePackages= new RenameAnalyzeUtil.LocalAnalyzePackage[locals.size()];
 			TextChangeManager manager= new TextChangeManager();
 			int current= 0;
 			TextChange textChange= manager.get(currentCU);
 			textChange.setKeepPreviewEdits(true);
-			for (Iterator iterator= locals.iterator(); iterator.hasNext();) {
+			for (Iterator<RefactoringProcessor> iterator= locals.iterator(); iterator.hasNext();) {
 				RenameLocalVariableProcessor localProcessor= (RenameLocalVariableProcessor) iterator.next();
 				RenameAnalyzeUtil.LocalAnalyzePackage analyzePackage= localProcessor.getLocalAnalyzePackage();
 				analyzePackages[current]= analyzePackage;
@@ -1406,10 +1420,10 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		 */
 	}
 
-	private List getProcessorsOfType(List processors, Class type) {
-		List tmp= new ArrayList();
-		for (Iterator iter= processors.iterator(); iter.hasNext();) {
-			RefactoringProcessor element= (RefactoringProcessor) iter.next();
+	private List<RefactoringProcessor> getProcessorsOfType(List<RefactoringProcessor> processors, Class<RenameLocalVariableProcessor> type) {
+		List<RefactoringProcessor> tmp= new ArrayList<RefactoringProcessor>();
+		for (Iterator<RefactoringProcessor> iter= processors.iterator(); iter.hasNext();) {
+			RefactoringProcessor element= iter.next();
 			if (element.getClass().equals(type))
 				tmp.add(element);
 		}
@@ -1430,11 +1444,11 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	 */
 	private RefactoringStatus checkForConflictingRename(IMethod[] methods, String newName) {
 		RefactoringStatus status= new RefactoringStatus();
-		for (Iterator iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
-			IJavaElement element= (IJavaElement) iter.next();
+		for (Iterator<IJavaElement> iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
+			IJavaElement element= iter.next();
 			if (element instanceof IMethod) {
 				IMethod alreadyRegisteredMethod= (IMethod) element;
-				String alreadyRegisteredMethodName= (String) fFinalSimilarElementToName.get(element);
+				String alreadyRegisteredMethodName= fFinalSimilarElementToName.get(element);
 				for (int i= 0; i < methods.length; i++) {
 					IMethod method2= methods[i];
 					if ( (alreadyRegisteredMethodName.equals(newName)) && (method2.getDeclaringType().equals(alreadyRegisteredMethod.getDeclaringType()))
@@ -1485,11 +1499,11 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	 */
 	private RefactoringStatus checkForConflictingRename(IField currentField, String newName) {
 		RefactoringStatus status= new RefactoringStatus();
-		for (Iterator iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
-			IJavaElement element= (IJavaElement) iter.next();
+		for (Iterator<IJavaElement> iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
+			IJavaElement element= iter.next();
 			if (element instanceof IField) {
 				IField alreadyRegisteredField= (IField) element;
-				String alreadyRegisteredFieldName= (String) fFinalSimilarElementToName.get(element);
+				String alreadyRegisteredFieldName= fFinalSimilarElementToName.get(element);
 				if (alreadyRegisteredFieldName.equals(newName)) {
 					if (alreadyRegisteredField.getDeclaringType().equals(currentField.getDeclaringType())) {
 
@@ -1506,12 +1520,12 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 		return status;
 	}
 
-	private RefactoringStatus addWarnings(final Set warnings) {
+	private RefactoringStatus addWarnings(final Set<Warning> warnings) {
 		RefactoringStatus status= new RefactoringStatus();
 
 		// Remove deleted ripple methods from user selection and add warnings
-		for (Iterator iter= warnings.iterator(); iter.hasNext();) {
-			final Warning warning= (Warning) iter.next();
+		for (Iterator<Warning> iter= warnings.iterator(); iter.hasNext();) {
+			final Warning warning= iter.next();
 			final IMethod[] elements= warning.getRipple();
 			if (warning.isSelectionWarning()) {
 				String message= Messages.format(RefactoringCoreMessages.RenameTypeProcessor_deselected_method_is_overridden,
@@ -1536,13 +1550,13 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	 * If one of the methods of this ripple was deselected or renamed by
 	 * the user, deselect the whole chain and add warnings.
 	 */
-	private boolean checkForWarnings(final Set warnings, final String newName, final IMethod[] ripples) {
+	private boolean checkForWarnings(final Set<Warning> warnings, final String newName, final IMethod[] ripples) {
 
 		boolean addSelectionWarning= false;
 		boolean addNameWarning= false;
 		for (int i= 0; i < ripples.length; i++) {
-			String newNameOfRipple= (String) fPreloadedElementToName.get(ripples[i]);
-			Boolean selected= (Boolean) fPreloadedElementToSelection.get(ripples[i]);
+			String newNameOfRipple= fPreloadedElementToName.get(ripples[i]);
+			Boolean selected= fPreloadedElementToSelection.get(ripples[i]);
 
 			// selected may be null here due to supermethods like
 			// setSomeClass(Object class) (subsignature match)
@@ -1639,18 +1653,18 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	 */
 	private void addSimilarElementsTextualUpdates(TextChangeManager manager, IProgressMonitor monitor) throws CoreException {
 
-		final Map simpleNames= new HashMap();
-		final List forbiddenSimpleNames= new ArrayList();
+		final Map<String, String> simpleNames= new HashMap<String, String>();
+		final List<String> forbiddenSimpleNames= new ArrayList<String>();
 
-		for (Iterator iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
-			final IJavaElement element= (IJavaElement) iter.next();
+		for (Iterator<IJavaElement> iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
+			final IJavaElement element= iter.next();
 			if (element instanceof IField) {
 
 				if (forbiddenSimpleNames.contains(element.getElementName()))
 					continue;
 
-				final String registeredNewName= (String) simpleNames.get(element.getElementName());
-				final String newNameToCheck= (String) fFinalSimilarElementToName.get(element);
+				final String registeredNewName= simpleNames.get(element.getElementName());
+				final String newNameToCheck= fFinalSimilarElementToName.get(element);
 				if (registeredNewName == null)
 					simpleNames.put(element.getElementName(), newNameToCheck);
 				else if (!registeredNewName.equals(newNameToCheck))
@@ -1658,11 +1672,11 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 			}
 		}
 
-		for (Iterator iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
-			final IJavaElement element= (IJavaElement) iter.next();
+		for (Iterator<IJavaElement> iter= fFinalSimilarElementToName.keySet().iterator(); iter.hasNext();) {
+			final IJavaElement element= iter.next();
 			if (element instanceof IField) {
 				final IField field= (IField) element;
-				final String newName= (String) fFinalSimilarElementToName.get(field);
+				final String newName= fFinalSimilarElementToName.get(field);
 				TextMatchUpdater.perform(monitor, RefactoringScopeFactory.create(field), field.getElementName(), field.getDeclaringType().getFullyQualifiedName(), newName, manager,
 						new SearchResultGroup[0], forbiddenSimpleNames.contains(field.getElementName()));
 			}
@@ -1676,7 +1690,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	 * This map is live. Callers may change the new names of the elements; they
 	 * may not change the key set.
 	 */
-	public Map/* <IJavaElement, String> */getSimilarElementsToNewNames() {
+	public Map<IJavaElement, String> getSimilarElementsToNewNames() {
 		return fPreloadedElementToName;
 	}
 
@@ -1685,7 +1699,7 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	 * map is live. Callers may change the selection status of the elements;
 	 * they may not change the key set.
 	 */
-	public Map/* <IJavaElement, Boolean> */getSimilarElementsToSelection() {
+	public Map<IJavaElement, Boolean> getSimilarElementsToSelection() {
 		return fPreloadedElementToSelection;
 	}
 
@@ -1697,8 +1711,8 @@ public class RenameTypeProcessor extends JavaRenameProcessor implements ITextUpd
 	 */
 	public void resetSelectedSimilarElements() {
 		Assert.isNotNull(fPreloadedElementToName);
-		for (Iterator iter= fPreloadedElementToNameDefault.keySet().iterator(); iter.hasNext();) {
-			final IJavaElement element= (IJavaElement) iter.next();
+		for (Iterator<IJavaElement> iter= fPreloadedElementToNameDefault.keySet().iterator(); iter.hasNext();) {
+			final IJavaElement element= iter.next();
 			fPreloadedElementToName.put(element, fPreloadedElementToNameDefault.get(element));
 			fPreloadedElementToSelection.put(element, Boolean.TRUE);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java
index 4da6719..5b773e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,12 +100,14 @@ public class RenameVirtualMethodProcessor extends RenameMethodProcessor {
 		return fCachedHierarchy;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isRenameVirtualMethodAvailable(getMethod());
 	}
 
 	//------------ preconditions -------------
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException {
 		RefactoringStatus result= super.checkInitialConditions(monitor);
 		if (result.hasFatalError())
@@ -135,6 +137,7 @@ public class RenameVirtualMethodProcessor extends RenameMethodProcessor {
 		return result;
 	}
 
+	@Override
 	protected RefactoringStatus doCheckFinalConditions(IProgressMonitor pm, CheckConditionsContext checkContext) throws CoreException {
 		try{
 			pm.beginTask("", 9); //$NON-NLS-1$
@@ -191,15 +194,15 @@ public class RenameVirtualMethodProcessor extends RenameMethodProcessor {
 
 	private IMethod[] relatedTypeDeclaresMethodName(IProgressMonitor pm, IMethod method, String newName) throws CoreException {
 		try{
-			Set result= new HashSet();
-			Set types= getRelatedTypes();
+			Set<IMethod> result= new HashSet<IMethod>();
+			Set<IType> types= getRelatedTypes();
 			pm.beginTask("", types.size()); //$NON-NLS-1$
-			for (Iterator iter= types.iterator(); iter.hasNext(); ) {
-				final IMethod found= Checks.findMethod(method, (IType)iter.next());
+			for (Iterator<IType> iter= types.iterator(); iter.hasNext(); ) {
+				final IMethod found= Checks.findMethod(method, iter.next());
 				final IType declaring= found.getDeclaringType();
 				result.addAll(Arrays.asList(hierarchyDeclaresMethodName(new SubProgressMonitor(pm, 1), declaring.newTypeHierarchy(new SubProgressMonitor(pm, 1)), found, newName)));
 			}
-			return (IMethod[]) result.toArray(new IMethod[result.size()]);
+			return result.toArray(new IMethod[result.size()]);
 		} finally {
 			pm.done();
 		}
@@ -229,11 +232,11 @@ public class RenameVirtualMethodProcessor extends RenameMethodProcessor {
 		return false;
 	}
 
-	private Set getRelatedTypes() {
-		Set methods= getMethodsToRename();
-		Set result= new HashSet(methods.size());
-		for (Iterator iter= methods.iterator(); iter.hasNext(); ){
-			result.add(((IMethod)iter.next()).getDeclaringType());
+	private Set<IType> getRelatedTypes() {
+		Set<IMethod> methods= getMethodsToRename();
+		Set<IType> result= new HashSet<IType>(methods.size());
+		for (Iterator<IMethod> iter= methods.iterator(); iter.hasNext(); ){
+			result.add(iter.next().getDeclaringType());
 		}
 		return result;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamingNameSuggestor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamingNameSuggestor.java
index 70b2091..50ef19b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamingNameSuggestor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamingNameSuggestor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -448,7 +448,7 @@ public class RenamingNameSuggestor {
 	 *
 	 */
 	private String[] getSuffixes(String typeName) {
-		List suffixes= new ArrayList();
+		List<String> suffixes= new ArrayList<String>();
 		JavaWordIterator iterator= new JavaWordIterator();
 		iterator.setText(typeName);
 		int lastmatch= 0;
@@ -457,7 +457,7 @@ public class RenamingNameSuggestor {
 			suffixes.add(typeName.substring(lastmatch, match));
 			lastmatch= match;
 		}
-		return (String[]) suffixes.toArray(new String[0]);
+		return suffixes.toArray(new String[0]);
 	}
 
 	private String concat(String[] suffixesNewEqual) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java
index 160caa8..0657e8c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,36 +50,36 @@ import org.eclipse.jdt.internal.corext.util.SearchUtils;
 public class RippleMethodFinder2 {
 
 	private final IMethod fMethod;
-	private List/*<IMethod>*/ fDeclarations;
+	private List<IMethod> fDeclarations;
 	private ITypeHierarchy fHierarchy;
-	private Map/*IType, IMethod*/ fTypeToMethod;
-	private Set/*IType*/ fRootTypes;
-	private MultiMap/*IType, IType*/ fRootReps;
-	private Map/*IType, ITypeHierarchy*/ fRootHierarchies;
+	private Map<IType, IMethod> fTypeToMethod;
+	private Set<IType> fRootTypes;
+	private MultiMap<IType, IType> fRootReps;
+	private Map<IType, ITypeHierarchy> fRootHierarchies;
 	private UnionFind fUnionFind;
 
 	private final boolean fExcludeBinaries;
 	private final ReferencesInBinaryContext fBinaryRefs;
-	private Map/*<IMethod, SearchMatch>*/ fDeclarationToMatch;
+	private Map<IMethod, SearchMatch> fDeclarationToMatch;
 
-	private static class MultiMap {
-		HashMap/*<IType, Collection>*/ fImplementation= new HashMap();
+	private static class MultiMap<K, V> {
+		HashMap<K, Collection<V>> fImplementation= new HashMap<K, Collection<V>>();
 
-		public void put(IType key, IType value) {
-			Collection collection= (Collection) fImplementation.get(key);
+		public void put(K key, V value) {
+			Collection<V> collection= fImplementation.get(key);
 			if (collection == null) {
-				collection= new HashSet();
+				collection= new HashSet<V>();
 				fImplementation.put(key, collection);
 			}
 			collection.add(value);
 		}
 
-		public Collection get(IType key) {
-			return (Collection) fImplementation.get(key);
+		public Collection<V> get(K key) {
+			return fImplementation.get(key);
 		}
 	}
 	private static class UnionFind {
-		HashMap/*<IType, IType>*/ fElementToRepresentative= new HashMap();
+		HashMap<IType, IType> fElementToRepresentative= new HashMap<IType, IType>();
 
 		public void init(IType type) {
 			fElementToRepresentative.put(type, type);
@@ -88,20 +88,20 @@ public class RippleMethodFinder2 {
 		//path compression:
 		public IType find(IType element) {
 			IType root= element;
-			IType rep= (IType) fElementToRepresentative.get(root);
+			IType rep= fElementToRepresentative.get(root);
 			while (rep != null && ! rep.equals(root)) {
 				root= rep;
-				rep= (IType) fElementToRepresentative.get(root);
+				rep= fElementToRepresentative.get(root);
 			}
 			if (rep == null)
 				return null;
 
-			rep= (IType) fElementToRepresentative.get(element);
+			rep= fElementToRepresentative.get(element);
 			while (! rep.equals(root)) {
 				IType temp= element;
 				element= rep;
 				fElementToRepresentative.put(temp, root);
-				rep= (IType) fElementToRepresentative.get(element);
+				rep= fElementToRepresentative.get(element);
 			}
 			return root;
 		}
@@ -135,7 +135,7 @@ public class RippleMethodFinder2 {
 	private RippleMethodFinder2(IMethod method, ReferencesInBinaryContext binaryRefs) {
 		fMethod= method;
 		fExcludeBinaries= true;
-		fDeclarationToMatch= new HashMap();
+		fDeclarationToMatch= new HashMap<IMethod, SearchMatch>();
 		fBinaryRefs= binaryRefs;
 	}
 
@@ -169,8 +169,8 @@ public class RippleMethodFinder2 {
 		if (fDeclarationToMatch == null)
 			return rippleMethods;
 
-		List rippleMethodsList= new ArrayList(Arrays.asList(rippleMethods));
-		for (Iterator iter= rippleMethodsList.iterator(); iter.hasNext(); ) {
+		List<IMethod> rippleMethodsList= new ArrayList<IMethod>(Arrays.asList(rippleMethods));
+		for (Iterator<IMethod> iter= rippleMethodsList.iterator(); iter.hasNext(); ) {
 			Object match= fDeclarationToMatch.get(iter.next());
 			if (match != null) {
 				iter.remove();
@@ -178,7 +178,7 @@ public class RippleMethodFinder2 {
 			}
 		}
 		fDeclarationToMatch= null;
-		return (IMethod[]) rippleMethodsList.toArray(new IMethod[rippleMethodsList.size()]);
+		return rippleMethodsList.toArray(new IMethod[rippleMethodsList.size()]);
 	}
 
 	private IMethod[] findAllRippleMethods(IProgressMonitor pm, WorkingCopyOwner owner) throws CoreException {
@@ -200,28 +200,28 @@ public class RippleMethodFinder2 {
 		fHierarchy= null;
 		fRootTypes= null;
 
-		Map/*IType, List<IType>*/ partitioning= new HashMap();
-		for (Iterator iter= fTypeToMethod.keySet().iterator(); iter.hasNext();) {
-			IType type= (IType) iter.next();
+		Map<IType, List<IType>> partitioning= new HashMap<IType, List<IType>>();
+		for (Iterator<IType> iter= fTypeToMethod.keySet().iterator(); iter.hasNext();) {
+			IType type= iter.next();
 			IType rep= fUnionFind.find(type);
-			List/*<IType>*/ types= (List) partitioning.get(rep);
+			List<IType> types= partitioning.get(rep);
 			if (types == null)
-				types= new ArrayList();
+				types= new ArrayList<IType>();
 			types.add(type);
 			partitioning.put(rep, types);
 		}
 		Assert.isTrue(partitioning.size() > 0);
 		if (partitioning.size() == 1)
-			return (IMethod[]) fDeclarations.toArray(new IMethod[fDeclarations.size()]);
+			return fDeclarations.toArray(new IMethod[fDeclarations.size()]);
 
 		//Multiple partitions; must look out for nasty marriage cases
 		//(types inheriting method from two ancestors, but without redeclaring it).
 		IType methodTypeRep= fUnionFind.find(fMethod.getDeclaringType());
-		List/*<IType>*/ relatedTypes= (List) partitioning.get(methodTypeRep);
+		List<IType> relatedTypes= partitioning.get(methodTypeRep);
 		boolean hasRelatedInterfaces= false;
-		List/*<IMethod>*/ relatedMethods= new ArrayList();
-		for (Iterator iter= relatedTypes.iterator(); iter.hasNext();) {
-			IType relatedType= (IType) iter.next();
+		List<IMethod> relatedMethods= new ArrayList<IMethod>();
+		for (Iterator<IType> iter= relatedTypes.iterator(); iter.hasNext();) {
+			IType relatedType= iter.next();
 			relatedMethods.add(fTypeToMethod.get(relatedType));
 			if (relatedType.isInterface())
 				hasRelatedInterfaces= true;
@@ -230,32 +230,32 @@ public class RippleMethodFinder2 {
 		//Definition: An alien type is a type that is not a related type. The set of
 		// alien types diminishes as new types become related (a.k.a marry a relatedType).
 
-		List/*<IMethod>*/ alienDeclarations= new ArrayList(fDeclarations);
+		List<IMethod> alienDeclarations= new ArrayList<IMethod>(fDeclarations);
 		fDeclarations= null;
 		alienDeclarations.removeAll(relatedMethods);
-		List/*<IType>*/ alienTypes= new ArrayList();
+		List<IType> alienTypes= new ArrayList<IType>();
 		boolean hasAlienInterfaces= false;
-		for (Iterator iter= alienDeclarations.iterator(); iter.hasNext();) {
-			IMethod alienDeclaration= (IMethod) iter.next();
+		for (Iterator<IMethod> iter= alienDeclarations.iterator(); iter.hasNext();) {
+			IMethod alienDeclaration= iter.next();
 			IType alienType= alienDeclaration.getDeclaringType();
 			alienTypes.add(alienType);
 			if (alienType.isInterface())
 				hasAlienInterfaces= true;
 		}
 		if (alienTypes.size() == 0) //no nasty marriage scenarios without types to marry with...
-			return (IMethod[]) relatedMethods.toArray(new IMethod[relatedMethods.size()]);
+			return relatedMethods.toArray(new IMethod[relatedMethods.size()]);
 		if (! hasRelatedInterfaces && ! hasAlienInterfaces) //no nasty marriage scenarios without interfaces...
-			return (IMethod[]) relatedMethods.toArray(new IMethod[relatedMethods.size()]);
+			return relatedMethods.toArray(new IMethod[relatedMethods.size()]);
 
 		//find all subtypes of related types:
-		HashSet/*<IType>*/ relatedSubTypes= new HashSet();
-		List/*<IType>*/ relatedTypesToProcess= new ArrayList(relatedTypes);
+		HashSet<IType> relatedSubTypes= new HashSet<IType>();
+		List<IType> relatedTypesToProcess= new ArrayList<IType>(relatedTypes);
 		while (relatedTypesToProcess.size() > 0) {
 			//TODO: would only need subtype hierarchies of all top-of-ripple relatedTypesToProcess
-			for (Iterator iter= relatedTypesToProcess.iterator(); iter.hasNext();) {
+			for (Iterator<IType> iter= relatedTypesToProcess.iterator(); iter.hasNext();) {
 				if (pm.isCanceled())
 					throw new OperationCanceledException();
-				IType relatedType= (IType) iter.next();
+				IType relatedType= iter.next();
 				ITypeHierarchy hierarchy= getCachedHierarchy(relatedType, owner, new SubProgressMonitor(pm, 1));
 				if (hierarchy == null)
 					hierarchy= relatedType.newTypeHierarchy(owner, new SubProgressMonitor(pm, 1));
@@ -265,12 +265,12 @@ public class RippleMethodFinder2 {
 			}
 			relatedTypesToProcess.clear(); //processed; make sure loop terminates
 
-			HashSet/*<IType>*/ marriedAlienTypeReps= new HashSet();
-			for (Iterator iter= alienTypes.iterator(); iter.hasNext();) {
+			HashSet<IType> marriedAlienTypeReps= new HashSet<IType>();
+			for (Iterator<IType> iter= alienTypes.iterator(); iter.hasNext();) {
 				if (pm.isCanceled())
 					throw new OperationCanceledException();
-				IType alienType= (IType) iter.next();
-				IMethod alienMethod= (IMethod) fTypeToMethod.get(alienType);
+				IType alienType= iter.next();
+				IMethod alienMethod= fTypeToMethod.get(alienType);
 				ITypeHierarchy hierarchy= getCachedHierarchy(alienType, owner, new SubProgressMonitor(pm, 1));
 				if (hierarchy == null)
 					hierarchy= alienType.newTypeHierarchy(owner, new SubProgressMonitor(pm, 1));
@@ -288,13 +288,13 @@ public class RippleMethodFinder2 {
 			}
 
 			if (marriedAlienTypeReps.size() == 0)
-				return (IMethod[]) relatedMethods.toArray(new IMethod[relatedMethods.size()]);
+				return relatedMethods.toArray(new IMethod[relatedMethods.size()]);
 
-			for (Iterator iter= marriedAlienTypeReps.iterator(); iter.hasNext();) {
-				IType marriedAlienTypeRep= (IType) iter.next();
-				List/*<IType>*/ marriedAlienTypes= (List) partitioning.get(marriedAlienTypeRep);
-				for (Iterator iterator= marriedAlienTypes.iterator(); iterator.hasNext();) {
-					IType marriedAlienInterfaceType= (IType) iterator.next();
+			for (Iterator<IType> iter= marriedAlienTypeReps.iterator(); iter.hasNext();) {
+				IType marriedAlienTypeRep= iter.next();
+				List<IType> marriedAlienTypes= partitioning.get(marriedAlienTypeRep);
+				for (Iterator<IType> iterator= marriedAlienTypes.iterator(); iterator.hasNext();) {
+					IType marriedAlienInterfaceType= iterator.next();
 					relatedMethods.add(fTypeToMethod.get(marriedAlienInterfaceType));
 				}
 				alienTypes.removeAll(marriedAlienTypes); //not alien any more
@@ -307,16 +307,16 @@ public class RippleMethodFinder2 {
 		fTypeToMethod= null;
 		fUnionFind= null;
 
-		return (IMethod[]) relatedMethods.toArray(new IMethod[relatedMethods.size()]);
+		return relatedMethods.toArray(new IMethod[relatedMethods.size()]);
 	}
 
 	private ITypeHierarchy getCachedHierarchy(IType type, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException {
 		IType rep= fUnionFind.find(type);
 		if (rep != null) {
-			Collection collection= fRootReps.get(rep);
-			for (Iterator iter= collection.iterator(); iter.hasNext();) {
-				IType root= (IType) iter.next();
-				ITypeHierarchy hierarchy= (ITypeHierarchy) fRootHierarchies.get(root);
+			Collection<IType> collection= fRootReps.get(rep);
+			for (Iterator<IType> iter= collection.iterator(); iter.hasNext();) {
+				IType root= iter.next();
+				ITypeHierarchy hierarchy= fRootHierarchies.get(root);
 				if (hierarchy == null) {
 					hierarchy= root.newTypeHierarchy(owner, new SubProgressMonitor(monitor, 1));
 					fRootHierarchies.put(root, hierarchy);
@@ -329,9 +329,10 @@ public class RippleMethodFinder2 {
 	}
 
 	private void findAllDeclarations(IProgressMonitor monitor, WorkingCopyOwner owner) throws CoreException {
-		fDeclarations= new ArrayList();
+		fDeclarations= new ArrayList<IMethod>();
 
 		class MethodRequestor extends SearchRequestor {
+			@Override
 			public void acceptSearchMatch(SearchMatch match) throws CoreException {
 				IMethod method= (IMethod) match.getElement();
 				boolean isBinary= method.isBinary();
@@ -357,40 +358,40 @@ public class RippleMethodFinder2 {
 
 	private void createHierarchyOfDeclarations(IProgressMonitor pm, WorkingCopyOwner owner) throws JavaModelException {
 		IRegion region= JavaCore.newRegion();
-		for (Iterator iter= fDeclarations.iterator(); iter.hasNext();) {
-			IType declaringType= ((IMethod) iter.next()).getDeclaringType();
+		for (Iterator<IMethod> iter= fDeclarations.iterator(); iter.hasNext();) {
+			IType declaringType= iter.next().getDeclaringType();
 			region.add(declaringType);
 		}
 		fHierarchy= JavaCore.newTypeHierarchy(region, owner, pm);
 	}
 
 	private void createTypeToMethod() {
-		fTypeToMethod= new HashMap();
-		for (Iterator iter= fDeclarations.iterator(); iter.hasNext();) {
-			IMethod declaration= (IMethod) iter.next();
+		fTypeToMethod= new HashMap<IType, IMethod>();
+		for (Iterator<IMethod> iter= fDeclarations.iterator(); iter.hasNext();) {
+			IMethod declaration= iter.next();
 			fTypeToMethod.put(declaration.getDeclaringType(), declaration);
 		}
 	}
 
 	private void createUnionFind() throws JavaModelException {
-		fRootTypes= new HashSet(fTypeToMethod.keySet());
+		fRootTypes= new HashSet<IType>(fTypeToMethod.keySet());
 		fUnionFind= new UnionFind();
-		for (Iterator iter= fTypeToMethod.keySet().iterator(); iter.hasNext();) {
-			IType type= (IType) iter.next();
+		for (Iterator<IType> iter= fTypeToMethod.keySet().iterator(); iter.hasNext();) {
+			IType type= iter.next();
 			fUnionFind.init(type);
 		}
-		for (Iterator iter= fTypeToMethod.keySet().iterator(); iter.hasNext();) {
-			IType type= (IType) iter.next();
+		for (Iterator<IType> iter= fTypeToMethod.keySet().iterator(); iter.hasNext();) {
+			IType type= iter.next();
 			uniteWithSupertypes(type, type);
 		}
-		fRootReps= new MultiMap();
-		for (Iterator iter= fRootTypes.iterator(); iter.hasNext();) {
-			IType type= (IType) iter.next();
+		fRootReps= new MultiMap<IType, IType>();
+		for (Iterator<IType> iter= fRootTypes.iterator(); iter.hasNext();) {
+			IType type= iter.next();
 			IType rep= fUnionFind.find(type);
 			if (rep != null)
 				fRootReps.put(rep, type);
 		}
-		fRootHierarchies= new HashMap();
+		fRootHierarchies= new HashMap<IType, ITypeHierarchy>();
 	}
 
 	private void uniteWithSupertypes(IType anchor, IType type) throws JavaModelException {
@@ -403,7 +404,7 @@ public class RippleMethodFinder2 {
 				uniteWithSupertypes(anchor, supertype);
 			} else {
 				//check whether method in supertype is really overridden:
-				IMember superMethod= (IMember) fTypeToMethod.get(supertype);
+				IMember superMethod= fTypeToMethod.get(supertype);
 				if (JavaModelUtil.isVisibleInHierarchy(superMethod, anchor.getPackageFragment())) {
 					IType rep= fUnionFind.find(anchor);
 					fUnionFind.union(rep, superRep);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempDeclarationFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempDeclarationFinder.java
index 4556943..957bc12 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempDeclarationFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempDeclarationFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,6 +78,7 @@ public class TempDeclarationFinder {
 		}
 
 		//overridden
+		@Override
 		public boolean visitNode(ASTNode node) {
 			if (node instanceof VariableDeclaration)
 				return visitVariableDeclaration((VariableDeclaration)node);
@@ -115,6 +116,7 @@ public class TempDeclarationFinder {
 		}
 
 		//overridden
+		@Override
 		public ASTNode[] getSelectedNodes() {
 			if (fNode != null)
 				return new ASTNode[] { fNode };
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java
index 9bdd139..72c07f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,9 +30,9 @@ import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 
 public class TempOccurrenceAnalyzer extends ASTVisitor {
 	/** Set of SimpleName */
-	private Set fReferenceNodes;
+	private Set<SimpleName> fReferenceNodes;
 	/** Set of SimpleName */
-	private Set fJavadocNodes;
+	private Set<SimpleName> fJavadocNodes;
 
 	private VariableDeclaration fTempDeclaration;
 	private IBinding fTempBinding;
@@ -42,8 +42,8 @@ public class TempOccurrenceAnalyzer extends ASTVisitor {
 
 	public TempOccurrenceAnalyzer(VariableDeclaration tempDeclaration, boolean analyzeJavadoc){
 		Assert.isNotNull(tempDeclaration);
-		fReferenceNodes= new HashSet();
-		fJavadocNodes= new HashSet();
+		fReferenceNodes= new HashSet<SimpleName>();
+		fJavadocNodes= new HashSet<SimpleName>();
 		fAnalyzeJavadoc= analyzeJavadoc;
 		fTempDeclaration= tempDeclaration;
 		fTempBinding= tempDeclaration.resolveBinding();
@@ -68,10 +68,10 @@ public class TempOccurrenceAnalyzer extends ASTVisitor {
 		return offsets;
 	}
 
-	private void addOffsets(int[] offsets, int start, Set nodeSet) {
+	private void addOffsets(int[] offsets, int start, Set<SimpleName> nodeSet) {
 		int i= start;
-		for (Iterator iter= nodeSet.iterator(); iter.hasNext(); i++) {
-			ASTNode node= (ASTNode) iter.next();
+		for (Iterator<SimpleName> iter= nodeSet.iterator(); iter.hasNext(); i++) {
+			ASTNode node= iter.next();
 			offsets[i]= node.getStartPosition();
 		}
 	}
@@ -81,31 +81,34 @@ public class TempOccurrenceAnalyzer extends ASTVisitor {
 	}
 
 	public SimpleName[] getReferenceNodes() {
-		return (SimpleName[]) fReferenceNodes.toArray(new SimpleName[fReferenceNodes.size()]);
+		return fReferenceNodes.toArray(new SimpleName[fReferenceNodes.size()]);
 	}
 
 	public SimpleName[] getJavadocNodes() {
-		return (SimpleName[]) fJavadocNodes.toArray(new SimpleName[fJavadocNodes.size()]);
+		return fJavadocNodes.toArray(new SimpleName[fJavadocNodes.size()]);
 	}
 
 	public SimpleName[] getReferenceAndDeclarationNodes() {
-		SimpleName[] nodes= (SimpleName[]) fReferenceNodes.toArray(new SimpleName[fReferenceNodes.size() + 1]);
+		SimpleName[] nodes= fReferenceNodes.toArray(new SimpleName[fReferenceNodes.size() + 1]);
 		nodes[fReferenceNodes.size()]= fTempDeclaration.getName();
 		return nodes;
 	}
 
 	//------- visit ------ (don't call)
 
+	@Override
 	public boolean visit(Javadoc node) {
 		if (fAnalyzeJavadoc)
 			fIsInJavadoc= true;
 		return fAnalyzeJavadoc;
 	}
 
+	@Override
 	public void endVisit(Javadoc node) {
 		fIsInJavadoc= false;
 	}
 
+	@Override
 	public boolean visit(SimpleName node){
 		if (node.getParent() instanceof VariableDeclaration){
 			if (((VariableDeclaration)node.getParent()).getName() == node)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java
index 67a32d6..a257f88 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -107,17 +107,17 @@ class TextMatchUpdater {
 
 	private IProject[] getProjectsInScope() {
 		IPath[] enclosingProjects= fScope.enclosingProjectsAndJars();
-		Set enclosingProjectSet= new HashSet();
+		Set<IPath> enclosingProjectSet= new HashSet<IPath>();
 		enclosingProjectSet.addAll(Arrays.asList(enclosingProjects));
 
-		ArrayList projectsInScope= new ArrayList();
+		ArrayList<IProject> projectsInScope= new ArrayList<IProject>();
 		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
 		for (int i =0 ; i < projects.length; i++){
 			if (enclosingProjectSet.contains(projects[i].getFullPath()))
 				projectsInScope.add(projects[i]);
 		}
 
-		return (IProject[]) projectsInScope.toArray(new IProject[projectsInScope.size()]);
+		return projectsInScope.toArray(new IProject[projectsInScope.size()]);
 	}
 
 	private void addTextMatches(IResource resource, IProgressMonitor pm) throws JavaModelException{
@@ -156,7 +156,7 @@ class TextMatchUpdater {
 
 	private void addCuTextMatches(ICompilationUnit cu) throws JavaModelException{
 		fScanner.scan(cu);
-		Set matches= fScanner.getMatches(); //Set of TextMatch
+		Set<TextMatch> matches= fScanner.getMatches(); //Set of TextMatch
 		if (matches.size() == 0)
 			return;
 
@@ -165,7 +165,7 @@ class TextMatchUpdater {
 			addTextUpdates(cu, matches);
 	}
 
-	private void removeReferences(ICompilationUnit cu, Set matches) {
+	private void removeReferences(ICompilationUnit cu, Set<TextMatch> matches) {
 		for (int i= 0; i < fReferences.length; i++) {
 			SearchResultGroup group= fReferences[i];
 			if (cu.equals(group.getCompilationUnit())) {
@@ -174,22 +174,22 @@ class TextMatchUpdater {
 		}
 	}
 
-	private void removeReferences(Set matches, SearchResultGroup group) {
+	private void removeReferences(Set<TextMatch> matches, SearchResultGroup group) {
 		SearchMatch[] searchResults= group.getSearchResults();
 		for (int r= 0; r < searchResults.length; r++) {
 			//int start= searchResults[r].getStart(); // doesn't work for pack.ReferencedType
 			int unqualifiedStart= searchResults[r].getOffset() + searchResults[r].getLength() - fCurrentNameLength;
-			for (Iterator iter= matches.iterator(); iter.hasNext();) {
-				TextMatch element= (TextMatch) iter.next();
+			for (Iterator<TextMatch> iter= matches.iterator(); iter.hasNext();) {
+				TextMatch element= iter.next();
 				if (element.getStartPosition() == unqualifiedStart)
 					iter.remove();
 			}
 		}
 	}
 
-	private void addTextUpdates(ICompilationUnit cu, Set matches) {
-		for (Iterator resultIter= matches.iterator(); resultIter.hasNext();){
-			TextMatch match= (TextMatch) resultIter.next();
+	private void addTextUpdates(ICompilationUnit cu, Set<TextMatch> matches) {
+		for (Iterator<TextMatch> resultIter= matches.iterator(); resultIter.hasNext();){
+			TextMatch match= resultIter.next();
 			if (!match.isQualified() && fOnlyQualified)
 				continue;
 			int matchStart= match.getStartPosition();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TypeOccurrenceCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TypeOccurrenceCollector.java
index ceb4230..855895b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TypeOccurrenceCollector.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TypeOccurrenceCollector.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class TypeOccurrenceCollector extends CuCollectingSearchRequestor {
 		fOldQualifiedName= type.getFullyQualifiedName('.');
 	}
 
+	@Override
 	public void acceptSearchMatch(ICompilationUnit unit, SearchMatch match) throws CoreException {
 		collectMatch(acceptSearchMatch2(unit, match));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java
index 62aea67..b812f7d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,10 +74,11 @@ public class ASTNodeDeleteUtil {
 		return ASTNodeSearchUtil.getDeclarationNodes(element, cuNode);
 	}
 
-	private static Set getRemovedNodes(final List removed, final CompilationUnitRewrite rewrite) {
-		final Set result= new HashSet();
+	private static Set<ASTNode> getRemovedNodes(final List<ASTNode> removed, final CompilationUnitRewrite rewrite) {
+		final Set<ASTNode> result= new HashSet<ASTNode>();
 		rewrite.getRoot().accept(new GenericVisitor(true) {
 
+			@Override
 			protected boolean visitNode(ASTNode node) {
 				if (removed.contains(node))
 					result.add(node);
@@ -88,14 +89,14 @@ public class ASTNodeDeleteUtil {
 	}
 
 	public static void markAsDeleted(IJavaElement[] javaElements, CompilationUnitRewrite rewrite, TextEditGroup group) throws JavaModelException {
-		final List removed= new ArrayList();
+		final List<ASTNode> removed= new ArrayList<ASTNode>();
 		for (int i= 0; i < javaElements.length; i++) {
 			markAsDeleted(removed, javaElements[i], rewrite, group);
 		}
 		propagateFieldDeclarationNodeDeletions(removed, rewrite, group);
 	}
 
-	private static void markAsDeleted(List list, IJavaElement element, CompilationUnitRewrite rewrite, TextEditGroup group) throws JavaModelException {
+	private static void markAsDeleted(List<ASTNode> list, IJavaElement element, CompilationUnitRewrite rewrite, TextEditGroup group) throws JavaModelException {
 		ASTNode[] declarationNodes= getNodesToDelete(element, rewrite.getRoot());
 		for (int i= 0; i < declarationNodes.length; i++) {
 			ASTNode node= declarationNodes[i];
@@ -107,10 +108,10 @@ public class ASTNodeDeleteUtil {
 		}
 	}
 
-	private static void propagateFieldDeclarationNodeDeletions(final List removed, final CompilationUnitRewrite rewrite, final TextEditGroup group) {
-		Set removedNodes= getRemovedNodes(removed, rewrite);
-		for (Iterator iter= removedNodes.iterator(); iter.hasNext();) {
-			ASTNode node= (ASTNode) iter.next();
+	private static void propagateFieldDeclarationNodeDeletions(final List<ASTNode> removed, final CompilationUnitRewrite rewrite, final TextEditGroup group) {
+		Set<ASTNode> removedNodes= getRemovedNodes(removed, rewrite);
+		for (Iterator<ASTNode> iter= removedNodes.iterator(); iter.hasNext();) {
+			ASTNode node= iter.next();
 			if (node instanceof VariableDeclarationFragment) {
 				if (node.getParent() instanceof FieldDeclaration) {
 					FieldDeclaration fd= (FieldDeclaration) node.getParent();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ArrayTypeConverter.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ArrayTypeConverter.java
index 2c2c26b..5b83f36 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ArrayTypeConverter.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ArrayTypeConverter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,27 +26,27 @@ class ArrayTypeConverter {
 	}
 
 	static IFile[] toFileArray(Object[] objects){
-		List l= Arrays.asList(objects);
-		return (IFile[]) l.toArray(new IFile[l.size()]);
+		List<?> l= Arrays.asList(objects);
+		return l.toArray(new IFile[l.size()]);
 	}
 
 	static IFolder[] toFolderArray(Object[] objects){
-		List l= Arrays.asList(objects);
-		return (IFolder[]) l.toArray(new IFolder[l.size()]);
+		List<?> l= Arrays.asList(objects);
+		return l.toArray(new IFolder[l.size()]);
 	}
 
 	static ICompilationUnit[] toCuArray(Object[] objects){
-		List l= Arrays.asList(objects);
-		return (ICompilationUnit[]) l.toArray(new ICompilationUnit[l.size()]);
+		List<?> l= Arrays.asList(objects);
+		return l.toArray(new ICompilationUnit[l.size()]);
 	}
 
 	static IPackageFragmentRoot[] toPackageFragmentRootArray(Object[] objects){
-		List l= Arrays.asList(objects);
-		return (IPackageFragmentRoot[]) l.toArray(new IPackageFragmentRoot[l.size()]);
+		List<?> l= Arrays.asList(objects);
+		return l.toArray(new IPackageFragmentRoot[l.size()]);
 	}
 
 	static IPackageFragment[] toPackageArray(Object[] objects){
-		List l= Arrays.asList(objects);
-		return (IPackageFragment[]) l.toArray(new IPackageFragment[l.size()]);
+		List<?> l= Arrays.asList(objects);
+		return l.toArray(new IPackageFragment[l.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java
index da4776d..709eedf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,14 +42,14 @@ import org.eclipse.jdt.internal.corext.util.JavaElementResourceMapping;
 
 public class CopyModifications extends RefactoringModifications {
 
-	private List fCopies;
-	private List fCopyArguments;
-	private List fParticipantDescriptorFilter;
+	private List<Object> fCopies;
+	private List<RefactoringArguments> fCopyArguments;
+	private List<IParticipantDescriptorFilter> fParticipantDescriptorFilter;
 
 	public CopyModifications() {
-		fCopies= new ArrayList();
-		fCopyArguments= new ArrayList();
-		fParticipantDescriptorFilter= new ArrayList();
+		fCopies= new ArrayList<Object>();
+		fCopyArguments= new ArrayList<RefactoringArguments>();
+		fParticipantDescriptorFilter= new ArrayList<IParticipantDescriptorFilter>();
 	}
 
 	public void copy(IResource resource, CopyArguments args) {
@@ -130,6 +130,7 @@ public class CopyModifications extends RefactoringModifications {
 		}
 	}
 
+	@Override
 	public void buildDelta(IResourceChangeDescriptionFactory builder) {
 		for (int i= 0; i < fCopies.size(); i++) {
 			Object element= fCopies.get(i);
@@ -140,17 +141,18 @@ public class CopyModifications extends RefactoringModifications {
 		getResourceModifications().buildDelta(builder);
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, RefactoringProcessor owner, String[] natures, SharableParticipants shared) {
-		List result= new ArrayList();
+		List<RefactoringParticipant> result= new ArrayList<RefactoringParticipant>();
 		for (int i= 0; i < fCopies.size(); i++) {
 			result.addAll(Arrays.asList(ParticipantManager.loadCopyParticipants(status,
 				owner, fCopies.get(i),
 				(CopyArguments) fCopyArguments.get(i),
-				(IParticipantDescriptorFilter) fParticipantDescriptorFilter.get(i),
+				fParticipantDescriptorFilter.get(i),
 				natures, shared)));
 		}
 		result.addAll(Arrays.asList(getResourceModifications().getParticipants(status, owner, natures, shared)));
-		return (RefactoringParticipant[]) result.toArray(new RefactoringParticipant[result.size()]);
+		return result.toArray(new RefactoringParticipant[result.size()]);
 	}
 
 	private void add(Object element, RefactoringArguments args, IParticipantDescriptorFilter filter) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java
index ffeefde..b1e16c5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -143,12 +143,14 @@ public final class CreateCopyOfCompilationUnitChange extends CreateTextFileChang
 		setEncoding(oldCu);
 	}
 
+	@Override
 	public String getName() {
 		String cuName= BasicElementLabels.getResourceName(fOldCu.getElementName());
 		String cuContainerName= BasicElementLabels.getPathLabel(fOldCu.getParent().getPath(), false);
 		return Messages.format(RefactoringCoreMessages.CreateCopyOfCompilationUnitChange_create_copy, new String[] { cuName, cuContainerName});
 	}
 
+	@Override
 	protected IFile getOldFile(IProgressMonitor monitor) throws OperationCanceledException {
 		try {
 			monitor.beginTask("", 12); //$NON-NLS-1$
@@ -178,6 +180,7 @@ public final class CreateCopyOfCompilationUnitChange extends CreateTextFileChang
 		}
 	}
 
+	@Override
 	public Change perform(IProgressMonitor monitor) throws CoreException {
 		ResourceMapping mapping= JavaElementResourceMapping.create(fOldCu);
 		final Change result= super.perform(monitor);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateTargetExecutionLog.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateTargetExecutionLog.java
index 30687c9..5a48103 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateTargetExecutionLog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateTargetExecutionLog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import java.util.Map;
  */
 public final class CreateTargetExecutionLog {
 
-	private Map fCreations= new LinkedHashMap(2);
+	private Map<Object, Object> fCreations= new LinkedHashMap<Object, Object>(2);
 
 	/**
 	 * Returns the element which got created for the given selection.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java
index 69f75dc..206f62a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,7 +76,7 @@ class DeleteChangeCreator {
 	 * @throws CoreException
 	 */
 	static Change createDeleteChange(TextChangeManager manager, IResource[] resources,
-			IJavaElement[] javaElements, String changeName, List/*<IResource>*/ packageDeletes) throws CoreException {
+			IJavaElement[] javaElements, String changeName, List<IResource> packageDeletes) throws CoreException {
 		/*
 		 * Problem: deleting a package and subpackages can result in
 		 * multiple package fragments in fJavaElements but only
@@ -101,12 +101,12 @@ class DeleteChangeCreator {
 			result.add(createDeleteChange(resources[i]));
 		}
 
-		Map grouped= ReorgUtils.groupByCompilationUnit(getElementsSmallerThanCu(javaElements));
+		Map<ICompilationUnit, List<IJavaElement>> grouped= ReorgUtils.groupByCompilationUnit(getElementsSmallerThanCu(javaElements));
 		if (grouped.size() != 0 ){
 			Assert.isNotNull(manager);
-			for (Iterator iter= grouped.keySet().iterator(); iter.hasNext();) {
-				ICompilationUnit cu= (ICompilationUnit) iter.next();
-				result.add(createDeleteChange(cu, (List)grouped.get(cu), manager));
+			for (Iterator<ICompilationUnit> iter= grouped.keySet().iterator(); iter.hasNext();) {
+				ICompilationUnit cu= iter.next();
+				result.add(createDeleteChange(cu, grouped.get(cu), manager));
 			}
 		}
 
@@ -122,10 +122,10 @@ class DeleteChangeCreator {
 	/*
 	 * List<IJavaElement> javaElements
 	 */
-	private static Change createDeleteChange(ICompilationUnit cu, List javaElements, TextChangeManager manager) throws CoreException {
+	private static Change createDeleteChange(ICompilationUnit cu, List<IJavaElement> javaElements, TextChangeManager manager) throws CoreException {
 		CompilationUnit cuNode= RefactoringASTParser.parseWithASTProvider(cu, false, null);
 		CompilationUnitRewrite rewriter= new CompilationUnitRewrite(cu, cuNode);
-		IJavaElement[] elements= (IJavaElement[]) javaElements.toArray(new IJavaElement[javaElements.size()]);
+		IJavaElement[] elements= javaElements.toArray(new IJavaElement[javaElements.size()]);
 		ASTNodeDeleteUtil.markAsDeleted(elements, rewriter, null);
 		return addTextEditFromRewrite(manager, cu, rewriter.getASTRewrite());
 	}
@@ -148,8 +148,8 @@ class DeleteChangeCreator {
 	}
 
 	//List<IJavaElement>
-	private static List getElementsSmallerThanCu(IJavaElement[] javaElements){
-		List result= new ArrayList();
+	private static List<IJavaElement> getElementsSmallerThanCu(IJavaElement[] javaElements){
+		List<IJavaElement> result= new ArrayList<IJavaElement>();
 		for (int i= 0; i < javaElements.length; i++) {
 			IJavaElement element= javaElements[i];
 			if (ReorgUtils.isInsideCompilationUnit(element))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java
index 5a2140c..c3215b4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,18 +46,18 @@ import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
  */
 public class DeleteModifications extends RefactoringModifications {
 
-	private List/*<IJavaElement>*/ fDelete;
+	private List<IJavaElement> fDelete;
 
 	/**
 	 * Contains the actual packages when executing
 	 * <code>handlePackageFragmentDelete</code>. This is part of the
 	 * algorithm to check if a parent folder can be deleted.
 	 */
-	private List/*<IPackageFragment>*/ fPackagesToDelete;
+	private List<IPackageFragment> fPackagesToDelete;
 
 	public DeleteModifications() {
-		fDelete= new ArrayList();
-		fPackagesToDelete= new ArrayList();
+		fDelete= new ArrayList<IJavaElement>();
+		fPackagesToDelete= new ArrayList<IPackageFragment>();
 	}
 
 	public void delete(IResource resource) {
@@ -101,7 +101,7 @@ public class DeleteModifications extends RefactoringModifications {
 				return;
 			case IJavaElement.PACKAGE_FRAGMENT:
 				fDelete.add(element);
-				fPackagesToDelete.add(element);
+				fPackagesToDelete.add((IPackageFragment) element);
 				return;
 			case IJavaElement.COMPILATION_UNIT:
 				fDelete.add(element);
@@ -120,28 +120,30 @@ public class DeleteModifications extends RefactoringModifications {
 	 * @return a List of IResources that are removed by package deletes
 	 * @throws CoreException
 	 */
-	public List/*<IResource>*/ postProcess() throws CoreException {
-		ArrayList resourcesCollector= new ArrayList();
-		for (Iterator iter= fPackagesToDelete.iterator(); iter.hasNext();) {
-			IPackageFragment pack= (IPackageFragment) iter.next();
+	public List<IResource> postProcess() throws CoreException {
+		ArrayList<IResource> resourcesCollector= new ArrayList<IResource>();
+		for (Iterator<IPackageFragment> iter= fPackagesToDelete.iterator(); iter.hasNext();) {
+			IPackageFragment pack= iter.next();
 			handlePackageFragmentDelete(pack, resourcesCollector);
 		}
 		return resourcesCollector;
 	}
 
+	@Override
 	public void buildDelta(IResourceChangeDescriptionFactory deltaFactory) {
 		getResourceModifications().buildDelta(deltaFactory);
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, RefactoringProcessor owner, String[] natures, SharableParticipants shared) {
-		List result= new ArrayList();
-		for (Iterator iter= fDelete.iterator(); iter.hasNext();) {
+		List<RefactoringParticipant> result= new ArrayList<RefactoringParticipant>();
+		for (Iterator<IJavaElement> iter= fDelete.iterator(); iter.hasNext();) {
 			result.addAll(Arrays.asList(ParticipantManager.loadDeleteParticipants(status,
 				owner, iter.next(),
 				new DeleteArguments(), natures, shared)));
 		}
 		result.addAll(Arrays.asList(getResourceModifications().getParticipants(status, owner, natures, shared)));
-		return (RefactoringParticipant[]) result.toArray(new RefactoringParticipant[result.size()]);
+		return result.toArray(new RefactoringParticipant[result.size()]);
 	}
 
 	/**
@@ -160,7 +162,7 @@ public class DeleteModifications extends RefactoringModifications {
 	 * @param resourcesCollector a collector for IResources to be deleted
 	 * @throws CoreException
 	 */
-	private void handlePackageFragmentDelete(IPackageFragment pack, ArrayList resourcesCollector) throws CoreException {
+	private void handlePackageFragmentDelete(IPackageFragment pack, ArrayList<IResource> resourcesCollector) throws CoreException {
 		final IContainer container= (IContainer)pack.getResource();
 		if (container == null)
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaCopyProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaCopyProcessor.java
index 4a45c7c..4e6cdd0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaCopyProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaCopyProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.SubProgressMonitor;
@@ -75,6 +76,7 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 		return fCopyPolicy.canElementBeDestination(destination);
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		Assert.isNotNull(fNewNameQueries, "Missing new name queries"); //$NON-NLS-1$
 		Assert.isNotNull(fReorgQueries, "Missing reorg queries"); //$NON-NLS-1$
@@ -82,6 +84,7 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 		return fCopyPolicy.checkFinalConditions(new SubProgressMonitor(pm, 1), context, fReorgQueries);
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
 		result.merge(RefactoringStatus.create(Resources.checkInSync(ReorgUtils.getNotNulls(fCopyPolicy.getResources()))));
@@ -90,6 +93,7 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		Assert.isNotNull(fNewNameQueries);
 		Assert.isTrue(fCopyPolicy.getJavaElementDestination() == null || fCopyPolicy.getResourceDestination() == null);
@@ -97,16 +101,19 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 		try {
 			final DynamicValidationStateChange result= new DynamicValidationStateChange(getChangeName()) {
 
+				@Override
 				public Object getAdapter(Class adapter) {
 					if (ReorgExecutionLog.class.equals(adapter))
 						return fExecutionLog;
 					return super.getAdapter(adapter);
 				}
 
+				@Override
 				public ChangeDescriptor getDescriptor() {
 					return fCopyPolicy.getDescriptor();
 				}
 
+				@Override
 				public Change perform(IProgressMonitor pm2) throws CoreException {
 					try {
 						super.perform(pm2);
@@ -133,10 +140,10 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 	private String[] getAffectedProjectNatures() throws CoreException {
 		String[] jNatures= JavaProcessors.computeAffectedNaturs(fCopyPolicy.getJavaElements());
 		String[] rNatures= ResourceProcessors.computeAffectedNatures(fCopyPolicy.getResources());
-		Set result= new HashSet();
+		Set<String> result= new HashSet<String>();
 		result.addAll(Arrays.asList(jNatures));
 		result.addAll(Arrays.asList(rNatures));
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	private String getChangeName() {
@@ -147,15 +154,17 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 		return new ParentChecker(fCopyPolicy.getResources(), fCopyPolicy.getJavaElements()).getCommonParent();
 	}
 
+	@Override
 	public Object[] getElements() {
 		IJavaElement[] jElements= fCopyPolicy.getJavaElements();
 		IResource[] resources= fCopyPolicy.getResources();
-		List result= new ArrayList(jElements.length + resources.length);
+		List<IAdaptable> result= new ArrayList<IAdaptable>(jElements.length + resources.length);
 		result.addAll(Arrays.asList(jElements));
 		result.addAll(Arrays.asList(resources));
 		return result.toArray();
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.COPY_PROCESSOR;
 	}
@@ -164,6 +173,7 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 		return fCopyPolicy.getJavaElements();
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.JavaCopyProcessor_processorName;
 	}
@@ -187,10 +197,12 @@ public final class JavaCopyProcessor extends CopyProcessor implements IReorgDest
 		return status;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return fCopyPolicy.canEnable();
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants sharedParticipants) throws CoreException {
 		RefactoringParticipant[] result= fCopyPolicy.loadParticipants(status, this, getAffectedProjectNatures(), sharedParticipants);
 		fExecutionLog= fCopyPolicy.getReorgExecutionLog();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java
index 5c99dc5..6ef8423 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 
@@ -119,10 +120,12 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		status.merge(initStatus);
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.DELETE_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		if (fElements.length == 0)
 			return false;
@@ -153,14 +156,17 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.DeleteRefactoring_7;
 	}
 
+	@Override
 	public Object[] getElements() {
 		return fElements;
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants shared) throws CoreException {
 		return fDeleteModifications.loadParticipants(status, this, getAffectedProjectNatures(), shared);
 	}
@@ -168,10 +174,10 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	private String[] getAffectedProjectNatures() throws CoreException {
 		String[] jNatures= JavaProcessors.computeAffectedNaturs(fJavaElements);
 		String[] rNatures= ResourceProcessors.computeAffectedNatures(fResources);
-		Set result= new HashSet();
+		Set<String> result= new HashSet<String>();
 		result.addAll(Arrays.asList(jNatures));
 		result.addAll(Arrays.asList(rNatures));
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/*
@@ -227,6 +233,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkActivation(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		Assert.isNotNull(fDeleteQueries);//must be set before checking activation
 		RefactoringStatus result= new RefactoringStatus();
@@ -246,6 +253,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkInput(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		pm.beginTask(RefactoringCoreMessages.DeleteRefactoring_1, 1);
 		try{
@@ -259,7 +267,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 			fDeleteModifications= new DeleteModifications();
 			fDeleteModifications.delete(fResources);
 			fDeleteModifications.delete(fJavaElements);
-			List/*<IResource>*/ packageDeletes= fDeleteModifications.postProcess();
+			List<IResource> packageDeletes= fDeleteModifications.postProcess();
 
 			TextChangeManager manager= new TextChangeManager();
 			fDeleteChange= DeleteChangeCreator.createDeleteChange(manager, fResources, fJavaElements, getProcessorName(), packageDeletes);
@@ -370,7 +378,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	 */
 	private void addSubPackages() throws JavaModelException {
 
-		final Set javaElements= new HashSet();
+		final Set<IJavaElement> javaElements= new HashSet<IJavaElement>();
 		for (int i= 0; i < fJavaElements.length; i++) {
 			if (fJavaElements[i] instanceof IPackageFragment) {
 				javaElements.addAll(Arrays.asList(JavaElementUtil.getPackageAndSubpackages((IPackageFragment) fJavaElements[i])));
@@ -379,7 +387,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 			}
 		}
 
-		fJavaElements= (IJavaElement[]) javaElements.toArray(new IJavaElement[javaElements.size()]);
+		fJavaElements= javaElements.toArray(new IJavaElement[javaElements.size()]);
 	}
 
 	/**
@@ -389,22 +397,20 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	 */
 	private void addDeletableParentPackagesOnPackageDeletion() throws CoreException {
 
-		final List/* <IPackageFragment */initialPackagesToDelete= ReorgUtils.getElementsOfType(fJavaElements, IJavaElement.PACKAGE_FRAGMENT);
+		final List<IPackageFragment> initialPackagesToDelete= (List<IPackageFragment>) ReorgUtils.getElementsOfType(fJavaElements, IJavaElement.PACKAGE_FRAGMENT);
 
 		if (initialPackagesToDelete.size() == 0)
 			return;
 
 		// Move from inner to outer packages
-		Collections.sort(initialPackagesToDelete, new Comparator() {
-			public int compare(Object arg0, Object arg1) {
-				IPackageFragment one= (IPackageFragment) arg0;
-				IPackageFragment two= (IPackageFragment) arg1;
+		Collections.sort(initialPackagesToDelete, new Comparator<IPackageFragment>() {
+			public int compare(IPackageFragment one, IPackageFragment two) {
 				return two.getElementName().compareTo(one.getElementName());
 			}
 		});
 
 		// Get resources and java elements which will be deleted as well
-		final Set/* <IResource> */deletedChildren= new HashSet();
+		final Set<IResource> deletedChildren= new HashSet<IResource>();
 		deletedChildren.addAll(Arrays.asList(fResources));
 		for (int i= 0; i < fJavaElements.length; i++) {
 			if (!ReorgUtils.isInsideCompilationUnit(fJavaElements[i]))
@@ -412,10 +418,10 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		}
 
 		// new package list in the right sequence
-		final List/* <IPackageFragment */allFragmentsToDelete= new ArrayList();
+		final List<IPackageFragment>allFragmentsToDelete= new ArrayList<IPackageFragment>();
 
-		for (Iterator outerIter= initialPackagesToDelete.iterator(); outerIter.hasNext();) {
-			final IPackageFragment currentPackageFragment= (IPackageFragment) outerIter.next();
+		for (Iterator<IPackageFragment> outerIter= initialPackagesToDelete.iterator(); outerIter.hasNext();) {
+			final IPackageFragment currentPackageFragment= outerIter.next();
 
 			// The package will at least be cleared
 			allFragmentsToDelete.add(currentPackageFragment);
@@ -425,7 +431,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 				final IPackageFragment parent= JavaElementUtil.getParentSubpackage(currentPackageFragment);
 				if (parent != null && !initialPackagesToDelete.contains(parent)) {
 
-					final List/* <IPackageFragment> */emptyParents= new ArrayList();
+					final List<IPackageFragment>emptyParents= new ArrayList<IPackageFragment>();
 					addDeletableParentPackages(parent, initialPackagesToDelete, deletedChildren, emptyParents);
 
 					// Add parents in the right sequence (inner to outer)
@@ -435,7 +441,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		}
 
 		// Remove resources in deleted packages; and the packages as well
-		final List/* <IJavaElement> */javaElements= new ArrayList();
+		final List<IJavaElement>javaElements= new ArrayList<IJavaElement>();
 		for (int i= 0; i < fJavaElements.length; i++) {
 			if (!(fJavaElements[i] instanceof IPackageFragment)) {
 				// remove children of deleted packages
@@ -448,7 +454,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		javaElements.addAll(allFragmentsToDelete);
 
 		// Remove resources in deleted folders
-		final List/* <IResource> */resources= new ArrayList();
+		final List<IResource>resources= new ArrayList<IResource>();
 		for (int i= 0; i < fResources.length; i++) {
 			IResource resource= fResources[i];
 			IContainer parent= resource.getParent();
@@ -456,8 +462,8 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 				resources.add(resource);
 		}
 
-		fJavaElements= (IJavaElement[]) javaElements.toArray(new IJavaElement[javaElements.size()]);
-		fResources= (IResource[])resources.toArray(new IResource[resources.size()]);
+		fJavaElements= javaElements.toArray(new IJavaElement[javaElements.size()]);
+		fResources= resources.toArray(new IResource[resources.size()]);
 	}
 
 	/**
@@ -467,7 +473,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	 * (if it has non-selected subpackages, it may only be cleared).
 	 * @throws JavaModelException should not happen
 	 */
-	private boolean canRemoveCompletely(IPackageFragment pack, List packagesToDelete) throws JavaModelException {
+	private boolean canRemoveCompletely(IPackageFragment pack, List<IPackageFragment> packagesToDelete) throws JavaModelException {
 		final IPackageFragment[] subPackages= JavaElementUtil.getPackageAndSubpackages(pack);
 		for (int i= 0; i < subPackages.length; i++) {
 			if (!subPackages[i].equals(pack) && !packagesToDelete.contains(subPackages[i]))
@@ -486,7 +492,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	 * @param deletableParentPackages result ro add deletable parent packages
 	 * @throws CoreException should not happen
 	 */
-	private void addDeletableParentPackages(IPackageFragment frag, List initialPackagesToDelete, Set resourcesToDelete, List deletableParentPackages)
+	private void addDeletableParentPackages(IPackageFragment frag, List<IPackageFragment> initialPackagesToDelete, Set<IResource> resourcesToDelete, List<IPackageFragment> deletableParentPackages)
 			throws CoreException {
 
 		if (frag.getResource().isLinked()) {
@@ -520,7 +526,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	}
 
 	private void removeUnconfirmedReferencedArchiveFiles(IConfirmQuery query) throws JavaModelException, OperationCanceledException {
-		List filesToSkip= new ArrayList(0);
+		List<IResource> filesToSkip= new ArrayList<IResource>(0);
 		for (int i= 0; i < fResources.length; i++) {
 			IResource resource= fResources[i];
 			if (! (resource instanceof IFile))
@@ -532,29 +538,29 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 			IPackageFragmentRoot root= project.findPackageFragmentRoot(resource.getFullPath());
 			if (root == null)
 				continue;
-			List referencingProjects= Arrays.asList(JavaElementUtil.getReferencingProjects(root));
+			List<IJavaProject> referencingProjects= Arrays.asList(JavaElementUtil.getReferencingProjects(root));
 			if (skipDeletingReferencedRoot(query, root, referencingProjects))
 				filesToSkip.add(resource);
 		}
-		removeFromSetToDelete((IFile[]) filesToSkip.toArray(new IFile[filesToSkip.size()]));
+		removeFromSetToDelete(filesToSkip.toArray(new IFile[filesToSkip.size()]));
 	}
 
 	private void removeUnconfirmedReferencedPackageFragmentRoots(IConfirmQuery query) throws JavaModelException, OperationCanceledException {
-		List rootsToSkip= new ArrayList(0);
+		List<IPackageFragmentRoot> rootsToSkip= new ArrayList<IPackageFragmentRoot>(0);
 		for (int i= 0; i < fJavaElements.length; i++) {
 			IJavaElement element= fJavaElements[i];
 			if (! (element instanceof IPackageFragmentRoot))
 				continue;
 			IPackageFragmentRoot root= (IPackageFragmentRoot)element;
-			ArrayList referencingProjects= new ArrayList(Arrays.asList(JavaElementUtil.getReferencingProjects(root)));
+			ArrayList<IJavaProject> referencingProjects= new ArrayList<IJavaProject>(Arrays.asList(JavaElementUtil.getReferencingProjects(root)));
 			referencingProjects.remove(root.getJavaProject());
 			if (skipDeletingReferencedRoot(query, root, referencingProjects))
 				rootsToSkip.add(root);
 		}
-		removeFromSetToDelete((IJavaElement[]) rootsToSkip.toArray(new IJavaElement[rootsToSkip.size()]));
+		removeFromSetToDelete(rootsToSkip.toArray(new IJavaElement[rootsToSkip.size()]));
 	}
 
-	private static boolean skipDeletingReferencedRoot(IConfirmQuery query, IPackageFragmentRoot root, List referencingProjects) throws OperationCanceledException {
+	private static boolean skipDeletingReferencedRoot(IConfirmQuery query, IPackageFragmentRoot root, List<IJavaProject> referencingProjects) throws OperationCanceledException {
 		if (referencingProjects.isEmpty() || root == null || ! root.exists() ||! root.isArchive())
 			return false;
 		String label= JavaElementLabels.getElementLabel(root, JavaElementLabels.ALL_DEFAULT);
@@ -566,7 +572,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	private void removeUnconfirmedFoldersThatContainSourceFolders() throws CoreException {
 		String queryTitle= RefactoringCoreMessages.DeleteRefactoring_4;
 		IConfirmQuery query= fDeleteQueries.createYesYesToAllNoNoToAllQuery(queryTitle, true, IReorgQueries.CONFIRM_DELETE_FOLDERS_CONTAINING_SOURCE_FOLDERS);
-		List foldersToSkip= new ArrayList(0);
+		List<IFolder> foldersToSkip= new ArrayList<IFolder>(0);
 		for (int i= 0; i < fResources.length; i++) {
 			IResource resource= fResources[i];
 			if (resource instanceof IFolder){
@@ -578,7 +584,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 				}
 			}
 		}
-		removeFromSetToDelete((IResource[]) foldersToSkip.toArray(new IResource[foldersToSkip.size()]));
+		removeFromSetToDelete(foldersToSkip.toArray(new IResource[foldersToSkip.size()]));
 	}
 
 	private static boolean containsSourceFolder(IFolder folder) throws CoreException {
@@ -610,10 +616,11 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		fJavaElements= parentUtil.getJavaElements();
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.JavaDeleteProcessor_creating_change, 1);
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			final String description= fElements.length == 1 ? RefactoringCoreMessages.JavaDeleteProcessor_description_singular : RefactoringCoreMessages.JavaDeleteProcessor_description_plural;
 			final IProject resource= getSingleProject();
 			final String project= resource != null ? resource.getName() : null;
@@ -676,23 +683,23 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		if (fields.length == 0)
 			return;
 		//IField -> IMethod[]
-		Map getterSetterMapping= createGetterSetterMapping(fields);
+		Map<IField, IMethod[]> getterSetterMapping= createGetterSetterMapping(fields);
 		if (getterSetterMapping.isEmpty())
 			return;
 		removeAlreadySelectedMethods(getterSetterMapping);
 		if (getterSetterMapping.isEmpty())
 			return;
 		fAccessorsDeleted= true;
-		List gettersSettersToAdd= getGettersSettersToDelete(getterSetterMapping);
-		addToSetToDelete((IMethod[]) gettersSettersToAdd.toArray(new IMethod[gettersSettersToAdd.size()]));
+		List<IMethod> gettersSettersToAdd= getGettersSettersToDelete(getterSetterMapping);
+		addToSetToDelete(gettersSettersToAdd.toArray(new IMethod[gettersSettersToAdd.size()]));
 	}
 
-	private List getGettersSettersToDelete(Map getterSetterMapping) {
-		List gettersSettersToAdd= new ArrayList(getterSetterMapping.size());
+	private List<IMethod> getGettersSettersToDelete(Map<IField, IMethod[]> getterSetterMapping) {
+		List<IMethod> gettersSettersToAdd= new ArrayList<IMethod>(getterSetterMapping.size());
 		String queryTitle= RefactoringCoreMessages.DeleteRefactoring_8;
 		IConfirmQuery getterSetterQuery= fDeleteQueries.createYesYesToAllNoNoToAllQuery(queryTitle, true, IReorgQueries.CONFIRM_DELETE_GETTER_SETTER);
-		for (Iterator iter= getterSetterMapping.keySet().iterator(); iter.hasNext();) {
-			IField field= (IField) iter.next();
+		for (Iterator<IField> iter= getterSetterMapping.keySet().iterator(); iter.hasNext();) {
+			IField field= iter.next();
 			Assert.isTrue(hasGetter(getterSetterMapping, field) || hasSetter(getterSetterMapping, field));
 			String deleteGetterSetter= Messages.format(RefactoringCoreMessages.DeleteRefactoring_9, JavaElementUtil.createFieldSignature(field));
 			if (getterSetterQuery.confirm(deleteGetterSetter)){
@@ -706,10 +713,10 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	}
 
 	//note: modifies the mapping
-	private void removeAlreadySelectedMethods(Map getterSetterMapping) {
-		List elementsToDelete= Arrays.asList(fJavaElements);
-		for (Iterator iter= getterSetterMapping.keySet().iterator(); iter.hasNext();) {
-			IField field= (IField) iter.next();
+	private void removeAlreadySelectedMethods(Map<IField, IMethod[]> getterSetterMapping) {
+		List<IJavaElement> elementsToDelete= Arrays.asList(fJavaElements);
+		for (Iterator<IField> iter= getterSetterMapping.keySet().iterator(); iter.hasNext();) {
+			IField field= iter.next();
 			//remove getter
 			IMethod getter= getGetter(getterSetterMapping, field);
 			if (getter != null && elementsToDelete.contains(getter))
@@ -729,8 +736,8 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	/*
 	 * IField -> IMethod[] (array of 2 - [getter, setter], one of which can be null)
 	 */
-	private static Map createGetterSetterMapping(IField[] fields) throws JavaModelException {
-		Map result= new HashMap();
+	private static Map<IField, IMethod[]> createGetterSetterMapping(IField[] fields) throws JavaModelException {
+		Map<IField, IMethod[]> result= new HashMap<IField, IMethod[]>();
 		for (int i= 0; i < fields.length; i++) {
 			IField field= fields[i];
 			IMethod[] getterSetter= getGetterSetter(field);
@@ -739,33 +746,33 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		}
 		return result;
 	}
-	private static boolean hasSetter(Map getterSetterMapping, IField field){
+	private static boolean hasSetter(Map<IField, IMethod[]> getterSetterMapping, IField field){
 		return getterSetterMapping.containsKey(field) &&
 			   getSetter(getterSetterMapping, field) != null;
 	}
-	private static boolean hasGetter(Map getterSetterMapping, IField field){
+	private static boolean hasGetter(Map<IField, IMethod[]> getterSetterMapping, IField field){
 		return getterSetterMapping.containsKey(field) &&
 			   getGetter(getterSetterMapping, field) != null;
 	}
-	private static void removeGetterFromMapping(Map getterSetterMapping, IField field){
-		((IMethod[])getterSetterMapping.get(field))[0]= null;
+	private static void removeGetterFromMapping(Map<IField, IMethod[]> getterSetterMapping, IField field){
+		getterSetterMapping.get(field)[0]= null;
 	}
-	private static void removeSetterFromMapping(Map getterSetterMapping, IField field){
-		((IMethod[])getterSetterMapping.get(field))[1]= null;
+	private static void removeSetterFromMapping(Map<IField, IMethod[]> getterSetterMapping, IField field){
+		getterSetterMapping.get(field)[1]= null;
 	}
-	private static IMethod getGetter(Map getterSetterMapping, IField field){
-		return ((IMethod[])getterSetterMapping.get(field))[0];
+	private static IMethod getGetter(Map<IField, IMethod[]> getterSetterMapping, IField field){
+		return getterSetterMapping.get(field)[0];
 	}
-	private static IMethod getSetter(Map getterSetterMapping, IField field){
-		return ((IMethod[])getterSetterMapping.get(field))[1];
+	private static IMethod getSetter(Map<IField, IMethod[]> getterSetterMapping, IField field){
+		return getterSetterMapping.get(field)[1];
 	}
 	private static IField[] getFields(IJavaElement[] elements){
-		List fields= new ArrayList(3);
+		List<IJavaElement> fields= new ArrayList<IJavaElement>(3);
 		for (int i= 0; i < elements.length; i++) {
 			if (elements[i] instanceof IField)
 				fields.add(elements[i]);
 		}
-		return (IField[]) fields.toArray(new IField[fields.size()]);
+		return fields.toArray(new IField[fields.size()]);
 	}
 
 	/*
@@ -788,12 +795,12 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 
 	//----------- empty CUs related method
 	private void addEmptyCusToDelete() throws JavaModelException {
-		Set cusToEmpty= getCusToEmpty();
-		addToSetToDelete((ICompilationUnit[]) cusToEmpty.toArray(new ICompilationUnit[cusToEmpty.size()]));
+		Set<ICompilationUnit> cusToEmpty= getCusToEmpty();
+		addToSetToDelete(cusToEmpty.toArray(new ICompilationUnit[cusToEmpty.size()]));
 	}
 
-	private Set getCusToEmpty() throws JavaModelException {
-		Set result= new HashSet();
+	private Set<ICompilationUnit> getCusToEmpty() throws JavaModelException {
+		Set<ICompilationUnit> result= new HashSet<ICompilationUnit>();
 		for (int i= 0; i < fJavaElements.length; i++) {
 			IJavaElement element= fJavaElements[i];
 			ICompilationUnit cu= ReorgUtils.getCompilationUnit(element);
@@ -804,7 +811,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 	}
 
 	private boolean willHaveAllTopLevelTypesDeleted(ICompilationUnit cu) throws JavaModelException {
-		Set elementSet= new HashSet(Arrays.asList(fJavaElements));
+		Set<IJavaElement> elementSet= new HashSet<IJavaElement>(Arrays.asList(fJavaElements));
 		IType[] topLevelTypes= cu.getTypes();
 		for (int i= 0; i < topLevelTypes.length; i++) {
 			if (! elementSet.contains(topLevelTypes[i]))
@@ -847,7 +854,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_ELEMENTS));
 		String handle= null;
-		List elements= new ArrayList();
+		List<IAdaptable> elements= new ArrayList<IAdaptable>();
 		for (int index= 0; index < resourceCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1);
 			handle= extended.getAttribute(attribute);
@@ -860,8 +867,8 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fResources= (IResource[]) elements.toArray(new IResource[elements.size()]);
-		elements= new ArrayList();
+		fResources= elements.toArray(new IResource[elements.size()]);
+		elements= new ArrayList<IAdaptable>();
 		for (int index= 0; index < elementCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (resourceCount + index + 1);
 			handle= extended.getAttribute(attribute);
@@ -874,7 +881,7 @@ public final class JavaDeleteProcessor extends DeleteProcessor {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fJavaElements= (IJavaElement[]) elements.toArray(new IJavaElement[elements.size()]);
+		fJavaElements= elements.toArray(new IJavaElement[elements.size()]);
 		fElements= new Object[fResources.length + fJavaElements.length];
 		System.arraycopy(fResources, 0, fElements, 0, fResources.length);
 		System.arraycopy(fJavaElements, 0, fElements, fResources.length, fJavaElements.length);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java
index 8084170..ee5677c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public class JavaElementTransfer extends ByteArrayTransfer {
 	/* (non-Javadoc)
 	 * Method declared on Transfer.
 	 */
+	@Override
 	protected int[] getTypeIds() {
 		return new int[] { TYPEID };
 	}
@@ -58,6 +59,7 @@ public class JavaElementTransfer extends ByteArrayTransfer {
 	 *
 	 * @return the list of type names
 	 */
+	@Override
 	protected String[] getTypeNames() {
 		return new String[] { TYPE_NAME };
 	}
@@ -65,6 +67,7 @@ public class JavaElementTransfer extends ByteArrayTransfer {
 	/* (non-Javadoc)
 	 * @see org.eclipse.swt.dnd.Transfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
 	 */
+	@Override
 	protected void javaToNative(Object data, TransferData transferData) {
 		if (!(data instanceof IJavaElement[]))
 			return;
@@ -102,6 +105,7 @@ public class JavaElementTransfer extends ByteArrayTransfer {
 	/* (non-Javadoc)
 	 * @see org.eclipse.swt.dnd.Transfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
 	 */
+	@Override
 	protected Object nativeToJava(TransferData transferData) {
 		/*
 		 * The element serialization format is:
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java
index 292e8df..27f818d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 
@@ -103,6 +104,7 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		return canUpdateJavaReferences();
 	}
 	
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		try {
 			Assert.isNotNull(fReorgQueries);
@@ -114,6 +116,7 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		}
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask("", 1); //$NON-NLS-1$
 		try {
@@ -127,16 +130,19 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		}
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		Assert.isTrue(fMovePolicy.getJavaElementDestination() == null || fMovePolicy.getResourceDestination() == null);
 		Assert.isTrue(fMovePolicy.getJavaElementDestination() != null || fMovePolicy.getResourceDestination() != null);
 		try {
 			final DynamicValidationStateChange result= new DynamicValidationStateChange(RefactoringCoreMessages.JavaMoveProcessor_change_name) {
 
+				@Override
 				public ChangeDescriptor getDescriptor() {
 					return fMovePolicy.getDescriptor();
 				}
 
+				@Override
 				public Change perform(IProgressMonitor pm2) throws CoreException {
 					Change change= super.perform(pm2);
 					Change[] changes= getChildren();
@@ -176,10 +182,10 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 	private String[] getAffectedProjectNatures() throws CoreException {
 		String[] jNatures= JavaProcessors.computeAffectedNaturs(fMovePolicy.getJavaElements());
 		String[] rNatures= ResourceProcessors.computeAffectedNatures(fMovePolicy.getResources());
-		Set result= new HashSet();
+		Set<String> result= new HashSet<String>();
 		result.addAll(Arrays.asList(jNatures));
 		result.addAll(Arrays.asList(rNatures));
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	public Object getCommonParentForInputElements() {
@@ -197,8 +203,9 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		return fMovePolicy.getResourceDestination();
 	}
 
+	@Override
 	public Object[] getElements() {
-		List result= new ArrayList();
+		List<IAdaptable> result= new ArrayList<IAdaptable>();
 		result.addAll(Arrays.asList(fMovePolicy.getJavaElements()));
 		result.addAll(Arrays.asList(fMovePolicy.getResources()));
 		return result.toArray();
@@ -208,6 +215,7 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		return fMovePolicy.getFilePatterns();
 	}
 
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.MOVE_PROCESSOR;
 	}
@@ -216,6 +224,7 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		return fMovePolicy.getJavaElements();
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.MoveRefactoring_0;
 	}
@@ -255,6 +264,7 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		return status;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return fMovePolicy.canEnable();
 	}
@@ -263,10 +273,12 @@ public final class JavaMoveProcessor extends MoveProcessor implements IQualified
 		return fMovePolicy.isTextualMove();
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants shared) throws CoreException {
 		return fMovePolicy.loadParticipants(status, this, getAffectedProjectNatures(), shared);
 	}
 
+	@Override
 	public Change postCreateChange(Change[] participantChanges, IProgressMonitor pm) throws CoreException {
 		return fMovePolicy.postCreateChange(participantChanges, pm);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetChange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetChange.java
index 2981df9..3cdc69a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetChange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetChange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ public final class LoggedCreateTargetChange extends ResourceChange {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected IResource getModifiedResource() {
 		return null;
 	}
@@ -64,6 +65,7 @@ public final class LoggedCreateTargetChange extends ResourceChange {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.LoggedCreateTargetChange_change_name;
 	}
@@ -71,6 +73,7 @@ public final class LoggedCreateTargetChange extends ResourceChange {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus isValid(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		if (fSelection instanceof IJavaElement) {
 			final IJavaElement element= (IJavaElement) fSelection;
@@ -87,6 +90,7 @@ public final class LoggedCreateTargetChange extends ResourceChange {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Change perform(IProgressMonitor monitor) throws CoreException {
 		fQueries.createNewPackageQuery().getCreatedTarget(fSelection);
 		return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetQueries.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetQueries.java
index 58b13b1..60b94e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetQueries.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedCreateTargetQueries.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,9 +55,9 @@ public final class LoggedCreateTargetQueries implements ICreateTargetQueries {
 			final IFolder folder= project.getProject().getFolder(root.getElementName());
 			if (!folder.exists())
 				CoreUtility.createFolder(folder, true, true, new NullProgressMonitor());
-			final List list= Arrays.asList(project.getRawClasspath());
+			final List<IClasspathEntry> list= Arrays.asList(project.getRawClasspath());
 			list.add(JavaCore.newSourceEntry(folder.getFullPath()));
-			project.setRawClasspath((IClasspathEntry[]) list.toArray(new IClasspathEntry[list.size()]), new NullProgressMonitor());
+			project.setRawClasspath(list.toArray(new IClasspathEntry[list.size()]), new NullProgressMonitor());
 		}
 
 		/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java
index 88bf2ff..30eed7e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,7 +74,7 @@ public class MoveCuUpdateCreator {
 	private ICompilationUnit[] fCus;
 	private IPackageFragment fDestination;
 
-	private Map fImportRewrites; //ICompilationUnit -> ImportEdit
+	private Map<ICompilationUnit, ImportRewrite> fImportRewrites; //ICompilationUnit -> ImportEdit
 
 	public MoveCuUpdateCreator(ICompilationUnit cu, IPackageFragment pack){
 		this(new ICompilationUnit[]{cu}, pack);
@@ -85,7 +85,7 @@ public class MoveCuUpdateCreator {
 		Assert.isNotNull(pack);
 		fCus= cus;
 		fDestination= pack;
-		fImportRewrites= new HashMap();
+		fImportRewrites= new HashMap<ICompilationUnit, ImportRewrite>();
 		fNewPackage= fDestination.isDefaultPackage() ? "" : fDestination.getElementName() + '.'; //$NON-NLS-1$
 	}
 
@@ -107,9 +107,9 @@ public class MoveCuUpdateCreator {
 	}
 
 	private void addImportRewriteUpdates(TextChangeManager changeManager) throws CoreException {
-		for (Iterator iter= fImportRewrites.keySet().iterator(); iter.hasNext();) {
-			ICompilationUnit cu= (ICompilationUnit) iter.next();
-			ImportRewrite importRewrite= (ImportRewrite) fImportRewrites.get(cu);
+		for (Iterator<ICompilationUnit> iter= fImportRewrites.keySet().iterator(); iter.hasNext();) {
+			ICompilationUnit cu= iter.next();
+			ImportRewrite importRewrite= fImportRewrites.get(cu);
 			if (importRewrite != null && importRewrite.hasRecordedChanges()) {
 				TextChangeCompatibility.addTextEdit(changeManager.get(cu), RefactoringCoreMessages.MoveCuUpdateCreator_update_imports, importRewrite.rewriteImports(null));
 			}
@@ -145,7 +145,7 @@ public class MoveCuUpdateCreator {
 	}
 
 	private void addReferenceUpdates(TextChangeManager changeManager, ICompilationUnit movedUnit, IProgressMonitor pm, RefactoringStatus status) throws JavaModelException, CoreException {
-		List cuList= Arrays.asList(fCus);
+		List<ICompilationUnit> cuList= Arrays.asList(fCus);
 		SearchResultGroup[] references= getReferences(movedUnit, pm, status);
 		for (int i= 0; i < references.length; i++) {
 			SearchResultGroup searchResultGroup= references[i];
@@ -228,18 +228,18 @@ public class MoveCuUpdateCreator {
 	}
 
 	private IType[] getDestinationPackageTypes() throws JavaModelException {
-		List types= new ArrayList();
+		List<IType> types= new ArrayList<IType>();
 		if (fDestination.exists()) {
 			ICompilationUnit[] cus= fDestination.getCompilationUnits();
 			for (int i= 0; i < cus.length; i++) {
 				types.addAll(Arrays.asList(cus[i].getAllTypes()));
 			}
 		}
-		return (IType[]) types.toArray(new IType[types.size()]);
+		return types.toArray(new IType[types.size()]);
 	}
 
 	private void addImportToSourcePackageTypes(ICompilationUnit movedUnit, IProgressMonitor pm) throws CoreException{
-		List cuList= Arrays.asList(fCus);
+		List<ICompilationUnit> cuList= Arrays.asList(fCus);
 		IType[] allCuTypes= movedUnit.getAllTypes();
 		IType[] referencedTypes= ReferenceFinderUtil.getTypesReferencedIn(allCuTypes, pm);
 		ImportRewrite importEdit= getImportRewrite(movedUnit);
@@ -259,13 +259,13 @@ public class MoveCuUpdateCreator {
 
 	private ImportRewrite getImportRewrite(ICompilationUnit cu) throws CoreException{
 		if (fImportRewrites.containsKey(cu))
-			return (ImportRewrite)fImportRewrites.get(cu);
+			return fImportRewrites.get(cu);
 		ImportRewrite importEdit= StubUtility.createImportRewrite(cu, true);
 		fImportRewrites.put(cu, importEdit);
 		return importEdit;
 	}
 
-	private boolean simpleReferencesNeedNewImport(ICompilationUnit movedUnit, ICompilationUnit referencingCu, List cuList) {
+	private boolean simpleReferencesNeedNewImport(ICompilationUnit movedUnit, ICompilationUnit referencingCu, List<ICompilationUnit> cuList) {
 		if (referencingCu.equals(movedUnit))
 			return false;
 		if (cuList.contains(referencingCu))
@@ -328,6 +328,7 @@ public class MoveCuUpdateCreator {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.refactoring.CollectingSearchRequestor#acceptSearchMatch(SearchMatch)
 		 */
+		@Override
 		public void acceptSearchMatch(SearchMatch match) throws CoreException {
 			if (filterMatch(match))
 				return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java
index aac4926..67e3d56 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,14 +45,14 @@ import org.eclipse.jdt.internal.corext.refactoring.participants.ResourceModifica
 
 public class MoveModifications extends RefactoringModifications {
 
-	private List fMoves;
-	private List fMoveArguments;
-	private List fParticipantDescriptorFilter;
+	private List<Object> fMoves;
+	private List<RefactoringArguments> fMoveArguments;
+	private List<IParticipantDescriptorFilter> fParticipantDescriptorFilter;
 
 	public MoveModifications() {
-		fMoves= new ArrayList();
-		fMoveArguments= new ArrayList();
-		fParticipantDescriptorFilter= new ArrayList();
+		fMoves= new ArrayList<Object>();
+		fMoveArguments= new ArrayList<RefactoringArguments>();
+		fParticipantDescriptorFilter= new ArrayList<IParticipantDescriptorFilter>();
 	}
 
 	public void move(IResource resource, MoveArguments args) {
@@ -97,14 +97,14 @@ public class MoveModifications extends RefactoringModifications {
 			createIncludingParents(resourceDestination);
 			MoveArguments arguments= new MoveArguments(resourceDestination, args.getUpdateReferences());
 			IResource[] resourcesToMove= collectResourcesOfInterest(pack);
-			Set allMembers= new HashSet(Arrays.asList(resourceSource.members()));
+			Set<IResource> allMembers= new HashSet<IResource>(Arrays.asList(resourceSource.members()));
 			for (int i= 0; i < resourcesToMove.length; i++) {
 				IResource toMove= resourcesToMove[i];
 				getResourceModifications().addMove(toMove, arguments);
 				allMembers.remove(toMove);
 			}
-			for (Iterator iter= allMembers.iterator(); iter.hasNext();) {
-				IResource element= (IResource) iter.next();
+			for (Iterator<IResource> iter= allMembers.iterator(); iter.hasNext();) {
+				IResource element= iter.next();
 				if (element instanceof IFile) {
 					getResourceModifications().addDelete(element);
 					iter.remove();
@@ -134,6 +134,7 @@ public class MoveModifications extends RefactoringModifications {
 		}
 	}
 
+	@Override
 	public void buildDelta(IResourceChangeDescriptionFactory builder) {
 		for (int i= 0; i < fMoves.size(); i++) {
 			Object element= fMoves.get(i);
@@ -144,8 +145,9 @@ public class MoveModifications extends RefactoringModifications {
 		getResourceModifications().buildDelta(builder);
 	}
 
+	@Override
 	public void buildValidateEdits(ValidateEditChecker checker) {
-		for (Iterator iter= fMoves.iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter= fMoves.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof ICompilationUnit) {
 				ICompilationUnit unit= (ICompilationUnit)element;
@@ -157,17 +159,18 @@ public class MoveModifications extends RefactoringModifications {
 		}
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, RefactoringProcessor owner, String[] natures, SharableParticipants shared) {
-		List result= new ArrayList();
+		List<RefactoringParticipant> result= new ArrayList<RefactoringParticipant>();
 		for (int i= 0; i < fMoves.size(); i++) {
 			result.addAll(Arrays.asList(ParticipantManager.loadMoveParticipants(status,
 				owner, fMoves.get(i),
 				(MoveArguments) fMoveArguments.get(i),
-				(IParticipantDescriptorFilter) fParticipantDescriptorFilter.get(i),
+				fParticipantDescriptorFilter.get(i),
 				natures, shared)));
 		}
 		result.addAll(Arrays.asList(getResourceModifications().getParticipants(status, owner, natures, shared)));
-		return (RefactoringParticipant[]) result.toArray(new RefactoringParticipant[result.size()]);
+		return result.toArray(new RefactoringParticipant[result.size()]);
 	}
 
 	private void add(Object element, RefactoringArguments args, IParticipantDescriptorFilter filter) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java
index 8af0f13..a7d1dbe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ class OverwriteHelper {
 	}
 
 	private void confirmPackageFragmentRootOverwritting(IConfirmQuery skipQuery, IConfirmQuery overwriteQuery) {
-		List toNotOverwrite= new ArrayList(1);
+		List<IPackageFragmentRoot> toNotOverwrite= new ArrayList<IPackageFragmentRoot>(1);
 		for (int i= 0; i < fRoots.length; i++) {
 			IPackageFragmentRoot root= fRoots[i];
 			if (canOverwrite(root)) {
@@ -119,34 +119,34 @@ class OverwriteHelper {
 				}
 			}
 		}
-		IPackageFragmentRoot[] roots= (IPackageFragmentRoot[]) toNotOverwrite.toArray(new IPackageFragmentRoot[toNotOverwrite.size()]);
+		IPackageFragmentRoot[] roots= toNotOverwrite.toArray(new IPackageFragmentRoot[toNotOverwrite.size()]);
 		fRoots= ArrayTypeConverter.toPackageFragmentRootArray(ReorgUtils.setMinus(fRoots, roots));
 	}
 
 	private void confirmCuOverwritting(IConfirmQuery overwriteQuery) {
-		List cusToNotOverwrite= new ArrayList(1);
+		List<ICompilationUnit> cusToNotOverwrite= new ArrayList<ICompilationUnit>(1);
 		for (int i= 0; i < fCus.length; i++) {
 			ICompilationUnit cu= fCus[i];
 			if (canOverwrite(cu) && ! overwrite(cu, overwriteQuery))
 				cusToNotOverwrite.add(cu);
 		}
-		ICompilationUnit[] cus= (ICompilationUnit[]) cusToNotOverwrite.toArray(new ICompilationUnit[cusToNotOverwrite.size()]);
+		ICompilationUnit[] cus= cusToNotOverwrite.toArray(new ICompilationUnit[cusToNotOverwrite.size()]);
 		fCus= ArrayTypeConverter.toCuArray(ReorgUtils.setMinus(fCus, cus));
 	}
 
 	private void confirmFolderOverwritting(IConfirmQuery overwriteQuery) {
-		List foldersToNotOverwrite= new ArrayList(1);
+		List<IFolder> foldersToNotOverwrite= new ArrayList<IFolder>(1);
 		for (int i= 0; i < fFolders.length; i++) {
 			IFolder folder= fFolders[i];
 			if (willOverwrite(folder) && ! skip(BasicElementLabels.getResourceName(folder), overwriteQuery))
 				foldersToNotOverwrite.add(folder);
 		}
-		IFolder[] folders= (IFolder[]) foldersToNotOverwrite.toArray(new IFolder[foldersToNotOverwrite.size()]);
+		IFolder[] folders= foldersToNotOverwrite.toArray(new IFolder[foldersToNotOverwrite.size()]);
 		fFolders= ArrayTypeConverter.toFolderArray(ReorgUtils.setMinus(fFolders, folders));
 	}
 
 	private void confirmFileOverwritting(IConfirmQuery overwriteQuery, IConfirmQuery skipQuery) {
-		List filesToNotOverwrite= new ArrayList(1);
+		List<IFile> filesToNotOverwrite= new ArrayList<IFile>(1);
 		for (int i= 0; i < fFiles.length; i++) {
 			IFile file= fFiles[i];
 			if (willOverwrite(file)) {
@@ -160,18 +160,18 @@ class OverwriteHelper {
 				}
 			}
 		}
-		IFile[] files= (IFile[]) filesToNotOverwrite.toArray(new IFile[filesToNotOverwrite.size()]);
+		IFile[] files= filesToNotOverwrite.toArray(new IFile[filesToNotOverwrite.size()]);
 		fFiles= ArrayTypeConverter.toFileArray(ReorgUtils.setMinus(fFiles, files));
 	}
 
 	private void confirmPackageOverwritting(IConfirmQuery overwriteQuery){
-		List toNotOverwrite= new ArrayList(1);
+		List<IPackageFragment> toNotOverwrite= new ArrayList<IPackageFragment>(1);
 		for (int i= 0; i < fPackageFragments.length; i++) {
 			IPackageFragment pack= fPackageFragments[i];
 			if (canOverwrite(pack) && ! overwrite(pack, overwriteQuery))
 				toNotOverwrite.add(pack);
 		}
-		IPackageFragment[] packages= (IPackageFragment[]) toNotOverwrite.toArray(new IPackageFragment[toNotOverwrite.size()]);
+		IPackageFragment[] packages= toNotOverwrite.toArray(new IPackageFragment[toNotOverwrite.size()]);
 		fPackageFragments= ArrayTypeConverter.toPackageArray(ReorgUtils.setMinus(fPackageFragments, packages));
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java
index f6e36f1..0720506 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,7 +175,7 @@ public class ParentChecker {
 	}
 
 	private void removeResourcesDescendantsOfJavaElements() {
-		List subResources= new ArrayList(3);
+		List<IResource> subResources= new ArrayList<IResource>(3);
 		for (int i= 0; i < fResources.length; i++) {
 			IResource subResource= fResources[i];
 			for (int j= 0; j < fJavaElements.length; j++) {
@@ -184,11 +184,11 @@ public class ParentChecker {
 					subResources.add(subResource);
 			}
 		}
-		removeFromSetToDelete((IResource[]) subResources.toArray(new IResource[subResources.size()]));
+		removeFromSetToDelete(subResources.toArray(new IResource[subResources.size()]));
 	}
 
 	private void removeJavaElementsDescendantsOfJavaElements() {
-		List subElements= new ArrayList(3);
+		List<IJavaElement> subElements= new ArrayList<IJavaElement>(3);
 		for (int i= 0; i < fJavaElements.length; i++) {
 			IJavaElement subElement= fJavaElements[i];
 			for (int j= 0; j < fJavaElements.length; j++) {
@@ -197,11 +197,11 @@ public class ParentChecker {
 					subElements.add(subElement);
 			}
 		}
-		removeFromSetToDelete((IJavaElement[]) subElements.toArray(new IJavaElement[subElements.size()]));
+		removeFromSetToDelete(subElements.toArray(new IJavaElement[subElements.size()]));
 	}
 
 	private void removeResourcesDescendantsOfResources() {
-		List subResources= new ArrayList(3);
+		List<IResource> subResources= new ArrayList<IResource>(3);
 		for (int i= 0; i < fResources.length; i++) {
 			IResource subResource= fResources[i];
 			for (int j= 0; j < fResources.length; j++) {
@@ -210,7 +210,7 @@ public class ParentChecker {
 					subResources.add(subResource);
 			}
 		}
-		removeFromSetToDelete((IResource[]) subResources.toArray(new IResource[subResources.size()]));
+		removeFromSetToDelete(subResources.toArray(new IResource[subResources.size()]));
 	}
 
 	public static boolean isDescendantOf(IResource subResource, IJavaElement superElement) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java
index 8e3035b..641b584 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,7 +69,7 @@ public abstract class RefactoringModifications {
 		if (source.getKind() == IPackageFragmentRoot.K_BINARY) {
 			childOfInterest = IJavaElement.CLASS_FILE;
 		}
-		ArrayList result = new ArrayList(children.length);
+		ArrayList<IResource> result = new ArrayList<IResource>(children.length);
 		for (int i = 0; i < children.length; i++) {
 			IJavaElement child = children[i];
 			if (child.getElementType() == childOfInterest && child.getResource() != null) {
@@ -81,10 +81,10 @@ public abstract class RefactoringModifications {
 		for (int i= 0; i < nonJavaResources.length; i++) {
 			Object element= nonJavaResources[i];
 			if (element instanceof IResource) {
-				result.add(element);
+				result.add((IResource) element);
 			}
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	protected IFile getClasspathFile(IResource resource) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java
index 11712b5..8460725 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import java.util.StringTokenizer;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -92,6 +93,7 @@ import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.ImportDeclaration;
 import org.eclipse.jdt.core.dom.Javadoc;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.PackageDeclaration;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SwitchStatement;
@@ -146,6 +148,7 @@ import org.eclipse.jdt.ui.JavaElementLabels;
 import org.eclipse.jdt.ui.refactoring.RefactoringSaveHelper;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 
 public final class ReorgPolicyFactory {
 
@@ -161,7 +164,7 @@ public final class ReorgPolicyFactory {
 		}
 
 		public IJavaElement[] getActualJavaElementsToReorg() throws JavaModelException {
-			List result= new ArrayList();
+			List<IJavaElement> result= new ArrayList<IJavaElement>();
 			for (int i= 0; i < fJavaElements.length; i++) {
 				IJavaElement element= fJavaElements[i];
 				if (element == null)
@@ -177,12 +180,12 @@ public final class ReorgPolicyFactory {
 					result.add(element);
 				}
 			}
-			return (IJavaElement[]) result.toArray(new IJavaElement[result.size()]);
+			return result.toArray(new IJavaElement[result.size()]);
 		}
 
 		public IResource[] getActualResourcesToReorg() {
-			Set javaElementSet= new HashSet(Arrays.asList(fJavaElements));
-			List result= new ArrayList();
+			Set<IJavaElement> javaElementSet= new HashSet<IJavaElement>(Arrays.asList(fJavaElements));
+			List<IResource> result= new ArrayList<IResource>();
 			for (int i= 0; i < fResources.length; i++) {
 				if (fResources[i] == null)
 					continue;
@@ -191,7 +194,7 @@ public final class ReorgPolicyFactory {
 					if (!result.contains(fResources[i]))
 						result.add(fResources[i]);
 			}
-			return (IResource[]) result.toArray(new IResource[result.size()]);
+			return result.toArray(new IResource[result.size()]);
 
 		}
 	}
@@ -290,12 +293,14 @@ public final class ReorgPolicyFactory {
 			return createCopyResourceChange(resource, nameProposer, copyQueries, dest);
 		}
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			ReorgExecutionLog log= getReorgExecutionLog();
 			storeReorgExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createCopyDescriptor(project, description, comment.asString(), arguments, flags);
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			final int kind= getContentKind();
 			switch (kind) {
@@ -309,6 +314,7 @@ public final class ReorgPolicyFactory {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_description_plural;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			final int kind= getContentKind();
 			switch (kind) {
@@ -329,14 +335,17 @@ public final class ReorgPolicyFactory {
 			return getDestinationAsContainer();
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_header_plural;
 		}
 
+		@Override
 		protected RefactoringModifications getModifications() throws CoreException {
 			if (fModifications != null)
 				return fModifications;
@@ -359,10 +368,12 @@ public final class ReorgPolicyFactory {
 			return POLICY_COPY_RESOURCE;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.COPY;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.COPY;
 		}
@@ -430,28 +441,34 @@ public final class ReorgPolicyFactory {
 			return composite;
 		}
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			ReorgExecutionLog log= getReorgExecutionLog();
 			storeReorgExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createCopyDescriptor(project, description, comment.asString(), arguments, flags);
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_roots_plural;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_roots_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_roots_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_roots_header_plural;
 		}
 
+		@Override
 		protected RefactoringModifications getModifications() throws CoreException {
 			if (fModifications != null)
 				return fModifications;
@@ -479,10 +496,12 @@ public final class ReorgPolicyFactory {
 			return POLICY_COPY_ROOTS;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.COPY;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.COPY;
 		}
@@ -555,28 +574,34 @@ public final class ReorgPolicyFactory {
 			return composite;
 		}
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			ReorgExecutionLog log= getReorgExecutionLog();
 			storeReorgExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createCopyDescriptor(project, description, comment.asString(), arguments, flags);
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_packages_plural;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_package_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_packages_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_packages_header_plural;
 		}
 
+		@Override
 		protected RefactoringModifications getModifications() throws CoreException {
 			if (fModifications != null)
 				return fModifications;
@@ -604,10 +629,12 @@ public final class ReorgPolicyFactory {
 			return POLICY_COPY_PACKAGES;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.COPY;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.COPY;
 		}
@@ -629,6 +656,7 @@ public final class ReorgPolicyFactory {
 			super(javaElements);
 		}
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			return super.canEnable() && (getSourceCu() != null || getSourceClassFile() != null);
 		}
@@ -650,7 +678,8 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			ReorgExecutionLog log= getReorgExecutionLog();
 			storeReorgExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createCopyDescriptor(project, description, comment.asString(), arguments, flags);
@@ -659,7 +688,7 @@ public final class ReorgPolicyFactory {
 		private CompilationUnit createSourceCuNode() {
 			Assert.isTrue(getSourceCu() != null || getSourceClassFile() != null);
 			Assert.isTrue(getSourceCu() == null || getSourceClassFile() == null);
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setBindingsRecovery(true);
 			parser.setResolveBindings(true);
 			if (getSourceCu() != null)
@@ -669,10 +698,12 @@ public final class ReorgPolicyFactory {
 			return (CompilationUnit) parser.createAST(null);
 		}
 
+		@Override
 		public IFile[] getAllModifiedFiles() {
 			return ReorgUtils.getFiles(new IResource[] { ReorgUtils.getResource(getEnclosingCompilationUnit(getJavaElementDestination()))});
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			if (!ReorgUtils.hasElementsNotOfType(getJavaElements(), IJavaElement.TYPE)) {
 				return RefactoringCoreMessages.ReorgPolicyFactory_copy_types;
@@ -693,6 +724,7 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			if (!ReorgUtils.hasElementsNotOfType(getJavaElements(), IJavaElement.TYPE)) {
 				return RefactoringCoreMessages.ReorgPolicyFactory_copy_type;
@@ -713,14 +745,17 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_elements_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_copy_elements_header_plural;
 		}
 
+		@Override
 		protected RefactoringModifications getModifications() throws CoreException {
 			if (fModifications != null)
 				return fModifications;
@@ -739,10 +774,12 @@ public final class ReorgPolicyFactory {
 			return POLICY_COPY_MEMBERS;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.COPY;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.COPY;
 		}
@@ -786,6 +823,7 @@ public final class ReorgPolicyFactory {
 			fCus= cus;
 		}
 
+		@Override
 		public boolean canChildrenBeDestinations(IJavaElement javaElement) {
 			switch (javaElement.getElementType()) {
 				case IJavaElement.JAVA_MODEL:
@@ -799,10 +837,12 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		public boolean canChildrenBeDestinations(IResource resource) {
 			return resource instanceof IContainer;
 		}
 
+		@Override
 		public boolean canElementBeDestination(IJavaElement javaElement) {
 			switch (javaElement.getElementType()) {
 				case IJavaElement.PACKAGE_FRAGMENT:
@@ -812,10 +852,12 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		public boolean canElementBeDestination(IResource resource) {
 			return resource instanceof IProject || resource instanceof IFolder;
 		}
 
+		@Override
 		public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context, IReorgQueries reorgQueries) throws CoreException {
 			confirmOverwriting(reorgQueries);
 			RefactoringStatus status= super.checkFinalConditions(pm, context, reorgQueries);
@@ -844,7 +886,7 @@ public final class ReorgPolicyFactory {
 			return ReorgUtils.containsLinkedResources(fFiles) || ReorgUtils.containsLinkedResources(fFolders) || ReorgUtils.containsLinkedResources(fCus);
 		}
 
-		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map arguments, final String description, final String project, int flags);
+		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map<String, String> arguments, final String description, final String project, int flags);
 
 		protected final int getContentKind() {
 			final int length= fCus.length + fFiles.length + fFolders.length;
@@ -874,7 +916,7 @@ public final class ReorgPolicyFactory {
 		}
 
 		public final ChangeDescriptor getDescriptor() {
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			final int length= fFiles.length + fFolders.length + fCus.length;
 			final String description= length == 1 ? getDescriptionSingular() : getDescriptionPlural();
 			final IProject resource= getSingleProject();
@@ -991,6 +1033,7 @@ public final class ReorgPolicyFactory {
 			return result;
 		}
 
+		@Override
 		public RefactoringStatus initialize(JavaRefactoringArguments arguments) {
 			RefactoringStatus status= new RefactoringStatus();
 			int fileCount= 0;
@@ -1024,7 +1067,7 @@ public final class ReorgPolicyFactory {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_UNITS));
 			String handle= null;
-			List elements= new ArrayList();
+			List<IAdaptable> elements= new ArrayList<IAdaptable>();
 			for (int index= 0; index < fileCount; index++) {
 				final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1);
 				handle= arguments.getAttribute(attribute);
@@ -1037,8 +1080,8 @@ public final class ReorgPolicyFactory {
 				} else
 					return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 			}
-			fFiles= (IFile[]) elements.toArray(new IFile[elements.size()]);
-			elements= new ArrayList();
+			fFiles= elements.toArray(new IFile[elements.size()]);
+			elements= new ArrayList<IAdaptable>();
 			for (int index= 0; index < folderCount; index++) {
 				final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (fileCount + index + 1);
 				handle= arguments.getAttribute(attribute);
@@ -1051,8 +1094,8 @@ public final class ReorgPolicyFactory {
 				} else
 					return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 			}
-			fFolders= (IFolder[]) elements.toArray(new IFolder[elements.size()]);
-			elements= new ArrayList();
+			fFolders= elements.toArray(new IFolder[elements.size()]);
+			elements= new ArrayList<IAdaptable>();
 			for (int index= 0; index < unitCount; index++) {
 				final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (folderCount + fileCount + index + 1);
 				handle= arguments.getAttribute(attribute);
@@ -1065,7 +1108,7 @@ public final class ReorgPolicyFactory {
 				} else
 					return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 			}
-			fCus= (ICompilationUnit[]) elements.toArray(new ICompilationUnit[elements.size()]);
+			fCus= elements.toArray(new ICompilationUnit[elements.size()]);
 			status.merge(super.initialize(arguments));
 			return status;
 		}
@@ -1079,6 +1122,7 @@ public final class ReorgPolicyFactory {
 			return false;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement javaElement) throws JavaModelException {
 			Assert.isNotNull(javaElement);
 			if (!fCheckDestination)
@@ -1121,6 +1165,7 @@ public final class ReorgPolicyFactory {
 			return new RefactoringStatus();
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IResource resource) throws JavaModelException {
 			Assert.isNotNull(resource);
 			if (!resource.exists() || resource.isPhantom())
@@ -1230,6 +1275,7 @@ public final class ReorgPolicyFactory {
 			return JavaElementUtil.isDefaultPackage(commonParent);
 		}
 
+		@Override
 		public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context, IReorgQueries reorgQueries) throws CoreException {
 			try {
 				pm.beginTask("", fUpdateQualifiedNames ? 7 : 3); //$NON-NLS-1$
@@ -1252,6 +1298,7 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected IPackageFragment getDestinationAsPackageFragment() {
 			IJavaElement destination= getJavaElementDestination();
 			if (destination instanceof IPackageFragmentRoot && getCus().length > 0) {
@@ -1333,7 +1380,8 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			CreateTargetExecutionLog log= getCreateTargetExecutionLog();
 			storeCreateTargetExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createMoveDescriptor(project, description, comment.asString(), arguments, flags);
@@ -1396,13 +1444,14 @@ public final class ReorgPolicyFactory {
 			return result;
 		}
 
+		@Override
 		public IFile[] getAllModifiedFiles() {
-			Set result= new HashSet();
+			Set<IFile> result= new HashSet<IFile>();
 			result.addAll(Arrays.asList(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits())));
 			result.addAll(Arrays.asList(fQualifiedNameSearchResult.getAllFiles()));
 			if (!(getJavaElementDestination() instanceof IPackageFragmentRoot) && getDestinationAsPackageFragment() != null && getUpdateReferences())
 				result.addAll(Arrays.asList(ResourceUtil.getFiles(getCus())));
-			return (IFile[]) result.toArray(new IFile[result.size()]);
+			return result.toArray(new IFile[result.size()]);
 		}
 
 		private Object getCommonParent() {
@@ -1417,6 +1466,7 @@ public final class ReorgPolicyFactory {
 			return createQueries.createNewPackageQuery();
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			final int kind= getContentKind();
 			switch (kind) {
@@ -1430,6 +1480,7 @@ public final class ReorgPolicyFactory {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_description_plural;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			final int kind= getContentKind();
 			switch (kind) {
@@ -1447,14 +1498,17 @@ public final class ReorgPolicyFactory {
 			return fFilePatterns;
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_header_plural;
 		}
 
+		@Override
 		protected RefactoringModifications getModifications() throws CoreException {
 			if (fModifications != null)
 				return fModifications;
@@ -1492,12 +1546,14 @@ public final class ReorgPolicyFactory {
 			return POLICY_MOVE_RESOURCES;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.MOVE;
 		}
 
-		protected Map getRefactoringArguments(String project) {
-			final Map arguments= new HashMap();
+		@Override
+		protected Map<String, String> getRefactoringArguments(String project) {
+			final Map<String, String> arguments= new HashMap<String, String>();
 			arguments.putAll(super.getRefactoringArguments(project));
 			if (fFilePatterns != null && !"".equals(fFilePatterns)) //$NON-NLS-1$
 				arguments.put(ATTRIBUTE_PATTERNS, fFilePatterns);
@@ -1506,6 +1562,7 @@ public final class ReorgPolicyFactory {
 			return arguments;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.MOVE;
 		}
@@ -1532,6 +1589,7 @@ public final class ReorgPolicyFactory {
 			return true;
 		}
 
+		@Override
 		public RefactoringStatus initialize(JavaRefactoringArguments arguments) {
 			final String patterns= arguments.getAttribute(ATTRIBUTE_PATTERNS);
 			if (patterns != null && !"".equals(patterns)) //$NON-NLS-1$
@@ -1580,6 +1638,7 @@ public final class ReorgPolicyFactory {
 			fUpdateReferences= update;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement destination) throws JavaModelException {
 			RefactoringStatus superStatus= super.verifyDestination(destination);
 			if (superStatus.hasFatalError())
@@ -1601,6 +1660,7 @@ public final class ReorgPolicyFactory {
 			return superStatus;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IResource destination) throws JavaModelException {
 			RefactoringStatus superStatus= super.verifyDestination(destination);
 			if (superStatus.hasFatalError())
@@ -1645,6 +1705,7 @@ public final class ReorgPolicyFactory {
 			super(roots);
 		}
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			if (!super.canEnable())
 				return false;
@@ -1660,6 +1721,7 @@ public final class ReorgPolicyFactory {
 			return roots.length > 0;
 		}
 
+		@Override
 		public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context, IReorgQueries reorgQueries) throws CoreException {
 			try {
 				RefactoringStatus status= super.checkFinalConditions(pm, context, reorgQueries);
@@ -1700,7 +1762,8 @@ public final class ReorgPolicyFactory {
 			return composite;
 		}
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			CreateTargetExecutionLog log= getCreateTargetExecutionLog();
 			storeCreateTargetExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createMoveDescriptor(project, description, comment.asString(), arguments, flags);
@@ -1714,22 +1777,27 @@ public final class ReorgPolicyFactory {
 			return null;
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_roots_plural;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_roots_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_roots_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_roots_header_plural;
 		}
 
+		@Override
 		protected RefactoringModifications getModifications() throws CoreException {
 			if (fModifications != null)
 				return fModifications;
@@ -1755,10 +1823,12 @@ public final class ReorgPolicyFactory {
 			return POLICY_MOVE_ROOTS;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.MOVE;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.MOVE;
 		}
@@ -1778,6 +1848,7 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement javaElement) throws JavaModelException {
 			RefactoringStatus superStatus= super.verifyDestination(javaElement);
 			if (superStatus.hasFatalError())
@@ -1791,6 +1862,7 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected RefactoringStatus verifyDestination(IResource destination) {
 			RefactoringStatus superStatus= super.verifyDestination(destination);
 			if (superStatus.hasFatalError())
@@ -1895,6 +1967,7 @@ public final class ReorgPolicyFactory {
 			super(packageFragments);
 		}
 
+		@Override
 		public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context, IReorgQueries reorgQueries) throws CoreException {
 			try {
 				RefactoringStatus status= super.checkFinalConditions(pm, context, reorgQueries);
@@ -1941,7 +2014,8 @@ public final class ReorgPolicyFactory {
 		}
 
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			CreateTargetExecutionLog log= getCreateTargetExecutionLog();
 			storeCreateTargetExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createMoveDescriptor(project, description, comment.asString(), arguments, flags);
@@ -1955,22 +2029,27 @@ public final class ReorgPolicyFactory {
 			return null;
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_packages_plural;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_packages_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_packages_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_packages_header_plural;
 		}
 
+		@Override
 		protected RefactoringModifications getModifications() throws CoreException {
 			if (fModifications != null)
 				return fModifications;
@@ -1993,10 +2072,12 @@ public final class ReorgPolicyFactory {
 			return POLICY_MOVE_PACKAGES;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.MOVE;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.MOVE;
 		}
@@ -2013,6 +2094,7 @@ public final class ReorgPolicyFactory {
 			fCheckDestination= check;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement javaElement) throws JavaModelException {
 			RefactoringStatus superStatus= super.verifyDestination(javaElement);
 			if (superStatus.hasFatalError())
@@ -2027,6 +2109,7 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected RefactoringStatus verifyDestination(IResource destination) {
 			RefactoringStatus superStatus= super.verifyDestination(destination);
 			if (superStatus.hasFatalError())
@@ -2118,6 +2201,7 @@ public final class ReorgPolicyFactory {
 			super(javaElements);
 		}
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			return super.canEnable() && getSourceCu() != null;
 		}
@@ -2150,7 +2234,7 @@ public final class ReorgPolicyFactory {
 					result.markAsSynthetic();
 					result.add(targetCuChange);
 					if (Arrays.asList(getJavaElements()).containsAll(Arrays.asList(sourceCu.getTypes()))) {
-						result.add(DeleteChangeCreator.createDeleteChange(null, new IResource[0], new ICompilationUnit[] {sourceCu}, RefactoringCoreMessages.ReorgPolicy_move, Collections.EMPTY_LIST));
+						result.add(DeleteChangeCreator.createDeleteChange(null, new IResource[0], new ICompilationUnit[] {sourceCu}, RefactoringCoreMessages.ReorgPolicy_move, Collections.<IResource>emptyList()));
 					} else {
 						result.add(createCompilationUnitChange(sourceRewriter));
 					}
@@ -2165,12 +2249,14 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
-		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map arguments, String description, String project, int flags) {
+		@Override
+		protected JavaRefactoringDescriptor createRefactoringDescriptor(JDTRefactoringDescriptorComment comment, Map<String, String> arguments, String description, String project, int flags) {
 			CreateTargetExecutionLog log= getCreateTargetExecutionLog();
 			storeCreateTargetExecutionLog(project, arguments, log);
 			return RefactoringSignatureDescriptorFactory.createMoveDescriptor(project, description, comment.asString(), arguments, flags);
 		}
 
+		@Override
 		public IFile[] getAllModifiedFiles() {
 			return ReorgUtils.getFiles(new IResource[] { ReorgUtils.getResource(getSourceCu()), ReorgUtils.getResource(getEnclosingCompilationUnit(getJavaElementDestination()))});
 		}
@@ -2183,6 +2269,7 @@ public final class ReorgPolicyFactory {
 			return null;
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			if (!ReorgUtils.hasElementsNotOfType(getJavaElements(), IJavaElement.TYPE)) {
 				return RefactoringCoreMessages.ReorgPolicyFactory_move_types;
@@ -2203,6 +2290,7 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			if (!ReorgUtils.hasElementsNotOfType(getJavaElements(), IJavaElement.TYPE)) {
 				return RefactoringCoreMessages.ReorgPolicyFactory_move_type;
@@ -2223,18 +2311,22 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_elements_header_singular;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return RefactoringCoreMessages.ReorgPolicyFactory_move_elements_header_plural;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return IJavaRefactorings.MOVE;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return IJavaRefactorings.MOVE;
 		}
@@ -2251,6 +2343,7 @@ public final class ReorgPolicyFactory {
 			fCheckDestination= check;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement destination, int location) throws JavaModelException {
 			IJavaElement[] elements= getJavaElements();
 			for (int i= 0; i < elements.length; i++) {
@@ -2283,7 +2376,7 @@ public final class ReorgPolicyFactory {
 				if (!allInSameParent(elements, parent))
 					return superStatus;
 
-				ArrayList sortedChildren= getSortedChildren((IType) parent);
+				ArrayList<IJavaElement> sortedChildren= getSortedChildren((IType) parent);
 
 				int destinationIndex= sortedChildren.indexOf(destination);
 
@@ -2300,11 +2393,11 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
-		private ArrayList getSortedChildren(IType parent) throws JavaModelException {
+		private ArrayList<IJavaElement> getSortedChildren(IType parent) throws JavaModelException {
 			IJavaElement[] children= parent.getChildren();
-			ArrayList sortedChildren= new ArrayList(Arrays.asList(children));
-			Collections.sort(sortedChildren, new Comparator() {
-				public int compare(Object e1, Object e2) {
+			ArrayList<IJavaElement> sortedChildren= new ArrayList<IJavaElement>(Arrays.asList(children));
+			Collections.sort(sortedChildren, new Comparator<IJavaElement>() {
+				public int compare(IJavaElement e1, IJavaElement e2) {
 					if (!(e1 instanceof ISourceReference))
 						return 0;
 					if (!(e2 instanceof ISourceReference))
@@ -2461,7 +2554,7 @@ public final class ReorgPolicyFactory {
 			return !root.getPackageFragment(newName).exists();
 		}
 
-		private final Set fAutoGeneratedNewNames= new HashSet(2);
+		private final Set<String> fAutoGeneratedNewNames= new HashSet<String>(2);
 
 		public String createNewName(ICompilationUnit cu, IPackageFragment destination) {
 			if (isNewNameOk(destination, cu.getElementName()))
@@ -2526,6 +2619,7 @@ public final class ReorgPolicyFactory {
 
 	private static final class NoCopyPolicy extends ReorgPolicy implements ICopyPolicy {
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			return false;
 		}
@@ -2534,10 +2628,12 @@ public final class ReorgPolicyFactory {
 			return new NullChange();
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			return UNUSED_STRING;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			return UNUSED_STRING;
 		}
@@ -2546,10 +2642,12 @@ public final class ReorgPolicyFactory {
 			return null;
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return UNUSED_STRING;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return UNUSED_STRING;
 		}
@@ -2562,10 +2660,12 @@ public final class ReorgPolicyFactory {
 			return NO_POLICY;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return NO_ID;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return NO_ID;
 		}
@@ -2578,14 +2678,17 @@ public final class ReorgPolicyFactory {
 			return new IResource[0];
 		}
 
+		@Override
 		public RefactoringStatus initialize(JavaRefactoringArguments arguments) {
 			return new RefactoringStatus();
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement javaElement) throws JavaModelException {
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_noCopying);
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IResource resource) throws JavaModelException {
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_noCopying);
 		}
@@ -2593,6 +2696,7 @@ public final class ReorgPolicyFactory {
 
 	private static final class NoMovePolicy extends ReorgPolicy implements IMovePolicy {
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			return false;
 		}
@@ -2609,10 +2713,12 @@ public final class ReorgPolicyFactory {
 			return null;
 		}
 
+		@Override
 		protected String getDescriptionPlural() {
 			return UNUSED_STRING;
 		}
 
+		@Override
 		protected String getDescriptionSingular() {
 			return UNUSED_STRING;
 		}
@@ -2621,10 +2727,12 @@ public final class ReorgPolicyFactory {
 			return null;
 		}
 
+		@Override
 		protected String getHeaderPatternSingular() {
 			return UNUSED_STRING;
 		}
 
+		@Override
 		protected String getHeaderPatternPlural() {
 			return UNUSED_STRING;
 		}
@@ -2637,10 +2745,12 @@ public final class ReorgPolicyFactory {
 			return NO_POLICY;
 		}
 
+		@Override
 		protected String getProcessorId() {
 			return NO_ID;
 		}
 
+		@Override
 		protected String getRefactoringId() {
 			return NO_ID;
 		}
@@ -2649,6 +2759,7 @@ public final class ReorgPolicyFactory {
 			return new IResource[0];
 		}
 
+		@Override
 		public RefactoringStatus initialize(JavaRefactoringArguments arguments) {
 			return new RefactoringStatus();
 		}
@@ -2665,10 +2776,12 @@ public final class ReorgPolicyFactory {
 			fCheckDestination= check;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement javaElement) throws JavaModelException {
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_noMoving);
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IResource resource) throws JavaModelException {
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_noMoving);
 		}
@@ -2749,6 +2862,7 @@ public final class ReorgPolicyFactory {
 			fPackageFragmentRoots= roots;
 		}
 
+		@Override
 		public boolean canChildrenBeDestinations(IJavaElement javaElement) {
 			switch (javaElement.getElementType()) {
 				case IJavaElement.JAVA_MODEL:
@@ -2759,18 +2873,22 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		public boolean canChildrenBeDestinations(IResource resource) {
 			return resource instanceof IContainer;
 		}
 
+		@Override
 		public boolean canElementBeDestination(IJavaElement javaElement) {
 			return javaElement.getElementType() == IJavaElement.JAVA_PROJECT;
 		}
 
+		@Override
 		public boolean canElementBeDestination(IResource resource) {
 			return resource instanceof IContainer;
 		}
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			if (!super.canEnable() || fPackageFragmentRoots.length == 0)
 				return false;
@@ -2784,6 +2902,7 @@ public final class ReorgPolicyFactory {
 			return true;
 		}
 
+		@Override
 		public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context, IReorgQueries reorgQueries) throws CoreException {
 			confirmOverwriting(reorgQueries);
 			RefactoringStatus status= super.checkFinalConditions(pm, context, reorgQueries);
@@ -2802,10 +2921,10 @@ public final class ReorgPolicyFactory {
 			fPackageFragmentRoots= oh.getPackageFragmentRootsWithoutUnconfirmedOnes();
 		}
 
-		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map arguments, final String description, final String project, int flags);
+		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map<String, String> arguments, final String description, final String project, int flags);
 
 		public final ChangeDescriptor getDescriptor() {
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			final int length= fPackageFragmentRoots.length;
 			final String description= length == 1 ? getDescriptionSingular() : getDescriptionPlural();
 			final IProject resource= getSingleProject();
@@ -2861,6 +2980,7 @@ public final class ReorgPolicyFactory {
 			return result;
 		}
 
+		@Override
 		public RefactoringStatus initialize(JavaRefactoringArguments arguments) {
 			final RefactoringStatus status= new RefactoringStatus();
 			int rootCount= 0;
@@ -2874,7 +2994,7 @@ public final class ReorgPolicyFactory {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_ROOTS));
 			String handle= null;
-			List elements= new ArrayList();
+			List<IJavaElement> elements= new ArrayList<IJavaElement>();
 			for (int index= 0; index < rootCount; index++) {
 				final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1);
 				handle= arguments.getAttribute(attribute);
@@ -2887,11 +3007,12 @@ public final class ReorgPolicyFactory {
 				} else
 					return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 			}
-			fPackageFragmentRoots= (IPackageFragmentRoot[]) elements.toArray(new IPackageFragmentRoot[elements.size()]);
+			fPackageFragmentRoots= elements.toArray(new IPackageFragmentRoot[elements.size()]);
 			status.merge(super.initialize(arguments));
 			return status;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement javaElement) throws JavaModelException {
 			Assert.isNotNull(javaElement);
 			if (!fCheckDestination)
@@ -2909,6 +3030,7 @@ public final class ReorgPolicyFactory {
 			return new RefactoringStatus();
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IResource resource) {
 			Assert.isNotNull(resource);
 			if (!resource.exists() || resource.isPhantom())
@@ -2957,6 +3079,7 @@ public final class ReorgPolicyFactory {
 			fPackageFragments= packageFragments;
 		}
 
+		@Override
 		public boolean canChildrenBeDestinations(IJavaElement javaElement) {
 			switch (javaElement.getElementType()) {
 				case IJavaElement.JAVA_MODEL:
@@ -2971,10 +3094,12 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		public boolean canChildrenBeDestinations(IResource resource) {
 			return resource instanceof IContainer;
 		}
 
+		@Override
 		public boolean canElementBeDestination(IJavaElement javaElement) {
 			switch (javaElement.getElementType()) {
 				case IJavaElement.JAVA_PROJECT:
@@ -2985,10 +3110,12 @@ public final class ReorgPolicyFactory {
 			}
 		}
 
+		@Override
 		public boolean canElementBeDestination(IResource resource) {
 			return resource instanceof IContainer;
 		}
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			if (fPackageFragments.length == 0)
 				return false;
@@ -3001,6 +3128,7 @@ public final class ReorgPolicyFactory {
 			return true;
 		}
 
+		@Override
 		public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context, IReorgQueries reorgQueries) throws CoreException {
 			confirmOverwriting(reorgQueries);
 			RefactoringStatus refactoringStatus= super.checkFinalConditions(pm, context, reorgQueries);
@@ -3019,10 +3147,10 @@ public final class ReorgPolicyFactory {
 			fPackageFragments= helper.getPackagesWithoutUnconfirmedOnes();
 		}
 
-		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map arguments, final String description, final String project, int flags);
+		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map<String, String> arguments, final String description, final String project, int flags);
 
 		public final ChangeDescriptor getDescriptor() {
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			final int length= fPackageFragments.length;
 			final String description= length == 1 ? getDescriptionSingular() : getDescriptionPlural();
 			final IProject resource= getSingleProject();
@@ -3086,6 +3214,7 @@ public final class ReorgPolicyFactory {
 			return result;
 		}
 
+		@Override
 		public RefactoringStatus initialize(JavaRefactoringArguments arguments) {
 			final RefactoringStatus status= new RefactoringStatus();
 			int fragmentCount= 0;
@@ -3099,7 +3228,7 @@ public final class ReorgPolicyFactory {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_FRAGMENTS));
 			String handle= null;
-			List elements= new ArrayList();
+			List<IJavaElement> elements= new ArrayList<IJavaElement>();
 			for (int index= 0; index < fragmentCount; index++) {
 				final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1);
 				handle= arguments.getAttribute(attribute);
@@ -3112,11 +3241,12 @@ public final class ReorgPolicyFactory {
 				} else
 					return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 			}
-			fPackageFragments= (IPackageFragment[]) elements.toArray(new IPackageFragment[elements.size()]);
+			fPackageFragments= elements.toArray(new IPackageFragment[elements.size()]);
 			status.merge(super.initialize(arguments));
 			return status;
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement javaElement) throws JavaModelException {
 			Assert.isNotNull(javaElement);
 			if (!fCheckDestination)
@@ -3131,6 +3261,7 @@ public final class ReorgPolicyFactory {
 			return new RefactoringStatus();
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(IResource resource) {
 			Assert.isNotNull(resource);
 			if (!resource.exists() || resource.isPhantom())
@@ -3339,8 +3470,8 @@ public final class ReorgPolicyFactory {
 
 		protected abstract String getProcessorId();
 
-		protected Map getRefactoringArguments(String project) {
-			final Map arguments= new HashMap();
+		protected Map<String, String> getRefactoringArguments(String project) {
+			final Map<String, String> arguments= new HashMap<String, String>();
 			final IJavaElement element= getJavaElementDestination();
 			if (element != null)
 				arguments.put(ATTRIBUTE_DESTINATION, JavaRefactoringDescriptorUtil.elementToHandle(project, element));
@@ -3515,6 +3646,7 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean canChildrenBeDestinations(IResource resource) {
 			return false;
 		}
@@ -3522,10 +3654,12 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean canElementBeDestination(IJavaElement javaElement) {
 			return true;
 		}
 
+		@Override
 		public boolean canEnable() throws JavaModelException {
 			if (!super.canEnable() || fJavaElements.length == 0)
 				return false;
@@ -3545,6 +3679,7 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public int getSaveMode() {
 			return RefactoringSaveHelper.SAVE_REFACTORING;
 		}
@@ -3626,7 +3761,7 @@ public final class ReorgPolicyFactory {
 				BodyDeclaration decl= ASTNodeSearchUtil.getBodyDeclarationNode(member, sourceCuNode);
 				if (decl != null) {
 					ImportRewriteContext context= new ContextSensitiveImportRewriteContext(destinationContainer, targetRewriter.getImportRewrite());
-					ImportRewriteUtil.addImports(targetRewriter, context, decl, new HashMap(), new HashMap(), false);
+					ImportRewriteUtil.addImports(targetRewriter, context, decl, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 				}
 			}
 		}
@@ -3661,7 +3796,7 @@ public final class ReorgPolicyFactory {
 		}
 
 		private void insertRelative(ASTNode newNode, ASTNode relativeNode, ListRewrite listRewrite) {
-			final List list= listRewrite.getOriginalList();
+			final List<?> list= listRewrite.getOriginalList();
 			final int index= list.indexOf(relativeNode);
 
 			if (getLocation() == IReorgDestination.LOCATION_BEFORE) {
@@ -3768,10 +3903,10 @@ public final class ReorgPolicyFactory {
 			return newDeclaration;
 		}
 
-		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map arguments, final String description, final String project, int flags);
+		protected abstract JavaRefactoringDescriptor createRefactoringDescriptor(final JDTRefactoringDescriptorComment comment, final Map<String, String> arguments, final String description, final String project, int flags);
 
 		public final ChangeDescriptor getDescriptor() {
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			final int length= fJavaElements.length;
 			final String description= length == 1 ? getDescriptionSingular() : getDescriptionPlural();
 			final IProject resource= getSingleProject();
@@ -3815,6 +3950,7 @@ public final class ReorgPolicyFactory {
 			return getEnclosingCompilationUnit(fJavaElements[0]);
 		}
 
+		@Override
 		public RefactoringStatus initialize(JavaRefactoringArguments arguments) {
 			final RefactoringStatus status= new RefactoringStatus();
 			int memberCount= 0;
@@ -3828,7 +3964,7 @@ public final class ReorgPolicyFactory {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_MEMBERS));
 			String handle= null;
-			List elements= new ArrayList();
+			List<IJavaElement> elements= new ArrayList<IJavaElement>();
 			for (int index= 0; index < memberCount; index++) {
 				final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1);
 				handle= arguments.getAttribute(attribute);
@@ -3841,7 +3977,7 @@ public final class ReorgPolicyFactory {
 				} else
 					return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 			}
-			fJavaElements= (IJavaElement[]) elements.toArray(new IJavaElement[elements.size()]);
+			fJavaElements= elements.toArray(new IJavaElement[elements.size()]);
 			status.merge(super.initialize(arguments));
 			return status;
 		}
@@ -3942,6 +4078,7 @@ public final class ReorgPolicyFactory {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public RefactoringStatus verifyDestination(IReorgDestination destination) throws JavaModelException {
 			if (!(destination instanceof JavaElementDestination))
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_invalidDestinationKind);
@@ -4107,8 +4244,8 @@ public final class ReorgPolicyFactory {
 			if (copy) {
 				return new CopySubCuElementsPolicy(javaElements);
 			} else {
-				List members= Arrays.asList(javaElements);
-				return new MoveMembersPolicy((IMember[]) members.toArray(new IMember[members.size()]));
+				List<IJavaElement> members= Arrays.asList(javaElements);
+				return new MoveMembersPolicy(members.toArray(new IMember[members.size()]));
 			}
 		}
 
@@ -4116,8 +4253,8 @@ public final class ReorgPolicyFactory {
 			if (copy) {
 				return new CopySubCuElementsPolicy(javaElements);
 			} else {
-				List declarations= ReorgUtils.getElementsOfType(javaElements, IJavaElement.IMPORT_DECLARATION);
-				return new MoveImportDeclarationsPolicy((IImportDeclaration[]) declarations.toArray(new IImportDeclaration[declarations.size()]));
+				List<IImportDeclaration> declarations= (List<IImportDeclaration>) ReorgUtils.getElementsOfType(javaElements, IJavaElement.IMPORT_DECLARATION);
+				return new MoveImportDeclarationsPolicy(declarations.toArray(new IImportDeclaration[declarations.size()]));
 			}
 		}
 
@@ -4245,7 +4382,7 @@ public final class ReorgPolicyFactory {
 		}
 	}
 
-	public static void storeCreateTargetExecutionLog(String project, Map arguments, CreateTargetExecutionLog log) {
+	public static void storeCreateTargetExecutionLog(String project, Map<String, String> arguments, CreateTargetExecutionLog log) {
 		if (log != null) {
 			final StringBuffer buffer= new StringBuffer(64);
 			final Object[] selections= log.getSelectedElements();
@@ -4281,13 +4418,13 @@ public final class ReorgPolicyFactory {
 		return false;
 	}
 
-	public static void storeReorgExecutionLog(String project, Map arguments, ReorgExecutionLog log) {
+	public static void storeReorgExecutionLog(String project, Map<String, String> arguments, ReorgExecutionLog log) {
 		if (log != null) {
-			final Set set= new HashSet();
+			final Set<Object> set= new HashSet<Object>();
 			set.addAll(Arrays.asList(log.getProcessedElements()));
 			set.addAll(Arrays.asList(log.getRenamedElements()));
 			final StringBuffer buffer= new StringBuffer(64);
-			for (final Iterator iterator= set.iterator(); iterator.hasNext();) {
+			for (final Iterator<Object> iterator= set.iterator(); iterator.hasNext();) {
 				final Object object= iterator.next();
 				if (storeLogElement(buffer, project, object)) {
 					buffer.append(DELIMITER_ELEMENT);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java
index e21358d..494290c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -73,10 +74,10 @@ public class ReorgUtils {
 		return false;
 	}
 
-	public static boolean containsOnlyProjects(List elements){
+	public static boolean containsOnlyProjects(List<?> elements){
 		if (elements.isEmpty())
 			return false;
-		for(Iterator iter= elements.iterator(); iter.hasNext(); ) {
+		for(Iterator<?> iter= elements.iterator(); iter.hasNext(); ) {
 			if (! isProject(iter.next()))
 				return false;
 		}
@@ -95,10 +96,10 @@ public class ReorgUtils {
 	 *         otherwise
 	 * @since 3.5
 	 */
-	public static boolean containsOnlyWorkingSets (List elements){
+	public static boolean containsOnlyWorkingSets (List<?> elements){
 		if (elements.isEmpty())
 			return false;
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			if (!isWorkingSet(iter.next()))
 				return false;
 		}
@@ -235,24 +236,24 @@ public class ReorgUtils {
 		}
 	}
 
-	public static IResource[] getResources(List elements) {
-		List resources= new ArrayList(elements.size());
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+	public static IResource[] getResources(List<?> elements) {
+		List<IResource> resources= new ArrayList<IResource>(elements.size());
+		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IResource)
-				resources.add(element);
+				resources.add((IResource) element);
 		}
-		return (IResource[]) resources.toArray(new IResource[resources.size()]);
+		return resources.toArray(new IResource[resources.size()]);
 	}
 
-	public static IJavaElement[] getJavaElements(List elements) {
-		List resources= new ArrayList(elements.size());
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+	public static IJavaElement[] getJavaElements(List<?> elements) {
+		List<IJavaElement> resources= new ArrayList<IJavaElement>(elements.size());
+		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IJavaElement)
-				resources.add(element);
+				resources.add((IJavaElement) element);
 		}
-		return (IJavaElement[]) resources.toArray(new IJavaElement[resources.size()]);
+		return resources.toArray(new IJavaElement[resources.size()]);
 	}
 
 	/**
@@ -262,25 +263,25 @@ public class ReorgUtils {
 	 * @return the array of jar entry resources
 	 * @since 3.6
 	 */
-	public static IJarEntryResource[] getJarEntryResources(List elements) {
-		List resources= new ArrayList(elements.size());
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+	public static IJarEntryResource[] getJarEntryResources(List<?> elements) {
+		List<IJarEntryResource> resources= new ArrayList<IJarEntryResource>(elements.size());
+		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IJarEntryResource)
-				resources.add(element);
+				resources.add((IJarEntryResource) element);
 		}
-		return (IJarEntryResource[]) resources.toArray(new IJarEntryResource[resources.size()]);
+		return resources.toArray(new IJarEntryResource[resources.size()]);
 	}
 
-	public static IWorkingSet[] getWorkingSets(List elements) {
-		List result= new ArrayList(1);
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+	public static IWorkingSet[] getWorkingSets(List<?> elements) {
+		List<IWorkingSet> result= new ArrayList<IWorkingSet>(1);
+		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IWorkingSet) {
-				result.add(element);
+				result.add((IWorkingSet) element);
 			}
 		}
-		return (IWorkingSet[])result.toArray(new IWorkingSet[result.size()]);
+		return result.toArray(new IWorkingSet[result.size()]);
 	}
 
 	public static boolean hasSourceAvailable(IMember member) throws JavaModelException{
@@ -289,70 +290,63 @@ public class ReorgUtils {
 	}
 
 	public static IResource[] setMinus(IResource[] setToRemoveFrom, IResource[] elementsToRemove) {
-		Set setMinus= new HashSet(setToRemoveFrom.length - setToRemoveFrom.length);
+		Set<IResource> setMinus= new HashSet<IResource>(setToRemoveFrom.length - setToRemoveFrom.length);
 		setMinus.addAll(Arrays.asList(setToRemoveFrom));
 		setMinus.removeAll(Arrays.asList(elementsToRemove));
-		return (IResource[]) setMinus.toArray(new IResource[setMinus.size()]);
+		return setMinus.toArray(new IResource[setMinus.size()]);
 	}
 
 	public static IJavaElement[] setMinus(IJavaElement[] setToRemoveFrom, IJavaElement[] elementsToRemove) {
-		Set setMinus= new HashSet(setToRemoveFrom.length - setToRemoveFrom.length);
+		Set<IJavaElement> setMinus= new HashSet<IJavaElement>(setToRemoveFrom.length - setToRemoveFrom.length);
 		setMinus.addAll(Arrays.asList(setToRemoveFrom));
 		setMinus.removeAll(Arrays.asList(elementsToRemove));
-		return (IJavaElement[]) setMinus.toArray(new IJavaElement[setMinus.size()]);
+		return setMinus.toArray(new IJavaElement[setMinus.size()]);
 	}
 
 	public static IJavaElement[] union(IJavaElement[] set1, IJavaElement[] set2) {
-		List union= new ArrayList(set1.length + set2.length);//use lists to avoid sequence problems
+		List<IJavaElement> union= new ArrayList<IJavaElement>(set1.length + set2.length);//use lists to avoid sequence problems
 		addAll(set1, union);
 		addAll(set2, union);
-		return (IJavaElement[]) union.toArray(new IJavaElement[union.size()]);
+		return union.toArray(new IJavaElement[union.size()]);
 	}
 
 	public static IResource[] union(IResource[] set1, IResource[] set2) {
-		List union= new ArrayList(set1.length + set2.length);//use lists to avoid sequence problems
+		List<IResource> union= new ArrayList<IResource>(set1.length + set2.length);//use lists to avoid sequence problems
 		addAll(ReorgUtils.getNotNulls(set1), union);
 		addAll(ReorgUtils.getNotNulls(set2), union);
-		return (IResource[]) union.toArray(new IResource[union.size()]);
+		return union.toArray(new IResource[union.size()]);
 	}
 
-	private static void addAll(Object[] array, List list) {
+	private static <T> void addAll(T[] array, List<T> list) {
 		for (int i= 0; i < array.length; i++) {
 			if (! list.contains(array[i]))
 				list.add(array[i]);
 		}
 	}
 
-	public static Set union(Set set1, Set set2){
-		Set union= new HashSet(set1.size() + set2.size());
-		union.addAll(set1);
-		union.addAll(set2);
-		return union;
-	}
-
 	public static IType[] getMainTypes(IJavaElement[] javaElements) throws JavaModelException {
-		List result= new ArrayList();
+		List<IJavaElement> result= new ArrayList<IJavaElement>();
 		for (int i= 0; i < javaElements.length; i++) {
 			IJavaElement element= javaElements[i];
 			if (element instanceof IType && JavaElementUtil.isMainType((IType)element))
 				result.add(element);
 		}
-		return (IType[]) result.toArray(new IType[result.size()]);
+		return result.toArray(new IType[result.size()]);
 	}
 
 	public static IFolder[] getFolders(IResource[] resources) {
-		Set result= getResourcesOfType(resources, IResource.FOLDER);
-		return (IFolder[]) result.toArray(new IFolder[result.size()]);
+		Set<IResource> result= getResourcesOfType(resources, IResource.FOLDER);
+		return result.toArray(new IFolder[result.size()]);
 	}
 
 	public static IFile[] getFiles(IResource[] resources) {
-		Set result= getResourcesOfType(resources, IResource.FILE);
-		return (IFile[]) result.toArray(new IFile[result.size()]);
+		Set<IResource> result= getResourcesOfType(resources, IResource.FILE);
+		return result.toArray(new IFile[result.size()]);
 	}
 
 	//the result can be cast down to the requested type array
-	public static Set getResourcesOfType(IResource[] resources, int typeMask){
-		Set result= new HashSet(resources.length);
+	public static Set<IResource> getResourcesOfType(IResource[] resources, int typeMask){
+		Set<IResource> result= new HashSet<IResource>(resources.length);
 		for (int i= 0; i < resources.length; i++) {
 			if (isOfType(resources[i], typeMask))
 				result.add(resources[i]);
@@ -362,8 +356,8 @@ public class ReorgUtils {
 
 	//the result can be cast down to the requested type array
 	//type is _not_ a mask
-	public static List getElementsOfType(IJavaElement[] javaElements, int type){
-		List result= new ArrayList(javaElements.length);
+	public static List<?> getElementsOfType(IJavaElement[] javaElements, int type){
+		List<IJavaElement> result= new ArrayList<IJavaElement>(javaElements.length);
 		for (int i= 0; i < javaElements.length; i++) {
 			if (isOfType(javaElements[i], type))
 				result.add(javaElements[i]);
@@ -556,47 +550,47 @@ public class ReorgUtils {
 	}
 
 	public static IResource[] getNotNulls(IResource[] resources) {
-		Collection result= new ArrayList(resources.length);
+		Collection<IResource> result= new ArrayList<IResource>(resources.length);
 		for (int i= 0; i < resources.length; i++) {
 			IResource resource= resources[i];
 			if (resource != null && ! result.contains(resource))
 				result.add(resource);
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	public static IResource[] getNotLinked(IResource[] resources) {
-		Collection result= new ArrayList(resources.length);
+		Collection<IResource> result= new ArrayList<IResource>(resources.length);
 		for (int i= 0; i < resources.length; i++) {
 			IResource resource= resources[i];
 			if (resource != null && ! result.contains(resource) && ! resource.isLinked())
 				result.add(resource);
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 
 	/* List<IJavaElement> javaElements
 	 * return ICompilationUnit -> List<IJavaElement>
 	 */
-	public static Map groupByCompilationUnit(List javaElements){
-		Map result= new HashMap();
-		for (Iterator iter= javaElements.iterator(); iter.hasNext();) {
-			IJavaElement element= (IJavaElement) iter.next();
+	public static Map<ICompilationUnit, List<IJavaElement>> groupByCompilationUnit(List<IJavaElement> javaElements){
+		Map<ICompilationUnit, List<IJavaElement>> result= new HashMap<ICompilationUnit, List<IJavaElement>>();
+		for (Iterator<IJavaElement> iter= javaElements.iterator(); iter.hasNext();) {
+			IJavaElement element= iter.next();
 			ICompilationUnit cu= ReorgUtils.getCompilationUnit(element);
 			if (cu != null){
 				if (! result.containsKey(cu))
-					result.put(cu, new ArrayList(1));
-				((List)result.get(cu)).add(element);
+					result.put(cu, new ArrayList<IJavaElement>(1));
+				result.get(cu).add(element);
 			}
 		}
 		return result;
 	}
 
-	public static void splitIntoJavaElementsAndResources(Object[] elements, List javaElementResult, List resourceResult) {
+	public static void splitIntoJavaElementsAndResources(Object[] elements, List<? super IJavaElement> javaElementResult, List<? super IResource> resourceResult) {
 		for (int i= 0; i < elements.length; i++) {
 			Object element= elements[i];
 			if (element instanceof IJavaElement) {
-				javaElementResult.add(element);
+				javaElementResult.add((IJavaElement) element);
 			} else if (element instanceof IResource) {
 				IResource resource= (IResource)element;
 				IJavaElement jElement= JavaCore.create(resource);
@@ -608,7 +602,7 @@ public class ReorgUtils {
 		}
 	}
 
-	public static boolean containsElementOrParent(Set elements, IJavaElement element) {
+	public static boolean containsElementOrParent(Set<IAdaptable> elements, IJavaElement element) {
 		IJavaElement curr= element;
 		do {
 			if (elements.contains(curr))
@@ -618,7 +612,7 @@ public class ReorgUtils {
 		return false;
 	}
 
-	public static boolean containsElementOrParent(Set elements, IResource element) {
+	public static boolean containsElementOrParent(Set<IAdaptable> elements, IResource element) {
 		IResource curr= element;
 		do {
 			if (elements.contains(curr))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java
index 3fb4f5e..04b9893 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,8 @@ package org.eclipse.jdt.internal.corext.refactoring.reorg;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
@@ -50,7 +48,7 @@ public class SourceReferenceUtil {
 		return null;
 	}
 
-	private static boolean hasParentInSet(IJavaElement elem, Set set){
+	private static boolean hasParentInSet(IJavaElement elem, Set<ISourceReference> set){
 		IJavaElement parent= elem.getParent();
 		while (parent != null) {
 			if (set.contains(parent))
@@ -61,8 +59,8 @@ public class SourceReferenceUtil {
 	}
 
 	public static ISourceReference[] removeAllWithParentsSelected(ISourceReference[] elems){
-		Set set= new HashSet(Arrays.asList(elems));
-		List result= new ArrayList(elems.length);
+		Set<ISourceReference> set= new HashSet<ISourceReference>(Arrays.asList(elems));
+		List<ISourceReference> result= new ArrayList<ISourceReference>(elems.length);
 		for (int i= 0; i < elems.length; i++) {
 			ISourceReference elem= elems[i];
 			if (! (elem instanceof IJavaElement))
@@ -72,30 +70,14 @@ public class SourceReferenceUtil {
 					result.add(elem);
 			}
 		}
-		return (ISourceReference[]) result.toArray(new ISourceReference[result.size()]);
-	}
-
-	/**
-	 * @param elems the references
-	 * @return IFile -> List of ISourceReference (elements from that file)
-	 */
-	public static Map groupByFile(ISourceReference[] elems) {
-		Map map= new HashMap();
-		for (int i= 0; i < elems.length; i++) {
-			ISourceReference elem= elems[i];
-			IFile file= SourceReferenceUtil.getFile(elem);
-			if (! map.containsKey(file))
-				map.put(file, new ArrayList());
-			((List)map.get(file)).add(elem);
-		}
-		return map;
+		return result.toArray(new ISourceReference[result.size()]);
 	}
 
 	public static ISourceReference[] sortByOffset(ISourceReference[] methods){
-		Arrays.sort(methods, new Comparator(){
-			public int compare(Object o1, Object o2){
+		Arrays.sort(methods, new Comparator<ISourceReference>(){
+			public int compare(ISourceReference o1, ISourceReference o2){
 				try{
-					return ((ISourceReference)o2).getSourceRange().getOffset() - ((ISourceReference)o1).getSourceRange().getOffset();
+					return o2.getSourceRange().getOffset() - o1.getSourceRange().getOffset();
 				} catch (JavaModelException e){
 					return o2.hashCode() - o1.hashCode();
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeMethodSignatureRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeMethodSignatureRefactoringContribution.java
index 55496b1..2594a77 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeMethodSignatureRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeMethodSignatureRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class ChangeMethodSignatureRefactoringContribution extends JavaUIRe
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		ChangeSignatureProcessor processor= new ChangeSignatureProcessor(arguments, status);
 		return new ProcessorBasedRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createChangeMethodSignatureDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createChangeMethodSignatureDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeTypeRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeTypeRefactoringContribution.java
index 8486c9c..6ca7378 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeTypeRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ChangeTypeRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class ChangeTypeRefactoringContribution extends JavaUIRefactoringCo
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new ChangeTypeRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createGeneralizeTypeDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createGeneralizeTypeDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ConvertAnonymousRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ConvertAnonymousRefactoringContribution.java
index 9f1bad7..b3b52de 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ConvertAnonymousRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ConvertAnonymousRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class ConvertAnonymousRefactoringContribution extends JavaUIRefacto
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new ConvertAnonymousToNestedRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createConvertAnonymousDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createConvertAnonymousDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/CopyRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/CopyRefactoringContribution.java
index 3607b1c..cf49b1b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/CopyRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/CopyRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class CopyRefactoringContribution extends JavaUIRefactoringContribu
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(final JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		JavaCopyProcessor processor= new JavaCopyProcessor(arguments, status);
 		return new CopyRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createCopyDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createCopyDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/DeleteRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/DeleteRefactoringContribution.java
index a7677f5..2dce725 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/DeleteRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/DeleteRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class DeleteRefactoringContribution extends JavaUIRefactoringContri
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		JavaDeleteProcessor processor= new JavaDeleteProcessor(arguments, status);
 		return new DeleteRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createDeleteDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createDeleteDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractClassContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractClassContribution.java
index 5f4f8cc..5fbb1e3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractClassContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractClassContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,14 +35,17 @@ public class ExtractClassContribution extends JavaUIRefactoringContribution {
 	public ExtractClassContribution() {
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) throws IllegalArgumentException {
 		return RefactoringSignatureDescriptorFactory.createExtractClassDescriptor(project, description, comment, arguments, flags);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createExtractClassDescriptor();
 	}
 
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		if (!(descriptor instanceof ExtractClassDescriptor)) {
 			status.addFatalError(RefactoringCoreMessages.ExtractClassContribution_error_unknown_descriptor);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractConstantRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractConstantRefactoringContribution.java
index 789a38a..1a565db 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractConstantRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractConstantRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class ExtractConstantRefactoringContribution extends JavaUIRefactor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new ExtractConstantRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createExtractConstantDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createExtractConstantDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractInterfaceRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractInterfaceRefactoringContribution.java
index 5df1c3e..82c6b78 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractInterfaceRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractInterfaceRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class ExtractInterfaceRefactoringContribution extends JavaUIRefacto
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		ExtractInterfaceProcessor processor= new ExtractInterfaceProcessor(arguments, status);
 		return new ProcessorBasedRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createExtractInterfaceDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createExtractInterfaceDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractMethodRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractMethodRefactoringContribution.java
index 2c9aefa..03cb397 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractMethodRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractMethodRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class ExtractMethodRefactoringContribution extends JavaUIRefactorin
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new ExtractMethodRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createExtractMethodDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createExtractMethodDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractSupertypeRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractSupertypeRefactoringContribution.java
index bca4944..1ed8da4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractSupertypeRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractSupertypeRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class ExtractSupertypeRefactoringContribution extends JavaUIRefacto
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		ExtractSupertypeProcessor processor= new ExtractSupertypeProcessor(arguments, status);
 		return new ProcessorBasedRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createExtractSuperclassDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createExtractSuperclassDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractTempRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractTempRefactoringContribution.java
index a516e39..7155022 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractTempRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/ExtractTempRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class ExtractTempRefactoringContribution extends JavaUIRefactoringC
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new ExtractTempRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createExtractLocalDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createExtractLocalDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InferTypeArgumentsRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InferTypeArgumentsRefactoringContribution.java
index bb5944b..63e2ddf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InferTypeArgumentsRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InferTypeArgumentsRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class InferTypeArgumentsRefactoringContribution extends JavaUIRefac
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new InferTypeArgumentsRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createInferTypeArgumentsDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createInferTypeArgumentsDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineConstantRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineConstantRefactoringContribution.java
index 5b66be6..6b7b6f5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineConstantRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineConstantRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class InlineConstantRefactoringContribution extends JavaUIRefactori
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new InlineConstantRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createInlineConstantDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createInlineConstantDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java
index e5e32a5..f555eeb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,6 @@ import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
@@ -40,6 +39,7 @@ import org.eclipse.jdt.internal.corext.refactoring.code.InlineMethodRefactoring;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 
 /**
  * Refactoring contribution for the inline method refactoring.
@@ -51,6 +51,7 @@ public final class InlineMethodRefactoringContribution extends JavaUIRefactoring
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		int selectionStart= -1;
 		int selectionLength= -1;
@@ -58,8 +59,8 @@ public final class InlineMethodRefactoringContribution extends JavaUIRefactoring
 		CompilationUnit node= null;
 		if (descriptor instanceof InlineMethodDescriptor) {
 			InlineMethodDescriptor extended= (InlineMethodDescriptor) descriptor;
-			Map arguments= retrieveArgumentMap(extended);
-			final String selection= (String) arguments.get(JavaRefactoringDescriptorUtil.ATTRIBUTE_SELECTION);
+			Map<String, String> arguments= retrieveArgumentMap(extended);
+			final String selection= arguments.get(JavaRefactoringDescriptorUtil.ATTRIBUTE_SELECTION);
 			if (selection != null) {
 				int offset= -1;
 				int length= -1;
@@ -74,7 +75,7 @@ public final class InlineMethodRefactoringContribution extends JavaUIRefactoring
 				} else
 					throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), 0, Messages.format(RefactoringCoreMessages.InitializableRefactoring_illegal_argument, new Object[] { selection, JavaRefactoringDescriptorUtil.ATTRIBUTE_SELECTION}), null));
 			}
-			final String handle= (String) arguments.get(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT);
+			final String handle= arguments.get(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT);
 			if (handle != null) {
 				final IJavaElement element= JavaRefactoringDescriptorUtil.handleToElement(descriptor.getProject(), handle, false);
 				if (element == null || !element.exists())
@@ -99,7 +100,7 @@ public final class InlineMethodRefactoringContribution extends JavaUIRefactoring
 						unit= method.getCompilationUnit();
 					} else
 						throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), 0, Messages.format(RefactoringCoreMessages.InitializableRefactoring_illegal_argument, new Object[] { handle, JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT}), null));
-					final ASTParser parser= ASTParser.newParser(AST.JLS3);
+					final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 					parser.setResolveBindings(true);
 					parser.setSource(unit);
 					node= (CompilationUnit) parser.createAST(null);
@@ -114,6 +115,7 @@ public final class InlineMethodRefactoringContribution extends JavaUIRefactoring
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createInlineMethodDescriptor();
 	}
@@ -121,6 +123,7 @@ public final class InlineMethodRefactoringContribution extends JavaUIRefactoring
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final RefactoringDescriptor createDescriptor(final String id, final String project, final String description, final String comment, final Map arguments, final int flags) {
 		return RefactoringSignatureDescriptorFactory.createInlineMethodDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineTempRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineTempRefactoringContribution.java
index 4d6eec3..2137cf2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineTempRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineTempRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class InlineTempRefactoringContribution extends JavaUIRefactoringCo
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new InlineTempRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createInlineLocalVariableDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createInlineLocalVariableDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceFactoryRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceFactoryRefactoringContribution.java
index 626b7d5..bde2550 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceFactoryRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceFactoryRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class IntroduceFactoryRefactoringContribution extends JavaUIRefacto
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new IntroduceFactoryRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createIntroduceFactoryDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createIntroduceFactoryDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceIndirectionRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceIndirectionRefactoringContribution.java
index d3d0f3e..d83c55c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceIndirectionRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceIndirectionRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class IntroduceIndirectionRefactoringContribution extends JavaUIRef
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new IntroduceIndirectionRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createIntroduceIndirectionDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createIntroduceIndirectionDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterObjectContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterObjectContribution.java
index fb130e4..5dd2fba 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterObjectContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterObjectContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class IntroduceParameterObjectContribution extends JavaUIRefactoringContr
 	public IntroduceParameterObjectContribution() {
 	}
 
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		if (descriptor instanceof IntroduceParameterObjectDescriptor) {
 			IntroduceParameterObjectProcessor processor= new IntroduceParameterObjectProcessor((IntroduceParameterObjectDescriptor) descriptor);
@@ -38,10 +39,12 @@ public class IntroduceParameterObjectContribution extends JavaUIRefactoringContr
 		return null;
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterRefactoringContribution.java
index cbe5026..414766f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/IntroduceParameterRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class IntroduceParameterRefactoringContribution extends JavaUIRefac
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new IntroduceParameterRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createIntroduceParameterDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createIntroduceParameterDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMemberTypeRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMemberTypeRefactoringContribution.java
index f71ae70..56bb892 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMemberTypeRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMemberTypeRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class MoveMemberTypeRefactoringContribution extends JavaUIRefactori
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new MoveInnerToTopRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createConvertMemberTypeDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createConvertMemberTypeDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMethodRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMethodRefactoringContribution.java
index acf36a4..5d2ba5e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMethodRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveMethodRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class MoveMethodRefactoringContribution extends JavaUIRefactoringCo
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		MoveInstanceMethodProcessor processor= new MoveInstanceMethodProcessor(arguments, status);
 		return new MoveRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createMoveMethodDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createMoveMethodDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveRefactoringContribution.java
index 586381a..30b632b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class MoveRefactoringContribution extends JavaUIRefactoringContribu
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		JavaMoveProcessor processor= new JavaMoveProcessor(arguments, status);
 		return new MoveRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createMoveDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createMoveDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveStaticMembersRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveStaticMembersRefactoringContribution.java
index 3abd0f5..87f891d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveStaticMembersRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/MoveStaticMembersRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public final class MoveStaticMembersRefactoringContribution extends JavaUIRefact
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 
@@ -42,10 +43,12 @@ public final class MoveStaticMembersRefactoringContribution extends JavaUIRefact
 		return new MoveRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createMoveStaticMembersDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createMoveStaticMembersDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PromoteTempToFieldRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PromoteTempToFieldRefactoringContribution.java
index 76527d9..51fb6fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PromoteTempToFieldRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PromoteTempToFieldRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,15 +34,18 @@ public final class PromoteTempToFieldRefactoringContribution extends JavaUIRefac
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		return new PromoteTempToFieldRefactoring(arguments, status);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createConvertLocalVariableDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createConvertLocalVariableDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PullUpRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PullUpRefactoringContribution.java
index a29a655..b4230ac 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PullUpRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PullUpRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class PullUpRefactoringContribution extends JavaUIRefactoringContri
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		PullUpRefactoringProcessor processor= new PullUpRefactoringProcessor(arguments, status);
 		return new ProcessorBasedRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createPullUpDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createPullUpDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PushDownRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PushDownRefactoringContribution.java
index adc7d6b..711986b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PushDownRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/PushDownRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class PushDownRefactoringContribution extends JavaUIRefactoringCont
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		PushDownRefactoringProcessor processor= new PushDownRefactoringProcessor(arguments, status);
 		return new ProcessorBasedRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createPushDownDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createPushDownDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameCompilationUnitRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameCompilationUnitRefactoringContribution.java
index 24d1681..49adbde 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameCompilationUnitRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameCompilationUnitRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,16 +36,19 @@ public final class RenameCompilationUnitRefactoringContribution extends JavaUIRe
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameCompilationUnitProcessor processor= new RenameCompilationUnitProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_COMPILATION_UNIT);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameEnumConstRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameEnumConstRefactoringContribution.java
index 42a420b..39f8a75 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameEnumConstRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameEnumConstRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenameEnumConstRefactoringContribution extends JavaUIRefactor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameEnumConstProcessor processor= new RenameEnumConstProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_ENUM_CONSTANT);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameFieldRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameFieldRefactoringContribution.java
index d6d89c1..c3079cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameFieldRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameFieldRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenameFieldRefactoringContribution extends JavaUIRefactoringC
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameFieldProcessor processor= new RenameFieldProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_FIELD);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameJavaProjectRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameJavaProjectRefactoringContribution.java
index 93be0d4..f4ed229 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameJavaProjectRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameJavaProjectRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenameJavaProjectRefactoringContribution extends JavaUIRefact
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameJavaProjectProcessor processor= new RenameJavaProjectProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_JAVA_PROJECT);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameLocalVariableRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameLocalVariableRefactoringContribution.java
index add9592..9f17734 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameLocalVariableRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameLocalVariableRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenameLocalVariableRefactoringContribution extends JavaUIRefa
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameLocalVariableProcessor processor= new RenameLocalVariableProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_LOCAL_VARIABLE);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameMethodRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameMethodRefactoringContribution.java
index 50306e3..7df255a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameMethodRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameMethodRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public final class RenameMethodRefactoringContribution extends JavaUIRefactoring
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws JavaModelException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 
@@ -63,10 +64,12 @@ public final class RenameMethodRefactoringContribution extends JavaUIRefactoring
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_METHOD);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenamePackageRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenamePackageRefactoringContribution.java
index fd44b34..3e8b83d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenamePackageRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenamePackageRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenamePackageRefactoringContribution extends JavaUIRefactorin
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenamePackageProcessor processor= new RenamePackageProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_PACKAGE);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameSourceFolderRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameSourceFolderRefactoringContribution.java
index aa52eb8..d7996f3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameSourceFolderRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameSourceFolderRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenameSourceFolderRefactoringContribution extends JavaUIRefac
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameSourceFolderProcessor processor= new RenameSourceFolderProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_SOURCE_FOLDER);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeParameterRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeParameterRefactoringContribution.java
index 67048b4..8927e8c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeParameterRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeParameterRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenameTypeParameterRefactoringContribution extends JavaUIRefa
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameTypeParameterProcessor processor= new RenameTypeParameterProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_TYPE_PARAMETER);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeRefactoringContribution.java
index 10e315f..71cad3c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/RenameTypeRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class RenameTypeRefactoringContribution extends JavaUIRefactoringCo
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		RenameTypeProcessor processor= new RenameTypeProcessor(arguments, status);
 		return new RenameRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_TYPE);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(id, project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/SelfEncapsulateRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/SelfEncapsulateRefactoringContribution.java
index 87bd366..0cfce95 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/SelfEncapsulateRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/SelfEncapsulateRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,16 +34,19 @@ public final class SelfEncapsulateRefactoringContribution extends JavaUIRefactor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		SelfEncapsulateFieldRefactoring refactoring= new SelfEncapsulateFieldRefactoring(null);
 		status.merge(refactoring.initialize(new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor))));
 		return refactoring;
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createEncapsulateFieldDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createEncapsulateFieldDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/UseSupertypeRefactoringContribution.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/UseSupertypeRefactoringContribution.java
index 8576ef1..b6a47fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/UseSupertypeRefactoringContribution.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/UseSupertypeRefactoringContribution.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,16 +35,19 @@ public final class UseSupertypeRefactoringContribution extends JavaUIRefactoring
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Refactoring createRefactoring(JavaRefactoringDescriptor descriptor, RefactoringStatus status) throws CoreException {
 		JavaRefactoringArguments arguments= new JavaRefactoringArguments(descriptor.getProject(), retrieveArgumentMap(descriptor));
 		UseSuperTypeProcessor processor= new UseSuperTypeProcessor(arguments, status);
 		return new ProcessorBasedRefactoring(processor);
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createUseSupertypeDescriptor();
 	}
 
+	@Override
 	public RefactoringDescriptor createDescriptor(String id, String project, String description, String comment, Map arguments, int flags) {
 		return RefactoringSignatureDescriptorFactory.createUseSupertypeDescriptor(project, description, comment, arguments, flags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java
index ea5f3b7..6bb759d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 import org.eclipse.jdt.internal.corext.SourceRangeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
 
@@ -67,7 +68,7 @@ class AccessAnalyzer extends ASTVisitor {
 	private String fSetter;
 	private ASTRewrite fRewriter;
 	private ImportRewrite fImportRewriter;
-	private List fGroupDescriptions;
+	private List<TextEditGroup> fGroupDescriptions;
 	private RefactoringStatus fStatus;
 	private boolean fSetterMustReturnValue;
 	private boolean fEncapsulateDeclaringClass;
@@ -94,7 +95,7 @@ class AccessAnalyzer extends ASTVisitor {
 		fDeclaringClassBinding= declaringClass;
 		fRewriter= rewriter;
 		fImportRewriter= importRewrite;
-		fGroupDescriptions= new ArrayList();
+		fGroupDescriptions= new ArrayList<TextEditGroup>();
 		fGetter= refactoring.getGetterName();
 		fSetter= refactoring.getSetterName();
 		fEncapsulateDeclaringClass= refactoring.getEncapsulateDeclaringClass();
@@ -114,10 +115,11 @@ class AccessAnalyzer extends ASTVisitor {
 		return fStatus;
 	}
 
-	public List getGroupDescriptions() {
+	public List<TextEditGroup> getGroupDescriptions() {
 		return fGroupDescriptions;
 	}
 
+	@Override
 	public boolean visit(Assignment node) {
 		Expression lhs= node.getLeftHandSide();
 		if (!considerBinding(resolveBinding(lhs), lhs))
@@ -133,12 +135,11 @@ class AccessAnalyzer extends ASTVisitor {
 			Expression receiver= getReceiver(lhs);
 			if (receiver != null)
 				invocation.setExpression((Expression)fRewriter.createCopyTarget(receiver));
-			List arguments= invocation.arguments();
+			List<Expression> arguments= invocation.arguments();
 			if (node.getOperator() == Assignment.Operator.ASSIGN) {
-				arguments.add(fRewriter.createCopyTarget(node.getRightHandSide()));
+				arguments.add((Expression)fRewriter.createCopyTarget(node.getRightHandSide()));
 			} else {
 				// This is the compound assignment case: field+= 10;
-				boolean needsParentheses= ASTNodes.needsParentheses(node.getRightHandSide());
 				InfixExpression exp= ast.newInfixExpression();
 				exp.setOperator(ASTNodes.convertToInfixOperator(node.getOperator()));
 				MethodInvocation getter= ast.newMethodInvocation();
@@ -148,7 +149,8 @@ class AccessAnalyzer extends ASTVisitor {
 					getter.setExpression((Expression)fRewriter.createCopyTarget(receiver));
 				exp.setLeftOperand(getter);
 				Expression rhs= (Expression)fRewriter.createCopyTarget(node.getRightHandSide());
-				if (needsParentheses) {
+				if (NecessaryParenthesesChecker.needsParentheses(node.getRightHandSide(), exp, InfixExpression.RIGHT_OPERAND_PROPERTY)) {
+					//TODO: this introduces extra parentheses as the new 'exp' node doesn't have bindings
 					ParenthesizedExpression p= ast.newParenthesizedExpression();
 					p.setExpression(rhs);
 					rhs= p;
@@ -162,6 +164,7 @@ class AccessAnalyzer extends ASTVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(SimpleName node) {
 		if (!node.isDeclaration() && considerBinding(node.resolveBinding(), node)) {
 			fReferencingGetter= true;
@@ -173,6 +176,7 @@ class AccessAnalyzer extends ASTVisitor {
 		return true;
 	}
 
+	@Override
 	public boolean visit(ImportDeclaration node) {
 		if (considerBinding(node.resolveBinding(), node)) {
 			fRemoveStaticImport= true;
@@ -180,6 +184,7 @@ class AccessAnalyzer extends ASTVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(PrefixExpression node) {
 		Expression operand= node.getOperand();
 		if (!considerBinding(resolveBinding(operand), operand))
@@ -197,6 +202,7 @@ class AccessAnalyzer extends ASTVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(PostfixExpression node) {
 		Expression operand= node.getOperand();
 		if (!considerBinding(resolveBinding(operand), operand))
@@ -214,6 +220,7 @@ class AccessAnalyzer extends ASTVisitor {
 		return false;
 	}
 
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		String name= node.getName().getIdentifier();
 		if (name.equals(fGetter) || name.equals(fSetter))
@@ -221,6 +228,7 @@ class AccessAnalyzer extends ASTVisitor {
 		return true;
 	}
 
+	@Override
 	public void endVisit(CompilationUnit node) {
 		// If we don't had a static import to the field we don't
 		// have to add any, even if we generated a setter or
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java
index d19ce17..ca471ed 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -111,6 +111,7 @@ import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
@@ -143,8 +144,8 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 	private boolean fEncapsulateDeclaringClass;
 	private boolean fGenerateJavadoc;
 
-	private List fUsedReadNames;
-	private List fUsedModifyNames;
+	private List<IMethodBinding> fUsedReadNames;
+	private List<IMethodBinding> fUsedModifyNames;
 	private boolean fConsiderVisibility=true;
 
 	private static final String NO_NAME= ""; //$NON-NLS-1$
@@ -229,6 +230,7 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 
 	//----activation checking ----------------------------------------------------------
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		if (fVisibility < 0)
 			fVisibility= (fField.getFlags() & (Flags.AccPublic | Flags.AccProtected | Flags.AccPrivate));
@@ -236,7 +238,7 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		result.merge(Checks.checkAvailability(fField));
 		if (result.hasFatalError())
 			return result;
-		fRoot= new RefactoringASTParser(AST.JLS3).parse(fField.getCompilationUnit(), true, pm);
+		fRoot= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(fField.getCompilationUnit(), true, pm);
 		ISourceRange sourceRange= fField.getNameRange();
 		ASTNode node= NodeFinder.perform(fRoot, sourceRange.getOffset(), sourceRange.getLength());
 		if (node == null) {
@@ -292,7 +294,7 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		return result;
 	}
 
-	private static void checkName(RefactoringStatus status, String name, List usedNames, IType type, boolean reUseExistingField, IField field) {
+	private static void checkName(RefactoringStatus status, String name, List<IMethodBinding> usedNames, IType type, boolean reUseExistingField, IField field) {
 		if ("".equals(name)) { //$NON-NLS-1$
 			status.addFatalError(RefactoringCoreMessages.Checks_Choose_name);
 			return;
@@ -303,8 +305,8 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		} catch (JavaModelException e) {
 		}
 		status.merge(Checks.checkMethodName(name, field));
-		for (Iterator iter= usedNames.iterator(); iter.hasNext(); ) {
-			IMethodBinding method= (IMethodBinding)iter.next();
+		for (Iterator<IMethodBinding> iter= usedNames.iterator(); iter.hasNext(); ) {
+			IMethodBinding method= iter.next();
 			String selector= method.getName();
 			if (selector.equals(name)) {
 				if (!reUseExistingField) {
@@ -326,6 +328,7 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 				new String[] { BasicElementLabels.getJavaElementName(name), BasicElementLabels.getJavaElementName(type.getElementName())}));
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask(NO_NAME, 12);
 		pm.setTaskName(RefactoringCoreMessages.SelfEncapsulateField_checking_preconditions);
@@ -358,7 +361,7 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		IVariableBinding fieldIdentifier= fFieldDeclaration.resolveBinding();
 		ITypeBinding declaringClass=
 			((AbstractTypeDeclaration)ASTNodes.getParent(fFieldDeclaration, AbstractTypeDeclaration.class)).resolveBinding();
-		List ownerDescriptions= new ArrayList();
+		List<TextEditGroup> ownerDescriptions= new ArrayList<TextEditGroup>();
 		ICompilationUnit owner= fField.getCompilationUnit();
 		fImportRewrite= StubUtility.createImportRewrite(fRoot, true);
 
@@ -368,16 +371,16 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 			CompilationUnit root= null;
 			ASTRewrite rewriter= null;
 			ImportRewrite importRewrite;
-			List descriptions;
+			List<TextEditGroup> descriptions;
 			if (owner.equals(unit)) {
 				root= fRoot;
 				rewriter= fRewriter;
 				importRewrite= fImportRewrite;
 				descriptions= ownerDescriptions;
 			} else {
-				root= new RefactoringASTParser(AST.JLS3).parse(unit, true);
+				root= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(unit, true);
 				rewriter= ASTRewrite.create(root.getAST());
-				descriptions= new ArrayList();
+				descriptions= new ArrayList<TextEditGroup>();
 				importRewrite= StubUtility.createImportRewrite(root, true);
 			}
 			checkCompileErrors(result, root, unit);
@@ -409,19 +412,20 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		return result;
 	}
 
-	private void createEdits(ICompilationUnit unit, ASTRewrite rewriter, List groups, ImportRewrite importRewrite) throws CoreException {
+	private void createEdits(ICompilationUnit unit, ASTRewrite rewriter, List<TextEditGroup> groups, ImportRewrite importRewrite) throws CoreException {
 		TextChange change= fChangeManager.get(unit);
 		MultiTextEdit root= new MultiTextEdit();
 		change.setEdit(root);
 		root.addChild(importRewrite.rewriteImports(null));
 		root.addChild(rewriter.rewriteAST());
-		for (Iterator iter= groups.iterator(); iter.hasNext();) {
-			change.addTextEditGroup((TextEditGroup)iter.next());
+		for (Iterator<TextEditGroup> iter= groups.iterator(); iter.hasNext();) {
+			change.addTextEditGroup(iter.next());
 		}
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fField.getJavaProject();
 		if (javaProject != null)
@@ -470,6 +474,7 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.SelfEncapsulateField_name;
 	}
@@ -535,8 +540,8 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 	}
 
 	private void computeUsedNames() {
-		fUsedReadNames= new ArrayList(0);
-		fUsedModifyNames= new ArrayList(0);
+		fUsedReadNames= new ArrayList<IMethodBinding>(0);
+		fUsedModifyNames= new ArrayList<IMethodBinding>(0);
 		IVariableBinding binding= fFieldDeclaration.resolveBinding();
 		ITypeBinding type= binding.getType();
 		IMethodBinding[] methods= binding.getDeclaringClass().getDeclaredMethods();
@@ -551,15 +556,15 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		}
 	}
 
-	private List addGetterSetterChanges(CompilationUnit root, ASTRewrite rewriter, String lineDelimiter, boolean usingLocalSetter, boolean usingLocalGetter) throws CoreException {
-		List result= new ArrayList(2);
+	private List<TextEditGroup> addGetterSetterChanges(CompilationUnit root, ASTRewrite rewriter, String lineDelimiter, boolean usingLocalSetter, boolean usingLocalGetter) throws CoreException {
+		List<TextEditGroup> result= new ArrayList<TextEditGroup>(2);
 		AST ast= root.getAST();
 		FieldDeclaration decl= (FieldDeclaration)ASTNodes.getParent(fFieldDeclaration, ASTNode.FIELD_DECLARATION);
 		int position= 0;
 		int numberOfMethods= 0;
-		List members= ASTNodes.getBodyDeclarations(decl.getParent());
-		for (Iterator iter= members.iterator(); iter.hasNext();) {
-			BodyDeclaration element= (BodyDeclaration)iter.next();
+		List<BodyDeclaration> members= ASTNodes.getBodyDeclarations(decl.getParent());
+		for (Iterator<BodyDeclaration> iter= members.iterator(); iter.hasNext();) {
+			BodyDeclaration element= iter.next();
 			if (element.getNodeType() == ASTNode.METHOD_DECLARATION) {
 				if (fInsertionIndex == -1) {
 					break;
@@ -573,15 +578,15 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		}
 		TextEditGroup description;
 		ListRewrite rewrite= fRewriter.getListRewrite(decl.getParent(), getBodyDeclarationsProperty(decl.getParent()));
-		if (!JdtFlags.isFinal(fField) && !usingLocalSetter) {
-			description= new TextEditGroup(RefactoringCoreMessages.SelfEncapsulateField_add_setter);
+		if (!usingLocalGetter) {
+			description= new TextEditGroup(RefactoringCoreMessages.SelfEncapsulateField_add_getter);
 			result.add(description);
-			rewrite.insertAt(createSetterMethod(ast, rewriter, lineDelimiter), position++, description);
+			rewrite.insertAt(createGetterMethod(ast, rewriter, lineDelimiter), position++, description);
 		}
-		if (!usingLocalGetter){
-			description= new TextEditGroup(RefactoringCoreMessages.SelfEncapsulateField_add_getter);
+		if (!JdtFlags.isFinal(fField) && !usingLocalSetter) {
+			description= new TextEditGroup(RefactoringCoreMessages.SelfEncapsulateField_add_setter);
 			result.add(description);
-			rewrite.insertAt(createGetterMethod(ast, rewriter, lineDelimiter), position, description);
+			rewrite.insertAt(createSetterMethod(ast, rewriter, lineDelimiter), position, description);
 		}
 		if (!JdtFlags.isPrivate(fField))
 			result.add(makeDeclarationPrivate(rewriter, decl));
@@ -821,9 +826,9 @@ public class SelfEncapsulateFieldRefactoring extends Refactoring {
 		return checkName(fSetterName, fUsedModifyNames);
 	}
 
-	private static boolean checkName(String name, List usedNames) {
-		for (Iterator iter= usedNames.iterator(); iter.hasNext(); ) {
-			IMethodBinding method= (IMethodBinding)iter.next();
+	private static boolean checkName(String name, List<IMethodBinding> usedNames) {
+		for (Iterator<IMethodBinding> iter= usedNames.iterator(); iter.hasNext(); ) {
+			IMethodBinding method= iter.next();
 			String selector= method.getName();
 			if (selector.equals(name)) {
 				return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java
index 1992dd3..96e869d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,13 +61,13 @@ public class ASTNodeSearchUtil {
 	}
 
 	public static ASTNode[] getAstNodes(SearchMatch[] searchResults, CompilationUnit cuNode) {
-		List result= new ArrayList(searchResults.length);
+		List<ASTNode> result= new ArrayList<ASTNode>(searchResults.length);
 		for (int i= 0; i < searchResults.length; i++) {
 			ASTNode node= getAstNode(searchResults[i], cuNode);
 			if (node != null)
 				result.add(node);
 		}
-		return (ASTNode[]) result.toArray(new ASTNode[result.size()]);
+		return result.toArray(new ASTNode[result.size()]);
 	}
 
 	public static ASTNode getAstNode(SearchMatch searchResult, CompilationUnit cuNode) {
@@ -177,7 +177,7 @@ public class ASTNodeSearchUtil {
 		return (ClassInstanceCreation) ASTNodes.getParent(getNameNode(iType, cuNode), ClassInstanceCreation.class);
 	}
 
-	public static List getBodyDeclarationList(IType iType, CompilationUnit cuNode) throws JavaModelException {
+	public static List<BodyDeclaration> getBodyDeclarationList(IType iType, CompilationUnit cuNode) throws JavaModelException {
 		if (iType.isAnonymous())
 			return getClassInstanceCreationNode(iType, cuNode).getAnonymousClassDeclaration().bodyDeclarations();
 		else
@@ -248,13 +248,13 @@ public class ASTNodeSearchUtil {
 	}
 
 	public static ASTNode[] findNodes(SearchMatch[] searchResults, CompilationUnit cuNode) {
-		List result= new ArrayList(searchResults.length);
+		List<ASTNode> result= new ArrayList<ASTNode>(searchResults.length);
 		for (int i= 0; i < searchResults.length; i++) {
 			ASTNode node= findNode(searchResults[i], cuNode);
 			if (node != null)
 				result.add(node);
 		}
-		return (ASTNode[]) result.toArray(new ASTNode[result.size()]);
+		return result.toArray(new ASTNode[result.size()]);
 	}
 
 	public static ASTNode findNode(SearchMatch searchResult, CompilationUnit cuNode) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java
index c2ac92b..b9927e3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -93,9 +93,10 @@ import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.ChangeMethodSignatureDescriptor;
 import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
 import org.eclipse.jdt.core.refactoring.participants.ChangeMethodSignatureArguments;
-import org.eclipse.jdt.core.refactoring.participants.JavaParticipantManager;
 import org.eclipse.jdt.core.refactoring.participants.ChangeMethodSignatureArguments.Parameter;
 import org.eclipse.jdt.core.refactoring.participants.ChangeMethodSignatureArguments.ThrownException;
+import org.eclipse.jdt.core.refactoring.participants.IRefactoringProcessorIds;
+import org.eclipse.jdt.core.refactoring.participants.JavaParticipantManager;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.MethodReferenceMatch;
@@ -133,6 +134,7 @@ import org.eclipse.jdt.internal.corext.refactoring.base.JavaStringStatusContext;
 import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatusCodes;
 import org.eclipse.jdt.internal.corext.refactoring.base.ReferencesInBinaryContext;
 import org.eclipse.jdt.internal.corext.refactoring.changes.DynamicValidationRefactoringChange;
+import org.eclipse.jdt.internal.corext.refactoring.code.Invocations;
 import org.eclipse.jdt.internal.corext.refactoring.delegates.DelegateMethodCreator;
 import org.eclipse.jdt.internal.corext.refactoring.participants.JavaProcessors;
 import org.eclipse.jdt.internal.corext.refactoring.rename.MethodChecks;
@@ -153,6 +155,7 @@ import org.eclipse.jdt.internal.corext.util.SearchUtils;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 
@@ -166,10 +169,10 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	private static final String ATTRIBUTE_DELEGATE= "delegate"; //$NON-NLS-1$
 	private static final String ATTRIBUTE_DEPRECATE= "deprecate"; //$NON-NLS-1$
 
-	private List fParameterInfos;
+	private List<ParameterInfo> fParameterInfos;
 
 	private CompilationUnitRewrite fBaseCuRewrite;
-	private List fExceptionInfos;
+	private List<ExceptionInfo> fExceptionInfos;
 	private TextChangeManager fChangeManager;
 
 	private IMethod fMethod;
@@ -217,11 +220,11 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 	}
 
-	private static List createParameterInfoList(IMethod method) {
+	private static List<ParameterInfo> createParameterInfoList(IMethod method) {
 		try {
 			String[] typeNames= method.getParameterTypes();
 			String[] oldNames= method.getParameterNames();
-			List result= new ArrayList(typeNames.length);
+			List<ParameterInfo> result= new ArrayList<ParameterInfo>(typeNames.length);
 			for (int i= 0; i < oldNames.length; i++){
 				ParameterInfo parameterInfo;
 				if (i == oldNames.length - 1 && Flags.isVarargs(method.getFlags())) {
@@ -239,13 +242,14 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			return result;
 		} catch(JavaModelException e) {
 			JavaPlugin.log(e);
-			return new ArrayList(0);
+			return new ArrayList<ParameterInfo>(0);
 		}
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
 	 */
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.ChangeSignatureRefactoring_modify_Parameters;
 	}
@@ -321,14 +325,14 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	 *
 	 * @return List of <code>ParameterInfo</code> objects.
 	 */
-	public List getParameterInfos(){
+	public List<ParameterInfo> getParameterInfos(){
 		return fParameterInfos;
 	}
 
 	/**
 	 * @return List of <code>ExceptionInfo</code> objects.
 	 */
-	public List getExceptionInfos(){
+	public List<ExceptionInfo> getExceptionInfos(){
 		return fExceptionInfos;
 	}
 
@@ -457,8 +461,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	}
 
 	private boolean areParameterTypesSameAsInitial() {
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (! info.isAdded() && ! info.isDeleted() && info.isTypeNameChanged())
 				return false;
 		}
@@ -474,8 +478,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	}
 
 	private boolean areExceptionsSameAsInitial() {
-		for (Iterator iter= fExceptionInfos.iterator(); iter.hasNext();) {
-			ExceptionInfo info= (ExceptionInfo) iter.next();
+		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext();) {
+			ExceptionInfo info= iter.next();
 			if (! info.isOld())
 				return false;
 		}
@@ -484,8 +488,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 	private void checkParameterNamesAndValues(RefactoringStatus result) {
 		int i= 1;
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext(); i++) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext(); i++) {
+			ParameterInfo info= iter.next();
 			if (info.isDeleted())
 				continue;
 			checkParameterName(result, info, i);
@@ -558,9 +562,9 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 				// Vararg method can override method that takes an array as last argument
 				fOldVarargIndex= rippleMethod.getNumberOfParameters() - 1;
-				List notDeletedInfos= getNotDeletedInfos();
+				List<ParameterInfo> notDeletedInfos= getNotDeletedInfos();
 				for (int i= 0; i < notDeletedInfos.size(); i++) {
-					ParameterInfo info= (ParameterInfo) notDeletedInfos.get(i);
+					ParameterInfo info= notDeletedInfos.get(i);
 					if (fOldVarargIndex != -1 && info.getOldIndex() == fOldVarargIndex && ! info.isNewVarargs()) {
 						String rippleMethodType= rippleMethod.getDeclaringType().getFullyQualifiedName('.');
 						String message= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_ripple_cannot_convert_vararg, new Object[] { BasicElementLabels.getJavaElementName(info.getNewName()), BasicElementLabels.getJavaElementName(rippleMethodType)});
@@ -576,9 +580,9 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	private RefactoringStatus checkOriginalVarargs() throws JavaModelException {
 		if (JdtFlags.isVarargs(fMethod))
 			fOldVarargIndex= fMethod.getNumberOfParameters() - 1;
-		List notDeletedInfos= getNotDeletedInfos();
+		List<ParameterInfo> notDeletedInfos= getNotDeletedInfos();
 		for (int i= 0; i < notDeletedInfos.size(); i++) {
-			ParameterInfo info= (ParameterInfo) notDeletedInfos.get(i);
+			ParameterInfo info= notDeletedInfos.get(i);
 			if (info.isOldVarargs() && ! info.isNewVarargs())
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_cannot_convert_vararg, BasicElementLabels.getJavaElementName(info.getNewName())));
 			if (i != notDeletedInfos.size() - 1) {
@@ -596,22 +600,22 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 		RefactoringStatus result= new RefactoringStatus();
 		if (fReturnTypeInfo.isTypeNameChanged() && fReturnTypeInfo.getNewTypeBinding() != null) {
-			HashSet typeVariablesCollector= new HashSet();
+			HashSet<ITypeBinding> typeVariablesCollector= new HashSet<ITypeBinding>();
 			collectTypeVariables(fReturnTypeInfo.getNewTypeBinding(), typeVariablesCollector);
 			if (typeVariablesCollector.size() != 0) {
-				ITypeBinding first= (ITypeBinding) typeVariablesCollector.iterator().next();
+				ITypeBinding first= typeVariablesCollector.iterator().next();
 				String msg= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_return_type_contains_type_variable, new String[] {BasicElementLabels.getJavaElementName(fReturnTypeInfo.getNewTypeName()), BasicElementLabels.getJavaElementName(first.getName())});
 				result.addError(msg);
 			}
 		}
 
-		for (Iterator iter= getNotDeletedInfos().iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= getNotDeletedInfos().iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (info.isTypeNameChanged() && info.getNewTypeBinding() != null) {
-				HashSet typeVariablesCollector= new HashSet();
+				HashSet<ITypeBinding> typeVariablesCollector= new HashSet<ITypeBinding>();
 				collectTypeVariables(info.getNewTypeBinding(), typeVariablesCollector);
 				if (typeVariablesCollector.size() != 0) {
-					ITypeBinding first= (ITypeBinding) typeVariablesCollector.iterator().next();
+					ITypeBinding first= typeVariablesCollector.iterator().next();
 					String msg= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_parameter_type_contains_type_variable, new String[] {BasicElementLabels.getJavaElementName(info.getNewTypeName()), BasicElementLabels.getJavaElementName(info.getNewName()), BasicElementLabels.getJavaElementName(first.getName())});
 					result.addError(msg);
 				}
@@ -620,7 +624,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		return result;
 	}
 
-	private void collectTypeVariables(ITypeBinding typeBinding, Set typeVariablesCollector) {
+	private void collectTypeVariables(ITypeBinding typeBinding, Set<ITypeBinding> typeVariablesCollector) {
 		if (typeBinding.isTypeVariable()) {
 			typeVariablesCollector.add(typeBinding);
 			ITypeBinding[] typeBounds= typeBinding.getTypeBounds();
@@ -654,7 +658,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		int offset= cuBuff.length();
 		cuBuff.append(trimmed)
 			  .append(CONST_CLOSE);
-		ASTParser p= ASTParser.newParser(AST.JLS3);
+		ASTParser p= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		p.setSource(cuBuff.toString().toCharArray());
 		CompilationUnit cu= (CompilationUnit) p.createAST(null);
 		Selection selection= Selection.createFromStartLength(offset, trimmed.length());
@@ -674,7 +678,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		int offset= cuBuff.length();
 		cuBuff.append(trimmed)
 			  .append(");}}"); //$NON-NLS-1$
-		ASTParser p= ASTParser.newParser(AST.JLS3);
+		ASTParser p= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		p.setSource(cuBuff.toString().toCharArray());
 		CompilationUnit cu= (CompilationUnit) p.createAST(null);
 		Selection selection= Selection.createFromStartLength(offset, trimmed.length());
@@ -710,6 +714,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask("", 5); //$NON-NLS-1$
@@ -767,16 +772,16 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 	private RefactoringStatus createExceptionInfoList() {
 		if (fExceptionInfos == null || fExceptionInfos.isEmpty()) {
-			fExceptionInfos= new ArrayList(0);
+			fExceptionInfos= new ArrayList<ExceptionInfo>(0);
 			try {
 				ASTNode nameNode= NodeFinder.perform(fBaseCuRewrite.getRoot(), fMethod.getNameRange());
 				if (nameNode == null || !(nameNode instanceof Name) || !(nameNode.getParent() instanceof MethodDeclaration))
 					return null;
 				MethodDeclaration methodDeclaration= (MethodDeclaration) nameNode.getParent();
-				List exceptions= methodDeclaration.thrownExceptions();
-				List result= new ArrayList(exceptions.size());
+				List<Name> exceptions= methodDeclaration.thrownExceptions();
+				List<ExceptionInfo> result= new ArrayList<ExceptionInfo>(exceptions.size());
 				for (int i= 0; i < exceptions.size(); i++) {
-					Name name= (Name) exceptions.get(i);
+					Name name= exceptions.get(i);
 					ITypeBinding typeBinding= name.resolveTypeBinding();
 					if (typeBinding == null)
 						return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ChangeSignatureRefactoring_no_exception_binding);
@@ -794,6 +799,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.ChangeSignatureRefactoring_checking_preconditions, 8);
@@ -930,8 +936,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	private String getMethodThrows() {
 		final String throwsString= " throws "; //$NON-NLS-1$
 		StringBuffer buff= new StringBuffer(throwsString);
-		for (Iterator iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
-			ExceptionInfo info= (ExceptionInfo) iter.next();
+		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
+			ExceptionInfo info= iter.next();
 			if (! info.isDeleted()) {
 				buff.append(info.getElement().getElementName());
 				buff.append(", "); //$NON-NLS-1$
@@ -946,8 +952,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	private String getOldMethodThrows() {
 		final String throwsString= " throws "; //$NON-NLS-1$
 		StringBuffer buff= new StringBuffer(throwsString);
-		for (Iterator iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
-			ExceptionInfo info= (ExceptionInfo) iter.next();
+		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
+			ExceptionInfo info= iter.next();
 			if (! info.isAdded()) {
 				buff.append(info.getElement().getElementName());
 				buff.append(", "); //$NON-NLS-1$
@@ -960,10 +966,10 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	}
 
 	private void checkForDuplicateParameterNames(RefactoringStatus result){
-		Set found= new HashSet();
-		Set doubled= new HashSet();
-		for (Iterator iter = getNotDeletedInfos().iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo)iter.next();
+		Set<String> found= new HashSet<String>();
+		Set<String> doubled= new HashSet<String>();
+		for (Iterator<ParameterInfo> iter = getNotDeletedInfos().iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			String newName= info.getNewName();
 			if (found.contains(newName) && !doubled.contains(newName)){
 				result.addFatalError(Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_duplicate_name, BasicElementLabels.getJavaElementName(newName)));
@@ -993,7 +999,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		ICompilationUnit cu= getCu();
 		TextChange change= fChangeManager.get(cu);
 		String newCuSource= change.getPreviewContent(new NullProgressMonitor());
-		CompilationUnit newCUNode= new RefactoringASTParser(AST.JLS3).parse(newCuSource, cu, true, false, null);
+		CompilationUnit newCUNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(newCuSource, cu, true, false, null);
 		IProblem[] problems= RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, fBaseCuRewrite.getRoot());
 		RefactoringStatus result= new RefactoringStatus();
 		for (int i= 0; i < problems.length; i++) {
@@ -1021,8 +1027,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	private String getOldMethodParameters() {
 		StringBuffer buff= new StringBuffer();
 		int i= 0;
-		for (Iterator iter= getNotAddedInfos().iterator(); iter.hasNext(); i++) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= getNotAddedInfos().iterator(); iter.hasNext(); i++) {
+			ParameterInfo info= iter.next();
 			if (i != 0 )
 				buff.append(", ");  //$NON-NLS-1$
 			buff.append(createDeclarationString(info));
@@ -1033,8 +1039,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	private String getMethodParameters() {
 		StringBuffer buff= new StringBuffer();
 		int i= 0;
-		for (Iterator iter= getNotDeletedInfos().iterator(); iter.hasNext(); i++) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= getNotDeletedInfos().iterator(); iter.hasNext(); i++) {
+			ParameterInfo info= iter.next();
 			if (i != 0 )
 				buff.append(", ");  //$NON-NLS-1$
 			buff.append(createDeclarationString(info));
@@ -1042,41 +1048,41 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		return buff.toString();
 	}
 
-	private List getAddedInfos(){
-		List result= new ArrayList(1);
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+	private List<ParameterInfo> getAddedInfos(){
+		List<ParameterInfo> result= new ArrayList<ParameterInfo>(1);
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (info.isAdded())
 				result.add(info);
 		}
 		return result;
 	}
 
-	private List getDeletedInfos(){
-		List result= new ArrayList(1);
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+	private List<ParameterInfo> getDeletedInfos(){
+		List<ParameterInfo> result= new ArrayList<ParameterInfo>(1);
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (info.isDeleted())
 				result.add(info);
 		}
 		return result;
 	}
 
-	private List getNotAddedInfos(){
-		List all= new ArrayList(fParameterInfos);
+	private List<ParameterInfo> getNotAddedInfos(){
+		List<ParameterInfo> all= new ArrayList<ParameterInfo>(fParameterInfos);
 		all.removeAll(getAddedInfos());
 		return all;
 	}
 
-	private List getNotDeletedInfos(){
-		List all= new ArrayList(fParameterInfos);
+	private List<ParameterInfo> getNotDeletedInfos(){
+		List<ParameterInfo> all= new ArrayList<ParameterInfo>(fParameterInfos);
 		all.removeAll(getDeletedInfos());
 		return all;
 	}
 
 	private boolean areNamesSameAsInitial() {
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (info.isRenamed())
 				return false;
 		}
@@ -1085,8 +1091,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 	private boolean isOrderSameAsInitial(){
 		int i= 0;
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext(); i++) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext(); i++) {
+			ParameterInfo info= iter.next();
 			if (info.getOldIndex() != i) // includes info.isAdded()
 				return false;
 			if (info.isDeleted())
@@ -1115,7 +1121,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 	private RefactoringStatus checkParameterNamesInRippleMethods() throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
-		Set newParameterNames= getNewParameterNamesList();
+		Set<String> newParameterNames= getNewParameterNamesList();
 		for (int i= 0; i < fRippleMethods.length; i++) {
 			String[] paramNames= fRippleMethods[i].getParameterNames();
 			for (int j= 0; j < paramNames.length; j++) {
@@ -1130,26 +1136,26 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		return result;
 	}
 
-	private Set getNewParameterNamesList() {
-		Set oldNames= getOriginalParameterNames();
-		Set currentNames= getNamesOfNotDeletedParameters();
+	private Set<String> getNewParameterNamesList() {
+		Set<String> oldNames= getOriginalParameterNames();
+		Set<String> currentNames= getNamesOfNotDeletedParameters();
 		currentNames.removeAll(oldNames);
 		return currentNames;
 	}
 
-	private Set getNamesOfNotDeletedParameters() {
-		Set result= new HashSet();
-		for (Iterator iter= getNotDeletedInfos().iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+	private Set<String> getNamesOfNotDeletedParameters() {
+		Set<String> result= new HashSet<String>();
+		for (Iterator<ParameterInfo> iter= getNotDeletedInfos().iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			result.add(info.getNewName());
 		}
 		return result;
 	}
 
-	private Set getOriginalParameterNames() {
-		Set result= new HashSet();
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+	private Set<String> getOriginalParameterNames() {
+		Set<String> result= new HashSet<String>();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (! info.isAdded())
 				result.add(info.getOldName());
 		}
@@ -1179,6 +1185,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) {
 		pm.beginTask("", 1); //$NON-NLS-1$
 		try {
@@ -1190,12 +1197,12 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	}
 
 	private ChangeMethodSignatureArguments getParticipantArguments() {
-		ArrayList parameterList= new ArrayList();
-		List pis= getParameterInfos();
+		ArrayList<Parameter> parameterList= new ArrayList<Parameter>();
+		List<ParameterInfo> pis= getParameterInfos();
 		String[] originalParameterTypeSigs= fMethod.getParameterTypes();
 
-		for (Iterator iter= pis.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (!pi.isDeleted()) {
 				int oldIndex= pi.isAdded() ? -1 : pi.getOldIndex();
 				String newName= pi.getNewName();
@@ -1213,12 +1220,12 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				parameterList.add(new Parameter(oldIndex, newName, typeSig, defaultValue));
 			}
 		}
-		Parameter[] parameters= (Parameter[]) parameterList.toArray(new Parameter[parameterList.size()]);
+		Parameter[] parameters= parameterList.toArray(new Parameter[parameterList.size()]);
 
-		ArrayList exceptionList= new ArrayList();
-		List exceptionInfos= getExceptionInfos();
+		ArrayList<ThrownException> exceptionList= new ArrayList<ThrownException>();
+		List<ExceptionInfo> exceptionInfos= getExceptionInfos();
 		for (int i= 0; i < exceptionInfos.size(); i++) {
-			ExceptionInfo ei= (ExceptionInfo) exceptionInfos.get(i);
+			ExceptionInfo ei= exceptionInfos.get(i);
 			if (!ei.isDeleted()) {
 				int oldIndex= ei.isAdded() ? -1 : i;
 				String qualifiedTypeName= ei.getFullyQualifiedName();
@@ -1226,7 +1233,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				exceptionList.add(new ThrownException(oldIndex, newTypeSig));
 			}
 		}
-		ThrownException[] exceptions= (ThrownException[]) exceptionList.toArray(new ThrownException[exceptionList.size()]);
+		ThrownException[] exceptions= exceptionList.toArray(new ThrownException[exceptionList.size()]);
 		String returnTypeSig;
 		if (fReturnTypeInfo.isTypeNameChanged()) {
 			returnTypeSig= Signature.createTypeSignature(fReturnTypeInfo.getNewTypeName(), false);
@@ -1242,7 +1249,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 
 	public JavaRefactoringDescriptor createDescriptor() {
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fMethod.getJavaProject();
 		if (javaProject != null)
@@ -1266,8 +1273,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				JavaPlugin.log(exception);
 			}
 			int count= 1;
-			for (final Iterator iterator= fParameterInfos.iterator(); iterator.hasNext();) {
-				final ParameterInfo info= (ParameterInfo) iterator.next();
+			for (final Iterator<ParameterInfo> iterator= fParameterInfos.iterator(); iterator.hasNext();) {
+				final ParameterInfo info= iterator.next();
 				final StringBuffer buffer= new StringBuffer(64);
 				if (info.isAdded())
 					buffer.append("{added}"); //$NON-NLS-1$
@@ -1299,8 +1306,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				count++;
 			}
 			count= 1;
-			for (final Iterator iterator= fExceptionInfos.iterator(); iterator.hasNext();) {
-				final ExceptionInfo info= (ExceptionInfo) iterator.next();
+			for (final Iterator<ExceptionInfo> iterator= fExceptionInfos.iterator(); iterator.hasNext();) {
+				final ExceptionInfo info= iterator.next();
 				arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count, JavaRefactoringDescriptorUtil.elementToHandle(project,info.getElement()));
 				arguments.put(ATTRIBUTE_KIND + count, new Integer(info.getKind()).toString());
 				count++;
@@ -1338,11 +1345,11 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 		if (fReturnTypeInfo.isTypeNameChanged())
 			comment.addSetting(Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_new_return_type_pattern, BasicElementLabels.getJavaElementName(fReturnTypeInfo.getNewTypeName())));
-		List deleted= new ArrayList();
-		List added= new ArrayList();
-		List changed= new ArrayList();
-		for (final Iterator iterator= fParameterInfos.iterator(); iterator.hasNext();) {
-			final ParameterInfo info= (ParameterInfo) iterator.next();
+		List<String> deleted= new ArrayList<String>();
+		List<String> added= new ArrayList<String>();
+		List<String> changed= new ArrayList<String>();
+		for (final Iterator<ParameterInfo> iterator= fParameterInfos.iterator(); iterator.hasNext();) {
+			final ParameterInfo info= iterator.next();
 			if (info.isDeleted())
 				deleted.add(Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_deleted_parameter_pattern, new String[] { BasicElementLabels.getJavaElementName(info.getOldTypeName()), BasicElementLabels.getJavaElementName(info.getOldName())}));
 			else if (info.isAdded())
@@ -1351,25 +1358,25 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				changed.add(Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_changed_parameter_pattern, new String[] { BasicElementLabels.getJavaElementName(info.getOldTypeName()), BasicElementLabels.getJavaElementName(info.getOldName())}));
 		}
 		if (!added.isEmpty())
-			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_added_parameters, (String[]) added.toArray(new String[added.size()])));
+			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_added_parameters, added.toArray(new String[added.size()])));
 		if (!deleted.isEmpty())
-			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_removed_parameters, (String[]) deleted.toArray(new String[deleted.size()])));
+			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_removed_parameters, deleted.toArray(new String[deleted.size()])));
 		if (!changed.isEmpty())
-			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_changed_parameters, (String[]) changed.toArray(new String[changed.size()])));
+			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_changed_parameters, changed.toArray(new String[changed.size()])));
 		added.clear();
 		deleted.clear();
 		changed.clear();
-		for (final Iterator iterator= fExceptionInfos.iterator(); iterator.hasNext();) {
-			final ExceptionInfo info= (ExceptionInfo) iterator.next();
+		for (final Iterator<ExceptionInfo> iterator= fExceptionInfos.iterator(); iterator.hasNext();) {
+			final ExceptionInfo info= iterator.next();
 			if (info.isAdded())
 				added.add(info.getElement().getElementName());
 			else if (info.isDeleted())
 				deleted.add(info.getElement().getElementName());
 		}
 		if (!added.isEmpty())
-			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_added_exceptions, (String[]) added.toArray(new String[added.size()])));
+			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_added_exceptions, added.toArray(new String[added.size()])));
 		if (!deleted.isEmpty())
-			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_removed_exceptions, (String[]) deleted.toArray(new String[deleted.size()])));
+			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ChangeSignatureRefactoring_removed_exceptions, deleted.toArray(new String[deleted.size()])));
 		return comment;
 	}
 
@@ -1381,7 +1388,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		pm.beginTask(RefactoringCoreMessages.ChangeSignatureRefactoring_preview, 2);
 		fChangeManager= new TextChangeManager();
 		boolean isNoArgConstructor= isNoArgConstructor();
-		Map namedSubclassMapping= null;
+		Map<ICompilationUnit, Set<IType>> namedSubclassMapping= null;
 		if (isNoArgConstructor){
 			//create only when needed;
 			namedSubclassMapping= createNamedSubclassMapping(new SubProgressMonitor(pm, 1));
@@ -1405,24 +1412,24 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			ASTNode[] nodes= ASTNodeSearchUtil.findNodes(group.getSearchResults(), cuRewrite.getRoot());
 
 			//IntroduceParameterObjectRefactoring needs to update declarations first:
-			List/*<OccurrenceUpdate>*/ deferredUpdates= new ArrayList();
+			List<OccurrenceUpdate<? extends ASTNode>> deferredUpdates= new ArrayList<OccurrenceUpdate<? extends ASTNode>>();
 			for (int j= 0; j < nodes.length; j++) {
-				OccurrenceUpdate update= createOccurrenceUpdate(nodes[j], cuRewrite, result);
+				OccurrenceUpdate<? extends ASTNode> update= createOccurrenceUpdate(nodes[j], cuRewrite, result);
 				if (update instanceof DeclarationUpdate) {
 					update.updateNode();
 				} else {
 					deferredUpdates.add(update);
 				}
 			}
-			for (Iterator iter= deferredUpdates.iterator(); iter.hasNext();) {
-				((OccurrenceUpdate) iter.next()).updateNode();
+			for (Iterator<OccurrenceUpdate<? extends ASTNode>> iter= deferredUpdates.iterator(); iter.hasNext();) {
+				iter.next().updateNode();
 			}
 
 			if (isNoArgConstructor && namedSubclassMapping.containsKey(cu)){
 				//only non-anonymous subclasses may have noArgConstructors to modify - see bug 43444
-				Set subtypes= (Set)namedSubclassMapping.get(cu);
-				for (Iterator iter= subtypes.iterator(); iter.hasNext();) {
-					IType subtype= (IType) iter.next();
+				Set<IType> subtypes= namedSubclassMapping.get(cu);
+				for (Iterator<IType> iter= subtypes.iterator(); iter.hasNext();) {
+					IType subtype= iter.next();
 					AbstractTypeDeclaration subtypeNode= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(subtype, cuRewrite.getRoot());
 					if (subtypeNode != null)
 						modifyImplicitCallsToNoArgConstructor(subtypeNode, cuRewrite);
@@ -1437,18 +1444,17 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		return fChangeManager;
 	}
 
-	//Map<ICompilationUnit, Set<IType>>
-	private Map createNamedSubclassMapping(IProgressMonitor pm) throws JavaModelException{
+	private Map<ICompilationUnit, Set<IType>> createNamedSubclassMapping(IProgressMonitor pm) throws JavaModelException{
 		IType[] subclasses= getCachedTypeHierarchy(new SubProgressMonitor(pm, 1)).getSubclasses(fMethod.getDeclaringType());
-		Map result= new HashMap();
+		Map<ICompilationUnit, Set<IType>> result= new HashMap<ICompilationUnit, Set<IType>>();
 		for (int i= 0; i < subclasses.length; i++) {
 			IType subclass= subclasses[i];
 			if (subclass.isAnonymous())
 				continue;
 			ICompilationUnit cu= subclass.getCompilationUnit();
 			if (! result.containsKey(cu))
-				result.put(cu, new HashSet());
-			((Set)result.get(cu)).add(subclass);
+				result.put(cu, new HashSet<IType>());
+			result.get(cu).add(subclass);
 		}
 		return result;
 	}
@@ -1475,9 +1481,9 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	}
 
 	private void addArgumentsToNewSuperConstructorCall(SuperConstructorInvocation superCall, CompilationUnitRewrite cuRewrite) {
-		int i= 0;
-		for (Iterator iter= getNotDeletedInfos().iterator(); iter.hasNext(); i++) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		Iterator<ParameterInfo> iter= getNotDeletedInfos().iterator();
+		while (iter.hasNext()) {
+			ParameterInfo info= iter.next();
 			Expression newExpression= createNewExpression(info, getParameterInfos(), superCall.arguments(), cuRewrite, (MethodDeclaration) ASTNodes.getParent(superCall, MethodDeclaration.class));
 			if (newExpression != null)
 				superCall.arguments().add(newExpression);
@@ -1534,20 +1540,20 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 	private MethodDeclaration[] getAllConstructors(AbstractTypeDeclaration typeDeclaration) {
 		BodyDeclaration decl;
-		List result= new ArrayList(1);
-		for (Iterator it = typeDeclaration.bodyDeclarations().listIterator(); it.hasNext(); ) {
-			decl= (BodyDeclaration) it.next();
+		List<BodyDeclaration> result= new ArrayList<BodyDeclaration>(1);
+		for (Iterator<BodyDeclaration> it = typeDeclaration.bodyDeclarations().listIterator(); it.hasNext(); ) {
+			decl= it.next();
 			if (decl instanceof MethodDeclaration && ((MethodDeclaration) decl).isConstructor())
 				result.add(decl);
 		}
-		return (MethodDeclaration[]) result.toArray(new MethodDeclaration[result.size()]);
+		return result.toArray(new MethodDeclaration[result.size()]);
 	}
 
 	private boolean isNoArgConstructor() throws JavaModelException {
 		return fMethod.isConstructor() && fMethod.getNumberOfParameters() == 0;
 	}
 
-	private Expression createNewExpression(ParameterInfo info, List parameterInfos, List nodes, CompilationUnitRewrite cuRewrite, MethodDeclaration method) {
+	private Expression createNewExpression(ParameterInfo info, List<ParameterInfo> parameterInfos, List<Expression> nodes, CompilationUnitRewrite cuRewrite, MethodDeclaration method) {
 		if (info.isNewVarargs() && info.getDefaultValue().trim().length() == 0)
 			return null;
 		else {
@@ -1569,6 +1575,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	private SearchResultGroup[] findOccurrences(IProgressMonitor pm, ReferencesInBinaryContext binaryRefs, RefactoringStatus status) throws JavaModelException{
 		final boolean isConstructor= fMethod.isConstructor();
 		CuCollectingSearchRequestor requestor= new CuCollectingSearchRequestor(binaryRefs) {
+			@Override
 			protected void acceptSearchMatch(ICompilationUnit unit, SearchMatch match) throws CoreException {
 				// workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=27236 :
 				if (isConstructor && match instanceof MethodReferenceMatch) {
@@ -1611,20 +1618,24 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 	private static String createDeclarationString(ParameterInfo info) {
 		String newTypeName= info.getNewTypeName();
+		int varargsIndex= newTypeName.lastIndexOf("..."); //$NON-NLS-1$
+		if (varargsIndex != -1) {
+			newTypeName= newTypeName.substring(0, varargsIndex);
+		}
 		int index= newTypeName.lastIndexOf('.');
-		if (index != -1){
+		if (index != -1) {
 			newTypeName= newTypeName.substring(index+1);
 		}
-		return newTypeName + " " + info.getNewName(); //$NON-NLS-1$
+		return newTypeName + (varargsIndex != -1 ? "..." : "") + " " + info.getNewName(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
 
 	private static final boolean BUG_89686= true; //see bug 83693: Search for References to methods/constructors: do ranges include parameter lists?
 
-	private OccurrenceUpdate createOccurrenceUpdate(ASTNode node, CompilationUnitRewrite cuRewrite, RefactoringStatus result) {
+	private OccurrenceUpdate<? extends ASTNode> createOccurrenceUpdate(ASTNode node, CompilationUnitRewrite cuRewrite, RefactoringStatus result) {
 		if (BUG_89686 && node instanceof SimpleName && node.getParent() instanceof EnumConstantDeclaration)
 			node= node.getParent();
 
-		if (isReferenceNode(node))
+		if (Invocations.isInvocationWithArguments(node))
 			return new ReferenceUpdate(node, cuRewrite, result);
 
 		else if (node instanceof SimpleName && node.getParent() instanceof MethodDeclaration)
@@ -1640,22 +1651,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			return new NullOccurrenceUpdate(node, cuRewrite, result);
 	}
 
-	private static boolean isReferenceNode(ASTNode node){
-		switch (node.getNodeType()) {
-			case ASTNode.METHOD_INVOCATION :
-			case ASTNode.SUPER_METHOD_INVOCATION :
-			case ASTNode.CLASS_INSTANCE_CREATION :
-			case ASTNode.CONSTRUCTOR_INVOCATION :
-			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION :
-			case ASTNode.ENUM_CONSTANT_DECLARATION :
-				return true;
-
-			default :
-				return false;
-		}
-	}
-
-	abstract class OccurrenceUpdate {
+	abstract class OccurrenceUpdate<N extends ASTNode> {
 		protected final CompilationUnitRewrite fCuRewrite;
 		protected final TextEditGroup fDescription;
 		protected RefactoringStatus fResult;
@@ -1717,72 +1713,72 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			// }
 
 			ListRewrite listRewrite= getParamgumentsRewrite();
-			Map newOldMap= new LinkedHashMap();
-			List nodes= listRewrite.getRewrittenList();
-			Iterator rewriteIter= nodes.iterator();
-			List original= listRewrite.getOriginalList();
-			for (Iterator iter= original.iterator(); iter.hasNext();) {
+			Map<N, N> newOldMap= new LinkedHashMap<N, N>();
+			List<N> nodes= listRewrite.getRewrittenList();
+			Iterator<N> rewriteIter= nodes.iterator();
+			List<N> original= listRewrite.getOriginalList();
+			for (Iterator<N> iter= original.iterator(); iter.hasNext();) {
 				newOldMap.put(rewriteIter.next(),iter.next());
 			}
-			List newNodes= new ArrayList();
+			List<N> newNodes= new ArrayList<N>();
 			// register removed nodes, and collect nodes in new sequence:
 			for (int i= 0; i < fParameterInfos.size(); i++) {
-				ParameterInfo info= (ParameterInfo) fParameterInfos.get(i);
+				ParameterInfo info= fParameterInfos.get(i);
 				int oldIndex= info.getOldIndex();
 
 				if (info.isDeleted()) {
 					if (oldIndex != fOldVarargIndex) {
-						registerImportRemoveNode((ASTNode) nodes.get(oldIndex));
+						registerImportRemoveNode(nodes.get(oldIndex));
 					} else {
 						//vararg deleted -> remove all remaining nodes:
 						for (int n= oldIndex; n < nodes.size(); n++) {
-							registerImportRemoveNode((ASTNode) nodes.get(n));
+							registerImportRemoveNode(nodes.get(n));
 						}
 					}
 
 				} else if (info.isAdded()) {
-					ASTNode newParamgument= createNewParamgument(info, fParameterInfos, nodes);
+					N newParamgument= createNewParamgument(info, fParameterInfos, nodes);
 					if (newParamgument != null)
 						newNodes.add(newParamgument);
 
 				} else /* parameter stays */ {
 					if (oldIndex != fOldVarargIndex) {
-						ASTNode oldNode= (ASTNode) nodes.get(oldIndex);
-						ASTNode movedNode= moveNode(oldNode, getASTRewrite());
+						N oldNode= nodes.get(oldIndex);
+						N movedNode= moveNode(oldNode, getASTRewrite());
 						newNodes.add(movedNode);
 					} else {
 						//vararg stays and is last parameter -> copy all remaining nodes:
 						for (int n= oldIndex; n < nodes.size(); n++) {
-							ASTNode oldNode= (ASTNode) nodes.get(n);
-							ASTNode movedNode= moveNode(oldNode, getASTRewrite());
+							N oldNode= nodes.get(n);
+							N movedNode= moveNode(oldNode, getASTRewrite());
 							newNodes.add(movedNode);
 						}
 					}
 				}
 			}
 
-			Iterator nodesIter= nodes.iterator();
-			Iterator newIter= newNodes.iterator();
+			Iterator<N> nodesIter= nodes.iterator();
+			Iterator<N> newIter= newNodes.iterator();
 			//replace existing nodes with new ones:
 			while (nodesIter.hasNext() && newIter.hasNext()) {
-				ASTNode node= (ASTNode) nodesIter.next();
-				ASTNode newNode= (ASTNode) newIter.next();
+				ASTNode node= nodesIter.next();
+				ASTNode newNode= newIter.next();
 				if (!ASTNodes.isExistingNode(node)) //XXX:should better be addressed in ListRewriteEvent.replaceEntry(ASTNode, ASTNode)
-					listRewrite.replace((ASTNode) newOldMap.get(node), newNode, fDescription);
+					listRewrite.replace(newOldMap.get(node), newNode, fDescription);
 				else
 					listRewrite.replace(node, newNode, fDescription);
 			}
 			//remove remaining existing nodes:
 			while (nodesIter.hasNext()) {
-				ASTNode node= (ASTNode) nodesIter.next();
+				ASTNode node= nodesIter.next();
 				if (!ASTNodes.isExistingNode(node))
-					listRewrite.remove((ASTNode) newOldMap.get(node), fDescription);
+					listRewrite.remove(newOldMap.get(node), fDescription);
 				else
 					listRewrite.remove(node, fDescription);
 			}
 			//add additional new nodes:
 			while (newIter.hasNext()) {
-				ASTNode node= (ASTNode) newIter.next();
+				ASTNode node= newIter.next();
 				listRewrite.insertLast(node, fDescription);
 			}
 		}
@@ -1793,8 +1789,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		protected abstract ListRewrite getParamgumentsRewrite();
 
 		protected final void changeParamguments() {
-			for (Iterator iter= getParameterInfos().iterator(); iter.hasNext();) {
-				ParameterInfo info= (ParameterInfo) iter.next();
+			for (Iterator<ParameterInfo> iter= getParameterInfos().iterator(); iter.hasNext();) {
+				ParameterInfo info= iter.next();
 				if (info.isAdded() || info.isDeleted())
 					continue;
 
@@ -1833,7 +1829,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		 * @param nodes TODO
 		 * @return a new method parameter or argument, or <code>null</code> for an empty vararg argument
 		 */
-		protected abstract ASTNode createNewParamgument(ParameterInfo info, List parameterInfos, List nodes);
+		protected abstract N createNewParamgument(ParameterInfo info, List<ParameterInfo> parameterInfos, List<N> nodes);
 
 		protected abstract SimpleName getMethodNameNode();
 
@@ -1867,7 +1863,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 	}
 
-	class ReferenceUpdate extends OccurrenceUpdate {
+	class ReferenceUpdate extends OccurrenceUpdate<Expression> {
 		/** isReferenceNode(fNode) */
 		private ASTNode fNode;
 
@@ -1876,35 +1872,20 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			fNode= node; //holds: Assert.isTrue(isReferenceNode(node));
 		}
 
+		@Override
 		public void updateNode() {
 			reshuffleElements();
 			changeMethodName();
 		}
 
 		/** @return {@inheritDoc} (element type: Expression) */
+		@Override
 		protected ListRewrite getParamgumentsRewrite() {
-			if (fNode instanceof MethodInvocation)
-				return getASTRewrite().getListRewrite(fNode, MethodInvocation.ARGUMENTS_PROPERTY);
-
-			if (fNode instanceof SuperMethodInvocation)
-				return getASTRewrite().getListRewrite(fNode, SuperMethodInvocation.ARGUMENTS_PROPERTY);
-
-			if (fNode instanceof ClassInstanceCreation)
-				return getASTRewrite().getListRewrite(fNode, ClassInstanceCreation.ARGUMENTS_PROPERTY);
-
-			if (fNode instanceof ConstructorInvocation)
-				return getASTRewrite().getListRewrite(fNode, ConstructorInvocation.ARGUMENTS_PROPERTY);
-
-			if (fNode instanceof SuperConstructorInvocation)
-				return getASTRewrite().getListRewrite(fNode, SuperConstructorInvocation.ARGUMENTS_PROPERTY);
-
-			if (fNode instanceof EnumConstantDeclaration)
-				return getASTRewrite().getListRewrite(fNode, EnumConstantDeclaration.ARGUMENTS_PROPERTY);
-
-			return null;
+			return getASTRewrite().getListRewrite(fNode, Invocations.getArgumentsProperty(fNode));
 		}
 
-		protected ASTNode createNewParamgument(ParameterInfo info, List parameterInfos, List nodes) {
+		@Override
+		protected Expression createNewParamgument(ParameterInfo info, List<ParameterInfo> parameterInfos, List<Expression> nodes) {
 			CompilationUnitRewrite cuRewrite= getCompilationUnitRewrite();
 			MethodDeclaration declaration= (MethodDeclaration) ASTNodes.getParent(fNode, MethodDeclaration.class);
 			if (isRecursiveReference()) {
@@ -1913,13 +1894,14 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				return createNewExpression(info, parameterInfos, nodes, cuRewrite, declaration);
 		}
 
-		private Expression createNewExpressionRecursive(ParameterInfo info, List parameterInfos, List nodes, CompilationUnitRewrite cuRewrite, MethodDeclaration methodDeclaration) {
+		private Expression createNewExpressionRecursive(ParameterInfo info, List<ParameterInfo> parameterInfos, List<Expression> nodes, CompilationUnitRewrite cuRewrite, MethodDeclaration methodDeclaration) {
 			if (fDefaultValueAdvisor != null && info.isAdded()) {
 				return fDefaultValueAdvisor.createDefaultExpression(nodes, info, parameterInfos, methodDeclaration, true, cuRewrite);
 			}
 			return (Expression) getASTRewrite().createStringPlaceholder(info.getNewName(), ASTNode.METHOD_INVOCATION);
 		}
 
+		@Override
 		protected SimpleName getMethodNameNode() {
 			if (fNode instanceof MethodInvocation)
 				return ((MethodInvocation)fNode).getName();
@@ -1994,7 +1976,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 	}
 
-	class DeclarationUpdate extends OccurrenceUpdate {
+	class DeclarationUpdate extends OccurrenceUpdate<SingleVariableDeclaration> {
 		private MethodDeclaration fMethDecl;
 
 		protected DeclarationUpdate(MethodDeclaration decl, CompilationUnitRewrite cuRewrite, RefactoringStatus result) {
@@ -2003,11 +1985,13 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 
 		// Prevent import removing if delegate is created.
+		@Override
 		protected void registerImportRemoveNode(ASTNode node) {
 			if (!fDelegateUpdating)
 				super.registerImportRemoveNode(node);
 		}
 
+		@Override
 		public void updateNode() throws CoreException {
 			changeParamguments();
 
@@ -2059,10 +2043,12 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 
 		/** @return {@inheritDoc} (element type: SingleVariableDeclaration) */
+		@Override
 		protected ListRewrite getParamgumentsRewrite() {
 			return getASTRewrite().getListRewrite(fMethDecl, MethodDeclaration.PARAMETERS_PROPERTY);
 		}
 
+		@Override
 		protected void changeParamgumentName(ParameterInfo info) {
 			SingleVariableDeclaration param= (SingleVariableDeclaration) fMethDecl.parameters().get(info.getOldIndex());
 			if (! info.getOldName().equals(param.getName().getIdentifier()))
@@ -2079,6 +2065,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			}
 		}
 
+		@Override
 		protected void changeParamgumentType(ParameterInfo info) {
 			SingleVariableDeclaration oldParam= (SingleVariableDeclaration) fMethDecl.parameters().get(info.getOldIndex());
 			getASTRewrite().set(oldParam, SingleVariableDeclaration.VARARGS_PROPERTY, Boolean.valueOf(info.isNewVarargs()), fDescription);
@@ -2124,8 +2111,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 
 		private void changeExceptions() {
-			for (Iterator iter= fExceptionInfos.iterator(); iter.hasNext();) {
-				ExceptionInfo info= (ExceptionInfo) iter.next();
+			for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext();) {
+				ExceptionInfo info= iter.next();
 				if (info.isOld())
 					continue;
 				if (info.isDeleted())
@@ -2135,10 +2122,10 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			}
 		}
 
-		private void removeExceptionFromNodeList(ExceptionInfo toRemove, List exceptionsNodeList) {
+		private void removeExceptionFromNodeList(ExceptionInfo toRemove, List<Name> list) {
 			ITypeBinding typeToRemove= toRemove.getTypeBinding();
-			for (Iterator iter= exceptionsNodeList.iterator(); iter.hasNext(); ) {
-				Name currentName= (Name) iter.next();
+			for (Iterator<Name> iter= list.iterator(); iter.hasNext(); ) {
+				Name currentName= iter.next();
 				ITypeBinding currentType= currentName.resolveTypeBinding();
 				/* Maybe remove all subclasses of typeToRemove too.
 				 * Problem:
@@ -2159,7 +2146,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 		private void addExceptionToNodeList(ExceptionInfo exceptionInfo, ListRewrite exceptionListRewrite) {
 			String fullyQualified= exceptionInfo.getFullyQualifiedName();
-			for (Iterator iter= exceptionListRewrite.getOriginalList().iterator(); iter.hasNext(); ) {
+			for (Iterator<? extends ASTNode> iter= exceptionListRewrite.getOriginalList().iterator(); iter.hasNext(); ) {
 				Name exName= (Name) iter.next();
 				//XXX: existing superclasses of the added exception are redundant and could be removed
 				ITypeBinding typeBinding= exName.resolveTypeBinding();
@@ -2191,13 +2178,13 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			//add tags: only iff top of ripple; change and remove: always.
 			//TODO: should have preference for adding tags in (overriding) methods (with template: todo, inheritDoc, ...)
 
-			List tags= javadoc.tags(); // List of TagElement
+			List<TagElement> tags= javadoc.tags();
 			ListRewrite tagsRewrite= getASTRewrite().getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);
 
 			if (! isReturnTypeSameAsInitial()) {
 				if (PrimitiveType.VOID.toString().equals(fReturnTypeInfo.getNewTypeName())) {
 					for (int i = 0; i < tags.size(); i++) {
-						TagElement tag= (TagElement) tags.get(i);
+						TagElement tag= tags.get(i);
 						if (TagElement.TAG_RETURN.equals(tag.getTagName())) {
 							getASTRewrite().remove(tag, fDescription);
 							registerImportRemoveNode(tag);
@@ -2212,19 +2199,19 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			}
 
 			if (! (areNamesSameAsInitial() && isOrderSameAsInitial())) {
-				ArrayList paramTags= new ArrayList(); // <TagElement>, only not deleted tags with simpleName
+				ArrayList<TagElement> paramTags= new ArrayList<TagElement>(); // <TagElement>, only not deleted tags with simpleName
 				// delete & rename:
-				for (Iterator iter = tags.iterator(); iter.hasNext(); ) {
-					TagElement tag = (TagElement) iter.next();
+				for (Iterator<TagElement> iter = tags.iterator(); iter.hasNext(); ) {
+					TagElement tag = iter.next();
 					String tagName= tag.getTagName();
-					List fragments= tag.fragments();
+					List<? extends ASTNode> fragments= tag.fragments();
 					if (! (TagElement.TAG_PARAM.equals(tagName) && fragments.size() > 0 && fragments.get(0) instanceof SimpleName))
 						continue;
 					SimpleName simpleName= (SimpleName) fragments.get(0);
 					String identifier= simpleName.getIdentifier();
 					boolean removed= false;
 					for (int i= 0; i < fParameterInfos.size(); i++) {
-						ParameterInfo info= (ParameterInfo) fParameterInfos.get(i);
+						ParameterInfo info= fParameterInfos.get(i);
 						if (identifier.equals(info.getOldName())) {
 							if (info.isDeleted()) {
 								getASTRewrite().remove(tag, fDescription);
@@ -2248,8 +2235,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 					TagElement previousTag= findTagElementToInsertAfter(tags, TagElement.TAG_PARAM);
 					boolean first= true; // workaround for bug 92111: preserve first tag if possible
 					// reshuffle:
-					for (Iterator infoIter= fParameterInfos.iterator(); infoIter.hasNext();) {
-						ParameterInfo info= (ParameterInfo) infoIter.next();
+					for (Iterator<ParameterInfo> infoIter= fParameterInfos.iterator(); infoIter.hasNext();) {
+						ParameterInfo info= infoIter.next();
 						String oldName= info.getOldName();
 						String newName= info.getNewName();
 						if (info.isAdded()) {
@@ -2260,8 +2247,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 							insertTag(paramNode, previousTag, tagsRewrite);
 							previousTag= paramNode;
 						} else {
-							for (Iterator tagIter= paramTags.iterator(); tagIter.hasNext();) {
-								TagElement tag= (TagElement) tagIter.next();
+							for (Iterator<TagElement> tagIter= paramTags.iterator(); tagIter.hasNext();) {
+								TagElement tag= tagIter.next();
 								SimpleName tagName= (SimpleName) tag.fragments().get(0);
 								if (oldName.equals(tagName.getIdentifier())) {
 									tagIter.remove();
@@ -2279,8 +2266,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 						}
 					}
 					// params with bad names:
-					for (Iterator iter= paramTags.iterator(); iter.hasNext();) {
-						TagElement tag= (TagElement) iter.next();
+					for (Iterator<TagElement> iter= paramTags.iterator(); iter.hasNext();) {
+						TagElement tag= iter.next();
 						TagElement movedTag= (TagElement) getASTRewrite().createMoveTarget(tag);
 						getASTRewrite().remove(tag, fDescription);
 						insertTag(movedTag, previousTag, tagsRewrite);
@@ -2292,9 +2279,9 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 			if (! areExceptionsSameAsInitial()) {
 				// collect exceptionTags and remove deleted:
-				ArrayList exceptionTags= new ArrayList(); // <TagElement>, only not deleted tags with name
+				ArrayList<TagElement> exceptionTags= new ArrayList<TagElement>(); // <TagElement>, only not deleted tags with name
 				for (int i= 0; i < tags.size(); i++) {
-					TagElement tag= (TagElement) tags.get(i);
+					TagElement tag= tags.get(i);
 					if (! TagElement.TAG_THROWS.equals(tag.getTagName()) && ! TagElement.TAG_EXCEPTION.equals(tag.getTagName()))
 						continue;
 					if (! (tag.fragments().size() > 0 && tag.fragments().get(0) instanceof Name))
@@ -2302,7 +2289,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 					boolean tagDeleted= false;
 					Name name= (Name) tag.fragments().get(0);
 					for (int j= 0; j < fExceptionInfos.size(); j++) {
-						ExceptionInfo info= (ExceptionInfo) fExceptionInfos.get(j);
+						ExceptionInfo info= fExceptionInfos.get(j);
 						if (info.isDeleted()) {
 							boolean remove= false;
 							final ITypeBinding nameBinding= name.resolveTypeBinding();
@@ -2327,8 +2314,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				// reshuffle:
 				tags= tagsRewrite.getRewrittenList();
 				TagElement previousTag= findTagElementToInsertAfter(tags, TagElement.TAG_THROWS);
-				for (Iterator infoIter= fExceptionInfos.iterator(); infoIter.hasNext();) {
-					ExceptionInfo info= (ExceptionInfo) infoIter.next();
+				for (Iterator<ExceptionInfo> infoIter= fExceptionInfos.iterator(); infoIter.hasNext();) {
+					ExceptionInfo info= infoIter.next();
 					if (info.isAdded()) {
 						if (!isTopOfRipple)
 							continue;
@@ -2336,8 +2323,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 						insertTag(excptNode, previousTag, tagsRewrite);
 						previousTag= excptNode;
 					} else {
-						for (Iterator tagIter= exceptionTags.iterator(); tagIter.hasNext();) {
-							TagElement tag= (TagElement) tagIter.next();
+						for (Iterator<TagElement> tagIter= exceptionTags.iterator(); tagIter.hasNext();) {
+							TagElement tag= tagIter.next();
 							Name tagName= (Name) tag.fragments().get(0);
 							final ITypeBinding nameBinding= tagName.resolveTypeBinding();
 							if (nameBinding != null) {
@@ -2359,8 +2346,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 					}
 				}
 				// exceptions with bad names:
-				for (Iterator iter= exceptionTags.iterator(); iter.hasNext();) {
-					TagElement tag= (TagElement) iter.next();
+				for (Iterator<TagElement> iter= exceptionTags.iterator(); iter.hasNext();) {
+					TagElement tag= iter.next();
 					TagElement movedTag= (TagElement) getASTRewrite().createMoveTarget(tag);
 					getASTRewrite().remove(tag, fDescription);
 					insertTag(movedTag, previousTag, tagsRewrite);
@@ -2411,8 +2398,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		 * @return the <code>TagElement<code> just before a new <code>TagElement</code> with name <code>tagName</code>,
 		 *   or <code>null</code>.
 		 */
-		private TagElement findTagElementToInsertAfter(List tags, String tagName) {
-			List tagOrder= Arrays.asList(new String[] {
+		private TagElement findTagElementToInsertAfter(List<TagElement> tags, String tagName) {
+			List<String> tagOrder= Arrays.asList(new String[] {
 					TagElement.TAG_AUTHOR,
 					TagElement.TAG_VERSION,
 					TagElement.TAG_PARAM,
@@ -2431,7 +2418,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			if (goalOrdinal == -1) // unknown tag -> to end
 				return (tags.size() == 0) ? null : (TagElement) tags.get(tags.size());
 			for (int i= 0; i < tags.size(); i++) {
-				int tagOrdinal= tagOrder.indexOf(((TagElement) tags.get(i)).getTagName());
+				int tagOrdinal= tagOrder.indexOf(tags.get(i).getTagName());
 				if (tagOrdinal >= goalOrdinal)
 					return (i == 0) ? null : (TagElement) tags.get(i-1);
 			}
@@ -2440,8 +2427,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 
 		//TODO: already reported as compilation error -> don't report there?
 		private void checkIfDeletedParametersUsed() {
-			for (Iterator iter= getDeletedInfos().iterator(); iter.hasNext();) {
-				ParameterInfo info= (ParameterInfo) iter.next();
+			for (Iterator<ParameterInfo> iter= getDeletedInfos().iterator(); iter.hasNext();) {
+				ParameterInfo info= iter.next();
 				SingleVariableDeclaration paramDecl= (SingleVariableDeclaration) fMethDecl.parameters().get(info.getOldIndex());
 				TempOccurrenceAnalyzer analyzer= new TempOccurrenceAnalyzer(paramDecl, false);
 				analyzer.perform();
@@ -2475,7 +2462,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			}
 		}
 
-		protected ASTNode createNewParamgument(ParameterInfo info, List parameterInfos, List nodes) {
+		@Override
+		protected SingleVariableDeclaration createNewParamgument(ParameterInfo info, List<ParameterInfo> parameterInfos, List<SingleVariableDeclaration> nodes) {
 			return createNewSingleVariableDeclaration(info);
 		}
 
@@ -2487,13 +2475,14 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			return newP;
 		}
 
+		@Override
 		protected SimpleName getMethodNameNode() {
 			return fMethDecl.getName();
 		}
 
 	}
 
-	class DocReferenceUpdate extends OccurrenceUpdate {
+	class DocReferenceUpdate extends OccurrenceUpdate<MethodRefParameter> {
 		/** instanceof MemberRef || MethodRef */
 		private ASTNode fNode;
 
@@ -2502,6 +2491,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			fNode= node;
 		}
 
+		@Override
 		public void updateNode() {
 			if (fNode instanceof MethodRef) {
 				changeParamguments();
@@ -2511,7 +2501,8 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				changeMethodName();
 		}
 
-		protected ASTNode createNewParamgument(ParameterInfo info, List parameterInfos, List nodes) {
+		@Override
+		protected MethodRefParameter createNewParamgument(ParameterInfo info, List<ParameterInfo> parameterInfos, List<MethodRefParameter> nodes) {
 			return createNewMethodRefParameter(info);
 		}
 
@@ -2519,7 +2510,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			MethodRefParameter newP= getASTRewrite().getAST().newMethodRefParameter();
 
 			// only add name iff first parameter already has a name:
-			List parameters= getParamgumentsRewrite().getOriginalList();
+			List<? extends ASTNode> parameters= getParamgumentsRewrite().getOriginalList();
 			if (parameters.size() > 0)
 				if (((MethodRefParameter) parameters.get(0)).getName() != null)
 					newP.setName(getASTRewrite().getAST().newSimpleName(info.getNewName()));
@@ -2537,6 +2528,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			return createNewTypeNode(newTypeName, newTypeBinding);
 		}
 
+		@Override
 		protected SimpleName getMethodNameNode() {
 			if (fNode instanceof MemberRef)
 				return ((MemberRef) fNode).getName();
@@ -2548,10 +2540,12 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 
 		/** @return {@inheritDoc} (element type: MethodRefParameter) */
+		@Override
 		protected ListRewrite getParamgumentsRewrite() {
 			return getASTRewrite().getListRewrite(fNode, MethodRef.PARAMETERS_PROPERTY);
 		}
 
+		@Override
 		protected void changeParamgumentName(ParameterInfo info) {
 			if (! (fNode instanceof MethodRef))
 				return;
@@ -2562,6 +2556,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 				getASTRewrite().set(oldParamName, SimpleName.IDENTIFIER_PROPERTY, info.getNewName(), fDescription);
 		}
 
+		@Override
 		protected void changeParamgumentType(ParameterInfo info) {
 			if (! (fNode instanceof MethodRef))
 				return;
@@ -2587,7 +2582,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		}
 	}
 
-	class StaticImportUpdate extends OccurrenceUpdate {
+	class StaticImportUpdate extends OccurrenceUpdate<ASTNode> {
 
 		private final ImportDeclaration fImportDecl;
 
@@ -2596,6 +2591,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			fImportDecl= importDecl;
 		}
 
+		@Override
 		public void updateNode() throws JavaModelException {
 			ImportRewrite importRewrite= fCuRewrite.getImportRewrite();
 			QualifiedName name= (QualifiedName) fImportDecl.getName();
@@ -2603,25 +2599,29 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			importRewrite.addStaticImport(name.getQualifier().getFullyQualifiedName(), fMethodName, false);
 		}
 
+		@Override
 		protected ListRewrite getParamgumentsRewrite() {
 			return null;
 		}
 
-		protected ASTNode createNewParamgument(ParameterInfo info, List parameterInfos, List nodes) {
+		@Override
+		protected ASTNode createNewParamgument(ParameterInfo info, List<ParameterInfo> parameterInfos, List<ASTNode> nodes) {
 			return null;
 		}
 
+		@Override
 		protected SimpleName getMethodNameNode() {
 			return null;
 		}
 	}
 
-	class NullOccurrenceUpdate extends OccurrenceUpdate {
+	class NullOccurrenceUpdate extends OccurrenceUpdate<ASTNode> {
 		private ASTNode fNode;
 		protected NullOccurrenceUpdate(ASTNode node, CompilationUnitRewrite cuRewrite, RefactoringStatus result) {
 			super(cuRewrite, null, result);
 			fNode= node;
 		}
+		@Override
 		public void updateNode() throws JavaModelException {
 			int start= fNode.getStartPosition();
 			int length= fNode.getLength();
@@ -2630,12 +2630,15 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			JavaPlugin.log(new Exception(msg + ":\n" + fCuRewrite.getCu().getSource().substring(start, start + length))); //$NON-NLS-1$
 			fResult.addError(msg, JavaStatusContext.create(fCuRewrite.getCu(), fNode));
 		}
+		@Override
 		protected ListRewrite getParamgumentsRewrite() {
 			return null;
 		}
-		protected ASTNode createNewParamgument(ParameterInfo info, List parameterInfos, List nodes) {
+		@Override
+		protected ASTNode createNewParamgument(ParameterInfo info, List<ParameterInfo> parameterInfos, List<ASTNode> nodes) {
 			return null;
 		}
+		@Override
 		protected SimpleName getMethodNameNode() {
 			return null;
 		}
@@ -2684,7 +2687,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		int count= 1;
 		String attribute= ATTRIBUTE_PARAMETER + count;
 		String value= null;
-		fParameterInfos= new ArrayList(3);
+		fParameterInfos= new ArrayList<ParameterInfo>(3);
 		while ((value= arguments.getAttribute(attribute)) != null) {
 			StringTokenizer tokenizer= new StringTokenizer(value, " "); //$NON-NLS-1$
 			if (tokenizer.countTokens() < 6)
@@ -2718,7 +2721,7 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 			attribute= ATTRIBUTE_PARAMETER + count;
 		}
 		count= 1;
-		fExceptionInfos= new ArrayList(2);
+		fExceptionInfos= new ArrayList<ExceptionInfo>(2);
 		attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		while ((value= arguments.getAttribute(attribute)) != null) {
 			ExceptionInfo info= null;
@@ -2766,12 +2769,12 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 	 * @param rewrite an AST rewrite
 	 * @return the node to insert at the target location
 	 */
-	protected ASTNode moveNode(ASTNode oldNode, ASTRewrite rewrite) {
-		ASTNode movedNode;
+	protected <T extends ASTNode> T moveNode(T oldNode, ASTRewrite rewrite) {
+		T movedNode;
 		if (ASTNodes.isExistingNode(oldNode))
-			movedNode= rewrite.createMoveTarget(oldNode); //node must be one of ast
+			movedNode= (T) rewrite.createMoveTarget(oldNode); //node must be one of ast
 		else
-			movedNode= ASTNode.copySubtree(rewrite.getAST(), oldNode);
+			movedNode= (T) ASTNode.copySubtree(rewrite.getAST(), oldNode);
 		return movedNode;
 	}
 
@@ -2783,18 +2786,22 @@ public class ChangeSignatureProcessor extends RefactoringProcessor implements ID
 		fDefaultValueAdvisor= defaultValueAdvisor;
 	}
 
+	@Override
 	public Object[] getElements() {
 		return new Object[] { fMethod };
 	}
 
+	@Override
 	public String getIdentifier() {
-		return "org.eclipse.jdt.ui.changeMethodSignatureRefactoring"; //$NON-NLS-1$;
+		return IRefactoringProcessorIds.CHANGE_METHOD_SIGNATURE_PROCESSOR;
 	}
 
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isChangeSignatureAvailable(fMethod);
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants sharedParticipants) throws CoreException {
 		String[] affectedNatures= JavaProcessors.computeAffectedNatures(fMethod);
 		return JavaParticipantManager.loadChangeMethodSignatureParticipants(status, this, fMethod, getParticipantArguments(), null, affectedNatures, sharedParticipants);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java
index 7b901fb..1dfe371 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,8 +64,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer;
-import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
+import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.GeneralizeTypeDescriptor;
 import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
@@ -110,6 +110,7 @@ import org.eclipse.jdt.internal.corext.util.SearchUtils;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
@@ -120,7 +121,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 
 	private static final String ATTRIBUTE_TYPE= "type"; //$NON-NLS-1$
 
-	private final Map/*<ICompilationUnit, Collection<ITypeConstraint>>*/ fConstraintCache;
+	private final Map<ICompilationUnit, List<ITypeConstraint>> fConstraintCache;
 	/**
 	 * Offset of the selected text area.
 	 */
@@ -182,23 +183,23 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * the constraint var. corresponding to the text selection, and possibly additional
 	 * elements due to method overriding, method calls, etc.
 	 */
-	private Collection/*<ConstraintVariable>*/ fRelevantVars;
+	private Collection<ConstraintVariable> fRelevantVars;
 
 	/**
 	 * The set of types (other than the original type) that can be given to
 	 * the selected ASTNode.
 	 */
-	private final Collection/*<IType>*/ fValidTypes;
+	private final Collection<ITypeBinding> fValidTypes;
 
 	/**
 	 * The type constraints that are related to the selected ASTNode.
 	 */
-	private Collection/*<ITypeConstraint>*/ fRelevantConstraints;
+	private Collection<ITypeConstraint> fRelevantConstraints;
 
 	/**
 	 * All type constraints in affected compilation units.
 	 */
-	private Collection/*<ITypeConstraint>*/ fAllConstraints;
+	private Collection<ITypeConstraint> fAllConstraints;
 
 	/**
 	 * The name of the new type of the selected declaration.
@@ -213,7 +214,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	/**
 	 * Organizes SearchResults by CompilationUnit
 	 */
-	private Map/*<ICompilationUnit,SearchResultGroup>*/ fCuToSearchResultGroup= new HashMap();
+	private Map<ICompilationUnit, SearchResultGroup> fCuToSearchResultGroup= new HashMap<ICompilationUnit, SearchResultGroup>();
 
 
 	/**
@@ -261,8 +262,8 @@ public class ChangeTypeRefactoring extends Refactoring {
 		if (selectedType != null)
 			fSelectedTypeName= selectedType;
 
-		fConstraintCache= new HashMap();
-		fValidTypes= new HashSet();
+		fConstraintCache= new HashMap<ICompilationUnit, List<ITypeConstraint>>();
+		fValidTypes= new HashSet<ITypeBinding>();
 	}
 
     public ChangeTypeRefactoring(JavaRefactoringArguments arguments, RefactoringStatus status) {
@@ -276,6 +277,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkActivation(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		if (fCu == null || !fCu.isStructureKnown())
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ChangeTypeRefactoring_invalidSelection);
@@ -312,6 +314,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 			}
 
 			TypeConstraintFactory typeConstraintFactory = new TypeConstraintFactory(){
+				@Override
 				public boolean filter(ConstraintVariable v1, ConstraintVariable v2, ConstraintOperator o){
 					if (o.isStrictSubtypeOperator()) //TODO: explain why these can be excluded
 						return true;
@@ -388,9 +391,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 
 	private boolean checkOverriddenBinaryMethods() {
 		if (fMethodBinding != null){
-			Set declaringSupertypes= getDeclaringSuperTypes(fMethodBinding);
-			for (Iterator iter= declaringSupertypes.iterator(); iter.hasNext();) {
-				ITypeBinding superType= (ITypeBinding) iter.next();
+			Set<ITypeBinding> declaringSupertypes= getDeclaringSuperTypes(fMethodBinding);
+			for (Iterator<ITypeBinding> iter= declaringSupertypes.iterator(); iter.hasNext();) {
+				ITypeBinding superType= iter.next();
 				IMethodBinding overriddenMethod= findMethod(fMethodBinding, superType);
 				Assert.isNotNull(overriddenMethod);//because we asked for declaring types
 				IMethod iMethod= (IMethod) overriddenMethod.getJavaElement();
@@ -410,9 +413,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 	}
 
 	// copied from FullConstraintCreator
-	private static Set getDeclaringSuperTypes(IMethodBinding methodBinding) {
+	private static Set<ITypeBinding> getDeclaringSuperTypes(IMethodBinding methodBinding) {
 		ITypeBinding[] allSuperTypes= Bindings.getAllSuperTypes(methodBinding.getDeclaringClass());
-		Set result= new HashSet();
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
 		for (int i= 0; i < allSuperTypes.length; i++) {
 			ITypeBinding type= allSuperTypes[i];
 			if (findMethod(methodBinding, type) != null)
@@ -427,7 +430,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @param pm the progress monitor
 	 * @return the valid types
 	 */
-	public Collection/*<IType>*/ computeValidTypes(IProgressMonitor pm) {
+	public Collection<ITypeBinding> computeValidTypes(IProgressMonitor pm) {
 
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_checking_preconditions, 100);
 
@@ -469,6 +472,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.Refactoring#checkInput(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_checking_preconditions, 1);
 
@@ -482,12 +486,13 @@ public class ChangeTypeRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeMessages_CreateChangesForChangeType, 1);
 		try {
-			Map/* <ICompilationUnit,Set<ConstraintVariable>> */relevantVarsByUnit= new HashMap/* <ICompilationUnit,HashSet<ConstraintVariable>> */();
+			Map<ICompilationUnit, Set<ConstraintVariable>> relevantVarsByUnit= new HashMap<ICompilationUnit, Set<ConstraintVariable>>();
 			groupChangesByCompilationUnit(relevantVarsByUnit);
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			IJavaProject javaProject= fCu.getJavaProject();
 			if (javaProject != null)
@@ -503,9 +508,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 			arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_SELECTION, new Integer(fSelectionStart).toString() + " " + new Integer(fSelectionLength).toString()); //$NON-NLS-1$
 			arguments.put(ATTRIBUTE_TYPE, fSelectedType.getQualifiedName());
 			final DynamicValidationRefactoringChange result= new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.ChangeTypeRefactoring_allChanges);
-			for (Iterator/* <ICompilationUnit> */it= relevantVarsByUnit.keySet().iterator(); it.hasNext();) {
-				ICompilationUnit icu= (ICompilationUnit) it.next();
-				Set/* <ConstraintVariable> */cVars= (Set) relevantVarsByUnit.get(icu);
+			for (Iterator<ICompilationUnit>it= relevantVarsByUnit.keySet().iterator(); it.hasNext();) {
+				ICompilationUnit icu= it.next();
+				Set<ConstraintVariable> cVars= relevantVarsByUnit.get(icu);
 				CompilationUnitChange cuChange= new CompilationUnitChange(getName(), icu);
 				addAllChangesFor(icu, cVars, cuChange);
 				result.add(cuChange);
@@ -526,8 +531,8 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @param unitChange
 	 * @throws CoreException
 	 */
-	private void addAllChangesFor(ICompilationUnit icu, Set vars, CompilationUnitChange unitChange) throws CoreException {
-		CompilationUnit	unit= new RefactoringASTParser(AST.JLS3).parse(icu, false);
+	private void addAllChangesFor(ICompilationUnit icu, Set<ConstraintVariable> vars, CompilationUnitChange unitChange) throws CoreException {
+		CompilationUnit	unit= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(icu, false);
 		ASTRewrite unitRewriter= ASTRewrite.create(unit.getAST());
 		MultiTextEdit root= new MultiTextEdit();
 		unitChange.setEdit(root); // Adam sez don't need this, but then unitChange.addGroupDescription() fails an assertion!
@@ -538,19 +543,20 @@ public class ChangeTypeRefactoring extends Refactoring {
 	}
 
 	private class SourceRangeComputer extends TargetSourceRangeComputer {
+		@Override
 		public SourceRange computeSourceRange(ASTNode node) {
 			return new SourceRange(node.getStartPosition(),node.getLength());
 		}
 	}
 
-	private void updateCu(CompilationUnit unit, Set vars, CompilationUnitChange unitChange,
+	private void updateCu(CompilationUnit unit, Set<ConstraintVariable> vars, CompilationUnitChange unitChange,
 		ASTRewrite unitRewriter, String typeName) throws JavaModelException {
 
         // use custom SourceRangeComputer to avoid losing comments
 		unitRewriter.setTargetSourceRangeComputer(new SourceRangeComputer());
 
-		for (Iterator it=vars.iterator(); it.hasNext(); ){
-			ConstraintVariable cv = (ConstraintVariable)it.next();
+		for (Iterator<ConstraintVariable> it=vars.iterator(); it.hasNext(); ){
+			ConstraintVariable cv = it.next();
 			ASTNode decl= findDeclaration(unit, cv);
 			if ((decl instanceof SimpleName || decl instanceof QualifiedName) && cv instanceof ExpressionVariable) {
 				ASTNode gp= decl.getParent().getParent();
@@ -621,9 +627,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 
 
 
-	private void groupChangesByCompilationUnit(Map relevantVarsByUnit) {
-		for (Iterator it= fRelevantVars.iterator(); it.hasNext();) {
-			ConstraintVariable cv= (ConstraintVariable) it.next();
+	private void groupChangesByCompilationUnit(Map<ICompilationUnit, Set<ConstraintVariable>> relevantVarsByUnit) {
+		for (Iterator<ConstraintVariable> it= fRelevantVars.iterator(); it.hasNext();) {
+			ConstraintVariable cv= it.next();
 			if (!(cv instanceof ExpressionVariable) && !(cv instanceof ReturnTypeVariable)){
 				continue;
 			}
@@ -637,9 +643,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 				icu= ((IMethod) mb.getJavaElement()).getCompilationUnit();
 			}
 			if (!relevantVarsByUnit.containsKey(icu)){
-				relevantVarsByUnit.put(icu, new HashSet/*<ConstraintVariable>*/());
+				relevantVarsByUnit.put(icu, new HashSet<ConstraintVariable>());
 			}
-			((Set)relevantVarsByUnit.get(icu)).add(cv);
+			relevantVarsByUnit.get(icu).add(cv);
 		}
 	}
 
@@ -651,8 +657,8 @@ public class ChangeTypeRefactoring extends Refactoring {
 		}
 
 		if (cv instanceof ExpressionVariable){
-			for (Iterator iter= fAllConstraints.iterator(); iter.hasNext();) {
-				ITypeConstraint constraint= (ITypeConstraint) iter.next();
+			for (Iterator<ITypeConstraint> iter= fAllConstraints.iterator(); iter.hasNext();) {
+				ITypeConstraint constraint= iter.next();
 				if (constraint.isSimpleTypeConstraint()){
 					SimpleTypeConstraint stc= (SimpleTypeConstraint)constraint;
 					if (stc.isDefinesConstraint() && stc.getLeft().equals(cv)){
@@ -694,6 +700,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring#getName()
 	 */
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.ChangeTypeRefactoring_name;
 	}
@@ -960,13 +967,13 @@ public class ChangeTypeRefactoring extends Refactoring {
 			System.out.println("Effective selection: " + fEffectiveSelectionStart + "/" + fEffectiveSelectionLength); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 
-		Collection/*<ITypeConstraint>*/ allConstraints= getConstraints(cus, new SubProgressMonitor(pm, 50));
+		Collection<ITypeConstraint> allConstraints= getConstraints(cus, new SubProgressMonitor(pm, 50));
 
 		IProgressMonitor subMonitor= new SubProgressMonitor(pm, 50);
 		subMonitor.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, allConstraints.size());
-		for (Iterator it= allConstraints.iterator(); it.hasNext(); ) {
+		for (Iterator<ITypeConstraint> it= allConstraints.iterator(); it.hasNext(); ) {
 			subMonitor.worked(1);
-			ITypeConstraint tc= (ITypeConstraint)it.next();
+			ITypeConstraint tc= it.next();
 			if (! (tc instanceof SimpleTypeConstraint))
 				continue;
 			SimpleTypeConstraint stc= (SimpleTypeConstraint) tc;
@@ -1016,22 +1023,22 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @return the constraint variables
 	 * @throws CoreException
 	 */
-	private Collection/*<ConstraintVariable>*/ findRelevantConstraintVars(ConstraintVariable cv, IProgressMonitor pm) throws CoreException {
+	private Collection<ConstraintVariable> findRelevantConstraintVars(ConstraintVariable cv, IProgressMonitor pm) throws CoreException {
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, 150);
-		Collection/*<ConstraintVariable>*/ result= new HashSet();
+		Collection<ConstraintVariable> result= new HashSet<ConstraintVariable>();
 		result.add(cv);
 		ICompilationUnit[] cus= collectAffectedUnits(new SubProgressMonitor(pm, 50));
-		Collection/*<ITypeConstraint>*/ allConstraints= getConstraints(cus, new SubProgressMonitor(pm, 50));
+		Collection<ITypeConstraint> allConstraints= getConstraints(cus, new SubProgressMonitor(pm, 50));
 
-		List/*<ConstraintVariable>*/ workList= new ArrayList(result);
+		List<ConstraintVariable> workList= new ArrayList<ConstraintVariable>(result);
 		while(! workList.isEmpty()){
 
 			pm.worked(10);
 
-			ConstraintVariable first= (ConstraintVariable)workList.remove(0);
-			for (Iterator iter= allConstraints.iterator(); iter.hasNext();) {
+			ConstraintVariable first= workList.remove(0);
+			for (Iterator<ITypeConstraint> iter= allConstraints.iterator(); iter.hasNext();) {
 				pm.worked(1);
-				ITypeConstraint typeConstraint= (ITypeConstraint) iter.next();
+				ITypeConstraint typeConstraint= iter.next();
 				if (! typeConstraint.isSimpleTypeConstraint())
 					continue;
 				SimpleTypeConstraint stc= (SimpleTypeConstraint)typeConstraint;
@@ -1068,7 +1075,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @return the result
 	 * @throws CoreException
 	 */
-	private Collection/*<ITypeConstraint>*/ findRelevantConstraints(Collection/*<ConstraintVariable>*/ relevantConstraintVars,
+	private Collection<ITypeConstraint> findRelevantConstraints(Collection<ConstraintVariable> relevantConstraintVars,
 																	IProgressMonitor pm) throws CoreException {
 
 		ICompilationUnit[] cus= collectAffectedUnits(new SubProgressMonitor(pm, 100));
@@ -1079,9 +1086,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 
 
 		if (DEBUG) printCollection("type constraints: ", fAllConstraints); //$NON-NLS-1$
-		Collection/*<ITypeConstraint>*/ result= new ArrayList();
-		for (Iterator it= fAllConstraints.iterator(); it.hasNext(); ) {
-			ITypeConstraint tc= (ITypeConstraint)it.next();
+		Collection<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
+		for (Iterator<ITypeConstraint> it= fAllConstraints.iterator(); it.hasNext(); ) {
+			ITypeConstraint tc= it.next();
 			if (tc.isSimpleTypeConstraint()) {
 				SimpleTypeConstraint stc= (SimpleTypeConstraint) tc;
 				if (stc.isDefinesConstraint() || stc.isEqualsConstraint())
@@ -1125,12 +1132,12 @@ public class ChangeTypeRefactoring extends Refactoring {
 	}
 
 	// For debugging
-	static String print(Collection/*<ITypeBinding>*/ types){
+	static String print(Collection<ITypeBinding> types){
 		if (types.isEmpty())
 			return "{ }"; //$NON-NLS-1$
 		String result = "{ "; //$NON-NLS-1$
-		for (Iterator it=types.iterator(); it.hasNext(); ){
-			ITypeBinding type= (ITypeBinding)it.next();
+		for (Iterator<ITypeBinding> it=types.iterator(); it.hasNext(); ){
+			ITypeBinding type= it.next();
 			result += type.getQualifiedName();
 			if (it.hasNext()){
 				result += ", ";  //$NON-NLS-1$
@@ -1151,20 +1158,20 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @return the valid types
 	 * @throws JavaModelException
 	 */
-	private Collection/*<ITypeBinding>*/ computeValidTypes(ITypeBinding originalType,
-													Collection/*<ConstraintVariable>*/ relevantVars,
-													Collection/*<ITypeConstraint>*/ relevantConstraints,
+	private Collection<ITypeBinding> computeValidTypes(ITypeBinding originalType,
+													Collection<ConstraintVariable> relevantVars,
+													Collection<ITypeConstraint> relevantConstraints,
 													IProgressMonitor pm) throws JavaModelException {
 
-		Collection/*<ITypeBinding>*/ result= new HashSet();
+		Collection<ITypeBinding> result= new HashSet<ITypeBinding>();
 
-		Collection/*<ITypeBinding>*/ allTypes = new HashSet/*<IType>*/();
+		Collection<ITypeBinding> allTypes = new HashSet<ITypeBinding>();
 		allTypes.addAll(getAllSuperTypes(originalType));
 
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, allTypes.size());
 
-		for (Iterator/*<ITypeBinding>*/ it= allTypes.iterator(); it.hasNext(); ) {
-			ITypeBinding type= (ITypeBinding)it.next();
+		for (Iterator<ITypeBinding> it= allTypes.iterator(); it.hasNext(); ) {
+			ITypeBinding type= it.next();
 			if (isValid(type, relevantVars, relevantConstraints, new SubProgressMonitor(pm, 1))) {
 				result.add(type);
 			}
@@ -1190,12 +1197,12 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @throws JavaModelException
 	 */
 	private boolean isValid(ITypeBinding type,
-						    Collection/*<ConstraintVariable>*/ relevantVars,
-						    Collection/*<ITypeConstraint>*/ constraints,
+						    Collection<ConstraintVariable> relevantVars,
+						    Collection<ITypeConstraint> constraints,
 							IProgressMonitor pm) throws JavaModelException {
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, constraints.size());
-		for (Iterator it= constraints.iterator(); it.hasNext(); ) {
-			ITypeConstraint tc= (ITypeConstraint)it.next();
+		for (Iterator<ITypeConstraint> it= constraints.iterator(); it.hasNext(); ) {
+			ITypeConstraint tc= it.next();
 			if (tc instanceof SimpleTypeConstraint) {
 				if (!(isValidSimpleConstraint(type,  relevantVars, (SimpleTypeConstraint) tc)))
 					return false;
@@ -1210,7 +1217,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	}
 
 	private boolean isValidSimpleConstraint(ITypeBinding type,
-											Collection/*<ConstraintVariable>*/ relevantVars,
+											Collection<ConstraintVariable> relevantVars,
 											SimpleTypeConstraint stc){
 		if (relevantVars.contains(stc.getLeft())) { // upper bound
 			if (!isSubTypeOf(type, findType(stc.getRight()))) {
@@ -1221,7 +1228,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	}
 
 	private boolean isValidOrConstraint(ITypeBinding type,
-										Collection/*<ConstraintVariable>*/ relevantVars,
+										Collection<ConstraintVariable> relevantVars,
 										CompositeOrTypeConstraint cotc){
 		ITypeConstraint[] components= cotc.getConstraints();
 		for (int i= 0; i < components.length; i++) {
@@ -1250,9 +1257,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @param pm
 	 * @return the constraints
 	 */
-	private Collection/*<ITypeConstraint>*/ getConstraints(ICompilationUnit[] referringCus, IProgressMonitor pm) {
+	private Collection<ITypeConstraint> getConstraints(ICompilationUnit[] referringCus, IProgressMonitor pm) {
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, referringCus.length);
-		Collection/*<ITypeConstraint>*/ result= new ArrayList();
+		Collection<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
 		for (int i= 0; i < referringCus.length; i++) {
 			result.addAll(getConstraints(referringCus[i]));
 			pm.worked(1);
@@ -1263,15 +1270,15 @@ public class ChangeTypeRefactoring extends Refactoring {
 		return result;
 	}
 
-	private List/*<ITypeConstraint>*/ getConstraints(ICompilationUnit unit) {
+	private List<ITypeConstraint> getConstraints(ICompilationUnit unit) {
 		if (fConstraintCache.containsKey(unit))
-			return (List) fConstraintCache.get(unit);
+			return fConstraintCache.get(unit);
 
 		CompilationUnit cu= ASTCreator.createAST(unit, null);
 
 		// only generate type constraints for relevant MethodDeclaration subtrees
 		if (fMethodBinding != null && fCuToSearchResultGroup.containsKey(unit)){
-			SearchResultGroup group= (SearchResultGroup) fCuToSearchResultGroup.get(unit);
+			SearchResultGroup group= fCuToSearchResultGroup.get(unit);
 			ASTNode[] nodes= ASTNodeSearchUtil.getAstNodes(group.getSearchResults(), cu);
 			for (int i=0; i < nodes.length; i++){
 				ASTNode node = nodes[i];
@@ -1288,7 +1295,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 		} else {
 			cu.accept(fCollector);
 		}
-		List/*<ITypeConstraint>*/ constraints= Arrays.asList(fCollector.getConstraints());
+		List<ITypeConstraint> constraints= Arrays.asList(fCollector.getConstraints());
 		fConstraintCache.put(unit, constraints);
 		return constraints;
 	}
@@ -1311,10 +1318,10 @@ public class ChangeTypeRefactoring extends Refactoring {
 	// Miscellaneous helper methods
 
 	/**
-	 * Returns the Collection<IType> of types that can be given to the selected declaration.
-	 * @return return the valid types
+	 * Returns the Collection of types that can be given to the selected declaration.
+	 * @return return the valid type bindings
 	 */
-	public Collection/*<IType>*/ getValidTypes() {
+	public Collection<ITypeBinding> getValidTypes() {
 		return fValidTypes;
 	}
 
@@ -1349,10 +1356,10 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * (used in tests only)
 	 * @return Collection<String> of names of types that can be given to the selected declaration
 	 */
-	public Collection/*<String>*/ getValidTypeNames() {
-		Collection/*<String>*/ typeNames= new ArrayList();
-		for (Iterator it= fValidTypes.iterator(); it.hasNext();) {
-			ITypeBinding type= (ITypeBinding) it.next();
+	public Collection<String> getValidTypeNames() {
+		Collection<String> typeNames= new ArrayList<String>();
+		for (Iterator<ITypeBinding> it= fValidTypes.iterator(); it.hasNext();) {
+			ITypeBinding type= it.next();
 			typeNames.add(type.getQualifiedName());
 		}
 
@@ -1485,9 +1492,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 	/*
 	 * For debugging.
 	 */
-	void printCollection(String title, Collection/*<Object>*/ l) {
+	void printCollection(String title, Collection<?> l) {
 		System.out.println(l.size() + " " + title); //$NON-NLS-1$
-		for (Iterator it= l.iterator(); it.hasNext();) {
+		for (Iterator<?> it= l.iterator(); it.hasNext();) {
 			System.out.println("  " + it.next()); //$NON-NLS-1$
 		}
 	}
@@ -1498,7 +1505,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 	 * @return the CUs
 	 */
 	private ICompilationUnit[] getCus(SearchResultGroup[] groups) {
-		List result= new ArrayList(groups.length);
+		List<ICompilationUnit> result= new ArrayList<ICompilationUnit>(groups.length);
 		for (int i= 0; i < groups.length; i++) {
 			SearchResultGroup group= groups[i];
 			ICompilationUnit cu= group.getCompilationUnit();
@@ -1507,7 +1514,7 @@ public class ChangeTypeRefactoring extends Refactoring {
 				fCuToSearchResultGroup.put(cu, group);
 			}
 		}
-		return (ICompilationUnit[]) result.toArray(new ICompilationUnit[result.size()]);
+		return result.toArray(new ICompilationUnit[result.size()]);
 	}
 
     /**
@@ -1516,8 +1523,8 @@ public class ChangeTypeRefactoring extends Refactoring {
      * @param type
      * @return the super types
 	 */
-	public Set/*<ITypeBinding>*/ getAllSuperTypes(ITypeBinding type){
-		Set/*<ITypeBinding>*/ result= new HashSet();
+	public Set<ITypeBinding> getAllSuperTypes(ITypeBinding type){
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
 		result.add(type);
 		if (type.getSuperclass() != null){
 			result.addAll(getAllSuperTypes(type.getSuperclass()));
@@ -1533,9 +1540,9 @@ public class ChangeTypeRefactoring extends Refactoring {
 	}
 
     private ITypeBinding findSuperTypeByName(ITypeBinding type, String superTypeName){
-    	Set/*<ITypeBinding>*/ superTypes= getAllSuperTypes(type);
-    	for (Iterator/*<ITypeBinding>*/ it= superTypes.iterator(); it.hasNext(); ){
-    		ITypeBinding sup= (ITypeBinding)it.next();
+    	Set<ITypeBinding> superTypes= getAllSuperTypes(type);
+    	for (Iterator<ITypeBinding> it= superTypes.iterator(); it.hasNext(); ){
+    		ITypeBinding sup= it.next();
     		if (sup.getQualifiedName().equals(superTypeName)){
     			return sup;
     		}
@@ -1549,13 +1556,13 @@ public class ChangeTypeRefactoring extends Refactoring {
 		if (type1.isParameterizedType() && type1.getTypeDeclaration().isEqualTo(type2.getTypeDeclaration())){
 			return true;
 		}
-		Set superTypes= getAllSuperTypes(type1);
+		Set<ITypeBinding> superTypes= getAllSuperTypes(type1);
 		return contains(superTypes, type2);
 	}
 
-	private static boolean contains(Collection/*<ITypeBinding>*/ c, ITypeBinding binding){
-		for (Iterator/*<ITypeBinding>*/ it=c.iterator(); it.hasNext(); ){
-			ITypeBinding b = (ITypeBinding)it.next();
+	private static boolean contains(Collection<ITypeBinding> c, ITypeBinding binding){
+		for (Iterator<ITypeBinding> it=c.iterator(); it.hasNext(); ){
+			ITypeBinding b = it.next();
 			if (Bindings.equals(b, binding)) return true;
 		}
 		return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/CompilationUnitRewrite.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/CompilationUnitRewrite.java
index dbbea57..074b105 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/CompilationUnitRewrite.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/CompilationUnitRewrite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 
 /**
  * A {@link CompilationUnitRewrite} holds all data structures that are typically
@@ -56,7 +57,7 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 public class CompilationUnitRewrite {
 	//TODO: add RefactoringStatus fStatus;?
 	private ICompilationUnit fCu;
-	private List/*<TextEditGroup>*/ fTextEditGroups= new ArrayList();
+	private List<TextEditGroup> fTextEditGroups= new ArrayList<TextEditGroup>();
 
 	private CompilationUnit fRoot; // lazily initialized
 	private ASTRewrite fRewrite; // lazily initialized
@@ -149,7 +150,7 @@ public class CompilationUnitRewrite {
 
 	public void clearASTRewrite() {
 		fRewrite= null;
-		fTextEditGroups= new ArrayList();
+		fTextEditGroups= new ArrayList<TextEditGroup>();
 	}
 
 	public void clearImportRewrites() {
@@ -273,8 +274,8 @@ public class CompilationUnitRewrite {
 				if (!isEmptyEdit(rewriteEdit)) {
 					multiEdit.addChild(rewriteEdit);
 					if (generateGroups) {
-						for (Iterator iter= fTextEditGroups.iterator(); iter.hasNext();) {
-							TextEditGroup group= (TextEditGroup) iter.next();
+						for (Iterator<TextEditGroup> iter= fTextEditGroups.iterator(); iter.hasNext();) {
+							TextEditGroup group= iter.next();
 							cuChange.addTextEditGroup(group);
 						}
 					}
@@ -312,7 +313,7 @@ public class CompilationUnitRewrite {
 
 	public CompilationUnit getRoot() {
 		if (fRoot == null)
-			fRoot= new RefactoringASTParser(AST.JLS3).parse(fCu, fOwner, fResolveBindings, fStatementsRecovery, fBindingsRecovery, null);
+			fRoot= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(fCu, fOwner, fResolveBindings, fStatementsRecovery, fBindingsRecovery, null);
 		return fRoot;
 	}
 
@@ -363,8 +364,8 @@ public class CompilationUnitRewrite {
 	}
 
 	public void clearGroupDescriptions() {
-		for (Iterator iter= fTextEditGroups.iterator(); iter.hasNext();) {
-			TextEditGroup group= (TextEditGroup) iter.next();
+		for (Iterator<TextEditGroup> iter= fTextEditGroups.iterator(); iter.hasNext();) {
+			TextEditGroup group= iter.next();
 			group.clearTextEdits();
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ConstructorReferenceFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ConstructorReferenceFinder.java
index 972fb98..15ff8e9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ConstructorReferenceFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ConstructorReferenceFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,6 @@ import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.WorkingCopyOwner;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.Block;
@@ -37,6 +36,7 @@ import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.ParameterizedType;
+import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
@@ -54,6 +54,8 @@ import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
 import org.eclipse.jdt.internal.corext.util.JdtFlags;
 import org.eclipse.jdt.internal.corext.util.SearchUtils;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 /**
  * This class is used to find references to constructors.
  */
@@ -97,24 +99,24 @@ class ConstructorReferenceFinder {
 
 	//XXX this method is a workaround for jdt core bug 27236
 	private SearchResultGroup[] removeUnrealReferences(SearchResultGroup[] groups) {
-		List result= new ArrayList(groups.length);
+		List<SearchResultGroup> result= new ArrayList<SearchResultGroup>(groups.length);
 		for (int i= 0; i < groups.length; i++) {
 			SearchResultGroup group= groups[i];
 			ICompilationUnit cu= group.getCompilationUnit();
 			if (cu == null)
 				continue;
-			CompilationUnit cuNode= new RefactoringASTParser(AST.JLS3).parse(cu, false);
+			CompilationUnit cuNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(cu, false);
 			SearchMatch[] allSearchResults= group.getSearchResults();
-			List realConstructorReferences= new ArrayList(Arrays.asList(allSearchResults));
+			List<SearchMatch> realConstructorReferences= new ArrayList<SearchMatch>(Arrays.asList(allSearchResults));
 			for (int j= 0; j < allSearchResults.length; j++) {
 				SearchMatch searchResult= allSearchResults[j];
 				if (! isRealConstructorReferenceNode(ASTNodeSearchUtil.getAstNode(searchResult, cuNode)))
 					realConstructorReferences.remove(searchResult);
 			}
 			if (! realConstructorReferences.isEmpty())
-				result.add(new SearchResultGroup(group.getResource(), (SearchMatch[]) realConstructorReferences.toArray(new SearchMatch[realConstructorReferences.size()])));
+				result.add(new SearchResultGroup(group.getResource(), realConstructorReferences.toArray(new SearchMatch[realConstructorReferences.size()])));
 		}
-		return (SearchResultGroup[]) result.toArray(new SearchResultGroup[result.size()]);
+		return result.toArray(new SearchResultGroup[result.size()]);
 	}
 
 	//XXX this method is a workaround for jdt core bug 27236
@@ -168,26 +170,26 @@ class ConstructorReferenceFinder {
 
 	private SearchResultGroup[] getImplicitConstructorReferences(IProgressMonitor pm, WorkingCopyOwner owner, RefactoringStatus status) throws JavaModelException {
 		pm.beginTask("", 2); //$NON-NLS-1$
-		List searchMatches= new ArrayList();
+		List<SearchMatch> searchMatches= new ArrayList<SearchMatch>();
 		searchMatches.addAll(getImplicitConstructorReferencesFromHierarchy(owner, new SubProgressMonitor(pm, 1)));
 		searchMatches.addAll(getImplicitConstructorReferencesInClassCreations(owner, new SubProgressMonitor(pm, 1), status));
 		pm.done();
-		return RefactoringSearchEngine.groupByCu((SearchMatch[]) searchMatches.toArray(new SearchMatch[searchMatches.size()]), status);
+		return RefactoringSearchEngine.groupByCu(searchMatches.toArray(new SearchMatch[searchMatches.size()]), status);
 	}
 
 	//List of SearchResults
-	private List getImplicitConstructorReferencesInClassCreations(WorkingCopyOwner owner, IProgressMonitor pm, RefactoringStatus status) throws JavaModelException {
+	private List<SearchMatch> getImplicitConstructorReferencesInClassCreations(WorkingCopyOwner owner, IProgressMonitor pm, RefactoringStatus status) throws JavaModelException {
 		//XXX workaround for jdt core bug 23112
 		SearchPattern pattern= SearchPattern.createPattern(fType, IJavaSearchConstants.REFERENCES, SearchUtils.GENERICS_AGNOSTIC_MATCH_RULE);
 		IJavaSearchScope scope= RefactoringScopeFactory.create(fType);
 		SearchResultGroup[] refs= RefactoringSearchEngine.search(pattern, owner, scope, pm, status);
-		List result= new ArrayList();
+		List<SearchMatch> result= new ArrayList<SearchMatch>();
 		for (int i= 0; i < refs.length; i++) {
 			SearchResultGroup group= refs[i];
 			ICompilationUnit cu= group.getCompilationUnit();
 			if (cu == null)
 				continue;
-			CompilationUnit cuNode= new RefactoringASTParser(AST.JLS3).parse(cu, false);
+			CompilationUnit cuNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(cu, false);
 			SearchMatch[] results= group.getSearchResults();
 			for (int j= 0; j < results.length; j++) {
 				SearchMatch searchResult= results[j];
@@ -216,9 +218,9 @@ class ConstructorReferenceFinder {
 	}
 
 	//List of SearchResults
-	private List getImplicitConstructorReferencesFromHierarchy(WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException{
+	private List<SearchMatch> getImplicitConstructorReferencesFromHierarchy(WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException{
 		IType[] subTypes= getNonBinarySubtypes(owner, fType, pm);
-		List result= new ArrayList(subTypes.length);
+		List<SearchMatch> result= new ArrayList<SearchMatch>(subTypes.length);
 		for (int i= 0; i < subTypes.length; i++) {
 			result.addAll(getAllSuperConstructorInvocations(subTypes[i]));
 		}
@@ -232,20 +234,20 @@ class ConstructorReferenceFinder {
 		else
 			hierarchy= type.newSupertypeHierarchy(owner, monitor);
 		IType[] subTypes= hierarchy.getAllSubtypes(type);
-		List result= new ArrayList(subTypes.length);
+		List<IType> result= new ArrayList<IType>(subTypes.length);
 		for (int i= 0; i < subTypes.length; i++) {
 			if (! subTypes[i].isBinary()) {
 				result.add(subTypes[i]);
 			}
 		}
-		return (IType[]) result.toArray(new IType[result.size()]);
+		return result.toArray(new IType[result.size()]);
 	}
 
 	//Collection of SearchResults
-	private static Collection getAllSuperConstructorInvocations(IType type) throws JavaModelException {
+	private static Collection<SearchMatch> getAllSuperConstructorInvocations(IType type) throws JavaModelException {
 		IMethod[] constructors= JavaElementUtil.getAllConstructors(type);
-		CompilationUnit cuNode= new RefactoringASTParser(AST.JLS3).parse(type.getCompilationUnit(), false);
-		List result= new ArrayList(constructors.length);
+		CompilationUnit cuNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(type.getCompilationUnit(), false);
+		List<SearchMatch> result= new ArrayList<SearchMatch>(constructors.length);
 		for (int i= 0; i < constructors.length; i++) {
 			ASTNode superCall= getSuperConstructorCallNode(constructors[i], cuNode);
 			if (superCall != null)
@@ -268,7 +270,7 @@ class ConstructorReferenceFinder {
 		Assert.isTrue(constructorNode.isConstructor());
 		Block body= constructorNode.getBody();
 		Assert.isNotNull(body);
-		List statements= body.statements();
+		List<Statement> statements= body.statements();
 		if (! statements.isEmpty() && statements.get(0) instanceof SuperConstructorInvocation)
 			return (SuperConstructorInvocation)statements.get(0);
 		return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java
index fb80b42..54023eb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ import org.eclipse.ltk.core.refactoring.Change;
 import org.eclipse.ltk.core.refactoring.Refactoring;
 import org.eclipse.ltk.core.refactoring.RefactoringDescriptor;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
 
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.ICompilationUnit;
@@ -61,6 +62,7 @@ import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.Javadoc;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.NullLiteral;
 import org.eclipse.jdt.core.dom.QualifiedName;
@@ -70,12 +72,11 @@ import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
-import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.descriptors.ExtractClassDescriptor;
-import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
 import org.eclipse.jdt.core.refactoring.descriptors.ExtractClassDescriptor.Field;
+import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jdt.core.search.SearchMatch;
 import org.eclipse.jdt.core.search.SearchPattern;
@@ -171,7 +172,7 @@ public class ExtractClassRefactoring extends Refactoring {
 		public RefactoringStatus validateFields() {
 			RefactoringStatus status= new RefactoringStatus();
 			Field[] fields= fDescriptor.getFields();
-			Set names= new HashSet();
+			Set<String> names= new HashSet<String>();
 			for (int i= 0; i < fields.length; i++) {
 				Field field= fields[i];
 				if (field.isCreateField()) {
@@ -205,11 +206,13 @@ public class ExtractClassRefactoring extends Refactoring {
 		private FieldReferenceFinder() {
 		}
 
+		@Override
 		public boolean visit(FieldAccess node) {
 			IVariableBinding fieldBinding= node.resolveFieldBinding();
 			return checkVariableBinding(fieldBinding);
 		}
 
+		@Override
 		public boolean visit(SimpleName node) {
 			IVariableBinding variableBinding= ASTNodes.getVariableBinding(node);
 			return checkVariableBinding(variableBinding);
@@ -220,7 +223,7 @@ public class ExtractClassRefactoring extends Refactoring {
 				if (fieldBinding.isField()) {
 					ITypeBinding declaringClass= fieldBinding.getDeclaringClass();
 					if ((declaringClass != null) && declaringClass.getQualifiedName().equals(fDescriptor.getType().getFullyQualifiedName())) {
-						FieldInfo fi= (FieldInfo) fVariables.get(fieldBinding.getName());
+						FieldInfo fi= fVariables.get(fieldBinding.getName());
 						if (fi != null && isCreateField(fi) && Bindings.equals(fieldBinding, fi.pi.getOldBinding())) {
 							fFieldRefFound= true;
 							return false;
@@ -262,7 +265,7 @@ public class ExtractClassRefactoring extends Refactoring {
 	}
 
 	private ExtractClassDescriptor fDescriptor;
-	private Map fVariables;
+	private Map<String, FieldInfo> fVariables;
 	private CompilationUnitRewrite fBaseCURewrite;
 	private TextChangeManager fChangeManager;
 	private ParameterObjectFactory fParameterObjectFactory;
@@ -291,6 +294,7 @@ public class ExtractClassRefactoring extends Refactoring {
 	}
 
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		RefactoringStatus result= new RefactoringStatus();
 		pm.beginTask(RefactoringCoreMessages.ExtractClassRefactoring_progress_msg_check_initial_condition, 5);
@@ -307,7 +311,7 @@ public class ExtractClassRefactoring extends Refactoring {
 			pm.worked(1);
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-			fVariables= new LinkedHashMap();
+			fVariables= new LinkedHashMap<String, FieldInfo>();
 			if (fields.length == 0) {
 				result.addFatalError(RefactoringCoreMessages.ExtractClassRefactoring_error_no_usable_fields, JavaStatusContext.create(type));
 				return result;
@@ -328,13 +332,14 @@ public class ExtractClassRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		RefactoringStatus result= new RefactoringStatus();
 		result.merge(fVerification.validateAll());
 		try {
 			pm.beginTask(RefactoringCoreMessages.ExtractClassRefactoring_progress_final_conditions, 95);
-			for (Iterator iter= fVariables.values().iterator(); iter.hasNext();) {
-				FieldInfo fi= (FieldInfo) iter.next();
+			for (Iterator<FieldInfo> iter= fVariables.values().iterator(); iter.hasNext();) {
+				FieldInfo fi= iter.next();
 				boolean createField= isCreateField(fi);
 				if (createField) {
 					IField field= fi.ifield;
@@ -361,6 +366,7 @@ public class ExtractClassRefactoring extends Refactoring {
 			int flags= RefactoringDescriptor.STRUCTURAL_CHANGE | JavaRefactoringDescriptor.JAR_MIGRATION | JavaRefactoringDescriptor.JAR_REFACTORING | JavaRefactoringDescriptor.JAR_SOURCE_ATTACHMENT;
 			if (!Modifier.isPrivate(field.getModifiers()))
 				flags|= RefactoringDescriptor.MULTI_CHANGE;
+			fDescriptor.setFlags(flags);
 
 			result.merge(updateReferences(type, fParameterObjectFactory, new SubProgressMonitor(pm, 65)));
 
@@ -370,12 +376,13 @@ public class ExtractClassRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		pm.beginTask(RefactoringCoreMessages.ExtractClassRefactoring_progress_create_change, 10);
 		try {
 			ICompilationUnit typeCU= fDescriptor.getType().getCompilationUnit();
 			IPackageFragmentRoot packageRoot= (IPackageFragmentRoot) typeCU.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
-			ArrayList changes= new ArrayList();
+			ArrayList<Change> changes= new ArrayList<Change>();
 
 			changes.addAll(createParameterObject(fParameterObjectFactory, packageRoot));
 			fChangeManager.manage(typeCU, fBaseCURewrite.createChange(true, pm));
@@ -384,7 +391,7 @@ public class ExtractClassRefactoring extends Refactoring {
 			fDescriptor.setProject(project);
 			fDescriptor.setDescription(getName());
 			fDescriptor.setComment(createComment());
-			DynamicValidationRefactoringChange change= new DynamicValidationRefactoringChange(fDescriptor, RefactoringCoreMessages.ExtractClassRefactoring_change_name, (Change[]) changes
+			DynamicValidationRefactoringChange change= new DynamicValidationRefactoringChange(fDescriptor, RefactoringCoreMessages.ExtractClassRefactoring_change_name, changes
 					.toArray(new Change[changes.size()]));
 			return change;
 		} finally {
@@ -402,14 +409,14 @@ public class ExtractClassRefactoring extends Refactoring {
 			comment.addSetting(Messages.format(RefactoringCoreMessages.ExtractClassRefactoring_comment_package, BasicElementLabels.getJavaElementName(fDescriptor.getPackage())));
 
 		Field[] fields= fDescriptor.getFields();
-		ArrayList strings= new ArrayList();
+		ArrayList<String> strings= new ArrayList<String>();
 		for (int i= 0; i < fields.length; i++) {
 			Field field= fields[i];
 			if (field.isCreateField()) {
 				strings.add(Messages.format(RefactoringCoreMessages.ExtractClassRefactoring_comment_field_renamed, new Object[] { BasicElementLabels.getJavaElementName(field.getFieldName()), BasicElementLabels.getJavaElementName(field.getNewFieldName()) }));
 			}
 		}
-		String fieldString= JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ExtractClassRefactoring_comment_move_field, (String[]) strings.toArray(new String[strings
+		String fieldString= JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.ExtractClassRefactoring_comment_move_field, strings.toArray(new String[strings
 				.size()]));
 		comment.addSetting(fieldString);
 
@@ -421,13 +428,14 @@ public class ExtractClassRefactoring extends Refactoring {
 	}
 
 	private class FieldUpdate extends CreationListener {
+		@Override
 		public void fieldCreated(CompilationUnitRewrite cuRewrite, FieldDeclaration field, ParameterInfo pi) {
 			FieldInfo fieldInfo= getFieldInfo(pi.getOldName());
 			FieldDeclaration parent= (FieldDeclaration) fieldInfo.declaration.getParent();
-			List modifiers= parent.modifiers();
+			List<IExtendedModifier> modifiers= parent.modifiers();
 			ListRewrite listRewrite= cuRewrite.getASTRewrite().getListRewrite(field, FieldDeclaration.MODIFIERS2_PROPERTY);
-			for (Iterator iterator= modifiers.iterator(); iterator.hasNext();) {
-				IExtendedModifier mod= (IExtendedModifier) iterator.next();
+			for (Iterator<IExtendedModifier> iterator= modifiers.iterator(); iterator.hasNext();) {
+				IExtendedModifier mod= iterator.next();
 				//Temporarily disabled until initialization of final fields is handled correctly
 //				if (mod.isModifier()) {
 //					Modifier modifier= (Modifier) mod;
@@ -439,9 +447,9 @@ public class ExtractClassRefactoring extends Refactoring {
 				}
 			}
 			if (fieldInfo.initializer != null && fieldInfo.hasFieldReference()) {
-				List fragments= field.fragments();
-				for (Iterator iterator= fragments.iterator(); iterator.hasNext();) {
-					VariableDeclarationFragment vdf= (VariableDeclarationFragment) iterator.next();
+				List<VariableDeclarationFragment> fragments= field.fragments();
+				for (Iterator<VariableDeclarationFragment> iterator= fragments.iterator(); iterator.hasNext();) {
+					VariableDeclarationFragment vdf= iterator.next();
 					vdf.setInitializer((Expression) moveNode(cuRewrite, fieldInfo.initializer));
 				}
 			}
@@ -450,17 +458,19 @@ public class ExtractClassRefactoring extends Refactoring {
 			}
 		}
 
+		@Override
 		public boolean isCreateSetter(ParameterInfo pi) {
 			return true; //ignore that the original variable was final
 		}
 
+		@Override
 		public boolean isUseInConstructor(ParameterInfo pi) {
 			FieldInfo fi= getFieldInfo(pi.getOldName());
 			return fi.initializer != null && !fi.hasFieldReference();
 		}
 	}
 
-	private List createParameterObject(ParameterObjectFactory pof, IPackageFragmentRoot packageRoot) throws CoreException {
+	private List<ResourceChange> createParameterObject(ParameterObjectFactory pof, IPackageFragmentRoot packageRoot) throws CoreException {
 		FieldUpdate fieldUpdate= new FieldUpdate();
 		if (fDescriptor.isCreateTopLevel())
 			return pof.createTopLevelParameterObject(packageRoot, fieldUpdate);
@@ -473,7 +483,7 @@ public class ExtractClassRefactoring extends Refactoring {
 			paramClass.modifiers().add(rewrite.getAST().newModifier(ModifierKeyword.PUBLIC_KEYWORD));
 			paramClass.modifiers().add(rewrite.getAST().newModifier(ModifierKeyword.STATIC_KEYWORD));
 			listRewrite.insertFirst(paramClass, fBaseCURewrite.createGroupDescription(RefactoringCoreMessages.ExtractClassRefactoring_group_insert_parameter));
-			return new ArrayList(); //Change will be generated later for fBaseCURewrite
+			return new ArrayList<ResourceChange>(); //Change will be generated later for fBaseCURewrite
 		}
 
 	}
@@ -485,9 +495,9 @@ public class ExtractClassRefactoring extends Refactoring {
 		pof.setEnclosingType(fDescriptor.getType().getFullyQualifiedName());
 		pof.setCreateGetter(fDescriptor.isCreateGetterSetter());
 		pof.setCreateSetter(fDescriptor.isCreateGetterSetter());
-		List variables= new ArrayList();
-		for (Iterator iterator= fVariables.values().iterator(); iterator.hasNext();) {
-			FieldInfo info= (FieldInfo) iterator.next();
+		List<ParameterInfo> variables= new ArrayList<ParameterInfo>();
+		for (Iterator<FieldInfo> iterator= fVariables.values().iterator(); iterator.hasNext();) {
+			FieldInfo info= iterator.next();
 			boolean createField= isCreateField(info);
 			info.pi.setCreateField(createField);
 			if (createField) {
@@ -518,9 +528,9 @@ public class ExtractClassRefactoring extends Refactoring {
 			pm.worked(10);
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-			List validIFields= new ArrayList();
-			for (Iterator iterator= fVariables.values().iterator(); iterator.hasNext();) {
-				FieldInfo info= (FieldInfo) iterator.next();
+			List<IField> validIFields= new ArrayList<IField>();
+			for (Iterator<FieldInfo> iterator= fVariables.values().iterator(); iterator.hasNext();) {
+				FieldInfo info= iterator.next();
 				if (isCreateField(info))
 					validIFields.add(info.ifield);
 			}
@@ -528,7 +538,7 @@ public class ExtractClassRefactoring extends Refactoring {
 				status.addWarning(RefactoringCoreMessages.ExtractClassRefactoring_warning_no_fields_moved, JavaStatusContext.create(type));
 				return status;
 			}
-			SearchPattern pattern= RefactoringSearchEngine.createOrPattern((IField[]) validIFields.toArray(new IField[validIFields.size()]), IJavaSearchConstants.ALL_OCCURRENCES);
+			SearchPattern pattern= RefactoringSearchEngine.createOrPattern(validIFields.toArray(new IField[validIFields.size()]), IJavaSearchConstants.ALL_OCCURRENCES);
 			SearchResultGroup[] results= RefactoringSearchEngine.search(pattern, RefactoringScopeFactory.create(type), pm, status);
 			SubProgressMonitor spm= new SubProgressMonitor(pm, 90);
 			spm.beginTask(RefactoringCoreMessages.ExtractClassRefactoring_progress_updating_references, results.length * 10);
@@ -657,6 +667,7 @@ public class ExtractClassRefactoring extends Refactoring {
 
 			private boolean fReplaced= false;
 
+			@Override
 			public boolean visit(NullLiteral node) {
 				if (node == marker) {
 					rewrite.replace(node, rewrite.createCopyTarget(qualifier), null);
@@ -695,7 +706,7 @@ public class ExtractClassRefactoring extends Refactoring {
 	}
 
 	private FieldInfo getFieldInfo(String identifier) {
-		return (FieldInfo) fVariables.get(identifier);
+		return fVariables.get(identifier);
 	}
 
 	private FieldDeclaration performFieldRewrite(IType type, ParameterObjectFactory pof, RefactoringStatus status) throws CoreException {
@@ -707,8 +718,8 @@ public class ExtractClassRefactoring extends Refactoring {
 		TextEditGroup removeFieldGroup= fBaseCURewrite.createGroupDescription(RefactoringCoreMessages.ExtractClassRefactoring_group_remove_field);
 		FieldDeclaration lastField= null;
 		initializeDeclaration(typeNode);
-		for (Iterator iter= fVariables.values().iterator(); iter.hasNext();) {
-			FieldInfo pi= (FieldInfo) iter.next();
+		for (Iterator<FieldInfo> iter= fVariables.values().iterator(); iter.hasNext();) {
+			FieldInfo pi= iter.next();
 			if (isCreateField(pi)) {
 				VariableDeclarationFragment vdf= pi.declaration;
 				FieldDeclaration parent= (FieldDeclaration) vdf.getParent();
@@ -765,9 +776,9 @@ public class ExtractClassRefactoring extends Refactoring {
 		FieldDeclaration[] fields= node.getFields();
 		for (int i= 0; i < fields.length; i++) {
 			FieldDeclaration fieldDeclaration= fields[i];
-			List fragments= fieldDeclaration.fragments();
-			for (Iterator iterator= fragments.iterator(); iterator.hasNext();) {
-				VariableDeclarationFragment vdf= (VariableDeclarationFragment) iterator.next();
+			List<VariableDeclarationFragment> fragments= fieldDeclaration.fragments();
+			for (Iterator<VariableDeclarationFragment> iterator= fragments.iterator(); iterator.hasNext();) {
+				VariableDeclarationFragment vdf= iterator.next();
 				FieldInfo fieldInfo= getFieldInfo(vdf.getName().getIdentifier());
 				if (fieldInfo != null) {
 					Assert.isNotNull(vdf);
@@ -788,8 +799,8 @@ public class ExtractClassRefactoring extends Refactoring {
 		ClassInstanceCreation creation= ast.newClassInstanceCreation();
 		creation.setType(pof.createType(fDescriptor.isCreateTopLevel(), fBaseCURewrite, typeNode.getStartPosition()));
 		ListRewrite listRewrite= fBaseCURewrite.getASTRewrite().getListRewrite(creation, ClassInstanceCreation.ARGUMENTS_PROPERTY);
-		for (Iterator iter= fVariables.values().iterator(); iter.hasNext();) {
-			FieldInfo fi= (FieldInfo) iter.next();
+		for (Iterator<FieldInfo> iter= fVariables.values().iterator(); iter.hasNext();) {
+			FieldInfo fi= iter.next();
 			if (isCreateField(fi)) {
 				Expression expression= fi.initializer;
 				if (expression != null && !fi.hasFieldReference()) {
@@ -845,6 +856,7 @@ public class ExtractClassRefactoring extends Refactoring {
 	}
 
 
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.ExtractClassRefactoring_refactoring_name;
 	}
@@ -852,6 +864,7 @@ public class ExtractClassRefactoring extends Refactoring {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.core.refactoring.Refactoring#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class adapter) {
 		if (adapter == ExtractClassDescriptorVerification.class) {
 			return fVerification;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java
index 3f13ab5..c91ccd6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public final class ExtractInterfaceConstraintsSolver extends SuperTypeConstraint
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.structure.constraints.SuperTypeConstraintsSolver#computeTypeEstimate(org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ConstraintVariable2)
 	 */
+	@Override
 	protected final ITypeSet computeTypeEstimate(final ConstraintVariable2 variable) {
 		final TType type= variable.getType();
 		if (variable instanceof ImmutableTypeVariable2 || !type.getErasure().equals(fModel.getSubType().getErasure()))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java
index ea2d6be..cc77111 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,7 +57,6 @@ import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.ISourceReference;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaCore;
@@ -125,6 +124,7 @@ import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
@@ -230,6 +230,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor,org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
 	 */
+	@Override
 	public final RefactoringStatus checkFinalConditions(final IProgressMonitor monitor, final CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		Assert.isNotNull(context);
@@ -267,6 +268,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public final RefactoringStatus checkInitialConditions(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		final RefactoringStatus status= new RefactoringStatus();
@@ -334,12 +336,13 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public final Change createChange(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		try {
 			monitor.beginTask("", 1); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating);
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			final IJavaProject javaProject= fSubType.getJavaProject();
 			if (javaProject != null)
@@ -425,7 +428,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 					copy.getBuffer().setContents(fSuperSource);
 					JavaModelUtil.reconcile(copy);
 				}
-				final Set replacements= new HashSet();
+				final Set<String> replacements= new HashSet<String>();
 				if (fReplace)
 					rewriteTypeOccurrences(manager, sourceRewrite, copy, replacements, status, new SubProgressMonitor(monitor, 220));
 				createMethodComments(sourceRewrite, replacements);
@@ -440,6 +443,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.structure.constraints.SuperTypeRefactoringProcessor#createContraintSolver(org.eclipse.jdt.internal.corext.refactoring.structure.constraints.SuperTypeConstraintsModel)
 	 */
+	@Override
 	protected final SuperTypeConstraintsSolver createContraintSolver(final SuperTypeConstraintsModel model) {
 		return new ExtractInterfaceConstraintsSolver(model, fSuperName);
 	}
@@ -469,8 +473,8 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 		final ITrackedNodePosition position= rewrite.track(field);
 		final ListRewrite rewriter= rewrite.getListRewrite(field, FieldDeclaration.FRAGMENTS_PROPERTY);
 		VariableDeclarationFragment current= null;
-		for (final Iterator iterator= field.fragments().iterator(); iterator.hasNext();) {
-			current= (VariableDeclarationFragment) iterator.next();
+		for (final Iterator<VariableDeclarationFragment> iterator= field.fragments().iterator(); iterator.hasNext();) {
+			current= iterator.next();
 			if (!current.getName().getIdentifier().equals(fragment.getName().getIdentifier()))
 				rewriter.remove(current, null);
 		}
@@ -494,19 +498,16 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected final void createMemberDeclarations(final CompilationUnitRewrite sourceRewrite, final ASTRewrite targetRewrite, final AbstractTypeDeclaration targetDeclaration) throws CoreException {
 		Assert.isNotNull(sourceRewrite);
 		Assert.isNotNull(targetRewrite);
 		Assert.isNotNull(targetDeclaration);
-		Arrays.sort(fMembers, new Comparator() {
+		Arrays.sort(fMembers, new Comparator<IMember>() {
 
-			public final int compare(final Object first, final Object second) {
-				Assert.isNotNull(first);
-				Assert.isNotNull(second);
-				final ISourceReference predecessor= (ISourceReference) first;
-				final ISourceReference successor= (ISourceReference) second;
+			public final int compare(final IMember first, final IMember second) {
 				try {
-					return predecessor.getSourceRange().getOffset() - successor.getSourceRange().getOffset();
+					return first.getSourceRange().getOffset() - second.getSourceRange().getOffset();
 				} catch (JavaModelException exception) {
 					return first.hashCode() - second.hashCode();
 				}
@@ -543,7 +544,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	 * @throws CoreException
 	 *             if an error occurs
 	 */
-	protected final void createMethodComment(final CompilationUnitRewrite sourceRewrite, final MethodDeclaration declaration, final Set replacements, final boolean javadoc) throws CoreException {
+	protected final void createMethodComment(final CompilationUnitRewrite sourceRewrite, final MethodDeclaration declaration, final Set<String> replacements, final boolean javadoc) throws CoreException {
 		Assert.isNotNull(sourceRewrite);
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(replacements);
@@ -593,7 +594,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	 * @throws CoreException
 	 *             if an error occurs
 	 */
-	protected final void createMethodComments(final CompilationUnitRewrite sourceRewrite, final Set replacements) throws CoreException {
+	protected final void createMethodComments(final CompilationUnitRewrite sourceRewrite, final Set<String> replacements) throws CoreException {
 		Assert.isNotNull(sourceRewrite);
 		Assert.isNotNull(replacements);
 		if (fMembers.length > 0 && (fAnnotations || fComments)) {
@@ -650,8 +651,8 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 		Modifier modifier= null;
 		Annotation annotation= null;
 		IExtendedModifier extended= null;
-		for (final Iterator iterator= declaration.modifiers().iterator(); iterator.hasNext();) {
-			extended= (IExtendedModifier) iterator.next();
+		for (final Iterator<IExtendedModifier> iterator= declaration.modifiers().iterator(); iterator.hasNext();) {
+			extended= iterator.next();
 			if (!extended.isAnnotation()) {
 				modifier= (Modifier) extended;
 				if (fPublic && modifier.getKeyword().equals(Modifier.ModifierKeyword.PUBLIC_KEYWORD)) {
@@ -747,6 +748,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getElements()
 	 */
+	@Override
 	public final Object[] getElements() {
 		return new Object[] { fSubType };
 	}
@@ -759,7 +761,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	 *             if an error occurs
 	 */
 	public final IMember[] getExtractableMembers() throws JavaModelException {
-		final List list= new ArrayList();
+		final List<IJavaElement> list= new ArrayList<IJavaElement>();
 		IJavaElement[] children= fSubType.getChildren();
 		for (int index= 0; index < children.length; index++) {
 			if (children[index] instanceof IMember && isExtractableMember((IMember) children[index]))
@@ -779,7 +781,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	 */
 	protected final IField[] getExtractedFields(final ICompilationUnit unit) {
 		Assert.isNotNull(unit);
-		final List list= new ArrayList();
+		final List<IJavaElement> list= new ArrayList<IJavaElement>();
 		for (int index= 0; index < fMembers.length; index++) {
 			if (fMembers[index] instanceof IField) {
 				final IJavaElement element= JavaModelUtil.findInCompilationUnit(unit, fMembers[index]);
@@ -801,7 +803,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	 */
 	protected final IMethod[] getExtractedMethods(final ICompilationUnit unit) {
 		Assert.isNotNull(unit);
-		final List list= new ArrayList();
+		final List<IJavaElement> list= new ArrayList<IJavaElement>();
 		for (int index= 0; index < fMembers.length; index++) {
 			if (fMembers[index] instanceof IMethod) {
 				final IJavaElement element= JavaModelUtil.findInCompilationUnit(unit, fMembers[index]);
@@ -817,6 +819,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
 	 */
+	@Override
 	public final String getIdentifier() {
 		return IDENTIFIER;
 	}
@@ -824,6 +827,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
 	 */
+	@Override
 	public final String getProcessorName() {
 		return RefactoringCoreMessages.ExtractInterfaceProcessor_name;
 	}
@@ -909,7 +913,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_REPLACE));
 		int count= 1;
-		final List elements= new ArrayList();
+		final List<IJavaElement> elements= new ArrayList<IJavaElement>();
 		String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		final RefactoringStatus status= new RefactoringStatus();
 		while ((handle= extended.getAttribute(attribute)) != null) {
@@ -921,7 +925,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 			count++;
 			attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		}
-		fMembers= (IMember[]) elements.toArray(new IMember[elements.size()]);
+		fMembers= elements.toArray(new IMember[elements.size()]);
 		fSettings= JavaPreferencesSettings.getCodeGenerationSettings(fSubType.getJavaProject());
 		if (!status.isOK())
 			return status;
@@ -931,6 +935,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
 	 */
+	@Override
 	public final boolean isApplicable() throws CoreException {
 		return Checks.isAvailable(fSubType) && !fSubType.isBinary() && !fSubType.isReadOnly() && !fSubType.isAnnotation() && !fSubType.isAnonymous();
 	}
@@ -948,6 +953,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus,org.eclipse.ltk.core.refactoring.participants.SharableParticipants)
 	 */
+	@Override
 	public final RefactoringParticipant[] loadParticipants(final RefactoringStatus status, final SharableParticipants sharedParticipants) throws CoreException {
 		return new RefactoringParticipant[0];
 	}
@@ -980,7 +986,8 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	/**
 	 * {@inheritDoc}
 	 */
-	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set replacements, final IProgressMonitor monitor) throws CoreException {
+	@Override
+	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set<String> replacements, final IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask("", 100); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating);
@@ -990,7 +997,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 				currentRewrite= rewrite;
 			else
 				currentRewrite= new CompilationUnitRewrite(unit, node);
-			final Collection collection= (Collection) fTypeOccurrences.get(unit);
+			final Collection<ITypeConstraintVariable> collection= fTypeOccurrences.get(unit);
 			if (collection != null && !collection.isEmpty()) {
 				final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 100);
 				try {
@@ -999,8 +1006,8 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 					TType estimate= null;
 					ISourceConstraintVariable variable= null;
 					ITypeConstraintVariable constraint= null;
-					for (final Iterator iterator= collection.iterator(); iterator.hasNext();) {
-						variable= (ISourceConstraintVariable) iterator.next();
+					for (final Iterator<ITypeConstraintVariable> iterator= collection.iterator(); iterator.hasNext();) {
+						variable= iterator.next();
 						if (variable instanceof ITypeConstraintVariable) {
 							constraint= (ITypeConstraintVariable) variable;
 							estimate= (TType) constraint.getData(SuperTypeConstraintsSolver.DATA_TYPE_ESTIMATE);
@@ -1051,7 +1058,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 	 * @throws CoreException
 	 *             if an error occurs
 	 */
-	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final CompilationUnitRewrite sourceRewrite, final ICompilationUnit superUnit, final Set replacements, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
+	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final CompilationUnitRewrite sourceRewrite, final ICompilationUnit superUnit, final Set<String> replacements, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
 		Assert.isNotNull(manager);
 		Assert.isNotNull(sourceRewrite);
 		Assert.isNotNull(superUnit);
@@ -1079,13 +1086,14 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 			}
 			JavaModelUtil.reconcile(subUnit);
 			final IJavaProject project= subUnit.getJavaProject();
-			final ASTParser parser= ASTParser.newParser(AST.JLS3);
+			final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setWorkingCopyOwner(fOwner);
 			parser.setResolveBindings(true);
 			parser.setProject(project);
 			parser.setCompilerOptions(RefactoringASTParser.getCompilerOptions(project));
 			parser.createASTs(new ICompilationUnit[] { subUnit}, new String[0], new ASTRequestor() {
 
+				@Override
 				public final void acceptAST(final ICompilationUnit unit, final CompilationUnit node) {
 					try {
 						final IType subType= (IType) JavaModelUtil.findInCompilationUnit(unit, fSubType);
@@ -1135,6 +1143,7 @@ public final class ExtractInterfaceProcessor extends SuperTypeRefactoringProcess
 					}
 				}
 
+				@Override
 				public final void acceptBinding(final String key, final IBinding binding) {
 					// Do nothing
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java
index a017e9c..a1cb732 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
@@ -44,7 +45,6 @@ import org.eclipse.ltk.core.refactoring.GroupCategorySet;
 import org.eclipse.ltk.core.refactoring.RefactoringDescriptor;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 import org.eclipse.ltk.core.refactoring.TextChange;
-import org.eclipse.ltk.core.refactoring.TextEditBasedChange;
 import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
 
 import org.eclipse.jdt.core.Flags;
@@ -72,8 +72,8 @@ import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.TypeParameter;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.formatter.CodeFormatter;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
@@ -105,6 +105,7 @@ import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
@@ -134,7 +135,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	 * compilation units.
 	 * </p>
 	 */
-	private final Map fLayerChanges= new HashMap();
+	private final Map<ICompilationUnit, CompilationUnitChange> fLayerChanges= new HashMap<ICompilationUnit, CompilationUnitChange>();
 
 	/** The possible extract supertype candidates, or the empty array */
 	private IType[] fPossibleCandidates= {};
@@ -184,6 +185,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.ExtractSupertypeProcessor_extract_supertype;
 	}
@@ -191,14 +193,16 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected final RefactoringStatus checkDeclaringSuperTypes(final IProgressMonitor monitor) throws JavaModelException {
 		return new RefactoringStatus();
 	}
 
-	protected CompilationUnitRewrite getCompilationUnitRewrite(final Map rewrites, final ICompilationUnit unit) {
+	@Override
+	protected CompilationUnitRewrite getCompilationUnitRewrite(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final ICompilationUnit unit) {
 		Assert.isNotNull(rewrites);
 		Assert.isNotNull(unit);
-		CompilationUnitRewrite rewrite= (CompilationUnitRewrite) rewrites.get(unit);
+		CompilationUnitRewrite rewrite= rewrites.get(unit);
 		if (rewrite == null) {
 			rewrite= new CompilationUnitRewrite(fOwner, unit);
 			rewrite.rememberContent();
@@ -230,6 +234,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(final IProgressMonitor monitor, final CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		final RefactoringStatus status= new RefactoringStatus();
 		try {
@@ -276,9 +281,10 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Change createChange(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		try {
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			final IType declaring= getDeclaringType();
 			final IJavaProject javaProject= declaring.getJavaProject();
@@ -654,8 +660,8 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 		if (sourceDeclaration instanceof TypeDeclaration) {
 			TypeParameter parameter= null;
 			final ListRewrite rewrite= targetRewrite.getASTRewrite().getListRewrite(targetDeclaration, TypeDeclaration.TYPE_PARAMETERS_PROPERTY);
-			for (final Iterator iterator= ((TypeDeclaration) sourceDeclaration).typeParameters().iterator(); iterator.hasNext();) {
-				parameter= (TypeParameter) iterator.next();
+			for (final Iterator<TypeParameter> iterator= ((TypeDeclaration) sourceDeclaration).typeParameters().iterator(); iterator.hasNext();) {
+				parameter= iterator.next();
 				final ASTNode node= ASTNode.copySubtree(targetRewrite.getAST(), parameter);
 				rewrite.insertLast(node, null);
 			}
@@ -761,6 +767,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final RefactoringStatus createWorkingCopyLayer(final IProgressMonitor monitor) {
 		Assert.isNotNull(monitor);
 		final RefactoringStatus status= new RefactoringStatus();
@@ -773,38 +780,38 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 				return status;
 			final IType extractedType= computeExtractedType(fTypeName);
 			setDestinationType(extractedType);
-			final List subTypes= new ArrayList(Arrays.asList(fTypesToExtract));
+			final List<IType> subTypes= new ArrayList<IType>(Arrays.asList(fTypesToExtract));
 			if (!subTypes.contains(declaring))
 				subTypes.add(declaring);
-			final Map unitToTypes= new HashMap(subTypes.size());
-			final Set units= new HashSet(subTypes.size());
+			final Map<ICompilationUnit, Collection<IType>> unitToTypes= new HashMap<ICompilationUnit, Collection<IType>>(subTypes.size());
+			final Set<ICompilationUnit> units= new HashSet<ICompilationUnit>(subTypes.size());
 			for (int index= 0; index < subTypes.size(); index++) {
-				final IType type= (IType) subTypes.get(index);
+				final IType type= subTypes.get(index);
 				final ICompilationUnit unit= type.getCompilationUnit();
 				units.add(unit);
-				Collection collection= (Collection) unitToTypes.get(unit);
+				Collection<IType> collection= unitToTypes.get(unit);
 				if (collection == null) {
-					collection= new ArrayList(2);
+					collection= new ArrayList<IType>(2);
 					unitToTypes.put(unit, collection);
 				}
 				collection.add(type);
 			}
-			final Map projectToUnits= new HashMap();
-			Collection collection= null;
+			final Map<IJavaProject, Collection<ICompilationUnit>> projectToUnits= new HashMap<IJavaProject, Collection<ICompilationUnit>>();
+			Collection<ICompilationUnit> collection= null;
 			IJavaProject project= null;
 			ICompilationUnit current= null;
-			for (final Iterator iterator= units.iterator(); iterator.hasNext();) {
-				current= (ICompilationUnit) iterator.next();
+			for (final Iterator<ICompilationUnit> iterator= units.iterator(); iterator.hasNext();) {
+				current= iterator.next();
 				project= current.getJavaProject();
-				collection= (Collection) projectToUnits.get(project);
+				collection= projectToUnits.get(project);
 				if (collection == null) {
-					collection= new ArrayList();
+					collection= new ArrayList<ICompilationUnit>();
 					projectToUnits.put(project, collection);
 				}
 				collection.add(current);
 			}
 			final ITypeBinding[] extractBindings= { null};
-			final ASTParser extractParser= ASTParser.newParser(AST.JLS3);
+			final ASTParser extractParser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			extractParser.setWorkingCopyOwner(fOwner);
 			extractParser.setResolveBindings(true);
 			extractParser.setProject(project);
@@ -815,15 +822,15 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 				if (extractDeclaration != null)
 					extractBindings[0]= extractDeclaration.resolveBinding();
 			}
-			final ASTParser parser= ASTParser.newParser(AST.JLS3);
+			final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 30);
 			try {
-				final Set keySet= projectToUnits.keySet();
+				final Set<IJavaProject> keySet= projectToUnits.keySet();
 				subMonitor.beginTask("", keySet.size()); //$NON-NLS-1$
 				subMonitor.setTaskName(RefactoringCoreMessages.ExtractSupertypeProcessor_preparing);
-				for (final Iterator iterator= keySet.iterator(); iterator.hasNext();) {
-					project= (IJavaProject) iterator.next();
-					collection= (Collection) projectToUnits.get(project);
+				for (final Iterator<IJavaProject> iterator= keySet.iterator(); iterator.hasNext();) {
+					project= iterator.next();
+					collection= projectToUnits.get(project);
 					parser.setWorkingCopyOwner(fOwner);
 					parser.setResolveBindings(true);
 					parser.setProject(project);
@@ -832,14 +839,15 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 					try {
 						subsubMonitor.beginTask("", collection.size()); //$NON-NLS-1$
 						subsubMonitor.setTaskName(RefactoringCoreMessages.ExtractSupertypeProcessor_preparing);
-						parser.createASTs((ICompilationUnit[]) collection.toArray(new ICompilationUnit[collection.size()]), new String[0], new ASTRequestor() {
+						parser.createASTs(collection.toArray(new ICompilationUnit[collection.size()]), new String[0], new ASTRequestor() {
 
+							@Override
 							public final void acceptAST(final ICompilationUnit unit, final CompilationUnit node) {
 								try {
-									final Collection types= (Collection) unitToTypes.get(unit);
+									final Collection<IType> types= unitToTypes.get(unit);
 									if (types != null) {
-										for (final Iterator innerIterator= types.iterator(); innerIterator.hasNext();) {
-											final IType currentType= (IType) innerIterator.next();
+										for (final Iterator<IType> innerIterator= types.iterator(); innerIterator.hasNext();) {
+											final IType currentType= innerIterator.next();
 											final AbstractTypeDeclaration currentDeclaration= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(currentType, node);
 											if (currentDeclaration != null)
 												createModifiedSubType(unit, node, extractedType, extractBindings[0], currentDeclaration, status);
@@ -853,6 +861,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 								}
 							}
 
+							@Override
 							public final void acceptBinding(final String key, final IBinding binding) {
 								// Do nothing
 							}
@@ -876,6 +885,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public IType[] getCandidateTypes(final RefactoringStatus status, final IProgressMonitor monitor) {
 		Assert.isNotNull(monitor);
 		if (fPossibleCandidates == null || fPossibleCandidates.length == 0) {
@@ -886,16 +896,16 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 					final IType superType= getDeclaringSuperTypeHierarchy(new SubProgressMonitor(monitor, 1, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)).getSuperclass(declaring);
 					if (superType != null) {
 						fPossibleCandidates= superType.newTypeHierarchy(fOwner, new SubProgressMonitor(monitor, 9, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)).getSubtypes(superType);
-						final LinkedList list= new LinkedList(Arrays.asList(fPossibleCandidates));
-						final Set names= new HashSet();
-						for (final Iterator iterator= list.iterator(); iterator.hasNext();) {
-							final IType type= (IType) iterator.next();
+						final LinkedList<IType> list= new LinkedList<IType>(Arrays.asList(fPossibleCandidates));
+						final Set<String> names= new HashSet<String>();
+						for (final Iterator<IType> iterator= list.iterator(); iterator.hasNext();) {
+							final IType type= iterator.next();
 							if (type.isReadOnly() || type.isBinary() || type.isAnonymous() || !type.isClass() || names.contains(type.getFullyQualifiedName()))
 								iterator.remove();
 							else
 								names.add(type.getFullyQualifiedName());
 						}
-						fPossibleCandidates= (IType[]) list.toArray(new IType[list.size()]);
+						fPossibleCandidates= list.toArray(new IType[list.size()]);
 					}
 				} catch (JavaModelException exception) {
 					JavaPlugin.log(exception);
@@ -910,6 +920,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object[] getElements() {
 		return new Object[] { getDeclaringType()};
 	}
@@ -1027,7 +1038,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_TYPES));
 		final RefactoringStatus status= new RefactoringStatus();
-		List elements= new ArrayList();
+		List<IJavaElement> elements= new ArrayList<IJavaElement>();
 		for (int index= 0; index < extractCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1);
 			handle= extended.getAttribute(attribute);
@@ -1040,8 +1051,8 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fMembersToMove= (IMember[]) elements.toArray(new IMember[elements.size()]);
-		elements= new ArrayList();
+		fMembersToMove= elements.toArray(new IMember[elements.size()]);
+		elements= new ArrayList<IJavaElement>();
 		for (int index= 0; index < deleteCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (extractCount + index + 1);
 			handle= extended.getAttribute(attribute);
@@ -1054,8 +1065,8 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fDeletedMethods= (IMethod[]) elements.toArray(new IMethod[elements.size()]);
-		elements= new ArrayList();
+		fDeletedMethods= elements.toArray(new IMethod[elements.size()]);
+		elements= new ArrayList<IJavaElement>();
 		for (int index= 0; index < abstractCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (extractCount + abstractCount + index + 1);
 			handle= extended.getAttribute(attribute);
@@ -1068,8 +1079,8 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fAbstractMethods= (IMethod[]) elements.toArray(new IMethod[elements.size()]);
-		elements= new ArrayList();
+		fAbstractMethods= elements.toArray(new IMethod[elements.size()]);
+		elements= new ArrayList<IJavaElement>();
 		for (int index= 0; index < typeCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (extractCount + abstractCount + deleteCount + index + 1);
 			handle= extended.getAttribute(attribute);
@@ -1082,7 +1093,7 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fTypesToExtract= (IType[]) elements.toArray(new IType[elements.size()]);
+		fTypesToExtract= elements.toArray(new IType[elements.size()]);
 		IJavaProject project= null;
 		if (fMembersToMove.length > 0)
 			project= fMembersToMove[0].getJavaProject();
@@ -1095,15 +1106,16 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void registerChanges(final TextEditBasedChangeManager manager) throws CoreException {
 		try {
 			final ICompilationUnit extractedUnit= getExtractedType().getCompilationUnit();
 			ICompilationUnit unit= null;
 			CompilationUnitRewrite rewrite= null;
-			for (final Iterator iterator= fCompilationUnitRewrites.keySet().iterator(); iterator.hasNext();) {
-				unit= (ICompilationUnit) iterator.next();
+			for (final Iterator<ICompilationUnit> iterator= fCompilationUnitRewrites.keySet().iterator(); iterator.hasNext();) {
+				unit= iterator.next();
 				if (unit.equals(extractedUnit)) {
-					rewrite= (CompilationUnitRewrite) fCompilationUnitRewrites.get(unit);
+					rewrite= fCompilationUnitRewrites.get(unit);
 					if (rewrite != null) {
 						CompilationUnitChange change= rewrite.createChange(true);
 
@@ -1124,9 +1136,9 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 						}
 					}
 				} else {
-					rewrite= (CompilationUnitRewrite) fCompilationUnitRewrites.get(unit);
+					rewrite= fCompilationUnitRewrites.get(unit);
 					if (rewrite != null) {
-						final CompilationUnitChange layerChange= (CompilationUnitChange) fLayerChanges.get(unit.getPrimary());
+						final CompilationUnitChange layerChange= fLayerChanges.get(unit.getPrimary());
 						final CompilationUnitChange rewriteChange= rewrite.createChange(true);
 						if (rewriteChange != null && layerChange != null) {
 							final MultiStateCompilationUnitChange change= new MultiStateCompilationUnitChange(rewriteChange.getName(), unit);
@@ -1143,9 +1155,9 @@ public final class ExtractSupertypeProcessor extends PullUpRefactoringProcessor
 					}
 				}
 			}
-			for (Iterator iterator= fLayerChanges.entrySet().iterator(); iterator.hasNext();) {
-				final Map.Entry entry= (Map.Entry) iterator.next();
-				manager.manage((ICompilationUnit) entry.getKey(), (TextEditBasedChange) entry.getValue());
+			for (Iterator<Entry<ICompilationUnit, CompilationUnitChange>> iterator= fLayerChanges.entrySet().iterator(); iterator.hasNext();) {
+				final Entry<ICompilationUnit, CompilationUnitChange> entry= iterator.next();
+				manager.manage(entry.getKey(), entry.getValue());
 			}
 			ICompilationUnit[] units= manager.getAllCompilationUnits();
 			for (int index= 0; index < units.length; index++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java
index 33e8b70..0ef894b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,6 +142,7 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 			fMapping= mapping;
 		}
 
+		@Override
 		public final boolean visit(final SimpleName node) {
 			final ITypeBinding binding= node.resolveTypeBinding();
 			if (binding != null && binding.isTypeVariable()) {
@@ -168,8 +169,8 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 		}
 	}
 
-	protected static boolean areAllFragmentsDeleted(final FieldDeclaration declaration, final List declarationNodes) {
-		for (final Iterator iterator= declaration.fragments().iterator(); iterator.hasNext();) {
+	protected static boolean areAllFragmentsDeleted(final FieldDeclaration declaration, final List<ASTNode> declarationNodes) {
+		for (final Iterator<VariableDeclarationFragment> iterator= declaration.fragments().iterator(); iterator.hasNext();) {
 			if (!declarationNodes.contains(iterator.next()))
 				return false;
 		}
@@ -183,9 +184,9 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 				try {
 					BodyDeclaration decl= ASTNodeSearchUtil.getBodyDeclarationNode(members[index], sourceRewriter.getRoot());
 					if (decl != null) {
-						for (final Iterator iterator= decl.modifiers().iterator(); iterator.hasNext();) {
+						for (final Iterator<IExtendedModifier> iterator= decl.modifiers().iterator(); iterator.hasNext();) {
 							boolean reported= false;
-							final IExtendedModifier modifier= (IExtendedModifier) iterator.next();
+							final IExtendedModifier modifier= iterator.next();
 							if (!reported && modifier.isAnnotation()) {
 								status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_incompatible_langauge_constructs, new String[] { JavaElementLabels.getTextLabel(members[index], JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(destination, JavaElementLabels.ALL_DEFAULT)}), JavaStatusContext.create(members[index])));
 								reported= true;
@@ -213,9 +214,9 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 		final AST ast= newField.getAST();
 		for (int index= 0, n= oldField.modifiers().size(); index < n; index++) {
 			final IExtendedModifier modifier= (IExtendedModifier) oldField.modifiers().get(index);
-			final List modifiers= newField.modifiers();
+			final List<IExtendedModifier> modifiers= newField.modifiers();
 			if (modifier.isAnnotation() && !modifiers.contains(modifier))
-				modifiers.add(index, ASTNode.copySubtree(ast, (Annotation) modifier));
+				modifiers.add(index, (IExtendedModifier) ASTNode.copySubtree(ast, (Annotation) modifier));
 		}
 	}
 
@@ -223,9 +224,9 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 		final AST ast= newMethod.getAST();
 		for (int index= 0, n= oldMethod.modifiers().size(); index < n; index++) {
 			final IExtendedModifier modifier= (IExtendedModifier) oldMethod.modifiers().get(index);
-			final List modifiers= newMethod.modifiers();
+			final List<IExtendedModifier> modifiers= newMethod.modifiers();
 			if (modifier.isAnnotation() && !modifiers.contains(modifier))
-				modifiers.add(index, ASTNode.copySubtree(ast, (Annotation) modifier));
+				modifiers.add(index, (IExtendedModifier) ASTNode.copySubtree(ast, (Annotation) modifier));
 		}
 	}
 
@@ -335,16 +336,19 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 			final ITrackedNodePosition position= rewriter.track(bodyDeclaration);
 			bodyDeclaration.accept(new TypeVariableMapper(rewriter, mapping) {
 
+				@Override
 				public final boolean visit(final AnnotationTypeDeclaration node) {
 					ModifierRewrite.create(fRewrite, bodyDeclaration).setVisibility(Modifier.PROTECTED, null);
 					return true;
 				}
 
+				@Override
 				public final boolean visit(final EnumDeclaration node) {
 					ModifierRewrite.create(fRewrite, bodyDeclaration).setVisibility(Modifier.PROTECTED, null);
 					return true;
 				}
 
+				@Override
 				public final boolean visit(final TypeDeclaration node) {
 					ModifierRewrite.create(fRewrite, bodyDeclaration).setVisibility(Modifier.PROTECTED, null);
 					return true;
@@ -423,10 +427,10 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 		return result;
 	}
 
-	protected static void deleteDeclarationNodes(final CompilationUnitRewrite sourceRewriter, final boolean sameCu, final CompilationUnitRewrite unitRewriter, final List members, final GroupCategorySet set) throws JavaModelException {
-		final List declarationNodes= getDeclarationNodes(unitRewriter.getRoot(), members);
-		for (final Iterator iterator= declarationNodes.iterator(); iterator.hasNext();) {
-			final ASTNode node= (ASTNode) iterator.next();
+	protected static void deleteDeclarationNodes(final CompilationUnitRewrite sourceRewriter, final boolean sameCu, final CompilationUnitRewrite unitRewriter, final List<IMember> members, final GroupCategorySet set) throws JavaModelException {
+		final List<ASTNode> declarationNodes= getDeclarationNodes(unitRewriter.getRoot(), members);
+		for (final Iterator<ASTNode> iterator= declarationNodes.iterator(); iterator.hasNext();) {
+			final ASTNode node= iterator.next();
 			final ASTRewrite rewriter= unitRewriter.getASTRewrite();
 			final ImportRemover remover= unitRewriter.getImportRemover();
 			if (node instanceof VariableDeclarationFragment) {
@@ -450,10 +454,10 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 		}
 	}
 
-	protected static List getDeclarationNodes(final CompilationUnit cuNode, final List members) throws JavaModelException {
-		final List result= new ArrayList(members.size());
-		for (final Iterator iterator= members.iterator(); iterator.hasNext();) {
-			final IMember member= (IMember) iterator.next();
+	protected static List<ASTNode> getDeclarationNodes(final CompilationUnit cuNode, final List<IMember> members) throws JavaModelException {
+		final List<ASTNode> result= new ArrayList<ASTNode>(members.size());
+		for (final Iterator<IMember> iterator= members.iterator(); iterator.hasNext();) {
+			final IMember member= iterator.next();
 			ASTNode node= null;
 			if (member instanceof IField) {
 				if (Flags.isEnum(member.getFlags()))
@@ -488,7 +492,7 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 	protected IType fCachedDeclaringType;
 
 	/** The cached member references */
-	protected final Map fCachedMembersReferences= new HashMap(2);
+	protected final Map<IMember, Object[]> fCachedMembersReferences= new HashMap<IMember, Object[]>(2);
 
 	/** The cached type references */
 	protected IType[] fCachedReferencedTypes;
@@ -629,6 +633,7 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 		newMethod.setReturnType2(newReturnType);
 	}
 
+	@Override
 	protected SuperTypeConstraintsSolver createContraintSolver(final SuperTypeConstraintsModel model) {
 		return new SuperTypeConstraintsSolver(model);
 	}
@@ -649,8 +654,8 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 	protected IType[] getTypesReferencedInMovedMembers(final IProgressMonitor monitor) throws JavaModelException {
 		if (fCachedReferencedTypes == null) {
 			final IType[] types= ReferenceFinderUtil.getTypesReferencedIn(fMembersToMove, fOwner, monitor);
-			final List result= new ArrayList(types.length);
-			final List members= Arrays.asList(fMembersToMove);
+			final List<IType> result= new ArrayList<IType>(types.length);
+			final List<IMember> members= Arrays.asList(fMembersToMove);
 			for (int index= 0; index < types.length; index++) {
 				if (!members.contains(types[index]) && !types[index].equals(getDeclaringType()))
 					result.add(types[index]);
@@ -697,6 +702,7 @@ public abstract class HierarchyProcessor extends SuperTypeRefactoringProcessor {
 		return false;
 	}
 
+	@Override
 	public RefactoringParticipant[] loadParticipants(final RefactoringStatus status, final SharableParticipants sharedParticipants) throws CoreException {
 		return new RefactoringParticipant[0];
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IDefaultValueAdvisor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IDefaultValueAdvisor.java
index b958c42..2ee34fd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IDefaultValueAdvisor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IDefaultValueAdvisor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ public interface IDefaultValueAdvisor {
 	 * @param cuRewrite the CompilationUnitRewrite to use for rewrite, imports etc..
 	 * @return a new Expression to be used as argument for the new parameter
 	 */
-	Expression createDefaultExpression(List/*<Expression>*/ invocationArguments, ParameterInfo addedInfo, List/*<ParameterInfo>*/ parameterInfos, MethodDeclaration enclosingMethod, boolean isRecursive, CompilationUnitRewrite cuRewrite);
+	Expression createDefaultExpression(List<Expression> invocationArguments, ParameterInfo addedInfo, List<ParameterInfo> parameterInfos, MethodDeclaration enclosingMethod, boolean isRecursive, CompilationUnitRewrite cuRewrite);
 
 	/**
 	 * Create a type for the added parameter.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java
index 2fbf7f9..9c7534d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,15 +54,15 @@ public class ImportRemover {
 		}
 	}
 
-	private Set/* <String> */fAddedImports= new HashSet();
+	private Set<String> fAddedImports= new HashSet<String>();
 
-	private Set/* <StaticImportData> */fAddedStaticImports= new HashSet();
+	private Set<StaticImportData> fAddedStaticImports= new HashSet<StaticImportData>();
 
 	private final IJavaProject fProject;
 
-	private List/* <ASTNode> */fRemovedNodes= new ArrayList();
+	private List<ASTNode> fRemovedNodes= new ArrayList<ASTNode>();
 
-	private List/* <ImportDeclaration> */fInlinedStaticImports= new ArrayList();
+	private List<ImportDeclaration> fInlinedStaticImports= new ArrayList<ImportDeclaration>();
 
 	private final CompilationUnit fRoot;
 
@@ -71,63 +71,63 @@ public class ImportRemover {
 		fRoot= root;
 	}
 
-	private void divideTypeRefs(List/* <SimpleName> */importNames, List/* <SimpleName> */staticNames, List/* <SimpleName> */removedRefs, List/* <SimpleName> */unremovedRefs) {
+	private void divideTypeRefs(List<SimpleName> importNames, List<SimpleName> staticNames, List<SimpleName> removedRefs, List<SimpleName> unremovedRefs) {
 		int[] removedStartsEnds= new int[2 * fRemovedNodes.size()];
 		for (int index= 0; index < fRemovedNodes.size(); index++) {
-			ASTNode node= (ASTNode) fRemovedNodes.get(index);
+			ASTNode node= fRemovedNodes.get(index);
 			int start= node.getStartPosition();
 			removedStartsEnds[2 * index]= start;
 			removedStartsEnds[2 * index + 1]= start + node.getLength();
 		}
-		for (Iterator iterator= importNames.iterator(); iterator.hasNext();) {
-			SimpleName name= (SimpleName) iterator.next();
+		for (Iterator<SimpleName> iterator= importNames.iterator(); iterator.hasNext();) {
+			SimpleName name= iterator.next();
 			if (isInRemoved(name, removedStartsEnds))
 				removedRefs.add(name);
 			else
 				unremovedRefs.add(name);
 		}
-		for (Iterator iterator= staticNames.iterator(); iterator.hasNext();) {
-			SimpleName name= (SimpleName) iterator.next();
+		for (Iterator<SimpleName> iterator= staticNames.iterator(); iterator.hasNext();) {
+			SimpleName name= iterator.next();
 			if (isInRemoved(name, removedStartsEnds))
 				removedRefs.add(name);
 			else
 				unremovedRefs.add(name);
 		}
-		for (Iterator iterator= fInlinedStaticImports.iterator(); iterator.hasNext(); ) {
-			ImportDeclaration importDecl= (ImportDeclaration) iterator.next();
+		for (Iterator<ImportDeclaration> iterator= fInlinedStaticImports.iterator(); iterator.hasNext(); ) {
+			ImportDeclaration importDecl= iterator.next();
 			Name name= importDecl.getName();
 			if (name instanceof QualifiedName)
 				name= ((QualifiedName) name).getName();
-			removedRefs.add(name);
+			removedRefs.add((SimpleName) name);
 		}
 	}
 
 	public IBinding[] getImportsToRemove() {
-		ArrayList/* <SimpleName> */importNames= new ArrayList();
-		ArrayList/* <SimpleName> */staticNames= new ArrayList();
+		ArrayList<SimpleName> importNames= new ArrayList<SimpleName>();
+		ArrayList<SimpleName> staticNames= new ArrayList<SimpleName>();
 
 		ImportReferencesCollector.collect(fRoot, fProject, null, importNames, staticNames);
 
-		List/* <SimpleName> */removedRefs= new ArrayList();
-		List/* <SimpleName> */unremovedRefs= new ArrayList();
+		List<SimpleName> removedRefs= new ArrayList<SimpleName>();
+		List<SimpleName> unremovedRefs= new ArrayList<SimpleName>();
 		divideTypeRefs(importNames, staticNames, removedRefs, unremovedRefs);
 		if (removedRefs.size() == 0)
 			return new IBinding[0];
 
-		HashMap/* <String, IBinding> */potentialRemoves= getPotentialRemoves(removedRefs);
-		for (Iterator iterator= unremovedRefs.iterator(); iterator.hasNext();) {
-			SimpleName name= (SimpleName) iterator.next();
+		HashMap<String, IBinding>potentialRemoves= getPotentialRemoves(removedRefs);
+		for (Iterator<SimpleName> iterator= unremovedRefs.iterator(); iterator.hasNext();) {
+			SimpleName name= iterator.next();
 			potentialRemoves.remove(name.getIdentifier());
 		}
 
-		Collection importsToRemove= potentialRemoves.values();
-		return (IBinding[]) importsToRemove.toArray(new IBinding[importsToRemove.size()]);
+		Collection<IBinding> importsToRemove= potentialRemoves.values();
+		return importsToRemove.toArray(new IBinding[importsToRemove.size()]);
 	}
 
-	private HashMap getPotentialRemoves(List removedRefs) {
-		HashMap/* <String, IBinding> */potentialRemoves= new HashMap();
-		for (Iterator iterator= removedRefs.iterator(); iterator.hasNext();) {
-			SimpleName name= (SimpleName) iterator.next();
+	private HashMap<String, IBinding> getPotentialRemoves(List<SimpleName> removedRefs) {
+		HashMap<String, IBinding>potentialRemoves= new HashMap<String, IBinding>();
+		for (Iterator<SimpleName> iterator= removedRefs.iterator(); iterator.hasNext();) {
+			SimpleName name= iterator.next();
 			if (fAddedImports.contains(name.getIdentifier()) || hasAddedStaticImport(name))
 				continue;
 			IBinding binding= name.resolveBinding();
@@ -151,8 +151,8 @@ public class ImportRemover {
 
 	private boolean hasAddedStaticImport(String qualifier, String member, boolean field) {
 		StaticImportData data= null;
-		for (final Iterator iterator= fAddedStaticImports.iterator(); iterator.hasNext();) {
-			data= (StaticImportData) iterator.next();
+		for (final Iterator<StaticImportData> iterator= fAddedStaticImports.iterator(); iterator.hasNext();) {
+			data= iterator.next();
 			if (data.fQualifier.equals(qualifier) && data.fMember.equals(member) && data.fField == field)
 				return true;
 		}
@@ -188,16 +188,19 @@ public class ImportRemover {
 				fAddedImports.add(name.getIdentifier());
 			}
 
+			@Override
 			public boolean visit(QualifiedName node) {
 				addName(node.getName());
 				return false;
 			}
 
+			@Override
 			public boolean visit(QualifiedType node) {
 				addName(node.getName());
 				return false;
 			}
 
+			@Override
 			public boolean visit(SimpleName node) {
 				addName(node);
 				return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRewriteUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRewriteUtil.java
index 7a510e9..3e6524c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRewriteUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRewriteUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,7 @@ public final class ImportRewriteUtil {
 	 * @param staticImports the map of name nodes to strings (element type: Map <Name, String>).
 	 * @param declarations <code>true</code> if method declarations are treated as abstract, <code>false</code> otherwise
 	 */
-	public static void addImports(final CompilationUnitRewrite rewrite, ImportRewriteContext context, final ASTNode node, final Map typeImports, final Map staticImports, final boolean declarations) {
+	public static void addImports(final CompilationUnitRewrite rewrite, ImportRewriteContext context, final ASTNode node, final Map<Name, String> typeImports, final Map<Name, String> staticImports, final boolean declarations) {
 		addImports(rewrite, context, node, typeImports, staticImports, null, declarations);
 	}
 
@@ -63,13 +63,13 @@ public final class ImportRewriteUtil {
 	 * @param excludeBindings the set of bindings to exclude (element type: Set <IBinding>).
 	 * @param declarations <code>true</code> if method declarations are treated as abstract, <code>false</code> otherwise
 	 */
-	public static void addImports(final CompilationUnitRewrite rewrite, ImportRewriteContext context, final ASTNode node, final Map typeImports, final Map staticImports, final Collection excludeBindings, final boolean declarations) {
+	public static void addImports(final CompilationUnitRewrite rewrite, ImportRewriteContext context, final ASTNode node, final Map<Name, String> typeImports, final Map<Name, String> staticImports, final Collection<IBinding> excludeBindings, final boolean declarations) {
 		Assert.isNotNull(rewrite);
 		Assert.isNotNull(node);
 		Assert.isNotNull(typeImports);
 		Assert.isNotNull(staticImports);
-		final Set types= new HashSet();
-		final Set members= new HashSet();
+		final Set<SimpleName> types= new HashSet<SimpleName>();
+		final Set<SimpleName> members= new HashSet<SimpleName>();
 
 		ImportReferencesCollector.collect(node, rewrite.getCu().getJavaProject(), null, declarations, types, members);
 
@@ -77,8 +77,8 @@ public final class ImportRewriteUtil {
 		final ImportRemover remover= rewrite.getImportRemover();
 		Name name= null;
 		IBinding binding= null;
-		for (final Iterator iterator= types.iterator(); iterator.hasNext();) {
-			name= (Name) iterator.next();
+		for (final Iterator<SimpleName> iterator= types.iterator(); iterator.hasNext();) {
+			name= iterator.next();
 			binding= name.resolveBinding();
 			if (binding instanceof ITypeBinding) {
 				final ITypeBinding type= (ITypeBinding) binding;
@@ -88,8 +88,8 @@ public final class ImportRewriteUtil {
 				}
 			}
 		}
-		for (final Iterator iterator= members.iterator(); iterator.hasNext();) {
-			name= (Name) iterator.next();
+		for (final Iterator<SimpleName> iterator= members.iterator(); iterator.hasNext();) {
+			name= iterator.next();
 			binding= name.resolveBinding();
 			if (binding instanceof IVariableBinding) {
 				final IVariableBinding variable= (IVariableBinding) binding;
@@ -118,7 +118,7 @@ public final class ImportRewriteUtil {
 	 * @param staticBindings the set of bindings (element type: Set <IBinding>).
 	 * @param declarations <code>true</code> if method declarations are treated as abstract, <code>false</code> otherwise
 	 */
-	public static void collectImports(final IJavaProject project, final ASTNode node, final Collection typeBindings, final Collection staticBindings, final boolean declarations) {
+	public static void collectImports(final IJavaProject project, final ASTNode node, final Collection<ITypeBinding> typeBindings, final Collection<IBinding> staticBindings, final boolean declarations) {
 		collectImports(project, node, typeBindings, staticBindings, null, declarations);
 	}
 
@@ -132,20 +132,20 @@ public final class ImportRewriteUtil {
 	 * @param excludeBindings the set of bindings to exclude (element type: Set <IBinding>).
 	 * @param declarations <code>true</code> if method declarations are treated as abstract, <code>false</code> otherwise
 	 */
-	public static void collectImports(final IJavaProject project, final ASTNode node, final Collection typeBindings, final Collection staticBindings, final Collection excludeBindings, final boolean declarations) {
+	public static void collectImports(final IJavaProject project, final ASTNode node, final Collection<ITypeBinding> typeBindings, final Collection<IBinding> staticBindings, final Collection<IBinding> excludeBindings, final boolean declarations) {
 		Assert.isNotNull(project);
 		Assert.isNotNull(node);
 		Assert.isNotNull(typeBindings);
 		Assert.isNotNull(staticBindings);
-		final Set types= new HashSet();
-		final Set members= new HashSet();
+		final Set<SimpleName> types= new HashSet<SimpleName>();
+		final Set<SimpleName> members= new HashSet<SimpleName>();
 
 		ImportReferencesCollector.collect(node, project, null, declarations, types, members);
 
 		Name name= null;
 		IBinding binding= null;
-		for (final Iterator iterator= types.iterator(); iterator.hasNext();) {
-			name= (Name) iterator.next();
+		for (final Iterator<SimpleName> iterator= types.iterator(); iterator.hasNext();) {
+			name= iterator.next();
 			binding= name.resolveBinding();
 			if (binding instanceof ITypeBinding) {
 				final ITypeBinding type= (ITypeBinding) binding;
@@ -153,8 +153,8 @@ public final class ImportRewriteUtil {
 					typeBindings.add(type);
 			}
 		}
-		for (final Iterator iterator= members.iterator(); iterator.hasNext();) {
-			name= (Name) iterator.next();
+		for (final Iterator<SimpleName> iterator= members.iterator(); iterator.hasNext();) {
+			name= iterator.next();
 			binding= name.resolveBinding();
 			if (binding != null && (excludeBindings == null || !excludeBindings.contains(binding)))
 				staticBindings.add(binding);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java
index f95c492..03f695a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.ltk.core.refactoring.Change;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
 
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
@@ -55,6 +56,7 @@ import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.Message;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.NullLiteral;
@@ -66,13 +68,13 @@ import org.eclipse.jdt.core.dom.SuperFieldAccess;
 import org.eclipse.jdt.core.dom.SuperMethodInvocation;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
-import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.descriptors.IntroduceParameterObjectDescriptor;
-import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
 import org.eclipse.jdt.core.refactoring.descriptors.IntroduceParameterObjectDescriptor.Parameter;
+import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
+import org.eclipse.jdt.core.refactoring.participants.IRefactoringProcessorIds;
 
 import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory;
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
@@ -93,7 +95,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor {
 
 	private final class ParameterObjectCreator implements IDefaultValueAdvisor {
-		public Expression createDefaultExpression(List invocationArguments, ParameterInfo addedInfo, List parameterInfos, MethodDeclaration enclosingMethod, boolean isRecursive, CompilationUnitRewrite cuRewrite) {
+		public Expression createDefaultExpression(List<Expression> invocationArguments, ParameterInfo addedInfo, List<ParameterInfo> parameterInfos, MethodDeclaration enclosingMethod, boolean isRecursive, CompilationUnitRewrite cuRewrite) {
 			final AST ast= cuRewrite.getAST();
 			final ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			if (isRecursive && canReuseParameterObject(invocationArguments, addedInfo, parameterInfos, enclosingMethod)) {
@@ -104,15 +106,15 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			int startPosition= enclosingMethod != null ? enclosingMethod.getStartPosition() : cuRewrite.getRoot().getStartPosition();
 			ContextSensitiveImportRewriteContext context= fParameterObjectFactory.createParameterClassAwareContext(fCreateAsTopLevel, cuRewrite, startPosition);
 			classCreation.setType(fParameterObjectFactory.createType(fCreateAsTopLevel, cuRewrite, startPosition));
-			List constructorArguments= classCreation.arguments();
-			for (Iterator iter= parameterInfos.iterator(); iter.hasNext();) {
-				ParameterInfo pi= (ParameterInfo) iter.next();
+			List<Expression> constructorArguments= classCreation.arguments();
+			for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
+				ParameterInfo pi= iter.next();
 				if (isValidField(pi)) {
 					if (pi.isOldVarargs()) {
 						boolean isLastParameter= !iter.hasNext();
 						constructorArguments.addAll(computeVarargs(invocationArguments, pi, isLastParameter, cuRewrite, context));
 					} else {
-						Expression exp= (Expression) invocationArguments.get(pi.getOldIndex());
+						Expression exp= invocationArguments.get(pi.getOldIndex());
 						importNodeTypes(exp, cuRewrite, context);
 						constructorArguments.add(moveNode(exp, rewrite));
 					}
@@ -125,15 +127,15 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			return fParameterObjectFactory.createType(fCreateAsTopLevel, cuRewrite, startPosition);
 		}
 
-		private boolean canReuseParameterObject(List invocationArguments, ParameterInfo addedInfo, List parameterInfos, MethodDeclaration enclosingMethod) {
+		private boolean canReuseParameterObject(List<Expression> invocationArguments, ParameterInfo addedInfo, List<ParameterInfo> parameterInfos, MethodDeclaration enclosingMethod) {
 			Assert.isNotNull(enclosingMethod);
-			List parameters= enclosingMethod.parameters();
-			for (Iterator iter= parameterInfos.iterator(); iter.hasNext();) {
-				ParameterInfo pi= (ParameterInfo) iter.next();
+			List<SingleVariableDeclaration> parameters= enclosingMethod.parameters();
+			for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
+				ParameterInfo pi= iter.next();
 				if (isValidField(pi)) {
 					if (!pi.isInlined())
 						return false;
-					ASTNode node= (ASTNode) invocationArguments.get(pi.getOldIndex());
+					ASTNode node= invocationArguments.get(pi.getOldIndex());
 					if (!isParameter(pi, node, parameters, addedInfo.getNewName())) {
 						return false;
 					}
@@ -142,12 +144,12 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			return true;
 		}
 
-		private List computeVarargs(List invocationArguments, ParameterInfo varArgPI, boolean isLastParameter, CompilationUnitRewrite cuRewrite, ContextSensitiveImportRewriteContext context) {
+		private List<Expression> computeVarargs(List<Expression> invocationArguments, ParameterInfo varArgPI, boolean isLastParameter, CompilationUnitRewrite cuRewrite, ContextSensitiveImportRewriteContext context) {
 			boolean isEmptyVarArg= varArgPI.getOldIndex() >= invocationArguments.size();
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getAST();
-			ASTNode lastNode= isEmptyVarArg ? null : (ASTNode) invocationArguments.get(varArgPI.getOldIndex());
-			List constructorArguments= new ArrayList();
+			ASTNode lastNode= isEmptyVarArg ? null : invocationArguments.get(varArgPI.getOldIndex());
+			List<Expression> constructorArguments= new ArrayList<Expression>();
 			if (lastNode instanceof ArrayCreation) {
 				ArrayCreation creation= (ArrayCreation) lastNode;
 				ITypeBinding arrayType= creation.resolveTypeBinding();
@@ -159,7 +161,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			if (isLastParameter) {
 				// copy all varargs
 				for (int i= varArgPI.getOldIndex(); i < invocationArguments.size(); i++) {
-					ASTNode node= (ASTNode) invocationArguments.get(i);
+					Expression node= invocationArguments.get(i);
 					importNodeTypes(node, cuRewrite, context);
 					constructorArguments.add(moveNode(node, rewrite));
 				}
@@ -171,9 +173,9 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 					ArrayCreation creation= ast.newArrayCreation();
 					creation.setType((ArrayType) importBinding(varArgPI.getNewTypeBinding(), cuRewrite, context));
 					ArrayInitializer initializer= ast.newArrayInitializer();
-					List expressions= initializer.expressions();
+					List<Expression> expressions= initializer.expressions();
 					for (int i= varArgPI.getOldIndex(); i < invocationArguments.size(); i++) {
-						ASTNode node= (ASTNode) invocationArguments.get(i);
+						Expression node= invocationArguments.get(i);
 						importNodeTypes(node, cuRewrite, context);
 						expressions.add(moveNode(node, rewrite));
 					}
@@ -203,7 +205,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		}
 	}
 
-	private boolean isParameter(ParameterInfo pi, ASTNode node, List enclosingMethodParameters, String qualifier) {
+	private boolean isParameter(ParameterInfo pi, ASTNode node, List<SingleVariableDeclaration> enclosingMethodParameters, String qualifier) {
 		if (node instanceof Name) {
 			Name name= (Name) node;
 			IVariableBinding binding= ASTNodes.getVariableBinding(name);
@@ -220,6 +222,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 	}
 
 	private final class RewriteParameterBody extends BodyUpdater {
+		@Override
 		public void updateBody(MethodDeclaration methodDeclaration, final CompilationUnitRewrite cuRewrite, RefactoringStatus result) throws CoreException {
 			// ensure that the parameterObject is imported
 			fParameterObjectFactory.createType(fCreateAsTopLevel, cuRewrite, methodDeclaration.getStartPosition());
@@ -228,17 +231,18 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 				fParameterClassCreated= true;
 			}
 			Block body= methodDeclaration.getBody();
-			final List parameters= methodDeclaration.parameters();
+			final List<SingleVariableDeclaration> parameters= methodDeclaration.parameters();
 			if (body != null) { // abstract methods don't have bodies
 				final ASTRewrite rewriter= cuRewrite.getASTRewrite();
 				ListRewrite bodyStatements= rewriter.getListRewrite(body, Block.STATEMENTS_PROPERTY);
-				List managedParams= getParameterInfos();
-				for (Iterator iter= managedParams.iterator(); iter.hasNext();) {
-					final ParameterInfo pi= (ParameterInfo) iter.next();
+				List<ParameterInfo> managedParams= getParameterInfos();
+				for (Iterator<ParameterInfo> iter= managedParams.iterator(); iter.hasNext();) {
+					final ParameterInfo pi= iter.next();
 					if (isValidField(pi)) {
 						if (isReadOnly(pi, body, parameters, null)) {
 							body.accept(new ASTVisitor(false) {
 
+								@Override
 								public boolean visit(SimpleName node) {
 									updateSimpleName(rewriter, pi, node, parameters, cuRewrite.getCu().getJavaProject());
 									return false;
@@ -257,7 +261,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 
 		}
 
-		private void updateSimpleName(ASTRewrite rewriter, ParameterInfo pi, SimpleName node, List enclosingParameters, IJavaProject project) {
+		private void updateSimpleName(ASTRewrite rewriter, ParameterInfo pi, SimpleName node, List<SingleVariableDeclaration> enclosingParameters, IJavaProject project) {
 			AST ast= rewriter.getAST();
 			IBinding binding= node.resolveBinding();
 			Expression replacementNode= fParameterObjectFactory.createFieldReadAccess(pi, getParameterName(), ast, project, false, null);
@@ -276,16 +280,18 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			}
 		}
 
-		private boolean isReadOnly(final ParameterInfo pi, Block block, final List enclosingMethodParameters, final String qualifier) {
+		private boolean isReadOnly(final ParameterInfo pi, Block block, final List<SingleVariableDeclaration> enclosingMethodParameters, final String qualifier) {
 			class NotWrittenDetector extends ASTVisitor {
 				boolean notWritten= true;
 
+				@Override
 				public boolean visit(SimpleName node) {
 					if (isParameter(pi, node, enclosingMethodParameters, qualifier) && ASTResolving.isWriteAccess(node))
 						notWritten= false;
 					return false;
 				}
 
+				@Override
 				public boolean visit(SuperFieldAccess node) {
 					return false;
 				}
@@ -295,6 +301,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			return visitor.notWritten;
 		}
 
+		@Override
 		public boolean needsParameterUsedCheck() {
 			return false;
 		}
@@ -315,7 +322,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 
 	private boolean fParameterClassCreated= false;
 
-	private List/*<Change>*/ fOtherChanges;
+	private List<ResourceChange> fOtherChanges;
 
 	public IntroduceParameterObjectProcessor(IntroduceParameterObjectDescriptor descriptor) throws JavaModelException {
 		super(descriptor.getMethod());
@@ -339,20 +346,20 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			ref.setPackage(parameter.getPackageName());
 		if (parameter.getParameterName() != null)
 			ref.setParameterName(parameter.getParameterName());
-		List pis= ref.getParameterInfos();
+		List<ParameterInfo> pis= ref.getParameterInfos();
 		Parameter[] parameters= parameter.getParameters();
 		if (parameters == null)
 			parameters= IntroduceParameterObjectDescriptor.createParameters(getMethod());
-		Map paramIndex= new HashMap();
-		for (Iterator iter= pis.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		Map<Integer, ParameterInfo> paramIndex= new HashMap<Integer, ParameterInfo>();
+		for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			paramIndex.put(new Integer(pi.getOldIndex()), pi);
 		}
 		paramIndex.put(new Integer(ParameterInfo.INDEX_FOR_ADDED), fParameterObjectReference);
 		pis.clear();
 		for (int i= 0; i < parameters.length; i++) {
 			Parameter param= parameters[i];
-			ParameterInfo pi= (ParameterInfo) paramIndex.get(new Integer(param.getIndex()));
+			ParameterInfo pi= paramIndex.get(new Integer(param.getIndex()));
 			pis.add(pi);
 			if (param != IntroduceParameterObjectDescriptor.PARAMETER_OBJECT) {
 				pi.setCreateField(param.isCreateField());
@@ -383,6 +390,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		updateReferenceType();
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		RefactoringStatus status= new RefactoringStatus();
 		IMethod method= getMethod();
@@ -395,6 +403,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		return status;
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		RefactoringStatus status= new RefactoringStatus();
 		status.merge(super.checkInitialConditions(pm));
@@ -423,9 +432,9 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		if (fParameterObjectFactory.getEnclosingType() == null)
 			fParameterObjectFactory.setEnclosingType(declaringClass.getQualifiedName());
 
-		List parameterInfos= super.getParameterInfos();
-		for (Iterator iter= parameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		List<ParameterInfo> parameterInfos= super.getParameterInfos();
+		for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (!pi.isAdded()) {
 				if (pi.getOldName().equals(pi.getNewName())) // may have been
 																// set to
@@ -438,20 +447,21 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		if (!parameterInfos.contains(fParameterObjectReference)) {
 			parameterInfos.add(0, fParameterObjectReference);
 		}
-		Map bindingMap= new HashMap();
-		for (Iterator iter= fMethodDeclaration.parameters().iterator(); iter.hasNext();) {
-			SingleVariableDeclaration sdv= (SingleVariableDeclaration) iter.next();
+		Map<String, IVariableBinding> bindingMap= new HashMap<String, IVariableBinding>();
+		for (Iterator<SingleVariableDeclaration> iter= fMethodDeclaration.parameters().iterator(); iter.hasNext();) {
+			SingleVariableDeclaration sdv= iter.next();
 			bindingMap.put(sdv.getName().getIdentifier(), sdv.resolveBinding());
 		}
-		for (Iterator iter= parameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (pi != fParameterObjectReference)
-				pi.setOldBinding((IVariableBinding) bindingMap.get(pi.getOldName()));
+				pi.setOldBinding(bindingMap.get(pi.getOldName()));
 		}
 		fParameterObjectFactory.setVariables(parameterInfos);
 		return status;
 	}
 
+	@Override
 	protected boolean shouldReport(IProblem problem, CompilationUnit cu) {
 		if (!super.shouldReport(problem, cu))
 			return false;
@@ -497,27 +507,32 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		return StubUtility.getVariableNameSuggestions(NamingConventions.VK_INSTANCE_FIELD, javaProject, stripped, dim, null, true)[0];
 	}
 
+	@Override
 	public Change[] getAllChanges() {
-		ArrayList changes= new ArrayList();
+		ArrayList<Change> changes= new ArrayList<Change>();
 		changes.addAll(Arrays.asList(super.getAllChanges()));
 		changes.addAll(fOtherChanges);
-		return (Change[]) changes.toArray(new Change[changes.size()]);
+		return changes.toArray(new Change[changes.size()]);
 	}
 
+	@Override
 	protected void clearManagers() {
 		super.clearManagers();
-		fOtherChanges= new ArrayList();
+		fOtherChanges= new ArrayList<ResourceChange>();
 		fParameterClassCreated= false;
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.IntroduceParameterObjectRefactoring_refactoring_name;
 	}
 
+	@Override
 	public String getIdentifier() {
-		return "org.eclipse.jdt.ui.introduceParameterObjectRefactoring"; //$NON-NLS-1$;
+		return IRefactoringProcessorIds.INTRODUCE_PARAMETER_OBJECT_PROCESSOR;
 	}
 
+	@Override
 	public JavaRefactoringDescriptor createDescriptor() {
 		IntroduceParameterObjectDescriptor ipod= RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor();
 		ipod.setMethod(getMethod());
@@ -530,10 +545,10 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		ipod.setParameterName(getParameterName());
 		ipod.setTopLevel(isCreateAsTopLevel());
 
-		ArrayList parameters= new ArrayList();
-		List pis= getParameterInfos();
-		for (Iterator iter= pis.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		ArrayList<Parameter> parameters= new ArrayList<Parameter>();
+		List<ParameterInfo> pis= getParameterInfos();
+		for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (pi.isAdded()) {
 				parameters.add(IntroduceParameterObjectDescriptor.PARAMETER_OBJECT);
 			} else {
@@ -545,7 +560,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 				parameters.add(parameter);
 			}
 		}
-		ipod.setParameters((Parameter[]) parameters.toArray(new Parameter[parameters.size()]));
+		ipod.setParameters(parameters.toArray(new Parameter[parameters.size()]));
 		String project= getCompilationUnit().getJavaProject().getElementName();
 		try {
 			ipod.setComment(createComment(project).asString());
@@ -567,11 +582,11 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		} else {
 			comment.addSetting(Messages.format(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_descriptor_enclosing_type, BasicElementLabels.getJavaElementName(fParameterObjectFactory.getEnclosingType())));
 		}
-		List infos= getParameterInfos();
-		List kept= new ArrayList();
-		List fields= new ArrayList();
-		for (Iterator iter= infos.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		List<ParameterInfo> infos= getParameterInfos();
+		List<String> kept= new ArrayList<String>();
+		List<String> fields= new ArrayList<String>();
+		for (Iterator<ParameterInfo> iter= infos.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (pi.isCreateField()) {
 				fields.add(pi.getNewName());
 			} else {
@@ -581,9 +596,9 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 			}
 		}
 
-		comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_descriptor_fields, (String[]) fields.toArray(new String[0])));
+		comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_descriptor_fields, fields.toArray(new String[0])));
 		if (!kept.isEmpty())
-			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_descriptor_keep_parameter, (String[]) kept.toArray(new String[0])));
+			comment.addSetting(JDTRefactoringDescriptorComment.createCompositeSetting(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_descriptor_keep_parameter, kept.toArray(new String[0])));
 		if (fParameterObjectFactory.isCreateGetter())
 			comment.addSetting(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_descriptor_create_getter);
 		if (fParameterObjectFactory.isCreateSetter())
@@ -591,6 +606,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		return comment;
 	}
 
+	@Override
 	protected String doGetRefactoringChangeName() {
 		return getProcessorName();
 	}
@@ -710,11 +726,11 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		fParameterObjectFactory.setPackage(typeQualifier);
 	}
 
-	private String getNameInScope(ParameterInfo pi, List enclosingMethodParameters) {
+	private String getNameInScope(ParameterInfo pi, List<SingleVariableDeclaration> enclosingMethodParameters) {
 		Assert.isNotNull(enclosingMethodParameters);
 		boolean emptyVararg= pi.getOldIndex() >= enclosingMethodParameters.size();
 		if (!emptyVararg) {
-			SingleVariableDeclaration svd= (SingleVariableDeclaration) enclosingMethodParameters.get(pi.getOldIndex());
+			SingleVariableDeclaration svd= enclosingMethodParameters.get(pi.getOldIndex());
 			return svd.getName().getIdentifier();
 		}
 		return null;
@@ -728,6 +744,7 @@ public class IntroduceParameterObjectProcessor extends ChangeSignatureProcessor
 		return getBaseCuRewrite().getCu();
 	}
 
+	@Override
 	protected int getDescriptorFlags() {
 		return super.getDescriptorFlags() | JavaRefactoringDescriptor.JAR_SOURCE_ATTACHMENT;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberCheckUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberCheckUtil.java
index 0dbbff1..39e9e1f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberCheckUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberCheckUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -128,14 +128,14 @@ class MemberCheckUtil {
 	}
 
 	private static IType[] getAllEnclosedTypes(IType type) throws JavaModelException {
-		List result= new ArrayList(2);
+		List<IType> result= new ArrayList<IType>(2);
 		IType[] directlyEnclosed= type.getTypes();
 		result.addAll(Arrays.asList(directlyEnclosed));
 		for (int i= 0; i < directlyEnclosed.length; i++) {
 			IType enclosedType= directlyEnclosed[i];
 			result.addAll(Arrays.asList(getAllEnclosedTypes(enclosedType)));
 		}
-		return (IType[]) result.toArray(new IType[result.size()]);
+		return result.toArray(new IType[result.size()]);
 	}
 
 	private static boolean typeNameExistsInEnclosingTypeChain(IType type, String typeName){
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java
index d8bf706..53a503f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.jdt.internal.corext.refactoring.structure;
 
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.eclipse.core.runtime.Assert;
@@ -38,31 +39,27 @@ import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.WorkingCopyOwner;
-import org.eclipse.jdt.core.dom.ASTNode;
-import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
-import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.Modifier;
-import org.eclipse.jdt.core.dom.SimpleName;
-import org.eclipse.jdt.core.dom.Type;
-import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchMatch;
 import org.eclipse.jdt.core.search.SearchPattern;
 
 import org.eclipse.jdt.internal.corext.dom.ModifierRewrite;
+import org.eclipse.jdt.internal.corext.dom.VariableDeclarationRewrite;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringScopeFactory;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine2;
 import org.eclipse.jdt.internal.corext.refactoring.SearchResultGroup;
 import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+import org.eclipse.jdt.internal.corext.util.LRUMap;
 import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.internal.corext.util.SearchUtils;
 
@@ -168,32 +165,8 @@ public final class MemberVisibilityAdjustor {
 			if (fMember instanceof IField && !Flags.isEnum(fMember.getFlags())) {
 				final VariableDeclarationFragment fragment= ASTNodeSearchUtil.getFieldDeclarationFragmentNode((IField) fMember, root);
 				final FieldDeclaration declaration= (FieldDeclaration) fragment.getParent();
-				if (declaration.fragments().size() == 1)
-					ModifierRewrite.create(rewrite, declaration).setVisibility(visibility, group);
-				else {
-					final VariableDeclarationFragment newFragment= rewrite.getAST().newVariableDeclarationFragment();
-					newFragment.setName((SimpleName) rewrite.createCopyTarget(fragment.getName()));
-					final FieldDeclaration newDeclaration= rewrite.getAST().newFieldDeclaration(newFragment);
-					newDeclaration.setType((Type) rewrite.createCopyTarget(declaration.getType()));
-					IExtendedModifier extended= null;
-					for (final Iterator iterator= declaration.modifiers().iterator(); iterator.hasNext();) {
-						extended= (IExtendedModifier) iterator.next();
-						if (extended.isModifier()) {
-							final Modifier modifier= (Modifier) extended;
-							final int flag= modifier.getKeyword().toFlagValue();
-							if ((flag & (Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE)) != 0)
-								continue;
-						}
-						newDeclaration.modifiers().add(rewrite.createCopyTarget((ASTNode) extended));
-					}
-					ModifierRewrite.create(rewrite, newDeclaration).setVisibility(visibility, group);
-					final AbstractTypeDeclaration type= (AbstractTypeDeclaration) declaration.getParent();
-					rewrite.getListRewrite(type, type.getBodyDeclarationsProperty()).insertAfter(newDeclaration, declaration, null);
-					final ListRewrite list= rewrite.getListRewrite(declaration, FieldDeclaration.FRAGMENTS_PROPERTY);
-					list.remove(fragment, group);
-					if (list.getRewrittenList().isEmpty())
-						rewrite.remove(declaration, null);
-				}
+				VariableDeclarationFragment[] fragmentsToChange= new VariableDeclarationFragment[] { fragment };
+				VariableDeclarationRewrite.rewriteModifiers(declaration, fragmentsToChange, visibility, ModifierRewrite.VISIBILITY_MODIFIERS, rewrite, group);
 				if (status != null)
 					adjustor.fStatus.merge(status);
 			} else if (fMember != null) {
@@ -270,6 +243,7 @@ public final class MemberVisibilityAdjustor {
 		/*
 		 * @see org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.IVisibilityAdjustment#rewriteVisibility(org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor, org.eclipse.core.runtime.IProgressMonitor)
 		 */
+		@Override
 		public void rewriteVisibility(final MemberVisibilityAdjustor adjustor, final IProgressMonitor monitor) throws JavaModelException {
 			Assert.isNotNull(adjustor);
 			Assert.isNotNull(monitor);
@@ -418,11 +392,11 @@ public final class MemberVisibilityAdjustor {
 	 * @param adjustments the map of members to visibility adjustments
 	 * @return <code>true</code> if the member needs further adjustment, <code>false</code> otherwise
 	 */
-	public static boolean needsVisibilityAdjustments(final IMember member, final int threshold, final Map adjustments) {
+	public static boolean needsVisibilityAdjustments(final IMember member, final int threshold, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments) {
 		Assert.isNotNull(member);
 		Assert.isTrue(isVisibilityModifier(threshold));
 		Assert.isNotNull(adjustments);
-		final IncomingMemberVisibilityAdjustment adjustment= (IncomingMemberVisibilityAdjustment) adjustments.get(member);
+		final IncomingMemberVisibilityAdjustment adjustment= adjustments.get(member);
 		if (adjustment != null) {
 			final ModifierKeyword keyword= adjustment.getKeyword();
 			return hasLowerVisibility(keyword == null ? Modifier.NONE : keyword.toFlagValue(), threshold);
@@ -438,17 +412,17 @@ public final class MemberVisibilityAdjustor {
 	 * @param adjustments the map of members to visibility adjustments
 	 * @return <code>true</code> if the member needs further adjustment, <code>false</code> otherwise
 	 */
-	public static boolean needsVisibilityAdjustments(final IMember member, final ModifierKeyword threshold, final Map adjustments) {
+	public static boolean needsVisibilityAdjustments(final IMember member, final ModifierKeyword threshold, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments) {
 		Assert.isNotNull(member);
 		Assert.isNotNull(adjustments);
-		final IncomingMemberVisibilityAdjustment adjustment= (IncomingMemberVisibilityAdjustment) adjustments.get(member);
+		final IncomingMemberVisibilityAdjustment adjustment= adjustments.get(member);
 		if (adjustment != null)
 			return hasLowerVisibility(adjustment.getKeyword(), threshold);
 		return true;
 	}
 
 	/** The map of members to visibility adjustments */
-	private Map fAdjustments= new HashMap();
+	private Map<IMember, IncomingMemberVisibilityAdjustment> fAdjustments= new LinkedHashMap<IMember, IncomingMemberVisibilityAdjustment>(); // LinkedHashMap to preserve order of generated warnings
 
 	/** Should incoming references be adjusted? */
 	private boolean fIncoming= true;
@@ -466,7 +440,7 @@ public final class MemberVisibilityAdjustor {
 	private ASTRewrite fRewrite= null;
 
 	/** The map of compilation units to compilation unit rewrites */
-	private Map fRewrites= new HashMap(3);
+	private Map<ICompilationUnit, CompilationUnitRewrite> fRewrites= new HashMap<ICompilationUnit, CompilationUnitRewrite>(3);
 
 	/** The root node of the AST rewrite for reference visibility adjustments, or <code>null</code> to use a compilation unit rewrite */
 	private CompilationUnit fRoot= null;
@@ -478,7 +452,7 @@ public final class MemberVisibilityAdjustor {
 	private RefactoringStatus fStatus= new RefactoringStatus();
 
 	/** The type hierarchy cache */
-	private final Map fTypeHierarchies= new HashMap();
+	private final Map<IType, ITypeHierarchy> fTypeHierarchies= new LRUMap<IType, ITypeHierarchy>(10);
 
 	/** The visibility message severity */
 	private int fVisibilitySeverity= RefactoringStatus.WARNING;
@@ -521,9 +495,9 @@ public final class MemberVisibilityAdjustor {
 	/**
 	 * Check whether anyone accesses the members of the moved type from the
 	 * outside. Those may need to have their visibility adjusted.
-	 * @param member
-	 * @param monitor
-	 * @throws JavaModelException
+	 * @param member the member
+	 * @param monitor the progress monitor to use
+	 * @throws JavaModelException if an error occurs
 	 */
 	private void adjustMemberVisibility(final IMember member, final IProgressMonitor monitor) throws JavaModelException {
 
@@ -1004,7 +978,7 @@ public final class MemberVisibilityAdjustor {
 	 *
 	 * @return the visibility adjustments
 	 */
-	public final Map getAdjustments() {
+	public final Map<IMember, IncomingMemberVisibilityAdjustment> getAdjustments() {
 		return fAdjustments;
 	}
 
@@ -1015,7 +989,7 @@ public final class MemberVisibilityAdjustor {
 	 * @return the rewrite for the compilation unit
 	 */
 	private CompilationUnitRewrite getCompilationUnitRewrite(final ICompilationUnit unit) {
-		CompilationUnitRewrite rewrite= (CompilationUnitRewrite) fRewrites.get(unit);
+		CompilationUnitRewrite rewrite= fRewrites.get(unit);
 		if (rewrite == null) {
 			if (fOwner == null)
 				rewrite= new CompilationUnitRewrite(unit);
@@ -1039,12 +1013,14 @@ public final class MemberVisibilityAdjustor {
 			monitor.beginTask("", 1); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.MemberVisibilityAdjustor_checking);
 			try {
-				hierarchy= (ITypeHierarchy) fTypeHierarchies.get(type);
+				hierarchy= fTypeHierarchies.get(type);
 				if (hierarchy == null) {
-					if (fOwner == null)
+					if (fOwner == null) {
 						hierarchy= type.newSupertypeHierarchy(new SubProgressMonitor(monitor, 1, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
-					else
+					} else {
 						hierarchy= type.newSupertypeHierarchy(fOwner, new SubProgressMonitor(monitor, 1, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
+					}
+					fTypeHierarchies.put(type, hierarchy);
 				}
 			} finally {
 				monitor.done();
@@ -1080,10 +1056,10 @@ public final class MemberVisibilityAdjustor {
 			monitor.setTaskName(RefactoringCoreMessages.MemberVisibilityAdjustor_adjusting);
 			IMember member= null;
 			IVisibilityAdjustment adjustment= null;
-			for (final Iterator iterator= fAdjustments.keySet().iterator(); iterator.hasNext();) {
-				member= (IMember) iterator.next();
+			for (final Iterator<IMember> iterator= fAdjustments.keySet().iterator(); iterator.hasNext();) {
+				member= iterator.next();
 				if (unit.equals(member.getCompilationUnit())) {
-					adjustment= (IVisibilityAdjustment) fAdjustments.get(member);
+					adjustment= fAdjustments.get(member);
 					if (adjustment != null)
 						adjustment.rewriteVisibility(this, new SubProgressMonitor(monitor, 1));
 				}
@@ -1106,9 +1082,9 @@ public final class MemberVisibilityAdjustor {
 			monitor.setTaskName(RefactoringCoreMessages.MemberVisibilityAdjustor_adjusting);
 			IMember member= null;
 			IVisibilityAdjustment adjustment= null;
-			for (final Iterator iterator= fAdjustments.keySet().iterator(); iterator.hasNext();) {
-				member= (IMember) iterator.next();
-				adjustment= (IVisibilityAdjustment) fAdjustments.get(member);
+			for (final Iterator<IMember> iterator= fAdjustments.keySet().iterator(); iterator.hasNext();) {
+				member= iterator.next();
+				adjustment= fAdjustments.get(member);
 				if (adjustment != null)
 					adjustment.rewriteVisibility(this, new SubProgressMonitor(monitor, 1));
 				if (monitor.isCanceled())
@@ -1127,7 +1103,7 @@ public final class MemberVisibilityAdjustor {
 	 *
 	 * @param adjustments the existing adjustments to set
 	 */
-	public final void setAdjustments(final Map adjustments) {
+	public final void setAdjustments(final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments) {
 		Assert.isNotNull(adjustments);
 		fAdjustments= adjustments;
 	}
@@ -1186,7 +1162,7 @@ public final class MemberVisibilityAdjustor {
 	 *
 	 * @param rewrites the map of compilation units to compilation unit rewrites to set
 	 */
-	public final void setRewrites(final Map rewrites) {
+	public final void setRewrites(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites) {
 		Assert.isNotNull(rewrites);
 		fRewrites= rewrites;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInnerToTopRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInnerToTopRefactoring.java
index a1ae0c6..ea66ae3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInnerToTopRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInnerToTopRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
+import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.ConstructorInvocation;
@@ -90,6 +91,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
+import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer;
+import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer.SourceRange;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.ConvertMemberTypeDescriptor;
@@ -132,6 +135,7 @@ import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
@@ -150,9 +154,9 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 
 		private final ITypeBinding fCurrentType;
 
-		private final List fMethodAccesses= new ArrayList(0);
+		private final List<MethodInvocation> fMethodAccesses= new ArrayList<MethodInvocation>(0);
 
-		private final List fSimpleNames= new ArrayList(0);
+		private final List<Name> fSimpleNames= new ArrayList<Name>(0);
 
 		MemberAccessNodeCollector(ITypeBinding currType) {
 			Assert.isNotNull(currType);
@@ -160,19 +164,21 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		}
 
 		MethodInvocation[] getMethodInvocations() {
-			return (MethodInvocation[]) fMethodAccesses.toArray(new MethodInvocation[fMethodAccesses.size()]);
+			return fMethodAccesses.toArray(new MethodInvocation[fMethodAccesses.size()]);
 		}
 
 		SimpleName[] getSimpleFieldNames() {
-			return (SimpleName[]) fSimpleNames.toArray(new SimpleName[fSimpleNames.size()]);
+			return fSimpleNames.toArray(new SimpleName[fSimpleNames.size()]);
 		}
 
+		@Override
 		public boolean visit(FieldAccess node) {
 			// field accesses always have an expression: look at the expression to find out if we do an outer instance access.
 			node.getExpression().accept(this);
 			return false;
 		}
 
+		@Override
 		public boolean visit(MethodInvocation node) {
 			Expression expression= node.getExpression();
 			if (expression == null) {
@@ -185,17 +191,19 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			} else {
 				expression.accept(this);
 			}
-			List arguments= node.arguments();
+			List<Expression> arguments= node.arguments();
 			for (int i= 0; i < arguments.size(); i++) {
-				((ASTNode) arguments.get(i)).accept(this);
+				arguments.get(i).accept(this);
 			}
 			return false;
 		}
+		@Override
 		public boolean visit(QualifiedName node) {
 			node.getQualifier().accept(this);
 			return false;
 		}
 
+		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding= node.resolveBinding();
 			if (binding instanceof IVariableBinding) {
@@ -209,6 +217,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			return false;
 		}
 
+		@Override
 		public boolean visit(ThisExpression node) {
 			final Name qualifier= node.getQualifier();
 			if (qualifier != null) {
@@ -221,12 +230,13 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		}
 
 		private boolean isAccessToOuter(ITypeBinding binding) {
-			if (Bindings.isSuperType(binding, fCurrentType)) {
+			binding= binding.getTypeDeclaration();
+			if (Bindings.isSuperType(binding, fCurrentType, false)) {
 				return false;
 			}
 			ITypeBinding outer= fCurrentType.getDeclaringClass();
 			while (outer != null) {
-				if (Bindings.isSuperType(binding, outer)) {
+				if (Bindings.isSuperType(binding, outer, false)) {
 					return true;
 				}
 				outer= outer.getDeclaringClass();
@@ -250,6 +260,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			fGroup= group;
 		}
 
+		@Override
 		public boolean visit(final ClassInstanceCreation node) {
 			Assert.isNotNull(node);
 			if (fCreateInstanceField) {
@@ -276,11 +287,13 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			return true;
 		}
 
+		@Override
 		public boolean visit(final QualifiedType node) {
 			Assert.isNotNull(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(final SimpleType node) {
 			Assert.isNotNull(node);
 			if (!(node.getParent() instanceof ClassInstanceCreation)) {
@@ -294,6 +307,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			return super.visit(node);
 		}
 
+		@Override
 		public boolean visit(final ThisExpression node) {
 			Assert.isNotNull(node);
 			final Name name= node.getQualifier();
@@ -313,7 +327,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		}
 	}
 
-	private static void addTypeParameters(final CompilationUnit unit, final IType type, final Map map) throws JavaModelException {
+	private static void addTypeParameters(final CompilationUnit unit, final IType type, final Map<String, ITypeBinding> map) throws JavaModelException {
 		Assert.isNotNull(unit);
 		Assert.isNotNull(type);
 		Assert.isNotNull(map);
@@ -321,8 +335,8 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		if (declaration instanceof TypeDeclaration) {
 			ITypeBinding binding= null;
 			TypeParameter parameter= null;
-			for (final Iterator iterator= ((TypeDeclaration) declaration).typeParameters().iterator(); iterator.hasNext();) {
-				parameter= (TypeParameter) iterator.next();
+			for (final Iterator<TypeParameter> iterator= ((TypeDeclaration) declaration).typeParameters().iterator(); iterator.hasNext();) {
+				parameter= iterator.next();
 				binding= parameter.resolveBinding();
 				if (binding != null && !map.containsKey(binding.getKey()))
 					map.put(binding.getKey(), binding);
@@ -369,12 +383,12 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 	}
 
 	private static AbstractTypeDeclaration findTypeDeclaration(IType type, CompilationUnit unit) {
-		final List types= getDeclaringTypes(type);
+		final List<IType> types= getDeclaringTypes(type);
 		types.add(type);
 		AbstractTypeDeclaration[] declarations= (AbstractTypeDeclaration[]) unit.types().toArray(new AbstractTypeDeclaration[unit.types().size()]);
 		AbstractTypeDeclaration declaration= null;
-		for (final Iterator iterator= types.iterator(); iterator.hasNext();) {
-			IType enclosing= (IType) iterator.next();
+		for (final Iterator<IType> iterator= types.iterator(); iterator.hasNext();) {
+			IType enclosing= iterator.next();
 			declaration= findTypeDeclaration(enclosing, declarations);
 			Assert.isNotNull(declaration);
 			declarations= getAbstractTypeDeclarations(declaration);
@@ -385,15 +399,15 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 
 	public static AbstractTypeDeclaration[] getAbstractTypeDeclarations(final AbstractTypeDeclaration declaration) {
 		int typeCount= 0;
-		for (Iterator iterator= declaration.bodyDeclarations().listIterator(); iterator.hasNext();) {
+		for (Iterator<BodyDeclaration> iterator= declaration.bodyDeclarations().listIterator(); iterator.hasNext();) {
 			if (iterator.next() instanceof AbstractTypeDeclaration) {
 				typeCount++;
 			}
 		}
 		AbstractTypeDeclaration[] declarations= new AbstractTypeDeclaration[typeCount];
 		int next= 0;
-		for (final Iterator iterator= declaration.bodyDeclarations().listIterator(); iterator.hasNext();) {
-			Object object= iterator.next();
+		for (final Iterator<BodyDeclaration> iterator= declaration.bodyDeclarations().listIterator(); iterator.hasNext();) {
+			BodyDeclaration object= iterator.next();
 			if (object instanceof AbstractTypeDeclaration) {
 				declarations[next++]= (AbstractTypeDeclaration) object;
 			}
@@ -401,12 +415,11 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		return declarations;
 	}
 
-	// List of ITypes
-	private static List getDeclaringTypes(IType type) {
+	private static List<IType> getDeclaringTypes(IType type) {
 		IType declaringType= type.getDeclaringType();
 		if (declaringType == null)
-			return new ArrayList(0);
-		List result= getDeclaringTypes(declaringType);
+			return new ArrayList<IType>(0);
+		List<IType> result= getDeclaringTypes(declaringType);
 		result.add(declaringType);
 		return result;
 	}
@@ -414,18 +427,18 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 	private static String[] getFieldNames(IType type) {
 		try {
 			IField[] fields= type.getFields();
-			List result= new ArrayList(fields.length);
+			List<String> result= new ArrayList<String>(fields.length);
 			for (int i= 0; i < fields.length; i++) {
 				result.add(fields[i].getElementName());
 			}
-			return (String[]) result.toArray(new String[result.size()]);
+			return result.toArray(new String[result.size()]);
 		} catch (JavaModelException e) {
 			return null;
 		}
 	}
 
-	private static Set getMergedSet(Set s1, Set s2) {
-		Set result= new HashSet();
+	private static Set<ICompilationUnit> getMergedSet(Set<ICompilationUnit> s1, Set<ICompilationUnit> s2) {
+		Set<ICompilationUnit> result= new HashSet<ICompilationUnit>();
 		result.addAll(s1);
 		result.addAll(s2);
 		return result;
@@ -433,15 +446,15 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 
 	private static String[] getParameterNamesOfAllConstructors(IType type) throws JavaModelException {
 		IMethod[] constructors= JavaElementUtil.getAllConstructors(type);
-		Set result= new HashSet();
+		Set<String> result= new HashSet<String>();
 		for (int i= 0; i < constructors.length; i++) {
 			result.addAll(Arrays.asList(constructors[i].getParameterNames()));
 		}
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
-	private static ASTNode[] getReferenceNodesIn(CompilationUnit cuNode, Map references, ICompilationUnit cu) {
-		SearchMatch[] results= (SearchMatch[]) references.get(cu);
+	private static ASTNode[] getReferenceNodesIn(CompilationUnit cuNode, Map<ICompilationUnit, SearchMatch[]> references, ICompilationUnit cu) {
+		SearchMatch[] results= references.get(cu);
 		if (results == null)
 			return new ASTNode[0];
 		return ASTNodeSearchUtil.getAstNodes(results, cuNode);
@@ -490,13 +503,13 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 
 	private CompilationUnitRewrite fSourceRewrite;
 
-	private Collection fStaticImports;
+	private Collection<IBinding> fStaticImports;
 
 	private IType fType;
 
 	private String fQualifiedTypeName;
 
-	private Collection fTypeImports;
+	private Collection<ITypeBinding> fTypeImports;
 
 	/**
 	 * Creates a new move inner to top refactoring.
@@ -552,11 +565,11 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		Assert.isNotNull(rewrite);
 		if (declaration instanceof TypeDeclaration) {
 			final TypeDeclaration type= (TypeDeclaration) declaration;
-			final List existing= type.typeParameters();
-			final Set names= new HashSet();
+			final List<TypeParameter> existing= type.typeParameters();
+			final Set<String> names= new HashSet<String>();
 			TypeParameter parameter= null;
-			for (final Iterator iterator= existing.iterator(); iterator.hasNext();) {
-				parameter= (TypeParameter) iterator.next();
+			for (final Iterator<TypeParameter> iterator= existing.iterator(); iterator.hasNext();) {
+				parameter= iterator.next();
 				names.add(parameter.getName().getIdentifier());
 			}
 			final ListRewrite rewriter= rewrite.getListRewrite(type, TypeDeclaration.TYPE_PARAMETERS_PROPERTY);
@@ -578,15 +591,15 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			ImportRewrite rewrite= StubUtility.createImportRewrite(targetUnit, true);
 			if (fTypeImports != null) {
 				ITypeBinding type= null;
-				for (final Iterator iterator= fTypeImports.iterator(); iterator.hasNext();) {
-					type= (ITypeBinding) iterator.next();
+				for (final Iterator<ITypeBinding> iterator= fTypeImports.iterator(); iterator.hasNext();) {
+					type= iterator.next();
 					rewrite.addImport(type);
 				}
 			}
 			if (fStaticImports != null) {
 				IBinding binding= null;
-				for (final Iterator iterator= fStaticImports.iterator(); iterator.hasNext();) {
-					binding= (IBinding) iterator.next();
+				for (final Iterator<IBinding> iterator= fStaticImports.iterator(); iterator.hasNext();) {
+					binding= iterator.next();
 					rewrite.addStaticImport(binding);
 				}
 			}
@@ -611,14 +624,14 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 				if (type != null && unit.findDeclaringNode(binding) != null)
 					addTypeQualification(type, targetRewrite, group);
 			}
-			List types= null;
+			List<Type> types= null;
 			if (declaration instanceof TypeDeclaration)
 				types= ((TypeDeclaration) declaration).superInterfaceTypes();
 			else if (declaration instanceof EnumDeclaration)
 				types= ((EnumDeclaration) declaration).superInterfaceTypes();
 			if (types != null) {
-				for (final Iterator iterator= types.iterator(); iterator.hasNext();) {
-					type= (Type) iterator.next();
+				for (final Iterator<Type> iterator= types.iterator(); iterator.hasNext();) {
+					type= iterator.next();
 					if (unit.findDeclaringNode(type.resolveBinding()) != null)
 						addTypeQualification(type, targetRewrite, group);
 				}
@@ -671,12 +684,12 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 
 	private RefactoringStatus checkConstructorParameterNames() {
 		RefactoringStatus result= new RefactoringStatus();
-		CompilationUnit cuNode= new RefactoringASTParser(AST.JLS3).parse(fType.getCompilationUnit(), false);
+		CompilationUnit cuNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(fType.getCompilationUnit(), false);
 		MethodDeclaration[] nodes= getConstructorDeclarationNodes(findTypeDeclaration(fType, cuNode));
 		for (int i= 0; i < nodes.length; i++) {
 			MethodDeclaration constructor= nodes[i];
-			for (Iterator iter= constructor.parameters().iterator(); iter.hasNext();) {
-				SingleVariableDeclaration param= (SingleVariableDeclaration) iter.next();
+			for (Iterator<SingleVariableDeclaration> iter= constructor.parameters().iterator(); iter.hasNext();) {
+				SingleVariableDeclaration param= iter.next();
 				if (fEnclosingInstanceFieldName.equals(param.getName().getIdentifier())) {
 					String[] keys= new String[] { BasicElementLabels.getJavaElementName(param.getName().getIdentifier()), BasicElementLabels.getJavaElementName(fType.getElementName())};
 					String msg= Messages.format(RefactoringCoreMessages.MoveInnerToTopRefactoring_name_used, keys);
@@ -702,6 +715,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		return result;
 	}
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask("", 2);//$NON-NLS-1$
 		try {
@@ -727,6 +741,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		}
 	}
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException {
 		return Checks.checkIfCuBroken(fType);
 	}
@@ -749,9 +764,10 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			return createReadAccessExpressionForEnclosingInstance(node.getAST());
 	}
 
+	@Override
 	public Change createChange(final IProgressMonitor monitor) throws CoreException {
 		monitor.beginTask(RefactoringCoreMessages.MoveInnerToTopRefactoring_creating_change, 1);
-		final Map arguments= new HashMap();
+		final Map<String, String> arguments= new HashMap<String, String>();
 		String project= null;
 		IJavaProject javaProject= fType.getJavaProject();
 		if (javaProject != null)
@@ -789,7 +805,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		final TextChangeManager manager= new TextChangeManager();
 		try {
 			monitor.beginTask(RefactoringCoreMessages.MoveInnerToTopRefactoring_creating_preview, 4);
-			final Map rewrites= new HashMap(2);
+			final Map<ICompilationUnit, CompilationUnitRewrite> rewrites= new HashMap<ICompilationUnit, CompilationUnitRewrite>(2);
 			fSourceRewrite.clearASTAndImportRewrites();
 			rewrites.put(fSourceRewrite.getCu(), fSourceRewrite);
 			final MemberVisibilityAdjustor adjustor= new MemberVisibilityAdjustor(fType.getPackageFragment(), fType);
@@ -798,14 +814,14 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			adjustor.setFailureSeverity(RefactoringStatus.WARNING);
 			adjustor.setStatus(status);
 			adjustor.adjustVisibility(new SubProgressMonitor(monitor, 1));
-			final Map parameters= new LinkedHashMap();
+			final Map<String, ITypeBinding> parameters= new LinkedHashMap<String, ITypeBinding>();
 			addTypeParameters(fSourceRewrite.getRoot(), fType, parameters);
 			final ITypeBinding[] bindings= new ITypeBinding[parameters.values().size()];
 			parameters.values().toArray(bindings);
-			final Map typeReferences= createTypeReferencesMapping(new SubProgressMonitor(monitor, 1), status);
-			Map constructorReferences= null;
+			final Map<ICompilationUnit, SearchMatch[]> typeReferences= createTypeReferencesMapping(new SubProgressMonitor(monitor, 1), status);
+			Map<ICompilationUnit, SearchMatch[]> constructorReferences= null;
 			if (JdtFlags.isStatic(fType))
-				constructorReferences= new HashMap(0);
+				constructorReferences= new HashMap<ICompilationUnit, SearchMatch[]>(0);
 			else
 				constructorReferences= createConstructorReferencesMapping(new SubProgressMonitor(monitor, 1), status);
 			if (fCreateInstanceField) {
@@ -820,8 +836,8 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			}
 			monitor.worked(1);
 			ICompilationUnit inputCU= fType.getCompilationUnit();
-			for (final Iterator iterator= getMergedSet(typeReferences.keySet(), constructorReferences.keySet()).iterator(); iterator.hasNext();) {
-				final ICompilationUnit unit= (ICompilationUnit) iterator.next();
+			for (final Iterator<ICompilationUnit> iterator= getMergedSet(typeReferences.keySet(), constructorReferences.keySet()).iterator(); iterator.hasNext();) {
+				final ICompilationUnit unit= iterator.next();
 				final CompilationUnitRewrite targetRewrite= getCompilationUnitRewrite(unit);
 				createCompilationUnitRewrite(bindings, targetRewrite, typeReferences, constructorReferences, adjustor.getAdjustments().containsKey(fType), inputCU, unit, false, status, monitor);
 				if (unit.equals(inputCU)) {
@@ -859,7 +875,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		}
 	}
 
-	private void createCompilationUnitRewrite(final ITypeBinding[] parameters, final CompilationUnitRewrite targetRewrite, final Map typeReferences, final Map constructorReferences, boolean visibilityWasAdjusted, final ICompilationUnit sourceUnit, final ICompilationUnit targetUnit, final boolean remove, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
+	private void createCompilationUnitRewrite(final ITypeBinding[] parameters, final CompilationUnitRewrite targetRewrite, final Map<ICompilationUnit, SearchMatch[]> typeReferences, final Map<ICompilationUnit, SearchMatch[]> constructorReferences, boolean visibilityWasAdjusted, final ICompilationUnit sourceUnit, final ICompilationUnit targetUnit, final boolean remove, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
 		Assert.isNotNull(parameters);
 		Assert.isNotNull(targetRewrite);
 		Assert.isNotNull(typeReferences);
@@ -881,8 +897,8 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 					addInheritedTypeQualifications(declaration, targetRewrite, qualifierGroup);
 					addEnclosingInstanceDeclaration(declaration, rewrite);
 				}
-				fTypeImports= new HashSet();
-				fStaticImports= new HashSet();
+				fTypeImports= new HashSet<ITypeBinding>();
+				fStaticImports= new HashSet<IBinding>();
 				ImportRewriteUtil.collectImports(fType.getJavaProject(), declaration, fTypeImports, fStaticImports, false);
 				if (binding != null)
 					fTypeImports.remove(binding);
@@ -964,9 +980,9 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 	}
 
 	// Map<ICompilationUnit, SearchMatch[]>
-	private Map createConstructorReferencesMapping(IProgressMonitor pm, RefactoringStatus status) throws JavaModelException {
+	private Map<ICompilationUnit, SearchMatch[]> createConstructorReferencesMapping(IProgressMonitor pm, RefactoringStatus status) throws JavaModelException {
 		SearchResultGroup[] groups= ConstructorReferenceFinder.getConstructorReferences(fType, pm, status);
-		Map result= new HashMap();
+		Map<ICompilationUnit, SearchMatch[]> result= new HashMap<ICompilationUnit, SearchMatch[]>();
 		for (int i= 0; i < groups.length; i++) {
 			SearchResultGroup group= groups[i];
 			ICompilationUnit cu= group.getCompilationUnit();
@@ -1028,12 +1044,13 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		if (change == null)
 			change= new CompilationUnitChange("", unit); //$NON-NLS-1$
 		final String source= change.getPreviewContent(new NullProgressMonitor());
-		final ASTParser parser= ASTParser.newParser(AST.JLS3);
+		final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		parser.setProject(fType.getJavaProject());
 		parser.setResolveBindings(false);
 		parser.setSource(source.toCharArray());
 		final AbstractTypeDeclaration declaration= findTypeDeclaration(fType, (CompilationUnit) parser.createAST(null));
-		return source.substring(declaration.getStartPosition(), ASTNodes.getExclusiveEnd(declaration));
+		SourceRange sourceRange= new TargetSourceRangeComputer().computeSourceRange(declaration);
+		return source.substring(sourceRange.getStartPosition(), sourceRange.getStartPosition() + sourceRange.getLength());
 	}
 
 	private Expression createQualifiedReadAccessExpressionForEnclosingInstance(AST ast) {
@@ -1066,7 +1083,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 			if (StubUtility.doAddComments(unit.getJavaProject()))
 				fileComment= CodeGeneration.getFileComment(unit, separator);
 			String content= CodeGeneration.getCompilationUnitContent(unit, fileComment, null, block, separator);
-			if (content == null || block.startsWith("/*") || block.startsWith("//")) { //$NON-NLS-1$//$NON-NLS-2$
+			if (content == null) {
 				final StringBuffer buffer= new StringBuffer();
 				if (!fType.getPackageFragment().isDefaultPackage()) {
 					buffer.append("package ").append(fType.getPackageFragment().getElementName()).append(';'); //$NON-NLS-1$
@@ -1083,15 +1100,14 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 		return unit.getSource();
 	}
 
-	// Map<ICompilationUnit, SearchMatch[]>
-	private Map createTypeReferencesMapping(IProgressMonitor pm, RefactoringStatus status) throws JavaModelException {
+	private Map<ICompilationUnit, SearchMatch[]> createTypeReferencesMapping(IProgressMonitor pm, RefactoringStatus status) throws JavaModelException {
 		final RefactoringSearchEngine2 engine= new RefactoringSearchEngine2(SearchPattern.createPattern(fType, IJavaSearchConstants.ALL_OCCURRENCES, SearchUtils.GENERICS_AGNOSTIC_MATCH_RULE));
 		engine.setFiltering(true, true);
 		engine.setScope(RefactoringScopeFactory.create(fType));
 		engine.setStatus(status);
 		engine.searchPattern(new SubProgressMonitor(pm, 1));
 		final SearchResultGroup[] groups= (SearchResultGroup[]) engine.getResults();
-		Map result= new HashMap();
+		Map<ICompilationUnit, SearchMatch[]> result= new HashMap<ICompilationUnit, SearchMatch[]>();
 		for (int i= 0; i < groups.length; i++) {
 			SearchResultGroup group= groups[i];
 			ICompilationUnit cu= group.getCompilationUnit();
@@ -1119,12 +1135,12 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 	private MethodDeclaration[] getConstructorDeclarationNodes(final AbstractTypeDeclaration declaration) {
 		if (declaration instanceof TypeDeclaration) {
 			final MethodDeclaration[] declarations= ((TypeDeclaration) declaration).getMethods();
-			final List result= new ArrayList(2);
+			final List<MethodDeclaration> result= new ArrayList<MethodDeclaration>(2);
 			for (int index= 0; index < declarations.length; index++) {
 				if (declarations[index].isConstructor())
 					result.add(declarations[index]);
 			}
-			return (MethodDeclaration[]) result.toArray(new MethodDeclaration[result.size()]);
+			return result.toArray(new MethodDeclaration[result.size()]);
 		}
 		return new MethodDeclaration[] {};
 	}
@@ -1164,6 +1180,7 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.base.IRefactoring#getName()
 	 */
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.MoveInnerToTopRefactoring_name;
 	}
@@ -1394,14 +1411,14 @@ public final class MoveInnerToTopRefactoring extends Refactoring {
 	private void setEnclosingInstanceFieldInConstructor(ASTRewrite rewrite, MethodDeclaration decl) throws JavaModelException {
 		final AST ast= decl.getAST();
 		final Block body= decl.getBody();
-		final List statements= body.statements();
+		final List<Statement> statements= body.statements();
 		if (statements.isEmpty()) {
 			final Assignment assignment= ast.newAssignment();
 			assignment.setLeftHandSide(createReadAccessExpressionForEnclosingInstance(ast));
 			assignment.setRightHandSide(ast.newSimpleName(getNameForEnclosingInstanceConstructorParameter()));
 			rewrite.getListRewrite(body, Block.STATEMENTS_PROPERTY).insertFirst(ast.newExpressionStatement(assignment), null);
 		} else {
-			final Statement first= (Statement) statements.get(0);
+			final Statement first= statements.get(0);
 			if (first instanceof ConstructorInvocation) {
 				rewrite.getListRewrite(first, ConstructorInvocation.ARGUMENTS_PROPERTY).insertFirst(ast.newSimpleName(fEnclosingInstanceFieldName), null);
 			} else {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java
index a7ce694..e70d542 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,6 +58,7 @@ import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeHierarchy;
@@ -136,6 +137,7 @@ import org.eclipse.jdt.internal.corext.refactoring.base.ReferencesInBinaryContex
 import org.eclipse.jdt.internal.corext.refactoring.changes.DynamicValidationRefactoringChange;
 import org.eclipse.jdt.internal.corext.refactoring.delegates.DelegateMethodCreator;
 import org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.IVisibilityAdjustment;
+import org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.IncomingMemberVisibilityAdjustment;
 import org.eclipse.jdt.internal.corext.refactoring.tagging.IDelegateUpdating;
 import org.eclipse.jdt.internal.corext.refactoring.util.JavadocUtil;
 import org.eclipse.jdt.internal.corext.refactoring.util.ResourceUtil;
@@ -181,6 +183,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			fDeclaringType= declaration.resolveBinding().getDeclaringClass();
 		}
 
+		@Override
 		public final void endVisit(final AnonymousClassDeclaration node) {
 			Assert.isNotNull(node);
 			if (fAnonymousClass > 0)
@@ -188,12 +191,14 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			super.endVisit(node);
 		}
 
+		@Override
 		public final boolean visit(final AnonymousClassDeclaration node) {
 			Assert.isNotNull(node);
 			fAnonymousClass++;
 			return super.visit(node);
 		}
 
+		@Override
 		public final boolean visit(final MethodInvocation node) {
 			Assert.isNotNull(node);
 			if (fAnonymousClass > 0) {
@@ -206,6 +211,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return true;
 		}
 
+		@Override
 		public boolean visit(final SimpleName node) {
 			Assert.isNotNull(node);
 			if (fAnonymousClass > 0) {
@@ -229,7 +235,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	protected static class AstNodeFinder extends ASTVisitor {
 
 		/** The found ast nodes */
-		protected final Set fResult= new HashSet();
+		protected final Set<Expression> fResult= new HashSet<Expression>();
 
 		/** The status of the find operation */
 		protected final RefactoringStatus fStatus= new RefactoringStatus();
@@ -239,7 +245,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		 *
 		 * @return the result set
 		 */
-		public final Set getResult() {
+		public final Set<Expression> getResult() {
 			return fResult;
 		}
 
@@ -255,18 +261,19 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 
 	class DelegateInstanceMethodCreator extends DelegateMethodCreator {
 
-		private Map fAdjustments;
+		private Map<IMember, IncomingMemberVisibilityAdjustment> fAdjustments;
 
 		private boolean fNeededInsertion;
 
-		private Map fRewrites;
+		private Map<ICompilationUnit, CompilationUnitRewrite> fRewrites;
 
-		public DelegateInstanceMethodCreator(Map adjustments, Map rewrites) {
+		public DelegateInstanceMethodCreator(Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, Map<ICompilationUnit, CompilationUnitRewrite> rewrites) {
 			super();
 			fAdjustments= adjustments;
 			fRewrites= rewrites;
 		}
 
+		@Override
 		protected ASTNode createBody(BodyDeclaration bd) throws JavaModelException {
 			MethodDeclaration methodDeclaration= (MethodDeclaration) bd;
 			final MethodInvocation invocation= getAst().newMethodInvocation();
@@ -280,6 +287,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return block;
 		}
 
+		@Override
 		protected ASTNode createDocReference(final BodyDeclaration declaration) throws JavaModelException {
 			return MoveInstanceMethodProcessor.this.createMethodReference((MethodDeclaration) declaration, getAst());
 		}
@@ -295,7 +303,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	public final class EnclosingInstanceReferenceFinder extends AstNodeFinder {
 
 		/** The list of enclosing types */
-		private final List fEnclosingTypes= new ArrayList(3);
+		private final List<ITypeBinding> fEnclosingTypes= new ArrayList<ITypeBinding>(3);
 
 		/**
 		 * Creates a new enclosing instance reference finder.
@@ -312,6 +320,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			}
 		}
 
+		@Override
 		public final boolean visit(final SimpleName node) {
 			Assert.isNotNull(node);
 			final IBinding binding= node.resolveBinding();
@@ -329,8 +338,8 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			}
 			if (declaring != null) {
 				ITypeBinding enclosing= null;
-				for (final Iterator iterator= fEnclosingTypes.iterator(); iterator.hasNext();) {
-					enclosing= (ITypeBinding) iterator.next();
+				for (final Iterator<ITypeBinding> iterator= fEnclosingTypes.iterator(); iterator.hasNext();) {
+					enclosing= iterator.next();
 					if (Bindings.equals(enclosing, declaring)) {
 						fStatus.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.MoveInstanceMethodProcessor_refers_enclosing_instances, JavaStatusContext.create(fMethod.getCompilationUnit(), node)));
 						fResult.add(node);
@@ -341,6 +350,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final ThisExpression node) {
 			Assert.isNotNull(node);
 			if (node.getQualifier() != null) {
@@ -357,7 +367,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	public final class GenericReferenceFinder extends AstNodeFinder {
 
 		/** The type parameter binding keys */
-		protected final Set fBindings= new HashSet();
+		protected final Set<String> fBindings= new HashSet<String>();
 
 		/**
 		 * Creates a new generic reference finder.
@@ -369,8 +379,8 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			Assert.isNotNull(declaration);
 			ITypeBinding binding= null;
 			TypeParameter parameter= null;
-			for (final Iterator iterator= declaration.typeParameters().iterator(); iterator.hasNext();) {
-				parameter= (TypeParameter) iterator.next();
+			for (final Iterator<TypeParameter> iterator= declaration.typeParameters().iterator(); iterator.hasNext();) {
+				parameter= iterator.next();
 				binding= parameter.resolveBinding();
 				if (binding != null)
 					fBindings.add(binding.getKey());
@@ -380,6 +390,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SimpleName)
 		 */
+		@Override
 		public final boolean visit(final SimpleName node) {
 			Assert.isNotNull(node);
 			final IBinding binding= node.resolveBinding();
@@ -435,14 +446,11 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		/** The method declaration to rewrite */
 		protected final MethodDeclaration fDeclaration;
 
-		/** The set of handled method invocations */
-		protected final Set fMethodDeclarations= new HashSet();
-
 		/** The source ast rewrite to use */
 		protected final ASTRewrite fRewrite;
 
 		/** The existing static imports */
-		protected final Set fStaticImports= new HashSet();
+		protected final Set<IBinding> fStaticImports= new HashSet<IBinding>();
 
 		/** The refactoring status */
 		protected final RefactoringStatus fStatus= new RefactoringStatus();
@@ -468,13 +476,13 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			fRewrite= rewrite;
 			fDeclaration= sourceDeclaration;
 			fStaticImports.clear();
-			ImportRewriteUtil.collectImports(fMethod.getJavaProject(), sourceDeclaration, new HashSet(), fStaticImports, false);
+			ImportRewriteUtil.collectImports(fMethod.getJavaProject(), sourceDeclaration, new HashSet<ITypeBinding>(), fStaticImports, false);
 		}
 
 		private boolean isParameterName(String name) {
-			List parameters= fDeclaration.parameters();
-			for (Iterator iterator= parameters.iterator(); iterator.hasNext();) {
-				SingleVariableDeclaration decl= (SingleVariableDeclaration) iterator.next();
+			List<SingleVariableDeclaration> parameters= fDeclaration.parameters();
+			for (Iterator<SingleVariableDeclaration> iterator= parameters.iterator(); iterator.hasNext();) {
+				SingleVariableDeclaration decl= iterator.next();
 				if (name.equals(decl.getName().getIdentifier())) {
 					return true;
 				}
@@ -483,6 +491,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 
 		}
 
+		@Override
 		public final void endVisit(final AnonymousClassDeclaration node) {
 			Assert.isNotNull(node);
 			if (fAnonymousClass > 0)
@@ -490,12 +499,14 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			super.endVisit(node);
 		}
 
+		@Override
 		public final boolean visit(final AnonymousClassDeclaration node) {
 			Assert.isNotNull(node);
 			fAnonymousClass++;
 			return super.visit(node);
 		}
 
+		@Override
 		public final boolean visit(final ClassInstanceCreation node) {
 			Assert.isNotNull(node);
 			if (node.getParent() instanceof ClassInstanceCreation) {
@@ -519,6 +530,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return rewrite.createMoveTarget(oldNameNode);
 		}
 
+		@Override
 		public final boolean visit(final FieldAccess node) {
 			Assert.isNotNull(node);
 			final Expression expression= node.getExpression();
@@ -552,15 +564,16 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return true;
 		}
 
-		public final void visit(final List nodes) {
+		public final void visit(final List<ASTNode> nodes) {
 			Assert.isNotNull(nodes);
 			ASTNode node= null;
-			for (final Iterator iterator= nodes.iterator(); iterator.hasNext();) {
-				node= (ASTNode) iterator.next();
+			for (final Iterator<ASTNode> iterator= nodes.iterator(); iterator.hasNext();) {
+				node= iterator.next();
 				node.accept(this);
 			}
 		}
 
+		@Override
 		public final boolean visit(final MethodInvocation node) {
 			Assert.isNotNull(node);
 			final Expression expression= node.getExpression();
@@ -577,14 +590,14 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 				} else {
 					if (expression instanceof FieldAccess) {
 						final FieldAccess access= (FieldAccess) expression;
-						if (Bindings.equals(access.resolveFieldBinding(), fTarget)) {
+						if (Bindings.equals(fTarget, access.resolveFieldBinding())) {
 							rewrite.remove(expression, null);
 							visit(node.arguments());
 							return false;
 						}
 					} else if (expression instanceof Name) {
 						final Name name= (Name) expression;
-						if (Bindings.equals(name.resolveBinding(), fTarget)) {
+						if (Bindings.equals(fTarget, name.resolveBinding())) {
 							rewrite.remove(expression, null);
 							visit(node.arguments());
 							return false;
@@ -595,6 +608,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return true;
 		}
 
+		@Override
 		public final boolean visit(final QualifiedName node) {
 			Assert.isNotNull(node);
 			IBinding binding= node.resolveBinding();
@@ -607,7 +621,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 				}
 			}
 			binding= node.getQualifier().resolveBinding();
-			if (Bindings.equals(binding, fTarget)) {
+			if (Bindings.equals(fTarget, binding)) {
 				fRewrite.replace(node, getFieldReference(node.getName(), fRewrite), null);
 				return false;
 			}
@@ -615,6 +629,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final SimpleName node) {
 			Assert.isNotNull(node);
 			final AST ast= node.getAST();
@@ -623,14 +638,14 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			if (binding instanceof ITypeBinding) {
 				final ITypeBinding type= (ITypeBinding) binding;
 				if (type.isClass() && type.getDeclaringClass() != null) {
-					final String name= fTargetRewrite.getImportRewrite().addImport(type);
+					final String name= fTargetRewrite.getImportRewrite().addImport(type.getTypeDeclaration());
 					if (name != null && name.length() > 0) {
 						fRewrite.replace(node, ASTNodeFactory.newName(ast, name), null);
 						return false;
 					}
 				}
 			}
-			if (Bindings.equals(binding, fTarget))
+			if (Bindings.equals(fTarget, binding))
 				if (fAnonymousClass > 0) {
 					final ThisExpression target= ast.newThisExpression();
 					target.setQualifier(ast.newSimpleName(fTargetType.getElementName()));
@@ -640,9 +655,10 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			else if (binding instanceof IVariableBinding) {
 				final IVariableBinding variable= (IVariableBinding) binding;
 				final IMethodBinding method= fDeclaration.resolveBinding();
-				final ITypeBinding declaring= variable.getDeclaringClass();
+				ITypeBinding declaring= variable.getDeclaringClass();
 				if (method != null) {
 					if (Bindings.equals(method.getDeclaringClass(), declaring)) {
+						declaring= declaring.getTypeDeclaration();
 						if (JdtFlags.isStatic(variable))
 							rewrite.replace(node, ast.newQualifiedName(ASTNodeFactory.newName(ast, fTargetRewrite.getImportRewrite().addImport(declaring)), ast.newSimpleName(node.getFullyQualifiedName())), null);
 						else {
@@ -659,6 +675,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final ThisExpression node) {
 			Assert.isNotNull(node);
 			fRewrite.replace(node, node.getAST().newSimpleName(fTargetName), null);
@@ -716,13 +733,13 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		}
 
 		/** The list of found bindings */
-		protected final List fBindings= new LinkedList();
+		protected final List<IVariableBinding> fBindings= new LinkedList<IVariableBinding>();
 
-		/** The keys of the found bindings */
-		protected final Set fFound= new HashSet();
+		/** The keys of the found binding keys */
+		protected final Set<String> fFound= new HashSet<String>();
 
-		/** The keys of the written bindings */
-		protected final Set fWritten= new HashSet();
+		/** The keys of the written binding keys */
+		protected final Set<String> fWritten= new HashSet<String>();
 
 		/**
 		 * Creates a new read only field finder.
@@ -764,9 +781,9 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		 */
 		public final IVariableBinding[] getReadOnlyFields() {
 			IVariableBinding binding= null;
-			final List list= new LinkedList(fBindings);
-			for (final Iterator iterator= list.iterator(); iterator.hasNext();) {
-				binding= (IVariableBinding) iterator.next();
+			final List<IVariableBinding> list= new LinkedList<IVariableBinding>(fBindings);
+			for (final Iterator<IVariableBinding> iterator= list.iterator(); iterator.hasNext();) {
+				binding= iterator.next();
 				if (fWritten.contains(binding.getKey()))
 					iterator.remove();
 			}
@@ -775,6 +792,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return result;
 		}
 
+		@Override
 		public final boolean visit(final Assignment node) {
 			Assert.isNotNull(node);
 			final IVariableBinding binding= getFieldBinding(node.getLeftHandSide());
@@ -783,6 +801,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return true;
 		}
 
+		@Override
 		public final boolean visit(final FieldAccess node) {
 			Assert.isNotNull(node);
 			if (node.getExpression() instanceof ThisExpression) {
@@ -798,6 +817,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return true;
 		}
 
+		@Override
 		public final boolean visit(final PostfixExpression node) {
 			final IVariableBinding binding= getFieldBinding(node.getOperand());
 			if (binding != null)
@@ -805,6 +825,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return true;
 		}
 
+		@Override
 		public final boolean visit(final PrefixExpression node) {
 			final IVariableBinding binding= getFieldBinding(node.getOperand());
 			if (binding != null)
@@ -812,6 +833,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final SimpleName node) {
 			Assert.isNotNull(node);
 			final IBinding binding= node.resolveBinding();
@@ -847,6 +869,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			fBinding= declaration.resolveBinding();
 		}
 
+		@Override
 		public final boolean visit(final MethodInvocation node) {
 			Assert.isNotNull(node);
 			final Expression expression= node.getExpression();
@@ -865,18 +888,22 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 */
 	public final class SuperReferenceFinder extends AstNodeFinder {
 
+		@Override
 		public final boolean visit(final AnnotationTypeDeclaration node) {
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final AnonymousClassDeclaration node) {
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final EnumDeclaration node) {
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final SuperFieldAccess node) {
 			Assert.isNotNull(node);
 			fStatus.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.MoveInstanceMethodProcessor_uses_super, JavaStatusContext.create(fMethod.getCompilationUnit(), node)));
@@ -884,6 +911,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final SuperMethodInvocation node) {
 			Assert.isNotNull(node);
 			fStatus.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.MoveInstanceMethodProcessor_uses_super, JavaStatusContext.create(fMethod.getCompilationUnit(), node)));
@@ -891,6 +919,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final TypeDeclaration node) {
 			return false;
 		}
@@ -901,6 +930,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 */
 	public final class ThisReferenceFinder extends AstNodeFinder {
 
+		@Override
 		public final boolean visit(final MethodInvocation node) {
 			Assert.isNotNull(node);
 			final IMethodBinding binding= node.resolveMethodBinding();
@@ -911,6 +941,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return true;
 		}
 
+		@Override
 		public final boolean visit(final SimpleName node) {
 			Assert.isNotNull(node);
 			if (isFieldAccess(node) && !isTargetAccess(node)) {
@@ -920,6 +951,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final ThisExpression node) {
 			Assert.isNotNull(node);
 			fResult.add(node);
@@ -934,13 +966,13 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	public class VisibilityAdjustingArgumentFactory implements IArgumentFactory {
 
 		/** The visibility adjustments */
-		private final Map fAdjustments;
+		private final Map<IMember, IncomingMemberVisibilityAdjustment> fAdjustments;
 
 		/** The ast to use for new nodes */
 		private final AST fAst;
 
 		/** The compilation unit rewrites */
-		private final Map fRewrites;
+		private final Map<ICompilationUnit, CompilationUnitRewrite> fRewrites;
 
 		/**
 		 * Creates a new visibility adjusting argument factory.
@@ -952,7 +984,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		 * @param adjustments
 		 *            the map of elements to visibility adjustments
 		 */
-		public VisibilityAdjustingArgumentFactory(final AST ast, final Map rewrites, final Map adjustments) {
+		public VisibilityAdjustingArgumentFactory(final AST ast, final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments) {
 			Assert.isNotNull(ast);
 			Assert.isNotNull(rewrites);
 			Assert.isNotNull(adjustments);
@@ -1021,12 +1053,10 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 */
 	protected static IVariableBinding[] getArgumentBindings(final MethodDeclaration declaration) {
 		Assert.isNotNull(declaration);
-		final List parameters= new ArrayList(declaration.parameters().size());
-		VariableDeclaration variable= null;
-		IVariableBinding binding= null;
-		for (final Iterator iterator= declaration.parameters().iterator(); iterator.hasNext();) {
-			variable= (VariableDeclaration) iterator.next();
-			binding= variable.resolveBinding();
+		final List<IVariableBinding> parameters= new ArrayList<IVariableBinding>(declaration.parameters().size());
+		for (final Iterator<SingleVariableDeclaration> iterator= declaration.parameters().iterator(); iterator.hasNext();) {
+			VariableDeclaration variable= iterator.next();
+			IVariableBinding binding= variable.resolveBinding();
 			if (binding == null)
 				return new IVariableBinding[0];
 			parameters.add(binding);
@@ -1047,7 +1077,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	protected static ITypeBinding[] getArgumentTypes(final MethodDeclaration declaration) {
 		Assert.isNotNull(declaration);
 		final IVariableBinding[] parameters= getArgumentBindings(declaration);
-		final List types= new ArrayList(parameters.length);
+		final List<ITypeBinding> types= new ArrayList<ITypeBinding>(parameters.length);
 		IVariableBinding binding= null;
 		ITypeBinding type= null;
 		for (int index= 0; index < parameters.length; index++) {
@@ -1221,12 +1251,12 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		Assert.isNotNull(status);
 		final MethodDeclaration declaration= ASTNodeSearchUtil.getMethodDeclarationNode(fMethod, fSourceRewrite.getRoot());
 		VariableDeclaration variable= null;
-		final List parameters= declaration.parameters();
+		final List<SingleVariableDeclaration> parameters= declaration.parameters();
 		try {
 			monitor.beginTask("", parameters.size()); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.MoveInstanceMethodProcessor_checking);
-			for (final Iterator iterator= parameters.iterator(); iterator.hasNext();) {
-				variable= (VariableDeclaration) iterator.next();
+			for (final Iterator<SingleVariableDeclaration> iterator= parameters.iterator(); iterator.hasNext();) {
+				variable= iterator.next();
 				if (fTargetName.equals(variable.getName().getIdentifier())) {
 					status.merge(RefactoringStatus.createErrorStatus(RefactoringCoreMessages.MoveInstanceMethodProcessor_target_name_already_used, JavaStatusContext.create(fMethod)));
 					break;
@@ -1242,6 +1272,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor,
 	 *      org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
 	 */
+	@Override
 	public final RefactoringStatus checkFinalConditions(final IProgressMonitor monitor, final CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		Assert.isNotNull(context);
@@ -1336,6 +1367,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public final RefactoringStatus checkInitialConditions(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		final RefactoringStatus status= new RefactoringStatus();
@@ -1527,13 +1559,13 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 *             if the method declaration could not be found
 	 */
 	protected String[] computeReservedIdentifiers() throws JavaModelException {
-		final List names= new ArrayList();
+		final List<String> names= new ArrayList<String>();
 		final MethodDeclaration declaration= ASTNodeSearchUtil.getMethodDeclarationNode(fMethod, fSourceRewrite.getRoot());
 		if (declaration != null) {
-			final List parameters= declaration.parameters();
+			final List<SingleVariableDeclaration> parameters= declaration.parameters();
 			VariableDeclaration variable= null;
 			for (int index= 0; index < parameters.size(); index++) {
-				variable= (VariableDeclaration) parameters.get(index);
+				variable= parameters.get(index);
 				names.add(variable.getName().getIdentifier());
 			}
 			final Block body= declaration.getBody();
@@ -1559,8 +1591,8 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	protected IVariableBinding[] computeTargetCategories(final MethodDeclaration declaration) {
 		Assert.isNotNull(declaration);
 		if (fPossibleTargets.length == 0 || fCandidateTargets.length == 0) {
-			final List possibleTargets= new ArrayList(16);
-			final List candidateTargets= new ArrayList(16);
+			final List<IVariableBinding> possibleTargets= new ArrayList<IVariableBinding>(16);
+			final List<IVariableBinding> candidateTargets= new ArrayList<IVariableBinding>(16);
 			final IMethodBinding method= declaration.resolveBinding();
 			if (method != null) {
 				final ITypeBinding declaring= method.getDeclaringClass();
@@ -1613,7 +1645,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @throws JavaModelException
 	 *             if an error occurs while accessing the target expression
 	 */
-	protected Expression createAdjustedTargetExpression(final IJavaElement enclosingElement, final Expression expression, final Map adjustments, final ASTRewrite rewrite) throws JavaModelException {
+	protected Expression createAdjustedTargetExpression(final IJavaElement enclosingElement, final Expression expression, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final ASTRewrite rewrite) throws JavaModelException {
 		Assert.isNotNull(enclosingElement);
 		Assert.isNotNull(adjustments);
 		Assert.isNotNull(rewrite);
@@ -1660,7 +1692,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @throws JavaModelException
 	 *             if an error occurs
 	 */
-	protected boolean createArgumentList(final MethodDeclaration declaration, final List arguments, final IArgumentFactory factory) throws JavaModelException {
+	protected boolean createArgumentList(final MethodDeclaration declaration, final List<ASTNode> arguments, final IArgumentFactory factory) throws JavaModelException {
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(arguments);
 		Assert.isNotNull(factory);
@@ -1693,6 +1725,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public final Change createChange(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		try {
@@ -1701,9 +1734,9 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			final TextChange[] changes= fChangeManager.getAllChanges();
 			if (changes.length == 1)
 				return changes[0];
-			final List list= new ArrayList(changes.length);
+			final List<TextChange> list= new ArrayList<TextChange>(changes.length);
 			list.addAll(Arrays.asList(changes));
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			final IJavaProject javaProject= fMethod.getJavaProject();
 			if (javaProject != null)
@@ -1734,7 +1767,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			arguments.put(ATTRIBUTE_USE_GETTER, Boolean.valueOf(fUseGetters).toString());
 			arguments.put(ATTRIBUTE_USE_SETTER, Boolean.valueOf(fUseSetters).toString());
 			arguments.put(ATTRIBUTE_TARGET_INDEX, new Integer(getTargetIndex()).toString());
-			return new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.MoveInstanceMethodRefactoring_name, (Change[]) list.toArray(new Change[list.size()]));
+			return new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.MoveInstanceMethodRefactoring_name, list.toArray(new Change[list.size()]));
 		} finally {
 			monitor.done();
 		}
@@ -1764,7 +1797,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			final CompilationUnitRewrite targetRewrite= fMethod.getCompilationUnit().equals(getTargetType().getCompilationUnit()) ? fSourceRewrite : new CompilationUnitRewrite(getTargetType().getCompilationUnit());
 			final MethodDeclaration declaration= ASTNodeSearchUtil.getMethodDeclarationNode(fMethod, fSourceRewrite.getRoot());
 			final SearchResultGroup[] references= computeMethodReferences(new SubProgressMonitor(monitor, 1), status);
-			final Map rewrites= new HashMap(2);
+			final Map<ICompilationUnit, CompilationUnitRewrite> rewrites= new HashMap<ICompilationUnit, CompilationUnitRewrite>(2);
 			rewrites.put(fSourceRewrite.getCu(), fSourceRewrite);
 			if (!fSourceRewrite.getCu().equals(targetRewrite.getCu()))
 				rewrites.put(targetRewrite.getCu(), targetRewrite);
@@ -1800,7 +1833,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			// field will be removed anyway.
 			final IJavaElement targetElement= fTarget.getJavaElement();
 			if (targetElement != null && targetElement instanceof IField && (Flags.isPrivate(fMethod.getFlags()) || !fInline)) {
-				final IVisibilityAdjustment adjustmentForTarget= (IVisibilityAdjustment) adjustor.getAdjustments().get(targetElement);
+				final IVisibilityAdjustment adjustmentForTarget= adjustor.getAdjustments().get(targetElement);
 				if (adjustmentForTarget != null)
 					adjustor.getAdjustments().remove(targetElement);
 			}
@@ -1810,9 +1843,9 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			createMethodSignature(document, declaration, sourceRewrite, rewrites);
 			ICompilationUnit unit= null;
 			CompilationUnitRewrite rewrite= null;
-			for (final Iterator iterator= rewrites.keySet().iterator(); iterator.hasNext();) {
-				unit= (ICompilationUnit) iterator.next();
-				rewrite= (CompilationUnitRewrite) rewrites.get(unit);
+			for (final Iterator<ICompilationUnit> iterator= rewrites.keySet().iterator(); iterator.hasNext();) {
+				unit= iterator.next();
+				rewrite= rewrites.get(unit);
 				manager.manage(unit, rewrite.createChange(true));
 			}
 			return manager;
@@ -1844,7 +1877,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 *             if a problem occurred while creating the inlined target
 	 *             expression for field targets
 	 */
-	protected boolean createInlinedMethodInvocation(final CompilationUnitRewrite rewriter, final MethodDeclaration declaration, final SearchMatch match, final Map adjustments, final boolean target, final RefactoringStatus status) throws JavaModelException {
+	protected boolean createInlinedMethodInvocation(final CompilationUnitRewrite rewriter, final MethodDeclaration declaration, final SearchMatch match, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final boolean target, final RefactoringStatus status) throws JavaModelException {
 		Assert.isNotNull(rewriter);
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(match);
@@ -1937,7 +1970,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 *             if a problem occurred while retrieving potential getter
 	 *             methods of the target
 	 */
-	protected Expression createInlinedTargetExpression(final CompilationUnitRewrite rewriter, final IJavaElement enclosingElement, final Expression original, final Map adjustments, final RefactoringStatus status) throws JavaModelException {
+	protected Expression createInlinedTargetExpression(final CompilationUnitRewrite rewriter, final IJavaElement enclosingElement, final Expression original, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final RefactoringStatus status) throws JavaModelException {
 		Assert.isNotNull(rewriter);
 		Assert.isNotNull(enclosingElement);
 		Assert.isNotNull(original);
@@ -1973,7 +2006,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @throws JavaModelException
 	 *             if an error occurs while accessing the types of the arguments
 	 */
-	protected boolean createMethodArguments(final Map rewrites, final ASTRewrite rewrite, final MethodDeclaration declaration, final Map adjustments, final RefactoringStatus status) throws JavaModelException {
+	protected boolean createMethodArguments(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final ASTRewrite rewrite, final MethodDeclaration declaration, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final RefactoringStatus status) throws JavaModelException {
 		Assert.isNotNull(rewrites);
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(rewrite);
@@ -1983,9 +2016,10 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		final AST ast= rewriter.getRoot().getAST();
 		final AstNodeFinder finder= new AnonymousClassReferenceFinder(declaration);
 		declaration.accept(finder);
-		final List arguments= new ArrayList(declaration.parameters().size() + 1);
+		final List<ASTNode> arguments= new ArrayList<ASTNode>(declaration.parameters().size() + 1);
 		final boolean result= createArgumentList(declaration, arguments, new VisibilityAdjustingArgumentFactory(ast, rewrites, adjustments) {
 
+			@Override
 			public final ASTNode getArgumentNode(final IVariableBinding binding, final boolean last) throws JavaModelException {
 				Assert.isNotNull(binding);
 				final SingleVariableDeclaration variable= ast.newSingleVariableDeclaration();
@@ -2015,6 +2049,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 				return variable;
 			}
 
+			@Override
 			public final ASTNode getTargetNode() throws JavaModelException {
 				final SingleVariableDeclaration variable= ast.newSingleVariableDeclaration();
 				final IMethodBinding method= declaration.resolveBinding();
@@ -2033,12 +2068,12 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		});
 		final ListRewrite list= rewrite.getListRewrite(declaration, MethodDeclaration.PARAMETERS_PROPERTY);
 		ASTNode node= null;
-		for (final Iterator iterator= declaration.parameters().iterator(); iterator.hasNext();) {
-			node= (ASTNode) iterator.next();
+		for (final Iterator<SingleVariableDeclaration> iterator= declaration.parameters().iterator(); iterator.hasNext();) {
+			node= iterator.next();
 			list.remove(node, null);
 		}
-		for (final Iterator iterator= arguments.iterator(); iterator.hasNext();) {
-			node= (ASTNode) iterator.next();
+		for (final Iterator<ASTNode> iterator= arguments.iterator(); iterator.hasNext();) {
+			node= iterator.next();
 			list.insertLast(node, null);
 		}
 		return result;
@@ -2074,18 +2109,18 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		Assert.isNotNull(declaration);
 		final Javadoc comment= declaration.getJavadoc();
 		if (comment != null) {
-			final List tags= new LinkedList(comment.tags());
+			final List<TagElement> tags= new LinkedList<TagElement>(comment.tags());
 			final IVariableBinding[] bindings= getArgumentBindings(declaration);
-			final Map elements= new HashMap(bindings.length);
+			final Map<String, TagElement> elements= new HashMap<String, TagElement>(bindings.length);
 			String name= null;
-			List fragments= null;
+			List<? extends ASTNode> fragments= null;
 			TagElement element= null;
 			TagElement reference= null;
 			IVariableBinding binding= null;
 			for (int index= 0; index < bindings.length; index++) {
 				binding= bindings[index];
-				for (final Iterator iterator= comment.tags().iterator(); iterator.hasNext();) {
-					element= (TagElement) iterator.next();
+				for (final Iterator<TagElement> iterator= comment.tags().iterator(); iterator.hasNext();) {
+					element= iterator.next();
 					name= element.getTagName();
 					fragments= element.fragments();
 					if (name != null) {
@@ -2101,21 +2136,21 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 				}
 			}
 			if (bindings.length == 0 && reference == null) {
-				for (final Iterator iterator= comment.tags().iterator(); iterator.hasNext();) {
-					element= (TagElement) iterator.next();
+				for (final Iterator<TagElement> iterator= comment.tags().iterator(); iterator.hasNext();) {
+					element= iterator.next();
 					name= element.getTagName();
 					fragments= element.fragments();
 					if (name != null && !name.equals(TagElement.TAG_PARAM))
 						reference= element;
 				}
 			}
-			final List arguments= new ArrayList(bindings.length + 1);
+			final List<ASTNode> arguments= new ArrayList<ASTNode>(bindings.length + 1);
 			createArgumentList(declaration, arguments, new IArgumentFactory() {
 
 				public final ASTNode getArgumentNode(final IVariableBinding argument, final boolean last) throws JavaModelException {
 					Assert.isNotNull(argument);
 					if (elements.containsKey(argument.getKey()))
-						return rewrite.createCopyTarget((ASTNode) elements.get(argument.getKey()));
+						return rewrite.createCopyTarget(elements.get(argument.getKey()));
 					return JavadocUtil.createParamTag(argument.getName(), declaration.getAST(), fMethod.getJavaProject());
 				}
 
@@ -2125,13 +2160,13 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 			});
 			final ListRewrite rewriter= rewrite.getListRewrite(comment, Javadoc.TAGS_PROPERTY);
 			ASTNode tag= null;
-			for (final Iterator iterator= comment.tags().iterator(); iterator.hasNext();) {
-				tag= (ASTNode) iterator.next();
+			for (final Iterator<TagElement> iterator= comment.tags().iterator(); iterator.hasNext();) {
+				tag= iterator.next();
 				if (!tags.contains(tag))
 					rewriter.remove(tag, null);
 			}
-			for (final Iterator iterator= arguments.iterator(); iterator.hasNext();) {
-				tag= (ASTNode) iterator.next();
+			for (final Iterator<ASTNode> iterator= arguments.iterator(); iterator.hasNext();) {
+				tag= iterator.next();
 				if (reference != null)
 					rewriter.insertBefore(tag, reference, null);
 				else
@@ -2196,7 +2231,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @return <code>true</code> if a target node had to be inserted as first
 	 *         argument, <code>false</code> otherwise
 	 */
-	protected boolean createMethodCopy(final IDocument document, final MethodDeclaration declaration, final ASTRewrite rewrite, final Map rewrites, final Map adjustments, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
+	protected boolean createMethodCopy(final IDocument document, final MethodDeclaration declaration, final ASTRewrite rewrite, final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
 		Assert.isNotNull(document);
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(rewrite);
@@ -2252,7 +2287,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @return <code>true</code> if a target node had to be inserted as first
 	 *         argument, <code>false</code> otherwise
 	 */
-	protected boolean createMethodDelegation(final MethodDeclaration declaration, final Map rewrites, final Map adjustments, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
+	protected boolean createMethodDelegation(final MethodDeclaration declaration, final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final RefactoringStatus status, final IProgressMonitor monitor) throws CoreException {
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(monitor);
 
@@ -2294,7 +2329,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 *         method declaration could be inlined, <code>false</code>
 	 *         otherwise
 	 */
-	protected boolean createMethodDelegator(final Map rewrites, final MethodDeclaration declaration, final SearchResultGroup[] groups, final Map adjustments, final boolean target, ReferencesInBinaryContext binaryRefs, final RefactoringStatus status, final IProgressMonitor monitor) {
+	protected boolean createMethodDelegator(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final MethodDeclaration declaration, final SearchResultGroup[] groups, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final boolean target, ReferencesInBinaryContext binaryRefs, final RefactoringStatus status, final IProgressMonitor monitor) {
 		Assert.isNotNull(rewrites);
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(groups);
@@ -2389,7 +2424,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 		monitor.beginTask("", 1); //$NON-NLS-1$
 		monitor.setTaskName(RefactoringCoreMessages.MoveInstanceMethodProcessor_creating);
 		try {
-			ImportRewriteUtil.addImports(rewrite, null, declaration, new HashMap(), new HashMap(), false);
+			ImportRewriteUtil.addImports(rewrite, null, declaration, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 		} finally {
 			monitor.done();
 		}
@@ -2444,7 +2479,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @param monitor
 	 *            the progress monitor to use
 	 */
-	protected void createMethodJavadocReferences(final Map rewrites, final MethodDeclaration declaration, final SearchResultGroup[] groups, final boolean target, final RefactoringStatus status, final IProgressMonitor monitor) {
+	protected void createMethodJavadocReferences(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final MethodDeclaration declaration, final SearchResultGroup[] groups, final boolean target, final RefactoringStatus status, final IProgressMonitor monitor) {
 		Assert.isNotNull(rewrites);
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(status);
@@ -2534,7 +2569,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @throws JavaModelException
 	 *             if the insertion point cannot be found
 	 */
-	protected void createMethodSignature(final IDocument document, final MethodDeclaration declaration, final ASTRewrite rewrite, final Map rewrites) throws JavaModelException {
+	protected void createMethodSignature(final IDocument document, final MethodDeclaration declaration, final ASTRewrite rewrite, final Map<ICompilationUnit, CompilationUnitRewrite> rewrites) throws JavaModelException {
 		Assert.isNotNull(document);
 		Assert.isNotNull(declaration);
 		Assert.isNotNull(rewrite);
@@ -2643,10 +2678,10 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 *            the compilation unit
 	 * @return the corresponding compilation unit rewrite
 	 */
-	protected CompilationUnitRewrite getCompilationUnitRewrite(final Map rewrites, final ICompilationUnit unit) {
+	protected CompilationUnitRewrite getCompilationUnitRewrite(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final ICompilationUnit unit) {
 		Assert.isNotNull(rewrites);
 		Assert.isNotNull(unit);
-		CompilationUnitRewrite rewrite= (CompilationUnitRewrite) rewrites.get(unit);
+		CompilationUnitRewrite rewrite= rewrites.get(unit);
 		if (rewrite == null) {
 			rewrite= new CompilationUnitRewrite(unit);
 			rewrites.put(unit, rewrite);
@@ -2681,6 +2716,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final Object[] getElements() {
 		return new Object[] { fMethod };
 	}
@@ -2688,6 +2724,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final String getIdentifier() {
 		return IDENTIFIER;
 	}
@@ -2724,6 +2761,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
 	 */
+	@Override
 	public final String getProcessorName() {
 		return RefactoringCoreMessages.MoveInstanceMethodProcessor_name;
 	}
@@ -2864,6 +2902,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
 	 */
+	@Override
 	public final boolean isApplicable() throws CoreException {
 		return fMethod.exists() && !fMethod.isConstructor() && !fMethod.isBinary() && !fMethod.isReadOnly() && fMethod.getCompilationUnit() != null && !JdtFlags.isStatic(fMethod);
 	}
@@ -2898,6 +2937,7 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus,
 	 *      org.eclipse.ltk.core.refactoring.participants.SharableParticipants)
 	 */
+	@Override
 	public final RefactoringParticipant[] loadParticipants(final RefactoringStatus status, final SharableParticipants participants) throws CoreException {
 		return new RefactoringParticipant[0];
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMemberAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMemberAnalyzer.java
index 1dc04a6..a553768 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMemberAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMemberAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,7 +51,7 @@ import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
 
 	protected boolean fNeedsImport;
 
-	protected Set fProcessed;
+	protected Set<SimpleName> fProcessed;
 
 	protected static final String REFERENCE_UPDATE= RefactoringCoreMessages.MoveMembersRefactoring_referenceUpdate;
 
@@ -62,7 +62,7 @@ import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
 		fMembers= members;
 		fSource= source;
 		fTarget= target;
-		fProcessed= new HashSet();
+		fProcessed= new HashSet<SimpleName>();
 	}
 
 	public RefactoringStatus getStatus() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java
index 83604a3..30089e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 import org.eclipse.ltk.core.refactoring.RefactoringStatusContext;
 import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
 import org.eclipse.ltk.core.refactoring.participants.MoveArguments;
+import org.eclipse.ltk.core.refactoring.participants.MoveParticipant;
 import org.eclipse.ltk.core.refactoring.participants.MoveProcessor;
 import org.eclipse.ltk.core.refactoring.participants.ParticipantManager;
 import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
@@ -74,14 +75,15 @@ import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
-import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.rewrite.ITrackedNodePosition;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
 import org.eclipse.jdt.core.refactoring.descriptors.MoveStaticMembersDescriptor;
@@ -150,17 +152,19 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 	private boolean fDelegateDeprecation;
 
 	private static class TypeReferenceFinder extends ASTVisitor {
-		List fResult= new ArrayList();
-		Set fDefined= new HashSet();
-		public static List perform(ASTNode root) {
+		List<IBinding> fResult= new ArrayList<IBinding>();
+		Set<ITypeBinding> fDefined= new HashSet<ITypeBinding>();
+		public static List<IBinding> perform(ASTNode root) {
 			TypeReferenceFinder visitor= new TypeReferenceFinder();
 			root.accept(visitor);
 			return visitor.fResult;
 		}
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			fDefined.add(node.resolveBinding());
 			return true;
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding= node.resolveBinding();
 			if (!(binding instanceof ITypeBinding))
@@ -170,11 +174,13 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			return true;
 		}
 
+		@Override
 		public boolean visit(AnnotationTypeDeclaration node) {
 			fDefined.add(node.resolveBinding());
 			return true;
 		}
 
+		@Override
 		public boolean visit(EnumDeclaration node) {
 			fDefined.add(node.resolveBinding());
 			return true;
@@ -203,6 +209,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isMoveStaticMembersAvailable(fMembersToMove);
 	}
@@ -210,6 +217,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object[] getElements() {
 		Object[] result= new Object[fMembersToMove.length];
 		System.arraycopy(fMembersToMove, 0, result, 0, fMembersToMove.length);
@@ -219,6 +227,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getIdentifier() {
 		return IRefactoringProcessorIds.MOVE_STATIC_MEMBERS_PROCESSOR;
 	}
@@ -226,8 +235,9 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, SharableParticipants sharedParticipants) throws CoreException {
-		List result= new ArrayList();
+		List<MoveParticipant> result= new ArrayList<MoveParticipant>();
 		MoveArguments args= new MoveArguments(fDestinationType, true);
 		String[] natures= JavaProcessors.computeAffectedNaturs(fMembersToMove);
 		for (int i= 0; i < fMembersToMove.length; i++) {
@@ -235,7 +245,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			result.addAll(Arrays.asList(ParticipantManager.loadMoveParticipants(
 				status, this, member, args, natures, sharedParticipants)));
 		}
-		return (RefactoringParticipant[])result.toArray(new RefactoringParticipant[result.size()]);
+		return result.toArray(new RefactoringParticipant[result.size()]);
 	}
 
 	//------------------- IDelegateUpdating ----------------------
@@ -276,6 +286,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 		fDelegateDeprecation= deprecate;
 	}
 
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.MoveMembersRefactoring_Move_Members;
 	}
@@ -309,6 +320,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 
 	//---- Activation checking ------------------------------------
 
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 		try {
 			pm.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_checking, 1);
@@ -358,6 +370,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 
 	//---- Input checking ------------------------------------
 
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		fTarget= null;
 		try {
@@ -384,7 +397,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			if (result.hasFatalError())
 				return result;
 
-			List modifiedCus= new ArrayList();
+			List<ICompilationUnit> modifiedCus= new ArrayList<ICompilationUnit>();
 			createChange(modifiedCus, result, new SubProgressMonitor(pm, 7));
 			IFile[] changedFiles= getAllFilesToModify(modifiedCus);
 			ResourceChangeChecker checker= (ResourceChangeChecker)context.getChecker(ResourceChangeChecker.class);
@@ -398,8 +411,8 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 		}
 	}
 
-	private IFile[] getAllFilesToModify(List modifiedCus) {
-		Set result= new HashSet();
+	private IFile[] getAllFilesToModify(List<ICompilationUnit> modifiedCus) {
+		Set<IResource> result= new HashSet<IResource>();
 		IResource resource= fDestinationType.getCompilationUnit().getResource();
 		result.add(resource);
 		for (int i= 0; i < fMembersToMove.length; i++) {
@@ -407,12 +420,12 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			if (resource != null)
 				result.add(resource);
 		}
-		for (Iterator iter= modifiedCus.iterator(); iter.hasNext();) {
-			ICompilationUnit unit= (ICompilationUnit)iter.next();
+		for (Iterator<ICompilationUnit> iter= modifiedCus.iterator(); iter.hasNext();) {
+			ICompilationUnit unit= iter.next();
 			if (unit.getResource() != null)
 				result.add(unit.getResource());
 		}
-		return (IFile[]) result.toArray(new IFile[result.size()]);
+		return result.toArray(new IFile[result.size()]);
 	}
 
 	private RefactoringStatus checkDestinationType() throws JavaModelException {
@@ -536,7 +549,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 		if (JdtFlags.isPublic(member) && JdtFlags.isPublic(fDestinationType))
 			return new IType[0];
 
-		HashSet blindAccessorTypes= new HashSet(); // referencing, but access to destination type illegal
+		HashSet<IType> blindAccessorTypes= new HashSet<IType>(); // referencing, but access to destination type illegal
 		SearchResultGroup[] references= getReferences(member, new SubProgressMonitor(pm, 1), status);
 		for (int i = 0; i < references.length; i++) {
 			SearchMatch[] searchResults= references[i].getSearchResults();
@@ -560,7 +573,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 				blindAccessorTypes.add(type);
 		}
 
-		return (IType[]) blindAccessorTypes.toArray(new IType[blindAccessorTypes.size()]);
+		return blindAccessorTypes.toArray(new IType[blindAccessorTypes.size()]);
 	}
 
 	private String createNonAccessibleMemberMessage(IMember member, IType accessingType, boolean moved){
@@ -694,12 +707,13 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 		return result;
 	}
 
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		pm.done();
 		return fChange;
 	}
 
-	private void createChange(List modifiedCus, RefactoringStatus status, IProgressMonitor monitor) throws CoreException {
+	private void createChange(List<ICompilationUnit> modifiedCus, RefactoringStatus status, IProgressMonitor monitor) throws CoreException {
 		monitor.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_creating, 5);
 		fChange= new DynamicValidationRefactoringChange(createDescriptor(), RefactoringCoreMessages.MoveMembersRefactoring_move_members);
 		fTarget= getCuRewrite(fDestinationType.getCompilationUnit());
@@ -711,11 +725,11 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 		}
 
 		try {
-			Map adjustments= new HashMap();
+			Map<IMember, IncomingMemberVisibilityAdjustment> adjustments= new HashMap<IMember, IncomingMemberVisibilityAdjustment>();
 			IMember member= null;
 			SubProgressMonitor sub= new SubProgressMonitor(monitor, 1, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
 			sub.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_creating, fMembersToMove.length);
-			Set rewritten= new HashSet();
+			Set<IMember> rewritten= new HashSet<IMember>();
 			for (int index= 0; index < fMembersToMove.length; index++) {
 				member= fMembersToMove[index];
 				final MemberVisibilityAdjustor adjustor= new MemberVisibilityAdjustor(fDestinationType, member);
@@ -730,7 +744,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 					// Add a visibility adjustment so the moved member
 					// will be visible from within the delegate
 					ModifierKeyword threshold= adjustor.getVisibilityThreshold(member, fDestinationType, new NullProgressMonitor());
-					IncomingMemberVisibilityAdjustment adjustment= (IncomingMemberVisibilityAdjustment) adjustments.get(member);
+					IncomingMemberVisibilityAdjustment adjustment= adjustments.get(member);
 					ModifierKeyword kw= adjustment != null ? adjustment.getKeyword() : ModifierKeyword.fromFlagValue(JdtFlags.getVisibilityCode(member));
 					if (MemberVisibilityAdjustor.hasLowerVisibility(kw, threshold)) {
 						adjustments.put(member, new MemberVisibilityAdjustor.IncomingMemberVisibilityAdjustment(member, threshold, RefactoringStatus.createWarningStatus(Messages.format(MemberVisibilityAdjustor.getMessage(member), new String[] { MemberVisibilityAdjustor.getLabel(member), MemberVisibilityAdjustor.getLabel(threshold)}), JavaStatusContext.create(member))));
@@ -741,7 +755,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 				// error message if not (for example, when moving into a private type)
 				status.merge(checkMovedMemberAvailability(member, new SubProgressMonitor(sub, 1)));
 				// Put rewrite info into code and into status
-				for (final Iterator iterator= rewritten.iterator(); iterator.hasNext();) {
+				for (final Iterator<IMember> iterator= rewritten.iterator(); iterator.hasNext();) {
 					adjustments.remove(iterator.next());
 				}
 				rewritten.addAll(adjustments.keySet());
@@ -758,10 +772,11 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			ReferencesInBinaryContext binaryRefs= new ReferencesInBinaryContext(RefactoringCoreMessages.ReferencesInBinaryContext_ref_in_binaries_description_plural);
 			IJavaSearchScope scope= RefactoringScopeFactory.create(fMembersToMove, false);
 			SearchPattern pattern= RefactoringSearchEngine.createOrPattern(fMembersToMove, IJavaSearchConstants.ALL_OCCURRENCES);
-			final HashSet affectedCompilationUnits= new HashSet();
+			final HashSet<ICompilationUnit> affectedCompilationUnits= new HashSet<ICompilationUnit>();
 
 			CollectingSearchRequestor requestor= new CollectingSearchRequestor(binaryRefs) {
 				private ICompilationUnit fLastCU;
+				@Override
 				public void acceptSearchMatch(SearchMatch match) throws CoreException {
 					if (filterMatch(match))
 						return;
@@ -776,7 +791,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			};
 			RefactoringSearchEngine.search(pattern, scope, requestor, new NullProgressMonitor(), status);
 			binaryRefs.addErrorIfNecessary(status);
-			ICompilationUnit[] units= (ICompilationUnit[]) affectedCompilationUnits.toArray(new ICompilationUnit[affectedCompilationUnits.size()]);
+			ICompilationUnit[] units= affectedCompilationUnits.toArray(new ICompilationUnit[affectedCompilationUnits.size()]);
 
 			modifiedCus.addAll(Arrays.asList(units));
 			final MemberVisibilityAdjustor adjustor= new MemberVisibilityAdjustor(fDestinationType, fDestinationType);
@@ -882,10 +897,10 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 	}
 
 	private String[] getUpdatedMemberSource(RefactoringStatus status, BodyDeclaration[] members, ITypeBinding target) throws CoreException, BadLocationException {
-		List typeRefs= new ArrayList();
+		List<IBinding> typeRefs= new ArrayList<IBinding>();
 		boolean targetNeedsSourceImport= false;
 		boolean isSourceNotTarget= fSource != fTarget;
-		Set exclude= new HashSet();
+		Set<IBinding> exclude= new HashSet<IBinding>();
 		for (int i= 0; i < members.length; i++) {
 			BodyDeclaration declaration= members[i];
 			if (declaration instanceof AbstractTypeDeclaration) {
@@ -900,8 +915,8 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 					exclude.add(binding);
 			} else if (declaration instanceof FieldDeclaration) {
 				FieldDeclaration field= (FieldDeclaration) declaration;
-				for (final Iterator iterator= field.fragments().iterator(); iterator.hasNext();) {
-					VariableDeclarationFragment fragment= (VariableDeclarationFragment) iterator.next();
+				for (final Iterator<VariableDeclarationFragment> iterator= field.fragments().iterator(); iterator.hasNext();) {
+					VariableDeclarationFragment fragment= iterator.next();
 					IVariableBinding binding= fragment.resolveBinding();
 					if (binding != null)
 						exclude.add(binding);
@@ -915,7 +930,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 				typeRefs.addAll(TypeReferenceFinder.perform(declaration));
 			MovedMemberAnalyzer analyzer= new MovedMemberAnalyzer(fSource, fMemberBindings, fSourceBinding, target);
 			declaration.accept(analyzer);
-			ImportRewriteUtil.addImports(fTarget, context, declaration, new HashMap(), new HashMap(), exclude, false);
+			ImportRewriteUtil.addImports(fTarget, context, declaration, new HashMap<Name, String>(), new HashMap<Name, String>(), exclude, false);
 			if (getDeclaringType().isInterface() && !fDestinationType.isInterface()) {
 				if (declaration instanceof FieldDeclaration) {
 					FieldDeclaration fieldDecl= (FieldDeclaration) declaration;
@@ -941,7 +956,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			fTarget.getImportRewrite().addImport(fSourceBinding, context);
 		}
 		if (isSourceNotTarget) {
-			for (Iterator iter= typeRefs.iterator(); iter.hasNext();) {
+			for (Iterator<IBinding> iter= typeRefs.iterator(); iter.hasNext();) {
 				ITypeBinding binding= (ITypeBinding) iter.next();
 				fTarget.getImportRewrite().addImport(binding, context);
 			}
@@ -1030,7 +1045,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 				fSource.getImportRemover().registerRemovedNode(removeImportsOf);
 
 			ASTNode node= fTarget.getASTRewrite().createStringPlaceholder(sources[i], declaration.getNodeType());
-			List container= containerRewrite.getRewrittenList();
+			List<BodyDeclaration> container= containerRewrite.getRewrittenList();
 			int insertionIndex= ASTNodes.getInsertionIndex((BodyDeclaration) node, container);
 			containerRewrite.insertAt(node, insertionIndex, add);
 		}
@@ -1055,10 +1070,9 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 		}
 
 		//Sorting members is important for field declarations referring to previous fields.
-		Arrays.sort(result, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				return ((BodyDeclaration) o1).getStartPosition()
-						- ((BodyDeclaration) o2).getStartPosition();
+		Arrays.sort(result, new Comparator<BodyDeclaration>() {
+			public int compare(BodyDeclaration o1, BodyDeclaration o2) {
+				return o1.getStartPosition() - o2.getStartPosition();
 			}
 		});
 		return result;
@@ -1087,7 +1101,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_DEPRECATE));
 		int count= 1;
-		final List elements= new ArrayList();
+		final List<IJavaElement> elements= new ArrayList<IJavaElement>();
 		String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		final RefactoringStatus status= new RefactoringStatus();
 		while ((handle= extended.getAttribute(attribute)) != null) {
@@ -1099,7 +1113,7 @@ public final class MoveStaticMembersProcessor extends MoveProcessor implements I
 			count++;
 			attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		}
-		fMembersToMove= (IMember[]) elements.toArray(new IMember[elements.size()]);
+		fMembersToMove= elements.toArray(new IMember[elements.size()]);
 		if (elements.isEmpty())
 			return JavaRefactoringDescriptorUtil.createInputFatalStatus(null, getProcessorName(), IJavaRefactorings.MOVE_STATIC_MEMBERS);
 		IJavaProject project= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java
index 32d9c2c..4f369aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
 
 	//---- types and fields --------------------------
 
+	@Override
 	public boolean visit(SimpleName node) {
 		if (node.isDeclaration() || isProcessed(node))
 			return super.visit(node);
@@ -64,6 +65,7 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(QualifiedName node) {
 		IBinding binding= node.resolveBinding();
 		if (isSourceAccess(binding)) {
@@ -84,6 +86,7 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(FieldAccess node) {
 		IBinding binding= node.resolveFieldBinding();
 		if (isSourceAccess(binding)) {
@@ -102,6 +105,7 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
 
 	//---- method invocations ----------------------------------
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		IBinding binding= node.resolveMethodBinding();
 		if (isSourceAccess(binding)) {
@@ -122,6 +126,7 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
 
 	//---- javadoc references ----------------------------------
 
+	@Override
 	public boolean visit(MemberRef node) {
 		IBinding binding= node.resolveBinding();
 		if (isSourceAccess(binding)) {
@@ -140,6 +145,7 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(MethodRef node) {
 		IBinding binding= node.resolveBinding();
 		if (isSourceAccess(binding)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java
index 77250a7..6b8dd5a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,8 @@ import org.eclipse.text.edits.TextEdit;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.Document;
 
+import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
+
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
@@ -39,6 +41,7 @@ import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
+import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
@@ -50,19 +53,20 @@ import org.eclipse.jdt.core.dom.Javadoc;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.SuperFieldAccess;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
-import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
@@ -86,7 +90,7 @@ public class ParameterObjectFactory {
 	private boolean fCreateSetter;
 	private String fEnclosingType;
 	private String fPackage;
-	private List fVariables;
+	private List<ParameterInfo> fVariables;
 
 	public ParameterObjectFactory() {
 		super();
@@ -181,9 +185,9 @@ public class ParameterObjectFactory {
 			listener= new CreationListener();
 		TypeDeclaration typeDeclaration= ast.newTypeDeclaration();
 		typeDeclaration.setName(ast.newSimpleName(fClassName));
-		List body= typeDeclaration.bodyDeclarations();
-		for (Iterator iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		List<BodyDeclaration> body= typeDeclaration.bodyDeclarations();
+		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (isValidField(pi)) {
 				FieldDeclaration declaration= createField(pi, cuRewrite);
 				listener.fieldCreated(cuRewrite, declaration, pi);
@@ -193,8 +197,8 @@ public class ParameterObjectFactory {
 		MethodDeclaration constructor= createConstructor(declaringType, cuRewrite, listener);
 		listener.constructorCreated(cuRewrite, constructor);
 		body.add(constructor);
-		for (Iterator iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (fCreateGetter && isValidField(pi) && listener.isCreateGetter(pi)) {
 				MethodDeclaration getter= createGetter(pi, declaringType, cuRewrite);
 				listener.getterCreated(cuRewrite, getter, pi);
@@ -227,21 +231,21 @@ public class ParameterObjectFactory {
 				methodDeclaration.setJavadoc(doc);
 			}
 		}
-		List parameters= methodDeclaration.parameters();
+		List<SingleVariableDeclaration> parameters= methodDeclaration.parameters();
 		Block block= ast.newBlock();
 		methodDeclaration.setBody(block);
-		List statements= block.statements();
-		List validParameter= new ArrayList();
-		for (Iterator iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		List<Statement> statements= block.statements();
+		List<ParameterInfo> validParameter= new ArrayList<ParameterInfo>();
+		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (isValidField(pi) && listener.isUseInConstructor(pi)) {
 					validParameter.add(pi);
 			}
 		}
 
-		ArrayList usedParameter= new ArrayList();
-		for (Iterator iter= validParameter.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		ArrayList<String> usedParameter= new ArrayList<String>();
+		for (Iterator<ParameterInfo> iter= validParameter.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			SingleVariableDeclaration svd= ast.newSingleVariableDeclaration();
 			ITypeBinding typeBinding= pi.getNewTypeBinding();
 			if (!iter.hasNext() && typeBinding.isArray() && pi.isOldVarargs()) {
@@ -278,7 +282,7 @@ public class ParameterObjectFactory {
 		return methodDeclaration;
 	}
 
-	private String getParameterName(ParameterInfo pi, IJavaProject project, ArrayList usedParameter) {
+	private String getParameterName(ParameterInfo pi, IJavaProject project, ArrayList<String> usedParameter) {
 		String fieldName= pi.getNewName();
 		String strippedName= NamingConventions.getBaseName(NamingConventions.VK_INSTANCE_FIELD, fieldName, project);
 		String[] suggestions= StubUtility.getVariableNameSuggestions(NamingConventions.VK_PARAMETER, project, strippedName, 0, usedParameter, true);
@@ -313,7 +317,7 @@ public class ParameterObjectFactory {
 				declaration.setJavadoc(doc);
 			}
 		}
-		List modifiers= new ArrayList();
+		List<Modifier> modifiers= new ArrayList<Modifier>();
 		if (fCreateGetter) {
 			modifiers.add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD));
 		} else {
@@ -419,7 +423,7 @@ public class ParameterObjectFactory {
 		IVariableBinding variable= pi.getOldBinding();
 		declaration.setType(importBinding(pi.getNewTypeBinding(), cuRewrite));
 		int modifiers= variable.getModifiers();
-		List newModifiers= ast.newModifiers(modifiers);
+		List<Modifier> newModifiers= ast.newModifiers(modifiers);
 		declaration.modifiers().addAll(newModifiers);
 		return ast.newExpressionStatement(declaration);
 	}
@@ -472,6 +476,7 @@ public class ParameterObjectFactory {
 
 	ContextSensitiveImportRewriteContext createParameterClassAwareContext(final boolean asTopLevelClass, final CompilationUnitRewrite cuRewrite, int position) {
 		ContextSensitiveImportRewriteContext context= new ContextSensitiveImportRewriteContext(cuRewrite.getRoot(), position, cuRewrite.getImportRewrite()) {
+			@Override
 			public int findInContext(String qualifier, String name, int kind) {
 				String parameterClassName= getClassName();
 				if (kind == ImportRewriteContext.KIND_TYPE && parameterClassName.equals(name)) {
@@ -509,8 +514,8 @@ public class ParameterObjectFactory {
 	}
 
 	public ParameterInfo getParameterInfo(String identifier) {
-		for (Iterator iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
+			ParameterInfo pi= iter.next();
 			if (pi.getOldName().equals(identifier))
 				return pi;
 		}
@@ -539,11 +544,11 @@ public class ParameterObjectFactory {
 		int idx= fVariables.indexOf(selected);
 		Assert.isTrue(idx >= 0 && idx < fVariables.size() - 1);
 		int nextIdx= idx + 1;
-		ParameterInfo next= (ParameterInfo) fVariables.get(nextIdx);
+		ParameterInfo next= fVariables.get(nextIdx);
 		if (next.isAdded()) {
 			nextIdx++;
 			Assert.isTrue(nextIdx <= fVariables.size() - 1);
-			next= (ParameterInfo) fVariables.get(nextIdx);
+			next= fVariables.get(nextIdx);
 		}
 		fVariables.set(idx, next);
 		fVariables.set(nextIdx, selected);
@@ -553,11 +558,11 @@ public class ParameterObjectFactory {
 		int idx= fVariables.indexOf(selected);
 		Assert.isTrue(idx > 0);
 		int prevIdx= idx - 1;
-		ParameterInfo prev= (ParameterInfo) fVariables.get(prevIdx);
+		ParameterInfo prev= fVariables.get(prevIdx);
 		if (prev.isAdded()) {
 			prevIdx--;
 			Assert.isTrue(prevIdx >= 0);
-			prev= (ParameterInfo) fVariables.get(prevIdx);
+			prev= fVariables.get(prevIdx);
 		}
 		fVariables.set(idx, prev);
 		fVariables.set(prevIdx, selected);
@@ -583,7 +588,7 @@ public class ParameterObjectFactory {
 		fPackage= typeQualifier;
 	}
 
-	public void setVariables(List parameters) {
+	public void setVariables(List<ParameterInfo> parameters) {
 		fVariables= parameters;
 	}
 
@@ -595,8 +600,8 @@ public class ParameterObjectFactory {
 	 */
 	public void updateParameterPosition(ParameterInfo parameterObjectReference) {
 		fVariables.remove(parameterObjectReference);
-		for (ListIterator iterator= fVariables.listIterator(); iterator.hasNext();) {
-			ParameterInfo pi= (ParameterInfo) iterator.next();
+		for (ListIterator<ParameterInfo> iterator= fVariables.listIterator(); iterator.hasNext();) {
+			ParameterInfo pi= iterator.next();
 			if (isValidField(pi)) {
 				iterator.add(parameterObjectReference);
 				return;
@@ -609,8 +614,8 @@ public class ParameterObjectFactory {
 	}
 
 
-	public List/*<Change>*/createTopLevelParameterObject(IPackageFragmentRoot packageFragmentRoot, CreationListener listener) throws CoreException {
-		List changes= new ArrayList();
+	public List<ResourceChange> createTopLevelParameterObject(IPackageFragmentRoot packageFragmentRoot, CreationListener listener) throws CoreException {
+		List<ResourceChange> changes= new ArrayList<ResourceChange>();
 		IPackageFragment packageFragment= packageFragmentRoot.getPackageFragment(getPackage());
 		if (!packageFragment.exists()) {
 			changes.add(new CreatePackageChange(packageFragment));
@@ -665,7 +670,7 @@ public class ParameterObjectFactory {
 		return changes;
 	}
 
-	public List/*<Change>*/createTopLevelParameterObject(IPackageFragmentRoot packageFragmentRoot) throws CoreException {
+	public List<ResourceChange> createTopLevelParameterObject(IPackageFragmentRoot packageFragmentRoot) throws CoreException {
 		return createTopLevelParameterObject(packageFragmentRoot, null);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
index 737b705..ae97d7b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ import org.eclipse.jdt.core.dom.MarkerAnnotation;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
@@ -116,6 +117,7 @@ import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
 import org.eclipse.jdt.internal.corext.refactoring.changes.DynamicValidationRefactoringChange;
 import org.eclipse.jdt.internal.corext.refactoring.rename.MethodChecks;
 import org.eclipse.jdt.internal.corext.refactoring.reorg.SourceReferenceUtil;
+import org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.IncomingMemberVisibilityAdjustment;
 import org.eclipse.jdt.internal.corext.refactoring.structure.constraints.SuperTypeConstraintsSolver;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.CompilationUnitRange;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
@@ -134,6 +136,7 @@ import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
@@ -192,21 +195,25 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			fEnclosingMethod= enclosing;
 		}
 
+		@Override
 		public final void endVisit(final AnonymousClassDeclaration node) {
 			fAnonymousClassDeclaration= false;
 			super.endVisit(node);
 		}
 
+		@Override
 		public final void endVisit(final TypeDeclarationStatement node) {
 			fTypeDeclarationStatement= false;
 			super.endVisit(node);
 		}
 
+		@Override
 		public final boolean visit(final AnonymousClassDeclaration node) {
 			fAnonymousClassDeclaration= true;
 			return super.visit(node);
 		}
 
+		@Override
 		public final boolean visit(final SuperFieldAccess node) {
 			if (!fAnonymousClassDeclaration && !fTypeDeclarationStatement) {
 				final AST ast= node.getAST();
@@ -221,6 +228,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final SuperMethodInvocation node) {
 			if (!fAnonymousClassDeclaration && !fTypeDeclarationStatement) {
 				final IBinding superBinding= node.getName().resolveBinding();
@@ -241,11 +249,11 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 				final SimpleName simple= ast.newSimpleName(node.getName().getIdentifier());
 				invocation.setName(simple);
 				invocation.setExpression(expression);
-				final List arguments= (List) node.getStructuralProperty(SuperMethodInvocation.ARGUMENTS_PROPERTY);
+				final List<Expression> arguments= (List<Expression>) node.getStructuralProperty(SuperMethodInvocation.ARGUMENTS_PROPERTY);
 				if (arguments != null && arguments.size() > 0) {
 					final ListRewrite rewriter= fRewrite.getListRewrite(invocation, MethodInvocation.ARGUMENTS_PROPERTY);
 					ListRewrite superRewriter= fRewrite.getListRewrite(node, SuperMethodInvocation.ARGUMENTS_PROPERTY);
-					ASTNode copyTarget= superRewriter.createCopyTarget((ASTNode) arguments.get(0), (ASTNode) arguments.get(arguments.size() - 1));
+					ASTNode copyTarget= superRewriter.createCopyTarget(arguments.get(0), arguments.get(arguments.size() - 1));
 					rewriter.insertLast(copyTarget, null);
 				}
 				fRewrite.replace(node, invocation, null);
@@ -256,6 +264,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			return false;
 		}
 
+		@Override
 		public final boolean visit(final TypeDeclarationStatement node) {
 			fTypeDeclarationStatement= true;
 			return super.visit(node);
@@ -276,12 +285,12 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	private static final GroupCategorySet SET_PULL_UP= new GroupCategorySet(new GroupCategory("org.eclipse.jdt.internal.corext.pullUp", //$NON-NLS-1$
 			RefactoringCoreMessages.PullUpRefactoring_category_name, RefactoringCoreMessages.PullUpRefactoring_category_description));
 
-	private static void addMatchingMember(final Map mapping, final IMember key, final IMember matchingMember) {
-		Set matchingSet;
+	private static void addMatchingMember(final Map<IMember, Set<IMember>> mapping, final IMember key, final IMember matchingMember) {
+		Set<IMember> matchingSet;
 		if (mapping.containsKey(key)) {
-			matchingSet= (Set) mapping.get(key);
+			matchingSet= mapping.get(key);
 		} else {
-			matchingSet= new HashSet();
+			matchingSet= new HashSet<IMember>();
 			mapping.put(key, matchingSet);
 		}
 		Assert.isTrue(!matchingSet.contains(matchingMember));
@@ -299,25 +308,25 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		return body;
 	}
 
-	private static Set getEffectedSubTypes(final ITypeHierarchy hierarchy, final IType type) throws JavaModelException {
+	private static Set<IType> getAffectedSubTypes(final ITypeHierarchy hierarchy, final IType type) throws JavaModelException {
 		 IType[] types= null;
 		 final boolean isInterface= type.isInterface();
 		if (isInterface) {
-			 final Collection remove= new ArrayList();
-			 final List list= new ArrayList(Arrays.asList(hierarchy.getSubtypes(type)));
-			 for (final Iterator iterator= list.iterator(); iterator.hasNext();) {
-	            final IType element= (IType) iterator.next();
+			 final Collection<IType> remove= new ArrayList<IType>();
+			 final List<IType> list= new ArrayList<IType>(Arrays.asList(hierarchy.getSubtypes(type)));
+			 for (final Iterator<IType> iterator= list.iterator(); iterator.hasNext();) {
+	            final IType element= iterator.next();
 	            if (element.isInterface())
 	            	remove.add(element);
             }
 			 list.removeAll(remove);
-			 types= (IType[]) list.toArray(new IType[list.size()]);
+			 types= list.toArray(new IType[list.size()]);
 		 } else
 			 types= hierarchy.getSubclasses(type);
-		final Set result= new HashSet();
+		final Set<IType> result= new HashSet<IType>();
 		for (int index= 0; index < types.length; index++) {
 			if (!isInterface && JdtFlags.isAbstract(types[index]))
-				result.addAll(getEffectedSubTypes(hierarchy, types[index]));
+				result.addAll(getAffectedSubTypes(hierarchy, types[index]));
 			else
 				result.add(types[index]);
 		}
@@ -325,27 +334,27 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	}
 
 	private static IMember[] getMembers(final IMember[] members, final int type) {
-		final List list= Arrays.asList(JavaElementUtil.getElementsOfType(members, type));
-		return (IMember[]) list.toArray(new IMember[list.size()]);
+		final List<IJavaElement> list= Arrays.asList(JavaElementUtil.getElementsOfType(members, type));
+		return list.toArray(new IMember[list.size()]);
 	}
 
-	private static void mergeMaps(final Map result, final Map map) {
-		for (final Iterator iter= result.keySet().iterator(); iter.hasNext();) {
-			final IMember key= (IMember) iter.next();
+	private static void mergeMaps(final Map<IMember, Set<IMember>> result, final Map<IMember, Set<IMember>> map) {
+		for (final Iterator<IMember> iter= result.keySet().iterator(); iter.hasNext();) {
+			final IMember key= iter.next();
 			if (map.containsKey(key)) {
-				final Set resultSet= (Set) result.get(key);
-				final Set mapSet= (Set) map.get(key);
+				final Set<IMember> resultSet= result.get(key);
+				final Set<IMember> mapSet= map.get(key);
 				resultSet.addAll(mapSet);
 			}
 		}
 	}
 
-	private static void upgradeMap(final Map result, final Map map) {
-		for (final Iterator iter= map.keySet().iterator(); iter.hasNext();) {
-			final IMember key= (IMember) iter.next();
+	private static void upgradeMap(final Map<IMember, Set<IMember>> result, final Map<IMember, Set<IMember>> map) {
+		for (final Iterator<IMember> iter= map.keySet().iterator(); iter.hasNext();) {
+			final IMember key= iter.next();
 			if (!result.containsKey(key)) {
-				final Set mapSet= (Set) map.get(key);
-				final Set resultSet= new HashSet(mapSet);
+				final Set<IMember> mapSet= map.get(key);
+				final Set<IMember> resultSet= new HashSet<IMember>(mapSet);
 				result.put(key, resultSet);
 			}
 		}
@@ -361,10 +370,10 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	private ITypeHierarchy fCachedDestinationTypeHierarchy;
 
 	/** The cached set of skipped supertypes */
-	private Set fCachedSkippedSuperTypes;
+	private Set<IType> fCachedSkippedSuperTypes;
 
 	/** The map of compilation units to compilation unit rewrites */
-	protected Map fCompilationUnitRewrites;
+	protected Map<ICompilationUnit, CompilationUnitRewrite> fCompilationUnitRewrites;
 
 	/** Should method stubs be generated in subtypes? */
 	protected boolean fCreateMethodStubs= true;
@@ -429,7 +438,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private void addAllRequiredPullableMembers(final List queue, final IMember member, final IProgressMonitor monitor) throws JavaModelException {
+	private void addAllRequiredPullableMembers(final List<IMember> queue, final IMember member, final IProgressMonitor monitor) throws JavaModelException {
 		Assert.isNotNull(queue);
 		Assert.isNotNull(member);
 		Assert.isNotNull(monitor);
@@ -488,7 +497,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private void addMethodStubForAbstractMethod(final IMethod sourceMethod, final CompilationUnit declaringCuNode, final AbstractTypeDeclaration typeToCreateStubIn, final ICompilationUnit newCu, final CompilationUnitRewrite rewriter, final Map adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws CoreException {
+	private void addMethodStubForAbstractMethod(final IMethod sourceMethod, final CompilationUnit declaringCuNode, final AbstractTypeDeclaration typeToCreateStubIn, final ICompilationUnit newCu, final CompilationUnitRewrite rewriter, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws CoreException {
 		final MethodDeclaration methodToCreateStubFor= ASTNodeSearchUtil.getMethodDeclarationNode(sourceMethod, declaringCuNode);
 		final AST ast= rewriter.getRoot().getAST();
 		final MethodDeclaration newMethod= ast.newMethodDeclaration();
@@ -503,17 +512,17 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		copyThrownExceptions(methodToCreateStubFor, newMethod);
 		newMethod.setJavadoc(createJavadocForStub(typeToCreateStubIn.getName().getIdentifier(), methodToCreateStubFor, newMethod, newCu, rewriter.getASTRewrite()));
 		ImportRewriteContext context= new ContextSensitiveImportRewriteContext(typeToCreateStubIn, rewriter.getImportRewrite());
-		ImportRewriteUtil.addImports(rewriter, context, newMethod, new HashMap(), new HashMap(), false);
+		ImportRewriteUtil.addImports(rewriter, context, newMethod, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 		rewriter.getASTRewrite().getListRewrite(typeToCreateStubIn, typeToCreateStubIn.getBodyDeclarationsProperty()).insertAt(newMethod, ASTNodes.getInsertionIndex(newMethod, typeToCreateStubIn.bodyDeclarations()), rewriter.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_method_stub, SET_PULL_UP));
 	}
 
-	private void addNecessaryMethodStubs(final List effected, final CompilationUnit root, final CompilationUnitRewrite unitRewriter, final Map adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws CoreException {
+	private void addNecessaryMethodStubs(final List<IType> affected, final CompilationUnit root, final CompilationUnitRewrite unitRewriter, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws CoreException {
 		final IType declaringType= getDeclaringType();
 		final IMethod[] methods= getAbstractMethods();
 		try {
-			monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, effected.size());
-			for (final Iterator iter= effected.iterator(); iter.hasNext();) {
-				final IType type= (IType) iter.next();
+			monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, affected.size());
+			for (final Iterator<IType> iter= affected.iterator(); iter.hasNext();) {
+				final IType type= iter.next();
 				if (type.equals(declaringType))
 					continue;
 				final AbstractTypeDeclaration declaration= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(type, unitRewriter.getRoot());
@@ -537,6 +546,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
+	@Override
 	protected boolean canBeAccessedFrom(final IMember member, final IType target, final ITypeHierarchy hierarchy) throws JavaModelException {
 		if (super.canBeAccessedFrom(member, target, hierarchy)) {
 			if (target.isInterface())
@@ -579,8 +589,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking_referenced_elements, 2);
 		final RefactoringStatus result= new RefactoringStatus();
 
-		final List pulledUpList= Arrays.asList(fMembersToMove);
-		final List deletedList= Arrays.asList(getMembersToDelete(new SubProgressMonitor(monitor, 1)));
+		final List<IMember> pulledUpList= Arrays.asList(fMembersToMove);
+		final List<IMember> deletedList= Arrays.asList(getMembersToDelete(new SubProgressMonitor(monitor, 1)));
 		final IField[] accessedFields= ReferenceFinderUtil.getFieldsReferencedIn(fMembersToMove, fOwner, new SubProgressMonitor(monitor, 1));
 
 		final IType destination= getDestinationType();
@@ -606,9 +616,9 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking_referenced_elements, 2);
 		final RefactoringStatus result= new RefactoringStatus();
 
-		final List pulledUpList= Arrays.asList(fMembersToMove);
-		final List declaredAbstractList= Arrays.asList(fAbstractMethods);
-		final List deletedList= Arrays.asList(getMembersToDelete(new SubProgressMonitor(monitor, 1)));
+		final List<IMember> pulledUpList= Arrays.asList(fMembersToMove);
+		final List<IMethod> declaredAbstractList= Arrays.asList(fAbstractMethods);
+		final List<IMember> deletedList= Arrays.asList(getMembersToDelete(new SubProgressMonitor(monitor, 1)));
 		final IMethod[] accessedMethods= ReferenceFinderUtil.getMethodsReferencedIn(fMembersToMove, fOwner, new SubProgressMonitor(monitor, 1));
 
 		final IType destination= getDestinationType();
@@ -634,7 +644,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		final RefactoringStatus result= new RefactoringStatus();
 		final IType[] accessedTypes= getTypesReferencedInMovedMembers(monitor);
 		final IType destination= getDestinationType();
-		final List pulledUpList= Arrays.asList(fMembersToMove);
+		final List<IMember> pulledUpList= Arrays.asList(fMembersToMove);
 		for (int index= 0; index < accessedTypes.length; index++) {
 			final IType type= accessedTypes[index];
 			if (!type.exists())
@@ -663,12 +673,12 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		return result;
 	}
 
-	private void checkAccessModifiers(final RefactoringStatus result, final Set notDeletedMembersInSubtypes) throws JavaModelException {
+	private void checkAccessModifiers(final RefactoringStatus result, final Set<IMember> notDeletedMembersInSubtypes) throws JavaModelException {
 		if (fDestinationType.isInterface())
 			return;
-		final List toDeclareAbstract= Arrays.asList(fAbstractMethods);
-		for (final Iterator iter= notDeletedMembersInSubtypes.iterator(); iter.hasNext();) {
-			final IMember member= (IMember) iter.next();
+		final List<IMethod> toDeclareAbstract= Arrays.asList(fAbstractMethods);
+		for (final Iterator<IMember> iter= notDeletedMembersInSubtypes.iterator(); iter.hasNext();) {
+			final IMember member= iter.next();
 			if (member.getElementType() == IJavaElement.METHOD && !toDeclareAbstract.contains(member)) {
 				final IMethod method= ((IMethod) member);
 				if (method.getDeclaringType().getPackageFragment().equals(fDestinationType.getPackageFragment())) {
@@ -689,6 +699,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		return result;
 	}
 
+	@Override
 	protected RefactoringStatus checkDeclaringType(final IProgressMonitor monitor) throws JavaModelException {
 		final RefactoringStatus status= super.checkDeclaringType(monitor);
 		if (getDeclaringType().getFullyQualifiedName('.').equals("java.lang.Object")) //$NON-NLS-1$
@@ -698,14 +709,14 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	}
 
 	private void checkFieldTypes(final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
-		final Map mapping= getMatchingMembers(getDestinationTypeHierarchy(monitor), getDestinationType(), true);
+		final Map<IMember, Set<IMember>> mapping= getMatchingMembers(getDestinationTypeHierarchy(monitor), getDestinationType(), true);
 		for (int i= 0; i < fMembersToMove.length; i++) {
 			if (fMembersToMove[i].getElementType() != IJavaElement.FIELD)
 				continue;
 			final IField field= (IField) fMembersToMove[i];
 			final String type= Signature.toString(field.getTypeSignature());
 			Assert.isTrue(mapping.containsKey(field));
-			for (final Iterator iter= ((Set) mapping.get(field)).iterator(); iter.hasNext();) {
+			for (final Iterator<IMember> iter= mapping.get(field).iterator(); iter.hasNext();) {
 				final IField matchingField= (IField) iter.next();
 				if (field.equals(matchingField))
 					continue;
@@ -722,6 +733,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(final IProgressMonitor monitor, final CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, 12);
@@ -748,7 +760,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 				monitor.worked(1);
 			if (result.hasFatalError())
 				return result;
-			fCompilationUnitRewrites= new HashMap(3);
+			fCompilationUnitRewrites= new HashMap<ICompilationUnit, CompilationUnitRewrite>(3);
 			result.merge(checkProjectCompliance(getCompilationUnitRewrite(fCompilationUnitRewrites, getDeclaringType().getCompilationUnit()), getDestinationType(), fMembersToMove));
 			fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), result);
 
@@ -864,8 +876,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	private RefactoringStatus checkIfSkippingOverElements(final IProgressMonitor monitor) throws JavaModelException {
 		monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, 1);
 		try {
-			final Set skippedTypes= getSkippedSuperTypes(new SubProgressMonitor(monitor, 1));
-			final IType[] skipped= (IType[]) skippedTypes.toArray(new IType[skippedTypes.size()]);
+			final Set<IType> skippedTypes= getSkippedSuperTypes(new SubProgressMonitor(monitor, 1));
+			final IType[] skipped= skippedTypes.toArray(new IType[skippedTypes.size()]);
 			final RefactoringStatus result= new RefactoringStatus();
 			for (int i= 0; i < fMembersToMove.length; i++) {
 				final IMember element= fMembersToMove[i];
@@ -892,6 +904,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, 1);
@@ -908,24 +921,24 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private void checkMembersInDestinationType(final RefactoringStatus status, final Set set) throws JavaModelException {
+	private void checkMembersInDestinationType(final RefactoringStatus status, final Set<IMember> set) throws JavaModelException {
 		final IMember[] destinationMembers= getCreatedDestinationMembers();
-		final List list= new ArrayList(destinationMembers.length);
+		final List<IMember> list= new ArrayList<IMember>(destinationMembers.length);
 		list.addAll(Arrays.asList(destinationMembers));
 		list.addAll(set);
 		list.removeAll(Arrays.asList(fDeletedMethods));
-		final IMember[] members= (IMember[]) list.toArray(new IMember[list.size()]);
+		final IMember[] members= list.toArray(new IMember[list.size()]);
 		status.merge(MemberCheckUtil.checkMembersInDestinationType(members, getDestinationType()));
 	}
 
 	private RefactoringStatus checkMembersInTypeAndAllSubtypes(final IProgressMonitor monitor) throws JavaModelException {
 		final RefactoringStatus result= new RefactoringStatus();
 		monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, 3);
-		final Set notDeletedMembers= getNotDeletedMembers(new SubProgressMonitor(monitor, 1));
-		final Set notDeletedMembersInTargetType= new HashSet();
-		final Set notDeletedMembersInSubtypes= new HashSet();
-		for (final Iterator iter= notDeletedMembers.iterator(); iter.hasNext();) {
-			final IMember member= (IMember) iter.next();
+		final Set<IMember> notDeletedMembers= getNotDeletedMembers(new SubProgressMonitor(monitor, 1));
+		final Set<IMember> notDeletedMembersInTargetType= new HashSet<IMember>();
+		final Set<IMember> notDeletedMembersInSubtypes= new HashSet<IMember>();
+		for (final Iterator<IMember> iter= notDeletedMembers.iterator(); iter.hasNext();) {
+			final IMember member= iter.next();
 			if (getDestinationType().equals(member.getDeclaringType()))
 				notDeletedMembersInTargetType.add(member);
 			else
@@ -939,18 +952,18 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		return result;
 	}
 
-	private void checkMethodReturnTypes(final IProgressMonitor monitor, final RefactoringStatus status, final Set notDeletedMembersInSubtypes) throws JavaModelException {
-		final Map mapping= getMatchingMembers(getDestinationTypeHierarchy(monitor), getDestinationType(), true);
+	private void checkMethodReturnTypes(final IProgressMonitor monitor, final RefactoringStatus status, final Set<IMember> notDeletedMembersInSubtypes) throws JavaModelException {
+		final Map<IMember, Set<IMember>> mapping= getMatchingMembers(getDestinationTypeHierarchy(monitor), getDestinationType(), true);
 		final IMember[] members= getCreatedDestinationMembers();
 		for (int i= 0; i < members.length; i++) {
 			if (members[i].getElementType() != IJavaElement.METHOD)
 				continue;
 			final IMethod method= (IMethod) members[i];
 			if (mapping.containsKey(method)) {
-				final Set set= (Set) mapping.get(method);
+				final Set<IMember> set= mapping.get(method);
 				if (set != null) {
 					final String returnType= Signature.toString(Signature.getReturnType(method.getSignature()).toString());
-					for (final Iterator iter= set.iterator(); iter.hasNext();) {
+					for (final Iterator<IMember> iter= set.iterator(); iter.hasNext();) {
 						final IMethod matchingMethod= (IMethod) iter.next();
 						if (method.equals(matchingMethod))
 							continue;
@@ -968,6 +981,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
+	@Override
 	protected void clearCaches() {
 		super.clearCaches();
 		fCachedMembersReferences.clear();
@@ -999,7 +1013,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private void createAbstractMethod(final IMethod sourceMethod, final CompilationUnitRewrite sourceRewriter, final CompilationUnit declaringCuNode, final AbstractTypeDeclaration destination, final TypeVariableMaplet[] mapping, final CompilationUnitRewrite targetRewrite, final Map adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
+	private void createAbstractMethod(final IMethod sourceMethod, final CompilationUnitRewrite sourceRewriter, final CompilationUnit declaringCuNode, final AbstractTypeDeclaration destination, final TypeVariableMaplet[] mapping, final CompilationUnitRewrite targetRewrite, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
 		final MethodDeclaration oldMethod= ASTNodeSearchUtil.getMethodDeclarationNode(sourceMethod, declaringCuNode);
 		if (JavaModelUtil.is50OrHigher(sourceMethod.getJavaProject()) && (fSettings.overrideAnnotation || JavaCore.ERROR.equals(sourceMethod.getJavaProject().getOption(JavaCore.COMPILER_PB_MISSING_OVERRIDE_ANNOTATION, true)))) {
 			final MarkerAnnotation annotation= sourceRewriter.getAST().newMarkerAnnotation();
@@ -1020,16 +1034,17 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		copyParameters(targetRewrite.getASTRewrite(), getDeclaringType().getCompilationUnit(), oldMethod, newMethod, mapping);
 		copyThrownExceptions(oldMethod, newMethod);
 		ImportRewriteContext context= new ContextSensitiveImportRewriteContext(destination, targetRewrite.getImportRewrite());
-		ImportRewriteUtil.addImports(targetRewrite, context, newMethod, new HashMap(), new HashMap(), false);
+		ImportRewriteUtil.addImports(targetRewrite, context, newMethod, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 		targetRewrite.getASTRewrite().getListRewrite(destination, destination.getBodyDeclarationsProperty()).insertAt(newMethod, ASTNodes.getInsertionIndex(newMethod, destination.bodyDeclarations()), targetRewrite.createCategorizedGroupDescription(RefactoringCoreMessages.PullUpRefactoring_add_abstract_method, SET_PULL_UP));
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Change createChange(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		try {
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			final IType declaring= getDeclaringType();
 			final IJavaProject javaProject= declaring.getJavaProject();
@@ -1078,27 +1093,27 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			final ICompilationUnit target= destination.getCompilationUnit();
 			final CompilationUnitRewrite sourceRewriter= getCompilationUnitRewrite(fCompilationUnitRewrites, source);
 			final CompilationUnitRewrite targetRewriter= getCompilationUnitRewrite(fCompilationUnitRewrites, target);
-			final Map deleteMap= createMembersToDeleteMap(new SubProgressMonitor(monitor, 1));
-			final Map effectedMap= createEffectedTypesMap(new SubProgressMonitor(monitor, 1));
+			final Map<ICompilationUnit, ArrayList<IMember>> deleteMap= createMembersToDeleteMap(new SubProgressMonitor(monitor, 1));
+			final Map<ICompilationUnit, ArrayList<IType>> affectedMap= createAffectedTypesMap(new SubProgressMonitor(monitor, 1));
 			final ICompilationUnit[] units= getAffectedCompilationUnits(new SubProgressMonitor(monitor, 1));
 
-			final Map adjustments= new HashMap();
+			final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments= new HashMap<IMember, IncomingMemberVisibilityAdjustment>();
 			MemberVisibilityAdjustor adjustor= null;
 			final IProgressMonitor sub= new SubProgressMonitor(monitor, 1);
 			try {
 				sub.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, units.length * 11);
 				for (int index= 0; index < units.length; index++) {
 					ICompilationUnit unit= units[index];
-					if (!(source.equals(unit) || target.equals(unit) || deleteMap.containsKey(unit) || effectedMap.containsKey(unit))) {
+					if (!(source.equals(unit) || target.equals(unit) || deleteMap.containsKey(unit) || affectedMap.containsKey(unit))) {
 						sub.worked(10);
 						continue;
 					}
 					CompilationUnitRewrite rewrite= getCompilationUnitRewrite(fCompilationUnitRewrites, unit);
 					if (deleteMap.containsKey(unit)) {
-						LinkedList list= new LinkedList((List) deleteMap.get(unit));
+						LinkedList<IMember> list= new LinkedList<IMember>(deleteMap.get(unit));
 						if (destination.isInterface()) {
-							for (final Iterator iterator= list.iterator(); iterator.hasNext();) {
-								final IMember member= (IMember) iterator.next();
+							for (final Iterator<IMember> iterator= list.iterator(); iterator.hasNext();) {
+								final IMember member= iterator.next();
 								if (member instanceof IMethod)
 									iterator.remove();
 							}
@@ -1141,7 +1156,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 										flags|= Flags.AccFinal;
 									final FieldDeclaration newField= createNewFieldDeclarationNode(rewriter, root, (IField) member, oldField, mapping, new SubProgressMonitor(subsub, 1), status, flags);
 									rewriter.getListRewrite(declaration, declaration.getBodyDeclarationsProperty()).insertAt(newField, ASTNodes.getInsertionIndex(newField, declaration.bodyDeclarations()), rewrite.createCategorizedGroupDescription(RefactoringCoreMessages.HierarchyRefactoring_add_member, SET_PULL_UP));
-									ImportRewriteUtil.addImports(rewrite, context, oldField.getParent(), new HashMap(), new HashMap(), false);
+									ImportRewriteUtil.addImports(rewrite, context, oldField.getParent(), new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 								}
 							} else if (member instanceof IMethod) {
 								final MethodDeclaration oldMethod= ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) member, root);
@@ -1150,14 +1165,14 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 										status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_moving_static_method_to_interface, new String[] { JavaElementLabels.getTextLabel(member, JavaElementLabels.ALL_FULLY_QUALIFIED)}), JavaStatusContext.create(member)));
 									final MethodDeclaration newMethod= createNewMethodDeclarationNode(sourceRewriter, rewrite, ((IMethod) member), oldMethod, mapping, adjustments, new SubProgressMonitor(subsub, 1), status);
 									rewriter.getListRewrite(declaration, declaration.getBodyDeclarationsProperty()).insertAt(newMethod, ASTNodes.getInsertionIndex(newMethod, declaration.bodyDeclarations()), rewrite.createCategorizedGroupDescription(RefactoringCoreMessages.HierarchyRefactoring_add_member, SET_PULL_UP));
-									ImportRewriteUtil.addImports(rewrite, context, oldMethod, new HashMap(), new HashMap(), false);
+									ImportRewriteUtil.addImports(rewrite, context, oldMethod, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 								}
 							} else if (member instanceof IType) {
 								final AbstractTypeDeclaration oldType= ASTNodeSearchUtil.getAbstractTypeDeclarationNode((IType) member, root);
 								if (oldType != null) {
 									final BodyDeclaration newType= createNewTypeDeclarationNode(((IType) member), oldType, root, mapping, rewriter);
 									rewriter.getListRewrite(declaration, declaration.getBodyDeclarationsProperty()).insertAt(newType, ASTNodes.getInsertionIndex(newType, declaration.bodyDeclarations()), rewrite.createCategorizedGroupDescription(RefactoringCoreMessages.HierarchyRefactoring_add_member, SET_PULL_UP));
-									ImportRewriteUtil.addImports(rewrite, context, oldType, new HashMap(), new HashMap(), false);
+									ImportRewriteUtil.addImports(rewrite, context, oldType, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 								}
 							} else
 								Assert.isTrue(false);
@@ -1189,8 +1204,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 						}
 					} else
 						sub.worked(2);
-					if (effectedMap.containsKey(unit))
-						addNecessaryMethodStubs((List) effectedMap.get(unit), root, rewrite, adjustments, new SubProgressMonitor(sub, 2), status);
+					if (affectedMap.containsKey(unit))
+						addNecessaryMethodStubs(affectedMap.get(unit), root, rewrite, adjustments, new SubProgressMonitor(sub, 2), status);
 					if (sub.isCanceled())
 						throw new OperationCanceledException();
 				}
@@ -1201,10 +1216,10 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 				adjustor.rewriteVisibility(new SubProgressMonitor(monitor, 1));
 			final TextEditBasedChangeManager manager= new TextEditBasedChangeManager();
 			if (fReplace) {
-				final Set set= fCompilationUnitRewrites.keySet();
-				for (final Iterator iterator= set.iterator(); iterator.hasNext();) {
-					ICompilationUnit unit= (ICompilationUnit) iterator.next();
-					CompilationUnitRewrite rewrite= (CompilationUnitRewrite) fCompilationUnitRewrites.get(unit);
+				final Set<ICompilationUnit> set= fCompilationUnitRewrites.keySet();
+				for (final Iterator<ICompilationUnit> iterator= set.iterator(); iterator.hasNext();) {
+					ICompilationUnit unit= iterator.next();
+					CompilationUnitRewrite rewrite= fCompilationUnitRewrites.get(unit);
 					if (rewrite != null) {
 						final CompilationUnitChange change= rewrite.createChange(false);
 						if (change != null)
@@ -1213,12 +1228,12 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 				}
 				TextEdit edit= null;
 				TextEditBasedChange change= null;
-				final Map workingcopies= new HashMap();
+				final Map<ICompilationUnit, ICompilationUnit> workingcopies= new HashMap<ICompilationUnit, ICompilationUnit>();
 				final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 1);
 				try {
 					subMonitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, set.size());
-					for (final Iterator iterator= set.iterator(); iterator.hasNext();) {
-						ICompilationUnit unit= (ICompilationUnit) iterator.next();
+					for (final Iterator<ICompilationUnit> iterator= set.iterator(); iterator.hasNext();) {
+						ICompilationUnit unit= iterator.next();
 						change= manager.get(unit);
 						if (change instanceof TextChange) {
 							edit= ((TextChange) change).getEdit();
@@ -1229,9 +1244,9 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 							}
 						}
 					}
-					final ICompilationUnit current= (ICompilationUnit) workingcopies.get(sourceRewriter.getCu());
+					final ICompilationUnit current= workingcopies.get(sourceRewriter.getCu());
 					if (current != null)
-						rewriteTypeOccurrences(manager, sourceRewriter, current, new HashSet(), status, new SubProgressMonitor(monitor, 16));
+						rewriteTypeOccurrences(manager, sourceRewriter, current, new HashSet<String>(), status, new SubProgressMonitor(monitor, 16));
 				} finally {
 					subMonitor.done();
 					ICompilationUnit[] cus= manager.getAllCompilationUnits();
@@ -1240,7 +1255,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 						CompilationUnitChange current= (CompilationUnitChange) manager.get(unit);
 						if (change != null && current.getEdit() == null)
 							manager.remove(unit);
-						CompilationUnitRewrite rewrite= (CompilationUnitRewrite) fCompilationUnitRewrites.get(unit);
+						CompilationUnitRewrite rewrite= fCompilationUnitRewrites.get(unit);
 						if (rewrite != null) {
 							rewrite.clearGroupDescriptions();
 						}
@@ -1255,17 +1270,17 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private Map createEffectedTypesMap(final IProgressMonitor monitor) throws JavaModelException {
+	private Map<ICompilationUnit, ArrayList<IType>> createAffectedTypesMap(final IProgressMonitor monitor) throws JavaModelException {
 		if (!(fCreateMethodStubs && getAbstractMethods().length > 0))
-			return new HashMap(0);
-		final Set effected= getEffectedSubTypes(getDestinationTypeHierarchy(monitor), getDestinationType());
-		final Map result= new HashMap();
-		for (final Iterator iterator= effected.iterator(); iterator.hasNext();) {
-			final IType type= (IType) iterator.next();
+			return new HashMap<ICompilationUnit, ArrayList<IType>>(0);
+		final Set<IType> affected= getAffectedSubTypes(getDestinationTypeHierarchy(monitor), getDestinationType());
+		final Map<ICompilationUnit, ArrayList<IType>> result= new HashMap<ICompilationUnit, ArrayList<IType>>();
+		for (final Iterator<IType> iterator= affected.iterator(); iterator.hasNext();) {
+			final IType type= iterator.next();
 			final ICompilationUnit unit= type.getCompilationUnit();
 			if (!result.containsKey(unit))
-				result.put(unit, new ArrayList(1));
-			((List) result.get(unit)).add(type);
+				result.put(unit, new ArrayList<IType>(1));
+			result.get(unit).add(type);
 		}
 		return result;
 	}
@@ -1287,20 +1302,20 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		return null;
 	}
 
-	private Map createMembersToDeleteMap(final IProgressMonitor monitor) throws JavaModelException {
+	private Map<ICompilationUnit, ArrayList<IMember>> createMembersToDeleteMap(final IProgressMonitor monitor) throws JavaModelException {
 		final IMember[] membersToDelete= getMembersToDelete(monitor);
-		final Map result= new HashMap();
+		final Map<ICompilationUnit, ArrayList<IMember>> result= new HashMap<ICompilationUnit, ArrayList<IMember>>();
 		for (int i= 0; i < membersToDelete.length; i++) {
 			final IMember member= membersToDelete[i];
 			final ICompilationUnit cu= member.getCompilationUnit();
 			if (!result.containsKey(cu))
-				result.put(cu, new ArrayList(1));
-			((List) result.get(cu)).add(member);
+				result.put(cu, new ArrayList<IMember>(1));
+			result.get(cu).add(member);
 		}
 		return result;
 	}
 
-	private MethodDeclaration createNewMethodDeclarationNode(final CompilationUnitRewrite sourceRewrite, final CompilationUnitRewrite targetRewrite, final IMethod sourceMethod, final MethodDeclaration oldMethod, final TypeVariableMaplet[] mapping, final Map adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
+	private MethodDeclaration createNewMethodDeclarationNode(final CompilationUnitRewrite sourceRewrite, final CompilationUnitRewrite targetRewrite, final IMethod sourceMethod, final MethodDeclaration oldMethod, final TypeVariableMaplet[] mapping, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
 		final ASTRewrite rewrite= targetRewrite.getASTRewrite();
 		final AST ast= rewrite.getAST();
 		final MethodDeclaration newMethod= ast.newMethodDeclaration();
@@ -1384,7 +1399,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	private IMethod[] getAbstractMethods() throws JavaModelException {
 		final IMethod[] toDeclareAbstract= fAbstractMethods;
 		final IMethod[] abstractPulledUp= getAbstractMethodsToPullUp();
-		final Set result= new LinkedHashSet(toDeclareAbstract.length + abstractPulledUp.length + fMembersToMove.length);
+		final Set<IMember> result= new LinkedHashSet<IMember>(toDeclareAbstract.length + abstractPulledUp.length + fMembersToMove.length);
 		if (fDestinationType.isInterface()) {
 			for (int i= 0; i < fMembersToMove.length; i++) {
 				if (fMembersToMove[i].getElementType() == IJavaElement.METHOD) {
@@ -1394,32 +1409,32 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 		result.addAll(Arrays.asList(toDeclareAbstract));
 		result.addAll(Arrays.asList(abstractPulledUp));
-		return (IMethod[]) result.toArray(new IMethod[result.size()]);
+		return result.toArray(new IMethod[result.size()]);
 	}
 
 	private IMethod[] getAbstractMethodsToPullUp() throws JavaModelException {
-		final List result= new ArrayList(fMembersToMove.length);
+		final List<IMember> result= new ArrayList<IMember>(fMembersToMove.length);
 		for (int i= 0; i < fMembersToMove.length; i++) {
 			final IMember member= fMembersToMove[i];
 			if (member instanceof IMethod && JdtFlags.isAbstract(member))
 				result.add(member);
 		}
-		return (IMethod[]) result.toArray(new IMethod[result.size()]);
+		return result.toArray(new IMethod[result.size()]);
 	}
 
 	public IMember[] getAdditionalRequiredMembersToPullUp(final IProgressMonitor monitor) throws JavaModelException {
 		final IMember[] members= getCreatedDestinationMembers();
-		List queue;
+		List<IMember> queue;
 		try {
 			monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_calculating_required, getDeclaringType().getChildren().length);// maximum
-			queue= new ArrayList(members.length);
+			queue= new ArrayList<IMember>(members.length);
 			queue.addAll(Arrays.asList(members));
 			if (queue.isEmpty())
 				return new IMember[0];
 			int i= 0;
 			IMember current;
 			do {
-				current= (IMember) queue.get(i);
+				current= queue.get(i);
 				addAllRequiredPullableMembers(queue, current, new SubProgressMonitor(monitor, 1));
 				i++;
 				if (queue.size() == i)
@@ -1429,25 +1444,25 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		} finally {
 			monitor.done();
 		}
-		return (IMember[]) queue.toArray(new IMember[queue.size()]);
+		return queue.toArray(new IMember[queue.size()]);
 	}
 
 	private ICompilationUnit[] getAffectedCompilationUnits(final IProgressMonitor monitor) throws JavaModelException {
 		final IType[] allSubtypes= getDestinationTypeHierarchy(monitor).getAllSubtypes(getDestinationType());
-		final Set result= new HashSet(allSubtypes.length);
+		final Set<ICompilationUnit> result= new HashSet<ICompilationUnit>(allSubtypes.length);
 		for (int i= 0; i < allSubtypes.length; i++) {
 			ICompilationUnit cu= allSubtypes[i].getCompilationUnit();
 			if (cu != null)
 				result.add(cu);
 		}
 		result.add(getDestinationType().getCompilationUnit());
-		return (ICompilationUnit[]) result.toArray(new ICompilationUnit[result.size()]);
+		return result.toArray(new ICompilationUnit[result.size()]);
 	}
 
 	public IType[] getCandidateTypes(final RefactoringStatus status, final IProgressMonitor monitor) throws JavaModelException {
 		final IType declaring= getDeclaringType();
 		final IType[] superTypes= declaring.newSupertypeHierarchy(fOwner, monitor).getAllSupertypes(declaring);
-		final List list= new ArrayList(superTypes.length);
+		final List<IType> list= new ArrayList<IType>(superTypes.length);
 		int binary= 0;
 		for (int index= 0; index < superTypes.length; index++) {
 			final IType type= superTypes[index];
@@ -1465,13 +1480,13 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			status.addFatalError(RefactoringCoreMessages.PullUPRefactoring_no_all_binary);
 
 		Collections.reverse(list);
-		return (IType[]) list.toArray(new IType[list.size()]);
+		return list.toArray(new IType[list.size()]);
 	}
 
-	protected CompilationUnitRewrite getCompilationUnitRewrite(final Map rewrites, final ICompilationUnit unit) {
+	protected CompilationUnitRewrite getCompilationUnitRewrite(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final ICompilationUnit unit) {
 		Assert.isNotNull(rewrites);
 		Assert.isNotNull(unit);
-		CompilationUnitRewrite rewrite= (CompilationUnitRewrite) rewrites.get(unit);
+		CompilationUnitRewrite rewrite= rewrites.get(unit);
 		if (rewrite == null) {
 			rewrite= new CompilationUnitRewrite(fOwner, unit);
 			rewrites.put(unit, rewrite);
@@ -1480,10 +1495,10 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	}
 
 	private IMember[] getCreatedDestinationMembers() {
-		final List result= new ArrayList(fMembersToMove.length + fAbstractMethods.length);
+		final List<IMember> result= new ArrayList<IMember>(fMembersToMove.length + fAbstractMethods.length);
 		result.addAll(Arrays.asList(fMembersToMove));
 		result.addAll(Arrays.asList(fAbstractMethods));
-		return (IMember[]) result.toArray(new IMember[result.size()]);
+		return result.toArray(new IMember[result.size()]);
 	}
 
 	public boolean getCreateMethodStubs() {
@@ -1519,6 +1534,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object[] getElements() {
 		return fMembersToMove;
 	}
@@ -1526,32 +1542,33 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getIdentifier() {
 		return IDENTIFIER;
 	}
 
 	public IMember[] getMatchingElements(final IProgressMonitor monitor, final boolean includeAbstract) throws JavaModelException {
 		try {
-			final Set result= new HashSet();
+			final Set<IMember> result= new HashSet<IMember>();
 			final IType destination= getDestinationType();
-			final Map matching= getMatchingMembers(getDestinationTypeHierarchy(monitor), getDestinationType(), includeAbstract);
-			for (final Iterator iterator= matching.keySet().iterator(); iterator.hasNext();) {
-				final IMember key= (IMember) iterator.next();
+			final Map<IMember, Set<IMember>> matching= getMatchingMembers(getDestinationTypeHierarchy(monitor), getDestinationType(), includeAbstract);
+			for (final Iterator<IMember> iterator= matching.keySet().iterator(); iterator.hasNext();) {
+				final IMember key= iterator.next();
 				Assert.isTrue(!key.getDeclaringType().equals(destination));
-				result.addAll((Set) matching.get(key));
+				result.addAll(matching.get(key));
 			}
-			return (IMember[]) result.toArray(new IMember[result.size()]);
+			return result.toArray(new IMember[result.size()]);
 		} finally {
 			monitor.done();
 		}
 	}
 
-	private Map getMatchingMembers(final ITypeHierarchy hierarchy, final IType type, final boolean includeAbstract) throws JavaModelException {
-		final Map result= new HashMap();
+	private Map<IMember, Set<IMember>> getMatchingMembers(final ITypeHierarchy hierarchy, final IType type, final boolean includeAbstract) throws JavaModelException {
+		final Map<IMember, Set<IMember>> result= new HashMap<IMember, Set<IMember>>();
 		result.putAll(getMatchingMembersMapping(type));
 		final IType[] subTypes= hierarchy.getAllSubtypes(type);
 		for (int i= 0; i < subTypes.length; i++) {
-			final Map map= getMatchingMembersMapping(subTypes[i]);
+			final Map<IMember, Set<IMember>> map= getMatchingMembersMapping(subTypes[i]);
 			mergeMaps(result, map);
 			upgradeMap(result, map);
 		}
@@ -1565,8 +1582,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		return result;
 	}
 
-	private Map getMatchingMembersMapping(final IType initial) throws JavaModelException {
-		final Map result= new HashMap();
+	private Map<IMember, Set<IMember>> getMatchingMembersMapping(final IType initial) throws JavaModelException {
+		final Map<IMember, Set<IMember>> result= new HashMap<IMember, Set<IMember>>();
 		final IMember[] members= getCreatedDestinationMembers();
 		for (int i= 0; i < members.length; i++) {
 			final IMember member= members[i];
@@ -1603,7 +1620,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private int getModifiersWithUpdatedVisibility(final IMember member, final int modifiers, final Map adjustments, final IProgressMonitor monitor, final boolean considerReferences, final RefactoringStatus status) throws JavaModelException {
+	private int getModifiersWithUpdatedVisibility(final IMember member, final int modifiers, final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, final IProgressMonitor monitor, final boolean considerReferences, final RefactoringStatus status) throws JavaModelException {
 		if (needsVisibilityAdjustment(member, considerReferences, monitor, status)) {
 			final MemberVisibilityAdjustor.OutgoingMemberVisibilityAdjustment adjustment= new MemberVisibilityAdjustor.OutgoingMemberVisibilityAdjustment(member, Modifier.ModifierKeyword.PROTECTED_KEYWORD, RefactoringStatus.createWarningStatus(Messages.format(MemberVisibilityAdjustor.getMessage(member), new String[] { MemberVisibilityAdjustor.getLabel(member), MemberVisibilityAdjustor.getLabel(Modifier.ModifierKeyword.PROTECTED_KEYWORD)})));
 			adjustment.setNeedsRewriting(false);
@@ -1619,8 +1636,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		return modifiers;
 	}
 
-	private Set getNotDeletedMembers(final IProgressMonitor monitor) throws JavaModelException {
-		final Set matchingSet= new HashSet();
+	private Set<IMember> getNotDeletedMembers(final IProgressMonitor monitor) throws JavaModelException {
+		final Set<IMember> matchingSet= new HashSet<IMember>();
 		monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, 2);
 		matchingSet.addAll(Arrays.asList(getMatchingElements(new SubProgressMonitor(monitor, 1), true)));
 		matchingSet.removeAll(Arrays.asList(getMembersToDelete(new SubProgressMonitor(monitor, 1))));
@@ -1631,6 +1648,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.PullUpRefactoring_Pull_Up;
 	}
@@ -1646,13 +1664,13 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	// skipped super classes are those declared in the hierarchy between the
 	// declaring type of the selected members
 	// and the target type
-	private Set getSkippedSuperTypes(final IProgressMonitor monitor) throws JavaModelException {
+	private Set<IType> getSkippedSuperTypes(final IProgressMonitor monitor) throws JavaModelException {
 		monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, 1);
 		try {
 			if (fCachedSkippedSuperTypes != null && getDestinationTypeHierarchy(new SubProgressMonitor(monitor, 1)).getType().equals(getDestinationType()))
 				return fCachedSkippedSuperTypes;
 			final ITypeHierarchy hierarchy= getDestinationTypeHierarchy(new SubProgressMonitor(monitor, 1));
-			fCachedSkippedSuperTypes= new HashSet(2);
+			fCachedSkippedSuperTypes= new HashSet<IType>(2);
 			IType current= hierarchy.getSuperclass(getDeclaringType());
 			while (current != null && !current.equals(getDestinationType())) {
 				fCachedSkippedSuperTypes.add(current);
@@ -1720,7 +1738,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_PULL));
 		final RefactoringStatus status= new RefactoringStatus();
-		List elements= new ArrayList();
+		List<IJavaElement> elements= new ArrayList<IJavaElement>();
 		for (int index= 0; index < pullCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1);
 			handle= extended.getAttribute(attribute);
@@ -1733,8 +1751,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fMembersToMove= (IMember[]) elements.toArray(new IMember[elements.size()]);
-		elements= new ArrayList();
+		fMembersToMove= elements.toArray(new IMember[elements.size()]);
+		elements= new ArrayList<IJavaElement>();
 		for (int index= 0; index < deleteCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (pullCount + index + 1);
 			handle= extended.getAttribute(attribute);
@@ -1747,8 +1765,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fDeletedMethods= (IMethod[]) elements.toArray(new IMethod[elements.size()]);
-		elements= new ArrayList();
+		fDeletedMethods= elements.toArray(new IMethod[elements.size()]);
+		elements= new ArrayList<IJavaElement>();
 		for (int index= 0; index < abstractCount; index++) {
 			final String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (pullCount + abstractCount + index + 1);
 			handle= extended.getAttribute(attribute);
@@ -1761,7 +1779,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 			} else
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, attribute));
 		}
-		fAbstractMethods= (IMethod[]) elements.toArray(new IMethod[elements.size()]);
+		fAbstractMethods= elements.toArray(new IMethod[elements.size()]);
 		IJavaProject project= null;
 		if (fMembersToMove.length > 0)
 			project= fMembersToMove[0].getJavaProject();
@@ -1774,6 +1792,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isPullUpAvailable(fMembersToMove);
 	}
@@ -1792,7 +1811,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private boolean isRequiredPullableMember(final List queue, final IMember member) throws JavaModelException {
+	private boolean isRequiredPullableMember(final List<IMember> queue, final IMember member) throws JavaModelException {
 		final IType declaring= member.getDeclaringType();
 		if (declaring == null) // not a member
 			return false;
@@ -1802,9 +1821,9 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	protected void registerChanges(final TextEditBasedChangeManager manager) throws CoreException {
 		ICompilationUnit unit= null;
 		CompilationUnitRewrite rewrite= null;
-		for (final Iterator iterator= fCompilationUnitRewrites.keySet().iterator(); iterator.hasNext();) {
-			unit= (ICompilationUnit) iterator.next();
-			rewrite= (CompilationUnitRewrite) fCompilationUnitRewrites.get(unit);
+		for (final Iterator<ICompilationUnit> iterator= fCompilationUnitRewrites.keySet().iterator(); iterator.hasNext();) {
+			unit= iterator.next();
+			rewrite= fCompilationUnitRewrites.get(unit);
 			if (rewrite != null) {
 				final CompilationUnitChange change= rewrite.createChange(true);
 				if (change != null)
@@ -1826,18 +1845,19 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
-	protected void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set replacements, final IProgressMonitor monitor) throws CoreException {
+	@Override
+	protected void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set<String> replacements, final IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask("", 100); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating);
 			CompilationUnitRewrite currentRewrite= null;
-			final CompilationUnitRewrite existingRewrite= (CompilationUnitRewrite) fCompilationUnitRewrites.get(unit.getPrimary());
+			final CompilationUnitRewrite existingRewrite= fCompilationUnitRewrites.get(unit.getPrimary());
 			final boolean isTouched= existingRewrite != null;
 			if (isTouched)
 				currentRewrite= existingRewrite;
 			else
 				currentRewrite= new CompilationUnitRewrite(unit, node);
-			final Collection collection= (Collection) fTypeOccurrences.get(unit);
+			final Collection<ITypeConstraintVariable> collection= fTypeOccurrences.get(unit);
 			if (collection != null && !collection.isEmpty()) {
 				final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 100);
 				try {
@@ -1846,8 +1866,8 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 					TType estimate= null;
 					ISourceConstraintVariable variable= null;
 					ITypeConstraintVariable constraint= null;
-					for (final Iterator iterator= collection.iterator(); iterator.hasNext();) {
-						variable= (ISourceConstraintVariable) iterator.next();
+					for (final Iterator<ITypeConstraintVariable> iterator= collection.iterator(); iterator.hasNext();) {
+						variable= iterator.next();
 						if (variable instanceof ITypeConstraintVariable) {
 							constraint= (ITypeConstraintVariable) variable;
 							estimate= (TType) constraint.getData(SuperTypeConstraintsSolver.DATA_TYPE_ESTIMATE);
@@ -1878,19 +1898,20 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	protected void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final CompilationUnitRewrite sourceRewrite, final ICompilationUnit copy, final Set replacements, final RefactoringStatus status, final IProgressMonitor monitor) {
+	protected void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final CompilationUnitRewrite sourceRewrite, final ICompilationUnit copy, final Set<String> replacements, final RefactoringStatus status, final IProgressMonitor monitor) {
 		try {
 			monitor.beginTask("", 100); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.PullUpRefactoring_checking);
 			final IType declaring= getDeclaringType();
 			final IJavaProject project= declaring.getJavaProject();
-			final ASTParser parser= ASTParser.newParser(AST.JLS3);
+			final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setWorkingCopyOwner(fOwner);
 			parser.setResolveBindings(true);
 			parser.setProject(project);
 			parser.setCompilerOptions(RefactoringASTParser.getCompilerOptions(project));
 			parser.createASTs(new ICompilationUnit[] { copy}, new String[0], new ASTRequestor() {
 
+				@Override
 				public final void acceptAST(final ICompilationUnit unit, final CompilationUnit node) {
 					try {
 						final IType subType= (IType) JavaModelUtil.findInCompilationUnit(unit, declaring);
@@ -1919,6 +1940,7 @@ public class PullUpRefactoringProcessor extends HierarchyProcessor {
 					}
 				}
 
+				@Override
 				public final void acceptBinding(final String key, final IBinding binding) {
 					// Do nothing
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java
index 568f17a..ff6469e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.MarkerAnnotation;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
@@ -91,6 +92,7 @@ import org.eclipse.jdt.internal.corext.refactoring.SearchResultGroup;
 import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
 import org.eclipse.jdt.internal.corext.refactoring.changes.DynamicValidationRefactoringChange;
 import org.eclipse.jdt.internal.corext.refactoring.rename.MethodChecks;
+import org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.IncomingMemberVisibilityAdjustment;
 import org.eclipse.jdt.internal.corext.refactoring.util.ResourceUtil;
 import org.eclipse.jdt.internal.corext.refactoring.util.TextEditBasedChangeManager;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
@@ -252,28 +254,28 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 			RefactoringCoreMessages.PushDownRefactoring_category_name, RefactoringCoreMessages.PushDownRefactoring_category_description));
 
 	private static MemberActionInfo[] createInfosForAllPushableFieldsAndMethods(IType type) throws JavaModelException {
-		List result= new ArrayList();
+		List<MemberActionInfo> result= new ArrayList<MemberActionInfo>();
 		IMember[] pushableMembers= RefactoringAvailabilityTester.getPushDownMembers(type);
 		for (int i= 0; i < pushableMembers.length; i++) {
 			result.add(MemberActionInfo.create(pushableMembers[i], MemberActionInfo.NO_ACTION));
 		}
-		return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	private static IMember[] getAbstractMembers(IMember[] members) throws JavaModelException {
-		List result= new ArrayList(members.length);
+		List<IMember> result= new ArrayList<IMember>(members.length);
 		for (int i= 0; i < members.length; i++) {
 			IMember member= members[i];
 			if (JdtFlags.isAbstract(member))
 				result.add(member);
 		}
-		return (IMember[]) result.toArray(new IMember[result.size()]);
+		return result.toArray(new IMember[result.size()]);
 	}
 
-	private static CompilationUnitRewrite getCompilationUnitRewrite(final Map rewrites, final ICompilationUnit unit) {
+	private static CompilationUnitRewrite getCompilationUnitRewrite(final Map<ICompilationUnit, CompilationUnitRewrite> rewrites, final ICompilationUnit unit) {
 		Assert.isNotNull(rewrites);
 		Assert.isNotNull(unit);
-		CompilationUnitRewrite rewrite= (CompilationUnitRewrite) rewrites.get(unit);
+		CompilationUnitRewrite rewrite= rewrites.get(unit);
 		if (rewrite == null) {
 			rewrite= new CompilationUnitRewrite(unit);
 			rewrites.put(unit, rewrite);
@@ -289,7 +291,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 		engine.setStatus(status);
 		engine.searchPattern(new SubProgressMonitor(pm, 1));
 		SearchResultGroup[] groups= (SearchResultGroup[]) engine.getResults();
-		Set result= new HashSet(3);
+		Set<IJavaElement> result= new HashSet<IJavaElement>(3);
 		for (int i= 0; i < groups.length; i++) {
 			SearchResultGroup group= groups[i];
 			SearchMatch[] results= group.getSearchResults();
@@ -298,7 +300,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 				result.add(SearchUtils.getEnclosingJavaElement(searchResult));
 			}
 		}
-		return (IJavaElement[]) result.toArray(new IJavaElement[result.size()]);
+		return result.toArray(new IJavaElement[result.size()]);
 	}
 
 	private ITypeHierarchy fCachedClassHierarchy;
@@ -340,7 +342,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 		status.merge(initializeStatus);
 	}
 
-	private void addAllRequiredPushableMembers(List queue, IMember member, IProgressMonitor monitor) throws JavaModelException {
+	private void addAllRequiredPushableMembers(List<IMember> queue, IMember member, IProgressMonitor monitor) throws JavaModelException {
 		monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_calculating_required, 2);
 		IProgressMonitor sub= new SubProgressMonitor(monitor, 1);
 		sub.beginTask(RefactoringCoreMessages.PushDownRefactoring_calculating_required, 2);
@@ -374,7 +376,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	private RefactoringStatus checkAccessedFields(IType[] subclasses, IProgressMonitor pm) throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
 		IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass());
-		List pushedDownList= Arrays.asList(membersToPushDown);
+		List<IMember> pushedDownList= Arrays.asList(membersToPushDown);
 		IField[] accessedFields= ReferenceFinderUtil.getFieldsReferencedIn(membersToPushDown, pm);
 		for (int i= 0; i < subclasses.length; i++) {
 			IType targetClass= subclasses[i];
@@ -395,7 +397,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	private RefactoringStatus checkAccessedMethods(IType[] subclasses, IProgressMonitor pm) throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
 		IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass());
-		List pushedDownList= Arrays.asList(membersToPushDown);
+		List<IMember> pushedDownList= Arrays.asList(membersToPushDown);
 		IMethod[] accessedMethods= ReferenceFinderUtil.getMethodsReferencedIn(membersToPushDown, pm);
 		for (int index= 0; index < subclasses.length; index++) {
 			IType targetClass= subclasses[index];
@@ -445,6 +447,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor monitor, CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 5);
@@ -463,12 +466,12 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 				monitor.worked(1);
 			if (result.hasFatalError())
 				return result;
-			List members= new ArrayList(fMemberInfos.length);
+			List<IMember> members= new ArrayList<IMember>(fMemberInfos.length);
 			for (int index= 0; index < fMemberInfos.length; index++) {
 				if (fMemberInfos[index].getAction() != MemberActionInfo.NO_ACTION)
 					members.add(fMemberInfos[index].getMember());
 			}
-			fMembersToMove= (IMember[]) members.toArray(new IMember[members.size()]);
+			fMembersToMove= members.toArray(new IMember[members.size()]);
 			fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), result);
 			if (result.hasFatalError())
 				return result;
@@ -484,6 +487,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 1);
@@ -498,7 +502,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 			if (status.hasFatalError())
 				return status;
 			fMemberInfos= createInfosForAllPushableFieldsAndMethods(getDeclaringType());
-			List list= Arrays.asList(fMembersToMove);
+			List<IMember> list= Arrays.asList(fMembersToMove);
 			for (int offset= 0; offset < fMemberInfos.length; offset++) {
 				MemberActionInfo info= fMemberInfos[offset];
 				if (list.contains(info.getMember()))
@@ -517,9 +521,9 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 
 		IType[] destinationClassesForNonAbstract= getAbstractDestinations(new SubProgressMonitor(monitor, 1));
 		result.merge(checkNonAbstractMembersInDestinationClasses(membersToPushDown, destinationClassesForNonAbstract));
-		List list= Arrays.asList(getAbstractMembers(getAbstractDestinations(new SubProgressMonitor(monitor, 1))));
+		List<IMember> list= Arrays.asList(getAbstractMembers(getAbstractDestinations(new SubProgressMonitor(monitor, 1))));
 
-		IType[] destinationClassesForAbstract= (IType[]) list.toArray(new IType[list.size()]);
+		IType[] destinationClassesForAbstract= list.toArray(new IType[list.size()]);
 		result.merge(checkAbstractMembersInDestinationClasses(membersToPushDown, destinationClassesForAbstract));
 		monitor.done();
 		return result;
@@ -527,10 +531,10 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 
 	private RefactoringStatus checkNonAbstractMembersInDestinationClasses(IMember[] membersToPushDown, IType[] destinationClassesForNonAbstract) throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
-		List list= new ArrayList(); // Arrays.asList does not support removing
+		List<IMember> list= new ArrayList<IMember>(); // Arrays.asList does not support removing
 		list.addAll(Arrays.asList(membersToPushDown));
 		list.removeAll(Arrays.asList(getAbstractMembers(membersToPushDown)));
-		IMember[] nonAbstractMembersToPushDown= (IMember[]) list.toArray(new IMember[list.size()]);
+		IMember[] nonAbstractMembersToPushDown= list.toArray(new IMember[list.size()]);
 		for (int i= 0; i < destinationClassesForNonAbstract.length; i++) {
 			result.merge(MemberCheckUtil.checkMembersInDestinationType(nonAbstractMembersToPushDown, destinationClassesForNonAbstract[i]));
 		}
@@ -547,15 +551,15 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	}
 
 	private RefactoringStatus checkReferencesToPushedDownMembers(IProgressMonitor monitor) throws JavaModelException {
-		List fields= new ArrayList(fMemberInfos.length);
+		List<IMember> fields= new ArrayList<IMember>(fMemberInfos.length);
 		for (int index= 0; index < fMemberInfos.length; index++) {
 			MemberActionInfo info= fMemberInfos[index];
 			if (info.isToBePushedDown())
 				fields.add(info.getMember());
 		}
-		IMember[] membersToPush= (IMember[]) fields.toArray(new IMember[fields.size()]);
+		IMember[] membersToPush= fields.toArray(new IMember[fields.size()]);
 		RefactoringStatus result= new RefactoringStatus();
-		List movedMembers= Arrays.asList(MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()));
+		List<IMember> movedMembers= Arrays.asList(MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()));
 		monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_check_references, membersToPush.length);
 		for (int index= 0; index < membersToPush.length; index++) {
 			IMember member= membersToPush[index];
@@ -578,7 +582,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	}
 
 	public void computeAdditionalRequiredMembersToPushDown(IProgressMonitor monitor) throws JavaModelException {
-		List list= Arrays.asList(getAdditionalRequiredMembers(monitor));
+		List<IMember> list= Arrays.asList(getAdditionalRequiredMembers(monitor));
 		for (int index= 0; index < fMemberInfos.length; index++) {
 			MemberActionInfo info= fMemberInfos[index];
 			if (list.contains(info.getMember()))
@@ -610,7 +614,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 		}
 	}
 
-	private void copyMembers(Collection adjustors, Map adjustments, Map rewrites, RefactoringStatus status, MemberActionInfo[] infos, IType[] destinations, CompilationUnitRewrite sourceRewriter, CompilationUnitRewrite unitRewriter, IProgressMonitor monitor) throws JavaModelException {
+	private void copyMembers(Collection<MemberVisibilityAdjustor> adjustors, Map<IMember, IncomingMemberVisibilityAdjustment> adjustments, Map<ICompilationUnit, CompilationUnitRewrite> rewrites, RefactoringStatus status, MemberActionInfo[] infos, IType[] destinations, CompilationUnitRewrite sourceRewriter, CompilationUnitRewrite unitRewriter, IProgressMonitor monitor) throws JavaModelException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 1);
 			IType type= null;
@@ -645,14 +649,14 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 							if (oldField != null) {
 								FieldDeclaration newField= createNewFieldDeclarationNode(infos[offset], sourceRewriter.getRoot(), mapping, unitRewriter.getASTRewrite(), oldField);
 								unitRewriter.getASTRewrite().getListRewrite(declaration, declaration.getBodyDeclarationsProperty()).insertAt(newField, ASTNodes.getInsertionIndex(newField, declaration.bodyDeclarations()), unitRewriter.createCategorizedGroupDescription(RefactoringCoreMessages.HierarchyRefactoring_add_member, SET_PUSH_DOWN));
-								ImportRewriteUtil.addImports(unitRewriter, context, oldField.getParent(), new HashMap(), new HashMap(), false);
+								ImportRewriteUtil.addImports(unitRewriter, context, oldField.getParent(), new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 							}
 						} else {
 							final MethodDeclaration oldMethod= ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) infos[offset].getMember(), sourceRewriter.getRoot());
 							if (oldMethod != null) {
 								MethodDeclaration newMethod= createNewMethodDeclarationNode(infos[offset], mapping, unitRewriter, oldMethod);
 								unitRewriter.getASTRewrite().getListRewrite(declaration, declaration.getBodyDeclarationsProperty()).insertAt(newMethod, ASTNodes.getInsertionIndex(newMethod, declaration.bodyDeclarations()), unitRewriter.createCategorizedGroupDescription(RefactoringCoreMessages.HierarchyRefactoring_add_member, SET_PUSH_DOWN));
-								ImportRewriteUtil.addImports(unitRewriter, context, oldMethod, new HashMap(), new HashMap(), false);
+								ImportRewriteUtil.addImports(unitRewriter, context, oldMethod, new HashMap<Name, String>(), new HashMap<Name, String>(), false);
 							}
 						}
 					}
@@ -666,9 +670,10 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
 		try {
-			final Map arguments= new HashMap();
+			final Map<String, String> arguments= new HashMap<String, String>();
 			String project= null;
 			final IType declaring= getDeclaringType();
 			final IJavaProject javaProject= declaring.getJavaProject();
@@ -721,10 +726,10 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 			monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 7);
 			final ICompilationUnit source= getDeclaringType().getCompilationUnit();
 			final CompilationUnitRewrite sourceRewriter= new CompilationUnitRewrite(source);
-			final Map rewrites= new HashMap(2);
+			final Map<ICompilationUnit, CompilationUnitRewrite> rewrites= new HashMap<ICompilationUnit, CompilationUnitRewrite>(2);
 			rewrites.put(source, sourceRewriter);
 			IType[] types= getHierarchyOfDeclaringClass(new SubProgressMonitor(monitor, 1)).getSubclasses(getDeclaringType());
-			final Set result= new HashSet(types.length + 1);
+			final Set<ICompilationUnit> result= new HashSet<ICompilationUnit>(types.length + 1);
 			for (int index= 0; index < types.length; index++) {
 				ICompilationUnit cu= types[index].getCompilationUnit();
 				if (cu != null) { // subclasses can be in binaries
@@ -732,9 +737,9 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 				}
 			}
 			result.add(source);
-			final Map adjustments= new HashMap();
-			final List adjustors= new ArrayList();
-			final ICompilationUnit[] units= (ICompilationUnit[]) result.toArray(new ICompilationUnit[result.size()]);
+			final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments= new HashMap<IMember, IncomingMemberVisibilityAdjustment>();
+			final List<MemberVisibilityAdjustor> adjustors= new ArrayList<MemberVisibilityAdjustor>();
+			final ICompilationUnit[] units= result.toArray(new ICompilationUnit[result.size()]);
 			ICompilationUnit unit= null;
 			CompilationUnitRewrite rewrite= null;
 			final IProgressMonitor sub= new SubProgressMonitor(monitor, 4);
@@ -757,7 +762,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 					for (int offset= 0; offset < members.length; offset++)
 						classes[offset]= (IType) members[offset];
 					copyMembers(adjustors, adjustments, rewrites, status, getAbstractMemberInfos(), classes, sourceRewriter, rewrite, sub);
-					copyMembers(adjustors, adjustments, rewrites, status, getEffectedMemberInfos(), getAbstractDestinations(new SubProgressMonitor(monitor, 1)), sourceRewriter, rewrite, sub);
+					copyMembers(adjustors, adjustments, rewrites, status, getAffectedMemberInfos(), getAbstractDestinations(new SubProgressMonitor(monitor, 1)), sourceRewriter, rewrite, sub);
 					if (monitor.isCanceled())
 						throw new OperationCanceledException();
 				}
@@ -765,13 +770,13 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 				sub.done();
 			}
 			if (!adjustors.isEmpty() && !adjustments.isEmpty()) {
-				final MemberVisibilityAdjustor adjustor= (MemberVisibilityAdjustor) adjustors.get(0);
+				final MemberVisibilityAdjustor adjustor= adjustors.get(0);
 				adjustor.rewriteVisibility(new SubProgressMonitor(monitor, 1));
 			}
 			final TextEditBasedChangeManager manager= new TextEditBasedChangeManager();
-			for (final Iterator iterator= rewrites.keySet().iterator(); iterator.hasNext();) {
-				unit= (ICompilationUnit) iterator.next();
-				rewrite= (CompilationUnitRewrite) rewrites.get(unit);
+			for (final Iterator<ICompilationUnit> iterator= rewrites.keySet().iterator(); iterator.hasNext();) {
+				unit= iterator.next();
+				rewrite= rewrites.get(unit);
 				if (rewrite != null)
 					manager.manage(unit, rewrite.createChange(true));
 			}
@@ -853,34 +858,34 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	}
 
 	private MemberActionInfo[] getAbstractDeclarationInfos() throws JavaModelException {
-		List result= new ArrayList(fMemberInfos.length);
+		List<MemberActionInfo> result= new ArrayList<MemberActionInfo>(fMemberInfos.length);
 		for (int index= 0; index < fMemberInfos.length; index++) {
 			MemberActionInfo info= fMemberInfos[index];
 			if (info.isNewMethodToBeDeclaredAbstract())
 				result.add(info);
 		}
-		return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	private IType[] getAbstractDestinations(IProgressMonitor monitor) throws JavaModelException {
 		IType[] allDirectSubclasses= getHierarchyOfDeclaringClass(monitor).getSubclasses(getDeclaringType());
-		List result= new ArrayList(allDirectSubclasses.length);
+		List<IType> result= new ArrayList<IType>(allDirectSubclasses.length);
 		for (int index= 0; index < allDirectSubclasses.length; index++) {
 			IType subclass= allDirectSubclasses[index];
 			if (subclass.exists() && !subclass.isBinary() && !subclass.isReadOnly() && subclass.getCompilationUnit() != null && subclass.isStructureKnown())
 				result.add(subclass);
 		}
-		return (IType[]) result.toArray(new IType[result.size()]);
+		return result.toArray(new IType[result.size()]);
 	}
 
 	private MemberActionInfo[] getAbstractMemberInfos() throws JavaModelException {
-		List result= new ArrayList(fMemberInfos.length);
+		List<MemberActionInfo> result= new ArrayList<MemberActionInfo>(fMemberInfos.length);
 		for (int index= 0; index < fMemberInfos.length; index++) {
 			MemberActionInfo info= fMemberInfos[index];
 			if (info.isToBeCreatedInSubclassesOfDeclaringClass() && JdtFlags.isAbstract(info.getMember()))
 				result.add(info);
 		}
-		return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	public IMember[] getAdditionalRequiredMembers(IProgressMonitor monitor) throws JavaModelException {
@@ -894,46 +899,47 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 		// give
 		// anything
 		// better
-		List queue= new ArrayList(members.length);
+		List<IMember> queue= new ArrayList<IMember>(members.length);
 		queue.addAll(Arrays.asList(members));
 		if (queue.isEmpty())
 			return new IMember[0];
 		int i= 0;
 		IMember current;
 		do {
-			current= (IMember) queue.get(i);
+			current= queue.get(i);
 			addAllRequiredPushableMembers(queue, current, new SubProgressMonitor(monitor, 1));
 			i++;
 			if (queue.size() == i)
 				current= null;
 		} while (current != null);
 		queue.removeAll(Arrays.asList(members));// report only additional
-		return (IMember[]) queue.toArray(new IMember[queue.size()]);
+		return queue.toArray(new IMember[queue.size()]);
 	}
 
 	private IMember[] getDeletableMembers() {
-		List result= new ArrayList(fMemberInfos.length);
+		List<IMember> result= new ArrayList<IMember>(fMemberInfos.length);
 		for (int i= 0; i < fMemberInfos.length; i++) {
 			MemberActionInfo info= fMemberInfos[i];
 			if (info.isToBeDeletedFromDeclaringClass())
 				result.add(info.getMember());
 		}
-		return (IMember[]) result.toArray(new IMember[result.size()]);
+		return result.toArray(new IMember[result.size()]);
 	}
 
-	private MemberActionInfo[] getEffectedMemberInfos() throws JavaModelException {
-		List result= new ArrayList(fMemberInfos.length);
+	private MemberActionInfo[] getAffectedMemberInfos() throws JavaModelException {
+		List<MemberActionInfo> result= new ArrayList<MemberActionInfo>(fMemberInfos.length);
 		for (int i= 0; i < fMemberInfos.length; i++) {
 			MemberActionInfo info= fMemberInfos[i];
 			if (info.isToBeCreatedInSubclassesOfDeclaringClass() && !JdtFlags.isAbstract(info.getMember()))
 				result.add(info);
 		}
-		return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object[] getElements() {
 		return fMembersToMove;
 	}
@@ -952,17 +958,18 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getIdentifier() {
 		return IDENTIFIER;
 	}
 
 	private MemberActionInfo[] getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass() throws JavaModelException {
 		MemberActionInfo[] abs= getAbstractMemberInfos();
-		MemberActionInfo[] nonabs= getEffectedMemberInfos();
-		List result= new ArrayList(abs.length + nonabs.length);
+		MemberActionInfo[] nonabs= getAffectedMemberInfos();
+		List<MemberActionInfo> result= new ArrayList<MemberActionInfo>(abs.length + nonabs.length);
 		result.addAll(Arrays.asList(abs));
 		result.addAll(Arrays.asList(nonabs));
-		return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	public MemberActionInfo[] getMemberActionInfos() {
@@ -972,6 +979,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getProcessorName() {
 		return RefactoringCoreMessages.PushDownRefactoring_name;
 	}
@@ -986,8 +994,8 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 				fCachedDeclaringType= (IType) element;
 		}
 		int count= 1;
-		final List elements= new ArrayList();
-		final List infos= new ArrayList();
+		final List<IJavaElement> elements= new ArrayList<IJavaElement>();
+		final List<MemberActionInfo> infos= new ArrayList<MemberActionInfo>();
 		String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		final RefactoringStatus status= new RefactoringStatus();
 		while ((handle= extended.getAttribute(attribute)) != null) {
@@ -1005,8 +1013,8 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 			count++;
 			attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
 		}
-		fMembersToMove= (IMember[]) elements.toArray(new IMember[elements.size()]);
-		fMemberInfos= (MemberActionInfo[]) infos.toArray(new MemberActionInfo[infos.size()]);
+		fMembersToMove= elements.toArray(new IMember[elements.size()]);
+		fMemberInfos= infos.toArray(new MemberActionInfo[infos.size()]);
 		if (!status.isOK())
 			return status;
 		return new RefactoringStatus();
@@ -1015,6 +1023,7 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean isApplicable() throws CoreException {
 		return RefactoringAvailabilityTester.isPushDownAvailable(fMembersToMove);
 	}
@@ -1022,7 +1031,8 @@ public final class PushDownRefactoringProcessor extends HierarchyProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
-	protected void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set replacements, final IProgressMonitor monitor) throws CoreException {
+	@Override
+	protected void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set<String> replacements, final IProgressMonitor monitor) throws CoreException {
 		// Not needed
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
index c691057..a440144 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 
 	//---- Moved members are handled by the MovedMemberAnalyzer --------------
 
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		ITypeBinding binding= node.resolveBinding();
 		if (binding != null) {
@@ -53,12 +54,14 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		if (isMovedMember(node.resolveBinding()))
 			return false;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(FieldDeclaration node) {
 		//see bug 42383: multiple VariableDeclarationFragments not supported:
 		VariableDeclarationFragment singleFragment= (VariableDeclarationFragment) node.fragments().get(0);
@@ -67,6 +70,7 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		if (isMovedMember(node.resolveBinding()))
 			return false;
@@ -76,12 +80,14 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 
 	//---- types and fields --------------------------
 
+	@Override
 	public boolean visit(SimpleName node) {
 		if (! node.isDeclaration() && isMovedMember(node.resolveBinding()) && ! isProcessed(node))
 			rewrite(node, fTarget);
 		return false;
 	}
 
+	@Override
 	public boolean visit(QualifiedName node) {
 		if (isMovedMember(node.resolveBinding())) {
 			if (node.getParent() instanceof ImportDeclaration) {
@@ -99,6 +105,7 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 		}
 	}
 
+	@Override
 	public boolean visit(FieldAccess node) {
 		if (isMovedMember(node.resolveFieldBinding()))
 			rewrite(node, fTarget);
@@ -107,6 +114,7 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 
 	//---- method invocations ----------------------------------
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		IMethodBinding binding= node.resolveMethodBinding();
 		if (binding != null) {
@@ -119,24 +127,28 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 
 	//---- javadoc references ----------------------------------
 
+	@Override
 	public boolean visit(MemberRef node) {
 		if (isMovedMember(node.resolveBinding()))
 			rewrite(node, fTarget);
 		return false;
 	}
 
+	@Override
 	public boolean visit(MethodRef node) {
 		if (isMovedMember(node.resolveBinding()))
 			rewrite(node, fTarget);
 		return false;
 	}
 
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		if (isMovedMember(node.resolveBinding()))
 			return false;
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		if (isMovedMember(node.resolveBinding()))
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java
index b2ab3ce..43059e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,27 +46,27 @@ public class ReferenceFinderUtil {
 
 	public static IType[] getTypesReferencedIn(IJavaElement[] elements, IProgressMonitor pm) throws JavaModelException {
 		SearchMatch[] results= getTypeReferencesIn(elements, null, pm);
-		Set referencedTypes= extractElements(results, IJavaElement.TYPE);
-		return (IType[]) referencedTypes.toArray(new IType[referencedTypes.size()]);
+		Set<IJavaElement> referencedTypes= extractElements(results, IJavaElement.TYPE);
+		return referencedTypes.toArray(new IType[referencedTypes.size()]);
 	}
 
 	public static IType[] getTypesReferencedIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		SearchMatch[] results= getTypeReferencesIn(elements, owner, pm);
-		Set referencedTypes= extractElements(results, IJavaElement.TYPE);
-		return (IType[]) referencedTypes.toArray(new IType[referencedTypes.size()]);
+		Set<IJavaElement> referencedTypes= extractElements(results, IJavaElement.TYPE);
+		return referencedTypes.toArray(new IType[referencedTypes.size()]);
 	}
 
 	private static SearchMatch[] getTypeReferencesIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
-		List referencedTypes= new ArrayList();
+		List<SearchMatch> referencedTypes= new ArrayList<SearchMatch>();
 		pm.beginTask("", elements.length); //$NON-NLS-1$
 		for (int i = 0; i < elements.length; i++) {
 			referencedTypes.addAll(getTypeReferencesIn(elements[i], owner, new SubProgressMonitor(pm, 1)));
 		}
 		pm.done();
-		return (SearchMatch[]) referencedTypes.toArray(new SearchMatch[referencedTypes.size()]);
+		return referencedTypes.toArray(new SearchMatch[referencedTypes.size()]);
 	}
 
-	private static List getTypeReferencesIn(IJavaElement element, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
+	private static List<SearchMatch> getTypeReferencesIn(IJavaElement element, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		CollectingSearchRequestor requestor= new CollectingSearchRequestor();
 		SearchEngine engine= owner != null ? new SearchEngine(owner) : new SearchEngine();
 		engine.searchDeclarationsOfReferencedTypes(element, requestor, pm);
@@ -77,27 +77,27 @@ public class ReferenceFinderUtil {
 
 	public static IField[] getFieldsReferencedIn(IJavaElement[] elements, IProgressMonitor pm) throws JavaModelException {
 		SearchMatch[] results= getFieldReferencesIn(elements, null, pm);
-		Set referencedFields= extractElements(results, IJavaElement.FIELD);
-		return (IField[]) referencedFields.toArray(new IField[referencedFields.size()]);
+		Set<IJavaElement> referencedFields= extractElements(results, IJavaElement.FIELD);
+		return referencedFields.toArray(new IField[referencedFields.size()]);
 	}
 
 	public static IField[] getFieldsReferencedIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		SearchMatch[] results= getFieldReferencesIn(elements, owner, pm);
-		Set referencedFields= extractElements(results, IJavaElement.FIELD);
-		return (IField[]) referencedFields.toArray(new IField[referencedFields.size()]);
+		Set<IJavaElement> referencedFields= extractElements(results, IJavaElement.FIELD);
+		return referencedFields.toArray(new IField[referencedFields.size()]);
 	}
 
 	private static SearchMatch[] getFieldReferencesIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
-		List referencedFields= new ArrayList();
+		List<SearchMatch> referencedFields= new ArrayList<SearchMatch>();
 		pm.beginTask("", elements.length); //$NON-NLS-1$
 		for (int i = 0; i < elements.length; i++) {
 			referencedFields.addAll(getFieldReferencesIn(elements[i], owner, new SubProgressMonitor(pm, 1)));
 		}
 		pm.done();
-		return (SearchMatch[]) referencedFields.toArray(new SearchMatch[referencedFields.size()]);
+		return referencedFields.toArray(new SearchMatch[referencedFields.size()]);
 	}
 
-	private static List getFieldReferencesIn(IJavaElement element, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
+	private static List<SearchMatch> getFieldReferencesIn(IJavaElement element, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		CollectingSearchRequestor requestor= new CollectingSearchRequestor();
 		SearchEngine engine= owner != null ? new SearchEngine(owner) : new SearchEngine();
 		engine.searchDeclarationsOfAccessedFields(element, requestor, pm);
@@ -108,27 +108,27 @@ public class ReferenceFinderUtil {
 
 	public static IMethod[] getMethodsReferencedIn(IJavaElement[] elements, IProgressMonitor pm) throws JavaModelException {
 		SearchMatch[] results= getMethodReferencesIn(elements, null, pm);
-		Set referencedMethods= extractElements(results, IJavaElement.METHOD);
-		return (IMethod[]) referencedMethods.toArray(new IMethod[referencedMethods.size()]);
+		Set<IJavaElement> referencedMethods= extractElements(results, IJavaElement.METHOD);
+		return referencedMethods.toArray(new IMethod[referencedMethods.size()]);
 	}
 
 	public static IMethod[] getMethodsReferencedIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		SearchMatch[] results= getMethodReferencesIn(elements, owner, pm);
-		Set referencedMethods= extractElements(results, IJavaElement.METHOD);
-		return (IMethod[]) referencedMethods.toArray(new IMethod[referencedMethods.size()]);
+		Set<IJavaElement> referencedMethods= extractElements(results, IJavaElement.METHOD);
+		return referencedMethods.toArray(new IMethod[referencedMethods.size()]);
 	}
 
 	private static SearchMatch[] getMethodReferencesIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
-		List referencedMethods= new ArrayList();
+		List<SearchMatch> referencedMethods= new ArrayList<SearchMatch>();
 		pm.beginTask("", elements.length); //$NON-NLS-1$
 		for (int i = 0; i < elements.length; i++) {
 			referencedMethods.addAll(getMethodReferencesIn(elements[i], owner, new SubProgressMonitor(pm, 1)));
 		}
 		pm.done();
-		return (SearchMatch[]) referencedMethods.toArray(new SearchMatch[referencedMethods.size()]);
+		return referencedMethods.toArray(new SearchMatch[referencedMethods.size()]);
 	}
 
-	private static List getMethodReferencesIn(IJavaElement element, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
+	private static List<SearchMatch> getMethodReferencesIn(IJavaElement element, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		CollectingSearchRequestor requestor= new CollectingSearchRequestor();
 		SearchEngine engine= owner != null ? new SearchEngine(owner) : new SearchEngine();
 		engine.searchDeclarationsOfSentMessages(element, requestor, pm);
@@ -136,18 +136,18 @@ public class ReferenceFinderUtil {
 	}
 
 	public static ITypeBinding[] getTypesReferencedInDeclarations(MethodDeclaration[] methods) {
-		Set typesUsed= new HashSet();
+		Set<ITypeBinding> typesUsed= new HashSet<ITypeBinding>();
 		for (int i= 0; i < methods.length; i++) {
 			typesUsed.addAll(getTypesUsedInDeclaration(methods[i]));
 		}
-		return (ITypeBinding[]) typesUsed.toArray(new ITypeBinding[typesUsed.size()]);
+		return typesUsed.toArray(new ITypeBinding[typesUsed.size()]);
 	}
 
 	//set of ITypeBindings
-	public static Set getTypesUsedInDeclaration(MethodDeclaration methodDeclaration) {
+	public static Set<ITypeBinding> getTypesUsedInDeclaration(MethodDeclaration methodDeclaration) {
 		if (methodDeclaration == null)
-			return new HashSet(0);
-		Set result= new HashSet();
+			return new HashSet<ITypeBinding>(0);
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
 		ITypeBinding binding= null;
 		Type returnType= methodDeclaration.getReturnType2();
 		if (returnType != null) {
@@ -156,14 +156,14 @@ public class ReferenceFinderUtil {
 				result.add(binding);
 		}
 
-		for (Iterator iter= methodDeclaration.parameters().iterator(); iter.hasNext();) {
-			binding = ((SingleVariableDeclaration)iter.next()).getType().resolveBinding();
+		for (Iterator<SingleVariableDeclaration> iter= methodDeclaration.parameters().iterator(); iter.hasNext();) {
+			binding = iter.next().getType().resolveBinding();
 			if (binding != null)
 				result.add(binding);
 		}
 
-		for (Iterator iter= methodDeclaration.thrownExceptions().iterator(); iter.hasNext();) {
-			binding = ((Name)iter.next()).resolveTypeBinding();
+		for (Iterator<Name> iter= methodDeclaration.thrownExceptions().iterator(); iter.hasNext();) {
+			binding = iter.next().resolveTypeBinding();
 			if (binding != null)
 				result.add(binding);
 		}
@@ -171,8 +171,8 @@ public class ReferenceFinderUtil {
 	}
 
 	/// private helpers
-	private static Set extractElements(SearchMatch[] searchResults, int elementType) {
-		Set elements= new HashSet();
+	private static Set<IJavaElement> extractElements(SearchMatch[] searchResults, int elementType) {
+		Set<IJavaElement> elements= new HashSet<IJavaElement>();
 		for (int i= 0; i < searchResults.length; i++) {
 			IJavaElement el= SearchUtils.getEnclosingJavaElement(searchResults[i]);
 			if (el.exists() && el.getElementType() == elementType)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableMaplet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableMaplet.java
index 7fdc2b4..a7c6063 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableMaplet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableMaplet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public final class TypeVariableMaplet {
 		fTargetIndex= offset;
 	}
 
+	@Override
 	public final boolean equals(final Object object) {
 		if (object instanceof TypeVariableMaplet) {
 			final TypeVariableMaplet mapping= (TypeVariableMaplet) object;
@@ -98,6 +99,7 @@ public final class TypeVariableMaplet {
 		return fTargetName;
 	}
 
+	@Override
 	public final int hashCode() {
 		return fSourceIndex | fTargetIndex | fSourceName.hashCode() | fTargetName.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java
index 2d66260..f80b0be 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,7 +53,7 @@ public final class TypeVariableUtil {
 		else {
 			TypeVariableMaplet source= null;
 			TypeVariableMaplet target= null;
-			final Set set= new HashSet(first.length * second.length);
+			final Set<TypeVariableMaplet> set= new HashSet<TypeVariableMaplet>(first.length * second.length);
 			for (int index= 0; index < first.length; index++) {
 				for (int offset= 0; offset < second.length; offset++) {
 					source= first[index];
@@ -76,7 +76,7 @@ public final class TypeVariableUtil {
 	 * @param variables
 	 *        the set of variables to fill in
 	 */
-	private static void extractTypeVariables(final String signature, final Set variables) {
+	private static void extractTypeVariables(final String signature, final Set<String> variables) {
 		Assert.isNotNull(signature);
 		Assert.isNotNull(variables);
 
@@ -125,7 +125,7 @@ public final class TypeVariableUtil {
 			}
 		} else if (member instanceof IMethod) {
 			final IMethod method= (IMethod) member;
-			final HashSet set= new HashSet();
+			final HashSet<String> set= new HashSet<String>();
 			final String[] types= method.getParameterTypes();
 			for (int index= 0; index < types.length; index++)
 				extractTypeVariables(types[index], set);
@@ -142,7 +142,7 @@ public final class TypeVariableUtil {
 			Assert.isTrue(false);
 		}
 
-		final List list= new ArrayList(variables.length);
+		final List<String> list= new ArrayList<String>(variables.length);
 		String variable= null;
 		for (int index= 0; index < variables.length; index++) {
 			variable= variables[index];
@@ -174,13 +174,13 @@ public final class TypeVariableUtil {
 		Assert.isNotNull(declaring);
 		Assert.isNotNull(member);
 
-		List list= null;
+		List<String> list= null;
 		final String[] types= getReferencedVariables(declaring, member);
 		if (mapping.length == 0) {
-			list= new ArrayList(types.length);
+			list= new ArrayList<String>(types.length);
 			list.addAll(Arrays.asList(types));
 		} else {
-			final Set mapped= new HashSet(types.length);
+			final Set<String> mapped= new HashSet<String>(types.length);
 			String type= null;
 			for (int index= 0; index < types.length; index++) {
 				for (int offset= 0; offset < mapping.length; offset++) {
@@ -189,7 +189,7 @@ public final class TypeVariableUtil {
 						mapped.add(type);
 				}
 			}
-			list= new ArrayList(types.length - mapped.size());
+			list= new ArrayList<String>(types.length - mapped.size());
 			for (int index= 0; index < types.length; index++) {
 				type= types[index];
 				if (!mapped.contains(type))
@@ -255,7 +255,7 @@ public final class TypeVariableUtil {
 		Assert.isNotNull(domain);
 		Assert.isNotNull(range);
 
-		final Set set= new HashSet();
+		final Set<TypeVariableMaplet> set= new HashSet<TypeVariableMaplet>();
 		ITypeParameter source= null;
 		String target= null;
 		String element= null;
@@ -312,7 +312,7 @@ public final class TypeVariableUtil {
 		Assert.isNotNull(range);
 		Assert.isTrue(domain.length == 0 || domain.length == range.length);
 
-		final List list= new ArrayList();
+		final List<TypeVariableMaplet> list= new ArrayList<TypeVariableMaplet>();
 		String source= null;
 		String target= null;
 		for (int index= 0; index < domain.length; index++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java
index ab247f8..c7bf971 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,6 @@ import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
@@ -70,6 +69,7 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 
@@ -167,6 +167,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkFinalConditions(org.eclipse.core.runtime.IProgressMonitor,org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
 	 */
+	@Override
 	public final RefactoringStatus checkFinalConditions(final IProgressMonitor monitor, final CheckConditionsContext context) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		Assert.isNotNull(context);
@@ -188,6 +189,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#checkInitialConditions(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public final RefactoringStatus checkInitialConditions(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		final RefactoringStatus status= new RefactoringStatus();
@@ -205,6 +207,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public final Change createChange(final IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		Assert.isNotNull(monitor);
 		try {
@@ -268,7 +271,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 			monitor.setTaskName(RefactoringCoreMessages.UseSuperTypeProcessor_creating);
 			final TextEditBasedChangeManager manager= new TextEditBasedChangeManager();
 			final IJavaProject project= fSubType.getJavaProject();
-			final ASTParser parser= ASTParser.newParser(AST.JLS3);
+			final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setWorkingCopyOwner(fOwner);
 			parser.setResolveBindings(true);
 			parser.setProject(project);
@@ -278,11 +281,12 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 				if (bindings != null && bindings.length == 2 && bindings[0] instanceof ITypeBinding && bindings[1] instanceof ITypeBinding) {
 					solveSuperTypeConstraints(null, null, fSubType, (ITypeBinding) bindings[0], (ITypeBinding) bindings[1], new SubProgressMonitor(monitor, 100), status);
 					if (!status.hasFatalError())
-						rewriteTypeOccurrences(manager, null, null, null, null, new HashSet(), status, new SubProgressMonitor(monitor, 150));
+						rewriteTypeOccurrences(manager, null, null, null, null, new HashSet<String>(), status, new SubProgressMonitor(monitor, 150));
 				}
 			} else {
 				parser.createASTs(new ICompilationUnit[] { fSubType.getCompilationUnit() }, new String[0], new ASTRequestor() {
 
+					@Override
 					public final void acceptAST(final ICompilationUnit unit, final CompilationUnit node) {
 						try {
 							final CompilationUnitRewrite subRewrite= new CompilationUnitRewrite(fOwner, unit, node);
@@ -294,7 +298,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 									if (superBinding != null) {
 										solveSuperTypeConstraints(subRewrite.getCu(), subRewrite.getRoot(), fSubType, subBinding, superBinding, new SubProgressMonitor(monitor, 100), status);
 										if (!status.hasFatalError()) {
-											rewriteTypeOccurrences(manager, this, subRewrite, subRewrite.getCu(), subRewrite.getRoot(), new HashSet(), status, new SubProgressMonitor(monitor, 200));
+											rewriteTypeOccurrences(manager, this, subRewrite, subRewrite.getCu(), subRewrite.getRoot(), new HashSet<String>(), status, new SubProgressMonitor(monitor, 200));
 											final TextChange change= subRewrite.createChange(true);
 											if (change != null)
 												manager.manage(subRewrite.getCu(), change);
@@ -308,6 +312,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 						}
 					}
 
+					@Override
 					public final void acceptBinding(final String key, final IBinding binding) {
 						// Do nothing
 					}
@@ -322,6 +327,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.refactoring.structure.constraints.SuperTypeRefactoringProcessor#createContraintSolver(org.eclipse.jdt.internal.corext.refactoring.structure.constraints.SuperTypeConstraintsModel)
 	 */
+	@Override
 	protected final SuperTypeConstraintsSolver createContraintSolver(final SuperTypeConstraintsModel model) {
 		return new SuperTypeConstraintsSolver(model);
 	}
@@ -339,6 +345,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getElements()
 	 */
+	@Override
 	public final Object[] getElements() {
 		return new Object[] { fSubType };
 	}
@@ -346,6 +353,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
 	 */
+	@Override
 	public final String getIdentifier() {
 		return IDENTIFIER;
 	}
@@ -353,6 +361,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
 	 */
+	@Override
 	public final String getProcessorName() {
 		return RefactoringCoreMessages.UseSuperTypeProcessor_name;
 	}
@@ -405,6 +414,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#isApplicable()
 	 */
+	@Override
 	public final boolean isApplicable() throws CoreException {
 		return Checks.isAvailable(fSubType) && Checks.isAvailable(fSuperType) && !fSubType.isAnonymous() && !fSubType.isAnnotation() && !fSuperType.isAnonymous() && !fSuperType.isAnnotation() && !fSuperType.isEnum();
 	}
@@ -412,6 +422,7 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/*
 	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#loadParticipants(org.eclipse.ltk.core.refactoring.RefactoringStatus,org.eclipse.ltk.core.refactoring.participants.SharableParticipants)
 	 */
+	@Override
 	public final RefactoringParticipant[] loadParticipants(final RefactoringStatus status, final SharableParticipants sharedParticipants) throws CoreException {
 		return new RefactoringParticipant[0];
 	}
@@ -419,11 +430,12 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 	/**
 	 * {@inheritDoc}
 	 */
-	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set replacements, final IProgressMonitor monitor) throws CoreException {
+	@Override
+	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final ICompilationUnit unit, final CompilationUnit node, final Set<String> replacements, final IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask("", 100); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating);
-			final Collection collection= (Collection) fTypeOccurrences.get(unit);
+			final Collection<ITypeConstraintVariable> collection= fTypeOccurrences.get(unit);
 			if (collection != null && !collection.isEmpty()) {
 				final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 100);
 				try {
@@ -437,8 +449,8 @@ public final class UseSuperTypeProcessor extends SuperTypeRefactoringProcessor {
 						currentRewrite= rewrite;
 					else
 						currentRewrite= new CompilationUnitRewrite(fOwner, unit, node);
-					for (final Iterator iterator= collection.iterator(); iterator.hasNext();) {
-						variable= (ISourceConstraintVariable) iterator.next();
+					for (final Iterator<ITypeConstraintVariable> iterator= collection.iterator(); iterator.hasNext();) {
+						variable= iterator.next();
 						estimate= (TType) variable.getData(SuperTypeConstraintsSolver.DATA_TYPE_ESTIMATE);
 						if (estimate != null && variable instanceof ITypeConstraintVariable) {
 							final ASTNode result= NodeFinder.perform(node, ((ITypeConstraintVariable) variable).getRange().getSourceRange());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/ConditionalTypeConstraint.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/ConditionalTypeConstraint.java
index d38870d..b825014 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/ConditionalTypeConstraint.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/ConditionalTypeConstraint.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public final class ConditionalTypeConstraint implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public final boolean equals(final Object object) {
 		if (object.getClass() != ConditionalTypeConstraint.class)
 			return false;
@@ -81,6 +82,7 @@ public final class ConditionalTypeConstraint implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public final int hashCode() {
 		return fThenVariable.hashCode() ^ 33 * fElseVariable.hashCode();
 	}
@@ -88,6 +90,7 @@ public final class ConditionalTypeConstraint implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public final String toString() {
 		return fThenVariable.toString() + " <?= " + fElseVariable.toString(); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/CovariantTypeConstraint.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/CovariantTypeConstraint.java
index 11dcf7c..6f19a12 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/CovariantTypeConstraint.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/CovariantTypeConstraint.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public final class CovariantTypeConstraint implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public final boolean equals(final Object object) {
 		if (object.getClass() != CovariantTypeConstraint.class)
 			return false;
@@ -66,6 +67,7 @@ public final class CovariantTypeConstraint implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public final int hashCode() {
 		return fDescendant.hashCode() ^ 35 * fAncestor.hashCode();
 	}
@@ -73,6 +75,7 @@ public final class CovariantTypeConstraint implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public final String toString() {
 		return fDescendant.toString() + " <<= " + fAncestor.toString(); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java
index b307896..c5722fe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,7 +88,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	 * @param originals the original methods which have already been found (element type: <code>IMethodBinding</code>)
 	 * @param implementations <code>true</code> to favor implementation methods, <code>false</code> otherwise
 	 */
-	private static void getOriginalMethods(final IMethodBinding binding, final ITypeBinding type, final Collection originals, final boolean implementations) {
+	private static void getOriginalMethods(final IMethodBinding binding, final ITypeBinding type, final Collection<IMethodBinding> originals, final boolean implementations) {
 		final ITypeBinding ancestor= type.getSuperclass();
 		if (!implementations) {
 			final ITypeBinding[] types= type.getInterfaces();
@@ -106,8 +106,8 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 			if (!binding.getKey().equals(method.getKey())) {
 				boolean match= false;
 				IMethodBinding current= null;
-				for (final Iterator iterator= originals.iterator(); iterator.hasNext();) {
-					current= (IMethodBinding) iterator.next();
+				for (final Iterator<IMethodBinding> iterator= originals.iterator(); iterator.hasNext();) {
+					current= iterator.next();
 					if (Bindings.isSubsignature(method, current))
 						match= true;
 				}
@@ -118,7 +118,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	}
 
 	/** The current method declarations being processed (element type: <code>MethodDeclaration</code>) */
-	private final Stack fCurrentMethods= new Stack();
+	private final Stack<MethodDeclaration> fCurrentMethods= new Stack<MethodDeclaration>();
 
 	/** Should instanceof expressions be rewritten? */
 	private final boolean fInstanceOf;
@@ -142,6 +142,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ArrayAccess)
 	 */
+	@Override
 	public final void endVisit(final ArrayAccess node) {
 		node.setProperty(PROPERTY_CONSTRAINT_VARIABLE, node.getArray().getProperty(PROPERTY_CONSTRAINT_VARIABLE));
 	}
@@ -149,6 +150,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ArrayCreation)
 	 */
+	@Override
 	public final void endVisit(final ArrayCreation node) {
 		final ConstraintVariable2 ancestor= (ConstraintVariable2) node.getType().getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 		node.setProperty(PROPERTY_CONSTRAINT_VARIABLE, ancestor);
@@ -163,6 +165,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ArrayInitializer)
 	 */
+	@Override
 	public final void endVisit(final ArrayInitializer node) {
 		final ITypeBinding binding= node.resolveTypeBinding();
 		if (binding != null && binding.isArray()) {
@@ -170,9 +173,9 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 			node.setProperty(PROPERTY_CONSTRAINT_VARIABLE, ancestor);
 			Expression expression= null;
 			ConstraintVariable2 descendant= null;
-			final List expressions= node.expressions();
+			final List<Expression> expressions= node.expressions();
 			for (int index= 0; index < expressions.size(); index++) {
-				expression= (Expression) expressions.get(index);
+				expression= expressions.get(index);
 				descendant= (ConstraintVariable2) expression.getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 				if (descendant != null)
 					fModel.createSubtypeConstraint(descendant, ancestor);
@@ -183,6 +186,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ArrayType)
 	 */
+	@Override
 	public final void endVisit(final ArrayType node) {
 		Type elementType= node.getElementType();
 		final ConstraintVariable2 variable= fModel.createTypeVariable(elementType);
@@ -195,6 +199,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.Assignment)
 	 */
+	@Override
 	public final void endVisit(final Assignment node) {
 		final ConstraintVariable2 ancestor= (ConstraintVariable2) node.getLeftHandSide().getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 		final ConstraintVariable2 descendant= (ConstraintVariable2) node.getRightHandSide().getProperty(PROPERTY_CONSTRAINT_VARIABLE);
@@ -206,6 +211,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.CastExpression)
 	 */
+	@Override
 	public final void endVisit(final CastExpression node) {
 		final ConstraintVariable2 first= (ConstraintVariable2) node.getType().getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 		if (first != null) {
@@ -219,6 +225,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.CatchClause)
 	 */
+	@Override
 	public final void endVisit(final CatchClause node) {
 		final SingleVariableDeclaration declaration= node.getException();
 		if (declaration != null) {
@@ -237,6 +244,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ClassInstanceCreation)
 	 */
+	@Override
 	public final void endVisit(final ClassInstanceCreation node) {
 		final IMethodBinding binding= node.resolveConstructorBinding();
 		if (binding != null) {
@@ -260,6 +268,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ConditionalExpression)
 	 */
+	@Override
 	public final void endVisit(final ConditionalExpression node) {
 		ConstraintVariable2 thenVariable= null;
 		ConstraintVariable2 elseVariable= null;
@@ -289,6 +298,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ConstructorInvocation)
 	 */
+	@Override
 	public final void endVisit(final ConstructorInvocation node) {
 		final IMethodBinding binding= node.resolveConstructorBinding();
 		if (binding != null)
@@ -298,6 +308,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.FieldAccess)
 	 */
+	@Override
 	public final void endVisit(final FieldAccess node) {
 		final IVariableBinding binding= node.resolveFieldBinding();
 		if (binding != null)
@@ -307,6 +318,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.FieldDeclaration)
 	 */
+	@Override
 	public final void endVisit(final FieldDeclaration node) {
 		endVisit(node.fragments(), node.getType(), node);
 	}
@@ -321,9 +333,9 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 		ConstraintVariable2 ancestor= null;
 		final ConstraintVariable2 descendant= fModel.createReturnTypeVariable(binding);
 		if (descendant != null) {
-			final Collection originals= getOriginalMethods(binding);
-			for (final Iterator iterator= originals.iterator(); iterator.hasNext();) {
-				method= (IMethodBinding) iterator.next();
+			final Collection<IMethodBinding> originals= getOriginalMethods(binding);
+			for (final Iterator<IMethodBinding> iterator= originals.iterator(); iterator.hasNext();) {
+				method= iterator.next();
 				if (!method.getKey().equals(binding.getKey())) {
 					ancestor= fModel.createReturnTypeVariable(method);
 					if (ancestor != null)
@@ -342,9 +354,9 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	private void endVisit(final IMethodBinding binding, final ConstraintVariable2 descendant) {
 		ITypeBinding declaring= null;
 		IMethodBinding method= null;
-		final Collection originals= getOriginalMethods(binding);
-		for (final Iterator iterator= originals.iterator(); iterator.hasNext();) {
-			method= (IMethodBinding) iterator.next();
+		final Collection<IMethodBinding> originals= getOriginalMethods(binding);
+		for (final Iterator<IMethodBinding> iterator= originals.iterator(); iterator.hasNext();) {
+			method= iterator.next();
 			declaring= method.getDeclaringClass();
 			if (declaring != null) {
 				final ConstraintVariable2 ancestor= fModel.createDeclaringTypeVariable(declaring);
@@ -395,12 +407,12 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	 * @param arguments the arguments (element type: <code>Expression</code>)
 	 * @param binding the method binding
 	 */
-	private void endVisit(final List arguments, final IMethodBinding binding) {
+	private void endVisit(final List<Expression> arguments, final IMethodBinding binding) {
 		Expression expression= null;
 		ConstraintVariable2 ancestor= null;
 		ConstraintVariable2 descendant= null;
 		for (int index= 0; index < arguments.size(); index++) {
-			expression= (Expression) arguments.get(index);
+			expression= arguments.get(index);
 			descendant= (ConstraintVariable2) expression.getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 			ancestor= fModel.createMethodParameterVariable(binding, index);
 			if (ancestor != null && descendant != null)
@@ -415,14 +427,14 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	 * @param type the type of the fragments
 	 * @param parent the parent of the fragment list
 	 */
-	private void endVisit(final List fragments, final Type type, final ASTNode parent) {
+	private void endVisit(final List<VariableDeclarationFragment> fragments, final Type type, final ASTNode parent) {
 		final ConstraintVariable2 ancestor= (ConstraintVariable2) type.getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 		if (ancestor != null) {
 			IVariableBinding binding= null;
 			ConstraintVariable2 descendant= null;
 			VariableDeclarationFragment fragment= null;
 			for (int index= 0; index < fragments.size(); index++) {
-				fragment= (VariableDeclarationFragment) fragments.get(index);
+				fragment= fragments.get(index);
 				descendant= (ConstraintVariable2) fragment.getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 				if (descendant != null)
 					fModel.createSubtypeConstraint(descendant, ancestor);
@@ -440,6 +452,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.MethodDeclaration)
 	 */
+	@Override
 	public final void endVisit(final MethodDeclaration node) {
 		fCurrentMethods.pop();
 		final IMethodBinding binding= node.resolveBinding();
@@ -459,12 +472,12 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 			ConstraintVariable2 ancestor= null;
 			ConstraintVariable2 descendant= null;
 			IVariableBinding variable= null;
-			final List parameters= node.parameters();
+			final List<SingleVariableDeclaration> parameters= node.parameters();
 			if (!parameters.isEmpty()) {
-				final Collection originals= getOriginalMethods(binding);
+				final Collection<IMethodBinding> originals= getOriginalMethods(binding);
 				SingleVariableDeclaration declaration= null;
 				for (int index= 0; index < parameters.size(); index++) {
-					declaration= (SingleVariableDeclaration) parameters.get(index);
+					declaration= parameters.get(index);
 					ancestor= fModel.createMethodParameterVariable(binding, index);
 					if (ancestor != null) {
 						descendant= (ConstraintVariable2) declaration.getType().getProperty(PROPERTY_CONSTRAINT_VARIABLE);
@@ -477,8 +490,8 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 								fModel.createEqualityConstraint(ancestor, descendant);
 						}
 						IMethodBinding method= null;
-						for (final Iterator iterator= originals.iterator(); iterator.hasNext();) {
-							method= (IMethodBinding) iterator.next();
+						for (final Iterator<IMethodBinding> iterator= originals.iterator(); iterator.hasNext();) {
+							method= iterator.next();
 							if (!method.getKey().equals(binding.getKey())) {
 								descendant= fModel.createMethodParameterVariable(method, index);
 								if (descendant != null)
@@ -488,7 +501,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 					}
 				}
 			}
-			final List exceptions= node.thrownExceptions();
+			final List<Name> exceptions= node.thrownExceptions();
 			if (!exceptions.isEmpty()) {
 				final ITypeBinding throwable= node.getAST().resolveWellKnownType("java.lang.Throwable"); //$NON-NLS-1$
 				if (throwable != null) {
@@ -496,7 +509,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 					if (ancestor != null) {
 						Name exception= null;
 						for (int index= 0; index < exceptions.size(); index++) {
-							exception= (Name) exceptions.get(index);
+							exception= exceptions.get(index);
 							descendant= (ConstraintVariable2) exception.getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 							if (descendant != null)
 								fModel.createSubtypeConstraint(descendant, ancestor);
@@ -510,6 +523,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.MethodInvocation)
 	 */
+	@Override
 	public final void endVisit(final MethodInvocation node) {
 		final IMethodBinding binding= node.resolveMethodBinding();
 		if (binding != null) {
@@ -541,6 +555,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.NullLiteral)
 	 */
+	@Override
 	public final void endVisit(final NullLiteral node) {
 		node.setProperty(PROPERTY_CONSTRAINT_VARIABLE, fModel.createImmutableTypeVariable(node.resolveTypeBinding()));
 	}
@@ -548,6 +563,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ParenthesizedExpression)
 	 */
+	@Override
 	public final void endVisit(final ParenthesizedExpression node) {
 		node.setProperty(PROPERTY_CONSTRAINT_VARIABLE, node.getExpression().getProperty(PROPERTY_CONSTRAINT_VARIABLE));
 	}
@@ -555,6 +571,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.QualifiedName)
 	 */
+	@Override
 	public final void endVisit(final QualifiedName node) {
 		final ASTNode parent= node.getParent();
 		final Name qualifier= node.getQualifier();
@@ -574,12 +591,13 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ReturnStatement)
 	 */
+	@Override
 	public final void endVisit(final ReturnStatement node) {
 		final Expression expression= node.getExpression();
 		if (expression != null) {
 			final ConstraintVariable2 descendant= (ConstraintVariable2) expression.getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 			if (descendant != null) {
-				final MethodDeclaration declaration= (MethodDeclaration) fCurrentMethods.peek();
+				final MethodDeclaration declaration= fCurrentMethods.peek();
 				if (declaration != null) {
 					final IMethodBinding binding= declaration.resolveBinding();
 					if (binding != null) {
@@ -597,6 +615,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.SimpleName)
 	 */
+	@Override
 	public final void endVisit(final SimpleName node) {
 		final ASTNode parent= node.getParent();
 		if (!(parent instanceof ImportDeclaration) && !(parent instanceof PackageDeclaration) && !(parent instanceof AbstractTypeDeclaration)) {
@@ -611,6 +630,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.SingleVariableDeclaration)
 	 */
+	@Override
 	public final void endVisit(final SingleVariableDeclaration node) {
 		final ConstraintVariable2 ancestor= (ConstraintVariable2) node.getType().getProperty(PROPERTY_CONSTRAINT_VARIABLE);
 		if (ancestor != null) {
@@ -627,6 +647,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.EnhancedForStatement)
 	 */
+	@Override
 	public void endVisit(EnhancedForStatement node) {
 		SingleVariableDeclaration parameter= node.getParameter();
 		final ConstraintVariable2 ancestor= (ConstraintVariable2) parameter.getType().getProperty(PROPERTY_CONSTRAINT_VARIABLE);
@@ -651,6 +672,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.SuperConstructorInvocation)
 	 */
+	@Override
 	public final void endVisit(final SuperConstructorInvocation node) {
 		final IMethodBinding binding= node.resolveConstructorBinding();
 		if (binding != null)
@@ -660,6 +682,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.SuperFieldAccess)
 	 */
+	@Override
 	public final void endVisit(final SuperFieldAccess node) {
 		final Name name= node.getName();
 		final IBinding binding= name.resolveBinding();
@@ -670,11 +693,12 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.SuperMethodInvocation)
 	 */
+	@Override
 	public final void endVisit(final SuperMethodInvocation node) {
 		final IMethodBinding superBinding= node.resolveMethodBinding();
 		if (superBinding != null) {
 			endVisit(node.arguments(), superBinding);
-			final MethodDeclaration declaration= (MethodDeclaration) fCurrentMethods.peek();
+			final MethodDeclaration declaration= fCurrentMethods.peek();
 			if (declaration != null) {
 				final IMethodBinding subBinding= declaration.resolveBinding();
 				if (subBinding != null) {
@@ -693,6 +717,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.ThisExpression)
 	 */
+	@Override
 	public final void endVisit(final ThisExpression node) {
 		final ITypeBinding binding= node.resolveTypeBinding();
 		if (binding != null)
@@ -702,6 +727,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.Type)
 	 */
+	@Override
 	public final void endVisit(final Type node) {
 		final ASTNode parent= node.getParent();
 		if (!(parent instanceof AbstractTypeDeclaration) && !(parent instanceof ClassInstanceCreation) && !(parent instanceof TypeLiteral) && (!(parent instanceof InstanceofExpression) || fInstanceOf))
@@ -711,6 +737,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.VariableDeclarationExpression)
 	 */
+	@Override
 	public final void endVisit(final VariableDeclarationExpression node) {
 		endVisit(node.fragments(), node.getType(), node);
 	}
@@ -718,6 +745,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.VariableDeclarationFragment)
 	 */
+	@Override
 	public final void endVisit(final VariableDeclarationFragment node) {
 		final Expression initializer= node.getInitializer();
 		if (initializer != null)
@@ -727,6 +755,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.VariableDeclarationStatement)
 	 */
+	@Override
 	public final void endVisit(final VariableDeclarationStatement node) {
 		endVisit(node.fragments(), node.getType(), node);
 	}
@@ -737,8 +766,8 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	 * @param binding the method binding
 	 * @return the original methods (element type: <code>IMethodBinding</code>)
 	 */
-	private Collection getOriginalMethods(final IMethodBinding binding) {
-		final Collection originals= new ArrayList();
+	private Collection<IMethodBinding> getOriginalMethods(final IMethodBinding binding) {
+		final Collection<IMethodBinding> originals= new ArrayList<IMethodBinding>();
 		final ITypeBinding type= binding.getDeclaringClass();
 		getOriginalMethods(binding, type, originals, false);
 		getOriginalMethods(binding, type, originals, true);
@@ -750,6 +779,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.AnnotationTypeDeclaration)
 	 */
+	@Override
 	public final boolean visit(final AnnotationTypeDeclaration node) {
 		return false;
 	}
@@ -757,6 +787,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.Comment)
 	 */
+	@Override
 	public final boolean visit(final Comment node) {
 		return false;
 	}
@@ -764,6 +795,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.ImportDeclaration)
 	 */
+	@Override
 	public final boolean visit(final ImportDeclaration node) {
 		return false;
 	}
@@ -771,6 +803,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.MethodDeclaration)
 	 */
+	@Override
 	public final boolean visit(final MethodDeclaration node) {
 		fCurrentMethods.push(node);
 		return super.visit(node);
@@ -779,6 +812,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.PackageDeclaration)
 	 */
+	@Override
 	public final boolean visit(final PackageDeclaration node) {
 		return false;
 	}
@@ -786,6 +820,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.ThisExpression)
 	 */
+	@Override
 	public final boolean visit(final ThisExpression node) {
 		return false;
 	}
@@ -793,6 +828,7 @@ public final class SuperTypeConstraintsCreator extends HierarchicalASTVisitor {
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#visit(org.eclipse.jdt.core.dom.Type)
 	 */
+	@Override
 	public final boolean visit(final Type node) {
 		return false;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java
index 5d0da70..af92158 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,16 +52,18 @@ import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
  */
 public final class SuperTypeConstraintsModel {
 
-	/** Customized implementation of a hash set */
-	private static class HashedSet extends AbstractSet {
+	/** Customized implementation of a hash set 
+	 * @param <E> the element type */
+	private static class HashedSet<E> extends AbstractSet<E> {
 
 		/** The backing hash map */
-		private final Map fImplementation= new HashMap();
+		private final Map<E, E> fImplementation= new HashMap<E, E>();
 
 		/*
 		 * @see java.util.AbstractCollection#add(java.lang.Object)
 		 */
-		public final boolean add(final Object object) {
+		@Override
+		public final boolean add(final E object) {
 			return fImplementation.put(object, object) == null;
 		}
 
@@ -71,8 +73,8 @@ public final class SuperTypeConstraintsModel {
 		 * @param object the object to add
 		 * @return An already existing object considered equal to the specified one, or the newly added object
 		 */
-		public final Object addExisting(final Object object) {
-			final Object result= fImplementation.get(object);
+		public final E addExisting(final E object) {
+			final E result= fImplementation.get(object);
 			if (result != null)
 				return result;
 			fImplementation.put(object, object);
@@ -82,6 +84,7 @@ public final class SuperTypeConstraintsModel {
 		/*
 		 * @see java.util.AbstractCollection#clear()
 		 */
+		@Override
 		public final void clear() {
 			fImplementation.clear();
 		}
@@ -89,6 +92,7 @@ public final class SuperTypeConstraintsModel {
 		/*
 		 * @see java.util.AbstractCollection#contains(java.lang.Object)
 		 */
+		@Override
 		public final boolean contains(final Object object) {
 			return fImplementation.containsKey(object);
 		}
@@ -96,6 +100,7 @@ public final class SuperTypeConstraintsModel {
 		/*
 		 * @see java.util.AbstractCollection#isEmpty()
 		 */
+		@Override
 		public final boolean isEmpty() {
 			return fImplementation.isEmpty();
 		}
@@ -103,13 +108,15 @@ public final class SuperTypeConstraintsModel {
 		/*
 		 * @see java.util.AbstractCollection#iterator()
 		 */
-		public final Iterator iterator() {
+		@Override
+		public final Iterator<E> iterator() {
 			return fImplementation.keySet().iterator();
 		}
 
 		/*
 		 * @see java.util.AbstractCollection#remove(java.lang.Object)
 		 */
+		@Override
 		public final boolean remove(final Object object) {
 			return fImplementation.remove(object) == object;
 		}
@@ -117,6 +124,7 @@ public final class SuperTypeConstraintsModel {
 		/*
 		 * @see java.util.AbstractCollection#size()
 		 */
+		@Override
 		public final int size() {
 			return fImplementation.size();
 		}
@@ -134,14 +142,17 @@ public final class SuperTypeConstraintsModel {
 	 * @param variable the constraint variable
 	 * @return the usage of the constraint variable (element type: <code>ITypeConstraint2</code>)
 	 */
-	public static Collection getVariableUsage(final ConstraintVariable2 variable) {
+	public static Collection<ITypeConstraint2> getVariableUsage(final ConstraintVariable2 variable) {
 		final Object data= variable.getData(DATA_USAGE);
-		if (data == null)
-			return Collections.EMPTY_LIST;
-		else if (data instanceof Collection)
-			return Collections.unmodifiableCollection((Collection) data);
-		else
-			return Collections.singletonList(data);
+		if (data == null) {
+			return Collections.emptyList();
+		} else if (data instanceof Collection) {
+			@SuppressWarnings("unchecked")
+			Collection<ITypeConstraint2> collection= (Collection<ITypeConstraint2>) data;
+			return Collections.unmodifiableCollection(collection);
+		} else {
+			return Collections.singletonList((ITypeConstraint2) data);
+		}
 	}
 
 	/**
@@ -162,12 +173,14 @@ public final class SuperTypeConstraintsModel {
 	 */
 	public static void setVariableUsage(final ConstraintVariable2 variable, ITypeConstraint2 constraint) {
 		final Object data= variable.getData(DATA_USAGE);
-		if (data == null)
+		if (data == null) {
 			variable.setData(DATA_USAGE, constraint);
-		else if (data instanceof Collection)
-			((Collection) data).add(constraint);
-		else {
-			final Collection usage= new ArrayList(2);
+		} else if (data instanceof Collection) {
+			@SuppressWarnings("unchecked")
+			Collection<ITypeConstraint2> collection= (Collection<ITypeConstraint2>) data;
+			collection.add(constraint);
+		} else {
+			final Collection<Object> usage= new ArrayList<Object>(2);
 			usage.add(data);
 			usage.add(constraint);
 			variable.setData(DATA_USAGE, usage);
@@ -175,16 +188,16 @@ public final class SuperTypeConstraintsModel {
 	}
 
 	/** The cast variables (element type: <code>CastVariable2</code>) */
-	private final Collection fCastVariables= new ArrayList();
+	private final Collection<CastVariable2> fCastVariables= new ArrayList<CastVariable2>();
 
 	/** The compliance level */
 	private int fCompliance= 3;
 
 	/** The set of constraint variables (element type: <code>ConstraintVariable2</code>) */
-	private final HashedSet fConstraintVariables= new HashedSet();
+	private final HashedSet<ConstraintVariable2> fConstraintVariables= new HashedSet<ConstraintVariable2>();
 
 	/** The covariant type constraints (element type: <code>CovariantTypeConstraint</code>) */
-	private final Collection fCovariantTypeConstraints= new ArrayList();
+	private final Collection<ITypeConstraint2> fCovariantTypeConstraints= new ArrayList<ITypeConstraint2>();
 
 	/** The type environment to use */
 	private TypeEnvironment fEnvironment;
@@ -195,18 +208,19 @@ public final class SuperTypeConstraintsModel {
 	/** The supertype as replacement */
 	private final TType fSuperType;
 
-	/** The TType cache (element type: <code><String, ITypeBinding></code>) */
-	private Map fTTypeCache= new LinkedHashMap(MAX_CACHE, 0.75f, true) {
+	/** The TType cache */
+	private Map<String, TType> fTTypeCache= new LinkedHashMap<String, TType>(MAX_CACHE, 0.75f, true) {
 
 		private static final long serialVersionUID= 1L;
 
-		protected final boolean removeEldestEntry(Map.Entry entry) {
+		@Override
+		protected final boolean removeEldestEntry(Map.Entry<String, TType> entry) {
 			return size() > MAX_CACHE;
 		}
 	};
 
 	/** The set of type constraints (element type: <code>ITypeConstraint2</code>) */
-	private final Set fTypeConstraints= new HashSet();
+	private final Set<ITypeConstraint2> fTypeConstraints= new HashSet<ITypeConstraint2>();
 
 	/**
 	 * Creates a new super type constraints model.
@@ -293,7 +307,7 @@ public final class SuperTypeConstraintsModel {
 		if (type.isArray())
 			type= type.getElementType();
 		type= type.getTypeDeclaration();
-		return (ConstraintVariable2) fConstraintVariables.addExisting(new ImmutableTypeVariable2(createTType(type)));
+		return fConstraintVariables.addExisting(new ImmutableTypeVariable2(createTType(type)));
 	}
 
 	/**
@@ -340,7 +354,7 @@ public final class SuperTypeConstraintsModel {
 	public final ConstraintVariable2 createExceptionVariable(final Name name) {
 		final ITypeBinding binding= name.resolveTypeBinding();
 		if (isConstrainedType(binding))
-			return (ConstraintVariable2) fConstraintVariables.addExisting(new TypeVariable2(createTType(binding), new CompilationUnitRange(RefactoringASTParser.getCompilationUnit(name), name)));
+			return fConstraintVariables.addExisting(new TypeVariable2(createTType(binding), new CompilationUnitRange(RefactoringASTParser.getCompilationUnit(name), name)));
 		return null;
 	}
 
@@ -354,7 +368,7 @@ public final class SuperTypeConstraintsModel {
 		if (type.isArray())
 			type= type.getElementType();
 		if (isConstrainedType(type))
-			return (ConstraintVariable2) fConstraintVariables.addExisting(new ImmutableTypeVariable2(createTType(type)));
+			return fConstraintVariables.addExisting(new ImmutableTypeVariable2(createTType(type)));
 		return null;
 	}
 
@@ -371,7 +385,7 @@ public final class SuperTypeConstraintsModel {
 		if (type.isArray())
 			type= type.getElementType();
 		if (isConstrainedType(type))
-			return (ConstraintVariable2) fConstraintVariables.addExisting(new IndependentTypeVariable2(createTType(type)));
+			return fConstraintVariables.addExisting(new IndependentTypeVariable2(createTType(type)));
 		return null;
 	}
 
@@ -396,7 +410,7 @@ public final class SuperTypeConstraintsModel {
 				variable= new ParameterTypeVariable2(type, index, method.getMethodDeclaration());
 			else
 				variable= new ImmutableTypeVariable2(type);
-			return (ConstraintVariable2) fConstraintVariables.addExisting(variable);
+			return fConstraintVariables.addExisting(variable);
 		}
 		return null;
 	}
@@ -419,7 +433,7 @@ public final class SuperTypeConstraintsModel {
 					variable= new ReturnTypeVariable2(type, method);
 				else
 					variable= new ImmutableTypeVariable2(type);
-				return (ConstraintVariable2) fConstraintVariables.addExisting(variable);
+				return fConstraintVariables.addExisting(variable);
 			}
 		}
 		return null;
@@ -448,7 +462,7 @@ public final class SuperTypeConstraintsModel {
 	 */
 	public final TType createTType(final ITypeBinding binding) {
 		final String key= binding.getKey();
-		final TType cached= (TType) fTTypeCache.get(key);
+		final TType cached= fTTypeCache.get(key);
 		if (cached != null)
 			return cached;
 		final TType type= fEnvironment.create(binding);
@@ -467,7 +481,7 @@ public final class SuperTypeConstraintsModel {
 		if (type.isArray())
 			type= type.getElementType();
 		if (isConstrainedType(type))
-			return (ConstraintVariable2) fConstraintVariables.addExisting(new TypeVariable2(createTType(type), range));
+			return fConstraintVariables.addExisting(new TypeVariable2(createTType(type), range));
 		return null;
 	}
 
@@ -483,7 +497,7 @@ public final class SuperTypeConstraintsModel {
 			if (binding.isArray())
 				binding= binding.getElementType();
 			if (isConstrainedType(binding))
-				return (ConstraintVariable2) fConstraintVariables.addExisting(new TypeVariable2(createTType(binding), new CompilationUnitRange(RefactoringASTParser.getCompilationUnit(type), type)));
+				return fConstraintVariables.addExisting(new TypeVariable2(createTType(binding), new CompilationUnitRange(RefactoringASTParser.getCompilationUnit(type), type)));
 		}
 		return null;
 	}
@@ -512,7 +526,7 @@ public final class SuperTypeConstraintsModel {
 			}
 			if (variable == null)
 				variable= new VariableVariable2(createTType(type), declaration);
-			return (ConstraintVariable2) fConstraintVariables.addExisting(variable);
+			return fConstraintVariables.addExisting(variable);
 		}
 		return null;
 	}
@@ -530,7 +544,7 @@ public final class SuperTypeConstraintsModel {
 	 *
 	 * @return the cast variables (element type: <code>CastVariable2</code>)
 	 */
-	public final Collection getCastVariables() {
+	public final Collection<CastVariable2> getCastVariables() {
 		return Collections.unmodifiableCollection(fCastVariables);
 	}
 
@@ -548,7 +562,7 @@ public final class SuperTypeConstraintsModel {
 	 *
 	 * @return the constraint variables (element type: <code>ConstraintVariable2</code>)
 	 */
-	public final Collection getConstraintVariables() {
+	public final Collection<ConstraintVariable2> getConstraintVariables() {
 		return Collections.unmodifiableCollection(fConstraintVariables);
 	}
 
@@ -575,7 +589,7 @@ public final class SuperTypeConstraintsModel {
 	 *
 	 * @return the type constraints (element type: <code>ITypeConstraint2</code>)
 	 */
-	public final Collection getTypeConstraints() {
+	public final Collection<ITypeConstraint2> getTypeConstraints() {
 		return Collections.unmodifiableCollection(fTypeConstraints);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java
index 73c7355..ccfd5b8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,14 +44,14 @@ public class SuperTypeConstraintsSolver {
 	/** The type constraint model to solve */
 	protected final SuperTypeConstraintsModel fModel;
 
-	/** The obsolete casts (element type: <code>&ltICompilationUnit, Collection&ltCastVariable2&gt&gt</code>) */
-	protected Map fObsoleteCasts= null;
+	/** The obsolete casts (element type: <code><ICompilationUnit, Collection<CastVariable2>></code>) */
+	protected Map<ICompilationUnit, Collection<CastVariable2>> fObsoleteCasts= null;
 
 	/** The list of constraint variables to be processed */
-	protected LinkedList fProcessable= null;
+	protected LinkedList<ConstraintVariable2> fProcessable= null;
 
-	/** The type occurrences (element type: <code>&ltICompilationUnit, Collection&ltIDeclaredConstraintVariable&gt</code>) */
-	protected Map fTypeOccurrences= null;
+	/** The type occurrences (element type: <code><ICompilationUnit, Collection<ITypeConstraintVariable></code>) */
+	protected Map<ICompilationUnit, Collection<ITypeConstraintVariable>> fTypeOccurrences= null;
 
 	/**
 	 * Creates a new super type constraints solver.
@@ -70,10 +70,10 @@ public class SuperTypeConstraintsSolver {
 	 * @param constraints the type constraints (element type: <code>ITypeConstraint2</code>)
 	 * @param level the compliance level
 	 */
-	private void computeConditionalTypeConstraints(final Collection constraints, final int level) {
+	private void computeConditionalTypeConstraints(final Collection<ITypeConstraint2> constraints, final int level) {
 		ITypeConstraint2 constraint= null;
-		for (final Iterator iterator= constraints.iterator(); iterator.hasNext();) {
-			constraint= (ITypeConstraint2) iterator.next();
+		for (final Iterator<ITypeConstraint2> iterator= constraints.iterator(); iterator.hasNext();) {
+			constraint= iterator.next();
 			if (constraint instanceof ConditionalTypeConstraint) {
 				final ConditionalTypeConstraint conditional= (ConditionalTypeConstraint) constraint;
 				fModel.createEqualityConstraint(constraint.getLeft(), constraint.getRight());
@@ -89,11 +89,11 @@ public class SuperTypeConstraintsSolver {
 	 * @param constraints the type constraints (element type: <code>ITypeConstraint2</code>)
 	 * @param level the compliance level
 	 */
-	private void computeNonCovariantConstraints(final Collection constraints, final int level) {
+	private void computeNonCovariantConstraints(final Collection<ITypeConstraint2> constraints, final int level) {
 		if (level != 3) {
 			ITypeConstraint2 constraint= null;
-			for (final Iterator iterator= constraints.iterator(); iterator.hasNext();) {
-				constraint= (ITypeConstraint2) iterator.next();
+			for (final Iterator<ITypeConstraint2> iterator= constraints.iterator(); iterator.hasNext();) {
+				constraint= iterator.next();
 				if (constraint instanceof CovariantTypeConstraint)
 					fModel.createEqualityConstraint(constraint.getLeft(), constraint.getRight());
 			}
@@ -105,19 +105,19 @@ public class SuperTypeConstraintsSolver {
 	 *
 	 * @param variables the cast variables (element type: <code>CastVariable2</code>)
 	 */
-	private void computeObsoleteCasts(final Collection variables) {
-		fObsoleteCasts= new HashMap();
+	private void computeObsoleteCasts(final Collection<CastVariable2> variables) {
+		fObsoleteCasts= new HashMap<ICompilationUnit, Collection<CastVariable2>>();
 		CastVariable2 variable= null;
-		for (final Iterator iterator= variables.iterator(); iterator.hasNext();) {
-			variable= (CastVariable2) iterator.next();
+		for (final Iterator<CastVariable2> iterator= variables.iterator(); iterator.hasNext();) {
+			variable= iterator.next();
 			final TType type= (TType) variable.getExpressionVariable().getData(DATA_TYPE_ESTIMATE);
 			if (type != null && type.canAssignTo(variable.getType())) {
 				final ICompilationUnit unit= variable.getCompilationUnit();
-				Collection casts= (Collection) fObsoleteCasts.get(unit);
+				Collection<CastVariable2> casts= fObsoleteCasts.get(unit);
 				if (casts != null)
 					casts.add(variable);
 				else {
-					casts= new ArrayList(1);
+					casts= new ArrayList<CastVariable2>(1);
 					casts.add(variable);
 					fObsoleteCasts.put(unit, casts);
 				}
@@ -143,10 +143,10 @@ public class SuperTypeConstraintsSolver {
 	 *
 	 * @param variables the constraint variables (element type: <code>ConstraintVariable2</code>)
 	 */
-	private void computeTypeEstimates(final Collection variables) {
+	private void computeTypeEstimates(final Collection<ConstraintVariable2> variables) {
 		ConstraintVariable2 variable= null;
-		for (final Iterator iterator= variables.iterator(); iterator.hasNext();) {
-			variable= (ConstraintVariable2) iterator.next();
+		for (final Iterator<ConstraintVariable2> iterator= variables.iterator(); iterator.hasNext();) {
+			variable= iterator.next();
 			TypeEquivalenceSet set= variable.getTypeEquivalenceSet();
 			if (set == null) {
 				set= new TypeEquivalenceSet(variable);
@@ -170,8 +170,8 @@ public class SuperTypeConstraintsSolver {
 	 *
 	 * @param variables the constraint variables (element type: <code>ConstraintVariable2</code>)
 	 */
-	private void computeTypeOccurrences(final Collection variables) {
-		fTypeOccurrences= new HashMap();
+	private void computeTypeOccurrences(final Collection<ConstraintVariable2> variables) {
+		fTypeOccurrences= new HashMap<ICompilationUnit, Collection<ITypeConstraintVariable>>();
 		final TType superErasure= fModel.getSuperType().getErasure();
 		TType estimatedType= null;
 		ITypeSet set= null;
@@ -179,8 +179,8 @@ public class SuperTypeConstraintsSolver {
 		ConstraintVariable2 variable= null;
 		ITypeConstraintVariable declaration= null;
 		TType variableType= null;
-		for (final Iterator iterator= variables.iterator(); iterator.hasNext();) {
-			variable= (ConstraintVariable2) iterator.next();
+		for (final Iterator<ConstraintVariable2> iterator= variables.iterator(); iterator.hasNext();) {
+			variable= iterator.next();
 			if (variable instanceof ITypeConstraintVariable) {
 				declaration= (ITypeConstraintVariable) variable;
 				variableType= variable.getType();
@@ -193,11 +193,11 @@ public class SuperTypeConstraintsSolver {
 							declaration.setData(DATA_TYPE_ESTIMATE, estimatedType);
 							unit= declaration.getCompilationUnit();
 							if (unit != null) {
-								Collection matches= (Collection) fTypeOccurrences.get(unit);
+								Collection<ITypeConstraintVariable> matches= fTypeOccurrences.get(unit);
 								if (matches != null)
 									matches.add(declaration);
 								else {
-									matches= new ArrayList(1);
+									matches= new ArrayList<ITypeConstraintVariable>(1);
 									matches.add(declaration);
 									fTypeOccurrences.put(unit, matches);
 								}
@@ -212,18 +212,18 @@ public class SuperTypeConstraintsSolver {
 	/**
 	 * Returns the computed obsolete casts.
 	 *
-	 * @return the obsolete casts (element type: <code>&ltICompilationUnit, Collection&ltCastVariable2&gt&gt</code>)
+	 * @return the obsolete casts (element type: <code><ICompilationUnit, Collection<CastVariable2>></code>)
 	 */
-	public final Map getObsoleteCasts() {
+	public final Map<ICompilationUnit, Collection<CastVariable2>> getObsoleteCasts() {
 		return fObsoleteCasts;
 	}
 
 	/**
 	 * Returns the computed type occurrences.
 	 *
-	 * @return the type occurrences (element type: <code>&ltICompilationUnit, Collection&ltIDeclaredConstraintVariable&gt</code>)
+	 * @return the type occurrences (element type: <code><ICompilationUnit, Collection<IDeclaredConstraintVariable></code>)
 	 */
-	public final Map getTypeOccurrences() {
+	public final Map<ICompilationUnit, Collection<ITypeConstraintVariable>> getTypeOccurrences() {
 		return fTypeOccurrences;
 	}
 
@@ -232,11 +232,11 @@ public class SuperTypeConstraintsSolver {
 	 *
 	 * @param constraints the type constraints to process (element type: <code>ITypeConstraint2</code>)
 	 */
-	private void processConstraints(final Collection constraints) {
+	private void processConstraints(final Collection<ITypeConstraint2> constraints) {
 		final int level= fModel.getCompliance();
 		ITypeConstraint2 constraint= null;
-		for (final Iterator iterator= constraints.iterator(); iterator.hasNext();) {
-			constraint= (ITypeConstraint2) iterator.next();
+		for (final Iterator<ITypeConstraint2> iterator= constraints.iterator(); iterator.hasNext();) {
+			constraint= iterator.next();
 			if ((level == 3 || !(constraint instanceof CovariantTypeConstraint)) && !(constraint instanceof ConditionalTypeConstraint)) {
 				final ConstraintVariable2 leftVariable= constraint.getLeft();
 				final ITypeSet leftEstimate= leftVariable.getTypeEstimate();
@@ -254,9 +254,9 @@ public class SuperTypeConstraintsSolver {
 	 * Solves the constraints of the associated model.
 	 */
 	public final void solveConstraints() {
-		fProcessable= new LinkedList();
-		final Collection variables= fModel.getConstraintVariables();
-		final Collection constraints= fModel.getTypeConstraints();
+		fProcessable= new LinkedList<ConstraintVariable2>();
+		final Collection<ConstraintVariable2> variables= fModel.getConstraintVariables();
+		final Collection<ITypeConstraint2> constraints= fModel.getTypeConstraints();
 		final int level= fModel.getCompliance();
 		computeNonCovariantConstraints(constraints, level);
 
@@ -265,10 +265,10 @@ public class SuperTypeConstraintsSolver {
 
 		computeTypeEstimates(variables);
 		fProcessable.addAll(variables);
-		Collection usage= null;
+		Collection<ITypeConstraint2> usage= null;
 		ConstraintVariable2 variable= null;
 		while (!fProcessable.isEmpty()) {
-			variable= (ConstraintVariable2) fProcessable.removeFirst();
+			variable= fProcessable.removeFirst();
 			usage= SuperTypeConstraintsModel.getVariableUsage(variable);
 			if (!usage.isEmpty())
 				processConstraints(usage);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
index c01c9ae..c1424cd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,6 @@ import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.WorkingCopyOwner;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
@@ -99,6 +98,8 @@ import org.eclipse.jdt.internal.corext.refactoring.structure.ImportRewriteUtil;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.CompilationUnitRange;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TypeEnvironment;
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.CastVariable2;
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ITypeConstraintVariable;
 import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
 import org.eclipse.jdt.internal.corext.refactoring.util.TextEditBasedChangeManager;
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
@@ -109,6 +110,7 @@ import org.eclipse.jdt.internal.corext.util.SearchUtils;
 import org.eclipse.jdt.ui.CodeGeneration;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 
 /**
  * Partial implementation of a refactoring processor solving supertype
@@ -149,9 +151,9 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 
 	/**
 	 * The obsolete casts (element type:
-	 * <code>&ltICompilationUnit, Collection&ltCastVariable2&gt&gt</code>)
+	 * <code><ICompilationUnit, Collection<CastVariable2>></code>)
 	 */
-	protected Map fObsoleteCasts= null;
+	protected Map<ICompilationUnit, Collection<CastVariable2>> fObsoleteCasts= null;
 
 	/** The working copy owner */
 	protected final WorkingCopyOwner fOwner= new WorkingCopyOwner() {
@@ -164,16 +166,16 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	protected CodeGenerationSettings fSettings;
 
 	/** The static bindings to import */
-	protected final Set fStaticBindings= new HashSet();
+	protected final Set<IBinding> fStaticBindings= new HashSet<IBinding>();
 
 	/** The type bindings to import */
-	protected final Set fTypeBindings= new HashSet();
+	protected final Set<ITypeBinding> fTypeBindings= new HashSet<ITypeBinding>();
 
 	/**
 	 * The type occurrences (element type:
-	 * <code>&ltICompilationUnit, Collection&ltIDeclaredConstraintVariable&gt&gt</code>)
+	 * <code><ICompilationUnit, Collection<IDeclaredConstraintVariable>></code>)
 	 */
-	protected Map fTypeOccurrences= null;
+	protected Map<ICompilationUnit, Collection<ITypeConstraintVariable>> fTypeOccurrences= null;
 
 	/**
 	 * Creates a new supertype refactoring processor.
@@ -279,7 +281,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 			buffer.append(delimiter);
 			buffer.append('}');
 			final IDocument document= new Document(buffer.toString());
-			final ASTParser parser= ASTParser.newParser(AST.JLS3);
+			final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setSource(document.get().toCharArray());
 			final CompilationUnit unit= (CompilationUnit) parser.createAST(new SubProgressMonitor(monitor, 100));
 			final ASTRewrite targetRewrite= ASTRewrite.create(unit.getAST());
@@ -320,8 +322,8 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 			monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating);
 			final ImportRewrite rewrite= StubUtility.createImportRewrite(unit, true);
 			ITypeBinding type= null;
-			for (final Iterator iterator= fTypeBindings.iterator(); iterator.hasNext();) {
-				type= (ITypeBinding) iterator.next();
+			for (final Iterator<ITypeBinding> iterator= fTypeBindings.iterator(); iterator.hasNext();) {
+				type= iterator.next();
 				if (type.isTypeVariable()) {
 					final ITypeBinding[] bounds= type.getTypeBounds();
 					for (int index= 0; index < bounds.length; index++)
@@ -330,8 +332,8 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 				rewrite.addImport(type);
 			}
 			IBinding binding= null;
-			for (final Iterator iterator= fStaticBindings.iterator(); iterator.hasNext();) {
-				binding= (IBinding) iterator.next();
+			for (final Iterator<IBinding> iterator= fStaticBindings.iterator(); iterator.hasNext();) {
+				binding= iterator.next();
 				rewrite.addStaticImport(binding);
 			}
 			final IDocument document= new Document();
@@ -371,8 +373,8 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 		if (sourceDeclaration instanceof TypeDeclaration) {
 			TypeParameter parameter= null;
 			final ListRewrite rewrite= targetRewrite.getListRewrite(targetDeclaration, TypeDeclaration.TYPE_PARAMETERS_PROPERTY);
-			for (final Iterator iterator= ((TypeDeclaration) sourceDeclaration).typeParameters().iterator(); iterator.hasNext();) {
-				parameter= (TypeParameter) iterator.next();
+			for (final Iterator<TypeParameter> iterator= ((TypeDeclaration) sourceDeclaration).typeParameters().iterator(); iterator.hasNext();) {
+				parameter= iterator.next();
 				rewrite.insertLast(ASTNode.copySubtree(targetRewrite.getAST(), parameter), null);
 				ImportRewriteUtil.collectImports(subType.getJavaProject(), sourceDeclaration, fTypeBindings, fStaticBindings, false);
 			}
@@ -493,6 +495,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void finalize() throws Throwable {
 		resetWorkingCopies();
 	}
@@ -527,13 +530,13 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 *
 	 * @param units
 	 *            the compilation unit map (element type:
-	 *            <code>&ltIJavaProject, Set&ltICompilationUnit&gt&gt</code>)
+	 *            <code><IJavaProject, Set<ICompilationUnit>></code>)
 	 * @param nodes
 	 *            the ast nodes representing the type occurrences
 	 * @throws JavaModelException
 	 *             if an error occurs
 	 */
-	protected final void getFieldReferencingCompilationUnits(final Map units, final ASTNode[] nodes) throws JavaModelException {
+	protected final void getFieldReferencingCompilationUnits(final Map<IJavaProject, Set<ICompilationUnit>> units, final ASTNode[] nodes) throws JavaModelException {
 		ASTNode node= null;
 		IField field= null;
 		IJavaProject project= null;
@@ -541,12 +544,12 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 			node= nodes[index];
 			project= RefactoringASTParser.getCompilationUnit(node).getJavaProject();
 			if (project != null) {
-				final List fields= getReferencingFields(node, project);
+				final List<IField> fields= getReferencingFields(node, project);
 				for (int offset= 0; offset < fields.size(); offset++) {
-					field= (IField) fields.get(offset);
-					Set set= (Set) units.get(project);
+					field= fields.get(offset);
+					Set<ICompilationUnit> set= units.get(project);
 					if (set == null) {
-						set= new HashSet();
+						set= new HashSet<ICompilationUnit>();
 						units.put(project, set);
 					}
 					final ICompilationUnit unit= field.getCompilationUnit();
@@ -563,13 +566,13 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 *
 	 * @param units
 	 *            the compilation unit map (element type:
-	 *            <code>&ltIJavaProject, Set&ltICompilationUnit&gt&gt</code>)
+	 *            <code><IJavaProject, Set<ICompilationUnit>></code>)
 	 * @param nodes
 	 *            the ast nodes representing the type occurrences
 	 * @throws JavaModelException
 	 *             if an error occurs
 	 */
-	protected final void getMethodReferencingCompilationUnits(final Map units, final ASTNode[] nodes) throws JavaModelException {
+	protected final void getMethodReferencingCompilationUnits(final Map<IJavaProject, Set<ICompilationUnit>> units, final ASTNode[] nodes) throws JavaModelException {
 		ASTNode node= null;
 		IMethod method= null;
 		IJavaProject project= null;
@@ -579,9 +582,9 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 			if (project != null) {
 				method= getReferencingMethod(node);
 				if (method != null) {
-					Set set= (Set) units.get(project);
+					Set<ICompilationUnit> set= units.get(project);
 					if (set == null) {
-						set= new HashSet();
+						set= new HashSet<ICompilationUnit>();
 						units.put(project, set);
 					}
 					final ICompilationUnit unit= method.getCompilationUnit();
@@ -602,11 +605,11 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 * @param status
 	 *            the refactoring status
 	 * @return the referenced compilation units (element type:
-	 *         <code>&ltIJavaProject, Collection&ltSearchResultGroup&gt&gt</code>)
+	 *         <code><IJavaProject, Collection<SearchResultGroup>></code>)
 	 * @throws JavaModelException
 	 *             if an error occurs
 	 */
-	protected final Map getReferencingCompilationUnits(final IType type, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
+	protected final Map<IJavaProject, Set<SearchResultGroup>> getReferencingCompilationUnits(final IType type, final IProgressMonitor monitor, final RefactoringStatus status) throws JavaModelException {
 		try {
 			monitor.beginTask("", 100); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
@@ -617,7 +620,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 			engine.setScope(RefactoringScopeFactory.create(type));
 			engine.setPattern(SearchPattern.createPattern(type, IJavaSearchConstants.REFERENCES, SearchUtils.GENERICS_AGNOSTIC_MATCH_RULE));
 			engine.searchPattern(new SubProgressMonitor(monitor, 100));
-			return engine.getAffectedProjects();
+			return (Map<IJavaProject, Set<SearchResultGroup>>) engine.getAffectedProjects();
 		} finally {
 			monitor.done();
 		}
@@ -634,16 +637,16 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 * @throws JavaModelException
 	 *             if an error occurs
 	 */
-	protected final List getReferencingFields(final ASTNode node, final IJavaProject project) throws JavaModelException {
-		List result= Collections.EMPTY_LIST;
+	protected final List<IField> getReferencingFields(final ASTNode node, final IJavaProject project) throws JavaModelException {
+		List<IField> result= Collections.emptyList();
 		if (node instanceof Type) {
 			final BodyDeclaration parent= (BodyDeclaration) ASTNodes.getParent(node, BodyDeclaration.class);
 			if (parent instanceof FieldDeclaration) {
-				final List fragments= ((FieldDeclaration) parent).fragments();
-				result= new ArrayList(fragments.size());
+				final List<VariableDeclarationFragment> fragments= ((FieldDeclaration) parent).fragments();
+				result= new ArrayList<IField>(fragments.size());
 				VariableDeclarationFragment fragment= null;
-				for (final Iterator iterator= fragments.iterator(); iterator.hasNext();) {
-					fragment= (VariableDeclarationFragment) iterator.next();
+				for (final Iterator<VariableDeclarationFragment> iterator= fragments.iterator(); iterator.hasNext();) {
+					fragment= iterator.next();
 					final IField field= getCorrespondingField(fragment);
 					if (field != null)
 						result.add(field);
@@ -716,10 +719,10 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 *            the constraints creator to use
 	 * @param units
 	 *            the compilation unit map (element type:
-	 *            <code>&ltIJavaProject, Set&ltICompilationUnit&gt&gt</code>)
+	 *            <code><IJavaProject, Set<ICompilationUnit>></code>)
 	 * @param groups
 	 *            the search result group map (element type:
-	 *            <code>&ltICompilationUnit, SearchResultGroup&gt</code>)
+	 *            <code><ICompilationUnit, SearchResultGroup></code>)
 	 * @param unit
 	 *            the compilation unit of the subtype
 	 * @param node
@@ -727,13 +730,13 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 * @param monitor
 	 *            the progress monitor to use
 	 */
-	protected final void performFirstPass(final SuperTypeConstraintsCreator creator, final Map units, final Map groups, final ICompilationUnit unit, final CompilationUnit node, final IProgressMonitor monitor) {
+	protected final void performFirstPass(final SuperTypeConstraintsCreator creator, final Map<IJavaProject, Set<ICompilationUnit>> units, final Map<ICompilationUnit, SearchResultGroup> groups, final ICompilationUnit unit, final CompilationUnit node, final IProgressMonitor monitor) {
 		try {
 			monitor.beginTask("", 100); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
 			node.accept(creator);
 			monitor.worked(20);
-			final SearchResultGroup group= (SearchResultGroup) groups.get(unit);
+			final SearchResultGroup group= groups.get(unit);
 			if (group != null) {
 				final ASTNode[] nodes= ASTNodeSearchUtil.getAstNodes(group.getSearchResults(), node);
 				try {
@@ -834,7 +837,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 * @param group
 	 *            the text edit group to use
 	 */
-	protected final void rewriteTypeOccurrence(final CompilationUnitRange range, final TType estimate, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final CompilationUnit copy, final Set replacements, final TextEditGroup group) {
+	protected final void rewriteTypeOccurrence(final CompilationUnitRange range, final TType estimate, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final CompilationUnit copy, final Set<String> replacements, final TextEditGroup group) {
 		ASTNode node= null;
 		IBinding binding= null;
 		final CompilationUnit target= rewrite.getRoot();
@@ -967,7 +970,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 * @throws CoreException
 	 *             if the change could not be generated
 	 */
-	protected abstract void rewriteTypeOccurrences(TextEditBasedChangeManager manager, ASTRequestor requestor, CompilationUnitRewrite rewrite, ICompilationUnit unit, CompilationUnit node, Set replacements, IProgressMonitor monitor) throws CoreException;
+	protected abstract void rewriteTypeOccurrences(TextEditBasedChangeManager manager, ASTRequestor requestor, CompilationUnitRewrite rewrite, ICompilationUnit unit, CompilationUnit node, Set<String> replacements, IProgressMonitor monitor) throws CoreException;
 
 	/**
 	 * Creates the necessary text edits to replace the subtype occurrences by a
@@ -992,37 +995,37 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 	 * @param monitor
 	 *            the progress monitor to use
 	 */
-	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor sourceRequestor, final CompilationUnitRewrite sourceRewrite, final ICompilationUnit subUnit, final CompilationUnit subNode, final Set replacements, final RefactoringStatus status, final IProgressMonitor monitor) {
+	protected final void rewriteTypeOccurrences(final TextEditBasedChangeManager manager, final ASTRequestor sourceRequestor, final CompilationUnitRewrite sourceRewrite, final ICompilationUnit subUnit, final CompilationUnit subNode, final Set<String> replacements, final RefactoringStatus status, final IProgressMonitor monitor) {
 		try {
 			monitor.beginTask("", 300); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating);
 			if (fTypeOccurrences != null) {
-				final Set units= new HashSet(fTypeOccurrences.keySet());
+				final Set<ICompilationUnit> units= new HashSet<ICompilationUnit>(fTypeOccurrences.keySet());
 				if (subUnit != null)
 					units.remove(subUnit);
-				final Map projects= new HashMap();
-				Collection collection= null;
+				final Map<IJavaProject, Collection<ICompilationUnit>> projects= new HashMap<IJavaProject, Collection<ICompilationUnit>>();
+				Collection<ICompilationUnit> collection= null;
 				IJavaProject project= null;
 				ICompilationUnit current= null;
-				for (final Iterator iterator= units.iterator(); iterator.hasNext();) {
-					current= (ICompilationUnit) iterator.next();
+				for (final Iterator<ICompilationUnit> iterator= units.iterator(); iterator.hasNext();) {
+					current= iterator.next();
 					project= current.getJavaProject();
-					collection= (Collection) projects.get(project);
+					collection= projects.get(project);
 					if (collection == null) {
-						collection= new ArrayList();
+						collection= new ArrayList<ICompilationUnit>();
 						projects.put(project, collection);
 					}
 					collection.add(current);
 				}
-				final ASTParser parser= ASTParser.newParser(AST.JLS3);
+				final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 320);
 				try {
-					final Set keySet= projects.keySet();
+					final Set<IJavaProject> keySet= projects.keySet();
 					subMonitor.beginTask("", keySet.size() * 100); //$NON-NLS-1$
 					subMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-					for (final Iterator iterator= keySet.iterator(); iterator.hasNext();) {
-						project= (IJavaProject) iterator.next();
-						collection= (Collection) projects.get(project);
+					for (final Iterator<IJavaProject> iterator= keySet.iterator(); iterator.hasNext();) {
+						project= iterator.next();
+						collection= projects.get(project);
 						parser.setWorkingCopyOwner(fOwner);
 						parser.setResolveBindings(true);
 						parser.setProject(project);
@@ -1031,8 +1034,9 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 						try {
 							subsubMonitor.beginTask("", collection.size() * 100 + 200); //$NON-NLS-1$
 							subsubMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-							parser.createASTs((ICompilationUnit[]) collection.toArray(new ICompilationUnit[collection.size()]), new String[0], new ASTRequestor() {
+							parser.createASTs(collection.toArray(new ICompilationUnit[collection.size()]), new String[0], new ASTRequestor() {
 
+								@Override
 								public final void acceptAST(final ICompilationUnit unit, final CompilationUnit node) {
 									final IProgressMonitor subsubsubMonitor= new SubProgressMonitor(subsubMonitor, 100);
 									try {
@@ -1047,6 +1051,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 									}
 								}
 
+								@Override
 								public final void acceptBinding(final String key, final IBinding binding) {
 									// Do nothing
 								}
@@ -1126,25 +1131,25 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 		try {
 			monitor.beginTask("", 300); //$NON-NLS-1$
 			monitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-			final Map firstPass= getReferencingCompilationUnits(subType, new SubProgressMonitor(monitor, 100), status);
-			final Map secondPass= new HashMap();
+			final Map<IJavaProject, Set<SearchResultGroup>> firstPass= getReferencingCompilationUnits(subType, new SubProgressMonitor(monitor, 100), status);
+			final Map<IJavaProject, Set<ICompilationUnit>> secondPass= new HashMap<IJavaProject, Set<ICompilationUnit>>();
 			IJavaProject project= null;
-			Collection collection= null;
+			Collection<SearchResultGroup> collection= null;
 			try {
-				final ASTParser parser= ASTParser.newParser(AST.JLS3);
+				final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				Object element= null;
 				ICompilationUnit current= null;
 				SearchResultGroup group= null;
 				SearchMatch[] matches= null;
-				final Map groups= new HashMap();
-				for (final Iterator outer= firstPass.keySet().iterator(); outer.hasNext();) {
-					project= (IJavaProject) outer.next();
+				final Map<ICompilationUnit, SearchResultGroup> groups= new HashMap<ICompilationUnit, SearchResultGroup>();
+				for (final Iterator<IJavaProject> outer= firstPass.keySet().iterator(); outer.hasNext();) {
+					project= outer.next();
 					if (level == 3 && !JavaModelUtil.is50OrHigher(project))
 						level= 2;
-					collection= (Collection) firstPass.get(project);
+					collection= firstPass.get(project);
 					if (collection != null) {
-						for (final Iterator inner= collection.iterator(); inner.hasNext();) {
-							group= (SearchResultGroup) inner.next();
+						for (final Iterator<SearchResultGroup> inner= collection.iterator(); inner.hasNext();) {
+							group= inner.next();
 							matches= group.getSearchResults();
 							for (int index= 0; index < matches.length; index++) {
 								element= matches[index].getElement();
@@ -1157,23 +1162,23 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 						}
 					}
 				}
-				Set units= null;
-				final Set processed= new HashSet();
+				Set<ICompilationUnit> units= null;
+				final Set<ICompilationUnit> processed= new HashSet<ICompilationUnit>();
 				if (subUnit != null)
 					processed.add(subUnit);
 				model.beginCreation();
 				IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 120);
 				try {
-					final Set keySet= firstPass.keySet();
+					final Set<IJavaProject> keySet= firstPass.keySet();
 					subMonitor.beginTask("", keySet.size() * 100); //$NON-NLS-1$
 					subMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-					for (final Iterator outer= keySet.iterator(); outer.hasNext();) {
-						project= (IJavaProject) outer.next();
-						collection= (Collection) firstPass.get(project);
+					for (final Iterator<IJavaProject> outer= keySet.iterator(); outer.hasNext();) {
+						project= outer.next();
+						collection= firstPass.get(project);
 						if (collection != null) {
-							units= new HashSet(collection.size());
-							for (final Iterator inner= collection.iterator(); inner.hasNext();) {
-								group= (SearchResultGroup) inner.next();
+							units= new HashSet<ICompilationUnit>(collection.size());
+							for (final Iterator<SearchResultGroup> inner= collection.iterator(); inner.hasNext();) {
+								group= inner.next();
 								matches= group.getSearchResults();
 								for (int index= 0; index < matches.length; index++) {
 									element= matches[index].getElement();
@@ -1184,16 +1189,16 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 									}
 								}
 							}
-							final List batches= new ArrayList(units);
+							final List<ICompilationUnit> batches= new ArrayList<ICompilationUnit>(units);
 							final int size= batches.size();
 							final int iterations= (size - 1) / SIZE_BATCH + 1;
 							final IProgressMonitor subsubMonitor= new SubProgressMonitor(subMonitor, 100);
 							try {
 								subsubMonitor.beginTask("", iterations * 100); //$NON-NLS-1$
 								subsubMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-								final Map options= RefactoringASTParser.getCompilerOptions(project);
+								final Map<String, String> options= RefactoringASTParser.getCompilerOptions(project);
 								for (int index= 0; index < iterations; index++) {
-									final List iteration= batches.subList(index * SIZE_BATCH, Math.min(size, (index + 1) * SIZE_BATCH));
+									final List<ICompilationUnit> iteration= batches.subList(index * SIZE_BATCH, Math.min(size, (index + 1) * SIZE_BATCH));
 									parser.setWorkingCopyOwner(fOwner);
 									parser.setResolveBindings(true);
 									parser.setProject(project);
@@ -1203,8 +1208,9 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 										final int count= iteration.size();
 										subsubsubMonitor.beginTask("", count * 100); //$NON-NLS-1$
 										subsubsubMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-										parser.createASTs((ICompilationUnit[]) iteration.toArray(new ICompilationUnit[count]), new String[0], new ASTRequestor() {
+										parser.createASTs(iteration.toArray(new ICompilationUnit[count]), new String[0], new ASTRequestor() {
 
+											@Override
 											public final void acceptAST(final ICompilationUnit unit, final CompilationUnit node) {
 												if (!processed.contains(unit)) {
 													performFirstPass(creator, secondPass, groups, unit, node, new SubProgressMonitor(subsubsubMonitor, 100));
@@ -1213,6 +1219,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 													subsubsubMonitor.worked(100);
 											}
 
+											@Override
 											public final void acceptBinding(final String key, final IBinding binding) {
 												// Do nothing
 											}
@@ -1234,25 +1241,27 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 					performFirstPass(creator, secondPass, groups, subUnit, subNode, new SubProgressMonitor(subMonitor, 20));
 				subMonitor= new SubProgressMonitor(monitor, 100);
 				try {
-					final Set keySet= secondPass.keySet();
+					final Set<IJavaProject> keySet= secondPass.keySet();
 					subMonitor.beginTask("", keySet.size() * 100); //$NON-NLS-1$
 					subMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-					for (final Iterator iterator= keySet.iterator(); iterator.hasNext();) {
-						project= (IJavaProject) iterator.next();
+					for (final Iterator<IJavaProject> iterator= keySet.iterator(); iterator.hasNext();) {
+						project= iterator.next();
 						if (level == 3 && !JavaModelUtil.is50OrHigher(project))
 							level= 2;
-						collection= (Collection) secondPass.get(project);
-						if (collection != null) {
+						Collection<ICompilationUnit> cuCollection= null;
+						cuCollection= secondPass.get(project);
+						if (cuCollection != null) {
 							parser.setWorkingCopyOwner(fOwner);
 							parser.setResolveBindings(true);
 							parser.setProject(project);
 							parser.setCompilerOptions(RefactoringASTParser.getCompilerOptions(project));
 							final IProgressMonitor subsubMonitor= new SubProgressMonitor(subMonitor, 100);
 							try {
-								subsubMonitor.beginTask("", collection.size() * 100); //$NON-NLS-1$
+								subsubMonitor.beginTask("", cuCollection.size() * 100); //$NON-NLS-1$
 								subsubMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-								parser.createASTs((ICompilationUnit[]) collection.toArray(new ICompilationUnit[collection.size()]), new String[0], new ASTRequestor() {
+								parser.createASTs(cuCollection.toArray(new ICompilationUnit[cuCollection.size()]), new String[0], new ASTRequestor() {
 
+									@Override
 									public final void acceptAST(final ICompilationUnit unit, final CompilationUnit node) {
 										if (!processed.contains(unit))
 											performSecondPass(creator, unit, node, new SubProgressMonitor(subsubMonitor, 100));
@@ -1260,6 +1269,7 @@ public abstract class SuperTypeRefactoringProcessor extends RefactoringProcessor
 											subsubMonitor.worked(100);
 									}
 
+									@Override
 									public final void acceptBinding(final String key, final IBinding binding) {
 										// Do nothing
 									}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeSet.java
index b3030b7..591ed18 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public abstract class SuperTypeSet implements ITypeSet {
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public final String toString() {
 			return "EMPTY"; //$NON-NLS-1$
 		}
@@ -133,6 +134,7 @@ public abstract class SuperTypeSet implements ITypeSet {
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public final String toString() {
 			return fType.getPrettySignature();
 		}
@@ -207,6 +209,7 @@ public abstract class SuperTypeSet implements ITypeSet {
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public final String toString() {
 			return "[" + fSubType.getPrettySignature() + ", " + fSuperType.getPrettySignature() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
@@ -239,6 +242,7 @@ public abstract class SuperTypeSet implements ITypeSet {
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public final String toString() {
 			return "UNIVERSE"; //$NON-NLS-1$
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java
index 75c8097..2d3b61b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,10 +38,10 @@ public class ExceptionAnalyzer extends AbstractExceptionAnalyzer {
 
 	private Selection fSelection;
 
-	private static class ExceptionComparator implements Comparator {
-		public int compare(Object o1, Object o2) {
-			int d1= getDepth((ITypeBinding)o1);
-			int d2= getDepth((ITypeBinding)o2);
+	private static class ExceptionComparator implements Comparator<ITypeBinding> {
+		public int compare(ITypeBinding o1, ITypeBinding o2) {
+			int d1= getDepth(o1);
+			int d2= getDepth(o2);
 			if (d1 < d2)
 				return 1;
 			if (d1 > d2)
@@ -66,14 +66,14 @@ public class ExceptionAnalyzer extends AbstractExceptionAnalyzer {
 	public static ITypeBinding[] perform(BodyDeclaration enclosingNode, Selection selection) {
 		ExceptionAnalyzer analyzer= new ExceptionAnalyzer(selection);
 		enclosingNode.accept(analyzer);
-		List exceptions= analyzer.getCurrentExceptions();
+		List<ITypeBinding> exceptions= analyzer.getCurrentExceptions();
 		if (enclosingNode.getNodeType() == ASTNode.METHOD_DECLARATION) {
-			List thrownExceptions= ((MethodDeclaration)enclosingNode).thrownExceptions();
-			for (Iterator thrown= thrownExceptions.iterator(); thrown.hasNext();) {
-				ITypeBinding thrownException= ((Name)thrown.next()).resolveTypeBinding();
+			List<Name> thrownExceptions= ((MethodDeclaration)enclosingNode).thrownExceptions();
+			for (Iterator<Name> thrown= thrownExceptions.iterator(); thrown.hasNext();) {
+				ITypeBinding thrownException= thrown.next().resolveTypeBinding();
 				if (thrownException != null) {
-					for (Iterator excep= exceptions.iterator(); excep.hasNext();) {
-						ITypeBinding exception= (ITypeBinding) excep.next();
+					for (Iterator<ITypeBinding> excep= exceptions.iterator(); excep.hasNext();) {
+						ITypeBinding exception= excep.next();
 						if (exception.isAssignmentCompatible(thrownException))
 							excep.remove();
 					}
@@ -81,9 +81,10 @@ public class ExceptionAnalyzer extends AbstractExceptionAnalyzer {
 			}
 		}
 		Collections.sort(exceptions, new ExceptionComparator());
-		return (ITypeBinding[]) exceptions.toArray(new ITypeBinding[exceptions.size()]);
+		return exceptions.toArray(new ITypeBinding[exceptions.size()]);
 	}
 
+	@Override
 	public boolean visit(ThrowStatement node) {
 		ITypeBinding exception= node.getExpression().resolveTypeBinding();
 		if (!isSelected(node) || exception == null || Bindings.isRuntimeException(exception)) // Safety net for null bindings when compiling fails.
@@ -93,30 +94,35 @@ public class ExceptionAnalyzer extends AbstractExceptionAnalyzer {
 		return true;
 	}
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		if (!isSelected(node))
 			return false;
 		return handleExceptions(node.resolveMethodBinding());
 	}
 
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		if (!isSelected(node))
 			return false;
 		return handleExceptions(node.resolveMethodBinding());
 	}
 
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		if (!isSelected(node))
 			return false;
 		return handleExceptions(node.resolveConstructorBinding());
 	}
 
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		if (!isSelected(node))
 			return false;
 		return handleExceptions(node.resolveConstructorBinding());
 	}
 
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		if (!isSelected(node))
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/LocalDeclarationAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/LocalDeclarationAnalyzer.java
index 1c5e059..7f235fd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/LocalDeclarationAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/LocalDeclarationAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,19 +27,20 @@ import org.eclipse.jdt.internal.corext.dom.Selection;
 public class LocalDeclarationAnalyzer extends ASTVisitor {
 
 	private Selection fSelection;
-	private List fAffectedLocals;
+	private List<VariableDeclaration> fAffectedLocals;
 
 	public static VariableDeclaration[] perform(BodyDeclaration parent, Selection selection) {
 		LocalDeclarationAnalyzer analyzer= new LocalDeclarationAnalyzer(selection);
 		parent.accept(analyzer);
-		return (VariableDeclaration[]) analyzer.fAffectedLocals.toArray(new VariableDeclaration[analyzer.fAffectedLocals.size()]);
+		return analyzer.fAffectedLocals.toArray(new VariableDeclaration[analyzer.fAffectedLocals.size()]);
 	}
 
 	private LocalDeclarationAnalyzer(Selection selection) {
 		fSelection= selection;
-		fAffectedLocals= new ArrayList(1);
+		fAffectedLocals= new ArrayList<VariableDeclaration>(1);
 	}
 
+	@Override
 	public boolean visit(SimpleName node) {
 		IVariableBinding binding= null;
 		if (node.isDeclaration() || !considerNode(node) || (binding= ASTNodes.getLocalVariableBinding(node)) == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithAnalyzer.java
index 12e26f2..625788d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ public class SurroundWithAnalyzer extends CodeAnalyzer {
 
 	public Statement[] getSelectedStatements() {
 		if (hasSelectedNodes()) {
-			return (Statement[])internalGetSelectedNodes().toArray(new Statement[internalGetSelectedNodes().size()]);
+			return internalGetSelectedNodes().toArray(new Statement[internalGetSelectedNodes().size()]);
 		} else {
 			return new Statement[0];
 		}
@@ -62,10 +62,12 @@ public class SurroundWithAnalyzer extends CodeAnalyzer {
 		return (BodyDeclaration)ASTNodes.getParent(node, BodyDeclaration.class);
 	}
 
+	@Override
 	protected boolean handleSelectionEndsIn(ASTNode node) {
 		return true;
 	}
 
+	@Override
 	public void endVisit(CompilationUnit node) {
 		postProcessSelectedNodes(internalGetSelectedNodes());
 		BodyDeclaration enclosingNode= null;
@@ -99,6 +101,7 @@ public class SurroundWithAnalyzer extends CodeAnalyzer {
 		super.endVisit(node);
 	}
 
+	@Override
 	public void endVisit(SuperConstructorInvocation node) {
 		if (getSelection().getEndVisitSelectionMode(node) == Selection.SELECTED) {
 			invalidSelection(RefactoringCoreMessages.SurroundWithTryCatchAnalyzer_cannotHandleSuper, JavaStatusContext.create(fCUnit, node));
@@ -106,6 +109,7 @@ public class SurroundWithAnalyzer extends CodeAnalyzer {
 		super.endVisit(node);
 	}
 
+	@Override
 	public void endVisit(ConstructorInvocation node) {
 		if (getSelection().getEndVisitSelectionMode(node) == Selection.SELECTED) {
 			invalidSelection(RefactoringCoreMessages.SurroundWithTryCatchAnalyzer_cannotHandleThis, JavaStatusContext.create(fCUnit, node));
@@ -113,11 +117,11 @@ public class SurroundWithAnalyzer extends CodeAnalyzer {
 		super.endVisit(node);
 	}
 
-	protected void postProcessSelectedNodes(List selectedNodes) {
+	protected void postProcessSelectedNodes(List<ASTNode> selectedNodes) {
 		if (selectedNodes == null || selectedNodes.size() == 0)
 			return;
 		if (selectedNodes.size() == 1) {
-			ASTNode node= (ASTNode)selectedNodes.get(0);
+			ASTNode node= selectedNodes.get(0);
 			if (node instanceof Expression && node.getParent() instanceof ExpressionStatement) {
 				selectedNodes.clear();
 				selectedNodes.add(node.getParent());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchAnalyzer.java
index bf56c8d..97d8fa8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class SurroundWithTryCatchAnalyzer extends SurroundWithAnalyzer {
 		return fExceptions;
 	}
 
+	@Override
 	public void endVisit(CompilationUnit node) {
 		BodyDeclaration enclosingNode= null;
 		if (!getStatus().hasFatalError() && hasSelectedNodes())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java
index 91b47da..7dfa9e7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ import org.eclipse.jdt.core.dom.CatchClause;
 import org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.Modifier;
@@ -50,8 +51,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
@@ -67,6 +68,8 @@ import org.eclipse.jdt.internal.corext.refactoring.util.ResourceUtil;
 import org.eclipse.jdt.internal.corext.refactoring.util.SelectionAwareSourceRangeComputer;
 import org.eclipse.jdt.internal.corext.util.Strings;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 /**
  * Surround a set of statements with a try/catch block.
  *
@@ -129,6 +132,7 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 	/* non Java-doc
 	 * @see IRefactoring#getName()
 	 */
+	@Override
 	public String getName() {
 		return RefactoringCoreMessages.SurroundWithTryCatchRefactoring_name;
 	}
@@ -147,14 +151,16 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 	/*
 	 * @see Refactoring#checkActivation(IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
-		CompilationUnit rootNode= new RefactoringASTParser(AST.JLS3).parse(fCUnit, true, pm);
+		CompilationUnit rootNode= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(fCUnit, true, pm);
 		return checkActivationBasics(rootNode);
 	}
 
 	/*
 	 * @see Refactoring#checkInput(IProgressMonitor)
 	 */
+	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		return Checks.validateModifiesFiles(
 			ResourceUtil.getFiles(new ICompilationUnit[]{fCUnit}),
@@ -164,6 +170,7 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 	/* non Java-doc
 	 * @see IRefactoring#createChange(IProgressMonitor)
 	 */
+	@Override
 	public Change createChange(IProgressMonitor pm) throws CoreException {
 		final String NN= ""; //$NON-NLS-1$
 		if (pm == null) pm= new NullProgressMonitor();
@@ -208,7 +215,7 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 	}
 
 	private void createTryCatchStatement(org.eclipse.jdt.core.IBuffer buffer, String lineDelimiter) throws CoreException {
-		List result= new ArrayList(1);
+		List<Statement> result= new ArrayList<Statement>(1);
 		TryStatement tryStatement= getAST().newTryStatement();
 		ITypeBinding[] exceptions= fAnalyzer.getExceptions();
 		ImportRewriteContext context= new ContextSensitiveImportRewriteContext(fAnalyzer.getEnclosingBodyDeclaration(), fImportRewrite);
@@ -231,7 +238,7 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 			fLinkedProposalModel.getPositionGroup(GROUP_EXC_TYPE + i, true).addPosition(fRewriter.track(decl.getType()), i == 0);
 			fLinkedProposalModel.getPositionGroup(GROUP_EXC_NAME + i, true).addPosition(fRewriter.track(decl.getName()), false);
 		}
-		List variableDeclarations= getSpecialVariableDeclarationStatements();
+		List<ASTNode> variableDeclarations= getSpecialVariableDeclarationStatements();
 		ListRewrite statements= fRewriter.getListRewrite(tryStatement.getBody(), Block.STATEMENTS_PROPERTY);
 		boolean selectedNodeRemoved= false;
 		ASTNode expressionStatement= null;
@@ -242,16 +249,16 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 				VariableDeclarationStatement statement= (VariableDeclarationStatement)node;
 				// Create a copy and remove the initializer
 				VariableDeclarationStatement copy= (VariableDeclarationStatement)ASTNode.copySubtree(ast, statement);
-				List modifiers= copy.modifiers();
-				for (Iterator iter= modifiers.iterator(); iter.hasNext();) {
-					IExtendedModifier modifier= (IExtendedModifier) iter.next();
+				List<IExtendedModifier> modifiers= copy.modifiers();
+				for (Iterator<IExtendedModifier> iter= modifiers.iterator(); iter.hasNext();) {
+					IExtendedModifier modifier= iter.next();
 					if (modifier.isModifier() && Modifier.isFinal(((Modifier)modifier).getKeyword().toFlagValue())) {
 						iter.remove();
 					}
 				}
-				List fragments= copy.fragments();
-				for (Iterator iter= fragments.iterator(); iter.hasNext();) {
-					VariableDeclarationFragment fragment= (VariableDeclarationFragment)iter.next();
+				List<VariableDeclarationFragment> fragments= copy.fragments();
+				for (Iterator<VariableDeclarationFragment> iter= fragments.iterator(); iter.hasNext();) {
+					VariableDeclarationFragment fragment= iter.next();
 					fragment.setInitializer(null);
 				}
 				CompilationUnit root= (CompilationUnit)statement.getRoot();
@@ -268,9 +275,9 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 				// convert the fragments into expression statements
 				fragments= statement.fragments();
 				if (!fragments.isEmpty()) {
-					List newExpressionStatements= new ArrayList();
-					for (Iterator iter= fragments.iterator(); iter.hasNext();) {
-						VariableDeclarationFragment fragment= (VariableDeclarationFragment)iter.next();
+					List<ExpressionStatement> newExpressionStatements= new ArrayList<ExpressionStatement>();
+					for (Iterator<VariableDeclarationFragment> iter= fragments.iterator(); iter.hasNext();) {
+						VariableDeclarationFragment fragment= iter.next();
 						Expression initializer= fragment.getInitializer();
 						if (initializer != null) {
 							Assignment assignment= ast.newAssignment();
@@ -281,11 +288,11 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 					}
 					if (!newExpressionStatements.isEmpty()) {
 						if (fSelectedNodes.length == 1) {
-							expressionStatement= fRewriter.createGroupNode((ASTNode[])newExpressionStatements.toArray(new ASTNode[newExpressionStatements.size()]));
+							expressionStatement= fRewriter.createGroupNode(newExpressionStatements.toArray(new ASTNode[newExpressionStatements.size()]));
 						} else {
 							fRewriter.replace(
 								statement,
-								fRewriter.createGroupNode((ASTNode[])newExpressionStatements.toArray(new ASTNode[newExpressionStatements.size()])),
+								fRewriter.createGroupNode(newExpressionStatements.toArray(new ASTNode[newExpressionStatements.size()])),
 								null);
 						}
 					} else {
@@ -301,9 +308,9 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 		result.add(tryStatement);
 		ASTNode replacementNode;
 		if (result.size() == 1) {
-			replacementNode= (ASTNode)result.get(0);
+			replacementNode= result.get(0);
 		} else {
-			replacementNode= fRewriter.createGroupNode((ASTNode[])result.toArray(new ASTNode[result.size()]));
+			replacementNode= fRewriter.createGroupNode(result.toArray(new ASTNode[result.size()]));
 		}
 		if (fSelectedNodes.length == 1) {
 			if (expressionStatement != null) {
@@ -324,8 +331,8 @@ public class SurroundWithTryCatchRefactoring extends Refactoring {
 		}
 	}
 
-	private List getSpecialVariableDeclarationStatements() {
-		List result= new ArrayList(3);
+	private List<ASTNode> getSpecialVariableDeclarationStatements() {
+		List<ASTNode> result= new ArrayList<ASTNode>(3);
 		VariableDeclaration[] locals= fAnalyzer.getAffectedLocals();
 		for (int i= 0; i < locals.length; i++) {
 			ASTNode parent= locals[i].getParent();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ASTCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ASTCreator.java
index 40e7e8a..aec4731 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ASTCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ASTCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,13 +12,14 @@ package org.eclipse.jdt.internal.corext.refactoring.typeconstraints;
 
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.WorkingCopyOwner;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 
 import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
+
 
 public class ASTCreator {
 
@@ -35,7 +36,7 @@ public class ASTCreator {
 	}
 
 	private static CompilationUnit getCuNode(WorkingCopyOwner workingCopyOwner, ICompilationUnit cu) {
-		ASTParser p = ASTParser.newParser(AST.JLS3);
+		ASTParser p = ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		p.setSource(cu);
 		p.setResolveBindings(true);
 		p.setWorkingCopyOwner(workingCopyOwner);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompilationUnitRange.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompilationUnitRange.java
index 10fb6d0..96ee56f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompilationUnitRange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompilationUnitRange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,10 +56,12 @@ public final class CompilationUnitRange {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return "(" + fSourceRange.toString() + " in " + fCompilationUnit.getElementName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
@@ -69,6 +71,7 @@ public final class CompilationUnitRange {
 		return fCompilationUnit.equals(other.fCompilationUnit) && fSourceRange.equals(other.fSourceRange);
 	}
 
+	@Override
 	public int hashCode() {
 		return (37 * fCompilationUnit.hashCode()) ^ fSourceRange.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java
index 290ab62..139365b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,14 +27,14 @@ public class CompositeOrTypeConstraint implements ITypeConstraint{
 	}
 
 	private static ITypeConstraint[] getCopy(ITypeConstraint[] constraints) {
-		List l= Arrays.asList(constraints);
-		return (ITypeConstraint[]) l.toArray(new ITypeConstraint[l.size()]);
+		List<ITypeConstraint> l= Arrays.asList(constraints);
+		return l.toArray(new ITypeConstraint[l.size()]);
 	}
 
 	private static ITypeConstraint[] sort(ITypeConstraint[] constraints) {
 		//TODO bogus to sort by toString - will have to come up with something better
-		Arrays.sort(constraints, new Comparator(){
-			public int compare(Object o1, Object o2) {
+		Arrays.sort(constraints, new Comparator<ITypeConstraint>(){
+			public int compare(ITypeConstraint o1, ITypeConstraint o2) {
 				return o2.toString().compareTo(o1.toString());
 			}
 		});
@@ -65,6 +65,7 @@ public class CompositeOrTypeConstraint implements ITypeConstraint{
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		StringBuffer buff= new StringBuffer();
 		for (int i= 0; i < fConstraints.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCollector.java
index 378c831..5859efc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCollector.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCollector.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,7 +87,7 @@ import org.eclipse.jdt.core.dom.WhileStatement;
 public final class ConstraintCollector extends ASTVisitor {
 
 	private final ConstraintCreator fCreator;
-	private final Set fConstraints;
+	private final Set<ITypeConstraint> fConstraints;
 
 	public ConstraintCollector() {
 		this(new FullConstraintCreator());
@@ -96,7 +96,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	public ConstraintCollector(ConstraintCreator creator) {
 		Assert.isNotNull(creator);
 		fCreator= creator;
-		fConstraints= new LinkedHashSet();
+		fConstraints= new LinkedHashSet<ITypeConstraint>();
 	}
 
 	private void add(ITypeConstraint[] constraints){
@@ -108,7 +108,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	}
 
 	public ITypeConstraint[] getConstraints(){
-		return (ITypeConstraint[]) fConstraints.toArray(new ITypeConstraint[fConstraints.size()]);
+		return fConstraints.toArray(new ITypeConstraint[fConstraints.size()]);
 	}
 
 	//------------------------- visit methods -------------------------//
@@ -116,6 +116,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AnonymousClassDeclaration)
 	 */
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		add(fCreator.create(node));
 		return true;
@@ -124,6 +125,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayAccess)
 	 */
+	@Override
 	public boolean visit(ArrayAccess node) {
 		add(fCreator.create(node));
 		return true;
@@ -132,6 +134,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayCreation)
 	 */
+	@Override
 	public boolean visit(ArrayCreation node) {
 		add(fCreator.create(node));
 		return true;
@@ -140,6 +143,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayInitializer)
 	 */
+	@Override
 	public boolean visit(ArrayInitializer node) {
 		add(fCreator.create(node));
 		return true;
@@ -148,6 +152,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayType)
 	 */
+	@Override
 	public boolean visit(ArrayType node) {
 		add(fCreator.create(node));
 		return true;
@@ -156,6 +161,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AssertStatement)
 	 */
+	@Override
 	public boolean visit(AssertStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -164,6 +170,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Assignment)
 	 */
+	@Override
 	public boolean visit(Assignment node) {
 		add(fCreator.create(node));
 		return true;
@@ -172,6 +179,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Block)
 	 */
+	@Override
 	public boolean visit(Block node) {
 		add(fCreator.create(node));
 		return true;
@@ -180,6 +188,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.BooleanLiteral)
 	 */
+	@Override
 	public boolean visit(BooleanLiteral node) {
 		add(fCreator.create(node));
 		return true;
@@ -188,6 +197,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.BreakStatement)
 	 */
+	@Override
 	public boolean visit(BreakStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -196,6 +206,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CastExpression)
 	 */
+	@Override
 	public boolean visit(CastExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -204,6 +215,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CatchClause)
 	 */
+	@Override
 	public boolean visit(CatchClause node) {
 		add(fCreator.create(node));
 		return true;
@@ -212,6 +224,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CharacterLiteral)
 	 */
+	@Override
 	public boolean visit(CharacterLiteral node) {
 		add(fCreator.create(node));
 		return true;
@@ -220,6 +233,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ClassInstanceCreation)
 	 */
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		add(fCreator.create(node));
 		return true;
@@ -228,6 +242,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CompilationUnit)
 	 */
+	@Override
 	public boolean visit(CompilationUnit node) {
 		add(fCreator.create(node));
 		return true;
@@ -236,6 +251,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConditionalExpression)
 	 */
+	@Override
 	public boolean visit(ConditionalExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -244,6 +260,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConstructorInvocation)
 	 */
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		add(fCreator.create(node));
 		return true;
@@ -252,6 +269,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ContinueStatement)
 	 */
+	@Override
 	public boolean visit(ContinueStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -260,6 +278,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.DoStatement)
 	 */
+	@Override
 	public boolean visit(DoStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -268,6 +287,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.EmptyStatement)
 	 */
+	@Override
 	public boolean visit(EmptyStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -276,6 +296,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ExpressionStatement)
 	 */
+	@Override
 	public boolean visit(ExpressionStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -284,6 +305,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.FieldAccess)
 	 */
+	@Override
 	public boolean visit(FieldAccess node) {
 		add(fCreator.create(node));
 		return true;
@@ -292,6 +314,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.FieldDeclaration)
 	 */
+	@Override
 	public boolean visit(FieldDeclaration node) {
 		add(fCreator.create(node));
 		return true;
@@ -300,6 +323,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ForStatement)
 	 */
+	@Override
 	public boolean visit(ForStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -308,6 +332,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.IfStatement)
 	 */
+	@Override
 	public boolean visit(IfStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -316,6 +341,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ImportDeclaration)
 	 */
+	@Override
 	public boolean visit(ImportDeclaration node) {
 		add(fCreator.create(node));
 		return true;
@@ -324,6 +350,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.InfixExpression)
 	 */
+	@Override
 	public boolean visit(InfixExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -332,6 +359,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Initializer)
 	 */
+	@Override
 	public boolean visit(Initializer node) {
 		add(fCreator.create(node));
 		return true;
@@ -340,6 +368,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.InstanceofExpression)
 	 */
+	@Override
 	public boolean visit(InstanceofExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -348,6 +377,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Javadoc)
 	 */
+	@Override
 	public boolean visit(Javadoc node) {
 		add(fCreator.create(node));
 		return true;
@@ -356,6 +386,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.LabeledStatement)
 	 */
+	@Override
 	public boolean visit(LabeledStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -364,12 +395,14 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MarkerAnnotation)
 	 */
+	@Override
 	public boolean visit(MarkerAnnotation node) {
 		return false;
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodDeclaration)
 	 */
+	@Override
 	public boolean visit(MethodDeclaration node) {
 		add(fCreator.create(node));
 		return true;
@@ -378,6 +411,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodInvocation)
 	 */
+	@Override
 	public boolean visit(MethodInvocation node) {
 		add(fCreator.create(node));
 		return true;
@@ -385,12 +419,14 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.NormalAnnotation)
 	 */
+	@Override
 	public boolean visit(NormalAnnotation node) {
 		return false;
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.NullLiteral)
 	 */
+	@Override
 	public boolean visit(NullLiteral node) {
 		add(fCreator.create(node));
 		return true;
@@ -399,6 +435,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.NumberLiteral)
 	 */
+	@Override
 	public boolean visit(NumberLiteral node) {
 		add(fCreator.create(node));
 		return true;
@@ -407,6 +444,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PackageDeclaration)
 	 */
+	@Override
 	public boolean visit(PackageDeclaration node) {
 		add(fCreator.create(node));
 		return true;
@@ -415,6 +453,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ParenthesizedExpression)
 	 */
+	@Override
 	public boolean visit(ParenthesizedExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -423,6 +462,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PostfixExpression)
 	 */
+	@Override
 	public boolean visit(PostfixExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -431,6 +471,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PrefixExpression)
 	 */
+	@Override
 	public boolean visit(PrefixExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -439,6 +480,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PrimitiveType)
 	 */
+	@Override
 	public boolean visit(PrimitiveType node) {
 		add(fCreator.create(node));
 		return true;
@@ -447,6 +489,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.QualifiedName)
 	 */
+	@Override
 	public boolean visit(QualifiedName node) {
 		add(fCreator.create(node));
 		return true;
@@ -455,6 +498,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ReturnStatement)
 	 */
+	@Override
 	public boolean visit(ReturnStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -463,6 +507,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SimpleName)
 	 */
+	@Override
 	public boolean visit(SimpleName node) {
 		add(fCreator.create(node));
 		return true;
@@ -471,6 +516,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SimpleType)
 	 */
+	@Override
 	public boolean visit(SimpleType node) {
 		add(fCreator.create(node));
 		return true;
@@ -479,6 +525,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SingleMemberAnnotation)
 	 */
+	@Override
 	public boolean visit(SingleMemberAnnotation node) {
 		return false;
 	}
@@ -486,6 +533,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SingleVariableDeclaration)
 	 */
+	@Override
 	public boolean visit(SingleVariableDeclaration node) {
 		add(fCreator.create(node));
 		return true;
@@ -494,6 +542,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.StringLiteral)
 	 */
+	@Override
 	public boolean visit(StringLiteral node) {
 		add(fCreator.create(node));
 		return true;
@@ -502,6 +551,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperConstructorInvocation)
 	 */
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		add(fCreator.create(node));
 		return true;
@@ -510,6 +560,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperFieldAccess)
 	 */
+	@Override
 	public boolean visit(SuperFieldAccess node) {
 		add(fCreator.create(node));
 		return true;
@@ -518,6 +569,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperMethodInvocation)
 	 */
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		add(fCreator.create(node));
 		return true;
@@ -526,6 +578,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SwitchCase)
 	 */
+	@Override
 	public boolean visit(SwitchCase node) {
 		add(fCreator.create(node));
 		return true;
@@ -534,6 +587,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SwitchStatement)
 	 */
+	@Override
 	public boolean visit(SwitchStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -542,6 +596,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SynchronizedStatement)
 	 */
+	@Override
 	public boolean visit(SynchronizedStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -550,6 +605,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ThisExpression)
 	 */
+	@Override
 	public boolean visit(ThisExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -558,6 +614,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ThrowStatement)
 	 */
+	@Override
 	public boolean visit(ThrowStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -566,6 +623,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TryStatement)
 	 */
+	@Override
 	public boolean visit(TryStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -574,6 +632,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeDeclaration)
 	 */
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		add(fCreator.create(node));
 		return true;
@@ -584,6 +643,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeDeclarationStatement)
 	 */
+	@Override
 	public boolean visit(TypeDeclarationStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -592,6 +652,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeLiteral)
 	 */
+	@Override
 	public boolean visit(TypeLiteral node) {
 		add(fCreator.create(node));
 		return true;
@@ -600,6 +661,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationExpression)
 	 */
+	@Override
 	public boolean visit(VariableDeclarationExpression node) {
 		add(fCreator.create(node));
 		return true;
@@ -608,6 +670,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationFragment)
 	 */
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		add(fCreator.create(node));
 		return true;
@@ -616,6 +679,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationStatement)
 	 */
+	@Override
 	public boolean visit(VariableDeclarationStatement node) {
 		add(fCreator.create(node));
 		return true;
@@ -624,6 +688,7 @@ public final class ConstraintCollector extends ASTVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.WhileStatement)
 	 */
+	@Override
 	public boolean visit(WhileStatement node) {
 		add(fCreator.create(node));
 		return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCreator.java
index e61c489..ad98356 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,392 +81,504 @@ public class ConstraintCreator {
 
 	public static final ITypeConstraint[] EMPTY_ARRAY= new ITypeConstraint[0];
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AnonymousClassDeclaration)
 	 */
 	public ITypeConstraint[] create(AnonymousClassDeclaration node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayAccess)
 	 */
 	public ITypeConstraint[] create(ArrayAccess node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayCreation)
 	 */
 	public ITypeConstraint[] create(ArrayCreation node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayInitializer)
 	 */
 	public ITypeConstraint[] create(ArrayInitializer node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayType)
 	 */
 	public ITypeConstraint[] create(ArrayType node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AssertStatement)
 	 */
 	public ITypeConstraint[] create(AssertStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Assignment)
 	 */
 	public ITypeConstraint[] create(Assignment node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Block)
 	 */
 	public ITypeConstraint[] create(Block node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.BooleanLiteral)
 	 */
 	public ITypeConstraint[] create(BooleanLiteral node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.BreakStatement)
 	 */
 	public ITypeConstraint[] create(BreakStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CastExpression)
 	 */
 	public ITypeConstraint[] create(CastExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CatchClause)
 	 */
 	public ITypeConstraint[] create(CatchClause node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CharacterLiteral)
 	 */
 	public ITypeConstraint[] create(CharacterLiteral node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ClassInstanceCreation)
 	 */
 	public ITypeConstraint[] create(ClassInstanceCreation node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CompilationUnit)
 	 */
 	public ITypeConstraint[] create(CompilationUnit node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConditionalExpression)
 	 */
 	public ITypeConstraint[] create(ConditionalExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConstructorInvocation)
 	 */
 	public ITypeConstraint[] create(ConstructorInvocation node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ContinueStatement)
 	 */
 	public ITypeConstraint[] create(ContinueStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.DoStatement)
 	 */
 	public ITypeConstraint[] create(DoStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.EmptyStatement)
 	 */
 	public ITypeConstraint[] create(EmptyStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ExpressionStatement)
 	 */
 	public ITypeConstraint[] create(ExpressionStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.FieldAccess)
 	 */
 	public ITypeConstraint[] create(FieldAccess node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.FieldDeclaration)
 	 */
 	public ITypeConstraint[] create(FieldDeclaration node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ForStatement)
 	 */
 	public ITypeConstraint[] create(ForStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.IfStatement)
 	 */
 	public ITypeConstraint[] create(IfStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ImportDeclaration)
 	 */
 	public ITypeConstraint[] create(ImportDeclaration node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.InfixExpression)
 	 */
 	public ITypeConstraint[] create(InfixExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Initializer)
 	 */
 	public ITypeConstraint[] create(Initializer node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.InstanceofExpression)
 	 */
 	public ITypeConstraint[] create(InstanceofExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Javadoc)
 	 */
 	public ITypeConstraint[] create(Javadoc node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.LabeledStatement)
 	 */
 	public ITypeConstraint[] create(LabeledStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodDeclaration)
 	 */
 	public ITypeConstraint[] create(MethodDeclaration node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodInvocation)
 	 */
 	public ITypeConstraint[] create(MethodInvocation node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.NullLiteral)
 	 */
 	public ITypeConstraint[] create(NullLiteral node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.NumberLiteral)
 	 */
 	public ITypeConstraint[] create(NumberLiteral node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PackageDeclaration)
 	 */
 	public ITypeConstraint[] create(PackageDeclaration node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ParenthesizedExpression)
 	 */
 	public ITypeConstraint[] create(ParenthesizedExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PostfixExpression)
 	 */
 	public ITypeConstraint[] create(PostfixExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PrefixExpression)
 	 */
 	public ITypeConstraint[] create(PrefixExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.PrimitiveType)
 	 */
 	public ITypeConstraint[] create(PrimitiveType node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.QualifiedName)
 	 */
 	public ITypeConstraint[] create(QualifiedName node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ReturnStatement)
 	 */
 	public ITypeConstraint[] create(ReturnStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SimpleName)
 	 */
 	public ITypeConstraint[] create(SimpleName node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SimpleType)
 	 */
 	public ITypeConstraint[] create(SimpleType node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SingleVariableDeclaration)
 	 */
 	public ITypeConstraint[] create(SingleVariableDeclaration node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.StringLiteral)
 	 */
 	public ITypeConstraint[] create(StringLiteral node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperConstructorInvocation)
 	 */
 	public ITypeConstraint[] create(SuperConstructorInvocation node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperFieldAccess)
 	 */
 	public ITypeConstraint[] create(SuperFieldAccess node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperMethodInvocation)
 	 */
 	public ITypeConstraint[] create(SuperMethodInvocation node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SwitchCase)
 	 */
 	public ITypeConstraint[] create(SwitchCase node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SwitchStatement)
 	 */
 	public ITypeConstraint[] create(SwitchStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SynchronizedStatement)
 	 */
 	public ITypeConstraint[] create(SynchronizedStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ThisExpression)
 	 */
 	public ITypeConstraint[] create(ThisExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ThrowStatement)
 	 */
 	public ITypeConstraint[] create(ThrowStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TryStatement)
 	 */
 	public ITypeConstraint[] create(TryStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeDeclaration)
 	 */
 	public ITypeConstraint[] create(TypeDeclaration node) {
@@ -475,42 +587,54 @@ public class ConstraintCreator {
 		// TODO account for enums and annotations
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeDeclarationStatement)
 	 */
 	public ITypeConstraint[] create(TypeDeclarationStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeLiteral)
 	 */
 	public ITypeConstraint[] create(TypeLiteral node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationExpression)
 	 */
 	public ITypeConstraint[] create(VariableDeclarationExpression node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationFragment)
 	 */
 	public ITypeConstraint[] create(VariableDeclarationFragment node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationStatement)
 	 */
 	public ITypeConstraint[] create(VariableDeclarationStatement node) {
 		return EMPTY_ARRAY;
 	}
 
-	/* (non-Javadoc)
+	/**
+	 * @param node the AST node
+	 * @return array of type constraints, may be empty
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.WhileStatement)
 	 */
 	public ITypeConstraint[] create(WhileStatement node) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintOperator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintOperator.java
index 06f1da5..b58d9ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintOperator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintOperator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ public final class ConstraintOperator {
 	private static final String STRING_EQUALS= "==";//$NON-NLS-1$
 	private static final String STRING_DEFINES= "=^=";//$NON-NLS-1$
 	private static final String STRING_STRICT_SUBTYPE= "<";//$NON-NLS-1$
-	private static final Collection fgOperatorStrings= new HashSet(Arrays.asList(new String[] {STRING_SUBTYPE, STRING_EQUALS, STRING_DEFINES, STRING_STRICT_SUBTYPE}));
+	private static final Collection<String> fgOperatorStrings= new HashSet<String>(Arrays.asList(new String[] {STRING_SUBTYPE, STRING_EQUALS, STRING_DEFINES, STRING_STRICT_SUBTYPE}));
 
 	private static final ConstraintOperator fgSubtype= new ConstraintOperator(STRING_SUBTYPE, CODE_SUBTYPE);
 	private static final ConstraintOperator fgEquals= new ConstraintOperator(STRING_EQUALS, CODE_EQUALS);
@@ -68,6 +68,7 @@ public final class ConstraintOperator {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return getOperatorString();
 	}
@@ -75,6 +76,7 @@ public final class ConstraintOperator {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (! (obj instanceof ConstraintOperator))
 			return false;
@@ -85,6 +87,7 @@ public final class ConstraintOperator {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fOperatorString.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariable.java
index cfebf20..f42cd51 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public abstract class ConstraintVariable {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return toResolvedString();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariableFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariableFactory.java
index 1b01aef..984bea1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariableFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ConstraintVariableFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,15 +37,15 @@ import org.eclipse.jdt.internal.corext.dom.Bindings;
  */
 public class ConstraintVariableFactory implements IConstraintVariableFactory {
 
-	private Map/*<IBinding,IBinding>*/ fBindingMap= new HashMap();
+	private Map<IBinding, IBinding> fBindingMap= new HashMap<IBinding, IBinding>();
 
-	private Map/*<IBinding + CompilationUnitRange,ExpressionVariable>*/ fExpressionMap= new Hashtable();
-	private Map/*<Integer,ExpressionVariable>*/ fLiteralMap= new HashMap();
-	private Map/*<CompilationUnitRange,TypeVariable>*/ fTypeVariableMap= new HashMap();
-	private Map/*<String,DeclaringTypeVariable>*/ fDeclaringTypeVariableMap= new HashMap();
-	private Map/*<String,ParameterTypeVariable>*/ fParameterMap= new HashMap();
-	private Map/*<String,RawBindingVariable>*/ fRawBindingMap= new HashMap();
-	private Map/*<String,ReturnTypeVariable>*/ fReturnVariableMap= new HashMap();
+	private Map<Object, ExpressionVariable> fExpressionMap= new Hashtable<Object, ExpressionVariable>();
+	private Map<Integer, ExpressionVariable> fLiteralMap= new HashMap<Integer, ExpressionVariable>();
+	private Map<CompilationUnitRange, TypeVariable> fTypeVariableMap= new HashMap<CompilationUnitRange, TypeVariable>();
+	private Map<String, DeclaringTypeVariable> fDeclaringTypeVariableMap= new HashMap<String, DeclaringTypeVariable>();
+	private Map<String, ParameterTypeVariable> fParameterMap= new HashMap<String, ParameterTypeVariable>();
+	private Map<String, RawBindingVariable> fRawBindingMap= new HashMap<String, RawBindingVariable>();
+	private Map<String, ReturnTypeVariable> fReturnVariableMap= new HashMap<String, ReturnTypeVariable>();
 
 	public static final boolean REPORT= false;
 	protected int nrCreated=0;
@@ -78,7 +78,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 				if (REPORT) nrRetrieved++;
 			}
 			if (REPORT) dumpConstraintStats();
-			return (ExpressionVariable) fLiteralMap.get(nodeType);
+			return fLiteralMap.get(nodeType);
 		}
 
 		// For ExpressionVariables, there are two cases. If the expression has a binding
@@ -91,7 +91,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 		} else {
 			key= new CompilationUnitRange(ASTCreator.getCu(expression), expression);
 		}
-		ev= (ExpressionVariable)fExpressionMap.get(key);
+		ev= fExpressionMap.get(key);
 
 		if (ev != null){
 			if (REPORT) nrRetrieved++;
@@ -111,10 +111,10 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 	//
 	private IBinding getKey(IBinding binding) {
 		if (fBindingMap.containsKey(binding)){
-			return (IBinding)fBindingMap.get(binding);
+			return fBindingMap.get(binding);
 		} else {
-			for (Iterator it= fBindingMap.keySet().iterator(); it.hasNext(); ){
-				IBinding b2= (IBinding)it.next();
+			for (Iterator<IBinding> it= fBindingMap.keySet().iterator(); it.hasNext(); ){
+				IBinding b2= it.next();
 				if (Bindings.equals(binding, b2)){
 					fBindingMap.put(binding, b2);
 					return b2;
@@ -137,7 +137,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (DeclaringTypeVariable)fDeclaringTypeVariableMap.get(key);
+		return fDeclaringTypeVariableMap.get(key);
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.IConstraintVariableFactory#makeDeclaringTypeVariable(org.eclipse.jdt.core.dom.IVariableBinding)
@@ -151,7 +151,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (DeclaringTypeVariable)fDeclaringTypeVariableMap.get(key);
+		return fDeclaringTypeVariableMap.get(key);
 	}
 
 	/* (non-Javadoc)
@@ -166,7 +166,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (DeclaringTypeVariable)fDeclaringTypeVariableMap.get(key);
+		return fDeclaringTypeVariableMap.get(key);
 	}
 
 	/* (non-Javadoc)
@@ -182,7 +182,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (ParameterTypeVariable)fParameterMap.get(key);
+		return fParameterMap.get(key);
 	}
 
 	/* (non-Javadoc)
@@ -197,7 +197,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (RawBindingVariable)fRawBindingMap.get(key);
+		return fRawBindingMap.get(key);
 	}
 
 	/* (non-Javadoc)
@@ -219,7 +219,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (ReturnTypeVariable)fReturnVariableMap.get(key);
+		return fReturnVariableMap.get(key);
 	}
 
 	/* (non-Javadoc)
@@ -236,7 +236,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (TypeVariable) fTypeVariableMap.get(range);
+		return fTypeVariableMap.get(range);
 	}
 
 	/* (non-Javadoc)
@@ -250,7 +250,7 @@ public class ConstraintVariableFactory implements IConstraintVariableFactory {
 			if (REPORT) nrRetrieved++;
 		}
 		if (REPORT) dumpConstraintStats();
-		return (TypeVariable) fTypeVariableMap.get(range);
+		return fTypeVariableMap.get(range);
 	}
 
 	protected void dumpConstraintStats() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/DeclaringTypeVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/DeclaringTypeVariable.java
index 54dcc8c..2fc07b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/DeclaringTypeVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/DeclaringTypeVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class DeclaringTypeVariable extends ConstraintVariable{
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return "Decl(" + Bindings.asString(fMemberBinding) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ExpressionVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ExpressionVariable.java
index 7832469..621ccfd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ExpressionVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ExpressionVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public final class ExpressionVariable extends ConstraintVariable {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return "[" + fSource + "]"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java
index a240099..601f8cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,26 +101,28 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ArrayInitializer)
 	 */
+	@Override
 	public ITypeConstraint[] create(ArrayInitializer arrayInitializer){
 		ITypeBinding arrayBinding= arrayInitializer.resolveTypeBinding();
 		Assert.isTrue(arrayBinding.isArray());
-		List expressions= arrayInitializer.expressions();
-		List/*<ITypeConstraint>*/ constraints= new ArrayList();
+		List<Expression> expressions= arrayInitializer.expressions();
+		List<ITypeConstraint> constraints= new ArrayList<ITypeConstraint>();
 		Type type= getTypeParent(arrayInitializer);
 		ConstraintVariable typeVariable= fConstraintVariableFactory.makeTypeVariable(type);
 		for (int i= 0; i < expressions.size(); i++) {
-			Expression each= (Expression) expressions.get(i);
+			Expression each= expressions.get(i);
 			ITypeConstraint[] c= fTypeConstraintFactory.createSubtypeConstraint(
 					fConstraintVariableFactory.makeExpressionOrTypeVariable(each, getContext()),
 					typeVariable);
 			constraints.addAll(Arrays.asList(c));
 		}
-		return (ITypeConstraint[])constraints.toArray(new ITypeConstraint[constraints.size()]);
+		return constraints.toArray(new ITypeConstraint[constraints.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.Assignment)
 	 */
+	@Override
 	public ITypeConstraint[] create(Assignment assignment){
 		return fTypeConstraintFactory.createSubtypeConstraint(
 				fConstraintVariableFactory.makeExpressionOrTypeVariable(assignment.getRightHandSide(), getContext()),
@@ -130,6 +132,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CastExpression)
 	 */
+	@Override
 	public ITypeConstraint[] create(CastExpression castExpression){
 		Expression expression= castExpression.getExpression();
 		Type type= castExpression.getType();
@@ -143,15 +146,16 @@ public class FullConstraintCreator extends ConstraintCreator{
 				return c2;
 			} else {
 				ITypeConstraint c1 = definesConstraint[0];
-				Collection/*<ITypeConstraint>*/ constraints= new ArrayList();
+				Collection<ITypeConstraint> constraints= new ArrayList<ITypeConstraint>();
 				constraints.add(c1);
 				constraints.addAll(Arrays.asList(c2));
-				return (ITypeConstraint[])constraints.toArray(new ITypeConstraint[constraints.size()]);
+				return constraints.toArray(new ITypeConstraint[constraints.size()]);
 			}
 		} else
 			return definesConstraint;
 	}
 
+	@Override
 	public ITypeConstraint[] create(CatchClause node) {
 		SingleVariableDeclaration exception= node.getException();
 		ConstraintVariable nameVariable= fConstraintVariableFactory.makeExpressionOrTypeVariable(exception.getName(), getContext());
@@ -165,19 +169,20 @@ public class FullConstraintCreator extends ConstraintCreator{
 				nameVariable,
 				fConstraintVariableFactory.makeRawBindingVariable(throwable));
 
-		ArrayList result= new ArrayList();
+		ArrayList<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
 		result.addAll(Arrays.asList(defines));
 		result.addAll(Arrays.asList(catchBound));
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ClassInstanceCreation)
 	 */
+	@Override
 	public ITypeConstraint[] create(ClassInstanceCreation instanceCreation){
-		List arguments= instanceCreation.arguments();
-		List result= new ArrayList(arguments.size());
+		List<Expression> arguments= instanceCreation.arguments();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>(arguments.size());
 		IMethodBinding methodBinding= instanceCreation.resolveConstructorBinding();
 		result.addAll(Arrays.asList(getArgumentConstraints(arguments, methodBinding)));
 		if (instanceCreation.getAnonymousClassDeclaration() == null){
@@ -185,23 +190,25 @@ public class FullConstraintCreator extends ConstraintCreator{
 			ConstraintVariable typeVar= fConstraintVariableFactory.makeRawBindingVariable(instanceCreation.resolveTypeBinding());
 			result.addAll(Arrays.asList(fTypeConstraintFactory.createDefinesConstraint(constructorVar, typeVar)));
 		}
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConstructorInvocation)
 	 */
+	@Override
 	public ITypeConstraint[] create(ConstructorInvocation invocation){
-		List arguments= invocation.arguments();
-		List result= new ArrayList(arguments.size());
+		List<Expression> arguments= invocation.arguments();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>(arguments.size());
 		IMethodBinding methodBinding= invocation.resolveConstructorBinding();
 		result.addAll(Arrays.asList(getArgumentConstraints(arguments, methodBinding)));
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.FieldAccess)
 	 */
+	@Override
 	public ITypeConstraint[] create(FieldAccess access){
 		Expression expression= access.getExpression();
 		SimpleName name= access.getName();
@@ -215,17 +222,19 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.FieldDeclaration)
 	 */
+	@Override
 	public ITypeConstraint[] create(FieldDeclaration fd){
-		List result= new ArrayList();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
 		result.addAll(Arrays.asList(getConstraintsFromFragmentList(fd.fragments(), fd.getType())));
 		result.addAll(getConstraintsForHiding(fd));
 		result.addAll(getConstraintsForFieldDeclaringTypes(fd));
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.InstanceofExpression)
 	 */
+	@Override
 	public ITypeConstraint[] create(InstanceofExpression instanceofExpression){
 		Expression expression= instanceofExpression.getLeftOperand();
 		Type type= instanceofExpression.getRightOperand();
@@ -240,8 +249,9 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConditionalExpression)
 	 */
+	@Override
 	public ITypeConstraint[] create(ConditionalExpression node) {
-		List result= new ArrayList();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
 		Expression thenExpression= node.getThenExpression();
 		Expression elseExpression= node.getElseExpression();
 		ConstraintVariable whole= fConstraintVariableFactory.makeExpressionOrTypeVariable(node, getContext());
@@ -253,14 +263,15 @@ public class FullConstraintCreator extends ConstraintCreator{
 		result.addAll(Arrays.asList(constraints1));
 		result.addAll(Arrays.asList(constraints2));
 		result.addAll(Arrays.asList(constraints3));
-		return (ITypeConstraint[])result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodDeclaration)
 	 */
+	@Override
 	public ITypeConstraint[] create(MethodDeclaration declaration){
-		List result= new ArrayList();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
 		IMethodBinding methodBinding= declaration.resolveBinding();
 		if (methodBinding == null)
 			return new ITypeConstraint[0];
@@ -284,15 +295,16 @@ public class FullConstraintCreator extends ConstraintCreator{
 			result.addAll(Arrays.asList(constraint));
 		}
 		if (MethodChecks.isVirtual(methodBinding)){
-			Collection constraintsForOverriding = getConstraintsForOverriding(methodBinding);
+			Collection<ITypeConstraint> constraintsForOverriding = getConstraintsForOverriding(methodBinding);
 			result.addAll(constraintsForOverriding);
 		}
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.ConstraintCreator#create(org.eclipse.jdt.core.dom.ParenthesizedExpression)
 	 */
+	@Override
 	public ITypeConstraint[] create(ParenthesizedExpression node) {
 		ConstraintVariable v1= fConstraintVariableFactory.makeExpressionOrTypeVariable(node, getContext());
 		ConstraintVariable v2= fConstraintVariableFactory.makeExpressionOrTypeVariable(node.getExpression(), getContext());
@@ -303,9 +315,10 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodInvocation)
 	 */
+	@Override
 	public ITypeConstraint[] create(MethodInvocation invocation){
-		List arguments= invocation.arguments();
-		List result= new ArrayList(arguments.size());
+		List<Expression> arguments= invocation.arguments();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>(arguments.size());
 		IMethodBinding methodBinding= invocation.resolveMethodBinding();
 		if (methodBinding == null)
 			return new ITypeConstraint[0];
@@ -320,13 +333,13 @@ public class FullConstraintCreator extends ConstraintCreator{
 				if (rootDefs.length == 1){
 					result.addAll(Arrays.asList(fTypeConstraintFactory.createSubtypeConstraint(expressionVar, fConstraintVariableFactory.makeDeclaringTypeVariable(rootDefs[0]))));
 				}else{
-					Collection/*<ITypeConstraint>*/ constraints= new ArrayList();
+					Collection<ITypeConstraint> constraints= new ArrayList<ITypeConstraint>();
 					for (int i= 0; i < rootDefs.length; i++) {
 						ConstraintVariable rootDefTypeVar= fConstraintVariableFactory.makeDeclaringTypeVariable(rootDefs[i]);
 						ITypeConstraint[] tc= fTypeConstraintFactory.createSubtypeConstraint(expressionVar, rootDefTypeVar);
 						constraints.addAll(Arrays.asList(tc));
 					}
-					ITypeConstraint[] constraintsArray= (ITypeConstraint[])constraints.toArray(new ITypeConstraint[constraints.size()]);
+					ITypeConstraint[] constraintsArray= constraints.toArray(new ITypeConstraint[constraints.size()]);
 					if (constraintsArray.length > 0){
 						result.add(fTypeConstraintFactory.createCompositeOrTypeConstraint(constraintsArray));
 					}
@@ -337,12 +350,13 @@ public class FullConstraintCreator extends ConstraintCreator{
 				result.addAll(Arrays.asList(fTypeConstraintFactory.createSubtypeConstraint(expressionVar, typeVar)));
 			}
 		}
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.QualifiedName)
 	 */
+	@Override
 	public ITypeConstraint[] create(QualifiedName qualifiedName){
 		SimpleName name= qualifiedName.getName();
 		Name qualifier= qualifiedName.getQualifier();
@@ -358,6 +372,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ReturnStatement)
 	 */
+	@Override
 	public ITypeConstraint[] create(ReturnStatement returnStatement){
 		if (returnStatement.getExpression() == null)
 			return new ITypeConstraint[0];
@@ -371,6 +386,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SingleVariableDeclaration)
 	 */
+	@Override
 	public ITypeConstraint[] create(SingleVariableDeclaration svd){
 		ITypeConstraint[] defines= fTypeConstraintFactory.createDefinesConstraint(
 				fConstraintVariableFactory.makeExpressionOrTypeVariable(svd.getName(), getContext()),
@@ -387,7 +403,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 		} else if (constraints.length == 0){
 			return defines;
 		} else {
-			List all= new ArrayList();
+			List<ITypeConstraint> all= new ArrayList<ITypeConstraint>();
 			all.addAll(Arrays.asList(defines));
 			all.addAll(Arrays.asList(constraints));
 			return (ITypeConstraint[])all.toArray();
@@ -397,17 +413,19 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperConstructorInvocation)
 	 */
+	@Override
 	public ITypeConstraint[] create(SuperConstructorInvocation invocation){
-		List arguments= invocation.arguments();
-		List result= new ArrayList(arguments.size());
+		List<Expression> arguments= invocation.arguments();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>(arguments.size());
 		IMethodBinding methodBinding= invocation.resolveConstructorBinding();
 		result.addAll(Arrays.asList(getArgumentConstraints(arguments, methodBinding)));
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperFieldAccess)
 	 */
+	@Override
 	public ITypeConstraint[] create(SuperFieldAccess access){
 		SimpleName name= access.getName();
 		IBinding binding= name.resolveBinding();
@@ -420,19 +438,21 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SuperMethodInvocation)
 	 */
+	@Override
 	public ITypeConstraint[] create(SuperMethodInvocation invocation){
-		List arguments= invocation.arguments();
-		List result= new ArrayList(arguments.size());
+		List<Expression> arguments= invocation.arguments();
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>(arguments.size());
 		IMethodBinding methodBinding= invocation.resolveMethodBinding();
 		ITypeConstraint[] returnTypeConstraint= getReturnTypeConstraint(invocation, methodBinding);
 		result.addAll(Arrays.asList(returnTypeConstraint));
 		result.addAll(Arrays.asList(getArgumentConstraints(arguments, methodBinding)));
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ThisExpression)
 	 */
+	@Override
 	public ITypeConstraint[] create(ThisExpression expression){
 		ConstraintVariable thisExpression= fConstraintVariableFactory.makeExpressionOrTypeVariable(expression, getContext());
 		ConstraintVariable declaringType= fConstraintVariableFactory.makeRawBindingVariable(expression.resolveTypeBinding());//TODO fix this - can't use Decl(M) because 'this' can live outside of methods
@@ -442,6 +462,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationExpression)
 	 */
+	@Override
 	public ITypeConstraint[] create(VariableDeclarationExpression vde){
 		return getConstraintsFromFragmentList(vde.fragments(), vde.getType());
 	}
@@ -449,6 +470,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationFragment)
 	 */
+	@Override
 	public ITypeConstraint[] create(VariableDeclarationFragment vdf){
 		if (vdf.getInitializer() == null)
 			return new ITypeConstraint[0];
@@ -460,6 +482,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.VariableDeclarationStatement)
 	 */
+	@Override
 	public ITypeConstraint[] create(VariableDeclarationStatement vds){
 		return getConstraintsFromFragmentList(vds.fragments(), vds.getType());
 	}
@@ -467,10 +490,10 @@ public class FullConstraintCreator extends ConstraintCreator{
 
 	//--------- private helpers ----------------//
 
-	private Collection getConstraintsForFieldDeclaringTypes(FieldDeclaration fd) {
-		Collection result= new ArrayList(fd.fragments().size());
-		for (Iterator iter= fd.fragments().iterator(); iter.hasNext();) {
-			VariableDeclarationFragment varDecl= (VariableDeclarationFragment) iter.next();
+	private Collection<ITypeConstraint> getConstraintsForFieldDeclaringTypes(FieldDeclaration fd) {
+		Collection<ITypeConstraint> result= new ArrayList<ITypeConstraint>(fd.fragments().size());
+		for (Iterator<VariableDeclarationFragment> iter= fd.fragments().iterator(); iter.hasNext();) {
+			VariableDeclarationFragment varDecl= iter.next();
 			IVariableBinding binding= varDecl.resolveBinding();
 			Assert.isTrue(binding.isField());
 			result.addAll(Arrays.asList(fTypeConstraintFactory.createDefinesConstraint(
@@ -480,22 +503,22 @@ public class FullConstraintCreator extends ConstraintCreator{
 		return result;
 	}
 
-	private Collection getConstraintsForHiding(FieldDeclaration fd) {
-		Collection result= new ArrayList();
-		for (Iterator iter= fd.fragments().iterator(); iter.hasNext();) {
-			result.addAll(getConstraintsForHiding((VariableDeclarationFragment) iter.next()));
+	private Collection<ITypeConstraint> getConstraintsForHiding(FieldDeclaration fd) {
+		Collection<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
+		for (Iterator<VariableDeclarationFragment> iter= fd.fragments().iterator(); iter.hasNext();) {
+			result.addAll(getConstraintsForHiding(iter.next()));
 		}
 		return result;
 	}
 
-	private Collection getConstraintsForHiding(VariableDeclarationFragment fragment) {
-		Collection result= new ArrayList();
+	private Collection<ITypeConstraint> getConstraintsForHiding(VariableDeclarationFragment fragment) {
+		Collection<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
 		IVariableBinding fieldBinding= fragment.resolveBinding();
 		Assert.isTrue(fieldBinding.isField());
-		Set declaringTypes= getDeclaringSuperTypes(fieldBinding);
+		Set<ITypeBinding> declaringTypes= getDeclaringSuperTypes(fieldBinding);
 		ConstraintVariable hiddingFieldVar= fConstraintVariableFactory.makeDeclaringTypeVariable(fieldBinding);
-		for (Iterator iter= declaringTypes.iterator(); iter.hasNext();) {
-			ITypeBinding declaringSuperType= (ITypeBinding) iter.next();
+		for (Iterator<ITypeBinding> iter= declaringTypes.iterator(); iter.hasNext();) {
+			ITypeBinding declaringSuperType= iter.next();
 			IVariableBinding hiddenField= findField(fieldBinding, declaringSuperType);
 			Assert.isTrue(hiddenField.isField());
 			ConstraintVariable hiddenFieldVar= fConstraintVariableFactory.makeDeclaringTypeVariable(hiddenField);
@@ -504,31 +527,31 @@ public class FullConstraintCreator extends ConstraintCreator{
 		return result;
 	}
 
-	private ITypeConstraint[] getConstraintsFromFragmentList(List fragments, Type type) {
-		int size= fragments.size();
+	private ITypeConstraint[] getConstraintsFromFragmentList(List<VariableDeclarationFragment> list, Type type) {
+		int size= list.size();
 		ConstraintVariable typeVariable= fConstraintVariableFactory.makeTypeVariable(type);
-		List result= new ArrayList((size * (size - 1))/2);
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>((size * (size - 1))/2);
 		for (int i= 0; i < size; i++) {
-			VariableDeclarationFragment fragment1= (VariableDeclarationFragment) fragments.get(i);
+			VariableDeclarationFragment fragment1= list.get(i);
 			SimpleName fragment1Name= fragment1.getName();
 			result.addAll(Arrays.asList(fTypeConstraintFactory.createDefinesConstraint(
 					fConstraintVariableFactory.makeExpressionOrTypeVariable(fragment1Name, getContext()),
 					typeVariable)));
 			for (int j= i + 1; j < size; j++) {
-				VariableDeclarationFragment fragment2= (VariableDeclarationFragment) fragments.get(j);
+				VariableDeclarationFragment fragment2= list.get(j);
 				result.addAll(Arrays.asList(fTypeConstraintFactory.createEqualsConstraint(
 						fConstraintVariableFactory.makeExpressionOrTypeVariable(fragment1Name, getContext()),
 						fConstraintVariableFactory.makeExpressionOrTypeVariable(fragment2.getName(), getContext()))));
 			}
 		}
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
-	private Collection getConstraintsForOverriding(IMethodBinding overridingMethod) {
-		Collection result= new ArrayList();
-		Set declaringSupertypes= getDeclaringSuperTypes(overridingMethod);
-		for (Iterator iter= declaringSupertypes.iterator(); iter.hasNext();) {
-			ITypeBinding superType= (ITypeBinding) iter.next();
+	private Collection<ITypeConstraint> getConstraintsForOverriding(IMethodBinding overridingMethod) {
+		Collection<ITypeConstraint> result= new ArrayList<ITypeConstraint>();
+		Set<ITypeBinding> declaringSupertypes= getDeclaringSuperTypes(overridingMethod);
+		for (Iterator<ITypeBinding> iter= declaringSupertypes.iterator(); iter.hasNext();) {
+			ITypeBinding superType= iter.next();
 			IMethodBinding overriddenMethod= findMethod(overridingMethod, superType);
 			Assert.isNotNull(overriddenMethod);//because we asked for declaring types
 			if (Bindings.equals(overridingMethod, overriddenMethod))
@@ -560,8 +583,8 @@ public class FullConstraintCreator extends ConstraintCreator{
 		return fTypeConstraintFactory.createDefinesConstraint(invocationVariable, returnTypeVariable);
 	}
 
-	private ITypeConstraint[] getArgumentConstraints(List arguments, IMethodBinding methodBinding) {
-		List result= new ArrayList(arguments.size());
+	private ITypeConstraint[] getArgumentConstraints(List<Expression> arguments, IMethodBinding methodBinding) {
+		List<ITypeConstraint> result= new ArrayList<ITypeConstraint>(arguments.size());
 
 		if (methodBinding.isVarargs()) {
 			ITypeBinding[] parameterTypes= methodBinding.getParameterTypes();
@@ -573,7 +596,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 			int i= 0;
 			// add the normal argument constraints up to the last one
 			for (; i < nParams - 1; i++) {
-				Expression argument= (Expression) arguments.get(i);
+				Expression argument= arguments.get(i);
 				ConstraintVariable expressionVariable= fConstraintVariableFactory.makeExpressionOrTypeVariable(argument, getContext());
 				ConstraintVariable parameterTypeVariable= fConstraintVariableFactory.makeParameterTypeVariable(methodBinding, i);
 				ITypeConstraint[] argConstraint= fTypeConstraintFactory.createSubtypeConstraint(expressionVariable, parameterTypeVariable);
@@ -606,7 +629,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 				Assert.isNotNull(componentBinding);
 				ConstraintVariable parameterTypeVariable= fConstraintVariableFactory.makeRawBindingVariable(componentBinding);
 				for (; i < nArgs; i++) {
-					Expression argument= (Expression) arguments.get(i);
+					Expression argument= arguments.get(i);
 					ConstraintVariable expressionVariable= fConstraintVariableFactory.makeExpressionOrTypeVariable(argument, getContext());
 					ITypeConstraint[] argConstraint= fTypeConstraintFactory.createSubtypeConstraint(expressionVariable, parameterTypeVariable);
 					result.addAll(Arrays.asList(argConstraint));
@@ -615,7 +638,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 
 		} else {
 			for (int i= 0, n= arguments.size(); i < n; i++) {
-				Expression argument= (Expression) arguments.get(i);
+				Expression argument= arguments.get(i);
 				ConstraintVariable expressionVariable= fConstraintVariableFactory.makeExpressionOrTypeVariable(argument, getContext());
 				ConstraintVariable parameterTypeVariable= fConstraintVariableFactory.makeParameterTypeVariable(methodBinding, i);
 				ITypeConstraint[] argConstraint= fTypeConstraintFactory.createSubtypeConstraint(expressionVariable, parameterTypeVariable);
@@ -623,7 +646,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 			}
 		}
 
-		return (ITypeConstraint[]) result.toArray(new ITypeConstraint[result.size()]);
+		return result.toArray(new ITypeConstraint[result.size()]);
 	}
 
 	private static Type getTypeParent(ArrayInitializer arrayInitializer) {
@@ -687,9 +710,9 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/*
 	 * return Set of ITypeBindings
 	 */
-	private static Set getDeclaringSuperTypes(IVariableBinding fieldBinding) {
+	private static Set<ITypeBinding> getDeclaringSuperTypes(IVariableBinding fieldBinding) {
 		ITypeBinding[] allSuperTypes= Bindings.getAllSuperTypes(fieldBinding.getDeclaringClass());
-		Set result= new HashSet();
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
 		for (int i= 0; i < allSuperTypes.length; i++) {
 			ITypeBinding type= allSuperTypes[i];
 			if (findField(fieldBinding, type) != null)
@@ -700,10 +723,10 @@ public class FullConstraintCreator extends ConstraintCreator{
 
 	//--- RootDef ----//
 	protected static IMethodBinding[] getRootDefs(IMethodBinding methodBinding) {
-		Set/*<ITypeBinding>*/ declaringSuperTypes= getDeclaringSuperTypes(methodBinding);
-		Set/*<IMethodBinding>*/ result= new LinkedHashSet();
-		for (Iterator iter= declaringSuperTypes.iterator(); iter.hasNext();) {
-			ITypeBinding type= (ITypeBinding) iter.next();
+		Set<ITypeBinding> declaringSuperTypes= getDeclaringSuperTypes(methodBinding);
+		Set<IMethodBinding> result= new LinkedHashSet<IMethodBinding>();
+		for (Iterator<ITypeBinding> iter= declaringSuperTypes.iterator(); iter.hasNext();) {
+			ITypeBinding type= iter.next();
 			if (! containsASuperType(type, declaringSuperTypes))
 				result.add(findMethod(methodBinding, type));
 		}
@@ -711,7 +734,7 @@ public class FullConstraintCreator extends ConstraintCreator{
 		if (result.size() == 0){
 			result.add(methodBinding);
 		}
-		return (IMethodBinding[]) result.toArray(new IMethodBinding[result.size()]);
+		return result.toArray(new IMethodBinding[result.size()]);
 	}
 
 	/*
@@ -719,9 +742,9 @@ public class FullConstraintCreator extends ConstraintCreator{
 	 * @return <code>true</code> iff <code>declaringSuperTypes</code> contains a type
 	 * 		which is a strict supertype of <code>type</code>
 	 */
-	private static boolean containsASuperType(ITypeBinding type, Set declaringSuperTypes) {
-		for (Iterator iter= declaringSuperTypes.iterator(); iter.hasNext();) {
-			ITypeBinding maybeSuperType= (ITypeBinding) iter.next();
+	private static boolean containsASuperType(ITypeBinding type, Set<ITypeBinding> declaringSuperTypes) {
+		for (Iterator<ITypeBinding> iter= declaringSuperTypes.iterator(); iter.hasNext();) {
+			ITypeBinding maybeSuperType= iter.next();
 			if (! Bindings.equals(maybeSuperType, type) && Bindings.isSuperType(maybeSuperType, type))
 				return true;
 		}
@@ -731,15 +754,15 @@ public class FullConstraintCreator extends ConstraintCreator{
 	/*
 	 * return Set of ITypeBindings
 	 */
-	protected static Set getDeclaringSuperTypes(IMethodBinding methodBinding) {
+	protected static Set<ITypeBinding> getDeclaringSuperTypes(IMethodBinding methodBinding) {
 		ITypeBinding superClass = methodBinding.getDeclaringClass();
-		Set allSuperTypes= new LinkedHashSet();
+		Set<ITypeBinding> allSuperTypes= new LinkedHashSet<ITypeBinding>();
 		allSuperTypes.addAll(Arrays.asList(Bindings.getAllSuperTypes(superClass)));
 		if (allSuperTypes.isEmpty())
 			allSuperTypes.add(methodBinding.getDeclaringClass()); //TODO: Why only iff empty? The declaring class is not a supertype ...
-		Set result= new HashSet();
-		for (Iterator iter= allSuperTypes.iterator(); iter.hasNext();) {
-			ITypeBinding type= (ITypeBinding) iter.next();
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
+		for (Iterator<ITypeBinding> iter= allSuperTypes.iterator(); iter.hasNext();) {
+			ITypeBinding type= iter.next();
 			if (findMethod(methodBinding, type) != null)
 				result.add(type);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ParameterTypeVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ParameterTypeVariable.java
index 3d398a3..e411154 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ParameterTypeVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ParameterTypeVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public class ParameterTypeVariable extends ConstraintVariable {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return "[Parameter(" + fParameterIndex + "," + Bindings.asString(fMethodBinding) + ")]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ReturnTypeVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ReturnTypeVariable.java
index 001dafa..8066730 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ReturnTypeVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/ReturnTypeVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class ReturnTypeVariable extends ConstraintVariable{
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return "[" + Bindings.asString(fMethodBinding) + "]_returnType"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/SimpleTypeConstraint.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/SimpleTypeConstraint.java
index 10e8315..ef65678 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/SimpleTypeConstraint.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/SimpleTypeConstraint.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public final class SimpleTypeConstraint implements ITypeConstraint {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public  String toString(){
 		return getLeft().toString() + " " + fOperator.toString() + " " + getRight().toString(); //$NON-NLS-1$ //$NON-NLS-2$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java
index 5464bbe..f85540d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,8 +19,8 @@ import org.eclipse.jdt.core.dom.ITypeBinding;
 
 public class TypeConstraintFactory implements ITypeConstraintFactory {
 
-	private Map/*<ConstraintVariable, Map<ConstraintVariable, Map<ConstraintOperator, SimpleTypeConstraint>>*/ fSimpleConstraints= new HashMap();
-	private Map/*<ConstraintVariable, Map<String, CompositeOrTypeConstraint>>*/ fOrConstraints= new HashMap();
+	private Map<ConstraintVariable, Map<ConstraintVariable, Map<ConstraintOperator, SimpleTypeConstraint>>> fSimpleConstraints= new HashMap<ConstraintVariable, Map<ConstraintVariable, Map<ConstraintOperator, SimpleTypeConstraint>>>();
+	private Map<ConstraintVariable, Map<String, CompositeOrTypeConstraint>> fOrConstraints= new HashMap<ConstraintVariable, Map<String, CompositeOrTypeConstraint>>();
 
 	protected static final boolean PRINT_STATS= false;
 	protected int fNrCreated= 0;
@@ -30,31 +30,31 @@ public class TypeConstraintFactory implements ITypeConstraintFactory {
 	// Only to be called by the createXXXConstraint() methods
 	private SimpleTypeConstraint createSimpleTypeConstraint(ConstraintVariable v1, ConstraintVariable v2, ConstraintOperator operator) {
 		if (fSimpleConstraints.containsKey(v1)){
-			Map m2= (Map)fSimpleConstraints.get(v1);
+			Map<ConstraintVariable, Map<ConstraintOperator, SimpleTypeConstraint>> m2= fSimpleConstraints.get(v1);
 			if (m2.containsKey(v2)){
-				Map m3= (Map)m2.get(v2);
+				Map<ConstraintOperator, SimpleTypeConstraint> m3= m2.get(v2);
 				if (m3.containsKey(operator)){
 					if (PRINT_STATS) fNrRetrieved++;
 					if (PRINT_STATS) dumpStats();
-					return (SimpleTypeConstraint)m3.get(operator);
+					return m3.get(operator);
 				} else {
 					return storeConstraint(v1, v2, operator, m3);
 				}
 			} else {
-				Map m3= new HashMap();
+				Map<ConstraintOperator, SimpleTypeConstraint> m3= new HashMap<ConstraintOperator, SimpleTypeConstraint>();
 				m2.put(v2, m3);
 				return storeConstraint(v1, v2, operator, m3);
 			}
 		} else {
-			Map m2= new HashMap();
+			Map<ConstraintVariable, Map<ConstraintOperator, SimpleTypeConstraint>> m2= new HashMap<ConstraintVariable, Map<ConstraintOperator, SimpleTypeConstraint>>();
 			fSimpleConstraints.put(v1, m2);
-			Map m3= new HashMap();
+			Map<ConstraintOperator, SimpleTypeConstraint> m3= new HashMap<ConstraintOperator, SimpleTypeConstraint>();
 			m2.put(v2, m3);
 			return storeConstraint(v1, v2, operator, m3);
 		}
 	}
 
-	private SimpleTypeConstraint storeConstraint(ConstraintVariable v1, ConstraintVariable v2, ConstraintOperator operator, Map m3) {
+	private SimpleTypeConstraint storeConstraint(ConstraintVariable v1, ConstraintVariable v2, ConstraintOperator operator, Map<ConstraintOperator, SimpleTypeConstraint> m3) {
 		SimpleTypeConstraint constraint= new SimpleTypeConstraint(v1, v2, operator);
 		m3.put(operator, constraint);
 		if (PRINT_STATS) fNrCreated++;
@@ -117,11 +117,11 @@ public class TypeConstraintFactory implements ITypeConstraintFactory {
 		}
 
 		if (fOrConstraints.containsKey(left)){
-			Map m2= (Map)fOrConstraints.get(left);
+			Map<String, CompositeOrTypeConstraint> m2= fOrConstraints.get(left);
 			if (m2.containsKey(bounds)){
 				if (PRINT_STATS) fNrRetrieved++;
 				if (PRINT_STATS) dumpStats();
-				return (CompositeOrTypeConstraint)m2.get(bounds);
+				return m2.get(bounds);
 			} else {
 				CompositeOrTypeConstraint constraint= new CompositeOrTypeConstraint(constraints);
 				m2.put(bounds, constraint);
@@ -130,7 +130,7 @@ public class TypeConstraintFactory implements ITypeConstraintFactory {
 				return constraint;
 			}
 		} else {
-			Map m2= new HashMap();
+			Map<String, CompositeOrTypeConstraint> m2= new HashMap<String, CompositeOrTypeConstraint>();
 			fOrConstraints.put(left, m2);
 			CompositeOrTypeConstraint constraint= new CompositeOrTypeConstraint(constraints);
 			m2.put(bounds, constraint);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeVariable.java
index 9155dfc..f97b557 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public final class TypeVariable extends ConstraintVariable {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return fSource;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/AbstractTypeVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/AbstractTypeVariable.java
index 66c6252..0382e04 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/AbstractTypeVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/AbstractTypeVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ public abstract class AbstractTypeVariable extends TType {
 		super(environment);
 	}
 
+	@Override
 	protected void initialize(ITypeBinding binding) {
 		super.initialize(binding);
 		ITypeBinding[] bounds= binding.getTypeBounds();
@@ -37,6 +38,7 @@ public abstract class AbstractTypeVariable extends TType {
 		}
 	}
 
+	@Override
 	public TType getErasure() {
 		if (fBounds.length == 0)
 			return getEnvironment().getJavaLangObject();
@@ -50,9 +52,10 @@ public abstract class AbstractTypeVariable extends TType {
 	}
 
 	public final TType[] getBounds() {
-		return (TType[]) fBounds.clone();
+		return fBounds.clone();
 	}
 
+	@Override
 	public final TType[] getSubTypes() {
 		return EMPTY_TYPE_ARRAY;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ArrayType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ArrayType.java
index 2dd40dd..9d9eb6f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ArrayType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ArrayType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,10 +74,12 @@ public final class ArrayType extends TType {
 		return fDimensions;
 	}
 
+	@Override
 	public int getKind() {
 		return ARRAY_TYPE;
 	}
 
+	@Override
 	public TType[] getSubTypes() {
 		TType[] subTypes= fElementType.getSubTypes();
 		TType[] result= new TType[subTypes.length];
@@ -87,19 +89,23 @@ public final class ArrayType extends TType {
 		return result;
 	}
 
+	@Override
 	public TType getErasure() {
 		return fErasure;
 	}
 
+	@Override
 	public boolean doEquals(TType other) {
 		ArrayType arrayType= (ArrayType)other;
 		return fElementType.equals(arrayType.fElementType) && fDimensions == arrayType.fDimensions;
 	}
 
+	@Override
 	public int hashCode() {
 		return fElementType.hashCode() << ARRAY_TYPE_SHIFT;
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		switch (lhs.getKind()) {
 			case NULL_TYPE: return false;
@@ -120,7 +126,7 @@ public final class ArrayType extends TType {
 
 			case TYPE_VARIABLE: return false;
 			case CAPTURE_TYPE:
-				return ((CaptureType)lhs).checkLowerBound(lhs);
+				return ((CaptureType)lhs).checkLowerBound(this);
 		}
 		return false;
 	}
@@ -141,6 +147,7 @@ public final class ArrayType extends TType {
 		return lhsElementType.isJavaLangObject() || lhsElementType.isJavaLangCloneable() || lhsElementType.isJavaIoSerializable();
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		StringBuffer result= new StringBuffer(fElementType.getPlainPrettySignature());
 		for (int i= 0; i < fDimensions; i++) {
@@ -149,6 +156,7 @@ public final class ArrayType extends TType {
 		return result.toString();
 	}
 
+	@Override
 	public String getName() {
 		StringBuffer result= new StringBuffer(fElementType.getName());
 		for (int i= 0; i < fDimensions; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/CaptureType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/CaptureType.java
index 87fb3a2..1076af5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/CaptureType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/CaptureType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public final class CaptureType extends AbstractTypeVariable {
 		fJavaProject= javaProject;
 	}
 
+	@Override
 	public int getKind() {
 		return CAPTURE_TYPE;
 	}
@@ -41,15 +42,18 @@ public final class CaptureType extends AbstractTypeVariable {
 		return fWildcard;
 	}
 
+	@Override
 	public boolean doEquals(TType type) {
 		return getBindingKey().equals(((CaptureType)type).getBindingKey())
 				&& fJavaProject.equals(((CaptureType)type).fJavaProject);
 	}
 
+	@Override
 	public int hashCode() {
 		return getBindingKey().hashCode();
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		switch (lhs.getKind()) {
 			case NULL_TYPE:
@@ -98,10 +102,12 @@ public final class CaptureType extends AbstractTypeVariable {
 		return false;
 	}
 
+	@Override
 	public String getName() {
 		return ""; //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return "capture-of " + fWildcard.getPrettySignature(); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ExtendsWildcardType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ExtendsWildcardType.java
index ecc819e..29e3fb2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ExtendsWildcardType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ExtendsWildcardType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,18 +16,22 @@ public final class ExtendsWildcardType extends WildcardType {
 		super(environment);
 	}
 
+	@Override
 	public int getKind() {
 		return EXTENDS_WILDCARD_TYPE;
 	}
 
+	@Override
 	public TType getErasure() {
 		return fBound.getErasure();
 	}
 
+	@Override
 	public TType[] getSubTypes() {
 		return new TType[] { fBound };
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		switch (lhs.getKind()) {
 			case ARRAY_TYPE:
@@ -52,6 +56,7 @@ public final class ExtendsWildcardType extends WildcardType {
 		}
 	}
 
+	@Override
 	protected boolean checkTypeArgument(TType rhs) {
 		switch(rhs.getKind()) {
 			case ARRAY_TYPE:
@@ -80,6 +85,7 @@ public final class ExtendsWildcardType extends WildcardType {
 		}
 	}
 
+	@Override
 	protected boolean checkAssignmentBound(TType rhs) {
 		// ? extends Number is a set of all subtyes of number and number.
 		// so the only thing that can be assigned is null since null is
@@ -87,10 +93,12 @@ public final class ExtendsWildcardType extends WildcardType {
 		return rhs.isNullType();
 	}
 
+	@Override
 	public String getName() {
 		return internalGetName("extends"); //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return internalGetPrettySignature("extends"); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/GenericType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/GenericType.java
index ce6687f..7e57c9d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/GenericType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/GenericType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public final class GenericType extends HierarchyType {
 		super(environment);
 	}
 
+	@Override
 	protected void initialize(ITypeBinding binding, IType javaElementType) {
 		Assert.isTrue(binding.isGenericType());
 		super.initialize(binding, javaElementType);
@@ -35,26 +36,31 @@ public final class GenericType extends HierarchyType {
 		}
 	}
 
+	@Override
 	public int getKind() {
 		return GENERIC_TYPE;
 	}
 
 	public TypeVariable[] getTypeParameters() {
-		return (TypeVariable[]) fTypeParameters.clone();
+		return fTypeParameters.clone();
 	}
 
+	@Override
 	public boolean doEquals(TType type) {
 		return getJavaElementType().equals(((GenericType)type).getJavaElementType());
 	}
 
+	@Override
 	public int hashCode() {
 		return getJavaElementType().hashCode();
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType type) {
 		return false;
 	}
 
+	@Override
 	protected boolean isTypeEquivalentTo(TType other) {
 		int otherElementType= other.getKind();
 		if (otherElementType == RAW_TYPE || otherElementType == PARAMETERIZED_TYPE)
@@ -62,10 +68,12 @@ public final class GenericType extends HierarchyType {
 		return super.isTypeEquivalentTo(other);
 	}
 
+	@Override
 	public String getName() {
 		return getJavaElementType().getElementName();
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		StringBuffer result= new StringBuffer(getJavaElementType().getFullyQualifiedName('.'));
 		result.append("<"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/HierarchyType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/HierarchyType.java
index 861d077..0d18ac7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/HierarchyType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/HierarchyType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,10 +43,12 @@ public abstract class HierarchyType extends TType {
 		}
 	}
 
+	@Override
 	public TType getSuperclass() {
 		return fSuperclass;
 	}
 
+	@Override
 	public TType[] getInterfaces() {
 		return fInterfaces;
 	}
@@ -57,9 +59,9 @@ public abstract class HierarchyType extends TType {
 
 	public boolean isSubType(HierarchyType other) {
 		if (getEnvironment() == other.getEnvironment()) {
-			Map cache= getEnvironment().getSubTypeCache();
+			Map<TypeTuple, Boolean> cache= getEnvironment().getSubTypeCache();
 			TypeTuple key= new TypeTuple(this, other);
-			Boolean value= (Boolean)cache.get(key);
+			Boolean value= cache.get(key);
 			if (value != null)
 				return value.booleanValue();
 			boolean isSub= doIsSubType(other);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java
index e5d0c24..cba7884 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,30 +17,37 @@ public final class NullType extends TType {
 		super(environment, "N"); //$NON-NLS-1$
 	}
 
+	@Override
 	public int getKind() {
 		return NULL_TYPE;
 	}
 
+	@Override
 	public TType[] getSubTypes() {
 		throw new UnsupportedOperationException();
 	}
 
+	@Override
 	protected boolean doEquals(TType type) {
 		return true;
 	}
 
+	@Override
 	public int hashCode() {
 		return 1234;
 	}
 	
+	@Override
 	public String getName() {
 		return "null";  //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return getName();
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		int kind= lhs.getKind();
 		return kind != PRIMITIVE_TYPE && kind != VOID_TYPE;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ParameterizedType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ParameterizedType.java
index 8fe05ff..df83b0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ParameterizedType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/ParameterizedType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public final class ParameterizedType extends HierarchyType {
 		super(environment);
 	}
 
+	@Override
 	protected void initialize(ITypeBinding binding, IType javaElementType) {
 		Assert.isTrue(binding.isParameterizedType());
 		super.initialize(binding, javaElementType);
@@ -38,22 +39,26 @@ public final class ParameterizedType extends HierarchyType {
 		}
 	}
 
+	@Override
 	public int getKind() {
 		return PARAMETERIZED_TYPE;
 	}
 
+	@Override
 	public TType getTypeDeclaration() {
 		return fTypeDeclaration;
 	}
 
+	@Override
 	public TType getErasure() {
 		return fTypeDeclaration;
 	}
 
 	public TType[] getTypeArguments() {
-		return (TType[]) fTypeArguments.clone();
+		return fTypeArguments.clone();
 	}
 
+	@Override
 	public boolean doEquals(TType type) {
 		ParameterizedType other= (ParameterizedType)type;
 		if (! getBindingKey().equals(other.getBindingKey()))
@@ -63,10 +68,12 @@ public final class ParameterizedType extends HierarchyType {
 		return true;
 	}
 
+	@Override
 	public int hashCode() {
 		return getBindingKey().hashCode();
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		int targetType= lhs.getKind();
 		switch (targetType) {
@@ -93,6 +100,7 @@ public final class ParameterizedType extends HierarchyType {
 		return false;
 	}
 
+	@Override
 	protected boolean isTypeEquivalentTo(TType other) {
 		int otherElementType= other.getKind();
 		if (otherElementType == RAW_TYPE || otherElementType == GENERIC_TYPE)
@@ -142,6 +150,7 @@ public final class ParameterizedType extends HierarchyType {
 		return null;
 	}
 
+	@Override
 	public String getName() {
 		StringBuffer result= new StringBuffer(getJavaElementType().getElementName());
 		result.append("<"); //$NON-NLS-1$
@@ -154,6 +163,7 @@ public final class ParameterizedType extends HierarchyType {
 		return result.toString();
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		StringBuffer result= new StringBuffer(getJavaElementType().getFullyQualifiedName('.'));
 		result.append("<"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java
index 9f5d797..9166fd1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,18 +53,22 @@ public final class PrimitiveType extends TType {
 		return fId;
 	}
 
+	@Override
 	public int getKind() {
 		return PRIMITIVE_TYPE;
 	}
 
+	@Override
 	protected boolean doEquals(TType type) {
 		return fId == ((PrimitiveType)type).fId;
 	}
 
+	@Override
 	public int hashCode() {
 		return fId;
 	}
 	
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		if (lhs.getKind() != PRIMITIVE_TYPE) {
 			if (lhs.getKind() == STANDARD_TYPE) {
@@ -127,10 +131,12 @@ public final class PrimitiveType extends TType {
 		return false;
 	}
 
+	@Override
 	public String getName() {
 		return NAMES[fId];
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return NAMES[fId];
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/RawType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/RawType.java
index d288fbd..4799f95 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/RawType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/RawType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public final class RawType extends HierarchyType {
 		super(environment);
 	}
 
+	@Override
 	protected void initialize(ITypeBinding binding, IType javaElementType) {
 		Assert.isTrue(binding.isRawType());
 		super.initialize(binding, javaElementType);
@@ -31,22 +32,27 @@ public final class RawType extends HierarchyType {
 		fTypeDeclaration= (HierarchyType)environment.create(binding.getTypeDeclaration());
 	}
 
+	@Override
 	public int getKind() {
 		return RAW_TYPE;
 	}
 
+	@Override
 	public boolean doEquals(TType type) {
 		return getJavaElementType().equals(((RawType)type).getJavaElementType());
 	}
 
+	@Override
 	public int hashCode() {
 		return getJavaElementType().hashCode();
 	}
 
+	@Override
 	public TType getTypeDeclaration() {
 		return fTypeDeclaration;
 	}
 
+	@Override
 	public TType getErasure() {
 		return fTypeDeclaration;
 	}
@@ -55,6 +61,7 @@ public final class RawType extends HierarchyType {
 		return fTypeDeclaration;
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		int targetType= lhs.getKind();
 		switch (targetType) {
@@ -81,6 +88,7 @@ public final class RawType extends HierarchyType {
 		return false;
 	}
 
+	@Override
 	protected boolean isTypeEquivalentTo(TType other) {
 		int otherElementType= other.getKind();
 		if (otherElementType == PARAMETERIZED_TYPE || otherElementType == GENERIC_TYPE)
@@ -88,10 +96,12 @@ public final class RawType extends HierarchyType {
 		return super.isTypeEquivalentTo(other);
 	}
 
+	@Override
 	public String getName() {
 		return getJavaElementType().getElementName();
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return getJavaElementType().getFullyQualifiedName('.');
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/StandardType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/StandardType.java
index 110a051..98b7b8f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/StandardType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/StandardType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,30 +23,37 @@ public final class StandardType extends HierarchyType {
 		super(environment);
 	}
 
+	@Override
 	public int getKind() {
 		return STANDARD_TYPE;
 	}
 
+	@Override
 	public boolean isJavaLangObject() {
 		return OBJECT_KEY.equals(getBindingKey());
 	}
 
+	@Override
 	public boolean isJavaLangCloneable() {
 		return CLONEABLE_KEY.equals(getBindingKey());
 	}
 
+	@Override
 	public boolean isJavaIoSerializable() {
 		return SERIALIZABLE_KEY.equals(getBindingKey());
 	}
 
+	@Override
 	public boolean doEquals(TType type) {
 		return getJavaElementType().equals(((StandardType)type).getJavaElementType());
 	}
 
+	@Override
 	public int hashCode() {
 		return getJavaElementType().hashCode();
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		switch (lhs.getKind()) {
 			case NULL_TYPE: return false;
@@ -78,10 +85,12 @@ public final class StandardType extends HierarchyType {
 		return source != null && source.canAssignTo(type);
 	}
 
+	@Override
 	public String getName() {
 		return getJavaElementType().getElementName();
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return getJavaElementType().getFullyQualifiedName('.');
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/SuperWildcardType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/SuperWildcardType.java
index 07fa2f7..791f198 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/SuperWildcardType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/SuperWildcardType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,14 +16,17 @@ public final class SuperWildcardType extends WildcardType {
 		super(environment);
 	}
 
+	@Override
 	public TType getErasure() {
 		return getEnvironment().getJavaLangObject();
 	}
 
+	@Override
 	public int getKind() {
 		return SUPER_WILDCARD_TYPE;
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		switch(lhs.getKind()) {
 			case STANDARD_TYPE:
@@ -44,6 +47,7 @@ public final class SuperWildcardType extends WildcardType {
 		}
 	}
 
+	@Override
 	protected boolean checkTypeArgument(TType rhs) {
 		switch(rhs.getKind()) {
 			case ARRAY_TYPE:
@@ -70,6 +74,7 @@ public final class SuperWildcardType extends WildcardType {
 		}
 	}
 
+	@Override
 	protected boolean checkAssignmentBound(TType rhs) {
 		// ? super Number is a set of all super types of number including
 		// Number. So I can only assign objects which are a subtype of
@@ -77,10 +82,12 @@ public final class SuperWildcardType extends WildcardType {
 		return rhs.canAssignTo(getBound());
 	}
 
+	@Override
 	public String getName() {
 		return internalGetName("super"); //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return internalGetPrettySignature("super"); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java
index 5b59be8..bea16e4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -18,6 +19,18 @@ import org.eclipse.core.runtime.Assert;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 
 
+/**
+ * TTypes are lightweight fully-resolved type objects that stand for {@link ITypeBinding}s.
+ * TTypes can answer basic questions about the relationship between types.
+ * 
+ * They do not hold references to their corresponding {@link ITypeBinding}s, and they
+ * don't carry any information about members of a type.
+ * 
+ * @see TypeEnvironment
+ * @see TType#canAssignTo(TType)
+ * @see HierarchyType#isSubType(HierarchyType)
+ * @see TType#getSubTypes()
+ */
 public abstract class TType {
 
 	public static final int NULL_TYPE= 1;
@@ -455,6 +468,7 @@ public abstract class TType {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public final boolean equals(Object other) {
 		if (this == other)
 			return true;
@@ -466,6 +480,7 @@ public abstract class TType {
 		return doEquals(otherType);
 	}
 
+	@Override
 	public abstract int hashCode();
 	
 	/**
@@ -502,14 +517,14 @@ public abstract class TType {
 	 * 		was not created with rememberSubtypes == true
 	 */
 	public TType[] getSubTypes() throws IllegalStateException {
-		Map subTypes= fEnvironment.getSubTypes();
+		Map<TType, ArrayList<TType>> subTypes= fEnvironment.getSubTypes();
 		if (subTypes == null)
 			throw new IllegalStateException("This TypeEnvironment does not remember subtypes"); //$NON-NLS-1$
-		List subtypes= (List) subTypes.get(this);
+		List<TType> subtypes= subTypes.get(this);
 		if (subtypes == null)
 			return EMPTY_TYPE_ARRAY;
 		else
-			return (TType[]) subtypes.toArray(new TType[subtypes.size()]);
+			return subtypes.toArray(new TType[subtypes.size()]);
 	}
 
 	/**
@@ -587,6 +602,7 @@ public abstract class TType {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String toString() {
 		return getPrettySignature();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java
index d21be6a..a817721 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -25,14 +26,22 @@ import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
 import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 
 
+
+/**
+ * A type environment comprises a set of {@link TType}s that stand for Java {@link ITypeBinding}s.
+ * In contrast to type bindings, TTypes of the same type environment also work across project boundaries and
+ * across compiler environments, i.e. a type environment can handle bindings from multiple {@link ASTParser} sessions.
+ * 
+ * @see TType
+ */
 public class TypeEnvironment {
 
 	private static class ProjectKeyPair {
@@ -44,6 +53,7 @@ public class TypeEnvironment {
 			fBindingKey= bindingKey;
 		}
 
+		@Override
 		public boolean equals(Object other) {
 			if (this == other)
 				return true;
@@ -53,6 +63,7 @@ public class TypeEnvironment {
 			return fProject.equals(otherPair.fProject) && fBindingKey.equals(otherPair.fBindingKey);
 		}
 
+		@Override
 		public int hashCode() {
 			return fProject.hashCode() + fBindingKey.hashCode();
 		}
@@ -94,21 +105,22 @@ public class TypeEnvironment {
 
 	private TType OBJECT_TYPE= null;
 
-	private Map/*<TType, ArrayType>*/[]          fArrayTypes= new Map[] { new HashMap() };
-	private Map/*<IJavaElement, StandardType>*/  fStandardTypes= new HashMap();
-	private Map/*<IJavaElement, GenericType>*/   fGenericTypes= new HashMap();
-	private Map/*<ProjectKeyPair, ParameterizedType>*/ fParameterizedTypes= new HashMap();
-	private Map/*<IJavaElement, RawType>*/       fRawTypes= new HashMap();
-	private Map/*<IJavaElement, TypeVariable>*/  fTypeVariables= new HashMap();
-	private Map/*<ProjectKeyPair, CaptureType>*/ fCaptureTypes= new HashMap();
-	private Map/*<TType, ExtendsWildcardType>*/  fExtendsWildcardTypes= new HashMap();
-	private Map/*<TType, SuperWildcardType>*/    fSuperWildcardTypes= new HashMap();
+	private List<Map<TType, ArrayType>>      fArrayTypes= new ArrayList<Map<TType, ArrayType>>();
+	private Map<IJavaElement, StandardType>  fStandardTypes= new HashMap<IJavaElement, StandardType>();
+	private Map<IJavaElement, GenericType>   fGenericTypes= new HashMap<IJavaElement, GenericType>();
+	private Map<ProjectKeyPair, ParameterizedType> fParameterizedTypes= new HashMap<ProjectKeyPair, ParameterizedType>();
+	private Map<IJavaElement, RawType>       fRawTypes= new HashMap<IJavaElement, RawType>();
+	private Map<IJavaElement, TypeVariable>  fTypeVariables= new HashMap<IJavaElement, TypeVariable>();
+	private Map<ProjectKeyPair, CaptureType> fCaptureTypes= new HashMap<ProjectKeyPair, CaptureType>();
+	private Map<TType, ExtendsWildcardType>  fExtendsWildcardTypes= new HashMap<TType, ExtendsWildcardType>();
+	private Map<TType, SuperWildcardType>    fSuperWildcardTypes= new HashMap<TType, SuperWildcardType>();
 	private UnboundWildcardType fUnboundWildcardType= null;
 
 	private static final int MAX_ENTRIES= 1024;
-	private Map/*<TypeTuple, Boolean>*/ fSubTypeCache= new LinkedHashMap(50, 0.75f, true) {
+	private Map<TypeTuple, Boolean> fSubTypeCache= new LinkedHashMap<TypeTuple, Boolean>(50, 0.75f, true) {
 		private static final long serialVersionUID= 1L;
-		protected boolean removeEldestEntry(Map.Entry eldest) {
+		@Override
+		protected boolean removeEldestEntry(Map.Entry<TypeTuple, Boolean> eldest) {
 			return size() > MAX_ENTRIES;
 		}
 	};
@@ -117,22 +129,28 @@ public class TypeEnvironment {
 	 * Map from TType to its known subtypes, or <code>null</code> iff subtype
 	 * information was not requested in the constructor.
 	 */
-	private Map/*<TType, List<TType>>*/ fSubTypes;
+	private Map<TType, ArrayList<TType>> fSubTypes;
+	/**
+	 * If <code>true</code>, replace all capture types by their wildcard type.
+	 * @since 3.7
+	 */
+	private final boolean fRemoveCapures;
 
 	public static ITypeBinding[] createTypeBindings(TType[] types, IJavaProject project) {
-		final Map mapping= new HashMap();
-		List keys= new ArrayList();
+		final Map<String, Object> mapping= new HashMap<String, Object>();
+		List<String> keys= new ArrayList<String>();
 		for (int i= 0; i < types.length; i++) {
 			TType type= types[i];
 			String bindingKey= type.getBindingKey();
 			mapping.put(bindingKey, type);
 			keys.add(bindingKey);
 		}
-		ASTParser parser= ASTParser.newParser(AST.JLS3);
+		ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		parser.setProject(project);
 		parser.setResolveBindings(true);
-		parser.createASTs(new ICompilationUnit[0], (String[])keys.toArray(new String[keys.size()]),
+		parser.createASTs(new ICompilationUnit[0], keys.toArray(new String[keys.size()]),
 			new ASTRequestor() {
+				@Override
 				public void acceptBinding(String bindingKey, IBinding binding) {
 					mapping.put(bindingKey, binding);
 				}
@@ -154,12 +172,17 @@ public class TypeEnvironment {
 	}
 
 	public TypeEnvironment(boolean rememberSubtypes) {
+		this(rememberSubtypes, false);
+	}
+	
+	public TypeEnvironment(boolean rememberSubtypes, boolean removeCapures) {
 		if (rememberSubtypes) {
-			fSubTypes= new HashMap();
+			fSubTypes= new HashMap<TType, ArrayList<TType>>();
 		}
+		fRemoveCapures= removeCapures;
 	}
 
-	Map/*<TypeTuple, Boolean>*/ getSubTypeCache() {
+	Map<TypeTuple, Boolean> getSubTypeCache() {
 		return fSubTypeCache;
 	}
 
@@ -185,7 +208,11 @@ public class TypeEnvironment {
 				return createSuperWildCardType(binding);
 			}
 		} else if (binding.isCapture()) {
-			return createCaptureType(binding);
+			if (fRemoveCapures) {
+				return create(binding.getWildcard());
+			} else {
+				return createCaptureType(binding);
+			}
 		}
 		if ("null".equals(binding.getName())) //$NON-NLS-1$
 			return NULL;
@@ -233,10 +260,10 @@ public class TypeEnvironment {
 		String fullyQualifiedName= BOXED_PRIMITIVE_NAMES[type.getId()];
 		try {
 			IType javaElementType= focus.findType(fullyQualifiedName);
-			StandardType result= (StandardType)fStandardTypes.get(javaElementType);
+			StandardType result= fStandardTypes.get(javaElementType);
 			if (result != null)
 				return result;
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setProject(focus);
 			IBinding[] bindings= parser.createBindings(new IJavaElement[] {javaElementType} , null);
 			return createStandardType((ITypeBinding)bindings[0]);
@@ -246,7 +273,7 @@ public class TypeEnvironment {
 		return null;
 	}
 
-	Map/*<TType, List<TType>>*/ getSubTypes() {
+	Map<TType, ArrayList<TType>> getSubTypes() {
 		return fSubTypes;
 	}
 
@@ -256,9 +283,9 @@ public class TypeEnvironment {
 		if (supertype == null)
 			supertype= OBJECT_TYPE;
 
-		ArrayList subtypes= (ArrayList) fSubTypes.get(supertype);
+		ArrayList<TType> subtypes= fSubTypes.get(supertype);
 		if (subtypes == null) {
-			subtypes= new ArrayList(5);
+			subtypes= new ArrayList<TType>(5);
 			fSubTypes.put(supertype, subtypes);
 		} else {
 			Assert.isTrue(! subtypes.contains(result));
@@ -287,8 +314,8 @@ public class TypeEnvironment {
 	private ArrayType createArrayType(ITypeBinding binding) {
 		int index= binding.getDimensions() - 1;
 		TType elementType= create(binding.getElementType());
-		Map/*<TType, ArrayType>*/ arrayTypes= getArrayTypesMap(index);
-		ArrayType result= (ArrayType)arrayTypes.get(elementType);
+		Map<TType, ArrayType> arrayTypes= getArrayTypesMap(index);
+		ArrayType result= arrayTypes.get(elementType);
 		if (result != null)
 			return result;
 		result= new ArrayType(this);
@@ -303,8 +330,8 @@ public class TypeEnvironment {
 		Assert.isTrue(dimensions > 0);
 
 		int index= dimensions - 1;
-		Map arrayTypes= getArrayTypesMap(index);
-		ArrayType result= (ArrayType)arrayTypes.get(elementType);
+		Map<TType, ArrayType> arrayTypes= getArrayTypesMap(index);
+		ArrayType result= arrayTypes.get(elementType);
 		if (result != null)
 			return result;
 		result= new ArrayType(this, BindingKey.createArrayTypeBindingKey(elementType.getBindingKey(), dimensions));
@@ -313,24 +340,22 @@ public class TypeEnvironment {
 		return result;
 	}
 
-	private Map/*<TType, ArrayType>*/ getArrayTypesMap(int index) {
-		int oldLength= fArrayTypes.length;
+	private Map<TType, ArrayType> getArrayTypesMap(int index) {
+		int oldLength= fArrayTypes.size();
 		if (index >= oldLength) {
-			Map[] newArray= new Map[index + 1];
-			System.arraycopy(fArrayTypes, 0, newArray, 0, oldLength);
-			fArrayTypes= newArray;
+			fArrayTypes.addAll(Collections.<Map<TType,ArrayType>>nCopies(index + 1 - oldLength, null));
 		}
-		Map arrayTypes= fArrayTypes[index];
+		Map<TType, ArrayType> arrayTypes= fArrayTypes.get(index);
 		if (arrayTypes == null) {
-			arrayTypes= new HashMap();
-			fArrayTypes[index]= arrayTypes;
+			arrayTypes= new HashMap<TType, ArrayType>();
+			fArrayTypes.set(index, arrayTypes);
 		}
 		return arrayTypes;
 	}
 
 	private StandardType createStandardType(ITypeBinding binding) {
 		IJavaElement javaElement= binding.getJavaElement();
-		StandardType result= (StandardType)fStandardTypes.get(javaElement);
+		StandardType result= fStandardTypes.get(javaElement);
 		if (result != null)
 			return result;
 		result= new StandardType(this);
@@ -343,7 +368,7 @@ public class TypeEnvironment {
 
 	private GenericType createGenericType(ITypeBinding binding) {
 		IJavaElement javaElement= binding.getJavaElement();
-		GenericType result= (GenericType)fGenericTypes.get(javaElement);
+		GenericType result= fGenericTypes.get(javaElement);
 		if (result != null)
 			return result;
 		result= new GenericType(this);
@@ -358,7 +383,7 @@ public class TypeEnvironment {
 		IJavaProject javaProject= binding.getJavaElement().getJavaProject();
 		String bindingKey= binding.getKey();
 		ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey);
-		ParameterizedType result= (ParameterizedType)fParameterizedTypes.get(pair);
+		ParameterizedType result= fParameterizedTypes.get(pair);
 		if (result != null)
 			return result;
 		result= new ParameterizedType(this);
@@ -371,7 +396,7 @@ public class TypeEnvironment {
 
 	private RawType createRawType(ITypeBinding binding) {
 		IJavaElement javaElement= binding.getJavaElement();
-		RawType result= (RawType)fRawTypes.get(javaElement);
+		RawType result= fRawTypes.get(javaElement);
 		if (result != null)
 			return result;
 		result= new RawType(this);
@@ -392,7 +417,7 @@ public class TypeEnvironment {
 
 	private TType createExtendsWildCardType(ITypeBinding binding) {
 		TType bound= create(binding.getBound());
-		ExtendsWildcardType result= (ExtendsWildcardType)fExtendsWildcardTypes.get(bound);
+		ExtendsWildcardType result= fExtendsWildcardTypes.get(bound);
 		if (result != null)
 			return result;
 		result= new ExtendsWildcardType(this);
@@ -403,7 +428,7 @@ public class TypeEnvironment {
 
 	private TType createSuperWildCardType(ITypeBinding binding) {
 		TType bound= create(binding.getBound());
-		SuperWildcardType result= (SuperWildcardType)fSuperWildcardTypes.get(bound);
+		SuperWildcardType result= fSuperWildcardTypes.get(bound);
 		if (result != null)
 			return result;
 		result= new SuperWildcardType(this);
@@ -414,7 +439,7 @@ public class TypeEnvironment {
 
 	private TypeVariable createTypeVariable(ITypeBinding binding) {
 		IJavaElement javaElement= binding.getJavaElement();
-		TypeVariable result= (TypeVariable)fTypeVariables.get(javaElement);
+		TypeVariable result= fTypeVariables.get(javaElement);
 		if (result != null)
 			return result;
 		result= new TypeVariable(this);
@@ -427,7 +452,7 @@ public class TypeEnvironment {
 		IJavaProject javaProject= binding.getDeclaringClass().getJavaElement().getJavaProject();
 		String bindingKey= binding.getKey();
 		ProjectKeyPair pair= new ProjectKeyPair(javaProject, bindingKey);
-		CaptureType result= (CaptureType)fCaptureTypes.get(pair);
+		CaptureType result= fCaptureTypes.get(pair);
 		if (result != null)
 			return result;
 		result= new CaptureType(this);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeTuple.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeTuple.java
index 944af3f..ee618a8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeTuple.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeTuple.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ public class TypeTuple {
 		fSecond= second;
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
@@ -30,6 +31,7 @@ public class TypeTuple {
 		return fFirst.equals(other.fFirst) && fSecond.equals(other.fSecond);
 	}
 
+	@Override
 	public int hashCode() {
 		return fFirst.hashCode() << 16 + fSecond.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeVariable.java
index c3ccb56..0b37e4f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeVariable.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeVariable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,18 +32,22 @@ public final class TypeVariable extends AbstractTypeVariable {
 		super.initialize(binding);
 	}
 
+	@Override
 	public int getKind() {
 		return TYPE_VARIABLE;
 	}
 
+	@Override
 	public boolean doEquals(TType type) {
 		return fJavaTypeParameter.equals(((TypeVariable)type).fJavaTypeParameter);
 	}
 
+	@Override
 	public int hashCode() {
 		return fJavaTypeParameter.hashCode();
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		switch (lhs.getKind()) {
 			case NULL_TYPE:
@@ -81,10 +85,12 @@ public final class TypeVariable extends AbstractTypeVariable {
 		return false;
 	}
 
+	@Override
 	public String getName() {
 		return fJavaTypeParameter.getElementName();
 	}
 
+	@Override
 	public String getPrettySignature() {
 		if (fBounds.length == 1 && fBounds[0].isJavaLangObject())
 			return fJavaTypeParameter.getElementName(); // don't print the trivial bound
@@ -101,6 +107,7 @@ public final class TypeVariable extends AbstractTypeVariable {
 		return result.toString();
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return fJavaTypeParameter.getElementName();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/UnboundWildcardType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/UnboundWildcardType.java
index 2cc33bc..2056234 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/UnboundWildcardType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/UnboundWildcardType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,14 +16,17 @@ public final class UnboundWildcardType extends WildcardType {
 		super(environment);
 	}
 
+	@Override
 	public int getKind() {
 		return UNBOUND_WILDCARD_TYPE;
 	}
 
+	@Override
 	public TType getErasure() {
 		return getEnvironment().getJavaLangObject();
 	}
 
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		switch(lhs.getKind()) {
 			case STANDARD_TYPE:
@@ -40,6 +43,7 @@ public final class UnboundWildcardType extends WildcardType {
 		}
 	}
 
+	@Override
 	protected boolean checkTypeArgument(TType rhs) {
 		switch(rhs.getKind()) {
 			case ARRAY_TYPE:
@@ -57,15 +61,18 @@ public final class UnboundWildcardType extends WildcardType {
 		}
 	}
 
+	@Override
 	protected boolean checkAssignmentBound(TType rhs) {
 		// unbound equals ? extends Object.
 		return rhs.isNullType();
 	}
 
+	@Override
 	public String getName() {
 		return "?"; //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return getName();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java
index 447025e..b6099de 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,30 +19,37 @@ public final class VoidType extends TType {
 		super(environment, Signature.createTypeSignature("void", true)); //$NON-NLS-1$
 	}
 
+	@Override
 	public int getKind() {
 		return VOID_TYPE;
 	}
 
+	@Override
 	public TType[] getSubTypes() {
 		throw new UnsupportedOperationException();
 	}
 
+	@Override
 	protected boolean doEquals(TType type) {
 		return true;
 	}
 
+	@Override
 	public int hashCode() {
 		return 12345;
 	}
 	
+	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		return false;
 	}
 
+	@Override
 	public String getName() {
 		return "void"; //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPlainPrettySignature() {
 		return getName();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/WildcardType.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/WildcardType.java
index 1aedc64..27ca7e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/WildcardType.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/WildcardType.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ public abstract class WildcardType extends TType {
 		super(environment);
 	}
 
+	@Override
 	protected void initialize(ITypeBinding binding) {
 		Assert.isTrue(binding.isWildcardType());
 		super.initialize(binding);
@@ -35,10 +36,12 @@ public abstract class WildcardType extends TType {
 		return fBound;
 	}
 
+	@Override
 	public TType[] getSubTypes() {
 		throw new UnsupportedOperationException();
 	}
 
+	@Override
 	public boolean doEquals(TType type) {
 		WildcardType other= (WildcardType)type;
 		if (fBound == null)
@@ -46,6 +49,7 @@ public abstract class WildcardType extends TType {
 		return fBound.equals(other.fBound);
 	}
 
+	@Override
 	public int hashCode() {
 		if (fBound == null)
 			return 123;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArraySuperTypeSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArraySuperTypeSet.java
index 53fecf7..31256e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArraySuperTypeSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArraySuperTypeSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return getJavaLangObject();
 	}
@@ -39,6 +40,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		if (t.equals(getJavaLangObject())) return true;
 		if (!(t instanceof ArrayType))
@@ -50,8 +52,8 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 		if (fElemTypeSet.contains(atElemType)) // try to avoid enumeration
 			return true;
 
-		for(Iterator iter= fElemTypeSet.iterator(); iter.hasNext(); ) {
-			TType elemType= (TType) iter.next();
+		for(Iterator<TType> iter= fElemTypeSet.iterator(); iter.hasNext(); ) {
+			TType elemType= iter.next();
 
 			if (TTypes.canAssignTo(elemType, atElemType))
 				return true;
@@ -62,6 +64,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		if (s instanceof ArraySuperTypeSet) {
 			ArraySuperTypeSet ats= (ArraySuperTypeSet) s;
@@ -78,6 +81,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#specialCasesIntersectedWith(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		if (s2 instanceof ArraySuperTypeSet) {
 			ArraySuperTypeSet ats2= (ArraySuperTypeSet) s2;
@@ -98,13 +102,14 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		if (fEnumCache == null) {
 			fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment());
 			TypeSet elemSupers= fElemTypeSet.superTypes();
 
-			for(Iterator iter= elemSupers.iterator(); iter.hasNext(); ) {
-				TType elemSuper= (TType) iter.next();
+			for(Iterator<TType> iter= elemSupers.iterator(); iter.hasNext(); ) {
+				TType elemSuper= iter.next();
 
 				fEnumCache.add(TTypes.createArrayType(elemSuper, 1));
 			}
@@ -118,6 +123,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return true; // Object is the unique upper bound of any set of array types
 	}
@@ -125,6 +131,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		return false;
 	}
@@ -132,6 +139,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return false;
 	}
@@ -139,13 +147,15 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		return enumerate().iterator();
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return new ArraySuperTypeSet(fElemTypeSet);
 	}
@@ -153,6 +163,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#superTypes()
 	 */
+	@Override
 	public TypeSet superTypes() {
 		return makeClone();
 	}
@@ -160,6 +171,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return getJavaLangObject();
 	}
@@ -167,6 +179,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return new SingletonTypeSet(getJavaLangObject(), getTypeSetEnvironment());
 	}
@@ -174,6 +187,7 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.ArrayTypeSet#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (obj == this) return true;
 		if (obj instanceof ArraySuperTypeSet) {
@@ -187,10 +201,12 @@ public class ArraySuperTypeSet extends ArrayTypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#subTypes()
 	 */
+	@Override
 	public TypeSet subTypes() {
 		return getTypeSetEnvironment().getUniverseTypeSet();
 	}
 
+	@Override
 	public String toString() {
 		return "{" + fID + ": array-super(" + fElemTypeSet + ")}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArrayTypeSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArrayTypeSet.java
index bebf864..3f095d1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArrayTypeSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/ArrayTypeSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return false;
 	}
@@ -49,6 +50,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return new ArrayTypeSet(fElemTypeSet);
 	}
@@ -56,6 +58,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return fElemTypeSet.isEmpty();
 	}
@@ -63,6 +66,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return new ArrayTypeSet(fElemTypeSet.upperBound());
 	}
@@ -70,6 +74,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		return new ArrayTypeSet(fElemTypeSet.lowerBound());
 	}
@@ -77,6 +82,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return fElemTypeSet.hasUniqueLowerBound();
 	}
@@ -84,6 +90,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return fElemTypeSet.hasUniqueUpperBound();
 	}
@@ -91,6 +98,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return TTypes.createArrayType(fElemTypeSet.uniqueLowerBound(), 1);
 	}
@@ -98,6 +106,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return TTypes.createArrayType(fElemTypeSet.uniqueUpperBound(), 1);
 	}
@@ -105,6 +114,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		if (!(t instanceof ArrayType))
 			return false;
@@ -115,14 +125,15 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		if (s instanceof ArrayTypeSet && !(s instanceof ArraySuperTypeSet)) {
 			ArrayTypeSet ats= (ArrayTypeSet) s;
 
 			return fElemTypeSet.containsAll(ats.fElemTypeSet);
 		}
-		for(Iterator iter= s.iterator(); iter.hasNext(); ) {
-			TType t= (TType) iter.next();
+		for(Iterator<TType> iter= s.iterator(); iter.hasNext(); ) {
+			TType t= iter.next();
 			if (!contains(t))
 				return false;
 		}
@@ -132,16 +143,17 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		if (fEnumCache != null) return fEnumCache.iterator();
 
-		return new Iterator() {
-			Iterator fElemIter= fElemTypeSet.iterator();
+		return new Iterator<TType>() {
+			Iterator<TType> fElemIter= fElemTypeSet.iterator();
 			public boolean hasNext() {
 				return fElemIter.hasNext();
 			}
-			public Object next() {
-				return TTypes.createArrayType(((TType) fElemIter.next()), 1);
+			public TType next() {
+				return TTypes.createArrayType(fElemIter.next(), 1);
 			}
 			public void remove() {
 				throw new UnsupportedOperationException();
@@ -154,12 +166,13 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		if (fEnumCache == null) {
 			fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment());
 
-			for(Iterator iter= fElemTypeSet.iterator(); iter.hasNext(); ) {
-				TType t= (TType) iter.next();
+			for(Iterator<TType> iter= fElemTypeSet.iterator(); iter.hasNext(); ) {
+				TType t= iter.next();
 				fEnumCache.add(TTypes.createArrayType(t, 1));
 			}
 			fEnumCache.initComplete();
@@ -170,6 +183,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		return fElemTypeSet.isSingleton();
 	}
@@ -177,6 +191,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return TTypes.createArrayType(fElemTypeSet.anyMember(), 1);
 	}
@@ -184,6 +199,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#superTypes()
 	 */
+	@Override
 	public TypeSet superTypes() {
 		return new ArraySuperTypeSet(fElemTypeSet);
 	}
@@ -191,6 +207,7 @@ public class ArrayTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (obj == this) return true;
 		if (obj instanceof ArrayTypeSet) {
@@ -201,10 +218,12 @@ public class ArrayTypeSet extends TypeSet {
 		return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return fElemTypeSet.hashCode();
 	}
 
+	@Override
 	public String toString() {
 		return "{" + fID + ": array(" + fElemTypeSet + ")}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java
index ee84fd8..ecb0906 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return false;
 	}
@@ -30,6 +31,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this;
 	}
@@ -37,6 +39,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#intersectedWith(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		return this;
 	}
@@ -44,6 +47,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return true;
 	}
@@ -51,6 +55,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return this;
 	}
@@ -58,6 +63,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		return this;
 	}
@@ -65,6 +71,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return false;
 	}
@@ -72,6 +79,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return false;
 	}
@@ -79,6 +87,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return null;
 	}
@@ -86,6 +95,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return null;
 	}
@@ -93,6 +103,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		return false;
 	}
@@ -100,6 +111,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		return false;
 	}
@@ -107,15 +119,16 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
-		return new Iterator() {
+	@Override
+	public Iterator<TType> iterator() {
+		return new Iterator<TType>() {
 			public void remove() {
 				//do nothing
 			}
 			public boolean hasNext() {
 				return false;
 			}
-			public Object next() {
+			public TType next() {
 				return null;
 			}
 		};
@@ -124,6 +137,7 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		return false;
 	}
@@ -131,10 +145,12 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return null;
 	}
 
+	@Override
 	public String toString() {
 		return "{ }"; //$NON-NLS-1$
 	}
@@ -142,14 +158,17 @@ public class EmptyTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		return new EnumeratedTypeSet(getTypeSetEnvironment());
 	}
 	
+	@Override
 	public boolean equals(Object obj) {
 		return obj instanceof EmptyTypeSet;
 	}
 	
+	@Override
 	public int hashCode() {
 		return 42;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java
index acf4ef5..8f6c9e2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.TTypes;
 
 /**
- * A type-safe wrapper for Set<TType> that also adds TType-specific
+ * A type-safe wrapper for {@code Set<TType>} that also adds {@code TType}-specific
  * functionality, e.g. subTypes() and superTypes().
  */
 public class EnumeratedTypeSet extends TypeSet {
@@ -38,13 +38,16 @@ public class EnumeratedTypeSet extends TypeSet {
 	/**
 	 * Set containing the TTypes in this EnumeratedTypeSet.
 	 */
-	Set/*<TType>*/ fMembers= new LinkedHashSet();
+	Set<TType> fMembers= new LinkedHashSet<TType>();
 
 	/**
 	 * Constructs a new EnumeratedTypeSet with the members of Set s in it.
 	 * All elements of s must be TTypes.
+	 * 
+	 * @param types the types
+	 * @param typeSetEnvironment the environment
 	 */
-	public EnumeratedTypeSet(Iterator types, TypeSetEnvironment typeSetEnvironment) {
+	public EnumeratedTypeSet(Iterator<TType> types, TypeSetEnvironment typeSetEnvironment) {
 		super(typeSetEnvironment);
 		while (types.hasNext()) {
 			fMembers.add(types.next());
@@ -54,6 +57,8 @@ public class EnumeratedTypeSet extends TypeSet {
 
 	/**
 	 * Constructs an empty EnumeratedTypeSet.
+	 * 
+	 * @param typeSetEnvironment the environment
 	 */
 	public EnumeratedTypeSet(TypeSetEnvironment typeSetEnvironment) {
 		super(typeSetEnvironment);
@@ -62,6 +67,9 @@ public class EnumeratedTypeSet extends TypeSet {
 
 	/**
 	 * Constructs a new EnumeratedTypeSet with the given single TType in it.
+	 * 
+	 * @param t the type
+	 * @param typeSetEnvironment the environment
 	 */
 	public EnumeratedTypeSet(TType t, TypeSetEnvironment typeSetEnvironment) {
 		super(typeSetEnvironment);
@@ -73,10 +81,12 @@ public class EnumeratedTypeSet extends TypeSet {
 	/**
 	 * @return <code>true</code> iff this set represents the universe of TTypes
 	 */
+	@Override
 	public boolean isUniverse() {
 		return false;
 	}
 
+	@Override
 	public boolean equals(Object o) {
 		if (this == o) return true;
 		if (o instanceof EnumeratedTypeSet) {
@@ -90,12 +100,12 @@ public class EnumeratedTypeSet extends TypeSet {
 		} else if (o instanceof TypeSet) {
 			TypeSet other= (TypeSet) o;
 
-			for(Iterator otherIter= other.iterator(); otherIter.hasNext(); ) {
+			for(Iterator<TType> otherIter= other.iterator(); otherIter.hasNext(); ) {
 				if (!fMembers.contains(otherIter.next()))
 					return false;
 			}
-			for(Iterator myIter= fMembers.iterator(); myIter.hasNext(); ) {
-				if (!other.contains((TType) myIter.next()))
+			for(Iterator<TType> myIter= fMembers.iterator(); myIter.hasNext(); ) {
+				if (!other.contains(myIter.next()))
 					return false;
 			}
 			return true;
@@ -103,6 +113,7 @@ public class EnumeratedTypeSet extends TypeSet {
 			return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return 37 + fMembers.hashCode();
 	}
@@ -110,8 +121,9 @@ public class EnumeratedTypeSet extends TypeSet {
 	/**
 	 * Computes and returns a <em>new</em> EnumeratedTypeSet representing the intersection of the
 	 * receiver with s2. Does not modify the receiver.
-	 * @param s2
+	 * @param s2 the other type set
 	 */
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		if (s2 instanceof EnumeratedTypeSet) {
 			EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
@@ -128,7 +140,7 @@ public class EnumeratedTypeSet extends TypeSet {
 
 	/**
 	 * Modifies this EnumeratedTypeSet to represent the intersection of the receiver with s2.
-	 * @param s2
+	 * @param s2 the other type set
 	 */
 	public void intersectWith(TypeSet s2) {
 		if (isUniverse()) {
@@ -137,7 +149,7 @@ public class EnumeratedTypeSet extends TypeSet {
 			// More than an optimization: the universe never contains array types, so
 			// if s2 has array types, the following will retain them, as it should.
 			EnumeratedTypeSet ets2= (EnumeratedTypeSet) s2;
-			fMembers= new LinkedHashSet();
+			fMembers= new LinkedHashSet<TType>();
 			fMembers.addAll(ets2.fMembers);
 		} else
 			retainAll(s2);
@@ -147,6 +159,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	 * @return a new TypeSet representing the set of all sub-types of the
 	 * types in the receiver
 	 */
+	@Override
 	public TypeSet subTypes() {
 		if (isUniverse())
 			return makeClone(); // subtypes(universe) = universe
@@ -157,11 +170,11 @@ public class EnumeratedTypeSet extends TypeSet {
 		return getTypeSetEnvironment().createSubTypesSet(this);
 	}
 
-	public static EnumeratedTypeSet makeArrayTypesForElements(Iterator/*<TType>*/ elemTypes, TypeSetEnvironment typeSetEnvironment) {
+	public static EnumeratedTypeSet makeArrayTypesForElements(Iterator<TType> elemTypes, TypeSetEnvironment typeSetEnvironment) {
 		EnumeratedTypeSet result= new EnumeratedTypeSet(typeSetEnvironment);
 
 		while (elemTypes.hasNext()) {
-			TType t= (TType) elemTypes.next();
+			TType t= elemTypes.next();
 			result.add(TTypes.createArrayType(t, 1));
 		}
 //		result.initComplete();
@@ -172,6 +185,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	 * @return a new TypeSet representing the set of all super-types of the
 	 * types in the receiver
 	 */
+	@Override
 	public TypeSet superTypes() {
 		if (isUniverse())
 			return makeClone(); // The supertypes of the universe is the universe
@@ -179,6 +193,7 @@ public class EnumeratedTypeSet extends TypeSet {
 		return getTypeSetEnvironment().createSuperTypesSet(this);
 	}
 
+	@Override
 	public TypeSet makeClone() {
 		EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
 
@@ -199,7 +214,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	 */
 	public void clear() {
 		if (isUniverse())
-			fMembers= new LinkedHashSet();
+			fMembers= new LinkedHashSet<TType>();
 		else
 			fMembers.clear();
 	}
@@ -207,6 +222,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.util.Set#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return fMembers.isEmpty();
 	}
@@ -215,7 +231,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	 * @see java.util.Set#toArray()
 	 */
 	public TType[] toArray() {
-		return (TType[]) fMembers.toArray(new TType[fMembers.size()]);
+		return fMembers.toArray(new TType[fMembers.size()]);
 	}
 
 	/* (non-Javadoc)
@@ -230,6 +246,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.util.Set#contains(java.lang.Object)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		if (isUniverse())
 			return true;
@@ -245,8 +262,8 @@ public class EnumeratedTypeSet extends TypeSet {
 		return fMembers.remove(t);
 	}
 
-	private Set cloneSet(Set members) {
-		Set result= new LinkedHashSet();
+	private Set<TType> cloneSet(Set<TType> members) {
+		Set<TType> result= new LinkedHashSet<TType>();
 		result.addAll(members);
 		return result;
 	}
@@ -266,6 +283,7 @@ public class EnumeratedTypeSet extends TypeSet {
 		}
 	}
 
+	@Override
 	public TypeSet addedTo(TypeSet that) {
 		EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
 
@@ -278,6 +296,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.util.Set#containsAll(java.util.Collection)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		if (isUniverse())
 			return true;
@@ -315,6 +334,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		return fMembers.size() == 1;
 	}
@@ -322,16 +342,18 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
-		return (TType) fMembers.iterator().next();
+		return fMembers.iterator().next();
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		if (fMembers.size() == 1)
-			return new SingletonTypeSet((TType) fMembers.iterator().next(), getTypeSetEnvironment());
+			return new SingletonTypeSet(fMembers.iterator().next(), getTypeSetEnvironment());
 		if (fMembers.contains(getJavaLangObject()))
 			return new SingletonTypeSet(getJavaLangObject(), getTypeSetEnvironment());
 
@@ -339,17 +361,17 @@ public class EnumeratedTypeSet extends TypeSet {
 
 		// Add to result each element of fMembers that has no proper supertype in fMembers
 		result.fMembers.addAll(fMembers);
-		for(Iterator iter= fMembers.iterator(); iter.hasNext(); ) {
-			TType t= (TType) iter.next();
+		for(Iterator<TType> iter= fMembers.iterator(); iter.hasNext(); ) {
+			TType t= iter.next();
 
 			if (t.isArrayType()) {
 				ArrayType at= (ArrayType) t;
 				int numDims= at.getDimensions();
-				for(Iterator subIter=TTypes.getAllSubTypesIterator(at.getElementType()); subIter.hasNext(); ) {
-					result.fMembers.remove(TTypes.createArrayType(((TType) subIter.next()), numDims));
+				for(Iterator<TType> subIter=TTypes.getAllSubTypesIterator(at.getElementType()); subIter.hasNext(); ) {
+					result.fMembers.remove(TTypes.createArrayType(subIter.next(), numDims));
 				}
 			} else {
-				for (Iterator iterator= TTypes.getAllSubTypesIterator(t); iterator.hasNext();) {
+				for (Iterator<TType> iterator= TTypes.getAllSubTypesIterator(t); iterator.hasNext();) {
 					result.fMembers.remove(iterator.next());
 				}
 			}
@@ -361,17 +383,18 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		if (fMembers.size() == 1)
-			return new SingletonTypeSet((TType) fMembers.iterator().next(), getTypeSetEnvironment());
+			return new SingletonTypeSet(fMembers.iterator().next(), getTypeSetEnvironment());
 
 		EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
 
 		// Add to result each element of fMembers that has no proper subtype in fMembers
 		result.fMembers.addAll(fMembers);
 
-		for(Iterator iter= fMembers.iterator(); iter.hasNext(); ) {
-			TType t= (TType) iter.next();
+		for(Iterator<TType> iter= fMembers.iterator(); iter.hasNext(); ) {
+			TType t= iter.next();
 
 			// java.lang.Object is only in the lower bound if fMembers consists
 			// of only java.lang.Object, but that case is handled above.
@@ -383,11 +406,11 @@ public class EnumeratedTypeSet extends TypeSet {
 			if (t instanceof ArrayType) {
 				ArrayType at= (ArrayType) t;
 				int numDims= at.getDimensions();
-				for(Iterator superIter=TTypes.getAllSuperTypesIterator(at.getElementType()); superIter.hasNext(); ) {
-					result.fMembers.remove(TTypes.createArrayType(((TType) superIter.next()), numDims));
+				for(Iterator<TType> superIter=TTypes.getAllSuperTypesIterator(at.getElementType()); superIter.hasNext(); ) {
+					result.fMembers.remove(TTypes.createArrayType(superIter.next(), numDims));
 				}
 			} else {
-				for (Iterator iterator= TTypes.getAllSuperTypesIterator(t); iterator.hasNext();) {
+				for (Iterator<TType> iterator= TTypes.getAllSuperTypesIterator(t); iterator.hasNext();) {
 					result.fMembers.remove(iterator.next());
 				}
 			}
@@ -401,6 +424,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return fMembers.size() == 1;
 	}
@@ -408,6 +432,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return fMembers.size() == 1;
 	}
@@ -415,35 +440,31 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		if (fMembers.size() == 1)
-			return (TType) fMembers.iterator().next();
+			return fMembers.iterator().next();
 		return null;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		if (fMembers.size() == 1)
-			return (TType) fMembers.iterator().next();
+			return fMembers.iterator().next();
 		return null;
 	}
 
 	/* (non-Javadoc)
 	 * @see java.util.Set#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		return fMembers.iterator();
 	}
 
-	/* (non-Javadoc)
-	 * @see java.util.Set#toArray(java.lang.Object[])
-	 */
-	public TType[] toArray(TType[] a) {
-		return (TType[]) fMembers.toArray(a);
-	}
-
 	/**
 	 * Limits the display of set elements to the first sMaxElements.
 	 */
@@ -453,6 +474,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	 * (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		StringBuffer b= new StringBuffer();
 		b.append("{" + fID+ ":"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -460,9 +482,9 @@ public class EnumeratedTypeSet extends TypeSet {
 			b.append(" <universe>"); //$NON-NLS-1$
 		else {
 			int count=0;
-			Iterator iter;
+			Iterator<TType> iter;
 			for(iter= iterator(); iter.hasNext() && count < sMaxElements; count++) {
-				TType type= (TType) iter.next();
+				TType type= iter.next();
 				b.append(' ')
 				 .append(type.getPrettySignature());
 				if (iter.hasNext())
@@ -478,6 +500,7 @@ public class EnumeratedTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		return this; // (EnumeratedTypeSet) makeClone();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java
index 04778e2..3f379d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return false;
 	}
@@ -37,6 +38,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this; //new SingletonTypeSet(fType, getTypeSetEnvironment());
 	}
@@ -44,6 +46,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#intersectedWith(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		if (s2.contains(fType))
 			return this;
@@ -54,6 +57,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return false;
 	}
@@ -61,6 +65,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return this; // makeClone();
 	}
@@ -68,6 +73,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		return this; // makeClone();
 	}
@@ -75,6 +81,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return true;
 	}
@@ -82,6 +89,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return true;
 	}
@@ -89,6 +97,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return fType;
 	}
@@ -96,6 +105,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return fType;
 	}
@@ -103,6 +113,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		return fType.equals(t);
 	}
@@ -110,6 +121,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		if (s.isEmpty())
 			return true;
@@ -121,8 +133,9 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
-		return new Iterator() {
+	@Override
+	public Iterator<TType> iterator() {
+		return new Iterator<TType>() {
 			private boolean done= false;
 			public void remove() {
 				throw new UnsupportedOperationException();
@@ -130,7 +143,7 @@ public class SingletonTypeSet extends TypeSet {
 			public boolean hasNext() {
 				return !done;
 			}
-			public Object next() {
+			public TType next() {
 				done= true;
 				return fType;
 			}
@@ -140,6 +153,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		return true;
 	}
@@ -147,6 +161,7 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return fType;
 	}
@@ -154,12 +169,14 @@ public class SingletonTypeSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		EnumeratedTypeSet enumeratedTypeSet= new EnumeratedTypeSet(fType, getTypeSetEnvironment());
 		enumeratedTypeSet.initComplete();
 		return enumeratedTypeSet;
 	}
 
+	@Override
 	public boolean equals(Object o) {
 		if (o instanceof SingletonTypeSet) {
 			SingletonTypeSet other= (SingletonTypeSet) o;
@@ -173,10 +190,12 @@ public class SingletonTypeSet extends TypeSet {
 			return false;
 	}
 	
+	@Override
 	public int hashCode() {
 		return fType.hashCode();
 	}
 
+	@Override
 	public String toString() {
 		return "{" + fID + ": " + fType.getPrettySignature() + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java
index 467584d..67a95cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return fUpperBound.equals(getJavaLangObject());
 	}
@@ -40,6 +41,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this; // new SubTypesOfSingleton(fUpperBound);
 	}
@@ -47,6 +49,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#subTypes()
 	 */
+	@Override
 	public TypeSet subTypes() {
 		return this; // makeClone();
 	}
@@ -54,6 +57,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#intersectedWith(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public TypeSet specialCasesIntersectedWith(TypeSet other) {
 		if (other.isSingleton() && other.anyMember().equals(fUpperBound))
 			return other;		// xsect(subTypes(A),A) = A
@@ -90,6 +94,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return false;
 	}
@@ -97,6 +102,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return new SingletonTypeSet(fUpperBound, getTypeSetEnvironment());
 	}
@@ -104,6 +110,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		EnumeratedTypeSet e= enumerate();
 		return e.lowerBound();
@@ -112,6 +119,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 //		TypeSet lowerBound= lowerBound();
 
@@ -122,6 +130,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return true;
 	}
@@ -129,6 +138,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		TypeSet lowerBound= lowerBound();
 
@@ -138,6 +148,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return fUpperBound;
 	}
@@ -145,6 +156,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(org.eclipse.jdt.core.TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		if (t.equals(fUpperBound))
 			return true;
@@ -154,6 +166,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet other) {
 		if (isUniverse())
 			return true;
@@ -168,16 +181,16 @@ public class SubTypesOfSingleton extends TypeSet {
 			SubTypesSet otherSub= (SubTypesSet) other;
 			TypeSet otherUpperBounds= otherSub.upperBound();
 
-			for(Iterator iter= otherUpperBounds.iterator(); iter.hasNext(); ) {
-				TType t= (TType) iter.next();
+			for(Iterator<TType> iter= otherUpperBounds.iterator(); iter.hasNext(); ) {
+				TType t= iter.next();
 				if (! TTypes.canAssignTo(t, fUpperBound))
 					return false;
 			}
 			return true;
 		}
 		// For now, no more tricks up my sleeve; get an iterator
-		for(Iterator iter= other.iterator(); iter.hasNext(); ) {
-			TType t= (TType) iter.next();
+		for(Iterator<TType> iter= other.iterator(); iter.hasNext(); ) {
+			TType t= iter.next();
 
 			if (! TTypes.canAssignTo(t, fUpperBound))
 				return false;
@@ -188,7 +201,8 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		return enumerate().iterator();
 //		return new Iterator() {
 //			// First type returned is fUpperBound, then each of the subtypes, in turn
@@ -225,6 +239,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		return getElementTypeOf(fUpperBound).getSubTypes().length == 0;
 	}
@@ -232,6 +247,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return fUpperBound;
 	}
@@ -241,6 +257,7 @@ public class SubTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		if (fEnumCache == null) {
 			if (fUpperBound instanceof ArrayType) {
@@ -255,6 +272,7 @@ public class SubTypesOfSingleton extends TypeSet {
 		return fEnumCache;
 	}
 
+	@Override
 	public boolean equals(Object o) {
 		if (!(o instanceof SubTypesOfSingleton))
 			return false;
@@ -263,10 +281,12 @@ public class SubTypesOfSingleton extends TypeSet {
 		return other.fUpperBound.equals(fUpperBound);
 	}
 	
+	@Override
 	public int hashCode() {
 		return fUpperBound.hashCode();
 	}
 
+	@Override
 	public String toString() {
 		return "<" + fID + ": subTypes(" + fUpperBound.getPrettySignature() + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java
index 8460a1e..cc74e28 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return fUpperBounds.isUniverse() || fUpperBounds.contains(getJavaLangObject());
 	}
@@ -37,6 +38,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this; //new SubTypesSet(fUpperBounds.makeClone());
 	}
@@ -44,6 +46,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object o) {
 		if (o instanceof SubTypesSet) {
 			SubTypesSet other= (SubTypesSet) o;
@@ -57,6 +60,7 @@ public class SubTypesSet extends TypeSet {
 			return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return fUpperBounds.hashCode();
 	}
@@ -64,6 +68,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#intersectedWith(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.EnumeratedTypeSet)
 	 */
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		if (fUpperBounds.equals(s2))
 			return s2; // xsect(subTypes(A),A) = A
@@ -126,6 +131,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#subTypes()
 	 */
+	@Override
 	public TypeSet subTypes() {
 		return this; // makeClone();
 	}
@@ -133,6 +139,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return fUpperBounds.isEmpty();
 	}
@@ -140,6 +147,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		if (fEnumCache != null) return fEnumCache.contains(t);
 
@@ -148,10 +156,10 @@ public class SubTypesSet extends TypeSet {
 
 		// Find the "upper frontier", i.e. the upper bound, and see whether
 		// the given type is a subtype of any of those.
-		Iterator ubIter= fUpperBounds.upperBound().iterator();
+		Iterator<TType> ubIter= fUpperBounds.upperBound().iterator();
 
 		for(; ubIter.hasNext(); ) {
-			TType ub= (TType) ubIter.next();
+			TType ub= ubIter.next();
 
 			if (TTypes.canAssignTo(t, ub))
 				return true;
@@ -162,6 +170,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.EnumeratedTypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		if (fEnumCache != null) return fEnumCache.containsAll(s);
 
@@ -169,14 +178,14 @@ public class SubTypesSet extends TypeSet {
 			return true;
 
 		// Make sure all elements of s are contained in this set
-		for(Iterator sIter= s.iterator(); sIter.hasNext(); ) {
-			TType t= (TType) sIter.next();
+		for(Iterator<TType> sIter= s.iterator(); sIter.hasNext(); ) {
+			TType t= sIter.next();
 			boolean found= false;
 
 			// Scan the "upper frontier", i.e. the upper bound set, and see whether
 			// 't' is a subtype of any of those.
-			for(Iterator ubIter= fUpperBounds /*.upperBound() */.iterator(); ubIter.hasNext(); ) {
-				TType ub= (TType) ubIter.next();
+			for(Iterator<TType> ubIter= fUpperBounds /*.upperBound() */.iterator(); ubIter.hasNext(); ) {
+				TType ub= ubIter.next();
 
 				if (TTypes.canAssignTo(t, ub)) {
 					found= true;
@@ -204,6 +213,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		if (!fUpperBounds.isSingleton())
 			return false;
@@ -216,6 +226,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return fUpperBounds.anyMember();
 	}
@@ -223,6 +234,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return fUpperBounds; // perhaps should be unmodifiable?
 	}
@@ -230,6 +242,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		return enumerate().lowerBound();
 	}
@@ -237,13 +250,15 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		return enumerate().iterator();
 	}
 
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return "<" + fID + ": subTypes(" + fUpperBounds + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
@@ -251,6 +266,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return false;
 	}
@@ -258,6 +274,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return fUpperBounds.isSingleton();
 	}
@@ -265,6 +282,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return null;
 	}
@@ -272,6 +290,7 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return fUpperBounds.isSingleton() ? fUpperBounds.anyMember() : null;
 	}
@@ -281,20 +300,21 @@ public class SubTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		if (fEnumCache == null) {
 			fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment());
 
-			for(Iterator iter= fUpperBounds.iterator(); iter.hasNext(); ) {
-				TType ub= (TType) iter.next();
+			for(Iterator<TType> iter= fUpperBounds.iterator(); iter.hasNext(); ) {
+				TType ub= iter.next();
 
 				if (ub instanceof ArrayType) {
 					ArrayType at= (ArrayType) ub;
 					int numDims= at.getDimensions();
-					for(Iterator elemSubIter=TTypes.getAllSubTypesIterator(at.getElementType()); elemSubIter.hasNext(); )
-						fEnumCache.add(TTypes.createArrayType((TType) elemSubIter.next(), numDims));
+					for(Iterator<TType> elemSubIter=TTypes.getAllSubTypesIterator(at.getElementType()); elemSubIter.hasNext(); )
+						fEnumCache.add(TTypes.createArrayType(elemSubIter.next(), numDims));
 				} else {
-					for (Iterator iterator= TTypes.getAllSubTypesIterator(ub); iterator.hasNext();) {
+					for (Iterator<TType> iterator= TTypes.getAllSubTypesIterator(ub); iterator.hasNext();) {
 						fEnumCache.fMembers.add(iterator.next());
 					}
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java
index 0b5afde..c556271 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return false;
 	}
@@ -37,6 +38,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this; //new SuperTypesOfSingleton(fLowerBound, getTypeSetEnvironment());
 	}
@@ -44,6 +46,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#intersectedWith(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet other) {
 		if (other.isSingleton() && other.anyMember().equals(fLowerBound))
 			return other;		// xsect(superTypes(A),A) = A
@@ -80,6 +83,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return false;
 	}
@@ -87,6 +91,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return new SingletonTypeSet(getJavaLangObject(), getTypeSetEnvironment());
 	}
@@ -94,6 +99,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		return new SingletonTypeSet(fLowerBound, getTypeSetEnvironment());
 	}
@@ -101,6 +107,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return true;
 	}
@@ -108,6 +115,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return true;
 	}
@@ -115,6 +123,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return fLowerBound;
 	}
@@ -122,6 +131,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return getJavaLangObject();
 	}
@@ -129,6 +139,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#superTypes()
 	 */
+	@Override
 	public TypeSet superTypes() {
 		return this; // makeClone();
 	}
@@ -136,6 +147,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		if (t.equals(fLowerBound))
 			return true;
@@ -147,6 +159,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet other) {
 		// Optimization: if other is also a SubTypeOfSingleton, just compare bounds
 		if (other instanceof SuperTypesOfSingleton) {
@@ -158,8 +171,8 @@ public class SuperTypesOfSingleton extends TypeSet {
 			SuperTypesSet otherSuper= (SuperTypesSet) other;
 			TypeSet otherLowerBounds= otherSuper.lowerBound();
 
-			for(Iterator iter= otherLowerBounds.iterator(); iter.hasNext(); ) {
-				TType t= (TType) iter.next();
+			for(Iterator<TType> iter= otherLowerBounds.iterator(); iter.hasNext(); ) {
+				TType t= iter.next();
 				if (! TTypes.canAssignTo(fLowerBound, t))
 					return false;
 			}
@@ -169,8 +182,8 @@ public class SuperTypesOfSingleton extends TypeSet {
 			return false;
 		}
 		// For now, no more tricks up my sleeve; get an iterator
-		for(Iterator iter= other.iterator(); iter.hasNext(); ) {
-			TType t= (TType) iter.next();
+		for(Iterator<TType> iter= other.iterator(); iter.hasNext(); ) {
+			TType t= iter.next();
 
 			if (! TTypes.canAssignTo(fLowerBound, t))
 				return false;
@@ -181,7 +194,8 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		return enumerate().iterator();
 //		return new Iterator() {
 //			// First type returned is fLowerBound, then each of the supertypes, in turn
@@ -207,6 +221,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		// The only thing that doesn't have at least 1 proper supertype is java.lang.Object
 		return fLowerBound.equals(getJavaLangObject());
@@ -215,6 +230,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return fLowerBound;
 	}
@@ -224,6 +240,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		if (fEnumCache == null) {
 			if (fLowerBound instanceof ArrayType) {
@@ -239,6 +256,7 @@ public class SuperTypesOfSingleton extends TypeSet {
 		return fEnumCache;
 	}
 
+	@Override
 	public boolean equals(Object o) {
 		if (!(o instanceof SuperTypesOfSingleton))
 			return false;
@@ -247,10 +265,12 @@ public class SuperTypesOfSingleton extends TypeSet {
 		return other.fLowerBound.equals(fLowerBound);
 	}
 
+	@Override
 	public int hashCode() {
 		return fLowerBound.hashCode();
 	}
 	
+	@Override
 	public String toString() {
 		return "<" + fID + ": superTypes(" + fLowerBound.getPrettySignature() + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java
index 2d14391..c1efd4a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return fLowerBounds.isUniverse();
 	}
@@ -39,6 +40,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this; //new SuperTypesSet(fLowerBounds.makeClone(), getTypeSetEnvironment());
 	}
@@ -46,6 +48,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		return new SingletonTypeSet(getTypeSetEnvironment().getJavaLangObject(), getTypeSetEnvironment());
 	}
@@ -53,6 +56,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		// Ask the operand for its lower-bound, in case it's something like an
 		// EnumeratedTypeSet, which may have things in it other than the lower
@@ -63,6 +67,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#intersectedWith(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.EnumeratedTypeSet)
 	 */
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		if (fLowerBounds.equals(s2))
 			return s2; // xsect(superTypes(A),A) = A
@@ -123,6 +128,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#superTypes()
 	 */
+	@Override
 	public TypeSet superTypes() {
 		return this; // makeClone();
 	}
@@ -130,6 +136,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return fLowerBounds.isEmpty();
 	}
@@ -137,6 +144,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		if (fEnumCache != null) return fEnumCache.contains(t);
 
@@ -147,8 +155,8 @@ public class SuperTypesSet extends TypeSet {
 
 		// Find the "lower frontier", i.e. the lower bound, and see whether
 		// the given type is a supertype of any of those.
-		for(Iterator lbIter= fLowerBounds /*.lowerBound() */.iterator(); lbIter.hasNext(); ) {
-			TType lb= (TType) lbIter.next();
+		for(Iterator<TType> lbIter= fLowerBounds /*.lowerBound() */.iterator(); lbIter.hasNext(); ) {
+			TType lb= lbIter.next();
 
 			if (TTypes.canAssignTo(lb, t))
 				return true;
@@ -159,6 +167,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.EnumeratedTypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		if (fEnumCache != null) return fEnumCache.containsAll(s);
 
@@ -170,14 +179,14 @@ public class SuperTypesSet extends TypeSet {
 			return true;
 
 		// Make sure all elements of s are contained in this set
-		for(Iterator sIter= s.iterator(); sIter.hasNext(); ) {
-			TType t= (TType) sIter.next();
+		for(Iterator<TType> sIter= s.iterator(); sIter.hasNext(); ) {
+			TType t= sIter.next();
 			boolean found= false;
 
 			// Scan the "lower frontier", i.e. the lower bound set, and see whether
 			// 't' is a supertype of any of those.
-			for(Iterator lbIter= fLowerBounds /*.lowerBound()*/.iterator(); lbIter.hasNext(); ) {
-				TType lb= (TType) lbIter.next();
+			for(Iterator<TType> lbIter= fLowerBounds /*.lowerBound()*/.iterator(); lbIter.hasNext(); ) {
+				TType lb= lbIter.next();
 
 				if (TTypes.canAssignTo(lb, t)) {
 					found= true;
@@ -192,6 +201,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		if (fEnumCache != null) return fEnumCache.isSingleton();
 
@@ -201,6 +211,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return fLowerBounds.anyMember();
 	}
@@ -208,6 +219,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object o) {
 		if (o instanceof SuperTypesSet) {
 			SuperTypesSet other= (SuperTypesSet) o;
@@ -221,6 +233,7 @@ public class SuperTypesSet extends TypeSet {
 			return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return fLowerBounds.hashCode();
 	}
@@ -228,10 +241,12 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		return enumerate().iterator();
 	}
 
+	@Override
 	public String toString() {
 		return "<" + fID + ": superTypes(" + fLowerBounds + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
@@ -239,6 +254,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return fLowerBounds.isSingleton();
 	}
@@ -246,6 +262,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return false;
 	}
@@ -253,6 +270,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return fLowerBounds.isSingleton() ? fLowerBounds.anyMember() : null;
 	}
@@ -260,6 +278,7 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return null;
 	}
@@ -269,22 +288,23 @@ public class SuperTypesSet extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		if (fEnumCache == null) {
 			fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment());
 			boolean anyLBIsIntfOrArray= false;
 
-			for(Iterator iter= fLowerBounds.iterator(); iter.hasNext(); ) {
-				TType lb= (TType) iter.next();
+			for(Iterator<TType> iter= fLowerBounds.iterator(); iter.hasNext(); ) {
+				TType lb= iter.next();
 
 				if (lb instanceof ArrayType) {
 					ArrayType at= (ArrayType) lb;
 					int numDims= at.getDimensions();
-					for(Iterator elemSuperIter=TTypes.getAllSuperTypesIterator(at.getElementType()); elemSuperIter.hasNext(); )
-						fEnumCache.add(TTypes.createArrayType((TType) elemSuperIter.next(), numDims));
+					for(Iterator<TType> elemSuperIter=TTypes.getAllSuperTypesIterator(at.getElementType()); elemSuperIter.hasNext(); )
+						fEnumCache.add(TTypes.createArrayType(elemSuperIter.next(), numDims));
 					anyLBIsIntfOrArray= true;
 				} else {
-					for (Iterator iterator= TTypes.getAllSuperTypesIterator(lb); iterator.hasNext(); )
+					for (Iterator<TType> iterator= TTypes.getAllSuperTypesIterator(lb); iterator.hasNext(); )
 					fEnumCache.fMembers.add(iterator.next());
 				}
 				fEnumCache.add(lb);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java
index 4ee79cb..2f79bd6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,8 +65,10 @@ public abstract class TypeSet implements ITypeSet {
 		return null;
 	}
 	
+	@Override
 	public abstract boolean equals(Object obj);
 	
+	@Override
 	public abstract int hashCode();
 
 	/**
@@ -230,7 +232,7 @@ public abstract class TypeSet implements ITypeSet {
 	/**
 	 * @return an iterator over the types in the receiver
 	 */
-	abstract public Iterator iterator();
+	abstract public Iterator<TType> iterator();
 
 	/**
 	 * @return a new TypeSet enumerating the receiver's contents
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetEnvironment.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetEnvironment.java
index 7ad5e80..8a31169 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetEnvironment.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetEnvironment.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,10 +25,10 @@ public class TypeSetEnvironment {
 	private final TypeUniverseSet fUniverse;
 	private final EmptyTypeSet fEmptyTypeSet;
 
-	private final Map/*<TType, SubTypesOfSingleton>*/ fSubtypesOfSingletons= new LinkedHashMap();//@perf
-	private final Map/*<TType, SubTypesSet>*/ fSubTypesSets= new LinkedHashMap();//@perf
-	private final Map/*<TType, SuperTypesOfSingleton>*/ fSuperTypesOfSingletons= new LinkedHashMap();//@perf
-	private final Map/*<TType, SuperTypesSet>*/ fSuperTypesSets= new LinkedHashMap();//@perf
+	private final Map<TType, SubTypesOfSingleton> fSubtypesOfSingletons= new LinkedHashMap<TType, SubTypesOfSingleton>();//@perf
+	private final Map<TypeSet, SubTypesSet> fSubTypesSets= new LinkedHashMap<TypeSet, SubTypesSet>();//@perf
+	private final Map<TType, SuperTypesOfSingleton> fSuperTypesOfSingletons= new LinkedHashMap<TType, SuperTypesOfSingleton>();//@perf
+	private final Map<Object, SuperTypesSet> fSuperTypesSets= new LinkedHashMap<Object, SuperTypesSet>();//@perf
 
 	private int fgCommonExprHits= 0;
 	private int fgCommonExprMisses= 0;
@@ -56,7 +56,7 @@ public class TypeSetEnvironment {
 			return this.getUniverseTypeSet();
 		if (fSubtypesOfSingletons.containsKey(superType)) {
 			fgCommonExprHits++;
-			return (SubTypesOfSingleton) fSubtypesOfSingletons.get(superType);
+			return fSubtypesOfSingletons.get(superType);
 		} else {
 			SubTypesOfSingleton s= new SubTypesOfSingleton(superType, this);
 
@@ -69,7 +69,7 @@ public class TypeSetEnvironment {
 	public SubTypesSet createSubTypesSet(TypeSet superTypes) {
 		if (fSubTypesSets.containsKey(superTypes)) {
 			fgCommonExprHits++;
-			return (SubTypesSet) fSubTypesSets.get(superTypes);
+			return fSubTypesSets.get(superTypes);
 		} else {
 			SubTypesSet s= new SubTypesSet(superTypes);
 
@@ -82,7 +82,7 @@ public class TypeSetEnvironment {
 	public SuperTypesOfSingleton createSuperTypesOfSingleton(TType subType) {
 		if (fSuperTypesOfSingletons.containsKey(subType)) {
 			fgCommonExprHits++;
-			return (SuperTypesOfSingleton) fSuperTypesOfSingletons.get(subType);
+			return fSuperTypesOfSingletons.get(subType);
 		} else {
 			SuperTypesOfSingleton s= new SuperTypesOfSingleton(subType, this);
 
@@ -95,7 +95,7 @@ public class TypeSetEnvironment {
 	public SuperTypesSet createSuperTypesSet(TType subType) {
 		if (fSuperTypesSets.containsKey(subType)) {
 			fgCommonExprHits++;
-			return (SuperTypesSet) fSuperTypesSets.get(subType);
+			return fSuperTypesSets.get(subType);
 		} else {
 			SuperTypesSet s= new SuperTypesSet(subType, this);
 
@@ -107,7 +107,7 @@ public class TypeSetEnvironment {
 
 	public SuperTypesSet createSuperTypesSet(TypeSet subTypes) {
 		if (fSuperTypesSets.containsKey(subTypes))
-			return (SuperTypesSet) fSuperTypesSets.get(subTypes);
+			return fSuperTypesSets.get(subTypes);
 		else {
 			SuperTypesSet s= new SuperTypesSet(subTypes, this);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java
index b37d061..3c563df 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		return fLHS.isUniverse() && fRHS.isUniverse();
 	}
@@ -49,6 +50,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this; //new TypeSetIntersection(fLHS.makeClone(), fRHS.makeClone());
 	}
@@ -56,6 +58,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		if (fLHS.isEmpty() || fRHS.isEmpty())
 			return true;
@@ -91,6 +94,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		return fLHS.contains(t) && fRHS.contains(t);
 	}
@@ -98,6 +102,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		return fLHS.containsAll(s) && fRHS.containsAll(s);
 	}
@@ -105,6 +110,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#subTypes()
 	 */
+	@Override
 	public TypeSet subTypes() {
 		if (isUniverse() || contains(getJavaLangObject()))
 			return getTypeSetEnvironment().getUniverseTypeSet();
@@ -118,6 +124,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#superTypes()
 	 */
+	@Override
 	public TypeSet superTypes() {
 		// super(xsect(super(a),super(b))) == xsect(super(a),super(b))
 		if ((fLHS instanceof SuperTypesSet || fLHS instanceof SuperTypesOfSingleton) &&
@@ -129,6 +136,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		if (fLHS.contains(getJavaLangObject()) && fRHS.contains(getJavaLangObject()))
 			return new SingletonTypeSet(getTypeSetEnvironment().getJavaLangObject(), getTypeSetEnvironment());
@@ -145,6 +153,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		if (fLHS.hasUniqueLowerBound() && fRHS.hasUniqueLowerBound()) {
 			TType lhsBound= fLHS.uniqueLowerBound();
@@ -166,6 +175,7 @@ public class TypeSetIntersection extends TypeSet {
 		return xsect.lowerBound();
 	}
 
+	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		if (s2.equals(fLHS)) // xsect(s2,xsect(s2,?)) = xsect(s2,?)
 			return this;
@@ -195,12 +205,13 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		if (fEnumCache != null) return fEnumCache.isSingleton();
 
 		int count= 0;
-		for(Iterator lhsIter= fLHS.iterator(); lhsIter.hasNext(); ) {
-			TType t= (TType) lhsIter.next();
+		for(Iterator<TType> lhsIter= fLHS.iterator(); lhsIter.hasNext(); ) {
+			TType t= lhsIter.next();
 			if (fRHS.contains(t))
 				count++;
 			if (count > 1)
@@ -212,11 +223,12 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		if (fEnumCache != null) return fEnumCache.anyMember();
 
-		for(Iterator lhsIter= fLHS.iterator(); lhsIter.hasNext(); ) {
-			TType t= (TType) lhsIter.next();
+		for(Iterator<TType> lhsIter= fLHS.iterator(); lhsIter.hasNext(); ) {
+			TType t= lhsIter.next();
 			if (fRHS.contains(t))
 				return t;
 		}
@@ -226,7 +238,8 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		return enumerate().iterator();
 
 //		return new Iterator() {
@@ -264,6 +277,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object o) {
 		if (o instanceof TypeSetIntersection) {
 			TypeSetIntersection other= (TypeSetIntersection) o;
@@ -272,10 +286,12 @@ public class TypeSetIntersection extends TypeSet {
 			return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return fLHS.hashCode() * 37 + fRHS.hashCode();
 	}
 	
+	@Override
 	public String toString() {
 		return "<" + fID + ": intersect(" + fLHS + "," + fRHS + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 	}
@@ -283,6 +299,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return false;
 	}
@@ -290,6 +307,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return false;
 	}
@@ -297,6 +315,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return null;
 	}
@@ -304,6 +323,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return null;
 	}
@@ -313,6 +333,7 @@ public class TypeSetIntersection extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		if (fEnumCache == null) {
 			EnumeratedTypeSet lhsSet= fLHS.enumerate();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java
index a4db468..d3fe21c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
 	 */
+	@Override
 	public boolean isUniverse() {
 		if (fLHS.isUniverse() || fRHS.isUniverse())
 			return true;
@@ -38,6 +39,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return new TypeSetUnion(fLHS.makeClone(), fRHS.makeClone());
 	}
@@ -45,6 +47,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
 	 */
+	@Override
 	public boolean isEmpty() {
 		return fLHS.isEmpty() && fRHS.isEmpty();
 	}
@@ -52,6 +55,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		return fLHS.contains(t) || fRHS.contains(t);
 	}
@@ -59,6 +63,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		return fLHS.containsAll(s) || fRHS.containsAll(s);
 	}
@@ -66,6 +71,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
 	 */
+	@Override
 	public TType anyMember() {
 		return fLHS.anyMember();
 	}
@@ -73,6 +79,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object o) {
 		if (o instanceof TypeSetUnion) {
 			TypeSetUnion other= (TypeSetUnion) o;
@@ -81,6 +88,7 @@ public class TypeSetUnion extends TypeSet {
 			return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return fLHS.hashCode() * 37 + fRHS.hashCode();
 	}
@@ -88,6 +96,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
 	 */
+	@Override
 	public TypeSet upperBound() {
 		throw new IllegalStateException("unimplemented"); //$NON-NLS-1$
 	}
@@ -95,6 +104,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
 	 */
+	@Override
 	public TypeSet lowerBound() {
 		throw new IllegalStateException("unimplemented"); //$NON-NLS-1$
 	}
@@ -102,12 +112,14 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
 	 */
-	public Iterator iterator() {
+	@Override
+	public Iterator<TType> iterator() {
 		throw new IllegalStateException("unimplemented"); //$NON-NLS-1$
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
 	 */
+	@Override
 	public boolean isSingleton() {
 		return fLHS.isSingleton() && fRHS.isSingleton() && fLHS.anyMember().equals(fRHS.anyMember());
 	}
@@ -115,6 +127,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
 	 */
+	@Override
 	public boolean hasUniqueLowerBound() {
 		return false;
 	}
@@ -122,6 +135,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
 	 */
+	@Override
 	public boolean hasUniqueUpperBound() {
 		return false;
 	}
@@ -129,6 +143,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
 	 */
+	@Override
 	public TType uniqueLowerBound() {
 		return null;
 	}
@@ -136,6 +151,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
 	 */
+	@Override
 	public TType uniqueUpperBound() {
 		return null;
 	}
@@ -143,6 +159,7 @@ public class TypeSetUnion extends TypeSet {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
 	 */
+	@Override
 	public EnumeratedTypeSet enumerate() {
 		EnumeratedTypeSet result= fLHS.enumerate();
 
@@ -150,6 +167,7 @@ public class TypeSetUnion extends TypeSet {
 		return result;
 	}
 
+	@Override
 	public String toString() {
 		return "<" + fID + ": union(" + fLHS + "," + fRHS + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeUniverseSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeUniverseSet.java
index f9efad3..c396427 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeUniverseSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeUniverseSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ public class TypeUniverseSet extends SubTypesOfSingleton {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.SubTypesSet#contains(TType)
 	 */
+	@Override
 	public boolean contains(TType t) {
 		return true;
 	}
@@ -28,6 +29,7 @@ public class TypeUniverseSet extends SubTypesOfSingleton {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.SubTypesSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public boolean containsAll(TypeSet s) {
 		return true;
 	}
@@ -35,6 +37,7 @@ public class TypeUniverseSet extends SubTypesOfSingleton {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#addedTo(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
 	 */
+	@Override
 	public TypeSet addedTo(TypeSet that) {
 		return this;
 	}
@@ -42,10 +45,12 @@ public class TypeUniverseSet extends SubTypesOfSingleton {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.SubTypesOfSingleton#makeClone()
 	 */
+	@Override
 	public TypeSet makeClone() {
 		return this; // new TypeUniverseSet();
 	}
 
+	@Override
 	public String toString() {
 		return "{ " + fID + ": <universe> }";  //$NON-NLS-1$//$NON-NLS-2$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ArrayElementVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ArrayElementVariable2.java
index 02a5826..70ab220 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ArrayElementVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ArrayElementVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ public final class ArrayElementVariable2 extends ConstraintVariable2 {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fParentCv.hashCode();
 	}
@@ -32,6 +33,7 @@ public final class ArrayElementVariable2 extends ConstraintVariable2 {
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (this == other)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/CollectionElementVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/CollectionElementVariable2.java
index 11f4e6c..fb61e42 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/CollectionElementVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/CollectionElementVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public final class CollectionElementVariable2 extends ConstraintVariable2 {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fParentCv.hashCode() ^ fTypeVariableKey.hashCode();
 	}
@@ -57,6 +58,7 @@ public final class CollectionElementVariable2 extends ConstraintVariable2 {
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (this == other)
 			return true;
@@ -85,6 +87,7 @@ public final class CollectionElementVariable2 extends ConstraintVariable2 {
 //			return ((CollectionElementVariable2) fElementCv).getCompilationUnit();
 	}
 
+	@Override
 	public String toString() {
 		return "Elem[" + fParentCv.toString() + ", " + fTypeVariableKey + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ConstraintVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ConstraintVariable2.java
index 6a51448..a453d40 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ConstraintVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ConstraintVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -103,6 +103,7 @@ public abstract class ConstraintVariable2 {
 		fTypeEquivalenceSet= set;
 	}
 
+	@Override
 	public String toString() {
 		String toString= (String) getData(TO_STRING);
 		if (toString != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ImmutableTypeVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ImmutableTypeVariable2.java
index a9e3e31..0102a29 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ImmutableTypeVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ImmutableTypeVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ public final class ImmutableTypeVariable2 extends ConstraintVariable2 {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return getType().hashCode();
 	}
@@ -34,6 +35,7 @@ public final class ImmutableTypeVariable2 extends ConstraintVariable2 {
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (this == other)
 			return true;
@@ -43,6 +45,7 @@ public final class ImmutableTypeVariable2 extends ConstraintVariable2 {
 		return getType() == ((ImmutableTypeVariable2) other).getType();
 	}
 
+	@Override
 	public String toString() {
 		return getType().getPrettySignature();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterTypeVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterTypeVariable2.java
index 89707e8..13ff6df 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterTypeVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterTypeVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public final class ParameterTypeVariable2 extends ConstraintVariable2 implements
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return getParameterIndex() ^ getKey().hashCode();
 	}
@@ -61,6 +62,7 @@ public final class ParameterTypeVariable2 extends ConstraintVariable2 implements
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (this == other)
 			return true;
@@ -72,6 +74,7 @@ public final class ParameterTypeVariable2 extends ConstraintVariable2 implements
 				&& getKey().equals(other2.getKey());
 	}
 
+	@Override
 	public String toString() {
 		String toString= (String) getData(TO_STRING);
 		return toString == null ? "[Parameter(" + fParameterIndex + "," + fKey + ")]" : toString; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterizedTypeVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterizedTypeVariable2.java
index 0060cfe..9c91ca3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterizedTypeVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ParameterizedTypeVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public final class ParameterizedTypeVariable2 extends ConstraintVariable2 {
 
 	// hashCode() and equals(..) not necessary (unique per construction)
 
+	@Override
 	public String toString() {
 		return getType().getName();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ReturnTypeVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ReturnTypeVariable2.java
index 59f342a..d20322f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ReturnTypeVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/ReturnTypeVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public final class ReturnTypeVariable2 extends ConstraintVariable2 implements IS
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return getKey().hashCode();
 	}
@@ -44,6 +45,7 @@ public final class ReturnTypeVariable2 extends ConstraintVariable2 implements IS
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (this == other)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/SubTypeConstraint2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/SubTypeConstraint2.java
index d9da7f3..956a659 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/SubTypeConstraint2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/SubTypeConstraint2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public final class SubTypeConstraint2 implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public final boolean equals(Object other) {
 		// can use object identity on ConstraintVariables, since we have the stored (or to be stored) objects
 		if (other.getClass() != SubTypeConstraint2.class)
@@ -48,6 +49,7 @@ public final class SubTypeConstraint2 implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public final int hashCode() {
 		return fDescendant.hashCode() ^ 37 * fAncestor.hashCode();
 	}
@@ -55,6 +57,7 @@ public final class SubTypeConstraint2 implements ITypeConstraint2 {
 	/*
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public final String toString() {
 		return fDescendant.toString() + " <= " + fAncestor.toString(); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java
index d5c4136..49db2f8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,11 +20,11 @@ import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TypeVar
 
 public class TTypes {
 
-	private static class AllSupertypesIterator implements Iterator {
-		private final Stack fWorklist;
+	private static class AllSupertypesIterator implements Iterator<TType> {
+		private final Stack<TType> fWorklist;
 
 		public AllSupertypesIterator(TType type) {
-			fWorklist= new Stack();
+			fWorklist= new Stack<TType>();
 			pushSupertypes(type);
 		}
 
@@ -32,8 +32,8 @@ public class TTypes {
 			return ! fWorklist.empty();
 		}
 
-		public Object next() {
-			TType result= (TType) fWorklist.pop();
+		public TType next() {
+			TType result= fWorklist.pop();
 			pushSupertypes(result);
 			return result;
 		}
@@ -66,11 +66,11 @@ public class TTypes {
 		}
 	}
 
-	private static class AllSubtypesIterator implements Iterator {
-		private final Stack fWorklist;
+	private static class AllSubtypesIterator implements Iterator<TType> {
+		private final Stack<TType> fWorklist;
 
 		public AllSubtypesIterator(TType type) {
-			fWorklist= new Stack();
+			fWorklist= new Stack<TType>();
 			fWorklist.push(type.getTypeDeclaration());
 		}
 
@@ -78,8 +78,8 @@ public class TTypes {
 			return ! fWorklist.empty();
 		}
 
-		public Object next() {
-			TType result= (TType) fWorklist.pop();
+		public TType next() {
+			TType result= fWorklist.pop();
 			TType[] subTypes= result.getSubTypes();
 			for (int i= 0; i < subTypes.length; i++)
 				fWorklist.push(subTypes[i].getTypeDeclaration());
@@ -103,14 +103,14 @@ public class TTypes {
 	/**
 	 * @return all subtypes of this type (including this type)
 	 */
-	public static Iterator getAllSubTypesIterator(TType type) {
+	public static Iterator<TType> getAllSubTypesIterator(TType type) {
 		return new AllSubtypesIterator(type);
 	}
 
 	/**
 	 * @return all proper supertypes of this type
 	 */
-	public static Iterator getAllSuperTypesIterator(TType type) {
+	public static Iterator<TType> getAllSuperTypesIterator(TType type) {
 		return new AllSupertypesIterator(type);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java
index 5e48a33..564da45 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,21 +47,21 @@ public class TypeEquivalenceSet {
 
 	public void addAll(ConstraintVariable2[] variables) {
 		if (fVariables.length * variables.length > 100) {
-			LinkedHashSet result= new LinkedHashSet(fVariables.length + variables.length);
+			LinkedHashSet<ConstraintVariable2> result= new LinkedHashSet<ConstraintVariable2>(fVariables.length + variables.length);
 			result.addAll(Arrays.asList(fVariables));
 			result.addAll(Arrays.asList(variables));
-			fVariables= (ConstraintVariable2[]) result.toArray(new ConstraintVariable2[result.size()]);
+			fVariables= result.toArray(new ConstraintVariable2[result.size()]);
 
 		} else {
-			List elements= Arrays.asList(fVariables);
-			ArrayList result= new ArrayList(fVariables.length + variables.length);
+			List<ConstraintVariable2> elements= Arrays.asList(fVariables);
+			ArrayList<ConstraintVariable2> result= new ArrayList<ConstraintVariable2>(fVariables.length + variables.length);
 			result.addAll(elements);
 			for (int i= 0; i < variables.length; i++) {
 				ConstraintVariable2 right= variables[i];
 				if (! result.contains(right))
 					result.add(right);
 			}
-			fVariables= (ConstraintVariable2[]) result.toArray(new ConstraintVariable2[result.size()]);
+			fVariables= result.toArray(new ConstraintVariable2[result.size()]);
 		}
 
 	}
@@ -74,6 +74,7 @@ public class TypeEquivalenceSet {
 		return fTypeEstimate;
 	}
 
+	@Override
 	public String toString() {
 		StringBuffer result= new StringBuffer();
 		if (fVariables.length > 0)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeVariable2.java
index 0ba36fb..5d664de 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ public final class TypeVariable2 extends ConstraintVariable2 implements ITypeCon
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return getRange().hashCode() ^ getType().hashCode();
 	}
@@ -46,6 +47,7 @@ public final class TypeVariable2 extends ConstraintVariable2 implements ITypeCon
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		//TODO: unique per construction?  //return this == other;
 		if (this == other)
@@ -66,6 +68,7 @@ public final class TypeVariable2 extends ConstraintVariable2 implements ITypeCon
 		return fRange.getCompilationUnit();
 	}
 
+	@Override
 	public String toString() {
 		return super.toString() + " [" + fRange.getSourceRange().getOffset() + '+' + fRange.getSourceRange().getLength() + ']'; //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/VariableVariable2.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/VariableVariable2.java
index cca2cd5..7117c00 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/VariableVariable2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/VariableVariable2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public final class VariableVariable2 extends ConstraintVariable2 implements ISou
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fKey.hashCode();
 	}
@@ -53,6 +54,7 @@ public final class VariableVariable2 extends ConstraintVariable2 implements ISou
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (this == other)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java
index f71f10b..abfefac 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,21 +29,25 @@ import org.eclipse.jdt.core.dom.TypeDeclaration;
 
 public abstract class AbstractExceptionAnalyzer extends ASTVisitor {
 
-	private List fCurrentExceptions;	// Elements in this list are of type TypeBinding
-	private Stack fTryStack;
+	private List<ITypeBinding> fCurrentExceptions;	// Elements in this list are of type TypeBinding
+	private Stack<List<ITypeBinding>> fTryStack;
 
 	protected AbstractExceptionAnalyzer() {
-		fTryStack= new Stack();
-		fCurrentExceptions= new ArrayList(1);
+		fTryStack= new Stack<List<ITypeBinding>>();
+		fCurrentExceptions= new ArrayList<ITypeBinding>(1);
 		fTryStack.push(fCurrentExceptions);
 	}
 
+	@Override
 	public abstract boolean visit(ThrowStatement node);
 
+	@Override
 	public abstract boolean visit(MethodInvocation node);
 
+	@Override
 	public abstract boolean visit(ClassInstanceCreation node);
 
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		// Don't dive into a local type.
 		if (node.isLocalTypeDeclaration())
@@ -51,6 +55,7 @@ public abstract class AbstractExceptionAnalyzer extends ASTVisitor {
 		return true;
 	}
 
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		// Don't dive into a local type.
 		if (node.isLocalTypeDeclaration())
@@ -58,6 +63,7 @@ public abstract class AbstractExceptionAnalyzer extends ASTVisitor {
 		return true;
 	}
 
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		// Don't dive into a local type.
 		if (node.isLocalTypeDeclaration())
@@ -65,31 +71,33 @@ public abstract class AbstractExceptionAnalyzer extends ASTVisitor {
 		return true;
 	}
 
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		// Don't dive into a local type.
 		return false;
 	}
 
+	@Override
 	public boolean visit(TryStatement node) {
-		fCurrentExceptions= new ArrayList(1);
+		fCurrentExceptions= new ArrayList<ITypeBinding>(1);
 		fTryStack.push(fCurrentExceptions);
 
 		// visit try block
 		node.getBody().accept(this);
 
 		// Remove those exceptions that get catch by following catch blocks
-		List catchClauses= node.catchClauses();
+		List<CatchClause> catchClauses= node.catchClauses();
 		if (!catchClauses.isEmpty())
 			handleCatchArguments(catchClauses);
-		List current= (List)fTryStack.pop();
-		fCurrentExceptions= (List)fTryStack.peek();
-		for (Iterator iter= current.iterator(); iter.hasNext();) {
-			addException((ITypeBinding)iter.next());
+		List<ITypeBinding> current= fTryStack.pop();
+		fCurrentExceptions= fTryStack.peek();
+		for (Iterator<ITypeBinding> iter= current.iterator(); iter.hasNext();) {
+			addException(iter.next());
 		}
 
 		// visit catch and finally
-		for (Iterator iter= catchClauses.iterator(); iter.hasNext(); ) {
-			((CatchClause)iter.next()).accept(this);
+		for (Iterator<CatchClause> iter= catchClauses.iterator(); iter.hasNext(); ) {
+			iter.next().accept(this);
 		}
 		if (node.getFinally() != null)
 			node.getFinally().accept(this);
@@ -111,18 +119,18 @@ public abstract class AbstractExceptionAnalyzer extends ASTVisitor {
 			fCurrentExceptions.add(exception);
 	}
 
-	protected List getCurrentExceptions() {
+	protected List<ITypeBinding> getCurrentExceptions() {
 		return fCurrentExceptions;
 	}
 
-	private void handleCatchArguments(List catchClauses) {
-		for (Iterator iter= catchClauses.iterator(); iter.hasNext(); ) {
-			CatchClause clause= (CatchClause)iter.next();
+	private void handleCatchArguments(List<CatchClause> catchClauses) {
+		for (Iterator<CatchClause> iter= catchClauses.iterator(); iter.hasNext(); ) {
+			CatchClause clause= iter.next();
 			ITypeBinding catchTypeBinding= clause.getException().getType().resolveBinding();
 			if (catchTypeBinding == null)	// No correct type resolve.
 				continue;
-			for (Iterator exceptions= new ArrayList(fCurrentExceptions).iterator(); exceptions.hasNext(); ) {
-				ITypeBinding throwTypeBinding= (ITypeBinding)exceptions.next();
+			for (Iterator<ITypeBinding> exceptions= new ArrayList<ITypeBinding>(fCurrentExceptions).iterator(); exceptions.hasNext(); ) {
+				ITypeBinding throwTypeBinding= exceptions.next();
 				if (catches(catchTypeBinding, throwTypeBinding))
 					fCurrentExceptions.remove(throwTypeBinding);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java
index 9e1ff2e..b472a7c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,12 +24,12 @@ import org.eclipse.ltk.core.refactoring.CompositeChange;
 public class Changes {
 
 	public static IFile[] getModifiedFiles(Change[] changes) {
-		List result= new ArrayList();
+		List<IFile> result= new ArrayList<IFile>();
 		getModifiedFiles(result, changes);
-		return (IFile[]) result.toArray(new IFile[result.size()]);
+		return result.toArray(new IFile[result.size()]);
 	}
 
-	private static void getModifiedFiles(List result, Change[] changes) {
+	private static void getModifiedFiles(List<IFile> result, Change[] changes) {
 		for (int i= 0; i < changes.length; i++) {
 			Change change= changes[i];
 			Object modifiedElement= change.getModifiedElement();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/CodeAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/CodeAnalyzer.java
index bbf3356..f2b4f04 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/CodeAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/CodeAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public class CodeAnalyzer extends StatementAnalyzer {
 		super(cunit, selection, traverseSelectedNode);
 	}
 
+	@Override
 	protected final void checkSelectedNodes() {
 		super.checkSelectedNodes();
 		RefactoringStatus status= getStatus();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java
index 59c311a..03aaffe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,13 +78,13 @@ public class JavaElementUtil {
 	}
 
 	public static IJavaElement[] getElementsOfType(IJavaElement[] elements, int type){
-		Set result= new HashSet(elements.length);
+		Set<IJavaElement> result= new HashSet<IJavaElement>(elements.length);
 		for (int i= 0; i < elements.length; i++) {
 			IJavaElement element= elements[i];
 			if (element.getElementType() == type)
 				result.add(element);
 		}
-		return (IJavaElement[]) result.toArray(new IJavaElement[result.size()]);
+		return result.toArray(new IJavaElement[result.size()]);
 	}
 
 	public static IType getMainType(ICompilationUnit cu) throws JavaModelException{
@@ -134,14 +134,14 @@ public class JavaElementUtil {
 	public static IMethod[] getAllConstructors(IType type) throws JavaModelException {
 		if (JavaModelUtil.isInterfaceOrAnnotation(type))
 			return new IMethod[0];
-		List result= new ArrayList();
+		List<IMethod> result= new ArrayList<IMethod>();
 		IMethod[] methods= type.getMethods();
 		for (int i= 0; i < methods.length; i++) {
 			IMethod iMethod= methods[i];
 			if (iMethod.isConstructor())
 				result.add(iMethod);
 		}
-		return (IMethod[]) result.toArray(new IMethod[result.size()]);
+		return result.toArray(new IMethod[result.size()]);
 	}
 
 	/**
@@ -154,19 +154,19 @@ public class JavaElementUtil {
 		if (cpe.getEntryKind() == IClasspathEntry.CPE_LIBRARY)
 			cpe= root.getResolvedClasspathEntry();
 		IJavaProject[] allJavaProjects= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()).getJavaProjects();
-		List result= new ArrayList(allJavaProjects.length);
+		List<IJavaProject> result= new ArrayList<IJavaProject>(allJavaProjects.length);
 		for (int i= 0; i < allJavaProjects.length; i++) {
 			IJavaProject project= allJavaProjects[i];
 			IPackageFragmentRoot[] roots= project.findPackageFragmentRoots(cpe);
 			if (roots.length > 0)
 				result.add(project);
 		}
-		return (IJavaProject[]) result.toArray(new IJavaProject[result.size()]);
+		return result.toArray(new IJavaProject[result.size()]);
 	}
 
 	public static IMember[] merge(IMember[] a1, IMember[] a2) {
 		// Don't use hash sets since ordering is important for some refactorings.
-		List result= new ArrayList(a1.length + a2.length);
+		List<IMember> result= new ArrayList<IMember>(a1.length + a2.length);
 		for (int i= 0; i < a1.length; i++) {
 			IMember member= a1[i];
 			if (!result.contains(member))
@@ -177,7 +177,7 @@ public class JavaElementUtil {
 			if (!result.contains(member))
 				result.add(member);
 		}
-		return (IMember[]) result.toArray(new IMember[result.size()]);
+		return result.toArray(new IMember[result.size()]);
 	}
 
 	public static boolean isDefaultPackage(Object element) {
@@ -195,7 +195,7 @@ public class JavaElementUtil {
 
 		IPackageFragmentRoot root= (IPackageFragmentRoot) pack.getParent();
 		IJavaElement[] allPackages= root.getChildren();
-		ArrayList subpackages= new ArrayList();
+		ArrayList<IPackageFragment> subpackages= new ArrayList<IPackageFragment>();
 		subpackages.add(pack);
 		String prefix= pack.getElementName() + '.';
 		for (int i= 0; i < allPackages.length; i++) {
@@ -203,7 +203,7 @@ public class JavaElementUtil {
 			if (currentPackage.getElementName().startsWith(prefix))
 				subpackages.add(currentPackage);
 		}
-		return (IPackageFragment[]) subpackages.toArray(new IPackageFragment[subpackages.size()]);
+		return subpackages.toArray(new IPackageFragment[subpackages.size()]);
 	}
 
 	/**
@@ -228,10 +228,10 @@ public class JavaElementUtil {
 	}
 
 	public static IMember[] sortByOffset(IMember[] members){
-		Comparator comparator= new Comparator(){
-			public int compare(Object o1, Object o2){
+		Comparator<IMember> comparator= new Comparator<IMember>(){
+			public int compare(IMember o1, IMember o2){
 				try{
-					return ((IMember) o1).getNameRange().getOffset() - ((IMember) o2).getNameRange().getOffset();
+					return o1.getNameRange().getOffset() - o2.getNameRange().getOffset();
 				} catch (JavaModelException e){
 					return 0;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavadocUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavadocUtil.java
index ebf4cf7..7e558b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavadocUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/JavadocUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,9 +67,9 @@ public class JavadocUtil {
 			return false;
 		if (methodDeclaration.parameters().size() == 0)
 			return true;
-		List tags= javadoc.tags();
-		for (Iterator iter= tags.iterator(); iter.hasNext();) {
-			TagElement element= (TagElement) iter.next();
+		List<TagElement> tags= javadoc.tags();
+		for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext();) {
+			TagElement element= iter.next();
 			if (TagElement.TAG_PARAM.equals(element.getTagName()))
 				return true;
 		}
@@ -91,9 +91,9 @@ public class JavadocUtil {
 			return;
 
 		ListRewrite tagsRewrite= astRewrite.getListRewrite(methodDeclaration.getJavadoc(), Javadoc.TAGS_PROPERTY);
-		HashSet leadingNames= new HashSet();
-		for (Iterator iter= methodDeclaration.parameters().iterator(); iter.hasNext();) {
-			SingleVariableDeclaration curr= (SingleVariableDeclaration) iter.next();
+		HashSet<String> leadingNames= new HashSet<String>();
+		for (Iterator<SingleVariableDeclaration> iter= methodDeclaration.parameters().iterator(); iter.hasNext();) {
+			SingleVariableDeclaration curr= iter.next();
 			leadingNames.add(curr.getName().getIdentifier());
 		}
 		TagElement parameterTag= createParamTag(parameterName, astRewrite.getAST(), javaProject);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/NoCommentSourceRangeComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/NoCommentSourceRangeComputer.java
index ebd363b..07c048a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/NoCommentSourceRangeComputer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/NoCommentSourceRangeComputer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer;
 
 public class NoCommentSourceRangeComputer extends TargetSourceRangeComputer {
+	@Override
 	public SourceRange computeSourceRange(ASTNode node) {
 		return new SourceRange(node.getStartPosition(), node.getLength());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java
index b078a6c..18386f6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class QualifiedNameFinder {
 			fNewValue= newValue;
 		}
 
+		@Override
 		public boolean acceptFile(IFile file) throws CoreException {
 			IJavaElement element= JavaCore.create(file);
 			if ((element != null && element.exists()))
@@ -80,6 +81,7 @@ public class QualifiedNameFinder {
 			return true;
 		}
 
+		@Override
 		public boolean acceptPatternMatch(TextSearchMatchAccess matchAccess) throws CoreException {
 			int start= matchAccess.getMatchOffset();
 			int length= matchAccess.getMatchLength();
@@ -135,10 +137,10 @@ public class QualifiedNameFinder {
 	}
 
 	private static TextSearchScope createScope(String filePatterns, IProject root) {
-		HashSet res= new HashSet();
+		HashSet<IProject> res= new HashSet<IProject>();
 		res.add(root);
 		addReferencingProjects(root, res);
-		IResource[] resArr= (IResource[]) res.toArray(new IResource[res.size()]);
+		IResource[] resArr= res.toArray(new IResource[res.size()]);
 		Pattern filePattern= getFilePattern(filePatterns);
 
 		return TextSearchScope.newSearchScope(resArr, filePattern, false);
@@ -154,7 +156,7 @@ public class QualifiedNameFinder {
 		return PatternConstructor.createPattern(filePatternArray, true, false);
 	}
 
-	private static void addReferencingProjects(IProject root, Set res) {
+	private static void addReferencingProjects(IProject root, Set<IProject> res) {
 		IProject[] projects= root.getReferencingProjects();
 		for (int i= 0; i < projects.length; i++) {
 			IProject project= projects[i];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameSearchResult.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameSearchResult.java
index 985a4b3..151d3aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameSearchResult.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameSearchResult.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,14 +29,14 @@ import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 
 public class QualifiedNameSearchResult {
 
-	private Map fChanges;
+	private Map<IFile, TextChange> fChanges;
 
 	public QualifiedNameSearchResult() {
-		fChanges= new HashMap();
+		fChanges= new HashMap<IFile, TextChange>();
 	}
 
 	public TextChange getChange(IFile file) {
-		TextChange result= (TextChange)fChanges.get(file);
+		TextChange result= fChanges.get(file);
 		if (result == null) {
 			result= new TextFileChange(file.getName(), file);
 			fChanges.put(file, result);
@@ -45,24 +45,24 @@ public class QualifiedNameSearchResult {
 	}
 
 	public TextChange[] getAllChanges() {
-		Collection values= fChanges.values();
-		return (TextChange[])values.toArray(new TextChange[values.size()]);
+		Collection<TextChange> values= fChanges.values();
+		return values.toArray(new TextChange[values.size()]);
 	}
 
 	public IFile[] getAllFiles() {
-		Set keys= fChanges.keySet();
-		return (IFile[])keys.toArray(new IFile[keys.size()]);
+		Set<IFile> keys= fChanges.keySet();
+		return keys.toArray(new IFile[keys.size()]);
 	}
 
 	public Change getSingleChange(IFile[] alreadyTouchedFiles) {
-		Collection values= fChanges.values();
+		Collection<TextChange> values= fChanges.values();
 		if (values.size() == 0)
 			return null;
 
 		CompositeChange result= new CompositeChange(RefactoringCoreMessages.QualifiedNameSearchResult_change_name);
 		result.markAsSynthetic();
-		List files= Arrays.asList(alreadyTouchedFiles);
-		for (Iterator iter= values.iterator(); iter.hasNext();) {
+		List<IFile> files= Arrays.asList(alreadyTouchedFiles);
+		for (Iterator<TextChange> iter= values.iterator(); iter.hasNext();) {
 			TextFileChange change= (TextFileChange)iter.next();
 			if (!files.contains(change.getFile())) {
 				result.add(change);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java
index 05cf0f2..388c683 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,13 +88,14 @@ public class RefactoringASTParser {
 	 * @param newCfSource the source
 	 * @param originalCf the class file to get the name and project from
 	 * @param resolveBindings whether bindings are to be resolved
-	 * @param statementsRecovery whether statements recovery should be enabled
+	 * @param recovery whether statements and binding recovery should be enabled
 	 * @param pm an {@link IProgressMonitor}, or <code>null</code>
 	 * @return the parsed CompilationUnit
 	 */
-	public CompilationUnit parse(String newCfSource, IClassFile originalCf, boolean resolveBindings, boolean statementsRecovery, IProgressMonitor pm) {
+	public CompilationUnit parse(String newCfSource, IClassFile originalCf, boolean resolveBindings, boolean recovery, IProgressMonitor pm) {
 		fParser.setResolveBindings(resolveBindings);
-		fParser.setStatementsRecovery(statementsRecovery);
+		fParser.setStatementsRecovery(recovery);
+		fParser.setBindingsRecovery(recovery);
 		fParser.setSource(newCfSource.toCharArray());
 		String cfName= originalCf.getElementName();
 		fParser.setUnitName(cfName.substring(0, cfName.length() - 6) + JavaModelUtil.DEFAULT_CU_SUFFIX);
@@ -143,17 +144,18 @@ public class RefactoringASTParser {
 	 * @param element an element (not the Java model)
 	 * @return compiler options
 	 */
-	public static Map getCompilerOptions(IJavaElement element) {
+	public static Map<String, String> getCompilerOptions(IJavaElement element) {
 		IJavaProject project= element.getJavaProject();
-		Map options= project.getOptions(true);
-		for (Iterator iter= options.keySet().iterator(); iter.hasNext();) {
-			String key= (String)iter.next();
-			String value= (String)options.get(key);
+		Map<String, String> options= project.getOptions(true);
+		for (Iterator<String> iter= options.keySet().iterator(); iter.hasNext();) {
+			String key= iter.next();
+			String value= options.get(key);
 			if (JavaCore.ERROR.equals(value) || JavaCore.WARNING.equals(value)) {
 				// System.out.println("Ignoring - " + key);
 				options.put(key, JavaCore.IGNORE);
 			}
 		}
+		options.put(JavaCore.COMPILER_PB_MAX_PER_UNIT, "0"); //$NON-NLS-1$
 		options.put(JavaCore.COMPILER_TASK_TAGS, ""); //$NON-NLS-1$
 		return options;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/ResourceUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/ResourceUtil.java
index 964ba59..5ef8a21 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/ResourceUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/ResourceUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,13 +27,13 @@ public class ResourceUtil {
 	}
 
 	public static IFile[] getFiles(ICompilationUnit[] cus) {
-		List files= new ArrayList(cus.length);
+		List<IResource> files= new ArrayList<IResource>(cus.length);
 		for (int i= 0; i < cus.length; i++) {
 			IResource resource= cus[i].getResource();
 			if (resource != null && resource.getType() == IResource.FILE)
 				files.add(resource);
 		}
-		return (IFile[]) files.toArray(new IFile[files.size()]);
+		return files.toArray(new IFile[files.size()]);
 	}
 
 	public static IFile getFile(ICompilationUnit cu) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java
index 969ed82..49e8578 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ public class SelectionAwareSourceRangeComputer extends TargetSourceRangeComputer
 	private int fSelectionStart;
 	private int fSelectionLength;
 
-	private Map/*<ASTNode, SourceRange>*/ fRanges;
+	private Map<ASTNode, SourceRange> fRanges;
 	private String fDocumentPortionToScan;
 
 	public SelectionAwareSourceRangeComputer(ASTNode[] selectedNodes, IBuffer buffer, int selectionStart, int selectionLength) {
@@ -41,23 +41,24 @@ public class SelectionAwareSourceRangeComputer extends TargetSourceRangeComputer
 		fDocumentPortionToScan= buffer.getText(fSelectionStart, fSelectionLength);
 	}
 
+	@Override
 	public SourceRange computeSourceRange(ASTNode node) {
 		try {
 			if (fRanges == null)
 				initializeRanges();
-			SourceRange result= (SourceRange)fRanges.get(node);
+			SourceRange result= fRanges.get(node);
 			if (result != null)
 				return result;
 			return super.computeSourceRange(node);
 		} catch (CoreException e) {
 			// fall back to standard implementation
-			fRanges= new HashMap();
+			fRanges= new HashMap<ASTNode, SourceRange>();
 		}
 		return super.computeSourceRange(node);
 	}
 
 	private void initializeRanges() throws CoreException {
-		fRanges= new HashMap();
+		fRanges= new HashMap<ASTNode, SourceRange>();
 		if (fSelectedNodes.length == 0)
 			return;
 
@@ -75,7 +76,7 @@ public class SelectionAwareSourceRangeComputer extends TargetSourceRangeComputer
 
 		ASTNode currentNode= fSelectedNodes[0];
 		int newStart= Math.min(fSelectionStart + pos, currentNode.getStartPosition());
-		SourceRange range= (SourceRange)fRanges.get(currentNode);
+		SourceRange range= fRanges.get(currentNode);
 		fRanges.put(currentNode, new SourceRange(newStart, range.getLength() + range.getStartPosition() - newStart));
 
 		currentNode= fSelectedNodes[last];
@@ -99,7 +100,7 @@ public class SelectionAwareSourceRangeComputer extends TargetSourceRangeComputer
 		}
 
 		int newEnd= Math.max(fSelectionStart + pos, currentNode.getStartPosition() + currentNode.getLength());
-		range= (SourceRange)fRanges.get(currentNode);
+		range= fRanges.get(currentNode);
 		fRanges.put(currentNode, new SourceRange(range.getStartPosition(), newEnd - range.getStartPosition()));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/StatementAnalyzer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/StatementAnalyzer.java
index 0a04e8f..4991e66 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/StatementAnalyzer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/StatementAnalyzer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,11 +23,14 @@ import org.eclipse.ltk.core.refactoring.RefactoringStatusContext;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.SourceRange;
+import org.eclipse.jdt.core.compiler.IScanner;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.CatchClause;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.DoStatement;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ForStatement;
+import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.SwitchCase;
 import org.eclipse.jdt.core.dom.SwitchStatement;
 import org.eclipse.jdt.core.dom.SynchronizedStatement;
@@ -71,15 +74,20 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 		ASTNode node= nodes[0];
 		int selectionOffset= getSelection().getOffset();
 		try {
-			int pos= fScanner.getNextStartOffset(selectionOffset, true);
-			if (pos == node.getStartPosition()) {
+			int start= fScanner.getNextStartOffset(selectionOffset, true);
+			if (start == node.getStartPosition()) {
 				int lastNodeEnd= ASTNodes.getExclusiveEnd(nodes[nodes.length - 1]);
-
-				pos= fScanner.getNextStartOffset(lastNodeEnd, true);
+				int pos= fScanner.getNextStartOffset(lastNodeEnd, true);
 				int selectionEnd= getSelection().getInclusiveEnd();
 				if (pos <= selectionEnd) {
-					ISourceRange range= new SourceRange(lastNodeEnd, pos - lastNodeEnd);
-					invalidSelection(RefactoringCoreMessages.StatementAnalyzer_end_of_selection, JavaStatusContext.create(fCUnit, range));
+					IScanner scanner= fScanner.getScanner();
+					char[] token= scanner.getCurrentTokenSource(); //see https://bugs.eclipse.org/324237
+					if (start < lastNodeEnd && token.length == 1 && (token[0] == ';' || token[0] == ',')) {
+						setSelection(Selection.createFromStartEnd(start, lastNodeEnd - 1));
+					} else {
+						ISourceRange range= new SourceRange(lastNodeEnd, pos - lastNodeEnd);
+						invalidSelection(RefactoringCoreMessages.StatementAnalyzer_end_of_selection, JavaStatusContext.create(fCUnit, range));
+					}
 				}
 				return; // success
 			}
@@ -105,6 +113,7 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 	/* (non-Javadoc)
 	 * Method declared in ASTVisitor
 	 */
+	@Override
 	public void endVisit(CompilationUnit node) {
 		if (!hasSelectedNodes()) {
 			super.endVisit(node);
@@ -124,6 +133,7 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 	/* (non-Javadoc)
 	 * Method declared in ASTVisitor
 	 */
+	@Override
 	public void endVisit(DoStatement node) {
 		ASTNode[] selectedNodes= getSelectedNodes();
 		if (doAfterValidation(node, selectedNodes)) {
@@ -137,6 +147,7 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 	/* (non-Javadoc)
 	 * Method declared in ASTVisitor
 	 */
+	@Override
 	public void endVisit(ForStatement node) {
 		ASTNode[] selectedNodes= getSelectedNodes();
 		if (doAfterValidation(node, selectedNodes)) {
@@ -156,10 +167,11 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 	/* (non-Javadoc)
 	 * Method declared in ASTVisitor
 	 */
+	@Override
 	public void endVisit(SwitchStatement node) {
 		ASTNode[] selectedNodes= getSelectedNodes();
 		if (doAfterValidation(node, selectedNodes)) {
-			List cases= getSwitchCases(node);
+			List<SwitchCase> cases= getSwitchCases(node);
 			for (int i= 0; i < selectedNodes.length; i++) {
 				ASTNode topNode= selectedNodes[i];
 				if (cases.contains(topNode)) {
@@ -174,6 +186,7 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 	/* (non-Javadoc)
 	 * Method declared in ASTVisitor
 	 */
+	@Override
 	public void endVisit(SynchronizedStatement node) {
 		ASTNode firstSelectedNode= getFirstSelectedNode();
 		if (getSelection().getEndVisitSelectionMode(node) == Selection.SELECTED) {
@@ -187,15 +200,16 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 	/* (non-Javadoc)
 	 * Method declared in ASTVisitor
 	 */
+	@Override
 	public void endVisit(TryStatement node) {
 		ASTNode firstSelectedNode= getFirstSelectedNode();
 		if (getSelection().getEndVisitSelectionMode(node) == Selection.AFTER) {
 			if (firstSelectedNode == node.getBody() || firstSelectedNode == node.getFinally()) {
 				invalidSelection(RefactoringCoreMessages.StatementAnalyzer_try_statement);
 			} else {
-				List catchClauses= node.catchClauses();
-				for (Iterator iterator= catchClauses.iterator(); iterator.hasNext();) {
-					CatchClause element= (CatchClause)iterator.next();
+				List<CatchClause> catchClauses= node.catchClauses();
+				for (Iterator<CatchClause> iterator= catchClauses.iterator(); iterator.hasNext();) {
+					CatchClause element= iterator.next();
 					if (element == firstSelectedNode || element.getBody() == firstSelectedNode) {
 						invalidSelection(RefactoringCoreMessages.StatementAnalyzer_try_statement);
 					} else if (element.getException() == firstSelectedNode) {
@@ -210,6 +224,7 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 	/* (non-Javadoc)
 	 * Method declared in ASTVisitor
 	 */
+	@Override
 	public void endVisit(WhileStatement node) {
 		ASTNode[] selectedNodes= getSelectedNodes();
 		if (doAfterValidation(node, selectedNodes)) {
@@ -234,12 +249,12 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 		reset();
 	}
 
-	private static List getSwitchCases(SwitchStatement node) {
-		List result= new ArrayList();
-		for (Iterator iter= node.statements().iterator(); iter.hasNext(); ) {
+	private static List<SwitchCase> getSwitchCases(SwitchStatement node) {
+		List<SwitchCase> result= new ArrayList<SwitchCase>();
+		for (Iterator<Statement> iter= node.statements().iterator(); iter.hasNext(); ) {
 			Object element= iter.next();
 			if (element instanceof SwitchCase)
-				result.add(element);
+				result.add((SwitchCase) element);
 		}
 		return result;
 	}
@@ -252,7 +267,7 @@ public class StatementAnalyzer extends SelectionAnalyzer {
 		return false;
 	}
 
-	protected static boolean contains(ASTNode[] nodes, List list) {
+	protected static boolean contains(ASTNode[] nodes, List<Expression> list) {
 		for (int i = 0; i < nodes.length; i++) {
 			if (list.contains(nodes[i]))
 				return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextChangeManager.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextChangeManager.java
index 42c81d4..bbce32c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextChangeManager.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextChangeManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
  */
 public class TextChangeManager {
 
-	private Map/*<ICompilationUnit, TextChange>*/ fMap= new HashMap(10);
+	private Map<ICompilationUnit, TextChange> fMap= new HashMap<ICompilationUnit, TextChange>(10);
 
 	private final boolean fKeepExecutedTextEdits;
 
@@ -59,7 +59,7 @@ public class TextChangeManager {
 	 * @return the text change associated with the given compilation unit.
 	 */
 	public TextChange get(ICompilationUnit cu) {
-		TextChange result= (TextChange)fMap.get(cu);
+		TextChange result= fMap.get(cu);
 		if (result == null) {
 			result= new CompilationUnitChange(cu.getElementName(), cu);
 			result.setKeepPreviewEdits(fKeepExecutedTextEdits);
@@ -76,7 +76,7 @@ public class TextChangeManager {
 	 * @return the removed <tt>TextChange</tt>.
 	 */
 	public TextChange remove(ICompilationUnit unit) {
-		return (TextChange)fMap.remove(unit);
+		return fMap.remove(unit);
 	}
 
 	/**
@@ -85,20 +85,20 @@ public class TextChangeManager {
 	 * @return all text changes managed by this instance
 	 */
 	public TextChange[] getAllChanges(){
-		Set cuSet= fMap.keySet();
-		ICompilationUnit[] cus= (ICompilationUnit[]) cuSet.toArray(new ICompilationUnit[cuSet.size()]);
+		Set<ICompilationUnit> cuSet= fMap.keySet();
+		ICompilationUnit[] cus= cuSet.toArray(new ICompilationUnit[cuSet.size()]);
 		// sort by cu name:
-		Arrays.sort(cus, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				String name1= ((ICompilationUnit) o1).getElementName();
-				String name2= ((ICompilationUnit) o2).getElementName();
+		Arrays.sort(cus, new Comparator<ICompilationUnit>() {
+			public int compare(ICompilationUnit o1, ICompilationUnit o2) {
+				String name1= o1.getElementName();
+				String name2= o2.getElementName();
 				return name1.compareTo(name2);
 			}
 		});
 
 		TextChange[] textChanges= new TextChange[cus.length];
 		for (int i= 0; i < cus.length; i++) {
-			textChanges[i]= (TextChange) fMap.get(cus[i]);
+			textChanges[i]= fMap.get(cus[i]);
 		}
 		return textChanges;
 	}
@@ -109,7 +109,7 @@ public class TextChangeManager {
 	 * @return all compilation units managed by this instance
 	 */
 	public ICompilationUnit[] getAllCompilationUnits(){
-		return (ICompilationUnit[]) fMap.keySet().toArray(new ICompilationUnit[fMap.keySet().size()]);
+		return fMap.keySet().toArray(new ICompilationUnit[fMap.keySet().size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java
index 2446dee..10f6946 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
  */
 public class TextEditBasedChangeManager {
 
-	private Map/*<ICompilationUnit, TextEditBasedChange>*/ fMap= new HashMap(10);
+	private Map<ICompilationUnit, TextEditBasedChange> fMap= new HashMap<ICompilationUnit, TextEditBasedChange>(10);
 
 	private final boolean fKeepExecutedTextEdits;
 
@@ -59,7 +59,7 @@ public class TextEditBasedChangeManager {
 	 * @return the text change associated with the given compilation unit.
 	 */
 	public TextEditBasedChange get(ICompilationUnit cu) {
-		TextEditBasedChange result= (TextEditBasedChange)fMap.get(cu);
+		TextEditBasedChange result= fMap.get(cu);
 		if (result == null) {
 			result= new CompilationUnitChange(cu.getElementName(), cu);
 			result.setKeepPreviewEdits(fKeepExecutedTextEdits);
@@ -76,7 +76,7 @@ public class TextEditBasedChangeManager {
 	 * @return the removed <tt>TextEditBasedChange</tt>.
 	 */
 	public TextEditBasedChange remove(ICompilationUnit unit) {
-		return (TextEditBasedChange)fMap.remove(unit);
+		return fMap.remove(unit);
 	}
 
 	/**
@@ -85,20 +85,20 @@ public class TextEditBasedChangeManager {
 	 * @return all text changes managed by this instance
 	 */
 	public TextEditBasedChange[] getAllChanges(){
-		Set cuSet= fMap.keySet();
-		ICompilationUnit[] cus= (ICompilationUnit[]) cuSet.toArray(new ICompilationUnit[cuSet.size()]);
+		Set<ICompilationUnit> cuSet= fMap.keySet();
+		ICompilationUnit[] cus= cuSet.toArray(new ICompilationUnit[cuSet.size()]);
 		// sort by cu name:
-		Arrays.sort(cus, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				String name1= ((ICompilationUnit) o1).getElementName();
-				String name2= ((ICompilationUnit) o2).getElementName();
+		Arrays.sort(cus, new Comparator<ICompilationUnit>() {
+			public int compare(ICompilationUnit o1, ICompilationUnit o2) {
+				String name1= o1.getElementName();
+				String name2= o2.getElementName();
 				return name1.compareTo(name2);
 			}
 		});
 
 		TextEditBasedChange[] textChanges= new TextEditBasedChange[cus.length];
 		for (int i= 0; i < cus.length; i++) {
-			textChanges[i]= (TextEditBasedChange) fMap.get(cus[i]);
+			textChanges[i]= fMap.get(cus[i]);
 		}
 		return textChanges;
 	}
@@ -109,7 +109,7 @@ public class TextEditBasedChangeManager {
 	 * @return all compilation units managed by this instance
 	 */
 	public ICompilationUnit[] getAllCompilationUnits(){
-		return (ICompilationUnit[]) fMap.keySet().toArray(new ICompilationUnit[fMap.keySet().size()]);
+		return fMap.keySet().toArray(new ICompilationUnit[fMap.keySet().size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java
index 1e231aa..04ed571 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import org.eclipse.jdt.core.dom.rewrite.TargetSourceRangeComputer;
  * @since 3.2
  */
 public class TightSourceRangeComputer extends TargetSourceRangeComputer {
-	private HashSet/*<ASTNode>*/ fTightSourceRangeNodes= new HashSet();
+	private HashSet<ASTNode> fTightSourceRangeNodes= new HashSet<ASTNode>();
 
 	/**
 	 * Add the given node to the set of "tight" nodes.
@@ -42,18 +42,18 @@ public class TightSourceRangeComputer extends TargetSourceRangeComputer {
 	public void addTightSourceNode(ASTNode reference) {
 		fTightSourceRangeNodes.add(reference);
 
-	    List properties= reference.structuralPropertiesForType();
-	    for (Iterator iterator= properties.iterator(); iterator.hasNext();) {
-	        StructuralPropertyDescriptor descriptor= (StructuralPropertyDescriptor)iterator.next();
+	    List<StructuralPropertyDescriptor> properties= reference.structuralPropertiesForType();
+	    for (Iterator<StructuralPropertyDescriptor> iterator= properties.iterator(); iterator.hasNext();) {
+	        StructuralPropertyDescriptor descriptor= iterator.next();
 	        if (descriptor.isChildProperty()) {
 	        	ASTNode child= (ASTNode)reference.getStructuralProperty(descriptor);
 	        	if (child != null && isExtending(child, reference)) {
 	        		addTightSourceNode(child);
 	        	}
 	        } else if (descriptor.isChildListProperty()) {
-	        	List childs= (List)reference.getStructuralProperty(descriptor);
-	        	for (Iterator iterator2= childs.iterator(); iterator2.hasNext();) {
-	                ASTNode child= (ASTNode)iterator2.next();
+	        	List<? extends ASTNode> children= (List<? extends ASTNode>) reference.getStructuralProperty(descriptor);
+	        	for (Iterator<? extends ASTNode> iterator2= children.iterator(); iterator2.hasNext();) {
+	                ASTNode child= iterator2.next();
 	                if (isExtending(child, reference)) {
 		        		addTightSourceNode(child);
 		        	}
@@ -62,6 +62,7 @@ public class TightSourceRangeComputer extends TargetSourceRangeComputer {
         }
     }
 
+	@Override
 	public SourceRange computeSourceRange(ASTNode node) {
 		if (fTightSourceRangeNodes.contains(node)) {
 			return new TargetSourceRangeComputer.SourceRange(node.getStartPosition(), node.getLength());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.jdt.ui/customBuildCallbacks.xml
new file mode 100644
index 0000000..6c19ee7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/customBuildCallbacks.xml
@@ -0,0 +1,176 @@
+<!-- ===================================================================== -->
+<!-- Custom targets called from a project's generated build.xml            -->
+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
+<!-- ===================================================================== -->
+<project name="Build specific targets and properties" default="noDefault">
+
+		<available file="${basedir}/jar-in-jar-loader.zip" property="jijl-zip" />
+	
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="This file must be called with explicit targets" />
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.jars                              -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.jars">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.jars                               -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.jars">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.sources                            -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the compilation target <name>                      -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="pre.name">
+	</target>
+
+	<target name="pre. at dot" depends="compile-jar-in-jar-loader">
+	</target>
+
+	<target name="compile-jar-in-jar-loader" unless="jijl-zip" >
+		<mkdir dir="${basedir}/temp/" />
+		<javac destdir="${basedir}/temp"
+			srcdir="jar in jar loader/"
+			source="1.3"
+			target="1.1"
+			debug="true"
+			optimize="true"
+			fork="true" />
+		<zip destfile="${basedir}/jar-in-jar-loader.zip"
+			basedir="${basedir}/temp/" />
+
+		<delete dir="${basedir}/temp/" />
+
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do during the compilation target <name>, after the compile   -->
+	<!-- but before jaring.  Substitute "name" with the name of the compilation-->
+	<!-- target, eg @dot                                                       -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.compile.name">
+	</target>
+
+	<target name="post.compile. at dot">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the compilation target <name>                       -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   jar.Location - the location of the compilation results              -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.name">
+	</target>
+
+	<target name="post. at dot">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.bin.parts">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.bin.parts">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.sources                          -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.logs                             -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.logs">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.logs                              -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.logs">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target clean                                   -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.clean">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target clean                                    -->
+	<!-- Available parameters :                                                -->
+	<!--   plugin.destination - final destination of the build                 -->
+	<!--   build.result.folder - results of the compilation                    -->
+	<!--   temp.folder - temporary folder                                      -->
+	<!-- ===================================================================== -->
+	<target name="post.clean">
+	</target>
+</project>
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_GB.dictionary b/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_GB.dictionary
index f9f6206..bb9ac9f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_GB.dictionary
+++ b/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_GB.dictionary
@@ -493,6 +493,7 @@ Latin's
 Laurie
 Laurie's
 Lenten
+Linux
 Liz
 Liz's
 Lyle
@@ -2754,6 +2755,7 @@ and
 anded
 anders
 anding
+android
 ands
 anecdotal
 anecdotally
@@ -7965,6 +7967,7 @@ calico
 caliph
 caliphs
 call
+callback
 called
 caller
 caller's
@@ -9824,6 +9827,7 @@ combines
 combing
 combings
 combining
+combo
 combs
 combustion
 combustions
@@ -10014,6 +10018,7 @@ commuters
 commutes
 commuting
 compact
+compaction
 compacted
 compacter
 compacters
@@ -10223,6 +10228,7 @@ compression
 compressions
 compressive
 compressively
+compressor
 comprise
 comprised
 comprises
@@ -12410,6 +12416,10 @@ dazzlingly
 deacon
 deacon's
 deacons
+deactivate
+deactivates
+deactivated
+deactivating
 dead
 deaden
 deadened
@@ -12625,6 +12635,8 @@ decorations
 decorative
 decoratively
 decorativeness
+decorator
+decorators
 decorum
 decorums
 decouple
@@ -13145,6 +13157,10 @@ depravedness
 depraver
 depraves
 depraving
+deprecate
+deprecated
+deprecates
+deprecating
 depreciate
 depreciated
 depreciates
@@ -14542,6 +14558,7 @@ divining
 divinities
 divinity
 divinity's
+divisible
 division
 division's
 divisions
@@ -14763,6 +14780,9 @@ downfall
 downfallen
 downier
 downing
+download
+downloading
+downloads
 downplay
 downplayed
 downplaying
@@ -16211,6 +16231,7 @@ equatorial
 equators
 equilibrium
 equilibriums
+equinox
 equip
 equipment
 equipments
@@ -18590,6 +18611,7 @@ fragilely
 fragment
 fragmentariness
 fragmentary
+fragmentation
 fragmented
 fragmenting
 fragments
@@ -19652,6 +19674,9 @@ goodness
 goods
 goody
 goody's
+google
+googles
+googling
 goose
 gooses
 goosing
@@ -20956,6 +20981,7 @@ hewer
 hewing
 hews
 hex
+hexadecimal
 hexagonal
 hexagonally
 hexer
@@ -23437,6 +23463,7 @@ intermingle
 intermingled
 intermingles
 intermingling
+intermission
 intermittent
 intermittently
 intermix
@@ -24311,6 +24338,7 @@ kicked
 kicker
 kickers
 kicking
+kickoff
 kicks
 kid
 kid's
@@ -25439,6 +25467,7 @@ lobster
 lobster's
 lobsters
 local
+locale
 localities
 locality
 locality's
@@ -25499,6 +25528,7 @@ log
 log's
 logarithm
 logarithm's
+logarithmic
 logarithmically
 logarithms
 logged
@@ -27223,6 +27253,7 @@ moat's
 moats
 mob
 mob's
+mobile
 mobility
 mobs
 moccasin
@@ -28489,6 +28520,7 @@ nowheres
 nows
 nroff
 nroff's
+nth
 nuances
 nuclear
 nucleotide
@@ -30755,6 +30787,7 @@ pig's
 pigeon
 pigeon's
 pigeons
+piggyback
 pigment
 pigmented
 pigments
@@ -32292,6 +32325,7 @@ program
 program's
 programmability
 programmable
+programmatic
 programmed
 programmer
 programmer's
@@ -34389,6 +34423,7 @@ registers
 registration
 registration's
 registrations
+registry
 regreets
 regress
 regressed
@@ -44998,6 +45033,7 @@ up
 upbraid
 upbraider
 upbringing
+upcoming
 update
 updated
 updater
@@ -45419,6 +45455,7 @@ verb
 verb's
 verbal
 verbally
+verbatim
 verbose
 verbosely
 verboseness
@@ -45907,6 +45944,7 @@ waker
 wakes
 waking
 walk
+walkable
 walked
 walker
 walkers
@@ -46350,6 +46388,7 @@ while
 whiled
 whiles
 whiling
+whilst
 whim
 whim's
 whimper
@@ -46711,6 +46750,7 @@ woeful
 woefully
 woeness
 woke
+woken
 wolf
 wolfer
 wolves
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_US.dictionary b/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_US.dictionary
index 510edb0..9d1245f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_US.dictionary
+++ b/eclipse/plugins/org.eclipse.jdt.ui/dictionaries/en_US.dictionary
@@ -493,6 +493,7 @@ Latin's
 Laurie
 Laurie's
 Lenten
+Linux
 Liz
 Liz's
 Lyle
@@ -2754,6 +2755,7 @@ and
 anded
 anders
 anding
+android
 ands
 anecdotal
 anecdotally
@@ -7965,6 +7967,7 @@ calico
 caliph
 caliphs
 call
+callback
 called
 caller
 caller's
@@ -9824,6 +9827,7 @@ combines
 combing
 combings
 combining
+combo
 combs
 combustion
 combustions
@@ -10014,6 +10018,7 @@ commuters
 commutes
 commuting
 compact
+compaction
 compacted
 compacter
 compacters
@@ -10223,6 +10228,7 @@ compression
 compressions
 compressive
 compressively
+compressor
 comprise
 comprised
 comprises
@@ -12410,6 +12416,10 @@ dazzlingly
 deacon
 deacon's
 deacons
+deactivate
+deactivates
+deactivated
+deactivating
 dead
 deaden
 deadened
@@ -12625,6 +12635,8 @@ decorations
 decorative
 decoratively
 decorativeness
+decorator
+decorators
 decorum
 decorums
 decouple
@@ -13145,6 +13157,10 @@ depravedness
 depraver
 depraves
 depraving
+deprecate
+deprecated
+deprecates
+deprecating
 depreciate
 depreciated
 depreciates
@@ -14542,6 +14558,7 @@ divining
 divinities
 divinity
 divinity's
+divisible
 division
 division's
 divisions
@@ -14763,6 +14780,9 @@ downfall
 downfallen
 downier
 downing
+download
+downloading
+downloads
 downplay
 downplayed
 downplaying
@@ -16211,6 +16231,7 @@ equatorial
 equators
 equilibrium
 equilibriums
+equinox
 equip
 equipment
 equipments
@@ -18590,6 +18611,7 @@ fragilely
 fragment
 fragmentariness
 fragmentary
+fragmentation
 fragmented
 fragmenting
 fragments
@@ -19652,6 +19674,9 @@ goodness
 goods
 goody
 goody's
+google
+googles
+googling
 goose
 gooses
 goosing
@@ -20956,6 +20981,7 @@ hewer
 hewing
 hews
 hex
+hexadecimal
 hexagonal
 hexagonally
 hexer
@@ -23437,6 +23463,7 @@ intermingle
 intermingled
 intermingles
 intermingling
+intermission
 intermittent
 intermittently
 intermix
@@ -24311,6 +24338,7 @@ kicked
 kicker
 kickers
 kicking
+kickoff
 kicks
 kid
 kid's
@@ -25439,6 +25467,7 @@ lobster
 lobster's
 lobsters
 local
+locale
 localities
 locality
 locality's
@@ -25499,6 +25528,7 @@ log
 log's
 logarithm
 logarithm's
+logarithmic
 logarithmically
 logarithms
 logged
@@ -27223,6 +27253,7 @@ moat's
 moats
 mob
 mob's
+mobile
 mobility
 mobs
 moccasin
@@ -28489,6 +28520,7 @@ nowheres
 nows
 nroff
 nroff's
+nth
 nuances
 nuclear
 nucleotide
@@ -30755,6 +30787,7 @@ pig's
 pigeon
 pigeon's
 pigeons
+piggyback
 pigment
 pigmented
 pigments
@@ -32292,6 +32325,7 @@ program
 program's
 programmability
 programmable
+programmatic
 programmed
 programmer
 programmer's
@@ -34389,6 +34423,7 @@ registers
 registration
 registration's
 registrations
+registry
 regreets
 regress
 regressed
@@ -44998,6 +45033,7 @@ up
 upbraid
 upbraider
 upbringing
+upcoming
 update
 updated
 updater
@@ -45419,6 +45455,7 @@ verb
 verb's
 verbal
 verbally
+verbatim
 verbose
 verbosely
 verboseness
@@ -45907,6 +45944,7 @@ waker
 wakes
 waking
 walk
+walkable
 walked
 walker
 walkers
@@ -46350,6 +46388,7 @@ while
 whiled
 whiles
 whiling
+whilst
 whim
 whim's
 whimper
@@ -46711,6 +46750,7 @@ woeful
 woefully
 woeness
 woke
+woken
 wolf
 wolfer
 wolves
@@ -47376,6 +47416,7 @@ calibers
 canaled
 canaling
 canceled
+cancelled
 canceler
 canceling
 candor
diff --git a/eclipse/plugins/org.eclipse.search/icons/full/dlcl16/pin_view.gif b/eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/pin_view.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.search/icons/full/dlcl16/pin_view.gif
copy to eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/pin_view.gif
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/refresh_nav.gif b/eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/refresh.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/refresh_nav.gif
copy to eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/refresh.gif
diff --git a/eclipse/plugins/org.eclipse.search/icons/full/elcl16/pin_view.gif b/eclipse/plugins/org.eclipse.jdt.ui/icons/full/elcl16/pin_view.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.search/icons/full/elcl16/pin_view.gif
copy to eclipse/plugins/org.eclipse.jdt.ui/icons/full/elcl16/pin_view.gif
diff --git a/eclipse/plugins/org.eclipse.ant.ui/icons/full/elcl16/refresh.gif b/eclipse/plugins/org.eclipse.jdt.ui/icons/full/elcl16/refresh.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.ant.ui/icons/full/elcl16/refresh.gif
copy to eclipse/plugins/org.eclipse.jdt.ui/icons/full/elcl16/refresh.gif
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/elcl16/refresh_nav.gif b/eclipse/plugins/org.eclipse.jdt.ui/icons/full/elcl16/refresh_nav.gif
deleted file mode 100644
index 3ca04d0..0000000
Binary files a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/elcl16/refresh_nav.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/ovr16/default_tsk.gif b/eclipse/plugins/org.eclipse.jdt.ui/icons/full/ovr16/default_tsk.gif
new file mode 100644
index 0000000..59f7cb4
Binary files /dev/null and b/eclipse/plugins/org.eclipse.jdt.ui/icons/full/ovr16/default_tsk.gif differ
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/SourceRange.java b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/SourceRange.java
index a7dee8e..124480d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/SourceRange.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/SourceRange.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ public class SourceRange implements ISourceRange { // see https://bugs.eclipse.o
 	/*non java doc
 	 * for debugging only
 	 */
+	@Override
 	public String toString(){
 		return "<offset: " + fOffset +" length: " + fLength + "/>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
@@ -76,9 +77,9 @@ public class SourceRange implements ISourceRange { // see https://bugs.eclipse.o
 	 * @return the sorted ranges, which are identical to the parameter ranges
 	 */
 	public static ISourceRange[] reverseSortByOffset(ISourceRange[] ranges){
-		Comparator comparator= new Comparator(){
-			public int compare(Object o1, Object o2){
-				return ((ISourceRange)o2).getOffset() - ((ISourceRange)o1).getOffset();
+		Comparator<ISourceRange> comparator= new Comparator<ISourceRange>(){
+			public int compare(ISourceRange o1, ISourceRange o2){
+				return o2.getOffset() - o1.getOffset();
 			}
 		};
 		Arrays.sort(ranges, comparator);
@@ -88,7 +89,8 @@ public class SourceRange implements ISourceRange { // see https://bugs.eclipse.o
     /*
      * @see Object#equals(Object)
      */
-    public boolean equals(Object obj) {
+    @Override
+	public boolean equals(Object obj) {
     	if (! (obj instanceof ISourceRange))
 	        return false;
 	    return ((ISourceRange)obj).getOffset() == fOffset && ((ISourceRange)obj).getLength() == fLength;
@@ -97,7 +99,8 @@ public class SourceRange implements ISourceRange { // see https://bugs.eclipse.o
     /*
      * @see Object#hashCode()
      */
-    public int hashCode() {
+    @Override
+	public int hashCode() {
         return fLength ^ fOffset;
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/dom/NodeFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/dom/NodeFinder.java
index e92be3a..a791481 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/dom/NodeFinder.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/corext/dom/NodeFinder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -131,6 +131,7 @@ public class NodeFinder extends GenericVisitor {
 		fEnd= offset + length;
 	}
 
+	@Override
 	protected boolean visitNode(ASTNode node) {
 		int nodeStart= node.getStartPosition();
 		int nodeEnd= nodeStart + node.getLength();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java
index 7e4e3a8..0f1577f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -124,6 +124,7 @@ public class TypeInfoViewer {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.core.search.TypeNameMatchRequestor#acceptTypeNameMatch(org.eclipse.jdt.core.search.TypeNameMatch)
 		 */
+		@Override
 		public void acceptTypeNameMatch(TypeNameMatch match) {
 			if (fStop)
 				return;
@@ -408,6 +409,7 @@ public class TypeInfoViewer {
 			fStopped= true;
 			cancel();
 		}
+		@Override
 		public IStatus runInUIThread(IProgressMonitor monitor) {
 			if (stopped())
 				return new Status(IStatus.CANCEL, JavaPlugin.getPluginId(), IStatus.CANCEL, "", null); //$NON-NLS-1$
@@ -432,25 +434,30 @@ public class TypeInfoViewer {
 			super(monitor);
 			fViewer= viewer;
 		}
+		@Override
 		public void setTaskName(String name) {
 			super.setTaskName(name);
 			fName= name;
 		}
+		@Override
 		public void beginTask(String name, int totalWork) {
 			super.beginTask(name, totalWork);
 			if (fName == null)
 				fName= name;
 			fTotalWork= totalWork;
 		}
+		@Override
 		public void worked(int work) {
 			super.worked(work);
 			internalWorked(work);
 		}
+		@Override
 		public void done() {
 			fDone= true;
 			fViewer.setProgressMessage(""); //$NON-NLS-1$
 			super.done();
 		}
+		@Override
 		public void internalWorked(double work) {
 			fWorked= fWorked + work;
 			fViewer.setProgressMessage(getMessage());
@@ -475,6 +482,7 @@ public class TypeInfoViewer {
 			fViewer= viewer;
 			setSystem(true);
 		}
+		@Override
 		protected final IStatus run(IProgressMonitor parent) {
 			ProgressMonitor monitor= new ProgressMonitor(parent, fViewer);
 			try {
@@ -508,6 +516,7 @@ public class TypeInfoViewer {
 		public void stop() {
 			cancel();
 		}
+		@Override
 		protected IStatus doRun(ProgressMonitor monitor) {
 			try {
 				if (VIRTUAL) {
@@ -651,10 +660,12 @@ public class TypeInfoViewer {
 			fElementKind= elementKind;
 			fReqestor= new SearchRequestor(filter);
 		}
+		@Override
 		public void stop() {
 			fReqestor.cancel();
 			super.stop();
 		}
+		@Override
 		protected TypeNameMatch[] getSearchResult(Set matchIdsInHistory, ProgressMonitor monitor) throws CoreException {
 			long start= System.currentTimeMillis();
 			fReqestor.setHistory(matchIdsInHistory);
@@ -689,6 +700,7 @@ public class TypeInfoViewer {
 			super(ticket, viewer, filter, history, numberOfVisibleItems, mode);
 			fLastResult= lastResult;
 		}
+		@Override
 		protected TypeNameMatch[] getSearchResult(Set filteredHistory, ProgressMonitor monitor) throws CoreException {
 			List result= new ArrayList(2048);
 			for (int i= 0; i < fLastResult.length; i++) {
@@ -714,6 +726,7 @@ public class TypeInfoViewer {
 		public void stop() {
 			cancel();
 		}
+		@Override
 		protected IStatus doRun(ProgressMonitor monitor) {
 			try {
 				monitor.setTaskName(JavaUIMessages.TypeInfoViewer_syncJob_taskName);
@@ -871,6 +884,7 @@ public class TypeInfoViewer {
 		fTable.setHeaderVisible(false);
 		addPopupMenu();
 		fTable.addControlListener(new ControlAdapter() {
+			@Override
 			public void controlResized(ControlEvent event) {
 				int itemHeight= fTable.getItemHeight();
 				Rectangle clientArea= fTable.getClientArea();
@@ -878,6 +892,7 @@ public class TypeInfoViewer {
 			}
 		});
 		fTable.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyPressed(KeyEvent e) {
 				if (e.keyCode == SWT.DEL) {
 					deleteHistoryEntry();
@@ -897,6 +912,7 @@ public class TypeInfoViewer {
 			}
 		});
 		fTable.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (fLastSelection != null) {
 					for (int i= 0; i < fLastSelection.length; i++) {
@@ -1142,12 +1158,14 @@ public class TypeInfoViewer {
 		final MenuItem remove= new MenuItem(menu, SWT.NONE);
 		remove.setText(JavaUIMessages.TypeInfoViewer_remove_from_history);
 		menu.addMenuListener(new MenuAdapter() {
+			@Override
 			public void menuShown(MenuEvent e) {
 				TableItem[] selection= fTable.getSelection();
 				remove.setEnabled(canEnable(selection));
 			}
 		});
 		remove.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				deleteHistoryEntry();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionComponent.java b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionComponent.java
index e0bceea..4ed0ca2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionComponent.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionComponent.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -113,6 +113,7 @@ public class TypeSelectionComponent extends Composite implements ITypeSelectionC
 		public ToggleStatusLineAction() {
 			super(JavaUIMessages.TypeSelectionComponent_show_status_line_label, IAction.AS_CHECK_BOX);
 		}
+		@Override
 		public void run() {
 			if (fForm == null)
 				return;
@@ -129,6 +130,7 @@ public class TypeSelectionComponent extends Composite implements ITypeSelectionC
 		public FullyQualifyDuplicatesAction() {
 			super(JavaUIMessages.TypeSelectionComponent_fully_qualify_duplicates_label, IAction.AS_CHECK_BOX);
 		}
+		@Override
 		public void run() {
 			boolean checked= isChecked();
 			fViewer.setFullyQualifyDuplicates(checked, true);
@@ -218,6 +220,7 @@ public class TypeSelectionComponent extends Composite implements ITypeSelectionC
 			}
 		});
 		fFilter.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			@Override
 			public void getName(AccessibleEvent e) {
 				e.result= Strings.removeMnemonicIndicator(message);
 			}
@@ -251,6 +254,7 @@ public class TypeSelectionComponent extends Composite implements ITypeSelectionC
 		gd.horizontalSpan= 2;
 		table.setLayoutData(gd);
 		table.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			@Override
 			public void getName(AccessibleEvent e) {
 				if (table.getSelectionCount() == 0) {
 					e.result= Strings.removeMnemonicIndicator(JavaUIMessages.TypeSelectionComponent_label);
@@ -279,6 +283,7 @@ public class TypeSelectionComponent extends Composite implements ITypeSelectionC
 			table.addSelectionListener(new SelectionAdapter() {
 				private TypeNameMatchLabelProvider fLabelProvider= new TypeNameMatchLabelProvider(
 					TypeNameMatchLabelProvider.SHOW_TYPE_CONTAINER_ONLY + TypeNameMatchLabelProvider.SHOW_ROOT_POSTFIX);
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					TypeNameMatch[] selection= fViewer.getSelection();
 					if (selection.length != 1) {
@@ -362,6 +367,7 @@ public class TypeSelectionComponent extends Composite implements ITypeSelectionC
 		fToolItem.setDisabledImage(JavaPluginImages.get(JavaPluginImages.IMG_DLCL_VIEW_MENU));
 		fToolItem.setToolTipText(JavaUIMessages.TypeSelectionComponent_menu);
 		fToolItem.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				showViewMenu();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java
index 6c790b7..60f1bc8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,17 +142,20 @@ public class TypeSelectionDialog2 extends SelectionStatusDialog {
 		return fContent.getSelection();
 	}
 	
+	@Override
 	public void create() {
 		super.create();
 		fContent.populate(fSelectionMode);
 		getOkButton().setEnabled(fContent.getSelection().length > 0);
 	}
 	
+	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.TYPE_SELECTION_DIALOG2);
 	}
 	
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite area= (Composite)super.createDialogArea(parent);
 		fContent= new TypeSelectionComponent(area, SWT.NONE, getMessage(), 
@@ -205,6 +208,7 @@ public class TypeSelectionDialog2 extends SelectionStatusDialog {
     	updateStatus(status);
 	}
 	
+	@Override
 	public int open() {
 		try {
 			ensureConsistency();
@@ -234,6 +238,7 @@ public class TypeSelectionDialog2 extends SelectionStatusDialog {
 		return super.open();
 	}
 	
+	@Override
 	public boolean close() {
 		boolean result;
 		try {
@@ -246,11 +251,13 @@ public class TypeSelectionDialog2 extends SelectionStatusDialog {
 		return result;
 	}
 	
+	@Override
 	public void setTitle(String title) {
 		super.setTitle(title);
 		fTitle= title;
 	}
 	
+	@Override
 	protected void computeResult() {
 		TypeNameMatch[] selected= fContent.getSelection();
 		if (selected == null || selected.length == 0) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/refactoring/RefactoringSaveHelper.java b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/refactoring/RefactoringSaveHelper.java
index 7fd3b65..d021b55 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/refactoring/RefactoringSaveHelper.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/refactoring/RefactoringSaveHelper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -194,6 +194,7 @@ public class RefactoringSaveHelper {
 			{
 				setShellStyle(getShellStyle() | SWT.APPLICATION_MODAL);
 			}
+			@Override
 			protected Control createDialogArea(Composite parent) {
 				Composite result= (Composite) super.createDialogArea(parent);
 				if (canSaveAutomatically) {
@@ -201,6 +202,7 @@ public class RefactoringSaveHelper {
 					check.setText(RefactoringMessages.RefactoringStarter_always_save);
 					check.setSelection(RefactoringSavePreferences.getSaveAllEditors());
 					check.addSelectionListener(new SelectionAdapter() {
+						@Override
 						public void widgetSelected(SelectionEvent e) {
 							RefactoringSavePreferences.setSaveAllEditors(check.getSelection());
 						}
@@ -225,9 +227,11 @@ public class RefactoringSaveHelper {
 
 	private ILabelProvider createDialogLabelProvider() {
 		return new LabelProvider() {
+			@Override
 			public Image getImage(Object element) {
 				return ((IEditorPart) element).getTitleImage();
 			}
+			@Override
 			public String getText(Object element) {
 				return ((IEditorPart) element).getTitle();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/plugin.properties b/eclipse/plugins/org.eclipse.jdt.ui/plugin.properties
index b056a7d..e35fd5f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/plugin.properties
@@ -117,7 +117,7 @@ preferenceKeywords.syntaxcoloring=Java editor colors semantic coloring highlight
 preferenceKeywords.templates=Java editor templates snippet macros
 preferenceKeywords.folding=Java editor folding section comment comments header method import inner type
 preferenceKeywords.markoccurrences=Java editor occurrence mark highlight type method constant field exception
-preferenceKeywords.smarttyping=Java editor typing type close comment tabs indentation indent imports wrap escape semicolons braces brackets parenthesis parentheses strings literals paste pasting javadoc tabulator automatically
+preferenceKeywords.smarttyping=Java editor typing type close comment tabs indentation indent imports wrap escape semicolons braces brackets parenthesis parentheses strings literals paste pasting javadoc tabulator automatically smart typing
 preferenceKeywords.propertieseditor=Java editor colors properties nls externalized string foreground argument assignment comment key value
 preferenceKeywords.saveparticipant=Java editor save cleanup participants organize imports format
 preferenceKeywords.classpathcontainer=Java classpath container buildpath jre
@@ -250,7 +250,7 @@ OverrideIndicatorLabelDecorator.label=Java Method Override Indicator
 OverrideIndicatorLabelDecorator.description=Decorates methods with an override indicator.
 
 InterfaceIndicatorLabelDecorator.label=Java Type Indicator
-InterfaceIndicatorLabelDecorator.description=Decorates compilation units and class files with an interface, enum, abstract class, or annotation indicator.
+InterfaceIndicatorLabelDecorator.description=Decorates compilation units and class files with an interface, enum, abstract class, or annotation indicator, and shows when types are package-visible or deprecated.
 
 BuildpathIndicatorLabelDecorator.label=Java Build Path Indicator
 BuildpathIndicatorLabelDecorator.description=Decorates files and folders if they are on the build path of their enclosing project.
@@ -414,6 +414,8 @@ OpenTypeHierarchyAction.label=Ope&n Type Hierarchy
 OpenCallHierarchyAction.label=Open Call H&ierarchy
 
 
+OpenHyperlinkAction.label=Open Hyperlin&k
+OpenHyperlinkAction.tooltip=Opens the hyperlink at the caret location or opens a chooser if more than one hyperlink is available
 
 OpenTypeInHierarchyAction.label=Open Type in Hierarch&y...
 OpenTypeInHierarchyAction.tooltip=Opens a Type in a Type Hierarchy
@@ -1123,6 +1125,9 @@ JavaElementHyperlinkDetector= Open Declaration
 JavaElementHyperlinkImplementationDetector= Open Implementation
 NLSHyperlinkDetector= Java Property Key
 PropertyKeyHyperlinkDetector= Java Property Key
+JavaElementHyperlinkDeclaredTypeDetector= Open Declared Type
+JavaElementHyperlinkReturnTypeDetector= Open Return Type 
+JavaElementHyperlinkSuperImplementationDetector= Open Super Implementation 
 
 #--- Clean Up ---
 CleanUpTabPage.CodeStyle.name = &Code Style
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/plugin.xml b/eclipse/plugins/org.eclipse.jdt.ui/plugin.xml
index bd8f3e3..436c1a6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.jdt.ui/plugin.xml
@@ -1061,7 +1061,7 @@
       <colorDefinition
             label="%coloredLabels.match_highlight.label"
             categoryId="org.eclipse.jdt.ui.presentation"
-            value="206,204,247"
+            defaultsTo="org.eclipse.search.ui.match.highlight"
             id="org.eclipse.jdt.ui.ColoredLabels.match_highlight">
          <description>
             %coloredLabels.match_highlight.description
@@ -1391,6 +1391,24 @@
             targetId="org.eclipse.jdt.ui.javaCode">
       </hyperlinkDetector>
       <hyperlinkDetector
+	        class="org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkSuperImplementationDetector"
+            id="org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkSuperImplementationDetector"
+            name="%JavaElementHyperlinkSuperImplementationDetector"
+            targetId="org.eclipse.jdt.ui.javaCode">
+      </hyperlinkDetector>
+      <hyperlinkDetector
+	        class="org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkDeclaredTypeDetector"
+            id="org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkDeclaredTypeDetector"
+            name="%JavaElementHyperlinkDeclaredTypeDetector"
+            targetId="org.eclipse.jdt.ui.javaCode">
+      </hyperlinkDetector>
+      <hyperlinkDetector
+	        class="org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkReturnTypeDetector"
+            id="org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkReturnTypeDetector"
+            name="%JavaElementHyperlinkReturnTypeDetector"
+            targetId="org.eclipse.jdt.ui.javaCode">
+      </hyperlinkDetector>
+      <hyperlinkDetector
             class="org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertyKeyHyperlinkDetector"
             id="org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertyKeyHyperlinkDetector"
             name="%PropertyKeyHyperlinkDetector"
@@ -2274,6 +2292,14 @@
             description="%OpenActionSet.description"
             visible="false"
             id="org.eclipse.jdt.ui.A_OpenActionSet">
+        <action
+               definitionId="org.eclipse.ui.edit.text.open.hyperlink"
+               id="org.eclipse.jdt.internal.ui.actions.OpenHyperlink"
+               label="%OpenHyperlinkAction.label"
+               menubarPath="navigate/open.ext"
+               retarget="true"
+               tooltip="%OpenHyperlinkAction.tooltip">
+         </action>
          <action
                definitionId="org.eclipse.jdt.ui.edit.text.java.open.call.hierarchy"
                label="%OpenCallHierarchyAction.label"
@@ -5206,6 +5232,7 @@
             icon="$nl$/icons/full/eview16/call_hierarchy.gif"
             category="org.eclipse.jdt.ui.java"
             class="org.eclipse.jdt.internal.ui.callhierarchy.CallHierarchyViewPart"
+            allowMultiple="true"
             id="org.eclipse.jdt.callhierarchy.view">
       </view>
    </extension>
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/scripts/build_jar-in-jar-loader.xml b/eclipse/plugins/org.eclipse.jdt.ui/scripts/build_jar-in-jar-loader.xml
index e1a66ac..05ed3bb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/scripts/build_jar-in-jar-loader.xml
+++ b/eclipse/plugins/org.eclipse.jdt.ui/scripts/build_jar-in-jar-loader.xml
@@ -3,7 +3,7 @@
 	
 	<target name="build" description="Cleans, builds and refreshes the impacted resources" depends="clean, jar-in-jar-loader_zip" />
 	
-	<!-- Dummy clean target, workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=196811 and https://bugs.eclipse.org/bugs/show_bug.cgi?id=160895 -->
+	<!-- Empty target for "After a Clean" task (we don't want to rebuild the Jar here, e.g. on checkout). -->
 	<target name="dummy_clean"/>
 	
 	<target name="init" depends="properties">
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/templates/default-templates.xml b/eclipse/plugins/org.eclipse.jdt.ui/templates/default-templates.xml
index 2af9809..1629086 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/templates/default-templates.xml
+++ b/eclipse/plugins/org.eclipse.jdt.ui/templates/default-templates.xml
@@ -2,7 +2,7 @@
 
 <!--
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -153,7 +153,7 @@ return ${name};</template>
 }</template>
 
 <template name="Test" description="%Templates.test_junit4" id="org.eclipse.jdt.ui.templates.test_junit4" context="java-members" enabled="true" autoinsert="false">@${testType:newType(org.junit.Test)}
-public void ${testname}() throws Exception {
+public void ${testName}() throws Exception {
 	${staticImport:importStatic('org.junit.Assert.*')}${cursor} 
 }</template>
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionHandler.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionHandler.java
index 7392121..173c352 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionHandler.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionHandler.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,9 +54,11 @@ public class ChangeExceptionHandler {
 		public NotCancelableProgressMonitor(IProgressMonitor monitor) {
 			super(monitor);
 		}
+		@Override
 		public void setCanceled(boolean b) {
 			// ignore set cancel
 		}
+		@Override
 		public boolean isCanceled() {
 			return false;
 		}
@@ -69,6 +71,7 @@ public class ChangeExceptionHandler {
 		public RefactorErrorDialog(Shell parentShell, String dialogTitle, String dialogMessage, IStatus status, int displayMask) {
 			super(parentShell, dialogTitle, dialogMessage, status, displayMask);
 		}
+		@Override
 		protected void createButtonsForButtonBar(Composite parent) {
 			super.createButtonsForButtonBar(parent);
 			Button ok= getButton(IDialogConstants.OK_ID);
@@ -77,6 +80,7 @@ public class ChangeExceptionHandler {
 			abort.moveBelow(ok);
 			abort.setFocus();
 		}
+		@Override
 		protected Control createMessageArea (Composite parent) {
 			Control result= super.createMessageArea(parent);
 			new Label(parent, SWT.NONE); // filler
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java
index 414913a..b5e2e47 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,17 +69,18 @@ public class ChangeExceptionsControl extends Composite {
 //TODO: cleanup, adapt NLS strings
 
 	private static class ExceptionInfoContentProvider implements IStructuredContentProvider {
+		@SuppressWarnings("unchecked")
 		public Object[] getElements(Object inputElement) {
-			return removeMarkedAsDeleted((List) inputElement);
+			return removeMarkedAsDeleted((List<ExceptionInfo>) inputElement);
 		}
-		private ExceptionInfo[] removeMarkedAsDeleted(List exceptionInfos){
-			List result= new ArrayList(exceptionInfos.size());
-			for (Iterator iter= exceptionInfos.iterator(); iter.hasNext();) {
-				ExceptionInfo info= (ExceptionInfo) iter.next();
+		private ExceptionInfo[] removeMarkedAsDeleted(List<ExceptionInfo> exceptionInfos){
+			List<ExceptionInfo> result= new ArrayList<ExceptionInfo>(exceptionInfos.size());
+			for (Iterator<ExceptionInfo> iter= exceptionInfos.iterator(); iter.hasNext();) {
+				ExceptionInfo info= iter.next();
 				if (! info.isDeleted())
 					result.add(info);
 			}
-			return (ExceptionInfo[]) result.toArray(new ExceptionInfo[result.size()]);
+			return result.toArray(new ExceptionInfo[result.size()]);
 		}
 		public void dispose() {
 			// do nothing
@@ -111,7 +112,7 @@ public class ChangeExceptionsControl extends Composite {
 
 	private TableViewer fTableViewer;
 	private Button fRemoveButton;
-	private List fExceptionInfos;
+	private List<ExceptionInfo> fExceptionInfos;
 
 	public ChangeExceptionsControl(Composite parent, int style, IExceptionListChangeListener listener, IJavaProject project) {
 		super(parent, style);
@@ -129,7 +130,7 @@ public class ChangeExceptionsControl extends Composite {
 		createButtonComposite(this);
 	}
 
-	public void setInput(List exceptionInfos) {
+	public void setInput(List<ExceptionInfo> exceptionInfos) {
 		Assert.isNotNull(exceptionInfos);
 		fExceptionInfos= exceptionInfos;
 		fTableViewer.setInput(fExceptionInfos);
@@ -160,8 +161,8 @@ public class ChangeExceptionsControl extends Composite {
 		if (!(selection instanceof IStructuredSelection))
 			return new ExceptionInfo[0];
 
-		List selected= ((IStructuredSelection) selection).toList();
-		return (ExceptionInfo[]) selected.toArray(new ExceptionInfo[selected.size()]);
+		List<?> selected= ((IStructuredSelection) selection).toList();
+		return selected.toArray(new ExceptionInfo[selected.size()]);
 	}
 
 	// ---- Button bar --------------------------------------------------------------------------------------
@@ -203,6 +204,7 @@ public class ChangeExceptionsControl extends Composite {
 		SWTUtil.setButtonDimensionHint(button);
 		button.setEnabled(true);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				doAddException();
 			}
@@ -280,8 +282,8 @@ public class ChangeExceptionsControl extends Composite {
 	}
 
 	private ExceptionInfo findExceptionInfo(IType exception) {
-		for (Iterator iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
-			ExceptionInfo info= (ExceptionInfo) iter.next();
+		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
+			ExceptionInfo info= iter.next();
 			if (info.getElement().equals(exception))
 				return info;
 		}
@@ -294,6 +296,7 @@ public class ChangeExceptionsControl extends Composite {
 		button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		SWTUtil.setButtonDimensionHint(button);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				int index= getTable().getSelectionIndices()[0];
 				ExceptionInfo[] selected= getSelectedItems();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java
index b5f6d96..e6dc1b5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class ChangeParametersControl extends Composite {
 		public static final Mode EXTRACT_METHOD= new Mode("EXTRACT_METHOD"); //$NON-NLS-1$
 		public static final Mode CHANGE_METHOD_SIGNATURE= new Mode("CHANGE_METHOD_SIGNATURE"); //$NON-NLS-1$
 		public static final Mode INTRODUCE_PARAMETER= new Mode("INTRODUCE_PARAMETER"); //$NON-NLS-1$
+		@Override
 		public String toString() {
 			return fName;
 		}
@@ -97,17 +98,18 @@ public class ChangeParametersControl extends Composite {
 	}
 
 	private static class ParameterInfoContentProvider implements IStructuredContentProvider {
+		@SuppressWarnings("unchecked")
 		public Object[] getElements(Object inputElement) {
-			return removeMarkedAsDeleted((List) inputElement);
+			return removeMarkedAsDeleted((List<ParameterInfo>) inputElement);
 		}
-		private ParameterInfo[] removeMarkedAsDeleted(List paramInfos){
-			List result= new ArrayList(paramInfos.size());
-			for (Iterator iter= paramInfos.iterator(); iter.hasNext();) {
-				ParameterInfo info= (ParameterInfo) iter.next();
+		private ParameterInfo[] removeMarkedAsDeleted(List<ParameterInfo> paramInfos){
+			List<ParameterInfo> result= new ArrayList<ParameterInfo>(paramInfos.size());
+			for (Iterator<ParameterInfo> iter= paramInfos.iterator(); iter.hasNext();) {
+				ParameterInfo info= iter.next();
 				if (! info.isDeleted())
 					result.add(info);
 			}
-			return (ParameterInfo[]) result.toArray(new ParameterInfo[result.size()]);
+			return result.toArray(new ParameterInfo[result.size()]);
 		}
 		public void dispose() {
 			// do nothing
@@ -204,7 +206,7 @@ public class ChangeParametersControl extends Composite {
 
 	private final Mode fMode;
 	private final IParameterListChangeListener fListener;
-	private List fParameterInfos;
+	private List<ParameterInfo> fParameterInfos;
 	private final StubTypeContext fTypeContext;
 	private final String[] fParamNameProposals;
 	private ContentAssistHandler fNameContentAssistHandler;
@@ -259,7 +261,7 @@ public class ChangeParametersControl extends Composite {
 	}
 
 
-	public void setInput(List parameterInfos) {
+	public void setInput(List<ParameterInfo> parameterInfos) {
 		Assert.isNotNull(parameterInfos);
 		fParameterInfos= parameterInfos;
 		fTableViewer.setInput(fParameterInfos);
@@ -325,6 +327,7 @@ public class ChangeParametersControl extends Composite {
 			}
 		});
 		table.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyPressed(KeyEvent e) {
 				if (e.keyCode == SWT.F2 && e.stateMask == SWT.NONE) {
 					editColumnOrNextPossible(0);
@@ -389,8 +392,8 @@ public class ChangeParametersControl extends Composite {
 		if (!(selection instanceof IStructuredSelection))
 			return new ParameterInfo[0];
 
-		List selected= ((IStructuredSelection) selection).toList();
-		return (ParameterInfo[]) selected.toArray(new ParameterInfo[selected.size()]);
+		List<?> selected= ((IStructuredSelection) selection).toList();
+		return selected.toArray(new ParameterInfo[selected.size()]);
 	}
 
 	// ---- Button bar --------------------------------------------------------------------------------------
@@ -456,6 +459,7 @@ public class ChangeParametersControl extends Composite {
 		button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		SWTUtil.setButtonDimensionHint(button);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				try {
 					ParameterInfo[] selected= getSelectedElements();
@@ -479,10 +483,11 @@ public class ChangeParametersControl extends Composite {
 		button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		SWTUtil.setButtonDimensionHint(button);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				String[] excludedParamNames= new String[fParameterInfos.size()];
 				for (int i= 0; i < fParameterInfos.size(); i++) {
-					ParameterInfo info= (ParameterInfo) fParameterInfos.get(i);
+					ParameterInfo info= fParameterInfos.get(i);
 					excludedParamNames[i]= info.getNewName();
 				}
 				IJavaProject javaProject= fTypeContext.getCuHandle().getJavaProject();
@@ -490,7 +495,7 @@ public class ChangeParametersControl extends Composite {
 				ParameterInfo newInfo= ParameterInfo.createInfoForAddedParameter("Object", newParamName, "null"); //$NON-NLS-1$ //$NON-NLS-2$
 				int insertIndex= fParameterInfos.size();
 				for (int i= fParameterInfos.size() - 1;  i >= 0; i--) {
-					ParameterInfo info= (ParameterInfo) fParameterInfos.get(i);
+					ParameterInfo info= fParameterInfos.get(i);
 					if (info.isNewVarargs()) {
 						insertIndex= i;
 						break;
@@ -514,6 +519,7 @@ public class ChangeParametersControl extends Composite {
 		button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		SWTUtil.setButtonDimensionHint(button);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				int index= getTable().getSelectionIndices()[0];
 				ParameterInfo[] selected= getSelectedElements();
@@ -547,6 +553,7 @@ public class ChangeParametersControl extends Composite {
 		button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		SWTUtil.setButtonDimensionHint(button);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				ISelection savedSelection= fTableViewer.getSelection();
 				if (savedSelection == null)
@@ -657,15 +664,15 @@ public class ChangeParametersControl extends Composite {
 		Collections.reverse(fParameterInfos);
 	}
 
-	private static void moveUp(List elements, List move) {
-		List res= new ArrayList(elements.size());
-		List deleted= new ArrayList();
-		Object floating= null;
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
-			Object curr= iter.next();
+	private static void moveUp(List<ParameterInfo> elements, List<ParameterInfo> move) {
+		List<ParameterInfo> res= new ArrayList<ParameterInfo>(elements.size());
+		List<ParameterInfo> deleted= new ArrayList<ParameterInfo>();
+		ParameterInfo floating= null;
+		for (Iterator<ParameterInfo> iter= elements.iterator(); iter.hasNext();) {
+			ParameterInfo curr= iter.next();
 			if (move.contains(curr)) {
 				res.add(curr);
-			} else if (((ParameterInfo) curr).isDeleted()) {
+			} else if (curr.isDeleted()) {
 				deleted.add(curr);
 			} else {
 				if (floating != null)
@@ -678,7 +685,7 @@ public class ChangeParametersControl extends Composite {
 		}
 		res.addAll(deleted);
 		elements.clear();
-		for (Iterator iter= res.iterator(); iter.hasNext();) {
+		for (Iterator<ParameterInfo> iter= res.iterator(); iter.hasNext();) {
 			elements.add(iter.next());
 		}
 	}
@@ -702,8 +709,8 @@ public class ChangeParametersControl extends Composite {
 		if (fParameterInfos == null) // during initialization
 			return 0;
 		int result= 0;
-		for (Iterator iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if (! info.isDeleted())
 				result++;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeSignatureWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeSignatureWizard.java
index 2e7cc52..299d528 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeSignatureWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeSignatureWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class ChangeSignatureWizard extends RefactoringWizard {
 		setDefaultPageTitle(RefactoringMessages.ChangeSignatureRefactoring_modify_Parameters);
 	}
 
+	@Override
 	protected void addUserInputPages(){
 		addPage(new ChangeSignatureInputPage(fProcessor));
 	}
@@ -116,12 +117,14 @@ public class ChangeSignatureWizard extends RefactoringWizard {
 					fDeprecateDelegateCheckBox.setSelection(DelegateUIHelper.loadDeprecateDelegateSetting(processor));
 					processor.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 					fDeprecateDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+						@Override
 						public void widgetSelected(SelectionEvent e) {
 							processor.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 						}
 					});
 					fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 					fLeaveDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+						@Override
 						public void widgetSelected(SelectionEvent e) {
 							fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 						}
@@ -175,6 +178,7 @@ public class ChangeSignatureWizard extends RefactoringWizard {
 					combo.add(getAccessModifierString(availableVisibilities[i]));
 				}
 				combo.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						int newVisibility= availableVisibilities[combo.getSelectionIndex()];
 						getChangeMethodSignatureProcessor().setVisibility(newVisibility);
@@ -282,6 +286,7 @@ public class ChangeSignatureWizard extends RefactoringWizard {
 			itemEx.setControl(createExceptionsTableControl(folder));
 
 			folder.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					((TabItem) e.item).getControl().setFocus();
 				}
@@ -323,6 +328,7 @@ public class ChangeSignatureWizard extends RefactoringWizard {
 			return border;
 		}
 
+		@Override
 		public void dispose() {
 			DelegateUIHelper.saveLeaveDelegateSetting(fLeaveDelegateCheckBox);
 			DelegateUIHelper.saveDeprecateDelegateSetting(fDeprecateDelegateCheckBox);
@@ -341,7 +347,7 @@ public class ChangeSignatureWizard extends RefactoringWizard {
 			fSignaturePreview= new JavaSourceViewer(composite, null, null, false, SWT.READ_ONLY | SWT.V_SCROLL | SWT.WRAP /*| SWT.BORDER*/, store);
 			fSignaturePreview.configure(new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), store, null, null));
 			fSignaturePreview.getTextWidget().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
-			fSignaturePreview.getTextWidget().setBackground(composite.getBackground());
+			fSignaturePreview.adaptBackgroundColor(composite);
 			fSignaturePreview.setDocument(fSignaturePreviewDocument);
 			fSignaturePreview.setEditable(false);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeContentProvider.java
index f32a671..b64da2b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeContentProvider.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeContentProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 
 import org.eclipse.jdt.internal.corext.refactoring.structure.ChangeTypeRefactoring;
+import org.eclipse.jdt.internal.corext.util.CollectionsUtil;
 
 class ChangeTypeContentProvider implements ITreeContentProvider {
 
@@ -36,11 +37,11 @@ class ChangeTypeContentProvider implements ITreeContentProvider {
 		if (element instanceof RootType){
 			return ((RootType)element).getChildren();
 		}
-		Object[] superTypes = getDirectSuperTypes((ITypeBinding)element).toArray();
-		Arrays.sort(superTypes, new Comparator(){
-			public int compare(Object o1, Object o2) {
-				String name1 = ((ITypeBinding)o1).getQualifiedName();
-				String name2 = ((ITypeBinding)o2).getQualifiedName();
+		ITypeBinding[] superTypes = CollectionsUtil.toArray(getDirectSuperTypes((ITypeBinding)element), ITypeBinding.class);
+		Arrays.sort(superTypes, new Comparator<ITypeBinding>(){
+			public int compare(ITypeBinding o1, ITypeBinding o2) {
+				String name1 = o1.getQualifiedName();
+				String name2 = o2.getQualifiedName();
 				return name1.compareTo(name2);
 			}
 		});
@@ -48,12 +49,13 @@ class ChangeTypeContentProvider implements ITreeContentProvider {
 	}
 
 	/**
-	 * Returns the direct superclass and direct superinterfaces. Class Object is
+	 * @param type a type
+	 * @return the direct superclass and direct superinterfaces. Class Object is
 	 * included in the result if the root of the hierarchy is a top-level
 	 * interface.
 	 */
-	public Set/*<ITypeBinding>*/ getDirectSuperTypes(ITypeBinding type){
-		Set/*<ITypeBinding>*/ result= new HashSet();
+	public Set<ITypeBinding> getDirectSuperTypes(ITypeBinding type){
+		Set<ITypeBinding> result= new HashSet<ITypeBinding>();
 		if (type.getSuperclass() != null){
 			result.add(type.getSuperclass());
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java
index c56712f..545a855 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,13 +18,13 @@ import java.util.Iterator;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -72,17 +72,18 @@ public class ChangeTypeWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages(){
 		addPage(new ChangeTypeInputPage());
 	}
 
 	// For debugging
-	static String print(Collection/*<ITypeBinding>*/ types){
+	static String print(Collection<ITypeBinding> types){
 		if (types.isEmpty())
 			return "{ }"; //$NON-NLS-1$
 		String result = "{ "; //$NON-NLS-1$
-		for (Iterator it=types.iterator(); it.hasNext(); ){
-			ITypeBinding type= (ITypeBinding)it.next();
+		for (Iterator<ITypeBinding> it=types.iterator(); it.hasNext(); ){
+			ITypeBinding type= it.next();
 			result += type.getQualifiedName();
 			if (it.hasNext()){
 				result += ", ";  //$NON-NLS-1$
@@ -101,16 +102,17 @@ public class ChangeTypeWizard extends RefactoringWizard {
 										  implements IColorProvider {
 
 		private Color fGrayColor;
-		private HashMap/*<Image color, Image gray>*/ fGrayImages;
+		/** color -> gray */
+		private HashMap<Image, Image> fGrayImages;
 
 		public ChangeTypeLabelProvider(){
 			fGrayColor= Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
-			fGrayImages= new HashMap();
+			fGrayImages= new HashMap<Image, Image>();
 		}
 
-		private Collection/*<ITypeBinding>*/ fInvalidTypes;
+		private Collection<ITypeBinding> fInvalidTypes;
 
-		public void grayOut(Collection/*<ITypeBinding>*/ invalidTypes){
+		public void grayOut(Collection<ITypeBinding> invalidTypes){
 			fInvalidTypes= invalidTypes;
 			/*
 			 * Invalidate all labels. Invalidating only invalid types doesn't
@@ -149,10 +151,11 @@ public class ChangeTypeWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			Image image= super.getImage(element);
 			if (isInvalid(element) && image != null) {
-				Image grayImage= (Image) fGrayImages.get(image);
+				Image grayImage= fGrayImages.get(image);
 				if (grayImage == null) {
 					grayImage= new Image(Display.getCurrent(), image, SWT.IMAGE_GRAY);
 					fGrayImages.put(image, grayImage);
@@ -163,9 +166,10 @@ public class ChangeTypeWizard extends RefactoringWizard {
 			}
 		}
 
+		@Override
 		public void dispose() {
-			for (Iterator iter= fGrayImages.values().iterator(); iter.hasNext();) {
-				Image image= (Image) iter.next();
+			for (Iterator<Image> iter= fGrayImages.values().iterator(); iter.hasNext();) {
+				Image image= iter.next();
 				image.dispose();
 			}
 			fGrayImages.clear();
@@ -187,14 +191,14 @@ public class ChangeTypeWizard extends RefactoringWizard {
 		}
 
 		private class ValidTypesTask implements Runnable {
-			private Collection/*<ITypeBinding>*/ fInvalidTypes;
-			private Collection/*<ITypeBinding>*/ fValidTypes;
+			private Collection<ITypeBinding> fInvalidTypes;
+			private Collection<ITypeBinding> fValidTypes;
 			public void run() {
 				IRunnableWithProgress runnable= new IRunnableWithProgress() {
 					public void run(IProgressMonitor pm) {
 						pm.beginTask(RefactoringMessages.ChangeTypeWizard_analyzing, 1000);
 						ChangeTypeRefactoring ct= (ChangeTypeRefactoring)ChangeTypeWizard.this.getRefactoring();
-						fInvalidTypes = new HashSet();
+						fInvalidTypes = new HashSet<ITypeBinding>();
 						fInvalidTypes.addAll(fCT.getAllSuperTypes(ct.getOriginalType()));
 						fValidTypes= ct.computeValidTypes(new SubProgressMonitor(pm, 950));
 						fInvalidTypes.add(ct.getOriginalType());
@@ -230,12 +234,12 @@ public class ChangeTypeWizard extends RefactoringWizard {
 			}
 		}
 
-		private TreeItem getInitialSelection(Collection/*<ITypeBinding>*/ types) {
+		private TreeItem getInitialSelection(Collection<ITypeBinding> types) {
 
 			// first, find a most general valid type (there may be more than one)
-			ITypeBinding type= (ITypeBinding)types.iterator().next();
-			for (Iterator it= types.iterator(); it.hasNext(); ){
-				ITypeBinding other= (ITypeBinding)it.next();
+			ITypeBinding type= types.iterator().next();
+			for (Iterator<ITypeBinding> it= types.iterator(); it.hasNext(); ){
+				ITypeBinding other= it.next();
 				if (getGeneralizeTypeRefactoring().isSubTypeOf(type, other)){
 					type= other;
 				}
@@ -280,21 +284,14 @@ public class ChangeTypeWizard extends RefactoringWizard {
 		 */
 		private void addTreeComponent(Composite parent) {
 			fTreeViewer= new TreeViewer(parent, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+			
 			GridData gd= new GridData(GridData.FILL_BOTH);
 			gd.grabExcessHorizontalSpace= true;
 			gd.grabExcessVerticalSpace= true;
-			GC gc= null;
-			try {
-				gc= new GC(parent);
-				gc.setFont(gc.getFont());
-				gd.heightHint= Dialog.convertHeightInCharsToPixels(gc.getFontMetrics(), 6); // 6 characters tall
-			} finally {
-				if (gc != null) {
-					gc.dispose();
-					gc= null;
-				}
-			}
-			fTreeViewer.getTree().setLayoutData(gd);
+			Tree tree= fTreeViewer.getTree();
+			Dialog.applyDialogFont(tree);
+			gd.heightHint= tree.getItemHeight() * 12;
+			tree.setLayoutData(gd);
 
 			fTreeViewer.setContentProvider(new ChangeTypeContentProvider(((ChangeTypeRefactoring)getRefactoring())));
 			fLabelProvider= new ChangeTypeLabelProvider();
@@ -334,6 +331,7 @@ public class ChangeTypeWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jface.wizard.IWizardPage#getNextPage()
 		 */
+		@Override
 		public IWizardPage getNextPage() {
 			initializeRefactoring();
 			return super.getNextPage();
@@ -347,6 +345,7 @@ public class ChangeTypeWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.RefactoringWizardPage#performFinish()
 		 */
+		@Override
 		public boolean performFinish(){
 			initializeRefactoring();
 			return super.performFinish();
@@ -359,6 +358,7 @@ public class ChangeTypeWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jface.dialogs.IDialogPage#dispose()
 		 */
+		@Override
 		public void dispose() {
 			fTreeViewer= null;
 			super.dispose();
@@ -367,6 +367,7 @@ public class ChangeTypeWizard extends RefactoringWizard {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 		 */
+		@Override
 		public void setVisible(boolean visible) {
 			super.setVisible(visible);
 			if (visible && fTreeViewer != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java
index 020d34e..d359802 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ class ComboSelectionDialog extends Dialog{
 	/*
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		getShell().setText(fShellTitle);
 
@@ -79,6 +80,7 @@ class ComboSelectionDialog extends Dialog{
 		gd.widthHint= convertWidthInCharsToPixels(getMaxStringLength());
 		combo.setLayoutData(gd);
 		combo.addSelectionListener(new SelectionAdapter(){
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fSelection= combo.getItem(combo.getSelectionIndex());
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java
index 3eafac2..b84dbe1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,16 +64,19 @@ public class CompilationUnitChangeNode extends TextEditChangeNode {
 			Assert.isNotNull(fJavaElement);
 		}
 
+		@Override
 		public String getText() {
 			return JavaElementLabels.getElementLabel(fJavaElement, JavaElementLabels.ALL_DEFAULT);
 		}
 
+		@Override
 		public ImageDescriptor getImageDescriptor() {
 			return fgImageProvider.getJavaImageDescriptor(
 				fJavaElement,
 				JavaElementImageProvider.OVERLAY_ICONS | JavaElementImageProvider.SMALL_ICONS);
 		}
 
+		@Override
 		public IRegion getTextRange() throws CoreException {
 			ISourceRange range= ((ISourceReference)fJavaElement).getSourceRange();
 			return new Region(range.getOffset(), range.getLength());
@@ -84,6 +87,7 @@ public class CompilationUnitChangeNode extends TextEditChangeNode {
 		super(change);
 	}
 
+	@Override
 	protected ChildNode[] createChildNodes() {
 		TextEditBasedChange change= getTextEditBasedChange();
 		if (change instanceof MultiStateTextFileChange) {
@@ -92,8 +96,8 @@ public class CompilationUnitChangeNode extends TextEditChangeNode {
 
 		ICompilationUnit cunit= (ICompilationUnit) change.getAdapter(ICompilationUnit.class);
 		if (cunit != null) {
-			List children= new ArrayList(5);
-			Map map= new HashMap(20);
+			List<ChildNode> children= new ArrayList<ChildNode>(5);
+			Map<IJavaElement, JavaLanguageNode> map= new HashMap<IJavaElement, JavaLanguageNode>(20);
 			TextEditBasedChangeGroup[] changes= getSortedChangeGroups(change);
 			for (int i= 0; i < changes.length; i++) {
 				TextEditBasedChangeGroup tec= changes[i];
@@ -109,16 +113,14 @@ public class CompilationUnitChangeNode extends TextEditChangeNode {
 					children.add(createTextEditGroupNode(this, tec));
 				}
 			}
-			return (ChildNode[]) children.toArray(new ChildNode[children.size()]);
+			return children.toArray(new ChildNode[children.size()]);
 		} else {
 			return EMPTY_CHILDREN;
 		}
 	}
 
-	private static class OffsetComparator implements Comparator {
-		public int compare(Object o1, Object o2) {
-			TextEditBasedChangeGroup c1= (TextEditBasedChangeGroup)o1;
-			TextEditBasedChangeGroup c2= (TextEditBasedChangeGroup)o2;
+	private static class OffsetComparator implements Comparator<TextEditBasedChangeGroup> {
+		public int compare(TextEditBasedChangeGroup c1, TextEditBasedChangeGroup c2) {
 			int p1= getOffset(c1);
 			int p2= getOffset(c2);
 			if (p1 < p2)
@@ -135,14 +137,14 @@ public class CompilationUnitChangeNode extends TextEditChangeNode {
 
 	private TextEditBasedChangeGroup[] getSortedChangeGroups(TextEditBasedChange change) {
 		TextEditBasedChangeGroup[] edits= change.getChangeGroups();
-		List result= new ArrayList(edits.length);
+		List<TextEditBasedChangeGroup> result= new ArrayList<TextEditBasedChangeGroup>(edits.length);
 		for (int i= 0; i < edits.length; i++) {
 			if (!edits[i].getTextEditGroup().isEmpty())
 				result.add(edits[i]);
 		}
-		Comparator comparator= new OffsetComparator();
+		Comparator<TextEditBasedChangeGroup> comparator= new OffsetComparator();
 		Collections.sort(result, comparator);
-		return (TextEditBasedChangeGroup[])result.toArray(new TextEditBasedChangeGroup[result.size()]);
+		return result.toArray(new TextEditBasedChangeGroup[result.size()]);
 	}
 
 	private IJavaElement getModifiedJavaElement(TextEditBasedChangeGroup edit, ICompilationUnit cunit) throws JavaModelException {
@@ -169,8 +171,8 @@ public class CompilationUnitChangeNode extends TextEditChangeNode {
 		return result;
 	}
 
-	private JavaLanguageNode getChangeElement(Map map, IJavaElement element, List children, TextEditChangeNode cunitChange) {
-		JavaLanguageNode result= (JavaLanguageNode)map.get(element);
+	private JavaLanguageNode getChangeElement(Map<IJavaElement, JavaLanguageNode> map, IJavaElement element, List<ChildNode> children, TextEditChangeNode cunitChange) {
+		JavaLanguageNode result= map.get(element);
 		if (result != null)
 			return result;
 		IJavaElement parent= element.getParent();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java
index c8d701a..13fd91e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogSettings;
 
 import org.eclipse.ui.PlatformUI;
 
@@ -32,18 +33,28 @@ import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
 import org.eclipse.jdt.internal.corext.refactoring.code.ConvertAnonymousToNestedRefactoring;
 
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
 
 public class ConvertAnonymousToNestedWizard extends RefactoringWizard {
 
+	/**
+	 * The dialog setting section for <code>ConvertAnonymousToNestedWizard</code>.
+	 * 
+	 * @since 3.7
+	 */
+	static final String DIALOG_SETTING_SECTION= "ConvertAnonymousToNestedWizard"; //$NON-NLS-1$
+
 	public ConvertAnonymousToNestedWizard(ConvertAnonymousToNestedRefactoring ref) {
 		super(ref, PREVIEW_EXPAND_FIRST_NODE | DIALOG_BASED_USER_INTERFACE);
 		setDefaultPageTitle(RefactoringMessages.ConvertAnonymousToNestedAction_wizard_title);
+		setDialogSettings(JavaPlugin.getDefault().getDialogSettings());
 	}
 
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages(){
 		addPage(new ConvertAnonymousToNestedInputPage());
 	}
@@ -53,11 +64,54 @@ public class ConvertAnonymousToNestedWizard extends RefactoringWizard {
 		private static final String DESCRIPTION = RefactoringMessages.ConvertAnonymousToNestedInputPage_description;
 		public static final String PAGE_NAME= "ConvertAnonymousToNestedInputPage";//$NON-NLS-1$
 
+		/**
+		 * Stores the value of the declare as static option.
+		 * 
+		 * @since 3.7
+		 */
+		private static final String DECLARE_AS_STATIC= "DeclareAsStatic"; //$NON-NLS-1$
+
+		/**
+		 * Stores the value of the declare as final option.
+		 * 
+		 * @since 3.7
+		 */
+		private static final String DECLARE_AS_FINAL= "DeclareAsFinal"; //$NON-NLS-1$
+
+		/**
+		 * Stores the value of visibility control option.
+		 * 
+		 * @since 3.7
+		 */
+		private static final String VISIBILITY_CONTROL= "VisibilityControl"; //$NON-NLS-1$
+
+		/**
+		 * Stores the dialog settings.
+		 * 
+		 * @since 3.7
+		 */
+		private IDialogSettings fSettings;
+
 		public ConvertAnonymousToNestedInputPage() {
 			super(PAGE_NAME);
 			setDescription(DESCRIPTION);
 		}
 
+		/**
+		 * Initializes the default settings for the dialog options.
+		 * 
+		 * @since 3.7
+		 */
+		private void initializeDefaultSettings() {
+			fSettings= getDialogSettings().getSection(DIALOG_SETTING_SECTION);
+			if (fSettings == null) {
+				fSettings= getDialogSettings().addNewSection(DIALOG_SETTING_SECTION);
+				fSettings.put(DECLARE_AS_STATIC, getConvertRefactoring().getDeclareStatic());
+				fSettings.put(DECLARE_AS_FINAL, getConvertRefactoring().getDeclareFinal());
+				fSettings.put(VISIBILITY_CONTROL, getConvertRefactoring().getVisibility());
+			}
+		}
+
 		public void createControl(Composite parent) {
 			Composite result= new Composite(parent, SWT.NONE);
 			setControl(result);
@@ -66,6 +120,7 @@ public class ConvertAnonymousToNestedWizard extends RefactoringWizard {
 			layout.verticalSpacing= 8;
 			result.setLayout(layout);
 
+			initializeDefaultSettings();
 			addVisibilityControl(result);
 			Text textField= addFieldNameField(result);
 			addDeclareFinalCheckbox(result);
@@ -99,11 +154,19 @@ public class ConvertAnonymousToNestedWizard extends RefactoringWizard {
 		}
 
 		private void addVisibilityControl(Composite result) {
-			int[] availableVisibilities= getConvertRefactoring().getAvailableVisibilities();
-			int currectVisibility= getConvertRefactoring().getVisibility();
+			final ConvertAnonymousToNestedRefactoring r= getConvertRefactoring();
+			int[] availableVisibilities= r.getAvailableVisibilities();
+			int currectVisibility;
+			if (r.isLocalInnerType()) {
+				currectVisibility= r.getVisibility();
+			} else {
+				currectVisibility= fSettings.getInt(VISIBILITY_CONTROL);
+				r.setVisibility(currectVisibility);
+			}
 			IVisibilityChangeListener visibilityChangeListener= new IVisibilityChangeListener(){
 				public void visibilityChanged(int newVisibility) {
-					getConvertRefactoring().setVisibility(newVisibility);
+					r.setVisibility(newVisibility);
+					fSettings.put(VISIBILITY_CONTROL, newVisibility);
 				}
 
 				public void modifierChanged(int modifier, boolean isChecked) {
@@ -120,15 +183,21 @@ public class ConvertAnonymousToNestedWizard extends RefactoringWizard {
 		public void addDeclareFinalCheckbox(Composite result) {
 			GridData gd;
 			final Button declareFinalCheckbox= new Button(result, SWT.CHECK);
-			declareFinalCheckbox.setEnabled(getConvertRefactoring().canEnableSettingFinal());
-			declareFinalCheckbox.setSelection(getConvertRefactoring().getDeclareFinal());
+			final ConvertAnonymousToNestedRefactoring r= getConvertRefactoring();
+			declareFinalCheckbox.setEnabled(r.canEnableSettingFinal());
+			boolean declareAsFinal= fSettings.getBoolean(DECLARE_AS_FINAL);
+			r.setDeclareFinal(declareAsFinal);
+			declareFinalCheckbox.setSelection(declareAsFinal);
 			declareFinalCheckbox.setText(RefactoringMessages.ConvertAnonymousToNestedInputPage_declare_final);
 			gd= new GridData(GridData.FILL_HORIZONTAL);
 			gd.horizontalSpan= 2;
 			declareFinalCheckbox.setLayoutData(gd);
 			declareFinalCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
-					getConvertRefactoring().setDeclareFinal(declareFinalCheckbox.getSelection());
+					boolean declareFinal= declareFinalCheckbox.getSelection();
+					r.setDeclareFinal(declareFinal);
+					fSettings.put(DECLARE_AS_FINAL, declareFinal);
 				}
 			});
 		}
@@ -136,16 +205,27 @@ public class ConvertAnonymousToNestedWizard extends RefactoringWizard {
 		public void addDeclareAsStaticCheckbox(Composite result) {
 			GridData gd;
 			final Button declareAsStaticCheckbox= new Button(result, SWT.CHECK);
-			ConvertAnonymousToNestedRefactoring r= getConvertRefactoring();
-			declareAsStaticCheckbox.setEnabled((!r.mustInnerClassBeStatic() && !r.isLocalInnerType()));
-			declareAsStaticCheckbox.setSelection(getConvertRefactoring().getDeclareStatic());
+			final ConvertAnonymousToNestedRefactoring r= getConvertRefactoring();
+			boolean isEnabled= !r.mustInnerClassBeStatic() && !r.isLocalInnerType();
+			declareAsStaticCheckbox.setEnabled(isEnabled);
+			boolean isSelected;
+			if (isEnabled) {
+				isSelected= fSettings.getBoolean(DECLARE_AS_STATIC);
+				r.setDeclareStatic(isSelected);
+			} else {
+				isSelected= getConvertRefactoring().mustInnerClassBeStatic();
+			}
+			declareAsStaticCheckbox.setSelection(isSelected);
 			declareAsStaticCheckbox.setText(RefactoringMessages.ConvertAnonymousToNestedInputPage_declare_static);
 			gd= new GridData(GridData.FILL_HORIZONTAL);
 			gd.horizontalSpan= 2;
 			declareAsStaticCheckbox.setLayoutData(gd);
 			declareAsStaticCheckbox.addSelectionListener(new SelectionAdapter() {
-			    public void widgetSelected(SelectionEvent e) {
-			        getConvertRefactoring().setDeclareStatic(declareAsStaticCheckbox.getSelection());
+			    @Override
+				public void widgetSelected(SelectionEvent e) {
+					boolean declareAsStatic= declareAsStaticCheckbox.getSelection();
+					r.setDeclareStatic(declareAsStatic);
+					fSettings.put(DECLARE_AS_STATIC, declareAsStatic);
 			    }
 			});
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java
index a174a6c..28c2137 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ public final class CreateTextFileChangePreviewViewer implements IChangePreviewVi
 			fDescriptor= imageDescriptor;
 		}
 
+		@Override
 		public void setText(String text) {
 			super.setText(text);
 			Image current= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/DelegateUIHelper.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/DelegateUIHelper.java
index a8d1ee5..550b3f5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/DelegateUIHelper.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/DelegateUIHelper.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ public class DelegateUIHelper {
 		updating.setDeprecateDelegates(button.getSelection());
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				updating.setDeprecateDelegates(button.getSelection());
 			}
@@ -54,6 +55,7 @@ public class DelegateUIHelper {
 		updating.setDelegateUpdating(button.getSelection());
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				updating.setDelegateUpdating(button.getSelection());
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java
index f429767..a06a441 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,6 +101,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 		setDefaultPageTitle(RefactoringMessages.ExtractClassWizard_page_title);
 	}
 
+	@Override
 	protected void addUserInputPages() {
 		addPage(new ExtractClassUserInputWizardPage());
 	}
@@ -147,6 +148,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 			final Button topLvlRadio= new Button(composite, SWT.RADIO);
 			topLvlRadio.setText(RefactoringMessages.ExtractClassWizard_radio_top_level);
 			topLvlRadio.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					boolean fAsTopLevel= topLvlRadio.getSelection();
 					fDescriptor.setCreateTopLevel(fAsTopLevel);
@@ -169,6 +171,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 			button.setText(RefactoringMessages.ExtractClassWizard_checkbox_create_gettersetter);
 			button.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fDescriptor.setCreateGetterSetter(button.getSelection());
 					validateRefactoring();
@@ -305,6 +308,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 			editButton.setEnabled(!tv.getSelection().isEmpty());
 			SWTUtil.setButtonDimensionHint(editButton);
 			editButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					ISelection selection= tv.getSelection();
 					if (selection instanceof IStructuredSelection) {
@@ -353,6 +357,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 		}
 
 		private abstract class FieldInfoLabelProvider extends CellLabelProvider {
+			@Override
 			public void update(ViewerCell cell) {
 				Field pi= (Field) cell.getElement();
 				cell.setText(doGetValue(pi));
@@ -369,6 +374,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 				fTextEditor= textEditor;
 			}
 
+			@Override
 			protected void setValue(Object element, Object value) {
 				if (element instanceof Field) {
 					Field pi= (Field) element;
@@ -380,6 +386,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 
 			public abstract void doSetValue(Field pi, String string);
 
+			@Override
 			protected Object getValue(Object element) {
 				if (element instanceof Field) {
 					Field pi= (Field) element;
@@ -390,10 +397,12 @@ public class ExtractClassWizard extends RefactoringWizard {
 
 			public abstract String doGetValue(Field pi);
 
+			@Override
 			protected CellEditor getCellEditor(Object element) {
 				return fTextEditor;
 			}
 
+			@Override
 			protected boolean canEdit(Object element) {
 				if (element instanceof Field) {
 					return fTextEditor != null;
@@ -407,6 +416,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 
 			TableViewerColumn viewerColumn= new TableViewerColumn(tv, SWT.LEAD);
 			viewerColumn.setLabelProvider(new FieldInfoLabelProvider() {
+				@Override
 				protected String doGetValue(Field pi) {
 					IField field= fDescriptor.getType().getField(pi.getFieldName());
 					try {
@@ -421,6 +431,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 			column.setText(RefactoringMessages.ExtractClassWizard_column_type);
 			viewerColumn= new TableViewerColumn(tv, SWT.LEAD);
 			viewerColumn.setLabelProvider(new FieldInfoLabelProvider() {
+				@Override
 				protected String doGetValue(Field pi) {
 					if (pi.isCreateField())
 						return pi.getNewFieldName();
@@ -429,14 +440,17 @@ public class ExtractClassWizard extends RefactoringWizard {
 				}
 			});
 			viewerColumn.setEditingSupport(new FieldInfoEditingSupport(cellEditor, tv) {
+				@Override
 				public String doGetValue(Field pi) {
 					return pi.getNewFieldName();
 				}
 
+				@Override
 				public void doSetValue(Field pi, String string) {
 					pi.setNewFieldName(string);
 				}
 
+				@Override
 				protected boolean canEdit(Object element) {
 					if (element instanceof Field) {
 						Field field= (Field) element;
@@ -516,6 +530,7 @@ public class ExtractClassWizard extends RefactoringWizard {
 				return defaultValue;
 		}
 
+		@Override
 		public void dispose() {
 			IDialogSettings settings= getRefactoringSettings();
 			settings.put(CREATE_GETTER_SETTER, fDescriptor.isCreateGetterSetter());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractConstantWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractConstantWizard.java
index 6774cf1..1ef3d5c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractConstantWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractConstantWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,6 +58,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 
 		String message= null;
@@ -168,6 +169,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 				if (data[i] == fAccessModifier)
 					radio.setSelection(true);
 				radio.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent event) {
 						setAccessModifier((String)event.widget.getData());
 					}
@@ -201,6 +203,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 			final Button checkBox= createCheckbox(result,  title, defaultValue, layouter);
 			getExtractConstantRefactoring().setReplaceAllOccurrences(checkBox.getSelection());
 			checkBox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getExtractConstantRefactoring().setReplaceAllOccurrences(checkBox.getSelection());
 				}
@@ -213,6 +216,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 			fQualifyReferences= createCheckbox(result,  title, defaultValue, layouter);
 			getExtractConstantRefactoring().setQualifyReferencesWithDeclaringClassName(fQualifyReferences.getSelection());
 			fQualifyReferences.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getExtractConstantRefactoring().setQualifyReferencesWithDeclaringClassName(fQualifyReferences.getSelection());
 				}
@@ -246,6 +250,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#validateTextField(String)
 		 */
+		@Override
 		protected RefactoringStatus validateTextField(String text) {
 			try {
 				getExtractConstantRefactoring().setConstantName(text);
@@ -283,6 +288,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#isInitialInputValid()
 		 */
+		@Override
 		protected boolean isInitialInputValid() {
 			return fInitialValid;
 		}
@@ -290,6 +296,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#restoreMessage()
 		 */
+		@Override
 		protected void restoreMessage() {
 			setMessage(fOriginalMessage, fOriginalMessageType);
 		}
@@ -313,6 +320,7 @@ public class ExtractConstantWizard extends RefactoringWizard {
 			return true;
 		}
 
+		@Override
 		public void dispose() {
 			if (saveSettings()) {
 				saveBooleanSetting(QUALIFY_REFERENCES, fQualifyReferences);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java
index 6d8718c..6fc8a45 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,6 +68,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages(){
 		addPage(new ExtractInterfaceInputPage(fProcessor));
 	}
@@ -117,6 +118,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			addInstanceofCheckbox(result, layout.marginWidth);
 			fReplaceAllCheckbox.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fInstanceofCheckbox.setEnabled(fReplaceAllCheckbox.getSelection());
 				}
@@ -150,6 +152,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fGenerateAnnotationsCheckbox= createCheckbox(result,  title, false);
 			fProcessor.setAnnotations(fGenerateAnnotationsCheckbox.getSelection());
 			fGenerateAnnotationsCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fProcessor.setAnnotations(fGenerateAnnotationsCheckbox.getSelection());
 				}
@@ -161,6 +164,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fGenerateCommentsCheckbox= createCheckbox(result,  title, false);
 			fProcessor.setComments(fGenerateCommentsCheckbox.getSelection());
 			fGenerateCommentsCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fProcessor.setComments(fGenerateCommentsCheckbox.getSelection());
 				}
@@ -178,6 +182,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fInstanceofCheckbox.setText(title);
 			fProcessor.setInstanceOf(fInstanceofCheckbox.getSelection());
 			fInstanceofCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fProcessor.setInstanceOf(fInstanceofCheckbox.getSelection());
 				}
@@ -273,6 +278,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fSelectAllButton.setLayoutData(new GridData());
 			SWTUtil.setButtonDimensionHint(fSelectAllButton);
 			fSelectAllButton.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fTableViewer.setAllChecked(true);
 					ExtractInterfaceInputPage.this.updateUIElementEnablement();
@@ -285,6 +291,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fDeselectAllButton.setLayoutData(new GridData());
 			SWTUtil.setButtonDimensionHint(fDeselectAllButton);
 			fDeselectAllButton.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fTableViewer.setAllChecked(false);
 					ExtractInterfaceInputPage.this.updateUIElementEnablement();
@@ -306,6 +313,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fReplaceAllCheckbox= createCheckbox(result,  title, defaultValue);
 			fProcessor.setReplace(fReplaceAllCheckbox.getSelection());
 			fReplaceAllCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fProcessor.setReplace(fReplaceAllCheckbox.getSelection());
 				}
@@ -319,6 +327,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fDeclarePublicCheckbox= createCheckbox(result,  title, defaultValue);
 			fProcessor.setPublic(fDeclarePublicCheckbox.getSelection());
 			fDeclarePublicCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fProcessor.setPublic(fDeclarePublicCheckbox.getSelection());
 				}
@@ -333,6 +342,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 			fDeclareAbstractCheckbox= createCheckbox(result,  title, defaultValue);
 			processor.setAbstract(fDeclareAbstractCheckbox.getSelection());
 			fDeclareAbstractCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					processor.setAbstract(fDeclareAbstractCheckbox.getSelection());
 				}
@@ -353,6 +363,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#validateTextField(String)
 		 */
+		@Override
 		protected RefactoringStatus validateTextField(String text) {
 			final ExtractInterfaceProcessor processor= fProcessor;
 			processor.setTypeName(text);
@@ -362,6 +373,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jface.wizard.IWizardPage#getNextPage()
 		 */
+		@Override
 		public IWizardPage getNextPage() {
 			try {
 				initializeRefactoring();
@@ -376,6 +388,7 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.RefactoringWizardPage#performFinish()
 		 */
+		@Override
 		public boolean performFinish(){
 			try {
 				initializeRefactoring();
@@ -399,10 +412,11 @@ public class ExtractInterfaceWizard extends RefactoringWizard {
 		}
 
 		private IMember[] getCheckedMembers() {
-			List checked= Arrays.asList(fTableViewer.getCheckedElements());
-			return (IMember[]) checked.toArray(new IMember[checked.size()]);
+			List<?> checked= Arrays.asList(fTableViewer.getCheckedElements());
+			return checked.toArray(new IMember[checked.size()]);
 		}
 
+		@Override
 		public void dispose() {
 			fInstanceofCheckbox= null;
 			fGenerateCommentsCheckbox= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java
index c25f440..9dc08af 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void create() {
 			super.create();
 			getShell().setText(RefactoringMessages.ExtractSupertypeMemberPage_choose_type_caption);
@@ -108,6 +109,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected Control createDialogArea(final Composite composite) {
 			Assert.isNotNull(composite);
 			setMessage(RefactoringMessages.ExtractSupertypeMemberPage_choose_type_message);
@@ -193,6 +195,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public int compare(final Viewer viewer, final Object first, final Object second) {
 			final IType predecessor= (IType) first;
 			final IType successor= (IType) second;
@@ -216,7 +219,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	private TableViewer fTableViewer;
 
 	/** The types to extract */
-	private final Set fTypesToExtract= new HashSet(2);
+	private final Set<IType> fTypesToExtract= new HashSet<IType>(2);
 
 	/**
 	 * Creates a new extract supertype member page.
@@ -239,6 +242,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void checkPageCompletionStatus(final boolean display) {
 		final RefactoringStatus status= getProcessor().checkExtractedCompilationUnit();
 		setMessage(null);
@@ -299,17 +303,18 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 		SWTUtil.setButtonDimensionHint(addButton);
 		addButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				try {
 					computeCandidateTypes();
 				} catch (InterruptedException exception) {
 					return;
 				}
-				final LinkedList list= new LinkedList(Arrays.asList(fCandidateTypes));
-				for (final Iterator outer= list.iterator(); outer.hasNext();) {
-					final IType first= (IType) outer.next();
-					for (final Iterator inner= fTypesToExtract.iterator(); inner.hasNext();) {
-						final IType second= (IType) inner.next();
+				final LinkedList<IType> list= new LinkedList<IType>(Arrays.asList(fCandidateTypes));
+				for (final Iterator<IType> outer= list.iterator(); outer.hasNext();) {
+					final IType first= outer.next();
+					for (final Iterator<IType> inner= fTypesToExtract.iterator(); inner.hasNext();) {
+						final IType second= inner.next();
 						if (second.getFullyQualifiedName().equals(first.getFullyQualifiedName()))
 							outer.remove();
 					}
@@ -322,7 +327,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 					final Object[] objects= dialog.getResult();
 					if (objects != null && objects.length > 0) {
 						for (int index= 0; index < objects.length; index++) {
-							fTypesToExtract.add(objects[index]);
+							fTypesToExtract.add((IType) objects[index]);
 						}
 						fTableViewer.setInput(fTypesToExtract.toArray());
 						handleTypesChanged();
@@ -338,11 +343,12 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 		SWTUtil.setButtonDimensionHint(removeButton);
 		removeButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				final IStructuredSelection selection= (IStructuredSelection) fTableViewer.getSelection();
 				if (!selection.isEmpty()) {
 					final IType declaring= getDeclaringType();
-					for (final Iterator iterator= selection.iterator(); iterator.hasNext();) {
+					for (final Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
 						final Object element= iterator.next();
 						if (!declaring.equals(element))
 							fTypesToExtract.remove(element);
@@ -374,6 +380,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void createControl(final Composite parent) {
 		final Composite composite= new Composite(parent, SWT.NONE);
 		final GridLayout layout= new GridLayout();
@@ -400,6 +407,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void createSuperTypeControl(final Composite parent) {
 		try {
 			createSuperTypeList(parent);
@@ -472,6 +480,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getCreateStubsButtonLabel() {
 		return RefactoringMessages.ExtractSupertypeMemberPage_create_stubs_label;
 	}
@@ -479,6 +488,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getDeclareAbstractActionLabel() {
 		return RefactoringMessages.ExtractSupertypeMemberPage_declare_abstract;
 	}
@@ -495,6 +505,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public IType getDestinationType() {
 		return getProcessor().computeExtractedType(fNameField.getText());
 	}
@@ -502,6 +513,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getInstanceofButtonLabel() {
 		return RefactoringMessages.ExtractSupertypeMemberPage_use_supertype_label;
 	}
@@ -509,6 +521,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getNoMembersMessage() {
 		return RefactoringMessages.ExtractSupertypeMemberPage_no_members_selected;
 	}
@@ -525,6 +538,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getPullUpActionLabel() {
 		return RefactoringMessages.ExtractSupertypeMemberPage_extract;
 	}
@@ -532,6 +546,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getReplaceButtonLabel() {
 		return RefactoringMessages.ExtractSupertypeMemberPage_use_instanceof_label;
 	}
@@ -539,6 +554,7 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int getTableRowCount() {
 		return 6;
 	}
@@ -559,12 +575,13 @@ public final class ExtractSupertypeMemberPage extends PullUpMemberPage {
 	 * Handles the types changed event.
 	 */
 	protected void handleTypesChanged() {
-		getProcessor().setTypesToExtract((IType[]) fTypesToExtract.toArray(new IType[fTypesToExtract.size()]));
+		getProcessor().setTypesToExtract(fTypesToExtract.toArray(new IType[fTypesToExtract.size()]));
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setVisible(final boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMethodPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMethodPage.java
index 1640853..9539775 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMethodPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMethodPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class ExtractSupertypeMethodPage extends PullUpMethodPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.EXTRACT_SUPERTYPE_WIZARD_PAGE);
@@ -57,6 +58,7 @@ public class ExtractSupertypeMethodPage extends PullUpMethodPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setVisible(final boolean visible) {
 		if (visible) {
 			final ExtractSupertypeProcessor processor= getProcessor();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeWizard.java
index 65854ff..87aa649 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public final class ExtractSupertypeWizard extends RefactoringWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void addUserInputPages() {
 		final ExtractSupertypeMethodPage page= new ExtractSupertypeMethodPage(fProcessor);
 		addPage(new ExtractSupertypeMemberPage(PAGE_NAME, page, fProcessor));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java
index 0e2daac..7ac10e7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class ExtractTempWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages(){
 		addPage(new ExtractTempInputPage(getExtractTempRefactoring().guessTempNames()));
 	}
@@ -120,6 +121,7 @@ public class ExtractTempWizard extends RefactoringWizard {
 			final Button checkBox= createCheckbox(result,  title, defaultValue, layouter);
 			getExtractTempRefactoring().setReplaceAllOccurrences(checkBox.getSelection());
 			checkBox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fSettings.put(REPLACE_ALL, checkBox.getSelection());
 					getExtractTempRefactoring().setReplaceAllOccurrences(checkBox.getSelection());
@@ -133,6 +135,7 @@ public class ExtractTempWizard extends RefactoringWizard {
 			final Button checkBox= createCheckbox(result,  title, defaultValue, layouter);
 			getExtractTempRefactoring().setDeclareFinal(checkBox.getSelection());
 			checkBox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fSettings.put(DECLARE_FINAL, checkBox.getSelection());
 					getExtractTempRefactoring().setDeclareFinal(checkBox.getSelection());
@@ -143,6 +146,7 @@ public class ExtractTempWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#textModified(java.lang.String)
 		 */
+		@Override
 		protected void textModified(String text) {
 			getExtractTempRefactoring().setTempName(text);
 			super.textModified(text);
@@ -152,6 +156,7 @@ public class ExtractTempWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#validateTextField(String)
 		 */
+		@Override
 		protected RefactoringStatus validateTextField(String text) {
 			return getExtractTempRefactoring().checkTempName(text);
 		}
@@ -171,6 +176,7 @@ public class ExtractTempWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#isInitialInputValid()
 		 */
+		@Override
 		protected boolean isInitialInputValid() {
 			return fInitialValid;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InferTypeArgumentsWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InferTypeArgumentsWizard.java
index b3ca30f..54c6b32 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InferTypeArgumentsWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InferTypeArgumentsWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class InferTypeArgumentsWizard extends RefactoringWizard {
 	/*
 	 * @see org.eclipse.ltk.ui.refactoring.RefactoringWizard#addUserInputPages()
 	 */
+	@Override
 	protected void addUserInputPages() {
 		addPage(new InferTypeArgumentsInputPage());
 	}
@@ -90,6 +91,7 @@ public class InferTypeArgumentsWizard extends RefactoringWizard {
 			fRefactoring.setAssumeCloneReturnsSameType(assumeCloneValue);
 			cloneCheckBox.setSelection(assumeCloneValue);
 			cloneCheckBox.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					setAssumeCloseReturnsSameType(((Button)e.widget).getSelection());
 				}
@@ -101,6 +103,7 @@ public class InferTypeArgumentsWizard extends RefactoringWizard {
 			fRefactoring.setLeaveUnconstrainedRaw(leaveRawValue);
 			leaveRawCheckBox.setSelection(leaveRawValue);
 			leaveRawCheckBox.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					setLeaveUnconstrainedRaw(((Button)e.widget).getSelection());
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java
index 127e704..7ddb609 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class InlineConstantWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 		String message= null;
 		if(!getInlineConstantRefactoring().isInitializerAllStaticFinal()) {
@@ -97,6 +98,7 @@ public class InlineConstantWizard extends RefactoringWizard {
 			all.setText(RefactoringMessages.InlineConstantInputPage_All_references);
 			all.setSelection(fRefactoring.getReplaceAllReferences());
 			all.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					fRefactoring.setReplaceAllReferences(true);
 					fRemove.setEnabled(true);
@@ -111,6 +113,7 @@ public class InlineConstantWizard extends RefactoringWizard {
 			fRemove.setEnabled(all.getSelection());
 			fRemove.setSelection(fRefactoring.getRemoveDeclaration());
 			fRemove.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fRefactoring.setRemoveDeclaration(fRemove.getSelection());
 				}
@@ -128,6 +131,7 @@ public class InlineConstantWizard extends RefactoringWizard {
 				onlySelected.setFocus();
 			}
 			onlySelected.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					fRefactoring.setReplaceAllReferences(false);
 					fRemove.setEnabled(false);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineTempWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineTempWizard.java
index d73041a..66ff38d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineTempWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineTempWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,10 +29,12 @@ public class InlineTempWizard extends RefactoringWizard {
 		setDefaultPageTitle(RefactoringMessages.InlineTempWizard_defaultPageTitle);
 	}
 
+	@Override
 	protected void addUserInputPages() {
 		addPage(new InlineTempInputPage());
 	}
 
+	@Override
 	public int getMessageLineWidthInChars() {
 		return 0;
 	}
@@ -45,11 +47,13 @@ public class InlineTempWizard extends RefactoringWizard {
 			super(PAGE_NAME, true, MessageWizardPage.STYLE_QUESTION);
 		}
 
+		@Override
 		public void createControl(Composite parent) {
 			super.createControl(parent);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.INLINE_TEMP_WIZARD_PAGE);
 		}
 
+		@Override
 		protected String getMessageString() {
 			InlineTempRefactoring refactoring= (InlineTempRefactoring) getRefactoring();
 			int occurrences= refactoring.getReferences().length;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryInputPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryInputPage.java
index 74cfee3..383494d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryInputPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryInputPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -135,6 +135,7 @@ public class IntroduceFactoryInputPage extends UserInputWizardPage {
 			}
 		});
 		protectCtorCB.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				boolean	isChecked = protectCtorCB.getSelection();
 
@@ -156,6 +157,7 @@ public class IntroduceFactoryInputPage extends UserInputWizardPage {
 			}
 		});
 		browseTypes.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				IType factoryType= chooseFactoryClass();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryWizard.java
index c4817f2..8e78330 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceFactoryWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class IntroduceFactoryWizard extends RefactoringWizard {
 	/**
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 		String message= RefactoringMessages.IntroduceFactoryInputPage_name_factory;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionInputPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionInputPage.java
index 70ccd93..b1d759e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionInputPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionInputPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public class IntroduceIndirectionInputPage extends UserInputWizardPage {
 
 	private Combo fIntermediaryTypeName;
 	private static final int INTERMEDIARY_TYPE_COUNT= 10;
-	private static List fgIntermediaryTypes= new ArrayList(INTERMEDIARY_TYPE_COUNT);
+	private static List<String> fgIntermediaryTypes= new ArrayList<String>(INTERMEDIARY_TYPE_COUNT);
 
 	/**
 	 * Constructor for IntroduceIndirectionInputPage.
@@ -82,7 +82,7 @@ public class IntroduceIndirectionInputPage extends UserInputWizardPage {
 	private Combo createIntermediaryTypeCombo(Composite composite) {
 		final Combo textCombo= new Combo(composite, SWT.SINGLE | SWT.BORDER);
 		textCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		textCombo.setItems((String[]) fgIntermediaryTypes.toArray(new String[fgIntermediaryTypes.size()]));
+		textCombo.setItems(fgIntermediaryTypes.toArray(new String[fgIntermediaryTypes.size()]));
 		textCombo.setVisibleItemCount(INTERMEDIARY_TYPE_COUNT);
 
 		JavaTypeCompletionProcessor processor= new JavaTypeCompletionProcessor(false, false, true);
@@ -147,6 +147,7 @@ public class IntroduceIndirectionInputPage extends UserInputWizardPage {
 		});
 
 		enableReferencesCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				getIntroduceIndirectionRefactoring().setEnableUpdateReferences(enableReferencesCheckBox.getSelection());
 			}
@@ -159,6 +160,7 @@ public class IntroduceIndirectionInputPage extends UserInputWizardPage {
 		});
 
 		browseTypes.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				IType intermediaryType= chooseIntermediaryClass();
 
@@ -223,11 +225,13 @@ public class IntroduceIndirectionInputPage extends UserInputWizardPage {
 		}
 	}
 
+	@Override
 	protected boolean performFinish() {
 		storeIntermediaryTypeName();
 		return super.performFinish();
 	}
 
+	@Override
 	public IWizardPage getNextPage() {
 		storeIntermediaryTypeName();
 		return super.getNextPage();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionWizard.java
index 0444b17..bde26c9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceIndirectionWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ public class IntroduceIndirectionWizard extends RefactoringWizard {
 	/**
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 		IntroduceIndirectionInputPage page= new IntroduceIndirectionInputPage("IntroduceIndirectionInputPage"); //$NON-NLS-1$
 		addPage(page);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java
index 80b516f..7e3bd3f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,6 +102,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 		setDefaultPageTitle(RefactoringMessages.IntroduceParameterObjectWizard_wizardpage_title);
 	}
 
+	@Override
 	protected void addUserInputPages() {
 		addPage(new IntroduceParameterObjectInputPage(fProcessor));
 	}
@@ -122,10 +123,10 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			public Object[] getElements(Object inputElement) {
 				if (inputElement instanceof IntroduceParameterObjectProcessor) {
 					IntroduceParameterObjectProcessor refactoring= (IntroduceParameterObjectProcessor) inputElement;
-					List parameterInfos= refactoring.getParameterInfos();
-					List result= new ArrayList(parameterInfos.size());
-					for (Iterator iter= parameterInfos.iterator(); iter.hasNext();) {
-						ParameterInfo pi= (ParameterInfo) iter.next();
+					List<ParameterInfo> parameterInfos= refactoring.getParameterInfos();
+					List<ParameterInfo> result= new ArrayList<ParameterInfo>(parameterInfos.size());
+					for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
+						ParameterInfo pi= iter.next();
 						if (!pi.isAdded())
 							result.add(pi);
 					}
@@ -136,6 +137,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 		}
 
 		private abstract class ParameterInfoLabelProvider extends CellLabelProvider {
+			@Override
 			public void update(ViewerCell cell) {
 				ParameterInfo pi= (ParameterInfo) cell.getElement();
 				cell.setText(doGetValue(pi));
@@ -152,6 +154,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 				fTextEditor= textEditor;
 			}
 
+			@Override
 			protected void setValue(Object element, Object value) {
 				if (element instanceof ParameterInfo) {
 					ParameterInfo pi= (ParameterInfo) element;
@@ -164,6 +167,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 
 			public abstract void doSetValue(ParameterInfo pi, String string);
 
+			@Override
 			protected Object getValue(Object element) {
 				if (element instanceof ParameterInfo) {
 					ParameterInfo pi= (ParameterInfo) element;
@@ -174,10 +178,12 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 
 			public abstract String doGetValue(ParameterInfo pi);
 
+			@Override
 			protected CellEditor getCellEditor(Object element) {
 				return fTextEditor;
 			}
 
+			@Override
 			protected boolean canEdit(Object element) {
 				if (element instanceof ParameterInfo) {
 					ParameterInfo pi= (ParameterInfo) element;
@@ -241,7 +247,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 		}
 
 		protected void validateRefactoring() {
-			List names= new ArrayList();
+			List<String> names= new ArrayList<String>();
 			boolean oneChecked= false;
 			setMessage(null);
 			setErrorMessage(null);
@@ -249,9 +255,9 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			IJavaProject project= fProcessor.getMethod().getJavaProject();
 			String sourceLevel= project.getOption(JavaCore.COMPILER_SOURCE, true);
 			String compliance= project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
-			List parameterInfos= fProcessor.getParameterInfos();
-			for (Iterator iter= parameterInfos.iterator(); iter.hasNext();) {
-				ParameterInfo pi= (ParameterInfo) iter.next();
+			List<ParameterInfo> parameterInfos= fProcessor.getParameterInfos();
+			for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
+				ParameterInfo pi= iter.next();
 				if (names.contains(pi.getNewName())) {
 					setErrorMessage(Messages.format(RefactoringMessages.IntroduceParameterObjectWizard_parametername_check_notunique, BasicElementLabels.getJavaElementName(pi.getNewName())));
 					setPageComplete(false);
@@ -337,7 +343,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			fSignaturePreview= new JavaSourceViewer(composite, null, null, false, SWT.READ_ONLY | SWT.V_SCROLL | SWT.WRAP, store);
 			fSignaturePreview.configure(new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), store, null, null));
 			fSignaturePreview.getTextWidget().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
-			fSignaturePreview.getTextWidget().setBackground(composite.getBackground());
+			fSignaturePreview.adaptBackgroundColor(composite);
 			fSignaturePreview.setDocument(fSignaturePreviewDocument);
 			fSignaturePreview.setEditable(false);
 
@@ -378,6 +384,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 				fDeprecateDelegateCheckBox.setSelection(DelegateUIHelper.loadDeprecateDelegateSetting(refactoring));
 				refactoring.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 				fDeprecateDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						refactoring.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 						validateRefactoring();
@@ -385,6 +392,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 				});
 				fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 				fLeaveDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 					}
@@ -417,6 +425,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			final Button topLvlRadio= new Button(composite, SWT.RADIO);
 			topLvlRadio.setText(RefactoringMessages.IntroduceParameterObjectWizard_createastoplevel_radio);
 			topLvlRadio.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					boolean fAsTopLevel= topLvlRadio.getSelection();
 					fProcessor.setCreateAsTopLevel(fAsTopLevel);
@@ -462,9 +471,9 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			gridData= new GridData(GridData.FILL_BOTH);
 			table.setLayoutData(gridData);
 			tv.setInput(fProcessor);
-			List parameterInfos= fProcessor.getParameterInfos();
-			for (Iterator iter= parameterInfos.iterator(); iter.hasNext();) {
-				ParameterInfo pi= (ParameterInfo) iter.next();
+			List<ParameterInfo> parameterInfos= fProcessor.getParameterInfos();
+			for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
+				ParameterInfo pi= iter.next();
 				tv.setChecked(pi, pi.isCreateField());
 			}
 			tv.refresh(true);
@@ -502,6 +511,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			editButton.setEnabled(!tv.getSelection().isEmpty());
 			SWTUtil.setButtonDimensionHint(editButton);
 			editButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					ISelection selection= tv.getSelection();
 					if (selection instanceof IStructuredSelection) {
@@ -530,6 +540,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			});
 
 			downButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					int[] indices= tv.getTable().getSelectionIndices();
 					Arrays.sort(indices);
@@ -544,6 +555,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 
 			});
 			upButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					int[] indices= tv.getTable().getSelectionIndices();
 					Arrays.sort(indices);
@@ -558,12 +570,12 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 
 			});
 			tv.addCheckStateListener(new ICheckStateListener() {
-				Map fLastNames=new HashMap();
+				Map<ParameterInfo, String> fLastNames=new HashMap<ParameterInfo, String>();
 				public void checkStateChanged(CheckStateChangedEvent event) {
 					ParameterInfo element= (ParameterInfo) event.getElement();
 					element.setCreateField(event.getChecked());
 					if (element.isCreateField()){
-						String lastName= (String) fLastNames.get(element);
+						String lastName= fLastNames.get(element);
 						if (lastName==null){
 							lastName= fProcessor.getFieldName(element);
 						}
@@ -597,6 +609,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 
 			TableViewerColumn viewerColumn= new TableViewerColumn(tv, SWT.LEAD);
 			viewerColumn.setLabelProvider(new ParameterInfoLabelProvider() {
+				@Override
 				protected String doGetValue(ParameterInfo pi) {
 					return pi.getNewTypeName();
 				}
@@ -606,14 +619,17 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			columnType.setText(RefactoringMessages.IntroduceParameterObjectWizard_type_column);
 			viewerColumn= new TableViewerColumn(tv, SWT.LEAD);
 			viewerColumn.setLabelProvider(new ParameterInfoLabelProvider() {
+				@Override
 				protected String doGetValue(ParameterInfo pi) {
 					return pi.getNewName();
 				}
 			});
 			viewerColumn.setEditingSupport(new ParameterInfoEditingSupport(cellEditor, tv) {
+				@Override
 				public String doGetValue(ParameterInfo pi) {
 					return pi.getNewName();
 				}
+				@Override
 				public void doSetValue(ParameterInfo pi, String string) {
 					pi.setNewName(string);
 				}
@@ -642,6 +658,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			button.setText(RefactoringMessages.IntroduceParameterObjectWizard_creategetter_checkbox);
 			button.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fProcessor.setCreateGetter(button.getSelection());
 					validateRefactoring();
@@ -659,6 +676,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			button.setText(RefactoringMessages.IntroduceParameterObjectWizard_createsetter_checkbox);
 			button.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fProcessor.setCreateSetter(button.getSelection());
 					validateRefactoring();
@@ -717,6 +735,7 @@ public class IntroduceParameterObjectWizard extends RefactoringWizard {
 			}
 		}
 
+		@Override
 		public void dispose() {
 			DelegateUIHelper.saveDeprecateDelegateSetting(fDeprecateDelegateCheckBox);
 			DelegateUIHelper.saveLeaveDelegateSetting(fLeaveDelegateCheckBox);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterWizard.java
index 9693bf9..23303db 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,6 +58,7 @@ public class IntroduceParameterWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages(){
 		addPage(new IntroduceParameterInputPage(getIntroduceParameterRefactoring().guessParameterNames()));
 	}
@@ -108,12 +109,14 @@ public class IntroduceParameterWizard extends RefactoringWizard {
 				fDeprecateDelegateCheckBox.setSelection(DelegateUIHelper.loadDeprecateDelegateSetting(refactoring));
 				refactoring.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 				fDeprecateDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						refactoring.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 					}
 				});
 				fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 				fLeaveDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 					}
@@ -147,6 +150,7 @@ public class IntroduceParameterWizard extends RefactoringWizard {
 			return cp;
 		}
 
+		@Override
 		public void dispose() {
 			DelegateUIHelper.saveLeaveDelegateSetting(fLeaveDelegateCheckBox);
 			DelegateUIHelper.saveDeprecateDelegateSetting(fDeprecateDelegateCheckBox);
@@ -161,7 +165,7 @@ public class IntroduceParameterWizard extends RefactoringWizard {
 			fSignaturePreview= new JavaSourceViewer(composite, null, null, false, SWT.READ_ONLY | SWT.V_SCROLL | SWT.WRAP /*| SWT.BORDER*/, store);
 			fSignaturePreview.configure(new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), store, null, null));
 			fSignaturePreview.getTextWidget().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
-			fSignaturePreview.getTextWidget().setBackground(composite.getBackground());
+			fSignaturePreview.adaptBackgroundColor(composite);
 			fSignaturePreview.setDocument(fSignaturePreviewDocument);
 			fSignaturePreview.setEditable(false);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/JavaStatusContextViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/JavaStatusContextViewer.java
index 3024f2c..f095c40 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/JavaStatusContextViewer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/JavaStatusContextViewer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class JavaStatusContextViewer extends TextStatusContextViewer {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.refactoring.IStatusContextViewer#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		final SourceViewer viewer= getSourceViewer();
@@ -69,6 +70,7 @@ public class JavaStatusContextViewer extends TextStatusContextViewer {
 		viewer.getControl().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
 	}
 
+	@Override
 	protected SourceViewer createSourceViewer(Composite parent) {
 		IPreferenceStore store= JavaPlugin.getDefault().getCombinedPreferenceStore();
 		return new JavaSourceViewer(parent, null, null, false, SWT.LEFT_TO_RIGHT | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION, store);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInnerToTopWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInnerToTopWizard.java
index b9a21bd..b133253 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInnerToTopWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInnerToTopWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,7 @@ public class MoveInnerToTopWizard extends RefactoringWizard {
 			fFinalCheckBox.setLayoutData(data);
 			fFinalCheckBox.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					getMoveRefactoring().setMarkInstanceFieldAsFinal(fFinalCheckBox.getSelection());
 				}
@@ -127,6 +128,7 @@ public class MoveInnerToTopWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#isEmptyInputValid()
 		 */
+		@Override
 		protected boolean isEmptyInputValid() {
 			return !getMoveRefactoring().isCreatingInstanceFieldMandatory();
 		}
@@ -134,6 +136,7 @@ public class MoveInnerToTopWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#isInitialInputValid()
 		 */
+		@Override
 		protected boolean isInitialInputValid() {
 			return fInitialInputValid;
 		}
@@ -141,6 +144,7 @@ public class MoveInnerToTopWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 		 */
+		@Override
 		public void setVisible(boolean visible) {
 			super.setVisible(visible);
 			if (visible) {
@@ -155,6 +159,7 @@ public class MoveInnerToTopWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.refactoring.TextInputWizardPage#validateTextField(String)
 		 */
+		@Override
 		protected RefactoringStatus validateTextField(String text) {
 			final MoveInnerToTopRefactoring refactoring= getMoveRefactoring();
 			refactoring.setEnclosingInstanceName(text);
@@ -175,6 +180,7 @@ public class MoveInnerToTopWizard extends RefactoringWizard {
 	/*
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 		final MoveInnerToTopRefactoring refactoring= getMoveRefactoring();
 		if (refactoring.isCreatingInstanceFieldPossible())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java
index 3938e94..89c9645 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -242,12 +242,14 @@ public final class MoveInstanceMethodWizard extends RefactoringWizard {
 				fDeprecateDelegateCheckBox.setSelection(DelegateUIHelper.loadDeprecateDelegateSetting(fProcessor));
 				fProcessor.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 				fDeprecateDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						fProcessor.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 					}
 				});
 				fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 				fLeaveDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 					}
@@ -263,6 +265,7 @@ public final class MoveInstanceMethodWizard extends RefactoringWizard {
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.MOVE_MEMBERS_WIZARD_PAGE);
 		}
 
+		@Override
 		public void dispose() {
 			DelegateUIHelper.saveLeaveDelegateSetting(fLeaveDelegateCheckBox);
 			DelegateUIHelper.saveDeprecateDelegateSetting(fDeprecateDelegateCheckBox);
@@ -350,6 +353,7 @@ public final class MoveInstanceMethodWizard extends RefactoringWizard {
 	/*
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 		addPage(new MoveInstanceMethodPage());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveMembersWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveMembersWizard.java
index e94619a..752d95a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveMembersWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveMembersWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,7 @@ public class MoveMembersWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages(){
 		addPage(new MoveMembersInputPage(fProcessor));
 	}
@@ -92,7 +93,7 @@ public class MoveMembersWizard extends RefactoringWizard {
 		private Button fLeaveDelegateCheckBox;
 		private Button fDeprecateDelegateCheckBox;
 		private static final int MRU_COUNT= 10;
-		private static List fgMruDestinations= new ArrayList(MRU_COUNT);
+		private static List<String> fgMruDestinations= new ArrayList<String>(MRU_COUNT);
 		private final MoveStaticMembersProcessor fProcessor;
 
 		public MoveMembersInputPage(MoveStaticMembersProcessor processor) {
@@ -100,6 +101,7 @@ public class MoveMembersWizard extends RefactoringWizard {
 			fProcessor= processor;
 		}
 
+		@Override
 		public void setVisible(boolean visible){
 			if (visible){
 				IMember[] membersToMove= getMoveProcessor().getMembersToMove();
@@ -136,12 +138,14 @@ public class MoveMembersWizard extends RefactoringWizard {
 				fDeprecateDelegateCheckBox.setSelection(DelegateUIHelper.loadDeprecateDelegateSetting(getMoveProcessor()));
 				getMoveProcessor().setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 				fDeprecateDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						getMoveProcessor().setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 					}
 				});
 				fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 				fLeaveDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 					}
@@ -152,6 +156,7 @@ public class MoveMembersWizard extends RefactoringWizard {
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJavaHelpContextIds.MOVE_MEMBERS_WIZARD_PAGE);
 		}
 
+		@Override
 		public void dispose() {
 			DelegateUIHelper.saveLeaveDelegateSetting(fLeaveDelegateCheckBox);
 			DelegateUIHelper.saveDeprecateDelegateSetting(fDeprecateDelegateCheckBox);
@@ -180,7 +185,7 @@ public class MoveMembersWizard extends RefactoringWizard {
 			SWTUtil.setDefaultVisibleItemCount(fDestinationField);
 			fDestinationField.setFocus();
 			fDestinationField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			fDestinationField.setItems((String[]) fgMruDestinations.toArray(new String[fgMruDestinations.size()]));
+			fDestinationField.setItems(fgMruDestinations.toArray(new String[fgMruDestinations.size()]));
 			fDestinationField.addModifyListener(new ModifyListener(){
 				public void modifyText(ModifyEvent e) {
 					handleDestinationChanged();
@@ -230,17 +235,20 @@ public class MoveMembersWizard extends RefactoringWizard {
 			button.setLayoutData(new GridData());
 			SWTUtil.setButtonDimensionHint(button);
 			button.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					openTypeSelectionDialog();
 				}
 			});
 		}
 
+		@Override
 		protected boolean performFinish() {
 			initializeRefactoring();
 			return super.performFinish();
 		}
 
+		@Override
 		public IWizardPage getNextPage() {
 			initializeRefactoring();
 			return super.getNextPage();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java
index 11e9f1c..2508dfe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,11 +72,13 @@ public class ParameterEditDialog extends StatusDialog {
 		fContext= context;
 	}
 
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		newShell.setText(RefactoringMessages.ParameterEditDialog_title);
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite result= (Composite)super.createDialogArea(parent);
 		GridLayout layout= (GridLayout)result.getLayout();
@@ -148,6 +150,7 @@ public class ParameterEditDialog extends StatusDialog {
 		return result;
 	}
 
+	@Override
 	protected void okPressed() {
 		if (fType != null) {
 			fParameter.setNewTypeName(fType.getText());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java
index 34eb2a2..58a14fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ public class PromoteTempWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages(){
 		addPage(new PromoteTempInputPage());
 	}
@@ -142,6 +143,7 @@ public class PromoteTempWizard extends RefactoringWizard {
 				fInitializeInRadioButtons[i].setData(dataItem);
 				final int j= i;
 				fInitializeInRadioButtons[i].addSelectionListener(new SelectionAdapter(){
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						getPromoteTempRefactoring().setInitializeIn(getDataAsInt(fInitializeInRadioButtons[j]));
 						updateButtonsEnablement();
@@ -184,6 +186,7 @@ public class PromoteTempWizard extends RefactoringWizard {
 			gd.horizontalSpan= 2;
 			fDeclareStaticCheckbox.setLayoutData(gd);
 			fDeclareStaticCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getPromoteTempRefactoring().setDeclareStatic(fDeclareStaticCheckbox.getSelection());
 					updateButtonsEnablement();
@@ -201,6 +204,7 @@ public class PromoteTempWizard extends RefactoringWizard {
 			gd.horizontalSpan= 2;
 			fDeclareFinalCheckbox.setLayoutData(gd);
 			fDeclareFinalCheckbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getPromoteTempRefactoring().setDeclareFinal(fDeclareFinalCheckbox.getSelection());
 					updateButtonsEnablement();
@@ -231,6 +235,7 @@ public class PromoteTempWizard extends RefactoringWizard {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 		 */
+		@Override
 		public void setVisible(boolean visible) {
 			super.setVisible(visible);
 			if (visible && fNameField != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java
index 3608877..81239ce 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ class PullPushCheckboxTableViewer extends CheckboxTableViewer{
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#doUpdateItem(org.eclipse.swt.widgets.Widget, java.lang.Object, boolean)
 	 */
+	@Override
 	protected void doUpdateItem(Widget widget, Object element, boolean fullMap) {
 		super.doUpdateItem(widget, element, fullMap);
 		if (! (widget instanceof TableItem))
@@ -41,6 +42,7 @@ class PullPushCheckboxTableViewer extends CheckboxTableViewer{
 	/*
 	 * @see org.eclipse.jface.viewers.Viewer#inputChanged(java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	protected void inputChanged(Object input, Object oldInput) {
 		super.inputChanged(input, oldInput);
 		// XXX workaround for http://bugs.eclipse.org/bugs/show_bug.cgi?id=9390
@@ -63,6 +65,7 @@ class PullPushCheckboxTableViewer extends CheckboxTableViewer{
 	/*
 	 * @see org.eclipse.jface.viewers.Viewer#refresh()
 	 */
+	@Override
 	public void refresh() {
 		int topIndex = getTable().getTopIndex();
 		super.refresh();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java
index 6da1236..82b7c48 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -230,6 +230,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 
 		private final ILabelProvider fLabelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_SMALL_ICONS);
 
+		@Override
 		public void dispose() {
 			super.dispose();
 			fLabelProvider.dispose();
@@ -288,7 +289,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		return result;
 	}
 
-	private static void putToStringMapping(final Map result, final String[] actionLabels, final int actionIndex) {
+	private static void putToStringMapping(final Map<String, Integer> result, final String[] actionLabels, final int actionIndex) {
 		result.put(actionLabels[actionIndex], new Integer(actionIndex));
 	}
 
@@ -356,7 +357,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 	}
 
 	private MemberActionInfo[] asMemberActionInfos() {
-		final List toPullUp= Arrays.asList(fProcessor.getMembersToMove());
+		final List<IMember> toPullUp= Arrays.asList(fProcessor.getMembersToMove());
 		final IMember[] members= fProcessor.getPullableMembersOfDeclaringType();
 		final MemberActionInfo[] result= new MemberActionInfo[members.length];
 		for (int i= 0; i < members.length; i++) {
@@ -369,6 +370,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		return result;
 	}
 
+	@Override
 	public boolean canFlipToNextPage() {
 		return isPageComplete();
 	}
@@ -432,6 +434,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		SWTUtil.setButtonDimensionHint(fSelectAllButton);
 		fSelectAllButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				final IMember[] members= getMembers();
 				setActionForMembers(members, PULL_UP_ACTION);
@@ -446,6 +449,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		SWTUtil.setButtonDimensionHint(fDeselectAllButton);
 		fDeselectAllButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				final IMember[] members= getMembers();
 				setActionForMembers(members, MemberActionInfo.NO_ACTION);
@@ -463,6 +467,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		SWTUtil.setButtonDimensionHint(fEditButton);
 		fEditButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				editSelectedMembers();
 			}
@@ -474,6 +479,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		SWTUtil.setButtonDimensionHint(fAddButton);
 		fAddButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				checkAdditionalRequired();
 			}
@@ -514,12 +520,14 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		fProcessor.setInstanceOf(fInstanceofButton.getSelection());
 		fInstanceofButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent e) {
 				fProcessor.setInstanceOf(fInstanceofButton.getSelection());
 			}
 		});
 		fReplaceButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent e) {
 				fInstanceofButton.setEnabled(fReplaceButton.getSelection());
 			}
@@ -623,8 +631,8 @@ public class PullUpMemberPage extends UserInputWizardPage {
 	}
 
 	// String -> Integer
-	private Map createStringMappingForSelectedMembers() {
-		final Map result= new HashMap();
+	private Map<String, Integer> createStringMappingForSelectedMembers() {
+		final Map<String, Integer> result= new HashMap<String, Integer>();
 		putToStringMapping(result, METHOD_LABELS, PULL_UP_ACTION);
 		putToStringMapping(result, METHOD_LABELS, DECLARE_ABSTRACT_ACTION);
 		return result;
@@ -688,6 +696,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		}
 	}
 
+	@Override
 	public void dispose() {
 		fInstanceofButton= null;
 		fReplaceButton= null;
@@ -707,15 +716,15 @@ public class PullUpMemberPage extends UserInputWizardPage {
 					? Messages.format(RefactoringMessages.PullUpInputPage1_Mark_selected_members_singular, JavaElementLabels.getElementLabel(selectedMembers[0].getMember(),
 							JavaElementLabels.M_PARAMETER_TYPES))
 					: Messages.format(RefactoringMessages.PullUpInputPage1_Mark_selected_members_plural, String.valueOf(selectedMembers.length));
-			final Map stringMapping= createStringMappingForSelectedMembers();
-			final String[] keys= (String[]) stringMapping.keySet().toArray(new String[stringMapping.keySet().size()]);
+			final Map<String, Integer> stringMapping= createStringMappingForSelectedMembers();
+			final String[] keys= stringMapping.keySet().toArray(new String[stringMapping.keySet().size()]);
 			Arrays.sort(keys);
 			final int initialSelectionIndex= getInitialSelectionIndexForEditDialog(stringMapping, keys);
 			final ComboSelectionDialog dialog= new ComboSelectionDialog(getShell(), shellTitle, labelText, keys, initialSelectionIndex);
 			dialog.setBlockOnOpen(true);
 			if (dialog.open() == Window.CANCEL)
 				return;
-			final int action= ((Integer) stringMapping.get(dialog.getSelectedString())).intValue();
+			final int action= stringMapping.get(dialog.getSelectedString()).intValue();
 			setActionForInfos(selectedMembers, action);
 		} finally {
 			updateWizardPage(preserved, true);
@@ -730,13 +739,13 @@ public class PullUpMemberPage extends UserInputWizardPage {
 
 	private MemberActionInfo[] getActiveInfos() {
 		final MemberActionInfo[] infos= getTableInput();
-		final List result= new ArrayList(infos.length);
+		final List<MemberActionInfo> result= new ArrayList<MemberActionInfo>(infos.length);
 		for (int i= 0; i < infos.length; i++) {
 			final MemberActionInfo info= infos[i];
 			if (info.isActive())
 				result.add(info);
 		}
-		return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	private int getCommonActionCodeForSelectedInfos() {
@@ -767,13 +776,13 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		return null;
 	}
 
-	private int getInitialSelectionIndexForEditDialog(final Map stringMapping, final String[] keys) {
+	private int getInitialSelectionIndexForEditDialog(final Map<String, Integer> stringMapping, final String[] keys) {
 		final int commonActionCode= getCommonActionCodeForSelectedInfos();
 		if (commonActionCode == -1)
 			return 0;
-		for (final Iterator iter= stringMapping.keySet().iterator(); iter.hasNext();) {
-			final String key= (String) iter.next();
-			final int action= ((Integer) stringMapping.get(key)).intValue();
+		for (final Iterator<String> iter= stringMapping.keySet().iterator(); iter.hasNext();) {
+			final String key= iter.next();
+			final int action= stringMapping.get(key).intValue();
 			if (commonActionCode == action) {
 				for (int i= 0; i < keys.length; i++) {
 					if (key.equals(keys[i]))
@@ -791,26 +800,26 @@ public class PullUpMemberPage extends UserInputWizardPage {
 
 	private IMember[] getMembers() {
 		final MemberActionInfo[] infos= getTableInput();
-		final List result= new ArrayList(infos.length);
+		final List<IMember> result= new ArrayList<IMember>(infos.length);
 		for (int index= 0; index < infos.length; index++) {
 			result.add(infos[index].getMember());
 		}
-		return (IMember[]) result.toArray(new IMember[result.size()]);
+		return result.toArray(new IMember[result.size()]);
 	}
 
 	private IMember[] getMembersForAction(final int action) {
-		List result= new ArrayList();
+		List<IMember> result= new ArrayList<IMember>();
 		getMembersForAction(action, false, result);
-		return (IMember[]) result.toArray(new IMember[result.size()]);
+		return result.toArray(new IMember[result.size()]);
 	}
 
 	private IMethod[] getMethodsForAction(final int action) {
-		List result= new ArrayList();
+		List<IMember> result= new ArrayList<IMember>();
 		getMembersForAction(action, true, result);
-		return (IMethod[]) result.toArray(new IMethod[result.size()]);
+		return result.toArray(new IMethod[result.size()]);
 	}
 
-	private void getMembersForAction(int action, boolean onlyMethods, List result) {
+	private void getMembersForAction(int action, boolean onlyMethods, List<IMember> result) {
 		boolean isDestinationInterface= isDestinationInterface();
 		final MemberActionInfo[] infos= getTableInput();
 		for (int index= 0; index < infos.length; index++) {
@@ -842,6 +851,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		return false;
 	}
 
+	@Override
 	public IWizardPage getNextPage() {
 		initializeRefactoring();
 		storeDialogSettings();
@@ -867,8 +877,8 @@ public class PullUpMemberPage extends UserInputWizardPage {
 	private MemberActionInfo[] getSelectedMembers() {
 		Assert.isTrue(fTableViewer.getSelection() instanceof IStructuredSelection);
 		final IStructuredSelection structured= (IStructuredSelection) fTableViewer.getSelection();
-		final List result= structured.toList();
-		return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+		final List<?> result= structured.toList();
+		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	private MemberActionInfo[] getTableInput() {
@@ -913,6 +923,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		fProcessor.setDeletedMethods(getMethodsForAction(PULL_UP_ACTION));
 	}
 
+	@Override
 	protected boolean performFinish() {
 		initializeRefactoring();
 		storeDialogSettings();
@@ -959,6 +970,7 @@ public class PullUpMemberPage extends UserInputWizardPage {
 		fTableViewer.setColumnProperties(new String[] { MEMBER_PROPERTY, ACTION_PROPERTY});
 	}
 
+	@Override
 	public void setVisible(final boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java
index b0e15d2..c19d1d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,7 +95,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 
 	private static class PullUpFilter extends ViewerFilter {
 
-		private static boolean anySubtypeCanBeShown(final IType type, final Map typeToMemberArray, final ITypeHierarchy hierarchy) {
+		private static boolean anySubtypeCanBeShown(final IType type, final Map<IType, IMember[]> typeToMemberArray, final ITypeHierarchy hierarchy) {
 			final IType[] subTypes= hierarchy.getSubtypes(type);
 			for (int i= 0; i < subTypes.length; i++) {
 				if (canBeShown(subTypes[i], typeToMemberArray, hierarchy))
@@ -104,14 +104,14 @@ public class PullUpMethodPage extends UserInputWizardPage {
 			return false;
 		}
 
-		private static boolean canBeShown(final IType type, final Map typeToMemberArray, final ITypeHierarchy hierarchy) {
+		private static boolean canBeShown(final IType type, final Map<IType, IMember[]> typeToMemberArray, final ITypeHierarchy hierarchy) {
 			if (typeToMemberArray.containsKey(type))
 				return true;
 			return anySubtypeCanBeShown(type, typeToMemberArray, hierarchy);
 		}
 
-		private static Set computeShowableSubtypesOfMainType(final ITypeHierarchy hierarchy, final Map typeToMemberArray) {
-			final Set result= new HashSet();
+		private static Set<IType> computeShowableSubtypesOfMainType(final ITypeHierarchy hierarchy, final Map<IType, IMember[]> typeToMemberArray) {
+			final Set<IType> result= new HashSet<IType>();
 			final IType[] subtypes= hierarchy.getAllSubtypes(hierarchy.getType());
 			for (int i= 0; i < subtypes.length; i++) {
 				final IType subtype= subtypes[i];
@@ -121,21 +121,22 @@ public class PullUpMethodPage extends UserInputWizardPage {
 			return result;
 		}
 
-		private static Set computeTypesToShow(final ITypeHierarchy hierarchy, final Map typeToMemberArray) {
-			final Set typesToShow= new HashSet();
+		private static Set<IType> computeTypesToShow(final ITypeHierarchy hierarchy, final Map<IType, IMember[]> typeToMemberArray) {
+			final Set<IType> typesToShow= new HashSet<IType>();
 			typesToShow.add(hierarchy.getType());
 			typesToShow.addAll(computeShowableSubtypesOfMainType(hierarchy, typeToMemberArray));
 			return typesToShow;
 		}
 
-		private final Set fTypesToShow;
+		private final Set<IType> fTypesToShow;
 
 		public PullUpFilter(final ITypeHierarchy hierarchy, final IMember[] members) {
 			// IType -> IMember[]
-			final Map map= PullUpMethodPage.createTypeToMemberArrayMapping(members);
+			final Map<IType, IMember[]> map= PullUpMethodPage.createTypeToMemberArrayMapping(members);
 			fTypesToShow= computeTypesToShow(hierarchy, map);
 		}
 
+		@Override
 		public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
 			if (element instanceof IMethod)
 				return true;
@@ -149,7 +150,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 
 		private ITypeHierarchy fHierarchy;
 
-		private Map fTypeToMemberArray; // IType -> IMember[]
+		private Map<IType, IMember[]> fTypeToMemberArray; // IType -> IMember[]
 
 		public PullUpHierarchyContentProvider(final IType declaringType, final IMember[] members) {
 			fDeclaringType= declaringType;
@@ -177,7 +178,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 
 		private IMember[] getMembers(final IType type) {
 			if (fTypeToMemberArray.containsKey(type))
-				return (IMember[]) (fTypeToMemberArray.get(type));
+				return (fTypeToMemberArray.get(type));
 			else
 				return new IMember[0];
 		}
@@ -198,7 +199,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 		}
 
 		private Object[] getSubclassesAndMembers(final IType type) {
-			final Set set= new HashSet();
+			final Set<IMember> set= new HashSet<IMember>();
 			set.addAll(Arrays.asList(getSubclasses(type)));
 			set.addAll(Arrays.asList(getMembers(type)));
 			return set.toArray();
@@ -220,28 +221,28 @@ public class PullUpMethodPage extends UserInputWizardPage {
 	private static final String PAGE_NAME= "PullUpMethodPage"; //$NON-NLS-1$
 
 	// IType -> IMember[]
-	private static Map createTypeToMemberArrayMapping(final IMember[] members) {
-		final Map typeToMemberSet= createTypeToMemberSetMapping(members);
-
-		final Map typeToMemberArray= new HashMap();
-		for (final Iterator iter= typeToMemberSet.keySet().iterator(); iter.hasNext();) {
-			final IType type= (IType) iter.next();
-			final Set memberSet= (Set) typeToMemberSet.get(type);
-			final IMember[] memberArray= (IMember[]) memberSet.toArray(new IMember[memberSet.size()]);
+	private static Map<IType, IMember[]> createTypeToMemberArrayMapping(final IMember[] members) {
+		final Map<IType, HashSet<IMember>> typeToMemberSet= createTypeToMemberSetMapping(members);
+
+		final Map<IType, IMember[]> typeToMemberArray= new HashMap<IType, IMember[]>();
+		for (final Iterator<IType> iter= typeToMemberSet.keySet().iterator(); iter.hasNext();) {
+			final IType type= iter.next();
+			final Set<IMember> memberSet= typeToMemberSet.get(type);
+			final IMember[] memberArray= memberSet.toArray(new IMember[memberSet.size()]);
 			typeToMemberArray.put(type, memberArray);
 		}
 		return typeToMemberArray;
 	}
 
 	// IType -> Set of IMember
-	private static Map createTypeToMemberSetMapping(final IMember[] members) {
-		final Map typeToMemberSet= new HashMap();
+	private static Map<IType, HashSet<IMember>> createTypeToMemberSetMapping(final IMember[] members) {
+		final Map<IType, HashSet<IMember>> typeToMemberSet= new HashMap<IType, HashSet<IMember>>();
 		for (int i= 0; i < members.length; i++) {
 			final IMember member= members[i];
 			final IType type= member.getDeclaringType();
 			if (!typeToMemberSet.containsKey(type))
-				typeToMemberSet.put(type, new HashSet());
-			((Set) typeToMemberSet.get(type)).add(member);
+				typeToMemberSet.put(type, new HashSet<IMember>());
+			typeToMemberSet.get(type).add(member);
 		}
 		return typeToMemberSet;
 	}
@@ -305,6 +306,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 		SWTUtil.setButtonDimensionHint(button);
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent e) {
 				checkPulledUp();
 				updateSelectionLabel();
@@ -421,12 +423,12 @@ public class PullUpMethodPage extends UserInputWizardPage {
 
 	private IMethod[] getCheckedMethods() {
 		final Object[] checked= fTreeViewer.getCheckedElements();
-		final List members= new ArrayList(checked.length);
+		final List<IMethod> members= new ArrayList<IMethod>(checked.length);
 		for (int i= 0; i < checked.length; i++) {
 			if (checked[i] instanceof IMethod)
-				members.add(checked[i]);
+				members.add((IMethod) checked[i]);
 		}
-		return (IMethod[]) members.toArray(new IMethod[members.size()]);
+		return members.toArray(new IMethod[members.size()]);
 	}
 
 	private ISourceReference getFirstSelectedSourceReference(final SelectionChangedEvent event) {
@@ -442,6 +444,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 		return (ISourceReference) first;
 	}
 
+	@Override
 	public IWizardPage getNextPage() {
 		initializeRefactoring();
 		return super.getNextPage();
@@ -498,6 +501,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 		}
 	}
 
+	@Override
 	protected boolean performFinish() {
 		initializeRefactoring();
 		return super.performFinish();
@@ -536,6 +540,7 @@ public class PullUpMethodPage extends UserInputWizardPage {
 		fSourceViewer.setDocument(document);
 	}
 
+	@Override
 	public void setVisible(final boolean visible) {
 		if (visible && fChangedSettings) {
 			fChangedSettings= false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpWizard.java
index 28d561d..b9a5340 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public final class PullUpWizard extends RefactoringWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void addUserInputPages() {
 		final PullUpMethodPage page= new PullUpMethodPage(fProcessor);
 		addPage(new PullUpMemberPage(PullUpWizard.PAGE_NAME, page, fProcessor));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java
index 4b89d6a..23a045b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,6 +112,7 @@ public final class PushDownWizard extends RefactoringWizard {
 
 			private final ILabelProvider fLabelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_SMALL_ICONS);
 
+			@Override
 			public void dispose() {
 				fLabelProvider.dispose();
 				super.dispose();
@@ -266,6 +267,7 @@ public final class PushDownWizard extends RefactoringWizard {
 			SWTUtil.setButtonDimensionHint(fSelectAllButton);
 			fSelectAllButton.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(final SelectionEvent event) {
 					final IMember[] members= getMembers();
 					setActionForMembers(members, MemberActionInfo.PUSH_DOWN_ACTION);
@@ -280,6 +282,7 @@ public final class PushDownWizard extends RefactoringWizard {
 			SWTUtil.setButtonDimensionHint(fDeselectAllButton);
 			fDeselectAllButton.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(final SelectionEvent event) {
 					final IMember[] members= getMembers();
 					setActionForMembers(members, MemberActionInfo.NO_ACTION);
@@ -296,6 +299,7 @@ public final class PushDownWizard extends RefactoringWizard {
 			SWTUtil.setButtonDimensionHint(fEditButton);
 			fEditButton.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(final SelectionEvent event) {
 					PushDownInputPage.this.editSelectedMembers();
 				}
@@ -307,6 +311,7 @@ public final class PushDownWizard extends RefactoringWizard {
 			SWTUtil.setButtonDimensionHint(addButton);
 			addButton.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(final SelectionEvent event) {
 					PushDownInputPage.this.markAdditionalRequiredMembersAsMembersToPushDown();
 				}
@@ -411,8 +416,8 @@ public final class PushDownWizard extends RefactoringWizard {
 		}
 
 		// String -> Integer
-		private Map createStringMappingForSelectedElements() {
-			final Map result= new HashMap();
+		private Map<String, Integer> createStringMappingForSelectedElements() {
+			final Map<String, Integer> result= new HashMap<String, Integer>();
 			int action= MemberActionInfo.PUSH_DOWN_ACTION;
 			result.put(MemberActionInfoLabelProvider.getActionLabel(action), new Integer(action));
 			int action1= MemberActionInfo.PUSH_ABSTRACT_ACTION;
@@ -429,8 +434,8 @@ public final class PushDownWizard extends RefactoringWizard {
 				final String labelText= selectedMembers.length == 1 ? Messages.format(RefactoringMessages.PushDownInputPage_Mark_selected_members_singular, JavaElementLabels.getElementLabel(
 						selectedMembers[0].getMember(), JavaElementLabels.M_PARAMETER_TYPES)) : Messages.format(RefactoringMessages.PushDownInputPage_Mark_selected_members_plural, String
 						.valueOf(selectedMembers.length));
-				final Map stringMapping= createStringMappingForSelectedElements();
-				final String[] keys= (String[]) stringMapping.keySet().toArray(new String[stringMapping.keySet().size()]);
+				final Map<String, Integer> stringMapping= createStringMappingForSelectedElements();
+				final String[] keys= stringMapping.keySet().toArray(new String[stringMapping.keySet().size()]);
 				Arrays.sort(keys);
 				final int initialSelectionIndex= getInitialSelectionIndexForEditDialog(stringMapping, keys);
 
@@ -438,7 +443,7 @@ public final class PushDownWizard extends RefactoringWizard {
 				dialog.setBlockOnOpen(true);
 				if (dialog.open() == Window.CANCEL)
 					return;
-				final int action= ((Integer) stringMapping.get(dialog.getSelectedString())).intValue();
+				final int action= stringMapping.get(dialog.getSelectedString()).intValue();
 				setInfoAction(selectedMembers, action);
 			} finally {
 				updateWizardPage(preserved, true);
@@ -453,13 +458,13 @@ public final class PushDownWizard extends RefactoringWizard {
 
 		private MemberActionInfo[] getActiveInfos() {
 			final MemberActionInfo[] infos= fProcessor.getMemberActionInfos();
-			final List result= new ArrayList(infos.length);
+			final List<MemberActionInfo> result= new ArrayList<MemberActionInfo>(infos.length);
 			for (int index= 0; index < infos.length; index++) {
 				final MemberActionInfo info= infos[index];
 				if (info.isActive())
 					result.add(info);
 			}
-			return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+			return result.toArray(new MemberActionInfo[result.size()]);
 		}
 
 		private int getCommonActionCodeForSelectedInfos() {
@@ -475,13 +480,13 @@ public final class PushDownWizard extends RefactoringWizard {
 			return code;
 		}
 
-		private int getInitialSelectionIndexForEditDialog(final Map mapping, final String[] keys) {
+		private int getInitialSelectionIndexForEditDialog(final Map<String, Integer> mapping, final String[] keys) {
 			final int commonActionCode= getCommonActionCodeForSelectedInfos();
 			if (commonActionCode == -1)
 				return 0;
-			for (final Iterator iterator= mapping.keySet().iterator(); iterator.hasNext();) {
-				final String key= (String) iterator.next();
-				final int action= ((Integer) mapping.get(key)).intValue();
+			for (final Iterator<String> iterator= mapping.keySet().iterator(); iterator.hasNext();) {
+				final String key= iterator.next();
+				final int action= mapping.get(key).intValue();
 				if (commonActionCode == action) {
 					for (int index= 0; index < keys.length; index++) {
 						if (key.equals(keys[index]))
@@ -495,17 +500,17 @@ public final class PushDownWizard extends RefactoringWizard {
 
 		private IMember[] getMembers() {
 			final MemberActionInfo[] infos= (MemberActionInfo[]) fTableViewer.getInput();
-			final List result= new ArrayList(infos.length);
+			final List<IMember> result= new ArrayList<IMember>(infos.length);
 			for (int index= 0; index < infos.length; index++) {
 				result.add(infos[index].getMember());
 			}
-			return (IMember[]) result.toArray(new IMember[result.size()]);
+			return result.toArray(new IMember[result.size()]);
 		}
 
 		private MemberActionInfo[] getSelectedMemberActionInfos() {
 			Assert.isTrue(fTableViewer.getSelection() instanceof IStructuredSelection);
-			final List result= ((IStructuredSelection) fTableViewer.getSelection()).toList();
-			return (MemberActionInfo[]) result.toArray(new MemberActionInfo[result.size()]);
+			final List<?> result= ((IStructuredSelection) fTableViewer.getSelection()).toList();
+			return result.toArray(new MemberActionInfo[result.size()]);
 		}
 
 		public void markAdditionalRequiredMembersAsMembersToPushDown() {
@@ -564,6 +569,7 @@ public final class PushDownWizard extends RefactoringWizard {
 			fTableViewer.setColumnProperties(new String[] { MEMBER_PROPERTY, ACTION_PROPERTY});
 		}
 
+		@Override
 		public void setVisible(final boolean visible) {
 			super.setVisible(visible);
 			if (visible) {
@@ -611,6 +617,7 @@ public final class PushDownWizard extends RefactoringWizard {
 		setDefaultPageTitle(RefactoringMessages.PushDownWizard_defaultPageTitle);
 	}
 
+	@Override
 	protected void addUserInputPages() {
 		addPage(new PushDownInputPage(fProcessor));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java
index 0e985c4..feffacb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class QualifiedNameComponent extends Composite {
 		});
 	}
 
+	@Override
 	public void setEnabled(boolean enabled) {
 		super.setEnabled(enabled);
 		Control[] children= getChildren();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringAdapterFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringAdapterFactory.java
index b243140..c9eda2e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringAdapterFactory.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringAdapterFactory.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import org.eclipse.jdt.internal.corext.refactoring.changes.MultiStateCompilation
 
 public class RefactoringAdapterFactory implements IAdapterFactory {
 
-	private static final Class[] ADAPTER_LIST= new Class[] {
+	private static final Class<?>[] ADAPTER_LIST= new Class[] {
 		TextEditChangeNode.class
 	};
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ReferencesInBinaryStatusContextViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ReferencesInBinaryStatusContextViewer.java
index cd1d378..064fd5c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ReferencesInBinaryStatusContextViewer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ReferencesInBinaryStatusContextViewer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,24 +68,27 @@ import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
 public class ReferencesInBinaryStatusContextViewer implements IStatusContextViewer {
 
 	private static class ContentProvider extends StandardJavaElementContentProvider {
-		private Map fChildren= new HashMap();
-		private Set fRoots= new HashSet();
+		private Map<Object, Object> fChildren= new HashMap<Object, Object>();
+		private Set<Object> fRoots= new HashSet<Object>();
 
+		@Override
 		public Object[] getChildren(Object parentElement) {
 			Object children= fChildren.get(parentElement);
 			if (children == null) {
 				return new Object[0];
 			} else if (children instanceof Set) {
-				return ((Set) children).toArray();
+				return ((Set<?>) children).toArray();
 			} else {
 				return new Object[] { children };
 			}
 		}
 
+		@Override
 		public boolean hasChildren(Object element) {
 			return getChildren(element).length > 0;
 		}
 
+		@Override
 		public Object[] getElements(Object inputElement) {
 			return fRoots.toArray();
 		}
@@ -102,10 +105,12 @@ public class ReferencesInBinaryStatusContextViewer implements IStatusContextView
 					if (element.equals(oldChildren)) {
 						return;
 					} else if (oldChildren instanceof Set) {
-						((Set) oldChildren).add(element);
+						@SuppressWarnings("unchecked")
+						Set<Object> oldChildrenSet= (Set<Object>) oldChildren;
+						oldChildrenSet.add(element);
 						return;
 					} else if (oldChildren != null) {
-						Set newChildren= new HashSet(4);
+						Set<Object> newChildren= new HashSet<Object>(4);
 						newChildren.add(oldChildren);
 						newChildren.add(element);
 						fChildren.put(parent, newChildren);
@@ -134,9 +139,9 @@ public class ReferencesInBinaryStatusContextViewer implements IStatusContextView
 		ContentProvider contentProvider= new ContentProvider();
 
 		ReferencesInBinaryContext binariesContext= (ReferencesInBinaryContext) input;
-		List matches= binariesContext.getMatches();
-		for (Iterator iter= matches.iterator(); iter.hasNext();) {
-			SearchMatch match= (SearchMatch) iter.next();
+		List<SearchMatch> matches= binariesContext.getMatches();
+		for (Iterator<SearchMatch> iter= matches.iterator(); iter.hasNext();) {
+			SearchMatch match= iter.next();
 			Object element= match.getElement();
 			if (element != null)
 				contentProvider.add(element);
@@ -176,6 +181,7 @@ public class ReferencesInBinaryStatusContextViewer implements IStatusContextView
 		fTreeViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(labelProvider));
 		fTreeViewer.setComparator(new ViewerComparator() {
 			private Collator fCollator= Collator.getInstance();
+			@Override
 			public int compare(Viewer viewer, Object e1, Object e2) {
 				String l1= labelProvider.getText(e1);
 				String l2= labelProvider.getText(e2);
@@ -190,6 +196,7 @@ public class ReferencesInBinaryStatusContextViewer implements IStatusContextView
 		layoutData.widthHint= SWTUtil.getButtonWidthHint(fButton);
 		fButton.setLayoutData(layoutData);
 		fButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fillInSearchView();
 			}
@@ -242,14 +249,14 @@ public class ReferencesInBinaryStatusContextViewer implements IStatusContextView
 
 		public IStatus run(IProgressMonitor monitor) throws OperationCanceledException {
 			fResult.removeAll();
-			List matches= fContext.getMatches();
+			List<SearchMatch> matches= fContext.getMatches();
 
 			NewSearchResultCollector collector= new NewSearchResultCollector(fResult, false);
 			collector.beginReporting();
 
-			for (Iterator iter= matches.iterator(); iter.hasNext();) {
+			for (Iterator<SearchMatch> iter= matches.iterator(); iter.hasNext();) {
 				try {
-					collector.acceptSearchMatch((SearchMatch) iter.next());
+					collector.acceptSearchMatch(iter.next());
 				} catch (CoreException e) {
 					// ignore
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/TextInputWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/TextInputWizardPage.java
index db7c214..b207291 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/TextInputWizardPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/TextInputWizardPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -179,6 +179,7 @@ public abstract class TextInputWizardPage extends UserInputWizardPage{
 	/* (non-Javadoc)
 	 * Method declared in IDialogPage
 	 */
+	@Override
 	public void dispose() {
 		fTextField= null;
 	}
@@ -186,6 +187,7 @@ public abstract class TextInputWizardPage extends UserInputWizardPage{
 	/* (non-Javadoc)
 	 * Method declared in WizardPage
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		if (visible) {
 			textModified(getText());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UseSupertypeWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UseSupertypeWizard.java
index abb6f88..6ce66ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UseSupertypeWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UseSupertypeWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,6 +70,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 		setDefaultPageTitle(RefactoringMessages.UseSupertypeWizard_Use_Super_Type_Where_Possible);
 	}
 
+	@Override
 	protected void addUserInputPages(){
 		addPage(new UseSupertypeInputPage(fProcessor));
 	}
@@ -86,8 +87,8 @@ public class UseSupertypeWizard extends RefactoringWizard{
 				return getDirectSuperTypes((IType)element).toArray();
 			}
 
-			public Set/*<IType>*/ getDirectSuperTypes(IType type){
-				Set/*<IType>*/ result= new HashSet();
+			public Set<IType> getDirectSuperTypes(IType type){
+				Set<IType> result= new HashSet<IType>();
 				final IType superclass= fHierarchy.getSuperclass(type);
 				if (superclass != null) {
 					result.add(superclass);
@@ -136,7 +137,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 		private static final String REWRITE_INSTANCEOF= "rewriteInstanceOf";  //$NON-NLS-1$
 		public static final String PAGE_NAME= "UseSupertypeInputPage";//$NON-NLS-1$
 		private TreeViewer fTreeViewer;
-		private final Map fFileCount;  //IType -> Integer
+		private final Map<IType, Integer> fFileCount;  //IType -> Integer
 		private final static String MESSAGE= RefactoringMessages.UseSupertypeInputPage_Select_supertype;
 		private JavaElementLabelProvider fLabelProvider;
 		private IDialogSettings fSettings;
@@ -144,7 +145,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 
 		public UseSupertypeInputPage(UseSuperTypeProcessor processor) {
 			super(PAGE_NAME);
-			fFileCount= new HashMap(2);
+			fFileCount= new HashMap<IType, Integer>(2);
 			fProcessor= processor;
 			setMessage(MESSAGE);
 		}
@@ -182,6 +183,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 			checkbox.setLayoutData(new GridData());
 			checkbox.setSelection(getUseSupertypeProcessor().isInstanceOf());
 			checkbox.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getUseSupertypeProcessor().setInstanceOf(checkbox.getSelection());
 					fSettings.put(REWRITE_INSTANCEOF, checkbox.getSelection());
@@ -207,10 +209,12 @@ public class UseSupertypeWizard extends RefactoringWizard{
 			fTreeViewer.setContentProvider(new UseSupertypeContentProvider());
 			fTreeViewer.setComparator(new ViewerComparator() {
 
+				@Override
 				public boolean isSorterProperty(Object element, String property) {
 					return true;
 				}
 
+				@Override
 				public int compare(Viewer viewer, Object first, Object second) {
 					final IType type1= (IType)first;
 					final IType type2= (IType)second;
@@ -249,6 +253,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 				tree.setSelection(new TreeItem[] {items[0]});
 		}
 
+		@Override
 		public IWizardPage getNextPage() {
 			initializeRefactoring();
 			IWizardPage nextPage= super.getNextPage();
@@ -277,8 +282,8 @@ public class UseSupertypeWizard extends RefactoringWizard{
 
 		private int countFilesWithValue(int i) {
 			int count= 0;
-			for (Iterator iter= fFileCount.keySet().iterator(); iter.hasNext();) {
-				if (((Integer)fFileCount.get(iter.next())).intValue() == i)
+			for (Iterator<IType> iter= fFileCount.keySet().iterator(); iter.hasNext();) {
+				if (fFileCount.get(iter.next()).intValue() == i)
 					count++;
 			}
 			return count;
@@ -289,6 +294,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 			return (IType)ss.getFirstElement();
 		}
 
+		@Override
 		public boolean performFinish(){
 			initializeRefactoring();
 			boolean superFinish= super.performFinish();
@@ -307,6 +313,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 			getUseSupertypeProcessor().setSuperType((IType)ss.getFirstElement());
 		}
 
+		@Override
 		public void dispose() {
 			fTreeViewer= null;
 			fFileCount.clear();
@@ -315,15 +322,16 @@ public class UseSupertypeWizard extends RefactoringWizard{
 		}
 
 		private static class UseSupertypeLabelProvider extends JavaElementLabelProvider{
-			private final Map fFileCount;
-			private UseSupertypeLabelProvider(Map fileCount){
+			private final Map<IType, Integer> fFileCount;
+			private UseSupertypeLabelProvider(Map<IType, Integer> fileCount){
 				fFileCount= fileCount;
 			}
+			@Override
 			public String getText(Object element) {
 				String superText= super.getText(element);
 				if  (! fFileCount.containsKey(element))
 					return superText;
-				int count= ((Integer)fFileCount.get(element)).intValue();
+				int count= fFileCount.get(element).intValue();
 				if (count == 0){
 					String[] keys= {superText};
 					return Messages.format(RefactoringMessages.UseSupertypeInputPage_no_possible_updates, keys);
@@ -337,6 +345,7 @@ public class UseSupertypeWizard extends RefactoringWizard{
 			}
 		}
 
+		@Override
 		public void setVisible(boolean visible) {
 			super.setVisible(visible);
 			if (visible && fTreeViewer != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UserInterfaceManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UserInterfaceManager.java
index b62030f..a6a9e7b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UserInterfaceManager.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/UserInterfaceManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,18 +21,18 @@ import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
 
 public class UserInterfaceManager {
 
-	private Map fMap= new HashMap();
+	private Map<Class<? extends RefactoringProcessor>, Tuple> fMap= new HashMap<Class<? extends RefactoringProcessor>, Tuple>();
 
 	private static class Tuple {
-		private Class starter;
-		private Class wizard;
-		public Tuple(Class s, Class w) {
+		private Class<? extends UserInterfaceStarter> starter;
+		private Class<? extends RefactoringWizard> wizard;
+		public Tuple(Class<? extends UserInterfaceStarter> s, Class<? extends RefactoringWizard> w) {
 			starter= s;
 			wizard= w;
 		}
 	}
 
-	protected void put(Class processor, Class starter, Class wizard) {
+	protected void put(Class<? extends RefactoringProcessor> processor, Class<? extends UserInterfaceStarter> starter, Class<? extends RefactoringWizard> wizard) {
 		fMap.put(processor, new Tuple(starter, wizard));
 	}
 
@@ -41,14 +41,14 @@ public class UserInterfaceManager {
 		RefactoringProcessor processor= (RefactoringProcessor)refactoring.getAdapter(RefactoringProcessor.class);
 		if (processor == null)
 			return null;
-		Tuple tuple= (Tuple)fMap.get(processor.getClass());
+		Tuple tuple= fMap.get(processor.getClass());
 		if (tuple == null)
 			return null;
 		try {
-			UserInterfaceStarter starter= (UserInterfaceStarter)tuple.starter.newInstance();
-			Class wizardClass= tuple.wizard;
-			Constructor constructor= wizardClass.getConstructor(new Class[] {Refactoring.class});
-			RefactoringWizard wizard= (RefactoringWizard)constructor.newInstance(new Object[] {refactoring});
+			UserInterfaceStarter starter= tuple.starter.newInstance();
+			Class<? extends RefactoringWizard> wizardClass= tuple.wizard;
+			Constructor<? extends RefactoringWizard> constructor= wizardClass.getConstructor(new Class[] {Refactoring.class});
+			RefactoringWizard wizard= constructor.newInstance(new Object[] {refactoring});
 			starter.initialize(wizard);
 			return starter;
 		} catch (NoSuchMethodException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/VisibilityControlUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/VisibilityControlUtil.java
index c10811c..3485b26 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/VisibilityControlUtil.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/VisibilityControlUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ public class VisibilityControlUtil {
 	private VisibilityControlUtil(){}
 
 	public static Composite createVisibilityControl(Composite parent, final IVisibilityChangeListener visibilityChangeListener, int[] availableVisibilities, int correctVisibility) {
-		List allowedVisibilities= convertToIntegerList(availableVisibilities);
+		List<Integer> allowedVisibilities= convertToIntegerList(availableVisibilities);
 		if (allowedVisibilities.size() == 1)
 			return null;
 
@@ -61,6 +61,7 @@ public class VisibilityControlUtil {
 			radio.setSelection(visibilityCode.equals(initialVisibility));
 			radio.setEnabled(allowedVisibilities.contains(visibilityCode));
 			radio.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					visibilityChangeListener.visibilityChanged(((Integer)event.widget.getData()).intValue());
 				}
@@ -70,8 +71,8 @@ public class VisibilityControlUtil {
 		return group;
 	}
 
-	private static List convertToIntegerList(int[] array) {
-		List result= new ArrayList(array.length);
+	private static List<Integer> convertToIntegerList(int[] array) {
+		List<Integer> result= new ArrayList<Integer>(array.length);
 		for (int i= 0; i < array.length; i++) {
 			result.add(new Integer(array[i]));
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineConstantAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineConstantAction.java
index ecf5dfa..1b6efd1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineConstantAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineConstantAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ public class InlineConstantAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isInlineConstantAvailable(selection));
@@ -91,6 +92,7 @@ public class InlineConstantAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			Assert.isTrue(RefactoringAvailabilityTester.isInlineConstantAvailable(selection));
@@ -110,6 +112,7 @@ public class InlineConstantAction extends SelectionDispatchAction {
     /*
      * @see SelectionDispatchAction#selectionChanged(ITextSelection)
      */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
     }
@@ -118,6 +121,7 @@ public class InlineConstantAction extends SelectionDispatchAction {
 	 * Note: This method is for internal use only. Clients should not call this method.
 	 * @param selection
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isInlineConstantAvailable(selection));
@@ -129,6 +133,7 @@ public class InlineConstantAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		run(selection.getOffset(), selection.getLength(), SelectionConverter.getInputAsCompilationUnit(fEditor));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineMethodAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineMethodAction.java
index 697819d..bf4c379 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineMethodAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/InlineMethodAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ public class InlineMethodAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isInlineMethodAvailable(selection));
@@ -89,6 +90,7 @@ public class InlineMethodAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			Assert.isTrue(RefactoringAvailabilityTester.isInlineMethodAvailable(selection));
@@ -103,6 +105,7 @@ public class InlineMethodAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -110,6 +113,7 @@ public class InlineMethodAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jdt.internal.ui.javaeditor.JavaTextSelection)
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isInlineMethodAvailable(selection));
@@ -121,6 +125,7 @@ public class InlineMethodAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		ITypeRoot typeRoot= SelectionConverter.getInput(fEditor);
 		if (typeRoot == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveInstanceMethodAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveInstanceMethodAction.java
index d1b7e0d..eff0927 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveInstanceMethodAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveInstanceMethodAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ public final class MoveInstanceMethodAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isMoveMethodAvailable(selection));
@@ -75,6 +76,7 @@ public final class MoveInstanceMethodAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
     }
@@ -82,6 +84,7 @@ public final class MoveInstanceMethodAction extends SelectionDispatchAction {
 	/**
 	 * Note: This method is for internal use only. Clients should not call this method.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isMoveMethodAvailable(selection));
@@ -102,6 +105,7 @@ public final class MoveInstanceMethodAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			Assert.isTrue(RefactoringAvailabilityTester.isMoveMethodAvailable(selection));
@@ -118,6 +122,7 @@ public final class MoveInstanceMethodAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			run(selection, SelectionConverter.getInputAsCompilationUnit(fEditor));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java
index 3c27721..c2e8511 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.jdt.internal.ui.refactoring.actions;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -58,6 +59,7 @@ public class MoveStaticMembersAction extends SelectionDispatchAction{
 		setEnabled(SelectionConverter.canOperateOn(fEditor));
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isMoveStaticMembersAvailable(getSelectedMembers(selection)));
@@ -69,6 +71,7 @@ public class MoveStaticMembersAction extends SelectionDispatchAction{
 		}
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -76,6 +79,7 @@ public class MoveStaticMembersAction extends SelectionDispatchAction{
 	/**
 	 * Note: This method is for internal use only. Clients should not call this method.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isMoveStaticAvailable(selection));
@@ -84,6 +88,7 @@ public class MoveStaticMembersAction extends SelectionDispatchAction{
 		}
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IMember[] members= getSelectedMembers(selection);
@@ -98,6 +103,7 @@ public class MoveStaticMembersAction extends SelectionDispatchAction{
 		}
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			IMember member= getSelectedMemberFromEditor();
@@ -118,13 +124,15 @@ public class MoveStaticMembersAction extends SelectionDispatchAction{
 		if (selection.isEmpty())
 			return null;
 
-		for  (final Iterator iterator= selection.iterator(); iterator.hasNext(); ) {
+		for  (final Iterator<?> iterator= selection.iterator(); iterator.hasNext(); ) {
 			if (! (iterator.next() instanceof IMember))
 				return null;
 		}
-		Set memberSet= new HashSet();
-		memberSet.addAll(Arrays.asList(selection.toArray()));
-		return (IMember[]) memberSet.toArray(new IMember[memberSet.size()]);
+		Set<IMember> memberSet= new HashSet<IMember>();
+		@SuppressWarnings("unchecked")
+		List<IMember> selectionList= (List<IMember>) (List<?>) Arrays.asList(selection.toArray());
+		memberSet.addAll(selectionList);
+		return memberSet.toArray(new IMember[memberSet.size()]);
 	}
 
 	private IMember getSelectedMemberFromEditor() throws JavaModelException{
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java
index bca5865..2ef39fb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class RenameJavaElementAction extends SelectionDispatchAction {
 
 	//---- Structured selection ------------------------------------------------
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			if (selection.size() == 1) {
@@ -93,10 +94,13 @@ public class RenameJavaElementAction extends SelectionDispatchAction {
 		return (IJavaElement)first;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		IJavaElement element= getJavaElement(selection);
 		if (element == null)
 			return;
+		if (!ActionUtil.isEditable(getShell(), element))
+			return;
 		try {
 			run(element, false);
 		} catch (CoreException e){
@@ -106,6 +110,7 @@ public class RenameJavaElementAction extends SelectionDispatchAction {
 
 	//---- text selection ------------------------------------------------------------
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		if (selection instanceof JavaTextSelection) {
 			try {
@@ -125,8 +130,14 @@ public class RenameJavaElementAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
-		doRun();
+		if (!ActionUtil.isEditable(fEditor))
+			return;
+		if (canRunInEditor())
+			doRun();
+		else
+			MessageDialog.openInformation(getShell(), RefactoringMessages.RenameAction_rename, RefactoringMessages.RenameAction_unavailable);
 	}
 
 	public void doRun() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameResourceAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameResourceAction.java
index bd6f177..338166e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameResourceAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameResourceAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public class RenameResourceAction extends SelectionDispatchAction {
 		super(site);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		IResource element= getResource(selection);
 		if (element == null)
@@ -36,6 +37,7 @@ public class RenameResourceAction extends SelectionDispatchAction {
 			setEnabled(RefactoringAvailabilityTester.isRenameAvailable(element));
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		IResource resource = getResource(selection);
 		if (!RefactoringAvailabilityTester.isRenameAvailable(resource))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java
index 453cddf..f794e7b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,9 +98,9 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	 * @param path
 	 *            the path
 	 */
-	private static void addExclusionPatterns(final List entries, final IPath path) {
+	private static void addExclusionPatterns(final List<IClasspathEntry> entries, final IPath path) {
 		for (int index= 0; index < entries.size(); index++) {
-			final IClasspathEntry entry= (IClasspathEntry) entries.get(index);
+			final IClasspathEntry entry= entries.get(index);
 			if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE && entry.getPath().isPrefixOf(path)) {
 				final IPath[] patterns= entry.getExclusionPatterns();
 				if (!JavaModelUtil.isExcludedPath(path, patterns)) {
@@ -195,7 +195,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 			monitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, 200);
 			final IClasspathEntry entry= root.getRawClasspathEntry();
 			final IClasspathEntry[] entries= project.getRawClasspath();
-			final List list= new ArrayList();
+			final List<IClasspathEntry> list= new ArrayList<IClasspathEntry>();
 			list.addAll(Arrays.asList(entries));
 			final IFileStore store= EFS.getLocalFileSystem().getStore(JavaPlugin.getDefault().getStateLocation().append(STUB_FOLDER).append(project.getElementName()));
 			if (store.fetchInfo(EFS.NONE, new SubProgressMonitor(monitor, 25, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)).exists())
@@ -207,7 +207,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 				if (entries[index].equals(entry))
 					list.add(index, JavaCore.newSourceEntry(folder.getFullPath()));
 			}
-			project.setRawClasspath((IClasspathEntry[]) list.toArray(new IClasspathEntry[list.size()]), false, new SubProgressMonitor(monitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
+			project.setRawClasspath(list.toArray(new IClasspathEntry[list.size()]), false, new SubProgressMonitor(monitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
 		} finally {
 			monitor.done();
 		}
@@ -248,7 +248,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	 * The packages which already have been processed (element type:
 	 * <IPackageFragment>)
 	 */
-	private final Collection fProcessedFragments= new HashSet();
+	private final Collection<IJavaElement> fProcessedFragments= new HashSet<IJavaElement>();
 
 	/** The temporary source folder, or <code>null</code> */
 	private IFolder fSourceFolder= null;
@@ -287,6 +287,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected RefactoringStatus aboutToPerformHistory(final IProgressMonitor monitor) {
 		final RefactoringStatus status= new RefactoringStatus();
 		try {
@@ -337,6 +338,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected RefactoringStatus aboutToPerformRefactoring(final Refactoring refactoring, final RefactoringDescriptor descriptor, final IProgressMonitor monitor) {
 		final RefactoringStatus status= new RefactoringStatus();
 		try {
@@ -413,13 +415,13 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 				try {
 					final SubProgressMonitor subMonitor= new SubProgressMonitor(monitor, 40, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
 					final IJavaElement[] elements= root.getChildren();
-					final List list= new ArrayList(elements.length);
+					final List<IPackageFragment> list= new ArrayList<IPackageFragment>(elements.length);
 					try {
 						subMonitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, elements.length);
 						for (int index= 0; index < elements.length; index++) {
 							final IJavaElement element= elements[index];
 							if (!fProcessedFragments.contains(element) && !element.getElementName().equals(META_INF_FRAGMENT))
-								list.add(element);
+								list.add((IPackageFragment) element);
 							subMonitor.worked(1);
 						}
 					} finally {
@@ -436,10 +438,12 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 
 									private IPackageFragment fFragment= null;
 
+									@Override
 									protected final void createCompilationUnit(final IFileStore store, final String name, final String content, final IProgressMonitor pm) throws CoreException {
 										fFragment.createCompilationUnit(name, content, true, pm);
 									}
 
+									@Override
 									protected final void createPackageFragment(final IFileStore store, final String name, final IProgressMonitor pm) throws CoreException {
 										fFragment= sourceFolder.createPackageFragment(name, true, pm);
 									}
@@ -449,10 +453,12 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 
 									private IPackageFragment fFragment= null;
 
+									@Override
 									protected final void createCompilationUnit(final IFileStore store, final String name, final String content, final IProgressMonitor pm) throws CoreException {
 										fFragment.createCompilationUnit(name, content, true, pm);
 									}
 
+									@Override
 									protected final void createPackageFragment(final IFileStore store, final String name, final IProgressMonitor pm) throws CoreException {
 										fFragment= sourceFolder.createPackageFragment(name, true, pm);
 									}
@@ -478,6 +484,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Refactoring createRefactoring(RefactoringDescriptor descriptor, RefactoringStatus status, IProgressMonitor monitor) throws CoreException {
 		Assert.isNotNull(descriptor);
 
@@ -487,7 +494,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 			JavaRefactoringDescriptor javaDescriptor= (JavaRefactoringDescriptor) descriptor;
 			RefactoringContribution contribution= RefactoringCore.getRefactoringContribution(javaDescriptor.getID());
 
-			Map map= contribution.retrieveArgumentMap(descriptor);
+			Map<String, String> map= contribution.retrieveArgumentMap(descriptor);
 			if (fJavaProject == null) {
 				status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.InitializableRefactoring_inacceptable_arguments));
 				return null;
@@ -495,13 +502,13 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 
 			String name= fJavaProject.getElementName();
 
-			String handle= (String) map.get(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT);
+			String handle= map.get(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT);
 			if (handle != null && handle.length() > 0)
 				map.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT, getTransformedHandle(name, handle));
 
 			int count= 1;
 			String attribute= JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count;
-			while ((handle= (String) map.get(attribute)) != null) {
+			while ((handle= map.get(attribute)) != null) {
 				if (handle.length() > 0)
 					map.put(attribute, getTransformedHandle(name, handle));
 				count++;
@@ -632,6 +639,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected RefactoringStatus historyPerformed(final IProgressMonitor monitor) {
 		try {
 			monitor.beginTask(JarImportMessages.JarImportWizard_cleanup_import, 100);
@@ -658,6 +666,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performCancel() {
 		fCancelled= true;
 		return super.performCancel();
@@ -666,6 +675,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected RefactoringStatus refactoringPerformed(final Refactoring refactoring, final IProgressMonitor monitor) {
 		try {
 			monitor.beginTask("", 120); //$NON-NLS-1$
@@ -688,6 +698,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean selectPreviewChange(final Change change) {
 		if (fSourceFolder != null) {
 			final IPath source= fSourceFolder.getFullPath();
@@ -705,6 +716,7 @@ public abstract class BinaryRefactoringHistoryWizard extends RefactoringHistoryW
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean selectStatusEntry(final RefactoringStatusEntry entry) {
 		if (fSourceFolder != null) {
 			final IPath source= fSourceFolder.getFullPath();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java
index f4cd8b9..fcef9fb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,6 +129,7 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 			combo.select(0);
 			combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			combo.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fRefactoring.setDestination(combo.getSelectionIndex());
 					updatePreview(getText());
@@ -160,6 +161,7 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 			if (data[i].equals(visibility))
 				radio.setSelection(true);
 			radio.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					final Integer selectedModifier= (Integer)event.widget.getData();
 					fSettings.put(ACCESS_MODIFIER, selectedModifier.intValue());
@@ -193,6 +195,7 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 		checkBox.setText(RefactoringMessages.ExtractMethodInputPage_throwRuntimeExceptions);
 		checkBox.setSelection(fSettings.getBoolean(THROW_RUNTIME_EXCEPTIONS));
 		checkBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				setRethrowRuntimeException(((Button)e.widget).getSelection());
 			}
@@ -205,6 +208,7 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 		setGenerateJavadoc(generate);
 		checkBox.setSelection(generate);
 		checkBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				setGenerateJavadoc(((Button)e.widget).getSelection());
 			}
@@ -225,6 +229,7 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 		checkBox.setSelection(fRefactoring.getReplaceDuplicates());
 		checkBox.setEnabled(duplicates > 0);
 		checkBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fRefactoring.setReplaceDuplicates(((Button)e.widget).getSelection());
 			}
@@ -311,7 +316,7 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 		fSignaturePreview= new JavaSourceViewer(composite, null, null, false, SWT.READ_ONLY | SWT.V_SCROLL | SWT.WRAP /*| SWT.BORDER*/, store);
 		fSignaturePreview.configure(new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), store, null, null));
 		fSignaturePreview.getTextWidget().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
-		fSignaturePreview.getTextWidget().setBackground(composite.getBackground());
+		fSignaturePreview.adaptBackgroundColor(composite);
 		fSignaturePreview.setDocument(fSignaturePreviewDocument);
 		fSignaturePreview.setEditable(false);
 
@@ -360,6 +365,7 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 
 	//---- Input validation ------------------------------------------------------
 
+	@Override
 	public void setVisible(boolean visible) {
 		if (visible) {
 			if (fFirstTime) {
@@ -415,9 +421,9 @@ public class ExtractMethodInputPage extends UserInputWizardPage {
 
 	private RefactoringStatus validateParameters() {
 		RefactoringStatus result= new RefactoringStatus();
-		List parameters= fRefactoring.getParameterInfos();
-		for (Iterator iter= parameters.iterator(); iter.hasNext();) {
-			ParameterInfo info= (ParameterInfo) iter.next();
+		List<ParameterInfo> parameters= fRefactoring.getParameterInfos();
+		for (Iterator<ParameterInfo> iter= parameters.iterator(); iter.hasNext();) {
+			ParameterInfo info= iter.next();
 			if ("".equals(info.getNewName())) { //$NON-NLS-1$
 				result.addFatalError(RefactoringMessages.ExtractMethodInputPage_validation_emptyParameterName);
 				return result;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodWizard.java
index 345e77a..5724880 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class ExtractMethodWizard extends RefactoringWizard {
 		}
 	}
 
+	@Override
 	protected void addUserInputPages(){
 		addPage(new ExtractMethodInputPage());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java
index fc48af9..99fe710 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,6 +75,7 @@ public class InlineMethodInputPage extends UserInputWizardPage {
 		radioAll.setText(RefactoringMessages.InlineMethodInputPage_all_invocations);
 		radioAll.setSelection(all);
 		radioAll.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				fRemove.setEnabled(fRefactoring.canEnableDeleteSource());
 				if (((Button)event.widget).getSelection())
@@ -91,6 +92,7 @@ public class InlineMethodInputPage extends UserInputWizardPage {
 		fRemove.setSelection(fRefactoring.canEnableDeleteSource());
 		fRefactoring.setDeleteSource(fRefactoring.canEnableDeleteSource());
 		fRemove.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fRefactoring.setDeleteSource(((Button)e.widget).getSelection());
 			}
@@ -108,6 +110,7 @@ public class InlineMethodInputPage extends UserInputWizardPage {
 			radioSelected.setFocus();
 		}
 		radioSelected.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				fRemove.setEnabled(false);
 				if (((Button)event.widget).getSelection())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodWizard.java
index eda4432..9e78ea3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ public class InlineMethodWizard extends RefactoringWizard {
 		setDialogSettings(JavaPlugin.getDefault().getDialogSettings());
 	}
 
+	@Override
 	protected void addUserInputPages(){
 		addPage(new InlineMethodInputPage());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsInputPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsInputPage.java
index 75541c3..03338dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsInputPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsInputPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,6 +85,7 @@ public class ReplaceInvocationsInputPage extends UserInputWizardPage {
 		replaceAll.setEnabled(false); // does not work for now...
 		replaceAll.setSelection(! canSingle);
 		replaceAll.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				boolean all= ((Button) event.widget).getSelection();
 				changeMode(all ? ReplaceInvocationsRefactoring.Mode.REPLACE_ALL : ReplaceInvocationsRefactoring.Mode.REPLACE_SINGLE);
@@ -99,7 +100,7 @@ public class ReplaceInvocationsInputPage extends UserInputWizardPage {
 		JavaSourceViewer signatureViewer= new JavaSourceViewer(parent, null, null, false, SWT.READ_ONLY | SWT.WRAP /*| SWT.BORDER*/, store);
 		signatureViewer.configure(new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), store, null, null));
 		signatureViewer.getTextWidget().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
-		signatureViewer.getTextWidget().setBackground(parent.getBackground());
+		signatureViewer.adaptBackgroundColor(parent);
 		String signatureLabel= JavaElementLabels.getElementLabel(fRefactoring.getMethod(), LABEL_FLAGS);
 		signatureViewer.setDocument(new Document(signatureLabel));
 		signatureViewer.setEditable(false);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsWizard.java
index cef39aa..fd4d6c4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ReplaceInvocationsWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ public class ReplaceInvocationsWizard extends RefactoringWizard {
 		setDefaultPageTitle(RefactoringMessages.ReplaceInvocationsWizard_title);
 	}
 
+	@Override
 	protected void addUserInputPages(){
 		addPage(new ReplaceInvocationsInputPage());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/CUPositionCompletionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/CUPositionCompletionProcessor.java
index 3c84ae6..89fe463 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/CUPositionCompletionProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/CUPositionCompletionProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class CUPositionCompletionProcessor implements IContentAssistProcessor, I
 	public void setCompletionContext(final ICompilationUnit cuHandle, final String beforeString, final String afterString) {
 		fCompletionContextRequestor= new CompletionContextRequestor() {
 			final StubTypeContext fStubTypeContext= new StubTypeContext(cuHandle, beforeString, afterString);
+			@Override
 			public StubTypeContext getStubTypeContext() {
 				return fStubTypeContext;
 			}
@@ -211,20 +212,21 @@ public class CUPositionCompletionProcessor implements IContentAssistProcessor, I
 
 		private int fOffsetReduction;
 
-		private List fProposals;
+		private List<JavaCompletionProposal> fProposals;
 		private String fErrorMessage2;
 
 		private void setOffsetReduction(int offsetReduction) {
 			fOffsetReduction= offsetReduction;
-			fProposals= new ArrayList();
+			fProposals= new ArrayList<JavaCompletionProposal>();
 		}
 
+		@Override
 		public final void completionFailure(IProblem error) {
 			fErrorMessage2= error.getMessage();
 		}
 
 		public final JavaCompletionProposal[] getResults() {
-			return (JavaCompletionProposal[]) fProposals.toArray(new JavaCompletionProposal[fProposals.size()]);
+			return fProposals.toArray(new JavaCompletionProposal[fProposals.size()]);
 		}
 
 		public final String getErrorMessage() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java
index 4bc10bb..2104192 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,7 +108,7 @@ public class FieldNameProcessor implements IContentAssistProcessor, ISubjectCont
 			return null;
 		String input= contentAssistSubject.getDocument().get();
 
-		ArrayList proposals= new ArrayList();
+		ArrayList<JavaCompletionProposal> proposals= new ArrayList<JavaCompletionProposal>();
 		String prefix= input.substring(0, documentOffset);
 		ImageDescriptor imageDescriptor= JavaElementImageProvider.getFieldImageDescriptor(false, fRefactoring.getVisibility());
 		Image image= fImageRegistry.get(imageDescriptor);
@@ -120,7 +120,7 @@ public class FieldNameProcessor implements IContentAssistProcessor, ISubjectCont
 			proposals.add(proposal);
 		}
 		fErrorMessage= proposals.size() > 0 ? null : JavaUIMessages.JavaEditor_codeassist_noCompletions;
-		return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+		return proposals.toArray(new ICompletionProposal[proposals.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java
index 6dea53c..6fd288a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -140,7 +140,7 @@ public class JavaPackageCompletionProcessor implements IContentAssistProcessor,
 	}
 
 	private ICompletionProposal[] createPackagesProposals(int documentOffset, String input) {
-		ArrayList proposals= new ArrayList();
+		ArrayList<JavaCompletionProposal> proposals= new ArrayList<JavaCompletionProposal>();
 		String prefix= input.substring(0, documentOffset);
 		try {
 			IJavaElement[] packageFragments= fPackageFragmentRoot.getChildren();
@@ -156,6 +156,6 @@ public class JavaPackageCompletionProcessor implements IContentAssistProcessor,
 		} catch (JavaModelException e) {
 			//fPackageFragmentRoot is not a proper root -> no proposals
 		}
-		return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+		return proposals.toArray(new ICompletionProposal[proposals.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java
index 18d9701..f430675 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -131,7 +131,7 @@ public class JavaPackageFragmentRootCompletionProcessor implements IContentAssis
 	}
 
 	private ICompletionProposal[] createPackagesProposals(int documentOffset, String input) {
-		ArrayList proposals= new ArrayList();
+		ArrayList<JavaCompletionProposal> proposals= new ArrayList<JavaCompletionProposal>();
 		String prefix= input.substring(0, documentOffset);
 		try {
 			IJavaElement[] packageFragments= fPackageFragmentRoot.getChildren();
@@ -147,7 +147,7 @@ public class JavaPackageFragmentRootCompletionProcessor implements IContentAssis
 		} catch (JavaModelException e) {
 			JavaPlugin.log(e);
 		}
-		return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+		return proposals.toArray(new ICompletionProposal[proposals.size()]);
 	}
 
 	private static Image getImage(ImageDescriptor descriptor) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java
index 1e523cf..8492964 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,7 +108,7 @@ public class JavaSourcePackageFragmentRootCompletionProcessor implements IConten
 	 * @return array with sourcepackagefragmentroots
 	 */
 	private ICompletionProposal[] createSourcePackageFragmentRootProposals(String prefix, int replacementLength) {
-		List proposals= new ArrayList();
+		List<JavaCompletionProposal> proposals= new ArrayList<JavaCompletionProposal>();
 		try {
 			IJavaProject[] projects= fRoot.getJavaProjects();
 			for (int i= 0; i < projects.length; i++) {
@@ -134,7 +134,7 @@ public class JavaSourcePackageFragmentRootCompletionProcessor implements IConten
 			// nothing to do
 		}
 
-		return (ICompletionProposal[])proposals.toArray(new ICompletionProposal[proposals.size()]);
+		return proposals.toArray(new ICompletionProposal[proposals.size()]);
 	}
 
 	public IContextInformation[] computeContextInformation(IContentAssistSubjectControl contentAssistSubject, int documentOffset) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaTypeCompletionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaTypeCompletionProcessor.java
index a0872e5..c04fb13 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaTypeCompletionProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaTypeCompletionProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ public class JavaTypeCompletionProcessor extends CUPositionCompletionProcessor {
 		super(new TypeCompletionRequestor(enableBaseTypes, enableVoid, fullyQualify));
 	}
 
+	@Override
 	public char[] getCompletionProposalAutoActivationCharacters() {
 		// disable auto activation in dialog fields, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=89476
 		return null;
@@ -116,7 +117,7 @@ public class JavaTypeCompletionProcessor extends CUPositionCompletionProcessor {
 
 	protected static class TypeCompletionRequestor extends CUPositionCompletionRequestor {
 		private static final String VOID= "void"; //$NON-NLS-1$
-		private static final List BASE_TYPES= Arrays.asList(
+		private static final List<String> BASE_TYPES= Arrays.asList(
 			new String[] {"boolean", "byte", "char", "double", "float", "int", "long", "short"});  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
 
 		private boolean fEnableBaseTypes;
@@ -142,6 +143,7 @@ public class JavaTypeCompletionProcessor extends CUPositionCompletionProcessor {
 			setIgnored(CompletionProposal.METHOD_NAME_REFERENCE, true);
 		}
 
+		@Override
 		public void accept(CompletionProposal proposal) {
 			switch (proposal.getKind()) {
 				case CompletionProposal.PACKAGE_REF :
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java
index 895afda..d7713ee 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,7 +44,7 @@ public class VariableNamesProcessor implements IContentAssistProcessor, ISubject
 	private ImageDescriptor fProposalImageDescriptor;
 
 	public VariableNamesProcessor(String[] tempNameProposals) {
-		fTempNameProposals= (String[]) tempNameProposals.clone();
+		fTempNameProposals= tempNameProposals.clone();
 		Arrays.sort(fTempNameProposals);
 		fImageRegistry= JavaPlugin.getImageDescriptorRegistry();
 		fProposalImageDescriptor= JavaPluginImages.DESC_OBJS_LOCAL_VARIABLE;
@@ -114,7 +114,7 @@ public class VariableNamesProcessor implements IContentAssistProcessor, ISubject
 			return null;
 		String input= contentAssistSubject.getDocument().get();
 
-		ArrayList proposals= new ArrayList();
+		ArrayList<JavaCompletionProposal> proposals= new ArrayList<JavaCompletionProposal>();
 		String prefix= input.substring(0, documentOffset);
 		Image image= fImageRegistry.get(fProposalImageDescriptor);
 		for (int i= 0; i < fTempNameProposals.length; i++) {
@@ -125,7 +125,7 @@ public class VariableNamesProcessor implements IContentAssistProcessor, ISubject
 			proposals.add(proposal);
 		}
 		fErrorMessage= proposals.size() > 0 ? null : JavaUIMessages.JavaEditor_codeassist_noCompletions;
-		return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+		return proposals.toArray(new ICompletionProposal[proposals.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/AccessorDescription.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/AccessorDescription.java
index a034665..b1e3cbe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/AccessorDescription.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/AccessorDescription.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,6 +95,7 @@ public class AccessorDescription {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (obj != null && obj.getClass().equals(getClass())) {
 			AccessorDescription other= (AccessorDescription) obj;
@@ -110,6 +111,7 @@ public class AccessorDescription {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fAccessorClassName.hashCode() + fAccessorClassPackage.hashCode() + fResourceBundleName.hashCode() + fResourceBundlePackage.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizard.java
index 08c3d53..215aa8b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class ExternalizeWizard extends RefactoringWizard {
 	/**
 	 * @see RefactoringWizard#addUserInputPages()
 	 */
+	@Override
 	protected void addUserInputPages() {
 
 		NLSRefactoring nlsRefac= (NLSRefactoring) getRefactoring();
@@ -58,6 +59,7 @@ public class ExternalizeWizard extends RefactoringWizard {
 		 addPage(page2);*/
 	}
 
+	@Override
 	public boolean canFinish() {
 		IWizardPage page= getContainer().getCurrentPage();
 		return super.canFinish() && !(page instanceof ExternalizeWizardPage);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java
index ff5fc0c..1e83e7a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Widget;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 
 import org.eclipse.core.resources.IFile;
@@ -107,6 +108,7 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer;
+import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileEscapes;
 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
@@ -174,7 +176,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 					return new Integer(substitution.getState());
 				}
 				if (res != null) {
-					return unwindEscapeChars(res);
+					return getEscapedAsciiString(res);
 				}
 				return ""; //$NON-NLS-1$
 			}
@@ -191,12 +193,22 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 					NLSSubstitution substitution= (NLSSubstitution) data;
 					if (PROPERTIES[KEY_PROP].equals(property)) {
 						String string = (String)value;
-						string = windEscapeChars(string);
+						try {
+							string= PropertiesFileEscapes.unescape(string);
+						} catch (CoreException e) {
+							setPageComplete(RefactoringStatus.create(e.getStatus()));
+							return;
+						}
 						substitution.setKey(string);
 					}
 					if (PROPERTIES[VAL_PROP].equals(property)) {
 						String string = (String)value;
-						string = windEscapeChars(string);
+						try {
+							string= PropertiesFileEscapes.unescape(string);
+						} catch (CoreException e) {
+							setPageComplete(RefactoringStatus.create(e.getStatus()));
+							return;
+						}
 						substitution.setValue(string);
 					}
 					if (PROPERTIES[STATE_PROP].equals(property)) {
@@ -233,7 +245,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 						columnText= substitution.getValue();
 					}
 			}
-			return unwindEscapeChars(columnText);
+			return getEscapedAsciiString(columnText);
 		}
 
 		public Image getColumnImage(Object element, int columnIndex) {
@@ -297,94 +309,37 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 		}
 	}
 
-	private static String unwindEscapeChars(String s) {
+	private static String getEscapedAsciiString(String s) {
 		if (s != null) {
 			StringBuffer sb= new StringBuffer(s.length());
 			int length= s.length();
 			for (int i= 0; i < length; i++) {
 				char c= s.charAt(i);
-				sb.append(getUnwoundString(c));
+				sb.append(getEscapedAsciiString(c));
 			}
 			return sb.toString();
 		}
 		return null;
 	}
 
-	private static String getUnwoundString(char c) {
+	private static String getEscapedAsciiString(char c) {
 		switch (c) {
-			case '\b' :
+			case '\b':
 				return "\\b";//$NON-NLS-1$
-			case '\t' :
+			case '\t':
 				return "\\t";//$NON-NLS-1$
-			case '\n' :
+			case '\n':
 				return "\\n";//$NON-NLS-1$
-			case '\f' :
+			case '\f':
 				return "\\f";//$NON-NLS-1$
-			case '\r' :
+			case '\r':
 				return "\\r";//$NON-NLS-1$
-			case '\\' :
+			case '\\':
 				return "\\\\";//$NON-NLS-1$
 		}
 		return String.valueOf(c);
 	}
 
-	private static String windEscapeChars(String s) {
-		if (s == null)
-			return null;
-
-		char aChar;
-		int len= s.length();
-		StringBuffer outBuffer= new StringBuffer(len);
-
-		for (int x= 0; x < len;) {
-			aChar= s.charAt(x++);
-			if (aChar == '\\') {
-				aChar= s.charAt(x++);
-				if (aChar == 'u') {
-					// Read the xxxx
-					int value= 0;
-					for (int i= 0; i < 4; i++) {
-						aChar= s.charAt(x++);
-						switch (aChar) {
-							case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
-								value= (value << 4) + aChar - '0';
-								break;
-							case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-								value= (value << 4) + 10 + aChar - 'a';
-								break;
-							case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-								value= (value << 4) + 10 + aChar - 'A';
-								break;
-							default:
-								throw new IllegalArgumentException("Malformed \\uxxxx encoding."); //$NON-NLS-1$
-						}
-					}
-					outBuffer.append((char) value);
-				} else {
-					if (aChar == 't') {
-						outBuffer.append('\t');
-					} else {
-						if (aChar == 'r') {
-							outBuffer.append('\r');
-						} else {
-							if (aChar == 'n') {
-								outBuffer.append('\n');
-							} else {
-								if (aChar == 'f') {
-									outBuffer.append('\f');
-								} else {
-									outBuffer.append(aChar);
-								}
-							}
-						}
-					}
-				}
-			} else
-				outBuffer.append(aChar);
-		}
-		return outBuffer.toString();
-	}
-
 	private class NLSInputDialog extends StatusDialog implements IDialogFieldListener {
 		private StringDialogField fKeyField;
 		private StringDialogField fValueField;
@@ -427,6 +382,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 			return res;
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -589,6 +545,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 
 
 		SelectionListener listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (e.widget instanceof Button) {
 					doConfigureButtonPressed();
@@ -657,8 +614,8 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 				fNLSRefactoring.getResourceBundleName(),
 				fNLSRefactoring.getResourceBundlePackage());
 
-		ArrayList currChoices= new ArrayList();
-		ArrayList currLabels= new ArrayList();
+		ArrayList<AccessorDescription> currChoices= new ArrayList<AccessorDescription>();
+		ArrayList<String> currLabels= new ArrayList<String>();
 
 		currChoices.add(configured);
 		currLabels.add(configured.getLabel());
@@ -676,8 +633,8 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 			}
 		}
 
-		String[] labels= (String[]) currLabels.toArray(new String[currLabels.size()]);
-		fAccessorChoices= (AccessorDescription[]) currChoices.toArray(new AccessorDescription[currChoices.size()]);
+		String[] labels= currLabels.toArray(new String[currLabels.size()]);
+		fAccessorChoices= currChoices.toArray(new AccessorDescription[currChoices.size()]);
 
 		fAccessorClassField.setItems(labels);
 		fAccessorClassField.select(0);
@@ -689,7 +646,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 		if (section == null) {
 			return new AccessorDescription[0];
 		}
-		ArrayList res= new ArrayList();
+		ArrayList<AccessorDescription> res= new ArrayList<AccessorDescription>();
 		for (int i= 0; i < SETTINGS_MAX_ENTRIES; i++) {
 			IDialogSettings serializedDesc= section.getSection(String.valueOf(i));
 			if (serializedDesc != null) {
@@ -699,7 +656,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 				}
 			}
 		}
-		return (AccessorDescription[]) res.toArray(new AccessorDescription[res.size()]);
+		return res.toArray(new AccessorDescription[res.size()]);
 	}
 
 
@@ -757,15 +714,17 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 		 * behavior.
 		 */
 		fTableViewer= new TableViewer(fTable) {
+			@Override
 			protected void hookControl(Control control) {
 				super.hookControl(control);
 				((Table) control).addMouseListener(new MouseAdapter() {
+					@Override
 					public void mouseDoubleClick(MouseEvent e) {
 						if (getTable().getSelection().length == 0)
 							return;
 						TableItem item= getTable().getSelection()[0];
 						if (item.getBounds(STATE_PROP).contains(e.x, e.y)) {
-							List widgetSel= getSelectionFromWidget();
+							List<?> widgetSel= getSelectionFromWidget();
 							if (widgetSel == null || widgetSel.size() != 1)
 								return;
 							NLSSubstitution substitution= (NLSSubstitution) widgetSel.get(0);
@@ -795,6 +754,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 			}
 		});
 		fTableViewer.addFilter(new ViewerFilter() {
+			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
 				if (!fFilterCheckBox.getSelection()) {
 					return true;
@@ -905,6 +865,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 			fIsEclipseNLS.setSelection(fNLSRefactoring.isEclipseNLS());
 			fIsEclipseNLS.setEnabled(willCreateAccessorClass());
 			fIsEclipseNLS.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					super.widgetDefaultSelected(e);
 					boolean isEclipseNLS= fIsEclipseNLS.getSelection();
@@ -1109,6 +1070,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 		buttonComp.setLayoutData(new GridData(GridData.FILL_VERTICAL));
 
 		SelectionAdapter adapter= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleButtonPressed(e.widget);
 			}
@@ -1151,7 +1113,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 	 */
 	private void openRenameDialog() {
 		IStructuredSelection sel= (IStructuredSelection) fTableViewer.getSelection();
-		List elementsToRename= getExternalizedElements(sel);
+		List<NLSSubstitution> elementsToRename= getExternalizedElements(sel);
 		RenameKeysDialog dialog= new RenameKeysDialog(getShell(), elementsToRename);
 		if (dialog.open() == Window.OK) {
 			fTableViewer.refresh();
@@ -1160,8 +1122,8 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 	}
 
 	private void revertStateOfSelection() {
-		List selection= getSelectedTableEntries();
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		List<?> selection= getSelectedTableEntries();
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			NLSSubstitution substitution= (NLSSubstitution) iter.next();
 			substitution.revert();
 		}
@@ -1202,7 +1164,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 		}
 	}
 
-	private List getSelectedTableEntries() {
+	private List<?> getSelectedTableEntries() {
 		ISelection sel= fTableViewer.getSelection();
 		if (sel instanceof IStructuredSelection)
 			return((IStructuredSelection) sel).toList();
@@ -1212,9 +1174,9 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 
 	private void setSelectedTasks(int state) {
 		Assert.isTrue(state == NLSSubstitution.EXTERNALIZED || state == NLSSubstitution.IGNORED || state == NLSSubstitution.INTERNALIZED);
-		List selected= getSelectedTableEntries();
+		List<?> selected= getSelectedTableEntries();
 		String[] props= new String[]{PROPERTIES[STATE_PROP]};
-		for (Iterator iter= selected.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selected.iterator(); iter.hasNext();) {
 			NLSSubstitution substitution= (NLSSubstitution) iter.next();
 			substitution.setState(state);
 			if ((substitution.getState() == NLSSubstitution.EXTERNALIZED) && substitution.hasStateChanged()) {
@@ -1268,7 +1230,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 	}
 
 	private boolean containsElementsWithChange(IStructuredSelection selection) {
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			NLSSubstitution substitution= (NLSSubstitution) iter.next();
 			if (substitution.hasPropertyFileChange() || substitution.hasSourceChange()) {
 				return true;
@@ -1277,9 +1239,9 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 		return false;
 	}
 
-	private List getExternalizedElements(IStructuredSelection selection) {
-		ArrayList res= new ArrayList();
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+	private List<NLSSubstitution> getExternalizedElements(IStructuredSelection selection) {
+		ArrayList<NLSSubstitution> res= new ArrayList<NLSSubstitution>();
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			NLSSubstitution substitution= (NLSSubstitution) iter.next();
 			if (substitution.getState() == NLSSubstitution.EXTERNALIZED && !substitution.hasStateChanged()) {
 				res.add(substitution);
@@ -1289,7 +1251,7 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 	}
 
 	private boolean containsOnlyElementsOfSameState(int state, IStructuredSelection selection) {
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			NLSSubstitution substitution= (NLSSubstitution) iter.next();
 			if (substitution.getState() != state) {
 				return false;
@@ -1298,14 +1260,17 @@ class ExternalizeWizardPage extends UserInputWizardPage {
 		return true;
 	}
 
+	@Override
 	public boolean performFinish() {
 		return super.performFinish();
 	}
 
+	@Override
 	public IWizardPage getNextPage() {
 		return super.getNextPage();
 	}
 
+	@Override
 	public void dispose() {
 		storeAccessorDescriptions();
 		//widgets will be disposed. only need to null'em
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/MultiStateCellEditor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/MultiStateCellEditor.java
index 3d6ca5e..a0fdae4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/MultiStateCellEditor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/MultiStateCellEditor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class MultiStateCellEditor extends CellEditor {
 	/*
 	 * @see org.eclipse.jface.viewers.CellEditor#activate()
 	 */
+	@Override
 	public void activate() {
 		fValue= getNextValue(fStateCount, fValue);
 		fireApplyEditorValue();
@@ -56,6 +57,7 @@ public class MultiStateCellEditor extends CellEditor {
 	/*
 	 * @see org.eclipse.jface.viewers.CellEditor#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createControl(Composite parent) {
 		return null;
 	}
@@ -64,6 +66,7 @@ public class MultiStateCellEditor extends CellEditor {
 	 * @see org.eclipse.jface.viewers.CellEditor#doGetValue()
 	 * @return the Integer value
 	 */
+	@Override
 	protected Object doGetValue() {
 		return new Integer(fValue);
 	}
@@ -71,6 +74,7 @@ public class MultiStateCellEditor extends CellEditor {
 	/*
 	 * @see org.eclipse.jface.viewers.CellEditor#doSetFocus()
 	 */
+	@Override
 	protected void doSetFocus() {
 		// ignore
 	}
@@ -80,6 +84,7 @@ public class MultiStateCellEditor extends CellEditor {
 	 * @param value an Integer value
 	 * must be >=0 and < stateCount (value passed in the constructor)
 	 */
+	@Override
 	protected void doSetValue(Object value) {
 		Assert.isTrue(value instanceof Integer, "value must be Integer"); //$NON-NLS-1$
 		fValue = ((Integer) value).intValue();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java
index 3a1a505..f36f933 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -146,6 +146,7 @@ public class NLSAccessorConfigurationDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -167,6 +168,7 @@ public class NLSAccessorConfigurationDialog extends StatusDialog {
 		fSubstitutionPattern.setText(fRefactoring.getSubstitutionPattern());
 	}
 
+	@Override
 	protected Control createDialogArea(Composite ancestor) {
 		Composite parent= (Composite) super.createDialogArea(ancestor);
 
@@ -268,7 +270,7 @@ public class NLSAccessorConfigurationDialog extends StatusDialog {
 			IPackageFragment fPkgFragment= fResourceBundlePackage.getSelected();
 			if (fPkgFragment == null)
 				return new Object[0];
-			List result= new ArrayList(1);
+			List<Object> result= new ArrayList<Object>(1);
 			Object[] nonjava= fPkgFragment.getNonJavaResources();
 			for (int i= 0; i < nonjava.length; i++) {
 				if (isPropertyFile(nonjava[i]))
@@ -419,6 +421,7 @@ public class NLSAccessorConfigurationDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
+	@Override
 	protected void okPressed() {
 		updateRefactoring();
 		super.okPressed();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.java
index 3228653..f34f677 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.jdt.internal.ui.refactoring.nls;
 
 import org.eclipse.osgi.util.NLS;
 
+
 /**
  * Helper class to get NLSed messages.
  */
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.properties
index cf35663..3ac9506 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.properties	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSUIMessages.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java
index 0b1802b..9b416f8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,8 +65,8 @@ public class PackageBrowseAdapter implements IStringButtonAdapter {
 		try{
 			IJavaProject project= cu.getJavaProject();
 			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-			List result= new ArrayList();
-			HashMap entered =new HashMap();
+			List<IPackageFragment> result= new ArrayList<IPackageFragment>();
+			HashMap<String, Object> entered =new HashMap<String, Object>();
 			for (int i= 0; i < roots.length; i++){
 				if (canAddPackageRoot(roots[i])){
 					getValidPackages(roots[i], result, entered, elementNameMatch);
@@ -93,7 +93,7 @@ public class PackageBrowseAdapter implements IStringButtonAdapter {
     	return true;
     }
 
-	static void getValidPackages(IPackageFragmentRoot root, List result, HashMap entered, String elementNameMatch) throws JavaModelException {
+	static void getValidPackages(IPackageFragmentRoot root, List<IPackageFragment> result, HashMap<String, Object> entered, String elementNameMatch) throws JavaModelException {
 		IJavaElement[] children= null;
 		try {
 			children= root.getChildren();
@@ -131,10 +131,10 @@ public class PackageBrowseAdapter implements IStringButtonAdapter {
     	return true;
     }
 
-    public static List searchAllPackages(IJavaProject project, String matcher) {
+    public static List<IPackageFragment> searchAllPackages(IJavaProject project, String matcher) {
 		try{
 			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-			List result= new ArrayList();
+			List<IPackageFragment> result= new ArrayList<IPackageFragment>();
 			for (int i= 0; i < roots.length; i++){
 				if (canAddPackageRoot(roots[i])){
 					getValidPackages(roots[i], result, null, matcher);
@@ -143,7 +143,7 @@ public class PackageBrowseAdapter implements IStringButtonAdapter {
 			return result;
 		} catch (JavaModelException e) {
 			JavaPlugin.log(e);
-			return new ArrayList(0);
+			return new ArrayList<IPackageFragment>(0);
 		}
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/RenameKeysDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/RenameKeysDialog.java
index e300c72..65682f6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/RenameKeysDialog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/RenameKeysDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,13 +29,13 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 public class RenameKeysDialog extends StatusDialog {
 
 	private StringDialogField fNameField;
-	private List fSelectedSubstitutions;
+	private List<NLSSubstitution> fSelectedSubstitutions;
 	private int fCommonPrefixLength;
 
 	/**
 	 * @param parent
 	 */
-	public RenameKeysDialog(Shell parent, List selectedSubstitutions) {
+	public RenameKeysDialog(Shell parent, List<NLSSubstitution> selectedSubstitutions) {
 		super(parent);
 		setTitle(NLSUIMessages.RenameKeysDialog_title);
 
@@ -56,6 +56,7 @@ public class RenameKeysDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -67,20 +68,21 @@ public class RenameKeysDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
+	@Override
 	protected void okPressed() {
 		String prefix= fNameField.getText();
 		for (int i= 0; i < fSelectedSubstitutions.size(); i++) {
-			NLSSubstitution sub= (NLSSubstitution) fSelectedSubstitutions.get(i);
+			NLSSubstitution sub= fSelectedSubstitutions.get(i);
 			String newKey= prefix + sub.getKey().substring(fCommonPrefixLength);
 			sub.setKey(newKey);
 		}
 		super.okPressed();
 	}
 
-	private String getInitialPrefix(List selectedSubstitutions) {
+	private String getInitialPrefix(List<NLSSubstitution> selectedSubstitutions) {
 		String prefix= null;
 		for (int i= 0; i < selectedSubstitutions.size(); i++) {
-			NLSSubstitution sub= (NLSSubstitution) selectedSubstitutions.get(i);
+			NLSSubstitution sub= selectedSubstitutions.get(i);
 			String curr= sub.getKey();
 			if (prefix == null) {
 				prefix= curr;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceContainerDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceContainerDialog.java
index 91a8ee6..34a97a7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceContainerDialog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceContainerDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class SourceContainerDialog extends ElementTreeSelectionDialog {
 			super(new Class[]{IPackageFragmentRoot.class},false);
 		}
 
+		@Override
 		public boolean isSelectedValid(Object element) {
 			try {
 				if (element instanceof IJavaProject) {
@@ -71,6 +72,7 @@ public class SourceContainerDialog extends ElementTreeSelectionDialog {
 			super(new Class[]{IPackageFragmentRoot.class, IJavaProject.class});
 		}
 
+		@Override
 		public boolean select(Viewer viewer, Object parent, Object element) {
 			if (element instanceof IPackageFragmentRoot) {
 				IPackageFragmentRoot fragmentRoot= (IPackageFragmentRoot)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceFirstPackageSelectionDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceFirstPackageSelectionDialogField.java
index b74410c..16e567b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceFirstPackageSelectionDialogField.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/SourceFirstPackageSelectionDialogField.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -124,8 +124,9 @@ class SourceFirstPackageSelectionDialogField {
 	}
 
 	private IPackageFragmentRoot chooseSourceContainer(IJavaElement initElement) {
-		Class[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class };
+		Class<?>[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class };
 		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) {
+			@Override
 			public boolean isSelectedValid(Object element) {
 				try {
 					if (element instanceof IJavaProject) {
@@ -145,6 +146,7 @@ class SourceFirstPackageSelectionDialogField {
 
 		acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class };
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses) {
+			@Override
 			public boolean select(Viewer viewer, Object parent, Object element) {
 				if (element instanceof IPackageFragmentRoot) {
 					try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/FileEntry.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/FileEntry.java
index 2b69b06..a4bca5b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/FileEntry.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/FileEntry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class FileEntry implements IAdaptable {
 		return fMessage;
 	}
 
+	@Override
 	public String toString() {
 		return fMessage;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchEditorOpener.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchEditorOpener.java
index a140b29..a4c6357 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchEditorOpener.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchEditorOpener.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.jdt.internal.ui.search.JavaSearchEditorOpener;
 /**
  */
 public class NLSSearchEditorOpener extends JavaSearchEditorOpener {
+	@Override
 	protected Object getElementToOpen(Match match) {
 		Object element= match.getElement();
 		if (element instanceof IJavaElement) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchMessages.properties
index 5f9dae8..25cdd78 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchMessages.properties	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchMessages.properties	
@@ -18,7 +18,7 @@ NLSSearchResultCollector_duplicateKeys=Duplicate keys in:
 NLSSearchResultLabelProvider2_undefinedKeys=Undefined keys in:
 
 # ### New Search: ###
-NLSSearchQuery_label=Search for Broken NLS Keys
+NLSSearchQuery_label=Search for Broken Externalized Strings
 NLSSearchQuery_wrapperNotExists=Resource bundle accessor class ''{0}'' does not exist.
 NLSSearchQuery_propertiesNotExists=Properties file ''{0}'' does not exist.
 NLSSearchQuery_oneProblemInScope_description=1 problem in {0}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java
index 57b2667..2b984b0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,13 +51,13 @@ public class NLSSearchResult extends AbstractTextSearchResult implements IEditor
 	 * Element (group key) is always IJavaElement or FileEntry.
 	 */
 	private NLSSearchQuery fQuery;
-	private final List fFileEntryGroups;
-	private final List fCompilationUnitGroups;
+	private final List<FileEntry> fFileEntryGroups;
+	private final List<CompilationUnitEntry> fCompilationUnitGroups;
 
 	public NLSSearchResult(NLSSearchQuery query) {
 		fQuery= query;
-		fFileEntryGroups= new ArrayList();
-		fCompilationUnitGroups= new ArrayList();
+		fFileEntryGroups= new ArrayList<FileEntry>();
+		fCompilationUnitGroups= new ArrayList<CompilationUnitEntry>();
 	}
 
 	public void addFileEntryGroup(FileEntry group) {
@@ -79,9 +79,9 @@ public class NLSSearchResult extends AbstractTextSearchResult implements IEditor
 			return computeContainedMatches(result, fileEditorInput.getFile());
 		} else if (editorInput instanceof IClassFileEditorInput) {
 			IClassFileEditorInput classFileEditorInput= (IClassFileEditorInput) editorInput;
-			Set matches= new HashSet();
+			Set<Match> matches= new HashSet<Match>();
 			collectMatches(matches, classFileEditorInput.getClassFile());
-			return (Match[]) matches.toArray(new Match[matches.size()]);
+			return matches.toArray(new Match[matches.size()]);
 		}
 		return NO_MATCHES;
 	}
@@ -90,19 +90,19 @@ public class NLSSearchResult extends AbstractTextSearchResult implements IEditor
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchResult#findContainedMatches(org.eclipse.core.resources.IFile)
 	 */
 	public Match[] computeContainedMatches(AbstractTextSearchResult result, IFile file) {
-		Set matches= new HashSet();
-		for (Iterator iter= fFileEntryGroups.iterator(); iter.hasNext();) {
-			FileEntry element= (FileEntry)iter.next();
+		Set<Match> matches= new HashSet<Match>();
+		for (Iterator<FileEntry> iter= fFileEntryGroups.iterator(); iter.hasNext();) {
+			FileEntry element= iter.next();
 			if (element.getPropertiesFile().equals(file)) {
 				matches.addAll(Arrays.asList(getMatches(element)));
 			}
 		}
 		if (matches.size() > 0)
-			return (Match[]) matches.toArray(new Match[matches.size()]);
+			return matches.toArray(new Match[matches.size()]);
 
 		try {
-			for (Iterator iter= fCompilationUnitGroups.iterator(); iter.hasNext();) {
-				CompilationUnitEntry element= (CompilationUnitEntry)iter.next();
+			for (Iterator<CompilationUnitEntry> iter= fCompilationUnitGroups.iterator(); iter.hasNext();) {
+				CompilationUnitEntry element= iter.next();
 				ICompilationUnit cu= element.getCompilationUnit();
 				if (cu.exists() && file.equals(cu.getCorrespondingResource())) {
 					matches.addAll(Arrays.asList(getMatches(element)));
@@ -116,10 +116,10 @@ public class NLSSearchResult extends AbstractTextSearchResult implements IEditor
 		//TODO: copied from JavaSearchResult:
 		IJavaElement javaElement= JavaCore.create(file);
 		collectMatches(matches, javaElement);
-		return (Match[]) matches.toArray(new Match[matches.size()]);
+		return matches.toArray(new Match[matches.size()]);
 	}
 
-	private void collectMatches(Set matches, IJavaElement element) {
+	private void collectMatches(Set<Match> matches, IJavaElement element) {
 		//TODO: copied from JavaSearchResult:
 		Match[] m= getMatches(element);
 		if (m.length != 0) {
@@ -228,10 +228,12 @@ public class NLSSearchResult extends AbstractTextSearchResult implements IEditor
 		return fQuery;
 	}
 
+	@Override
 	public IFileMatchAdapter getFileMatchAdapter() {
 		return this;
 	}
 
+	@Override
 	public IEditorMatchAdapter getEditorMatchAdapter() {
 		return this;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultLabelProvider2.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultLabelProvider2.java
index 7562011..3d20798 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultLabelProvider2.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultLabelProvider2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ class NLSSearchResultLabelProvider2 extends TextSearchLabelProvider implements I
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 	 */
+	@Override
 	public String getText(Object element) {
 		return getLabelWithCounts(element, internalGetText(element).getString());
 	}
@@ -76,6 +77,7 @@ class NLSSearchResultLabelProvider2 extends TextSearchLabelProvider implements I
 	/*
 	 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 	 */
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof FileEntry)
 			element= ((FileEntry) element).getPropertiesFile();
@@ -88,6 +90,7 @@ class NLSSearchResultLabelProvider2 extends TextSearchLabelProvider implements I
 	/*
 	 * @see org.eclipse.jface.viewers.LabelProvider#dispose()
 	 */
+	@Override
 	public void dispose() {
 		fLabelProvider.dispose();
 		fLabelProvider= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultPage.java
index 0a3d3e4..4e8d2c0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class NLSSearchResultPage extends AbstractTextSearchViewPage  implements
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#showMatch(org.eclipse.search.ui.text.Match,
 	 *      int, int)
 	 */
+	@Override
 	protected void showMatch(Match match, int currentOffset, int currentLength, boolean activate) throws PartInitException {
 		IEditorPart editor= fEditorOpener.openMatch(match);
 		if (editor != null && activate)
@@ -57,6 +58,7 @@ public class NLSSearchResultPage extends AbstractTextSearchViewPage  implements
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#elementsChanged(java.lang.Object[])
 	 */
+	@Override
 	protected void elementsChanged(Object[] objects) {
 		if (fContentProvider != null)
 			fContentProvider.elementsChanged(objects);
@@ -65,6 +67,7 @@ public class NLSSearchResultPage extends AbstractTextSearchViewPage  implements
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#clear()
 	 */
+	@Override
 	protected void clear() {
 		if (fContentProvider != null)
 			fContentProvider.clear();
@@ -73,6 +76,7 @@ public class NLSSearchResultPage extends AbstractTextSearchViewPage  implements
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTreeViewer(org.eclipse.jface.viewers.TreeViewer)
 	 */
+	@Override
 	protected void configureTreeViewer(TreeViewer viewer) {
 		throw new IllegalStateException("Doesn't support tree mode."); //$NON-NLS-1$
 	}
@@ -80,8 +84,10 @@ public class NLSSearchResultPage extends AbstractTextSearchViewPage  implements
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTableViewer(org.eclipse.jface.viewers.TableViewer)
 	 */
+	@Override
 	protected void configureTableViewer(TableViewer viewer) {
 		viewer.setComparator(new ViewerComparator() {
+			@Override
 			public int category(Object element) {
 				if (element instanceof FileEntry) {
 					return 0;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java
index e1d72ea..de55a94 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,7 +74,7 @@ class NLSSearchResultRequestor extends SearchRequestor {
 	private NLSSearchResult fResult;
 	private IFile fPropertiesFile;
 	private Properties fProperties;
-	private HashSet fUsedPropertyNames;
+	private HashSet<String> fUsedPropertyNames;
 
 	public NLSSearchResultRequestor(IFile propertiesFile, NLSSearchResult result) {
 		fPropertiesFile= propertiesFile;
@@ -84,14 +84,16 @@ class NLSSearchResultRequestor extends SearchRequestor {
 	/*
 	 * @see org.eclipse.jdt.core.search.SearchRequestor#beginReporting()
 	 */
+	@Override
 	public void beginReporting() {
 		loadProperties();
-		fUsedPropertyNames= new HashSet(fProperties.size());
+		fUsedPropertyNames= new HashSet<String>(fProperties.size());
 	}
 
 	/*
 	 * @see org.eclipse.jdt.core.search.SearchRequestor#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)
 	 */
+	@Override
 	public void acceptSearchMatch(SearchMatch match) throws CoreException {
 		if (match.getAccuracy() == SearchMatch.A_INACCURATE)
 			return;
@@ -151,7 +153,7 @@ class NLSSearchResultRequestor extends SearchRequestor {
 		pm.setTaskName(NLSSearchMessages.NLSSearchResultRequestor_searching);
 		FileEntry groupElement= new FileEntry(fPropertiesFile, NLSSearchMessages.NLSSearchResultCollector_unusedKeys);
 
-		for (Enumeration enumeration= fProperties.propertyNames(); enumeration.hasMoreElements();) {
+		for (Enumeration<?> enumeration= fProperties.propertyNames(); enumeration.hasMoreElements();) {
 			String propertyName= (String) enumeration.nextElement();
 			if (!fUsedPropertyNames.contains(propertyName)) {
 				addMatch(groupElement, propertyName);
@@ -176,7 +178,7 @@ class NLSSearchResultRequestor extends SearchRequestor {
 		 * .properties file. However, this can fail if the key is escaped in a different
 		 * manner than what PropertyFileDocumentModel.unwindEscapeChars(.) produces.
 		 */
-		String escapedPropertyName= PropertyFileDocumentModel.unwindEscapeChars(propertyName);
+		String escapedPropertyName= PropertyFileDocumentModel.escape(propertyName, false);
 		int start= findPropertyNameStartPosition(escapedPropertyName);
 		int length;
 		if (start == -1) { // not found -> report at beginning
@@ -381,7 +383,7 @@ class NLSSearchResultRequestor extends SearchRequestor {
 	}
 
 	private void loadProperties() {
-		Set duplicateKeys= new HashSet();
+		Set<Object> duplicateKeys= new HashSet<Object>();
 		fProperties= new Properties(duplicateKeys);
 		InputStream stream;
 		try {
@@ -416,12 +418,12 @@ class NLSSearchResultRequestor extends SearchRequestor {
 		return propertiesFile.getContents();
 	}
 
-	private void reportDuplicateKeys(Set duplicateKeys) {
+	private void reportDuplicateKeys(Set<Object> duplicateKeys) {
 		if (duplicateKeys.size() == 0)
 			return;
 
 		FileEntry groupElement= new FileEntry(fPropertiesFile, NLSSearchMessages.NLSSearchResultCollector_duplicateKeys);
-		Iterator iter= duplicateKeys.iterator();
+		Iterator<Object> iter= duplicateKeys.iterator();
 		while (iter.hasNext()) {
 			String propertyName= (String) iter.next();
 			addMatch(groupElement, propertyName);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/Properties.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/Properties.java
index b3f62d1..c9ce89a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/Properties.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/Properties.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,18 +20,18 @@ class Properties extends java.util.Properties {
 
 	private static final long serialVersionUID= 1L;
 
-	private Set fDuplicateKeys;
+	private Set<Object> fDuplicateKeys;
 
 	public Properties() {
 	}
 
-	public Properties(Set duplicateKeys) {
+	public Properties(Set<Object> duplicateKeys) {
 		super();
 		Assert.isNotNull(duplicateKeys);
 		fDuplicateKeys= duplicateKeys;
 	}
 
-	public Properties (Properties properties, Set duplicateKeys) {
+	public Properties (Properties properties, Set<Object> duplicateKeys) {
 		super(properties);
 		Assert.isNotNull(duplicateKeys);
 		fDuplicateKeys= duplicateKeys;
@@ -39,6 +39,7 @@ class Properties extends java.util.Properties {
 	/*
 	 * @see java.util.Map#put(Object, Object)
 	 */
+	@Override
 	public synchronized Object put(Object arg0, Object arg1) {
 		if (arg0 != null && containsKey(arg0))
 			fDuplicateKeys.add(arg0);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java
index b2653cb..5f7992f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import java.util.Set;
 import org.eclipse.osgi.util.TextProcessor;
 
 import org.eclipse.swt.SWTError;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
 import org.eclipse.swt.dnd.Clipboard;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.FileTransfer;
@@ -93,8 +94,9 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
-		List elements= selection.toList();
+		List<?> elements= selection.toList();
 		IResource[] resources= ReorgUtils.getResources(elements);
 		IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 		IJarEntryResource[] jarEntryResources= ReorgUtils.getJarEntryResources(elements);
@@ -107,9 +109,10 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
-			List elements= selection.toList();
+			List<?> elements= selection.toList();
 			IResource[] resources= ReorgUtils.getResources(elements);
 			IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 			IJarEntryResource[] jarEntryResources= ReorgUtils.getJarEntryResources(elements);
@@ -171,7 +174,7 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 				copyToClipboard(fResources, new String[0], namesBuf.toString(), fJavaElements, new TypedSource[0], 0, clipboard);
 			} else {
 				//Set<String> fileNames
-				Set fileNames= new HashSet(countOfNonJarResources);
+				Set<String> fileNames= new HashSet<String>(countOfNonJarResources);
 				processResources(fileNames, namesBuf);
 				processJavaElements(fileNames, namesBuf);
 
@@ -187,17 +190,17 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 				IJavaElement[] javaElementsForClipboard= ReorgUtils.union(fJavaElements, cusOfMainTypes);
 
 				TypedSource[] typedSources= TypedSource.createTypedSources(javaElementsForClipboard);
-				String[] fileNameArray= (String[])fileNames.toArray(new String[fileNames.size()]);
+				String[] fileNameArray= fileNames.toArray(new String[fileNames.size()]);
 				copyToClipboard(resourcesForClipboard, fileNameArray, namesBuf.toString(), javaElementsForClipboard, typedSources, 0, clipboard);
 			}
 		}
 
 		private static IJavaElement[] getCompilationUnits(IJavaElement[] javaElements) {
-			List cus= ReorgUtils.getElementsOfType(javaElements, IJavaElement.COMPILATION_UNIT);
-			return (ICompilationUnit[]) cus.toArray(new ICompilationUnit[cus.size()]);
+			List<?> cus= ReorgUtils.getElementsOfType(javaElements, IJavaElement.COMPILATION_UNIT);
+			return cus.toArray(new ICompilationUnit[cus.size()]);
 		}
 
-		private void processResources(Set fileNames, StringBuffer namesBuf) {
+		private void processResources(Set<String> fileNames, StringBuffer namesBuf) {
 			for (int i= 0; i < fResources.length; i++) {
 				IResource resource= fResources[i];
 				addFileName(fileNames, resource);
@@ -208,7 +211,7 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 			}
 		}
 
-		private void processJavaElements(Set fileNames, StringBuffer namesBuf) {
+		private void processJavaElements(Set<String> fileNames, StringBuffer namesBuf) {
 			for (int i= 0; i < fJavaElements.length; i++) {
 				IJavaElement element= fJavaElements[i];
 				switch (element.getElementType()) {
@@ -243,13 +246,13 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 			}
 		}
 
-		private static void addFileNames(Set fileName, IResource[] resources) {
+		private static void addFileNames(Set<String> fileName, IResource[] resources) {
 			for (int i= 0; i < resources.length; i++) {
 				addFileName(fileName, resources[i]);
 			}
 		}
 
-		private static void addFileName(Set fileName, IResource resource){
+		private static void addFileName(Set<String> fileName, IResource resource){
 			if (resource == null)
 				return;
 			IPath location = resource.getLocation();
@@ -281,7 +284,7 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 		}
 
 		private static Transfer[] createDataTypeArray(IResource[] resources, IJavaElement[] javaElements, String[] fileNames, TypedSource[] typedSources) {
-			List result= new ArrayList(4);
+			List<ByteArrayTransfer> result= new ArrayList<ByteArrayTransfer>(4);
 			if (resources.length != 0)
 				result.add(ResourceTransfer.getInstance());
 			if (javaElements.length != 0)
@@ -291,11 +294,11 @@ public class CopyToClipboardAction extends SelectionDispatchAction{
 			if (typedSources.length != 0)
 				result.add(TypedSourceTransfer.getInstance());
 			result.add(TextTransfer.getInstance());
-			return (Transfer[]) result.toArray(new Transfer[result.size()]);
+			return result.toArray(new Transfer[result.size()]);
 		}
 
 		private static Object[] createDataArray(IResource[] resources, IJavaElement[] javaElements, String[] fileNames, String names, TypedSource[] typedSources) {
-			List result= new ArrayList(4);
+			List<Object> result= new ArrayList<Object>(4);
 			if (resources.length != 0)
 				result.add(resources);
 			if (javaElements.length != 0)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CutAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CutAction.java
index 49e224a..a9ca87c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CutAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CutAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public class CutAction extends SelectionDispatchAction{
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CUT_ACTION);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		if (!selection.isEmpty()) {
 			// cannot cut top-level types. this deletes the cu and then you cannot paste because the cu is gone.
@@ -64,7 +65,7 @@ public class CutAction extends SelectionDispatchAction{
 	}
 
 	private static boolean containsOnlyElementsInsideCompilationUnits(IStructuredSelection selection) {
-		for (Iterator iter = selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter = selection.iterator(); iter.hasNext();) {
 			Object object= iter.next();
 			if (! (object instanceof IJavaElement && ReorgUtils.isInsideCompilationUnit((IJavaElement)object)))
 				return false;
@@ -73,7 +74,7 @@ public class CutAction extends SelectionDispatchAction{
 	}
 
 	private static boolean containsTopLevelTypes(IStructuredSelection selection) {
-		for (Iterator iter = selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter = selection.iterator(); iter.hasNext();) {
 			Object each= iter.next();
 			if (each instanceof IType && ((IType)each).getDeclaringType() == null)
 				return true;
@@ -81,6 +82,7 @@ public class CutAction extends SelectionDispatchAction{
 		return false;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			selectionChanged(selection);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java
index 94ded5b..a016f37 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class DeleteAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		if (ReorgUtils.containsOnlyProjects(selection.toList())) {
 			setEnabled(createWorkbenchAction(selection).isEnabled());
@@ -116,6 +117,7 @@ public class DeleteAction extends SelectionDispatchAction {
 					 * @see org.eclipse.jface.dialogs.MessageDialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
 					 * @since 3.5
 					 */
+					@Override
 					protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
 						Button button= super.createButton(parent, id, label, defaultButton);
 					if (id == REMOVE_BUTTON && IWorkingSetIDs.OTHERS.equals(workingSetID))
@@ -132,7 +134,7 @@ public class DeleteAction extends SelectionDispatchAction {
 
 		int dialogResponse= dialog.open();
 		if (dialogResponse == REMOVE_BUTTON) {
-			Iterator iter= selection.iterator();
+			Iterator<?> iter= selection.iterator();
 			IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
 			while (iter.hasNext()) {
 				IWorkingSet workingSet= (IWorkingSet)iter.next();
@@ -146,9 +148,9 @@ public class DeleteAction extends SelectionDispatchAction {
 				if (activePart instanceof PackageExplorerPart) {
 					PackageExplorerPart packagePart= (PackageExplorerPart)activePart;
 					WorkingSetModel model= packagePart.getWorkingSetModel();
-					List activeWorkingSets= new ArrayList(Arrays.asList(model.getActiveWorkingSets()));
+					List<IWorkingSet> activeWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(model.getActiveWorkingSets()));
 					activeWorkingSets.removeAll(SelectionUtil.toList(selection));
-					model.setActiveWorkingSets((IWorkingSet[])activeWorkingSets.toArray(new IWorkingSet[activeWorkingSets.size()]));
+					model.setActiveWorkingSets(activeWorkingSets.toArray(new IWorkingSet[activeWorkingSets.size()]));
 				}
 			}
 		}
@@ -157,6 +159,7 @@ public class DeleteAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (ReorgUtils.containsOnlyProjects(selection.toList())) {
 			createWorkbenchAction(selection).run();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java
index 0376827..bb69afa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ public class DeleteWizard extends RefactoringWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.refactoring.RefactoringWizard#addUserInputPages()
 	 */
+	@Override
 	protected void addUserInputPages() {
 		addPage(new DeleteInputPage(fProcessor));
 	}
@@ -63,6 +64,7 @@ public class DeleteWizard extends RefactoringWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.refactoring.RefactoringWizard#getMessageLineWidthInChars()
 	 */
+	@Override
 	public int getMessageLineWidthInChars() {
 		return 0;
 	}
@@ -70,6 +72,7 @@ public class DeleteWizard extends RefactoringWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.Wizard#needsProgressMonitor()
 	 */
+	@Override
 	public boolean needsProgressMonitor() {
 		return fProcessor.needsProgressMonitor();
 	}
@@ -85,6 +88,7 @@ public class DeleteWizard extends RefactoringWizard {
 			fProcessor= processor;
 		}
 
+		@Override
 		protected String getMessageString() {
 			int numberOfSelectedElements= numberOfSelectedElements();
 			try {
@@ -108,6 +112,7 @@ public class DeleteWizard extends RefactoringWizard {
 			}
 		}
 
+		@Override
 		public void createControl(Composite parent) {
 			super.createControl(parent);
 
@@ -141,6 +146,7 @@ public class DeleteWizard extends RefactoringWizard {
 
 			fDeleteSubPackagesCheckBox.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					getDeleteProcessor().setDeleteSubPackages(fDeleteSubPackagesCheckBox.getSelection());
 				}
@@ -174,6 +180,7 @@ public class DeleteWizard extends RefactoringWizard {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.refactoring.RefactoringWizardPage#performFinish()
 		 */
+		@Override
 		protected boolean performFinish() {
 			return super.performFinish() || getDeleteProcessor().wasCanceled(); //close the dialog if canceled
 		}
@@ -184,6 +191,7 @@ public class DeleteWizard extends RefactoringWizard {
 			return true;
 		}
 
+		@Override
 		public void dispose() {
 			if (fDeleteSubPackagesCheckBox != null && saveSettings())
 				getRefactoringSettings().put(DIALOG_SETTINGS_DELETE_SUB_PACKAGES, fDeleteSubPackagesCheckBox.getSelection());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java
index 70f9e25..3f6278a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public final class DestinationContentProvider extends StandardJavaElementContent
 		fValidator= validator;
 	}
 
+	@Override
 	public boolean hasChildren(Object element) {
 		IReorgDestination destination= ReorgDestinationFactory.createDestination(element);
 		if (!fValidator.canChildrenBeDestinations(destination))
@@ -61,13 +62,14 @@ public final class DestinationContentProvider extends StandardJavaElementContent
 		return super.hasChildren(element);
 	}
 
+	@Override
 	public Object[] getChildren(Object element) {
 		try {
 			if (element instanceof IJavaModel) {
 				return concatenate(getJavaProjects((IJavaModel)element), getOpenNonJavaProjects((IJavaModel)element));
 			} else {
 				Object[] children= doGetChildren(element);
-				ArrayList result= new ArrayList(children.length);
+				ArrayList<Object> result= new ArrayList<Object>(children.length);
 				for (int i= 0; i < children.length; i++) {
 					IReorgDestination destination= ReorgDestinationFactory.createDestination(children[i]);
 					if (fValidator.canElementBeDestination(destination) || fValidator.canChildrenBeDestinations(destination))
@@ -97,7 +99,7 @@ public final class DestinationContentProvider extends StandardJavaElementContent
 			if (javaProject == null || !javaProject.exists())
 				return members;
 			boolean isFolderOnClasspath = javaProject.isOnClasspath(container);
-			List nonJavaResources= new ArrayList();
+			List<IResource> nonJavaResources= new ArrayList<IResource>();
 			// Can be on classpath but as a member of non-java resource folder
 			for (int i= 0; i < members.length; i++) {
 				IResource member= members[i];
@@ -121,7 +123,7 @@ public final class DestinationContentProvider extends StandardJavaElementContent
 
 	private static Object[] getOpenNonJavaProjects(IJavaModel model) throws JavaModelException {
 		Object[] nonJavaProjects= model.getNonJavaResources();
-		ArrayList result= new ArrayList(nonJavaProjects.length);
+		ArrayList<IProject> result= new ArrayList<IProject>(nonJavaProjects.length);
 		for (int i= 0; i < nonJavaProjects.length; i++) {
 			IProject project = (IProject) nonJavaProjects[i];
 			if (project.isOpen())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/NewNameQueries.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/NewNameQueries.java
index dbf51f3..ef497c3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/NewNameQueries.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/NewNameQueries.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -126,6 +126,7 @@ public class NewNameQueries implements INewNameQueries {
 					/* (non-Javadoc)
 					 * @see org.eclipse.jface.dialogs.InputDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 					 */
+					@Override
 					protected Control createDialogArea(Composite parent) {
 						Control area= super.createDialogArea(parent);
 						TextFieldNavigationHandler.install(getText());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
index 84bd310..a9a034f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -159,6 +159,7 @@ import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.IJavaStatusConstants;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaUIMessages;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
 import org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper;
 import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
@@ -199,6 +200,7 @@ public class PasteAction extends SelectionDispatchAction{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		// Moved condition checking to run (see http://bugs.eclipse.org/bugs/show_bug.cgi?id=78450)
 	}
@@ -206,7 +208,7 @@ public class PasteAction extends SelectionDispatchAction{
 	private Paster[] createEnabledPasters(TransferData[] availableDataTypes, Clipboard clipboard) {
 		Paster paster;
 		Shell shell = getShell();
-		List result= new ArrayList(2);
+		List<Paster> result= new ArrayList<Paster>(2);
 		paster= new ProjectPaster(shell, clipboard);
 		if (paster.canEnable(availableDataTypes))
 			result.add(paster);
@@ -230,7 +232,7 @@ public class PasteAction extends SelectionDispatchAction{
 		paster= new TextPaster(shell, clipboard);
 		if (paster.canEnable(availableDataTypes))
 			result.add(paster);
-		return (Paster[]) result.toArray(new Paster[result.size()]);
+		return result.toArray(new Paster[result.size()]);
 	}
 
 	private static Object getContents(final Clipboard clipboard, final Transfer transfer, Shell shell) {
@@ -251,6 +253,7 @@ public class PasteAction extends SelectionDispatchAction{
 		return false;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		Clipboard clipboard;
 		if (fClipboard != null)
@@ -259,7 +262,7 @@ public class PasteAction extends SelectionDispatchAction{
 			clipboard= new Clipboard(getShell().getDisplay());
 		try {
 			TransferData[] availableTypes= clipboard.getAvailableTypes();
-			List elements= selection.toList();
+			List<?> elements= selection.toList();
 			IResource[] resources= ReorgUtils.getResources(elements);
 			IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 			IWorkingSet[] workingSets= ReorgUtils.getWorkingSets(elements);
@@ -347,7 +350,7 @@ public class PasteAction extends SelectionDispatchAction{
 		/*
 		 * Only called if {@link #canEnable(TransferData[])} returns <code>true</code>.
 		 */
-		public abstract boolean canPasteOn(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, List selectedElements)  throws JavaModelException;
+		public abstract boolean canPasteOn(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements)  throws JavaModelException;
 
 		/*
 		 * only called if {@link #canPasteOn(IJavaElement[], IResource[], IWorkingSet[])} returns <code>true</code>
@@ -363,12 +366,12 @@ public class PasteAction extends SelectionDispatchAction{
 			private final String fTypeName;
 			private final String fPackageName;
 
-			public static List/*<ParsedCu>*/ parseCus(IJavaProject javaProject, String compilerCompliance, String text) {
-				ASTParser parser= ASTParser.newParser(AST.JLS3);
+			public static List<ParsedCu> parseCus(IJavaProject javaProject, String compilerCompliance, String text) {
+				ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				if (javaProject != null) {
 					parser.setProject(javaProject);
 				} else if (compilerCompliance != null) {
-					Map options= JavaCore.getOptions();
+					Map<String, String> options= JavaCore.getOptions();
 					JavaModelUtil.setComplianceOptions(options, compilerCompliance);
 					parser.setCompilerOptions(options);
 				}
@@ -385,7 +388,7 @@ public class PasteAction extends SelectionDispatchAction{
 				parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
 				ASTNode root= parser.createAST(null);
 				if (root instanceof TypeDeclaration) {
-					List bodyDeclarations= ((TypeDeclaration) root).bodyDeclarations();
+					List<BodyDeclaration> bodyDeclarations= ((TypeDeclaration) root).bodyDeclarations();
 					if (bodyDeclarations.size() > 0)
 						return Collections.singletonList(new ParsedCu(text, ASTParser.K_CLASS_BODY_DECLARATIONS, null, null));
 				}
@@ -396,31 +399,31 @@ public class PasteAction extends SelectionDispatchAction{
 				parser.setKind(ASTParser.K_STATEMENTS);
 				root= parser.createAST(null);
 				if (root instanceof Block) {
-					List statements= ((Block) root).statements();
+					List<Statement> statements= ((Block) root).statements();
 					if (statements.size() > 0)
 						return Collections.singletonList(new ParsedCu(text, ASTParser.K_STATEMENTS, null, null));
 				}
 
-				return Collections.EMPTY_LIST;
+				return Collections.emptyList();
 			}
 
-			private static List parseAsTypes(String text, CompilationUnit unit) {
+			private static List<ParsedCu> parseAsTypes(String text, CompilationUnit unit) {
 				String packageName= IPackageFragment.DEFAULT_PACKAGE_NAME;
 				PackageDeclaration pack= unit.getPackage();
 				if (pack != null) {
 					packageName= pack.getName().getFullyQualifiedName();
 				}
 
-				ArrayList cus= new ArrayList();
-				List types= unit.types();
+				ArrayList<ParsedCu> cus= new ArrayList<ParsedCu>();
+				List<AbstractTypeDeclaration> types= unit.types();
 
 				int startOffset= 0;
 				String typeName= null;
 				int maxVisibility= JdtFlags.VISIBILITY_CODE_INVALID;
 
 				// Public types must be in separate CUs:
-				for (Iterator iter= types.iterator(); iter.hasNext(); ) {
-					AbstractTypeDeclaration type= (AbstractTypeDeclaration) iter.next();
+				for (Iterator<AbstractTypeDeclaration> iter= types.iterator(); iter.hasNext(); ) {
+					AbstractTypeDeclaration type= iter.next();
 					if (typeName == null) {
 						// first in group:
 						maxVisibility= JdtFlags.getVisibilityCode(type);
@@ -495,12 +498,14 @@ public class PasteAction extends SelectionDispatchAction{
 			super(shell, clipboard);
 		}
 
+		@Override
 		public boolean canEnable(TransferData[] availableTypes) {
 			fAvailableTypes= availableTypes;
 			return PasteAction.isAvailable(TextTransfer.getInstance(), availableTypes) && ! PasteAction.isAvailable(FileTransfer.getInstance(), availableTypes);
 		}
 
-		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List selectedElements) throws JavaModelException {
+		@Override
+		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements) throws JavaModelException {
 			final String text= getClipboardText(fAvailableTypes);
 			
 			IStorage storage= new IEncodedStorage() {
@@ -538,7 +543,7 @@ public class PasteAction extends SelectionDispatchAction{
 			}
 			
 			
-			if (selectedWorkingSets.length != 0)
+			if (selectedWorkingSets.length > 1)
 				return false;
 			if (resources.length != 0)
 				return false; //alternative: create text file?
@@ -550,6 +555,8 @@ public class PasteAction extends SelectionDispatchAction{
 			if (javaElements.length == 1) {
 				destination= javaElements[0];
 				javaProject= destination.getJavaProject();
+			} else if (selectedWorkingSets.length == 1) {
+				// OK
 			} else if (selectedElements.size() != 0) {
 				return false; // e.g. ClassPathContainer
 			}
@@ -651,7 +658,8 @@ public class PasteAction extends SelectionDispatchAction{
 			}
 		}
 
-		public void paste(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, TransferData[] availableTypes) throws JavaModelException, InterruptedException, InvocationTargetException{
+		@Override
+		public void paste(IJavaElement[] javaElements, IResource[] resources, final IWorkingSet[] selectedWorkingSets, TransferData[] availableTypes) throws JavaModelException, InterruptedException, InvocationTargetException{
 			if (fPatchStorage != null) {
 				IResource resource= null;
 				if (resources.length > 0) {
@@ -669,7 +677,7 @@ public class PasteAction extends SelectionDispatchAction{
 			IRunnableWithProgress op= new IRunnableWithProgress() {
 				public void run(IProgressMonitor monitor) throws InvocationTargetException {
 
-					final ArrayList cus= new ArrayList();
+					final ArrayList<ICompilationUnit> cus= new ArrayList<ICompilationUnit>();
 					try {
 						JavaCore.run(new IWorkspaceRunnable() {
 							public void run(IProgressMonitor pm) throws CoreException {
@@ -689,6 +697,15 @@ public class PasteAction extends SelectionDispatchAction{
 										cus.add(cu);
 								}
 
+								if (selectedWorkingSets.length == 1) {
+									IWorkingSet ws= selectedWorkingSets[0];
+									if (!IWorkingSetIDs.OTHERS.equals(ws.getId())) {
+										ArrayList<IAdaptable> newElements= new ArrayList<IAdaptable>();
+										newElements.addAll(Arrays.asList(ws.getElements()));
+										newElements.addAll(Arrays.asList(ws.adaptElements(new IAdaptable[] { fDestination.getJavaProject() })));
+										ws.setElements(newElements.toArray(new IAdaptable[newElements.size()]));
+									}
+								}
 							}
 						}, monitor);
 					} catch (OperationCanceledException e) {
@@ -698,7 +715,7 @@ public class PasteAction extends SelectionDispatchAction{
 					} finally {
 						monitor.done();
 					}
-					IResource[] cuResources= ResourceUtil.getFiles((ICompilationUnit[]) cus.toArray(new ICompilationUnit[cus.size()]));
+					IResource[] cuResources= ResourceUtil.getFiles(cus.toArray(new ICompilationUnit[cus.size()]));
 					SelectionUtil.selectAndReveal(cuResources, PlatformUI.getWorkbench().getActiveWorkbenchWindow());
 				}
 
@@ -786,7 +803,7 @@ public class PasteAction extends SelectionDispatchAction{
 						try {
 							IDocument document= fileBuffer.getDocument();
 
-							ASTParser parser= ASTParser.newParser(AST.JLS3);
+							ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 							parser.setProject(cu.getJavaProject());
 							parser.setSource(document.get().toCharArray());
 							parser.setStatementsRecovery(true);
@@ -813,7 +830,7 @@ public class PasteAction extends SelectionDispatchAction{
 							cuContent= ""; //$NON-NLS-1$
 						IDocument document= new Document(cuContent);
 
-						ASTParser parser= ASTParser.newParser(AST.JLS3);
+						ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 						parser.setProject(cu.getJavaProject());
 						parser.setSource(cuContent.toCharArray());
 						parser.setStatementsRecovery(true);
@@ -942,7 +959,7 @@ public class PasteAction extends SelectionDispatchAction{
 					}
 
 					if (fCompilerCompliance != null) {
-						Map options= javaProject.getOptions(false);
+						Map<String, String> options= javaProject.getOptions(false);
 						JavaModelUtil.setComplianceOptions(options, fCompilerCompliance);
 						JavaModelUtil.setDefaultClassfileOptions(options, fCompilerCompliance);
 						javaProject.setOptions(options);
@@ -1000,7 +1017,7 @@ public class PasteAction extends SelectionDispatchAction{
 			IScanner scanner= ToolFactory.createScanner(false, false, false, false);
 			scanner.setSource(text.toCharArray());
 
-			ArrayList cus= new ArrayList();
+			ArrayList<ParsedCu> cus= new ArrayList<ParsedCu>();
 			int start= 0;
 			boolean tokensScanned= false;
 			fPackageDeclCount= 0;
@@ -1017,14 +1034,14 @@ public class PasteAction extends SelectionDispatchAction{
 					fPackageDeclCount++;
 					if (tokensScanned) {
 						int packageStart= scanner.getCurrentTokenStartPosition();
-						List parsed= ParsedCu.parseCus(javaProject, fCompilerCompliance, text.substring(start, packageStart));
+						List<ParsedCu> parsed= ParsedCu.parseCus(javaProject, fCompilerCompliance, text.substring(start, packageStart));
 						if (parsed.size() > 0) {
 							cus.addAll(parsed);
 							start= packageStart;
 						}
 					}
 				} else if (tok == ITerminalSymbols.TokenNameEOF) {
-					List parsed= ParsedCu.parseCus(javaProject, fCompilerCompliance, text.substring(start, text.length()));
+					List<ParsedCu> parsed= ParsedCu.parseCus(javaProject, fCompilerCompliance, text.substring(start, text.length()));
 					if (parsed.size() > 0) {
 						cus.addAll(parsed);
 					}
@@ -1032,7 +1049,7 @@ public class PasteAction extends SelectionDispatchAction{
 				}
 				tokensScanned= true;
 			}
-			fParsedCus= (ParsedCu[]) cus.toArray(new ParsedCu[cus.size()]);
+			fParsedCus= cus.toArray(new ParsedCu[cus.size()]);
 		}
 
 		private void computeLatestVM() {
@@ -1108,9 +1125,10 @@ public class PasteAction extends SelectionDispatchAction{
 		protected WorkingSetPaster(Shell shell, Clipboard clipboard) {
 			super(shell, clipboard);
 		}
+		@Override
 		public void paste(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, TransferData[] availableTypes) throws JavaModelException, InterruptedException, InvocationTargetException {
 			IWorkingSet workingSet= selectedWorkingSets[0];
-			Set elements= new HashSet(Arrays.asList(workingSet.getElements()));
+			Set<IAdaptable> elements= new HashSet<IAdaptable>(Arrays.asList(workingSet.getElements()));
 			IJavaElement[] javaElements= getClipboardJavaElements(availableTypes);
 			if (javaElements != null) {
 				for (int i= 0; i < javaElements.length; i++) {
@@ -1120,27 +1138,29 @@ public class PasteAction extends SelectionDispatchAction{
 			}
 			IResource[] resources= getClipboardResources(availableTypes);
 			if (resources != null) {
-				List realJavaElements= new ArrayList();
-				List realResource= new ArrayList();
+				List<IJavaElement> realJavaElements= new ArrayList<IJavaElement>();
+				List<IResource> realResource= new ArrayList<IResource>();
 				ReorgUtils.splitIntoJavaElementsAndResources(resources, realJavaElements, realResource);
-				for (Iterator iter= realJavaElements.iterator(); iter.hasNext();) {
-					IJavaElement element= (IJavaElement)iter.next();
+				for (Iterator<IJavaElement> iter= realJavaElements.iterator(); iter.hasNext();) {
+					IJavaElement element= iter.next();
 					if (!ReorgUtils.containsElementOrParent(elements, element))
 						elements.add(element);
 				}
-				for (Iterator iter= realResource.iterator(); iter.hasNext();) {
-					IResource element= (IResource)iter.next();
+				for (Iterator<IResource> iter= realResource.iterator(); iter.hasNext();) {
+					IResource element= iter.next();
 					if (!ReorgUtils.containsElementOrParent(elements, element))
 						elements.add(element);
 				}
 			}
-			workingSet.setElements((IAdaptable[])elements.toArray(new IAdaptable[elements.size()]));
+			workingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
 		}
+		@Override
 		public boolean canEnable(TransferData[] availableTypes) {
 			return isAvailable(ResourceTransfer.getInstance(), availableTypes) ||
 				isAvailable(JavaElementTransfer.getInstance(), availableTypes);
 		}
-		public boolean canPasteOn(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, List selectedElements) throws JavaModelException {
+		@Override
+		public boolean canPasteOn(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements) throws JavaModelException {
 			if (selectedResources.length != 0 || selectedJavaElements.length != 0 || selectedWorkingSets.length != 1)
 				return false;
 			IWorkingSet ws= selectedWorkingSets[0];
@@ -1154,6 +1174,7 @@ public class PasteAction extends SelectionDispatchAction{
 			super(shell, clipboard);
 		}
 
+		@Override
 		public boolean canEnable(TransferData[] availableDataTypes) {
 			boolean resourceTransfer= isAvailable(ResourceTransfer.getInstance(), availableDataTypes);
 			boolean javaElementTransfer= isAvailable(JavaElementTransfer.getInstance(), availableDataTypes);
@@ -1164,6 +1185,7 @@ public class PasteAction extends SelectionDispatchAction{
 			return canPasteJavaProjects(availableDataTypes) && canPasteSimpleProjects(availableDataTypes);
     	}
 
+		@Override
 		public void paste(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, TransferData[] availableTypes) {
 			pasteProjects(availableTypes);
 		}
@@ -1181,16 +1203,17 @@ public class PasteAction extends SelectionDispatchAction{
 		private IProject[] getProjectsToPaste(TransferData[] availableTypes) {
 			IResource[] resources= getClipboardResources(availableTypes);
 			IJavaElement[] javaElements= getClipboardJavaElements(availableTypes);
-			Set result= new HashSet();
+			Set<IResource> result= new HashSet<IResource>();
 			if (resources != null)
 				result.addAll(Arrays.asList(resources));
 			if (javaElements != null)
 				result.addAll(Arrays.asList(ReorgUtils.getNotNulls(ReorgUtils.getResources(javaElements))));
 			Assert.isTrue(result.size() > 0);
-			return (IProject[]) result.toArray(new IProject[result.size()]);
+			return result.toArray(new IProject[result.size()]);
 		}
 
-		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List selectedElements) {
+		@Override
+		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements) {
 			return selectedWorkingSets.length == 0; // Can't paste on working sets here
 		}
 
@@ -1217,6 +1240,7 @@ public class PasteAction extends SelectionDispatchAction{
 			super(shell, clipboard);
 		}
 
+		@Override
 		public void paste(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, TransferData[] availableTypes) throws JavaModelException {
 			String[] fileData= getClipboardFiles(availableTypes);
 			if (fileData == null)
@@ -1239,11 +1263,13 @@ public class PasteAction extends SelectionDispatchAction{
 				return getCommonParent(javaElements, resources);
 		}
 
-		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List selectedElements) throws JavaModelException {
+		@Override
+		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements) throws JavaModelException {
 			Object target= getTarget(javaElements, resources);
 			return target != null && canPasteFilesOn(getAsContainer(target)) && selectedWorkingSets.length == 0;
 		}
 
+		@Override
 		public boolean canEnable(TransferData[] availableDataTypes) {
 			return isAvailable(FileTransfer.getInstance(), availableDataTypes);
 		}
@@ -1300,6 +1326,7 @@ public class PasteAction extends SelectionDispatchAction{
 
 		private TransferData[] fAvailableTypes;
 
+		@Override
 		public void paste(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, TransferData[] availableTypes) throws JavaModelException, InterruptedException, InvocationTargetException{
 			IResource[] clipboardResources= getClipboardResources(availableTypes);
 			if (clipboardResources == null)
@@ -1328,7 +1355,8 @@ public class PasteAction extends SelectionDispatchAction{
 			return new ParentChecker(resources, javaElements).getCommonParent();
 		}
 
-		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List selectedElements) throws JavaModelException {
+		@Override
+		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements) throws JavaModelException {
 			if (selectedWorkingSets.length != 0)
 				return false;
 			IResource[] clipboardResources= getClipboardResources(fAvailableTypes);
@@ -1341,6 +1369,7 @@ public class PasteAction extends SelectionDispatchAction{
 			return ReorgCopyStarter.create(clipboardJavaElements, clipboardResources, ReorgDestinationFactory.createDestination(destination)) != null;
 		}
 
+		@Override
 		public boolean canEnable(TransferData[] availableTypes) {
 			fAvailableTypes= availableTypes;
 			return isAvailable(JavaElementTransfer.getInstance(), availableTypes) || isAvailable(ResourceTransfer.getInstance(), availableTypes);
@@ -1354,12 +1383,14 @@ public class PasteAction extends SelectionDispatchAction{
 		}
 		private TransferData[] fAvailableTypes;
 
+		@Override
 		public boolean canEnable(TransferData[] availableTypes) {
 			fAvailableTypes= availableTypes;
 			return isAvailable(TypedSourceTransfer.getInstance(), availableTypes);
 		}
 
-		public boolean canPasteOn(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, List selectedElements) throws JavaModelException {
+		@Override
+		public boolean canPasteOn(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements) throws JavaModelException {
 			if (selectedResources.length != 0 || selectedWorkingSets.length != 0)
 				return false;
 			TypedSource[] typedSources= getClipboardTypedSources(fAvailableTypes);
@@ -1369,6 +1400,7 @@ public class PasteAction extends SelectionDispatchAction{
 			return false;
 		}
 
+		@Override
 		public void paste(IJavaElement[] selectedJavaElements, IResource[] selectedResources, IWorkingSet[] selectedWorkingSets, TransferData[] availableTypes) throws JavaModelException, InterruptedException, InvocationTargetException {
 			TypedSource[] typedSources= getClipboardTypedSources(availableTypes);
 			IJavaElement destination= getTarget(selectedJavaElements, selectedResources);
@@ -1472,18 +1504,21 @@ public class PasteAction extends SelectionDispatchAction{
 				return sources != null && sources.length > 0;
 			}
 
+			@Override
 			public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException {
 				return new RefactoringStatus();
 			}
 
+			@Override
 			public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 				RefactoringStatus result= Checks.validateModifiesFiles(
 					ResourceUtil.getFiles(new ICompilationUnit[]{getDestinationCu()}), getValidationContext());
 				return result;
 			}
 
+			@Override
 			public Change createChange(IProgressMonitor pm) throws CoreException {
-				ASTParser p= ASTParser.newParser(AST.JLS3);
+				ASTParser p= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 				p.setSource(getDestinationCu());
 				CompilationUnit cuNode= (CompilationUnit) p.createAST(pm);
 				ASTRewrite rewrite= ASTRewrite.create(cuNode.getAST());
@@ -1597,6 +1632,7 @@ public class PasteAction extends SelectionDispatchAction{
 				return ReorgUtils.getCompilationUnit(fDestination);
 			}
 
+			@Override
 			public String getName() {
 				return ReorgMessages.PasteAction_name;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameCuWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameCuWizard.java
index 30b8092..ee2fd28 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameCuWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameCuWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class RenameCuWizard extends RenameTypeWizard {
 			IJavaHelpContextIds.RENAME_CU_WIZARD_PAGE);
 	}
 
+	@Override
 	protected RefactoringStatus validateNewName(String newName) {
 		String fullName= JavaModelUtil.getRenamedCUName(getCompilationUnit(), newName);
 		return super.validateNewName(fullName);
@@ -46,11 +47,14 @@ public class RenameCuWizard extends RenameTypeWizard {
 		return (ICompilationUnit) getCompilationUnitProcessor().getElements()[0];
 	}
 
+	@Override
 	protected RenameInputWizardPage createInputPage(String message, String initialSetting) {
 		return new RenameTypeWizardInputPage(message, IJavaHelpContextIds.RENAME_CU_WIZARD_PAGE, true, initialSetting) {
+			@Override
 			protected RefactoringStatus validateTextField(String text) {
 				return validateNewName(text);
 			}
+			@Override
 			protected String getNewName(INameUpdating nameUpdating) {
 				String result= nameUpdating.getNewElementName();
 				// If renaming a CU we have to remove the java file extension
@@ -59,6 +63,7 @@ public class RenameCuWizard extends RenameTypeWizard {
 		};
 	}
 
+	@Override
 	protected boolean isRenameType() {
 		// the flag 'willRenameType' may change in checkInitialConditions(), but
 		// only from true to false.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameEnumConstWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameEnumConstWizard.java
index 242cfad..0bf182d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameEnumConstWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameEnumConstWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,9 +23,11 @@ public final class RenameEnumConstWizard extends RenameRefactoringWizard {
 		super(refactoring, RefactoringMessages.RenameEnumConstWizard_defaultPageTitle, RefactoringMessages.RenameEnumConstWizard_inputPage_description, JavaPluginImages.DESC_WIZBAN_REFACTOR_FIELD, IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE);
 	}
 
+	@Override
 	protected RenameInputWizardPage createInputPage(String message, String initialSetting) {
 		return new RenameInputWizardPage(message, IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE, true, initialSetting) {
 
+			@Override
 			protected RefactoringStatus validateTextField(String text) {
 				return validateNewName(text);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameFieldWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameFieldWizard.java
index 440c4eb..360ea1f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameFieldWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameFieldWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,8 +48,10 @@ public class RenameFieldWizard extends RenameRefactoringWizard {
 			IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE);
 	}
 
+	@Override
 	protected RenameInputWizardPage createInputPage(String message, String initialSetting) {
 		return new RenameFieldInputWizardPage(message, IJavaHelpContextIds.RENAME_FIELD_WIZARD_PAGE, initialSetting) {
+			@Override
 			protected RefactoringStatus validateTextField(String text) {
 				RefactoringStatus result= validateNewName(text);
 				updateGetterSetterLabels();
@@ -69,6 +71,7 @@ public class RenameFieldWizard extends RenameRefactoringWizard {
 			super(message, contextHelpId, true, initialValue);
 		}
 
+		@Override
 		public void createControl(Composite parent) {
 			super.createControl(parent);
 			Composite parentComposite= (Composite)getControl();
@@ -93,6 +96,7 @@ public class RenameFieldWizard extends RenameRefactoringWizard {
 			getRenameFieldProcessor().setRenameGetter(getterSelection);
 			fRenameGetter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			fRenameGetter.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getRenameFieldProcessor().setRenameGetter(fRenameGetter.getSelection());
 					updateLeaveDelegateCheckbox(getRenameFieldProcessor().getDelegateCount());
@@ -107,6 +111,7 @@ public class RenameFieldWizard extends RenameRefactoringWizard {
 			getRenameFieldProcessor().setRenameSetter(setterSelection);
 			fRenameSetter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			fRenameSetter.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getRenameFieldProcessor().setRenameSetter(fRenameSetter.getSelection());
 					updateLeaveDelegateCheckbox(getRenameFieldProcessor().getDelegateCount());
@@ -118,6 +123,7 @@ public class RenameFieldWizard extends RenameRefactoringWizard {
 			Dialog.applyDialogFont(composite);
 		}
 
+		@Override
 		public void dispose() {
 			if (saveSettings()) {
 				if (fRenameGetter.isEnabled())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java
index 6bc5749..f559237 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -305,6 +305,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 		// Leave linked mode when popup loses focus
 		// (except when focus goes back to workbench window or menu is open):
 		fPopup.addShellListener(new ShellAdapter() {
+			@Override
 			public void shellDeactivated(ShellEvent e) {
 				if (fIsMenuUp)
 					return;
@@ -335,6 +336,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 //		fPopup.moveBelow(workbenchShell.getShells()[0]);
 
 		UIJob delayJob= new UIJob(display, ReorgMessages.RenameInformationPopup_delayJobName) {
+			@Override
 			public IStatus runInUIThread(IProgressMonitor monitor) {
 				fDelayJobFinished= true;
 				if (fPopup != null && ! fPopup.isDisposed()) {
@@ -495,6 +497,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 	private void addMoveSupport(final Shell popupShell, final Control movedControl) {
 		movedControl.addMouseListener(new MouseAdapter() {
 
+			@Override
 			public void mouseDown(final MouseEvent downEvent) {
 				if (downEvent.button != 1) {
 					return;
@@ -538,6 +541,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 					/*
 					 * @see org.eclipse.swt.events.ControlAdapter#controlMoved(org.eclipse.swt.events.ControlEvent)
 					 */
+					@Override
 					public void controlMoved(ControlEvent moveEvent) {
 						Rectangle[] currentRects= tracker.getRectangles();
 						final Rectangle mouseMoveCurrent= currentRects[0];
@@ -692,11 +696,13 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 		menuButton.setImage(fMenuImage);
 		menuButton.setToolTipText(ReorgMessages.RenameInformationPopup_menu);
 		fToolBar.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseDown(MouseEvent e) {
 				showMenu(fToolBar);
 			}
 		});
 		menuButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				showMenu(fToolBar);
 			}
@@ -728,6 +734,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 				boolean canRefactor= ! fRenameLinkedMode.isOriginalName();
 				
 				IAction refactorAction= new Action(ReorgMessages.RenameInformationPopup_RenameInWorkspace) {
+					@Override
 					public void run() {
 						activateEditor();
 						fRenameLinkedMode.doRename(false);
@@ -738,6 +745,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 				manager.add(refactorAction);
 
 				IAction previewAction= new Action(ReorgMessages.RenameInformationPopup_Preview) {
+					@Override
 					public void run() {
 						activateEditor();
 						fRenameLinkedMode.doRename(true);
@@ -748,6 +756,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 				manager.add(previewAction);
 
 				IAction openDialogAction= new Action(ReorgMessages.RenameInformationPopup_OpenDialog + '\t' + fOpenDialogBinding) {
+					@Override
 					public void run() {
 						activateEditor();
 						fRenameLinkedMode.startFullDialog();
@@ -766,6 +775,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 				manager.add(subMenuManager);
 
 				IAction prefsAction= new Action(ReorgMessages.RenameInformationPopup_preferences) {
+					@Override
 					public void run() {
 						fRenameLinkedMode.cancel();
 						String linkedModePrefPageID= "org.eclipse.ui.editors.preferencePages.LinkedModePreferencePage"; //$NON-NLS-1$
@@ -781,6 +791,7 @@ public class RenameInformationPopup implements IWidgetTokenKeeper, IWidgetTokenK
 
 	private void addMoveMenuItem(IMenuManager manager, final int snapPosition, String text) {
 		IAction action= new Action(text, IAction.AS_RADIO_BUTTON) {
+			@Override
 			public void run() {
 				fSnapPosition= snapPosition;
 				fSnapPositionChanged= true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java
index e9d4b56..004b7d4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -118,6 +118,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		// none by default
 	}
 
+	@Override
 	public void setVisible(boolean visible) {
 		if (visible) {
 			INameUpdating nameUpdating= (INameUpdating)getRefactoring().getAdapter(INameUpdating.class);
@@ -152,6 +153,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		return true;
 	}
 
+	@Override
 	public void dispose() {
 		if (saveSettings()) {
 			saveBooleanSetting(RenameRefactoringWizard.UPDATE_TEXTUAL_MATCHES, fUpdateTextualMatches);
@@ -173,6 +175,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		fUpdateReferences= createCheckbox(result, title, defaultValue, layouter);
 		ref.setUpdateReferences(fUpdateReferences.getSelection());
 		fUpdateReferences.addSelectionListener(new SelectionAdapter(){
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				ref.setUpdateReferences(fUpdateReferences.getSelection());
 			}
@@ -188,6 +191,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		fUpdateTextualMatches= createCheckbox(result, title, defaultValue, layouter);
 		refactoring.setUpdateTextualMatches(fUpdateTextualMatches.getSelection());
 		fUpdateTextualMatches.addSelectionListener(new SelectionAdapter(){
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				refactoring.setUpdateTextualMatches(fUpdateTextualMatches.getSelection());
 				updateForcePreview();
@@ -215,6 +219,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		updateQulifiedNameUpdating(ref, defaultSelection);
 
 		fUpdateQualifiedNames.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				boolean enabled= ((Button)e.widget).getSelection();
 				updateQulifiedNameUpdating(ref, enabled);
@@ -235,6 +240,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		fLeaveDelegateCheckBox= createCheckbox(result, refactoring.getDelegateUpdatingTitle(false), DelegateUIHelper.loadLeaveDelegateSetting(refactoring), layouter);
 		refactoring.setDelegateUpdating(fLeaveDelegateCheckBox.getSelection());
 		fLeaveDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				refactoring.setDelegateUpdating(fLeaveDelegateCheckBox.getSelection());
 			}
@@ -255,6 +261,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		layouter.perform(fDeprecateDelegateCheckBox);
 		refactoring.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 		fDeprecateDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				refactoring.setDeprecateDelegates(fDeprecateDelegateCheckBox.getSelection());
 			}
@@ -262,6 +269,7 @@ abstract class RenameInputWizardPage extends TextInputWizardPage {
 		if (fLeaveDelegateCheckBox != null) {
 			fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 			fLeaveDelegateCheckBox.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fDeprecateDelegateCheckBox.setEnabled(fLeaveDelegateCheckBox.getSelection());
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java
index 4d5d08d..b08eb9f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,9 +52,9 @@ import org.eclipse.jface.text.IUndoManagerExtension;
 import org.eclipse.jface.text.link.ILinkedModeListener;
 import org.eclipse.jface.text.link.LinkedModeModel;
 import org.eclipse.jface.text.link.LinkedModeUI;
+import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags;
 import org.eclipse.jface.text.link.LinkedPosition;
 import org.eclipse.jface.text.link.LinkedPositionGroup;
-import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags;
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.text.source.SourceViewer;
 
@@ -132,6 +132,7 @@ public class RenameLinkedMode {
 			super(document);
 		}
 
+		@Override
 		public ExitFlags doExit(LinkedModeModel model, VerifyEvent event, int offset, int length) {
 			fShowPreview= (event.stateMask & SWT.CTRL) != 0
 							&& (event.character == SWT.CR || event.character == SWT.LF);
@@ -226,9 +227,9 @@ public class RenameLinkedMode {
 
 			//TODO: copied from LinkedNamesAssistProposal#apply(..):
 			// sort for iteration order, starting with the node @ offset
-			Arrays.sort(sameNodes, new Comparator() {
-				public int compare(Object o1, Object o2) {
-					return rank((ASTNode) o1) - rank((ASTNode) o2);
+			Arrays.sort(sameNodes, new Comparator<ASTNode>() {
+				public int compare(ASTNode o1, ASTNode o2) {
+					return rank(o1) - rank(o2);
 				}
 				/**
 				 * Returns the absolute rank of an <code>ASTNode</code>. Nodes
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameMethodUserInterfaceStarter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameMethodUserInterfaceStarter.java
index 6eec818..7b45f49 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameMethodUserInterfaceStarter.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameMethodUserInterfaceStarter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class RenameMethodUserInterfaceStarter extends RenameUserInterfaceStarter
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.refactoring.reorg.RenameUserInterfaceStarter#activate(org.eclipse.jdt.internal.corext.refactoring.base.Refactoring, org.eclipse.swt.widgets.Shell)
 	 */
+	@Override
 	public boolean activate(Refactoring refactoring, Shell parent, int saveMode) throws CoreException {
 		RenameVirtualMethodProcessor processor= (RenameVirtualMethodProcessor)refactoring.getAdapter(RenameVirtualMethodProcessor.class);
 		if (processor != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenamePackageWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenamePackageWizard.java
index 508d1ae..a022950 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenamePackageWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenamePackageWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,8 +40,10 @@ public class RenamePackageWizard extends RenameRefactoringWizard {
 			IJavaHelpContextIds.RENAME_PACKAGE_WIZARD_PAGE);
 	}
 
+	@Override
 	protected RenameInputWizardPage createInputPage(String message, String initialSetting) {
 		return new RenamePackageInputWizardPage(message, IJavaHelpContextIds.RENAME_PACKAGE_WIZARD_PAGE, initialSetting) {
+			@Override
 			protected RefactoringStatus validateTextField(String text) {
 				return validateNewName(text);
 			}
@@ -55,6 +57,7 @@ public class RenamePackageWizard extends RenameRefactoringWizard {
 			super(message, contextHelpId, true, initialValue);
 		}
 
+		@Override
 		protected void addAdditionalOptions(Composite composite, RowLayouter layouter) {
 			fRenameSubpackages= new Button(composite, SWT.CHECK);
 			fRenameSubpackages.setText(RefactoringMessages.RenamePackageWizard_rename_subpackages);
@@ -63,6 +66,7 @@ public class RenamePackageWizard extends RenameRefactoringWizard {
 			getRenamePackageProcessor().setRenameSubpackages(subpackagesSelection);
 			fRenameSubpackages.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			fRenameSubpackages.addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					getRenamePackageProcessor().setRenameSubpackages(fRenameSubpackages.getSelection());
 
@@ -79,6 +83,7 @@ public class RenamePackageWizard extends RenameRefactoringWizard {
 			layouter.perform(separator);
 		}
 
+		@Override
 		public void dispose() {
 			if (saveSettings() && fRenameSubpackages.isEnabled())
 				saveBooleanSetting(RenameRefactoringWizard.PACKAGE_RENAME_SUBPACKAGES, fRenameSubpackages);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameRefactoringWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameRefactoringWizard.java
index ec5e0df..a5cfce5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameRefactoringWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameRefactoringWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class RenameRefactoringWizard extends RefactoringWizard {
 	/* non java-doc
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 		String initialSetting= getNameUpdating().getCurrentElementName();
 		RenameInputWizardPage inputPage= createInputPage(fInputPageDescription, initialSetting);
@@ -97,6 +98,7 @@ public class RenameRefactoringWizard extends RefactoringWizard {
 
 	protected RenameInputWizardPage createInputPage(String message, String initialSetting) {
 		return new RenameInputWizardPage(message, fPageContextHelpId, true, initialSetting) {
+			@Override
 			protected RefactoringStatus validateTextField(String text) {
 				return validateNewName(text);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java
index b6ecd4c..8c90f67 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,13 +35,13 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 public class RenameSelectionState {
 	private final Display fDisplay;
 	private final Object fElement;
-	private final List fParts;
-	private final List fSelections;
+	private final List<IWorkbenchPart> fParts;
+	private final List<IStructuredSelection> fSelections;
 
 	public RenameSelectionState(Object element) {
 		fElement= element;
-		fParts= new ArrayList();
-		fSelections= new ArrayList();
+		fParts= new ArrayList<IWorkbenchPart>();
+		fSelections= new ArrayList<IStructuredSelection>();
 
 		IWorkbenchWindow dw = JavaPlugin.getActiveWorkbenchWindow();
 		if (dw ==  null) {
@@ -90,7 +90,7 @@ public class RenameSelectionState {
 		if (fDisplay == null)
 			return;
 		for (int i= 0; i < fParts.size(); i++) {
-			IStructuredSelection currentSelection= (IStructuredSelection)fSelections.get(i);
+			IStructuredSelection currentSelection= fSelections.get(i);
 			boolean changed= false;
 			final ISetSelectionTarget target= (ISetSelectionTarget)fParts.get(i);
 			final IStructuredSelection[] newSelection= new IStructuredSelection[1];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizard.java
index b7978d2..620e0ea 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class RenameTypeWizard extends RenameRefactoringWizard {
 	 *
 	 * @see RefactoringWizard#addUserInputPages
 	 */
+	@Override
 	protected void addUserInputPages() {
 		super.addUserInputPages();
 		if (isRenameType())
@@ -68,9 +69,11 @@ public class RenameTypeWizard extends RenameRefactoringWizard {
 		return true;
 	}
 
+	@Override
 	protected RenameInputWizardPage createInputPage(String message, String initialSetting) {
 		return new RenameTypeWizardInputPage(message, IJavaHelpContextIds.RENAME_TYPE_WIZARD_PAGE, true, initialSetting) {
 
+			@Override
 			protected RefactoringStatus validateTextField(String text) {
 				return validateNewName(text);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardInputPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardInputPage.java
index 89f725d..5340474 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardInputPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardInputPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ class RenameTypeWizardInputPage extends RenameInputWizardPage {
 		super(description, contextHelpId, isLastUserPage, initialValue);
 	}
 
+	@Override
 	protected void addAdditionalOptions(Composite composite, RowLayouter layouter) {
 
 		if (getSimilarElementUpdating() == null || !getSimilarElementUpdating().canEnableSimilarDeclarationUpdating())
@@ -82,6 +83,7 @@ class RenameTypeWizardInputPage extends RenameInputWizardPage {
 		fUpdateSimilarElements.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		fUpdateSimilarElements.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				getSimilarElementUpdating().setUpdateSimilarDeclarations(fUpdateSimilarElements.getSelection());
 				fUpdateSimilarElementsButton.setEnabled(fUpdateSimilarElements.getSelection());
@@ -96,6 +98,7 @@ class RenameTypeWizardInputPage extends RenameInputWizardPage {
 		fUpdateSimilarElementsButton.setEnabled(updateSimilarElements);
 		fUpdateSimilarElementsButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				RenameTypeWizardSimilarElementsOptionsDialog dialog= new RenameTypeWizardSimilarElementsOptionsDialog(getShell(), fSelectedStrategy);
 				if (dialog.open() == Window.OK) {
@@ -117,6 +120,7 @@ class RenameTypeWizardInputPage extends RenameInputWizardPage {
 		layouter.perform(separator);
 	}
 
+	@Override
 	public void dispose() {
 		if (saveSettings())
 			if (fUpdateSimilarElements != null && !fUpdateSimilarElements.isDisposed() && fUpdateSimilarElements.isEnabled()) {
@@ -132,6 +136,7 @@ class RenameTypeWizardInputPage extends RenameInputWizardPage {
 	 * trigger change creation if similar elements page is skipped, which is not
 	 * indicated by fIsLastUserInputPage in parent).
 	 */
+	@Override
 	public boolean canFlipToNextPage() {
 		return isPageComplete();
 	}
@@ -140,6 +145,7 @@ class RenameTypeWizardInputPage extends RenameInputWizardPage {
 		return (ISimilarDeclarationUpdating) getRefactoring().getAdapter(ISimilarDeclarationUpdating.class);
 	}
 
+	@Override
 	protected boolean performFinish() {
 		boolean returner= super.performFinish();
 		// check if we got deferred to the error page
@@ -151,6 +157,7 @@ class RenameTypeWizardInputPage extends RenameInputWizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.ui.refactoring.UserInputWizardPage#getNextPage()
 	 */
+	@Override
 	public IWizardPage getNextPage() {
 		RenameTypeWizard wizard= (RenameTypeWizard) getWizard();
 		IWizardPage nextPage;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsOptionsDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsOptionsDialog.java
index 41d1bc4..58663c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsOptionsDialog.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsOptionsDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ public class RenameTypeWizardSimilarElementsOptionsDialog extends MessageDialog
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -65,6 +66,7 @@ public class RenameTypeWizardSimilarElementsOptionsDialog extends MessageDialog
 	 *
 	 * @see org.eclipse.jface.dialogs.IconAndMessageDialog#createMessageArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createMessageArea(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -157,6 +159,7 @@ public class RenameTypeWizardSimilarElementsOptionsDialog extends MessageDialog
 	}
 
 
+	@Override
 	protected boolean customShouldTakeFocus() {
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java
index 4822461..0b56a01 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -136,6 +136,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 * @since 3.4
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
@@ -145,6 +146,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		 *
 		 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			final Composite composite= (Composite) super.createDialogArea(parent);
 			LayoutUtil.doDefaultLayout(composite, new DialogField[] { fNameField }, true, SWT.DEFAULT, SWT.DEFAULT);
@@ -206,14 +208,14 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 
 	private static class SimilarElementTreeContentProvider implements ITreeContentProvider {
 
-		private Map/* <IJavaElement,Set<IJavaElement>> */fTreeElementMap;
-		private Set/* <ICompilationUnit> */fTopLevelElements;
+		private Map<IJavaElement, Set<IJavaElement>> fTreeElementMap;
+		private Set<ICompilationUnit> fTopLevelElements;
 
 		/*
 		 * @see ITreeContentProvider#getChildren(Object)
 		 */
 		public Object[] getChildren(Object parentElement) {
-			final Set children= (Set) fTreeElementMap.get(parentElement);
+			final Set<IJavaElement> children= fTreeElementMap.get(parentElement);
 			if (children != null)
 				return children.toArray();
 			else
@@ -264,10 +266,11 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 			Assert.isTrue(newInput == null || newInput instanceof Map);
 			if (newInput == null)
 				return;
-			final Map similarElementsMap= (Map) newInput;
-			final IJavaElement[] similarElements= (IJavaElement[]) similarElementsMap.keySet().toArray(new IJavaElement[0]);
-			fTreeElementMap= new HashMap();
-			fTopLevelElements= new HashSet();
+			@SuppressWarnings("unchecked")
+			final Map<IJavaElement, String> similarElementsMap= (Map<IJavaElement, String>) newInput;
+			final IJavaElement[] similarElements= similarElementsMap.keySet().toArray(new IJavaElement[0]);
+			fTreeElementMap= new HashMap<IJavaElement, Set<IJavaElement>>();
+			fTopLevelElements= new HashSet<ICompilationUnit>();
 			for (int i= 0; i < similarElements.length; i++) {
 				final IType declaring= (IType) similarElements[i].getAncestor(IJavaElement.TYPE);
 				if (similarElements[i] instanceof IMember) {
@@ -290,7 +293,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 
 			final IJavaElement enclosing= someType.getParent();
 			if (enclosing instanceof ICompilationUnit) {
-				fTopLevelElements.add(someType.getParent());
+				fTopLevelElements.add((ICompilationUnit) enclosing);
 				addToMap(someType.getParent(), someType);
 			} else {
 				addToMap(enclosing, someType);
@@ -299,9 +302,9 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		}
 
 		private void addToMap(final IJavaElement key, final IJavaElement element) {
-			Set elements= (Set) fTreeElementMap.get(key);
+			Set<IJavaElement> elements= fTreeElementMap.get(key);
 			if (elements == null) {
-				elements= new HashSet();
+				elements= new HashSet<IJavaElement>();
 				fTreeElementMap.put(key, elements);
 			}
 			elements.add(element);
@@ -311,27 +314,28 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 
 	private static class SimilarLabelProvider extends JavaElementLabelProvider {
 
-		private Map fDescriptorImageMap= new HashMap();
-		private Map fElementToNewName;
+		private Map<ImageDescriptor, Image> fDescriptorImageMap= new HashMap<ImageDescriptor, Image>();
+		private Map<IJavaElement, String> fElementToNewName;
 
 		public SimilarLabelProvider() {
 			super(JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_SMALL_ICONS);
 		}
 
-		public void initialize(Map elementToNewName) {
+		public void initialize(Map<IJavaElement, String> elementToNewName) {
 			this.fElementToNewName= elementToNewName;
 		}
 
+		@Override
 		public void dispose() {
-			for (Iterator iter= fDescriptorImageMap.values().iterator(); iter.hasNext();) {
-				Image image= (Image) iter.next();
+			for (Iterator<Image> iter= fDescriptorImageMap.values().iterator(); iter.hasNext();) {
+				Image image= iter.next();
 				image.dispose();
 			}
 			super.dispose();
 		}
 
 		private Image manageImageDescriptor(ImageDescriptor descriptor) {
-			Image image= (Image) fDescriptorImageMap.get(descriptor);
+			Image image= fDescriptorImageMap.get(descriptor);
 			if (image == null) {
 				image= descriptor.createImage();
 				fDescriptorImageMap.put(descriptor, image);
@@ -339,6 +343,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 			return image;
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			if (isSimilarElement(element))
 				return manageImageDescriptor(JavaPluginImages.DESC_OBJS_DEFAULT_CHANGE);
@@ -349,9 +354,10 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 			return super.getImage(element);
 		}
 
+		@Override
 		public String getText(Object element) {
 			if (isSimilarElement(element)) {
-				return Messages.format(RefactoringMessages.RenameTypeWizardSimilarElementsPage_rename_to, new String[] { super.getText(element), (String)fElementToNewName.get(element) } );
+				return Messages.format(RefactoringMessages.RenameTypeWizardSimilarElementsPage_rename_to, new String[] { super.getText(element), fElementToNewName.get(element) } );
 			}
 			return super.getText(element);
 		}
@@ -368,6 +374,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		 * (non-Javadoc)
 		 * @see org.eclipse.jdt.ui.JavaElementSorter#category(java.lang.Object)
 		 */
+		@Override
 		public int category(Object element) {
 
 			/*
@@ -407,7 +414,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 	private SourceViewer fSourceViewer;
 	private ContainerCheckedTreeViewer fTreeViewer;
 	private SimilarLabelProvider fTreeViewerLabelProvider;
-	private Map fSimilarElementsToNewName;
+	private Map<IJavaElement, String> fSimilarElementsToNewName;
 	private Button fEditElementButton;
 	private boolean fWasInitialized;
 	private CLabel fCurrentElementLabel;
@@ -546,6 +553,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		SWTUtil.setButtonDimensionHint(returnToDefaults);
 		returnToDefaults.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				RenameTypeWizardSimilarElementsPage.this.resetDataInRefAndUI();
 			}
@@ -557,6 +565,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		SWTUtil.setButtonDimensionHint(fEditElementButton);
 		fEditElementButton.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				RenameTypeWizardSimilarElementsPage.this.editCurrentElement();
 			}
@@ -566,6 +575,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 
 	// ---------------------- Acting
 
+	@Override
 	public void setVisible(boolean visible) {
 		if (visible) {
 			initializeUIFromRef();
@@ -605,7 +615,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 
 	private void initializeUIFromRef() {
 		// Get data from the refactoring
-		final Map elementsToNewNames= getRenameTypeProcessor().getSimilarElementsToNewNames();
+		final Map<IJavaElement, String> elementsToNewNames= getRenameTypeProcessor().getSimilarElementsToNewNames();
 		try {
 			// To prevent flickering, stop redrawing
 			getShell().setRedraw(false);
@@ -624,9 +634,9 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 
 	private void initializeRefFromUI() {
 		IJavaElement[] selected= getCheckedSimilarElements();
-		Map selection= getRenameTypeProcessor().getSimilarElementsToSelection();
-		for (Iterator iter= selection.keySet().iterator(); iter.hasNext();) {
-			IJavaElement element= (IJavaElement) iter.next();
+		Map<IJavaElement, Boolean> selection= getRenameTypeProcessor().getSimilarElementsToSelection();
+		for (Iterator<IJavaElement> iter= selection.keySet().iterator(); iter.hasNext();) {
+			IJavaElement element= iter.next();
 			selection.put(element, Boolean.FALSE);
 		}
 		for (int i= 0; i < selected.length; i++)
@@ -643,7 +653,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		IStructuredSelection selection= (IStructuredSelection) fTreeViewer.getSelection();
 		if ( (selection != null) && isSimilarElement(selection.getFirstElement())) {
 			IJavaElement element= (IJavaElement) selection.getFirstElement();
-			String newName= (String) fSimilarElementsToNewName.get(element);
+			String newName= fSimilarElementsToNewName.get(element);
 			if (newName == null)
 				return;
 			EditElementDialog dialog= new EditElementDialog(getShell(), element, newName);
@@ -657,11 +667,11 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 		}
 	}
 
-	private void restoreSelectionAndNames(final Map selection) {
-		final Map selectedElements= selection;
-		for (Iterator iter= selectedElements.keySet().iterator(); iter.hasNext();) {
-			IJavaElement element= (IJavaElement) iter.next();
-			boolean isSelected= ((Boolean) selectedElements.get(element)).booleanValue();
+	private void restoreSelectionAndNames(final Map<IJavaElement, Boolean> selection) {
+		final Map<IJavaElement, Boolean> selectedElements= selection;
+		for (Iterator<IJavaElement> iter= selectedElements.keySet().iterator(); iter.hasNext();) {
+			IJavaElement element= iter.next();
+			boolean isSelected= selectedElements.get(element).booleanValue();
 			fTreeViewer.setChecked(element, isSelected);
 			fTreeViewer.update(element, null);
 		}
@@ -672,6 +682,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 	/*
 	 * @see IWizardPage#getNextPage()
 	 */
+	@Override
 	public IWizardPage getNextPage() {
 		if (fWasInitialized)
 			initializeRefFromUI();
@@ -687,6 +698,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 	/*
 	 * @see IWizardPage#getPreviousPage()
 	 */
+	@Override
 	public IWizardPage getPreviousPage() {
 		if (fWasInitialized)
 			initializeRefFromUI();
@@ -696,6 +708,7 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 	/*
 	 * @see RefactoringWizardPage#performFinish()
 	 */
+	@Override
 	protected boolean performFinish() {
 		initializeRefFromUI();
 		return super.performFinish();
@@ -771,12 +784,12 @@ class RenameTypeWizardSimilarElementsPage extends UserInputWizardPage {
 
 	private IJavaElement[] getCheckedSimilarElements() {
 		Object[] checked= fTreeViewer.getCheckedElements();
-		List elements= new ArrayList(checked.length);
+		List<IJavaElement> elements= new ArrayList<IJavaElement>(checked.length);
 		for (int i= 0; i < checked.length; i++) {
 			if (isSimilarElement(checked[i]))
-				elements.add(checked[i]);
+				elements.add((IJavaElement) checked[i]);
 		}
-		return (IJavaElement[]) elements.toArray(new IJavaElement[elements.size()]);
+		return elements.toArray(new IJavaElement[elements.size()]);
 	}
 
 	public RenameTypeProcessor getRenameTypeProcessor() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameUserInterfaceStarter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameUserInterfaceStarter.java
index 4ea0fbc..343097b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameUserInterfaceStarter.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameUserInterfaceStarter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ import org.eclipse.jdt.internal.ui.refactoring.UserInterfaceStarter;
 
 public class RenameUserInterfaceStarter extends UserInterfaceStarter {
 
+	@Override
 	public boolean activate(Refactoring refactoring, Shell parent, int saveMode) throws CoreException {
 		RenameProcessor processor= (RenameProcessor)refactoring.getAdapter(RenameProcessor.class);
 		Object[] elements= processor.getElements();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyAction.java
index 8d71b26..f5522ab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class ReorgCopyAction extends SelectionDispatchAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.COPY_ACTION);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		if (!selection.isEmpty()) {
 			if (ReorgUtils.containsOnlyProjects(selection.toList())) {
@@ -53,7 +54,7 @@ public class ReorgCopyAction extends SelectionDispatchAction {
 				return;
 			}
 			try {
-				List elements= selection.toList();
+				List<?> elements= selection.toList();
 				IResource[] resources= ReorgUtils.getResources(elements);
 				IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 				if (elements.size() != resources.length + javaElements.length)
@@ -77,13 +78,14 @@ public class ReorgCopyAction extends SelectionDispatchAction {
 		return action;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (ReorgUtils.containsOnlyProjects(selection.toList())){
 			createWorkbenchAction(selection).run();
 			return;
 		}
 		try {
-			List elements= selection.toList();
+			List<?> elements= selection.toList();
 			IResource[] resources= ReorgUtils.getResources(elements);
 			IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 			if (RefactoringAvailabilityTester.isCopyAvailable(resources, javaElements))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyWizard.java
index 8f95a4b..e209099 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgCopyWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class ReorgCopyWizard extends RefactoringWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.refactoring.RefactoringWizard#addUserInputPages()
 	 */
+	@Override
 	protected void addUserInputPages() {
 		addPage(new CopyInputPage(fProcessor));
 	}
@@ -56,22 +57,27 @@ public class ReorgCopyWizard extends RefactoringWizard {
 			return fProcessor;
 		}
 
+		@Override
 		protected Object getInitiallySelectedElement() {
 			return getCopyProcessor().getCommonParentForInputElements();
 		}
 
+		@Override
 		protected IJavaElement[] getJavaElements() {
 			return getCopyProcessor().getJavaElements();
 		}
 
+		@Override
 		protected IResource[] getResources() {
 			return getCopyProcessor().getResources();
 		}
 
+		@Override
 		protected IReorgDestinationValidator getDestinationValidator() {
 			return getCopyProcessor();
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(Object selected) throws JavaModelException{
 			return getCopyProcessor().setDestination(ReorgDestinationFactory.createDestination(selected));
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java
index 056a44f..524495d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class ReorgMoveAction extends SelectionDispatchAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.MOVE_ACTION);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		if (!selection.isEmpty()) {
 			if (ReorgUtils.containsOnlyProjects(selection.toList())) {
@@ -53,7 +54,7 @@ public class ReorgMoveAction extends SelectionDispatchAction {
 				return;
 			}
 			try {
-				List elements= selection.toList();
+				List<?> elements= selection.toList();
 				IResource[] resources= ReorgUtils.getResources(elements);
 				IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 				if (elements.size() != resources.length + javaElements.length)
@@ -71,6 +72,7 @@ public class ReorgMoveAction extends SelectionDispatchAction {
 			setEnabled(false);
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -82,6 +84,7 @@ public class ReorgMoveAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isMoveAvailable(selection));
@@ -96,13 +99,14 @@ public class ReorgMoveAction extends SelectionDispatchAction {
 		return action;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (ReorgUtils.containsOnlyProjects(selection.toList())) {
 			createWorkbenchAction(selection).run();
 			return;
 		}
 		try {
-			List elements= selection.toList();
+			List<?> elements= selection.toList();
 			IResource[] resources= ReorgUtils.getResources(elements);
 			IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 			if (RefactoringAvailabilityTester.isMoveAvailable(resources, javaElements))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveWizard.java
index 6413aa3..8692d6f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class ReorgMoveWizard extends RefactoringWizard {
 		return moveProcessor.isTextualMove();
 	}
 
+	@Override
 	protected void addUserInputPages() {
 		addPage(new MoveInputPage(fMoveProcessor));
 	}
@@ -96,26 +97,32 @@ public class ReorgMoveWizard extends RefactoringWizard {
 			return fMoveProcessor;
 		}
 
+		@Override
 		protected Object getInitiallySelectedElement() {
 			return getJavaMoveProcessor().getCommonParentForInputElements();
 		}
 
+		@Override
 		protected IJavaElement[] getJavaElements() {
 			return getJavaMoveProcessor().getJavaElements();
 		}
 
+		@Override
 		protected IResource[] getResources() {
 			return getJavaMoveProcessor().getResources();
 		}
 
+		@Override
 		protected IReorgDestinationValidator getDestinationValidator() {
 			return getJavaMoveProcessor();
 		}
 
+		@Override
 		protected boolean performFinish() {
 			return super.performFinish() || getJavaMoveProcessor().wasCanceled(); //close the dialog if canceled
 		}
 
+		@Override
 		protected RefactoringStatus verifyDestination(Object selected) throws JavaModelException{
 			JavaMoveProcessor processor= getJavaMoveProcessor();
 			final RefactoringStatus refactoringStatus= processor.setDestination(ReorgDestinationFactory.createDestination(selected));
@@ -172,6 +179,7 @@ public class ReorgMoveWizard extends RefactoringWizard {
 			fReferenceCheckbox.setSelection(processor.getUpdateReferences());
 
 			fReferenceCheckbox.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					processor.setUpdateReferences(((Button)e.widget).getSelection());
 					updateUIStatus();
@@ -197,6 +205,7 @@ public class ReorgMoveWizard extends RefactoringWizard {
 			updateQualifiedNameUpdating(processor, processor.getUpdateQualifiedNames());
 
 			fQualifiedNameCheckbox.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					boolean enabled= ((Button)e.widget).getSelection();
 					updateQualifiedNameUpdating(processor, enabled);
@@ -212,6 +221,7 @@ public class ReorgMoveWizard extends RefactoringWizard {
 			updateUIStatus();
 		}
 
+		@Override
 		public void createControl(Composite parent) {
 			Composite result;
 
@@ -234,6 +244,7 @@ public class ReorgMoveWizard extends RefactoringWizard {
 			Dialog.applyDialogFont(result);
 		}
 
+		@Override
 		protected Control addLabel(Composite parent) {
 			if (fCreateTargetQuery != null) {
 				Composite firstLine= new Composite(parent, SWT.NONE);
@@ -258,6 +269,7 @@ public class ReorgMoveWizard extends RefactoringWizard {
 				gd.widthHint = SWTUtil.getButtonWidthHint(newButton);
 				newButton.setLayoutData(gd);
 				newButton.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						doNewButtonPressed();
 					}
@@ -284,6 +296,7 @@ public class ReorgMoveWizard extends RefactoringWizard {
 		/*
 		 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 		 */
+		@Override
 		public void dispose() {
 			super.dispose();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgQueries.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgQueries.java
index c42629e..757ae38 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgQueries.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgQueries.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -409,6 +409,7 @@ public class ReorgQueries implements IReorgQueries {
 			fYesToAllNoToAll= includeYesToAllNoToAll;
 		}
 
+		@Override
 		protected Label createMessageArea(Composite composite) {
 			Label label= new Label(composite, SWT.WRAP);
 			label.setText(getMessage());
@@ -419,12 +420,14 @@ public class ReorgQueries implements IReorgQueries {
 			return label;
 		}
 
+		@Override
 		protected void buttonPressed(int buttonId) {
 			super.buttonPressed(buttonId);
 			setReturnCode(buttonId);
 			close();
 		}
 
+		@Override
 		protected void createButtonsForButtonBar(Composite parent) {
 			createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL, true);
 			if (fYesToAllNoToAll)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java
index fa4dc11..9f6f996 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ public class TypedSourceTransfer extends ByteArrayTransfer {
 	/* (non-Javadoc)
 	 * Method declared on Transfer.
 	 */
+	@Override
 	protected int[] getTypeIds() {
 		return new int[] {TYPEID};
 	}
@@ -60,6 +61,7 @@ public class TypedSourceTransfer extends ByteArrayTransfer {
 	 *
 	 * @return the list of type names
 	 */
+	@Override
 	protected String[] getTypeNames() {
 		return new String[] {TYPE_NAME};
 	}
@@ -67,6 +69,7 @@ public class TypedSourceTransfer extends ByteArrayTransfer {
 	/* (non-Javadoc)
 	 * Method declared on Transfer.
 	 */
+	@Override
 	protected void javaToNative(Object data, TransferData transferData) {
 		if (! (data instanceof TypedSource[]))
 			return;
@@ -102,6 +105,7 @@ public class TypedSourceTransfer extends ByteArrayTransfer {
 	/* (non-Javadoc)
 	 * Method declared on Transfer.
 	 */
+	@Override
 	protected Object nativeToJava(TransferData transferData) {
 
 		byte[] bytes = (byte[]) super.nativeToJava(transferData);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java
index cf4069b..195779b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,7 +66,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 
 	private SelfEncapsulateFieldRefactoring fRefactoring;
 	private IDialogSettings fSettings;
-	private List fEnablements;
+	private List<Control> fEnablements;
 
 	private Text fGetterName;
 	private Text fSetterName;
@@ -85,7 +85,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 	public void createControl(Composite parent) {
 		fRefactoring= (SelfEncapsulateFieldRefactoring)getRefactoring();
 
-		fEnablements= new ArrayList();
+		fEnablements= new ArrayList<Control>();
 		loadSettings();
 
 		Composite result= new Composite(parent, SWT.NONE);
@@ -145,6 +145,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 		Link link= new Link(nameComposite, SWT.NONE);
 		link.setText(RefactoringMessages.SelfEncapsulateFieldInputPage_configure_link);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				doOpenPreference();
 			}
@@ -167,6 +168,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 		SWTUtil.setDefaultVisibleItemCount(combo);
 		fillWithPossibleInsertPositions(combo, fRefactoring.getField());
 		combo.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				fRefactoring.setInsertionIndex(combo.getSelectionIndex() - 1);
 			}
@@ -180,6 +182,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 		checkBox.setText(RefactoringMessages.SelfEncapsulateFieldInputPage_generateJavadocComment);
 		checkBox.setSelection(fRefactoring.getGenerateJavadoc());
 		checkBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				setGenerateJavadoc(((Button)e.widget).getSelection());
 			}
@@ -208,8 +211,8 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 
 	private void updateEnablements() {
 		boolean enable=!(fRefactoring.isUsingLocalSetter()&&fRefactoring.isUsingLocalGetter());
-		for (Iterator iter= fEnablements.iterator(); iter.hasNext();) {
-			Control control= (Control) iter.next();
+		for (Iterator<Control> iter= fEnablements.iterator(); iter.hasNext();) {
+			Control control= iter.next();
 			control.setEnabled(enable);
 		}
 	}
@@ -261,6 +264,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 			if (iData == visibility)
 				radio.setSelection(true);
 			radio.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					fRefactoring.setVisibility(((Integer)event.widget.getData()).intValue());
 				}
@@ -286,6 +290,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 		radio.setText(RefactoringMessages.SelfEncapsulateFieldInputPage_use_setter_getter);
 		radio.setSelection(true);
 		radio.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fRefactoring.setEncapsulateDeclaringClass(true);
 			}
@@ -295,6 +300,7 @@ public class SelfEncapsulateFieldInputPage extends UserInputWizardPage {
 		radio= new Button(group, SWT.RADIO);
 		radio.setText(RefactoringMessages.SelfEncapsulateFieldInputPage_keep_references);
 		radio.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fRefactoring.setEncapsulateDeclaringClass(false);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldWizard.java
index bda20a6..a220c21 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldWizard.java	
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldWizard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ public class SelfEncapsulateFieldWizard extends RefactoringWizard {
 		setDialogSettings(JavaPlugin.getDefault().getDialogSettings());
 	}
 
+	@Override
 	protected void addUserInputPages() {
 		addPage(new SelfEncapsulateFieldInputPage());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java
index b5885c5..35c9d31 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,12 +34,12 @@ public abstract class AbstractJavaElementLabelDecorator implements ILightweightL
 		 * {@inheritDoc}
 		 */
 		public void elementChanged(ElementChangedEvent event) {
-			List changed= new ArrayList();
+			List<IJavaElement> changed= new ArrayList<IJavaElement>();
 			processDelta(event.getDelta(), changed);
 			if (changed.size() == 0)
 				return;
 
-			fireChange((IJavaElement[])changed.toArray(new IJavaElement[changed.size()]));
+			fireChange(changed.toArray(new IJavaElement[changed.size()]));
 		}
 
 	}
@@ -117,9 +117,9 @@ public abstract class AbstractJavaElementLabelDecorator implements ILightweightL
 	 */
 	public abstract void decorate(Object element, IDecoration decoration);
 
-	protected abstract void processDelta(IJavaElementDelta delta, List result);
+	protected abstract void processDelta(IJavaElementDelta delta, List<IJavaElement> result);
 
-	protected boolean processChildrenDelta(IJavaElementDelta delta, List result) {
+	protected boolean processChildrenDelta(IJavaElementDelta delta, List<IJavaElement> result) {
 		IJavaElementDelta[] children= delta.getAffectedChildren();
 		for (int i= 0; i < children.length; i++) {
 			processDelta(children[i], result);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/BuildpathIndicatorLabelDecorator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/BuildpathIndicatorLabelDecorator.java
index 817110a..6fa8ed5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/BuildpathIndicatorLabelDecorator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/BuildpathIndicatorLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class BuildpathIndicatorLabelDecorator extends AbstractJavaElementLabelDe
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void decorate(Object element, IDecoration decoration) {
 		ImageDescriptor overlay= getOverlay(element);
 		if (overlay != null) {
@@ -61,7 +62,8 @@ public class BuildpathIndicatorLabelDecorator extends AbstractJavaElementLabelDe
 		return null;
 	}
 
-	protected void processDelta(IJavaElementDelta delta, List result) {
+	@Override
+	protected void processDelta(IJavaElementDelta delta, List<IJavaElement> result) {
 		IJavaElement elem= delta.getElement();
 
 		boolean isChanged= delta.getKind() == IJavaElementDelta.CHANGED;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/CompatibilityTemplateStore.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/CompatibilityTemplateStore.java
index 6d51fdb..cc18e5f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/CompatibilityTemplateStore.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/CompatibilityTemplateStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,17 +39,18 @@ public final class CompatibilityTemplateStore extends ContributionTemplateStore
 		fLegacySet= legacySet;
 	}
 
+	@Override
 	public void load() throws IOException {
 		super.load();
 
 		if (fLegacySet != null) {
 
-			List legacyTemplates= new ArrayList(Arrays.asList(fLegacySet.getTemplates()));
+			List<Template> legacyTemplates= new ArrayList<Template>(Arrays.asList(fLegacySet.getTemplates()));
 			fLegacySet.clear();
 
 			TemplatePersistenceData[] datas= getTemplateData(true);
-			for (Iterator it= legacyTemplates.listIterator(); it.hasNext();) {
-				Template t= (Template) it.next();
+			for (Iterator<Template> it= legacyTemplates.listIterator(); it.hasNext();) {
+				Template t= it.next();
 				TemplatePersistenceData orig= findSimilarTemplate(datas, t, isCodeTemplates());
 				if (orig == null) { // no contributed match for the old template found
 					if (!isCodeTemplates())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/EditorInputAdapterFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/EditorInputAdapterFactory.java
index 07a15f3..47c6c51 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/EditorInputAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/EditorInputAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ import org.eclipse.jdt.internal.ui.search.SearchUtil;
  */
 public class EditorInputAdapterFactory implements IAdapterFactory {
 
-	private static Class[] PROPERTIES= new Class[] {IJavaElement.class};
+	private static Class<?>[] PROPERTIES= new Class[] {IJavaElement.class};
 
 	private Object fSearchPageScoreComputer;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/IJavaHelpContextIds.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/IJavaHelpContextIds.java
index 00c3d82..4897f85 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/IJavaHelpContextIds.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/IJavaHelpContextIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,9 @@ public interface IJavaHelpContextIds {
 	// Actions
 	public static final String GETTERSETTER_ACTION= 											PREFIX + "getter_setter_action_context"; //$NON-NLS-1$
 	public static final String ADD_UNIMPLEMENTED_METHODS_ACTION= 					PREFIX + "add_unimplemented_methods_action_context"; //$NON-NLS-1$
+	/** @since 3.7 **/
+	public static final String SHOW_IN_BREADCRUMB_ACTION=							PREFIX + "show_in_breadcrumb_action_context"; //$NON-NLS-1$
+	public static final String COPY_QUALIFIED_NAME_ACTION= 							PREFIX + "copy_qualified_name_action_context"; //$NON-NLS-1$
 	/** @since 3.2 **/
 	public static final String GENERATE_HASHCODE_EQUALS_ACTION=						PREFIX + "add_hashcode_equals_action_context"; //$NON-NLS-1$
 	/** @since 3.5 **/
@@ -172,12 +175,12 @@ public interface IJavaHelpContextIds {
 	public static final String OPEN_INPUT_ACTION= 														PREFIX + "open_input_action"; //$NON-NLS-1$
 	public static final String OPEN_SUPER_IMPLEMENTATION_ACTION= 					PREFIX + "open_super_implementation_action"; //$NON-NLS-1$
 	public static final String PULL_UP_ACTION= 													PREFIX + "pull_up_action"; //$NON-NLS-1$
-	
+
 	/**
 	 * @since 3.6
 	 */
 	public static final String OPEN_IMPLEMENTATION_ACTION= 					PREFIX + "open_implementation_action"; //$NON-NLS-1$
-	
+
 	/**
 	 * @since 3.2
 	 */
@@ -226,10 +229,10 @@ public interface IJavaHelpContextIds {
 	/**
 	 * @since 3.0
 	 */
-	public static final String TOGGLE_COMMENT_ACTION=							PREFIX + "toggle_comment_action"; 	 //$NON-NLS-1$
-	public static final String ADD_BLOCK_COMMENT_ACTION=				PREFIX + "add_block_comment_action"; 	//$NON-NLS-1$
-	public static final String REMOVE_BLOCK_COMMENT_ACTION=				PREFIX + "remove_block_comment_action";	//$NON-NLS-1$
-	public static final String QUICK_FIX_ACTION= 						PREFIX + "quick_fix_action"; 	 //$NON-NLS-1$
+	public static final String TOGGLE_COMMENT_ACTION=						PREFIX + "toggle_comment_action"; 	 //$NON-NLS-1$
+	public static final String ADD_BLOCK_COMMENT_ACTION=					PREFIX + "add_block_comment_action"; 	//$NON-NLS-1$
+	public static final String REMOVE_BLOCK_COMMENT_ACTION=					PREFIX + "remove_block_comment_action";	//$NON-NLS-1$
+	public static final String QUICK_FIX_ACTION= 							PREFIX + "quick_fix_action"; 	 //$NON-NLS-1$
 	public static final String PARAMETER_HINTS_ACTION= 						PREFIX + "parameter_hints_action"; 	 //$NON-NLS-1$
 	public static final String SHOW_OUTLINE_ACTION= 						PREFIX + "show_outline_action"; 	 //$NON-NLS-1$
 	public static final String OPEN_STRUCTURE_ACTION= 						PREFIX + "open_structure_action"; 	 //$NON-NLS-1$
@@ -271,6 +274,11 @@ public interface IJavaHelpContextIds {
 	public static final String NEW_CONTAINER_DIALOG= PREFIX + "new_container_dialog_context"; //$NON-NLS-1$
 	public static final String EXCLUSION_PATTERN_DIALOG= PREFIX + "exclusion_pattern_dialog_context"; //$NON-NLS-1$
 	public static final String ACCESS_RULES_DIALOG= PREFIX + "access_rules_dialog_context"; //$NON-NLS-1$
+	/**
+	 * @since 3.7
+	 */
+	public static final String ACCESS_RULES_DIALOG_COMBINE_RULES= PREFIX + "access_rules_dialog_combine_rules_context"; //$NON-NLS-1$
+
 	public static final String OUTPUT_LOCATION_DIALOG= PREFIX + "output_location_dialog_context"; //$NON-NLS-1$
 	public static final String VARIABLE_CREATION_DIALOG= PREFIX + "variable_creation_dialog_context"; //$NON-NLS-1$
 	public static final String JAVA_SEARCH_PAGE= PREFIX + "java_search_page_context"; //$NON-NLS-1$
@@ -302,9 +310,9 @@ public interface IJavaHelpContextIds {
 
 	// Preference/Property pages
 	public static final String APPEARANCE_PREFERENCE_PAGE= 			PREFIX + "appearance_preference_page_context"; //$NON-NLS-1$
-	public static final String SORT_ORDER_PREFERENCE_PAGE=		    PREFIX + "sort_order_preference_page_context"; //$NON-NLS-1$
-	public static final String TYPE_FILTER_PREFERENCE_PAGE=		    PREFIX + "type_filter_preference_page_context"; //$NON-NLS-1$
-	public static final String BUILD_PATH_PROPERTY_PAGE= 				PREFIX + "build_path_property_page_context"; //$NON-NLS-1$
+	public static final String SORT_ORDER_PREFERENCE_PAGE=			PREFIX + "sort_order_preference_page_context"; //$NON-NLS-1$
+	public static final String TYPE_FILTER_PREFERENCE_PAGE=			PREFIX + "type_filter_preference_page_context"; //$NON-NLS-1$
+	public static final String BUILD_PATH_PROPERTY_PAGE= 			PREFIX + "build_path_property_page_context"; //$NON-NLS-1$
 	public static final String CP_VARIABLES_PREFERENCE_PAGE= 		PREFIX + "cp_variables_preference_page_context"; //$NON-NLS-1$
 	/**
 	 * @since 3.0
@@ -337,6 +345,7 @@ public interface IJavaHelpContextIds {
 	public static final String JAVADOC_PROBLEMS_PREFERENCE_PAGE= PREFIX + "javadoc_problems_preference_page_context"; //$NON-NLS-1$
 	public static final String PROBLEM_SEVERITIES_PREFERENCE_PAGE= PREFIX + "problem_severities_preference_page_context"; //$NON-NLS-1$
 	public static final String TODOTASK_PREFERENCE_PAGE= PREFIX + "tasktags_preference_page_context"; //$NON-NLS-1$
+	public static final String TYPING_PREFERENCE_PAGE= PREFIX + "typing_preference_page_context"; //$NON-NLS-1$
 
 	public static final String TEMPLATE_PREFERENCE_PAGE= PREFIX + "template_preference_page_context"; //$NON-NLS-1$
 	public static final String NEW_JAVA_PROJECT_PREFERENCE_PAGE= PREFIX + "new_java_project_preference_page_context"; //$NON-NLS-1$
@@ -432,33 +441,39 @@ public interface IJavaHelpContextIds {
 	// Custom Filters
 	public static final String CUSTOM_FILTERS_DIALOG= PREFIX + "open_custom_filters_dialog_context"; //$NON-NLS-1$
 
-    // Call Hierarchy
-    public static final String CALL_HIERARCHY_VIEW= PREFIX + "call_hierarchy_view_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_FILTERS_DIALOG= PREFIX + "call_hierarchy_filters_dialog_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_FOCUS_ON_SELECTION_ACTION= PREFIX + "call_hierarchy_focus_on_selection_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_HISTORY_ACTION= PREFIX + "call_hierarchy_history_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_HISTORY_DROP_DOWN_ACTION= PREFIX + "call_hierarchy_history_drop_down_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_REFRESH_VIEW_ACTION= PREFIX + "call_hierarchy_refresh_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_SEARCH_SCOPE_ACTION= PREFIX + "call_hierarchy_search_scope_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_TOGGLE_CALL_MODE_ACTION= PREFIX + "call_hierarchy_toggle_call_mode_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_TOGGLE_JAVA_LABEL_FORMAT_ACTION= PREFIX + "call_hierarchy_toggle_java_label_format_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_TOGGLE_ORIENTATION_ACTION= PREFIX + "call_hierarchy_toggle_call_mode_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_COPY_ACTION= PREFIX + "call_hierarchy_copy_action_context"; //$NON-NLS-1$
+	// Call Hierarchy
+	public static final String CALL_HIERARCHY_VIEW= PREFIX + "call_hierarchy_view_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_FILTERS_DIALOG= PREFIX + "call_hierarchy_filters_dialog_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_FOCUS_ON_SELECTION_ACTION= PREFIX + "call_hierarchy_focus_on_selection_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_HISTORY_ACTION= PREFIX + "call_hierarchy_history_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_HISTORY_DROP_DOWN_ACTION= PREFIX + "call_hierarchy_history_drop_down_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_REFRESH_VIEW_ACTION= PREFIX + "call_hierarchy_refresh_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_SEARCH_SCOPE_ACTION= PREFIX + "call_hierarchy_search_scope_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_TOGGLE_CALL_MODE_ACTION= PREFIX + "call_hierarchy_toggle_call_mode_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_TOGGLE_JAVA_LABEL_FORMAT_ACTION= PREFIX + "call_hierarchy_toggle_java_label_format_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_TOGGLE_ORIENTATION_ACTION= PREFIX + "call_hierarchy_toggle_call_mode_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_COPY_ACTION= PREFIX + "call_hierarchy_copy_action_context"; //$NON-NLS-1$
 	public static final String CALL_HIERARCHY_TOGGLE_IMPLEMENTORS_ACTION= PREFIX + "call_hierarchy_toggle_implementors_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_OPEN_ACTION= PREFIX + "call_hierarchy_open_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_CANCEL_SEARCH_ACTION= PREFIX + "call_hierarchy_cancel_search_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_EXPAND_WITH_CONSTRUCTORS_ACTION= PREFIX + "call_hierarchy_expand_with_constructors_action_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_EXPAND_WITH_CONSTRUCTORS_DIALOG= PREFIX + "call_hierarchy_expand_with_constructors_dialog_context"; //$NON-NLS-1$
-    public static final String CALL_HIERARCHY_REMOVE_FROM_VIEW_ACTION= PREFIX + "call_hierarchy_remove_from_view_action_context"; //$NON-NLS-1$
-
-    /**
-     * @since 3.6
-     */
-    public static final String CALL_HIERARCHY_REFRESH_SINGLE_ELEMENT_ACTION= PREFIX + "call_hierarchy_refresh_single_element_action_context"; //$NON-NLS-1$
-    /**
-     * @since 3.2
-     */
-    //User library preference page
+	public static final String CALL_HIERARCHY_OPEN_ACTION= PREFIX + "call_hierarchy_open_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_CANCEL_SEARCH_ACTION= PREFIX + "call_hierarchy_cancel_search_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_EXPAND_WITH_CONSTRUCTORS_ACTION= PREFIX + "call_hierarchy_expand_with_constructors_action_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_EXPAND_WITH_CONSTRUCTORS_DIALOG= PREFIX + "call_hierarchy_expand_with_constructors_dialog_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_REMOVE_FROM_VIEW_ACTION= PREFIX + "call_hierarchy_remove_from_view_action_context"; //$NON-NLS-1$
+
+	/**
+	 * @since 3.6
+	 */
+	public static final String CALL_HIERARCHY_REFRESH_SINGLE_ELEMENT_ACTION= PREFIX + "call_hierarchy_refresh_single_element_action_context"; //$NON-NLS-1$
+
+	/**
+	 * @since 3.7
+	 */
+	public static final String CALL_HIERARCHY_SEARCH_IN_DIALOG= PREFIX + "call_hierarchy_search_in_dialog_context"; //$NON-NLS-1$
+	public static final String CALL_HIERARCHY_PIN_VIEW_ACTION= PREFIX + "call_hierarchy_pin_view_action_context"; //$NON-NLS-1$
+	/**
+	 * @since 3.2
+	 */
+	//User library preference page
 	public static final String CP_EDIT_USER_LIBRARY= PREFIX + "cp_edit_user_library"; //$NON-NLS-1$
 	public static final String CP_EXPORT_USER_LIBRARY= PREFIX + "cp_export_user_library"; //$NON-NLS-1$
 	public static final String CP_IMPORT_USER_LIBRARY= PREFIX + "cp_import_user_library"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InitializeAfterLoadJob.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InitializeAfterLoadJob.java
index ebfce72..a687b5b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InitializeAfterLoadJob.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InitializeAfterLoadJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class InitializeAfterLoadJob extends UIJob {
 		public RealJob(String name) {
 			super(name);
 		}
+		@Override
 		protected IStatus run(IProgressMonitor monitor) {
 			monitor.beginTask("", 10); //$NON-NLS-1$
 			try {
@@ -40,6 +41,7 @@ public class InitializeAfterLoadJob extends UIJob {
 			}
 			return Status.OK_STATUS;
 		}
+		@Override
 		public boolean belongsTo(Object family) {
 			return JavaUI.ID_PLUGIN.equals(family);
 		}
@@ -49,6 +51,7 @@ public class InitializeAfterLoadJob extends UIJob {
 		super(JavaUIMessages.InitializeAfterLoadJob_starter_job_name);
 		setSystem(true);
 	}
+	@Override
 	public IStatus runInUIThread(IProgressMonitor monitor) {
 		Job job = new RealJob(JavaUIMessages.JavaPlugin_initializing_ui);
 		job.setPriority(Job.SHORT);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InterfaceIndicatorLabelDecorator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InterfaceIndicatorLabelDecorator.java
index 115019d..1695514 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InterfaceIndicatorLabelDecorator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/InterfaceIndicatorLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,10 @@ package org.eclipse.jdt.internal.ui;
 
 import java.util.List;
 
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.jface.resource.CompositeImageDescriptor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IDecoration;
 
@@ -34,45 +38,88 @@ import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 
 public class InterfaceIndicatorLabelDecorator extends AbstractJavaElementLabelDecorator {
 
+	private static class TypeIndicatorOverlay extends CompositeImageDescriptor {
+		private static Point fgSize;
+		
+		private final ImageDescriptor fType;
+		private final boolean fDeprecated;
+		private final boolean fPackageDefault;
+	
+		public TypeIndicatorOverlay(ImageDescriptor type, boolean deprecated, boolean packageDefault) {
+			fType= type;
+			fDeprecated= deprecated;
+			fPackageDefault= packageDefault;
+		}
+		
+		/*
+		 * @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int, int)
+		 */
+		@Override
+		protected void drawCompositeImage(int width, int height) {
+			if (fDeprecated) {
+				ImageData imageData= JavaPluginImages.DESC_OVR_DEPRECATED.getImageData();
+				drawImage(imageData, -1, 1); // looks better, esp. together with interface indicator
+			}
+			if (fType != null) { // on top of deprecated indicator
+				ImageData imageData= fType.getImageData();
+				drawImage(imageData, width - imageData.width, 0);
+			}
+			if (fPackageDefault) {
+				ImageData imageData= JavaPluginImages.DESC_OVR_DEFAULT.getImageData();
+				drawImage(imageData, width - imageData.width, height - imageData.height);
+			}
+		}
+		
+		/*
+		 * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize()
+		 */
+		@Override
+		protected Point getSize() {
+			if (fgSize == null) {
+				ImageData imageData= JavaPluginImages.DESC_OVR_DEPRECATED.getImageData();
+				fgSize= new Point(imageData.width, imageData.height);
+			}
+			return fgSize;
+		}
+	}
+
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void decorate(Object element, IDecoration decoration) {
 		try {
-			ImageDescriptor overlay= getOverlay(element);
-			if (overlay == null)
-				return;
-
-			decoration.addOverlay(overlay, IDecoration.TOP_RIGHT);
+			addOverlays(element, decoration);
 		} catch (JavaModelException e) {
 			return;
 		}
 	}
 
-	private ImageDescriptor getOverlay(Object element) throws JavaModelException {
+	private void addOverlays(Object element, IDecoration decoration) throws JavaModelException {
 		if (element instanceof ICompilationUnit) {
 			ICompilationUnit unit= (ICompilationUnit) element;
 			if (unit.isOpen()) {
 				IType mainType= unit.findPrimaryType();
 				if (mainType != null) {
-					return getOverlayFromFlags(mainType.getFlags());
+					addOverlaysFromFlags(mainType.getFlags(), decoration);
 				}
-				return null;
+				return;
 			}
 			String typeName= JavaCore.removeJavaLikeExtension(unit.getElementName());
-			return getOverlayWithSearchEngine(unit, typeName);
+			addOverlaysWithSearchEngine(unit, typeName, decoration);
+			
 		} else if (element instanceof IClassFile) {
 			IClassFile classFile= (IClassFile) element;
 			if (classFile.isOpen()) {
-				return getOverlayFromFlags(classFile.getType().getFlags());
+				addOverlaysFromFlags(classFile.getType().getFlags(), decoration);
+			} else {
+				String typeName= classFile.getType().getElementName();
+				addOverlaysWithSearchEngine(classFile, typeName, decoration);
 			}
-			String typeName= classFile.getType().getElementName();
-			return getOverlayWithSearchEngine(classFile, typeName);
 		}
-		return null;
 	}
 
-	private ImageDescriptor getOverlayWithSearchEngine(ITypeRoot element, String typeName) {
+	private void addOverlaysWithSearchEngine(ITypeRoot element, String typeName, IDecoration decoration) {
 		SearchEngine engine= new SearchEngine();
 		IJavaSearchScope scope= SearchEngine.createJavaSearchScope(new IJavaElement[] { element });
 
@@ -85,8 +132,9 @@ public class InterfaceIndicatorLabelDecorator extends AbstractJavaElementLabelDe
 		}
 
 		TypeNameRequestor requestor= new TypeNameRequestor() {
+			@Override
 			public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
-				if (enclosingTypeNames.length == 0 && Flags.isPublic(modifiers)) {
+				if (enclosingTypeNames.length == 0 /*&& Flags.isPublic(modifiers)*/) {
 					throw new Result(modifiers);
 				}
 			}
@@ -97,28 +145,46 @@ public class InterfaceIndicatorLabelDecorator extends AbstractJavaElementLabelDe
 			int matchRule = SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE;
 			engine.searchAllTypeNames(packName.toCharArray(), matchRule, typeName.toCharArray(), matchRule, IJavaSearchConstants.TYPE, scope, requestor, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH , null);
 		} catch (Result e) {
-			return getOverlayFromFlags(e.modifiers);
+			addOverlaysFromFlags(e.modifiers, decoration);
 		} catch (JavaModelException e) {
 			JavaPlugin.log(e);
 		}
-		return null;
 
 	}
-
-	private ImageDescriptor getOverlayFromFlags(int flags)  {
+	
+	private void addOverlaysFromFlags(int flags, IDecoration decoration) {
+		ImageDescriptor type;
 		if (Flags.isAnnotation(flags)) {
-			return JavaPluginImages.DESC_OVR_ANNOTATION;
+			type= JavaPluginImages.DESC_OVR_ANNOTATION;
 		} else if (Flags.isEnum(flags)) {
-			return JavaPluginImages.DESC_OVR_ENUM;
+			type= JavaPluginImages.DESC_OVR_ENUM;
 		} else if (Flags.isInterface(flags)) {
-			return JavaPluginImages.DESC_OVR_INTERFACE;
+			type= JavaPluginImages.DESC_OVR_INTERFACE;
 		} else if (/* is class */ Flags.isAbstract(flags)) {
-			return JavaPluginImages.DESC_OVR_ABSTRACT_CLASS;
+			type= JavaPluginImages.DESC_OVR_ABSTRACT_CLASS;
+		} else {
+			type= null;
+		}
+		
+		boolean deprecated= Flags.isDeprecated(flags);
+		boolean packageDefault= Flags.isPackageDefault(flags);
+		
+		/* Each decoration position can only be used once. Since we don't want to take all positions
+		 * away from other decorators, we confine ourselves to only use the top right position. */
+		
+		if (type != null && !deprecated && !packageDefault) {
+			decoration.addOverlay(type, IDecoration.TOP_RIGHT);
+			
+		} else if (type == null && deprecated && !packageDefault) {
+			decoration.addOverlay(JavaPluginImages.DESC_OVR_DEPRECATED, IDecoration.TOP_RIGHT);
+			
+		} else if (type != null || deprecated || packageDefault) {
+			decoration.addOverlay(new TypeIndicatorOverlay(type, deprecated, packageDefault), IDecoration.TOP_RIGHT);
 		}
-		return null;
 	}
 
-	protected void processDelta(IJavaElementDelta delta, List result) {
+	@Override
+	protected void processDelta(IJavaElementDelta delta, List<IJavaElement> result) {
 		IJavaElement elem= delta.getElement();
 
 		boolean isChanged= delta.getKind() == IJavaElementDelta.CHANGED;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java
index e327803..bf38fed 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -144,7 +144,7 @@ public class JarEntryEditorInputFactory implements IElementFactory {
 	 * @see IPersistableElement#saveState(IMemento)
 	 */
 	public static void saveState(IMemento memento, IJarEntryResource jarEntryResource) {
-		ArrayList reversePath= new ArrayList();
+		ArrayList<String> reversePath= new ArrayList<String>();
 		reversePath.add(jarEntryResource.getName());
 
 		Object parent= jarEntryResource.getParent();
@@ -155,9 +155,9 @@ public class JarEntryEditorInputFactory implements IElementFactory {
 		}
 		if (parent instanceof IPackageFragmentRoot || parent instanceof IPackageFragment) {
 			memento.putString(KEY_ELEMENT, ((IJavaElement) parent).getHandleIdentifier());
-			IPath path= new Path((String) reversePath.get(reversePath.size() - 1));
+			IPath path= new Path(reversePath.get(reversePath.size() - 1));
 			for (int i= reversePath.size() - 2; i >= 0; i--) {
-				path= path.append((String) reversePath.get(i));
+				path= path.append(reversePath.get(i));
 			}
 			memento.putString(KEY_PATH, path.toString());
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementAdapterFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementAdapterFactory.java
index 483dd4c..c08db63 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,13 +10,15 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui;
 
+import org.osgi.framework.Bundle;
+
 import org.eclipse.team.ui.history.IHistoryPageSource;
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.Platform;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.mapping.ResourceMapping;
 
@@ -50,7 +52,7 @@ import org.eclipse.jdt.internal.ui.search.SearchUtil;
  */
 public class JavaElementAdapterFactory implements IAdapterFactory, IContributorResourceAdapter2 {
 
-	private static Class[] PROPERTIES= new Class[] {
+	private static Class<?>[] ADAPTER_LIST= new Class[] {
 		IPropertySource.class,
 		IResource.class,
 		IWorkbenchAdapter.class,
@@ -59,8 +61,7 @@ public class JavaElementAdapterFactory implements IAdapterFactory, IContributorR
 		IContributorResourceAdapter.class,
 		IContributorResourceAdapter2.class,
 		ITaskListResourceAdapter.class,
-		IContainmentAdapter.class,
-		IHistoryPageSource.class
+		IContainmentAdapter.class
 	};
 
 	/*
@@ -68,6 +69,8 @@ public class JavaElementAdapterFactory implements IAdapterFactory, IContributorR
 	 * the Search plug-in to be loaded.
 	 */
 	private Object fSearchPageScoreComputer;
+
+	private boolean fIsTeamUILoaded;
 	private static IResourceLocator fgResourceLocator;
 	private static JavaWorkbenchAdapter fgJavaWorkbenchAdapter;
 	private static ITaskListResourceAdapter fgTaskListAdapter;
@@ -75,7 +78,7 @@ public class JavaElementAdapterFactory implements IAdapterFactory, IContributorR
 
 	public Class[] getAdapterList() {
 		updateLazyLoadedAdapters();
-		return PROPERTIES;
+		return ADAPTER_LIST;
 	}
 
 	public Object getAdapter(Object element, Class key) {
@@ -102,7 +105,7 @@ public class JavaElementAdapterFactory implements IAdapterFactory, IContributorR
 			return getTaskListAdapter();
 		} if (IContainmentAdapter.class.equals(key)) {
 			return getJavaElementContainmentAdapter();
-		} if (IHistoryPageSource.class.equals(key) && JavaElementHistoryPageSource.hasEdition(java)) {
+		} if (fIsTeamUILoaded && IHistoryPageSource.class.equals(key) && JavaElementHistoryPageSource.hasEdition(java)) {
 			return JavaElementHistoryPageSource.getInstance();
 		}
 		return null;
@@ -175,23 +178,27 @@ public class JavaElementAdapterFactory implements IAdapterFactory, IContributorR
 	private void updateLazyLoadedAdapters() {
 		if (fSearchPageScoreComputer == null && SearchUtil.isSearchPlugInActivated())
 			createSearchPageScoreComputer();
+		if (!fIsTeamUILoaded && isTeamUIPlugInActivated()) {
+			addClassToAdapterList(IHistoryPageSource.class);
+			fIsTeamUILoaded= true;
+		}
 	}
 
 	private void createSearchPageScoreComputer() {
 		fSearchPageScoreComputer= new JavaSearchPageScoreComputer();
-		PROPERTIES= new Class[] {
-			IPropertySource.class,
-			IResource.class,
-			ISearchPageScoreComputer.class,
-			IWorkbenchAdapter.class,
-			IResourceLocator.class,
-			IPersistableElement.class,
-			IProject.class,
-			IContributorResourceAdapter.class,
-			IContributorResourceAdapter2.class,
-			ITaskListResourceAdapter.class,
-			IContainmentAdapter.class
-		};
+		addClassToAdapterList(ISearchPageScoreComputer.class);
+	}
+
+	private static void addClassToAdapterList(Class<?> clazz) {
+		int oldSize= ADAPTER_LIST.length;
+		Class<?>[] oldProperties= ADAPTER_LIST;
+		ADAPTER_LIST= new Class[oldSize + 1];
+		System.arraycopy(oldProperties, 0, ADAPTER_LIST, 0, oldSize);
+		ADAPTER_LIST[oldSize]= clazz;
+	}
+
+	private static boolean isTeamUIPlugInActivated() {
+		return Platform.getBundle("org.eclipse.team.ui").getState() == Bundle.ACTIVE; //$NON-NLS-1$
 	}
 
 	private static IResourceLocator getResourceLocator() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java
index b8b98f7..73ff08f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.Iterator;
 import java.util.LinkedHashMap;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.service.prefs.BackingStoreException;
 
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
@@ -25,6 +26,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
@@ -145,9 +147,10 @@ public class JavaPlugin extends AbstractUIPlugin {
 
 	private static JavaPlugin fgJavaPlugin;
 
-	private static LinkedHashMap fgRepeatedMessages= new LinkedHashMap(20, 0.75f, true) {
+	private static LinkedHashMap<String, Long> fgRepeatedMessages= new LinkedHashMap<String, Long>(20, 0.75f, true) {
 		private static final long serialVersionUID= 1L;
-		protected boolean removeEldestEntry(java.util.Map.Entry eldest) {
+		@Override
+		protected boolean removeEldestEntry(java.util.Map.Entry<String, Long> eldest) {
 			return size() >= 20;
 		}
 	};
@@ -184,7 +187,7 @@ public class JavaPlugin extends AbstractUIPlugin {
 	private WorkingCopyManager fWorkingCopyManager;
 
 	/**
-	 * @deprecated
+	 * @deprecated to avoid deprecation warning
 	 */
 	private org.eclipse.jdt.core.IBufferFactory fBufferFactory;
 	private ICompilationUnitDocumentProvider fCompilationUnitDocumentProvider;
@@ -328,7 +331,7 @@ public class JavaPlugin extends AbstractUIPlugin {
 		long now= System.currentTimeMillis();
 		boolean writeToLog= true;
 		if (fgRepeatedMessages.containsKey(message)) {
-			long last= ((Long) fgRepeatedMessages.get(message)).longValue();
+			long last= fgRepeatedMessages.get(message).longValue();
 			writeToLog= now - last > 5000;
 		}
 		fgRepeatedMessages.put(message, new Long(now));
@@ -352,10 +355,12 @@ public class JavaPlugin extends AbstractUIPlugin {
 	/* (non - Javadoc)
 	 * Method declared in plug-in
 	 */
+	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 
 		WorkingCopyOwner.setPrimaryBufferProvider(new WorkingCopyOwner() {
+			@Override
 			public IBuffer createBuffer(ICompilationUnit workingCopy) {
 				ICompilationUnit original= workingCopy.getPrimary();
 				IResource resource= original.getResource();
@@ -392,21 +397,21 @@ public class JavaPlugin extends AbstractUIPlugin {
 
 	/**
 	 * Private deprecated method to avoid deprecation warnings
-	 *
+	 * 
 	 * @return the deprecated preference store
-	 * @deprecated
+	 * @deprecated to avoid deprecation warnings
 	 */
 	private static IPreferenceStore getDeprecatedWorkbenchPreferenceStore() {
 		return PlatformUI.getWorkbench().getPreferenceStore();
 	}
 
-	/** @deprecated */
+	/** @deprecated to avoid deprecation warnings */
 	private static final String DEPRECATED_EDITOR_TAB_WIDTH= PreferenceConstants.EDITOR_TAB_WIDTH;
 
-	/** @deprecated */
+	/** @deprecated to avoid deprecation warnings */
 	private static final String DEPRECATED_REFACTOR_ERROR_PAGE_SEVERITY_THRESHOLD= PreferenceConstants.REFACTOR_ERROR_PAGE_SEVERITY_THRESHOLD;
 
-	/** @deprecated */
+	/** @deprecated to avoid deprecation warnings */
 	private static final String DEPRECATED_CODEASSIST_ORDER_PROPOSALS= PreferenceConstants.CODEASSIST_ORDER_PROPOSALS;
 
 	/**
@@ -527,6 +532,7 @@ public class JavaPlugin extends AbstractUIPlugin {
 	/*
 	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#createImageRegistry()
 	 */
+	@Override
 	protected ImageRegistry createImageRegistry() {
 		return JavaPluginImages.getImageRegistry();
 	}
@@ -534,6 +540,7 @@ public class JavaPlugin extends AbstractUIPlugin {
 	/*
 	 * @see org.eclipse.core.runtime.Plugin#stop
 	 */
+	@Override
 	public void stop(BundleContext context) throws Exception {
 		try {
 			if (fImageDescriptorRegistry != null)
@@ -627,9 +634,9 @@ public class JavaPlugin extends AbstractUIPlugin {
 
 	/**
 	 * Private deprecated method to avoid deprecation warnings
-	 *
+	 * 
 	 * @return the deprecated buffer factory
-	 * @deprecated
+	 * @deprecated to avoid deprecation warnings
 	 */
 	public synchronized org.eclipse.jdt.core.IBufferFactory getBufferFactory() {
 		if (fBufferFactory == null)
@@ -678,11 +685,21 @@ public class JavaPlugin extends AbstractUIPlugin {
 
 	public synchronized JavaTextTools getJavaTextTools() {
 		if (fJavaTextTools == null)
-			fJavaTextTools= new JavaTextTools(getPreferenceStore(), JavaCore.getPlugin().getPluginPreferences());
+			fJavaTextTools= new JavaTextTools(getPreferenceStore(), getJavaCorePluginPreferences());
 		return fJavaTextTools;
 	}
 
 	/**
+	 * Returns the Java Core plug-in preferences.
+	 * 
+	 * @return the Java Core plug-in preferences
+	 * @since 3.7
+	 */
+	public static org.eclipse.core.runtime.Preferences getJavaCorePluginPreferences() {
+		return JavaCore.getPlugin().getPluginPreferences();
+	}
+
+	/**
 	 * Returns the AST provider.
 	 *
 	 * @return the AST provider
@@ -730,6 +747,7 @@ public class JavaPlugin extends AbstractUIPlugin {
 				/*
 				 * @see org.eclipse.ui.texteditor.ConfigurationElementSorter#getConfigurationElement(java.lang.Object)
 				 */
+				@Override
 				public IConfigurationElement getConfigurationElement(Object object) {
 					return ((JavaEditorTextHoverDescriptor)object).getConfigurationElement();
 				}
@@ -826,9 +844,9 @@ public class JavaPlugin extends AbstractUIPlugin {
 	 */
 	private static void registerJavaContext(ContributionContextTypeRegistry registry, String id, TemplateContextType parent) {
 		TemplateContextType contextType= registry.getContextType(id);
-		Iterator iter= parent.resolvers();
+		Iterator<TemplateVariableResolver> iter= parent.resolvers();
 		while (iter.hasNext())
-			contextType.addResolver((TemplateVariableResolver) iter.next());
+			contextType.addResolver(iter.next());
 	}
 
 	/**
@@ -861,9 +879,9 @@ public class JavaPlugin extends AbstractUIPlugin {
 
 	/**
 	 * Private deprecated method to avoid deprecation warnings
-	 *
+	 * 
 	 * @return the deprecated template store
-	 * @deprecated
+	 * @deprecated to avoid deprecation warnings
 	 */
 	private org.eclipse.jdt.internal.corext.template.java.Templates getOldTemplateStoreInstance() {
 		return org.eclipse.jdt.internal.corext.template.java.Templates.getInstance();
@@ -923,9 +941,9 @@ public class JavaPlugin extends AbstractUIPlugin {
 
 	/**
 	 * Private deprecated method to avoid deprecation warnings
-	 *
+	 * 
 	 * @return the deprecated code template store
-	 * @deprecated
+	 * @deprecated to avoid deprecation warnings
 	 */
 	private org.eclipse.jdt.internal.corext.template.java.CodeTemplates getOldCodeTemplateStoreInstance() {
 		return org.eclipse.jdt.internal.corext.template.java.CodeTemplates.getInstance();
@@ -947,15 +965,28 @@ public class JavaPlugin extends AbstractUIPlugin {
 	public IPreferenceStore getCombinedPreferenceStore() {
 		if (fCombinedPreferenceStore == null) {
 			IPreferenceStore generalTextStore= EditorsUI.getPreferenceStore();
-			fCombinedPreferenceStore= new ChainedPreferenceStore(new IPreferenceStore[] { getPreferenceStore(), new PreferencesAdapter(JavaCore.getPlugin().getPluginPreferences()), generalTextStore });
+			fCombinedPreferenceStore= new ChainedPreferenceStore(new IPreferenceStore[] { getPreferenceStore(), new PreferencesAdapter(getJavaCorePluginPreferences()), generalTextStore });
 		}
 		return fCombinedPreferenceStore;
 	}
 
 	/**
-	 * Returns the registry of the extensions to the <code>org.eclipse.jdt.ui.javaFoldingStructureProvider</code>
-	 * extension point.
-	 *
+	 * Flushes the instance scope of this plug-in.
+	 * 
+	 * @since 3.7
+	 */
+	public static void flushInstanceScope() {
+		try {
+			InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).flush();
+		} catch (BackingStoreException e) {
+			log(e);
+		}
+	}
+
+	/**
+	 * Returns the registry of the extensions to the
+	 * <code>org.eclipse.jdt.ui.javaFoldingStructureProvider</code> extension point.
+	 * 
 	 * @return the registry of contributed <code>IJavaFoldingStructureProvider</code>
 	 * @since 3.0
 	 */
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPluginImages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPluginImages.java
index a4f0eb9..a522d35 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPluginImages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaPluginImages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,7 @@ public class JavaPluginImages {
 
 	// The plug-in registry
 	private static ImageRegistry fgImageRegistry= null;
-	private static HashMap fgAvoidSWTErrorMap= null;
+	private static HashMap<String, ImageDescriptor> fgAvoidSWTErrorMap= null;
 
 	private static final String T_OBJ= "obj16"; 		//$NON-NLS-1$
 	private static final String T_OVR= "ovr16"; 		//$NON-NLS-1$
@@ -373,6 +373,7 @@ public class JavaPluginImages {
 	public static final ImageDescriptor DESC_OVR_SYNCH= createUnManagedCached(T_OVR, "synch_co.gif"); 						//$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_VOLATILE= createUnManagedCached(T_OVR, "volatile_co.gif"); 						//$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_TRANSIENT= createUnManagedCached(T_OVR, "transient_co.gif"); 						//$NON-NLS-1$
+	public static final ImageDescriptor DESC_OVR_NATIVE= createUnManagedCached(T_OVR, "native_co.gif"); 						//$NON-NLS-1$
 
 	public static final ImageDescriptor DESC_OVR_RUN= createUnManagedCached(T_OVR, "run_co.gif"); 							//$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_WARNING= createUnManagedCached(T_OVR, "warning_co.gif"); 					//$NON-NLS-1$
@@ -384,6 +385,7 @@ public class JavaPluginImages {
 	public static final ImageDescriptor DESC_OVR_SYNCH_AND_IMPLEMENTS= createUnManagedCached(T_OVR, "sync_impl.gif");   //$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_CONSTRUCTOR= createUnManagedCached(T_OVR, "constr_ovr.gif");			//$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_DEPRECATED= createUnManagedCached(T_OVR, "deprecated.gif");			//$NON-NLS-1$
+	public static final ImageDescriptor DESC_OVR_DEFAULT= createUnManagedCached(T_OVR, "default_tsk.gif");			//$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_FOCUS= createUnManagedCached(T_OVR, "focus_ovr.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_ANNOTATION= createUnManagedCached(T_OVR, "annotation_tsk.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_OVR_ENUM= createUnManagedCached(T_OVR, "enum_tsk.gif"); //$NON-NLS-1$
@@ -477,6 +479,7 @@ public class JavaPluginImages {
 			fDescriptor = descriptor;
 		}
 
+		@Override
 		public ImageData getImageData() {
 			if (fData == null) {
 				fData= fDescriptor.getImageData();
@@ -503,7 +506,7 @@ public class JavaPluginImages {
 	 */
 	public static ImageDescriptor getDescriptor(String key) {
 		if (fgImageRegistry == null) {
-			return (ImageDescriptor) fgAvoidSWTErrorMap.get(key);
+			return fgAvoidSWTErrorMap.get(key);
 		}
 		return getImageRegistry().getDescriptor(key);
 	}
@@ -536,9 +539,9 @@ public class JavaPluginImages {
 	/* package */ static ImageRegistry getImageRegistry() {
 		if (fgImageRegistry == null) {
 			fgImageRegistry= new ImageRegistry();
-			for (Iterator iter= fgAvoidSWTErrorMap.keySet().iterator(); iter.hasNext();) {
-				String key= (String) iter.next();
-				fgImageRegistry.put(key, (ImageDescriptor) fgAvoidSWTErrorMap.get(key));
+			for (Iterator<String> iter= fgAvoidSWTErrorMap.keySet().iterator(); iter.hasNext();) {
+				String key= iter.next();
+				fgImageRegistry.put(key, fgAvoidSWTErrorMap.get(key));
 			}
 			fgAvoidSWTErrorMap= null;
 		}
@@ -571,7 +574,7 @@ public class JavaPluginImages {
 		ImageDescriptor result= create(prefix, name, true);
 
 		if (fgAvoidSWTErrorMap == null) {
-			fgAvoidSWTErrorMap= new HashMap();
+			fgAvoidSWTErrorMap= new HashMap<String, ImageDescriptor>();
 		}
 		fgAvoidSWTErrorMap.put(key, result);
 		if (fgImageRegistry != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaProjectAdapterFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaProjectAdapterFactory.java
index 27f609c..71e013e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaProjectAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaProjectAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ import org.eclipse.jdt.core.IJavaProject;
  */
 public class JavaProjectAdapterFactory implements IAdapterFactory {
 
-	private static Class[] PROPERTIES= new Class[] {
+	private static Class<?>[] PROPERTIES= new Class[] {
 		IProject.class,
 	};
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.java
index bb3ef1d..457306a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.java
@@ -186,8 +186,6 @@ public final class JavaUIMessages extends NLS {
 	public static String OpenTypeHierarchyUtil_error_open_view;
 	public static String OpenTypeHierarchyUtil_error_open_perspective;
 	public static String OpenTypeHierarchyUtil_error_open_editor;
-	public static String OpenTypeHierarchyUtil_selectionDialog_title;
-	public static String OpenTypeHierarchyUtil_selectionDialog_message;
 
 	public static String TypeInfoLabelProvider_default_package;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.properties
index eeb965c..c37b3e2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIMessages.properties
@@ -193,8 +193,6 @@ HistoryListAction_max_entries_constraint=Please enter a positive integer smaller
 OpenTypeHierarchyUtil_error_open_view=Problems opening Type Hierarchy View
 OpenTypeHierarchyUtil_error_open_perspective=Problems opening Type Hierarchy Perspective
 OpenTypeHierarchyUtil_error_open_editor=Problems opening Java Editor
-OpenTypeHierarchyUtil_selectionDialog_title=Open In Type Hierarchy
-OpenTypeHierarchyUtil_selectionDialog_message=&Select the type to be shown in the Type Hierarchy:
 
 TypeInfoLabelProvider_default_package=(default package)
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIPreferenceInitializer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIPreferenceInitializer.java
index b175cfd..854743d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaUIPreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class JavaUIPreferenceInitializer extends AbstractPreferenceInitializer {
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
 	 */
+	@Override
 	public void initializeDefaultPreferences() {
 		IPreferenceStore store = PreferenceConstants.getPreferenceStore();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/LogicalPackageAdapterFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/LogicalPackageAdapterFactory.java
index 888ff44..c4e90a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/LogicalPackageAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/LogicalPackageAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.jdt.internal.ui.search.SearchUtil;
  */
 public class LogicalPackageAdapterFactory implements IAdapterFactory {
 
-	private static Class[] PROPERTIES= new Class[] {
+	private static Class<?>[] PROPERTIES= new Class[] {
 		ResourceMapping.class
 	};
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/MarkerAdapterFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/MarkerAdapterFactory.java
index e1688eb..6b38100 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/MarkerAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/MarkerAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ import org.eclipse.jdt.internal.ui.search.SearchUtil;
  */
 public class MarkerAdapterFactory implements IAdapterFactory {
 
-	private static Class[] PROPERTIES= new Class[0];
+	private static Class<?>[] PROPERTIES= new Class[0];
 
 
 	private Object fSearchPageScoreComputer;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/ResourceAdapterFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/ResourceAdapterFactory.java
index a81a35a..2a9abcf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/ResourceAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/ResourceAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ import org.eclipse.jdt.core.JavaCore;
 
 public class ResourceAdapterFactory implements IAdapterFactory {
 
-	private static Class[] PROPERTIES= new Class[] {
+	private static Class<?>[] PROPERTIES= new Class[] {
 		IJavaElement.class
 	};
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AbstractToggleLinkingAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AbstractToggleLinkingAction.java
index 3a5cf06..c927d37 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AbstractToggleLinkingAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AbstractToggleLinkingAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,5 +41,6 @@ public abstract class AbstractToggleLinkingAction extends Action {
 	/**
 	 * Runs the action.
 	 */
+	@Override
 	public abstract void run();
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.java
index e4a3e9e..40d5f89 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,11 +99,8 @@ public final class ActionMessages extends NLS {
 	public static String OpenTypeHierarchyAction_description;
 	public static String OpenTypeHierarchyAction_dialog_title;
 	public static String OpenTypeHierarchyAction_messages_title;
-	public static String OpenTypeHierarchyAction_messages_no_java_element;
-	public static String OpenTypeHierarchyAction_messages_no_java_resources;
-	public static String OpenTypeHierarchyAction_messages_no_types;
+	public static String OpenTypeHierarchyAction_messages_no_java_elements;
 	public static String OpenTypeHierarchyAction_messages_no_valid_java_element;
-	public static String OpenTypeHierarchyAction_messages_unknown_import_decl;
 	public static String ShowInPackageViewAction_label;
 	public static String ShowInPackageViewAction_description;
 	public static String ShowInPackageViewAction_tooltip;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties
index 0aae955..6851be4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -51,7 +51,7 @@ OpenImplementationAction_label=Open Implementation
 OpenImplementationAction_tooltip=Open the Implementations in the Method's Hierarchy 
 OpenImplementationAction_description=Open the Implementations in the method's hierarchy
 OpenImplementationAction_error_title=Open Implementation
-OpenImplementationAction_not_applicable=The operation is not applicable to the current selection. Select an overridable method.
+OpenImplementationAction_not_applicable=The operation is not applicable to the current selection. Select a method.
 
 OpenTypeHierarchyAction_label=Ope&n Type Hierarchy
 OpenNewClassWizardAction_text=Class
@@ -60,15 +60,12 @@ OpenTypeHierarchyAction_tooltip=Open a Type Hierarchy on the Selected Element
 OpenTypeHierarchyAction_description=Open a type hierarchy on the selected element
 OpenTypeHierarchyAction_dialog_title=Open Type Hierarchy
 OpenTypeHierarchyAction_messages_title=Cannot create type hierarchy
-OpenTypeHierarchyAction_messages_no_java_element=A Java element must be selected.
-OpenTypeHierarchyAction_messages_no_java_resources=The selected package does not contain any Java resource.
-OpenTypeHierarchyAction_messages_no_types=The selected compilation unit does not contain a type.
+OpenTypeHierarchyAction_messages_no_java_elements=One or more Java elements must be selected.
 OpenNewAnnotationWizardAction_description=Opens the new annotation type wizard
 OpenNewJavaProjectWizardAction_description=Opens the new Java project wizard
 OpenNewSourceFolderWizardAction_description=Opens the new Java source folder wizard
 OpenNewInterfaceWizardAction_description=Opens the new interface wizard
-OpenTypeHierarchyAction_messages_no_valid_java_element=A valid Java element must be selected.
-OpenTypeHierarchyAction_messages_unknown_import_decl=The selected import declaration can not be resolved.
+OpenTypeHierarchyAction_messages_no_valid_java_element=Either a single type or member, or one or more packages, source folders, etc. must be selected.
 
 ShowInPackageViewAction_label=Show in Pac&kage Explorer
 ShowInPackageViewAction_description=Show the selected element in Package Explorer
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionUtil.java
index b249be6..f46197e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -158,7 +158,7 @@ public class ActionUtil {
 		IJavaElement cu= element.getAncestor(IJavaElement.COMPILATION_UNIT);
 		if (cu != null) {
 			IResource resource= cu.getResource();
-			if (resource != null && resource.isDerived()) {
+			if (resource != null && resource.isDerived(IResource.CHECK_ANCESTORS)) {
 
 				// see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#validateEditorInputState()
 				final String warnKey= AbstractDecoratedTextEditorPreferenceConstants.EDITOR_WARN_IF_INPUT_DERIVED;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddBlockCommentAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddBlockCommentAction.java
index 7fa92bd..388ed93 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddBlockCommentAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddBlockCommentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,10 +52,11 @@ public class AddBlockCommentAction extends BlockCommentAction {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.actions.BlockCommentAction#runInternal(org.eclipse.jface.text.ITextSelection, org.eclipse.jface.text.IDocumentExtension3, org.eclipse.jdt.internal.ui.actions.BlockCommentAction.Edit.EditFactory)
 	 */
+	@Override
 	protected void runInternal(ITextSelection selection, IDocumentExtension3 docExtension, Edit.EditFactory factory) throws BadLocationException, BadPartitioningException {
 		int selectionOffset= selection.getOffset();
 		int selectionEndOffset= selectionOffset + selection.getLength();
-		List edits= new LinkedList();
+		List<Edit> edits= new LinkedList<Edit>();
 		ITypedRegion partition= docExtension.getPartition(IJavaPartitions.JAVA_PARTITIONING, selectionOffset, false);
 
 		handleFirstPartition(partition, edits, factory, selectionOffset);
@@ -78,7 +79,7 @@ public class AddBlockCommentAction extends BlockCommentAction {
 	 * @param offset the start of the selection, which must lie inside
 	 *        <code>partition</code>
 	 */
-	private void handleFirstPartition(ITypedRegion partition, List edits, Edit.EditFactory factory, int offset) throws BadLocationException {
+	private void handleFirstPartition(ITypedRegion partition, List<Edit> edits, Edit.EditFactory factory, int offset) throws BadLocationException {
 
 		int partOffset= partition.getOffset();
 		String partType= partition.getType();
@@ -120,7 +121,7 @@ public class AddBlockCommentAction extends BlockCommentAction {
 	 * @throws BadPartitioningException if the document does not have a Java
 	 *         partitioning
 	 */
-	private ITypedRegion handleInteriorPartition(ITypedRegion partition, List edits, Edit.EditFactory factory, IDocumentExtension3 docExtension) throws BadPartitioningException, BadLocationException {
+	private ITypedRegion handleInteriorPartition(ITypedRegion partition, List<Edit> edits, Edit.EditFactory factory, IDocumentExtension3 docExtension) throws BadPartitioningException, BadLocationException {
 
 		// end of previous partition
 		String partType= partition.getType();
@@ -179,7 +180,7 @@ public class AddBlockCommentAction extends BlockCommentAction {
 	 * @param factory the edit factory
 	 * @param endOffset the end offset of the selection
 	 */
-	private void handleLastPartition(ITypedRegion partition, List edits, Edit.EditFactory factory, int endOffset) throws BadLocationException {
+	private void handleLastPartition(ITypedRegion partition, List<Edit> edits, Edit.EditFactory factory, int endOffset) throws BadLocationException {
 
 		String partType= partition.getType();
 
@@ -211,6 +212,7 @@ public class AddBlockCommentAction extends BlockCommentAction {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.actions.BlockCommentAction#validSelection(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	protected boolean isValidSelection(ITextSelection selection) {
 		return selection != null && !selection.isEmpty() && selection.getLength() > 0;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTaskAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTaskAction.java
index 7ac8bb6..9c25ebf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTaskAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTaskAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,10 +33,12 @@ public class AddTaskAction extends SelectionDispatchAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.ADD_TASK_ACTION);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(getElement(selection) != null);
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		IResource resource= getElement(selection);
 		if (resource == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AllCleanUpsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AllCleanUpsAction.java
index 00223ff..ae0ead1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AllCleanUpsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AllCleanUpsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,9 +15,9 @@ import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.core.runtime.preferences.DefaultScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 
 import org.eclipse.ui.IWorkbenchSite;
 
@@ -57,6 +57,7 @@ public class AllCleanUpsAction extends CleanUpAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUp[] getCleanUps(ICompilationUnit[] units) {
 		return JavaPlugin.getDefault().getCleanUpRegistry().createCleanUps();
 	}
@@ -64,6 +65,7 @@ public class AllCleanUpsAction extends CleanUpAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getActionName() {
 		return ActionMessages.CleanUpAction_actionName;
 	}
@@ -71,18 +73,17 @@ public class AllCleanUpsAction extends CleanUpAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void performRefactoring(ICompilationUnit[] cus, ICleanUp[] cleanUps) throws InvocationTargetException {
 		RefactoringExecutionStarter.startCleanupRefactoring(cus, cleanUps, !showWizard(), getShell(), showWizard(), getActionName());
 	}
 
 	private boolean showWizard() {
-		InstanceScope instanceScope= new InstanceScope();
-		IEclipsePreferences instanceNode= instanceScope.getNode(JavaUI.ID_PLUGIN);
+		IEclipsePreferences instanceNode= InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN);
 		if (instanceNode.get(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, null) != null)
 			return instanceNode.getBoolean(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, true);
 
-		DefaultScope defaultScope= new DefaultScope();
-		IEclipsePreferences defaultNode= defaultScope.getNode(JavaUI.ID_PLUGIN);
+		IEclipsePreferences defaultNode= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN);
 		return defaultNode.getBoolean(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, true);
 	}
 
@@ -102,12 +103,12 @@ public class AllCleanUpsAction extends CleanUpAction {
 				}
 			}
 		};
-		new InstanceScope().getNode(JavaUI.ID_PLUGIN).addPreferenceChangeListener(fPreferenceChangeListener);
+		InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).addPreferenceChangeListener(fPreferenceChangeListener);
     }
 
 	public void dispose() {
 		if (fPreferenceChangeListener != null) {
-			new InstanceScope().getNode(JavaUI.ID_PLUGIN).removePreferenceChangeListener(fPreferenceChangeListener);
+			InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).removePreferenceChangeListener(fPreferenceChangeListener);
 			fPreferenceChangeListener= null;
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/BlockCommentAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/BlockCommentAction.java
index 923551a..d83a1b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/BlockCommentAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/BlockCommentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -156,6 +156,7 @@ public abstract class BlockCommentAction extends TextEditorAction {
 		/*
 		 * @see org.eclipse.jface.text.DocumentEvent#getOffset()
 		 */
+		@Override
 		public int getOffset() {
 			return fPosition.getOffset();
 		}
@@ -171,6 +172,7 @@ public abstract class BlockCommentAction extends TextEditorAction {
 
 	}
 
+	@Override
 	public void run() {
 		if (!isEnabled())
 			return;
@@ -232,9 +234,9 @@ public abstract class BlockCommentAction extends TextEditorAction {
 	 * @param edits a list of <code>Edit</code>s
 	 * @throws BadLocationException if an <code>Edit</code> threw such an exception.
 	 */
-	protected void executeEdits(List edits) throws BadLocationException {
-		for (Iterator it= edits.iterator(); it.hasNext();) {
-			Edit edit= (Edit) it.next();
+	protected void executeEdits(List<Edit> edits) throws BadLocationException {
+		for (Iterator<Edit> it= edits.iterator(); it.hasNext();) {
+			Edit edit= it.next();
 			edit.perform();
 		}
 	}
@@ -261,6 +263,7 @@ public abstract class BlockCommentAction extends TextEditorAction {
 	/*
 	 * @see org.eclipse.ui.texteditor.IUpdate#update()
 	 */
+	@Override
 	public void update() {
 		super.update();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CategoryFilterActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CategoryFilterActionGroup.java
index 2423fa2..fdcfe60 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CategoryFilterActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CategoryFilterActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean select(Viewer viewer, Object parentElement, Object element) {
 			if (element instanceof IMember) {
 				IMember member= (IMember)element;
@@ -93,14 +94,14 @@ public class CategoryFilterActionGroup extends ActionGroup {
 
 	}
 
-	private class CategoryFilterSelectionDialog extends SelectionStatusDialog implements IListAdapter {
+	private class CategoryFilterSelectionDialog extends SelectionStatusDialog implements IListAdapter<String> {
 
 		private static final int SELECT_ALL= 0;
 		private static final int DESELECT_ALL= 1;
 
-		private final CheckedListDialogField fCategoryList;
+		private final CheckedListDialogField<String> fCategoryList;
 
-		public CategoryFilterSelectionDialog(Shell parent, List categories, List selectedCategories) {
+		public CategoryFilterSelectionDialog(Shell parent, List<String> categories, List<String> selectedCategories) {
 			super(parent);
 
 			setTitle(ActionMessages.CategoryFilterActionGroup_JavaCategoryFilter_title);
@@ -110,7 +111,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 					ActionMessages.CategoryFilterActionGroup_DeselectAllCategories
 					};
 
-			fCategoryList= new CheckedListDialogField(this, buttons, new ILabelProvider() {
+			fCategoryList= new CheckedListDialogField<String>(this, buttons, new ILabelProvider() {
 							public Image getImage(Object element) {return null;}
 							public String getText(Object element) {return (String)element;}
 							public void addListener(ILabelProviderListener listener) {}
@@ -122,8 +123,8 @@ public class CategoryFilterActionGroup extends ActionGroup {
 			fCategoryList.setViewerComparator(new ViewerComparator());
 			fCategoryList.setLabelText(ActionMessages.CategoryFilterActionGroup_SelectCategoriesDescription);
 			fCategoryList.checkAll(true);
-			for (Iterator iter= selectedCategories.iterator(); iter.hasNext();) {
-				String selected= (String)iter.next();
+			for (Iterator<String> iter= selectedCategories.iterator(); iter.hasNext();) {
+				String selected= iter.next();
 				fCategoryList.setChecked(selected, false);
 			}
 			if (categories.size() == 0) {
@@ -134,6 +135,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 			LayoutUtil.doDefaultLayout(composite, new DialogField[] { fCategoryList }, true, 5, 5);
@@ -148,6 +150,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected void computeResult() {
 			setResult(fCategoryList.getCheckedElements());
 		}
@@ -155,7 +158,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		/**
 		 * {@inheritDoc}
 		 */
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<String> field, int index) {
 			if (index == SELECT_ALL) {
 				fCategoryList.checkAll(true);
 				fCategoryList.refresh();
@@ -165,14 +168,14 @@ public class CategoryFilterActionGroup extends ActionGroup {
 			}
 		}
 
-		public void doubleClicked(ListDialogField field) {
-			List selectedElements= field.getSelectedElements();
+		public void doubleClicked(ListDialogField<String> field) {
+			List<?> selectedElements= field.getSelectedElements();
 			if (selectedElements.size() == 1) {
-				Object selected= selectedElements.get(0);
+				String selected= (String) selectedElements.get(0);
 				fCategoryList.setChecked(selected, !fCategoryList.isChecked(selected));
 			}
 		}
-		public void selectionChanged(ListDialogField field) {}
+		public void selectionChanged(ListDialogField<String> field) {}
 	}
 
 	private class CategoryFilterMenuAction extends Action {
@@ -187,6 +190,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void run() {
 			showCategorySelectionDialog(fInputElement);
 		}
@@ -209,6 +213,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void run() {
 			super.run();
 			if (fFilteredCategories.contains(fCategory)) {
@@ -234,6 +239,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void run() {
 			fFilterUncategorizedMembers= !fFilterUncategorizedMembers;
 			storeSettings();
@@ -254,12 +260,12 @@ public class CategoryFilterActionGroup extends ActionGroup {
 	private final StructuredViewer fViewer;
 	private final String fViewerId;
 	private final CategoryFilter fFilter;
-	private final HashSet fFilteredCategories;
+	private final HashSet<String> fFilteredCategories;
 	private IJavaElement[] fInputElement;
 	private final CategoryFilterMenuAction fMenuAction;
 	private IMenuManager fMenuManager;
 	private IMenuListener fMenuListener;
-	private final LinkedHashMap fLRUList;
+	private final LinkedHashMap<String, String> fLRUList;
 	private boolean fFilterUncategorizedMembers;
 
 	public CategoryFilterActionGroup(final StructuredViewer viewer, final String viewerId, IJavaElement[] input) {
@@ -267,9 +273,10 @@ public class CategoryFilterActionGroup extends ActionGroup {
 		Assert.isLegal(viewerId != null);
 		Assert.isLegal(input != null);
 
-		fLRUList= new LinkedHashMap(MAX_NUMBER_OF_CATEGORIES_IN_MENU * 2, 0.75f, true) {
+		fLRUList= new LinkedHashMap<String, String>(MAX_NUMBER_OF_CATEGORIES_IN_MENU * 2, 0.75f, true) {
 			private static final long serialVersionUID= 1L;
-			protected boolean removeEldestEntry(Map.Entry eldest) {
+			@Override
+			protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
 				return size() > MAX_NUMBER_OF_CATEGORIES_IN_MENU;
 			}
 		};
@@ -279,7 +286,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 
 		fFilter= new CategoryFilter();
 
-		fFilteredCategories= new HashSet();
+		fFilteredCategories= new HashSet<String>();
 		loadSettings();
 
 		fMenuAction= new CategoryFilterMenuAction();
@@ -318,21 +325,21 @@ public class CategoryFilterActionGroup extends ActionGroup {
 			store.setValue(getPreferenceKey(), ""); //$NON-NLS-1$
 		} else {
 			StringBuffer buf= new StringBuffer();
-			Iterator iter= fFilteredCategories.iterator();
-			String element= (String)iter.next();
+			Iterator<String> iter= fFilteredCategories.iterator();
+			String element= iter.next();
 			buf.append(element);
 			while (iter.hasNext()) {
-				element= (String)iter.next();
+				element= iter.next();
 				buf.append(';');
 				buf.append(element);
 			}
 			store.setValue(getPreferenceKey(), buf.toString());
 			buf= new StringBuffer();
 			iter= fLRUList.values().iterator();
-			element= (String)iter.next();
+			element= iter.next();
 			buf.append(element);
 			while (iter.hasNext()) {
-				element= (String)iter.next();
+				element= iter.next();
 				buf.append(';');
 				buf.append(element);
 			}
@@ -358,6 +365,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		if (fMenuManager != null) {
@@ -380,7 +388,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 				}
 			}
 		}
-		List menuEntries= new ArrayList();
+		List<String> menuEntries= new ArrayList<String>();
 		boolean hasUncategorizedMembers= getMenuCategories(menuEntries);
 		Collections.sort(menuEntries, Collator.getInstance());
 
@@ -388,16 +396,16 @@ public class CategoryFilterActionGroup extends ActionGroup {
 			manager.appendToGroup(CATEGORY_MENU_GROUP_NAME, new FilterUncategorizedMembersAction());
 
 		int count= 0;
-		for (Iterator iter= menuEntries.iterator(); iter.hasNext();) {
-			String category= (String)iter.next();
+		for (Iterator<String> iter= menuEntries.iterator(); iter.hasNext();) {
+			String category= iter.next();
 			manager.appendToGroup(CATEGORY_MENU_GROUP_NAME, new CategoryFilterAction(category, count + 1));
 			count++;
 		}
 	}
 
-	private boolean getMenuCategories(List result) {
-		final HashSet/*<String>*/ categories= new HashSet();
-		final HashSet/*<String>*/ foundLRUCategories= new HashSet();
+	private boolean getMenuCategories(List<String> result) {
+		final HashSet<String> categories= new HashSet<String>();
+		final HashSet<String> foundLRUCategories= new HashSet<String>();
 		final boolean hasUncategorizedMember[]= new boolean[] {false};
 		for (int i= 0; i < fInputElement.length && !(hasUncategorizedMember[0] && foundLRUCategories.size() >= MAX_NUMBER_OF_CATEGORIES_IN_MENU); i++) {
 			collectCategories(fInputElement[i], new IResultCollector() {
@@ -418,16 +426,16 @@ public class CategoryFilterActionGroup extends ActionGroup {
 			});
 		}
 		int count= 0;
-		for (Iterator iter= foundLRUCategories.iterator(); iter.hasNext();) {
-			String element= (String)iter.next();
+		for (Iterator<String> iter= foundLRUCategories.iterator(); iter.hasNext();) {
+			String element= iter.next();
 			result.add(element);
 			count++;
 		}
 		if (count < MAX_NUMBER_OF_CATEGORIES_IN_MENU) {
-			List sortedCategories= new ArrayList(categories);
+			List<String> sortedCategories= new ArrayList<String>(categories);
 			Collections.sort(sortedCategories, Collator.getInstance());
-			for (Iterator iter= sortedCategories.iterator(); iter.hasNext() && count < MAX_NUMBER_OF_CATEGORIES_IN_MENU;) {
-				String element= (String)iter.next();
+			for (Iterator<String> iter= sortedCategories.iterator(); iter.hasNext() && count < MAX_NUMBER_OF_CATEGORIES_IN_MENU;) {
+				String element= iter.next();
 				if (!foundLRUCategories.contains(element)) {
 					result.add(element);
 					count++;
@@ -486,7 +494,7 @@ public class CategoryFilterActionGroup extends ActionGroup {
 	}
 
 	private void showCategorySelectionDialog(IJavaElement[] input) {
-		final HashSet/*<String>*/ categories= new HashSet();
+		final HashSet<String> categories= new HashSet<String>();
 		for (int i= 0; i < input.length; i++) {
 			collectCategories(input[i], new IResultCollector() {
 				public boolean accept(String[] cats) {
@@ -497,11 +505,11 @@ public class CategoryFilterActionGroup extends ActionGroup {
 				}
 			});
 		}
-		CategoryFilterSelectionDialog dialog= new CategoryFilterSelectionDialog(fViewer.getControl().getShell(), new ArrayList(categories), new ArrayList(fFilteredCategories));
+		CategoryFilterSelectionDialog dialog= new CategoryFilterSelectionDialog(fViewer.getControl().getShell(), new ArrayList<String>(categories), new ArrayList<String>(fFilteredCategories));
 		if (dialog.open() == Window.OK) {
 			Object[] selected= dialog.getResult();
-			for (Iterator iter= categories.iterator(); iter.hasNext();) {
-				String category= (String)iter.next();
+			for (Iterator<String> iter= categories.iterator(); iter.hasNext();) {
+				String category= iter.next();
 				if (contains(selected, category)) {
 					if (fFilteredCategories.remove(category))
 						fLRUList.put(category, category);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CleanUpAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CleanUpAction.java
index c52a141..2d0b846 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CleanUpAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CleanUpAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,6 +91,7 @@ public abstract class CleanUpAction extends SelectionDispatchAction {
 		RefactoringExecutionStarter.startCleanupRefactoring(units, cleanUps, false, getShell(), false, getActionName());
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
 		ICompilationUnit cu= getCompilationUnit(fEditor);
 		if (cu != null) {
@@ -98,6 +99,7 @@ public abstract class CleanUpAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		ICompilationUnit[] cus= getCompilationUnits(selection);
 		if (cus.length == 0) {
@@ -109,10 +111,12 @@ public abstract class CleanUpAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(getCompilationUnit(fEditor) != null);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(isEnabled(selection));
 	}
@@ -215,16 +219,16 @@ public abstract class CleanUpAction extends SelectionDispatchAction {
 	}
 
 	public ICompilationUnit[] getCompilationUnits(IStructuredSelection selection) {
-		HashSet result= new HashSet();
+		HashSet<IJavaElement> result= new HashSet<IJavaElement>();
 		Object[] selected= selection.toArray();
 		for (int i= 0; i < selected.length; i++) {
 			Object element= selected[i];
 			collectCompilationUnits(element, result);
 		}
-		return (ICompilationUnit[])result.toArray(new ICompilationUnit[result.size()]);
+		return result.toArray(new ICompilationUnit[result.size()]);
 	}
 
-	private void collectCompilationUnits(Object element, Collection result) {
+	private void collectCompilationUnits(Object element, Collection<IJavaElement> result) {
 		try {
 			if (element instanceof IJavaElement) {
 				IJavaElement elem= (IJavaElement)element;
@@ -276,11 +280,11 @@ public abstract class CleanUpAction extends SelectionDispatchAction {
 		}
 	}
 
-	private void collectCompilationUnits(IPackageFragment pack, Collection result) throws JavaModelException {
+	private void collectCompilationUnits(IPackageFragment pack, Collection<IJavaElement> result) throws JavaModelException {
 		result.addAll(Arrays.asList(pack.getCompilationUnits()));
 	}
 
-	private void collectCompilationUnits(IPackageFragmentRoot root, Collection result) throws JavaModelException {
+	private void collectCompilationUnits(IPackageFragmentRoot root, Collection<IJavaElement> result) throws JavaModelException {
 		if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
 			IJavaElement[] children= root.getChildren();
 			for (int i= 0; i < children.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CollapseAllAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CollapseAllAction.java
index fbe3070..1e1dd11 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CollapseAllAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CollapseAllAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Eric Rizzo, IBM Corporation and others.
+ * Copyright (c) 2008, 2011 Eric Rizzo, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ public class CollapseAllAction extends Action {
 		fViewer= viewer;
 	}
 
+	@Override
 	public void run() {
 		try {
 			fViewer.getControl().setRedraw(false);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CompositeActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CompositeActionGroup.java
index 0de82fd..7af9249 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CompositeActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CompositeActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class CompositeActionGroup extends ActionGroup {
 		}
 	}
 
+	@Override
 	public void dispose() {
 		super.dispose();
 		if (fGroups == null)
@@ -55,6 +56,7 @@ public class CompositeActionGroup extends ActionGroup {
 		}
 	}
 
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		if (fGroups == null)
@@ -64,6 +66,7 @@ public class CompositeActionGroup extends ActionGroup {
 		}
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		if (fGroups == null)
@@ -73,6 +76,7 @@ public class CompositeActionGroup extends ActionGroup {
 		}
 	}
 
+	@Override
 	public void setContext(ActionContext context) {
 		super.setContext(context);
 		if (fGroups == null)
@@ -82,6 +86,7 @@ public class CompositeActionGroup extends ActionGroup {
 		}
 	}
 
+	@Override
 	public void updateActionBars() {
 		super.updateActionBars();
 		if (fGroups == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CopyQualifiedNameAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CopyQualifiedNameAction.java
index c78351e..85e0681 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CopyQualifiedNameAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/CopyQualifiedNameAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,7 @@ import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.source.ISourceViewer;
 
 import org.eclipse.ui.IWorkbenchSite;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ResourceTransfer;
 
 import org.eclipse.jdt.core.IClassFile;
@@ -52,6 +53,7 @@ import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
+import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IBinding;
@@ -63,6 +65,8 @@ import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.PackageDeclaration;
+import org.eclipse.jdt.core.dom.SimpleType;
+import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.TypeParameter;
@@ -73,9 +77,12 @@ import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.SharedASTProvider;
 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
 
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.browsing.LogicalPackage;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
 
 public class CopyQualifiedNameAction extends SelectionDispatchAction {
@@ -105,15 +112,18 @@ public class CopyQualifiedNameAction extends SelectionDispatchAction {
 		setToolTipText(ActionMessages.CopyQualifiedNameAction_ToolTipText);
 		setDisabledImageDescriptor(JavaPluginImages.DESC_DLCL_COPY_QUALIFIED_NAME);
 		setImageDescriptor(JavaPluginImages.DESC_ELCL_COPY_QUALIFIED_NAME);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.COPY_QUALIFIED_NAME_ACTION);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(canEnable(selection.toArray()));
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		//Must not create an AST
 	}
@@ -159,12 +169,16 @@ public class CopyQualifiedNameAction extends SelectionDispatchAction {
 		if (element instanceof IResource)
 			return true;
 
+		if (element instanceof LogicalPackage)
+			return true;
+
 		return false;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 
 		try {
@@ -180,12 +194,12 @@ public class CopyQualifiedNameAction extends SelectionDispatchAction {
 			if (elements.length == 1) {
 				Object element= elements[0];
 				String qualifiedName= getQualifiedName(element);
-				IResource resource;
-				if (element instanceof IJavaElement)
-					resource= ((IJavaElement)element).getCorrespondingResource();
-				else if (element instanceof IJarEntryResource)
-					resource= null;
-				else
+				IResource resource= null;
+				if (element instanceof IJavaElement) {
+					IJavaElement je= ((IJavaElement)element);
+					if (je.exists())
+						resource= je.getCorrespondingResource();
+				} else if (element instanceof IResource)
 					resource= (IResource)element;
 
 				if (resource != null) {
@@ -237,30 +251,36 @@ public class CopyQualifiedNameAction extends SelectionDispatchAction {
 		if (element instanceof IJarEntryResource)
 			return ((IJarEntryResource)element).getFullPath().toString();
 
+		if (element instanceof LogicalPackage)
+			return ((LogicalPackage)element).getElementName();
+
 		if (element instanceof IJavaProject || element instanceof IPackageFragmentRoot || element instanceof ITypeRoot) {
 			IResource resource= ((IJavaElement)element).getCorrespondingResource();
 			if (resource != null)
 				return getQualifiedName(resource);
 		}
 
+		if (element instanceof IBinding)
+			return BindingLabelProvider.getBindingLabel((IBinding)element, LABEL_FLAGS);
+
 		return TextProcessor.deprocess(JavaElementLabels.getTextLabel(element, LABEL_FLAGS));
 	}
 
 	private Object[] getSelectedElements() {
 		if (fEditor != null) {
-			IJavaElement element= getSelectedElement(fEditor);
+			Object element= getSelectedElement(fEditor);
 			if (element == null)
 				return null;
 
-			return new IJavaElement[] { element };
+			return new Object[] { element };
 		}
 
 		ISelection selection= getSelection();
 		if (!(selection instanceof IStructuredSelection))
 			return null;
 
-		List result= new ArrayList();
-		for (Iterator iter= ((IStructuredSelection)selection).iterator(); iter.hasNext();) {
+		List<Object> result= new ArrayList<Object>();
+		for (Iterator<?> iter= ((IStructuredSelection)selection).iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (isValidElement(element))
 				result.add(element);
@@ -271,7 +291,7 @@ public class CopyQualifiedNameAction extends SelectionDispatchAction {
 		return result.toArray(new Object[result.size()]);
 	}
 
-	private IJavaElement getSelectedElement(JavaEditor editor) {
+	private Object getSelectedElement(JavaEditor editor) {
 		ISourceViewer viewer= editor.getViewer();
 		if (viewer == null)
 			return null;
@@ -293,6 +313,9 @@ public class CopyQualifiedNameAction extends SelectionDispatchAction {
 
 		IBinding binding= null;
 		if (node instanceof Name) {
+			binding= getConstructorBindingIfAvailable((Name)node);
+			if (binding != null)
+				return binding;
 			binding= ((Name)node).resolveBinding();
 		} else if (node instanceof MethodInvocation) {
 			binding= ((MethodInvocation)node).resolveMethodBinding();
@@ -328,4 +351,23 @@ public class CopyQualifiedNameAction extends SelectionDispatchAction {
 		return null;
 	}
 
+	/**
+	 * Checks whether the given name belongs to a {@link ClassInstanceCreation} and if so, returns
+	 * its constructor binding.
+	 * 
+	 * @param nameNode the name node
+	 * @return the constructor binding or <code>null</code> if not found
+	 * @since 3.7
+	 */
+	private IBinding getConstructorBindingIfAvailable(Name nameNode) {
+		StructuralPropertyDescriptor loc= nameNode.getLocationInParent();
+		if (loc == SimpleType.NAME_PROPERTY) {
+			ASTNode parent= nameNode.getParent();
+			loc= parent.getLocationInParent();
+			if (loc == ClassInstanceCreation.TYPE_PROPERTY)
+				return ((ClassInstanceCreation)parent.getParent()).resolveConstructorBinding();
+		}
+		return null;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ExtractSuperClassAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ExtractSuperClassAction.java
index 8d586fd..010804a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ExtractSuperClassAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ExtractSuperClassAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.io.CharConversionException;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -85,13 +86,15 @@ public class ExtractSuperClassAction extends SelectionDispatchAction {
 				JavaPlugin.log(exception);
 			}
 		}
-		for (final Iterator iterator= selection.iterator(); iterator.hasNext();) {
+		for (final Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
 			if (!(iterator.next() instanceof IMember))
 				return null;
 		}
-		final Set set= new HashSet();
-		set.addAll(Arrays.asList(selection.toArray()));
-		return (IMember[]) set.toArray(new IMember[set.size()]);
+		final Set<IMember> set= new HashSet<IMember>();
+		@SuppressWarnings("unchecked")
+		List<IMember> selectionList= (List<IMember>) (List<?>) Arrays.asList(selection.toArray());
+		set.addAll(selectionList);
+		return set.toArray(new IMember[set.size()]);
 	}
 
 	/** The java editor */
@@ -134,6 +137,7 @@ public class ExtractSuperClassAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run(final IStructuredSelection selection) {
 		try {
 			final IMember[] members= getSelectedMembers(selection);
@@ -147,6 +151,7 @@ public class ExtractSuperClassAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run(final ITextSelection selection) {
 		try {
 			if (! ActionUtil.isEditable(fEditor))
@@ -166,6 +171,7 @@ public class ExtractSuperClassAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(final IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isExtractSupertypeAvailable(selection));
@@ -180,6 +186,7 @@ public class ExtractSuperClassAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(final ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -187,6 +194,7 @@ public class ExtractSuperClassAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(final JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isExtractSupertypeAvailable(selection));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FindBrokenNLSKeysAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FindBrokenNLSKeysAction.java
index 6530797..c21236f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FindBrokenNLSKeysAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FindBrokenNLSKeysAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,6 +112,7 @@ public class FindBrokenNLSKeysAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		ISelectionProvider selectionProvider= fEditor.getSelectionProvider();
 		if (selectionProvider == null)
@@ -123,6 +124,7 @@ public class FindBrokenNLSKeysAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (selection.size() == 1) {
 			Object firstElement= selection.getFirstElement();
@@ -155,8 +157,8 @@ public class FindBrokenNLSKeysAction extends SelectionDispatchAction {
 	}
 
 	private void run(SearchPatternData[] data, String scope) {
-		List wrappers= new ArrayList();
-		List properties= new ArrayList();
+		List<IType> wrappers= new ArrayList<IType>();
+		List<IFile> properties= new ArrayList<IFile>();
 		for (int i= 0; i < data.length; i++) {
 			SearchPatternData current= data[i];
 			if (current.getWrapperClass() != null || current.getPropertyFile() != null) {
@@ -164,14 +166,15 @@ public class FindBrokenNLSKeysAction extends SelectionDispatchAction {
 				properties.add(current.getPropertyFile());
 			}
 		}
-		IType[] accessorClasses= (IType[])wrappers.toArray(new IType[wrappers.size()]);
-		IFile[] propertieFiles= (IFile[])properties.toArray(new IFile[properties.size()]);
+		IType[] accessorClasses= wrappers.toArray(new IType[wrappers.size()]);
+		IFile[] propertieFiles= properties.toArray(new IFile[properties.size()]);
 		SearchBrokenNLSKeysUtil.search(scope, accessorClasses, propertieFiles);
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		ISelectionProvider selectionProvider= fEditor.getSelectionProvider();
 		if (selectionProvider == null) {
@@ -184,19 +187,20 @@ public class FindBrokenNLSKeysAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(canEnable(selection));
 	}
 
 	private SearchPatternData[] getNLSFiles(IStructuredSelection selection) {
 		Object[] selectedElements= selection.toArray();
-		HashMap result= new HashMap();
+		HashMap<IType, SearchPatternData> result= new HashMap<IType, SearchPatternData>();
 
 		collectNLSFilesFromResources(selectedElements, result);
 		collectNLSFilesFromJavaElements(selectedElements, result);
 
-		Collection values= result.values();
-		return (SearchPatternData[])values.toArray(new SearchPatternData[values.size()]);
+		Collection<SearchPatternData> values= result.values();
+		return values.toArray(new SearchPatternData[values.size()]);
 	}
 
 	private boolean canEnable(IStructuredSelection selection) {
@@ -243,7 +247,7 @@ public class FindBrokenNLSKeysAction extends SelectionDispatchAction {
 		return false;
 	}
 
-	private void collectNLSFilesFromResources(Object[] objects, HashMap result) {
+	private void collectNLSFilesFromResources(Object[] objects, HashMap<IType, SearchPatternData> result) {
 		try {
 			for (int i= 0; i < objects.length; i++) {
 				Object object= objects[i];
@@ -279,7 +283,7 @@ public class FindBrokenNLSKeysAction extends SelectionDispatchAction {
 		}
 	}
 
-	private void collectNLSFilesFromJavaElements(Object[] objects, HashMap result) {
+	private void collectNLSFilesFromJavaElements(Object[] objects, HashMap<IType, SearchPatternData> result) {
 		try {
 			for (int i= 0; i < objects.length; i++) {
 				if (objects[i] instanceof IJavaElement) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FoldingActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FoldingActionGroup.java
index c5d5fc4..c8dd0f6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FoldingActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/FoldingActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -117,6 +117,7 @@ public class FoldingActionGroup extends ActionGroup {
 		fViewer.addProjectionListener(fProjectionListener);
 
 		fToggle= new PreferenceAction(FoldingMessages.getResourceBundle(), "Projection.Toggle.", IAction.AS_CHECK_BOX) { //$NON-NLS-1$
+			@Override
 			public void run() {
 				IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 				boolean current= store.getBoolean(PreferenceConstants.EDITOR_FOLDING_ENABLED);
@@ -151,6 +152,7 @@ public class FoldingActionGroup extends ActionGroup {
 		editor.setAction("FoldingCollapse", fCollapse); //$NON-NLS-1$
 
 		fRestoreDefaults= new FoldingAction(FoldingMessages.getResourceBundle(), "Projection.Restore.") { //$NON-NLS-1$
+			@Override
 			public void run() {
 				if (editor instanceof JavaEditor) {
 					JavaEditor javaEditor= (JavaEditor) editor;
@@ -162,6 +164,7 @@ public class FoldingActionGroup extends ActionGroup {
 		editor.setAction("FoldingRestore", fRestoreDefaults); //$NON-NLS-1$
 
 		fCollapseMembers= new FoldingAction(FoldingMessages.getResourceBundle(), "Projection.CollapseMembers.") { //$NON-NLS-1$
+			@Override
 			public void run() {
 				if (editor instanceof JavaEditor) {
 					JavaEditor javaEditor= (JavaEditor) editor;
@@ -173,6 +176,7 @@ public class FoldingActionGroup extends ActionGroup {
 		editor.setAction("FoldingCollapseMembers", fCollapseMembers); //$NON-NLS-1$
 
 		fCollapseComments= new FoldingAction(FoldingMessages.getResourceBundle(), "Projection.CollapseComments.") { //$NON-NLS-1$
+			@Override
 			public void run() {
 				if (editor instanceof JavaEditor) {
 					JavaEditor javaEditor= (JavaEditor) editor;
@@ -199,6 +203,7 @@ public class FoldingActionGroup extends ActionGroup {
 	/*
 	 * @see org.eclipse.ui.actions.ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (isEnabled()) {
 			fViewer.removeProjectionListener(fProjectionListener);
@@ -246,6 +251,7 @@ public class FoldingActionGroup extends ActionGroup {
 	/*
 	 * @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
 	 */
+	@Override
 	public void updateActionBars() {
 		update();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsContentProvider.java
index cdbc84c..075258f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,21 +18,21 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
 
-import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.IVariableBinding;
 
 public class GenerateConstructorUsingFieldsContentProvider implements ITreeContentProvider {
 
 	private static final Object[] EMPTY= new Object[0];
 
-	private List fFields;
-	private List fSelected;
+	private List<IVariableBinding> fFields;
+	private List<IVariableBinding> fSelected;
 
-	public GenerateConstructorUsingFieldsContentProvider(List/*IVariableBinding*/ fields, List/*IVariableBinding*/ selected) throws JavaModelException {
+	public GenerateConstructorUsingFieldsContentProvider(List<IVariableBinding> fields, List<IVariableBinding> selected) {
 		fFields= fields;
 		fSelected= selected;
 	}
 
-	public boolean canMoveDown(List selectedElements) {
+	public boolean canMoveDown(List<?> selectedElements) {
 		int nSelected= selectedElements.size();
 		for (int index= fFields.size() - 1; index >= 0 && nSelected > 0; index--) {
 			if (!selectedElements.contains(fFields.get(index))) {
@@ -43,7 +43,7 @@ public class GenerateConstructorUsingFieldsContentProvider implements ITreeConte
 		return false;
 	}
 
-	public boolean canMoveUp(List selected) {
+	public boolean canMoveUp(List<?> selected) {
 		int nSelected= selected.size();
 		for (int index= 0; index < fFields.size() && nSelected > 0; index++) {
 			if (!selected.contains(fFields.get(index))) {
@@ -60,7 +60,7 @@ public class GenerateConstructorUsingFieldsContentProvider implements ITreeConte
 	public void dispose() {
 	}
 
-	public void down(List checked, CheckboxTreeViewer tree) {
+	public void down(List<?> checked, CheckboxTreeViewer tree) {
 		if (checked.size() > 0) {
 			setElements(reverse(moveUp(reverse(fFields), checked)), tree);
 			tree.reveal(checked.get(checked.size() - 1));
@@ -82,7 +82,7 @@ public class GenerateConstructorUsingFieldsContentProvider implements ITreeConte
 		return fFields.toArray();
 	}
 
-	public List getFieldsList() {
+	public List<IVariableBinding> getFieldsList() {
 		return fFields;
 	}
 
@@ -112,11 +112,11 @@ public class GenerateConstructorUsingFieldsContentProvider implements ITreeConte
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 	}
 
-	private List moveUp(List elements, List move) {
-		List result= new ArrayList(elements.size());
-		Object floating= null;
+	private List<IVariableBinding> moveUp(List<IVariableBinding> elements, List<?> move) {
+		List<IVariableBinding> result= new ArrayList<IVariableBinding>(elements.size());
+		IVariableBinding floating= null;
 		for (int index= 0; index < elements.size(); index++) {
-			Object current= elements.get(index);
+			IVariableBinding current= elements.get(index);
 			if (move.contains(current)) {
 				result.add(current);
 			} else {
@@ -132,21 +132,21 @@ public class GenerateConstructorUsingFieldsContentProvider implements ITreeConte
 		return result;
 	}
 
-	private List reverse(List list) {
-		List reverse= new ArrayList(list.size());
+	private List<IVariableBinding> reverse(List<IVariableBinding> list) {
+		List<IVariableBinding> reverse= new ArrayList<IVariableBinding>(list.size());
 		for (int index= list.size() - 1; index >= 0; index--) {
 			reverse.add(list.get(index));
 		}
 		return reverse;
 	}
 
-	public void setElements(List elements, CheckboxTreeViewer tree) {
-		fFields= new ArrayList(elements);
+	public void setElements(List<IVariableBinding> elements, CheckboxTreeViewer tree) {
+		fFields= new ArrayList<IVariableBinding>(elements);
 		if (tree != null)
 			tree.refresh();
 	}
 
-	public void up(List checked, CheckboxTreeViewer tree) {
+	public void up(List<?> checked, CheckboxTreeViewer tree) {
 		if (checked.size() > 0) {
 			setElements(moveUp(fFields, checked), tree);
 			tree.reveal(checked.get(0));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java
index be8702c..0e54fcb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,7 +65,7 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		public void selectionChanged(SelectionChangedEvent event) {
 			IStructuredSelection selection= (IStructuredSelection) getTreeViewer().getSelection();
 
-			List selectedList= selection.toList();
+			List<?> selectedList= selection.toList();
 			GenerateConstructorUsingFieldsContentProvider cp= (GenerateConstructorUsingFieldsContentProvider) getContentProvider();
 
 			fButtonControls[GenerateConstructorUsingFieldsSelectionDialog.UP_INDEX].setEnabled(cp.canMoveUp(selectedList));
@@ -142,6 +142,7 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		combo.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fSuperIndex= combo.getSelectionIndex();
 				// Disable omit super checkbox unless default constructor
@@ -153,6 +154,7 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		return composite;
 	}
 
+	@Override
 	protected void buttonPressed(int buttonId) {
 		super.buttonPressed(buttonId);
 		switch (buttonId) {
@@ -171,11 +173,13 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		}
 	}
 
+	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.GENERATE_CONSTRUCTOR_USING_FIELDS_SELECTION_DIALOG);
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -242,6 +246,7 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		return composite;
 	}
 
+	@Override
 	protected Composite createInsertPositionCombo(Composite composite) {
 		Composite entryComposite= super.createInsertPositionCombo(composite);
 		addVisibilityAndModifiersChoices(entryComposite);
@@ -251,10 +256,12 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 	/*
 	 * @see org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog#createLinkControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createLinkControl(Composite composite) {
 		Link link= new Link(composite, SWT.WRAP);
 		link.setText(ActionMessages.GenerateConstructorUsingFieldsSelectionDialog_template_link_message);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				openCodeTempatePage(CodeTemplateContextType.CONSTRUCTORCOMMENT_ID);
 			}
@@ -304,6 +311,7 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		return omitSuperComposite;
 	}
 
+	@Override
 	protected Composite createSelectionButtons(Composite composite) {
 		Composite buttonComposite= super.createSelectionButtons(composite);
 
@@ -332,6 +340,7 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		fButtonsEnabled[GenerateConstructorUsingFieldsSelectionDialog.DOWN_INDEX]= defaultState;
 	}
 
+	@Override
 	protected Composite createVisibilityControlAndModifiers(Composite parent, final IVisibilityChangeListener visibilityChangeListener, int[] availableVisibilities, int correctVisibility) {
 		int[] visibilities= availableVisibilities;
 		try {
@@ -343,10 +352,10 @@ public class GenerateConstructorUsingFieldsSelectionDialog extends SourceActionD
 		return createVisibilityControl(parent, visibilityChangeListener, visibilities, correctVisibility);
 	}
 
-	List getElementList() {
+	List<?> getElementList() {
 		IStructuredSelection selection= (IStructuredSelection) getTreeViewer().getSelection();
-		List elements= selection.toList();
-		ArrayList elementList= new ArrayList();
+		List<?> elements= selection.toList();
+		ArrayList<Object> elementList= new ArrayList<Object>();
 
 		for (int i= 0; i < elements.size(); i++) {
 			elementList.add(elements.get(i));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsValidator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsValidator.java
index e97c281..e1605e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsValidator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ public class GenerateConstructorUsingFieldsValidator implements ISelectionStatus
 
 	private final int fEntries;
 
-	private List fSignatures;
+	private List<String> fSignatures;
 
 	private ITypeBinding fType= null;
 
@@ -67,8 +67,8 @@ public class GenerateConstructorUsingFieldsValidator implements ISelectionStatus
 		}
 	}
 
-	private List getExistingConstructorSignatures() {
-		List existing= new ArrayList();
+	private List<String> getExistingConstructorSignatures() {
+		List<String> existing= new ArrayList<String>();
 		IMethodBinding[] methods= fType.getDeclaredMethods();
 		for (int index= 0; index < methods.length; index++) {
 			if (methods[index].isConstructor()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java
index 62f24da..02272d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -131,6 +131,7 @@ public class IndentAction extends TextEditorAction {
 	/*
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		// update has been called by the framework
 		if (!isEnabled() || !validateEditorInputState())
@@ -254,7 +255,7 @@ public class IndentAction extends TextEditorAction {
 		JavaHeuristicScanner scanner= new JavaHeuristicScanner(document);
 		JavaIndenter indenter= new JavaIndenter(document, scanner, project);
 
-		ArrayList edits= new ArrayList();
+		ArrayList<ReplaceEdit> edits= new ArrayList<ReplaceEdit>();
 
 		int firstLine= document.getLineOfOffset(offset);
 		// check for marginal (zero-length) lines
@@ -281,11 +282,11 @@ public class IndentAction extends TextEditorAction {
 			return null;
 
 		if (edits.size() == 1)
-			return (TextEdit) edits.get(0);
+			return edits.get(0);
 
 		MultiTextEdit result= new MultiTextEdit();
-		for (Iterator iterator= edits.iterator(); iterator.hasNext();) {
-			TextEdit edit= (TextEdit) iterator.next();
+		for (Iterator<ReplaceEdit> iterator= edits.iterator(); iterator.hasNext();) {
+			TextEdit edit= iterator.next();
 			result.addChild(edit);
 		}
 
@@ -675,6 +676,7 @@ public class IndentAction extends TextEditorAction {
 	/*
 	 * @see org.eclipse.ui.texteditor.IUpdate#update()
 	 */
+	@Override
 	public void update() {
 		super.update();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IntroduceParameterObjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IntroduceParameterObjectAction.java
index b4e5b68..b54c2c4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IntroduceParameterObjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IntroduceParameterObjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ public class IntroduceParameterObjectAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isIntroduceParameterObjectAvailable(selection));
@@ -77,6 +78,7 @@ public class IntroduceParameterObjectAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -84,6 +86,7 @@ public class IntroduceParameterObjectAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jdt.internal.ui.javaeditor.JavaTextSelection)
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isIntroduceParameterObjectAvailable(selection));
@@ -97,9 +100,13 @@ public class IntroduceParameterObjectAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
-			run(getSingleSelectedMethod(selection));
+			IMethod singleSelectedMethod= getSingleSelectedMethod(selection);
+			if (!ActionUtil.isEditable(getShell(), singleSelectedMethod))
+				return;
+			run(singleSelectedMethod);
 		} catch (CoreException e) {
 			ExceptionHandler.handle(e, getShell(), ActionMessages.IntroduceParameterObjectAction_exceptiondialog_title,	ActionMessages.IntroduceParameterObjectAction_unexpected_exception);
 		}
@@ -108,14 +115,18 @@ public class IntroduceParameterObjectAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
+			if (!ActionUtil.isEditable(fEditor))
+				return;
 			run(getSingleSelectedMethod(selection));
 		} catch (CoreException e) {
 			ExceptionHandler.handle(e, getShell(), ActionMessages.IntroduceParameterObjectAction_exceptiondialog_title,	ActionMessages.IntroduceParameterObjectAction_unexpected_exception);
 		}
 	}
 
+	@Override
 	public void run(JavaTextSelection selection) {
 		try {
 			IJavaElement[] elements= selection.resolveElementAtOffset();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JDTQuickMenuCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JDTQuickMenuCreator.java
index 517d8a7..f7ce382 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JDTQuickMenuCreator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JDTQuickMenuCreator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ public abstract class JDTQuickMenuCreator extends QuickMenuCreator {
 		fEditor= editor;
 	}
 
+	@Override
 	protected Point computeMenuLocation(StyledText text) {
 		if (fEditor == null || text != fEditor.getViewer().getTextWidget())
 			return super.computeMenuLocation(text);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JarImportWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JarImportWizardAction.java
index 35d659e..60d4502 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JarImportWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/JarImportWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class JarImportWizardAction extends Action implements IObjectActionDelega
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		run(this);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/LexicalSortingAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/LexicalSortingAction.java
index e887440..f26ba59 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/LexicalSortingAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/LexicalSortingAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ public class LexicalSortingAction extends Action {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LEXICAL_SORTING_BROWSING_ACTION);
 	}
 
+	@Override
 	public void run() {
 		valueChanged(isChecked(), true);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java
index e03927c..4628377 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,6 +91,7 @@ public class MultiActionGroup extends ActionGroup {
 
 			viewMenu.add(new ContributionItem() {
 
+				@Override
 				public void fill(Menu menu, int index) {
 
 					int style= SWT.CHECK;
@@ -105,6 +106,7 @@ public class MultiActionGroup extends ActionGroup {
 					mi.setSelection(fCurrentSelection == j);
 					mi.addSelectionListener(new SelectionAdapter() {
 
+						@Override
 						public void widgetSelected(SelectionEvent e) {
 							if (fCurrentSelection == j) {
 								fItems[fCurrentSelection].setSelection(true);
@@ -120,6 +122,7 @@ public class MultiActionGroup extends ActionGroup {
 
 					});
 				}
+				@Override
 				public boolean isDynamic() {
 					return false;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiFormatAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiFormatAction.java
index 202cab2..bb0c317 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiFormatAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiFormatAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,8 +36,9 @@ public class MultiFormatAction extends CleanUpAction {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.actions.CleanUpAction#createCleanUps(org.eclipse.jdt.core.ICompilationUnit[])
 	 */
+	@Override
 	protected ICleanUp[] getCleanUps(ICompilationUnit[] units) {
-		Map settings= new Hashtable();
+		Map<String, String> settings= new Hashtable<String, String>();
 		settings.put(CleanUpConstants.FORMAT_SOURCE_CODE, CleanUpOptions.TRUE);
 
 		return new ICleanUp[] {
@@ -48,6 +49,7 @@ public class MultiFormatAction extends CleanUpAction {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.actions.CleanUpAction#getActionName()
 	 */
+	@Override
 	protected String getActionName() {
 		return ActionMessages.FormatAllAction_label;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiOrganizeImportAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiOrganizeImportAction.java
index a6ace02..5da75ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiOrganizeImportAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiOrganizeImportAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,8 +49,9 @@ public class MultiOrganizeImportAction extends CleanUpAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.ORGANIZE_IMPORTS_ACTION);
 	}
 
+	@Override
 	protected ICleanUp[] getCleanUps(ICompilationUnit[] units) {
-		Map settings= new Hashtable();
+		Map<String, String> settings= new Hashtable<String, String>();
 		settings.put(CleanUpConstants.ORGANIZE_IMPORTS, CleanUpOptions.TRUE);
 		ImportsCleanUp importsCleanUp= new ImportsCleanUp(settings);
 
@@ -59,6 +60,7 @@ public class MultiOrganizeImportAction extends CleanUpAction {
 		};
 	}
 
+	@Override
 	protected String getActionName() {
 		return ActionMessages.OrganizeImportsAction_error_title;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiSortMembersAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiSortMembersAction.java
index 5365db6..5efe4cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiSortMembersAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiSortMembersAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class MultiSortMembersAction extends CleanUpAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUp[] getCleanUps(ICompilationUnit[] units) {
 		try {
 	        if (!hasMembersToSort(units)) {
@@ -72,7 +73,7 @@ public class MultiSortMembersAction extends CleanUpAction {
 	        return null;
         }
 
-		Map settings= getSettings();
+		Map<String, String> settings= getSettings();
 		if (settings == null)
 			return null;
 
@@ -81,12 +82,12 @@ public class MultiSortMembersAction extends CleanUpAction {
 		};
 	}
 
-	protected Map getSettings() {
+	protected Map<String, String> getSettings() {
 		SortMembersMessageDialog dialog= new SortMembersMessageDialog(getShell());
 		if (dialog.open() != Window.OK)
 			return null;
 
-		Hashtable settings= new Hashtable();
+		Hashtable<String, String> settings= new Hashtable<String, String>();
 		settings.put(CleanUpConstants.SORT_MEMBERS, CleanUpOptions.TRUE);
 		settings.put(CleanUpConstants.SORT_MEMBERS_ALL, !dialog.isNotSortingFieldsEnabled() ? CleanUpOptions.TRUE : CleanUpOptions.FALSE);
 		return settings;
@@ -95,6 +96,7 @@ public class MultiSortMembersAction extends CleanUpAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getActionName() {
 		return ActionMessages.SortMembersAction_dialog_title;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/NewWizardsActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/NewWizardsActionGroup.java
index 0a8c3f8..6ed6130 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/NewWizardsActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/NewWizardsActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ public class NewWizardsActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 
@@ -77,8 +78,8 @@ public class NewWizardsActionGroup extends ActionGroup {
 		if (sel.size() == 0)
 			return true;
 
-		List list= sel.toList();
-		for (Iterator iterator= list.iterator(); iterator.hasNext();) {
+		List<?> list= sel.toList();
+		for (Iterator<?> iterator= list.iterator(); iterator.hasNext();) {
 			if (!isNewTarget(iterator.next()))
 				return false;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OccurrencesSearchMenuAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OccurrencesSearchMenuAction.java
index d460fd6..7d24c78 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OccurrencesSearchMenuAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OccurrencesSearchMenuAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ import org.eclipse.jdt.internal.ui.javaeditor.JavaTextSelection;
 public class OccurrencesSearchMenuAction implements IWorkbenchWindowPulldownDelegate2 {
 
 	private static Action NO_ACTION_AVAILABLE= new Action(ActionMessages.OccurrencesSearchMenuAction_no_entries_available) {
+		@Override
 		public boolean isEnabled() {
 			return false;
 		}
@@ -88,6 +89,7 @@ public class OccurrencesSearchMenuAction implements IWorkbenchWindowPulldownDele
 
 	protected void initMenu(Menu menu) {
 		menu.addMenuListener(new MenuAdapter() {
+			@Override
 			public void menuShown(MenuEvent e) {
 				Menu m= (Menu) e.widget;
 				MenuItem[] items= m.getItems();
@@ -175,7 +177,7 @@ public class OccurrencesSearchMenuAction implements IWorkbenchWindowPulldownDele
 			selection= activePart.getSite().getSelectionProvider().getSelection();
 		}
 
-		final ArrayList activeActions= new ArrayList(fRetargetActions.length);
+		final ArrayList<IAction> activeActions= new ArrayList<IAction>(fRetargetActions.length);
 		for (int i= 0; i < fRetargetActions.length; i++) {
 			RetargetAction action= fRetargetActions[i];
 			IAction actionHandler= action.getActionHandler();
@@ -187,9 +189,10 @@ public class OccurrencesSearchMenuAction implements IWorkbenchWindowPulldownDele
 			}
 		}
 		if (activeActions.size() == 1) {
-			((IAction) activeActions.get(0)).run();
+			activeActions.get(0).run();
 		} else {
 			new JDTQuickMenuCreator(editor) {
+				@Override
 				protected void fillMenu(IMenuManager menu) {
 					fillQuickMenu(menu, activeActions);
 				}
@@ -236,12 +239,12 @@ public class OccurrencesSearchMenuAction implements IWorkbenchWindowPulldownDele
 	public void selectionChanged(IAction action, ISelection selection) {
 	}
 
-	private void fillQuickMenu(IMenuManager manager, List activeActions) {
+	private void fillQuickMenu(IMenuManager manager, List<IAction> activeActions) {
 		if (activeActions.isEmpty()) {
 			manager.add(NO_ACTION_AVAILABLE);
 		} else {
 			for (int i= 0; i < activeActions.size(); i++) {
-				manager.add((IAction) activeActions.get(i));
+				manager.add(activeActions.get(i));
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java
index 170a88b..116c2be 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,9 @@ public class OpenBrowserUtil {
 		BusyIndicator.showWhile(null, new Runnable() {
 			public void run() {
 				URL helpSystemUrl= PlatformUI.getWorkbench().getHelpSystem().resolve(url.toExternalForm(), true);
+				if (helpSystemUrl == null) { // can happen if org.eclipse.help.ui is not available
+					return; // the resolve() method already wrote "Unable to instantiate help UI" to the log
+				}
 				try {
 					IWorkbenchBrowserSupport browserSupport= PlatformUI.getWorkbench().getBrowserSupport();
 					IWebBrowser browser;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeAction.java
index 692359e..bf59563 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,10 +61,12 @@ public class OpenTypeAction extends Action implements IWorkbenchWindowActionDele
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.OPEN_TYPE_ACTION);
 	}
 
+	@Override
 	public void run() {
 		runWithEvent(null);
 	}
 
+	@Override
 	public void runWithEvent(Event e) {
 		Shell parent= JavaPlugin.getActiveWorkbenchShell();
 		if (! doCreateProjectFirstOnEmptyWorkspace(parent)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeInHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeInHierarchyAction.java
index 8057ae6..744911a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeInHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenTypeInHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class OpenTypeInHierarchyAction extends Action implements IWorkbenchWindo
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.OPEN_TYPE_IN_HIERARCHY_ACTION);
 	}
 
+	@Override
 	public void run() {
 		Shell parent= JavaPlugin.getActiveWorkbenchShell();
 		OpenTypeSelectionDialog dialog= new OpenTypeSelectionDialog(parent, false,
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/RemoveBlockCommentAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/RemoveBlockCommentAction.java
index 5207e6e..deb4b67 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/RemoveBlockCommentAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/RemoveBlockCommentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,8 +48,9 @@ public class RemoveBlockCommentAction extends BlockCommentAction {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.actions.AddBlockCommentAction#runInternal(org.eclipse.jface.text.ITextSelection, org.eclipse.jface.text.IDocumentExtension3, org.eclipse.jdt.internal.ui.actions.AddBlockCommentAction.Edit.EditFactory)
 	 */
+	@Override
 	protected void runInternal(ITextSelection selection, IDocumentExtension3 docExtension, Edit.EditFactory factory) throws BadPartitioningException, BadLocationException {
-		List edits= new LinkedList();
+		List<Edit> edits= new LinkedList<Edit>();
 		int tokenLength= getCommentStart().length();
 
 		int offset= selection.getOffset();
@@ -82,6 +83,7 @@ public class RemoveBlockCommentAction extends BlockCommentAction {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.actions.AddBlockCommentAction#validSelection(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	protected boolean isValidSelection(ITextSelection selection) {
 		return selection != null && !selection.isEmpty();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectAllAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectAllAction.java
index 2aee062..f88b223 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectAllAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectAllAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,7 +61,7 @@ public class SelectAllAction extends Action {
 		fViewer= viewer;
 	}
 
-	private void collectExpandedAndVisible(TreeItem[] items, List result) {
+	private void collectExpandedAndVisible(TreeItem[] items, List<TreeItem> result) {
 		for (int i= 0; i < items.length; i++) {
 			TreeItem item= items[i];
 			if (item.getData() != null) {
@@ -76,12 +76,13 @@ public class SelectAllAction extends Action {
 	/**
 	 * Selects all resources in the view.
 	 */
+	@Override
 	public void run() {
 		if (fViewer instanceof TreeViewer) {
-			ArrayList allVisible= new ArrayList();
+			ArrayList<TreeItem> allVisible= new ArrayList<TreeItem>();
 			Tree tree= ((TreeViewer) fViewer).getTree();
 			collectExpandedAndVisible(tree.getItems(), allVisible);
-			tree.setSelection((TreeItem[]) allVisible.toArray(new TreeItem[allVisible.size()]));
+			tree.setSelection(allVisible.toArray(new TreeItem[allVisible.size()]));
 			fViewer.setSelection(fViewer.getSelection());
 		} else if (fViewer instanceof TableViewer) {
 			((TableViewer) fViewer).getTable().selectAll();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectionConverter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectionConverter.java
index 77754b1..5a38994 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectionConverter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectionConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,7 +94,7 @@ public class SelectionConverter {
 		if (!selection.isEmpty()) {
 			IJavaElement[] result= new IJavaElement[selection.size()];
 			int i= 0;
-			for (Iterator iter= selection.iterator(); iter.hasNext(); i++) {
+			for (Iterator<?> iter= selection.iterator(); iter.hasNext(); i++) {
 				Object element= iter.next();
 				if (!(element instanceof IJavaElement))
 					return EMPTY_RESULT;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithActionGroup.java
index 539b26f..6d84107 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class SurroundWithActionGroup extends ActionGroup {
 		fSurroundWithTryCatchAction= createSurroundWithTryCatchAction(fEditor);
 	}
 
+	@Override
 	public void fillActionBars(IActionBars actionBar) {
 		actionBar.setGlobalActionHandler(JdtActionConstants.SURROUND_WITH_TRY_CATCH, fSurroundWithTryCatchAction);
 	}
@@ -48,6 +49,7 @@ public class SurroundWithActionGroup extends ActionGroup {
 	 * The Menu to show when right click on the editor
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		ISelectionProvider selectionProvider= fEditor.getSelectionProvider();
 		if (selectionProvider == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithTemplateMenuAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithTemplateMenuAction.java
index 70a9c4b..fd250a2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithTemplateMenuAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SurroundWithTemplateMenuAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,6 +88,7 @@ public class SurroundWithTemplateMenuAction implements IWorkbenchWindowPulldownD
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void run() {
 			PreferencesUtil.createPreferenceDialogOn(getShell(), JAVA_TEMPLATE_PREFERENCE_PAGE_ID, new String[] {JAVA_TEMPLATE_PREFERENCE_PAGE_ID}, null).open();
 		}
@@ -98,9 +99,11 @@ public class SurroundWithTemplateMenuAction implements IWorkbenchWindowPulldownD
 	}
 
 	private static Action NONE_APPLICABLE_ACTION= new Action(ActionMessages.SurroundWithTemplateMenuAction_NoneApplicable) {
+		@Override
 		public void run() {
 			//Do nothing
 		}
+		@Override
 		public boolean isEnabled() {
 			return false;
 		}
@@ -223,6 +226,7 @@ public class SurroundWithTemplateMenuAction implements IWorkbenchWindowPulldownD
 		final CompilationUnitEditor editor= (CompilationUnitEditor)activePart;
 
 		new JDTQuickMenuCreator(editor) {
+			@Override
 			protected void fillMenu(IMenuManager menu) {
 				SurroundWithTryCatchAction surroundWithTryCatch= createSurroundWithTryCatchAction(editor);
 				SurroundWithTemplateMenuAction.fillMenu(menu, editor, surroundWithTryCatch);
@@ -301,6 +305,7 @@ public class SurroundWithTemplateMenuAction implements IWorkbenchWindowPulldownD
 
 	protected void initMenu() {
 		fMenu.addMenuListener(new MenuAdapter() {
+			@Override
 			public void menuShown(MenuEvent e) {
 				Menu m = (Menu)e.widget;
 				MenuItem[] items = m.getItems();
@@ -370,7 +375,7 @@ public class SurroundWithTemplateMenuAction implements IWorkbenchWindowPulldownD
 	}
 
 	private static IAction[] getActionsFromProposals(IJavaCompletionProposal[] proposals, final int offset, final ITextViewer viewer) {
-		List result= new ArrayList();
+		List<Action> result= new ArrayList<Action>();
 
 		for (int i= 0, j= 1; i < proposals.length; i++) {
 			if (proposals[i] instanceof ICompletionProposalExtension2) {
@@ -386,6 +391,7 @@ public class SurroundWithTemplateMenuAction implements IWorkbenchWindowPulldownD
 					/**
 					 * {@inheritDoc}
 					 */
+					@Override
 					public void run() {
 						applyProposal(proposal, viewer, (char)0, 0, offset);
 					}
@@ -398,7 +404,7 @@ public class SurroundWithTemplateMenuAction implements IWorkbenchWindowPulldownD
 		if (result.size() == 0)
 			return null;
 
-		return (IAction[])result.toArray(new IAction[result.size()]);
+		return result.toArray(new IAction[result.size()]);
 	}
 
 	private static void applyProposal(ICompletionProposal proposal, ITextViewer viewer, char trigger, int stateMask, final int offset) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/WorkbenchRunnableAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/WorkbenchRunnableAdapter.java
index 56e7e4d..9d70fba 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/WorkbenchRunnableAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/WorkbenchRunnableAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -116,6 +116,7 @@ public class WorkbenchRunnableAdapter implements IRunnableWithProgress, IThreadL
 			/* (non-Javadoc)
 			 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 			 */
+			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				try {
 					WorkbenchRunnableAdapter.this.run(monitor);
@@ -133,6 +134,7 @@ public class WorkbenchRunnableAdapter implements IRunnableWithProgress, IThreadL
 				}
 				return Status.OK_STATUS;
 			}
+			@Override
 			public boolean belongsTo(Object family) {
 				return jobFamiliy == family;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/IPackagesViewViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/IPackagesViewViewer.java
index 9362884..336fd47 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/IPackagesViewViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/IPackagesViewViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,9 +32,11 @@ interface IPackagesViewViewer {
 
 	public void doUpdateItem(Widget item, Object element, boolean fullMap);
 
+	@SuppressWarnings("rawtypes")
 	public List getSelectionFromWidget();
 
 	public void internalRefresh(Object element);
 
+	@SuppressWarnings("rawtypes")
 	public void setSelectionToWidget(List l, boolean reveal);
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingContentProvider.java
index 4cb39f8..138a090 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 		JavaCore.addElementChangedListener(this);
 	}
 
+	@Override
 	public boolean hasChildren(Object element) {
 		startReadInDisplayThread();
 		try{
@@ -74,6 +75,7 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 		}
 	}
 
+	@Override
 	public Object[] getChildren(Object element) {
 		if (!exists(element))
 			return NO_CHILDREN;
@@ -81,11 +83,11 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 		startReadInDisplayThread();
 		try {
 			if (element instanceof Collection) {
-				Collection elements= (Collection)element;
+				Collection<?> elements= (Collection<?>)element;
 				if (elements.isEmpty())
 					return NO_CHILDREN;
 				Object[] result= new Object[0];
-				Iterator iter= ((Collection)element).iterator();
+				Iterator<?> iter= ((Collection<?>)element).iterator();
 				while (iter.hasNext()) {
 					Object[] children= getChildren(iter.next());
 					if (children != NO_CHILDREN)
@@ -116,13 +118,13 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 		}
 		else {
 			IClassFile[] classFiles= fragment.getClassFiles();
-			List topLevelClassFile= new ArrayList();
+			List<IClassFile> topLevelClassFile= new ArrayList<IClassFile>();
 			for (int i= 0; i < classFiles.length; i++) {
 				IType type= classFiles[i].getType();
 				if (type != null && type.getDeclaringType() == null && !type.isAnonymous() && !type.isLocal())
 					topLevelClassFile.add(classFiles[i]);
 			}
-			sourceRefs= (ISourceReference[])topLevelClassFile.toArray(new ISourceReference[topLevelClassFile.size()]);
+			sourceRefs= topLevelClassFile.toArray(new ISourceReference[topLevelClassFile.size()]);
 		}
 
 		Object[] result= new Object[0];
@@ -132,7 +134,7 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 	}
 
 	private Object[] removeImportAndPackageDeclarations(Object[] members) {
-		ArrayList tempResult= new ArrayList(members.length);
+		ArrayList<Object> tempResult= new ArrayList<Object>(members.length);
 		for (int i= 0; i < members.length; i++)
 			if (!(members[i] instanceof IImportContainer) && !(members[i] instanceof IPackageDeclaration))
 				tempResult.add(members[i]);
@@ -151,7 +153,7 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 
 		// Add import declarations
 		IJavaElement[] members= parent.getChildren();
-		ArrayList tempResult= new ArrayList(members.length);
+		ArrayList<IJavaElement> tempResult= new ArrayList<IJavaElement>(members.length);
 		for (int i= 0; i < members.length; i++)
 			if ((members[i] instanceof IImportContainer))
 				tempResult.add(members[i]);
@@ -159,18 +161,19 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 		return tempResult.toArray();
 	}
 
+	@Override
 	protected Object[] getPackageFragmentRoots(IJavaProject project) throws JavaModelException {
 		if (!project.getProject().isOpen())
 			return NO_CHILDREN;
 
 		IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-		List list= new ArrayList(roots.length);
+		List<IJavaElement> list= new ArrayList<IJavaElement>(roots.length);
 		// filter out package fragments that correspond to projects and
 		// replace them with the package fragments directly
 		for (int i= 0; i < roots.length; i++) {
 			IPackageFragmentRoot root= roots[i];
 			if (!root.isExternal()) {
-				Object[] children= root.getChildren();
+				IJavaElement[] children= root.getChildren();
 				for (int k= 0; k < children.length; k++)
 					list.add(children[k]);
 			}
@@ -186,12 +189,13 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 	/* (non-Javadoc)
 	 * Method declared on IContentProvider.
 	 */
+	@Override
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		super.inputChanged(viewer, oldInput, newInput);
 
 		if (newInput instanceof Collection) {
 			// Get a template object from the collection
-			Collection col= (Collection)newInput;
+			Collection<?> col= (Collection<?>)newInput;
 			if (!col.isEmpty())
 				newInput= col.iterator().next();
 			else
@@ -203,6 +207,7 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 	/* (non-Javadoc)
 	 * Method declared on IContentProvider.
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		JavaCore.removeElementChangedListener(this);
@@ -430,7 +435,7 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 
 	private Object[] getNewElements(Object[] elements) {
 		int elementsLength= elements.length;
-		ArrayList result= new ArrayList(elementsLength);
+		ArrayList<Object> result= new ArrayList<Object>(elementsLength);
 		for (int i= 0; i < elementsLength; i++) {
 			Object element= elements[i];
 			if (fViewer.testFindItem(element) == null)
@@ -517,6 +522,7 @@ class JavaBrowsingContentProvider extends StandardJavaElementContentProvider imp
 	 * returns the original element instead.
 	 * </p>
 	 */
+	@Override
 	protected Object internalGetParent(Object element) {
 		if (element instanceof IJavaProject) {
 			return ((IJavaProject)element).getJavaModel();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java
index fd6c6dd..1154d0a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -216,6 +216,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	/*
 	 * Implements method from IViewPart.
 	 */
+	@Override
 	public void init(IViewSite site, IMemento memento) throws PartInitException {
 		super.init(site, memento);
 		fMemento= memento;
@@ -224,6 +225,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	/*
 	 * Implements method from IViewPart.
 	 */
+	@Override
 	public void saveState(IMemento memento) {
 		if (fViewer == null) {
 			// part has not been created
@@ -283,7 +285,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 		IMemento childMem;
 		childMem= memento.getChild(TAG_SELECTED_ELEMENTS);
 		if (childMem != null) {
-			ArrayList list= new ArrayList();
+			ArrayList<Object> list= new ArrayList<Object>();
 			IMemento[] elementMem= childMem.getChildren(TAG_SELECTED_ELEMENT);
 			for (int i= 0; i < elementMem.length; i++) {
 				String javaElementHandle= elementMem[i].getString(TAG_SELECTED_ELEMENT_PATH);
@@ -324,6 +326,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createPartControl(Composite parent) {
 		Assert.isTrue(fViewer == null);
 
@@ -388,6 +391,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class key) {
 		if (key == IShowInSource.class) {
 			return getShowInSource();
@@ -471,10 +475,12 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	//---- IWorkbenchPart ------------------------------------------------------
 
 
+	@Override
 	public void setFocus() {
 		fViewer.getControl().setFocus();
 	}
 
+	@Override
 	public void dispose() {
 		if (fViewer != null) {
 			getViewSite().getPage().removePostSelectionListener(this);
@@ -499,6 +505,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	 */
 	protected void addKeyListener() {
 		fViewer.getControl().addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent event) {
 				handleKeyReleased(event);
 			}
@@ -646,18 +653,18 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 		if (input == null)
 			return false;
 		if (input instanceof Collection)
-			return ((Collection)input).contains(element);
+			return ((Collection<?>)input).contains(element);
 		else
 			return input.equals(element);
 
 	}
 
-	private boolean isInputResetBy(Object newInput, Object input, IWorkbenchPart part) {
+	boolean isInputResetBy(Object newInput, Object input, IWorkbenchPart part) {
 		if (newInput == null)
 			return part == fPreviousSelectionProvider;
 
 		if (input instanceof IJavaElement && newInput instanceof IJavaElement)
-			return getTypeComparator().compare(newInput, input)  > 0;
+			return getTypeComparator().compare((IJavaElement) newInput, (IJavaElement) input)  > 0;
 
 		if((newInput instanceof List) && (part instanceof PackagesView))
 			return true;
@@ -673,13 +680,13 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 		Object partInput= ((JavaBrowsingPart)part).getViewer().getInput();
 
 		if(thisInput instanceof Collection)
-			thisInput= ((Collection)thisInput).iterator().next();
+			thisInput= ((Collection<?>)thisInput).iterator().next();
 
 		if(partInput instanceof Collection)
-			partInput= ((Collection)partInput).iterator().next();
+			partInput= ((Collection<?>)partInput).iterator().next();
 
 		if (thisInput instanceof IJavaElement && partInput instanceof IJavaElement)
-			return getTypeComparator().compare(partInput, thisInput) > 0;
+			return getTypeComparator().compare((IJavaElement) partInput, (IJavaElement) thisInput) > 0;
 		else
 			return true;
 	}
@@ -730,7 +737,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 		Object currentInput= getViewer().getInput();
 		if (selectedElement != null && selectedElement.equals(currentInput)) {
 			IJavaElement elementToSelect= findElementToSelect(selectedElement);
-			if (elementToSelect != null && getTypeComparator().compare(selectedElement, elementToSelect) < 0)
+			if (elementToSelect != null && getTypeComparator().compare((IJavaElement) selectedElement, elementToSelect) < 0)
 				setSelection(new StructuredSelection(elementToSelect), true);
 			else if (elementToSelect == null && (this instanceof MembersView)) {
 				setSelection(StructuredSelection.EMPTY, true);
@@ -827,6 +834,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#getTitleToolTip()
 	 */
+	@Override
 	public String getTitleToolTip() {
 		if (fViewer == null)
 			return super.getTitleToolTip();
@@ -964,6 +972,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 
 
 		fOpenAndLinkWithEditorHelper= new OpenAndLinkWithEditorHelper(fViewer) {
+			@Override
 			protected void activate(ISelection selection) {
 				try {
 					final Object selectedElement= SelectionUtil.getSingleElement(selection);
@@ -974,6 +983,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 				}
 			}
 
+			@Override
 			protected void linkToEditor(ISelection selection) {
 				if (!fProcessSelectionEvents)
 					return;
@@ -989,6 +999,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 				}
 			}
 
+			@Override
 			protected void open(ISelection selection, boolean activate) {
 				IAction open= fOpenEditorGroup.getOpenAction();
 				if (open.isEnabled()) {
@@ -1087,7 +1098,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 		if (!(selection instanceof IStructuredSelection) || selection.isEmpty())
 			return null;
 
-		Iterator iter= ((IStructuredSelection)selection).iterator();
+		Iterator<?> iter= ((IStructuredSelection)selection).iterator();
 		Object firstElement= iter.next();
 		if (!(firstElement instanceof IJavaElement)) {
 			if (firstElement instanceof IMarker)
@@ -1129,7 +1140,7 @@ abstract class JavaBrowsingPart extends ViewPart implements IMenuListener, IView
 	 * Gets the typeComparator.
 	 * @return Returns a JavaElementTypeComparator
 	 */
-	protected Comparator getTypeComparator() {
+	protected Comparator<IJavaElement> getTypeComparator() {
 		return fTypeComparator;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaElementTypeComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaElementTypeComparator.java
index 593f121..5dc7f10 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaElementTypeComparator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaElementTypeComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ import java.util.Comparator;
 
 import org.eclipse.jdt.core.IJavaElement;
 
-public class JavaElementTypeComparator implements Comparator {
+public class JavaElementTypeComparator implements Comparator<IJavaElement> {
 
 
 	/**
@@ -26,25 +26,8 @@ public class JavaElementTypeComparator implements Comparator {
 	 *
 	 * @see Comparator#compare(Object, Object)
 	 */
-	public int compare(Object o1, Object o2) {
-		if (!(o1 instanceof IJavaElement) || !(o2 instanceof IJavaElement))
-			throw new ClassCastException();
-		return getIdForJavaElement((IJavaElement)o1) - getIdForJavaElement((IJavaElement)o2);
-	}
-
-	/**
-	 * Compares two Java element types. A type is considered to be
-	 * greater if it may contain the other.
-	 *
-	 * @return		an int < 0 if object1 is less than object2,
-	 *				0 if they are equal, and > 0 if object1 is greater
-	 *
-	 * @see Comparator#compare(Object, Object)
-	 */
-	public int compare(Object o1, int elementType) {
-		if (!(o1 instanceof IJavaElement))
-			throw new ClassCastException();
-		return getIdForJavaElement((IJavaElement)o1) - getIdForJavaElementType(elementType);
+	public int compare(IJavaElement o1, IJavaElement o2) {
+		return getIdForJavaElement(o1) - getIdForJavaElement(o2);
 	}
 
 	int getIdForJavaElement(IJavaElement element) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackage.java
index a558c4c..73b9896 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,13 +27,13 @@ import org.eclipse.jdt.core.JavaModelException;
  */
 public class LogicalPackage extends PlatformObject {
 
-	private Set fPackages;
+	private Set<IPackageFragment> fPackages;
 	private String fName;
 	private IJavaProject fJavaProject;
 
 	public LogicalPackage(IPackageFragment fragment){
 		Assert.isNotNull(fragment);
-		fPackages= new HashSet();
+		fPackages= new HashSet<IPackageFragment>();
 		fJavaProject= fragment.getJavaProject();
 		Assert.isNotNull(fJavaProject);
 		add(fragment);
@@ -45,7 +45,7 @@ public class LogicalPackage extends PlatformObject {
 	}
 
 	public IPackageFragment[] getFragments(){
-		return (IPackageFragment[]) fPackages.toArray(new IPackageFragment[fPackages.size()]);
+		return fPackages.toArray(new IPackageFragment[fPackages.size()]);
 	}
 
 	public void add(IPackageFragment fragment){
@@ -90,8 +90,8 @@ public class LogicalPackage extends PlatformObject {
 	}
 
 	public boolean hasSubpackages() throws JavaModelException {
-		for (Iterator iter= fPackages.iterator(); iter.hasNext();) {
-			IPackageFragment pack= (IPackageFragment) iter.next();
+		for (Iterator<IPackageFragment> iter= fPackages.iterator(); iter.hasNext();) {
+			IPackageFragment pack= iter.next();
 			if (pack.hasSubpackages()) {
 				return true;
 			}
@@ -103,6 +103,7 @@ public class LogicalPackage extends PlatformObject {
 		return fName.length() == 0;
 	}
 
+	@Override
 	public boolean equals(Object o){
 		if (!(o instanceof LogicalPackage))
 			return false;
@@ -129,6 +130,7 @@ public class LogicalPackage extends PlatformObject {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		IPackageFragment[] fragments= getFragments();
 		return fJavaProject.hashCode() + getHash(fragments, fragments.length-1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackagesProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackagesProvider.java
index b8990f0..a0eb47f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackagesProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/LogicalPackagesProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
 
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -38,8 +39,8 @@ abstract class LogicalPackagesProvider implements IPropertyChangeListener, IElem
 
 	protected static final Object[] NO_CHILDREN= new Object[0];
 
-	protected Map fMapToLogicalPackage;
-	protected Map fMapToPackageFragments;
+	protected Map<String, LogicalPackage> fMapToLogicalPackage;
+	protected Map<String, IPackageFragment> fMapToPackageFragments;
 	protected boolean fCompoundState;
 	protected StructuredViewer fViewer;
 	protected boolean fInputIsProject;
@@ -48,8 +49,8 @@ abstract class LogicalPackagesProvider implements IPropertyChangeListener, IElem
 		fViewer= viewer;
 		fCompoundState= isInCompoundState();
 		fInputIsProject= true;
-		fMapToLogicalPackage= new HashMap();
-		fMapToPackageFragments= new HashMap();
+		fMapToLogicalPackage= new HashMap<String, LogicalPackage>();
+		fMapToPackageFragments= new HashMap<String, IPackageFragment>();
 		JavaPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
 	}
 
@@ -81,7 +82,7 @@ abstract class LogicalPackagesProvider implements IPropertyChangeListener, IElem
 	public LogicalPackage findLogicalPackage(IPackageFragment fragment) {
 		Assert.isNotNull(fragment);
 		if (isInCompoundState())
-			return (LogicalPackage)fMapToLogicalPackage.get(getKey(fragment));
+			return fMapToLogicalPackage.get(getKey(fragment));
 		else
 			return null;
 	}
@@ -99,7 +100,7 @@ abstract class LogicalPackagesProvider implements IPropertyChangeListener, IElem
 		if (!fCompoundState)
 			return packageFragments;
 
-		List newChildren= new ArrayList();
+		List<IAdaptable> newChildren= new ArrayList<IAdaptable>();
 
 		for (int i= 0; i < packageFragments.length; i++) {
 			IPackageFragment fragment=  packageFragments[i];
@@ -118,7 +119,7 @@ abstract class LogicalPackagesProvider implements IPropertyChangeListener, IElem
 
 			} else {
 				String key= getKey(fragment);
-				IPackageFragment frag= (IPackageFragment)fMapToPackageFragments.get(key);
+				IPackageFragment frag= fMapToPackageFragments.get(key);
 				if (frag != null && !fragment.equals(frag)) {
 					lp= new LogicalPackage(frag);
 					lp.add(fragment);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java
index afaffb0..5f6d74f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/MembersView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class key) {
 		if (key == IShowInTargetList.class) {
 			return new IShowInTargetList() {
@@ -87,6 +88,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 * @return the label provider
 	 * @see org.eclipse.jface.viewers.ILabelProvider
 	 */
+	@Override
 	protected JavaUILabelProvider createLabelProvider() {
 		return new AppearanceAwareLabelProvider(
 						AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.F_APP_TYPE_SIGNATURE | JavaElementLabels.ALL_CATEGORY,
@@ -99,10 +101,12 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 *
 	 * @return	the string used as ID for the Help context
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.MEMBERS_VIEW;
 	}
 
+	@Override
 	protected String getLinkToEditorKey() {
 		return PreferenceConstants.LINK_BROWSING_MEMBERS_TO_EDITOR;
 	}
@@ -110,12 +114,14 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#createViewer(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected StructuredViewer createViewer(Composite parent) {
 		ProblemTreeViewer viewer= new ProblemTreeViewer(parent, SWT.MULTI);
 		fMemberFilterActionGroup= new MemberFilterActionGroup(viewer, JavaUI.ID_MEMBERS_VIEW);
 		return viewer;
 	}
 
+	@Override
 	protected void fillToolBar(IToolBarManager tbm) {
 		tbm.add(new LexicalSortingAction(getViewer(), JavaUI.ID_MEMBERS_VIEW, getDropSupport()));
 		fMemberFilterActionGroup.contributeToToolBar(tbm);
@@ -126,6 +132,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#fillActionBars(org.eclipse.ui.IActionBars)
 	 * @since 3.2
 	 */
+	@Override
 	protected void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		fCategoryFilterActionGroup= new CategoryFilterActionGroup(getViewer(), getViewSite().getId(), getCategoryFilterActionGroupInput());
@@ -136,6 +143,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#setInput(java.lang.Object)
 	 * @since 3.2
 	 */
+	@Override
 	protected void setInput(Object input) {
 		super.setInput(input);
 		if (fCategoryFilterActionGroup != null)
@@ -156,6 +164,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid input
 	 */
+	@Override
 	protected boolean isValidInput(Object element) {
 		if (element instanceof IType) {
 			IType type= (IType)element;
@@ -171,6 +180,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid element
 	 */
+	@Override
 	protected boolean isValidElement(Object element) {
 		if (element instanceof IMember)
 			return super.isValidElement(((IMember)element).getDeclaringType());
@@ -199,6 +209,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 * @param je	the Java element which has the focus
 	 * @return the element to select
 	 */
+	@Override
 	protected IJavaElement findElementToSelect(IJavaElement je) {
 		if (je == null)
 			return null;
@@ -237,6 +248,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	 * @param 	je 	the Java element for which to search the closest input
 	 * @return	the closest Java element used as input for this part, or <code>null</code>
 	 */
+	@Override
 	protected IJavaElement findInputForJavaElement(IJavaElement je) {
 		if (je == null || !je.exists() || (je.getJavaProject() != null && !je.getJavaProject().isOnClasspath(je)))
 			return null;
@@ -273,11 +285,13 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	/*
 	 * Implements method from IViewPart.
 	 */
+	@Override
 	public void saveState(IMemento memento) {
 		super.saveState(memento);
 		fMemberFilterActionGroup.saveState(memento);
 	}
 
+	@Override
 	protected void restoreState(IMemento memento) {
 		super.restoreState(memento);
 		fMemberFilterActionGroup.restoreState(memento);
@@ -286,6 +300,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
  		getViewer().getControl().setRedraw(true);
 	}
 
+	@Override
 	protected void hookViewerListeners() {
 		super.hookViewerListeners();
 		getViewer().addDoubleClickListener(new IDoubleClickListener() {
@@ -308,6 +323,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 		return false;
 	}
 
+	@Override
 	protected void restoreSelection() {
 		IEditorPart editor= getViewSite().getPage().getActiveEditor();
 		if (editor != null)
@@ -326,6 +342,7 @@ public class MembersView extends JavaBrowsingPart implements IPropertyChangeList
 	/*
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fMemberFilterActionGroup != null) {
 			fMemberFilterActionGroup.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackageViewerWrapper.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackageViewerWrapper.java
index 0d7bc9e..2d11dcc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackageViewerWrapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackageViewerWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -119,6 +119,7 @@ class PackageViewerWrapper extends StructuredViewer {
 		}
 	}
 
+	@Override
 	public void setSelection(ISelection selection, boolean reveal) {
 		if (selection instanceof IStructuredSelection) {
 			IStructuredSelection sel= (IStructuredSelection) selection;
@@ -146,177 +147,218 @@ class PackageViewerWrapper extends StructuredViewer {
 			fViewer.setSelection(selection, reveal);
 	}
 
+	@Override
 	public void addPostSelectionChangedListener(ISelectionChangedListener listener) {
 		fPostSelectionChangedListenerList.add(listener);
 		fViewer.addPostSelectionChangedListener(listener);
 	}
 
+	@Override
 	public void addSelectionChangedListener(ISelectionChangedListener listener) {
 		fSelectionChangedListenerList.add(listener);
 		fViewer.addSelectionChangedListener(listener);
 	}
 
+	@Override
 	public void addDoubleClickListener(IDoubleClickListener listener) {
 		fViewer.addDoubleClickListener(listener);
 		fListenerList.add(listener);
 	}
 
+	@Override
 	public void addOpenListener(IOpenListener listener) {
 		fViewer.addOpenListener(listener);
 		fListenerList.add(listener);
 	}
 
+	@Override
 	public void addHelpListener(HelpListener listener) {
 		fViewer.addHelpListener(listener);
 		fListenerList.add(listener);
 	}
 
+	@Override
 	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
 		fViewer.removeSelectionChangedListener(listener);
 		fSelectionChangedListenerList.remove(listener);
 	}
 
+	@Override
 	public void removePostSelectionChangedListener(ISelectionChangedListener listener) {
 		fViewer.removePostSelectionChangedListener(listener);
 		fPostSelectionChangedListenerList.remove(listener);
 	}
 
+	@Override
 	public void removeHelpListener(HelpListener listener) {
 		fListenerList.remove(listener);
 		fViewer.removeHelpListener(listener);
 	}
 
+	@Override
 	public void removeDoubleClickListener(IDoubleClickListener listener) {
 		fViewer.removeDoubleClickListener(listener);
 		fListenerList.remove(listener);
 	}
 
+	@Override
 	public void removeOpenListener(IOpenListener listener) {
 		fViewer.removeOpenListener(listener);
 		fListenerList.remove(listener);
 	}
 
 	// --------- simply delegate to wrapped viewer ---------
+	@Override
 	public Control getControl() {
 		return fViewer.getControl();
 	}
 
+	@Override
 	public void addFilter(ViewerFilter filter) {
 		fViewer.addFilter(filter);
 	}
 
+	@Override
 	public void setFilters(ViewerFilter[] filters) {
 		fViewer.setFilters(filters);
 	}
 
+	@Override
 	public ViewerFilter[] getFilters() {
 		return fViewer.getFilters();
 	}
 
+	@Override
 	public void refresh() {
 		fViewer.refresh();
 	}
 
+	@Override
 	public void removeFilter(ViewerFilter filter) {
 		fViewer.removeFilter(filter);
 	}
 
+	@Override
 	public ISelection getSelection() {
 		return fViewer.getSelection();
 	}
 
+	@Override
 	public void refresh(boolean updateLabels) {
 		fViewer.refresh(updateLabels);
 	}
 
+	@Override
 	public void refresh(Object element, boolean updateLabels) {
 		fViewer.refresh(element, updateLabels);
 	}
 
+	@Override
 	public void refresh(Object element) {
 		fViewer.refresh(element);
 	}
 
+	@Override
 	public void resetFilters() {
 		fViewer.resetFilters();
 	}
 
+	@Override
 	public void reveal(Object element) {
 		fViewer.reveal(element);
 	}
 
+	@Override
 	public void setContentProvider(IContentProvider contentProvider) {
 		fViewer.setContentProvider(contentProvider);
 	}
 
+	@Override
 	public void setSorter(ViewerSorter sorter) {
 		fViewer.setSorter(sorter);
 	}
 
+	@Override
 	public void setComparator(ViewerComparator comparator) {
 		fViewer.setComparator(comparator);
 	}
 
+	@Override
 	public void setUseHashlookup(boolean enable) {
 		fViewer.setUseHashlookup(enable);
 	}
 
+	@Override
 	public Widget testFindItem(Object element) {
 		return fViewer.testFindItem(element);
 	}
 
+	@Override
 	public void update(Object element, String[] properties) {
 		fViewer.update(element, properties);
 	}
 
+	@Override
 	public void update(Object[] elements, String[] properties) {
 		fViewer.update(elements, properties);
 	}
 
+	@Override
 	public IContentProvider getContentProvider() {
 		return fViewer.getContentProvider();
 	}
 
+	@Override
 	public Object getInput() {
 		return fViewer.getInput();
 	}
 
+	@Override
 	public IBaseLabelProvider getLabelProvider() {
 		return fViewer.getLabelProvider();
 	}
 
+	@Override
 	public void setLabelProvider(IBaseLabelProvider labelProvider) {
 		fViewer.setLabelProvider(labelProvider);
 	}
 
+	@Override
 	public Object getData(String key) {
 		return fViewer.getData(key);
 	}
 
+	@Override
 	public Item scrollDown(int x, int y) {
 		return fViewer.scrollDown(x, y);
 	}
 
+	@Override
 	public Item scrollUp(int x, int y) {
 		return fViewer.scrollUp(x, y);
 	}
 
+	@Override
 	public void setData(String key, Object value) {
 		fViewer.setData(key, value);
 	}
 
+	@Override
 	public void setSelection(ISelection selection) {
 		fViewer.setSelection(selection);
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		return fViewer.equals(obj);
 	}
 
+	@Override
 	public int hashCode() {
 		return fViewer.hashCode();
 	}
 
+	@Override
 	public String toString() {
 		return fViewer.toString();
 	}
@@ -326,54 +368,67 @@ class PackageViewerWrapper extends StructuredViewer {
 	}
 
 	// need to provide implementation for abstract methods
+	@Override
 	protected Widget doFindInputItem(Object element) {
 		return ((IPackagesViewViewer) fViewer).doFindInputItem(element);
 	}
 
+	@Override
 	protected Widget doFindItem(Object element) {
 		return ((IPackagesViewViewer)fViewer).doFindItem(element);
 	}
 
+	@Override
 	protected void doUpdateItem(Widget item, Object element, boolean fullMap) {
 		((IPackagesViewViewer)fViewer).doUpdateItem(item, element, fullMap);
 	}
 
+	@Override
 	protected List getSelectionFromWidget() {
 		return ((IPackagesViewViewer)fViewer).getSelectionFromWidget();
 	}
 
+	@Override
 	protected void internalRefresh(Object element) {
 		((IPackagesViewViewer)fViewer).internalRefresh(element);
 	}
 
+	@Override
 	protected void setSelectionToWidget(List l, boolean reveal) {
 		((IPackagesViewViewer) fViewer).setSelectionToWidget(l, reveal);
 	}
 
+	@Override
 	public ViewerComparator getComparator() {
 		return fViewer.getComparator();
 	}
 
+	@Override
 	public IElementComparer getComparer() {
 		return fViewer.getComparer();
 	}
 
+	@Override
 	public ViewerSorter getSorter() {
 		return fViewer.getSorter();
 	}
 
+	@Override
 	public void setComparer(IElementComparer comparer) {
 		fViewer.setComparer(comparer);
 	}
 
+	@Override
 	public void addDragSupport(int operations, Transfer[] transferTypes, DragSourceListener listener) {
 		fViewer.addDragSupport(operations, transferTypes, listener);
 	}
 
+	@Override
 	public void addDropSupport(int operations, Transfer[] transferTypes, DropTargetListener listener) {
 		fViewer.addDropSupport(operations, transferTypes, listener);
 	}
 
+	@Override
 	public Widget[] testFindItems(Object element) {
 		return fViewer.testFindItems(element);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesView.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesView.java
index 3f33b4c..9be6b4f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesView.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.ActionFactory;
@@ -67,6 +68,7 @@ import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.actions.MultiActionGroup;
 import org.eclipse.jdt.internal.ui.actions.SelectAllAction;
 import org.eclipse.jdt.internal.ui.filters.NonJavaElementFilter;
+import org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart;
 import org.eclipse.jdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.LibraryFilter;
@@ -88,6 +90,7 @@ public class PackagesView extends JavaBrowsingPart{
 			super(statusLineManager);
 		}
 
+		@Override
 		protected String formatMessage(ISelection sel) {
 			if (sel instanceof IStructuredSelection) {
 				IStructuredSelection selection= (IStructuredSelection)sel;
@@ -137,6 +140,7 @@ public class PackagesView extends JavaBrowsingPart{
 	/**
 	 * Adds filters the viewer of this part.
 	 */
+	@Override
 	protected void addFilters() {
 		super.addFilters();
 		getViewer().addFilter(createNonJavaElementFilter());
@@ -151,12 +155,14 @@ public class PackagesView extends JavaBrowsingPart{
 	 */
 	protected NonJavaElementFilter createNonJavaElementFilter() {
 		return new NonJavaElementFilter(){
+			@Override
 			public boolean select(Viewer viewer, Object parent, Object element){
 				return ((element instanceof IJavaElement) || (element instanceof LogicalPackage) || (element instanceof IFolder));
 			}
 		};
 	}
 
+	@Override
 	public void init(IViewSite site, IMemento memento) throws PartInitException {
 		super.init(site, memento);
 		//this must be created before all actions and filters
@@ -187,6 +193,7 @@ public class PackagesView extends JavaBrowsingPart{
 	/*
 	 * @see org.eclipse.ui.IViewPart#saveState(org.eclipse.ui.IMemento)
 	 */
+	@Override
 	public void saveState(IMemento memento) {
 		super.saveState(memento);
 		memento.putInteger(this.getViewSite().getId()+TAG_VIEW_STATE,fCurrViewState);
@@ -195,6 +202,7 @@ public class PackagesView extends JavaBrowsingPart{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#createViewer(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected StructuredViewer createViewer(Composite parent) {
 		//Creates the viewer of this part dependent on the current layout.
 		StructuredViewer viewer;
@@ -210,6 +218,7 @@ public class PackagesView extends JavaBrowsingPart{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class key) {
 		if (key == IShowInTargetList.class) {
 			return new IShowInTargetList() {
@@ -237,12 +246,14 @@ public class PackagesView extends JavaBrowsingPart{
 	 * Overrides the createContentProvider from JavaBrowsingPart
 	 * Creates the content provider of this part.
 	 */
+	@Override
 	protected IContentProvider createContentProvider() {
 		if(isInListState())
 			return new PackagesViewFlatContentProvider(fWrappedViewer.getViewer());
 		else return new PackagesViewHierarchicalContentProvider(fWrappedViewer.getViewer());
 	}
 
+	@Override
 	protected JavaUILabelProvider createLabelProvider() {
 		if(isInListState())
 			return createListLabelProvider();
@@ -262,10 +273,12 @@ public class PackagesView extends JavaBrowsingPart{
 	 *
 	 * @return	the string used as ID for the Help context
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.PACKAGES_BROWSING_VIEW;
 	}
 
+	@Override
 	protected String getLinkToEditorKey() {
 		return PreferenceConstants.LINK_BROWSING_PACKAGES_TO_EDITOR;
 	}
@@ -277,6 +290,7 @@ public class PackagesView extends JavaBrowsingPart{
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid input
 	 */
+	@Override
 	protected boolean isValidInput(Object element) {
 		if (element instanceof IJavaProject || (element instanceof IPackageFragmentRoot && ((IJavaElement)element).getElementName() != IPackageFragmentRoot.DEFAULT_PACKAGEROOT_PATH))
 			try {
@@ -296,6 +310,7 @@ public class PackagesView extends JavaBrowsingPart{
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid element
 	 */
+	@Override
 	protected boolean isValidElement(Object element) {
 		if (element instanceof IPackageFragment) {
 			IJavaElement parent= ((IPackageFragment)element).getParent();
@@ -308,6 +323,7 @@ public class PackagesView extends JavaBrowsingPart{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#findElementToSelect(org.eclipse.jdt.core.IJavaElement)
 	 */
+	@Override
 	protected IJavaElement findElementToSelect(IJavaElement je) {
 		if (je == null)
 			return null;
@@ -329,6 +345,7 @@ public class PackagesView extends JavaBrowsingPart{
 	/*
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#setInput(java.lang.Object)
 	 */
+	@Override
 	protected void setInput(Object input) {
 		setViewerWrapperInput(input);
 		super.updateTitle();
@@ -341,6 +358,7 @@ public class PackagesView extends JavaBrowsingPart{
 	/**
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#fillActionBars(org.eclipse.ui.IActionBars)
 	 */
+	@Override
 	protected void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		fSwitchActionGroup.fillActionBars(actionBars);
@@ -374,14 +392,17 @@ public class PackagesView extends JavaBrowsingPart{
 	}
 
 	//alter sorter to include LogicalPackages
+	@Override
 	protected JavaElementComparator createJavaElementComparator() {
 		return new JavaElementComparator(){
+			@Override
 			public int category(Object element) {
 				if (element instanceof LogicalPackage) {
 					LogicalPackage cp= (LogicalPackage) element;
 					return super.category(cp.getFragments()[0]);
 				} else return super.category(element);
 			}
+			@Override
 			public int compare(Viewer viewer, Object e1, Object e2){
 				if (e1 instanceof LogicalPackage) {
 					LogicalPackage cp= (LogicalPackage) e1;
@@ -396,6 +417,7 @@ public class PackagesView extends JavaBrowsingPart{
 		};
 	}
 
+	@Override
 	protected StatusBarUpdater createStatusBarUpdater(IStatusLineManager slManager) {
 		return new StatusBarUpdater4LogicalPackage(slManager);
 	}
@@ -404,6 +426,7 @@ public class PackagesView extends JavaBrowsingPart{
 		getSite().setSelectionProvider(fWrappedViewer);
 	}
 
+	@Override
 	void adjustInputAndSetSelection(Object o) {
 		if (!(o instanceof LogicalPackage)) {
 			super.adjustInputAndSetSelection(o);
@@ -418,6 +441,7 @@ public class PackagesView extends JavaBrowsingPart{
 	}
 
 	//do the same thing as the JavaBrowsingPart but with wrapper
+	@Override
 	protected void createActions() {
 		super.createActions();
 
@@ -443,6 +467,7 @@ public class PackagesView extends JavaBrowsingPart{
 			super(actions, index);
 		}
 
+		@Override
 		public void fillActionBars(IActionBars actionBars) {
 			//create new layout group
 			IMenuManager manager= actionBars.getMenuManager();
@@ -474,6 +499,7 @@ public class PackagesView extends JavaBrowsingPart{
 		/*
 		 * @see org.eclipse.jface.action.IAction#run()
 		 */
+		@Override
 		public void run() {
 			switchViewer(fState);
 		}
@@ -529,6 +555,7 @@ public class PackagesView extends JavaBrowsingPart{
 		actionBars.updateActionBars();
 	}
 
+	@Override
 	protected IJavaElement findInputForJavaElement(IJavaElement je) {
 		// null check has to take place here as well (not only in
 		// findInputForJavaElement(IJavaElement, boolean) since we
@@ -567,9 +594,11 @@ public class PackagesView extends JavaBrowsingPart{
 	 *
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#createDecoratingLabelProvider(JavaUILabelProvider)
 	 */
+	@Override
 	protected DecoratingJavaLabelProvider createDecoratingLabelProvider(JavaUILabelProvider provider) {
 		return new DecoratingJavaLabelProvider(provider, false, isInListState()) {
 
+			@Override
 			public String getText(Object element){
 				if (element instanceof LogicalPackage) {
 					LogicalPackage el= (LogicalPackage) element;
@@ -577,6 +606,7 @@ public class PackagesView extends JavaBrowsingPart{
 				} else return super.getText(element);
 			}
 
+			@Override
 			public Image getImage(Object element) {
 				if(element instanceof LogicalPackage){
 					LogicalPackage el= (LogicalPackage) element;
@@ -598,55 +628,12 @@ public class PackagesView extends JavaBrowsingPart{
 	}
 
 	/*
-	 * Overridden from JavaBrowsingPart to handel LogicalPackages and tree
-	 * structure.
-	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#adjustInputAndSetSelection(org.eclipse.jdt.core.IJavaElement)
+	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#isInputResetBy(java.lang.Object, java.lang.Object, org.eclipse.ui.IWorkbenchPart)
+	 * @since 3.7
 	 */
-	void adjustInputAndSetSelection(IJavaElement je) {
-
-		IJavaElement jElementToSelect= findElementToSelect(je);
-		LogicalPackagesProvider p= (LogicalPackagesProvider) fWrappedViewer.getContentProvider();
-
-		Object elementToSelect= jElementToSelect;
-		if (jElementToSelect != null && jElementToSelect.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
-			IPackageFragment pkgFragment= (IPackageFragment)jElementToSelect;
-			elementToSelect= p.findLogicalPackage(pkgFragment);
-			if (elementToSelect == null)
-				elementToSelect= pkgFragment;
-		}
-
-		IJavaElement newInput= findInputForJavaElement(je);
-		if (elementToSelect == null && !isValidInput(newInput))
-			setInput(null);
-		else if (elementToSelect == null || getViewer().testFindItem(elementToSelect) == null) {
-
-			//optimization, if you are in the same project but expansion hasn't happened
-			Object input= getViewer().getInput();
-			if (elementToSelect != null && newInput != null) {
-				if (newInput.equals(input)) {
-					getViewer().reveal(elementToSelect);
-				// Adjust input to selection
-				} else {
-					setInput(newInput);
-					getViewer().reveal(elementToSelect);
-				}
-			} else
-				setInput(newInput);
-
-			if (elementToSelect instanceof IPackageFragment) {
-				IPackageFragment pkgFragment= (IPackageFragment)elementToSelect;
-				elementToSelect= p.findLogicalPackage(pkgFragment);
-				if (elementToSelect == null)
-					elementToSelect= pkgFragment;
-			}
-		}
-
-		ISelection selection;
-		if (elementToSelect != null)
-			selection= new StructuredSelection(elementToSelect);
-		else
-			selection= StructuredSelection.EMPTY;
-		setSelection(selection, true);
+	@Override
+	boolean isInputResetBy(Object newInput, Object input, IWorkbenchPart part) {
+		return (!(part instanceof ProjectsView || part instanceof PackageExplorerPart)) && super.isInputResetBy(newInput, input, part);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewFlatContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewFlatContentProvider.java
index 32f1ea0..07e47e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewFlatContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewFlatContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,7 +97,7 @@ public class PackagesViewFlatContentProvider extends LogicalPackagesProvider imp
 	 * Weeds out packageFragments from external jars and folders
 	 */
 	private IPackageFragment[] getPackageFragments(IPackageFragment[] iPackageFragments) {
-		List list= new ArrayList();
+		List<IPackageFragment> list= new ArrayList<IPackageFragment>();
 		for (int i= 0; i < iPackageFragments.length; i++) {
 			IPackageFragment fragment= iPackageFragments[i];
 			IJavaElement el= fragment.getParent();
@@ -108,7 +108,7 @@ public class PackagesViewFlatContentProvider extends LogicalPackagesProvider imp
 			}
 			list.add(fragment);
 		}
-		return (IPackageFragment[]) list.toArray(new IPackageFragment[list.size()]);
+		return list.toArray(new IPackageFragment[list.size()]);
 	}
 
 	/*
@@ -118,6 +118,7 @@ public class PackagesViewFlatContentProvider extends LogicalPackagesProvider imp
 		return getChildren(inputElement);
 	}
 
+	@Override
 	protected void processDelta(IJavaElementDelta delta) throws JavaModelException {
 
 		int kind= delta.getKind();
@@ -252,7 +253,7 @@ public class PackagesViewFlatContentProvider extends LogicalPackagesProvider imp
 
 	private void removeElement(IPackageFragment frag) {
 		String key= getKey(frag);
-		LogicalPackage lp= (LogicalPackage)fMapToLogicalPackage.get(key);
+		LogicalPackage lp= fMapToLogicalPackage.get(key);
 
 		if(lp != null){
 			lp.remove(frag);
@@ -290,14 +291,14 @@ public class PackagesViewFlatContentProvider extends LogicalPackagesProvider imp
 
 	private void addElement(IPackageFragment frag) {
 		String key= getKey(frag);
-		LogicalPackage lp= (LogicalPackage)fMapToLogicalPackage.get(key);
+		LogicalPackage lp= fMapToLogicalPackage.get(key);
 
 		if(lp != null && lp.belongs(frag)){
 			lp.add(frag);
 			return;
 		}
 
-		IPackageFragment fragment= (IPackageFragment)fMapToPackageFragments.get(key);
+		IPackageFragment fragment= fMapToPackageFragments.get(key);
 		if(fragment != null){
 			//must create a new LogicalPackage
 			if(!fragment.equals(frag)){
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java
index 5486e5b..2f7d847 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
@@ -71,7 +72,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 							IJavaProject project= (IJavaProject) parentElement;
 
 							IPackageFragment[] topLevelChildren= getTopLevelChildrenByElementName(project.getPackageFragments());
-							List list= new ArrayList();
+							List<IPackageFragment> list= new ArrayList<IPackageFragment>();
 							for (int i= 0; i < topLevelChildren.length; i++) {
 								IPackageFragment fragment= topLevelChildren[i];
 
@@ -84,7 +85,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 							}
 
 							IPackageFragmentRoot[] packageFragmentRoots= project.getPackageFragmentRoots();
-							List folders= new ArrayList();
+							List<Object> folders= new ArrayList<Object>();
 							for (int i= 0; i < packageFragmentRoots.length; i++) {
 								IPackageFragmentRoot root= packageFragmentRoots[i];
 								IResource resource= root.getUnderlyingResource();
@@ -93,7 +94,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 								}
 							}
 
-							Object[] logicalPackages= combineSamePackagesIntoLogialPackages((IPackageFragment[]) list.toArray(new IPackageFragment[list.size()]));
+							Object[] logicalPackages= combineSamePackagesIntoLogialPackages(list.toArray(new IPackageFragment[list.size()]));
 							if (folders.size() > 0) {
 								if (logicalPackages.length > 0)
 									folders.addAll(Arrays.asList(logicalPackages));
@@ -119,7 +120,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 								return fragments;
 
 							} else if (resource != null && resource instanceof IFolder) {
-								List children= getFoldersAndElements(((IFolder)resource).members());
+								List<IAdaptable> children= getFoldersAndElements(((IFolder)resource).members());
 
 								IPackageFragment defaultPackage= root.getPackageFragment(""); //$NON-NLS-1$
 								if(defaultPackage.exists())
@@ -147,7 +148,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 							if (nonJavaResources.length == 0) {
 								return fragments;
 							}
-							ArrayList combined= new ArrayList();
+							ArrayList<Object> combined= new ArrayList<Object>();
 							combined.addAll(Arrays.asList(fragments));
 							for (int i= 0; i < nonJavaResources.length; i++) {
 								Object curr= nonJavaResources[i];
@@ -162,7 +163,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 			//@Improve: rewrite using concatenate
 			} else if (parentElement instanceof LogicalPackage) {
 
-				List children= new ArrayList();
+				List<IPackageFragment> children= new ArrayList<IPackageFragment>();
 				LogicalPackage logicalPackage= (LogicalPackage) parentElement;
 				IPackageFragment[] elements= logicalPackage.getFragments();
 				for (int i= 0; i < elements.length; i++) {
@@ -170,11 +171,11 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 					IPackageFragment[] objects= findNextLevelChildrenByElementName((IPackageFragmentRoot) fragment.getParent(), fragment);
 					children.addAll(Arrays.asList(objects));
 				}
-				return combineSamePackagesIntoLogialPackages((IPackageFragment[]) children.toArray(new IPackageFragment[children.size()]));
+				return combineSamePackagesIntoLogialPackages(children.toArray(new IPackageFragment[children.size()]));
 			} else if (parentElement instanceof IFolder) {
 				IFolder folder= (IFolder)parentElement;
 				IResource[] resources= folder.members();
-				List children = getFoldersAndElements(resources);
+				List<IAdaptable> children = getFoldersAndElements(resources);
 				addFragmentsToMap(children);
 				return children.toArray();
 			}
@@ -187,18 +188,18 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 		return NO_CHILDREN;
 	}
 
-	private void addFragmentsToMap(List elements) {
-		List packageFragments= new ArrayList();
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+	private void addFragmentsToMap(List<IAdaptable> elements) {
+		List<Object> packageFragments= new ArrayList<Object>();
+		for (Iterator<IAdaptable> iter= elements.iterator(); iter.hasNext();) {
 			Object elem= iter.next();
 			if (elem instanceof IPackageFragment)
 				packageFragments.add(elem);
 		}
-		addFragmentsToMap((IPackageFragment[])packageFragments.toArray(new IPackageFragment[packageFragments.size()]));
+		addFragmentsToMap(packageFragments.toArray(new IPackageFragment[packageFragments.size()]));
 	}
 
-	private List getFoldersAndElements(IResource[] resources) {
-		List list= new ArrayList();
+	private List<IAdaptable> getFoldersAndElements(IResource[] resources) {
+		List<IAdaptable> list= new ArrayList<IAdaptable>();
 		for (int i= 0; i < resources.length; i++) {
 			IResource resource= resources[i];
 
@@ -216,8 +217,8 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 		return list;
 	}
 
-	private List getFolders(IResource[] resources) {
-		List list= new ArrayList();
+	private List<IFolder> getFolders(IResource[] resources) {
+		List<IFolder> list= new ArrayList<IFolder>();
 		for (int i= 0; i < resources.length; i++) {
 			IResource resource= resources[i];
 
@@ -234,7 +235,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 	}
 
 	private IPackageFragment[] findNextLevelChildrenByElementName(IPackageFragmentRoot parent, IPackageFragment fragment) {
-		List list= new ArrayList();
+		List<IPackageFragment> list= new ArrayList<IPackageFragment>();
 		try {
 
 			IJavaElement[] children= parent.getChildren();
@@ -257,11 +258,11 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 		} catch (JavaModelException e) {
 			JavaPlugin.log(e);
 		}
-		return (IPackageFragment[]) list.toArray(new IPackageFragment[list.size()]);
+		return list.toArray(new IPackageFragment[list.size()]);
 	}
 
 	private IPackageFragment[] getTopLevelChildrenByElementName(IJavaElement[] elements){
-		List topLevelElements= new ArrayList();
+		List<IJavaElement> topLevelElements= new ArrayList<IJavaElement>();
 		for (int i= 0; i < elements.length; i++) {
 			IJavaElement iJavaElement= elements[i];
 			//if the name of the PackageFragment is the top level package it will contain no "." separators
@@ -269,7 +270,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 				topLevelElements.add(iJavaElement);
 			}
 		}
-		return (IPackageFragment[]) topLevelElements.toArray(new IPackageFragment[topLevelElements.size()]);
+		return topLevelElements.toArray(new IPackageFragment[topLevelElements.size()]);
 	}
 
 	/*
@@ -337,7 +338,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 		if(!fInputIsProject)
 			return null;
 
-		List fragments= new ArrayList();
+		List<IPackageFragment> fragments= new ArrayList<IPackageFragment>();
 		try {
 			IPackageFragmentRoot[] roots= pkgFragment.getJavaProject().getPackageFragmentRoots();
 			for (int i= 0; i < roots.length; i++) {
@@ -349,9 +350,9 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 			if(!fragments.isEmpty()) {
 				LogicalPackage logicalPackage= new LogicalPackage(pkgFragment);
 				fMapToLogicalPackage.put(getKey(pkgFragment), logicalPackage);
-				Iterator iter= fragments.iterator();
+				Iterator<IPackageFragment> iter= fragments.iterator();
 				while(iter.hasNext()){
-					IPackageFragment f= (IPackageFragment)iter.next();
+					IPackageFragment f= iter.next();
 					if(logicalPackage.belongs(f)){
 						logicalPackage.add(f);
 						fMapToLogicalPackage.put(getKey(f), logicalPackage);
@@ -428,6 +429,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 		return getChildren(inputElement);
 	}
 
+	@Override
 	protected void processDelta(IJavaElementDelta delta) throws JavaModelException {
 
 		int kind = delta.getKind();
@@ -561,7 +563,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 	private void addElement(IPackageFragment frag, Object parent) {
 
 		String key= getKey(frag);
-		LogicalPackage lp= (LogicalPackage)fMapToLogicalPackage.get(key);
+		LogicalPackage lp= fMapToLogicalPackage.get(key);
 
 		//if fragment must be added to an existing LogicalPackage
 		if (lp != null && lp.belongs(frag)){
@@ -570,7 +572,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 		}
 
 		//if a new LogicalPackage must be created
-		IPackageFragment iPackageFragment= (IPackageFragment)fMapToPackageFragments.get(key);
+		IPackageFragment iPackageFragment= fMapToPackageFragments.get(key);
 		if (iPackageFragment!= null && !iPackageFragment.equals(frag)){
 			lp= new LogicalPackage(iPackageFragment);
 			lp.add(frag);
@@ -612,7 +614,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 	private void removeElement(IPackageFragment frag) {
 
 		String key= getKey(frag);
-		LogicalPackage lp= (LogicalPackage)fMapToLogicalPackage.get(key);
+		LogicalPackage lp= fMapToLogicalPackage.get(key);
 
 		if(lp != null){
 			lp.remove(frag);
@@ -636,7 +638,7 @@ class PackagesViewHierarchicalContentProvider extends LogicalPackagesProvider im
 
 		} else {
 			//remove the fragment from the fragment map and viewer
-			IPackageFragment fragment= (IPackageFragment) fMapToPackageFragments.get(key);
+			IPackageFragment fragment= fMapToPackageFragments.get(key);
 			if (fragment!= null && fragment.equals(frag)) {
 				fMapToPackageFragments.remove(key);
 				postRemove(frag);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewLabelProvider.java
index 2284171..3bafa5e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,6 +67,7 @@ class PackagesViewLabelProvider extends AppearanceAwareLabelProvider {
 	/*
 	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
 	 */
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof LogicalPackage) {
 			LogicalPackage cp= (LogicalPackage) element;
@@ -107,6 +108,7 @@ class PackagesViewLabelProvider extends AppearanceAwareLabelProvider {
 	/*
 	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 	 */
+	@Override
 	public String getText(Object element) {
 		if (element instanceof IPackageFragment)
 			return getText((IPackageFragment)element);
@@ -119,6 +121,7 @@ class PackagesViewLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getRichTextLabel(java.lang.Object)
 	 */
+	@Override
 	public StyledString getStyledText(Object element) {
 		if (element instanceof IPackageFragment || element instanceof LogicalPackage)
 			return new StyledString(getText(element));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java
index 60d57e1..79597b8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTableViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ class PackagesViewTableViewer extends ProblemTableViewer implements IPackagesVie
 		super(parent, style);
 	}
 
+	@Override
 	public void mapElement(Object element, Widget item) {
 		if (element instanceof LogicalPackage && item instanceof Item) {
 			LogicalPackage cp= (LogicalPackage) element;
@@ -42,6 +43,7 @@ class PackagesViewTableViewer extends ProblemTableViewer implements IPackagesVie
 		super.mapElement(element, item);
 	}
 
+	@Override
 	public void unmapElement(Object element, Widget item) {
 		if (element instanceof LogicalPackage && item instanceof Item) {
 			LogicalPackage cp= (LogicalPackage) element;
@@ -58,10 +60,11 @@ class PackagesViewTableViewer extends ProblemTableViewer implements IPackagesVie
 	 * @see org.eclipse.jface.viewers.StructuredViewer#getFilteredChildren(java.
 	 * lang.Object)
 	 */
+	@Override
 	protected Object[] getFilteredChildren(Object parent) {
 
 		Object[] result= getRawChildren(parent);
-		List list= new ArrayList();
+		List<Object> list= new ArrayList<Object>();
 		if (result != null) {
 			Object[] toBeFiltered= new Object[1];
 			for (int i= 0; i < result.length; i++) {
@@ -83,28 +86,34 @@ class PackagesViewTableViewer extends ProblemTableViewer implements IPackagesVie
 		return filter(logicalPackage.getFragments()).length > 0;
 	}
 
-	// --------- see: IPackagesViewViewer ----------
+	// --------- see IPackagesViewViewer ----------
 
+	@Override
 	public Widget doFindItem(Object element){
 		return super.doFindItem(element);
 	}
 
+	@Override
 	public Widget doFindInputItem(Object element){
 		return super.doFindInputItem(element);
 	}
 
+	@Override
 	public List getSelectionFromWidget(){
 		return super.getSelectionFromWidget();
 	}
 
+	@Override
 	public void doUpdateItem(Widget item, Object element, boolean fullMap){
 		super.doUpdateItem(item, element, fullMap);
 	}
 
+	@Override
 	public void internalRefresh(Object element){
 		super.internalRefresh(element);
 	}
 
+	@Override
 	public void setSelectionToWidget(List l, boolean reveal){
 		super.setSelectionToWidget(l, reveal);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java
index 2b5840f..bd14a78 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewTreeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,7 @@ public class PackagesViewTreeViewer extends ProblemTreeViewer implements IPackag
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#mapElement(java.lang.Object, org.eclipse.swt.widgets.Widget)
 	 */
+	@Override
 	public void mapElement(Object element, Widget item) {
 		if (element instanceof LogicalPackage && item instanceof Item) {
 			LogicalPackage cp= (LogicalPackage) element;
@@ -51,6 +52,7 @@ public class PackagesViewTreeViewer extends ProblemTreeViewer implements IPackag
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#unmapElement(java.lang.Object, org.eclipse.swt.widgets.Widget)
 	 */
+	@Override
 	public void unmapElement(Object element, Widget item) {
 
 		if (element instanceof LogicalPackage && item instanceof Item) {
@@ -67,6 +69,7 @@ public class PackagesViewTreeViewer extends ProblemTreeViewer implements IPackag
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer#isFiltered(java.lang.Object, java.lang.Object, org.eclipse.jface.viewers.ViewerFilter[])
 	 */
+	@Override
 	protected boolean isFiltered(Object object, Object parent, ViewerFilter[] filters) {
 		boolean res= super.isFiltered(object, parent, filters);
 		if (res && isEssential(object)) {
@@ -94,28 +97,34 @@ public class PackagesViewTreeViewer extends ProblemTreeViewer implements IPackag
 		return false;
 	}
 
-	// --------- see: IPackagesViewViewer ----------
+	// --------- see IPackagesViewViewer ----------
 
+	@Override
 	public Widget doFindItem(Object element) {
 		return super.doFindItem(element);
 	}
 
+	@Override
 	public Widget doFindInputItem(Object element) {
 		return super.doFindInputItem(element);
 	}
 
-	public List getSelectionFromWidget() {
+	@Override
+	public List<?> getSelectionFromWidget() {
 		return super.getSelectionFromWidget();
 	}
 
+	@Override
 	public void doUpdateItem(Widget item, Object element, boolean fullMap){
 		super.doUpdateItem(item, element, fullMap);
 	}
 
+	@Override
 	public void internalRefresh(Object element){
 		super.internalRefresh(element);
 	}
 
+	@Override
 	public void setSelectionToWidget(List l, boolean reveal){
 		super.setSelectionToWidget(l, reveal);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PatchedOpenInNewWindowAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PatchedOpenInNewWindowAction.java
index 6956ba8..8aad66b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PatchedOpenInNewWindowAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PatchedOpenInNewWindowAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ public class PatchedOpenInNewWindowAction extends OpenInNewWindowAction {
 		fWorkbenchWindow= window;
 	}
 
+	@Override
 	public void run() {
 		JavaBrowsingPerspectiveFactory.setInputFromAction(getSelectedJavaElement());
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectAndSourceFolderContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectAndSourceFolderContentProvider.java
index daa8b60..9321f66 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectAndSourceFolderContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectAndSourceFolderContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ class ProjectAndSourceFolderContentProvider extends JavaBrowsingContentProvider
 	/* (non-Javadoc)
 	 * Method declared on ITreeContentProvider.
 	 */
+	@Override
 	public Object[] getChildren(Object element) {
 		if (!exists(element))
 			return NO_CHILDREN;
@@ -40,8 +41,8 @@ class ProjectAndSourceFolderContentProvider extends JavaBrowsingContentProvider
 			if (element instanceof IStructuredSelection) {
 				Assert.isLegal(false);
 				Object[] result= new Object[0];
-				Class clazz= null;
-				Iterator iter= ((IStructuredSelection)element).iterator();
+				Class<? extends Object> clazz= null;
+				Iterator<?> iter= ((IStructuredSelection)element).iterator();
 				while (iter.hasNext()) {
 					Object item=  iter.next();
 					if (clazz == null)
@@ -56,7 +57,7 @@ class ProjectAndSourceFolderContentProvider extends JavaBrowsingContentProvider
 			if (element instanceof IStructuredSelection) {
 				Assert.isLegal(false);
 				Object[] result= new Object[0];
-				Iterator iter= ((IStructuredSelection)element).iterator();
+				Iterator<?> iter= ((IStructuredSelection)element).iterator();
 				while (iter.hasNext())
 					result= concatenate(result, getChildren(iter.next()));
 				return result;
@@ -75,12 +76,13 @@ class ProjectAndSourceFolderContentProvider extends JavaBrowsingContentProvider
 		}
 	}
 
+	@Override
 	protected Object[] getPackageFragmentRoots(IJavaProject project) throws JavaModelException {
 		if (!project.getProject().isOpen())
 			return NO_CHILDREN;
 
 		IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-		List list= new ArrayList(roots.length);
+		List<IPackageFragmentRoot> list= new ArrayList<IPackageFragmentRoot>(roots.length);
 		// filter out package fragments that correspond to projects and
 		// replace them with the package fragments directly
 		for (int i= 0; i < roots.length; i++) {
@@ -95,6 +97,7 @@ class ProjectAndSourceFolderContentProvider extends JavaBrowsingContentProvider
 	 *
 	 * @see ITreeContentProvider
 	 */
+	@Override
 	public boolean hasChildren(Object element) {
 		return element instanceof IJavaProject && super.hasChildren(element);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java
index 8fcf5ea..8c996e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ProjectsView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#createViewer(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected StructuredViewer createViewer(Composite parent) {
 		ProblemTreeViewer result= new ProblemTreeViewer(parent, SWT.MULTI);
 		fFilterUpdater= new FilterUpdater(result);
@@ -70,6 +71,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fFilterUpdater != null)
 			ResourcesPlugin.getWorkspace().removeResourceChangeListener(fFilterUpdater);
@@ -79,6 +81,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class key) {
 		if (key == IShowInTargetList.class) {
 			return new IShowInTargetList() {
@@ -95,6 +98,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#createContentProvider()
 	 */
+	@Override
 	protected IContentProvider createContentProvider() {
 		return new ProjectAndSourceFolderContentProvider(this);
 	}
@@ -104,10 +108,12 @@ public class ProjectsView extends JavaBrowsingPart {
 	 *
 	 * @return	the string used as ID for the Help context
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.PROJECTS_VIEW;
 	}
 
+	@Override
 	protected String getLinkToEditorKey() {
 		return PreferenceConstants.LINK_BROWSING_PROJECTS_TO_EDITOR;
 	}
@@ -116,6 +122,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	/**
 	 * Adds additional listeners to this view.
 	 */
+	@Override
 	protected void hookViewerListeners() {
 		super.hookViewerListeners();
 		getViewer().addDoubleClickListener(new IDoubleClickListener() {
@@ -128,6 +135,7 @@ public class ProjectsView extends JavaBrowsingPart {
 		});
 	}
 
+	@Override
 	protected void setInitialInput() {
 		IJavaElement root= JavaCore.create(JavaPlugin.getWorkspace().getRoot());
 		getViewer().setInput(root);
@@ -141,6 +149,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid input
 	 */
+	@Override
 	protected boolean isValidInput(Object element) {
 		return element instanceof IJavaModel;
 	}
@@ -152,6 +161,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid element
 	 */
+	@Override
 	protected boolean isValidElement(Object element) {
 		return element instanceof IJavaProject || element instanceof IPackageFragmentRoot;
 	}
@@ -162,6 +172,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	 * @param je	the Java element which has the focus
 	 * @return the element to select
 	 */
+	@Override
 	protected IJavaElement findElementToSelect(IJavaElement je) {
 		if (je == null)
 			return null;
@@ -184,6 +195,7 @@ public class ProjectsView extends JavaBrowsingPart {
 	/*
 	 * @see JavaBrowsingPart#setInput(Object)
 	 */
+	@Override
 	protected void setInput(Object input) {
 		// Don't allow to clear input for this view
 		if (input != null)
@@ -192,6 +204,7 @@ public class ProjectsView extends JavaBrowsingPart {
 			getViewer().setSelection(null);
 	}
 
+	@Override
 	protected void createActions() {
 		super.createActions();
 		fActionGroups.addGroup(new ProjectActionGroup(this));
@@ -203,11 +216,13 @@ public class ProjectsView extends JavaBrowsingPart {
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#activateHandlers(org.eclipse.ui.handlers.IHandlerService)
 	 * @since 3.4
 	 */
+	@Override
 	protected void activateHandlers(IHandlerService handlerService) {
 		super.activateHandlers(handlerService);
 		handlerService.activateHandler(CollapseAllHandler.COMMAND_ID, new ActionHandler(fCollapseAllAction));
 	}
 
+	@Override
 	protected void fillToolBar(IToolBarManager tbm) {
 		super.fillToolBar(tbm);
 		tbm.add(fCollapseAllAction);
@@ -219,13 +234,14 @@ public class ProjectsView extends JavaBrowsingPart {
 	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
 	 * @since 2.1
 	 */
+	@Override
 	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
 		if (!needsToProcessSelectionChanged(part))
 			return;
 
 		if (selection instanceof IStructuredSelection) {
 			IStructuredSelection sel= (IStructuredSelection)selection;
-			Iterator iter= sel.iterator();
+			Iterator<?> iter= sel.iterator();
 			while (iter.hasNext()) {
 				Object selectedElement= iter.next();
 				if (selectedElement instanceof LogicalPackage) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ToggleLinkingAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ToggleLinkingAction.java
index 5f87a7b..f329984 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ToggleLinkingAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/ToggleLinkingAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public class ToggleLinkingAction extends AbstractToggleLinkingAction {
 	/**
 	 * Runs the action.
 	 */
+	@Override
 	public void run() {
 		fJavaBrowsingPart.setLinkingEnabled(isChecked());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TopLevelTypeProblemsLabelDecorator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TopLevelTypeProblemsLabelDecorator.java
index 52a9f6d..a74363a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TopLevelTypeProblemsLabelDecorator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TopLevelTypeProblemsLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ class TopLevelTypeProblemsLabelDecorator extends ProblemsLabelDecorator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.ProblemsLabelDecorator#isInside(int, ISourceReference)
 	 */
+	@Override
 	protected boolean isInside(int pos, ISourceReference sourceElement) throws CoreException {
 //		XXX: Work in progress for problem decorator being a workbench decorator
 //		IDecoratorManager decoratorMgr= PlatformUI.getWorkbench().getDecoratorManager();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java
index a593be9..f057da4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/TypesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class TypesView extends JavaBrowsingPart {
 	 * @return the label provider
 	 * @see org.eclipse.jface.viewers.ILabelProvider
 	 */
+	@Override
 	protected JavaUILabelProvider createLabelProvider() {
 		return new AppearanceAwareLabelProvider(
 						AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.T_CATEGORY,
@@ -63,6 +64,7 @@ public class TypesView extends JavaBrowsingPart {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class key) {
 		if (key == IShowInTargetList.class) {
 			return new IShowInTargetList() {
@@ -78,6 +80,7 @@ public class TypesView extends JavaBrowsingPart {
 	/**
 	 * Adds filters the viewer of this part.
 	 */
+	@Override
 	protected void addFilters() {
 		super.addFilters();
 		getViewer().addFilter(new NonJavaElementFilter());
@@ -90,6 +93,7 @@ public class TypesView extends JavaBrowsingPart {
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid input
 	 */
+	@Override
 	protected boolean isValidInput(Object element) {
 		return element instanceof IPackageFragment;
 	}
@@ -101,6 +105,7 @@ public class TypesView extends JavaBrowsingPart {
 	 * @param 	element	the object to test
 	 * @return	<true> if the given element is a valid element
 	 */
+	@Override
 	protected boolean isValidElement(Object element) {
 		if (element instanceof ICompilationUnit)
 			return super.isValidElement(((ICompilationUnit)element).getParent());
@@ -117,6 +122,7 @@ public class TypesView extends JavaBrowsingPart {
 	 * @param je	the Java element which has the focus
 	 * @return the element to select
 	 */
+	@Override
 	protected IJavaElement findElementToSelect(IJavaElement je) {
 		if (je == null)
 			return null;
@@ -148,19 +154,23 @@ public class TypesView extends JavaBrowsingPart {
 	 *
 	 * @return	the string used as ID for the Help context
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.TYPES_VIEW;
 	}
 
+	@Override
 	protected String getLinkToEditorKey() {
 		return PreferenceConstants.LINK_BROWSING_TYPES_TO_EDITOR;
 	}
 
+	@Override
 	protected void createActions() {
 		super.createActions();
 		fSelectAllAction= new SelectAllAction((TableViewer)getViewer());
 	}
 
+	@Override
 	protected void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 
@@ -174,6 +184,7 @@ public class TypesView extends JavaBrowsingPart {
 	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
 	 * @since 2.1
 	 */
+	@Override
 	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
 		if (!needsToProcessSelectionChanged(part))
 			return;
@@ -183,7 +194,7 @@ public class TypesView extends JavaBrowsingPart {
 			Object selectedElement= sel.getFirstElement();
 			if (sel.size() == 1 && (selectedElement instanceof LogicalPackage)) {
 				IPackageFragment[] fragments= ((LogicalPackage)selectedElement).getFragments();
-				List selectedElements= Arrays.asList(fragments);
+				List<IPackageFragment> selectedElements= Arrays.asList(fragments);
 				if (selectedElements.size() > 1) {
 					adjustInput(selectedElements);
 					fPreviousSelectedElement= selectedElements;
@@ -198,7 +209,7 @@ public class TypesView extends JavaBrowsingPart {
 		super.selectionChanged(part, selection);
 	}
 
-	private void adjustInput(List selectedElements) {
+	private void adjustInput(List<IPackageFragment> selectedElements) {
 		Object currentInput= getViewer().getInput();
 		if (!selectedElements.equals(currentInput))
 			setInput(selectedElements);
@@ -206,6 +217,7 @@ public class TypesView extends JavaBrowsingPart {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.browsing.JavaBrowsingPart#createDecoratingLabelProvider(org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider)
 	 */
+	@Override
 	protected DecoratingJavaLabelProvider createDecoratingLabelProvider(JavaUILabelProvider provider) {
 		DecoratingJavaLabelProvider decoratingLabelProvider= super.createDecoratingLabelProvider(provider);
 		provider.addLabelDecorator(new TopLevelTypeProblemsLabelDecorator(null));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyFiltersActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyFiltersActionGroup.java
index e334a6c..db1c1fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyFiltersActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyFiltersActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,8 @@ public class CallHierarchyFiltersActionGroup extends ActionGroup {
 			setDisabledImageDescriptor(JavaPluginImages.DESC_DLCL_FILTER);
         }
 
-        public void run() {
+        @Override
+		public void run() {
             openFiltersDialog();
         }
     }
@@ -52,7 +53,8 @@ public class CallHierarchyFiltersActionGroup extends ActionGroup {
     		setText(CallHierarchyMessages.ShowExpandWithConstructorsDialogAction_text);
     	}
     	
-    	public void run() {
+    	@Override
+		public void run() {
     		openExpandWithConstructorsDialog();
     	}
     }
@@ -74,7 +76,8 @@ public class CallHierarchyFiltersActionGroup extends ActionGroup {
     /* (non-Javadoc)
      * Method declared on ActionGroup.
      */
-    public void fillActionBars(IActionBars actionBars) {
+    @Override
+	public void fillActionBars(IActionBars actionBars) {
         fillViewMenu(actionBars.getMenuManager());
     }
 
@@ -87,7 +90,8 @@ public class CallHierarchyFiltersActionGroup extends ActionGroup {
     /* (non-Javadoc)
      * Method declared on ActionGroup.
      */
-    public void dispose() {
+    @Override
+	public void dispose() {
         super.dispose();
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyImageDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyImageDescriptor.java
index 55b92bb..40f3265 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyImageDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyImageDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,14 +98,16 @@ public class CallHierarchyImageDescriptor extends CompositeImageDescriptor {
     /* (non-Javadoc)
      * Method declared in CompositeImageDescriptor
      */
-    protected Point getSize() {
+    @Override
+	protected Point getSize() {
         return fSize;
     }
 
     /* (non-Javadoc)
      * Method declared on Object.
      */
-    public boolean equals(Object object) {
+    @Override
+	public boolean equals(Object object) {
         if (object == null || !CallHierarchyImageDescriptor.class.equals(object.getClass()))
             return false;
 
@@ -116,14 +118,16 @@ public class CallHierarchyImageDescriptor extends CompositeImageDescriptor {
     /* (non-Javadoc)
      * Method declared on Object.
      */
-    public int hashCode() {
+    @Override
+	public int hashCode() {
         return fBaseImage.hashCode() | fFlags | fSize.hashCode();
     }
 
     /* (non-Javadoc)
      * Method declared in CompositeImageDescriptor
      */
-    protected void drawCompositeImage(int width, int height) {
+    @Override
+	protected void drawCompositeImage(int width, int height) {
         ImageData bg= getImageData(fBaseImage);
 
         drawImage(bg, 0, 0);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java
index 80069bc..d1c3635 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.corext.callhierarchy.CallLocation;
 import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;
 import org.eclipse.jdt.internal.corext.callhierarchy.RealCallers;
 import org.eclipse.jdt.internal.corext.util.Messages;
@@ -53,6 +54,7 @@ class CallHierarchyLabelProvider extends AppearanceAwareLabelProvider {
 	/*
 	 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 	 */
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof MethodWrapper) {
 			MethodWrapper methodWrapper;
@@ -78,6 +80,7 @@ class CallHierarchyLabelProvider extends AppearanceAwareLabelProvider {
 	/*
 	 * @see ILabelProvider#getText(Object)
 	 */
+	@Override
 	public String getText(Object element) {
 		if (isNormalMethodWrapper(element)) {
 			MethodWrapper wrapper= (MethodWrapper)element;
@@ -94,6 +97,7 @@ class CallHierarchyLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getStyledText(java.lang.Object)
 	 */
+	@Override
 	public StyledString getStyledText(Object element) {
 		if (isNormalMethodWrapper(element)) {
 			MethodWrapper wrapper= (MethodWrapper)element;
@@ -154,7 +158,7 @@ class CallHierarchyLabelProvider extends AppearanceAwareLabelProvider {
 	private String getElementLabel(MethodWrapper methodWrapper) {
 		String label= super.getText(methodWrapper.getMember());
 
-		Collection callLocations= methodWrapper.getMethodCall().getCallLocations();
+		Collection<CallLocation> callLocations= methodWrapper.getMethodCall().getCallLocations();
 
 		if ((callLocations != null) && (callLocations.size() > 1)) {
 			return Messages.format(CallHierarchyMessages.CallHierarchyLabelProvider_matches, new String[] { label, String.valueOf(callLocations.size()) });
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java
index d234a24..ad0e6ef 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java
@@ -38,8 +38,8 @@ public final class CallHierarchyMessages extends NLS {
 	public static String SelectFieldModeAction_write_accesses_description;
 	public static String HistoryDropDownAction_tooltip;
 	public static String HistoryAction_description;
+	public static String HistoryAction_inputElements_1;
 	public static String HistoryAction_inputElements_2;
-	public static String HistoryAction_inputElements_3;
 	public static String HistoryAction_inputElements_more;
 	public static String HistoryAction_tooltip;
 	public static String HistoryListDialog_title;
@@ -58,6 +58,8 @@ public final class CallHierarchyMessages extends NLS {
 	public static String ToggleOrientationAction_single_label;
 	public static String ToggleOrientationAction_single_tooltip;
 	public static String ToggleOrientationAction_single_description;
+	public static String ShowSearchInDialogAction_text;
+	public static String SearchInDialog_title;
 	public static String ShowExpandWithConstructorsDialogAction_text;
 	public static String ShowFilterDialogAction_text;
 	public static String FiltersDialog_filter;
@@ -80,12 +82,10 @@ public final class CallHierarchyMessages extends NLS {
 	public static String CallHierarchyViewPart_callsToFieldRead;
 	public static String CallHierarchyViewPart_callsToFieldWrite;
 	public static String CallHierarchyViewPart_callsToMembers_2;
-	public static String CallHierarchyViewPart_callsToMembers_3;
 	public static String CallHierarchyViewPart_callsToMembers_more;
 	public static String CallHierarchyViewPart_callsToMethod;
 	public static String CallHierarchyViewPart_callsFromConstructors;
 	public static String CallHierarchyViewPart_callsFromMembers_2;
-	public static String CallHierarchyViewPart_callsFromMembers_3;
 	public static String CallHierarchyViewPart_callsFromMembers_more;
 	public static String CallHierarchyViewPart_callsFromMethod;
 	public static String ExpandWithConstructorsConfigurationBlock_description;
@@ -117,8 +117,6 @@ public final class CallHierarchyMessages extends NLS {
 	public static String RefreshSingleElementAction_tooltip;
 	public static String RefreshSingleElementAction_description;
 	public static String SearchScopeActionGroup_searchScope;
-	public static String SearchScopeActionGroup_hierarchy_text;
-	public static String SearchScopeActionGroup_hierarchy_tooltip;
 	public static String SearchScopeActionGroup_project_text;
 	public static String SearchScopeActionGroup_project_tooltip;
 	public static String SearchScopeActionGroup_workingset_tooltip;
@@ -159,6 +157,8 @@ public final class CallHierarchyMessages extends NLS {
 	public static String ExpandWithConstructorsAction_expandWithConstructors_description;
 	public static String ExpandWithConstructorsAction_expandWithConstructors_tooltip;
 	public static String ExpandWithConstructorsDialog_title;
+	public static String PinCallHierarchyViewAction_label;
+	public static String PinCallHierarchyViewAction_tooltip;
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, CallHierarchyMessages.class);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties
index 7a83204..6b65c29 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties
@@ -31,9 +31,9 @@ SelectFieldModeAction_write_accesses_description=Show only write accesses
 HistoryDropDownAction_tooltip=Show History List
 HistoryDropDownAction_clearhistory_label=Clear History
 HistoryAction_description=Open ''{0}'' in Hierarchy
+HistoryAction_inputElements_1={0}
 HistoryAction_inputElements_2={0}, {1}
-HistoryAction_inputElements_3={0}, {1}, {2}
-HistoryAction_inputElements_more={0}, {1}, {2}, ...
+HistoryAction_inputElements_more={0}, {1}, ...
 HistoryAction_tooltip=Open ''{0}'' in Hierarchy
 
 HistoryListDialog_title=Call Hierarchy History
@@ -55,6 +55,8 @@ ToggleOrientationAction_single_label=Hierarchy &Only
 ToggleOrientationAction_single_tooltip=Hierarchy Only
 ToggleOrientationAction_single_description=Hierarchy Only
 
+ShowSearchInDialogAction_text= Search &In...
+SearchInDialog_title= Search In
 ShowExpandWithConstructorsDialogAction_text=E&xpand with Constructors...
 ShowFilterDialogAction_text= &Filters...
 FiltersDialog_filter= Filter Calls
@@ -77,20 +79,20 @@ CallHierarchyViewPart_callsToField=Members accessing ''{0}'' - in {1}
 CallHierarchyViewPart_callsToFieldWrite=Members writing to ''{0}'' - in {1}
 CallHierarchyViewPart_callsToFieldRead=Members reading ''{0}'' - in {1}
 CallHierarchyViewPart_callsToMembers_2=Members calling ''{0}'', ''{1}'' - in {2}
-CallHierarchyViewPart_callsToMembers_3=Members calling ''{0}'', ''{1}'', ''{2}'' - in {3}
-CallHierarchyViewPart_callsToMembers_more=Members calling ''{0}'', ''{1}'', ''{2}'', ... - in {3}
+CallHierarchyViewPart_callsToMembers_more=Members calling ''{0}'', ''{1}'', ... - in {2}
 CallHierarchyViewPart_callsToMethod=Members calling ''{0}'' - in {1}
 CallHierarchyViewPart_layout_menu=&Layout
 CallHierarchyViewPart_callsFromConstructors=Calls from constructors of ''{0}'' - in {1}
 CallHierarchyViewPart_callsFromMembers_2=Calls from ''{0}'', ''{1}'' - in {2}
-CallHierarchyViewPart_callsFromMembers_3=Calls from ''{0}'', ''{1}'', ''{2}'' - in {3}
-CallHierarchyViewPart_callsFromMembers_more=Calls from ''{0}'', ''{1}'', ''{2}'', ... - in {3}
+CallHierarchyViewPart_callsFromMembers_more=Calls from ''{0}'', ''{1}'', ... - in {2}
 CallHierarchyViewPart_callsFromMethod=Calls from ''{0}'' - in {1}
 FocusOnSelectionAction_focusOnSelection_text=Fo&cus On Selection
 FocusOnSelectionAction_focusOnSelection_description=Focus On Selection
 FocusOnSelectionAction_focusOnSelection_tooltip=Focus On Selection
 FocusOnSelectionAction_focusOn_selected=Foc&us On Selected Elements
 FocusOnSelectionAction_focusOn_text=Fo&cus On ''{0}''
+PinCallHierarchyViewAction_label= Pi&n Call Hierarchy View
+PinCallHierarchyViewAction_tooltip= Pin the Call Hierarchy View
 
 RefreshViewAction_text=Re&fresh View
 RefreshViewAction_tooltip=Refresh View
@@ -98,8 +100,6 @@ RefreshSingleElementAction_text= Refre&sh
 RefreshSingleElementAction_tooltip=Refresh
 RefreshSingleElementAction_description=Refresh
 SearchScopeActionGroup_searchScope=&Search Scope
-SearchScopeActionGroup_hierarchy_text=&Hierarchy
-SearchScopeActionGroup_hierarchy_tooltip=Search for Calls in Hierarchy
 SearchScopeActionGroup_project_text=&Project
 SearchScopeActionGroup_project_tooltip=Search for Calls in Project
 SearchScopeActionGroup_workingset_tooltip=Search for Calls in Working Set
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyTransferDropAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyTransferDropAdapter.java
index eca784a..6b86da4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyTransferDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyTransferDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,9 @@ package org.eclipse.jdt.internal.ui.callhierarchy;
 
 import java.util.List;
 
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TransferData;
+
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredViewer;
@@ -37,20 +40,73 @@ class CallHierarchyTransferDropAdapter extends ViewerInputDropAdapter {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void doInputView(Object inputElements) {
-		fCallHierarchyViewPart.setInputElements((IMember[]) inputElements);
+		IMember[] newElements= (IMember[])inputElements;
+		IMember[] oldInput= fCallHierarchyViewPart.getInputElements();
+		boolean noInput= oldInput != null && oldInput.length > 0;
+		if (getCurrentOperation() == DND.DROP_LINK || !noInput) {
+			fCallHierarchyViewPart.setInputElements(newElements);
+			return;
+		}
+		if (newElements != null && newElements.length > 0) {
+			fCallHierarchyViewPart.addInputElements(newElements);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.dnd.ViewerInputDropAdapter#performDrop(java.lang.Object)
+	 * @since 3.7
+	 */
+	@Override
+	public boolean performDrop(Object data) {
+		setSelectionFeedbackEnabled(false);
+		setExpandEnabled(false);
+
+		if (getCurrentTarget() != null)
+			return super.performDrop(data);
+
+		Object input= getInputElement(getSelection());
+		if (input != null) {
+			doInputView(input);
+			return true;
+		}
+		return super.performDrop(data);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object getInputElement(ISelection selection) {
 		if (selection instanceof IStructuredSelection) {
-			List elements= ((IStructuredSelection) selection).toList();
+			List<?> elements= ((IStructuredSelection) selection).toList();
 			if (CallHierarchy.arePossibleInputElements(elements)) {
 				return elements.toArray(new IMember[elements.size()]);
 			}
 		}
 		return null;
 	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.dnd.ViewerInputDropAdapter#determineOperation(java.lang.Object, int, org.eclipse.swt.dnd.TransferData, int)
+	 * @since 3.7
+	 */
+	@Override
+	protected int determineOperation(Object target, int operation, TransferData transferType, int operations) {
+		setSelectionFeedbackEnabled(false);
+		setExpandEnabled(false);
+
+		initializeSelection();
+
+		if (target != null) {
+			return super.determineOperation(target, operation, transferType, operations);
+		} else if (getInputElement(getSelection()) != null) {
+			setSelectionFeedbackEnabled(false);
+			setExpandEnabled(false);
+			return operation == DND.DROP_DEFAULT || operation == DND.DROP_MOVE ? DND.DROP_LINK : operation;
+		} else {
+			return DND.DROP_NONE;
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java
index 6dd249d..bee6008 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 
 import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IViewReference;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
@@ -61,6 +62,14 @@ public class CallHierarchyUI {
     private static final String PREF_MAX_CALL_DEPTH = "PREF_MAX_CALL_DEPTH"; //$NON-NLS-1$
 
     private static CallHierarchyUI fgInstance;
+    private int fViewCount= 0;
+    private final List<IMember[]> fMethodHistory= new ArrayList<IMember[]>();
+
+	/**
+	 * List of the Call Hierarchy views in LRU order, where the most recently used view is at index 0.
+	 * @since 3.7
+	 */
+	private List<CallHierarchyViewPart> fLRUCallHierarchyViews= new ArrayList<CallHierarchyViewPart>();
 
     private CallHierarchyUI() {
         // Do nothing
@@ -224,10 +233,17 @@ public class CallHierarchyUI {
 			return null;
 		}
         IWorkbenchPage page= window.getActivePage();
-        try {
-            CallHierarchyViewPart result= (CallHierarchyViewPart)page.showView(CallHierarchyViewPart.ID_CALL_HIERARCHY);
-            result.setInputElements(input);
-            return result;
+		try {
+			CallHierarchyViewPart viewPart= getDefault().findLRUCallHierarchyViewPart(page); //find the first view which is not pinned
+			String secondaryId= null;
+			if (viewPart == null) {
+				if (page.findViewReference(CallHierarchyViewPart.ID_CALL_HIERARCHY) != null) //all the current views are pinned, open a new instance
+					secondaryId= String.valueOf(++getDefault().fViewCount);
+			} else
+				secondaryId= viewPart.getViewSite().getSecondaryId();
+			viewPart= (CallHierarchyViewPart)page.showView(CallHierarchyViewPart.ID_CALL_HIERARCHY, secondaryId, IWorkbenchPage.VIEW_ACTIVATE);
+			viewPart.setInputElements(input);
+			return viewPart;
         } catch (CoreException e) {
             ExceptionHandler.handle(e, window.getShell(),
                 CallHierarchyMessages.CallHierarchyUI_error_open_view, e.getMessage());
@@ -235,6 +251,61 @@ public class CallHierarchyUI {
         return null;
     }
 
+	/**
+	 * Finds the first Call Hierarchy view part instance that is not pinned.
+	 * 
+	 * @param page the active page
+	 * @return the Call Hierarchy view part to open or <code>null</code> if none found
+	 * @since 3.7
+	 */
+	private CallHierarchyViewPart findLRUCallHierarchyViewPart(IWorkbenchPage page) {
+		boolean viewFoundInPage= false;
+		for (Iterator<CallHierarchyViewPart> iter= fLRUCallHierarchyViews.iterator(); iter.hasNext();) {
+			CallHierarchyViewPart view= iter.next();
+			if (page.equals(view.getSite().getPage())) {
+				if (!view.isPinned()) {
+					return view;
+				}
+				viewFoundInPage= true;
+			}
+		}
+		if (!viewFoundInPage) {
+			// find unresolved views
+			IViewReference[] viewReferences= page.getViewReferences();
+			for (int i= 0; i < viewReferences.length; i++) {
+				IViewReference curr= viewReferences[i];
+				if (CallHierarchyViewPart.ID_CALL_HIERARCHY.equals(curr.getId()) && page.equals(curr.getPage())) {
+					CallHierarchyViewPart view= (CallHierarchyViewPart)curr.getView(true);
+					if (view != null && !view.isPinned()) {
+						return view;
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Adds the activated view part to the head of the list.
+	 * 
+	 * @param view the Call Hierarchy view part
+	 * @since 3.7
+	 */
+	void callHierarchyViewActivated(CallHierarchyViewPart view) {
+		fLRUCallHierarchyViews.remove(view);
+		fLRUCallHierarchyViews.add(0, view);
+	}
+
+	/**
+	 * Removes the closed view part from the list.
+	 * 
+	 * @param view the closed view part
+	 * @since 3.7
+	 */
+	void callHierarchyViewClosed(CallHierarchyViewPart view) {
+		fLRUCallHierarchyViews.remove(view);
+	}
+
     /**
      * Converts an ISelection (containing MethodWrapper instances) to an ISelection
      * with the MethodWrapper's replaced by their corresponding IMembers. If the selection
@@ -250,8 +321,8 @@ public class CallHierarchyUI {
 
         if (selection instanceof IStructuredSelection) {
             IStructuredSelection structuredSelection= (IStructuredSelection) selection;
-            List javaElements= new ArrayList();
-            for (Iterator iter= structuredSelection.iterator(); iter.hasNext();) {
+            List<IMember> javaElements= new ArrayList<IMember>();
+            for (Iterator<?> iter= structuredSelection.iterator(); iter.hasNext();) {
                 Object element= iter.next();
                 if (element instanceof MethodWrapper) {
                     IMember member= ((MethodWrapper)element).getMember();
@@ -259,7 +330,7 @@ public class CallHierarchyUI {
                         javaElements.add(member);
                     }
                 } else if (element instanceof IMember) {
-                    javaElements.add(element);
+                    javaElements.add((IMember) element);
                 } else if (element instanceof CallLocation) {
                     IMember member = ((CallLocation) element).getMember();
                     javaElements.add(member);
@@ -269,4 +340,27 @@ public class CallHierarchyUI {
         }
         return StructuredSelection.EMPTY;
     }
+
+	/**
+	 * Clears the history and updates all the open views.
+	 * 
+	 * @since 3.7
+	 */
+	void clearHistory() {
+		for (Iterator<CallHierarchyViewPart> iter= fLRUCallHierarchyViews.iterator(); iter.hasNext();) {
+			CallHierarchyViewPart part= iter.next();
+			part.setHistoryEntries(new IMember[0][]);
+			part.setInputElements(null);
+		}
+	}
+
+	/**
+	 * Returns the method history.
+	 * 
+	 * @return the method history
+	 * @since 3.7
+	 */
+	List<IMember[]> getMethodHistory() {
+		return fMethodHistory;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java
index 84228ef..804a1ed 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.TreeItem;
 
 import org.eclipse.core.runtime.Assert;
 
@@ -64,7 +65,9 @@ import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IViewReference;
 import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPartReference;
 import org.eclipse.ui.IWorkbenchPartSite;
@@ -74,6 +77,7 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.ActionContext;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.navigator.ICommonMenuConstants;
 import org.eclipse.ui.part.IShowInSource;
 import org.eclipse.ui.part.IShowInTargetList;
 import org.eclipse.ui.part.PageBook;
@@ -81,6 +85,7 @@ import org.eclipse.ui.part.PluginTransfer;
 import org.eclipse.ui.part.ResourceTransfer;
 import org.eclipse.ui.part.ShowInContext;
 import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
 import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
 
 import org.eclipse.ui.texteditor.ITextEditor;
@@ -115,7 +120,6 @@ import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
 import org.eclipse.jdt.internal.ui.packageview.FileTransferDragAdapter;
 import org.eclipse.jdt.internal.ui.packageview.PluginTransferDropAdapter;
 import org.eclipse.jdt.internal.ui.packageview.SelectionTransferDragAdapter;
-import org.eclipse.jdt.internal.ui.refactoring.reorg.PasteAction;
 import org.eclipse.jdt.internal.ui.util.JavaUIHelp;
 import org.eclipse.jdt.internal.ui.util.SelectionUtil;
 import org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator;
@@ -139,6 +143,7 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.SelectionProviderMediator#getSelection()
 		 */
+		@Override
 		public ISelection getSelection() {
 			ISelection selection= super.getSelection();
 			if (!selection.isEmpty()) {
@@ -157,19 +162,22 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 			super(viewer);
 		}
 
+		@Override
 		protected void activate(ISelection selection) {
 			final Object selectedElement= SelectionUtil.getSingleElement(selection);
 			if (selectedElement != null)
 				CallHierarchyUI.openInEditor(selectedElement, getSite().getShell(), true);
 		}
 
+		@Override
 		protected void linkToEditor(ISelection selection) {
 			// not supported by this part
 		}
 
+		@Override
 		protected void open(ISelection selection, boolean activate) {
 			if (selection instanceof IStructuredSelection) {
-				for (Iterator iter= ((IStructuredSelection)selection).iterator(); iter.hasNext();) {
+				for (Iterator<?> iter= ((IStructuredSelection)selection).iterator(); iter.hasNext();) {
 					boolean noError= CallHierarchyUI.openInEditor(iter.next(), getSite().getShell(), OpenStrategy.activateOnOpen());
 					if (!noError)
 						return;
@@ -212,7 +220,6 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
     private IMemento fMemento;
     private IMember[] fInputElements;
     private CallHierarchySelectionProvider fSelectionProviderMediator;
-    private final List/*<IMember[]>*/ fMethodHistory;
     private LocationViewer fLocationViewer;
     private SashForm fHierarchyLocationSplitter;
     private Clipboard fClipboard;
@@ -231,11 +238,14 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
     private CancelSearchAction fCancelSearchAction;
     private ExpandWithConstructorsAction fExpandWithConstructorsAction;
     private RemoveFromViewAction fRemoveFromViewAction;
+    private ShowSearchInDialogAction fShowSearchInDialogAction;
     private CompositeActionGroup fActionGroups;
     private CallHierarchyViewer fCallHierarchyViewer;
     private boolean fShowCallDetails;
 	protected Composite fParent;
 	private IPartListener2 fPartListener;
+	private boolean fIsPinned;
+	private PinCallHierarchyViewAction fPinViewAction;
 
 
     public CallHierarchyViewPart() {
@@ -243,10 +253,11 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 
         fDialogSettings = JavaPlugin.getDefault().getDialogSettings();
 
-        fMethodHistory = new ArrayList();
+        fIsPinned= false;
     }
 
-    public void setFocus() {
+    @Override
+	public void setFocus() {
         fPagebook.setFocus();
     }
 
@@ -255,10 +266,10 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
      * @param entries the new history entries
      */
     public void setHistoryEntries(IMember[][] entries) {
-        fMethodHistory.clear();
+        getMethodHistory().clear();
 
         for (int i = 0; i < entries.length; i++) {
-            fMethodHistory.add(entries[i]);
+            getMethodHistory().add(entries[i]);
         }
 
         updateHistoryEntries();
@@ -269,11 +280,11 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
      * @return all history entries
      */
     public IMember[][] getHistoryEntries() {
-        if (fMethodHistory.size() > 0) {
+        if (getMethodHistory().size() > 0) {
             updateHistoryEntries();
         }
 
-        return (IMember[][]) fMethodHistory.toArray(new IMember[fMethodHistory.size()][]);
+        return getMethodHistory().toArray(new IMember[getMethodHistory().size()][]);
     }
 
     public void setInputElements(IMember[] members) {
@@ -387,8 +398,15 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         }
     }
 
-    public IJavaSearchScope getSearchScope() {
-        return fSearchScopeActions.getSearchScope();
+	/**
+	 * Fetches the search scope with the appropriate include mask.
+	 * 
+	 * @param includeMask the include mask
+	 * @return the search scope with the appropriate include mask
+	 * @since 3.7
+	 */
+    public IJavaSearchScope getSearchScope(int includeMask) {
+        return fSearchScopeActions.getSearchScope(includeMask);
     }
 
     public void setShowCallDetails(boolean show) {
@@ -424,6 +442,7 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 		Transfer[] transfers= new Transfer[] { LocalSelectionTransfer.getInstance(), ResourceTransfer.getInstance(), FileTransfer.getInstance()};
 
 		DelegatingDragAdapter dragAdapter= new DelegatingDragAdapter() {
+			@Override
 			public void dragStart(DragSourceEvent event) {
 				IStructuredSelection selection= (IStructuredSelection) fSelectionProviderMediator.getSelection();
 				if (selection.isEmpty()) {
@@ -441,7 +460,8 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 		viewer.addDragSupport(ops, transfers, dragAdapter);
 	}
 
-    public void createPartControl(Composite parent) {
+    @Override
+	public void createPartControl(Composite parent) {
     	fParent= parent;
     	addResizeListener(parent);
         fPagebook = new PageBook(parent, SWT.NONE);
@@ -510,23 +530,56 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 		}
 	}
 
+	/**
+	 * Tells whether the given part reference references this view.
+	 * 
+	 * @param partRef the workbench part reference
+	 * @return <code>true</code> if the given part reference references this view
+	 * @since 3.7
+	 */
+	private boolean isThisView(IWorkbenchPartReference partRef) {
+		if (!ID_CALL_HIERARCHY.equals(partRef.getId()))
+			return false;
+		String partRefSecondaryId= ((IViewReference)partRef).getSecondaryId();
+		String thisSecondaryId= getViewSite().getSecondaryId();
+		return thisSecondaryId == null && partRefSecondaryId == null || thisSecondaryId != null && thisSecondaryId.equals(partRefSecondaryId);
+	}
+
 	private void addPartListener() {
 		fPartListener= new IPartListener2() {
-					public void partActivated(IWorkbenchPartReference partRef) { }
-					public void partBroughtToTop(IWorkbenchPartReference partRef) { }
-					public void partClosed(IWorkbenchPartReference partRef) {
-						if (ID_CALL_HIERARCHY.equals(partRef.getId()))
-							saveViewSettings();
-					}
-					public void partDeactivated(IWorkbenchPartReference partRef) {
-						if (ID_CALL_HIERARCHY.equals(partRef.getId()))
-							saveViewSettings();
-					}
-					public void partOpened(IWorkbenchPartReference partRef) { }
-					public void partHidden(IWorkbenchPartReference partRef) { }
-					public void partVisible(IWorkbenchPartReference partRef) { }
-					public void partInputChanged(IWorkbenchPartReference partRef) { }
-				};
+			/* (non-Javadoc)
+			 * @see org.eclipse.ui.IPartListener2#partActivated(org.eclipse.ui.IWorkbenchPartReference)
+			 */
+			public void partActivated(IWorkbenchPartReference partRef) {
+				if (isThisView(partRef))
+					CallHierarchyUI.getDefault().callHierarchyViewActivated(CallHierarchyViewPart.this);
+			}
+
+			public void partBroughtToTop(IWorkbenchPartReference partRef) { }
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.ui.IPartListener2#partClosed(org.eclipse.ui.IWorkbenchPartReference)
+			 */
+			public void partClosed(IWorkbenchPartReference partRef) {
+				if (isThisView(partRef)) {
+					CallHierarchyUI.getDefault().callHierarchyViewClosed(CallHierarchyViewPart.this);
+					saveViewSettings();
+				}
+			}
+
+			/* (non-Javadoc)
+			 * @see org.eclipse.ui.IPartListener2#partDeactivated(org.eclipse.ui.IWorkbenchPartReference)
+			 */
+			public void partDeactivated(IWorkbenchPartReference partRef) {
+				if (isThisView(partRef))
+					saveViewSettings();
+			}
+
+			public void partOpened(IWorkbenchPartReference partRef) { }
+			public void partHidden(IWorkbenchPartReference partRef) { }
+			public void partVisible(IWorkbenchPartReference partRef) { }
+			public void partInputChanged(IWorkbenchPartReference partRef) { }
+		};
 		getViewSite().getPage().addPartListener(fPartListener);
 	}
 
@@ -567,9 +620,17 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
     private void showPage(int page) {
 		boolean isEmpty= page == PAGE_EMPTY;
 		Control control= isEmpty ? (Control) fNoHierarchyShownLabel : fHierarchyLocationSplitter;
+		if (isEmpty) {
+			setContentDescription(""); //$NON-NLS-1$
+			setTitleToolTip(getPartName());
+			getViewSite().getActionBars().getStatusLineManager().setMessage(""); //$NON-NLS-1$
+			getViewer().clearViewer();
+		}
 		fPagebook.showPage(control);
 		if (fRefreshViewAction != null)
 			fRefreshViewAction.setEnabled(!isEmpty);
+		if (fRefreshSingleElementAction != null)
+			fRefreshSingleElementAction.setEnabled(!isEmpty);
     }
 
     /**
@@ -666,32 +727,31 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         	fieldSubMenu.add(fToggleFieldModeActions[i]);
         }
         viewMenu.add(fieldSubMenu);
+        viewMenu.add(fShowSearchInDialogAction);
     }
 
-    /**
-     *
-     */
-    public void dispose() {
-        if (fActionGroups != null)
-            fActionGroups.dispose();
+	@Override
+	public void dispose() {
+		if (fActionGroups != null)
+			fActionGroups.dispose();
 
 		if (fClipboard != null)
-	        fClipboard.dispose();
+			fClipboard.dispose();
 
 		if (fPartListener != null) {
 			getViewSite().getPage().removePartListener(fPartListener);
 			fPartListener= null;
 		}
-        super.dispose();
-    }
+		super.dispose();
+	}
 
     /**
      * Goes to the selected entry, without updating the order of history entries.
      * @param entry the history entry
      */
     public void gotoHistoryEntry(IMember[] entry) {
-    	for (Iterator iter= fMethodHistory.iterator(); iter.hasNext(); ) {
-			if (Arrays.equals(entry, (IMember[]) iter.next())) {
+    	for (Iterator<IMember[]> iter= getMethodHistory().iterator(); iter.hasNext(); ) {
+			if (Arrays.equals(entry, iter.next())) {
 				setInputElements(entry);
 				return;
 			}
@@ -701,7 +761,8 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
     /* (non-Javadoc)
      * Method declared on IViewPart.
      */
-    public void init(IViewSite site, IMemento memento)
+    @Override
+	public void init(IViewSite site, IMemento memento)
         throws PartInitException {
         super.init(site, memento);
         fMemento = memento;
@@ -717,7 +778,8 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         updateView();
     }
 
-    public void saveState(IMemento memento) {
+    @Override
+	public void saveState(IMemento memento) {
         if (fPagebook == null) {
             // part has not been created
             if (fMemento != null) { //Keep the old state;
@@ -801,7 +863,8 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
     /**
 	 * {@inheritDoc}
 	 */
-    public Object getAdapter(Class adapter) {
+    @Override
+	public Object getAdapter(Class adapter) {
     	if (adapter == IShowInSource.class) {
     		return getShowInSource();
     	}
@@ -845,9 +908,7 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         JavaPlugin.createStandardGroups(menu);
 
         menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, fOpenLocationAction);
-		if (fRefreshSingleElementAction.canActionBeAdded()) {
-			menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, fRefreshSingleElementAction);
-		}
+		menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, fRefreshSingleElementAction);
         menu.appendToGroup(IContextMenuConstants.GROUP_REORGANIZE, fLocationCopyAction);
     }
 
@@ -893,13 +954,38 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
      * @param entry the entry to add
      */
     private void addHistoryEntry(IMember[] entry) {
-    	for (Iterator iter= fMethodHistory.iterator(); iter.hasNext(); ) {
-			if (Arrays.equals(entry, (IMember[]) iter.next())) {
+
+		updateHistoryEntries(entry, entry);
+    }
+
+	/**
+	 * Updates the input, history and description for the new input.
+	 * 
+	 * @param currentInput the current input
+	 * @param entry the new input elements
+	 * @since 3.7
+	 */
+	void updateInputHistoryAndDescription(IMember[] currentInput, IMember[] entry) {
+		updateHistoryEntries(currentInput, entry);
+		fInputElements= entry;
+		setContentDescription(getIncludeMask());
+	}
+
+	/**
+	 * Updates the history with the latest input.
+	 * 
+	 * @param currentInput the current input
+	 * @param entry the new input elements
+	 * @since 3.7
+	 */
+	private void updateHistoryEntries(IMember[] currentInput, IMember[] entry) {
+		for (Iterator<IMember[]> iter= getMethodHistory().iterator(); iter.hasNext();) {
+			if (Arrays.equals(currentInput, iter.next())) {
 				iter.remove();
 			}
 		}
 
-        fMethodHistory.add(0, entry);
+        getMethodHistory().add(0, entry);
         fHistoryDropDownAction.setEnabled(true);
     }
 
@@ -927,9 +1013,7 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
     protected void fillCallHierarchyViewerContextMenu(IMenuManager menu) {
         JavaPlugin.createStandardGroups(menu);
 
-		if (fRefreshSingleElementAction.canActionBeAdded()) {
-			menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, fRefreshSingleElementAction);
-		}
+		menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, fRefreshSingleElementAction);
         menu.appendToGroup(IContextMenuConstants.GROUP_SHOW, new Separator(GROUP_FOCUS));
 
         if (fFocusOnSelectionAction.canActionBeAdded()) {
@@ -948,13 +1032,14 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         fActionGroups.setContext(null);
 
 		if (fCopyAction.canActionBeAdded()) {
-			menu.insertBefore(PasteAction.ID, fCopyAction);
+			menu.appendToGroup(ICommonMenuConstants.GROUP_EDIT, fCopyAction);
 		}
     }
 
     private void fillActionBars() {
         IActionBars actionBars = getActionBars();
 		actionBars.setGlobalActionHandler(ActionFactory.REFRESH.getId(), fRefreshSingleElementAction);
+		actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), fRemoveFromViewAction);
 
         IToolBarManager toolBar = actionBars.getToolBarManager();
 
@@ -966,11 +1051,9 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
             toolBar.add(fToggleCallModeActions[i]);
         }
         toolBar.add(fHistoryDropDownAction);
+        toolBar.add(fPinViewAction);
     }
 
-    /**
-     *
-     */
     private void makeActions() {
         fRefreshViewAction = new RefreshViewAction(this);
         fRefreshSingleElementAction= new RefreshElementAction(fCallHierarchyViewer);
@@ -983,6 +1066,7 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         fFocusOnSelectionAction = new FocusOnSelectionAction(this);
         fCopyAction= new CopyCallHierarchyAction(this, fClipboard, fCallHierarchyViewer);
         fSearchScopeActions = new SearchScopeActionGroup(this, fDialogSettings);
+        fShowSearchInDialogAction= new ShowSearchInDialogAction(this, fCallHierarchyViewer);
         fFiltersActionGroup = new CallHierarchyFiltersActionGroup(this,
                 fCallHierarchyViewer);
         fHistoryDropDownAction = new HistoryDropDownAction(this);
@@ -991,12 +1075,14 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         setCancelEnabled(false);
         fExpandWithConstructorsAction= new ExpandWithConstructorsAction(this, fCallHierarchyViewer);
         fRemoveFromViewAction= new RemoveFromViewAction(this, fCallHierarchyViewer);
+        fPinViewAction= new PinCallHierarchyViewAction(this);
         fToggleOrientationActions = new ToggleOrientationAction[] {
                 new ToggleOrientationAction(this, VIEW_ORIENTATION_VERTICAL),
                 new ToggleOrientationAction(this, VIEW_ORIENTATION_HORIZONTAL),
                 new ToggleOrientationAction(this, VIEW_ORIENTATION_AUTOMATIC),
                 new ToggleOrientationAction(this, VIEW_ORIENTATION_SINGLE)
             };
+		fRemoveFromViewAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_DELETE);
         fToggleCallModeActions = new ToggleCallModeAction[] {
                 new ToggleCallModeAction(this, CALL_MODE_CALLERS),
                 new ToggleCallModeAction(this, CALL_MODE_CALLEES)
@@ -1009,7 +1095,7 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
         fActionGroups = new CompositeActionGroup(new ActionGroup[] {
                     new OpenEditorActionGroup(this),
                     new OpenViewActionGroup(this),
-                    new CCPActionGroup(this),
+					new CCPActionGroup(this, true),
                     new GenerateActionGroup(this),
                     new RefactorActionGroup(this),
                     new JavaSearchActionGroup(this),
@@ -1034,31 +1120,33 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
     }
 
     private void updateHistoryEntries() {
-        for (int i = fMethodHistory.size() - 1; i >= 0; i--) {
-            IMember[] members = (IMember[]) fMethodHistory.get(i);
+        for (int i = getMethodHistory().size() - 1; i >= 0; i--) {
+            IMember[] members = getMethodHistory().get(i);
             for (int j= 0; j < members.length; j++) {
 				IMember member= members[j];
 				if (! member.exists()) {
-					fMethodHistory.remove(i);
+					getMethodHistory().remove(i);
 					break;
 				}
 			}
         }
 
-        fHistoryDropDownAction.setEnabled(!fMethodHistory.isEmpty());
+        fHistoryDropDownAction.setEnabled(!getMethodHistory().isEmpty());
     }
 
 	private void updateView() {
 		if (fInputElements != null) {
 			showPage(PAGE_VIEWER);
 
-			CallHierarchy.getDefault().setSearchScope(getSearchScope());
+			int includeMask= getIncludeMask();
+			CallHierarchy.getDefault().setSearchScope(getSearchScope(includeMask));
 
 			// set input to null so that setComparator does not cause a refresh on the old contents:
 			fCallHierarchyViewer.setInput(null);
 			if (fCurrentCallMode == CALL_MODE_CALLERS) {
 				// sort caller hierarchy alphabetically (bug 111423) and make RealCallers the last in 'Expand With Constructors' mode
 				fCallHierarchyViewer.setComparator(new ViewerComparator() {
+					@Override
 					public int category(Object element) {
 						return element instanceof RealCallers ? 1 : 0;
 					}
@@ -1068,13 +1156,42 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 				fCallHierarchyViewer.setComparator(null);
 				fCallHierarchyViewer.setMethodWrappers(getCalleeRoots());
 			}
-			setContentDescription(computeContentDescription());
+			setContentDescription(includeMask);
 		}
     }
 
-	private String computeContentDescription() {
+	/**
+	 * Sets the content description.
+	 * 
+	 * @param includeMask the include mask
+	 * @since 3.7
+	 */
+	private void setContentDescription(int includeMask) {
+		setContentDescription(computeContentDescription(includeMask));
+	}
+
+
+
+	/**
+	 * Gets the include mask.
+	 * 
+	 * @return the include mask
+	 * @since 3.7
+	 */
+	private int getIncludeMask() {
+		return fShowSearchInDialogAction.getSearchInDialog().getIncludeMask();
+	}
+
+	/**
+	 * Computes the content description for the call hierarchy computation.
+	 * 
+	 * @param includeMask the include mask
+	 * @return the content description
+	 * @since 3.7
+	 */
+	private String computeContentDescription(int includeMask) {
 		// see also HistoryAction.getElementLabel(IMember[])
-		String scopeDescription= fSearchScopeActions.getFullDescription();
+		String scopeDescription= fSearchScopeActions.getFullDescription(includeMask);
 
 		if (fInputElements.length == 1) {
 			IMember element= fInputElements[0];
@@ -1120,13 +1237,9 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 		        		return Messages.format(CallHierarchyMessages.CallHierarchyViewPart_callsToMembers_2,
 		        				new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), scopeDescription });
 
-		        	case 3:
-		        		return Messages.format(CallHierarchyMessages.CallHierarchyViewPart_callsToMembers_3,
-		        				new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), getShortLabel(fInputElements[2]), scopeDescription });
-
 		        	default:
 		        		return Messages.format(CallHierarchyMessages.CallHierarchyViewPart_callsToMembers_more,
-		        				new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), getShortLabel(fInputElements[2]), scopeDescription });
+		        				new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), scopeDescription });
 				}
 			} else {
 				switch (fInputElements.length) {
@@ -1137,13 +1250,9 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 						return Messages.format(CallHierarchyMessages.CallHierarchyViewPart_callsFromMembers_2,
 								new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), scopeDescription });
 
-					case 3:
-						return Messages.format(CallHierarchyMessages.CallHierarchyViewPart_callsFromMembers_3,
-								new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), getShortLabel(fInputElements[2]), scopeDescription });
-
 					default:
 						return Messages.format(CallHierarchyMessages.CallHierarchyViewPart_callsFromMembers_more,
-								new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), getShortLabel(fInputElements[2]), scopeDescription });
+								new String[] { getShortLabel(fInputElements[0]), getShortLabel(fInputElements[1]), scopeDescription });
 				}
 			}
 		}
@@ -1201,4 +1310,120 @@ public class CallHierarchyViewPart extends ViewPart implements ICallHierarchyVie
 	protected LocationViewer getLocationViewer() {
 		return fLocationViewer;
 	}
+
+	/**
+	 * Marks the view as pinned.
+	 * 
+	 * @param pinned if <code>true</code> the view is marked as pinned
+	 * @since 3.7
+	 */
+	void setPinned(boolean pinned) {
+		fIsPinned= pinned;
+	}
+
+	/**
+	 * Indicates whether the Call Hierarchy view is pinned.
+	 * 
+	 * @return <code>true</code> if the view is pinned, <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	boolean isPinned() {
+		return fIsPinned;
+	}
+
+	/**
+	 * Returns the method history.
+	 * 
+	 * @return the method history
+	 * @since 3.7
+	 */
+	private List<IMember[]>getMethodHistory() {
+		return CallHierarchyUI.getDefault().getMethodHistory();
+	}
+
+	/*
+	 * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
+	 * @since 3.7
+	 */
+	@Override
+	public void showBusy(boolean busy) {
+		super.showBusy(busy);
+		if (!busy)
+			getProgressService().warnOfContentChange();
+	}
+
+	/**
+	 * Fetches the progress service for the workbench part site.
+	 * 
+	 * @return the progress service for the workbench part site
+	 * @since 3.7
+	 */
+	private IWorkbenchSiteProgressService getProgressService() {
+		IWorkbenchSiteProgressService service= null;
+		Object siteService= getSite().getAdapter(IWorkbenchSiteProgressService.class);
+		if (siteService != null)
+			service= (IWorkbenchSiteProgressService)siteService;
+		return service;
+	}
+
+	/**
+	 * Adds the new input elements to the current list.
+	 * 
+	 * @param newElements the new input elements to add
+	 * @since 3.7
+	 */
+	void addInputElements(IMember[] newElements) {
+		// Caveat: RemoveFromViewAction#run() disposes TreeItems. When we add a previously removed element,
+		// we have to consider the real Tree state, not only fInputElements.
+		
+		List<IMember> inputElements= Arrays.asList(fInputElements);
+		List<IMember> treeElements= new ArrayList<IMember>();
+		TreeItem[] treeItems= fCallHierarchyViewer.getTree().getItems();
+		for (int i= 0; i < treeItems.length; i++) {
+			Object data= treeItems[i].getData();
+			if (data instanceof MethodWrapper)
+				treeElements.add(((MethodWrapper) data).getMember());
+		}
+		
+		List<IMember> newInput= new ArrayList<IMember>();
+		newInput.addAll(inputElements);
+		List<IMember> addedElements= new ArrayList<IMember>();
+		
+		for (int i= 0; i < newElements.length; i++) {
+			IMember newElement= newElements[i];
+			if (! inputElements.contains(newElement))
+				newInput.add(newElement);
+			if (! treeElements.contains(newElement))
+				addedElements.add(newElement);
+		}
+		if (treeElements.size() == 0)
+			updateInputHistoryAndDescription(fInputElements, newElements);
+		else if (newInput.size() > fInputElements.length)
+			updateInputHistoryAndDescription(fInputElements, newInput.toArray(new IMember[newInput.size()]));
+		if (addedElements.size() > 0)
+			updateViewWithAddedElements(addedElements.toArray(new IMember[addedElements.size()]));
+	}
+
+	/**
+	 * Updates the view with the newly added input elements.
+	 * 
+	 * @param newElements the newly added elements
+	 * @since 3.7
+	 */
+	private void updateViewWithAddedElements(IMember[] newElements) {
+		setCalleeRoots(null);
+		setCallerRoots(null);
+		MethodWrapper[] roots;
+		if (getCallMode() == CALL_MODE_CALLERS)
+			roots= CallHierarchy.getDefault().getCallerRoots(newElements);
+		else
+			roots= CallHierarchy.getDefault().getCalleeRoots(newElements);
+		CallHierarchyViewer hierarchyViewer= getViewer();		
+		TreeRoot treeRoot= hierarchyViewer.getTreeRoot(roots, true);
+		hierarchyViewer.add(treeRoot, roots);
+		for (int i= 0; i < roots.length; i++) {
+			hierarchyViewer.setExpandedState(roots[i], true);
+		}
+		hierarchyViewer.setSelection(new StructuredSelection(roots), true);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java
index 9756237..dcdde3f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.jdt.internal.ui.callhierarchy;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.TreeEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
@@ -26,6 +27,7 @@ import org.eclipse.jface.viewers.TreeViewer;
 
 import org.eclipse.ui.IWorkbenchPartSite;
 
+import org.eclipse.jdt.internal.corext.callhierarchy.CallerMethodWrapper;
 import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;
 
 import org.eclipse.jdt.internal.ui.viewsupport.ColoringLabelProvider;
@@ -33,9 +35,12 @@ import org.eclipse.jdt.internal.ui.viewsupport.ColoringLabelProvider;
 
 class CallHierarchyViewer extends TreeViewer {
 
-	private CallHierarchyViewPart fPart;
-	private CallHierarchyContentProvider fContentProvider;
+	private final CallHierarchyViewPart fPart;
+	private final CallHierarchyContentProvider fContentProvider;
 
+	private CallerMethodWrapper fConstructorToExpand;
+
+	private TreeRoot fDummyRoot;
 
     /**
      * @param parent the parent composite
@@ -63,6 +68,7 @@ class CallHierarchyViewer extends TreeViewer {
         setFocus();
         if (wrappers != null && wrappers.length > 0)
         	setSelection(new StructuredSelection(wrappers[0]), true);
+		expandConstructorNode();
     }
 
     CallHierarchyViewPart getPart() {
@@ -92,10 +98,27 @@ class CallHierarchyViewer extends TreeViewer {
      * @return A new TreeRoot which is a dummy root above the specified root.
      */
     private TreeRoot getTreeRoot(MethodWrapper[] roots) {
-        TreeRoot dummyRoot = new TreeRoot(roots);
-
-        return dummyRoot;
-    }
+		return getTreeRoot(roots, false);
+	}
+
+
+	/**
+	 * Wraps the roots of a MethodWrapper tree in a dummy root in order to show it in the tree.
+	 * 
+	 * @param roots The visible roots of the MethodWrapper tree.
+	 * @param addRoots <code>true</code> if the roots need to be added to the existing roots,
+	 *            <code>false</code> otherwise
+	 * @return a new TreeRoot which is a dummy root above the specified root
+	 * @since 3.7
+	 */
+	TreeRoot getTreeRoot(MethodWrapper[] roots, boolean addRoots) {
+		if (fDummyRoot == null || !addRoots)
+			fDummyRoot= new TreeRoot(roots);
+		else
+			fDummyRoot.addRoots(roots);
+
+		return fDummyRoot;
+	}
 
     /**
      * Attaches a context menu listener to the tree
@@ -114,6 +137,7 @@ class CallHierarchyViewer extends TreeViewer {
 
     void clearViewer() {
         setInput(TreeRoot.EMPTY_ROOT);
+		fDummyRoot= null;
     }
 
     void cancelJobs() {
@@ -122,4 +146,55 @@ class CallHierarchyViewer extends TreeViewer {
         fContentProvider.cancelJobs(fPart.getCurrentMethodWrappers());
     }
 
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @since 3.7
+	 */
+	@Override
+	protected Object[] getSortedChildren(Object parentElementOrTreePath) {
+		Object[] sortedChildren= super.getSortedChildren(parentElementOrTreePath);
+		if (parentElementOrTreePath instanceof CallerMethodWrapper) {
+			CallerMethodWrapper parentWrapper= (CallerMethodWrapper)parentElementOrTreePath;
+			if (parentWrapper.getExpandWithConstructors() && sortedChildren.length == 2 && sortedChildren[0] instanceof CallerMethodWrapper) {
+				setConstructorToExpand((CallerMethodWrapper)sortedChildren[0]);
+			}
+		}
+		return sortedChildren;
+	}
+
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @since 3.7
+	 */
+	@Override
+	protected void handleTreeExpand(TreeEvent event) {
+		super.handleTreeExpand(event);
+		expandConstructorNode();
+	}
+
+	/**
+	 * Sets the constructor node.
+	 * 
+	 * @param wrapper the constructor caller method wrapper
+	 * @since 3.7
+	 */
+	private void setConstructorToExpand(CallerMethodWrapper wrapper) {
+		fConstructorToExpand= wrapper;
+		
+	}
+
+	/**
+	 * Expands the constructor node when in expand with constructors mode.
+	 * 
+	 * @since 3.7
+	 */
+	void expandConstructorNode() {
+		if (fConstructorToExpand != null) {
+			setExpandedState(fConstructorToExpand, true);
+			fConstructorToExpand= null;
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CancelSearchAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CancelSearchAction.java
index 6aa851a..b7fb2b5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CancelSearchAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CancelSearchAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class CancelSearchAction extends Action {
         PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_CANCEL_SEARCH_ACTION);
 }
 
+	@Override
 	public void run() {
 		fView.cancelJobs();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CopyCallHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CopyCallHierarchyAction.java
index 9c070ee..2da17e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CopyCallHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CopyCallHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ class CopyCallHierarchyAction extends Action {
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
 		StringBuffer buf= new StringBuffer();
 		addCalls(fViewer.getTree().getSelection()[0], 0, buf);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/DeferredMethodWrapper.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/DeferredMethodWrapper.java
index 2197b02..71a80cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/DeferredMethodWrapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/DeferredMethodWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,7 +83,9 @@ public class DeferredMethodWrapper extends MethodWrapperWorkbenchAdapter impleme
 			if (!CallHierarchyContentProvider.isExpandWithConstructors(methodWrapper)) {
 	        	Display.getDefault().asyncExec(new Runnable(){
 	        		public void run(){
-        				fProvider.collapseAndRefresh(methodWrapper);
+						CallHierarchyViewPart viewPart= fProvider.getViewPart();
+						if (viewPart != null && !viewPart.getViewer().getControl().isDisposed())
+							fProvider.collapseAndRefresh(methodWrapper);
 	        		}
 	        	});
         	}
@@ -117,7 +119,8 @@ public class DeferredMethodWrapper extends MethodWrapperWorkbenchAdapter impleme
      *
      * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
      */
-    public Object[] getChildren(Object o) {
+    @Override
+	public Object[] getChildren(Object o) {
         return this.fProvider.fetchChildren(((DeferredMethodWrapper) o).getMethodWrapper());
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsAction.java
index 4dbc690..34aaaa3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,12 +58,13 @@ class ExpandWithConstructorsAction extends Action {
 	/*
 	 * @see Action#run
 	 */
+	@Override
 	public void run() {
 		boolean isChecked= isChecked();
 		fCallHierarchyViewer.cancelJobs();
 
 		IStructuredSelection selection= (IStructuredSelection)getSelection();
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			CallerMethodWrapper member= (CallerMethodWrapper)iter.next();
 			member.setExpandWithConstructors(isChecked);
 			if (!isChecked) { // must collapse before refresh
@@ -72,6 +73,7 @@ class ExpandWithConstructorsAction extends Action {
 			fCallHierarchyViewer.refresh(member);
 			if (isChecked) { // expand only after refresh
 				fCallHierarchyViewer.setExpandedState(member, true);
+				fCallHierarchyViewer.expandConstructorNode();
 			}
 		}
 	}
@@ -101,7 +103,7 @@ class ExpandWithConstructorsAction extends Action {
 		IStructuredSelection structuredSelection= (IStructuredSelection)selection;
 		CallerMethodWrapper[] wrappers= new CallerMethodWrapper[structuredSelection.size()];
 		int i= 0;
-		for (Iterator iter= structuredSelection.iterator(); iter.hasNext(); i++) {
+		for (Iterator<?> iter= structuredSelection.iterator(); iter.hasNext(); i++) {
 			Object element= iter.next();
 			if (!(element instanceof CallerMethodWrapper) || element instanceof RealCallers)
 				return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsConfigurationBlock.java
index 21b7eef..15c6329 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,7 +108,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		/**
 		 * The list of previously existing entries.
 		 */
-		private List fExistingEntries;
+		private List<String> fExistingEntries;
 
 		/**
 		 * Tells whether it is an member or type.
@@ -122,7 +122,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		 * @param existingEntries the existing list of types and members
 		 * @param isEditingMember <code>true</code if its a member, <code>false</code> otherwise
 		 */
-		public CallHierarchyTypesOrMembersDialog(Shell parent, List existingEntries, boolean isEditingMember) {
+		public CallHierarchyTypesOrMembersDialog(Shell parent, List<String> existingEntries, boolean isEditingMember) {
 			super(parent);
 			fIsEditingMember= isEditingMember;
 			fExistingEntries= existingEntries;
@@ -149,6 +149,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		/*
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()		 *
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
@@ -181,6 +182,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		/*
 		 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite)super.createDialogArea(parent);
 			initializeDialogUnits(composite);
@@ -263,7 +265,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		 */
 		private boolean doesExist(String name) {
 			for (int i= 0; i < fExistingEntries.size(); i++) {
-				String entry= (String)fExistingEntries.get(i);
+				String entry= fExistingEntries.get(i);
 				if (name.equals(entry)) {
 					return true;
 				}
@@ -275,6 +277,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.CALL_HIERARCHY_EXPAND_WITH_CONSTRUCTORS_DIALOG);
@@ -285,6 +288,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		setValue(ANONYMOUS_EXPAND_WITH_CONSTRUCTORS, fIsAnonymous);
 		return super.performOk();
@@ -310,6 +314,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		/*
 		 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			return ((String)element).endsWith(WILDCARD) ? CLASS_ICON : MEMBER_ICON;
 		}
@@ -317,6 +322,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		/*
 		 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			return BasicElementLabels.getJavaElementName((String)element);
 		}
@@ -326,7 +332,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	/**
 	 * The change listener for <code>ListDialogField</code>.
 	 */
-	private class ListAdapter implements IListAdapter, IDialogFieldListener {
+	private class ListAdapter implements IListAdapter<String>, IDialogFieldListener {
 
 		/**
 		 * Checks if field can be edited.
@@ -334,22 +340,22 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		 * @param field the list dialog field
 		 * @return <code>true</code> if it can be edited, <code>false</code> otherwise
 		 */
-		private boolean canEdit(ListDialogField field) {
-			List selected= field.getSelectedElements();
+		private boolean canEdit(ListDialogField<String> field) {
+			List<String> selected= field.getSelectedElements();
 			return selected.size() == 1;
 		}
 
 		/*
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#customButtonPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField, int)
 		 */
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<String> field, int index) {
 			doButtonPressed(index);
 		}
 
 		/*
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#selectionChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<String> field) {
 			fList.enableButton(IDX_EDIT, canEdit(field));
 			fList.enableButton(IDX_REMOVE, canRemove(field));
 		}
@@ -360,8 +366,8 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		 * @param field the list dialog field
 		 * @return <code>true</code> if it can be removed, <code>false</code> otherwise
 		 */
-		private boolean canRemove(ListDialogField field) {
-			List selected= field.getSelectedElements();
+		private boolean canRemove(ListDialogField<String> field) {
+			List<String> selected= field.getSelectedElements();
 			return selected.size() != 0;
 		}
 
@@ -375,7 +381,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		/*
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#doubleClicked(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<String> field) {
 			if (canEdit(field)) {
 				doButtonPressed(IDX_EDIT);
 			}
@@ -390,7 +396,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	private static final int IDX_REMOVE= 3;
 	private static final int IDX_RESTORE_DEFAULTS= 4;
 
-	private ListDialogField fList;
+	private ListDialogField<String> fList;
 
 	private Button fAnonymousButton;
 
@@ -429,6 +435,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#createContents(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		Composite control= new Composite(parent, SWT.NONE);
 		GridLayout layout= new GridLayout();
@@ -445,6 +452,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 		fAnonymousButton.setSelection(fIsAnonymous);
 		fAnonymousButton.setLayoutData(new GridData(SWT.LEAD, SWT.TOP, false, false));
 		fAnonymousButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fIsAnonymous= fAnonymousButton.getSelection();
 			}
@@ -474,7 +482,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 
 		ListAdapter adapter= new ListAdapter();
 
-		fList= new ListDialogField(adapter, buttonLabels, new ListLabelProvider());
+		fList= new ListDialogField<String>(adapter, buttonLabels, new ListLabelProvider());
 		fList.setDialogFieldListener(adapter);
 		fList.setLabelText(CallHierarchyMessages.ExpandWithConstructorsConfigurationBlock_description);
 		fList.setRemoveButtonIndex(IDX_REMOVE);
@@ -505,6 +513,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#performDefaults()
 	 */
+	@Override
 	public void performDefaults() {
 		String str= PreferenceConstants.getPreferenceStore().getDefaultString(PreferenceConstants.PREF_DEFAULT_EXPAND_WITH_CONSTRUCTORS_MEMBERS);
 		fList.setElements(Arrays.asList(deserializeMembers(str)));
@@ -516,6 +525,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
 	 */
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		return null;
 	}
@@ -523,6 +533,7 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock.Key, java.lang.String, java.lang.String)
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 
 	}
@@ -535,19 +546,19 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	 */
 	private void doButtonPressed(int index) {
 		if (index == IDX_NEW_TYPE || index == IDX_NEW_MEMBER) { // add new
-			List existing= fList.getElements();
+			List<String> existing= fList.getElements();
 			CallHierarchyTypesOrMembersDialog dialog= new CallHierarchyTypesOrMembersDialog(getShell(), existing, index == IDX_NEW_MEMBER);
 			if (dialog.open() == Window.OK) {
 				fList.addElement(dialog.getResult());
 			}
 		} else if (index == IDX_EDIT) { // edit
-			List selected= fList.getSelectedElements();
+			List<String> selected= fList.getSelectedElements();
 			if (selected.isEmpty())
 				return;
 
-			String editedEntry= (String)selected.get(0);
+			String editedEntry= selected.get(0);
 
-			List existing= fList.getElements();
+			List<String> existing= fList.getElements();
 			existing.remove(editedEntry);
 			boolean isType= editedEntry.endsWith(WILDCARD);
 			CallHierarchyTypesOrMembersDialog dialog= new CallHierarchyTypesOrMembersDialog(getShell(), existing, !isType);
@@ -605,11 +616,11 @@ public class ExpandWithConstructorsConfigurationBlock extends OptionsConfigurati
 	 * @param list the input list of types and/or methods
 	 * @return the single output string from the list of strings using a delimiter
 	 */
-	public static String serializeMembers(List list) {
+	public static String serializeMembers(List<String> list) {
 		int size= list.size();
 		StringBuffer buf= new StringBuffer();
 		for (int i= 0; i < size; i++) {
-			buf.append((String)list.get(i));
+			buf.append(list.get(i));
 			if (i < size - 1)
 				buf.append(';');
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsDialog.java
index 36ad84d..ad3b817 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ExpandWithConstructorsDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ class ExpandWithConstructorsDialog extends TrayDialog {
 	/*
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -49,6 +50,7 @@ class ExpandWithConstructorsDialog extends TrayDialog {
 	/*
 	 * @see org.eclipse.jface.dialogs.StatusDialog#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		newShell.setText(CallHierarchyMessages.ExpandWithConstructorsDialog_title);
@@ -58,6 +60,7 @@ class ExpandWithConstructorsDialog extends TrayDialog {
 	/*
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite composite) {
 		fConfigurationBlock= new ExpandWithConstructorsConfigurationBlock(new IStatusChangeListener() {
 			public void statusChanged(IStatus status) {
@@ -76,6 +79,7 @@ class ExpandWithConstructorsDialog extends TrayDialog {
 	/*
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
+	@Override
 	protected void okPressed() {
 		fConfigurationBlock.performOk();
 		super.okPressed();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java
index 628c313..a773b78 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,6 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
-import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.StatusDialog;
 
 import org.eclipse.ui.PlatformUI;
@@ -49,28 +48,27 @@ class FiltersDialog extends StatusDialog {
     /* (non-Javadoc)
      * Method declared on Window.
      */
-    protected void configureShell(Shell newShell) {
+    @Override
+	protected void configureShell(Shell newShell) {
         super.configureShell(newShell);
         newShell.setText(CallHierarchyMessages.FiltersDialog_filter);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.CALL_HIERARCHY_FILTERS_DIALOG);
     }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+	protected boolean isResizable() {
+    	return true;
+    }
 
     /* (non-Javadoc)
      * Method declared on Dialog.
      */
-    protected Control createDialogArea(Composite parent) {
-        Composite superComposite = (Composite) super.createDialogArea(parent);
-
-        Composite composite = new Composite(superComposite, SWT.NONE);
-        composite.setFont(superComposite.getFont());
-        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-        GridLayout layout = new GridLayout();
-        layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-        layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-        layout.verticalSpacing= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
-        layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-        composite.setLayout(layout);
+    @Override
+	protected Control createDialogArea(Composite parent) {
+    	Composite composite= (Composite) super.createDialogArea(parent);
 
         createNamesArea(composite);
         new Label(composite, SWT.NONE);         // Filler
@@ -148,6 +146,7 @@ class FiltersDialog extends StatusDialog {
 
         button.setText(text);
         button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				validateInput();
 				updateEnabledState();
@@ -192,7 +191,8 @@ class FiltersDialog extends StatusDialog {
      * because after super.open() is called, the widgetry is disposed.
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
      */
-    protected void okPressed() {
+    @Override
+	protected void okPressed() {
         if (!isMaxCallDepthValid()) {
             if (fMaxCallDepth.forceFocus()) {
                 fMaxCallDepth.setSelection(0, fMaxCallDepth.getCharCount());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FocusOnSelectionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FocusOnSelectionAction.java
index 95a1006..aeebf9b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FocusOnSelectionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FocusOnSelectionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,6 +85,7 @@ class FocusOnSelectionAction extends Action {
 	/*
 	 * @see Action#run
 	 */
+	@Override
 	public void run() {
 		IMember[] members= getSelectedInputElements();
 		if (members != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryAction.java
index 1f838d4..da631f9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@ import org.eclipse.core.runtime.Assert;
 
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.StyledString;
 
 import org.eclipse.ui.PlatformUI;
 
@@ -32,9 +31,11 @@ import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
 
 class HistoryAction extends Action {
 
-	private static long LABEL_FLAGS= JavaElementLabels.ALL_POST_QUALIFIED | JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_APP_RETURNTYPE | JavaElementLabels.T_TYPE_PARAMETERS;
-	private static long LABEL_MULTI_FLAGS= 0L;
-
+	private static long LABEL_FLAGS= JavaElementLabels.ALL_POST_QUALIFIED
+			| JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_APP_RETURNTYPE
+			| JavaElementLabels.T_TYPE_PARAMETERS
+			| JavaElementLabels.P_COMPRESSED
+			| JavaElementLabels.COLORIZE;
 	private CallHierarchyViewPart fView;
 	private IMember[] fMembers;
 
@@ -54,27 +55,21 @@ class HistoryAction extends Action {
 	}
 
 	private static ImageDescriptor getImageDescriptor(IMember[] members) {
-		if (members.length == 1) {
-			JavaElementImageProvider imageProvider= new JavaElementImageProvider();
-			ImageDescriptor desc= imageProvider.getBaseImageDescriptor(members[0], 0);
-			imageProvider.dispose();
-			return desc;
-		} else {
-			return null;
-		}
+		JavaElementImageProvider imageProvider= new JavaElementImageProvider();
+		ImageDescriptor desc= imageProvider.getBaseImageDescriptor(members[0], 0);
+		imageProvider.dispose();
+		return desc;
+
 	}
 
 	/*
 	 * @see Action#run()
 	 */
+	@Override
 	public void run() {
 		fView.gotoHistoryEntry(fMembers);
 	}
 
-	static StyledString getSingleElementLabel(IMember member) {
-		return JavaElementLabels.getStyledElementLabel(member, LABEL_FLAGS | JavaElementLabels.COLORIZE);
-	}
-	
 	static String getElementLabel(IMember[] members) {
 		switch (members.length) {
         	case 0:
@@ -82,23 +77,20 @@ class HistoryAction extends Action {
         		return null;
 
         	case 1:
-        		return JavaElementLabels.getElementLabel(members[0], LABEL_FLAGS);
+				return Messages.format(CallHierarchyMessages.HistoryAction_inputElements_1,
+						new String[] { getShortLabel(members[0]) });
 
         	case 2:
         		return Messages.format(CallHierarchyMessages.HistoryAction_inputElements_2,
         				new String[] { getShortLabel(members[0]), getShortLabel(members[1]) });
 
-        	case 3:
-        		return Messages.format(CallHierarchyMessages.HistoryAction_inputElements_3,
-        				new String[] { getShortLabel(members[0]), getShortLabel(members[1]), getShortLabel(members[2]) });
-
         	default:
         		return Messages.format(CallHierarchyMessages.HistoryAction_inputElements_more,
-        				new String[] { getShortLabel(members[0]), getShortLabel(members[1]), getShortLabel(members[2]) });
+						new String[] { getShortLabel(members[0]), getShortLabel(members[1]) });
 		}
     }
 
 	private static String getShortLabel(IMember member) {
-		return JavaElementLabels.getElementLabel(member, LABEL_MULTI_FLAGS);
+		return JavaElementLabels.getElementLabel(member, LABEL_FLAGS);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryDropDownAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryDropDownAction.java
index 3432cc2..a280ae2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryDropDownAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryDropDownAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,16 +36,18 @@ class HistoryDropDownAction extends Action implements IMenuCreator {
 
 	private static class ClearHistoryAction extends Action {
 
-		private CallHierarchyViewPart fView;
-
+		/**
+		 * Creates a clear history action.
+		 * 
+		 * @param view the Call Hierarchy view part
+		 */
 		public ClearHistoryAction(CallHierarchyViewPart view) {
 			super(CallHierarchyMessages.HistoryDropDownAction_clearhistory_label);
-			fView= view;
 		}
 
+		@Override
 		public void run() {
-			fView.setHistoryEntries(new IMember[0][]);
-			fView.setInputElements(null);
+			CallHierarchyUI.getDefault().clearHistory();
 		}
 	}
 
@@ -110,7 +112,8 @@ class HistoryDropDownAction extends Action implements IMenuCreator {
         return checked;
     }
 
-    public void run() {
+    @Override
+	public void run() {
         new HistoryListAction(fView).run();
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryListAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryListAction.java
index dc01294..9cf1d6a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryListAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/HistoryListAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,7 +51,7 @@ public class HistoryListAction extends Action {
 
 	private class HistoryListDialog extends StatusDialog {
 
-		private ListDialogField fHistoryList;
+		private ListDialogField<IMember[]> fHistoryList;
 		private IStatus fHistoryStatus;
 		private IMember[] fResult;
 
@@ -63,15 +63,15 @@ public class HistoryListAction extends Action {
 				CallHierarchyMessages.HistoryListDialog_remove_button,
 			};
 
-			IListAdapter adapter= new IListAdapter() {
-				public void customButtonPressed(ListDialogField field, int index) {
+			IListAdapter<IMember[]> adapter= new IListAdapter<IMember[]>() {
+				public void customButtonPressed(ListDialogField<IMember[]> field, int index) {
 					doCustomButtonPressed();
 				}
-				public void selectionChanged(ListDialogField field) {
+				public void selectionChanged(ListDialogField<IMember[]> field) {
 					doSelectionChanged();
 				}
 
-				public void doubleClicked(ListDialogField field) {
+				public void doubleClicked(ListDialogField<IMember[]> field) {
 					doDoubleClicked();
 				}
 			};
@@ -81,16 +81,15 @@ public class HistoryListAction extends Action {
 				 * @see org.eclipse.jdt.ui.JavaElementLabelProvider#getStyledText(java.lang.Object)
 				 * @since 3.5
 				 */
+				@Override
 				public StyledString getStyledText(Object element) {
 					IMember[] members= (IMember[]) element;
-					if (members.length == 1)
-						return HistoryAction.getSingleElementLabel(members[0]);
-					else
-						return new StyledString(HistoryAction.getElementLabel(members));
+					return new StyledString(HistoryAction.getElementLabel(members));
 				}
 				/*
 				 * @see org.eclipse.jdt.ui.JavaElementLabelProvider#getText(java.lang.Object)
 				 */
+				@Override
 				public String getText(Object element) {
 					IMember[] members= (IMember[]) element;
 					return HistoryAction.getElementLabel(members);
@@ -98,16 +97,14 @@ public class HistoryListAction extends Action {
 				/*
 				 * @see org.eclipse.jdt.ui.JavaElementLabelProvider#getImage(java.lang.Object)
 				 */
+				@Override
 				public Image getImage(Object element) {
 					IMember[] members= (IMember[]) element;
-					if (members.length == 1)
-						return super.getImage(members[0]);
-					else
-						return null;
+					return super.getImage(members[0]);
 				}
 			};
 
-			fHistoryList= new ListDialogField(adapter, buttonLabels, new ColoringLabelProvider(labelProvider));
+			fHistoryList= new ListDialogField<IMember[]>(adapter, buttonLabels, new ColoringLabelProvider(labelProvider));
 			fHistoryList.setLabelText(CallHierarchyMessages.HistoryListDialog_label);
 			fHistoryList.setElements(Arrays.asList(elements));
 
@@ -125,6 +122,7 @@ public class HistoryListAction extends Action {
 		/*
 		 * @see Dialog#createDialogArea(Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			initializeDialogUnits(parent);
 
@@ -158,12 +156,12 @@ public class HistoryListAction extends Action {
 
 		private void doSelectionChanged() {
         	StatusInfo status= new StatusInfo();
-        	List selected= fHistoryList.getSelectedElements();
+        	List<IMember[]> selected= fHistoryList.getSelectedElements();
         	if (selected.size() != 1) {
         		status.setError(""); //$NON-NLS-1$
         		fResult= null;
         	} else {
-        		fResult= (IMember[]) selected.get(0);
+        		fResult= selected.get(0);
         	}
         	fHistoryList.enableButton(0, fHistoryList.getSize() > selected.size() && selected.size() != 0);
         	fHistoryStatus= status;
@@ -175,13 +173,14 @@ public class HistoryListAction extends Action {
 		}
 
 		public IMember[][] getRemaining() {
-			List elems= fHistoryList.getElements();
-			return (IMember[][]) elems.toArray(new IMember[elems.size()][]);
+			List<IMember[]> elems= fHistoryList.getElements();
+			return elems.toArray(new IMember[elems.size()][]);
 		}
 
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.HISTORY_LIST_DIALOG);
@@ -191,6 +190,7 @@ public class HistoryListAction extends Action {
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 * @since 3.4
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
@@ -208,6 +208,7 @@ public class HistoryListAction extends Action {
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
 		IMember[][] historyEntries= fView.getHistoryEntries();
 		HistoryListDialog dialog= new HistoryListDialog(JavaPlugin.getActiveWorkbenchShell(), historyEntries);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationCopyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationCopyAction.java
index 5849055..9cbd8cd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationCopyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationCopyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,10 +54,11 @@ class LocationCopyAction extends Action {
 		});
 	}
 
+	@Override
 	public void run() {
 		IStructuredSelection selection= (IStructuredSelection) fLocationViewer.getSelection();
 		StringBuffer buf= new StringBuffer();
-		for (Iterator iterator= selection.iterator(); iterator.hasNext();) {
+		for (Iterator<?> iterator= selection.iterator(); iterator.hasNext();) {
 			CallLocation location= (CallLocation) iterator.next();
 			buf.append(location.getLineNumber()).append('\t').append(location.getCallText());
 			buf.append('\n');
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationLabelProvider.java
index d75a1c9..abfb06e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,11 +32,13 @@ class LocationLabelProvider extends LabelProvider implements ITableLabelProvider
     /* (non-Javadoc)
      * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
      */
-    public String getText(Object element) {
+    @Override
+	public String getText(Object element) {
         return getColumnText(element, COLUMN_INFO);
     }
 
-    public Image getImage(Object element) {
+    @Override
+	public Image getImage(Object element) {
         return getColumnImage(element, COLUMN_ICON);
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationViewer.java
index d410cf3..4671a9c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/LocationViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,8 @@ import org.eclipse.ui.IViewSite;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.actions.ActionFactory;
 
+import org.eclipse.jdt.internal.corext.callhierarchy.CallLocation;
+
 
 
 class LocationViewer extends TableViewer {
@@ -56,7 +58,7 @@ class LocationViewer extends TableViewer {
 
         setContentProvider(new ArrayContentProvider());
         setLabelProvider(new LocationLabelProvider());
-        setInput(new ArrayList());
+        setInput(new ArrayList<CallLocation>());
 
         createColumns();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/MethodWrapperWorkbenchAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/MethodWrapperWorkbenchAdapter.java
index f6e2a56..ee56d03 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/MethodWrapperWorkbenchAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/MethodWrapperWorkbenchAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,7 +61,8 @@ public class MethodWrapperWorkbenchAdapter implements IWorkbenchAdapter {
      * (non-Javadoc)
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    public boolean equals(Object obj) {
+    @Override
+	public boolean equals(Object obj) {
         //Note: A MethodWrapperWorkbenchAdapter is equal to its MethodWrapper and vice versa (bug 101677).
         return fMethodWrapper.equals(obj);
     }
@@ -70,7 +71,8 @@ public class MethodWrapperWorkbenchAdapter implements IWorkbenchAdapter {
      * (non-Javadoc)
      * @see java.lang.Object#hashCode()
      */
-    public int hashCode() {
+    @Override
+	public int hashCode() {
         //Note: A MethodWrapperWorkbenchAdapter is equal to its MethodWrapper and vice versa (bug 101677).
         return fMethodWrapper.hashCode();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenCallHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenCallHierarchyAction.java
index 567f7d8..7195c80 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenCallHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenCallHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,6 +78,7 @@ public class OpenCallHierarchyAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		// Do nothing
 	}
@@ -85,6 +86,7 @@ public class OpenCallHierarchyAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(CallHierarchy.arePossibleInputElements(selection.toList()));
 	}
@@ -92,6 +94,7 @@ public class OpenCallHierarchyAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		ITypeRoot input= SelectionConverter.getInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
@@ -101,7 +104,7 @@ public class OpenCallHierarchyAction extends SelectionDispatchAction {
 			IJavaElement[] elements= SelectionConverter.codeResolveOrInputForked(fEditor);
 			if (elements == null)
 				return;
-			List candidates= new ArrayList(elements.length);
+			List<IJavaElement> candidates= new ArrayList<IJavaElement>(elements.length);
 			for (int i= 0; i < elements.length; i++) {
 				IJavaElement element= elements[i];
 				if (CallHierarchy.isPossibleInputElement(element)) {
@@ -114,7 +117,7 @@ public class OpenCallHierarchyAction extends SelectionDispatchAction {
 					candidates.add(enclosingMethod);
 				}
 			}
-			CallHierarchyUI.openSelectionDialog((IMember[]) candidates.toArray(new IMember[candidates.size()]), getSite().getWorkbenchWindow());
+			CallHierarchyUI.openSelectionDialog(candidates.toArray(new IMember[candidates.size()]), getSite().getWorkbenchWindow());
 
 		} catch (InvocationTargetException e) {
 			ExceptionHandler.handle(e, getShell(),
@@ -142,13 +145,14 @@ public class OpenCallHierarchyAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
-		List elements= selection.toList();
+		List<?> elements= selection.toList();
 		if (!CallHierarchy.arePossibleInputElements(elements)) {
 			elements= Collections.EMPTY_LIST;
 		}
 
-		IMember[] members= (IMember[]) elements.toArray(new IMember[elements.size()]);
+		IMember[] members= elements.toArray(new IMember[elements.size()]);
 		if (!ActionUtil.areProcessable(getShell(), members))
 			return;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenDeclarationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenDeclarationAction.java
index acea62b..7ee803c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenDeclarationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenDeclarationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,11 +42,13 @@ class OpenDeclarationAction extends OpenAction {
         return false;
     }
 
-    public ISelection getSelection() {
+    @Override
+	public ISelection getSelection() {
         return CallHierarchyUI.convertSelection(getSelectionProvider().getSelection());
     }
 
-    public Object getElementToOpen(Object object) {
+    @Override
+	public Object getElementToOpen(Object object) {
         if (object instanceof MethodWrapper) {
             return ((MethodWrapper) object).getMember();
         }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenLocationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenLocationAction.java
index e64a619..61cf90e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenLocationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/OpenLocationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ class OpenLocationAction extends SelectionDispatchAction {
             return false;
         }
 
-        for (Iterator iter = selection.iterator(); iter.hasNext();) {
+        for (Iterator<?> iter = selection.iterator(); iter.hasNext();) {
             Object element = iter.next();
 
             if (element instanceof MethodWrapper) {
@@ -67,18 +67,20 @@ class OpenLocationAction extends SelectionDispatchAction {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#getSelection()
      */
-    public ISelection getSelection() {
+    @Override
+	public ISelection getSelection() {
         return fPart.getSelection();
     }
 
     /* (non-Javadoc)
      * Method declared on SelectionDispatchAction.
      */
-    public void run(IStructuredSelection selection) {
+    @Override
+	public void run(IStructuredSelection selection) {
         if (!checkEnabled(selection))
             return;
 
-        for (Iterator iter= selection.iterator(); iter.hasNext();) {
+        for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 	        boolean noError= CallHierarchyUI.openInEditor(iter.next(), getShell(), OpenStrategy.activateOnOpen());
 	        if (! noError)
 	        	return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/PinCallHierarchyViewAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/PinCallHierarchyViewAction.java
new file mode 100644
index 0000000..debd662
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/PinCallHierarchyViewAction.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.callhierarchy;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+
+
+/**
+ * The action to pin the Call Hierarchy view.
+ * 
+ * @since 3.7
+ */
+class PinCallHierarchyViewAction extends Action {
+	private CallHierarchyViewPart fView= null;
+
+	/**
+	 * Constructs a 'Pin Call Hierarchy view' action.
+	 * 
+	 * @param view the Call Hierarchy view
+	 */
+	public PinCallHierarchyViewAction(CallHierarchyViewPart view) {
+		super(CallHierarchyMessages.PinCallHierarchyViewAction_label, IAction.AS_CHECK_BOX);
+		setToolTipText(CallHierarchyMessages.PinCallHierarchyViewAction_tooltip);
+		JavaPluginImages.setLocalImageDescriptors(this, "pin_view.gif"); //$NON-NLS-1$
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_PIN_VIEW_ACTION);
+		fView= view;
+	}
+
+	/*
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	@Override
+	public void run() {
+		fView.setPinned(isChecked());
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshElementAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshElementAction.java
index 5aa85c9..1866692 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshElementAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshElementAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,7 @@ import java.util.List;
 
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 
 import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.PlatformUI;
@@ -40,7 +38,6 @@ public class RefreshElementAction extends Action {
 	/**
 	 * Creates the action to refresh a single element in the call hierarchy.
 	 *
-	 * @param part the call hierarchy view part
 	 * @param viewer the call hierarchy viewer
 	 */
 	public RefreshElementAction(CallHierarchyViewer viewer) {
@@ -48,25 +45,24 @@ public class RefreshElementAction extends Action {
 		setText(CallHierarchyMessages.RefreshSingleElementAction_text);
 		setToolTipText(CallHierarchyMessages.RefreshSingleElementAction_tooltip);
 		setDescription(CallHierarchyMessages.RefreshSingleElementAction_description);
-		JavaPluginImages.setLocalImageDescriptors(this, "refresh_nav.gif");//$NON-NLS-1$
+		JavaPluginImages.setLocalImageDescriptors(this, "refresh.gif");//$NON-NLS-1$
 		setActionDefinitionId(IWorkbenchCommandConstants.FILE_REFRESH);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_REFRESH_SINGLE_ELEMENT_ACTION);
-		setEnabled(!fViewer.getSelection().isEmpty());
-
-		fViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				setEnabled(!fViewer.getSelection().isEmpty());
-			}
-		});
+		setEnabled(true);
 	}
 
 	/**
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		IStructuredSelection selection= (IStructuredSelection)getSelection();
-		List toExpand= new ArrayList();
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		if (selection.isEmpty()) {
+			fViewer.getPart().refresh();
+			return;
+		}
+		List<MethodWrapper> toExpand= new ArrayList<MethodWrapper>();
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			MethodWrapper element= (MethodWrapper)iter.next();
 			boolean isExpanded= fViewer.getExpandedState(element);
 			element.removeFromCache();
@@ -76,8 +72,8 @@ public class RefreshElementAction extends Action {
 			}
 			fViewer.refresh(element);
 		}
-		for (Iterator iter= toExpand.iterator(); iter.hasNext();) {
-			MethodWrapper elem= (MethodWrapper)iter.next();
+		for (Iterator<MethodWrapper> iter= toExpand.iterator(); iter.hasNext();) {
+			MethodWrapper elem= iter.next();
 			fViewer.setExpandedState(elem, true);
 		}
 	}
@@ -90,15 +86,4 @@ public class RefreshElementAction extends Action {
 	private ISelection getSelection() {
 		return fViewer.getSelection();
 	}
-
-	/**
-	 * Returns <code>true</code> if the action can be added to the menu, <code>false</code>
-	 * otherwise.
-	 * 
-	 * @return <code>true</code> if the action can be added to the menu, <code>false</code> otherwise
-	 * @since 3.6
-	 */
-	protected boolean canActionBeAdded() {
-		return fViewer.getSelection().isEmpty() ? false : true;
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshViewAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshViewAction.java
index 5ead305..0cf57b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshViewAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RefreshViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,7 @@ class RefreshViewAction extends Action {
 		fPart= part;
 		setText(CallHierarchyMessages.RefreshViewAction_text);
 		setToolTipText(CallHierarchyMessages.RefreshViewAction_tooltip);
-		JavaPluginImages.setLocalImageDescriptors(this, "refresh_nav.gif");//$NON-NLS-1$
+		JavaPluginImages.setLocalImageDescriptors(this, "refresh.gif");//$NON-NLS-1$
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_REFRESH_VIEW_ACTION);
 		setEnabled(false);
 	}
@@ -33,7 +33,8 @@ class RefreshViewAction extends Action {
     /**
      * @see org.eclipse.jface.action.Action#run()
      */
-    public void run() {
+    @Override
+	public void run() {
         fPart.refresh();
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RemoveFromViewAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RemoveFromViewAction.java
index ad33fa5..b4d143f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RemoveFromViewAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/RemoveFromViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,10 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.callhierarchy;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.swt.widgets.TreeItem;
 
@@ -16,11 +19,15 @@ import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
+import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.PlatformUI;
 
+import org.eclipse.jdt.core.IMember;
+
 import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;
 
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
 
 
 /**
@@ -54,18 +61,57 @@ class RemoveFromViewAction extends Action{
 		setDescription(CallHierarchyMessages.RemoveFromViewAction_removeFromView_description);
 		setToolTipText(CallHierarchyMessages.RemoveFromViewAction_removeFromView_tooltip);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_REMOVE_FROM_VIEW_ACTION);
+
+		ISharedImages workbenchImages= JavaPlugin.getDefault().getWorkbench().getSharedImages();
+		setDisabledImageDescriptor(workbenchImages.getImageDescriptor(ISharedImages.IMG_ELCL_REMOVE_DISABLED));
+		setImageDescriptor(workbenchImages.getImageDescriptor(ISharedImages.IMG_ELCL_REMOVE));
+		setHoverImageDescriptor(workbenchImages.getImageDescriptor(ISharedImages.IMG_ELCL_REMOVE));
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
+		IMember[] inputElements= fPart.getInputElements();
+		List<IMember> inputList= new ArrayList<IMember>(Arrays.asList(inputElements));
+		IMember[] selection= getSelectedElements();
+		for (int i= 0; i < selection.length; i++) {
+			if (inputList.contains(selection[i]))
+				inputList.remove(selection[i]);
+		}
+		if (inputList.size() > 0) {
+			fPart.updateInputHistoryAndDescription(inputElements, inputList.toArray(new IMember[inputList.size()]));
+		}
 		TreeItem[] items= fCallHierarchyViewer.getTree().getSelection();
 		for (int i= 0; i < items.length; i++)
 			items[i].dispose();
 	}
 
 	/**
+	 * Gets the elements selected in the call hierarchy view part.
+	 * 
+	 * @return the elements
+	 * @since 3.7
+	 */
+	private IMember[] getSelectedElements() {
+		ISelection selection= getSelection();
+		if (selection instanceof IStructuredSelection) {
+			List<IMember> members= new ArrayList<IMember>();
+			List<?> elements= ((IStructuredSelection)selection).toList();
+			for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
+				Object obj= iter.next();
+				if (obj instanceof MethodWrapper) {
+					MethodWrapper wrapper= (MethodWrapper)obj;
+					members.add((wrapper).getMember());
+				}
+			}
+			return members.toArray(new IMember[members.size()]);
+		}
+		return null;
+	}
+
+	/**
 	 * Gets the selection from the call hierarchy view part.
 	 * 
 	 * @return the current selection
@@ -84,7 +130,7 @@ class RemoveFromViewAction extends Action{
 		if (selection.isEmpty())
 			return false;
 
-		Iterator iter= selection.iterator();
+		Iterator<?> iter= selection.iterator();
 		while (iter.hasNext()) {
 			Object element= iter.next();
 			if (!(element instanceof MethodWrapper))//takes care of '...' node
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchInDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchInDialog.java
new file mode 100644
index 0000000..926fce7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchInDialog.java
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.callhierarchy;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.TrayDialog;
+
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
+import org.eclipse.jdt.internal.ui.search.SearchMessages;
+
+/**
+ * Class to show the Search In dialog.
+ * 
+ * @since 3.7
+ */
+class SearchInDialog extends TrayDialog {
+
+	private Button[] fIncludeMasks;
+
+	private IDialogSettings fSettings;
+
+	private int fIncludeMask;
+
+	private boolean fIncludeMaskChanged= false;
+
+	/**
+	 * Section ID for the SearchInDialog class.
+	 */
+	private static final String DIALOG_SETTINGS_SECTION= "SearchInDialog"; //$NON-NLS-1$	
+
+	private static final String SEARCH_IN_SOURCES= "SearchInSources"; //$NON-NLS-1$
+
+	private static final String SEARCH_IN_PROJECTS= "SearchInProjects"; //$NON-NLS-1$
+
+	private static final String SEARCH_IN_APPLIBS= "SearchInAppLibs"; //$NON-NLS-1$
+
+	private static final String SEARCH_IN_JRE= "SearchInJRE"; //$NON-NLS-1$
+
+	private String[] fKeys= new String[] { SEARCH_IN_SOURCES, SEARCH_IN_PROJECTS, SEARCH_IN_JRE, SEARCH_IN_APPLIBS };
+
+	public SearchInDialog(Shell parentShell) {
+		super(parentShell);
+		fSettings= JavaPlugin.getDefault().getDialogSettings().getSection(DIALOG_SETTINGS_SECTION);
+		if (fSettings == null) {
+			fSettings= JavaPlugin.getDefault().getDialogSettings().addNewSection(DIALOG_SETTINGS_SECTION);
+			fSettings.put(SEARCH_IN_SOURCES, true);
+			fSettings.put(SEARCH_IN_PROJECTS, true);
+			fSettings.put(SEARCH_IN_JRE, true);
+			fSettings.put(SEARCH_IN_APPLIBS, true);
+		}
+		fIncludeMask= getInt(fKeys);
+	}
+
+	/**
+	 * Returns the integer value of the strings.
+	 * 
+	 * @param str the array of strings
+	 * @return the integer value of the strings
+	 */
+	private int getInt(String[] str) {
+		boolean value;
+		int mask= 0;
+		int val= 0;
+		for (int i= 0; i < str.length; i++) {
+			value= fSettings.getBoolean(str[i]);
+			if (value) {
+				switch (i) {
+					case 0:
+						val= JavaSearchScopeFactory.SOURCES;
+						break;
+					case 1:
+						val= JavaSearchScopeFactory.PROJECTS;
+						break;
+					case 2:
+						val= JavaSearchScopeFactory.JRE;
+						break;
+					case 3:
+						val= JavaSearchScopeFactory.LIBS;
+				}
+				mask|= val;
+			}
+		}
+		return mask;
+	}
+
+	/* (non-Javadoc)
+	 * Method declared on Window.
+	 */
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(CallHierarchyMessages.SearchInDialog_title);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.CALL_HIERARCHY_SEARCH_IN_DIALOG);
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected boolean isResizable() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * Method declared on Dialog.
+	 */
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite composite= (Composite) super.createDialogArea(parent);
+
+		Control includeMask= createIncludeMask(composite);
+		includeMask.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false));
+
+		return composite;
+	}
+
+	/**
+	 * Creates the search in options.
+	 * 
+	 * @param parent the parent composite
+	 * @return the group control
+	 */
+	private Control createIncludeMask(Composite parent) {
+		Group result= new Group(parent, SWT.NONE);
+		result.setText(SearchMessages.SearchPage_searchIn_label);
+		result.setLayout(new GridLayout(4, false));
+		fIncludeMasks= new Button[] {
+				createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_sources, JavaSearchScopeFactory.SOURCES, fSettings.getBoolean(SEARCH_IN_SOURCES)),
+				createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_projects, JavaSearchScopeFactory.PROJECTS, fSettings.getBoolean(SEARCH_IN_PROJECTS)),
+				createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_jre, JavaSearchScopeFactory.JRE, fSettings.getBoolean(SEARCH_IN_JRE)),
+				createButton(result, SWT.CHECK, SearchMessages.SearchPage_searchIn_libraries, JavaSearchScopeFactory.LIBS, fSettings.getBoolean(SEARCH_IN_APPLIBS)),
+		};
+
+		SelectionAdapter listener= new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				updateOKStatus();
+			}
+		};
+		for (int i= 0; i < fIncludeMasks.length; i++) {
+			fIncludeMasks[i].addSelectionListener(listener);
+		}
+
+		return result;
+	}
+
+	/**
+	 * Updates the enablement of OK button.
+	 */
+	protected void updateOKStatus() {
+		boolean isValidMask= getIncludeMask() != 0;
+		getButton(OK).setEnabled(isValidMask);		
+	}
+
+	/**
+	 * Returns the include mask.
+	 * 
+	 * @return the include mask
+	 */
+	int getIncludeMask() {
+		if (fIncludeMasks == null || fIncludeMasks[0].isDisposed())
+			return fIncludeMask;
+		int mask= 0;
+		for (int i= 0; i < fIncludeMasks.length; i++) {
+			Button button= fIncludeMasks[i];
+			if (button.getSelection()) {
+				mask|= getIntData(button);
+			}
+		}
+		return mask;
+	}
+
+	/**
+	 * Returns the value of the given button.
+	 * 
+	 * @param button the button for which to fetch value
+	 * @return the value of the button
+	 */
+	private int getIntData(Button button) {
+		return ((Integer)button.getData()).intValue();
+	}
+
+	/**
+	 * Creates and returns the button.
+	 * 
+	 * @param parent the parent composite
+	 * @param style the style of control to construct
+	 * @param text the text for the button
+	 * @param data the widget data
+	 * @param isSelected the new selection state
+	 * @return the button created
+	 */
+	private Button createButton(Composite parent, int style, String text, int data, boolean isSelected) {
+		Button button= new Button(parent, style);
+		button.setText(text);
+		button.setData(new Integer(data));
+		button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+		button.setSelection(isSelected);
+		return button;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	@Override
+	protected void okPressed() {
+		int mask= getIncludeMask();
+		if (mask != fIncludeMask) {
+			fIncludeMask= mask;
+			for (int i= 0; i < fIncludeMasks.length; i++) {
+				fSettings.put(fKeys[i], fIncludeMasks[i].getSelection());
+			}
+			fIncludeMaskChanged= true;
+		} else {
+			fIncludeMaskChanged= false;
+		}
+		super.okPressed();
+	}
+
+	/**
+	 * Indicates whether the include mask has changed.
+	 * 
+	 * @return the includeMaskChanged <code>true</code> if the include mask has changed,
+	 *         <code>false</code> otherwise
+	 */
+	public boolean isIncludeMaskChanged() {
+		return fIncludeMaskChanged;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeAction.java
index fb8b06d..ee2a261 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,13 +26,33 @@ abstract class SearchScopeAction extends Action {
 		this.fGroup = group;
 	}
 
-	public abstract IJavaSearchScope getSearchScope();
+	/**
+	 * Fetches the search scope with the appropriate include mask.
+	 * 
+	 * @param includeMask the include mask
+	 * @return the search scope with the appropriate include mask
+	 * @since 3.7
+	 */
+	public abstract IJavaSearchScope getSearchScope(int includeMask);
 
 	public abstract int getSearchScopeType();
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	@Override
 	public void run() {
 		this.fGroup.setSelected(this, true);
+		CallHierarchyViewPart part= this.fGroup.getView();
+		part.setInputElements(part.getInputElements());
 	}
 
-	public abstract String getFullDescription();
+	/**
+	 * Fetches the description of the scope with the appropriate include mask.
+	 * 
+	 * @param includeMask the include mask
+	 * @return the description of the scope with the appropriate include mask
+	 * @since 3.7
+	 */
+	public abstract String getFullDescription(int includeMask);
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java
index 3ca1ff5..b4cc6a0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,14 +48,13 @@ class SearchScopeActionGroup extends ActionGroup {
 
 	static final int SEARCH_SCOPE_TYPE_WORKSPACE= 1;
 	static final int SEARCH_SCOPE_TYPE_PROJECT= 2;
-	static final int SEARCH_SCOPE_TYPE_HIERARCHY= 3;
+	// static final int SEARCH_SCOPE_TYPE_HIERARCHY= 3;
 	static final int SEARCH_SCOPE_TYPE_WORKING_SET= 4;
 
 	private SearchScopeAction fSelectedAction = null;
 	private String[] fSelectedWorkingSetNames = null;
 	private CallHierarchyViewPart fView;
 	private IDialogSettings fDialogSettings;
-	private SearchScopeHierarchyAction fSearchScopeHierarchyAction;
 	private SearchScopeProjectAction fSearchScopeProjectAction;
 	private SearchScopeWorkspaceAction fSearchScopeWorkspaceAction;
 	private SelectWorkingSetAction fSelectWorkingSetAction;
@@ -67,16 +66,21 @@ class SearchScopeActionGroup extends ActionGroup {
 	}
 
 	/**
-	 * @return IJavaSearchScope
+	 * Returns the current search scope.
+	 * 
+	 * @param includeMask the include mask
+	 * @return the current search scope
+	 * @since 3.7
 	 */
-	public IJavaSearchScope getSearchScope() {
+	public IJavaSearchScope getSearchScope(int includeMask) {
 		if (fSelectedAction != null) {
-			return fSelectedAction.getSearchScope();
+			return fSelectedAction.getSearchScope(includeMask);
 		}
 
 		return null;
 	}
 
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		fillContextMenu(actionBars.getMenuManager());
@@ -86,6 +90,7 @@ class SearchScopeActionGroup extends ActionGroup {
 		if (sets != null) {
 			fSelectedWorkingSetNames = getWorkingSetNames(sets);
 			fSelectedAction = new SearchScopeWorkingSetAction(this, sets, getScopeDescription(sets));
+			fSelectedAction.run();
 		} else {
 			fSelectedWorkingSetNames = null;
 			fSelectedAction = null;
@@ -112,7 +117,7 @@ class SearchScopeActionGroup extends ActionGroup {
 		if (workingSetNames == null) {
 			return null;
 		}
-		Set workingSets= new HashSet(2);
+		Set<IWorkingSet> workingSets= new HashSet<IWorkingSet>(2);
 		for (int j= 0; j < workingSetNames.length; j++) {
 			IWorkingSet workingSet= getWorkingSetManager().getWorkingSet(workingSetNames[j]);
 			if (workingSet != null) {
@@ -120,13 +125,13 @@ class SearchScopeActionGroup extends ActionGroup {
 			}
 		}
 
-		return (IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]);
+		return workingSets.toArray(new IWorkingSet[workingSets.size()]);
 	}
 
 	/**
 	 * Sets the new search scope type.
 	 *
-	 * @param newSelection New action which should be the checked one
+	 * @param newSelection New action which should be the checked one (can be null iff <code>ignoreUnchecked == false</code>)
 	 * @param ignoreUnchecked Ignores actions which are unchecked (necessary since both the old and the new action fires).
 	 */
 	protected void setSelected(SearchScopeAction newSelection, boolean ignoreUnchecked) {
@@ -173,6 +178,7 @@ class SearchScopeActionGroup extends ActionGroup {
 		javaSearchMM.setVisible(!javaSearchMM.isEmpty());
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		MenuManager javaSearchMM = new MenuManager(CallHierarchyMessages.SearchScopeActionGroup_searchScope,
 				IContextMenuConstants.GROUP_SEARCH);
@@ -192,15 +198,14 @@ class SearchScopeActionGroup extends ActionGroup {
 	}
 
 	private Action[] getActions() {
-		List actions = new ArrayList(SearchUtil.LRU_WORKINGSET_LIST_SIZE + 4);
+		List<Action> actions = new ArrayList<Action>(SearchUtil.LRU_WORKINGSET_LIST_SIZE + 4);
 		addAction(actions, fSearchScopeWorkspaceAction);
 		addAction(actions, fSearchScopeProjectAction);
-		addAction(actions, fSearchScopeHierarchyAction);
 		addAction(actions, fSelectWorkingSetAction);
 
-		Iterator iter= SearchUtil.getLRUWorkingSets().sortedIterator();
+		Iterator<IWorkingSet[]> iter= SearchUtil.getLRUWorkingSets().sortedIterator();
 		while (iter.hasNext()) {
-			IWorkingSet[] workingSets= (IWorkingSet[])iter.next();
+			IWorkingSet[] workingSets= iter.next();
 			String description = SearchUtil.toString(workingSets);
 			SearchScopeWorkingSetAction workingSetAction = new SearchScopeWorkingSetAction(this, workingSets, description);
 
@@ -211,7 +216,7 @@ class SearchScopeActionGroup extends ActionGroup {
 			actions.add(workingSetAction);
 		}
 
-		Action[] result = (Action[]) actions.toArray(new Action[actions.size()]);
+		Action[] result = actions.toArray(new Action[actions.size()]);
 
 		ensureExactlyOneCheckedAction(result);
 		return result;
@@ -242,7 +247,7 @@ class SearchScopeActionGroup extends ActionGroup {
 		return checked;
 	}
 
-	private void addAction(List actions, Action action) {
+	private void addAction(List<Action> actions, Action action) {
 		if (action == fSelectedAction) {
 			action.setChecked(true);
 		} else {
@@ -255,7 +260,6 @@ class SearchScopeActionGroup extends ActionGroup {
 	private void createActions() {
 		fSearchScopeWorkspaceAction = new SearchScopeWorkspaceAction(this);
 		fSelectWorkingSetAction = new SelectWorkingSetAction(this);
-		fSearchScopeHierarchyAction = new SearchScopeHierarchyAction(this);
 		fSearchScopeProjectAction = new SearchScopeProjectAction(this);
 
 		int searchScopeType;
@@ -303,8 +307,6 @@ class SearchScopeActionGroup extends ActionGroup {
 				return fSearchScopeWorkspaceAction;
 			case SEARCH_SCOPE_TYPE_PROJECT:
 				return fSearchScopeProjectAction;
-			case SEARCH_SCOPE_TYPE_HIERARCHY:
-				return fSearchScopeHierarchyAction;
 			case SEARCH_SCOPE_TYPE_WORKING_SET:
 				IWorkingSet[] workingSets= getWorkingSets(workingSetNames);
 				if (workingSets != null && workingSets.length > 0) {
@@ -336,7 +338,7 @@ class SearchScopeActionGroup extends ActionGroup {
 	 */
 	private boolean isSelectedWorkingSet(IWorkingSet[] workingSets) {
 		if (fSelectedWorkingSetNames != null && fSelectedWorkingSetNames.length == workingSets.length) {
-			Set workingSetNames= new HashSet(workingSets.length);
+			Set<String> workingSetNames= new HashSet<String>(workingSets.length);
 			for (int i = 0; i < workingSets.length; i++) {
 				workingSetNames.add(workingSets[i].getName());
 			}
@@ -350,9 +352,16 @@ class SearchScopeActionGroup extends ActionGroup {
 		return false;
 	}
 
-	public String getFullDescription() {
+	/**
+	 * Fetches the full description of the scope with the appropriate include mask.
+	 * 
+	 * @param includeMask the include mask
+	 * @return the description of the scope with the appropriate include mask
+	 * @since 3.7
+	 */
+	public String getFullDescription(int includeMask) {
 		if (fSelectedAction != null)
-			return fSelectedAction.getFullDescription();
+			return fSelectedAction.getFullDescription(includeMask);
 		return null;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeHierarchyAction.java
deleted file mode 100644
index 1773c16..0000000
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeHierarchyAction.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   Jesper Kamstrup Linnet (eclipse at kamstrup-linnet.dk) - initial API and implementation
- *          (report 36180: Callers/Callees view)
- *   Michael Fraenkel (fraenkel at us.ibm.com) - patch
- *          (report 60714: Call Hierarchy: display search scope in view title)
- *   Stephan Herrmann (stephan at cs.tu-berlin.de):
- *          - bug 75800: [call hierarchy] should allow searches for fields
- *******************************************************************************/
-package org.eclipse.jdt.internal.ui.callhierarchy;
-
-import org.eclipse.ui.PlatformUI;
-
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-
-import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
-
-
-class SearchScopeHierarchyAction extends SearchScopeAction {
-	//TODO: does such a scope make sense at all?
-
-	private final SearchScopeActionGroup fGroup;
-
-	public SearchScopeHierarchyAction(SearchScopeActionGroup group) {
-		super(group, CallHierarchyMessages.SearchScopeActionGroup_hierarchy_text);
-		this.fGroup = group;
-		setToolTipText(CallHierarchyMessages.SearchScopeActionGroup_hierarchy_tooltip);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_SEARCH_SCOPE_ACTION);
-	}
-
-	public IJavaSearchScope getSearchScope() {
-		try {
-			IMember[] members = fGroup.getView().getInputElements();
-
-			if (members != null && members.length == 1) {
-				IType type= members[0] instanceof IType ? (IType) members[0] : members[0].getDeclaringType();
-				return SearchEngine.createHierarchyScope(type);
-			} else {
-				return null;
-			}
-		} catch (JavaModelException e) {
-			JavaPlugin.log(e);
-		}
-
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeActionGroup.SearchScopeAction#getSearchScopeType()
-	 */
-	public int getSearchScopeType() {
-		return SearchScopeActionGroup.SEARCH_SCOPE_TYPE_HIERARCHY;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeAction#getFullDescription()
-	 */
-	public String getFullDescription() {
-		IMember[] members= fGroup.getView().getInputElements();
-		if (members != null && members.length == 1) {
-			IType type= members[0] instanceof IType ? (IType) members[0] : members[0].getDeclaringType();
-			return JavaSearchScopeFactory.getInstance().getHierarchyScopeDescription(type);
-		} else {
-			return JavaSearchScopeFactory.getInstance().getWorkspaceScopeDescription(true);
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeProjectAction.java
index 55c5120..30becb8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,24 +38,29 @@ class SearchScopeProjectAction extends SearchScopeAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_SEARCH_SCOPE_ACTION);
 	}
 
-	public IJavaSearchScope getSearchScope() {
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeAction#getSearchScope(int)
+	 */
+	@Override
+	public IJavaSearchScope getSearchScope(int includeMask) {
 		IMember[] members= fGroup.getView().getInputElements();
 		if (members == null) {
 			return null;
 		}
 
-		HashSet projects= new HashSet();
+		HashSet<IJavaProject> projects= new HashSet<IJavaProject>();
 		for (int i= 0; i < members.length; i++) {
 			projects.add(members[i].getJavaProject());
 		}
 		return SearchEngine.createJavaSearchScope(
-				(IJavaProject[]) projects.toArray(new IJavaProject[projects.size()]),
-				JavaSearchScopeFactory.NO_PROJ);
+				projects.toArray(new IJavaProject[projects.size()]),
+				includeMask);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeActionGroup.SearchScopeAction#getSearchScopeType()
 	 */
+	@Override
 	public int getSearchScopeType() {
 		return SearchScopeActionGroup.SEARCH_SCOPE_TYPE_PROJECT;
 	}
@@ -63,17 +68,18 @@ class SearchScopeProjectAction extends SearchScopeAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeAction#getFullDescription()
 	 */
-	public String getFullDescription() {
+	@Override
+	public String getFullDescription(int includeMask) {
 		IMember[] members= fGroup.getView().getInputElements();
 		if (members != null) {
-			HashSet projectNames= new HashSet();
+			HashSet<String> projectNames= new HashSet<String>();
 			for (int i= 0; i < members.length; i++) {
 				projectNames.add(members[i].getJavaProject().getElementName());
 			}
 			JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 			return factory.getProjectScopeDescription(
-					(String[]) projectNames.toArray(new String[projectNames.size()]),
-					JavaSearchScopeFactory.NO_PROJ);
+					projectNames.toArray(new String[projectNames.size()]),
+					includeMask);
 		}
 		return ""; //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkingSetAction.java
index ace0c72..eafcea1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,8 +33,12 @@ class SearchScopeWorkingSetAction extends SearchScopeAction {
 		this.fWorkingSets = workingSets;
 	}
 
-	public IJavaSearchScope getSearchScope() {
-		return JavaSearchScopeFactory.getInstance().createJavaSearchScope(fWorkingSets, true);
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeAction#getSearchScope(int)
+	 */
+	@Override
+	public IJavaSearchScope getSearchScope(int includeMask) {
+		return JavaSearchScopeFactory.getInstance().createJavaSearchScope(fWorkingSets, includeMask);
 	}
 
 	/**
@@ -47,6 +51,7 @@ class SearchScopeWorkingSetAction extends SearchScopeAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeActionGroup.SearchScopeAction#getSearchScopeType()
 	 */
+	@Override
 	public int getSearchScopeType() {
 		return SearchScopeActionGroup.SEARCH_SCOPE_TYPE_WORKING_SET;
 	}
@@ -54,7 +59,8 @@ class SearchScopeWorkingSetAction extends SearchScopeAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeAction#getFullDescription()
 	 */
-	public String getFullDescription() {
-		return JavaSearchScopeFactory.getInstance().getWorkingSetScopeDescription(fWorkingSets, true);
+	@Override
+	public String getFullDescription(int includeMask) {
+		return JavaSearchScopeFactory.getInstance().getWorkingSetScopeDescription(fWorkingSets, includeMask);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkspaceAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkspaceAction.java
index 201e97c..964b463 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkspaceAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeWorkspaceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,26 +16,31 @@ package org.eclipse.jdt.internal.ui.callhierarchy;
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
 
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
 
 
 class SearchScopeWorkspaceAction extends SearchScopeAction {
+	private JavaSearchScopeFactory fFactory= JavaSearchScopeFactory.getInstance();
 	public SearchScopeWorkspaceAction(SearchScopeActionGroup group) {
 		super(group, CallHierarchyMessages.SearchScopeActionGroup_workspace_text);
 		setToolTipText(CallHierarchyMessages.SearchScopeActionGroup_workspace_tooltip);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_SEARCH_SCOPE_ACTION);
 	}
 
-	public IJavaSearchScope getSearchScope() {
-		return SearchEngine.createWorkspaceScope();
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeAction#getSearchScope(int)
+	 */
+	@Override
+	public IJavaSearchScope getSearchScope(int includeMask) {
+		return fFactory.createWorkspaceScope(includeMask);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeActionGroup.SearchScopeAction#getSearchScopeType()
 	 */
+	@Override
 	public int getSearchScopeType() {
 		return SearchScopeActionGroup.SEARCH_SCOPE_TYPE_WORKSPACE;
 	}
@@ -43,8 +48,8 @@ class SearchScopeWorkspaceAction extends SearchScopeAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.callhierarchy.SearchScopeAction#getFullDescription()
 	 */
-	public String getFullDescription() {
-		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
-		return factory.getWorkspaceScopeDescription(true);
+	@Override
+	public String getFullDescription(int includeMask) {
+		return fFactory.getWorkspaceScopeDescription(includeMask);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchUtil.java
index fe60717..88dbaf2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,10 +53,10 @@ public class SearchUtil {
 
 	private static void saveState() {
 		IWorkingSet[] workingSets;
-		Iterator iter= SearchUtil.fgLRUWorkingSets.iterator();
+		Iterator<IWorkingSet[]> iter= SearchUtil.fgLRUWorkingSets.iterator();
 		int i= 0;
 		while (iter.hasNext()) {
-			workingSets= (IWorkingSet[])iter.next();
+			workingSets= iter.next();
 			String[] names= new String[workingSets.length];
 			for (int j= 0; j < workingSets.length; j++)
 				names[j]= workingSets[j].getName();
@@ -82,7 +82,7 @@ public class SearchUtil {
 		for (int i= SearchUtil.LRU_WORKINGSET_LIST_SIZE - 1; i >= 0; i--) {
 			String[] lruWorkingSetNames= SearchUtil.fgSettingsStore.getArray(SearchUtil.STORE_LRU_WORKING_SET_NAMES + i);
 			if (lruWorkingSetNames != null) {
-				Set workingSets= new HashSet(2);
+				Set<IWorkingSet> workingSets= new HashSet<IWorkingSet>(2);
 				for (int j= 0; j < lruWorkingSetNames.length; j++) {
 					IWorkingSet workingSet= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(lruWorkingSetNames[j]);
 					if (workingSet != null) {
@@ -91,7 +91,7 @@ public class SearchUtil {
 				}
 				foundLRU= true;
 				if (!workingSets.isEmpty())
-					SearchUtil.fgLRUWorkingSets.add((IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]));
+					SearchUtil.fgLRUWorkingSets.add(workingSets.toArray(new IWorkingSet[workingSets.size()]));
 			}
 		}
 		if (!foundLRU)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectFieldModeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectFieldModeAction.java
index 3cc6c57..80a96f1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectFieldModeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectFieldModeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,8 @@ public class SelectFieldModeAction extends Action {
     /*
      * @see Action#actionPerformed
      */
-    public void run() {
+    @Override
+	public void run() {
         fView.setFieldMode(fMode); // will toggle the checked state
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectWorkingSetAction.java
index 90a93bf..848a99e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SelectWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ class SelectWorkingSetAction extends Action {
 	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		try {
 			IWorkingSet[] workingSets;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ShowSearchInDialogAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ShowSearchInDialogAction.java
new file mode 100644
index 0000000..e679028
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ShowSearchInDialogAction.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.callhierarchy;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.window.Window;
+
+/**
+ * Action class to create and open the search in dialog.
+ * 
+ * @since 3.7
+ */
+public class ShowSearchInDialogAction extends Action {
+	private CallHierarchyViewPart fPart;
+
+	private SearchInDialog fSearchInDialog;
+
+	/**
+	 * Action to show the <code>SearchInDialog</code>.
+	 * 
+	 * @param part the call hierarchy view part
+	 * @param viewer the call hierarchy viewer	
+	 */
+	public ShowSearchInDialogAction(CallHierarchyViewPart part, CallHierarchyViewer viewer) {
+		Assert.isNotNull(part);
+		Assert.isNotNull(viewer);
+		fPart= part;
+		fSearchInDialog= new SearchInDialog(fPart.getViewSite().getShell());
+		setText(CallHierarchyMessages.ShowSearchInDialogAction_text);
+	}
+
+	/**
+	 * Returns the <code>SearchInDialog</code>.
+	 * 
+	 * @return the <code>searchInDialog</code>
+	 */
+	public SearchInDialog getSearchInDialog() {
+		return fSearchInDialog;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.Action#run()
+	 */
+	@Override
+	public void run() {
+		SearchInDialog dialog= getSearchInDialog();
+		if (dialog.open() == Window.OK && dialog.isIncludeMaskChanged()) {
+			fPart.setInputElements(fPart.getInputElements());
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleCallModeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleCallModeAction.java
index bb34dd7..2aae16c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleCallModeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleCallModeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,8 @@ class ToggleCallModeAction extends Action {
     /*
      * @see Action#actionPerformed
      */
-    public void run() {
+    @Override
+	public void run() {
         fView.setCallMode(fMode); // will toggle the checked state
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleOrientationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleOrientationAction.java
index 39a0635..8310f42 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleOrientationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/ToggleOrientationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,7 +65,8 @@ class ToggleOrientationAction extends Action {
     /*
      * @see Action#actionPerformed
      */
-    public void run() {
+    @Override
+	public void run() {
 		if (isChecked()) {
 			fView.fOrientation= fActionOrientation;
 			fView.computeOrientation();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/TreeRoot.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/TreeRoot.java
index 9864cae..35cc379 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/TreeRoot.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/TreeRoot.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,10 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.callhierarchy;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;
 
 public class TreeRoot {
@@ -24,4 +28,20 @@ public class TreeRoot {
     MethodWrapper[] getRoots() {
         return fRoots;
     }
+    
+	/**
+	 * Adds the new roots to the list.
+	 * 
+	 * @param roots the roots to add
+	 * @since 3.7
+	 */
+    void addRoots(MethodWrapper[] roots){
+		List<MethodWrapper>newRoots= new ArrayList<MethodWrapper>();
+		newRoots.addAll(Arrays.asList(fRoots));
+		newRoots.addAll(Arrays.asList(roots));
+
+		fRoots= newRoots.toArray(new MethodWrapper[newRoots.size()]);
+    }
+
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/JavaElementReferenceConverter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/JavaElementReferenceConverter.java
index daaacb2..943227a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/JavaElementReferenceConverter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/JavaElementReferenceConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class JavaElementReferenceConverter extends AbstractParameterValueConvert
 
 	private static final char PARAM_END_CHAR= Signature.C_PARAM_END;
 
+	@Override
 	public Object convertToObject(String parameterValue) throws ParameterValueConversionException {
 
 		assertWellFormed(parameterValue != null);
@@ -147,6 +148,7 @@ public class JavaElementReferenceConverter extends AbstractParameterValueConvert
 		}
 	}
 
+	@Override
 	public String convertToString(Object parameterValue) throws ParameterValueConversionException {
 
 		if (!(parameterValue instanceof IJavaElement)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/CompareDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/CompareDialog.java
index 4859c55..e895ce3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/CompareDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/CompareDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,12 +40,14 @@ class CompareDialog extends ResizableDialog {
 			super(parent, style, false);
 		}
 
+		@Override
 		protected Viewer getViewer(Viewer oldViewer, Object input) {
 			if (input instanceof ICompareInput)
 				return CompareUI.findContentViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration);
 			return null;
 		}
 
+		@Override
 		public void setImage(Image image) {
 			// don't show icon
 		}
@@ -83,6 +85,7 @@ class CompareDialog extends ResizableDialog {
 	 /* (non Javadoc)
  	 * Creates SWT control tree.
  	 */
+	@Override
 	protected synchronized Control createDialogArea(Composite parent2) {
 
 		Composite parent= (Composite) super.createDialogArea(parent2);
@@ -103,6 +106,7 @@ class CompareDialog extends ResizableDialog {
 	/* (non-Javadoc)
 	 * Method declared on Dialog.
 	 */
+	@Override
 	protected void createButtonsForButtonBar(Composite parent) {
 		String buttonLabel= JavaCompareUtilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$
 		createButton(parent, IDialogConstants.CANCEL_ID, buttonLabel, false);
@@ -111,6 +115,7 @@ class CompareDialog extends ResizableDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.COMPARE_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistory.java
index 2d7a005..84d30c9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ public class JavaAddElementFromHistory extends JavaHistoryAction {
 	public JavaAddElementFromHistory() {
 	}
 
+	@Override
 	protected JavaHistoryActionImpl createDelegate() {
 		return new JavaAddElementFromHistoryImpl();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistoryImpl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistoryImpl.java
index 5fd31fa..fa5245e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistoryImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaAddElementFromHistoryImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
 import org.eclipse.jdt.core.dom.EnumDeclaration;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.ImportDeclaration;
@@ -79,6 +80,7 @@ class JavaAddElementFromHistoryImpl extends JavaHistoryActionImpl {
 		super(true);
 	}
 
+	@Override
 	public void run(ISelection selection) {
 
 		String errorTitle= CompareMessages.AddFromHistory_title;
@@ -194,12 +196,12 @@ class JavaAddElementFromHistoryImpl extends JavaHistoryActionImpl {
 					} else if (parent instanceof IType) {
 						ASTNode declaration= getBodyContainer(root, (IType)parent);
 						if (declaration instanceof TypeDeclaration || declaration instanceof AnnotationTypeDeclaration) {
-							List container= ASTNodes.getBodyDeclarations(declaration);
+							List<BodyDeclaration> container= ASTNodes.getBodyDeclarations(declaration);
 							int index= ASTNodes.getInsertionIndex((BodyDeclaration)newNode, container);
 							ListRewrite lw= rewriter.getListRewrite(declaration, ASTNodes.getBodyDeclarationsProperty(declaration));
 							lw.insertAt(newNode, index, null);
 						} else if (declaration instanceof EnumDeclaration) {
-							List container= ((EnumDeclaration)declaration).enumConstants();
+							List<EnumConstantDeclaration> container= ((EnumDeclaration)declaration).enumConstants();
 							int index= ASTNodes.getInsertionIndex((FieldDeclaration)newNode, container);
 							ListRewrite lw= rewriter.getListRewrite(declaration, EnumDeclaration.ENUM_CONSTANTS_PROPERTY);
 							lw.insertAt(newNode, index, null);
@@ -211,7 +213,7 @@ class JavaAddElementFromHistoryImpl extends JavaHistoryActionImpl {
 				}
 			}
 
-			Map options= null;
+			Map<String, String> options= null;
 			IJavaProject javaProject= cu2.getJavaProject();
 			if (javaProject != null)
 				options= javaProject.getOptions(true);
@@ -305,6 +307,7 @@ class JavaAddElementFromHistoryImpl extends JavaHistoryActionImpl {
 		return -1;
 	}
 
+	@Override
 	protected boolean isEnabled(ISelection selection) {
 
 		if (selection.isEmpty()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareUtilities.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareUtilities.java
index 988e47a..c0fb6b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareUtilities.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareUtilities.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -359,7 +359,7 @@ public class JavaCompareUtilities {
 		try {
 			reader= new BufferedReader(new InputStreamReader(is2, encoding));
 			StringBuffer sb= new StringBuffer();
-			List list= new ArrayList();
+			List<String> list= new ArrayList<String>();
 			while (true) {
 				int c= reader.read();
 				if (c == -1)
@@ -381,7 +381,7 @@ public class JavaCompareUtilities {
 			}
 			if (sb.length() > 0)
 				list.add(sb.toString());
-			return (String[]) list.toArray(new String[list.size()]);
+			return list.toArray(new String[list.size()]);
 
 		} catch (IOException ex) {
 			return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionAction.java
index b19f939..242187e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ public class JavaCompareWithEditionAction extends JavaHistoryAction {
 	public JavaCompareWithEditionAction() {
 	}
 
+	@Override
 	protected JavaHistoryActionImpl createDelegate() {
 		return new JavaCompareWithEditionActionImpl();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionActionImpl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionActionImpl.java
index 9601dd3..6024fcf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionActionImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaCompareWithEditionActionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ class JavaCompareWithEditionActionImpl extends JavaHistoryActionImpl {
 		super(false);
 	}
 
+	@Override
 	public void run(ISelection selection) {
 
 		IMember input= getEditionElement(selection);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaElementHistoryPageSource.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaElementHistoryPageSource.java
index f70fcd9..1718f8b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaElementHistoryPageSource.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaElementHistoryPageSource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ public class JavaElementHistoryPageSource extends ElementLocalHistoryPageSource
 	/* (non-Javadoc)
 	 * @see org.eclipse.team.ui.history.ElementLocalHistoryPageSource#getFile(java.lang.Object)
 	 */
+	@Override
 	public IFile getFile(Object input) {
 		// extract CU from input
 		ICompilationUnit cu= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryAction.java
index f243729..a9048a3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public abstract class JavaHistoryAction extends Action implements IActionDelegat
 		getDelegate().run(selection);
 	}
 
+	@Override
 	public final void run() {
 		getDelegate().runFromEditor(this);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryActionImpl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryActionImpl.java
index 746f2ae..2e94599 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryActionImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaHistoryActionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,7 +57,6 @@ import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
@@ -71,6 +70,7 @@ import org.eclipse.jdt.internal.corext.util.Strings;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 
 /**
@@ -194,7 +194,7 @@ abstract class JavaHistoryActionImpl /* extends Action implements IActionDelegat
 		return true;
 	}
 
-	void applyChanges(ASTRewrite rewriter, final IDocument document, final ITextFileBuffer textFileBuffer, Shell shell, boolean inEditor, Map options)
+	void applyChanges(ASTRewrite rewriter, final IDocument document, final ITextFileBuffer textFileBuffer, Shell shell, boolean inEditor, Map<String, String> options)
 							throws CoreException, InvocationTargetException, InterruptedException {
 
 
@@ -333,7 +333,7 @@ abstract class JavaHistoryActionImpl /* extends Action implements IActionDelegat
 			throw new IllegalArgumentException();
 		}
 		try {
-			ASTParser c= ASTParser.newParser(AST.JLS3);
+			ASTParser c= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			c.setSource(unit);
 			c.setFocalPosition(0);
 			c.setResolveBindings(false);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java
index e86b1ee..16f4361 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaMergeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,9 +87,9 @@ public class JavaMergeViewer extends TextMergeViewer {
 
 	private IPropertyChangeListener fPreferenceChangeListener;
 	private IPreferenceStore fPreferenceStore;
-	private Map /*<JavaSourceViewerConfiguration>*/ fSourceViewerConfiguration;
-	private Map /*<CompilationUnitEditorAdapter>*/ fEditor;
-	private ArrayList /*<SourceViewer>*/ fSourceViewer;
+	private Map <SourceViewer, JavaSourceViewerConfiguration> fSourceViewerConfiguration;
+	private Map <SourceViewer, CompilationUnitEditorAdapter> fEditor;
+	private ArrayList <SourceViewer> fSourceViewer;
 
 	private IWorkbenchPartSite fSite;
 
@@ -104,12 +104,13 @@ public class JavaMergeViewer extends TextMergeViewer {
 		return fPreferenceStore;
 	}
 	
+	@Override
 	protected void handleDispose(DisposeEvent event) {
 		setPreferenceStore(null);
 		fSourceViewer= null;
 		if (fEditor != null) {
-			for (Iterator iterator= fEditor.values().iterator(); iterator.hasNext();) {
-				CompilationUnitEditorAdapter editor= (CompilationUnitEditorAdapter)iterator.next();
+			for (Iterator<CompilationUnitEditorAdapter> iterator= fEditor.values().iterator(); iterator.hasNext();) {
+				CompilationUnitEditorAdapter editor= iterator.next();
 				editor.dispose();
 			}
 			fEditor= null;
@@ -148,7 +149,8 @@ public class JavaMergeViewer extends TextMergeViewer {
 		return null;
 	}
 
-    public void setInput(Object input) {
+    @Override
+	public void setInput(Object input) {
     	if (input instanceof ICompareInput) {
     		IJavaProject project= getJavaProject((ICompareInput)input);
 			if (project != null) {
@@ -159,33 +161,35 @@ public class JavaMergeViewer extends TextMergeViewer {
     }
 
     private ChainedPreferenceStore createChainedPreferenceStore(IJavaProject project) {
-    	ArrayList stores= new ArrayList(4);
+    	ArrayList<IPreferenceStore> stores= new ArrayList<IPreferenceStore>(4);
     	if (project != null)
     		stores.add(new EclipsePreferencesAdapter(new ProjectScope(project.getProject()), JavaCore.PLUGIN_ID));
 		stores.add(JavaPlugin.getDefault().getPreferenceStore());
-		stores.add(new PreferencesAdapter(JavaCore.getPlugin().getPluginPreferences()));
+		stores.add(new PreferencesAdapter(JavaPlugin.getJavaCorePluginPreferences()));
 		stores.add(EditorsUI.getPreferenceStore());
-		return new ChainedPreferenceStore((IPreferenceStore[]) stores.toArray(new IPreferenceStore[stores.size()]));
+		return new ChainedPreferenceStore(stores.toArray(new IPreferenceStore[stores.size()]));
     }
 
 	private void handlePropertyChange(PropertyChangeEvent event) {
 		if (fSourceViewerConfiguration != null) {
-			for (Iterator iterator= fSourceViewerConfiguration.entrySet().iterator(); iterator.hasNext();) {
-				Entry entry= (Entry)iterator.next();
-				JavaSourceViewerConfiguration configuration= (JavaSourceViewerConfiguration)entry.getValue();
+			for (Iterator<Entry<SourceViewer, JavaSourceViewerConfiguration>> iterator= fSourceViewerConfiguration.entrySet().iterator(); iterator.hasNext();) {
+				Entry<SourceViewer, JavaSourceViewerConfiguration> entry= iterator.next();
+				JavaSourceViewerConfiguration configuration= entry.getValue();
 				if (configuration.affectsTextPresentation(event)) {
 					configuration.handlePropertyChangeEvent(event);
-					ITextViewer viewer= (ITextViewer)entry.getKey();
+					ITextViewer viewer= entry.getKey();
 					viewer.invalidateTextPresentation();
 				}
 			}
 		}
 	}
 
+	@Override
 	public String getTitle() {
 		return CompareMessages.JavaMergeViewer_title;
 	}
 
+	@Override
 	public ITokenComparator createTokenComparator(String s) {
 		return new JavaTokenComparator(s, new ITokenComparatorFactory() {
 			public ITokenComparator createTokenComparator(String text) {
@@ -194,19 +198,22 @@ public class JavaMergeViewer extends TextMergeViewer {
 		});
 	}
 
+	@Override
 	protected IDocumentPartitioner getDocumentPartitioner() {
 		return JavaCompareUtilities.createJavaPartitioner();
 	}
 
+	@Override
 	protected String getDocumentPartitioning() {
 		return IJavaPartitions.JAVA_PARTITIONING;
 	}
 
+	@Override
 	protected void configureTextViewer(TextViewer viewer) {
 		if (viewer instanceof SourceViewer) {
 			SourceViewer sourceViewer= (SourceViewer)viewer;
 			if (fSourceViewer == null)
-				fSourceViewer= new ArrayList();
+				fSourceViewer= new ArrayList<SourceViewer>();
 			if (!fSourceViewer.contains(sourceViewer))
 				fSourceViewer.add(sourceViewer);
 			JavaTextTools tools= JavaCompareUtilities.getJavaTextTools();
@@ -226,6 +233,7 @@ public class JavaMergeViewer extends TextMergeViewer {
 	 * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#setEditable(org.eclipse.jface.text.source.ISourceViewer, boolean)
 	 * @since 3.5
 	 */
+	@Override
 	protected void setEditable(ISourceViewer sourceViewer, boolean state) {
 		super.setEditable(sourceViewer, state);
 		if (fEditor != null) {
@@ -239,11 +247,13 @@ public class JavaMergeViewer extends TextMergeViewer {
 	 * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#isEditorBacked(org.eclipse.jface.text.ITextViewer)
 	 * @since 3.5
 	 */
+	@Override
 	protected boolean isEditorBacked(ITextViewer textViewer) {
 		return getSite() != null;
 	}
 
 
+	@Override
 	protected IEditorInput getEditorInput(ISourceViewer sourceViewer) {
 		IEditorInput editorInput= super.getEditorInput(sourceViewer);
 		if (editorInput == null)
@@ -265,7 +275,7 @@ public class JavaMergeViewer extends TextMergeViewer {
 
 	private JavaSourceViewerConfiguration getSourceViewerConfiguration(SourceViewer sourceViewer, IEditorInput editorInput) {
 		if (fSourceViewerConfiguration == null) {
-			fSourceViewerConfiguration= new HashMap(3);
+			fSourceViewerConfiguration= new HashMap<SourceViewer, JavaSourceViewerConfiguration>(3);
 		}
 		if (fPreferenceStore == null)
 			getPreferenceStore();
@@ -273,7 +283,7 @@ public class JavaMergeViewer extends TextMergeViewer {
 		JavaSourceViewerConfiguration configuration= new JavaSourceViewerConfiguration(tools.getColorManager(), fPreferenceStore, null, getDocumentPartitioning());
 		if (editorInput != null) {
 			// when input available, use editor
-			CompilationUnitEditorAdapter editor= (CompilationUnitEditorAdapter)fEditor.get(sourceViewer);
+			CompilationUnitEditorAdapter editor= fEditor.get(sourceViewer);
 			try {
 				editor.init((IEditorSite)editor.getSite(), editorInput);
 				editor.createActions();
@@ -283,9 +293,10 @@ public class JavaMergeViewer extends TextMergeViewer {
 			}
 		}
 		fSourceViewerConfiguration.put(sourceViewer, configuration);
-		return (JavaSourceViewerConfiguration)fSourceViewerConfiguration.get(sourceViewer);
+		return fSourceViewerConfiguration.get(sourceViewer);
 	}
 
+	@Override
 	protected int findInsertionPosition(char type, ICompareInput input) {
 
 		int pos= super.findInsertionPosition(type, input);
@@ -473,6 +484,7 @@ public class JavaMergeViewer extends TextMergeViewer {
 	 * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#createSourceViewer(org.eclipse.swt.widgets.Composite, int)
 	 * @since 3.5
 	 */
+	@Override
 	protected SourceViewer createSourceViewer(Composite parent, int textOrientation) {
 		SourceViewer sourceViewer;
 		if (getSite() != null) {
@@ -483,18 +495,19 @@ public class JavaMergeViewer extends TextMergeViewer {
 			Assert.isTrue(iSourceViewer instanceof SourceViewer);
 			sourceViewer= (SourceViewer)iSourceViewer;
 			if (fEditor == null)
-				fEditor= new HashMap(3);
+				fEditor= new HashMap<SourceViewer, CompilationUnitEditorAdapter>(3);
 			fEditor.put(sourceViewer, editor);
 		} else
 			sourceViewer= super.createSourceViewer(parent, textOrientation);
 
 		if (fSourceViewer == null)
-			fSourceViewer= new ArrayList();
+			fSourceViewer= new ArrayList<SourceViewer>();
 		fSourceViewer.add(sourceViewer);
 
 		return sourceViewer;
 	}
 	
+	@Override
 	protected void setActionsActivated(SourceViewer sourceViewer, boolean state) {
 		if (fEditor != null) {
 			Object editor= fEditor.get(sourceViewer);
@@ -515,6 +528,7 @@ public class JavaMergeViewer extends TextMergeViewer {
 		}
 	}
 
+	@Override
 	protected void createControls(Composite composite) {
 		super.createControls(composite);
 		IWorkbenchPart workbenchPart = getCompareConfiguration().getContainer().getWorkbenchPart();
@@ -526,12 +540,13 @@ public class JavaMergeViewer extends TextMergeViewer {
 		}
 	}
 	
+	@Override
 	public Object getAdapter(Class adapter) {
 		if (adapter == ITextEditorExtension3.class) {
 			IEditorInput activeInput= (IEditorInput)super.getAdapter(IEditorInput.class);
 			if (activeInput != null) {
-				for (Iterator iterator= fEditor.values().iterator(); iterator.hasNext();) {
-					CompilationUnitEditorAdapter editor= (CompilationUnitEditorAdapter)iterator.next();
+				for (Iterator<CompilationUnitEditorAdapter> iterator= fEditor.values().iterator(); iterator.hasNext();) {
+					CompilationUnitEditorAdapter editor= iterator.next();
 					if (activeInput.equals(editor.getEditorInput()))
 						return editor;
 				}
@@ -555,9 +570,11 @@ public class JavaMergeViewer extends TextMergeViewer {
 		private void setEditable(boolean editable) {
 			fEditable= editable;
 		}
+		@Override
 		public IWorkbenchPartSite getSite() {
 			return JavaMergeViewer.this.getSite();
 		}
+		@Override
 		public void createActions() {
 			if (fInputSet) {
 				super.createActions();
@@ -569,29 +586,37 @@ public class JavaMergeViewer extends TextMergeViewer {
 			}
 			// else do nothing, we will create actions later, when input is available
 		}
+		@Override
 		public void createPartControl(Composite composite) {
 			SourceViewer sourceViewer= (SourceViewer)createJavaSourceViewer(composite, new CompositeRuler(), null, false, fTextOrientation | SWT.H_SCROLL | SWT.V_SCROLL, createChainedPreferenceStore(null));
 			setSourceViewer(this, sourceViewer);
+			createNavigationActions();
 			getSelectionProvider().addSelectionChangedListener(getSelectionChangedListener());
 		}
+		@Override
 		protected void doSetInput(IEditorInput input) throws CoreException {
 			super.doSetInput(input);
 			// the editor input has been explicitly set
 			fInputSet = true;
 		}
 		// called by org.eclipse.ui.texteditor.TextEditorAction.canModifyEditor()
+		@Override
 		public boolean isEditable() {
 			return fEditable;
 		}
+		@Override
 		public boolean isEditorInputModifiable() {
 			return fEditable;
 		}
+		@Override
 		public boolean isEditorInputReadOnly() {
 			return !fEditable;
 		}
+		@Override
 		protected void setActionsActivated(boolean state) {
 			super.setActionsActivated(state);
 		}
+		@Override
 		public void close(boolean save) {
 			getDocumentProvider().disconnect(getEditorInput());
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaNode.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaNode.java
index 5acdbb1..7501c06 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaNode.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -171,6 +171,7 @@ class JavaNode extends DocumentRangeNode implements ITypedElement {
 	/*
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return getType() + ": " + getName() //$NON-NLS-1$
 				+ "[" + getRange().offset + "+" + getRange().length + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaParseTreeBuilder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaParseTreeBuilder.java
index 9032361..6e087f4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaParseTreeBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaParseTreeBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 class JavaParseTreeBuilder extends ASTVisitor {
 
     private char[] fBuffer;
-    private Stack fStack= new Stack();
+    private Stack<JavaNode> fStack= new Stack<JavaNode>();
     private JavaNode fImportContainer;
     private boolean fShowCU;
 
@@ -49,78 +49,94 @@ class JavaParseTreeBuilder extends ASTVisitor {
         fStack.push(root);
     }
 
-    public boolean visit(PackageDeclaration node) {
+    @Override
+	public boolean visit(PackageDeclaration node) {
         new JavaNode(getCurrentContainer(), JavaNode.PACKAGE, null, node.getStartPosition(), node.getLength());
         return false;
     }
 
-    public boolean visit(CompilationUnit node) {
+    @Override
+	public boolean visit(CompilationUnit node) {
         if (fShowCU)
             push(JavaNode.CU, null, node.getStartPosition(), node.getLength());
         return true;
     }
 
-    public void endVisit(CompilationUnit node) {
+    @Override
+	public void endVisit(CompilationUnit node) {
         if (fShowCU)
             pop();
     }
 
-    public boolean visit(TypeDeclaration node) {
+    @Override
+	public boolean visit(TypeDeclaration node) {
         push(node.isInterface() ? JavaNode.INTERFACE : JavaNode.CLASS, node.getName().toString(), node.getStartPosition(), node.getLength());
         return true;
     }
 
-    public void endVisit(TypeDeclaration node) {
+    @Override
+	public void endVisit(TypeDeclaration node) {
         pop();
     }
 
-    public boolean visit(EnumDeclaration node) {
+    @Override
+	public boolean visit(EnumDeclaration node) {
         push(JavaNode.ENUM, node.getName().toString(), node.getStartPosition(), node.getLength());
         return true;
     }
 
-    public void endVisit(EnumDeclaration node) {
+    @Override
+	public void endVisit(EnumDeclaration node) {
         pop();
     }
 
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		push(JavaNode.ANNOTATION, node.getName().toString(), node.getStartPosition(), node.getLength());
         return true;
 	}
 
+	@Override
 	public void endVisit(AnnotationTypeDeclaration node) {
 		pop();
 	}
 
+	@Override
 	public boolean visit(AnnotationTypeMemberDeclaration node) {
         push(JavaNode.METHOD, getSignature(node), node.getStartPosition(), node.getLength());
         return true;
 	}
 
+	@Override
 	public void endVisit(AnnotationTypeMemberDeclaration node) {
 		pop();
 	}
 
-    public boolean visit(MethodDeclaration node) {
+    @Override
+	public boolean visit(MethodDeclaration node) {
         String signature= getSignature(node);
         push(node.isConstructor() ? JavaNode.CONSTRUCTOR : JavaNode.METHOD, signature, node.getStartPosition(), node.getLength());
         return false;
     }
 
-    public void endVisit(MethodDeclaration node) {
+    @Override
+	public void endVisit(MethodDeclaration node) {
         pop();
     }
 
-    public boolean visit(Initializer node) {
+    @Override
+	public boolean visit(Initializer node) {
         push(JavaNode.INIT, getCurrentContainer().getInitializerCount(), node.getStartPosition(), node.getLength());
         return false;
     }
 
-    public void endVisit(Initializer node) {
+    @Override
+	public void endVisit(Initializer node) {
         pop();
     }
 
-    public boolean visit(ImportDeclaration node) {
+    @Override
+	public boolean visit(ImportDeclaration node) {
         int s= node.getStartPosition();
         int l= node.getLength();
         int declarationEnd= s + l;
@@ -135,23 +151,27 @@ class JavaParseTreeBuilder extends ASTVisitor {
         return false;
     }
 
-    public boolean visit(VariableDeclarationFragment node) {
+    @Override
+	public boolean visit(VariableDeclarationFragment node) {
         String name= getFieldName(node);
         ASTNode parent= node.getParent();
         push(JavaNode.FIELD, name, parent.getStartPosition(), parent.getLength());
         return false;
     }
 
-    public void endVisit(VariableDeclarationFragment node) {
+    @Override
+	public void endVisit(VariableDeclarationFragment node) {
         pop();
     }
 
-    public boolean visit(EnumConstantDeclaration node) {
+    @Override
+	public boolean visit(EnumConstantDeclaration node) {
         push(JavaNode.FIELD, node.getName().toString(), node.getStartPosition(), node.getLength());
         return false;
     }
 
-    public void endVisit(EnumConstantDeclaration node) {
+    @Override
+	public void endVisit(EnumConstantDeclaration node) {
         pop();
     }
 
@@ -189,7 +209,7 @@ class JavaParseTreeBuilder extends ASTVisitor {
     }
 
     private JavaNode getCurrentContainer() {
-        return (JavaNode) fStack.peek();
+        return fStack.peek();
     }
 
     private String getFieldName(VariableDeclarationFragment node) {
@@ -209,18 +229,15 @@ class JavaParseTreeBuilder extends ASTVisitor {
         buffer.append(node.getName().toString());
         buffer.append('(');
         boolean first= true;
-        Iterator iterator= node.parameters().iterator();
+        Iterator<SingleVariableDeclaration> iterator= node.parameters().iterator();
         while (iterator.hasNext()) {
-            Object parameterDecl= iterator.next();
-            if (parameterDecl instanceof SingleVariableDeclaration) {
-                SingleVariableDeclaration svd= (SingleVariableDeclaration) parameterDecl;
-                if (!first)
-                    buffer.append(", "); //$NON-NLS-1$
-                buffer.append(getType(svd.getType()));
-                if (svd.isVarargs())
-                    buffer.append("..."); //$NON-NLS-1$
-                first= false;
-            }
+        	SingleVariableDeclaration svd= iterator.next();
+            if (!first)
+                buffer.append(", "); //$NON-NLS-1$
+            buffer.append(getType(svd.getType()));
+            if (svd.isVarargs())
+                buffer.append("..."); //$NON-NLS-1$
+            first= false;
         }
         buffer.append(')');
         return buffer.toString();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionAction.java
index 5e759fc..aba4eac 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ public class JavaReplaceWithEditionAction extends JavaHistoryAction {
 	public JavaReplaceWithEditionAction() {
 	}
 
+	@Override
 	protected JavaHistoryActionImpl createDelegate() {
 		return new JavaReplaceWithEditionActionImpl(false);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionActionImpl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionActionImpl.java
index 190ed5c..7d51407 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionActionImpl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithEditionActionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ class JavaReplaceWithEditionActionImpl extends JavaHistoryActionImpl {
 		fPrevious= previous;
 	}
 
+	@Override
 	public void run(ISelection selection) {
 
 		Shell shell= getShell();
@@ -117,6 +118,7 @@ class JavaReplaceWithEditionActionImpl extends JavaHistoryActionImpl {
 			cc.setLeftEditable(false);
 			cc.setRightEditable(false);
 			HistoryPageCompareEditorInput ci = new HistoryPageCompareEditorInput(cc, pageSource, input) {
+				@Override
 				protected void performReplace(Object selectedElement) {
 					if (selectedElement instanceof ITypedElement) {
 						JavaReplaceWithEditionActionImpl.this.replace(input, file, (ITypedElement)selectedElement);
@@ -219,7 +221,7 @@ class JavaReplaceWithEditionActionImpl extends JavaHistoryActionImpl {
 					je.setFocus();
 			}
 
-			Map options= null;
+			Map<String, String> options= null;
 			IJavaProject javaProject= compilationUnit.getJavaProject();
 			if (javaProject != null)
 				options= javaProject.getOptions(true);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithPreviousEditionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithPreviousEditionAction.java
index d914117..2cfb2fe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithPreviousEditionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaReplaceWithPreviousEditionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ public class JavaReplaceWithPreviousEditionAction extends JavaHistoryAction {
 	public JavaReplaceWithPreviousEditionAction() {
 	}
 
+	@Override
 	protected JavaHistoryActionImpl createDelegate() {
 		return new JavaReplaceWithEditionActionImpl(true);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureCreator.java
index 5c8dbed..1d2797a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureCreator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureCreator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,18 +55,18 @@ import org.eclipse.jdt.core.ToolFactory;
 import org.eclipse.jdt.core.compiler.IScanner;
 import org.eclipse.jdt.core.compiler.ITerminalSymbols;
 import org.eclipse.jdt.core.compiler.InvalidInputException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 
 import org.eclipse.jdt.ui.text.IJavaPartitions;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 
 
 public class JavaStructureCreator extends StructureCreator {
 
-	private Map fDefaultCompilerOptions;
+	private Map<String, String> fDefaultCompilerOptions;
 
 	/**
 	 * A root node for the structure. It is similar to {@link StructureRootNode} but needed
@@ -88,6 +88,7 @@ public class JavaStructureCreator extends StructureCreator {
 		/* (non-Javadoc)
 		 * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode#isEditable()
 		 */
+		@Override
 		public boolean isEditable() {
 			return fEditable;
 		}
@@ -95,6 +96,7 @@ public class JavaStructureCreator extends StructureCreator {
 		/* (non-Javadoc)
 		 * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode#nodeChanged(org.eclipse.compare.structuremergeviewer.DocumentRangeNode)
 		 */
+		@Override
 		protected void nodeChanged(DocumentRangeNode node) {
 			save(this, fInput);
 		}
@@ -111,6 +113,7 @@ public class JavaStructureCreator extends StructureCreator {
 		/* (non-Javadoc)
 		 * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode#getAdapter(java.lang.Class)
 		 */
+		@Override
 		public Object getAdapter(Class adapter) {
 			if (adapter == ISharedDocumentAdapter.class) {
 				return fAdapter;
@@ -122,6 +125,7 @@ public class JavaStructureCreator extends StructureCreator {
 		/* (non-Javadoc)
 		 * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode#isReadOnly()
 		 */
+		@Override
 		public boolean isReadOnly() {
 			if (fInput instanceof IEditableContentExtension) {
 				IEditableContentExtension ext = (IEditableContentExtension) fInput;
@@ -133,6 +137,7 @@ public class JavaStructureCreator extends StructureCreator {
 		/* (non-Javadoc)
 		 * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode#validateEdit(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		public IStatus validateEdit(Shell shell) {
 			if (fInput instanceof IEditableContentExtension) {
 				IEditableContentExtension ext = (IEditableContentExtension) fInput;
@@ -154,7 +159,7 @@ public class JavaStructureCreator extends StructureCreator {
 		JavaNode fLeft= null;
 		JavaNode fRight= null;
 
-		ArrayList fChildren= new ArrayList();
+		ArrayList<IDiffElement> fChildren= new ArrayList<IDiffElement>();
 
 		void add(IDiffElement diff) {
 			fChildren.add(diff);
@@ -200,7 +205,7 @@ public class JavaStructureCreator extends StructureCreator {
 	public JavaStructureCreator() {
 	}
 
-	void setDefaultCompilerOptions(Map compilerSettings) {
+	void setDefaultCompilerOptions(Map<String, String> compilerSettings) {
 		fDefaultCompilerOptions= compilerSettings;
 	}
 
@@ -216,6 +221,7 @@ public class JavaStructureCreator extends StructureCreator {
 	 * @return a tree of JavaNodes for the given input.
 	 * In case of error null is returned.
 	 */
+	@Override
 	public IStructureComparator getStructure(final Object input) {
 		String contents= null;
 		char[] buffer= null;
@@ -247,6 +253,7 @@ public class JavaStructureCreator extends StructureCreator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.StructureCreator#createStructureComparator(java.lang.Object, org.eclipse.jface.text.IDocument, org.eclipse.compare.ISharedDocumentAdapter, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected IStructureComparator createStructureComparator(Object element,
 			IDocument document, ISharedDocumentAdapter sharedDocumentAdapter,
 			IProgressMonitor monitor) throws CoreException {
@@ -255,7 +262,7 @@ public class JavaStructureCreator extends StructureCreator {
 
 	private IStructureComparator createStructureComparator(final Object input, char[] buffer, IDocument doc, ISharedDocumentAdapter adapter, IProgressMonitor monitor) {
 		String contents;
-		Map compilerOptions= null;
+		Map<String, String> compilerOptions= null;
 
 		if (input instanceof IResourceProvider) {
 			IResource resource= ((IResourceProvider) input).getResource();
@@ -286,7 +293,7 @@ public class JavaStructureCreator extends StructureCreator {
 				contents.getChars(0, n, buffer, 0);
 			}
 
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			if (compilerOptions != null)
 				parser.setCompilerOptions(compilerOptions);
 			parser.setSource(buffer);
@@ -381,7 +388,7 @@ public class JavaStructureCreator extends StructureCreator {
 	 */
 	public void rewriteTree(Differencer differencer, IDiffContainer root) {
 
-		HashMap map= new HashMap(10);
+		HashMap<String, RewriteInfo> map= new HashMap<String, RewriteInfo>(10);
 
 		Object[] children= root.getChildren();
 		for (int i= 0; i < children.length; i++) {
@@ -397,7 +404,7 @@ public class JavaStructureCreator extends StructureCreator {
 
 				// find or create a RewriteInfo for all methods with the same name
 				String name= jn.extractMethodName();
-				RewriteInfo nameInfo= (RewriteInfo) map.get(name);
+				RewriteInfo nameInfo= map.get(name);
 				if (nameInfo == null) {
 					nameInfo= new RewriteInfo();
 					map.put(name, nameInfo);
@@ -409,7 +416,7 @@ public class JavaStructureCreator extends StructureCreator {
 				String argList= jn.extractArgumentList();
 				RewriteInfo argInfo= null;
 				if (argList != null && !argList.equals("()")) { //$NON-NLS-1$
-					argInfo= (RewriteInfo) map.get(argList);
+					argInfo= map.get(argList);
 					if (argInfo == null) {
 						argInfo= new RewriteInfo();
 						map.put(argList, argInfo);
@@ -440,10 +447,10 @@ public class JavaStructureCreator extends StructureCreator {
 
 		// now we have to rebuild the diff tree according to the combined
 		// changes
-		Iterator it= map.keySet().iterator();
+		Iterator<String> it= map.keySet().iterator();
 		while (it.hasNext()) {
-			String name= (String) it.next();
-			RewriteInfo i= (RewriteInfo) map.get(name);
+			String name= it.next();
+			RewriteInfo i= map.get(name);
 			if (i.matches()) { // we found a RewriteInfo that could be successfully combined
 
 				// we have to find the differences of the newly combined node
@@ -451,9 +458,9 @@ public class JavaStructureCreator extends StructureCreator {
 				DiffNode d= (DiffNode) differencer.findDifferences(true, null, root, i.fAncestor, i.fLeft, i.fRight);
 				if (d != null) {// there better should be a difference
 					d.setDontExpand(true);
-					Iterator it2= i.fChildren.iterator();
+					Iterator<IDiffElement> it2= i.fChildren.iterator();
 					while (it2.hasNext()) {
-						IDiffElement rd= (IDiffElement) it2.next();
+						IDiffElement rd= it2.next();
 						root.removeToRoot(rd);
 						d.add(rd);
 					}
@@ -476,6 +483,7 @@ public class JavaStructureCreator extends StructureCreator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.StructureCreator#getDocumentPartitioner()
 	 */
+	@Override
 	protected IDocumentPartitioner getDocumentPartitioner() {
 		return JavaCompareUtilities.createJavaPartitioner();
 	}
@@ -483,6 +491,7 @@ public class JavaStructureCreator extends StructureCreator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.StructureCreator#getDocumentPartitioning()
 	 */
+	@Override
 	protected String getDocumentPartitioning() {
 		return IJavaPartitions.JAVA_PARTITIONING;
 	}
@@ -490,12 +499,13 @@ public class JavaStructureCreator extends StructureCreator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.StructureCreator#getPath(java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	protected String[] getPath(Object element, Object input) {
 		if (element instanceof IJavaElement) {
 			IJavaElement je = (IJavaElement) element;
 			// build a path starting at the given Java element and walk
 			// up the parent chain until we reach a IWorkingCopy or ICompilationUnit
-			List args= new ArrayList();
+			List<String> args= new ArrayList<String>();
 			while (je != null) {
 				// each path component has a name that uses the same
 				// conventions as a JavaNode name
@@ -512,7 +522,7 @@ public class JavaStructureCreator extends StructureCreator {
 			int n= args.size();
 			String[] path= new String[n];
 			for (int i= 0; i < n; i++)
-				path[i]= (String) args.get(n-1-i);
+				path[i]= args.get(n-1-i);
 
 			return path;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java
index 2f4c7d7..1ee1805 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 			setCompareConfiguration(cc);
 		}
 
+		@Override
 		public void run() {
 			boolean b= !JavaCompareUtilities.getBoolean(fCompareConfiguration, fPropertyKey, false);
 			setChecked(b);
@@ -81,6 +82,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 				fCompareConfiguration.setProperty(fPropertyKey, new Boolean(b));
 		}
 
+		@Override
 		public void setChecked(boolean state) {
 			super.setChecked(state);
 			JavaCompareUtilities.initToggleAction(this, fBundle, fPrefix, state);
@@ -108,6 +110,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 	/**
 	 * Overridden to find and expand the first class.
 	 */
+	@Override
 	protected void initialSelection() {
 		Object firstClass= null;
 		Object o= getRoot();
@@ -142,6 +145,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 			expandToLevel(2);
 	}
 
+	@Override
 	protected void compareInputChanged(ICompareInput input) {
 
 		fThreeWay= input != null ? input.getAncestor() != null
@@ -149,7 +153,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 		setSmartButtonVisible(fThreeWay);
 
 		if (input != null) {
-			Map compilerOptions= getCompilerOptions(input.getAncestor());
+			Map<String, String> compilerOptions= getCompilerOptions(input.getAncestor());
 			if (compilerOptions == null)
 				compilerOptions= getCompilerOptions(input.getLeft());
 			if (compilerOptions == null)
@@ -161,7 +165,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 		super.compareInputChanged(input);
 	}
 
-	private Map getCompilerOptions(ITypedElement input) {
+	private Map<String, String> getCompilerOptions(ITypedElement input) {
 		IJavaElement element= findJavaElement(input);
 		if (element != null) {
 			IJavaProject javaProject= element.getJavaProject();
@@ -175,6 +179,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 	 * @see org.eclipse.compare.structuremergeviewer.StructureDiffViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
 	 * @since 3.5
 	 */
+	@Override
 	protected void handleDispose(DisposeEvent event) {
 		JavaCore.removeElementChangedListener(this);
 		super.handleDispose(event);
@@ -198,6 +203,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 	 *
 	 * @param toolBarManager the toolbar manager for which to add the buttons
 	 */
+	@Override
 	protected void createToolItems(ToolBarManager toolBarManager) {
 
 		super.createToolItems(toolBarManager);
@@ -208,6 +214,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 		toolBarManager.appendToGroup("modes", fSmartActionItem); //$NON-NLS-1$
 	}
 
+	@Override
 	protected void postDiffHook(Differencer differencer, IDiffContainer root, IProgressMonitor monitor) {
 		if (fStructureCreator.canRewriteTree()) {
 			boolean smart= JavaCompareUtilities.getBoolean(getCompareConfiguration(), SMART, false);
@@ -222,6 +229,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 	 * 
 	 * @param event the property change event
 	 */
+	@Override
 	protected void propertyChange(PropertyChangeEvent event) {
 		if (event.getProperty().equals(SMART))
 			diff();
@@ -272,14 +280,14 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 		if (!(input instanceof ICompareInput))
 			return new ITypedElement[0];
 
-		Set affectedElements= new HashSet();
+		Set<ITypedElement> affectedElements= new HashSet<ITypedElement>();
 		ICompareInput ci= (ICompareInput)input;
 		IJavaElementDelta delta= event.getDelta();
 		addAffectedElement(ci.getAncestor(), delta, affectedElements);
 		addAffectedElement(ci.getLeft(), delta, affectedElements);
 		addAffectedElement(ci.getRight(), delta, affectedElements);
 
-		return (ITypedElement[])affectedElements.toArray(new ITypedElement[affectedElements.size()]);
+		return affectedElements.toArray(new ITypedElement[affectedElements.size()]);
 	}
 
 	/**
@@ -290,7 +298,7 @@ class JavaStructureDiffViewer extends StructureDiffViewer implements IElementCha
 	 * @param affectedElements the set of affected elements
 	 * @since 3.5
 	 */
-	private void addAffectedElement(ITypedElement element, IJavaElementDelta delta, Set affectedElements) {
+	private void addAffectedElement(ITypedElement element, IJavaElementDelta delta, Set<ITypedElement> affectedElements) {
 		IJavaElement javaElement= findJavaElement(element);
 		if (isEditable(javaElement) && findJavaElementDelta(javaElement, delta) != null)
 			affectedElements.add(element);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaTextViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaTextViewer.java
index c7e9c5d..acfc350 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaTextViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaTextViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,10 +57,12 @@ public class JavaTextViewer extends Viewer {
 
 	}
 
+	@Override
 	public Control getControl() {
 		return fSourceViewer.getControl();
 	}
 
+	@Override
 	public void setInput(Object input) {
 		if (input instanceof IStreamContentAccessor) {
 			Document document= new Document(getString(input));
@@ -70,17 +72,21 @@ public class JavaTextViewer extends Viewer {
 		fInput= input;
 	}
 
+	@Override
 	public Object getInput() {
 		return fInput;
 	}
 
+	@Override
 	public ISelection getSelection() {
 		return null;
 	}
 
+	@Override
 	public void setSelection(ISelection s, boolean reveal) {
 	}
 
+	@Override
 	public void refresh() {
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/LocalHistoryActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/LocalHistoryActionGroup.java
index eaf569f..755c3fe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/LocalHistoryActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/LocalHistoryActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,6 +62,7 @@ public class LocalHistoryActionGroup extends ActionGroup {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(fAddFrom, IJavaHelpContextIds.ADD_FROM_HISTORY_ACTION);
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		IMenuManager localMenu= new MenuManager(CompareMessages.LocalHistoryActionGroup_menu_local_history);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileMergeViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileMergeViewer.java
index 2e565cf..fa23b69 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileMergeViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileMergeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,7 @@ import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileSourceView
  */
 public class PropertiesFileMergeViewer extends TextMergeViewer {
 
-	private List fSourceViewerConfigurations;
+	private List<SourceViewerConfiguration> fSourceViewerConfigurations;
 
 	private IPropertyChangeListener fPreferenceChangeListener;
 
@@ -63,16 +63,17 @@ public class PropertiesFileMergeViewer extends TextMergeViewer {
 	/*
 	 * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#configureTextViewer(org.eclipse.jface.text.TextViewer)
 	 */
+	@Override
 	protected void configureTextViewer(TextViewer textViewer) {
 		if (!(textViewer instanceof SourceViewer))
 			return;
 
 		if (fPreferenceStore == null) {
-			fSourceViewerConfigurations= new ArrayList(3);
+			fSourceViewerConfigurations= new ArrayList<SourceViewerConfiguration>(3);
 			fPreferenceStore= JavaPlugin.getDefault().getCombinedPreferenceStore();
 			fPreferenceChangeListener= new IPropertyChangeListener() {
 				public void propertyChange(PropertyChangeEvent event) {
-					Iterator iter= fSourceViewerConfigurations.iterator();
+					Iterator<SourceViewerConfiguration> iter= fSourceViewerConfigurations.iterator();
 					while (iter.hasNext())
 						((PropertiesFileSourceViewerConfiguration)iter.next()).handlePropertyChangeEvent(event);
 					invalidateTextPresentation();
@@ -91,6 +92,7 @@ public class PropertiesFileMergeViewer extends TextMergeViewer {
 	/*
 	 * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#getDocumentPartitioner()
 	 */
+	@Override
 	protected IDocumentPartitioner getDocumentPartitioner() {
 		return new FastPartitioner(new PropertiesFilePartitionScanner(), IPropertiesFilePartitions.PARTITIONS);
 	}
@@ -99,6 +101,7 @@ public class PropertiesFileMergeViewer extends TextMergeViewer {
 	 * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#getDocumentPartitioning()
 	 * @since 3.3
 	 */
+	@Override
 	protected String getDocumentPartitioning() {
 		return IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING;
 	}
@@ -106,6 +109,7 @@ public class PropertiesFileMergeViewer extends TextMergeViewer {
 	/*
 	 * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#getTitle()
 	 */
+	@Override
 	public String getTitle() {
 		return CompareMessages.PropertiesFileMergeViewer_title;
 	}
@@ -114,6 +118,7 @@ public class PropertiesFileMergeViewer extends TextMergeViewer {
 	 * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
 	 * @since 3.5
 	 */
+	@Override
 	protected void handleDispose(DisposeEvent event) {
 		if (fPreferenceStore != null) {
 			fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileViewer.java
index 5edc118..b3bfd45 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesFileViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,10 +60,12 @@ public class PropertiesFileViewer extends Viewer {
 			fSourceViewer.getTextWidget().setFont(font);
 	}
 
+	@Override
 	public Control getControl() {
 		return fSourceViewer.getControl();
 	}
 
+	@Override
 	public void setInput(Object input) {
 		if (input instanceof IStreamContentAccessor) {
 			Document document= new Document(getString(input));
@@ -73,17 +75,21 @@ public class PropertiesFileViewer extends Viewer {
 		fInput= input;
 	}
 
+	@Override
 	public Object getInput() {
 		return fInput;
 	}
 
+	@Override
 	public ISelection getSelection() {
 		return null;
 	}
 
+	@Override
 	public void setSelection(ISelection s, boolean reveal) {
 	}
 
+	@Override
 	public void refresh() {
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesStructureCreator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesStructureCreator.java
index 291859b..2d5e519 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesStructureCreator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/PropertiesStructureCreator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -89,6 +89,7 @@ public class PropertiesStructureCreator extends StructureCreator {
 		return CompareMessages.PropertyCompareViewer_title;
 	}
 
+	@Override
 	protected IStructureComparator createStructureComparator(Object input,
 			IDocument document, ISharedDocumentAdapter sharedDocumentAdapter,
 			IProgressMonitor monitor) throws CoreException {
@@ -100,6 +101,7 @@ public class PropertiesStructureCreator extends StructureCreator {
 			isEditable= false;
 
 		DocumentRangeNode root= new StructureRootNode(document, input, this, sharedDocumentAdapter) {
+			@Override
 			public boolean isEditable() {
 				return isEditable;
 			}
@@ -115,6 +117,7 @@ public class PropertiesStructureCreator extends StructureCreator {
 		return root;
 	}
 
+	@Override
 	public IStructureComparator locate(Object path, Object source) {
 		return null;
 	}
@@ -316,10 +319,12 @@ public class PropertiesStructureCreator extends StructureCreator {
 		return buf.toString();
 	}
 
+	@Override
 	protected IDocumentPartitioner getDocumentPartitioner() {
 		return new FastPartitioner(new PropertiesFilePartitionScanner(), IPropertiesFilePartitions.PARTITIONS);
 	}
 
+	@Override
 	protected String getDocumentPartitioning() {
 		return IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/ResizableDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/ResizableDialog.java
index ea61edc..b615331 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/ResizableDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/ResizableDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,11 +50,13 @@ public abstract class ResizableDialog extends TrayDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
 
 
+	@Override
 	protected Point getInitialSize() {
 
 		int width= 0;
@@ -115,6 +117,7 @@ public abstract class ResizableDialog extends TrayDialog {
 		return new Point(width, height);
 	}
 
+	@Override
 	protected Point getInitialLocation(Point initialSize) {
 		Point loc= super.getInitialLocation(initialSize);
 
@@ -134,6 +137,7 @@ public abstract class ResizableDialog extends TrayDialog {
 		return loc;
 	}
 
+	@Override
 	public boolean close() {
 		boolean closed= super.close();
 		if (closed && fNewBounds != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/FilteredTypesSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/FilteredTypesSelectionDialog.java
index 47dbc69..54099f6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/FilteredTypesSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/FilteredTypesSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,12 +54,12 @@ import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.resource.LocalResourceManager;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
 import org.eclipse.jface.viewers.ILabelDecorator;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
 import org.eclipse.jface.viewers.StyledString;
-import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
 import org.eclipse.jface.viewers.StyledString.Styler;
 
 import org.eclipse.jface.text.ITextSelection;
@@ -270,6 +270,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.SelectionDialog#setTitle(java.lang.String)
 	 */
+	@Override
 	public void setTitle(String title) {
 		super.setTitle(title);
 		fTitle= title;
@@ -294,6 +295,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.AbstractSearchDialog#getDialogSettings()
 	 */
+	@Override
 	protected IDialogSettings getDialogSettings() {
 		IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings().getSection(DIALOG_SETTINGS);
 
@@ -309,6 +311,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.AbstractSearchDialog#storeDialog(org.eclipse.jface.dialogs.IDialogSettings)
 	 */
+	@Override
 	protected void storeDialog(IDialogSettings settings) {
 		super.storeDialog(settings);
 
@@ -336,6 +339,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.AbstractSearchDialog#restoreDialog(org.eclipse.jface.dialogs.IDialogSettings)
 	 */
+	@Override
 	protected void restoreDialog(IDialogSettings settings) {
 		super.restoreDialog(settings);
 
@@ -381,6 +385,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.AbstractSearchDialog#fillViewMenu(org.eclipse.jface.action.IMenuManager)
 	 */
+	@Override
 	protected void fillViewMenu(IMenuManager menuManager) {
 		super.fillViewMenu(menuManager);
 
@@ -415,6 +420,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createExtendedContentArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createExtendedContentArea(Composite parent) {
 		Control addition= null;
 
@@ -439,9 +445,10 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.SelectionDialog#setResult(java.util.List)
 	 */
+	@Override
 	protected void setResult(List newResult) {
 
-		List resultToReturn= new ArrayList();
+		List<IType> resultToReturn= new ArrayList<IType>();
 
 		for (int i= 0; i < newResult.size(); i++) {
 			if (newResult.get(i) instanceof TypeNameMatch) {
@@ -468,6 +475,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	/*
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#create()
 	 */
+	@Override
 	public void create() {
 		super.create();
 		Control patternControl= getPatternControl();
@@ -481,6 +489,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.jface.window.Window#open()
 	 */
+	@Override
 	public int open() {
 		if (getInitialPattern() == null) {
 			IWorkbenchWindow window= JavaPlugin.getActiveWorkbenchWindow();
@@ -515,6 +524,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
 	 */
+	@Override
 	protected ItemsFilter createFilter() {
 		fFilter= new TypeItemsFilter(fSearchScope, fElementKinds, fFilterExtension);
 		return fFilter;
@@ -523,6 +533,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	/*
 	 * @see org.eclipse.ui.dialogs.SelectionStatusDialog#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
+	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.TYPE_SELECTION_DIALOG2);
@@ -535,6 +546,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *      org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void fillContentProvider(AbstractContentProvider provider, ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException {
 		TypeItemsFilter typeSearchFilter= (TypeItemsFilter) itemsFilter;
 		TypeSearchRequestor requestor= new TypeSearchRequestor(provider, typeSearchFilter);
@@ -573,6 +585,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getItemsComparator()
 	 */
+	@Override
 	protected Comparator getItemsComparator() {
 		return fTypeItemsComparator;
 	}
@@ -582,6 +595,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getElementName(java.lang.Object)
 	 */
+	@Override
 	public String getElementName(Object item) {
 		TypeNameMatch type= (TypeNameMatch) item;
 		return type.getSimpleTypeName();
@@ -592,6 +606,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	 *
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#validateItem(java.lang.Object)
 	 */
+	@Override
 	protected IStatus validateItem(Object item) {
 
 		if (item == null)
@@ -671,6 +686,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	/*
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#reloadCache(boolean, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	public void reloadCache(boolean checkDuplicates, IProgressMonitor monitor) {
 		IProgressMonitor remainingMonitor;
 		if (ConsistencyRunnable.needsExecution()) {
@@ -721,6 +737,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			fTypeInfoLabelProvider.setContainerInfo(isChecked());
 		}
@@ -737,6 +754,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			String typeFilterID= TypeFilterPreferencePage.TYPE_FILTER_PREF_PAGE_ID;
 			PreferencesUtil.createPreferenceDialogOn(getShell(), typeFilterID, new String[] { typeFilterID }, null).open();
@@ -767,6 +785,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		/*
 		 * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
 		 */
+		@Override
 		public void dispose() {
 			super.dispose();
 			fImageManager.dispose();
@@ -786,6 +805,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			if (!(element instanceof TypeNameMatch)) {
 				return super.getImage(element);
@@ -803,6 +823,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			if (!(element instanceof TypeNameMatch)) {
 				return super.getText(element);
@@ -921,6 +942,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 
 		private Styler createBoldStyler() {
 			return new Styler() {
+				@Override
 				public void applyStyles(TextStyle textStyle) {
 					textStyle.font= getBoldFont();
 				}
@@ -929,6 +951,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 
 		private Styler createBoldQualifierStyler() {
 			return new Styler() {
+				@Override
 				public void applyStyles(TextStyle textStyle) {
 					StyledString.QUALIFIER_STYLER.applyStyles(textStyle);
 					textStyle.font= getBoldFont();
@@ -954,6 +977,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			if (element instanceof TypeNameMatch) {
 				return TypeNameMatchLabelProvider.getImage((TypeNameMatch) element, TypeNameMatchLabelProvider.SHOW_TYPE_CONTAINER_ONLY);
@@ -967,6 +991,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			if (element instanceof TypeNameMatch) {
 				return BasicElementLabels.getJavaElementName(fTypeInfoUtil.getQualificationText((TypeNameMatch) element));
@@ -982,7 +1007,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 
 		private final TypeInfoRequestorAdapter fAdapter= new TypeInfoRequestorAdapter();
 
-		private final Map fLib2Name= new HashMap();
+		private final Map<String, String> fLib2Name= new HashMap<String, String>();
 
 		private final String[] fInstallLocations;
 
@@ -990,18 +1015,18 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 
 		public TypeInfoUtil(ITypeInfoImageProvider extension) {
 			fProviderExtension= extension;
-			List locations= new ArrayList();
-			List labels= new ArrayList();
+			List<String> locations= new ArrayList<String>();
+			List<String> labels= new ArrayList<String>();
 			IVMInstallType[] installs= JavaRuntime.getVMInstallTypes();
 			for (int i= 0; i < installs.length; i++) {
 				processVMInstallType(installs[i], locations, labels);
 			}
-			fInstallLocations= (String[]) locations.toArray(new String[locations.size()]);
-			fVMNames= (String[]) labels.toArray(new String[labels.size()]);
+			fInstallLocations= locations.toArray(new String[locations.size()]);
+			fVMNames= labels.toArray(new String[labels.size()]);
 
 		}
 
-		private void processVMInstallType(IVMInstallType installType, List locations, List labels) {
+		private void processVMInstallType(IVMInstallType installType, List<String> locations, List<String> labels) {
 			if (installType != null) {
 				IVMInstall[] installs= installType.getVMInstalls();
 				boolean isMac= Platform.OS_MACOSX.equals(Platform.getOS());
@@ -1092,7 +1117,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 						return fVMNames[i];
 					}
 				}
-				String lib= (String) fLib2Name.get(name);
+				String lib= fLib2Name.get(name);
 				if (lib != null)
 					return lib;
 			}
@@ -1133,6 +1158,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter#isSubFilter(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter)
 		 */
+		@Override
 		public boolean isSubFilter(ItemsFilter filter) {
 			if (! (filter instanceof TypeItemsFilter))
 				return false;
@@ -1145,6 +1171,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 			return typeItemsFilter.fTypeInfoFilter.isSubFilter(fTypeInfoFilter.getText());
 		}
 
+		@Override
 		public boolean equalsFilter(ItemsFilter iFilter) {
 			if (!(iFilter instanceof TypeItemsFilter))
 				return false;
@@ -1205,6 +1232,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter#isConsistentItem(java.lang.Object)
 		 */
+		@Override
 		public boolean isConsistentItem(Object item) {
 			return true;
 		}
@@ -1214,6 +1242,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter#matchItem(java.lang.Object)
 		 */
+		@Override
 		public boolean matchItem(Object item) {
 			if (fMatchEverything)
 				return true;
@@ -1227,6 +1256,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter#matchesRawNamePattern(java.lang.Object)
 		 */
+		@Override
 		public boolean matchesRawNamePattern(Object item) {
 			TypeNameMatch type= (TypeNameMatch) item;
 			return matchesRawNamePattern(type);
@@ -1236,14 +1266,17 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 * @return search flags
 		 * @see org.eclipse.jdt.core.search.SearchPattern#getMatchRule()
 		 */
+		@Override
 		public int getMatchRule() {
 			return fTypeInfoFilter.getSearchFlags();
 		}
 
+		@Override
 		public String getPattern() {
 			return fTypeInfoFilter.getText();
 		}
 
+		@Override
 		public boolean isCamelCasePattern() {
 			return fTypeInfoFilter.isCamelCasePattern();
 		}
@@ -1257,6 +1290,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 * 
 		 * @deprecated not used
 		 */
+		@Override
 		protected boolean matches(String text) {
 			throw new UnsupportedOperationException();
 		}
@@ -1270,10 +1304,12 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 
 		private String fPattern;
 
+		@Override
 		public void setPattern(String stringPattern) {
 			fPattern= stringPattern;
 		}
 
+		@Override
 		public String getPattern() {
 			return fPattern;
 		}
@@ -1303,6 +1339,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.jdt.core.search.TypeNameMatchRequestor#acceptTypeNameMatch(org.eclipse.jdt.core.search.TypeNameMatch)
 		 */
+		@Override
 		public void acceptTypeNameMatch(TypeNameMatch match) {
 			if (fStop)
 				return;
@@ -1317,9 +1354,9 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 	/**
 	 * Compares TypeItems is used during sorting
 	 */
-	private static class TypeItemsComparator implements Comparator {
+	private static class TypeItemsComparator implements Comparator<TypeNameMatch> {
 
-		private final Map fLib2Name= new HashMap();
+		private final Map<String, String> fLib2Name= new HashMap<String, String>();
 
 		private final String[] fInstallLocations;
 
@@ -1329,17 +1366,17 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 * Creates new instance of TypeItemsComparator
 		 */
 		public TypeItemsComparator() {
-			List locations= new ArrayList();
-			List labels= new ArrayList();
+			List<String> locations= new ArrayList<String>();
+			List<String> labels= new ArrayList<String>();
 			IVMInstallType[] installs= JavaRuntime.getVMInstallTypes();
 			for (int i= 0; i < installs.length; i++) {
 				processVMInstallType(installs[i], locations, labels);
 			}
-			fInstallLocations= (String[]) locations.toArray(new String[locations.size()]);
-			fVMNames= (String[]) labels.toArray(new String[labels.size()]);
+			fInstallLocations= locations.toArray(new String[locations.size()]);
+			fVMNames= labels.toArray(new String[labels.size()]);
 		}
 
-		private void processVMInstallType(IVMInstallType installType, List locations, List labels) {
+		private void processVMInstallType(IVMInstallType installType, List<String> locations, List<String> labels) {
 			if (installType != null) {
 				IVMInstall[] installs= installType.getVMInstalls();
 				boolean isMac= Platform.OS_MACOSX.equals(Platform.getOS());
@@ -1378,11 +1415,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
 		 */
-		public int compare(Object left, Object right) {
-
-			TypeNameMatch leftInfo= (TypeNameMatch) left;
-			TypeNameMatch rightInfo= (TypeNameMatch) right;
-
+		public int compare(TypeNameMatch leftInfo, TypeNameMatch rightInfo) {
 			int result= compareName(leftInfo.getSimpleTypeName(), rightInfo.getSimpleTypeName());
 			if (result != 0)
 				return result;
@@ -1449,7 +1482,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 						return fVMNames[i];
 					}
 				}
-				String lib= (String) fLib2Name.get(name);
+				String lib= fLib2Name.get(name);
 				if (lib != null)
 					return lib;
 			}
@@ -1488,6 +1521,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#accessed(java.lang.Object)
 		 */
+		@Override
 		public synchronized void accessed(Object object) {
 			super.accessed(object);
 		}
@@ -1497,6 +1531,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#remove(java.lang.Object)
 		 */
+		@Override
 		public synchronized boolean remove(Object element) {
 			OpenTypeHistory.getInstance().remove((TypeNameMatch) element);
 			return super.remove(element);
@@ -1507,6 +1542,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#load(org.eclipse.ui.IMemento)
 		 */
+		@Override
 		public void load(IMemento memento) {
 			TypeNameMatch[] types= OpenTypeHistory.getInstance().getTypeInfos();
 
@@ -1521,6 +1557,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 *
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#save(org.eclipse.ui.IMemento)
 		 */
+		@Override
 		public void save(IMemento memento) {
 			persistHistory();
 		}
@@ -1538,6 +1575,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 			}
 		}
 
+		@Override
 		protected Object restoreItemFromMemento(IMemento element) {
 			return null;
 		}
@@ -1548,6 +1586,7 @@ public class FilteredTypesSelectionDialog extends FilteredItemsSelectionDialog i
 		 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.SelectionHistory#storeItemToMemento(java.lang.Object,
 		 *      org.eclipse.ui.IMemento)
 		 */
+		@Override
 		protected void storeItemToMemento(Object item, IMemento element) {
 
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateHashCodeEqualsDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateHashCodeEqualsDialog.java
index a6bb253..611a464 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateHashCodeEqualsDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateHashCodeEqualsDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,12 +134,14 @@ public class GenerateHashCodeEqualsDialog extends SourceActionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean close() {
 		getDialogSettings().put(SETTINGS_INSTANCEOF, fUseInstanceOf);
 		getDialogSettings().put(SETTINGS_BLOCKS, fUseBlocks);
 		return super.close();
 	}
 
+	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.GENERATE_HASHCODE_EQUALS_SELECTION_DIALOG);
@@ -148,6 +150,7 @@ public class GenerateHashCodeEqualsDialog extends SourceActionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Composite createCommentSelection(final Composite parent) {
 		final Composite composite= super.createCommentSelection(parent);
 
@@ -156,6 +159,7 @@ public class GenerateHashCodeEqualsDialog extends SourceActionDialog {
 
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				setUseInstanceOf((((Button) event.widget).getSelection()));
 			}
@@ -170,6 +174,7 @@ public class GenerateHashCodeEqualsDialog extends SourceActionDialog {
 		
 		button.addSelectionListener(new SelectionAdapter() {
 			
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				setUseBlocks((((Button) event.widget).getSelection()));
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateToStringDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateToStringDialog.java
index bed5668..752e598 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateToStringDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/GenerateToStringDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,8 +82,8 @@ import org.eclipse.jdt.core.search.SearchEngine;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.tostringgeneration.GenerateToStringOperation;
 import org.eclipse.jdt.internal.corext.codemanipulation.tostringgeneration.ToStringGenerationSettings;
-import org.eclipse.jdt.internal.corext.codemanipulation.tostringgeneration.ToStringTemplateParser;
 import org.eclipse.jdt.internal.corext.codemanipulation.tostringgeneration.ToStringGenerationSettings.CustomBuilderSettings;
+import org.eclipse.jdt.internal.corext.codemanipulation.tostringgeneration.ToStringTemplateParser;
 import org.eclipse.jdt.internal.corext.util.JavaConventionsUtil;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
@@ -114,15 +114,15 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 		private static final Object[] EMPTY= new Object[0];
 
-		private Object[] fFields;
+		private IVariableBinding[] fFields;
 
-		private Object[] fMethods;
+		private IMethodBinding[] fMethods;
 
-		private Object[] fInheritedFields;
+		private IVariableBinding[] fInheritedFields;
 
-		private Object[] fInheritedMethods;
+		private IMethodBinding[] fInheritedMethods;
 
-		private Object[] mainNodes;
+		private String[] mainNodes;
 
 		private static final String fieldsNode= JavaUIMessages.GenerateToStringDialog_fields_node;
 
@@ -133,20 +133,20 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		private static final String inheritedMethodsNode= JavaUIMessages.GenerateToStringDialog_inherited_methods_node;
 
 		public GenerateToStringContentProvider(IVariableBinding[] fields, IVariableBinding[] inheritedFields, IMethodBinding[] methods, IMethodBinding[] inheritedMethods) {
-			ArrayList nodes= new ArrayList();
-			fFields= (Object[])fields.clone();
+			ArrayList<String> nodes= new ArrayList<String>();
+			fFields= fields.clone();
 			if (fFields.length > 0)
 				nodes.add(fieldsNode);
-			fInheritedFields= (Object[])inheritedFields.clone();
+			fInheritedFields= inheritedFields.clone();
 			if (fInheritedFields.length > 0)
 				nodes.add(inheritedFieldsNode);
-			fMethods= (Object[])methods.clone();
+			fMethods= methods.clone();
 			if (fMethods.length > 0)
 				nodes.add(methodsNode);
-			fInheritedMethods= (Object[])inheritedMethods.clone();
+			fInheritedMethods= inheritedMethods.clone();
 			if (fInheritedMethods.length > 0)
 				nodes.add(inheritedMethodsNode);
-			mainNodes= nodes.toArray();
+			mainNodes= nodes.toArray(new String[nodes.size()]);
 		}
 
 		private int getElementPosition(Object element, Object[] array) {
@@ -205,10 +205,10 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		}
 
 		public void sort() {
-			Comparator comparator= new Comparator() {
+			Comparator<IBinding> comparator= new Comparator<IBinding>() {
 				Collator collator= Collator.getInstance();
-				public int compare(Object o1, Object o2) {
-					return collator.compare(((IBinding)o1).getName(), ((IBinding)o2).getName());
+				public int compare(IBinding b1, IBinding b2) {
+					return collator.compare(b1.getName(), b2.getName());
 				}
 			};
 			Arrays.sort(fFields, comparator);
@@ -292,6 +292,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 	}
 
 	private static class GenerateToStringLabelProvider extends BindingLabelProvider {
+		@Override
 		public Image getImage(Object element) {
 			ImageDescriptor descriptor= null;
 			if (element == GenerateToStringContentProvider.fieldsNode || element == GenerateToStringContentProvider.inheritedFieldsNode)
@@ -369,14 +370,16 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			public TemplateEditionDialog(Shell parent, int templateNumber) {
 				super(parent);
 				this.templateNumber= templateNumber;
-				fInitialTemplateName= templateNumber < 0 ? null : (String)templateNames.get(templateNumber);
+				fInitialTemplateName= templateNumber < 0 ? null : templateNames.get(templateNumber);
 				setHelpAvailable(false);
 			}
 
+			@Override
 			protected boolean isResizable() {
 				return true;
 			}
 
+			@Override
 			protected Control createDialogArea(Composite parent) {
 				getShell().setText(templateNumber >= 0 ? JavaUIMessages.GenerateToStringDialog_templateEdition_WindowTitle : JavaUIMessages.GenerateToStringDialog_templateEdition_NewWindowTitle);
 
@@ -406,7 +409,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 				if (templateNumber >= 0) {
 					templateName.setText(fInitialTemplateName);
-					template.setText((String)templates.get(templateNumber));
+					template.setText(templates.get(templateNumber));
 				} else {
 					templateName.setText(createNewTemplateName());
 					template.setText(ToStringTemplateParser.DEFAULT_TEMPLATE);
@@ -455,6 +458,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 				return newName;
 			}
 
+			@Override
 			public boolean close() {
 				resultTemplateName= templateName.getText();
 				resultTemplate= fixLineBreaks(template.getText());
@@ -510,7 +514,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 				}
 
 				public String getDescription() {
-					return (String)parser.getVariableDescriptions().get(proposal);
+					return parser.getVariableDescriptions().get(proposal);
 				}
 
 				public String getLabel() {
@@ -523,8 +527,8 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			private int latestPosition;
 
 			public IContentProposal[] getProposals(String contents, int position) {
-				List primaryProposals= new ArrayList();
-				List secondaryProposals= new ArrayList();
+				List<Proposal> primaryProposals= new ArrayList<Proposal>();
+				List<Proposal> secondaryProposals= new ArrayList<Proposal>();
 				String[] proposalStrings= parser.getVariables();
 				String contentToCursor= contents.substring(0, position);
 				for (int i= 0; i < proposalStrings.length; i++) {
@@ -538,7 +542,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 				this.latestPosition= position;
 
 				primaryProposals.addAll(secondaryProposals);
-				return (IContentProposal[])primaryProposals.toArray(new IContentProposal[0]);
+				return primaryProposals.toArray(new IContentProposal[0]);
 			}
 
 			/**
@@ -580,9 +584,9 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 		private ToStringTemplateParser parser;
 
-		private List templateNames;
+		private List<String> templateNames;
 
-		private List templates;
+		private List<String> templates;
 
 		private int selectedTemplateNumber;
 
@@ -598,6 +602,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(getShell(), IJavaHelpContextIds.GENERATE_TOSTRING_MANAGE_TEMPLATES_DIALOG);
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			getShell().setText(JavaUIMessages.GenerateToStringDialog_templatesManagerTitle);
 
@@ -634,8 +639,8 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			gd.widthHint= 450;
 			templateTextControl.setLayoutData(gd);
 
-			templateNames= new ArrayList(Arrays.asList(getTemplateNames()));
-			templates= new ArrayList(Arrays.asList(getTemplates(getDialogSettings())));
+			templateNames= new ArrayList<String>(Arrays.asList(getTemplateNames()));
+			templates= new ArrayList<String>(Arrays.asList(getTemplates(getDialogSettings())));
 			selectedTemplateNumber= getGenerationSettings().stringFormatTemplateNumber;
 			refreshControls();
 
@@ -647,7 +652,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 				public void widgetSelected(SelectionEvent e) {
 					if (templateNameControl.getSelectionIndex() >= 0) {
 						selectedTemplateNumber= templateNameControl.getSelectionIndex();
-						templateTextControl.setText((String)templates.get(selectedTemplateNumber));
+						templateTextControl.setText(templates.get(selectedTemplateNumber));
 					}
 				}
 			});
@@ -659,19 +664,21 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 
 
+		@Override
 		protected void createButtonsForButtonBar(Composite parent) {
 			super.createButtonsForButtonBar(parent);
 			createButton(parent, APPLY_BUTTON, JavaUIMessages.GenerateToStringDialog_templateManagerApplyButton, false).setEnabled(false);
 		}
 
 		private void applyChanges() {
-			getDialogSettings().put(ToStringGenerationSettings.SETTINGS_TEMPLATE_NAMES, (String[])templateNames.toArray(new String[0]));
-			getDialogSettings().put(ToStringGenerationSettings.SETTINGS_TEMPLATES, (String[])templates.toArray(new String[0]));
+			getDialogSettings().put(ToStringGenerationSettings.SETTINGS_TEMPLATE_NAMES, templateNames.toArray(new String[0]));
+			getDialogSettings().put(ToStringGenerationSettings.SETTINGS_TEMPLATES, templates.toArray(new String[0]));
 			getGenerationSettings().stringFormatTemplateNumber= Math.max(selectedTemplateNumber, 0);
 			somethingChanged= false;
 			getButton(APPLY_BUTTON).setEnabled(false);
 		}
 
+		@Override
 		protected void buttonPressed(int buttonId) {
 			switch (buttonId) {
 				case APPLY_BUTTON:
@@ -723,10 +730,10 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		}
 
 		public void refreshControls() {
-			templateNameControl.setItems((String[])templateNames.toArray(new String[0]));
+			templateNameControl.setItems(templateNames.toArray(new String[0]));
 			if (templateNames.size() > 0) {
 				templateNameControl.select(selectedTemplateNumber);
-				templateTextControl.setText((String)templates.get(selectedTemplateNumber));
+				templateTextControl.setText(templates.get(selectedTemplateNumber));
 			} else {
 				templateTextControl.setText(""); //$NON-NLS-1$
 			}
@@ -754,9 +761,9 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 		private IType fLastValidBuilderType;
 
-		private List fLastValidAppendMethodSuggestions;
+		private List<String> fLastValidAppendMethodSuggestions;
 
-		private List fLastValidResultMethodSuggestions;
+		private List<String> fLastValidResultMethodSuggestions;
 
 		public CustomBuilderValidator(IJavaProject javaProject) {
 			fJavaProject= javaProject;
@@ -782,11 +789,11 @@ public class GenerateToStringDialog extends SourceActionDialog {
 				if (!foundConstructor)
 					return new StatusInfo(IStatus.ERROR, JavaUIMessages.GenerateToStringDialog_customBuilderConfig_noConstructorError);
 
-				List appendMethodSuggestions= getAppendMethodSuggestions(type);
+				List<String> appendMethodSuggestions= getAppendMethodSuggestions(type);
 				if (appendMethodSuggestions.isEmpty())
 					return new StatusInfo(IStatus.ERROR, JavaUIMessages.GenerateToStringDialog_customBuilderConfig_noAppendMethodError);
 
-				List resultMethodSuggestions= getResultMethodSuggestions(type);
+				List<String> resultMethodSuggestions= getResultMethodSuggestions(type);
 				if (resultMethodSuggestions.isEmpty())
 					return new StatusInfo(IStatus.ERROR, JavaUIMessages.GenerateToStringDialog_customBuilderConfig_noResultMethodError);
 
@@ -813,7 +820,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 				if (type == null || !type.exists()) {
 					return new StatusInfo(IStatus.ERROR, MessageFormat.format(JavaUIMessages.GenerateToStringDialog_customBuilderConfig_invalidClassError,
-							new String[] { builderSettings.className }));
+							new Object[] { builderSettings.className }));
 				}
 
 				IStatus typeValidation= validateBuilderType(type);
@@ -822,14 +829,15 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 				if (!getAppendMethodSuggestions(type).contains(builderSettings.appendMethod))
 					return new StatusInfo(IStatus.ERROR, MessageFormat.format(JavaUIMessages.GenerateToStringDialog_customBuilderConfig_invalidAppendMethodError,
-							new String[] { builderSettings.appendMethod }));
+							new Object[] { builderSettings.appendMethod }));
 
 				if (!getResultMethodSuggestions(type).contains(builderSettings.resultMethod))
 					return new StatusInfo(IStatus.ERROR, MessageFormat.format(JavaUIMessages.GenerateToStringDialog_customBuilderConfig_invalidResultMethodError,
-							new String[] { builderSettings.resultMethod }));
+							new Object[] { builderSettings.resultMethod }));
 
 				if (!isValidJavaIdentifier(builderSettings.variableName))
-					return new StatusInfo(IStatus.ERROR, MessageFormat.format(JavaUIMessages.GenerateToStringDialog_customBuilderConfig_invalidVariableNameError, new String[] { builderSettings.variableName }));
+					return new StatusInfo(IStatus.ERROR, MessageFormat.format(JavaUIMessages.GenerateToStringDialog_customBuilderConfig_invalidVariableNameError,
+							new Object[] { builderSettings.variableName }));
 
 			} catch (JavaModelException e) {
 				return new StatusInfo(IStatus.WARNING, JavaUIMessages.GenerateToStringDialog_customBuilderConfig_dataValidationError);
@@ -845,7 +853,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			return fJavaProject.findType(builderClassName, (IProgressMonitor)null);
 		}
 
-		public List getAppendMethodSuggestions(final IType type) throws JavaModelException {
+		public List<String> getAppendMethodSuggestions(final IType type) throws JavaModelException {
 			if (fLastValidBuilderType != null && fLastValidBuilderType.equals(type)) {
 				return fLastValidAppendMethodSuggestions;
 			}
@@ -873,7 +881,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			});
 		}
 
-		public List getResultMethodSuggestions(final IType type) throws JavaModelException {
+		public List<String> getResultMethodSuggestions(final IType type) throws JavaModelException {
 			if (fLastValidBuilderType != null && fLastValidBuilderType.equals(type)) {
 				return fLastValidResultMethodSuggestions;
 			}
@@ -888,8 +896,8 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			boolean isMethodOK(IMethod method) throws JavaModelException;
 		}
 
-		private List getMethodSuggestions(IType type, MethodChecker checker) throws JavaModelException {
-			ArrayList result= new ArrayList();
+		private List<String> getMethodSuggestions(IType type, MethodChecker checker) throws JavaModelException {
+			ArrayList<String> result= new ArrayList<String>();
 			IType[] classes= type.newSupertypeHierarchy(null).getAllClasses();
 			for (int i= 0; i < classes.length; i++) {
 				IMethod[] methods= classes[i].getMethods();
@@ -917,6 +925,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		 * Extension for class selection dialog - validates selected type
 		 */
 		private final TypeSelectionExtension fExtension= new TypeSelectionExtension() {
+			@Override
 			public ISelectionStatusValidator getSelectionValidator() {
 				return getValidator();
 			}
@@ -967,6 +976,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			return fValidator;
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			getShell().setText(JavaUIMessages.GenerateToStringDialog_customBuilderConfig_windowTitle);
 
@@ -982,6 +992,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			button.setText(JavaUIMessages.GenerateToStringDialog_customBuilderConfig_browseButton);
 			setButtonLayoutData(button);
 			button.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					browseForBuilderClass();
 				}
@@ -1029,6 +1040,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			fChainInvocations.setSelection(fBuilderSettings.chainCalls);
 			fChainInvocations.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
 			fChainInvocations.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fBuilderSettings.chainCalls= fChainInvocations.getSelection();
 					enableApplyButton();
@@ -1040,12 +1052,14 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			return composite;
 		}
 
+		@Override
 		public void create() {
 			super.create();
 			IStatus status= getValidator().revalidateAll(fBuilderSettings);
 			updateStatus(status);
 		}
 
+		@Override
 		protected void createButtonsForButtonBar(Composite parent) {
 			super.createButtonsForButtonBar(parent);
 			createButton(parent, APPLY_BUTTON, JavaUIMessages.GenerateToStringDialog_customBuilderConfig_applyButton, false).setEnabled(false);
@@ -1056,11 +1070,13 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			getButton(APPLY_BUTTON).setEnabled(!getStatus().matches(IStatus.ERROR));
 		}
 
+		@Override
 		protected void updateButtonsEnableState(IStatus status) {
 			super.updateButtonsEnableState(status);
 			getButton(APPLY_BUTTON).setEnabled(!status.matches(IStatus.ERROR) && somethingChanged);
 		}
 
+		@Override
 		protected void buttonPressed(int buttonId) {
 			switch (buttonId) {
 				case APPLY_BUTTON:
@@ -1090,9 +1106,9 @@ public class GenerateToStringDialog extends SourceActionDialog {
 					fAppendMethodName.setItems(empty);
 					fResultMethodName.setItems(empty);
 				} else {
-					fAppendMethodName.setItems((String[])fValidator.getAppendMethodSuggestions(type).toArray(empty));
+					fAppendMethodName.setItems(fValidator.getAppendMethodSuggestions(type).toArray(empty));
 					select(fAppendMethodName, fBuilderSettings.appendMethod);
-					fResultMethodName.setItems((String[])fValidator.getResultMethodSuggestions(type).toArray(empty));
+					fResultMethodName.setItems(fValidator.getResultMethodSuggestions(type).toArray(empty));
 					select(fResultMethodName, fBuilderSettings.resultMethod);
 				}
 			} catch (JavaModelException e1) {
@@ -1127,12 +1143,12 @@ public class GenerateToStringDialog extends SourceActionDialog {
 				if (dialog.getReturnCode() == OK) {
 					IType type= (IType)dialog.getResult()[0];
 					fBuilderClassName.setText(type.getFullyQualifiedParameterizedName());
-					List suggestions= fValidator.getAppendMethodSuggestions(type);
+					List<String> suggestions= fValidator.getAppendMethodSuggestions(type);
 					if (!suggestions.contains(fAppendMethodName.getText()))
-						fAppendMethodName.setText((String)suggestions.get(0));
+						fAppendMethodName.setText(suggestions.get(0));
 					suggestions= fValidator.getResultMethodSuggestions(type);
 					if (!suggestions.contains(fResultMethodName.getText()))
-						fResultMethodName.setText((String)suggestions.get(0));
+						fResultMethodName.setText(suggestions.get(0));
 				}
 			} catch (JavaModelException e) {
 				JavaPlugin.log(e);
@@ -1194,7 +1210,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		super(shell, new BindingLabelProvider(), new GenerateToStringContentProvider(fields, inheritedFields, methods, inheritededMethods), editor, type, false);
 		setEmptyListMessage(JavaUIMessages.GenerateHashCodeEqualsDialog_no_entries);
 
-		List selected= new ArrayList(Arrays.asList(selectedFields));
+		List<Object> selected= new ArrayList<Object>(Arrays.asList(selectedFields));
 		if (selectedFields.length == fields.length && selectedFields.length > 0)
 			selected.add(getContentProvider().getParent(selectedFields[0]));
 		setInitialElementSelections(selected);
@@ -1211,6 +1227,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean close() {
 		fGenerationSettings.writeDialogSettings();
 
@@ -1221,9 +1238,10 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		return super.close();
 	}
 
+	@Override
 	public Object[] getResult() {
 		Object[] oldResult= super.getResult();
-		List newResult= new ArrayList();
+		List<Object> newResult= new ArrayList<Object>();
 		for (int i= 0; i < oldResult.length; i++) {
 			if (!(oldResult[i] instanceof String)) {
 				newResult.add(oldResult[i]);
@@ -1232,11 +1250,13 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		return newResult.toArray();
 	}
 
+	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.GENERATE_TOSTRING_SELECTION_DIALOG);
 	}
 
+	@Override
 	protected CheckboxTreeViewer createTreeViewer(Composite parent) {
 		CheckboxTreeViewer treeViewer= super.createTreeViewer(parent);
 
@@ -1287,6 +1307,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		return treeViewer;
 	}
 
+	@Override
 	protected Composite createSelectionButtons(Composite composite) {
 		Composite buttonComposite= super.createSelectionButtons(composite);
 
@@ -1304,12 +1325,13 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		return buttonComposite;
 	}
 
+	@Override
 	protected void buttonPressed(int buttonId) {
 		super.buttonPressed(buttonId);
 		switch (buttonId) {
 			case UP_BUTTON: {
 				GenerateToStringContentProvider contentProvider= (GenerateToStringContentProvider)getTreeViewer().getContentProvider();
-				List selection= ((IStructuredSelection)getTreeViewer().getSelection()).toList();
+				List<?> selection= ((IStructuredSelection)getTreeViewer().getSelection()).toList();
 				if (selection.size() > 0)
 					contentProvider.up(selection.get(0), getTreeViewer());
 				updateOKStatus();
@@ -1317,7 +1339,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 			}
 			case DOWN_BUTTON: {
 				GenerateToStringContentProvider contentProvider= (GenerateToStringContentProvider)getTreeViewer().getContentProvider();
-				List selection= ((IStructuredSelection)getTreeViewer().getSelection()).toList();
+				List<?> selection= ((IStructuredSelection)getTreeViewer().getSelection()).toList();
 				if (selection.size() > 0)
 					contentProvider.down(selection.get(0), getTreeViewer());
 				updateOKStatus();
@@ -1354,6 +1376,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 
 	private Button styleButton;
 
+	@Override
 	protected Composite createCommentSelection(Composite parentComposite) {
 		Composite composite= super.createCommentSelection(parentComposite);
 
@@ -1382,6 +1405,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		formatCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
 		SWTUtil.setDefaultVisibleItemCount(formatCombo);
 		formatCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fGenerationSettings.stringFormatTemplateNumber= ((Combo)e.widget).getSelectionIndex();
 			}
@@ -1391,6 +1415,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		formatButton.setText(JavaUIMessages.GenerateToStringDialog_manage_templates_button);
 		setButtonLayoutData(formatButton);
 		formatButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				manageTemplatesButtonSelected();
 			}
@@ -1407,6 +1432,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		styleCombo.select(Math.min(fGenerationSettings.toStringStyle, styleCombo.getItemCount() - 1));
 		SWTUtil.setDefaultVisibleItemCount(styleCombo);
 		styleCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				changeToStringStyle(((Combo)e.widget).getSelectionIndex());
 			}
@@ -1416,6 +1442,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		styleButton.setText(JavaUIMessages.GenerateToStringDialog_codeStyleConfigureButton);
 		setButtonLayoutData(styleButton);
 		styleButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				configureStyleButtonSelected();
 			}
@@ -1425,6 +1452,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		skipNullsButton.setText(JavaUIMessages.GenerateToStringDialog_skip_null_button);
 		skipNullsButton.setSelection(fGenerationSettings.skipNulls);
 		skipNullsButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				fGenerationSettings.skipNulls= ((Button)event.widget).getSelection();
 			}
@@ -1434,6 +1462,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		arrayButton.setText(JavaUIMessages.GenerateToStringDialog_ignore_default_button);
 		arrayButton.setSelection(fGenerationSettings.customArrayToString);
 		arrayButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fGenerationSettings.customArrayToString= ((Button)e.widget).getSelection();
 			}
@@ -1449,6 +1478,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		limitButton.setText(JavaUIMessages.GenerateToStringDialog_limit_elements_button);
 		limitButton.setSelection(fGenerationSettings.limitElements);
 		limitButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fGenerationSettings.limitElements= ((Button)e.widget).getSelection();
 			}
@@ -1458,6 +1488,7 @@ public class GenerateToStringDialog extends SourceActionDialog {
 		limitSpinner.setMinimum(0);
 		limitSpinner.setSelection(fGenerationSettings.limitValue);
 		limitSpinner.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fGenerationSettings.limitValue= ((Spinner)e.widget).getSelection();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MainTypeSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MainTypeSelectionDialog.java
index e16387b..cf8af3f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MainTypeSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MainTypeSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,10 +48,12 @@ public class MainTypeSelectionDialog extends TwoPaneElementSelector {
 			super(JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_POST_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			return super.getImage(((IType)element).getPackageFragment());
 		}
 
+		@Override
 		public String getText(Object element) {
 			return super.getText(((IType)element).getPackageFragment());
 		}
@@ -72,6 +74,7 @@ public class MainTypeSelectionDialog extends TwoPaneElementSelector {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.MAINTYPE_SELECTION_DIALOG);
@@ -80,6 +83,7 @@ public class MainTypeSelectionDialog extends TwoPaneElementSelector {
 	/*
 	 * @see Window#open()
 	 */
+	@Override
 	public int open() {
 		MainMethodSearchEngine engine= new MainMethodSearchEngine();
 		IType[] types;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiElementListSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiElementListSelectionDialog.java
index 8b6d4d2..2df1065 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiElementListSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiElementListSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 
 	private Label fPageInfoLabel;
 	private String fPageInfoMessage= JavaUIMessages.MultiElementListSelectionDialog_pageInfoMessage;
-	private Comparator fComparator;
+	private Comparator<?> fComparator;
 
 	/**
 	 * Constructs a multi-page list selection dialog.
@@ -98,8 +98,9 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/*
 	 * @see Window#open()
 	 */
+	@Override
 	public int open() {
-		List selection= getInitialElementSelections();
+		List<Object[]> selection= getInitialElementSelections();
 		if (selection == null || selection.size() != fNumberOfPages) {
 			setInitialSelections(new Object[fNumberOfPages]);
 			selection= getInitialElementSelections();
@@ -113,6 +114,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/*
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite contents= (Composite) super.createDialogArea(parent);
 
@@ -130,6 +132,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/*
 	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(Composite)
 	 */
+	@Override
 	protected void createButtonsForButtonBar(Composite parent) {
 		fBackButton= createButton(parent, IDialogConstants.BACK_ID, IDialogConstants.BACK_LABEL, false);
 		
@@ -147,6 +150,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	 * @see org.eclipse.jface.dialogs.Dialog#initializeBounds()
 	 * @since 3.5.1
 	 */
+	@Override
 	protected void initializeBounds() {
 		super.initializeBounds();
 		fNextButton.getShell().setDefaultButton(fNextButton);
@@ -155,6 +159,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/*
 	 * @see org.eclipse.ui.dialogs.SelectionDialog#createMessageArea(Composite)
 	 */
+	@Override
 	protected Label createMessageArea(Composite parent) {
 		Composite composite= new Composite(parent, SWT.NONE);
 
@@ -183,6 +188,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/*
 	 * @see org.eclipse.ui.dialogs.SelectionStatusDialog#computeResult()
 	 */
+	@Override
 	protected void computeResult() {
 		setResult(fCurrentPage, getSelectedElements());
 	}
@@ -190,6 +196,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/*
 	 * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
 	 */
+	@Override
 	protected void buttonPressed(int buttonId) {
 		if (buttonId == IDialogConstants.BACK_ID) {
 			turnPage(false);
@@ -203,6 +210,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/**
 	 * @see AbstractElementListSelectionDialog#handleDefaultSelected()
 	 */
+	@Override
 	protected void handleDefaultSelected() {
 		if (validateCurrentSelection()) {
 			if (fCurrentPage == fNumberOfPages - 1) {
@@ -216,6 +224,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/**
 	 * @see AbstractElementListSelectionDialog#updateButtonsEnableState(IStatus)
 	 */
+	@Override
 	protected void updateButtonsEnableState(IStatus status) {
 		boolean isOK= !status.matches(IStatus.ERROR);
 		fPages[fCurrentPage].okState= isOK;
@@ -249,7 +258,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 
 		// store selection
 		Object[] selectedElements= getSelectedElements();
-		List list= getInitialElementSelections();
+		List<Object[]> list= getInitialElementSelections();
 		list.set(fCurrentPage, selectedElements);
 
 		// store result
@@ -302,7 +311,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	}
 
 	private void initializeResult(int length) {
-		List result= new ArrayList(length);
+		List<Object> result= new ArrayList<Object>(length);
 		for (int i= 0; i != length; i++)
 			result.add(null);
 
@@ -323,7 +332,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	 *
 	 * @param comparator the comparator to use, not null.
 	 */
-	public void setComparator(Comparator comparator) {
+	public void setComparator(Comparator<?> comparator) {
 		fComparator= comparator;
 		if (fFilteredList != null)
 			fFilteredList.setComparator(fComparator);
@@ -332,6 +341,7 @@ public class MultiElementListSelectionDialog extends AbstractElementListSelectio
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected FilteredList createFilteredList(Composite parent) {
 		FilteredList filteredList= super.createFilteredList(parent);
 		if (fComparator != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiMainTypeSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiMainTypeSelectionDialog.java
index de971c6..173d5ea 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiMainTypeSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/MultiMainTypeSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ public class MultiMainTypeSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see Window#open()
 	 */
+	@Override
 	public int open() {
 		MainMethodSearchEngine engine= new MainMethodSearchEngine();
 		IType[] types;
@@ -84,6 +85,7 @@ public class MultiMainTypeSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.MULTI_MAIN_TYPE_SELECTION_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OpenTypeSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OpenTypeSelectionDialog.java
index f735703..eb685be 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OpenTypeSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OpenTypeSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class OpenTypeSelectionDialog extends FilteredTypesSelectionDialog {
 	 *
 	 * @see org.eclipse.ui.dialogs.SelectionStatusDialog#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.OPEN_TYPE_DIALOG);
@@ -54,6 +55,7 @@ public class OpenTypeSelectionDialog extends FilteredTypesSelectionDialog {
 	 *
 	 * @see org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog#getDialogSettings()
 	 */
+	@Override
 	protected IDialogSettings getDialogSettings() {
 		IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings().getSection(DIALOG_SETTINGS);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OptionalMessageDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OptionalMessageDialog.java
index 6d2f199..0fd2fbb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OptionalMessageDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OptionalMessageDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class OptionalMessageDialog extends MessageDialog {
 		fCheckBoxText= checkBoxText;
 	}
 
+	@Override
 	protected Control createCustomArea(Composite parent) {
 		Composite composite= new Composite(parent, SWT.NONE);
 		GridLayout layout= new GridLayout();
@@ -96,6 +97,7 @@ public class OptionalMessageDialog extends MessageDialog {
 		fHideDialogCheckBox= new Button(composite, SWT.CHECK | SWT.LEFT);
 		fHideDialogCheckBox.setText(fCheckBoxText);
 		fHideDialogCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				setDialogEnabled(fId, !((Button)e.widget).getSelection());
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OverrideMethodDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OverrideMethodDialog.java
index 886a2ea..2230eb9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OverrideMethodDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/OverrideMethodDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,6 @@ import org.eclipse.ui.dialogs.ISelectionStatusValidator;
 
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.IMethodBinding;
@@ -59,6 +58,7 @@ import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.JavaUIMessages;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
 import org.eclipse.jdt.internal.ui.util.ViewerPane;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
@@ -82,6 +82,7 @@ public class OverrideMethodDialog extends SourceActionDialog {
 			return (OverrideMethodContentProvider) getContentProvider();
 		}
 
+		@Override
 		public void run() {
 			// http://bugs.eclipse.org/bugs/show_bug.cgi?id=39264
 			Object[] elementList= getOverrideContentProvider().getViewer().getCheckedElements();
@@ -135,7 +136,7 @@ public class OverrideMethodDialog extends SourceActionDialog {
 		 */
 		public Object[] getChildren(Object parentElement) {
 			if (parentElement instanceof ITypeBinding) {
-				ArrayList result= new ArrayList(fMethods.length);
+				ArrayList<IMethodBinding> result= new ArrayList<IMethodBinding>(fMethods.length);
 				for (int index= 0; index < fMethods.length; index++) {
 					if (fMethods[index].getDeclaringClass().isEqualTo((IBinding) parentElement))
 						result.add(fMethods[index]);
@@ -215,6 +216,7 @@ public class OverrideMethodDialog extends SourceActionDialog {
 		/*
 		 * @see ViewerSorter#compare(Viewer, Object, Object)
 		 */
+		@Override
 		public int compare(Viewer viewer, Object first, Object second) {
 			if (first instanceof ITypeBinding && second instanceof ITypeBinding) {
 				final ITypeBinding left= (ITypeBinding) first;
@@ -283,21 +285,21 @@ public class OverrideMethodDialog extends SourceActionDialog {
 
 	public OverrideMethodDialog(Shell shell, CompilationUnitEditor editor, IType type, boolean isSubType) throws JavaModelException {
 		super(shell, new BindingLabelProvider(), new OverrideMethodContentProvider(), editor, type, false);
-		RefactoringASTParser parser= new RefactoringASTParser(AST.JLS3);
+		RefactoringASTParser parser= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL);
 		fUnit= parser.parse(type.getCompilationUnit(), true);
 		final ITypeBinding binding= ASTNodes.getTypeBinding(fUnit, type);
-		List toImplement= new ArrayList();
+		List<IMethodBinding> toImplement= new ArrayList<IMethodBinding>();
 		IMethodBinding[] overridable= null;
 		if (binding != null) {
 			final IPackageBinding pack= binding.getPackage();
 			final IMethodBinding[] methods= StubUtility2.getOverridableMethods(fUnit.getAST(), binding, false);
-			List list= new ArrayList(methods.length);
+			List<IMethodBinding> list= new ArrayList<IMethodBinding>(methods.length);
 			for (int index= 0; index < methods.length; index++) {
 				final IMethodBinding cur= methods[index];
 				if (Bindings.isVisibleInHierarchy(cur, pack))
 					list.add(cur);
 			}
-			overridable= (IMethodBinding[]) list.toArray(new IMethodBinding[list.size()]);
+			overridable= list.toArray(new IMethodBinding[list.size()]);
 		} else
 			overridable= new IMethodBinding[] {};
 		for (int i= 0; i < overridable.length; i++) {
@@ -318,20 +320,20 @@ public class OverrideMethodDialog extends SourceActionDialog {
 			}
 		}
 
-		IMethodBinding[] toImplementArray= (IMethodBinding[]) toImplement.toArray(new IMethodBinding[toImplement.size()]);
+		IMethodBinding[] toImplementArray= toImplement.toArray(new IMethodBinding[toImplement.size()]);
 		setInitialSelections(toImplementArray);
 
-		HashSet expanded= new HashSet(toImplementArray.length);
+		HashSet<ITypeBinding> expanded= new HashSet<ITypeBinding>(toImplementArray.length);
 		for (int i= 0; i < toImplementArray.length; i++) {
 			expanded.add(toImplementArray[i].getDeclaringClass());
 		}
 
-		HashSet types= new HashSet(overridable.length);
+		HashSet<ITypeBinding> types= new HashSet<ITypeBinding>(overridable.length);
 		for (int i= 0; i < overridable.length; i++) {
 			types.add(overridable[i].getDeclaringClass());
 		}
 
-		ITypeBinding[] typesArrays= (ITypeBinding[]) types.toArray(new ITypeBinding[types.size()]);
+		ITypeBinding[] typesArrays= types.toArray(new ITypeBinding[types.size()]);
 		OverrideMethodComparator comparator= new OverrideMethodComparator(binding);
 		if (expanded.isEmpty() && typesArrays.length > 0) {
 			comparator.sort(null, typesArrays);
@@ -357,6 +359,7 @@ public class OverrideMethodDialog extends SourceActionDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.OVERRIDE_TREE_SELECTION_DIALOG);
@@ -365,10 +368,12 @@ public class OverrideMethodDialog extends SourceActionDialog {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog#createLinkControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createLinkControl(Composite composite) {
 		Link link= new Link(composite, SWT.WRAP);
 		link.setText(JavaUIMessages.OverrideMethodDialog_link_message);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				openCodeTempatePage(CodeTemplateContextType.OVERRIDECOMMENT_ID);
 			}
@@ -384,6 +389,7 @@ public class OverrideMethodDialog extends SourceActionDialog {
 	/*
 	 * @see CheckedTreeSelectionDialog#createTreeViewer(Composite)
 	 */
+	@Override
 	protected CheckboxTreeViewer createTreeViewer(Composite composite) {
 		initializeDialogUnits(composite);
 		ViewerPane pane= new ViewerPane(composite, SWT.BORDER | SWT.FLAT);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java
index c567aec..1efc980 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,8 +102,9 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#open()
 	 */
+	@Override
 	public int open() {
-		final ArrayList packageList= new ArrayList();
+		final ArrayList<IJavaElement> packageList= new ArrayList<IJavaElement>();
 
 		IRunnableWithProgress runnable= new IRunnableWithProgress() {
 			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
@@ -114,11 +115,12 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 				monitor.beginTask(JavaUIMessages.PackageSelectionDialog_progress_search, hideEmpty ? 2 : 1);
 				try {
 					SearchRequestor requestor= new SearchRequestor() {
-						private HashSet fSet= new HashSet();
+						private HashSet<String> fSet= new HashSet<String>();
 						private final boolean fAddDefault= (fFlags & F_HIDE_DEFAULT_PACKAGE) == 0;
 						private final boolean fDuplicates= (fFlags & F_REMOVE_DUPLICATES) == 0;
 						private final boolean fIncludeParents= (fFlags & F_SHOW_PARENTS) != 0;
 
+						@Override
 						public void acceptSearchMatch(SearchMatch match) throws CoreException {
 							IJavaElement enclosingElement= (IJavaElement) match.getElement();
 							String name= enclosingElement.getElementName();
@@ -168,7 +170,7 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 			private void removeEmptyPackages(IProgressMonitor monitor) throws JavaModelException, InterruptedException {
 				monitor.beginTask(JavaUIMessages.PackageSelectionDialog_progress_findEmpty, packageList.size());
 				try {
-					ArrayList res= new ArrayList(packageList.size());
+					ArrayList<IPackageFragment> res= new ArrayList<IPackageFragment>(packageList.size());
 					for (int i= 0; i < packageList.size(); i++) {
 						IPackageFragment pkg= (IPackageFragment) packageList.get(i);
 						if (pkg.hasChildren() || !pkg.hasSubpackages()) {
@@ -213,6 +215,7 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.OPEN_PACKAGE_DIALOG);
@@ -221,6 +224,7 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see Window#close()
 	 */
+	@Override
 	public boolean close() {
 		writeSettings();
 		return super.close();
@@ -229,6 +233,7 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		Control control= super.createContents(parent);
 		readSettings();
@@ -238,6 +243,7 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#getInitialSize()
 	 */
+	@Override
 	protected Point getInitialSize() {
 		Point result= super.getInitialSize();
 		if (fSize != null) {
@@ -253,6 +259,7 @@ public class PackageSelectionDialog extends ElementListSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#getInitialLocation(org.eclipse.swt.graphics.Point)
 	 */
+	@Override
 	protected Point getInitialLocation(Point initialSize) {
 		Point result= super.getInitialLocation(initialSize);
 		if (fLocation != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SortMembersMessageDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SortMembersMessageDialog.java
index 262963a..e934d0b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SortMembersMessageDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SortMembersMessageDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class SortMembersMessageDialog extends OptionalMessageDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -77,6 +78,7 @@ public class SortMembersMessageDialog extends OptionalMessageDialog {
 		Link link= new Link(composite, SWT.WRAP | SWT.RIGHT);
 		link.setText(DialogsMessages.SortMembersMessageDialog_description);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				openMembersSortOrderPage();
 			}
@@ -100,6 +102,7 @@ public class SortMembersMessageDialog extends OptionalMessageDialog {
 	/*
 	 * @see org.eclipse.jface.dialogs.IconAndMessageDialog#createContents(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		Control contents= super.createContents(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJavaHelpContextIds.SORT_MEMBERS_DIALOG);
@@ -109,6 +112,7 @@ public class SortMembersMessageDialog extends OptionalMessageDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IconAndMessageDialog#createMessageArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createMessageArea(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -169,6 +173,7 @@ public class SortMembersMessageDialog extends OptionalMessageDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#open()
 	 */
+	@Override
 	public int open() {
 		if (isDialogEnabled(OPTIONAL_ID)) {
 			int res= super.open();
@@ -184,6 +189,7 @@ public class SortMembersMessageDialog extends OptionalMessageDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#close()
 	 */
+	@Override
 	public boolean close() {
 		fDialogSettings.put(DIALOG_SETTINGS_SORT_ALL, fSortAllRadio.isSelected());
 		return super.close();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SourceActionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SourceActionDialog.java
index 079512e..8497fd4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SourceActionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/SourceActionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,8 +99,8 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	private static final String SETTINGS_COMMENTS= "Comments"; //$NON-NLS-1$
 
 
-	private List fInsertPositions;
-	private List fLabels;
+	private List<IJavaElement> fInsertPositions;
+	private List<String> fLabels;
 
 	/**
 	 * One of:
@@ -151,8 +151,8 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 		fFinal= asBoolean(fSettings.get(SETTINGS_FINAL_MODIFIER), false);
 		fSynchronized= asBoolean(fSettings.get(SETTINGS_SYNCHRONIZED_MODIFIER), false);
 		fGenerateComment= asBoolean(fSettings.get(SETTINGS_COMMENTS), generateCommentsDefault);
-		fInsertPositions= new ArrayList();
-		fLabels= new ArrayList();
+		fInsertPositions= new ArrayList<IJavaElement>();
+		fLabels= new ArrayList<String>();
 
 		IJavaElement[] members= fType.getChildren();
 
@@ -233,6 +233,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#close()
 	 */
+	@Override
 	public boolean close() {
 		fSettings.put(SETTINGS_VISIBILITY_MODIFIER, StringConverter.asString(fVisibilityModifier));
 		fSettings.put(SETTINGS_FINAL_MODIFIER, StringConverter.asString(fFinal));
@@ -254,6 +255,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	 * @param width  the width of the tree.
 	 * @param height the height of the tree.
 	 */
+	@Override
 	public void setSize(int width, int height) {
 		fWidth = width;
 		fHeight = height;
@@ -302,6 +304,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 		fSynchronized= value;
 	}
 
+	@Override
 	protected Composite createSelectionButtons(Composite composite) {
 		Composite buttonComposite= super.createSelectionButtons(composite);
 
@@ -315,6 +318,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 		return buttonComposite;
 	}
 
+	@Override
 	protected void buttonPressed(int buttonId) {
 		switch (buttonId) {
 			case IDialogConstants.OK_ID: {
@@ -334,6 +338,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	 * @param composite the parent composite
 	 * @return the label
 	 */
+	@Override
 	protected Label createMessageArea(Composite composite) {
 		if (getMessage() != null) {
 			Label label = new Label(composite,SWT.NONE);
@@ -347,6 +352,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	/*
 	 * @see Dialog#createDialogArea(Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -417,7 +423,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	}
 
 	protected void openCodeTempatePage(String id) {
-		HashMap arg= new HashMap();
+		HashMap<String, String> arg= new HashMap<String, String>();
 		arg.put(CodeTemplatePreferencePage.DATA_SELECT_TEMPLATE, id);
 		PreferencesUtil.createPropertyDialogOn(getShell(), fType.getJavaProject().getProject(), CodeTemplatePreferencePage.PROP_ID, null, arg).open();
 	}
@@ -481,8 +487,8 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 		return visibilityComposite;
 	}
 
-	private List convertToIntegerList(int[] array) {
-		List result= new ArrayList(array.length);
+	private List<Integer> convertToIntegerList(int[] array) {
+		List<Integer> result= new ArrayList<Integer>(array.length);
 		for (int i= 0; i < array.length; i++) {
 			result.add(new Integer(array[i]));
 		}
@@ -492,6 +498,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.dialogs.CheckedTreeSelectionDialog#create()
 	 */
+	@Override
 	public void create() {
 		super.create();
 
@@ -513,7 +520,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	}
 
 	protected Composite createVisibilityControl(Composite parent, final IVisibilityChangeListener visibilityChangeListener, int[] availableVisibilities, int correctVisibility) {
-		List allowedVisibilities= convertToIntegerList(availableVisibilities);
+		List<Integer> allowedVisibilities= convertToIntegerList(availableVisibilities);
 		if (allowedVisibilities.size() == 1)
 			return null;
 
@@ -547,6 +554,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 			radio.setSelection(visibilityCode.equals(initialVisibility));
 			radio.setEnabled(allowedVisibilities.contains(visibilityCode));
 			radio.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent event) {
 					visibilityChangeListener.visibilityChanged(((Integer)event.widget.getData()).intValue());
 				}
@@ -624,6 +632,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 		gd.widthHint= convertWidthInCharsToPixels(fWidth);
 		enterCombo.setLayoutData(gd);
 		enterCombo.addSelectionListener(new SelectionAdapter(){
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				int index= enterCombo.getSelectionIndex();
 				// Add persistence only if first or last method: http://bugs.eclipse.org/bugs/show_bug.cgi?id=38400
@@ -636,7 +645,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	}
 
 	private void fillWithPossibleInsertPositions(Combo combo) {
-		combo.setItems((String[]) fLabels.toArray(new String[fLabels.size()]));
+		combo.setItems(fLabels.toArray(new String[fLabels.size()]));
 		combo.select(fCurrentPositionIndex);
 	}
 
@@ -668,7 +677,7 @@ public class SourceActionDialog extends CheckedTreeSelectionDialog {
 	 * Determine where in the file to enter the newly created methods.
 	 */
 	public IJavaElement getElementPosition() {
-		return (IJavaElement) fInsertPositions.get(fCurrentPositionIndex);
+		return fInsertPositions.get(fCurrentPositionIndex);
 	}
 
 	public int getInsertOffset() throws JavaModelException {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/StatusInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/StatusInfo.java
index a281c8c..dd7031e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/StatusInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/StatusInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,6 +175,7 @@ public class StatusInfo implements IStatus {
 	 * Returns a string representation of the status, suitable
 	 * for debugging purposes only.
 	 */
+	@Override
 	public String toString() {
 		StringBuffer buf = new StringBuffer();
 		buf.append("StatusInfo "); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TableTextCellEditor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TableTextCellEditor.java
index 41e9d4b..e19714c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TableTextCellEditor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TableTextCellEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ public class TableTextCellEditor extends CellEditor {
 		fProperty= (String) tableViewer.getColumnProperties()[column];
 	}
 
+	@Override
 	public void activate() {
 		super.activate();
 		if (fActivationListener != null)
@@ -94,6 +95,7 @@ public class TableTextCellEditor extends CellEditor {
 				fProperty, newValue);
 	}
 
+	@Override
 	protected void focusLost() {
 		if (fContentAssistant != null && fContentAssistant.hasProposalPopupFocus()) {
 			// skip focus lost if it went to the content assist popup
@@ -153,14 +155,17 @@ public class TableTextCellEditor extends CellEditor {
     /* (non-Javadoc)
      * Method declared on CellEditor.
      */
-    protected Control createControl(Composite parent) {
+    @Override
+	protected Control createControl(Composite parent) {
         text= new Text(parent, getStyle());
         text.addSelectionListener(new SelectionAdapter() {
-            public void widgetDefaultSelected(SelectionEvent e) {
+            @Override
+			public void widgetDefaultSelected(SelectionEvent e) {
                 handleDefaultSelection(e);
             }
         });
 		text.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyPressed(KeyEvent e) {
 				// support switching rows while editing:
 				if (e.stateMask == SWT.MOD1 || e.stateMask == SWT.MOD2) {
@@ -208,7 +213,8 @@ public class TableTextCellEditor extends CellEditor {
 		});
         text.addKeyListener(new KeyAdapter() {
             // hook key pressed - see PR 14201
-            public void keyPressed(KeyEvent e) {
+            @Override
+			public void keyPressed(KeyEvent e) {
                 keyReleaseOccured(e);
 
                 // as a result of processing the above call, clients may have
@@ -232,14 +238,16 @@ public class TableTextCellEditor extends CellEditor {
         // use a key listener and a mouse listener to know when selection changes
         // may have occurred
         text.addMouseListener(new MouseAdapter() {
-            public void mouseUp(MouseEvent e) {
+            @Override
+			public void mouseUp(MouseEvent e) {
                 checkSelection();
                 checkDeleteable();
                 checkSelectable();
             }
         });
         text.addFocusListener(new FocusAdapter() {
-            public void focusLost(FocusEvent e) {
+            @Override
+			public void focusLost(FocusEvent e) {
             	e.display.asyncExec(new Runnable() {
 					public void run() {
 						// without the asyncExec, focus has not had a chance to go to the content assist proposals
@@ -256,7 +264,8 @@ public class TableTextCellEditor extends CellEditor {
 		return text;
     }
 
-    protected void fireCancelEditor() {
+    @Override
+	protected void fireCancelEditor() {
 		/* bug 58540: change signature refactoring interaction: validate as you type [refactoring] */
     	text.setText(fOriginalValue);
 		super.fireApplyEditorValue();
@@ -269,11 +278,13 @@ public class TableTextCellEditor extends CellEditor {
      *
      * @return the text string
      */
-    protected Object doGetValue() {
+    @Override
+	protected Object doGetValue() {
         return text.getText();
     }
 
-    protected void doSetFocus() {
+    @Override
+	protected void doSetFocus() {
         if (text != null) {
             text.selectAll();
             text.setFocus();
@@ -290,7 +301,8 @@ public class TableTextCellEditor extends CellEditor {
      *
      * @param value a text string (type <code>String</code>)
      */
-    protected void doSetValue(Object value) {
+    @Override
+	protected void doSetValue(Object value) {
         Assert.isTrue(text != null && (value instanceof String));
         text.removeModifyListener(getModifyListener());
         text.setText((String) value);
@@ -319,7 +331,8 @@ public class TableTextCellEditor extends CellEditor {
 		fireModifyEvent(text.getText()); // update model on-the-fly
     }
 
-    public LayoutData getLayoutData() {
+    @Override
+	public LayoutData getLayoutData() {
         return new LayoutData();
     }
 
@@ -329,38 +342,44 @@ public class TableTextCellEditor extends CellEditor {
         deactivate();
     }
 
-    public boolean isCopyEnabled() {
+    @Override
+	public boolean isCopyEnabled() {
         if (text == null || text.isDisposed())
             return false;
         return text.getSelectionCount() > 0;
     }
 
-    public boolean isCutEnabled() {
+    @Override
+	public boolean isCutEnabled() {
         if (text == null || text.isDisposed())
             return false;
         return text.getSelectionCount() > 0;
     }
 
-    public boolean isDeleteEnabled() {
+    @Override
+	public boolean isDeleteEnabled() {
         if (text == null || text.isDisposed())
             return false;
         return text.getSelectionCount() > 0
                 || text.getCaretPosition() < text.getCharCount();
     }
 
-    public boolean isPasteEnabled() {
+    @Override
+	public boolean isPasteEnabled() {
         if (text == null || text.isDisposed())
             return false;
         return true;
     }
 
-    public boolean isSelectAllEnabled() {
+    @Override
+	public boolean isSelectAllEnabled() {
         if (text == null || text.isDisposed())
             return false;
         return text.getCharCount() > 0;
     }
 
-    protected void keyReleaseOccured(KeyEvent keyEvent) {
+    @Override
+	protected void keyReleaseOccured(KeyEvent keyEvent) {
         if (keyEvent.character == '\r') { // Return key
             // Enter is handled in handleDefaultSelection.
             // Do not apply the editor value in response to an Enter key event
@@ -381,18 +400,21 @@ public class TableTextCellEditor extends CellEditor {
         super.keyReleaseOccured(keyEvent);
     }
 
-    public void performCopy() {
+    @Override
+	public void performCopy() {
         text.copy();
     }
 
-    public void performCut() {
+    @Override
+	public void performCut() {
         text.cut();
         checkSelection();
         checkDeleteable();
         checkSelectable();
     }
 
-    public void performDelete() {
+    @Override
+	public void performDelete() {
         if (text.getSelectionCount() > 0)
             // remove the contents of the current selection
             text.insert(""); //$NON-NLS-1$
@@ -409,14 +431,16 @@ public class TableTextCellEditor extends CellEditor {
         checkSelectable();
     }
 
-    public void performPaste() {
+    @Override
+	public void performPaste() {
         text.paste();
         checkSelection();
         checkDeleteable();
         checkSelectable();
     }
 
-    public void performSelectAll() {
+    @Override
+	public void performSelectAll() {
         text.selectAll();
         checkSelection();
         checkDeleteable();
@@ -425,6 +449,7 @@ public class TableTextCellEditor extends CellEditor {
     /*
 	 * @see org.eclipse.jface.viewers.CellEditor#dependsOnExternalFocusListener()
 	 */
+	@Override
 	protected boolean dependsOnExternalFocusListener() {
 		return false;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TextFieldNavigationHandler.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TextFieldNavigationHandler.java
index 3fafbdd..2e6589a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TextFieldNavigationHandler.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TextFieldNavigationHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -133,11 +133,13 @@ public class TextFieldNavigationHandler {
 				fLastSelection= getSelection();
 				fCaretPosition= fLastSelection.y;
 				fText.addKeyListener(new KeyAdapter() {
+					@Override
 					public void keyReleased(KeyEvent e) {
 						selectionChanged();
 					}
 				});
 				fText.addMouseListener(new MouseAdapter() {
+					@Override
 					public void mouseUp(MouseEvent e) {
 						selectionChanged();
 					}
@@ -145,22 +147,27 @@ public class TextFieldNavigationHandler {
 			}
 		}
 
+		@Override
 		public Control getControl() {
 			return fText;
 		}
 
+		@Override
 		public String getText() {
 			return fText.getText();
 		}
 
+		@Override
 		public void setText(String text) {
 			fText.setText(text);
 		}
 
+		@Override
 		public Point getSelection() {
 			return fText.getSelection();
 		}
 
+		@Override
 		public int getCaretPosition() {
 			if (BUG_106024_TEXT_SELECTION) {
 				selectionChanged();
@@ -170,6 +177,7 @@ public class TextFieldNavigationHandler {
 			}
 		}
 
+		@Override
 		public void setSelection(int start, int end) {
 			fText.setSelection(start, end);
 		}
@@ -182,26 +190,32 @@ public class TextFieldNavigationHandler {
 			fStyledText= styledText;
 		}
 
+		@Override
 		public Control getControl() {
 			return fStyledText;
 		}
 
+		@Override
 		public String getText() {
 			return fStyledText.getText();
 		}
 
+		@Override
 		public void setText(String text) {
 			fStyledText.setText(text);
 		}
 
+		@Override
 		public Point getSelection() {
 			return fStyledText.getSelection();
 		}
 
+		@Override
 		public int getCaretPosition() {
 			return fStyledText.getCaretOffset();
 		}
 
+		@Override
 		public void setSelection(int start, int end) {
 			fStyledText.setSelection(start, end);
 		}
@@ -216,39 +230,47 @@ public class TextFieldNavigationHandler {
 			fLastSelection= getSelection();
 			fCaretPosition= fLastSelection.y;
 			fCombo.addKeyListener(new KeyAdapter() {
+				@Override
 				public void keyReleased(KeyEvent e) {
 					selectionChanged();
 				}
 			});
 			fCombo.addMouseListener(new MouseAdapter() {
+				@Override
 				public void mouseUp(MouseEvent e) {
 					selectionChanged();
 				}
 			});
 		}
 
+		@Override
 		public Control getControl() {
 			return fCombo;
 		}
 
+		@Override
 		public String getText() {
 			return fCombo.getText();
 		}
 
+		@Override
 		public void setText(String text) {
 			fCombo.setText(text);
 		}
 
+		@Override
 		public Point getSelection() {
 			return fCombo.getSelection();
 		}
 
+		@Override
 		public int getCaretPosition() {
 			selectionChanged();
 			return fCaretPosition;
 //			return fCombo.getCaretPosition(); // not available: bug 103630
 		}
 
+		@Override
 		public void setSelection(int start, int end) {
 			fCombo.setSelection(new Point(start, end));
 		}
@@ -303,8 +325,9 @@ public class TextFieldNavigationHandler {
 				fKeyListener= new KeyAdapter() {
 					private final boolean IS_WORKAROUND= (fNavigable instanceof ComboNavigable)
 							|| (fNavigable instanceof TextNavigable && TextNavigable.BUG_106024_TEXT_SELECTION);
-					private List/*<Submission>*/ fSubmissions;
+					private List<Submission> fSubmissions;
 
+					@Override
 					public void keyPressed(KeyEvent e) {
 						if (IS_WORKAROUND) {
 							if (e.keyCode == SWT.ARROW_LEFT && e.stateMask == SWT.MOD2) {
@@ -336,8 +359,8 @@ public class TextFieldNavigationHandler {
 						int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(e);
 						KeySequence keySequence = KeySequence.getInstance(SWTKeySupport.convertAcceleratorToKeyStroke(accelerator));
 						getSubmissions();
-						for (Iterator iter= getSubmissions().iterator(); iter.hasNext();) {
-							Submission submission= (Submission) iter.next();
+						for (Iterator<Submission> iter= getSubmissions().iterator(); iter.hasNext();) {
+							Submission submission= iter.next();
 							TriggerSequence[] triggerSequences= submission.getTriggerSequences();
 							for (int i= 0; i < triggerSequences.length; i++) {
 								if (triggerSequences[i].equals(keySequence)) { // XXX does not work for multi-stroke bindings
@@ -349,11 +372,11 @@ public class TextFieldNavigationHandler {
 						}
 					}
 
-					private List/*<Submission>*/ getSubmissions() {
+					private List<Submission> getSubmissions() {
 						if (fSubmissions != null)
 							return fSubmissions;
 
-						fSubmissions= new ArrayList();
+						fSubmissions= new ArrayList<Submission>();
 
 						ICommandService commandService= (ICommandService) PlatformUI.getWorkbench().getAdapter(ICommandService.class);
 						IBindingService bindingService= (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
@@ -388,6 +411,7 @@ public class TextFieldNavigationHandler {
 						}
 
 						fSubmissions.add(new Submission(getKeyBindings(localBindingManager, commandService, ITextEditorActionDefinitionIds.SELECT_WORD_NEXT)) {
+							@Override
 							public void execute() {
 								fIterator.setText(fNavigable.getText());
 								int caretPosition= fNavigable.getCaretPosition();
@@ -403,6 +427,7 @@ public class TextFieldNavigationHandler {
 							}
 						});
 						fSubmissions.add(new Submission(getKeyBindings(localBindingManager, commandService, ITextEditorActionDefinitionIds.SELECT_WORD_PREVIOUS)) {
+							@Override
 							public void execute() {
 								fIterator.setText(fNavigable.getText());
 								int caretPosition= fNavigable.getCaretPosition();
@@ -418,6 +443,7 @@ public class TextFieldNavigationHandler {
 							}
 						});
 						fSubmissions.add(new Submission(getKeyBindings(localBindingManager, commandService, ITextEditorActionDefinitionIds.WORD_NEXT)) {
+							@Override
 							public void execute() {
 								fIterator.setText(fNavigable.getText());
 								int caretPosition= fNavigable.getCaretPosition();
@@ -428,6 +454,7 @@ public class TextFieldNavigationHandler {
 							}
 						});
 						fSubmissions.add(new Submission(getKeyBindings(localBindingManager, commandService, ITextEditorActionDefinitionIds.WORD_PREVIOUS)) {
+							@Override
 							public void execute() {
 								fIterator.setText(fNavigable.getText());
 								int caretPosition= fNavigable.getCaretPosition();
@@ -438,6 +465,7 @@ public class TextFieldNavigationHandler {
 							}
 						});
 						fSubmissions.add(new Submission(getKeyBindings(localBindingManager, commandService, ITextEditorActionDefinitionIds.DELETE_NEXT_WORD)) {
+							@Override
 							public void execute() {
 								Point selection= fNavigable.getSelection();
 								String text= fNavigable.getText();
@@ -459,6 +487,7 @@ public class TextFieldNavigationHandler {
 							}
 						});
 						fSubmissions.add(new Submission(getKeyBindings(localBindingManager, commandService, ITextEditorActionDefinitionIds.DELETE_PREVIOUS_WORD)) {
+							@Override
 							public void execute() {
 								Point selection= fNavigable.getSelection();
 								String text= fNavigable.getText();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/BasicSelectionTransferDragAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/BasicSelectionTransferDragAdapter.java
index d15bc79..aa77998 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/BasicSelectionTransferDragAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/BasicSelectionTransferDragAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ public class BasicSelectionTransferDragAdapter extends DragSourceAdapter impleme
 	/* non Java-doc
 	 * @see org.eclipse.swt.dnd.DragSourceListener#dragStart
 	 */
+	@Override
 	public void dragStart(DragSourceEvent event) {
 		ISelection selection= fProvider.getSelection();
 		LocalSelectionTransfer.getInstance().setSelection(selection);
@@ -64,6 +65,7 @@ public class BasicSelectionTransferDragAdapter extends DragSourceAdapter impleme
 	/* non Java-doc
 	 * @see org.eclipse.swt.dnd.DragSourceListener#dragSetData
 	 */
+	@Override
 	public void dragSetData(DragSourceEvent event) {
 		// For consistency set the data to the selection even though
 		// the selection is provided by the LocalSelectionTransfer
@@ -75,6 +77,7 @@ public class BasicSelectionTransferDragAdapter extends DragSourceAdapter impleme
 	/* non Java-doc
 	 * @see org.eclipse.swt.dnd.DragSourceListener#dragFinished
 	 */
+	@Override
 	public void dragFinished(DragSourceEvent event) {
 		LocalSelectionTransfer.getInstance().setSelection(null);
 		LocalSelectionTransfer.getInstance().setSelectionSetTime(0);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/EditorInputTransferDragAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/EditorInputTransferDragAdapter.java
index 749f979..13efed4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/EditorInputTransferDragAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/EditorInputTransferDragAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
 public class EditorInputTransferDragAdapter extends DragSourceAdapter implements TransferDragSourceListener {
 
 	private ISelectionProvider fProvider;
-	private ArrayList/*<EditorInputData>*/fEditorInputDatas;
+	private ArrayList<EditorInputData> fEditorInputDatas;
 
 	public EditorInputTransferDragAdapter(ISelectionProvider provider) {
 		Assert.isNotNull(provider);
@@ -56,13 +56,14 @@ public class EditorInputTransferDragAdapter extends DragSourceAdapter implements
 	/*
 	 * @see org.eclipse.swt.dnd.DragSourceListener#dragStart
 	 */
+	@Override
 	public void dragStart(DragSourceEvent event) {
-		fEditorInputDatas= new ArrayList();
+		fEditorInputDatas= new ArrayList<EditorInputData>();
 
 		ISelection selection= fProvider.getSelection();
 		if (selection instanceof IStructuredSelection) {
 			IStructuredSelection structuredSelection= (IStructuredSelection) selection;
-			for (Iterator iter= structuredSelection.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter= structuredSelection.iterator(); iter.hasNext();) {
 				Object element= iter.next();
 				IEditorInput editorInput= EditorUtility.getEditorInput(element);
 				if (editorInput != null && editorInput.getPersistable() != null) {
@@ -87,6 +88,7 @@ public class EditorInputTransferDragAdapter extends DragSourceAdapter implements
 	/*
 	 * @see org.eclipse.swt.dnd.DragSourceListener#dragSetData
 	 */
+	@Override
 	public void dragSetData(DragSourceEvent event) {
 		if (EditorInputTransfer.getInstance().isSupportedType(event.dataType) && fEditorInputDatas.size() > 0) {
 			event.data= fEditorInputDatas.toArray(new EditorInputData[fEditorInputDatas.size()]);
@@ -97,6 +99,7 @@ public class EditorInputTransferDragAdapter extends DragSourceAdapter implements
 	/*
 	 * @see org.eclipse.swt.dnd.DragSourceListener#dragFinished
 	 */
+	@Override
 	public void dragFinished(DragSourceEvent event) {
 		fEditorInputDatas= null;
 		Assert.isTrue(event.detail != DND.DROP_MOVE);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDragAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDragAdapter.java
index 37ec9b1..07db509 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDragAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDragAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public class JdtViewerDragAdapter extends DelegatingDragAdapter {
 		fViewer= viewer;
 	}
 
+	@Override
 	public void dragStart(DragSourceEvent event) {
 		IStructuredSelection selection= (IStructuredSelection)fViewer.getSelection();
 		if (selection.isEmpty()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDropAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDropAdapter.java
index 09c388e..582107a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/JdtViewerDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -191,7 +191,8 @@ public abstract class JdtViewerDropAdapter extends DropTargetAdapter {
      * The drag has entered this widget's region.  See
      * if the drop should be allowed.
      */
-    public void dragEnter(DropTargetEvent event) {
+    @Override
+	public void dragEnter(DropTargetEvent event) {
         currentTarget = determineTarget(event);
         currentLocation = determineLocation(event);
         lastValidOperation = event.detail;
@@ -203,7 +204,8 @@ public abstract class JdtViewerDropAdapter extends DropTargetAdapter {
      * The drop operation has changed, see if the action
      * should still be enabled.
      */
-    public void dragOperationChanged(DropTargetEvent event) {
+    @Override
+	public void dragOperationChanged(DropTargetEvent event) {
         currentTarget = determineTarget(event);
         lastValidOperation = event.detail;
         doDropValidation(event);
@@ -215,7 +217,8 @@ public abstract class JdtViewerDropAdapter extends DropTargetAdapter {
      * target item has changed, notify the action and check
      * that it is still enabled.
      */
-    public void dragOver(DropTargetEvent event) {
+    @Override
+	public void dragOver(DropTargetEvent event) {
         //use newly revealed item as target if scrolling occurs
         Object target = determineTarget(event);
 
@@ -235,7 +238,8 @@ public abstract class JdtViewerDropAdapter extends DropTargetAdapter {
      * Method declared on DropTargetAdapter.
      * The user has dropped something on the desktop viewer.
      */
-    public void drop(DropTargetEvent event) {
+    @Override
+	public void drop(DropTargetEvent event) {
         currentLocation = determineLocation(event);
 
         //perform the drop behavior
@@ -249,7 +253,8 @@ public abstract class JdtViewerDropAdapter extends DropTargetAdapter {
      * Method declared on DropTargetAdapter.
      * Last chance for the action to disable itself
      */
-    public void dropAccept(DropTargetEvent event) {
+    @Override
+	public void dropAccept(DropTargetEvent event) {
         event.detail= determineOperation(currentTarget, event.detail, event.currentDataType, event.operations);
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ResourceTransferDragAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ResourceTransferDragAdapter.java
index f7edbfa..542db06 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ResourceTransferDragAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ResourceTransferDragAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public class ResourceTransferDragAdapter extends DragSourceAdapter implements Tr
 
 	private ISelectionProvider fProvider;
 
-	private static final List EMPTY_LIST= new ArrayList(0);
+	private static final List<IResource> EMPTY_LIST= new ArrayList<IResource>(0);
 
 	/**
 	 * Creates a new ResourceTransferDragAdapter for the given selection
@@ -72,15 +72,18 @@ public class ResourceTransferDragAdapter extends DragSourceAdapter implements Tr
 		return ResourceTransfer.getInstance();
 	}
 
+	@Override
 	public void dragStart(DragSourceEvent event) {
 		event.doit= convertSelection().size() > 0;
 	}
 
+	@Override
 	public void dragSetData(DragSourceEvent event) {
-		List resources= convertSelection();
+		List<IResource> resources= convertSelection();
 		event.data= resources.toArray(new IResource[resources.size()]);
 	}
 
+	@Override
 	public void dragFinished(DragSourceEvent event) {
 		if (!event.doit)
 			return;
@@ -90,13 +93,13 @@ public class ResourceTransferDragAdapter extends DragSourceAdapter implements Tr
 		}
 	}
 
-	private List convertSelection() {
+	private List<IResource> convertSelection() {
 		ISelection s= fProvider.getSelection();
 		if (!(s instanceof IStructuredSelection))
 			return EMPTY_LIST;
 		IStructuredSelection selection= (IStructuredSelection)s;
-		List result= new ArrayList(selection.size());
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		List<IResource> result= new ArrayList<IResource>(selection.size());
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			IResource resource= null;
 			if (element instanceof IJavaElement) {
@@ -117,9 +120,9 @@ public class ResourceTransferDragAdapter extends DragSourceAdapter implements Tr
 			IJavaStatusConstants.INTERNAL_ERROR,
 			JavaUIMessages.ResourceTransferDragAdapter_cannot_delete_resource,
 			null);
-		List resources= convertSelection();
-		for (Iterator iter= resources.iterator(); iter.hasNext();) {
-			IResource resource= (IResource) iter.next();
+		List<IResource> resources= convertSelection();
+		for (Iterator<IResource> iter= resources.iterator(); iter.hasNext();) {
+			IResource resource= iter.next();
 			try {
 				resource.delete(true, null);
 			} catch (CoreException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ViewerInputDropAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ViewerInputDropAdapter.java
index 887d03b..83244bd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ViewerInputDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dnd/ViewerInputDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public abstract class ViewerInputDropAdapter extends SelectionTransferDropAdapte
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int determineOperation(Object target, int operation, TransferData transferType, int operations) {
 
 		setSelectionFeedbackEnabled(true);
@@ -61,6 +62,7 @@ public abstract class ViewerInputDropAdapter extends SelectionTransferDropAdapte
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performDrop(Object data) {
 		setSelectionFeedbackEnabled(true);
 		setExpandEnabled(true);
@@ -81,6 +83,7 @@ public abstract class ViewerInputDropAdapter extends SelectionTransferDropAdapte
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean isEnabled(DropTargetEvent event) {
 		return true;
 	}
@@ -88,6 +91,7 @@ public abstract class ViewerInputDropAdapter extends SelectionTransferDropAdapte
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object determineTarget(DropTargetEvent event) {
 		if (event.item == null)
 			return super.determineTarget(event);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/AnnotationFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/AnnotationFilter.java
index 0a09f1b..e18f01a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/AnnotationFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/AnnotationFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class AnnotationFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IType) {
 			try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClassFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClassFilter.java
index 03783c4..0824ffc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClassFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClassFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class ClassFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IType) {
 			try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClosedProjectFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClosedProjectFilter.java
index 5375968..391d9de 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClosedProjectFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ClosedProjectFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class ClosedProjectFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IJavaElement)
 			return ((IJavaElement)element).getJavaProject().getProject().isOpen();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ContainedLibraryFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ContainedLibraryFilter.java
index edf8e9c..cd5979d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ContainedLibraryFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ContainedLibraryFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public class ContainedLibraryFilter extends ViewerFilter {
 	/* (non-Javadoc)
 	 * Method declared on ViewerFilter.
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (element instanceof IPackageFragmentRoot) {
 			IPackageFragmentRoot root= (IPackageFragmentRoot)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/CustomFiltersDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/CustomFiltersDialog.java
index 65191b5..ea40f07 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/CustomFiltersDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/CustomFiltersDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,7 +68,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 	private Button fEnableUserDefinedPatterns;
 	private Text fUserDefinedPatterns;
 
-	private Stack fFilterDescriptorChangeHistory;
+	private Stack<FilterDescriptor> fFilterDescriptorChangeHistory;
 
 
 	/**
@@ -98,9 +98,10 @@ public class CustomFiltersDialog extends SelectionDialog {
 		fEnabledFilterIds= enabledFilterIds;
 
 		fBuiltInFilters= FilterDescriptor.getFilterDescriptors(fViewId);
-		fFilterDescriptorChangeHistory= new Stack();
+		fFilterDescriptorChangeHistory= new Stack<FilterDescriptor>();
 	}
 
+	@Override
 	protected void configureShell(Shell shell) {
 		setTitle(FilterMessages.CustomFiltersDialog_title);
 		setMessage(FilterMessages.CustomFiltersDialog_filterList_label);
@@ -113,6 +114,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		initializeDialogUnits(parent);
 		// create a composite with standard margins and spacing
@@ -150,6 +152,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 		fUserDefinedPatterns.setEnabled(fEnablePatterns);
 		info.setEnabled(fEnablePatterns);
 		fEnableUserDefinedPatterns.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				boolean state= fEnableUserDefinedPatterns.getSelection();
 				fUserDefinedPatterns.setEnabled(state);
@@ -185,7 +188,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 		fCheckBoxList.setInput(fBuiltInFilters);
 		setInitialSelections(getEnabledFilterDescriptors());
 
-		List initialSelection= getInitialElementSelections();
+		List<Object[]> initialSelection= getInitialElementSelections();
 		if (initialSelection != null && !initialSelection.isEmpty())
 			checkInitialSelections();
 
@@ -216,7 +219,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 					// renew if already touched
 					if (fFilterDescriptorChangeHistory.contains(element))
 						fFilterDescriptorChangeHistory.remove(element);
-					fFilterDescriptorChangeHistory.push(element);
+					fFilterDescriptorChangeHistory.push((FilterDescriptor) element);
 				}
 			}});
 
@@ -237,6 +240,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 		Button selectButton= createButton(buttonComposite, IDialogConstants.SELECT_ALL_ID, label, false);
 		SWTUtil.setButtonDimensionHint(selectButton);
 		SelectionListener listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fCheckBoxList.setAllChecked(true);
 				fFilterDescriptorChangeHistory.clear();
@@ -251,6 +255,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 		Button deselectButton= createButton(buttonComposite, IDialogConstants.DESELECT_ALL_ID, label, false);
 		SWTUtil.setButtonDimensionHint(deselectButton);
 		listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fCheckBoxList.setAllChecked(false);
 				fFilterDescriptorChangeHistory.clear();
@@ -262,14 +267,15 @@ public class CustomFiltersDialog extends SelectionDialog {
 	}
 
 	private void checkInitialSelections() {
-		Iterator itemsToCheck= getInitialElementSelections().iterator();
+		Iterator<Object[]> itemsToCheck= getInitialElementSelections().iterator();
 		while (itemsToCheck.hasNext())
 			fCheckBoxList.setChecked(itemsToCheck.next(),true);
 	}
 
+	@Override
 	protected void okPressed() {
 		if (fBuiltInFilters != null) {
-			ArrayList result= new ArrayList();
+			ArrayList<FilterDescriptor> result= new ArrayList<FilterDescriptor>();
 			for (int i= 0; i < fBuiltInFilters.length; ++i) {
 				if (fCheckBoxList.getChecked(fBuiltInFilters[i]))
 					result.add(fBuiltInFilters[i]);
@@ -282,9 +288,11 @@ public class CustomFiltersDialog extends SelectionDialog {
 	private ILabelProvider createLabelPrivder() {
 		return
 			new LabelProvider() {
+				@Override
 				public Image getImage(Object element) {
 					return null;
 				}
+				@Override
 				public String getText(Object element) {
 					if (element instanceof FilterDescriptor)
 						return ((FilterDescriptor)element).getName();
@@ -296,6 +304,7 @@ public class CustomFiltersDialog extends SelectionDialog {
 
 	// ---------- result handling ----------
 
+	@Override
 	protected void setResult(List newResult) {
 		super.setResult(newResult);
 		if (fUserDefinedPatterns.getText().length() > 0) {
@@ -320,10 +329,10 @@ public class CustomFiltersDialog extends SelectionDialog {
 	 */
 	public String[] getEnabledFilterIds() {
 		Object[] result= getResult();
-		Set enabledIds= new HashSet(result.length);
+		Set<String> enabledIds= new HashSet<String>(result.length);
 		for (int i= 0; i < result.length; i++)
 			enabledIds.add(((FilterDescriptor)result[i]).getId());
-		return (String[]) enabledIds.toArray(new String[enabledIds.size()]);
+		return enabledIds.toArray(new String[enabledIds.size()]);
 	}
 
 	/**
@@ -337,27 +346,27 @@ public class CustomFiltersDialog extends SelectionDialog {
 	 * @return a stack with the filter descriptor check history
 	 * @since 3.0
 	 */
-	public Stack getFilterDescriptorChangeHistory() {
+	public Stack<FilterDescriptor> getFilterDescriptorChangeHistory() {
 		return fFilterDescriptorChangeHistory;
 	}
 
 	private FilterDescriptor[] getEnabledFilterDescriptors() {
 		FilterDescriptor[] filterDescs= fBuiltInFilters;
-		List result= new ArrayList(filterDescs.length);
-		List enabledFilterIds= Arrays.asList(fEnabledFilterIds);
+		List<FilterDescriptor> result= new ArrayList<FilterDescriptor>(filterDescs.length);
+		List<String> enabledFilterIds= Arrays.asList(fEnabledFilterIds);
 		for (int i= 0; i < filterDescs.length; i++) {
 			String id= filterDescs[i].getId();
 			if (enabledFilterIds.contains(id))
 				result.add(filterDescs[i]);
 		}
-		return (FilterDescriptor[])result.toArray(new FilterDescriptor[result.size()]);
+		return result.toArray(new FilterDescriptor[result.size()]);
 	}
 
 
 	public static String[] convertFromString(String patterns, String separator) {
 		StringTokenizer tokenizer= new StringTokenizer(patterns, separator, true);
 		int tokenCount= tokenizer.countTokens();
-		List result= new ArrayList(tokenCount);
+		List<String> result= new ArrayList<String>(tokenCount);
 		boolean escape= false;
 		boolean append= false;
 		while (tokenizer.hasMoreTokens()) {
@@ -378,15 +387,15 @@ public class CustomFiltersDialog extends SelectionDialog {
 				escape= false;
 			}
 		}
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
-	private static void addPattern(List list, String pattern) {
+	private static void addPattern(List<String> list, String pattern) {
 		if (list.isEmpty())
 			list.add(pattern);
 		else {
 			int index= list.size() - 1;
-			list.set(index, ((String)list.get(index)) + pattern);
+			list.set(index, list.get(index) + pattern);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyInnerPackageFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyInnerPackageFilter.java
index 975dfec..0863af3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyInnerPackageFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyInnerPackageFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class EmptyInnerPackageFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IPackageFragment) {
 			IPackageFragment pkg= (IPackageFragment)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyLibraryContainerFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyLibraryContainerFilter.java
index 6b2a695..e87fbd6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyLibraryContainerFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyLibraryContainerFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class EmptyLibraryContainerFilter extends ViewerFilter {
 	/* (non-Javadoc)
 	 * Method declared on ViewerFilter.
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (element instanceof PackageFragmentRootContainer && viewer instanceof ProblemTreeViewer) {
 			return ((ProblemTreeViewer) viewer).hasFilteredChildren(element);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyPackageFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyPackageFilter.java
index e346b17..27435b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyPackageFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EmptyPackageFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class EmptyPackageFilter extends ViewerFilter {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IPackageFragment) {
 			IPackageFragment pkg= (IPackageFragment)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EnumFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EnumFilter.java
index a5c42fb..c0b364e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EnumFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/EnumFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class EnumFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IType) {
 			try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/FilterDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/FilterDescriptor.java
index c52c97b..0b180f4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/FilterDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/FilterDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ import org.eclipse.jdt.ui.JavaUI;
  *
  * since 2.0
  */
-public class FilterDescriptor implements Comparable, IPluginContribution {
+public class FilterDescriptor implements Comparable<FilterDescriptor>, IPluginContribution {
 
 	private static String PATTERN_FILTER_ID_PREFIX= "_patternFilterId_"; //$NON-NLS-1$
 
@@ -90,7 +90,7 @@ public class FilterDescriptor implements Comparable, IPluginContribution {
 	 */
 	public static FilterDescriptor[] getFilterDescriptors(String targetId) {
 		FilterDescriptor[] filterDescs= FilterDescriptor.getFilterDescriptors();
-		List result= new ArrayList(filterDescs.length);
+		List<FilterDescriptor> result= new ArrayList<FilterDescriptor>(filterDescs.length);
 		for (int i= 0; i < filterDescs.length; i++) {
 			String tid= filterDescs[i].getTargetId();
 			if (WorkbenchActivityHelper.filterItem(filterDescs[i]))
@@ -98,7 +98,7 @@ public class FilterDescriptor implements Comparable, IPluginContribution {
 			if (tid == null || tid.equals(targetId))
 				result.add(filterDescs[i]);
 		}
-		return (FilterDescriptor[])result.toArray(new FilterDescriptor[result.size()]);
+		return result.toArray(new FilterDescriptor[result.size()]);
 	}
 
 	/**
@@ -241,14 +241,11 @@ public class FilterDescriptor implements Comparable, IPluginContribution {
 		return strVal == null || Boolean.valueOf(strVal).booleanValue();
 	}
 
-	/*
-	 * Implements a method from IComparable
+	/* (non-Javadoc)
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
 	 */
-	public int compareTo(Object o) {
-		if (o instanceof FilterDescriptor)
-			return Collator.getInstance().compare(getName(), ((FilterDescriptor)o).getName());
-		else
-			return Integer.MIN_VALUE;
+	public int compareTo(FilterDescriptor o) {
+		return Collator.getInstance().compare(getName(), o.getName());
 	}
 
 	//---- initialization ---------------------------------------------------
@@ -259,8 +256,8 @@ public class FilterDescriptor implements Comparable, IPluginContribution {
 	 * @return new filter descriptors
 	 */
 	private static FilterDescriptor[] createFilterDescriptors(IConfigurationElement[] elements) {
-		List result= new ArrayList(5);
-		Set descIds= new HashSet(5);
+		List<FilterDescriptor> result= new ArrayList<FilterDescriptor>(5);
+		Set<String> descIds= new HashSet<String>(5);
 		for (int i= 0; i < elements.length; i++) {
 			final IConfigurationElement element= elements[i];
 			if (FILTER_TAG.equals(element.getName())) {
@@ -278,7 +275,7 @@ public class FilterDescriptor implements Comparable, IPluginContribution {
 				}
 			}
 		}
-		return (FilterDescriptor[])result.toArray(new FilterDescriptor[result.size()]);
+		return result.toArray(new FilterDescriptor[result.size()]);
 	}
 
 	public String getLocalId() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ImportDeclarationFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ImportDeclarationFilter.java
index a8b5c55..25522e7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ImportDeclarationFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/ImportDeclarationFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class ImportDeclarationFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		return !((element instanceof IImportContainer) || (element instanceof IImportDeclaration));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InnerClassFilesFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InnerClassFilesFilter.java
index 618beb3..94adb95 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InnerClassFilesFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InnerClassFilesFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ public class InnerClassFilesFilter extends ViewerFilter {
 	public InnerClassFilesFilter() {
 	}
 
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (element instanceof IClassFile) {
 			IClassFile classFile= (IClassFile) element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InterfaceFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InterfaceFilter.java
index 75b7194..ed700c0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InterfaceFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/InterfaceFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class InterfaceFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IType) {
 			try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaFileFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaFileFilter.java
index 714377e..07f767d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaFileFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaFileFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class JavaFileFilter extends ViewerFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof ITypeRoot)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/LibraryFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/LibraryFilter.java
index 9686d4b..3111225 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/LibraryFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/LibraryFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class LibraryFilter extends ViewerFilter {
 	/* (non-Javadoc)
 	 * Method declared on ViewerFilter.
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (element instanceof IPackageFragmentRoot) {
 			IPackageFragmentRoot root= (IPackageFragmentRoot)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NamePatternFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NamePatternFilter.java
index a01d7e8..500e436 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NamePatternFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NamePatternFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class NamePatternFilter extends ViewerFilter {
 	/* (non-Javadoc)
 	 * Method declared on ViewerFilter.
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (fMatchers.length == 0) {
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NoPackageContainingFoldersFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NoPackageContainingFoldersFilter.java
index cf611b3..f007c86 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NoPackageContainingFoldersFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NoPackageContainingFoldersFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ public class NoPackageContainingFoldersFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IFolder) {
 			try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaElementFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaElementFilter.java
index 12a30ec..385a826 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaElementFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaElementFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public class NonJavaElementFilter extends ViewerFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IJavaElement)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaProjectsFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaProjectsFilter.java
index a6f67ed..707e2fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaProjectsFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonJavaProjectsFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class NonJavaProjectsFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IJavaProject)
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonPublicTypeFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonPublicTypeFilter.java
index b8437f4..7c89196 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonPublicTypeFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonPublicTypeFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ public class NonPublicTypeFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IType) {
 			IType type= (IType)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonSharedProjectFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonSharedProjectFilter.java
index f102821..9615f1f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonSharedProjectFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/NonSharedProjectFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,9 +10,11 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.filters;
 
-
 import org.eclipse.team.core.RepositoryProvider;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.QualifiedName;
+
 import org.eclipse.core.resources.IProject;
 
 import org.eclipse.jface.viewers.Viewer;
@@ -20,6 +22,7 @@ import org.eclipse.jface.viewers.ViewerFilter;
 
 import org.eclipse.jdt.core.IJavaProject;
 
+
 /**
  * Filters non-shared projects and Java projects. Non-shared projects are
  * projects that are not controlled by a team provider.
@@ -29,8 +32,17 @@ import org.eclipse.jdt.core.IJavaProject;
 public class NonSharedProjectFilter extends ViewerFilter {
 
 	/*
+	 * Layer breaker needed to identify imported PDE project's as non-shared,
+	 * see https://bugs.eclipse.org/316269 for details.
+	 */
+	private static final String PDE_NATURE_ID= "org.eclipse.pde.PluginNature"; //$NON-NLS-1$
+	private static final QualifiedName EXTERNAL_PDE_PROJECT_PROPERTY= new QualifiedName("org.eclipse.pde.core", "imported"); //$NON-NLS-1$ //$NON-NLS-2$
+
+
+	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IProject)
 			return isSharedProject((IProject)element);
@@ -41,7 +53,16 @@ public class NonSharedProjectFilter extends ViewerFilter {
 		return true;
 	}
 
-	private boolean isSharedProject(IProject project) {
-		return !project.isAccessible() || RepositoryProvider.isShared(project);
+	private static boolean isSharedProject(IProject project) {
+		return !project.isAccessible() || RepositoryProvider.isShared(project) && !isBinaryPDEProject(project);
 	}
+
+	private static boolean isBinaryPDEProject(IProject project) {
+		try {
+			return project.hasNature(PDE_NATURE_ID) && project.getPersistentProperty(EXTERNAL_PDE_PROJECT_PROPERTY) != null;
+		} catch (CoreException e) {
+			return false;
+		}
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/OutputFolderFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/OutputFolderFilter.java
index edca76a..188923e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/OutputFolderFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/OutputFolderFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class OutputFolderFilter extends ViewerFilter {
 	 * @return <code>true</code> if element should be included
 	 * @since 3.0
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IFolder) {
 			IFolder folder= (IFolder)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/PackageDeclarationFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/PackageDeclarationFilter.java
index 69ae929..1b7d02e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/PackageDeclarationFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/PackageDeclarationFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ public class PackageDeclarationFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		return !(element instanceof IPackageDeclaration);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/SyntheticMembersFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/SyntheticMembersFilter.java
index 735f985..36629b2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/SyntheticMembersFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/SyntheticMembersFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.jdt.core.JavaModelException;
  * @since 3.1
  */
 public class SyntheticMembersFilter extends ViewerFilter {
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (!(element instanceof IMember))
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java
index 75db6ca..9688ffd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@ public abstract class AbstractCleanUp implements ICleanUp {
 	protected AbstractCleanUp() {
 	}
 
-	protected AbstractCleanUp(Map settings) {
+	protected AbstractCleanUp(Map<String, String> settings) {
 		setOptions(new MapCleanUpOptions(settings));
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractMultiFix.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractMultiFix.java
index 107780a..1140c04 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractMultiFix.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractMultiFix.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,10 +30,11 @@ public abstract class AbstractMultiFix extends AbstractCleanUp implements IMulti
 	protected AbstractMultiFix() {
 	}
 
-	protected AbstractMultiFix(Map settings) {
+	protected AbstractMultiFix(Map<String, String> settings) {
 		super(settings);
 	}
 
+	@Override
 	public final ICleanUpFix createFix(CleanUpContext context) throws CoreException {
 		CompilationUnit unit= context.getAST();
 		if (unit == null)
@@ -96,7 +97,7 @@ public abstract class AbstractMultiFix extends AbstractCleanUp implements IMulti
 	 * @return problem locations
 	 */
 	protected static IProblemLocation[] filter(IProblemLocation[] problems, int[] problemIds) {
-		ArrayList result= new ArrayList();
+		ArrayList<IProblemLocation> result= new ArrayList<IProblemLocation>();
 
 		for (int i= 0; i < problems.length; i++) {
 			IProblemLocation problem= problems[i];
@@ -105,12 +106,12 @@ public abstract class AbstractMultiFix extends AbstractCleanUp implements IMulti
 			}
 		}
 
-		return (IProblemLocation[]) result.toArray(new IProblemLocation[result.size()]);
+		return result.toArray(new IProblemLocation[result.size()]);
 	}
 
-	private static boolean contains(ArrayList problems, IProblemLocation problem) {
+	private static boolean contains(ArrayList<IProblemLocation> problems, IProblemLocation problem) {
 		for (int i= 0; i < problems.size(); i++) {
-			IProblemLocation existing= (IProblemLocation) problems.get(i);
+			IProblemLocation existing= problems.get(i);
 			if (existing.getProblemId() == problem.getProblemId() && existing.getOffset() == problem.getOffset() && existing.getLength() == problem.getLength()) {
 				return true;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java
index 18d9165..2d06335 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,9 +79,9 @@ import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpProfileVersioner;
 import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpTabPage;
 import org.eclipse.jdt.internal.ui.preferences.formatter.IModifyDialogTabPage;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager;
-import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.CustomProfile;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile;
+import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
@@ -96,7 +96,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 
 	private static class ProjectProfileLableProvider extends LabelProvider implements ITableLabelProvider {
 
-		private Hashtable fProfileIdsTable;
+		private Hashtable<String, Profile> fProfileIdsTable;
 
 		/**
 		 * {@inheritDoc}
@@ -116,8 +116,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 				if (fProfileIdsTable == null)
 		    		fProfileIdsTable= loadProfiles();
 
-				InstanceScope instanceScope= new InstanceScope();
-	    		IEclipsePreferences instancePreferences= instanceScope.getNode(JavaUI.ID_PLUGIN);
+				IEclipsePreferences instancePreferences= InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN);
 
 	    		final String workbenchProfileId;
 	    		if (instancePreferences.get(CleanUpConstants.CLEANUP_PROFILE, null) != null) {
@@ -131,31 +130,30 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 			return null;
 		}
 
-		private Hashtable loadProfiles() {
-    		List list= CleanUpPreferenceUtil.loadProfiles(new InstanceScope());
-
-    		Hashtable profileIdsTable= new Hashtable();
-    		for (Iterator iterator= list.iterator(); iterator.hasNext();) {
-	            Profile profile= (Profile)iterator.next();
+		private Hashtable<String, Profile> loadProfiles() {
+    		List<Profile> list= CleanUpPreferenceUtil.loadProfiles(InstanceScope.INSTANCE);
+    		Hashtable<String, Profile> profileIdsTable= new Hashtable<String, Profile>();
+    		for (Iterator<Profile> iterator= list.iterator(); iterator.hasNext();) {
+	            Profile profile= iterator.next();
 	            profileIdsTable.put(profile.getID(), profile);
             }
 
     		return profileIdsTable;
         }
 
-		private String getProjectProfileName(final IJavaProject project, Hashtable profileIdsTable, String workbenchProfileId) {
+		private String getProjectProfileName(final IJavaProject project, Hashtable<String, Profile> profileIdsTable, String workbenchProfileId) {
 			ProjectScope projectScope= new ProjectScope(project.getProject());
 	        IEclipsePreferences node= projectScope.getNode(JavaUI.ID_PLUGIN);
 	        String id= node.get(CleanUpConstants.CLEANUP_PROFILE, null);
 			if (id == null) {
-	        	Profile profile= (Profile)profileIdsTable.get(workbenchProfileId);
+	        	Profile profile= profileIdsTable.get(workbenchProfileId);
 		        if (profile != null) {
 		        	return profile.getName();
 		        } else {
 		        	return MultiFixMessages.CleanUpRefactoringWizard_unknownProfile_Name;
 		        }
 	        } else {
-		        Profile profile= (Profile)profileIdsTable.get(id);
+		        Profile profile= profileIdsTable.get(id);
 		        if (profile != null) {
 		        	return profile.getName();
 		        } else {
@@ -175,11 +173,12 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 
 			private static final String CLEAN_UP_SELECTION_PREFERENCE_KEY= "clean_up_selection_dialog"; //$NON-NLS-1$
 
-			private WizardCleanUpSelectionDialog(Shell parent, Map settings) {
+			private WizardCleanUpSelectionDialog(Shell parent, Map<String, String> settings) {
 				super(parent, settings, MultiFixMessages.CleanUpRefactoringWizard_CustomCleanUpsDialog_title);
 			}
 
-			protected NamedCleanUpTabPage[] createTabPages(Map workingValues) {
+			@Override
+			protected NamedCleanUpTabPage[] createTabPages(Map<String, String> workingValues) {
 				CleanUpTabPageDescriptor[] descriptors= JavaPlugin.getDefault().getCleanUpRegistry().getCleanUpTabPageDescriptors(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
 
 				NamedCleanUpTabPage[] result= new NamedCleanUpTabPage[descriptors.length];
@@ -198,20 +197,23 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 				return result;
 			}
 
+			@Override
 			protected String getPreferenceKeyPrefix() {
 				return CLEAN_UP_SELECTION_PREFERENCE_KEY;
 			}
 
+			@Override
 			protected String getSelectionCountMessage(int selectionCount, int size) {
 				return Messages.format(MultiFixMessages.CleanUpRefactoringWizard_XofYCleanUpsSelected_message, new Object[] {new Integer(selectionCount), new Integer(size)});
 			}
 
+			@Override
 			protected String getEmptySelectionMessage() {
 				return MultiFixMessages.CleanUpRefactoringWizard_EmptySelection_message;
 			}
 		}
 
-		private static final class ProfileTableAdapter implements IListAdapter {
+		private static final class ProfileTableAdapter implements IListAdapter<IJavaProject> {
 	        private final ProjectProfileLableProvider fProvider;
 			private final Shell fShell;
 
@@ -220,24 +222,24 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 				fShell= shell;
 	        }
 
-	        public void customButtonPressed(ListDialogField field, int index) {
+	        public void customButtonPressed(ListDialogField<IJavaProject> field, int index) {
 	        	openPropertyDialog(field);
 	        }
 
-	        public void doubleClicked(ListDialogField field) {
+	        public void doubleClicked(ListDialogField<IJavaProject> field) {
 				openPropertyDialog(field);
 	        }
 
-	        private void openPropertyDialog(ListDialogField field) {
-	            IJavaProject project= (IJavaProject)field.getSelectedElements().get(0);
+	        private void openPropertyDialog(ListDialogField<IJavaProject> field) {
+	            IJavaProject project= field.getSelectedElements().get(0);
 	        	PreferencesUtil.createPropertyDialogOn(fShell, project, CleanUpPreferencePage.PROP_ID, null, null).open();
-	        	List selectedElements= field.getSelectedElements();
+	        	List<?> selectedElements= field.getSelectedElements();
 	        	fProvider.reset();
 	        	field.refresh();
 	        	field.selectElements(new StructuredSelection(selectedElements));
             }
 
-	        public void selectionChanged(ListDialogField field) {
+	        public void selectionChanged(ListDialogField<IJavaProject> field) {
 	        	if (field.getSelectedElements().size() != 1) {
 	        		field.enableButton(0, false);
 	        	} else {
@@ -249,7 +251,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 		private static final String ENCODING= "UTF-8"; //$NON-NLS-1$
 
 		private final CleanUpRefactoring fCleanUpRefactoring;
-		private Map fCustomSettings;
+		private Map<String, String> fCustomSettings;
 		private SelectionButtonDialogField fUseCustomField;
 
 		private ControlEnableState fEnableState;
@@ -287,14 +289,15 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 			useProfile.doFillIntoGrid(composite, 2);
 
 			ProjectProfileLableProvider tableLabelProvider= new ProjectProfileLableProvider();
-			IListAdapter listAdapter= new ProfileTableAdapter(tableLabelProvider, getShell());
+			IListAdapter<IJavaProject> listAdapter= new ProfileTableAdapter(tableLabelProvider, getShell());
 			String[] buttons= new String[] {
 				MultiFixMessages.CleanUpRefactoringWizard_Configure_Button
 			};
-			final ListDialogField settingsField= new ListDialogField(listAdapter, buttons, tableLabelProvider) {
+			final ListDialogField<IJavaProject> settingsField= new ListDialogField<IJavaProject>(listAdapter, buttons, tableLabelProvider) {
 				/**
 				 * {@inheritDoc}
 				 */
+				@Override
 				protected int getListStyle() {
 					return super.getListStyle() | SWT.SINGLE;
 				}
@@ -366,8 +369,9 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 				/**
 				 * {@inheritDoc}
 				 */
+				@Override
 				public void widgetSelected(SelectionEvent e) {
-					Hashtable workingValues= new Hashtable(fCustomSettings);
+					Hashtable<String, String> workingValues= new Hashtable<String, String>(fCustomSettings);
 					CleanUpSelectionDialog dialog= new WizardCleanUpSelectionDialog(getShell(), workingValues);
 					if (dialog.open() == Window.OK) {
 						fCustomSettings= workingValues;
@@ -395,6 +399,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 				/**
 				 * {@inheritDoc}
 				 */
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					PreferencesUtil.createPreferenceDialogOn(composite.getShell(), CleanUpPreferencePage.PREF_ID, null, null).open();
 				}
@@ -405,7 +410,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 			Dialog.applyDialogFont(composite);
         }
 
-		private void updateEnableState(boolean isCustom, final ListDialogField settingsField, Button configureCustom, BulletListBlock bulletListBlock) {
+		private void updateEnableState(boolean isCustom, final ListDialogField<IJavaProject> settingsField, Button configureCustom, BulletListBlock bulletListBlock) {
 			settingsField.getListControl(null).setEnabled(!isCustom);
 			if (isCustom) {
 				fEnableState= ControlEnableState.disable(settingsField.getButtonBox(null));
@@ -437,12 +442,14 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 	    	bulletListBlock.setText(buf.toString());
         }
 
-        protected boolean performFinish() {
+        @Override
+		protected boolean performFinish() {
 			initializeRefactoring();
 			storeSettings();
 			return super.performFinish();
 		}
 
+		@Override
 		public IWizardPage getNextPage() {
 			initializeRefactoring();
 			storeSettings();
@@ -478,12 +485,12 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
             }
         }
 
-		public String encodeSettings(Map settings) throws CoreException {
+		public String encodeSettings(Map<String, String> settings) throws CoreException {
 			ByteArrayOutputStream stream= new ByteArrayOutputStream(2000);
 			try {
 				CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
 				CustomProfile profile= new ProfileManager.CustomProfile("custom", settings, versioner.getCurrentVersion(), versioner.getProfileKind()); //$NON-NLS-1$
-				ArrayList profiles= new ArrayList();
+				ArrayList<Profile> profiles= new ArrayList<Profile>();
 				profiles.add(profile);
 				ProfileStore.writeProfilesToStream(profiles, stream, ENCODING, versioner);
 				try {
@@ -496,7 +503,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 			}
 		}
 
-		public Map decodeSettings(String settings) throws CoreException {
+		public Map<String, String> decodeSettings(String settings) throws CoreException {
 			byte[] bytes;
 			try {
 				bytes= settings.getBytes(ENCODING);
@@ -505,7 +512,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 			}
 			InputStream is= new ByteArrayInputStream(bytes);
 			try {
-				List res= ProfileStore.readProfilesFromStream(new InputSource(is));
+				List<Profile> res= ProfileStore.readProfilesFromStream(new InputSource(is));
 				if (res == null || res.size() == 0)
 					return JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getMap();
 
@@ -538,6 +545,7 @@ public class CleanUpRefactoringWizard extends RefactoringWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ltk.ui.refactoring.RefactoringWizard#addUserInputPages()
 	 */
+	@Override
 	protected void addUserInputPages() {
 		addPage(new CleanUpConfigurationPage((CleanUpRefactoring)getRefactoring()));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSaveParticipantPreferenceConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSaveParticipantPreferenceConfiguration.java
index fa0e9f0..1b1144b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSaveParticipantPreferenceConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSaveParticipantPreferenceConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,7 +70,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	private static final int INDENT= 10;
 
 	private IScopeContext fContext;
-	private Map fSettings;
+	private Map<String, String> fSettings;
 	private BulletListBlock fSelectedActionsText;
 	private Button fFormatCodeButton;
 	private Button fFormatChangedOnlyButton;
@@ -89,6 +89,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void createConfigControl(final Composite parent, IPreferencePageContainer container) {
 		fContainer= container;
 		fShell= parent.getShell();
@@ -109,6 +110,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				changeSettingsValue(CleanUpConstants.FORMAT_SOURCE_CODE, fFormatCodeButton.getSelection());
 			}
@@ -131,6 +133,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				changeSettingsValue(CleanUpConstants.FORMAT_SOURCE_CODE_CHANGES_ONLY, !fFormatAllButton.getSelection());
 			}
@@ -144,6 +147,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				changeSettingsValue(CleanUpConstants.FORMAT_SOURCE_CODE_CHANGES_ONLY, fFormatChangedOnlyButton.getSelection());
 			}
@@ -166,6 +170,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				changeSettingsValue(CleanUpConstants.ORGANIZE_IMPORTS, fOrganizeImportsButton.getSelection());
 			}
@@ -186,6 +191,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				changeSettingsValue(CleanUpConstants.CLEANUP_ON_SAVE_ADDITIONAL_OPTIONS, fAdditionalActionButton.getSelection());
 			}
@@ -214,8 +220,9 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
-				Hashtable workingValues= new Hashtable(fSettings);
+				Hashtable<String, String> workingValues= new Hashtable<String, String>(fSettings);
 				SaveActionSelectionDialog dialog= new SaveActionSelectionDialog(parent.getShell(), workingValues);
 				if (dialog.open() == Window.OK) {
 					fSettings= workingValues;
@@ -231,6 +238,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void initialize(final IScopeContext context, IAdaptable element) {
 		fContext= context;
 		fSettings= CleanUpPreferenceUtil.loadSaveParticipantOptions(context);
@@ -257,6 +265,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void performDefaults() {
 		if (ProjectScope.SCOPE.equals(fContext.getName()) && !hasSettingsInScope(fContext))
 			return;
@@ -264,7 +273,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 		enabled(true);
 
 		if (ProjectScope.SCOPE.equals(fContext.getName())) {
-			fSettings= CleanUpPreferenceUtil.loadSaveParticipantOptions(new InstanceScope());
+			fSettings= CleanUpPreferenceUtil.loadSaveParticipantOptions(InstanceScope.INSTANCE);
 		} else {
 			fSettings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getMap();
 		}
@@ -276,6 +285,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void performOk() {
 		super.performOk();
 
@@ -286,6 +296,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void enableProjectSettings() {
 		super.enableProjectSettings();
 
@@ -295,14 +306,15 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void disableProjectSettings() {
 		super.disableProjectSettings();
 
 		IEclipsePreferences node= fContext.getNode(JavaUI.ID_PLUGIN);
 
-		Set keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
-		for (Iterator iterator= keys.iterator(); iterator.hasNext();) {
-			String key= (String)iterator.next();
+		Set<String> keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
+		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
+			String key= iterator.next();
 			node.remove(CleanUpPreferenceUtil.SAVE_PARTICIPANT_KEY_PREFIX + key);
 		}
 	}
@@ -310,6 +322,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getPostSaveListenerId() {
 		return CleanUpPostSaveListener.POSTSAVELISTENER_ID;
 	}
@@ -317,6 +330,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getPostSaveListenerName() {
 		return SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_CleanUpActionsTopNodeName_Checkbox;
 	}
@@ -324,6 +338,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void enabled(boolean isEnabled) {
 		if (isEnabled) {
 			if (fControlEnableState == null)
@@ -359,7 +374,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 		fSelectedActionsText.setEnabled(additionalEnabled);
 		fConfigureButton.setEnabled(additionalEnabled);
 
-		Map settings= new HashMap(fSettings);
+		Map<String, String> settings= new HashMap<String, String>(fSettings);
 		settings.put(CleanUpConstants.FORMAT_SOURCE_CODE, CleanUpOptions.FALSE);
 		settings.put(CleanUpConstants.ORGANIZE_IMPORTS, CleanUpOptions.FALSE);
 		CleanUpOptions options= new MapCleanUpOptions(settings);
@@ -389,6 +404,7 @@ public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveP
 
 	private void configurePreferenceLink(Link link, final IJavaProject javaProject, final String preferenceId, final String propertyId) {
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (fContainer instanceof IWorkbenchPreferenceContainer) {
 					IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer)fContainer;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSelectionDialog.java
index 37889b4..e7412cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,19 +68,19 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 	private static final String DS_KEY_PREFERRED_Y= ".preferred_y"; //$NON-NLS-1$
 	private static final String DS_KEY_LAST_FOCUS= ".last_focus"; //$NON-NLS-1$
 
-	private final Map fWorkingValues;
-	private final List fTabPages;
+	private final Map<String, String> fWorkingValues;
+	private final List<IModifyDialogTabPage> fTabPages;
 	private final IDialogSettings fDialogSettings;
 	private TabFolder fTabFolder;
 	private CleanUpTabPage[] fPages;
 	private Label fCountLabel;
 
-	public CleanUpSelectionDialog(Shell parent, Map settings, String title) {
+	public CleanUpSelectionDialog(Shell parent, Map<String, String> settings, String title) {
 		super(parent);
 		setTitle(title);
 		fWorkingValues= settings;
 		setStatusLineAboveButtons(false);
-		fTabPages= new ArrayList();
+		fTabPages= new ArrayList<IModifyDialogTabPage>();
 		fDialogSettings= JavaPlugin.getDefault().getDialogSettings();
 	}
 
@@ -88,11 +88,12 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
 
-	protected abstract NamedCleanUpTabPage[] createTabPages(Map workingValues);
+	protected abstract NamedCleanUpTabPage[] createTabPages(Map<String, String> workingValues);
 
 	protected abstract String getPreferenceKeyPrefix();
 
@@ -100,10 +101,11 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 
 	protected abstract String getEmptySelectionMessage();
 
-	protected Map getWorkingValues() {
+	protected Map<String, String> getWorkingValues() {
 		return fWorkingValues;
 	}
 
+	@Override
 	public boolean close() {
 		final Rectangle shell= getShell().getBounds();
 
@@ -115,6 +117,7 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 		return super.close();
 	}
 
+	@Override
 	public void create() {
 		super.create();
 		int lastFocusNr= 0;
@@ -132,6 +135,7 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 		((IModifyDialogTabPage) fTabFolder.getSelection()[0].getData()).setInitialFocus();
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		final Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -171,6 +175,7 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 		return composite;
 	}
 
+	@Override
 	public void updateStatus(IStatus status) {
 		int count= 0;
 		for (int i= 0; i < fPages.length; i++) {
@@ -187,6 +192,7 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 		}
 	}
 
+	@Override
 	protected Point getInitialSize() {
 		Point initialSize= super.getInitialSize();
 		try {
@@ -202,6 +208,7 @@ public abstract class CleanUpSelectionDialog extends StatusDialog implements IMo
 		return initialSize;
 	}
 
+	@Override
 	protected Point getInitialLocation(Point initialSize) {
 		try {
 			return new Point(fDialogSettings.getInt(getPreferenceKeyPositionX()), fDialogSettings.getInt(getPreferenceKeyPositionY()));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeFormatCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeFormatCleanUp.java
index e5210b4..bf1fe8a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeFormatCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeFormatCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,13 +34,14 @@ public class CodeFormatCleanUp extends AbstractCleanUp {
 		super();
 	}
 
-	public CodeFormatCleanUp(Map options) {
+	public CodeFormatCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean requiresChangedRegions= isEnabled(CleanUpConstants.FORMAT_SOURCE_CODE) && isEnabled(CleanUpConstants.FORMAT_SOURCE_CODE_CHANGES_ONLY);
 		return new CleanUpRequirements(false, false, requiresChangedRegions, null);
@@ -49,6 +50,7 @@ public class CodeFormatCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
 		ICompilationUnit compilationUnit= context.getCompilationUnit();
 		if (compilationUnit == null)
@@ -73,8 +75,9 @@ public class CodeFormatCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		ArrayList result= new ArrayList();
+		ArrayList<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.FORMAT_SOURCE_CODE))
 			result.add(MultiFixMessages.CodeFormatCleanUp_description);
 
@@ -89,12 +92,13 @@ public class CodeFormatCleanUp extends AbstractCleanUp {
 		if (isEnabled(CleanUpConstants.FORMAT_CORRECT_INDENTATION))
 			result.add(MultiFixMessages.CodeFormatCleanUp_correctIndentation_description);
 
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 		buf.append("/**\n"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeStyleCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeStyleCleanUp.java
index 13f8c89..c8eb6d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeStyleCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CodeStyleCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,16 +38,17 @@ public class CodeStyleCleanUp extends AbstractMultiFix {
 	public CodeStyleCleanUp() {
 	}
 
-	public CodeStyleCleanUp(Map options) {
+	public CodeStyleCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean requireAST= requireAST();
-		Map requiredOptions= requireAST ? getRequiredOptions() : null;
+		Map<String, String> requiredOptions= requireAST ? getRequiredOptions() : null;
 		return new CleanUpRequirements(requireAST, false, false, requiredOptions);
 	}
 
@@ -69,6 +70,7 @@ public class CodeStyleCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit) throws CoreException {
 		if (compilationUnit == null)
 			return null;
@@ -93,6 +95,7 @@ public class CodeStyleCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit, IProblemLocation[] problems) throws CoreException {
 		return CodeStyleFix.createCleanUp(compilationUnit, problems,
 				isEnabled(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS) && isEnabled(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS_ALWAYS),
@@ -100,8 +103,8 @@ public class CodeStyleCleanUp extends AbstractMultiFix {
 				isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS) && isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_SUBTYPE_ACCESS));
 	}
 
-	private Map getRequiredOptions() {
-		Map result= new Hashtable();
+	private Map<String, String> getRequiredOptions() {
+		Map<String, String> result= new Hashtable<String, String>();
 		if (isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS) && isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_INSTANCE_ACCESS))
 			result.put(JavaCore.COMPILER_PB_STATIC_ACCESS_RECEIVER, JavaCore.WARNING);
 		if (isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS) && isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_SUBTYPE_ACCESS))
@@ -112,8 +115,9 @@ public class CodeStyleCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS) && isEnabled(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS_ALWAYS))
 			result.add(MultiFixMessages.CodeStyleMultiFix_AddThisQualifier_description);
 		if (isEnabled(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_METHOD_USE_THIS) && isEnabled(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_METHOD_USE_THIS_ALWAYS))
@@ -130,9 +134,10 @@ public class CodeStyleCleanUp extends AbstractMultiFix {
 			result.add(MultiFixMessages.CodeStyleMultiFix_ChangeNonStaticAccess_description);
 		if (isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS) && isEnabled(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_SUBTYPE_ACCESS))
 			result.add(MultiFixMessages.CodeStyleMultiFix_ChangeIndirectAccessToStaticToDirect);
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -216,6 +221,7 @@ public class CodeStyleCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public int computeNumberOfFixes(CompilationUnit compilationUnit) {
 		int result= 0;
 		IProblem[] problems= compilationUnit.getProblems();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ControlStatementsCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ControlStatementsCleanUp.java
index 9fa7937..086a04f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ControlStatementsCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ControlStatementsCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 
 public class ControlStatementsCleanUp extends AbstractCleanUp {
 
-	public ControlStatementsCleanUp(Map options) {
+	public ControlStatementsCleanUp(Map<String, String> options) {
 		super(options);
     }
 
@@ -38,6 +38,7 @@ public class ControlStatementsCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		return new CleanUpRequirements(requireAST(), false, false, null);
 	}
@@ -56,6 +57,7 @@ public class ControlStatementsCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
 		CompilationUnit compilationUnit= context.getAST();
 		if (compilationUnit == null)
@@ -74,8 +76,9 @@ public class ControlStatementsCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.CONTROL_STATEMENTS_USE_BLOCKS) && isEnabled(CleanUpConstants.CONTROL_STATMENTS_USE_BLOCKS_ALWAYS))
 			result.add(MultiFixMessages.CodeStyleMultiFix_ConvertSingleStatementInControlBodeyToBlock_description);
 		if (isEnabled(CleanUpConstants.CONTROL_STATEMENTS_USE_BLOCKS) && isEnabled(CleanUpConstants.CONTROL_STATMENTS_USE_BLOCKS_NEVER))
@@ -83,12 +86,13 @@ public class ControlStatementsCleanUp extends AbstractCleanUp {
 		if (isEnabled(CleanUpConstants.CONTROL_STATEMENTS_USE_BLOCKS) && isEnabled(CleanUpConstants.CONTROL_STATMENTS_USE_BLOCKS_NO_FOR_RETURN_AND_THROW))
 			result.add(MultiFixMessages.ControlStatementsCleanUp_RemoveUnnecessaryBlocksWithReturnOrThrow_description);
 
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ConvertLoopCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ConvertLoopCleanUp.java
index db0bce3..d636095 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ConvertLoopCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ConvertLoopCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 
 public class ConvertLoopCleanUp extends AbstractCleanUp {
 
-	public ConvertLoopCleanUp(Map options) {
+	public ConvertLoopCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -38,6 +38,7 @@ public class ConvertLoopCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		return new CleanUpRequirements(isEnabled(CleanUpConstants.CONTROL_STATMENTS_CONVERT_FOR_LOOP_TO_ENHANCED), false, false, null);
 	}
@@ -45,6 +46,7 @@ public class ConvertLoopCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
 		CompilationUnit compilationUnit= context.getAST();
 		if (compilationUnit == null)
@@ -60,18 +62,20 @@ public class ConvertLoopCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 
 		if (isEnabled(CleanUpConstants.CONTROL_STATMENTS_CONVERT_FOR_LOOP_TO_ENHANCED))
 			result.add(MultiFixMessages.Java50CleanUp_ConvertToEnhancedForLoop_description);
 
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ExpressionsCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ExpressionsCleanUp.java
index 370168e..2475968 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ExpressionsCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ExpressionsCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 
 public class ExpressionsCleanUp extends AbstractCleanUp {
 
-	public ExpressionsCleanUp(Map options) {
+	public ExpressionsCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -38,6 +38,7 @@ public class ExpressionsCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		return new CleanUpRequirements(requireAST(), false, false, null);
 	}
@@ -54,6 +55,7 @@ public class ExpressionsCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
 		CompilationUnit compilationUnit= context.getAST();
 		if (compilationUnit == null)
@@ -71,20 +73,22 @@ public class ExpressionsCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES) && isEnabled(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_ALWAYS))
 			result.add(MultiFixMessages.ExpressionsCleanUp_addParanoiac_description);
 
 		if (isEnabled(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES) && isEnabled(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_NEVER))
 			result.add(MultiFixMessages.ExpressionsCleanUp_removeUnnecessary_description);
 
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ImportsCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ImportsCleanUp.java
index b475f76..02481f9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ImportsCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ImportsCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ public class ImportsCleanUp extends AbstractCleanUp {
 	private CodeGenerationSettings fCodeGeneratorSettings;
 	private RefactoringStatus fStatus;
 
-	public ImportsCleanUp(Map options) {
+	public ImportsCleanUp(Map<String, String> options) {
 		super(options);
     }
 
@@ -47,6 +47,7 @@ public class ImportsCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean isOrganizeImports= isEnabled(CleanUpConstants.ORGANIZE_IMPORTS);
 		return new CleanUpRequirements(isOrganizeImports, isOrganizeImports, false, null);
@@ -55,7 +56,8 @@ public class ImportsCleanUp extends AbstractCleanUp {
 	/**
      * {@inheritDoc}
      */
-    public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
+    @Override
+	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
     	CompilationUnit compilationUnit= context.getAST();
     	if (compilationUnit == null)
     		return null;
@@ -67,7 +69,8 @@ public class ImportsCleanUp extends AbstractCleanUp {
     /**
      * {@inheritDoc}
      */
-    public RefactoringStatus checkPreConditions(IJavaProject project, ICompilationUnit[] compilationUnits, IProgressMonitor monitor) throws CoreException {
+    @Override
+	public RefactoringStatus checkPreConditions(IJavaProject project, ICompilationUnit[] compilationUnits, IProgressMonitor monitor) throws CoreException {
 
 		if (isEnabled(CleanUpConstants.ORGANIZE_IMPORTS)) {
     		fCodeGeneratorSettings= JavaPreferencesSettings.getCodeGenerationSettings(project);
@@ -80,7 +83,8 @@ public class ImportsCleanUp extends AbstractCleanUp {
     /**
      * {@inheritDoc}
      */
-    public RefactoringStatus checkPostConditions(IProgressMonitor monitor) throws CoreException {
+    @Override
+	public RefactoringStatus checkPostConditions(IProgressMonitor monitor) throws CoreException {
     	fCodeGeneratorSettings= null;
     	try {
 	    	if (fStatus == null || fStatus.isOK()) {
@@ -96,7 +100,8 @@ public class ImportsCleanUp extends AbstractCleanUp {
 	/**
      * {@inheritDoc}
      */
-    public String[] getStepDescriptions() {
+    @Override
+	public String[] getStepDescriptions() {
     	if (isEnabled(CleanUpConstants.ORGANIZE_IMPORTS))
     		return new String[] {MultiFixMessages.ImportsCleanUp_OrganizeImports_Description};
 
@@ -106,7 +111,8 @@ public class ImportsCleanUp extends AbstractCleanUp {
 	/**
      * {@inheritDoc}
      */
-    public String getPreview() {
+    @Override
+	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
 		if (isEnabled(CleanUpConstants.ORGANIZE_IMPORTS)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/Java50CleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/Java50CleanUp.java
index b509088..c28827c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/Java50CleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/Java50CleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ import org.eclipse.jdt.ui.text.java.IProblemLocation;
  */
 public class Java50CleanUp extends AbstractMultiFix {
 
-	public Java50CleanUp(Map options) {
+	public Java50CleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -48,9 +48,10 @@ public class Java50CleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean requireAST= requireAST();
-		Map requiredOptions= requireAST ? getRequiredOptions() : null;
+		Map<String, String> requiredOptions= requireAST ? getRequiredOptions() : null;
 		return new CleanUpRequirements(requireAST, false, false, requiredOptions);
 	}
 
@@ -65,6 +66,7 @@ public class Java50CleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit) throws CoreException {
 		boolean addAnotations= isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS);
 		boolean addOverride= isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS_OVERRIDE);
@@ -78,6 +80,7 @@ public class Java50CleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit, IProblemLocation[] problems) throws CoreException {
 		if (compilationUnit == null)
 			return null;
@@ -91,8 +94,8 @@ public class Java50CleanUp extends AbstractMultiFix {
 				isEnabled(CleanUpConstants.VARIABLE_DECLARATION_USE_TYPE_ARGUMENTS_FOR_RAW_TYPE_REFERENCES));
 	}
 
-	private Map getRequiredOptions() {
-		Map result= new Hashtable();
+	private Map<String, String> getRequiredOptions() {
+		Map<String, String> result= new Hashtable<String, String>();
 		if (isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS) && isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS_OVERRIDE)) {
 			result.put(JavaCore.COMPILER_PB_MISSING_OVERRIDE_ANNOTATION, JavaCore.WARNING);
 			if (isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS_OVERRIDE_FOR_INTERFACE_METHOD_IMPLEMENTATION)) {
@@ -112,8 +115,9 @@ public class Java50CleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS) && isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS_OVERRIDE)) {
 			result.add(MultiFixMessages.Java50MultiFix_AddMissingOverride_description);
 			if (isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS_OVERRIDE_FOR_INTERFACE_METHOD_IMPLEMENTATION)) {
@@ -124,12 +128,13 @@ public class Java50CleanUp extends AbstractMultiFix {
 			result.add(MultiFixMessages.Java50MultiFix_AddMissingDeprecated_description);
 		if (isEnabled(CleanUpConstants.VARIABLE_DECLARATION_USE_TYPE_ARGUMENTS_FOR_RAW_TYPE_REFERENCES))
 			result.add(MultiFixMessages.Java50CleanUp_AddTypeParameters_description);
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -182,6 +187,7 @@ public class Java50CleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public int computeNumberOfFixes(CompilationUnit compilationUnit) {
 		int result= 0;
 		
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapCleanUpOptions.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapCleanUpOptions.java
index 8fc9396..ce1c21d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapCleanUpOptions.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapCleanUpOptions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
 
 public class MapCleanUpOptions extends CleanUpOptions {
 
-	private final Map fOptions;
+	private final Map<String, String> fOptions;
 
 	/**
 	 * Create new CleanUpOptions instance. <code>options</code>
@@ -31,19 +31,19 @@ public class MapCleanUpOptions extends CleanUpOptions {
 	 * @param options map from String to String
 	 * @see CleanUpConstants
 	 */
-	public MapCleanUpOptions(Map options) {
+	public MapCleanUpOptions(Map<String, String> options) {
 		super(options);
 		fOptions= options;
 	}
 
 	public MapCleanUpOptions() {
-		this(new Hashtable());
+		this(new Hashtable<String, String>());
 	}
 
 	/**
 	 * @return all options as map, modifying the map modifies this object
 	 */
-	public Map getMap() {
+	public Map<String, String> getMap() {
 		return fOptions;
 	}
 
@@ -54,9 +54,9 @@ public class MapCleanUpOptions extends CleanUpOptions {
 		if (options instanceof MapCleanUpOptions) {
 			fOptions.putAll(((MapCleanUpOptions)options).getMap());
 		} else {
-			Set keys= options.getKeys();
-			for (Iterator iterator= keys.iterator(); iterator.hasNext();) {
-				String key= (String) iterator.next();
+			Set<String> keys= options.getKeys();
+			for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
+				String key= iterator.next();
 				fOptions.put(key, options.getValue(key));
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties
index c8fbb38..c13ab03 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2009 IBM Corporation and others.
+# Copyright (c) 2005, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ CleanUpRefactoringWizard_CleaningUpNN_Title=Cleaning up {0} files in {1} project
 CleanUpRefactoringWizard_formatterException_errorMessage=The formatter threw an unhandled exception while formatting the preview.
 CleanUpRefactoringWizard_WindowTitle=Clean Up
 CleanUpRefactoringWizard_PageTitle=Clean Up
-ExpressionsCleanUp_addParanoiac_description=Add paranoiac parentheses
+ExpressionsCleanUp_addParanoiac_description=Put expressions in parentheses
 ExpressionsCleanUp_removeUnnecessary_description=Remove unnecessary parentheses
 VariableDeclarationCleanUp_AddFinalField_description=Add final modifier to private fields
 VariableDeclarationCleanUp_AddFinalParameters_description=Add final modifier to method parameters
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PotentialProgrammingProblemsCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PotentialProgrammingProblemsCleanUp.java
index 3be5f5b..f5aba55 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PotentialProgrammingProblemsCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PotentialProgrammingProblemsCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ import org.eclipse.jdt.ui.text.java.IProblemLocation;
 
 public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 
-	public PotentialProgrammingProblemsCleanUp(Map options) {
+	public PotentialProgrammingProblemsCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -46,9 +46,10 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 	/**A
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean requireAST= requireAST();
-		Map requiredOptions= requireAST ? getRequiredOptions() : null;
+		Map<String, String> requiredOptions= requireAST ? getRequiredOptions() : null;
 		return new CleanUpRequirements(requireAST, false, false, requiredOptions);
 	}
 
@@ -64,6 +65,7 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit) throws CoreException {
 
 		boolean addSUID= isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID);
@@ -78,6 +80,7 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit, IProblemLocation[] problems) throws CoreException {
 		if (compilationUnit == null)
 			return null;
@@ -87,8 +90,8 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 				(isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID) && isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_DEFAULT)));
 	}
 
-	private Map getRequiredOptions() {
-		Map result= new Hashtable();
+	private Map<String, String> getRequiredOptions() {
+		Map<String, String> result= new Hashtable<String, String>();
 		if ((isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID) && isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_GENERATED)) ||
 				(isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID) && isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_DEFAULT)))
 			result.put(JavaCore.COMPILER_PB_MISSING_SERIAL_VERSION, JavaCore.WARNING);
@@ -98,20 +101,22 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 
 		if ((isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID) && isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_GENERATED)))
 			result.add(MultiFixMessages.SerialVersionCleanUp_Generated_description);
 		if ((isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID) && isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_DEFAULT)))
 			result.add(MultiFixMessages.CodeStyleCleanUp_addDefaultSerialVersionId_description);
 
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -140,6 +145,7 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkPreConditions(IJavaProject project, ICompilationUnit[] compilationUnits, IProgressMonitor monitor) throws CoreException {
 		RefactoringStatus superStatus= super.checkPreConditions(project, compilationUnits, monitor);
 		if (superStatus.hasFatalError())
@@ -154,6 +160,7 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkPostConditions(IProgressMonitor monitor) throws CoreException {
 		return PotentialProgrammingProblemsFix.checkPostConditions(monitor);
 	}
@@ -161,6 +168,7 @@ public class PotentialProgrammingProblemsCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public int computeNumberOfFixes(CompilationUnit compilationUnit) {
 		if ((isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID) && isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_GENERATED)) ||
 				(isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID) && isEnabled(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_DEFAULT)))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SaveActionSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SaveActionSelectionDialog.java
index ec2ad89..7c87e01 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SaveActionSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SaveActionSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,11 +30,12 @@ public class SaveActionSelectionDialog extends CleanUpSelectionDialog {
 
 	private static final String PREFERENCE_KEY= "clean_up_save_particpant_modify_dialog"; //$NON-NLS-1$
 
-	public SaveActionSelectionDialog(Shell parentShell, Map settings) {
+	public SaveActionSelectionDialog(Shell parentShell, Map<String, String> settings) {
 		super(parentShell, settings, SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_CleanUpSaveParticipantConfiguration_Title);
 	}
 
-	protected NamedCleanUpTabPage[] createTabPages(Map workingValues) {
+	@Override
+	protected NamedCleanUpTabPage[] createTabPages(Map<String, String> workingValues) {
 		CleanUpTabPageDescriptor[] descriptors= JavaPlugin.getDefault().getCleanUpRegistry().getCleanUpTabPageDescriptors(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS);
 
 		NamedCleanUpTabPage[] result= new NamedCleanUpTabPage[descriptors.length];
@@ -53,6 +54,7 @@ public class SaveActionSelectionDialog extends CleanUpSelectionDialog {
 		return result;
 	}
 
+	@Override
 	protected void createButtonsForButtonBar(Composite parent) {
 		GridLayout layout= (GridLayout)parent.getLayout();
 		layout.numColumns++;
@@ -64,14 +66,17 @@ public class SaveActionSelectionDialog extends CleanUpSelectionDialog {
 		super.createButtonsForButtonBar(parent);
 	}
 
+	@Override
 	protected String getEmptySelectionMessage() {
 		return SaveParticipantMessages.CleanUpSaveParticipantConfigurationModifyDialog_SelectAnAction_Error;
 	}
 
+	@Override
 	protected String getSelectionCountMessage(int selectionCount, int size) {
 		return Messages.format(SaveParticipantMessages.CleanUpSaveParticipantConfigurationModifyDialog_XofYSelected_Label, new Object[] {new Integer(selectionCount), new Integer(size)});
 	}
 
+	@Override
 	protected String getPreferenceKeyPrefix() {
 		return PREFERENCE_KEY;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java
index eb034f8..525ecb4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,19 +43,20 @@ import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 public class SortMembersCleanUp extends AbstractCleanUp {
 
-	private HashSet fTouchedFiles;
+	private HashSet<IResource> fTouchedFiles;
 
 	public SortMembersCleanUp() {
 		super();
     }
 
-	public SortMembersCleanUp(Map options) {
+	public SortMembersCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
 		CompilationUnit compilationUnit= context.getAST();
 		if (compilationUnit == null)
@@ -65,7 +66,7 @@ public class SortMembersCleanUp extends AbstractCleanUp {
 		ICleanUpFix fix= SortMembersFix.createCleanUp(compilationUnit, sortMembers, sortMembers && isEnabled(CleanUpConstants.SORT_MEMBERS_ALL));
 		if (fix != null) {
 			if (fTouchedFiles == null) {
-				fTouchedFiles= new HashSet();
+				fTouchedFiles= new HashSet<IResource>();
 			}
 			fTouchedFiles.add(((ICompilationUnit)compilationUnit.getJavaElement()).getResource());
 		}
@@ -75,6 +76,7 @@ public class SortMembersCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public RefactoringStatus checkPostConditions(IProgressMonitor monitor) throws CoreException {
 		if (fTouchedFiles == null) {
 			return super.checkPostConditions(monitor);
@@ -86,7 +88,7 @@ public class SortMembersCleanUp extends AbstractCleanUp {
 
 			try {
 				RefactoringStatus result= new RefactoringStatus();
-    			for (Iterator iterator= fTouchedFiles.iterator(); iterator.hasNext();) {
+    			for (Iterator<IResource> iterator= fTouchedFiles.iterator(); iterator.hasNext();) {
     	            IFile file= (IFile)iterator.next();
     	            if (containsRelevantMarkers(file)) {
     	            	String fileLocation= BasicElementLabels.getPathLabel(file.getProjectRelativePath(), false);
@@ -109,6 +111,7 @@ public class SortMembersCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
 		if (isEnabled(CleanUpConstants.SORT_MEMBERS)) {
 			if (isEnabled(CleanUpConstants.SORT_MEMBERS_ALL)) {
@@ -123,6 +126,7 @@ public class SortMembersCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -152,7 +156,8 @@ public class SortMembersCleanUp extends AbstractCleanUp {
     /**
      * {@inheritDoc}
      */
-    public CleanUpRequirements getRequirements() {
+    @Override
+	public CleanUpRequirements getRequirements() {
     	return new CleanUpRequirements(isEnabled(CleanUpConstants.SORT_MEMBERS), false, false, null);
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StringCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StringCleanUp.java
index da5ee1b..42d9816 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StringCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StringCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ import org.eclipse.jdt.ui.text.java.IProblemLocation;
  */
 public class StringCleanUp extends AbstractMultiFix {
 
-	public StringCleanUp(Map options) {
+	public StringCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -48,9 +48,10 @@ public class StringCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean requireAST= requireAST();
-		Map requiredOptions= requireAST ? getRequiredOptions() : null;
+		Map<String, String> requiredOptions= requireAST ? getRequiredOptions() : null;
 		return new CleanUpRequirements(requireAST, false, false, requiredOptions);
 	}
 
@@ -62,6 +63,7 @@ public class StringCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit) throws CoreException {
 		if (compilationUnit == null)
 			return null;
@@ -74,6 +76,7 @@ public class StringCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit, IProblemLocation[] problems) throws CoreException {
 		if (compilationUnit == null)
 			return null;
@@ -83,8 +86,8 @@ public class StringCleanUp extends AbstractMultiFix {
 				isEnabled(CleanUpConstants.REMOVE_UNNECESSARY_NLS_TAGS));
 	}
 
-	private Map getRequiredOptions() {
-		Map result= new Hashtable();
+	private Map<String, String> getRequiredOptions() {
+		Map<String, String> result= new Hashtable<String, String>();
 
 		if (isEnabled(CleanUpConstants.ADD_MISSING_NLS_TAGS) || isEnabled(CleanUpConstants.REMOVE_UNNECESSARY_NLS_TAGS))
 			result.put(JavaCore.COMPILER_PB_NON_NLS_STRING_LITERAL, JavaCore.WARNING);
@@ -95,18 +98,20 @@ public class StringCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.ADD_MISSING_NLS_TAGS))
 			result.add(MultiFixMessages.StringMultiFix_AddMissingNonNls_description);
 		if (isEnabled(CleanUpConstants.REMOVE_UNNECESSARY_NLS_TAGS))
 			result.add(MultiFixMessages.StringMultiFix_RemoveUnnecessaryNonNls_description);
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -135,6 +140,7 @@ public class StringCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public int computeNumberOfFixes(CompilationUnit compilationUnit) {
 		try {
 			ICompilationUnit cu= (ICompilationUnit)compilationUnit.getJavaElement();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java
index c1b4f22..a941bb7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,13 +45,14 @@ public class UnimplementedCodeCleanUp extends AbstractMultiFix {
 		super();
 	}
 
-	public UnimplementedCodeCleanUp(Map settings) {
+	public UnimplementedCodeCleanUp(Map<String, String> settings) {
 		super(settings);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
 		if (isEnabled(CleanUpConstants.ADD_MISSING_METHODES))
 			return new String[] { MultiFixMessages.UnimplementedCodeCleanUp_AddUnimplementedMethods_description };
@@ -65,6 +66,7 @@ public class UnimplementedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -91,6 +93,7 @@ public class UnimplementedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		if (!isEnabled(CleanUpConstants.ADD_MISSING_METHODES) && !isEnabled(MAKE_TYPE_ABSTRACT))
 			return super.getRequirements();
@@ -101,6 +104,7 @@ public class UnimplementedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit unit) throws CoreException {
 		IProblemLocation[] problemLocations= convertProblems(unit.getProblems());
 		problemLocations= filter(problemLocations, new int[] { IProblem.AbstractMethodMustBeImplemented, IProblem.EnumConstantMustImplementAbstractMethod });
@@ -111,6 +115,7 @@ public class UnimplementedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit unit, IProblemLocation[] problems) throws CoreException {
 		IProblemLocation[] problemLocations= filter(problems, new int[] { IProblem.AbstractMethodMustBeImplemented, IProblem.EnumConstantMustImplementAbstractMethod });
 		return UnimplementedCodeFix.createCleanUp(unit, isEnabled(CleanUpConstants.ADD_MISSING_METHODES), isEnabled(MAKE_TYPE_ABSTRACT), problemLocations);
@@ -130,13 +135,14 @@ public class UnimplementedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public int computeNumberOfFixes(CompilationUnit compilationUnit) {
 		if (!isEnabled(CleanUpConstants.ADD_MISSING_METHODES) && !isEnabled(MAKE_TYPE_ABSTRACT))
 			return 0;
 
 		IProblemLocation[] locations= filter(convertProblems(compilationUnit.getProblems()), new int[] { IProblem.AbstractMethodMustBeImplemented, IProblem.EnumConstantMustImplementAbstractMethod });
 
-		HashSet types= new HashSet();
+		HashSet<ASTNode> types= new HashSet<ASTNode>();
 		for (int i= 0; i < locations.length; i++) {
 			ASTNode type= UnimplementedCodeFix.getSelectedTypeNode(compilationUnit, locations[i]);
 			if (type != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnnecessaryCodeCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnnecessaryCodeCleanUp.java
index ad7e991..a5bbebe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnnecessaryCodeCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnnecessaryCodeCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import org.eclipse.jdt.ui.text.java.IProblemLocation;
 
 public class UnnecessaryCodeCleanUp extends AbstractMultiFix {
 
-	public UnnecessaryCodeCleanUp(Map options) {
+	public UnnecessaryCodeCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -42,15 +42,17 @@ public class UnnecessaryCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean requireAST= isEnabled(CleanUpConstants.REMOVE_UNNECESSARY_CASTS);
-		Map requiredOptions= requireAST ? getRequiredOptions() : null;
+		Map<String, String> requiredOptions= requireAST ? getRequiredOptions() : null;
 		return new CleanUpRequirements(requireAST, false, false, requiredOptions);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit) throws CoreException {
 		return UnusedCodeFix.createCleanUp(compilationUnit,
 				false,
@@ -65,6 +67,7 @@ public class UnnecessaryCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit, IProblemLocation[] problems) throws CoreException {
 		return UnusedCodeFix.createCleanUp(compilationUnit, problems,
 				false,
@@ -76,8 +79,8 @@ public class UnnecessaryCodeCleanUp extends AbstractMultiFix {
 				isEnabled(CleanUpConstants.REMOVE_UNNECESSARY_CASTS));
 	}
 
-	private Map getRequiredOptions() {
-		Map result= new Hashtable();
+	private Map<String, String> getRequiredOptions() {
+		Map<String, String> result= new Hashtable<String, String>();
 
 		if (isEnabled(CleanUpConstants.REMOVE_UNNECESSARY_CASTS))
 			result.put(JavaCore.COMPILER_PB_UNNECESSARY_TYPE_CHECK, JavaCore.WARNING);
@@ -88,16 +91,18 @@ public class UnnecessaryCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.REMOVE_UNNECESSARY_CASTS))
 			result.add(MultiFixMessages.UnusedCodeCleanUp_RemoveUnusedCasts_description);
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -123,6 +128,7 @@ public class UnnecessaryCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public int computeNumberOfFixes(CompilationUnit compilationUnit) {
 		int result= 0;
 		IProblem[] problems= compilationUnit.getProblems();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnusedCodeCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnusedCodeCleanUp.java
index c7a906d..199a2c5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnusedCodeCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnusedCodeCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ import org.eclipse.jdt.ui.text.java.IProblemLocation;
  */
 public class UnusedCodeCleanUp extends AbstractMultiFix {
 
-	public UnusedCodeCleanUp(Map options) {
+	public UnusedCodeCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -48,9 +48,10 @@ public class UnusedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		boolean requireAST= requireAST();
-		Map requiredOptions= requireAST ? getRequiredOptions() : null;
+		Map<String, String> requiredOptions= requireAST ? getRequiredOptions() : null;
 		return new CleanUpRequirements(requireAST, false, false, requiredOptions);
 	}
 
@@ -68,6 +69,7 @@ public class UnusedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit) throws CoreException {
 		boolean removeUnuseMembers= isEnabled(CleanUpConstants.REMOVE_UNUSED_CODE_PRIVATE_MEMBERS);
 
@@ -84,6 +86,7 @@ public class UnusedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ICleanUpFix createFix(CompilationUnit compilationUnit, IProblemLocation[] problems) throws CoreException {
 		boolean removeMembers= isEnabled(CleanUpConstants.REMOVE_UNUSED_CODE_PRIVATE_MEMBERS);
 
@@ -97,8 +100,8 @@ public class UnusedCodeCleanUp extends AbstractMultiFix {
 				false);
 	}
 
-	public Map getRequiredOptions() {
-		Map result= new Hashtable();
+	public Map<String, String> getRequiredOptions() {
+		Map<String, String> result= new Hashtable<String, String>();
 
 		if (isEnabled(CleanUpConstants.REMOVE_UNUSED_CODE_IMPORTS) && !isEnabled(CleanUpConstants.ORGANIZE_IMPORTS))
 			result.put(JavaCore.COMPILER_PB_UNUSED_IMPORT, JavaCore.WARNING);
@@ -120,8 +123,9 @@ public class UnusedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.REMOVE_UNUSED_CODE_IMPORTS))
 			result.add(MultiFixMessages.UnusedCodeMultiFix_RemoveUnusedImport_description);
 		if (isEnabled(CleanUpConstants.REMOVE_UNUSED_CODE_PRIVATE_MEMBERS) && isEnabled(CleanUpConstants.REMOVE_UNUSED_CODE_PRIVATE_METHODS))
@@ -134,12 +138,13 @@ public class UnusedCodeCleanUp extends AbstractMultiFix {
 			result.add(MultiFixMessages.UnusedCodeMultiFix_RemoveUnusedField_description);
 		if (isEnabled(CleanUpConstants.REMOVE_UNUSED_CODE_LOCAL_VARIABLES))
 			result.add(MultiFixMessages.UnusedCodeMultiFix_RemoveUnusedVariable_description);
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
@@ -196,6 +201,7 @@ public class UnusedCodeCleanUp extends AbstractMultiFix {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public int computeNumberOfFixes(CompilationUnit compilationUnit) {
 		int result= 0;
 		IProblem[] problems= compilationUnit.getProblems();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VariableDeclarationCleanUp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VariableDeclarationCleanUp.java
index 6c34f06..872c1de 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VariableDeclarationCleanUp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VariableDeclarationCleanUp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 
 public class VariableDeclarationCleanUp extends AbstractCleanUp {
 
-	public VariableDeclarationCleanUp(Map options) {
+	public VariableDeclarationCleanUp(Map<String, String> options) {
 		super(options);
 	}
 
@@ -38,6 +38,7 @@ public class VariableDeclarationCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public CleanUpRequirements getRequirements() {
 		return new CleanUpRequirements(requireAST(), false, false, null);
 	}
@@ -55,6 +56,7 @@ public class VariableDeclarationCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
 		CompilationUnit compilationUnit= context.getAST();
 		if (compilationUnit == null)
@@ -73,8 +75,9 @@ public class VariableDeclarationCleanUp extends AbstractCleanUp {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String[] getStepDescriptions() {
-		List result= new ArrayList();
+		List<String> result= new ArrayList<String>();
 		if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL_PRIVATE_FIELDS))
 			result.add(MultiFixMessages.VariableDeclarationCleanUp_AddFinalField_description);
 		if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL_PARAMETERS))
@@ -82,12 +85,13 @@ public class VariableDeclarationCleanUp extends AbstractCleanUp {
 		if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL_LOCAL_VARIABLES))
 			result.add(MultiFixMessages.VariableDeclarationCleanUp_AddFinalLocals_description);
 
-		return (String[])result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getPreview() {
 		StringBuffer buf= new StringBuffer();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
index 37b41dc..5b351d3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -224,6 +224,7 @@ public abstract class AbstractInfoView extends ViewPart implements ISelectionLis
 	/*
 	 * @see IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public final void createPartControl(Composite parent) {
 		internalCreatePartControl(parent);
 		inititalizeColors();
@@ -524,6 +525,7 @@ public abstract class AbstractInfoView extends ViewPart implements ISelectionLis
 	/*
 	 * @see IWorkbenchPart#dispose()
 	 */
+	@Override
 	public final void dispose() {
 		// cancel possible running computation
 		fComputeCount++;
@@ -602,6 +604,7 @@ public abstract class AbstractInfoView extends ViewPart implements ISelectionLis
 		fComputeProgressMonitor= computeProgressMonitor;
 
 		Thread thread= new Thread("Info view input computer") { //$NON-NLS-1$
+			@Override
 			public void run() {
 				if (currentCount != fComputeCount)
 					return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/CopyToClipboardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/CopyToClipboardAction.java
index 8d03aef..ff7077a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/CopyToClipboardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/CopyToClipboardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,10 +51,12 @@ class CopyToClipboardAction extends SelectionDispatchAction{
 		update(getSelection());
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(selection != null && selection.getLength() > 0);
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
 		fClipboard= new Clipboard(getShell().getDisplay());
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/GotoInputAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/GotoInputAction.java
index 6bdb068..5bf04d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/GotoInputAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/GotoInputAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ class GotoInputAction extends Action {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.OPEN_INPUT_ACTION);
 	}
 
+	@Override
 	public void run() {
 		IJavaElement inputElement= fInfoView.getInput();
 		new OpenAction(fInfoView.getViewSite()).run(new Object[] { inputElement });
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
index 615e5eb..b783d2c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -113,7 +113,6 @@ import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.SourceRange;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -145,6 +144,7 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.actions.ActionMessages;
 import org.eclipse.jdt.internal.ui.actions.SimpleSelectionProvider;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 import org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover;
 import org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2;
@@ -181,6 +181,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.infoviews.JavadocView.IBrowserInput#getInputElement()
 		 */
+		@Override
 		public Object getInputElement() {
 			return fInput;
 		}
@@ -188,6 +189,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.infoviews.JavadocView.IBrowserInput#getInputName()
 		 */
+		@Override
 		public String getInputName() {
 			return fInput.getElementName();
 		}
@@ -212,6 +214,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.infoviews.JavadocView.IBrowserInput#getInputElement()
 		 */
+		@Override
 		public Object getInputElement() {
 			return fURL;
 		}
@@ -219,6 +222,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.infoviews.JavadocView.IBrowserInput#getInputName()
 		 */
+		@Override
 		public String getInputName() {
 			return fURL.toExternalForm();
 		}
@@ -254,6 +258,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			setInput(fCurrent.getNext());
 		}
@@ -290,6 +295,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			setInput(fCurrent.getPrevious());
 		}
@@ -312,6 +318,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			setLinkingEnabled(!isLinkingEnabled());
 		}
@@ -339,6 +346,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * Method declared on SelectionDispatchAction.
 		 */
+		@Override
 		public void selectionChanged(IStructuredSelection structuredSelection) {
 			super.selectionChanged(structuredSelection);
 			Object element= structuredSelection.getFirstElement();
@@ -354,6 +362,7 @@ public class JavadocView extends AbstractInfoView {
 		/* (non-Javadoc)
 		 * Method declared on SelectionDispatchAction.
 		 */
+		@Override
 		public void run(IStructuredSelection selection) {
 			if (!canEnableFor(selection))
 				return;
@@ -369,6 +378,7 @@ public class JavadocView extends AbstractInfoView {
 		/*
 		 * @see org.eclipse.jdt.ui.actions.OpenAttachedJavadocAction#canEnableFor(org.eclipse.jface.viewers.IStructuredSelection)
 		 */
+		@Override
 		protected boolean canEnableFor(IStructuredSelection selection) {
 			if (selection.size() != 1)
 				return false;
@@ -505,6 +515,7 @@ public class JavadocView extends AbstractInfoView {
 		/**
 		 * Selects all in the view.
 		 */
+		@Override
 		public void run() {
 			if (fControl instanceof StyledText)
 		        ((StyledText)fControl).selectAll();
@@ -537,6 +548,7 @@ public class JavadocView extends AbstractInfoView {
 			fControl= control;
 			if (fControl instanceof StyledText) {
 			    ((StyledText)fControl).addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 					    fireSelectionChanged();
 					}
@@ -600,6 +612,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#internalCreatePartControl(Composite)
 	 */
+	@Override
 	protected void internalCreatePartControl(Composite parent) {
 		try {
 			fBrowser= new Browser(parent, SWT.NONE);
@@ -647,6 +660,7 @@ public class JavadocView extends AbstractInfoView {
 				/*
 				 * @see org.eclipse.swt.events.ControlAdapter#controlResized(org.eclipse.swt.events.ControlEvent)
 				 */
+				@Override
 				public void controlResized(ControlEvent e) {
 					doSetInput(fOriginalInput);
 				}
@@ -728,6 +742,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#createActions()
 	 */
+	@Override
 	protected void createActions() {
 		super.createActions();
 		fSelectAllAction= new SelectAllAction(getControl(), (SelectionProvider) getSelectionProvider());
@@ -762,6 +777,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#fillActionBars(org.eclipse.ui.IActionBars)
 	 * @since 3.4
 	 */
+	@Override
 	protected void fillActionBars(final IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 
@@ -782,6 +798,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#fillToolBar(org.eclipse.jface.action.IToolBarManager)
 	 * @since 3.4
 	 */
+	@Override
 	protected void fillToolBar(IToolBarManager tbm) {
 		tbm.add(fBackAction);
 		tbm.add(fForthAction);
@@ -796,6 +813,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#menuAboutToShow(org.eclipse.jface.action.IMenuManager)
 	 * @since 3.4
 	 */
+	@Override
 	public void menuAboutToShow(IMenuManager menu) {
 		super.menuAboutToShow(menu);
 
@@ -809,6 +827,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#getSelectAllAction()
 	 * @since 3.0
 	 */
+	@Override
 	protected IAction getSelectAllAction() {
 		// FIXME: see https://bugs.eclipse.org/bugs/show_bug.cgi?id=63022
 		if (fIsUsingBrowserWidget)
@@ -821,6 +840,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#getCopyToClipboardAction()
 	 * @since 3.0
 	 */
+	@Override
 	protected IAction getCopyToClipboardAction() {
 		// FIXME: see https://bugs.eclipse.org/bugs/show_bug.cgi?id=63022
 		if (fIsUsingBrowserWidget)
@@ -832,6 +852,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
  	 * @see AbstractInfoView#setForeground(Color)
  	 */
+	@Override
 	protected void setForeground(Color color) {
 		getControl().setForeground(color);
 	}
@@ -839,6 +860,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#setBackground(Color)
 	 */
+	@Override
 	protected void setBackground(Color color) {
 		getControl().setBackground(color);
 		fBackgroundColorRGB= color.getRGB();
@@ -865,6 +887,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#getBackgroundColorKey()
 	 * @since 3.2
 	 */
+	@Override
 	protected String getBackgroundColorKey() {
 		return "org.eclipse.jdt.ui.JavadocView.backgroundColor";		 //$NON-NLS-1$
 	}
@@ -872,6 +895,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#internalDispose()
 	 */
+	@Override
 	protected void internalDispose() {
 		fText= null;
 		fBrowser= null;
@@ -889,6 +913,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
 	 */
+	@Override
 	public void setFocus() {
 		getControl().setFocus();
 	}
@@ -896,6 +921,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#computeInput(Object)
 	 */
+	@Override
 	protected Object computeInput(Object input) {
 		//TODO: never used?
 		if (getControl() == null || ! (input instanceof IJavaElement))
@@ -928,6 +954,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#computeInput(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection, org.eclipse.jdt.core.IJavaElement, org.eclipse.core.runtime.IProgressMonitor)
 	 * @since 3.4
 	 */
+	@Override
 	protected Object computeInput(IWorkbenchPart part, ISelection selection, IJavaElement input, IProgressMonitor monitor) {
 		if (getControl() == null || input == null)
 			return null;
@@ -959,6 +986,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see AbstractInfoView#computeDescription(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection, org.eclipse.jdt.core.IJavaElement, org.eclipse.core.runtime.IProgressMonitor)
 	 * @since 3.4
 	 */
+	@Override
 	protected String computeDescription(IWorkbenchPart part, ISelection selection, IJavaElement inputElement, IProgressMonitor monitor) {
 		return ""; //$NON-NLS-1$
 	}
@@ -991,6 +1019,7 @@ public class JavadocView extends AbstractInfoView {
 	 * 
 	 * @param input a String containing the HTML to be showin in the view
 	 */
+	@Override
 	protected void doSetInput(Object input) {
 		String javadocHtml= (String)input;
 		fOriginalInput= javadocHtml;
@@ -1063,7 +1092,7 @@ public class JavadocView extends AbstractInfoView {
 				if (member instanceof IField) {
 					constantValue= computeFieldConstant(activePart, selection, (IField) member, monitor);
 					if (constantValue != null)
-						constantValue= HTMLPrinter.convertToHTMLContent(constantValue);
+						constantValue= HTMLPrinter.convertToHTMLContentWithWhitespace(constantValue);
 				}
 
 				HTMLPrinter.addSmallHeader(buffer, getInfoText(member, constantValue, true));
@@ -1118,7 +1147,7 @@ public class JavadocView extends AbstractInfoView {
 				HTMLPrinter.addSmallHeader(buffer, getInfoText(curr, null, true));
 				if (curr instanceof ILocalVariable) {
 					ISourceRange nameRange= ((ILocalVariable) curr).getNameRange();
-					ITypeRoot typeRoot= ((IMember) curr.getParent()).getTypeRoot();
+					ITypeRoot typeRoot= ((ILocalVariable) curr).getTypeRoot();
 					Region hoverRegion= new Region(nameRange.getOffset(), nameRange.getLength());
 					buffer.append("<br>"); //$NON-NLS-1$
 					JavadocHover.addAnnotations(buffer, curr, typeRoot, hoverRegion);
@@ -1163,7 +1192,7 @@ public class JavadocView extends AbstractInfoView {
 		}
 
 		StringBuffer buf= new StringBuffer();
-		JavadocHover.addImageAndLabel(buf, imageName, 16, 16, label.toString(), 20, 2);
+		JavadocHover.addImageAndLabel(buf, member, imageName, 16, 16, label.toString(), 20, 2);
 		return buf.toString();
 	}
 
@@ -1171,6 +1200,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#isIgnoringNewInput(org.eclipse.jdt.core.IJavaElement, org.eclipse.jface.viewers.ISelection)
 	 * @since 3.2
 	 */
+	@Override
 	protected boolean isIgnoringNewInput(IJavaElement je, IWorkbenchPart part, ISelection selection) {
 		if (fCurrent != null && fCurrent.getInputElement() instanceof URL)
 			return false;
@@ -1205,6 +1235,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#findSelectedJavaElement(IWorkbenchPart)
 	 */
+	@Override
 	protected IJavaElement findSelectedJavaElement(IWorkbenchPart part, ISelection selection) {
 		IJavaElement element;
 		try {
@@ -1240,6 +1271,7 @@ public class JavadocView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#getControl()
 	 */
+	@Override
 	protected Control getControl() {
 		if (fIsUsingBrowserWidget)
 			return fBrowser;
@@ -1251,6 +1283,7 @@ public class JavadocView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#getHelpContextId()
 	 * @since 3.1
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.JAVADOC_VIEW;
 	}
@@ -1328,7 +1361,7 @@ public class JavadocView extends AbstractInfoView {
 		if (monitor.isCanceled())
 			return null;
 
-		ASTParser p= ASTParser.newParser(AST.JLS3);
+		ASTParser p= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		p.setProject(constantField.getJavaProject());
 		IBinding[] createBindings;
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/SourceView.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/SourceView.java
index f954acb..fbc54de 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/SourceView.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/SourceView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -146,6 +146,7 @@ public class SourceView extends AbstractInfoView {
 		/**
 		 * Selects all in the viewer.
 		 */
+		@Override
 		public void run() {
 			fTextViewer.doOperation(ITextOperationTarget.SELECT_ALL);
 		}
@@ -175,6 +176,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#internalCreatePartControl(Composite)
 	 */
+	@Override
 	protected void internalCreatePartControl(Composite parent) {
 		IPreferenceStore store= JavaPlugin.getDefault().getCombinedPreferenceStore();
 		fViewer= new JavaSourceViewer(parent, null, null, false, SWT.V_SCROLL | SWT.H_SCROLL, store);
@@ -193,6 +195,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#internalCreatePartControl(Composite)
 	 */
+	@Override
 	protected void createActions() {
 		super.createActions();
 		fSelectAllAction= new SelectAllAction(fViewer);
@@ -203,6 +206,7 @@ public class SourceView extends AbstractInfoView {
 			/*
 			 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#getSelection()
 			 */
+			@Override
 			public ISelection getSelection() {
 				return convertToJavaElementSelection(fViewer.getSelection());
 			}
@@ -210,6 +214,7 @@ public class SourceView extends AbstractInfoView {
 			/*
 			 * @see org.eclipse.jdt.ui.actions.OpenAction#run(IStructuredSelection)
 			 */
+			@Override
 			public void run(IStructuredSelection selection) {
 				if (selection.isEmpty()) {
 					getShell().getDisplay().beep();
@@ -221,6 +226,7 @@ public class SourceView extends AbstractInfoView {
 			/*
 			 * @see org.eclipse.jdt.ui.actions.OpenAction#getElementToOpen(Object)
 			 */
+			@Override
 			public Object getElementToOpen(Object object) throws JavaModelException {
 				if (object instanceof IJavaElement)
 					fLastOpenedElement= (IJavaElement)object;
@@ -232,6 +238,7 @@ public class SourceView extends AbstractInfoView {
 			/*
 			 * @see org.eclipse.jdt.ui.actions.OpenAction#run(Object[])
 			 */
+			@Override
 			public void run(Object[] elements) {
 				stopListeningForSelectionChanges();
 				super.run(elements);
@@ -245,6 +252,7 @@ public class SourceView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#getSelectAllAction()
 	 * @since 3.0
 	 */
+	@Override
 	protected IAction getSelectAllAction() {
 		return fSelectAllAction;
 	}
@@ -252,6 +260,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#fillActionBars(IActionBars)
 	 */
+	@Override
 	protected void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		actionBars.setGlobalActionHandler(JdtActionConstants.OPEN, fOpen);
@@ -261,6 +270,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#getControl()
 	 */
+	@Override
 	protected Control getControl() {
 		return fViewer.getControl();
 	}
@@ -268,6 +278,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#menuAboutToShow(IMenuManager)
 	 */
+	@Override
 	public void menuAboutToShow(IMenuManager menu) {
 		super.menuAboutToShow(menu);
 		menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, fOpen);
@@ -276,6 +287,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#setForeground(Color)
 	 */
+	@Override
 	protected void setForeground(Color color) {
 		fViewer.getTextWidget().setForeground(color);
 	}
@@ -283,6 +295,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#setBackground(Color)
 	 */
+	@Override
 	protected void setBackground(Color color) {
 		fViewer.getTextWidget().setBackground(color);
 	}
@@ -291,6 +304,7 @@ public class SourceView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#getBackgroundColorKey()
 	 * @since 3.2
 	 */
+	@Override
 	protected String getBackgroundColorKey() {
 		return "org.eclipse.jdt.ui.DeclarationView.backgroundColor";		 //$NON-NLS-1$
 	}
@@ -360,6 +374,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#internalDispose()
 	 */
+	@Override
 	protected void internalDispose() {
 		fViewer= null;
 		fViewerConfiguration= null;
@@ -370,6 +385,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
 	 */
+	@Override
 	public void setFocus() {
 		fViewer.getTextWidget().setFocus();
 	}
@@ -377,6 +393,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#computeInput(Object)
 	 */
+	@Override
 	protected Object computeInput(Object input) {
 
 		if (fViewer == null || !(input instanceof ISourceReference))
@@ -428,6 +445,7 @@ public class SourceView extends AbstractInfoView {
 	/*
 	 * @see AbstractInfoView#doSetInput(Object)
 	 */
+	@Override
 	protected void doSetInput(Object input) {
 		if (input instanceof IDocument)
 			fViewer.setInput(input);
@@ -519,6 +537,7 @@ public class SourceView extends AbstractInfoView {
 	 * @see org.eclipse.jdt.internal.ui.infoviews.AbstractInfoView#getHelpContextId()
 	 * @since 3.1
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.SOURCE_VIEW;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizard.java
index 05777f6..c0bdd7b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,6 +92,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public RefactoringDescriptorProxy[] getDescriptors() {
 			if (fHistoryDelta != null)
 				return fHistoryDelta;
@@ -146,6 +147,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public boolean isEmpty() {
 			final RefactoringDescriptorProxy[] proxies= getDescriptors();
 			if (proxies != null)
@@ -156,6 +158,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public RefactoringHistory removeAll(final RefactoringHistory history) {
 			throw new UnsupportedOperationException();
 		}
@@ -231,10 +234,12 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 		}
 		setConfiguration(new RefactoringHistoryControlConfiguration(null, false, false) {
 
+			@Override
 			public String getProjectPattern() {
 				return JarImportMessages.JarImportWizard_project_pattern;
 			}
 
+			@Override
 			public String getWorkspaceCaption() {
 				return JarImportMessages.JarImportWizard_workspace_caption;
 			}
@@ -258,6 +263,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void addUserDefinedPages() {
 		fImportPage= new JarImportWizardPage(this, fImportWizard);
 		addPage(fImportPage);
@@ -266,6 +272,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean canFinish() {
 		return super.canFinish() && fImportData.getPackageFragmentRoot() != null && fImportData.getRefactoringFileLocation() != null;
 	}
@@ -273,6 +280,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean deconfigureClasspath(final IClasspathEntry[] entries, final IProgressMonitor monitor) throws CoreException {
 		final boolean rename= fImportData.isRenameJarFile();
 		if (rename && !fCancelled) {
@@ -305,6 +313,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public IWizardPage getNextPage(final IWizardPage page) {
 		if (page == fImportPage && fImportData.getRefactoringHistory() == null)
 			return null;
@@ -314,6 +323,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected IPackageFragmentRoot getPackageFragmentRoot() {
 		return fImportData.getPackageFragmentRoot();
 	}
@@ -321,6 +331,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected RefactoringHistory getRefactoringHistory() {
 		return fHistoryProxy;
 	}
@@ -396,6 +407,7 @@ public final class JarImportWizard extends BinaryRefactoringHistoryWizard implem
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performFinish() {
 		if (fNewSettings) {
 			final IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizardPage.java
index 3e9b3dd..e77a811 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -177,14 +177,16 @@ public final class JarImportWizardPage extends WizardPage {
 		label.setText(JarImportMessages.JarImportWizardPage_import_message);
 		final StandardJavaElementContentProvider contentProvider= new StandardJavaElementContentProvider() {
 
+			@Override
 			public Object[] getChildren(Object element) {
 				if ((element instanceof IJavaProject) || (element instanceof IJavaModel))
 					return super.getChildren(element);
 				return new Object[0];
 			}
 
+			@Override
 			protected Object[] getJavaProjects(final IJavaModel model) throws JavaModelException {
-				final Set set= new HashSet();
+				final Set<IJavaProject> set= new HashSet<IJavaProject>();
 				final IJavaProject[] projects= model.getJavaProjects();
 				for (int index= 0; index < projects.length; index++) {
 					if (JarImportWizard.isValidJavaProject(projects[index])) {
@@ -196,8 +198,9 @@ public final class JarImportWizardPage extends WizardPage {
 				return set.toArray();
 			}
 
+			@Override
 			protected Object[] getPackageFragmentRoots(final IJavaProject project) throws JavaModelException {
-				final Set set= new HashSet();
+				final Set<IPackageFragmentRoot> set= new HashSet<IPackageFragmentRoot>();
 				final IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 				for (int offset= 0; offset < roots.length; offset++) {
 					IPackageFragmentRoot root= roots[offset];
@@ -209,6 +212,7 @@ public final class JarImportWizardPage extends WizardPage {
 				return set.toArray();
 			}
 
+			@Override
 			public boolean hasChildren(final Object element) {
 				return (element instanceof IJavaProject) || (element instanceof IJavaModel);
 			}
@@ -266,6 +270,7 @@ public final class JarImportWizardPage extends WizardPage {
 		});
 		fLocationControl.getControl().addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public final void widgetSelected(final SelectionEvent event) {
 				handleInputChanged();
 			}
@@ -277,6 +282,7 @@ public final class JarImportWizardPage extends WizardPage {
 		SWTUtil.setButtonDimensionHint(button);
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public final void widgetSelected(final SelectionEvent event) {
 				handleBrowseButtonSelected();
 			}
@@ -297,6 +303,7 @@ public final class JarImportWizardPage extends WizardPage {
 		button.setSelection(!data.isRenameJarFile());
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				data.setRenameJarFile(!button.getSelection());
 			}
@@ -490,6 +497,7 @@ public final class JarImportWizardPage extends WizardPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setErrorMessage(final String message) {
 		if (!fFirstTime)
 			super.setErrorMessage(message);
@@ -500,6 +508,7 @@ public final class JarImportWizardPage extends WizardPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setVisible(final boolean visible) {
 		super.setVisible(visible);
 		if (visible)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/RefactoringLocationControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/RefactoringLocationControl.java
index a9a3d92..c9d991c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/RefactoringLocationControl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/RefactoringLocationControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -125,7 +125,7 @@ public class RefactoringLocationControl extends Composite {
 	public void saveHistory() {
 		final IDialogSettings settings= fWizard.getDialogSettings();
 		if (settings != null) {
-			final LinkedList locations= new LinkedList();
+			final LinkedList<String> locations= new LinkedList<String>();
 			final String[] items= fCombo.getItems();
 			for (int index= 0; index < items.length; index++)
 				locations.add(items[index]);
@@ -137,13 +137,14 @@ public class RefactoringLocationControl extends Composite {
 			final int size= locations.size();
 			for (int index= 0; index < size - MAX_HISTORY_SIZE; index++)
 				locations.removeLast();
-			settings.put(fKey, (String[]) locations.toArray(new String[locations.size()]));
+			settings.put(fKey, locations.toArray(new String[locations.size()]));
 		}
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setEnabled(final boolean enabled) {
 		super.setEnabled(enabled);
 		fCombo.setEnabled(enabled);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/AbstractJarDestinationWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/AbstractJarDestinationWizardPage.java
index e7144e6..5dca563 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/AbstractJarDestinationWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/AbstractJarDestinationWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,8 @@ import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
 
+import org.eclipse.core.filesystem.URIUtil;
+
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 
@@ -67,6 +69,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 	/*
 	 * Overrides method from WizardExportPage
 	 */
+	@Override
 	protected void createDestinationGroup(Composite parent) {
 
 		initializeDialogUnits(parent);
@@ -105,6 +108,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 		fDestinationBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		SWTUtil.setButtonDimensionHint(fDestinationBrowseButton);
 		fDestinationBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleDestinationBrowseButtonPressed();
 			}
@@ -127,7 +131,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 		}
 		String selectedFileName= dialog.open();
 		if (selectedFileName != null) {
-			IContainer[] findContainersForLocation= ResourcesPlugin.getWorkspace().getRoot().findContainersForLocation(new Path(selectedFileName));
+			IContainer[] findContainersForLocation= ResourcesPlugin.getWorkspace().getRoot().findContainersForLocationURI(URIUtil.toURI(new Path(selectedFileName).makeAbsolute()));
 			if (findContainersForLocation.length > 0) {
 				selectedFileName= findContainersForLocation[0].getFullPath().makeRelative().toString();
 			}
@@ -169,6 +173,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 		return "." + JarPackagerUtil.JAR_EXTENSION; //$NON-NLS-1$
 	}
 
+	@Override
 	protected void restoreWidgetValues() {
 		// destination
 		if (fJarPackage.getJarLocation().isEmpty())
@@ -225,6 +230,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 	/*
 	 * Overrides method from WizardDataTransferPage
 	 */
+	@Override
 	protected boolean validateDestinationGroup() {
 		if (fDestinationNamesCombo.getText().length() == 0) {
 			// Clear error
@@ -257,7 +263,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 		}
 		// Inform user about relative directory
 		String currentMessage= getMessage();
-		if (!(new File(fDestinationNamesCombo.getText()).isAbsolute())) {
+		if (!(Path.fromOSString(fDestinationNamesCombo.getText()).isAbsolute())) {
 			if (currentMessage == null)
 				setMessage(JarPackagerMessages.JarPackageWizardPage_info_relativeExportDestination, IMessageProvider.INFORMATION);
 		} else {
@@ -277,6 +283,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void saveWidgetValues() {
 		IDialogSettings settings= getDialogSettings();
 		if (settings != null) {
@@ -324,6 +331,7 @@ public abstract class AbstractJarDestinationWizardPage extends WizardExportResou
 		updatePageCompletion();
 	}
 
+	@Override
 	protected void updatePageCompletion() {
 		boolean pageComplete= isPageComplete();
 		setPageComplete(pageComplete);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CheckboxTreeAndListGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CheckboxTreeAndListGroup.java
index bb790e4..998e16f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CheckboxTreeAndListGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CheckboxTreeAndListGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,10 +51,10 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 
 	private Object fRoot;
 	private Object fCurrentTreeSelection;
-	private List fExpandedTreeNodes= new ArrayList();
-	private Map fCheckedStateStore= new HashMap(9);
-	private List fWhiteCheckedTreeItems= new ArrayList();
-	private List fListeners= new ArrayList();
+	private List<Object> fExpandedTreeNodes= new ArrayList<Object>();
+	private Map<Object, List<Object>> fCheckedStateStore= new HashMap<Object, List<Object>>(9);
+	private List<Object> fWhiteCheckedTreeItems= new ArrayList<Object>();
+	private List<ICheckStateListener> fListeners= new ArrayList<ICheckStateListener>();
 
 	private ITreeContentProvider fTreeContentProvider;
 	private IStructuredContentProvider fListContentProvider;
@@ -130,7 +130,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 
 		// if this tree element is already gray then its ancestors all are as well
 		if (!fCheckedStateStore.containsKey(treeElement))
-			fCheckedStateStore.put(treeElement, new ArrayList());
+			fCheckedStateStore.put(treeElement, new ArrayList<Object>());
 
 		Object parent= fTreeContentProvider.getParent(treeElement);
 		if (parent != null)
@@ -160,7 +160,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 	 *	@param treeElement java.lang.Object
 	 */
 	protected boolean areAllElementsChecked(Object treeElement) {
-		List checkedElements= (List)fCheckedStateStore.get(treeElement);
+		List<Object> checkedElements= fCheckedStateStore.get(treeElement);
 		if (checkedElements == null) // ie.- tree item not even gray-checked
 			return false;
 
@@ -282,7 +282,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 	protected boolean determineShouldBeAtLeastGrayChecked(Object treeElement) {
 		// if any list items associated with treeElement are checked then it
 		// retains its gray-checked status regardless of its children
-		List checked= (List) fCheckedStateStore.get(treeElement);
+		List<Object> checked= fCheckedStateStore.get(treeElement);
 		if (checked != null && (!checked.isEmpty()))
 			return true;
 
@@ -337,11 +337,11 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 	 *
 	 *	@return java.util.Vector
 	 */
-	public Iterator getAllCheckedListItems() {
-		Set result= new HashSet();
-		Iterator listCollectionsEnum= fCheckedStateStore.values().iterator();
+	public Iterator<Object> getAllCheckedListItems() {
+		Set<Object> result= new HashSet<Object>();
+		Iterator<List<Object>> listCollectionsEnum= fCheckedStateStore.values().iterator();
 		while (listCollectionsEnum.hasNext())
-			result.addAll((List)listCollectionsEnum.next());
+			result.addAll(listCollectionsEnum.next());
 		return result.iterator();
 	}
 	/**
@@ -350,8 +350,8 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 	 *
 	 *	@return java.util.Vector
 	 */
-	public Set getAllCheckedTreeItems() {
-		return new HashSet(fCheckedStateStore.keySet());
+	public Set<Object> getAllCheckedTreeItems() {
+		return new HashSet<Object>(fCheckedStateStore.keySet());
 	}
 	/**
 	 *	Answers the number of elements that have been checked by the
@@ -418,7 +418,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 		if (fCheckedStateStore.containsKey(treeElement))
 			return; // no need to proceed upwards from here
 
-		fCheckedStateStore.put(treeElement, new ArrayList());
+		fCheckedStateStore.put(treeElement, new ArrayList<Object>());
 		if (determineShouldBeWhiteChecked(treeElement)) {
 			setWhiteChecked(treeElement, true);
 		}
@@ -463,14 +463,14 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 		Object listElement,
 		boolean state,
 		boolean updatingFromSelection) {
-		List checkedListItems= (List) fCheckedStateStore.get(fCurrentTreeSelection);
+		List<Object> checkedListItems= fCheckedStateStore.get(fCurrentTreeSelection);
 
 		if (state) {
 			if (checkedListItems == null) {
 				// since the associated tree item has gone from 0 -> 1 checked
 				// list items, tree checking may need to be updated
 				grayCheckHierarchy(fCurrentTreeSelection);
-				checkedListItems= (List) fCheckedStateStore.get(fCurrentTreeSelection);
+				checkedListItems= fCheckedStateStore.get(fCurrentTreeSelection);
 			}
 			checkedListItems.add(listElement);
 		} else {
@@ -491,9 +491,9 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 	 * @param event
 	 */
 	protected void notifyCheckStateChangeListeners(CheckStateChangedEvent event) {
-		Iterator listenersEnum= fListeners.iterator();
+		Iterator<ICheckStateListener> listenersEnum= fListeners.iterator();
 		while (listenersEnum.hasNext())
-			 ((ICheckStateListener) listenersEnum.next()).checkStateChanged(event);
+			 listenersEnum.next().checkStateChanged(event);
 	}
 	/**
 	 *Sets the contents of the list viewer based upon the specified selected
@@ -506,10 +506,10 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 			return;
 		fCurrentTreeSelection= treeElement;
 		fListViewer.setInput(treeElement);
-		List listItemsToCheck= (List) fCheckedStateStore.get(treeElement);
+		List<Object> listItemsToCheck= fCheckedStateStore.get(treeElement);
 
 		if (listItemsToCheck != null) {
-			Iterator listItemsEnum= listItemsToCheck.iterator();
+			Iterator<Object> listItemsEnum= listItemsToCheck.iterator();
 			while (listItemsEnum.hasNext())
 				fListViewer.setChecked(listItemsEnum.next(), true);
 		}
@@ -602,7 +602,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 
 		if (state) {
 			Object[] listItems= getListElements(treeElement);
-			List listItemsChecked= new ArrayList();
+			List<Object> listItemsChecked= new ArrayList<Object>();
 			for (int i= 0; i < listItems.length; ++i)
 				listItemsChecked.add(listItems[i]);
 
@@ -740,7 +740,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 	 * @param items with keys of Object (the tree element) and values of List (the selected
 	 * list elements).
 	 */
-	public void updateSelections(final Map items) {
+	public void updateSelections(final Map<Object, List<Object>> items) {
 
 		//Potentially long operation - show a busy cursor
 		BusyIndicator.showWhile(fTreeViewer.getControl().getDisplay(), new Runnable() {
@@ -758,7 +758,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 	 */
 	protected Object[] filter(ViewerFilter[] filters, Object[] elements) {
 		if (filters != null) {
-			ArrayList filtered = new ArrayList(elements.length);
+			ArrayList<Object> filtered = new ArrayList<Object>(elements.length);
 			for (int i = 0; i < elements.length; i++) {
 				boolean add = true;
 				for (int j = 0; j < filters.length; j++) {
@@ -782,18 +782,18 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 		return filter(fListViewer.getFilters(), fListContentProvider.getElements(element));
 	}
 
-	public Set getWhiteCheckedTreeItems() {
-		return new HashSet(fWhiteCheckedTreeItems);
+	public Set<Object> getWhiteCheckedTreeItems() {
+		return new HashSet<Object>(fWhiteCheckedTreeItems);
 	}
 
-	private void handleUpdateSelection(Map items) {
-		Iterator keyIterator= items.keySet().iterator();
+	private void handleUpdateSelection(Map<Object, List<Object>> items) {
+		Iterator<Object> keyIterator= items.keySet().iterator();
 
 		//Update the store before the hierarchy to prevent updating parents before all of the children are done
 		while (keyIterator.hasNext()) {
 			Object key= keyIterator.next();
 			//Replace the items in the checked state store with those from the supplied items
-			List selections= (List) items.get(key);
+			List<Object> selections= items.get(key);
 			if (selections.size() == 0)
 				//If it is empty remove it from the list
 				fCheckedStateStore.remove(key);
@@ -815,7 +815,7 @@ public class CheckboxTreeAndListGroup implements ICheckStateListener, ISelection
 			updateHierarchy(key);
 			if (fCurrentTreeSelection != null && fCurrentTreeSelection.equals(key)) {
 				fListViewer.setAllChecked(false);
-				fListViewer.setCheckedElements(((List) items.get(key)).toArray());
+				fListViewer.setCheckedElements(items.get(key).toArray());
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/ContainerFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/ContainerFilter.java
index ab73386..d181ac0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/ContainerFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/ContainerFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ class ContainerFilter  extends ViewerFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		boolean isContainer= element instanceof IContainer;
 		if (!isContainer && element instanceof IJavaElement) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CreateJarActionDelegate.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CreateJarActionDelegate.java
index cf3510c..cf2a46f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CreateJarActionDelegate.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/CreateJarActionDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,13 +78,13 @@ public class CreateJarActionDelegate extends JarPackageActionDelegate {
 	}
 
 	private JarPackageData[] readJarPackages(IFile[] descriptions, MultiStatus readStatus) {
-		List jarPackagesList= new ArrayList(descriptions.length);
+		List<JarPackageData> jarPackagesList= new ArrayList<JarPackageData>(descriptions.length);
 		for (int i= 0; i < descriptions.length; i++) {
 			JarPackageData jarPackage= readJarPackage(descriptions[i], readStatus);
 			if (jarPackage != null)
 				jarPackagesList.add(jarPackage);
 		}
-		return (JarPackageData[])jarPackagesList.toArray(new JarPackageData[jarPackagesList.size()]);
+		return jarPackagesList.toArray(new JarPackageData[jarPackagesList.size()]);
 	}
 
 	private IStatus export(JarPackageData[] jarPackages) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java
index c819681..905df38 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,6 +102,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 		/*
 		 * allows to change the message
 		 */
+		@Override
 		protected void setMessage(String message) {
 			super.setMessage(message);
 		}
@@ -111,9 +112,9 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	private JarPackageData fJarPackage;
 	private JarPackageData[] fJarPackages;
 	private Shell fParentShell;
-	private Map fJavaNameToClassFilesMap;
+	private Map<String, ArrayList<IResource>> fJavaNameToClassFilesMap;
 	private IContainer fClassFilesMapContainer;
-	private Set fExportedClassContainers;
+	private Set<IContainer> fExportedClassContainers;
 	private MessageMultiStatus fStatus;
 	private StandardJavaElementContentProvider fJavaElementContentProvider;
 	private boolean fFilesSaved;
@@ -193,7 +194,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	 * @return int
 	 */
 	private int countSelectedElements() {
-		Set enclosingJavaProjects= new HashSet(10);
+		Set<IJavaProject> enclosingJavaProjects= new HashSet<IJavaProject>(10);
 		int count= 0;
 
 		int n= fJarPackage.getElements().length;
@@ -252,9 +253,9 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 		if (fJarPackage.areOutputFoldersExported()) {
 			if (!fJarPackage.areJavaFilesExported())
 				count= 0;
-			Iterator iter= enclosingJavaProjects.iterator();
+			Iterator<IJavaProject> iter= enclosingJavaProjects.iterator();
 			while (iter.hasNext()) {
-				IJavaProject javaProject= (IJavaProject)iter.next();
+				IJavaProject javaProject= iter.next();
 				IContainer[] outputContainers;
 				try {
 					outputContainers= getOutputContainers(javaProject);
@@ -584,7 +585,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 					return;
 
 				// find corresponding file(s) on classpath and export
-				Iterator iter= filesOnClasspath(typeRootElement, destinationPath, progressMonitor);
+				Iterator<? extends IResource> iter= filesOnClasspath(typeRootElement, destinationPath, progressMonitor);
 				IPath baseDestinationPath= destinationPath.removeLastSegments(1);
 				while (iter.hasNext()) {
 					IFile file= (IFile)iter.next();
@@ -608,8 +609,8 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	 * @throws InterruptedException thrown when cancelled
 	 */
 	private void exportSelectedElements(IProgressMonitor progressMonitor) throws InterruptedException {
-		fExportedClassContainers= new HashSet(10);
-		Set enclosingJavaProjects= new HashSet(10);
+		fExportedClassContainers= new HashSet<IContainer>(10);
+		Set<IJavaProject> enclosingJavaProjects= new HashSet<IJavaProject>(10);
 		int n= fJarPackage.getElements().length;
 		for (int i= 0; i < n; i++) {
 			Object element= fJarPackage.getElements()[i];
@@ -639,13 +640,13 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 		return null;
 	}
 
-	private void exportOutputFolders(IProgressMonitor progressMonitor, Set javaProjects) throws InterruptedException {
+	private void exportOutputFolders(IProgressMonitor progressMonitor, Set<IJavaProject> javaProjects) throws InterruptedException {
 		if (javaProjects == null)
 			return;
 
-		Iterator iter= javaProjects.iterator();
+		Iterator<IJavaProject> iter= javaProjects.iterator();
 		while (iter.hasNext()) {
-			IJavaProject javaProject= (IJavaProject)iter.next();
+			IJavaProject javaProject= iter.next();
 			IContainer[] outputContainers;
 			try {
 				outputContainers= getOutputContainers(javaProject);
@@ -660,7 +661,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	}
 
 	private IContainer[] getOutputContainers(IJavaProject javaProject) throws CoreException {
-		Set outputPaths= new HashSet();
+		Set<IPath> outputPaths= new HashSet<IPath>();
 		boolean includeDefaultOutputPath= false;
 		IPackageFragmentRoot[] roots= javaProject.getPackageFragmentRoots();
 		for (int i= 0; i < roots.length; i++) {
@@ -682,10 +683,10 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 		}
 
 		// Convert paths to containers
-		Set outputContainers= new HashSet(outputPaths.size());
-		Iterator iter= outputPaths.iterator();
+		Set<IContainer> outputContainers= new HashSet<IContainer>(outputPaths.size());
+		Iterator<IPath> iter= outputPaths.iterator();
 		while (iter.hasNext()) {
-			IPath path= (IPath)iter.next();
+			IPath path= iter.next();
 			if (javaProject.getProject().getFullPath().equals(path))
 				outputContainers.add(javaProject.getProject());
 			else {
@@ -697,7 +698,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 					outputContainers.add(outputFolder);
 			}
 		}
-		return (IContainer[])outputContainers.toArray(new IContainer[outputContainers.size()]);
+		return outputContainers.toArray(new IContainer[outputContainers.size()]);
 	}
 
 	/**
@@ -710,7 +711,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	 * @return	the iterator over the corresponding classpath files for the given file
 	 * @throws CoreException if an exception occurs when looking for the files
 	 */
-	private Iterator filesOnClasspath(ITypeRoot typeRootElement, IPath pathInJar, IProgressMonitor progressMonitor) throws CoreException {
+	private Iterator<? extends IResource> filesOnClasspath(ITypeRoot typeRootElement, IPath pathInJar, IProgressMonitor progressMonitor) throws CoreException {
 		IFile file= (IFile) typeRootElement.getResource();
 		IJavaProject javaProject= typeRootElement.getJavaProject();
 		IPackageFragmentRoot pkgRoot= JavaModelUtil.getPackageFragmentRoot(typeRootElement);
@@ -778,7 +779,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 			}
 			fClassFilesMapContainer= classContainer;
 		}
-		ArrayList classFileList= (ArrayList)fJavaNameToClassFilesMap.get(file.getName());
+		ArrayList<IResource> classFileList= fJavaNameToClassFilesMap.get(file.getName());
 		if (classFileList == null || classFileList.isEmpty()) {
 			String msg= Messages.format(JarPackagerMessages.JarFileExportOperation_classFileOnClasspathNotAccessible, BasicElementLabels.getPathLabel(file.getFullPath(), false));
 			throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IJavaStatusConstants.INTERNAL_ERROR, msg, null));
@@ -786,9 +787,9 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 		return classFileList.iterator();
 	}
 
-	private Iterator getClassesIn(IContainer classContainer) throws CoreException {
+	private Iterator<IResource> getClassesIn(IContainer classContainer) throws CoreException {
 		IResource[] resources= classContainer.members();
-		List files= new ArrayList(resources.length);
+		List<IResource> files= new ArrayList<IResource>(resources.length);
 		for (int i= 0; i < resources.length; i++)
 			if (resources[i].getType() == IResource.FILE && isClassFile(resources[i]))
 				files.add(resources[i]);
@@ -828,15 +829,15 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	 * Builds and returns a map that has the class files
 	 * for each java file in a given directory
 	 */
-	private Map buildJavaToClassMap(IContainer container, IProgressMonitor monitor) throws CoreException {
+	private Map<String, ArrayList<IResource>> buildJavaToClassMap(IContainer container, IProgressMonitor monitor) throws CoreException {
 		if (container == null || !container.isAccessible())
-			return new HashMap(0);
+			return new HashMap<String, ArrayList<IResource>>(0);
 		/*
 		 * XXX: Bug 6584: Need a way to get class files for a java file (or CU)
 		 */
 		IClassFileReader cfReader= null;
 		IResource[] members= container.members();
-		Map map= new HashMap(members.length);
+		Map<String, ArrayList<IResource>> map= new HashMap<String, ArrayList<IResource>>(members.length);
 		for (int i= 0;  i < members.length; i++) {
 			if (isClassFile(members[i])) {
 				IFile classFile= (IFile)members[i];
@@ -870,12 +871,12 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 							return null;
 						}
 						String javaName= new String(sourceAttribute.getSourceFileName());
-						Object classFiles= map.get(javaName);
+						ArrayList<IResource> classFiles= map.get(javaName);
 						if (classFiles == null) {
-							classFiles= new ArrayList(3);
+							classFiles= new ArrayList<IResource>(3);
 							map.put(javaName, classFiles);
 						}
-						((ArrayList)classFiles).add(classFile);
+						classFiles.add(classFile);
 					}
 				}
 			}
@@ -974,6 +975,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	 * @throws InterruptedException thrown when cancelled
 	 * @see	#getStatus()
 	 */
+	@Override
 	protected void execute(IProgressMonitor progressMonitor) throws InvocationTargetException, InterruptedException {
 		int count= fJarPackages.length;
 		progressMonitor.beginTask("", count); //$NON-NLS-1$
@@ -1143,7 +1145,7 @@ public class JarFileExportOperation extends WorkspaceModifyOperation implements
 	}
 
 	private void buildProjects(IProgressMonitor progressMonitor) {
-		Set builtProjects= new HashSet(10);
+		Set<IProject> builtProjects= new HashSet<IProject>(10);
 		Object[] elements= fJarPackage.getElements();
 		for (int i= 0; i < elements.length; i++) {
 			IProject project= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarManifestWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarManifestWizardPage.java
index 5efb1ac..f10cf4a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarManifestWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarManifestWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ import org.eclipse.ui.dialogs.SaveAsDialog;
 import org.eclipse.ui.dialogs.SelectionDialog;
 
 import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
@@ -270,6 +271,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 		fNewManifestFileBrowseButton.setText(JarPackagerMessages.JarManifestWizardPage_newManifestFileBrowseButton_text);
 		fNewManifestFileBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		fNewManifestFileBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleNewManifestFileBrowseButtonPressed();
 			}
@@ -301,6 +303,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 		fManifestFileBrowseButton.setText(JarPackagerMessages.JarManifestWizardPage_manifestFileBrowse_text);
 		fManifestFileBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		fManifestFileBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleManifestFileBrowseButtonPressed();
 			}
@@ -341,6 +344,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 		fUnSealedPackagesDetailsButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		fUnSealedPackagesDetailsButton.setText(JarPackagerMessages.JarManifestWizardPage_unsealPackagesButton_text);
 		fUnSealedPackagesDetailsButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleUnSealPackagesDetailsButtonPressed();
 			}
@@ -364,6 +368,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 		fSealedPackagesDetailsButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		fSealedPackagesDetailsButton.setText(JarPackagerMessages.JarManifestWizardPage_sealedPackagesDetailsButton_text);
 		fSealedPackagesDetailsButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleSealPackagesDetailsButtonPressed();
 			}
@@ -391,6 +396,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 			/*
 			 * @see KeyListener#keyReleased(KeyEvent)
 			 */
+			@Override
 			public void keyReleased(KeyEvent e) {
 				fJarPackage.setManifestMainClass(findMainMethodByName(fMainClassText.getText()));
 				update();
@@ -402,6 +408,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 		fMainClassBrowseButton.setText(JarPackagerMessages.JarManifestWizardPage_mainClassBrowseButton_text);
 		fMainClassBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		fMainClassBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleMainClassBrowseButtonPressed();
 			}
@@ -451,12 +458,12 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 
 	private IType findMainMethodByName(String name) {
 		if (fMainTypes == null) {
-			List resources= JarPackagerUtil.asResources(fJarPackage.getElements());
+			List<IResource> resources= JarPackagerUtil.asResources(fJarPackage.getElements());
 			if (resources == null) {
 				setErrorMessage(JarPackagerMessages.JarManifestWizardPage_error_noResourceSelected);
 				return null;
 			}
-			IJavaSearchScope searchScope= JavaSearchScopeFactory.getInstance().createJavaSearchScope((IResource[])resources.toArray(new IResource[resources.size()]), true);
+			IJavaSearchScope searchScope= JavaSearchScopeFactory.getInstance().createJavaSearchScope(resources.toArray(new IResource[resources.size()]), true);
 			MainMethodSearchEngine engine= new MainMethodSearchEngine();
 			try {
 				fMainTypes= engine.searchMainMethods(getContainer(), searchScope, 0);
@@ -474,12 +481,12 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 	}
 
 	protected void handleMainClassBrowseButtonPressed() {
-		List resources= JarPackagerUtil.asResources(fJarPackage.getElements());
+		List<IResource> resources= JarPackagerUtil.asResources(fJarPackage.getElements());
 		if (resources == null) {
 			setErrorMessage(JarPackagerMessages.JarManifestWizardPage_error_noResourceSelected);
 			return;
 		}
-		IJavaSearchScope searchScope= JavaSearchScopeFactory.getInstance().createJavaSearchScope((IResource[])resources.toArray(new IResource[resources.size()]), true);
+		IJavaSearchScope searchScope= JavaSearchScopeFactory.getInstance().createJavaSearchScope(resources.toArray(new IResource[resources.size()]), true);
 		SelectionDialog dialog= JavaUI.createMainTypeDialog(getContainer().getShell(), getContainer(), searchScope, 0, false, ""); //$NON-NLS-1$
 		dialog.setTitle(JarPackagerMessages.JarManifestWizardPage_mainTypeSelectionDialog_title);
 		dialog.setMessage(JarPackagerMessages.JarManifestWizardPage_mainTypeSelectionDialog_message);
@@ -575,6 +582,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 	/*
 	 * Implements method from IJarPackageWizardPage
 	 */
+	@Override
 	public boolean isPageComplete() {
 		boolean isPageComplete= true;
 		setMessage(null);
@@ -621,7 +629,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 				return false;
 			}
 		}
-		Set selectedPackages= getPackagesForSelectedResources();
+		Set<IJavaElement> selectedPackages= getPackagesForSelectedResources();
 		if (fJarPackage.isJarSealed()
 				&& !selectedPackages.containsAll(Arrays.asList(fJarPackage.getPackagesToUnseal()))) {
 			setErrorMessage(JarPackagerMessages.JarManifestWizardPage_error_unsealedPackagesNotInSelection);
@@ -644,6 +652,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 	/*
 	 * Implements method from IWizardPage.
 	 */
+	@Override
 	public void setPreviousPage(IWizardPage page) {
 		super.setPreviousPage(page);
 		fMainTypes= null;
@@ -881,9 +890,9 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 	 * @param packageFragments the package fragments
 	 * @return a new selection dialog
 	 */
-	protected SelectionDialog createPackageDialog(Set packageFragments) {
-		List packages= new ArrayList(packageFragments.size());
-		for (Iterator iter= packageFragments.iterator(); iter.hasNext();) {
+	protected SelectionDialog createPackageDialog(Set<IJavaElement> packageFragments) {
+		List<IPackageFragment> packages= new ArrayList<IPackageFragment>(packageFragments.size());
+		for (Iterator<IJavaElement> iter= packageFragments.iterator(); iter.hasNext();) {
 			IPackageFragment fragment= (IPackageFragment)iter.next();
 			boolean containsJavaElements= false;
 			int kind;
@@ -898,6 +907,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 				packages.add(fragment);
 		}
 		StandardJavaElementContentProvider cp= new StandardJavaElementContentProvider() {
+			@Override
 			public boolean hasChildren(Object element) {
 				// prevent the + from being shown in front of packages
 				return !(element instanceof IPackageFragment) && super.hasChildren(element);
@@ -935,7 +945,7 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 	 */
 	protected IPackageFragment[] getPackagesFromDialog(SelectionDialog dialog) {
 		if (dialog.getReturnCode() == Window.OK && dialog.getResult().length > 0)
-			return (IPackageFragment[])Arrays.asList(dialog.getResult()).toArray(new IPackageFragment[dialog.getResult().length]);
+			return Arrays.asList(dialog.getResult()).toArray(new IPackageFragment[dialog.getResult().length]);
 		else
 			return new IPackageFragment[0];
 	}
@@ -977,8 +987,8 @@ class JarManifestWizardPage extends WizardPage implements IJarPackageWizardPage
 	 * Returns the minimal set of packages which contain all the selected Java resources.
 	 * @return	the Set of IPackageFragments which contain all the selected resources
 	 */
-	private Set getPackagesForSelectedResources() {
-		Set packages= new HashSet();
+	private Set<IJavaElement> getPackagesForSelectedResources() {
+		Set<IJavaElement> packages= new HashSet<IJavaElement>();
 		int n= fJarPackage.getElements().length;
 		for (int i= 0; i < n; i++) {
 			Object element= fJarPackage.getElements()[i];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarOptionsPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarOptionsPage.java
index c360506..7583dfc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarOptionsPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarOptionsPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -288,6 +288,7 @@ class JarOptionsPage extends WizardPage implements IJarPackageWizardPage {
 	/*
 	 * Implements method from IJarPackageWizardPage
 	 */
+	@Override
 	public boolean isPageComplete() {
 		if (fJarPackage.isDescriptionSaved()){
 			if (fJarPackage.getDescriptionLocation().toString().length() == 0) {
@@ -319,6 +320,7 @@ class JarOptionsPage extends WizardPage implements IJarPackageWizardPage {
 		return true;
 	}
 
+	@Override
 	public boolean canFlipToNextPage() {
 		return fJarPackage.areGeneratedFilesExported() && super.canFlipToNextPage();
 	}
@@ -350,6 +352,7 @@ class JarOptionsPage extends WizardPage implements IJarPackageWizardPage {
 		fDescriptionFileBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		SWTUtil.setButtonDimensionHint(fDescriptionFileBrowseButton);
 		fDescriptionFileBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleDescriptionFileBrowseButtonPressed();
 			}
@@ -373,6 +376,7 @@ class JarOptionsPage extends WizardPage implements IJarPackageWizardPage {
 	/*
 	 * Method declared on IWizardPage.
 	 */
+	@Override
 	public void setPreviousPage(IWizardPage page) {
 		super.setPreviousPage(page);
 		updateWidgetEnablements();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageActionDelegate.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageActionDelegate.java
index 3950afd..f2daaa9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageActionDelegate.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageActionDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,7 +86,7 @@ abstract class JarPackageActionDelegate implements IObjectActionDelegate {
 	 */
 	protected IFile[] getDescriptionFiles(IStructuredSelection selection) {
 		IFile[] files= new IFile[selection.size()];
-		Iterator iter= selection.iterator();
+		Iterator<?> iter= selection.iterator();
 		int i= 0;
 		while (iter.hasNext())
 			files[i++]= (IFile)iter.next();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java
index 6d86a39..7c1e848 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ import org.w3c.dom.NodeList;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
@@ -173,7 +174,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 		if (element.getNodeName().equals("storedRefactorings")) { //$NON-NLS-1$
 			jarPackage.setExportStructuralOnly(getBooleanAttribute(element, "structuralOnly", jarPackage.isExportStructuralOnly())); //$NON-NLS-1$
 			jarPackage.setDeprecationAware(getBooleanAttribute(element, "deprecationInfo", jarPackage.isDeprecationAware())); //$NON-NLS-1$
-			List elements= new ArrayList();
+			List<IAdaptable> elements= new ArrayList<IAdaptable>();
 			int count= 1;
 			String value= element.getAttribute("project" + count); //$NON-NLS-1$
 			while (value != null && !"".equals(value)) { //$NON-NLS-1$
@@ -183,7 +184,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 				count++;
 				value= element.getAttribute("project" + count); //$NON-NLS-1$
 			}
-			jarPackage.setRefactoringProjects((IProject[]) elements.toArray(new IProject[elements.size()]));
+			jarPackage.setRefactoringProjects(elements.toArray(new IProject[elements.size()]));
 			elements.clear();
 			count= 1;
 			IRefactoringHistoryService service= RefactoringCore.getHistoryService();
@@ -211,7 +212,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 			} finally {
 				service.disconnect();
 			}
-			jarPackage.setRefactoringDescriptors((RefactoringDescriptorProxy[]) elements.toArray(new RefactoringDescriptorProxy[elements.size()]));
+			jarPackage.setRefactoringDescriptors(elements.toArray(new RefactoringDescriptorProxy[elements.size()]));
 		}
 	}
 
@@ -254,7 +255,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 			jarPackage.setExportOutputFolders(getBooleanAttribute(element, "exportOutputFolder", false)); //$NON-NLS-1$
 			jarPackage.setExportJavaFiles(getBooleanAttribute(element, "exportJavaFiles")); //$NON-NLS-1$
 			NodeList selectedElements= element.getChildNodes();
-			Set elementsToExport= new HashSet(selectedElements.getLength());
+			Set<IAdaptable> elementsToExport= new HashSet<IAdaptable>(selectedElements.getLength());
 			for (int j= 0; j < selectedElements.getLength(); j++) {
 				Node selectedNode= selectedElements.item(j);
 				if (selectedNode.getNodeType() != Node.ELEMENT_NODE)
@@ -277,7 +278,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 	private void xmlReadSelectedProjects(JarPackageData jarPackage, Element element) throws java.io.IOException {
 		if (element.getNodeName().equals("selectedProjects")) { //$NON-NLS-1$
 			NodeList selectedElements= element.getChildNodes();
-			Set selectedProjects= new HashSet(selectedElements.getLength());
+			Set<IAdaptable> selectedProjects= new HashSet<IAdaptable>(selectedElements.getLength());
 			for (int index= 0; index < selectedElements.getLength(); index++) {
 				Node node= selectedElements.item(index);
 				if (node.getNodeType() != Node.ELEMENT_NODE)
@@ -286,7 +287,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 				if (selectedElement.getNodeName().equals("project")) //$NON-NLS-1$
 					addProject(selectedProjects ,selectedElement);
 			}
-			jarPackage.setRefactoringProjects((IProject[]) selectedProjects.toArray(new IProject[selectedProjects.size()]));
+			jarPackage.setRefactoringProjects(selectedProjects.toArray(new IProject[selectedProjects.size()]));
 		}
 	}
 
@@ -306,7 +307,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 		throw new IOException(JarPackagerMessages.JarPackageReader_error_illegalValueForBooleanAttribute);
 	}
 
-	private void addFile(Set selectedElements, Element element) throws IOException {
+	private void addFile(Set<IAdaptable> selectedElements, Element element) throws IOException {
 		IPath path= getPath(element);
 		if (path != null) {
 			IFile file= JavaPlugin.getWorkspace().getRoot().getFile(path);
@@ -315,7 +316,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 		}
 	}
 
-	private void addFolder(Set selectedElements, Element element) throws IOException {
+	private void addFolder(Set<IAdaptable> selectedElements, Element element) throws IOException {
 		IPath path= getPath(element);
 		if (path != null) {
 			IFolder folder= JavaPlugin.getWorkspace().getRoot().getFolder(path);
@@ -324,7 +325,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 		}
 	}
 
-	private void addProject(Set selectedElements, Element element) throws IOException {
+	private void addProject(Set<IAdaptable> selectedElements, Element element) throws IOException {
 		String name= element.getAttribute("name"); //$NON-NLS-1$
 		if (name.length() == 0)
 			throw new IOException(JarPackagerMessages.JarPackageReader_error_tagNameNotFound);
@@ -340,7 +341,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 		return Path.fromPortableString(element.getAttribute("path")); //$NON-NLS-1$
 	}
 
-	private void addJavaElement(Set selectedElements, Element element) throws IOException {
+	private void addJavaElement(Set<IAdaptable> selectedElements, Element element) throws IOException {
 		String handleId= element.getAttribute("handleIdentifier"); //$NON-NLS-1$
 		if (handleId.length() == 0)
 			throw new IOException(JarPackagerMessages.JarPackageReader_error_tagHandleIdentifierNotFoundOrEmpty);
@@ -357,7 +358,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 		if (list.getLength() == 0)
 			return null; // optional entry is not present
 		NodeList packageNodes= list.item(0).getChildNodes();
-		List packages= new ArrayList(packageNodes.getLength());
+		List<IJavaElement> packages= new ArrayList<IJavaElement>(packageNodes.getLength());
 		for (int i= 0; i < packageNodes.getLength(); i++) {
 			Node packageNode= packageNodes.item(i);
 			if (packageNode.getNodeType() == Node.ELEMENT_NODE && packageNode.getNodeName().equals("package")) { //$NON-NLS-1$
@@ -371,7 +372,7 @@ public class JarPackageReader extends Object implements IJarDescriptionReader {
 					addWarning(JarPackagerMessages.JarPackageReader_warning_javaElementDoesNotExist, null);
 			}
 		}
-		return (IPackageFragment[])packages.toArray(new IPackageFragment[packages.size()]);
+		return packages.toArray(new IPackageFragment[packages.size()]);
 	}
 
 	private IType getMainClass(Element element) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizard.java
index 154a111..1ecc5e4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,7 +99,7 @@ public class JarPackageWizard extends Wizard implements IExportWizard {
 		}
 	}
 
-	private void addJavaElement(List selectedElements, IJavaElement je) {
+	private void addJavaElement(List<Object> selectedElements, IJavaElement je) {
 		if (je.getElementType() == IJavaElement.COMPILATION_UNIT)
 			selectedElements.add(je);
 		else if (je.getElementType() == IJavaElement.CLASS_FILE)
@@ -129,6 +129,7 @@ public class JarPackageWizard extends Wizard implements IExportWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		fJarPackageWizardPage= new JarPackageWizardPage(fJarPackage, fSelection);
@@ -138,7 +139,7 @@ public class JarPackageWizard extends Wizard implements IExportWizard {
 		addPage(new JarManifestWizardPage(fJarPackage));
 	}
 
-	private void addProject(List selectedElements, IProject project) {
+	private void addProject(List<Object> selectedElements, IProject project) {
 		try {
 			if (project.hasNature(JavaCore.NATURE_ID))
 				selectedElements.add(JavaCore.create(project));
@@ -147,7 +148,7 @@ public class JarPackageWizard extends Wizard implements IExportWizard {
 		}
 	}
 
-	private void addResource(List selectedElements, IResource resource) {
+	private void addResource(List<Object> selectedElements, IResource resource) {
 		IJavaElement je= JavaCore.create(resource);
 		if (je != null && je.exists() && je.getElementType() == IJavaElement.COMPILATION_UNIT)
 			selectedElements.add(je);
@@ -180,12 +181,14 @@ public class JarPackageWizard extends Wizard implements IExportWizard {
 		return true;
 	}
 
+	@Override
 	public IWizardPage getNextPage(IWizardPage page) {
 		if (page == fJarPackageWizardPage && !fJarPackage.isRefactoringAware())
 			return fJarOptionsWizardPage;
 		return super.getNextPage(page);
 	}
 
+	@Override
 	public IWizardPage getPreviousPage(IWizardPage page) {
 		if (page == fJarOptionsWizardPage && !fJarPackage.isRefactoringAware())
 			return fJarPackageWizardPage;
@@ -205,8 +208,8 @@ public class JarPackageWizard extends Wizard implements IExportWizard {
 		ISelection currentSelection= JavaPlugin.getActiveWorkbenchWindow().getSelectionService().getSelection();
 		if (currentSelection instanceof IStructuredSelection) {
 			IStructuredSelection structuredSelection= (IStructuredSelection) currentSelection;
-			List selectedElements= new ArrayList(structuredSelection.size());
-			Iterator iter= structuredSelection.iterator();
+			List<Object> selectedElements= new ArrayList<Object>(structuredSelection.size());
+			Iterator<?> iter= structuredSelection.iterator();
 			while (iter.hasNext()) {
 				Object selectedElement= iter.next();
 				if (selectedElement instanceof IProject)
@@ -260,6 +263,7 @@ public class JarPackageWizard extends Wizard implements IExportWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performFinish() {
 		fJarPackage.setElements(fJarPackageWizardPage.getSelectedElementsWithoutContainedChildren());
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java
index 343de8a..b0a68d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -135,6 +135,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/*
 	 * Method declared on IDialogPage.
 	 */
+	@Override
 	public void createControl(final Composite parent) {
 
 		initializeDialogUnits(parent);
@@ -181,6 +182,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	 *
 	 *	@param parent org.eclipse.swt.widgets.Composite
 	 */
+	@Override
 	protected void createOptionsGroup(Composite parent) {
 		Composite optionsGroup= new Composite(parent, SWT.NONE);
 		GridLayout layout= new GridLayout();
@@ -207,7 +209,8 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	 *
 	 * @return an iterator over the collection of elements currently selected for export
 	 */
-	protected Iterator getSelectedResourcesIterator() {
+	@Override
+	protected Iterator<Object> getSelectedResourcesIterator() {
 		return fInputGroup.getAllCheckedListItems();
 	}
 
@@ -217,6 +220,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	 * settings for their controls should extend the hook method
 	 * <code>internalSaveWidgetValues</code>.
 	 */
+	@Override
 	public final void saveWidgetValues() {
 		super.saveWidgetValues();
 		// update directory names history
@@ -239,6 +243,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/**
 	 * Hook method for subclasses to persist their settings.
 	 */
+	@Override
 	protected void internalSaveWidgetValues() {
 	}
 
@@ -246,6 +251,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	 *	Hook method for restoring widget values to the values that they held
 	 *	last time this wizard was used to completion.
 	 */
+	@Override
 	protected void restoreWidgetValues() {
 		if (!((JarPackageWizard)getWizard()).isInitializingFromJarPackage())
 			initializeJarPackage();
@@ -267,6 +273,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/**
 	 *	Initializes the JAR package from last used wizard page values.
 	 */
+	@Override
 	protected void initializeJarPackage() {
 		super.initializeJarPackage();
 
@@ -289,6 +296,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/**
 	 *	Stores the widget values in the JAR package.
 	 */
+	@Override
 	protected void updateModel() {
 		if (getControl() == null)
 			return;
@@ -341,6 +349,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 						| JavaElementLabelProvider.SHOW_SMALL_ICONS;
 		ITreeContentProvider treeContentProvider=
 			new StandardJavaElementContentProvider() {
+				@Override
 				public boolean hasChildren(Object element) {
 					// prevent the + from being shown in front of packages
 					return !(element instanceof IPackageFragment) && super.hasChildren(element);
@@ -358,6 +367,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 					SIZING_SELECTION_WIDGET_WIDTH,
 					SIZING_SELECTION_WIDGET_HEIGHT) {
 
+						@Override
 						protected void setTreeChecked(final Object element, final boolean state) {
 							if (fInitiallySelecting && element instanceof IResource) {
 								final IResource resource= (IResource) element;
@@ -372,6 +382,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		fInputGroup.setListComparator(new JavaElementComparator());
 		fInputGroup.addTreeFilter(new ContainerFilter(ContainerFilter.FILTER_NON_CONTAINERS));
 		fInputGroup.addTreeFilter(new ViewerFilter() {
+			@Override
 			public boolean select(Viewer viewer, Object p, Object element) {
 				if (element instanceof IPackageFragmentRoot) {
 					IPackageFragmentRoot root= (IPackageFragmentRoot) element;
@@ -436,6 +447,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		fRefactoringLink.setText(JarPackagerMessages.JarPackageWizardPage_configure_label);
 		fRefactoringLink.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				openRefactoringDialog();
 			}
@@ -447,6 +459,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 
 		fExportRefactoringsCheckbox.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				fRefactoringLink.setEnabled(fExportRefactoringsCheckbox.getSelection());
 			}
@@ -461,7 +474,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		final IRefactoringHistoryService service= RefactoringCore.getHistoryService();
 		try {
 			service.connect();
-			final Set set= new HashSet();
+			final Set<IProject> set= new HashSet<IProject>();
 			final Object[] elements= fJarPackage.getElements();
 			for (int index= 0; index < elements.length; index++) {
 				if (elements[index] instanceof IAdaptable) {
@@ -475,7 +488,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 				getContainer().run(false, true, new IRunnableWithProgress() {
 
 					public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-						history[0]= service.getRefactoringHistory((IProject[]) set.toArray(new IProject[set.size()]), 0, Long.MAX_VALUE, JavaRefactoringDescriptor.JAR_MIGRATION, monitor);
+						history[0]= service.getRefactoringHistory(set.toArray(new IProject[set.size()]), 0, Long.MAX_VALUE, JavaRefactoringDescriptor.JAR_MIGRATION, monitor);
 					}
 				});
 			} catch (InvocationTargetException exception) {
@@ -494,6 +507,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/**
 	 * Updates the enablement of this page's controls. Subclasses may extend.
 	 */
+	@Override
 	protected void updateWidgetEnablements() {
 		if (fExportRefactoringsCheckbox != null) {
 			final boolean selection= fExportRefactoringsCheckbox.getSelection();
@@ -508,6 +522,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/*
 	 * Overrides method from IJarPackageWizardPage
 	 */
+	@Override
 	public boolean isPageComplete() {
 		boolean complete= validateSourceGroup();
 		complete= validateDestinationGroup() && complete;
@@ -517,6 +532,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		return complete;
 	}
 
+	@Override
 	protected void updatePageCompletion() {
 		boolean pageComplete= isPageComplete();
 		setPageComplete(pageComplete);
@@ -537,6 +553,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/*
 	 * Overrides method from WizardDataTransferPage
 	 */
+	@Override
 	protected boolean validateOptionsGroup() {
 		return true;
 	}
@@ -544,6 +561,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/*
 	 * Overrides method from WizardDataTransferPage
 	 */
+	@Override
 	protected boolean validateSourceGroup() {
 		if (!(fExportClassFilesCheckbox.getSelection() || fExportOutputFoldersCheckbox.getSelection() || fExportJavaFilesCheckbox.getSelection())) {
 			setErrorMessage(JarPackagerMessages.JarPackageWizardPage_error_noExportTypeChecked);
@@ -559,7 +577,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			return true;
 
 		// Source file only export - check if there are source files
-		Iterator iter= getSelectedResourcesIterator();
+		Iterator<Object> iter= getSelectedResourcesIterator();
 		while (iter.hasNext()) {
 			Object element= iter.next();
 			if (element instanceof IClassFile) {
@@ -603,8 +621,9 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/*
 	 * Overrides method from WizardExportResourcePage
 	 */
+	@Override
 	protected void setupBasedOnInitialSelections() {
-		Iterator iterator= fInitialSelection.iterator();
+		Iterator<?> iterator= fInitialSelection.iterator();
 		while (iterator.hasNext()) {
 			Object selectedElement= iterator.next();
 
@@ -645,6 +664,7 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/*
 	 * Method declared on IWizardPage.
 	 */
+	@Override
 	public void setPreviousPage(IWizardPage page) {
 		super.setPreviousPage(page);
 		if (getControl() != null)
@@ -652,15 +672,15 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	}
 
 	Object[] getSelectedElementsWithoutContainedChildren() {
-		Set closure= removeContainedChildren(fInputGroup.getWhiteCheckedTreeItems());
+		Set<Object> closure= removeContainedChildren(fInputGroup.getWhiteCheckedTreeItems());
 		closure.addAll(getExportedNonContainers());
 		return closure.toArray();
 	}
 
-	private Set removeContainedChildren(Set elements) {
-		Set newList= new HashSet(elements.size());
-		Set javaElementResources= getCorrespondingContainers(elements);
-		Iterator iter= elements.iterator();
+	private Set<Object> removeContainedChildren(Set<Object> elements) {
+		Set<Object> newList= new HashSet<Object>(elements.size());
+		Set<Object> javaElementResources= getCorrespondingContainers(elements);
+		Iterator<Object> iter= elements.iterator();
 		boolean removedOne= false;
 		while (iter.hasNext()) {
 			Object element= iter.next();
@@ -695,11 +715,11 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			return newList;
 	}
 
-	private Set getExportedNonContainers() {
-		Set whiteCheckedTreeItems= fInputGroup.getWhiteCheckedTreeItems();
-		Set exportedNonContainers= new HashSet(whiteCheckedTreeItems.size());
-		Set javaElementResources= getCorrespondingContainers(whiteCheckedTreeItems);
-		Iterator iter= fInputGroup.getAllCheckedListItems();
+	private Set<Object> getExportedNonContainers() {
+		Set<Object> whiteCheckedTreeItems= fInputGroup.getWhiteCheckedTreeItems();
+		Set<Object> exportedNonContainers= new HashSet<Object>(whiteCheckedTreeItems.size());
+		Set<Object> javaElementResources= getCorrespondingContainers(whiteCheckedTreeItems);
+		Iterator<Object> iter= fInputGroup.getAllCheckedListItems();
 		while (iter.hasNext()) {
 			Object element= iter.next();
 			Object parent= null;
@@ -717,9 +737,9 @@ class JarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	 * Create a list with the folders / projects that correspond
 	 * to the Java elements (Java project, package, package root)
 	 */
-	private Set getCorrespondingContainers(Set elements) {
-		Set javaElementResources= new HashSet(elements.size());
-		Iterator iter= elements.iterator();
+	private Set<Object> getCorrespondingContainers(Set<Object> elements) {
+		Set<Object> javaElementResources= new HashSet<Object>(elements.size());
+		Iterator<Object> iter= elements.iterator();
 		while (iter.hasNext()) {
 			Object element= iter.next();
 			if (element instanceof IJavaElement) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java
index 52da96b..a2d60fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -121,17 +121,17 @@ public final class JarPackagerUtil {
 	 * @param elements elements for which to retrieve the resources from
 	 * @return a List with the selected resources
 	 */
-	public static List asResources(Object[] elements) {
+	public static List<IResource> asResources(Object[] elements) {
 		if (elements == null)
 			return null;
-		List selectedResources= new ArrayList(elements.length);
+		List<IResource> selectedResources= new ArrayList<IResource>(elements.length);
 		for (int i= 0; i < elements.length; i++) {
 			Object element= elements[i];
 			if (element instanceof IJavaElement) {
 				selectedResources.add(((IJavaElement)element).getResource());
 			}
 			else if (element instanceof IResource)
-				selectedResources.add(element);
+				selectedResources.add((IResource) element);
 		}
 		return selectedResources;
 	}
@@ -220,18 +220,18 @@ public final class JarPackagerUtil {
 		return false;
 	}
 
-	static boolean contains(List resources, IFile file) {
+	static boolean contains(List<IResource> resources, IFile file) {
 		if (resources == null || file == null)
 			return false;
 
 		if (resources.contains(file))
 			return true;
 
-		Iterator iter= resources.iterator();
+		Iterator<IResource> iter= resources.iterator();
 		while (iter.hasNext()) {
-			IResource resource= (IResource)iter.next();
+			IResource resource= iter.next();
 			if (resource != null && resource.getType() != IResource.FILE) {
-				List children= null;
+				List<IResource> children= null;
 				try {
 					children= Arrays.asList(((IContainer)resource).members());
 				} catch (CoreException ex) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarRefactoringDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarRefactoringDialog.java
index 77ded43..526fd17 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarRefactoringDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarRefactoringDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,6 +95,7 @@ public final class JarRefactoringDialog extends TrayDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -102,18 +103,19 @@ public final class JarRefactoringDialog extends TrayDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void buttonPressed(final int buttonId) {
 		if (buttonId == IDialogConstants.OK_ID) {
 			fData.setRefactoringAware(true);
 			final RefactoringDescriptorProxy[] descriptors= fHistoryControl.getCheckedDescriptors();
-			Set set= new HashSet();
+			Set<IProject> set= new HashSet<IProject>();
 			IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 			for (int index= 0; index < descriptors.length; index++) {
 				final String project= descriptors[index].getProject();
 				if (project != null && !"".equals(project)) //$NON-NLS-1$
 					set.add(root.getProject(project));
 			}
-			fData.setRefactoringProjects((IProject[]) set.toArray(new IProject[set.size()]));
+			fData.setRefactoringProjects(set.toArray(new IProject[set.size()]));
 			fData.setRefactoringDescriptors(descriptors);
 			fData.setExportStructuralOnly(fExportStructural.getSelection());
 			final IDialogSettings settings= fSettings;
@@ -126,6 +128,7 @@ public final class JarRefactoringDialog extends TrayDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void configureShell(final Shell shell) {
 		super.configureShell(shell);
 		shell.setText(JarPackagerMessages.JarRefactoringDialog_dialog_title);
@@ -135,6 +138,7 @@ public final class JarRefactoringDialog extends TrayDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void create() {
 		super.create();
 		getButton(OK).setEnabled(!fHistory.isEmpty());
@@ -143,6 +147,7 @@ public final class JarRefactoringDialog extends TrayDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Control createDialogArea(final Composite parent) {
 		final Composite container= (Composite) super.createDialogArea(parent);
 		initializeDialogUnits(container);
@@ -154,6 +159,7 @@ public final class JarRefactoringDialog extends TrayDialog {
 		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));
 		final RefactoringHistoryControlConfiguration configuration= new RefactoringHistoryControlConfiguration(null, true, true) {
 
+			@Override
 			public final String getWorkspaceCaption() {
 				return JarPackagerMessages.JarRefactoringDialog_workspace_caption;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/PlainJarBuilder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/PlainJarBuilder.java
index 0636cc5..671e9f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/PlainJarBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/PlainJarBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public class PlainJarBuilder extends JarBuilder {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void open(JarPackageData jarPackage, Shell displayShell, MultiStatus statusMsg) throws CoreException {
 		super.open(jarPackage, displayShell, statusMsg);
 		fJarPackage= jarPackage;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/SealPackagesFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/SealPackagesFilter.java
index c8e5260..a269f5e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/SealPackagesFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/SealPackagesFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IPackageFragment;
 
 /**
  * Only selects packages (i.e. IPackageFragments) which are in
@@ -24,9 +25,9 @@ import org.eclipse.jdt.core.IJavaElement;
  */
 class SealPackagesFilter  extends ViewerFilter {
 
-	private List fAllowedPackages;
+	private List<IPackageFragment> fAllowedPackages;
 
-	public SealPackagesFilter(List packages) {
+	public SealPackagesFilter(List<IPackageFragment> packages) {
 		fAllowedPackages= packages;
 	}
 
@@ -34,6 +35,7 @@ class SealPackagesFilter  extends ViewerFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IJavaElement) {
 			int type= ((IJavaElement)element).getElementType();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarAntExporter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarAntExporter.java
index 49b3f37..c61a35f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarAntExporter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarAntExporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -114,7 +114,7 @@ public abstract class FatJarAntExporter {
 		IRuntimeClasspathEntry[] entries= JavaRuntime.computeUnresolvedRuntimeClasspath(configuration);
 		entries= JavaRuntime.resolveRuntimeClasspath(entries, configuration);
 
-		ArrayList userEntries= new ArrayList(entries.length);
+		ArrayList<IPath> userEntries= new ArrayList<IPath>(entries.length);
 		for (int i= 0; i < entries.length; i++) {
 			if (entries[i].getClasspathProperty() == IRuntimeClasspathEntry.USER_CLASSES) {
 
@@ -127,7 +127,7 @@ public abstract class FatJarAntExporter {
 				}
 			}
 		}
-		return (IPath[]) userEntries.toArray(new IPath[userEntries.size()]);
+		return userEntries.toArray(new IPath[userEntries.size()]);
 	}
 
 	private static String getMainClass(ILaunchConfiguration launchConfig, MultiStatus status) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarBuilder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarBuilder.java
index b75212b..7490dcb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public abstract class FatJarBuilder extends JarBuilder implements IJarBuilderExt
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void open(JarPackageData jarPackage, Shell displayShell, MultiStatus status) throws CoreException {
 		super.open(jarPackage, displayShell, status);
 		fJarPackage= jarPackage;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarManifestProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarManifestProvider.java
index 250eca4..181c85d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarManifestProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarManifestProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,18 +58,18 @@ public class FatJarManifestProvider implements IManifestProvider {
 		Manifest ownManifest= createOwn(jarPackage);
 		setManifestClasspath(ownManifest, fBuilder.getManifestClasspath());
 		if (fBuilder.isMergeManifests()) {
-			List openZips= new ArrayList();
+			List<ZipFile> openZips= new ArrayList<ZipFile>();
 			try {
-				List otherManifests= new ArrayList();
+				List<Manifest> otherManifests= new ArrayList<Manifest>();
 				Object[] elements= jarPackage.getElements();
 				for (int i= 0; i < elements.length; i++) {
 					Object element= elements[i];
 					if (element instanceof IPackageFragmentRoot && ((IPackageFragmentRoot) element).isArchive()) {
 						ZipFile zip= JarPackagerUtil.getArchiveFile(((IPackageFragmentRoot) element).getPath());
 						openZips.add(zip);
-						Enumeration entries= zip.entries();
+						Enumeration<? extends ZipEntry> entries= zip.entries();
 						while (entries.hasMoreElements()) {
-							ZipEntry entry= (ZipEntry) entries.nextElement();
+							ZipEntry entry= entries.nextElement();
 							if (entry.getName().equalsIgnoreCase("META-INF/MANIFEST.MF")) { //$NON-NLS-1$
 								InputStream inputStream= null;
 								try {
@@ -92,8 +92,8 @@ public class FatJarManifestProvider implements IManifestProvider {
 				}
 				result= merge(ownManifest, otherManifests);
 			} finally {
-				for (Iterator iter= openZips.iterator(); iter.hasNext(); ) {
-					ZipFile file= (ZipFile) iter.next();
+				for (Iterator<ZipFile> iter= openZips.iterator(); iter.hasNext(); ) {
+					ZipFile file= iter.next();
 					try {
 						file.close();
 					} catch (IOException e) {
@@ -114,14 +114,14 @@ public class FatJarManifestProvider implements IManifestProvider {
 		}
 	}
 
-	private Manifest merge(Manifest ownManifest, List otherManifests) {
+	private Manifest merge(Manifest ownManifest, List<Manifest> otherManifests) {
 		Manifest mergedManifest= new Manifest(ownManifest);
-		Map mergedEntries= mergedManifest.getEntries();
-		for (Iterator iter= otherManifests.iterator(); iter.hasNext();) {
-			Manifest otherManifest= (Manifest) iter.next();
-			Map otherEntries= otherManifest.getEntries();
-			for (Iterator iterator= otherEntries.keySet().iterator(); iterator.hasNext();) {
-				String attributeName= (String) iterator.next();
+		Map<String, Attributes> mergedEntries= mergedManifest.getEntries();
+		for (Iterator<Manifest> iter= otherManifests.iterator(); iter.hasNext();) {
+			Manifest otherManifest= iter.next();
+			Map<String, Attributes> otherEntries= otherManifest.getEntries();
+			for (Iterator<String> iterator= otherEntries.keySet().iterator(); iterator.hasNext();) {
+				String attributeName= iterator.next();
 				if (mergedEntries.containsKey(attributeName)) {
 					// TODO: WARNING
 				} else {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizard.java
index 0de9855..ef9fe1d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,6 +95,7 @@ public class FatJarPackageWizard extends Wizard implements IExportWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		fJarPackageWizardPage= new FatJarPackageWizardPage(fJarPackage, fSelection);
@@ -135,10 +136,12 @@ public class FatJarPackageWizard extends Wizard implements IExportWizard {
 		return true;
 	}
 
+	@Override
 	public IWizardPage getNextPage(IWizardPage page) {
 		return super.getNextPage(page);
 	}
 
+	@Override
 	public IWizardPage getPreviousPage(IWizardPage page) {
 		return super.getPreviousPage(page);
 	}
@@ -150,8 +153,8 @@ public class FatJarPackageWizard extends Wizard implements IExportWizard {
 		ISelection currentSelection= JavaPlugin.getActiveWorkbenchWindow().getSelectionService().getSelection();
 		if (currentSelection instanceof IStructuredSelection) {
 			IStructuredSelection structuredSelection= (IStructuredSelection) currentSelection;
-			HashSet selectedElements= new HashSet();
-			Iterator iter= structuredSelection.iterator();
+			HashSet<IJavaProject> selectedElements= new HashSet<IJavaProject>();
+			Iterator<?> iter= structuredSelection.iterator();
 			while (iter.hasNext()) {
 				Object selectedElement= iter.next();
 				if (selectedElement instanceof IJavaElement) {
@@ -203,6 +206,7 @@ public class FatJarPackageWizard extends Wizard implements IExportWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performFinish() {
 		LibraryHandler libraryHandler= fJarPackageWizardPage.getLibraryHandler();
 		fJarPackage.setJarBuilder(libraryHandler.getBuilder(fJarPackage));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizardPage.java
index 6b0115c..f0828bd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarPackageWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,18 +112,22 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		public ExtractLibraryHandler() {
 		}
 
+		@Override
 		public FatJarAntExporter getAntExporter(IPath antScriptLocation, IPath jarLocation, ILaunchConfiguration launchConfiguration) {
 			return new UnpackFatJarAntExporter(antScriptLocation, jarLocation, launchConfiguration);
 		}
 
+		@Override
 		public FatJarBuilder getBuilder(JarPackageData jarPackageData) {
 			return new UnpackFatJarBuilder();
 		}
 
+		@Override
 		public int getID() {
 			return ID;
 		}
 
+		@Override
 		public boolean isShowWarning() {
 			return true;
 		}
@@ -136,18 +140,22 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		public PackageLibraryHandler() {
 		}
 
+		@Override
 		public FatJarAntExporter getAntExporter(IPath antScriptLocation, IPath jarLocation, ILaunchConfiguration launchConfiguration) {
 			return new FatJarRsrcUrlAntExporter(antScriptLocation, jarLocation, launchConfiguration);
 		}
 
+		@Override
 		public FatJarBuilder getBuilder(JarPackageData jarPackageData) {
 			return new FatJarRsrcUrlBuilder();
 		}
 
+		@Override
 		public int getID() {
 			return ID;
 		}
 
+		@Override
 		public boolean isShowWarning() {
 			return false;
 		}
@@ -160,18 +168,22 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		public CopyLibraryHandler() {
 		}
 
+		@Override
 		public FatJarAntExporter getAntExporter(IPath antScriptLocation, IPath jarLocation, ILaunchConfiguration launchConfiguration) {
 			return new UnpackJarAntExporter(antScriptLocation, jarLocation, launchConfiguration);
 		}
 
+		@Override
 		public FatJarBuilder getBuilder(JarPackageData jarPackageData) {
 			return new UnpackJarBuilder(jarPackageData);
 		}
 
+		@Override
 		public int getID() {
 			return ID;
 		}
 
+		@Override
 		public boolean isShowWarning() {
 			return false;
 		}
@@ -205,6 +217,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public ILaunchConfiguration getLaunchConfiguration() {
 			return fLaunchConfiguration;
 		}
@@ -212,6 +225,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public String getLaunchConfigurationName() {
 			StringBuffer result= new StringBuffer();
 
@@ -222,6 +236,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			return result.toString();
 		}
 
+		@Override
 		public boolean hasProgramArguments() {
 			try {
 				return fLaunchConfiguration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, (String) null) != null;
@@ -231,6 +246,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			}
 		}
 
+		@Override
 		public boolean hasVMArguments() {
 			try {
 				return fLaunchConfiguration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, (String) null) != null;
@@ -258,7 +274,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/**
 	 * Model for the launch combo box. Element: {@link LaunchConfigurationElement}
 	 */
-	private final ArrayList fLauchConfigurationModel;
+	private final ArrayList<LaunchConfigurationElement> fLauchConfigurationModel;
 
 	private Combo fLaunchConfigurationCombo;
 
@@ -279,12 +295,13 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		setTitle(FatJarPackagerMessages.JarPackageWizardPage_title);
 		setDescription(FatJarPackagerMessages.FatJarPackageWizardPage_description);
 		fJarPackage= jarPackage;
-		fLauchConfigurationModel= new ArrayList();
+		fLauchConfigurationModel= new ArrayList<LaunchConfigurationElement>();
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		Composite composite= new Composite(parent, SWT.NONE);
 		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
@@ -322,6 +339,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		createDestinationGroup(composite);
 	}
 
+	@Override
 	protected String getDestinationLabel() {
 		return null;
 	}
@@ -334,7 +352,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		fLauchConfigurationModel.addAll(Arrays.asList(getLaunchConfigurations()));
 		String[] names= new String[fLauchConfigurationModel.size()];
 		for (int i= 0, size= fLauchConfigurationModel.size(); i < size; i++) {
-			LaunchConfigurationElement element= (LaunchConfigurationElement) fLauchConfigurationModel.get(i);
+			LaunchConfigurationElement element= fLauchConfigurationModel.get(i);
 			names[i]= element.getLaunchConfigurationName();
 		}
 		fLaunchConfigurationCombo.setItems(names);
@@ -375,6 +393,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		fAntScriptBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		SWTUtil.setButtonDimensionHint(fAntScriptBrowseButton);
 		fAntScriptBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleAntScriptBrowseButtonPressed();
 			}
@@ -500,6 +519,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/**
 	 * Stores the widget values in the JAR package.
 	 */
+	@Override
 	protected void updateModel() {
 		super.updateModel();
 
@@ -511,6 +531,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		fAntScriptLocation= path;
 	}
 
+	@Override
 	protected void updateWidgetEnablements() {
 		boolean antScriptSave= fAntScriptSaveCheckbox.getSelection();
 		fAntScriptLabel.setEnabled(antScriptSave);
@@ -518,6 +539,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		fAntScriptBrowseButton.setEnabled(antScriptSave);
 	}
 
+	@Override
 	public boolean isPageComplete() {
 		clearMessages();
 		boolean complete= validateDestinationGroup();
@@ -531,7 +553,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		if (index == -1)
 			return false;
 
-		LaunchConfigurationElement element= (LaunchConfigurationElement) fLauchConfigurationModel.get(index);
+		LaunchConfigurationElement element= fLauchConfigurationModel.get(index);
 		if (element.hasProgramArguments())
 			setWarningMessage(FatJarPackagerMessages.FatJarPackageWizardPage_warning_launchConfigContainsProgramArgs);
 
@@ -618,7 +640,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	}
 
 	private LaunchConfigurationElement[] getLaunchConfigurations() {
-		ArrayList result= new ArrayList();
+		ArrayList<ExistingLaunchConfigurationElement> result= new ArrayList<ExistingLaunchConfigurationElement>();
 
 		try {
 			ILaunchManager manager= DebugPlugin.getDefault().getLaunchManager();
@@ -636,12 +658,12 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			JavaPlugin.log(e);
 		}
 
-		return (LaunchConfigurationElement[]) result.toArray(new LaunchConfigurationElement[result.size()]);
+		return result.toArray(new LaunchConfigurationElement[result.size()]);
 	}
 
 	public Object[] getSelectedElementsWithoutContainedChildren(MultiStatus status) {
 		try {
-			LaunchConfigurationElement element= (LaunchConfigurationElement) fLauchConfigurationModel.get(fLaunchConfigurationCombo.getSelectionIndex());
+			LaunchConfigurationElement element= fLauchConfigurationModel.get(fLaunchConfigurationCombo.getSelectionIndex());
 			ILaunchConfiguration launchconfig= element.getLaunchConfiguration();
 			fJarPackage.setLaunchConfigurationName(element.getLaunchConfigurationName());
 
@@ -654,12 +676,12 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 
 	private static IJavaProject[] getProjectSearchOrder(String projectName) {
 
-		ArrayList projectNames= new ArrayList();
+		ArrayList<String> projectNames= new ArrayList<String>();
 		projectNames.add(projectName);
 
 		int nextProject= 0;
 		while (nextProject < projectNames.size()) {
-			String nextProjectName= (String) projectNames.get(nextProject);
+			String nextProjectName= projectNames.get(nextProject);
 			IJavaProject jproject= getJavaProject(nextProjectName);
 
 			if (jproject != null) {
@@ -677,15 +699,15 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			nextProject+= 1;
 		}
 
-		ArrayList result= new ArrayList();
+		ArrayList<IJavaProject> result= new ArrayList<IJavaProject>();
 		for (int i= 0, size= projectNames.size(); i < size; i++) {
-			String name= (String) projectNames.get(i);
+			String name= projectNames.get(i);
 			IJavaProject project= getJavaProject(name);
 			if (project != null)
 				result.add(project);
 		}
 
-		return (IJavaProject[]) result.toArray(new IJavaProject[result.size()]);
+		return result.toArray(new IJavaProject[result.size()]);
 	}
 
 	private static IJavaProject getJavaProject(String projectName) {
@@ -707,7 +729,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		IRuntimeClasspathEntry[] entries= JavaRuntime.computeUnresolvedRuntimeClasspath(configuration);
 		entries= JavaRuntime.resolveRuntimeClasspath(entries, configuration);
 
-		ArrayList userEntries= new ArrayList(entries.length);
+		ArrayList<IPath> userEntries= new ArrayList<IPath>(entries.length);
 		for (int i= 0; i < entries.length; i++) {
 			if (entries[i].getClasspathProperty() == IRuntimeClasspathEntry.USER_CLASSES) {
 
@@ -720,7 +742,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 				}
 			}
 		}
-		return (IPath[]) userEntries.toArray(new IPath[userEntries.size()]);
+		return userEntries.toArray(new IPath[userEntries.size()]);
 	}
 
 	private static String getMainClass(ILaunchConfiguration launchConfig, MultiStatus status) {
@@ -746,7 +768,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	 * @return all package fragment roots corresponding to each classpath entry start the search at project with projectName
 	 */
 	private static IPackageFragmentRoot[] getRequiredPackageFragmentRoots(IPath[] classpathEntries, final String projectName, MultiStatus status) {
-		HashSet result= new HashSet();
+		HashSet<IPackageFragmentRoot> result= new HashSet<IPackageFragmentRoot>();
 
 		IJavaProject[] searchOrder= getProjectSearchOrder(projectName);
 
@@ -762,7 +784,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			}
 		}
 
-		return (IPackageFragmentRoot[]) result.toArray(new IPackageFragmentRoot[result.size()]);
+		return result.toArray(new IPackageFragmentRoot[result.size()]);
 	}
 
 	private static IPackageFragmentRoot[] findRootsForClasspath(IPath entry, IJavaProject[] searchOrder) {
@@ -776,7 +798,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	}
 
 	private static IPackageFragmentRoot[] findRootsInProject(IPath entry, IJavaProject project) {
-		ArrayList result= new ArrayList();
+		ArrayList<IPackageFragmentRoot> result= new ArrayList<IPackageFragmentRoot>();
 
 		try {
 			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
@@ -789,7 +811,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			JavaPlugin.log(e);
 		}
 
-		return (IPackageFragmentRoot[]) result.toArray(new IPackageFragmentRoot[result.size()]);
+		return result.toArray(new IPackageFragmentRoot[result.size()]);
 	}
 
 	private static boolean isRootAt(IPackageFragmentRoot root, IPath entry) {
@@ -821,18 +843,18 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 
 	private static IType findMainMethodByName(String name, IPackageFragmentRoot[] classpathResources, IRunnableContext context) {
 
-		List resources= JarPackagerUtil.asResources(classpathResources);
+		List<IResource> resources= JarPackagerUtil.asResources(classpathResources);
 		if (resources == null) {
 			return null;
 		}
 
-		for (Iterator iterator= resources.iterator(); iterator.hasNext();) {
-			IResource element= (IResource) iterator.next();
+		for (Iterator<IResource> iterator= resources.iterator(); iterator.hasNext();) {
+			IResource element= iterator.next();
 			if (element == null)
 				iterator.remove();
 		}
 
-		IJavaSearchScope searchScope= JavaSearchScopeFactory.getInstance().createJavaSearchScope((IResource[]) resources.toArray(new IResource[resources.size()]), true);
+		IJavaSearchScope searchScope= JavaSearchScopeFactory.getInstance().createJavaSearchScope(resources.toArray(new IResource[resources.size()]), true);
 		MainMethodSearchEngine engine= new MainMethodSearchEngine();
 		try {
 			IType[] mainTypes= engine.searchMainMethods(context, searchScope, 0);
@@ -849,16 +871,18 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 		return null;
 	}
 
+	@Override
 	public void dispose() {
 		super.dispose();
 		if (fLauchConfigurationModel != null) {
 			for (int i= 0, size= fLauchConfigurationModel.size(); i < size; i++) {
-				LaunchConfigurationElement element= (LaunchConfigurationElement) fLauchConfigurationModel.get(i);
+				LaunchConfigurationElement element= fLauchConfigurationModel.get(i);
 				element.dispose();
 			}
 		}
 	}
 
+	@Override
 	protected void restoreWidgetValues() {
 
 		// restore JARPACKAGEDATA from SETTINGS and set widgets
@@ -920,6 +944,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void saveWidgetValues() {
 		super.saveWidgetValues();
 
@@ -993,7 +1018,7 @@ public class FatJarPackageWizardPage extends AbstractJarDestinationWizardPage {
 			return;
 
 		if (canCreateAntScript(getShell())) {
-			LaunchConfigurationElement element= (LaunchConfigurationElement) fLauchConfigurationModel.get(fLaunchConfigurationCombo.getSelectionIndex());
+			LaunchConfigurationElement element= fLauchConfigurationModel.get(fLaunchConfigurationCombo.getSelectionIndex());
 			Assert.isNotNull(element);
 			FatJarAntExporter antExporter= getLibraryHandler().getAntExporter(fAntScriptLocation, fJarPackage.getAbsoluteJarLocation(), element.getLaunchConfiguration());
 			try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java
index 1cf8247..5779cc8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ public class FatJarRsrcUrlAntExporter extends FatJarAntExporter {
 		super(antScriptLocation, jarLocation, launchConfiguration);
 	}
 
+	@Override
 	protected void buildANTScript(IPath antScriptLocation, String projectName, IPath absJarfile, String mainClass, SourceInfo[] sourceInfos) throws FileNotFoundException, IOException {
 		File antScriptFile= antScriptLocation.toFile();
 		buildANTScript(new FileOutputStream(antScriptFile), projectName, absJarfile, mainClass, sourceInfos);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java
index 75bddf5..b024da7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,7 @@ public class FatJarRsrcUrlBuilder extends FatJarBuilder {
 	public static final String BUILDER_ID= "org.eclipse.jdt.ui.fat_jar_rsrc_url_builder"; //$NON-NLS-1$
 	public static final String JAR_RSRC_LOADER_ZIP= "jar-in-jar-loader.zip"; //$NON-NLS-1$
 	
-	private Set jarNames;
+	private Set<String> jarNames;
 	private JarPackageData fJarPackage;
 
 	/**
@@ -66,6 +66,7 @@ public class FatJarRsrcUrlBuilder extends FatJarBuilder {
 	 * we do not need to merge any manifests here.
 	 * @return false
 	 */
+	@Override
 	public boolean isMergeManifests() {
 		return false;
 	}
@@ -74,6 +75,7 @@ public class FatJarRsrcUrlBuilder extends FatJarBuilder {
 	 * we do not need to remove signers here.
 	 * @return false
 	 */
+	@Override
 	public boolean isRemoveSigners() {
 		return false;
 	}
@@ -81,6 +83,7 @@ public class FatJarRsrcUrlBuilder extends FatJarBuilder {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getManifestClasspath() {
 		return "."; //$NON-NLS-1$
 	}
@@ -95,10 +98,11 @@ public class FatJarRsrcUrlBuilder extends FatJarBuilder {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void open(JarPackageData jarPackage, Shell displayShell, MultiStatus status) throws CoreException {
 		super.open(jarPackage, displayShell, status);
 		fJarPackage= jarPackage;
-		jarNames= new HashSet();
+		jarNames= new HashSet<String>();
 		try {
 			writeRsrcUrlClasses();
 		} catch (IOException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlManifestProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlManifestProvider.java
index b44ca04..d975ff0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlManifestProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlManifestProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ public class FatJarRsrcUrlManifestProvider extends FatJarManifestProvider {
 	}
 
 	private void setManifestRsrcClasspath(Manifest ownManifest, JarPackageData jarPackage) {
-		Set jarNames= new HashSet();
+		Set<String> jarNames= new HashSet<String>();
 		Object[] elements= jarPackage.getElements();
 		for (int i= 0; i < elements.length; i++) {
 			Object element= elements[i];
@@ -54,11 +54,11 @@ public class FatJarRsrcUrlManifestProvider extends FatJarManifestProvider {
 		ownManifest.getMainAttributes().putValue(JIJConstants.REDIRECTED_CLASS_PATH_MANIFEST_NAME, manifestRsrcClasspath); 
 	}
 
-	public String getManifestRsrcClasspath(Set jarNames) {
+	public String getManifestRsrcClasspath(Set<String> jarNames) {
 		StringBuffer result= new StringBuffer();
 		result.append(JIJConstants.CURRENT_DIR); 
-		for (Iterator iterator= jarNames.iterator(); iterator.hasNext();) {
-			String jarName= (String) iterator.next();
+		for (Iterator<String> iterator= jarNames.iterator(); iterator.hasNext();) {
+			String jarName= iterator.next();
 			try {
 				jarName= URLEncoder.encode(jarName, "UTF-8"); //$NON-NLS-1$
 			} catch (UnsupportedEncodingException e) {
@@ -75,6 +75,7 @@ public class FatJarRsrcUrlManifestProvider extends FatJarManifestProvider {
 	 * @param	manifest	the manifest to which the entries should be added
 	 * @param	jarPackage	the JAR package specification
 	 */
+	@Override
 	protected void putAdditionalEntries(Manifest manifest, JarPackageData jarPackage) {
 		setManifestRsrcClasspath(manifest, jarPackage);
 		putMainClass(manifest, jarPackage);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java
index f604fdd..15a9856 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class UnpackFatJarAntExporter extends FatJarAntExporter {
 		super(antScriptLocation, jarLocation, launchConfiguration);
 	}
 
+	@Override
 	protected void buildANTScript(IPath antScriptLocation, String projectName, IPath absJarfile, String mainClass, SourceInfo[] sourceInfos) throws IOException {
 		OutputStream outputStream= new FileOutputStream(antScriptLocation.toFile());
 		String absJarname= absJarfile.toString();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarBuilder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarBuilder.java
index dd4b36c..9b5146c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,14 +50,17 @@ public class UnpackFatJarBuilder extends FatJarBuilder {
 		return new FatJarManifestProvider(this);
 	}
 
+	@Override
 	public String getManifestClasspath() {
 		return "."; //$NON-NLS-1$
 	}
 
+	@Override
 	public boolean isMergeManifests() {
 		return true;
 	}
 
+	@Override
 	public boolean isRemoveSigners() {
 		return true;
 	}
@@ -66,9 +69,9 @@ public class UnpackFatJarBuilder extends FatJarBuilder {
 	 * {@inheritDoc}
 	 */
 	public void writeArchive(ZipFile jarFile, IProgressMonitor progressMonitor) {
-		Enumeration jarEntriesEnum= jarFile.entries();
+		Enumeration<? extends ZipEntry> jarEntriesEnum= jarFile.entries();
 		while (jarEntriesEnum.hasMoreElements()) {
-			ZipEntry jarEntry= (ZipEntry) jarEntriesEnum.nextElement();
+			ZipEntry jarEntry= jarEntriesEnum.nextElement();
 			if (!jarEntry.isDirectory()) {
 				String entryName= jarEntry.getName();
 				addFile(entryName, jarEntry, jarFile);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java
index 0008322..514db59 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public class UnpackJarAntExporter extends FatJarAntExporter {
 		super(antScriptLocation, jarLocation, launchConfiguration);
 	}
 
+	@Override
 	protected void buildANTScript(IPath antScriptLocation, String projectName, IPath absJarfile, String mainClass, SourceInfo[] sourceInfos) throws IOException {
 		OutputStream outputStream = new FileOutputStream(antScriptLocation.toFile());
 		String absJarname= absJarfile.toString();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarBuilder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarBuilder.java
index 6db5ba1..58f46ab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarBuilder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,7 +53,7 @@ public class UnpackJarBuilder extends FatJarBuilder {
 
 	private JarPackageData fJarPackage;
 	
-	private Set jarNames;
+	private Set<String> jarNames;
 
 	public UnpackJarBuilder(JarPackageData jarPackage) {
 		fSubfolder= jarPackage.getAbsoluteJarLocation().removeFileExtension().lastSegment() + SUBFOLDER_SUFFIX;
@@ -72,6 +72,7 @@ public class UnpackJarBuilder extends FatJarBuilder {
 	 * we do not need to merge any manifests here.
 	 * @return false
 	 */
+	@Override
 	public boolean isMergeManifests() {
 		return false;
 	}
@@ -80,6 +81,7 @@ public class UnpackJarBuilder extends FatJarBuilder {
 	 * we do not need to remove signers here.
 	 * @return false
 	 */
+	@Override
 	public boolean isRemoveSigners() {
 		return false;
 	}
@@ -94,8 +96,9 @@ public class UnpackJarBuilder extends FatJarBuilder {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getManifestClasspath() {
-		Set renamedJarNames= new HashSet();
+		Set<String> renamedJarNames= new HashSet<String>();
 		Object[] elements= fJarPackage.getElements();
 		for (int i= 0; i < elements.length; i++) {
 			Object element= elements[i];
@@ -109,8 +112,8 @@ public class UnpackJarBuilder extends FatJarBuilder {
 		}
 		StringBuffer result= new StringBuffer();
 		result.append("."); //$NON-NLS-1$
-		for (Iterator iterator= renamedJarNames.iterator(); iterator.hasNext();) {
-			String jarName= (String)iterator.next();
+		for (Iterator<String> iterator= renamedJarNames.iterator(); iterator.hasNext();) {
+			String jarName= iterator.next();
 			result.append(" ").append(fSubfolder).append("/").append(jarName); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		return result.toString();
@@ -119,10 +122,11 @@ public class UnpackJarBuilder extends FatJarBuilder {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void open(JarPackageData jarPackage, Shell displayShell, MultiStatus status) throws CoreException {
 		super.open(jarPackage, displayShell, status);
 		fJarPackage= jarPackage;
-		jarNames= new HashSet();
+		jarNames= new HashSet<String>();
 		createBlankSubfolder(displayShell, jarPackage.allowOverwrite());
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/ContributedJavadocWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/ContributedJavadocWizardPage.java
index 116833d..2c3d8dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/ContributedJavadocWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/ContributedJavadocWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,8 +29,8 @@ import org.eclipse.jdt.core.IJavaElement;
 
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.wizards.JavadocExportWizardPage;
-import org.eclipse.jdt.ui.wizards.NewElementWizardPage;
 import org.eclipse.jdt.ui.wizards.JavadocExportWizardPage.IJavadocExportWizardPageContainer;
+import org.eclipse.jdt.ui.wizards.NewElementWizardPage;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.util.CoreUtility;
@@ -39,6 +39,7 @@ public class ContributedJavadocWizardPage extends NewElementWizardPage implement
 
 	private static class ErrorJavadocExportWizardPage extends JavadocExportWizardPage {
 
+		@Override
 		public Control createContents(Composite parent) {
 			Label label= new Label(parent, SWT.NONE);
 			label.setText(JavadocExportMessages.ContributedJavadocWizardPage_error_create_page);
@@ -78,6 +79,7 @@ public class ContributedJavadocWizardPage extends NewElementWizardPage implement
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.NewElementWizardPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		getPage().setVisible(visible);
 		super.setVisible(visible);
@@ -100,6 +102,7 @@ public class ContributedJavadocWizardPage extends NewElementWizardPage implement
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#performHelp()
 	 */
+	@Override
 	public void performHelp() {
 		getPage().performHelp();
 	}
@@ -107,6 +110,7 @@ public class ContributedJavadocWizardPage extends NewElementWizardPage implement
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fPage != null) {
 			fPage.dispose();
@@ -116,28 +120,28 @@ public class ContributedJavadocWizardPage extends NewElementWizardPage implement
 	}
 
 	public String[] getConfiguredJavadocOptions() {
-		ArrayList vmArgs= new ArrayList();
-		ArrayList toolArgs= new ArrayList();
+		ArrayList<String> vmArgs= new ArrayList<String>();
+		ArrayList<String> toolArgs= new ArrayList<String>();
 		fStore.getArgumentArray(vmArgs, toolArgs);
-		return (String[]) toolArgs.toArray(new String[toolArgs.size()]);
+		return toolArgs.toArray(new String[toolArgs.size()]);
 	}
 
 	public String[] getConfiguredVMOptions() {
-		ArrayList vmArgs= new ArrayList();
-		ArrayList toolArgs= new ArrayList();
+		ArrayList<String> vmArgs= new ArrayList<String>();
+		ArrayList<String> toolArgs= new ArrayList<String>();
 		fStore.getArgumentArray(vmArgs, toolArgs);
-		return (String[]) vmArgs.toArray(new String[vmArgs.size()]);
+		return vmArgs.toArray(new String[vmArgs.size()]);
 	}
 
 	public IJavaElement[] getSelectedJavaElements() {
 		IJavaElement[] sourceElements= fStore.getSourceElements();
 		if (sourceElements != null) {
-			return (IJavaElement[]) sourceElements.clone();
+			return sourceElements.clone();
 		}
 		return new IJavaElement[0];
 	}
 
-	public void updateArguments(ArrayList vmOptions, ArrayList toolOptions) {
+	public void updateArguments(ArrayList<String> vmOptions, ArrayList<String> toolOptions) {
 		getPage().updateArguments(vmOptions, toolOptions);
 	}
 
@@ -164,7 +168,7 @@ public class ContributedJavadocWizardPage extends NewElementWizardPage implement
 	}
 
 	public static ContributedJavadocWizardPage[] getContributedPages(JavadocOptionsManager store) {
-		ArrayList pages= new ArrayList();
+		ArrayList<ContributedJavadocWizardPage> pages= new ArrayList<ContributedJavadocWizardPage>();
 
 		IConfigurationElement[] elements= Platform.getExtensionRegistry().getConfigurationElementsFor(JavaUI.ID_PLUGIN, ATT_EXTENSION);
 		for (int i = 0; i < elements.length; i++) {
@@ -179,7 +183,7 @@ public class ContributedJavadocWizardPage extends NewElementWizardPage implement
 			}
 			pages.add(new ContributedJavadocWizardPage(elements[i], store));
 		}
-		return (ContributedJavadocWizardPage[]) pages.toArray(new ContributedJavadocWizardPage[pages.size()]);
+		return pages.toArray(new ContributedJavadocWizardPage[pages.size()]);
 	}
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java
index 28852f8..e9ba010 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.javadocexport;
 
+import org.eclipse.core.filesystem.URIUtil;
+
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 
@@ -37,6 +39,7 @@ import org.eclipse.jdt.ui.JavaUI;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
+
 public class JavadocConsoleLineTracker implements IConsoleLineTracker {
 
 	private static class JavadocConsoleHyperLink implements IHyperlink {
@@ -66,7 +69,7 @@ public class JavadocConsoleLineTracker implements IConsoleLineTracker {
 		 */
 		public void linkActivated() {
 			try {
-				IFile[] files= ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(fExternalPath);
+				IFile[] files= ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(URIUtil.toURI(fExternalPath.makeAbsolute()));
 				if (files.length > 0) {
 					for (int i = 0; i < files.length; i++) {
 						IFile curr= files[0];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkDialogLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkDialogLabelProvider.java
index b27a886..d422d4b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkDialogLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkDialogLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
 
 public class JavadocLinkDialogLabelProvider extends LabelProvider {
 
+	@Override
 	public String getText(Object element) {
 		if (element instanceof JavadocLinkRef) {
 			JavadocLinkRef ref= (JavadocLinkRef) element;
@@ -48,6 +49,7 @@ public class JavadocLinkDialogLabelProvider extends LabelProvider {
 		return super.getText(element);
 	}
 
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof JavadocLinkRef) {
 			JavadocLinkRef ref= (JavadocLinkRef) element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkRef.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkRef.java
index 5e00e42..a5d52f2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkRef.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocLinkRef.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,6 +70,7 @@ public class JavadocLinkRef {
 		}
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (obj != null && obj.getClass().equals(getClass())) {
 			JavadocLinkRef other= (JavadocLinkRef) obj;
@@ -77,12 +78,15 @@ public class JavadocLinkRef {
 				return false;
 			}
 			if (!isProjectRef()) {
-				return !fClasspathEntry.equals(other.fClasspathEntry);
+				return fClasspathEntry.equals(other.fClasspathEntry);
+			} else {
+				return true;
 			}
 		}
 		return false;
 	}
 
+	@Override
 	public int hashCode() {
 		if (isProjectRef()) {
 			return fProject.hashCode();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocOptionsManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocOptionsManager.java
index 1a81265..4abc38a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocOptionsManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocOptionsManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *     Sebastian Davids, sdavids at gmx.de, - bug 38692
  *     Matt Chapman, mpchapman at gmail.com - 89977 Make JDT .java agnostic
  *******************************************************************************/
-
 package org.eclipse.jdt.internal.ui.javadocexport;
 
 import java.io.File;
@@ -29,6 +28,8 @@ import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+import org.eclipse.core.filesystem.URIUtil;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
@@ -70,6 +71,7 @@ import org.eclipse.jdt.internal.ui.JavaUIStatus;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
+
 public class JavadocOptionsManager {
 
 	private IFile fXmlfile;
@@ -159,7 +161,7 @@ public class JavadocOptionsManager {
 
 	private static final String JAVADOC_COMMAND_HISTORY= "javadoc_command_history"; //$NON-NLS-1$
 
-	public JavadocOptionsManager(IFile xmlJavadocFile, IDialogSettings dialogSettings, List currSelection) {
+	public JavadocOptionsManager(IFile xmlJavadocFile, IDialogSettings dialogSettings, List<?> currSelection) {
 		fXmlfile= xmlJavadocFile;
 		fWizardStatus= new StatusInfo();
 
@@ -224,7 +226,7 @@ public class JavadocOptionsManager {
 	}
 
 
-	private void loadFromDialogStore(IDialogSettings settings, List sel) {
+	private void loadFromDialogStore(IDialogSettings settings, List<?> sel) {
 		fInitialElements= getInitialElementsFromSelection(sel);
 
 		IJavaProject project= getSingleProjectFromInitialSelection();
@@ -310,7 +312,7 @@ public class JavadocOptionsManager {
 
 
 	//loads defaults for wizard (nothing is stored)
-	private void loadDefaults(List sel) {
+	private void loadDefaults(List<?> sel) {
 		fInitialElements= getInitialElementsFromSelection(sel);
 
 		IJavaProject project= getSingleProjectFromInitialSelection();
@@ -479,24 +481,24 @@ public class JavadocOptionsManager {
 		}
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 
-		ArrayList res= new ArrayList();
+		ArrayList<IContainer> res= new ArrayList<IContainer>();
 
 		String[] strings= sourcePaths.split(File.pathSeparator);
 		for (int i= 0; i < strings.length; i++) {
 			IPath path= makeAbsolutePathFromRelative(new Path(strings[i].trim()));
 			if (path != null) {
-				IContainer[] containers= root.findContainersForLocation(path);
+				IContainer[] containers= root.findContainersForLocationURI(URIUtil.toURI(path.makeAbsolute()));
 				for (int k= 0; k < containers.length; k++) {
 					res.add(containers[k]);
 				}
 			}
 
 		}
-		return (IContainer[]) res.toArray(new IContainer[res.size()]);
+		return res.toArray(new IContainer[res.size()]);
 	}
 
 	private IJavaElement[] getSelectedElementsFromAnt(Element element) {
-		List res= new ArrayList();
+		List<IJavaElement> res= new ArrayList<IJavaElement>();
 
 		// get all the packages listed in the ANT file
 		String packagenames= element.getAttribute(PACKAGENAMES);
@@ -531,7 +533,7 @@ public class JavadocOptionsManager {
 					IPath path= makeAbsolutePathFromRelative(new Path(name));
 					//if unable to create an absolute path to the resource skip it
 					if (path != null) {
-						IFile[] files= root.findFilesForLocation(path);
+						IFile[] files= root.findFilesForLocationURI(URIUtil.toURI(path.makeAbsolute()));
 						for (int i= 0; i < files.length; i++) {
 							IJavaElement el= JavaCore.createCompilationUnitFrom(files[i]);
 							if (el != null) {
@@ -542,7 +544,7 @@ public class JavadocOptionsManager {
 				}
 			}
 		}
-		return (IJavaElement[]) res.toArray(new IJavaElement[res.size()]);
+		return res.toArray(new IJavaElement[res.size()]);
 	}
 
 	/**
@@ -694,7 +696,7 @@ public class JavadocOptionsManager {
 	}
 
 
-	public IStatus getArgumentArray(List vmArgs, List toolArgs) {
+	public IStatus getArgumentArray(List<String> vmArgs, List<String> toolArgs) {
 		MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, IStatus.OK, JavadocExportMessages.JavadocOptionsManager_status_title, null);
 
 		//bug 38692
@@ -764,6 +766,8 @@ public class JavadocOptionsManager {
 
 		} //end standard options
 
+		String locale= null;
+
 		if (fAdditionalParams.length() + fVMParams.length() != 0) {
 			ExecutionArguments tokens= new ExecutionArguments(fVMParams, fAdditionalParams);
 			String[] vmArgsArray= tokens.getVMArgumentsArray();
@@ -772,7 +776,11 @@ public class JavadocOptionsManager {
 			}
 			String[] argsArray= tokens.getProgramArgumentsArray();
 			for (int i= 0; i < argsArray.length; i++) {
-				toolArgs.add(argsArray[i]);
+				String arg= argsArray[i];
+				if ("-locale".equals(arg) && i + 1 < argsArray.length) { //$NON-NLS-1$
+					locale= argsArray[++i];
+				} else
+					toolArgs.add(arg);
 			}
 		}
 		addProxyOptions(vmArgs);
@@ -798,15 +806,21 @@ public class JavadocOptionsManager {
 				}
 			}
 		}
+		// The locale argument needs to be first.
+		if (locale != null) {
+			toolArgs.add(0, "-locale"); //$NON-NLS-1$
+			toolArgs.add(1, locale);
+		}
+
 		return status;
 	}
 
-	private void addProxyOptions(List vmOptions) {
+	private void addProxyOptions(List<String> vmOptions) {
 		// bug 74132
 		String hostPrefix= "-J-Dhttp.proxyHost="; //$NON-NLS-1$
 		String portPrefix= "-J-Dhttp.proxyPort="; //$NON-NLS-1$
 		for (int i= 0; i < vmOptions.size(); i++) {
-			String curr= (String) vmOptions.get(i);
+			String curr= vmOptions.get(i);
 			if (curr.startsWith(hostPrefix) || curr.startsWith(portPrefix)) {
 				return;
 			}
@@ -830,7 +844,7 @@ public class JavadocOptionsManager {
 
 				IPath basePath= null;
 				IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
-				if (root.findFilesForLocation(filePath).length > 0) {
+				if (root.findFilesForLocationURI(URIUtil.toURI(filePath.makeAbsolute())).length > 0) {
 					basePath= directoryPath; // only do relative path if ant file is stored in the workspace
 				}
 				JavadocWriter writer= new JavadocWriter(basePath, projects);
@@ -1023,8 +1037,8 @@ public class JavadocOptionsManager {
 		return fSource;
 	}
 
-	private IJavaElement[] getInitialElementsFromSelection(List candidates) {
-		ArrayList res= new ArrayList();
+	private IJavaElement[] getInitialElementsFromSelection(List<?> candidates) {
+		ArrayList<IJavaElement> res= new ArrayList<IJavaElement>();
 		for (int i= 0; i < candidates.size(); i++) {
 			try {
 				IJavaElement elem= getSelectableJavaElement(candidates.get(i));
@@ -1035,7 +1049,7 @@ public class JavadocOptionsManager {
 				// ignore this
 			}
 		}
-		return (IJavaElement[]) res.toArray(new IJavaElement[res.size()]);
+		return res.toArray(new IJavaElement[res.size()]);
 	}
 
 	private IJavaElement getSelectableJavaElement(Object obj) throws JavaModelException {
@@ -1107,7 +1121,7 @@ public class JavadocOptionsManager {
 	}
 
 	/**
-	 * @param project
+	 * @param project the Java project
 	 */
 	public void updateRecentSettings(IJavaProject project) {
 		fRecentSettings.setProjectSettings(project, fDestination, fAntpath, fHRefs);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocProjectContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocProjectContentProvider.java
index 59cc97e..c7bfcbe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocProjectContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocProjectContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -93,7 +93,7 @@ public class JavadocProjectContentProvider implements ITreeContentProvider {
 	}
 
 	private Object[] getPackageFragmentRoots(IJavaProject project) throws JavaModelException {
-		ArrayList result= new ArrayList();
+		ArrayList<Object> result= new ArrayList<Object>();
 
 		IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 		for (int i= 0; i < roots.length; i++) {
@@ -113,7 +113,7 @@ public class JavadocProjectContentProvider implements ITreeContentProvider {
 	}
 
 	private Object[] getPackageFragments(IPackageFragmentRoot root) throws JavaModelException {
-		ArrayList packageFragments= new ArrayList();
+		ArrayList<IJavaElement> packageFragments= new ArrayList<IJavaElement>();
 
 		IJavaElement[] children= root.getChildren();
 		for (int i= 0; i < children.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocSpecificsWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocSpecificsWizardPage.java
index 1185992..e234562 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocSpecificsWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocSpecificsWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,6 +151,7 @@ public class JavadocSpecificsWizardPage extends JavadocWizardPage {
 
 		//Listeners
 		fOverViewButton.addSelectionListener(new ToggleSelectionAdapter(new Control[] { fOverViewBrowseButton, fOverViewText }) {
+			@Override
 			public void validate() {
 				doValidation(OVERVIEWSTATUS);
 			}
@@ -163,6 +164,7 @@ public class JavadocSpecificsWizardPage extends JavadocWizardPage {
 		});
 
 		fOverViewBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				handleFileBrowseButtonPressed(fOverViewText, new String[] { "*.html" }, JavadocExportMessages.JavadocSpecificsWizardPage_overviewbrowsedialog_title);  //$NON-NLS-1$
 			}
@@ -193,6 +195,7 @@ public class JavadocSpecificsWizardPage extends JavadocWizardPage {
 		fCheckbrowser.setSelection(fStore.doOpenInBrowser());
 
 		fAntButton.addSelectionListener(new ToggleSelectionAdapter(new Control[] { fAntText, fAntBrowseButton }) {
+			@Override
 			public void validate() {
 				doValidation(ANTSTATUS);
 			}
@@ -205,6 +208,7 @@ public class JavadocSpecificsWizardPage extends JavadocWizardPage {
 		});
 
 		fAntBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				String temp= fAntText.getText();
 				IPath path= Path.fromOSString(temp);
@@ -287,6 +291,7 @@ public class JavadocSpecificsWizardPage extends JavadocWizardPage {
 
 	}
 
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocStandardWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocStandardWizardPage.java
index e4ec112..d268b8f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocStandardWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocStandardWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,12 +94,12 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 	private Button fStyleSheetBrowseButton;
 	private Button fStyleSheetButton;
 
-	private CheckedListDialogField fListDialogField;
+	private CheckedListDialogField<JavadocLinkRef> fListDialogField;
 
 	private StatusInfo fStyleSheetStatus;
 	private StatusInfo fLinkRefStatus;
 
-	private ArrayList fButtonsList;
+	private ArrayList<FlaggedButton> fButtonsList;
 	private JavadocTreeWizardPage fFirstPage;
 
 
@@ -109,7 +109,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 		setDescription(JavadocExportMessages.JavadocStandardWizardPage_description);
 
 		fStore= store;
-		fButtonsList= new ArrayList();
+		fButtonsList= new ArrayList<FlaggedButton>();
 		fStyleSheetStatus= new StatusInfo();
 		fLinkRefStatus= new StatusInfo();
 	}
@@ -210,6 +210,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 
 		//Listeners
 		fStyleSheetButton.addSelectionListener(new ToggleSelectionAdapter(new Control[] { fStyleSheetText, fStyleSheetBrowseButton }) {
+			@Override
 			public void validate() {
 				doValidation(STYLESHEETSTATUS);
 			}
@@ -222,6 +223,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 		});
 
 		fStyleSheetBrowseButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				handleFileBrowseButtonPressed(fStyleSheetText, new String[] { "*.css" }, JavadocExportMessages.JavadocSpecificsWizardPage_stylesheetbrowsedialog_title);  //$NON-NLS-1$
 			}
@@ -242,7 +244,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 
 		ListAdapter adapter= new ListAdapter();
 
-		fListDialogField= new CheckedListDialogField(adapter, buttonlabels, labelProvider);
+		fListDialogField= new CheckedListDialogField<JavadocLinkRef>(adapter, buttonlabels, labelProvider);
 		fListDialogField.setDialogFieldListener(adapter);
 		fListDialogField.setCheckAllButtonIndex(0);
 		fListDialogField.setUncheckAllButtonIndex(1);
@@ -256,12 +258,12 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 		fListDialogField.enableButton(2, false);
 	}
 
-	private List getCheckedReferences(JavadocLinkRef[] referencesClasses) {
-		List checkedElements= new ArrayList();
+	private List<JavadocLinkRef> getCheckedReferences(JavadocLinkRef[] referencesClasses) {
+		List<JavadocLinkRef> checkedElements= new ArrayList<JavadocLinkRef>();
 
 		String hrefs[]= fStore.getHRefs();
 		if (hrefs.length > 0) {
-			HashSet set= new HashSet();
+			HashSet<String> set= new HashSet<String>();
 			for (int i= 0; i < hrefs.length; i++) {
 				set.add(hrefs[i]);
 			}
@@ -284,7 +286,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 	 * @return all IJavaProjects and IPaths that will be on the classpath
 	 */
 	private JavadocLinkRef[] getReferencedElements(IJavaProject[] checkedProjects) {
-		HashSet result= new HashSet();
+		HashSet<JavadocLinkRef> result= new HashSet<JavadocLinkRef>();
 		for (int i= 0; i < checkedProjects.length; i++) {
 			IJavaProject project= checkedProjects[i];
 			try {
@@ -294,10 +296,10 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 				// ignore
 			}
 		}
-		return (JavadocLinkRef[]) result.toArray(new JavadocLinkRef[result.size()]);
+		return result.toArray(new JavadocLinkRef[result.size()]);
 	}
 
-	private void collectReferencedElements(IJavaProject project, HashSet result) throws CoreException {
+	private void collectReferencedElements(IJavaProject project, HashSet<JavadocLinkRef> result) throws CoreException {
 		IRuntimeClasspathEntry[] unresolved = JavaRuntime.computeUnresolvedRuntimeClasspath(project);
 		for (int i= 0; i < unresolved.length; i++) {
 			IRuntimeClasspathEntry curr= unresolved[i];
@@ -345,9 +347,9 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 				break;
 			case LINK_REFERENCES:
 				fLinkRefStatus= new StatusInfo();
-				List list= fListDialogField.getCheckedElements();
+				List<JavadocLinkRef> list= fListDialogField.getCheckedElements();
 				for (int i= 0; i < list.size(); i++) {
-					JavadocLinkRef curr= (JavadocLinkRef) list.get(i);
+					JavadocLinkRef curr= list.get(i);
 					URL url= curr.getURL();
 					if (url == null) {
 						fLinkRefStatus.setWarning(JavadocExportMessages.JavadocStandardWizardPage_nolinkref_error);
@@ -397,20 +399,21 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 	}
 
 	private String[] getHRefs() {
-		HashSet res= new HashSet();
-		List checked= fListDialogField.getCheckedElements();
-		for (Iterator iterator= checked.iterator(); iterator.hasNext();) {
-			JavadocLinkRef element= (JavadocLinkRef) iterator.next();
+		HashSet<String> res= new HashSet<String>();
+		List<JavadocLinkRef> checked= fListDialogField.getCheckedElements();
+		for (Iterator<JavadocLinkRef> iterator= checked.iterator(); iterator.hasNext();) {
+			JavadocLinkRef element= iterator.next();
 			URL url= element.getURL();
 			if (url != null) {
 				res.add(url.toExternalForm());
 			}
 		}
-		return (String[]) res.toArray(new String[res.size()]);
+		return res.toArray(new String[res.size()]);
 	}
 
 	//get the links
 
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
@@ -431,7 +434,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 		JavadocLinkRef[] res= getReferencedElements(checkedProjects);
 		fListDialogField.setElements(Arrays.asList(res));
 
-		List checked= getCheckedReferences(res);
+		List<JavadocLinkRef> checked= getCheckedReferences(res);
 		fListDialogField.setCheckedElements(checked);
 	}
 
@@ -471,12 +474,12 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 
 	} //end class FlaggesButton
 
-	private class ListAdapter implements IListAdapter, IDialogFieldListener {
+	private class ListAdapter implements IListAdapter<JavadocLinkRef>, IDialogFieldListener {
 
 		/**
 		 * @see IListAdapter#customButtonPressed(ListDialogField, int)
 		 */
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<JavadocLinkRef> field, int index) {
 			if (index == 2)
 				doEditButtonPressed();
 		}
@@ -484,8 +487,8 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 		/**
 		 * @see IListAdapter#selectionChanged(ListDialogField)
 		 */
-		public void selectionChanged(ListDialogField field) {
-			List selection= fListDialogField.getSelectedElements();
+		public void selectionChanged(ListDialogField<JavadocLinkRef> field) {
+			List<JavadocLinkRef> selection= fListDialogField.getSelectedElements();
 			if (selection.size() != 1) {
 				fListDialogField.enableButton(2, false);
 			} else {
@@ -493,7 +496,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 			}
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<JavadocLinkRef> field) {
 			doEditButtonPressed();
 		}
 
@@ -508,11 +511,11 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 	 */
 	private void doEditButtonPressed() {
 
-		List selected= fListDialogField.getSelectedElements();
+		List<JavadocLinkRef> selected= fListDialogField.getSelectedElements();
 		if (selected.isEmpty()) {
 			return;
 		}
-		JavadocLinkRef obj= (JavadocLinkRef) selected.get(0);
+		JavadocLinkRef obj= selected.get(0);
 		if (obj != null) {
 			JavadocPropertyDialog jdialog= new JavadocPropertyDialog(getShell(), obj);
 			if (jdialog.open() == Window.OK) {
@@ -536,6 +539,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 			fJavadocConfigurationBlock= new JavadocConfigurationBlock(parent, this, initialLocation, selection.isProjectRef());
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 			Control inner= fJavadocConfigurationBlock.createContents(composite);
@@ -552,6 +556,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 		/**
 		 * @see Dialog#okPressed()
 		 */
+		@Override
 		protected void okPressed() {
 			try {
 				IWorkspaceRunnable runnable= new IWorkspaceRunnable() {
@@ -578,6 +583,7 @@ public class JavadocStandardWizardPage extends JavadocWizardPage {
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.JAVADOC_PROPERTY_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocTreeWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocTreeWizardPage.java
index 0f7978b..7d3c818 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocTreeWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocTreeWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -174,6 +174,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		SWTUtil.setButtonDimensionHint(javadocCommandBrowserButton);
 
 		javadocCommandBrowserButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				browseForJavadocCommand();
 			}
@@ -237,6 +238,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		fDescriptionLabel.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 4, convertWidthInCharsToPixels(3) -  3)); // INDENT of CLabel
 
 		fPrivateVisibility.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (((Button) e.widget).getSelection()) {
 					fVisibilitySelection= fStore.PRIVATE;
@@ -245,6 +247,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 			}
 		});
 		fPackageVisibility.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (((Button) e.widget).getSelection()) {
 					fVisibilitySelection= fStore.PACKAGE;
@@ -253,6 +256,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 			}
 		});
 		fProtectedVisibility.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (((Button) e.widget).getSelection()) {
 					fVisibilitySelection= fStore.PROTECTED;
@@ -262,6 +266,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		});
 
 		fPublicVisibility.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				if (((Button) e.widget).getSelection()) {
 					fVisibilitySelection= fStore.PUBLIC;
@@ -347,17 +352,20 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		//Add Listeners
 		fCustomButton.addSelectionListener(new EnableSelectionAdapter(new Control[] { fDocletLabel, fDocletText, fDocletTypeLabel, fDocletTypeText }, new Control[] { fDestinationLabel, fDestinationText, fDestinationBrowserButton }));
 		fCustomButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				doValidation(CUSTOMSTATUS);
 			}
 		});
 		fStandardButton.addSelectionListener(new EnableSelectionAdapter(new Control[] { fDestinationLabel, fDestinationText, fDestinationBrowserButton }, new Control[] { fDocletLabel, fDocletText, fDocletTypeLabel, fDocletTypeText }));
 		fStandardButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				doValidation(STANDARDSTATUS);
 			}
 		});
 		fDestinationBrowserButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				String text= handleFolderBrowseButtonPressed(fDestinationText.getText(), JavadocExportMessages.JavadocTreeWizardPage_destinationbrowsedialog_title,
 				   		JavadocExportMessages.JavadocTreeWizardPage_destinationbrowsedialog_label);
@@ -423,7 +431,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 	}
 
 	private IPath[] getSourcePath(IJavaProject[] projects) {
-		HashSet res= new HashSet();
+		HashSet<IPath> res= new HashSet<IPath>();
 		//loops through all projects and gets a list if of their source paths
 		for (int k= 0; k < projects.length; k++) {
 			IJavaProject iJavaProject= projects[k];
@@ -448,11 +456,11 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 				JavaPlugin.log(e);
 			}
 		}
-		return (IPath[]) res.toArray(new IPath[res.size()]);
+		return res.toArray(new IPath[res.size()]);
 	}
 
 	private IPath[] getClassPath(IJavaProject[] javaProjects) {
-		HashSet res= new HashSet();
+		HashSet<IPath> res= new HashSet<IPath>();
 
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		for (int j= 0; j < javaProjects.length; j++) {
@@ -482,7 +490,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 				JavaPlugin.log(e);
 			}
 		}
-		return (IPath[]) res.toArray(new IPath[res.size()]);
+		return res.toArray(new IPath[res.size()]);
 	}
 
 	/**
@@ -492,11 +500,11 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 	 * @return source elements
 	 */
 	private IJavaElement[] getSourceElements(IJavaProject[] projects) {
-		ArrayList res= new ArrayList();
+		ArrayList<IJavaElement> res= new ArrayList<IJavaElement>();
 		try {
-			Set allChecked= fInputGroup.getAllCheckedTreeItems();
+			Set<Object> allChecked= fInputGroup.getAllCheckedTreeItems();
 
-			Set incompletePackages= new HashSet();
+			Set<String> incompletePackages= new HashSet<String>();
 			for (int h= 0; h < projects.length; h++) {
 				IJavaProject iJavaProject= projects[h];
 
@@ -520,7 +528,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 				}
 			}
 
-			Iterator checkedElements= fInputGroup.getAllCheckedListItems();
+			Iterator<Object> checkedElements= fInputGroup.getAllCheckedListItems();
 			while (checkedElements.hasNext()) {
 				Object element= checkedElements.next();
 				if (element instanceof ICompilationUnit) {
@@ -531,7 +539,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 				}
 			}
 
-			Set addedPackages= new HashSet();
+			Set<String> addedPackages= new HashSet<String>();
 
 			checkedElements= allChecked.iterator();
 			while (checkedElements.hasNext()) {
@@ -549,7 +557,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		} catch (JavaModelException e) {
 			JavaPlugin.log(e);
 		}
-		return (IJavaElement[]) res.toArray(new IJavaElement[res.size()]);
+		return res.toArray(new IJavaElement[res.size()]);
 	}
 
 	private boolean isAccessibleLocation(IPath packageLocation, IPath rootLocation) {
@@ -575,7 +583,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		fStore.setAccess(fVisibilitySelection);
 		fStore.setSelectedElements(getSourceElements(checkedProjects));
 
-		ArrayList commands= new ArrayList();
+		ArrayList<String> commands= new ArrayList<String>();
 		commands.add(fJavadocCommandText.getText()); // must be first
 		String[] items= fJavadocCommandText.getItems();
 		for (int i= 0; i < items.length; i++) {
@@ -584,11 +592,11 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 				commands.add(curr);
 			}
 		}
-		fStore.setJavadocCommandHistory((String[]) commands.toArray(new String[commands.size()]));
+		fStore.setJavadocCommandHistory(commands.toArray(new String[commands.size()]));
 	}
 
 	public IJavaProject[] getCheckedProjects() {
-		ArrayList res= new ArrayList();
+		ArrayList<Object> res= new ArrayList<Object>();
 		TreeItem[] treeItems= fInputGroup.getTree().getItems();
 		for (int i= 0; i < treeItems.length; i++) {
 			if (treeItems[i].getChecked()) {
@@ -598,7 +606,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 				}
 			}
 		}
-		return (IJavaProject[]) res.toArray(new IJavaProject[res.size()]);
+		return res.toArray(new IJavaProject[res.size()]);
 	}
 
 	protected void doValidation(int validate) {
@@ -682,7 +690,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		dialog.setFileName(dirName);
 		String selectedDirectory= dialog.open();
 		if (selectedDirectory != null) {
-			ArrayList newItems= new ArrayList();
+			ArrayList<String> newItems= new ArrayList<String>();
 			String[] items= fJavadocCommandText.getItems();
 			newItems.add(selectedDirectory);
 			for (int i= 0; i < items.length && newItems.size() < 5; i++) { // only keep the last 5 entries
@@ -691,7 +699,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 					newItems.add(curr);
 				}
 			}
-			fJavadocCommandText.setItems((String[]) newItems.toArray(new String[newItems.size()]));
+			fJavadocCommandText.setItems(newItems.toArray(new String[newItems.size()]));
 			fJavadocCommandText.select(0);
 		}
 	}
@@ -718,6 +726,7 @@ public class JavadocTreeWizardPage extends JavadocWizardPage {
 		updateStatus(new StatusInfo());
 	}
 
+	@Override
 	public void setVisible(boolean visible) {
 		if (visible) {
 			doValidation(STANDARDSTATUS);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java
index 927078f..218fb33 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,13 +11,18 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.javadocexport;
 
+import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStreamWriter;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import org.w3c.dom.Element;
@@ -113,10 +118,13 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 
 	private static final String ID_JAVADOC_PROCESS_TYPE= "org.eclipse.jdt.ui.javadocProcess"; //$NON-NLS-1$
 
+	private static final String ENCODING_ARGUMENT_PREFIX= "-J-Dfile.encoding="; //$NON-NLS-1$
+
 	public static void openJavadocWizard(JavadocWizard wizard, Shell shell, IStructuredSelection selection ) {
 		wizard.init(PlatformUI.getWorkbench(), selection);
 
 		WizardDialog dialog= new WizardDialog(shell, wizard) {
+			@Override
 			protected IDialogSettings getDialogBoundsSettings() {
 				// added so that the wizard can remember the last used size
 				return JavaPlugin.getDefault().getDialogSettingsSection("JavadocWizardDialog"); //$NON-NLS-1$
@@ -146,6 +154,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 	/*
 	 * @see IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		updateStore();
 
@@ -169,7 +178,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 
 				URL newURL= fDestination.toFile().toURI().toURL();
 				String newExternalForm= newURL.toExternalForm();
-				List projs= new ArrayList();
+				List<IJavaProject> projs= new ArrayList<IJavaProject>();
 				//get javadoc locations for all projects
 				for (int i= 0; i < checkedProjects.length; i++) {
 					IJavaProject curr= checkedProjects[i];
@@ -181,7 +190,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 					}
 				}
 				if (!projs.isEmpty()) {
-					setAllJavadocLocations((IJavaProject[]) projs.toArray(new IJavaProject[projs.size()]), newURL);
+					setAllJavadocLocations(projs.toArray(new IJavaProject[projs.size()]), newURL);
 				}
 			} catch (MalformedURLException e) {
 				JavaPlugin.log(e);
@@ -230,6 +239,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performCancel()
 	 */
+	@Override
 	public boolean performCancel() {
 		updateStore();
 
@@ -274,8 +284,8 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 	private boolean executeJavadocGeneration() {
 		Process process= null;
 		try {
-			ArrayList vmArgs= new ArrayList();
-			ArrayList progArgs= new ArrayList();
+			ArrayList<String> vmArgs= new ArrayList<String>();
+			ArrayList<String> progArgs= new ArrayList<String>();
 
 			IStatus status= fStore.getArgumentArray(vmArgs, progArgs);
 			if (!status.isOK()) {
@@ -291,10 +301,10 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 			File file= File.createTempFile("javadoc-arguments", ".tmp");  //$NON-NLS-1$//$NON-NLS-2$
 			vmArgs.add('@' + file.getAbsolutePath());
 
-			FileWriter writer= new FileWriter(file);
+			BufferedWriter writer= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), getEncoding(vmArgs)));
 			try {
 				for (int i= 0; i < progArgs.size(); i++) {
-					String curr= (String) progArgs.get(i);
+					String curr= progArgs.get(i);
 					curr= checkForSpaces(curr);
 
 					writer.write(curr);
@@ -303,8 +313,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 			} finally {
 				writer.close();
 			}
-
-			String[] args= (String[]) vmArgs.toArray(new String[vmArgs.size()]);
+			String[] args= vmArgs.toArray(new String[vmArgs.size()]);
 			process= Runtime.getRuntime().exec(args);
 			if (process != null) {
 				// construct a formatted command line for the process properties
@@ -355,6 +364,21 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 
 	}
 
+	private static String getEncoding(ArrayList<String> vmArgs) {
+		Iterator<String> iter= vmArgs.iterator();
+		while (iter.hasNext()) {
+			String argument= iter.next();
+			if (argument.length() > ENCODING_ARGUMENT_PREFIX.length() && argument.startsWith(ENCODING_ARGUMENT_PREFIX)) {
+				String encoding= argument.substring(ENCODING_ARGUMENT_PREFIX.length());
+				if (Charset.isSupported(encoding))
+					return encoding;
+				break;
+			}
+		}
+		return System.getProperty("file.encoding"); //$NON-NLS-1$
+
+	}
+
 	private String checkForSpaces(String curr) {
 		if (curr.indexOf(' ') == -1) {
 			return curr;
@@ -375,6 +399,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 	/*
 	 * @see IWizard#addPages()
 	 */
+	@Override
 	public void addPages() {
 		fContributedJavadocWizardPages= ContributedJavadocWizardPage.getContributedPages(fStore);
 
@@ -397,7 +422,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 
 	public void init(IWorkbench workbench, IStructuredSelection structuredSelection) {
 		IWorkbenchWindow window= workbench.getActiveWorkbenchWindow();
-		List selected= Collections.EMPTY_LIST;
+		List<?> selected= Collections.EMPTY_LIST;
 		if (window != null) {
 			ISelection selection= window.getSelectionService().getSelection();
 			if (selection instanceof IStructuredSelection) {
@@ -405,8 +430,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 			} else {
 				IJavaElement element= EditorUtility.getActiveEditorJavaInput();
 				if (element != null) {
-					selected= new ArrayList();
-					selected.add(element);
+					selected= Arrays.asList(element);
 				}
 			}
 		}
@@ -474,6 +498,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 		public void launchesRemoved(ILaunch[] launches) { }
 	}
 
+	@Override
 	public IWizardPage getNextPage(IWizardPage page) {
 		if (page == fTreeWizardPage && fTreeWizardPage.getCustom()) {
 			return fLastWizardPage;
@@ -481,6 +506,7 @@ public class JavadocWizard extends Wizard implements IExportWizard {
 		return super.getNextPage(page);
 	}
 
+	@Override
 	public IWizardPage getPreviousPage(IWizardPage page) {
 		if (page == fLastWizardPage && fTreeWizardPage.getCustom()) {
 			return fTreeWizardPage;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizardPage.java
index b7908eb..6d4c428 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -133,6 +133,7 @@ public abstract class JavadocWizardPage extends NewElementWizardPage {
 			fDisable= disable;
 		}
 
+		@Override
 		public void widgetSelected(SelectionEvent e) {
 			for (int i= 0; i < fEnable.length; i++) {
 				fEnable[i].setEnabled(true);
@@ -155,6 +156,7 @@ public abstract class JavadocWizardPage extends NewElementWizardPage {
 			this.controls= controls;
 		}
 
+		@Override
 		public void widgetSelected(SelectionEvent e) {
 
 			for (int i= 0; i < controls.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java
index 00a7393..f523c5d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,8 +134,8 @@ public class JavadocWriter {
 
 
 		//set the packages and source files
-		List packages= new ArrayList();
-		List sourcefiles= new ArrayList();
+		List<String> packages= new ArrayList<String>();
+		List<String> sourcefiles= new ArrayList<String>();
 		sortSourceElement(store.getSourceElements(), sourcefiles, packages);
 		if (!packages.isEmpty())
 			xmlJavadocDesc.setAttribute(store.PACKAGENAMES, toSeparatedList(packages));
@@ -174,7 +174,7 @@ public class JavadocWriter {
 		}
 	}
 
-	private void sortSourceElement(IJavaElement[] iJavaElements, List sourcefiles, List packages) {
+	private void sortSourceElement(IJavaElement[] iJavaElements, List<String> sourcefiles, List<String> packages) {
 		for (int i= 0; i < iJavaElements.length; i++) {
 			IJavaElement element= iJavaElements[i];
 			IPath p= element.getResource().getLocation();
@@ -258,8 +258,8 @@ public class JavadocWriter {
 	private void xmlWriteDoclet(JavadocOptionsManager store, Document document, Element xmlJavadocDesc) throws DOMException {
 
 		//set the packages and source files
-		List packages= new ArrayList();
-		List sourcefiles= new ArrayList();
+		List<String> packages= new ArrayList<String>();
+		List<String> sourcefiles= new ArrayList<String>();
 		sortSourceElement(store.getSourceElements(), sourcefiles, packages);
 		if (!packages.isEmpty())
 			xmlJavadocDesc.setAttribute(store.PACKAGENAMES, toSeparatedList(packages));
@@ -286,16 +286,16 @@ public class JavadocWriter {
 
 	}
 
-	private String toSeparatedList(List packages) {
+	private String toSeparatedList(List<String> packages) {
 		StringBuffer buf= new StringBuffer();
-		Iterator iter= packages.iterator();
+		Iterator<String> iter= packages.iterator();
 		int nAdded= 0;
 		while (iter.hasNext()) {
 			if (nAdded > 0) {
 				buf.append(',');
 			}
 			nAdded++;
-			String curr= (String) iter.next();
+			String curr= iter.next();
 			buf.append(curr);
 		}
 		return buf.toString();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/RecentSettingsStore.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/RecentSettingsStore.java
index 01856a2..eb6b705 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/RecentSettingsStore.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/RecentSettingsStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,13 +43,13 @@ public class RecentSettingsStore {
 
 
 	//list of hrefs in string format
-	private Map fPerProjectSettings;
+	private Map<IJavaProject, ProjectData> fPerProjectSettings;
 
 	/**
 	 * @param settings the settings to load from
 	 */
 	public RecentSettingsStore(IDialogSettings settings) {
-		fPerProjectSettings= new HashMap();
+		fPerProjectSettings= new HashMap<IJavaProject, ProjectData>();
 		if (settings != null) {
 			load(settings);
 		}
@@ -121,10 +121,10 @@ public class RecentSettingsStore {
 		IDialogSettings projectsSection= settings.addNewSection(SECTION_PROJECTS);
 
 		//Write all project information to DialogSettings.
-		Set keys= fPerProjectSettings.keySet();
-		for (Iterator iter= keys.iterator(); iter.hasNext();) {
+		Set<IJavaProject> keys= fPerProjectSettings.keySet();
+		for (Iterator<IJavaProject> iter= keys.iterator(); iter.hasNext();) {
 
-			IJavaProject curr= (IJavaProject) iter.next();
+			IJavaProject curr= iter.next();
 
 			IDialogSettings proj= projectsSection.addNewSection(curr.getElementName());
 			if (!keys.contains(curr)) {
@@ -132,7 +132,7 @@ public class RecentSettingsStore {
 				proj.put(DESTINATION, ""); //$NON-NLS-1$
 				proj.put(ANTPATH, ""); //$NON-NLS-1$
 			} else {
-				ProjectData data= (ProjectData) fPerProjectSettings.get(curr);
+				ProjectData data= fPerProjectSettings.get(curr);
 				proj.put(HREF, data.getHRefs());
 				proj.put(DESTINATION, data.getDestination());
 				proj.put(ANTPATH, data.getAntPath());
@@ -142,7 +142,7 @@ public class RecentSettingsStore {
 	}
 
 	public void setProjectSettings(IJavaProject project, String destination, String antpath, String[] hrefs) {
-		ProjectData data= (ProjectData) fPerProjectSettings.get(project);
+		ProjectData data= fPerProjectSettings.get(project);
 		if (data == null) {
 			data= new ProjectData();
 		}
@@ -172,7 +172,7 @@ public class RecentSettingsStore {
 
 
 	public String[] getHRefs(IJavaProject project) {
-		ProjectData data= (ProjectData) fPerProjectSettings.get(project);
+		ProjectData data= fPerProjectSettings.get(project);
 		if (data != null) {
 			String refs= data.getHRefs();
 			return getRefTokens(refs);
@@ -184,7 +184,7 @@ public class RecentSettingsStore {
 	//feild will be empty,
 	public String getDestination(IJavaProject project) {
 
-		ProjectData data= (ProjectData) fPerProjectSettings.get(project);
+		ProjectData data= fPerProjectSettings.get(project);
 		if (data != null)
 			return data.getDestination();
 		else
@@ -192,7 +192,7 @@ public class RecentSettingsStore {
 	}
 
 	public String getAntpath(IJavaProject project) {
-		ProjectData data= (ProjectData) fPerProjectSettings.get(project);
+		ProjectData data= fPerProjectSettings.get(project);
 		if (data != null)
 			return data.getAntPath();
 		else
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java
index 9f71f7f..8ce57b0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ASTProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -295,7 +295,7 @@ public final class ASTProvider {
 	 * @return <code>true</code> if the given compilation unit is the active one
 	 * @since 3.1
 	 */
-	public boolean isActive(ICompilationUnit cu) {
+	public synchronized boolean isActive(ICompilationUnit cu) {
 		return cu != null && cu.equals(fActiveJavaElement);
 	}
 
@@ -360,9 +360,9 @@ public final class ASTProvider {
 		if (ast == null)
 			return "null"; //$NON-NLS-1$
 
-		List types= ast.types();
+		List<AbstractTypeDeclaration> types= ast.types();
 		if (types != null && types.size() > 0)
-			return ((AbstractTypeDeclaration)types.get(0)).getName().getIdentifier();
+			return types.get(0).getName().getIdentifier() + "(" + ast.hashCode() + ")"; //$NON-NLS-1$//$NON-NLS-2$
 		else
 			return "AST without any type"; //$NON-NLS-1$
 	}
@@ -407,7 +407,7 @@ public final class ASTProvider {
 	 * @param progressMonitor the progress monitor or <code>null</code>
 	 * @return the AST or <code>null</code> if the AST is not available
 	 */
-	public CompilationUnit getAST(ITypeRoot input, WAIT_FLAG waitFlag, IProgressMonitor progressMonitor) {
+	public CompilationUnit getAST(final ITypeRoot input, WAIT_FLAG waitFlag, IProgressMonitor progressMonitor) {
 		if (input == null || waitFlag == null)
 			throw new IllegalArgumentException("input or wait flag are null"); //$NON-NLS-1$
 
@@ -436,18 +436,19 @@ public final class ASTProvider {
 
 		final boolean canReturnNull= waitFlag == SharedASTProvider.WAIT_NO || (waitFlag == SharedASTProvider.WAIT_ACTIVE_ONLY && !(isActiveElement && fAST == null));
 		boolean isReconciling= false;
+		final ITypeRoot activeElement;
 		if (isActiveElement) {
 			synchronized (fReconcileLock) {
+				activeElement= fReconcilingJavaElement;
 				isReconciling= isReconciling(input);
 				if (!isReconciling && !canReturnNull)
 					aboutToBeReconciled(input);
 			}
-		}
+		} else
+			activeElement= null;
 
 		if (isReconciling) {
 			try {
-				final ITypeRoot activeElement= fReconcilingJavaElement;
-
 				// Wait for AST
 				synchronized (fWaitLock) {
 					if (isReconciling(input)) {
@@ -461,7 +462,7 @@ public final class ASTProvider {
 				synchronized (this) {
 					if (activeElement == fActiveJavaElement && fAST != null) {
 						if (DEBUG)
-							System.out.println(getThreadName() + " - " + DEBUG_PREFIX + "...got AST for: " + input.getElementName()); //$NON-NLS-1$ //$NON-NLS-2$
+							System.out.println(getThreadName() + " - " + DEBUG_PREFIX + "...got AST: " + toString(fAST) + " for: " + input.getElementName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
 						return fAST;
 					}
@@ -607,6 +608,7 @@ public final class ASTProvider {
 			System.out.println(getThreadName() + " - " + DEBUG_PREFIX + "reconciled: " + toString(javaElement) + ", AST: " + toString(ast)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
 		synchronized (fReconcileLock) {
+			fIsReconciling= false;
 			if (javaElement == null || !javaElement.equals(fReconcilingJavaElement)) {
 
 				if (DEBUG)
@@ -619,7 +621,6 @@ public final class ASTProvider {
 
 				return;
 			}
-			fIsReconciling= false;
 			cache(ast, javaElement);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddClassFileMarkerAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddClassFileMarkerAction.java
index 9523841..55eaaf1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddClassFileMarkerAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddClassFileMarkerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ class AddClassFileMarkerAction extends AddMarkerAction {
 	/**
 	 * @see AddMarkerAction#getResource()
 	 */
+	@Override
 	protected IResource getResource() {
 
 		IResource resource= null;
@@ -62,9 +63,10 @@ class AddClassFileMarkerAction extends AddMarkerAction {
 	/**
 	 * @see AddMarkerAction#getInitialAttributes()
 	 */
+	@Override
 	protected Map getInitialAttributes() {
 
-		Map attributes= super.getInitialAttributes();
+		Map<String, Object> attributes= super.getInitialAttributes();
 
 		IEditorInput input= getTextEditor().getEditorInput();
 		if (input instanceof IClassFileEditorInput) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddImportOnSelectionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddImportOnSelectionAction.java
index 92be16a..471bbaf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddImportOnSelectionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/AddImportOnSelectionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,10 +67,10 @@ public class AddImportOnSelectionAction extends Action implements IUpdate {
 
 	private static final AddImportComparator ADD_IMPORT_COMPARATOR= new AddImportComparator();
 
-	private static final class AddImportComparator implements Comparator {
+	private static final class AddImportComparator implements Comparator<String> {
 
-		public int compare(Object o1, Object o2) {
-			if (((String)o1).equals(o2))
+		public int compare(String o1, String o2) {
+			if (o1.equals(o2))
 				return 0;
 
 			History history= QualifiedTypeNameHistory.getDefault();
@@ -116,6 +116,7 @@ public class AddImportOnSelectionAction extends Action implements IUpdate {
 	/*
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
+	@Override
 	public void run() {
 		final ICompilationUnit cu= getCompilationUnit();
 		if (cu == null || fEditor == null)
@@ -227,6 +228,7 @@ public class AddImportOnSelectionAction extends Action implements IUpdate {
 			}
 			fIsShowing= true;
 			ElementListSelectionDialog dialog= new ElementListSelectionDialog(fShell, new TypeNameMatchLabelProvider(TypeNameMatchLabelProvider.SHOW_FULLYQUALIFIED)) {
+				@Override
 				protected FilteredList createFilteredList(Composite parent) {
 					FilteredList filteredList= super.createFilteredList(parent);
 					filteredList.setComparator(ADD_IMPORT_COMPARATOR);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicCompilationUnitEditorActionContributor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicCompilationUnitEditorActionContributor.java
old mode 100644
new mode 100755
index c780d3e..cb6c4df
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicCompilationUnitEditorActionContributor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicCompilationUnitEditorActionContributor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,6 +102,7 @@ public class BasicCompilationUnitEditorActionContributor extends BasicJavaEditor
 	/*
 	 * @see EditorActionBarContributor#contributeToMenu(IMenuManager)
 	 */
+	@Override
 	public void contributeToMenu(IMenuManager menu) {
 
 		super.contributeToMenu(menu);
@@ -115,17 +116,17 @@ public class BasicCompilationUnitEditorActionContributor extends BasicJavaEditor
 			editMenu.insertAfter(ITextEditorActionConstants.GROUP_ASSIST, caMenu);
 
 			caMenu.add(fRetargetContentAssist);
-			Collection descriptors= CompletionProposalComputerRegistry.getDefault().getProposalCategories();
-			List specificAssistActions= new ArrayList(descriptors.size());
-			for (Iterator it= descriptors.iterator(); it.hasNext();) {
-				final CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
+			Collection<CompletionProposalCategory> descriptors= CompletionProposalComputerRegistry.getDefault().getProposalCategories();
+			List<IAction> specificAssistActions= new ArrayList<IAction>(descriptors.size());
+			for (Iterator<CompletionProposalCategory> it= descriptors.iterator(); it.hasNext();) {
+				final CompletionProposalCategory cat= it.next();
 				if (cat.hasComputers()) {
 					IAction caAction= new SpecificContentAssistAction(cat);
 					caMenu.add(caAction);
 					specificAssistActions.add(caAction);
 				}
 			}
-			fSpecificAssistActions= (SpecificContentAssistAction[]) specificAssistActions.toArray(new SpecificContentAssistAction[specificAssistActions.size()]);
+			fSpecificAssistActions= specificAssistActions.toArray(new SpecificContentAssistAction[specificAssistActions.size()]);
 			if (fSpecificAssistActions.length > 0) {
 				fContentAssistMenuListener= new MenuListener(caMenu);
 				caMenu.addMenuListener(fContentAssistMenuListener);
@@ -140,6 +141,7 @@ public class BasicCompilationUnitEditorActionContributor extends BasicJavaEditor
 	/*
 	 * @see IEditorActionBarContributor#setActiveEditor(IEditorPart)
 	 */
+	@Override
 	public void setActiveEditor(IEditorPart part) {
 		super.setActiveEditor(part);
 
@@ -175,6 +177,7 @@ public class BasicCompilationUnitEditorActionContributor extends BasicJavaEditor
 	/*
 	 * @see IEditorActionBarContributor#init(IActionBars, IWorkbenchPage)
 	 */
+	@Override
 	public void init(IActionBars bars, IWorkbenchPage page) {
 		super.init(bars, page);
 		// register actions that have a dynamic editor.
@@ -185,6 +188,7 @@ public class BasicCompilationUnitEditorActionContributor extends BasicJavaEditor
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.BasicJavaEditorActionContributor#dispose()
 	 * @since 3.1
 	 */
+	@Override
 	public void dispose() {
 		if (fRetargetContentAssist != null) {
 			fRetargetContentAssist.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicJavaEditorActionContributor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicJavaEditorActionContributor.java
index b1ae216..789fcf9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicJavaEditorActionContributor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicJavaEditorActionContributor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSelectio
  */
 public class BasicJavaEditorActionContributor extends BasicTextEditorActionContributor {
 
-	private List fPartListeners= new ArrayList();
+	private List<RetargetAction> fPartListeners= new ArrayList<RetargetAction>();
 
 	private TogglePresentationAction fTogglePresentation;
 	private ToggleMarkOccurrencesAction fToggleMarkOccurrencesAction;
@@ -118,11 +118,12 @@ public class BasicJavaEditorActionContributor extends BasicTextEditorActionContr
 	/*
 	 * @see IEditorActionBarContributor#init(IActionBars, IWorkbenchPage)
 	 */
+	@Override
 	public void init(IActionBars bars, IWorkbenchPage page) {
 		fToggleBreadcrumbAction= new ToggleBreadcrumbAction(page);
-		Iterator e= fPartListeners.iterator();
+		Iterator<RetargetAction> e= fPartListeners.iterator();
 		while (e.hasNext())
-			page.addPartListener((RetargetAction) e.next());
+			page.addPartListener(e.next());
 
 		super.init(bars, page);
 
@@ -134,6 +135,7 @@ public class BasicJavaEditorActionContributor extends BasicTextEditorActionContr
 	/*
 	 * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(org.eclipse.jface.action.IMenuManager)
 	 */
+	@Override
 	public void contributeToMenu(IMenuManager menu) {
 
 		super.contributeToMenu(menu);
@@ -169,6 +171,7 @@ public class BasicJavaEditorActionContributor extends BasicTextEditorActionContr
 	/*
 	 * @see EditorActionBarContributor#setActiveEditor(IEditorPart)
 	 */
+	@Override
 	public void setActiveEditor(IEditorPart part) {
 
 		super.setActiveEditor(part);
@@ -220,16 +223,18 @@ public class BasicJavaEditorActionContributor extends BasicTextEditorActionContr
 		actionBars.setGlobalActionHandler(CopyQualifiedNameAction.ACTION_HANDLER_ID, action);
 
 		actionBars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB, getAction(textEditor, IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB));
+		actionBars.setGlobalActionHandler("org.eclipse.jdt.internal.ui.actions.OpenHyperlink", getAction(textEditor, ITextEditorActionConstants.OPEN_HYPERLINK)); //$NON-NLS-1$
 	}
 
 	/*
 	 * @see IEditorActionBarContributor#dispose()
 	 */
+	@Override
 	public void dispose() {
 
-		Iterator e= fPartListeners.iterator();
+		Iterator<RetargetAction> e= fPartListeners.iterator();
 		while (e.hasNext())
-			getPage().removePartListener((RetargetAction) e.next());
+			getPage().removePartListener(e.next());
 		fPartListeners.clear();
 
 		setActiveEditor(null);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileDocumentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileDocumentProvider.java
index 77db69c..0551c80 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileDocumentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileDocumentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -189,7 +189,7 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	}
 
 	/** Input change listeners. */
-	private List fInputListeners= new ArrayList();
+	private List<InputChangeListener> fInputListeners= new ArrayList<InputChangeListener>();
 
 	/**
 	 * Creates a new document provider.
@@ -201,6 +201,7 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	/*
 	 * @see StorageDocumentProvider#setDocumentContent(IDocument, IEditorInput)
 	 */
+	@Override
 	protected boolean setDocumentContent(IDocument document, IEditorInput editorInput, String encoding) throws CoreException {
 		if (editorInput instanceof IClassFileEditorInput) {
 			IClassFile classFile= ((IClassFileEditorInput) editorInput).getClassFile();
@@ -241,6 +242,7 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	 * @see org.eclipse.ui.editors.text.StorageDocumentProvider#createEmptyDocument()
 	 * @since 3.1
 	 */
+	@Override
 	protected IDocument createEmptyDocument() {
 		IDocument document= FileBuffers.getTextFileBufferManager().createEmptyDocument(null, LocationKind.IFILE);
 		if (document instanceof ISynchronizable)
@@ -251,6 +253,7 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	/*
 	 * @see AbstractDocumentProvider#createDocument(Object)
 	 */
+	@Override
 	protected IDocument createDocument(Object element) throws CoreException {
 		IDocument document= super.createDocument(element);
 		if (document != null) {
@@ -263,6 +266,7 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	/*
 	 * @see AbstractDocumentProvider#createElementInfo(Object)
 	 */
+	@Override
 	protected ElementInfo createElementInfo(Object element) throws CoreException {
 
 		if (element instanceof IClassFileEditorInput) {
@@ -303,6 +307,7 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	/*
 	 * @see FileDocumentProvider#disposeElementInfo(Object, ElementInfo)
 	 */
+	@Override
 	protected void disposeElementInfo(Object element, ElementInfo info) {
 		ClassFileInfo classFileInfo= (ClassFileInfo) info;
 		if (classFileInfo.fClassFileSynchronizer != null) {
@@ -317,6 +322,7 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	 * @see org.eclipse.ui.texteditor.IDocumentProviderExtension3#isSynchronized(java.lang.Object)
 	 * @since 3.0
 	 */
+	@Override
 	public boolean isSynchronized(Object element) {
 		Object elementInfo= getElementInfo(element);
 		if (elementInfo instanceof ClassFileInfo) {
@@ -376,9 +382,9 @@ public class ClassFileDocumentProvider extends FileDocumentProvider {
 	 * @param input the class file editor input
 	 */
 	protected void fireInputChanged(IClassFileEditorInput input) {
-		List list= new ArrayList(fInputListeners);
-		for (Iterator i = list.iterator(); i.hasNext();)
-			((InputChangeListener) i.next()).inputChanged(input);
+		List<InputChangeListener> list= new ArrayList<InputChangeListener>(fInputListeners);
+		for (Iterator<InputChangeListener> i = list.iterator(); i.hasNext();)
+			i.next().inputChanged(input);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java
index efaa93e..b09687a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,7 +76,6 @@ import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaModelStatusConstants;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.ToolFactory;
@@ -116,8 +115,8 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 		private Color fBackgroundColor;
 		private Color fForegroundColor;
 		private Color fSeparatorColor;
-		private List fBannerLabels= new ArrayList();
-		private List fHeaderLabels= new ArrayList();
+		private List<Label> fBannerLabels= new ArrayList<Label>();
+		private List<Label> fHeaderLabels= new ArrayList<Label>();
 		private Font fFont;
 
 		/**
@@ -316,13 +315,13 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 		 */
 		public void propertyChange(PropertyChangeEvent event) {
 
-			for (Iterator iterator = fBannerLabels.iterator(); iterator.hasNext();) {
-				Label label = (Label) iterator.next();
+			for (Iterator<Label> iterator = fBannerLabels.iterator(); iterator.hasNext();) {
+				Label label = iterator.next();
 				label.setFont(JFaceResources.getBannerFont());
 			}
 
-			for (Iterator iterator = fHeaderLabels.iterator(); iterator.hasNext();) {
-				Label label = (Label) iterator.next();
+			for (Iterator<Label> iterator = fHeaderLabels.iterator(); iterator.hasNext();) {
+				Label label = iterator.next();
 				label.setFont(JFaceResources.getHeaderFont());
 			}
 
@@ -530,6 +529,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see AbstractTextEditor#createActions()
 	 */
+	@Override
 	protected void createActions() {
 		super.createActions();
 
@@ -558,6 +558,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see AbstractTextEditor#editorContextMenuAboutToShow(IMenuManager)
 	 */
+	@Override
 	public void editorContextMenuAboutToShow(IMenuManager menu) {
 		super.editorContextMenuAboutToShow(menu);
 
@@ -570,6 +571,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see JavaEditor#getElementAt(int)
 	 */
+	@Override
 	protected IJavaElement getElementAt(int offset) {
 		if (getEditorInput() instanceof IClassFileEditorInput) {
 			try {
@@ -584,6 +586,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see JavaEditor#getCorrespondingElement(IJavaElement)
 	 */
+	@Override
 	protected IJavaElement getCorrespondingElement(IJavaElement element) {
 		if (getEditorInput() instanceof IClassFileEditorInput) {
 			IClassFileEditorInput input= (IClassFileEditorInput) getEditorInput();
@@ -602,6 +605,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#isEditable()
 	 */
+	@Override
 	public boolean isEditable() {
 		return false;
 	}
@@ -610,6 +614,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#isEditorInputReadOnly()
 	 * @since 3.2
 	 */
+	@Override
 	public boolean isEditorInputReadOnly() {
 		return true;
 	}
@@ -636,6 +641,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see AbstractTextEditor#doSetInput(IEditorInput)
 	 */
+	@Override
 	protected void doSetInput(IEditorInput input) throws CoreException {
 		uninstallOccurrencesFinder();
 
@@ -676,17 +682,28 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 
 		verifyInput(getEditorInput());
 
-		final ITypeRoot inputElement= getInputJavaElement();
-
 		JavaPlugin.getDefault().getASTProvider().activeJavaEditorChanged(this);
 
+		if (fSemanticManager != null)
+			installSemanticHighlighting();
+
+	}
+
+	/*
+	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#installSemanticHighlighting()
+	 * @since 3.7
+	 */
+	@Override
+	protected void installSemanticHighlighting() {
+		super.installSemanticHighlighting();
 		Job job= new Job(JavaEditorMessages.OverrideIndicatorManager_intallJob) {
 			/*
 			 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 			 * @since 3.0
 			 */
+			@Override
 			protected IStatus run(IProgressMonitor monitor) {
-				CompilationUnit ast= SharedASTProvider.getAST(inputElement, SharedASTProvider.WAIT_YES, null);
+				CompilationUnit ast= SharedASTProvider.getAST(getInputJavaElement(), SharedASTProvider.WAIT_YES, null);
 				if (fOverrideIndicatorManager != null)
 					fOverrideIndicatorManager.reconciled(ast, true, monitor);
 				if (fSemanticManager != null) {
@@ -702,12 +719,12 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 		job.setPriority(Job.DECORATE);
 		job.setSystem(true);
 		job.schedule();
-
 	}
 
 	/*
 	 * @see IWorkbenchPart#createPartControl(Composite)
 	 */
+	@Override
 	public void createPartControl(Composite parent) {
 
 		fParent= new Composite(parent, SWT.NONE);
@@ -781,6 +798,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 			if (fNoSourceTextWidget != null) {
 				// Copy action for the no attached source case
 				final IAction copyAction= new Action() {
+					@Override
 					public void run() {
 						fNoSourceTextWidget.copy();
 					}
@@ -798,6 +816,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 
 				// Select All action for the no attached source case
 				final IAction selectAllAction= new Action() {
+					@Override
 					public void run() {
 						fNoSourceTextWidget.selectAll();
 						copyAction.setEnabled(true);
@@ -862,12 +881,14 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	protected ISourceViewer createJavaSourceViewer(Composite parent, IVerticalRuler ruler, int styles, IPreferenceStore store) {
 		return new JavaSourceViewer(parent, ruler, null, false, styles, store) {
 
+			@Override
 			public boolean requestWidgetToken(IWidgetTokenKeeper requester) {
 				if (PlatformUI.getWorkbench().getHelpSystem().isContextHelpDisplayed())
 					return false;
 				return super.requestWidgetToken(requester);
 			}
 
+			@Override
 			public boolean requestWidgetToken(IWidgetTokenKeeper requester, int priority) {
 				if (PlatformUI.getWorkbench().getHelpSystem().isContextHelpDisplayed())
 					return false;
@@ -879,6 +900,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see org.eclipse.ui.IWorkbenchPart#dispose()
 	 */
+	@Override
 	public void dispose() {
 		// http://bugs.eclipse.org/bugs/show_bug.cgi?id=18510
 		IDocumentProvider documentProvider= getDocumentProvider();
@@ -890,6 +912,7 @@ public class ClassFileEditor extends JavaEditor implements ClassFileDocumentProv
 	/*
 	 * @see org.eclipse.ui.IWorkbenchPart#setFocus()
 	 */
+	@Override
 	public void setFocus() {
 		super.setFocus();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerAnnotationModel.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerAnnotationModel.java
index a6bc054..a3489a0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerAnnotationModel.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerAnnotationModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ public class ClassFileMarkerAnnotationModel extends AbstractMarkerAnnotationMode
 	/**
 	 * @see AbstractMarkerAnnotationModel#isAcceptable
 	 */
+	@Override
 	protected boolean isAcceptable(IMarker marker) {
 		try {
 			return JavaCore.isReferencedBy(fClassFile, marker);
@@ -74,6 +75,7 @@ public class ClassFileMarkerAnnotationModel extends AbstractMarkerAnnotationMode
 	/**
 	 * @see AbstractMarkerAnnotationModel#createMarkerAnnotation(IMarker)
 	 */
+	@Override
 	protected MarkerAnnotation createMarkerAnnotation(IMarker marker) {
 		return new JavaMarkerAnnotation(marker);
 	}
@@ -81,6 +83,7 @@ public class ClassFileMarkerAnnotationModel extends AbstractMarkerAnnotationMode
 	/**
 	 * @see AbstractMarkerAnnotationModel#listenToMarkerChanges(boolean)
 	 */
+	@Override
 	protected void listenToMarkerChanges(boolean listen) {
 		if (listen)
 			fWorkspace.addResourceChangeListener(this);
@@ -91,6 +94,7 @@ public class ClassFileMarkerAnnotationModel extends AbstractMarkerAnnotationMode
 	/**
 	 * @see AbstractMarkerAnnotationModel#deleteMarkers(IMarker[])
 	 */
+	@Override
 	protected void deleteMarkers(IMarker[] markers) throws CoreException {
 		// empty as class files are read only
 	}
@@ -98,6 +102,7 @@ public class ClassFileMarkerAnnotationModel extends AbstractMarkerAnnotationMode
 	/**
 	 * @see AbstractMarkerAnnotationModel#retrieveMarkers()
 	 */
+	@Override
 	protected IMarker[] retrieveMarkers() throws CoreException {
 		if (fMarkerResource != null) {
 			IMarker[] workspaceMarkers= fWorkspace.getRoot().findMarkers(IMarker.MARKER, true, IResource.DEPTH_ZERO);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerRulerAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerRulerAction.java
index bcf6c62..4deb0d2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerRulerAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileMarkerRulerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ class ClassFileMarkerRulerAction extends MarkerRulerAction {
 	/**
 	 * @see MarkerRulerAction#getResource()
 	 */
+	@Override
 	protected IResource getResource() {
 
 		IResource resource= null;
@@ -64,9 +65,10 @@ class ClassFileMarkerRulerAction extends MarkerRulerAction {
 	/**
 	 * @see MarkerRulerAction#getInitialAttributes()
 	 */
+	@Override
 	protected Map getInitialAttributes() {
 
-		Map attributes= super.getInitialAttributes();
+		Map<String, Object> attributes= super.getInitialAttributes();
 
 		IEditorInput input= getTextEditor().getEditorInput();
 		if (input instanceof IClassFileEditorInput) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java
index cd4e155..1e0e7ff 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -34,7 +35,11 @@ import org.eclipse.swt.widgets.Shell;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.ISelection;
 
 import org.eclipse.jface.text.IRewriteTarget;
@@ -42,11 +47,17 @@ import org.eclipse.jface.text.ITextOperationTarget;
 import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.Region;
 
+import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchCommandConstants;
+import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
 
 import org.eclipse.ui.texteditor.IAbstractTextEditorHelpContextIds;
 import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.ITextEditorExtension3;
 import org.eclipse.ui.texteditor.TextEditorAction;
 
 import org.eclipse.jdt.core.ICompilationUnit;
@@ -57,7 +68,9 @@ import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.ImportDeclaration;
 import org.eclipse.jdt.core.dom.Name;
+import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.ImportReferencesCollector;
@@ -69,7 +82,9 @@ import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.SharedASTProvider;
 
+import org.eclipse.jdt.internal.ui.IJavaStatusConstants;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.JavaUIMessages;
 
 
 /**
@@ -158,6 +173,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 		/* (non-Javadoc)
 		 * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
 		 */
+		@Override
 		protected int[] getTypeIds() {
 			return new int[] { TYPEID };
 		}
@@ -165,6 +181,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 		/* (non-Javadoc)
 		 * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
 		 */
+		@Override
 		protected String[] getTypeNames() {
 			return new String[] { TYPE_NAME };
 		}
@@ -172,6 +189,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 		/* (non-Javadoc)
 		 * @see org.eclipse.swt.dnd.Transfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
 		 */
+		@Override
 		protected void javaToNative(Object data, TransferData transferData) {
 			if (data instanceof ClipboardData) {
 				try {
@@ -185,6 +203,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 		/* (non-Javadoc)
 		 * Method declared on Transfer.
 		 */
+		@Override
 		protected Object nativeToJava(TransferData transferData) {
 			byte[] bytes = (byte[]) super.nativeToJava(transferData);
 			if (bytes != null) {
@@ -242,6 +261,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
+	@Override
 	public void run() {
 		if (fOperationCode == -1 || fOperationTarget == null)
 			return;
@@ -280,9 +300,30 @@ public final class ClipboardOperationAction extends TextEditorAction {
 		return null;
 	}
 
+	/**
+	 * Returns whether the Smart Insert Mode is selected.
+	 * 
+	 * @return <code>true</code> if the Smart Insert Mode is selected
+	 * @since 3.7
+	 */
+	private boolean isSmartInsertMode() {
+		IWorkbenchPage page= JavaPlugin.getActivePage();
+		if (page != null) {
+			IEditorPart part= page.getActiveEditor();
+			if (part instanceof ITextEditorExtension3) {
+				ITextEditorExtension3 extension= (ITextEditorExtension3)part;
+				return extension.getInsertMode() == ITextEditorExtension3.SMART_INSERT;
+			} else if (part != null && EditorUtility.isCompareEditorInput(part.getEditorInput())) {
+				ITextEditorExtension3 extension= (ITextEditorExtension3)part.getAdapter(ITextEditorExtension3.class);
+				if (extension != null)
+					return extension.getInsertMode() == ITextEditorExtension3.SMART_INSERT;
+			}
+		}
+		return false;
+	}
 
 	protected final void internalDoOperation() {
-		if (PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_IMPORTS_ON_PASTE)) {
+		if (PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_IMPORTS_ON_PASTE) && isSmartInsertMode()) {
 			if (fOperationCode == ITextOperationTarget.PASTE) {
 				doPasteWithImportsOperation();
 			} else {
@@ -296,6 +337,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.IUpdate#update()
 	 */
+	@Override
 	public void update() {
 		super.update();
 
@@ -315,6 +357,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.TextEditorAction#setEditor(org.eclipse.ui.texteditor.ITextEditor)
 	 */
+	@Override
 	public void setEditor(ITextEditor editor) {
 		super.setEditor(editor);
 		fOperationTarget= null;
@@ -352,8 +395,8 @@ public final class ClipboardOperationAction extends TextEditorAction {
 				if (textData == null)
 					return;
 
-				ArrayList datas= new ArrayList(3);
-				ArrayList transfers= new ArrayList(3);
+				ArrayList<Object> datas= new ArrayList<Object>(3);
+				ArrayList<ByteArrayTransfer> transfers= new ArrayList<ByteArrayTransfer>(3);
 				datas.add(textData);
 				transfers.add(TextTransfer.getInstance());
 
@@ -366,7 +409,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 				datas.add(clipboardData);
 				transfers.add(fgTransferInstance);
 
-				Transfer[] dataTypes= (Transfer[]) transfers.toArray(new Transfer[transfers.size()]);
+				Transfer[] dataTypes= transfers.toArray(new Transfer[transfers.size()]);
 				Object[] data= datas.toArray();
 				setClipboardContents(clipboard, data, dataTypes);
 			} finally {
@@ -409,7 +452,7 @@ public final class ClipboardOperationAction extends TextEditorAction {
 		}
 
 		// do process import if selection spans over import declaration or package
-		List list= astRoot.imports();
+		List<ImportDeclaration> list= astRoot.imports();
 		if (!list.isEmpty()) {
 			if (offset < ((ASTNode) list.get(list.size() - 1)).getStartPosition()) {
 				return null;
@@ -420,8 +463,8 @@ public final class ClipboardOperationAction extends TextEditorAction {
 			}
 		}
 
-		ArrayList typeImportsRefs= new ArrayList();
-		ArrayList staticImportsRefs= new ArrayList();
+		ArrayList<SimpleName> typeImportsRefs= new ArrayList<SimpleName>();
+		ArrayList<SimpleName> staticImportsRefs= new ArrayList<SimpleName>();
 
 		ImportReferencesCollector.collect(astRoot, inputElement.getJavaProject(), new Region(offset, length), typeImportsRefs, staticImportsRefs);
 
@@ -429,9 +472,9 @@ public final class ClipboardOperationAction extends TextEditorAction {
 			return null;
 		}
 
-		HashSet namesToImport= new HashSet(typeImportsRefs.size());
+		HashSet<String> namesToImport= new HashSet<String>(typeImportsRefs.size());
 		for (int i= 0; i < typeImportsRefs.size(); i++) {
-			Name curr= (Name) typeImportsRefs.get(i);
+			Name curr= typeImportsRefs.get(i);
 			IBinding binding= curr.resolveBinding();
 			if (binding != null && binding.getKind() == IBinding.TYPE) {
 				ITypeBinding typeBinding= (ITypeBinding) binding;
@@ -451,9 +494,9 @@ public final class ClipboardOperationAction extends TextEditorAction {
 			}
 		}
 
-		HashSet staticsToImport= new HashSet(staticImportsRefs.size());
+		HashSet<String> staticsToImport= new HashSet<String>(staticImportsRefs.size());
 		for (int i= 0; i < staticImportsRefs.size(); i++) {
-			Name curr= (Name) staticImportsRefs.get(i);
+			Name curr= staticImportsRefs.get(i);
 			IBinding binding= curr.resolveBinding();
 			if (binding != null) {
 				StringBuffer buf= new StringBuffer(Bindings.getImportName(binding));
@@ -469,8 +512,8 @@ public final class ClipboardOperationAction extends TextEditorAction {
 			return null;
 		}
 
-		String[] typeImports= (String[]) namesToImport.toArray(new String[namesToImport.size()]);
-		String[] staticImports= (String[]) staticsToImport.toArray(new String[staticsToImport.size()]);
+		String[] typeImports= namesToImport.toArray(new String[namesToImport.size()]);
+		String[] staticImports= staticsToImport.toArray(new String[staticsToImport.size()]);
 		return new ClipboardData(inputElement, typeImports, staticImports);
 	}
 
@@ -505,9 +548,8 @@ public final class ClipboardOperationAction extends TextEditorAction {
 		}
 	}
 
-
-	private void addImports(ICompilationUnit unit, ClipboardData data) throws CoreException {
-		ImportRewrite rewrite= StubUtility.createImportRewrite(unit, true);
+	private void addImports(final ICompilationUnit unit, ClipboardData data) throws CoreException {
+		final ImportRewrite rewrite= StubUtility.createImportRewrite(unit, true);
 		String[] imports= data.getTypeImports();
 		for (int i= 0; i < imports.length; i++) {
 			rewrite.addImport(imports[i]);
@@ -523,8 +565,34 @@ public final class ClipboardOperationAction extends TextEditorAction {
 			rewrite.addStaticImport(qualifier, name, isField);
 		}
 
-		JavaModelUtil.applyEdit(unit, rewrite.rewriteImports(null), false, null);
+		try {
+			getProgressService().busyCursorWhile(new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+					try {
+						JavaModelUtil.applyEdit(unit, rewrite.rewriteImports(monitor), false, null);
+					} catch (CoreException e) {
+						throw new InvocationTargetException(e);
+					}
+				}
+			});
+		} catch (InvocationTargetException e) {
+			Throwable cause= e.getCause();
+			if (cause instanceof CoreException)
+				throw (CoreException) cause;
+			throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, IJavaStatusConstants.INTERNAL_ERROR, JavaUIMessages.JavaPlugin_internal_error, cause));
+		} catch (InterruptedException e) {
+			// Canceled by the user
+		}
 	}
 
+	private IProgressService getProgressService() {
+		IEditorPart editor= getTextEditor();
+		if (editor != null) {
+			IWorkbenchPartSite site= editor.getSite();
+			if (site != null)
+				return (IWorkbenchSiteProgressService) editor.getSite().getAdapter(IWorkbenchSiteProgressService.class);
+		}
+		return PlatformUI.getWorkbench().getProgressService();
+	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitAnnotationModelEvent.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitAnnotationModelEvent.java
index 7d70919..312934b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitAnnotationModelEvent.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitAnnotationModelEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.javaeditor;
 
-
-
 import org.eclipse.core.runtime.CoreException;
 
 import org.eclipse.core.resources.IMarker;
@@ -26,6 +24,7 @@ import org.eclipse.ui.texteditor.MarkerAnnotation;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
+
 /**
  * Event sent out by changes of the compilation unit annotation model.
  */
@@ -36,7 +35,8 @@ public class CompilationUnitAnnotationModelEvent  extends AnnotationModelEvent {
 
 	/**
 	 * Constructor for CompilationUnitAnnotationModelEvent.
-	 * @param model
+	 * 
+	 * @param model the annotation model
 	 * @param underlyingResource The annotation model's underlying resource
 	 */
 	public CompilationUnitAnnotationModelEvent(IAnnotationModel model, IResource underlyingResource) {
@@ -66,6 +66,7 @@ public class CompilationUnitAnnotationModelEvent  extends AnnotationModelEvent {
 	/*
 	 * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationAdded(org.eclipse.jface.text.source.Annotation)
 	 */
+	@Override
 	public void annotationAdded(Annotation annotation) {
 		super.annotationAdded(annotation);
 		testIfProblemMarker(annotation);
@@ -75,6 +76,7 @@ public class CompilationUnitAnnotationModelEvent  extends AnnotationModelEvent {
 	/*
 	 * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationRemoved(org.eclipse.jface.text.source.Annotation)
 	 */
+	@Override
 	public void annotationRemoved(Annotation annotation) {
 		super.annotationRemoved(annotation);
 		testIfProblemMarker(annotation);
@@ -83,6 +85,7 @@ public class CompilationUnitAnnotationModelEvent  extends AnnotationModelEvent {
 	/*
 	 * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationRemoved(org.eclipse.jface.text.source.Annotation, org.eclipse.jface.text.Position)
 	 */
+	@Override
 	public void annotationRemoved(Annotation annotation, Position position) {
 		super.annotationRemoved(annotation, position);
 		testIfProblemMarker(annotation);
@@ -91,6 +94,7 @@ public class CompilationUnitAnnotationModelEvent  extends AnnotationModelEvent {
 	/*
 	 * @see org.eclipse.jface.text.source.AnnotationModelEvent#annotationChanged(org.eclipse.jface.text.source.Annotation)
 	 */
+	@Override
 	public void annotationChanged(Annotation annotation) {
 		testIfProblemMarker(annotation);
 		super.annotationChanged(annotation);
@@ -106,7 +110,9 @@ public class CompilationUnitAnnotationModelEvent  extends AnnotationModelEvent {
 	}
 
 	/**
-	 * Returns the annotation model's underlying resource
+	 * Returns the annotation model's underlying resource.
+	 * 
+	 * @return the underlying resource
 	 */
 	public IResource getUnderlyingResource() {
 		return fUnderlyingResource;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java
index b2b5530..c3b13f3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -188,7 +188,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		private static boolean fgImagesInitialized= false;
 
 		private ICompilationUnit fCompilationUnit;
-		private List fOverlaids;
+		private List<IJavaAnnotation> fOverlaids;
 		private IProblem fProblem;
 		private Image fImage;
 		private boolean fImageInitialized= false;
@@ -285,6 +285,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		/*
 		 * @see IJavaAnnotation#getMessage()
 		 */
+		@Override
 		public String getText() {
 			return fProblem.getMessage();
 		}
@@ -332,7 +333,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 */
 		public void addOverlaid(IJavaAnnotation annotation) {
 			if (fOverlaids == null)
-				fOverlaids= new ArrayList(1);
+				fOverlaids= new ArrayList<IJavaAnnotation>(1);
 			fOverlaids.add(annotation);
 		}
 
@@ -350,7 +351,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		/*
 		 * @see IJavaAnnotation#getOverlaidIterator()
 		 */
-		public Iterator getOverlaidIterator() {
+		public Iterator<IJavaAnnotation> getOverlaidIterator() {
 			if (fOverlaids != null)
 				return fOverlaids.iterator();
 			return null;
@@ -412,7 +413,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 			Object fValue;
 		}
 
-		private List fList= new ArrayList(2);
+		private List<Entry> fList= new ArrayList<Entry>(2);
 		private int fAnchor= 0;
 
 		public ReverseMap() {
@@ -425,7 +426,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 			// behind anchor
 			int length= fList.size();
 			for (int i= fAnchor; i < length; i++) {
-				entry= (Entry) fList.get(i);
+				entry= fList.get(i);
 				if (entry.fPosition.equals(position)) {
 					fAnchor= i;
 					return entry.fValue;
@@ -434,7 +435,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 
 			// before anchor
 			for (int i= 0; i < fAnchor; i++) {
-				entry= (Entry) fList.get(i);
+				entry= fList.get(i);
 				if (entry.fPosition.equals(position)) {
 					fAnchor= i;
 					return entry.fValue;
@@ -448,7 +449,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 			Entry entry;
 			int length= fList.size();
 			for (int i= 0; i < length; i++) {
-				entry= (Entry) fList.get(i);
+				entry= fList.get(i);
 				if (entry.fPosition.equals(position))
 					return i;
 			}
@@ -463,7 +464,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 				entry.fValue= value;
 				fList.add(entry);
 			} else {
-				Entry entry= (Entry) fList.get(index);
+				Entry entry= fList.get(index);
 				entry.fValue= value;
 			}
 		}
@@ -488,21 +489,21 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 
 		private static class ProblemRequestorState {
 			boolean fInsideReportingSequence= false;
-			List fReportedProblems;
+			List<IProblem> fReportedProblems;
 		}
 
-		private ThreadLocal fProblemRequestorState= new ThreadLocal();
+		private ThreadLocal<ProblemRequestorState> fProblemRequestorState= new ThreadLocal<ProblemRequestorState>();
 		private int fStateCount= 0;
 
 		private ICompilationUnit fCompilationUnit;
-		private List fGeneratedAnnotations= new ArrayList();
+		private List<ProblemAnnotation> fGeneratedAnnotations= new ArrayList<ProblemAnnotation>();
 		private IProgressMonitor fProgressMonitor;
 		private boolean fIsActive= false;
 		private boolean fIsHandlingTemporaryProblems;
 
 		private ReverseMap fReverseMap= new ReverseMap();
-		private List fPreviouslyOverlaid= null;
-		private List fCurrentlyOverlaid= new ArrayList();
+		private List<JavaMarkerAnnotation> fPreviouslyOverlaid= null;
+		private List<JavaMarkerAnnotation> fCurrentlyOverlaid= new ArrayList<JavaMarkerAnnotation>();
 		private Thread fActiveThread;
 
 
@@ -514,6 +515,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 			fCompilationUnit= unit;
 		}
 
+		@Override
 		protected MarkerAnnotation createMarkerAnnotation(IMarker marker) {
 			if (JavaMarkerAnnotation.isJavaAnnotation(marker))
 				return new JavaMarkerAnnotation(marker);
@@ -523,6 +525,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		/*
 		 * @see org.eclipse.jface.text.source.AnnotationModel#createAnnotationModelEvent()
 		 */
+		@Override
 		protected AnnotationModelEvent createAnnotationModelEvent() {
 			return new CompilationUnitAnnotationModelEvent(this, getResource());
 		}
@@ -551,7 +554,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 * @see IProblemRequestor#beginReporting()
 		 */
 		public void beginReporting() {
-			ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get();
+			ProblemRequestorState state= fProblemRequestorState.get();
 			if (state == null)
 				internalBeginReporting(false);
 		}
@@ -560,7 +563,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 * @see org.eclipse.jdt.internal.ui.text.java.IProblemRequestorExtension#beginReportingSequence()
 		 */
 		public void beginReportingSequence() {
-			ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get();
+			ProblemRequestorState state= fProblemRequestorState.get();
 			if (state == null)
 				internalBeginReporting(true);
 		}
@@ -575,7 +578,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 			if (fCompilationUnit != null && fCompilationUnit.getJavaProject().isOnClasspath(fCompilationUnit)) {
 				ProblemRequestorState state= new ProblemRequestorState();
 				state.fInsideReportingSequence= insideReportingSequence;
-				state.fReportedProblems= new ArrayList();
+				state.fReportedProblems= new ArrayList<IProblem>();
 				synchronized (getLockObject()) {
 					fProblemRequestorState.set(state);
 					++fStateCount;
@@ -588,7 +591,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 */
 		public void acceptProblem(IProblem problem) {
 			if (fIsHandlingTemporaryProblems || problem.getID() == JavaSpellingReconcileStrategy.SPELLING_PROBLEM_ID) {
-				ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get();
+				ProblemRequestorState state= fProblemRequestorState.get();
 				if (state != null)
 					state.fReportedProblems.add(problem);
 			}
@@ -598,7 +601,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 * @see IProblemRequestor#endReporting()
 		 */
 		public void endReporting() {
-			ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get();
+			ProblemRequestorState state= fProblemRequestorState.get();
 			if (state != null && !state.fInsideReportingSequence)
 				internalEndReporting(state);
 		}
@@ -607,7 +610,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 * @see org.eclipse.jdt.internal.ui.text.java.IProblemRequestorExtension#endReportingSequence()
 		 */
 		public void endReportingSequence() {
-			ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get();
+			ProblemRequestorState state= fProblemRequestorState.get();
 			if (state != null && state.fInsideReportingSequence)
 				internalEndReporting(state);
 		}
@@ -629,7 +632,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 *
 		 * @param reportedProblems the problems to report
 		 */
-		private void reportProblems(List reportedProblems) {
+		private void reportProblems(List<IProblem> reportedProblems) {
 			if (fProgressMonitor != null && fProgressMonitor.isCanceled())
 				return;
 
@@ -640,7 +643,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 				boolean isCanceled= false;
 
 				fPreviouslyOverlaid= fCurrentlyOverlaid;
-				fCurrentlyOverlaid= new ArrayList();
+				fCurrentlyOverlaid= new ArrayList<JavaMarkerAnnotation>();
 
 				if (fGeneratedAnnotations.size() > 0) {
 					temporaryProblemsChanged= true;
@@ -650,7 +653,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 
 				if (reportedProblems != null && reportedProblems.size() > 0) {
 
-					Iterator e= reportedProblems.iterator();
+					Iterator<IProblem> e= reportedProblems.iterator();
 					while (e.hasNext()) {
 
 						if (fProgressMonitor != null && fProgressMonitor.isCanceled()) {
@@ -658,7 +661,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 							break;
 						}
 
-						IProblem problem= (IProblem) e.next();
+						IProblem problem= e.next();
 						Position position= createPositionFromProblem(problem);
 						if (position != null) {
 
@@ -688,9 +691,9 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 			if (isCanceled) {
 				fCurrentlyOverlaid.addAll(fPreviouslyOverlaid);
 			} else if (fPreviouslyOverlaid != null) {
-				Iterator e= fPreviouslyOverlaid.iterator();
+				Iterator<JavaMarkerAnnotation> e= fPreviouslyOverlaid.iterator();
 				while (e.hasNext()) {
-					JavaMarkerAnnotation annotation= (JavaMarkerAnnotation) e.next();
+					JavaMarkerAnnotation annotation= e.next();
 					annotation.setOverlay(null);
 				}
 			}
@@ -717,8 +720,8 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		private void  overlayMarkers(Position position, ProblemAnnotation problemAnnotation) {
 			Object value= getAnnotations(position);
 			if (value instanceof List) {
-				List list= (List) value;
-				for (Iterator e = list.iterator(); e.hasNext();)
+				List<?> list= (List<?>) value;
+				for (Iterator<?> e = list.iterator(); e.hasNext();)
 					setOverlay(e.next(), problemAnnotation);
 			} else {
 				setOverlay(value, problemAnnotation);
@@ -791,6 +794,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		/*
 		 * @see AnnotationModel#addAnnotation(Annotation, Position, boolean)
 		 */
+		@Override
 		protected void addAnnotation(Annotation annotation, Position position, boolean fireModelChanged) throws BadLocationException {
 			super.addAnnotation(annotation, position, fireModelChanged);
 
@@ -799,10 +803,11 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 				if (cached == null)
 					fReverseMap.put(position, annotation);
 				else if (cached instanceof List) {
-					List list= (List) cached;
+					@SuppressWarnings("unchecked")
+					List<Object> list= (List<Object>) cached;
 					list.add(annotation);
 				} else if (cached instanceof Annotation) {
-					List list= new ArrayList(2);
+					List<Object> list= new ArrayList<Object>(2);
 					list.add(cached);
 					list.add(annotation);
 					fReverseMap.put(position, list);
@@ -813,6 +818,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		/*
 		 * @see AnnotationModel#removeAllAnnotations(boolean)
 		 */
+		@Override
 		protected void removeAllAnnotations(boolean fireModelChanged) {
 			super.removeAllAnnotations(fireModelChanged);
 			synchronized (getLockObject()) {
@@ -823,12 +829,14 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		/*
 		 * @see AnnotationModel#removeAnnotation(Annotation, boolean)
 		 */
+		@Override
 		protected void removeAnnotation(Annotation annotation, boolean fireModelChanged) {
 			Position position= getPosition(annotation);
 			synchronized (getLockObject()) {
 				Object cached= fReverseMap.get(position);
 				if (cached instanceof List) {
-					List list= (List) cached;
+					@SuppressWarnings("unchecked")
+					List<Object> list= (List<Object>) cached;
 					list.remove(annotation);
 					if (list.size() == 1) {
 						fReverseMap.put(position, list.get(0));
@@ -901,7 +909,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	 * Element information of all connected elements with a fake CU but no file info.
 	 * @since 3.2
 	 */
-	private final Map fFakeCUMapForMissingInfo= new HashMap();
+	private final Map<Object, CompilationUnitInfo> fFakeCUMapForMissingInfo= new HashMap<Object, CompilationUnitInfo>();
 
 
 	/**
@@ -939,6 +947,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	/*
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createEmptyFileInfo()
 	 */
+	@Override
 	protected FileInfo createEmptyFileInfo() {
 		return new CompilationUnitInfo();
 	}
@@ -957,6 +966,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	/*
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createFileInfo(java.lang.Object)
 	 */
+	@Override
 	protected FileInfo createFileInfo(Object element) throws CoreException {
 		ICompilationUnit original= null;
 		if (element instanceof IFileEditorInput) {
@@ -1045,6 +1055,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 				 * @see org.eclipse.jdt.core.WorkingCopyOwner#createBuffer(org.eclipse.jdt.core.ICompilationUnit)
 				 * @since 3.2
 				 */
+				@Override
 				public IBuffer createBuffer(ICompilationUnit workingCopy) {
 					return new DocumentAdapter(workingCopy, documentPath);
 				}
@@ -1148,6 +1159,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 				 * @see org.eclipse.jdt.core.WorkingCopyOwner#createBuffer(org.eclipse.jdt.core.ICompilationUnit)
 				 * @since 3.2
 				 */
+				@Override
 				public IBuffer createBuffer(ICompilationUnit workingCopy) {
 					return new DocumentAdapter(workingCopy, fileStore, path);
 				}
@@ -1205,6 +1217,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
     /*
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#disposeFileInfo(java.lang.Object, org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo)
 	 */
+	@Override
 	protected void disposeFileInfo(Object element, FileInfo info) {
 		if (info instanceof CompilationUnitInfo) {
 			CompilationUnitInfo cuInfo= (CompilationUnitInfo) info;
@@ -1225,12 +1238,13 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#connect(java.lang.Object)
 	 * @since 3.2
 	 */
+	@Override
 	public void connect(Object element) throws CoreException {
 		super.connect(element);
 		if (getFileInfo(element) != null)
 			return;
 
-		CompilationUnitInfo info= (CompilationUnitInfo)fFakeCUMapForMissingInfo.get(element);
+		CompilationUnitInfo info= fFakeCUMapForMissingInfo.get(element);
 		if (info == null) {
 			ICompilationUnit cu= createFakeCompiltationUnit(element, true);
 			if (cu == null)
@@ -1248,12 +1262,13 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#getAnnotationModel(java.lang.Object)
 	 * @since 3.2
 	 */
+	@Override
 	public IAnnotationModel getAnnotationModel(Object element) {
 		IAnnotationModel model= super.getAnnotationModel(element);
 		if (model != null)
 			return model;
 
-		FileInfo info= (FileInfo)fFakeCUMapForMissingInfo.get(element);
+		FileInfo info= fFakeCUMapForMissingInfo.get(element);
 		if (info != null) {
 			if (info.fModel != null)
 				return info.fModel;
@@ -1268,8 +1283,9 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#disconnect(java.lang.Object)
 	 * @since 3.2
 	 */
+	@Override
 	public void disconnect(Object element) {
-		CompilationUnitInfo info= (CompilationUnitInfo)fFakeCUMapForMissingInfo.get(element);
+		CompilationUnitInfo info= fFakeCUMapForMissingInfo.get(element);
 		if (info != null)  {
 			if (info.fCount == 1) {
 				fFakeCUMapForMissingInfo.remove(element);
@@ -1406,6 +1422,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	/*
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createSaveOperation(java.lang.Object, org.eclipse.jface.text.IDocument, boolean)
 	 */
+	@Override
 	protected DocumentProviderOperation createSaveOperation(final Object element, final IDocument document, final boolean overwrite) throws CoreException {
 		final FileInfo info= getFileInfo(element);
 		if (info instanceof CompilationUnitInfo) {
@@ -1428,12 +1445,14 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 				/*
 				 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider.DocumentProviderOperation#execute(org.eclipse.core.runtime.IProgressMonitor)
 				 */
+				@Override
 				protected void execute(IProgressMonitor monitor) throws CoreException {
 					commitWorkingCopy(monitor, element, (CompilationUnitInfo) info, overwrite);
 				}
 				/*
 				 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider.DocumentProviderOperation#getSchedulingRule()
 				 */
+				@Override
 				public ISchedulingRule getSchedulingRule() {
 					if (info.fElement instanceof IFileEditorInput) {
 						IFile file= ((IFileEditorInput) info.fElement).getFile();
@@ -1462,8 +1481,8 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 		 */
 		protected void enableHandlingTemporaryProblems() {
 			boolean enable= isHandlingTemporaryProblems();
-			for (Iterator iter= getFileInfosIterator(); iter.hasNext();) {
-				FileInfo info= (FileInfo) iter.next();
+			for (Iterator<FileInfo> iter= getFileInfosIterator(); iter.hasNext();) {
+				FileInfo info= iter.next();
 				if (info.fModel instanceof IProblemRequestorExtension) {
 					IProblemRequestorExtension  extension= (IProblemRequestorExtension) info.fModel;
 					extension.setIsHandlingTemporaryProblems(enable);
@@ -1501,7 +1520,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 			CompilationUnitInfo info= (CompilationUnitInfo)fileInfo;
 			return info.fCopy;
 		}
-		CompilationUnitInfo cuInfo= (CompilationUnitInfo)fFakeCUMapForMissingInfo.get(element);
+		CompilationUnitInfo cuInfo= fFakeCUMapForMissingInfo.get(element);
 		if (cuInfo != null)
 			return cuInfo.fCopy;
 
@@ -1513,7 +1532,7 @@ public class CompilationUnitDocumentProvider extends TextFileDocumentProvider im
 	 */
 	public void shutdown() {
 		JavaPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyListener);
-		Iterator e= getConnectedElementsIterator();
+		Iterator<?> e= getConnectedElementsIterator();
 		while (e.hasNext())
 			disconnect(e.next());
 		fFakeCUMapForMissingInfo.clear();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
index aa63096..8ad2219 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,10 +73,10 @@ import org.eclipse.jface.text.formatter.IFormattingContext;
 import org.eclipse.jface.text.link.ILinkedModeListener;
 import org.eclipse.jface.text.link.LinkedModeModel;
 import org.eclipse.jface.text.link.LinkedModeUI;
-import org.eclipse.jface.text.link.LinkedPosition;
-import org.eclipse.jface.text.link.LinkedPositionGroup;
 import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags;
 import org.eclipse.jface.text.link.LinkedModeUI.IExitPolicy;
+import org.eclipse.jface.text.link.LinkedPosition;
+import org.eclipse.jface.text.link.LinkedPositionGroup;
 import org.eclipse.jface.text.source.IOverviewRuler;
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.text.source.IVerticalRuler;
@@ -171,6 +171,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		/*
 		 * @see ITextOperationTarget#doOperation(int)
 		 */
+		@Override
 		public void doOperation(int operation) {
 
 			if (getTextWidget() == null)
@@ -202,6 +203,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		/*
 		 * @see IWidgetTokenOwner#requestWidgetToken(IWidgetTokenKeeper)
 		 */
+		@Override
 		public boolean requestWidgetToken(IWidgetTokenKeeper requester) {
 			if (PlatformUI.getWorkbench().getHelpSystem().isContextHelpDisplayed())
 				return false;
@@ -212,6 +214,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		 * @see IWidgetTokenOwnerExtension#requestWidgetToken(IWidgetTokenKeeper, int)
 		 * @since 3.0
 		 */
+		@Override
 		public boolean requestWidgetToken(IWidgetTokenKeeper requester, int priority) {
 			if (PlatformUI.getWorkbench().getHelpSystem().isContextHelpDisplayed())
 				return false;
@@ -222,16 +225,17 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		 * @see org.eclipse.jface.text.source.SourceViewer#createFormattingContext()
 		 * @since 3.0
 		 */
+		@Override
 		public IFormattingContext createFormattingContext() {
 			IFormattingContext context= new JavaFormattingContext();
 
-			Map preferences;
+			Map<String, String> preferences;
 			IJavaElement inputJavaElement= getInputJavaElement();
 			IJavaProject javaProject= inputJavaElement != null ? inputJavaElement.getJavaProject() : null;
 			if (javaProject == null)
-				preferences= new HashMap(JavaCore.getOptions());
+				preferences= new HashMap<String, String>(JavaCore.getOptions());
 			else
-				preferences= new HashMap(javaProject.getOptions(true));
+				preferences= new HashMap<String, String>(javaProject.getOptions(true));
 
 			context.setProperty(FormattingContextProperties.CONTEXT_PREFERENCES, preferences);
 
@@ -244,10 +248,10 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 
 		final char fExitCharacter;
 		final char fEscapeCharacter;
-		final Stack fStack;
+		final Stack<BracketLevel> fStack;
 		final int fSize;
 
-		public ExitPolicy(char exitCharacter, char escapeCharacter, Stack stack) {
+		public ExitPolicy(char exitCharacter, char escapeCharacter, Stack<BracketLevel> stack) {
 			fExitCharacter= exitCharacter;
 			fEscapeCharacter= escapeCharacter;
 			fStack= stack;
@@ -261,7 +265,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 
 			if (fSize == fStack.size() && !isMasked(offset)) {
 				if (event.character == fExitCharacter) {
-					BracketLevel level= (BracketLevel) fStack.peek();
+					BracketLevel level= fStack.peek();
 					if (level.fFirstPosition.offset > offset || level.fSecondPosition.offset < offset)
 						return null;
 					if (level.fSecondPosition.offset == offset && length == 0)
@@ -381,7 +385,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		private boolean fCloseAngularBrackets= true;
 		private final String CATEGORY= toString();
 		private final IPositionUpdater fUpdater= new ExclusivePositionUpdater(CATEGORY);
-		private final Stack fBracketLevelStack= new Stack();
+		private final Stack<BracketLevel> fBracketLevelStack= new Stack<BracketLevel>();
 
 		public void setCloseBracketsEnabled(boolean enabled) {
 			fCloseBrackets= enabled;
@@ -395,6 +399,11 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 			fCloseAngularBrackets= enabled;
 		}
 
+		private boolean isTypeArgumentStart(String identifier) {
+			return identifier.length() > 0
+					&& Character.isUpperCase(identifier.charAt(0));
+		}
+		
 		private boolean isAngularIntroducer(String identifier) {
 			return identifier.length() > 0
 					&& (Character.isUpperCase(identifier.charAt(0))
@@ -463,6 +472,8 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 					case '<':
 						if (!(fCloseAngularBrackets && fCloseBrackets)
 								|| nextToken == Symbols.TokenLESSTHAN
+								|| nextToken == Symbols.TokenQUESTIONMARK
+								|| nextToken == Symbols.TokenIDENT && isTypeArgumentStart(next)
 								|| 		   prevToken != Symbols.TokenLBRACE
 										&& prevToken != Symbols.TokenRBRACE
 										&& prevToken != Symbols.TokenSEMICOLON
@@ -556,7 +567,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		 */
 		public void left(LinkedModeModel environment, int flags) {
 
-			final BracketLevel level= (BracketLevel) fBracketLevelStack.pop();
+			final BracketLevel level= fBracketLevelStack.pop();
 
 			if (flags != ILinkedModeListener.EXTERNAL_MODIFICATION)
 				return;
@@ -1032,6 +1043,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#createActions()
 	 */
+	@Override
 	protected void createActions() {
 
 		super.createActions();
@@ -1160,6 +1172,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see JavaEditor#getElementAt(int)
 	 */
+	@Override
 	protected IJavaElement getElementAt(int offset) {
 		return getElementAt(offset, true);
 	}
@@ -1174,6 +1187,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	 * @param reconcile <code>true</code> if working copy should be reconciled
 	 * @return the most narrow element which includes the given offset
 	 */
+	@Override
 	protected IJavaElement getElementAt(int offset, boolean reconcile) {
 		ICompilationUnit unit= (ICompilationUnit)getInputJavaElement();
 
@@ -1198,6 +1212,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see JavaEditor#getCorrespondingElement(IJavaElement)
 	 */
+	@Override
 	protected IJavaElement getCorrespondingElement(IJavaElement element) {
 		// XXX: With new working copy story: original == working copy.
 		// Note that the previous code could result in a reconcile as side effect. Should check if that
@@ -1208,6 +1223,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#editorContextMenuAboutToShow(IMenuManager)
 	 */
+	@Override
 	public void editorContextMenuAboutToShow(IMenuManager menu) {
 		super.editorContextMenuAboutToShow(menu);
 
@@ -1220,6 +1236,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#performSave(boolean, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void performSave(boolean overwrite, IProgressMonitor progressMonitor) {
 		IDocumentProvider p= getDocumentProvider();
 		if (p instanceof ICompilationUnitDocumentProvider) {
@@ -1239,6 +1256,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#doSave(IProgressMonitor)
 	 */
+	@Override
 	public void doSave(IProgressMonitor progressMonitor) {
 
 		IDocumentProvider p= getDocumentProvider();
@@ -1291,6 +1309,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#openSaveErrorDialog(java.lang.String, java.lang.String, org.eclipse.core.runtime.CoreException)
 	 * @since 3.3
 	 */
+	@Override
 	protected void openSaveErrorDialog(String title, String message, CoreException exception) {
 		IStatus status= exception.getStatus();
 		if (JavaUI.ID_PLUGIN.equals(status.getPlugin())
@@ -1332,6 +1351,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		IStatus status= exception.getStatus();
 		int mask= IStatus.WARNING | IStatus.ERROR;
 		ErrorDialog dialog= new ErrorDialog(getSite().getShell(), title, message, status, mask) {
+			@Override
 			protected Control createMessageArea(Composite parent) {
 				Control result= super.createMessageArea(parent);
 
@@ -1341,6 +1361,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 				link.setText(linkText);
 				link.setFont(parent.getFont());
 				link.addSelectionListener(new SelectionAdapter() {
+					@Override
 					public void widgetSelected(SelectionEvent e) {
 						if (hasProjectSettings)
 							PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, SaveParticipantPreferencePage.PROPERTY_PAGE_ID, null, null).open();
@@ -1353,6 +1374,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 
 				return result;
 			}
+			@Override
 			protected Image getImage() {
 				return getWarningImage();
 			}
@@ -1360,6 +1382,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		dialog.open();
 	}
 
+	@Override
 	public boolean isSaveAsAllowed() {
 		return true;
 	}
@@ -1367,6 +1390,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#doSetInput(IEditorInput)
 	 */
+	@Override
 	protected void doSetInput(IEditorInput input) throws CoreException {
 		super.doSetInput(input);
 		configureToggleCommentAction();
@@ -1378,6 +1402,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#installOverrideIndicator(boolean)
 	 * @since 3.0
 	 */
+	@Override
 	protected void installOverrideIndicator(boolean provideAST) {
 		super.installOverrideIndicator(provideAST);
 
@@ -1391,6 +1416,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#uninstallOverrideIndicator()
 	 * @since 3.0
 	 */
+	@Override
 	protected void uninstallOverrideIndicator() {
 		if (fOverrideIndicatorManager != null)
 			removeReconcileListener(fOverrideIndicatorManager);
@@ -1415,6 +1441,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#installTabsToSpacesConverter()
 	 * @since 3.3
 	 */
+	@Override
 	protected void installTabsToSpacesConverter() {
 		ISourceViewer sourceViewer= getSourceViewer();
 		SourceViewerConfiguration config= getSourceViewerConfiguration();
@@ -1437,6 +1464,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#isTabsToSpacesConversionEnabled()
 	 * @since 3.3
 	 */
+	@Override
 	protected boolean isTabsToSpacesConversionEnabled() {
 		IJavaElement element= getInputJavaElement();
 		IJavaProject project= element == null ? null : element.getJavaProject();
@@ -1448,6 +1476,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 		return JavaCore.SPACE.equals(option);
 	}
 
+	@Override
 	public void dispose() {
 
 		ISourceViewer sourceViewer= getSourceViewer();
@@ -1470,6 +1499,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#createPartControl(Composite)
 	 */
+	@Override
 	public void createPartControl(Composite parent) {
 
 		super.createPartControl(parent);
@@ -1535,6 +1565,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#handlePreferenceStoreChanged(PropertyChangeEvent)
 	 */
+	@Override
 	protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
 
 		try {
@@ -1593,6 +1624,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#createJavaSourceViewer(org.eclipse.swt.widgets.Composite, org.eclipse.jface.text.source.IVerticalRuler, org.eclipse.jface.text.source.IOverviewRuler, boolean, int)
 	 */
+	@Override
 	protected ISourceViewer createJavaSourceViewer(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler, boolean isOverviewRulerVisible, int styles, IPreferenceStore store) {
 		return new AdaptedSourceViewer(parent, verticalRuler, overviewRuler, isOverviewRulerVisible, styles, store);
 	}
@@ -1688,6 +1720,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#rememberSelection()
 	 */
+	@Override
 	protected void rememberSelection() {
 		fRememberedSelection.remember();
 	}
@@ -1695,6 +1728,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#restoreSelection()
 	 */
+	@Override
 	protected void restoreSelection() {
 		fRememberedSelection.restore();
 	}
@@ -1702,6 +1736,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see AbstractTextEditor#canHandleMove(IEditorInput, IEditorInput)
 	 */
+	@Override
 	protected boolean canHandleMove(IEditorInput originalElement, IEditorInput movedElement) {
 
 		String oldExtension= ""; //$NON-NLS-1$
@@ -1727,6 +1762,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class required) {
 		if (SmartBackspaceManager.class.equals(required)) {
 			if (getSourceViewer() instanceof JavaSourceViewer) {
@@ -1769,6 +1805,7 @@ public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilin
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#createNavigationActions()
 	 */
+	@Override
 	protected void createNavigationActions() {
 		super.createNavigationActions();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditorActionContributor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditorActionContributor.java
index 34eb4e9..0eea28c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditorActionContributor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditorActionContributor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class CompilationUnitEditorActionContributor extends BasicCompilationUnit
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.BasicEditorActionContributor#contributeToMenu(org.eclipse.jface.action.IMenuManager)
 	 */
+	@Override
 	public void contributeToMenu(IMenuManager menu) {
 		super.contributeToMenu(menu);
 
@@ -56,6 +57,7 @@ public class CompilationUnitEditorActionContributor extends BasicCompilationUnit
 	/*
 	 * @see IEditorActionBarContributor#setActiveEditor(IEditorPart)
 	 */
+	@Override
 	public void setActiveEditor(IEditorPart part) {
 		super.setActiveEditor(part);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ConstructedJavaEditorMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ConstructedJavaEditorMessages.properties
index 4eee6fb..994dfb4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ConstructedJavaEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ConstructedJavaEditorMessages.properties
@@ -52,6 +52,9 @@ ToggleMarkOccurrencesAction.tooltip= Toggle Mark Occurrences
 ToggleBreadcrumbAction.label= Toggle Breadcrumb
 ToggleBreadcrumbAction.tooltip= Toggle Breadcrumb
 
+ToggleBreadcrumbAction.Hide.label= H&ide Breadcrumb
+ToggleBreadcrumbAction.Hide.tooltip= Hide Breadcrumb
+
 GotoBreadcrumb.label= Show in &Breadcrumb
 GotoBreadcrumb.tooltip=Set the focus into the editor breadcrumb
 GotoBreadcrumb.description=Set the focus into the editor breadcrumb
@@ -184,23 +187,6 @@ Editor.ChangeEncodingAction.image=
 Editor.ChangeEncodingAction.description= Set Encoding
 Editor.ChangeEncodingAction.dialog.title= Set Encoding
 
-Editor.ConvertLineDelimiters.label=C&onvert Line Delimiters To
-
-Editor.ConvertToWindows.label=&Windows
-Editor.ConvertToWindows.tooltip=Converts Line Delimiters to Windows
-Editor.ConvertToWindows.image=
-Editor.ConvertToWindows.description=Converts line delimiters to Windows
-
-Editor.ConvertToUNIX.label=&UNIX
-Editor.ConvertToUNIX.tooltip=Converts Line Delimiters to UNIX
-Editor.ConvertToUNIX.image=
-Editor.ConvertToUNIX.description=Converts line delimiters to UNIX
-
-Editor.ConvertToMac.label=&Mac
-Editor.ConvertToMac.tooltip=Converts line delimiters to Mac
-Editor.ConvertToMac.image=
-Editor.ConvertToMac.description=Converts line delimiters to Mac
-
 Indent.label=Correct &Indentation
 Indent.tooltip=&Indent Current Line to Correct Indentation
 Indent.description=&Indents the current line or selection depending on surrounding source code
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/DocumentAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/DocumentAdapter.java
index 26a13c1..1e3f120 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/DocumentAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/DocumentAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -202,9 +202,9 @@ public class DocumentAdapter implements IBuffer, IDocumentListener, ITextEditCap
 	private DocumentReplaceCommand fReplaceCmd= new DocumentReplaceCommand();
 	private ApplyTextEditCommand fTextEditCmd= new ApplyTextEditCommand();
 
-	private Set fLegalLineDelimiters;
+	private Set<String> fLegalLineDelimiters;
 
-	private List fBufferListeners= new ArrayList(3);
+	private List<IBufferChangedListener> fBufferListeners= new ArrayList<IBufferChangedListener>(3);
 
 	/** @since 3.2 */
 	private IPath fPath;
@@ -510,7 +510,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener, ITextEditCap
 
 		if (fLegalLineDelimiters == null) {
 			// collect all line delimiters in the document
-			HashSet existingDelimiters= new HashSet();
+			HashSet<String> existingDelimiters= new HashSet<String>();
 
 			for (int i= fDocument.getNumberOfLines() - 1; i >= 0; i-- ) {
 				try {
@@ -571,9 +571,9 @@ public class DocumentAdapter implements IBuffer, IDocumentListener, ITextEditCap
 
 	private void fireBufferChanged(BufferChangedEvent event) {
 		if (fBufferListeners != null && fBufferListeners.size() > 0) {
-			Iterator e= new ArrayList(fBufferListeners).iterator();
+			Iterator<IBufferChangedListener> e= new ArrayList<IBufferChangedListener>(fBufferListeners).iterator();
 			while (e.hasNext())
-				((IBufferChangedListener) e.next()).bufferChanged(event);
+				e.next().bufferChanged(event);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java
index bf43eb7..4d1dffc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/EditorUtility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -80,16 +80,12 @@ import org.eclipse.compare.rangedifferencer.IRangeComparator;
 import org.eclipse.compare.rangedifferencer.RangeDifference;
 import org.eclipse.compare.rangedifferencer.RangeDifferencer;
 
-import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.IClassFile;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.ILocalVariable;
-import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
@@ -259,16 +255,9 @@ public class EditorUtility {
 				return;
 			else if (element instanceof IClassFile)
 				return;
-			else if (element instanceof ILocalVariable)
-				range= ((ILocalVariable)element).getNameRange();
-			else if (element instanceof IMember)
-				range= ((IMember)element).getNameRange();
-			else if (element instanceof ITypeParameter)
-				range= ((ITypeParameter)element).getNameRange();
-			else if (element instanceof IAnnotation)
-				range= ((IAnnotation)element).getNameRange();
-			else if (element instanceof ISourceReference)
-				range= ((ISourceReference)element).getSourceRange();
+
+			if (element instanceof ISourceReference)
+				range= ((ISourceReference)element).getNameRange();
 
 			if (range != null)
 				revealInEditor(part, range.getOffset(), range.getLength());
@@ -310,6 +299,7 @@ public class EditorUtility {
 			final IEditorInput input= editor.getEditorInput();
 			if (input instanceof IFileEditorInput) {
 				WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+					@Override
 					protected void execute(IProgressMonitor monitor) throws CoreException {
 						IMarker marker= null;
 						try {
@@ -600,8 +590,8 @@ public class EditorUtility {
 	 * @since 3.4
 	 */
 	public static IEditorPart[] getDirtyEditors(boolean skipNonResourceEditors) {
-		Set inputs= new HashSet();
-		List result= new ArrayList(0);
+		Set<IEditorInput> inputs= new HashSet<IEditorInput>();
+		List<IEditorPart> result= new ArrayList<IEditorPart>(0);
 		IWorkbench workbench= PlatformUI.getWorkbench();
 		IWorkbenchWindow[] windows= workbench.getWorkbenchWindows();
 		for (int i= 0; i < windows.length; i++) {
@@ -619,7 +609,7 @@ public class EditorUtility {
 				}
 			}
 		}
-		return (IEditorPart[])result.toArray(new IEditorPart[result.size()]);
+		return result.toArray(new IEditorPart[result.size()]);
 	}
 
 	private static boolean isResourceEditorInput(IEditorInput input) {
@@ -646,8 +636,8 @@ public class EditorUtility {
 	 * @since 3.3
 	 */
 	public static IEditorPart[] getDirtyEditorsToSave(boolean saveUnknownEditors) {
-		Set inputs= new HashSet();
-		List result= new ArrayList(0);
+		Set<IEditorInput> inputs= new HashSet<IEditorInput>();
+		List<IEditorPart> result= new ArrayList<IEditorPart>(0);
 		IWorkbench workbench= PlatformUI.getWorkbench();
 		IWorkbenchWindow[] windows= workbench.getWorkbenchWindows();
 		for (int i= 0; i < windows.length; i++) {
@@ -665,7 +655,7 @@ public class EditorUtility {
 				}
 			}
 		}
-		return (IEditorPart[])result.toArray(new IEditorPart[result.size()]);
+		return result.toArray(new IEditorPart[result.size()]);
 	}
 
 	/*
@@ -781,7 +771,7 @@ public class EditorUtility {
 					//2. Successive changed lines are merged into on RangeDifference
 					//     forAll r1,r2 element differences: r1.rightStart()<r2.rightStart() -> r1.rightEnd()<r2.rightStart
 
-					ArrayList regions= new ArrayList();
+					ArrayList<IRegion> regions= new ArrayList<IRegion>();
 					for (int i= 0; i < differences.length; i++) {
 						RangeDifference curr= differences[i];
 						if (curr.kind() == RangeDifference.CHANGE && curr.rightLength() > 0) {
@@ -800,7 +790,7 @@ public class EditorUtility {
 						}
 					}
 
-					return (IRegion[]) regions.toArray(new IRegion[regions.size()]);
+					return regions.toArray(new IRegion[regions.size()]);
 				}
 			});
 		} finally {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ExternalClassFileEditorInput.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ExternalClassFileEditorInput.java
index 1387325..fd15057 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ExternalClassFileEditorInput.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ExternalClassFileEditorInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class ExternalClassFileEditorInput extends FileEditorInput implements ICl
 	/*
 	 * @see IAdaptable#getAdapter(Class)
 	 */
+	@Override
 	public Object getAdapter(Class adapter) {
 		if (adapter == IClassFile.class)
 			return fClassFile;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/GotoMatchingBracketAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/GotoMatchingBracketAction.java
index e610c8c..fd00883 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/GotoMatchingBracketAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/GotoMatchingBracketAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class GotoMatchingBracketAction extends Action {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.GOTO_MATCHING_BRACKET_ACTION);
 	}
 
+	@Override
 	public void run() {
 		fEditor.gotoMatchingBracket();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/IJavaAnnotation.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/IJavaAnnotation.java
index 3bde298..872c5ec 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/IJavaAnnotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/IJavaAnnotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,7 +78,7 @@ public interface IJavaAnnotation {
 	 *
 	 * @return an iterator over the overlaid annotations
 	 */
-	Iterator getOverlaidIterator();
+	Iterator<IJavaAnnotation> getOverlaidIterator();
 
 	/**
 	 * Adds the given annotation to the list of
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java
index 06ec8dd..5d09e88 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/InternalClassFileEditorInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class InternalClassFileEditorInput implements IClassFileEditorInput, IPer
 	/*
 	 * @see Object#equals(Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
@@ -49,6 +50,7 @@ public class InternalClassFileEditorInput implements IClassFileEditorInput, IPer
 	/*
 	 * @see Object#hashCode
 	 */
+	@Override
 	public int hashCode() {
 		return fClassFile.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JarEntryEditorInput.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JarEntryEditorInput.java
index b1bc39c..b717686 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JarEntryEditorInput.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JarEntryEditorInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class JarEntryEditorInput implements IStorageEditorInput {
 		fJarEntryFile= jarEntryFile;
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
@@ -52,6 +53,7 @@ public class JarEntryEditorInput implements IStorageEditorInput {
 		return fJarEntryFile.equals(other.fJarEntryFile);
 	}
 
+	@Override
 	public int hashCode() {
 		return fJarEntryFile.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaAnnotationIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaAnnotationIterator.java
index 507c1bd..152dff5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaAnnotationIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaAnnotationIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,9 +24,9 @@ import org.eclipse.ui.texteditor.MarkerAnnotation;
 /**
  * Filters problems based on their types.
  */
-public class JavaAnnotationIterator implements Iterator {
+public class JavaAnnotationIterator implements Iterator<Annotation> {
 
-	private Iterator fIterator;
+	private Iterator<Annotation> fIterator;
 	private Annotation fNext;
 	private boolean fReturnAllAnnotations;
 
@@ -36,7 +36,7 @@ public class JavaAnnotationIterator implements Iterator {
 	 * @param parent the parent iterator to iterate over annotations
 	 * @param returnAllAnnotations whether to return all annotations or just problem annotations
 	 */
-	public JavaAnnotationIterator(Iterator parent, boolean returnAllAnnotations) {
+	public JavaAnnotationIterator(Iterator<Annotation> parent, boolean returnAllAnnotations) {
 		fReturnAllAnnotations= returnAllAnnotations;
 		fIterator= parent;
 		skip();
@@ -44,7 +44,7 @@ public class JavaAnnotationIterator implements Iterator {
 
 	private void skip() {
 		while (fIterator.hasNext()) {
-			Annotation next= (Annotation) fIterator.next();
+			Annotation next= fIterator.next();
 
 			if (next.isMarkedDeleted())
 				continue;
@@ -77,7 +77,7 @@ public class JavaAnnotationIterator implements Iterator {
 	/*
 	 * @see Iterator#next()
 	 */
-	public Object next() {
+	public Annotation next() {
 		try {
 			return fNext;
 		} finally {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
index fa8f414..de0d07b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import com.ibm.icu.text.BreakIterator;
 
@@ -167,8 +168,6 @@ import org.eclipse.jdt.core.IImportDeclaration;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.ILocalVariable;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.IPackageDeclaration;
 import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.ISourceReference;
 import org.eclipse.jdt.core.ITypeParameter;
@@ -218,10 +217,10 @@ import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSelectio
 import org.eclipse.jdt.internal.ui.search.BreakContinueTargetFinder;
 import org.eclipse.jdt.internal.ui.search.ExceptionOccurrencesFinder;
 import org.eclipse.jdt.internal.ui.search.IOccurrencesFinder;
+import org.eclipse.jdt.internal.ui.search.IOccurrencesFinder.OccurrenceLocation;
 import org.eclipse.jdt.internal.ui.search.ImplementOccurrencesFinder;
 import org.eclipse.jdt.internal.ui.search.MethodExitsFinder;
 import org.eclipse.jdt.internal.ui.search.OccurrencesFinder;
-import org.eclipse.jdt.internal.ui.search.IOccurrencesFinder.OccurrenceLocation;
 import org.eclipse.jdt.internal.ui.text.DocumentCharacterIterator;
 import org.eclipse.jdt.internal.ui.text.JavaChangeHover;
 import org.eclipse.jdt.internal.ui.text.JavaPairMatcher;
@@ -230,6 +229,7 @@ import org.eclipse.jdt.internal.ui.text.JavaWordIterator;
 import org.eclipse.jdt.internal.ui.text.PreferencesAdapter;
 import org.eclipse.jdt.internal.ui.text.java.hover.JavaExpandHover;
 import org.eclipse.jdt.internal.ui.text.java.hover.SourceViewerInformationControl;
+import org.eclipse.jdt.internal.ui.util.ElementValidator;
 import org.eclipse.jdt.internal.ui.util.JavaUIHelp;
 import org.eclipse.jdt.internal.ui.viewsupport.ISelectionListenerWithAST;
 import org.eclipse.jdt.internal.ui.viewsupport.IViewPartInputProvider;
@@ -698,6 +698,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.ui.texteditor.AbstractTextEditor.LineStartAction#getLineStartPosition(java.lang.String, int, java.lang.String)
 		 */
+		@Override
 		protected int getLineStartPosition(final IDocument document, final String line, final int length, final int offset) {
 
 			String type= IDocument.DEFAULT_CONTENT_TYPE;
@@ -747,6 +748,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.action.IAction#run()
 		 */
+		@Override
 		public void run() {
 			// Check whether we are in a java code partition and the preference is enabled
 			final IPreferenceStore store= getPreferenceStore();
@@ -838,6 +840,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
 		 */
+		@Override
 		protected void setCaretPosition(final int position) {
 			getTextWidget().setCaretOffset(modelOffset2WidgetOffset(getSourceViewer(), position));
 		}
@@ -860,6 +863,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
 		 */
+		@Override
 		protected void setCaretPosition(final int position) {
 			if (!validateEditorInputState())
 				return;
@@ -920,6 +924,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
 		 */
+		@Override
 		protected void setCaretPosition(final int position) {
 			final ISourceViewer viewer= getSourceViewer();
 
@@ -959,6 +964,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.action.IAction#run()
 		 */
+		@Override
 		public void run() {
 			// Check whether we are in a java code partition and the preference is enabled
 			final IPreferenceStore store= getPreferenceStore();
@@ -1051,6 +1057,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
 		 */
+		@Override
 		protected void setCaretPosition(final int position) {
 			getTextWidget().setCaretOffset(modelOffset2WidgetOffset(getSourceViewer(), position));
 		}
@@ -1073,6 +1080,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
 		 */
+		@Override
 		protected void setCaretPosition(int position) {
 			if (!validateEditorInputState())
 				return;
@@ -1132,6 +1140,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
 		 */
+		@Override
 		protected void setCaretPosition(final int position) {
 			final ISourceViewer viewer= getSourceViewer();
 
@@ -1174,16 +1183,19 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		 * @since 3.2
 		 */
 		FormatElementAction() {
+			setText(JavaEditorMessages.JavaEditor_FormatElementAction_label);
+			setDescription(JavaEditorMessages.JavaEditor_FormatElementAction_description);
 			setEnabled(isEditorInputModifiable());
 		}
 
 		/*
 		 * @see org.eclipse.jface.action.IAction#run()
 		 */
+		@Override
 		public void run() {
 
 			final JavaSourceViewer viewer= (JavaSourceViewer) getSourceViewer();
-			if (viewer.isEditable()) {
+			if (viewer.isEditable() && ElementValidator.check(getInputJavaElement(), getSite().getShell(), JavaEditorMessages.JavaEditor_FormatElementDialog_label, true)) {
 
 				final Point selection= viewer.rememberSelection();
 				try {
@@ -1199,7 +1211,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 							return;
 						}
 					}
-					final IJavaElement element= emptySelection ? getElementAt(selection.x, true) : null;
+					final IJavaElement element= getElementAt(selection.x, true);
 					if (element != null && element.exists()) {
 						try {
 							final int kind= element.getElementType();
@@ -1207,18 +1219,17 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 
 								final ISourceReference reference= (ISourceReference) element;
 								final ISourceRange range= reference.getSourceRange();
-
-								if (range != null) {
+								final ISourceRange nameRange= reference.getNameRange();
+								final boolean seletionInNameRange= nameRange != null && selection.x >= nameRange.getOffset()
+										&& selection.x + selection.y <= nameRange.getOffset() + nameRange.getLength();
+								if (range != null && (emptySelection || seletionInNameRange))
 									viewer.setSelectedRange(range.getOffset(), range.getLength());
-									viewer.doOperation(ISourceViewer.FORMAT);
-								}
 							}
 						} catch (JavaModelException exception) {
 							// Should not happen
 						}
-					} else {
-						viewer.doOperation(ISourceViewer.FORMAT);
 					}
+					viewer.doOperation(ISourceViewer.FORMAT);
 				} catch (BadLocationException e) {
 					// Cannot happen
 				} finally {
@@ -1396,6 +1407,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(ISelectionChangedListener)
 		 */
+		@Override
 		public void addSelectionChangedListener(ISelectionChangedListener listener) {
 			super.addSelectionChangedListener(listener);
 			if (getSourceViewer() != null)
@@ -1405,6 +1417,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
 		 */
+		@Override
 		public ISelection getSelection() {
 			if (fInvalidSelection != null)
 				return fInvalidSelection;
@@ -1414,6 +1427,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(ISelectionChangedListener)
 		 */
+		@Override
 		public void removeSelectionChangedListener(ISelectionChangedListener listener) {
 			super.removeSelectionChangedListener(listener);
 			if (getSourceViewer() != null)
@@ -1423,6 +1437,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(ISelection)
 		 */
+		@Override
 		public void setSelection(ISelection selection) {
 			if (selection instanceof ITextSelection) {
 				if (fInvalidSelection != null) {
@@ -1447,6 +1462,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.text.IPostSelectionProvider#addPostSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
 		 */
+		@Override
 		public void addPostSelectionChangedListener(ISelectionChangedListener listener) {
 			super.addPostSelectionChangedListener(listener);
 			if (getSourceViewer() != null && getSourceViewer().getSelectionProvider() instanceof IPostSelectionProvider)
@@ -1456,6 +1472,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.text.IPostSelectionProvider#removePostSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
 		 */
+		@Override
 		public void removePostSelectionChangedListener(ISelectionChangedListener listener) {
 			super.removePostSelectionChangedListener(listener);
 			if (getSourceViewer() != null)
@@ -1465,6 +1482,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see org.eclipse.jface.text.IPostSelectionValidator#isValid()
 		 */
+		@Override
 		public boolean isValid(ISelection postSelection) {
 			return fInvalidSelection == null && super.isValid(postSelection);
 		}
@@ -1543,6 +1561,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	protected AbstractSelectionChangedListener fOutlineSelectionChangedListener= new AbstractSelectionChangedListener() {
 		public void selectionChanged(SelectionChangedEvent event) {
 		}
+		@Override
 		public void install(ISelectionProvider selectionProvider) {
 		}
 	};
@@ -1788,6 +1807,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#initializeKeyBindingScopes()
 	 */
+	@Override
 	protected void initializeKeyBindingScopes() {
 		setKeyBindingScopes(new String[] { "org.eclipse.jdt.ui.javaEditorScope" });  //$NON-NLS-1$
 	}
@@ -1795,6 +1815,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#initializeEditor()
 	 */
+	@Override
 	protected void initializeEditor() {
 	}
 
@@ -1812,6 +1833,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see AbstractTextEditor#createSourceViewer(Composite, IVerticalRuler, int)
 	 */
+	@Override
 	protected final ISourceViewer createSourceViewer(Composite parent, IVerticalRuler verticalRuler, int styles) {
 
 		Composite composite= new Composite(parent, SWT.NONE);
@@ -1857,9 +1879,9 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 			fProjectionSupport= new ProjectionSupport((ProjectionViewer)sourceViewer, getAnnotationAccess(), getSharedColors());
 			MarkerAnnotationPreferences markerAnnotationPreferences= (MarkerAnnotationPreferences)getAdapter(MarkerAnnotationPreferences.class);
 			if (markerAnnotationPreferences != null) {
-				Iterator e= markerAnnotationPreferences.getAnnotationPreferences().iterator();
+				Iterator<AnnotationPreference> e= markerAnnotationPreferences.getAnnotationPreferences().iterator();
 				while (e.hasNext()) {
-					AnnotationPreference annotationPreference= (AnnotationPreference)e.next();
+					AnnotationPreference annotationPreference= e.next();
 					Object annotationType= annotationPreference.getAnnotationType();
 					if (annotationType instanceof String)
 						fProjectionSupport.addSummarizableAnnotationType((String)annotationType);
@@ -1986,7 +2008,10 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	}
 
 	/**
-	 * @return the source viewer used by this editor
+	 * Returns the editor's source viewer. May return <code>null</code> before
+	 * the editor's part has been created and after disposal.
+	 *
+	 * @return the editor's source viewer, which may be <code>null</code>
 	 */
 	public final ISourceViewer getViewer() {
 		return getSourceViewer();
@@ -2012,6 +2037,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent)
 	 */
+	@Override
 	protected boolean affectsTextPresentation(PropertyChangeEvent event) {
 		return ((JavaSourceViewerConfiguration)getSourceViewerConfiguration()).affectsTextPresentation(event) || super.affectsTextPresentation(event);
 	}
@@ -2025,7 +2051,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @since 3.0
 	 */
 	private IPreferenceStore createCombinedPreferenceStore(IEditorInput input) {
-		List stores= new ArrayList(3);
+		List<IPreferenceStore> stores= new ArrayList<IPreferenceStore>(3);
 
 		IJavaProject project= EditorUtility.getJavaProject(input);
 		if (project != null) {
@@ -2033,11 +2059,11 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		}
 
 		stores.add(JavaPlugin.getDefault().getPreferenceStore());
-		stores.add(new PreferencesAdapter(JavaCore.getPlugin().getPluginPreferences()));
+		stores.add(new PreferencesAdapter(JavaPlugin.getJavaCorePluginPreferences()));
 		stores.add(EditorsUI.getPreferenceStore());
 		stores.add(PlatformUI.getPreferenceStore());
 
-		return new ChainedPreferenceStore((IPreferenceStore[]) stores.toArray(new IPreferenceStore[stores.size()]));
+		return new ChainedPreferenceStore(stores.toArray(new IPreferenceStore[stores.size()]));
 	}
 
 	/**
@@ -2061,6 +2087,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see AbstractTextEditor#editorContextMenuAboutToShow
 	 */
+	@Override
 	public void editorContextMenuAboutToShow(IMenuManager menu) {
 
 		super.editorContextMenuAboutToShow(menu);
@@ -2145,6 +2172,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see AbstractTextEditor#getAdapter(Class)
 	 */
+	@Override
 	public Object getAdapter(Class required) {
 
 		if (IContentOutlinePage.class.equals(required)) {
@@ -2177,6 +2205,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 						 * @see org.eclipse.ui.part.ShowInContext#getInput()
 						 * @since 3.4
 						 */
+						@Override
 						public Object getInput() {
 							if (isBreadcrumbActive())
 								return null;
@@ -2188,6 +2217,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 						 * @see org.eclipse.ui.part.ShowInContext#getSelection()
 						 * @since 3.3
 						 */
+						@Override
 						public ISelection getSelection() {
 							if (isBreadcrumbActive())
 								return getBreadcrumb().getSelectionProvider().getSelection();
@@ -2296,61 +2326,10 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 				offset= -1;
 				length= -1;
 
-				if (reference instanceof IMember) {
-					range= ((IMember) reference).getNameRange();
-					if (range != null) {
-						offset= range.getOffset();
-						length= range.getLength();
-					}
-				} else if (reference instanceof ITypeParameter) {
-					range= ((ITypeParameter) reference).getNameRange();
-					if (range != null) {
-						offset= range.getOffset();
-						length= range.getLength();
-					}
-				} else if (reference instanceof ILocalVariable) {
-					range= ((ILocalVariable)reference).getNameRange();
-					if (range != null) {
-						offset= range.getOffset();
-						length= range.getLength();
-					}
-				} else if (reference instanceof IAnnotation) {
-					range= ((IAnnotation)reference).getNameRange();
-					if (range != null) {
-						offset= range.getOffset();
-						length= range.getLength();
-					}
-				} else if (reference instanceof IImportDeclaration) {
-					String content= reference.getSource();
-					if (content != null) {
-						int start= content.indexOf("import") + 6; //$NON-NLS-1$
-						while (start < content.length() && content.charAt(start) == ' ')
-							start++;
-
-						int end= content.indexOf(';');
-						do {
-							end--;
-						} while (end >= 0 && content.charAt(end) == ' ');
-
-						offset= range.getOffset() + start;
-						length= end - start + 1;
-					} else {
-						// fallback
-						offset= range.getOffset();
-						length= range.getLength();
-					}
-				} else if (reference instanceof IPackageDeclaration) {
-					String name= ((IPackageDeclaration) reference).getElementName();
-					if (name != null && name.length() > 0) {
-						String content= reference.getSource();
-						if (content != null) {
-							int packageKeyWordIndex = content.lastIndexOf("package"); //$NON-NLS-1$
-							if (packageKeyWordIndex != -1) {
-								offset= range.getOffset() + content.indexOf(name, packageKeyWordIndex + 7);
-								length= name.length();
-							}
-						}
-					}
+				range= reference.getNameRange();
+				if (range != null) {
+					offset= range.getOffset();
+					length= range.getLength();
 				}
 
 				if (offset > -1 && length > 0) {
@@ -2379,6 +2358,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#setFocus()
 	 */
+	@Override
 	public void setFocus() {
 		if (fBreadcrumb != null && fBreadcrumb.isActive()) {
 			fBreadcrumb.activate();
@@ -2414,7 +2394,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 
 		ISourceReference reference= null;
 
-		Iterator iter= ((IStructuredSelection) selection).iterator();
+		Iterator<?> iter= ((IStructuredSelection) selection).iterator();
 		while (iter.hasNext()) {
 			Object o= iter.next();
 			if (o instanceof ISourceReference) {
@@ -2450,6 +2430,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see AbstractTextEditor#adjustHighlightRange(int, int)
 	 */
+	@Override
 	protected void adjustHighlightRange(int offset, int length) {
 
 		try {
@@ -2508,6 +2489,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see StatusTextEditor#getStatusHeader(IStatus)
 	 */
+	@Override
 	protected String getStatusHeader(IStatus status) {
 		if (fEncodingSupport != null) {
 			String message= fEncodingSupport.getStatusHeader(status);
@@ -2520,6 +2502,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see StatusTextEditor#getStatusBanner(IStatus)
 	 */
+	@Override
 	protected String getStatusBanner(IStatus status) {
 		if (fEncodingSupport != null) {
 			String message= fEncodingSupport.getStatusBanner(status);
@@ -2532,6 +2515,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see StatusTextEditor#getStatusMessage(IStatus)
 	 */
+	@Override
 	protected String getStatusMessage(IStatus status) {
 		if (fEncodingSupport != null) {
 			String message= fEncodingSupport.getStatusMessage(status);
@@ -2544,6 +2528,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see AbstractTextEditor#doSetInput
 	 */
+	@Override
 	protected void doSetInput(IEditorInput input) throws CoreException {
 		ISourceViewer sourceViewer= getSourceViewer();
 		if (!(sourceViewer instanceof ISourceViewerExtension2)) {
@@ -2598,6 +2583,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#setPreferenceStore(org.eclipse.jface.preference.IPreferenceStore)
 	 * @since 3.0
 	 */
+	@Override
 	protected void setPreferenceStore(IPreferenceStore store) {
 		super.setPreferenceStore(store);
 		SourceViewerConfiguration sourceViewerConfiguration= getSourceViewerConfiguration();
@@ -2625,6 +2611,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see IWorkbenchPart#dispose()
 	 */
+	@Override
 	public void dispose() {
 
 		if (fProjectionModelUpdater != null) {
@@ -2684,6 +2671,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		fSelectionProvider= null;
 	}
 
+	@Override
 	protected void createActions() {
 		installEncodingSupport();
 
@@ -2844,6 +2832,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see AbstractTextEditor#handlePreferenceStoreChanged(PropertyChangeEvent)
 	 */
+	@Override
 	protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
 
 		final String property= event.getProperty();
@@ -3020,6 +3009,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @param viewer the viewer to be initialized
 	 * @since 3.0
 	 */
+	@Override
 	protected void initializeViewerColors(ISourceViewer viewer) {
 		// is handled by JavaSourceViewer
 	}
@@ -3031,6 +3021,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#updatePropertyDependentActions()
 	 */
+	@Override
 	protected void updatePropertyDependentActions() {
 		super.updatePropertyDependentActions();
 		if (fEncodingSupport != null)
@@ -3080,6 +3071,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#doSetSelection(ISelection)
 	 */
+	@Override
 	protected void doSetSelection(ISelection selection) {
 		super.doSetSelection(selection);
 		synchronizeOutlinePageSelection();
@@ -3093,6 +3085,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.part.WorkbenchPart#getOrientation()
 	 * @since 3.1
 	 */
+	@Override
 	public int getOrientation() {
 		return SWT.LEFT_TO_RIGHT;	//Java editors are always left to right by default
 	}
@@ -3100,6 +3093,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createPartControl(Composite parent) {
 		super.createPartControl(parent);
 
@@ -3117,6 +3111,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		PlatformUI.getWorkbench().addWindowListener(fActivationListener);
 	}
 
+	@Override
 	protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupport support) {
 
 		fBracketMatcher.setSourceVersion(getPreferenceStore().getString(JavaCore.COMPILER_SOURCE));
@@ -3146,9 +3141,10 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#updateMarkerViews(org.eclipse.jface.text.source.Annotation)
 	 * @since 3.2
 	 */
+	@Override
 	protected void updateMarkerViews(Annotation annotation) {
 		if (annotation instanceof IJavaAnnotation) {
-			Iterator e= ((IJavaAnnotation) annotation).getOverlaidIterator();
+			Iterator<IJavaAnnotation> e= ((IJavaAnnotation) annotation).getOverlaidIterator();
 			if (e != null) {
 				while (e.hasNext()) {
 					Object o= e.next();
@@ -3203,6 +3199,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		/*
 		 * @see Job#run(org.eclipse.core.runtime.IProgressMonitor)
 		 */
+		@Override
 		public IStatus run(IProgressMonitor progressMonitor) {
 			if (isCanceled(progressMonitor))
 				return Status.CANCEL_STATUS;
@@ -3225,7 +3222,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 
 			// Add occurrence annotations
 			int length= fLocations.length;
-			Map annotationMap= new HashMap(length);
+			Map<Annotation, Position> annotationMap= new HashMap<Annotation, Position>(length);
 			for (int i= 0; i < length; i++) {
 
 				if (isCanceled(progressMonitor))
@@ -3248,13 +3245,13 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 					((IAnnotationModelExtension)annotationModel).replaceAnnotations(fOccurrenceAnnotations, annotationMap);
 				} else {
 					removeOccurrenceAnnotations();
-					Iterator iter= annotationMap.entrySet().iterator();
+					Iterator<Entry<Annotation, Position>> iter= annotationMap.entrySet().iterator();
 					while (iter.hasNext()) {
-						Map.Entry mapEntry= (Map.Entry)iter.next();
-						annotationModel.addAnnotation((Annotation)mapEntry.getKey(), (Position)mapEntry.getValue());
+						Entry<Annotation, Position> mapEntry= iter.next();
+						annotationModel.addAnnotation(mapEntry.getKey(), mapEntry.getValue());
 					}
 				}
-				fOccurrenceAnnotations= (Annotation[])annotationMap.keySet().toArray(new Annotation[annotationMap.keySet().size()]);
+				fOccurrenceAnnotations= annotationMap.keySet().toArray(new Annotation[annotationMap.keySet().size()]);
 			}
 
 			return Status.OK_STATUS;
@@ -3549,7 +3546,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 *
 	 * @since 3.0
 	 */
-	private void installSemanticHighlighting() {
+	protected void installSemanticHighlighting() {
 		if (fSemanticManager == null) {
 			fSemanticManager= new SemanticHighlightingManager();
 			fSemanticManager.install(this, (JavaSourceViewer) getSourceViewer(), JavaPlugin.getDefault().getJavaTextTools().getColorManager(), getPreferenceStore());
@@ -3595,6 +3592,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#setStatusLineErrorMessage(java.lang.String)
 	 * @since 3.5
 	 */
+	@Override
 	public void setStatusLineErrorMessage(String message) {
 		long now= System.currentTimeMillis();
 		if (message != null || now - fErrorMessageTime > ERROR_MESSAGE_TIMEOUT) {
@@ -3607,6 +3605,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#setStatusLineMessage(java.lang.String)
 	 * @since 3.5
 	 */
+	@Override
 	protected void setStatusLineMessage(String message) {
 		if (System.currentTimeMillis() - fErrorMessageTime > ERROR_MESSAGE_TIMEOUT)
 			super.setStatusLineMessage(message);
@@ -3718,6 +3717,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		return new Region(selection.x, selection.y);
 	}
 
+	@Override
 	public ISelectionProvider getSelectionProvider() {
 		return fSelectionProvider;
 	}
@@ -3740,6 +3740,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#handleCursorPositionChanged()
 	 * @since 3.3
 	 */
+	@Override
 	protected void handleCursorPositionChanged() {
 		super.handleCursorPositionChanged();
 		fCachedSelectedRange= getViewer().getSelectedRange();
@@ -3779,6 +3780,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @return the found annotation
 	 * @since 3.2
 	 */
+	@Override
 	protected Annotation findAnnotation(final int offset, final int length, boolean forward, Position annotationPosition) {
 
 		Annotation nextAnnotation= null;
@@ -3795,9 +3797,9 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		if (model == null)
 			return null;
 
-		Iterator e= new JavaAnnotationIterator(model.getAnnotationIterator(), true);
+		Iterator<Annotation> e= new JavaAnnotationIterator(model.getAnnotationIterator(), true);
 		while (e.hasNext()) {
-			Annotation a= (Annotation) e.next();
+			Annotation a= e.next();
 			if ((a instanceof IJavaAnnotation) && ((IJavaAnnotation)a).hasOverlay() || !isNavigationTarget(a))
 				continue;
 
@@ -3863,15 +3865,15 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 		if (model == null)
 			return null;
 
-		Iterator parent;
+		Iterator<Annotation> parent;
 		if (model instanceof IAnnotationModelExtension2)
 			parent= ((IAnnotationModelExtension2)model).getAnnotationIterator(offset, length, true, true);
 		else
 			parent= model.getAnnotationIterator();
 
-		Iterator e= new JavaAnnotationIterator(parent, false);
+		Iterator<Annotation> e= new JavaAnnotationIterator(parent, false);
 		while (e.hasNext()) {
-			Annotation a= (Annotation) e.next();
+			Annotation a= e.next();
 			Position p= model.getPosition(a);
 			if (p != null && p.overlapsWith(offset, length))
 				return a;
@@ -3883,6 +3885,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#gotoAnnotation(boolean)
 	 * @since 3.2
 	 */
+	@Override
 	public Annotation gotoAnnotation(boolean forward) {
 		fSelectionChangedViaGotoAnnotation= true;
 		return super.gotoAnnotation(forward);
@@ -3952,6 +3955,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createChangeHover()
 	 */
+	@Override
 	protected LineChangeHover createChangeHover() {
 		return new JavaChangeHover(IJavaPartitions.JAVA_PARTITIONING, getOrientation());
 	}
@@ -3959,6 +3963,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#createNavigationActions()
 	 */
+	@Override
 	protected void createNavigationActions() {
 		super.createNavigationActions();
 
@@ -3997,6 +4002,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createAnnotationRulerColumn(org.eclipse.jface.text.source.CompositeRuler)
 	 * @since 3.2
 	 */
+	@Override
 	protected IVerticalRulerColumn createAnnotationRulerColumn(CompositeRuler ruler) {
 		if (!getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER))
 			return super.createAnnotationRulerColumn(ruler);
@@ -4041,6 +4047,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#performRevert()
 	 */
+	@Override
 	protected void performRevert() {
 		ProjectionViewer projectionViewer= (ProjectionViewer) getSourceViewer();
 		projectionViewer.setRedraw(false);
@@ -4069,6 +4076,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#rulerContextMenuAboutToShow(org.eclipse.jface.action.IMenuManager)
 	 */
+	@Override
 	protected void rulerContextMenuAboutToShow(IMenuManager menu) {
 		super.rulerContextMenuAboutToShow(menu);
 		IMenuManager foldingMenu= new MenuManager(JavaEditorMessages.Editor_FoldingMenu_name, "projection"); //$NON-NLS-1$
@@ -4092,6 +4100,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#collectContextMenuPreferencePages()
 	 * @since 3.1
 	 */
+	@Override
 	protected String[] collectContextMenuPreferencePages() {
 		String[] inheritedPages= super.collectContextMenuPreferencePages();
 		int length= 10;
@@ -4114,6 +4123,7 @@ public abstract class JavaEditor extends AbstractDecoratedTextEditor implements
 	 * @see AbstractTextEditor#getUndoRedoOperationApprover(IUndoContext)
 	 * @since 3.1
 	 */
+	@Override
 	protected IOperationApprover getUndoRedoOperationApprover(IUndoContext undoContext) {
 		// since IResource is a more general way to compare java elements, we
 		// use this as the preferred class for comparing objects.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumb.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumb.java
index 1fc3ff5..b32361b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumb.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumb.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import org.eclipse.swt.widgets.Item;
 import org.eclipse.swt.widgets.Widget;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
@@ -120,6 +121,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 		/*
 		 * @see StructuredViewer#mapElement(Object, Widget)
 		 */
+		@Override
 		protected void mapElement(Object element, Widget item) {
 			super.mapElement(element, item);
 			if (item instanceof Item) {
@@ -130,6 +132,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 		/*
 		 * @see StructuredViewer#unmapElement(Object, Widget)
 		 */
+		@Override
 		protected void unmapElement(Object element, Widget item) {
 			if (item instanceof Item) {
 				fResourceToItemsMapper.removeFromMap(element, (Item) item);
@@ -140,6 +143,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 		/*
 		 * @see StructuredViewer#unmapAllElements()
 		 */
+		@Override
 		protected void unmapAllElements() {
 			fResourceToItemsMapper.clearMap();
 			super.unmapAllElements();
@@ -148,6 +152,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 		/*
 		 * @see org.eclipse.jface.viewers.StructuredViewer#handleLabelProviderChanged(org.eclipse.jface.viewers.LabelProviderChangedEvent)
 		 */
+		@Override
 		protected void handleLabelProviderChanged(LabelProviderChangedEvent event) {
 			if (event instanceof ProblemsLabelChangedEvent) {
 				ProblemsLabelChangedEvent e= (ProblemsLabelChangedEvent) event;
@@ -158,7 +163,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 
 			Object[] changed= event.getElements();
 			if (changed != null && !fResourceToItemsMapper.isEmpty()) {
-				ArrayList others= new ArrayList(changed.length);
+				ArrayList<Object> others= new ArrayList<Object>(changed.length);
 				for (int i= 0; i < changed.length; i++) {
 					Object curr= changed[i];
 					if (curr instanceof IResource) {
@@ -189,11 +194,13 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.BreadcrumbViewer#configureDropDownViewer(org.eclipse.jface.viewers.TreeViewer, java.lang.Object)
 		 */
+		@Override
 		public void configureDropDownViewer(TreeViewer viewer, Object input) {
 			viewer.setContentProvider(createDropDownContentProvider());
 			viewer.setLabelProvider(createDropDownLabelProvider());
 			viewer.setComparator(new JavaElementComparator());
 			viewer.addFilter(new ViewerFilter() {
+				@Override
 				public boolean select(Viewer viewer1, Object parentElement, Object element) {
 					if (element instanceof IMember) {
 						if (((IMember) element).getElementName().startsWith("<")) { //$NON-NLS-1$
@@ -212,7 +219,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 
 		private ILabelProvider createDropDownLabelProvider() {
 			final AppearanceAwareLabelProvider result= new AppearanceAwareLabelProvider(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.F_APP_TYPE_SIGNATURE
-					| JavaElementLabels.ALL_CATEGORY, JavaElementImageProvider.SMALL_ICONS | AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS);
+					| JavaElementLabels.ALL_CATEGORY | JavaElementLabels.P_COMPRESSED, JavaElementImageProvider.SMALL_ICONS | AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS);
 
 			return new DecoratingJavaLabelProvider(result);
 		}
@@ -259,7 +266,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 			} else if (inputElement instanceof IPackageFragmentRoot) {
 				Object[] fragments= fParent.getChildren(inputElement);
 
-				ArrayList packages= new ArrayList();
+				ArrayList<Object> packages= new ArrayList<Object>();
 				for (int i= 0; i < fragments.length; i++) {
 					Object object= fragments[i];
 					if (object instanceof IPackageFragment) {
@@ -299,7 +306,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 			} catch (JavaModelException e) {
 				return fParent.getChildren(model);
 			}
-			ArrayList result= new ArrayList(javaProjects.length + nonJavaResources.length);
+			ArrayList<IAdaptable> result= new ArrayList<IAdaptable>(javaProjects.length + nonJavaResources.length);
 			for (int i= 0; i < nonJavaResources.length; i++) {
 				IProject project= (IProject)nonJavaResources[i];
 				if (project.isAccessible())
@@ -359,7 +366,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 		}
 
 		private Object[] getPackageContent(IPackageFragment pack) {
-			ArrayList result= new ArrayList();
+			ArrayList<Object> result= new ArrayList<Object>();
 			try {
 				ICompilationUnit[] units= pack.getCompilationUnits();
 				for (int i= 0; i < units.length; i++) {
@@ -536,6 +543,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#activateBreadcrumb()
 	 */
+	@Override
 	protected void activateBreadcrumb() {
 		fEditorSelection= getJavaEditor().getSelectionProvider().getSelection();
 		IEditorSite editorSite= getJavaEditor().getEditorSite();
@@ -547,6 +555,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#deactivateBreadcrumb()
 	 */
+	@Override
 	protected void deactivateBreadcrumb() {
 		IEditorSite editorSite= getJavaEditor().getEditorSite();
 		editorSite.getKeyBindingService().setScopes(new String[] { "org.eclipse.jdt.ui.javaEditorScope" }); //$NON-NLS-1$
@@ -558,6 +567,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#createViewer(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected BreadcrumbViewer createViewer(Composite composite) {
 		fViewer= new ProblemBreadcrumbViewer(composite, SWT.HORIZONTAL);
 
@@ -599,17 +609,19 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	 */
 	private static JavaEditorBreadcrumbContentProvider createDropDownContentProvider() {
 		StandardJavaElementContentProvider parentContentProvider= new StandardJavaElementContentProvider(true) {
+			@Override
 			public Object[] getChildren(Object element) {
 				if (element instanceof PackageFragmentRootContainer)
 					return getContainerPackageFragmentRoots((PackageFragmentRootContainer)element);
 				return super.getChildren(element);
 			}
 
+			@Override
 			protected Object[] getPackageFragmentRoots(IJavaProject project) throws JavaModelException {
 				if (!project.getProject().isOpen())
 					return NO_CHILDREN;
 
-				List result= new ArrayList();
+				List<Object> result= new ArrayList<Object>();
 
 				IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 				for (int i= 0; i < roots.length; i++) {
@@ -657,6 +669,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 				return container.getChildren();
 			}
 
+			@Override
 			protected Object internalGetParent(Object element) {
 				if (element instanceof IPackageFragmentRoot) {
 					// since we insert logical package containers we have to fix
@@ -694,7 +707,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	private static ILabelProvider createLabelProvider() {
 		final AppearanceAwareLabelProvider result= new AppearanceAwareLabelProvider(JavaElementLabels.ROOT_VARIABLE | JavaElementLabels.T_TYPE_PARAMETERS | JavaElementLabels.M_PARAMETER_TYPES
 				| JavaElementLabels.M_APP_TYPE_PARAMETERS | JavaElementLabels.M_APP_RETURNTYPE | JavaElementLabels.F_APP_TYPE_SIGNATURE
-				| JavaElementLabels.ALL_CATEGORY, JavaElementImageProvider.SMALL_ICONS | AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS);
+				| JavaElementLabels.ALL_CATEGORY | JavaElementLabels.P_COMPRESSED, JavaElementImageProvider.SMALL_ICONS | AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS);
 
 		return new DecoratingJavaLabelProvider(result) {
 
@@ -703,6 +716,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 			 * org.eclipse.jdt.internal.ui.viewsupport.ColoringLabelProvider#getText(java.lang.Object
 			 * )
 			 */
+			@Override
 			public String getText(Object element) {
 				if (element instanceof IPackageFragmentRoot) {
 					IPackageFragmentRoot root= (IPackageFragmentRoot) element;
@@ -717,6 +731,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 			/*
 			 * @see org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider#getStyledText(java.lang.Object)
 			 */
+			@Override
 			protected StyledString getStyledText(Object element) {
 				return new StyledString(getText(element));
 			}
@@ -738,6 +753,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#dispose()
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 
@@ -751,6 +767,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#createContextMenuActionGroup(org.eclipse.jface.viewers.ISelectionProvider)
 	 */
+	@Override
 	protected ActionGroup createContextMenuActionGroup(ISelectionProvider selectionProvider) {
 		return new JavaEditorBreadcrumbActionGroup(getJavaEditor(), selectionProvider);
 	}
@@ -758,6 +775,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#setInput(java.lang.Object)
 	 */
+	@Override
 	public void setInput(Object element) {
 		if (element == null) {
 			element= getCurrentInput();
@@ -776,6 +794,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#getCurrentInput()
 	 */
+	@Override
 	protected Object getCurrentInput() {
 		try {
 			ITypeRoot input= SelectionConverter.getInput(getJavaEditor());
@@ -790,7 +809,6 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 			}
 			return getInput(SelectionConverter.getElementAtOffset(input, selection));
 		} catch (JavaModelException e) {
-			JavaPlugin.log(e);
 			return null;
 		}
 	}
@@ -830,7 +848,6 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 
 			return element;
 		} catch (JavaModelException e) {
-			JavaPlugin.log(e);
 			return null;
 		}
 	}
@@ -838,12 +855,17 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#open(java.lang.Object)
 	 */
+	@Override
 	protected boolean open(Object element) {
 		if (element instanceof IFile)
 			return openInNewEditor(element);
 
-		if (element instanceof IJarEntryResource)
-			return openInNewEditor(element);
+		if (element instanceof IJarEntryResource) {
+			if (((IJarEntryResource)element).isFile())
+				return openInNewEditor(element);
+			return false;
+		}
+
 
 		if (!(element instanceof IJavaElement))
 			return false;
@@ -863,6 +885,7 @@ public class JavaEditorBreadcrumb extends EditorBreadcrumb {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb#reveal(java.lang.Object)
 	 */
+	@Override
 	protected boolean reveal(Object element) {
 		if (!(element instanceof IJavaElement))
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumbActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumbActionGroup.java
index 085dcce..6ee99df 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumbActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorBreadcrumbActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,11 +59,13 @@ final class JavaEditorBreadcrumbActionGroup extends CompositeActionGroup	 {
 			selectionProvider.addSelectionChangedListener(fAssignWorkingSetAction);
 		}
 
+		@Override
 		public void dispose() {
 			super.dispose();
 			fSelectionProvider.removeSelectionChangedListener(fAssignWorkingSetAction);
 		}
 
+		@Override
 		public void fillContextMenu(IMenuManager menu) {
 			if (fAssignWorkingSetAction.isEnabled())
 				menu.appendToGroup(IContextMenuConstants.GROUP_BUILD, fAssignWorkingSetAction);
@@ -85,21 +87,26 @@ final class JavaEditorBreadcrumbActionGroup extends CompositeActionGroup	 {
 			/*
 			 * @see org.eclipse.jface.action.Action#run()
 			 */
+			@Override
 			public void run() {
 				fJavaEditor.getViewer().getTextWidget().setFocus();
 			}
 		}
 
-		private Action fGoToEditor;
+		private GoToEditorAction fGoToEditor;
+		private ToggleBreadcrumbAction fHideBreadcrumb;
 
 		public BreadcrumbActionGroup(JavaEditor javaEditor) {
 			fGoToEditor= new GoToEditorAction(javaEditor);
 			fGoToEditor.setActionDefinitionId(IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB);
+			fHideBreadcrumb= new ToggleBreadcrumbAction(javaEditor.getSite().getPage(), true);
+			fHideBreadcrumb.setActionDefinitionId(IJavaEditorActionDefinitionIds.TOGGLE_BREADCRUMB);
 		}
 
 		/*
 		 * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
 		 */
+		@Override
 		public void fillActionBars(IActionBars actionBars) {
 			super.fillActionBars(actionBars);
 			actionBars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB, fGoToEditor);
@@ -108,9 +115,11 @@ final class JavaEditorBreadcrumbActionGroup extends CompositeActionGroup	 {
 		/*
 		 * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
 		 */
+		@Override
 		public void fillContextMenu(IMenuManager menu) {
 			super.fillContextMenu(menu);
 			menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, fGoToEditor);
+			menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, fHideBreadcrumb);
 		}
 	}
 
@@ -134,6 +143,7 @@ final class JavaEditorBreadcrumbActionGroup extends CompositeActionGroup	 {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.actions.CompositeActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		JavaPlugin.createStandardGroups(menu);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.java
index 866a68f..4396dcb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Andre Soereng <andreis at fast.no> - [syntax highlighting] highlight numbers - https://bugs.eclipse.org/bugs/show_bug.cgi?id=63573
+ *     Björn Michael <b.michael at gmx.de> - [syntax highlighting] Syntax coloring for abstract classes - https://bugs.eclipse.org/331311
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.javaeditor;
 
@@ -119,6 +120,7 @@ final class JavaEditorMessages extends NLS {
 	public static String SemanticHighlighting_methodDeclaration;
 	public static String SemanticHighlighting_staticMethodInvocation;
 	public static String SemanticHighlighting_annotationElementReference;
+	public static String SemanticHighlighting_abstractClasses;
 	public static String SemanticHighlighting_abstractMethodInvocation;
 	public static String SemanticHighlighting_inheritedMethodInvocation;
 	public static String SemanticHighlighting_localVariableDeclaration;
@@ -134,6 +136,9 @@ final class JavaEditorMessages extends NLS {
 	public static String SemanticHighlighting_interfaces;
 	public static String SemanticHighlighting_annotations;
 	public static String SemanticHighlighting_typeArguments;
+	public static String JavaEditor_FormatElementAction_description;
+	public static String JavaEditor_FormatElementAction_label;
+	public static String JavaEditor_FormatElementDialog_label;
 	public static String JavaEditor_markOccurrences_job_name;
 	public static String JavaEditorBreadcrumbActionGroup_go_to_editor_action_label;
 	public static String JavaElementHyperlink_hyperlinkText;
@@ -149,6 +154,14 @@ final class JavaEditorMessages extends NLS {
 	public static String JavaElementImplementationHyperlink_hyperlinkText;
 	public static String JavaElementImplementationHyperlink_hyperlinkText_qualified;
 	public static String JavaElementImplementationHyperlink_search_method_implementors;
+	public static String JavaElementDeclaredTypeHyperlink_hyperlinkText_qualified;
+	public static String JavaElementDeclaredTypeHyperlink_hyperlinkText;
+	public static String JavaElementDeclaredTypeHyperlink_error_msg;
+	public static String JavaElementReturnTypeHyperlink_hyperlinkText_qualified;
+	public static String JavaElementReturnTypeHyperlink_hyperlinkText;
+	public static String JavaElementReturnTypeHyperlink_error_msg;
+	public static String JavaElementSuperImplementationHyperlink_hyperlinkText;
+	public static String JavaElementSuperImplementationHyperlink_hyperlinkText_qualified;	
 
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, JavaEditorMessages.class);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.properties
index 1e99e45..b200798 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 #     Andre Soereng <andreis at fast.no> - [syntax highlighting] highlight numbers - https://bugs.eclipse.org/bugs/show_bug.cgi?id=63573
+#     Bjoern Michael <b.michael at gmx.de> - [syntax highlighting] Syntax coloring for abstract classes - https://bugs.eclipse.org/331311
 ###############################################################################
 
 AddImportOnSelection_label=A&dd Import
@@ -122,7 +123,11 @@ SemanticHighlighting_enums= Enums
 SemanticHighlighting_interfaces= Interfaces
 SemanticHighlighting_annotations= Annotations
 SemanticHighlighting_typeArguments= Type arguments
+SemanticHighlighting_abstractClasses= Abstract classes
 
+JavaEditor_FormatElementAction_description=Format enclosing text element
+JavaEditor_FormatElementAction_label=Format Eleme&nt
+JavaEditor_FormatElementDialog_label=Format Element
 JavaEditor_markOccurrences_job_name= Occurrences Marker
 JavaEditorBreadcrumbActionGroup_go_to_editor_action_label=&Go to Editor
 
@@ -134,6 +139,14 @@ JavaElementImplementationHyperlink_error_status_message=An error occurred while
 JavaElementImplementationHyperlink_hyperlinkText= Open Implementation
 JavaElementImplementationHyperlink_hyperlinkText_qualified=Open Implementation for ''{0}''
 JavaElementImplementationHyperlink_search_method_implementors=Searching for implementors of ''{0}''...
+JavaElementDeclaredTypeHyperlink_hyperlinkText_qualified=Open Declared Type for ''{0}''
+JavaElementDeclaredTypeHyperlink_hyperlinkText=Open Declared Type
+JavaElementDeclaredTypeHyperlink_error_msg= Cannot open the declared type as it is either primitive or cannot be resolved.
+JavaElementReturnTypeHyperlink_hyperlinkText_qualified=Open Return Type for ''{0}''
+JavaElementReturnTypeHyperlink_hyperlinkText=Open Return Type
+JavaElementReturnTypeHyperlink_error_msg=Cannot open the return type as it cannot be resolved.
+JavaElementSuperImplementationHyperlink_hyperlinkText_qualified= Open Super Implementation for ''{0}''
+JavaElementSuperImplementationHyperlink_hyperlinkText= Open Super Implementation
 
 Editor_OpenPropertiesFile_error_keyNotFound= The key "{0}" is not defined in this properties file
 Editor_OpenPropertiesFile_error_fileNotFound_dialogMessage= Could not determine properties file
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementDeclaredTypeHyperlink.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementDeclaredTypeHyperlink.java
new file mode 100644
index 0000000..3d7df13
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementDeclaredTypeHyperlink.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.javaeditor;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
+
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+import org.eclipse.jdt.internal.corext.util.Messages;
+
+import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+/**
+ * Java element declared type hyperlink for variables.
+ * 
+ * @since 3.7
+ */
+public class JavaElementDeclaredTypeHyperlink implements IHyperlink {
+
+	private final IRegion fRegion;
+	private final SelectionDispatchAction fOpenAction;
+	private final IJavaElement fElement;
+	private final boolean fQualify;
+	
+	/**
+	 * Creates a new Java element declared type hyperlink for variables.
+	 * 
+	 * @param region the region of the link
+	 * @param openAction the action to use to open the Java elements
+	 * @param element the Java element to open
+	 * @param qualify <code>true</code> if the hyperlink text should show a qualified name for
+	 *            element.
+	 */
+	public JavaElementDeclaredTypeHyperlink(IRegion region, SelectionDispatchAction openAction, IJavaElement element, boolean qualify) {
+		Assert.isNotNull(openAction);
+		Assert.isNotNull(region);
+		Assert.isNotNull(element);
+
+		fRegion= region;
+		fOpenAction= openAction;
+		fElement= element;
+		fQualify= qualify;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkRegion()
+	 */
+	public IRegion getHyperlinkRegion() {
+		return fRegion;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel()
+	 */
+	public String getTypeLabel() {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText()
+	 */
+	public String getHyperlinkText() {
+		if (fQualify) {
+			String elementLabel= JavaElementLabels.getElementLabel(fElement, JavaElementLabels.ALL_FULLY_QUALIFIED);
+			return Messages.format(JavaEditorMessages.JavaElementDeclaredTypeHyperlink_hyperlinkText_qualified, new Object[] { elementLabel });
+		} else {
+			return JavaEditorMessages.JavaElementDeclaredTypeHyperlink_hyperlinkText;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#open()
+	 */
+	public void open() {
+		String typeSignature;
+		try {
+			typeSignature= JavaElementHyperlinkDeclaredTypeDetector.getTypeSignature(fElement);
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+			return;
+		}
+		int kind= Signature.getTypeSignatureKind(typeSignature);
+		if (kind == Signature.ARRAY_TYPE_SIGNATURE) {
+			typeSignature= Signature.getElementType(typeSignature);
+		} else if (kind == Signature.CLASS_TYPE_SIGNATURE) {
+			typeSignature= Signature.getTypeErasure(typeSignature);
+		}
+		String typeName= Signature.toString(typeSignature);
+
+		IJavaElement parent= fElement.getAncestor(IJavaElement.TYPE);
+		if (parent == null) {
+			openElementAndShowErrorInStatusLine();
+			return;
+		}
+		try {
+			String[][] resolvedType= ((IType)parent).resolveType(typeName);
+			if (resolvedType == null || resolvedType.length == 0) {
+				openElementAndShowErrorInStatusLine();
+				return;
+			}
+			String qualTypeName= JavaModelUtil.concatenateName(resolvedType[0][0], resolvedType[0][1]);
+			IType type= fElement.getJavaProject().findType(qualTypeName, (IProgressMonitor)null);
+			if (type != null) {
+				fOpenAction.run(new StructuredSelection(type));
+				return;
+			}
+			openElementAndShowErrorInStatusLine();
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+			return;
+		}
+	}
+
+	/**
+	 * Opens and selects the Java element, and shows an error message in the status line.
+	 */
+	private void openElementAndShowErrorInStatusLine() {
+		try {
+			IEditorPart editor= JavaUI.openInEditor(fElement);
+			
+			editor.getSite().getShell().getDisplay().beep();
+			if (editor instanceof JavaEditor)
+				((JavaEditor)editor).setStatusLineErrorMessage(JavaEditorMessages.JavaElementDeclaredTypeHyperlink_error_msg);
+			
+		} catch (PartInitException e) {
+			JavaPlugin.log(e);
+		} catch (CoreException e) {
+			JavaPlugin.log(e);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlink.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlink.java
index a1cc3e8..faaa7e3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlink.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlink.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.viewers.StructuredSelection;
 
 import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.text.hyperlink.IHyperlink;
 
 import org.eclipse.jdt.core.IJavaElement;
@@ -22,6 +23,7 @@ import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.ui.actions.OpenAction;
 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
 
 
@@ -43,14 +45,14 @@ public class JavaElementHyperlink implements IHyperlink {
 	 * 
 	 * @param region the region of the link
 	 * @param openAction the action to use to open the java elements
-	 * @param element the java element to open
+	 * @param element the java element to open or <code>null</code> if {@link OpenAction} should be
+	 *            invoked at the given region
 	 * @param qualify <code>true</code> if the hyperlink text should show a qualified name for
-	 *            element.
+	 *            element
 	 */
 	public JavaElementHyperlink(IRegion region, SelectionDispatchAction openAction, IJavaElement element, boolean qualify) {
 		Assert.isNotNull(openAction);
 		Assert.isNotNull(region);
-		Assert.isNotNull(element);
 
 		fRegion= region;
 		fOpenAction= openAction;
@@ -71,7 +73,10 @@ public class JavaElementHyperlink implements IHyperlink {
 	 * @since 3.1
 	 */
 	public void open() {
-		fOpenAction.run(new StructuredSelection(fElement));
+		if (fElement != null)
+			fOpenAction.run(new StructuredSelection(fElement));
+		else
+			fOpenAction.run(new TextSelection(fRegion.getOffset(), fRegion.getLength()));
 	}
 
 	/*
@@ -87,7 +92,7 @@ public class JavaElementHyperlink implements IHyperlink {
 	 * @since 3.1
 	 */
 	public String getHyperlinkText() {
-		if (fQualify) {
+		if (fQualify && fElement != null) {
 			String elementLabel= JavaElementLabels.getElementLabel(fElement, JavaElementLabels.ALL_POST_QUALIFIED);
 			return Messages.format(JavaEditorMessages.JavaElementHyperlink_hyperlinkText_qualified, new Object[] { elementLabel });
 		} else {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkDeclaredTypeDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkDeclaredTypeDetector.java
new file mode 100644
index 0000000..97d49cb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkDeclaredTypeDetector.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.javaeditor;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.ILocalVariable;
+import org.eclipse.jdt.core.JavaModelException;
+
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+
+import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
+
+/**
+ * Java element variable declaration type hyperlink detector.
+ * 
+ * @since 3.7
+ */
+public class JavaElementHyperlinkDeclaredTypeDetector extends JavaElementHyperlinkDetector {
+
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkDetector#createHyperlink(org.eclipse.jface.text.IRegion, org.eclipse.jdt.ui.actions.SelectionDispatchAction, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.jdt.internal.ui.javaeditor.JavaEditor)
+	 */
+	@Override
+	protected IHyperlink createHyperlink(IRegion wordRegion, SelectionDispatchAction openAction, IJavaElement element, boolean qualify, JavaEditor editor) {
+		try {
+			if ((element.getElementType() == IJavaElement.FIELD || element.getElementType() == IJavaElement.LOCAL_VARIABLE) && !JavaModelUtil.isPrimitive(getTypeSignature(element))
+					&& SelectionConverter.canOperateOn(editor)) {
+				return new JavaElementDeclaredTypeHyperlink(wordRegion, openAction, element, qualify);
+			}
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the type signature of the element.
+	 * 
+	 * @param element an instance of <code>ILocalVariable</code> or <code>IField</code>
+	 * @return the type signature of the element
+	 * @throws JavaModelException if this element does not exist or if an exception occurs while
+	 *             accessing its corresponding resource.
+	 */
+	static String getTypeSignature(IJavaElement element) throws JavaModelException {
+		if (element instanceof ILocalVariable) {
+			return ((ILocalVariable)element).getTypeSignature();
+		} else if (element instanceof IField) {
+			return ((IField)element).getTypeSignature();
+		}
+		throw new IllegalArgumentException();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkDetector.java
index 6e5e3b0..7a4f319 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkDetector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.List;
 
 import org.eclipse.jface.action.IAction;
 
+import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextViewer;
@@ -25,10 +26,21 @@ import org.eclipse.ui.texteditor.ITextEditor;
 
 import org.eclipse.jdt.core.ICodeAssist;
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
-
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.BreakStatement;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ContinueStatement;
+import org.eclipse.jdt.core.dom.NodeFinder;
+import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
+
+import org.eclipse.jdt.ui.SharedASTProvider;
 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
 
+import org.eclipse.jdt.internal.ui.search.BreakContinueTargetFinder;
+import org.eclipse.jdt.internal.ui.search.IOccurrencesFinder.OccurrenceLocation;
 import org.eclipse.jdt.internal.ui.text.JavaWordFinder;
 
 
@@ -53,7 +65,7 @@ public class JavaElementHyperlinkDetector extends AbstractHyperlinkDetector {
 
 		int offset= region.getOffset();
 
-		IJavaElement input= EditorUtility.getEditorInputJavaElement(textEditor, false);
+		ITypeRoot input= EditorUtility.getEditorInputJavaElement(textEditor, false);
 		if (input == null)
 			return null;
 
@@ -63,8 +75,13 @@ public class JavaElementHyperlinkDetector extends AbstractHyperlinkDetector {
 			if (wordRegion == null || wordRegion.getLength() == 0)
 				return null;
 
-			IJavaElement[] elements= null;
-			elements= ((ICodeAssist) input).codeSelect(wordRegion.getOffset(), wordRegion.getLength());
+			if (isInheritDoc(document, wordRegion) && getClass() != JavaElementHyperlinkDetector.class)
+				return null;
+
+			if (JavaElementHyperlinkDetector.class == getClass() && findBreakOrContinueTarget(input, region) != null)
+				return new IHyperlink[] { new JavaElementHyperlink(wordRegion, (SelectionDispatchAction)openAction, null, false) };
+
+			IJavaElement[] elements= ((ICodeAssist) input).codeSelect(wordRegion.getOffset(), wordRegion.getLength());
 			elements= selectOpenableElements(elements);
 			if (elements.length == 0)
 				return null;
@@ -72,7 +89,7 @@ public class JavaElementHyperlinkDetector extends AbstractHyperlinkDetector {
 			IHyperlink[] links= new IHyperlink[elements.length];
 			int j= 0;
 			for (int i= 0; i < elements.length; i++) {
-				IHyperlink link= createHyperlink(wordRegion, (SelectionDispatchAction)openAction, elements[i], elements.length > 1, textEditor);
+				IHyperlink link= createHyperlink(wordRegion, (SelectionDispatchAction)openAction, elements[i], elements.length > 1, (JavaEditor)textEditor);
 				if (link != null) {
 					links[j++]= link;
 				}
@@ -92,6 +109,23 @@ public class JavaElementHyperlinkDetector extends AbstractHyperlinkDetector {
 	}
 
 	/**
+	 * Returns whether the word is "inheritDoc".
+	 * 
+	 * @param document the document
+	 * @param wordRegion the word region
+	 * @return <code>true</code> iff the word is "inheritDoc"
+	 * @since 3.7
+	 */
+	private static boolean isInheritDoc(IDocument document, IRegion wordRegion) {
+		try {
+			String word= document.get(wordRegion.getOffset(), wordRegion.getLength());
+			return "inheritDoc".equals(word); //$NON-NLS-1$
+		} catch (BadLocationException e) {
+			return false;
+		}
+	}
+
+	/**
 	 * Creates a java element hyperlink.
 	 * 
 	 * @param wordRegion the region of the link
@@ -104,7 +138,7 @@ public class JavaElementHyperlinkDetector extends AbstractHyperlinkDetector {
 	 *         given arguments
 	 * @since 3.5
 	 */
-	protected IHyperlink createHyperlink(IRegion wordRegion, SelectionDispatchAction openAction, IJavaElement element, boolean qualify, ITextEditor editor) {
+	protected IHyperlink createHyperlink(IRegion wordRegion, SelectionDispatchAction openAction, IJavaElement element, boolean qualify, JavaEditor editor) {
 		return new JavaElementHyperlink(wordRegion, openAction, element, qualify);
 	}
 
@@ -117,7 +151,7 @@ public class JavaElementHyperlinkDetector extends AbstractHyperlinkDetector {
 	 * @since 3.4
 	 */
 	private IJavaElement[] selectOpenableElements(IJavaElement[] elements) {
-		List result= new ArrayList(elements.length);
+		List<IJavaElement> result= new ArrayList<IJavaElement>(elements.length);
 		for (int i= 0; i < elements.length; i++) {
 			IJavaElement element= elements[i];
 			switch (element.getElementType()) {
@@ -132,6 +166,47 @@ public class JavaElementHyperlinkDetector extends AbstractHyperlinkDetector {
 					break;
 			}
 		}
-		return (IJavaElement[]) result.toArray(new IJavaElement[result.size()]);
+		return result.toArray(new IJavaElement[result.size()]);
 	}
+
+	/**
+	 * Finds the target for break or continue node.
+	 * 
+	 * @param input the editor input
+	 * @param region the region
+	 * @return the break or continue target location or <code>null</code> if none
+	 * @since 3.7
+	 */
+	public static OccurrenceLocation findBreakOrContinueTarget(ITypeRoot input, IRegion region) {
+		CompilationUnit astRoot= SharedASTProvider.getAST(input, SharedASTProvider.WAIT_NO, null);
+		if (astRoot == null)
+			return null;
+
+		ASTNode node= NodeFinder.perform(astRoot, region.getOffset(), region.getLength());
+		ASTNode breakOrContinueNode= null;
+		boolean labelSelected= false;
+		if (node instanceof SimpleName) {
+			SimpleName simpleName= (SimpleName) node;
+			StructuralPropertyDescriptor location= simpleName.getLocationInParent();
+			if (location == ContinueStatement.LABEL_PROPERTY || location == BreakStatement.LABEL_PROPERTY) {
+				breakOrContinueNode= simpleName.getParent();
+				labelSelected= true;
+			}
+		} else if (node instanceof ContinueStatement || node instanceof BreakStatement)
+			breakOrContinueNode= node;
+
+		if (breakOrContinueNode == null)
+			return null;
+
+		BreakContinueTargetFinder finder= new BreakContinueTargetFinder();
+		if (finder.initialize(astRoot, breakOrContinueNode) == null) {
+			OccurrenceLocation[] locations= finder.getOccurrences();
+			if (locations != null) {
+				if (breakOrContinueNode instanceof BreakStatement && !labelSelected)
+					return locations[locations.length - 1]; // points to the end of target statement
+				return locations[0]; // points to the beginning of target statement
+			}
+		}
+		return null;
+	}	
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkImplementationDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkImplementationDetector.java
index 2609263..e60b6d5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkImplementationDetector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkImplementationDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,18 +13,12 @@ package org.eclipse.jdt.internal.ui.javaeditor;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.hyperlink.IHyperlink;
 
-import org.eclipse.ui.texteditor.ITextEditor;
-
 import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.internal.corext.util.JdtFlags;
 
 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
 
-import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
 
 
 /**
@@ -38,26 +32,11 @@ public class JavaElementHyperlinkImplementationDetector extends JavaElementHyper
 	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkDetector#createHyperlink(org.eclipse.jface.text.IRegion, org.eclipse.jdt.ui.actions.SelectionDispatchAction, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.ui.texteditor.ITextEditor)
 	 * @since 3.5
 	 */
-	protected IHyperlink createHyperlink(IRegion wordRegion, SelectionDispatchAction openAction, IJavaElement element, boolean qualify, ITextEditor editor) {
-		if (element.getElementType() == IJavaElement.METHOD && canBeOverridden((IMethod)element)) {
+	@Override
+	protected IHyperlink createHyperlink(IRegion wordRegion, SelectionDispatchAction openAction, IJavaElement element, boolean qualify, JavaEditor editor) {
+		if (element.getElementType() == IJavaElement.METHOD && SelectionConverter.canOperateOn(editor)) {
 			return new JavaElementImplementationHyperlink(wordRegion, openAction, (IMethod)element, qualify, editor);
 		}
 		return null;
 	}
-
-	/**
-	 * Checks whether a method can be overridden.
-	 * 
-	 * @param method the method
-	 * @return <code>false</code> if the method is final, static, or a constructor, or if its declaring
-	 *         class is final, or in case of an exception, <code>true</code> otherwise
-	 */
-	private boolean canBeOverridden(IMethod method) {
-		try {
-			return !(JdtFlags.isPrivate(method) || JdtFlags.isFinal(method) || JdtFlags.isStatic(method) || method.isConstructor() || JdtFlags.isFinal((IMember)method.getParent()));
-		} catch (JavaModelException e) {
-			JavaPlugin.log(e);
-			return false;
-		}
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkReturnTypeDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkReturnTypeDetector.java
new file mode 100644
index 0000000..524686d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkReturnTypeDetector.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.javaeditor;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.JavaModelException;
+
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+
+import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
+
+/**
+ * Java element method return type hyperlink detector.
+ * 
+ * @since 3.7
+ */
+public class JavaElementHyperlinkReturnTypeDetector extends JavaElementHyperlinkDetector {
+
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkDetector#createHyperlink(org.eclipse.jface.text.IRegion, org.eclipse.jdt.ui.actions.SelectionDispatchAction, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.jdt.internal.ui.javaeditor.JavaEditor)
+	 */
+	@Override
+	protected IHyperlink createHyperlink(IRegion wordRegion, SelectionDispatchAction openAction, IJavaElement element, boolean qualify, JavaEditor editor) {
+		try {
+			if (element.getElementType() == IJavaElement.METHOD && !JavaModelUtil.isPrimitive(((IMethod)element).getReturnType()) && SelectionConverter.canOperateOn(editor)) {
+				return new JavaElementReturnTypeHyperlink(wordRegion, openAction, (IMethod)element, qualify);
+			}
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+		}
+		return null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkSuperImplementationDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkSuperImplementationDetector.java
new file mode 100644
index 0000000..5fc2b14
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementHyperlinkSuperImplementationDetector.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.javaeditor;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.JavaModelException;
+
+import org.eclipse.jdt.internal.corext.util.JdtFlags;
+
+import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
+
+/**
+ * Java element super implementation hyperlink detector for methods.
+ * 
+ * @since 3.7
+ */
+public class JavaElementHyperlinkSuperImplementationDetector extends JavaElementHyperlinkDetector {
+	/*
+	 * @see org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkDetector#createHyperlink(org.eclipse.jface.text.IRegion, org.eclipse.jdt.ui.actions.SelectionDispatchAction, org.eclipse.jdt.core.IJavaElement, boolean, org.eclipse.ui.texteditor.ITextEditor)
+	 * @since 3.7
+	 */
+	@Override
+	protected IHyperlink createHyperlink(IRegion wordRegion, SelectionDispatchAction openAction, IJavaElement element, boolean qualify, JavaEditor editor) {
+		if (element.getElementType() == IJavaElement.METHOD && SelectionConverter.canOperateOn(editor) && isOverriddenMethod((IMethod)element)) {
+			return new JavaElementSuperImplementationHyperlink(wordRegion, openAction, (IMethod)element, qualify);
+		}
+		return null;
+	}
+
+	/**
+	 * Indicates whether a method is overridden.
+	 * 
+	 * @param method the method to check
+	 * @return <code>true</code> if the method is overridden, <code>false</code> otherwise
+	 */
+	private boolean isOverriddenMethod(IMethod method) {
+		try {
+			if (JdtFlags.isPrivate(method) || JdtFlags.isStatic(method) || method.isConstructor())
+				return false;
+			if (JavaElementSuperImplementationHyperlink.findSuperImplementation(method) != null)
+				return true;
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+		}
+		return false;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementImplementationHyperlink.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementImplementationHyperlink.java
index 64ba396..2b47b20 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementImplementationHyperlink.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementImplementationHyperlink.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,8 +34,7 @@ import org.eclipse.jface.text.hyperlink.IHyperlink;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.PlatformUI;
 
-import org.eclipse.ui.texteditor.ITextEditor;
-
+import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeHierarchy;
@@ -83,9 +82,9 @@ public class JavaElementImplementationHyperlink implements IHyperlink {
 	private final boolean fQualify;
 
 	/**
-	 * The current text editor.
+	 * The editor.
 	 */
-	private ITextEditor fEditor;
+	private IEditorPart fEditor;
 
 	/**
 	 * Creates a new Java element implementation hyperlink for methods.
@@ -95,9 +94,9 @@ public class JavaElementImplementationHyperlink implements IHyperlink {
 	 * @param method the method to open
 	 * @param qualify <code>true</code> if the hyperlink text should show a qualified name for
 	 *            element.
-	 * @param editor the active java editor
+	 * @param editor the editor
 	 */
-	public JavaElementImplementationHyperlink(IRegion region, SelectionDispatchAction openAction, IMethod method, boolean qualify, ITextEditor editor) {
+	public JavaElementImplementationHyperlink(IRegion region, SelectionDispatchAction openAction, IMethod method, boolean qualify, IEditorPart editor) {
 		Assert.isNotNull(openAction);
 		Assert.isNotNull(region);
 		Assert.isNotNull(method);
@@ -153,13 +152,22 @@ public class JavaElementImplementationHyperlink implements IHyperlink {
 	 * Hierarchy is opened.
 	 * </p>
 	 * 
-	 * @param openAction the action to use to open the methods
-	 * @param method the method
+	 * @param editor the editor
 	 * @param region the region of the selection
-	 * @param editor the active java editor
+	 * @param method the method
+	 * @param openAction the action to use to open the methods
 	 * @since 3.6
 	 */
 	public static void openImplementations(IEditorPart editor, IRegion region, final IMethod method, SelectionDispatchAction openAction) {
+		try {
+			if (cannotBeOverriddenMethod(method)) {
+				openAction.run(new StructuredSelection(method));
+				return;
+			}
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+			return;
+		}
 		ITypeRoot editorInput= EditorUtility.getEditorInputJavaElement(editor, false);
 
 		CompilationUnit ast= SharedASTProvider.getAST(editorInput, SharedASTProvider.WAIT_ACTIVE_ONLY, null);
@@ -195,7 +203,7 @@ public class JavaElementImplementationHyperlink implements IHyperlink {
 
 		final boolean isMethodAbstract[]= new boolean[1];
 		final String dummyString= new String();
-		final ArrayList links= new ArrayList();
+		final ArrayList<IMethod> links= new ArrayList<IMethod>();
 		IRunnableWithProgress runnable= new IRunnableWithProgress() {
 
 			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
@@ -206,6 +214,7 @@ public class JavaElementImplementationHyperlink implements IHyperlink {
 					String methodLabel= JavaElementLabels.getElementLabel(method, JavaElementLabels.DEFAULT_QUALIFIED);
 					monitor.beginTask(Messages.format(JavaEditorMessages.JavaElementImplementationHyperlink_search_method_implementors, methodLabel), 10);
 					SearchRequestor requestor= new SearchRequestor() {
+						@Override
 						public void acceptSearchMatch(SearchMatch match) throws CoreException {
 							if (match.getAccuracy() == SearchMatch.A_ACCURATE) {
 								Object element= match.getElement();
@@ -276,6 +285,20 @@ public class JavaElementImplementationHyperlink implements IHyperlink {
 	}
 
 	/**
+	 * Checks whether or not a method can be overridden.
+	 * 
+	 * @param method the method
+	 * @return <code>true</code> if the method cannot be overridden, <code>false</code> otherwise
+	 * @throws JavaModelException if this element does not exist or if an exception occurs while
+	 *             accessing its corresponding resource
+	 * @since 3.7
+	 */
+	private static boolean cannotBeOverriddenMethod(IMethod method) throws JavaModelException {
+		return JdtFlags.isPrivate(method) || JdtFlags.isFinal(method) || JdtFlags.isStatic(method) || method.isConstructor()
+				|| JdtFlags.isFinal((IMember)method.getParent());
+	}
+
+	/**
 	 * Checks whether a full type hierarchy is needed to search for implementors.
 	 * 
 	 * @param monitor the progress monitor
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementReturnTypeHyperlink.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementReturnTypeHyperlink.java
new file mode 100644
index 0000000..342e9d9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementReturnTypeHyperlink.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.javaeditor;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
+
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+import org.eclipse.jdt.internal.corext.util.Messages;
+
+import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+/**
+ * Creates a Java element return type hyperlink for methods.
+ * 
+ * @since 3.7
+ */
+public class JavaElementReturnTypeHyperlink implements IHyperlink {
+
+	private final IRegion fRegion;
+	private final SelectionDispatchAction fOpenAction;
+	private final IMethod fMethod;
+	private final boolean fQualify;
+	
+	/**
+	 * Creates a new Java element return type hyperlink for methods.
+	 * 
+	 * @param region the region of the link
+	 * @param openAction the action to use to open the Java elements
+	 * @param method the method to open
+	 * @param qualify <code>true</code> if the hyperlink text should show a qualified name for
+	 *            element.
+	 */
+	public JavaElementReturnTypeHyperlink(IRegion region, SelectionDispatchAction openAction, IMethod method, boolean qualify) {
+		Assert.isNotNull(openAction);
+		Assert.isNotNull(region);
+		Assert.isNotNull(method);
+
+		fRegion= region;
+		fOpenAction= openAction;
+		fMethod= method;
+		fQualify= qualify;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkRegion()
+	 */
+	public IRegion getHyperlinkRegion() {
+		return fRegion;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel()
+	 */
+	public String getTypeLabel() {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText()
+	 */
+	public String getHyperlinkText() {
+		if (fQualify) {
+			String methodLabel= JavaElementLabels.getElementLabel(fMethod, JavaElementLabels.ALL_FULLY_QUALIFIED);
+			return Messages.format(JavaEditorMessages.JavaElementReturnTypeHyperlink_hyperlinkText_qualified, new Object[] { methodLabel });
+		} else {
+			return JavaEditorMessages.JavaElementReturnTypeHyperlink_hyperlinkText;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#open()
+	 */
+	public void open() {
+		try {
+			String returnTypeSignature= fMethod.getReturnType();
+			int kind= Signature.getTypeSignatureKind(returnTypeSignature);
+			if (kind == Signature.ARRAY_TYPE_SIGNATURE) {
+				returnTypeSignature= Signature.getElementType(returnTypeSignature);
+			} else if (kind == Signature.CLASS_TYPE_SIGNATURE) {
+				returnTypeSignature= Signature.getTypeErasure(returnTypeSignature);
+			}
+			String returnType= Signature.toString(returnTypeSignature);
+
+			String[][] resolvedType= fMethod.getDeclaringType().resolveType(returnType);
+			if (resolvedType == null || resolvedType.length == 0) {
+				openMethodAndShowErrorInStatusLine();
+				return;
+			}
+
+			String typeName= JavaModelUtil.concatenateName(resolvedType[0][0], resolvedType[0][1]);
+			IType type= fMethod.getJavaProject().findType(typeName, (IProgressMonitor)null);
+			if (type != null) {
+				fOpenAction.run(new StructuredSelection(type));
+				return;
+			}
+			openMethodAndShowErrorInStatusLine();
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+			return;
+		}
+	}
+
+	/**
+	 * Opens and selects the method, and shows an error message in the status line.
+	 */
+	private void openMethodAndShowErrorInStatusLine() {
+		try {
+			IEditorPart editor= JavaUI.openInEditor(fMethod);
+			
+			editor.getSite().getShell().getDisplay().beep();
+			if (editor instanceof JavaEditor)
+				((JavaEditor)editor).setStatusLineErrorMessage(JavaEditorMessages.JavaElementReturnTypeHyperlink_error_msg);
+			
+		} catch (PartInitException e) {
+			JavaPlugin.log(e);
+		} catch (CoreException e) {
+			JavaPlugin.log(e);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementSuperImplementationHyperlink.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementSuperImplementationHyperlink.java
new file mode 100644
index 0000000..684bc55
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaElementSuperImplementationHyperlink.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jdt.internal.ui.javaeditor;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.JavaModelException;
+
+import org.eclipse.jdt.internal.corext.util.Messages;
+import org.eclipse.jdt.internal.corext.util.MethodOverrideTester;
+import org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache;
+
+import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+/**
+ * Java element super implementation hyperlink.
+ * 
+ * @since 3.7
+ */
+public class JavaElementSuperImplementationHyperlink implements IHyperlink {
+
+	private final SelectionDispatchAction fOpenAction;
+	private final IMethod fMethod;
+	private final boolean fQualify;
+	private IRegion fRegion;
+
+	/**
+	 * Creates a new Java element super implementation hyperlink for methods.
+	 * 
+	 * @param region the region of the link
+	 * @param openAction the action to use to open the java elements
+	 * @param method the method to open
+	 * @param qualify <code>true</code> if the hyperlink text should show a qualified name for
+	 *            element
+	 */
+	public JavaElementSuperImplementationHyperlink(IRegion region, SelectionDispatchAction openAction, IMethod method, boolean qualify) {
+		Assert.isNotNull(openAction);
+		Assert.isNotNull(region);
+		Assert.isNotNull(method);
+
+		fRegion= region;
+		fOpenAction= openAction;
+		fMethod= method;
+		fQualify= qualify;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkRegion()
+	 */
+	public IRegion getHyperlinkRegion() {
+		return fRegion;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel()
+	 */
+	public String getTypeLabel() {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText()
+	 */
+	public String getHyperlinkText() {
+		if (fQualify) {
+			String methodLabel= JavaElementLabels.getElementLabel(fMethod, JavaElementLabels.ALL_FULLY_QUALIFIED);
+			return Messages.format(JavaEditorMessages.JavaElementSuperImplementationHyperlink_hyperlinkText_qualified, new Object[] { methodLabel });
+		} else {
+			return JavaEditorMessages.JavaElementSuperImplementationHyperlink_hyperlinkText;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#open()
+	 */
+	public void open() {
+		try {
+			IMethod method= findSuperImplementation(fMethod);
+			if (method != null)
+				fOpenAction.run(new StructuredSelection(method));
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+			return;
+		}
+	}
+
+	/**
+	 * Finds the super implementation of the method.
+	 * 
+	 * @param method the method
+	 * @return the super implementation of the method if any or <code>null</code>
+	 * @throws JavaModelException if an exception occurs while creating the type hierarchy to find
+	 *             the super implementation
+	 */
+	static IMethod findSuperImplementation(IMethod method) throws JavaModelException {
+		MethodOverrideTester tester= SuperTypeHierarchyCache.getMethodOverrideTester(method.getDeclaringType());
+		return tester.findOverriddenMethod(method, false);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMarkerAnnotation.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMarkerAnnotation.java
index 7275d59..daaad9b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMarkerAnnotation.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMarkerAnnotation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -150,7 +150,7 @@ public class JavaMarkerAnnotation extends MarkerAnnotation implements IJavaAnnot
 	/*
 	 * @see IJavaAnnotation#getOverlaidIterator()
 	 */
-	public Iterator getOverlaidIterator() {
+	public Iterator<IJavaAnnotation> getOverlaidIterator() {
 		// not supported
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMoveLinesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMoveLinesAction.java
index 54e63a8..c7c164e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMoveLinesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaMoveLinesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,6 +151,7 @@ public class JavaMoveLinesAction extends TextEditorAction {
 	/*
 	 * @see org.eclipse.ui.texteditor.TextEditorAction#setEditor(org.eclipse.ui.texteditor.ITextEditor)
 	 */
+	@Override
 	public void setEditor(ITextEditor editor) {
 		Assert.isTrue(editor instanceof CompilationUnitEditor);
 		super.setEditor(editor);
@@ -295,6 +296,7 @@ public class JavaMoveLinesAction extends TextEditorAction {
 	/*
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
+	@Override
 	public void runWithEvent(Event event) {
 
 		// get involved objects
@@ -470,6 +472,7 @@ public class JavaMoveLinesAction extends TextEditorAction {
 	/*
 	 * @see org.eclipse.ui.texteditor.IUpdate#update()
 	 */
+	@Override
 	public void update() {
 		super.update();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
index 951cfbc..195765e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,14 @@
 package org.eclipse.jdt.internal.ui.javaeditor;
 
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Vector;
 
 import org.eclipse.swt.SWT;
@@ -26,11 +32,15 @@ import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.Widget;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.ListenerList;
 
 import org.eclipse.core.resources.IResource;
 
+import org.eclipse.text.edits.MalformedTreeException;
+import org.eclipse.text.edits.TextEdit;
+
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuListener;
@@ -55,7 +65,12 @@ import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.TextUtilities;
 
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IWorkbenchCommandConstants;
@@ -63,6 +78,7 @@ import org.eclipse.ui.OpenAndLinkWithEditorHelper;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.ActionContext;
 import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.handlers.CollapseAllHandler;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.model.IWorkbenchAdapter;
 import org.eclipse.ui.model.WorkbenchAdapter;
@@ -85,12 +101,15 @@ import org.eclipse.jdt.core.IElementChangedListener;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaElementDelta;
 import org.eclipse.jdt.core.IParent;
+import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.ISourceReference;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.formatter.CodeFormatter;
 
+import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 
 import org.eclipse.jdt.ui.JavaElementComparator;
@@ -101,20 +120,25 @@ import org.eclipse.jdt.ui.ProblemsLabelDecorator.ProblemsLabelChangedEvent;
 import org.eclipse.jdt.ui.actions.CCPActionGroup;
 import org.eclipse.jdt.ui.actions.CustomFiltersActionGroup;
 import org.eclipse.jdt.ui.actions.GenerateActionGroup;
+import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds;
 import org.eclipse.jdt.ui.actions.JavaSearchActionGroup;
+import org.eclipse.jdt.ui.actions.JdtActionConstants;
 import org.eclipse.jdt.ui.actions.MemberFilterActionGroup;
 import org.eclipse.jdt.ui.actions.OpenViewActionGroup;
 import org.eclipse.jdt.ui.actions.RefactorActionGroup;
+import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
 
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.actions.AbstractToggleLinkingAction;
 import org.eclipse.jdt.internal.ui.actions.CategoryFilterActionGroup;
+import org.eclipse.jdt.internal.ui.actions.CollapseAllAction;
 import org.eclipse.jdt.internal.ui.actions.CompositeActionGroup;
 import org.eclipse.jdt.internal.ui.dnd.JdtViewerDragSupport;
 import org.eclipse.jdt.internal.ui.dnd.JdtViewerDropSupport;
 import org.eclipse.jdt.internal.ui.preferences.MembersOrderPreferenceCache;
+import org.eclipse.jdt.internal.ui.util.ElementValidator;
 import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.SourcePositionComparator;
@@ -212,6 +236,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 				/*
 				 * @see java.lang.Object#toString()
 				 */
+				@Override
 				public String toString() {
 					return JavaEditorMessages.JavaOutlinePage_error_NoTopLevelType;
 				}
@@ -256,7 +281,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 					if (!initializers)
 						return children;
 
-					Vector v= new Vector();
+					Vector<IJavaElement> v= new Vector<IJavaElement>();
 					for (int i= 0; i < children.length; i++) {
 						if (matches(children[i]))
 							continue;
@@ -374,6 +399,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 				/*
 				 * @see TreeViewer#internalExpandToLevel
 				 */
+				@Override
 				protected void internalExpandToLevel(Widget node, int level) {
 					if (node instanceof Item) {
 						Item i= (Item) node;
@@ -391,6 +417,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 				/*
 				 * @see org.eclipse.jface.viewers.AbstractTreeViewer#isExpandable(java.lang.Object)
 				 */
+				@Override
 				public boolean isExpandable(Object element) {
 					if (hasFilters()) {
 						return getFilteredChildren(element).length > 0;
@@ -401,6 +428,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 				/*
 				 * @see ContentViewer#handleLabelProviderChanged(LabelProviderChangedEvent)
 				 */
+				@Override
 				protected void handleLabelProviderChanged(LabelProviderChangedEvent event) {
 					Object input= getInput();
 					if (event instanceof ProblemsLabelChangedEvent) {
@@ -458,6 +486,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 					valueChanged(checked, false);
 				}
 
+				@Override
 				public void run() {
 					valueChanged(isChecked(), true);
 				}
@@ -499,6 +528,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 			/*
 			 * @see org.eclipse.jface.action.Action#run()
 			 */
+			@Override
 			public void run() {
 				setTopLevelTypeOnly(!fTopLevelTypeOnly);
 			}
@@ -533,6 +563,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 			/**
 			 * Runs the action.
 			 */
+			@Override
 			public void run() {
 				final boolean isChecked= isChecked();
 				PreferenceConstants.getPreferenceStore().setValue(PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE, isChecked);
@@ -561,6 +592,163 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 		}
 
 
+
+	/**
+	 * Formats the code associated with the elements selected in the Outline view. The action
+	 * requires that the selection provided by the site's selection provider is of type
+	 * {@link IStructuredSelection}
+	 * 
+	 * @since 3.7
+	 */
+	private class FormatElementAction extends SelectionDispatchAction {
+
+		/**
+		 * Creates a new <code>FormatViewElementAction</code>.
+		 * 
+		 * @param site the site providing context information for this action
+		 */
+		FormatElementAction(IPageSite site) {
+			super(site);
+		}
+
+		/**
+		 * Executes the action based on the Structured Selection. This formats the non-overlapping
+		 * element(s) that have been selected in the view.
+		 * 
+		 * @param selection the current selection
+		 */
+		@Override
+		public void run(IStructuredSelection selection) {
+			ICompilationUnit compilationUnit= (ICompilationUnit)((IJavaElement)selection.getFirstElement()).getAncestor(IJavaElement.COMPILATION_UNIT);
+			if (ElementValidator.check(compilationUnit, getShell(), JavaEditorMessages.JavaEditor_FormatElementDialog_label, fEditor != null)) {
+				JavaSourceViewer javaSourceViewer= (JavaSourceViewer)fEditor.getViewer();
+				javaSourceViewer.rememberSelection();
+				javaSourceViewer.setRedraw(false);
+				try {
+					IDocument document= javaSourceViewer.getDocument();
+					IRegion[] regions= getOrderedRegionsForNonOverlappingElements(selection, document);
+					Map<String, String> formatterSettings= new HashMap<String, String>(compilationUnit.getJavaProject().getOptions(true));
+					String content= compilationUnit.getBuffer().getContents();
+					String lineDelimiter= TextUtilities.getDefaultLineDelimiter(document);
+
+					TextEdit edit= CodeFormatterUtil.reformat(CodeFormatter.K_COMPILATION_UNIT | CodeFormatter.F_INCLUDE_COMMENTS, content, regions, 0, lineDelimiter, formatterSettings);
+					edit.apply(javaSourceViewer.getDocument());
+
+				} catch (CoreException e) {
+					JavaPlugin.log(e);
+				} catch (MalformedTreeException e) {
+					JavaPlugin.log(e);
+				} catch (BadLocationException e) {
+					JavaPlugin.log(e);
+				} finally {
+					javaSourceViewer.setRedraw(true);
+					javaSourceViewer.restoreSelection();
+				}
+			}
+		}
+
+		/**
+		 * Parses the selections for non-overlapping elements and returns their source regions
+		 * ordered by their offsets.
+		 * 
+		 * @param selection the selected elements
+		 * @param document the document containing the selected elements
+		 * @return the array of ordered source regions
+		 */
+		private IRegion[] getOrderedRegionsForNonOverlappingElements(IStructuredSelection selection, IDocument document) {
+			List<?> allElements= selection.toList();
+			Iterator<?> iterator= selection.iterator();
+			ArrayList<IRegion> regions= new ArrayList<IRegion>(selection.size());
+			while (iterator.hasNext()) {
+				Object element= iterator.next();
+				if (!isElementOverlapping((IJavaElement)element, allElements)) {
+					regions.add(getElementRegion(element, document));
+				}
+			}
+			Comparator<IRegion> comparator= new Comparator<IRegion>() {
+				public int compare(IRegion region0, IRegion region1) {
+					int region1Offset= region0.getOffset();
+					int region2Offset= region1.getOffset();
+					if (region1Offset > region2Offset)
+						return 1;
+					else if (region1Offset == region2Offset)
+						return 0;
+					else
+						return -1;
+				}
+			};
+			Collections.sort(regions, comparator);
+			Object[] sortedObjects= regions.toArray();
+			IRegion[] sortedRegions= new Region[sortedObjects.length];
+			System.arraycopy(sortedObjects, 0, sortedRegions, 0, sortedObjects.length);
+			return sortedRegions;
+		}
+
+		/**
+		 * Calculates the region of the element. The start is at beginning of its first line if from
+		 * the source start to the beginning of the line is all whitespace.
+		 * 
+		 * @param element the element whose regions is to be calculated
+		 * @param document the document containing the element whose region is to be calculated
+		 * @return the region for the element
+		 */
+		private Region getElementRegion(Object element, IDocument document) {
+			try {
+				ISourceRange sourceRange= ((ISourceReference)element).getSourceRange();
+				int sourceOffset= sourceRange.getOffset();
+				int beginningOfWSOffset= sourceOffset - 1;
+				int lineAtSourceOffset= document.getLineOfOffset(sourceOffset);
+				while (beginningOfWSOffset >= 0 && Character.isWhitespace(document.getChar(beginningOfWSOffset)) && lineAtSourceOffset == document.getLineOfOffset(beginningOfWSOffset)) {
+					beginningOfWSOffset--;
+				}
+				beginningOfWSOffset++;
+				int sourceLength= sourceRange.getLength() + (sourceOffset - beginningOfWSOffset);
+				if (lineAtSourceOffset != document.getLineOfOffset(beginningOfWSOffset))
+					return new Region(document.getLineOffset(lineAtSourceOffset), sourceLength);
+				else
+					return new Region(beginningOfWSOffset, sourceLength);
+			} catch (JavaModelException e) {
+				JavaPlugin.log(e);
+			} catch (BadLocationException e) {
+				JavaPlugin.log(e);
+			}
+			return null;
+		}
+
+		/**
+		 * Checks if element has an enclosing parent among other selected elements.
+		 * 
+		 * @param element the element to be checked for overlap against all elements
+		 * @param allElements the list of all elements
+		 * @return <code>true</code> if the element has a parent in the list of all elements
+		 */
+		private boolean isElementOverlapping(IJavaElement element, List<?> allElements) {
+			element= element.getParent();
+			while (element != null) {
+				if (element instanceof ISourceReference) {
+					if (allElements.contains(element))
+						return true;
+				} else {
+					return false;
+				}
+				element= element.getParent();
+			}
+			return false;
+		}
+
+		/**
+		 * Notifies the action of a change in the Selection.
+		 * 
+		 * @param selection the new Structured Selection
+		 */
+		@Override
+		public void selectionChanged(IStructuredSelection selection) {
+			setEnabled(fEditor.isEditorInputModifiable());
+		}
+	}
+
+
+
 	/** A flag to show contents of top level type only */
 	private boolean fTopLevelTypeOnly;
 
@@ -574,12 +762,26 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 
 	private ListenerList fSelectionChangedListeners= new ListenerList(ListenerList.IDENTITY);
 	private ListenerList fPostSelectionChangedListeners= new ListenerList(ListenerList.IDENTITY);
-	private Hashtable fActions= new Hashtable();
+	private Hashtable<String, IAction> fActions= new Hashtable<String, IAction>();
 
 	private TogglePresentationAction fTogglePresentation;
 
 	private ToggleLinkingAction fToggleLinkingAction;
 
+	/**
+	 * Action for Collapse All.
+	 * 
+	 * @since 3.7
+	 */
+	private CollapseAllAction fCollapseAllAction;
+
+	/**
+	 * Action for Format Element
+	 * 
+	 * @since 3.7
+	 */
+	private FormatElementAction fFormatElement;
+
 	private CompositeActionGroup fActionGroups;
 
 	private IPropertyChangeListener fPropertyChangeListener;
@@ -625,6 +827,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 	/*
 	 * @see org.eclipse.ui.part.Page#init(org.eclipse.ui.part.IPageSite)
 	 */
+	@Override
 	public void init(IPageSite pageSite) {
 		super.init(pageSite);
 	}
@@ -696,6 +899,11 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 
 	private void registerToolbarActions(IActionBars actionBars) {
 		IToolBarManager toolBarManager= actionBars.getToolBarManager();
+
+		fCollapseAllAction= new CollapseAllAction(fOutlineViewer);
+		fCollapseAllAction.setActionDefinitionId(CollapseAllHandler.COMMAND_ID);
+		toolBarManager.add(fCollapseAllAction);
+
 		toolBarManager.add(new LexicalSortingAction());
 
 		fMemberFilterActionGroup= new MemberFilterActionGroup(fOutlineViewer, "org.eclipse.jdt.ui.JavaOutlinePage"); //$NON-NLS-1$
@@ -718,6 +926,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 	/*
 	 * @see IPage#createControl
 	 */
+	@Override
 	public void createControl(Composite parent) {
 
 		Tree tree= new Tree(parent, SWT.MULTI);
@@ -783,6 +992,11 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 
 		fActionGroups.fillActionBars(actionBars);
 
+		fFormatElement= new FormatElementAction(site);
+		fFormatElement.setActionDefinitionId(IJavaEditorActionDefinitionIds.QUICK_FORMAT);
+		site.getSelectionProvider().addSelectionChangedListener(fFormatElement);
+		actionBars.setGlobalActionHandler(JdtActionConstants.FORMAT_ELEMENT, fFormatElement);
+
 		IStatusLineManager statusLineManager= actionBars.getStatusLineManager();
 		if (statusLineManager != null) {
 			StatusBarUpdater updater= new StatusBarUpdater(statusLineManager);
@@ -793,16 +1007,19 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 
 		fOpenAndLinkWithEditorHelper= new OpenAndLinkWithEditorHelper(fOutlineViewer) {
 
+			@Override
 			protected void activate(ISelection selection) {
 				fEditor.doSelectionChanged(selection);
 				getSite().getPage().activate(fEditor);
 			}
 
+			@Override
 			protected void linkToEditor(ISelection selection) {
 				fEditor.doSelectionChanged(selection);
 
 			}
 
+			@Override
 			protected void open(ISelection selection, boolean activate) {
 				fEditor.doSelectionChanged(selection);
 				if (activate)
@@ -815,6 +1032,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 
 		IHandlerService handlerService= (IHandlerService)site.getService(IHandlerService.class);
 		handlerService.activateHandler(IWorkbenchCommandConstants.NAVIGATE_TOGGLE_LINK_WITH_EDITOR, new ActionHandler(fToggleLinkingAction));
+		handlerService.activateHandler(CollapseAllHandler.COMMAND_ID, new ActionHandler(fCollapseAllAction));
 
 
 		fOutlineViewer.setInput(fInput);
@@ -833,6 +1051,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 		site.setSelectionProvider(provider);
 	}
 
+	@Override
 	public void dispose() {
 
 		if (fEditor == null)
@@ -859,6 +1078,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 
 		fSelectionChangedListeners.clear();
 		fSelectionChangedListeners= null;
+		getSite().getSelectionProvider().removeSelectionChangedListener(fFormatElement);
 
 		fPostSelectionChangedListeners.clear();
 		fPostSelectionChangedListeners= null;
@@ -883,6 +1103,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 		super.dispose();
 	}
 
+	@Override
 	public Control getControl() {
 		if (fOutlineViewer != null)
 			return fOutlineViewer.getControl();
@@ -905,7 +1126,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 			ISelection s= fOutlineViewer.getSelection();
 			if (s instanceof IStructuredSelection) {
 				IStructuredSelection ss= (IStructuredSelection) s;
-				List elements= ss.toList();
+				List<?> elements= ss.toList();
 				if (!elements.contains(reference)) {
 					s= (reference == null ? StructuredSelection.EMPTY : new StructuredSelection(reference));
 					fOutlineViewer.setSelection(s, true);
@@ -924,7 +1145,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 
 	public IAction getAction(String actionID) {
 		Assert.isNotNull(actionID);
-		return (IAction) fActions.get(actionID);
+		return fActions.get(actionID);
 	}
 
 	/*
@@ -985,6 +1206,7 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 	/*
 	 * @see Page#setFocus()
 	 */
+	@Override
 	public void setFocus() {
 		if (fOutlineViewer != null)
 			fOutlineViewer.getControl().setFocus();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectAnnotationRulerAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectAnnotationRulerAction.java
index 76b4e02..018197c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectAnnotationRulerAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectAnnotationRulerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@ public class JavaSelectAnnotationRulerAction extends SelectMarkerRulerAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.JAVA_SELECT_MARKER_RULER_ACTION);
 	}
 
+	@Override
 	public void run() {
 		if (fStore.getBoolean(PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER))
 			return;
@@ -82,6 +83,7 @@ public class JavaSelectAnnotationRulerAction extends SelectMarkerRulerAction {
 	 * @see org.eclipse.jface.action.IAction#runWithEvent(org.eclipse.swt.widgets.Event)
 	 * @since 3.2
 	 */
+	@Override
 	public void runWithEvent(Event event) {
 		if (fAnnotation instanceof OverrideIndicatorManager.OverrideIndicator) {
 			((OverrideIndicatorManager.OverrideIndicator)fAnnotation).open();
@@ -101,6 +103,7 @@ public class JavaSelectAnnotationRulerAction extends SelectMarkerRulerAction {
 		super.run();
 	}
 
+	@Override
 	public void update() {
 		findJavaAnnotation();
 		setEnabled(true); // super.update() might change this later
@@ -135,11 +138,11 @@ public class JavaSelectAnnotationRulerAction extends SelectMarkerRulerAction {
 
 		boolean hasAssistLightbulb= fStore.getBoolean(PreferenceConstants.EDITOR_QUICKASSIST_LIGHTBULB);
 
-		Iterator iter= model.getAnnotationIterator();
+		Iterator<Annotation> iter= model.getAnnotationIterator();
 		int layer= Integer.MIN_VALUE;
 
 		while (iter.hasNext()) {
-			Annotation annotation= (Annotation) iter.next();
+			Annotation annotation= iter.next();
 			if (annotation.isMarkedDeleted())
 				continue;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectMarkerRulerAction2.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectMarkerRulerAction2.java
index 33ed0a7..2d5834b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectMarkerRulerAction2.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectMarkerRulerAction2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ public class JavaSelectMarkerRulerAction2 extends SelectAnnotationRulerAction {
 	/*
 	 * @see org.eclipse.ui.texteditor.IVerticalRulerListener#annotationDefaultSelected(org.eclipse.ui.texteditor.VerticalRulerEvent)
 	 */
+	@Override
 	public void annotationDefaultSelected(VerticalRulerEvent event) {
 		Annotation annotation= event.getSelectedAnnotation();
 		IAnnotationModel model= getAnnotationModel();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectRulerAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectRulerAction.java
index 687d7fd..91b5429 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectRulerAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSelectRulerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ public class JavaSelectRulerAction extends AbstractRulerActionDelegate {
 	/*
 	 * @see AbstractRulerActionDelegate#createAction(ITextEditor, IVerticalRulerInfo)
 	 */
+	@Override
 	protected IAction createAction(ITextEditor editor, IVerticalRulerInfo rulerInfo) {
 		return new JavaSelectAnnotationRulerAction(JavaEditorMessages.getBundleForConstructedKeys(), "JavaSelectAnnotationRulerAction.", editor, rulerInfo); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java
index 960da82..ba418b6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 
 import org.eclipse.core.runtime.Assert;
@@ -55,6 +56,8 @@ import org.eclipse.ui.texteditor.AbstractTextEditor;
 
 import org.eclipse.jdt.core.JavaCore;
 
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.text.IJavaColorConstants;
 import org.eclipse.jdt.ui.text.IJavaPartitions;
 import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration;
 
@@ -150,12 +153,13 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	 * @see org.eclipse.jface.text.source.SourceViewer#createFormattingContext()
 	 * @since 3.0
 	 */
+	@Override
 	public IFormattingContext createFormattingContext() {
 
 		// it's ok to use instance preferences here as subclasses replace
 		// with project dependent versions (see CompilationUnitEditor.AdaptedSourceViewer)
 		IFormattingContext context= new JavaFormattingContext();
-		Map map= new HashMap(JavaCore.getOptions());
+		Map<String, String> map= new HashMap<String, String>(JavaCore.getOptions());
 		context.setProperty(FormattingContextProperties.CONTEXT_PREFERENCES, map);
 
 		return context;
@@ -164,6 +168,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	/*
 	 * @see ITextOperationTarget#doOperation(int)
 	 */
+	@Override
 	public void doOperation(int operation) {
 		if (getTextWidget() == null)
 			return;
@@ -189,6 +194,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	/*
 	 * @see ITextOperationTarget#canDoOperation(int)
 	 */
+	@Override
 	public boolean canDoOperation(int operation) {
 		if (operation == SHOW_OUTLINE)
 			return fOutlinePresenter != null;
@@ -203,6 +209,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	/*
 	 * @see ISourceViewer#configure(SourceViewerConfiguration)
 	 */
+	@Override
 	public void configure(SourceViewerConfiguration configuration) {
 
 		/*
@@ -324,11 +331,40 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 
         return null;
     }
+    
+	/**
+	 * Sets the viewer's background color to the given control's background color.
+	 * The background color is <em>only</em> set if it's visibly distinct from the
+	 * default Java source text color.
+	 * 
+	 * @param control the control with the default background color
+	 * @since 3.7
+	 */
+	public void adaptBackgroundColor(Control control) {
+		// workaround for dark editor background color, see https://bugs.eclipse.org/330680
+		
+		Color defaultColor= control.getBackground();
+		float[] defaultBgHSB= defaultColor.getRGB().getHSB();
+		
+		Color javaDefaultColor= JavaUI.getColorManager().getColor(IJavaColorConstants.JAVA_DEFAULT);
+		RGB javaDefaultRGB= javaDefaultColor != null ? javaDefaultColor.getRGB() : new RGB(255, 255, 255);
+		float[] javaDefaultHSB= javaDefaultRGB.getHSB();
+		
+		if (Math.abs(defaultBgHSB[2] - javaDefaultHSB[2]) >= 0.5f) {
+			getTextWidget().setBackground(defaultColor);
+			if (fBackgroundColor != null) {
+				fBackgroundColor.dispose();
+				fBackgroundColor= null;
+			}
+		}
+	}
+
 
 	/*
 	 * @see org.eclipse.jface.text.source.ISourceViewerExtension2#unconfigure()
 	 * @since 3.0
 	 */
+	@Override
 	public void unconfigure() {
 		if (fOutlinePresenter != null) {
 			fOutlinePresenter.uninstall();
@@ -362,6 +398,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewer#rememberSelection()
 	 */
+	@Override
 	public Point rememberSelection() {
 		return super.rememberSelection();
 	}
@@ -369,6 +406,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewer#restoreSelection()
 	 */
+	@Override
 	public void restoreSelection() {
 		super.restoreSelection();
 	}
@@ -413,6 +451,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewer#createControl(org.eclipse.swt.widgets.Composite, int)
 	 */
+	@Override
 	protected void createControl(Composite parent, int styles) {
 
 		// Use LEFT_TO_RIGHT unless otherwise specified.
@@ -454,6 +493,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewer#handleDispose()
 	 */
+	@Override
 	protected void handleDispose() {
 		if (fBackspaceManager != null) {
 			fBackspaceManager.uninstall();
@@ -476,7 +516,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 		Assert.isNotNull(listener);
 
 		if (fTextPresentationListeners == null)
-			fTextPresentationListeners= new ArrayList();
+			fTextPresentationListeners= new ArrayList<ITextPresentationListener>();
 
 		fTextPresentationListeners.remove(listener);
 		fTextPresentationListeners.add(0, listener);
@@ -628,6 +668,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	 * @see #prepareDelayedProjection()
 	 * @since 3.1
 	 */
+	@Override
 	protected void setVisibleDocument(IDocument document) {
 		if (fIsSetVisibleDocumentDelayed) {
 			fIsSetVisibleDocumentDelayed= false;
@@ -650,6 +691,7 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 	 * untouched we reuse the given range as return value.
 	 * </p>
 	 */
+	@Override
 	protected StyleRange modelStyleRange2WidgetStyleRange(StyleRange range) {
 		IRegion region= modelRange2WidgetRange(new Region(range.start, range.length));
 		if (region != null) {
@@ -661,11 +703,4 @@ public class JavaSourceViewer extends ProjectionViewer implements IPropertyChang
 		return null;
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.TextViewer#getEmptySelectionChangedEventDelay()
-	 * @since 3.5
-	 */
-	protected int getEmptySelectionChangedEventDelay() {
-		return super.getEmptySelectionChangedEventDelay();
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTemplatesPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTemplatesPage.java
index bdb07e8..d964f61 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTemplatesPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTemplatesPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 Dakshinamurthy Karra, IBM Corporation and others.
+ * Copyright (c) 2007, 2011 Dakshinamurthy Karra, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,6 +91,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.AbstractTemplatesPage#insertTemplate(org.eclipse.jface.text.templates.Template, org.eclipse.jface.text.IDocument)
 	 */
+	@Override
 	protected void insertTemplate(Template template, IDocument document) {
 		if (!fJavaEditor.validateEditorInputState())
 			return;
@@ -150,6 +151,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.templates.AbstractTemplatesPage#getContextTypeRegistry()
 	 */
+	@Override
 	protected ContextTypeRegistry getContextTypeRegistry() {
 		return TEMPLATE_CONTEXT_REGISTRY;
 	}
@@ -157,6 +159,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.templates.AbstractTemplatesPage#getTemplatePreferenceStore()
 	 */
+	@Override
 	protected IPreferenceStore getTemplatePreferenceStore() {
 		return PREFERENCE_STORE;
 	}
@@ -164,6 +167,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.templates.AbstractTemplatesPage#getTemplateStore()
 	 */
+	@Override
 	public TemplateStore getTemplateStore() {
 		return TEMPLATE_STORE;
 	}
@@ -171,6 +175,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.TextEditorTemplatesPage#isValidTemplate(org.eclipse.jface.text.templates.Template, int, int)
 	 */
+	@Override
 	protected boolean isValidTemplate(IDocument document, Template template, int offset, int length) {
 		String[] contextIds= getContextTypeIds(document, offset);
 		for (int i= 0; i < contextIds.length; i++) {
@@ -185,6 +190,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.templates.TextEditorTemplatesPage#createPatternViewer(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected SourceViewer createPatternViewer(Composite parent) {
 		IDocument document= new Document();
 		JavaTextTools tools= JavaPlugin.getDefault().getJavaTextTools();
@@ -211,6 +217,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.templates.AbstractTemplatesPage#getImageForTemplate(org.eclipse.jface.text.templates.Template)
 	 */
+	@Override
 	protected Image getImage(Template template) {
 		String contextId= template.getContextTypeId();
 		if (SWTContextType.ID_ALL.equals(contextId) || SWTContextType.ID_STATEMENTS.equals(contextId) || SWTContextType.ID_MEMBERS.equals(contextId))
@@ -221,6 +228,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.TextEditorTemplatesPage#editTemplate(org.eclipse.jface.text.templates.Template, boolean, boolean)
 	 */
+	@Override
 	protected Template editTemplate(Template template, boolean edit, boolean isNameModifiable) {
 		EditTemplateDialog dialog= new EditTemplateDialog(getSite().getShell(), template, edit, isNameModifiable, getContextTypeRegistry());
 		if (dialog.open() == Window.OK)
@@ -231,6 +239,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.TextEditorTemplatesPage#updatePatternViewer(org.eclipse.jface.text.templates.Template)
 	 */
+	@Override
 	protected void updatePatternViewer(Template template) {
 		if (template == null) {
 			getPatternViewer().getDocument().set(""); //$NON-NLS-1$
@@ -256,6 +265,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.texteditor.templates.AbstractTemplatesPage#getPreferencePageId()
 	 */
+	@Override
 	protected String getPreferencePageId() {
 		return PREFERENCE_PAGE_ID;
 	}
@@ -342,6 +352,7 @@ public class JavaTemplatesPage extends AbstractTemplatesPage {
 	 * @param offset the offset
 	 * @return an array of valid context id
 	 */
+	@Override
 	protected String[] getContextTypeIds(IDocument document, int offset) {
 		try {
 			String partition= TextUtilities.getContentType(document, IJavaPartitions.JAVA_PARTITIONING, offset, true);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTextSelection.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTextSelection.java
index 754a052..36e6cab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTextSelection.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTextSelection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
+import org.eclipse.jdt.core.dom.Annotation;
 import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -60,6 +61,20 @@ public class JavaTextSelection extends TextSelection {
 	private boolean fInVariableInitializer;
 
 	/**
+	 * Indicates whether the selection node has been checked to be of type <code>Annotation</code>.
+	 * 
+	 * @since 3.7
+	 */
+	private boolean fInAnnotationRequested;
+
+	/**
+	 * Indicates whether selection node is of type <code>Annotation</code>.
+	 * 
+	 * @since 3.7
+	 */
+	private boolean fInAnnotation;
+
+	/**
 	 * Creates a new text selection at the given offset and length.
 	 * @param element the root element
 	 * @param document the document
@@ -213,6 +228,30 @@ public class JavaTextSelection extends TextSelection {
 		return fInVariableInitializer;
 	}
 
+	/**
+	 * Resolves the selected nodes and returns <code>true</code> if the node or any of its ancestors
+	 * is of type <code>Annotation</code>, <code>false</code> otherwise.
+	 * 
+	 * @return <code>true</code> if the node or any of its ancestors is of type
+	 *         <code>Annotation</code>, <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	public boolean resolveInAnnotation() {
+		if (fInAnnotationRequested)
+			return fInAnnotation;
+		fInAnnotationRequested= true;
+		resolveSelectedNodes();
+		ASTNode node= getStartNode();
+		while (node != null) {
+			if (node instanceof Annotation) {
+				fInAnnotation= true;
+				break;
+			}
+			node= node.getParent();
+		}
+		return fInAnnotation;
+	}
+
 	private ASTNode getStartNode() {
 		if (fSelectedNodes != null && fSelectedNodes.length > 0)
 			return fSelectedNodes[0];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
index fa052c2..64f099a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -163,7 +163,7 @@ public class NLSKeyHyperlink implements IHyperlink {
 			FindReplaceDocumentAdapter finder= new FindReplaceDocumentAdapter(document);
 			PropertyKeyHyperlinkDetector detector= new PropertyKeyHyperlinkDetector();
 			detector.setContext(editor);
-			String key= PropertyFileDocumentModel.unwindEscapeChars(keyName);
+			String key= PropertyFileDocumentModel.escape(keyName, false);
 			int offset= document.getLength() - 1;
 			try {
 				while (!found && offset >= 0) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/OverrideIndicatorManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/OverrideIndicatorManager.java
index 34f263b..b0cb573 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/OverrideIndicatorManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/OverrideIndicatorManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.jdt.internal.ui.javaeditor;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
@@ -170,12 +171,13 @@ class OverrideIndicatorManager implements IJavaReconcilingListener {
 		if (ast == null || progressMonitor.isCanceled())
 			return;
 
-		final Map annotationMap= new HashMap(50);
+		final Map<Annotation, Position> annotationMap= new HashMap<Annotation, Position>(50);
 
 		ast.accept(new ASTVisitor(false) {
 			/*
 			 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodDeclaration)
 			 */
+			@Override
 			public boolean visit(MethodDeclaration node) {
 				IMethodBinding binding= node.resolveBinding();
 				if (binding != null) {
@@ -213,13 +215,13 @@ class OverrideIndicatorManager implements IJavaReconcilingListener {
 				((IAnnotationModelExtension)fAnnotationModel).replaceAnnotations(fOverrideAnnotations, annotationMap);
 			} else {
 				removeAnnotations();
-				Iterator iter= annotationMap.entrySet().iterator();
+				Iterator<Entry<Annotation, Position>> iter= annotationMap.entrySet().iterator();
 				while (iter.hasNext()) {
-					Map.Entry mapEntry= (Map.Entry)iter.next();
-					fAnnotationModel.addAnnotation((Annotation)mapEntry.getKey(), (Position)mapEntry.getValue());
+					Entry<Annotation, Position> mapEntry= iter.next();
+					fAnnotationModel.addAnnotation(mapEntry.getKey(), mapEntry.getValue());
 				}
 			}
-			fOverrideAnnotations= (Annotation[])annotationMap.keySet().toArray(new Annotation[annotationMap.keySet().size()]);
+			fOverrideAnnotations= annotationMap.keySet().toArray(new Annotation[annotationMap.keySet().size()]);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/RemoveOccurrenceAnnotations.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/RemoveOccurrenceAnnotations.java
index 869be05..7882e3c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/RemoveOccurrenceAnnotations.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/RemoveOccurrenceAnnotations.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ class RemoveOccurrenceAnnotations extends Action {
 	/*
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		fEditor.removeOccurrenceAnnotations();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java
index 1935a89..eb3b1da 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -171,6 +171,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 		/*
 		 * @see org.eclipse.jface.text.Position#setLength(int)
 		 */
+		@Override
 		public void setLength(int length) {
 			synchronized (fLock) {
 				super.setLength(length);
@@ -180,6 +181,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 		/*
 		 * @see org.eclipse.jface.text.Position#setOffset(int)
 		 */
+		@Override
 		public void setOffset(int offset) {
 			synchronized (fLock) {
 				super.setOffset(offset);
@@ -189,6 +191,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 		/*
 		 * @see org.eclipse.jface.text.Position#delete()
 		 */
+		@Override
 		public void delete() {
 			synchronized (fLock) {
 				super.delete();
@@ -198,6 +201,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 		/*
 		 * @see org.eclipse.jface.text.Position#undelete()
 		 */
+		@Override
 		public void undelete() {
 			synchronized (fLock) {
 				super.undelete();
@@ -242,6 +246,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 		/*
 		 * @see org.eclipse.jface.text.Region#equals(java.lang.Object)
 		 */
+		@Override
 		public boolean equals(Object o) {
 			return super.equals(o) && o instanceof HighlightedRange && fKey.equals(((HighlightedRange)o).getKey());
 		}
@@ -249,6 +254,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 		/*
 		 * @see org.eclipse.jface.text.Region#hashCode()
 		 */
+		@Override
 		public int hashCode() {
 			return super.hashCode() | fKey.hashCode();
 		}
@@ -343,7 +349,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 	 * @return the hard-coded positions
 	 */
 	private HighlightedPosition[] createHardcodedPositions() {
-		List positions= new ArrayList();
+		List<HighlightedPosition> positions= new ArrayList<HighlightedPosition>();
 		for (int i= 0; i < fHardcodedRanges.length; i++) {
 			HighlightedRange range= null;
 			Highlighting hl= null;
@@ -358,7 +364,7 @@ public class SemanticHighlightingManager implements IPropertyChangeListener {
 			if (range != null)
 				positions.add(fPresenter.createHighlightedPosition(range.getOffset(), range.getLength(), hl));
 		}
-		return (HighlightedPosition[]) positions.toArray(new HighlightedPosition[positions.size()]);
+		return positions.toArray(new HighlightedPosition[positions.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java
index 1bd2fa9..2063c37 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -234,7 +234,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	private JavaPresentationReconciler fPresentationReconciler;
 
 	/** UI's current highlighted positions - can contain <code>null</code> elements */
-	private List fPositions= new ArrayList();
+	private List<Position> fPositions= new ArrayList<Position>();
 	/** UI position lock */
 	private Object fPositionLock= new Object();
 
@@ -265,7 +265,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 *
 	 * @param list The list
 	 */
-	public void addAllPositions(List list) {
+	public void addAllPositions(List<Position> list) {
 		synchronized (fPositionLock) {
 			list.addAll(fPositions);
 		}
@@ -281,7 +281,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 * @param removedPositions the removed positions
 	 * @return the text presentation or <code>null</code>, if reconciliation should be canceled
 	 */
-	public TextPresentation createPresentation(List addedPositions, List removedPositions) {
+	public TextPresentation createPresentation(List<Position> addedPositions, List<Position> removedPositions) {
 		JavaSourceViewer sourceViewer= fSourceViewer;
 		JavaPresentationReconciler presentationReconciler= fPresentationReconciler;
 		if (sourceViewer == null || presentationReconciler == null)
@@ -297,13 +297,13 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 		int minStart= Integer.MAX_VALUE;
 		int maxEnd= Integer.MIN_VALUE;
 		for (int i= 0, n= removedPositions.size(); i < n; i++) {
-			Position position= (Position) removedPositions.get(i);
+			Position position= removedPositions.get(i);
 			int offset= position.getOffset();
 			minStart= Math.min(minStart, offset);
 			maxEnd= Math.max(maxEnd, offset + position.getLength());
 		}
 		for (int i= 0, n= addedPositions.size(); i < n; i++) {
-			Position position= (Position) addedPositions.get(i);
+			Position position= addedPositions.get(i);
 			int offset= position.getOffset();
 			minStart= Math.min(minStart, offset);
 			maxEnd= Math.max(maxEnd, offset + position.getLength());
@@ -329,7 +329,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 * @param removedPositions the removed positions
 	 * @return the runnable or <code>null</code>, if reconciliation should be canceled
 	 */
-	public Runnable createUpdateRunnable(final TextPresentation textPresentation, List addedPositions, List removedPositions) {
+	public Runnable createUpdateRunnable(final TextPresentation textPresentation, List<Position> addedPositions, List<Position> removedPositions) {
 		if (fSourceViewer == null || textPresentation == null)
 			return null;
 
@@ -379,11 +379,11 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 
 		String positionCategory= getPositionCategory();
 
-		List removedPositionsList= Arrays.asList(removedPositions);
+		List<HighlightedPosition> removedPositionsList= Arrays.asList(removedPositions);
 
 		try {
 			synchronized (fPositionLock) {
-				List oldPositions= fPositions;
+				List<Position> oldPositions= fPositions;
 				int newSize= Math.max(fPositions.size() + addedPositions.length - removedPositions.length, 10);
 
 				/*
@@ -393,7 +393,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 				 * removed on the fly. The second of two is the list of added positions. The result
 				 * is stored in newPositions.
 				 */
-				List newPositions= new ArrayList(newSize);
+				List<Position> newPositions= new ArrayList<Position>(newSize);
 				Position position= null;
 				Position addedPosition= null;
 				for (int i= 0, j= 0, n= oldPositions.size(), m= addedPositions.length; i < n || position != null || j < m || addedPosition != null;) {
@@ -401,7 +401,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 
 					// a) find the next non-deleted Position from the old list
 					while (position == null && i < n) {
-						position= (Position) oldPositions.get(i++);
+						position= oldPositions.get(i++);
 						if (position.isDeleted() || contain(removedPositionsList, position)) {
 							document.removePosition(positionCategory, position);
 							position= null;
@@ -465,7 +465,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 * @param position the position
 	 * @return <code>true</code> iff the positions contain the position
 	 */
-	private boolean contain(List positions, Position position) {
+	private boolean contain(List<? extends Position> positions, Position position) {
 		return indexOf(positions, position) != -1;
 	}
 
@@ -475,7 +475,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 * @param position the position
 	 * @return the index
 	 */
-	private int indexOf(List positions, Position position) {
+	private int indexOf(List<? extends Position> positions, Position position) {
 		int index= computeIndexAtOffset(positions, position.getOffset());
 		int size= positions.size();
 		while (index < size) {
@@ -503,12 +503,12 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 * @param offset the offset
 	 * @return the index of the last position with an offset greater than the given offset
 	 */
-	private int computeIndexAfterOffset(List positions, int offset) {
+	private int computeIndexAfterOffset(List<Position> positions, int offset) {
 		int i= -1;
 		int j= positions.size();
 		while (j - i > 1) {
 			int k= (i + j) >> 1;
-			Position position= (Position) positions.get(k);
+			Position position= positions.get(k);
 			if (position.getOffset() > offset)
 				j= k;
 			else
@@ -524,12 +524,12 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 * @param offset the offset
 	 * @return the index of the last position with an offset equal or greater than the given offset
 	 */
-	private int computeIndexAtOffset(List positions, int offset) {
+	private int computeIndexAtOffset(List<? extends Position> positions, int offset) {
 		int i= -1;
 		int j= positions.size();
 		while (j - i > 1) {
 			int k= (i + j) >> 1;
-			Position position= (Position) positions.get(k);
+			Position position= positions.get(k);
 			if (position.getOffset() >= offset)
 				j= k;
 			else
@@ -545,14 +545,14 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 		IRegion region= textPresentation.getExtent();
 		int i= computeIndexAtOffset(fPositions, region.getOffset()), n= computeIndexAtOffset(fPositions, region.getOffset() + region.getLength());
 		if (n - i > 2) {
-			List ranges= new ArrayList(n - i);
+			List<StyleRange> ranges= new ArrayList<StyleRange>(n - i);
 			for (; i < n; i++) {
 				HighlightedPosition position= (HighlightedPosition) fPositions.get(i);
 				if (!position.isDeleted())
 					ranges.add(position.createStyleRange());
 			}
 			StyleRange[] array= new StyleRange[ranges.size()];
-			array= (StyleRange[]) ranges.toArray(array);
+			array= ranges.toArray(array);
 			textPresentation.replaceStyleRanges(array);
 		} else {
 			for (; i < n; i++) {
@@ -691,7 +691,7 @@ public class SemanticHighlightingPresenter implements ITextPresentationListener,
 	 */
 	private void invalidateTextPresentation() {
 		for (int i= 0, n= fPositions.size(); i < n; i++) {
-			Position position= (Position) fPositions.get(i);
+			Position position= fPositions.get(i);
 			fSourceViewer.invalidateTextPresentation(position.getOffset(), position.getLength());
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
index eb4e67f..67c8180 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 		/*
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visitNode(org.eclipse.jdt.core.dom.ASTNode)
 		 */
+		@Override
 		protected boolean visitNode(ASTNode node) {
 			if ((node.getFlags() & ASTNode.MALFORMED) == ASTNode.MALFORMED) {
 				retainPositions(node.getStartPosition(), node.getLength());
@@ -82,6 +83,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.BooleanLiteral)
 		 */
+		@Override
 		public boolean visit(BooleanLiteral node) {
 			return visitLiteral(node);
 		}
@@ -89,6 +91,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.CharacterLiteral)
 		 */
+		@Override
 		public boolean visit(CharacterLiteral node) {
 			return visitLiteral(node);
 		}
@@ -96,6 +99,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.NumberLiteral)
 		 */
+		@Override
 		public boolean visit(NumberLiteral node) {
 			return visitLiteral(node);
 		}
@@ -120,6 +124,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.ConstructorInvocation)
 		 * @since 3.5
 		 */
+		@Override
 		public boolean visit(ConstructorInvocation node) {
 			// XXX Hack for performance reasons (should loop over fJobSemanticHighlightings can call consumes(*))
 			if (fJobDeprecatedMemberHighlighting != null) {
@@ -138,6 +143,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 		 * @see org.eclipse.jdt.internal.corext.dom.GenericVisitor#visit(org.eclipse.jdt.core.dom.ConstructorInvocation)
 		 * @since 3.5
 		 */
+		@Override
 		public boolean visit(SuperConstructorInvocation node) {
 			// XXX Hack for performance reasons (should loop over fJobSemanticHighlightings can call consumes(*))
 			if (fJobDeprecatedMemberHighlighting != null) {
@@ -155,6 +161,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SimpleName)
 		 */
+		@Override
 		public boolean visit(SimpleName node) {
 			fToken.update(node);
 			for (int i= 0, n= fJobSemanticHighlightings.length; i < n; i++) {
@@ -230,9 +237,9 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 	private Highlighting[] fHighlightings;
 
 	/** Background job's added highlighted positions */
-	private List fAddedPositions= new ArrayList();
+	private List<Position> fAddedPositions= new ArrayList<Position>();
 	/** Background job's removed highlighted positions */
-	private List fRemovedPositions= new ArrayList();
+	private List<Position> fRemovedPositions= new ArrayList<Position>();
 	/** Number of removed positions */
 	private int fNOfRemovedPositions;
 
@@ -362,10 +369,10 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 
 		for (int i= 0, n= subtrees.length; i < n; i++)
 			subtrees[i].accept(fCollector);
-		List oldPositions= fRemovedPositions;
-		List newPositions= new ArrayList(fNOfRemovedPositions);
+		List<Position> oldPositions= fRemovedPositions;
+		List<Position> newPositions= new ArrayList<Position>(fNOfRemovedPositions);
 		for (int i= 0, n= oldPositions.size(); i < n; i ++) {
-			Object current= oldPositions.get(i);
+			Position current= oldPositions.get(i);
 			if (current != null)
 				newPositions.add(current);
 		}
@@ -379,7 +386,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 	 * @param addedPositions the added positions
 	 * @param removedPositions the removed positions
 	 */
-	private void updatePresentation(TextPresentation textPresentation, List addedPositions, List removedPositions) {
+	private void updatePresentation(TextPresentation textPresentation, List<Position> addedPositions, List<Position> removedPositions) {
 		Runnable runnable= fJobPresenter.createUpdateRunnable(textPresentation, addedPositions, removedPositions);
 		if (runnable == null)
 			return;
@@ -472,6 +479,7 @@ public class SemanticHighlightingReconciler implements IJavaReconcilingListener,
 
 			if (element != null) {
 				fJob= new Job(JavaEditorMessages.SemanticHighlighting_job) {
+					@Override
 					protected IStatus run(IProgressMonitor monitor) {
 						if (oldJob != null) {
 							try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java
index 4796f9d..2c889aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightings.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Andre Soereng <andreis at fast.no> - [syntax highlighting] highlight numbers - https://bugs.eclipse.org/bugs/show_bug.cgi?id=63573
+ *     Björn Michael <b.michael at gmx.de> - [syntax highlighting] Syntax coloring for abstract classes - https://bugs.eclipse.org/331311
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.javaeditor;
 
@@ -183,6 +184,13 @@ public class SemanticHighlightings {
 	public static final String NUMBER="number"; //$NON-NLS-1$
 
 	/**
+	 * A named preference part that controls the highlighting of abstract classes.
+	 *
+	 * @since 3.7
+	 */
+	public static final String ABSTRACT_CLASS="abstractClass"; //$NON-NLS-1$
+
+	/**
 	 * Semantic highlightings
 	 */
 	private static SemanticHighlighting[] fgSemanticHighlightings;
@@ -195,6 +203,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return STATIC_FINAL_FIELD;
 		}
@@ -202,6 +211,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -209,6 +219,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -216,6 +227,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -223,6 +235,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -230,6 +243,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_staticFinalField;
 		}
@@ -237,6 +251,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			IBinding binding= token.getBinding();
 			return binding != null && binding.getKind() == IBinding.VARIABLE && ((IVariableBinding)binding).isField() && (binding.getModifiers() & (Modifier.FINAL | Modifier.STATIC)) == (Modifier.FINAL | Modifier.STATIC);
@@ -251,6 +266,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return STATIC_FIELD;
 		}
@@ -258,6 +274,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 192);
 		}
@@ -265,6 +282,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -272,6 +290,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return true;
 		}
@@ -279,6 +298,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return true;
 		}
@@ -286,6 +306,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_staticField;
 		}
@@ -293,6 +314,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			IBinding binding= token.getBinding();
 			return binding != null && binding.getKind() == IBinding.VARIABLE && ((IVariableBinding)binding).isField() && (binding.getModifiers() & Modifier.STATIC) == Modifier.STATIC;
@@ -307,6 +329,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return FIELD;
 		}
@@ -314,6 +337,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 192);
 		}
@@ -321,6 +345,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -328,6 +353,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -335,6 +361,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return true;
 		}
@@ -342,6 +369,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_field;
 		}
@@ -349,6 +377,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			IBinding binding= token.getBinding();
 			return binding != null && binding.getKind() == IBinding.VARIABLE && ((IVariableBinding)binding).isField();
@@ -363,6 +392,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return AUTOBOXING;
 		}
@@ -370,6 +400,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(171, 48, 0);
 		}
@@ -377,6 +408,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -384,6 +416,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -391,6 +424,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -398,6 +432,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_autoboxing;
 		}
@@ -405,6 +440,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumesLiteral(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumesLiteral(SemanticToken token) {
 			return isAutoUnBoxing(token.getLiteral());
 		}
@@ -412,6 +448,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			return isAutoUnBoxing(token.getNode());
 		}
@@ -460,6 +497,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return METHOD_DECLARATION;
 		}
@@ -467,6 +505,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -474,6 +513,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return true;
 		}
@@ -481,6 +521,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -488,6 +529,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -495,6 +537,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_methodDeclaration;
 		}
@@ -502,6 +545,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#isMatched(org.eclipse.jdt.core.dom.ASTNode)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			StructuralPropertyDescriptor location= token.getNode().getLocationInParent();
 			return location == MethodDeclaration.NAME_PROPERTY || location == AnnotationTypeMemberDeclaration.NAME_PROPERTY;
@@ -516,6 +560,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return STATIC_METHOD_INVOCATION;
 		}
@@ -523,6 +568,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -530,6 +576,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -537,6 +584,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return true;
 		}
@@ -544,6 +592,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return true;
 		}
@@ -551,6 +600,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_staticMethodInvocation;
 		}
@@ -558,6 +608,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#isMatched(org.eclipse.jdt.core.dom.ASTNode)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			SimpleName node= token.getNode();
 			if (node.isDeclaration())
@@ -577,6 +628,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return ANNOTATION_ELEMENT_REFERENCE;
 		}
@@ -584,6 +636,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -591,6 +644,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -598,6 +652,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -605,6 +660,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -612,6 +668,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_annotationElementReference;
 		}
@@ -619,6 +676,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#isMatched(org.eclipse.jdt.core.dom.ASTNode)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			SimpleName node= token.getNode();
 			if (node.getParent() instanceof MemberValuePair) {
@@ -640,6 +698,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return ABSTRACT_METHOD_INVOCATION;
 		}
@@ -647,6 +706,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -654,6 +714,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -661,6 +722,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -668,6 +730,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -675,6 +738,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_abstractMethodInvocation;
 		}
@@ -682,6 +746,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#isMatched(org.eclipse.jdt.core.dom.ASTNode)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			SimpleName node= token.getNode();
 			if (node.isDeclaration())
@@ -711,6 +776,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return INHERITED_METHOD_INVOCATION;
 		}
@@ -718,6 +784,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -725,6 +792,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -732,6 +800,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -739,6 +808,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -746,6 +816,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_inheritedMethodInvocation;
 		}
@@ -753,6 +824,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#isMatched(org.eclipse.jdt.core.dom.ASTNode)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			SimpleName node= token.getNode();
 			if (node.isDeclaration())
@@ -779,6 +851,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return METHOD;
 		}
@@ -786,6 +859,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -793,6 +867,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -800,6 +875,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -807,6 +883,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -814,6 +891,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_method;
 		}
@@ -821,6 +899,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#isMatched(org.eclipse.jdt.core.dom.ASTNode)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			IBinding binding= getMethodBinding(token);
 			return binding != null && binding.getKind() == IBinding.METHOD;
@@ -880,6 +959,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return LOCAL_VARIABLE_DECLARATION;
 		}
@@ -887,6 +967,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -894,6 +975,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -901,6 +983,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -908,6 +991,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -915,6 +999,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_localVariableDeclaration;
 		}
@@ -922,6 +1007,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			SimpleName node= token.getNode();
 			StructuralPropertyDescriptor location= node.getLocationInParent();
@@ -944,6 +1030,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return LOCAL_VARIABLE;
 		}
@@ -951,6 +1038,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -958,6 +1046,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -965,6 +1054,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -972,6 +1062,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -979,6 +1070,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_localVariable;
 		}
@@ -986,6 +1078,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			IBinding binding= token.getBinding();
 			if (binding != null && binding.getKind() == IBinding.VARIABLE && !((IVariableBinding) binding).isField()) {
@@ -1004,6 +1097,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return PARAMETER_VARIABLE;
 		}
@@ -1011,6 +1105,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -1018,6 +1113,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1025,6 +1121,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1032,6 +1129,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -1039,6 +1137,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_parameterVariable;
 		}
@@ -1046,6 +1145,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			IBinding binding= token.getBinding();
 			if (binding != null && binding.getKind() == IBinding.VARIABLE && !((IVariableBinding) binding).isField()) {
@@ -1064,6 +1164,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return DEPRECATED_MEMBER;
 		}
@@ -1071,6 +1172,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 0, 0);
 		}
@@ -1078,6 +1180,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1085,6 +1188,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1093,6 +1197,7 @@ public class SemanticHighlightings {
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isStrikethroughByDefault()
 		 * @since 3.1
 		 */
+		@Override
 		public boolean isStrikethroughByDefault() {
 			return true;
 		}
@@ -1100,6 +1205,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return true;
 		}
@@ -1107,6 +1213,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_deprecatedMember;
 		}
@@ -1114,9 +1221,28 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			IBinding binding= getMethodBinding(token);
-			return binding != null ? binding.isDeprecated() : false;
+			if (binding != null) {
+				if (binding.isDeprecated())
+					return true;
+				if (binding instanceof IMethodBinding) {
+					IMethodBinding methodBinding= (IMethodBinding) binding;
+					if (methodBinding.isConstructor() && methodBinding.getJavaElement() == null) {
+						ITypeBinding declaringClass= methodBinding.getDeclaringClass();
+						if (declaringClass.isAnonymous()) {
+							ITypeBinding[] interfaces= declaringClass.getInterfaces();
+							if (interfaces.length > 0)
+								return interfaces[0].isDeprecated();
+							else
+								return declaringClass.getSuperclass().isDeprecated();
+						}
+						return declaringClass.isDeprecated();
+					}
+				}
+			}
+			return false;
 		}
 
 		/**
@@ -1174,6 +1300,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return TYPE_VARIABLE;
 		}
@@ -1181,6 +1308,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(100, 70, 50);
 		}
@@ -1188,6 +1316,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return true;
 		}
@@ -1195,6 +1324,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1202,6 +1332,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -1209,6 +1340,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_typeVariables;
 		}
@@ -1216,6 +1348,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 
 			// 1: match types in type parameter lists
@@ -1239,6 +1372,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return CLASS;
 		}
@@ -1246,6 +1380,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(0, 80, 50);
 		}
@@ -1253,6 +1388,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1260,6 +1396,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1267,6 +1404,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -1274,6 +1412,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_classes;
 		}
@@ -1281,6 +1420,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 
 			// 1: match types
@@ -1311,6 +1451,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return ENUM;
 		}
@@ -1318,6 +1459,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(100, 70, 50);
 		}
@@ -1325,6 +1467,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1332,6 +1475,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1339,6 +1483,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -1346,6 +1491,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_enums;
 		}
@@ -1353,6 +1499,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 
 			// 1: match types
@@ -1384,6 +1531,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return INTERFACE;
 		}
@@ -1391,6 +1539,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(50, 63, 112);
 		}
@@ -1398,6 +1547,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1405,6 +1555,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1412,6 +1563,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -1419,6 +1571,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_interfaces;
 		}
@@ -1426,6 +1579,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 
 			// 1: match types
@@ -1456,6 +1610,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return ANNOTATION;
 		}
@@ -1463,6 +1618,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(100, 100, 100);
 		}
@@ -1470,6 +1626,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1477,6 +1634,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1484,6 +1642,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return true; // as it replaces the syntax based highlighting which is always enabled
 		}
@@ -1491,6 +1650,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_annotations;
 		}
@@ -1498,6 +1658,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 
 			// 1: match types
@@ -1529,6 +1690,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return TYPE_ARGUMENT;
 		}
@@ -1536,6 +1698,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(13, 100, 0);
 		}
@@ -1543,6 +1706,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1550,6 +1714,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1557,6 +1722,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -1564,6 +1730,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_typeArguments;
 		}
@@ -1571,6 +1738,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 
 			// 1: match types
@@ -1598,6 +1766,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
 		 */
+		@Override
 		public String getPreferenceKey() {
 			return NUMBER;
 		}
@@ -1605,6 +1774,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
 		 */
+		@Override
 		public RGB getDefaultDefaultTextColor() {
 			return new RGB(42, 0, 255);
 		}
@@ -1612,6 +1782,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
 		 */
+		@Override
 		public boolean isBoldByDefault() {
 			return false;
 		}
@@ -1619,6 +1790,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
 		 */
+		@Override
 		public boolean isItalicByDefault() {
 			return false;
 		}
@@ -1626,6 +1798,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
 		 */
+		@Override
 		public boolean isEnabledByDefault() {
 			return false;
 		}
@@ -1633,6 +1806,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
 		 */
+		@Override
 		public String getDisplayName() {
 			return JavaEditorMessages.SemanticHighlighting_numbers;
 		}
@@ -1640,6 +1814,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumes(SemanticToken token) {
 			return false;
 		}
@@ -1647,6 +1822,7 @@ public class SemanticHighlightings {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumesLiteral(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
 		 */
+		@Override
 		public boolean consumesLiteral(SemanticToken token) {
 			Expression expr= token.getLiteral();
 			return expr != null && expr.getNodeType() == ASTNode.NUMBER_LITERAL;
@@ -1654,6 +1830,91 @@ public class SemanticHighlightings {
 	}
 
 	/**
+	 * Semantic highlighting for classes.
+	 * @since 3.7
+	 */
+	private static final class AbstractClassHighlighting extends SemanticHighlighting {
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#getPreferenceKey()
+		 */
+		@Override
+		public String getPreferenceKey() {
+			return ABSTRACT_CLASS;
+		}
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextColor()
+		 */
+		@Override
+		public RGB getDefaultDefaultTextColor() {
+			return new RGB(139, 136, 22);
+		}
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDefaultTextStyleBold()
+		 */
+		@Override
+		public boolean isBoldByDefault() {
+			return false;
+		}
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isItalicByDefault()
+		 */
+		@Override
+		public boolean isItalicByDefault() {
+			return false;
+		}
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#isEnabledByDefault()
+		 */
+		@Override
+		public boolean isEnabledByDefault() {
+			return false;
+		}
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.javaeditor.ISemanticHighlighting#getDisplayName()
+		 */
+		@Override
+		public String getDisplayName() {
+			return JavaEditorMessages.SemanticHighlighting_abstractClasses;
+		}
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting#consumes(org.eclipse.jdt.internal.ui.javaeditor.SemanticToken)
+		 */
+		@Override
+		public boolean consumes(SemanticToken token) {
+
+			// 1: match types
+			SimpleName name= token.getNode();
+			ASTNode node= name.getParent();
+			int nodeType= node.getNodeType();
+			if (nodeType != ASTNode.SIMPLE_TYPE && nodeType != ASTNode.THIS_EXPRESSION && nodeType != ASTNode.QUALIFIED_TYPE  && nodeType != ASTNode.QUALIFIED_NAME && nodeType != ASTNode.TYPE_DECLARATION && nodeType != ASTNode.METHOD_INVOCATION)
+				return false;
+			while (nodeType == ASTNode.QUALIFIED_NAME) {
+				node= node.getParent();
+				nodeType= node.getNodeType();
+				if (nodeType == ASTNode.IMPORT_DECLARATION)
+					return false;
+			}
+
+			// 2: match classes
+			IBinding binding= token.getBinding();
+			if (binding instanceof ITypeBinding) {
+				ITypeBinding typeBinding= (ITypeBinding) binding;
+				// see also ClassHighlighting
+				return typeBinding.isClass() && (typeBinding.getModifiers() & Modifier.ABSTRACT) != 0;
+			}
+
+			return false;
+		}
+	}
+
+	/**
 	 * A named preference that controls the given semantic highlighting's color.
 	 *
 	 * @param semanticHighlighting the semantic highlighting
@@ -1737,6 +1998,7 @@ public class SemanticHighlightings {
 				new TypeVariableHighlighting(), // before type arguments!
 				new MethodHighlighting(), // before types to get ctors
 				new TypeArgumentHighlighting(), // before other types
+				new AbstractClassHighlighting(), // before classes
 				new ClassHighlighting(),
 				new EnumHighlighting(),
 				new AnnotationHighlighting(), // before interfaces
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ShowInBreadcrumbAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ShowInBreadcrumbAction.java
index 11cc7e7..921a7f2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ShowInBreadcrumbAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ShowInBreadcrumbAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,9 @@ package org.eclipse.jdt.internal.ui.javaeditor;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.preference.IPreferenceStore;
 
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.IBreadcrumb;
 
@@ -31,11 +34,13 @@ public class ShowInBreadcrumbAction extends Action {
 		super(JavaEditorMessages.ShowInBreadcrumbAction_label);
 		fEditor= editor;
 		setEnabled(true);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.SHOW_IN_BREADCRUMB_ACTION);
 	}
 
 	/*
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		IBreadcrumb breadcrumb= fEditor.getBreadcrumb();
 		if (breadcrumb == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistAction.java
index 686b298..884cc80 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,6 +68,7 @@ final class SpecificContentAssistAction extends Action implements IUpdate {
 	/*
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		ITextEditor editor= getActiveEditor();
 		if (editor == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistExecutor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistExecutor.java
index 13abafc..536d645 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistExecutor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SpecificContentAssistExecutor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,12 +50,12 @@ public final class SpecificContentAssistExecutor {
 	 * @param categoryId the id of the proposal category to show proposals for
 	 */
 	public void invokeContentAssist(final ITextEditor editor, String categoryId) {
-		Collection categories= fRegistry.getProposalCategories();
+		Collection<CompletionProposalCategory> categories= fRegistry.getProposalCategories();
 		boolean[] inclusionState= new boolean[categories.size()];
 		boolean[] separateState= new boolean[categories.size()];
 		int i= 0;
-		for (Iterator it= categories.iterator(); it.hasNext(); i++) {
-			CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
+		for (Iterator<CompletionProposalCategory> it= categories.iterator(); it.hasNext(); i++) {
+			CompletionProposalCategory cat= it.next();
 			inclusionState[i]= cat.isIncluded();
 			cat.setIncluded(cat.getId().equals(categoryId));
 			separateState[i]= cat.isSeparateCommand();
@@ -68,8 +68,8 @@ public final class SpecificContentAssistExecutor {
 				target.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS);
 		} finally {
 			i= 0;
-			for (Iterator it= categories.iterator(); it.hasNext(); i++) {
-				CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
+			for (Iterator<CompletionProposalCategory> it= categories.iterator(); it.hasNext(); i++) {
+				CompletionProposalCategory cat= it.next();
 				cat.setIncluded(inclusionState[i]);
 				cat.setSeparateCommand(separateState[i]);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleBreadcrumbAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleBreadcrumbAction.java
index 3bb8bd3..3575752 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleBreadcrumbAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleBreadcrumbAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,17 +43,35 @@ public class ToggleBreadcrumbAction extends ResourceAction implements IPropertyC
 	 * @param page the workbench page
 	 */
 	public ToggleBreadcrumbAction(IWorkbenchPage page) {
-		super(JavaEditorMessages.getBundleForConstructedKeys(), "ToggleBreadcrumbAction.", IAction.AS_CHECK_BOX); //$NON-NLS-1$
-		JavaPluginImages.setToolImageDescriptors(this, "toggle_breadcrumb.gif"); //$NON-NLS-1$
+		this(page, false);
+	}
+
+	/**
+	 * Constructs and updates the action.
+	 *
+	 * @param page the workbench page
+	 * @param inContextMenu <code>true</code> iff this action is shown in the context menu of a breadcrumb
+	 * 
+	 * @since 3.7
+	 */
+	public ToggleBreadcrumbAction(IWorkbenchPage page, boolean inContextMenu) {
+		super(JavaEditorMessages.getBundleForConstructedKeys(),
+				inContextMenu ? "ToggleBreadcrumbAction.Hide." : "ToggleBreadcrumbAction.", //$NON-NLS-1$ //$NON-NLS-2$
+				inContextMenu ? IAction.AS_PUSH_BUTTON : IAction.AS_CHECK_BOX);
+		
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.TOGGLE_BREADCRUMB_ACTION);
 		fPage= page;
-		fPage.getWorkbenchWindow().addPerspectiveListener(this);
+		if (!inContextMenu) {
+			JavaPluginImages.setToolImageDescriptors(this, "toggle_breadcrumb.gif"); //$NON-NLS-1$
+			fPage.getWorkbenchWindow().addPerspectiveListener(this);
+		}
 		update();
 	}
-
+	
 	/*
 	 * @see IAction#actionPerformed
 	 */
+	@Override
 	public void run() {
 		fStore.setValue(getPreferenceKey(), isChecked());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleCommentAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleCommentAction.java
index 739b8cb..38c312b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleCommentAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleCommentAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,7 @@ public final class ToggleCommentAction extends TextEditorAction {
 	/** The document partitioning */
 	private String fDocumentPartitioning;
 	/** The comment prefixes */
-	private Map fPrefixesMap;
+	private Map<String, String[]> fPrefixesMap;
 
 	/**
 	 * Creates and initializes the action for the given text editor. The action
@@ -73,6 +73,7 @@ public final class ToggleCommentAction extends TextEditorAction {
 	 * Implementation of the <code>IAction</code> prototype. Checks if the selected
 	 * lines are all commented or not and uncomments/comments them respectively.
 	 */
+	@Override
 	public void run() {
 		if (fOperationTarget == null || fDocumentPartitioning == null || fPrefixesMap == null)
 			return;
@@ -129,7 +130,6 @@ public final class ToggleCommentAction extends TextEditorAction {
 			IRegion block= getTextBlockFromSelection(textSelection, document);
 			ITypedRegion[] regions= TextUtilities.computePartitioning(document, fDocumentPartitioning, block.getOffset(), block.getLength(), false);
 
-			int lineCount= 0;
 			int[] lines= new int[regions.length * 2]; // [startline, endline, startline, endline, ...]
 			for (int i= 0, j= 0; i < regions.length; i++, j+= 2) {
 				// start line of region
@@ -140,12 +140,11 @@ public final class ToggleCommentAction extends TextEditorAction {
 				if (length > 0)
 					offset--;
 				lines[j + 1]= (lines[j] == -1 ? -1 : document.getLineOfOffset(offset));
-				lineCount += lines[j + 1] - lines[j] + 1;
 			}
 
 			// Perform the check
 			for (int i= 0, j= 0; i < regions.length; i++, j += 2) {
-				String[] prefixes= (String[]) fPrefixesMap.get(regions[i].getType());
+				String[] prefixes= fPrefixesMap.get(regions[i].getType());
 				if (prefixes != null && prefixes.length > 0 && lines[j] >= 0 && lines[j + 1] >= 0)
 					if (!isBlockCommented(lines[j], lines[j + 1], prefixes, document))
 						return false;
@@ -268,6 +267,7 @@ public final class ToggleCommentAction extends TextEditorAction {
 	 * <code>ITextOperationTarget</code> adapter, and sets the enabled state
 	 * accordingly.
 	 */
+	@Override
 	public void update() {
 		super.update();
 
@@ -287,6 +287,7 @@ public final class ToggleCommentAction extends TextEditorAction {
 	/*
 	 * @see TextEditorAction#setEditor(ITextEditor)
 	 */
+	@Override
 	public void setEditor(ITextEditor editor) {
 		super.setEditor(editor);
 		fOperationTarget= null;
@@ -296,7 +297,7 @@ public final class ToggleCommentAction extends TextEditorAction {
 		fPrefixesMap= null;
 
 		String[] types= configuration.getConfiguredContentTypes(sourceViewer);
-		Map prefixesMap= new HashMap(types.length);
+		Map<String, String[]> prefixesMap= new HashMap<String, String[]>(types.length);
 		for (int i= 0; i < types.length; i++) {
 			String type= types[i];
 			String[] prefixes= configuration.getDefaultPrefixes(sourceViewer, type);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleMarkOccurrencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleMarkOccurrencesAction.java
index 097370d..ad3fac2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleMarkOccurrencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleMarkOccurrencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public class ToggleMarkOccurrencesAction extends TextEditorAction implements IPr
 	/*
 	 * @see IAction#actionPerformed
 	 */
+	@Override
 	public void run() {
 		fStore.setValue(PreferenceConstants.EDITOR_MARK_OCCURRENCES, isChecked());
 	}
@@ -57,6 +58,7 @@ public class ToggleMarkOccurrencesAction extends TextEditorAction implements IPr
 	/*
 	 * @see TextEditorAction#update
 	 */
+	@Override
 	public void update() {
 		ITextEditor editor= getTextEditor();
 
@@ -71,6 +73,7 @@ public class ToggleMarkOccurrencesAction extends TextEditorAction implements IPr
 	/*
 	 * @see TextEditorAction#setEditor(ITextEditor)
 	 */
+	@Override
 	public void setEditor(ITextEditor editor) {
 
 		super.setEditor(editor);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/TogglePresentationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/TogglePresentationAction.java
index fd77d5d..5b98243 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/TogglePresentationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/TogglePresentationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ public class TogglePresentationAction extends TextEditorAction implements IPrope
 	/*
 	 * @see IAction#actionPerformed
 	 */
+	@Override
 	public void run() {
 
 		ITextEditor editor= getTextEditor();
@@ -81,6 +82,7 @@ public class TogglePresentationAction extends TextEditorAction implements IPrope
 	/*
 	 * @see TextEditorAction#update
 	 */
+	@Override
 	public void update() {
 		ITextEditor editor= getTextEditor();
 		boolean checked= (editor != null && editor.showsHighlightRangeOnly());
@@ -103,6 +105,7 @@ public class TogglePresentationAction extends TextEditorAction implements IPrope
 	/*
 	 * @see TextEditorAction#setEditor(ITextEditor)
 	 */
+	@Override
 	public void setEditor(ITextEditor editor) {
 
 		super.setEditor(editor);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleTextHoverAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleTextHoverAction.java
index 2824438..f2b27f9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleTextHoverAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ToggleTextHoverAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public class ToggleTextHoverAction extends TextEditorAction implements IProperty
 	/*
 	 * @see IAction#actionPerformed
 	 */
+	@Override
 	public void run() {
 		ITextEditor editor= getTextEditor();
 		if (editor == null)
@@ -68,6 +69,7 @@ public class ToggleTextHoverAction extends TextEditorAction implements IProperty
 	/*
 	 * @see TextEditorAction#update
 	 */
+	@Override
 	public void update() {
 		boolean showHover= fStore != null &&  fStore.getBoolean(PreferenceConstants.EDITOR_SHOW_HOVER);
 		setChecked(showHover);
@@ -77,6 +79,7 @@ public class ToggleTextHoverAction extends TextEditorAction implements IProperty
 	/*
 	 * @see TextEditorAction#setEditor(ITextEditor)
 	 */
+	@Override
 	public void setEditor(ITextEditor editor) {
 		super.setEditor(editor);
 		if (editor != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/WorkingCopyManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/WorkingCopyManager.java
index ccfdbf2..8ec8647 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/WorkingCopyManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/WorkingCopyManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ import org.eclipse.jdt.ui.IWorkingCopyManagerExtension;
 public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyManagerExtension {
 
 	private ICompilationUnitDocumentProvider fDocumentProvider;
-	private Map fMap;
+	private Map<IEditorInput, ICompilationUnit> fMap;
 	private boolean fIsShuttingDown;
 
 	/**
@@ -103,7 +103,7 @@ public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyMana
 	 * @since 3.2
 	 */
 	public ICompilationUnit getWorkingCopy(IEditorInput input, boolean primaryOnly) {
-		ICompilationUnit unit= fMap == null ? null : (ICompilationUnit) fMap.get(input);
+		ICompilationUnit unit= fMap == null ? null : fMap.get(input);
 		if (unit == null)
 			unit= fDocumentProvider.getWorkingCopy(input);
 		if (unit != null && (!primaryOnly || JavaModelUtil.isPrimary(unit)))
@@ -117,7 +117,7 @@ public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyMana
 	public void setWorkingCopy(IEditorInput input, ICompilationUnit workingCopy) {
 		if (fDocumentProvider.getDocument(input) != null) {
 			if (fMap == null)
-				fMap= new HashMap();
+				fMap= new HashMap<IEditorInput, ICompilationUnit>();
 			fMap.put(input, workingCopy);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItem.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItem.java
index 6d9b981..ad9b119 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItem.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -114,6 +114,7 @@ class BreadcrumbItem extends Item {
 	/*
 	 * @see org.eclipse.swt.widgets.Widget#dispose()
 	 */
+	@Override
 	public void dispose() {
 		fContainer.dispose();
 		super.dispose();
@@ -270,6 +271,7 @@ class BreadcrumbItem extends Item {
 	/*
 	 * @see org.eclipse.swt.widgets.Item#setText(java.lang.String)
 	 */
+	@Override
 	public void setText(String string) {
 		super.setText(string);
 		fDetailsBlock.setText(string);
@@ -282,6 +284,7 @@ class BreadcrumbItem extends Item {
 	/*
 	 * @see org.eclipse.swt.widgets.Item#setImage(org.eclipse.swt.graphics.Image)
 	 */
+	@Override
 	public void setImage(Image image) {
 		super.setImage(image);
 		fDetailsBlock.setImage(image);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDetails.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDetails.java
index fc81022..45329ca 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDetails.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDetails.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,7 +104,6 @@ class BreadcrumbItemDetails {
 			}
 		});
 		installFocusComposite(fTextComposite);
-		addElementListener(fTextComposite);
 
 		fElementText= new Label(fTextComposite, SWT.NONE);
 		layoutData= new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
@@ -112,11 +111,13 @@ class BreadcrumbItemDetails {
 		addElementListener(fElementText);
 
 		fTextComposite.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			@Override
 			public void getName(AccessibleEvent e) {
 				e.result= fElementText.getText();
 			}
 		});
 		fImageComposite.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			@Override
 			public void getName(AccessibleEvent e) {
 				e.result= fElementText.getText();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDropDown.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDropDown.java
index 66852d6..b5ef091 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDropDown.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbItemDropDown.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.jdt.internal.ui.javaeditor.breadcrumb;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlAdapter;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.events.DisposeEvent;
@@ -48,8 +49,11 @@ import org.eclipse.swt.widgets.Widget;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.Platform;
 
+import org.eclipse.core.resources.IFile;
+
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.resource.CompositeImageDescriptor;
 import org.eclipse.jface.util.Geometry;
 import org.eclipse.jface.util.OpenStrategy;
@@ -65,6 +69,10 @@ import org.eclipse.jface.viewers.TreeViewer;
 
 import org.eclipse.ui.forms.FormColors;
 
+import org.eclipse.jdt.core.IJarEntryResource;
+import org.eclipse.jdt.core.IJavaElement;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
 import org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer;
 
@@ -104,6 +112,7 @@ class BreadcrumbItemDropDown {
 		/*
 		 * @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int, int)
 		 */
+		@Override
 		protected void drawCompositeImage(int width, int height) {
 			Display display= fParentComposite.getDisplay();
 
@@ -157,6 +166,7 @@ class BreadcrumbItemDropDown {
 		/*
 		 * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize()
 		 */
+		@Override
 		protected Point getSize() {
 			return new Point(10, 16);
 		}
@@ -171,8 +181,14 @@ class BreadcrumbItemDropDown {
 		}
 	}
 
-	private static final int DROP_DOWN_HIGHT= 300;
-	private static final int DROP_DOWN_WIDTH= 500;
+	private static final int DROP_DOWN_MIN_WIDTH= 250;
+	private static final int DROP_DOWN_MAX_WIDTH= 500;
+	
+	private static final int DROP_DOWN_DEFAULT_MIN_HEIGHT= 200;
+	private static final int DROP_DOWN_DEFAULT_MAX_HEIGHT= 300;
+
+	private static final String DIALOG_SETTINGS= "BreadcrumbItemDropDown"; //$NON-NLS-1$
+	private static final String DIALOG_HEIGHT= "height"; //$NON-NLS-1$
 
 	private final BreadcrumbItem fParent;
 	private final Composite fParentComposite;
@@ -182,6 +198,7 @@ class BreadcrumbItemDropDown {
 	private boolean fEnabled;
 	private TreeViewer fDropDownViewer;
 	private Shell fShell;
+	private boolean isResizingProgrammatically;
 
 	public BreadcrumbItemDropDown(BreadcrumbItem parent, Composite composite) {
 		fParent= parent;
@@ -195,6 +212,7 @@ class BreadcrumbItemDropDown {
 		ToolBarManager manager= new ToolBarManager(fToolBar);
 
 		final Action showDropDownMenuAction= new Action(null, SWT.NONE) {
+			@Override
 			public void run() {
 				Shell shell= fParent.getDropDownShell();
 				if (shell != null)
@@ -218,6 +236,7 @@ class BreadcrumbItemDropDown {
 		if (IS_MAC_WORKAROUND) {
 			manager.getControl().addMouseListener(new MouseAdapter() {
 				// see also BreadcrumbItemDetails#addElementListener(Control)
+				@Override
 				public void mouseDown(MouseEvent e) {
 					showDropDownMenuAction.run();
 				}
@@ -318,6 +337,20 @@ class BreadcrumbItemDropDown {
 		fDropDownViewer.setInput(input);
 
 		setShellBounds(fShell);
+		
+		fShell.addControlListener(new ControlAdapter() {
+			/*
+			 * @see org.eclipse.swt.events.ControlAdapter#controlResized(org.eclipse.swt.events.ControlEvent)
+			 */
+			@Override
+			public void controlResized(ControlEvent e) {
+				if (isResizingProgrammatically)
+					return;
+				
+				Point size= fShell.getSize();
+				getDialogSettings().put(DIALOG_HEIGHT, size.y);
+			}
+		});
 
 		fDropDownViewer.addOpenListener(new IOpenListener() {
 			public void open(OpenEvent event) {
@@ -367,6 +400,23 @@ class BreadcrumbItemDropDown {
 			public void mouseMove(MouseEvent e) {
 				if (tree.equals(e.getSource())) {
 					Object o= tree.getItem(new Point(e.x, e.y));
+					if ((o != null && !o.equals(fLastItem)) || (fLastItem != null && o == null)) {
+						boolean showHandPointer= false;
+						if (o instanceof TreeItem) {
+							Object itemData= ((TreeItem)o).getData();
+							if (itemData instanceof IJavaElement) {
+								int elementType= ((IJavaElement)itemData).getElementType();
+								if (elementType != IJavaElement.JAVA_PROJECT && elementType != IJavaElement.PACKAGE_FRAGMENT && elementType != IJavaElement.PACKAGE_FRAGMENT_ROOT) {
+									showHandPointer= true;
+								}
+							} else if (itemData instanceof IFile) {
+								showHandPointer= true;
+							} else if (itemData instanceof IJarEntryResource) {
+								showHandPointer= ((IJarEntryResource)itemData).isFile();
+							}
+						}
+						tree.setCursor(showHandPointer ? tree.getDisplay().getSystemCursor(SWT.CURSOR_HAND) : null);
+					}
 					if (o instanceof TreeItem) {
 						Rectangle clientArea = tree.getClientArea();
 						TreeItem currentItem= (TreeItem) o;
@@ -408,6 +458,8 @@ class BreadcrumbItemDropDown {
 								}
 							}
 						}
+					} else if (o == null) {
+						fLastItem= null;
 					}
 				}
 			}
@@ -606,6 +658,22 @@ class BreadcrumbItemDropDown {
 		});
 	}
 
+	private IDialogSettings getDialogSettings() {
+		IDialogSettings javaSettings= JavaPlugin.getDefault().getDialogSettings();
+		IDialogSettings settings= javaSettings.getSection(DIALOG_SETTINGS);
+		if (settings == null)
+			settings= javaSettings.addNewSection(DIALOG_SETTINGS);
+		return settings;
+	}
+	
+	private int getMaxHeight() {
+		try {
+			return getDialogSettings().getInt(DIALOG_HEIGHT);
+		} catch (NumberFormatException e) {
+			return DROP_DOWN_DEFAULT_MAX_HEIGHT;
+		}
+	}
+	
 	/**
 	 * Calculates a useful size for the given shell.
 	 *
@@ -617,8 +685,8 @@ class BreadcrumbItemDropDown {
 
 		shell.pack();
 		Point size= shell.getSize();
-		int height= Math.min(size.y, DROP_DOWN_HIGHT);
-		int width= Math.max(Math.min(size.x, DROP_DOWN_WIDTH), 250);
+		int height= Math.max(Math.min(size.y, getMaxHeight()), DROP_DOWN_DEFAULT_MIN_HEIGHT);
+		int width= Math.max(Math.min(size.x, DROP_DOWN_MAX_WIDTH), DROP_DOWN_MIN_WIDTH);
 
 		int imageBoundsX= 0;
 		if (fDropDownViewer.getTree().getItemCount() > 0) {
@@ -682,7 +750,7 @@ class BreadcrumbItemDropDown {
 
 	/**
 	 * Set the size of the given shell such that more content can be shown. The shell size does not
-	 * exceed {@link #DROP_DOWN_HIGHT} and {@link #DROP_DOWN_WIDTH}.
+	 * exceed a user-configurable maximum.
 	 *
 	 * @param shell the shell to resize
 	 */
@@ -691,33 +759,37 @@ class BreadcrumbItemDropDown {
 		int currentWidth= size.x;
 		int currentHeight= size.y;
 
-		if (currentHeight >= DROP_DOWN_HIGHT && currentWidth >= DROP_DOWN_WIDTH)
+		int maxHeight= getMaxHeight();
+		
+		if (currentHeight >= maxHeight && currentWidth >= DROP_DOWN_MAX_WIDTH)
 			return;
 
 		Point preferedSize= shell.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 
 		int newWidth;
-		if (currentWidth >= DROP_DOWN_WIDTH) {
+		if (currentWidth >= DROP_DOWN_MAX_WIDTH) {
 			newWidth= currentWidth;
 		} else {
-			newWidth= Math.min(Math.max(preferedSize.x, currentWidth), DROP_DOWN_WIDTH);
+			newWidth= Math.min(Math.max(preferedSize.x, currentWidth), DROP_DOWN_MAX_WIDTH);
 		}
 		int newHeight;
-		if (currentHeight >= DROP_DOWN_HIGHT) {
+		if (currentHeight >= maxHeight) {
 			newHeight= currentHeight;
 		} else {
-			newHeight= Math.min(Math.max(preferedSize.y, currentHeight), DROP_DOWN_HIGHT);
+			newHeight= Math.min(Math.max(preferedSize.y, currentHeight), maxHeight);
 		}
 
 		if (newHeight != currentHeight || newWidth != currentWidth) {
 			shell.setRedraw(false);
 			try {
+				isResizingProgrammatically= true;
 				shell.setSize(newWidth, newHeight);
 				if (!isLTR()) {
 					Point location= shell.getLocation();
 					shell.setLocation(location.x - (newWidth - currentWidth), location.y);
 				}
 			} finally {
+				isResizingProgrammatically= false;
 				shell.setRedraw(true);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java
index 95654a5..256febd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,7 +73,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	private static final boolean IS_GTK= "gtk".equals(SWT.getPlatform()); //$NON-NLS-1$
 
 	private final Composite fContainer;
-	private final ArrayList fBreadcrumbItems;
+	private final ArrayList<BreadcrumbItem> fBreadcrumbItems;
 	private final ListenerList fMenuListeners;
 
 	private Image fGradientBackground;
@@ -95,7 +95,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	 * @param style the style flag used for this viewer
 	 */
 	public BreadcrumbViewer(Composite parent, int style) {
-		fBreadcrumbItems= new ArrayList();
+		fBreadcrumbItems= new ArrayList<BreadcrumbItem>();
 		fMenuListeners= new ListenerList();
 
 		fContainer= new Composite(parent, SWT.NONE);
@@ -113,7 +113,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 				int height= fContainer.getClientArea().height;
 
 				if (fGradientBackground == null || fGradientBackground.getBounds().height != height) {
-					Image image= createGradientImage(height, event.display);
+					Image image= height == 0 ? null : createGradientImage(height, event.display);
 					fContainer.setBackgroundImage(image);
 
 					if (fGradientBackground != null)
@@ -166,6 +166,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.Viewer#getControl()
 	 */
+	@Override
 	public Control getControl() {
 		return fContainer;
 	}
@@ -173,16 +174,18 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#getRoot()
 	 */
+	@Override
 	protected Object getRoot() {
 		if (fBreadcrumbItems.isEmpty())
 			return null;
 
-		return ((BreadcrumbItem) fBreadcrumbItems.get(0)).getData();
+		return fBreadcrumbItems.get(0).getData();
 	}
 
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#reveal(java.lang.Object)
 	 */
+	@Override
 	public void reveal(Object element) {
 		//all elements are always visible
 	}
@@ -199,12 +202,12 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 			if (fBreadcrumbItems.size() == 0)
 				return;
 
-			BreadcrumbItem item= (BreadcrumbItem) fBreadcrumbItems.get(fBreadcrumbItems.size() - 1);
+			BreadcrumbItem item= fBreadcrumbItems.get(fBreadcrumbItems.size() - 1);
 			if (item.getData() == null) {
 				if (fBreadcrumbItems.size() < 2)
 					return;
 
-				item= (BreadcrumbItem) fBreadcrumbItems.get(fBreadcrumbItems.size() - 2);
+				item= fBreadcrumbItems.get(fBreadcrumbItems.size() - 2);
 			}
 			item.setFocus(true);
 		}
@@ -215,7 +218,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	 */
 	public boolean isDropDownOpen() {
 		for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-			BreadcrumbItem item= (BreadcrumbItem) fBreadcrumbItems.get(i);
+			BreadcrumbItem item= fBreadcrumbItems.get(i);
 			if (item.isMenuShown())
 				return true;
 		}
@@ -231,7 +234,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	 */
 	public Shell getDropDownShell() {
 		for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-			BreadcrumbItem item= (BreadcrumbItem) fBreadcrumbItems.get(i);
+			BreadcrumbItem item= fBreadcrumbItems.get(i);
 			if (item.isMenuShown())
 				return item.getDropDownShell();
 		}
@@ -247,7 +250,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	 */
 	public ISelectionProvider getDropDownSelectionProvider() {
 		for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-			BreadcrumbItem item= (BreadcrumbItem) fBreadcrumbItems.get(i);
+			BreadcrumbItem item= fBreadcrumbItems.get(i);
 			if (item.isMenuShown()) {
 				return item.getDropDownSelectionProvider();
 			}
@@ -279,6 +282,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#assertContentProviderType(org.eclipse.jface.viewers.IContentProvider)
 	 */
+	@Override
 	protected void assertContentProviderType(IContentProvider provider) {
 		super.assertContentProviderType(provider);
 		Assert.isTrue(provider instanceof ITreeContentProvider);
@@ -287,6 +291,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.Viewer#inputChanged(java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	protected void inputChanged(Object fInput, Object oldInput) {
 		if (fContainer.isDisposed())
 			return;
@@ -294,19 +299,19 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 		disableRedraw();
 		try {
 			if (fBreadcrumbItems.size() > 0) {
-				BreadcrumbItem last= (BreadcrumbItem) fBreadcrumbItems.get(fBreadcrumbItems.size() - 1);
+				BreadcrumbItem last= fBreadcrumbItems.get(fBreadcrumbItems.size() - 1);
 				last.setIsLastItem(false);
 			}
 
 			int lastIndex= buildItemChain(fInput);
 
 			if (lastIndex > 0) {
-				BreadcrumbItem last= (BreadcrumbItem) fBreadcrumbItems.get(lastIndex - 1);
+				BreadcrumbItem last= fBreadcrumbItems.get(lastIndex - 1);
 				last.setIsLastItem(true);
 			}
 
 			while (lastIndex < fBreadcrumbItems.size()) {
-				BreadcrumbItem item= (BreadcrumbItem) fBreadcrumbItems.remove(fBreadcrumbItems.size() - 1);
+				BreadcrumbItem item= fBreadcrumbItems.remove(fBreadcrumbItems.size() - 1);
 				if (item == fSelectedItem) {
 					selectItem(null);
 				}
@@ -325,6 +330,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#doFindInputItem(java.lang.Object)
 	 */
+	@Override
 	protected Widget doFindInputItem(Object element) {
 		if (element == null)
 			return null;
@@ -338,12 +344,13 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#doFindItem(java.lang.Object)
 	 */
+	@Override
 	protected Widget doFindItem(Object element) {
 		if (element == null)
 			return null;
 
 		for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-			BreadcrumbItem item= (BreadcrumbItem) fBreadcrumbItems.get(i);
+			BreadcrumbItem item= fBreadcrumbItems.get(i);
 			if (item.getData() == element || element.equals(item.getData()))
 				return item;
 		}
@@ -354,6 +361,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#doUpdateItem(org.eclipse.swt.widgets.Widget, java.lang.Object, boolean)
 	 */
+	@Override
 	protected void doUpdateItem(Widget widget, Object element, boolean fullMap) {
 		if (widget instanceof BreadcrumbItem) {
 			final BreadcrumbItem item= (BreadcrumbItem) widget;
@@ -388,6 +396,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#getSelectionFromWidget()
 	 */
+	@Override
 	protected List getSelectionFromWidget() {
 		if (fSelectedItem == null)
 			return Collections.EMPTY_LIST;
@@ -395,7 +404,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 		if (fSelectedItem.getData() == null)
 			return Collections.EMPTY_LIST;
 
-		ArrayList result= new ArrayList();
+		ArrayList<Object> result= new ArrayList<Object>();
 		result.add(fSelectedItem.getData());
 		return result;
 	}
@@ -403,6 +412,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#internalRefresh(java.lang.Object)
 	 */
+	@Override
 	protected void internalRefresh(Object element) {
 
 		disableRedraw();
@@ -410,7 +420,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 			BreadcrumbItem item= (BreadcrumbItem) doFindItem(element);
 			if (item == null) {
 				for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-					BreadcrumbItem item1= (BreadcrumbItem) fBreadcrumbItems.get(i);
+					BreadcrumbItem item1= fBreadcrumbItems.get(i);
 					item1.refresh();
 				}
 			} else {
@@ -426,11 +436,12 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	/*
 	 * @see org.eclipse.jface.viewers.StructuredViewer#setSelectionToWidget(java.util.List, boolean)
 	 */
+	@Override
 	protected void setSelectionToWidget(List l, boolean reveal) {
 		BreadcrumbItem focusItem= null;
 
 		for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-			BreadcrumbItem item= (BreadcrumbItem) fBreadcrumbItems.get(i);
+			BreadcrumbItem item= fBreadcrumbItems.get(i);
 			if (item.hasFocus())
 				focusItem= item;
 
@@ -440,7 +451,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 		if (l == null)
 			return;
 
-		for (Iterator iterator= l.iterator(); iterator.hasNext();) {
+		for (Iterator<?> iterator= l.iterator(); iterator.hasNext();) {
 			Object element= iterator.next();
 			BreadcrumbItem item= (BreadcrumbItem) doFindItem(element);
 			if (item != null) {
@@ -469,7 +480,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 			setFocus();
 		} else {
 			for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-				BreadcrumbItem listItem= (BreadcrumbItem) fBreadcrumbItems.get(i);
+				BreadcrumbItem listItem= fBreadcrumbItems.get(i);
 				listItem.setFocus(false);
 			}
 		}
@@ -493,7 +504,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	 * @return the item ad the given <code>index</code>
 	 */
 	BreadcrumbItem getItem(int index) {
-		return (BreadcrumbItem) fBreadcrumbItems.get(index);
+		return fBreadcrumbItems.get(index);
 	}
 
 	/**
@@ -504,7 +515,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	 */
 	int getIndexOfItem(BreadcrumbItem item) {
 		for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-			BreadcrumbItem pItem= (BreadcrumbItem) fBreadcrumbItems.get(i);
+			BreadcrumbItem pItem= fBreadcrumbItems.get(i);
 			if (pItem == item)
 				return i;
 		}
@@ -560,7 +571,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 		int index= fBreadcrumbItems.indexOf(fSelectedItem);
 		if (next) {
 			if (index == fBreadcrumbItems.size() - 1) {
-				BreadcrumbItem current= (BreadcrumbItem) fBreadcrumbItems.get(index);
+				BreadcrumbItem current= fBreadcrumbItems.get(index);
 
 				ITreeContentProvider contentProvider= (ITreeContentProvider) getContentProvider();
 				if (!contentProvider.hasChildren(current.getData()))
@@ -569,16 +580,16 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 				current.openDropDownMenu();
 				current.getDropDownShell().setFocus();
 			} else {
-				BreadcrumbItem nextItem= (BreadcrumbItem) fBreadcrumbItems.get(index + 1);
+				BreadcrumbItem nextItem= fBreadcrumbItems.get(index + 1);
 				selectItem(nextItem);
 			}
 		} else {
 			if (index == 1) {
-				BreadcrumbItem root= (BreadcrumbItem) fBreadcrumbItems.get(0);
+				BreadcrumbItem root= fBreadcrumbItems.get(0);
 				root.openDropDownMenu();
 				root.getDropDownShell().setFocus();
 			} else {
-				selectItem((BreadcrumbItem) fBreadcrumbItems.get(index - 1));
+				selectItem(fBreadcrumbItems.get(index - 1));
 			}
 		}
 	}
@@ -600,7 +611,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 
 		BreadcrumbItem item;
 		if (index < fBreadcrumbItems.size()) {
-			item= (BreadcrumbItem) fBreadcrumbItems.get(index);
+			item= fBreadcrumbItems.get(index);
 			if (item.getData() != null)
 				unmapElement(item.getData());
 		} else {
@@ -658,7 +669,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 		if (currentWidth > width) {
 			int index= 0;
 			while (currentWidth > width && index < fBreadcrumbItems.size() - 1) {
-				BreadcrumbItem viewer= (BreadcrumbItem) fBreadcrumbItems.get(index);
+				BreadcrumbItem viewer= fBreadcrumbItems.get(index);
 				if (viewer.isShowText()) {
 					viewer.setShowText(false);
 					currentWidth= getCurrentWidth();
@@ -673,7 +684,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 			int index= fBreadcrumbItems.size() - 1;
 			while (currentWidth < width && index >= 0) {
 
-				BreadcrumbItem viewer= (BreadcrumbItem) fBreadcrumbItems.get(index);
+				BreadcrumbItem viewer= fBreadcrumbItems.get(index);
 				if (!viewer.isShowText()) {
 					viewer.setShowText(true);
 					currentWidth= getCurrentWidth();
@@ -700,7 +711,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	private int getCurrentWidth() {
 		int result= 0;
 		for (int i= 0, size= fBreadcrumbItems.size(); i < size; i++) {
-			BreadcrumbItem viewer= (BreadcrumbItem) fBreadcrumbItems.get(i);
+			BreadcrumbItem viewer= fBreadcrumbItems.get(i);
 			result+= viewer.getWidth();
 		}
 
@@ -800,6 +811,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 	 * @see org.eclipse.jface.viewers.StructuredViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
 	 * @since 3.6.1
 	 */
+	@Override
 	protected void handleDispose(DisposeEvent event) {
 		if (fGradientBackground != null) {
 			fGradientBackground.dispose();
@@ -812,9 +824,9 @@ public abstract class BreadcrumbViewer extends StructuredViewer {
 		}
 
 		if (fBreadcrumbItems != null) {
-			Iterator iterator= fBreadcrumbItems.iterator();
+			Iterator<BreadcrumbItem> iterator= fBreadcrumbItems.iterator();
 			while (iterator.hasNext()) {
-				BreadcrumbItem item= (BreadcrumbItem)iterator.next();
+				BreadcrumbItem item= iterator.next();
 				item.dispose();
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewerRow.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewerRow.java
index 1d958fa..233bd6b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewerRow.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/breadcrumb/BreadcrumbViewerRow.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#clone()
 	 */
+	@Override
 	public Object clone() {
 		return new BreadcrumbViewerRow(fViewer, fItem);
 	}
@@ -51,6 +52,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getBackground(int)
 	 */
+	@Override
 	public Color getBackground(int columnIndex) {
 		return fBackground;
 	}
@@ -58,6 +60,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getBounds(int)
 	 */
+	@Override
 	public Rectangle getBounds(int columnIndex) {
 		return getBounds();
 	}
@@ -65,6 +68,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getBounds()
 	 */
+	@Override
 	public Rectangle getBounds() {
 		return fItem.getBounds();
 	}
@@ -72,6 +76,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getColumnCount()
 	 */
+	@Override
 	public int getColumnCount() {
 		return 1;
 	}
@@ -79,6 +84,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getControl()
 	 */
+	@Override
 	public Control getControl() {
 		return fViewer.getControl();
 	}
@@ -86,6 +92,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getElement()
 	 */
+	@Override
 	public Object getElement() {
 		return fItem.getData();
 	}
@@ -93,6 +100,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getFont(int)
 	 */
+	@Override
 	public Font getFont(int columnIndex) {
 		return fFont;
 	}
@@ -100,6 +108,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getForeground(int)
 	 */
+	@Override
 	public Color getForeground(int columnIndex) {
 		return fForeground;
 	}
@@ -107,6 +116,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getImage(int)
 	 */
+	@Override
 	public Image getImage(int columnIndex) {
 		return fItem.getImage();
 	}
@@ -114,6 +124,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getItem()
 	 */
+	@Override
 	public Widget getItem() {
 		return fItem;
 	}
@@ -121,6 +132,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getNeighbor(int, boolean)
 	 */
+	@Override
 	public ViewerRow getNeighbor(int direction, boolean sameLevel) {
 		return null;
 	}
@@ -128,6 +140,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getText(int)
 	 */
+	@Override
 	public String getText(int columnIndex) {
 		return fItem.getText();
 	}
@@ -135,6 +148,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#getTreePath()
 	 */
+	@Override
 	public TreePath getTreePath() {
 		return new TreePath(new Object[] { getElement() });
 	}
@@ -142,6 +156,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#setBackground(int, org.eclipse.swt.graphics.Color)
 	 */
+	@Override
 	public void setBackground(int columnIndex, Color color) {
 		fBackground= color;
 	}
@@ -149,6 +164,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#setFont(int, org.eclipse.swt.graphics.Font)
 	 */
+	@Override
 	public void setFont(int columnIndex, Font font) {
 		fFont= font;
 	}
@@ -156,6 +172,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#setForeground(int, org.eclipse.swt.graphics.Color)
 	 */
+	@Override
 	public void setForeground(int columnIndex, Color color) {
 		fForeground= color;
 	}
@@ -163,6 +180,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#setImage(int, org.eclipse.swt.graphics.Image)
 	 */
+	@Override
 	public void setImage(int columnIndex, Image image) {
 		fItem.setImage(image);
 	}
@@ -170,6 +188,7 @@ class BreadcrumbViewerRow extends ViewerRow {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerRow#setText(int, java.lang.String)
 	 */
+	@Override
 	public void setText(int columnIndex, String text) {
 		fItem.setText(text);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/AbstractSaveParticipantPreferenceConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/AbstractSaveParticipantPreferenceConfiguration.java
index d692a57..663889e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/AbstractSaveParticipantPreferenceConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/AbstractSaveParticipantPreferenceConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,9 +122,9 @@ public abstract class AbstractSaveParticipantPreferenceConfiguration implements
 		String key= getPreferenceKey();
 		boolean defaultEnabled;
 		if (ProjectScope.SCOPE.equals(fContext.getName())) {
-			defaultEnabled= new InstanceScope().getNode(JavaUI.ID_PLUGIN).getBoolean(key, false);
+			defaultEnabled= InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).getBoolean(key, false);
 		} else {
-			defaultEnabled= new DefaultScope().getNode(JavaUI.ID_PLUGIN).getBoolean(key, false);
+			defaultEnabled= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).getBoolean(key, false);
 		}
 		fContext.getNode(JavaUI.ID_PLUGIN).putBoolean(key, defaultEnabled);
 		fEnableField.setSelection(defaultEnabled);
@@ -166,9 +166,9 @@ public abstract class AbstractSaveParticipantPreferenceConfiguration implements
 		if (hasSettingsInScope(context)) {
 			node= context.getNode(JavaUI.ID_PLUGIN);
 		} else {
-			node= new InstanceScope().getNode(JavaUI.ID_PLUGIN);
+			node= InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN);
 		}
-		IEclipsePreferences defaultNode= new DefaultScope().getNode(JavaUI.ID_PLUGIN);
+		IEclipsePreferences defaultNode= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN);
 
 		String key= getPreferenceKey();
 		return node.getBoolean(key, defaultNode.getBoolean(key, false));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantDescriptor.java
index 3bb022d..05c9c86 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,10 +55,12 @@ public class SaveParticipantDescriptor {
 	public ISaveParticipantPreferenceConfiguration createPreferenceConfiguration() {
 		return new AbstractSaveParticipantPreferenceConfiguration() {
 
+			@Override
 			protected String getPostSaveListenerId() {
 	            return fPostSaveListener.getId();
             }
 
+			@Override
 			protected String getPostSaveListenerName() {
 	            return fPostSaveListener.getName();
             }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantRegistry.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantRegistry.java
index f3f65a2..42aa45c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantRegistry.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/saveparticipant/SaveParticipantRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,7 +61,7 @@ public final class SaveParticipantRegistry {
 	private static final IPostSaveListener[] EMPTY_ARRAY= new IPostSaveListener[0];
 
 	/** The map of descriptors, indexed by their identifiers. */
-	private Map fDescriptors;
+	private Map<String, SaveParticipantDescriptor> fDescriptors;
 
 	/**
 	 * Creates a new instance.
@@ -77,7 +77,7 @@ public final class SaveParticipantRegistry {
 	 */
 	public synchronized SaveParticipantDescriptor[] getSaveParticipantDescriptors() {
 		ensureRegistered();
-		return (SaveParticipantDescriptor[]) fDescriptors.values().toArray(new SaveParticipantDescriptor[fDescriptors.size()]);
+		return fDescriptors.values().toArray(new SaveParticipantDescriptor[fDescriptors.size()]);
 	}
 
 	/**
@@ -89,7 +89,7 @@ public final class SaveParticipantRegistry {
 	 */
 	public synchronized SaveParticipantDescriptor getSaveParticipantDescriptor(String id) {
 		ensureRegistered();
-		return (SaveParticipantDescriptor) fDescriptors.get(id);
+		return fDescriptors.get(id);
 	}
 
 	/**
@@ -109,11 +109,12 @@ public final class SaveParticipantRegistry {
 	 * </p>
 	 */
 	private void reloadDescriptors() {
-		Map map= new HashMap();
+		Map<String, SaveParticipantDescriptor> map= new HashMap<String, SaveParticipantDescriptor>();
 		SaveParticipantDescriptor desc= new SaveParticipantDescriptor(new CleanUpPostSaveListener()) {
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public ISaveParticipantPreferenceConfiguration createPreferenceConfiguration() {
 				return new CleanUpSaveParticipantPreferenceConfiguration();
 			}
@@ -135,8 +136,8 @@ public final class SaveParticipantRegistry {
 	public synchronized boolean hasSettingsInScope(IScopeContext context) {
 		ensureRegistered();
 
-    	for (Iterator iterator= fDescriptors.values().iterator(); iterator.hasNext();) {
-	        SaveParticipantDescriptor descriptor= (SaveParticipantDescriptor)iterator.next();
+    	for (Iterator<SaveParticipantDescriptor> iterator= fDescriptors.values().iterator(); iterator.hasNext();) {
+	        SaveParticipantDescriptor descriptor= iterator.next();
 	        if (descriptor.getPreferenceConfiguration().hasSettingsInScope(context))
 	        	return true;
     	}
@@ -158,12 +159,12 @@ public final class SaveParticipantRegistry {
 	public synchronized IPostSaveListener[] getEnabledPostSaveListeners(IScopeContext context) {
 		ensureRegistered();
 
-		ArrayList result= null;
-		for (Iterator iterator= fDescriptors.values().iterator(); iterator.hasNext();) {
-			SaveParticipantDescriptor descriptor= (SaveParticipantDescriptor)iterator.next();
+		ArrayList<IPostSaveListener> result= null;
+		for (Iterator<SaveParticipantDescriptor> iterator= fDescriptors.values().iterator(); iterator.hasNext();) {
+			SaveParticipantDescriptor descriptor= iterator.next();
 			if (descriptor.getPreferenceConfiguration().isEnabled(context)) {
 				if (result == null) {
-					result= new ArrayList();
+					result= new ArrayList<IPostSaveListener>();
 				}
 				result.add(descriptor.getPostSaveListener());
 			}
@@ -172,7 +173,7 @@ public final class SaveParticipantRegistry {
 		if (result == null) {
 			return EMPTY_ARRAY;
 		} else {
-			return (IPostSaveListener[])result.toArray(new IPostSaveListener[result.size()]);
+			return result.toArray(new IPostSaveListener[result.size()]);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/GoToNextPreviousMemberAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/GoToNextPreviousMemberAction.java
index 3a534ad..4269026 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/GoToNextPreviousMemberAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/GoToNextPreviousMemberAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,6 +98,7 @@ public class GoToNextPreviousMemberAction extends Action implements IUpdate {
 	/*
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public final  void run() {
 		ITextSelection selection= getTextSelection();
 		ISourceRange newRange= getNewSelectionRange(createSourceRange(selection), null);
@@ -191,7 +192,7 @@ public class GoToNextPreviousMemberAction extends Action implements IUpdate {
 	}
 
 	private static Integer[] createOffsetArray(IType[] types) throws JavaModelException {
-		List result= new ArrayList();
+		List<Integer> result= new ArrayList<Integer>();
 		for (int i= 0; i < types.length; i++) {
 			IType iType= types[i];
 			addOffset(result, iType.getNameRange().getOffset());
@@ -200,10 +201,10 @@ public class GoToNextPreviousMemberAction extends Action implements IUpdate {
 			addMemberOffsetList(result, iType.getFields());
 			addMemberOffsetList(result, iType.getInitializers());
 		}
-		return (Integer[]) result.toArray(new Integer[result.size()]);
+		return result.toArray(new Integer[result.size()]);
 	}
 
-	private static void addMemberOffsetList(List result, IMember[] members) throws JavaModelException {
+	private static void addMemberOffsetList(List<Integer> result, IMember[] members) throws JavaModelException {
 		for (int i= 0; i < members.length; i++) {
 			addOffset(result, getOffset(members[i]));
 		}
@@ -240,7 +241,7 @@ public class GoToNextPreviousMemberAction extends Action implements IUpdate {
 		return new SourceRange(ts.getOffset(), ts.getLength());
 	}
 
-	private static void addOffset(List result, int offset) {
+	private static void addOffset(List<Integer> result, int offset) {
 		if (offset >= 0)
 			result.add(new Integer(offset));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/SelectionHistory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/SelectionHistory.java
index 6eceafa..9216e91 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/SelectionHistory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/SelectionHistory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,7 +24,7 @@ import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 
 public class SelectionHistory {
 
-	private List fHistory;
+	private List<ISourceRange> fHistory;
 	private JavaEditor fEditor;
 	private ISelectionChangedListener fSelectionListener;
 	private int fSelectionChangeListenerCounter;
@@ -33,7 +33,7 @@ public class SelectionHistory {
 	public SelectionHistory(JavaEditor editor) {
 		Assert.isNotNull(editor);
 		fEditor= editor;
-		fHistory= new ArrayList(3);
+		fHistory= new ArrayList<ISourceRange>(3);
 		fSelectionListener= new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
 				if (fSelectionChangeListenerCounter == 0)
@@ -61,7 +61,7 @@ public class SelectionHistory {
 		if (isEmpty())
 			return null;
 		int size= fHistory.size();
-		ISourceRange result= (ISourceRange)fHistory.remove(size - 1);
+		ISourceRange result= fHistory.remove(size - 1);
 		fHistoryAction.update();
 		return result;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectEnclosingAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectEnclosingAction.java
index 82b59a2..094ee7d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectEnclosingAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectEnclosingAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class StructureSelectEnclosingAction extends StructureSelectionAction {
     /*
      * @see StructureSelectionAction#internalGetNewSelectionRange(ISourceRange, ICompilationUnit, SelectionAnalyzer)
      */
+	@Override
 	ISourceRange internalGetNewSelectionRange(ISourceRange oldSourceRange, ISourceReference sr, SelectionAnalyzer selAnalyzer) throws JavaModelException{
 		ASTNode first= selAnalyzer.getFirstSelectedNode();
 		if (first == null || first.getParent() == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectHistoryAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectHistoryAction.java
index 65413c6..6da6cca 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectHistoryAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectHistoryAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class StructureSelectHistoryAction extends Action implements IUpdate {
 		setEnabled(!fHistory.isEmpty());
 	}
 
+	@Override
 	public void run() {
 		ISourceRange old= fHistory.getLast();
 		if (old != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectNextAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectNextAction.java
index d4cb0d7..01be3cb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectNextAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectNextAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class StructureSelectNextAction extends StructureSelectionAction{
 			lastCoveringNode.accept(analyzer);
 			return analyzer.fNextNode;
 		}
+		@Override
 		protected boolean visitNode(ASTNode node) {
 			int start= node.getStartPosition();
 			int end= start + node.getLength();
@@ -65,6 +66,7 @@ public class StructureSelectNextAction extends StructureSelectionAction{
 	/* non java doc
 	 * @see StructureSelectionAction#internalGetNewSelectionRange(ISourceRange, ICompilationUnit, SelectionAnalyzer)
 	 */
+	@Override
 	ISourceRange internalGetNewSelectionRange(ISourceRange oldSourceRange, ISourceReference sr, SelectionAnalyzer selAnalyzer) throws JavaModelException{
 		if (oldSourceRange.getLength() == 0 && selAnalyzer.getLastCoveringNode() != null) {
 			ASTNode previousNode= NextNodeAnalyzer.perform(oldSourceRange.getOffset(), selAnalyzer.getLastCoveringNode());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectPreviousAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectPreviousAction.java
index 9d2cff8..65dbd53 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectPreviousAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectPreviousAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class StructureSelectPreviousAction extends StructureSelectionAction {
 			lastCoveringNode.accept(analyzer);
 			return analyzer.fPreviousNode;
 		}
+		@Override
 		protected boolean visitNode(ASTNode node) {
 			int start= node.getStartPosition();
 			int end= start + node.getLength();
@@ -65,6 +66,7 @@ public class StructureSelectPreviousAction extends StructureSelectionAction {
 	/* non java doc
 	 * @see StructureSelectionAction#internalGetNewSelectionRange(ISourceRange, ICompilationUnit, SelectionAnalyzer)
 	 */
+	@Override
 	ISourceRange internalGetNewSelectionRange(ISourceRange oldSourceRange, ISourceReference sr, SelectionAnalyzer selAnalyzer) throws JavaModelException{
 		if (oldSourceRange.getLength() == 0 && selAnalyzer.getLastCoveringNode() != null) {
 			ASTNode previousNode= PreviousNodeAnalyzer.perform(oldSourceRange.getOffset(), selAnalyzer.getLastCoveringNode());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectionAction.java
index 1974672..2b2f8e2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/selectionactions/StructureSelectionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,7 @@ public abstract class StructureSelectionAction extends Action {
 	/*
 	 * Method declared in IAction.
 	 */
+	@Override
 	public final  void run() {
 		IJavaElement inputElement= EditorUtility.getEditorInputJavaElement(fEditor, false);
 		if (!(inputElement instanceof ITypeRoot && inputElement.exists()))
@@ -165,8 +166,8 @@ public abstract class StructureSelectionAction extends Action {
 		ASTNode parent= node.getParent();
 		StructuralPropertyDescriptor locationInParent= node.getLocationInParent();
 		if (locationInParent.isChildListProperty()) {
-			List siblings= (List) parent.getStructuralProperty(locationInParent);
-			return (ASTNode[]) siblings.toArray(new ASTNode[siblings.size()]);
+			List<? extends ASTNode> siblings= (List<? extends ASTNode>) parent.getStructuralProperty(locationInParent);
+			return siblings.toArray(new ASTNode[siblings.size()]);
 		}
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelContentProvider.java
index 2891fad..559f76e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,13 +45,14 @@ public final class JavaModelContentProvider extends StandardJavaElementContentPr
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object[] getChildren(final Object element) {
 		if (element instanceof ICompilationUnit)
 			return NO_CHILDREN;
 		else if (element instanceof RefactoringHistory)
 			return ((RefactoringHistory) element).getDescriptors();
 		else if (element instanceof IJavaProject) {
-			final List elements= new ArrayList();
+			final List<Object> elements= new ArrayList<Object>();
 			elements.add(((IJavaProject) element).getProject().getFolder(NAME_SETTINGS_FOLDER));
 			final Object[] children= super.getChildren(element);
 			for (int index= 0; index < children.length; index++) {
@@ -73,6 +74,7 @@ public final class JavaModelContentProvider extends StandardJavaElementContentPr
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean hasChildren(final Object element) {
 		if (element instanceof ICompilationUnit)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelLabelProvider.java
index 29c78b5..3a5fa15 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,6 +78,7 @@ public final class JavaModelLabelProvider extends AppearanceAwareLabelProvider {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		fHistoryLabelProvider.dispose();
@@ -90,6 +91,7 @@ public final class JavaModelLabelProvider extends AppearanceAwareLabelProvider {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Image getImage(final Object element) {
 		if (element instanceof IFolder) {
 			final IFolder folder= (IFolder) element;
@@ -115,6 +117,7 @@ public final class JavaModelLabelProvider extends AppearanceAwareLabelProvider {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getText(final Object element) {
 		if (element instanceof IFolder) {
 			final IFolder folder= (IFolder) element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelMerger.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelMerger.java
index 4b55b24..ccbe8da 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelMerger.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelMerger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,9 +48,10 @@ public final class JavaModelMerger extends AbstractResourceMappingMerger {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected IProject[] getDependencies(final IProject[] projects) {
 		Assert.isNotNull(projects);
-		final Set set= new HashSet();
+		final Set<IProject> set= new HashSet<IProject>();
 		for (int index= 0; index < projects.length; index++)
 			getDependentProjects(set, projects[index]);
 		final IProject[] result= new IProject[set.size()];
@@ -66,7 +67,7 @@ public final class JavaModelMerger extends AbstractResourceMappingMerger {
 	 * @param project
 	 *            the project to get its dependent projects
 	 */
-	private void getDependentProjects(final Set set, final IProject project) {
+	private void getDependentProjects(final Set<IProject> set, final IProject project) {
 		Assert.isNotNull(set);
 		Assert.isNotNull(project);
 		final IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelProvider.java
index a82ef07..a24a33e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@ public final class JavaModelProvider extends ModelProvider {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ResourceMapping[] getMappings(final IResource resource, final ResourceMappingContext context, final IProgressMonitor monitor) throws CoreException {
 		final IJavaElement element= JavaCore.create(resource);
 		if (element != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringDescriptorResourceMapping.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringDescriptorResourceMapping.java
index 667fbb4..bb76b53 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringDescriptorResourceMapping.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringDescriptorResourceMapping.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public final class JavaRefactoringDescriptorResourceMapping extends AbstractRefa
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getModelProviderId() {
 		return JavaModelProvider.JAVA_MODEL_PROVIDER_ID;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringHistoryResourceMapping.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringHistoryResourceMapping.java
index aefab53..48dc117 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringHistoryResourceMapping.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaRefactoringHistoryResourceMapping.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public final class JavaRefactoringHistoryResourceMapping extends AbstractRefacto
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getModelProviderId() {
 		return JavaModelProvider.JAVA_MODEL_PROVIDER_ID;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaResourceMapping.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaResourceMapping.java
index ca45692..ff5ef49 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaResourceMapping.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaResourceMapping.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public final class JavaResourceMapping extends ResourceMapping {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object getModelObject() {
 		return fResource;
 	}
@@ -50,6 +51,7 @@ public final class JavaResourceMapping extends ResourceMapping {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getModelProviderId() {
 		return JavaModelProvider.JAVA_MODEL_PROVIDER_ID;
 	}
@@ -57,6 +59,7 @@ public final class JavaResourceMapping extends ResourceMapping {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public IProject[] getProjects() {
 		return new IProject[] { fResource.getProject() };
 	}
@@ -64,6 +67,7 @@ public final class JavaResourceMapping extends ResourceMapping {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ResourceTraversal[] getTraversals(final ResourceMappingContext context, final IProgressMonitor monitor) {
 		return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { fResource }, IResource.DEPTH_INFINITE, IResource.NONE) };
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationCompareAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationCompareAdapter.java
index a760ada..77a91a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationCompareAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationCompareAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,6 +70,7 @@ public final class JavaSynchronizationCompareAdapter extends AbstractSynchroniza
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public ICompareInput asCompareInput(final ISynchronizationContext context, final Object element) {
 		if (element instanceof RefactoringDescriptorProxy)
 			return super.asCompareInput(context, element);
@@ -84,7 +85,7 @@ public final class JavaSynchronizationCompareAdapter extends AbstractSynchroniza
 	 */
 	public ResourceMapping[] restore(final IMemento memento) {
 		IMemento[] children= memento.getChildren(RESOURCES);
-		final List result= new ArrayList();
+		final List<ResourceMapping> result= new ArrayList<ResourceMapping>();
 		for (int index= 0; index < children.length; index++) {
 			final Integer typeInt= children[index].getInteger(RESOURCE_TYPE);
 			if (typeInt == null)
@@ -146,7 +147,7 @@ public final class JavaSynchronizationCompareAdapter extends AbstractSynchroniza
 				JavaPlugin.log(event);
 			}
 		}
-		return (ResourceMapping[]) result.toArray(new ResourceMapping[result.size()]);
+		return result.toArray(new ResourceMapping[result.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationContentProvider.java
index 213ca84..ff92f86 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,8 +175,8 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 			}
 		}
 		if (parent instanceof ISynchronizationContext) {
-			final Set result= new HashSet();
-			for (final Iterator iterator= modification.getChildren().iterator(); iterator.hasNext();) {
+			final Set<IJavaElement> result= new HashSet<IJavaElement>();
+			for (final Iterator<IAdaptable> iterator= modification.getChildren().iterator(); iterator.hasNext();) {
 				final Object element= iterator.next();
 				if (element instanceof IProject) {
 					final IJavaElement project= asJavaProject((IProject) element);
@@ -199,8 +199,8 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 *         <code>false</code> otherwise
 	 */
 	private boolean convertToJavaElements(final PipelinedViewerUpdate update) {
-		final Set result= new HashSet();
-		for (final Iterator iterator= update.getRefreshTargets().iterator(); iterator.hasNext();) {
+		final Set<IJavaElement> result= new HashSet<IJavaElement>();
+		for (final Iterator<IAdaptable> iterator= update.getRefreshTargets().iterator(); iterator.hasNext();) {
 			final Object element= iterator.next();
 			if (element instanceof IProject) {
 				final IJavaElement project= asJavaProject((IProject) element);
@@ -217,6 +217,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void diffsChanged(final IDiffChangeEvent event, final IProgressMonitor monitor) {
 		syncExec(new Runnable() {
 
@@ -235,7 +236,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 * @return the projects that contain changes
 	 */
 	private IJavaProject[] getChangedProjects(final IDiffChangeEvent event) {
-		final Set result= new HashSet();
+		final Set<IJavaProject> result= new HashSet<IJavaProject>();
 		final IDiff[] changes= event.getChanges();
 		for (int index= 0; index < changes.length; index++) {
 			final IResource resource= ResourceDiffTree.getResourceFor(changes[index]);
@@ -267,12 +268,13 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 				}
 			}
 		}
-		return (IJavaProject[]) result.toArray(new IJavaProject[result.size()]);
+		return result.toArray(new IJavaProject[result.size()]);
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object[] getChildrenInContext(final ISynchronizationContext context, final Object parent, final Object[] children) {
 		final Object[] elements= super.getChildrenInContext(context, parent, children);
 		if (parent instanceof IPackageFragment)
@@ -298,7 +300,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 * @return the filtered elements
 	 */
 	private Object[] getFilteredElements(final Object parent, final Object[] children) {
-		final List result= new ArrayList(children.length);
+		final List<Object> result= new ArrayList<Object>(children.length);
 		for (int index= 0; index < children.length; index++) {
 			if (children[index] instanceof IFolder) {
 				if (!(JavaCore.create((IFolder) children[index]) instanceof IPackageFragmentRoot))
@@ -312,6 +314,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ITreeContentProvider getDelegateContentProvider() {
 		if (fContentProvider == null)
 			fContentProvider= new JavaModelContentProvider();
@@ -326,8 +329,8 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 *            the event
 	 * @return the deleted projects
 	 */
-	private Set getDeletedProjects(final IDiffChangeEvent event) {
-		final Set result= new HashSet();
+	private Set<IProject> getDeletedProjects(final IDiffChangeEvent event) {
+		final Set<IProject> result= new HashSet<IProject>();
 		final IPath[] deletions= event.getRemovals();
 		for (int index= 0; index < deletions.length; index++) {
 			final IPath path= deletions[index];
@@ -348,6 +351,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 *
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object[] getElements(Object parent) {
 		if (parent instanceof ISynchronizationContext)
 			// Put the resource projects directly under the context
@@ -367,7 +371,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 * @return the java project children
 	 */
 	private Object[] getJavaProjectChildren(final ISynchronizationContext context, final Object parent, final Object[] children) {
-		final LinkedList list= new LinkedList();
+		final LinkedList<Object> list= new LinkedList<Object>();
 		for (int index= 0; index < children.length; index++) {
 			if (children[index] instanceof IPackageFragment) {
 				final IPackageFragment fragment= (IPackageFragment) children[index];
@@ -413,8 +417,8 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 		return list.toArray(new Object[list.size()]);
 	}
 
-	private boolean containsAsResource(List list, IResource child) {
-		for (Iterator iter= list.iterator(); iter.hasNext(); ) {
+	private boolean containsAsResource(List<Object> list, IResource child) {
+		for (Iterator<Object> iter= list.iterator(); iter.hasNext(); ) {
 			Object element= iter.next();
 			if (child.equals(element))
 				return true;
@@ -453,6 +457,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getModelProviderId() {
 		return JavaModelProvider.JAVA_MODEL_PROVIDER_ID;
 	}
@@ -460,6 +465,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object getModelRoot() {
 		if (fModelRoot == null)
 			fModelRoot= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
@@ -478,7 +484,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 * @return the package fragment children
 	 */
 	private Object[] getPackageFragmentChildren(final ISynchronizationContext context, final Object parent, final Object[] children) {
-		final Set set= new HashSet();
+		final Set<Object> set= new HashSet<Object>();
 		for (int index= 0; index < children.length; index++)
 			set.add(children[index]);
 		IPackageFragment packageFragment= (IPackageFragment) parent;
@@ -520,7 +526,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 * @return the package fragment root children
 	 */
 	private Object[] getPackageFragmentRootChildren(final ISynchronizationContext context, final Object parent, final Object[] children) {
-		final Set set= new HashSet();
+		final Set<Object> set= new HashSet<Object>();
 		for (int index= 0; index < children.length; index++) {
 			if (children[index] instanceof IPackageFragment) {
 				IPackageFragment fragment = (IPackageFragment) children[index];
@@ -590,8 +596,8 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 			// When a context is the root, the resource content provider returns
 			// projects as direct children. We should replace any projects that
 			// are Java projects with an IJavaProject
-			final Set result= new HashSet(children.size());
-			for (final Iterator iterator= children.iterator(); iterator.hasNext();) {
+			final Set<IJavaElement> result= new HashSet<IJavaElement>(children.size());
+			for (final Iterator<Object> iterator= children.iterator(); iterator.hasNext();) {
 				final Object element= iterator.next();
 				if (element instanceof IProject) {
 					final IJavaElement java= asJavaProject((IProject) element);
@@ -619,7 +625,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 		} else if (parent instanceof IFolder) {
 			// Remove any children that are also source folders so they
 			// don't appear twice
-			for (final Iterator iterator= children.iterator(); iterator.hasNext();) {
+			for (final Iterator<Object> iterator= children.iterator(); iterator.hasNext();) {
 				final Object element= iterator.next();
 				if (element instanceof IFolder) {
 					IFolder folder = (IFolder) element;
@@ -651,6 +657,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ResourceTraversal[] getTraversals(final ISynchronizationContext context, final Object object) {
 		return getResourceTraversals(object);
 	}
@@ -660,13 +667,13 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 *
 	 * @return the visible projects
 	 */
-	private Set getVisibleProjects() {
+	private Set<IJavaProject> getVisibleProjects() {
 		final TreeItem[] children= ((TreeViewer) getViewer()).getTree().getItems();
-		final Set result= new HashSet();
+		final Set<IJavaProject> result= new HashSet<IJavaProject>();
 		for (int index= 0; index < children.length; index++) {
 			final Object data= children[index].getData();
 			if (data instanceof IJavaProject)
-				result.add(data);
+				result.add((IJavaProject) data);
 		}
 		return result;
 	}
@@ -678,14 +685,14 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	 *            the event
 	 */
 	private void handleChange(final IDiffChangeEvent event) {
-		final Set existing= getVisibleProjects();
+		final Set<IJavaProject> existing= getVisibleProjects();
 		// Get all existing and open projects that contain changes
 		// and determine what needs to be done to the project
 		// (i.e. add, remove or refresh)
 		final IJavaProject[] changed= getChangedProjects(event);
-		final List refreshes= new ArrayList(changed.length);
-		final List additions= new ArrayList(changed.length);
-		final List removals= new ArrayList(changed.length);
+		final List<IJavaProject> refreshes= new ArrayList<IJavaProject>(changed.length);
+		final List<IJavaProject> additions= new ArrayList<IJavaProject>(changed.length);
+		final List<IJavaProject> removals= new ArrayList<IJavaProject>(changed.length);
 		for (int index= 0; index < changed.length; index++) {
 			final IJavaProject project= changed[index];
 			if (hasVisibleChanges(event.getTree(), project)) {
@@ -697,9 +704,9 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 				removals.add(project);
 		}
 		// Remove any java projects that correspond to deleted or closed projects
-		final Set removed= getDeletedProjects(event);
-		for (final Iterator iterator= existing.iterator(); iterator.hasNext();) {
-			final IJavaProject element= (IJavaProject) iterator.next();
+		final Set<IProject> removed= getDeletedProjects(event);
+		for (final Iterator<IJavaProject> iterator= existing.iterator(); iterator.hasNext();) {
+			final IJavaProject element= iterator.next();
 			if (removed.contains(element.getResource()))
 				removals.add(element);
 		}
@@ -714,7 +721,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 				if (!removals.isEmpty())
 					viewer.remove(viewer.getInput(), removals.toArray());
 				if (!refreshes.isEmpty()) {
-					for (final Iterator iter= refreshes.iterator(); iter.hasNext();)
+					for (final Iterator<IJavaProject> iter= refreshes.iterator(); iter.hasNext();)
 						viewer.refresh(iter.next());
 				}
 			} finally {
@@ -726,6 +733,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean hasChildren(final Object element) {
 		if (element instanceof ICompilationUnit || element instanceof IFile || element instanceof RefactoringDescriptorProxy || element instanceof RefactoringDescriptor)
 			return false;
@@ -772,6 +780,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	private boolean hasVisibleChanges(final IDiffTree tree, final IJavaProject project) {
 		return tree.hasMatchingDiffs(project.getResource().getFullPath(), new FastDiffFilter() {
 
+			@Override
 			public boolean select(final IDiff diff) {
 				return isVisible(diff);
 			}
@@ -811,6 +820,7 @@ public final class JavaSynchronizationContentProvider extends AbstractSynchroniz
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean isInScope(final ISynchronizationScope scope, final Object parent, final Object element) {
 		final IResource resource= JavaModelProvider.getResource(element);
 		if (resource == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationLabelProvider.java
index 12defef..61d4eaa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/model/JavaSynchronizationLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dispose() {
 		if (fPackageImage != null && !fPackageImage.isDisposed())
 			fPackageImage.dispose();
@@ -67,6 +68,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Image getDelegateImage(final Object element) {
 		if (element instanceof IPackageFragment) {
 			final IPackageFragment fragment= (IPackageFragment) element;
@@ -83,6 +85,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected ILabelProvider getDelegateLabelProvider() {
 		if (fLabelProvider == null)
 			fLabelProvider= new DecoratingLabelProvider(new JavaModelLabelProvider(ModelMessages.JavaModelLabelProvider_project_preferences_label, ModelMessages.JavaModelLabelProvider_refactorings_label), new ProblemsLabelDecorator(null));
@@ -92,6 +95,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected IDiff getDiff(final Object element) {
 		final ISynchronizationContext context= getContext();
 		final IResource resource= JavaModelProvider.getResource(element);
@@ -108,6 +112,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int getMarkerSeverity(final Object element) {
 		// Decoration label provider is handling this
 		return -1;
@@ -116,6 +121,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object getModelRoot() {
 		if (fModelRoot == null)
 			fModelRoot= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
@@ -125,6 +131,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean hasDecendantConflicts(final Object element) {
 		final ISynchronizationContext context= getContext();
 		final IResource resource= JavaModelProvider.getResource(element);
@@ -136,6 +143,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean isBusy(final Object element) {
 		final ISynchronizationContext context= getContext();
 		final IResource resource= JavaModelProvider.getResource(element);
@@ -147,6 +155,7 @@ public final class JavaSynchronizationLabelProvider extends AbstractSynchronizat
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean isIncludeOverlays() {
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/CommonLayoutActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/CommonLayoutActionGroup.java
index 8b1d8af..8245bcb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/CommonLayoutActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/CommonLayoutActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ public class CommonLayoutActionGroup extends MultiActionGroup {
 		/*
 		 * @see org.eclipse.jface.action.IAction#run()
 		 */
+		@Override
 		public void run() {
 			if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) != fIsFlatLayout) {
 				fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, fIsFlatLayout);
@@ -90,6 +91,7 @@ public class CommonLayoutActionGroup extends MultiActionGroup {
 	 *
 	 * @see ActionGroup#fillActionBars(IActionBars)
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		if (!fHasContributedToViewMenu) {
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaDropAdapterAssistant.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaDropAdapterAssistant.java
index 2a7ec57..4e2db2e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaDropAdapterAssistant.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaDropAdapterAssistant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,12 +56,13 @@ import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 
 public class JavaDropAdapterAssistant extends CommonDropAdapterAssistant {
 
-	private List fElements;
+	private List<?> fElements;
 	private JavaMoveProcessor fMoveProcessor;
 	private int fCanMoveElements;
 	private JavaCopyProcessor fCopyProcessor;
 	private int fCanCopyElements;
 
+	@Override
 	public IStatus handleDrop(CommonDropAdapter dropAdapter, DropTargetEvent dropTargetEvent, Object target) {
 		int currentOperation= dropAdapter.getCurrentOperation();
 		if (LocalSelectionTransfer.getInstance().isSupportedType(dropAdapter.getCurrentTransfer())) {
@@ -104,6 +105,7 @@ public class JavaDropAdapterAssistant extends CommonDropAdapterAssistant {
 		return Status.CANCEL_STATUS;
 	}
 
+	@Override
 	public IStatus validateDrop(Object target, int operation, TransferData transferType) {
 		IStatus result = Status.OK_STATUS;
 		if (LocalSelectionTransfer.getInstance().isSupportedType(transferType)) {
@@ -163,6 +165,7 @@ public class JavaDropAdapterAssistant extends CommonDropAdapterAssistant {
 		return result;
 	}
 
+	@Override
 	public boolean isSupportedType(TransferData transferType) {
 		return super.isSupportedType(transferType) || FileTransfer.getInstance().isSupportedType(transferType);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorActionProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorActionProvider.java
index 43dc307..afa5ac7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorActionProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ public class JavaNavigatorActionProvider extends CommonActionProvider {
 
 	private boolean fInViewPart= false;
 
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		if (fInViewPart) {
 			fOpenViewGroup.fillActionBars(actionBars);
@@ -63,6 +64,7 @@ public class JavaNavigatorActionProvider extends CommonActionProvider {
 		}
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		if (fInViewPart) {
 			fOpenViewGroup.fillContextMenu(menu);
@@ -73,6 +75,7 @@ public class JavaNavigatorActionProvider extends CommonActionProvider {
 		}
 	}
 
+	@Override
 	public void init(ICommonActionExtensionSite site) {
 
 		ICommonViewerWorkbenchSite workbenchSite= null;
@@ -95,6 +98,7 @@ public class JavaNavigatorActionProvider extends CommonActionProvider {
 		}
 	}
 
+	@Override
 	public void setContext(ActionContext context) {
 		super.setContext(context);
 		if (fInViewPart) {
@@ -110,6 +114,7 @@ public class JavaNavigatorActionProvider extends CommonActionProvider {
 	 * @see org.eclipse.ui.actions.ActionGroup#dispose()
 	 * @since 3.5
 	 */
+	@Override
 	public void dispose() {
 		if (fInViewPart) {
 			fOpenViewGroup.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorContentProvider.java
index 9ebf8ef..e3a6038 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,15 +92,18 @@ public class JavaNavigatorContentProvider extends
 		setProvideMembers(showCUChildren);
 	}
 
+	@Override
 	public void dispose() {
 		super.dispose();
 		fStateModel.removePropertyChangeListener(fLayoutPropertyListener);
 	}
 
+	@Override
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		super.inputChanged(viewer, oldInput, findInputElement(newInput));
 	}
 
+	@Override
 	public Object getParent(Object element) {
 		Object parent= super.getParent(element);
 		if (parent instanceof IJavaModel) {
@@ -112,6 +115,7 @@ public class JavaNavigatorContentProvider extends
 		return parent;
 	}
 
+	@Override
 	public Object[] getElements(Object inputElement) {
 		if (inputElement instanceof IWorkspaceRoot) {
 			IWorkspaceRoot root = (IWorkspaceRoot) inputElement;
@@ -125,6 +129,7 @@ public class JavaNavigatorContentProvider extends
 		return super.getElements(inputElement);
 	}
 
+	@Override
 	public boolean hasChildren(Object element) {
 		if (element instanceof IProject) {
 			return ((IProject) element).isAccessible();
@@ -132,6 +137,7 @@ public class JavaNavigatorContentProvider extends
 		return super.hasChildren(element);
 	}
 
+	@Override
 	public Object[] getChildren(Object parentElement) {
 		if (parentElement instanceof IWorkspaceRoot) {
 			IWorkspaceRoot root = (IWorkspaceRoot) parentElement;
@@ -194,8 +200,8 @@ public class JavaNavigatorContentProvider extends
 	}
 
 	private void deconvertJavaProjects(PipelinedShapeModification modification) {
-		Set convertedChildren = new LinkedHashSet();
-		for (Iterator iterator = modification.getChildren().iterator(); iterator.hasNext();) {
+		Set<IProject> convertedChildren = new LinkedHashSet<IProject>();
+		for (Iterator<IAdaptable> iterator = modification.getChildren().iterator(); iterator.hasNext();) {
 			Object added = iterator.next();
 			if(added instanceof IJavaProject) {
 				iterator.remove();
@@ -237,11 +243,11 @@ public class JavaNavigatorContentProvider extends
 	 *            The set of current children that would be contributed or refreshed in the viewer.
 	 * @return returns true if the conversion took place
 	 */
-	private boolean convertToJavaElements(Set currentChildren) {
+	private boolean convertToJavaElements(Set<Object> currentChildren) {
 
-		LinkedHashSet convertedChildren = new LinkedHashSet();
+		LinkedHashSet<Object> convertedChildren = new LinkedHashSet<Object>();
 		IJavaElement newChild;
-		for (Iterator childrenItr = currentChildren.iterator(); childrenItr
+		for (Iterator<Object> childrenItr = currentChildren.iterator(); childrenItr
 				.hasNext();) {
 			Object child = childrenItr.next();
 			// only convert IFolders and IFiles
@@ -270,9 +276,9 @@ public class JavaNavigatorContentProvider extends
 	 * @param javaElements the java elements
 	 * @param proposedChildren the proposed children
 	 */
-	private void customize(Object[] javaElements, Set proposedChildren) {
-		List elementList= Arrays.asList(javaElements);
-		for (Iterator iter= proposedChildren.iterator(); iter.hasNext();) {
+	private void customize(Object[] javaElements, Set<Object> proposedChildren) {
+		List<?> elementList= Arrays.asList(javaElements);
+		for (Iterator<?> iter= proposedChildren.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			IResource resource= null;
 			if (element instanceof IResource) {
@@ -313,7 +319,8 @@ public class JavaNavigatorContentProvider extends
 		return convertToJavaElements(updateSynchronization.getRefreshTargets());
 	}
 
-	protected void postAdd(final Object parent, final Object element, Collection runnables) {
+	@Override
+	protected void postAdd(final Object parent, final Object element, Collection<Runnable> runnables) {
 		if (parent instanceof IJavaModel)
 			super.postAdd(((IJavaModel) parent).getWorkspace().getRoot(), element, runnables);
 		else if (parent instanceof IJavaProject)
@@ -323,7 +330,8 @@ public class JavaNavigatorContentProvider extends
 	}
 
 
-	protected void postRefresh(final List toRefresh, final boolean updateLabels, Collection runnables) {
+	@Override
+	protected void postRefresh(final List<Object> toRefresh, final boolean updateLabels, Collection<Runnable> runnables) {
 		int size= toRefresh.size();
 		for (int i= 0; i < size; i++) {
 			Object element= toRefresh.get(i);
@@ -331,7 +339,7 @@ public class JavaNavigatorContentProvider extends
 				toRefresh.set(i, ((IJavaProject) element).getProject());
 			}
 		}
-		for (Iterator iter = toRefresh.iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter = toRefresh.iterator(); iter.hasNext();) {
 			Object element = iter.next();
 			if (element instanceof IJavaModel) {
 				iter.remove();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java
index 4105add..f5ac8e2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -136,14 +136,17 @@ public class JavaNavigatorLabelProvider implements ICommonLabelProvider, IStyled
 		delegeteLabelProvider.removeListener(listener);
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		return delegeteLabelProvider.equals(obj);
 	}
 
+	@Override
 	public int hashCode() {
 		return delegeteLabelProvider.hashCode();
 	}
 
+	@Override
 	public String toString() {
 		return delegeteLabelProvider.toString();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorRefactorActionProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorRefactorActionProvider.java
index b678c2f..bc13a7d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorRefactorActionProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorRefactorActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public class JavaNavigatorRefactorActionProvider extends CommonActionProvider {
 
 	private RefactorActionGroup fRefactorGroup;
 
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		if (fRefactorGroup != null) {
 			fRefactorGroup.fillActionBars(actionBars);
@@ -40,12 +41,14 @@ public class JavaNavigatorRefactorActionProvider extends CommonActionProvider {
 		}
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		if (fRefactorGroup != null) {
 			fRefactorGroup.fillContextMenu(menu);
 		}
 	}
 
+	@Override
 	public void init(ICommonActionExtensionSite site) {
 		ICommonViewerWorkbenchSite workbenchSite= null;
 		if (site.getViewSite() instanceof ICommonViewerWorkbenchSite)
@@ -62,6 +65,7 @@ public class JavaNavigatorRefactorActionProvider extends CommonActionProvider {
 		}
 	}
 
+	@Override
 	public void setContext(ActionContext context) {
 		if (fRefactorGroup != null) {
 			fRefactorGroup.setContext(context);
@@ -72,6 +76,7 @@ public class JavaNavigatorRefactorActionProvider extends CommonActionProvider {
 	 * @see org.eclipse.ui.actions.ActionGroup#dispose()
 	 * @since 3.5
 	 */
+	@Override
 	public void dispose() {
 		if (fRefactorGroup != null)
 			fRefactorGroup.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java
index 6494b98..af4df37 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,11 +92,13 @@ public class JavaNavigatorViewActionProvider extends CommonActionProvider {
 	};
 
 
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		fActionBars= actionBars;
 		fLayoutActionGroup.fillActionBars(actionBars);
 	}
 
+	@Override
 	public void init(ICommonActionExtensionSite site) {
 
 		fExtensionSite= site;
@@ -113,16 +115,19 @@ public class JavaNavigatorViewActionProvider extends CommonActionProvider {
 
 	}
 
+	@Override
 	public void dispose() {
 		fLayoutActionGroup.dispose();
 		fExtensionSite.getContentService().getActivationService().removeExtensionActivationListener(fMenuUpdater);
 		super.dispose();
 	}
 
+	@Override
 	public void setContext(ActionContext context) {
 		super.setContext(context);
 	}
 
+	@Override
 	public void restoreState(IMemento memento) {
 		boolean isCurrentLayoutFlat= true;
 		Integer state= null;
@@ -145,6 +150,7 @@ public class JavaNavigatorViewActionProvider extends CommonActionProvider {
 		fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat);
 	}
 
+	@Override
 	public void saveState(IMemento aMemento) {
 		super.saveState(aMemento);
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/NonEssentialElementsFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/NonEssentialElementsFilter.java
index 6a8ee3a..b1d4ac6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/NonEssentialElementsFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/NonEssentialElementsFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public abstract class NonEssentialElementsFilter extends ViewerFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (!isStateModelInitialized) {
 			initStateModel(viewer);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/OpenAndExpand.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/OpenAndExpand.java
index babd958..d7c68bd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/OpenAndExpand.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/OpenAndExpand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class OpenAndExpand extends SelectionDispatchAction {
 		fViewer = viewer;
 	}
 
+	@Override
 	public void run() {
 		fOpenAction.run();
 		if(getSelection() != null && getSelection() instanceof IStructuredSelection)
@@ -52,22 +53,26 @@ public class OpenAndExpand extends SelectionDispatchAction {
 
 	}
 
+	@Override
 	public void run(ISelection selection) {
 		fOpenAction.run(selection);
 		if(selection != null && selection instanceof IStructuredSelection)
 			expand(((IStructuredSelection)selection).getFirstElement());
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		fOpenAction.run(selection);
 		if(selection != null)
 			expand(selection.getFirstElement());
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
 		fOpenAction.run(selection);
 	}
 
+	@Override
 	public void run(JavaTextSelection selection) {
 		fOpenAction.run(selection);
 	}
@@ -76,30 +81,37 @@ public class OpenAndExpand extends SelectionDispatchAction {
 		fOpenAction.run(elements);
 	}
 
+	@Override
 	public void runWithEvent(Event event) {
 		fOpenAction.runWithEvent(event);
 	}
 
+	@Override
 	public void addPropertyChangeListener(IPropertyChangeListener listener) {
 		fOpenAction.addPropertyChangeListener(listener);
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		return fOpenAction.equals(obj);
 	}
 
+	@Override
 	public int getAccelerator() {
 		return fOpenAction.getAccelerator();
 	}
 
+	@Override
 	public String getActionDefinitionId() {
 		return fOpenAction.getActionDefinitionId();
 	}
 
+	@Override
 	public String getDescription() {
 		return fOpenAction.getDescription();
 	}
 
+	@Override
 	public ImageDescriptor getDisabledImageDescriptor() {
 		return fOpenAction.getDisabledImageDescriptor();
 	}
@@ -108,154 +120,192 @@ public class OpenAndExpand extends SelectionDispatchAction {
 		return fOpenAction.getElementToOpen(object);
 	}
 
+	@Override
 	public HelpListener getHelpListener() {
 		return fOpenAction.getHelpListener();
 	}
 
+	@Override
 	public ImageDescriptor getHoverImageDescriptor() {
 		return fOpenAction.getHoverImageDescriptor();
 	}
 
+	@Override
 	public String getId() {
 		return fOpenAction.getId();
 	}
 
+	@Override
 	public ImageDescriptor getImageDescriptor() {
 		return fOpenAction.getImageDescriptor();
 	}
 
+	@Override
 	public IMenuCreator getMenuCreator() {
 		return fOpenAction.getMenuCreator();
 	}
 
+	@Override
 	public ISelection getSelection() {
 		return fOpenAction.getSelection();
 	}
 
+	@Override
 	public ISelectionProvider getSelectionProvider() {
 		return fOpenAction.getSelectionProvider();
 	}
 
+	@Override
 	public Shell getShell() {
 		return fOpenAction.getShell();
 	}
 
+	@Override
 	public IWorkbenchSite getSite() {
 		return fOpenAction.getSite();
 	}
 
+	@Override
 	public int getStyle() {
 		return fOpenAction.getStyle();
 	}
 
+	@Override
 	public String getText() {
 		return fOpenAction.getText();
 	}
 
+	@Override
 	public String getToolTipText() {
 		return fOpenAction.getToolTipText();
 	}
 
+	@Override
 	public int hashCode() {
 		return fOpenAction.hashCode();
 	}
 
+	@Override
 	public boolean isChecked() {
 		return fOpenAction.isChecked();
 	}
 
+	@Override
 	public boolean isEnabled() {
 		return fOpenAction.isEnabled();
 	}
 
+	@Override
 	public boolean isHandled() {
 		return fOpenAction.isHandled();
 	}
 
+	@Override
 	public void removePropertyChangeListener(IPropertyChangeListener listener) {
 		fOpenAction.removePropertyChangeListener(listener);
 	}
 
+	@Override
 	public void selectionChanged(ISelection selection) {
 		fOpenAction.selectionChanged(selection);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		fOpenAction.selectionChanged(selection);
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		fOpenAction.selectionChanged(selection);
 	}
 
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		fOpenAction.selectionChanged(selection);
 	}
 
+	@Override
 	public void selectionChanged(SelectionChangedEvent event) {
 		fOpenAction.selectionChanged(event);
 	}
 
+	@Override
 	public void setAccelerator(int keycode) {
 		fOpenAction.setAccelerator(keycode);
 	}
 
+	@Override
 	public void setActionDefinitionId(String id) {
 		fOpenAction.setActionDefinitionId(id);
 	}
 
+	@Override
 	public void setChecked(boolean checked) {
 		fOpenAction.setChecked(checked);
 	}
 
+	@Override
 	public void setDescription(String text) {
 		fOpenAction.setDescription(text);
 	}
 
+	@Override
 	public void setDisabledImageDescriptor(ImageDescriptor newImage) {
 		fOpenAction.setDisabledImageDescriptor(newImage);
 	}
 
+	@Override
 	public void setEnabled(boolean enabled) {
 		fOpenAction.setEnabled(enabled);
 	}
 
+	@Override
 	public void setHelpListener(HelpListener listener) {
 		fOpenAction.setHelpListener(listener);
 	}
 
+	@Override
 	public void setHoverImageDescriptor(ImageDescriptor newImage) {
 		fOpenAction.setHoverImageDescriptor(newImage);
 	}
 
+	@Override
 	public void setId(String id) {
 		fOpenAction.setId(id);
 	}
 
+	@Override
 	public void setImageDescriptor(ImageDescriptor newImage) {
 		fOpenAction.setImageDescriptor(newImage);
 	}
 
+	@Override
 	public void setMenuCreator(IMenuCreator creator) {
 		fOpenAction.setMenuCreator(creator);
 	}
 
+	@Override
 	public void setSpecialSelectionProvider(ISelectionProvider provider) {
 		fOpenAction.setSpecialSelectionProvider(provider);
 	}
 
+	@Override
 	public void setText(String text) {
 		fOpenAction.setText(text);
 	}
 
+	@Override
 	public void setToolTipText(String toolTipText) {
 		fOpenAction.setToolTipText(toolTipText);
 	}
 
+	@Override
 	public String toString() {
 		return fOpenAction.toString();
 	}
 
+	@Override
 	public void update(ISelection selection) {
 		fOpenAction.update(selection);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/PackageExplorerOpenActionProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/PackageExplorerOpenActionProvider.java
index c6ba6e9..388d429 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/PackageExplorerOpenActionProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/PackageExplorerOpenActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public class PackageExplorerOpenActionProvider extends CommonActionProvider {
 
 	private boolean fInViewPart = false;
 
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		if (fInViewPart) {
 			fOpenGroup.fillActionBars(actionBars);
@@ -45,6 +46,7 @@ public class PackageExplorerOpenActionProvider extends CommonActionProvider {
 
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 
 		if (fInViewPart) {
@@ -54,6 +56,7 @@ public class PackageExplorerOpenActionProvider extends CommonActionProvider {
 		}
 	}
 
+	@Override
 	public void init(ICommonActionExtensionSite site) {
 
 		ICommonViewerWorkbenchSite workbenchSite = null;
@@ -73,6 +76,7 @@ public class PackageExplorerOpenActionProvider extends CommonActionProvider {
 		}
 	}
 
+	@Override
 	public void setContext(ActionContext context) {
 		super.setContext(context);
 		if (fInViewPart) {
@@ -84,6 +88,7 @@ public class PackageExplorerOpenActionProvider extends CommonActionProvider {
 	 * @see org.eclipse.ui.actions.ActionGroup#dispose()
 	 * @since 3.5
 	 */
+	@Override
 	public void dispose() {
 		if (fOpenGroup != null)
 			fOpenGroup.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ClassPathContainer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ClassPathContainer.java
index 83be9e8..fd942ee 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ClassPathContainer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ClassPathContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,7 @@ public class ClassPathContainer extends PackageFragmentRootContainer {
 		}
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (obj instanceof ClassPathContainer) {
 			ClassPathContainer other = (ClassPathContainer)obj;
@@ -112,16 +113,19 @@ public class ClassPathContainer extends PackageFragmentRootContainer {
 		return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return getJavaProject().hashCode()*17+fClassPathEntry.hashCode();
 	}
 
+	@Override
 	public IPackageFragmentRoot[] getPackageFragmentRoots() {
 		return getJavaProject().findPackageFragmentRoots(fClassPathEntry);
 	}
 
+	@Override
 	public IAdaptable[] getChildren() {
-		List list= new ArrayList();
+		List<IAdaptable> list= new ArrayList<IAdaptable>();
 		IPackageFragmentRoot[] roots= getPackageFragmentRoots();
 		for (int i= 0; i < roots.length; i++) {
 			list.add(roots[i]);
@@ -143,13 +147,15 @@ public class ClassPathContainer extends PackageFragmentRootContainer {
 				}
 			}
 		}
-		return (IAdaptable[]) list.toArray(new IAdaptable[list.size()]);
+		return list.toArray(new IAdaptable[list.size()]);
 	}
 
+	@Override
 	public ImageDescriptor getImageDescriptor() {
 		return JavaPluginImages.DESC_OBJS_LIBRARY;
 	}
 
+	@Override
 	public String getLabel() {
 		if (fContainer != null)
 			return fContainer.getDescription();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/CustomHashtable.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/CustomHashtable.java
deleted file mode 100644
index 21634d6..0000000
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/CustomHashtable.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Peter Shipton - original hashtable implementation
- *     Nick Edgar - added element comparer support
- *******************************************************************************/
-
-package org.eclipse.jdt.internal.ui.packageview;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-import org.eclipse.jface.viewers.IElementComparer;
-
-/**
- * CustomHashtable associates keys with values. Keys and values cannot be null.
- * The size of the Hashtable is the number of key/value pairs it contains.
- * The capacity is the number of key/value pairs the Hashtable can hold.
- * The load factor is a float value which determines how full the Hashtable
- * gets before expanding the capacity. If the load factor of the Hashtable
- * is exceeded, the capacity is doubled.
- * <p>
- * CustomHashtable allows a custom comparator and hash code provider.
- */
-/* package */final class CustomHashtable {
-
-    /**
-     * HashMapEntry is an internal class which is used to hold the entries of a Hashtable.
-     */
-    private static class HashMapEntry {
-        Object key, value;
-
-        HashMapEntry next;
-
-        HashMapEntry(Object theKey, Object theValue) {
-            key = theKey;
-            value = theValue;
-        }
-    }
-
-    private static final class EmptyEnumerator implements Enumeration {
-        public boolean hasMoreElements() {
-            return false;
-        }
-
-        public Object nextElement() {
-            throw new NoSuchElementException();
-        }
-    }
-
-    private class HashEnumerator implements Enumeration {
-        boolean key;
-
-        int start;
-
-        HashMapEntry entry;
-
-        HashEnumerator(boolean isKey) {
-            key = isKey;
-            start = firstSlot;
-        }
-
-        public boolean hasMoreElements() {
-            if (entry != null)
-                return true;
-            while (start <= lastSlot)
-                if (elementData[start++] != null) {
-                    entry = elementData[start - 1];
-                    return true;
-                }
-            return false;
-        }
-
-        public Object nextElement() {
-            if (hasMoreElements()) {
-                Object result = key ? entry.key : entry.value;
-                entry = entry.next;
-                return result;
-            } else
-                throw new NoSuchElementException();
-        }
-    }
-
-    transient int elementCount;
-
-    transient HashMapEntry[] elementData;
-
-    private float loadFactor;
-
-    private int threshold;
-
-    transient int firstSlot = 0;
-
-    transient int lastSlot = -1;
-
-    transient private IElementComparer comparer;
-
-    private static final EmptyEnumerator emptyEnumerator = new EmptyEnumerator();
-
-    /**
-     * The default capacity used when not specified in the constructor.
-     */
-    public static final int DEFAULT_CAPACITY = 13;
-
-    /**
-     * Constructs a new Hashtable using the default capacity
-     * and load factor.
-     */
-    public CustomHashtable() {
-        this(13);
-    }
-
-    /**
-     * Constructs a new Hashtable using the specified capacity
-     * and the default load factor.
-     *
-     * @param capacity the initial capacity
-     */
-    public CustomHashtable(int capacity) {
-        this(capacity, null);
-    }
-
-    /**
-     * Constructs a new hash table with the default capacity and the given
-     * element comparer.
-     *
-     * @param comparer the element comparer to use to compare keys and obtain
-     *   hash codes for keys, or <code>null</code>  to use the normal
-     *   <code>equals</code> and <code>hashCode</code> methods
-     */
-    public CustomHashtable(IElementComparer comparer) {
-        this(DEFAULT_CAPACITY, comparer);
-    }
-
-    /**
-     * Constructs a new hash table with the given capacity and the given
-     * element comparer.
-     *
-     * @param capacity the maximum number of elements that can be added without
-     *   rehashing
-     * @param comparer the element comparer to use to compare keys and obtain
-     *   hash codes for keys, or <code>null</code>  to use the normal
-     *   <code>equals</code> and <code>hashCode</code> methods
-     */
-    public CustomHashtable(int capacity, IElementComparer comparer) {
-        if (capacity >= 0) {
-            elementCount = 0;
-            elementData = new HashMapEntry[capacity == 0 ? 1 : capacity];
-            firstSlot = elementData.length;
-            loadFactor = 0.75f;
-            computeMaxSize();
-        } else
-            throw new IllegalArgumentException();
-        this.comparer = comparer;
-    }
-
-    /**
-     * Constructs a new hash table with enough capacity to hold all keys in the
-     * given hash table, then adds all key/value pairs in the given hash table
-     * to the new one, using the given element comparer.
-     *
-     * @param table the hash table to add from
-     * @param comparer the element comparer to use to compare keys and obtain
-     *   hash codes for keys, or <code>null</code>  to use the normal
-     *   <code>equals</code> and <code>hashCode</code> methods
-     */
-    public CustomHashtable(CustomHashtable table, IElementComparer comparer) {
-        this(table.size() * 2, comparer);
-        for (int i = table.elementData.length; --i >= 0;) {
-            HashMapEntry entry = table.elementData[i];
-            while (entry != null) {
-                put(entry.key, entry.value);
-                entry = entry.next;
-            }
-        }
-    }
-
-    private void computeMaxSize() {
-        threshold = (int) (elementData.length * loadFactor);
-    }
-
-    /**
-     * Answers if this Hashtable contains the specified object as a key
-     * of one of the key/value pairs.
-     *
-     * @param		key	the object to look for as a key in this Hashtable
-     * @return		true if object is a key in this Hashtable, false otherwise
-     */
-    public boolean containsKey(Object key) {
-        return getEntry(key) != null;
-    }
-
-    /**
-     * Answers an Enumeration on the values of this Hashtable. The
-     * results of the Enumeration may be affected if the contents
-     * of this Hashtable are modified.
-     *
-     * @return		an Enumeration of the values of this Hashtable
-     */
-    public Enumeration elements() {
-        if (elementCount == 0)
-            return emptyEnumerator;
-        return new HashEnumerator(false);
-    }
-
-    /**
-     * Answers the value associated with the specified key in
-     * this Hashtable.
-     *
-     * @param		key	the key of the value returned
-     * @return		the value associated with the specified key, null if the specified key
-     *				does not exist
-     */
-    public Object get(Object key) {
-        int index = (hashCode(key) & 0x7FFFFFFF) % elementData.length;
-        HashMapEntry entry = elementData[index];
-        while (entry != null) {
-            if (keyEquals(key, entry.key))
-                return entry.value;
-            entry = entry.next;
-        }
-        return null;
-    }
-
-    private HashMapEntry getEntry(Object key) {
-        int index = (hashCode(key) & 0x7FFFFFFF) % elementData.length;
-        HashMapEntry entry = elementData[index];
-        while (entry != null) {
-            if (keyEquals(key, entry.key))
-                return entry;
-            entry = entry.next;
-        }
-        return null;
-    }
-
-    /**
-     * Answers the hash code for the given key.
-     */
-    private int hashCode(Object key) {
-        if (comparer == null)
-            return key.hashCode();
-        else
-            return comparer.hashCode(key);
-    }
-
-    /**
-     * Compares two keys for equality.
-     */
-    private boolean keyEquals(Object a, Object b) {
-        if (comparer == null)
-            return a.equals(b);
-        else
-            return comparer.equals(a, b);
-    }
-
-    /**
-     * Answers an Enumeration on the keys of this Hashtable. The
-     * results of the Enumeration may be affected if the contents
-     * of this Hashtable are modified.
-     *
-     * @return		an Enumeration of the keys of this Hashtable
-     */
-    public Enumeration keys() {
-        if (elementCount == 0)
-            return emptyEnumerator;
-        return new HashEnumerator(true);
-    }
-
-    /**
-     * Associate the specified value with the specified key in this Hashtable.
-     * If the key already exists, the old value is replaced. The key and value
-     * cannot be null.
-     *
-     * @param		key	the key to add
-     * @param		value	the value to add
-     * @return		the old value associated with the specified key, null if the key did
-     *				not exist
-     */
-    public Object put(Object key, Object value) {
-        if (key != null && value != null) {
-            int index = (hashCode(key) & 0x7FFFFFFF) % elementData.length;
-            HashMapEntry entry = elementData[index];
-            while (entry != null && !keyEquals(key, entry.key))
-                entry = entry.next;
-            if (entry == null) {
-                if (++elementCount > threshold) {
-                    rehash();
-                    index = (hashCode(key) & 0x7FFFFFFF) % elementData.length;
-                }
-                if (index < firstSlot)
-                    firstSlot = index;
-                if (index > lastSlot)
-                    lastSlot = index;
-                entry = new HashMapEntry(key, value);
-                entry.next = elementData[index];
-                elementData[index] = entry;
-                return null;
-            }
-            Object result = entry.value;
-            entry.key = key; // important to avoid hanging onto keys that are equal but "old" -- see bug 30607
-            entry.value = value;
-            return result;
-        } else
-            throw new NullPointerException();
-    }
-
-    /**
-     * Increases the capacity of this Hashtable. This method is sent when
-     * the size of this Hashtable exceeds the load factor.
-     */
-    private void rehash() {
-        int length = elementData.length << 1;
-        if (length == 0)
-            length = 1;
-        firstSlot = length;
-        lastSlot = -1;
-        HashMapEntry[] newData = new HashMapEntry[length];
-        for (int i = elementData.length; --i >= 0;) {
-            HashMapEntry entry = elementData[i];
-            while (entry != null) {
-                int index = (hashCode(entry.key) & 0x7FFFFFFF) % length;
-                if (index < firstSlot)
-                    firstSlot = index;
-                if (index > lastSlot)
-                    lastSlot = index;
-                HashMapEntry next = entry.next;
-                entry.next = newData[index];
-                newData[index] = entry;
-                entry = next;
-            }
-        }
-        elementData = newData;
-        computeMaxSize();
-    }
-
-    /**
-     * Remove the key/value pair with the specified key from this Hashtable.
-     *
-     * @param		key	the key to remove
-     * @return		the value associated with the specified key, null if the specified key
-     *				did not exist
-     */
-    public Object remove(Object key) {
-        HashMapEntry last = null;
-        int index = (hashCode(key) & 0x7FFFFFFF) % elementData.length;
-        HashMapEntry entry = elementData[index];
-        while (entry != null && !keyEquals(key, entry.key)) {
-            last = entry;
-            entry = entry.next;
-        }
-        if (entry != null) {
-            if (last == null)
-                elementData[index] = entry.next;
-            else
-                last.next = entry.next;
-            elementCount--;
-            return entry.value;
-        }
-        return null;
-    }
-
-    /**
-     * Answers the number of key/value pairs in this Hashtable.
-     *
-     * @return		the number of key/value pairs in this Hashtable
-     */
-    public int size() {
-        return elementCount;
-    }
-
-    /**
-     * Answers the string representation of this Hashtable.
-     *
-     * @return		the string representation of this Hashtable
-     */
-    public String toString() {
-        if (size() == 0)
-            return "{}"; //$NON-NLS-1$
-
-        StringBuffer buffer = new StringBuffer();
-        buffer.append('{');
-        for (int i = elementData.length; --i >= 0;) {
-            HashMapEntry entry = elementData[i];
-            while (entry != null) {
-                buffer.append(entry.key);
-                buffer.append('=');
-                buffer.append(entry.value);
-                buffer.append(", "); //$NON-NLS-1$
-                entry = entry.next;
-            }
-        }
-        // Remove the last ", "
-        if (elementCount > 0)
-            buffer.setLength(buffer.length() - 2);
-        buffer.append('}');
-        return buffer.toString();
-    }
-}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDragAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDragAdapter.java
index 9ff6b6e..a877088 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDragAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDragAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,6 +70,7 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 		return FileTransfer.getInstance();
 	}
 
+	@Override
 	public void dragStart(DragSourceEvent event) {
 		event.doit= isDragable(fProvider.getSelection());
 	}
@@ -78,7 +79,7 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 		if (!(s instanceof IStructuredSelection))
 			return false;
 		IStructuredSelection selection= (IStructuredSelection)s;
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IJavaElement) {
 				IJavaElement jElement= (IJavaElement)element;
@@ -95,12 +96,13 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 				return false;
 			}
 		}
-		List resources= convertIntoResources(selection);
+		List<IResource> resources= convertIntoResources(selection);
 		return resources.size() == selection.size();
 	}
 
+	@Override
 	public void dragSetData(DragSourceEvent event){
-		List elements= getResources();
+		List<IResource> elements= getResources();
 		if (elements == null || elements.size() == 0) {
 			event.data= null;
 			return;
@@ -109,10 +111,11 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 		event.data= getResourceLocations(elements);
 	}
 
-	private static String[] getResourceLocations(List resources) {
-		return Resources.getLocationOSStrings((IResource[]) resources.toArray(new IResource[resources.size()]));
+	private static String[] getResourceLocations(List<IResource> resources) {
+		return Resources.getLocationOSStrings(resources.toArray(new IResource[resources.size()]));
 	}
 
+	@Override
 	public void dragFinished(DragSourceEvent event) {
 		if (!event.doit)
 			return;
@@ -126,18 +129,19 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 	}
 
 	/* package */ void handleDropMove() {
-		final List elements= getResources();
+		final List<IResource> elements= getResources();
 		if (elements == null || elements.size() == 0)
 			return;
 
 		WorkspaceModifyOperation op= new WorkspaceModifyOperation() {
+			@Override
 			public void execute(IProgressMonitor monitor) throws CoreException {
 				try {
 					monitor.beginTask(PackagesMessages.DragAdapter_deleting, elements.size());
 					MultiStatus status= createMultiStatus();
-					Iterator iter= elements.iterator();
+					Iterator<IResource> iter= elements.iterator();
 					while(iter.hasNext()) {
-						IResource resource= (IResource)iter.next();
+						IResource resource= iter.next();
 						try {
 							monitor.subTask(BasicElementLabels.getPathLabel(resource.getFullPath(), true));
 							resource.delete(true, null);
@@ -160,16 +164,17 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 	}
 
 	private void handleRefresh() {
-		final Set roots= collectRoots(getResources());
+		final Set<IResource> roots= collectRoots(getResources());
 
 		WorkspaceModifyOperation op= new WorkspaceModifyOperation() {
+			@Override
 			public void execute(IProgressMonitor monitor) throws CoreException {
 				try {
 					monitor.beginTask(PackagesMessages.DragAdapter_refreshing, roots.size());
 					MultiStatus status= createMultiStatus();
-					Iterator iter= roots.iterator();
+					Iterator<IResource> iter= roots.iterator();
 					while (iter.hasNext()) {
-						IResource r= (IResource)iter.next();
+						IResource r= iter.next();
 						try {
 							r.refreshLocal(IResource.DEPTH_ONE, new SubProgressMonitor(monitor, 1));
 						} catch (CoreException e) {
@@ -188,12 +193,12 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 		runOperation(op, true, false);
 	}
 
-	protected Set collectRoots(final List elements) {
-		final Set roots= new HashSet(10);
+	protected Set<IResource> collectRoots(final List<IResource> elements) {
+		final Set<IResource> roots= new HashSet<IResource>(10);
 
-		Iterator iter= elements.iterator();
+		Iterator<IResource> iter= elements.iterator();
 		while (iter.hasNext()) {
-			IResource resource= (IResource)iter.next();
+			IResource resource= iter.next();
 			IResource parent= resource.getParent();
 			if (parent == null) {
 				roots.add(resource);
@@ -204,7 +209,7 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 		return roots;
 	}
 
-	private List getResources() {
+	private List<IResource> getResources() {
 		ISelection s= fProvider.getSelection();
 		if (!(s instanceof IStructuredSelection))
 			return null;
@@ -212,9 +217,9 @@ public class FileTransferDragAdapter extends DragSourceAdapter implements Transf
 		return convertIntoResources((IStructuredSelection)s);
 	}
 
-	private List convertIntoResources(IStructuredSelection selection) {
-		List result= new ArrayList(selection.size());
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+	private List<IResource> convertIntoResources(IStructuredSelection selection) {
+		List<IResource> result= new ArrayList<IResource>(selection.size());
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object o= iter.next();
 			IResource r= null;
 			if (o instanceof IResource) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDropAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDropAdapter.java
index 1673b80..7f49e1f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/FileTransferDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public class FileTransferDropAdapter extends JdtViewerDropAdapter implements Tra
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean validateDrop(Object target, int operation, TransferData transferType) {
 		return determineOperation(target, operation, transferType, DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_COPY) != DND.DROP_NONE;
 	}
@@ -81,6 +82,7 @@ public class FileTransferDropAdapter extends JdtViewerDropAdapter implements Tra
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int determineOperation(Object target, int operation, TransferData transferType, int operations) {
 
 		boolean isPackageFragment= target instanceof IPackageFragment;
@@ -107,6 +109,7 @@ public class FileTransferDropAdapter extends JdtViewerDropAdapter implements Tra
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performDrop(final Object data) {
 		try {
 			final int currentOperation= getCurrentOperation();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoPackageAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoPackageAction.java
index d481615..4ea2395 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoPackageAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoPackageAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ class GotoPackageAction extends Action {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.GOTO_PACKAGE_ACTION);
 	}
 
+	@Override
 	public void run() {
 		Shell shell= JavaPlugin.getActiveWorkbenchShell();
 		SelectionDialog dialog= createAllPackagesDialog(shell);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoRequiredProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoRequiredProjectAction.java
index 870b136..55a15a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoRequiredProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoRequiredProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ class GotoRequiredProjectAction extends Action {
 		fPackageExplorer= part;
 	}
 
+	@Override
 	public void run() {
 		IStructuredSelection selection= (IStructuredSelection)fPackageExplorer.getSite().getSelectionProvider().getSelection();
 		Object element= selection.getFirstElement();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoResourceAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoResourceAction.java
index c75a823..17a9106 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoResourceAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoResourceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ public class GotoResourceAction extends Action {
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(parentShell, IJavaHelpContextIds.GOTO_RESOURCE_DIALOG);
 		}
 
+		@Override
 		protected ItemsFilter createFilter() {
 			return new GotoResourceFilter();
 		}
@@ -57,6 +58,7 @@ public class GotoResourceAction extends Action {
 			 *
 			 * @see org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog.ResourceFilter#matchItem(java.lang.Object)
 			 */
+			@Override
 			public boolean matchItem(Object item) {
 				IResource resource = (IResource) item;
 				return super.matchItem(item) && select(resource);
@@ -90,6 +92,7 @@ public class GotoResourceAction extends Action {
 			 *
 			 * @see org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog.ResourceFilter#equalsFilter(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter)
 			 */
+			@Override
 			public boolean equalsFilter(ItemsFilter filter) {
 				if (!super.equalsFilter(filter)) {
 					return false;
@@ -109,6 +112,7 @@ public class GotoResourceAction extends Action {
 		fPackageExplorer= explorer;
 	}
 
+	@Override
 	public void run() {
 		TreeViewer viewer= fPackageExplorer.getTreeViewer();
 		GotoResourceDialog dialog= new GotoResourceDialog(fPackageExplorer.getSite().getShell(),
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoTypeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoTypeAction.java
index 91d405a..ab62756 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoTypeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/GotoTypeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ class GotoTypeAction extends Action {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.GOTO_TYPE_ACTION);
 	}
 
+	@Override
 	public void run() {
 		Shell shell= JavaPlugin.getActiveWorkbenchShell();
 		SelectionDialog dialog= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/HierarchicalDecorationContext.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/HierarchicalDecorationContext.java
index bcf6a43..0cdf950 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/HierarchicalDecorationContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/HierarchicalDecorationContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ public class HierarchicalDecorationContext {
 		/* (non-Javadoc)
 		 * @see org.eclipse.team.ui.mapping.SynchronizationStateTester#getState(java.lang.Object, int, org.eclipse.core.runtime.IProgressMonitor)
 		 */
+		@Override
 		public int getState(Object element, int stateMask, IProgressMonitor monitor) throws CoreException {
 			if (element instanceof JavaElementResourceMapping) {
 				JavaElementResourceMapping mapping= (JavaElementResourceMapping) element;
@@ -72,12 +73,15 @@ public class HierarchicalDecorationContext {
 			Assert.isNotNull(fragment);
 			fPack= fragment;
 		}
+		@Override
 		public Object getModelObject() {
 			return fPack;
 		}
+		@Override
 		public IProject[] getProjects() {
 			return new IProject[] {fPack.getJavaProject().getProject() };
 		}
+		@Override
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			return new ResourceTraversal[] {
 				new ResourceTraversal(new IResource[] {fPack.getResource()}, IResource.DEPTH_INFINITE, 0)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LayoutActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LayoutActionGroup.java
index f451843..d2c57d4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LayoutActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LayoutActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ class LayoutActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * @see ActionGroup#fillActionBars(IActionBars)
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		contributeToViewMenu(actionBars.getMenuManager());
@@ -89,6 +90,7 @@ class LayoutAction extends Action {
 	/*
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
+	@Override
 	public void run() {
 		if (fPackageExplorer.isFlatLayout() != fIsFlatLayout)
 			fPackageExplorer.setFlatLayout(fIsFlatLayout);
@@ -108,6 +110,7 @@ class ShowLibrariesNodeAction extends Action {
 	/*
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
+	@Override
 	public void run() {
 		fPackageExplorer.setShowLibrariesNode(isChecked());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LibraryContainer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LibraryContainer.java
index 5420b4e..e260f3b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LibraryContainer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/LibraryContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class LibraryContainer extends PackageFragmentRootContainer {
 		super(project);
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (obj instanceof LibraryContainer) {
 			LibraryContainer other = (LibraryContainer)obj;
@@ -38,19 +39,23 @@ public class LibraryContainer extends PackageFragmentRootContainer {
 		return false;
 	}
 
+	@Override
 	public int hashCode() {
 		return getJavaProject().hashCode();
 	}
 
+	@Override
 	public IAdaptable[] getChildren() {
 		return getPackageFragmentRoots();
 	}
 
 
+	@Override
 	public ImageDescriptor getImageDescriptor() {
 		return JavaPluginImages.DESC_OBJS_LIBRARY;
 	}
 
+	@Override
 	public String getLabel() {
 		return PackagesMessages.LibraryContainer_name;
 	}
@@ -58,8 +63,9 @@ public class LibraryContainer extends PackageFragmentRootContainer {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.packageview.PackageFragmentRootContainer#getPackageFragmentRoots()
 	 */
+	@Override
 	public IPackageFragmentRoot[] getPackageFragmentRoots() {
-		List list= new ArrayList();
+		List<IPackageFragmentRoot> list= new ArrayList<IPackageFragmentRoot>();
 		try {
 			IPackageFragmentRoot[] roots= getJavaProject().getPackageFragmentRoots();
 			for (int i= 0; i < roots.length; i++) {
@@ -72,6 +78,6 @@ public class LibraryContainer extends PackageFragmentRootContainer {
 		} catch (JavaModelException e) {
 			// fall through
 		}
-		return (IPackageFragmentRoot[]) list.toArray(new IPackageFragmentRoot[list.size()]);
+		return list.toArray(new IPackageFragmentRoot[list.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java
index f391e23..5194776 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -185,6 +185,7 @@ class PackageExplorerActionGroup extends CompositeActionGroup {
 		fSelectAllAction= new SelectAllAction(fPart.getTreeViewer());
 	}
 
+	@Override
 	public void dispose() {
 		super.dispose();
 	}
@@ -204,6 +205,7 @@ class PackageExplorerActionGroup extends CompositeActionGroup {
 
 	//---- Action Bars ----------------------------------------------------------------------------
 
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		setGlobalActionHandlers(actionBars);
@@ -272,6 +274,7 @@ class PackageExplorerActionGroup extends CompositeActionGroup {
 
 	//---- Context menu -------------------------------------------------------------------------
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		IStructuredSelection selection= (IStructuredSelection)getContext().getSelection();
 		int size= selection.size();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java
index 099b837..f27ac34 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,7 +83,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	private boolean fShowLibrariesNode;
 	private boolean fFoldPackages;
 
-	private Collection fPendingUpdates;
+	private Collection<Runnable> fPendingUpdates;
 
 	private UIJob fUpdateJob;
 
@@ -114,7 +114,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * Method declared on IElementChangedListener.
 	 */
 	public void elementChanged(final ElementChangedEvent event) {
-		final ArrayList runnables= new ArrayList();
+		final ArrayList<Runnable> runnables= new ArrayList<Runnable>();
 		try {
 			// 58952 delete project does not update Package Explorer [package explorer]
 			// if the input to the viewer is deleted then refresh to avoid the display of stale elements
@@ -129,7 +129,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		}
 	}
 
-	protected final void executeRunnables(final Collection runnables) {
+	protected final void executeRunnables(final Collection<Runnable> runnables) {
 
 		// now post all collected runnables
 		Control ctrl= fViewer.getControl();
@@ -156,6 +156,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	private void postAsyncUpdate(final Display display) {
 		if (fUpdateJob == null) {
 			fUpdateJob= new UIJob(display, PackagesMessages.PackageExplorerContentProvider_update_job_description) {
+				@Override
 				public IStatus runInUIThread(IProgressMonitor monitor) {
 					TreeViewer viewer= fViewer;
 					if (viewer != null && viewer.isBusy()) {
@@ -175,7 +176,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * Run all of the runnables that are the widget updates. Must be called in the display thread.
 	 */
 	public void runPendingUpdates() {
-		Collection pendingUpdates;
+		Collection<Runnable> pendingUpdates;
 		synchronized (this) {
 			pendingUpdates= fPendingUpdates;
 			fPendingUpdates= null;
@@ -188,15 +189,15 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		}
 	}
 
-	private void runUpdates(Collection runnables) {
-		Iterator runnableIterator = runnables.iterator();
+	private void runUpdates(Collection<Runnable> runnables) {
+		Iterator<Runnable> runnableIterator = runnables.iterator();
 		while (runnableIterator.hasNext()){
-			((Runnable) runnableIterator.next()).run();
+			runnableIterator.next().run();
 		}
 	}
 
 
-	private boolean inputDeleted(Collection runnables) {
+	private boolean inputDeleted(Collection<Runnable> runnables) {
 		if (fInput == null)
 			return false;
 		if (fInput instanceof IJavaElement && ((IJavaElement) fInput).exists())
@@ -214,6 +215,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	/* (non-Javadoc)
 	 * Method declared on IContentProvider.
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		JavaCore.removeElementChangedListener(this);
@@ -223,13 +225,14 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.StandardJavaElementContentProvider#getPackageFragmentRootContent(org.eclipse.jdt.core.IPackageFragmentRoot)
 	 */
+	@Override
 	protected Object[] getPackageFragmentRootContent(IPackageFragmentRoot root) throws JavaModelException {
 		if (fIsFlatLayout) {
 			return super.getPackageFragmentRootContent(root);
 		}
 
 		// hierarchical package mode
-		ArrayList result= new ArrayList();
+		ArrayList<Object> result= new ArrayList<Object>();
 		getHierarchicalPackageChildren(root, null, result);
 		if (!isProjectPackageFragmentRoot(root)) {
 			Object[] nonJavaResources= root.getNonJavaResources();
@@ -243,13 +246,14 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.StandardJavaElementContentProvider#getPackageContent(org.eclipse.jdt.core.IPackageFragment)
 	 */
+	@Override
 	protected Object[] getPackageContent(IPackageFragment fragment) throws JavaModelException {
 		if (fIsFlatLayout) {
 			return super.getPackageContent(fragment);
 		}
 
 		// hierarchical package mode
-		ArrayList result= new ArrayList();
+		ArrayList<Object> result= new ArrayList<Object>();
 
 		getHierarchicalPackageChildren((IPackageFragmentRoot) fragment.getParent(), fragment, result);
 		Object[] nonPackages= super.getPackageContent(fragment);
@@ -264,13 +268,14 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.StandardJavaElementContentProvider#getFolderContent(org.eclipse.core.resources.IFolder)
 	 */
+	@Override
 	protected Object[] getFolderContent(IFolder folder) throws CoreException {
 		if (fIsFlatLayout) {
 			return super.getFolderContent(folder);
 		}
 
 		// hierarchical package mode
-		ArrayList result= new ArrayList();
+		ArrayList<Object> result= new ArrayList<Object>();
 
 		getHierarchicalPackagesInFolder(folder, result);
 		Object[] others= super.getFolderContent(folder);
@@ -283,6 +288,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	}
 
 
+	@Override
 	public Object[] getChildren(Object parentElement) {
 		try {
 			if (parentElement instanceof IJavaModel)
@@ -307,11 +313,12 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.StandardJavaElementContentProvider#getPackageFragmentRoots(org.eclipse.jdt.core.IJavaProject)
 	 */
+	@Override
 	protected Object[] getPackageFragmentRoots(IJavaProject project) throws JavaModelException {
 		if (!project.getProject().isOpen())
 			return NO_CHILDREN;
 
-		List result= new ArrayList();
+		List<Object> result= new ArrayList<Object>();
 
 		IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 		for (int i= 0; i < roots.length; i++) {
@@ -369,6 +376,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		return model.getNonJavaResources();
 	}
 
+	@Override
 	protected Object internalGetParent(Object element) {
 		if (!fIsFlatLayout && element instanceof IPackageFragment) {
 			return getHierarchicalPackageParent((IPackageFragment) element);
@@ -398,6 +406,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	/* (non-Javadoc)
 	 * Method declared on IContentProvider.
 	 */
+	@Override
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		super.inputChanged(viewer, oldInput, newInput);
 		fViewer= (TreeViewer)viewer;
@@ -418,7 +427,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * @param result Collection where the resulting elements are added
 	 * @throws JavaModelException if fetching the children fails
 	 */
-	private void getHierarchicalPackageChildren(IPackageFragmentRoot parent, IPackageFragment fragment, Collection result) throws JavaModelException {
+	private void getHierarchicalPackageChildren(IPackageFragmentRoot parent, IPackageFragment fragment, Collection<Object> result) throws JavaModelException {
 		IJavaElement[] children= parent.getChildren();
 		String prefix= fragment != null ? fragment.getElementName() + '.' : ""; //$NON-NLS-1$
 		int prefixLen= prefix.length();
@@ -442,7 +451,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * @param result Collection where the resulting elements are added
 	 * @throws CoreException thrown when elements could not be accessed
 	 */
-	private void getHierarchicalPackagesInFolder(IFolder folder, Collection result) throws CoreException {
+	private void getHierarchicalPackagesInFolder(IFolder folder, Collection<Object> result) throws CoreException {
 		IResource[] resources= folder.members();
 		for (int i= 0; i < resources.length; i++) {
 			IResource resource= resources[i];
@@ -535,7 +544,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * to be processed
 	 * @throws JavaModelException thrown when the access to an element failed
 	 */
-	private boolean processDelta(IJavaElementDelta delta, Collection runnables) throws JavaModelException {
+	private boolean processDelta(IJavaElementDelta delta, Collection<Runnable> runnables) throws JavaModelException {
 
 		int kind= delta.getKind();
 		int flags= delta.getFlags();
@@ -739,7 +748,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		return (flags & IJavaElementDelta.F_CHILDREN) != 0 || (flags & (IJavaElementDelta.F_CONTENT | IJavaElementDelta.F_FINE_GRAINED)) == IJavaElementDelta.F_CONTENT;
 	}
 
-	/* package */ void handleAffectedChildren(IJavaElementDelta delta, IJavaElement element, Collection runnables) throws JavaModelException {
+	/* package */ void handleAffectedChildren(IJavaElementDelta delta, IJavaElement element, Collection<Runnable> runnables) throws JavaModelException {
 		int count= 0;
 
 		IResourceDelta[] resourceDeltas= delta.getResourceDeltas();
@@ -793,7 +802,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		}
 	}
 
-	protected void processAffectedChildren(IJavaElementDelta[] affectedChildren, Collection runnables) throws JavaModelException {
+	protected void processAffectedChildren(IJavaElementDelta[] affectedChildren, Collection<Runnable> runnables) throws JavaModelException {
 		for (int i= 0; i < affectedChildren.length; i++) {
 			processDelta(affectedChildren[i], runnables);
 		}
@@ -811,7 +820,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * @param element the element to update
 	 * @param runnables the resulting view changes as runnables (type {@link Runnable})
 	 */
-	 private void postUpdateIcon(final IJavaElement element, Collection runnables) {
+	 private void postUpdateIcon(final IJavaElement element, Collection<Runnable> runnables) {
 		 runnables.add(new Runnable() {
 			public void run() {
 				// 1GF87WR: ITPUI:ALL - SWTEx + NPE closing a workbench window.
@@ -828,7 +837,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * @param runnables the resulting view changes as runnables (type {@link Runnable})
 	 * @return true if the parent got refreshed
 	 */
-	private boolean processResourceDelta(IResourceDelta delta, Object parent, Collection runnables) {
+	private boolean processResourceDelta(IResourceDelta delta, Object parent, Collection<Runnable> runnables) {
 		int status= delta.getKind();
 		int flags= delta.getFlags();
 
@@ -898,12 +907,12 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		fShowLibrariesNode= state;
 	}
 
-	private void postRefresh(Object root, int relation, Object affectedElement, Collection runnables) {
+	private void postRefresh(Object root, int relation, Object affectedElement, Collection<Runnable> runnables) {
 		// JFace doesn't refresh when object isn't part of the viewer
 		// Therefore move the refresh start down to the viewer's input
 		if (isParent(root, fInput) || root instanceof IJavaModel)
 			root= fInput;
-		List toRefresh= new ArrayList(1);
+		List<Object> toRefresh= new ArrayList<Object>(1);
 		toRefresh.add(root);
 		augmentElementToRefresh(toRefresh, relation, affectedElement);
 		postRefresh(toRefresh, true, runnables);
@@ -916,7 +925,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 	 * @param relation the relation to the affected element ({@link #GRANT_PARENT}, {@link #PARENT}, {@link #ORIGINAL}, {@link #PROJECT})
 	 * @param affectedElement the affected element
 	 */
-	protected void augmentElementToRefresh(List toRefresh, int relation, Object affectedElement) {
+	protected void augmentElementToRefresh(List<Object> toRefresh, int relation, Object affectedElement) {
 	}
 
 	private boolean isParent(Object root, Object child) {
@@ -928,17 +937,17 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		return isParent(root, parent);
 	}
 
-	protected void postRefresh(final List toRefresh, final boolean updateLabels, Collection runnables) {
+	protected void postRefresh(final List<Object> toRefresh, final boolean updateLabels, Collection<Runnable> runnables) {
 		runnables.add(new Runnable() {
 			public void run() {
-				for (Iterator iter= toRefresh.iterator(); iter.hasNext();) {
+				for (Iterator<Object> iter= toRefresh.iterator(); iter.hasNext();) {
 					fViewer.refresh(iter.next(), updateLabels);
 				}
 			}
 		});
 	}
 
-	protected void postAdd(final Object parent, final Object element, Collection runnables) {
+	protected void postAdd(final Object parent, final Object element, Collection<Runnable> runnables) {
 		runnables.add(new Runnable() {
 			public void run() {
 				Widget[] items= fViewer.testFindItems(element);
@@ -956,7 +965,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		});
 	}
 
-	protected void postRemove(final Object element, Collection runnables) {
+	protected void postRemove(final Object element, Collection<Runnable> runnables) {
 		runnables.add(new Runnable() {
 			public void run() {
 				fViewer.remove(element);
@@ -964,7 +973,7 @@ public class PackageExplorerContentProvider extends StandardJavaElementContentPr
 		});
 	}
 
-	protected void postProjectStateChanged(final Object root, Collection runnables) {
+	protected void postProjectStateChanged(final Object root, Collection<Runnable> runnables) {
 		runnables.add(new Runnable() {
 			public void run() {
 				fViewer.refresh(root, true);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java
index ebb8a3f..fd05165 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,7 +44,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
 public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
 
 	private PackageExplorerContentProvider fContentProvider;
-	private Map fWorkingSetImages;
+	private Map<ImageDescriptor, Image> fWorkingSetImages;
 
 	private boolean fIsFlatLayout;
 	private PackageExplorerProblemsDecorator fProblemDecorator;
@@ -62,6 +62,7 @@ public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getStyledText(java.lang.Object)
 	 */
+	@Override
 	public StyledString getStyledText(Object element) {
 		String text= getSpecificText(element);
 		if (text != null) {
@@ -85,6 +86,7 @@ public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
 		return null;
 	}
 
+	@Override
 	public String getText(Object element) {
 		String text= getSpecificText(element);
 		if (text != null) {
@@ -117,6 +119,7 @@ public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
 		return fragment.getElementName();
 	}
 
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof IWorkingSet) {
 			ImageDescriptor image= ((IWorkingSet)element).getImageDescriptor();
@@ -124,10 +127,10 @@ public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
 				return null;
 			}
 			if (fWorkingSetImages == null) {
-				fWorkingSetImages= new HashMap();
+				fWorkingSetImages= new HashMap<ImageDescriptor, Image>();
 			}
 
-			Image result= (Image) fWorkingSetImages.get(image);
+			Image result= fWorkingSetImages.get(image);
 			if (result == null) {
 				result= image.createImage();
 				fWorkingSetImages.put(image, result);
@@ -142,10 +145,11 @@ public class PackageExplorerLabelProvider extends AppearanceAwareLabelProvider {
 		fProblemDecorator.setIsFlatLayout(state);
 	}
 
+	@Override
 	public void dispose() {
 		if (fWorkingSetImages != null) {
-			for (Iterator iter= fWorkingSetImages.values().iterator(); iter.hasNext();) {
-				((Image)iter.next()).dispose();
+			for (Iterator<Image> iter= fWorkingSetImages.values().iterator(); iter.hasNext();) {
+				iter.next().dispose();
 			}
 		}
 		super.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
index cc57096..dd6b1c6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -194,10 +194,10 @@ public class PackageExplorerPart extends ViewPart
 	private OpenAndLinkWithEditorHelper fOpenAndLinkWithEditorHelper;
 
 	private String fWorkingSetLabel;
-	private IDialogSettings fDialogSettings;
+	private final IDialogSettings fDialogSettings;
 
 
-	private IPartListener2 fLinkWithEditorListener= new IPartListener2() {
+	private final IPartListener2 fLinkWithEditorListener= new IPartListener2() {
 		public void partVisible(IWorkbenchPartReference partRef) {}
 		public void partBroughtToTop(IWorkbenchPartReference partRef) {}
 		public void partClosed(IWorkbenchPartReference partRef) {}
@@ -219,7 +219,7 @@ public class PackageExplorerPart extends ViewPart
 
 	};
 
-	private ITreeViewerListener fExpansionListener= new ITreeViewerListener() {
+	private final ITreeViewerListener fExpansionListener= new ITreeViewerListener() {
 		public void treeCollapsed(TreeExpansionEvent event) {
 		}
 
@@ -234,12 +234,13 @@ public class PackageExplorerPart extends ViewPart
 
 	private class PackageExplorerProblemTreeViewer extends ProblemTreeViewer {
 		// fix for 64372  Projects showing up in Package Explorer twice [package explorer]
-		private List fPendingRefreshes;
+		private final List<Object> fPendingRefreshes;
 
 		public PackageExplorerProblemTreeViewer(Composite parent, int style) {
 			super(parent, style);
-			fPendingRefreshes= Collections.synchronizedList(new ArrayList());
+			fPendingRefreshes= Collections.synchronizedList(new ArrayList<Object>());
 		}
+		@Override
 		public void add(Object parentElement, Object[] childElements) {
 			if (fPendingRefreshes.contains(parentElement)) {
 				return;
@@ -250,7 +251,8 @@ public class PackageExplorerPart extends ViewPart
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.AbstractTreeViewer#internalRefresh(java.lang.Object, boolean)
 		 */
-	    protected void internalRefresh(Object element, boolean updateLabels) {
+	    @Override
+		protected void internalRefresh(Object element, boolean updateLabels) {
 			try {
 				fPendingRefreshes.add(element);
 				super.internalRefresh(element, updateLabels);
@@ -259,6 +261,7 @@ public class PackageExplorerPart extends ViewPart
 			}
 		}
 
+		@Override
 		protected boolean evaluateExpandableWithFilters(Object parent) {
 			if (parent instanceof IJavaProject
 					|| parent instanceof ICompilationUnit || parent instanceof IClassFile
@@ -271,6 +274,7 @@ public class PackageExplorerPart extends ViewPart
 			return true;
 		}
 
+		@Override
 		protected boolean isFiltered(Object object, Object parent, ViewerFilter[] filters) {
 			boolean res= super.isFiltered(object, parent, filters);
 			if (res && isEssential(object)) {
@@ -296,16 +300,17 @@ public class PackageExplorerPart extends ViewPart
 			return false;
 		}
 
+		@Override
 		protected void handleInvalidSelection(ISelection invalidSelection, ISelection newSelection) {
 			IStructuredSelection is= (IStructuredSelection)invalidSelection;
-			List ns= null;
+			List<Object> ns= null;
 			if (newSelection instanceof IStructuredSelection) {
-				ns= new ArrayList(((IStructuredSelection)newSelection).toList());
+				ns= new ArrayList<Object>(((IStructuredSelection)newSelection).toList());
 			} else {
-				ns= new ArrayList();
+				ns= new ArrayList<Object>();
 			}
 			boolean changed= false;
-			for (Iterator iter= is.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter= is.iterator(); iter.hasNext();) {
 				Object element= iter.next();
 				if (element instanceof IJavaProject) {
 					IProject project= ((IJavaProject)element).getProject();
@@ -333,6 +338,7 @@ public class PackageExplorerPart extends ViewPart
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected Object[] addAditionalProblemParents(Object[] elements) {
 			if (getRootMode() == WORKING_SETS_AS_ROOTS && elements != null) {
 				return fWorkingSetModel.addWorkingSets(elements);
@@ -366,7 +372,8 @@ public class PackageExplorerPart extends ViewPart
 
 	}
 
-    public void init(IViewSite site, IMemento memento) throws PartInitException {
+    @Override
+	public void init(IViewSite site, IMemento memento) throws PartInitException {
 		super.init(site, memento);
 		if (memento == null) {
 			String persistedMemento= fDialogSettings.get(TAG_MEMENTO);
@@ -434,7 +441,8 @@ public class PackageExplorerPart extends ViewPart
 		}
 	}
 
-	 public void dispose() {
+	 @Override
+	public void dispose() {
 		XMLMemento memento= XMLMemento.createWriteRoot("packageExplorer"); //$NON-NLS-1$
 		saveState(memento);
 		StringWriter writer= new StringWriter();
@@ -467,6 +475,7 @@ public class PackageExplorerPart extends ViewPart
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createPartControl(Composite parent) {
 
 		final PerformanceStats stats= PerformanceStats.getStats(PERF_CREATE_PART_CONTROL, this);
@@ -508,6 +517,7 @@ public class PackageExplorerPart extends ViewPart
 		});
 
 		fOpenAndLinkWithEditorHelper= new OpenAndLinkWithEditorHelper(fViewer) {
+			@Override
 			protected void activate(ISelection selection) {
 				try {
 					final Object selectedElement= SelectionUtil.getSingleElement(selection);
@@ -518,10 +528,12 @@ public class PackageExplorerPart extends ViewPart
 				}
 			}
 
+			@Override
 			protected void linkToEditor(ISelection selection) {
 				PackageExplorerPart.this.linkToEditor(selection);
 			}
 
+			@Override
 			protected void open(ISelection selection, boolean activate) {
 				fActionSet.handleOpen(selection, activate);
 			}
@@ -670,6 +682,7 @@ public class PackageExplorerPart extends ViewPart
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class key) {
 		if (key.equals(ISelectionProvider.class))
 			return fViewer;
@@ -751,6 +764,7 @@ public class PackageExplorerPart extends ViewPart
 		}
 	}
 
+	@Override
 	public String getTitleToolTip() {
 		if (fViewer == null)
 			return super.getTitleToolTip();
@@ -760,6 +774,7 @@ public class PackageExplorerPart extends ViewPart
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
 	 */
+	@Override
 	public void setFocus() {
 		fViewer.getTree().setFocus();
 	}
@@ -870,7 +885,12 @@ public class PackageExplorerPart extends ViewPart
 			if (je != null && je.exists()) {
 				IJavaProject javaProject= je.getJavaProject();
 				if (javaProject != null && javaProject.exists()) {
-					return je;
+					if (javaProject.equals(je) || javaProject.isOnClasspath(je)) {
+						return je;
+					} else {
+						// a working copy of a .java file that is not on classpath
+						return original;
+					}
 				}
 			}
 		} else if (original instanceof IAdaptable) {
@@ -916,6 +936,7 @@ public class PackageExplorerPart extends ViewPart
 		}
 	}
 
+	@Override
 	public void saveState(IMemento memento) {
 		if (fViewer == null && fMemento != null) {
 			// part has not been created -> keep the old state
@@ -977,6 +998,7 @@ public class PackageExplorerPart extends ViewPart
 	 */
 	private void initKeyListener() {
 		fViewer.getControl().addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent event) {
 				fActionSet.handleKeyEvent(event);
 			}
@@ -1168,6 +1190,7 @@ public class PackageExplorerPart extends ViewPart
 	 * @param decorator a label decorator or <code>null</code> for no decorations.
 	 * @deprecated To be removed
 	 */
+	@Deprecated
 	public void setLabelDecorator(ILabelDecorator decorator) {
 	}
 
@@ -1481,14 +1504,4 @@ public class PackageExplorerPart extends ViewPart
 			fViewer.setComparator(new JavaElementComparator());
 		}
 	}
-
-	//---- test methods for working set mode -------------------------------
-
-	public void internalTestShowWorkingSets(IWorkingSet[] workingSets) {
-		if (fWorkingSetModel == null)
-			createWorkingSetModel();
-		fWorkingSetModel.setActiveWorkingSets(workingSets);
-		fWorkingSetModel.configured();
-		rootModeChanged(PackageExplorerPart.WORKING_SETS_AS_ROOTS);
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerProblemsDecorator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerProblemsDecorator.java
index 7d16763..5ef5b86 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerProblemsDecorator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerProblemsDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,16 +21,6 @@ import org.eclipse.jdt.internal.ui.viewsupport.TreeHierarchyLayoutProblemsDecora
 
 public class PackageExplorerProblemsDecorator extends TreeHierarchyLayoutProblemsDecorator {
 
-	/**
-	 * Use of this constant is <b>FORBIDDEN</b> for external clients.
-	 * <p>
-	 * TODO: Make API in 3.7, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=308672
-	 * 
-	 * @see JavaElementImageDescriptor#BUILDPATH_ERROR
-	 * @since 3.6
-	 */
-	public final static int BUILDPATH_ERROR= 0x2000;
-
 	public PackageExplorerProblemsDecorator() {
 		super();
 	}
@@ -39,6 +29,7 @@ public class PackageExplorerProblemsDecorator extends TreeHierarchyLayoutProblem
 		super(isFlatLayout);
 	}
 
+	@Override
 	protected int computeAdornmentFlags(Object obj) {
 		if (!(obj instanceof IWorkingSet))
 			return super.computeAdornmentFlags(obj);
@@ -49,8 +40,8 @@ public class PackageExplorerProblemsDecorator extends TreeHierarchyLayoutProblem
 		for (int i= 0; i < elements.length; i++) {
 			IAdaptable element= elements[i];
 			int flags= super.computeAdornmentFlags(element);
-			if ((flags & PackageExplorerProblemsDecorator.BUILDPATH_ERROR) != 0)
-				return PackageExplorerProblemsDecorator.BUILDPATH_ERROR;
+			if ((flags & JavaElementImageDescriptor.BUILDPATH_ERROR) != 0)
+				return JavaElementImageDescriptor.BUILDPATH_ERROR;
 			result|= flags;
 		}
 		if ((result & JavaElementImageDescriptor.ERROR) != 0)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackagesFrameSource.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackagesFrameSource.java
index 333f1cc..9c9a63b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackagesFrameSource.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackagesFrameSource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ class PackagesFrameSource extends TreeViewerFrameSource {
 		fPackagesExplorer= explorer;
 	}
 
+	@Override
 	protected TreeFrame createFrame(Object input) {
 		TreeFrame frame = super.createFrame(input);
 		frame.setName(fPackagesExplorer.getFrameName(input));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/SelectionTransferDropAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/SelectionTransferDropAdapter.java
index 3613cde..3ce006e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/SelectionTransferDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/SelectionTransferDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,13 +35,13 @@ import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgPolicy.ICopyPolicy;
+import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgPolicy.IMovePolicy;
 import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaCopyProcessor;
 import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaMoveProcessor;
 import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgDestinationFactory;
 import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgPolicyFactory;
 import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgUtils;
-import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgPolicy.ICopyPolicy;
-import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgPolicy.IMovePolicy;
 
 import org.eclipse.jdt.internal.ui.dnd.JdtViewerDropAdapter;
 import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
@@ -51,7 +51,7 @@ import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 
 public class SelectionTransferDropAdapter extends JdtViewerDropAdapter implements TransferDropTargetListener {
 
-	private List fElements;
+	private List<?> fElements;
 	private JavaMoveProcessor fMoveProcessor;
 	private int fCanMoveElements;
 	private JavaCopyProcessor fCopyProcessor;
@@ -91,6 +91,7 @@ public class SelectionTransferDropAdapter extends JdtViewerDropAdapter implement
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dragEnter(DropTargetEvent event) {
 		clear();
 		super.dragEnter(event);
@@ -99,6 +100,7 @@ public class SelectionTransferDropAdapter extends JdtViewerDropAdapter implement
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dragLeave(DropTargetEvent event) {
 		clear();
 		super.dragLeave(event);
@@ -117,6 +119,7 @@ public class SelectionTransferDropAdapter extends JdtViewerDropAdapter implement
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean validateDrop(Object target, int operation, TransferData transferType) {
 		return determineOperation(target, operation, transferType, DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_COPY) != DND.DROP_NONE;
 	}
@@ -124,6 +127,7 @@ public class SelectionTransferDropAdapter extends JdtViewerDropAdapter implement
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int determineOperation(Object target, int operation, TransferData transferType, int operations) {
 		int result= internalDetermineOperation(target, operation, operations);
 
@@ -208,6 +212,7 @@ public class SelectionTransferDropAdapter extends JdtViewerDropAdapter implement
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performDrop(Object data) {
 		try{
 			switch(getCurrentOperation()) {
@@ -326,6 +331,7 @@ public class SelectionTransferDropAdapter extends JdtViewerDropAdapter implement
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int getCurrentLocation() {
 		if (getFeedbackEnabled()) {
 			return super.getCurrentLocation();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ToggleLinkingAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ToggleLinkingAction.java
index 93fd790..d8698ec 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ToggleLinkingAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/ToggleLinkingAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class ToggleLinkingAction extends AbstractToggleLinkingAction {
 	/**
 	 * Runs the action.
 	 */
+	@Override
 	public void run() {
 		fPackageExplorerPart.setLinkingEnabled(isChecked());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java
index 189fdf3..1830ba8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dispose() {
 		fWorkingSetModel.removePropertyChangeListener(fListener);
 		super.dispose();
@@ -67,6 +68,7 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean hasChildren(Object element) {
 		if (element instanceof IWorkingSet)
 			return true;
@@ -76,6 +78,7 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object[] getChildren(Object element) {
 		Object[] children;
 		if (element instanceof WorkingSetModel) {
@@ -91,7 +94,7 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 
 	private Object[] getWorkingSetChildren(IWorkingSet set) {
 		IAdaptable[] elements= fWorkingSetModel.getChildren(set);
-		Set result= new HashSet(elements.length);
+		Set<IAdaptable> result= new HashSet<IAdaptable>(elements.length);
 		for (int i= 0; i < elements.length; i++) {
 			IAdaptable element= elements[i];
 			if (element instanceof IProject) {
@@ -119,7 +122,7 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 		return result.toArray();
 	}
 
-	private void processResource(IResource resource, Collection result) {
+	private void processResource(IResource resource, Collection<IAdaptable> result) {
 		IJavaElement elem= JavaCore.create(resource);
 		if (elem != null && elem.exists()) {
 			result.add(elem);
@@ -143,16 +146,16 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 			TreePath path= new TreePath(new Object[] {element});
 			return new TreePath[] {path};
 		}
-		List modelParents= getModelPath(element);
-		List result= new ArrayList();
+		List<Object> modelParents= getModelPath(element);
+		List<TreePath> result= new ArrayList<TreePath>();
 		for (int i= 0; i < modelParents.size(); i++) {
 			result.addAll(getTreePaths(modelParents, i));
 		}
-		return (TreePath[])result.toArray(new TreePath[result.size()]);
+		return result.toArray(new TreePath[result.size()]);
 	}
 
-	private List getModelPath(Object element) {
-		List result= new ArrayList();
+	private List<Object> getModelPath(Object element) {
+		List<Object> result= new ArrayList<Object>();
 		result.add(element);
 		Object parent= super.getParent(element);
 		Object input= getViewerInput();
@@ -165,13 +168,13 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 		return result;
 	}
 
-	private List/*<TreePath>*/ getTreePaths(List modelParents, int index) {
-		List result= new ArrayList();
+	private List<TreePath> getTreePaths(List<Object> modelParents, int index) {
+		List<TreePath> result= new ArrayList<TreePath>();
 		Object input= getViewerInput();
 		Object element= modelParents.get(index);
 		Object[] parents= fWorkingSetModel.getAllParents(element);
 		for (int i= 0; i < parents.length; i++) {
-			List chain= new ArrayList();
+			List<Object> chain= new ArrayList<Object>();
 			if (!parents[i].equals(input))
 				chain.add(parents[i]);
 			for (int m= index; m < modelParents.size(); m++) {
@@ -185,6 +188,7 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Object getParent(Object child) {
 		Object[] parents= fWorkingSetModel.getAllParents(child);
 		if(parents.length == 0)
@@ -193,7 +197,8 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 		return first;
 	}
 
-	protected void augmentElementToRefresh(List toRefresh, int relation, Object affectedElement) {
+	@Override
+	protected void augmentElementToRefresh(List<Object> toRefresh, int relation, Object affectedElement) {
 		// we are refreshing the JavaModel and are in working set mode.
 		if (JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()).equals(affectedElement)) {
 			toRefresh.remove(affectedElement);
@@ -204,11 +209,11 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 				toRefresh.addAll(Arrays.asList(fWorkingSetModel.getAllParents(parent)));
 			}
 		}
-		List nonProjetTopLevelElemens= fWorkingSetModel.getNonProjectTopLevelElements();
+		List<IAdaptable> nonProjetTopLevelElemens= fWorkingSetModel.getNonProjectTopLevelElements();
 		if (nonProjetTopLevelElemens.isEmpty())
 			return;
-		List toAdd= new ArrayList();
-		for (Iterator iter= nonProjetTopLevelElemens.iterator(); iter.hasNext();) {
+		List<Object> toAdd= new ArrayList<Object>();
+		for (Iterator<IAdaptable> iter= nonProjetTopLevelElemens.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (isChildOf(element, toRefresh))
 				toAdd.add(element);
@@ -219,7 +224,7 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 	private void workingSetModelChanged(PropertyChangeEvent event) {
 		String property= event.getProperty();
 		Object newValue= event.getNewValue();
-		List toRefresh= new ArrayList(1);
+		List<Object> toRefresh= new ArrayList<Object>(1);
 		if (WorkingSetModel.CHANGE_WORKING_SET_MODEL_CONTENT.equals(property)) {
 			toRefresh.add(fWorkingSetModel);
 		} else if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)) {
@@ -227,17 +232,17 @@ public class WorkingSetAwareContentProvider extends PackageExplorerContentProvid
 		} else if (IWorkingSetManager.CHANGE_WORKING_SET_LABEL_CHANGE.equals(property)) {
 			toRefresh.add(newValue);
 		}
-		ArrayList runnables= new ArrayList();
+		ArrayList<Runnable> runnables= new ArrayList<Runnable>();
 		postRefresh(toRefresh, true, runnables);
 		executeRunnables(runnables);
 	}
 
-	private boolean isChildOf(Object element, List potentialParents) {
+	private boolean isChildOf(Object element, List<Object> potentialParents) {
 		// Calling super get parent to bypass working set mapping
 		Object parent= super.getParent(element);
 		if (parent == null)
 			return false;
-		for (Iterator iter= potentialParents.iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter= potentialParents.iterator(); iter.hasNext();) {
 			Object potentialParent= iter.next();
 			while(parent != null) {
 				if (parent.equals(potentialParent))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareJavaElementSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareJavaElementSorter.java
index aada9e7..bb3d54d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareJavaElementSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareJavaElementSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.jdt.ui.JavaElementComparator;
 
 public class WorkingSetAwareJavaElementSorter extends JavaElementComparator {
 
+	@Override
 	public int compare(Viewer viewer, Object e1, Object e2) {
 		if (e1 instanceof IWorkingSet || e2 instanceof IWorkingSet)
 			return 0;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetDropAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetDropAdapter.java
index 583e828..cc8b8ff 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,7 +51,7 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 
 	private IStructuredSelection fSelection;
 	private Object[] fElementsToAdds;
-	private Set fCurrentElements;
+	private Set<IAdaptable> fCurrentElements;
 	private IWorkingSet fWorkingSet;
 
 	private int fLocation;
@@ -99,6 +99,7 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean validateDrop(Object target, int operation, TransferData transferType) {
 		return determineOperation(target, operation, transferType, DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_COPY) != DND.DROP_NONE;
 	}
@@ -106,6 +107,7 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int determineOperation(Object target, int operation, TransferData transferType, int operations) {
 		switch(operation) {
 			case DND.DROP_DEFAULT:
@@ -143,18 +145,18 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 			if (isOthersWorkingSet(fWorkingSet) && operation == DND.DROP_COPY)
 				return DND.DROP_NONE;
 
-			List realJavaElements= new ArrayList();
-			List realResource= new ArrayList();
+			List<IJavaElement> realJavaElements= new ArrayList<IJavaElement>();
+			List<IResource> realResource= new ArrayList<IResource>();
 			ReorgUtils.splitIntoJavaElementsAndResources(fElementsToAdds, realJavaElements, realResource);
 			if (fElementsToAdds.length != realJavaElements.size() + realResource.size())
 				return DND.DROP_NONE;
-			for (Iterator iter= realJavaElements.iterator(); iter.hasNext();) {
-				IJavaElement element= (IJavaElement)iter.next();
+			for (Iterator<IJavaElement> iter= realJavaElements.iterator(); iter.hasNext();) {
+				IJavaElement element= iter.next();
 				if (ReorgUtils.containsElementOrParent(fCurrentElements, element))
 					return DND.DROP_NONE;
 			}
-			for (Iterator iter= realResource.iterator(); iter.hasNext();) {
-				IResource element= (IResource)iter.next();
+			for (Iterator<IResource> iter= realResource.iterator(); iter.hasNext();) {
+				IResource element= iter.next();
 				if (ReorgUtils.containsElementOrParent(fCurrentElements, element))
 					return DND.DROP_NONE;
 			}
@@ -197,7 +199,7 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 		fWorkingSet= (IWorkingSet)target;
 		fSelection= (IStructuredSelection)s;
 		fElementsToAdds= fSelection.toArray();
-		fCurrentElements= new HashSet(Arrays.asList(fWorkingSet.getElements()));
+		fCurrentElements= new HashSet<IAdaptable>(Arrays.asList(fWorkingSet.getElements()));
 	}
 
 	private boolean isWorkingSetSelection() {
@@ -211,6 +213,7 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performDrop(Object data) {
 		if (isWorkingSetSelection()) {
 			performWorkingSetReordering();
@@ -222,25 +225,33 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 
 	private void performWorkingSetReordering() {
 		WorkingSetModel model= fPackageExplorer.getWorkingSetModel();
-		List activeWorkingSets= new ArrayList(Arrays.asList(model.getActiveWorkingSets()));
-		int index= activeWorkingSets.indexOf(fWorkingSet);
+		List<IWorkingSet> allWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(model.getAllWorkingSets()));
+		int index= allWorkingSets.indexOf(fWorkingSet);
 		if (index != -1) {
 			if (getCurrentLocation() == LOCATION_AFTER)
 				index++;
-			List result= new ArrayList(activeWorkingSets.size());
-			List selected= new ArrayList(Arrays.asList(fElementsToAdds));
-			for (int i= 0; i < activeWorkingSets.size(); i++) {
+			List<IWorkingSet> result= new ArrayList<IWorkingSet>(allWorkingSets.size());
+			@SuppressWarnings("unchecked") // isWorkingSetSelection() ensures that all elements are IWorkingSets
+			List<IWorkingSet> selected= new ArrayList<IWorkingSet>((List<IWorkingSet>) (List<?>) Arrays.asList(fElementsToAdds));
+			List<IWorkingSet> activeWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(model.getActiveWorkingSets()));
+			List<IWorkingSet> active= new ArrayList<IWorkingSet>(activeWorkingSets.size());
+			for (int i= 0; i < allWorkingSets.size(); i++) {
 				if (i == index) {
 					result.addAll(selected);
+					active.addAll(selected);
 				}
-				Object element= activeWorkingSets.get(i);
+				IWorkingSet element= allWorkingSets.get(i);
 				if (!selected.contains(element)) {
 					result.add(element);
+					if (activeWorkingSets.contains(element))
+						active.add(element);
 				}
 			}
-			if (index == activeWorkingSets.size())
+			if (index == allWorkingSets.size()) {
 				result.addAll(selected);
-			model.setActiveWorkingSets((IWorkingSet[])result.toArray(new IWorkingSet[result.size()]));
+				active.addAll(selected);
+			}
+			model.setWorkingSets(result.toArray(new IWorkingSet[result.size()]), model.isSortingEnabled(), active.toArray(new IWorkingSet[active.size()]));
 		}
 	}
 
@@ -248,31 +259,31 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 		// only move if target isn't the other working set. If this is the case
 		// the move will happenn automatically by refreshing the other working set
 		if (!isOthersWorkingSet(fWorkingSet)) {
-			List elements= new ArrayList(Arrays.asList(fWorkingSet.getElements()));
+			List<Object> elements= new ArrayList<Object>(Arrays.asList(fWorkingSet.getElements()));
 			elements.addAll(Arrays.asList(fElementsToAdds));
-			fWorkingSet.setElements((IAdaptable[])elements.toArray(new IAdaptable[elements.size()]));
+			fWorkingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
 		}
 		if (eventDetail == DND.DROP_MOVE) {
 			ITreeSelection treeSelection= (ITreeSelection)fSelection;
-			Map workingSets= groupByWorkingSets(treeSelection.getPaths());
-			for (Iterator iter= workingSets.keySet().iterator(); iter.hasNext();) {
-				IWorkingSet ws= (IWorkingSet)iter.next();
-				List toRemove= (List)workingSets.get(ws);
-				List currentElements= new ArrayList(Arrays.asList(ws.getElements()));
+			Map<IWorkingSet, List<Object>> workingSets= groupByWorkingSets(treeSelection.getPaths());
+			for (Iterator<IWorkingSet> iter= workingSets.keySet().iterator(); iter.hasNext();) {
+				IWorkingSet ws= iter.next();
+				List<Object> toRemove= workingSets.get(ws);
+				List<IAdaptable> currentElements= new ArrayList<IAdaptable>(Arrays.asList(ws.getElements()));
 				currentElements.removeAll(toRemove);
-				ws.setElements((IAdaptable[])currentElements.toArray(new IAdaptable[currentElements.size()]));
+				ws.setElements(currentElements.toArray(new IAdaptable[currentElements.size()]));
 			}
 		}
 	}
 
-	private Map/*<List<IWorkingSet>>*/ groupByWorkingSets(TreePath[] paths) {
-		Map result= new HashMap();
+	private Map<IWorkingSet, List<Object>> groupByWorkingSets(TreePath[] paths) {
+		Map<IWorkingSet, List<Object>> result= new HashMap<IWorkingSet, List<Object>>();
 		for (int i= 0; i < paths.length; i++) {
 			TreePath path= paths[i];
 			IWorkingSet ws= (IWorkingSet)path.getSegment(0);
-			List l= (List)result.get(ws);
+			List<Object> l= result.get(ws);
 			if (l == null) {
-				l= new ArrayList();
+				l= new ArrayList<Object>();
 				result.put(ws, l);
 			}
 			l.add(path.getSegment(1));
@@ -301,6 +312,7 @@ public class WorkingSetDropAdapter extends JdtViewerDropAdapter implements Trans
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected int getCurrentLocation() {
 		if (fLocation == -1)
 			return super.getCurrentLocation();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlock.java
index 9d16e6f..62cb011 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,9 +75,10 @@ abstract class AbstractConfigurationBlock implements IPreferenceConfigurationBlo
 	protected final class SectionManager {
 		/** The preference setting for keeping no section open. */
 		private static final String __NONE= "__none"; //$NON-NLS-1$
-		private Set fSections= new HashSet();
+		private Set<ExpandableComposite> fSections= new HashSet<ExpandableComposite>();
 		private boolean fIsBeingManaged= false;
 		private ExpansionAdapter fListener= new ExpansionAdapter() {
+			@Override
 			public void expansionStateChanged(ExpansionEvent e) {
 				ExpandableComposite source= (ExpandableComposite) e.getSource();
 				updateSectionStyle(source);
@@ -86,8 +87,8 @@ abstract class AbstractConfigurationBlock implements IPreferenceConfigurationBlo
 				if (e.getState()) {
 					try {
 						fIsBeingManaged= true;
-						for (Iterator iter= fSections.iterator(); iter.hasNext();) {
-							ExpandableComposite composite= (ExpandableComposite) iter.next();
+						for (Iterator<ExpandableComposite> iter= fSections.iterator(); iter.hasNext();) {
+							ExpandableComposite composite= iter.next();
 							if (composite != source)
 								composite.setExpanded(false);
 						}
@@ -207,26 +208,26 @@ abstract class AbstractConfigurationBlock implements IPreferenceConfigurationBlo
 	protected static final int INDENT= 20;
 	private OverlayPreferenceStore fStore;
 
-	private Map fCheckBoxes= new HashMap();
+	private Map<Button, String> fCheckBoxes= new HashMap<Button, String>();
 	private SelectionListener fCheckBoxListener= new SelectionListener() {
 		public void widgetDefaultSelected(SelectionEvent e) {
 		}
 		public void widgetSelected(SelectionEvent e) {
 			Button button= (Button) e.widget;
-			fStore.setValue((String) fCheckBoxes.get(button), button.getSelection());
+			fStore.setValue(fCheckBoxes.get(button), button.getSelection());
 		}
 	};
 
 
-	private Map fTextFields= new HashMap();
+	private Map<Text, String> fTextFields= new HashMap<Text, String>();
 	private ModifyListener fTextFieldListener= new ModifyListener() {
 		public void modifyText(ModifyEvent e) {
 			Text text= (Text) e.widget;
-			fStore.setValue((String) fTextFields.get(text), text.getText());
+			fStore.setValue(fTextFields.get(text), text.getText());
 		}
 	};
 
-	private ArrayList fNumberFields= new ArrayList();
+	private ArrayList<Text> fNumberFields= new ArrayList<Text>();
 	private ModifyListener fNumberFieldListener= new ModifyListener() {
 		public void modifyText(ModifyEvent e) {
 			numberFieldChanged((Text) e.widget);
@@ -239,7 +240,7 @@ abstract class AbstractConfigurationBlock implements IPreferenceConfigurationBlo
 	 * @see #createDependency(Button, Control)
 	 * @since 3.0
 	 */
-	private ArrayList fMasterSlaveListeners= new ArrayList();
+	private ArrayList<SelectionListener> fMasterSlaveListeners= new ArrayList<SelectionListener>();
 
 	private StatusInfo fStatus;
 	private final PreferencePage fMainPage;
@@ -381,24 +382,24 @@ abstract class AbstractConfigurationBlock implements IPreferenceConfigurationBlo
 
 	private void initializeFields() {
 
-		Iterator iter= fCheckBoxes.keySet().iterator();
+		Iterator<Button> iter= fCheckBoxes.keySet().iterator();
 		while (iter.hasNext()) {
-			Button b= (Button) iter.next();
-			String key= (String) fCheckBoxes.get(b);
+			Button b= iter.next();
+			String key= fCheckBoxes.get(b);
 			b.setSelection(fStore.getBoolean(key));
 		}
 
-		iter= fTextFields.keySet().iterator();
-		while (iter.hasNext()) {
-			Text t= (Text) iter.next();
-			String key= (String) fTextFields.get(t);
+		Iterator<Text> iter2= fTextFields.keySet().iterator();
+		while (iter2.hasNext()) {
+			Text t= iter2.next();
+			String key= fTextFields.get(t);
 			t.setText(fStore.getString(key));
 		}
 
         // Update slaves
-        iter= fMasterSlaveListeners.iterator();
-        while (iter.hasNext()) {
-            SelectionListener listener= (SelectionListener)iter.next();
+        Iterator<SelectionListener> iter3= fMasterSlaveListeners.iterator();
+        while (iter3.hasNext()) {
+            SelectionListener listener= iter3.next();
             listener.widgetSelected(null);
         }
 
@@ -429,7 +430,7 @@ abstract class AbstractConfigurationBlock implements IPreferenceConfigurationBlo
 		String number= textControl.getText();
 		IStatus status= validatePositiveNumber(number);
 		if (!status.matches(IStatus.ERROR))
-			fStore.setValue((String) fTextFields.get(textControl), number);
+			fStore.setValue(fTextFields.get(textControl), number);
 		updateStatus(status);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferenceAndPropertyPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferenceAndPropertyPage.java
index 8628cc2..e3fb612 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferenceAndPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferenceAndPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ public abstract class AbstractConfigurationBlockPreferenceAndPropertyPage extend
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), getHelpId());
@@ -64,6 +65,7 @@ public abstract class AbstractConfigurationBlockPreferenceAndPropertyPage extend
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Control createPreferenceContent(Composite parent) {
 
 		IPreferencePageContainer container= getContainer();
@@ -95,6 +97,7 @@ public abstract class AbstractConfigurationBlockPreferenceAndPropertyPage extend
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performOk() {
 		fConfigurationBlock.performOk();
 
@@ -110,6 +113,7 @@ public abstract class AbstractConfigurationBlockPreferenceAndPropertyPage extend
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void performDefaults() {
 		fConfigurationBlock.performDefaults();
 		super.performDefaults();
@@ -118,6 +122,7 @@ public abstract class AbstractConfigurationBlockPreferenceAndPropertyPage extend
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dispose() {
 		fConfigurationBlock.dispose();
 		super.dispose();
@@ -126,6 +131,7 @@ public abstract class AbstractConfigurationBlockPreferenceAndPropertyPage extend
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (useProjectSpecificSettings) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferencePage.java
index d2b095d..5ec0ae9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AbstractConfigurationBlockPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public abstract class AbstractConfigurationBlockPreferencePage extends Preferenc
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), getHelpId());
@@ -68,6 +69,7 @@ public abstract class AbstractConfigurationBlockPreferencePage extends Preferenc
 	/*
 	 * @see PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 
 		fOverlayStore.load();
@@ -88,13 +90,14 @@ public abstract class AbstractConfigurationBlockPreferencePage extends Preferenc
     /*
 	 * @see PreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 
 		fConfigurationBlock.performOk();
 
 		fOverlayStore.propagate();
 
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 
 		return true;
 	}
@@ -102,6 +105,7 @@ public abstract class AbstractConfigurationBlockPreferencePage extends Preferenc
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	public void performDefaults() {
 
 		fOverlayStore.loadDefaults();
@@ -113,6 +117,7 @@ public abstract class AbstractConfigurationBlockPreferencePage extends Preferenc
 	/*
 	 * @see DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 
 		fConfigurationBlock.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AppearancePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AppearancePreferencePage.java
index 3cb6abc..e30e696 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AppearancePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/AppearancePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,15 +45,16 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.Separator;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.TextBoxDialogField;
 
+
 public class AppearancePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
 
 	private static final String SHOW_CU_CHILDREN= PreferenceConstants.SHOW_CU_CHILDREN;
 	private static final String PREF_METHOD_RETURNTYPE= PreferenceConstants.APPEARANCE_METHOD_RETURNTYPE;
 	private static final String PREF_METHOD_TYPEPARAMETERS= PreferenceConstants.APPEARANCE_METHOD_TYPEPARAMETERS;
 	private static final String PREF_COMPRESS_PACKAGE_NAMES= PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES;
-	private static final String PREF_ABBREVIATE_PACKAGE_NAMES= JavaElementLabelComposer.APPEARANCE_ABBREVIATE_PACKAGE_NAMES;
+	private static final String PREF_ABBREVIATE_PACKAGE_NAMES= PreferenceConstants.APPEARANCE_ABBREVIATE_PACKAGE_NAMES;
 	private static final String PREF_PKG_NAME_PATTERN_FOR_PKG_VIEW= PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW;
-	private static final String PREF_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW= JavaElementLabelComposer.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW;
+	private static final String PREF_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW= PreferenceConstants.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW;
 	private static final String STACK_BROWSING_VIEWS_VERTICALLY= PreferenceConstants.BROWSING_STACK_VERTICALLY;
 	private static final String PREF_FOLD_PACKAGES_IN_PACKAGE_EXPLORER= PreferenceConstants.APPEARANCE_FOLD_PACKAGES_IN_PACKAGE_EXPLORER;
 	private static final String PREF_CATEGORY= PreferenceConstants.APPEARANCE_CATEGORY;
@@ -140,6 +141,7 @@ public class AppearancePreferencePage extends PreferencePage implements IWorkben
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.APPEARANCE_PREFERENCE_PAGE);
@@ -148,6 +150,7 @@ public class AppearancePreferencePage extends PreferencePage implements IWorkben
 	/*
 	 * @see PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		initializeDialogUnits(parent);
 		int nColumns= 1;
@@ -241,6 +244,7 @@ public class AppearancePreferencePage extends PreferencePage implements IWorkben
 	/*
 	 * @see IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		IPreferenceStore prefs= getPreferenceStore();
 		prefs.setValue(PREF_METHOD_RETURNTYPE, fShowMethodReturnType.isSelected());
@@ -253,13 +257,14 @@ public class AppearancePreferencePage extends PreferencePage implements IWorkben
 		prefs.setValue(PREF_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW, fAbbreviatePackageNamePattern.getText());
 		prefs.setValue(PREF_ABBREVIATE_PACKAGE_NAMES, fAbbreviatePackageNames.isSelected());
 		prefs.setValue(PREF_FOLD_PACKAGES_IN_PACKAGE_EXPLORER, fFoldPackagesInPackageExplorer.isSelected());
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 		return super.performOk();
 	}
 
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		IPreferenceStore prefs= getPreferenceStore();
 		fShowMethodReturnType.setSelection(prefs.getDefaultBoolean(PREF_METHOD_RETURNTYPE));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BuildPathsPropertyPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BuildPathsPropertyPage.java
index 1583931..65f3a54 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BuildPathsPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BuildPathsPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,7 @@ public class BuildPathsPropertyPage extends PropertyPage implements IStatusChang
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		// ensure the page has no special buttons
 		noDefaultAndApplyButton();
@@ -92,6 +93,7 @@ public class BuildPathsPropertyPage extends PropertyPage implements IStatusChang
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.BUILD_PATH_PROPERTY_PAGE);
@@ -111,6 +113,7 @@ public class BuildPathsPropertyPage extends PropertyPage implements IStatusChang
 	 * @see org.eclipse.jface.preference.PreferencePage#okToLeave()
 	 * @since 3.5
 	 */
+	@Override
 	public boolean okToLeave() {
 		if (fBuildPathsBlock != null && fBuildPathsBlock.hasChangesInDialog()) {
 			String title= PreferencesMessages.BuildPathsPropertyPage_unsavedchanges_title;
@@ -137,6 +140,7 @@ public class BuildPathsPropertyPage extends PropertyPage implements IStatusChang
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		if (fBuildPathsBlock != null) {
 			if (visible) {
@@ -205,6 +209,7 @@ public class BuildPathsPropertyPage extends PropertyPage implements IStatusChang
 	/*
 	 * @see IPreferencePage#performOk
 	 */
+	@Override
 	public boolean performOk() {
 		if (fBuildPathsBlock != null) {
 			getSettings().put(INDEX, fBuildPathsBlock.getPageIndex());
@@ -243,9 +248,10 @@ public class BuildPathsPropertyPage extends PropertyPage implements IStatusChang
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
+	@Override
 	public void applyData(Object data) {
 		if (data instanceof Map) {
-			Map map= (Map) data;
+			Map<?, ?> map= (Map<?, ?>) data;
 			Object selectedLibrary= map.get(DATA_REVEAL_ENTRY);
 			if (selectedLibrary instanceof IClasspathEntry) {
 				IClasspathEntry entry= (IClasspathEntry) selectedLibrary;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BulletListBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BulletListBlock.java
index 89fb9b9..429f153 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BulletListBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/BulletListBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,10 +69,12 @@ public class BulletListBlock extends Composite {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean getEnabled() {
 		return fEnabled;
 	}
 
+	@Override
 	public void setEnabled(boolean enabled) {
 		fEnabled= enabled;
 		configureStyledText(fText, fEnabled);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathContainerPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathContainerPreferencePage.java
index 358fbfb..c9a30ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathContainerPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathContainerPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ public class ClasspathContainerPreferencePage extends WizardPropertyPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setElement(IAdaptable element) {
 		super.setElement(element);
 
@@ -66,6 +67,7 @@ public class ClasspathContainerPreferencePage extends WizardPropertyPage {
 		fEntry= container.getClasspathEntry();
 	}
 
+	@Override
 	protected IWizard createWizard() {
 		try {
 			IJavaProject project= fJavaProject;
@@ -83,6 +85,7 @@ public class ClasspathContainerPreferencePage extends WizardPropertyPage {
 	/**
 	 * Apply the changes to the classpath
 	 */
+	@Override
 	protected void applyChanges() {
 		IClasspathEntry[] created= ((ClasspathContainerWizard) getWizard()).getNewEntries();
 		if (created == null || created.length != 1)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathVariablesPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathVariablesPreferencePage.java
index a7daf54..c394385 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathVariablesPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ClasspathVariablesPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class ClasspathVariablesPreferencePage extends PreferencePage implements
 	 * (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.CP_VARIABLES_PREFERENCE_PAGE);
@@ -68,6 +69,7 @@ public class ClasspathVariablesPreferencePage extends PreferencePage implements
 	/*
 	 * @see PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		Control result= fVariableBlock.createContents(parent);
 		Dialog.applyDialogFont(result);
@@ -83,6 +85,7 @@ public class ClasspathVariablesPreferencePage extends PreferencePage implements
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		// not used (constructor calls noDefaultAndApplyButton())
 //		fVariableBlock.performDefaults();
@@ -92,14 +95,16 @@ public class ClasspathVariablesPreferencePage extends PreferencePage implements
 	/*
 	 * @see PreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 		return fVariableBlock.performOk();
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		// check if the stored settings have changed
 		if (visible) {
@@ -138,9 +143,10 @@ public class ClasspathVariablesPreferencePage extends PreferencePage implements
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
+	@Override
 	public void applyData(Object data) {
-		if (data instanceof Map) {
-			Object id= ((Map) data).get(DATA_SELECT_VARIABLE);
+		if (data instanceof Map && fVariableBlock != null) {
+			Object id= ((Map<?, ?>) data).get(DATA_SELECT_VARIABLE);
 			if (id instanceof String) {
 				fVariableBlock.setSelection((String) id);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CleanUpPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CleanUpPreferencePage.java
index 8568c69..509b077 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CleanUpPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CleanUpPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,11 +35,13 @@ public class CleanUpPreferencePage extends ProfilePreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.ProfilePreferencePage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 	    super.createControl(parent);
     	PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.CLEAN_UP_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected ProfileConfigurationBlock createConfigurationBlock(PreferencesAccess access) {
 	    return new CleanUpConfigurationBlock(getProject(), access);
     }
@@ -47,6 +49,7 @@ public class CleanUpPreferencePage extends ProfilePreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -54,6 +57,7 @@ public class CleanUpPreferencePage extends ProfilePreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java
index 846a852..7f74290 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -127,6 +127,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 		/*
 		 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 		    return getColumnText(element, 0); // needed to make the sorter work
 		}
@@ -157,12 +158,12 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 		}
 	}
 
-	private final Comparator fCategoryComparator= new Comparator() {
-		private int getRank(Object o) {
-			return ((ModelElement) o).getRank();
+	private final Comparator<ModelElement> fCategoryComparator= new Comparator<ModelElement>() {
+		private int getRank(ModelElement o) {
+			return o.getRank();
 		}
 
-		public int compare(Object o1, Object o2) {
+		public int compare(ModelElement o1, ModelElement o2) {
 			return getRank(o1) - getRank(o2);
 		}
 	};
@@ -172,17 +173,17 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 		private static final String COLON= ":"; //$NON-NLS-1$
 		private static final String SEPARATOR= "\0"; //$NON-NLS-1$
 
-		private final List fElements;
+		private final List<ModelElement> fElements;
 		/**
 		 * The read-only list of elements.
 		 */
-		final List elements;
+		final List<ModelElement> elements;
 
 		public PreferenceModel(CompletionProposalComputerRegistry registry) {
-			List categories= registry.getProposalCategories();
-			fElements= new ArrayList();
-			for (Iterator it= categories.iterator(); it.hasNext();) {
-				CompletionProposalCategory category= (CompletionProposalCategory) it.next();
+			List<CompletionProposalCategory> categories= registry.getProposalCategories();
+			fElements= new ArrayList<ModelElement>();
+			for (Iterator<CompletionProposalCategory> it= categories.iterator(); it.hasNext();) {
+				CompletionProposalCategory category= it.next();
 				if (category.hasComputers()) {
 					fElements.add(new ModelElement(category, this));
 				}
@@ -194,7 +195,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
         public void moveUp(ModelElement category) {
         	int index= fElements.indexOf(category);
 			if (index > 0) {
-				Object item= fElements.remove(index);
+				ModelElement item= fElements.remove(index);
 				fElements.add(index - 1, item);
 				writeOrderPreference(null, false);
 			}
@@ -203,7 +204,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
         public void moveDown(ModelElement category) {
         	int index= fElements.indexOf(category);
 			if (index < fElements.size() - 1) {
-				Object item= fElements.remove(index);
+				ModelElement item= fElements.remove(index);
 				fElements.add(index + 1, item);
 				writeOrderPreference(null, false);
 			}
@@ -211,8 +212,8 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 
     	private void writeInclusionPreference(ModelElement changed, boolean isInDefaultCategory) {
     		StringBuffer buf= new StringBuffer();
-    		for (Iterator it= fElements.iterator(); it.hasNext();) {
-    			ModelElement item= (ModelElement) it.next();
+    		for (Iterator<ModelElement> it= fElements.iterator(); it.hasNext();) {
+    			ModelElement item= it.next();
     			boolean included= changed == item ? isInDefaultCategory : item.isInDefaultCategory();
     			if (!included)
     				buf.append(item.getId() + SEPARATOR);
@@ -226,8 +227,8 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
     	private void writeOrderPreference(ModelElement changed, boolean isSeparate) {
     		StringBuffer buf= new StringBuffer();
     		int i= 0;
-    		for (Iterator it= fElements.iterator(); it.hasNext(); i++) {
-    			ModelElement item= (ModelElement) it.next();
+    		for (Iterator<ModelElement> it= fElements.iterator(); it.hasNext(); i++) {
+    			ModelElement item= it.next();
     			boolean separate= changed == item ? isSeparate : item.isSeparateCommand();
     			int rank= separate ? i : i + LIMIT;
     			buf.append(item.getId() + COLON + rank + SEPARATOR);
@@ -339,7 +340,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 
 	/** element type: {@link ModelElement}. */
 	private final PreferenceModel fModel;
-	private final Map fImages= new HashMap();
+	private final Map<ImageDescriptor, Image> fImages= new HashMap<ImageDescriptor, Image>();
 
 	private CheckboxTableViewer fDefaultViewer;
 	private CheckboxTableViewer fSeparateViewer;
@@ -354,6 +355,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#createContents(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 
 		ScrolledPageContent scrolled= new ScrolledPageContent(parent, SWT.H_SCROLL | SWT.V_SCROLL);
@@ -466,6 +468,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 	    Link link= new Link(composite, SWT.NONE | SWT.WRAP);
 		link.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_key_binding_hint);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				PreferencesUtil.createPreferenceDialogOn(getShell(), e.text, null, null);
 			}
@@ -537,6 +540,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 		});
 
 		table.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleTableSelection();
 			}
@@ -556,10 +560,11 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 		fUpButton= new Button(composite, SWT.PUSH | SWT.CENTER);
         fUpButton.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_Up);
         fUpButton.addSelectionListener(new SelectionAdapter() {
-        	public void widgetSelected(SelectionEvent e) {
+        	@Override
+			public void widgetSelected(SelectionEvent e) {
         		int index= getSelectionIndex();
         		if (index != -1) {
-        			((ModelElement) fModel.elements.get(index)).moveUp();
+        			fModel.elements.get(index).moveUp();
         			fSeparateViewer.refresh();
         			handleTableSelection();
         		}
@@ -571,10 +576,11 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
         fDownButton= new Button(composite, SWT.PUSH | SWT.CENTER);
         fDownButton.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_Down);
         fDownButton.addSelectionListener(new SelectionAdapter() {
-        	public void widgetSelected(SelectionEvent e) {
+        	@Override
+			public void widgetSelected(SelectionEvent e) {
         		int index= getSelectionIndex();
         		if (index != -1) {
-        			((ModelElement) fModel.elements.get(index)).moveDown();
+        			fModel.elements.get(index).moveDown();
         			fSeparateViewer.refresh();
         			handleTableSelection();
         		}
@@ -597,11 +603,6 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 		String str= PreferencesMessages.CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout;
 		addTextField(timeoutComposite, str, PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC, 0, pixelConverter.convertWidthInCharsToPixels(7));
 
-		Label ms= new Label(timeoutComposite, SWT.NONE);
-		gd= new GridData();
-		ms.setLayoutData(gd);
-		ms.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_ms);
-
 	}
 
 	private void handleTableSelection() {
@@ -627,6 +628,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
 	 */
+	@Override
 	protected void updateControls() {
 		super.updateControls();
 
@@ -639,11 +641,11 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 
 	private void updateCheckedState() {
 		final int size= fModel.elements.size();
-		List defaultChecked= new ArrayList(size);
-		List separateChecked= new ArrayList(size);
+		List<ModelElement> defaultChecked= new ArrayList<ModelElement>(size);
+		List<ModelElement> separateChecked= new ArrayList<ModelElement>(size);
 
-		for (Iterator it= fModel.elements.iterator(); it.hasNext();) {
-			ModelElement element= (ModelElement) it.next();
+		for (Iterator<ModelElement> it= fModel.elements.iterator(); it.hasNext();) {
+			ModelElement element= it.next();
 			if (element.isInDefaultCategory())
 				defaultChecked.add(element);
 			if (element.isSeparateCommand())
@@ -657,9 +659,10 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#processChanges(org.eclipse.ui.preferences.IWorkbenchPreferenceContainer)
 	 */
+	@Override
 	protected boolean processChanges(IWorkbenchPreferenceContainer container) {
-		for (Iterator it= fModel.elements.iterator(); it.hasNext();) {
-			ModelElement item= (ModelElement) it.next();
+		for (Iterator<ModelElement> it= fModel.elements.iterator(); it.hasNext();) {
+			ModelElement item= it.next();
 			item.update();
 		}
 
@@ -669,6 +672,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock.Key, java.lang.String, java.lang.String)
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		if (changedKey == PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC) {
 			final StatusInfo status= new StatusInfo();
@@ -697,6 +701,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
 	 */
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		// no builds triggered by our settings
 		return null;
@@ -705,9 +710,10 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#dispose()
 	 */
+	@Override
 	public void dispose() {
-		for (Iterator it= fImages.values().iterator(); it.hasNext();) {
-			Image image= (Image) it.next();
+		for (Iterator<Image> it= fImages.values().iterator(); it.hasNext();) {
+			Image image= it.next();
 			image.dispose();
 		}
 
@@ -767,7 +773,7 @@ final class CodeAssistAdvancedConfigurationBlock extends OptionsConfigurationBlo
 		if (imgDesc == null)
 			return null;
 
-		Image img= (Image) fImages.get(imgDesc);
+		Image img= fImages.get(imgDesc);
 		if (img == null) {
 			img= imgDesc.createImage(false);
 			fImages.put(imgDesc, img);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedPreferencePage.java
index cc4a383..4c55667 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public final class CodeAssistAdvancedPreferencePage extends PropertyAndPreferenc
 
 	private CodeAssistAdvancedConfigurationBlock fConfigurationBlock;
 
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new CodeAssistAdvancedConfigurationBlock(getNewStatusChangedListener(), container);
@@ -32,18 +33,22 @@ public final class CodeAssistAdvancedPreferencePage extends PropertyAndPreferenc
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return false;
 	}
 
+	@Override
 	protected String getPreferencePageID() {
 		return "org.eclipse.jdt.ui.preferences.CodeAssistPreferenceAdvanced"; //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPropertyPageID() {
 		return null;
 	}
@@ -51,6 +56,7 @@ public final class CodeAssistAdvancedPreferencePage extends PropertyAndPreferenc
 		/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -61,6 +67,7 @@ public final class CodeAssistAdvancedPreferencePage extends PropertyAndPreferenc
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -71,6 +78,7 @@ public final class CodeAssistAdvancedPreferencePage extends PropertyAndPreferenc
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -81,6 +89,7 @@ public final class CodeAssistAdvancedPreferencePage extends PropertyAndPreferenc
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistConfigurationBlock.java
index 91d0c05..94def8a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,8 +68,6 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 	private static final Key PREF_CODEASSIST_FILL_ARGUMENT_NAMES= getJDTUIKey(PreferenceConstants.CODEASSIST_FILL_ARGUMENT_NAMES);
 	private static final Key PREF_CODEASSIST_GUESS_METHOD_ARGUMENTS= getJDTUIKey(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS);
 	private static final Key PREF_CODEASSIST_PREFIX_COMPLETION= getJDTUIKey(PreferenceConstants.CODEASSIST_PREFIX_COMPLETION);
-	private static final Key PREF_CODEASSIST_FORBIDDEN_REFERENCE_CHECK= getJDTCoreKey(JavaCore.CODEASSIST_FORBIDDEN_REFERENCE_CHECK);
-	private static final Key PREF_CODEASSIST_DISCOURAGED_REFERENCE_CHECK= getJDTCoreKey(JavaCore.CODEASSIST_DISCOURAGED_REFERENCE_CHECK);
 	private static final Key PREF_CODEASSIST_DEPRECATION_CHECK= getJDTCoreKey(JavaCore.CODEASSIST_DEPRECATION_CHECK);
 	private static final Key PREF_CODEASSIST_CAMEL_CASE_MATCH= getJDTCoreKey(JavaCore.CODEASSIST_CAMEL_CASE_MATCH);
 
@@ -89,8 +87,6 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 				PREF_CODEASSIST_FILL_ARGUMENT_NAMES,
 				PREF_CODEASSIST_GUESS_METHOD_ARGUMENTS,
 				PREF_CODEASSIST_PREFIX_COMPLETION,
-				PREF_CODEASSIST_FORBIDDEN_REFERENCE_CHECK,
-				PREF_CODEASSIST_DISCOURAGED_REFERENCE_CHECK,
 				PREF_CODEASSIST_DEPRECATION_CHECK,
 				PREF_CODEASSIST_CAMEL_CASE_MATCH,
 		};
@@ -108,6 +104,7 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 		super(statusListener, null, getAllKeys(), workbenchcontainer);
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		ScrolledPageContent scrolled= new ScrolledPageContent(parent, SWT.H_SCROLL | SWT.V_SCROLL);
 		scrolled.setExpandHorizontal(true);
@@ -163,8 +160,9 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 		label= PreferencesMessages.JavaEditorPreferencePage_automaticallyAddImportInsteadOfQualifiedName;
 		Button master= addCheckBox(composite, label, PREF_CODEASSIST_ADDIMPORT, trueFalse, 0);
 
-		label= PreferencesMessages.JavaEditorPreferencePage_suggestStaticImports; //TODO: &Use <a>static imports</a> (only 1.5 or higher)
+		label= PreferencesMessages.JavaEditorPreferencePage_suggestStaticImports;
 		Button slave= addCheckBoxWithLink(composite, label, PREF_CODEASSIST_SUGGEST_STATIC_IMPORTS, enabledDisabled, 20, SWT.DEFAULT, new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				openStaticImportFavoritesPage();
 			}
@@ -188,6 +186,7 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 
 
 		SelectionListener completionSelectionListener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				boolean state= fInsertBestGuessRadioButton.getSelection();
 				setValue(PREF_CODEASSIST_GUESS_METHOD_ARGUMENTS, state);
@@ -228,6 +227,7 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 	protected static void createSelectionDependency(final Button master, final Control slave) {
 		master.addSelectionListener(new SelectionAdapter() {
 			
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				deepSetEnabled(slave, master.getSelection());
 			}
@@ -264,33 +264,21 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 
 		addComboBox(composite, label, PREF_CODEASSIST_SORTER, values, labels, 0);
 
-		label= PreferencesMessages.JavaEditorPreferencePage_showOnlyProposalsVisibleInTheInvocationContext;
-		addCheckBox(composite, label, PREF_CODEASSIST_SHOW_VISIBLE_PROPOSALS, trueFalse, 0);
-
 		label= PreferencesMessages.CodeAssistConfigurationBlock_matchCamelCase_label;
 		addCheckBox(composite, label, PREF_CODEASSIST_CAMEL_CASE_MATCH, enabledDisabled, 0);
-
-		label= PreferencesMessages.CodeAssistConfigurationBlock_restricted_link;
-		Map targetInfo= new java.util.HashMap(2);
-		targetInfo.put(ProblemSeveritiesPreferencePage.DATA_SELECT_OPTION_KEY,	JavaCore.COMPILER_PB_FORBIDDEN_REFERENCE);
-		targetInfo.put(ProblemSeveritiesPreferencePage.DATA_SELECT_OPTION_QUALIFIER, JavaCore.PLUGIN_ID);
-		createPreferencePageLink(composite, label, targetInfo);
-
-
-		label= PreferencesMessages.CodeAssistConfigurationBlock_hideForbidden_label;
-		addCheckBox(composite, label, PREF_CODEASSIST_FORBIDDEN_REFERENCE_CHECK, enabledDisabled, 0);
-
-		label= PreferencesMessages.CodeAssistConfigurationBlock_hideDiscouraged_label;
-		addCheckBox(composite, label, PREF_CODEASSIST_DISCOURAGED_REFERENCE_CHECK, enabledDisabled, 0);
+		
+		label= PreferencesMessages.JavaEditorPreferencePage_showOnlyProposalsVisibleInTheInvocationContext;
+		addCheckBox(composite, label, PREF_CODEASSIST_SHOW_VISIBLE_PROPOSALS, trueFalse, 0);
 
 		label= PreferencesMessages.CodeAssistConfigurationBlock_hideDeprecated_label;
 		addCheckBox(composite, label, PREF_CODEASSIST_DEPRECATION_CHECK, enabledDisabled, 0);
 	}
 
-	private void createPreferencePageLink(Composite composite, String label, final Map targetInfo) {
+	private void createPreferencePageLink(Composite composite, String label, final Map<String, String> targetInfo) {
 		final Link link= new Link(composite, SWT.NONE);
 		link.setText(label);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				PreferencesUtil.createPreferenceDialogOn(link.getShell(), e.text, null, targetInfo);
 			}
@@ -302,19 +290,20 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 		label= PreferencesMessages.JavaEditorPreferencePage_enableAutoActivation;
 		final Button autoactivation= addCheckBox(composite, label, PREF_CODEASSIST_AUTOACTIVATION, trueFalse, 0);
 		autoactivation.addSelectionListener(new SelectionAdapter(){
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				updateAutoactivationControls();
 			}
 		});
 
 		label= PreferencesMessages.JavaEditorPreferencePage_autoActivationDelay;
-		addLabelledTextField(composite, label, PREF_CODEASSIST_AUTOACTIVATION_DELAY, 4, 0);
+		addLabelledTextField(composite, label, PREF_CODEASSIST_AUTOACTIVATION_DELAY, 4, 20);
 
 		label= PreferencesMessages.JavaEditorPreferencePage_autoActivationTriggersForJava;
-		addLabelledTextField(composite, label, PREF_CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA, 100, 4, 0);
+		addLabelledTextField(composite, label, PREF_CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA, 100, 4, 20);
 
 		label= PreferencesMessages.JavaEditorPreferencePage_autoActivationTriggersForJavaDoc;
-		addLabelledTextField(composite, label, PREF_CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVADOC, 100, 4, 0);
+		addLabelledTextField(composite, label, PREF_CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVADOC, 100, 4, 20);
 	}
 
 
@@ -325,9 +314,11 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 	protected Text addLabelledTextField(Composite parent, String label, Key key, int modelTextLimit, int fieldTextLimit, int indent) {
 		PixelConverter pixelConverter= new PixelConverter(parent);
 
-		Label labelControl= new Label(parent, SWT.WRAP);
+		Label labelControl= new Label(parent, SWT.NONE);
 		labelControl.setText(label);
-		labelControl.setLayoutData(new GridData());
+		GridData data= new GridData();
+		data.horizontalIndent= indent;
+		labelControl.setLayoutData(data);
 
 		Text textBox= new Text(parent, SWT.BORDER | SWT.SINGLE);
 		textBox.setData(key);
@@ -341,14 +332,13 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 		}
 		textBox.addModifyListener(getTextModifyListener());
 
-		GridData data= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		if (modelTextLimit != 0)
 			textBox.setTextLimit(modelTextLimit);
 
 		if (fieldTextLimit != 0)
 			data.widthHint= pixelConverter.convertWidthInCharsToPixels(fieldTextLimit + 1);
 
-		data.horizontalIndent= indent;
 		data.horizontalSpan= 2;
 		textBox.setLayoutData(data);
 
@@ -367,6 +357,7 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 		completionComposite.setLayout(ccgl);
 
 		SelectionListener completionSelectionListener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				boolean insert= fCompletionInsertsRadioButton.getSelection();
 				setValue(PREF_CODEASSIST_INSERT_COMPLETION, insert);
@@ -418,11 +409,13 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
     }
 
 
+	@Override
 	public void performDefaults() {
 		super.performDefaults();
 		initializeFields();
 	}
 
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		return null;
 	}
@@ -452,6 +445,7 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 		return status;
 	}
 
+	@Override
 	protected void validateSettings(Key key, String oldValue, String newValue) {
 		if (key == null || PREF_CODEASSIST_AUTOACTIVATION_DELAY.equals(key))
 			fContext.statusChanged(validatePositiveNumber(getValue(PREF_CODEASSIST_AUTOACTIVATION_DELAY)));
@@ -460,28 +454,28 @@ class CodeAssistConfigurationBlock extends OptionsConfigurationBlock {
 	protected void setControlEnabled(Key key, boolean enabled) {
 		Control control= getControl(key);
 		control.setEnabled(enabled);
-		Label label= (Label) fLabels.get(control);
+		Label label= fLabels.get(control);
 		if (label != null)
 			label.setEnabled(enabled);
 	}
 
 	private Control getControl(Key key) {
 		for (int i= fComboBoxes.size() - 1; i >= 0; i--) {
-			Control curr= (Control) fComboBoxes.get(i);
+			Control curr= fComboBoxes.get(i);
 			ControlData data= (ControlData) curr.getData();
 			if (key.equals(data.getKey())) {
 				return curr;
 			}
 		}
 		for (int i= fCheckBoxes.size() - 1; i >= 0; i--) {
-			Control curr= (Control) fCheckBoxes.get(i);
+			Control curr= fCheckBoxes.get(i);
 			ControlData data= (ControlData) curr.getData();
 			if (key.equals(data.getKey())) {
 				return curr;
 			}
 		}
 		for (int i= fTextBoxes.size() - 1; i >= 0; i--) {
-			Control curr= (Control) fTextBoxes.get(i);
+			Control curr= fTextBoxes.get(i);
 			Key currKey= (Key) curr.getData();
 			if (key.equals(currKey)) {
 				return curr;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesConfigurationBlock.java
index cc8f46c..af40f9b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,10 +94,10 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 		}
 
 		private StringButtonDialogField fNameDialogField;
-		private List fExistingEntries;
+		private List<String> fExistingEntries;
 		private final boolean fIsEditingMember;
 
-		public FavoriteStaticMemberInputDialog(Shell parent, List existingEntries, boolean isMember, boolean isNew) {
+		public FavoriteStaticMemberInputDialog(Shell parent, List<String> existingEntries, boolean isMember, boolean isNew) {
 			super(parent);
 			fIsEditingMember= isMember;
 			fExistingEntries= existingEntries;
@@ -125,6 +125,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 * @since 3.4
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
@@ -144,6 +145,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 			return val;
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 			initializeDialogUnits(parent);
@@ -213,7 +215,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 
 		private boolean doesExist(String name) {
 			for (int i= 0; i < fExistingEntries.size(); i++) {
-				String entry= (String) fExistingEntries.get(i);
+				String entry= fExistingEntries.get(i);
 				if (name.equals(entry)) {
 					return true;
 				}
@@ -225,6 +227,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE);
@@ -243,28 +246,30 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 			CLASS_ICON= JavaElementImageProvider.getDecoratedImage(JavaPluginImages.DESC_OBJS_CLASS, 0, JavaElementImageProvider.SMALL_SIZE);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			return ((String)element).endsWith(WILDCARD) ? CLASS_ICON : MEMBER_ICON;
 		}
 
+		@Override
 		public String getText(Object element) {
 			return BasicElementLabels.getJavaElementName((String) element);
 		}
 	}
 
 
-	private class ListAdapter implements IListAdapter, IDialogFieldListener {
+	private class ListAdapter implements IListAdapter<String>, IDialogFieldListener {
 
-		private boolean canEdit(ListDialogField field) {
-			List selected= field.getSelectedElements();
+		private boolean canEdit(ListDialogField<String> field) {
+			List<String> selected= field.getSelectedElements();
 			return selected.size() == 1;
 		}
 
-        public void customButtonPressed(ListDialogField field, int index) {
+        public void customButtonPressed(ListDialogField<String> field, int index) {
         	doButtonPressed(index);
         }
 
-        public void selectionChanged(ListDialogField field) {
+        public void selectionChanged(ListDialogField<String> field) {
 			fList.enableButton(IDX_EDIT, canEdit(field));
         }
 
@@ -272,7 +277,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
         	doDialogFieldChanged(field);
         }
 
-        public void doubleClicked(ListDialogField field) {
+        public void doubleClicked(ListDialogField<String> field) {
         	if (canEdit(field)) {
 				doButtonPressed(IDX_EDIT);
         	}
@@ -289,7 +294,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 	private static final int IDX_EDIT= 2;
 	private static final int IDX_REMOVE= 3;
 
-	private ListDialogField fList;
+	private ListDialogField<String> fList;
 
 
 	private static Key[] getAllKeys() {
@@ -303,6 +308,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 		super(statusListener, null, getAllKeys(), workbenchcontainer);
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		ScrolledPageContent scrolled= new ScrolledPageContent(parent, SWT.H_SCROLL | SWT.V_SCROLL);
 		scrolled.setExpandHorizontal(true);
@@ -338,7 +344,7 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 
 		ListAdapter adapter= new ListAdapter();
 
-		fList= new ListDialogField(adapter, buttonLabels, new ListLabelProvider());
+		fList= new ListDialogField<String>(adapter, buttonLabels, new ListLabelProvider());
 		fList.setDialogFieldListener(adapter);
 		fList.setLabelText(PreferencesMessages.CodeAssistStaticMembersConfigurationBlock_description);
 		fList.setRemoveButtonIndex(IDX_REMOVE);
@@ -361,15 +367,18 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 		fList.setElements(Arrays.asList(getFavoriteStaticMembersPreference()));
  	}
 
-    public void performDefaults() {
+    @Override
+	public void performDefaults() {
 		super.performDefaults();
 		initializeFields();
 	}
 
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		return null;
 	}
 
+	@Override
 	protected void validateSettings(Key key, String oldValue, String newValue) {
 		// no validation
 	}
@@ -377,28 +386,28 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 	protected void setControlEnabled(Key key, boolean enabled) {
 		Control control= getControl(key);
 		control.setEnabled(enabled);
-		Label label= (Label) fLabels.get(control);
+		Label label= fLabels.get(control);
 		if (label != null)
 			label.setEnabled(enabled);
 	}
 
 	private Control getControl(Key key) {
 		for (int i= fComboBoxes.size() - 1; i >= 0; i--) {
-			Control curr= (Control) fComboBoxes.get(i);
+			Control curr= fComboBoxes.get(i);
 			ControlData data= (ControlData) curr.getData();
 			if (key.equals(data.getKey())) {
 				return curr;
 			}
 		}
 		for (int i= fCheckBoxes.size() - 1; i >= 0; i--) {
-			Control curr= (Control) fCheckBoxes.get(i);
+			Control curr= fCheckBoxes.get(i);
 			ControlData data= (ControlData) curr.getData();
 			if (key.equals(data.getKey())) {
 				return curr;
 			}
 		}
 		for (int i= fTextBoxes.size() - 1; i >= 0; i--) {
-			Control curr= (Control) fTextBoxes.get(i);
+			Control curr= fTextBoxes.get(i);
 			Key currKey= (Key) curr.getData();
 			if (key.equals(currKey)) {
 				return curr;
@@ -409,19 +418,19 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 
 	private void doButtonPressed(int index) {
 		if (index == IDX_NEW_TYPE || index == IDX_NEW_MEMBER) { // add new
-			List existing= fList.getElements();
+			List<String> existing= fList.getElements();
 			FavoriteStaticMemberInputDialog dialog= new FavoriteStaticMemberInputDialog(getShell(), existing, index == IDX_NEW_MEMBER, true);
 			if (dialog.open() == Window.OK) {
 				fList.addElement(dialog.getResult());
 			}
 		} else if (index == IDX_EDIT) { // edit
-			List selected= fList.getSelectedElements();
+			List<String> selected= fList.getSelectedElements();
 			if (selected.isEmpty())
 				return;
 
-			String editedEntry= (String)selected.get(0);
+			String editedEntry= selected.get(0);
 
-			List existing= fList.getElements();
+			List<String> existing= fList.getElements();
 			existing.remove(editedEntry);
 			boolean isType= editedEntry.endsWith(WILDCARD);
 			FavoriteStaticMemberInputDialog dialog= new FavoriteStaticMemberInputDialog(getShell(), existing, !isType, false);
@@ -453,11 +462,11 @@ class CodeAssistFavoritesConfigurationBlock extends OptionsConfigurationBlock {
 		return str.split(";"); //$NON-NLS-1$
 	}
 
-	private static String serializeFavorites(List favorites) {
+	private static String serializeFavorites(List<String> favorites) {
 		int size= favorites.size();
 		StringBuffer buf= new StringBuffer();
 		for (int i= 0; i < size; i++) {
-			buf.append((String)favorites.get(i));
+			buf.append(favorites.get(i));
 			if (i < size -1)
 				buf.append(';');
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesPreferencePage.java
index 427c78d..2e701fb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistFavoritesPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class CodeAssistFavoritesPreferencePage extends PropertyAndPreferencePage
 
 	private CodeAssistFavoritesConfigurationBlock fConfigurationBlock;
 
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new CodeAssistFavoritesConfigurationBlock(getNewStatusChangedListener(), container);
@@ -48,18 +49,22 @@ public class CodeAssistFavoritesPreferencePage extends PropertyAndPreferencePage
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return false;
 	}
 
+	@Override
 	protected String getPreferencePageID() {
 		return PAGE_ID;
 	}
 
+	@Override
 	protected String getPropertyPageID() {
 		return null;
 	}
@@ -67,6 +72,7 @@ public class CodeAssistFavoritesPreferencePage extends PropertyAndPreferencePage
 		/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -77,6 +83,7 @@ public class CodeAssistFavoritesPreferencePage extends PropertyAndPreferencePage
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -87,6 +94,7 @@ public class CodeAssistFavoritesPreferencePage extends PropertyAndPreferencePage
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -97,6 +105,7 @@ public class CodeAssistFavoritesPreferencePage extends PropertyAndPreferencePage
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistPreferencePage.java
index b5603ba..b191ca8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class CodeAssistPreferencePage extends PropertyAndPreferencePage {
 
 	private CodeAssistConfigurationBlock fConfigurationBlock;
 
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new CodeAssistConfigurationBlock(getNewStatusChangedListener(), container);
@@ -42,18 +43,22 @@ public class CodeAssistPreferencePage extends PropertyAndPreferencePage {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return false;
 	}
 
+	@Override
 	protected String getPreferencePageID() {
 		return "org.eclipse.jdt.ui.preferences.CodeAssistPreferencePage"; //$NON-NLS-1$
 	}
 
+	@Override
 	protected String getPropertyPageID() {
 		return null;
 	}
@@ -61,6 +66,7 @@ public class CodeAssistPreferencePage extends PropertyAndPreferencePage {
 		/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -71,6 +77,7 @@ public class CodeAssistPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -81,6 +88,7 @@ public class CodeAssistPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -91,6 +99,7 @@ public class CodeAssistPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeFormatterPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeFormatterPreferencePage.java
index 541b69c..4151223 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeFormatterPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeFormatterPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,11 +35,13 @@ public class CodeFormatterPreferencePage extends ProfilePreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.ProfilePreferencePage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 	    super.createControl(parent);
     	PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.CODEFORMATTER_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected ProfileConfigurationBlock createConfigurationBlock(PreferencesAccess access) {
 	    return new CodeFormatterConfigurationBlock(getProject(), access);
     }
@@ -47,6 +49,7 @@ public class CodeFormatterPreferencePage extends ProfilePreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -54,6 +57,7 @@ public class CodeFormatterPreferencePage extends ProfilePreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeStylePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeStylePreferencePage.java
index bb6d375..c621594 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeStylePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeStylePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new NameConventionConfigurationBlock(getNewStatusChangedListener(), getProject(), container);
@@ -50,10 +51,12 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.CODE_MANIPULATION_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -61,6 +64,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -68,6 +72,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -75,6 +80,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fConfigurationBlock != null) {
@@ -85,6 +91,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -95,6 +102,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -105,6 +113,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -115,6 +124,7 @@ public class CodeStylePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateBlock.java
index 086da3e..2d4be6a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,37 +82,37 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.TreeListDialogField;
 
 public class CodeTemplateBlock extends OptionsConfigurationBlock {
 
-	private class CodeTemplateAdapter extends ViewerComparator implements ITreeListAdapter, IDialogFieldListener {
+	private class CodeTemplateAdapter extends ViewerComparator implements ITreeListAdapter<String>, IDialogFieldListener {
 
 		private final Object[] NO_CHILDREN= new Object[0];
 
-		public void customButtonPressed(TreeListDialogField field, int index) {
+		public void customButtonPressed(TreeListDialogField<String> field, int index) {
 			doButtonPressed(index, field.getSelectedElements());
 		}
 
-		public void selectionChanged(TreeListDialogField field) {
-			List selected= field.getSelectedElements();
+		public void selectionChanged(TreeListDialogField<String> field) {
+			List<Object> selected= field.getSelectedElements();
 			field.enableButton(IDX_EDIT, canEdit(selected));
 			field.enableButton(IDX_EXPORT, !selected.isEmpty());
 
 			updateSourceViewerInput(selected);
 		}
 
-		public void doubleClicked(TreeListDialogField field) {
-			List selected= field.getSelectedElements();
+		public void doubleClicked(TreeListDialogField<String> field) {
+			List<Object> selected= field.getSelectedElements();
 			if (canEdit(selected)) {
 				doButtonPressed(IDX_EDIT, selected);
 			}
 		}
 
-		public Object[] getChildren(TreeListDialogField field, Object element) {
+		public Object[] getChildren(TreeListDialogField<String> field, Object element) {
 			if (element == COMMENT_NODE || element == CODE_NODE) {
 				return getTemplateOfCategory(element == COMMENT_NODE);
 			}
 			return NO_CHILDREN;
 		}
 
-		public Object getParent(TreeListDialogField field, Object element) {
+		public Object getParent(TreeListDialogField<String> field, Object element) {
 			if (element instanceof TemplatePersistenceData) {
 				TemplatePersistenceData data= (TemplatePersistenceData) element;
 				if (data.getTemplate().getName().endsWith(CodeTemplateContextType.COMMENT_SUFFIX)) {
@@ -123,7 +123,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 			return null;
 		}
 
-		public boolean hasChildren(TreeListDialogField field, Object element) {
+		public boolean hasChildren(TreeListDialogField<String> field, Object element) {
 			return (element == COMMENT_NODE || element == CODE_NODE);
 		}
 
@@ -133,12 +133,13 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 			}
 		}
 
-		public void keyPressed(TreeListDialogField field, KeyEvent event) {
+		public void keyPressed(TreeListDialogField<String> field, KeyEvent event) {
 		}
 
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object)
 		 */
+		@Override
 		public int category(Object element) {
 			if (element == COMMENT_NODE) {
 				return 1;
@@ -197,6 +198,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			return null;
 
@@ -205,6 +207,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			if (element == COMMENT_NODE || element == CODE_NODE) {
 				return (String) element;
@@ -267,10 +270,10 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 	private final static int IDX_EXPORT= 3;
 	private final static int IDX_EXPORTALL= 4;
 
-	protected final static Object COMMENT_NODE= PreferencesMessages.CodeTemplateBlock_templates_comment_node;
-	protected final static Object CODE_NODE= PreferencesMessages.CodeTemplateBlock_templates_code_node;
+	protected final static String COMMENT_NODE= PreferencesMessages.CodeTemplateBlock_templates_comment_node;
+	protected final static String CODE_NODE= PreferencesMessages.CodeTemplateBlock_templates_code_node;
 
-	private TreeListDialogField fCodeTemplateTree;
+	private TreeListDialogField<String> fCodeTemplateTree;
 	private SelectionButtonDialogField fGenerateComments;
 
 	protected ProjectTemplateStore fTemplateStore;
@@ -302,7 +305,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 			PreferencesMessages.CodeTemplateBlock_templates_exportall_button
 
 		};
-		fCodeTemplateTree= new TreeListDialogField(adapter, buttonLabels, new CodeTemplateLabelProvider());
+		fCodeTemplateTree= new TreeListDialogField<String>(adapter, buttonLabels, new CodeTemplateLabelProvider());
 		fCodeTemplateTree.setDialogFieldListener(adapter);
 		fCodeTemplateTree.setLabelText(PreferencesMessages.CodeTemplateBlock_templates_label);
 		fCodeTemplateTree.setViewerComparator(adapter);
@@ -326,6 +329,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 		fCodeTemplateTree.postSetSelection(new StructuredSelection(element));
 	}
 
+	@Override
 	public boolean hasProjectSpecificOptions(IProject project) {
 		if (super.hasProjectSpecificOptions(project))
 			return true;
@@ -340,11 +344,13 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#useProjectSpecificSettings(boolean)
 	 * @since 3.5
 	 */
+	@Override
 	public void useProjectSpecificSettings(boolean enable) {
 		fCodeTemplateTree.setEnabled(enable); // need to set because super implementation only updates controls
 		super.useProjectSpecificSettings(enable);
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		fPixelConverter=  new PixelConverter(parent);
 
@@ -373,6 +379,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
 	 */
+	@Override
 	protected void updateControls() {
 		fGenerateComments.setSelection(getBooleanValue(PREF_GENERATE_COMMENTS));
 	}
@@ -415,7 +422,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 	}
 
 	protected TemplatePersistenceData[] getTemplateOfCategory(boolean isComment) {
-		ArrayList res=  new ArrayList();
+		ArrayList<TemplatePersistenceData> res=  new ArrayList<TemplatePersistenceData>();
 		TemplatePersistenceData[] templates= fTemplateStore.getTemplateData();
 		for (int i= 0; i < templates.length; i++) {
 			TemplatePersistenceData curr= templates[i];
@@ -423,14 +430,14 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 				res.add(curr);
 			}
 		}
-		return (TemplatePersistenceData[]) res.toArray(new TemplatePersistenceData[res.size()]);
+		return res.toArray(new TemplatePersistenceData[res.size()]);
 	}
 
-	protected static boolean canEdit(List selected) {
+	protected static boolean canEdit(List<Object> selected) {
 		return selected.size() == 1 && (selected.get(0) instanceof TemplatePersistenceData);
 	}
 
-	protected void updateSourceViewerInput(List selection) {
+	protected void updateSourceViewerInput(List<Object> selection) {
 		if (fPatternViewer == null || fPatternViewer.getTextWidget().isDisposed()) {
 			return;
 		}
@@ -445,7 +452,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 		}
 	}
 
-	protected void doButtonPressed(int buttonIndex, List selected) {
+	protected void doButtonPressed(int buttonIndex, List<Object> selected) {
 		if (buttonIndex == IDX_EDIT) {
 			edit((TemplatePersistenceData) selected.get(0));
 		} else if (buttonIndex == IDX_EXPORT) {
@@ -521,8 +528,8 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 		export(fTemplateStore.getTemplateData());
 	}
 
-	private void export(List selected) {
-		Set datas= new HashSet();
+	private void export(List<Object> selected) {
+		Set<Object> datas= new HashSet<Object>();
 		for (int i= 0; i < selected.size(); i++) {
 			Object curr= selected.get(i);
 			if (curr instanceof TemplatePersistenceData) {
@@ -532,7 +539,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 				datas.addAll(Arrays.asList(cat));
 			}
 		}
-		export((TemplatePersistenceData[]) datas.toArray(new TemplatePersistenceData[datas.size()]));
+		export(datas.toArray(new TemplatePersistenceData[datas.size()]));
 	}
 
 	private void export(TemplatePersistenceData[] templates) {
@@ -590,6 +597,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 			Messages.format(PreferencesMessages.CodeTemplateBlock_export_exists_message, BasicElementLabels.getPathLabel(file)));
 	}
 
+	@Override
 	public void performDefaults() {
 		fTemplateStore.restoreDefaults();
 
@@ -644,6 +652,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 		MessageDialog.openError(getShell(), title, message);
 	}
 
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		return null;
 	}
@@ -651,6 +660,7 @@ public class CodeTemplateBlock extends OptionsConfigurationBlock {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(java.lang.String, java.lang.String)
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		// no validation here
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplatePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplatePreferencePage.java
index 737fd53..2b08717 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplatePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplatePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fCodeTemplateConfigurationBlock= new CodeTemplateBlock(getNewStatusChangedListener(), getProject(), container);
@@ -62,6 +63,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#createPreferenceContent(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fCodeTemplateConfigurationBlock.createContents(composite);
 	}
@@ -69,6 +71,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fCodeTemplateConfigurationBlock != null) {
@@ -79,6 +82,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fCodeTemplateConfigurationBlock != null) {
 			return fCodeTemplateConfigurationBlock.performOk(useProjectSettings());
@@ -89,6 +93,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fCodeTemplateConfigurationBlock != null) {
@@ -99,6 +104,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fCodeTemplateConfigurationBlock != null) {
 			fCodeTemplateConfigurationBlock.dispose();
@@ -117,6 +123,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.IPreferencePage#performCancel()
 	 */
+	@Override
 	public boolean performCancel() {
 		if (fCodeTemplateConfigurationBlock != null) {
 			fCodeTemplateConfigurationBlock.performCancel();
@@ -127,6 +134,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#hasProjectSpecificOptions(org.eclipse.core.resources.IProject)
 	 */
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fCodeTemplateConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -134,6 +142,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -141,6 +150,7 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -148,9 +158,10 @@ public class CodeTemplatePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
+	@Override
 	public void applyData(Object data) {
 		if (data instanceof Map) {
-			Object id= ((Map) data).get(DATA_SELECT_TEMPLATE);
+			Object id= ((Map<?, ?>) data).get(DATA_SELECT_TEMPLATE);
 			if (id instanceof String) {
 				final TemplatePersistenceData[] templates= fCodeTemplateConfigurationBlock.fTemplateStore.getTemplateData();
 				TemplatePersistenceData template= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateSourceViewerConfiguration.java
index 457733f..38052aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeTemplateSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,9 +70,9 @@ public class CodeTemplateSourceViewerConfiguration extends SimpleJavaSourceViewe
 					String varName= doc.get(offset, subject.getLength());
 					TemplateContextType contextType= fProcessor.getContextType();
 					if (contextType != null) {
-						Iterator iter= contextType.resolvers();
+						Iterator<TemplateVariableResolver> iter= contextType.resolvers();
 						while (iter.hasNext()) {
-							TemplateVariableResolver var= (TemplateVariableResolver) iter.next();
+							TemplateVariableResolver var= iter.next();
 							if (varName.equals(var.getType())) {
 								return var.getDescription();
 							}
@@ -106,6 +106,7 @@ public class CodeTemplateSourceViewerConfiguration extends SimpleJavaSourceViewe
 	/*
 	 * @see SourceViewerConfiguration#getContentAssistant(ISourceViewer)
 	 */
+	@Override
 	public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
 
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
@@ -153,6 +154,7 @@ public class CodeTemplateSourceViewerConfiguration extends SimpleJavaSourceViewe
 	 * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String, int)
 	 * @since 2.1
 	 */
+	@Override
 	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType, int stateMask) {
 		return new TemplateVariableTextHover(fProcessor);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ColorSettingPreviewCode.txt b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ColorSettingPreviewCode.txt
index 3c4ffaf..d9b08aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ColorSettingPreviewCode.txt
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ColorSettingPreviewCode.txt
@@ -10,6 +10,7 @@ public class ClassName<E> implements InterfaceName<String> {
 	static Object staticField;
 	// This comment may span only this line
 	private E field;
+	private AbstractClassName field2;
 	// TASK: refactor
 	@SuppressWarnings(value="all")
 	public int foo(Integer parameter) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.java
index 3f03404..99f2483 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -118,6 +118,7 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	private static final String VERSION_1_5= JavaCore.VERSION_1_5;
 	private static final String VERSION_1_6= JavaCore.VERSION_1_6;
 	private static final String VERSION_1_7= JavaCore.VERSION_1_7;
+	private static final String VERSION_JSR14= "jsr14"; //$NON-NLS-1$
 
 	private static final String ERROR= JavaCore.ERROR;
 	private static final String WARNING= JavaCore.WARNING;
@@ -129,9 +130,9 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	private static final String DEFAULT_CONF= "default"; //$NON-NLS-1$
 	private static final String USER_CONF= "user";	 //$NON-NLS-1$
 
-	private ArrayList fComplianceFollowsEEControls;
-	private ArrayList fComplianceControls;
-	private ArrayList fComplianceChildControls;
+	private ArrayList<Control> fComplianceFollowsEEControls;
+	private ArrayList<Control> fComplianceControls;
+	private ArrayList<Control> fComplianceChildControls;
 	private PixelConverter fPixelConverter;
 
 	/**
@@ -177,9 +178,9 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 		setDefaultCompilerComplianceValues();
 
 		fBlockEnableState= null;
-		fComplianceFollowsEEControls= new ArrayList();
-		fComplianceControls= new ArrayList();
-		fComplianceChildControls= new ArrayList();
+		fComplianceFollowsEEControls= new ArrayList<Control>();
+		fComplianceControls= new ArrayList<Control>();
+		fComplianceChildControls= new ArrayList<Control>();
 
 		fComplianceStatus= new StatusInfo();
 
@@ -213,16 +214,17 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#settingsUpdated()
 	 */
+	@Override
 	protected void settingsUpdated() {
 		setValue(INTR_DEFAULT_COMPLIANCE, getCurrentCompliance());
 		updateComplianceFollowsEE();
 		super.settingsUpdated();
 	}
 
-
 	/*
 	 * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		fPixelConverter= new PixelConverter(parent);
 		setShell(parent.getShell());
@@ -302,6 +304,7 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 			String label= PreferencesMessages.ComplianceConfigurationBlock_compliance_follows_EE_label;
 			int widthHint= fPixelConverter.convertWidthInCharsToPixels(40);
 			addCheckBoxWithLink(group, label, INTR_COMPLIANCE_FOLLOWS_EE, defaultUserValues, 0, widthHint, new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					openBuildPathPropertyPage();
 				}
@@ -344,6 +347,12 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 			versionsLabels= removeLast(versionsLabels);
 		}
 
+		boolean showJsr14= ComplianceConfigurationBlock.VERSION_JSR14.equals(getValue(PREF_CODEGEN_TARGET_PLATFORM));
+		if (showJsr14) {
+			versions= append(versions, ComplianceConfigurationBlock.VERSION_JSR14);
+			versionsLabels= append(versionsLabels, ComplianceConfigurationBlock.VERSION_JSR14);
+		}
+
 		label= PreferencesMessages.ComplianceConfigurationBlock_codegen_targetplatform_label;
 		addComboBox(group, label, PREF_CODEGEN_TARGET_PLATFORM, versions, versionsLabels, indent);
 
@@ -432,6 +441,13 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 		return sc1;
 	}
 
+	private static String[] append(String[] versions, String version) {
+		String[] result= new String[versions.length + 1];
+		System.arraycopy(versions, 0, result, 0, versions.length);
+		result[versions.length]= version;
+		return result;
+	}
+
 	private static String[] removeLast(String[] versions) {
 		String[] reduced= new String[versions.length - 1];
 		System.arraycopy(versions, 0, reduced, 0, reduced.length);
@@ -440,7 +456,7 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 
 	protected final void openBuildPathPropertyPage() {
 		if (getPreferenceContainer() != null) {
-			Map data= new HashMap();
+			Map<Object, IClasspathEntry> data= new HashMap<Object, IClasspathEntry>();
 			data.put(BuildPathsPropertyPage.DATA_REVEAL_ENTRY, JavaRuntime.getDefaultJREContainerEntry());
 			getPreferenceContainer().openPage(BuildPathsPropertyPage.PROP_ID, data);
 		}
@@ -462,6 +478,7 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		if (!areSettingsEnabled()) {
 			return;
@@ -596,6 +613,13 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 					}
 				}
 			}
+			String complianceFollowsEE= getValue(INTR_COMPLIANCE_FOLLOWS_EE);
+			if (JavaModelUtil.HIDE_VERSION_1_7 && DEFAULT_CONF.equals(complianceFollowsEE)) {
+				if (getEE().getId().indexOf(JavaCore.VERSION_1_7) != -1) {
+					isVisible= true;
+					fJRE50InfoText.setText(PreferencesMessages.ComplianceConfigurationBlock_17_ee_warning);
+				}
+			}
 			fJRE50InfoText.setVisible(isVisible);
 			fJRE50InfoImage.setImage(isVisible ? JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING) : null);
 			fJRE50InfoImage.getParent().layout();
@@ -612,6 +636,10 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 		String compliance= getValue(PREF_COMPLIANCE);
 		String source= getValue(PREF_SOURCE_COMPATIBILITY);
 		String target= getValue(PREF_CODEGEN_TARGET_PLATFORM);
+		
+		if (ComplianceConfigurationBlock.VERSION_JSR14.equals(target)) {
+			target= source;
+		}
 
 		// compliance must not be smaller than source or target
 		if (JavaModelUtil.isVersionLessThan(compliance, source)) {
@@ -644,6 +672,7 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#useProjectSpecificSettings(boolean)
 	 */
+	@Override
 	public void useProjectSpecificSettings(boolean enable) {
 		super.useProjectSpecificSettings(enable);
 		validateComplianceStatus();
@@ -684,9 +713,9 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 		updateControlsEnableState(fComplianceChildControls, enableComplianceChildren);
 	}
 
-	private void updateControlsEnableState(List controls, boolean enable) {
+	private void updateControlsEnableState(List<Control> controls, boolean enable) {
 		for (int i= controls.size() - 1; i >= 0; i--) {
-			Control curr= (Control) controls.get(i);
+			Control curr= controls.get(i);
 			if (curr instanceof Composite) {
 				updateControlsEnableState(Arrays.asList(((Composite)curr).getChildren()), enable);
 			}
@@ -779,17 +808,17 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 			
 			if (isFollowEE) {
 				IExecutionEnvironment ee= getEE();
-				Map eeOptions= BuildPathSupport.getEEOptions(ee);
+				Map<String, String> eeOptions= BuildPathSupport.getEEOptions(ee);
 				if (eeOptions == null)
 					return;
 				
-				assertAsId= (String)eeOptions.get(PREF_PB_ASSERT_AS_IDENTIFIER.getName());
-				enumAsId= (String)eeOptions.get(PREF_PB_ENUM_AS_IDENTIFIER.getName());
-				source= (String)eeOptions.get(PREF_SOURCE_COMPATIBILITY.getName());
-				target= (String)eeOptions.get(PREF_CODEGEN_TARGET_PLATFORM.getName());
+				assertAsId= eeOptions.get(PREF_PB_ASSERT_AS_IDENTIFIER.getName());
+				enumAsId= eeOptions.get(PREF_PB_ENUM_AS_IDENTIFIER.getName());
+				source= eeOptions.get(PREF_SOURCE_COMPATIBILITY.getName());
+				target= eeOptions.get(PREF_CODEGEN_TARGET_PLATFORM.getName());
 				
-				setValue(PREF_COMPLIANCE, (String)eeOptions.get(PREF_COMPLIANCE.getName()));
-				String inlineJSR= (String)eeOptions.get(PREF_CODEGEN_INLINE_JSR_BYTECODE.getName());
+				setValue(PREF_COMPLIANCE, eeOptions.get(PREF_COMPLIANCE.getName()));
+				String inlineJSR= eeOptions.get(PREF_CODEGEN_INLINE_JSR_BYTECODE.getName());
 				if (inlineJSR != null) {
 					setValue(PREF_CODEGEN_INLINE_JSR_BYTECODE, inlineJSR);
 				}
@@ -912,14 +941,14 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	 *         settings differ, or {@link #DISABLED} if there's no EE at all
 	 */
 	private String getComplianceFollowsEE(IExecutionEnvironment ee) {
-		Map options= BuildPathSupport.getEEOptions(ee);
+		Map<String, String> options= BuildPathSupport.getEEOptions(ee);
 		if (options == null)
 			return DISABLED;
 		
 		return checkDefaults(PREFS_COMPLIANCE, options);
 	}
 
-	private String checkDefaults(Key[] keys, Map options) {
+	private String checkDefaults(Key[] keys, Map<String, String> options) {
 		for (int i= 0; i < keys.length; i++) {
 			Key key= keys[i];
 			Object option= options.get(key.getName());
@@ -929,6 +958,7 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 		return DEFAULT_CONF;
 	}
 	
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		String title= PreferencesMessages.ComplianceConfigurationBlock_needsbuild_title;
 		String message;
@@ -950,13 +980,13 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 		IVMInstall defaultVMInstall= JavaRuntime.getDefaultVMInstall();
 		if (defaultVMInstall instanceof IVMInstall2 && isOriginalDefaultCompliance()) {
 			String complianceLevel= JavaModelUtil.getCompilerCompliance((IVMInstall2)defaultVMInstall, JavaCore.VERSION_1_4);
-			Map complianceOptions= new HashMap();
+			Map<String, String> complianceOptions= new HashMap<String, String>();
 			JavaModelUtil.setComplianceOptions(complianceOptions, complianceLevel);
-			setDefaultValue(PREF_COMPLIANCE, (String)complianceOptions.get(PREF_COMPLIANCE.getName()));
-			setDefaultValue(PREF_PB_ASSERT_AS_IDENTIFIER, (String)complianceOptions.get(PREF_PB_ASSERT_AS_IDENTIFIER.getName()));
-			setDefaultValue(PREF_PB_ENUM_AS_IDENTIFIER, (String)complianceOptions.get(PREF_PB_ENUM_AS_IDENTIFIER.getName()));
-			setDefaultValue(PREF_SOURCE_COMPATIBILITY, (String)complianceOptions.get(PREF_SOURCE_COMPATIBILITY.getName()));
-			setDefaultValue(PREF_CODEGEN_TARGET_PLATFORM, (String)complianceOptions.get(PREF_CODEGEN_TARGET_PLATFORM.getName()));
+			setDefaultValue(PREF_COMPLIANCE, complianceOptions.get(PREF_COMPLIANCE.getName()));
+			setDefaultValue(PREF_PB_ASSERT_AS_IDENTIFIER, complianceOptions.get(PREF_PB_ASSERT_AS_IDENTIFIER.getName()));
+			setDefaultValue(PREF_PB_ENUM_AS_IDENTIFIER, complianceOptions.get(PREF_PB_ENUM_AS_IDENTIFIER.getName()));
+			setDefaultValue(PREF_SOURCE_COMPATIBILITY, complianceOptions.get(PREF_SOURCE_COMPATIBILITY.getName()));
+			setDefaultValue(PREF_CODEGEN_TARGET_PLATFORM, complianceOptions.get(PREF_CODEGEN_TARGET_PLATFORM.getName()));
 		}
 	}
 
@@ -967,8 +997,8 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	 * @since 3.6
 	 */
 	private static final boolean isOriginalDefaultCompliance() {
-		Hashtable options= JavaCore.getDefaultOptions();
-		Preferences bundleDefaults= new BundleDefaultsScope().getNode(JavaCore.PLUGIN_ID);
+		Hashtable<String, String> options= JavaCore.getDefaultOptions();
+		Preferences bundleDefaults= BundleDefaultsScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 
 		return equals(JavaCore.COMPILER_COMPLIANCE, bundleDefaults, options)
 				&& equals(JavaCore.COMPILER_SOURCE, bundleDefaults, options)
@@ -986,7 +1016,7 @@ public class ComplianceConfigurationBlock extends OptionsConfigurationBlock {
 	 * @return <code>true</code> if the options are the same in both maps
 	 * @since 3.6
 	 */
-	private static boolean equals(String key, Preferences preferences, Map map) {
+	private static boolean equals(String key, Preferences preferences, Map<String, String> map) {
 		String dummy= new String();
 		String defaultValue= preferences.get(key, dummy);
 		return defaultValue != null && defaultValue != dummy
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompliancePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompliancePreferencePage.java
index 45d21f1..86a3b8d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompliancePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CompliancePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new ComplianceConfigurationBlock(getNewStatusChangedListener(), getProject(), container);
@@ -60,10 +61,12 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 		}
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -71,6 +74,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -78,6 +82,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -85,6 +90,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -95,6 +101,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fConfigurationBlock != null) {
@@ -105,6 +112,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enablePreferenceContent(boolean)
 	 */
+	@Override
 	protected void enablePreferenceContent(boolean enable) {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.enablePreferenceContent(enable);
@@ -115,6 +123,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	 * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
 	 * @since 3.5
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible && fConfigurationBlock != null) {
@@ -125,6 +134,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -135,6 +145,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -145,6 +156,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
@@ -154,6 +166,7 @@ public class CompliancePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#setElement(org.eclipse.core.runtime.IAdaptable)
 	 */
+	@Override
 	public void setElement(IAdaptable element) {
 		super.setElement(element);
 		setDescription(null); // no description for property page
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java
index ac53c10..508c1d7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,11 +11,15 @@
 package org.eclipse.jdt.internal.ui.preferences;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import com.ibm.icu.text.Collator;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.events.DisposeEvent;
@@ -75,6 +79,7 @@ import org.eclipse.jface.text.templates.TemplateException;
 import org.eclipse.ui.ActiveShellExpression;
 import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerActivation;
 import org.eclipse.ui.handlers.IHandlerService;
 
 import org.eclipse.ui.texteditor.ITextEditorActionConstants;
@@ -143,6 +148,7 @@ public class EditTemplateDialog extends StatusDialog {
 		/**
 		 * @see Action#run()
 		 */
+		@Override
 		public void run() {
 			if (fOperationCode != -1 && fOperationTarget != null) {
 				fOperationTarget.doOperation(fOperationCode);
@@ -162,8 +168,8 @@ public class EditTemplateDialog extends StatusDialog {
 
 	private StatusInfo fValidationStatus;
 	private boolean fSuppressError= true; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=4354
-	private Map fGlobalActions= new HashMap(10);
-	private List fSelectionActions = new ArrayList(3);
+	private Map<String, TextViewerAction> fGlobalActions= new HashMap<String, TextViewerAction>(10);
+	private List<String> fSelectionActions = new ArrayList<String>(3);
 	private String[][] fContextTypes;
 
 	private ContextTypeRegistry fContextTypeRegistry;
@@ -192,15 +198,21 @@ public class EditTemplateDialog extends StatusDialog {
 
 		String delim= new Document().getLegalLineDelimiters()[0];
 
-		List contexts= new ArrayList();
-		for (Iterator it= registry.contextTypes(); it.hasNext();) {
-			TemplateContextType type= (TemplateContextType) it.next();
+		List<String[]> contexts= new ArrayList<String[]>();
+		for (Iterator<TemplateContextType> it= registry.contextTypes(); it.hasNext();) {
+			TemplateContextType type= it.next();
 			if (type.getId().equals("javadoc")) //$NON-NLS-1$
 				contexts.add(new String[] { type.getId(), type.getName(), "/**" + delim }); //$NON-NLS-1$
 			else
 				contexts.add(0, new String[] { type.getId(), type.getName(), "" }); //$NON-NLS-1$
 		}
-		fContextTypes= (String[][]) contexts.toArray(new String[contexts.size()][]);
+		Collections.sort(contexts, new Comparator<String[]>() {
+			Collator fCollator= Collator.getInstance();
+			public int compare(String[] o1, String[] o2) {
+				return fCollator.compare(o1[1], o2[1]);
+			}
+		});
+		fContextTypes= contexts.toArray(new String[contexts.size()][]);
 
 		fValidationStatus= new StatusInfo();
 
@@ -214,6 +226,7 @@ public class EditTemplateDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -221,6 +234,7 @@ public class EditTemplateDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.dialogs.StatusDialog#create()
 	 */
+	@Override
 	public void create() {
 		super.create();
 		updateStatusAndButtons();
@@ -230,6 +244,7 @@ public class EditTemplateDialog extends StatusDialog {
 	/*
 	 * @see Dialog#createDialogArea(Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite ancestor) {
 		Composite parent= new Composite(ancestor, SWT.NONE);
 		GridLayout layout= new GridLayout();
@@ -464,7 +479,7 @@ public class EditTemplateDialog extends StatusDialog {
 	}
 
 	private void initializeActions() {
-		final ArrayList handlerActivations= new ArrayList(3);
+		final ArrayList<IHandlerActivation> handlerActivations= new ArrayList<IHandlerActivation>(3);
 		final IHandlerService handlerService= (IHandlerService) PlatformUI.getWorkbench().getAdapter(IHandlerService.class);
 		final Expression expression= new ActiveShellExpression(fPatternEditor.getControl().getShell());
 
@@ -479,11 +494,11 @@ public class EditTemplateDialog extends StatusDialog {
 				handlerService.deactivateHandlers(handlerActivations);
 			}
 			public void focusGained(FocusEvent e) {
-				IAction action= (IAction)fGlobalActions.get(ITextEditorActionConstants.REDO);
+				IAction action= fGlobalActions.get(ITextEditorActionConstants.REDO);
 				handlerActivations.add(handlerService.activateHandler(IWorkbenchCommandConstants.EDIT_REDO, new ActionHandler(action), expression));
-				action= (IAction)fGlobalActions.get(ITextEditorActionConstants.UNDO);
+				action= fGlobalActions.get(ITextEditorActionConstants.UNDO);
 				handlerActivations.add(handlerService.activateHandler(IWorkbenchCommandConstants.EDIT_UNDO, new ActionHandler(action), expression));
-				action= (IAction)fGlobalActions.get(ITextEditorActionConstants.CONTENT_ASSIST);
+				action= fGlobalActions.get(ITextEditorActionConstants.CONTENT_ASSIST);
 				handlerActivations.add(handlerService.activateHandler(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, new ActionHandler(action), expression));
 			}
 		});
@@ -537,28 +552,28 @@ public class EditTemplateDialog extends StatusDialog {
 
 	private void fillContextMenu(IMenuManager menu) {
 		menu.add(new GroupMarker(ITextEditorActionConstants.GROUP_UNDO));
-		menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, (IAction) fGlobalActions.get(ITextEditorActionConstants.UNDO));
-		menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, (IAction) fGlobalActions.get(ITextEditorActionConstants.REDO));
+		menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, fGlobalActions.get(ITextEditorActionConstants.UNDO));
+		menu.appendToGroup(ITextEditorActionConstants.GROUP_UNDO, fGlobalActions.get(ITextEditorActionConstants.REDO));
 
 		menu.add(new Separator(ITextEditorActionConstants.GROUP_EDIT));
-		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.CUT));
-		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.COPY));
-		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.PASTE));
-		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, (IAction) fGlobalActions.get(ITextEditorActionConstants.SELECT_ALL));
+		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.CUT));
+		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.COPY));
+		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.PASTE));
+		menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, fGlobalActions.get(ITextEditorActionConstants.SELECT_ALL));
 
 		menu.add(new Separator(IContextMenuConstants.GROUP_GENERATE));
-		menu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, (IAction) fGlobalActions.get("ContentAssistProposal")); //$NON-NLS-1$
+		menu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fGlobalActions.get("ContentAssistProposal")); //$NON-NLS-1$
 	}
 
 
 	protected void updateSelectionDependentActions() {
-		Iterator iterator= fSelectionActions.iterator();
+		Iterator<String> iterator= fSelectionActions.iterator();
 		while (iterator.hasNext())
-			updateAction((String)iterator.next());
+			updateAction(iterator.next());
 	}
 
 	protected void updateAction(String actionId) {
-		IAction action= (IAction) fGlobalActions.get(actionId);
+		IAction action= fGlobalActions.get(actionId);
 		if (action instanceof IUpdate)
 			((IUpdate) action).update();
 	}
@@ -576,6 +591,7 @@ public class EditTemplateDialog extends StatusDialog {
 		return -1;
 	}
 
+	@Override
 	protected void okPressed() {
 		String name= fNameText == null ? fTemplate.getName() : fNameText.getText();
 		boolean isAutoInsertable= fAutoInsertCheckbox != null && fAutoInsertCheckbox.getSelection();
@@ -632,6 +648,7 @@ public class EditTemplateDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.EDIT_TEMPLATE_DIALOG);
@@ -661,6 +678,7 @@ public class EditTemplateDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
 	 * @since 3.2
 	 */
+	@Override
 	protected IDialogSettings getDialogBoundsSettings() {
 		String sectionName= getClass().getName() + "_dialogBounds"; //$NON-NLS-1$
 		IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilterTextControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilterTextControl.java
new file mode 100644
index 0000000..f0ca03e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilterTextControl.java
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.preferences;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.ACC;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleControlAdapter;
+import org.eclipse.swt.accessibility.AccessibleControlEvent;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * A simple filter text widget.
+ * 
+ * TODO: Remove this class once Bug 293230 is fixed
+ */
+public class FilterTextControl {
+
+	/**
+	 * Image descriptor for enabled clear button.
+	 */
+	private static ImageDescriptor fgClearIconDescriptor= AbstractUIPlugin
+			.imageDescriptorFromPlugin(PlatformUI.PLUGIN_ID, "$nl$/icons/full/etool16/clear_co.gif"); //$NON-NLS-1$
+
+	/**
+	 * Image descriptor for disabled clear button.
+	 */
+	private static ImageDescriptor fgDisabledClearIconDescriptor= AbstractUIPlugin.imageDescriptorFromPlugin(
+			PlatformUI.PLUGIN_ID, "$nl$/icons/full/dtool16/clear_co.gif"); //$NON-NLS-1$
+
+
+	private static Boolean fgUseNativeSearchField;
+
+	private static boolean useNativeSearchField(Composite composite) {
+		if (fgUseNativeSearchField == null) {
+			fgUseNativeSearchField= Boolean.FALSE;
+			Text testText= null;
+			try {
+				testText= new Text(composite, SWT.SEARCH | SWT.ICON_CANCEL);
+				fgUseNativeSearchField= new Boolean((testText.getStyle() & SWT.ICON_CANCEL) != 0);
+			} finally {
+				if (testText != null) {
+					testText.dispose();
+				}
+			}
+		}
+		return fgUseNativeSearchField.booleanValue();
+	}
+
+	/**
+	 * The text widget.
+	 */
+	private Text fTextControl;
+
+	/**
+	 * The control representing the clear button for the filter text entry.
+	 */
+	private Control fClearButton;
+
+	/**
+	 * The Composite on which the filter controls are created.
+	 */
+	private Composite fComposite;
+
+	public FilterTextControl(Composite parent) {
+		boolean nativeField= useNativeSearchField(parent);
+		fComposite= new Composite(parent, nativeField ? SWT.NONE : SWT.BORDER) {
+			@Override
+			public void setEnabled(boolean enabled) {
+				super.setEnabled(enabled);
+				
+				Color color= enabled ? getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND) : getParent().getBackground();
+				setBackground(color);
+				if (fClearButton != null)
+					fClearButton.setBackground(color);
+			}
+		};
+		if (!nativeField)
+			fComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		
+		GridLayout filterLayout= new GridLayout(2, false);
+		filterLayout.marginHeight= 0;
+		filterLayout.marginWidth= 0;
+		fComposite.setLayout(filterLayout);
+		fComposite.setFont(parent.getFont());
+
+		createControls(fComposite);
+		fComposite.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+	}
+
+	/**
+	 * Create the filter controls.
+	 * 
+	 * @param parent parent <code>Composite</code> of the filter controls
+	 */
+	private void createControls(Composite parent) {
+		createTextControl(parent);
+		createClearButton(parent);
+		updateClearButtonVisibility(false);
+	}
+
+	/**
+	 * Creates the text control.
+	 * 
+	 * @param parent <code>Composite</code> of the filter text
+	 */
+	private void createTextControl(Composite parent) {
+		if (useNativeSearchField(parent)) {
+			fTextControl= new Text(parent, SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL);
+		} else {
+			fTextControl= new Text(parent, SWT.SINGLE);
+		}
+
+		GridData gridData= new GridData(SWT.FILL, SWT.CENTER, true, false);
+		// if the text widget supported cancel then it will have it's own
+		// integrated button. We can take all of the space.
+		if ((fTextControl.getStyle() & SWT.ICON_CANCEL) != 0)
+			gridData.horizontalSpan= 2;
+		fTextControl.setLayoutData(gridData);
+
+		fTextControl.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				updateClearButtonVisibility(!(fTextControl.getText().length() == 0));
+			}
+		});
+	}
+
+	/**
+	 * Creates the button that clears the text.
+	 * 
+	 * @param parent parent <code>Composite</code> of button
+	 */
+	private void createClearButton(Composite parent) {
+		// only create the button if the text widget doesn't support one natively
+		if ((fTextControl.getStyle() & SWT.ICON_CANCEL) == 0) {
+			final Image inactiveImage= fgDisabledClearIconDescriptor.createImage();
+			final Image activeImage= fgClearIconDescriptor.createImage();
+			final Image pressedImage= new Image(parent.getDisplay(), activeImage, SWT.IMAGE_GRAY);
+
+			final Label clearButton= new Label(parent, SWT.NONE);
+			clearButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+			clearButton.setImage(inactiveImage);
+			clearButton.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+			clearButton.setToolTipText(PreferencesMessages.FilterTextControl_Clear);
+			clearButton.addMouseListener(new MouseAdapter() {
+				private MouseMoveListener fMoveListener;
+
+				@Override
+				public void mouseDown(MouseEvent e) {
+					clearButton.setImage(pressedImage);
+					fMoveListener= new MouseMoveListener() {
+						private boolean fMouseInButton= true;
+
+						public void mouseMove(MouseEvent e1) {
+							boolean mouseInButton= isMouseInButton(e1);
+							if (mouseInButton != fMouseInButton) {
+								fMouseInButton= mouseInButton;
+								clearButton.setImage(mouseInButton ? pressedImage : inactiveImage);
+							}
+						}
+					};
+					clearButton.addMouseMoveListener(fMoveListener);
+				}
+
+				@Override
+				public void mouseUp(MouseEvent e) {
+					if (fMoveListener != null) {
+						clearButton.removeMouseMoveListener(fMoveListener);
+						fMoveListener= null;
+						boolean mouseInButton= isMouseInButton(e);
+						clearButton.setImage(mouseInButton ? activeImage : inactiveImage);
+						if (mouseInButton) {
+							fTextControl.setText(""); //$NON-NLS-1$
+							fTextControl.setFocus();
+						}
+					}
+				}
+
+				private boolean isMouseInButton(MouseEvent e) {
+					Point buttonSize= clearButton.getSize();
+					return 0 <= e.x && e.x < buttonSize.x && 0 <= e.y && e.y < buttonSize.y;
+				}
+			});
+			clearButton.addMouseTrackListener(new MouseTrackListener() {
+				public void mouseEnter(MouseEvent e) {
+					clearButton.setImage(activeImage);
+				}
+
+				public void mouseExit(MouseEvent e) {
+					clearButton.setImage(inactiveImage);
+				}
+
+				public void mouseHover(MouseEvent e) {
+				}
+			});
+			clearButton.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					inactiveImage.dispose();
+					activeImage.dispose();
+					pressedImage.dispose();
+				}
+			});
+			clearButton.getAccessible().addAccessibleListener(
+					new AccessibleAdapter() {
+						@Override
+						public void getName(AccessibleEvent e) {
+							e.result= PreferencesMessages.FilterTextControl_ClearFilterField;
+						}
+					});
+			clearButton.getAccessible().addAccessibleControlListener(
+					new AccessibleControlAdapter() {
+						@Override
+						public void getRole(AccessibleControlEvent e) {
+							e.detail= ACC.ROLE_PUSHBUTTON;
+						}
+					});
+			this.fClearButton= clearButton;
+		}
+	}
+
+	/**
+	 * Get the text control for the receiver, if it was created. Otherwise return <code>null</code>.
+	 * 
+	 * @return the Text control, or null if it was not created
+	 */
+	public Text getFilterControl() {
+		return fTextControl;
+	}
+
+	/**
+	 * Convenience method to return the text of the filter control. If the text widget is not
+	 * created, then null is returned.
+	 * 
+	 * @return String in the text, or null if the text does not exist
+	 */
+	public String getFilterString() {
+		return fTextControl != null ? fTextControl.getText() : null;
+	}
+
+	private void updateClearButtonVisibility(boolean visible) {
+		if (fClearButton != null) {
+			fClearButton.setVisible(visible);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingConfigurationBlock.java
index c173998..e6f7e45 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@ import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.text.folding.IJavaFoldingPreferenceBlock;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
 import org.eclipse.jdt.internal.ui.text.folding.JavaFoldingStructureProviderDescriptor;
 import org.eclipse.jdt.internal.ui.text.folding.JavaFoldingStructureProviderRegistry;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
@@ -108,9 +109,9 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 	private StackLayout fStackLayout;
 
 	/* the model */
-	private final Map fProviderDescriptors;
-	private final Map fProviderPreferences;
-	private final Map fProviderControls;
+	private final Map<String, JavaFoldingStructureProviderDescriptor> fProviderDescriptors;
+	private final Map<String, IJavaFoldingPreferenceBlock> fProviderPreferences;
+	private final Map<String, Control> fProviderControls;
 
 
 	public FoldingConfigurationBlock(OverlayPreferenceStore store) {
@@ -118,15 +119,15 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 		fStore= store;
 		fStore.addKeys(createOverlayStoreKeys());
 		fProviderDescriptors= createListModel();
-		fProviderPreferences= new HashMap();
-		fProviderControls= new HashMap();
+		fProviderPreferences= new HashMap<String, IJavaFoldingPreferenceBlock>();
+		fProviderControls= new HashMap<String, Control>();
 	}
 
-	private Map createListModel() {
+	private Map<String, JavaFoldingStructureProviderDescriptor> createListModel() {
 		JavaFoldingStructureProviderRegistry reg= JavaPlugin.getDefault().getFoldingStructureProviderRegistry();
 		reg.reloadExtensions();
 		JavaFoldingStructureProviderDescriptor[] descs= reg.getFoldingProviderDescriptors();
-		Map map= new HashMap();
+		Map<String, JavaFoldingStructureProviderDescriptor> map= new HashMap<String, JavaFoldingStructureProviderDescriptor>();
 		for (int i= 0; i < descs.length; i++) {
 			map.put(descs[i].getId(), descs[i]);
 		}
@@ -135,7 +136,7 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 
 	private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
 
-		ArrayList overlayKeys= new ArrayList();
+		ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
 
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_ENABLED));
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PreferenceConstants.EDITOR_FOLDING_PROVIDER));
@@ -257,6 +258,7 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 			/*
 			 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 			 */
+			@Override
 			public Image getImage(Object element) {
 				return null;
 			}
@@ -264,6 +266,7 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 			/*
 			 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 			 */
+			@Override
 			public String getText(Object element) {
 				return ((JavaFoldingStructureProviderDescriptor) element).getName();
 			}
@@ -289,7 +292,7 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 
 	void updateListDependencies() {
 		String id= fStore.getString(PreferenceConstants.EDITOR_FOLDING_PROVIDER);
-		JavaFoldingStructureProviderDescriptor desc= (JavaFoldingStructureProviderDescriptor) fProviderDescriptors.get(id);
+		JavaFoldingStructureProviderDescriptor desc= fProviderDescriptors.get(id);
 		IJavaFoldingPreferenceBlock prefs;
 
 		if (desc == null) {
@@ -298,7 +301,7 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 			JavaPlugin.log(new Status(IStatus.WARNING, JavaPlugin.getPluginId(), IStatus.OK, message, null));
 			prefs= new ErrorPreferences(message);
 		} else {
-			prefs= (IJavaFoldingPreferenceBlock) fProviderPreferences.get(id);
+			prefs= fProviderPreferences.get(id);
 			if (prefs == null) {
 				try {
 					prefs= desc.createPreferences();
@@ -310,7 +313,7 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 			}
 		}
 
-		Control control= (Control) fProviderControls.get(id);
+		Control control= fProviderControls.get(id);
 		if (control == null) {
 			control= prefs.createControl(fGroup);
 			if (control == null) {
@@ -334,23 +337,23 @@ class FoldingConfigurationBlock implements IPreferenceConfigurationBlock {
 	}
 
 	public void performOk() {
-		for (Iterator it= fProviderPreferences.values().iterator(); it.hasNext();) {
-			IJavaFoldingPreferenceBlock prefs= (IJavaFoldingPreferenceBlock) it.next();
+		for (Iterator<IJavaFoldingPreferenceBlock> it= fProviderPreferences.values().iterator(); it.hasNext();) {
+			IJavaFoldingPreferenceBlock prefs= it.next();
 			prefs.performOk();
 		}
 	}
 
 	public void performDefaults() {
 		restoreFromPreferences();
-		for (Iterator it= fProviderPreferences.values().iterator(); it.hasNext();) {
-			IJavaFoldingPreferenceBlock prefs= (IJavaFoldingPreferenceBlock) it.next();
+		for (Iterator<IJavaFoldingPreferenceBlock> it= fProviderPreferences.values().iterator(); it.hasNext();) {
+			IJavaFoldingPreferenceBlock prefs= it.next();
 			prefs.performDefaults();
 		}
 	}
 
 	public void dispose() {
-		for (Iterator it= fProviderPreferences.values().iterator(); it.hasNext();) {
-			IJavaFoldingPreferenceBlock prefs= (IJavaFoldingPreferenceBlock) it.next();
+		for (Iterator<IJavaFoldingPreferenceBlock> it= fProviderPreferences.values().iterator(); it.hasNext();) {
+			IJavaFoldingPreferenceBlock prefs= it.next();
 			prefs.dispose();
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingPreferencePage.java
index 0f13aac..399eeeb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FoldingPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public final class FoldingPreferencePage extends AbstractConfigurationBlockPrefe
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#getHelpId()
 	 */
+	@Override
 	protected String getHelpId() {
 		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
 	}
@@ -33,6 +34,7 @@ public final class FoldingPreferencePage extends AbstractConfigurationBlockPrefe
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setDescription()
 	 */
+	@Override
 	protected void setDescription() {
 		String description= PreferencesMessages.JavaEditorPreferencePage_folding_title;
 		setDescription(description);
@@ -41,11 +43,13 @@ public final class FoldingPreferencePage extends AbstractConfigurationBlockPrefe
 	/*
 	 * @see org.org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
 	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 	}
 
 
+	@Override
 	protected Label createDescriptionLabel(Composite parent) {
 		return null; // no description for new look.
 	}
@@ -53,6 +57,7 @@ public final class FoldingPreferencePage extends AbstractConfigurationBlockPrefe
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.ui.internal.editors.text.OverlayPreferenceStore)
 	 */
+	@Override
 	protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
 		return new FoldingConfigurationBlock(overlayPreferenceStore);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeConfigurationBlock.java
index 35ca2a5..0d2b0d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -113,10 +113,12 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 			STATIC_CLASS_ICON= JavaElementImageProvider.getDecoratedImage(JavaPluginImages.DESC_MISC_PUBLIC, JavaElementImageDescriptor.STATIC, JavaElementImageProvider.SMALL_SIZE);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			return ((ImportOrderEntry) element).isStatic ? STATIC_CLASS_ICON : PCK_ICON;
 		}
 
+		@Override
 		public String getText(Object element) {
 			ImportOrderEntry entry= (ImportOrderEntry) element;
 			String name= entry.name;
@@ -130,18 +132,18 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 		}
 	}
 
-	private class ImportOrganizeAdapter implements IListAdapter, IDialogFieldListener {
+	private class ImportOrganizeAdapter implements IListAdapter<ImportOrderEntry>, IDialogFieldListener {
 
-		private boolean canEdit(ListDialogField field) {
-			List selected= field.getSelectedElements();
+		private boolean canEdit(ListDialogField<ImportOrderEntry> field) {
+			List<ImportOrderEntry> selected= field.getSelectedElements();
 			return selected.size() == 1;
 		}
 
-        public void customButtonPressed(ListDialogField field, int index) {
+        public void customButtonPressed(ListDialogField<ImportOrderEntry> field, int index) {
         	doButtonPressed(index);
         }
 
-        public void selectionChanged(ListDialogField field) {
+        public void selectionChanged(ListDialogField<ImportOrderEntry> field) {
 			fOrderListField.enableButton(IDX_EDIT, canEdit(field));
         }
 
@@ -149,7 +151,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
         	doDialogFieldChanged(field);
         }
 
-        public void doubleClicked(ListDialogField field) {
+        public void doubleClicked(ListDialogField<ImportOrderEntry> field) {
         	if (canEdit(field)) {
 				doButtonPressed(IDX_EDIT);
         	}
@@ -163,7 +165,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 	private static final int IDX_UP= 5;
 	private static final int IDX_DOWN= 6;
 
-	private ListDialogField fOrderListField;
+	private ListDialogField<ImportOrderEntry> fOrderListField;
 	private StringDialogField fThresholdField;
 	private StringDialogField fStaticThresholdField;
 	private SelectionButtonDialogField fIgnoreLowerCaseTypesField;
@@ -187,7 +189,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 
 		ImportOrganizeAdapter adapter= new ImportOrganizeAdapter();
 
-		fOrderListField= new ListDialogField(adapter, buttonLabels, new ImportOrganizeLabelProvider());
+		fOrderListField= new ListDialogField<ImportOrderEntry>(adapter, buttonLabels, new ImportOrganizeLabelProvider());
 		fOrderListField.setDialogFieldListener(adapter);
 		fOrderListField.setLabelText(PreferencesMessages.ImportOrganizeConfigurationBlock_order_label);
 		fOrderListField.setUpButtonIndex(IDX_UP);
@@ -219,6 +221,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 		updateControls();
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		setShell(parent.getShell());
 
@@ -277,10 +280,10 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 
 	private void doButtonPressed(int index) {
 		if (index == IDX_ADD || index == IDX_ADD_STATIC) { // add new
-			List existing= fOrderListField.getElements();
+			List<ImportOrderEntry> existing= fOrderListField.getElements();
 			ImportOrganizeInputDialog dialog= new ImportOrganizeInputDialog(getShell(), existing, index == IDX_ADD_STATIC);
 			if (dialog.open() == Window.OK) {
-				List selectedElements= fOrderListField.getSelectedElements();
+				List<ImportOrderEntry> selectedElements= fOrderListField.getSelectedElements();
 				if (selectedElements.size() == 1) {
 					int insertionIndex= fOrderListField.getIndexOfElement(selectedElements.get(0)) + 1;
 					fOrderListField.addElement(dialog.getResult(), insertionIndex);
@@ -289,13 +292,13 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 				}
 			}
 		} else if (index == IDX_EDIT) { // edit
-			List selected= fOrderListField.getSelectedElements();
+			List<ImportOrderEntry> selected= fOrderListField.getSelectedElements();
 			if (selected.isEmpty()) {
 				return;
 			}
-			ImportOrderEntry editedEntry= (ImportOrderEntry) selected.get(0);
+			ImportOrderEntry editedEntry= selected.get(0);
 
-			List existing= fOrderListField.getElements();
+			List<ImportOrderEntry> existing= fOrderListField.getElements();
 			existing.remove(editedEntry);
 
 			ImportOrganizeInputDialog dialog= new ImportOrganizeInputDialog(getShell(), existing, editedEntry.isStatic);
@@ -311,8 +314,8 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 	 * The import order file is a property file. The keys are
 	 * "0", "1" ... last entry. The values must be valid package names.
 	 */
-	private List loadFromProperties(Properties properties) {
-		ArrayList res= new ArrayList();
+	private List<ImportOrderEntry> loadFromProperties(Properties properties) {
+		ArrayList<ImportOrderEntry> res= new ArrayList<ImportOrderEntry>();
 		int nEntries= properties.size();
 		for (int i= 0 ; i < nEntries; i++) {
 			String curr= properties.getProperty(String.valueOf(i));
@@ -330,7 +333,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 		return res;
 	}
 
-	private List loadImportOrder() {
+	private List<ImportOrderEntry> loadImportOrder() {
 		IDialogSettings dialogSettings= JavaPlugin.getDefault().getDialogSettings();
 
 		FileDialog dialog= new FileDialog(getShell(), SWT.OPEN);
@@ -349,7 +352,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 			try {
 				fis= new FileInputStream(fileName);
 				properties.load(fis);
-				List res= loadFromProperties(properties);
+				List<ImportOrderEntry> res= loadFromProperties(properties);
 				if (res != null) {
 					return res;
 				}
@@ -367,7 +370,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 		return null;
 	}
 
-	private void saveImportOrder(List elements) {
+	private void saveImportOrder(List<ImportOrderEntry> elements) {
 		IDialogSettings dialogSettings= JavaPlugin.getDefault().getDialogSettings();
 
 		FileDialog dialog= new FileDialog(getShell(), SWT.SAVE);
@@ -384,7 +387,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 
 			Properties properties= new Properties();
 			for (int i= 0; i < elements.size(); i++) {
-				ImportOrderEntry entry= (ImportOrderEntry) elements.get(i);
+				ImportOrderEntry entry= elements.get(i);
 				properties.setProperty(String.valueOf(i), entry.serialize());
 			}
 			FileOutputStream fos= null;
@@ -411,6 +414,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(java.lang.String, java.lang.String)
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		// no validation
 	}
@@ -418,6 +422,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
 	 */
+	@Override
 	protected void updateControls() {
 		ImportOrderEntry[] importOrder= getImportOrderPreference();
 		int threshold= getImportNumberThreshold(PREF_ONDEMANDTHRESHOLD);
@@ -449,7 +454,7 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 		} else if (field == fIgnoreLowerCaseTypesField) {
 	  		setValue(PREF_IGNORELOWERCASE, fIgnoreLowerCaseTypesField.isSelected());
 		} else if (field == fImportButton) {
-			List order= loadImportOrder();
+			List<ImportOrderEntry> order= loadImportOrder();
 			if (order != null) {
 				fOrderListField.setElements(order);
 			}
@@ -462,12 +467,13 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
 	 */
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		return null; // no build required
 	}
 
 	private static ImportOrderEntry[] unpackOrderList(String str) {
-		ArrayList res= new ArrayList();
+		ArrayList<ImportOrderEntry> res= new ArrayList<ImportOrderEntry>();
 		int start= 0;
 		do {
 			int end= str.indexOf(';', start);
@@ -478,13 +484,13 @@ public class ImportOrganizeConfigurationBlock extends OptionsConfigurationBlock
 			start= end + 1;
 		} while (start < str.length());
 
-		return (ImportOrderEntry[]) res.toArray(new ImportOrderEntry[res.size()]);
+		return res.toArray(new ImportOrderEntry[res.size()]);
 	}
 
-	private static String packOrderList(List orderList) {
+	private static String packOrderList(List<ImportOrderEntry> orderList) {
 		StringBuffer buf= new StringBuffer();
 		for (int i= 0; i < orderList.size(); i++) {
-			ImportOrderEntry entry= (ImportOrderEntry) orderList.get(i);
+			ImportOrderEntry entry= orderList.get(i);
 			buf.append(entry.serialize());
 			buf.append(';');
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeInputDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeInputDialog.java
index 62c56b3..044109d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeInputDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizeInputDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,10 +77,10 @@ public class ImportOrganizeInputDialog extends StatusDialog {
 
 	private StringButtonDialogField fNameDialogField;
 	private SelectionButtonDialogField fBrowseTypeButton;
-	private List fExistingEntries;
+	private List<ImportOrderEntry> fExistingEntries;
 	private final boolean fIsStatic;
 
-	public ImportOrganizeInputDialog(Shell parent, List/*<ImportOrderEntry>*/ existingEntries, boolean isStatic) {
+	public ImportOrganizeInputDialog(Shell parent, List<ImportOrderEntry> existingEntries, boolean isStatic) {
 		super(parent);
 		fIsStatic= isStatic;
 		fExistingEntries= existingEntries;
@@ -112,6 +112,7 @@ public class ImportOrganizeInputDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -134,6 +135,7 @@ public class ImportOrganizeInputDialog extends StatusDialog {
 		}
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 		initializeDialogUnits(parent);
@@ -193,9 +195,6 @@ public class ImportOrganizeInputDialog extends StatusDialog {
 		}
 	}
 
-	/**
-	 * @param field
-	 */
 	final void doDialogFieldChanged(DialogField field) {
 		if (field == fBrowseTypeButton) {
 			doBrowseTypes();
@@ -231,7 +230,7 @@ public class ImportOrganizeInputDialog extends StatusDialog {
 
 	private boolean doesExist(String name, boolean isStatic) {
 		for (int i= 0; i < fExistingEntries.size(); i++) {
-			ImportOrderEntry entry= (ImportOrderEntry) fExistingEntries.get(i);
+			ImportOrderEntry entry= fExistingEntries.get(i);
 			if (name.equals(entry.name) && isStatic == entry.isStatic) {
 				return true;
 			}
@@ -243,6 +242,7 @@ public class ImportOrganizeInputDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.IMPORT_ORGANIZE_INPUT_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizePreferencePage.java
index 13f1659..a207403 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ImportOrganizePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new ImportOrganizeConfigurationBlock(getNewStatusChangedListener(), getProject(), container);
@@ -53,10 +54,12 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJavaHelpContextIds.ORGANIZE_IMPORTS_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -64,6 +67,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -71,6 +75,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -78,6 +83,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -88,6 +94,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fConfigurationBlock != null) {
@@ -98,6 +105,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -108,6 +116,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -118,6 +127,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
@@ -127,6 +137,7 @@ public class ImportOrganizePreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#setElement(org.eclipse.core.runtime.IAdaptable)
 	 */
+	@Override
 	public void setElement(IAdaptable element) {
 		super.setElement(element);
 		setDescription(null); // no description for property page
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java
index 80b330a..a800b52 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBasePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,18 +58,18 @@ public class JavaBasePreferencePage extends PreferencePage implements IWorkbench
 	private static final String DOUBLE_CLICK_GOES_INTO= PreferenceConstants.DOUBLE_CLICK_GOES_INTO;
 	private static final String DOUBLE_CLICK_EXPANDS= PreferenceConstants.DOUBLE_CLICK_EXPANDS;
 
-	private ArrayList fCheckBoxes;
-	private ArrayList fRadioButtons;
-	private ArrayList fTextControls;
+	private ArrayList<Button> fCheckBoxes;
+	private ArrayList<Button> fRadioButtons;
+	private ArrayList<Text> fTextControls;
 
 	public JavaBasePreferencePage() {
 		super();
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 		setDescription(PreferencesMessages.JavaBasePreferencePage_description);
 
-		fRadioButtons= new ArrayList();
-		fCheckBoxes= new ArrayList();
-		fTextControls= new ArrayList();
+		fRadioButtons= new ArrayList<Button>();
+		fCheckBoxes= new ArrayList<Button>();
+		fTextControls= new ArrayList<Text>();
 	}
 
 	/*
@@ -81,6 +81,7 @@ public class JavaBasePreferencePage extends PreferencePage implements IWorkbench
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.JAVA_BASE_PREFERENCE_PAGE);
@@ -114,6 +115,7 @@ public class JavaBasePreferencePage extends PreferencePage implements IWorkbench
 		return button;
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -211,20 +213,21 @@ public class JavaBasePreferencePage extends PreferencePage implements IWorkbench
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		IPreferenceStore store= getPreferenceStore();
 		for (int i= 0; i < fCheckBoxes.size(); i++) {
-			Button button= (Button) fCheckBoxes.get(i);
+			Button button= fCheckBoxes.get(i);
 			String key= (String) button.getData();
 			button.setSelection(store.getDefaultBoolean(key));
 		}
 		for (int i= 0; i < fRadioButtons.size(); i++) {
-			Button button= (Button) fRadioButtons.get(i);
+			Button button= fRadioButtons.get(i);
 			String[] info= (String[]) button.getData();
 			button.setSelection(info[1].equals(store.getDefaultString(info[0])));
 		}
 		for (int i= 0; i < fTextControls.size(); i++) {
-			Text text= (Text) fTextControls.get(i);
+			Text text= fTextControls.get(i);
 			String key= (String) text.getData();
 			text.setText(store.getDefaultString(key));
 		}
@@ -234,27 +237,28 @@ public class JavaBasePreferencePage extends PreferencePage implements IWorkbench
 	/*
 	 * @see IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		IPreferenceStore store= getPreferenceStore();
 		for (int i= 0; i < fCheckBoxes.size(); i++) {
-			Button button= (Button) fCheckBoxes.get(i);
+			Button button= fCheckBoxes.get(i);
 			String key= (String) button.getData();
 			store.setValue(key, button.getSelection());
 		}
 		for (int i= 0; i < fRadioButtons.size(); i++) {
-			Button button= (Button) fRadioButtons.get(i);
+			Button button= fRadioButtons.get(i);
 			if (button.getSelection()) {
 				String[] info= (String[]) button.getData();
 				store.setValue(info[0], info[1]);
 			}
 		}
 		for (int i= 0; i < fTextControls.size(); i++) {
-			Text text= (Text) fTextControls.get(i);
+			Text text= fTextControls.get(i);
 			String key= (String) text.getData();
 			store.setValue(key, text.getText());
 		}
 
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 		return super.performOk();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java
index 204fe81..b2c7eb7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,6 +99,7 @@ public class JavaBuildConfigurationBlock extends OptionsConfigurationBlock {
 	/*
 	 * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		fPixelConverter= new PixelConverter(parent);
 		setShell(parent.getShell());
@@ -234,6 +235,7 @@ public class JavaBuildConfigurationBlock extends OptionsConfigurationBlock {
 	 * Update fields and validate.
 	 * @param changedKey Key that changed, or null, if all changed.
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		if (!areSettingsEnabled()) {
 			return;
@@ -259,6 +261,7 @@ public class JavaBuildConfigurationBlock extends OptionsConfigurationBlock {
 	private void updateEnableStates() {
 	}
 
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		String title= PreferencesMessages.JavaBuildConfigurationBlock_needsbuild_title;
 		String message;
@@ -314,6 +317,7 @@ public class JavaBuildConfigurationBlock extends OptionsConfigurationBlock {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#dispose()
 	 */
+	@Override
 	public void dispose() {
 		IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings().addNewSection(SETTINGS_SECTION_NAME);
 		storeSectionExpansionStates(settings);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildPreferencePage.java
index 65b0156..a576cbf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new JavaBuildConfigurationBlock(getNewStatusChangedListener(), getProject(), container);
@@ -56,10 +57,12 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 		}
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -67,6 +70,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -74,6 +78,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -81,6 +86,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -91,6 +97,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fConfigurationBlock != null) {
@@ -101,6 +108,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -111,6 +119,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -121,6 +130,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
@@ -130,6 +140,7 @@ public class JavaBuildPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#setElement(org.eclipse.core.runtime.IAdaptable)
 	 */
+	@Override
 	public void setElement(IAdaptable element) {
 		super.setElement(element);
 		setDescription(null); // no description for property page
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaCategoryPropertyPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaCategoryPropertyPage.java
deleted file mode 100644
index f692fa6..0000000
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaCategoryPropertyPage.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.ui.preferences;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-import org.eclipse.core.runtime.IAdaptable;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.preference.IPreferencePageContainer;
-import org.eclipse.jface.preference.PreferenceDialog;
-
-import org.eclipse.ui.dialogs.PropertyPage;
-import org.eclipse.ui.forms.events.HyperlinkAdapter;
-import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.widgets.FormText;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.TableWrapData;
-import org.eclipse.ui.forms.widgets.TableWrapLayout;
-
-import org.eclipse.jdt.internal.corext.util.Messages;
-
-/**
- * Top level node for Java property pages
- */
-public class JavaCategoryPropertyPage extends PropertyPage {
-
-	private IProject fProject;
-
-	private final static String HREF_BUILDPATH= BuildPathsPropertyPage.PROP_ID;
-	private final static String HREF_COMPILER= CompliancePreferencePage.PROP_ID;
-	private final static String HREF_CODESTYLE= CodeStylePreferencePage.PROP_ID;
-	private final static String HREF_JLOC= JavadocConfigurationPropertyPage.PROP_ID;
-	private final static String HREF_TODO= TodoTaskPreferencePage.PROP_ID;
-	private final static String HREF_PSEVERITIES= ProblemSeveritiesPreferencePage.PROP_ID;
-	private final static String HREF_JAVADOC= JavadocProblemsPreferencePage.PROP_ID;
-	private final static String HREF_FORMATTER= CodeFormatterPreferencePage.PROP_ID;
-	private final static String HREF_TEMPLATES= ""; // Code //$NON-NLS-1$
-	private final static String HREF_IMPORTORDER= ImportOrganizePreferencePage.PROP_ID;
-	private final static String HREF_BUILDING= JavaBuildPreferencePage.PROP_ID;
-
-	/*
-	 * @see PreferencePage#createControl(Composite)
-	 */
-	protected Control createContents(Composite parent) {
-		Composite composite= new Composite(parent, SWT.NONE);
-		composite.setLayout(new TableWrapLayout());
-
-        FormToolkit toolkit= new FormToolkit(parent.getDisplay());
-        try {
-	        String[] args= {
-	        		fProject.getName(), HREF_BUILDPATH, HREF_COMPILER, HREF_TODO, HREF_PSEVERITIES, HREF_JAVADOC, HREF_BUILDING,
-					HREF_CODESTYLE, HREF_FORMATTER, HREF_TEMPLATES, HREF_IMPORTORDER, HREF_JLOC
-	        };
-	        String msg= Messages.format(PreferencesMessages.JavaCategoryPropertyPage_text, args);
-
-	        FormText formText = toolkit.createFormText(composite, true);
-	        try {
-	            formText.setText(msg, true, false);
-	        } catch (SWTException e) {
-	            formText.setText(e.getMessage(), false, false);
-	        }
-
-	        formText.setBackground(null);
-	        formText.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
-	        formText.addHyperlinkListener(new HyperlinkAdapter() {
-				public void linkActivated(HyperlinkEvent e) {
-					doLinkActivated(e.data.toString());
-				}
-	        });
-        } finally {
-            toolkit.dispose();
-        }
-
-		Dialog.applyDialogFont(composite);
-		return composite;
-	}
-
-	protected void doLinkActivated(String string) {
-		if (string.length() > 0) {
-			IPreferencePageContainer container= getContainer();
-			if (container instanceof PreferenceDialog) {
-				//see bug 80689: ((PreferenceDialog) container).setCurrentPageId(string);
-			}
-		}
-	}
-
-
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IWorkbenchPropertyPage#getElement()
-	 */
-	public IAdaptable getElement() {
-		return fProject;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.IWorkbenchPropertyPage#setElement(org.eclipse.core.runtime.IAdaptable)
-	 */
-	public void setElement(IAdaptable element) {
-		fProject= (IProject) element.getAdapter(IResource.class);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java
index 3aa03f3..f3f59dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorAppearanceConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ import org.eclipse.ui.dialogs.PreferencesUtil;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
 
+import org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
 import org.eclipse.jdt.internal.ui.text.java.hover.SourceViewerInformationControl;
 
 
@@ -76,7 +77,7 @@ class JavaEditorAppearanceConfigurationBlock extends AbstractConfigurationBlock
 
 	private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
 
-		ArrayList overlayKeys= new ArrayList();
+		ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
 
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PreferenceConstants.EDITOR_MATCHING_BRACKETS_COLOR));
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MATCHING_BRACKETS));
@@ -132,14 +133,14 @@ class JavaEditorAppearanceConfigurationBlock extends AbstractConfigurationBlock
 		Link link= new Link(contents, SWT.NONE);
 		link.setText(text);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
-				PreferencesUtil.createPreferenceDialogOn(shell, "org.eclipse.ui.preferencePages.GeneralTextEditor", null, null); //$NON-NLS-1$
+				if ("org.eclipse.ui.preferencePages.GeneralTextEditor".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(shell, e.text, null, null);
+				else if ("org.eclipse.ui.preferencePages.ColorsAndFonts".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(shell, e.text, null, "selectFont:org.eclipse.jdt.ui.editors.textfont"); //$NON-NLS-1$
 			}
 		});
-		// TODO replace by link-specific tooltips when
-		// bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=88866 gets fixed
-		link.setToolTipText(PreferencesMessages.JavaEditorPreferencePage_link_tooltip);
-
 
 		GridData gridData= new GridData(SWT.FILL, SWT.BEGINNING, true, false);
 		gridData.widthHint= 150; // only expand further if anyone else requires it
@@ -342,6 +343,7 @@ class JavaEditorAppearanceConfigurationBlock extends AbstractConfigurationBlock
 		gd.horizontalIndent= indent;
 		link.setLayoutData(gd);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				PreferencesUtil.createPreferenceDialogOn(link.getShell(), e.text, null, null);
 			}
@@ -374,6 +376,7 @@ class JavaEditorAppearanceConfigurationBlock extends AbstractConfigurationBlock
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.IPreferenceConfigurationBlock#initialize()
 	 */
+	@Override
 	public void initialize() {
 		super.initialize();
 		initializeDefaultColors();
@@ -410,6 +413,7 @@ class JavaEditorAppearanceConfigurationBlock extends AbstractConfigurationBlock
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.IPreferenceConfigurationBlock#performDefaults()
 	 */
+	@Override
 	public void performDefaults() {
 		super.performDefaults();
 		initializeDefaultColors();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringConfigurationBlock.java
index 8db9f77..32e945a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Andre Soereng <andreis at fast.no> - [syntax highlighting] highlight numbers - https://bugs.eclipse.org/bugs/show_bug.cgi?id=63573
+ *     Björn Michael <b.michael at gmx.de> - [syntax highlighting] Syntax coloring for abstract classes - https://bugs.eclipse.org/331311
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.preferences;
 
@@ -80,6 +81,7 @@ import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlighting;
 import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightingManager;
 import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightingManager.HighlightedRange;
 import org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightings;
+import org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
 import org.eclipse.jdt.internal.ui.text.JavaColorManager;
 import org.eclipse.jdt.internal.ui.text.PreferencesAdapter;
 import org.eclipse.jdt.internal.ui.text.SimpleJavaSourceViewerConfiguration;
@@ -216,6 +218,7 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 		/*
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			if (element instanceof String)
 				return (String) element;
@@ -342,7 +345,7 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 	 * Highlighting color list
 	 * @since  3.0
 	 */
-	private final java.util.List fListModel= new ArrayList();
+	private final java.util.List<HighlightingColorListItem> fListModel= new ArrayList<HighlightingColorListItem>();
 	/**
 	 * Highlighting color tree viewer
 	 * @since  3.0
@@ -395,10 +398,10 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 
 	private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
 
-		ArrayList overlayKeys= new ArrayList();
+		ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
 
 		for (int i= 0, n= fListModel.size(); i < n; i++) {
-			HighlightingColorListItem item= (HighlightingColorListItem) fListModel.get(i);
+			HighlightingColorListItem item= fListModel.get(i);
 			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, item.getColorKey()));
 			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, item.getBoldKey()));
 			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, item.getItalicKey()));
@@ -474,6 +477,7 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
         return Dialog.convertHeightInCharsToPixels(fFontMetrics, chars);
     }
 
+	@Override
 	public void initialize() {
 		super.initialize();
 
@@ -481,6 +485,7 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 		fTreeViewer.setSelection(new StructuredSelection(fJavaCategory));
 	}
 
+	@Override
 	public void performDefaults() {
 		super.performDefaults();
 
@@ -495,6 +500,7 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.IPreferenceConfigurationBlock#dispose()
 	 */
+	@Override
 	public void dispose() {
 		uninstallSemanticHighlighting();
 		fColorManager.dispose();
@@ -553,13 +559,14 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 		Link link= new Link(colorComposite, SWT.NONE);
 		link.setText(PreferencesMessages.JavaEditorColoringConfigurationBlock_link);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
-				PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, null);
+				if ("org.eclipse.ui.preferencePages.GeneralTextEditor".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, null);
+				else if ("org.eclipse.ui.preferencePages.ColorsAndFonts".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, "selectFont:org.eclipse.jdt.ui.editors.textfont"); //$NON-NLS-1$
 			}
 		});
-		// TODO replace by link-specific tooltips when
-		// bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=88866 gets fixed
-//		link.setToolTipText(PreferencesMessages.JavaEditorColoringConfigurationBlock_link_tooltip);
 
 		GridData gridData= new GridData(SWT.FILL, SWT.BEGINNING, true, false);
 		gridData.widthHint= 150; // only expand further if anyone else requires it
@@ -586,6 +593,7 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 		fTreeViewer.setLabelProvider(new ColorListLabelProvider());
 		fTreeViewer.setContentProvider(new ColorListContentProvider());
 		fTreeViewer.setComparator(new ViewerComparator() {
+			@Override
 			public int category(Object element) {
 				// don't sort the top level categories
 				if (fJavaCategory.equals(element))
@@ -603,8 +611,8 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 		gd= new GridData(SWT.BEGINNING, SWT.BEGINNING, false, true);
 		gd.heightHint= convertHeightInCharsToPixels(9);
 		int maxWidth= 0;
-		for (Iterator it= fListModel.iterator(); it.hasNext();) {
-			HighlightingColorListItem item= (HighlightingColorListItem) it.next();
+		for (Iterator<HighlightingColorListItem> it= fListModel.iterator(); it.hasNext();) {
+			HighlightingColorListItem item= it.next();
 			maxWidth= Math.max(maxWidth, convertWidthInCharsToPixels(item.getDisplayName().length()));
 		}
 		ScrollBar vBar= ((Scrollable) fTreeViewer.getControl()).getVerticalBar();
@@ -889,28 +897,31 @@ class JavaEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
 		return new SemanticHighlightingManager.HighlightedRange[][] {
 			{ createHighlightedRange( 6, 13,  9, SemanticHighlightings.DEPRECATED_MEMBER), createHighlightedRange( 6, 13,  9, SemanticHighlightings.CLASS),  },
 			{ createHighlightedRange( 6, 23,  1, SemanticHighlightings.TYPE_VARIABLE), createHighlightedRange( 6, 23,  1, SemanticHighlightings.TYPE_ARGUMENT), },
-			{ createHighlightedRange( 6, 37,  13, SemanticHighlightings.INTERFACE) },
+			{ createHighlightedRange( 6, 37, 13, SemanticHighlightings.INTERFACE) },
 			{ createHighlightedRange( 6, 51,  6, SemanticHighlightings.TYPE_ARGUMENT), createHighlightedRange( 6, 51,  6, SemanticHighlightings.CLASS) },
 			{ createHighlightedRange( 7,  6,  5, SemanticHighlightings.ENUM), },
-			{ createHighlightedRange( 7, 14, 3, SemanticHighlightings.STATIC_FINAL_FIELD), createHighlightedRange(7, 14, 3, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(7, 14, 3, SemanticHighlightings.FIELD) },
-			{ createHighlightedRange( 7, 19, 5, SemanticHighlightings.STATIC_FINAL_FIELD), createHighlightedRange(7, 19, 5, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(7, 19, 5, SemanticHighlightings.FIELD) },
-			{ createHighlightedRange( 7, 26, 4, SemanticHighlightings.STATIC_FINAL_FIELD), createHighlightedRange(7, 26, 4, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(7, 26, 4, SemanticHighlightings.FIELD) },
-			{ createHighlightedRange( 9, 8, 6, SemanticHighlightings.CLASS), },
-			{ createHighlightedRange( 9, 15, 11, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(9, 15, 11, SemanticHighlightings.FIELD) },
+			{ createHighlightedRange( 7, 14,  3, SemanticHighlightings.STATIC_FINAL_FIELD), createHighlightedRange( 7, 14,  3, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(7, 14, 3, SemanticHighlightings.FIELD) },
+			{ createHighlightedRange( 7, 19,  5, SemanticHighlightings.STATIC_FINAL_FIELD), createHighlightedRange( 7, 19,  5, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(7, 19, 5, SemanticHighlightings.FIELD) },
+			{ createHighlightedRange( 7, 26,  4, SemanticHighlightings.STATIC_FINAL_FIELD), createHighlightedRange( 7, 26,  4, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(7, 26, 4, SemanticHighlightings.FIELD) },
+			{ createHighlightedRange( 9,  8,  6, SemanticHighlightings.CLASS), },
+			{ createHighlightedRange( 9, 15, 11, SemanticHighlightings.STATIC_FIELD), createHighlightedRange( 9, 15, 11, SemanticHighlightings.FIELD) },
 			{ createHighlightedRange(11,  9,  1, SemanticHighlightings.TYPE_VARIABLE) },
 			{ createHighlightedRange(11, 11,  5, SemanticHighlightings.FIELD) },
-			{ createHighlightedRange(13, 2,  16, SemanticHighlightings.ANNOTATION) },
-			{ createHighlightedRange(13, 19,  5, SemanticHighlightings.ANNOTATION_ELEMENT_REFERENCE) },
-			{ createHighlightedRange(14, 12,  3, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(14, 12,  3, SemanticHighlightings.METHOD) },
-			{ createHighlightedRange(14, 24,  9, SemanticHighlightings.PARAMETER_VARIABLE) },
-			{ createHighlightedRange(15,  2, 14, SemanticHighlightings.ABSTRACT_METHOD_INVOCATION), createHighlightedRange(15,  2, 14, SemanticHighlightings.METHOD) },
-			{ createHighlightedRange(16,  6,  5, SemanticHighlightings.LOCAL_VARIABLE_DECLARATION) },
-			{ createHighlightedRange(16, 13, 2, SemanticHighlightings.NUMBER) },
-			{ createHighlightedRange(16, 16,  8, SemanticHighlightings.INHERITED_METHOD_INVOCATION), createHighlightedRange(16, 16,  8, SemanticHighlightings.METHOD) },
-			{ createHighlightedRange(17,  2, 12, SemanticHighlightings.STATIC_METHOD_INVOCATION), createHighlightedRange(17,  2, 12, SemanticHighlightings.METHOD) },
-			{ createHighlightedRange(18, 9,  3, SemanticHighlightings.METHOD) },
-			{ createHighlightedRange(18, 13,  5, SemanticHighlightings.LOCAL_VARIABLE) },
-			{ createHighlightedRange(18, 22,  9, SemanticHighlightings.AUTOBOXING) },
+			{ createHighlightedRange(12,  9, 17, SemanticHighlightings.ABSTRACT_CLASS), createHighlightedRange(12,  9, 17, SemanticHighlightings.CLASS) },
+			{ createHighlightedRange(12, 27,  6, SemanticHighlightings.FIELD) },
+			{ createHighlightedRange(14,  2, 16, SemanticHighlightings.ANNOTATION) },
+			{ createHighlightedRange(14, 19,  5, SemanticHighlightings.ANNOTATION_ELEMENT_REFERENCE) },
+			{ createHighlightedRange(15, 12,  3, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(15, 12,  3, SemanticHighlightings.METHOD) },
+			{ createHighlightedRange(15, 16,  7, SemanticHighlightings.CLASS) },
+			{ createHighlightedRange(15, 24,  9, SemanticHighlightings.PARAMETER_VARIABLE) },
+			{ createHighlightedRange(16,  2, 14, SemanticHighlightings.ABSTRACT_METHOD_INVOCATION), createHighlightedRange(16,  2, 14, SemanticHighlightings.METHOD) },
+			{ createHighlightedRange(17,  6,  5, SemanticHighlightings.LOCAL_VARIABLE_DECLARATION) },
+			{ createHighlightedRange(17, 13,  2, SemanticHighlightings.NUMBER) },
+			{ createHighlightedRange(17, 16,  8, SemanticHighlightings.INHERITED_METHOD_INVOCATION), createHighlightedRange(17, 16,  8, SemanticHighlightings.METHOD) },
+			{ createHighlightedRange(18,  2, 12, SemanticHighlightings.STATIC_METHOD_INVOCATION), createHighlightedRange(18,  2, 12, SemanticHighlightings.METHOD) },
+			{ createHighlightedRange(19,  9,  3, SemanticHighlightings.METHOD) },
+			{ createHighlightedRange(19, 13,  5, SemanticHighlightings.LOCAL_VARIABLE) },
+			{ createHighlightedRange(19, 22,  9, SemanticHighlightings.AUTOBOXING) },
 		};
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringPreferencePage.java
index 05b8daa..79b71b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorColoringPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ public class JavaEditorColoringPreferencePage extends AbstractConfigurationBlock
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#getHelpId()
 	 */
+	@Override
 	protected String getHelpId() {
 		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
 	}
@@ -39,12 +40,14 @@ public class JavaEditorColoringPreferencePage extends AbstractConfigurationBlock
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setDescription()
 	 */
+	@Override
 	protected void setDescription() {
 		String description= PreferencesMessages.JavaEditorPreferencePage_colors;
 		setDescription(description);
 	}
 
 
+	@Override
 	protected Label createDescriptionLabel(Composite parent) {
 		return null;
 	}
@@ -52,6 +55,7 @@ public class JavaEditorColoringPreferencePage extends AbstractConfigurationBlock
 	/*
 	 * @see org.org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
 	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 	}
@@ -59,6 +63,7 @@ public class JavaEditorColoringPreferencePage extends AbstractConfigurationBlock
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.ui.internal.editors.text.OverlayPreferenceStore)
 	 */
+	@Override
 	protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
 		return new JavaEditorColoringConfigurationBlock(overlayPreferenceStore);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverConfigurationBlock.java
index 637b161..b6cd40d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,6 +62,7 @@ import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
+import org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
 import org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverDescriptor;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
 import org.eclipse.jdt.internal.ui.util.TableLayoutComposite;
@@ -160,15 +161,15 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 
 	private StatusInfo fStatus;
 
-	private Map fCheckBoxes= new HashMap();
+	private Map<Button, String> fCheckBoxes= new HashMap<Button, String>();
 	private SelectionListener fCheckBoxListener= new SelectionListener() {
 		public void widgetDefaultSelected(SelectionEvent e) {
 			Button button= (Button) e.widget;
-			fStore.setValue((String) fCheckBoxes.get(button), button.getSelection());
+			fStore.setValue(fCheckBoxes.get(button), button.getSelection());
 		}
 		public void widgetSelected(SelectionEvent e) {
 			Button button= (Button) e.widget;
-			fStore.setValue((String) fCheckBoxes.get(button), button.getSelection());
+			fStore.setValue(fCheckBoxes.get(button), button.getSelection());
 		}
 	};
 
@@ -184,7 +185,7 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 
 	private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
 
-		ArrayList overlayKeys= new ArrayList();
+		ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
 
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER));
 
@@ -389,10 +390,10 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 	void initializeFields() {
 		fModifierEditor.setEnabled(false);
 
-		Iterator e= fCheckBoxes.keySet().iterator();
+		Iterator<Button> e= fCheckBoxes.keySet().iterator();
 		while (e.hasNext()) {
-			Button b= (Button) e.next();
-			String key= (String) fCheckBoxes.get(b);
+			Button b= e.next();
+			String key= fCheckBoxes.get(b);
 			b.setSelection(fStore.getBoolean(key));
 		}
 
@@ -436,7 +437,7 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 		String compiledTextHoverModifiers= fStore.getString(PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIERS);
 
 		StringTokenizer tokenizer= new StringTokenizer(compiledTextHoverModifiers, JavaEditorTextHoverDescriptor.VALUE_SEPARATOR);
-		HashMap idToModifier= new HashMap(tokenizer.countTokens() / 2);
+		HashMap<String, String> idToModifier= new HashMap<String, String>(tokenizer.countTokens() / 2);
 
 		while (tokenizer.hasMoreTokens()) {
 			String id= tokenizer.nextToken();
@@ -447,7 +448,7 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 		String compiledTextHoverModifierMasks= JavaPlugin.getDefault().getPreferenceStore().getString(PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIER_MASKS);
 
 		tokenizer= new StringTokenizer(compiledTextHoverModifierMasks, JavaEditorTextHoverDescriptor.VALUE_SEPARATOR);
-		HashMap idToModifierMask= new HashMap(tokenizer.countTokens() / 2);
+		HashMap<String, String> idToModifierMask= new HashMap<String, String>(tokenizer.countTokens() / 2);
 
 		while (tokenizer.hasMoreTokens()) {
 			String id= tokenizer.nextToken();
@@ -456,7 +457,7 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 		}
 
 		for (int i= 0; i < fHoverConfigs.length; i++) {
-			String modifierString= (String)idToModifier.get(getContributedHovers()[i].getId());
+			String modifierString= idToModifier.get(getContributedHovers()[i].getId());
 			boolean enabled= true;
 			if (modifierString == null)
 				modifierString= JavaEditorTextHoverDescriptor.DISABLED_TAG;
@@ -475,7 +476,7 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 
 			if (fHoverConfigs[i].fStateMask == -1) {
 				try {
-					fHoverConfigs[i].fStateMask= Integer.parseInt((String)idToModifierMask.get(getContributedHovers()[i].getId()));
+					fHoverConfigs[i].fStateMask= Integer.parseInt(idToModifierMask.get(getContributedHovers()[i].getId()));
 				} catch (NumberFormatException ex) {
 					fHoverConfigs[i].fStateMask= -1;
 				}
@@ -529,7 +530,7 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 			fStatus= new StatusInfo();
 
 		int i= 0;
-		HashMap stateMasks= new HashMap(fHoverConfigs.length);
+		HashMap<Integer, String> stateMasks= new HashMap<Integer, String>(fHoverConfigs.length);
 		while (fStatus.isOK() && i < fHoverConfigs.length) {
 			if (fHoverConfigs[i].fIsEnabled) {
 				String label= getContributedHovers()[i].getLabel();
@@ -537,7 +538,7 @@ class JavaEditorHoverConfigurationBlock implements IPreferenceConfigurationBlock
 				if (fHoverConfigs[i].fStateMask == -1)
 					fStatus= new StatusInfo(IStatus.ERROR, Messages.format(PreferencesMessages.JavaEditorHoverConfigurationBlock_modifierIsNotValidForHover, new String[] {fHoverConfigs[i].fModifierString, label}));
 				else if (stateMasks.containsKey(stateMask))
-					fStatus= new StatusInfo(IStatus.ERROR, Messages.format(PreferencesMessages.JavaEditorHoverConfigurationBlock_duplicateModifier, new String[] {label, (String)stateMasks.get(stateMask)}));
+					fStatus= new StatusInfo(IStatus.ERROR, Messages.format(PreferencesMessages.JavaEditorHoverConfigurationBlock_duplicateModifier, new String[] {label, stateMasks.get(stateMask)}));
 				else
 					stateMasks.put(stateMask, label);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverPreferencePage.java
index 4daf637..a33e106 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorHoverPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ public class JavaEditorHoverPreferencePage extends AbstractConfigurationBlockPre
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#getHelpId()
 	 */
+	@Override
 	protected String getHelpId() {
 		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
 	}
@@ -39,6 +40,7 @@ public class JavaEditorHoverPreferencePage extends AbstractConfigurationBlockPre
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setDescription()
 	 */
+	@Override
 	protected void setDescription() {
 		String description= PreferencesMessages.JavaEditorPreferencePage_hoverTab_title;
 		setDescription(description);
@@ -47,11 +49,13 @@ public class JavaEditorHoverPreferencePage extends AbstractConfigurationBlockPre
 	/*
 	 * @see org.org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
 	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 	}
 
 
+	@Override
 	protected Label createDescriptionLabel(Composite parent) {
 		return null; // no description for new look.
 	}
@@ -59,6 +63,7 @@ public class JavaEditorHoverPreferencePage extends AbstractConfigurationBlockPre
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.ui.internal.editors.text.OverlayPreferenceStore)
 	 */
+	@Override
 	protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
 		return new JavaEditorHoverConfigurationBlock(this, overlayPreferenceStore);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPreferencePage.java
index f7ff38c..3c722fd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public final class JavaEditorPreferencePage extends AbstractConfigurationBlockPr
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#getHelpId()
 	 */
+	@Override
 	protected String getHelpId() {
 		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
 	}
@@ -33,6 +34,7 @@ public final class JavaEditorPreferencePage extends AbstractConfigurationBlockPr
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setDescription()
 	 */
+	@Override
 	protected void setDescription() {
 		String description= PreferencesMessages.JavaEditorPreferencePage_general;
 		setDescription(description);
@@ -41,11 +43,13 @@ public final class JavaEditorPreferencePage extends AbstractConfigurationBlockPr
 	/*
 	 * @see org.org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
 	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 	}
 
 
+	@Override
 	protected Label createDescriptionLabel(Composite parent) {
 		return null; // no description for new look.
 	}
@@ -53,6 +57,7 @@ public final class JavaEditorPreferencePage extends AbstractConfigurationBlockPr
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.ui.internal.editors.text.OverlayPreferenceStore)
 	 */
+	@Override
 	protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
 		return new JavaEditorAppearanceConfigurationBlock(this, overlayPreferenceStore);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPropertyPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPropertyPage.java
index 3db3a0f..e3f3255 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaEditorPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class JavaEditorPropertyPage extends PropertyPage {
 
 	public JavaEditorPropertyPage() {}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		final Composite composite= new Composite(parent, SWT.NONE);
 		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
@@ -40,6 +41,7 @@ public class JavaEditorPropertyPage extends PropertyPage {
 		link.setLayoutData(data);
 		link.setText(PreferencesMessages.JavaEditorPropertyPage_SaveActionLink_Text);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer)getContainer();
 				container.openPage(SaveParticipantPreferencePage.PROPERTY_PAGE_ID, null);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaTemplatePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaTemplatePreferencePage.java
index 6730304..27d3b1b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaTemplatePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaTemplatePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ public class JavaTemplatePreferencePage extends TemplatePreferencePage {
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.TEMPLATE_PREFERENCE_PAGE);
@@ -66,6 +67,7 @@ public class JavaTemplatePreferencePage extends TemplatePreferencePage {
 	 * @see org.eclipse.ui.texteditor.templates.TemplatePreferencePage#createContents(org.eclipse.swt.widgets.Composite)
 	 * @since 3.3
 	 */
+	@Override
 	protected Control createContents(Composite ancestor) {
 		ScrolledPageContent scrolled= new ScrolledPageContent(ancestor, SWT.H_SCROLL | SWT.V_SCROLL);
 		scrolled.setExpandHorizontal(true);
@@ -84,17 +86,17 @@ public class JavaTemplatePreferencePage extends TemplatePreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		boolean ok= super.performOk();
-
-		JavaPlugin.getDefault().savePluginPreferences();
-
+		JavaPlugin.flushInstanceScope();
 		return ok;
 	}
 
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.TemplatePreferencePage#getFormatterPreferenceKey()
 	 */
+	@Override
 	protected String getFormatterPreferenceKey() {
 		return PreferenceConstants.TEMPLATES_USE_CODEFORMATTER;
 	}
@@ -102,6 +104,7 @@ public class JavaTemplatePreferencePage extends TemplatePreferencePage {
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.TemplatePreferencePage#createTemplateEditDialog2(org.eclipse.jface.text.templates.Template, boolean, boolean)
 	 */
+	@Override
 	protected Template editTemplate(Template template, boolean edit, boolean isNameModifiable) {
 		org.eclipse.jdt.internal.ui.preferences.EditTemplateDialog dialog= new org.eclipse.jdt.internal.ui.preferences.EditTemplateDialog(getShell(), template, edit, isNameModifiable, getContextTypeRegistry());
 		if (dialog.open() == Window.OK) {
@@ -113,6 +116,7 @@ public class JavaTemplatePreferencePage extends TemplatePreferencePage {
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.TemplatePreferencePage#createViewer(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected SourceViewer createViewer(Composite parent) {
 		IDocument document= new Document();
 		JavaTextTools tools= JavaPlugin.getDefault().getJavaTextTools();
@@ -139,6 +143,7 @@ public class JavaTemplatePreferencePage extends TemplatePreferencePage {
 	/*
 	 * @see org.eclipse.ui.texteditor.templates.TemplatePreferencePage#updateViewerInput()
 	 */
+	@Override
 	protected void updateViewerInput() {
 		IStructuredSelection selection= (IStructuredSelection) getTableViewer().getSelection();
 		SourceViewer viewer= getViewer();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
index 9531b2a..93fd570 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -606,7 +606,7 @@ public class JavadocConfigurationBlock {
 
 		ILabelProvider lp= new WorkbenchLabelProvider();
 		ITreeContentProvider cp= new WorkbenchContentProvider();
-		Class[] acceptedClasses= new Class[] { IFile.class };
+		Class<?>[] acceptedClasses= new Class[] { IFile.class };
 		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, true);
 
 		IResource initSel= null;
@@ -795,7 +795,7 @@ public class JavadocConfigurationBlock {
 
 			Object elem= fProvider.getRoot();
 			for (int i= 0; i < segments.length && elem != null; i++) {
-				List list= fProvider.getChildren(elem);
+				List<?> list= fProvider.getChildren(elem);
 				String name= segments[i];
 				elem= null;
 				for (int k= 0; k < list.size(); k++) {
@@ -833,7 +833,7 @@ public class JavadocConfigurationBlock {
 		 * @see ITreeContentProvider#hasChildren
 		 */
 		public boolean hasChildren(Object element) {
-			List list= fProvider.getChildren(element);
+			List<?> list= fProvider.getChildren(element);
 			if (list != null) {
 				for (int i= 0; i < list.size(); i++) {
 					if (fProvider.isFolder(list.get(i))) {
@@ -848,8 +848,8 @@ public class JavadocConfigurationBlock {
 		 * @see ITreeContentProvider#getChildren
 		 */
 		public Object[] getChildren(Object element) {
-			List list= fProvider.getChildren(element);
-			ArrayList res= new ArrayList();
+			List<?> list= fProvider.getChildren(element);
+			ArrayList<Object> res= new ArrayList<Object>();
 			if (list != null) {
 				for (int i= 0; i < list.size(); i++) {
 					Object curr= list.get(i);
@@ -888,6 +888,7 @@ public class JavadocConfigurationBlock {
 			fProvider= provider;
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			if (element == fProvider.getRoot()) {
 				return IMG_JAR;
@@ -896,6 +897,7 @@ public class JavadocConfigurationBlock {
 			}
 		}
 
+		@Override
 		public String getText(Object element) {
 			if (element == fProvider.getRoot()) {
 				return BasicElementLabels.getResourceName(fProvider.getZipFile().getName());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationPropertyPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationPropertyPage.java
index cb0bc64..2a89e89 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,9 +14,13 @@ import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
@@ -45,6 +49,7 @@ import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.corext.javadoc.JavaDocLocations;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -69,6 +74,7 @@ public class JavadocConfigurationPropertyPage extends PropertyPage implements IS
 
 	private JavadocConfigurationBlock fJavadocConfigurationBlock;
 	private boolean fIsValidElement;
+	private boolean fIsReadOnly;
 
 	private IPath fContainerPath;
 	private IClasspathEntry fEntry;
@@ -80,6 +86,7 @@ public class JavadocConfigurationPropertyPage extends PropertyPage implements IS
 	/**
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IJavaElement elem= getJavaElement();
 		try {
@@ -131,11 +138,12 @@ public class JavadocConfigurationPropertyPage extends PropertyPage implements IS
 			setDescription(Messages.format(PreferencesMessages.JavadocConfigurationPropertyPage_not_supported, containerName));
 			return null;
 		}
+		IClasspathEntry entry= JavaModelUtil.findEntryInContainer(container, jarPath);
 		if (status.getCode() == ClasspathContainerInitializer.ATTRIBUTE_READ_ONLY) {
 			setDescription(Messages.format(PreferencesMessages.JavadocConfigurationPropertyPage_read_only, containerName));
-			return null;
+			fIsReadOnly= true;
+			return entry;
 		}
-		IClasspathEntry entry= JavaModelUtil.findEntryInContainer(container, jarPath);
 		Assert.isNotNull(entry);
 		setDescription(PreferencesMessages.JavadocConfigurationPropertyPage_IsPackageFragmentRoot_description);
 		return entry;
@@ -144,9 +152,34 @@ public class JavadocConfigurationPropertyPage extends PropertyPage implements IS
 	/*
 	 * @see PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
-		if (!fIsValidElement) {
-			return new Composite(parent, SWT.NONE);
+		if (!fIsValidElement || fIsReadOnly) {
+			Composite inner= new Composite(parent, SWT.NONE);
+			
+			if (fIsReadOnly) {
+				GridLayout layout= new GridLayout();
+				layout.marginWidth= 0;
+				inner.setLayout(layout);
+
+				Label label= new Label(inner, SWT.WRAP);
+				label.setText(PreferencesMessages.JavadocConfigurationPropertyPage_location_path);
+				
+				Text location= new Text(inner, SWT.READ_ONLY | SWT.WRAP);
+				GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+				gd.widthHint= convertWidthInCharsToPixels(80);
+				location.setLayoutData(gd);
+				String locationPath= PreferencesMessages.JavadocConfigurationPropertyPage_locationPath_none;
+				if (fEntry != null) {
+					URL javadocUrl= JavaDocLocations.getLibraryJavadocLocation(fEntry);
+					if (javadocUrl != null) {
+						locationPath= javadocUrl.toExternalForm();
+					}
+				}
+				location.setText(locationPath);
+				Dialog.applyDialogFont(inner);
+			}
+			return inner;
 		}
 
 		IJavaElement elem= getJavaElement();
@@ -193,6 +226,7 @@ public class JavadocConfigurationPropertyPage extends PropertyPage implements IS
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		if (fJavadocConfigurationBlock != null) {
 			fJavadocConfigurationBlock.performDefaults();
@@ -203,6 +237,7 @@ public class JavadocConfigurationPropertyPage extends PropertyPage implements IS
 	/**
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fJavadocConfigurationBlock != null) {
 			URL javadocLocation= fJavadocConfigurationBlock.getJavadocLocation();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsConfigurationBlock.java
index a680828..60e157a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 	private static final Key PREF_PB_MISSING_JAVADOC_TAGS= getJDTCoreKey(JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS);
 	private static final Key PREF_PB_MISSING_JAVADOC_TAGS_VISIBILITY= getJDTCoreKey(JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY);
 	private static final Key PREF_PB_MISSING_JAVADOC_TAGS_OVERRIDING= getJDTCoreKey(JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING);
+	private static final Key PREF_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS= getJDTCoreKey(JavaCore.COMPILER_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS);
 
 	private static final Key PREF_PB_MISSING_JAVADOC_TAG_DESCRIPTION= getJDTCoreKey(JavaCore.COMPILER_PB_MISSING_JAVADOC_TAG_DESCRIPTION);
 
@@ -91,6 +92,7 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 				PREF_PB_INVALID_JAVADOC_TAGS_VISIBILITY,
 				PREF_PB_INVALID_JAVADOC_TAGS_NOT_VISIBLE_REF, PREF_PB_INVALID_JAVADOC_TAGS_DEPRECATED_REF,
 				PREF_PB_MISSING_JAVADOC_TAGS, PREF_PB_MISSING_JAVADOC_TAGS_VISIBILITY, PREF_PB_MISSING_JAVADOC_TAGS_OVERRIDING,
+				PREF_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS,
 				PREF_PB_MISSING_JAVADOC_COMMENTS, PREF_PB_MISSING_JAVADOC_COMMENTS_VISIBILITY, PREF_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING,
 				PREF_PB_MISSING_JAVADOC_TAG_DESCRIPTION,
 			};
@@ -100,6 +102,7 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 	/*
 	 * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		fPixelConverter= new PixelConverter(parent);
 		setShell(parent.getShell());
@@ -186,7 +189,10 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 		gd.horizontalSpan= nColumns;
 		description.setLayoutData(gd);
 
-		int indent= fPixelConverter.convertWidthInCharsToPixels(2);
+		int indent= fPixelConverter.convertWidthInCharsToPixels(4);
+
+		spacer= new Composite(composite, SWT.NONE);
+		GridDataFactory.fillDefaults().span(nColumns, 1).hint(1, 5).applyTo(spacer);
 
 		label = PreferencesMessages.JavadocProblemsConfigurationBlock_pb_invalid_javadoc_label;
 		addComboBox(composite, label, PREF_PB_INVALID_JAVADOC, errorWarningIgnore, errorWarningIgnoreLabels, 0);
@@ -216,6 +222,10 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 		label= PreferencesMessages.JavadocProblemsConfigurationBlock_pb_missing_tag_description;
 		addComboBox(composite, label, PREF_PB_MISSING_JAVADOC_TAG_DESCRIPTION, missingTagValues, missingTagLabels, indent);
 
+
+		spacer= new Composite(composite, SWT.NONE);
+		GridDataFactory.fillDefaults().span(nColumns, 1).hint(1, 5).applyTo(spacer);
+
 		label = PreferencesMessages.JavadocProblemsConfigurationBlock_pb_missing_javadoc_label;
 		addComboBox(composite, label, PREF_PB_MISSING_JAVADOC_TAGS, errorWarningIgnore, errorWarningIgnoreLabels, 0);
 
@@ -225,6 +235,13 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 		label= PreferencesMessages.JavadocProblemsConfigurationBlock_pb_missing_javadoc_tags_overriding_label;
 		addCheckBox(composite, label, PREF_PB_MISSING_JAVADOC_TAGS_OVERRIDING, disabledEnabled, indent);
 
+		label= PreferencesMessages.JavadocProblemsConfigurationBlock_pb_missing_comments_method_type_parameter_label;
+		addCheckBox(composite, label, PREF_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS, disabledEnabled, indent);
+		
+
+		spacer= new Composite(composite, SWT.NONE);
+		GridDataFactory.fillDefaults().span(nColumns, 1).hint(1, 5).applyTo(spacer);
+
 		label = PreferencesMessages.JavadocProblemsConfigurationBlock_pb_missing_comments_label;
 		addComboBox(composite, label, PREF_PB_MISSING_JAVADOC_COMMENTS, errorWarningIgnore, errorWarningIgnoreLabels, 0);
 
@@ -241,6 +258,7 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 	 * Update fields and validate.
 	 * @param changedKey Key that changed, or null, if all changed.
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		if (!areSettingsEnabled()) {
 			return;
@@ -279,6 +297,7 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 
 			boolean enableMissingTagsErrors= !checkValue(PREF_PB_MISSING_JAVADOC_TAGS, IGNORE);
 			getCheckBox(PREF_PB_MISSING_JAVADOC_TAGS_OVERRIDING).setEnabled(enableMissingTagsErrors);
+			getCheckBox(PREF_PB_MISSING_JAVADOC_TAGS_METHOD_TYPE_PARAMETERS).setEnabled(enableMissingTagsErrors);
 			setComboEnabled(PREF_PB_MISSING_JAVADOC_TAGS_VISIBILITY, enableMissingTagsErrors);
 
 			boolean enableMissingCommentsErrors= !checkValue(PREF_PB_MISSING_JAVADOC_COMMENTS, IGNORE);
@@ -301,6 +320,7 @@ public class JavadocProblemsConfigurationBlock extends OptionsConfigurationBlock
 	}
 
 
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		String title= PreferencesMessages.JavadocProblemsConfigurationBlock_needsbuild_title;
 		String message;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsPreferencePage.java
index 6adc272..831561f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocProblemsPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new JavadocProblemsConfigurationBlock(getNewStatusChangedListener(), getProject(), container);
@@ -66,10 +67,12 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 		}
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -77,6 +80,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -84,6 +88,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -91,6 +96,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -101,6 +107,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fConfigurationBlock != null) {
@@ -111,6 +118,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -121,6 +129,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -131,6 +140,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
@@ -140,6 +150,7 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#setElement(org.eclipse.core.runtime.IAdaptable)
 	 */
+	@Override
 	public void setElement(IAdaptable element) {
 		//TODO: remove
 		super.setElement(element);
@@ -148,10 +159,12 @@ public class JavadocProblemsPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
+	@Override
 	public void applyData(Object data) {
 		super.applyData(data);
 		if (data instanceof Map && fConfigurationBlock != null) {
-			Map map= (Map) data;
+			@SuppressWarnings("unchecked")
+			Map<String, Object> map= (Map<String, Object>) data;
 			if (isProjectPreferencePage()) {
 				Boolean useProjectSpecific= (Boolean) map.get(DATA_USE_PROJECT_SPECIFIC_OPTIONS);
 				if (useProjectSpecific != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java
index 11c04b2..a097507 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,9 +35,14 @@ import org.eclipse.jface.layout.PixelConverter;
 
 import org.eclipse.ui.dialogs.PreferencesUtil;
 
+import org.eclipse.ui.texteditor.AnnotationPreference;
+
+import org.eclipse.ui.editors.text.EditorsUI;
+
 import org.eclipse.jdt.ui.PreferenceConstants;
 
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
+import org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
 
 
 /**
@@ -50,13 +55,13 @@ class MarkOccurrencesConfigurationBlock implements IPreferenceConfigurationBlock
 	private OverlayPreferenceStore fStore;
 
 
-	private Map fCheckBoxes= new HashMap();
+	private Map<Button, String> fCheckBoxes= new HashMap<Button, String>();
 	private SelectionListener fCheckBoxListener= new SelectionListener() {
 		public void widgetDefaultSelected(SelectionEvent e) {
 		}
 		public void widgetSelected(SelectionEvent e) {
 			Button button= (Button) e.widget;
-			fStore.setValue((String) fCheckBoxes.get(button), button.getSelection());
+			fStore.setValue(fCheckBoxes.get(button), button.getSelection());
 		}
 	};
 
@@ -66,7 +71,7 @@ class MarkOccurrencesConfigurationBlock implements IPreferenceConfigurationBlock
 	 * @see #createDependency(Button, String, Control)
 	 * @since 3.0
 	 */
-	private ArrayList fMasterSlaveListeners= new ArrayList();
+	private ArrayList<SelectionListener> fMasterSlaveListeners= new ArrayList<SelectionListener>();
 
 	private StatusInfo fStatus;
 
@@ -79,7 +84,7 @@ class MarkOccurrencesConfigurationBlock implements IPreferenceConfigurationBlock
 
 	private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
 
-		ArrayList overlayKeys= new ArrayList();
+		ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
 
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_OCCURRENCES));
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_MARK_TYPE_OCCURRENCES));
@@ -116,13 +121,15 @@ class MarkOccurrencesConfigurationBlock implements IPreferenceConfigurationBlock
 		Link link= new Link(composite, SWT.NONE);
 		link.setText(PreferencesMessages.MarkOccurrencesConfigurationBlock_link);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
-				PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, null);
+				String data= null;
+				AnnotationPreference preference= EditorsUI.getAnnotationPreferenceLookup().getAnnotationPreference("org.eclipse.jdt.ui.occurrences"); //$NON-NLS-1$
+				if (preference != null)
+					data= preference.getPreferenceLabel();
+				PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, data);
 			}
 		});
-		// TODO replace by link-specific tooltips when
-		// bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=88866 gets fixed
-		link.setToolTipText(PreferencesMessages.MarkOccurrencesConfigurationBlock_link_tooltip);
 
 		addFiller(composite);
 
@@ -230,17 +237,17 @@ class MarkOccurrencesConfigurationBlock implements IPreferenceConfigurationBlock
 
 	void initializeFields() {
 
-		Iterator iter= fCheckBoxes.keySet().iterator();
+		Iterator<Button> iter= fCheckBoxes.keySet().iterator();
 		while (iter.hasNext()) {
-			Button b= (Button) iter.next();
-			String key= (String) fCheckBoxes.get(b);
+			Button b= iter.next();
+			String key= fCheckBoxes.get(b);
 			b.setSelection(fStore.getBoolean(key));
 		}
 
         // Update slaves
-        iter= fMasterSlaveListeners.iterator();
-        while (iter.hasNext()) {
-            SelectionListener listener= (SelectionListener)iter.next();
+        Iterator<SelectionListener> iter2= fMasterSlaveListeners.iterator();
+        while (iter2.hasNext()) {
+            SelectionListener listener= iter2.next();
             listener.widgetSelected(null);
         }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesPreferencePage.java
index 92bced3..73b919d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MarkOccurrencesPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public final class MarkOccurrencesPreferencePage extends AbstractConfigurationBl
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#getHelpId()
 	 */
+	@Override
 	protected String getHelpId() {
 		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
 	}
@@ -33,6 +34,7 @@ public final class MarkOccurrencesPreferencePage extends AbstractConfigurationBl
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setDescription()
 	 */
+	@Override
 	protected void setDescription() {
 		String description= PreferencesMessages.MarkOccurrencesConfigurationBlock_title;
 		setDescription(description);
@@ -41,11 +43,13 @@ public final class MarkOccurrencesPreferencePage extends AbstractConfigurationBl
 	/*
 	 * @see org.org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
 	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 	}
 
 
+	@Override
 	protected Label createDescriptionLabel(Composite parent) {
 		return null; // no description for new look.
 	}
@@ -53,6 +57,7 @@ public final class MarkOccurrencesPreferencePage extends AbstractConfigurationBl
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.ui.internal.editors.text.OverlayPreferenceStore)
 	 */
+	@Override
 	protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
 		return new MarkOccurrencesConfigurationBlock(overlayPreferenceStore);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MembersOrderPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MembersOrderPreferencePage.java
index 1bf9192..21d1761 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MembersOrderPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MembersOrderPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,11 +72,11 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 	public static final String DEFAULT= "D";  //$NON-NLS-1$
 
 	private boolean fUseVisibilitySort;
-	private ListDialogField fSortOrderList;
-	private ListDialogField fVisibilityOrderList;
+	private ListDialogField<String> fSortOrderList;
+	private ListDialogField<String> fVisibilityOrderList;
 	private SelectionButtonDialogField fUseVisibilitySortField;
 
-	private static boolean isValidEntries(List entries, String entryString) {
+	private static boolean isValidEntries(List<String> entries, String entryString) {
 		StringTokenizer tokenizer= new StringTokenizer(entryString, ","); //$NON-NLS-1$
 		int i= 0;
 		for (; tokenizer.hasMoreTokens(); i++) {
@@ -100,12 +100,12 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 
 		// category sort
 
-		fSortOrderList= new ListDialogField(null,  new String[] { upLabel, downLabel }, new MemberSortLabelProvider());
+		fSortOrderList= new ListDialogField<String>(null,  new String[] { upLabel, downLabel }, new MemberSortLabelProvider());
 		fSortOrderList.setDownButtonIndex(1);
 		fSortOrderList.setUpButtonIndex(0);
 
 		//validate entries stored in store, false get defaults
-		List entries= parseList(memberSortString);
+		List<String> entries= parseList(memberSortString);
 		if (!isValidEntries(entries, ALL_SORTMEMBER_ENTRIES)) {
 			memberSortString= getPreferenceStore().getDefaultString(PREF_OUTLINE_SORT_OPTION);
 			entries= parseList(memberSortString);
@@ -122,7 +122,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 		upLabel= PreferencesMessages.MembersOrderPreferencePage_visibility_button_up;
 		downLabel= PreferencesMessages.MembersOrderPreferencePage_visibility_button_down;
 
-		fVisibilityOrderList= new ListDialogField(null, new String[] { upLabel, downLabel }, new VisibilitySortLabelProvider());
+		fVisibilityOrderList= new ListDialogField<String>(null, new String[] { upLabel, downLabel }, new VisibilitySortLabelProvider());
 		fVisibilityOrderList.setDownButtonIndex(1);
 		fVisibilityOrderList.setUpButtonIndex(0);
 
@@ -135,10 +135,10 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 		fVisibilityOrderList.setElements(entries);
 	}
 
-	private static List parseList(String string) {
+	private static List<String> parseList(String string) {
 		StringTokenizer tokenizer= new StringTokenizer(string, ","); //$NON-NLS-1$
-		List entries= new ArrayList();
-		for (int i= 0; tokenizer.hasMoreTokens(); i++) {
+		List<String> entries= new ArrayList<String>();
+		while (tokenizer.hasMoreTokens()) {
 			String token= tokenizer.nextToken();
 			entries.add(token);
 		}
@@ -148,6 +148,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.SORT_ORDER_PREFERENCE_PAGE);
@@ -156,6 +157,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 	/*
 	 * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		// Create both the dialog lists
 		Composite sortComposite= new Composite(parent, SWT.NONE);
@@ -193,7 +195,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 	}
 
 
-	private void createListDialogField(Composite composite, ListDialogField dialogField) {
+	private void createListDialogField(Composite composite, ListDialogField<String> dialogField) {
 		Control list= dialogField.getListControl(composite);
 		GridData gd= new GridData();
 		gd.horizontalAlignment= GridData.FILL;
@@ -223,6 +225,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 	/*
 	 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		IPreferenceStore prefs= JavaPlugin.getDefault().getPreferenceStore();
 		String str= prefs.getDefaultString(PREF_OUTLINE_SORT_OPTION);
@@ -246,6 +249,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
 	//reorders elements in the Outline based on selection
+	@Override
 	public boolean performOk() {
 
 		//save preferences for both dialog lists
@@ -255,16 +259,16 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 
 		//update the button setting
 		store.setValue(PREF_USE_VISIBILITY_SORT_OPTION, fUseVisibilitySortField.isSelected());
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 
 		return true;
 	}
 
-	private void updateList(IPreferenceStore store, ListDialogField list, String str) {
+	private void updateList(IPreferenceStore store, ListDialogField<String> list, String str) {
 		StringBuffer buf= new StringBuffer();
-		List curr= list.getElements();
-		for (Iterator iter= curr.iterator(); iter.hasNext();) {
-			String s= (String) iter.next();
+		List<String> curr= list.getElements();
+		for (Iterator<String> iter= curr.iterator(); iter.hasNext();) {
+			String s= iter.next();
 			buf.append(s);
 			buf.append(',');
 		}
@@ -279,6 +283,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 		/*
 		* @see org.eclipse.jface.viewers.ILabelProvider#getImage(Object)
 		*/
+		@Override
 		public Image getImage(Object element) {
 			//access to image registry
 			ImageDescriptorRegistry registry= JavaPlugin.getImageDescriptorRegistry();
@@ -322,6 +327,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 		/*
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(Object)
 		 */
+		@Override
 		public String getText(Object element) {
 
 			if (element instanceof String) {
@@ -357,6 +363,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 		/*
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			//access to image registry
 			ImageDescriptorRegistry registry= JavaPlugin.getImageDescriptorRegistry();
@@ -381,6 +388,7 @@ public class MembersOrderPreferencePage extends PreferencePage implements IWorkb
 		/*
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			if (element instanceof String) {
 				String s= (String) element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NameConventionConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NameConventionConfigurationBlock.java
index 312627d..f73c5ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NameConventionConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NameConventionConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -138,6 +138,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 			return res;
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 			Composite inner= new Composite(composite, SWT.NONE);
@@ -202,6 +203,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			//PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.IMPORT_ORGANIZE_INPUT_DIALOG);
@@ -213,6 +215,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			return getColumnImage(element, 0);
 		}
@@ -220,6 +223,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			return getColumnText(element, 0);
 		}
@@ -273,21 +277,21 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 		}
 	}
 
-	private class NameConventionAdapter implements IListAdapter, IDialogFieldListener {
+	private class NameConventionAdapter implements IListAdapter<NameConventionEntry>, IDialogFieldListener {
 
-		private boolean canEdit(ListDialogField field) {
+		private boolean canEdit(ListDialogField<?> field) {
 			return field.getSelectedElements().size() == 1;
 		}
 
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<NameConventionEntry> field, int index) {
 			doEditButtonPressed();
 		}
 
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<NameConventionEntry> field) {
 			field.enableButton(0, canEdit(field));
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<NameConventionEntry> field) {
 			if (canEdit(field)) {
 				doEditButtonPressed();
 			}
@@ -298,7 +302,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 		}
 	}
 
-	private ListDialogField fNameConventionList;
+	private ListDialogField<NameConventionEntry> fNameConventionList;
 	private SelectionButtonDialogField fUseKeywordThisBox;
 	private SelectionButtonDialogField fUseIsForBooleanGettersBox;
 
@@ -312,7 +316,8 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 		String[] buttons= new String[] {
 			PreferencesMessages.NameConventionConfigurationBlock_list_edit_button
 		};
-		fNameConventionList= new ListDialogField(adapter, buttons, new NameConventionLabelProvider()) {
+		fNameConventionList= new ListDialogField<NameConventionEntry>(adapter, buttons, new NameConventionLabelProvider()) {
+			@Override
 			protected int getListStyle() {
 				return super.getListStyle() & ~SWT.MULTI | SWT.SINGLE;
 			}
@@ -368,6 +373,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 		};
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		setShell(parent.getShell());
 
@@ -407,6 +413,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(java.lang.String, java.lang.String)
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		// no validation here
 	}
@@ -414,7 +421,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 	protected final void updateModel(DialogField field) {
 		if (field == fNameConventionList) {
 			for (int i= 0; i < fNameConventionList.getSize(); i++) {
-				NameConventionEntry entry= (NameConventionEntry) fNameConventionList.getElement(i);
+				NameConventionEntry entry= fNameConventionList.getElement(i);
 				setValue(entry.suffixkey, entry.suffix);
 				setValue(entry.prefixkey, entry.prefix);
 			}
@@ -443,8 +450,9 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
 	 */
+	@Override
 	protected void updateControls() {
-		ArrayList list= new ArrayList(4);
+		ArrayList<NameConventionEntry> list= new ArrayList<NameConventionEntry>(4);
 		createEntry(list, PREF_FIELD_PREFIXES, PREF_FIELD_SUFFIXES, FIELD);
 		createEntry(list, PREF_STATIC_FIELD_PREFIXES, PREF_STATIC_FIELD_SUFFIXES, STATIC);
 		createEntry(list, PREF_STATIC_FINAL_FIELD_PREFIXES, PREF_STATIC_FINAL_FIELD_SUFFIXES, STATIC_FINAL);
@@ -461,11 +469,12 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
 	 */
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		return null; // no build required
 	}
 
-	private void createEntry(List list, Key prefixKey, Key suffixKey, int kind) {
+	private void createEntry(List<NameConventionEntry> list, Key prefixKey, Key suffixKey, int kind) {
 		NameConventionEntry entry= new NameConventionEntry();
 		entry.kind= kind;
 		entry.suffixkey= suffixKey;
@@ -485,7 +494,7 @@ public class NameConventionConfigurationBlock extends OptionsConfigurationBlock
 	}
 
 	private void doEditButtonPressed() {
-		NameConventionEntry entry= (NameConventionEntry) fNameConventionList.getSelectedElements().get(0);
+		NameConventionEntry entry= fNameConventionList.getSelectedElements().get(0);
 
 		String title;
 		String message;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesConfigurationBlock.java
index b4dcd53..94191f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -209,7 +209,7 @@ public class NativeLibrariesConfigurationBlock {
 
 		ILabelProvider lp= new WorkbenchLabelProvider();
 		ITreeContentProvider cp= new WorkbenchContentProvider();
-		Class[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
+		Class<?>[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
 		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, true);
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesPropertyPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesPropertyPage.java
index 0d6632f..3d260b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NativeLibrariesPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,13 @@ package org.eclipse.jdt.internal.ui.preferences;
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
@@ -62,6 +66,7 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 
 	private NativeLibrariesConfigurationBlock fConfigurationBlock;
 	private boolean fIsValidElement;
+	private boolean fIsReadOnly;
 	private IClasspathEntry fEntry;
 	private IPath fContainerPath;
 	private String fInitialNativeLibPath;
@@ -69,6 +74,7 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 	/**
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IJavaElement elem= getJavaElement();
 		try {
@@ -83,7 +89,7 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 					if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
 						fContainerPath= entry.getPath();
 						fEntry= handleContainerEntry(fContainerPath, elem.getJavaProject(), root.getPath());
-						fIsValidElement= fEntry != null;
+						fIsValidElement= fEntry != null && !fIsReadOnly;
 					} else {
 						fContainerPath= null;
 						fEntry= entry;
@@ -114,11 +120,12 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 			setDescription(Messages.format(PreferencesMessages.NativeLibrariesPropertyPage_not_supported, containerName));
 			return null;
 		}
+		IClasspathEntry entry= JavaModelUtil.findEntryInContainer(container, jarPath);
 		if (status.getCode() == ClasspathContainerInitializer.ATTRIBUTE_READ_ONLY) {
 			setDescription(Messages.format(PreferencesMessages.NativeLibrariesPropertyPage_read_only, containerName));
-			return null;
+			fIsReadOnly= true;
+			return entry;
 		}
-		IClasspathEntry entry= JavaModelUtil.findEntryInContainer(container, jarPath);
 		Assert.isNotNull(entry);
 		return entry;
 	}
@@ -126,22 +133,40 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
-		if (!fIsValidElement)
-			return new Composite(parent, SWT.NONE);
+		if (!fIsValidElement || fIsReadOnly) {
+			Composite inner= new Composite(parent, SWT.NONE);
+			
+			if (fIsReadOnly) {
+				GridLayout layout= new GridLayout();
+				layout.marginWidth= 0;
+				inner.setLayout(layout);
+
+				Label label= new Label(inner, SWT.WRAP);
+				label.setText(PreferencesMessages.NativeLibrariesPropertyPage_location_path);
+				
+				Text location= new Text(inner, SWT.READ_ONLY | SWT.WRAP);
+				GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+				gd.widthHint= convertWidthInCharsToPixels(80);
+				location.setLayoutData(gd);
+				String locationPath= PreferencesMessages.NativeLibrariesPropertyPage_locationPath_none;
+				if (fEntry != null) {
+					String nativeLibrariesPath= getNativeLibrariesPath(fEntry);
+					if (nativeLibrariesPath != null)
+						locationPath= nativeLibrariesPath;
+				}
+				location.setText(locationPath);
+				Dialog.applyDialogFont(inner);
+			}
+			return inner;
+		}
 
 		IJavaElement elem= getJavaElement();
 		if (elem == null)
 			return new Composite(parent, SWT.NONE);
 
-		fInitialNativeLibPath= null;
-		IClasspathAttribute[] extraAttributes= fEntry.getExtraAttributes();
-		for (int i= 0; i < extraAttributes.length; i++) {
-			if (extraAttributes[i].getName().equals(JavaRuntime.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY)) {
-				fInitialNativeLibPath= extraAttributes[i].getValue();
-				break;
-			}
-		}
+		fInitialNativeLibPath= getNativeLibrariesPath(fEntry);
 		fConfigurationBlock= new NativeLibrariesConfigurationBlock(this, getShell(), fInitialNativeLibPath, fEntry);
 		Control control= fConfigurationBlock.createContents(parent);
 
@@ -149,6 +174,16 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 		return control;
 	}
 
+	private static String getNativeLibrariesPath(IClasspathEntry entry) {
+		IClasspathAttribute[] extraAttributes= entry.getExtraAttributes();
+		for (int i= 0; i < extraAttributes.length; i++) {
+			if (extraAttributes[i].getName().equals(JavaRuntime.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY)) {
+				return extraAttributes[i].getValue();
+			}
+		}
+		return null;
+	}
+
 	/**
 	 * {@inheritDoc}
 	 */
@@ -160,6 +195,7 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performDefaults();
@@ -170,6 +206,7 @@ public class NativeLibrariesPropertyPage extends PropertyPage implements IStatus
 	/**
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null) {
 			String nativeLibraryPath= fConfigurationBlock.getNativeLibraryPath();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NewJavaProjectPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NewJavaProjectPreferencePage.java
index bf1e19a..c0ae140 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NewJavaProjectPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/NewJavaProjectPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -135,7 +135,7 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 
 	public static IClasspathEntry[] decodeJRELibraryClasspathEntries(String encoded) {
 		StringTokenizer tok= new StringTokenizer(encoded, " "); //$NON-NLS-1$
-		ArrayList res= new ArrayList();
+		ArrayList<IClasspathEntry> res= new ArrayList<IClasspathEntry>();
 		while (tok.hasMoreTokens()) {
 			try {
 				tok.nextToken(); // desc: ignore
@@ -169,7 +169,7 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 				JavaPlugin.log(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, IStatus.ERROR, message, e));
 			}
 		}
-		return (IClasspathEntry[]) res.toArray(new IClasspathEntry[res.size()]);
+		return res.toArray(new IClasspathEntry[res.size()]);
 	}
 
 
@@ -214,9 +214,9 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 	}
 
 
-	private ArrayList fCheckBoxes;
-	private ArrayList fRadioButtons;
-	private ArrayList fTextControls;
+	private ArrayList<Button> fCheckBoxes;
+	private ArrayList<Button> fRadioButtons;
+	private ArrayList<Text> fTextControls;
 
 	private SelectionListener fSelectionListener;
 	private ModifyListener fModifyListener;
@@ -240,9 +240,9 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 		// title used when opened programatically
 		setTitle(PreferencesMessages.NewJavaProjectPreferencePage_title);
 
-		fRadioButtons= new ArrayList();
-		fCheckBoxes= new ArrayList();
-		fTextControls= new ArrayList();
+		fRadioButtons= new ArrayList<Button>();
+		fCheckBoxes= new ArrayList<Button>();
+		fTextControls= new ArrayList<Text>();
 
 		fSelectionListener= new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) {}
@@ -297,6 +297,7 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 	/**
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.NEW_JAVA_PROJECT_PREFERENCE_PAGE);
@@ -338,6 +339,7 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 	}
 
 
+	@Override
 	protected Control createContents(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -466,20 +468,21 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		IPreferenceStore store= getPreferenceStore();
 		for (int i= 0; i < fCheckBoxes.size(); i++) {
-			Button button= (Button) fCheckBoxes.get(i);
+			Button button= fCheckBoxes.get(i);
 			String key= (String) button.getData();
 			button.setSelection(store.getDefaultBoolean(key));
 		}
 		for (int i= 0; i < fRadioButtons.size(); i++) {
-			Button button= (Button) fRadioButtons.get(i);
+			Button button= fRadioButtons.get(i);
 			String[] info= (String[]) button.getData();
 			button.setSelection(info[1].equals(store.getDefaultString(info[0])));
 		}
 		for (int i= 0; i < fTextControls.size(); i++) {
-			Text text= (Text) fTextControls.get(i);
+			Text text= fTextControls.get(i);
 			String key= (String) text.getData();
 			text.setText(store.getDefaultString(key));
 		}
@@ -494,22 +497,23 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 	/*
 	 * @see IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		IPreferenceStore store= getPreferenceStore();
 		for (int i= 0; i < fCheckBoxes.size(); i++) {
-			Button button= (Button) fCheckBoxes.get(i);
+			Button button= fCheckBoxes.get(i);
 			String key= (String) button.getData();
 			store.setValue(key, button.getSelection());
 		}
 		for (int i= 0; i < fRadioButtons.size(); i++) {
-			Button button= (Button) fRadioButtons.get(i);
+			Button button= fRadioButtons.get(i);
 			if (button.getSelection()) {
 				String[] info= (String[]) button.getData();
 				store.setValue(info[0], info[1]);
 			}
 		}
 		for (int i= 0; i < fTextControls.size(); i++) {
-			Text text= (Text) fTextControls.get(i);
+			Text text= fTextControls.get(i);
 			String key= (String) text.getData();
 			store.setValue(key, text.getText());
 		}
@@ -518,18 +522,18 @@ public class NewJavaProjectPreferencePage extends PreferencePage implements IWor
 			store.setValue(CLASSPATH_JRELIBRARY_INDEX, fJRECombo.getSelectionIndex());
 		}
 
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 		return super.performOk();
 	}
 
 	private String[] getJRENames() {
 		String prefString= getPreferenceStore().getString(CLASSPATH_JRELIBRARY_LIST);
-		ArrayList list= new ArrayList();
+		ArrayList<String> list= new ArrayList<String>();
 		StringTokenizer tok= new StringTokenizer(prefString, ";"); //$NON-NLS-1$
 		while (tok.hasMoreTokens()) {
 			list.add(decodeJRELibraryDescription(tok.nextToken()));
 		}
-		return (String[]) list.toArray(new String[list.size()]);
+		return list.toArray(new String[list.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OccurrencesPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OccurrencesPreferencePage.java
index f17842b..4308121 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OccurrencesPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OccurrencesPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class OccurrencesPreferencePage extends AbstractConfigurationBlockPrefere
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigureationBlockPreferencePage#getHelpId()
 	 */
+	@Override
 	protected String getHelpId() {
 		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
 	}
@@ -36,6 +37,7 @@ public class OccurrencesPreferencePage extends AbstractConfigurationBlockPrefere
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage#setDescription()
 	 */
+	@Override
 	protected void setDescription() {
 		// This page has no description
 	}
@@ -43,6 +45,7 @@ public class OccurrencesPreferencePage extends AbstractConfigurationBlockPrefere
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
 	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 	}
@@ -50,6 +53,7 @@ public class OccurrencesPreferencePage extends AbstractConfigurationBlockPrefere
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore)
 	 */
+	@Override
 	protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
 		return new MarkOccurrencesConfigurationBlock(overlayPreferenceStore);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OptionsConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OptionsConfigurationBlock.java
index 9da7591..abc652c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OptionsConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/OptionsConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,10 @@ import org.osgi.service.prefs.BackingStoreException;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.accessibility.AccessibleAdapter;
 import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.MouseAdapter;
@@ -39,10 +43,14 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Scrollable;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Widget;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.preferences.DefaultScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IScopeContext;
@@ -63,6 +71,7 @@ import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 import org.eclipse.ui.preferences.IWorkingCopyManager;
 import org.eclipse.ui.preferences.WorkingCopyManager;
+import org.eclipse.ui.progress.WorkbenchJob;
 
 import org.eclipse.jdt.core.JavaCore;
 
@@ -73,6 +82,7 @@ import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.util.CoreUtility;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
+import org.eclipse.jdt.internal.ui.util.StringMatcher;
 import org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener;
 
 /**
@@ -85,8 +95,8 @@ public abstract class OptionsConfigurationBlock {
 
 	public static class Key {
 
-		private String fQualifier;
-		private String fKey;
+		private final String fQualifier;
+		private final String fKey;
 
 		public Key(String qualifier, String key) {
 			fQualifier= qualifier;
@@ -130,6 +140,7 @@ public abstract class OptionsConfigurationBlock {
 		/* (non-Javadoc)
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
 			return fQualifier + '/' + fKey;
 		}
@@ -144,17 +155,19 @@ public abstract class OptionsConfigurationBlock {
 	 * Key that is only managed locally and not part of preference store.
 	 */
 	private static class LocalKey extends Key {
-		private HashMap fValues;
+		private final HashMap<IScopeContext, String> fValues;
 
 		private LocalKey(String key) {
 			super("local", key); //$NON-NLS-1$
-			fValues= new HashMap();
+			fValues= new HashMap<IScopeContext, String>();
 		}
 
+		@Override
 		public String getStoredValue(IScopeContext context, IWorkingCopyManager manager) {
-			return (String) fValues.get(context);
+			return fValues.get(context);
 		}
 
+		@Override
 		public void setStoredValue(IScopeContext context, String value, IWorkingCopyManager manager) {
 			if (value != null) {
 				fValues.put(context, value);
@@ -164,10 +177,9 @@ public abstract class OptionsConfigurationBlock {
 		}
 	}
 
-
 	protected static class ControlData {
-		private Key fKey;
-		private String[] fValues;
+		private final Key fKey;
+		private final String[] fValues;
 
 		public ControlData(Key key, String[] values) {
 			fKey= key;
@@ -215,15 +227,469 @@ public abstract class OptionsConfigurationBlock {
 		}
 	}
 
+	/**
+	 * A node in <code>FilteredPreferenceTree</code>.
+	 */
+	protected static class PreferenceTreeNode {
+
+		public static final int NONE= 0;
+
+		public static final int CHECKBOX= 1;
+
+		public static final int COMBO= 2;
+
+		public static final int EXPANDABLE_COMPOSITE= 3;
+
+		public static final int TEXT_CONTROL= 4;
+
+		/**
+		 * Tells the type of UI control corresponding to this node. One of
+		 * <ul>
+		 * <li> <code>NONE</code></li>
+		 * <li> <code>CHECKBOX</code></li>
+		 * <li> <code>COMBO</code></li>
+		 * <li> <code>EXPANDABLE_COMPOSITE</code></li>
+		 * <li> <code>TEXT_CONTROL</code></li>
+		 * </ul>
+		 */
+		private final int fControlType;
+
+		/**
+		 * Label text of the preference which is used for filtering. This text does not contain
+		 * <code>&</code> which is used to indicate mnemonics.
+		 */
+		private final String fLabel;
+
+		/**
+		 * The preference key or the local key to uniquely identify a node's corresponding UI
+		 * control. Can be <code>null</code>.
+		 */
+		private final Key fKey;
+
+		/**
+		 * Tells whether all children should be shown even if just one child matches the filter.
+		 */
+		private final boolean fShowAllChildren;
+
+		/**
+		 * Tells whether this node's UI control is visible in the UI for the current filter text.
+		 */
+		private boolean fVisible;
+
+		/**
+		 * List of children nodes.
+		 */
+		private List<PreferenceTreeNode> fChildren;
+
+		/**
+		 * Constructs a new instance of PreferenceTreeNode according to the parameters.
+		 * <p>
+		 * The <code>label</code> and the <code>key</code> must not be <code>null</code> if the node
+		 * has a corresponding UI control.
+		 * </p>
+		 * 
+		 * @param label the label text
+		 * @param key the key
+		 * @param controlType the type of UI control.
+		 * @param showAllChildren tells whether all children should be shown even if just one child
+		 *            matches the filter.
+		 */
+		public PreferenceTreeNode(String label, Key key, int controlType, boolean showAllChildren) {
+			super();
+			if (controlType != NONE && (label == null || key == null)) {
+				throw new IllegalArgumentException();
+			}
+			if (label == null) {
+				label= ""; //$NON-NLS-1$
+			}
+			fLabel= LegacyActionTools.removeMnemonics(label);
+			fKey= key;
+			fControlType= controlType;
+			fShowAllChildren= showAllChildren;
+		}
+
+		public String getLabel() {
+			return fLabel;
+		}
+
+		public Key getKey() {
+			return fKey;
+		}
+
+		public int getControlType() {
+			return fControlType;
+		}
+
+		public List<PreferenceTreeNode> getChildren() {
+			return fChildren;
+		}
+
+		public boolean isShowAllChildren() {
+			return fShowAllChildren;
+		}
+
+		public boolean isVisible() {
+			return fVisible;
+		}
+
+		private void setVisible(boolean visible, boolean recursive) {
+			fVisible= visible;
+			if (!recursive)
+				return;
+			if (fChildren != null) {
+				for (int i= 0; i < fChildren.size(); i++) {
+					fChildren.get(i).setVisible(visible, recursive);
+				}
+			}
+		}
+
+		public PreferenceTreeNode addChild(String label, Key key, int controlType, boolean showAllChildren) {
+			if (fChildren == null) {
+				fChildren= new ArrayList<PreferenceTreeNode>();
+			}
+			PreferenceTreeNode n= new PreferenceTreeNode(label, key, controlType, showAllChildren);
+			fChildren.add(n);
+			return n;
+		}
+
+		public boolean hasValue() {
+			if (fControlType == COMBO || fControlType == CHECKBOX || fControlType == TEXT_CONTROL) {
+				return true;
+			}
+			return false;
+		}
+	}
+
+	/**
+	 * The preference page modeled as a filtered tree.
+	 * <p>
+	 * The tree consists of an optional description label, a filter text input box, and a scrolled
+	 * area. The scrolled content contains all the UI controls which participate in filtering.
+	 * </p>
+	 * <p>
+	 * Supports '*' and '?' wildcards. A word in filter text preceded by '~' is used to filter on
+	 * preference values, e.g. ~ignore or ~off. Supported filter formats are
+	 * <ul>
+	 * <li>pattern</li>
+	 * <li>~valueFilter</li>
+	 * <li>pattern ~valueFilter</li>
+	 * <li>~valueFilter pattern</li>
+	 * </ul>
+	 * </p>
+	 */
+	protected static class FilteredPreferenceTree {
+		/**
+		 * Root node for the tree. It does not have a corresponding UI control.
+		 */
+		private final PreferenceTreeNode fRoot;
+
+		/**
+		 * The Options Configuration block.
+		 */
+		private final OptionsConfigurationBlock fConfigBlock;
+
+		/**
+		 * The parent composite of <code>FilteredPreferenceTree</code>.
+		 */
+		private final Composite fParentComposite;
+
+		/**
+		 * The scrolled area of the tree.
+		 */
+		private ScrolledPageContent fScrolledPageContent;
+
+		/**
+		 * Job to update the UI in a separate thread.
+		 */
+		private final WorkbenchJob fRefreshJob;
+
+		/**
+		 * Tells whether the filter text matched at least one element.
+		 */
+		private boolean fMatchFound;
+
+		/**
+		 * Label to indicate that no option matched the filter text.
+		 */
+		private Label fNoMatchFoundLabel;
+
+		/**
+		 * Constructs a new instance of FilteredPreferenceTree according to the parameters.
+		 * 
+		 * @param configBlock the Options Configuration block
+		 * @param parentComposite the parent composite
+		 * @param label the label, or <code>null</code> if none
+		 */
+		public FilteredPreferenceTree(OptionsConfigurationBlock configBlock, Composite parentComposite, String label) {
+			fRoot= new PreferenceTreeNode(null, null, PreferenceTreeNode.NONE, false);
+			fConfigBlock= configBlock;
+			fParentComposite= parentComposite;
+
+			createDescription(label);
+			createFilterBox();
+			createScrolledArea();
+			createNoMatchFoundLabel();
+
+			fRefreshJob= doCreateRefreshJob();
+			fRefreshJob.setSystem(true);
+			fParentComposite.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					fRefreshJob.cancel();
+				}
+			});
+		}
+
+		private void createDescription(String label) {
+			if (label == null)
+				return;
+			
+			Label description= new Label(fParentComposite, SWT.LEFT | SWT.WRAP);
+			description.setFont(fParentComposite.getFont());
+			description.setText(label);
+			description.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false));
+		}
+
+		private void createFilterBox() {
+			//TODO: Directly use the hint flags once Bug 293230 is fixed
+			FilterTextControl filterTextControl= new FilterTextControl(fParentComposite);
+
+			final Text filterBox= filterTextControl.getFilterControl();
+			filterBox.setMessage(PreferencesMessages.OptionsConfigurationBlock_TypeFilterText);
+			
+			filterBox.addModifyListener(new ModifyListener() {
+				private String fPrevFilterText;
+
+				public void modifyText(ModifyEvent e) {
+					String input= filterBox.getText();
+					if (input != null && input.equalsIgnoreCase(fPrevFilterText))
+						return;
+					fPrevFilterText= input;
+					doFilter(input);
+				}
+			});
+		}
+
+		private void createScrolledArea() {
+			fScrolledPageContent= new ScrolledPageContent(fParentComposite);
+			fScrolledPageContent.addControlListener(new ControlAdapter() {
+				@Override
+				public void controlResized(ControlEvent e) {
+					fScrolledPageContent.getVerticalBar().setVisible(true);
+				}
+			});
+		}
+
+		public ScrolledPageContent getScrolledPageContent() {
+			return fScrolledPageContent;
+		}
+
+		private void createNoMatchFoundLabel() {
+			fNoMatchFoundLabel= new Label(fScrolledPageContent.getBody(), SWT.NONE);
+			GridData gd= new GridData(SWT.BEGINNING, SWT.CENTER, true, false);
+			gd.horizontalSpan= 3;
+			fNoMatchFoundLabel.setLayoutData(gd);
+			fNoMatchFoundLabel.setFont(fScrolledPageContent.getFont());
+			fNoMatchFoundLabel.setText(PreferencesMessages.OptionsConfigurationBlock_NoOptionMatchesTheFilter);
+			setVisible(fNoMatchFoundLabel, false);
+		}
+
+		public PreferenceTreeNode addChild(PreferenceTreeNode parent, String label, Key key, int controlType, boolean showAllChildren) {
+			parent= (parent == null) ? fRoot : parent;
+			return parent.addChild(label, key, controlType, showAllChildren);
+		}
+
+		public PreferenceTreeNode addCheckBox(Composite parentComposite, String label, Key key, String[] values, int indent, PreferenceTreeNode parentNode, boolean showAllChildren) {
+			fConfigBlock.addCheckBox(parentComposite, label, key, values, indent);
+			return addChild(parentNode, label, key, PreferenceTreeNode.CHECKBOX, showAllChildren);
+		}
+
+		public PreferenceTreeNode addCheckBox(Composite parentComposite, String label, Key key, String[] values, int indent, PreferenceTreeNode parentNode) {
+			return addCheckBox(parentComposite, label, key, values, indent, parentNode, true);
+		}
+
+		public PreferenceTreeNode addComboBox(Composite parentComposite, String label, Key key, String[] values, String[] valueLabels, int indent, PreferenceTreeNode parentNode, boolean showAllChildren) {
+			fConfigBlock.addComboBox(parentComposite, label, key, values, valueLabels, indent);
+			return addChild(parentNode, label, key, PreferenceTreeNode.COMBO, showAllChildren);
+		}
+
+		public PreferenceTreeNode addComboBox(Composite parentComposite, String label, Key key, String[] values, String[] valueLabels, int indent, PreferenceTreeNode parentNode) {
+			return addComboBox(parentComposite, label, key, values, valueLabels, indent, parentNode, true);
+		}
+
+		public PreferenceTreeNode addTextField(Composite parentComposite, String label, Key key, int indent, int widthHint, PreferenceTreeNode parentNode, boolean showAllChildren) {
+			fConfigBlock.addTextField(parentComposite, label, key, indent, widthHint);
+			return addChild(parentNode, label, key, PreferenceTreeNode.TEXT_CONTROL, showAllChildren);
+		}
+
+		public PreferenceTreeNode addExpandableComposite(Composite parentComposite, String label, int nColumns, Key key, PreferenceTreeNode parentNode, boolean showAllChildren) {
+			fConfigBlock.createStyleSection(parentComposite, label, nColumns, key);
+			return addChild(parentNode, label, key, PreferenceTreeNode.EXPANDABLE_COMPOSITE, showAllChildren);
+		}
+
+		private boolean match(PreferenceTreeNode node, StringMatcher labelMatcher, StringMatcher valueMatcher) {
+			if (node.getKey() == null) {
+				return false;
+			}
+			boolean valueMatched= true;
+			boolean labelMatched= true;
+			if (labelMatcher != null) {
+				labelMatched= labelMatcher.match(node.getLabel());
+			}
+			if (valueMatcher != null) {
+				if (node.getControlType() == PreferenceTreeNode.COMBO) {
+					valueMatched= valueMatcher.match(fConfigBlock.getComboBox(node.getKey()).getText());
+				} else if (node.getControlType() == PreferenceTreeNode.CHECKBOX) {
+					boolean checked= fConfigBlock.getCheckBox(node.getKey()).getSelection();
+					if (checked) {
+						valueMatched= valueMatcher.match(PreferencesMessages.OptionsConfigurationBlock_On) || valueMatcher.match(PreferencesMessages.OptionsConfigurationBlock_Enabled);
+					} else {
+						valueMatched= valueMatcher.match(PreferencesMessages.OptionsConfigurationBlock_Off) || valueMatcher.match(PreferencesMessages.OptionsConfigurationBlock_Disabled);
+					}
+				}
+			}
+			return labelMatched && valueMatched;
+		}
+
+		public boolean filter(PreferenceTreeNode node, StringMatcher labelMatcher, StringMatcher valueMatcher) {
+			//check this node
+			boolean visible= match(node, labelMatcher, valueMatcher);
+			if (visible) {
+				if (valueMatcher != null && !node.hasValue()) { //see bug 321818
+					labelMatcher= null;
+					visible= false;
+				} else {
+					node.setVisible(visible, true);
+					fMatchFound= true;
+					return visible;
+				}
+			}
+			//check children
+			List<PreferenceTreeNode> children= node.getChildren();
+			if (children != null) {
+				for (int i= 0; i < children.size(); i++) {
+					visible|= filter(children.get(i), labelMatcher, valueMatcher);
+				}
+				if (node.isShowAllChildren()) {
+					for (int i= 0; i < children.size(); i++) {
+						children.get(i).setVisible(visible, false);
+					}
+				}
+			}
+			node.setVisible(visible, false);
+			return visible;
+		}
+
+		public void doFilter(String filterText) {
+			fRefreshJob.cancel();
+			fRefreshJob.schedule(getRefreshJobDelay());
+			filterText= filterText.trim();
+			int index= filterText.indexOf("~"); //$NON-NLS-1$
+			StringMatcher labelMatcher= null;
+			StringMatcher valueMatcher= null;
+			if (index == -1) {
+				labelMatcher= createStringMatcher(filterText);
+			} else {
+				if (index == 0) {
+					int i= 0;
+					for (; i < filterText.length(); i++) {
+						char ch= filterText.charAt(i);
+						if (ch == ' ' || ch == '\t') {
+							break;
+						}
+					}
+					valueMatcher= createStringMatcher(filterText.substring(1, i));
+					labelMatcher= createStringMatcher(filterText.substring(i));
+				} else {
+					labelMatcher= createStringMatcher(filterText.substring(0, index));
+					if (index < filterText.length())
+						valueMatcher= createStringMatcher(filterText.substring(index + 1));
+				}
+			}
+			fMatchFound= false;
+			filter(fRoot, labelMatcher, valueMatcher);
+		}
+
+		private StringMatcher createStringMatcher(String filterText) {
+			filterText= filterText.trim();
+			if (filterText.length() > 0)
+				return new StringMatcher("*" + filterText + "*", true, false); //$NON-NLS-1$ //$NON-NLS-2$
+			return null;
+		}
+
+		/**
+		 * Return the time delay that should be used when scheduling the filter refresh job.
+		 * 
+		 * @return a time delay in milliseconds before the job should run
+		 */
+		private long getRefreshJobDelay() {
+			return 200;
+		}
+
+		private void updateUI(PreferenceTreeNode node) {
+			//update node
+			int controlType= node.getControlType();
+			Control control= null;
+			if (controlType == PreferenceTreeNode.CHECKBOX) {
+				control= fConfigBlock.getCheckBox(node.getKey());
+			} else if (controlType == PreferenceTreeNode.COMBO) {
+				control= fConfigBlock.getComboBox(node.getKey());
+			} else if (controlType == PreferenceTreeNode.TEXT_CONTROL) {
+				control= fConfigBlock.getTextControl(node.getKey());
+			} else if (controlType == PreferenceTreeNode.EXPANDABLE_COMPOSITE) {
+				control= fConfigBlock.getExpandableComposite(node.getKey());
+			}
+
+			if (control != null) {
+				boolean visible= node.isVisible();
+				setVisible(control, visible);
+				if (control instanceof Combo || control instanceof Text) {
+					Label label= (fConfigBlock.fLabels.get(control));
+					setVisible(label, visible);
+				}
+				if (control instanceof ExpandableComposite) {
+					((ExpandableComposite)control).setExpanded(visible);
+				}
+			}
+
+			//update children
+			List<PreferenceTreeNode> children= node.getChildren();
+			if (children != null) {
+				for (int i= 0; i < children.size(); i++) {
+					updateUI(children.get(i));
+				}
+			}
+		}
+
+		private WorkbenchJob doCreateRefreshJob() {
+			return new WorkbenchJob(PreferencesMessages.OptionsConfigurationBlock_RefreshFilter) {
+				@Override
+				public IStatus runInUIThread(IProgressMonitor monitor) {
+					updateUI(fRoot);
+					fParentComposite.layout(true, true); //relayout
+					if (fScrolledPageContent != null) {
+						setVisible(fNoMatchFoundLabel, !fMatchFound);
+						fScrolledPageContent.reflow(true);
+					}
+					return Status.OK_STATUS;
+				}
+			};
+		}
+
+		private void setVisible(Control control, boolean visible) {
+			control.setVisible(visible);
+			((GridData)control.getLayoutData()).exclude= !visible;
+		}
+	}
+
 	private static final String REBUILD_COUNT_KEY= "preferences_build_requested"; //$NON-NLS-1$
 
 	private static final String SETTINGS_EXPANDED= "expanded"; //$NON-NLS-1$
 
-	protected final ArrayList fCheckBoxes;
-	protected final ArrayList fComboBoxes;
-	protected final ArrayList fTextBoxes;
-	protected final HashMap fLabels;
-	protected final ArrayList fExpandedComposites;
+	protected final ArrayList<Button> fCheckBoxes;
+	protected final ArrayList<Combo> fComboBoxes;
+	protected final ArrayList<Text> fTextBoxes;
+	protected final HashMap<Scrollable, Label> fLabels;
+	protected final ArrayList<ExpandableComposite> fExpandableComposites;
 
 	private SelectionListener fSelectionListener;
 	private ModifyListener fTextModifyListener;
@@ -237,9 +703,9 @@ public abstract class OptionsConfigurationBlock {
 	private Shell fShell;
 
 	private final IWorkingCopyManager fManager;
-	private IWorkbenchPreferenceContainer fContainer;
+	private final IWorkbenchPreferenceContainer fContainer;
 
-	private Map fDisabledProjectSettings; // null when project specific settings are turned off
+	private Map<Key, String> fDisabledProjectSettings; // null when project specific settings are turned off
 
 	private int fRebuildCount; /// used to prevent multiple dialogs that ask for a rebuild
 
@@ -257,20 +723,20 @@ public abstract class OptionsConfigurationBlock {
 		if (fProject != null) {
 			fLookupOrder= new IScopeContext[] {
 				new ProjectScope(fProject),
-				new InstanceScope(),
-				new DefaultScope()
+				InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE
 			};
 		} else {
 			fLookupOrder= new IScopeContext[] {
-				new InstanceScope(),
-				new DefaultScope()
+				InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE
 			};
 		}
 		testIfOptionsComplete(allKeys);
 		if (fProject == null || hasProjectSpecificOptions(fProject)) {
 			fDisabledProjectSettings= null;
 		} else {
-			fDisabledProjectSettings= new IdentityHashMap();
+			fDisabledProjectSettings= new IdentityHashMap<Key, String>();
 			for (int i= 0; i < allKeys.length; i++) {
 				Key curr= allKeys[i];
 				fDisabledProjectSettings.put(curr, curr.getStoredValue(fLookupOrder, false, fManager));
@@ -279,11 +745,11 @@ public abstract class OptionsConfigurationBlock {
 
 		settingsUpdated();
 
-		fCheckBoxes= new ArrayList();
-		fComboBoxes= new ArrayList();
-		fTextBoxes= new ArrayList(2);
-		fLabels= new HashMap();
-		fExpandedComposites= new ArrayList();
+		fCheckBoxes= new ArrayList<Button>();
+		fComboBoxes= new ArrayList<Combo>();
+		fTextBoxes= new ArrayList<Text>(2);
+		fLabels= new HashMap<Scrollable, Label>();
+		fExpandableComposites= new ArrayList<ExpandableComposite>();
 
 		fRebuildCount= getRebuildCount();
 	}
@@ -324,12 +790,12 @@ public abstract class OptionsConfigurationBlock {
 	}
 
 	private int getRebuildCount() {
-		return fManager.getWorkingCopy(new DefaultScope().getNode(JavaUI.ID_PLUGIN)).getInt(REBUILD_COUNT_KEY, 0);
+		return fManager.getWorkingCopy(DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN)).getInt(REBUILD_COUNT_KEY, 0);
 	}
 
 	private void incrementRebuildCount() {
 		fRebuildCount++;
-		fManager.getWorkingCopy(new DefaultScope().getNode(JavaUI.ID_PLUGIN)).putInt(REBUILD_COUNT_KEY, fRebuildCount);
+		fManager.getWorkingCopy(DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN)).putInt(REBUILD_COUNT_KEY, fRebuildCount);
 	}
 
 
@@ -349,11 +815,11 @@ public abstract class OptionsConfigurationBlock {
 	public void selectOption(Key key) {
 		Control control= findControl(key);
 		if (control != null) {
-			if (!fExpandedComposites.isEmpty()) {
+			if (!fExpandableComposites.isEmpty()) {
 				ExpandableComposite expandable= getParentExpandableComposite(control);
 				if (expandable != null) {
-					for (int i= 0; i < fExpandedComposites.size(); i++) {
-						ExpandableComposite curr= (ExpandableComposite) fExpandedComposites.get(i);
+					for (int i= 0; i < fExpandableComposites.size(); i++) {
+						ExpandableComposite curr= fExpandableComposites.get(i);
 						curr.setExpanded(curr == expandable);
 					}
 					expandedStateChanged(expandable);
@@ -412,7 +878,7 @@ public abstract class OptionsConfigurationBlock {
 		return checkBox;
 	}
 
-	protected Button addCheckBoxWithLink(Composite parent, final String label, Key key, String[] values, int indent, int widthHint, SelectionListener listener) {
+	protected Button addCheckBoxWithLink(Composite parent, final String label, Key key, String[] values, int indent, int widthHint, final SelectionListener listener) {
 		LinkControlData data= new LinkControlData(key, values);
 
 		GridData gd= new GridData(GridData.FILL, GridData.FILL, true, false);
@@ -433,6 +899,7 @@ public abstract class OptionsConfigurationBlock {
 		checkBox.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));
 		checkBox.addSelectionListener(getSelectionListener());
 		checkBox.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			@Override
 			public void getName(AccessibleEvent e) {
 				e.result = LegacyActionTools.removeMnemonics(label.replaceAll("</?[aA][^>]*>", "")); //$NON-NLS-1$ //$NON-NLS-2$
 			}
@@ -445,22 +912,25 @@ public abstract class OptionsConfigurationBlock {
 		Link link= new Link(composite, SWT.NONE);
 		link.setText(label);
 		link.setLayoutData(gd);
-		if (listener != null) {
-			link.addSelectionListener(listener);
-		}
 		data.setLink(link);
 		
 		// toggle checkbox when user clicks unlinked text in link:
 		final boolean[] linkSelected= { false };
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				linkSelected[0]= true;
+				if (listener != null) {
+					listener.widgetSelected(e);
+				}
 			}
 		});
 		link.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseDown(MouseEvent e) {
 				linkSelected[0]= false;
 			}
+			@Override
 			public void mouseUp(MouseEvent e) {
 				if (!linkSelected[0]) {
 					checkBox.setSelection(!checkBox.getSelection());
@@ -612,17 +1082,25 @@ public abstract class OptionsConfigurationBlock {
 	}
 
 	protected ExpandableComposite createStyleSection(Composite parent, String label, int nColumns) {
+		return createStyleSection(parent, label, nColumns, null);
+	}
+
+	protected ExpandableComposite createStyleSection(Composite parent, String label, int nColumns, Key key) {
 		ExpandableComposite excomposite= new ExpandableComposite(parent, SWT.NONE, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT);
 		excomposite.setText(label);
+		if (key != null) {
+			excomposite.setData(key);
+		}
 		excomposite.setExpanded(false);
 		excomposite.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
 		excomposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, nColumns, 1));
 		excomposite.addExpansionListener(new ExpansionAdapter() {
+			@Override
 			public void expansionStateChanged(ExpansionEvent e) {
 				expandedStateChanged((ExpandableComposite) e.getSource());
 			}
 		});
-		fExpandedComposites.add(excomposite);
+		fExpandableComposites.add(excomposite);
 		makeScrollableCompositeAware(excomposite);
 		return excomposite;
 	}
@@ -635,8 +1113,8 @@ public abstract class OptionsConfigurationBlock {
 	}
 
 	protected void restoreSectionExpansionStates(IDialogSettings settings) {
-		for (int i= 0; i < fExpandedComposites.size(); i++) {
-			ExpandableComposite excomposite= (ExpandableComposite) fExpandedComposites.get(i);
+		for (int i= 0; i < fExpandableComposites.size(); i++) {
+			ExpandableComposite excomposite= fExpandableComposites.get(i);
 			if (settings == null) {
 				excomposite.setExpanded(i == 0); // only expand the first node by default
 			} else {
@@ -646,8 +1124,8 @@ public abstract class OptionsConfigurationBlock {
 	}
 
 	protected void storeSectionExpansionStates(IDialogSettings settings) {
-		for (int i= 0; i < fExpandedComposites.size(); i++) {
-			ExpandableComposite curr= (ExpandableComposite) fExpandedComposites.get(i);
+		for (int i= 0; i < fExpandableComposites.size(); i++) {
+			ExpandableComposite curr= fExpandableComposites.get(i);
 			settings.put(SETTINGS_EXPANDED + String.valueOf(i), curr.isExpanded());
 		}
 	}
@@ -716,7 +1194,7 @@ public abstract class OptionsConfigurationBlock {
 	 */
 	protected String getValue(Key key) {
 		if (fDisabledProjectSettings != null) {
-			return (String) fDisabledProjectSettings.get(key);
+			return fDisabledProjectSettings.get(key);
 		}
 		return key.getStoredValue(fLookupOrder, false, fManager);
 	}
@@ -741,7 +1219,7 @@ public abstract class OptionsConfigurationBlock {
 	 */
 	protected String setValue(Key key, String value) {
 		if (fDisabledProjectSettings != null) {
-			return (String) fDisabledProjectSettings.put(key, value);
+			return fDisabledProjectSettings.put(key, value);
 		}
 		String oldValue= getValue(key);
 		key.setStoredValue(fLookupOrder[0], value, fManager);
@@ -825,7 +1303,7 @@ public abstract class OptionsConfigurationBlock {
 		return res;
 	}
 
-	private boolean getChanges(IScopeContext currContext, List changedSettings) {
+	private boolean getChanges(IScopeContext currContext, List<Key> changedSettings) {
 		boolean completeSettings= fProject != null && fDisabledProjectSettings == null; // complete when project settings are enabled
 		boolean needsBuild= false;
 		for (int i= 0; i < fAllKeys.length; i++) {
@@ -855,14 +1333,14 @@ public abstract class OptionsConfigurationBlock {
 			if (enable) {
 				for (int i= 0; i < fAllKeys.length; i++) {
 					Key curr= fAllKeys[i];
-					String val= (String) fDisabledProjectSettings.get(curr);
+					String val= fDisabledProjectSettings.get(curr);
 					curr.setStoredValue(fLookupOrder[0], val, fManager);
 				}
 				fDisabledProjectSettings= null;
 				updateControls();
 				validateSettings(null, null, null);
 			} else {
-				fDisabledProjectSettings= new IdentityHashMap();
+				fDisabledProjectSettings= new IdentityHashMap<Key, String>();
 				for (int i= 0; i < fAllKeys.length; i++) {
 					Key curr= fAllKeys[i];
 					String oldSetting= curr.getStoredValue(fLookupOrder, false, fManager);
@@ -890,7 +1368,7 @@ public abstract class OptionsConfigurationBlock {
 		IScopeContext currContext= fLookupOrder[0];
 
 
-		List /* <Key>*/ changedOptions= new ArrayList();
+		List<Key> changedOptions= new ArrayList<Key>();
 		boolean needsBuild= getChanges(currContext, changedOptions);
 		if (changedOptions.isEmpty()) {
 			return true;
@@ -973,13 +1451,13 @@ public abstract class OptionsConfigurationBlock {
 	 */
 	protected void updateControls() {
 		for (int i= fCheckBoxes.size() - 1; i >= 0; i--) {
-			updateCheckBox((Button) fCheckBoxes.get(i));
+			updateCheckBox(fCheckBoxes.get(i));
 		}
 		for (int i= fComboBoxes.size() - 1; i >= 0; i--) {
-			updateCombo((Combo) fComboBoxes.get(i));
+			updateCombo(fComboBoxes.get(i));
 		}
 		for (int i= fTextBoxes.size() - 1; i >= 0; i--) {
-			updateText((Text) fTextBoxes.get(i));
+			updateText(fTextBoxes.get(i));
 		}
 	}
 
@@ -1006,9 +1484,20 @@ public abstract class OptionsConfigurationBlock {
 		}
 	}
 
+	protected ExpandableComposite getExpandableComposite(Key key) {
+		for (int i= fExpandableComposites.size() - 1; i >= 0; i--) {
+			ExpandableComposite curr= fExpandableComposites.get(i);
+			Key data= (Key)curr.getData();
+			if (key.equals(data)) {
+				return curr;
+			}
+		}
+		return null;
+	}
+
 	protected Button getCheckBox(Key key) {
 		for (int i= fCheckBoxes.size() - 1; i >= 0; i--) {
-			Button curr= (Button) fCheckBoxes.get(i);
+			Button curr= fCheckBoxes.get(i);
 			ControlData data= (ControlData) curr.getData();
 			if (key.equals(data.getKey())) {
 				return curr;
@@ -1022,7 +1511,7 @@ public abstract class OptionsConfigurationBlock {
 			return null;
 		
 		for (int i= fCheckBoxes.size() - 1; i >= 0; i--) {
-			Button curr= (Button) fCheckBoxes.get(i);
+			Button curr= fCheckBoxes.get(i);
 			ControlData data= (ControlData) curr.getData();
 			if (key.equals(data.getKey()) && data instanceof LinkControlData) {
 				return ((LinkControlData)data).getLink();
@@ -1033,7 +1522,7 @@ public abstract class OptionsConfigurationBlock {
 	
 	protected Combo getComboBox(Key key) {
 		for (int i= fComboBoxes.size() - 1; i >= 0; i--) {
-			Combo curr= (Combo) fComboBoxes.get(i);
+			Combo curr= fComboBoxes.get(i);
 			ControlData data= (ControlData) curr.getData();
 			if (key.equals(data.getKey())) {
 				return curr;
@@ -1044,9 +1533,9 @@ public abstract class OptionsConfigurationBlock {
 
 	protected Text getTextControl(Key key) {
 		for (int i= fTextBoxes.size() - 1; i >= 0; i--) {
-			Text curr= (Text) fTextBoxes.get(i);
-			ControlData data= (ControlData) curr.getData();
-			if (key.equals(data.getKey())) {
+			Text curr= fTextBoxes.get(i);
+			Key data= (Key)curr.getData();
+			if (key.equals(data)) {
 				return curr;
 			}
 		}
@@ -1071,7 +1560,7 @@ public abstract class OptionsConfigurationBlock {
 
 	protected void setComboEnabled(Key key, boolean enabled) {
 		Combo combo= getComboBox(key);
-		Label label= (Label) fLabels.get(combo);
+		Label label= fLabels.get(combo);
 		combo.setEnabled(enabled);
 		label.setEnabled(enabled);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesAccess.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesAccess.java
index 7211a67..abf9a1a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesAccess.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesAccess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,11 +42,11 @@ public class PreferencesAccess {
 	}
 
 	public IScopeContext getDefaultScope() {
-		return new DefaultScope();
+		return DefaultScope.INSTANCE;
 	}
 
 	public IScopeContext getInstanceScope() {
-		return new InstanceScope();
+		return InstanceScope.INSTANCE;
 	}
 
 	public IScopeContext getProjectScope(IProject project) {
@@ -74,14 +74,17 @@ public class PreferencesAccess {
 			return new WorkingCopyScopeContext(fWorkingCopyManager, original);
 		}
 
+		@Override
 		public IScopeContext getDefaultScope() {
 			return getWorkingCopyScopeContext(super.getDefaultScope());
 		}
 
+		@Override
 		public IScopeContext getInstanceScope() {
 			return getWorkingCopyScopeContext(super.getInstanceScope());
 		}
 
+		@Override
 		public IScopeContext getProjectScope(IProject project) {
 			return getWorkingCopyScopeContext(super.getProjectScope(project));
 		}
@@ -89,6 +92,7 @@ public class PreferencesAccess {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.preferences.PreferencesAccess#applyChanges()
 		 */
+		@Override
 		public void applyChanges() throws BackingStoreException {
 			fWorkingCopyManager.applyChanges();
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
index 21eebbe..e8108dd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,6 @@ public final class PreferencesMessages extends NLS {
 	public static String CodeAssistAdvancedConfigurationBlock_Up;
 	public static String CodeAssistAdvancedConfigurationBlock_Down;
 	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout;
-	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_ms;
 	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_emptyInput;
 	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_invalidInput;
 	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_invalidRange;
@@ -190,13 +189,14 @@ public final class PreferencesMessages extends NLS {
 	public static String JavaEditorPreferencePage_addJavaDocTags;
 	public static String JavaEditorPreferencePage_smartPaste;
 	public static String JavaEditorPreferencePage_link;
-	public static String JavaEditorPreferencePage_link_tooltip;
 	public static String JavaEditorPreferencePage_importsOnPaste;
 	public static String JavaEditorPreferencePage_subWordNavigation;
 	public static String JavaEditorPreferencePage_typing_smartSemicolon;
 	public static String JavaEditorPreferencePage_typing_smartOpeningBrace;
 	public static String JavaEditorPreferencePage_typing_smartTab;
 	public static String JavaEditorPreferencePage_hoverTab_title;
+	public static String JavaEditorPreferencePage_smartInsertMode_message;
+	public static String JavaEditorPreferencePage_smartAutoIndentAfterNewLine;
 	public static String JavaEditorColoringConfigurationBlock_link;
 	public static String JavaBasePreferencePage_openTypeHierarchy;
 	public static String JavaBasePreferencePage_inView;
@@ -218,7 +218,6 @@ public final class PreferencesMessages extends NLS {
 	public static String JavaEditorHoverConfigurationBlock_insertDelimiterAndModifier;
 	public static String MarkOccurrencesConfigurationBlock_title;
 	public static String MarkOccurrencesConfigurationBlock_link;
-	public static String MarkOccurrencesConfigurationBlock_link_tooltip;
 	public static String MarkOccurrencesConfigurationBlock_markOccurrences;
 	public static String MarkOccurrencesConfigurationBlock_markTypeOccurrences;
 	public static String MarkOccurrencesConfigurationBlock_markMethodOccurrences;
@@ -230,22 +229,11 @@ public final class PreferencesMessages extends NLS {
 	public static String MarkOccurrencesConfigurationBlock_markImplementors;
 	public static String MarkOccurrencesConfigurationBlock_markBreakContinueTargets;
 	public static String MarkOccurrencesConfigurationBlock_stickyOccurrences;
-	public static String JavaElementInfoPage_binary;
-	public static String JavaElementInfoPage_classpath_entry_kind;
-	public static String JavaElementInfoPage_library;
-	public static String JavaElementInfoPage_nameLabel;
-	public static String JavaElementInfoPage_not_present;
-	public static String JavaElementInfoPage_package;
-	public static String JavaElementInfoPage_package_contents;
-	public static String JavaElementInfoPage_project;
-	public static String JavaElementInfoPage_resource_path;
-	public static String JavaElementInfoPage_source;
-	public static String JavaElementInfoPage_variable;
-	public static String JavaElementInfoPage_variable_path;
-	public static String JavaElementInfoPage_location;
 	public static String JavadocConfigurationPropertyPage_IsPackageFragmentRoot_description;
 	public static String JavadocConfigurationPropertyPage_IsIncorrectElement_description;
 	public static String JavadocConfigurationPropertyPage_IsJavaProject_description;
+	public static String JavadocConfigurationPropertyPage_location_path;
+	public static String JavadocConfigurationPropertyPage_locationPath_none;
 	public static String JavadocConfigurationBlock_browse_folder_button;
 	public static String JavadocConfigurationBlock_error_notafolder;
 	public static String JavadocConfigurationBlock_javadocFolderDialog_label;
@@ -276,14 +264,19 @@ public final class PreferencesMessages extends NLS {
 	public static String ProblemSeveritiesConfigurationBlock_ignore_documented_unused_parameters;
 	public static String ProblemSeveritiesConfigurationBlock_pb_redundant_null_check;
 	public static String ProblemSeveritiesConfigurationBlock_pb_redundant_super_interface_label;
+	public static String ProblemSeveritiesConfigurationBlock_include_assert_in_null_analysis;
 	public static String ProblemSeveritiesConfigurationBlock_treat_optional_as_fatal;
 	public static String SourceAttachmentPropertyPage_error_title;
 	public static String SourceAttachmentPropertyPage_error_message;
 	public static String SourceAttachmentPropertyPage_invalid_container;
+	public static String SourceAttachmentPropertyPage_location_path;
+	public static String SourceAttachmentPropertyPage_locationPath_none;
 	public static String SourceAttachmentPropertyPage_noarchive_message;
 	public static String NativeLibrariesPropertyPage_invalidElementSelection_desription;
 	public static String NativeLibrariesPropertyPage_errorAttaching_title;
 	public static String NativeLibrariesPropertyPage_errorAttaching_message;
+	public static String NativeLibrariesPropertyPage_location_path;
+	public static String NativeLibrariesPropertyPage_locationPath_none;
 	public static String AppearancePreferencePage_description;
 	public static String AppearancePreferencePage_methodreturntype_label;
 	public static String AppearancePreferencePage_showCategory_label;
@@ -373,6 +366,7 @@ public final class PreferencesMessages extends NLS {
 	public static String ProblemSeveritiesConfigurationBlock_needsfullbuild_message;
 	public static String ProblemSeveritiesConfigurationBlock_needsprojectbuild_message;
 	public static String ProblemSeveritiesConfigurationBlock_common_description;
+	public static String ProblemSeveritiesConfigurationBlock_pb_unavoidable_generic_type_problems;
 	public static String ProblemSeveritiesConfigurationBlock_pb_unsafe_type_op_label;
 	public static String ProblemSeveritiesConfigurationBlock_pb_raw_type_reference;
 	public static String ProblemSeveritiesConfigurationBlock_pb_final_param_bound_label;
@@ -388,6 +382,7 @@ public final class PreferencesMessages extends NLS {
 	public static String ProblemSeveritiesConfigurationBlock_pb_unused_throwing_exception_when_overriding_label;
 	public static String ProblemSeveritiesConfigurationBlock_pb_unused_throwing_exception_ignore_unchecked_label;
 	public static String ProblemSeveritiesConfigurationBlock_pb_missing_serial_version_label;
+	public static String ProblemSeveritiesConfigurationBlock_pb_missing_static_on_method_label;
 	public static String ProblemSeveritiesConfigurationBlock_pb_missing_synchronized_on_inherited_method;
 	public static String ProblemSeveritiesConfigurationBlock_pb_missing_hashcode_method;
 	public static String ProblemSeveritiesConfigurationBlock_pb_overriding_pkg_dflt_label;
@@ -448,6 +443,7 @@ public final class PreferencesMessages extends NLS {
 	public static String JavadocProblemsConfigurationBlock_pb_missing_javadoc_tags_visibility_label;
 	public static String JavadocProblemsConfigurationBlock_pb_missing_javadoc_tags_overriding_label;
 	public static String JavadocProblemsConfigurationBlock_pb_missing_comments_label;
+	public static String JavadocProblemsConfigurationBlock_pb_missing_comments_method_type_parameter_label;
 	public static String JavadocProblemsConfigurationBlock_pb_missing_comments_visibility_label;
 	public static String JavadocProblemsConfigurationBlock_pb_missing_comments_overriding_label;
 	public static String JavadocProblemsConfigurationBlock_pb_missing_tag_description;
@@ -482,7 +478,6 @@ public final class PreferencesMessages extends NLS {
 	public static String ComplianceConfigurationBlock_classfiles_group_label;
 	public static String CodeStylePreferencePage_title;
 	public static String CodeTemplatesPreferencePage_title;
-	public static String JavaCategoryPropertyPage_text;
 	public static String NameConventionConfigurationBlock_field_label;
 	public static String NameConventionConfigurationBlock_static_label;
 	public static String NameConventionConfigurationBlock_arg_label;
@@ -705,10 +700,8 @@ public final class PreferencesMessages extends NLS {
 	public static String PropertiesFileEditorPreferencePage_underline;
 	public static String PropertiesFileEditorPreferencePage_preview;
 	public static String PropertiesFileEditorPreferencePage_link;
-	public static String PropertiesFileEditorPreferencePage_link_tooltip;
 	public static String SmartTypingConfigurationBlock_autoclose_title;
 	public static String SmartTypingConfigurationBlock_automove_title;
-	public static String SmartTypingConfigurationBlock_tabs_title;
 	public static String SmartTypingConfigurationBlock_tabs_message_tab_text;
 	public static String SmartTypingConfigurationBlock_tabs_message_others_text;
 	public static String SmartTypingConfigurationBlock_tabs_message_tooltip;
@@ -717,6 +710,7 @@ public final class PreferencesMessages extends NLS {
 	public static String SmartTypingConfigurationBlock_tabs_message_tabsAndSpaces;
 	public static String SmartTypingConfigurationBlock_pasting_title;
 	public static String SmartTypingConfigurationBlock_strings_title;
+	public static String SmartTypingConfigurationBlock_indentation_title;
 	public static String CodeAssistConfigurationBlock_typeFilters_link;
 	public static String CodeAssistConfigurationBlock_sortingSection_title;
 	public static String CodeAssistConfigurationBlock_autoactivationSection_title;
@@ -736,13 +730,14 @@ public final class PreferencesMessages extends NLS {
 	public static String ProblemSeveritiesConfigurationBlock_pb_unhandled_surpresswarning_tokens;
 	public static String ProblemSeveritiesConfigurationBlock_pb_enable_surpresswarning_annotation;
 	public static String SmartTypingConfigurationBlock_annotationReporting_link;
-	public static String CodeAssistConfigurationBlock_restricted_link;
-	public static String CodeAssistConfigurationBlock_hideDiscouraged_label;
-	public static String CodeAssistConfigurationBlock_hideForbidden_label;
+	public static String TypeFilterPreferencePage_restricted_link;
+	public static String TypeFilterPreferencePage_hideDiscouraged_label;
+	public static String TypeFilterPreferencePage_hideForbidden_label;
 	public static String UserLibraryPreferencePage_UserLibraryPreferencePage_libraries_up_button;
 	public static String UserLibraryPreferencePage_UserLibraryPreferencePage_libraries_down_button;
 	public static String EditTemplateDialog_autoinsert;
 	public static String ComplianceConfigurationBlock_jrecompliance_info;
+	public static String ComplianceConfigurationBlock_17_ee_warning;
 	public static String ComplianceConfigurationBlock_jrecompliance_info_project;
 	public static String ProblemSeveritiesConfigurationBlock_section_generics;
 	public static String JavaBasePreferencePage_dialogs;
@@ -760,6 +755,7 @@ public final class PreferencesMessages extends NLS {
 	public static String ProblemSeveritiesConfigurationBlock_pb_parameter_assignment;
 	public static String ProblemSeveritiesConfigurationBlock_pb_null_reference;
 	public static String ProblemSeveritiesConfigurationBlock_pb_potential_null_reference;
+	public static String ProblemSeveritiesConfigurationBlock_pb_potentially_missing_static_on_method_label;
 	public static String ProblemSeveritiesConfigurationBlock_pb_fall_through_case;
 	public static String ProblemSeveritiesConfigurationBlock_unused_suppresswarnings_token;
 	public static String CodeAssistConfigurationBlock_hideDeprecated_label;
@@ -784,4 +780,14 @@ public final class PreferencesMessages extends NLS {
 	public static String FavoriteStaticMemberInputDialog_error_invalidTypeName;
 	public static String FavoriteStaticMemberInputDialog_error_entryExists;
 
+	public static String OptionsConfigurationBlock_Disabled;
+	public static String OptionsConfigurationBlock_Enabled;
+	public static String OptionsConfigurationBlock_NoOptionMatchesTheFilter;
+	public static String OptionsConfigurationBlock_Off;
+	public static String OptionsConfigurationBlock_On;
+	public static String OptionsConfigurationBlock_RefreshFilter;
+	public static String OptionsConfigurationBlock_TypeFilterText;
+
+	public static String FilterTextControl_Clear;
+	public static String FilterTextControl_ClearFilterField;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
index 739ed81..b99ddec 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -144,7 +144,7 @@ JavaEditorPreferencePage_completionToggleHint=Press 'Ctrl' to toggle while conte
 JavaEditorPreferencePage_fillArgumentsOnMethodCompletion=&Fill method arguments and show guessed arguments
 JavaEditorPreferencePage_fillParameterNamesOnMethodCompletion=I&nsert parameter names 
 JavaEditorPreferencePage_fillBestGuessedArgumentsOnMethodCompletion=Insert best &guessed arguments
-JavaEditorPreferencePage_autoActivationDelay=Auto activation dela&y:
+JavaEditorPreferencePage_autoActivationDelay=Auto activation dela&y (ms):
 JavaEditorPreferencePage_autoActivationTriggersForJava=Auto activation triggers for &Java:
 JavaEditorPreferencePage_autoActivationTriggersForJavaDoc=Auto activation triggers for Javad&oc:
 JavaEditorPreferencePage_completePrefixes= &Insert common prefixes automatically
@@ -171,17 +171,21 @@ JavaEditorPreferencePage_wrapStrings= &Wrap automatically
 JavaEditorPreferencePage_escapeStrings= Escape text w&hen pasting into a string literal
 JavaEditorPreferencePage_addJavaDocTags= Add &Javadoc tags
 JavaEditorPreferencePage_smartPaste= Adjust &indentation
-JavaEditorPreferencePage_link=Java editor preferences. Note that some preferences may be set on the <a>Text Editors</a> preference page.
-JavaEditorPreferencePage_link_tooltip=Show the shared text editor preferences
+
+# DO NOT TRANSLATE "org.eclipse.ui.preferencePages.GeneralTextEditor" and "org.eclipse.ui.preferencePages.ColorsAndFonts"
+JavaEditorPreferencePage_link=Java editor preferences. See <a href=\"org.eclipse.ui.preferencePages.GeneralTextEditor\">'Text Editors'</a> for general text editor preferences and <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">'Colors and Fonts'</a> to configure the font.
+
 JavaEditorPreferencePage_importsOnPaste=&Update imports
 JavaEditorPreferencePage_subWordNavigation= Smart &caret positioning in Java names (overrides platform behavior)
 JavaEditorPreferencePage_typing_smartSemicolon= Se&micolons
 JavaEditorPreferencePage_typing_smartOpeningBrace= &Braces
 JavaEditorPreferencePage_typing_smartTab= &Tab key adjusts the indentation of the current line
-JavaEditorPropertyPage_SaveActionLink_Text=The actions to execute when the Java Editor is saved can be configured on to the <a>Save Action</a> property page.
+JavaEditorPreferencePage_smartInsertMode_message= The preferences on this page are only considered if 'Smart Insert Mode' is selected.
+JavaEditorPreferencePage_smartAutoIndentAfterNewLine= E&nter key adjusts the indentation on the new line
+JavaEditorPropertyPage_SaveActionLink_Text=The actions to execute when the Java Editor is saved can be configured on to the <a>'Save Action'</a> property page.
 
 # DO NOT TRANSLATE "org.eclipse.ui.preferencePages.GeneralTextEditor" and "org.eclipse.ui.preferencePages.ColorsAndFonts" 
-JavaEditorColoringConfigurationBlock_link= Default colors and font can be configured on the <a href=\"org.eclipse.ui.preferencePages.GeneralTextEditor\">Text Editors</a> and on the <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">Colors and Fonts</a> preference page.
+JavaEditorColoringConfigurationBlock_link= Default colors and font can be configured on the <a href=\"org.eclipse.ui.preferencePages.GeneralTextEditor\">'Text Editors'</a> and on the <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">'Colors and Fonts'</a> preference page.
 
 JavaEditorPreferencePage_hoverTab_title= Ho&vers
 
@@ -211,9 +215,8 @@ JavaEditorHoverConfigurationBlock_insertDelimiterAndModifier= \ + {0}
 MarkOccurrencesConfigurationBlock_title= &Mark Occurrences
 
 # DO NOT TRANSLATE "org.eclipse.ui.editors.preferencePages.Annotations"
-MarkOccurrencesConfigurationBlock_link= The appearance can be configured on the <a href=\"org.eclipse.ui.editors.preferencePages.Annotations\">Annotations</a> preference page.
+MarkOccurrencesConfigurationBlock_link= The appearance can be configured on the <a href=\"org.eclipse.ui.editors.preferencePages.Annotations\">'Annotations'</a> preference page.
 
-MarkOccurrencesConfigurationBlock_link_tooltip=Show the annotations preferences
 MarkOccurrencesConfigurationBlock_markOccurrences= Mark &occurrences of the selected element in the current file.
 MarkOccurrencesConfigurationBlock_markTypeOccurrences= &Types
 MarkOccurrencesConfigurationBlock_markMethodOccurrences= &Methods
@@ -226,26 +229,14 @@ MarkOccurrencesConfigurationBlock_markImplementors= Methods implementing an &int
 MarkOccurrencesConfigurationBlock_markBreakContinueTargets= Targets of &break and continue statements
 MarkOccurrencesConfigurationBlock_stickyOccurrences= &Keep marks when the selection changes
 
-JavaElementInfoPage_binary=binary
-JavaElementInfoPage_classpath_entry_kind=Classpath entry kind:
-JavaElementInfoPage_library=library
-JavaElementInfoPage_nameLabel=Name:
-JavaElementInfoPage_not_present=not present
-JavaElementInfoPage_package=Package:
-JavaElementInfoPage_package_contents=Package contents:
-JavaElementInfoPage_project=project
-JavaElementInfoPage_resource_path=Resource path:
-JavaElementInfoPage_source=source
-JavaElementInfoPage_variable=variable
-JavaElementInfoPage_variable_path=Variable path:
-JavaElementInfoPage_location=Location:
-
 JavadocConfigurationPropertyPage_IsPackageFragmentRoot_description=Specify the location (URL) of the documentation generated by Javadoc. The Javadoc location will contain a file called 'package-list'.
 JavadocConfigurationBlock_workspace_archive_selection_dialog_title=Javadoc Archive Selection Dialog
 JavadocConfigurationBlock_workspace_archive_selection_dialog_description=&Choose the archive containing the documentation:
 JavadocConfigurationPropertyPage_IsIncorrectElement_description=Javadoc location can only be attached to Java projects or archives and class folders in Java projects. Source folders use the location specified at their project.
 JavadocConfigurationPropertyPage_IsJavaProject_description=Specify the location of the project\'s Javadoc documentation. This location is used by the Javadoc export wizard as the default value and by the \'Open Attached Javadoc\' action. For example: \'file:/c:/myworkspace/myproject/doc\'.
 JavadocConfigurationPropertyPage_invalid_container=The current class path entry belongs to container ''{0}'' which can not be configured.
+JavadocConfigurationPropertyPage_location_path=&Location path:
+JavadocConfigurationPropertyPage_locationPath_none=(none)
 JavadocConfigurationPropertyPage_not_supported=The current class path entry belongs to container ''{0}'' which does not support the attachment of Javadoc to its entries.
 
 JavadocConfigurationBlock_browse_archive_button=&Browse...
@@ -285,6 +276,8 @@ SourceAttachmentPropertyPage_error_message=An error occurred while associating t
 SourceAttachmentPropertyPage_not_supported=The current class path entry belongs to container ''{0}'' which does not support the attachment of sources to its entries.
 SourceAttachmentPropertyPage_noarchive_message=Source can only be attached to archive and class folders in Java projects.
 SourceAttachmentPropertyPage_invalid_container=The current class path entry belongs to container ''{0}'' which can not be configured.
+SourceAttachmentPropertyPage_location_path=&Location path:
+SourceAttachmentPropertyPage_locationPath_none=(none)
 
 NativeLibrariesPropertyPage_invalidElementSelection_desription=Native libraries can not be attached to the selected element.
 NativeLibrariesPropertyPage_errorAttaching_message=An error occurred while associating the library.
@@ -355,7 +348,8 @@ JavaBuildConfigurationBlock_ignore=Ignore
 
 JavaBuildConfigurationBlock_needsbuild_title=Building Settings Changed
 JavaBuildConfigurationBlock_needsfullbuild_message=The Building settings have changed. A full rebuild is required for changes to take effect. Do the full build now?
-ProblemSeveritiesConfigurationBlock_treat_optional_as_fatal=Treat optional errors like &fatal compiler errors (make compiled code not executable)
+ProblemSeveritiesConfigurationBlock_include_assert_in_null_analysis= Include 'assert' in null analysis
+ProblemSeveritiesConfigurationBlock_treat_optional_as_fatal=Treat above errors like &fatal compiler errors (make compiled code not executable)
 JavaBuildConfigurationBlock_needsprojectbuild_message=The Building settings have changed. A rebuild of the project is required for changes to take effect. Build the project now?
 
 JavaBuildConfigurationBlock_resource_filter_description=Filtered resources are not copied to the output folder during a build. List is comma separated (e.g. '*.doc, plugin.xml, scripts/')
@@ -396,7 +390,8 @@ ProblemSeveritiesConfigurationBlock_needsbuild_title=Error/Warning Settings Chan
 ProblemSeveritiesConfigurationBlock_needsfullbuild_message=The Error/Warning settings have changed. A full rebuild is required for changes to take effect. Do the full build now?
 ProblemSeveritiesConfigurationBlock_needsprojectbuild_message=The Error/Warning settings have changed. A rebuild of the project is required for changes to take effect. Build the project now?
 
-ProblemSeveritiesConfigurationBlock_common_description=Select the severity level for the following optional Java compiler problems:
+ProblemSeveritiesConfigurationBlock_common_description=&Select the severity level for the following optional Java compiler problems:
+ProblemSeveritiesConfigurationBlock_pb_unavoidable_generic_type_problems=Ignore unavoidable generic type problems
 ProblemSeveritiesConfigurationBlock_pb_unsafe_type_op_label=Unchecked generic type operation:
 ProblemSeveritiesConfigurationBlock_pb_raw_type_reference=Usage of a raw type:
 ProblemSeveritiesConfigurationBlock_pb_final_param_bound_label=Generic t&ype parameter declared with a final type bound:
@@ -414,6 +409,7 @@ ProblemSeveritiesConfigurationBlock_pb_unhandled_surpresswarning_tokens=Unhandle
 ProblemSeveritiesConfigurationBlock_pb_unused_throwing_exception_when_overriding_label=Ignore in overriding and implementing methods
 ProblemSeveritiesConfigurationBlock_pb_unused_throwing_exception_ignore_unchecked_label=Ignore 'Exception' and 'Throwable'
 ProblemSeveritiesConfigurationBlock_pb_missing_serial_version_label=Seriali&zable class without serialVersionUID:
+ProblemSeveritiesConfigurationBlock_pb_missing_static_on_method_label=Method can be static:
 ProblemSeveritiesConfigurationBlock_pb_missing_synchronized_on_inherited_method=Missing synchronized modifier on inherited method:
 ProblemSeveritiesConfigurationBlock_pb_missing_hashcode_method=Class overrides 'equals()' but not 'hashCode()':
 
@@ -425,11 +421,11 @@ ProblemSeveritiesConfigurationBlock_pb_indirect_access_to_static_label=&Indirect
 ProblemSeveritiesConfigurationBlock_pb_hidden_catchblock_label=Hidden catch bloc&k:
 ProblemSeveritiesConfigurationBlock_pb_static_access_receiver_label=Non-static access to static member:
 ProblemSeveritiesConfigurationBlock_pb_unused_imports_label=Unused &import:
-ProblemSeveritiesConfigurationBlock_pb_unused_local_label=&Local variable is never read:
-ProblemSeveritiesConfigurationBlock_pb_unused_parameter_label=Parameter is never read:
+ProblemSeveritiesConfigurationBlock_pb_unused_local_label=&Value of local variable is not used:
+ProblemSeveritiesConfigurationBlock_pb_unused_parameter_label=Value of parameter is not used:
 ProblemSeveritiesConfigurationBlock_pb_signal_param_in_overriding_label=Ignore in overriding and implementing methods
 ProblemSeveritiesConfigurationBlock_pb_suppress_optional_errors_label=Suppress optional errors with '@SuppressWarnings'
-ProblemSeveritiesConfigurationBlock_pb_unused_private_label=Unused local or private member:
+ProblemSeveritiesConfigurationBlock_pb_unused_private_label=Unused private member:
 ProblemSeveritiesConfigurationBlock_pb_parameter_assignment=Parameter assignment:
 ProblemSeveritiesConfigurationBlock_pb_redundant_null_check=Redundant null check:
 ProblemSeveritiesConfigurationBlock_pb_redundant_super_interface_label=Redundant super interface:
@@ -443,6 +439,7 @@ ProblemSeveritiesConfigurationBlock_pb_unnecessary_type_check_label=Unnecessary
 ProblemSeveritiesConfigurationBlock_pb_incomplete_enum_switch_label=Enum type constant not covered on 'switch':
 ProblemSeveritiesConfigurationBlock_pb_null_reference=Null pointer access:
 ProblemSeveritiesConfigurationBlock_pb_potential_null_reference=Potential null pointer access:
+ProblemSeveritiesConfigurationBlock_pb_potentially_missing_static_on_method_label=Method can potentially be static:
 ProblemSeveritiesConfigurationBlock_pb_fall_through_case='switch' case fall-through:
 ProblemSeveritiesConfigurationBlock_pb_unnecessary_else_label=Unnecessary 'else' statement:
 ProblemSeveritiesConfigurationBlock_pb_synth_access_emul_label=Access to a non-accessible member of an enclosing type:
@@ -479,7 +476,7 @@ JavadocProblemsConfigurationBlock_needsbuild_title=Javadoc Settings Changed
 JavadocProblemsConfigurationBlock_needsfullbuild_message=The Javadoc settings have changed. A full rebuild is required for changes to take effect. Do the full build now?
 JavadocProblemsConfigurationBlock_needsprojectbuild_message=The Javadoc settings have changed. A rebuild of the project is required for changes to take effect. Build the project now?
 
-JavadocProblemsConfigurationBlock_javadoc_description=Severity level for problems in Javadoc comments:
+JavadocProblemsConfigurationBlock_javadoc_description=Severity levels for problems in Javadoc comments:
 
 JavadocProblemsConfigurationBlock_pb_javadoc_support_label=Proc&ess Javadoc comments
 JavadocProblemsConfigurationBlock_pb_invalid_javadoc_label=Mal&formed Javadoc comments:
@@ -493,6 +490,7 @@ JavadocProblemsConfigurationBlock_pb_missing_javadoc_tags_overriding_label=&Igno
 JavadocProblemsConfigurationBlock_pb_missing_comments_label=Missing &Javadoc comments:
 JavadocProblemsConfigurationBlock_pb_missing_comments_visibility_label=Only &consider members as visible as:
 JavadocProblemsConfigurationBlock_pb_missing_comments_overriding_label=I&gnore in overriding and implementing methods
+JavadocProblemsConfigurationBlock_pb_missing_comments_method_type_parameter_label=Ignore met&hod type parameters
 JavadocProblemsConfigurationBlock_pb_missing_tag_description=&Missing tag descriptions:
 JavadocProblemsConfigurationBlock_returnTag=Validate @return tags
 
@@ -528,29 +526,21 @@ ComplianceConfigurationBlock_source_compatibility_label=Source co&mpatibility:
 ComplianceConfigurationBlock_codegen_targetplatform_label=Ge&nerated .class files compatibility:
 ComplianceConfigurationBlock_pb_assert_as_identifier_label=Disallow identifie&rs called 'assert':
 ComplianceConfigurationBlock_pb_enum_as_identifier_label=Disallo&w identifiers called 'enum':
-ComplianceConfigurationBlock_compliance_follows_EE_label=&Use compliance from execution environment on the <a>Java Build Path</a>
-ComplianceConfigurationBlock_compliance_follows_EE_with_EE_label=&Use compliance from execution environment ''{0}'' on the <a>Java Build Path</a>
+ComplianceConfigurationBlock_compliance_follows_EE_label=&Use compliance from execution environment on the <a>'Java Build Path'</a>
+ComplianceConfigurationBlock_compliance_follows_EE_with_EE_label=&Use compliance from execution environment ''{0}'' on the <a>''Java Build Path''</a>
 ComplianceConfigurationBlock_compliance_group_label=JDK Compliance
 ComplianceConfigurationBlock_classfiles_group_label=Classfile Generation
 ComplianceConfigurationBlock_classfile_greater_compliance=Classfile compatibility must be equal or less than compliance level.
 ComplianceConfigurationBlock_classfile_greater_source=Classfile compatibility must be equal or greater than source compatibility.
 
+ComplianceConfigurationBlock_17_ee_warning=The 1.7 compiler compliance level is not yet supported.
 ComplianceConfigurationBlock_jrecompliance_info=When selecting {0} compliance, make sure to have a compatible JRE installed and activated (currently {1}). <a href="1" >Configure...</a>
 ComplianceConfigurationBlock_cldc11_requires_source13_compliance_se14=CLDC 1.1 requires source level 1.3 and compliance 1.4 or less
-ComplianceConfigurationBlock_jrecompliance_info_project=When selecting {0} compliance, make sure to have a compatible JRE installed and activated (currently {1}). Configure the <a href="1" >Installed JREs</a> and <a href="2" >Execution Environments</a>, or change the JRE on the <a href="3" >Java build path</a>.
+ComplianceConfigurationBlock_jrecompliance_info_project=When selecting {0} compliance, make sure to have a compatible JRE installed and activated (currently {1}). Configure the <a href="1" >''Installed JREs''</a> and <a href="2" >''Execution Environments''</a>, or change the JRE on the <a href="3" >''Java Build Path''</a>.
 
 CodeStylePreferencePage_title=Code Style
 CodeTemplatesPreferencePage_title=Code Templates
 
-JavaCategoryPropertyPage_text=<form>\
-Project specific settings for project ''{0}''. If specified, they override settings defined in the global workspace preferences.\
-<li><a href=''{1}''>Build path</a>: Configures the paths used to find source files and classes and defines the output locations for the generated class files.</li>\
-<li><a href=''{2}''>Compiler</a>: Specifies the used compiler compliance and various options for the Java compiler like <a href=''{3}''>Todo</a> tasks, problem <a href=''{4}''>severities</a>, <a href=''{5}''>Javadoc</a> processing and <a href=''{6}''>build</a> options</li>\
-<li><a href=''{7}''>Code Style</a>: Defines the rules used when creating code, including your preferred code <a href=''{8}''>formatter</a> settings, used code <a href=''{9}''>templates</a> and <a href=''{10}''>import</a> order</li>\
-<li><a href=''{11}''>Javadoc location</a>: Configures the location where you want to generate your documentation to.</li>\
-</form>
-
-
 NameConventionConfigurationBlock_field_label=Fields
 NameConventionConfigurationBlock_static_label=Static Fields
 NameConventionConfigurationBlock_static_final_label=Static Final Fields
@@ -667,7 +657,7 @@ CodeTemplateBlock_export_error_title= Export Templates
 CodeTemplateBlock_export_error_hidden= Export failed.\n{0} is a hidden file.
 CodeTemplateBlock_export_error_canNotWrite= Export failed.\n{0} cannot be modified.
 
-TypeFilterPreferencePage_description=All types whose fully qualified name matches the selected filter strings will not be shown in the 'Open Type' dialog. They will also be ignored in content assist or quick fix proposals. For example 'java.awt.*' will hide all types from the awt packages.
+TypeFilterPreferencePage_description=All types whose fully qualified name matches the selected filter strings will not be shown in the 'Open Type' dialog. They will also be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages.
 TypeFilterPreferencePage_list_label=&Filter list:
 TypeFilterPreferencePage_add_button=Add&...
 TypeFilterPreferencePage_addpackage_button=Add &Packages...
@@ -820,17 +810,18 @@ PropertiesFileEditorPreferencePage_italic= &Italic
 PropertiesFileEditorPreferencePage_strikethrough=&Strikethrough
 PropertiesFileEditorPreferencePage_underline=&Underline
 PropertiesFileEditorPreferencePage_preview= Previe&w:
-PropertiesFileEditorPreferencePage_link= Properties file editor preferences. Note that some preferences may be set on the <a>Text Editors</a> preference page.
-PropertiesFileEditorPreferencePage_link_tooltip= Show the shared text editor preferences
+
+# DO NOT TRANSLATE "org.eclipse.ui.preferencePages.GeneralTextEditor" and "org.eclipse.ui.preferencePages.ColorsAndFonts"
+PropertiesFileEditorPreferencePage_link= Properties file editor preferences. See <a href=\"org.eclipse.ui.preferencePages.GeneralTextEditor\">'Text Editors'</a> for general text editor preferences and <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">'Colors and Fonts'</a> to configure the font. 
 
 # smart typing block
 SmartTypingConfigurationBlock_autoclose_title=Automatically close
 SmartTypingConfigurationBlock_automove_title=Automatically insert at correct position
-SmartTypingConfigurationBlock_tabs_title=Tabulators
+SmartTypingConfigurationBlock_indentation_title=Indentation
 # The argument will be replaced by the tab display size
-SmartTypingConfigurationBlock_tabs_message_tab_text=The tab display value (currently {0}) and whether spaces are used to indent lines are configured on the <a>formatter preference page</a>. The current indentation mode uses tabs.
+SmartTypingConfigurationBlock_tabs_message_tab_text=The tab display value (currently {0}) and whether spaces are used to indent lines are configured on the <a>''Formatter''</a> preference page. The current indentation mode uses tabs.
 # The first argument will be replaced by the tab display size, the second by the indent size and the third by the NLSed string of 'SmartTypingConfigurationBlock_tabs_message_spaces' or 'SmartTypingConfigurationBlock_tabs_message_tabs' (see below)  
-SmartTypingConfigurationBlock_tabs_message_others_text=The tab display value (currently {0}) and whether spaces are used to indent lines are configured on the <a>formatter preference page</a>. The current indentation size is {1}, using {2}.
+SmartTypingConfigurationBlock_tabs_message_others_text=The tab display value (currently {0}) and whether spaces are used to indent lines are configured on the <a>''Formatter''</a> preference page. The current indentation size is {1}, using {2}.
 SmartTypingConfigurationBlock_tabs_message_tooltip=Go to the formatter preference page
 SmartTypingConfigurationBlock_tabs_message_spaces=spaces
 SmartTypingConfigurationBlock_tabs_message_tabs=tabs
@@ -844,13 +835,13 @@ SmartTypingConfigurationBlock_annotationReporting_link=Also see the <a href="org
 CodeAssistConfigurationBlock_insertionSection_title=Insertion
 CodeAssistConfigurationBlock_sortingSection_title=Sorting and Filtering
 CodeAssistConfigurationBlock_matchCamelCase_label=Show ca&mel case matches
-CodeAssistConfigurationBlock_autoactivationSection_title=Auto-Activation
+CodeAssistConfigurationBlock_autoactivationSection_title=Auto Activation
 # do not translate the href argument (org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)
-CodeAssistConfigurationBlock_restricted_link=Proposals with <a href="org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage">access restrictions</a>:
+TypeFilterPreferencePage_restricted_link=Type references with <a href="org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage">access restrictions</a>:
 # do not translate the href argument (org.eclipse.jdt.ui.preferences.TypeFilterPreferencePage)
 CodeAssistConfigurationBlock_typeFilters_link=Types along with their members can be filtered using <a href="org.eclipse.jdt.ui.preferences.TypeFilterPreferencePage">type filters</a>.
-CodeAssistConfigurationBlock_hideForbidden_label=Hide fo&rbidden references
-CodeAssistConfigurationBlock_hideDiscouraged_label=Hide dis&couraged references
+TypeFilterPreferencePage_hideForbidden_label=&Hide forbidden references
+TypeFilterPreferencePage_hideDiscouraged_label=Hide dis&couraged references
 CodeAssistConfigurationBlock_hideDeprecated_label=&Hide deprecated references
 
 # {0} will be replaced by the keyboard shortcut for the command (e.g. "Ctrl+Space", or "no shortcut") 
@@ -861,15 +852,12 @@ CodeAssistAdvancedConfigurationBlock_default_table_description=&Select the propo
 CodeAssistAdvancedConfigurationBlock_default_table_category_column_title=Default Proposal Kinds
 CodeAssistAdvancedConfigurationBlock_default_table_keybinding_column_title=Key Binding
 # do not translate the href argument (org.eclipse.ui.preferencePages.Keys)
-CodeAssistAdvancedConfigurationBlock_key_binding_hint=Individual key bindings can be assigned to each proposal kind on the <a href="org.eclipse.ui.preferencePages.Keys">Keys</a> preference page.
+CodeAssistAdvancedConfigurationBlock_key_binding_hint=Individual key bindings can be assigned to each proposal kind on the <a href="org.eclipse.ui.preferencePages.Keys">'Keys'</a> preference page.
 CodeAssistAdvancedConfigurationBlock_separate_table_description=&Content assist cycling: Select the proposal kinds that are cycled through when repeatedly invoking content assist:
 CodeAssistAdvancedConfigurationBlock_separate_table_category_column_title=Separate Proposal Kinds
 CodeAssistAdvancedConfigurationBlock_Up=&Up
 CodeAssistAdvancedConfigurationBlock_Down=D&own
-CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout=&Timeout for fetching a parameter name from attached Javadoc:
-
-# Abbreviation for milliseconds
-CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_ms=ms
+CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout=&Timeout for fetching a parameter name from attached Javadoc (ms):
 
 CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_emptyInput=Empty input.
 CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_invalidInput=''{0}'' is not a valid input.
@@ -905,8 +893,21 @@ ProjectSelectionDialog_desciption=&Select the project to configure:
 ProjectSelectionDialog_filter=Show only &projects with project specific settings
 NativeLibrariesPropertyPage_errorAttaching_title=Error Attaching native library
 NativeLibrariesPropertyPage_invalid_container=The current class path entry belongs to container ''{0}'' which can not be configured.
+NativeLibrariesPropertyPage_location_path=&Location path:
+NativeLibrariesPropertyPage_locationPath_none=(none)
 NativeLibrariesPropertyPage_not_supported=The current class path entry belongs to container ''{0}'' which does not support the attachment of native libraries to its entries.
 NativeLibrariesPropertyPage_read_only=The current class path entry belongs to container ''{0}'' which does not allow user modifications to native libraries on its entries.
 
 CleanUpPreferencePage_Description=A&ctive profile:
 CleanUpPreferencePage_Title=Code Clean Up
+
+OptionsConfigurationBlock_Disabled=disabled
+OptionsConfigurationBlock_Enabled=enabled
+OptionsConfigurationBlock_NoOptionMatchesTheFilter=No option matches the filter.
+OptionsConfigurationBlock_Off=off
+OptionsConfigurationBlock_On=on
+OptionsConfigurationBlock_RefreshFilter=Refresh Filter
+OptionsConfigurationBlock_TypeFilterText=type filter text (use ~ to filter on preference values, e.g. ~ignore or ~off)
+
+FilterTextControl_Clear=Clear
+FilterTextControl_ClearFilterField=Clear filter field
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java
index 2403dd2..02a513b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,11 @@
 package org.eclipse.jdt.internal.ui.preferences;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
 
 import org.eclipse.core.resources.IProject;
 
@@ -86,6 +86,8 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 	private static final Key PREF_PB_NULL_REFERENCE= getJDTCoreKey(JavaCore.COMPILER_PB_NULL_REFERENCE);
 	private static final Key PREF_PB_POTENTIAL_NULL_REFERENCE= getJDTCoreKey(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE);
 	private static final Key PREF_PB_REDUNDANT_NULL_CHECK= getJDTCoreKey(JavaCore.COMPILER_PB_REDUNDANT_NULL_CHECK);
+
+	private static final Key PREF_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS= getJDTCoreKey(JavaCore.COMPILER_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS);
 	private static final Key PREF_PB_REDUNDANT_SUPERINTERFACE= getJDTCoreKey(JavaCore.COMPILER_PB_REDUNDANT_SUPERINTERFACE);
 
 	private static final Key PREF_PB_UNUSED_WARNING_TOKEN= getJDTCoreKey(JavaCore.COMPILER_PB_UNUSED_WARNING_TOKEN);
@@ -101,6 +103,7 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 	private static final Key PREF_15_PB_TYPE_PARAMETER_HIDING= getJDTCoreKey(JavaCore.COMPILER_PB_TYPE_PARAMETER_HIDING);
 	private static final Key PREF_15_PB_INCOMPLETE_ENUM_SWITCH= getJDTCoreKey(JavaCore.COMPILER_PB_INCOMPLETE_ENUM_SWITCH);
 	private static final Key PREF_15_PB_RAW_TYPE_REFERENCE= getJDTCoreKey(JavaCore.COMPILER_PB_RAW_TYPE_REFERENCE);
+	private static final Key PREF_15_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS= getJDTCoreKey(JavaCore.COMPILER_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS);
 
 	private static final Key PREF_PB_SUPPRESS_WARNINGS= getJDTCoreKey(JavaCore.COMPILER_PB_SUPPRESS_WARNINGS);
 	private static final Key PREF_PB_SUPPRESS_OPTIONAL_ERRORS= getJDTCoreKey(JavaCore.COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS);
@@ -110,8 +113,9 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 	private static final Key PREF_PB_MISSING_HASHCODE_METHOD= getJDTCoreKey(JavaCore.COMPILER_PB_MISSING_HASHCODE_METHOD);
 	private static final Key PREF_PB_DEAD_CODE= getJDTCoreKey(JavaCore.COMPILER_PB_DEAD_CODE);
 	private static final Key PREF_PB_UNUSED_OBJECT_ALLOCATION= getJDTCoreKey(JavaCore.COMPILER_PB_UNUSED_OBJECT_ALLOCATION);
+	private static final Key PREF_PB_MISSING_STATIC_ON_METHOD= getJDTCoreKey(JavaCore.COMPILER_PB_MISSING_STATIC_ON_METHOD);
+	private static final Key PREF_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD= getJDTCoreKey(JavaCore.COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD);
 
-	
 	// values
 	private static final String ERROR= JavaCore.ERROR;
 	private static final String WARNING= JavaCore.WARNING;
@@ -120,9 +124,10 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 	private static final String ENABLED= JavaCore.ENABLED;
 	private static final String DISABLED= JavaCore.DISABLED;
 
-
 	private PixelConverter fPixelConverter;
 
+	private FilteredPreferenceTree fFilteredPrefTree;
+
 	public ProblemSeveritiesConfigurationBlock(IStatusChangeListener context, IProject project, IWorkbenchPreferenceContainer container) {
 		super(context, project, getKeys(), container);
 
@@ -150,24 +155,27 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 				PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE,
 				PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE,
 				PREF_PB_MISSING_SERIAL_VERSION, PREF_PB_PARAMETER_ASSIGNMENT, PREF_PB_NULL_REFERENCE, PREF_PB_POTENTIAL_NULL_REFERENCE,
-				PREF_PB_REDUNDANT_NULL_CHECK, PREF_PB_FALLTHROUGH_CASE, PREF_PB_REDUNDANT_SUPERINTERFACE,
-				PREF_PB_UNUSED_WARNING_TOKEN,
+				PREF_PB_REDUNDANT_NULL_CHECK, PREF_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS,
+				PREF_PB_FALLTHROUGH_CASE, PREF_PB_REDUNDANT_SUPERINTERFACE, PREF_PB_UNUSED_WARNING_TOKEN,
 				PREF_15_PB_UNCHECKED_TYPE_OPERATION, PREF_15_PB_FINAL_PARAM_BOUND, PREF_15_PB_VARARGS_ARGUMENT_NEED_CAST,
 				PREF_15_PB_AUTOBOXING_PROBLEM, PREF_15_PB_MISSING_OVERRIDE_ANNOTATION, PREF_16_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION,
 				PREF_15_PB_ANNOTATION_SUPER_INTERFACE,
 				PREF_15_PB_TYPE_PARAMETER_HIDING, PREF_15_PB_INCOMPLETE_ENUM_SWITCH, PREF_PB_MISSING_DEPRECATED_ANNOTATION,
-				PREF_15_PB_RAW_TYPE_REFERENCE, PREF_PB_FATAL_OPTIONAL_ERROR,
+				PREF_15_PB_RAW_TYPE_REFERENCE, PREF_15_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS,
+				PREF_PB_FATAL_OPTIONAL_ERROR,
 				PREF_PB_FORBIDDEN_REFERENCE, PREF_PB_DISCOURRAGED_REFERENCE,
 				PREF_PB_SUPPRESS_WARNINGS, PREF_PB_SUPPRESS_OPTIONAL_ERRORS,
 				PREF_PB_UNHANDLED_WARNING_TOKEN,
 				PREF_PB_COMPARING_IDENTICAL, PREF_PB_MISSING_SYNCHRONIZED_ON_INHERITED_METHOD, PREF_PB_MISSING_HASHCODE_METHOD,
-				PREF_PB_DEAD_CODE, PREF_PB_UNUSED_OBJECT_ALLOCATION
+				PREF_PB_DEAD_CODE, PREF_PB_UNUSED_OBJECT_ALLOCATION,
+				PREF_PB_MISSING_STATIC_ON_METHOD, PREF_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD
 			};
 	}
 
 	/*
 	 * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		fPixelConverter= new PixelConverter(parent);
 		setShell(parent.getShell());
@@ -180,7 +188,7 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 		mainComp.setLayout(layout);
 
 		Composite commonComposite= createStyleTabContent(mainComp);
-		GridData gridData= new GridData(GridData.FILL, GridData.FILL, true, true);
+		GridData gridData= new GridData(SWT.FILL, SWT.FILL, true, true);
 		gridData.heightHint= fPixelConverter.convertHeightInCharsToPixels(20);
 		commonComposite.setLayoutData(gridData);
 
@@ -201,21 +209,17 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 		String[] enabledDisabled= new String[] { ENABLED, DISABLED };
 		String[] disabledEnabled= new String[] { DISABLED, ENABLED };
 
+		fFilteredPrefTree= new FilteredPreferenceTree(this, folder, PreferencesMessages.ProblemSeveritiesConfigurationBlock_common_description);
+		final ScrolledPageContent sc1= fFilteredPrefTree.getScrolledPageContent();
+		
 		int nColumns= 3;
 
-		final ScrolledPageContent sc1 = new ScrolledPageContent(folder);
-
 		Composite composite= sc1.getBody();
 		GridLayout layout= new GridLayout(nColumns, false);
 		layout.marginHeight= 0;
 		layout.marginWidth= 0;
 		composite.setLayout(layout);
 
-		Label description= new Label(composite, SWT.LEFT | SWT.WRAP);
-		description.setFont(description.getFont());
-		description.setText(PreferencesMessages.ProblemSeveritiesConfigurationBlock_common_description);
-		description.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, true, false, nColumns - 1, 1));
-
 		int indentStep=  fPixelConverter.convertWidthInCharsToPixels(1);
 
 		int defaultIndent= indentStep * 0;
@@ -223,287 +227,301 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 		String label;
 		ExpandableComposite excomposite;
 		Composite inner;
+		PreferenceTreeNode section;
+		PreferenceTreeNode node;
+		Key twistieKey;
 
 		// --- style
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_code_style;
-		excomposite= createStyleSection(composite, label, nColumns);
+		twistieKey= OptionsConfigurationBlock.getLocalKey("ProblemSeveritiesConfigurationBlock_section_code_style"); //$NON-NLS-1$
+		section= fFilteredPrefTree.addExpandableComposite(composite, label, nColumns, twistieKey, null, false);
+		excomposite= getExpandableComposite(twistieKey);
 
-		inner= new Composite(excomposite, SWT.NONE);
-		inner.setFont(composite.getFont());
-		inner.setLayout(new GridLayout(nColumns, false));
-		excomposite.setClient(inner);
+		inner= createInnerComposite(excomposite, nColumns, composite.getFont());
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_static_access_receiver_label;
-		addComboBox(inner, label, PREF_PB_STATIC_ACCESS_RECEIVER, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_STATIC_ACCESS_RECEIVER, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_indirect_access_to_static_label;
-		addComboBox(inner, label, PREF_PB_INDIRECT_STATIC_ACCESS, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_INDIRECT_STATIC_ACCESS, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unqualified_field_access_label;
-		addComboBox(inner, label, PREF_PB_UNQUALIFIED_FIELD_ACCESS, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNQUALIFIED_FIELD_ACCESS, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_undocumented_empty_block_label;
-		addComboBox(inner, label, PREF_PB_UNDOCUMENTED_EMPTY_BLOCK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNDOCUMENTED_EMPTY_BLOCK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_synth_access_emul_label;
-		addComboBox(inner, label, PREF_PB_SYNTHETIC_ACCESS_EMULATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_SYNTHETIC_ACCESS_EMULATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_method_naming_label;
-		addComboBox(inner, label, PREF_PB_METHOD_WITH_CONSTRUCTOR_NAME, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_METHOD_WITH_CONSTRUCTOR_NAME, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_parameter_assignment;
-		addComboBox(inner, label, PREF_PB_PARAMETER_ASSIGNMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_PARAMETER_ASSIGNMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_non_externalized_strings_label;
-		addComboBox(inner, label, PREF_PB_NON_EXTERNALIZED_STRINGS, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_NON_EXTERNALIZED_STRINGS, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
+		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_missing_static_on_method_label;
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_MISSING_STATIC_ON_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
+		
+		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_potentially_missing_static_on_method_label;
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
+		
 		// --- potential_programming_problems
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_potential_programming_problems;
-		excomposite= createStyleSection(composite, label, nColumns);
+		twistieKey= OptionsConfigurationBlock.getLocalKey("ProblemSeveritiesConfigurationBlock_section_potential_programming_problems"); //$NON-NLS-1$
+		section= fFilteredPrefTree.addExpandableComposite(composite, label, nColumns, twistieKey, null, false);
+		excomposite= getExpandableComposite(twistieKey);
 
-		inner= new Composite(excomposite, SWT.NONE);
-		inner.setFont(composite.getFont());
-		inner.setLayout(new GridLayout(nColumns, false));
-		excomposite.setClient(inner);
+		inner= createInnerComposite(excomposite, nColumns, composite.getFont());
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_missing_serial_version_label;
-		addComboBox(inner, label, PREF_PB_MISSING_SERIAL_VERSION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_MISSING_SERIAL_VERSION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_no_effect_assignment_label;
-		addComboBox(inner, label, PREF_PB_NO_EFFECT_ASSIGNMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_NO_EFFECT_ASSIGNMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_accidential_assignement_label;
-		addComboBox(inner, label, PREF_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_finally_block_not_completing_label;
-		addComboBox(inner, label, PREF_PB_FINALLY_BLOCK_NOT_COMPLETING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_FINALLY_BLOCK_NOT_COMPLETING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_empty_statement_label;
-		addComboBox(inner, label, PREF_PB_EMPTY_STATEMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_EMPTY_STATEMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_char_array_in_concat_label;
-		addComboBox(inner, label, PREF_PB_CHAR_ARRAY_IN_CONCAT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_CHAR_ARRAY_IN_CONCAT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_hidden_catchblock_label;
-		addComboBox(inner, label, PREF_PB_HIDDEN_CATCH_BLOCK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_HIDDEN_CATCH_BLOCK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_inexact_vararg_label;
-		addComboBox(inner, label, PREF_15_PB_VARARGS_ARGUMENT_NEED_CAST, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_VARARGS_ARGUMENT_NEED_CAST, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_autoboxing_problem_label;
-		addComboBox(inner, label, PREF_15_PB_AUTOBOXING_PROBLEM, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_AUTOBOXING_PROBLEM, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_incomplete_enum_switch_label;
-		addComboBox(inner, label, PREF_15_PB_INCOMPLETE_ENUM_SWITCH, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_INCOMPLETE_ENUM_SWITCH, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_fall_through_case;
-		addComboBox(inner, label, PREF_PB_FALLTHROUGH_CASE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_FALLTHROUGH_CASE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_null_reference;
-		addComboBox(inner, label, PREF_PB_NULL_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_NULL_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_potential_null_reference;
-		addComboBox(inner, label, PREF_PB_POTENTIAL_NULL_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_POTENTIAL_NULL_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_comparing_identical;
-		addComboBox(inner, label, PREF_PB_COMPARING_IDENTICAL, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_COMPARING_IDENTICAL, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_missing_synchronized_on_inherited_method;
-		addComboBox(inner, label, PREF_PB_MISSING_SYNCHRONIZED_ON_INHERITED_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_MISSING_SYNCHRONIZED_ON_INHERITED_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_missing_hashcode_method;
-		addComboBox(inner, label, PREF_PB_MISSING_HASHCODE_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_MISSING_HASHCODE_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_dead_code;
-		addComboBox(inner, label, PREF_PB_DEAD_CODE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_DEAD_CODE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 		
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_object_allocation_label;
-		addComboBox(inner, label, PREF_PB_UNUSED_OBJECT_ALLOCATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_OBJECT_ALLOCATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		// --- name_shadowing
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_name_shadowing;
-		excomposite= createStyleSection(composite, label, nColumns);
+		twistieKey= OptionsConfigurationBlock.getLocalKey("ProblemSeveritiesConfigurationBlock_section_name_shadowing"); //$NON-NLS-1$
+		section= fFilteredPrefTree.addExpandableComposite(composite, label, nColumns, twistieKey, null, false);
+		excomposite= getExpandableComposite(twistieKey);
 
-		inner= new Composite(excomposite, SWT.NONE);
-		inner.setFont(composite.getFont());
-		inner.setLayout(new GridLayout(nColumns, false));
-		excomposite.setClient(inner);
+		inner= createInnerComposite(excomposite, nColumns, composite.getFont());
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_field_hiding_label;
-		addComboBox(inner, label, PREF_PB_FIELD_HIDING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_FIELD_HIDING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_local_variable_hiding_label;
-		addComboBox(inner, label, PREF_PB_LOCAL_VARIABLE_HIDING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		node= fFilteredPrefTree.addComboBox(inner, label, PREF_PB_LOCAL_VARIABLE_HIDING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_special_param_hiding_label;
-		addCheckBox(inner, label, PREF_PB_SPECIAL_PARAMETER_HIDING_FIELD, enabledDisabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_SPECIAL_PARAMETER_HIDING_FIELD, enabledDisabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_type_parameter_hiding_label;
-		addComboBox(inner, label, PREF_15_PB_TYPE_PARAMETER_HIDING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_TYPE_PARAMETER_HIDING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_overriding_pkg_dflt_label;
-		addComboBox(inner, label, PREF_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_incompatible_interface_method_label;
-		addComboBox(inner, label, PREF_PB_INCOMPATIBLE_INTERFACE_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_INCOMPATIBLE_INTERFACE_METHOD, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		// --- API access rules
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_deprecations;
-		excomposite= createStyleSection(composite, label, nColumns);
+		twistieKey= OptionsConfigurationBlock.getLocalKey("ProblemSeveritiesConfigurationBlock_section_deprecations"); //$NON-NLS-1$
+		section= fFilteredPrefTree.addExpandableComposite(composite, label, nColumns, twistieKey, null, false);
+		excomposite= getExpandableComposite(twistieKey);
 
-		inner= new Composite(excomposite, SWT.NONE);
-		inner.setFont(composite.getFont());
-		inner.setLayout(new GridLayout(nColumns, false));
-		excomposite.setClient(inner);
+		inner= createInnerComposite(excomposite, nColumns, composite.getFont());
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_deprecation_label;
-		addComboBox(inner, label, PREF_PB_DEPRECATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		node= fFilteredPrefTree.addComboBox(inner, label, PREF_PB_DEPRECATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_deprecation_in_deprecation_label;
-		addCheckBox(inner, label, PREF_PB_DEPRECATION_IN_DEPRECATED_CODE, enabledDisabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_DEPRECATION_IN_DEPRECATED_CODE, enabledDisabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_deprecation_when_overriding_label;
-		addCheckBox(inner, label, PREF_PB_DEPRECATION_WHEN_OVERRIDING, enabledDisabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_DEPRECATION_WHEN_OVERRIDING, enabledDisabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_forbidden_reference_label;
-		addComboBox(inner, label, PREF_PB_FORBIDDEN_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, 0);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_FORBIDDEN_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_discourraged_reference_label;
-		addComboBox(inner, label, PREF_PB_DISCOURRAGED_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, 0);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_DISCOURRAGED_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 
 		// --- unnecessary_code
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_unnecessary_code;
-		excomposite= createStyleSection(composite, label, nColumns);
+		twistieKey= OptionsConfigurationBlock.getLocalKey("ProblemSeveritiesConfigurationBlock_section_unnecessary_code"); //$NON-NLS-1$
+		section= fFilteredPrefTree.addExpandableComposite(composite, label, nColumns, twistieKey, null, false);
+		excomposite= getExpandableComposite(twistieKey);
 
-		inner= new Composite(excomposite, SWT.NONE);
-		inner.setFont(composite.getFont());
-		inner.setLayout(new GridLayout(nColumns, false));
-		excomposite.setClient(inner);
+		inner= createInnerComposite(excomposite, nColumns, composite.getFont());
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_local_label;
-		addComboBox(inner, label, PREF_PB_UNUSED_LOCAL, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_LOCAL, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_parameter_label;
-		addComboBox(inner, label, PREF_PB_UNUSED_PARAMETER, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		node= fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_PARAMETER, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_signal_param_in_overriding_label;
-		addCheckBox(inner, label, PREF_PB_SIGNAL_PARAMETER_IN_OVERRIDING, disabledEnabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_SIGNAL_PARAMETER_IN_OVERRIDING, disabledEnabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_ignore_documented_unused_parameters;
-		addCheckBox(inner, label, PREF_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE, enabledDisabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE, enabledDisabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_imports_label;
-		addComboBox(inner, label, PREF_PB_UNUSED_IMPORT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_IMPORT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_private_label;
-		addComboBox(inner, label, PREF_PB_UNUSED_PRIVATE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_PRIVATE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_redundant_null_check;
-		addComboBox(inner, label, PREF_PB_REDUNDANT_NULL_CHECK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_REDUNDANT_NULL_CHECK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unnecessary_else_label;
-		addComboBox(inner, label, PREF_PB_UNNECESSARY_ELSE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNNECESSARY_ELSE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unnecessary_type_check_label;
-		addComboBox(inner, label, PREF_PB_UNNECESSARY_TYPE_CHECK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNNECESSARY_TYPE_CHECK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_throwing_exception_label;
-		addComboBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		node= fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_throwing_exception_when_overriding_label;
-		addCheckBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING, disabledEnabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING, disabledEnabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_ignore_documented_unused_exceptions;
-		addCheckBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE, enabledDisabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE, enabledDisabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_throwing_exception_ignore_unchecked_label;
-		addCheckBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE, enabledDisabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_UNUSED_DECLARED_THROWN_EXCEPTION_EXEMPT_EXCEPTION_AND_THROWABLE, enabledDisabled, extraIndent, node);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_label_label;
-		addComboBox(inner, label, PREF_PB_UNUSED_LABEL, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_LABEL, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_redundant_super_interface_label;
-		addComboBox(inner, label, PREF_PB_REDUNDANT_SUPERINTERFACE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_REDUNDANT_SUPERINTERFACE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		// --- generics
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_generics;
-		excomposite= createStyleSection(composite, label, nColumns);
-
+		twistieKey= OptionsConfigurationBlock.getLocalKey("ProblemSeveritiesConfigurationBlock_section_generics"); //$NON-NLS-1$
+		section= fFilteredPrefTree.addExpandableComposite(composite, label, nColumns, twistieKey, null, false);
+		excomposite= getExpandableComposite(twistieKey);
 
-		inner= new Composite(excomposite, SWT.NONE);
-		inner.setFont(composite.getFont());
-		inner.setLayout(new GridLayout(nColumns, false));
-		excomposite.setClient(inner);
+		inner= createInnerComposite(excomposite, nColumns, composite.getFont());
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unsafe_type_op_label;
-		addComboBox(inner, label, PREF_15_PB_UNCHECKED_TYPE_OPERATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_UNCHECKED_TYPE_OPERATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_raw_type_reference;
-		addComboBox(inner, label, PREF_15_PB_RAW_TYPE_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_RAW_TYPE_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_final_param_bound_label;
-		addComboBox(inner, label, PREF_15_PB_FINAL_PARAM_BOUND, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_FINAL_PARAM_BOUND, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
+		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unavoidable_generic_type_problems;
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_15_PB_UNAVOIDABLE_GENERIC_TYPE_PROBLEMS, disabledEnabled, defaultIndent, section);
+		
 		// --- annotations
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_annotations;
-		excomposite= createStyleSection(composite, label, nColumns);
+		twistieKey= OptionsConfigurationBlock.getLocalKey("ProblemSeveritiesConfigurationBlock_section_annotations"); //$NON-NLS-1$
+		section= fFilteredPrefTree.addExpandableComposite(composite, label, nColumns, twistieKey, null, false);
+		excomposite= getExpandableComposite(twistieKey);
 
-
-		inner= new Composite(excomposite, SWT.NONE);
-		inner.setFont(composite.getFont());
-		inner.setLayout(new GridLayout(nColumns, false));
-		excomposite.setClient(inner);
+		inner= createInnerComposite(excomposite, nColumns, composite.getFont());
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_missing_override_annotation_label;
-		addComboBox(inner, label, PREF_15_PB_MISSING_OVERRIDE_ANNOTATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		node= fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_MISSING_OVERRIDE_ANNOTATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_missing_override_annotation_for_interface_method_implementations_label;
-		addCheckBox(inner, label, PREF_16_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION, enabledDisabled, extraIndent);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_16_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION, enabledDisabled, extraIndent, node);
 		
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_missing_deprecated_annotation_label;
-		addComboBox(inner, label, PREF_PB_MISSING_DEPRECATED_ANNOTATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_MISSING_DEPRECATED_ANNOTATION, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_annotation_super_interface_label;
-		addComboBox(inner, label, PREF_15_PB_ANNOTATION_SUPER_INTERFACE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_15_PB_ANNOTATION_SUPER_INTERFACE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unhandled_surpresswarning_tokens;
-		addComboBox(inner, label, PREF_PB_UNHANDLED_WARNING_TOKEN, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNHANDLED_WARNING_TOKEN, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_enable_surpresswarning_annotation;
-		addCheckBox(inner, label, PREF_PB_SUPPRESS_WARNINGS, enabledDisabled, 0);
+		node= fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_SUPPRESS_WARNINGS, enabledDisabled, defaultIndent, section);
 
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_unused_suppresswarnings_token;
-		addComboBox(inner, label, PREF_PB_UNUSED_WARNING_TOKEN, errorWarningIgnore, errorWarningIgnoreLabels, extraIndent);
+		fFilteredPrefTree.addComboBox(inner, label, PREF_PB_UNUSED_WARNING_TOKEN, errorWarningIgnore, errorWarningIgnoreLabels, extraIndent, node);
 		
 		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_suppress_optional_errors_label;
-		addCheckBox(inner, label, PREF_PB_SUPPRESS_OPTIONAL_ERRORS, enabledDisabled, extraIndent);
-		
-		new Label(composite, SWT.NONE);
+		fFilteredPrefTree.addCheckBox(inner, label, PREF_PB_SUPPRESS_OPTIONAL_ERRORS, enabledDisabled, extraIndent, node);
 
-		String[] enableDisableValues= new String[] { ENABLED, DISABLED };
-		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_treat_optional_as_fatal;
-		addCheckBox(composite, label, PREF_PB_FATAL_OPTIONAL_ERROR, enableDisableValues, 0);
+		GridData gd= new GridData();
+		gd.verticalIndent= fPixelConverter.convertHeightInCharsToPixels(2);
+		gd.horizontalSpan= 2;
+		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_include_assert_in_null_analysis;
+		addCheckBox(composite, label, PREF_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS, enabledDisabled, defaultIndent);
+		getCheckBox(PREF_PB_INCLUDE_ASSERTS_IN_NULL_ANALYSIS).setLayoutData(gd);
 
+		label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_treat_optional_as_fatal;
+		addCheckBox(composite, label, PREF_PB_FATAL_OPTIONAL_ERROR, enabledDisabled, defaultIndent);
 
-		IDialogSettings section= JavaPlugin.getDefault().getDialogSettings().getSection(SETTINGS_SECTION_NAME);
-		restoreSectionExpansionStates(section);
+		IDialogSettings settingsSection= JavaPlugin.getDefault().getDialogSettings().getSection(SETTINGS_SECTION_NAME);
+		restoreSectionExpansionStates(settingsSection);
 
 		return sc1;
 	}
 
+	private Composite createInnerComposite(ExpandableComposite excomposite, int nColumns, Font font) {
+		Composite inner= new Composite(excomposite, SWT.NONE);
+		inner.setFont(font);
+		inner.setLayout(new GridLayout(nColumns, false));
+		excomposite.setClient(inner);
+		return inner;
+	}
+
 	/* (non-javadoc)
 	 * Update fields and validate.
 	 * @param changedKey Key that changed, or null, if all changed.
 	 */
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		if (!areSettingsEnabled()) {
 			return;
@@ -554,6 +572,7 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 		setComboEnabled(PREF_PB_UNUSED_WARNING_TOKEN, enableSuppressWarnings);
 	}
 
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		String title= PreferencesMessages.ProblemSeveritiesConfigurationBlock_needsbuild_title;
 		String message;
@@ -568,6 +587,7 @@ public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlo
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#dispose()
 	 */
+	@Override
 	public void dispose() {
 		IDialogSettings section= JavaPlugin.getDefault().getDialogSettings().addNewSection(SETTINGS_SECTION_NAME);
 		storeSectionExpansionStates(section);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesPreferencePage.java
index 46c1e22..184cc9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProblemSeveritiesPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new ProblemSeveritiesConfigurationBlock(getNewStatusChangedListener(), getProject(), container);
@@ -65,14 +66,21 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 		} else {
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.PROBLEM_SEVERITIES_PREFERENCE_PAGE);
 		}
-		
-		setSize(new Point(10, 10)); // https://bugs.eclipse.org/bugs/show_bug.cgi?id=294763
 	}
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
 
+	@Override
+	public Point computeSize() {
+		Point size= super.computeSize();
+		size.y= 10; //see bug 294763
+		return size;
+	}
+
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -80,6 +88,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -87,6 +96,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -94,6 +104,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
@@ -104,6 +115,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fConfigurationBlock != null) {
@@ -114,6 +126,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -124,6 +137,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -134,6 +148,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
@@ -143,10 +158,12 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
+	@Override
 	public void applyData(Object data) {
 		super.applyData(data);
 		if (data instanceof Map && fConfigurationBlock != null) {
-			Map map= (Map) data;
+			@SuppressWarnings("unchecked")
+			Map<String, Object> map= (Map<String, Object>) data;
 			if (isProjectPreferencePage()) {
 				Boolean useProjectOptions= (Boolean) map.get(USE_PROJECT_SPECIFIC_OPTIONS);
 				if (useProjectOptions != null) {
@@ -165,6 +182,7 @@ public class ProblemSeveritiesPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#setElement(org.eclipse.core.runtime.IAdaptable)
 	 */
+	@Override
 	public void setElement(IAdaptable element) {
 		super.setElement(element);
 		setDescription(null); // no description for property page
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProfilePreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProfilePreferencePage.java
index 6579127..2a04810 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProfilePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProfilePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public abstract class ProfilePreferencePage extends PropertyAndPreferencePage {
 
 	protected abstract ProfileConfigurationBlock createConfigurationBlock(PreferencesAccess access);
 
+	@Override
 	public void createControl(Composite parent) {
     	IPreferencePageContainer container= getContainer();
     	IWorkingCopyManager workingCopyManager;
@@ -49,14 +50,17 @@ public abstract class ProfilePreferencePage extends PropertyAndPreferencePage {
     	super.createControl(parent);
     }
 
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
     	return fConfigurationBlock.createContents(composite);
     }
 
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
     	return fConfigurationBlock.hasProjectSpecificOptions(project);
     }
 
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
     	super.enableProjectSpecificSettings(useProjectSpecificSettings);
     	if (fConfigurationBlock != null) {
@@ -64,6 +68,7 @@ public abstract class ProfilePreferencePage extends PropertyAndPreferencePage {
     	}
     }
 
+	@Override
 	public void dispose() {
     	if (fConfigurationBlock != null) {
     		fConfigurationBlock.dispose();
@@ -71,6 +76,7 @@ public abstract class ProfilePreferencePage extends PropertyAndPreferencePage {
     	super.dispose();
     }
 
+	@Override
 	protected void performDefaults() {
     	if (fConfigurationBlock != null) {
     		fConfigurationBlock.performDefaults();
@@ -78,6 +84,7 @@ public abstract class ProfilePreferencePage extends PropertyAndPreferencePage {
     	super.performDefaults();
     }
 
+	@Override
 	public boolean performOk() {
     	if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
     		return false;
@@ -85,6 +92,7 @@ public abstract class ProfilePreferencePage extends PropertyAndPreferencePage {
     	return super.performOk();
     }
 
+	@Override
 	public void performApply() {
     	if (fConfigurationBlock != null) {
     		fConfigurationBlock.performApply();
@@ -92,6 +100,7 @@ public abstract class ProfilePreferencePage extends PropertyAndPreferencePage {
     	super.performApply();
     }
 
+	@Override
 	public void setElement(IAdaptable element) {
     	super.setElement(element);
     	setDescription(null); // no description for property page
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProjectSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProjectSelectionDialog.java
index f0e8d0b..1485c71 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProjectSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ProjectSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.ui.dialogs.SelectionStatusDialog;
 
 import org.eclipse.jdt.core.IJavaModel;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
 
 import org.eclipse.jdt.ui.JavaElementComparator;
@@ -53,7 +54,7 @@ public class ProjectSelectionDialog extends SelectionStatusDialog {
 
 	// the visual selection widget group
 	private TableViewer fTableViewer;
-	private Set fProjectsWithSpecifics;
+	private Set<IJavaProject> fProjectsWithSpecifics;
 
 	// sizing constants
 	private final static int SIZING_SELECTION_WIDGET_HEIGHT= 250;
@@ -63,13 +64,14 @@ public class ProjectSelectionDialog extends SelectionStatusDialog {
 
 	private ViewerFilter fFilter;
 
-	public ProjectSelectionDialog(Shell parentShell, Set projectsWithSpecifics) {
+	public ProjectSelectionDialog(Shell parentShell, Set<IJavaProject> projectsWithSpecifics) {
 		super(parentShell);
 		setTitle(PreferencesMessages.ProjectSelectionDialog_title);
 		setMessage(PreferencesMessages.ProjectSelectionDialog_desciption);
 		fProjectsWithSpecifics= projectsWithSpecifics;
 
 		fFilter= new ViewerFilter() {
+			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
 				return fProjectsWithSpecifics.contains(element);
 			}
@@ -80,6 +82,7 @@ public class ProjectSelectionDialog extends SelectionStatusDialog {
 	/* (non-Javadoc)
 	 * Method declared on Dialog.
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		// page group
 		Composite composite= (Composite) super.createDialogArea(parent);
@@ -156,6 +159,7 @@ public class ProjectSelectionDialog extends SelectionStatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.dialogs.SelectionStatusDialog#computeResult()
 	 */
+	@Override
 	protected void computeResult() {
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertiesFileEditorPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertiesFileEditorPreferencePage.java
index cf3775b..c19cb71 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertiesFileEditorPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertiesFileEditorPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,6 @@ import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.RGB;
@@ -76,6 +75,7 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer;
+import org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
 import org.eclipse.jdt.internal.ui.propertiesfileeditor.IPropertiesFilePartitions;
 import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileDocumentSetupParticipant;
 import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileSourceViewerConfiguration;
@@ -245,6 +245,7 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 		/*
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			return ((HighlightingColorListItem)element).getDisplayName();
 		}
@@ -273,7 +274,7 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 		 */
 		public Object[] getElements(Object inputElement) {
-			return ((java.util.List)inputElement).toArray();
+			return ((java.util.List<?>)inputElement).toArray();
 		}
 
 		/*
@@ -348,7 +349,7 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 	/**
 	 * Highlighting color list
 	 */
-	private final List fHighlightingColorList= new ArrayList();
+	private final List<HighlightingColorListItem> fHighlightingColorList= new ArrayList<HighlightingColorListItem>();
 	/**
 	 * Highlighting color list viewer
 	 */
@@ -360,7 +361,6 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 	private IColorManager fColorManager;
 
 
-
 	/**
 	 * Creates a new preference page.
 	 */
@@ -373,7 +373,7 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 
 	private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
 
-		ArrayList overlayKeys= new ArrayList();
+		ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
 
 		for (int i= 0; i < fSyntaxColorListModel.length; i++) {
 			String colorKey= fSyntaxColorListModel[i][1];
@@ -398,6 +398,7 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 	/*
 	 * @see PreferencePage#createControl(Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.PROPERTIES_FILE_EDITOR_PREFERENCE_PAGE);
@@ -510,50 +511,40 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 			}
 		});
 
-		foregroundColorButton.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
+		foregroundColorButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				HighlightingColorListItem item= getHighlightingColorListItem();
 				PreferenceConverter.setValue(fOverlayStore, item.getColorKey(), fSyntaxForegroundColorEditor.getColorValue());
 			}
 		});
 
-		fBoldCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
+		fBoldCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				HighlightingColorListItem item= getHighlightingColorListItem();
 				fOverlayStore.setValue(item.getBoldKey(), fBoldCheckBox.getSelection());
 			}
 		});
 
-		fItalicCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
+		fItalicCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				HighlightingColorListItem item= getHighlightingColorListItem();
 				fOverlayStore.setValue(item.getItalicKey(), fItalicCheckBox.getSelection());
 			}
 		});
 
-		fStrikethroughCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
+		fStrikethroughCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				HighlightingColorListItem item= getHighlightingColorListItem();
 				fOverlayStore.setValue(item.getStrikethroughKey(), fStrikethroughCheckBox.getSelection());
 			}
 		});
 
-		fUnderlineCheckBox.addSelectionListener(new SelectionListener() {
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// do nothing
-			}
+		fUnderlineCheckBox.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				HighlightingColorListItem item= getHighlightingColorListItem();
 				fOverlayStore.setValue(item.getUnderlineKey(), fUnderlineCheckBox.getSelection());
@@ -588,6 +579,7 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 	/*
 	 * @see PreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		fOverlayStore.load();
 		fOverlayStore.start();
@@ -614,14 +606,14 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 		Link link= new Link(contents, SWT.NONE);
 		link.setText(text);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
-				PreferencesUtil.createPreferenceDialogOn(getShell(), "org.eclipse.ui.preferencePages.GeneralTextEditor", null, null); //$NON-NLS-1$
+				if ("org.eclipse.ui.preferencePages.GeneralTextEditor".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(getShell(), e.text, null, null);
+				else if ("org.eclipse.ui.preferencePages.ColorsAndFonts".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(getShell(), e.text, null, "selectFont:org.eclipse.jdt.ui.PropertiesFileEditor.textfont"); //$NON-NLS-1$
 			}
 		});
-		// TODO replace by link-specific tooltips when
-		// bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=88866 gets fixed
-		link.setToolTipText(PreferencesMessages.PropertiesFileEditorPreferencePage_link_tooltip);
-
 
 		GridData gridData= new GridData(SWT.FILL, SWT.BEGINNING, true, false);
 		gridData.widthHint= 150; // only expand further if anyone else requires it
@@ -666,15 +658,17 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 	/*
 	 * @see PreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		fOverlayStore.propagate();
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 		return true;
 	}
 
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 
 		fOverlayStore.loadDefaults();
@@ -691,6 +685,7 @@ public class PropertiesFileEditorPreferencePage extends PreferencePage implement
 	/*
 	 * @see DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 
 		if (fOverlayStore != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertyAndPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertyAndPreferencePage.java
index 5c117e8..a4ccc77 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertyAndPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PropertyAndPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,7 +66,7 @@ public abstract class PropertyAndPreferencePage extends PreferencePage implement
 	private Composite fParentComposite;
 
 	private IProject fProject; // project or null
-	private Map fData; // page data
+	private Map<String, Object> fData; // page data
 
 	public static final String DATA_NO_LINK= "PropertyAndPreferencePage.nolink"; //$NON-NLS-1$
 
@@ -91,7 +91,8 @@ public abstract class PropertyAndPreferencePage extends PreferencePage implement
 		return fData == null || !Boolean.TRUE.equals(fData.get(DATA_NO_LINK));
 	}
 
-    protected Label createDescriptionLabel(Composite parent) {
+    @Override
+	protected Label createDescriptionLabel(Composite parent) {
 		fParentComposite= parent;
 		if (isProjectPreferencePage()) {
 			Composite composite= new Composite(parent, SWT.NONE);
@@ -141,6 +142,7 @@ public abstract class PropertyAndPreferencePage extends PreferencePage implement
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#createContents(Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		Composite composite= new Composite(parent, SWT.NONE);
 		GridLayout layout= new GridLayout();
@@ -197,15 +199,15 @@ public abstract class PropertyAndPreferencePage extends PreferencePage implement
 	 * @param link the link
 	 */
 	final void doLinkActivated(Link link) {
-		Map data= getData();
+		Map<String, Object> data= getData();
 		if (data == null)
-			data= new HashMap();
+			data= new HashMap<String, Object>();
 		data.put(DATA_NO_LINK, Boolean.TRUE);
 
 		if (isProjectPreferencePage()) {
 			openWorkspacePreferences(data);
 		} else {
-			HashSet projectsWithSpecifics= new HashSet();
+			HashSet<IJavaProject> projectsWithSpecifics= new HashSet<IJavaProject>();
 			try {
 				IJavaProject[] projects= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()).getJavaProjects();
 				for (int i= 0; i < projects.length; i++) {
@@ -302,6 +304,7 @@ public abstract class PropertyAndPreferencePage extends PreferencePage implement
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		if (useProjectSettings()) {
 			enableProjectSpecificSettings(false);
@@ -338,9 +341,11 @@ public abstract class PropertyAndPreferencePage extends PreferencePage implement
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
+	@SuppressWarnings("unchecked")
+	@Override
 	public void applyData(Object data) {
 		if (data instanceof Map) {
-			fData= (Map) data;
+			fData= (Map<String, Object>) data;
 		}
 		if (fChangeWorkspaceSettings != null) {
 			if (!offerLink()) {
@@ -350,7 +355,7 @@ public abstract class PropertyAndPreferencePage extends PreferencePage implement
 		}
  	}
 
-	protected Map getData() {
+	protected Map<String, Object> getData() {
 		return fData;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantConfigurationBlock.java
index f329ea2..cc2fb8e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,7 @@ class SaveParticipantConfigurationBlock implements IPreferenceAndPropertyConfigu
 
 	private final PreferencePage fPreferencePage;
 	private final IScopeContext fContext;
-	private final ArrayList fConfigurations;
+	private final ArrayList<ISaveParticipantPreferenceConfiguration> fConfigurations;
 
 	public SaveParticipantConfigurationBlock(IScopeContext context, PreferencePage preferencePage) {
 		Assert.isNotNull(context);
@@ -55,7 +55,7 @@ class SaveParticipantConfigurationBlock implements IPreferenceAndPropertyConfigu
 
 		fContext= context;
 		fPreferencePage= preferencePage;
-		fConfigurations= new ArrayList();
+		fConfigurations= new ArrayList<ISaveParticipantPreferenceConfiguration>();
 	}
 
 	/*
@@ -76,10 +76,8 @@ class SaveParticipantConfigurationBlock implements IPreferenceAndPropertyConfigu
 		if (descriptors.length == 0)
 			return composite;
 
-		Arrays.sort(descriptors, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				SaveParticipantDescriptor d1= (SaveParticipantDescriptor)o1;
-				SaveParticipantDescriptor d2= (SaveParticipantDescriptor)o2;
+		Arrays.sort(descriptors, new Comparator<SaveParticipantDescriptor>() {
+			public int compare(SaveParticipantDescriptor d1, SaveParticipantDescriptor d2) {
 				return Collator.getInstance().compare(d1.getPostSaveListener().getName(), d2.getPostSaveListener().getName());
 			}
 		});
@@ -167,7 +165,7 @@ class SaveParticipantConfigurationBlock implements IPreferenceAndPropertyConfigu
 
 	private void delegateToPreferenceConfiguration(IDelegateOperation op) {
 		for (int i= 0; i < fConfigurations.size(); i++) {
-	        ISaveParticipantPreferenceConfiguration block= (ISaveParticipantPreferenceConfiguration)fConfigurations.get(i);
+	        ISaveParticipantPreferenceConfiguration block= fConfigurations.get(i);
 	        op.run(block);
         }
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantPreferencePage.java
index 2f55c6b..a32617a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SaveParticipantPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public final class SaveParticipantPreferencePage extends AbstractConfigurationBl
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getHelpId() {
 		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
 	}
@@ -38,6 +39,7 @@ public final class SaveParticipantPreferencePage extends AbstractConfigurationBl
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected IPreferenceAndPropertyConfigurationBlock createConfigurationBlock(IScopeContext context) {
 		return new SaveParticipantConfigurationBlock(context, this);
 	}
@@ -45,6 +47,7 @@ public final class SaveParticipantPreferencePage extends AbstractConfigurationBl
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREFERENCE_PAGE_ID;
 	}
@@ -52,6 +55,7 @@ public final class SaveParticipantPreferencePage extends AbstractConfigurationBl
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROPERTY_PAGE_ID;
 	}
@@ -59,6 +63,7 @@ public final class SaveParticipantPreferencePage extends AbstractConfigurationBl
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return JavaPlugin.getDefault().getSaveParticipantRegistry().hasSettingsInScope(new ProjectScope(project));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingConfigurationBlock.java
index d1b9ea0..531de3f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,6 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.jdt.internal.ui.preferences;
 
 import org.eclipse.swt.SWT;
@@ -21,11 +20,13 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Link;
 
 import org.eclipse.core.runtime.Assert;
 
 import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.layout.PixelConverter;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -42,6 +43,7 @@ import org.eclipse.jdt.ui.PreferenceConstants;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
+
 /**
  * Configures Java Editor typing preferences.
  *
@@ -72,6 +74,7 @@ class SmartTypingConfigurationBlock extends AbstractConfigurationBlock {
 				new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_SEMICOLON),
 				new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_TAB),
 				new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_OPENING_BRACE),
+				new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_SMART_INDENT_AFTER_NEWLINE),
 		};
 	}
 
@@ -92,6 +95,8 @@ class SmartTypingConfigurationBlock extends AbstractConfigurationBlock {
 		layout.marginHeight= 0;
 		control.setLayout(layout);
 
+		addSmartInsertModeMessage(control);
+
 		Composite composite;
 
 		composite= createSubsection(control, null, PreferencesMessages.SmartTypingConfigurationBlock_autoclose_title);
@@ -100,8 +105,8 @@ class SmartTypingConfigurationBlock extends AbstractConfigurationBlock {
 		composite= createSubsection(control, null, PreferencesMessages.SmartTypingConfigurationBlock_automove_title);
 		addAutopositionSection(composite);
 
-		composite= createSubsection(control, null, PreferencesMessages.SmartTypingConfigurationBlock_tabs_title);
-		addTabSection(composite);
+		composite= createSubsection(control, null, PreferencesMessages.SmartTypingConfigurationBlock_indentation_title);
+		addIndentationSection(composite);
 
 		composite= createSubsection(control, null, PreferencesMessages.SmartTypingConfigurationBlock_pasting_title);
 		addPasteSection(composite);
@@ -115,6 +120,24 @@ class SmartTypingConfigurationBlock extends AbstractConfigurationBlock {
 		return scrolled;
 	}
 
+	/**
+	 * Adds the Smart Insert Mode note to the preference page.
+	 * 
+	 * @param parent the parent composite
+	 * @since 3.7
+	 */
+	private void addSmartInsertModeMessage(Composite parent) {
+		Label label= new Label(parent, SWT.LEAD | SWT.WRAP);
+		label.setText(PreferencesMessages.JavaEditorPreferencePage_smartInsertMode_message);
+
+		PixelConverter pixelConverter= new PixelConverter(parent);
+		Label fillerLabel= new Label(parent, SWT.LEFT);
+		GridData gridData= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		gridData.horizontalSpan= 2;
+		gridData.heightHint= pixelConverter.convertHeightInCharsToPixels(1) / 2;
+		fillerLabel.setLayoutData(gridData);
+	}
+
 	private void addStringsSection(Composite composite) {
 		GridLayout layout= new GridLayout();
 		composite.setLayout(layout);
@@ -139,15 +162,20 @@ class SmartTypingConfigurationBlock extends AbstractConfigurationBlock {
 		addCheckBox(composite, label, PreferenceConstants.EDITOR_IMPORTS_ON_PASTE, 0);
 	}
 
-	private void addTabSection(Composite composite) {
+	/**
+	 * Adds Indentation section to the preference page.
+	 * 
+	 * @param parent the parent composite
+	 * @since 3.7
+	 */
+	private void addIndentationSection(Composite parent) {
 		GridLayout layout= new GridLayout();
-		composite.setLayout(layout);
+		parent.setLayout(layout);
 
-		String label;
-		label= PreferencesMessages.JavaEditorPreferencePage_typing_smartTab;
-		addCheckBox(composite, label, PreferenceConstants.EDITOR_SMART_TAB, 0);
+		addCheckBox(parent, PreferencesMessages.JavaEditorPreferencePage_smartAutoIndentAfterNewLine, PreferenceConstants.EDITOR_SMART_INDENT_AFTER_NEWLINE, 0);
+		addCheckBox(parent, PreferencesMessages.JavaEditorPreferencePage_typing_smartTab, PreferenceConstants.EDITOR_SMART_TAB, 0);
 
-		createMessage(composite);
+		createMessage(parent);
 	}
 
 	private void addAutopositionSection(Composite composite) {
@@ -208,6 +236,7 @@ class SmartTypingConfigurationBlock extends AbstractConfigurationBlock {
 		gd.widthHint= 300; // don't get wider initially
 		link.setLayoutData(gd);
 		link.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				PreferencesUtil.createPreferenceDialogOn(link.getShell(), "org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage", null, null); //$NON-NLS-1$
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingPreferencePage.java
index 23817c3..7d573cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SmartTypingPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,16 +8,15 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.jdt.internal.ui.preferences;
 
-
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
+
 /**
  * The page for setting the editor options.
  */
@@ -26,13 +25,15 @@ public final class SmartTypingPreferencePage extends AbstractConfigurationBlockP
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#getHelpId()
 	 */
+	@Override
 	protected String getHelpId() {
-		return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
+		return IJavaHelpContextIds.TYPING_PREFERENCE_PAGE;
 	}
 
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setDescription()
 	 */
+	@Override
 	protected void setDescription() {
 		String description= PreferencesMessages.JavaEditorPreferencePage_typing_tabTitle;
 		setDescription(description);
@@ -41,11 +42,13 @@ public final class SmartTypingPreferencePage extends AbstractConfigurationBlockP
 	/*
 	 * @see org.org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
 	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(JavaPlugin.getDefault().getPreferenceStore());
 	}
 
 
+	@Override
 	protected Label createDescriptionLabel(Composite parent) {
 		return null; // no description for new look.
 	}
@@ -53,6 +56,7 @@ public final class SmartTypingPreferencePage extends AbstractConfigurationBlockP
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.ui.internal.editors.text.OverlayPreferenceStore)
 	 */
+	@Override
 	protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
 		return new SmartTypingConfigurationBlock(overlayPreferenceStore);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SourceAttachmentPropertyPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SourceAttachmentPropertyPage.java
index f98a0e8..6c44e13 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SourceAttachmentPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SourceAttachmentPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
@@ -41,6 +42,7 @@ import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
 
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
@@ -69,6 +71,7 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.SOURCE_ATTACHMENT_PROPERTY_PAGE);
@@ -77,6 +80,7 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 	/*
 	 * @see PreferencePage#createContents
 	 */
+	@Override
 	protected Control createContents(Composite composite) {
 		initializeDialogUnits(composite);
 		Control result= createPageContent(composite);
@@ -90,7 +94,7 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 			fEntry= null;
 			fRoot= getJARPackageFragmentRoot();
 			if (fRoot == null || fRoot.getKind() != IPackageFragmentRoot.K_BINARY) {
-				return createMessageContent(composite, PreferencesMessages.SourceAttachmentPropertyPage_noarchive_message);
+				return createMessageContent(composite, PreferencesMessages.SourceAttachmentPropertyPage_noarchive_message, null);
 			}
 
 			IPath containerPath= null;
@@ -101,16 +105,16 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 				ClasspathContainerInitializer initializer= JavaCore.getClasspathContainerInitializer(containerPath.segment(0));
 				IClasspathContainer container= JavaCore.getClasspathContainer(containerPath, jproject);
 				if (initializer == null || container == null) {
-					return createMessageContent(composite, Messages.format(PreferencesMessages.SourceAttachmentPropertyPage_invalid_container, BasicElementLabels.getPathLabel(containerPath, false)));
+					return createMessageContent(composite, Messages.format(PreferencesMessages.SourceAttachmentPropertyPage_invalid_container, BasicElementLabels.getPathLabel(containerPath, false)), fRoot);
 				}
 				String containerName= container.getDescription();
 
 				IStatus status= initializer.getSourceAttachmentStatus(containerPath, jproject);
 				if (status.getCode() == ClasspathContainerInitializer.ATTRIBUTE_NOT_SUPPORTED) {
-					return createMessageContent(composite, Messages.format(PreferencesMessages.SourceAttachmentPropertyPage_not_supported, containerName));
+					return createMessageContent(composite, Messages.format(PreferencesMessages.SourceAttachmentPropertyPage_not_supported, containerName), null);
 				}
 				if (status.getCode() == ClasspathContainerInitializer.ATTRIBUTE_READ_ONLY) {
-					return createMessageContent(composite, Messages.format(PreferencesMessages.SourceAttachmentPropertyPage_read_only, containerName));
+					return createMessageContent(composite, Messages.format(PreferencesMessages.SourceAttachmentPropertyPage_read_only, containerName), fRoot);
 				}
 				entry= JavaModelUtil.findEntryInContainer(container, fRoot.getPath());
 			}
@@ -121,12 +125,12 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 			return fSourceAttachmentBlock.createControl(composite);
 		} catch (CoreException e) {
 			JavaPlugin.log(e);
-			return createMessageContent(composite, PreferencesMessages.SourceAttachmentPropertyPage_noarchive_message);
+			return createMessageContent(composite, PreferencesMessages.SourceAttachmentPropertyPage_noarchive_message, null);
 		}
 	}
 
 
-	private Control createMessageContent(Composite composite, String message) {
+	private Control createMessageContent(Composite composite, String message, IPackageFragmentRoot root) {
 		Composite inner= new Composite(composite, SWT.NONE);
 		GridLayout layout= new GridLayout();
 		layout.marginHeight= 0;
@@ -137,8 +141,28 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 		gd.widthHint= convertWidthInCharsToPixels(80);
 
 		Label label= new Label(inner, SWT.LEFT + SWT.WRAP);
-		label.setText(message);
 		label.setLayoutData(gd);
+		
+		try {
+			if (root != null) {
+				message= message + "\n\n" + PreferencesMessages.SourceAttachmentPropertyPage_location_path; //$NON-NLS-1$
+				
+				Text location= new Text(inner, SWT.READ_ONLY | SWT.WRAP);
+				gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+				gd.widthHint= convertWidthInCharsToPixels(80);
+				location.setLayoutData(gd);
+				IPath sourceAttachmentPath= root.getSourceAttachmentPath();
+				String locationPath= PreferencesMessages.SourceAttachmentPropertyPage_locationPath_none;
+				if (sourceAttachmentPath != null)
+					locationPath= sourceAttachmentPath.toString();
+				location.setText(locationPath);
+			}
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+			// don't show location
+		}
+		
+		label.setText(message);
 		return inner;
 	}
 
@@ -146,6 +170,7 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 	/*
 	 * @see IPreferencePage#performOk
 	 */
+	@Override
 	public boolean performOk() {
 		if (fSourceAttachmentBlock != null) {
 			try {
@@ -172,6 +197,7 @@ public class SourceAttachmentPropertyPage extends PropertyPage implements IStatu
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		if (fSourceAttachmentBlock != null) {
 			fSourceAttachmentBlock.setDefaults();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SpellingConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SpellingConfigurationBlock.java
index b762ef6..7c0b38d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SpellingConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/SpellingConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -138,14 +138,14 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	 *                   The list of locales
 	 * @return Array of locale codes for the list
 	 */
-	protected static String[] getDictionaryCodes(final Set locales) {
+	protected static String[] getDictionaryCodes(final Set<Locale> locales) {
 
 		int index= 0;
 		Locale locale= null;
 
 		final String[] codes= new String[locales.size() + 1];
-		for (final Iterator iterator= locales.iterator(); iterator.hasNext();) {
-			locale= (Locale)iterator.next();
+		for (final Iterator<Locale> iterator= locales.iterator(); iterator.hasNext();) {
+			locale= iterator.next();
 			codes[index++]= locale.toString();
 		}
 		codes[index++]= PREF_VALUE_NO_LOCALE;
@@ -159,15 +159,15 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	 *                   The list of locales
 	 * @return Array of display labels for the list
 	 */
-	protected static String[] getDictionaryLabels(final Set locales) {
+	protected static String[] getDictionaryLabels(final Set<Locale> locales) {
 
 		int index= 0;
 		Locale locale= null;
 
 		final String[] labels= new String[locales.size() + 1];
-		for (final Iterator iterator= locales.iterator(); iterator.hasNext();) {
+		for (final Iterator<Locale> iterator= locales.iterator(); iterator.hasNext();) {
 
-			locale= (Locale)iterator.next();
+			locale= iterator.next();
 			labels[index++]= locale.getDisplayName();
 		}
 		labels[index++]= PreferencesMessages.SpellingPreferencePage_dictionary_none;
@@ -291,6 +291,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 			setValue(PREF_SPELLING_LOCALE, SpellCheckEngine.getDefaultLocale().toString());
 	}
 
+	@Override
 	protected Combo addComboBox(Composite parent, String label, Key key, String[] values, String[] valueLabels, int indent) {
 		ControlData data= new ControlData(key, values);
 
@@ -328,12 +329,13 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#createContents(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createContents(final Composite parent) {
 
 		Composite composite= new Composite(parent, SWT.NONE);
 		composite.setLayout(new GridLayout());
 
-		List allControls= new ArrayList();
+		List<Control> allControls= new ArrayList<Control>();
 		final PixelConverter converter= new PixelConverter(parent);
 
 		final String[] trueFalse= new String[] { IPreferenceStore.TRUE, IPreferenceStore.FALSE };
@@ -380,7 +382,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 		slave= addCheckBox(user, label, PREF_SPELLING_IGNORE_AMPERSAND_IN_PROPERTIES, trueFalse, 0);
 		allControls.add(slave);
 
-		final Set locales= SpellCheckEngine.getLocalesWithInstalledDictionaries();
+		final Set<Locale> locales= SpellCheckEngine.getLocalesWithInstalledDictionaries();
 		boolean hasPlaformDictionaries= locales.size() > 0;
 
 		final Group engine= new Group(composite, SWT.NONE);
@@ -418,6 +420,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 		button.setText(PreferencesMessages.SpellingPreferencePage_browse_label);
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(final SelectionEvent event) {
 				handleBrowseButtonSelected();
 			}
@@ -430,6 +433,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 		button.setText(PreferencesMessages.SpellingPreferencePage_variables);
 		button.addSelectionListener(new SelectionAdapter() {
 
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handleVariablesButtonSelected();
 			}
@@ -477,7 +481,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 			allControls.add(button);
 		}
 
-		fAllControls= (Control[]) allControls.toArray(new Control[allControls.size()]);
+		fAllControls= allControls.toArray(new Control[allControls.size()]);
 
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJavaHelpContextIds.SPELLING_CONFIGURATION_BLOCK);
 		return composite;
@@ -490,7 +494,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	 * @param allControls list with all controls
 	 * @since 3.3
 	 */
-	private void createEncodingFieldEditor(Composite composite, List allControls) {
+	private void createEncodingFieldEditor(Composite composite, List<Control> allControls) {
 		Label filler= new Label(composite, SWT.NONE);
 		GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		gd.horizontalSpan= 4;
@@ -525,6 +529,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 		DialogPage fakePage= new DialogPage() {
 			public void createControl(Composite c) {
 			}
+			@Override
 			public void setErrorMessage(String newMessage) {
 				StatusInfo status= new StatusInfo();
 				if (newMessage != null)
@@ -552,6 +557,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
 	 */
+	@Override
 	protected final String[] getFullBuildDialogStrings(final boolean workspace) {
 		return null;
 	}
@@ -560,6 +566,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#performOk()
 	 * @since 3.3
 	 */
+	@Override
 	public boolean performOk() {
 		fEncodingEditor.store();
 		if (fEncodingEditor.presentsDefaultValue())
@@ -573,6 +580,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#performApply()
 	 * @since 3.3
 	 */
+	@Override
 	public boolean performApply() {
 		fEncodingEditor.store();
 		if (fEncodingEditor.presentsDefaultValue())
@@ -586,6 +594,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#performDefaults()
 	 * @since 3.3
 	 */
+	@Override
 	public void performDefaults() {
 		super.performDefaults();
 
@@ -620,6 +629,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(java.lang.String,java.lang.String)
 	 */
+	@Override
 	protected void validateSettings(final Key key, final String oldValue, final String newValue) {
 		if (key == null || PREF_SPELLING_PROPOSAL_THRESHOLD.equals(key))
 			fThresholdStatus= validatePositiveNumber(getValue(PREF_SPELLING_PROPOSAL_THRESHOLD));
@@ -641,6 +651,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateCheckBox(org.eclipse.swt.widgets.Button)
 	 * @since 3.1
 	 */
+	@Override
 	protected void updateCheckBox(Button curr) {
 		super.updateCheckBox(curr);
 		Event event= new Event();
@@ -665,7 +676,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 			fEnabledControls= null;
 		}
 		if (!enabled && fEnabledControls == null) {
-			List enabledControls= new ArrayList();
+			List<Control> enabledControls= new ArrayList<Control>();
 			for (int i= fAllControls.length - 1; i >= 0; i--) {
 				Control control= fAllControls[i];
 				if (control.isEnabled()) {
@@ -673,7 +684,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
 					control.setEnabled(false);
 				}
 			}
-			fEnabledControls= (Control[]) enabledControls.toArray(new Control[enabledControls.size()]);
+			fEnabledControls= enabledControls.toArray(new Control[enabledControls.size()]);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskConfigurationBlock.java
index 2d88b2d..ccb2ee0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			return null; // JavaPluginImages.get(JavaPluginImages.IMG_OBJS_REFACTORING_INFO);
 		}
@@ -83,6 +84,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			return getColumnText(element, 0);
 		}
@@ -128,6 +130,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 	}
 
 	private static class TodoTaskSorter extends ViewerComparator {
+		@Override
 		public int compare(Viewer viewer, Object e1, Object e2) {
 			return getComparator().compare(((TodoTask) e1).name, ((TodoTask) e2).name);
 		}
@@ -139,7 +142,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 	private static final int IDX_DEFAULT= 4;
 
 	private IStatus fTaskTagsStatus;
-	private ListDialogField fTodoTasksList;
+	private ListDialogField<TodoTask> fTodoTasksList;
 	private SelectionButtonDialogField fCaseSensitiveCheckBox;
 
 
@@ -154,7 +157,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 			null,
 			PreferencesMessages.TodoTaskConfigurationBlock_markers_tasks_setdefault_button,
 		};
-		fTodoTasksList= new ListDialogField(adapter, buttons, new TodoTaskLabelProvider());
+		fTodoTasksList= new ListDialogField<TodoTask>(adapter, buttons, new TodoTaskLabelProvider());
 		fTodoTasksList.setDialogFieldListener(adapter);
 		fTodoTasksList.setRemoveButtonIndex(IDX_REMOVE);
 
@@ -192,7 +195,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 	}
 
 	private void setToDefaultTask(TodoTask task) {
-		List elements= fTodoTasksList.getElements();
+		List<TodoTask> elements= fTodoTasksList.getElements();
 		elements.remove(task);
 		elements.add(0, task);
 		fTodoTasksList.setElements(elements);
@@ -205,27 +208,27 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 		};
 	}
 
-	public class TaskTagAdapter implements IListAdapter, IDialogFieldListener {
+	public class TaskTagAdapter implements IListAdapter<TodoTask>, IDialogFieldListener {
 
-		private boolean canEdit(List selectedElements) {
+		private boolean canEdit(List<TodoTask> selectedElements) {
 			return selectedElements.size() == 1;
 		}
 
-		private boolean canSetToDefault(List selectedElements) {
-			return selectedElements.size() == 1 && !isDefaultTask((TodoTask) selectedElements.get(0));
+		private boolean canSetToDefault(List<TodoTask> selectedElements) {
+			return selectedElements.size() == 1 && !isDefaultTask(selectedElements.get(0));
 		}
 
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<TodoTask> field, int index) {
 			doTodoButtonPressed(index);
 		}
 
-		public void selectionChanged(ListDialogField field) {
-			List selectedElements= field.getSelectedElements();
+		public void selectionChanged(ListDialogField<TodoTask> field) {
+			List<TodoTask> selectedElements= field.getSelectedElements();
 			field.enableButton(IDX_EDIT, canEdit(selectedElements));
 			field.enableButton(IDX_DEFAULT, canSetToDefault(selectedElements));
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<TodoTask> field) {
 			if (canEdit(field.getSelectedElements())) {
 				doTodoButtonPressed(IDX_EDIT);
 			}
@@ -237,6 +240,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		setShell(parent.getShell());
 
@@ -272,6 +276,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 		return markersComposite;
 	}
 
+	@Override
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		if (!areSettingsEnabled()) {
 			return;
@@ -298,13 +303,13 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 		if (field == fTodoTasksList) {
 			StringBuffer tags= new StringBuffer();
 			StringBuffer prios= new StringBuffer();
-			List list= fTodoTasksList.getElements();
+			List<TodoTask> list= fTodoTasksList.getElements();
 			for (int i= 0; i < list.size(); i++) {
 				if (i > 0) {
 					tags.append(',');
 					prios.append(',');
 				}
-				TodoTask elem= (TodoTask) list.get(i);
+				TodoTask elem= list.get(i);
 				tags.append(elem.name);
 				prios.append(elem.priority);
 			}
@@ -317,6 +322,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 		}
 	}
 
+	@Override
 	protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
 		String title= PreferencesMessages.TodoTaskConfigurationBlock_needsbuild_title;
 		String message;
@@ -331,6 +337,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
 	 */
+	@Override
 	protected void updateControls() {
 		unpackTodoTasks();
 	}
@@ -340,7 +347,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 		String currPrios= getValue(PREF_COMPILER_TASK_PRIORITIES);
 		String[] tags= getTokens(currTags, ","); //$NON-NLS-1$
 		String[] prios= getTokens(currPrios, ","); //$NON-NLS-1$
-		ArrayList elements= new ArrayList(tags.length);
+		ArrayList<TodoTask> elements= new ArrayList<TodoTask>(tags.length);
 		for (int i= 0; i < tags.length; i++) {
 			TodoTask task= new TodoTask();
 			task.name= tags[i].trim();
@@ -356,7 +363,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
 	private void doTodoButtonPressed(int index) {
 		TodoTask edited= null;
 		if (index != IDX_ADD) {
-			edited= (TodoTask) fTodoTasksList.getSelectedElements().get(0);
+			edited= fTodoTasksList.getSelectedElements().get(0);
 		}
 		if (index == IDX_ADD || index == IDX_EDIT) {
 			TodoTaskInputDialog dialog= new TodoTaskInputDialog(getShell(), edited, fTodoTasksList.getElements());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskInputDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskInputDialog.java
index febd912..4d773c3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskInputDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskInputDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,14 +48,14 @@ public class TodoTaskInputDialog extends StatusDialog {
 	private StringDialogField fNameDialogField;
 	private ComboDialogField fPriorityDialogField;
 
-	private List fExistingNames;
+	private List<String> fExistingNames;
 
-	public TodoTaskInputDialog(Shell parent, TodoTask task, List existingEntries) {
+	public TodoTaskInputDialog(Shell parent, TodoTask task, List<TodoTask> existingEntries) {
 		super(parent);
 
-		fExistingNames= new ArrayList(existingEntries.size());
+		fExistingNames= new ArrayList<String>(existingEntries.size());
 		for (int i= 0; i < existingEntries.size(); i++) {
-			TodoTask curr= (TodoTask) existingEntries.get(i);
+			TodoTask curr= existingEntries.get(i);
 			if (!curr.equals(task)) {
 				fExistingNames.add(curr.name);
 			}
@@ -114,6 +114,7 @@ public class TodoTaskInputDialog extends StatusDialog {
 		return task;
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -159,6 +160,7 @@ public class TodoTaskInputDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.TODO_TASK_INPUT_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskPreferencePage.java
index 7f914d5..7409973 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TodoTaskPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer) getContainer();
 		fConfigurationBlock= new TodoTaskConfigurationBlock(getNewStatusChangedListener(), getProject(), container);
@@ -58,6 +59,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#createPreferenceContent(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createPreferenceContent(Composite composite) {
 		return fConfigurationBlock.createContents(composite);
 	}
@@ -65,6 +67,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#hasProjectSpecificOptions(org.eclipse.core.resources.IProject)
 	 */
+	@Override
 	protected boolean hasProjectSpecificOptions(IProject project) {
 		return fConfigurationBlock.hasProjectSpecificOptions(project);
 	}
@@ -73,6 +76,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageID()
 	 */
+	@Override
 	protected String getPreferencePageID() {
 		return PREF_ID;
 	}
@@ -80,6 +84,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageID()
 	 */
+	@Override
 	protected String getPropertyPageID() {
 		return PROP_ID;
 	}
@@ -87,6 +92,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage#enableProjectSpecificSettings(boolean)
 	 */
+	@Override
 	protected void enableProjectSpecificSettings(boolean useProjectSpecificSettings) {
 		super.enableProjectSpecificSettings(useProjectSpecificSettings);
 		if (fConfigurationBlock != null) {
@@ -97,6 +103,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 		if (fConfigurationBlock != null) {
@@ -107,6 +114,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		if (fConfigurationBlock != null && !fConfigurationBlock.performOk()) {
 			return false;
@@ -117,6 +125,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/*
 	 * @see org.eclipse.jface.preference.IPreferencePage#performApply()
 	 */
+	@Override
 	public void performApply() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.performApply();
@@ -126,6 +135,7 @@ public class TodoTaskPreferencePage extends PropertyAndPreferencePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fConfigurationBlock != null) {
 			fConfigurationBlock.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterInputDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterInputDialog.java
index 3350ed2..a48e2aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterInputDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterInputDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,9 +66,9 @@ public class TypeFilterInputDialog extends StatusDialog {
 	}
 
 	private StringButtonDialogField fNameDialogField;
-	private List fExistingEntries;
+	private List<String> fExistingEntries;
 
-	public TypeFilterInputDialog(Shell parent, List existingEntries) {
+	public TypeFilterInputDialog(Shell parent, List<String> existingEntries) {
 		super(parent);
 
 		fExistingEntries= existingEntries;
@@ -94,6 +94,7 @@ public class TypeFilterInputDialog extends StatusDialog {
 		return fNameDialogField.getText();
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -149,6 +150,7 @@ public class TypeFilterInputDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.IMPORT_ORGANIZE_INPUT_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterPreferencePage.java
index d494dcf..0625f96 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/TypeFilterPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,13 +12,20 @@ package org.eclipse.jdt.internal.ui.preferences;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
 
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -31,8 +38,10 @@ import org.eclipse.jface.window.Window;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PreferencesUtil;
 
 import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
 
@@ -48,6 +57,7 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
 
 /*
  * The page for setting the type filters
@@ -69,33 +79,33 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 		return res;
 	}
 
-	private static String packOrderList(List orderList) {
+	private static String packOrderList(List<String> orderList) {
 		StringBuffer buf= new StringBuffer();
 		for (int i= 0; i < orderList.size(); i++) {
-			buf.append((String) orderList.get(i));
+			buf.append(orderList.get(i));
 			buf.append(';');
 		}
 		return buf.toString();
 	}
 
-	private class TypeFilterAdapter implements IListAdapter, IDialogFieldListener {
+	private class TypeFilterAdapter implements IListAdapter<String>, IDialogFieldListener {
 
-		private boolean canEdit(ListDialogField field) {
+		private boolean canEdit(ListDialogField<String> field) {
 			return field.getSelectedElements().size() == 1;
 		}
 
-        public void customButtonPressed(ListDialogField field, int index) {
+        public void customButtonPressed(ListDialogField<String> field, int index) {
         	doButtonPressed(index);
         }
 
-        public void selectionChanged(ListDialogField field) {
+        public void selectionChanged(ListDialogField<String> field) {
 			fFilterListField.enableButton(IDX_EDIT, canEdit(field));
         }
 
         public void dialogFieldChanged(DialogField field) {
         }
 
-        public void doubleClicked(ListDialogField field) {
+        public void doubleClicked(ListDialogField<String> field) {
         	if (canEdit(field)) {
 				doButtonPressed(IDX_EDIT);
         	}
@@ -109,7 +119,9 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 	private static final int IDX_SELECT= 5;
 	private static final int IDX_DESELECT= 6;
 
-	private CheckedListDialogField fFilterListField;
+	private CheckedListDialogField<String> fFilterListField;
+	private SelectionButtonDialogField fHideForbiddenField;
+	private SelectionButtonDialogField fHideDiscouragedField;
 
 	public TypeFilterPreferencePage() {
 		super();
@@ -128,7 +140,7 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 
 		TypeFilterAdapter adapter= new TypeFilterAdapter();
 
-		fFilterListField= new CheckedListDialogField(adapter, buttonLabels, new LabelProvider());
+		fFilterListField= new CheckedListDialogField<String>(adapter, buttonLabels, new LabelProvider());
 		fFilterListField.setDialogFieldListener(adapter);
 		fFilterListField.setLabelText(PreferencesMessages.TypeFilterPreferencePage_list_label);
 		fFilterListField.setCheckAllButtonIndex(IDX_SELECT);
@@ -136,6 +148,12 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 		fFilterListField.setRemoveButtonIndex(IDX_REMOVE);
 
 		fFilterListField.enableButton(IDX_EDIT, false);
+		
+		fHideForbiddenField= new SelectionButtonDialogField(SWT.CHECK);
+		fHideForbiddenField.setLabelText(PreferencesMessages.TypeFilterPreferencePage_hideForbidden_label);
+		
+		fHideDiscouragedField= new SelectionButtonDialogField(SWT.CHECK);
+		fHideDiscouragedField.setLabelText(PreferencesMessages.TypeFilterPreferencePage_hideDiscouraged_label);
 
 		initialize(false);
 	}
@@ -143,11 +161,13 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 	/*
 	 * @see PreferencePage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.TYPE_FILTER_PREFERENCE_PAGE);
 	}
 
+	@Override
 	protected Control createContents(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -167,18 +187,44 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 		LayoutUtil.setHorizontalGrabbing(fFilterListField.getListControl(null));
 
 		fFilterListField.getTableViewer().setComparator(new ViewerComparator());
+		
+		Label spacer= new Label(composite, SWT.LEFT );
+		GridData gd= new GridData(SWT.DEFAULT, convertHeightInCharsToPixels(1) / 2);
+		gd.horizontalSpan= 2;
+		spacer.setLayoutData(gd);
+		
+		String label= PreferencesMessages.TypeFilterPreferencePage_restricted_link;
+		Map<String, String> targetInfo= new java.util.HashMap<String, String>(2);
+		targetInfo.put(ProblemSeveritiesPreferencePage.DATA_SELECT_OPTION_KEY,	JavaCore.COMPILER_PB_FORBIDDEN_REFERENCE);
+		targetInfo.put(ProblemSeveritiesPreferencePage.DATA_SELECT_OPTION_QUALIFIER, JavaCore.PLUGIN_ID);
+		createPreferencePageLink(composite, label, targetInfo);
+		
+		fHideForbiddenField.doFillIntoGrid(composite, 2);
+		fHideDiscouragedField.doFillIntoGrid(composite, 2);
 
 		Dialog.applyDialogFont(composite);
 		return composite;
 	}
 
+	private void createPreferencePageLink(Composite composite, String label, final Map<String, String> targetInfo) {
+		final Link link= new Link(composite, SWT.NONE);
+		link.setText(label);
+		link.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false, 2, 1));
+		link.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				PreferencesUtil.createPreferenceDialogOn(link.getShell(), e.text, null, targetInfo);
+			}
+		});
+	}
+
 	private void initialize(boolean fromDefault) {
 		IPreferenceStore store= getPreferenceStore();
 
 		String enabled= fromDefault ? store.getDefaultString(PREF_FILTER_ENABLED) : store.getString(PREF_FILTER_ENABLED);
 		String disabled= fromDefault ? store.getDefaultString(PREF_FILTER_DISABLED) : store.getString(PREF_FILTER_DISABLED);
 
-		ArrayList res= new ArrayList();
+		ArrayList<String> res= new ArrayList<String>();
 
 		String[] enabledEntries= unpackOrderList(enabled);
 		for (int i= 0; i < enabledEntries.length; i++) {
@@ -191,15 +237,24 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 
 		fFilterListField.setElements(res);
 		fFilterListField.setCheckedElements(Arrays.asList(enabledEntries));
+		
+		boolean hideForbidden= getJDTCoreOption(JavaCore.CODEASSIST_FORBIDDEN_REFERENCE_CHECK, fromDefault);
+		fHideForbiddenField.setSelection(hideForbidden);
+		boolean hideDiscouraged= getJDTCoreOption(JavaCore.CODEASSIST_DISCOURAGED_REFERENCE_CHECK, fromDefault);
+		fHideDiscouragedField.setSelection(hideDiscouraged);
 	}
 
+	private boolean getJDTCoreOption(String option, boolean fromDefault) {
+		Object value= fromDefault ? JavaCore.getDefaultOptions().get(option) : JavaCore.getOption(option);
+		return JavaCore.ENABLED.equals(value);
+	}
 
 	private void doButtonPressed(int index) {
 		if (index == IDX_ADD) { // add new
-			List existing= fFilterListField.getElements();
+			List<String> existing= fFilterListField.getElements();
 			TypeFilterInputDialog dialog= new TypeFilterInputDialog(getShell(), existing);
 			if (dialog.open() == Window.OK) {
-				Object res= dialog.getResult();
+				String res= (String) dialog.getResult();
 				fFilterListField.addElement(res);
 				fFilterListField.setChecked(res, true);
 			}
@@ -213,19 +268,19 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
 			}
 
 		} else if (index == IDX_EDIT) { // edit
-			List selected= fFilterListField.getSelectedElements();
+			List<String> selected= fFilterListField.getSelectedElements();
 			if (selected.isEmpty()) {
 				return;
 			}
-			String editedEntry= (String) selected.get(0);
+			String editedEntry= selected.get(0);
 
-			List existing= fFilterListField.getElements();
+			List<String> existing= fFilterListField.getElements();
 			existing.remove(editedEntry);
 
 			TypeFilterInputDialog dialog= new TypeFilterInputDialog(getShell(), existing);
 			dialog.setInitialString(editedEntry);
 			if (dialog.open() == Window.OK) {
-				fFilterListField.replaceElement(editedEntry, dialog.getResult());
+				fFilterListField.replaceElement(editedEntry, (String) dialog.getResult());
 			}
 		}
 	}
@@ -256,7 +311,8 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
     /*
      * @see PreferencePage#performDefaults()
      */
-    protected void performDefaults() {
+    @Override
+	protected void performDefaults() {
     	initialize(true);
 
 		super.performDefaults();
@@ -266,16 +322,25 @@ public class TypeFilterPreferencePage extends PreferencePage implements IWorkben
     /*
      * @see org.eclipse.jface.preference.IPreferencePage#performOk()
      */
-    public boolean performOk() {
+    @Override
+	public boolean performOk() {
   		IPreferenceStore prefs= JavaPlugin.getDefault().getPreferenceStore();
 
-  		List checked= fFilterListField.getCheckedElements();
-  		List unchecked= fFilterListField.getElements();
+  		List<String> checked= fFilterListField.getCheckedElements();
+  		List<String> unchecked= fFilterListField.getElements();
   		unchecked.removeAll(checked);
 
   		prefs.setValue(PREF_FILTER_ENABLED, packOrderList(checked));
   		prefs.setValue(PREF_FILTER_DISABLED, packOrderList(unchecked));
-  		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
+
+		Hashtable<String, String> coreOptions= JavaCore.getOptions();
+		String hideForbidden= fHideForbiddenField.isSelected() ? JavaCore.ENABLED : JavaCore.DISABLED;
+		coreOptions.put(JavaCore.CODEASSIST_FORBIDDEN_REFERENCE_CHECK, hideForbidden);
+		String hideDiscouraged= fHideDiscouragedField.isSelected() ? JavaCore.ENABLED : JavaCore.DISABLED;
+		coreOptions.put(JavaCore.CODEASSIST_DISCOURAGED_REFERENCE_CHECK, hideDiscouraged);
+		JavaCore.setOptions(coreOptions);
+
         return true;
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java
index 617d719..d85311d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -138,9 +138,9 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		private SelectionButtonDialogField fIsSystemField;
 
 		private CPUserLibraryElement fElementToEdit;
-		private List fExistingLibraries;
+		private List<CPUserLibraryElement> fExistingLibraries;
 
-		public LibraryNameDialog(Shell parent, CPUserLibraryElement elementToEdit, List existingLibraries) {
+		public LibraryNameDialog(Shell parent, CPUserLibraryElement elementToEdit, List<CPUserLibraryElement> existingLibraries) {
 			super(parent);
 			if (elementToEdit == null) {
 				setTitle(PreferencesMessages.UserLibraryPreferencePage_LibraryNameDialog_new_title);
@@ -170,6 +170,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 			LayoutUtil.doDefaultLayout(composite, new DialogField[] { fNameField, fIsSystemField }, true, SWT.DEFAULT, SWT.DEFAULT);
@@ -197,7 +198,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 				return new StatusInfo(IStatus.ERROR, PreferencesMessages.UserLibraryPreferencePage_LibraryNameDialog_name_error_entername);
 			}
 			for (int i= 0; i < fExistingLibraries.size(); i++) {
-				CPUserLibraryElement curr= (CPUserLibraryElement) fExistingLibraries.get(i);
+				CPUserLibraryElement curr= fExistingLibraries.get(i);
 				if (curr != fElementToEdit && name.equals(curr.getName())) {
 					return new StatusInfo(IStatus.ERROR, Messages.format(PreferencesMessages.UserLibraryPreferencePage_LibraryNameDialog_name_error_exists, name));
 				}
@@ -219,7 +220,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 
 	}
 
-	public static class LoadSaveDialog extends StatusDialog implements IStringButtonAdapter, IDialogFieldListener, IListAdapter {
+	public static class LoadSaveDialog extends StatusDialog implements IStringButtonAdapter, IDialogFieldListener, IListAdapter<CPUserLibraryElement> {
 
 
 		private static final String VERSION1= "1"; //$NON-NLS-1$ // using OS strings for archive path and source attachment
@@ -243,17 +244,17 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		private static final String PREF_LASTPATH= JavaUI.ID_PLUGIN + ".lastuserlibrary"; //$NON-NLS-1$
 		private static final String PREF_USER_LIBRARY_LOADSAVE_SIZE= "UserLibraryLoadSaveDialog.size"; //$NON-NLS-1$
 
-		private List fExistingLibraries;
+		private List<CPUserLibraryElement> fExistingLibraries;
 		private IDialogSettings fSettings;
 
 		private File fLastFile;
 
 		private StringButtonDialogField fLocationField;
-		private CheckedListDialogField fExportImportList;
+		private CheckedListDialogField<CPUserLibraryElement> fExportImportList;
 		private Point fInitialSize;
 		private final boolean fIsSave;
 
-		public LoadSaveDialog(Shell shell, boolean isSave, List existingLibraries, IDialogSettings dialogSettings) {
+		public LoadSaveDialog(Shell shell, boolean isSave, List<CPUserLibraryElement> existingLibraries, IDialogSettings dialogSettings) {
 			super(shell);
 			initializeDialogUnits(shell);
 
@@ -286,7 +287,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 					PreferencesMessages.UserLibraryPreferencePage_LoadSaveDialog_list_selectall_button,
 					PreferencesMessages.UserLibraryPreferencePage_LoadSaveDialog_list_deselectall_button
 			};
-			fExportImportList= new CheckedListDialogField(this, buttonNames, new CPListLabelProvider());
+			fExportImportList= new CheckedListDialogField<CPUserLibraryElement>(this, buttonNames, new CPListLabelProvider());
 			fExportImportList.setCheckAllButtonIndex(0);
 			fExportImportList.setUncheckAllButtonIndex(1);
 			fExportImportList.setViewerComparator(new CPListElementSorter());
@@ -310,10 +311,12 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 * @since 3.4
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
 
+		@Override
 		protected Point getInitialSize() {
 			return fInitialSize;
 		}
@@ -325,6 +328,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 			DialogField[] fields;
@@ -382,7 +386,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 				if (!file.equals(fLastFile)) {
 					fLastFile= file;
 					try {
-						List elements= loadLibraries(file);
+						List<CPUserLibraryElement> elements= loadLibraries(file);
 						fExportImportList.setElements(elements);
 						fExportImportList.checkAll(true);
 						fExportImportList.setEnabled(true);
@@ -417,22 +421,22 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#customButtonPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField, int)
 		 */
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<CPUserLibraryElement> field, int index) {
 		}
 
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#selectionChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<CPUserLibraryElement> field) {
 		}
 
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#doubleClicked(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void doubleClicked(ListDialogField field) {
-			List selectedElements= fExportImportList.getSelectedElements();
+		public void doubleClicked(ListDialogField<CPUserLibraryElement> field) {
+			List<CPUserLibraryElement> selectedElements= fExportImportList.getSelectedElements();
 			if (selectedElements.size() == 1) {
-				Object elem= selectedElements.get(0);
+				CPUserLibraryElement elem= selectedElements.get(0);
 				fExportImportList.setChecked(elem, !fExportImportList.isChecked(elem));
 			}
 		}
@@ -440,6 +444,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 		 */
+		@Override
 		protected void okPressed() {
 			if (isSave()) {
 				final File file= new File(fLocationField.getText());
@@ -465,7 +470,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 							}
 						}
 					}
-					final List elements= fExportImportList.getCheckedElements();
+					final List<CPUserLibraryElement> elements= fExportImportList.getCheckedElements();
 					final String charset= encoding;
 					IRunnableContext context= PlatformUI.getWorkbench().getProgressService();
 					try {
@@ -495,15 +500,15 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 					JavaPlugin.log(exception);
 				}
 			} else {
-				HashSet map= new HashSet(fExistingLibraries.size());
+				HashSet<String> map= new HashSet<String>(fExistingLibraries.size());
 				for (int k= 0; k < fExistingLibraries.size(); k++) {
-					CPUserLibraryElement elem= (CPUserLibraryElement) fExistingLibraries.get(k);
+					CPUserLibraryElement elem= fExistingLibraries.get(k);
 					map.add(elem.getName());
 				}
 				int nReplaced= 0;
-				List elements= getLoadedLibraries();
+				List<CPUserLibraryElement> elements= getLoadedLibraries();
 				for (int i= 0; i < elements.size(); i++) {
-					CPUserLibraryElement curr= (CPUserLibraryElement) elements.get(i);
+					CPUserLibraryElement curr= elements.get(i);
 					if (map.contains(curr.getName())) {
 						nReplaced++;
 					}
@@ -527,6 +532,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.Dialog#close()
 		 */
+		@Override
 		public boolean close() {
 			Point point= getShell().getSize();
 			fSettings.put(PREF_USER_LIBRARY_LOADSAVE_SIZE, StringConverter.asString(point));
@@ -562,7 +568,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 			return new StatusInfo();
 		}
 
-		protected static void saveLibraries(List libraries, File file, String encoding, IProgressMonitor monitor) throws IOException {
+		protected static void saveLibraries(List<CPUserLibraryElement> libraries, File file, String encoding, IProgressMonitor monitor) throws IOException {
 			OutputStream stream= new FileOutputStream(file);
 			try {
 				DocumentBuilder docBuilder= null;
@@ -581,7 +587,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 					Element libraryElement= document.createElement(TAG_LIBRARY);
 					rootElement.appendChild(libraryElement);
 
-					CPUserLibraryElement curr= (CPUserLibraryElement) libraries.get(i);
+					CPUserLibraryElement curr= libraries.get(i);
 					libraryElement.setAttribute(TAG_NAME, curr.getName());
 					libraryElement.setAttribute(TAG_SYSTEMLIBRARY, String.valueOf(curr.isSystemLibrary()));
 
@@ -647,7 +653,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 			}
 		}
 
-		private static List loadLibraries(File file) throws IOException {
+		private static List<CPUserLibraryElement> loadLibraries(File file) throws IOException {
 			InputStream stream= new FileInputStream(file);
 			Element cpElement;
 			try {
@@ -673,7 +679,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 
 			IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 
-			ArrayList result= new ArrayList(length);
+			ArrayList<CPUserLibraryElement> result= new ArrayList<CPUserLibraryElement>(length);
 			for (int i= 0; i < length; i++) {
 				Node lib= libList.item(i);
 				if (!(lib instanceof Element)) {
@@ -725,7 +731,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 						NodeList ruleElements= ruleParentElement.getElementsByTagName(TAG_ACCESSRULE);
 						int nRuleElements= ruleElements.getLength();
 						if (nRuleElements > 0) {
-							ArrayList resultingRules= new ArrayList(nRuleElements);
+							ArrayList<IAccessRule> resultingRules= new ArrayList<IAccessRule>(nRuleElements);
 							for (int n= 0; n < nRuleElements; n++) {
 								Node node= ruleElements.item(n);
 								if (node instanceof Element) {
@@ -747,13 +753,13 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 			return result;
 		}
 
-		public List getLoadedLibraries() {
+		public List<CPUserLibraryElement> getLoadedLibraries() {
 			return fExportImportList.getCheckedElements();
 		}
 	}
 
 	private IDialogSettings fDialogSettings;
-	private TreeListDialogField fLibraryList;
+	private TreeListDialogField<CPUserLibraryElement> fLibraryList;
 	private IJavaProject fDummyProject;
 	private ClasspathAttributeConfigurationDescriptors fAttributeDescriptors;
 
@@ -797,11 +803,11 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 				PreferencesMessages.UserLibraryPreferencePage_libraries_save_button
 		};
 
-		fLibraryList= new TreeListDialogField(adapter, buttonLabels, new CPListLabelProvider());
+		fLibraryList= new TreeListDialogField<CPUserLibraryElement>(adapter, buttonLabels, new CPListLabelProvider());
 		fLibraryList.setLabelText(PreferencesMessages.UserLibraryPreferencePage_libraries_label);
 
 		String[] names= JavaCore.getUserLibraryNames();
-		ArrayList elements= new ArrayList();
+		ArrayList<CPUserLibraryElement> elements= new ArrayList<CPUserLibraryElement>();
 
 		for (int i= 0; i < names.length; i++) {
 			IPath path= new Path(JavaCore.USER_LIBRARY_CONTAINER_ID).append(names[i]);
@@ -835,15 +841,17 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
+	@Override
 	public void applyData(Object data) {
 		if (data instanceof Map) {
-			Map map= (Map) data;
+			@SuppressWarnings("unchecked")
+			Map<String, Object> map= (Map<String, Object>) data;
 			Object selectedLibrary= map.get(DATA_LIBRARY_TO_SELECT);
 			boolean createIfNotExists= Boolean.TRUE.equals(map.get(DATA_DO_CREATE));
 			if (selectedLibrary instanceof String) {
 				int nElements= fLibraryList.getSize();
 				for (int i= 0; i < nElements; i++) {
-					CPUserLibraryElement curr= (CPUserLibraryElement) fLibraryList.getElement(i);
+					CPUserLibraryElement curr= fLibraryList.getElement(i);
 					if (curr.getName().equals(selectedLibrary)) {
 						fLibraryList.selectElements(new StructuredSelection(curr));
 						fLibraryList.expandElement(curr, 1);
@@ -864,6 +872,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	 * (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.CP_USERLIBRARIES_PREFERENCE_PAGE);
@@ -872,6 +881,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	/*
 	 * @see PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		Composite composite= new Composite(parent, SWT.NONE);
 		composite.setFont(parent.getFont());
@@ -890,6 +900,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
+	@Override
 	protected void performDefaults() {
 		super.performDefaults();
 	}
@@ -897,6 +908,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	/*
 	 * @see PreferencePage#performOk()
 	 */
+	@Override
 	public boolean performOk() {
 		try {
 			PlatformUI.getWorkbench().getProgressService().run(true, true, new IRunnableWithProgress() {
@@ -926,13 +938,13 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 
 
 	private void updateUserLibararies(IProgressMonitor monitor) throws CoreException {
-		List list= fLibraryList.getElements();
-		HashSet oldNames= new HashSet(Arrays.asList(JavaCore.getUserLibraryNames()));
+		List<CPUserLibraryElement> list= fLibraryList.getElements();
+		HashSet<String> oldNames= new HashSet<String>(Arrays.asList(JavaCore.getUserLibraryNames()));
 		int nExisting= list.size();
 
-		HashSet newEntries= new HashSet(list.size());
+		HashSet<CPUserLibraryElement> newEntries= new HashSet<CPUserLibraryElement>(list.size());
 		for (int i= 0; i < nExisting; i++) {
-			CPUserLibraryElement element= (CPUserLibraryElement) list.get(i);
+			CPUserLibraryElement element= list.get(i);
 			boolean contained= oldNames.remove(element.getName());
 			if (!contained) {
 				newEntries.add(element);
@@ -947,7 +959,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		IJavaProject jproject= fDummyProject;
 
 		for (int i= 0; i < nExisting; i++) {
-			CPUserLibraryElement element= (CPUserLibraryElement) list.get(i);
+			CPUserLibraryElement element= list.get(i);
 			IPath path= element.getPath();
 			if (newEntries.contains(element) || element.hasChanges(JavaCore.getClasspathContainer(path, jproject))) {
 				IClasspathContainer updatedContainer= element.getUpdatedContainer();
@@ -960,9 +972,9 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 			monitor.worked(1);
 		}
 
-		Iterator iter= oldNames.iterator();
+		Iterator<String> iter= oldNames.iterator();
 		while (iter.hasNext()) {
-			String name= (String) iter.next();
+			String name= iter.next();
 
 			IPath path= new Path(JavaCore.USER_LIBRARY_CONTAINER_ID).append(name);
 			try {
@@ -978,7 +990,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		}
 	}
 
-	private CPUserLibraryElement getSingleSelectedLibrary(List selected) {
+	private CPUserLibraryElement getSingleSelectedLibrary(List<Object> selected) {
 		if (selected.size() == 1 && selected.get(0) instanceof CPUserLibraryElement) {
 			return (CPUserLibraryElement) selected.get(0);
 		}
@@ -988,18 +1000,19 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	private void editAttributeEntry(CPListElementAttribute elem) {
 		String key= elem.getKey();
 		CPListElement selElement= elem.getParent();
+		Object parentContainer= selElement.getParentContainer();
 		if (key.equals(CPListElement.SOURCEATTACHMENT)) {
 			IClasspathEntry result= BuildPathDialogAccess.configureSourceAttachment(getShell(), selElement.getClasspathEntry());
 			if (result != null) {
 				selElement.setAttribute(CPListElement.SOURCEATTACHMENT, result.getSourceAttachmentPath());
-				fLibraryList.refresh(elem);
+				fLibraryList.refresh(parentContainer);
 				fLibraryList.update(selElement);
 			}
 		} else if (key.equals(CPListElement.ACCESSRULES)) {
 			AccessRulesDialog dialog= new AccessRulesDialog(getShell(), selElement, null, false);
 			if (dialog.open() == Window.OK) {
 				selElement.setAttribute(CPListElement.ACCESSRULES, dialog.getAccessRules());
-				fLibraryList.refresh(elem);
+				fLibraryList.refresh(parentContainer);
 				fLibraryList.expandElement(elem, 2);
 			}
 		} else if (!elem.isBuiltIn()) {
@@ -1008,14 +1021,14 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 				IClasspathAttribute result= config.performEdit(getShell(), elem.getClasspathAttributeAccess());
 				if (result != null) {
 					elem.setValue(result.getValue());
-					fLibraryList.refresh(elem);
+					fLibraryList.refresh(parentContainer);
 				}
 			}
 		}
 	}
 
-	protected void doSelectionChanged(TreeListDialogField field) {
-		List list= field.getSelectedElements();
+	protected void doSelectionChanged(TreeListDialogField<CPUserLibraryElement> field) {
+		List<Object> list= field.getSelectedElements();
 		field.enableButton(IDX_REMOVE, canRemove(list));
 		field.enableButton(IDX_EDIT, canEdit(list));
 		field.enableButton(IDX_ADD, canAdd(list));
@@ -1024,7 +1037,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		field.enableButton(IDX_SAVE, field.getSize() > 0);
 	}
 
-	protected void doCustomButtonPressed(TreeListDialogField field, int index) {
+	protected void doCustomButtonPressed(TreeListDialogField<CPUserLibraryElement> field, int index) {
 		if (index == IDX_NEW) {
 			editUserLibraryElement(null);
 		} else if (index == IDX_ADD) {
@@ -1044,23 +1057,23 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		}
 	}
 
-	protected void doDoubleClicked(TreeListDialogField field) {
-		List selected= field.getSelectedElements();
+	protected void doDoubleClicked(TreeListDialogField<CPUserLibraryElement> field) {
+		List<Object> selected= field.getSelectedElements();
 		if (canEdit(selected)) {
 			doEdit(field.getSelectedElements());
 		}
 	}
 
-	protected void doKeyPressed(TreeListDialogField field, KeyEvent event) {
+	protected void doKeyPressed(TreeListDialogField<CPUserLibraryElement> field, KeyEvent event) {
 		if (event.character == SWT.DEL && event.stateMask == 0) {
-			List selection= field.getSelectedElements();
+			List<Object> selection= field.getSelectedElements();
 			if (canRemove(selection)) {
 				doRemove(selection);
 			}
 		}
 	}
 
-	private void doEdit(List selected) {
+	private void doEdit(List<Object> selected) {
 		if (selected.size() == 1) {
 			Object curr= selected.get(0);
 			if (curr instanceof CPListElementAttribute) {
@@ -1106,12 +1119,12 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	}
 
 
-	private void doRemove(List selected) {
+	private void doRemove(List<Object> selected) {
 		Object selectionAfter= null;
 		for (int i= 0; i < selected.size(); i++) {
 			Object curr= selected.get(i);
 			if (curr instanceof CPUserLibraryElement) {
-				fLibraryList.removeElement(curr);
+				fLibraryList.removeElement((CPUserLibraryElement) curr);
 			} else if (curr instanceof CPListElement) {
 				Object parent= ((CPListElement) curr).getParentContainer();
 				if (parent instanceof CPUserLibraryElement) {
@@ -1122,6 +1135,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 				}
 			} else if (curr instanceof CPListElementAttribute) {
 				CPListElementAttribute attrib= (CPListElementAttribute) curr;
+				Object parentContainer= attrib.getParent().getParentContainer();
 				if (attrib.isBuiltIn()) {
 					Object value= null;
 					String key= attrib.getKey();
@@ -1129,14 +1143,14 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 						value= new IAccessRule[0];
 					}
 					attrib.getParent().setAttribute(key, value);
-					fLibraryList.refresh(attrib);
+					fLibraryList.refresh(parentContainer);
 				} else {
 					ClasspathAttributeConfiguration config= fAttributeDescriptors.get(attrib.getKey());
 					if (config != null) {
 						IClasspathAttribute result= config.performRemove(attrib.getClasspathAttributeAccess());
 						if (result != null) {
 							attrib.setValue(result.getValue());
-							fLibraryList.refresh(attrib);
+							fLibraryList.refresh(parentContainer);
 						}
 					}
 				}
@@ -1153,7 +1167,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		}
 	}
 
-	private void doAdd(List list) {
+	private void doAdd(List<Object> list) {
 		if (canAdd(list)) {
 			CPUserLibraryElement element= getSingleSelectedLibrary(list);
 			editArchiveElement(null, element);
@@ -1161,19 +1175,19 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	}
 
 	private void doLoad() {
-		List existing= fLibraryList.getElements();
+		List<CPUserLibraryElement> existing= fLibraryList.getElements();
 		LoadSaveDialog dialog= new LoadSaveDialog(getShell(), false, existing, fDialogSettings);
 		if (dialog.open() == Window.OK) {
-			HashMap map= new HashMap(existing.size());
+			HashMap<String, CPUserLibraryElement> map= new HashMap<String, CPUserLibraryElement>(existing.size());
 			for (int k= 0; k < existing.size(); k++) {
-				CPUserLibraryElement elem= (CPUserLibraryElement) existing.get(k);
+				CPUserLibraryElement elem= existing.get(k);
 				map.put(elem.getName(), elem);
 			}
 
-			List list= dialog.getLoadedLibraries();
+			List<CPUserLibraryElement> list= dialog.getLoadedLibraries();
 			for (int i= 0; i < list.size(); i++) {
-				CPUserLibraryElement elem= (CPUserLibraryElement) list.get(i);
-				CPUserLibraryElement found= (CPUserLibraryElement) map.get(elem.getName());
+				CPUserLibraryElement elem= list.get(i);
+				CPUserLibraryElement found= map.get(elem.getName());
 				if (found == null) {
 					existing.add(elem);
 					map.put(elem.getName(), elem);
@@ -1191,11 +1205,11 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		dialog.open();
 	}
 
-	private boolean canAdd(List list) {
+	private boolean canAdd(List<Object> list) {
 		return getSingleSelectedLibrary(list) != null;
 	}
 
-	private boolean canEdit(List list) {
+	private boolean canEdit(List<Object> list) {
 		if (list.size() != 1)
 			return false;
 
@@ -1212,7 +1226,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		return true;
 	}
 
-	private boolean canRemove(List list) {
+	private boolean canRemove(List<Object> list) {
 		if (list.size() == 0) {
 			return false;
 		}
@@ -1247,7 +1261,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		return true;
 	}
 
-	private CPUserLibraryElement getCommonParent(List list) {
+	private CPUserLibraryElement getCommonParent(List<?> list) {
 		CPUserLibraryElement parent= null;
 		for (int i= 0, len= list.size(); i < len; i++) {
 			Object curr= list.get(i);
@@ -1269,26 +1283,30 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		return parent;
 	}
 
-	private void doMoveUp(List list) {
+	private void doMoveUp(List<?> list) {
 		CPUserLibraryElement parent= getCommonParent(list);
 		if (parent != null) {
-			parent.moveUp(list);
+			@SuppressWarnings("unchecked")
+			List<CPListElement> cpElementList= (List<CPListElement>) list;
+			parent.moveUp(cpElementList);
 			fLibraryList.refresh(parent);
 			doSelectionChanged(fLibraryList);
 		}
 	}
 
-	private void doMoveDown(List list) {
+	private void doMoveDown(List<?> list) {
 		CPUserLibraryElement parent= getCommonParent(list);
 		if (parent != null) {
-			parent.moveDown(list);
+			@SuppressWarnings("unchecked")
+			List<CPListElement> cpElementList= (List<CPListElement>) list;
+			parent.moveDown(cpElementList);
 			fLibraryList.refresh(parent);
 			doSelectionChanged(fLibraryList);
 		}
 	}
 
 
-	private boolean canMoveUp(List list) {
+	private boolean canMoveUp(List<?> list) {
 		CPUserLibraryElement parent= getCommonParent(list);
 		if (parent != null) {
 			CPListElement[] children= parent.getChildren();
@@ -1301,7 +1319,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 		return false;
 	}
 
-	private boolean canMoveDown(List list) {
+	private boolean canMoveDown(List<?> list) {
 		CPUserLibraryElement parent= getCommonParent(list);
 		if (parent != null) {
 			CPListElement[] children= parent.getChildren();
@@ -1365,27 +1383,27 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 	}
 
 
-	private class UserLibraryAdapter implements ITreeListAdapter {
+	private class UserLibraryAdapter implements ITreeListAdapter<CPUserLibraryElement> {
 
 		private final Object[] EMPTY= new Object[0];
 
-		public void customButtonPressed(TreeListDialogField field, int index) {
+		public void customButtonPressed(TreeListDialogField<CPUserLibraryElement> field, int index) {
 			doCustomButtonPressed(field, index);
 		}
 
-		public void selectionChanged(TreeListDialogField field) {
+		public void selectionChanged(TreeListDialogField<CPUserLibraryElement> field) {
 			doSelectionChanged(field);
 		}
 
-		public void doubleClicked(TreeListDialogField field) {
+		public void doubleClicked(TreeListDialogField<CPUserLibraryElement> field) {
 			doDoubleClicked(field);
 		}
 
-		public void keyPressed(TreeListDialogField field, KeyEvent event) {
+		public void keyPressed(TreeListDialogField<CPUserLibraryElement> field, KeyEvent event) {
 			doKeyPressed(field, event);
 		}
 
-		public Object[] getChildren(TreeListDialogField field, Object element) {
+		public Object[] getChildren(TreeListDialogField<CPUserLibraryElement> field, Object element) {
 			if (element instanceof CPUserLibraryElement) {
 				CPUserLibraryElement elem= (CPUserLibraryElement) element;
 				return elem.getChildren();
@@ -1400,7 +1418,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 			return EMPTY;
 		}
 
-		public Object getParent(TreeListDialogField field, Object element) {
+		public Object getParent(TreeListDialogField<CPUserLibraryElement> field, Object element) {
 			if (element instanceof CPListElementAttribute) {
 				return ((CPListElementAttribute) element).getParent();
 			} else if (element instanceof CPListElement) {
@@ -1409,7 +1427,7 @@ public class UserLibraryPreferencePage extends PreferencePage implements IWorkbe
 			return null;
 		}
 
-		public boolean hasChildren(TreeListDialogField field, Object element) {
+		public boolean hasChildren(TreeListDialogField<CPUserLibraryElement> field, Object element) {
 			return getChildren(field, element).length > 0;
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/WorkInProgressPreferencePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/WorkInProgressPreferencePage.java
deleted file mode 100644
index 854da83..0000000
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/WorkInProgressPreferencePage.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.ui.preferences;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferencePage;
-
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.PlatformUI;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-
-/**
- * Preference page for work in progress.
- */
-public class WorkInProgressPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-
-	private List fCheckBoxes;
-	private List fRadioButtons;
-	private List fTextControls;
-
-	/**
-	 * creates a new preference page.
-	 */
-	public WorkInProgressPreferencePage() {
-		setPreferenceStore(getPreferenceStore());
-		fRadioButtons= new ArrayList();
-		fCheckBoxes= new ArrayList();
-		fTextControls= new ArrayList();
-	}
-
-	Button addCheckBox(Composite parent, String label, String key) {
-		GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-
-		Button button= new Button(parent, SWT.CHECK);
-		button.setText(label);
-		button.setData(key);
-		button.setLayoutData(gd);
-
-		button.setSelection(getPreferenceStore().getBoolean(key));
-
-		fCheckBoxes.add(button);
-		return button;
-	}
-
-	/*
-	 * @see PreferencePage#createControl(Composite)
-	 */
-	public void createControl(Composite parent) {
-		super.createControl(parent);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), "WORK_IN_PROGRESS_PREFERENCE_PAGE"); //$NON-NLS-1$
-	}
-
-	protected Control createContents(Composite parent) {
-		initializeDialogUnits(parent);
-
-		Composite result= new Composite(parent, SWT.NONE);
-		GridLayout layout= new GridLayout();
-		layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth= 0;
-		layout.verticalSpacing= convertVerticalDLUsToPixels(10);
-		layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
-		result.setLayout(layout);
-
-		// Add your controls here
-
-		applyDialogFont(result);
-		return result;
-	}
-
-
-	/*
-	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
-	 */
-	public void init(IWorkbench workbench) {
-	}
-
-	protected void createSpacer(Composite composite, int columnSpan) {
-		Label label= new Label(composite, SWT.NONE);
-		GridData gd= new GridData();
-		gd.horizontalSpan= columnSpan;
-		label.setLayoutData(gd);
-	}
-
-	/*
-	 * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore()
-	 */
-	protected IPreferenceStore doGetPreferenceStore() {
-		return JavaPlugin.getDefault().getPreferenceStore();
-	}
-
-	/*
-	 * @see PreferencePage#performDefaults()
-	 */
-	protected void performDefaults() {
-		IPreferenceStore store= getPreferenceStore();
-		for (int i= 0; i < fCheckBoxes.size(); i++) {
-			Button button= (Button) fCheckBoxes.get(i);
-			String key= (String) button.getData();
-			button.setSelection(store.getDefaultBoolean(key));
-		}
-		for (int i= 0; i < fRadioButtons.size(); i++) {
-			Button button= (Button) fRadioButtons.get(i);
-			String[] info= (String[]) button.getData();
-			button.setSelection(info[1].equals(store.getDefaultString(info[0])));
-		}
-		for (int i= 0; i < fTextControls.size(); i++) {
-			Text text= (Text) fTextControls.get(i);
-			String key= (String) text.getData();
-			text.setText(store.getDefaultString(key));
-		}
-
-		super.performDefaults();
-	}
-
-	/*
-	 * @see IPreferencePage#performOk()
-	 */
-	public boolean performOk() {
-		IPreferenceStore store= getPreferenceStore();
-		for (int i= 0; i < fCheckBoxes.size(); i++) {
-			Button button= (Button) fCheckBoxes.get(i);
-			String key= (String) button.getData();
-			store.setValue(key, button.getSelection());
-		}
-		for (int i= 0; i < fRadioButtons.size(); i++) {
-			Button button= (Button) fRadioButtons.get(i);
-			if (button.getSelection()) {
-				String[] info= (String[]) button.getData();
-				store.setValue(info[0], info[1]);
-			}
-		}
-		for (int i= 0; i < fTextControls.size(); i++) {
-			Text text= (Text) fTextControls.get(i);
-			String key= (String) text.getData();
-			store.setValue(key, text.getText());
-		}
-
-		JavaPlugin.getDefault().savePluginPreferences();
-		return super.performOk();
-	}
-
-	public static void initDefaults(IPreferenceStore store) {
-		// Initialize your defaults here
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/AbstractCleanUpTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/AbstractCleanUpTabPage.java
index f328337..de4f99d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/AbstractCleanUpTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/AbstractCleanUpTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,18 +20,19 @@ import org.eclipse.jdt.internal.ui.fix.MapCleanUpOptions;
 public abstract class AbstractCleanUpTabPage extends CleanUpTabPage {
 
 	private AbstractCleanUp[] fPreviewCleanUps;
-	private Map fValues;
+	private Map<String, String> fValues;
 
 	public AbstractCleanUpTabPage() {
 		super();
 	}
 
-	protected abstract AbstractCleanUp[] createPreviewCleanUps(Map values);
+	protected abstract AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values);
 
 	/* 
 	 * @see org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpTabPage#setWorkingValues(java.util.Map)
 	 */
-	public void setWorkingValues(Map workingValues) {
+	@Override
+	public void setWorkingValues(Map<String, String> workingValues) {
 		super.setWorkingValues(workingValues);
 		fValues= workingValues;
 		setOptions(new MapCleanUpOptions(workingValues));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java
index 04b0fe6..769da51 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,8 +26,8 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.preferences.DefaultScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IScopeContext;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.IScopeContext;
 
 import org.eclipse.core.resources.IProject;
 
@@ -46,9 +46,9 @@ import org.eclipse.jdt.internal.ui.preferences.formatter.IProfileVersioner;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialog;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileConfigurationBlock;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager;
-import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.CustomProfile;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile;
+import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
@@ -77,16 +77,19 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
 		}
     }
 
+	@Override
 	protected IProfileVersioner createProfileVersioner() {
 	    return new CleanUpProfileVersioner();
     }
 
+	@Override
 	protected ProfileStore createProfileStore(IProfileVersioner versioner) {
 	    fProfileStore= new ProfileStore(CleanUpConstants.CLEANUP_PROFILES, versioner);
 		return fProfileStore;
     }
 
-	protected ProfileManager createProfileManager(List profiles, IScopeContext context, PreferencesAccess access, IProfileVersioner profileVersioner) {
+	@Override
+	protected ProfileManager createProfileManager(List<Profile> profiles, IScopeContext context, PreferencesAccess access, IProfileVersioner profileVersioner) {
 		profiles.addAll(CleanUpPreferenceUtil.getBuiltInProfiles());
 	    fProfileManager= new CleanUpProfileManager(profiles, context, access, profileVersioner);
 		return fProfileManager;
@@ -95,9 +98,10 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
 	/**
      * {@inheritDoc}
      */
-    protected void configurePreview(Composite composite, int numColumns, final ProfileManager profileManager) {
-    	Map settings= profileManager.getSelected().getSettings();
-		final Map sharedSettings= new Hashtable();
+    @Override
+	protected void configurePreview(Composite composite, int numColumns, final ProfileManager profileManager) {
+    	Map<String, String> settings= profileManager.getSelected().getSettings();
+		final Map<String, String> sharedSettings= new Hashtable<String, String>();
 		fill(settings, sharedSettings);
 
 		final ICleanUp[] cleanUps= JavaPlugin.getDefault().getCleanUpRegistry().createCleanUps();
@@ -155,14 +159,15 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
     	return buf.toString();
     }
 
-	private void fill(Map settings, Map sharedSettings) {
+	private void fill(Map<String, String> settings, Map<String, String> sharedSettings) {
 		sharedSettings.clear();
-		for (Iterator iterator= settings.keySet().iterator(); iterator.hasNext();) {
-	        String key= (String)iterator.next();
+		for (Iterator<String> iterator= settings.keySet().iterator(); iterator.hasNext();) {
+	        String key= iterator.next();
 	        sharedSettings.put(key, settings.get(key));
         }
     }
 
+	@Override
 	protected ModifyDialog createModifyDialog(Shell shell, Profile profile, ProfileManager profileManager, ProfileStore profileStore, boolean newProfile) {
         return new CleanUpModifyDialog(shell, profile, profileManager, profileStore, newProfile, CLEANUP_PAGE_SETTINGS_KEY, DIALOGSTORE_LASTSAVELOADPATH);
     }
@@ -170,6 +175,7 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public Composite createContents(Composite parent) {
 	    Composite composite= super.createContents(parent);
 
@@ -185,7 +191,7 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
 		if (node.get(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, null) != null) {
 			showWizard= node.getBoolean(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, true);
 		} else {
-			showWizard= new DefaultScope().getNode(JavaUI.ID_PLUGIN).getBoolean(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, true);
+			showWizard= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).getBoolean(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, true);
 		}
 		if (showWizard)
 			fShowCleanUpWizardDialogField.setSelection(true);
@@ -211,13 +217,14 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void performDefaults() {
 		super.performDefaults();
 		if (fCurrContext == null)
 			return;
 
 		fCurrContext.getNode(JavaUI.ID_PLUGIN).remove(CleanUpConstants.SHOW_CLEAN_UP_WIZARD);
-		boolean showWizard= new DefaultScope().getNode(JavaUI.ID_PLUGIN).getBoolean(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, true);
+		boolean showWizard= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).getBoolean(CleanUpConstants.SHOW_CLEAN_UP_WIZARD, true);
 		fShowCleanUpWizardDialogField.setDialogFieldListener(null);
 		fShowCleanUpWizardDialogField.setSelection(showWizard);
 		fShowCleanUpWizardDialogField.setDialogFieldListener(new IDialogFieldListener() {
@@ -230,6 +237,7 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void preferenceChanged(PreferenceChangeEvent event) {
 		if (CleanUpConstants.CLEANUP_PROFILES.equals(event.getKey())) {
 			try {
@@ -237,16 +245,16 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock {
 				if (id == null)
 					fProfileManager.getDefaultProfile().getID();
 
-				List oldProfiles= fProfileManager.getSortedProfiles();
-				Profile[] oldProfilesArray= (Profile[])oldProfiles.toArray(new Profile[oldProfiles.size()]);
+				List<Profile> oldProfiles= fProfileManager.getSortedProfiles();
+				Profile[] oldProfilesArray= oldProfiles.toArray(new Profile[oldProfiles.size()]);
 				for (int i= 0; i < oldProfilesArray.length; i++) {
 					if (oldProfilesArray[i] instanceof CustomProfile) {
 						fProfileManager.deleteProfile((CustomProfile)oldProfilesArray[i]);
 					}
 				}
 
-				List newProfiles= fProfileStore.readProfilesFromString((String)event.getNewValue());
-				for (Iterator iterator= newProfiles.iterator(); iterator.hasNext();) {
+				List<Profile> newProfiles= fProfileStore.readProfilesFromString((String)event.getNewValue());
+				for (Iterator<Profile> iterator= newProfiles.iterator(); iterator.hasNext();) {
 					CustomProfile profile= (CustomProfile)iterator.next();
 					fProfileManager.addProfile(profile);
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpModifyDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpModifyDialog.java
index b60aa36..7005ab2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpModifyDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpModifyDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,7 +57,8 @@ public class CleanUpModifyDialog extends ModifyDialog {
 	/**
 	 * {@inheritDoc}
 	 */
-	protected void addPages(final Map values) {
+	@Override
+	protected void addPages(final Map<String, String> values) {
 		CleanUpTabPageDescriptor[] descriptors= JavaPlugin.getDefault().getCleanUpRegistry().getCleanUpTabPageDescriptors(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
 
 		fPages= new ICleanUpConfigurationUI[descriptors.length];
@@ -76,6 +77,7 @@ public class CleanUpModifyDialog extends ModifyDialog {
 		}
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite control= (Composite)super.createDialogArea(parent);
 
@@ -87,6 +89,7 @@ public class CleanUpModifyDialog extends ModifyDialog {
 		return control;
 	}
 
+	@Override
 	public void updateStatus(IStatus status) {
 		int count= 0;
 		for (int i= 0; i < fPages.length; i++) {
@@ -99,6 +102,7 @@ public class CleanUpModifyDialog extends ModifyDialog {
 		}
 	}
 
+	@Override
 	public void valuesModified() {
 		super.valuesModified();
 		updateCountLabel();
@@ -118,6 +122,7 @@ public class CleanUpModifyDialog extends ModifyDialog {
 	 * {@inheritDoc}
 	 * @since 3.5
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.CLEAN_UP_PREFERENCE_PAGE;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpPreview.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpPreview.java
index bbcd236..83dcf68 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpPreview.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpPreview.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class CleanUpPreview extends JavaPreview {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void doFormatPreview() {
 		format(fPage.getPreview());
 	}
@@ -108,7 +109,8 @@ public class CleanUpPreview extends JavaPreview {
 		}
 	}
 
-    public void setWorkingValues(Map workingValues) {
+    @Override
+	public void setWorkingValues(Map<String, String> workingValues) {
     	//Don't change the formatter settings
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java
index 84d22bb..3ffa58e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,12 +28,12 @@ import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager;
 public class CleanUpProfileManager extends ProfileManager {
 
 	public static KeySet[] KEY_SETS= {
-		new KeySet(JavaUI.ID_PLUGIN, new ArrayList(JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getKeys()))
+		new KeySet(JavaUI.ID_PLUGIN, new ArrayList<String>(JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getKeys()))
 	};
 
 	private final PreferencesAccess fPreferencesAccess;
 
-	public CleanUpProfileManager(List profiles, IScopeContext context, PreferencesAccess preferencesAccess, IProfileVersioner profileVersioner) {
+	public CleanUpProfileManager(List<Profile> profiles, IScopeContext context, PreferencesAccess preferencesAccess, IProfileVersioner profileVersioner) {
 	    super(profiles, context, preferencesAccess, profileVersioner, KEY_SETS, CleanUpConstants.CLEANUP_PROFILE, CleanUpConstants.CLEANUP_SETTINGS_VERSION_KEY);
 		fPreferencesAccess= preferencesAccess;
     }
@@ -41,14 +41,16 @@ public class CleanUpProfileManager extends ProfileManager {
 	/* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.cleanup.ProfileManager#getDefaultProfile()
      */
-    public Profile getDefaultProfile() {
+    @Override
+	public Profile getDefaultProfile() {
     	return getProfile(CleanUpConstants.DEFAULT_PROFILE);
     }
 
     /**
      * {@inheritDoc}
      */
-    protected void updateProfilesWithName(String oldName, Profile newProfile, boolean applySettings) {
+    @Override
+	protected void updateProfilesWithName(String oldName, Profile newProfile, boolean applySettings) {
         super.updateProfilesWithName(oldName, newProfile, applySettings);
 
         IEclipsePreferences node= fPreferencesAccess.getInstanceScope().getNode(JavaUI.ID_PLUGIN);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileVersioner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileVersioner.java
index 6fc8406..b183bc1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileVersioner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileVersioner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,26 +49,26 @@ public class CleanUpProfileVersioner implements IProfileVersioner {
      * @see org.eclipse.jdt.internal.ui.preferences.cleanup.IProfileVersioner#updateAndComplete(org.eclipse.jdt.internal.ui.preferences.cleanup.ProfileManager.CustomProfile)
      */
 	public void update(CustomProfile profile) {
-		final Map oldSettings= profile.getSettings();
-		Map newSettings= updateAndComplete(oldSettings, profile.getVersion());
+		final Map<String, String> oldSettings= profile.getSettings();
+		Map<String, String> newSettings= updateAndComplete(oldSettings, profile.getVersion());
 		profile.setVersion(CURRENT_VERSION);
 		profile.setSettings(newSettings);
 	}
 
-	private Map updateAndComplete(Map oldSettings, int version) {
-		final Map newSettings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getMap();
+	private Map<String, String> updateAndComplete(Map<String, String> oldSettings, int version) {
+		final Map<String, String> newSettings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getMap();
 
 		switch (version) {
 			case VERSION_1:
 				updateFrom1To2(oldSettings);
 				//$FALL-THROUGH$
 			default:
-				for (final Iterator iter= oldSettings.keySet().iterator(); iter.hasNext();) {
-					final String key= (String) iter.next();
+				for (final Iterator<String> iter= oldSettings.keySet().iterator(); iter.hasNext();) {
+					final String key= iter.next();
 					if (!newSettings.containsKey(key))
 						continue;
 
-					final String value= (String) oldSettings.get(key);
+					final String value= oldSettings.get(key);
 					if (value != null) {
 						newSettings.put(key, value);
 					}
@@ -85,7 +85,7 @@ public class CleanUpProfileVersioner implements IProfileVersioner {
 	    return PROFILE_KIND;
     }
 
-	private static void updateFrom1To2(Map settings) {
+	private static void updateFrom1To2(Map<String, String> settings) {
 		CleanUpOptions defaultSettings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
 		settings.put(CleanUpConstants.ORGANIZE_IMPORTS, defaultSettings.getValue(CleanUpConstants.ORGANIZE_IMPORTS));
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpTabPage.java
index 62dae59..e054f63 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ import org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage;
 
 public abstract class CleanUpTabPage extends ModifyDialogTabPage implements ICleanUpConfigurationUI {
 
-	private Map fValues;
+	private Map<String, String> fValues;
 	private JavaPreview fCleanUpPreview;
 	private boolean fIsSaveAction;
 
@@ -57,7 +57,8 @@ public abstract class CleanUpTabPage extends ModifyDialogTabPage implements ICle
 	/**
 	 * {@inheritDoc}
 	 */
-	public void setWorkingValues(Map workingValues) {
+	@Override
+	public void setWorkingValues(Map<String, String> workingValues) {
 		super.setWorkingValues(workingValues);
 		fValues= workingValues;
 	}
@@ -82,16 +83,19 @@ public abstract class CleanUpTabPage extends ModifyDialogTabPage implements ICle
 		fSelectedCount= selectedCount;
 	}
 
+	@Override
 	protected JavaPreview doCreateJavaPreview(Composite parent) {
 		fCleanUpPreview= new CleanUpPreview(parent, this);
     	return fCleanUpPreview;
     }
 
+	@Override
 	protected void doUpdatePreview() {
 		fCleanUpPreview.setWorkingValues(fValues);
 		fCleanUpPreview.update();
 	}
 
+	@Override
 	protected void initializePage() {
 		fCleanUpPreview.update();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java
index f8bce47..b2629e9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ public final class CodeFormatingTabPage extends AbstractCleanUpTabPage {
 
 	public static final String ID= "org.eclipse.jdt.ui.cleanup.tabpage.code_formatting"; //$NON-NLS-1$
 
-	private Map fValues;
+	private Map<String, String> fValues;
 	private CleanUpPreview fPreview;
 
 	public CodeFormatingTabPage() {
@@ -48,12 +48,14 @@ public final class CodeFormatingTabPage extends AbstractCleanUpTabPage {
 	/**
 	 * {@inheritDoc}
 	 */
-	public void setWorkingValues(Map workingValues) {
+	@Override
+	public void setWorkingValues(Map<String, String> workingValues) {
 		super.setWorkingValues(workingValues);
 		fValues= workingValues;
 	}
 
-	protected AbstractCleanUp[] createPreviewCleanUps(Map values) {
+	@Override
+	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
 		return new AbstractCleanUp[] {
 				new ImportsCleanUp(values),
 				new CodeFormatCleanUp(values),
@@ -61,6 +63,7 @@ public final class CodeFormatingTabPage extends AbstractCleanUpTabPage {
 		};
 	}
 
+	@Override
 	protected JavaPreview doCreateJavaPreview(Composite parent) {
 		fPreview= (CleanUpPreview)super.doCreateJavaPreview(parent);
 		fPreview.showInvisibleCharacters(true);
@@ -69,6 +72,7 @@ public final class CodeFormatingTabPage extends AbstractCleanUpTabPage {
 		return fPreview;
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
 		Group group= createGroup(numColumns, composite, CleanUpMessages.CodeFormatingTabPage_GroupName_Formatter);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
index cfc9237..6db7e4b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,8 @@ public final class CodeStyleTabPage extends AbstractCleanUpTabPage {
     	super();
     }
 
-	protected AbstractCleanUp[] createPreviewCleanUps(Map values) {
+	@Override
+	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
 		return new AbstractCleanUp[] {
         		new ControlStatementsCleanUp(values),
         		new ConvertLoopCleanUp(values),
@@ -40,7 +41,8 @@ public final class CodeStyleTabPage extends AbstractCleanUpTabPage {
         };
     }
 
-    protected void doCreatePreferences(Composite composite, int numColumns) {
+    @Override
+	protected void doCreatePreferences(Composite composite, int numColumns) {
 
     	Group controlGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_ControlStatments);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/ContributedCleanUpTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/ContributedCleanUpTabPage.java
index 535b8e9..fdaa71c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/ContributedCleanUpTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/ContributedCleanUpTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,13 +41,15 @@ public class ContributedCleanUpTabPage extends CleanUpTabPage {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpTabPage#setWorkingValues(java.util.Map)
 	 */
-	public void setWorkingValues(Map workingValues) {
+	@Override
+	public void setWorkingValues(Map<String, String> workingValues) {
 		super.setWorkingValues(workingValues);
 
 		final CleanUpOptions options= new CleanUpOptions(workingValues) {
 			/*
 			 * @see org.eclipse.jdt.internal.ui.fix.CleanUpOptions#setOption(java.lang.String, java.lang.String)
 			 */
+			@Override
 			public void setOption(String key, String value) {
 				super.setOption(key, value);
 
@@ -75,6 +77,7 @@ public class ContributedCleanUpTabPage extends CleanUpTabPage {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doCreatePreferences(org.eclipse.swt.widgets.Composite, int)
 	 */
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 		final Composite parent= new Composite(composite, SWT.NONE);
 		GridData layoutData= new GridData(SWT.FILL, SWT.FILL, true, true);
@@ -117,6 +120,7 @@ public class ContributedCleanUpTabPage extends CleanUpTabPage {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpTabPage#getSelectedCleanUpCount()
 	 */
+	@Override
 	public int getSelectedCleanUpCount() {
 		final int[] result= new int[] { 0 };
 		SafeRunner.run(new ISafeRunnable() {
@@ -136,6 +140,7 @@ public class ContributedCleanUpTabPage extends CleanUpTabPage {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpTabPage#getCleanUpCount()
 	 */
+	@Override
 	public int getCleanUpCount() {
 		final int[] result= new int[] { 0 };
 		SafeRunner.run(new ISafeRunnable() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MemberAccessesTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MemberAccessesTabPage.java
index efe2f17..6cd411b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MemberAccessesTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MemberAccessesTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,13 +30,15 @@ public final class MemberAccessesTabPage extends AbstractCleanUpTabPage {
     	super();
     }
 
-	protected AbstractCleanUp[] createPreviewCleanUps(Map values) {
+	@Override
+	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
 		return new AbstractCleanUp[] {
         	new CodeStyleCleanUp(values)
         };
     }
 
-    protected void doCreatePreferences(Composite composite, int numColumns) {
+    @Override
+	protected void doCreatePreferences(Composite composite, int numColumns) {
 
     	Group instanceGroup= createGroup(numColumns, composite, CleanUpMessages.MemberAccessesTabPage_GroupName_NonStaticAccesses);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MissingCodeTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MissingCodeTabPage.java
index 07a0973..decbaeb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MissingCodeTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/MissingCodeTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,10 +30,12 @@ public final class MissingCodeTabPage extends AbstractCleanUpTabPage {
 		super();
 	}
 
-	protected AbstractCleanUp[] createPreviewCleanUps(Map values) {
+	@Override
+	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
 		return new AbstractCleanUp[] { new Java50CleanUp(values), new PotentialProgrammingProblemsCleanUp(values), new UnimplementedCodeCleanUp(values) };
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
     	Group annotationsGroup= createGroup(numColumns, composite, CleanUpMessages.MissingCodeTabPage_GroupName_Annotations);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/UnnecessaryCodeTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/UnnecessaryCodeTabPage.java
index 6f20e41..5795b8c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/UnnecessaryCodeTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/UnnecessaryCodeTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,8 @@ public final class UnnecessaryCodeTabPage extends AbstractCleanUpTabPage {
     	super();
     }
 
-	protected AbstractCleanUp[] createPreviewCleanUps(Map values) {
+	@Override
+	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
 		return new AbstractCleanUp[] {
         		new UnusedCodeCleanUp(values),
         		new UnnecessaryCodeCleanUp(values),
@@ -38,7 +39,8 @@ public final class UnnecessaryCodeTabPage extends AbstractCleanUpTabPage {
         };
     }
 
-    protected void doCreatePreferences(Composite composite, int numColumns) {
+    @Override
+	protected void doCreatePreferences(Composite composite, int numColumns) {
 
     	Group unusedCodeGroup= createGroup(5, composite, CleanUpMessages.UnnecessaryCodeTabPage_GroupName_UnusedCode);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/AlreadyExistsDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/AlreadyExistsDialog.java
index b5b6d50..42b99d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/AlreadyExistsDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/AlreadyExistsDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,11 +64,13 @@ public class AlreadyExistsDialog extends StatusDialog {
 	}
 
 
+	@Override
 	public void create() {
 		super.create();
 		setTitle(FormatterMessages.AlreadyExistsDialog_dialog_title);
 	}
 
+	@Override
 	public Control createDialogArea(Composite parent) {
 
 		fComposite = (Composite) super.createDialogArea(parent);
@@ -176,6 +178,7 @@ public class AlreadyExistsDialog extends StatusDialog {
 	}
 
 
+	@Override
 	protected void okPressed() {
 		if (!getStatus().isOK())
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BlankLinesTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BlankLinesTabPage.java
index 00648f4..0688229 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BlankLinesTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BlankLinesTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,10 +64,11 @@ public class BlankLinesTabPage extends FormatterTabPage {
 	 *
 	 * @param workingValues The values wherein the options are stored.
 	 */
-	public BlankLinesTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public BlankLinesTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
 	    Group group;
@@ -92,6 +93,7 @@ public class BlankLinesTabPage extends FormatterTabPage {
 		createBlankLineTextField(group, numColumns, FormatterMessages.BlankLinesTabPage_blank_lines_option_empty_lines_to_preserve, DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE);
 	}
 
+	@Override
 	protected void initializePage() {
 	    fPreview.setPreviewText(PREVIEW);
 	}
@@ -106,7 +108,8 @@ public class BlankLinesTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doCreateJavaPreview(org.eclipse.swt.widgets.Composite)
      */
-    protected JavaPreview doCreateJavaPreview(Composite parent) {
+    @Override
+	protected JavaPreview doCreateJavaPreview(Composite parent) {
         fPreview= new CompilationUnitPreview(fWorkingValues, parent);
         return fPreview;
     }
@@ -114,7 +117,8 @@ public class BlankLinesTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doUpdatePreview()
      */
-    protected void doUpdatePreview() {
+    @Override
+	protected void doUpdatePreview() {
     	super.doUpdatePreview();
         fPreview.update();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BracesTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BracesTabPage.java
index d28f4c9..463cc76 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BracesTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/BracesTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,10 +95,11 @@ public class BracesTabPage extends FormatterTabPage {
 	 * @param modifyDialog the modify dialog
 	 * @param workingValues the working values
 	 */
-	public BracesTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public BracesTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
 		final Group group= createGroup(numColumns, composite, FormatterMessages.BracesTabPage_group_brace_positions_title);
@@ -128,10 +129,12 @@ public class BracesTabPage extends FormatterTabPage {
 		arrayInitCheckBox.setEnabled(!arrayInitOption.hasValue(DefaultCodeFormatterConstants.END_OF_LINE));
 	}
 
+	@Override
 	protected void initializePage() {
 	    fPreview.setPreviewText(PREVIEW);
 	}
 
+	@Override
 	protected JavaPreview doCreateJavaPreview(Composite parent) {
 	    fPreview= new CompilationUnitPreview(fWorkingValues, parent);
 	    return fPreview;
@@ -153,7 +156,8 @@ public class BracesTabPage extends FormatterTabPage {
 	}
 
 
-    protected void doUpdatePreview() {
+    @Override
+	protected void doUpdatePreview() {
     	super.doUpdatePreview();
         fPreview.update();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java
index 5a956f6..e1d09d5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,18 +86,22 @@ public class CodeFormatterConfigurationBlock extends ProfileConfigurationBlock {
 		super(project, access, DIALOGSTORE_LASTSAVELOADPATH);
 	}
 
+	@Override
 	protected IProfileVersioner createProfileVersioner() {
 	    return new ProfileVersioner();
     }
 
+	@Override
 	protected ProfileStore createProfileStore(IProfileVersioner versioner) {
 	    return new FormatterProfileStore(versioner);
     }
 
-	protected ProfileManager createProfileManager(List profiles, IScopeContext context, PreferencesAccess access, IProfileVersioner profileVersioner) {
+	@Override
+	protected ProfileManager createProfileManager(List<Profile> profiles, IScopeContext context, PreferencesAccess access, IProfileVersioner profileVersioner) {
 	    return new FormatterProfileManager(profiles, context, access, profileVersioner);
     }
 
+	@Override
 	protected void configurePreview(Composite composite, int numColumns, ProfileManager profileManager) {
 		createLabel(composite, FormatterMessages.CodingStyleConfigurationBlock_preview_label_text, numColumns);
 		CompilationUnitPreview result= new CompilationUnitPreview(profileManager.getSelected().getSettings(), composite);
@@ -115,7 +119,8 @@ public class CodeFormatterConfigurationBlock extends ProfileConfigurationBlock {
 	}
 
 
-    protected ModifyDialog createModifyDialog(Shell shell, Profile profile, ProfileManager profileManager, ProfileStore profileStore, boolean newProfile) {
+    @Override
+	protected ModifyDialog createModifyDialog(Shell shell, Profile profile, ProfileManager profileManager, ProfileStore profileStore, boolean newProfile) {
         return new FormatterModifyDialog(shell, profile, profileManager, profileStore, newProfile, FORMATTER_DIALOG_PREFERENCE_KEY, DIALOGSTORE_LASTSAVELOADPATH);
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CommentsTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CommentsTabPage.java
index 63a63eb..052c2d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CommentsTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CommentsTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Ray V. (voidstar at gmail.com) - Contribution for bug 282988
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.preferences.formatter;
 
@@ -33,21 +34,21 @@ public class CommentsTabPage extends FormatterTabPage {
 
 	private static abstract class Controller implements Observer {
 
-		private final Collection fMasters;
-		private final Collection fSlaves;
+		private final Collection<CheckboxPreference> fMasters;
+		private final Collection<Object> fSlaves;
 
-		public Controller(Collection masters, Collection slaves) {
+		public Controller(Collection<CheckboxPreference> masters, Collection<Object> slaves) {
 			fMasters= masters;
 			fSlaves= slaves;
-			for (final Iterator iter= fMasters.iterator(); iter.hasNext();) {
-				((CheckboxPreference)iter.next()).addObserver(this);
+			for (final Iterator<CheckboxPreference> iter= fMasters.iterator(); iter.hasNext();) {
+				iter.next().addObserver(this);
 			}
 		}
 
 		public void update(Observable o, Object arg) {
 			boolean enabled= areSlavesEnabled();
 
-			for (final Iterator iter= fSlaves.iterator(); iter.hasNext();) {
+			for (final Iterator<Object> iter= fSlaves.iterator(); iter.hasNext();) {
 				final Object obj= iter.next();
 				if (obj instanceof Preference) {
 					((Preference)obj).setEnabled(enabled);
@@ -57,7 +58,7 @@ public class CommentsTabPage extends FormatterTabPage {
 			}
 		}
 
-		public Collection getMasters() {
+		public Collection<CheckboxPreference> getMasters() {
 			return fMasters;
 		}
 
@@ -66,7 +67,7 @@ public class CommentsTabPage extends FormatterTabPage {
 
 	private final static class OrController extends Controller {
 
-		public OrController(Collection masters, Collection slaves) {
+		public OrController(Collection<CheckboxPreference> masters, Collection<Object> slaves) {
 			super(masters, slaves);
 			update(null, null);
 		}
@@ -74,9 +75,10 @@ public class CommentsTabPage extends FormatterTabPage {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected boolean areSlavesEnabled() {
-			for (final Iterator iter= getMasters().iterator(); iter.hasNext();) {
-				if (((CheckboxPreference)iter.next()).getChecked())
+			for (final Iterator<CheckboxPreference> iter= getMasters().iterator(); iter.hasNext();) {
+				if (iter.next().getChecked())
 					return true;
 			}
 			return false;
@@ -119,14 +121,21 @@ public class CommentsTabPage extends FormatterTabPage {
 		" * @return The result of the foo operation, usually within 0 and 1000.\n" + //$NON-NLS-1$
 		" */" + //$NON-NLS-1$
 		" int foo(int a, int b);\n" + //$NON-NLS-1$
+		"}\n" +//$NON-NLS-1$
+		"class Test {\n" +//$NON-NLS-1$
+		"\t\tvoid trailingCommented() {\n" +  //$NON-NLS-1$
+		"\t\t\t\tSystem.out.println(\"indented\");\t\t// comment\n" +  //$NON-NLS-1$
+		"\t\t\t\tSystem.out.println(\"indent\");\t\t// comment\n" +  //$NON-NLS-1$
+		"\t\t}\n" +  //$NON-NLS-1$
 		"}"; //$NON-NLS-1$
 
 	private CompilationUnitPreview fPreview;
 
-	public CommentsTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public CommentsTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 		final int indent= fPixelConverter.convertWidthInCharsToPixels(4);
 
@@ -141,8 +150,9 @@ public class CommentsTabPage extends FormatterTabPage {
 		GridData spacerData= new GridData(0, 0);
 		spacerData.horizontalSpan= numColumns;
 		new Composite(globalGroup, SWT.NONE).setLayoutData(spacerData);
-		createPrefFalseTrue(globalGroup, numColumns, FormatterMessages.CommentsTabPage_never_indent_block_comments_on_first_column, DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN, false);
+		createPrefFalseTrue(globalGroup, numColumns, FormatterMessages.CommentsTabPage_preserve_white_space_before_line_comment, DefaultCodeFormatterConstants.FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT, false);
 		createPrefFalseTrue(globalGroup, numColumns, FormatterMessages.CommentsTabPage_never_indent_line_comments_on_first_column, DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN, false);
+		createPrefFalseTrue(globalGroup, numColumns, FormatterMessages.CommentsTabPage_never_indent_block_comments_on_first_column, DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN, false);
 		createPrefFalseTrue(globalGroup, numColumns, FormatterMessages.CommentsTabPage_do_not_join_lines, DefaultCodeFormatterConstants.FORMATTER_JOIN_LINES_IN_COMMENTS, true);
 
 		// javadoc comment formatting settings
@@ -167,24 +177,25 @@ public class CommentsTabPage extends FormatterTabPage {
 		final NumberPreference lineWidth= createNumberPref(widthGroup, numColumns, FormatterMessages.CommentsTabPage_line_width, DefaultCodeFormatterConstants.FORMATTER_COMMENT_LINE_LENGTH, 0, 9999);
 
 
-		ArrayList lineFirstColumnMasters= new ArrayList();
+		ArrayList<CheckboxPreference> lineFirstColumnMasters= new ArrayList<CheckboxPreference>();
 		lineFirstColumnMasters.add(singleLineComments);
 
-		ArrayList lineFirstColumnSlaves= new ArrayList();
+		ArrayList<Object> lineFirstColumnSlaves= new ArrayList<Object>();
 		lineFirstColumnSlaves.add(singleLineCommentsOnFirstColumn);
 
 		new Controller(lineFirstColumnMasters, lineFirstColumnSlaves) {
+			@Override
 			protected boolean areSlavesEnabled() {
 				return singleLineComments.getChecked();
             }
 		}.update(null, null);
 
 
-		ArrayList javaDocMaster= new ArrayList();
+		ArrayList<CheckboxPreference> javaDocMaster= new ArrayList<CheckboxPreference>();
 		javaDocMaster.add(javadoc);
 		javaDocMaster.add(header);
 
-		ArrayList javaDocSlaves= new ArrayList();
+		ArrayList<Object> javaDocSlaves= new ArrayList<Object>();
 		javaDocSlaves.add(settingsGroup);
 		javaDocSlaves.add(html);
 		javaDocSlaves.add(code);
@@ -197,26 +208,27 @@ public class CommentsTabPage extends FormatterTabPage {
 		new OrController(javaDocMaster, javaDocSlaves);
 
 
-		ArrayList indentMasters= new ArrayList();
+		ArrayList<CheckboxPreference> indentMasters= new ArrayList<CheckboxPreference>();
 		indentMasters.add(javadoc);
 		indentMasters.add(header);
 		indentMasters.add(indentJavadoc);
 
-		ArrayList indentSlaves= new ArrayList();
+		ArrayList<Object> indentSlaves= new ArrayList<Object>();
 		indentSlaves.add(indentDesc);
 
 		new Controller(indentMasters, indentSlaves) {
+			@Override
 			protected boolean areSlavesEnabled() {
 				return (javadoc.getChecked() || header.getChecked()) && indentJavadoc.getChecked();
             }
 		}.update(null, null);
 
 
-		ArrayList blockMasters= new ArrayList();
+		ArrayList<CheckboxPreference> blockMasters= new ArrayList<CheckboxPreference>();
 		blockMasters.add(blockComment);
 		blockMasters.add(header);
 
-		ArrayList blockSlaves= new ArrayList();
+		ArrayList<Object> blockSlaves= new ArrayList<Object>();
 		blockSlaves.add(blockSettingsGroup);
 		blockSlaves.add(nlBoundariesBlock);
 		blockSlaves.add(blankLinesBlock);
@@ -224,19 +236,20 @@ public class CommentsTabPage extends FormatterTabPage {
 		new OrController(blockMasters, blockSlaves);
 
 
-		ArrayList lineWidthMasters= new ArrayList();
+		ArrayList<CheckboxPreference> lineWidthMasters= new ArrayList<CheckboxPreference>();
 		lineWidthMasters.add(javadoc);
 		lineWidthMasters.add(blockComment);
 		lineWidthMasters.add(singleLineComments);
 		lineWidthMasters.add(header);
 
-		ArrayList lineWidthSlaves= new ArrayList();
+		ArrayList<Object> lineWidthSlaves= new ArrayList<Object>();
 		lineWidthSlaves.add(widthGroup);
 		lineWidthSlaves.add(lineWidth);
 
 		new OrController(lineWidthMasters, lineWidthSlaves);
 	}
 
+	@Override
 	protected void initializePage() {
 		fPreview.setPreviewText(PREVIEW);
 	}
@@ -244,7 +257,8 @@ public class CommentsTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doCreateJavaPreview(org.eclipse.swt.widgets.Composite)
      */
-    protected JavaPreview doCreateJavaPreview(Composite parent) {
+    @Override
+	protected JavaPreview doCreateJavaPreview(Composite parent) {
         fPreview= new CompilationUnitPreview(fWorkingValues, parent);
         return fPreview;
     }
@@ -252,7 +266,8 @@ public class CommentsTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doUpdatePreview()
      */
-    protected void doUpdatePreview() {
+    @Override
+	protected void doUpdatePreview() {
     	super.doUpdatePreview();
         fPreview.update();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CompilationUnitPreview.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CompilationUnitPreview.java
index 1e97d15..931d5c9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CompilationUnitPreview.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CompilationUnitPreview.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,12 +37,13 @@ public class CompilationUnitPreview extends JavaPreview {
      * @param workingValues
      * @param parent
      */
-    public CompilationUnitPreview(Map workingValues, Composite parent) {
+    public CompilationUnitPreview(Map<String, String> workingValues, Composite parent) {
 
         super(workingValues, parent);
     }
 
-    protected void doFormatPreview() {
+    @Override
+	protected void doFormatPreview() {
         if (fPreviewText == null) {
             fPreviewDocument.set(""); //$NON-NLS-1$
             return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ControlStatementsTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ControlStatementsTabPage.java
index 4427ff6..c011c9f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ControlStatementsTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ControlStatementsTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,10 +61,11 @@ public class ControlStatementsTabPage extends FormatterTabPage {
 	protected CheckboxPreference fThenStatementPref, fSimpleIfPref;
 
 
-	public ControlStatementsTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public ControlStatementsTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
 		final Group generalGroup= createGroup(numColumns, composite, FormatterMessages.ControlStatementsTabPage_general_group_title);
@@ -97,6 +98,7 @@ public class ControlStatementsTabPage extends FormatterTabPage {
 		createCheckboxPref(ifElseGroup, numColumns, FormatterMessages.ControlStatementsTabPage_if_else_group_keep_guardian_clause_on_one_line, DefaultCodeFormatterConstants.FORMATTER_KEEP_GUARDIAN_CLAUSE_ON_ONE_LINE, FALSE_TRUE);
 	}
 
+	@Override
 	protected void initializePage() {
 	    fPreview.setPreviewText(PREVIEW);
 	}
@@ -104,7 +106,8 @@ public class ControlStatementsTabPage extends FormatterTabPage {
 	/* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doCreateJavaPreview(org.eclipse.swt.widgets.Composite)
      */
-    protected JavaPreview doCreateJavaPreview(Composite parent) {
+    @Override
+	protected JavaPreview doCreateJavaPreview(Composite parent) {
         fPreview= new CompilationUnitPreview(fWorkingValues, parent);
         return fPreview;
     }
@@ -112,7 +115,8 @@ public class ControlStatementsTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doUpdatePreview()
      */
-    protected void doUpdatePreview() {
+    @Override
+	protected void doUpdatePreview() {
     	super.doUpdatePreview();
         fPreview.update();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CreateProfileDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CreateProfileDialog.java
index 597d353..371826c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CreateProfileDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/CreateProfileDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,7 +60,7 @@ public class CreateProfileDialog extends StatusDialog {
 	private final static StatusInfo fDuplicate= new StatusInfo(IStatus.ERROR, FormatterMessages.CreateProfileDialog_status_message_profile_with_this_name_already_exists);
 
 	private final ProfileManager fProfileManager;
-	private final List fSortedProfiles;
+	private final List<Profile> fSortedProfiles;
 	private final String [] fSortedNames;
 
 	private CustomProfile fCreatedProfile;
@@ -78,11 +78,13 @@ public class CreateProfileDialog extends StatusDialog {
 	}
 
 
+	@Override
 	public void create() {
 		super.create();
 		setTitle(FormatterMessages.CreateProfileDialog_dialog_title);
 	}
 
+	@Override
 	public Control createDialogArea(Composite parent) {
 
 		final int numColumns= 2;
@@ -174,13 +176,14 @@ public class CreateProfileDialog extends StatusDialog {
 	}
 
 
+	@Override
 	protected void okPressed() {
 		if (!getStatus().isOK())
 			return;
 
 		JavaPlugin.getDefault().getDialogSettings().put(PREF_OPEN_EDIT_DIALOG, fOpenEditDialog);
 
-		final Map baseSettings= new HashMap(((Profile)fSortedProfiles.get(fProfileCombo.getSelectionIndex())).getSettings());
+		final Map<String, String> baseSettings= new HashMap<String, String>(fSortedProfiles.get(fProfileCombo.getSelectionIndex()).getSettings());
 		final String profileName= fNameText.getText();
 
 		fCreatedProfile= new CustomProfile(profileName, baseSettings, fProfileVersioner.getCurrentVersion(), fProfileVersioner.getProfileKind());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.java
index 36c9dcd..97380c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     istvan at benedek-home.de - 103706 [formatter] indent empty lines
  *     Aaron Luchko, aluchko at redhat.com - 105926 [Formatter] Exporting Unnamed profile fails silently
  *     Brock Janiczak <brockj at tpg.com.au> - [formatter] Add  option: "add new line after label" - https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741
+ *     Ray V. (voidstar at gmail.com) - Contribution for bug 282988
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.preferences.formatter;
 
@@ -356,6 +357,7 @@ final class FormatterMessages extends NLS {
 	public static String commentsTabPage_enable_javadoc_comment_formatting;
 	public static String CommentsTabPage_enable_line_comment_formatting;
 	public static String CommentsTabPage_enable_block_comment_formatting;
+	public static String CommentsTabPage_preserve_white_space_before_line_comment;
 	public static String CommentsTabPage_format_header;
 	public static String CommentsTabPage_format_html;
 	public static String CommentsTabPage_format_code_snippets;
@@ -442,8 +444,11 @@ final class FormatterMessages extends NLS {
 	public static String NewLinesTabPage_array_group_option_after_opening_brace_of_array_initializer;
 	public static String NewLinesTabPage_array_group_option_before_closing_brace_of_array_initializer;
 	public static String NewLinesTabPage_annotations_group_local_variables;
-	public static String NewLinesTabPage_annotations_group_members;
 	public static String NewLinesTabPage_annotations_group_paramters;
+	public static String NewLinesTabPage_annotations_group_packages;
+	public static String NewLinesTabPage_annotations_group_types;
+	public static String NewLinesTabPage_annotations_group_fields;
+	public static String NewLinesTabPage_annotations_group_methods;
 	public static String NewLinesTabPage_annotations_group_title;
 	public static String ProfileManager_default_profile_name;
 	public static String ProfileManager_eclipse_profile_name;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.properties
index 88299ba..29c9688 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
 #     istvan at benedek-home.de - 103706 [formatter] indent empty lines
 #     Aaron Luchko, aluchko at redhat.com - 105926 [Formatter] Exporting Unnamed profile fails silently
 #     Brock Janiczak <brockj at tpg.com.au> - [formatter] Add  option: "add new line after label" - https://bugs.eclipse.org/bugs/show_bug.cgi?id=150741
+#     Ray V. (voidstar at gmail.com) - Contribution for bug 282988
 ###############################################################################
 
 WhiteSpaceTabPage_assignments=Assignments
@@ -395,6 +396,7 @@ CommentsTabPage_group1_title=General settings
 commentsTabPage_enable_javadoc_comment_formatting=Enable &Javadoc comment formatting
 CommentsTabPage_enable_line_comment_formatting=Enable line &comment formatting
 CommentsTabPage_enable_block_comment_formatting=Enable &block comment formatting
+CommentsTabPage_preserve_white_space_before_line_comment=Preserve white space between code and line comments
 CommentsTabPage_remove_blank_block_comment_lines=Remove blank lines
 CommentsTabPage_format_header=Enable &header comment formatting
 CommentsTabPage_format_html=Format HTML tags
@@ -490,10 +492,13 @@ NewLinesTabPage_arrayInitializer_group_title=Array initializers
 NewLinesTabPage_array_group_option_after_opening_brace_of_array_initializer=Insert new line &after opening brace of array initializer
 NewLinesTabPage_array_group_option_before_closing_brace_of_array_initializer=Insert new line before closing brace of array initiali&zer
 
-NewLinesTabPage_annotations_group_local_variables=Insert new line after ann&otations on local variables
-NewLinesTabPage_annotations_group_members=&Insert new line after annotations on members
+NewLinesTabPage_annotations_group_local_variables=Insert new line after annotations on local variables
 NewLinesTabPage_annotations_group_paramters=Insert new line after annotations on parameters
-NewLinesTabPage_annotations_group_title=Annotations
+NewLinesTabPage_annotations_group_packages=Insert new line after annotations on packages
+NewLinesTabPage_annotations_group_types=Insert new line after annotations on types
+NewLinesTabPage_annotations_group_fields=Insert new line after annotations on fields
+NewLinesTabPage_annotations_group_methods=Insert new line after annotations on methods
+NewLinesTabPage_annotations_group_title=Ann&otations
 
 OffOnTagsTabPage_description=Off/On tags can be used in any comments to turn the formatter off and on in a source file.\n\
 - At the beginning of each file, the formatter is enabled.\n\
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java
index 6279785..4de1bc9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterModifyDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,7 +24,8 @@ public class FormatterModifyDialog extends ModifyDialog {
 		super(parentShell, profile, profileManager, profileStore, newProfile, dialogPreferencesKey, lastSavePathKey);
 	}
 
-	protected void addPages(Map values) {
+	@Override
+	protected void addPages(Map<String, String> values) {
 		addTabPage(FormatterMessages.ModifyDialog_tabpage_indentation_title, new IndentationTabPage(this, values));
 		addTabPage(FormatterMessages.ModifyDialog_tabpage_braces_title, new BracesTabPage(this, values));
 		addTabPage(FormatterMessages.ModifyDialog_tabpage_whitespace_title, new WhiteSpaceTabPage(this, values));
@@ -41,6 +42,7 @@ public class FormatterModifyDialog extends ModifyDialog {
 	 * 
 	 * @since 3.5
 	 */
+	@Override
 	protected String getHelpContextId() {
 		return IJavaHelpContextIds.CODEFORMATTER_PREFERENCE_PAGE;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileManager.java
index e81a670..1495f65 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,18 +36,18 @@ public class FormatterProfileManager extends ProfileManager {
 	public final static String DEFAULT_PROFILE= ECLIPSE_PROFILE;
 
 	private final static KeySet[] KEY_SETS= new KeySet[] {
-		new KeySet(JavaCore.PLUGIN_ID, new ArrayList(DefaultCodeFormatterConstants.getJavaConventionsSettings().keySet())),
-		new KeySet(JavaUI.ID_PLUGIN, Collections.EMPTY_LIST)
+		new KeySet(JavaCore.PLUGIN_ID, new ArrayList<String>(DefaultCodeFormatterConstants.getJavaConventionsSettings().keySet())),
+		new KeySet(JavaUI.ID_PLUGIN, Collections.<String>emptyList())
 	};
 
 	private final static String PROFILE_KEY= PreferenceConstants.FORMATTER_PROFILE;
 	private final static String FORMATTER_SETTINGS_VERSION= "formatter_settings_version";  //$NON-NLS-1$
 
-	public FormatterProfileManager(List profiles, IScopeContext context, PreferencesAccess preferencesAccess, IProfileVersioner profileVersioner) {
+	public FormatterProfileManager(List<Profile> profiles, IScopeContext context, PreferencesAccess preferencesAccess, IProfileVersioner profileVersioner) {
 	    super(addBuiltinProfiles(profiles, profileVersioner), context, preferencesAccess, profileVersioner, KEY_SETS, PROFILE_KEY, FORMATTER_SETTINGS_VERSION);
     }
 
-	private static List addBuiltinProfiles(List profiles, IProfileVersioner profileVersioner) {
+	private static List<Profile> addBuiltinProfiles(List<Profile> profiles, IProfileVersioner profileVersioner) {
 		final Profile javaProfile= new BuiltInProfile(JAVA_PROFILE, FormatterMessages.ProfileManager_java_conventions_profile_name, getJavaSettings(), 1, profileVersioner.getCurrentVersion(), profileVersioner.getProfileKind());
 		profiles.add(javaProfile);
 
@@ -63,8 +63,8 @@ public class FormatterProfileManager extends ProfileManager {
 	/**
 	 * @return Returns the settings for the default profile.
 	 */
-	public static Map getEclipse21Settings() {
-		final Map options= DefaultCodeFormatterConstants.getEclipse21Settings();
+	public static Map<String, String> getEclipse21Settings() {
+		final Map<String, String> options= DefaultCodeFormatterConstants.getEclipse21Settings();
 
 		ProfileVersioner.setLatestCompliance(options);
 		return options;
@@ -73,8 +73,8 @@ public class FormatterProfileManager extends ProfileManager {
 	/**
 	 * @return Returns the settings for the new eclipse profile.
 	 */
-	public static Map getEclipseSettings() {
-		final Map options= DefaultCodeFormatterConstants.getEclipseDefaultSettings();
+	public static Map<String, String> getEclipseSettings() {
+		final Map<String, String> options= DefaultCodeFormatterConstants.getEclipseDefaultSettings();
 
 		ProfileVersioner.setLatestCompliance(options);
 		return options;
@@ -83,8 +83,8 @@ public class FormatterProfileManager extends ProfileManager {
 	/**
 	 * @return Returns the settings for the Java Conventions profile.
 	 */
-	public static Map getJavaSettings() {
-		final Map options= DefaultCodeFormatterConstants.getJavaConventionsSettings();
+	public static Map<String, String> getJavaSettings() {
+		final Map<String, String> options= DefaultCodeFormatterConstants.getJavaConventionsSettings();
 
 		ProfileVersioner.setLatestCompliance(options);
 		return options;
@@ -93,7 +93,7 @@ public class FormatterProfileManager extends ProfileManager {
 	/**
 	 * @return Returns the default settings.
 	 */
-	public static Map getDefaultSettings() {
+	public static Map<String, String> getDefaultSettings() {
 		return getEclipseSettings();
 	}
 
@@ -101,11 +101,12 @@ public class FormatterProfileManager extends ProfileManager {
 	/* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager#getSelectedProfileId(org.eclipse.core.runtime.preferences.IScopeContext)
      */
+	@Override
 	protected String getSelectedProfileId(IScopeContext instanceScope) {
 		String profileId= instanceScope.getNode(JavaUI.ID_PLUGIN).get(PROFILE_KEY, null);
 		if (profileId == null) {
 			// request from bug 129427
-			profileId= new DefaultScope().getNode(JavaUI.ID_PLUGIN).get(PROFILE_KEY, null);
+			profileId= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).get(PROFILE_KEY, null);
 			// fix for bug 89739
 			if (DEFAULT_PROFILE.equals(profileId)) { // default default:
 				IEclipsePreferences node= instanceScope.getNode(JavaCore.PLUGIN_ID);
@@ -124,7 +125,8 @@ public class FormatterProfileManager extends ProfileManager {
 	/* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager#getDefaultProfile()
      */
-    public Profile getDefaultProfile() {
+    @Override
+	public Profile getDefaultProfile() {
 	    return getProfile(DEFAULT_PROFILE);
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
index 6be2d34..47b8702 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,9 +24,6 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IScopeContext;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-
 import org.eclipse.jdt.core.JavaCore;
 
 import org.eclipse.jdt.ui.JavaUI;
@@ -34,6 +31,7 @@ import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.preferences.PreferencesAccess;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.CustomProfile;
+import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile;
 
 
 
@@ -54,8 +52,9 @@ public class FormatterProfileStore extends ProfileStore {
 	/**
 	 * {@inheritDoc}
 	 */
-	public List readProfiles(IScopeContext scope) throws CoreException {
-	    List profiles= super.readProfiles(scope);
+	@Override
+	public List<Profile> readProfiles(IScopeContext scope) throws CoreException {
+	    List<Profile> profiles= super.readProfiles(scope);
 	    if (profiles == null) {
 			profiles= readOldForCompatibility(scope);
 		}
@@ -67,7 +66,7 @@ public class FormatterProfileStore extends ProfileStore {
 	 * as collection.
 	 * @return returns a list of <code>CustomProfile</code> or <code>null</code>
 	 */
-	private List readOldForCompatibility(IScopeContext instanceScope) {
+	private List<Profile> readOldForCompatibility(IScopeContext instanceScope) {
 
 		// in 3.0 M9 and less the profiles were stored in a file in the plugin's meta data
 		final String STORE_FILE= "code_formatter_profiles.xml"; //$NON-NLS-1$
@@ -80,7 +79,7 @@ public class FormatterProfileStore extends ProfileStore {
 			// note that it's wrong to use a file reader when XML declares UTF-8: Kept for compatibility
 			final FileReader reader= new FileReader(file);
 			try {
-				List res= readProfilesFromStream(new InputSource(reader));
+				List<Profile> res= readProfilesFromStream(new InputSource(reader));
 				if (res != null) {
 					for (int i= 0; i < res.size(); i++) {
 						fProfileVersioner.update((CustomProfile) res.get(i));
@@ -112,9 +111,9 @@ public class FormatterProfileStore extends ProfileStore {
 			return; // is up to date
 		}
 		try {
-			List profiles= (new FormatterProfileStore(profileVersioner)).readProfiles(instanceScope);
+			List<Profile> profiles= (new FormatterProfileStore(profileVersioner)).readProfiles(instanceScope);
 			if (profiles == null) {
-				profiles= new ArrayList();
+				profiles= new ArrayList<Profile>();
 			}
 			ProfileManager manager= new FormatterProfileManager(profiles, instanceScope, access, profileVersioner);
 			if (manager.getSelected() instanceof CustomProfile) {
@@ -122,16 +121,6 @@ public class FormatterProfileStore extends ProfileStore {
 			}
 			uiPreferences.putInt(PREF_FORMATTER_PROFILES + VERSION_KEY_SUFFIX, profileVersioner.getCurrentVersion());
 			savePreferences(instanceScope);
-
-			IProject[] projects= ResourcesPlugin.getWorkspace().getRoot().getProjects();
-			for (int i= 0; i < projects.length; i++) {
-				IScopeContext scope= access.getProjectScope(projects[i]);
-				if (manager.hasProjectSpecificSettings(scope)) {
-					manager= new FormatterProfileManager(profiles, scope, access, profileVersioner);
-					manager.commitChanges(scope); // updates JavaCore project options
-					savePreferences(scope);
-				}
-			}
 		} catch (CoreException e) {
 			JavaPlugin.log(e);
 		} catch (BackingStoreException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterTabPage.java
index 8729e48..ccaee44 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,12 +54,13 @@ public abstract class FormatterTabPage extends ModifyDialogTabPage {
 	private final IDialogSettings fDialogSettings;
 	private Button fShowInvisibleButton;
 
-	public FormatterTabPage(IModifyDialogTabPage.IModificationListener modifyListener, Map workingValues) {
+	public FormatterTabPage(IModifyDialogTabPage.IModificationListener modifyListener, Map<String, String> workingValues) {
 		super(modifyListener, workingValues);
 
 		fDialogSettings= JavaPlugin.getDefault().getDialogSettings();
 	}
 
+	@Override
 	protected Composite doCreatePreviewPane(Composite composite, int numColumns) {
 
 		createLabel(numColumns - 1, composite, FormatterMessages.ModifyDialogTabPage_preview_label_text);
@@ -68,6 +69,7 @@ public abstract class FormatterTabPage extends ModifyDialogTabPage {
 		fShowInvisibleButton.setText(FormatterMessages.FormatterTabPage_ShowInvisibleCharacters_label);
 		fShowInvisibleButton.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, true, false));
 		fShowInvisibleButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fPreview.showInvisibleCharacters(fShowInvisibleButton.getSelection());
 				fDialogSettings.put(SHOW_INVISIBLE_PREFERENCE_KEY, fShowInvisibleButton.getSelection());
@@ -92,6 +94,7 @@ public abstract class FormatterTabPage extends ModifyDialogTabPage {
 		return fDialogSettings.getBoolean(SHOW_INVISIBLE_PREFERENCE_KEY);
 	}
 
+	@Override
 	protected void doUpdatePreview() {
 		boolean showInvisible= isShowInvisible();
 		fPreview.showInvisibleCharacters(showInvisible);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IModifyDialogTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IModifyDialogTabPage.java
index 830d416..60fb812 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IModifyDialogTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IModifyDialogTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ public interface IModifyDialogTabPage {
 	 *
 	 * @param workingValues the values to work with
 	 */
-	public void setWorkingValues(Map workingValues);
+	public void setWorkingValues(Map<String, String> workingValues);
 
 	/**
 	 * A modify listener which must be informed whenever
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java
index 50275cc..bbcb3bb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/IndentationTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,10 +62,11 @@ public class IndentationTabPage extends FormatterTabPage {
 	private CompilationUnitPreview fPreview;
 	private String fOldTabChar= null;
 
-	public IndentationTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public IndentationTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
 		final Group generalGroup= createGroup(numColumns, composite, FormatterMessages.IndentationTabPage_general_group_title);
@@ -81,7 +82,7 @@ public class IndentationTabPage extends FormatterTabPage {
 		final NumberPreference indentSize= createNumberPref(generalGroup, numColumns, FormatterMessages.IndentationTabPage_general_group_option_indent_size, DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, 0, 32);
 		final NumberPreference tabSize= createNumberPref(generalGroup, numColumns, FormatterMessages.IndentationTabPage_general_group_option_tab_size, DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, 0, 32);
 
-		String tabchar= (String) fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR);
+		String tabchar= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR);
 		updateTabPreferences(tabchar, tabSize, indentSize, onlyForLeading);
 		tabPolicy.addObserver(new Observer() {
 			public void update(Observable o, Object arg) {
@@ -117,6 +118,7 @@ public class IndentationTabPage extends FormatterTabPage {
         createCheckboxPref(classGroup, numColumns, FormatterMessages.IndentationTabPage_indent_empty_lines, DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, FALSE_TRUE);
 	}
 
+	@Override
 	public void initializePage() {
 	    fPreview.setPreviewText(PREVIEW);
 	}
@@ -124,7 +126,8 @@ public class IndentationTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doCreateJavaPreview(org.eclipse.swt.widgets.Composite)
      */
-    protected JavaPreview doCreateJavaPreview(Composite parent) {
+    @Override
+	protected JavaPreview doCreateJavaPreview(Composite parent) {
         fPreview= new CompilationUnitPreview(fWorkingValues, parent);
         return fPreview;
     }
@@ -132,7 +135,8 @@ public class IndentationTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doUpdatePreview()
      */
-    protected void doUpdatePreview() {
+    @Override
+	protected void doUpdatePreview() {
     	super.doUpdatePreview();
         fPreview.update();
     }
@@ -178,8 +182,8 @@ public class IndentationTabPage extends FormatterTabPage {
 	}
 
 	private void swapTabValues() {
-		Object tabSize= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE);
-		Object indentSize= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE);
+		String tabSize= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE);
+		String indentSize= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE);
 		fWorkingValues.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, indentSize);
 		fWorkingValues.put(DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE, tabSize);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/JavaPreview.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/JavaPreview.java
index 1e1b740..e93f00a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/JavaPreview.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/JavaPreview.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,13 +97,13 @@ public abstract class JavaPreview {
 
 	protected final MarginPainter fMarginPainter;
 
-	protected Map fWorkingValues;
+	protected Map<String, String> fWorkingValues;
 
 	private int fTabSize= 0;
 	private WhitespaceCharacterPainter fWhitespaceCharacterPainter;
 
 
-	public JavaPreview(Map workingValues, Composite parent) {
+	public JavaPreview(Map<String, String> workingValues, Composite parent) {
 		JavaTextTools tools= JavaPlugin.getDefault().getJavaTextTools();
 		fPreviewDocument= new Document();
 		fWorkingValues= workingValues;
@@ -150,12 +150,12 @@ public abstract class JavaPreview {
 		}
 
 		// update the print margin
-		final String value= (String)fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT);
+		final String value= fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_LINE_SPLIT);
 		final int lineWidth= getPositiveIntValue(value, 0);
 		fMarginPainter.setMarginRulerColumn(lineWidth);
 
 		// update the tab size
-		final int tabSize= getPositiveIntValue((String) fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE), 0);
+		final int tabSize= getPositiveIntValue(fWorkingValues.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE), 0);
 		if (tabSize != fTabSize) fSourceViewer.getTextWidget().setTabs(tabSize);
 		fTabSize= tabSize;
 
@@ -202,12 +202,12 @@ public abstract class JavaPreview {
 
 
 
-	public Map getWorkingValues() {
+	public Map<String, String> getWorkingValues() {
 		return fWorkingValues;
 	}
 
 
-	public void setWorkingValues(Map workingValues) {
+	public void setWorkingValues(Map<String, String> workingValues) {
 		fWorkingValues= workingValues;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/LineWrappingTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/LineWrappingTabPage.java
index bfb3d44..ae3e09e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/LineWrappingTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/LineWrappingTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,8 +67,8 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		public final String key;
 		public final String name;
 		public final String previewText;
-		public final List children;
-		public final List preferences;
+		public final List<Category> children;
+		public final List<Preference> preferences;
 
 		public int index;
 
@@ -76,8 +76,8 @@ public class LineWrappingTabPage extends FormatterTabPage {
 			this.key= _key;
 			this.name= _name;
 			this.previewText= _previewText != null ? createPreviewHeader(_name) + _previewText : null;
-			children= new ArrayList();
-			preferences= new ArrayList();
+			children= new ArrayList<Category>();
+			preferences= new ArrayList<Preference>();
 		}
 
 		/**
@@ -87,6 +87,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		    this(null, null, _name);
 		}
 
+		@Override
 		public String toString() {
 			return name;
 		}
@@ -96,7 +97,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		}
 
 		public Preference[] getSpecificPreferences() {
-			return (Preference[])preferences.toArray(new Preference[preferences.size()]);
+			return preferences.toArray(new Preference[preferences.size()]);
 		}
 	}
 
@@ -106,18 +107,18 @@ public class LineWrappingTabPage extends FormatterTabPage {
 
 	private final class CategoryListener implements ISelectionChangedListener, IDoubleClickListener {
 
-		private final List fCategoriesList;
+		private final List<Category> fCategoriesList;
 
 		private int fIndex= 0;
 
-		public CategoryListener(List categoriesTree) {
-			fCategoriesList= new ArrayList();
+		public CategoryListener(List<Category> categoriesTree) {
+			fCategoriesList= new ArrayList<Category>();
 			flatten(fCategoriesList, categoriesTree);
 		}
 
-		private void flatten(List categoriesList, List categoriesTree) {
-			for (final Iterator iter= categoriesTree.iterator(); iter.hasNext(); ) {
-				final Category category= (Category) iter.next();
+		private void flatten(List<Category> categoriesList, List<Category> categoriesTree) {
+			for (final Iterator<Category> iter= categoriesTree.iterator(); iter.hasNext(); ) {
+				final Category category= iter.next();
 				category.index= fIndex++;
 				categoriesList.add(category);
 				flatten(categoriesList, category.children);
@@ -175,7 +176,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 			if (index < 0 || index > fCategoriesList.size() - 1) {
 				index= 1; // In order to select a category with preview initially
 			}
-			final Category category= (Category)fCategoriesList.get(index);
+			final Category category= fCategoriesList.get(index);
 			fCategoriesViewer.setSelection(new StructuredSelection(new Category[] {category}));
 		}
 
@@ -189,13 +190,13 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	}
 
 	private class SelectionState {
-	    private List fElements= new ArrayList();
+	    private List<Category> fElements= new ArrayList<Category>();
 	    private boolean fRequiresRelayout;
 
 	    public void refreshState(IStructuredSelection selection) {
-	        Map wrappingStyleMap= new HashMap();
-		    Map indentStyleMap= new HashMap();
-		    Map forceWrappingMap= new HashMap();
+	        Map<Object, Integer> wrappingStyleMap= new HashMap<Object, Integer>();
+		    Map<Object, Integer> indentStyleMap= new HashMap<Object, Integer>();
+		    Map<Object, Integer> forceWrappingMap= new HashMap<Object, Integer>();
 		    fRequiresRelayout= false;
 		    showSpecificControls(false);
 	        fElements.clear();
@@ -205,16 +206,16 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	        refreshControls(wrappingStyleMap, indentStyleMap, forceWrappingMap);
 	    }
 
-		public List getElements() {
+		public List<Category> getElements() {
 	        return fElements;
 	    }
 
-	    private void evaluateElements(Iterator iterator) {
+	    private void evaluateElements(Iterator<Category> iterator) {
             Category category;
             String value;
             while (iterator.hasNext()) {
-                category= (Category) iterator.next();
-                value= (String)fWorkingValues.get(category.key);
+                category= iterator.next();
+                value= fWorkingValues.get(category.key);
                 if (value != null) {
                     if (!fElements.contains(category))
                         fElements.add(category);
@@ -225,25 +226,25 @@ public class LineWrappingTabPage extends FormatterTabPage {
             }
         }
 
-	    private void evaluateMaps(Map wrappingStyleMap, Map indentStyleMap, Map forceWrappingMap) {
-	        Iterator iterator= fElements.iterator();
+	    private void evaluateMaps(Map<Object, Integer> wrappingStyleMap, Map<Object, Integer> indentStyleMap, Map<Object, Integer> forceWrappingMap) {
+	        Iterator<Category> iterator= fElements.iterator();
             while (iterator.hasNext()) {
-                insertIntoMap(wrappingStyleMap, indentStyleMap, forceWrappingMap, (Category)iterator.next());
+                insertIntoMap(wrappingStyleMap, indentStyleMap, forceWrappingMap, iterator.next());
             }
 	    }
 
         private String getPreviewText() {
-            Iterator iterator= fElements.iterator();
+            Iterator<Category> iterator= fElements.iterator();
             String previewText= ""; //$NON-NLS-1$
             while (iterator.hasNext()) {
-                Category category= (Category)iterator.next();
+                Category category= iterator.next();
                 previewText= previewText + category.previewText + "\n\n"; //$NON-NLS-1$
             }
             return previewText;
         }
 
-        private void insertIntoMap(Map wrappingMap, Map indentMap, Map forceMap, Category category) {
-            final String value= (String)fWorkingValues.get(category.key);
+        private void insertIntoMap(Map<Object, Integer> wrappingMap, Map<Object, Integer> indentMap, Map<Object, Integer> forceMap, Category category) {
+            final String value= fWorkingValues.get(category.key);
             Integer wrappingStyle;
             Integer indentStyle;
             Boolean forceWrapping;
@@ -263,19 +264,19 @@ public class LineWrappingTabPage extends FormatterTabPage {
             increaseMapEntry(forceMap, forceWrapping);
         }
 
-        private void increaseMapEntry(Map map, Object type) {
-            Integer count= (Integer)map.get(type);
+        private void increaseMapEntry(Map<Object, Integer> map, Object type) {
+            Integer count= map.get(type);
             if (count == null) // not in map yet -> count == 0
                 map.put(type, new Integer(1));
             else
                 map.put(type, new Integer(count.intValue() + 1));
         }
 
-        private void refreshControls(Map wrappingStyleMap, Map indentStyleMap, Map forceWrappingMap) {
+        private void refreshControls(Map<Object, Integer> wrappingStyleMap, Map<Object, Integer> indentStyleMap, Map<Object, Integer> forceWrappingMap) {
             updateCombos(wrappingStyleMap, indentStyleMap);
             updateButton(forceWrappingMap);
             Integer wrappingStyleMax= getWrappingStyleMax(wrappingStyleMap);
-			boolean isInhomogeneous= (fElements.size() != ((Integer)wrappingStyleMap.get(wrappingStyleMax)).intValue());
+			boolean isInhomogeneous= (fElements.size() != wrappingStyleMap.get(wrappingStyleMax).intValue());
 			updateControlEnablement(isInhomogeneous, wrappingStyleMax.intValue());
 			showSpecificControls(true);
 			if (fRequiresRelayout) {
@@ -289,7 +290,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
         	if (fElements.size() != 1)
         		return;
 
-        	Preference[] preferences= ((Category)fElements.get(0)).getSpecificPreferences();
+        	Preference[] preferences= fElements.get(0).getSpecificPreferences();
 	    	if (preferences.length == 0)
 	    		return;
 
@@ -302,10 +303,10 @@ public class LineWrappingTabPage extends FormatterTabPage {
 			}
 		}
 
-		private Integer getWrappingStyleMax(Map wrappingStyleMap) {
+		private Integer getWrappingStyleMax(Map<Object, Integer> wrappingStyleMap) {
             int maxCount= 0, maxStyle= 0;
             for (int i=0; i<WRAPPING_NAMES.length; i++) {
-                Integer count= (Integer)wrappingStyleMap.get(new Integer(i));
+                Integer count= wrappingStyleMap.get(new Integer(i));
                 if (count == null)
                     continue;
                 if (count.intValue() > maxCount) {
@@ -316,9 +317,9 @@ public class LineWrappingTabPage extends FormatterTabPage {
             return new Integer(maxStyle);
         }
 
-        private void updateButton(Map forceWrappingMap) {
-            Integer nrOfTrue= (Integer)forceWrappingMap.get(Boolean.TRUE);
-            Integer nrOfFalse= (Integer)forceWrappingMap.get(Boolean.FALSE);
+        private void updateButton(Map<Object, Integer> forceWrappingMap) {
+            Integer nrOfTrue= forceWrappingMap.get(Boolean.TRUE);
+            Integer nrOfFalse= forceWrappingMap.get(Boolean.FALSE);
 
             if (nrOfTrue == null || nrOfFalse == null)
                 fForceSplit.setSelection(nrOfTrue != null);
@@ -346,17 +347,17 @@ public class LineWrappingTabPage extends FormatterTabPage {
             return nrOfFalse.intValue();
         }
 
-        private void updateCombos(Map wrappingStyleMap, Map indentStyleMap) {
+        private void updateCombos(Map<Object, Integer> wrappingStyleMap, Map<Object, Integer> indentStyleMap) {
             updateCombo(fWrappingStyleCombo, wrappingStyleMap, WRAPPING_NAMES);
             updateCombo(fIndentStyleCombo, indentStyleMap, INDENT_NAMES);
         }
 
-        private void updateCombo(Combo combo, Map map, final String[] items) {
+        private void updateCombo(Combo combo, Map<Object, Integer> map, final String[] items) {
             String[] newItems= new String[items.length];
             int maxCount= 0, maxStyle= 0;
 
             for(int i = 0; i < items.length; i++) {
-                Integer count= (Integer) map.get(new Integer(i));
+                Integer count= map.get(new Integer(i));
                 int val= (count == null) ? 0 : count.intValue();
                 if (val > maxCount) {
                     maxCount= val;
@@ -571,7 +572,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	 * A collection containing the categories tree. This is used as model for the tree viewer.
 	 * @see TreeViewer
 	 */
-	private final List fCategories;
+	private final List<Category> fCategories;
 
 	/**
 	 * The category listener which makes the selection persistent.
@@ -591,7 +592,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	/**
 	 * A special options store wherein the preview line width is kept.
 	 */
-	protected final Map fPreviewPreferences;
+	protected final Map<String, String> fPreviewPreferences;
 
 	/**
 	 * The key for the preview line width.
@@ -607,14 +608,14 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	 * @param modifyDialog the modify dialog
 	 * @param workingValues the values
 	 */
-	public LineWrappingTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public LineWrappingTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 
 		fDialogSettings= JavaPlugin.getDefault().getDialogSettings();
 
 		final String previewLineWidth= fDialogSettings.get(PREF_PREVIEW_LINE_WIDTH);
 
-		fPreviewPreferences= new HashMap();
+		fPreviewPreferences= new HashMap<String, String>();
 		fPreviewPreferences.put(LINE_SPLIT, previewLineWidth != null ? previewLineWidth : Integer.toString(DEFAULT_PREVIEW_WINDOW_LINE_WIDTH));
 
 		fCategories= createCategories();
@@ -624,7 +625,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	/**
 	 * @return Create the categories tree.
 	 */
-	protected List createCategories() {
+	protected List<Category> createCategories() {
 
 		final Category annotations = new Category(FormatterMessages.LineWrappingTabPage_annotations);
 		annotations.children.add(fAnnotationArgumentsCategory);
@@ -663,7 +664,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		final Category statements= new Category(FormatterMessages.LineWrappingTabPage_statements);
 		statements.children.add(fCompactIfCategory);
 
-		final List root= new ArrayList();
+		final List<Category> root= new ArrayList<Category>();
 		root.add(annotations);
 		root.add(classDeclarations);
 		root.add(constructorDeclarations);
@@ -676,6 +677,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		return root;
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
 		fOptionsComposite= composite;
@@ -691,7 +693,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		fCategoriesViewer= new TreeViewer(composite /*categoryGroup*/, SWT.MULTI | SWT.BORDER | SWT.READ_ONLY | SWT.V_SCROLL );
 		fCategoriesViewer.setContentProvider(new ITreeContentProvider() {
 			public Object[] getElements(Object inputElement) {
-				return ((Collection)inputElement).toArray();
+				return ((Collection<?>)inputElement).toArray();
 			}
 			public Object[] getChildren(Object parentElement) {
 				return ((Category)parentElement).children.toArray();
@@ -755,6 +757,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	}
 
 
+	@Override
 	protected Composite doCreatePreviewPane(Composite composite, int numColumns) {
 
 		super.doCreatePreviewPane(composite, numColumns);
@@ -768,7 +771,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		previewLineWidth.addObserver(fUpdater);
 		previewLineWidth.addObserver(new Observer() {
 			public void update(Observable o, Object arg) {
-				fDialogSettings.put(PREF_PREVIEW_LINE_WIDTH, (String)fPreviewPreferences.get(LINE_SPLIT));
+				fDialogSettings.put(PREF_PREVIEW_LINE_WIDTH, fPreviewPreferences.get(LINE_SPLIT));
 			}
 		});
 
@@ -778,28 +781,33 @@ public class LineWrappingTabPage extends FormatterTabPage {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doCreateJavaPreview(org.eclipse.swt.widgets.Composite)
      */
-    protected JavaPreview doCreateJavaPreview(Composite parent) {
+    @Override
+	protected JavaPreview doCreateJavaPreview(Composite parent) {
         fPreview= new CompilationUnitPreview(fWorkingValues, parent);
         return fPreview;
     }
 
 
+	@Override
 	protected void initializePage() {
 
 		fCategoriesViewer.addSelectionChangedListener(fCategoryListener);
 		fCategoriesViewer.addDoubleClickListener(fCategoryListener);
 
 		fForceSplit.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				forceSplitChanged(fForceSplit.getSelection());
 			}
 		});
 		fIndentStyleCombo.addSelectionListener( new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				indentStyleChanged(((Combo)e.widget).getSelectionIndex());
 			}
 		});
 		fWrappingStyleCombo.addSelectionListener( new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				wrappingStyleChanged(((Combo)e.widget).getSelectionIndex());
 			}
@@ -813,26 +821,27 @@ public class LineWrappingTabPage extends FormatterTabPage {
 		fDefaultFocusManager.add(fForceSplit);
 	}
 
+	@Override
 	protected void doUpdatePreview() {
 		super.doUpdatePreview();
-		final Object normalSetting= fWorkingValues.get(LINE_SPLIT);
+		final String normalSetting= fWorkingValues.get(LINE_SPLIT);
 		fWorkingValues.put(LINE_SPLIT, fPreviewPreferences.get(LINE_SPLIT));
 		fPreview.update();
 		fWorkingValues.put(LINE_SPLIT, normalSetting);
 	}
 
 	protected void setPreviewText(String text) {
-		final Object normalSetting= fWorkingValues.get(LINE_SPLIT);
+		final String normalSetting= fWorkingValues.get(LINE_SPLIT);
 		fWorkingValues.put(LINE_SPLIT, fPreviewPreferences.get(LINE_SPLIT));
 		fPreview.setPreviewText(text);
 		fWorkingValues.put(LINE_SPLIT, normalSetting);
 	}
 
 	protected void forceSplitChanged(boolean forceSplit) {
-	    Iterator iterator= fSelectionState.fElements.iterator();
+	    Iterator<Category> iterator= fSelectionState.fElements.iterator();
 	    String currentKey;
         while (iterator.hasNext()) {
-            currentKey= ((Category)iterator.next()).key;
+            currentKey= iterator.next().key;
             try {
                 changeForceSplit(currentKey, forceSplit);
             } catch (IllegalArgumentException e) {
@@ -845,7 +854,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	}
 
 	private void changeForceSplit(String currentKey, boolean forceSplit) throws IllegalArgumentException{
-		String value= (String)fWorkingValues.get(currentKey);
+		String value= fWorkingValues.get(currentKey);
 		value= DefaultCodeFormatterConstants.setForceWrapping(value, forceSplit);
 		if (value == null)
 		    throw new IllegalArgumentException();
@@ -853,10 +862,10 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	}
 
 	protected void wrappingStyleChanged(int wrappingStyle) {
-	       Iterator iterator= fSelectionState.fElements.iterator();
+	       Iterator<Category> iterator= fSelectionState.fElements.iterator();
 	       String currentKey;
 	        while (iterator.hasNext()) {
-	        	currentKey= ((Category)iterator.next()).key;
+	        	currentKey= iterator.next().key;
 	        	try {
 	        	    changeWrappingStyle(currentKey, wrappingStyle);
 	        	} catch (IllegalArgumentException e) {
@@ -869,7 +878,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	}
 
 	private void changeWrappingStyle(String currentKey, int wrappingStyle) throws IllegalArgumentException {
-	    String value= (String)fWorkingValues.get(currentKey);
+	    String value= fWorkingValues.get(currentKey);
 		value= DefaultCodeFormatterConstants.setWrappingStyle(value, wrappingStyle);
 		if (value == null)
 		    throw new IllegalArgumentException();
@@ -877,10 +886,10 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	}
 
 	protected void indentStyleChanged(int indentStyle) {
-	    Iterator iterator= fSelectionState.fElements.iterator();
+	    Iterator<Category> iterator= fSelectionState.fElements.iterator();
 	    String currentKey;
         while (iterator.hasNext()) {
-            currentKey= ((Category)iterator.next()).key;
+            currentKey= iterator.next().key;
         	try {
             	changeIndentStyle(currentKey, indentStyle);
         	} catch (IllegalArgumentException e) {
@@ -893,7 +902,7 @@ public class LineWrappingTabPage extends FormatterTabPage {
 	}
 
 	private void changeIndentStyle(String currentKey, int indentStyle) throws IllegalArgumentException{
-		String value= (String)fWorkingValues.get(currentKey);
+		String value= fWorkingValues.get(currentKey);
 		value= DefaultCodeFormatterConstants.setIndentStyle(value, indentStyle);
 		if (value == null)
 		    throw new IllegalArgumentException();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java
index a8df3f0..f7c2282 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
@@ -90,8 +91,8 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 	private final ProfileStore fProfileStore;
 	private final boolean fNewProfile;
 	private Profile fProfile;
-	private final Map fWorkingValues;
-	private final List fTabPages;
+	private final Map<String, String> fWorkingValues;
+	private final List<IModifyDialogTabPage> fTabPages;
 	private final IDialogSettings fDialogSettings;
 	private TabFolder fTabFolder;
 	private final ProfileManager fProfileManager;
@@ -116,9 +117,9 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 
 		fProfile= profile;
 		setTitle(Messages.format(FormatterMessages.ModifyDialog_dialog_title, profile.getName()));
-		fWorkingValues= new HashMap(fProfile.getSettings());
+		fWorkingValues= new HashMap<String, String>(fProfile.getSettings());
 		setStatusLineAboveButtons(false);
-		fTabPages= new ArrayList();
+		fTabPages= new ArrayList<IModifyDialogTabPage>();
 		fDialogSettings= JavaPlugin.getDefault().getDialogSettings();
 	}
 
@@ -126,12 +127,14 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
 
-	protected abstract void addPages(Map values);
+	protected abstract void addPages(Map<String, String> values);
 
+	@Override
 	public void create() {
 		super.create();
 		int lastFocusNr= 0;
@@ -151,6 +154,7 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 
 
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 
 		final Composite composite= (Composite)super.createDialogArea(parent);
@@ -206,6 +210,7 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 	 */
 	 protected abstract String getHelpContextId();
 
+	@Override
 	public void updateStatus(IStatus status) {
 		if (status == null) {
 			doValidate();
@@ -217,6 +222,7 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#getInitialSize()
 	 */
+	@Override
 	protected Point getInitialSize() {
 		Point initialSize= super.getInitialSize();
 		try {
@@ -235,6 +241,7 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#getInitialLocation(org.eclipse.swt.graphics.Point)
 	 */
+	@Override
 	protected Point getInitialLocation(Point initialSize) {
 		try {
 			return new Point(fDialogSettings.getInt(fKeyPreferredX), fDialogSettings.getInt(fKeyPreferredY));
@@ -243,6 +250,7 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 		}
 	}
 
+	@Override
 	public boolean close() {
 		final Rectangle shell= getShell().getBounds();
 
@@ -257,12 +265,14 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
+	@Override
 	protected void okPressed() {
 		applyPressed();
 		super.okPressed();
 	}
 
-    protected void buttonPressed(int buttonId) {
+    @Override
+	protected void buttonPressed(int buttonId) {
 		if (buttonId == APPLAY_BUTTON_ID) {
 			applyPressed();
 			setTitle(Messages.format(FormatterMessages.ModifyDialog_dialog_title, fProfile.getName()));
@@ -277,13 +287,13 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 		if (!fProfile.getName().equals(fProfileNameField.getText())) {
 			fProfile= fProfile.rename(fProfileNameField.getText(), fProfileManager);
 		}
-		fProfile.setSettings(new HashMap(fWorkingValues));
+		fProfile.setSettings(new HashMap<String, String>(fWorkingValues));
 		fProfileManager.setSelected(fProfile);
 		doValidate();
 	}
 
 	private void saveButtonPressed() {
-		Profile selected= new CustomProfile(fProfileNameField.getText(), new HashMap(fWorkingValues), fProfile.getVersion(), fProfileManager.getProfileVersioner().getProfileKind());
+		Profile selected= new CustomProfile(fProfileNameField.getText(), new HashMap<String, String>(fWorkingValues), fProfile.getVersion(), fProfileManager.getProfileVersioner().getProfileKind());
 
 		final FileDialog dialog= new FileDialog(getShell(), SWT.SAVE);
 		dialog.setText(FormatterMessages.CodingStyleConfigurationBlock_save_profile_dialog_title);
@@ -307,7 +317,7 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 		final IContentType type= Platform.getContentTypeManager().getContentType("org.eclipse.core.runtime.xml"); //$NON-NLS-1$
 		if (type != null)
 			encoding= type.getDefaultCharset();
-		final Collection profiles= new ArrayList();
+		final Collection<Profile> profiles= new ArrayList<Profile>();
 		profiles.add(selected);
 		try {
 			fProfileStore.writeProfilesToFile(profiles, file, encoding);
@@ -318,7 +328,8 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 		}
 	}
 
-    protected void createButtonsForButtonBar(Composite parent) {
+    @Override
+	protected void createButtonsForButtonBar(Composite parent) {
 	    fApplyButton= createButton(parent, APPLAY_BUTTON_ID, FormatterMessages.ModifyDialog_apply_button, false);
 		fApplyButton.setEnabled(false);
 
@@ -345,6 +356,7 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 		doValidate();
 	}
 
+	@Override
 	protected void updateButtonsEnableState(IStatus status) {
 	    super.updateButtonsEnableState(status);
 	    if (fApplyButton != null && !fApplyButton.isDisposed()) {
@@ -407,9 +419,9 @@ public abstract class ModifyDialog extends StatusDialog implements IModifyDialog
 		if (!fProfileNameField.getText().trim().equals(fProfile.getName()))
 			return true;
 
-		Iterator iter= fProfile.getSettings().entrySet().iterator();
+		Iterator<Entry<String, String>> iter= fProfile.getSettings().entrySet().iterator();
 		for (;iter.hasNext();) {
-			Map.Entry curr= (Map.Entry) iter.next();
+			Entry<String, String> curr= iter.next();
 			if (!fWorkingValues.get(curr.getKey()).equals(curr.getValue())) {
 				return true;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialogTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialogTabPage.java
index 4ba5bc3..9840b04 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialogTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ModifyDialogTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -80,7 +80,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 	 * On each change, the new value is written to the map and the listeners are notified.
 	 */
 	protected abstract class Preference extends Observable {
-	    private final Map fPreferences;
+	    private final Map<String, String> fPreferences;
 	    private boolean fEnabled;
 	    private String fKey;
 
@@ -89,7 +89,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 	     * @param preferences The map where the value is written.
 	     * @param key The key for which a value is managed.
 	     */
-	    public Preference(Map preferences, String key) {
+	    public Preference(Map<String, String> preferences, String key) {
 	        fPreferences= preferences;
 	        fEnabled= true;
 	        fKey= key;
@@ -97,7 +97,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 	    /**
 	     * @return Gets the map of this Preference.
 	     */
-	    protected final Map getPreferences() {
+	    protected final Map<String, String> getPreferences() {
 	        return fPreferences;
 	    }
 
@@ -167,7 +167,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 		 * @param style SWT style flag for the button
 		 */
 		public ButtonPreference(Composite composite, int numColumns,
-								  Map preferences, String key,
+								  Map<String, String> preferences, String key,
 								  String [] values, String text, int style) {
 		    super(preferences, key);
 		    if (values == null || text == null)
@@ -182,6 +182,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			updateWidget();
 
 			fCheckbox.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					checkboxChecked(((Button)e.widget).getSelection());
 				}
@@ -194,6 +195,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			notifyObservers();
 		}
 
+		@Override
 		protected void updateWidget() {
 			if (getKey() != null) {
 				fCheckbox.setEnabled(getEnabled());
@@ -214,19 +216,20 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			checkboxChecked(checked);
 		}
 
+		@Override
 		public Control getControl() {
 			return fCheckbox;
 		}
 	}
 
 	protected final class CheckboxPreference extends ButtonPreference {
-		public CheckboxPreference(Composite composite, int numColumns, Map preferences, String key, String[] values, String text) {
+		public CheckboxPreference(Composite composite, int numColumns, Map<String, String> preferences, String key, String[] values, String text) {
 	        super(composite, numColumns, preferences, key, values, text, SWT.CHECK);
         }
 	}
 
 	protected final class RadioPreference extends ButtonPreference {
-		public RadioPreference(Composite composite, int numColumns, Map preferences, String key, String[] values, String text) {
+		public RadioPreference(Composite composite, int numColumns, Map<String, String> preferences, String key, String[] values, String text) {
 	        super(composite, numColumns, preferences, key, values, text, SWT.RADIO);
         }
 	}
@@ -250,7 +253,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 		 * @param items An array of n elements indicating the text to be written in the combo box.
 		 */
 		public ComboPreference(Composite composite, int numColumns,
-								  Map preferences, String key,
+								  Map<String, String> preferences, String key,
 								  String [] values, String text, String [] items) {
 		    super(preferences, key);
 		    if (values == null || items == null || text == null)
@@ -272,6 +275,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			updateWidget();
 
 			fCombo.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					comboSelected(((Combo)e.widget).getSelectionIndex());
 				}
@@ -284,6 +288,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			notifyObservers(fValues[index]);
 		}
 
+		@Override
 		protected void updateWidget() {
 			if (getKey() != null) {
 				fCombo.setEnabled(getEnabled());
@@ -295,7 +300,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 		}
 
 		public String getSelectedItem() {
-			final String selected= (String)getPreferences().get(getKey());
+			final String selected= getPreferences().get(getKey());
 			for (int i= 0; i < fValues.length; i++) {
 				if (fValues[i].equals(selected)) {
 					return fItems[i];
@@ -308,6 +313,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			return value.equals(getPreferences().get(getKey()));
 		}
 
+		@Override
 		public Control getControl() {
 			return fCombo;
 		}
@@ -337,7 +343,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 		 * @param text The label text for this Preference.
 		 */
 		public NumberPreference(Composite composite, int numColumns,
-							   Map preferences, String key,
+							   Map<String, String> preferences, String key,
 							   int minValue, int maxValue, String text) {
 		    super(preferences, key);
 
@@ -428,6 +434,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			notifyObservers();
 		}
 
+		@Override
 		protected void updateWidget() {
 		    final boolean hasKey= getKey() != null;
 
@@ -435,7 +442,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			fNumberText.setEnabled(hasKey && getEnabled());
 
 			if (hasKey) {
-			    String s= (String)getPreferences().get(getKey());
+			    String s= getPreferences().get(getKey());
 			    try {
 			        fSelected= Integer.parseInt(s);
 			    } catch (NumberFormatException e) {
@@ -449,6 +456,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			}
 		}
 
+		@Override
 		public Control getControl() {
 			return fNumberText;
 		}
@@ -496,7 +504,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 		 * @param text the label text for this Preference.
 		 * @param inputValidator the input validator or <code>null</code> if none
 		 */
-		public StringPreference(Composite composite, int numColumns, Map preferences, String key, String text, IInputValidator inputValidator) {
+		public StringPreference(Composite composite, int numColumns, Map<String, String> preferences, String key, String text, IInputValidator inputValidator) {
 			super(preferences, key);
 
 			fInputValidator= inputValidator;
@@ -575,6 +583,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			notifyObservers();
 		}
 
+		@Override
 		protected void updateWidget() {
 			final boolean hasKey= getKey() != null;
 
@@ -582,13 +591,14 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			fText.setEnabled(hasKey && getEnabled());
 
 			if (hasKey) {
-				fSelected= (String)getPreferences().get(getKey());
+				fSelected= getPreferences().get(getKey());
 				fText.setText(fSelected);
 			} else {
 				fText.setText(""); //$NON-NLS-1$
 			}
 		}
 
+		@Override
 		public Control getControl() {
 			return fText;
 		}
@@ -611,20 +621,21 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 
 		private final IDialogSettings fDialogSettings;
 
-		private final Map fItemMap;
-		private final List fItemList;
+		private final Map<Control, Integer> fItemMap;
+		private final List<Control> fItemList;
 
 		private int fIndex;
 
 		public DefaultFocusManager() {
 			fDialogSettings= JavaPlugin.getDefault().getDialogSettings();
-			fItemMap= new HashMap();
-			fItemList= new ArrayList();
+			fItemMap= new HashMap<Control, Integer>();
+			fItemList= new ArrayList<Control>();
 			fIndex= 0;
 		}
 
+		@Override
 		public void focusGained(FocusEvent e) {
-			fDialogSettings.put(PREF_LAST_FOCUS_INDEX, ((Integer)fItemMap.get(e.widget)).intValue());
+			fDialogSettings.put(PREF_LAST_FOCUS_INDEX, fItemMap.get(e.widget).intValue());
 		}
 
 		public void add(Control control) {
@@ -649,7 +660,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 				index= fDialogSettings.getInt(PREF_LAST_FOCUS_INDEX);
 				// make sure the value is within the range
 				if ((index >= 0) && (index <= fItemList.size() - 1)) {
-					((Control)fItemList.get(index)).setFocus();
+					fItemList.get(index).setFocus();
 				}
 			} catch (NumberFormatException ex) {
 				// this is the first time
@@ -677,6 +688,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			fMinimalHight= minimalHight;
 		}
 
+		@Override
 		public Point computeSize(Composite composite, int wHint, int hHint, boolean force) {
 			if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
 				return new Point(wHint, hHint);
@@ -714,6 +726,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 			return new Point(x, y);
 		}
 
+		@Override
 		public void layout(Composite composite, boolean force) {
 			Rectangle rect = composite.getClientArea();
 			Control[] children = composite.getChildren();
@@ -744,7 +757,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 	/**
 	 * The map where the current settings are stored.
 	 */
-	protected Map fWorkingValues;
+	protected Map<String, String> fWorkingValues;
 
 	/**
 	 * The modify dialog where we can display status messages.
@@ -755,7 +768,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 	/*
 	 * Create a new <code>ModifyDialogTabPage</code>
 	 */
-	public ModifyDialogTabPage(IModifyDialogTabPage.IModificationListener modifyListener, Map workingValues) {
+	public ModifyDialogTabPage(IModifyDialogTabPage.IModificationListener modifyListener, Map<String, String> workingValues) {
 		fWorkingValues= workingValues;
 		fModifyListener= modifyListener;
 		fDefaultFocusManager= new DefaultFocusManager();
@@ -768,7 +781,7 @@ public abstract class ModifyDialogTabPage implements IModifyDialogTabPage {
 	/**
 	 * {@inheritDoc}
 	 */
-	public void setWorkingValues(Map workingValues) {
+	public void setWorkingValues(Map<String, String> workingValues) {
 		fWorkingValues= workingValues;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/NewLinesTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/NewLinesTabPage.java
index 67f9612..3467026 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/NewLinesTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/NewLinesTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,9 +23,12 @@ public class NewLinesTabPage extends FormatterTabPage {
 
 	private final String PREVIEW=
 	createPreviewHeader(FormatterMessages.NewLinesTabPage_preview_header) +
+	"@Deprecated\n" + //$NON-NLS-1$
+	"package com.example; // annotation on package is only allowed in package-info.java\n" + //$NON-NLS-1$
+	"\n" + //$NON-NLS-1$
 	"public class Empty {}\n" + //$NON-NLS-1$
-	"class Example {" + //$NON-NLS-1$
-	"  static int [] fArray= {1, 2, 3, 4, 5 };" + //$NON-NLS-1$
+	"@Deprecated class Example {" + //$NON-NLS-1$
+	"  @Deprecated static int [] fArray= {1, 2, 3, 4, 5 };" + //$NON-NLS-1$
 	"  Listener fListener= new Listener() {" + //$NON-NLS-1$
 	"  };\n" + //$NON-NLS-1$
 	"  @Deprecated @Override " + //$NON-NLS-1$
@@ -49,10 +52,11 @@ public class NewLinesTabPage extends FormatterTabPage {
 
 	private CompilationUnitPreview fPreview;
 
-	public NewLinesTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public NewLinesTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 
 		final Group newlinesGroup= createGroup(numColumns, composite, FormatterMessages.NewLinesTabPage_newlines_group_title);
@@ -75,21 +79,27 @@ public class NewLinesTabPage extends FormatterTabPage {
 		createPref(emptyStatementsGroup, numColumns, FormatterMessages.NewLinesTabPage_emtpy_statement_group_option_empty_statement_on_new_line, DefaultCodeFormatterConstants.FORMATTER_PUT_EMPTY_STATEMENT_ON_NEW_LINE, FALSE_TRUE);
 
 		final Group annotationsGroup= createGroup(numColumns, composite, FormatterMessages.NewLinesTabPage_annotations_group_title);
-		createPref(annotationsGroup, numColumns, FormatterMessages.NewLinesTabPage_annotations_group_members, DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER, DO_NOT_INSERT_INSERT);
+		createPref(annotationsGroup, numColumns, FormatterMessages.NewLinesTabPage_annotations_group_packages, DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE, DO_NOT_INSERT_INSERT);
+		createPref(annotationsGroup, numColumns, FormatterMessages.NewLinesTabPage_annotations_group_types, DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE, DO_NOT_INSERT_INSERT);
+		createPref(annotationsGroup, numColumns, FormatterMessages.NewLinesTabPage_annotations_group_fields, DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD, DO_NOT_INSERT_INSERT);
+		createPref(annotationsGroup, numColumns, FormatterMessages.NewLinesTabPage_annotations_group_methods, DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD, DO_NOT_INSERT_INSERT);
 		createPref(annotationsGroup, numColumns, FormatterMessages.NewLinesTabPage_annotations_group_paramters, DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER, DO_NOT_INSERT_INSERT);
 		createPref(annotationsGroup, numColumns, FormatterMessages.NewLinesTabPage_annotations_group_local_variables, DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE, DO_NOT_INSERT_INSERT);
 	}
 
+	@Override
 	protected void initializePage() {
 	    fPreview.setPreviewText(PREVIEW);
 	}
 
-    protected JavaPreview doCreateJavaPreview(Composite parent) {
+    @Override
+	protected JavaPreview doCreateJavaPreview(Composite parent) {
         fPreview= new CompilationUnitPreview(fWorkingValues, parent);
         return fPreview;
     }
 
-    protected void doUpdatePreview() {
+    @Override
+	protected void doUpdatePreview() {
     	super.doUpdatePreview();
         fPreview.update();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/OffOnTagsTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/OffOnTagsTabPage.java
index 69113bf..5732ef0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/OffOnTagsTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/OffOnTagsTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,10 +34,11 @@ import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
  */
 public class OffOnTagsTabPage extends FormatterTabPage {
 
-	public OffOnTagsTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public OffOnTagsTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 		createLabel(numColumns, composite, FormatterMessages.OffOnTagsTabPage_description);
 
@@ -98,6 +99,7 @@ public class OffOnTagsTabPage extends FormatterTabPage {
 
 	}
 
+	@Override
 	public final Composite createContents(Composite parent) {
 		if (fPixelConverter == null)
 			fPixelConverter= new PixelConverter(parent);
@@ -120,10 +122,12 @@ public class OffOnTagsTabPage extends FormatterTabPage {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#initializePage()
 	 */
+	@Override
 	protected void initializePage() {
 		// Nothing to do.
 	}
 
+	@Override
 	protected void doUpdatePreview() {
 		// Nothing to do since this page has no preview.
 	}
@@ -131,6 +135,7 @@ public class OffOnTagsTabPage extends FormatterTabPage {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage#doCreateJavaPreview(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected JavaPreview doCreateJavaPreview(Composite parent) {
 		return null; // This method won't be called.
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileConfigurationBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileConfigurationBlock.java
index 6bd3522..482b538 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,9 +36,9 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.IScopeContext;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.IScopeContext;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ProjectScope;
@@ -100,7 +100,7 @@ public abstract class ProfileConfigurationBlock {
 
 	class ProfileComboController implements Observer, SelectionListener {
 
-		private final List fSortedProfiles;
+		private final List<Profile> fSortedProfiles;
 
 		public ProfileComboController() {
 			fSortedProfiles= fProfileManager.getSortedProfiles();
@@ -112,7 +112,7 @@ public abstract class ProfileConfigurationBlock {
 
 		public void widgetSelected(SelectionEvent e) {
 			final int index= fProfileCombo.getSelectionIndex();
-			fProfileManager.setSelected((Profile)fSortedProfiles.get(index));
+			fProfileManager.setSelected(fSortedProfiles.get(index));
 		}
 
 		public void widgetDefaultSelected(SelectionEvent e) {}
@@ -201,7 +201,7 @@ public abstract class ProfileConfigurationBlock {
 			final IContentType type= Platform.getContentTypeManager().getContentType("org.eclipse.core.runtime.xml"); //$NON-NLS-1$
 			if (type != null)
 				encoding= type.getDefaultCharset();
-			final Collection profiles= new ArrayList();
+			final Collection<Profile> profiles= new ArrayList<Profile>();
 			profiles.addAll(fProfileManager.getSortedProfiles());
 			try {
 				fProfileStore.writeProfilesToFile(profiles, file, encoding);
@@ -254,7 +254,7 @@ public abstract class ProfileConfigurationBlock {
 			JavaPlugin.getDefault().getDialogSettings().put(fLastSaveLoadPathKey + ".loadpath", dialog.getFilterPath()); //$NON-NLS-1$
 
 			final File file= new File(path);
-			Collection profiles= null;
+			Collection<Profile> profiles= null;
 			try {
 				profiles= fProfileStore.readProfilesFromFile(file);
 			} catch (CoreException e) {
@@ -264,7 +264,7 @@ public abstract class ProfileConfigurationBlock {
 			}
 			if (profiles == null || profiles.isEmpty())
 				return;
-			Iterator iter=profiles.iterator();
+			Iterator<Profile> iter=profiles.iterator();
 			while (iter.hasNext()) {
 				final CustomProfile profile= (CustomProfile)iter.next();
 
@@ -332,7 +332,7 @@ public abstract class ProfileConfigurationBlock {
 			fCurrContext= fInstanceScope;
 		}
 
-		List profiles= null;
+		List<Profile> profiles= null;
         try {
             profiles= fProfileStore.readProfiles(fInstanceScope);
         } catch (CoreException e) {
@@ -341,14 +341,14 @@ public abstract class ProfileConfigurationBlock {
         if (profiles == null) {
         	try {
         		// bug 129427
-        	    profiles= fProfileStore.readProfiles(new DefaultScope());
+				profiles= fProfileStore.readProfiles(DefaultScope.INSTANCE);
         	} catch (CoreException e) {
         		JavaPlugin.log(e);
         	}
         }
 
         if (profiles == null)
-            profiles= new ArrayList();
+            profiles= new ArrayList<Profile>();
 
 		fProfileManager= createProfileManager(profiles, fCurrContext, access, fProfileVersioner);
 
@@ -379,7 +379,7 @@ public abstract class ProfileConfigurationBlock {
 
 	protected abstract ProfileStore createProfileStore(IProfileVersioner versioner);
 
-	protected abstract ProfileManager createProfileManager(List profiles, IScopeContext context, PreferencesAccess access, IProfileVersioner profileVersioner);
+	protected abstract ProfileManager createProfileManager(List<Profile> profiles, IScopeContext context, PreferencesAccess access, IProfileVersioner profileVersioner);
 
 	protected abstract ModifyDialog createModifyDialog(Shell shell, Profile profile, ProfileManager profileManager, ProfileStore profileStore, boolean newProfile);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileManager.java
index 9762756..cd7462b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,10 +44,10 @@ public abstract class ProfileManager extends Observable {
 
     public static final class KeySet {
 
-		private final List fKeys;
+		private final List<String> fKeys;
 		private final String fNodeName;
 
-		public KeySet(String nodeName, List keys) {
+		public KeySet(String nodeName, List<String> keys) {
 			fNodeName= nodeName;
 			fKeys= keys;
         }
@@ -56,7 +56,7 @@ public abstract class ProfileManager extends Observable {
 	        return fNodeName;
         }
 
-        public List getKeys() {
+        public List<String> getKeys() {
 	        return fKeys;
         }
     }
@@ -71,20 +71,20 @@ public abstract class ProfileManager extends Observable {
 	 * Represents a profile with a unique ID, a name and a map
 	 * containing the code formatter settings.
 	 */
-	public static abstract class Profile implements Comparable {
+	public static abstract class Profile implements Comparable<Profile> {
 
 		public abstract String getName();
 		public abstract Profile rename(String name, ProfileManager manager);
 
-		public abstract Map getSettings();
-		public abstract void setSettings(Map settings);
+		public abstract Map<String, String> getSettings();
+		public abstract void setSettings(Map<String, String> settings);
 
 		public abstract int getVersion();
 
-		public boolean hasEqualSettings(Map otherMap, Collection allKeys) {
-			Map settings= getSettings();
-			for (Iterator iter= allKeys.iterator(); iter.hasNext(); ){
-				String key= (String) iter.next();
+		public boolean hasEqualSettings(Map<String, String> otherMap, Collection<String> allKeys) {
+			Map<String, String> settings= getSettings();
+			for (Iterator<String> iter= allKeys.iterator(); iter.hasNext(); ){
+				String key= iter.next();
 				Object other= otherMap.get(key);
 				Object curr= settings.get(key);
 				if (other == null) {
@@ -118,12 +118,12 @@ public abstract class ProfileManager extends Observable {
 	public static final class BuiltInProfile extends Profile {
 		private final String fName;
 		private final String fID;
-		private final Map fSettings;
+		private final Map<String, String> fSettings;
 		private final int fOrder;
 		private final int fCurrentVersion;
 		private final String fProfileKind;
 
-		public BuiltInProfile(String ID, String name, Map settings, int order, int currentVersion, String profileKind) {
+		public BuiltInProfile(String ID, String name, Map<String, String> settings, int order, int currentVersion, String profileKind) {
 			fName= name;
 			fID= ID;
 			fSettings= settings;
@@ -132,10 +132,12 @@ public abstract class ProfileManager extends Observable {
 			fProfileKind= profileKind;
 		}
 
+		@Override
 		public String getName() {
 			return fName;
 		}
 
+		@Override
 		public Profile rename(String name, ProfileManager manager) {
 			final String trimmed= name.trim();
 		 	CustomProfile newProfile= new CustomProfile(trimmed, fSettings, fCurrentVersion, fProfileKind);
@@ -143,33 +145,39 @@ public abstract class ProfileManager extends Observable {
 			return newProfile;
 		}
 
-		public Map getSettings() {
+		@Override
+		public Map<String, String> getSettings() {
 			return fSettings;
 		}
 
-		public void setSettings(Map settings) {
+		@Override
+		public void setSettings(Map<String, String> settings) {
 		}
 
+		@Override
 		public String getID() {
 			return fID;
 		}
 
-		public final int compareTo(Object o) {
+		public final int compareTo(Profile o) {
 			if (o instanceof BuiltInProfile) {
 				return fOrder - ((BuiltInProfile)o).fOrder;
 			}
 			return -1;
 		}
 
+		@Override
 		public boolean isProfileToSave() {
 			return false;
 		}
 
+		@Override
 		public boolean isBuiltInProfile() {
 			return true;
 		}
 
-        public int getVersion() {
+        @Override
+		public int getVersion() {
 	        return fCurrentVersion;
         }
 
@@ -180,22 +188,24 @@ public abstract class ProfileManager extends Observable {
 	 */
 	public static class CustomProfile extends Profile {
 		private String fName;
-		private Map fSettings;
+		private Map<String, String> fSettings;
 		protected ProfileManager fManager;
 		private int fVersion;
 		private final String fKind;
 
-		public CustomProfile(String name, Map settings, int version, String kind) {
+		public CustomProfile(String name, Map<String, String> settings, int version, String kind) {
 			fName= name;
 			fSettings= settings;
 			fVersion= version;
 			fKind= kind;
 		}
 
+		@Override
 		public String getName() {
 			return fName;
 		}
 
+		@Override
 		public Profile rename(String name, ProfileManager manager) {
 			final String trimmed= name.trim();
 			if (trimmed.equals(getName()))
@@ -208,11 +218,13 @@ public abstract class ProfileManager extends Observable {
 			return this;
 		}
 
-		public Map getSettings() {
+		@Override
+		public Map<String, String> getSettings() {
 			return fSettings;
 		}
 
-		public void setSettings(Map settings) {
+		@Override
+		public void setSettings(Map<String, String> settings) {
 			if (settings == null)
 				throw new IllegalArgumentException();
 			fSettings= settings;
@@ -221,6 +233,7 @@ public abstract class ProfileManager extends Observable {
 			}
 		}
 
+		@Override
 		public String getID() {
 			return ID_PREFIX + fName;
 		}
@@ -233,6 +246,7 @@ public abstract class ProfileManager extends Observable {
 			return fManager;
 		}
 
+		@Override
 		public int getVersion() {
 			return fVersion;
 		}
@@ -241,16 +255,17 @@ public abstract class ProfileManager extends Observable {
 			fVersion= version;
 		}
 
-		public int compareTo(Object o) {
+		public int compareTo(Profile o) {
 			if (o instanceof SharedProfile) {
 				return -1;
 			}
 			if (o instanceof CustomProfile) {
-				return getName().compareToIgnoreCase(((Profile)o).getName());
+				return getName().compareToIgnoreCase(o.getName());
 			}
 			return 1;
 		}
 
+		@Override
 		public boolean isProfileToSave() {
 			return true;
 		}
@@ -263,29 +278,34 @@ public abstract class ProfileManager extends Observable {
 
 	public final class SharedProfile extends CustomProfile {
 
-		public SharedProfile(String oldName, Map options, int version, String profileKind) {
+		public SharedProfile(String oldName, Map<String, String> options, int version, String profileKind) {
 			super(oldName, options, version, profileKind);
 		}
 
+		@Override
 		public Profile rename(String name, ProfileManager manager) {
 			CustomProfile profile= new CustomProfile(name.trim(), getSettings(), getVersion(), getKind());
-
+			profile.setManager(manager);
 			manager.profileReplaced(this, profile);
 			return profile;
 		}
 
+		@Override
 		public String getID() {
 			return SHARED_PROFILE;
 		}
 
-		public final int compareTo(Object o) {
+		@Override
+		public final int compareTo(Profile o) {
 			return 1;
 		}
 
+		@Override
 		public boolean isProfileToSave() {
 			return false;
 		}
 
+		@Override
 		public boolean isSharedProfile() {
 			return true;
 		}
@@ -319,12 +339,12 @@ public abstract class ProfileManager extends Observable {
 	/**
 	 * A map containing the available profiles, using the IDs as keys.
 	 */
-	private final Map fProfiles;
+	private final Map<String, Profile> fProfiles;
 
 	/**
 	 * The available profiles, sorted by name.
 	 */
-	private final List fProfilesByName;
+	private final List<Profile> fProfilesByName;
 
 
 	/**
@@ -347,7 +367,7 @@ public abstract class ProfileManager extends Observable {
 	 * @param profileVersioner
 	 */
 	public ProfileManager(
-			List profiles,
+			List<Profile> profiles,
 			IScopeContext context,
 			PreferencesAccess preferencesAccess,
 			IProfileVersioner profileVersioner,
@@ -361,11 +381,11 @@ public abstract class ProfileManager extends Observable {
 		fProfileKey= profileKey;
 		fProfileVersionKey= profileVersionKey;
 
-		fProfiles= new HashMap();
-		fProfilesByName= new ArrayList();
+		fProfiles= new HashMap<String, Profile>();
+		fProfilesByName= new ArrayList<Profile>();
 
-		for (final Iterator iter = profiles.iterator(); iter.hasNext();) {
-			final Profile profile= (Profile) iter.next();
+		for (final Iterator<Profile> iter = profiles.iterator(); iter.hasNext();) {
+			final Profile profile= iter.next();
 			if (profile instanceof CustomProfile) {
 				((CustomProfile)profile).setManager(this);
 			}
@@ -377,17 +397,17 @@ public abstract class ProfileManager extends Observable {
 
 		String profileId= getSelectedProfileId(fPreferencesAccess.getInstanceScope());
 
-		Profile profile= (Profile) fProfiles.get(profileId);
+		Profile profile= fProfiles.get(profileId);
 		if (profile == null) {
 			profile= getDefaultProfile();
 		}
 		fSelected= profile;
 
 		if (context.getName() == ProjectScope.SCOPE && hasProjectSpecificSettings(context)) {
-			Map map= readFromPreferenceStore(context, profile);
+			Map<String, String> map= readFromPreferenceStore(context, profile);
 			if (map != null) {
 
-				List allKeys= new ArrayList();
+				List<String> allKeys= new ArrayList<String>();
 				for (int i= 0; i < fKeySets.length; i++) {
 			        allKeys.addAll(fKeySets[i].getKeys());
 		        }
@@ -397,14 +417,14 @@ public abstract class ProfileManager extends Observable {
 
 				String projProfileId= context.getNode(JavaUI.ID_PLUGIN).get(fProfileKey, null);
 				if (projProfileId != null) {
-					Profile curr= (Profile) fProfiles.get(projProfileId);
+					Profile curr= fProfiles.get(projProfileId);
 					if (curr != null && (curr.isBuiltInProfile() || curr.hasEqualSettings(map, allKeys))) {
 						matching= curr;
 					}
 				} else {
 					// old version: look for similar
-					for (final Iterator iter = fProfilesByName.iterator(); iter.hasNext();) {
-						Profile curr= (Profile) iter.next();
+					for (final Iterator<Profile> iter = fProfilesByName.iterator(); iter.hasNext();) {
+						Profile curr= iter.next();
 						if (curr.hasEqualSettings(map, allKeys)) {
 							matching= curr;
 							break;
@@ -434,7 +454,7 @@ public abstract class ProfileManager extends Observable {
 		String profileId= instanceScope.getNode(JavaUI.ID_PLUGIN).get(fProfileKey, null);
 		if (profileId == null) {
 			// request from bug 129427
-			profileId= new DefaultScope().getNode(JavaUI.ID_PLUGIN).get(fProfileKey, null);
+			profileId= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).get(fProfileKey, null);
 		}
 	    return profileId;
     }
@@ -458,8 +478,8 @@ public abstract class ProfileManager extends Observable {
 		for (int i= 0; i < keySets.length; i++) {
 	        KeySet keySet= keySets[i];
 	        IEclipsePreferences preferences= context.getNode(keySet.getNodeName());
-	        for (final Iterator keyIter= keySet.getKeys().iterator(); keyIter.hasNext();) {
-	            final String key= (String)keyIter.next();
+	        for (final Iterator<String> keyIter= keySet.getKeys().iterator(); keyIter.hasNext();) {
+	            final String key= keyIter.next();
 	            Object val= preferences.get(key, null);
 	            if (val != null) {
 	            	return true;
@@ -477,13 +497,13 @@ public abstract class ProfileManager extends Observable {
 	 * Only to read project specific settings to find out to what profile it matches.
 	 * @param context The project context
 	 */
-	private Map readFromPreferenceStore(IScopeContext context, Profile workspaceProfile) {
-		final Map profileOptions= new HashMap();
+	private Map<String, String> readFromPreferenceStore(IScopeContext context, Profile workspaceProfile) {
+		final Map<String, String> profileOptions= new HashMap<String, String>();
 		IEclipsePreferences uiPrefs= context.getNode(JavaUI.ID_PLUGIN);
 
 		int version= uiPrefs.getInt(fProfileVersionKey, fProfileVersioner.getFirstVersion());
 		if (version != fProfileVersioner.getCurrentVersion()) {
-			Map allOptions= new HashMap();
+			Map<String, String> allOptions= new HashMap<String, String>();
 			for (int i= 0; i < fKeySets.length; i++) {
 	            addAll(context.getNode(fKeySets[i].getNodeName()), allOptions);
             }
@@ -496,9 +516,9 @@ public abstract class ProfileManager extends Observable {
 		for (int i= 0; i < fKeySets.length; i++) {
 	        KeySet keySet= fKeySets[i];
 	        IEclipsePreferences preferences= context.getNode(keySet.getNodeName());
-	        for (final Iterator keyIter = keySet.getKeys().iterator(); keyIter.hasNext(); ) {
-				final String key= (String) keyIter.next();
-				Object val= preferences.get(key, null);
+	        for (final Iterator<String> keyIter = keySet.getKeys().iterator(); keyIter.hasNext(); ) {
+				final String key= keyIter.next();
+				String val= preferences.get(key, null);
 				if (val != null) {
 					hasValues= true;
 				} else {
@@ -521,7 +541,7 @@ public abstract class ProfileManager extends Observable {
 	 * @param uiPrefs
 	 * @param allOptions
 	 */
-	private void addAll(IEclipsePreferences uiPrefs, Map allOptions) {
+	private void addAll(IEclipsePreferences uiPrefs, Map<String, String> allOptions) {
 		try {
 			String[] keys= uiPrefs.keys();
 			for (int i= 0; i < keys.length; i++) {
@@ -537,12 +557,12 @@ public abstract class ProfileManager extends Observable {
 
 	}
 
-	private boolean updatePreferences(IEclipsePreferences prefs, List keys, Map profileOptions) {
+	private boolean updatePreferences(IEclipsePreferences prefs, List<String> keys, Map<String, String> profileOptions) {
 		boolean hasChanges= false;
-		for (final Iterator keyIter = keys.iterator(); keyIter.hasNext(); ) {
-			final String key= (String) keyIter.next();
+		for (final Iterator<String> keyIter = keys.iterator(); keyIter.hasNext(); ) {
+			final String key= keyIter.next();
 			final String oldVal= prefs.get(key, null);
-			final String val= (String) profileOptions.get(key);
+			final String val= profileOptions.get(key);
 			if (val == null) {
 				if (oldVal != null) {
 					prefs.remove(key);
@@ -562,7 +582,7 @@ public abstract class ProfileManager extends Observable {
 	 * @param profile The profile to write to the preference store
 	 */
 	private void writeToPreferenceStore(Profile profile, IScopeContext context) {
-		final Map profileOptions= profile.getSettings();
+		final Map<String, String> profileOptions= profile.getSettings();
 
 		for (int i= 0; i < fKeySets.length; i++) {
 	        updatePreferences(context.getNode(fKeySets[i].getNodeName()), fKeySets[i].getKeys(), profileOptions);
@@ -589,7 +609,7 @@ public abstract class ProfileManager extends Observable {
 	 *
 	 * @see #getSortedDisplayNames()
 	 */
-	public List getSortedProfiles() {
+	public List<Profile> getSortedProfiles() {
 		return Collections.unmodifiableList(fProfilesByName);
 	}
 
@@ -603,8 +623,8 @@ public abstract class ProfileManager extends Observable {
 	public String[] getSortedDisplayNames() {
 		final String[] sortedNames= new String[fProfilesByName.size()];
 		int i= 0;
-		for (final Iterator iter = fProfilesByName.iterator(); iter.hasNext();) {
-			Profile curr= (Profile) iter.next();
+		for (final Iterator<Profile> iter = fProfilesByName.iterator(); iter.hasNext();) {
+			Profile curr= iter.next();
 			sortedNames[i++]= curr.getName();
 		}
 		return sortedNames;
@@ -616,7 +636,7 @@ public abstract class ProfileManager extends Observable {
 	 * @return The profile with the given ID or <code>null</code>
 	 */
 	public Profile getProfile(String ID) {
-		return (Profile)fProfiles.get(ID);
+		return fProfiles.get(ID);
 	}
 
 	/**
@@ -631,7 +651,7 @@ public abstract class ProfileManager extends Observable {
 
 	public void clearAllSettings(IScopeContext context) {
 		for (int i= 0; i < fKeySets.length; i++) {
-	        updatePreferences(context.getNode(fKeySets[i].getNodeName()), fKeySets[i].getKeys(), Collections.EMPTY_MAP);
+	        updatePreferences(context.getNode(fKeySets[i].getNodeName()), fKeySets[i].getKeys(), Collections.<String, String>emptyMap());
         }
 
 		final IEclipsePreferences uiPrefs= context.getNode(JavaUI.ID_PLUGIN);
@@ -651,7 +671,7 @@ public abstract class ProfileManager extends Observable {
 	 * @param profile The profile to select
 	 */
 	public void setSelected(Profile profile) {
-		final Profile newSelected= (Profile)fProfiles.get(profile.getID());
+		final Profile newSelected= fProfiles.get(profile.getID());
 		if (newSelected != null && !newSelected.equals(fSelected)) {
 			fSelected= newSelected;
 			notifyObservers(SELECTION_CHANGED_EVENT);
@@ -665,8 +685,8 @@ public abstract class ProfileManager extends Observable {
 	 * @return Returns <code>true</code> if a profile with the given name exists
 	 */
 	public boolean containsName(String name) {
-		for (final Iterator iter = fProfilesByName.iterator(); iter.hasNext();) {
-			Profile curr= (Profile) iter.next();
+		for (final Iterator<Profile> iter = fProfilesByName.iterator(); iter.hasNext();) {
+			Profile curr= iter.next();
 			if (name.equals(curr.getName())) {
 				return true;
 			}
@@ -715,7 +735,7 @@ public abstract class ProfileManager extends Observable {
 
 		if (index >= fProfilesByName.size())
 			index--;
-		fSelected= (Profile) fProfilesByName.get(index);
+		fSelected= fProfilesByName.get(index);
 
 		if (!profile.isSharedProfile()) {
 			updateProfilesWithName(profile.getID(), null, false);
@@ -789,7 +809,7 @@ public abstract class ProfileManager extends Observable {
 		}
 	}
 
-	private static void setLatestCompliance(Map map) {
+	private static void setLatestCompliance(Map<String, String> map) {
 		JavaModelUtil.set50ComplianceOptions(map);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileStore.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileStore.java
index 9b8ed56..3b0c508 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileStore.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,13 +76,14 @@ public class ProfileStore {
 	 */
 	private final static class ProfileDefaultHandler extends DefaultHandler {
 
-		private List fProfiles;
+		private List<Profile> fProfiles;
 		private int fVersion;
 
 		private String fName;
-		private Map fSettings;
+		private Map<String, String> fSettings;
 		private String fKind;
 
+		@Override
 		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
 
 			if (qName.equals(XML_NODE_SETTING)) {
@@ -98,12 +99,12 @@ public class ProfileStore {
 				if (fKind == null) //Can only be an CodeFormatterProfile created pre 3.3M2
 					fKind= ProfileVersioner.CODE_FORMATTER_PROFILE_KIND;
 
-				fSettings= new HashMap(200);
+				fSettings= new HashMap<String, String>(200);
 
 			}
 			else if (qName.equals(XML_NODE_ROOT)) {
 
-				fProfiles= new ArrayList();
+				fProfiles= new ArrayList<Profile>();
 				try {
 					fVersion= Integer.parseInt(attributes.getValue(XML_ATTRIBUTE_VERSION));
 				} catch (NumberFormatException ex) {
@@ -113,6 +114,7 @@ public class ProfileStore {
 			}
 		}
 
+		@Override
 		public void endElement(String uri, String localName, String qName) {
 			if (qName.equals(XML_NODE_PROFILE)) {
 				fProfiles.add(new CustomProfile(fName, fSettings, fVersion, fKind));
@@ -122,7 +124,7 @@ public class ProfileStore {
 			}
 		}
 
-		public List getProfiles() {
+		public List<Profile> getProfiles() {
 			return fProfiles;
 		}
 
@@ -158,11 +160,11 @@ public class ProfileStore {
 	 * and are all updated to the latest version.
 	 * @throws CoreException
 	 */
-	public List readProfiles(IScopeContext scope) throws CoreException {
+	public List<Profile> readProfiles(IScopeContext scope) throws CoreException {
 		return readProfilesFromString(scope.getNode(JavaUI.ID_PLUGIN).get(fProfilesKey, null));
 	}
 
-	public void writeProfiles(Collection profiles, IScopeContext instanceScope) throws CoreException {
+	public void writeProfiles(Collection<Profile> profiles, IScopeContext instanceScope) throws CoreException {
 		ByteArrayOutputStream stream= new ByteArrayOutputStream(2000);
 		try {
 			writeProfilesToStream(profiles, stream, ENCODING, fProfileVersioner);
@@ -180,7 +182,7 @@ public class ProfileStore {
 		}
 	}
 
-	public List readProfilesFromString(String profiles) throws CoreException {
+	public List<Profile> readProfilesFromString(String profiles) throws CoreException {
 	    if (profiles != null && profiles.length() > 0) {
 			byte[] bytes;
 			try {
@@ -190,7 +192,7 @@ public class ProfileStore {
 			}
 			InputStream is= new ByteArrayInputStream(bytes);
 			try {
-				List res= readProfilesFromStream(new InputSource(is));
+				List<Profile> res= readProfilesFromStream(new InputSource(is));
 				if (res != null) {
 					for (int i= 0; i < res.size(); i++) {
 						fProfileVersioner.update((CustomProfile) res.get(i));
@@ -212,7 +214,7 @@ public class ProfileStore {
 	 * @return returns a list of <code>CustomProfile</code> or <code>null</code>
 	 * @throws CoreException
 	 */
-	public List readProfilesFromFile(File file) throws CoreException {
+	public List<Profile> readProfilesFromFile(File file) throws CoreException {
 		try {
 			final FileInputStream reader= new FileInputStream(file);
 			try {
@@ -231,7 +233,7 @@ public class ProfileStore {
 	 * @return returns a list of <code>CustomProfile</code> or <code>null</code>
 	 * @throws CoreException
 	 */
-	public static List readProfilesFromStream(InputSource inputSource) throws CoreException {
+	public static List<Profile> readProfilesFromStream(InputSource inputSource) throws CoreException {
 
 		final ProfileDefaultHandler handler= new ProfileDefaultHandler();
 		try {
@@ -255,7 +257,7 @@ public class ProfileStore {
 	 * @param encoding the encoding to use
 	 * @throws CoreException
 	 */
-	public void writeProfilesToFile(Collection profiles, File file, String encoding) throws CoreException {
+	public void writeProfilesToFile(Collection<Profile> profiles, File file, String encoding) throws CoreException {
 		final OutputStream stream;
 		try {
 			stream= new FileOutputStream(file);
@@ -276,7 +278,7 @@ public class ProfileStore {
 	 * @param encoding the encoding to use
 	 * @throws CoreException
 	 */
-	public static void writeProfilesToStream(Collection profiles, OutputStream stream, String encoding, IProfileVersioner profileVersioner) throws CoreException {
+	public static void writeProfilesToStream(Collection<Profile> profiles, OutputStream stream, String encoding, IProfileVersioner profileVersioner) throws CoreException {
 
 		try {
 			final DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
@@ -288,8 +290,8 @@ public class ProfileStore {
 
 			document.appendChild(rootElement);
 
-			for(final Iterator iter= profiles.iterator(); iter.hasNext();) {
-				final Profile profile= (Profile)iter.next();
+			for(final Iterator<Profile> iter= profiles.iterator(); iter.hasNext();) {
+				final Profile profile= iter.next();
 				if (profile.isProfileToSave()) {
 					final Element profileElement= createProfileElement(profile, document, profileVersioner);
 					rootElement.appendChild(profileElement);
@@ -319,11 +321,11 @@ public class ProfileStore {
 		element.setAttribute(XML_ATTRIBUTE_VERSION, Integer.toString(profile.getVersion()));
 		element.setAttribute(XML_ATTRIBUTE_PROFILE_KIND, profileVersioner.getProfileKind());
 
-		final Iterator keyIter= profile.getSettings().keySet().iterator();
+		final Iterator<String> keyIter= profile.getSettings().keySet().iterator();
 
 		while (keyIter.hasNext()) {
-			final String key= (String)keyIter.next();
-			final String value= (String)profile.getSettings().get(key);
+			final String key= keyIter.next();
+			final String value= profile.getSettings().get(key);
 			if (value != null) {
 				final Element setting= document.createElement(XML_NODE_SETTING);
 				setting.setAttribute(XML_ATTRIBUTE_ID, key);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java
index 6c3f5cd..d6f8223 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,8 +39,9 @@ public class ProfileVersioner implements IProfileVersioner {
 	private static final int VERSION_9= 9; // after storing project profile names in preferences
 	private static final int VERSION_10= 10; // splitting options for annotation types
 	private static final int VERSION_11= 11; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=49412
+	private static final int VERSION_12= 12; // https://bugs.eclipse.org/318010
 
-	private static final int CURRENT_VERSION= VERSION_11;
+	private static final int CURRENT_VERSION= VERSION_12;
 
 	public int getFirstVersion() {
 	    return VERSION_1;
@@ -58,14 +59,14 @@ public class ProfileVersioner implements IProfileVersioner {
     }
 
 	public void update(CustomProfile profile) {
-		final Map oldSettings= profile.getSettings();
-		Map newSettings= updateAndComplete(oldSettings, profile.getVersion());
+		final Map<String, String> oldSettings= profile.getSettings();
+		Map<String, String> newSettings= updateAndComplete(oldSettings, profile.getVersion());
 		profile.setVersion(CURRENT_VERSION);
 		profile.setSettings(newSettings);
 	}
 
-	private static Map updateAndComplete(Map oldSettings, int version) {
-		final Map newSettings= FormatterProfileManager.getDefaultSettings();
+	private static Map<String, String> updateAndComplete(Map<String, String> oldSettings, int version) {
+		final Map<String, String> newSettings= FormatterProfileManager.getDefaultSettings();
 
 		switch (version) {
 
@@ -95,13 +96,16 @@ public class ProfileVersioner implements IProfileVersioner {
 		case VERSION_10 :
 			version10to11(oldSettings);
 			//$FALL-THROUGH$
+		case VERSION_11 :
+			version11to12(oldSettings);
+			//$FALL-THROUGH$
 		default:
-		    for (final Iterator iter= oldSettings.keySet().iterator(); iter.hasNext(); ) {
-		        final String key= (String)iter.next();
+		    for (final Iterator<String> iter= oldSettings.keySet().iterator(); iter.hasNext(); ) {
+		        final String key= iter.next();
 		        if (!newSettings.containsKey(key))
 		            continue;
 
-		        final String value= (String)oldSettings.get(key);
+		        final String value= oldSettings.get(key);
 		        if (value != null) {
 		            newSettings.put(key, value);
 		        }
@@ -116,11 +120,11 @@ public class ProfileVersioner implements IProfileVersioner {
 	 * Updates the map to use the latest the source compliance
 	 * @param map The map to update
 	 */
-	public static void setLatestCompliance(Map map) {
+	public static void setLatestCompliance(Map<String, String> map) {
 		JavaModelUtil.set50ComplianceOptions(map);
 	}
 
-	private static void version1to2(final Map oldSettings) {
+	private static void version1to2(final Map<String, String> oldSettings) {
 		checkAndReplace(oldSettings,
 			FORMATTER_INSERT_SPACE_WITHIN_MESSAGE_SEND,
 			FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_MESSAGE_SEND,
@@ -154,13 +158,13 @@ public class ProfileVersioner implements IProfileVersioner {
 	}
 
 
-	private static void mapOldValueRangeToNew(Map settings, String oldKey, String [] oldValues,
+	private static void mapOldValueRangeToNew(Map<String, String> settings, String oldKey, String [] oldValues,
 		String newKey, String [] newValues) {
 
 		if (!settings.containsKey(oldKey))
 			return;
 
-		final String value= ((String)settings.get(oldKey));
+		final String value= settings.get(oldKey);
 
 		if (value == null)
 			return;
@@ -173,23 +177,19 @@ public class ProfileVersioner implements IProfileVersioner {
 
 	}
 
-	private static void duplicate(Map settings, String existingKey, String newKey) {
-		checkAndReplace(settings, existingKey, new String [] {newKey});
-	}
-
-	private static void checkAndReplace(Map settings, String oldKey, String newKey) {
+	private static void checkAndReplace(Map<String, String> settings, String oldKey, String newKey) {
 		checkAndReplace(settings, oldKey, new String [] {newKey});
 	}
 
-	private static void checkAndReplace(Map settings, String oldKey, String newKey1, String newKey2) {
+	private static void checkAndReplace(Map<String, String> settings, String oldKey, String newKey1, String newKey2) {
 		checkAndReplace(settings, oldKey, new String [] {newKey1, newKey2});
 	}
 
-	private static void checkAndReplace(Map settings, String oldKey, String [] newKeys) {
+	private static void checkAndReplace(Map<String, String> settings, String oldKey, String [] newKeys) {
 		if (!settings.containsKey(oldKey))
 			return;
 
-		final String value= (String)settings.get(oldKey);
+		final String value= settings.get(oldKey);
 
 		if (value == null)
 			return;
@@ -199,11 +199,11 @@ public class ProfileVersioner implements IProfileVersioner {
 		}
 	}
 
-	private static void checkAndReplaceBooleanWithINSERT(Map settings, String oldKey, String newKey) {
+	private static void checkAndReplaceBooleanWithINSERT(Map<String, String> settings, String oldKey, String newKey) {
 		if (!settings.containsKey(oldKey))
 			return;
 
-		String value= (String)settings.get(oldKey);
+		String value= settings.get(oldKey);
 
 		if (value == null)
 			return;
@@ -217,7 +217,7 @@ public class ProfileVersioner implements IProfileVersioner {
 	}
 
 
-	private static void version2to3(Map oldSettings) {
+	private static void version2to3(Map<String, String> oldSettings) {
 
 		checkAndReplace(oldSettings,
 			FORMATTER_ARRAY_INITIALIZER_CONTINUATION_INDENTATION,
@@ -525,7 +525,7 @@ public class ProfileVersioner implements IProfileVersioner {
 
 	}
 
-	private static void version3to4(Map oldSettings) {
+	private static void version3to4(Map<String, String> oldSettings) {
 		checkAndReplace(oldSettings,
 			"org.eclipse.jdt.core.align_type_members_on_columns", //$NON-NLS-1$
 			DefaultCodeFormatterConstants.FORMATTER_ALIGN_TYPE_MEMBERS_ON_COLUMNS);
@@ -543,13 +543,13 @@ public class ProfileVersioner implements IProfileVersioner {
 			DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_INVOCATION);
 	}
 
-	private static void version4to5(Map oldSettings) {
+	private static void version4to5(Map<String, String> oldSettings) {
 		checkAndReplace(oldSettings,
 			"org.eclipse.jdt.core.formatter.indent_block_statements", //$NON-NLS-1$
 			new String[] { DefaultCodeFormatterConstants.FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BODY, DefaultCodeFormatterConstants.FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BLOCK });
 	}
 
-	private static void version5to6(Map oldSettings) {
+	private static void version5to6(Map<String, String> oldSettings) {
 		checkAndReplace(oldSettings,
 			"org.eclipse.jdt.core.formatter.insert_new_line_in_control_statements", //$NON-NLS-1$
 			new String[] {
@@ -560,7 +560,7 @@ public class ProfileVersioner implements IProfileVersioner {
 				});
 	}
 
-	private static void version6to7(Map oldSettings) {
+	private static void version6to7(Map<String, String> oldSettings) {
 		checkAndReplace(oldSettings, FORMATTER_COMMENT_FORMAT, FORMATTER_COMMENT_FORMAT2);
 		checkAndReplace(oldSettings, FORMATTER_COMMENT_FORMATHEADER, DefaultCodeFormatterConstants.FORMATTER_COMMENT_FORMAT_HEADER);
 		checkAndReplace(oldSettings, FORMATTER_COMMENT_FORMATSOURCE, DefaultCodeFormatterConstants.FORMATTER_COMMENT_FORMAT_SOURCE);
@@ -574,16 +574,16 @@ public class ProfileVersioner implements IProfileVersioner {
 		checkAndReplaceBooleanWithINSERT(oldSettings, FORMATTER_COMMENT_SEPARATEROOTTAGS, DefaultCodeFormatterConstants.FORMATTER_COMMENT_INSERT_EMPTY_LINE_BEFORE_ROOT_TAGS);
 	}
 
-	private static void version9to10(Map oldSettings) {
-		duplicate(oldSettings,
+	private static void version9to10(Map<String, String> oldSettings) {
+		checkAndReplace(oldSettings,
 				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_IN_EMPTY_TYPE_DECLARATION,
 				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_IN_EMPTY_ANNOTATION_DECLARATION);
-		duplicate(oldSettings,
+		checkAndReplace(oldSettings,
 				DefaultCodeFormatterConstants.FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_TYPE_HEADER,
 				DefaultCodeFormatterConstants.FORMATTER_INDENT_BODY_DECLARATIONS_COMPARE_TO_ANNOTATION_DECLARATION_HEADER);
 	}
 
-	private static void version10to11(Map oldSettings) {
+	private static void version10to11(Map<String, String> oldSettings) {
 		checkAndReplace(oldSettings,
 				FORMATTER_COMMENT_FORMAT2,
 				new String[] {
@@ -598,7 +598,25 @@ public class ProfileVersioner implements IProfileVersioner {
 				});
 	}
 
-
+	private static void version11to12(Map<String, String> oldSettings) {
+		checkAndReplace(oldSettings,
+				FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION,
+				new String[] {
+						FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER,
+						DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_LOCAL_VARIABLE,
+						DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PARAMETER
+		});
+		checkAndReplace(oldSettings,
+				FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER,
+				new String[] {
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_FIELD,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_METHOD,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_PACKAGE,
+				DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_TYPE
+		});
+	}
+	
+	
 	/* old format constant values */
 
     private static final String FORMATTER_METHOD_DECLARATION_ARGUMENTS_ALIGNMENT = JavaCore.PLUGIN_ID + ".formatter.method_declaration_arguments_alignment"; //$NON-NLS-1$
@@ -691,6 +709,18 @@ public class ProfileVersioner implements IProfileVersioner {
 	 */
 	private static final String FORMATTER_COMMENT_CLEAR_BLANK_LINES= DefaultCodeFormatterConstants.FORMATTER_COMMENT_CLEAR_BLANK_LINES;
 
+	/**
+	 * @deprecated see https://bugs.eclipse.org/318010
+	 * @since 3.7
+	 */
+	private static final String FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER= DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER;
+
+	/**
+	 * @deprecated see https://bugs.eclipse.org/318010
+	 * @since 3.7
+	 */
+	private static final String FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION= DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION;
+
 	// Old comment formatter constants
 	/** @deprecated As of 3.1, replaced by {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_COMMENT_FORMAT_SOURCE} */
 	private static final String FORMATTER_COMMENT_FORMATSOURCE= PreferenceConstants.FORMATTER_COMMENT_FORMATSOURCE;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/SnippetPreview.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/SnippetPreview.java
index df45bbf..4713951 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/SnippetPreview.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/SnippetPreview.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,14 +42,15 @@ public class SnippetPreview extends JavaPreview {
         }
     }
 
-    private ArrayList fSnippets;
+    private ArrayList<PreviewSnippet> fSnippets;
 
-    public SnippetPreview(Map workingValues, Composite parent) {
+    public SnippetPreview(Map<String, String> workingValues, Composite parent) {
         super(workingValues, parent);
-        fSnippets= new ArrayList();
+        fSnippets= new ArrayList<PreviewSnippet>();
     }
 
-    protected void doFormatPreview() {
+    @Override
+	protected void doFormatPreview() {
         if (fSnippets.isEmpty()) {
             fPreviewDocument.set(""); //$NON-NLS-1$
             return;
@@ -59,8 +60,8 @@ public class SnippetPreview extends JavaPreview {
         final String delimiter= "\n"; //$NON-NLS-1$
 
         final StringBuffer buffer= new StringBuffer();
-        for (final Iterator iter= fSnippets.iterator(); iter.hasNext();) {
-            final PreviewSnippet snippet= (PreviewSnippet) iter.next();
+        for (final Iterator<PreviewSnippet> iter= fSnippets.iterator(); iter.hasNext();) {
+            final PreviewSnippet snippet= iter.next();
             String formattedSource;
             try {
                 formattedSource= CodeFormatterUtil.format(snippet.kind, snippet.source, 0, delimiter, fWorkingValues);
@@ -88,7 +89,7 @@ public class SnippetPreview extends JavaPreview {
         fSnippets.remove(snippet);
     }
 
-    public void addAll(Collection snippets) {
+    public void addAll(Collection<PreviewSnippet> snippets) {
         fSnippets.addAll(snippets);
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceOptions.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceOptions.java
index faea06c..cb3dc0c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceOptions.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceOptions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,16 +39,16 @@ public final class WhiteSpaceOptions {
 
 	    public int index;
 
-	    protected final Map fWorkingValues;
-	    protected final ArrayList fChildren;
+	    protected final Map<String, String> fWorkingValues;
+	    protected final ArrayList<Node> fChildren;
 
-	    public Node(InnerNode parent, Map workingValues, String message) {
+	    public Node(InnerNode parent, Map<String, String> workingValues, String message) {
 	        if (workingValues == null || message == null)
 	            throw new IllegalArgumentException();
 	        fParent= parent;
 	        fWorkingValues= workingValues;
 	        fName= message;
-	        fChildren= new ArrayList();
+	        fChildren= new ArrayList<Node>();
 	        if (fParent != null)
 	            fParent.add(this);
 	    }
@@ -59,7 +59,7 @@ public final class WhiteSpaceOptions {
 	        return !fChildren.isEmpty();
 	    }
 
-	    public List getChildren() {
+	    public List<Node> getChildren() {
 	        return Collections.unmodifiableList(fChildren);
 	    }
 
@@ -67,13 +67,14 @@ public final class WhiteSpaceOptions {
 	        return fParent;
 	    }
 
-	    public final String toString() {
+	    @Override
+		public final String toString() {
 	        return fName;
 	    }
 
-	    public abstract List getSnippets();
+	    public abstract List<PreviewSnippet> getSnippets();
 
-	    public abstract void getCheckedLeafs(List list);
+	    public abstract void getCheckedLeafs(List<OptionNode> list);
 	}
 
 	/**
@@ -81,25 +82,27 @@ public final class WhiteSpaceOptions {
 	 */
 	public static class InnerNode extends Node {
 
-        public InnerNode(InnerNode parent, Map workingValues, String messageKey) {
+        public InnerNode(InnerNode parent, Map<String, String> workingValues, String messageKey) {
             super(parent, workingValues, messageKey);
         }
 
-	    public void setChecked(boolean checked) {
-	        for (final Iterator iter = fChildren.iterator(); iter.hasNext();)
-	            ((Node)iter.next()).setChecked(checked);
+	    @Override
+		public void setChecked(boolean checked) {
+	        for (final Iterator<Node> iter = fChildren.iterator(); iter.hasNext();)
+	            iter.next().setChecked(checked);
 	    }
 
 	    public void add(Node child) {
 	        fChildren.add(child);
 	    }
 
-        public List getSnippets() {
-            final ArrayList snippets= new ArrayList(fChildren.size());
-            for (Iterator iter= fChildren.iterator(); iter.hasNext();) {
-                final List childSnippets= ((Node)iter.next()).getSnippets();
-                for (final Iterator chIter= childSnippets.iterator(); chIter.hasNext(); ) {
-                    final Object snippet= chIter.next();
+        @Override
+		public List<PreviewSnippet> getSnippets() {
+            final ArrayList<PreviewSnippet> snippets= new ArrayList<PreviewSnippet>(fChildren.size());
+            for (Iterator<Node> iter= fChildren.iterator(); iter.hasNext();) {
+                final List<PreviewSnippet> childSnippets= iter.next().getSnippets();
+                for (final Iterator<PreviewSnippet> chIter= childSnippets.iterator(); chIter.hasNext(); ) {
+                    final PreviewSnippet snippet= chIter.next();
                     if (!snippets.contains(snippet))
                         snippets.add(snippet);
                 }
@@ -107,9 +110,10 @@ public final class WhiteSpaceOptions {
             return snippets;
         }
 
-        public void getCheckedLeafs(List list) {
-            for (Iterator iter= fChildren.iterator(); iter.hasNext();) {
-                ((Node)iter.next()).getCheckedLeafs(list);
+        @Override
+		public void getCheckedLeafs(List<OptionNode> list) {
+            for (Iterator<Node> iter= fChildren.iterator(); iter.hasNext();) {
+                iter.next().getCheckedLeafs(list);
             }
         }
 	}
@@ -120,16 +124,17 @@ public final class WhiteSpaceOptions {
 	 */
 	public static class OptionNode extends Node {
 	    private final String fKey;
-	    private final ArrayList fSnippets;
+	    private final ArrayList<PreviewSnippet> fSnippets;
 
-	    public OptionNode(InnerNode parent, Map workingValues, String messageKey, String key, PreviewSnippet snippet) {
+	    public OptionNode(InnerNode parent, Map<String, String> workingValues, String messageKey, String key, PreviewSnippet snippet) {
 	        super(parent, workingValues, messageKey);
 	        fKey= key;
-	        fSnippets= new ArrayList(1);
+	        fSnippets= new ArrayList<PreviewSnippet>(1);
 	        fSnippets.add(snippet);
 	    }
 
-        public void setChecked(boolean checked) {
+        @Override
+		public void setChecked(boolean checked) {
         	fWorkingValues.put(fKey, checked ? JavaCore.INSERT : JavaCore.DO_NOT_INSERT);
         }
 
@@ -137,11 +142,13 @@ public final class WhiteSpaceOptions {
             return JavaCore.INSERT.equals(fWorkingValues.get(fKey));
         }
 
-        public List getSnippets() {
+        @Override
+		public List<PreviewSnippet> getSnippets() {
             return fSnippets;
         }
 
-        public void getCheckedLeafs(List list) {
+        @Override
+		public void getCheckedLeafs(List<OptionNode> list) {
             if (getChecked())
                 list.add(this);
         }
@@ -317,8 +324,8 @@ public final class WhiteSpaceOptions {
 	 * @param workingValues
 	 * @return returns roots (type <code>Node</code>)
 	 */
-	public List createTreeBySyntaxElem(Map workingValues) {
-        final ArrayList roots= new ArrayList();
+	public List<InnerNode> createTreeBySyntaxElem(Map<String, String> workingValues) {
+        final ArrayList<InnerNode> roots= new ArrayList<InnerNode>();
 
         InnerNode element;
 
@@ -397,9 +404,9 @@ public final class WhiteSpaceOptions {
      * @param workingValues
      * @return returns roots (type <code>Node</code>)
      */
-    public List createAltTree(Map workingValues) {
+    public List<Node> createAltTree(Map<String, String> workingValues) {
 
-        final ArrayList roots= new ArrayList();
+        final ArrayList<Node> roots= new ArrayList<Node>();
 
         InnerNode parent;
 
@@ -509,13 +516,13 @@ public final class WhiteSpaceOptions {
         return roots;
 	}
 
-	private InnerNode createParentNode(List roots, Map workingValues, String text) {
+	private InnerNode createParentNode(List<Node> roots, Map<String, String> workingValues, String text) {
         final InnerNode parent= new InnerNode(null, workingValues, text);
         roots.add(parent);
         return parent;
     }
 
-    public ArrayList createTreeByJavaElement(Map workingValues) {
+    public ArrayList<Node> createTreeByJavaElement(Map<String, String> workingValues) {
 
         final InnerNode declarations= new InnerNode(null, workingValues, FormatterMessages.WhiteSpaceTabPage_declarations);
         createClassTree(workingValues, declarations);
@@ -561,7 +568,7 @@ public final class WhiteSpaceOptions {
 		createTypeParameterTree(workingValues, paramtypes);
 		createWildcardTypeTree(workingValues, paramtypes);
 
-        final ArrayList roots= new ArrayList();
+        final ArrayList<Node> roots= new ArrayList<Node>();
 		roots.add(declarations);
 		roots.add(statements);
 		roots.add(expressions);
@@ -570,25 +577,25 @@ public final class WhiteSpaceOptions {
         return roots;
     }
 
-	private void createBeforeQuestionTree(Map workingValues, final InnerNode parent) {
+	private void createBeforeQuestionTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_conditional, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_CONDITIONAL, CONDITIONAL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_wildcard, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_WILDCARD, WILDCARD_PREVIEW);
 	}
 
-	private void createBeforeAtTree(Map workingValues, final InnerNode parent) {
+	private void createBeforeAtTree(Map<String, String> workingValues, final InnerNode parent) {
 		createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_annotation_type, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_AT_IN_ANNOTATION_TYPE_DECLARATION, ANNOTATION_DECL_PREVIEW);
  	}
 
-	private void createBeforeAndTree(Map workingValues, final InnerNode parent) {
+	private void createBeforeAndTree(Map<String, String> workingValues, final InnerNode parent) {
 		createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_parameters, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_AND_IN_TYPE_PARAMETER, TYPE_PARAMETER_PREVIEW);
  	}
 
-    private void createBeforeSemicolonTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeSemicolonTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON_IN_FOR, FOR_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_statements, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_SEMICOLON, SEMICOLON_PREVIEW);
     }
 
-    private void createBeforeColonTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeColonTree(Map<String, String> workingValues, final InnerNode parent) {
     	createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_assert, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_ASSERT, ASSERT_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_conditional, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CONDITIONAL, CONDITIONAL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_label, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_LABELED_STATEMENT, LABEL_PREVIEW);
@@ -600,7 +607,7 @@ public final class WhiteSpaceOptions {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_FOR, FOR_PREVIEW);
     }
 
-    private void createBeforeCommaTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeCommaTree(Map<String, String> workingValues, final InnerNode parent) {
 
         final InnerNode forStatement= createChild(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for);
         createOption(forStatement, workingValues, FormatterMessages.WhiteSpaceOptions_initialization, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_FOR_INITS, FOR_PREVIEW);
@@ -636,7 +643,7 @@ public final class WhiteSpaceOptions {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_arguments, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
      }
 
-    private void createBeforeOperatorTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeOperatorTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_assignment_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR, OPERATOR_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_unary_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_UNARY_OPERATOR, OPERATOR_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_binary_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_BINARY_OPERATOR, OPERATOR_PREVIEW);
@@ -644,35 +651,35 @@ public final class WhiteSpaceOptions {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_postfix_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_POSTFIX_OPERATOR, OPERATOR_PREVIEW);
     }
 
-    private void createBeforeClosingBracketTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeClosingBracketTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_alloc, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, ARRAY_DECL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_element_access, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACKET_IN_ARRAY_REFERENCE, ARRAY_REF_PREVIEW);
     }
 
-    private void createBeforeClosingAngleBracketTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeClosingAngleBracketTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_parameters, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS, TYPE_PARAMETER_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_parameterized_type, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE, TYPE_ARGUMENTS_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_arguments, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
     }
 
 
-    private void createBeforeOpenBracketTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeOpenBracketTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_decl, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_TYPE_REFERENCE, ARRAY_DECL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_alloc, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, ARRAY_DECL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_element_access, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_REFERENCE, ARRAY_REF_PREVIEW);
     }
 
-    private void createBeforeOpenAngleBracketTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeOpenAngleBracketTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_parameters, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS, TYPE_PARAMETER_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_parameterized_type, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE, TYPE_ARGUMENTS_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_arguments, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
     }
 
-    private void createBeforeClosingBraceTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeClosingBraceTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_init, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_BRACE_IN_ARRAY_INITIALIZER, CLASS_DECL_PREVIEW);
     }
 
-    private void createBeforeOpenBraceTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeOpenBraceTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_class_decl, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_TYPE_DECLARATION, CLASS_DECL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_anon_class_decl, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANONYMOUS_TYPE_DECLARATION, ANON_CLASS_PREVIEW);
@@ -691,7 +698,7 @@ public final class WhiteSpaceOptions {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_annotation_type, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANNOTATION_TYPE_DECLARATION, ANNOTATION_DECL_PREVIEW);
     }
 
-    private void createBeforeClosingParenTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeClosingParenTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_catch, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CATCH, CATCH_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_FOR, FOR_PREVIEW);
@@ -714,7 +721,7 @@ public final class WhiteSpaceOptions {
 
     }
 
-    private void createBeforeOpenParenTree(Map workingValues, final InnerNode parent) {
+    private void createBeforeOpenParenTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_catch, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CATCH, CATCH_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_FOR, FOR_PREVIEW);
@@ -738,41 +745,41 @@ public final class WhiteSpaceOptions {
 
     }
 
-	private void createAfterQuestionTree(Map workingValues, final InnerNode parent) {
+	private void createAfterQuestionTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_conditional, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_CONDITIONAL, CONDITIONAL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_wildcard, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_WILDCARD, WILDCARD_PREVIEW);
 	}
 
-	private void createAfterAtTree(Map workingValues, final InnerNode parent) {
+	private void createAfterAtTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_annotation_modifier, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION, ANNOTATION_MODIFIER_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_annotation_type, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION_TYPE_DECLARATION, ANNOTATION_DECL_PREVIEW);
 	}
 
-	private void createAfterAndTree(Map workingValues, final InnerNode parent) {
+	private void createAfterAndTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_parameters, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_AND_IN_TYPE_PARAMETER, TYPE_PARAMETER_PREVIEW);
  	}
 
-	private void createBeforeEllipsis(Map workingValues, InnerNode parent) {
+	private void createBeforeEllipsis(Map<String, String> workingValues, InnerNode parent) {
 		createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_vararg_parameter, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ELLIPSIS, VARARG_PARAMETER_PREVIEW);
 
 	}
 
-	private void createAfterEllipsis(Map workingValues, InnerNode parent) {
+	private void createAfterEllipsis(Map<String, String> workingValues, InnerNode parent) {
 		createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_vararg_parameter, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_ELLIPSIS, VARARG_PARAMETER_PREVIEW);
 	}
 
-    private void createAfterSemicolonTree(Map workingValues, final InnerNode parent) {
+    private void createAfterSemicolonTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_SEMICOLON_IN_FOR, FOR_PREVIEW);
     }
 
-    private void createAfterColonTree(Map workingValues, final InnerNode parent) {
+    private void createAfterColonTree(Map<String, String> workingValues, final InnerNode parent) {
     	createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_assert, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_ASSERT, ASSERT_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_conditional, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_CONDITIONAL, CONDITIONAL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_label, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_LABELED_STATEMENT, LABEL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_FOR, FOR_PREVIEW);
     }
 
-    private void createAfterCommaTree(Map workingValues, final InnerNode parent) {
+    private void createAfterCommaTree(Map<String, String> workingValues, final InnerNode parent) {
 
         final InnerNode forStatement= createChild(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for); {
             createOption(forStatement, workingValues, FormatterMessages.WhiteSpaceOptions_initialization, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_FOR_INITS, FOR_PREVIEW);
@@ -808,7 +815,7 @@ public final class WhiteSpaceOptions {
 	    createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_arguments, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
     }
 
-    private void createAfterOperatorTree(Map workingValues, final InnerNode parent) {
+    private void createAfterOperatorTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_assignment_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR, OPERATOR_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_unary_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_UNARY_OPERATOR, OPERATOR_PREVIEW);
@@ -817,13 +824,13 @@ public final class WhiteSpaceOptions {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_postfix_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_POSTFIX_OPERATOR, OPERATOR_PREVIEW);
     }
 
-    private void createAfterOpenBracketTree(Map workingValues, final InnerNode parent) {
+    private void createAfterOpenBracketTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_alloc, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, ARRAY_DECL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_element_access, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_REFERENCE, ARRAY_REF_PREVIEW);
     }
 
-    private void createAfterOpenAngleBracketTree(Map workingValues, final InnerNode parent) {
+    private void createAfterOpenAngleBracketTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_parameters, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS, TYPE_PARAMETER_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_parameterized_type, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE, TYPE_ARGUMENTS_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_arguments, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
@@ -831,27 +838,27 @@ public final class WhiteSpaceOptions {
 
 
 
-    private void createAfterOpenBraceTree(Map workingValues, final InnerNode parent) {
+    private void createAfterOpenBraceTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_initializer, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACE_IN_ARRAY_INITIALIZER, ARRAY_DECL_PREVIEW);
     }
 
-    private void createAfterCloseBraceTree(Map workingValues, final InnerNode parent) {
+    private void createAfterCloseBraceTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_block, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_CLOSING_BRACE_IN_BLOCK, BLOCK_PREVIEW);
     }
 
-    private void createAfterCloseParenTree(Map workingValues, final InnerNode parent) {
+    private void createAfterCloseParenTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_cast, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_CLOSING_PAREN_IN_CAST, CAST_PREVIEW);
     }
 
-    private void createAfterClosingAngleBracketTree(Map workingValues, final InnerNode parent) {
+    private void createAfterClosingAngleBracketTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_parameters, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_PARAMETERS, TYPE_PARAMETER_PREVIEW);
         //createOption(parent, workingValues, "WhiteSpaceOptions.parameterized_type", DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE, TYPE_ARGUMENTS_PREVIEW); //$NON-NLS-1$
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_type_arguments, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
     }
 
-    private void createAfterOpenParenTree(Map workingValues, final InnerNode parent) {
+    private void createAfterOpenParenTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_catch, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CATCH, CATCH_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_for, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_FOR, FOR_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_if, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_IF, IF_PREVIEW);
@@ -871,7 +878,7 @@ public final class WhiteSpaceOptions {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_annotation_modifier_args, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_ANNOTATION, ANNOTATION_MODIFIER_PREVIEW);
     }
 
-    private void createBetweenEmptyParenTree(Map workingValues, final InnerNode parent) {
+    private void createBetweenEmptyParenTree(Map<String, String> workingValues, final InnerNode parent) {
 
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_constructor_decl, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_CONSTRUCTOR_DECLARATION, CONSTRUCTOR_DECL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_method_decl, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_METHOD_DECLARATION, METHOD_DECL_PREVIEW);
@@ -881,18 +888,18 @@ public final class WhiteSpaceOptions {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_annotation_type_member, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_PARENS_IN_ANNOTATION_TYPE_MEMBER_DECLARATION, ANNOTATION_DECL_PREVIEW);
     }
 
-    private void createBetweenEmptyBracketsTree(Map workingValues, final InnerNode parent) {
+    private void createBetweenEmptyBracketsTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_alloc, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACKETS_IN_ARRAY_ALLOCATION_EXPRESSION, ARRAY_DECL_PREVIEW);
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_array_decl, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_BRACKETS_IN_ARRAY_TYPE_REFERENCE, ARRAY_DECL_PREVIEW);
     }
 
-    private void createBetweenEmptyBracesTree(Map workingValues, final InnerNode parent) {
+    private void createBetweenEmptyBracesTree(Map<String, String> workingValues, final InnerNode parent) {
         createOption(parent, workingValues, FormatterMessages.WhiteSpaceOptions_initializer, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BETWEEN_EMPTY_BRACES_IN_ARRAY_INITIALIZER, ARRAY_DECL_PREVIEW);
     }
 
     // syntax element tree
 
-    private InnerNode createClassTree(Map workingValues, InnerNode parent) {
+    private InnerNode createClassTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_classes);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_classes_before_opening_brace_of_a_class, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_TYPE_DECLARATION, CLASS_DECL_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_classes_before_opening_brace_of_anon_class, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ANONYMOUS_TYPE_DECLARATION, ANON_CLASS_PREVIEW);
@@ -902,14 +909,14 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createAssignmentTree(Map workingValues, InnerNode parent) {
+    private InnerNode createAssignmentTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_assignments);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_assignments_before_assignment_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR, OPERATOR_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_assignments_after_assignment_operator, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_ASSIGNMENT_OPERATOR, OPERATOR_PREVIEW);
         return root;
     }
 
-    private InnerNode createOperatorTree(Map workingValues, InnerNode parent) {
+    private InnerNode createOperatorTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_operators);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_operators_before_binary_operators, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_BINARY_OPERATOR, OPERATOR_PREVIEW);
@@ -923,7 +930,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createMethodDeclTree(Map workingValues, InnerNode parent) {
+    private InnerNode createMethodDeclTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_methods);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_DECLARATION, METHOD_DECL_PREVIEW);
@@ -942,7 +949,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createConstructorTree(Map workingValues, InnerNode parent) {
+    private InnerNode createConstructorTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_constructors);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CONSTRUCTOR_DECLARATION, CONSTRUCTOR_DECL_PREVIEW);
@@ -958,7 +965,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createFieldTree(Map workingValues, InnerNode parent) {
+    private InnerNode createFieldTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_fields);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_fields_before_comma, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_FIELD_DECLARATIONS, MULT_FIELD_PREVIEW);
@@ -966,14 +973,14 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createLocalVariableTree(Map workingValues, InnerNode parent) {
+    private InnerNode createLocalVariableTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_localvars);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_localvars_before_comma, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS, MULT_LOCAL_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_localvars_after_comma, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COMMA_IN_MULTIPLE_LOCAL_DECLARATIONS, MULT_LOCAL_PREVIEW);
         return root;
     }
 
-    private InnerNode createArrayInitializerTree(Map workingValues, InnerNode parent) {
+    private InnerNode createArrayInitializerTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_arrayinit);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_brace, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ARRAY_INITIALIZER, ARRAY_DECL_PREVIEW);
@@ -985,7 +992,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createArrayDeclarationTree(Map workingValues, InnerNode parent) {
+    private InnerNode createArrayDeclarationTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_arraydecls);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_TYPE_REFERENCE, ARRAY_DECL_PREVIEW);
@@ -993,7 +1000,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createArrayElementAccessTree(Map workingValues, InnerNode parent) {
+    private InnerNode createArrayElementAccessTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_arrayelem);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_REFERENCE, ARRAY_REF_PREVIEW);
@@ -1003,7 +1010,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createArrayAllocTree(Map workingValues, InnerNode parent) {
+    private InnerNode createArrayAllocTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_arrayalloc);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, ARRAY_DECL_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_opening_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_BRACKET_IN_ARRAY_ALLOCATION_EXPRESSION, ARRAY_DECL_PREVIEW);
@@ -1012,7 +1019,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createFunctionCallTree(Map workingValues, InnerNode parent) {
+    private InnerNode createFunctionCallTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_calls);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_METHOD_INVOCATION, METHOD_CALL_PREVIEW);
@@ -1028,7 +1035,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createBlockTree(Map workingValues, InnerNode parent) {
+    private InnerNode createBlockTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_blocks);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_brace, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_BLOCK, BLOCK_PREVIEW);
@@ -1036,7 +1043,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createSwitchStatementTree(Map workingValues, InnerNode parent) {
+    private InnerNode createSwitchStatementTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_switch);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_switch_before_case_colon, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_CASE, SWITCH_PREVIEW);
@@ -1048,7 +1055,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createDoWhileTree(Map workingValues, InnerNode parent) {
+    private InnerNode createDoWhileTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_do);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_WHILE, WHILE_PREVIEW);
@@ -1058,7 +1065,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createSynchronizedTree(Map workingValues, InnerNode parent) {
+    private InnerNode createSynchronizedTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_synchronized);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_SYNCHRONIZED, SYNCHRONIZED_PREVIEW);
@@ -1067,7 +1074,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createTryStatementTree(Map workingValues, InnerNode parent) {
+    private InnerNode createTryStatementTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_try);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_CATCH, CATCH_PREVIEW);
@@ -1075,7 +1082,7 @@ public final class WhiteSpaceOptions {
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_closing_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_CLOSING_PAREN_IN_CATCH, CATCH_PREVIEW);
         return root;
     }
-    private InnerNode createIfStatementTree(Map workingValues, InnerNode parent) {
+    private InnerNode createIfStatementTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_if);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_IF, IF_PREVIEW);
@@ -1084,7 +1091,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createForStatementTree(Map workingValues, InnerNode parent) {
+    private InnerNode createForStatementTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_for);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_FOR, FOR_PREVIEW);
@@ -1102,33 +1109,33 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createAssertTree(Map workingValues, InnerNode parent) {
+    private InnerNode createAssertTree(Map<String, String> workingValues, InnerNode parent) {
     	final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_assert);
     	createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_colon, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_ASSERT, ASSERT_PREVIEW);
     	createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_colon, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_ASSERT, ASSERT_PREVIEW);
     	return root;
     }
 
-    private InnerNode createReturnTree(Map workingValues, InnerNode parent) {
+    private InnerNode createReturnTree(Map<String, String> workingValues, InnerNode parent) {
     	final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceOptions_return);
     	createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_parenthesized_expressions, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_RETURN, RETURN_PREVIEW);
     	return root;
     }
 
-    private InnerNode createThrowTree(Map workingValues, InnerNode parent) {
+    private InnerNode createThrowTree(Map<String, String> workingValues, InnerNode parent) {
     	final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceOptions_throw);
     	createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_parenthesized_expressions, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_PARENTHESIZED_EXPRESSION_IN_THROW, THROW_PREVIEW);
     	return root;
     }
 
-    private InnerNode createLabelTree(Map workingValues, InnerNode parent) {
+    private InnerNode createLabelTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_labels);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_colon, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_COLON_IN_LABELED_STATEMENT, LABEL_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_colon, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_COLON_IN_LABELED_STATEMENT, LABEL_PREVIEW);
         return root;
     }
 
-    private InnerNode createAnnotationTree(Map workingValues, InnerNode parent) {
+    private InnerNode createAnnotationTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_annotations);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_at, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION, ANNOTATION_MODIFIER_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_ANNOTATION, ANNOTATION_MODIFIER_PREVIEW);
@@ -1142,7 +1149,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createAnnotationTypeTree(Map workingValues, InnerNode parent) {
+    private InnerNode createAnnotationTypeTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_annotation_types);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_at, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_AT_IN_ANNOTATION_TYPE_DECLARATION, ANNOTATION_DECL_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_at, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_AT_IN_ANNOTATION_TYPE_DECLARATION, ANNOTATION_DECL_PREVIEW);
@@ -1154,7 +1161,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createEnumTree(Map workingValues, InnerNode parent) {
+    private InnerNode createEnumTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_enums);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_enum_decl_before_opening_brace, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_BRACE_IN_ENUM_DECLARATION, ENUM_PREVIEW);
@@ -1174,7 +1181,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createParameterizedTypeTree(Map workingValues, InnerNode parent) {
+    private InnerNode createParameterizedTypeTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_param_type_ref);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_angle_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE, PARAMETERIZED_TYPE_REFERENCE_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_opening_angle_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_PARAMETERIZED_TYPE_REFERENCE, PARAMETERIZED_TYPE_REFERENCE_PREVIEW);
@@ -1185,7 +1192,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createTypeArgumentTree(Map workingValues, InnerNode parent) {
+    private InnerNode createTypeArgumentTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_type_arguments);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_angle_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_opening_angle_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_ARGUMENTS, TYPE_ARGUMENTS_PREVIEW);
@@ -1196,7 +1203,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createTypeParameterTree(Map workingValues, InnerNode parent) {
+    private InnerNode createTypeParameterTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_type_parameters);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_angle_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS, TYPE_PARAMETER_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_opening_angle_bracket, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETERS, TYPE_PARAMETER_PREVIEW);
@@ -1211,7 +1218,7 @@ public final class WhiteSpaceOptions {
         return root;
     }
 
-    private InnerNode createWildcardTypeTree(Map workingValues, InnerNode parent) {
+    private InnerNode createWildcardTypeTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_wildcardtype);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_question, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_WILDCARD, WILDCARD_PREVIEW);
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_question, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_QUESTION_IN_WILDCARD, WILDCARD_PREVIEW);
@@ -1219,7 +1226,7 @@ public final class WhiteSpaceOptions {
     }
 
 
-    private InnerNode createConditionalTree(Map workingValues, InnerNode parent) {
+    private InnerNode createConditionalTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_conditionals);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_question, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_QUESTION_IN_CONDITIONAL, CONDITIONAL_PREVIEW);
@@ -1230,7 +1237,7 @@ public final class WhiteSpaceOptions {
     }
 
 
-    private InnerNode createTypecastTree(Map workingValues, InnerNode parent) {
+    private InnerNode createTypecastTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_typecasts);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_after_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_AFTER_OPENING_PAREN_IN_CAST, CAST_PREVIEW);
@@ -1240,7 +1247,7 @@ public final class WhiteSpaceOptions {
     }
 
 
-    private InnerNode createParenthesizedExpressionTree(Map workingValues, InnerNode parent) {
+    private InnerNode createParenthesizedExpressionTree(Map<String, String> workingValues, InnerNode parent) {
         final InnerNode root= new InnerNode(parent, workingValues, FormatterMessages.WhiteSpaceTabPage_parenexpr);
 
         createOption(root, workingValues, FormatterMessages.WhiteSpaceTabPage_before_opening_paren, DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_OPENING_PAREN_IN_PARENTHESIZED_EXPRESSION, PAREN_EXPR_PREVIEW);
@@ -1251,17 +1258,17 @@ public final class WhiteSpaceOptions {
 
 
 
-    private static InnerNode createChild(InnerNode root, Map workingValues, String message) {
+    private static InnerNode createChild(InnerNode root, Map<String, String> workingValues, String message) {
 	    return new InnerNode(root, workingValues, message);
 	}
 
-	private static OptionNode createOption(InnerNode root, Map workingValues, String message, String key, PreviewSnippet snippet) {
+	private static OptionNode createOption(InnerNode root, Map<String, String> workingValues, String message, String key, PreviewSnippet snippet) {
 	    return new OptionNode(root, workingValues, message, key, snippet);
 	}
 
-	public static void makeIndexForNodes(List tree, List flatList) {
-        for (final Iterator iter= tree.iterator(); iter.hasNext();) {
-            final Node node= (Node) iter.next();
+	public static void makeIndexForNodes(List<Node> tree, List<Node> flatList) {
+        for (final Iterator<Node> iter= tree.iterator(); iter.hasNext();) {
+            final Node node= iter.next();
             node.index= flatList.size();
             flatList.add(node);
             makeIndexForNodes(node.getChildren(), flatList);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceTabPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceTabPage.java
index 347530c..551f1d1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceTabPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/WhiteSpaceTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,8 +66,8 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 
 	    private final String PREF_NODE_KEY= JavaUI.ID_PLUGIN + "formatter_page.white_space_tab_page.node"; //$NON-NLS-1$
 
-	    private final List fIndexedNodeList;
-		private final List fTree;
+	    private final List<Node> fIndexedNodeList;
+		private final List<Node> fTree;
 
 		private ContainerCheckedTreeViewer fTreeViewer;
 		private Composite fComposite;
@@ -75,7 +75,7 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 	    private Node fLastSelected= null;
 
 	    public SyntaxComponent() {
-	        fIndexedNodeList= new ArrayList();
+	        fIndexedNodeList= new ArrayList<Node>();
 			fTree= new WhiteSpaceOptions().createAltTree(fWorkingValues);
 			WhiteSpaceOptions.makeIndexForNodes(fTree, fIndexedNodeList);
 		}
@@ -90,7 +90,7 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 	        fTreeViewer= new ContainerCheckedTreeViewer(fComposite, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
 			fTreeViewer.setContentProvider(new ITreeContentProvider() {
 				public Object[] getElements(Object inputElement) {
-					return ((Collection)inputElement).toArray();
+					return ((Collection<?>)inputElement).toArray();
 				}
 				public Object[] getChildren(Object parentElement) {
 					return ((Node)parentElement).getChildren().toArray();
@@ -119,9 +119,9 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 		}
 
 		public void refreshState() {
-		    final ArrayList checked= new ArrayList(100);
-		    for (Iterator iter= fTree.iterator(); iter.hasNext();)
-		        ((Node) iter.next()).getCheckedLeafs(checked);
+		    final ArrayList<OptionNode> checked= new ArrayList<OptionNode>(100);
+		    for (Iterator<Node> iter= fTree.iterator(); iter.hasNext();)
+		        iter.next().getCheckedLeafs(checked);
 		    fTreeViewer.setGrayedElements(new Object[0]);
 		    fTreeViewer.setCheckedElements(checked.toArray());
 		    fPreview.clear();
@@ -162,7 +162,7 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 			if (index < 0 || index > fIndexedNodeList.size() - 1) {
 				index= 0;
 			}
-			final Node node= (Node)fIndexedNodeList.get(index);
+			final Node node= fIndexedNodeList.get(index);
 			if (node != null) {
 			    fTreeViewer.expandToLevel(node, 0);
 			    fTreeViewer.setSelection(new StructuredSelection(new Node [] {node}));
@@ -190,8 +190,8 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 	    private final String PREF_INNER_INDEX= JavaUI.ID_PLUGIN + "formatter_page.white_space.java_view.inner"; //$NON-NLS-1$
 		private final String PREF_OPTION_INDEX= JavaUI.ID_PLUGIN + "formatter_page.white_space.java_view.option"; //$NON-NLS-1$
 
-	    private final ArrayList fIndexedNodeList;
-	    private final ArrayList fTree;
+	    private final ArrayList<Node> fIndexedNodeList;
+	    private final ArrayList<Node> fTree;
 
 	    private InnerNode fLastSelected;
 
@@ -201,7 +201,7 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 	    private Composite fComposite;
 
 	    public JavaElementComponent() {
-			fIndexedNodeList= new ArrayList();
+			fIndexedNodeList= new ArrayList<Node>();
 			fTree= new WhiteSpaceOptions().createTreeByJavaElement(fWorkingValues);
 			WhiteSpaceOptions.makeIndexForNodes(fTree, fIndexedNodeList);
 	    }
@@ -221,14 +221,15 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 
 			fInnerViewer.setContentProvider(new ITreeContentProvider() {
 				public Object[] getElements(Object inputElement) {
-					return ((Collection)inputElement).toArray();
+					return ((Collection<?>)inputElement).toArray();
 				}
 				public Object[] getChildren(Object parentElement) {
-				    final List children= ((Node)parentElement).getChildren();
-				    final ArrayList innerChildren= new ArrayList();
-				    for (final Iterator iter= children.iterator(); iter.hasNext();) {
+				    final List<Node> children= ((Node)parentElement).getChildren();
+				    final ArrayList<InnerNode> innerChildren= new ArrayList<InnerNode>();
+				    for (final Iterator<Node> iter= children.iterator(); iter.hasNext();) {
                         final Object o= iter.next();
-                        if (o instanceof InnerNode) innerChildren.add(o);
+                        if (o instanceof InnerNode)
+                        	innerChildren.add((InnerNode) o);
                     }
 				    return innerChildren.toArray();
 				}
@@ -238,8 +239,8 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 				    return null;
 				}
 				public boolean hasChildren(Object element) {
-				    final List children= ((Node)element).getChildren();
-				    for (final Iterator iter= children.iterator(); iter.hasNext();)
+				    final List<Node> children= ((Node)element).getChildren();
+				    for (final Iterator<Node> iter= children.iterator(); iter.hasNext();)
                         if (iter.next() instanceof InnerNode) return true;
 				    return false;
 				}
@@ -284,7 +285,7 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 	    private void restoreSelections() {
 	        Node node;
 	        final int innerIndex= getValidatedIndex(PREF_INNER_INDEX);
-			node= (Node)fIndexedNodeList.get(innerIndex);
+			node= fIndexedNodeList.get(innerIndex);
 			if (node instanceof InnerNode) {
 			    fInnerViewer.expandToLevel(node, 0);
 			    fInnerViewer.setSelection(new StructuredSelection(new Object[] {node}));
@@ -292,7 +293,7 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 			}
 
 	        final int optionIndex= getValidatedIndex(PREF_OPTION_INDEX);
-			node= (Node)fIndexedNodeList.get(optionIndex);
+			node= fIndexedNodeList.get(optionIndex);
 			if (node instanceof OptionNode) {
 			    fOptionsViewer.setSelection(new StructuredSelection(new Object[] {node}));
 			}
@@ -339,18 +340,19 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 
         private void innerViewerChanged(InnerNode selectedNode) {
 
-			final List children= selectedNode.getChildren();
+			final List<Node> children= selectedNode.getChildren();
 
-			final ArrayList optionsChildren= new ArrayList();
-			for (final Iterator iter= children.iterator(); iter.hasNext();) {
+			final ArrayList<OptionNode> optionsChildren= new ArrayList<OptionNode>();
+			for (final Iterator<Node> iter= children.iterator(); iter.hasNext();) {
 			    final Object o= iter.next();
-			    if (o instanceof OptionNode) optionsChildren.add(o);
+			    if (o instanceof OptionNode)
+			    	optionsChildren.add((OptionNode) o);
 			}
 
 			fOptionsViewer.setInput(optionsChildren.toArray());
 
-			for (final Iterator iter= optionsChildren.iterator(); iter.hasNext();) {
-			    final OptionNode child= (OptionNode)iter.next();
+			for (final Iterator<OptionNode> iter= optionsChildren.iterator(); iter.hasNext();) {
+			    final OptionNode child= iter.next();
                     fOptionsViewer.setChecked(child, child.getChecked());
 			}
 
@@ -391,7 +393,8 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 	        fJavaElementComponent= new JavaElementComponent();
 	    }
 
-        public void widgetSelected(SelectionEvent e) {
+        @Override
+		public void widgetSelected(SelectionEvent e) {
             final int index= fSwitchCombo.getSelectionIndex();
             if (index == 0) {
     		    fDialogSettings.put(PREF_VIEW_KEY, false);
@@ -455,26 +458,30 @@ public class WhiteSpaceTabPage extends FormatterTabPage {
 	 * @param modifyDialog
 	 * @param workingValues
 	 */
-	public WhiteSpaceTabPage(ModifyDialog modifyDialog, Map workingValues) {
+	public WhiteSpaceTabPage(ModifyDialog modifyDialog, Map<String, String> workingValues) {
 		super(modifyDialog, workingValues);
 		fDialogSettings= JavaPlugin.getDefault().getDialogSettings();
 		fSwitchComponent= new SwitchComponent();
 	}
 
+	@Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
 		fSwitchComponent.createContents(numColumns, composite);
 	}
 
+	@Override
 	protected void initializePage() {
         fSwitchComponent.initialize();
 	}
 
-    protected JavaPreview doCreateJavaPreview(Composite parent) {
+    @Override
+	protected JavaPreview doCreateJavaPreview(Composite parent) {
         fPreview= new SnippetPreview(fWorkingValues, parent);
         return fPreview;
     }
 
-    protected void doUpdatePreview() {
+    @Override
+	protected void doUpdatePreview() {
     	super.doUpdatePreview();
         fPreview.update();
     }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/ArgumentRule.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/ArgumentRule.java
index b5a3225..6a08fd8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/ArgumentRule.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/ArgumentRule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ public final class ArgumentRule extends WordPatternRule {
 	/*
 	 * @see org.eclipse.jface.text.rules.WordPatternRule#endSequenceDetected(org.eclipse.jface.text.rules.ICharacterScanner)
 	 */
+	@Override
 	protected boolean endSequenceDetected(ICharacterScanner scanner) {
 		fCount++;
 
@@ -70,6 +71,7 @@ public final class ArgumentRule extends WordPatternRule {
 	/*
 	 * @see org.eclipse.jface.text.rules.PatternRule#sequenceDetected(org.eclipse.jface.text.rules.ICharacterScanner, char[], boolean)
 	 */
+	@Override
 	protected boolean sequenceDetected(ICharacterScanner scanner, char[] sequence, boolean eofAllowed) {
 		fCount= 0;
 		return super.sequenceDetected(scanner, sequence, eofAllowed);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/EscapeBackslashCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/EscapeBackslashCompletionProposal.java
new file mode 100644
index 0000000..fc5ffa4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/EscapeBackslashCompletionProposal.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.propertiesfileeditor;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+
+/**
+ * Proposal to escape or unescape backslashes.
+ * 
+ * @since 3.7
+ */
+public class EscapeBackslashCompletionProposal implements ICompletionProposal {
+
+	private final String fProposalText;
+
+	private final int fOffset;
+
+	private final int fLength;
+
+	private final boolean fEscapeBackslashes;
+
+	/**
+	 * Constructor for EscapeBackslashCompletionProposal.
+	 * 
+	 * @param proposalText the proposal text
+	 * @param offset offset of the proposal
+	 * @param length length of the proposal
+	 * @param escapeBackslashes if <code>true</code> create 'Escape backslashes' proposal, otherwise
+	 *            create 'Unescape backslashes' proposal
+	 */
+	public EscapeBackslashCompletionProposal(String proposalText, int offset, int length, boolean escapeBackslashes) {
+		fProposalText= proposalText;
+		fOffset= offset;
+		fLength= length;
+		fEscapeBackslashes= escapeBackslashes;
+	}
+
+	public void apply(IDocument document) {
+		try {
+			document.replace(fOffset, fLength, fProposalText);
+		} catch (BadLocationException e) {
+			//do nothing
+		}
+	}
+
+	public Point getSelection(IDocument document) {
+		return null;
+	}
+
+	public String getAdditionalProposalInfo() {
+		return fProposalText;
+	}
+
+	public String getDisplayString() {
+		return fEscapeBackslashes
+				? PropertiesFileEditorMessages.EscapeBackslashCompletionProposal_escapeBackslashes
+				: PropertiesFileEditorMessages.EscapeBackslashCompletionProposal_unescapeBackslashes;
+	}
+
+	public Image getImage() {
+		return JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
+	}
+
+	public IContextInformation getContextInformation() {
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/LeadingWhitespacePredicateRule.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/LeadingWhitespacePredicateRule.java
index c8666f7..ba3606b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/LeadingWhitespacePredicateRule.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/LeadingWhitespacePredicateRule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public final class LeadingWhitespacePredicateRule extends WordPatternRule {
 	/*
 	 * @see org.eclipse.jface.text.rules.WordPatternRule#endSequenceDetected(org.eclipse.jface.text.rules.ICharacterScanner)
 	 */
+	@Override
 	protected boolean endSequenceDetected(ICharacterScanner scanner) {
 		int c;
 		do {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/OpenAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/OpenAction.java
index 293b41e..1dc7c9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/OpenAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/OpenAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,17 +20,16 @@ import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
 
 /**
- * This action opens a tool (internal editor or view or an external
- * application) for the element at the given location.
+ * This action opens a tool (internal editor or view or an external application) for the element at
+ * the given location.
  * <p>
- * XXX:	This does not work for properties files coming from a JAR due to
- * 		missing J Core functionality. For details see:
- * 		https://bugs.eclipse.org/bugs/show_bug.cgi?id=22376
+ * XXX: This does not work for properties files coming from a JAR due to missing J Core
+ * functionality. For details see http://bugs.eclipse.org/22376
  * </p>
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- *
+ * 
  * @since 3.1
  */
 public class OpenAction extends SelectionDispatchAction {
@@ -57,6 +56,7 @@ public class OpenAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(checkEnabled(selection));
 	}
@@ -69,6 +69,7 @@ public class OpenAction extends SelectionDispatchAction {
 		return fEditor.getEditorInput() instanceof IFileEditorInput;
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
 
 		if (!checkEnabled(selection))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionAssistant.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionAssistant.java
new file mode 100644
index 0000000..3b6a7c5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionAssistant.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.propertiesfileeditor;
+
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.jface.text.DefaultInformationControl;
+import org.eclipse.jface.text.IInformationControl;
+import org.eclipse.jface.text.IInformationControlCreator;
+import org.eclipse.jface.text.quickassist.QuickAssistAssistant;
+
+import org.eclipse.ui.IWorkbenchPreferenceConstants;
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+/**
+ * The properties file correction assistant.
+ * 
+ * @since 3.7
+ */
+public class PropertiesCorrectionAssistant extends QuickAssistAssistant {
+
+	public PropertiesCorrectionAssistant() {
+		super();
+
+		setQuickAssistProcessor(new PropertiesCorrectionProcessor());
+		enableColoredLabels(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS));
+
+		setInformationControlCreator(getInformationControlCreator());
+	}
+
+	private IInformationControlCreator getInformationControlCreator() {
+		return new IInformationControlCreator() {
+			public IInformationControl createInformationControl(Shell parent) {
+				return new DefaultInformationControl(parent, JavaPlugin.getAdditionalInfoAffordanceString(), null);
+			}
+		};
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionProcessor.java
new file mode 100644
index 0000000..2e3b2d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionProcessor.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jdt.internal.ui.propertiesfileeditor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.BadPartitioningException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentExtension3;
+import org.eclipse.jface.text.ITypedRegion;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext;
+import org.eclipse.jface.text.source.Annotation;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.TextInvocationContext;
+
+import org.eclipse.ui.texteditor.spelling.SpellingCorrectionProcessor;
+
+import org.eclipse.ltk.core.refactoring.NullChange;
+
+import org.eclipse.jdt.ui.text.java.CompletionProposalComparator;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.text.correction.CorrectionMessages;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.ChangeCorrectionProposal;
+
+/**
+ * The properties file correction processor. Clients can set pre-computed proposals, and if set the
+ * processor returns only these pre-computed proposals.
+ * 
+ * @since 3.7
+ */
+public class PropertiesCorrectionProcessor implements org.eclipse.jface.text.quickassist.IQuickAssistProcessor {
+
+	private String fErrorMessage;
+
+	private SpellingCorrectionProcessor fSpellingCorrectionProcessor;
+
+	private ICompletionProposal[] fPreComputedProposals;
+
+	public PropertiesCorrectionProcessor() {
+		fSpellingCorrectionProcessor= new SpellingCorrectionProcessor();
+	}
+
+	/*
+	 * @see IContentAssistProcessor#computeCompletionProposals(ITextViewer, int)
+	 */
+	public ICompletionProposal[] computeQuickAssistProposals(IQuickAssistInvocationContext quickAssistContext) {
+
+		ISourceViewer viewer= quickAssistContext.getSourceViewer();
+		int length= viewer != null ? viewer.getSelectedRange().y : 0;
+		TextInvocationContext context= new TextInvocationContext(viewer, quickAssistContext.getOffset(), length);
+
+		fErrorMessage= null;
+		ICompletionProposal[] res= null;
+		if (fPreComputedProposals != null) {
+			res= fPreComputedProposals;
+		} else {
+			try {
+				List<ICompletionProposal> proposals= new ArrayList<ICompletionProposal>();
+				ICompletionProposal[] spellingProposals= fSpellingCorrectionProcessor.computeQuickAssistProposals(quickAssistContext);
+				if (spellingProposals.length > 1) {
+					for (int i= 0; i < spellingProposals.length; i++) {
+						proposals.add(spellingProposals[i]);
+					}
+				}
+				ICompletionProposal[] assists= collectAssists(context);
+				if (assists != null) {
+					for (int i= 0; i < assists.length; i++) {
+						proposals.add(assists[i]);
+					}
+				}
+				res= proposals.toArray(new ICompletionProposal[proposals.size()]);
+			} catch (BadLocationException e) {
+				fErrorMessage= CorrectionMessages.JavaCorrectionProcessor_error_quickassist_message;
+				JavaPlugin.log(e);
+			} catch (BadPartitioningException e) {
+				fErrorMessage= CorrectionMessages.JavaCorrectionProcessor_error_quickassist_message;
+				JavaPlugin.log(e);
+			}
+		}
+
+		if (res == null || res.length == 0) {
+			return new ICompletionProposal[] { new ChangeCorrectionProposal(CorrectionMessages.NoCorrectionProposal_description, new NullChange(""), 0, null) }; //$NON-NLS-1$
+		}
+		if (res.length > 1) {
+			Arrays.sort(res, new CompletionProposalComparator());
+		}
+		fPreComputedProposals= null;
+		return res;
+	}
+
+	private static ICompletionProposal[] collectAssists(IQuickAssistInvocationContext invocationContext) throws BadLocationException, BadPartitioningException {
+		ISourceViewer sourceViewer= invocationContext.getSourceViewer();
+		IDocument document= sourceViewer.getDocument();
+		Point selectedRange= sourceViewer.getSelectedRange();
+		int selectionOffset= selectedRange.x;
+		int selectionLength= selectedRange.y;
+		int proposalOffset;
+		int proposalLength;
+		String text;
+		if (selectionLength == 0) {
+			if (selectionOffset != document.getLength()) {
+				char ch= document.getChar(selectionOffset);
+				if (ch == '=' || ch == ':') { //see PropertiesFilePartitionScanner()
+					return null;
+				}
+			}
+
+			ITypedRegion partition= null;
+			if (document instanceof IDocumentExtension3)
+				partition= ((IDocumentExtension3)document).getPartition(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, invocationContext.getOffset(), false);
+			if (partition == null)
+				return null;
+
+			String type= partition.getType();
+			if (!(type.equals(IPropertiesFilePartitions.PROPERTY_VALUE) || type.equals(IDocument.DEFAULT_CONTENT_TYPE))) {
+				return null;
+			}
+			proposalOffset= partition.getOffset();
+			proposalLength= partition.getLength();
+			text= document.get(proposalOffset, proposalLength);
+
+			if (type.equals(IPropertiesFilePartitions.PROPERTY_VALUE)) {
+				text= text.substring(1); //see PropertiesFilePartitionScanner()
+				proposalOffset++;
+				proposalLength--;
+			}
+		} else {
+			proposalOffset= selectionOffset;
+			proposalLength= selectionLength;
+			text= document.get(proposalOffset, proposalLength);
+		}
+
+		if (PropertiesFileEscapes.containsUnescapedBackslash(text))
+			return new ICompletionProposal[] { new EscapeBackslashCompletionProposal(PropertiesFileEscapes.escape(text, false, true, false), proposalOffset, proposalLength, true) };
+		if (PropertiesFileEscapes.containsEscapedBackslashes(text))
+			return new ICompletionProposal[] { new EscapeBackslashCompletionProposal(PropertiesFileEscapes.unescapeBackslashes(text), proposalOffset, proposalLength, false) };
+		return null;
+	}
+
+	/*
+	 * @see IContentAssistProcessor#getErrorMessage()
+	 */
+	public String getErrorMessage() {
+		return fErrorMessage;
+	}
+
+	/*
+	 * @see org.eclipse.jface.text.quickassist.IQuickAssistProcessor#canFix(org.eclipse.jface.text.source.Annotation)
+	 */
+	public boolean canFix(Annotation annotation) {
+		return fSpellingCorrectionProcessor.canFix(annotation);
+	}
+
+	/*
+	 * @see org.eclipse.jface.text.quickassist.IQuickAssistProcessor#canAssist(org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext)
+	 */
+	public boolean canAssist(IQuickAssistInvocationContext invocationContext) {
+		try {
+			return collectAssists(invocationContext) != null;
+		} catch (BadLocationException e) {
+			JavaPlugin.log(e);
+		} catch (BadPartitioningException e) {
+			JavaPlugin.log(e);
+		}
+		return false;
+	}
+
+	/**
+	 * Sets the pre-computed proposals.
+	 * 
+	 * @param preComputedProposals the pre-computed proposals
+	 */
+	public void setProposals(ICompletionProposal[] preComputedProposals) {
+		fPreComputedProposals= preComputedProposals;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileAutoEditStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileAutoEditStrategy.java
new file mode 100644
index 0000000..edafe4b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileAutoEditStrategy.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.propertiesfileeditor;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.custom.VerifyKeyListener;
+import org.eclipse.swt.events.VerifyEvent;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.core.resources.IFile;
+
+import org.eclipse.jface.text.DocumentCommand;
+import org.eclipse.jface.text.DocumentEvent;
+import org.eclipse.jface.text.IAutoEditStrategy;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentListener;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
+import org.eclipse.jface.text.quickassist.IQuickAssistProcessor;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.ISourceViewerExtension3;
+
+import org.eclipse.ui.progress.WorkbenchJob;
+
+/**
+ * Auto edit strategy that escapes a character if it cannot be encoded in the .properties file's
+ * encoding.
+ * 
+ * <p>
+ * A quick assist to escape backslashes is offered iff the pasted text is not perfectly correct for
+ * the .properties file, i.e. if the text contains
+ * <ul>
+ * <li>an invalid escape sequence as defined by
+ * {@link PropertiesFileEscapes#containsInvalidEscapeSequence(String)}</li>
+ * <li>a character which requires Unicode escapes</li>
+ * </ul>
+ * </p>
+ * 
+ * @since 3.7
+ */
+public class PropertiesFileAutoEditStrategy implements IAutoEditStrategy {
+
+	private final IFile fFile;
+
+	private String fCharsetName;
+
+	private CharsetEncoder fCharsetEncoder;
+
+	private final ISourceViewer fSourceViewer;
+
+	public PropertiesFileAutoEditStrategy(IFile file, ISourceViewer sourceViewer) {
+		fFile= file;
+		fSourceViewer= sourceViewer;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.text.IAutoEditStrategy#customizeDocumentCommand(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.DocumentCommand)
+	 */
+	public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
+		showProposal(escape(command), document);
+	}
+
+	private ICompletionProposal escape(DocumentCommand command) {
+		try {
+			String charsetName= fFile.getCharset();
+			if (!charsetName.equals(fCharsetName)) {
+				fCharsetName= charsetName;
+				fCharsetEncoder= Charset.forName(fCharsetName).newEncoder();
+			}
+		} catch (CoreException e) {
+			return null;
+		}
+
+		String text= command.text;
+		boolean escapeUnicodeChars= !fCharsetEncoder.canEncode(text);
+		boolean escapeBackslash= (text.length() > 1) && ((escapeUnicodeChars && PropertiesFileEscapes.containsUnescapedBackslash(text)) || PropertiesFileEscapes.containsInvalidEscapeSequence(text));
+
+		if (!escapeUnicodeChars && !escapeBackslash)
+			return null;
+
+		command.text= PropertiesFileEscapes.escape(text, false, false, escapeUnicodeChars);
+		if (escapeBackslash) {
+			String proposalText= PropertiesFileEscapes.escape(text, false, true, escapeUnicodeChars);
+			return new EscapeBackslashCompletionProposal(proposalText, command.offset, command.text.length(), true);
+		}
+		return null;
+	}
+
+	private void showProposal(final ICompletionProposal proposal, final IDocument document) {
+		if (proposal != null && fSourceViewer instanceof ISourceViewerExtension3) {
+			final WorkbenchJob job= new WorkbenchJob(PropertiesFileEditorMessages.PropertiesFileAutoEditStrategy_showQuickAssist) {
+				@Override
+				public IStatus runInUIThread(IProgressMonitor monitor) {
+					IQuickAssistAssistant assistant= ((ISourceViewerExtension3)fSourceViewer).getQuickAssistAssistant();
+					IQuickAssistProcessor processor= assistant.getQuickAssistProcessor();
+					if (processor instanceof PropertiesCorrectionProcessor) {
+						((PropertiesCorrectionProcessor)processor).setProposals(new ICompletionProposal[] { proposal });
+						assistant.showPossibleQuickAssists();
+					}
+					return Status.OK_STATUS;
+				}
+			};
+			job.setSystem(true);
+			job.schedule(500);
+			final StyledText textWidget= fSourceViewer.getTextWidget();
+			textWidget.addVerifyKeyListener(new VerifyKeyListener() {
+				public void verifyKey(VerifyEvent event) {
+					job.cancel();
+					textWidget.removeVerifyKeyListener(this);
+				}
+			});
+
+			final IDocumentListener documentListener= new IDocumentListener() {
+				private boolean pasteComplete= false;
+				public void documentAboutToBeChanged(DocumentEvent event) {
+				}
+				public void documentChanged(DocumentEvent event) {
+					if (pasteComplete) {
+						job.cancel();
+						document.removeDocumentListener(this);
+					}
+					pasteComplete= true;
+				}
+			};
+			document.addDocumentListener(documentListener);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileDocumentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileDocumentProvider.java
index dd7ba73..4327507 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileDocumentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileDocumentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,32 @@ public class PropertiesFileDocumentProvider extends TextFileDocumentProvider {
 
 	private static final IContentType JAVA_PROPERTIES_FILE_CONTENT_TYPE= Platform.getContentTypeManager().getContentType("org.eclipse.jdt.core.javaProperties"); //$NON-NLS-1$
 
+	/**
+	 * Checks whether the passed file editor input defines a Java properties file.
+	 * 
+	 * @param element the file editor input
+	 * @return <code>true</code> if element defines a Java properties file, <code>false</code>
+	 *         otherwise
+	 * @throws CoreException
+	 * 
+	 * @since 3.7
+	 */
+	public static boolean isJavaPropertiesFile(Object element) throws CoreException {
+		if (JAVA_PROPERTIES_FILE_CONTENT_TYPE == null || !(element instanceof IFileEditorInput))
+			return false;
+
+		IFileEditorInput input= (IFileEditorInput)element;
+
+		IFile file= input.getFile();
+		if (file == null || !file.isAccessible())
+			return false;
+
+		IContentDescription description= file.getContentDescription();
+		if (description == null || description.getContentType() == null || !description.getContentType().isKindOf(JAVA_PROPERTIES_FILE_CONTENT_TYPE))
+			return false;
+
+		return true;
+	}
 
 	/**
 	 * Creates a new properties file document provider and
@@ -52,18 +78,9 @@ public class PropertiesFileDocumentProvider extends TextFileDocumentProvider {
 	/*
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createFileInfo(java.lang.Object)
 	 */
+	@Override
 	protected FileInfo createFileInfo(Object element) throws CoreException {
-		if (JAVA_PROPERTIES_FILE_CONTENT_TYPE == null || !(element instanceof IFileEditorInput))
-			return null;
-
-		IFileEditorInput input= (IFileEditorInput)element;
-
-		IFile file= input.getFile();
-		if (file == null || !file.isAccessible())
-			return null;
-
-		IContentDescription description= file.getContentDescription();
-		if (description == null || description.getContentType() == null || !description.getContentType().isKindOf(JAVA_PROPERTIES_FILE_CONTENT_TYPE))
+		if (!isJavaPropertiesFile(element))
 			return null;
 
 		return super.createFileInfo(element);
@@ -73,6 +90,7 @@ public class PropertiesFileDocumentProvider extends TextFileDocumentProvider {
 	 * @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createSaveOperation(java.lang.Object, org.eclipse.jface.text.IDocument, boolean)
 	 * @since 3.1
 	 */
+	@Override
 	protected DocumentProviderOperation createSaveOperation(final Object element, final IDocument document, final boolean overwrite) throws CoreException {
 		if (getFileInfo(element) == null)
 			return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditor.java
index c5d32f8..d634648 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 
 import org.eclipse.jface.text.source.ISourceViewer;
@@ -24,8 +25,10 @@ import org.eclipse.jface.text.source.SourceViewerConfiguration;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.IShowInTargetList;
 
+import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
 import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 
+import org.eclipse.ui.editors.text.EditorsUI;
 import org.eclipse.ui.editors.text.ITextEditorHelpContextIds;
 import org.eclipse.ui.editors.text.TextEditor;
 
@@ -50,11 +53,18 @@ public class PropertiesFileEditor extends TextEditor {
 	/** Open action. */
 	protected OpenAction fOpenAction;
 
+	/**
+	 * Property change listener on Editors UI store.
+	 * @since 3.7
+	 */
+	private IPropertyChangeListener fPropertyChangeListener;
+
 
 	/*
 	 * @see org.eclipse.ui.editors.text.TextEditor#initializeEditor()
 	 * @since 3.4
 	 */
+	@Override
 	protected void initializeEditor() {
 		setDocumentProvider(JavaPlugin.getDefault().getPropertiesFileDocumentProvider());
 		IPreferenceStore store= JavaPlugin.getDefault().getCombinedPreferenceStore();
@@ -66,12 +76,22 @@ public class PropertiesFileEditor extends TextEditor {
 		setHelpContextId(ITextEditorHelpContextIds.TEXT_EDITOR);
 		configureInsertMode(SMART_INSERT, false);
 		setInsertMode(INSERT);
+
+		// Need to listen on Editors UI preference store because JDT disables this functionality in its preferences.
+		fPropertyChangeListener= new IPropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SPACES_FOR_TABS.equals(event.getProperty()))
+					handlePreferenceStoreChanged(event);
+			}
+		};
+		EditorsUI.getPreferenceStore().addPropertyChangeListener(fPropertyChangeListener);
 	}
 
 	/*
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#initializeKeyBindingScopes()
 	 * @since 3.4
 	 */
+	@Override
 	protected void initializeKeyBindingScopes() {
 		setKeyBindingScopes(new String[] { "org.eclipse.jdt.ui.propertiesEditorScope" });  //$NON-NLS-1$
 	}
@@ -79,6 +99,7 @@ public class PropertiesFileEditor extends TextEditor {
 	/*
 	 * @see org.eclipse.ui.editors.text.TextEditor#createActions()
 	 */
+	@Override
 	protected void createActions() {
 		super.createActions();
 
@@ -111,6 +132,7 @@ public class PropertiesFileEditor extends TextEditor {
 	/*
 	 * @see AbstractTextEditor#handlePreferenceStoreChanged(PropertyChangeEvent)
 	 */
+	@Override
 	protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
 
 		try {
@@ -129,6 +151,7 @@ public class PropertiesFileEditor extends TextEditor {
 	/*
 	 * @see AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent)
 	 */
+	@Override
 	protected boolean affectsTextPresentation(PropertyChangeEvent event) {
 		return ((PropertiesFileSourceViewerConfiguration)getSourceViewerConfiguration()).affectsTextPresentation(event) || super.affectsTextPresentation(event);
 	}
@@ -137,6 +160,7 @@ public class PropertiesFileEditor extends TextEditor {
 	/*
 	 * @see org.eclipse.ui.editors.text.TextEditor#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class adapter) {
 		if (adapter == IShowInTargetList.class) {
 			return new IShowInTargetList() {
@@ -153,6 +177,7 @@ public class PropertiesFileEditor extends TextEditor {
 	 * @see org.eclipse.ui.part.WorkbenchPart#getOrientation()
 	 * @since 3.2
 	 */
+	@Override
 	public int getOrientation() {
 		return SWT.LEFT_TO_RIGHT;	// properties editors are always left to right by default (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=110986)
 	}
@@ -160,6 +185,7 @@ public class PropertiesFileEditor extends TextEditor {
 	/*
 	 * @see org.eclipse.ui.texteditor.StatusTextEditor#updateStatusField(java.lang.String)
 	 */
+	@Override
 	protected void updateStatusField(String category) {
 		super.updateStatusField(category);
 		if (getEditorSite() != null) {
@@ -179,6 +205,7 @@ public class PropertiesFileEditor extends TextEditor {
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#collectContextMenuPreferencePages()
 	 * @since 3.1
 	 */
+	@Override
 	protected String[] collectContextMenuPreferencePages() {
 		String[] ids= super.collectContextMenuPreferencePages();
 		String[] more= new String[ids.length + 1];
@@ -191,9 +218,30 @@ public class PropertiesFileEditor extends TextEditor {
 	 * @see org.eclipse.ui.editors.text.TextEditor#editorContextMenuAboutToShow(org.eclipse.jface.action.IMenuManager)
 	 * @since 3.4
 	 */
+	@Override
 	protected void editorContextMenuAboutToShow(IMenuManager menu) {
 		super.editorContextMenuAboutToShow(menu);
 
 		addAction(menu, ITextEditorActionConstants.GROUP_EDIT, IJavaEditorActionDefinitionIds.TOGGLE_COMMENT);
 	}
+
+	/*
+	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#isTabsToSpacesConversionEnabled()
+	 * @since 3.7
+	 */
+	@Override
+	protected boolean isTabsToSpacesConversionEnabled() {
+		// Can't use our own preference store because JDT disables this functionality in its preferences.
+		return EditorsUI.getPreferenceStore().getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SPACES_FOR_TABS);
+	}
+
+	/*
+	 * @see org.eclipse.ui.editors.text.TextEditor#dispose()
+	 * @since 3.7
+	 */
+	@Override
+	public void dispose() {
+		EditorsUI.getPreferenceStore().removePropertyChangeListener(fPropertyChangeListener);
+		super.dispose();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorActionContributor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorActionContributor.java
index 8e10ca0..2899b46 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorActionContributor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorActionContributor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorPart;
 
 import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 
 import org.eclipse.ui.editors.text.TextEditorActionContributor;
 
@@ -33,6 +34,7 @@ public class PropertiesFileEditorActionContributor extends TextEditorActionContr
 	/*
 	 * @see EditorActionBarContributor#setActiveEditor(IEditorPart)
 	 */
+	@Override
 	public void setActiveEditor(IEditorPart part) {
 		super.setActiveEditor(part);
 
@@ -46,11 +48,13 @@ public class PropertiesFileEditorActionContributor extends TextEditorActionContr
 			textEditor= (ITextEditor)part;
 
 		actionBars.setGlobalActionHandler(JdtActionConstants.OPEN, getAction(textEditor, JdtActionConstants.OPEN));
+		actionBars.setGlobalActionHandler("org.eclipse.jdt.internal.ui.actions.OpenHyperlink", getAction(textEditor, ITextEditorActionConstants.OPEN_HYPERLINK)); //$NON-NLS-1$
 	}
 
 	/*
 	 * @see IEditorActionBarContributor#dispose()
 	 */
+	@Override
 	public void dispose() {
 		setActiveEditor(null);
 		super.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.java
index 8801e2b..91d1693 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ final class PropertiesFileEditorMessages extends NLS {
 		// Do not instantiate
 	}
 
+	public static String EscapeBackslashCompletionProposal_escapeBackslashes;
 	public static String OpenAction_label;
 	public static String OpenAction_tooltip;
 	public static String OpenAction_error_title;
@@ -56,6 +57,10 @@ final class PropertiesFileEditorMessages extends NLS {
 	public static String OpenAction_SelectionDialog_elementLabel;
 	public static String OpenAction_SelectionDialog_elementLabelWithMatchCount;
 
+	public static String PropertiesFileAutoEditStrategy_showQuickAssist;
+	public static String PropertiesFileHover_MalformedEncoding;
+	public static String EscapeBackslashCompletionProposal_unescapeBackslashes;
+
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, PropertiesFileEditorMessages.class);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.properties
index 04aaa07..ab9a0ec 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 
+EscapeBackslashCompletionProposal_escapeBackslashes=Escape backslashes
 OpenAction_label= &Open
 OpenAction_tooltip= Open an Editor on the Selected Properties Key
 
@@ -30,3 +31,6 @@ OpenAction_SelectionDialog_elementLabel= Line {0} - {1}
 # The first argument is the file name and the second is number of matches in that file
 OpenAction_SelectionDialog_elementLabelWithMatchCount= {0} ({1} matches)
 
+PropertiesFileAutoEditStrategy_showQuickAssist=Show Quick Assist
+PropertiesFileHover_MalformedEncoding=Malformed \\uxxxx encoding: {0}
+EscapeBackslashCompletionProposal_unescapeBackslashes=Unescape backslashes
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEscapes.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEscapes.java
new file mode 100644
index 0000000..484b224
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileEscapes.java
@@ -0,0 +1,336 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.propertiesfileeditor;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+
+import org.eclipse.jdt.internal.corext.util.Messages;
+
+import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
+
+/**
+ * Helper class to convert between Java chars and the escaped form that must be used in .properties
+ * files.
+ * 
+ * @since 3.7
+ */
+public class PropertiesFileEscapes {
+
+	private static final char[] HEX_DIGITS= { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+	private static char toHex(int halfByte) {
+		return HEX_DIGITS[(halfByte & 0xF)];
+	}
+
+	/**
+	 * Returns the decimal value of the Hex digit, or -1 if the digit is not a valid Hex digit.
+	 * 
+	 * @param digit the Hex digit
+	 * @return the decimal value of digit, or -1 if digit is not a valid Hex digit.
+	 */
+	private static int getHexDigitValue(char digit) {
+		switch (digit) {
+			case '0':
+			case '1':
+			case '2':
+			case '3':
+			case '4':
+			case '5':
+			case '6':
+			case '7':
+			case '8':
+			case '9':
+				return digit - '0';
+			case 'a':
+			case 'b':
+			case 'c':
+			case 'd':
+			case 'e':
+			case 'f':
+				return 10 + digit - 'a';
+			case 'A':
+			case 'B':
+			case 'C':
+			case 'D':
+			case 'E':
+			case 'F':
+				return 10 + digit - 'A';
+			default:
+				return -1;
+		}
+	}
+
+	/**
+	 * Convert a Java char to the escaped form that must be used in .properties files.
+	 * 
+	 * @param c the Java char
+	 * @return escaped string
+	 */
+	public static String escape(char c) {
+		return escape(c, true, true, true);
+	}
+
+	/**
+	 * Convert characters in a Java string to the escaped form that must be used in .properties
+	 * files.
+	 * 
+	 * @param s the Java string
+	 * @param escapeWhitespaceChars if <code>true</code>, escape whitespace characters
+	 * @param escapeBackslash if <code>true</code>, escape backslash characters
+	 * @param escapeUnicodeChars if <code>true</code>, escape unicode characters
+	 * @return escaped string
+	 */
+	public static String escape(String s, boolean escapeWhitespaceChars, boolean escapeBackslash, boolean escapeUnicodeChars) {
+		StringBuffer sb= new StringBuffer(s.length());
+		int length= s.length();
+		for (int i= 0; i < length; i++) {
+			char c= s.charAt(i);
+			sb.append(escape(c, escapeWhitespaceChars, escapeBackslash, escapeUnicodeChars));
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Convert a Java char to the escaped form that must be used in .properties files.
+	 * 
+	 * @param c the Java char
+	 * @param escapeWhitespaceChars if <code>true</code>, escape whitespace characters
+	 * @param escapeBackslash if <code>true</code>, escape backslash characters
+	 * @param escapeUnicodeChars if <code>true</code>, escape unicode characters
+	 * @return escaped string
+	 */
+	public static String escape(char c, boolean escapeWhitespaceChars, boolean escapeBackslash, boolean escapeUnicodeChars) {
+		switch (c) {
+			case '\t':
+				return escapeWhitespaceChars ? "\\t" : "\t"; //$NON-NLS-1$//$NON-NLS-2$
+			case '\n':
+				return escapeWhitespaceChars ? "\\n" : "\n"; //$NON-NLS-1$//$NON-NLS-2$
+			case '\f':
+				return escapeWhitespaceChars ? "\\f" : "\r"; //$NON-NLS-1$//$NON-NLS-2$
+			case '\r':
+				return escapeWhitespaceChars ? "\\r" : "\r"; //$NON-NLS-1$//$NON-NLS-2$
+			case '\\':
+				return escapeBackslash ? "\\\\" : "\\"; //$NON-NLS-1$ //$NON-NLS-2$
+			default:
+				if (escapeUnicodeChars && ((c < 0x0020) || (c > 0x007e && c <= 0x00a0) || (c > 0x00ff))) {
+					//NBSP (0x00a0) is escaped to differentiate from normal space character
+					return new StringBuffer()
+							.append('\\')
+							.append('u')
+							.append(toHex((c >> 12) & 0xF))
+							.append(toHex((c >> 8) & 0xF))
+							.append(toHex((c >> 4) & 0xF))
+							.append(toHex(c & 0xF)).toString();
+
+				} else
+					return String.valueOf(c);
+		}
+	}
+
+	/**
+	 * Convert an escaped string to a string composed of Java characters.
+	 * 
+	 * @param s the escaped string
+	 * @return string composed of Java characters
+	 * @throws CoreException if the escaped string has a malformed \\uxxx sequence
+	 */
+	public static String unescape(String s) throws CoreException {
+		boolean isValidEscapedString= true;
+		if (s == null)
+			return null;
+
+		char aChar;
+		int len= s.length();
+		StringBuffer outBuffer= new StringBuffer(len);
+
+		for (int x= 0; x < len;) {
+			aChar= s.charAt(x++);
+			if (aChar == '\\') {
+				if (x > len - 1) {
+					return outBuffer.toString(); // silently ignore the \
+				}
+				aChar= s.charAt(x++);
+				if (aChar == 'u') {
+					// Read the xxxx
+					int value= 0;
+					if (x > len - 4) {
+						String exceptionMessage= Messages.format(PropertiesFileEditorMessages.PropertiesFileHover_MalformedEncoding, outBuffer.toString() + s.substring(x - 2));
+						throw new CoreException(new StatusInfo(IStatus.WARNING, exceptionMessage));
+					}
+					StringBuffer buf= new StringBuffer("\\u"); //$NON-NLS-1$
+					int digit= 0;
+					for (int i= 0; i < 4; i++) {
+						aChar= s.charAt(x++);
+						digit= getHexDigitValue(aChar);
+						if (digit == -1) {
+							isValidEscapedString= false;
+							x--;
+							break;
+						}
+						value= (value << 4) + digit;
+						buf.append(aChar);
+					}
+					outBuffer.append(digit == -1 ? buf.toString() : String.valueOf((char)value));
+				} else if (aChar == 't') {
+					outBuffer.append('\t');
+				} else if (aChar == 'n') {
+					outBuffer.append('\n');
+				} else if (aChar == 'f') {
+					outBuffer.append('\f');
+				} else if (aChar == 'r') {
+					outBuffer.append('\r');
+				} else {
+					outBuffer.append(aChar); // silently ignore the \
+				}
+			} else
+				outBuffer.append(aChar);
+		}
+		if (isValidEscapedString) {
+			return outBuffer.toString();
+		} else {
+			String exceptionMessage= Messages.format(PropertiesFileEditorMessages.PropertiesFileHover_MalformedEncoding, outBuffer.toString());
+			throw new CoreException(new StatusInfo(IStatus.WARNING, exceptionMessage));
+		}
+	}
+
+	/**
+	 * Unescape backslash characters in a string.
+	 * 
+	 * @param s the escaped string
+	 * @return string with backslash characters unescaped
+	 */
+	public static String unescapeBackslashes(String s) {
+		if (s == null)
+			return null;
+	
+		char c;
+		int length= s.length();
+		StringBuffer outBuffer= new StringBuffer(length);
+	
+		for (int i= 0; i < length;) {
+			c= s.charAt(i++);
+			if (c == '\\') {
+				c= s.charAt(i++);
+			}
+			outBuffer.append(c);
+		}
+	
+		return outBuffer.toString();
+	}
+
+	/**
+	 * Tests if the given text contains any invalid escape sequence.
+	 * 
+	 * @param text the text
+	 * @return <code>true</code> if text contains an invalid escape sequence, <code>false</code>
+	 *         otherwise
+	 */
+	public static boolean containsInvalidEscapeSequence(String text) {
+		try {
+			//check for invalid unicode escapes
+			unescape(text);
+		} catch (CoreException e) {
+			return true;
+		}
+	
+		int length= text.length();
+		for (int i= 0; i < length; i++) {
+			char c= text.charAt(i);
+			if (c == '\\') {
+				if (i < length - 1) {
+					char nextC= text.charAt(i + 1);
+					switch (nextC) {
+						case 't':
+						case 'n':
+						case 'f':
+						case 'r':
+						case 'u':
+						case '\n':
+						case '\r':
+						case '=':
+						case ':':
+							break;
+						case '\\':
+							i++;
+							break;
+						default:
+							return true;
+					}
+				} else {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Tests if the given text contains an unescaped backslash character.
+	 * 
+	 * @param text the text
+	 * @return <code>true</code> if text contains an unescaped backslash character,
+	 *         <code>false</code> otherwise
+	 */
+	public static boolean containsUnescapedBackslash(String text) {
+		int length= text.length();
+		for (int i= 0; i < length; i++) {
+			char c= text.charAt(i);
+			if (c == '\\') {
+				if (i < length - 1) {
+					char nextC= text.charAt(i + 1);
+					switch (nextC) {
+						case '\\':
+							i++;
+							break;
+						default:
+							return true;
+					}
+				} else {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Tests if the given text contains only escaped backslash characters and no unescaped backslash
+	 * character.
+	 * 
+	 * @param text the text
+	 * @return <code>true</code> if text contains only escaped backslash characters,
+	 *         <code>false</code> otherwise
+	 */
+	public static boolean containsEscapedBackslashes(String text) {
+		boolean result= false;
+		int length= text.length();
+		for (int i= 0; i < length; i++) {
+			char c= text.charAt(i);
+			if (c == '\\') {
+				if (i < length - 1) {
+					char nextC= text.charAt(i + 1);
+					switch (nextC) {
+						case '\\':
+							i++;
+							result= true;
+							break;
+						default:
+							return false;
+					}
+				} else {
+					return false;
+				}
+			}
+		}
+		return result;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileHover.java
new file mode 100644
index 0000000..30ba37e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileHover.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.propertiesfileeditor;
+
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jface.text.AbstractReusableInformationControlCreator;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.BadPartitioningException;
+import org.eclipse.jface.text.DefaultInformationControl;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentExtension3;
+import org.eclipse.jface.text.IInformationControl;
+import org.eclipse.jface.text.IInformationControlCreator;
+import org.eclipse.jface.text.IInformationControlExtension2;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextHoverExtension;
+import org.eclipse.jface.text.ITextHoverExtension2;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.ITypedRegion;
+
+import org.eclipse.ui.editors.text.EditorsUI;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+/**
+ * Provides the default text hover info if it exists, else provides the native string as hover info.
+ * 
+ * @since 3.7
+ */
+public class PropertiesFileHover implements ITextHover, ITextHoverExtension, ITextHoverExtension2 {
+
+	/**
+	 * The offset for which the hover request has been issued.
+	 */
+	private int fOffset;
+
+	/**
+	 * The default text hover.
+	 */
+	private final ITextHover fTextHover;
+
+	/**
+	 * The hover control creator.
+	 */
+	private HoverControlCreator fHoverControlCreator;
+
+	public PropertiesFileHover(ITextHover textHover) {
+		fTextHover= textHover;
+	}
+
+	/**
+	 * Hover control creator.
+	 * 
+	 * @since 3.7
+	 */
+	private static final class HoverControlCreator extends AbstractReusableInformationControlCreator {
+
+		/*
+		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
+		 */
+		@Override
+		public IInformationControl doCreateInformationControl(Shell parent) {
+			return new PropertiesFileHoverControl(parent, EditorsUI.getTooltipAffordanceString());
+		}
+	}
+
+	/**
+	 * The Properties File hover control.
+	 * 
+	 * @since 3.7
+	 */
+	static class PropertiesFileHoverControl extends DefaultInformationControl implements IInformationControlExtension2 {
+
+		/**
+		 * Creates an Properties File hover control with the given shell as parent.
+		 * 
+		 * @param parent the parent shell
+		 * @param tooltipAffordanceString the text to be used in the status field or
+		 *            <code>null</code> to hide the status field
+		 */
+		public PropertiesFileHoverControl(Shell parent, String tooltipAffordanceString) {
+			super(parent, tooltipAffordanceString, null);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.jface.text.IInformationControlExtension2#setInput(java.lang.Object)
+		 */
+		public void setInput(Object input) {
+			setInformation((String)input);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.text.ITextHoverExtension2#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
+	 */
+	public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
+		return getHoverInfo(textViewer, hoverRegion);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()
+	 */
+	public IInformationControlCreator getHoverControlCreator() {
+		if (fHoverControlCreator == null)
+			fHoverControlCreator= new HoverControlCreator();
+		return fHoverControlCreator;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * @deprecated see {@link ITextHover#getHoverInfo(ITextViewer, IRegion)}
+	 */
+	public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
+		String hoverInfo= fTextHover.getHoverInfo(textViewer, hoverRegion);
+		if (hoverInfo != null && hoverInfo.length() > 0) {
+			return hoverInfo;
+		}
+
+		String unescapedString= null;
+		try {
+			ITypedRegion partition= null;
+			IDocument document= textViewer.getDocument();
+			if (document instanceof IDocumentExtension3)
+				partition= ((IDocumentExtension3)document).getPartition(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, fOffset, false);
+			if (partition == null)
+				return null;
+
+			String type= partition.getType();
+			if (!(type.equals(IPropertiesFilePartitions.PROPERTY_VALUE) || type.equals(IDocument.DEFAULT_CONTENT_TYPE))) {
+				return null;
+			}
+			String escapedString= document.get(partition.getOffset(), partition.getLength());
+			if (type.equals(IPropertiesFilePartitions.PROPERTY_VALUE)) {
+				escapedString= escapedString.substring(1); //see PropertiesFilePartitionScanner()
+			}
+
+			try {
+				unescapedString= PropertiesFileEscapes.unescape(escapedString);
+			} catch (CoreException e) {
+				return e.getStatus().getMessage();
+			}
+			if (escapedString.equals(unescapedString))
+				return null;
+		} catch (BadLocationException e) {
+			JavaPlugin.log(e);
+		} catch (BadPartitioningException e) {
+			JavaPlugin.log(e);
+		}
+		return unescapedString;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.text.ITextHover#getHoverRegion(org.eclipse.jface.text.ITextViewer, int)
+	 */
+	public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
+		fOffset= offset;
+		return fTextHover.getHoverRegion(textViewer, offset);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFilePartitionScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFilePartitionScanner.java
index d5ed435..b91f02d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFilePartitionScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFilePartitionScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,7 +94,7 @@ public class PropertiesFilePartitionScanner extends RuleBasedPartitionScanner im
 		IToken propertyValue= new Token(PROPERTY_VALUE);
 		IToken key= new Token(IDocument.DEFAULT_CONTENT_TYPE);
 
-		List rules= new ArrayList();
+		List<IPredicateRule> rules= new ArrayList<IPredicateRule>();
 
 		// Add rule for leading white space.
 		rules.add(new LeadingWhitespacePredicateRule(key, "\t")); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileSourceViewerConfiguration.java
index 7c24326..1917156 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,10 +11,13 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.propertiesfileeditor;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import org.eclipse.swt.widgets.Shell;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.content.IContentType;
 
@@ -22,12 +25,15 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.PropertyChangeEvent;
 
 import org.eclipse.jface.text.DefaultInformationControl;
+import org.eclipse.jface.text.IAutoEditStrategy;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IInformationControl;
 import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.ITextDoubleClickStrategy;
+import org.eclipse.jface.text.ITextHover;
 import org.eclipse.jface.text.presentation.IPresentationReconciler;
 import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
 import org.eclipse.jface.text.reconciler.IReconciler;
 import org.eclipse.jface.text.reconciler.IReconcilingStrategy;
 import org.eclipse.jface.text.reconciler.MonoReconciler;
@@ -37,6 +43,8 @@ import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.IAnnotationHover;
 import org.eclipse.jface.text.source.ISourceViewer;
 
+import org.eclipse.ui.IFileEditorInput;
+
 import org.eclipse.ui.texteditor.ITextEditor;
 import org.eclipse.ui.texteditor.spelling.SpellingReconcileStrategy;
 import org.eclipse.ui.texteditor.spelling.SpellingService;
@@ -168,6 +176,7 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see SourceViewerConfiguration#getPresentationReconciler(ISourceViewer)
 	 */
+	@Override
 	public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
 
 		PresentationReconciler reconciler= new JavaPresentationReconciler();
@@ -191,6 +200,7 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see SourceViewerConfiguration#getDoubleClickStrategy(ISourceViewer, String)
 	 */
+	@Override
 	public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType) {
 		if (IDocument.DEFAULT_CONTENT_TYPE.equals(contentType))
 			return new PartitionDoubleClickSelector(getConfiguredDocumentPartitioning(sourceViewer), 0, 0, 0);
@@ -205,6 +215,7 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see SourceViewerConfiguration#getConfiguredContentTypes(ISourceViewer)
 	 */
+	@Override
 	public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
 		int length= IPropertiesFilePartitions.PARTITIONS.length;
 		String[] contentTypes= new String[length + 1];
@@ -218,6 +229,7 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getConfiguredDocumentPartitioning(org.eclipse.jface.text.source.ISourceViewer)
 	 */
+	@Override
 	public String getConfiguredDocumentPartitioning(ISourceViewer sourceViewer) {
 		if (fDocumentPartitioning != null)
 			return fDocumentPartitioning;
@@ -257,8 +269,9 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getHyperlinkDetectorTargets(org.eclipse.jface.text.source.ISourceViewer)
 	 * @since 3.3
 	 */
-	protected Map getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
-		Map targets= super.getHyperlinkDetectorTargets(sourceViewer);
+	@Override
+	protected Map<String, ITextEditor> getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
+		Map<String, ITextEditor> targets= super.getHyperlinkDetectorTargets(sourceViewer);
 		targets.put("org.eclipse.jdt.ui.PropertiesFileEditor", fTextEditor); //$NON-NLS-1$
 		return targets;
 	}
@@ -266,8 +279,10 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see SourceViewerConfiguration#getAnnotationHover(ISourceViewer)
 	 */
+	@Override
 	public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
 		return new HTMLAnnotationHover(false) {
+			@Override
 			protected boolean isIncluded(Annotation annotation) {
 				return isShowInVerticalRuler(annotation);
 			}
@@ -277,8 +292,10 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see SourceViewerConfiguration#getOverviewRulerAnnotationHover(ISourceViewer)
 	 */
+	@Override
 	public IAnnotationHover getOverviewRulerAnnotationHover(ISourceViewer sourceViewer) {
 		return new HTMLAnnotationHover(true) {
+			@Override
 			protected boolean isIncluded(Annotation annotation) {
 				return isShowInOverviewRuler(annotation);
 			}
@@ -288,6 +305,7 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see SourceViewerConfiguration#getInformationControlCreator(ISourceViewer)
 	 */
+	@Override
 	public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
 		return new IInformationControlCreator() {
 			public IInformationControl createInformationControl(Shell parent) {
@@ -299,11 +317,13 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	/*
 	 * @see org.eclipse.ui.editors.text.TextSourceViewerConfiguration#getReconciler(org.eclipse.jface.text.source.ISourceViewer)
 	 */
+	@Override
 	public IReconciler getReconciler(ISourceViewer sourceViewer) {
 		if (!EditorsUI.getPreferenceStore().getBoolean(SpellingService.PREFERENCE_SPELLING_ENABLED))
 			return null;
 
 		IReconcilingStrategy strategy= new SpellingReconcileStrategy(sourceViewer, EditorsUI.getSpellingService()) {
+			@Override
 			protected IContentType getContentType() {
 				return PROPERTIES_CONTENT_TYPE;
 			}
@@ -318,7 +338,61 @@ public class PropertiesFileSourceViewerConfiguration extends TextSourceViewerCon
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getDefaultPrefixes(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
 	 * @since 3.4
 	 */
+	@Override
 	public String[] getDefaultPrefixes(ISourceViewer sourceViewer, String contentType) {
 		return new String[] {"#", ""}; //$NON-NLS-1$ //$NON-NLS-2$
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
+	 * @since 3.7
+	 */
+	@Override
+	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
+		IAutoEditStrategy[] autoEditStrategies= super.getAutoEditStrategies(sourceViewer, contentType);
+
+		if (fTextEditor == null)
+			return autoEditStrategies;
+
+		try {
+			if (!PropertiesFileDocumentProvider.isJavaPropertiesFile(fTextEditor.getEditorInput())) {
+				return autoEditStrategies;
+			}
+			List<IAutoEditStrategy> stratergies= new ArrayList<IAutoEditStrategy>();
+			for (int i= 0; i < autoEditStrategies.length; i++) {
+				stratergies.add(autoEditStrategies[i]);
+			}
+			stratergies.add(new PropertiesFileAutoEditStrategy(((IFileEditorInput)fTextEditor.getEditorInput()).getFile(), sourceViewer));
+			return stratergies.toArray(new IAutoEditStrategy[stratergies.size()]);
+		} catch (CoreException e) {
+			JavaPlugin.log(e);
+			return autoEditStrategies;
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getTextHover(org.eclipse.jface.text.source.ISourceViewer, java.lang.String, int)
+	 * @since 3.7
+	 */
+	@Override
+	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType, int stateMask) {
+		return new PropertiesFileHover(super.getTextHover(sourceViewer, contentType));
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.editors.text.TextSourceViewerConfiguration#getQuickAssistAssistant(org.eclipse.jface.text.source.ISourceViewer)
+	 * @since 3.7
+	 */
+	@Override
+	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
+		if (getEditor() != null) {
+			PropertiesCorrectionAssistant assistant= new PropertiesCorrectionAssistant();
+			assistant.setRestoreCompletionProposalSize(JavaPlugin.getDefault().getDialogSettingsSection("quick_assist_proposal_size")); //$NON-NLS-1$
+			return assistant;
+		}
+		return null;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlink.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlink.java
index 5f171b5..659bdeb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlink.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlink.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,10 +65,8 @@ import org.eclipse.search.core.text.TextSearchMatchAccess;
 import org.eclipse.search.core.text.TextSearchRequestor;
 import org.eclipse.search.core.text.TextSearchScope;
 
-import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
 import org.eclipse.jdt.core.search.SearchMatch;
 import org.eclipse.jdt.core.search.SearchPattern;
@@ -89,17 +87,16 @@ import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 /**
  * Properties key hyperlink.
  * <p>
- * XXX:	This does not work for properties files coming from a JAR due to
- * 		missing J Core functionality. For details see:
- * 		https://bugs.eclipse.org/bugs/show_bug.cgi?id=22376
+ * XXX: This does not work for properties files coming from a JAR due to missing J Core
+ * functionality. For details see http://bugs.eclipse.org/22376
  * </p>
- *
+ * 
  * @since 3.1
  */
 public class PropertyKeyHyperlink implements IHyperlink {
 
 
-	private static class KeyReference extends PlatformObject implements IWorkbenchAdapter, Comparable {
+	private static class KeyReference extends PlatformObject implements IWorkbenchAdapter, Comparable<KeyReference> {
 
 		private static final Collator fgCollator= Collator.getInstance();
 
@@ -118,6 +115,7 @@ public class PropertyKeyHyperlink implements IHyperlink {
 		/*
 		 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
 		 */
+		@Override
 		public Object getAdapter(Class adapter) {
 			if (adapter == IWorkbenchAdapter.class)
 				return this;
@@ -173,8 +171,7 @@ public class PropertyKeyHyperlink implements IHyperlink {
 			return null;
 		}
 
-		public int compareTo(Object o) {
-			KeyReference otherRef= (KeyReference)o;
+		public int compareTo(KeyReference otherRef) {
 			String thisPath= storage.getFullPath().toString();
 			String otherPath= otherRef.storage.getFullPath().toString();
 			int result= fgCollator.compare(thisPath, otherPath);
@@ -188,14 +185,15 @@ public class PropertyKeyHyperlink implements IHyperlink {
 
 	private static class ResultCollector extends TextSearchRequestor {
 
-		private List fResult;
+		private List<KeyReference> fResult;
 		private boolean fIsKeyDoubleQuoted;
 
-		public ResultCollector(List result, boolean isKeyDoubleQuoted) {
+		public ResultCollector(List<KeyReference> result, boolean isKeyDoubleQuoted) {
 			fResult= result;
 			fIsKeyDoubleQuoted= isKeyDoubleQuoted;
 		}
 
+		@Override
 		public boolean acceptPatternMatch(TextSearchMatchAccess matchAccess) throws CoreException {
 			int start= matchAccess.getMatchOffset();
 			int length= matchAccess.getMatchLength();
@@ -298,6 +296,7 @@ public class PropertyKeyHyperlink implements IHyperlink {
 		Arrays.sort(keyReferences);
 		final int length= keyReferences.length;
 		ILabelProvider labelProvider= new WorkbenchLabelProvider() {
+			@Override
 			public String decorateText(String input, Object element) {
 				KeyReference keyRef= (KeyReference)element;
 				IStorage storage= keyRef.storage;
@@ -321,7 +320,7 @@ public class PropertyKeyHyperlink implements IHyperlink {
 
 		TwoPaneElementSelector dialog= new TwoPaneElementSelector(fShell, labelProvider, new WorkbenchLabelProvider());
 		dialog.setLowerListLabel(PropertiesFileEditorMessages.OpenAction_SelectionDialog_details);
-		dialog.setLowerListComparator(new Comparator() {
+		dialog.setLowerListComparator(new Comparator<Object>() {
 			public int compare(Object o1, Object o2) {
 				return 0; // don't sort
 			}
@@ -412,65 +411,59 @@ public class PropertyKeyHyperlink implements IHyperlink {
 	 * @param key the properties key
 	 * @return the references or <code>null</code> if the search has been canceled by the user
 	 */
-	private KeyReference[] search(final IResource scope, String key) {
+	private KeyReference[] search(final IResource scope, final String key) {
 		if (key == null)
 			return new KeyReference[0];
 
-		final List result= new ArrayList(5);
-		final String searchString;
-
-		// XXX: This is a hack to improve the accuracy of matches, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=81140
-		final boolean useDoubleQuotedKey= useDoubleQuotedKey();
-		if (useDoubleQuotedKey) {
-			StringBuffer buf= new StringBuffer("\""); //$NON-NLS-1$
-			buf.append(fPropertiesKey);
-			buf.append('"');
-			searchString= buf.toString();
-		} else
-			searchString= fPropertiesKey;
-
+		final List<KeyReference> result= new ArrayList<KeyReference>(5);
 		try {
 			fEditor.getEditorSite().getWorkbenchWindow().getWorkbench().getProgressService().busyCursorWhile(
 				new IRunnableWithProgress() {
-					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-						if (monitor == null)
-							monitor= new NullProgressMonitor();
-
-						monitor.beginTask("", 5); //$NON-NLS-1$
-						try {
-							ResultCollector collector= new ResultCollector(result, useDoubleQuotedKey);
-							TextSearchEngine engine= TextSearchEngine.create();
-							Pattern searchPattern= PatternConstructor.createPattern(searchString, true, false);
-							engine.search(createScope(scope), collector, searchPattern, new SubProgressMonitor(monitor, 4));
-
-							if (result.size() == 0 && useDoubleQuotedKey) {
-								//Try without, maybe an eclipse style NLS string
-								IJavaElement element= JavaCore.create(scope);
-								if (element == null)
-									return;
-
-								int includeMask = IJavaSearchScope.SOURCES | IJavaSearchScope.APPLICATION_LIBRARIES | IJavaSearchScope.REFERENCED_PROJECTS;
-								IJavaSearchScope javaSearchScope= SearchEngine.createJavaSearchScope(new IJavaElement[] { element }, includeMask);
-
-								SearchPattern pattern= SearchPattern.createPattern(fPropertiesKey, IJavaSearchConstants.FIELD, IJavaSearchConstants.REFERENCES, SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE);
-								if (pattern == null)
-									return;
-								try {
-									new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(), javaSearchScope, new SearchRequestor() {
-										public void acceptSearchMatch(SearchMatch match) throws CoreException {
-											result.add(new KeyReference((IStorage)match.getResource(), match.getOffset(), match.getLength()));
-										}
-									}, new SubProgressMonitor(monitor, 1));
-								} catch (CoreException e) {
-									throw new InvocationTargetException(e);
+						public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+							if (monitor == null)
+								monitor= new NullProgressMonitor();
+
+							monitor.beginTask("", 5); //$NON-NLS-1$
+							try {
+								// XXX: This is a hack to improve the accuracy of matches, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=81140
+								boolean useDoubleQuotedKey= useDoubleQuotedKey();
+								if (useDoubleQuotedKey) {
+									SearchPattern pattern= SearchPattern.createPattern(key, IJavaSearchConstants.FIELD, IJavaSearchConstants.REFERENCES, SearchPattern.R_PATTERN_MATCH
+											| SearchPattern.R_CASE_SENSITIVE);
+									if (pattern == null)
+										return;
+									try {
+										new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(), SearchEngine.createWorkspaceScope(), new SearchRequestor() {
+											@Override
+											public void acceptSearchMatch(SearchMatch match) throws CoreException {
+												result.add(new KeyReference((IStorage)match.getResource(), match.getOffset(), match.getLength()));
+											}
+										}, new SubProgressMonitor(monitor, 1));
+									} catch (CoreException e) {
+										throw new InvocationTargetException(e);
+									}
 								}
-							} else {
-								monitor.worked(1);
+								if (result.size() == 0) {
+									//maybe not an eclipse style NLS string
+									String searchString;
+									if (useDoubleQuotedKey) {
+										StringBuffer buf= new StringBuffer("\""); //$NON-NLS-1$
+										buf.append(key);
+										buf.append('"');
+										searchString= buf.toString();
+									} else
+										searchString= key;
+									ResultCollector collector= new ResultCollector(result, useDoubleQuotedKey);
+									TextSearchEngine engine= TextSearchEngine.create();
+									Pattern searchPattern= PatternConstructor.createPattern(searchString, true, false);
+									engine.search(createScope(scope), collector, searchPattern, new SubProgressMonitor(monitor, 4));
+								} else {
+									monitor.worked(1);
+								}
+							} finally {
+								monitor.done();
 							}
-						} finally {
-							monitor.done();
 						}
-					}
 				}
 			);
 		} catch (InvocationTargetException ex) {
@@ -480,11 +473,11 @@ public class PropertyKeyHyperlink implements IHyperlink {
 			return null; // canceled
 		}
 
-		return (KeyReference[])result.toArray(new KeyReference[result.size()]);
+		return result.toArray(new KeyReference[result.size()]);
 	}
 
 	private static TextSearchScope createScope(IResource scope) {
-		ArrayList fileNamePatternStrings= new ArrayList();
+		ArrayList<String> fileNamePatternStrings= new ArrayList<String>();
 
 		// XXX: Should be configurable via preference, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=81117
 		String[] javaExtensions= JavaCore.getJavaLikeExtensions();
@@ -493,7 +486,7 @@ public class PropertyKeyHyperlink implements IHyperlink {
 		fileNamePatternStrings.add("*.xml"); //$NON-NLS-1$
 		fileNamePatternStrings.add("*.ini"); //$NON-NLS-1$
 
-		String[] allPatternStrings= (String[]) fileNamePatternStrings.toArray(new String[fileNamePatternStrings.size()]);
+		String[] allPatternStrings= fileNamePatternStrings.toArray(new String[fileNamePatternStrings.size()]);
 		Pattern fileNamePattern= PatternConstructor.createPattern(allPatternStrings, false, false);
 
 		return TextSearchScope.newSearchScope(new IResource[] { scope }, fileNamePattern, false);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java
index f0b4d98..58627bf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,8 @@ import java.io.IOException;
 import java.text.StringCharacterIterator;
 import java.util.Properties;
 
+import org.eclipse.swt.widgets.Display;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.BadPartitioningException;
 import org.eclipse.jface.text.IDocument;
@@ -31,17 +33,17 @@ import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IStorageEditorInput;
 
+import org.eclipse.ui.texteditor.IEditorStatusLine;
 import org.eclipse.ui.texteditor.ITextEditor;
 
 
 /**
  * Properties key hyperlink detector.
  * <p>
- * XXX:	This does not work for properties files coming from a JAR due to
- * 		missing J Core functionality. For details see:
- * 		https://bugs.eclipse.org/bugs/show_bug.cgi?id=22376
+ * XXX: This does not work for properties files coming from a JAR due to missing J Core
+ * functionality. For details see http://bugs.eclipse.org/22376
  * </p>
- *
+ * 
  * @since 3.1
  */
 public class PropertyKeyHyperlinkDetector extends AbstractHyperlinkDetector {
@@ -93,7 +95,7 @@ public class PropertyKeyHyperlinkDetector extends AbstractHyperlinkDetector {
 				return null;
 			}
 
-			return new PropertyKeyHyperlink[] {new PropertyKeyHyperlink(new Region(partition.getOffset() + delta, realKey.length()), realKey, textEditor)};
+			return new PropertyKeyHyperlink[] { new PropertyKeyHyperlink(new Region(partition.getOffset() + delta, realKey.length()), realKey, textEditor) };
 
 		} catch (BadLocationException ex) {
 			return null;
@@ -101,6 +103,9 @@ public class PropertyKeyHyperlinkDetector extends AbstractHyperlinkDetector {
 			return null;
 		} catch (IOException ex) {
 			return null;
+		} catch (IllegalArgumentException ex) {
+			showErrorInStatusLine(ex.getLocalizedMessage(), textEditor);
+			return null;
 		}
 	}
 
@@ -134,4 +139,20 @@ public class PropertyKeyHyperlinkDetector extends AbstractHyperlinkDetector {
 		 // XXX: Must be changed to IStorageEditorInput once support for JARs is available (see class Javadoc for details)
 		return textEditor.getEditorInput() instanceof IFileEditorInput;
 	}
+
+	private void showErrorInStatusLine(final String message, ITextEditor textEditor) {
+		Display display= textEditor.getEditorSite().getShell().getDisplay();
+		display.beep();
+		final IEditorStatusLine statusLine= (IEditorStatusLine)textEditor.getAdapter(IEditorStatusLine.class);
+		if (statusLine != null) {
+			display.asyncExec(new Runnable() {
+				/*
+				 * @see java.lang.Runnable#run()
+				 */
+				public void run() {
+					statusLine.setMessage(true, message, null);
+				}
+			});
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java
index c8898e6..20e6b54 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,11 @@ import java.util.List;
 import org.eclipse.jface.preference.IPreferenceStore;
 
 import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.BadPartitioningException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentExtension3;
+import org.eclipse.jface.text.ITypedRegion;
+import org.eclipse.jface.text.rules.IRule;
 import org.eclipse.jface.text.rules.IToken;
 import org.eclipse.jface.text.rules.IWordDetector;
 import org.eclipse.jface.text.rules.WhitespaceRule;
@@ -47,14 +51,21 @@ public final class PropertyValueScanner extends AbstractJavaScanner {
 				return false;
 
 			try {
-				// check whether it is the first '='
-				IRegion lineInfo= fDocument.getLineInformationOfOffset(fOffset);
-				int offset= lineInfo.getOffset();
-				String line= fDocument.get(offset, lineInfo.getLength());
-				int i= line.indexOf(c);
-				return i != -1 && i + lineInfo.getOffset() + 1 == fOffset;
+				// check whether it is the first '=' in the logical line
+
+				int i=fOffset-2;
+				while (Character.isWhitespace(fDocument.getChar(i))) {
+					i--;
+				}
+				
+				ITypedRegion partition= null;
+				if (fDocument instanceof IDocumentExtension3)
+					partition= ((IDocumentExtension3)fDocument).getPartition(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, i, false);
+				return partition != null && IDocument.DEFAULT_CONTENT_TYPE.equals(partition.getType());
 			} catch (BadLocationException ex) {
 				return false;
+			} catch (BadPartitioningException e) {
+				return false;
 			}
 		}
 
@@ -88,6 +99,7 @@ public final class PropertyValueScanner extends AbstractJavaScanner {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getTokenProperties()
 	 */
+	@Override
 	protected String[] getTokenProperties() {
 		return fgTokenProperties;
 	}
@@ -95,9 +107,10 @@ public final class PropertyValueScanner extends AbstractJavaScanner {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#createRules()
 	 */
-	protected List createRules() {
+	@Override
+	protected List<IRule> createRules() {
 		setDefaultReturnToken(getToken(PreferenceConstants.PROPERTIES_FILE_COLORING_VALUE));
-		List rules= new ArrayList();
+		List<IRule> rules= new ArrayList<IRule>();
 
 		// Add rule for arguments.
 		IToken token= getToken(PreferenceConstants.PROPERTIES_FILE_COLORING_ARGUMENT);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/AbstractJavaSearchResult.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/AbstractJavaSearchResult.java
index 495b7df..4b59602 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/AbstractJavaSearchResult.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/AbstractJavaSearchResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,7 +53,7 @@ public abstract class AbstractJavaSearchResult extends AbstractTextSearchResult
 
 	private Match[] computeContainedMatches(IAdaptable adaptable) {
 		IJavaElement javaElement= (IJavaElement) adaptable.getAdapter(IJavaElement.class);
-		Set matches= new HashSet();
+		Set<Match> matches= new HashSet<Match>();
 		if (javaElement != null) {
 			collectMatches(matches, javaElement);
 		}
@@ -62,12 +62,12 @@ public abstract class AbstractJavaSearchResult extends AbstractTextSearchResult
 			collectMatches(matches, file);
 		}
 		if (!matches.isEmpty()) {
-			return (Match[]) matches.toArray(new Match[matches.size()]);
+			return matches.toArray(new Match[matches.size()]);
 		}
 		return NO_MATCHES;
 	}
 
-	private void collectMatches(Set matches, IFile element) {
+	private void collectMatches(Set<Match> matches, IFile element) {
 		Match[] m= getMatches(element);
 		if (m.length != 0) {
 			for (int i= 0; i < m.length; i++) {
@@ -76,7 +76,7 @@ public abstract class AbstractJavaSearchResult extends AbstractTextSearchResult
 		}
 	}
 
-	private void collectMatches(Set matches, IJavaElement element) {
+	private void collectMatches(Set<Match> matches, IJavaElement element) {
 		Match[] m= getMatches(element);
 		if (m.length != 0) {
 			for (int i= 0; i < m.length; i++) {
@@ -130,10 +130,12 @@ public abstract class AbstractJavaSearchResult extends AbstractTextSearchResult
 		return false;
 	}
 
+	@Override
 	public IFileMatchAdapter getFileMatchAdapter() {
 		return this;
 	}
 
+	@Override
 	public IEditorMatchAdapter getEditorMatchAdapter() {
 		return this;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/BreakContinueTargetFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/BreakContinueTargetFinder.java
index c382d49..04f677e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/BreakContinueTargetFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/BreakContinueTargetFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,9 +58,9 @@ public class BreakContinueTargetFinder extends ASTVisitor implements IOccurrence
 	private String fDescription;
 	private CompilationUnit fASTRoot;
 
-	private static final Class[] STOPPERS=        {MethodDeclaration.class, Initializer.class};
-	private static final Class[] BREAKTARGETS=    {ForStatement.class, EnhancedForStatement.class, WhileStatement.class, DoStatement.class, SwitchStatement.class};
-	private static final Class[] CONTINUETARGETS= {ForStatement.class, EnhancedForStatement.class, WhileStatement.class, DoStatement.class};
+	private static final Class<?>[] STOPPERS=        {MethodDeclaration.class, Initializer.class};
+	private static final Class<?>[] BREAKTARGETS=    {ForStatement.class, EnhancedForStatement.class, WhileStatement.class, DoStatement.class, SwitchStatement.class};
+	private static final Class<?>[] CONTINUETARGETS= {ForStatement.class, EnhancedForStatement.class, WhileStatement.class, DoStatement.class};
 	private static final int BRACE_LENGTH= 1;
 
 	/*
@@ -129,7 +129,7 @@ public class BreakContinueTargetFinder extends ASTVisitor implements IOccurrence
 		if (!isEnclosingStatement(targetNode))
 			return null;
 
-		List list= new ArrayList();
+		List<OccurrenceLocation> list= new ArrayList<OccurrenceLocation>();
 		OccurrenceLocation location= getLocationForFirstToken(targetNode);
 		if (location != null) {
 			list.add(location);
@@ -141,7 +141,7 @@ public class BreakContinueTargetFinder extends ASTVisitor implements IOccurrence
 			}
 		}
 		if (!list.isEmpty()) {
-			return (OccurrenceLocation[]) list.toArray(new OccurrenceLocation[list.size()]);
+			return list.toArray(new OccurrenceLocation[list.size()]);
 		}
 		return null;
 	}
@@ -183,10 +183,12 @@ public class BreakContinueTargetFinder extends ASTVisitor implements IOccurrence
 			LabeledStatement ls= (LabeledStatement)node;
 			return ! areEqualLabels(ls.getLabel(), fLabel);
 		}
-		if (fLabel == null &&  fIsBreak && isAnyInstanceOf(BREAKTARGETS, node))
-			return false;
-		if (fLabel == null && !fIsBreak && isAnyInstanceOf(CONTINUETARGETS, node))
-			return false;
+		if (fLabel == null) {
+			if (isAnyInstanceOf(fIsBreak ? BREAKTARGETS : CONTINUETARGETS, node))
+				return node.getParent() instanceof LabeledStatement; // for behavior consistency of break targets: see bug 339176
+			if (node instanceof LabeledStatement)
+				return false;
+		}
 		return true;
 	}
 
@@ -194,7 +196,7 @@ public class BreakContinueTargetFinder extends ASTVisitor implements IOccurrence
 		return labelSelected.getIdentifier().equals(labelToMatch.getIdentifier());
 	}
 
-	private static boolean isAnyInstanceOf(Class[] continueTargets, ASTNode node) {
+	private static boolean isAnyInstanceOf(Class<?>[] continueTargets, ASTNode node) {
 		for (int i= 0; i < continueTargets.length; i++) {
 			if (continueTargets[i].isInstance(node))
 				return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ExceptionOccurrencesFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ExceptionOccurrencesFinder.java
index f95ebfb..c6fdfb8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ExceptionOccurrencesFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ExceptionOccurrencesFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,11 +57,11 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 
 	private ITypeBinding fException;
 	private ASTNode fStart;
-	private List fResult;
+	private List<OccurrenceLocation> fResult;
 	private String fDescription;
 
 	public ExceptionOccurrencesFinder() {
-		fResult= new ArrayList();
+		fResult= new ArrayList<OccurrenceLocation>();
 	}
 
 	public String initialize(CompilationUnit root, int offset, int length) {
@@ -112,8 +112,8 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 
 	private boolean methodThrowsException(MethodDeclaration method, Name exception) {
 		ASTMatcher matcher = new ASTMatcher();
-		for (Iterator iter = method.thrownExceptions().iterator(); iter.hasNext();) {
-			Name thrown = (Name)iter.next();
+		for (Iterator<Name> iter = method.thrownExceptions().iterator(); iter.hasNext();) {
+			Name thrown = iter.next();
 			if (exception.subtreeMatch(matcher, thrown))
 				return true;
 		}
@@ -132,7 +132,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		if (fResult.isEmpty())
 			return null;
 
-		return (OccurrenceLocation[]) fResult.toArray(new OccurrenceLocation[fResult.size()]);
+		return fResult.toArray(new OccurrenceLocation[fResult.size()]);
 	}
 
 	public int getSearchKind() {
@@ -163,10 +163,12 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return SearchMessages.ExceptionOccurrencesFinder_label_singular;
 	}
 
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		return false;
 	}
 
+	@Override
 	public boolean visit(CastExpression node) {
 		if ("java.lang.ClassCastException".equals(fException.getQualifiedName())) { //$NON-NLS-1$
 			Type type= node.getType();
@@ -175,6 +177,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		if (matches(node.resolveConstructorBinding())) {
 			Type type= node.getType();
@@ -183,6 +186,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		if (matches(node.resolveConstructorBinding())) {
 			// mark 'this'
@@ -191,6 +195,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		if (matches(node.resolveMethodBinding())) {
 			SimpleName name= node.getName();
@@ -199,6 +204,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		if (matches(node.resolveConstructorBinding())) {
 			// mark 'super'
@@ -207,6 +213,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		if (matches(node.resolveMethodBinding())) {
 			SimpleName name= node.getName();
@@ -215,6 +222,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(ThrowStatement node) {
 		if (matches(node.getExpression().resolveTypeBinding())) {
 			// mark 'throw'
@@ -223,6 +231,7 @@ public class ExceptionOccurrencesFinder extends ASTVisitor implements IOccurrenc
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(TypeDeclarationStatement node) {
 		// don't dive into local type declarations.
 		return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/GroupAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/GroupAction.java
index 7e78ea3..6ed1837 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/GroupAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/GroupAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class GroupAction extends Action {
 		fGrouping= grouping;
 	}
 
+	@Override
 	public void run() {
 		fPage.setGrouping(fGrouping);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/IOccurrencesFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/IOccurrencesFinder.java
index d387aec..f489629 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/IOccurrencesFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/IOccurrencesFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ public interface IOccurrencesFinder {
 			return fDescription;
 		}
 
+		@Override
 		public String toString() {
 			return "[" + fOffset + " / " + fLength + "] " + fDescription; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ImplementOccurrencesFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ImplementOccurrencesFinder.java
index 35931e0..b9fda99 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ImplementOccurrencesFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/ImplementOccurrencesFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public class ImplementOccurrencesFinder implements IOccurrencesFinder {
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.MethodDeclaration)
 		 */
+		@Override
 		public boolean visit(MethodDeclaration node) {
 			IMethodBinding binding= node.resolveBinding();
 			if (binding != null && !Modifier.isStatic(binding.getModifiers())) {
@@ -67,6 +68,7 @@ public class ImplementOccurrencesFinder implements IOccurrencesFinder {
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.AnonymousClassDeclaration)
 		 */
+		@Override
 		public boolean visit(AnonymousClassDeclaration node) {
 			// don't dive into anonymous type declarations.
 			return false;
@@ -75,6 +77,7 @@ public class ImplementOccurrencesFinder implements IOccurrencesFinder {
 		/*
 		 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.TypeDeclarationStatement)
 		 */
+		@Override
 		public boolean visit(TypeDeclarationStatement node) {
 			// don't dive into local type declarations.
 			return false;
@@ -83,13 +86,13 @@ public class ImplementOccurrencesFinder implements IOccurrencesFinder {
 
 	private CompilationUnit fASTRoot;
 	private ASTNode fStart;
-	private List fResult;
+	private List<OccurrenceLocation> fResult;
 	private ASTNode fSelectedNode;
 	private ITypeBinding fSelectedType;
 	private String fDescription;
 
 	public ImplementOccurrencesFinder() {
-		fResult= new ArrayList();
+		fResult= new ArrayList<OccurrenceLocation>();
 	}
 
 	public String initialize(CompilationUnit root, int offset, int length) {
@@ -129,7 +132,7 @@ public class ImplementOccurrencesFinder implements IOccurrencesFinder {
 		performSearch();
 		if (fResult.isEmpty())
 			return null;
-		return (OccurrenceLocation[]) fResult.toArray(new OccurrenceLocation[fResult.size()]);
+		return fResult.toArray(new OccurrenceLocation[fResult.size()]);
 	}
 
 	public int getSearchKind() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaElementLine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaElementLine.java
index aed1aef..4e28779 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaElementLine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaElementLine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,7 +67,9 @@ public class JavaElementLine {
 			} else {
 				buf.append(ch);
 			}
-			ch= buffer.getChar(++i);
+			i++;
+			if (i < length)
+				ch= buffer.getChar(i);
 		}
 		fLineContents= buf.toString();
 		fLineNumber= lineNumber;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java
index f240b05..3897898 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ abstract class JavaMatchFilter extends MatchFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.search.ui.text.MatchFilter#filters(org.eclipse.search.ui.text.Match)
 	 */
+	@Override
 	public boolean filters(Match match) {
 		if (match instanceof JavaElementMatch) {
 			return filters((JavaElementMatch) match);
@@ -91,14 +92,14 @@ abstract class JavaMatchFilter extends MatchFilter {
 
 	private static JavaMatchFilter[] decodeFiltersString(String encodedString) {
 		StringTokenizer tokenizer= new StringTokenizer(encodedString, String.valueOf(';'));
-		HashSet result= new HashSet();
+		HashSet<JavaMatchFilter> result= new HashSet<JavaMatchFilter>();
 		while (tokenizer.hasMoreTokens()) {
 			JavaMatchFilter curr= findMatchFilter(tokenizer.nextToken());
 			if (curr != null) {
 				result.add(curr);
 			}
 		}
-		return (JavaMatchFilter[]) result.toArray(new JavaMatchFilter[result.size()]);
+		return result.toArray(new JavaMatchFilter[result.size()]);
 	}
 
 	private static final JavaMatchFilter POTENTIAL_FILTER= new PotentialFilter();
@@ -140,14 +141,14 @@ abstract class JavaMatchFilter extends MatchFilter {
 	}
 
 	public static JavaMatchFilter[] allFilters(JavaSearchQuery query) {
-		ArrayList res= new ArrayList();
+		ArrayList<JavaMatchFilter> res= new ArrayList<JavaMatchFilter>();
 		for (int i= 0; i < ALL_FILTERS.length; i++) {
 			JavaMatchFilter curr= ALL_FILTERS[i];
 			if (curr.isApplicable(query)) {
 				res.add(curr);
 			}
 		}
-		return (JavaMatchFilter[]) res.toArray(new JavaMatchFilter[res.size()]);
+		return res.toArray(new JavaMatchFilter[res.size()]);
 	}
 
 	private static JavaMatchFilter findMatchFilter(String id) {
@@ -161,48 +162,59 @@ abstract class JavaMatchFilter extends MatchFilter {
 }
 
 class PotentialFilter extends JavaMatchFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		return match.getAccuracy() == SearchMatch.A_INACCURATE;
 	}
 
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_PotentialFilter_name;
 	}
 
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_PotentialFilter_actionLabel;
 	}
 
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_PotentialFilter_description;
 	}
 
+	@Override
 	public boolean isApplicable(JavaSearchQuery query) {
 		return true;
 	}
 
+	@Override
 	public String getID() {
 		return "filter_potential"; //$NON-NLS-1$
 	}
 }
 
 class ImportFilter extends JavaMatchFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		return match.getElement() instanceof IImportDeclaration;
 	}
 
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_ImportFilter_name;
 	}
 
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_ImportFilter_actionLabel;
 	}
 
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_ImportFilter_description;
 	}
 
+	@Override
 	public boolean isApplicable(JavaSearchQuery query) {
 		QuerySpecification spec= query.getSpecification();
 		if (spec instanceof ElementQuerySpecification) {
@@ -223,12 +235,14 @@ class ImportFilter extends JavaMatchFilter {
 		return false;
 	}
 
+	@Override
 	public String getID() {
 		return "filter_imports"; //$NON-NLS-1$
 	}
 }
 
 abstract class VariableFilter extends JavaMatchFilter {
+	@Override
 	public boolean isApplicable(JavaSearchQuery query) {
 		QuerySpecification spec= query.getSpecification();
 		if (spec instanceof ElementQuerySpecification) {
@@ -245,80 +259,101 @@ abstract class VariableFilter extends JavaMatchFilter {
 }
 
 class WriteFilter extends VariableFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		return match.isWriteAccess() && !match.isReadAccess();
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_WriteFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_WriteFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_WriteFilter_description;
 	}
+	@Override
 	public String getID() {
 		return "filter_writes"; //$NON-NLS-1$
 	}
 }
 
 class ReadFilter extends VariableFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		return match.isReadAccess() && !match.isWriteAccess();
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_ReadFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_ReadFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_ReadFilter_description;
 	}
+	@Override
 	public String getID() {
 		return "filter_reads"; //$NON-NLS-1$
 	}
 }
 
 class JavadocFilter extends JavaMatchFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		return match.isJavadoc();
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_JavadocFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_JavadocFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_JavadocFilter_description;
 	}
+	@Override
 	public boolean isApplicable(JavaSearchQuery query) {
 		return true;
 	}
+	@Override
 	public String getID() {
 		return "filter_javadoc"; //$NON-NLS-1$
 	}
 }
 
 class PolymorphicFilter extends JavaMatchFilter {
-    public boolean filters(JavaElementMatch match) {
+    @Override
+	public boolean filters(JavaElementMatch match) {
         return match.isSuperInvocation();
     }
 
-    public String getName() {
+    @Override
+	public String getName() {
         return SearchMessages.MatchFilter_PolymorphicFilter_name;
     }
 
-    public String getActionLabel() {
+    @Override
+	public String getActionLabel() {
         return SearchMessages.MatchFilter_PolymorphicFilter_actionLabel;
     }
 
-    public String getDescription() {
+    @Override
+	public String getDescription() {
         return SearchMessages.MatchFilter_PolymorphicFilter_description;
     }
 
-    public boolean isApplicable(JavaSearchQuery query) {
+    @Override
+	public boolean isApplicable(JavaSearchQuery query) {
         QuerySpecification spec= query.getSpecification();
         switch (spec.getLimitTo()) {
 			case IJavaSearchConstants.REFERENCES:
@@ -334,12 +369,14 @@ class PolymorphicFilter extends JavaMatchFilter {
         return false;
     }
 
-    public String getID() {
+    @Override
+	public String getID() {
         return "filter_polymorphic"; //$NON-NLS-1$
     }
 }
 
 abstract class GenericTypeFilter extends JavaMatchFilter {
+	@Override
 	public boolean isApplicable(JavaSearchQuery query) {
 		QuerySpecification spec= query.getSpecification();
 		if (spec instanceof ElementQuerySpecification) {
@@ -362,48 +399,60 @@ abstract class GenericTypeFilter extends JavaMatchFilter {
 }
 
 class ErasureMatchFilter extends GenericTypeFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		return (match.getMatchRule() & (SearchPattern.R_FULL_MATCH | SearchPattern.R_EQUIVALENT_MATCH)) == 0;
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_ErasureFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_ErasureFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_ErasureFilter_description;
 	}
+	@Override
 	public String getID() {
 		return "filter_erasure"; //$NON-NLS-1$
 	}
 }
 
 class InexactMatchFilter extends GenericTypeFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		return (match.getMatchRule() & (SearchPattern.R_FULL_MATCH)) == 0;
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_InexactFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_InexactFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_InexactFilter_description;
 	}
+	@Override
 	public String getID() {
 		return "filter_inexact"; //$NON-NLS-1$
 	}
 }
 
 abstract class ModifierFilter extends JavaMatchFilter {
+	@Override
 	public boolean isApplicable(JavaSearchQuery query) {
 		return true;
 	}
 }
 
 class NonPublicFilter extends ModifierFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		Object element= match.getElement();
 		if (element instanceof IMember) {
@@ -415,21 +464,26 @@ class NonPublicFilter extends ModifierFilter {
 		}
 		return false;
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_NonPublicFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_NonPublicFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_NonPublicFilter_description;
 	}
+	@Override
 	public String getID() {
 		return "filter_non_public"; //$NON-NLS-1$
 	}
 }
 
 class StaticFilter extends ModifierFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		Object element= match.getElement();
 		if (element instanceof IMember) {
@@ -441,21 +495,26 @@ class StaticFilter extends ModifierFilter {
 		}
 		return false;
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_StaticFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_StaticFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_StaticFilter_description;
 	}
+	@Override
 	public String getID() {
 		return 	"filter_static"; //$NON-NLS-1$
 	}
 }
 
 class NonStaticFilter extends ModifierFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		Object element= match.getElement();
 		if (element instanceof IMember) {
@@ -467,21 +526,26 @@ class NonStaticFilter extends ModifierFilter {
 		}
 		return false;
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_NonStaticFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_NonStaticFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_NonStaticFilter_description;
 	}
+	@Override
 	public String getID() {
 		return 	"filter_non_static"; //$NON-NLS-1$
 	}
 }
 
 class DeprecatedFilter extends ModifierFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		Object element= match.getElement();
 		if (element instanceof IMember) {
@@ -493,21 +557,26 @@ class DeprecatedFilter extends ModifierFilter {
 		}
 		return false;
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_DeprecatedFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_DeprecatedFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_DeprecatedFilter_description;
 	}
+	@Override
 	public String getID() {
 		return 	"filter_deprecated"; //$NON-NLS-1$
 	}
 }
 
 class NonDeprecatedFilter extends ModifierFilter {
+	@Override
 	public boolean filters(JavaElementMatch match) {
 		Object element= match.getElement();
 		if (element instanceof IMember) {
@@ -519,15 +588,19 @@ class NonDeprecatedFilter extends ModifierFilter {
 		}
 		return false;
 	}
+	@Override
 	public String getName() {
 		return SearchMessages.MatchFilter_NonDeprecatedFilter_name;
 	}
+	@Override
 	public String getActionLabel() {
 		return SearchMessages.MatchFilter_NonDeprecatedFilter_actionLabel;
 	}
+	@Override
 	public String getDescription() {
 		return SearchMessages.MatchFilter_NonDeprecatedFilter_description;
 	}
+	@Override
 	public String getID() {
 		return 	"filter_non_deprecated"; //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchPage.java
index 57d218c..d8be0e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,8 @@ import org.eclipse.swt.widgets.Link;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 
+import org.eclipse.core.resources.IFile;
+
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.DialogPage;
 import org.eclipse.jface.dialogs.IDialogSettings;
@@ -41,6 +43,7 @@ import org.eclipse.jface.window.Window;
 
 import org.eclipse.jface.text.ITextSelection;
 
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
@@ -258,7 +261,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 	private final static String STORE_HISTORY= "HISTORY"; //$NON-NLS-1$
 	private final static String STORE_HISTORY_SIZE= "HISTORY_SIZE"; //$NON-NLS-1$
 
-	private final List fPreviousSearchPatterns;
+	private final List<SearchPatternData> fPreviousSearchPatterns;
 
 	private SearchPatternData fInitialData;
 	private IJavaElement fJavaElement;
@@ -282,7 +285,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 	 *
 	 */
 	public JavaSearchPage() {
-		fPreviousSearchPatterns= new ArrayList();
+		fPreviousSearchPatterns= new ArrayList<SearchPatternData>();
 	}
 
 
@@ -314,7 +317,13 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 				scope= factory.createWorkspaceScope(includeMask);
 				break;
 			case ISearchPageContainer.SELECTION_SCOPE:
-				IJavaElement[] javaElements= factory.getJavaElements(getContainer().getSelection());
+				IJavaElement[] javaElements= new IJavaElement[0];
+				if (getContainer().getActiveEditorInput() != null) {
+					IFile file= (IFile)getContainer().getActiveEditorInput().getAdapter(IFile.class);
+					if (file != null && file.exists())
+						javaElements= new IJavaElement[] { JavaCore.create(file) };
+				} else
+					javaElements= factory.getJavaElements(getContainer().getSelection());
 				scope= factory.createJavaSearchScope(javaElements, includeMask);
 				scopeDescription= factory.getSelectionScopeDescription(javaElements, includeMask);
 				break;
@@ -404,7 +413,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		int patternCount= fPreviousSearchPatterns.size();
 		String [] patterns= new String[patternCount];
 		for (int i= 0; i < patternCount; i++)
-			patterns[i]= ((SearchPatternData) fPreviousSearchPatterns.get(i)).getPattern();
+			patterns[i]= fPreviousSearchPatterns.get(i).getPattern();
 		return patterns;
 	}
 
@@ -436,8 +445,8 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 
 
 	private SearchPatternData findInPrevious(String pattern) {
-		for (Iterator iter= fPreviousSearchPatterns.iterator(); iter.hasNext();) {
-			SearchPatternData element= (SearchPatternData) iter.next();
+		for (Iterator<SearchPatternData> iter= fPreviousSearchPatterns.iterator(); iter.hasNext();) {
+			SearchPatternData element= iter.next();
 			if (pattern.equals(element.getPattern())) {
 				return element;
 			}
@@ -475,6 +484,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 	/*
 	 * Implements method from IDialogPage
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		if (visible && fPattern != null) {
 			if (fFirstTime) {
@@ -486,6 +496,10 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 			fPattern.setFocus();
 		}
 		updateOKStatus();
+
+		IEditorInput editorInput= getContainer().getActiveEditorInput();
+		getContainer().setActiveEditorCanProvideScopeSelection(editorInput != null && editorInput.getAdapter(IFile.class) != null);
+
 		super.setVisible(visible);
 	}
 
@@ -530,6 +544,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		//createParticipants(result);
 
 		SelectionAdapter javaElementInitializer= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				if (getSearchFor() == fInitialData.getSearchFor())
 					fJavaElement= fInitialData.getJavaElement();
@@ -590,6 +605,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		fPattern= new Combo(result, SWT.SINGLE | SWT.BORDER);
 		SWTUtil.setDefaultVisibleItemCount(fPattern);
 		fPattern.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				handlePatternSelected();
 				updateOKStatus();
@@ -611,6 +627,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		fCaseSensitive= new Button(result, SWT.CHECK);
 		fCaseSensitive.setText(SearchMessages.SearchPage_expression_caseSensitive);
 		fCaseSensitive.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fIsCaseSensitive= fCaseSensitive.getSelection();
 			}
@@ -640,6 +657,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
 	 */
+	@Override
 	public void dispose() {
 		writeConfiguration();
 		super.dispose();
@@ -662,7 +680,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		if (selectionIndex < 0 || selectionIndex >= fPreviousSearchPatterns.size())
 			return;
 
-		SearchPatternData initialData= (SearchPatternData) fPreviousSearchPatterns.get(selectionIndex);
+		SearchPatternData initialData= fPreviousSearchPatterns.get(selectionIndex);
 
 		setSearchFor(initialData.getSearchFor());
 		setLimitTo(initialData.getSearchFor(), initialData.getLimitTo());
@@ -724,7 +742,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		fMatchLocationsLink= null;
 
 
-		ArrayList buttons= new ArrayList();
+		ArrayList<Button> buttons= new ArrayList<Button>();
 		buttons.add(createButton(fLimitToGroup, SWT.RADIO, SearchMessages.SearchPage_limitTo_allOccurrences, ALL_OCCURRENCES, limitTo == ALL_OCCURRENCES));
 		buttons.add(createButton(fLimitToGroup, SWT.RADIO, SearchMessages.SearchPage_limitTo_declarations, DECLARATIONS, limitTo == DECLARATIONS));
 
@@ -746,9 +764,10 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 			buttons.add(createMethodLocationRadio(limitTo == SPECIFIC_REFERENCES));
 		}
 
-		fLimitTo= (Button[]) buttons.toArray(new Button[buttons.size()]);
+		fLimitTo= buttons.toArray(new Button[buttons.size()]);
 
 		SelectionAdapter listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				performLimitToSelectionChanged((Button) e.widget);
 			}
@@ -777,9 +796,11 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		fMatchLocationsLink= new Link(specificComposite, SWT.NONE);
 		fMatchLocationsLink.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
 		fMatchLocationsLink.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetDefaultSelected(SelectionEvent e) {
 				performConfigureMatchLocation();
 			}
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				performConfigureMatchLocation();
 			}
@@ -839,6 +860,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		};
 
 		SelectionAdapter listener= new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				updateOKStatus();
 			}
@@ -1024,7 +1046,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 
 	private SearchPatternData getDefaultInitValues() {
 		if (!fPreviousSearchPatterns.isEmpty()) {
-			return (SearchPatternData) fPreviousSearchPatterns.get(0);
+			return fPreviousSearchPatterns.get(0);
 		}
 
 		return new SearchPatternData(TYPE, REFERENCES, 0, fIsCaseSensitive, "", null, getLastIncludeMask()); //$NON-NLS-1$
@@ -1110,7 +1132,7 @@ public class JavaSearchPage extends DialogPage implements ISearchPage {
 		s.put(STORE_HISTORY_SIZE, historySize);
 		for (int i= 0; i < historySize; i++) {
 			IDialogSettings histSettings= s.addNewSection(STORE_HISTORY + i);
-			SearchPatternData data= ((SearchPatternData) fPreviousSearchPatterns.get(i));
+			SearchPatternData data= fPreviousSearchPatterns.get(i);
 			data.store(histSettings);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchQuery.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchQuery.java
index 7f2f03d..f1e4817 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchQuery.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchQuery.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -237,7 +237,7 @@ public class JavaSearchQuery implements ISearchQuery {
 		if (fPatternData instanceof ElementQuerySpecification) {
 			IJavaElement element= ((ElementQuerySpecification) fPatternData).getElement();
 			return JavaElementLabels.getElementLabel(element, JavaElementLabels.ALL_DEFAULT
-					| JavaElementLabels.ALL_FULLY_QUALIFIED | JavaElementLabels.USE_RESOLVED);
+					| JavaElementLabels.ALL_FULLY_QUALIFIED | JavaElementLabels.USE_RESOLVED | JavaElementLabels.P_COMPRESSED);
 		}
 		return BasicElementLabels.getFilePattern(((PatternQuerySpecification) fPatternData).getPattern());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResult.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResult.java
index 7fd413c..62fbf0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResult.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,11 +29,11 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 public class JavaSearchResult extends AbstractJavaSearchResult {
 
 	private final JavaSearchQuery fQuery;
-	private final Map fElementsToParticipants;
+	private final Map<Object, IMatchPresentation> fElementsToParticipants;
 
 	public JavaSearchResult(JavaSearchQuery query) {
 		fQuery= query;
-		fElementsToParticipants= new HashMap();
+		fElementsToParticipants= new HashMap<Object, IMatchPresentation>();
 		setActiveMatchFilters(JavaMatchFilter.getLastUsedFilters());
 	}
 
@@ -61,6 +61,7 @@ public class JavaSearchResult extends AbstractJavaSearchResult {
 	/* (non-Javadoc)
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchResult#setMatchFilters(org.eclipse.search.ui.text.MatchFilter[])
 	 */
+	@Override
 	public void setActiveMatchFilters(MatchFilter[] filters) {
 		super.setActiveMatchFilters(filters);
 		JavaMatchFilter.setLastUsedFilters(filters);
@@ -69,6 +70,7 @@ public class JavaSearchResult extends AbstractJavaSearchResult {
 	/* (non-Javadoc)
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchResult#getAllMatchFilters()
 	 */
+	@Override
 	public MatchFilter[] getAllMatchFilters() {
 		return JavaMatchFilter.allFilters(fQuery);
 	}
@@ -81,7 +83,7 @@ public class JavaSearchResult extends AbstractJavaSearchResult {
 	}
 
 	synchronized IMatchPresentation getSearchParticpant(Object element) {
-		return (IMatchPresentation) fElementsToParticipants.get(element);
+		return fElementsToParticipants.get(element);
 	}
 
 	boolean addMatch(Match match, IMatchPresentation participant) {
@@ -96,6 +98,7 @@ public class JavaSearchResult extends AbstractJavaSearchResult {
 		return true;
 	}
 
+	@Override
 	public void removeAll() {
 		synchronized(this) {
 			fElementsToParticipants.clear();
@@ -103,6 +106,7 @@ public class JavaSearchResult extends AbstractJavaSearchResult {
 		super.removeAll();
 	}
 
+	@Override
 	public void removeMatch(Match match) {
 		synchronized(this) {
 			if (getMatchCount(match.getElement()) == 1)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java
index 120d17c..b961391 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchResultPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,6 +97,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 			fLabelProvider= labelProvider;
 		}
 
+		@Override
 		public int category(Object element) {
 			if (element instanceof IJavaElement || element instanceof IResource)
 				return 1;
@@ -104,7 +105,8 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		}
 
 
-	    public int compare(Viewer viewer, Object e1, Object e2) {
+	    @Override
+		public int compare(Viewer viewer, Object e1, Object e2) {
 	        int cat1 = category(e1);
 	        int cat2 = category(e2);
 
@@ -185,11 +187,13 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		JavaPluginImages.setLocalImageDescriptors(fGroupTypeAction, "type_mode.gif"); //$NON-NLS-1$
 	}
 
+	@Override
 	public void setViewPart(ISearchResultViewPart part) {
 		super.setViewPart(part);
 		fActionGroup= new NewSearchViewActionGroup(part);
 	}
 
+	@Override
 	public void showMatch(Match match, int offset, int length, boolean activate) throws PartInitException {
 		IEditorPart editor= fEditorOpener.openMatch(match);
 
@@ -215,7 +219,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 	private void showWithMarker(IEditorPart editor, IFile file, int offset, int length) throws PartInitException {
 		try {
 			IMarker marker= file.createMarker(NewSearchUI.SEARCH_MARKER);
-			HashMap attributes= new HashMap(4);
+			HashMap<String, Integer> attributes= new HashMap<String, Integer>(4);
 			attributes.put(IMarker.CHAR_START, new Integer(offset));
 			attributes.put(IMarker.CHAR_END, new Integer(offset + length));
 			marker.setAttributes(attributes);
@@ -234,6 +238,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		return fCopyQualifiedNameAction;
 	}
 
+	@Override
 	protected void fillContextMenu(IMenuManager mgr) {
 		super.fillContextMenu(mgr);
 		addSortActions(mgr);
@@ -259,6 +264,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		mgr.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, sortMenu);
 	}
 
+	@Override
 	protected void fillToolbar(IToolBarManager tbm) {
 		super.fillToolbar(tbm);
 
@@ -290,16 +296,19 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 	}
 
 
+	@Override
 	public void dispose() {
 		fActionGroup.dispose();
 		super.dispose();
 	}
 
+	@Override
 	protected void elementsChanged(Object[] objects) {
 		if (fContentProvider != null)
 			fContentProvider.elementsChanged(objects);
 	}
 
+	@Override
 	protected void clear() {
 		if (fContentProvider != null)
 			fContentProvider.clear();
@@ -316,6 +325,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		viewer.addDragSupport(ops, transfers, dragAdapter);
 	}
 
+	@Override
 	protected void configureTableViewer(TableViewer viewer) {
 		viewer.setUseHashlookup(true);
 		fSortingLabelProvider= new SortingLabelProvider(this);
@@ -327,6 +337,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		addDragAdapters(viewer);
 	}
 
+	@Override
 	protected void configureTreeViewer(TreeViewer viewer) {
 		PostfixLabelProvider postfixLabelProvider= new PostfixLabelProvider(this);
 		viewer.setUseHashlookup(true);
@@ -337,10 +348,12 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		addDragAdapters(viewer);
 	}
 
+	@Override
 	protected TreeViewer createTreeViewer(Composite parent) {
 		return new ProblemTreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
 	}
 
+	@Override
 	protected TableViewer createTableViewer(Composite parent) {
 		return new ProblemTableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
 	}
@@ -357,15 +370,21 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		}
 	}
 
+	@Override
 	public void init(IPageSite site) {
 		super.init(site);
 		IMenuManager menuManager = site.getActionBars().getMenuManager();
 		menuManager.insertBefore(IContextMenuConstants.GROUP_PROPERTIES, new Separator(GROUP_FILTERING));
 		fActionGroup.fillActionBars(site.getActionBars());
 		menuManager.appendToGroup(IContextMenuConstants.GROUP_PROPERTIES, new Action(SearchMessages.JavaSearchResultPage_preferences_label) {
+			@Override
 			public void run() {
 				String pageId= "org.eclipse.search.preferences.SearchPreferencePage"; //$NON-NLS-1$
-				PreferencesUtil.createPreferenceDialogOn(JavaPlugin.getActiveWorkbenchShell(), pageId, null, null).open();
+				String[] displayedPages= { pageId,
+						"org.eclipse.ui.editors.preferencePages.Annotations", //$NON-NLS-1$
+						"org.eclipse.ui.preferencePages.ColorsAndFonts" //$NON-NLS-1$
+				};
+				PreferencesUtil.createPreferenceDialogOn(JavaPlugin.getActiveWorkbenchShell(), pageId, displayedPages, null).open();
 			}
 		});
 	}
@@ -386,6 +405,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		getViewPart().updateLabel();
 	}
 
+	@Override
 	protected StructuredViewer getViewer() {
 		// override so that it's visible in the package.
 		return super.getViewer();
@@ -394,6 +414,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 	/* (non-Javadoc)
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#restoreState(org.eclipse.ui.IMemento)
 	 */
+	@Override
 	public void restoreState(IMemento memento) {
 		super.restoreState(memento);
 
@@ -438,6 +459,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 	/* (non-Javadoc)
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#saveState(org.eclipse.ui.IMemento)
 	 */
+	@Override
 	public void saveState(IMemento memento) {
 		super.saveState(memento);
 		memento.putInteger(KEY_GROUPING, fCurrentGrouping);
@@ -458,6 +480,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		return false;
 	}
 
+	@Override
 	public String getLabel() {
 		String label= super.getLabel();
 		AbstractTextSearchResult input= getInput();
@@ -536,6 +559,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		return null;
 	}
 
+	@Override
 	protected void handleOpen(OpenEvent event) {
 		Object firstElement= ((IStructuredSelection)event.getSelection()).getFirstElement();
 		if (firstElement instanceof ICompilationUnit ||
@@ -553,6 +577,7 @@ public class JavaSearchResultPage extends AbstractTextSearchViewPage implements
 		super.handleOpen(event);
 	}
 
+	@Override
 	public void setElementLimit(Integer elementLimit) {
 		super.setElementLimit(elementLimit);
 		int limit= elementLimit.intValue();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchScopeFactory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchScopeFactory.java
index 8294ca0..00d06fe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchScopeFactory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchScopeFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ public class JavaSearchScopeFactory {
 		if (workingSets == null || workingSets.length < 1)
 			return EMPTY_SCOPE;
 
-		Set javaElements= new HashSet(workingSets.length * 10);
+		Set<IJavaElement> javaElements= new HashSet<IJavaElement>(workingSets.length * 10);
 		for (int i= 0; i < workingSets.length; i++) {
 			IWorkingSet workingSet= workingSets[i];
 			if (workingSet.isEmpty() && workingSet.isAggregateWorkingSet()) {
@@ -122,7 +122,7 @@ public class JavaSearchScopeFactory {
 	}
 
 	public IJavaSearchScope createJavaSearchScope(IWorkingSet workingSet, int includeMask) {
-		Set javaElements= new HashSet(10);
+		Set<IJavaElement> javaElements= new HashSet<IJavaElement>(10);
 		if (workingSet.isEmpty() && workingSet.isAggregateWorkingSet()) {
 			return createWorkspaceScope(includeMask);
 		}
@@ -137,7 +137,7 @@ public class JavaSearchScopeFactory {
 	public IJavaSearchScope createJavaSearchScope(IResource[] resources, int includeMask) {
 		if (resources == null)
 			return EMPTY_SCOPE;
-		Set javaElements= new HashSet(resources.length);
+		Set<IJavaElement> javaElements= new HashSet<IJavaElement>(resources.length);
 		addJavaElements(javaElements, resources);
 		return createJavaSearchScope(javaElements, includeMask);
 	}
@@ -155,7 +155,7 @@ public class JavaSearchScopeFactory {
 	}
 
 	public IJavaSearchScope createJavaProjectSearchScope(String[] projectNames, int includeMask) {
-		ArrayList res= new ArrayList();
+		ArrayList<IJavaElement> res= new ArrayList<IJavaElement>();
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		for (int i= 0; i < projectNames.length; i++) {
 			IJavaProject project= JavaCore.create(root.getProject(projectNames[i]));
@@ -285,13 +285,13 @@ public class JavaSearchScopeFactory {
 
 	public IProject[] getProjects(IJavaSearchScope scope) {
 		IPath[] paths= scope.enclosingProjectsAndJars();
-		HashSet temp= new HashSet();
+		HashSet<IResource> temp= new HashSet<IResource>();
 		for (int i= 0; i < paths.length; i++) {
 			IResource resource= ResourcesPlugin.getWorkspace().getRoot().findMember(paths[i]);
 			if (resource != null && resource.getType() == IResource.PROJECT)
 				temp.add(resource);
 		}
-		return (IProject[]) temp.toArray(new IProject[temp.size()]);
+		return temp.toArray(new IProject[temp.size()]);
 	}
 
 	public IJavaElement[] getJavaElements(ISelection selection) {
@@ -306,7 +306,7 @@ public class JavaSearchScopeFactory {
 		if (elements.length == 0)
 			return new IJavaElement[0];
 
-		Set result= new HashSet(elements.length);
+		Set<IJavaElement> result= new HashSet<IJavaElement>(elements.length);
 		for (int i= 0; i < elements.length; i++) {
 			Object selectedElement= elements[i];
 			if (selectedElement instanceof IJavaElement) {
@@ -325,7 +325,7 @@ public class JavaSearchScopeFactory {
 			}
 
 		}
-		return (IJavaElement[]) result.toArray(new IJavaElement[result.size()]);
+		return result.toArray(new IJavaElement[result.size()]);
 	}
 
 	public IJavaSearchScope createJavaSearchScope(IJavaElement[] javaElements, boolean includeJRE) {
@@ -338,10 +338,10 @@ public class JavaSearchScopeFactory {
 		return SearchEngine.createJavaSearchScope(javaElements, getSearchFlags(includeMask));
 	}
 
-	private IJavaSearchScope createJavaSearchScope(Collection javaElements, int includeMask) {
+	private IJavaSearchScope createJavaSearchScope(Collection<IJavaElement> javaElements, int includeMask) {
 		if (javaElements.isEmpty())
 			return EMPTY_SCOPE;
-		IJavaElement[] elementArray= (IJavaElement[]) javaElements.toArray(new IJavaElement[javaElements.size()]);
+		IJavaElement[] elementArray= javaElements.toArray(new IJavaElement[javaElements.size()]);
 		return SearchEngine.createJavaSearchScope(elementArray, getSearchFlags(includeMask));
 	}
 
@@ -349,12 +349,12 @@ public class JavaSearchScopeFactory {
 		return includeMask;
 	}
 
-	private void addJavaElements(Set javaElements, IResource[] resources) {
+	private void addJavaElements(Set<IJavaElement> javaElements, IResource[] resources) {
 		for (int i= 0; i < resources.length; i++)
 			addJavaElements(javaElements, resources[i]);
 	}
 
-	private void addJavaElements(Set javaElements, IResource resource) {
+	private void addJavaElements(Set<IJavaElement> javaElements, IResource resource) {
 		IJavaElement javaElement= (IJavaElement)resource.getAdapter(IJavaElement.class);
 		if (javaElement == null)
 			// not a Java resource
@@ -372,11 +372,11 @@ public class JavaSearchScopeFactory {
 		javaElements.add(javaElement);
 	}
 
-	private void addJavaElements(Set javaElements, IJavaElement javaElement) {
+	private void addJavaElements(Set<IJavaElement> javaElements, IJavaElement javaElement) {
 		javaElements.add(javaElement);
 	}
 
-	private void addJavaElements(Set javaElements, IWorkingSet workingSet) {
+	private void addJavaElements(Set<IJavaElement> javaElements, IWorkingSet workingSet) {
 		if (workingSet == null)
 			return;
 
@@ -406,7 +406,7 @@ public class JavaSearchScopeFactory {
 		}
 	}
 
-	private void addJavaElements(Set javaElements, LogicalPackage selectedElement) {
+	private void addJavaElements(Set<IJavaElement> javaElements, LogicalPackage selectedElement) {
 		IPackageFragment[] packages= selectedElement.getFragments();
 		for (int i= 0; i < packages.length; i++)
 			addJavaElements(javaElements, packages[i]);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchTableContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchTableContentProvider.java
index 9f3a7b7..bcbacd0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchTableContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaSearchTableContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,7 @@ public class JavaSearchTableContentProvider extends JavaSearchContentProvider {
 	}
 	public Object[] getElements(Object inputElement) {
 		if (inputElement instanceof AbstractTextSearchResult) {
-			Set filteredElements= new HashSet();
+			Set<Object> filteredElements= new HashSet<Object>();
 			Object[] rawElements= ((AbstractTextSearchResult)inputElement).getElements();
 			int limit= getPage().getElementLimit().intValue();
 			for (int i= 0; i < rawElements.length; i++) {
@@ -41,18 +41,17 @@ public class JavaSearchTableContentProvider extends JavaSearchContentProvider {
 		return EMPTY_ARR;
 	}
 
+	@Override
 	public void elementsChanged(Object[] updatedElements) {
 		if (getSearchResult() == null)
 			return;
 
-		int addCount= 0;
-		int removeCount= 0;
 		int addLimit= getAddLimit();
 
 		TableViewer viewer= (TableViewer) getPage().getViewer();
-		Set updated= new HashSet();
-		Set added= new HashSet();
-		Set removed= new HashSet();
+		Set<Object> updated= new HashSet<Object>();
+		Set<Object> added= new HashSet<Object>();
+		Set<Object> removed= new HashSet<Object>();
 		for (int i= 0; i < updatedElements.length; i++) {
 			if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0) {
 				if (viewer.testFindItem(updatedElements[i]) != null)
@@ -61,12 +60,10 @@ public class JavaSearchTableContentProvider extends JavaSearchContentProvider {
 					if (addLimit > 0) {
 						added.add(updatedElements[i]);
 						addLimit--;
-						addCount++;
 					}
 				}
 			} else {
 				removed.add(updatedElements[i]);
-				removeCount++;
 			}
 		}
 
@@ -88,6 +85,7 @@ public class JavaSearchTableContentProvider extends JavaSearchContentProvider {
 		return Integer.MAX_VALUE;
 	}
 
+	@Override
 	public void clear() {
 		getPage().getViewer().refresh();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LRUWorkingSetsList.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LRUWorkingSetsList.java
index 6963a38..fa59fe3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LRUWorkingSetsList.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LRUWorkingSetsList.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,13 +22,13 @@ import org.eclipse.ui.PlatformUI;
 
 public class LRUWorkingSetsList {
 
-	private final ArrayList fLRUList;
+	private final ArrayList<IWorkingSet[]> fLRUList;
 	private final int fSize;
 	private final  WorkingSetsComparator fComparator= new WorkingSetsComparator();
 
 	public LRUWorkingSetsList(int size) {
 		fSize= size;
-		fLRUList= new ArrayList(size);
+		fLRUList= new ArrayList<IWorkingSet[]>(size);
 	}
 
 	public void add(IWorkingSet[] workingSets) {
@@ -42,22 +42,22 @@ public class LRUWorkingSetsList {
 
 	}
 
-	public Iterator iterator() {
+	public Iterator<IWorkingSet[]> iterator() {
 		removeDeletedWorkingSets();
 		return fLRUList.iterator();
 	}
 
-	public Iterator sortedIterator() {
+	public Iterator<IWorkingSet[]> sortedIterator() {
 		removeDeletedWorkingSets();
-		ArrayList sortedList= new ArrayList(fLRUList);
+		ArrayList<IWorkingSet[]> sortedList= new ArrayList<IWorkingSet[]>(fLRUList);
 		Collections.sort(sortedList, fComparator);
 		return sortedList.iterator();
 	}
 
 	private void removeDeletedWorkingSets() {
-		Iterator iter= new ArrayList(fLRUList).iterator();
+		Iterator<IWorkingSet[]> iter= new ArrayList<IWorkingSet[]>(fLRUList).iterator();
 		while (iter.hasNext()) {
-			IWorkingSet[] workingSets= (IWorkingSet[])iter.next();
+			IWorkingSet[] workingSets= iter.next();
 			for (int i= 0; i < workingSets.length; i++) {
 				if (PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(workingSets[i].getName()) == null) {
 					fLRUList.remove(workingSets);
@@ -67,12 +67,12 @@ public class LRUWorkingSetsList {
 		}
 	}
 
-	private IWorkingSet[] find(ArrayList list, IWorkingSet[] workingSets) {
-		Set workingSetList= new HashSet(Arrays.asList(workingSets));
-		Iterator iter= list.iterator();
+	private IWorkingSet[] find(ArrayList<IWorkingSet[]> list, IWorkingSet[] workingSets) {
+		Set<IWorkingSet> workingSetList= new HashSet<IWorkingSet>(Arrays.asList(workingSets));
+		Iterator<IWorkingSet[]> iter= list.iterator();
 		while (iter.hasNext()) {
-			IWorkingSet[] lruWorkingSets= (IWorkingSet[])iter.next();
-			Set lruWorkingSetList= new HashSet(Arrays.asList(lruWorkingSets));
+			IWorkingSet[] lruWorkingSets= iter.next();
+			Set<IWorkingSet> lruWorkingSetList= new HashSet<IWorkingSet>(Arrays.asList(lruWorkingSets));
 			if (lruWorkingSetList.equals(workingSetList))
 				return lruWorkingSets;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LevelTreeContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LevelTreeContentProvider.java
index 7b1b1b3..5c94455 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LevelTreeContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/LevelTreeContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
 
 public class LevelTreeContentProvider extends JavaSearchContentProvider implements ITreeContentProvider {
-	private Map fChildrenMap;
+	private Map<Object, Set<Object>> fChildrenMap;
 	private StandardJavaElementContentProvider fContentProvider;
 
 	public static final int LEVEL_TYPE= 1;
@@ -58,6 +58,7 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 	private static final int MAX_LEVEL= JAVA_ELEMENT_TYPES.length - 1;
 	private int fCurrentLevel;
 	static class FastJavaElementProvider extends StandardJavaElementContentProvider {
+		@Override
 		public Object getParent(Object element) {
 			Object parent= internalGetParent(element);
 			if (parent == null && element instanceof IAdaptable) {
@@ -120,9 +121,10 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 		return getChildren(inputElement);
 	}
 
+	@Override
 	protected synchronized void initialize(AbstractTextSearchResult result) {
 		super.initialize(result);
-		fChildrenMap= new HashMap();
+		fChildrenMap= new HashMap<Object, Set<Object>>();
 		if (result != null) {
 			Object[] elements= result.getElements();
 			for (int i= 0; i < elements.length; i++) {
@@ -133,7 +135,7 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 		}
 	}
 
-	protected void insert(Map toAdd, Set toUpdate, Object child) {
+	protected void insert(Map<Object, Set<Object>> toAdd, Set<Object> toUpdate, Object child) {
 		Object parent= getParent(child);
 		while (parent != null) {
 			if (insertChild(parent, child)) {
@@ -157,16 +159,16 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 		return insertInto(parent, child, fChildrenMap);
 	}
 
-	private boolean insertInto(Object parent, Object child, Map map) {
-		Set children= (Set) map.get(parent);
+	private boolean insertInto(Object parent, Object child, Map<Object, Set<Object>> map) {
+		Set<Object> children= map.get(parent);
 		if (children == null) {
-			children= new HashSet();
+			children= new HashSet<Object>();
 			map.put(parent, children);
 		}
 		return children.add(child);
 	}
 
-	protected void remove(Set toRemove, Set toUpdate, Object element) {
+	protected void remove(Set<Object> toRemove, Set<Object> toUpdate, Object element) {
 		// precondition here:  fResult.getMatchCount(child) <= 0
 
 		if (hasChildren(element)) {
@@ -202,7 +204,7 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 	 * @return returns true if it really was a remove (i.e. element was a child of parent).
 	 */
 	private boolean removeFromSiblings(Object element, Object parent) {
-		Set siblings= (Set) fChildrenMap.get(parent);
+		Set<Object> siblings= fChildrenMap.get(parent);
 		if (siblings != null) {
 			return siblings.remove(element);
 		} else {
@@ -211,13 +213,13 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 	}
 
 	public Object[] getChildren(Object parentElement) {
-		Set children= (Set) fChildrenMap.get(parentElement);
+		Set<Object> children= fChildrenMap.get(parentElement);
 		if (children == null)
 			return EMPTY_ARR;
 		int limit= getPage().getElementLimit().intValue();
 		if (limit != -1 && limit < children.size()) {
 			Object[] limitedArray= new Object[limit];
-			Iterator iterator= children.iterator();
+			Iterator<Object> iterator= children.iterator();
 			for (int i= 0; i < limit; i++) {
 				limitedArray[i]= iterator.next();
 			}
@@ -228,19 +230,20 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 	}
 
 	public boolean hasChildren(Object element) {
-		Set children= (Set) fChildrenMap.get(element);
+		Set<Object> children= fChildrenMap.get(element);
 		return children != null && !children.isEmpty();
 	}
 
+	@Override
 	public synchronized void elementsChanged(Object[] updatedElements) {
 		if (getSearchResult() == null)
 			return;
 
 		AbstractTreeViewer viewer= (AbstractTreeViewer) getPage().getViewer();
 
-		Set toRemove= new HashSet();
-		Set toUpdate= new HashSet();
-		Map toAdd= new HashMap();
+		Set<Object> toRemove= new HashSet<Object>();
+		Set<Object> toUpdate= new HashSet<Object>();
+		Map<Object, Set<Object>> toAdd= new HashMap<Object, Set<Object>>();
 		for (int i= 0; i < updatedElements.length; i++) {
 			if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0)
 				insert(toAdd, toUpdate, updatedElements[i]);
@@ -249,17 +252,18 @@ public class LevelTreeContentProvider extends JavaSearchContentProvider implemen
 		}
 
 		viewer.remove(toRemove.toArray());
-		for (Iterator iter= toAdd.keySet().iterator(); iter.hasNext();) {
+		for (Iterator<Object> iter= toAdd.keySet().iterator(); iter.hasNext();) {
 			Object parent= iter.next();
-			HashSet children= (HashSet) toAdd.get(parent);
+			HashSet<Object> children= (HashSet<Object>) toAdd.get(parent);
 			viewer.add(parent, children.toArray());
 		}
-		for (Iterator elementsToUpdate= toUpdate.iterator(); elementsToUpdate.hasNext();) {
+		for (Iterator<Object> elementsToUpdate= toUpdate.iterator(); elementsToUpdate.hasNext();) {
 			viewer.refresh(elementsToUpdate.next());
 		}
 
 	}
 
+	@Override
 	public void clear() {
 		initialize(getSearchResult());
 		getPage().getViewer().refresh();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MatchLocations.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MatchLocations.java
index acb0683..45b4fa7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MatchLocations.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MatchLocations.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,20 +38,21 @@ public class MatchLocations {
 
 	public static class MatchLocationSelectionDialog extends TrayDialog {
 
-		private final ArrayList fButtons;
+		private final ArrayList<Button> fButtons;
 		private final int fSearchFor;
 		private int fCurrentSelection;
 
 		public MatchLocationSelectionDialog(Shell parent, int initialSelection, int searchFor) {
 			super(parent);
 			fSearchFor= searchFor;
-			fButtons= new ArrayList();
+			fButtons= new ArrayList<Button>();
 			fCurrentSelection= initialSelection;
 		}
 
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		protected void configureShell(Shell shell) {
 			super.configureShell(shell);
 			shell.setText(SearchMessages.MatchLocations_dialog_title);
@@ -60,6 +61,7 @@ public class MatchLocations {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
@@ -67,6 +69,7 @@ public class MatchLocations {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite contents= (Composite) super.createDialogArea(parent);
 			GridLayout layout= (GridLayout) contents.getLayout();
@@ -94,9 +97,11 @@ public class MatchLocations {
 			selectAllButton.setLayoutData(new GridData());
 			selectAllButton.setText(SearchMessages.MatchLocations_select_all_button_label);
 			selectAllButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetDefaultSelected(SelectionEvent e) {
 					performSelectAction(true);
 				}
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					performSelectAction(true);
 				}
@@ -108,9 +113,11 @@ public class MatchLocations {
 			deselectAllButton.setLayoutData(new GridData());
 			deselectAllButton.setText(SearchMessages.MatchLocations_deselect_all_button_label);
 			deselectAllButton.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetDefaultSelected(SelectionEvent e) {
 					performSelectAction(false);
 				}
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					performSelectAction(false);
 				}
@@ -185,7 +192,7 @@ public class MatchLocations {
 
 		protected final void performSelectAction(boolean selectAll) {
 			for (int i= 0; i < fButtons.size(); i++) {
-				Button button= (Button) fButtons.get(i);
+				Button button= fButtons.get(i);
 				button.setSelection(selectAll);
 			}
 			validateSettings();
@@ -208,9 +215,11 @@ public class MatchLocations {
 			button.setLayoutData(new GridData());
 			button.setSelection(isSelected);
 			button.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetDefaultSelected(SelectionEvent e) {
 					performOptionChanged();
 				}
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					widgetDefaultSelected(e);
 				}
@@ -237,7 +246,7 @@ public class MatchLocations {
 		private void validateSettings() {
 			int selected= 0;
 			for (int i= 0; i < fButtons.size(); i++) {
-				Button button= (Button) fButtons.get(i);
+				Button button= fButtons.get(i);
 				if (button.getSelection()) {
 					selected |= getIntValue(button);
 				}
@@ -257,7 +266,7 @@ public class MatchLocations {
 		if (nOptions > entryLimit) {
 			return SearchMessages.MatchLocations_match_locations_description;
 		}
-		ArrayList args= new ArrayList(3);
+		ArrayList<String> args= new ArrayList<String>(3);
 		if (isSet(locations, IJavaSearchConstants.IMPORT_DECLARATION_TYPE_REFERENCE)) {
 			args.add(SearchMessages.MatchLocations_imports_description);
 		}
@@ -316,14 +325,14 @@ public class MatchLocations {
 			args.add(SearchMessages.MatchLocations_implicit_this_description);
 		}
 		if (args.size() == 1) {
-			return (String) args.get(0);
+			return args.get(0);
 		}
 		StringBuffer buf= new StringBuffer();
 		for (int i= 0; i < args.size(); i++) {
 			if (i > 0) {
 				buf.append(JavaElementLabels.COMMA_STRING);
 			}
-			buf.append((String) args.get(i));
+			buf.append(args.get(i));
 		}
 		return buf.toString();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java
index 1b6f72a..80b245c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,8 +57,8 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 	public static final String ID= "MethodExitsFinder"; //$NON-NLS-1$
 
 	private MethodDeclaration fMethodDeclaration;
-	private List fResult;
-	private List fCatchedExceptions;
+	private List<OccurrenceLocation> fResult;
+	private List<ITypeBinding> fCatchedExceptions;
 	private String fExitDescription;
 	private CompilationUnit fASTRoot;
 
@@ -103,7 +103,7 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 	}
 
 	private void performSearch() {
-		fResult= new ArrayList();
+		fResult= new ArrayList<OccurrenceLocation>();
 		markReferences();
 		if (!fResult.isEmpty()) {
 			Type returnType= fMethodDeclaration.getReturnType2();
@@ -119,12 +119,12 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		if (fResult.isEmpty())
 			return null;
 
-		return (OccurrenceLocation[]) fResult.toArray(new OccurrenceLocation[fResult.size()]);
+		return fResult.toArray(new OccurrenceLocation[fResult.size()]);
 	}
 
 
 	private void markReferences() {
-		fCatchedExceptions= new ArrayList();
+		fCatchedExceptions= new ArrayList<ITypeBinding>();
 		boolean isVoid= true;
 		Type returnType= fMethodDeclaration.getReturnType2();
 		if (returnType != null) {
@@ -134,9 +134,9 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		fMethodDeclaration.accept(this);
 		Block block= fMethodDeclaration.getBody();
 		if (block != null) {
-			List statements= block.statements();
+			List<Statement> statements= block.statements();
 			if (statements.size() > 0) {
-				Statement last= (Statement)statements.get(statements.size() - 1);
+				Statement last= statements.get(statements.size() - 1);
 				int maxVariableId= LocalVariableIndex.perform(fMethodDeclaration);
 				FlowContext flowContext= new FlowContext(0, maxVariableId + 1);
 				flowContext.setConsiderAccessMode(false);
@@ -153,36 +153,42 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		}
 	}
 
+	@Override
 	public boolean visit(TypeDeclaration node) {
 		// Don't dive into a local type.
 		return false;
 	}
 
+	@Override
 	public boolean visit(AnonymousClassDeclaration node) {
 		// Don't dive into a local type.
 		return false;
 	}
 
+	@Override
 	public boolean visit(AnnotationTypeDeclaration node) {
 		// Don't dive into a local type.
 		return false;
 	}
 
+	@Override
 	public boolean visit(EnumDeclaration node) {
 		// Don't dive into a local type.
 		return false;
 	}
 
+	@Override
 	public boolean visit(ReturnStatement node) {
 		fResult.add(new OccurrenceLocation(node.getStartPosition(), node.getLength(), 0, fExitDescription));
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(TryStatement node) {
 		int currentSize= fCatchedExceptions.size();
-		List catchClauses= node.catchClauses();
-		for (Iterator iter= catchClauses.iterator(); iter.hasNext();) {
-			IVariableBinding variable= ((CatchClause)iter.next()).getException().resolveBinding();
+		List<CatchClause> catchClauses= node.catchClauses();
+		for (Iterator<CatchClause> iter= catchClauses.iterator(); iter.hasNext();) {
+			IVariableBinding variable= iter.next().getException().resolveBinding();
 			if (variable != null && variable.getType() != null) {
 				fCatchedExceptions.add(variable.getType());
 			}
@@ -194,8 +200,8 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		}
 
 		// visit catch and finally
-		for (Iterator iter= catchClauses.iterator(); iter.hasNext(); ) {
-			((CatchClause)iter.next()).accept(this);
+		for (Iterator<CatchClause> iter= catchClauses.iterator(); iter.hasNext(); ) {
+			iter.next().accept(this);
 		}
 		if (node.getFinally() != null)
 			node.getFinally().accept(this);
@@ -204,6 +210,7 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		return false;
 	}
 
+	@Override
 	public boolean visit(ThrowStatement node) {
 		ITypeBinding exception= node.getExpression().resolveTypeBinding();
 		if (isExitPoint(exception)) {
@@ -213,6 +220,7 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		if (isExitPoint(node.resolveMethodBinding())) {
 			SimpleName name= node.getName();
@@ -221,6 +229,7 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		if (isExitPoint(node.resolveMethodBinding())) {
 			SimpleName name= node.getName();
@@ -229,6 +238,7 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		if (isExitPoint(node.resolveConstructorBinding())) {
 			Type name= node.getType();
@@ -237,6 +247,7 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(ConstructorInvocation node) {
 		if (isExitPoint(node.resolveConstructorBinding())) {
 			// mark 'this'
@@ -245,6 +256,7 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		if (isExitPoint(node.resolveConstructorBinding())) {
 			// mark 'super'
@@ -271,8 +283,8 @@ public class MethodExitsFinder extends ASTVisitor implements IOccurrencesFinder
 	}
 
 	private boolean isCatched(ITypeBinding binding) {
-		for (Iterator iter= fCatchedExceptions.iterator(); iter.hasNext();) {
-			ITypeBinding catchException= (ITypeBinding)iter.next();
+		for (Iterator<ITypeBinding> iter= fCatchedExceptions.iterator(); iter.hasNext();) {
+			ITypeBinding catchException= iter.next();
 			if (catches(catchException, binding))
 				return true;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/NewSearchResultCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/NewSearchResultCollector.java
index 3993529..11ea83a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/NewSearchResultCollector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/NewSearchResultCollector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,9 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.search.ui.text.AbstractTextSearchResult;
 
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.search.FieldDeclarationMatch;
 import org.eclipse.jdt.core.search.FieldReferenceMatch;
+import org.eclipse.jdt.core.search.LocalVariableDeclarationMatch;
 import org.eclipse.jdt.core.search.LocalVariableReferenceMatch;
 import org.eclipse.jdt.core.search.MethodReferenceMatch;
 import org.eclipse.jdt.core.search.SearchMatch;
@@ -32,6 +34,7 @@ public class NewSearchResultCollector extends SearchRequestor {
 		fIgnorePotentials= ignorePotentials;
 	}
 
+	@Override
 	public void acceptSearchMatch(SearchMatch match) throws CoreException {
 		IJavaElement enclosingElement= (IJavaElement) match.getElement();
 		if (enclosingElement != null) {
@@ -43,10 +46,14 @@ public class NewSearchResultCollector extends SearchRequestor {
 				FieldReferenceMatch fieldRef= ((FieldReferenceMatch) match);
 				isWriteAccess= fieldRef.isWriteAccess();
 				isReadAccess= fieldRef.isReadAccess();
+			} else if (match instanceof FieldDeclarationMatch) {
+				isWriteAccess= true;
 			} else if (match instanceof LocalVariableReferenceMatch) {
 				LocalVariableReferenceMatch localVarRef= ((LocalVariableReferenceMatch) match);
 				isWriteAccess= localVarRef.isWriteAccess();
 				isReadAccess= localVarRef.isReadAccess();
+			} else if (match instanceof LocalVariableDeclarationMatch) {
+				isWriteAccess= true;
 			}
 			boolean isSuperInvocation= false;
 			if (match instanceof MethodReferenceMatch) {
@@ -57,15 +64,19 @@ public class NewSearchResultCollector extends SearchRequestor {
 		}
 	}
 
+	@Override
 	public void beginReporting() {
 	}
 
+	@Override
 	public void endReporting() {
 	}
 
+	@Override
 	public void enterParticipant(SearchParticipant participant) {
 	}
 
+	@Override
 	public void exitParticipant(SearchParticipant participant) {
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrenceMatch.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrenceMatch.java
index fc73b33..2f9fa45 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrenceMatch.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrenceMatch.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ public class OccurrenceMatch extends Match {
 		fOriginalLocation= null;
 	}
 
+	@Override
 	public void setOffset(int offset) {
 		if (fOriginalLocation == null) {
 			// remember the original location before changing it
@@ -33,6 +34,7 @@ public class OccurrenceMatch extends Match {
 		super.setOffset(offset);
 	}
 
+	@Override
 	public void setLength(int length) {
 		if (fOriginalLocation == null) {
 			// remember the original location before changing it
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesFinder.java
index d726e9b..0e2e520 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,13 +35,13 @@ import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.ParameterizedType;
 import org.eclipse.jdt.core.dom.PostfixExpression;
 import org.eclipse.jdt.core.dom.PrefixExpression;
+import org.eclipse.jdt.core.dom.PrefixExpression.Operator;
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SimpleType;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
-import org.eclipse.jdt.core.dom.PrefixExpression.Operator;
 
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
@@ -60,8 +60,8 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 	private Name fSelectedNode;
 	private IBinding fTarget;
 
-	private List/*<OccurrenceLocation>*/fResult;
-	private Set fWriteUsages;
+	private List<OccurrenceLocation> fResult;
+	private Set<Name> fWriteUsages;
 
 	private boolean fTargetIsStaticMethodImport;
 
@@ -94,8 +94,8 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 
 	private void performSearch() {
 		if (fResult == null) {
-			fResult= new ArrayList/*<OccurrenceLocation>*/();
-			fWriteUsages= new HashSet/*ASTNode*/();
+			fResult= new ArrayList<OccurrenceLocation>();
+			fWriteUsages= new HashSet<Name>();
 			fRoot.accept(this);
 		}
 	}
@@ -104,7 +104,7 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 		performSearch();
 		if (fResult.isEmpty())
 			return null;
-		return (OccurrenceLocation[]) fResult.toArray(new OccurrenceLocation[fResult.size()]);
+		return fResult.toArray(new OccurrenceLocation[fResult.size()]);
 	}
 
 	public CompilationUnit getASTRoot() {
@@ -133,6 +133,7 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 		return SearchMessages.OccurrencesFinder_label_singular;
 	}
 
+	@Override
 	public boolean visit(QualifiedName node) {
 		final IBinding binding= node.resolveBinding();
 		if (binding instanceof IVariableBinding && ((IVariableBinding)binding).isField()) {
@@ -156,6 +157,7 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 		return parent instanceof ImportDeclaration && ((ImportDeclaration) parent).isStatic();
 	}
 
+	@Override
 	public boolean visit(MethodInvocation node) {
 		if (fTargetIsStaticMethodImport) {
 			return !addPossibleStaticImport(node.getName(), node.resolveMethodBinding());
@@ -163,6 +165,7 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(SimpleName node) {
 		addUsage(node, node.resolveBinding());
 		return true;
@@ -171,6 +174,7 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 	/*
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.ConstructorInvocation)
 	 */
+	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		// match with the constructor and the type.
 
@@ -187,6 +191,7 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 		return super.visit(node);
 	}
 
+	@Override
 	public boolean visit(Assignment node) {
 		SimpleName name= getSimpleName(node.getLeftHandSide());
 		if (name != null)
@@ -194,17 +199,20 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(SingleVariableDeclaration node) {
 		addWrite(node.getName(), node.resolveBinding());
 		return true;
 	}
 
+	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		if (node.getParent() instanceof FieldDeclaration || node.getInitializer() != null)
 			addWrite(node.getName(), node.resolveBinding());
 		return true;
 	}
 
+	@Override
 	public boolean visit(PrefixExpression node) {
 		PrefixExpression.Operator operator= node.getOperator();
 		if (operator == Operator.INCREMENT || operator == Operator.DECREMENT) {
@@ -215,6 +223,7 @@ public class OccurrencesFinder extends ASTVisitor implements IOccurrencesFinder
 		return true;
 	}
 
+	@Override
 	public boolean visit(PostfixExpression node) {
 		SimpleName name= getSimpleName(node.getOperand());
 		if (name != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchLabelProvider.java
index 984b297..201a76e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ class OccurrencesSearchLabelProvider extends TextSearchLabelProvider implements
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 	 */
+	@Override
 	public String getText(Object element) {
 		return getLabelWithCounts(element, internalGetText(element));
 	}
@@ -74,6 +75,7 @@ class OccurrencesSearchLabelProvider extends TextSearchLabelProvider implements
 		return res;
 	}
 
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof JavaElementLine) {
 			int flags= ((JavaElementLine) element).getFlags();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchQuery.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchQuery.java
index 9d60919..40ec2e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchQuery.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchQuery.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,9 +69,9 @@ public class OccurrencesSearchQuery implements ISearchQuery {
 		try {
 			OccurrenceLocation[] occurrences= fFinder.getOccurrences();
 			if (occurrences != null) {
-				HashMap lineMap= new HashMap();
+				HashMap<Integer, JavaElementLine> lineMap= new HashMap<Integer, JavaElementLine>();
 				CompilationUnit astRoot= fFinder.getASTRoot();
-				ArrayList resultingMatches= new ArrayList();
+				ArrayList<OccurrenceMatch> resultingMatches= new ArrayList<OccurrenceMatch>();
 
 				for (int i= 0; i < occurrences.length; i++) {
 					OccurrenceLocation loc= occurrences[i];
@@ -86,7 +86,7 @@ public class OccurrencesSearchQuery implements ISearchQuery {
 				}
 
 				if (!resultingMatches.isEmpty()) {
-					fResult.addMatches((Match[]) resultingMatches.toArray(new Match[resultingMatches.size()]));
+					fResult.addMatches(resultingMatches.toArray(new Match[resultingMatches.size()]));
 				}
 			}
 
@@ -98,7 +98,7 @@ public class OccurrencesSearchQuery implements ISearchQuery {
 		return Status.OK_STATUS;
 	}
 
-	private JavaElementLine getLineElement(CompilationUnit astRoot, OccurrenceLocation location, HashMap lineToGroup) {
+	private JavaElementLine getLineElement(CompilationUnit astRoot, OccurrenceLocation location, HashMap<Integer, JavaElementLine> lineToGroup) {
 		int lineNumber= astRoot.getLineNumber(location.getOffset());
 		if (lineNumber <= 0) {
 			return null;
@@ -106,7 +106,7 @@ public class OccurrencesSearchQuery implements ISearchQuery {
 		JavaElementLine lineElement= null;
 		try {
 			Integer key= new Integer(lineNumber);
-			lineElement= (JavaElementLine) lineToGroup.get(key);
+			lineElement= lineToGroup.get(key);
 			if (lineElement == null) {
 				int lineStartOffset= astRoot.getPosition(lineNumber, 0);
 				if (lineStartOffset >= 0) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResult.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResult.java
index 922bdc4..1bba89d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResult.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -147,10 +147,12 @@ public class OccurrencesSearchResult extends AbstractTextSearchResult implements
 		return fQuery;
 	}
 
+	@Override
 	public IFileMatchAdapter getFileMatchAdapter() {
 		return this;
 	}
 
+	@Override
 	public IEditorMatchAdapter getEditorMatchAdapter() {
 		return this;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java
index 93201ea..2bc6f94 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -166,6 +166,7 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 	}
 
 	private class ToggleLinkingAction extends AbstractToggleLinkingAction {
+		@Override
 		public void run() {
 			setLinkingEnabled(isChecked());
 		}
@@ -179,12 +180,14 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 		fToggleLinkingAction.setActionDefinitionId(IWorkbenchCommandConstants.NAVIGATE_TOGGLE_LINK_WITH_EDITOR);
 	}
 
+	@Override
 	public void init(IPageSite pageSite) {
 		super.init(pageSite);
 		// wait until site is set
 		setLinkingEnabled(getDialogSettings().getBoolean(DIALOGSTORE_LINKEDITORS));
 	}
 
+	@Override
 	public void dispose() {
 		if (fLinkingEnabled) {
 			fLinkWithEditorListener.uninstall(getSite().getPage());
@@ -192,11 +195,13 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 		super.dispose();
 	}
 
+	@Override
 	protected void fillToolbar(IToolBarManager tbm) {
 		super.fillToolbar(tbm);
 		tbm.add(fToggleLinkingAction);
 	}
 
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 
@@ -211,6 +216,7 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#showMatch(org.eclipse.search.ui.text.Match, int, int)
 	 */
+	@Override
 	protected void showMatch(Match match, int currentOffset, int currentLength, boolean activate) throws PartInitException {
 		JavaElementLine element= (JavaElementLine) match.getElement();
 		IJavaElement javaElement= element.getJavaElement();
@@ -234,6 +240,7 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#elementsChanged(java.lang.Object[])
 	 */
+	@Override
 	protected void elementsChanged(Object[] objects) {
 		if (fContentProvider != null)
 			fContentProvider.elementsChanged(objects);
@@ -242,6 +249,7 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#clear()
 	 */
+	@Override
 	protected void clear() {
 		if (fContentProvider != null)
 			fContentProvider.clear();
@@ -250,6 +258,7 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTreeViewer(org.eclipse.jface.viewers.TreeViewer)
 	 */
+	@Override
 	protected void configureTreeViewer(TreeViewer viewer) {
 		throw new IllegalStateException("Doesn't support tree mode."); //$NON-NLS-1$
 	}
@@ -257,8 +266,10 @@ public class OccurrencesSearchResultPage extends AbstractTextSearchViewPage {
 	/*
 	 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTableViewer(org.eclipse.jface.viewers.TableViewer)
 	 */
+	@Override
 	protected void configureTableViewer(TableViewer viewer) {
 		viewer.setComparator(new ViewerComparator() {
+			@Override
 			public int compare(Viewer v, Object e1, Object e2) {
 				JavaElementLine jel1= (JavaElementLine) e1;
 				JavaElementLine jel2= (JavaElementLine) e2;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java
index 60ec7e4..17824aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/PostfixLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class PostfixLabelProvider extends SearchLabelProvider {
 		fContentProvider= new LevelTreeContentProvider.FastJavaElementProvider();
 	}
 
+	@Override
 	public Image getImage(Object element) {
 		Image image= super.getImage(element);
 		if (image != null)
@@ -38,6 +39,7 @@ public class PostfixLabelProvider extends SearchLabelProvider {
 		return getParticipantImage(element);
 	}
 
+	@Override
 	public String getText(Object element) {
 		String labelWithCounts= getLabelWithCounts(element, internalGetText(element));
 		return labelWithCounts + getQualification(element);
@@ -60,6 +62,7 @@ public class PostfixLabelProvider extends SearchLabelProvider {
 		return res.toString();
 	}
 
+	@Override
 	protected boolean hasChildren(Object element) {
 		ITreeContentProvider contentProvider= (ITreeContentProvider) fPage.getViewer().getContentProvider();
 		return contentProvider.hasChildren(element);
@@ -96,6 +99,7 @@ public class PostfixLabelProvider extends SearchLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getStyledText(java.lang.Object)
 	 */
+	@Override
 	public StyledString getStyledText(Object element) {
 		StyledString styledString= getColoredLabelWithCounts(element, internalGetStyledText(element));
 		styledString.append(getQualification(element), StyledString.QUALIFIER_STYLER);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java
index e83aae8..403da17 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,7 +60,7 @@ public abstract class SearchLabelProvider extends AppearanceAwareLabelProvider {
 	protected static final int DEFAULT_SEARCH_IMAGEFLAGS= DEFAULT_IMAGEFLAGS;
 
 	private Color fPotentialMatchFgColor;
-	private Map fLabelProviderMap;
+	private Map<IMatchPresentation, ILabelProvider> fLabelProviderMap;
 
 	protected JavaSearchResultPage fPage;
 
@@ -73,9 +73,9 @@ public abstract class SearchLabelProvider extends AppearanceAwareLabelProvider {
 		addLabelDecorator(new ProblemsLabelDecorator(null));
 
 		fPage= page;
-		fLabelProviderMap= new HashMap(5);
+		fLabelProviderMap= new HashMap<IMatchPresentation, ILabelProvider>(5);
 
-		fSearchPreferences= new ScopedPreferenceStore(new InstanceScope(), NewSearchUI.PLUGIN_ID);
+		fSearchPreferences= new ScopedPreferenceStore(InstanceScope.INSTANCE, NewSearchUI.PLUGIN_ID);
 		fSearchPropertyListener= new IPropertyChangeListener() {
 			public void propertyChange(PropertyChangeEvent event) {
 				doSearchPropertyChange(event);
@@ -95,6 +95,7 @@ public abstract class SearchLabelProvider extends AppearanceAwareLabelProvider {
 		}
 	}
 
+	@Override
 	public Color getForeground(Object element) {
 		if (arePotentialMatchesEmphasized()) {
 			if (getNumberOfPotentialMatches(element) > 0)
@@ -171,14 +172,15 @@ public abstract class SearchLabelProvider extends AppearanceAwareLabelProvider {
 		return false;
 	}
 
+	@Override
 	public void dispose() {
 		if (fPotentialMatchFgColor != null) {
 			fPotentialMatchFgColor.dispose();
 			fPotentialMatchFgColor= null;
 		}
 		fSearchPreferences.removePropertyChangeListener(fSearchPropertyListener);
-		for (Iterator labelProviders = fLabelProviderMap.values().iterator(); labelProviders.hasNext();) {
-			ILabelProvider labelProvider = (ILabelProvider) labelProviders.next();
+		for (Iterator<ILabelProvider> labelProviders = fLabelProviderMap.values().iterator(); labelProviders.hasNext();) {
+			ILabelProvider labelProvider = labelProviders.next();
 			labelProvider.dispose();
 		}
 
@@ -189,24 +191,27 @@ public abstract class SearchLabelProvider extends AppearanceAwareLabelProvider {
 		super.dispose();
 	}
 
+	@Override
 	public void addListener(ILabelProviderListener listener) {
 		super.addListener(listener);
-		for (Iterator labelProviders = fLabelProviderMap.values().iterator(); labelProviders.hasNext();) {
-			ILabelProvider labelProvider = (ILabelProvider) labelProviders.next();
+		for (Iterator<ILabelProvider> labelProviders = fLabelProviderMap.values().iterator(); labelProviders.hasNext();) {
+			ILabelProvider labelProvider = labelProviders.next();
 			labelProvider.addListener(listener);
 		}
 	}
 
+	@Override
 	public boolean isLabelProperty(Object element, String property) {
 		if (PROPERTY_MATCH_COUNT.equals(property))
 			return true;
 		return getLabelProvider(element).isLabelProperty(element, property);
 	}
 
+	@Override
 	public void removeListener(ILabelProviderListener listener) {
 		super.removeListener(listener);
-		for (Iterator labelProviders = fLabelProviderMap.values().iterator(); labelProviders.hasNext();) {
-			ILabelProvider labelProvider = (ILabelProvider) labelProviders.next();
+		for (Iterator<ILabelProvider> labelProviders = fLabelProviderMap.values().iterator(); labelProviders.hasNext();) {
+			ILabelProvider labelProvider = labelProviders.next();
 			labelProvider.removeListener(listener);
 		}
 	}
@@ -244,7 +249,7 @@ public abstract class SearchLabelProvider extends AppearanceAwareLabelProvider {
 		if (participant == null)
 			return null;
 
-		ILabelProvider lp= (ILabelProvider) fLabelProviderMap.get(participant);
+		ILabelProvider lp= fLabelProviderMap.get(participant);
 		if (lp == null) {
 			lp= participant.createLabelProvider();
 			fLabelProviderMap.put(participant, lp);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties
index 7c02d3c..56ddf28 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties
@@ -92,8 +92,8 @@ Search_FindImplementorsInWorkingSetAction_tooltip= Search for Implementors of th
 Search_FindReferencesAction_label= &Workspace
 Search_FindReferencesAction_tooltip= Search for References to the Selected Element in the Workspace
 
-Search_FindReferencesAction_BinPrimConstWarnDialog_title= Search for References to a Binary Constant
-Search_FindReferencesAction_BinPrimConstWarnDialog_message= Matches to this constant will only be discovered in source files and binary files where the constant value is not inlined.
+Search_FindReferencesAction_BinPrimConstWarnDialog_title= Search for References to a Constant
+Search_FindReferencesAction_BinPrimConstWarnDialog_message= Matches to this constant will only be discovered in source files, and in binary files where the constant value is not inlined.
 
 Search_FindReferencesInProjectAction_label= &Project
 Search_FindReferencesInProjectAction_tooltip= Search for References to the Selected Element in Resources in the Enclosing Project of the Selected Element
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchParticipantsExtensionPoint.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchParticipantsExtensionPoint.java
index d31458b..8e53a8e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchParticipantsExtensionPoint.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchParticipantsExtensionPoint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,18 +31,18 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 
 public class SearchParticipantsExtensionPoint {
 
-	private Set fActiveParticipants= null;
+	private Set<SearchParticipantDescriptor> fActiveParticipants= null;
 	private static SearchParticipantsExtensionPoint fgInstance;
 
 	public boolean hasAnyParticipants() {
 		return Platform.getExtensionRegistry().getConfigurationElementsFor(JavaSearchPage.PARTICIPANT_EXTENSION_POINT).length > 0;
 	}
 
-	private synchronized Set getAllParticipants() {
+	private synchronized Set<SearchParticipantDescriptor> getAllParticipants() {
 		if (fActiveParticipants != null)
 			return fActiveParticipants;
 		IConfigurationElement[] allParticipants= Platform.getExtensionRegistry().getConfigurationElementsFor(JavaSearchPage.PARTICIPANT_EXTENSION_POINT);
-		fActiveParticipants= new HashSet(allParticipants.length);
+		fActiveParticipants= new HashSet<SearchParticipantDescriptor>(allParticipants.length);
 		for (int i= 0; i < allParticipants.length; i++) {
 			SearchParticipantDescriptor descriptor= new SearchParticipantDescriptor(allParticipants[i]);
 			IStatus status= descriptor.checkSyntax();
@@ -55,11 +55,11 @@ public class SearchParticipantsExtensionPoint {
 		return fActiveParticipants;
 	}
 
-	private void collectParticipants(Set participants, IProject[] projects) {
-		Iterator activeParticipants= getAllParticipants().iterator();
-		Set seenParticipants= new HashSet();
+	private void collectParticipants(Set<SearchParticipantRecord> participants, IProject[] projects) {
+		Iterator<SearchParticipantDescriptor> activeParticipants= getAllParticipants().iterator();
+		Set<String> seenParticipants= new HashSet<String>();
 		while (activeParticipants.hasNext()) {
-			SearchParticipantDescriptor participant= (SearchParticipantDescriptor) activeParticipants.next();
+			SearchParticipantDescriptor participant= activeParticipants.next();
 			String id= participant.getID();
 			if (participant.isEnabled() && !seenParticipants.contains(id)) {
 				for (int i= 0; i < projects.length; i++) {
@@ -81,10 +81,10 @@ public class SearchParticipantsExtensionPoint {
 
 
 	public SearchParticipantRecord[] getSearchParticipants(IProject[] concernedProjects) {
-		Set participantSet= new HashSet();
+		Set<SearchParticipantRecord> participantSet= new HashSet<SearchParticipantRecord>();
 		collectParticipants(participantSet, concernedProjects);
 		SearchParticipantRecord[] participants= new SearchParticipantRecord[participantSet.size()];
-		return (SearchParticipantRecord[]) participantSet.toArray(participants);
+		return participantSet.toArray(participants);
 	}
 
 	public static SearchParticipantsExtensionPoint getInstance() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchResultUpdater.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchResultUpdater.java
index 261a559..6d558f5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchResultUpdater.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchResultUpdater.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,8 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
 
+import org.eclipse.core.runtime.IAdaptable;
+
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceDelta;
 
@@ -46,8 +48,8 @@ public class SearchResultUpdater implements IElementChangedListener, IQueryListe
 	public void elementChanged(ElementChangedEvent event) {
 		//long t0= System.currentTimeMillis();
 		IJavaElementDelta delta= event.getDelta();
-		Set removedElements= new HashSet();
-		Set potentiallyRemovedElements= new HashSet();
+		Set<IAdaptable> removedElements= new HashSet<IAdaptable>();
+		Set<IAdaptable> potentiallyRemovedElements= new HashSet<IAdaptable>();
 		collectRemoved(potentiallyRemovedElements, removedElements, delta);
 		if (removedElements.size() > 0)
 			handleRemoved(removedElements);
@@ -56,7 +58,7 @@ public class SearchResultUpdater implements IElementChangedListener, IQueryListe
 		//System.out.println(this+"handled delta in: "+(System.currentTimeMillis()-t0));
 	}
 
-	private void handleRemoved(Set removedElements) {
+	private void handleRemoved(Set<IAdaptable> removedElements) {
 		Object[] elements= fResult.getElements();
 		for (int i= 0; i < elements.length; i++) {
 			if (isContainedInRemoved(removedElements, elements[i])) {
@@ -84,8 +86,8 @@ public class SearchResultUpdater implements IElementChangedListener, IQueryListe
 		}
 	}
 
-	private boolean isContainedInRemoved(Set removedElements, Object object) {
-		for (Iterator elements= removedElements.iterator(); elements.hasNext();) {
+	private boolean isContainedInRemoved(Set<IAdaptable> removedElements, Object object) {
+		for (Iterator<IAdaptable> elements= removedElements.iterator(); elements.hasNext();) {
 			if (isParentOf(elements.next(), object))
 				return true;
 		}
@@ -106,7 +108,7 @@ public class SearchResultUpdater implements IElementChangedListener, IQueryListe
 		return null;
 	}
 
-	private void collectRemoved(Set potentiallyRemovedSet, Set removedElements, IJavaElementDelta delta) {
+	private void collectRemoved(Set<IAdaptable> potentiallyRemovedSet, Set<IAdaptable> removedElements, IJavaElementDelta delta) {
 		if (delta.getKind() == IJavaElementDelta.REMOVED)
 			removedElements.add(delta.getElement());
 		else if (delta.getKind() == IJavaElementDelta.CHANGED) {
@@ -139,7 +141,7 @@ public class SearchResultUpdater implements IElementChangedListener, IQueryListe
 		}
 	}
 
-	private void collectRemovals(Set removals, IResourceDelta delta) {
+	private void collectRemovals(Set<IAdaptable> removals, IResourceDelta delta) {
 		if (delta.getKind() == IResourceDelta.REMOVED)
 			removals.add(delta.getResource());
 		else {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchUtil.java
index a68c1e2..f33dd44 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -141,10 +141,10 @@ public class SearchUtil {
 
 	private static void saveState(IDialogSettings settingsStore) {
 		IWorkingSet[] workingSets;
-		Iterator iter= fgLRUWorkingSets.iterator();
+		Iterator<IWorkingSet[]> iter= fgLRUWorkingSets.iterator();
 		int i= 0;
 		while (iter.hasNext()) {
-			workingSets= (IWorkingSet[])iter.next();
+			workingSets= iter.next();
 			String[] names= new String[workingSets.length];
 			for (int j= 0; j < workingSets.length; j++)
 				names[j]= workingSets[j].getName();
@@ -168,7 +168,7 @@ public class SearchUtil {
 		for (int i= LRU_WORKINGSET_LIST_SIZE - 1; i >= 0; i--) {
 			String[] lruWorkingSetNames= settingsStore.getArray(STORE_LRU_WORKING_SET_NAMES + i);
 			if (lruWorkingSetNames != null) {
-				Set workingSets= new HashSet(2);
+				Set<IWorkingSet> workingSets= new HashSet<IWorkingSet>(2);
 				for (int j= 0; j < lruWorkingSetNames.length; j++) {
 					IWorkingSet workingSet= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(lruWorkingSetNames[j]);
 					if (workingSet != null) {
@@ -177,7 +177,7 @@ public class SearchUtil {
 				}
 				foundLRU= true;
 				if (!workingSets.isEmpty())
-					fgLRUWorkingSets.add((IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]));
+					fgLRUWorkingSets.add(workingSets.toArray(new IWorkingSet[workingSets.size()]));
 			}
 		}
 		if (!foundLRU)
@@ -213,7 +213,7 @@ public class SearchUtil {
 	}
 
 	public static void warnIfBinaryConstant(IJavaElement element, Shell shell) {
-		if (isBinaryPrimitiveConstantOrString(element))
+		if (isPrimitiveConstantOrString(element))
 			OptionalMessageDialog.open(
 				BIN_PRIM_CONST_WARN_DIALOG_ID,
 				shell,
@@ -225,7 +225,7 @@ public class SearchUtil {
 				0);
 	}
 
-	private static boolean isBinaryPrimitiveConstantOrString(IJavaElement element) {
+	private static boolean isPrimitiveConstantOrString(IJavaElement element) {
 		if (element != null && element.getElementType() == IJavaElement.FIELD) {
 			IField field= (IField)element;
 			int flags;
@@ -234,7 +234,7 @@ public class SearchUtil {
 			} catch (JavaModelException ex) {
 				return false;
 			}
-			return field.isBinary() && Flags.isStatic(flags) && Flags.isFinal(flags) && isPrimitiveOrString(field);
+			return Flags.isStatic(flags) && Flags.isFinal(flags) && isPrimitiveOrString(field);
 		}
 		return false;
 	}
@@ -248,6 +248,7 @@ public class SearchUtil {
 		}
 		char first= fieldType.charAt(0);
 		return (first != Signature.C_RESOLVED && first != Signature.C_UNRESOLVED && first != Signature.C_ARRAY)
-			|| (first == Signature.C_RESOLVED && fieldType.substring(1, fieldType.length() - 1).equals(String.class.getName()));
+			|| ((first == Signature.C_RESOLVED || first == Signature.C_UNRESOLVED) && fieldType.substring(1, fieldType.length() - 1).equals(String.class.getName())
+			|| (first == Signature.C_UNRESOLVED && fieldType.substring(1, fieldType.length() - 1).equals("String"))); //$NON-NLS-1$
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortAction.java
index ec69f76..1088301 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ public class SortAction extends Action {
 		fSortOrder= sortOrder;
 	}
 
+	@Override
 	public void run() {
 		BusyIndicator.showWhile(fPage.getViewer().getControl().getDisplay(), new Runnable() {
 			public void run() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java
index f3c510f..78ac4bc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SortingLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ public class SortingLabelProvider extends SearchLabelProvider {
 		fCurrentOrder= SHOW_ELEMENT_CONTAINER;
 	}
 
+	@Override
 	public Image getImage(Object element) {
 		Image image= null;
 		if (element instanceof IJavaElement || element instanceof IResource)
@@ -48,6 +49,7 @@ public class SortingLabelProvider extends SearchLabelProvider {
 		return getParticipantImage(element);
 	}
 
+	@Override
 	public final String getText(Object element) {
 		if (element instanceof IImportDeclaration)
 			element= ((IImportDeclaration)element).getParent().getParent();
@@ -66,6 +68,7 @@ public class SortingLabelProvider extends SearchLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getStyledText(java.lang.Object)
 	 */
+	@Override
 	public StyledString getStyledText(Object element) {
 		if (element instanceof IImportDeclaration)
 			element= ((IImportDeclaration)element).getParent().getParent();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/TextSearchTableContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/TextSearchTableContentProvider.java
index 5972d6e..5db1a79 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/TextSearchTableContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/TextSearchTableContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,18 +52,14 @@ public class TextSearchTableContentProvider implements IStructuredContentProvide
 
 	public void elementsChanged(Object[] updatedElements) {
 		//TODO: copied from JavaSearchTableContentProvider
-		int addCount= 0;
-		int removeCount= 0;
 		for (int i= 0; i < updatedElements.length; i++) {
 			if (fSearchResult.getMatchCount(updatedElements[i]) > 0) {
 				if (fTableViewer.testFindItem(updatedElements[i]) != null)
 					fTableViewer.refresh(updatedElements[i]);
 				else
 					fTableViewer.add(updatedElements[i]);
-				addCount++;
 			} else {
 				fTableViewer.remove(updatedElements[i]);
-				removeCount++;
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/WorkingSetsComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/WorkingSetsComparator.java
index 97a5671..63433b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/WorkingSetsComparator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/WorkingSetsComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,29 +16,14 @@ import com.ibm.icu.text.Collator;
 
 import org.eclipse.ui.IWorkingSet;
 
-class WorkingSetsComparator implements Comparator {
+class WorkingSetsComparator implements Comparator<IWorkingSet[]> {
 
 	private Collator fCollator= Collator.getInstance();
 
 	/*
 	 * @see Comparator#compare(Object, Object)
 	 */
-	public int compare(Object o1, Object o2) {
-		String name1= null;
-		String name2= null;
-
-		if (o1 instanceof IWorkingSet[]) {
-			IWorkingSet[] workingSets= (IWorkingSet[])o1;
-			if (workingSets.length > 0)
-				name1= workingSets[0].getLabel();
-		}
-
-		if (o2 instanceof IWorkingSet[]) {
-			IWorkingSet[] workingSets= (IWorkingSet[])o1;
-			if (workingSets.length > 0)
-				name2= workingSets[0].getLabel();
-		}
-
-		return fCollator.compare(name1, name2);
+	public int compare(IWorkingSet[] w1, IWorkingSet[] w2) {
+		return fCollator.compare(w1[0].getLabel(), w2[0].getLabel());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractInformationControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractInformationControl.java
index 8030794..d44f707 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractInformationControl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractInformationControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,6 +102,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 		/*
 		 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 		 */
+		@Override
 		public boolean select(Viewer viewer, Object parentElement, Object element) {
 			StringMatcher matcher= getMatcher();
 			if (matcher == null || !(viewer instanceof TreeViewer))
@@ -159,7 +160,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	 * The initially selected type.
 	 * @since 3.5
 	 */
-	private IType fInitiallySelectedType;
+	protected IType fInitiallySelectedType;
 
 	/**
 	 * Creates a tree information control with the given shell as parent. The given
@@ -202,6 +203,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	 * @return The control representing the main content.
 	 * @since 3.2
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		fTreeViewer= createTreeViewer(parent, fTreeStyle);
 
@@ -232,6 +234,9 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 			public void mouseMove(MouseEvent e) {
 				if (tree.equals(e.getSource())) {
 					Object o= tree.getItem(new Point(e.x, e.y));
+					if (fLastItem == null ^ o == null) {
+						tree.setCursor(o == null ? null : tree.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
+					}
 					if (o instanceof TreeItem) {
 						Rectangle clientArea = tree.getClientArea();
 						if (!o.equals(fLastItem)) {
@@ -254,12 +259,15 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 								tree.setSelection(new TreeItem[] { fLastItem });
 							}
 						}
+					} else if (o == null) {
+						fLastItem= null;
 					}
 				}
 			}
 		});
 
 		tree.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseUp(MouseEvent e) {
 
 				if (tree.getSelectionCount() < 1)
@@ -567,6 +575,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	 * @see org.eclipse.jface.dialogs.PopupDialog#fillDialogMenu(IMenuManager)
 	 * @since 3.2
 	 */
+	@Override
 	protected void fillDialogMenu(IMenuManager dialogMenu) {
 		super.fillDialogMenu(dialogMenu);
 		fillViewMenu(dialogMenu);
@@ -574,7 +583,6 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 
 	protected void inputChanged(Object newInput, Object newSelection) {
 		fFilterText.setText(""); //$NON-NLS-1$
-		fTreeViewer.setInput(newInput);
 		fInitiallySelectedType= null;
 		if (newSelection instanceof IJavaElement) {
 			IJavaElement javaElement= ((IJavaElement)newSelection);
@@ -583,6 +591,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 			else
 				fInitiallySelectedType= (IType)javaElement.getAncestor(IJavaElement.TYPE);
 		}
+		fTreeViewer.setInput(newInput);
 		if (newSelection != null)
 			fTreeViewer.setSelection(new StructuredSelection(newSelection));
 	}
@@ -604,6 +613,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	 * @see org.eclipse.jface.dialogs.PopupDialog#open()
 	 * @since 3.3
 	 */
+	@Override
 	public int open() {
 		addHandlerAndKeyBindingSupport();
 		return super.open();
@@ -767,11 +777,11 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	final protected KeySequence[] getInvokingCommandKeySequences() {
 		if (fInvokingCommandKeySequences == null) {
 			if (getInvokingCommand() != null) {
-				List list= getInvokingCommand().getKeySequenceBindings();
+				List<IKeySequenceBinding> list= getInvokingCommand().getKeySequenceBindings();
 				if (!list.isEmpty()) {
 					fInvokingCommandKeySequences= new KeySequence[list.size()];
 					for (int i= 0; i < fInvokingCommandKeySequences.length; i++) {
-						fInvokingCommandKeySequences[i]= ((IKeySequenceBinding) list.get(i)).getKeySequence();
+						fInvokingCommandKeySequences[i]= list.get(i).getKeySequence();
 					}
 					return fInvokingCommandKeySequences;
 				}
@@ -783,6 +793,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	/*
 	 * @see org.eclipse.jface.dialogs.PopupDialog#getDialogSettings()
 	 */
+	@Override
 	protected IDialogSettings getDialogSettings() {
 		String sectionName= getId();
 
@@ -798,6 +809,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	 *
 	 * @since 3.2
 	 */
+	@Override
 	protected Control createTitleMenuArea(Composite parent) {
 		fViewMenuButtonComposite= (Composite) super.createTitleMenuArea(parent);
 
@@ -813,6 +825,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 			/*
 			 * @see org.eclipse.jface.action.Action#run()
 			 */
+			@Override
 			public void run() {
 				showDialogMenu();
 			}
@@ -828,6 +841,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	 * if there is no header specified.
 	 * @since 3.2
 	 */
+	@Override
 	protected Control createTitleControl(Composite parent) {
 		if (hasHeader()) {
 			return super.createTitleControl(parent);
@@ -839,6 +853,7 @@ public abstract class AbstractInformationControl extends PopupDialog implements
 	/*
 	 * @see org.eclipse.jface.dialogs.PopupDialog#setTabOrder(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected void setTabOrder(Composite composite) {
 		if (hasHeader()) {
 			composite.setTabList(new Control[] { fFilterText, fTreeViewer.getTree() });
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractJavaScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractJavaScanner.java
index 6f5966e..0b21c31 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractJavaScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/AbstractJavaScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,7 +67,7 @@ public abstract class AbstractJavaScanner extends BufferedRuleBasedScanner {
 	private IColorManager fColorManager;
 	private IPreferenceStore fPreferenceStore;
 
-	private Map fTokenMap= new HashMap();
+	private Map<String, Token> fTokenMap= new HashMap<String, Token>();
 	private String[] fPropertyNamesColor;
 	/**
 	 * Preference keys for boolean preferences which are <code>true</code>,
@@ -128,7 +128,7 @@ public abstract class AbstractJavaScanner extends BufferedRuleBasedScanner {
 	/**
 	 * Creates the list of rules controlling this scanner.
 	 */
-	abstract protected List createRules();
+	abstract protected List<IRule> createRules();
 
 
 	/**
@@ -186,6 +186,7 @@ public abstract class AbstractJavaScanner extends BufferedRuleBasedScanner {
 		return colorKey + PreferenceConstants.EDITOR_UNDERLINE_SUFFIX;
 	}
 
+	@Override
 	public IToken nextToken() {
 		if (fNeedsLazyColorLoading)
 			resolveProxyAttributes();
@@ -218,7 +219,7 @@ public abstract class AbstractJavaScanner extends BufferedRuleBasedScanner {
 		if (!fNeedsLazyColorLoading)
 			fTokenMap.put(colorKey, new Token(createTextAttribute(colorKey, boldKey, italicKey, strikethroughKey, underlineKey)));
 		else {
-			Token token= ((Token)fTokenMap.get(colorKey));
+			Token token= fTokenMap.get(colorKey);
 			if (token != null)
 				token.setData(createTextAttribute(colorKey, boldKey, italicKey, strikethroughKey, underlineKey));
 		}
@@ -256,11 +257,11 @@ public abstract class AbstractJavaScanner extends BufferedRuleBasedScanner {
 	protected Token getToken(String key) {
 		if (fNeedsLazyColorLoading)
 			resolveProxyAttributes();
-		return (Token) fTokenMap.get(key);
+		return fTokenMap.get(key);
 	}
 
 	private void initializeRules() {
-		List rules= createRules();
+		List<IRule> rules= createRules();
 		if (rules != null) {
 			IRule[] result= new IRule[rules.size()];
 			rules.toArray(result);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/ChangeHoverInformationControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/ChangeHoverInformationControl.java
index d2e67db..45bfc7e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/ChangeHoverInformationControl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/ChangeHoverInformationControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ class ChangeHoverInformationControl extends SourceViewerInformationControl {
 	/*
 	 * @see org.eclipse.jface.text.IInformationControl#setSizeConstraints(int, int)
 	 */
+	@Override
 	public void setSizeConstraints(int maxWidth, int maxHeight) {
 		fMaxWidth= maxWidth;
 		fMaxHeight= maxHeight;
@@ -78,6 +79,7 @@ class ChangeHoverInformationControl extends SourceViewerInformationControl {
 	/*
 	 * @see org.eclipse.jface.text.IInformationControl#computeSizeHint()
 	 */
+	@Override
 	public Point computeSizeHint() {
 		Point size= super.computeSizeHint();
 		size.x= Math.min(size.x, fMaxWidth);
@@ -138,6 +140,7 @@ class ChangeHoverInformationControl extends SourceViewerInformationControl {
 	/*
 	 * @see org.eclipse.jface.text.IInformationControl#setInformation(java.lang.String)
 	 */
+	@Override
 	public void setInformation(String content) {
 		super.setInformation(content);
 		IDocument doc= getViewer().getDocument();
@@ -211,6 +214,7 @@ class ChangeHoverInformationControl extends SourceViewerInformationControl {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.hover.SourceViewerInformationControl#hasContents()
 	 */
+	@Override
 	public boolean hasContents() {
 		return super.hasContents() && fMaxWidth > 0;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/CombinedWordRule.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/CombinedWordRule.java
index 7bf8f22..0add2a8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/CombinedWordRule.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/CombinedWordRule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ public class CombinedWordRule implements IRule {
 	public static class WordMatcher {
 
 		/** The table of predefined words and token for this matcher */
-		private Map fWords= new HashMap();
+		private Map<CharacterBuffer, IToken> fWords= new HashMap<CharacterBuffer, IToken>();
 
 		/**
 		 * Adds a word and the token to be returned if it is detected.
@@ -72,7 +72,7 @@ public class CombinedWordRule implements IRule {
 		 * @return the token or <code>null</code> if none is associated by this matcher
 		 */
 		public IToken evaluate(ICharacterScanner scanner, CharacterBuffer word) {
-			IToken token= (IToken) fWords.get(word);
+			IToken token= fWords.get(word);
 			if (token != null)
 				return token;
 			return Token.UNDEFINED;
@@ -157,6 +157,7 @@ public class CombinedWordRule implements IRule {
 		 *
 		 * @return the content
 		 */
+		@Override
 		public String toString() {
 			return new String(fContent, 0, fLength);
 		}
@@ -174,6 +175,7 @@ public class CombinedWordRule implements IRule {
 		/*
 		 * @see java.lang.Object#hashCode()
 		 */
+		@Override
 		public int hashCode() {
 			if (fIsHashCached)
 				return fHashCode;
@@ -190,6 +192,7 @@ public class CombinedWordRule implements IRule {
 		/*
 		 * @see java.lang.Object#equals(java.lang.Object)
 		 */
+		@Override
 		public boolean equals(Object obj) {
 			if (obj == this)
 				return true;
@@ -235,7 +238,7 @@ public class CombinedWordRule implements IRule {
 	private CharacterBuffer fBuffer= new CharacterBuffer(16);
 
 	/** List of word matchers */
-	private List fMatchers= new ArrayList();
+	private List<WordMatcher> fMatchers= new ArrayList<WordMatcher>();
 
 	/**
 	 * Creates a rule which, with the help of an word detector, will return the token
@@ -344,7 +347,7 @@ public class CombinedWordRule implements IRule {
 				scanner.unread();
 
 				for (int i= 0, n= fMatchers.size(); i < n; i++) {
-					IToken token= ((WordMatcher) fMatchers.get(i)).evaluate(scanner, fBuffer);
+					IToken token= fMatchers.get(i).evaluate(scanner, fBuffer);
 					if (!token.isUndefined())
 						return token;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/DocumentCharacterIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/DocumentCharacterIterator.java
index 3e39f38..9156ec2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/DocumentCharacterIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/DocumentCharacterIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -172,6 +172,7 @@ public class DocumentCharacterIterator implements CharacterIterator, CharSequenc
 	/*
 	 * @see java.text.CharacterIterator#clone()
 	 */
+	@Override
 	public Object clone() {
 		try {
 			return super.clone();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/HTMLAnnotationHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/HTMLAnnotationHover.java
index 1d4bae0..8f9334b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/HTMLAnnotationHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/HTMLAnnotationHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class HTMLAnnotationHover extends DefaultAnnotationHover {
 	/*
 	 * Formats a message as HTML text.
 	 */
+	@Override
 	protected String formatSingleMessage(String message) {
 		StringBuffer buffer= new StringBuffer();
 		HTMLPrinter.addPageProlog(buffer);
@@ -51,13 +52,14 @@ public class HTMLAnnotationHover extends DefaultAnnotationHover {
 	/*
 	 * Formats several message as HTML text.
 	 */
+	@Override
 	protected String formatMultipleMessages(List messages) {
 		StringBuffer buffer= new StringBuffer();
 		HTMLPrinter.addPageProlog(buffer);
 		HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(JavaUIMessages.JavaAnnotationHover_multipleMarkersAtThisLine));
 
 		HTMLPrinter.startBulletList(buffer);
-		Iterator e= messages.iterator();
+		Iterator<?> e= messages.iterator();
 		while (e.hasNext())
 			HTMLPrinter.addBullet(buffer, HTMLPrinter.convertToHTMLContent((String) e.next()));
 		HTMLPrinter.endBulletList(buffer);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java
index f4c96e2..2d2d692 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public class JavaBreakIterator extends BreakIterator {
 	}
 
 	static final class Whitespace extends Run {
+		@Override
 		protected boolean isValid(char ch) {
 			return Character.isWhitespace(ch) && ch != '\n' && ch != '\r';
 		}
@@ -88,6 +89,7 @@ public class JavaBreakIterator extends BreakIterator {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#init()
 		 */
+		@Override
 		protected void init() {
 			super.init();
 			fState= INIT;
@@ -96,6 +98,7 @@ public class JavaBreakIterator extends BreakIterator {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#consume(char)
 		 */
+		@Override
 		protected boolean consume(char ch) {
 			if (!isValid(ch) || fState == EXIT)
 				return false;
@@ -113,6 +116,7 @@ public class JavaBreakIterator extends BreakIterator {
 			}
 		}
 
+		@Override
 		protected boolean isValid(char ch) {
 			return ch == '\n' || ch == '\r';
 		}
@@ -122,6 +126,7 @@ public class JavaBreakIterator extends BreakIterator {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
 		 */
+		@Override
 		protected boolean isValid(char ch) {
 			return Character.isJavaIdentifierPart(ch);
 		}
@@ -155,6 +160,7 @@ public class JavaBreakIterator extends BreakIterator {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#init()
 		 */
+		@Override
 		protected void init() {
 			super.init();
 			fState= S_INIT;
@@ -163,6 +169,7 @@ public class JavaBreakIterator extends BreakIterator {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#consumes(char)
 		 */
+		@Override
 		protected boolean consume(char ch) {
 			int kind= getKind(ch);
 			fState= MATRIX[fState][kind];
@@ -201,6 +208,7 @@ public class JavaBreakIterator extends BreakIterator {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
 		 */
+		@Override
 		protected boolean isValid(char ch) {
 			return Character.isJavaIdentifierPart(ch);
 		}
@@ -210,6 +218,7 @@ public class JavaBreakIterator extends BreakIterator {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
 		 */
+		@Override
 		protected boolean isValid(char ch) {
 			return !Character.isWhitespace(ch) && !Character.isJavaIdentifierPart(ch);
 		}
@@ -239,6 +248,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#current()
 	 */
+	@Override
 	public int current() {
 		return fIndex;
 	}
@@ -246,6 +256,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#first()
 	 */
+	@Override
 	public int first() {
 		fIndex= fIterator.first();
 		return fIndex;
@@ -254,6 +265,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#following(int)
 	 */
+	@Override
 	public int following(int offset) {
 		// work around too eager IAEs in standard implementation
 		if (offset == getText().getEndIndex())
@@ -319,6 +331,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#getText()
 	 */
+	@Override
 	public CharacterIterator getText() {
 		return fIterator.getText();
 	}
@@ -326,6 +339,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#isBoundary(int)
 	 */
+	@Override
 	public boolean isBoundary(int offset) {
         if (offset == getText().getBeginIndex())
             return true;
@@ -336,6 +350,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#last()
 	 */
+	@Override
 	public int last() {
 		fIndex= fIterator.last();
 		return fIndex;
@@ -344,6 +359,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#next()
 	 */
+	@Override
 	public int next() {
 		fIndex= following(fIndex);
 		return fIndex;
@@ -352,6 +368,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#next(int)
 	 */
+	@Override
 	public int next(int n) {
 		return fIterator.next(n);
 	}
@@ -359,6 +376,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#preceding(int)
 	 */
+	@Override
 	public int preceding(int offset) {
 		if (offset == getText().getBeginIndex())
 			return DONE;
@@ -383,6 +401,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#previous()
 	 */
+	@Override
 	public int previous() {
 		fIndex= preceding(fIndex);
 		return fIndex;
@@ -391,6 +410,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#setText(java.lang.String)
 	 */
+	@Override
 	public void setText(String newText) {
 		setText((CharSequence) newText);
 	}
@@ -408,6 +428,7 @@ public class JavaBreakIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#setText(java.text.CharacterIterator)
 	 */
+	@Override
 	public void setText(CharacterIterator newText) {
 		if (newText instanceof CharSequence) {
 			fText= (CharSequence) newText;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaChangeHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaChangeHover.java
index d695918..dda2bc8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaChangeHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaChangeHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,7 @@ public class JavaChangeHover extends LineChangeHover  {
 	/*
 	 * @see org.eclipse.ui.internal.editors.text.LineChangeHover#formatSource(java.lang.String)
 	 */
+	@Override
 	protected String formatSource(String content) {
 		return content;
 	}
@@ -73,6 +74,7 @@ public class JavaChangeHover extends LineChangeHover  {
 	/*
 	 * @see org.eclipse.jface.text.source.IAnnotationHoverExtension#getHoverControlCreator()
 	 */
+	@Override
 	public IInformationControlCreator getHoverControlCreator() {
 		return new IInformationControlCreator() {
 			public IInformationControl createInformationControl(Shell parent) {
@@ -87,6 +89,7 @@ public class JavaChangeHover extends LineChangeHover  {
 	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 * @since 3.2
 	 */
+	@Override
 	public IInformationControlCreator getInformationPresenterControlCreator() {
 		return new IInformationControlCreator() {
 			public IInformationControl createInformationControl(Shell parent) {
@@ -100,6 +103,7 @@ public class JavaChangeHover extends LineChangeHover  {
 	/*
 	 * @see org.eclipse.jface.text.source.LineChangeHover#computeLineRange(org.eclipse.jface.text.source.ISourceViewer, int, int, int)
 	 */
+	@Override
 	protected Point computeLineRange(ISourceViewer viewer, int line, int first, int number) {
 		Point lineRange= super.computeLineRange(viewer, line, first, number);
 		if (lineRange != null) {
@@ -142,6 +146,7 @@ public class JavaChangeHover extends LineChangeHover  {
 	/*
 	 * @see org.eclipse.jface.text.source.LineChangeHover#getTabReplacement()
 	 */
+	@Override
 	protected String getTabReplacement() {
 		return Character.toString('\t');
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCodeReader.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCodeReader.java
index dd4ccc5..823c5be 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCodeReader.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCodeReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ public class JavaCodeReader extends SingleCharReader {
 	/*
 	 * @see Reader#close()
 	 */
+	@Override
 	public void close() throws IOException {
 		fDocument= null;
 	}
@@ -84,6 +85,7 @@ public class JavaCodeReader extends SingleCharReader {
 	/*
 	 * @see SingleCharReader#read()
 	 */
+	@Override
 	public int read() throws IOException {
 		try {
 			return fForward ? readForwards() : readBackwards();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaColorManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaColorManager.java
index 427518a..11baad3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaColorManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaColorManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,8 +27,8 @@ import org.eclipse.jdt.ui.text.IColorManagerExtension;
  */
 public class JavaColorManager implements IColorManager, IColorManagerExtension {
 
-	protected Map fKeyTable= new HashMap(10);
-	protected Map fDisplayTable= new HashMap(2);
+	protected Map<String, RGB> fKeyTable= new HashMap<String, RGB>(10);
+	protected Map<Display, Map<RGB, Color>> fDisplayTable= new HashMap<Display, Map<RGB, Color>>(2);
 
 	/**
 	 * Flag which tells if the colors are automatically disposed when
@@ -60,11 +60,11 @@ public class JavaColorManager implements IColorManager, IColorManagerExtension {
 	}
 
 	public void dispose(Display display) {
-		Map colorTable= (Map) fDisplayTable.get(display);
+		Map<RGB, Color> colorTable= fDisplayTable.get(display);
 		if (colorTable != null) {
-			Iterator e= colorTable.values().iterator();
+			Iterator<Color> e= colorTable.values().iterator();
 			while (e.hasNext()) {
-				Color color= (Color)e.next();
+				Color color= e.next();
 				if (color != null && !color.isDisposed())
 					color.dispose();
 			}
@@ -80,9 +80,9 @@ public class JavaColorManager implements IColorManager, IColorManagerExtension {
 			return null;
 
 		final Display display= Display.getCurrent();
-		Map colorTable= (Map) fDisplayTable.get(display);
+		Map<RGB, Color> colorTable= fDisplayTable.get(display);
 		if (colorTable == null) {
-			colorTable= new HashMap(10);
+			colorTable= new HashMap<RGB, Color>(10);
 			fDisplayTable.put(display, colorTable);
 			if (fAutoDisposeOnDisplayDispose) {
 				display.disposeExec(new Runnable() {
@@ -93,7 +93,7 @@ public class JavaColorManager implements IColorManager, IColorManagerExtension {
 			}
 		}
 
-		Color color= (Color) colorTable.get(rgb);
+		Color color= colorTable.get(rgb);
 		if (color == null) {
 			color= new Color(Display.getCurrent(), rgb);
 			colorTable.put(rgb, color);
@@ -118,7 +118,7 @@ public class JavaColorManager implements IColorManager, IColorManagerExtension {
 		if (key == null)
 			return null;
 
-		RGB rgb= (RGB) fKeyTable.get(key);
+		RGB rgb= fKeyTable.get(key);
 		return getColor(rgb);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java
index 51500a5..1a27daf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.PropertyChangeEvent;
 
 import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IRule;
 import org.eclipse.jface.text.rules.IToken;
 import org.eclipse.jface.text.rules.IWordDetector;
 import org.eclipse.jface.text.rules.Token;
@@ -33,6 +34,7 @@ import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.ui.text.IColorManager;
 import org.eclipse.jdt.ui.text.IJavaColorConstants;
 
+import org.eclipse.jdt.internal.ui.text.CombinedWordRule.CharacterBuffer;
 import org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher;
 
 
@@ -59,7 +61,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 		 * Uppercase words
 		 * @since 3.0
 		 */
-		private Map fUppercaseWords= new HashMap();
+		private Map<CharacterBuffer, IToken> fUppercaseWords= new HashMap<CharacterBuffer, IToken>();
 		/**
 		 * <code>true</code> if task tag detection is case-sensitive.
 		 * @since 3.0
@@ -79,6 +81,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#clearWords()
 		 * @since 3.0
 		 */
+		@Override
 		public synchronized void clearWords() {
 			super.clearWords();
 			fUppercaseWords.clear();
@@ -107,6 +110,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#addWord(java.lang.String, org.eclipse.jface.text.rules.IToken)
 		 * @since 3.0
 		 */
+		@Override
 		public synchronized void addWord(String word, IToken token) {
 			Assert.isNotNull(word);
 			Assert.isNotNull(token);
@@ -119,6 +123,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#evaluate(org.eclipse.jface.text.rules.ICharacterScanner, org.eclipse.jdt.internal.ui.text.CombinedWordRule.CharacterBuffer)
 		 * @since 3.0
 		 */
+		@Override
 		public synchronized IToken evaluate(ICharacterScanner scanner, CombinedWordRule.CharacterBuffer word) {
 			if (fCaseSensitive)
 				return super.evaluate(scanner, word);
@@ -127,7 +132,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 			for (int i= 0, n= word.length(); i < n; i++)
 				fBuffer.append(Character.toUpperCase(word.charAt(i)));
 
-			IToken token= (IToken) fUppercaseWords.get(fBuffer);
+			IToken token= fUppercaseWords.get(fBuffer);
 			if (token != null)
 				return token;
 			return Token.UNDEFINED;
@@ -206,15 +211,16 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 	/*
 	 * @see AbstractJavaScanner#createRules()
 	 */
-	protected List createRules() {
-		List list= new ArrayList();
+	@Override
+	protected List<IRule> createRules() {
+		List<IRule> list= new ArrayList<IRule>();
 		Token defaultToken= getToken(fDefaultTokenProperty);
 
-		List matchers= createMatchers();
+		List<WordMatcher> matchers= createMatchers();
 		if (matchers.size() > 0) {
 			CombinedWordRule combinedWordRule= new CombinedWordRule(new AtJavaIdentifierDetector(), defaultToken);
 			for (int i= 0, n= matchers.size(); i < n; i++)
-				combinedWordRule.addWordMatcher((WordMatcher) matchers.get(i));
+				combinedWordRule.addWordMatcher(matchers.get(i));
 			list.add(combinedWordRule);
 		}
 
@@ -228,8 +234,8 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 	 *
 	 * @return the list of word matchers
 	 */
-	protected List createMatchers() {
-		List list= new ArrayList();
+	protected List<WordMatcher> createMatchers() {
+		List<WordMatcher> list= new ArrayList<WordMatcher>();
 
 		// Add rule for Task Tags.
 		boolean isCaseSensitive= true;
@@ -254,6 +260,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#affectsBehavior(org.eclipse.jface.util.PropertyChangeEvent)
 	 */
+	@Override
 	public boolean affectsBehavior(PropertyChangeEvent event) {
 		return event.getProperty().equals(COMPILER_TASK_TAGS) || event.getProperty().equals(COMPILER_TASK_CASE_SENSITIVE) || super.affectsBehavior(event);
 	}
@@ -261,6 +268,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#adaptToPreferenceChange(org.eclipse.jface.util.PropertyChangeEvent)
 	 */
+	@Override
 	public void adaptToPreferenceChange(PropertyChangeEvent event) {
 		if (fTaskTagMatcher != null && event.getProperty().equals(COMPILER_TASK_TAGS)) {
 			Object value= event.getNewValue();
@@ -281,6 +289,7 @@ public class JavaCommentScanner extends AbstractJavaScanner{
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getTokenProperties()
 	 */
+	@Override
 	protected String[] getTokenProperties() {
 		return fTokenProperties;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java
index 35d9f61..303b0aa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCompositeReconcilingStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,7 @@ public class JavaCompositeReconcilingStrategy  extends CompositeReconcilingStrat
 	/*
 	 * @see org.eclipse.jface.text.reconciler.CompositeReconcilingStrategy#reconcile(org.eclipse.jface.text.reconciler.DirtyRegion, org.eclipse.jface.text.IRegion)
 	 */
+	@Override
 	public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
 		try {
 			IProblemRequestorExtension e= getProblemRequestorExtension();
@@ -93,6 +94,7 @@ public class JavaCompositeReconcilingStrategy  extends CompositeReconcilingStrat
 	/*
 	 * @see org.eclipse.jface.text.reconciler.CompositeReconcilingStrategy#reconcile(org.eclipse.jface.text.IRegion)
 	 */
+	@Override
 	public void reconcile(IRegion partition) {
 		try {
 			IProblemRequestorExtension e= getProblemRequestorExtension();
@@ -124,6 +126,7 @@ public class JavaCompositeReconcilingStrategy  extends CompositeReconcilingStrat
 	/*
 	 * @see org.eclipse.jface.text.reconciler.CompositeReconcilingStrategy#initialReconcile()
 	 */
+	@Override
 	public void initialReconcile() {
 		try {
 			IProblemRequestorExtension e= getProblemRequestorExtension();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaElementProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaElementProvider.java
index 8bddb19..ec40ed8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaElementProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaElementProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import org.eclipse.jface.text.information.IInformationProviderExtension;
 import org.eclipse.ui.IEditorPart;
 
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaModelException;
 
 import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
@@ -78,8 +79,11 @@ public class JavaElementProvider implements IInformationProvider, IInformationPr
 		try {
 			if (fUseCodeResolve) {
 				IStructuredSelection sel= SelectionConverter.getStructuredSelection(fEditor);
-				if (!sel.isEmpty())
-					return sel.getFirstElement();
+				if (!sel.isEmpty()) {
+					Object element= sel.getFirstElement();
+					if (!(element instanceof ITypeParameter))
+						return element;
+				}
 			}
 			IJavaElement element= SelectionConverter.getElementAtOffset(fEditor, false);
 			if (element != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaHeuristicScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaHeuristicScanner.java
index de41a5d..f4084a7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaHeuristicScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaHeuristicScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,8 @@ public final class JavaHeuristicScanner implements Symbols {
 	private static final char EQUAL= '=';
 	private static final char LANGLE= '<';
 	private static final char RANGLE= '>';
+	private static final char PLUS= '+';
+	private static final char AT= '@';
 
 	/**
 	 * Specifies the stop condition, upon which the <code>scanXXX</code> methods will decide whether
@@ -95,6 +97,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
 		 */
+		@Override
 		public boolean stop(char ch, int position, boolean forward) {
 			return !Character.isWhitespace(ch);
 		}
@@ -109,6 +112,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
 		 */
+		@Override
 		public boolean stop(char ch, int position, boolean forward) {
 			return super.stop(ch, position, true) && isDefaultPartition(position);
 		}
@@ -116,6 +120,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#nextPosition(int, boolean)
 		 */
+		@Override
 		public int nextPosition(int position, boolean forward) {
 			ITypedRegion partition= getPartition(position);
 			if (fPartition.equals(partition.getType()))
@@ -141,6 +146,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
 		 */
+		@Override
 		public boolean stop(char ch, int position, boolean forward) {
 			return !Character.isJavaIdentifierPart(ch);
 		}
@@ -155,6 +161,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
 		 */
+		@Override
 		public boolean stop(char ch, int position, boolean forward) {
 			return super.stop(ch, position, true) || !isDefaultPartition(position);
 		}
@@ -162,6 +169,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#nextPosition(int, boolean)
 		 */
+		@Override
 		public int nextPosition(int position, boolean forward) {
 			ITypedRegion partition= getPartition(position);
 			if (fPartition.equals(partition.getType()))
@@ -208,6 +216,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char, int)
 		 */
+		@Override
 		public boolean stop(char ch, int position, boolean forward) {
 			return Arrays.binarySearch(fChars, ch) >= 0 && isDefaultPartition(position);
 		}
@@ -215,6 +224,7 @@ public final class JavaHeuristicScanner implements Symbols {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#nextPosition(int, boolean)
 		 */
+		@Override
 		public int nextPosition(int position, boolean forward) {
 			ITypedRegion partition= getPartition(position);
 			if (fPartition.equals(partition.getType()))
@@ -333,6 +343,10 @@ public final class JavaHeuristicScanner implements Symbols {
 				return TokenLESSTHAN;
 			case RANGLE:
 				return TokenGREATERTHAN;
+			case PLUS:
+				return TokenPLUS;
+			case AT:
+				return TokenAT;
 		}
 
 		// else
@@ -405,6 +419,10 @@ public final class JavaHeuristicScanner implements Symbols {
 				return TokenLESSTHAN;
 			case RANGLE:
 				return TokenGREATERTHAN;
+			case PLUS:
+				return TokenPLUS;
+			case AT:
+				return TokenAT;
 		}
 
 		// else
@@ -485,6 +503,8 @@ public final class JavaHeuristicScanner implements Symbols {
 					return TokenSTATIC;
 				if ("switch".equals(s)) //$NON-NLS-1$
 					return TokenSWITCH;
+				if ("throws".equals(s)) //$NON-NLS-1$
+					return TokenTHROWS;
 				break;
 			case 7:
 				if ("default".equals(s)) //$NON-NLS-1$
@@ -672,13 +692,34 @@ public final class JavaHeuristicScanner implements Symbols {
 	}
 
 	/**
-	 * Finds the lowest position <code>p</code> in <code>fDocument</code> such that <code>start</code> <= p <
-	 * <code>bound</code> and <code>condition.stop(fDocument.getChar(p), p)</code> evaluates to <code>true</code>.
-	 *
+	 * Finds the highest position in <code>fDocument</code> such that the position is <=
+	 * <code>position</code> and > <code>bound</code> and
+	 * <code>Character.isWhitespace(fDocument.getChar(pos))</code> evaluates to <code>false</code>
+	 * and the position can be in any partition.
+	 * 
+	 * @param position the first character position in <code>fDocument</code> to be considered
+	 * @param bound the first position in <code>fDocument</code> to not consider any more, with
+	 *            <code>bound</code> < <code>position</code>, or <code>UNBOUND</code>
+	 * @return the highest position of a non-whitespace character in (<code>bound</code>,
+	 *         <code>position</code>] that resides in a Java partition, or <code>NOT_FOUND</code> if
+	 *         none can be found
+	 * @since 3.7
+	 */
+	public int findNonWhitespaceBackwardInAnyPartition(int position, int bound) {
+		return scanBackward(position, bound, fNonWS);
+	}
+
+	/**
+	 * Finds the lowest position <code>p</code> in <code>fDocument</code> such that
+	 * <code>start</code> <= p < <code>bound</code> and
+	 * <code>condition.stop(fDocument.getChar(p), p)</code> evaluates to <code>true</code>.
+	 * 
 	 * @param start the first character position in <code>fDocument</code> to be considered
-	 * @param bound the first position in <code>fDocument</code> to not consider any more, with <code>bound</code> > <code>start</code>, or <code>UNBOUND</code>
+	 * @param bound the first position in <code>fDocument</code> to not consider any more, with
+	 *            <code>bound</code> > <code>start</code>, or <code>UNBOUND</code>
 	 * @param condition the <code>StopCondition</code> to check
-	 * @return the lowest position in [<code>start</code>, <code>bound</code>) for which <code>condition</code> holds, or <code>NOT_FOUND</code> if none can be found
+	 * @return the lowest position in [<code>start</code>, <code>bound</code>) for which
+	 *         <code>condition</code> holds, or <code>NOT_FOUND</code> if none can be found
 	 */
 	public int scanForward(int start, int bound, StopCondition condition) {
 		Assert.isLegal(start >= 0);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaIndenter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaIndenter.java
index a5538b1..1938e18 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaIndenter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaIndenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,8 @@ import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
 
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
 
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
 
 /**
  * Uses the {@link org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner} to
@@ -50,7 +52,6 @@ public final class JavaIndenter {
 		final boolean prefTernaryDeepAlign;
 		final int prefTernaryIndent;
 		final int prefCaseIndent;
-		final int prefAssignmentIndent;
 		final int prefCaseBlockIndent;
 		final int prefSimpleIndent;
 		final int prefBracketIndent;
@@ -110,7 +111,6 @@ public final class JavaIndenter {
 				prefTernaryDeepAlign= false;
 				prefTernaryIndent= prefContinuationIndent;
 				prefCaseIndent= 0;
-				prefAssignmentIndent= prefBlockIndent;
 				prefCaseBlockIndent= prefBlockIndent;
 				prefIndentBracesForBlocks= false;
 				prefSimpleIndent= (prefIndentBracesForBlocks && prefBlockIndent == 0) ? 1 : prefBlockIndent;
@@ -140,7 +140,6 @@ public final class JavaIndenter {
 				prefTernaryDeepAlign= prefTernaryDeepAlign();
 				prefTernaryIndent= prefTernaryIndent();
 				prefCaseIndent= prefCaseIndent();
-				prefAssignmentIndent= prefAssignmentIndent();
 				prefCaseBlockIndent= prefCaseBlockIndent();
 				prefIndentBracesForBlocks= prefIndentBracesForBlocks();
 				prefSimpleIndent= prefSimpleIndent();
@@ -231,10 +230,6 @@ public final class JavaIndenter {
 				return 0;
 		}
 
-		private int prefAssignmentIndent() {
-			return prefBlockIndent();
-		}
-
 		private int prefCaseBlockIndent() {
 			if (DefaultCodeFormatterConstants.TRUE.equals(getCoreFormatterOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_CASES)))
 				return prefBlockIndent();
@@ -750,6 +745,7 @@ public final class JavaIndenter {
 		boolean matchBrace= false;
 		boolean matchParen= false;
 		boolean matchCase= false;
+		boolean throwsClause= false;
 
 		// account for un-indentation characters already typed in, but after position
 		// if they are on a line by themselves, the indentation gets adjusted
@@ -777,7 +773,7 @@ public final class JavaIndenter {
 					case Symbols.TokenLBRACE: // for opening-brace-on-new-line style
 						if (bracelessBlockStart && !fPrefs.prefIndentBracesForBlocks)
 							unindent= true;
-						else if ((prevToken == Symbols.TokenCOLON || prevToken == Symbols.TokenEQUAL || prevToken == Symbols.TokenRBRACKET) && !fPrefs.prefIndentBracesForArrays)
+						else if ((prevToken == Symbols.TokenCOLON || prevToken == Symbols.TokenEQUAL) && !fPrefs.prefIndentBracesForArrays)
 							unindent= true;
 						else if (!bracelessBlockStart && fPrefs.prefIndentBracesForMethods)
 							indent= true;
@@ -790,6 +786,21 @@ public final class JavaIndenter {
 						if (isFirstTokenOnLine)
 							matchParen= true;
 						break;
+					case Symbols.TokenTHROWS:
+						throwsClause= true;
+						break;
+					case Symbols.TokenPLUS:
+						if (isStringContinuation(offset)) {
+							if (isSecondLineOfStringContinuation(offset)) {
+								fAlign= JavaHeuristicScanner.NOT_FOUND;
+								fIndent= fPrefs.prefContinuationIndent;
+							} else {
+								int previousLineOffset= fDocument.getLineOffset(fDocument.getLineOfOffset(offset) - 1);
+								fAlign= fScanner.findNonWhitespaceForwardInAnyPartition(previousLineOffset, JavaHeuristicScanner.UNBOUND);
+							}
+							return fPosition;
+						}
+						break;
 				}
 			} catch (BadLocationException e) {
 			}
@@ -798,7 +809,7 @@ public final class JavaIndenter {
 			danglingElse= false;
 		}
 
-		int ref= findReferencePosition(offset, danglingElse, matchBrace, matchParen, matchCase);
+		int ref= findReferencePosition(offset, danglingElse, matchBrace, matchParen, matchCase, throwsClause);
 		if (unindent)
 			fIndent--;
 		if (indent)
@@ -807,27 +818,130 @@ public final class JavaIndenter {
 	}
 
 	/**
-	 * Returns the reference position regarding to indentation for <code>position</code>,
-	 * or <code>NOT_FOUND</code>.<code>fIndent</code> will contain the
-	 * relative indentation (in indentation units, not characters) after the
-	 * call. If there is a special alignment (e.g. for a method declaration
-	 * where parameters should be aligned), <code>fAlign</code> will contain
-	 * the absolute position of the alignment reference in <code>fDocument</code>,
-	 * otherwise <code>fAlign</code> is set to <code>JavaHeuristicScanner.NOT_FOUND</code>.
-	 *
+	 * Tells whether the given string is a continuation expression.
+	 * 
+	 * @param offset the offset for which the check is done
+	 * @return <code>true</code> if the offset is part of a string continuation, <code>false</code>
+	 *         otherwise
+	 * @since 3.7
+	 */
+	private boolean isStringContinuation(int offset) {
+		int nextNonWSCharPosition= fScanner.findNonWhitespaceBackwardInAnyPartition(offset - 1, JavaHeuristicScanner.UNBOUND);
+		try {
+			if (fDocument.getChar(nextNonWSCharPosition) == '"')
+				return true;
+			else
+				return false;
+		} catch (BadLocationException e) {
+			JavaPlugin.log(e);
+			return false;
+		}
+	}
+
+	/**
+	 * Checks if extra indentation for second line of string continuation is required.
+	 * 
+	 * @param offset the offset for which the check is done
+	 * @return returns <code>true</code> if extra indentation for second line of string continuation
+	 *         is required
+	 * @since 3.7
+	 */
+	private boolean isSecondLineOfStringContinuation(int offset) {
+		try {
+			int offsetLine= fDocument.getLineOfOffset(offset);
+			fPosition= offset;
+			while (true) {
+				nextToken();
+				switch (fToken) {
+				// scopes: skip them
+					case Symbols.TokenRPAREN:
+					case Symbols.TokenRBRACKET:
+					case Symbols.TokenRBRACE:
+					case Symbols.TokenGREATERTHAN:
+						skipScope();
+						break;
+
+					case Symbols.TokenPLUS:
+						if ((offsetLine - fLine) > 1) {
+							return false;
+						}
+						break;
+
+					case Symbols.TokenCOMMA:
+					case Symbols.TokenLPAREN:
+					case Symbols.TokenLBRACE:
+					case Symbols.TokenEQUAL:
+						int stringStartingOffset= fScanner.findNonWhitespaceForwardInAnyPartition(fPosition + 1, JavaHeuristicScanner.UNBOUND);
+						int stringStartingLine= fDocument.getLineOfOffset(stringStartingOffset);
+						if ((offsetLine - stringStartingLine) == 1) {
+							fPosition= stringStartingOffset;
+							return true;
+						} else {
+							return false;
+						}
+					case Symbols.TokenLBRACKET:
+					case Symbols.TokenEOF:
+						if ((offsetLine - fLine) == 1)
+							return true;
+						else
+							return false;
+				}
+			}
+		} catch (BadLocationException e) {
+			JavaPlugin.log(e);
+			return false;
+		}
+	}
+
+	/**
+	 * Returns the reference position regarding to indentation for <code>position</code>, or
+	 * <code>NOT_FOUND</code>.<code>fIndent</code> will contain the relative indentation (in
+	 * indentation units, not characters) after the call. If there is a special alignment (e.g. for
+	 * a method declaration where parameters should be aligned), <code>fAlign</code> will contain
+	 * the absolute position of the alignment reference in <code>fDocument</code>, otherwise
+	 * <code>fAlign</code> is set to <code>JavaHeuristicScanner.NOT_FOUND</code>. This method calls
+	 * {@link #findReferencePosition(int, boolean, boolean, boolean, boolean, boolean)
+	 * findReferencePosition(offset, danglingElse, matchBrace, matchParen, matchCase, throwsClause)}
+	 * where <code>throwsClause</code> indicates whether a throws clause was found at
+	 * <code>position</code>.
+	 * 
 	 * @param offset the offset for which the reference is computed
 	 * @param danglingElse whether a dangling else should be assumed at <code>position</code>
-	 * @param matchBrace whether the position of the matching brace should be
-	 *            returned instead of doing code analysis
-	 * @param matchParen whether the position of the matching parenthesis
-	 *            should be returned instead of doing code analysis
-	 * @param matchCase whether the position of a switch statement reference
-	 *            should be returned (either an earlier case statement or the
-	 *            switch block brace)
-	 * @return the reference statement relative to which <code>position</code>
-	 *         should be indented, or {@link JavaHeuristicScanner#NOT_FOUND}
+	 * @param matchBrace whether the position of the matching brace should be returned instead of
+	 *            doing code analysis
+	 * @param matchParen whether the position of the matching parenthesis should be returned instead
+	 *            of doing code analysis
+	 * @param matchCase whether the position of a switch statement reference should be returned
+	 *            (either an earlier case statement or the switch block brace)
+	 * @return the reference statement relative to which <code>position</code> should be indented,
+	 *         or {@link JavaHeuristicScanner#NOT_FOUND}
 	 */
 	public int findReferencePosition(int offset, boolean danglingElse, boolean matchBrace, boolean matchParen, boolean matchCase) {
+		return findReferencePosition(offset, danglingElse, matchBrace, matchParen, matchCase, false);
+	}
+
+	/**
+	 * Returns the reference position regarding to indentation for <code>position</code>, or
+	 * <code>NOT_FOUND</code>.<code>fIndent</code> will contain the relative indentation (in
+	 * indentation units, not characters) after the call. If there is a special alignment (e.g. for
+	 * a method declaration where parameters should be aligned), <code>fAlign</code> will contain
+	 * the absolute position of the alignment reference in <code>fDocument</code>, otherwise
+	 * <code>fAlign</code> is set to <code>JavaHeuristicScanner.NOT_FOUND</code>.
+	 * 
+	 * @param offset the offset for which the reference is computed
+	 * @param danglingElse whether a dangling else should be assumed at <code>position</code>
+	 * @param matchBrace whether the position of the matching brace should be returned instead of
+	 *            doing code analysis
+	 * @param matchParen whether the position of the matching parenthesis should be returned instead
+	 *            of doing code analysis
+	 * @param matchCase whether the position of a switch statement reference should be returned
+	 *            (either an earlier case statement or the switch block brace)
+	 * @param throwsClause whether a throws clause was found at <code>position</code>
+	 * @return the reference statement relative to which <code>position</code> should be indented,
+	 *         or {@link JavaHeuristicScanner#NOT_FOUND}
+	 * @since 3.7
+	 */
+	public int findReferencePosition(int offset, boolean danglingElse, boolean matchBrace, boolean matchParen, boolean matchCase, boolean throwsClause) {
 		fIndent= 0; // the indentation modification
 		fAlign= JavaHeuristicScanner.NOT_FOUND;
 		fPosition= offset;
@@ -853,7 +967,7 @@ public final class JavaIndenter {
 			} else {
 				// if we can't find the matching brace, the heuristic is to unindent
 				// by one against the normal position
-				int pos= findReferencePosition(offset, danglingElse, false, matchParen, matchCase);
+				int pos= findReferencePosition(offset, danglingElse, false, matchParen, matchCase, throwsClause);
 				fIndent--;
 				return pos;
 			}
@@ -861,12 +975,13 @@ public final class JavaIndenter {
 
 		// align parenthesis'
 		if (matchParen) {
-			if (skipScope(Symbols.TokenLPAREN, Symbols.TokenRPAREN))
+			if (skipScope(Symbols.TokenLPAREN, Symbols.TokenRPAREN)) {
+				fIndent= fPrefs.prefContinuationIndent;
 				return fPosition;
-			else {
+			} else {
 				// if we can't find the matching paren, the heuristic is to unindent
 				// by one against the normal position
-				int pos= findReferencePosition(offset, danglingElse, matchBrace, false, matchCase);
+				int pos= findReferencePosition(offset, danglingElse, matchBrace, false, matchCase, throwsClause);
 				fIndent--;
 				return pos;
 			}
@@ -887,13 +1002,19 @@ public final class JavaIndenter {
 				int pos= fPosition;
 				if (!skipScope())
 					fPosition= pos;
-				//$FALL-THROUGH$
+				return skipToStatementStart(danglingElse, false);
 			case Symbols.TokenSEMICOLON:
 				// this is the 90% case: after a statement block
 				// the end of the previous statement / block previous.end
 				// search to the end of the statement / block before the previous; the token just after that is previous.start
-				return skipToStatementStart(danglingElse, false);
-
+				pos= fPosition;
+				if (isForStatement()) {
+					fIndent= fPrefs.prefContinuationIndent;
+					return fPosition;
+				} else {
+					fPosition= pos;
+					return skipToStatementStart(danglingElse, false);
+				}
 			// scope introduction: special treat who special is
 			case Symbols.TokenLPAREN:
 			case Symbols.TokenLBRACE:
@@ -906,8 +1027,7 @@ public final class JavaIndenter {
 
 			case Symbols.TokenEQUAL:
 				// indent assignments
-				fIndent= fPrefs.prefAssignmentIndent;
-				return fPosition;
+				return handleEqual();
 
 			case Symbols.TokenCOLON:
 				// TODO handle ternary deep indentation
@@ -932,7 +1052,16 @@ public final class JavaIndenter {
 
 			case Symbols.TokenTRY:
 				return skipToStatementStart(danglingElse, false);
+
+			case Symbols.TokenRBRACKET:
+				fIndent= fPrefs.prefContinuationIndent;
+				return fPosition;
+
 			case Symbols.TokenRPAREN:
+				if (throwsClause) {
+					fIndent= fPrefs.prefContinuationIndent;
+					return fPosition;
+				}
 				int line= fLine;
 				if (skipScope(Symbols.TokenLPAREN, Symbols.TokenRPAREN)) {
 					int scope= fPosition;
@@ -952,12 +1081,36 @@ public final class JavaIndenter {
 					if (looksLikeAnonymousTypeDecl()) {
 						return skipToStatementStart(danglingElse, false);
 					}
+					fPosition= scope;
+					if (looksLikeAnnotation()) {
+						return skipToStatementStart(danglingElse, false);
+					}
 				}
 				// restore
 				fPosition= offset;
 				fLine= line;
 
 				return skipToPreviousListItemOrListStart();
+			case Symbols.TokenRETURN:
+				fIndent= fPrefs.prefContinuationIndent;
+				return fPosition;
+			case Symbols.TokenPLUS:
+				if (isStringContinuation(fPosition)) {
+					try {
+						if (isSecondLineOfStringContinuation(offset)) {
+							fAlign= JavaHeuristicScanner.NOT_FOUND;
+							fIndent= fPrefs.prefContinuationIndent;
+						} else {
+							int previousLineOffset= fDocument.getLineOffset(fDocument.getLineOfOffset(offset) - 1);
+							fAlign= fScanner.findNonWhitespaceForwardInAnyPartition(previousLineOffset, JavaHeuristicScanner.UNBOUND);
+						}
+					} catch (BadLocationException e) {
+						JavaPlugin.log(e);
+					}
+					return fPosition;
+				}
+				fPosition= offset;
+				return skipToPreviousListItemOrListStart();
 			case Symbols.TokenCOMMA:
 				// inside a list of some type
 				// easy if there is already a list item before with its own indentation - we just align
@@ -972,6 +1125,58 @@ public final class JavaIndenter {
 	}
 
 	/**
+	 * Checks if the statement at position is itself a continuation of the previous, else sets the
+	 * indentation to Continuation Indent.
+	 * 
+	 * @return the position of the token
+	 * @since 3.7
+	 */
+	private int handleEqual() {
+		try {
+			//If this line is itself continuation of the previous then do nothing
+			IRegion line= fDocument.getLineInformationOfOffset(fPosition);
+			int nonWS= fScanner.findNonWhitespaceBackward(line.getOffset(), JavaHeuristicScanner.UNBOUND);
+			if (nonWS != Symbols.TokenEOF) {
+				int tokenAtPreviousLine= fScanner.nextToken(nonWS, nonWS + 1);
+				if (tokenAtPreviousLine != Symbols.TokenSEMICOLON && tokenAtPreviousLine != Symbols.TokenRBRACE && tokenAtPreviousLine != Symbols.TokenLBRACE
+						&& tokenAtPreviousLine != Symbols.TokenEOF)
+					return fPosition;
+			}
+		} catch (BadLocationException e) {
+			return fPosition;
+		}
+
+		fIndent= fPrefs.prefContinuationIndent;
+		return fPosition;
+	}
+
+	/**
+	 * Checks if the semicolon at the current position is part of a for statement.
+	 * 
+	 * @return returns <code>true</code> if current position is part of for statement
+	 * @since 3.7
+	 */
+	private boolean isForStatement() {
+		int semiColonCount= 1;
+		while (true) {
+			nextToken();
+			switch (fToken) {
+				case Symbols.TokenFOR:
+					return true;
+				case Symbols.TokenLBRACE:
+					return false;
+				case Symbols.TokenSEMICOLON:
+					semiColonCount++;
+					if (semiColonCount > 2)
+						return false;
+					break;
+				case Symbols.TokenEOF:
+					return false;
+			}
+		}
+	}
+
+	/**
 	 * Skips to the start of a statement that ends at the current position.
 	 *
 	 * @param danglingElse whether to indent aligned with the last <code>if</code>
@@ -1084,6 +1289,14 @@ public final class JavaIndenter {
 					else
 						return pos;
 
+				case Symbols.TokenCATCH:
+				case Symbols.TokenFINALLY:
+					pos= fPosition;
+					if (skipNextTRY())
+						break;
+					else
+						return pos;
+
 				case Symbols.TokenDO:
 					// align the WHILE position with its do
 					return fPosition;
@@ -1235,6 +1448,11 @@ public final class JavaIndenter {
 					return handleScopeIntroduction(startPosition + 1);
 
 				case Symbols.TokenSEMICOLON:
+					int savedPosition= fPosition;
+					if (isForStatement())
+						fIndent= fPrefs.prefContinuationIndent;
+					else
+						fPosition= savedPosition;
 					return fPosition;
 				case Symbols.TokenQUESTIONMARK:
 					if (fPrefs.prefTernaryDeepAlign) {
@@ -1244,6 +1462,11 @@ public final class JavaIndenter {
 						fIndent= fPrefs.prefTernaryIndent;
 						return fPosition;
 					}
+				case Symbols.TokenRETURN:
+					fIndent= fPrefs.prefContinuationIndent;
+					return fPosition;
+				case Symbols.TokenEQUAL:
+					return handleEqual();
 				case Symbols.TokenEOF:
 					return 0;
 
@@ -1476,6 +1699,44 @@ public final class JavaIndenter {
 
 
 	/**
+	 * Skips over the next <code>try</code> keyword. The current token when calling this method must
+	 * be a <code>catch</code> or <code>finally</code> keyword. Returns <code>true</code> if a
+	 * matching <code>try</code> could be found, <code>false</code> otherwise. The cursor (
+	 * <code>fPosition</code>) is set to the offset of the <code>try</code> token.
+	 * 
+	 * @return <code>true</code> if a matching <code>try</code> token was found, <code>false</code>
+	 *         otherwise
+	 * @since 3.7
+	 */
+	private boolean skipNextTRY() {
+		Assert.isTrue(fToken == Symbols.TokenCATCH || fToken == Symbols.TokenFINALLY);
+	
+		while (true) {
+			nextToken();
+			switch (fToken) {
+			// scopes: skip them
+				case Symbols.TokenRPAREN:
+				case Symbols.TokenRBRACKET:
+				case Symbols.TokenRBRACE:
+				case Symbols.TokenGREATERTHAN:
+					skipScope();
+					break;
+	
+				case Symbols.TokenTRY:
+					// found it
+					return true;
+	
+					// shortcut scope starts
+				case Symbols.TokenLPAREN:
+				case Symbols.TokenLBRACE:
+				case Symbols.TokenLBRACKET:
+				case Symbols.TokenEOF:
+					return false;
+			}
+		}
+	}
+
+	/**
 	 * while(condition); is ambiguous when parsed backwardly, as it is a valid
 	 * statement by its own, so we have to check whether there is a matching
 	 * do. A <code>do</code> can either be separated from the while by a
@@ -1573,6 +1834,29 @@ public final class JavaIndenter {
 	}
 
 	/**
+	 * Returns <code>true</code> if the current tokens look like an annotation (i.e. an annotation
+	 * name (potentially qualified) preceded by an at-sign).
+	 * 
+	 * @return <code>true</code> if the current position looks like an annotation.
+	 * @since 3.7
+	 */
+
+	private boolean looksLikeAnnotation() {
+		nextToken();
+		if (fToken == Symbols.TokenIDENT) { // Annotation name
+			nextToken();
+			while (fToken == Symbols.TokenOTHER) { // dot of qualification
+				nextToken();
+				if (fToken != Symbols.TokenIDENT) // qualifying name
+					return false;
+				nextToken();
+			}
+			return fToken == Symbols.TokenAT;
+		}
+		return false;
+	}
+	
+	/**
 	 * Returns <code>true</code> if the current tokens look like an anonymous type declaration
 	 * header (i.e. a type name (potentially qualified) and a new keyword). The heuristic calls
 	 * <code>nextToken</code> and expects a possibly qualified identifier (type name) and a new
@@ -1588,7 +1872,7 @@ public final class JavaIndenter {
 			nextToken();
 			while (fToken == Symbols.TokenOTHER) { // dot of qualification
 				nextToken();
-				if (fToken != Symbols.TokenIDENT) // qualificating name
+				if (fToken != Symbols.TokenIDENT) // qualifying name
 					return false;
 				nextToken();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java
index 3d8e0bd..1384eb1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.KeyAdapter;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Shell;
@@ -36,6 +37,7 @@ import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -77,6 +79,7 @@ import org.eclipse.jdt.internal.ui.util.StringMatcher;
 import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.ColoredViewersManager;
 import org.eclipse.jdt.internal.ui.viewsupport.ColoringLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.FocusDescriptor;
 import org.eclipse.jdt.internal.ui.viewsupport.MemberFilter;
 
 /**
@@ -98,7 +101,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	private LexicalSortingAction fLexicalSortingAction;
 	private SortByDefiningTypeAction fSortByDefiningTypeAction;
 	private ShowOnlyMainTypeAction fShowOnlyMainTypeAction;
-	private Map fTypeHierarchies= new HashMap();
+	private Map<IType, ITypeHierarchy> fTypeHierarchies= new HashMap<IType, ITypeHierarchy>();
 
 	/**
 	 * Category filter action group.
@@ -112,12 +115,13 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		private boolean fShowDefiningType;
 
 		private OutlineLabelProvider() {
-			super(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS |  JavaElementLabels.F_APP_TYPE_SIGNATURE | JavaElementLabels.ALL_CATEGORY, AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS);
+			super(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS |  JavaElementLabels.F_APP_TYPE_SIGNATURE | JavaElementLabels.ALL_CATEGORY | JavaElementLabels.P_COMPRESSED, AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS);
 		}
 
 		/*
 		 * @see ILabelProvider#getText
 		 */
+		@Override
 		public String getText(Object element) {
 			String text= super.getText(element);
 			if (fShowDefiningType) {
@@ -138,6 +142,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getForeground(java.lang.Object)
 		 */
+		@Override
 		public Color getForeground(Object element) {
 			if (fOutlineContentProvider.isShowingInheritedMembers()) {
 				if (element instanceof IJavaElement) {
@@ -181,6 +186,19 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 			}
 			return res.getDeclaringType();
 		}
+
+		/*
+		 * @see ILabelProvider#getImage
+		 */
+		@Override
+		public Image getImage(Object element) {
+			if (element.equals(fInitiallySelectedType) || (element instanceof IMember && ((IMember)element).getDeclaringType() == null)) {
+				ImageDescriptor desc= fImageLabelProvider.getJavaImageDescriptor((IJavaElement)element, (evaluateImageFlags(element)));
+				Image image= JavaPlugin.getImageDescriptorRegistry().get(new FocusDescriptor(desc));
+				return decorateImage(image, element);
+			}
+			return super.getImage(element);
+		}
 	}
 
 
@@ -196,6 +214,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected Object[] getFilteredChildren(Object parent) {
 			Object[] result = getRawChildren(parent);
 			int unfilteredChildren= result.length;
@@ -211,6 +230,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected void internalExpandToLevel(Widget node, int level) {
 			if (!fIsFiltering && node instanceof TreeItem && getMatcher() == null) {
 				TreeItem treeItem= (TreeItem)node;
@@ -282,6 +302,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public Object[] getChildren(Object element) {
 			if (fShowOnlyMainType) {
 				if (element instanceof ITypeRoot) {
@@ -294,10 +315,10 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 
 			if (fShowInheritedMembers && element instanceof IType) {
 				IType type= (IType)element;
-				if (type.getDeclaringType() == null) {
+				if (type.getDeclaringType() == null || type.equals(fInitiallySelectedType)) {
 					ITypeHierarchy th= getSuperTypeHierarchy(type);
 					if (th != null) {
-						List children= new ArrayList();
+						List<Object> children= new ArrayList<Object>();
 						IType[] superClasses= th.getAllSupertypes(type);
 						children.addAll(Arrays.asList(super.getChildren(type)));
 						for (int i= 0, scLength= superClasses.length; i < scLength; i++)
@@ -312,6 +333,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 			super.inputChanged(viewer, oldInput, newInput);
 			fTypeHierarchies.clear();
@@ -320,6 +342,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void dispose() {
 			super.dispose();
 			if (fCategoryFilterActionGroup != null) {
@@ -355,6 +378,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/*
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			setTopLevelTypeOnly(!fShowOnlyMainType);
 		}
@@ -388,6 +412,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#getHierarchy(org.eclipse.jdt.core.IType)
 		 * @since 3.2
 		 */
+		@Override
 		protected ITypeHierarchy getHierarchy(IType type) {
 			return getSuperTypeHierarchy(type);
 		}
@@ -396,6 +421,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#isSortByDefiningType()
 		 * @since 3.2
 		 */
+		@Override
 		public boolean isSortByDefiningType() {
 			return fSortByDefiningTypeAction.isChecked();
 		}
@@ -404,6 +430,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#isSortAlphabetically()
 		 * @since 3.2
 		 */
+		@Override
 		public boolean isSortAlphabetically() {
 			return fLexicalSortingAction.isChecked();
 		}
@@ -430,6 +457,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LEXICAL_SORTING_BROWSING_ACTION);
 		}
 
+		@Override
 		public void run() {
 			valueChanged(isChecked(), true);
 		}
@@ -478,6 +506,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		/*
 		 * @see Action#actionPerformed
 		 */
+		@Override
 		public void run() {
 			BusyIndicator.showWhile(fOutlineViewer.getControl().getDisplay(), new Runnable() {
 				public void run() {
@@ -506,12 +535,13 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 		private StringMatcher fMatcher1;
 		private StringMatcher fMatcher2;
 
-		private OrStringMatcher(String pattern1, String pattern2, boolean ignoreCase, boolean foo) {
+		private OrStringMatcher(String pattern1, String pattern2, boolean ignoreCase) {
 			super("", false, false); //$NON-NLS-1$
 			fMatcher1= new StringMatcher(pattern1, ignoreCase, false);
 			fMatcher2= new StringMatcher(pattern2, ignoreCase, false);
 		}
 
+		@Override
 		public boolean match(String text) {
 			return fMatcher2.match(text) || fMatcher1.match(text);
 		}
@@ -534,6 +564,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Text createFilterText(Composite parent) {
 		Text text= super.createFilterText(parent);
 		text.addKeyListener(getKeyAdapter());
@@ -543,6 +574,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected TreeViewer createTreeViewer(Composite parent, int style) {
 		Tree tree= new Tree(parent, SWT.SINGLE | (style & ~SWT.MULTI));
 		GridData gd= new GridData(GridData.FILL_BOTH);
@@ -583,6 +615,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getStatusFieldText() {
 		KeySequence[] sequences= getInvokingCommandKeySequences();
 		if (sequences == null || sequences.length == 0)
@@ -600,6 +633,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractInformationControl#getId()
 	 * @since 3.0
 	 */
+	@Override
 	protected String getId() {
 		return "org.eclipse.jdt.internal.ui.text.QuickOutline"; //$NON-NLS-1$
 	}
@@ -607,6 +641,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setInput(Object information) {
 		if (information == null || information instanceof String) {
 			inputChanged(null, null);
@@ -627,6 +662,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	private KeyAdapter getKeyAdapter() {
 		if (fKeyAdapter == null) {
 			fKeyAdapter= new KeyAdapter() {
+				@Override
 				public void keyPressed(KeyEvent e) {
 					int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(e);
 					KeySequence keySequence = KeySequence.getInstance(SWTKeySupport.convertAcceleratorToKeyStroke(accelerator));
@@ -658,6 +694,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractInformationControl#fillViewMenu(org.eclipse.jface.action.IMenuManager)
 	 */
+	@Override
 	protected void fillViewMenu(IMenuManager viewMenu) {
 		super.fillViewMenu(viewMenu);
 		viewMenu.add(fShowOnlyMainTypeAction);
@@ -675,6 +712,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractInformationControl#setMatcherString(java.lang.String, boolean)
 	 * @since 3.2
 	 */
+	@Override
 	protected void setMatcherString(String pattern, boolean update) {
 		fPattern= pattern;
 		if (pattern.length() == 0 || !fSortByDefiningTypeAction.isChecked()) {
@@ -684,7 +722,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 
 		boolean ignoreCase= pattern.toLowerCase().equals(pattern);
 		String pattern2= "*" + JavaElementLabels.CONCAT_STRING + pattern; //$NON-NLS-1$
-		fStringMatcher= new OrStringMatcher(pattern, pattern2, ignoreCase, false);
+		fStringMatcher= new OrStringMatcher(pattern, pattern2, ignoreCase);
 
 		if (update)
 			stringMatcherUpdated();
@@ -721,7 +759,7 @@ public class JavaOutlineInformationControl extends AbstractInformationControl {
 	}
 
 	private ITypeHierarchy getSuperTypeHierarchy(IType type) {
-		ITypeHierarchy th= (ITypeHierarchy)fTypeHierarchies.get(type);
+		ITypeHierarchy th= fTypeHierarchies.get(type);
 		if (th == null) {
 			try {
 				th= SuperTypeHierarchyCache.getTypeHierarchy(type, getProgressMonitor());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java
index d8a47c2..7e99ac5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ public final class JavaPairMatcher extends DefaultCharacterPairMatcher implement
 	}
 
 	/* @see ICharacterPairMatcher#match(IDocument, int) */
+	@Override
 	public IRegion match(IDocument document, int offset) {
 		try {
 			return performMatch(document, offset);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPartitionScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPartitionScanner.java
index 7f2ef00..c5ce247 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPartitionScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPartitionScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,7 +99,7 @@ public class JavaPartitionScanner extends RuleBasedPartitionScanner implements I
 		IToken multiLineComment= new Token(JAVA_MULTI_LINE_COMMENT);
 		IToken singleLineComment= new Token(JAVA_SINGLE_LINE_COMMENT);
 
-		List rules= new ArrayList();
+		List<IPredicateRule> rules= new ArrayList<IPredicateRule>();
 
 		// Add rule for single line comments.
 		rules.add(new EndOfLineRule("//", singleLineComment)); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaReconciler.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaReconciler.java
index 403b409..b92e13e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaReconciler.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaReconciler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -121,6 +121,7 @@ public class JavaReconciler extends MonoReconciler {
 		/*
 		 * @see org.eclipse.swt.events.ShellListener#shellActivated(org.eclipse.swt.events.ShellEvent)
 		 */
+		@Override
 		public void shellActivated(ShellEvent e) {
 			if (!fControl.isDisposed() && fControl.isVisible()) {
 				if (hasJavaModelChanged())
@@ -132,6 +133,7 @@ public class JavaReconciler extends MonoReconciler {
 		/*
 		 * @see org.eclipse.swt.events.ShellListener#shellDeactivated(org.eclipse.swt.events.ShellEvent)
 		 */
+		@Override
 		public void shellDeactivated(ShellEvent e) {
 			if (!fControl.isDisposed() && fControl.getShell() == e.getSource()) {
 				setJavaModelChanged(false);
@@ -302,6 +304,7 @@ public class JavaReconciler extends MonoReconciler {
 	/*
 	 * @see org.eclipse.jface.text.reconciler.IReconciler#install(org.eclipse.jface.text.ITextViewer)
 	 */
+	@Override
 	public void install(ITextViewer textViewer) {
 		super.install(textViewer);
 
@@ -335,6 +338,7 @@ public class JavaReconciler extends MonoReconciler {
 	/*
 	 * @see org.eclipse.jface.text.reconciler.IReconciler#uninstall()
 	 */
+	@Override
 	public void uninstall() {
 
 		IWorkbenchPartSite site= fTextEditor.getSite();
@@ -363,6 +367,7 @@ public class JavaReconciler extends MonoReconciler {
 	/*
 	 * @see org.eclipse.jface.text.reconciler.AbstractReconciler#forceReconciling()
 	 */
+	@Override
 	protected void forceReconciling() {
 		if (!fIninitalProcessDone)
 			return;
@@ -376,6 +381,7 @@ public class JavaReconciler extends MonoReconciler {
 	 * @see org.eclipse.jface.text.reconciler.AbstractReconciler#aboutToReconcile()
 	 * @since 3.0
 	 */
+	@Override
 	protected void aboutToBeReconciled() {
 		JavaCompositeReconcilingStrategy strategy= (JavaCompositeReconcilingStrategy) getReconcilingStrategy(IDocument.DEFAULT_CONTENT_TYPE);
 		strategy.aboutToBeReconciled();
@@ -384,6 +390,7 @@ public class JavaReconciler extends MonoReconciler {
 	/*
 	 * @see org.eclipse.jface.text.reconciler.AbstractReconciler#reconcilerReset()
 	 */
+	@Override
 	protected void reconcilerReset() {
 		super.reconcilerReset();
         JavaCompositeReconcilingStrategy strategy= (JavaCompositeReconcilingStrategy) getReconcilingStrategy(IDocument.DEFAULT_CONTENT_TYPE);
@@ -393,6 +400,7 @@ public class JavaReconciler extends MonoReconciler {
 	/*
 	 * @see org.eclipse.jface.text.reconciler.MonoReconciler#initialProcess()
 	 */
+	@Override
 	protected void initialProcess() {
 		synchronized (fMutex) {
 			super.initialProcess();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWhitespaceDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWhitespaceDetector.java
index a351fa6..c8e4ae2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWhitespaceDetector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWhitespaceDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,18 +10,16 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.text;
 
-
 import org.eclipse.jface.text.rules.IWhitespaceDetector;
 
+
 /**
  * A java aware white space detector.
  */
 public class JavaWhitespaceDetector implements IWhitespaceDetector {
 
-	/**
-	 * @see IWhitespaceDetector#isWhitespace
-	 */
 	public boolean isWhitespace(char c) {
 		return Character.isWhitespace(c);
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordFinder.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordFinder.java
index ed33e9e..a30a993 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordFinder.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,8 +54,20 @@ public class JavaWordFinder {
 
 			while (pos < length) {
 				c= document.getChar(pos);
-				if (!Character.isJavaIdentifierPart(c))
-					break;
+				if (!Character.isJavaIdentifierPart(c)) {
+					if (UTF16.isSurrogate(c)) {
+						/*
+						 * XXX: Here we should create the code point and test whether
+						 * it is a Java identifier part. Currently this is not possible
+						 * because java.lang.Character in 1.4 does not support surrogates
+						 * and because com.ibm.icu.lang.UCharacter.isJavaIdentifierPart(int)
+						 * is not correctly implemented.
+						 */
+					} else {
+						break;
+					}
+
+				}
 				++pos;
 			}
 			end= pos;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java
index e9064b7..5bead05 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#first()
 	 */
+	@Override
 	public int first() {
 		fIndex= fIterator.first();
 		return fIndex;
@@ -53,6 +54,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#last()
 	 */
+	@Override
 	public int last() {
 		fIndex= fIterator.last();
 		return fIndex;
@@ -61,6 +63,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#next(int)
 	 */
+	@Override
 	public int next(int n) {
 		int next= 0;
 		while (--n > 0 && next != DONE) {
@@ -72,6 +75,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#next()
 	 */
+	@Override
 	public int next() {
 		fIndex= following(fIndex);
 		return fIndex;
@@ -80,6 +84,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#previous()
 	 */
+	@Override
 	public int previous() {
 		fIndex= preceding(fIndex);
 		return fIndex;
@@ -89,6 +94,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#preceding(int)
 	 */
+	@Override
 	public int preceding(int offset) {
 		int first= fIterator.preceding(offset);
 		if (isWhitespace(first, offset)) {
@@ -102,6 +108,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#following(int)
 	 */
+	@Override
 	public int following(int offset) {
 		int first= fIterator.following(offset);
 		if (eatFollowingWhitespace(offset, first)) {
@@ -185,6 +192,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#current()
 	 */
+	@Override
 	public int current() {
 		return fIndex;
 	}
@@ -192,6 +200,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#getText()
 	 */
+	@Override
 	public CharacterIterator getText() {
 		return fIterator.getText();
 	}
@@ -208,6 +217,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#setText(java.text.CharacterIterator)
 	 */
+	@Override
 	public void setText(CharacterIterator newText) {
 		fIterator.setText(newText);
 		first();
@@ -216,6 +226,7 @@ public class JavaWordIterator extends BreakIterator {
 	/*
 	 * @see java.text.BreakIterator#setText(java.lang.String)
 	 */
+	@Override
 	public void setText(String newText) {
 		setText((CharSequence) newText);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineComparator.java
index 13ba7dd..f0b66b7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineComparator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/LineComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,18 +31,18 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 public class LineComparator implements IRangeComparator {
 
 	private final IDocument fDocument;
-	private final ArrayList fHashes;
+	private final ArrayList<Integer> fHashes;
 
     /**
 	 * Create a line comparator for the given document.
-	 *
-	 * @param document
+	 * 
+	 * @param document the document
 	 */
 	public LineComparator(IDocument document) {
 		fDocument= document;
 
-		Object[] nulls= new Object[fDocument.getNumberOfLines()];
-		fHashes= new ArrayList(Arrays.asList(nulls));
+		Integer[] nulls= new Integer[fDocument.getNumberOfLines()];
+		fHashes= new ArrayList<Integer>(Arrays.asList(nulls));
     }
 
 	/*
@@ -77,7 +77,7 @@ public class LineComparator implements IRangeComparator {
 	 * @throws BadLocationException if the line number is invalid
 	 */
 	private Integer getHash(int line) throws BadLocationException {
-		Integer hash= (Integer) fHashes.get(line);
+		Integer hash= fHashes.get(line);
 		if (hash == null) {
 			IRegion lineRegion= fDocument.getLineInformation(line);
 			String lineContents= fDocument.get(lineRegion.getOffset(), lineRegion.getLength());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SequenceCharacterIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SequenceCharacterIterator.java
index 2ad3897..44359fb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SequenceCharacterIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SequenceCharacterIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -157,6 +157,7 @@ public class SequenceCharacterIterator implements CharacterIterator {
 	/*
 	 * @see java.text.CharacterIterator#clone()
 	 */
+	@Override
 	public Object clone() {
 		try {
 			return super.clone();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SimpleJavaSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SimpleJavaSourceViewerConfiguration.java
index 219b736..cdce5c0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SimpleJavaSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SimpleJavaSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
 	 */
+	@Override
 	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
 		return null;
 	}
@@ -66,6 +67,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getAnnotationHover(ISourceViewer)
 	 */
+	@Override
 	public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
 		return null;
 	}
@@ -73,6 +75,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getOverviewRulerAnnotationHover(ISourceViewer)
 	 */
+	@Override
 	public IAnnotationHover getOverviewRulerAnnotationHover(ISourceViewer sourceViewer) {
 		return null;
 	}
@@ -80,6 +83,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getConfiguredTextHoverStateMasks(ISourceViewer, String)
 	 */
+	@Override
 	public int[] getConfiguredTextHoverStateMasks(ISourceViewer sourceViewer, String contentType) {
 		return null;
 	}
@@ -87,6 +91,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String, int)
 	 */
+	@Override
 	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType, int stateMask) {
 		return null;
 	}
@@ -94,6 +99,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String)
 	 */
+	@Override
 	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
 		return null;
 	}
@@ -101,6 +107,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getContentFormatter(ISourceViewer)
 	 */
+	@Override
 	public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) {
 		if (fConfigureFormatter)
 			return super.getContentFormatter(sourceViewer);
@@ -111,6 +118,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getInformationControlCreator(ISourceViewer)
 	 */
+	@Override
 	public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
 		return null;
 	}
@@ -118,6 +126,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see SourceViewerConfiguration#getInformationPresenter(ISourceViewer)
 	 */
+	@Override
 	public IInformationPresenter getInformationPresenter(ISourceViewer sourceViewer) {
 		return null;
 	}
@@ -125,6 +134,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration#getOutlinePresenter(org.eclipse.jface.text.source.ISourceViewer, boolean)
 	 */
+	@Override
 	public IInformationPresenter getOutlinePresenter(ISourceViewer sourceViewer, boolean doCodeResolve) {
 		return null;
 	}
@@ -132,6 +142,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration#getHierarchyPresenter(org.eclipse.jface.text.source.ISourceViewer, boolean)
 	 */
+	@Override
 	public IInformationPresenter getHierarchyPresenter(ISourceViewer sourceViewer, boolean doCodeResolve) {
 		return null;
 	}
@@ -139,6 +150,7 @@ public class SimpleJavaSourceViewerConfiguration extends JavaSourceViewerConfigu
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getHyperlinkDetectors(org.eclipse.jface.text.source.ISourceViewer)
 	 */
+	@Override
 	public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) {
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SingleTokenJavaScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SingleTokenJavaScanner.java
index 102d51a..34ac60b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SingleTokenJavaScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SingleTokenJavaScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,8 @@ import java.util.List;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 
+import org.eclipse.jface.text.rules.IRule;
+
 import org.eclipse.jdt.ui.text.IColorManager;
 
 
@@ -36,6 +38,7 @@ public final class SingleTokenJavaScanner extends AbstractJavaScanner{
 	/*
 	 * @see AbstractJavaScanner#getTokenProperties()
 	 */
+	@Override
 	protected String[] getTokenProperties() {
 		return fProperty;
 	}
@@ -43,7 +46,8 @@ public final class SingleTokenJavaScanner extends AbstractJavaScanner{
 	/*
 	 * @see AbstractJavaScanner#createRules()
 	 */
-	protected List createRules() {
+	@Override
+	protected List<IRule> createRules() {
 		setDefaultReturnToken(getToken(fProperty[0]));
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java
index 866c2ea..9890336 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,6 @@ import org.eclipse.jface.text.TextViewer;
 import org.eclipse.jdt.internal.ui.text.TypingRun.ChangeType;
 
 
-
 /**
  * Installs as a verify key listener on a viewer and overwrites the behavior
  * of the backspace key. Clients may register undo specifications for certain
@@ -167,7 +166,7 @@ public class SmartBackspaceManager {
 
 	private ITextViewer fViewer;
 	private BackspaceListener fBackspaceListener;
-	private Map fSpecs;
+	private Map<Integer, UndoSpec> fSpecs;
 	private TypingRunDetector fRunDetector;
 	private ITypingRunListener fRunListener;
 
@@ -192,7 +191,7 @@ public class SmartBackspaceManager {
 
 	private UndoSpec removeEdit(int offset) {
 		Integer i= new Integer(offset);
-		UndoSpec spec= (UndoSpec) fSpecs.remove(i);
+		UndoSpec spec= fSpecs.remove(i);
 		return spec;
 	}
 
@@ -224,14 +223,14 @@ public class SmartBackspaceManager {
 
 	/**
 	 * Installs the receiver on a text viewer.
-	 *
-	 * @param viewer
+	 * 
+	 * @param viewer the text viewer
 	 */
 	public void install(ITextViewer viewer) {
 		Assert.isLegal(viewer != null);
 
 		fViewer= viewer;
-		fSpecs= new HashMap();
+		fSpecs= new HashMap<Integer, UndoSpec>();
 		fRunDetector= new TypingRunDetector();
 		fRunDetector.install(viewer);
 		fRunListener= new ITypingRunListener() {
@@ -256,8 +255,8 @@ public class SmartBackspaceManager {
 	}
 
 	private void prune() {
-		for (Iterator it= fSpecs.values().iterator(); it.hasNext();) {
-			UndoSpec spec= (UndoSpec) it.next();
+		for (Iterator<UndoSpec> it= fSpecs.values().iterator(); it.hasNext();) {
+			UndoSpec spec= it.next();
 			if (--spec.lives < 0)
 				it.remove();
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/Symbols.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/Symbols.java
index bc182ff..7bbb4a4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/Symbols.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/Symbols.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.text;
 
+
 /**
  * Symbols for the heuristic java scanner.
  *
@@ -31,6 +32,8 @@ public interface Symbols {
 	int TokenEQUAL= 12;
 	int TokenLESSTHAN= 13;
 	int TokenGREATERTHAN= 14;
+	int TokenPLUS= 15;
+	int TokenAT= 16;
 	int TokenIF= 109;
 	int TokenDO= 1010;
 	int TokenFOR= 1011;
@@ -51,5 +54,6 @@ public interface Symbols {
 	int TokenCLASS= 1026;
 	int TokenINTERFACE= 1027;
 	int TokenENUM= 1028;
+	int TokenTHROWS= 1029;
 	int TokenIDENT= 2000;
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRun.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRun.java
index 89d3a9d..54a6e5d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRun.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRun.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.jdt.internal.ui.text;
 
 
-
 /**
  * Describes a run of similar typing changes.
  * <p>
@@ -65,9 +64,14 @@ public final class TypingRun {
 		private final boolean fIsModification;
 		private final String fName;
 
-		/** Private ctor for type safe enumeration. */
-		private ChangeType(boolean isRunPart, String name) {
-			fIsModification= isRunPart;
+		/**
+		 * Private constructor for type safe enumeration.
+		 * 
+		 * @param isModification the flag indicating whether it is a modification
+		 * @param name the name
+		 */
+		private ChangeType(boolean isModification, String name) {
+			fIsModification= isModification;
 			fName= name;
 		}
 
@@ -84,6 +88,7 @@ public final class TypingRun {
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
 			return fName;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRunDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRunDetector.java
index 9bee2e2..e86cf99 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRunDetector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/TypingRunDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -116,6 +116,7 @@ public class TypingRunDetector {
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
 			return fType.toString() + "@" + fNextOffset; //$NON-NLS-1$
 		}
@@ -214,7 +215,7 @@ public class TypingRunDetector {
 	}
 
 	/** The listeners. */
-	private final Set fListeners= new HashSet();
+	private final Set<ITypingRunListener> fListeners= new HashSet<ITypingRunListener>();
 	/**
 	 * The viewer we work upon. Set to <code>null</code> in
 	 * <code>uninstall</code>.
@@ -449,9 +450,9 @@ public class TypingRunDetector {
 	 * @param run the new run
 	 */
 	private void fireRunBegun(TypingRun run) {
-		List listeners= new ArrayList(fListeners);
-		for (Iterator it= listeners.iterator(); it.hasNext();) {
-			ITypingRunListener listener= (ITypingRunListener) it.next();
+		List<ITypingRunListener> listeners= new ArrayList<ITypingRunListener>(fListeners);
+		for (Iterator<ITypingRunListener> it= listeners.iterator(); it.hasNext();) {
+			ITypingRunListener listener= it.next();
 			listener.typingRunStarted(fRun);
 		}
 	}
@@ -463,9 +464,9 @@ public class TypingRunDetector {
 	 * @param reason the type of change that caused the run to be ended
 	 */
 	private void fireRunEnded(TypingRun run, ChangeType reason) {
-		List listeners= new ArrayList(fListeners);
-		for (Iterator it= listeners.iterator(); it.hasNext();) {
-			ITypingRunListener listener= (ITypingRunListener) it.next();
+		List<ITypingRunListener> listeners= new ArrayList<ITypingRunListener>(fListeners);
+		for (Iterator<ITypingRunListener> it= listeners.iterator(); it.hasNext();) {
+			ITypingRunListener listener= it.next();
 			listener.typingRunEnded(fRun, reason);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ASTResolving.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ASTResolving.java
index 0e2d0a5..ee40f55 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ASTResolving.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ASTResolving.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.ParameterizedType;
 import org.eclipse.jdt.core.dom.PrefixExpression;
 import org.eclipse.jdt.core.dom.PrimitiveType;
+import org.eclipse.jdt.core.dom.PrimitiveType.Code;
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.QualifiedType;
 import org.eclipse.jdt.core.dom.SimpleName;
@@ -79,7 +80,6 @@ import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.WildcardType;
-import org.eclipse.jdt.core.dom.PrimitiveType.Code;
 
 import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
@@ -380,7 +380,7 @@ public class ASTResolving {
 		return arrayBinding;
 	}
 
-	private static ITypeBinding getParameterTypeBinding(ASTNode node, List args, IMethodBinding binding) {
+	private static ITypeBinding getParameterTypeBinding(ASTNode node, List<Expression> args, IMethodBinding binding) {
 		ITypeBinding[] paramTypes= binding.getParameterTypes();
 		int index= args.indexOf(node);
 		if (binding.isVarargs() && index >= paramTypes.length - 1) {
@@ -434,7 +434,7 @@ public class ASTResolving {
 				}
 
 				ITypeBinding[] typeArguments= parentBinding.getTypeArguments();
-				List argumentNodes= ((ParameterizedType) parent).typeArguments();
+				List<Type> argumentNodes= ((ParameterizedType) parent).typeArguments();
 				int index= argumentNodes.indexOf(node);
 				if (index != -1 && typeArguments.length == argumentNodes.size()) {
 					return typeArguments[index];
@@ -491,9 +491,9 @@ public class ASTResolving {
 				if (TagElement.TAG_THROWS.equals(tagElement.getTagName()) || TagElement.TAG_EXCEPTION.equals(tagElement.getTagName())) {
 					ASTNode methNode= tagElement.getParent().getParent();
 					if (methNode instanceof MethodDeclaration) {
-						List thrownExcpetions= ((MethodDeclaration) methNode).thrownExceptions();
-						if (thrownExcpetions.size() == 1) {
-							return ((Name) thrownExcpetions.get(0)).resolveTypeBinding();
+						List<Name> thrownExceptions= ((MethodDeclaration) methNode).thrownExceptions();
+						if (thrownExceptions.size() == 1) {
+							return thrownExceptions.get(0).resolveTypeBinding();
 						}
 					}
 				}
@@ -502,9 +502,9 @@ public class ASTResolving {
 		return null;
 	}
 
-   	private static ITypeBinding guessVariableType(List fragments) {
-		for (Iterator iter= fragments.iterator(); iter.hasNext();) {
-			VariableDeclarationFragment frag= (VariableDeclarationFragment) iter.next();
+   	private static ITypeBinding guessVariableType(List<VariableDeclarationFragment> fragments) {
+		for (Iterator<VariableDeclarationFragment> iter= fragments.iterator(); iter.hasNext();) {
+			VariableDeclarationFragment frag= iter.next();
 			if (frag.getInitializer() != null) {
 				return Bindings.normalizeTypeBinding(frag.getInitializer().resolveTypeBinding());
 			}
@@ -520,9 +520,9 @@ public class ASTResolving {
    	 * @param context the context in which the method would be called
    	 * @return returns all types known in the AST that have a method with a given name
    	 */
-	public static ITypeBinding[] getQualifierGuess(ASTNode searchRoot, final String selector, List arguments, final IBinding context) {
+	public static ITypeBinding[] getQualifierGuess(ASTNode searchRoot, final String selector, List<Expression> arguments, final IBinding context) {
 		final int nArgs= arguments.size();
-		final ArrayList result= new ArrayList();
+		final ArrayList<ITypeBinding> result= new ArrayList<ITypeBinding>();
 
 		// test if selector is a object method
 		ITypeBinding binding= searchRoot.getAST().resolveWellKnownType("java.lang.Object"); //$NON-NLS-1$
@@ -535,7 +535,7 @@ public class ASTResolving {
 		}
 
 		visitAllBindings(searchRoot, new TypeBindingVisitor() {
-			private HashSet fVisitedBindings= new HashSet(100);
+			private HashSet<String> fVisitedBindings= new HashSet<String>(100);
 
 			public boolean visit(ITypeBinding node) {
 				node= Bindings.normalizeTypeBinding(node);
@@ -563,7 +563,7 @@ public class ASTResolving {
 				return true;
 			}
 		});
-		return (ITypeBinding[]) result.toArray(new ITypeBinding[result.size()]);
+		return result.toArray(new ITypeBinding[result.size()]);
 	}
 
 	public static void visitAllBindings(ASTNode astRoot, TypeBindingVisitor visitor) {
@@ -583,6 +583,7 @@ public class ASTResolving {
 			super(true);
 			fVisitor= visitor;
 		}
+		@Override
 		public boolean visit(SimpleName node) {
 			ITypeBinding binding= node.resolveTypeBinding();
 			if (binding != null) {
@@ -923,7 +924,7 @@ public class ASTResolving {
 	private static final Code[] CODE_ORDER= { PrimitiveType.CHAR, PrimitiveType.SHORT, PrimitiveType.INT, PrimitiveType.LONG, PrimitiveType.FLOAT, PrimitiveType.DOUBLE };
 
 	public static ITypeBinding[] getNarrowingTypes(AST ast, ITypeBinding type) {
-		ArrayList res= new ArrayList();
+		ArrayList<ITypeBinding> res= new ArrayList<ITypeBinding>();
 		res.add(type);
 		if (type.isPrimitive()) {
 			Code code= PrimitiveType.toCode(type.getName());
@@ -932,11 +933,11 @@ public class ASTResolving {
 				res.add(ast.resolveWellKnownType(typeName));
 			}
 		}
-		return (ITypeBinding[]) res.toArray(new ITypeBinding[res.size()]);
+		return res.toArray(new ITypeBinding[res.size()]);
 	}
 
 	public static ITypeBinding[] getRelaxingTypes(AST ast, ITypeBinding type) {
-		ArrayList res= new ArrayList();
+		ArrayList<ITypeBinding> res= new ArrayList<ITypeBinding>();
 		res.add(type);
 		if (type.isArray()) {
 			res.add(ast.resolveWellKnownType("java.lang.Object")); //$NON-NLS-1$
@@ -962,10 +963,10 @@ public class ASTResolving {
 		} else {
 			collectRelaxingTypes(res, type);
 		}
-		return (ITypeBinding[]) res.toArray(new ITypeBinding[res.size()]);
+		return res.toArray(new ITypeBinding[res.size()]);
 	}
 
-	private static void collectRelaxingTypes(Collection res, ITypeBinding type) {
+	private static void collectRelaxingTypes(Collection<ITypeBinding> res, ITypeBinding type) {
 		ITypeBinding[] interfaces= type.getInterfaces();
 		for (int i= 0; i < interfaces.length; i++) {
 			ITypeBinding curr= interfaces[i];
@@ -985,8 +986,8 @@ public class ASTResolving {
 
 	public static String[] getUsedVariableNames(ASTNode node) {
 		CompilationUnit root= (CompilationUnit) node.getRoot();
-		Collection res= (new ScopeAnalyzer(root)).getUsedVariableNames(node.getStartPosition(), node.getLength());
-		return (String[]) res.toArray(new String[res.size()]);
+		Collection<String> res= (new ScopeAnalyzer(root)).getUsedVariableNames(node.getStartPosition(), node.getLength());
+		return res.toArray(new String[res.size()]);
 	}
 
 	private static boolean isVariableDefinedInContext(IBinding binding, ITypeBinding typeVariable) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/AdvancedQuickAssistProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/AdvancedQuickAssistProcessor.java
index 43417d0..53ac25d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/AdvancedQuickAssistProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/AdvancedQuickAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,8 @@ import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.NamingConventions;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.AssertStatement;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.BooleanLiteral;
@@ -82,10 +84,12 @@ import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
 import org.eclipse.jdt.internal.corext.dom.LinkedNodeFinder;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
 import org.eclipse.jdt.internal.corext.fix.ExpressionsFix;
 import org.eclipse.jdt.internal.corext.fix.IProposableFix;
 import org.eclipse.jdt.internal.corext.refactoring.code.OperatorPrecedence;
+import org.eclipse.jdt.internal.corext.refactoring.util.TightSourceRangeComputer;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -114,19 +118,32 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 	public boolean hasAssists(IInvocationContext context) throws CoreException {
 		ASTNode coveringNode= context.getCoveringNode();
 		if (coveringNode != null) {
-			ArrayList coveredNodes= getFullyCoveredNodes(context, coveringNode);
-			return getInverseIfProposals(context, coveringNode, null) || getIfReturnIntoIfElseAtEndOfVoidMethodProposals(context, coveringNode, null)
-					|| getInverseIfContinueIntoIfThenInLoopsProposals(context, coveringNode, null) || getInverseIfIntoContinueInLoopsProposals(context, coveringNode, null)
-					|| getInverseConditionProposals(context, coveringNode, coveredNodes, null) || getRemoveExtraParenthesisProposals(context, coveringNode, coveredNodes, null)
-					|| getAddParanoidalParenthesisProposals(context, coveredNodes, null) || getJoinAndIfStatementsProposals(context, coveringNode, null)
-					|| getSplitAndConditionProposals(context, coveringNode, null) || getJoinOrIfStatementsProposals(context, coveringNode, coveredNodes, null)
-					|| getSplitOrConditionProposals(context, coveringNode, null) || getInverseConditionalExpressionProposals(context, coveringNode, null)
-					|| getExchangeInnerAndOuterIfConditionsProposals(context, coveringNode, null) || getExchangeOperandsProposals(context, coveringNode, null)
-					|| getCastAndAssignIfStatementProposals(context, coveringNode, null) || getPickOutStringProposals(context, coveringNode, null)
-					|| getReplaceIfElseWithConditionalProposals(context, coveringNode, null) || getReplaceConditionalWithIfElseProposals(context, coveringNode, null)
-					|| getInverseLocalVariableProposals(context, coveringNode, null) || getPushNegationDownProposals(context, coveringNode, null)
-					|| getPullNegationUpProposals(context, coveredNodes, null) || getJoinIfListInIfElseIfProposals(context, coveringNode, coveredNodes, null)
-					|| getConvertSwitchToIfProposals(context, coveringNode, null) || GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, coveringNode, null, null);
+			ArrayList<ASTNode> coveredNodes= getFullyCoveredNodes(context, coveringNode);
+			return getInverseIfProposals(context, coveringNode, null)
+					|| getIfReturnIntoIfElseAtEndOfVoidMethodProposals(context, coveringNode, null)
+					|| getInverseIfContinueIntoIfThenInLoopsProposals(context, coveringNode, null)
+					|| getInverseIfIntoContinueInLoopsProposals(context, coveringNode, null)
+					|| getInverseConditionProposals(context, coveringNode, coveredNodes, null)
+					|| getRemoveExtraParenthesesProposals(context, coveringNode, coveredNodes, null)
+					|| getAddParanoidalParenthesesProposals(context, coveredNodes, null)
+					|| getAddParenthesesForExpressionProposals(context, coveringNode, null)
+					|| getJoinAndIfStatementsProposals(context, coveringNode, null)
+					|| getSplitAndConditionProposals(context, coveringNode, null)
+					|| getJoinOrIfStatementsProposals(context, coveringNode, coveredNodes, null)
+					|| getSplitOrConditionProposals(context, coveringNode, null)
+					|| getInverseConditionalExpressionProposals(context, coveringNode, null)
+					|| getExchangeInnerAndOuterIfConditionsProposals(context, coveringNode, null)
+					|| getExchangeOperandsProposals(context, coveringNode, null)
+					|| getCastAndAssignIfStatementProposals(context, coveringNode, null)
+					|| getPickOutStringProposals(context, coveringNode, null)
+					|| getReplaceIfElseWithConditionalProposals(context, coveringNode, null)
+					|| getReplaceConditionalWithIfElseProposals(context, coveringNode, null)
+					|| getInverseLocalVariableProposals(context, coveringNode, null)
+					|| getPushNegationDownProposals(context, coveringNode, null)
+					|| getPullNegationUpProposals(context, coveredNodes, null)
+					|| getJoinIfListInIfElseIfProposals(context, coveringNode, coveredNodes, null)
+					|| getConvertSwitchToIfProposals(context, coveringNode, null)
+					|| GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, coveringNode, null, null);
 		}
 		return false;
 	}
@@ -137,16 +154,17 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 	public IJavaCompletionProposal[] getAssists(IInvocationContext context, IProblemLocation[] locations) throws CoreException {
 		ASTNode coveringNode= context.getCoveringNode();
 		if (coveringNode != null) {
-			ArrayList coveredNodes= getFullyCoveredNodes(context, coveringNode);
-			ArrayList resultingCollections= new ArrayList();
+			ArrayList<ASTNode> coveredNodes= getFullyCoveredNodes(context, coveringNode);
+			ArrayList<ICommandAccess> resultingCollections= new ArrayList<ICommandAccess>();
 			if (QuickAssistProcessor.noErrorsAtLocation(locations)) {
 				getInverseIfProposals(context, coveringNode, resultingCollections);
 				getIfReturnIntoIfElseAtEndOfVoidMethodProposals(context, coveringNode, resultingCollections);
 				getInverseIfContinueIntoIfThenInLoopsProposals(context, coveringNode, resultingCollections);
 				getInverseIfIntoContinueInLoopsProposals(context, coveringNode, resultingCollections);
 				getInverseConditionProposals(context, coveringNode, coveredNodes, resultingCollections);
-				getRemoveExtraParenthesisProposals(context, coveringNode, coveredNodes, resultingCollections);
-				getAddParanoidalParenthesisProposals(context, coveredNodes, resultingCollections);
+				getRemoveExtraParenthesesProposals(context, coveringNode, coveredNodes, resultingCollections);
+				getAddParanoidalParenthesesProposals(context, coveredNodes, resultingCollections);
+				getAddParenthesesForExpressionProposals(context, coveringNode, resultingCollections);
 				getJoinAndIfStatementsProposals(context, coveringNode, resultingCollections);
 				getSplitAndConditionProposals(context, coveringNode, resultingCollections);
 				getJoinOrIfStatementsProposals(context, coveringNode, coveredNodes, resultingCollections);
@@ -166,12 +184,12 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 				GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, coveringNode, locations, resultingCollections);
 			}
 
-			return (IJavaCompletionProposal[]) resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
+			return resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
 		}
 		return null;
 	}
 
-	private static boolean getIfReturnIntoIfElseAtEndOfVoidMethodProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getIfReturnIntoIfElseAtEndOfVoidMethodProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		if (!(covering instanceof IfStatement)) {
 			return false;
 		}
@@ -185,7 +203,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			return false;
 		}
 		Block thenBlock= (Block) thenStatement;
-		List thenStatements= thenBlock.statements();
+		List<Statement> thenStatements= thenBlock.statements();
 		if (thenStatements.isEmpty() || !(thenStatements.get(thenStatements.size() - 1) instanceof ReturnStatement)) {
 			return false;
 		}
@@ -198,7 +216,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		if (!(returnType instanceof PrimitiveType) || ((PrimitiveType) returnType).getPrimitiveTypeCode() != PrimitiveType.VOID)
 			return false;
 		//
-		List statements= coveringMetod.getBody().statements();
+		List<Statement> statements= coveringMetod.getBody().statements();
 		int ifIndex= statements.indexOf(ifStatement);
 		if (ifIndex == -1) {
 			return false;
@@ -212,14 +230,14 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		ASTRewrite rewrite= ASTRewrite.create(ast);
 		// remove last 'return' in 'then' block
 		ListRewrite listRewriter= rewrite.getListRewrite(thenBlock, (ChildListPropertyDescriptor) ifStatement.getLocationInParent());
-		listRewriter.remove((ASTNode) thenStatements.get(thenStatements.size() - 1), null);
+		listRewriter.remove(thenStatements.get(thenStatements.size() - 1), null);
 		// prepare original nodes
 		Expression conditionPlaceholder= (Expression) rewrite.createMoveTarget(ifStatement.getExpression());
 		Statement thenPlaceholder= (Statement) rewrite.createMoveTarget(ifStatement.getThenStatement());
 		// prepare 'else' block
 		Block elseBlock= ast.newBlock();
 		for (int i= ifIndex + 1; i < statements.size(); i++) {
-			Statement statement= (Statement) statements.get(i);
+			Statement statement= statements.get(i);
 			elseBlock.statements().add(rewrite.createMoveTarget(statement));
 		}
 		// prepare new 'if' statement
@@ -236,7 +254,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getInverseIfProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getInverseIfProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		if (!(covering instanceof IfStatement)) {
 			return false;
 		}
@@ -277,7 +295,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getInverseIfContinueIntoIfThenInLoopsProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getInverseIfContinueIntoIfThenInLoopsProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		if (!(covering instanceof IfStatement)) {
 			return false;
 		}
@@ -326,7 +344,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getInverseIfIntoContinueInLoopsProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getInverseIfIntoContinueInLoopsProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		if (!(covering instanceof IfStatement)) {
 			return false;
 		}
@@ -366,8 +384,8 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			// if there is no block, create it
 			ifParentBlock= ast.newBlock();
 			ifParentBlock.statements().add(newIf);
-			for (Iterator iter= getUnwrappedStatements(ifStatement.getThenStatement()).iterator(); iter.hasNext();) {
-				Statement statement= (Statement) iter.next();
+			for (Iterator<Statement> iter= getUnwrappedStatements(ifStatement.getThenStatement()).iterator(); iter.hasNext();) {
+				Statement statement= iter.next();
 				ifParentBlock.statements().add(rewrite.createMoveTarget(statement));
 			}
 			// replace 'if' statement as body with new block
@@ -381,8 +399,8 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			ListRewrite listRewriter= rewrite.getListRewrite(ifParentBlock, (ChildListPropertyDescriptor) ifStatement.getLocationInParent());
 			listRewriter.replace(ifStatement, newIf, null);
 			// add statements from 'then' to the end of block
-			for (Iterator iter= getUnwrappedStatements(ifStatement.getThenStatement()).iterator(); iter.hasNext();) {
-				Statement statement= (Statement) iter.next();
+			for (Iterator<Statement> iter= getUnwrappedStatements(ifStatement.getThenStatement()).iterator(); iter.hasNext();) {
+				Statement statement= iter.next();
 				listRewriter.insertLast(rewrite.createMoveTarget(statement), null);
 			}
 		}
@@ -394,11 +412,11 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static ArrayList getUnwrappedStatements(Statement body) {
-		ArrayList statements= new ArrayList();
+	private static ArrayList<Statement> getUnwrappedStatements(Statement body) {
+		ArrayList<Statement> statements= new ArrayList<Statement>();
 		if (body instanceof Block) {
-			for (Iterator iter= ((Block) body).statements().iterator(); iter.hasNext();) {
-				Statement statement= (Statement) iter.next();
+			for (Iterator<Statement> iter= ((Block) body).statements().iterator(); iter.hasNext();) {
+				Statement statement= iter.next();
 				statements.add(statement);
 			}
 		} else {
@@ -407,7 +425,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return statements;
 	}
 
-	private static boolean getInverseConditionProposals(IInvocationContext context, ASTNode covering, ArrayList coveredNodes, Collection resultingCollections) {
+	private static boolean getInverseConditionProposals(IInvocationContext context, ASTNode covering, ArrayList<ASTNode> coveredNodes, Collection<ICommandAccess> resultingCollections) {
 		if (coveredNodes.isEmpty()) {
 			return false;
 		}
@@ -416,8 +434,8 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		final ASTRewrite rewrite= ASTRewrite.create(ast);
 		// check sub-expressions in fully covered nodes
 		boolean hasChanges= false;
-		for (Iterator iter= coveredNodes.iterator(); iter.hasNext();) {
-			ASTNode covered= (ASTNode) iter.next();
+		for (Iterator<ASTNode> iter= coveredNodes.iterator(); iter.hasNext();) {
+			ASTNode covered= iter.next();
 			Expression coveredExpression= getBooleanExpression(covered);
 			if (coveredExpression != null) {
 				Expression inversedExpression= getInversedExpression(rewrite, coveredExpression);
@@ -499,20 +517,23 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			if (operator == InfixExpression.Operator.OR) {
 				return getInversedAndOrExpression(rewrite, infixExpression, InfixExpression.Operator.AND, provider);
 			}
+			if (operator == InfixExpression.Operator.XOR) {
+				return getInversedNotExpression(rewrite, expression, ast);
+			}
 		}
 		if (expression instanceof PrefixExpression) {
 			PrefixExpression prefixExpression= (PrefixExpression) expression;
 			if (prefixExpression.getOperator() == PrefixExpression.Operator.NOT) {
-				return getRenamedNameCopy(provider, rewrite, prefixExpression.getOperand());
+				Expression operand= prefixExpression.getOperand();
+				if ((operand instanceof ParenthesizedExpression)
+						&& NecessaryParenthesesChecker.canRemoveParentheses(operand, expression.getParent(), expression.getLocationInParent())) {
+					operand= ((ParenthesizedExpression)operand).getExpression();
+				}
+				return getRenamedNameCopy(provider, rewrite, operand);
 			}
 		}
 		if (expression instanceof InstanceofExpression) {
-			PrefixExpression prefixExpression= ast.newPrefixExpression();
-			prefixExpression.setOperator(PrefixExpression.Operator.NOT);
-			ParenthesizedExpression parenthesizedExpression= ast.newParenthesizedExpression();
-			parenthesizedExpression.setExpression((Expression) rewrite.createCopyTarget(expression));
-			prefixExpression.setOperand(parenthesizedExpression);
-			return prefixExpression;
+			return getInversedNotExpression(rewrite, expression, ast);
 		}
 		if (expression instanceof ParenthesizedExpression) {
 			ParenthesizedExpression parenthesizedExpression= (ParenthesizedExpression) expression;
@@ -523,14 +544,33 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			if (innerExpression instanceof InstanceofExpression) {
 				return getInversedExpression(rewrite, innerExpression, provider);
 			}
-			parenthesizedExpression= ast.newParenthesizedExpression();
-			parenthesizedExpression.setExpression(getInversedExpression(rewrite, innerExpression, provider));
+			parenthesizedExpression= getParenthesizedExpression(ast, getInversedExpression(rewrite, innerExpression, provider));
 			return parenthesizedExpression;
 		}
-		//
+		if (expression instanceof ConditionalExpression) {
+			ConditionalExpression conditionalExpression= (ConditionalExpression)expression;
+			ConditionalExpression newExpression= ast.newConditionalExpression();
+			newExpression.setExpression((Expression)rewrite.createCopyTarget(conditionalExpression.getExpression()));
+			newExpression.setThenExpression(getInversedExpression(rewrite, conditionalExpression.getThenExpression()));
+			newExpression.setElseExpression(getInversedExpression(rewrite, conditionalExpression.getElseExpression()));
+			return newExpression;
+		}
+
 		PrefixExpression prefixExpression= ast.newPrefixExpression();
 		prefixExpression.setOperator(PrefixExpression.Operator.NOT);
-		prefixExpression.setOperand(getRenamedNameCopy(provider, rewrite, expression));
+		Expression renamedNameCopy= getRenamedNameCopy(provider, rewrite, expression);
+		if (NecessaryParenthesesChecker.needsParentheses(renamedNameCopy, prefixExpression, PrefixExpression.OPERAND_PROPERTY)) {
+			renamedNameCopy= getParenthesizedExpression(ast, renamedNameCopy);
+		}
+		prefixExpression.setOperand(renamedNameCopy);
+		return prefixExpression;
+	}
+
+	private static Expression getInversedNotExpression(ASTRewrite rewrite, Expression expression, AST ast) {
+		PrefixExpression prefixExpression= ast.newPrefixExpression();
+		prefixExpression.setOperator(PrefixExpression.Operator.NOT);
+		ParenthesizedExpression parenthesizedExpression= getParenthesizedExpression(ast, (Expression)rewrite.createCopyTarget(expression));
+		prefixExpression.setOperand(parenthesizedExpression);
 		return prefixExpression;
 	}
 
@@ -568,19 +608,19 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		Expression rightOperand= getInversedExpression(rewrite, infixExpression.getRightOperand(), provider);
 		newExpression.setRightOperand(parenthesizeIfRequired(rightOperand, newOperatorPrecedence));
 
-		List extraOperands= infixExpression.extendedOperands();
-		List newExtraOperands= newExpression.extendedOperands();
+		List<Expression> extraOperands= infixExpression.extendedOperands();
+		List<Expression> newExtraOperands= newExpression.extendedOperands();
 		for (int i= 0; i < extraOperands.size(); i++) {
-			Expression extraOperand= getInversedExpression(rewrite, (Expression) extraOperands.get(i), provider);
+			Expression extraOperand= getInversedExpression(rewrite, extraOperands.get(i), provider);
 			newExtraOperands.add(parenthesizeIfRequired(extraOperand, newOperatorPrecedence));
 		}
 		return newExpression;
 	}
 
-	private static boolean getRemoveExtraParenthesisProposals(IInvocationContext context, ASTNode covering, ArrayList coveredNodes, Collection resultingCollections) {
-		ArrayList nodes;
+	private static boolean getRemoveExtraParenthesesProposals(IInvocationContext context, ASTNode covering, ArrayList<ASTNode> coveredNodes, Collection<ICommandAccess> resultingCollections) {
+		ArrayList<ASTNode> nodes;
 		if (context.getSelectionLength() == 0 && covering instanceof ParenthesizedExpression) {
-			nodes= new ArrayList();
+			nodes= new ArrayList<ASTNode>();
 			nodes.add(covering);
 		} else {
 			nodes= coveredNodes;
@@ -588,7 +628,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		if (nodes.isEmpty())
 			return false;
 
-		IProposableFix fix= ExpressionsFix.createRemoveUnnecessaryParenthesisFix(context.getASTRoot(), (ASTNode[]) nodes.toArray(new ASTNode[nodes.size()]));
+		IProposableFix fix= ExpressionsFix.createRemoveUnnecessaryParenthesisFix(context.getASTRoot(), nodes.toArray(new ASTNode[nodes.size()]));
 		if (fix == null)
 			return false;
 
@@ -596,7 +636,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			return true;
 
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_REMOVE);
-		Map options= new Hashtable();
+		Map<String, String> options= new Hashtable<String, String>();
 		options.put(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES, CleanUpOptions.TRUE);
 		options.put(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_NEVER, CleanUpOptions.TRUE);
 		FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new ExpressionsCleanUp(options), 1, image, context);
@@ -604,9 +644,9 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getAddParanoidalParenthesisProposals(IInvocationContext context, ArrayList coveredNodes, Collection resultingCollections) {
+	private static boolean getAddParanoidalParenthesesProposals(IInvocationContext context, ArrayList<ASTNode> coveredNodes, Collection<ICommandAccess> resultingCollections) {
 
-		IProposableFix fix= ExpressionsFix.createAddParanoidalParenthesisFix(context.getASTRoot(), (ASTNode[]) coveredNodes.toArray(new ASTNode[coveredNodes.size()]));
+		IProposableFix fix= ExpressionsFix.createAddParanoidalParenthesisFix(context.getASTRoot(), coveredNodes.toArray(new ASTNode[coveredNodes.size()]));
 		if (fix == null)
 			return false;
 
@@ -614,20 +654,66 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			return true;
 
 		// add correction proposal
-		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-		Map options= new Hashtable();
+		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CAST);
+		Map<String, String> options= new Hashtable<String, String>();
 		options.put(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES, CleanUpOptions.TRUE);
 		options.put(CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_ALWAYS, CleanUpOptions.TRUE);
-		FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new ExpressionsCleanUp(options), 1, image, context);
+		FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new ExpressionsCleanUp(options), -9, image, context);
 		resultingCollections.add(proposal);
 		return true;
 	}
 
-	private static ArrayList getFullyCoveredNodes(IInvocationContext context, ASTNode coveringNode) {
-		final ArrayList coveredNodes= new ArrayList();
+	private static boolean getAddParenthesesForExpressionProposals(IInvocationContext context, ASTNode coveringNode, Collection<ICommandAccess> resultingCollections) {
+		ASTNode node;
+
+		if (context.getSelectionLength() == 0) {
+			node= coveringNode;
+			while (node != null && !(node instanceof CastExpression) && !(node instanceof InfixExpression) && !(node instanceof InstanceofExpression) && !(node instanceof ConditionalExpression)) {
+				node= node.getParent();
+			}
+		} else {
+			node= context.getCoveredNode();
+		}
+
+		String label= null;
+		if (node instanceof CastExpression) {
+			label= CorrectionMessages.UnresolvedElementsSubProcessor_missingcastbrackets_description;
+		} else if (node instanceof InstanceofExpression) {
+			label= CorrectionMessages.LocalCorrectionsSubProcessor_setparenteses_instanceof_description;
+		} else if (node instanceof InfixExpression) {
+			InfixExpression infixExpression= (InfixExpression)node;
+			label= Messages.format(CorrectionMessages.LocalCorrectionsSubProcessor_setparenteses_description, infixExpression.getOperator().toString());
+		} else if (node instanceof ConditionalExpression) {
+			label= CorrectionMessages.AdvancedQuickAssistProcessor_putConditionalExpressionInParentheses;
+		} else {
+			return false;
+		}
+
+		if (node.getParent() instanceof ParenthesizedExpression)
+			return false;
+
+		if (resultingCollections == null)
+			return true;
+
+		AST ast= node.getAST();
+		ASTRewrite rewrite= ASTRewrite.create(ast);
+
+		ParenthesizedExpression parenthesizedExpression= ast.newParenthesizedExpression();
+		parenthesizedExpression.setExpression((Expression)rewrite.createCopyTarget(node));
+		rewrite.replace(node, parenthesizedExpression, null);
+
+		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CAST);
+		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, -10, image);
+		resultingCollections.add(proposal);
+		return true;
+	}
+
+	private static ArrayList<ASTNode> getFullyCoveredNodes(IInvocationContext context, ASTNode coveringNode) {
+		final ArrayList<ASTNode> coveredNodes= new ArrayList<ASTNode>();
 		final int selectionBegin= context.getSelectionOffset();
 		final int selectionEnd= selectionBegin + context.getSelectionLength();
 		coveringNode.accept(new GenericVisitor() {
+			@Override
 			protected boolean visitNode(ASTNode node) {
 				int nodeStart= node.getStartPosition();
 				int nodeEnd= nodeStart + node.getLength();
@@ -656,7 +742,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return coveredNodes;
 	}
 
-	private static boolean getJoinAndIfStatementsProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getJoinAndIfStatementsProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 
 		//
 		if (!(node instanceof IfStatement)) {
@@ -684,12 +770,12 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 				//
 				AST ast= node.getAST();
 				ASTRewrite rewrite= ASTRewrite.create(ast);
-				// prepare condition parts, add parenthesis if needed
-				Expression outerCondition= getParenthesizedForAndIfNeeded(ast, rewrite, outerIf.getExpression());
-				Expression innerCondition= getParenthesizedForAndIfNeeded(ast, rewrite, ifStatement.getExpression());
 				// create compound condition
 				InfixExpression condition= ast.newInfixExpression();
 				condition.setOperator(InfixExpression.Operator.CONDITIONAL_AND);
+				// prepare condition parts, add parentheses if needed
+				Expression outerCondition= getParenthesizedExpressionIfNeeded(ast, rewrite, outerIf.getExpression(), condition, InfixExpression.LEFT_OPERAND_PROPERTY);
+				Expression innerCondition= getParenthesizedExpressionIfNeeded(ast, rewrite, ifStatement.getExpression(), condition, InfixExpression.RIGHT_OPERAND_PROPERTY);
 				condition.setLeftOperand(outerCondition);
 				condition.setRightOperand(innerCondition);
 				// create new IfStatement
@@ -723,12 +809,12 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 				//
 				AST ast= node.getAST();
 				ASTRewrite rewrite= ASTRewrite.create(ast);
-				// prepare condition parts, add parenthesis if needed
-				Expression outerCondition= getParenthesizedForAndIfNeeded(ast, rewrite, ifStatement.getExpression());
-				Expression innerCondition= getParenthesizedForAndIfNeeded(ast, rewrite, innerIf.getExpression());
 				// create compound condition
 				InfixExpression condition= ast.newInfixExpression();
 				condition.setOperator(InfixExpression.Operator.CONDITIONAL_AND);
+				// prepare condition parts, add parentheses if needed
+				Expression outerCondition= getParenthesizedExpressionIfNeeded(ast, rewrite, ifStatement.getExpression(), condition, InfixExpression.LEFT_OPERAND_PROPERTY);
+				Expression innerCondition= getParenthesizedExpressionIfNeeded(ast, rewrite, innerIf.getExpression(), condition, InfixExpression.RIGHT_OPERAND_PROPERTY);
 				condition.setLeftOperand(outerCondition);
 				condition.setRightOperand(innerCondition);
 				// create new IfStatement
@@ -747,29 +833,22 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static Expression getParenthesizedForAndIfNeeded(AST ast, ASTRewrite rewrite, Expression expression) {
-		boolean addParentheses= false;
-		int nodeType= expression.getNodeType();
-		if (nodeType == ASTNode.INFIX_EXPRESSION) {
-			InfixExpression infixExpression= (InfixExpression) expression;
-			addParentheses= infixExpression.getOperator() == InfixExpression.Operator.CONDITIONAL_OR;
-		} else {
-			addParentheses= nodeType == ASTNode.CONDITIONAL_EXPRESSION || nodeType == ASTNode.ASSIGNMENT || nodeType == ASTNode.INSTANCEOF_EXPRESSION;
-		}
-		expression= (Expression) rewrite.createCopyTarget(expression);
+	private static Expression getParenthesizedExpressionIfNeeded(AST ast, ASTRewrite rewrite, Expression expression, ASTNode parent, StructuralPropertyDescriptor locationInParent) {
+		boolean addParentheses= NecessaryParenthesesChecker.needsParentheses(expression, parent, locationInParent);
+		expression= (Expression)rewrite.createCopyTarget(expression);
 		if (addParentheses) {
 			return getParenthesizedExpression(ast, expression);
 		}
 		return expression;
 	}
 
-	private static Expression getParenthesizedExpression(AST ast, Expression expression) {
+	private static ParenthesizedExpression getParenthesizedExpression(AST ast, Expression expression) {
 		ParenthesizedExpression parenthesizedExpression= ast.newParenthesizedExpression();
 		parenthesizedExpression.setExpression(expression);
 		return parenthesizedExpression;
 	}
 
-	public static boolean getSplitAndConditionProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	public static boolean getSplitAndConditionProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		Operator andOperator= InfixExpression.Operator.CONDITIONAL_AND;
 		// check that user invokes quick assist on infix expression
 		if (!(node instanceof InfixExpression)) {
@@ -862,10 +941,10 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		if (isSelectingOperator(left, right, offset, length)) {
 			return ASTNodes.getExclusiveEnd(left);
 		}
-		List extended= infixExpression.extendedOperands();
+		List<Expression> extended= infixExpression.extendedOperands();
 		for (int i= 0; i < extended.size(); i++) {
 			left= right;
-			right= (ASTNode) extended.get(i);
+			right= extended.get(i);
 			if (isSelectingOperator(left, right, offset, length)) {
 				return ASTNodes.getExclusiveEnd(left);
 			}
@@ -873,14 +952,14 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return -1;
 	}
 
-	private static boolean getJoinOrIfStatementsProposals(IInvocationContext context, ASTNode covering, ArrayList coveredNodes, Collection resultingCollections) {
+	private static boolean getJoinOrIfStatementsProposals(IInvocationContext context, ASTNode covering, ArrayList<ASTNode> coveredNodes, Collection<ICommandAccess> resultingCollections) {
 		Operator orOperator= InfixExpression.Operator.CONDITIONAL_OR;
 		if (coveredNodes.size() < 2)
 			return false;
 		// check that all covered nodes are IfStatement's with same 'then' statement and without 'else'
 		String commonThenSource= null;
-		for (Iterator iter= coveredNodes.iterator(); iter.hasNext();) {
-			ASTNode node= (ASTNode) iter.next();
+		for (Iterator<ASTNode> iter= coveredNodes.iterator(); iter.hasNext();) {
+			ASTNode node= iter.next();
 			if (!(node instanceof IfStatement))
 				return false;
 			//
@@ -911,23 +990,22 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		InfixExpression condition= null;
 		boolean hasRightOperand= false;
 		Statement thenStatement= null;
-		for (Iterator iter= coveredNodes.iterator(); iter.hasNext();) {
+		for (Iterator<ASTNode> iter= coveredNodes.iterator(); iter.hasNext();) {
 			IfStatement ifStatement= (IfStatement) iter.next();
 			if (thenStatement == null)
 				thenStatement= (Statement) rewrite.createCopyTarget(ifStatement.getThenStatement());
-			Expression ifCondition= getParenthesizedForOrIfNeeded(ast, rewrite, ifStatement.getExpression());
 			if (condition == null) {
 				condition= ast.newInfixExpression();
 				condition.setOperator(orOperator);
-				condition.setLeftOperand(ifCondition);
+				condition.setLeftOperand(getParenthesizedExpressionIfNeeded(ast, rewrite, ifStatement.getExpression(), condition, InfixExpression.LEFT_OPERAND_PROPERTY));
 			} else if (!hasRightOperand) {
-				condition.setRightOperand(ifCondition);
+				condition.setRightOperand(getParenthesizedExpressionIfNeeded(ast, rewrite, ifStatement.getExpression(), condition, InfixExpression.RIGHT_OPERAND_PROPERTY));
 				hasRightOperand= true;
 			} else {
 				InfixExpression newCondition= ast.newInfixExpression();
 				newCondition.setOperator(orOperator);
 				newCondition.setLeftOperand(condition);
-				newCondition.setRightOperand(ifCondition);
+				newCondition.setRightOperand(getParenthesizedExpressionIfNeeded(ast, rewrite, ifStatement.getExpression(), condition, InfixExpression.RIGHT_OPERAND_PROPERTY));
 				condition= newCondition;
 			}
 		}
@@ -937,7 +1015,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		newIf.setThenStatement(thenStatement);
 		//
 		ListRewrite listRewriter= null;
-		for (Iterator iter= coveredNodes.iterator(); iter.hasNext();) {
+		for (Iterator<ASTNode> iter= coveredNodes.iterator(); iter.hasNext();) {
 			IfStatement ifStatement= (IfStatement) iter.next();
 			if (listRewriter == null) {
 				Block sourceBlock= (Block) ifStatement.getParent();
@@ -959,18 +1037,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static Expression getParenthesizedForOrIfNeeded(AST ast, ASTRewrite rewrite, Expression expression) {
-		boolean addParentheses= false;
-		int nodeType= expression.getNodeType();
-		addParentheses= nodeType == ASTNode.CONDITIONAL_EXPRESSION || nodeType == ASTNode.ASSIGNMENT || nodeType == ASTNode.INSTANCEOF_EXPRESSION;
-		expression= (Expression) rewrite.createCopyTarget(expression);
-		if (addParentheses) {
-			return getParenthesizedExpression(ast, expression);
-		}
-		return expression;
-	}
-
-	public static boolean getSplitOrConditionProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	public static boolean getSplitOrConditionProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		Operator orOperator= InfixExpression.Operator.CONDITIONAL_OR;
 		// check that user invokes quick assist on infix expression
 		if (!(node instanceof InfixExpression)) {
@@ -1036,7 +1103,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getInverseConditionalExpressionProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getInverseConditionalExpressionProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		// try to find conditional expression as parent
 		while (covering instanceof Expression) {
 			if (covering instanceof ConditionalExpression)
@@ -1069,7 +1136,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getExchangeInnerAndOuterIfConditionsProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getExchangeInnerAndOuterIfConditionsProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		boolean result= false;
 		//
 		if (!(node instanceof IfStatement)) {
@@ -1146,15 +1213,19 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return result;
 	}
 
-	private static boolean getExchangeOperandsProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getExchangeOperandsProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		// check that user invokes quick assist on infix expression
 		if (!(node instanceof InfixExpression)) {
 			return false;
 		}
-		InfixExpression infixExpression= (InfixExpression) node;
+		InfixExpression infixExpression= (InfixExpression)node;
 		Operator operator= infixExpression.getOperator();
-		if (operator != InfixExpression.Operator.CONDITIONAL_AND && operator != InfixExpression.Operator.AND && operator != InfixExpression.Operator.CONDITIONAL_OR
-				&& operator != InfixExpression.Operator.OR && operator != InfixExpression.Operator.EQUALS && operator != InfixExpression.Operator.PLUS && operator != InfixExpression.Operator.TIMES
+		if (operator != InfixExpression.Operator.CONDITIONAL_AND && operator != InfixExpression.Operator.AND
+				&& operator != InfixExpression.Operator.CONDITIONAL_OR && operator != InfixExpression.Operator.OR
+				&& operator != InfixExpression.Operator.EQUALS && operator != InfixExpression.Operator.NOT_EQUALS
+				&& operator != InfixExpression.Operator.LESS && operator != InfixExpression.Operator.LESS_EQUALS
+				&& operator != InfixExpression.Operator.GREATER && operator != InfixExpression.Operator.GREATER_EQUALS
+				&& operator != InfixExpression.Operator.PLUS && operator != InfixExpression.Operator.TIMES
 				&& operator != InfixExpression.Operator.XOR) {
 			return false;
 		}
@@ -1174,20 +1245,38 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		Expression leftExpression= null;
 		Expression rightExpression= null;
 		InfixExpression currentExpression= infixExpression;
-		leftExpression= combineOperands(rewrite, leftExpression, infixExpression.getLeftOperand(), true, operator);
+		leftExpression= combineOperands(rewrite, leftExpression, infixExpression.getLeftOperand(), false, operator);
 		if (infixExpression.getRightOperand().getStartPosition() <= context.getSelectionOffset()) {
-			leftExpression= combineOperands(rewrite, leftExpression, infixExpression.getRightOperand(), true, operator);
+			leftExpression= combineOperands(rewrite, leftExpression, infixExpression.getRightOperand(), false, operator);
 		} else {
-			rightExpression= combineOperands(rewrite, rightExpression, infixExpression.getRightOperand(), true, operator);
+			rightExpression= combineOperands(rewrite, rightExpression, infixExpression.getRightOperand(), false, operator);
 		}
-		for (Iterator iter= currentExpression.extendedOperands().iterator(); iter.hasNext();) {
-			Expression extendedOperand= (Expression) iter.next();
+		for (Iterator<Expression> iter= currentExpression.extendedOperands().iterator(); iter.hasNext();) {
+			Expression extendedOperand= iter.next();
 			if (extendedOperand.getStartPosition() <= context.getSelectionOffset()) {
-				leftExpression= combineOperands(rewrite, leftExpression, extendedOperand, true, operator);
+				leftExpression= combineOperands(rewrite, leftExpression, extendedOperand, false, operator);
 			} else {
-				rightExpression= combineOperands(rewrite, rightExpression, extendedOperand, true, operator);
+				rightExpression= combineOperands(rewrite, rightExpression, extendedOperand, false, operator);
 			}
 		}
+
+		if (NecessaryParenthesesChecker.needsParentheses(leftExpression, infixExpression, InfixExpression.RIGHT_OPERAND_PROPERTY)) {
+			leftExpression= getParenthesizedExpression(ast, leftExpression);
+		}
+		if (NecessaryParenthesesChecker.needsParentheses(rightExpression, infixExpression, InfixExpression.LEFT_OPERAND_PROPERTY)) {
+			rightExpression= getParenthesizedExpression(ast, rightExpression);
+		}
+
+		if (operator == InfixExpression.Operator.LESS) {
+			operator= InfixExpression.Operator.GREATER;
+		} else if (operator == InfixExpression.Operator.LESS_EQUALS) {
+			operator= InfixExpression.Operator.GREATER_EQUALS;
+		} else if (operator == InfixExpression.Operator.GREATER) {
+			operator= InfixExpression.Operator.LESS;
+		} else if (operator == InfixExpression.Operator.GREATER_EQUALS) {
+			operator= InfixExpression.Operator.LESS_EQUALS;
+		}
+
 		// create new infix expression
 		InfixExpression newInfix= ast.newInfixExpression();
 		newInfix.setOperator(operator);
@@ -1206,15 +1295,15 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 	 * Breaks an infix operation with possible extended operators at the given operator and returns the new left and right operands.
 	 * a & b & c   ->  [[a' & b' ] & c' ]   (c' == copy of c)
 	 */
-	private static void breakInfixOperationAtOperation(ASTRewrite rewrite, Expression expression, Operator operator, int operatorOffset, boolean removeParenthesis, Expression[] res) {
+	private static void breakInfixOperationAtOperation(ASTRewrite rewrite, Expression expression, Operator operator, int operatorOffset, boolean removeParentheses, Expression[] res) {
 		if (expression.getStartPosition() + expression.getLength() <= operatorOffset) {
 			// add to the left
-			res[0]= combineOperands(rewrite, res[0], expression, removeParenthesis, operator);
+			res[0]= combineOperands(rewrite, res[0], expression, removeParentheses, operator);
 			return;
 		}
 		if (operatorOffset <= expression.getStartPosition()) {
 			// add to the right
-			res[1]= combineOperands(rewrite, res[1], expression, removeParenthesis, operator);
+			res[1]= combineOperands(rewrite, res[1], expression, removeParentheses, operator);
 			return;
 		}
 		if (!(expression instanceof InfixExpression)) {
@@ -1224,22 +1313,26 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		if (infixExpression.getOperator() != operator) {
 			throw new IllegalArgumentException("Incompatible operator"); //$NON-NLS-1$
 		}
-		breakInfixOperationAtOperation(rewrite, infixExpression.getLeftOperand(), operator, operatorOffset, removeParenthesis, res);
-		breakInfixOperationAtOperation(rewrite, infixExpression.getRightOperand(), operator, operatorOffset, removeParenthesis, res);
+		breakInfixOperationAtOperation(rewrite, infixExpression.getLeftOperand(), operator, operatorOffset, removeParentheses, res);
+		breakInfixOperationAtOperation(rewrite, infixExpression.getRightOperand(), operator, operatorOffset, removeParentheses, res);
 
-		List extended= infixExpression.extendedOperands();
+		List<Expression> extended= infixExpression.extendedOperands();
 		for (int i= 0; i < extended.size(); i++) {
-			breakInfixOperationAtOperation(rewrite, (Expression) extended.get(i), operator, operatorOffset, removeParenthesis, res);
+			breakInfixOperationAtOperation(rewrite, extended.get(i), operator, operatorOffset, removeParentheses, res);
 		}
 	}
 
-	private static Expression combineOperands(ASTRewrite rewrite, Expression existing, Expression nodeToAdd, boolean removeParenthesis, Operator operator) {
-		if (existing == null && removeParenthesis) {
-			while (nodeToAdd instanceof ParenthesizedExpression) {
-				nodeToAdd= ((ParenthesizedExpression) nodeToAdd).getExpression();
+	private static Expression combineOperands(ASTRewrite rewrite, Expression existing, Expression originalNode, boolean removeParentheses, Operator operator) {
+		if (existing == null && removeParentheses) {
+			while (originalNode instanceof ParenthesizedExpression) {
+				originalNode= ((ParenthesizedExpression)originalNode).getExpression();
 			}
 		}
-		Expression newRight= (Expression) rewrite.createMoveTarget(nodeToAdd);
+		Expression newRight= (Expression)rewrite.createMoveTarget(originalNode);
+		if (originalNode instanceof InfixExpression) {
+			((InfixExpression)newRight).setOperator(((InfixExpression)originalNode).getOperator());
+		}
+
 		if (existing == null) {
 			return newRight;
 		}
@@ -1251,11 +1344,55 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return infix;
 	}
 
-	private static boolean getCastAndAssignIfStatementProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getCastAndAssignIfStatementProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
+		if (node instanceof IfStatement) {
+			node= ((IfStatement)node).getExpression();
+		} else if (node instanceof WhileStatement) {
+			node= ((WhileStatement)node).getExpression();
+		} else if (node instanceof Block) {
+			List<Statement> statements= ((Block)node).statements();
+			if (statements.size() > 0) {
+				if (context.getSelectionOffset() > statements.get(0).getStartPosition()) {
+					return false;
+				}
+			}
+			ASTNode parent= node.getParent();
+			Expression expression= null;
+			if (parent instanceof IfStatement) {
+				expression= ((IfStatement)parent).getExpression();
+			} else if (parent instanceof WhileStatement) {
+				expression= ((WhileStatement)parent).getExpression();
+			} else {
+				return false;
+			}
+
+			if (expression instanceof InstanceofExpression) {
+				node= expression;
+			} else {
+				final ArrayList<InstanceofExpression> nodes= new ArrayList<InstanceofExpression>();
+				expression.accept(new ASTVisitor() {
+					@Override
+					public boolean visit(InstanceofExpression instanceofExpression) {
+						nodes.add(instanceofExpression);
+						return false;
+					}
+				});
+
+				if (nodes.size() != 1) {
+					return false;
+				}
+				node= nodes.get(0);
+			}
+		} else {
+			while (node != null && !(node instanceof InstanceofExpression) && !(node instanceof Statement)) {
+				node= node.getParent();
+			}
+		}
+
 		if (!(node instanceof InstanceofExpression)) {
 			return false;
 		}
-		InstanceofExpression expression= (InstanceofExpression) node;
+		InstanceofExpression expression= (InstanceofExpression)node;
 		// test that we are the expression of a 'while' or 'if'
 		while (node.getParent() instanceof Expression) {
 			node= node.getParent();
@@ -1269,19 +1406,19 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		if (negated) {
 			insertionPosition= node.getParent();
 			if (locationInParent == IfStatement.EXPRESSION_PROPERTY) {
-				body= ((IfStatement) node.getParent()).getElseStatement();
+				body= ((IfStatement)node.getParent()).getElseStatement();
 				if (body != null) {
 					negated= false;
 				}
 			}
 			if (body == null && insertionPosition.getParent() instanceof Block) {
-				body= (Statement) insertionPosition.getParent();
+				body= (Statement)insertionPosition.getParent();
 			}
 		} else {
 			if (locationInParent == IfStatement.EXPRESSION_PROPERTY) {
-				body= ((IfStatement) node.getParent()).getThenStatement();
+				body= ((IfStatement)node.getParent()).getThenStatement();
 			} else if (locationInParent == WhileStatement.EXPRESSION_PROPERTY) {
-				body= ((WhileStatement) node.getParent()).getBody();
+				body= ((WhileStatement)node.getParent()).getBody();
 			}
 		}
 		if (body == null) {
@@ -1309,21 +1446,21 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_LOCAL);
 		LinkedCorrectionProposal proposal= new LinkedCorrectionProposal(label, cu, rewrite, 7, image);
 		// prepare possible variable names
-		List excludedNames= Arrays.asList(ASTResolving.getUsedVariableNames(body));
+		List<String> excludedNames= Arrays.asList(ASTResolving.getUsedVariableNames(body));
 		String[] varNames= suggestLocalVariableNames(cu, originalType.resolveBinding(), excludedNames);
 		for (int i= 0; i < varNames.length; i++) {
 			proposal.addLinkedPositionProposal(KEY_NAME, varNames[i], null);
 		}
 		CastExpression castExpression= ast.newCastExpression();
-		castExpression.setExpression((Expression) rewrite.createCopyTarget(expression.getLeftOperand()));
-		castExpression.setType((Type) ASTNode.copySubtree(ast, originalType));
+		castExpression.setExpression((Expression)rewrite.createCopyTarget(expression.getLeftOperand()));
+		castExpression.setType((Type)ASTNode.copySubtree(ast, originalType));
 		// prepare new variable declaration
 		VariableDeclarationFragment vdf= ast.newVariableDeclarationFragment();
 		vdf.setName(ast.newSimpleName(varNames[0]));
 		vdf.setInitializer(castExpression);
 		// prepare new variable declaration statement
 		VariableDeclarationStatement vds= ast.newVariableDeclarationStatement(vdf);
-		vds.setType((Type) ASTNode.copySubtree(ast, originalType));
+		vds.setType((Type)ASTNode.copySubtree(ast, originalType));
 
 		// add new variable declaration statement
 		if (negated) {
@@ -1335,9 +1472,9 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 				listRewriter.insertAt(vds, 0, null);
 			} else {
 				Block newBlock= ast.newBlock();
-				List statements= newBlock.statements();
+				List<Statement> statements= newBlock.statements();
 				statements.add(vds);
-				statements.add(rewrite.createMoveTarget(body));
+				statements.add((Statement) rewrite.createMoveTarget(body));
 				rewrite.replace(body, newBlock, null);
 			}
 		}
@@ -1367,11 +1504,11 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static String[] suggestLocalVariableNames(ICompilationUnit cu, ITypeBinding binding, List excluded) {
+	private static String[] suggestLocalVariableNames(ICompilationUnit cu, ITypeBinding binding, List<String> excluded) {
 		return StubUtility.getVariableNameSuggestions(NamingConventions.VK_LOCAL, cu.getJavaProject(), binding, null, excluded);
 	}
 
-	private static boolean getPickOutStringProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getPickOutStringProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		// we work with String's
 		if (!(node instanceof StringLiteral)) {
 			return false;
@@ -1451,16 +1588,16 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 
 	private static Statement getSingleStatement(Statement statement) {
 		if (statement instanceof Block) {
-			List blockStatements= ((Block) statement).statements();
+			List<Statement> blockStatements= ((Block) statement).statements();
 			if (blockStatements.size() != 1) {
 				return null;
 			}
-			return (Statement) blockStatements.get(0);
+			return blockStatements.get(0);
 		}
 		return statement;
 	}
 
-	private static boolean getReplaceIfElseWithConditionalProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getReplaceIfElseWithConditionalProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		if (!(node instanceof IfStatement)) {
 			return false;
 		}
@@ -1514,6 +1651,9 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		//
 		AST ast= node.getAST();
 		ASTRewrite rewrite= ASTRewrite.create(ast);
+		TightSourceRangeComputer sourceRangeComputer= new TightSourceRangeComputer();
+		sourceRangeComputer.addTightSourceNode(ifStatement);
+		rewrite.setTargetSourceRangeComputer(sourceRangeComputer);
 
 		String label= CorrectionMessages.AdvancedQuickAssistProcessor_replaceIfWithConditional;
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
@@ -1580,14 +1720,35 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return statement;
 	}
 
-	private static boolean getReplaceConditionalWithIfElseProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
-		// check that parent statement is assignment
-		while (!(covering instanceof ConditionalExpression) && covering instanceof Expression) {
-			covering= covering.getParent();
+	private static boolean getReplaceConditionalWithIfElseProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
+		ASTNode node= covering;
+		while (!(node instanceof ConditionalExpression) && node instanceof Expression) {
+			node= node.getParent();
 		}
-		if (!(covering instanceof ConditionalExpression)) {
+		if (!(node instanceof ConditionalExpression)) {
+			node= covering;
+			while (node != null && !(node instanceof Statement)) {
+				node= node.getParent();
+			}
+			if (node instanceof VariableDeclarationStatement) {
+				node= (ASTNode)(((VariableDeclarationStatement)node).fragments().get(0));
+				node= ((VariableDeclarationFragment)node).getInitializer();
+			}
+			if (node instanceof ExpressionStatement) {
+				node= ((ExpressionStatement)node).getExpression();
+				if (node instanceof Assignment) {
+					node= ((Assignment)node).getRightHandSide();
+				}
+			}
+			if (node instanceof ReturnStatement) {
+				node= ((ReturnStatement)node).getExpression();
+			}
+		}
+
+		if (!(node instanceof ConditionalExpression)) {
 			return false;
 		}
+		covering= node;
 
 		StructuralPropertyDescriptor locationInParent= covering.getLocationInParent();
 		if (locationInParent == Assignment.RIGHT_HAND_SIDE_PROPERTY) {
@@ -1657,7 +1818,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getInverseLocalVariableProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getInverseLocalVariableProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		final AST ast= covering.getAST();
 		// cursor should be placed on variable name
 		if (!(covering instanceof SimpleName)) {
@@ -1712,7 +1873,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		proposal.addLinkedPositionProposal(KEY_NAME, newIdentifier, null);
 		proposal.addLinkedPositionProposal(KEY_NAME, oldIdentifier, null);
 		// iterate over linked nodes and replace variable references with negated reference
-		final HashSet renamedNames= new HashSet();
+		final HashSet<SimpleName> renamedNames= new HashSet<SimpleName>();
 		for (int i= 0; i < linkedNodes.length; i++) {
 			SimpleName name= linkedNodes[i];
 			if (renamedNames.contains(name)) {
@@ -1732,7 +1893,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 				int exStart= expression.getStartPosition();
 				int exEnd= exStart + expression.getLength();
 				// collect all names that are used in assignments
-				HashSet overlapNames= new HashSet();
+				HashSet<SimpleName> overlapNames= new HashSet<SimpleName>();
 				for (int j= 0; j < linkedNodes.length; j++) {
 					SimpleName name2= linkedNodes[j];
 					if (name2 == null) {
@@ -1755,7 +1916,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 				};
 				Expression inversedExpression= getInversedExpression(rewrite, expression, provider);
 				// if any name was not renamed during expression inverting, we can not already rename it, so fail to create assist
-				for (Iterator iter= overlapNames.iterator(); iter.hasNext();) {
+				for (Iterator<SimpleName> iter= overlapNames.iterator(); iter.hasNext();) {
 					Object o= iter.next();
 					if (!renamedNames.contains(o)) {
 						return false;
@@ -1803,7 +1964,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getPushNegationDownProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getPushNegationDownProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		PrefixExpression negationExpression= null;
 		ParenthesizedExpression parenthesizedExpression= null;
 		// check for case when cursor is on '!' before parentheses
@@ -1819,8 +1980,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			negationExpression= (PrefixExpression) covering.getParent();
 			parenthesizedExpression= (ParenthesizedExpression) covering;
 		}
-		//
-		if (negationExpression == null) {
+		if (negationExpression == null || (!(parenthesizedExpression.getExpression() instanceof InfixExpression) && !(parenthesizedExpression.getExpression() instanceof ConditionalExpression))) {
 			return false;
 		}
 		//  we could produce quick assist
@@ -1877,26 +2037,28 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		if (expression.getParent() instanceof InfixExpression) {
 			return expression;
 		}
-		if (locationInParent == Assignment.RIGHT_HAND_SIDE_PROPERTY || locationInParent == IfStatement.EXPRESSION_PROPERTY || locationInParent == WhileStatement.EXPRESSION_PROPERTY
-				|| locationInParent == DoStatement.EXPRESSION_PROPERTY || locationInParent == ReturnStatement.EXPRESSION_PROPERTY || locationInParent == ForStatement.EXPRESSION_PROPERTY
-				|| locationInParent == MethodInvocation.ARGUMENTS_PROPERTY || locationInParent == ConstructorInvocation.ARGUMENTS_PROPERTY
-				|| locationInParent == SuperMethodInvocation.ARGUMENTS_PROPERTY || locationInParent == EnumConstantDeclaration.ARGUMENTS_PROPERTY
-				|| locationInParent == SuperConstructorInvocation.ARGUMENTS_PROPERTY || locationInParent == ClassInstanceCreation.ARGUMENTS_PROPERTY
-				|| locationInParent == ConditionalExpression.EXPRESSION_PROPERTY || locationInParent == PrefixExpression.OPERAND_PROPERTY) {
+		if (locationInParent == Assignment.RIGHT_HAND_SIDE_PROPERTY || locationInParent == IfStatement.EXPRESSION_PROPERTY
+				|| locationInParent == WhileStatement.EXPRESSION_PROPERTY || locationInParent == DoStatement.EXPRESSION_PROPERTY
+				|| locationInParent == ReturnStatement.EXPRESSION_PROPERTY || locationInParent == ForStatement.EXPRESSION_PROPERTY
+				|| locationInParent == AssertStatement.EXPRESSION_PROPERTY || locationInParent == MethodInvocation.ARGUMENTS_PROPERTY
+				|| locationInParent == ConstructorInvocation.ARGUMENTS_PROPERTY || locationInParent == SuperMethodInvocation.ARGUMENTS_PROPERTY
+				|| locationInParent == EnumConstantDeclaration.ARGUMENTS_PROPERTY || locationInParent == SuperConstructorInvocation.ARGUMENTS_PROPERTY
+				|| locationInParent == ClassInstanceCreation.ARGUMENTS_PROPERTY || locationInParent == ConditionalExpression.EXPRESSION_PROPERTY
+				|| locationInParent == PrefixExpression.OPERAND_PROPERTY) {
 			return expression;
 		}
 		return null;
 	}
 
-	private static boolean getPullNegationUpProposals(IInvocationContext context, ArrayList coveredNodes, Collection resultingCollections) {
+	private static boolean getPullNegationUpProposals(IInvocationContext context, ArrayList<ASTNode> coveredNodes, Collection<ICommandAccess> resultingCollections) {
 		if (coveredNodes.size() != 1) {
 			return false;
 		}
 		//
-		ASTNode fullyCoveredNode= (ASTNode) coveredNodes.get(0);
+		ASTNode fullyCoveredNode= coveredNodes.get(0);
 
 		Expression expression= getBooleanExpression(fullyCoveredNode);
-		if (expression == null) {
+		if (expression == null || (!(expression instanceof InfixExpression) && !(expression instanceof ConditionalExpression))) {
 			return false;
 		}
 		//  we could produce quick assist
@@ -1925,7 +2087,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getJoinIfListInIfElseIfProposals(IInvocationContext context, ASTNode covering, ArrayList coveredNodes, Collection resultingCollections) {
+	private static boolean getJoinIfListInIfElseIfProposals(IInvocationContext context, ASTNode covering, ArrayList<ASTNode> coveredNodes, Collection<ICommandAccess> resultingCollections) {
 		if (coveredNodes.isEmpty()) {
 			return false;
 		}
@@ -1934,8 +2096,8 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 			return false;
 		}
 		// check that all selected nodes are 'if' statements with only 'then' statement
-		for (Iterator iter= coveredNodes.iterator(); iter.hasNext();) {
-			ASTNode node= (ASTNode) iter.next();
+		for (Iterator<ASTNode> iter= coveredNodes.iterator(); iter.hasNext();) {
+			ASTNode node= iter.next();
 			if (!(node instanceof IfStatement)) {
 				return false;
 			}
@@ -1956,7 +2118,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		IfStatement firstNewIfStatement= null;
 		//
 		IfStatement prevIfStatement= null;
-		for (Iterator iter= coveredNodes.iterator(); iter.hasNext();) {
+		for (Iterator<ASTNode> iter= coveredNodes.iterator(); iter.hasNext();) {
 			IfStatement ifStatement= (IfStatement) iter.next();
 			// prepare new 'if' statement
 			IfStatement newIfStatement= ast.newIfStatement();
@@ -1990,7 +2152,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getConvertSwitchToIfProposals(IInvocationContext context, ASTNode covering, Collection resultingCollections) {
+	private static boolean getConvertSwitchToIfProposals(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
 		if (!(covering instanceof SwitchStatement)) {
 			return false;
 		}
@@ -2011,15 +2173,13 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		Block defaultBlock= null;
 		InfixExpression currentCondition= null;
 		boolean defaultFound= false;
-		int caseCount= 0;
 
-		ArrayList allBlocks= new ArrayList();
+		ArrayList<Block> allBlocks= new ArrayList<Block>();
 		ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(ASTResolving.findParentBodyDeclaration(covering), importRewrite);
-		for (Iterator iter= switchStatement.statements().iterator(); iter.hasNext();) {
-			Statement statement= (Statement) iter.next();
+		for (Iterator<Statement> iter= switchStatement.statements().iterator(); iter.hasNext();) {
+			Statement statement= iter.next();
 			if (statement instanceof SwitchCase) {
 				SwitchCase switchCase= (SwitchCase) statement;
-				caseCount++;
 				// special case: pass through
 				if (currentBlock != null) {
 					if (!hasStopAsLastExecutableStatement) {
@@ -2096,8 +2256,8 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		}
 		// remove unnecessary blocks in blocks
 		for (int i= 0; i < allBlocks.size(); i++) {
-			Block block= (Block) allBlocks.get(i);
-			List statements= block.statements();
+			Block block= allBlocks.get(i);
+			List<Statement> statements= block.statements();
 			if (statements.size() == 1 && statements.get(0) instanceof Block) {
 				Block innerBlock= (Block) statements.remove(0);
 				block.getParent().setStructuralProperty(block.getLocationInParent(), innerBlock);
@@ -2121,7 +2281,7 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		InfixExpression condition= ast.newInfixExpression();
 		condition.setOperator(InfixExpression.Operator.EQUALS);
 		//
-		Expression leftExpression= (Expression) rewrite.createCopyTarget(switchStatement.getExpression());
+		Expression leftExpression= getParenthesizedExpressionIfNeeded(ast, rewrite, switchStatement.getExpression(), condition, InfixExpression.LEFT_OPERAND_PROPERTY);
 		condition.setLeftOperand(leftExpression);
 		//
 		Expression rightExpression= null;
@@ -2158,8 +2318,8 @@ public class AdvancedQuickAssistProcessor implements IQuickAssistProcessor {
 		if (source instanceof Block) {
 			Block block= (Block) source;
 			Block newBlock= ast.newBlock();
-			for (Iterator iter= block.statements().iterator(); iter.hasNext();) {
-				Statement statement= (Statement) iter.next();
+			for (Iterator<Statement> iter= block.statements().iterator(); iter.hasNext();) {
+				Statement statement= iter.next();
 				if (statement instanceof BreakStatement) {
 					continue;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ClasspathFixProcessorDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ClasspathFixProcessorDescriptor.java
index 39666af..36648da 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ClasspathFixProcessorDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ClasspathFixProcessorDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,7 +56,7 @@ public final class ClasspathFixProcessorDescriptor {
 
 	private final IConfigurationElement fConfigurationElement;
 	private ClasspathFixProcessor fProcessorInstance;
-	private List fOverriddenIds;
+	private List<String> fOverriddenIds;
 	private Boolean fStatus;
 
 	public ClasspathFixProcessorDescriptor(IConfigurationElement element) {
@@ -68,12 +68,12 @@ public final class ClasspathFixProcessorDescriptor {
 		}
 		IConfigurationElement[] children= fConfigurationElement.getChildren(OVERRIDES);
 		if (children.length > 0) {
-			fOverriddenIds= new ArrayList(children.length);
+			fOverriddenIds= new ArrayList<String>(children.length);
 			for (int i= 0; i < children.length; i++) {
 				fOverriddenIds.add(children[i].getAttribute(ID));
 			}
 		} else {
-			fOverriddenIds= Collections.EMPTY_LIST;
+			fOverriddenIds= Collections.emptyList();
 		}
 	}
 
@@ -81,7 +81,7 @@ public final class ClasspathFixProcessorDescriptor {
 		return fConfigurationElement.getAttribute(ID);
 	}
 
-	public Collection/*String*/ getOverridenIds() {
+	public Collection<String> getOverridenIds() {
 		return fOverriddenIds;
 	}
 
@@ -144,7 +144,7 @@ public final class ClasspathFixProcessorDescriptor {
 	private static ClasspathFixProcessorDescriptor[] getCorrectionProcessors() {
 		if (fgContributedClasspathFixProcessors == null) {
 			IConfigurationElement[] elements= Platform.getExtensionRegistry().getConfigurationElementsFor(JavaUI.ID_PLUGIN, ATT_EXTENSION);
-			ArrayList res= new ArrayList(elements.length);
+			ArrayList<ClasspathFixProcessorDescriptor> res= new ArrayList<ClasspathFixProcessorDescriptor>(elements.length);
 
 			for (int i= 0; i < elements.length; i++) {
 				ClasspathFixProcessorDescriptor desc= new ClasspathFixProcessorDescriptor(elements[i]);
@@ -155,11 +155,9 @@ public final class ClasspathFixProcessorDescriptor {
 					JavaPlugin.log(status);
 				}
 			}
-			fgContributedClasspathFixProcessors= (ClasspathFixProcessorDescriptor[]) res.toArray(new ClasspathFixProcessorDescriptor[res.size()]);
-			Arrays.sort(fgContributedClasspathFixProcessors, new Comparator() {
-				public int compare(Object o1, Object o2) {
-					ClasspathFixProcessorDescriptor d1= (ClasspathFixProcessorDescriptor) o1;
-					ClasspathFixProcessorDescriptor d2= (ClasspathFixProcessorDescriptor) o2;
+			fgContributedClasspathFixProcessors= res.toArray(new ClasspathFixProcessorDescriptor[res.size()]);
+			Arrays.sort(fgContributedClasspathFixProcessors, new Comparator<ClasspathFixProcessorDescriptor>() {
+				public int compare(ClasspathFixProcessorDescriptor d1, ClasspathFixProcessorDescriptor d2) {
 					if (d1.getOverridenIds().contains(d2.getID())) {
 						return -1;
 					}
@@ -174,9 +172,9 @@ public final class ClasspathFixProcessorDescriptor {
 	}
 
 	public static ClasspathFixProposal[] getProposals(final IJavaProject project, final String missingType, final MultiStatus status) {
-		final ArrayList proposals= new ArrayList();
+		final ArrayList<ClasspathFixProposal> proposals= new ArrayList<ClasspathFixProposal>();
 
-		final HashSet overriddenIds= new HashSet();
+		final HashSet<String> overriddenIds= new HashSet<String>();
 		ClasspathFixProcessorDescriptor[] correctionProcessors= getCorrectionProcessors();
 		for (int i= 0; i < correctionProcessors.length; i++) {
 			final ClasspathFixProcessorDescriptor curr= correctionProcessors[i];
@@ -202,6 +200,6 @@ public final class ClasspathFixProcessorDescriptor {
 				});
 			}
 		}
-		return (ClasspathFixProposal[]) proposals.toArray(new ClasspathFixProposal[proposals.size()]);
+		return proposals.toArray(new ClasspathFixProposal[proposals.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ContributedProcessorDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ContributedProcessorDescriptor.java
index d553b4f..845a4f3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ContributedProcessorDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ContributedProcessorDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,7 @@ public final class ContributedProcessorDescriptor {
 	private Object fProcessorInstance;
 	private Boolean fStatus;
 	private String fRequiredSourceLevel;
-	private final Set fHandledMarkerTypes;
+	private final Set<String> fHandledMarkerTypes;
 
 	private static final String ID= "id"; //$NON-NLS-1$
 	private static final String CLASS= "class"; //$NON-NLS-1$
@@ -64,8 +64,8 @@ public final class ContributedProcessorDescriptor {
 		fHandledMarkerTypes= testMarkerTypes ? getHandledMarkerTypes(element) : null;
 	}
 
-	private Set getHandledMarkerTypes(IConfigurationElement element) {
-		HashSet map= new HashSet(7);
+	private Set<String> getHandledMarkerTypes(IConfigurationElement element) {
+		HashSet<String> map= new HashSet<String>(7);
 		IConfigurationElement[] children= element.getChildren(HANDLED_MARKER_TYPES);
 		for (int i= 0; i < children.length; i++) {
 			IConfigurationElement[] types= children[i].getChildren(MARKER_TYPE);
@@ -126,7 +126,7 @@ public final class ContributedProcessorDescriptor {
 		return false;
 	}
 
-	public Object getProcessor(ICompilationUnit cunit, Class expectedType) {
+	public Object getProcessor(ICompilationUnit cunit, Class<?> expectedType) {
 		if (matches(cunit)) {
 			if (fProcessorInstance == null) {
 				try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java
index 41cc6fd..015fe70 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ import org.eclipse.jdt.core.dom.SimpleName;
 
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.text.java.IInvocationContext;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 
 import org.eclipse.jdt.internal.ui.actions.ActionUtil;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
@@ -94,7 +95,7 @@ public class CorrectionCommandHandler extends AbstractHandler {
 
 	private ICompletionProposal findCorrection(String id, boolean isAssist, ITextSelection selection, ICompilationUnit cu, IAnnotationModel model) {
 		AssistContext context= new AssistContext(cu, fEditor.getViewer(), fEditor, selection.getOffset(), selection.getLength());
-		Collection proposals= new ArrayList(10);
+		Collection<IJavaCompletionProposal> proposals= new ArrayList<IJavaCompletionProposal>(10);
 		if (isAssist) {
 			if (id.equals(LinkedNamesAssistProposal.ASSIST_ID)) {
 				return getLocalRenameProposal(context); // shortcut for local rename
@@ -109,7 +110,7 @@ public class CorrectionCommandHandler extends AbstractHandler {
 				return null;
 			}
 		}
-		for (Iterator iter= proposals.iterator(); iter.hasNext();) {
+		for (Iterator<IJavaCompletionProposal> iter= proposals.iterator(); iter.hasNext();) {
 			Object curr= iter.next();
 			if (curr instanceof ICommandAccess) {
 				if (id.equals(((ICommandAccess) curr).getCommandId())) {
@@ -121,9 +122,9 @@ public class CorrectionCommandHandler extends AbstractHandler {
 	}
 
 	private Annotation[] getAnnotations(int offset, boolean goToClosest) throws BadLocationException {
-		ArrayList resultingAnnotations= new ArrayList();
+		ArrayList<Annotation> resultingAnnotations= new ArrayList<Annotation>();
 		JavaCorrectionAssistant.collectQuickFixableAnnotations(fEditor, offset, goToClosest, resultingAnnotations);
-		return (Annotation[]) resultingAnnotations.toArray(new Annotation[resultingAnnotations.size()]);
+		return resultingAnnotations.toArray(new Annotation[resultingAnnotations.size()]);
 	}
 
 	private ICompletionProposal getLocalRenameProposal(IInvocationContext context) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandInstaller.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandInstaller.java
index d77b381..133e064 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandInstaller.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandInstaller.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ public class CorrectionCommandInstaller {
 	 */
 	public static final String ASSIST_SUFFIX= ".assist"; //$NON-NLS-1$
 
-	private List fCorrectionHandlerActivations;
+	private List<IHandlerActivation> fCorrectionHandlerActivations;
 
 	public CorrectionCommandInstaller() {
 		fCorrectionHandlerActivations= null;
@@ -55,11 +55,11 @@ public class CorrectionCommandInstaller {
 		if (fCorrectionHandlerActivations != null) {
 			JavaPlugin.logErrorMessage("correction handler activations not released"); //$NON-NLS-1$
 		}
-		fCorrectionHandlerActivations= new ArrayList();
+		fCorrectionHandlerActivations= new ArrayList<IHandlerActivation>();
 
-		Collection definedCommandIds= commandService.getDefinedCommandIds();
-		for (Iterator iter= definedCommandIds.iterator(); iter.hasNext();) {
-			String id= (String) iter.next();
+		Collection<String> definedCommandIds= commandService.getDefinedCommandIds();
+		for (Iterator<String> iter= definedCommandIds.iterator(); iter.hasNext();) {
+			String id= iter.next();
 			if (id.startsWith(COMMAND_PREFIX)) {
 				boolean isAssist= id.endsWith(ASSIST_SUFFIX);
 				CorrectionCommandHandler handler= new CorrectionCommandHandler(editor, id, isAssist);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMarkerResolutionGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMarkerResolutionGenerator.java
index d58d587..a685225 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMarkerResolutionGenerator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMarkerResolutionGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.eclipse.swt.graphics.Image;
 
@@ -29,12 +30,12 @@ import org.eclipse.core.resources.IResource;
 
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.IAnnotationModel;
 
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IMarkerResolution;
-import org.eclipse.ui.IMarkerResolutionGenerator;
 import org.eclipse.ui.IMarkerResolutionGenerator2;
 import org.eclipse.ui.views.markers.WorkbenchMarkerResolution;
 
@@ -64,7 +65,7 @@ import org.eclipse.jdt.internal.ui.javaeditor.JavaMarkerAnnotation;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.FixCorrectionProposal;
 
 
-public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGenerator, IMarkerResolutionGenerator2 {
+public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGenerator2 {
 
 	public static class CorrectionMarkerResolution extends WorkbenchMarkerResolution {
 
@@ -125,6 +126,7 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void run(IMarker[] markers, IProgressMonitor monitor) {
 			if (markers.length == 1) {
 				run(markers[0]);
@@ -155,7 +157,7 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 		}
 
 		private MultiFixTarget[] getCleanUpTargets(IMarker[] markers) {
-			Hashtable/*<ICompilationUnit, List<IProblemLocation>*/ problemLocations= new Hashtable();
+			Hashtable<ICompilationUnit, List<IProblemLocation>> problemLocations= new Hashtable<ICompilationUnit, List<IProblemLocation>>();
 			for (int i= 0; i < markers.length; i++) {
 				IMarker marker= markers[i];
 				ICompilationUnit cu= getCompilationUnit(marker);
@@ -164,9 +166,9 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 					IEditorInput input= EditorUtility.getEditorInput(cu);
 					IProblemLocation location= findProblemLocation(input, marker);
 					if (location != null) {
-						List l= (List)problemLocations.get(cu.getPrimary());
+						List<IProblemLocation> l= problemLocations.get(cu.getPrimary());
 						if (l == null) {
-							l= new ArrayList();
+							l= new ArrayList<IProblemLocation>();
 							problemLocations.put(cu.getPrimary(), l);
 						}
 						l.add(location);
@@ -176,11 +178,11 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 
 			MultiFixTarget[] result= new MultiFixTarget[problemLocations.size()];
 			int i= 0;
-			for (Iterator iterator= problemLocations.entrySet().iterator(); iterator.hasNext();) {
-				Map.Entry entry= (Map.Entry) iterator.next();
-				ICompilationUnit cu= (ICompilationUnit) entry.getKey();
-				List locations= (List) entry.getValue();
-				result[i]= new MultiFixTarget(cu, (IProblemLocation[]) locations.toArray(new IProblemLocation[locations.size()]));
+			for (Iterator<Map.Entry<ICompilationUnit, List<IProblemLocation>>> iterator= problemLocations.entrySet().iterator(); iterator.hasNext();) {
+				Map.Entry<ICompilationUnit, List<IProblemLocation>> entry= iterator.next();
+				ICompilationUnit cu= entry.getKey();
+				List<IProblemLocation> locations= entry.getValue();
+				result[i]= new MultiFixTarget(cu, locations.toArray(new IProblemLocation[locations.size()]));
 				i++;
 			}
 
@@ -204,6 +206,7 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public IMarker[] findOtherMarkers(IMarker[] markers) {
 			if (!(fProposal instanceof FixCorrectionProposal))
 				return NO_MARKERS;
@@ -215,23 +218,23 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 
 			IMultiFix multiFix= (IMultiFix) cleanUp;
 
-			final Hashtable fileMarkerTable= getMarkersForFiles(markers);
+			final Hashtable<IFile, List<IMarker>> fileMarkerTable= getMarkersForFiles(markers);
 			if (fileMarkerTable.isEmpty())
 				return NO_MARKERS;
 
-			final List result= new ArrayList();
+			final List<IMarker> result= new ArrayList<IMarker>();
 
-			for (Iterator iterator= fileMarkerTable.entrySet().iterator(); iterator.hasNext();) {
-				Map.Entry entry= (Map.Entry) iterator.next();
-				IFile file= (IFile) entry.getKey();
-				ArrayList fileMarkers= (ArrayList) entry.getValue();
+			for (Iterator<Entry<IFile, List<IMarker>>> iterator= fileMarkerTable.entrySet().iterator(); iterator.hasNext();) {
+				Map.Entry<IFile, List<IMarker>> entry= iterator.next();
+				IFile file= entry.getKey();
+				List<IMarker> fileMarkers= entry.getValue();
 
 				IJavaElement element= JavaCore.create(file);
 				if (element instanceof ICompilationUnit) {
 					ICompilationUnit unit= (ICompilationUnit) element;
 
 					for (int i= 0, size= fileMarkers.size(); i < size; i++) {
-						IMarker marker= (IMarker) fileMarkers.get(i);
+						IMarker marker= fileMarkers.get(i);
 						IProblemLocation problem= createFromMarker(marker, unit);
 						if (problem != null && multiFix.canFix(unit, problem)) {
 							result.add(marker);
@@ -243,7 +246,7 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 			if (result.size() == 0)
 				return NO_MARKERS;
 
-			return (IMarker[])result.toArray(new IMarker[result.size()]);
+			return result.toArray(new IMarker[result.size()]);
 		}
 
 		/**
@@ -251,8 +254,8 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 		 * @param markers the markers
 		 * @return mapping files to markers
 		 */
-		private Hashtable/*<IFile, List<IMarker>>*/ getMarkersForFiles(IMarker[] markers) {
-			final Hashtable result= new Hashtable();
+		private Hashtable<IFile, List<IMarker>> getMarkersForFiles(IMarker[] markers) {
+			final Hashtable<IFile, List<IMarker>> result= new Hashtable<IFile, List<IMarker>>();
 
 			String markerType;
 			try {
@@ -275,10 +278,10 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 					if (currMarkerType != null && currMarkerType.equals(markerType)) {
 						IResource res= marker.getResource();
 						if (res instanceof IFile && res.isAccessible()) {
-							List markerList= (List)result.get(res);
+							List<IMarker> markerList= result.get(res);
 							if (markerList == null) {
-								markerList= new ArrayList();
-								result.put(res, markerList);
+								markerList= new ArrayList<IMarker>();
+								result.put((IFile) res, markerList);
 							}
 							markerList.add(marker);
 						}
@@ -335,14 +338,14 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 					if (!hasProblem (context.getASTRoot().getProblems(), location))
 						return NO_RESOLUTIONS;
 
-					ArrayList proposals= new ArrayList();
+					ArrayList<IJavaCompletionProposal> proposals= new ArrayList<IJavaCompletionProposal>();
 					JavaCorrectionProcessor.collectCorrections(context, new IProblemLocation[] { location }, proposals);
 					Collections.sort(proposals, new CompletionProposalComparator());
 
 					int nProposals= proposals.size();
 					IMarkerResolution[] resolutions= new IMarkerResolution[nProposals];
 					for (int i= 0; i < nProposals; i++) {
-						resolutions[i]= new CorrectionMarkerResolution(context.getCompilationUnit(), location.getOffset(), location.getLength(), (IJavaCompletionProposal) proposals.get(i), marker);
+						resolutions[i]= new CorrectionMarkerResolution(context.getCompilationUnit(), location.getOffset(), location.getLength(), proposals.get(i), marker);
 					}
 					return resolutions;
 				}
@@ -373,9 +376,9 @@ public class CorrectionMarkerResolutionGenerator implements IMarkerResolutionGen
 	private static IProblemLocation findProblemLocation(IEditorInput input, IMarker marker) {
 		IAnnotationModel model= JavaPlugin.getDefault().getCompilationUnitDocumentProvider().getAnnotationModel(input);
 		if (model != null) { // open in editor
-			Iterator iter= model.getAnnotationIterator();
+			Iterator<Annotation> iter= model.getAnnotationIterator();
 			while (iter.hasNext()) {
-				Object curr= iter.next();
+				Annotation curr= iter.next();
 				if (curr instanceof JavaMarkerAnnotation) {
 					JavaMarkerAnnotation annot= (JavaMarkerAnnotation) curr;
 					if (marker.equals(annot.getMarker())) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java
index 9f1dbf1..2b07de0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public final class CorrectionMessages extends NLS {
 	public static String JavadocTagsSubProcessor_document_parameter_description;
 	public static String LocalCorrectionsSubProcessor_renaming_duplicate_method;
 	public static String LocalCorrectionsSubProcessor_replacefieldaccesswithmethod_description;
+	public static String ModifierCorrectionSubProcessor_addstatic_description;
 	public static String ModifierCorrectionSubProcessor_addstatictoparenttype_description;
 	public static String ModifierCorrectionSubProcessor_addsynchronized_description;
 	public static String ModifierCorrectionSubProcessor_changefieldmodifiertononstatic_description;
@@ -118,7 +119,6 @@ public final class CorrectionMessages extends NLS {
 	public static String ModifierCorrectionSubProcessor_changemodifiertostatic_description;
 	public static String ModifierCorrectionSubProcessor_changemodifiertononstatic_description;
 	public static String ModifierCorrectionSubProcessor_changemodifiertofinal_description;
-	public static String ModifierCorrectionSubProcessor_changemodifiertodefault_description;
 	public static String ModifierCorrectionSubProcessor_changemodifiertononfinal_description;
 	public static String ModifierCorrectionSubProcessor_changevisibility_description;
 	public static String ModifierCorrectionSubProcessor_removeabstract_description;
@@ -242,7 +242,9 @@ public final class CorrectionMessages extends NLS {
 	public static String QuickAssistProcessor_unwrap_trystatement;
 	public static String QuickAssistProcessor_unwrap_anonymous;
 	public static String QuickAssistProcessor_unwrap_block;
+	public static String QuickAssistProcessor_unwrap_labeledstatement;
 	public static String QuickAssistProcessor_unwrap_methodinvocation;
+	public static String QuickAssistProcessor_unwrap_synchronizedstatement;
 	public static String QuickAssistProcessor_splitdeclaration_description;
 	public static String QuickAssistProcessor_joindeclaration_description;
 	public static String QuickAssistProcessor_addfinallyblock_description;
@@ -286,6 +288,7 @@ public final class CorrectionMessages extends NLS {
 	public static String AdvancedQuickAssistProcessor_pickSelectedString;
 	public static String AdvancedQuickAssistProcessor_negatedVariableName;
 	public static String AdvancedQuickAssistProcessor_pushNegationDown;
+	public static String AdvancedQuickAssistProcessor_putConditionalExpressionInParentheses;
 	public static String AdvancedQuickAssistProcessor_convertSwitchToIf;
 	public static String AdvancedQuickAssistProcessor_inverseIfContinue_description;
 	public static String AdvancedQuickAssistProcessor_inverseIfToContinue_description;
@@ -331,7 +334,6 @@ public final class CorrectionMessages extends NLS {
 	public static String QuickAssistProcessor_extract_to_local_all_description;
 	public static String QuickAssistProcessor_extract_to_local_description;
 	public static String QuickAssistProcessor_extractmethod_description;
-	public static String SuppressWarningsSubProcessor_suppress_warnings_initializer_label;
 	public static String SuppressWarningsSubProcessor_suppress_warnings_label;
 	public static String ReorgCorrectionsSubProcessor_accessrules_description;
 	public static String ReorgCorrectionsSubProcessor_project_seup_fix_description;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties
index 511ae62..4a17eff 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -100,7 +100,7 @@ LocalCorrectionsSubProcessor_hiding_local_label=Rename local variable ''{0}''
 LocalCorrectionsSubProcessor_hiding_field_label=Rename field ''{0}''
 LocalCorrectionsSubProcessor_rename_var_label=Rename ''{0}''
 LocalCorrectionsSubProcessor_hiding_argument_label=Rename argument ''{0}''
-LocalCorrectionsSubProcessor_setparenteses_description=Put expression in parentheses
+LocalCorrectionsSubProcessor_setparenteses_description=Put ''{0}'' expression in parentheses
 LocalCorrectionsSubProcessor_InferGenericTypeArguments=Infer Generic Type Arguments...
 LocalCorrectionsSubProcessor_InferGenericTypeArguments_description=Start the 'Infer Generic Type Arguments' refactoring
 LocalCorrectionsSubProcessor_override_hashCode_description=Override hashCode()
@@ -132,11 +132,11 @@ ModifierCorrectionSubProcessor_changemodifiertostatic_description=Change modifie
 ModifierCorrectionSubProcessor_changemodifiertostaticfinal_description=Change modifier to 'static final'
 ModifierCorrectionSubProcessor_changemodifiertononstatic_description=Remove ''static'' modifier of ''{0}''
 ModifierCorrectionSubProcessor_changemodifiertofinal_description=Change modifier of ''{0}'' to final
+ModifierCorrectionSubProcessor_addstatic_description=Add 'static' modifier
 ModifierCorrectionSubProcessor_addstatictoparenttype_description=Add 'static' modifier to parent type
 ModifierCorrectionSubProcessor_addsynchronized_description=Add 'synchronized' modifier
 ModifierCorrectionSubProcessor_overrides_deprecated_description=Mark method as deprecated
 GetterSetterCorrectionSubProcessor_encapsulate_field_error_message=Cannot perform refactoring. See log for more details.
-ModifierCorrectionSubProcessor_changemodifiertodefault_description=Change modifier of ''{0}'' to default visibility
 ModifierCorrectionSubProcessor_changemodifiertononfinal_description=Remove ''final'' modifier of ''{0}''
 ModifierCorrectionSubProcessor_changevisibility_description=Change visibility of ''{0}'' to ''{1}''
 ModifierCorrectionSubProcessor_removeabstract_description=Remove 'abstract' modifier
@@ -159,7 +159,6 @@ ModifierCorrectionSubProcessor_changemethodtononfinal_description=Remove ''final
 ModifierCorrectionSubProcessor_changeoverriddenvisibility_description=Change visibility of ''{0}'' to ''{1}''
 ModifierCorrectionSubProcessor_changemethodvisibility_description=Change method visibility to ''{0}''
 ModifierCorrectionSubProcessor_changemethodtononstatic_description=Remove ''static'' modifier of ''{0}''(..)
-SuppressWarningsSubProcessor_suppress_warnings_initializer_label=initializer
 ModifierCorrectionSubProcessor_removeinvalidmodifiers_description=Remove invalid modifiers
 
 ReturnTypeSubProcessor_constrnamemethod_description=Change to constructor
@@ -299,7 +298,9 @@ QuickAssistProcessor_unwrap_dostatement=Remove surrounding 'do' statement
 QuickAssistProcessor_unwrap_trystatement=Remove surrounding 'try' block
 QuickAssistProcessor_unwrap_anonymous=Remove surrounding anonymous class
 QuickAssistProcessor_unwrap_block=Remove surrounding block
+QuickAssistProcessor_unwrap_labeledstatement=Remove label
 QuickAssistProcessor_unwrap_methodinvocation=Remove surrounding method invocation
+QuickAssistProcessor_unwrap_synchronizedstatement=Remove surrounding 'synchronized' statement
 
 QuickAssistProcessor_splitdeclaration_description=Split variable declaration
 QuickAssistProcessor_extract_to_local_all_description=Extract to local variable (replace all occurrences)
@@ -360,6 +361,7 @@ AdvancedQuickAssistProcessor_joinIfSequence=Join 'if' sequence in if-else-if
 AdvancedQuickAssistProcessor_pickSelectedString=Pick out selected part of String
 AdvancedQuickAssistProcessor_negatedVariableName=not{0}
 AdvancedQuickAssistProcessor_pushNegationDown=Push negation down
+AdvancedQuickAssistProcessor_putConditionalExpressionInParentheses=Put conditional expression in parentheses
 AdvancedQuickAssistProcessor_convertSwitchToIf=Convert 'switch' to 'if-else'
 AdvancedQuickAssistProcessor_inverseIfContinue_description=Invert 'if/continue' statement, convert to 'if'
 AdvancedQuickAssistProcessor_inverseIfToContinue_description=Invert 'if' statement, convert to 'continue'
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java
index f1df144..c0cad9a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,34 +67,40 @@ public class DefaultClasspathFixProcessor extends ClasspathFixProcessor {
 			fRelevance= relevance;
 		}
 
+		@Override
 		public String getAdditionalProposalInfo() {
 			return fDescription;
 		}
 
+		@Override
 		public Change createChange(IProgressMonitor monitor) {
 			return fChange;
 		}
 
+		@Override
 		public String getDisplayString() {
 			return fName;
 		}
 
+		@Override
 		public Image getImage() {
 			return JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
 		}
 
+		@Override
 		public int getRelevance() {
 			return fRelevance;
 		}
 	}
 
+	@Override
 	public ClasspathFixProposal[] getFixImportProposals(IJavaProject project, String missingType) throws CoreException {
-		ArrayList res= new ArrayList();
+		ArrayList<DefaultClasspathFixProposal> res= new ArrayList<DefaultClasspathFixProposal>();
 		collectProposals(project, missingType, res);
-		return (ClasspathFixProposal[]) res.toArray(new ClasspathFixProposal[res.size()]);
+		return res.toArray(new ClasspathFixProposal[res.size()]);
 	}
 
-	private void collectProposals(IJavaProject project, String name, Collection proposals) throws CoreException {
+	private void collectProposals(IJavaProject project, String name, Collection<DefaultClasspathFixProposal> proposals) throws CoreException {
 		int idx= name.lastIndexOf('.');
 		char[] packageName= idx != -1 ? name.substring(0, idx).toCharArray() : null; // no package provided
 		char[] typeName= name.substring(idx + 1).toCharArray();
@@ -104,7 +110,7 @@ public class DefaultClasspathFixProcessor extends ClasspathFixProcessor {
 		}
 
 		IJavaSearchScope scope= SearchEngine.createWorkspaceScope();
-		ArrayList res= new ArrayList();
+		ArrayList<TypeNameMatch> res= new ArrayList<TypeNameMatch>();
 		TypeNameMatchCollector requestor= new TypeNameMatchCollector(res);
 		int matchMode= SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE;
 		new SearchEngine().searchAllTypeNames(packageName, matchMode, typeName,
@@ -114,9 +120,9 @@ public class DefaultClasspathFixProcessor extends ClasspathFixProcessor {
 		if (res.isEmpty()) {
 			return;
 		}
-		HashSet addedClaspaths= new HashSet();
+		HashSet<Object> addedClaspaths= new HashSet<Object>();
 		for (int i= 0; i < res.size(); i++) {
-			TypeNameMatch curr= (TypeNameMatch) res.get(i);
+			TypeNameMatch curr= res.get(i);
 			IType type= curr.getType();
 			if (type != null) {
 				IPackageFragmentRoot root= (IPackageFragmentRoot) type.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
@@ -165,7 +171,7 @@ public class DefaultClasspathFixProcessor extends ClasspathFixProcessor {
 		}
 	}
 
-	private void addLibraryProposal(IJavaProject project, IPackageFragmentRoot root, IClasspathEntry entry, Collection addedClaspaths, Collection proposals) throws JavaModelException {
+	private void addLibraryProposal(IJavaProject project, IPackageFragmentRoot root, IClasspathEntry entry, Collection<Object> addedClaspaths, Collection<DefaultClasspathFixProposal> proposals) throws JavaModelException {
 		if (addedClaspaths.add(entry)) {
 			String label= getAddClasspathLabel(entry, root, project);
 			if (label != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/GetterSetterCorrectionSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/GetterSetterCorrectionSubProcessor.java
index 66f60d8..92c8ce4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/GetterSetterCorrectionSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/GetterSetterCorrectionSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -149,10 +149,12 @@ public class GetterSetterCorrectionSubProcessor {
 		 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension5#getAdditionalProposalInfo(org.eclipse.core.runtime.IProgressMonitor)
 		 * @since 3.5
 		 */
+		@Override
 		public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 			return CorrectionMessages.GetterSetterCorrectionSubProcessor_additional_info;
 		}
 
+		@Override
 		public void apply(IDocument document) {
 			try {
 				final SelfEncapsulateFieldRefactoring refactoring= new SelfEncapsulateFieldRefactoring(fField);
@@ -199,7 +201,7 @@ public class GetterSetterCorrectionSubProcessor {
 	 * @param resultingCollections the resulting proposals
 	 * @return <code>true</code> if the quick assist is applicable at this offset
 	 */
-	public static boolean addGetterSetterProposal(IInvocationContext context, ASTNode coveringNode, IProblemLocation[] locations, ArrayList resultingCollections) {
+	public static boolean addGetterSetterProposal(IInvocationContext context, ASTNode coveringNode, IProblemLocation[] locations, ArrayList<ICommandAccess> resultingCollections) {
 		if (locations != null) {
 			for (int i= 0; i < locations.length; i++) {
 				int problemId= locations[i].getProblemId();
@@ -212,11 +214,11 @@ public class GetterSetterCorrectionSubProcessor {
 		return addGetterSetterProposal(context, coveringNode, resultingCollections, 7);
 	}
 
-	public static void addGetterSetterProposal(IInvocationContext context, IProblemLocation location, Collection proposals, int relevance) {
+	public static void addGetterSetterProposal(IInvocationContext context, IProblemLocation location, Collection<ICommandAccess> proposals, int relevance) {
 		addGetterSetterProposal(context, location.getCoveringNode(context.getASTRoot()), proposals, relevance);
 	}
 
-	private static boolean addGetterSetterProposal(IInvocationContext context, ASTNode coveringNode, Collection proposals, int relevance) {
+	private static boolean addGetterSetterProposal(IInvocationContext context, ASTNode coveringNode, Collection<ICommandAccess> proposals, int relevance) {
 		if (!(coveringNode instanceof SimpleName)) {
 			return false;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionAssistant.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionAssistant.java
index 7a1678b..20b54a2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionAssistant.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionAssistant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -109,6 +109,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.contentassist.IContentAssistant#install(org.eclipse.jface.text.ITextViewer)
 	 */
+	@Override
 	public void install(ISourceViewer sourceViewer) {
 		super.install(sourceViewer);
 		fViewer= sourceViewer;
@@ -122,6 +123,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.contentassist.ContentAssistant#uninstall()
 	 */
+	@Override
 	public void uninstall() {
 		if (fLightBulbUpdater != null) {
 			fLightBulbUpdater.uninstall();
@@ -144,6 +146,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 	 *
 	 * @see IQuickAssistAssistant#showPossibleQuickAssists()
 	 */
+	@Override
 	public String showPossibleQuickAssists() {
 		boolean isReinvoked= false;
 		fIsProblemLocationAvailable= false;
@@ -165,7 +168,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 			return super.showPossibleQuickAssists();
 
 
-		ArrayList resultingAnnotations= new ArrayList(20);
+		ArrayList<Annotation> resultingAnnotations= new ArrayList<Annotation>(20);
 		try {
 			Point selectedRange= fViewer.getSelectedRange();
 			int currOffset= selectedRange.x;
@@ -185,7 +188,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 		} catch (BadLocationException e) {
 			JavaPlugin.log(e);
 		}
-		fCurrentAnnotations= (Annotation[]) resultingAnnotations.toArray(new Annotation[resultingAnnotations.size()]);
+		fCurrentAnnotations= resultingAnnotations.toArray(new Annotation[resultingAnnotations.size()]);
 
 		return super.showPossibleQuickAssists();
 	}
@@ -203,7 +206,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 		return document.getLineInformationOfOffset(invocationLocation);
 	}
 
-	public static int collectQuickFixableAnnotations(ITextEditor editor, int invocationLocation, boolean goToClosest, ArrayList resultingAnnotations) throws BadLocationException {
+	public static int collectQuickFixableAnnotations(ITextEditor editor, int invocationLocation, boolean goToClosest, ArrayList<Annotation> resultingAnnotations) throws BadLocationException {
 		IAnnotationModel model= JavaUI.getDocumentProvider().getAnnotationModel(editor.getEditorInput());
 		if (model == null) {
 			return invocationLocation;
@@ -211,7 +214,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 
 		ensureUpdatedAnnotations(editor);
 
-		Iterator iter= model.getAnnotationIterator();
+		Iterator<Annotation> iter= model.getAnnotationIterator();
 		if (goToClosest) {
 			IRegion lineInfo= getRegionOfInterest(editor, invocationLocation);
 			if (lineInfo == null) {
@@ -220,11 +223,11 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 			int rangeStart= lineInfo.getOffset();
 			int rangeEnd= rangeStart + lineInfo.getLength();
 
-			ArrayList allAnnotations= new ArrayList();
-			ArrayList allPositions= new ArrayList();
+			ArrayList<Annotation> allAnnotations= new ArrayList<Annotation>();
+			ArrayList<Position> allPositions= new ArrayList<Position>();
 			int bestOffset= Integer.MAX_VALUE;
 			while (iter.hasNext()) {
-				Annotation annot= (Annotation) iter.next();
+				Annotation annot= iter.next();
 				if (JavaCorrectionProcessor.isQuickFixableType(annot)) {
 					Position pos= model.getPosition(annot);
 					if (pos != null && isInside(pos.offset, rangeStart, rangeEnd)) { // inside our range?
@@ -238,7 +241,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 				return invocationLocation;
 			}
 			for (int i= 0; i < allPositions.size(); i++) {
-				Position pos= (Position) allPositions.get(i);
+				Position pos= allPositions.get(i);
 				if (isInside(bestOffset, pos.offset, pos.offset + pos.length)) {
 					resultingAnnotations.add(allAnnotations.get(i));
 				}
@@ -246,7 +249,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 			return bestOffset;
 		} else {
 			while (iter.hasNext()) {
-				Annotation annot= (Annotation) iter.next();
+				Annotation annot= iter.next();
 				if (JavaCorrectionProcessor.isQuickFixableType(annot)) {
 					Position pos= model.getPosition(annot);
 					if (pos != null && isInside(invocationLocation, pos.offset, pos.offset + pos.length)) {
@@ -320,6 +323,7 @@ public class JavaCorrectionAssistant extends QuickAssistAssistant {
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ContentAssistant#possibleCompletionsClosed()
 	 */
+	@Override
 	protected void possibleCompletionsClosed() {
 		super.possibleCompletionsClosed();
 		restorePosition();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionProcessor.java
index 0a1bccc..5af0f28 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavaCorrectionProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,7 +74,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 
 	private static ContributedProcessorDescriptor[] getProcessorDescriptors(String contributionId, boolean testMarkerTypes) {
 		IConfigurationElement[] elements= Platform.getExtensionRegistry().getConfigurationElementsFor(JavaUI.ID_PLUGIN, contributionId);
-		ArrayList res= new ArrayList(elements.length);
+		ArrayList<ContributedProcessorDescriptor> res= new ArrayList<ContributedProcessorDescriptor>(elements.length);
 
 		for (int i= 0; i < elements.length; i++) {
 			ContributedProcessorDescriptor desc= new ContributedProcessorDescriptor(elements[i], testMarkerTypes);
@@ -85,7 +85,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 				JavaPlugin.log(status);
 			}
 		}
-		return (ContributedProcessorDescriptor[]) res.toArray(new ContributedProcessorDescriptor[res.size()]);
+		return res.toArray(new ContributedProcessorDescriptor[res.size()]);
 	}
 
 	private static ContributedProcessorDescriptor[] getCorrectionProcessors() {
@@ -226,18 +226,21 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 		ICompilationUnit cu= JavaUI.getWorkingCopyManager().getWorkingCopy(part.getEditorInput());
 		IAnnotationModel model= JavaUI.getDocumentProvider().getAnnotationModel(part.getEditorInput());
 
-		int length= viewer != null ? viewer.getSelectedRange().y : 0;
-		AssistContext context= new AssistContext(cu, viewer, part, documentOffset, length);
-
+		AssistContext context= null;
+		if (cu != null) {
+			int length= viewer != null ? viewer.getSelectedRange().y : 0;
+			context= new AssistContext(cu, viewer, part, documentOffset, length);
+		}
+		
 		Annotation[] annotations= fAssistant.getAnnotationsAtOffset();
 
 		fErrorMessage= null;
 
 		ICompletionProposal[] res= null;
-		if (model != null && annotations != null) {
-			ArrayList proposals= new ArrayList(10);
+		if (model != null && context != null && annotations != null) {
+			ArrayList<IJavaCompletionProposal> proposals= new ArrayList<IJavaCompletionProposal>(10);
 			IStatus status= collectProposals(context, model, annotations, true, !fAssistant.isUpdatedOffset(), proposals);
-			res= (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+			res= proposals.toArray(new ICompletionProposal[proposals.size()]);
 			if (!status.isOK()) {
 				fErrorMessage= status.getMessage();
 				JavaPlugin.log(status);
@@ -253,8 +256,8 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 		return res;
 	}
 
-	public static IStatus collectProposals(IInvocationContext context, IAnnotationModel model, Annotation[] annotations, boolean addQuickFixes, boolean addQuickAssists, Collection proposals) {
-		ArrayList problems= new ArrayList();
+	public static IStatus collectProposals(IInvocationContext context, IAnnotationModel model, Annotation[] annotations, boolean addQuickFixes, boolean addQuickAssists, Collection<IJavaCompletionProposal> proposals) {
+		ArrayList<ProblemLocation> problems= new ArrayList<ProblemLocation>();
 
 		// collect problem locations and corrections from marker annotations
 		for (int i= 0; i < annotations.length; i++) {
@@ -272,7 +275,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 		}
 		MultiStatus resStatus= null;
 
-		IProblemLocation[] problemLocations= (IProblemLocation[]) problems.toArray(new IProblemLocation[problems.size()]);
+		IProblemLocation[] problemLocations= problems.toArray(new IProblemLocation[problems.size()]);
 		if (addQuickFixes) {
 			IStatus status= collectCorrections(context, problemLocations, proposals);
 			if (!status.isOK()) {
@@ -306,7 +309,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 		return null;
 	}
 
-	private static void collectMarkerProposals(SimpleMarkerAnnotation annotation, Collection proposals) {
+	private static void collectMarkerProposals(SimpleMarkerAnnotation annotation, Collection<IJavaCompletionProposal> proposals) {
 		IMarker marker= annotation.getMarker();
 		IMarkerResolution[] res= IDE.getMarkerHelpRegistry().getResolutions(marker);
 		if (res.length > 0) {
@@ -356,10 +359,10 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 
 	private static class SafeCorrectionCollector extends SafeCorrectionProcessorAccess {
 		private final IInvocationContext fContext;
-		private final Collection fProposals;
+		private final Collection<IJavaCompletionProposal> fProposals;
 		private IProblemLocation[] fLocations;
 
-		public SafeCorrectionCollector(IInvocationContext context, Collection proposals) {
+		public SafeCorrectionCollector(IInvocationContext context, Collection<IJavaCompletionProposal> proposals) {
 			fContext= context;
 			fProposals= proposals;
 		}
@@ -368,6 +371,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 			fLocations= locations;
 		}
 
+		@Override
 		public void safeRun(ContributedProcessorDescriptor desc) throws Exception {
 			IQuickFixProcessor curr= (IQuickFixProcessor) desc.getProcessor(fContext.getCompilationUnit(), IQuickFixProcessor.class);
 			if (curr != null) {
@@ -384,14 +388,15 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 	private static class SafeAssistCollector extends SafeCorrectionProcessorAccess {
 		private final IInvocationContext fContext;
 		private final IProblemLocation[] fLocations;
-		private final Collection fProposals;
+		private final Collection<IJavaCompletionProposal> fProposals;
 
-		public SafeAssistCollector(IInvocationContext context, IProblemLocation[] locations, Collection proposals) {
+		public SafeAssistCollector(IInvocationContext context, IProblemLocation[] locations, Collection<IJavaCompletionProposal> proposals) {
 			fContext= context;
 			fLocations= locations;
 			fProposals= proposals;
 		}
 
+		@Override
 		public void safeRun(ContributedProcessorDescriptor desc) throws Exception {
 			IQuickAssistProcessor curr= (IQuickAssistProcessor) desc.getProcessor(fContext.getCompilationUnit(), IQuickAssistProcessor.class);
 			if (curr != null) {
@@ -418,6 +423,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 			return fHasAssists;
 		}
 
+		@Override
 		public void safeRun(ContributedProcessorDescriptor desc) throws Exception {
 			IQuickAssistProcessor processor= (IQuickAssistProcessor) desc.getProcessor(fContext.getCompilationUnit(), IQuickAssistProcessor.class);
 			if (processor != null && processor.hasAssists(fContext)) {
@@ -441,6 +447,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 			return fHasCorrections;
 		}
 
+		@Override
 		public void safeRun(ContributedProcessorDescriptor desc) throws Exception {
 			IQuickFixProcessor processor= (IQuickFixProcessor) desc.getProcessor(fCu, IQuickFixProcessor.class);
 			if (processor != null && processor.hasCorrections(fCu, fProblemId)) {
@@ -450,7 +457,7 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 	}
 
 
-	public static IStatus collectCorrections(IInvocationContext context, IProblemLocation[] locations, Collection proposals) {
+	public static IStatus collectCorrections(IInvocationContext context, IProblemLocation[] locations, Collection<IJavaCompletionProposal> proposals) {
 		ContributedProcessorDescriptor[] processors= getCorrectionProcessors();
 		SafeCorrectionCollector collector= new SafeCorrectionCollector(context, proposals);
 		for (int i= 0; i < processors.length; i++) {
@@ -467,19 +474,19 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 	private static IProblemLocation[] getHandledProblems(IProblemLocation[] locations, ContributedProcessorDescriptor processor) {
 		// implementation tries to avoid creating a new array
 		boolean allHandled= true;
-		ArrayList res= null;
+		ArrayList<IProblemLocation> res= null;
 		for (int i= 0; i < locations.length; i++) {
 			IProblemLocation curr= locations[i];
 			if (processor.canHandleMarkerType(curr.getMarkerType())) {
 				if (!allHandled) { // first handled problem
 					if (res == null) {
-						res= new ArrayList(locations.length - i);
+						res= new ArrayList<IProblemLocation>(locations.length - i);
 					}
 					res.add(curr);
 				}
 			} else if (allHandled) {
 				if (i > 0) { // first non handled problem
-					res= new ArrayList(locations.length - i);
+					res= new ArrayList<IProblemLocation>(locations.length - i);
 					for (int k= 0; k < i; k++) {
 						res.add(locations[k]);
 					}
@@ -493,10 +500,10 @@ public class JavaCorrectionProcessor implements org.eclipse.jface.text.quickassi
 		if (res == null) {
 			return null;
 		}
-		return (IProblemLocation[]) res.toArray(new IProblemLocation[res.size()]);
+		return res.toArray(new IProblemLocation[res.size()]);
 	}
 
-	public static IStatus collectAssists(IInvocationContext context, IProblemLocation[] locations, Collection proposals) {
+	public static IStatus collectAssists(IInvocationContext context, IProblemLocation[] locations, Collection<IJavaCompletionProposal> proposals) {
 		ContributedProcessorDescriptor[] processors= getAssistProcessors();
 		SafeAssistCollector collector= new SafeAssistCollector(context, locations, proposals);
 		collector.process(processors);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java
index f9d1907..a42c13c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.jdt.internal.ui.text.correction;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -35,12 +36,14 @@ import org.eclipse.ui.ISharedImages;
 
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.IBinding;
@@ -59,12 +62,11 @@ import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.TypeParameter;
 import org.eclipse.jdt.core.dom.VariableDeclaration;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
-import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
 import org.eclipse.jdt.internal.corext.util.Strings;
@@ -96,6 +98,7 @@ public class JavadocTagsSubProcessor {
 			fComment= comment;
 		}
 
+		@Override
 		protected void addEdits(IDocument document, TextEdit rootEdit) throws CoreException {
 			try {
 				String lineDelimiter= TextUtilities.getDefaultLineDelimiter(document);
@@ -128,6 +131,7 @@ public class JavadocTagsSubProcessor {
 			fMissingNode= missingNode;
 		}
 
+		@Override
 		protected ASTRewrite getRewrite() throws CoreException {
 			AST ast= fBodyDecl.getAST();
 			ASTRewrite rewrite= ASTRewrite.create(ast);
@@ -154,17 +158,16 @@ public class JavadocTagsSubProcessor {
 				String name= ((SimpleName) missingNode).getIdentifier();
 				newTag= ast.newTagElement();
 				newTag.setTagName(TagElement.TAG_PARAM);
-				List fragments= newTag.fragments();
-				fragments.add(ast.newSimpleName(name));
+				newTag.fragments().add(ast.newSimpleName(name));
 
 				MethodDeclaration methodDeclaration= (MethodDeclaration) bodyDecl;
-				List params= methodDeclaration.parameters();
+				List<SingleVariableDeclaration> params= methodDeclaration.parameters();
 
-				Set sameKindLeadingNames= getPreviousParamNames(params, decl);
+				Set<String> sameKindLeadingNames= getPreviousParamNames(params, decl);
 
-				List typeParams= methodDeclaration.typeParameters();
+				List<TypeParameter> typeParams= methodDeclaration.typeParameters();
 				for (int i= 0; i < typeParams.size(); i++) {
-					String curr= '<' + ((TypeParameter) typeParams.get(i)).getName().getIdentifier() + '>';
+					String curr= '<' + typeParams.get(i).getName().getIdentifier() + '>';
 					sameKindLeadingNames.add(curr);
 				}
 				insertTag(tagsRewriter, newTag, sameKindLeadingNames);
@@ -178,7 +181,7 @@ public class JavadocTagsSubProcessor {
 				TextElement text= ast.newTextElement();
 				text.setText(name);
 				newTag.fragments().add(text);
-				List params;
+				List<TypeParameter> params;
 				if (bodyDecl instanceof TypeDeclaration) {
 					params= ((TypeDeclaration) bodyDecl).typeParameters();
 				} else {
@@ -195,7 +198,7 @@ public class JavadocTagsSubProcessor {
 				TextElement excNode= ast.newTextElement();
 				excNode.setText(ASTNodes.asString(missingNode));
 				newTag.fragments().add(excNode);
-				List exceptions= ((MethodDeclaration) bodyDecl).thrownExceptions();
+				List<Name> exceptions= ((MethodDeclaration) bodyDecl).thrownExceptions();
 				insertTag(tagsRewriter, newTag, getPreviousExceptionNames(exceptions, missingNode));
 		 	} else {
 		 		Assert.isTrue(false, "AddMissingJavadocTagProposal: unexpected node location"); //$NON-NLS-1$
@@ -224,6 +227,7 @@ public class JavadocTagsSubProcessor {
 			fBodyDecl= bodyDecl;
 		}
 
+		@Override
 		protected ASTRewrite getRewrite() throws CoreException {
 			ASTRewrite rewrite= ASTRewrite.create(fBodyDecl.getAST());
 			if (fBodyDecl instanceof MethodDeclaration) {
@@ -239,10 +243,16 @@ public class JavadocTagsSubProcessor {
 		 	Javadoc javadoc= methodDecl.getJavadoc();
 		 	ListRewrite tagsRewriter= rewriter.getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);
 
-		 	List typeParams= methodDecl.typeParameters();
-		 	List typeParamNames= new ArrayList();
+		 	List<TypeParameter> typeParams= methodDecl.typeParameters();
+		 	ASTNode root= methodDecl.getRoot();
+		 	if (root instanceof CompilationUnit) {
+		 		ITypeRoot typeRoot= ((CompilationUnit) root).getTypeRoot();
+		 		if (typeRoot != null && !StubUtility.shouldGenerateMethodTypeParameterTags(typeRoot.getJavaProject()))
+		 			typeParams= Collections.emptyList();
+		 	}
+		 	List<String> typeParamNames= new ArrayList<String>();
 		 	for (int i= typeParams.size() - 1; i >= 0 ; i--) {
-		 		TypeParameter decl= (TypeParameter) typeParams.get(i);
+		 		TypeParameter decl= typeParams.get(i);
 		 		String name= '<' + decl.getName().getIdentifier() + '>';
 		 		if (findTag(javadoc, TagElement.TAG_PARAM, name) == null) {
 		 			TagElement newTag= ast.newTagElement();
@@ -255,16 +265,16 @@ public class JavadocTagsSubProcessor {
 		 		}
 				typeParamNames.add(name);
 		 	}
-		 	List params= methodDecl.parameters();
+		 	List<SingleVariableDeclaration> params= methodDecl.parameters();
 		 	for (int i= params.size() - 1; i >= 0 ; i--) {
-		 		SingleVariableDeclaration decl= (SingleVariableDeclaration) params.get(i);
+		 		SingleVariableDeclaration decl= params.get(i);
 		 		String name= decl.getName().getIdentifier();
 		 		if (findTag(javadoc, TagElement.TAG_PARAM, name) == null) {
 		 			TagElement newTag= ast.newTagElement();
 		 			newTag.setTagName(TagElement.TAG_PARAM);
 		 			newTag.fragments().add(ast.newSimpleName(name));
 					insertTabStop(rewriter, newTag.fragments(), "methParam" + i); //$NON-NLS-1$
-		 			Set sameKindLeadingNames= getPreviousParamNames(params, decl);
+		 			Set<String> sameKindLeadingNames= getPreviousParamNames(params, decl);
 		 			sameKindLeadingNames.addAll(typeParamNames);
 		 			insertTag(tagsRewriter, newTag, sameKindLeadingNames);
 		 		}
@@ -280,9 +290,9 @@ public class JavadocTagsSubProcessor {
 		 			}
 		 		}
 		 	}
-		 	List thrownExceptions= methodDecl.thrownExceptions();
+		 	List<Name> thrownExceptions= methodDecl.thrownExceptions();
 		 	for (int i= thrownExceptions.size() - 1; i >= 0 ; i--) {
-		 		Name exception= (Name) thrownExceptions.get(i);
+		 		Name exception= thrownExceptions.get(i);
 		 		ITypeBinding binding= exception.resolveTypeBinding();
 		 		if (binding != null) {
 		 			String name= binding.getName();
@@ -304,9 +314,9 @@ public class JavadocTagsSubProcessor {
 			Javadoc javadoc= typeDecl.getJavadoc();
 			ListRewrite tagsRewriter= rewriter.getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);
 
-			List typeParams= typeDecl.typeParameters();
+			List<TypeParameter> typeParams= typeDecl.typeParameters();
 			for (int i= typeParams.size() - 1; i >= 0; i--) {
-				TypeParameter decl= (TypeParameter) typeParams.get(i);
+				TypeParameter decl= typeParams.get(i);
 				String name= '<' + decl.getName().getIdentifier() + '>';
 				if (findTag(javadoc, TagElement.TAG_PARAM, name) == null) {
 					TagElement newTag= ast.newTagElement();
@@ -320,7 +330,7 @@ public class JavadocTagsSubProcessor {
 			}
 		}
 
-		private void insertTabStop(ASTRewrite rewriter, List fragments, String linkedName) {
+		private void insertTabStop(ASTRewrite rewriter, List<ASTNode> fragments, String linkedName) {
 			TextElement textElement= rewriter.getAST().newTextElement();
 			textElement.setText(""); //$NON-NLS-1$
 			fragments.add(textElement);
@@ -329,7 +339,7 @@ public class JavadocTagsSubProcessor {
 
 	}
 
-	public static void getMissingJavadocTagProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getMissingJavadocTagProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 	 	ASTNode node= problem.getCoveringNode(context.getASTRoot());
 	 	if (node == null) {
 	 		return;
@@ -365,7 +375,7 @@ public class JavadocTagsSubProcessor {
 	 	} else {
 	 		return;
 	 	}
-	 	ASTRewriteCorrectionProposal proposal= new AddMissingJavadocTagProposal(label, context.getCompilationUnit(), bodyDeclaration, node, 1);
+	 	ASTRewriteCorrectionProposal proposal= new AddMissingJavadocTagProposal(label, context.getCompilationUnit(), bodyDeclaration, node, 4);
 	 	proposals.add(proposal);
 
 	 	String label2= CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_allmissing_description;
@@ -373,7 +383,7 @@ public class JavadocTagsSubProcessor {
 	 	proposals.add(addAllMissing);
 	}
 
-	public static void getUnusedAndUndocumentedParameterOrExceptionProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getUnusedAndUndocumentedParameterOrExceptionProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 		IJavaProject project= cu.getJavaProject();
 
@@ -408,7 +418,7 @@ public class JavadocTagsSubProcessor {
 	 	proposals.add(proposal);
 	}
 
-	public static void getMissingJavadocCommentProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void getMissingJavadocCommentProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ASTNode node= problem.getCoveringNode(context.getASTRoot());
 		if (node == null) {
 			return;
@@ -440,10 +450,10 @@ public class JavadocTagsSubProcessor {
 			String typeQualifiedName= Bindings.getTypeQualifiedName(binding);
 			String[] typeParamNames;
 			if (declaration instanceof TypeDeclaration) {
-				List typeParams= ((TypeDeclaration) declaration).typeParameters();
+				List<TypeParameter> typeParams= ((TypeDeclaration) declaration).typeParameters();
 				typeParamNames= new String[typeParams.size()];
 				for (int i= 0; i < typeParamNames.length; i++) {
-					typeParamNames[i]= ((TypeParameter) typeParams.get(i)).getName().getIdentifier();
+					typeParamNames[i]= (typeParams.get(i)).getName().getIdentifier();
 				}
 			} else {
 				typeParamNames= new String[0];
@@ -455,9 +465,9 @@ public class JavadocTagsSubProcessor {
 			}
 		} else if (declaration instanceof FieldDeclaration) {
 			String comment= "/**\n *\n */\n"; //$NON-NLS-1$
-			List fragments= ((FieldDeclaration)declaration).fragments();
+			List<VariableDeclarationFragment> fragments= ((FieldDeclaration)declaration).fragments();
 			if (fragments != null && fragments.size() > 0) {
-				VariableDeclaration decl= (VariableDeclaration)fragments.get(0);
+				VariableDeclaration decl= fragments.get(0);
 				String fieldName= decl.getName().getIdentifier();
 				String typeName= binding.getName();
 				comment= CodeGeneration.getFieldComment(cu, typeName, fieldName, String.valueOf('\n'));
@@ -475,10 +485,10 @@ public class JavadocTagsSubProcessor {
 		}
 	}
 
-	public static Set getPreviousTypeParamNames(List typeParams, ASTNode missingNode) {
-		Set previousNames=  new HashSet();
+	public static Set<String> getPreviousTypeParamNames(List<TypeParameter> typeParams, ASTNode missingNode) {
+		Set<String> previousNames=  new HashSet<String>();
 		for (int i = 0; i < typeParams.size(); i++) {
-			TypeParameter curr= (TypeParameter) typeParams.get(i);
+			TypeParameter curr= typeParams.get(i);
 			if (curr == missingNode) {
 				return previousNames;
 			}
@@ -487,10 +497,10 @@ public class JavadocTagsSubProcessor {
 		return previousNames;
 	}
 
-	private static Set getPreviousParamNames(List params, ASTNode missingNode) {
-		Set previousNames=  new HashSet();
+	private static Set<String> getPreviousParamNames(List<SingleVariableDeclaration> params, ASTNode missingNode) {
+		Set<String> previousNames=  new HashSet<String>();
 		for (int i = 0; i < params.size(); i++) {
-			SingleVariableDeclaration curr= (SingleVariableDeclaration) params.get(i);
+			SingleVariableDeclaration curr= params.get(i);
 			if (curr == missingNode) {
 				return previousNames;
 			}
@@ -499,20 +509,20 @@ public class JavadocTagsSubProcessor {
 		return previousNames;
 	}
 
-	private static Set getPreviousExceptionNames(List list, ASTNode missingNode) {
-		Set previousNames=  new HashSet();
+	private static Set<String> getPreviousExceptionNames(List<Name> list, ASTNode missingNode) {
+		Set<String> previousNames=  new HashSet<String>();
 		for (int i= 0; i < list.size() && missingNode != list.get(i); i++) {
-			Name curr= (Name) list.get(i);
+			Name curr= list.get(i);
 			previousNames.add(ASTNodes.getSimpleNameIdentifier(curr));
 		}
 		return previousNames;
 	}
 
 	public static TagElement findTag(Javadoc javadoc, String name, String arg) {
-		List tags= javadoc.tags();
+		List<TagElement> tags= javadoc.tags();
 		int nTags= tags.size();
 		for (int i= 0; i < nTags; i++) {
-			TagElement curr= (TagElement) tags.get(i);
+			TagElement curr= tags.get(i);
 			if (name.equals(curr.getTagName())) {
 				if (arg != null) {
 					String argument= getArgument(curr);
@@ -528,10 +538,10 @@ public class JavadocTagsSubProcessor {
 	}
 
 	public static TagElement findParamTag(Javadoc javadoc, String arg) {
-		List tags= javadoc.tags();
+		List<TagElement> tags= javadoc.tags();
 		int nTags= tags.size();
 		for (int i= 0; i < nTags; i++) {
-			TagElement curr= (TagElement) tags.get(i);
+			TagElement curr= tags.get(i);
 			String currName= curr.getTagName();
 			if (TagElement.TAG_PARAM.equals(currName)) {
 				String argument= getArgument(curr);
@@ -545,10 +555,10 @@ public class JavadocTagsSubProcessor {
 
 
 	public static TagElement findThrowsTag(Javadoc javadoc, String arg) {
-		List tags= javadoc.tags();
+		List<TagElement> tags= javadoc.tags();
 		int nTags= tags.size();
 		for (int i= 0; i < nTags; i++) {
-			TagElement curr= (TagElement) tags.get(i);
+			TagElement curr= tags.get(i);
 			String currName= curr.getTagName();
 			if (TagElement.TAG_THROWS.equals(currName) || TagElement.TAG_EXCEPTION.equals(currName)) {
 				String argument= getArgument(curr);
@@ -560,12 +570,12 @@ public class JavadocTagsSubProcessor {
 		return null;
 	}
 
-	public static void insertTag(ListRewrite rewriter, TagElement newElement, Set sameKindLeadingNames) {
+	public static void insertTag(ListRewrite rewriter, TagElement newElement, Set<String> sameKindLeadingNames) {
 		insertTag(rewriter, newElement, sameKindLeadingNames, null);
 	}
 
-	public static void insertTag(ListRewrite rewriter, TagElement newElement, Set sameKindLeadingNames, TextEditGroup groupDescription) {
-		List tags= rewriter.getRewrittenList();
+	public static void insertTag(ListRewrite rewriter, TagElement newElement, Set<String> sameKindLeadingNames, TextEditGroup groupDescription) {
+		List<? extends ASTNode> tags= rewriter.getRewrittenList();
 
 		String insertedTagName= newElement.getTagName();
 
@@ -628,7 +638,7 @@ public class JavadocTagsSubProcessor {
 	}
 
 	private static String getArgument(TagElement curr) {
-		List fragments= curr.fragments();
+		List<? extends ASTNode> fragments= curr.fragments();
 		if (!fragments.isEmpty()) {
 			Object first= fragments.get(0);
 			if (first instanceof Name) {
@@ -649,7 +659,7 @@ public class JavadocTagsSubProcessor {
 		return null;
 	}
 
-	public static void getRemoveJavadocTagProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getRemoveJavadocTagProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode node= problem.getCoveringNode(context.getASTRoot());
 		while (node != null && !(node instanceof TagElement)) {
 			node= node.getParent();
@@ -665,7 +675,7 @@ public class JavadocTagsSubProcessor {
 		proposals.add(new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 5, image));
 	}
 
-	public static void getInvalidQualificationProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getInvalidQualificationProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode node= problem.getCoveringNode(context.getASTRoot());
 		if (!(node instanceof Name)) {
 			return;
@@ -676,30 +686,15 @@ public class JavadocTagsSubProcessor {
 			return;
 		}
 		ITypeBinding typeBinding= (ITypeBinding)binding;
-		String typeQualifiedName= Bindings.getTypeQualifiedName(typeBinding);
-		if (typeQualifiedName.equals(name.getFullyQualifiedName())) {
-			return;
-		}
-		ITypeBinding outerClass= typeBinding;
-		while (outerClass.getDeclaringClass() != null) {
-			outerClass= outerClass.getDeclaringClass();
-		}
 
 		AST ast= node.getAST();
 		ASTRewrite rewrite= ASTRewrite.create(ast);
+		rewrite.replace(name, ast.newName(typeBinding.getQualifiedName()), null);
 
 		String label= CorrectionMessages.JavadocTagsSubProcessor_qualifylinktoinner_description;
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
 		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 5, image);
 
-		ImportRewrite importRewrite= proposal.createImportRewrite(context.getASTRoot());
-		ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(node, importRewrite);
-		String importedType= importRewrite.addImport(outerClass, importRewriteContext);
-		if (importedType.equals(outerClass.getName())) {
-			rewrite.replace(name, ast.newName(typeQualifiedName), null);
-		} else {
-			rewrite.replace(name, ast.newName(typeBinding.getQualifiedName()), null);
-		}
 		proposals.add(proposal);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
index 409e8ea..fbd00bf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,9 +49,11 @@ import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.Annotation;
+import org.eclipse.jdt.core.dom.ArrayType;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
+import org.eclipse.jdt.core.dom.CastExpression;
 import org.eclipse.jdt.core.dom.CatchClause;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.ConditionalExpression;
@@ -75,8 +77,11 @@ import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.PrefixExpression;
+import org.eclipse.jdt.core.dom.PrimitiveType;
+import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.SimpleType;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
@@ -102,7 +107,9 @@ import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
 import org.eclipse.jdt.internal.corext.dom.BodyDeclarationRewrite;
+import org.eclipse.jdt.internal.corext.dom.NecessaryParenthesesChecker;
 import org.eclipse.jdt.internal.corext.dom.Selection;
+import org.eclipse.jdt.internal.corext.dom.TypeRules;
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
 import org.eclipse.jdt.internal.corext.fix.CodeStyleFix;
 import org.eclipse.jdt.internal.corext.fix.IProposableFix;
@@ -110,6 +117,7 @@ import org.eclipse.jdt.internal.corext.fix.Java50Fix;
 import org.eclipse.jdt.internal.corext.fix.StringFix;
 import org.eclipse.jdt.internal.corext.fix.UnimplementedCodeFix;
 import org.eclipse.jdt.internal.corext.fix.UnusedCodeFix;
+import org.eclipse.jdt.internal.corext.refactoring.code.Invocations;
 import org.eclipse.jdt.internal.corext.refactoring.surround.ExceptionAnalyzer;
 import org.eclipse.jdt.internal.corext.refactoring.surround.SurroundWithTryCatchRefactoring;
 import org.eclipse.jdt.internal.corext.refactoring.util.NoCommentSourceRangeComputer;
@@ -118,6 +126,7 @@ import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.actions.GenerateHashCodeEqualsAction;
+import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds;
 import org.eclipse.jdt.ui.actions.InferTypeArgumentsAction;
 import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
 import org.eclipse.jdt.ui.cleanup.ICleanUp;
@@ -161,7 +170,7 @@ public class LocalCorrectionsSubProcessor {
 	private static final String ADD_STATIC_ACCESS_ID= "org.eclipse.jdt.ui.correction.changeToStatic"; //$NON-NLS-1$
 	private static final String REMOVE_UNNECESSARY_NLS_TAG_ID= "org.eclipse.jdt.ui.correction.removeNlsTag"; //$NON-NLS-1$
 
-	public static void addUncaughtExceptionProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void addUncaughtExceptionProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		CompilationUnit astRoot= context.getASTRoot();
@@ -256,20 +265,20 @@ public class LocalCorrectionsSubProcessor {
 			}
 			if (isApplicable) {
 				ITypeBinding[] methodExceptions= binding.getExceptionTypes();
-				ArrayList unhandledExceptions= new ArrayList(uncaughtExceptions.length);
+				ArrayList<ITypeBinding> unhandledExceptions= new ArrayList<ITypeBinding>(uncaughtExceptions.length);
 				for (int i= 0; i < uncaughtExceptions.length; i++) {
 					ITypeBinding curr= uncaughtExceptions[i];
 					if (!canRemoveException(curr, methodExceptions)) {
 						unhandledExceptions.add(curr);
 					}
 				}
-				uncaughtExceptions= (ITypeBinding[]) unhandledExceptions.toArray(new ITypeBinding[unhandledExceptions.size()]);
+				uncaughtExceptions= unhandledExceptions.toArray(new ITypeBinding[unhandledExceptions.size()]);
 
-				List exceptions= methodDecl.thrownExceptions();
+				List<Name> exceptions= methodDecl.thrownExceptions();
 				int nExistingExceptions= exceptions.size();
 				ChangeDescription[] desc= new ChangeDescription[nExistingExceptions + uncaughtExceptions.length];
 				for (int i= 0; i < exceptions.size(); i++) {
-					Name elem= (Name) exceptions.get(i);
+					Name elem= exceptions.get(i);
 					if (canRemoveException(elem.resolveTypeBinding(), uncaughtExceptions)) {
 						desc[i]= new RemoveDescription();
 					}
@@ -312,7 +321,7 @@ public class LocalCorrectionsSubProcessor {
 		return false;
 	}
 
-	public static void addUnreachableCatchProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUnreachableCatchProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (selectedNode == null) {
 			return;
@@ -321,17 +330,19 @@ public class LocalCorrectionsSubProcessor {
 		QuickAssistProcessor.getCatchClauseToThrowsProposals(context, selectedNode, proposals);
 	}
 
-	public static void addNLSProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void addNLSProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		final ICompilationUnit cu= context.getCompilationUnit();
 		if (cu == null || !cu.exists()){
 			return;
 		}
 		String name= CorrectionMessages.LocalCorrectionsSubProcessor_externalizestrings_description;
 
-		ChangeCorrectionProposal proposal= new ChangeCorrectionProposal(name, null, 2, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE)) {
+		ChangeCorrectionProposal proposal= new ChangeCorrectionProposal(name, null, 4, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE)) {
+			@Override
 			public void apply(IDocument document) {
 				ExternalizeWizard.open(cu, JavaPlugin.getActiveWorkbenchShell());
 			}
+			@Override
 			public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 				return CorrectionMessages.LocalCorrectionsSubProcessor_externalizestrings_additional_info;
 			}
@@ -342,19 +353,19 @@ public class LocalCorrectionsSubProcessor {
 		IProposableFix fix= StringFix.createFix(context.getASTRoot(), problem, false, true);
 		if (fix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_OBJS_NLS_NEVER_TRANSLATE);
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.ADD_MISSING_NLS_TAGS, CleanUpOptions.TRUE);
-			FixCorrectionProposal addNLS= new FixCorrectionProposal(fix, new StringCleanUp(options), 3, image, context);
+			FixCorrectionProposal addNLS= new FixCorrectionProposal(fix, new StringCleanUp(options), 5, image, context);
 			addNLS.setCommandId(ADD_NON_NLS_ID);
 			proposals.add(addNLS);
 		}
 	}
 
-	public static void getUnnecessaryNLSTagProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void getUnnecessaryNLSTagProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		IProposableFix fix= StringFix.createFix(context.getASTRoot(), problem, true, false);
 		if (fix != null) {
 			Image image= JavaPlugin.getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE);
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.REMOVE_UNNECESSARY_NLS_TAGS, CleanUpOptions.TRUE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new StringCleanUp(options), 6, image, context);
 			proposal.setCommandId(REMOVE_UNNECESSARY_NLS_TAG_ID);
@@ -366,11 +377,11 @@ public class LocalCorrectionsSubProcessor {
 	/*
 	 * Fix instance accesses and indirect (static) accesses to static fields/methods
 	 */
-	public static void addCorrectAccessToStaticProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void addCorrectAccessToStaticProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		IProposableFix fix= CodeStyleFix.createIndirectAccessToStaticFix(context.getASTRoot(), problem);
 		if (fix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			Map options= new HashMap();
+			Map<String, String> options= new HashMap<String, String>();
 			options.put(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS, CleanUpOptions.TRUE);
 			options.put(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_SUBTYPE_ACCESS, CleanUpOptions.TRUE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new CodeStyleCleanUp(options), 6, image, context);
@@ -383,7 +394,7 @@ public class LocalCorrectionsSubProcessor {
 		if (fixes != null) {
 			IProposableFix fix1= fixes[0];
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			Map options= new HashMap();
+			Map<String, String> options= new HashMap<String, String>();
 			options.put(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS, CleanUpOptions.TRUE);
 			options.put(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_INSTANCE_ACCESS, CleanUpOptions.TRUE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix1, new CodeStyleCleanUp(options), 6, image, context);
@@ -391,7 +402,7 @@ public class LocalCorrectionsSubProcessor {
 			proposals.add(proposal);
 
 			if (fixes.length > 1) {
-				Map options1= new HashMap();
+				Map<String, String> options1= new HashMap<String, String>();
 				options1.put(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS, CleanUpOptions.TRUE);
 				options1.put(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_SUBTYPE_ACCESS, CleanUpOptions.TRUE);
 				options1.put(CleanUpConstants.MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_INSTANCE_ACCESS, CleanUpOptions.TRUE);
@@ -403,12 +414,12 @@ public class LocalCorrectionsSubProcessor {
 		ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_STATIC, 4);
 	}
 
-	public static void addUnimplementedMethodsProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUnimplementedMethodsProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IProposableFix addMethodFix= UnimplementedCodeFix.createAddUnimplementedMethodsFix(context.getASTRoot(), problem);
 		if (addMethodFix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
 
-			Map settings= new Hashtable();
+			Map<String, String> settings= new Hashtable<String, String>();
 			settings.put(CleanUpConstants.ADD_MISSING_METHODES, CleanUpOptions.TRUE);
 			ICleanUp cleanUp= new UnimplementedCodeCleanUp(settings);
 
@@ -419,7 +430,7 @@ public class LocalCorrectionsSubProcessor {
 		if (makeAbstractFix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
 
-			Map settings= new Hashtable();
+			Map<String, String> settings= new Hashtable<String, String>();
 			settings.put(UnimplementedCodeCleanUp.MAKE_TYPE_ABSTRACT, CleanUpOptions.TRUE);
 			ICleanUp cleanUp= new UnimplementedCodeCleanUp(settings);
 
@@ -427,7 +438,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void addUninitializedLocalVariableProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUninitializedLocalVariableProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -465,7 +476,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void addConstructorFromSuperclassProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void addConstructorFromSuperclassProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (selectedNode == null) {
 			return;
@@ -496,7 +507,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void addUnusedMemberProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUnusedMemberProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		int problemId = problem.getProblemId();
 		UnusedCodeFix fix= UnusedCodeFix.createUnusedMemberFix(context.getASTRoot(), problem, false);
 		if (fix != null) {
@@ -518,7 +529,7 @@ public class LocalCorrectionsSubProcessor {
 
 	}
 
-	public static void addRedundantSuperInterfaceProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addRedundantSuperInterfaceProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (!(selectedNode instanceof Name)) {
 			return;
@@ -536,7 +547,7 @@ public class LocalCorrectionsSubProcessor {
 
 	}
 
-	private static void addProposal(IInvocationContext context, Collection proposals, final UnusedCodeFix fix) {
+	private static void addProposal(IInvocationContext context, Collection<ICommandAccess> proposals, final UnusedCodeFix fix) {
 		if (fix != null) {
 			Image image= JavaPlugin.getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, fix.getCleanUp(), 10, image, context);
@@ -544,24 +555,24 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void addSuperfluousSemicolonProposal(IInvocationContext context, IProblemLocation problem,  Collection proposals) {
+	public static void addSuperfluousSemicolonProposal(IInvocationContext context, IProblemLocation problem,  Collection<ICommandAccess> proposals) {
 		String label= CorrectionMessages.LocalCorrectionsSubProcessor_removesemicolon_description;
 		ReplaceCorrectionProposal proposal= new ReplaceCorrectionProposal(label, context.getCompilationUnit(), problem.getOffset(), problem.getLength(), "", 6); //$NON-NLS-1$
 		proposals.add(proposal);
 	}
 
-	public static void addUnnecessaryCastProposal(IInvocationContext context, IProblemLocation problem,  Collection proposals) {
+	public static void addUnnecessaryCastProposal(IInvocationContext context, IProblemLocation problem,  Collection<ICommandAccess> proposals) {
 		IProposableFix fix= UnusedCodeFix.createRemoveUnusedCastFix(context.getASTRoot(), problem);
 		if (fix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.REMOVE_UNNECESSARY_CASTS, CleanUpOptions.TRUE);
-			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new UnnecessaryCodeCleanUp(options), 5, image, context);
+			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new UnnecessaryCodeCleanUp(options), 10, image, context);
 			proposals.add(proposal);
 		}
 	}
 
-	public static void addUnnecessaryInstanceofProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUnnecessaryInstanceofProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 
 		ASTNode curr= selectedNode;
@@ -585,13 +596,13 @@ public class LocalCorrectionsSubProcessor {
 
 			String label= CorrectionMessages.LocalCorrectionsSubProcessor_unnecessaryinstanceof_description;
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 5, image);
+			ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 10, image);
 			proposals.add(proposal);
 		}
 
 	}
 
-	public static void addUnnecessaryThrownExceptionProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUnnecessaryThrownExceptionProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (selectedNode == null || !(selectedNode.getParent() instanceof MethodDeclaration)) {
 			return;
@@ -599,7 +610,7 @@ public class LocalCorrectionsSubProcessor {
 		MethodDeclaration decl= (MethodDeclaration) selectedNode.getParent();
 		IMethodBinding binding= decl.resolveBinding();
 		if (binding != null) {
-			List thrownExceptions= decl.thrownExceptions();
+			List<Name> thrownExceptions= decl.thrownExceptions();
 			int index= thrownExceptions.indexOf(selectedNode);
 			if (index == -1) {
 				return;
@@ -617,11 +628,11 @@ public class LocalCorrectionsSubProcessor {
 		JavadocTagsSubProcessor.getUnusedAndUndocumentedParameterOrExceptionProposals(context, problem, proposals);
 	}
 
-	public static void addUnqualifiedFieldAccessProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUnqualifiedFieldAccessProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IProposableFix fix= CodeStyleFix.createAddFieldQualifierFix(context.getASTRoot(), problem);
 		if (fix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			Map options= new HashMap();
+			Map<String, String> options= new HashMap<String, String>();
 			options.put(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS, CleanUpOptions.TRUE);
 			options.put(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS_ALWAYS, CleanUpOptions.TRUE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new CodeStyleCleanUp(options), 8, image, context);
@@ -630,7 +641,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void addInvalidVariableNameProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addInvalidVariableNameProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		// hiding, redefined or future keyword
 
 		CompilationUnit root= context.getASTRoot();
@@ -677,7 +688,7 @@ public class LocalCorrectionsSubProcessor {
 		proposals.add(proposal);
 	}
 
-	public static void getInvalidOperatorProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getInvalidOperatorProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit root= context.getASTRoot();
 		AST ast= root.getAST();
 
@@ -700,7 +711,8 @@ public class LocalCorrectionsSubProcessor {
 						label= CorrectionMessages.LocalCorrectionsSubProcessor_setparenteses_instanceof_description;
 						break;
 					case ASTNode.INFIX_EXPRESSION:
-						label= CorrectionMessages.LocalCorrectionsSubProcessor_setparenteses_description;
+						InfixExpression infixExpression= (InfixExpression)parent;
+						label= Messages.format(CorrectionMessages.LocalCorrectionsSubProcessor_setparenteses_description, infixExpression.getOperator().toString());
 						break;
 				}
 
@@ -716,7 +728,7 @@ public class LocalCorrectionsSubProcessor {
 
 					rewrite.replace(parent, newPrefixExpr, null);
 
-					Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
+					Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CAST);
 					ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 5, image);
 					proposals.add(proposal);
 				}
@@ -728,6 +740,7 @@ public class LocalCorrectionsSubProcessor {
 				String label= CorrectionMessages.LocalCorrectionsSubProcessor_setparenteses_bitop_description;
 				Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CAST);
 				CUCorrectionProposal proposal= new CUCorrectionProposal(label, context.getCompilationUnit(), 5, image) {
+					@Override
 					protected void addEdits(IDocument document, TextEdit edit) throws CoreException {
 						InfixExpression compareExpression= opFinder.getCompareExpression();
 						InfixExpression expression= opFinder.getParentInfixExpression();
@@ -763,6 +776,7 @@ public class LocalCorrectionsSubProcessor {
 			selectedNode.accept(this);
 		}
 
+		@Override
 		public boolean visit(InfixExpression e) {
 			InfixExpression.Operator op= e.getOperator();
 			if (isBitOperation(op)) {
@@ -789,7 +803,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void getUnnecessaryElseProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getUnnecessaryElseProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit root= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(root);
 		if (selectedNode == null) {
@@ -835,7 +849,7 @@ public class LocalCorrectionsSubProcessor {
 	}
 
 
-	public static void getInterfaceExtendsClassProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getInterfaceExtendsClassProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit root= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(root);
 		if (selectedNode == null) {
@@ -875,7 +889,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void getUnreachableCodeProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getUnreachableCodeProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit root= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(root);
 		if (selectedNode == null) {
@@ -915,13 +929,13 @@ public class LocalCorrectionsSubProcessor {
 			// also offer split && / || condition proposals:
 			InfixExpression infixExpression= (InfixExpression)parent;
 			Expression leftOperand= infixExpression.getLeftOperand();
-			List extendedOperands= infixExpression.extendedOperands();
+			List<Expression> extendedOperands= infixExpression.extendedOperands();
 			
 			ASTRewrite rewrite= ASTRewrite.create(parent.getAST());
 			if (extendedOperands.size() == 0) {
 				rewrite.replace(infixExpression, rewrite.createMoveTarget(leftOperand), null);
 			} else {
-				ASTNode firstExtendedOp= rewrite.createMoveTarget((Expression)extendedOperands.get(0));
+				ASTNode firstExtendedOp= rewrite.createMoveTarget(extendedOperands.get(0));
 				rewrite.set(infixExpression, InfixExpression.RIGHT_OPERAND_PROPERTY, firstExtendedOp, null);
 				rewrite.remove(leftOperand, null);
 			}
@@ -935,7 +949,7 @@ public class LocalCorrectionsSubProcessor {
 			
 		} else if (selectedNode instanceof Statement && selectedNode.getLocationInParent().isChildListProperty()) {
 			// remove all statements following the unreachable:
-			List statements= (List) selectedNode.getParent().getStructuralProperty(selectedNode.getLocationInParent());
+			List<Statement> statements= (List<Statement>) selectedNode.getParent().getStructuralProperty(selectedNode.getLocationInParent());
 			int idx= statements.indexOf(selectedNode);
 			
 			ASTRewrite rewrite= ASTRewrite.create(selectedNode.getAST());
@@ -954,7 +968,7 @@ public class LocalCorrectionsSubProcessor {
 			}
 			
 			for (int i= idx; i < statements.size(); i++) {
-				ASTNode statement= (ASTNode)statements.get(i);
+				ASTNode statement= statements.get(i);
 				if (statement instanceof SwitchCase)
 					break; // stop at case *: and default:
 				rewrite.remove(statement, null);
@@ -969,7 +983,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	private static void addRemoveProposal(IInvocationContext context, ASTNode selectedNode, Collection proposals) {
+	private static void addRemoveProposal(IInvocationContext context, ASTNode selectedNode, Collection<ICommandAccess> proposals) {
 		ASTRewrite rewrite= ASTRewrite.create(selectedNode.getAST());
 		rewrite.remove(selectedNode, null);
 		
@@ -977,26 +991,67 @@ public class LocalCorrectionsSubProcessor {
 		addRemoveProposal(context, rewrite, label, proposals);
 	}
 
-	private static void addRemoveIncludingConditionProposal(IInvocationContext context, ASTNode toRemove, ASTNode replacement, Collection proposals) {
-		ASTRewrite rewrite= ASTRewrite.create(toRemove.getAST());
+	private static void addRemoveIncludingConditionProposal(IInvocationContext context, ASTNode toRemove, ASTNode replacement, Collection<ICommandAccess> proposals) {
+		Image image= JavaPlugin.getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE);
+		String label= CorrectionMessages.LocalCorrectionsSubProcessor_removeunreachablecode_including_condition_description;
+		AST ast= toRemove.getAST();
+		ASTRewrite rewrite= ASTRewrite.create(ast);
+		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 10, image);
+		
 		if (replacement == null
 				|| replacement instanceof EmptyStatement
 				|| replacement instanceof Block && ((Block)replacement).statements().size() == 0) {
-			rewrite.remove(toRemove, null);
+			if (ASTNodes.isControlStatementBody(toRemove.getLocationInParent())) {
+				rewrite.replace(toRemove, toRemove.getAST().newBlock(), null);
+			} else {
+				rewrite.remove(toRemove, null);
+			}
+			
+		} else if (toRemove instanceof Expression && replacement instanceof Expression) {
+			Expression moved= (Expression) rewrite.createMoveTarget(replacement);
+			Expression toRemoveExpression= (Expression) toRemove;
+			Expression replacementExpression= (Expression) replacement;
+			ITypeBinding explicitCast= ASTNodes.getExplicitCast(replacementExpression, toRemoveExpression);
+			if (explicitCast != null) {
+				CastExpression cast= ast.newCastExpression();
+				if (NecessaryParenthesesChecker.needsParentheses(replacementExpression, cast, CastExpression.EXPRESSION_PROPERTY)) {
+					ParenthesizedExpression parenthesized= ast.newParenthesizedExpression();
+					parenthesized.setExpression(moved);
+					moved= parenthesized;
+				}
+				cast.setExpression(moved);
+				ImportRewrite imports= proposal.createImportRewrite(context.getASTRoot());
+				ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(toRemove, imports);
+				cast.setType(imports.addImport(explicitCast, ast, importRewriteContext));
+				moved= cast;
+			}
+			rewrite.replace(toRemove, moved, null);
+			
 		} else {
-			rewrite.replace(toRemove, rewrite.createMoveTarget(replacement), null);
+			ASTNode parent= toRemove.getParent();
+			ASTNode moveTarget;
+			if ((parent instanceof Block || parent instanceof SwitchStatement) && replacement instanceof Block) {
+				ListRewrite listRewrite= rewrite.getListRewrite(replacement, Block.STATEMENTS_PROPERTY);
+				List<Statement> list= ((Block)replacement).statements();
+				int lastIndex= list.size() - 1;
+				moveTarget= listRewrite.createMoveTarget(list.get(0), list.get(lastIndex));
+			} else {
+				moveTarget= rewrite.createMoveTarget(replacement);
+			}
+
+			rewrite.replace(toRemove, moveTarget, null);
 		}
-		String label= CorrectionMessages.LocalCorrectionsSubProcessor_removeunreachablecode_including_condition_description;
-		addRemoveProposal(context, rewrite, label, proposals);
+		
+		proposals.add(proposal);
 	}
 
-	private static void addRemoveProposal(IInvocationContext context, ASTRewrite rewrite, String label, Collection proposals) {
+	private static void addRemoveProposal(IInvocationContext context, ASTRewrite rewrite, String label, Collection<ICommandAccess> proposals) {
 		Image image= JavaPlugin.getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE);
 		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 10, image);
 		proposals.add(proposal);
 	}
 
-	public static void getUnusedObjectAllocationProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getUnusedObjectAllocationProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit root= context.getASTRoot();
 		AST ast= root.getAST();
 		ASTNode selectedNode= problem.getCoveringNode(root);
@@ -1023,7 +1078,8 @@ public class LocalCorrectionsSubProcessor {
 
 				String label= CorrectionMessages.LocalCorrectionsSubProcessor_throw_allocated_description;
 				Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-				ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 8, image);
+				LinkedCorrectionProposal proposal= new LinkedCorrectionProposal(label, context.getCompilationUnit(), rewrite, 8, image);
+				proposal.setEndPosition(rewrite.track(throwStatement));
 				proposals.add(proposal);
 			}
 			
@@ -1040,7 +1096,18 @@ public class LocalCorrectionsSubProcessor {
 
 				String label= CorrectionMessages.LocalCorrectionsSubProcessor_return_allocated_description;
 				Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-				ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 7, image);
+				int relevance;
+				ITypeBinding returnTypeBinding= method.getReturnType2().resolveBinding();
+				if (returnTypeBinding != null && exprType != null && exprType.isAssignmentCompatible(returnTypeBinding)) {
+					relevance= 7;
+				} else if (method.getReturnType2() instanceof PrimitiveType
+						&& ((PrimitiveType)method.getReturnType2()).getPrimitiveTypeCode() == PrimitiveType.VOID) {
+					relevance= 1;
+				} else {
+					relevance= 2;
+				}
+				LinkedCorrectionProposal proposal= new LinkedCorrectionProposal(label, context.getCompilationUnit(), rewrite, relevance, image);
+				proposal.setEndPosition(rewrite.track(returnStatement));
 				proposals.add(proposal);
 			}
 			
@@ -1050,14 +1117,16 @@ public class LocalCorrectionsSubProcessor {
 				
 				String label= CorrectionMessages.LocalCorrectionsSubProcessor_remove_allocated_description;
 				Image image= JavaPlugin.getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE);
-				ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 2, image);
+				ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 1, image);
 				proposals.add(proposal);
 			}
 			
 		}
+		
+		QuickAssistProcessor.getAssignToVariableProposals(context, selectedNode, null, proposals);
 	}
 
-	public static void getAssignmentHasNoEffectProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getAssignmentHasNoEffectProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit root= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(root);
 		if (!(selectedNode instanceof Assignment)) {
@@ -1125,7 +1194,7 @@ public class LocalCorrectionsSubProcessor {
 		return new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, relevance, image);
 	}
 
-	public static void addValueForAnnotationProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addValueForAnnotationProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (selectedNode instanceof Annotation) {
@@ -1138,10 +1207,10 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void addTypePrametersToRawTypeReference(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addTypePrametersToRawTypeReference(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IProposableFix fix= Java50Fix.createRawTypeReferenceFix(context.getASTRoot(), problem);
 		if (fix != null) {
-			for (Iterator iter= proposals.iterator(); iter.hasNext();) {
+			for (Iterator<ICommandAccess> iter= proposals.iterator(); iter.hasNext();) {
 				Object element= iter.next();
 				if (element instanceof FixCorrectionProposal) {
 					FixCorrectionProposal fixProp= (FixCorrectionProposal)element;
@@ -1151,7 +1220,7 @@ public class LocalCorrectionsSubProcessor {
 				}
 			}
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.VARIABLE_DECLARATION_USE_TYPE_ARGUMENTS_FOR_RAW_TYPE_REFERENCES, CleanUpOptions.TRUE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new Java50CleanUp(options), 6, image, context);
 			proposal.setCommandId(RAW_TYPE_REFERENCE_ID);
@@ -1159,34 +1228,107 @@ public class LocalCorrectionsSubProcessor {
 		}
 
 		//Infer Generic Type Arguments... proposal
-		final ICompilationUnit cu= context.getCompilationUnit();
-		ChangeCorrectionProposal proposal= new ChangeCorrectionProposal(CorrectionMessages.LocalCorrectionsSubProcessor_InferGenericTypeArguments, null, 5, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE)) {
-			public void apply(IDocument document) {
-				IEditorInput input= new FileEditorInput((IFile) cu.getResource());
-				IWorkbenchPage p= JavaPlugin.getActivePage();
-				if (p == null)
-					return;
-
-				IEditorPart part= p.findEditor(input);
-				if (!(part instanceof JavaEditor))
-					return;
-
-				IEditorSite site= ((JavaEditor)part).getEditorSite();
-				InferTypeArgumentsAction action= new InferTypeArgumentsAction(site);
-				action.run(new StructuredSelection(cu));
+		boolean hasInferTypeArgumentsProposal= false;
+		for (Iterator<ICommandAccess> iterator= proposals.iterator(); iterator.hasNext();) {
+			Object completionProposal= iterator.next();
+			if (completionProposal instanceof ChangeCorrectionProposal) {
+				if (IJavaEditorActionDefinitionIds.INFER_TYPE_ARGUMENTS_ACTION.equals(((ChangeCorrectionProposal)completionProposal).getCommandId())) {
+					hasInferTypeArgumentsProposal= true;
+					break;
+				}
+			}
+		}
+		if (! hasInferTypeArgumentsProposal) {
+			final ICompilationUnit cu= context.getCompilationUnit();
+			ChangeCorrectionProposal proposal= new ChangeCorrectionProposal(CorrectionMessages.LocalCorrectionsSubProcessor_InferGenericTypeArguments, null, 5, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE)) {
+				@Override
+				public void apply(IDocument document) {
+					IEditorInput input= new FileEditorInput((IFile) cu.getResource());
+					IWorkbenchPage p= JavaPlugin.getActivePage();
+					if (p == null)
+						return;
+	
+					IEditorPart part= p.findEditor(input);
+					if (!(part instanceof JavaEditor))
+						return;
+	
+					IEditorSite site= ((JavaEditor)part).getEditorSite();
+					InferTypeArgumentsAction action= new InferTypeArgumentsAction(site);
+					action.run(new StructuredSelection(cu));
+				}
+	
+				/**
+				 * {@inheritDoc}
+				 */
+				@Override
+				public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
+					return CorrectionMessages.LocalCorrectionsSubProcessor_InferGenericTypeArguments_description;
+				}
+			};
+			proposal.setCommandId(IJavaEditorActionDefinitionIds.INFER_TYPE_ARGUMENTS_ACTION);
+			proposals.add(proposal);
+		}
+		
+		addTypeArgumentsFromContext(context, problem, proposals);
+	}
+	
+	private static void addTypeArgumentsFromContext(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
+		// similar to UnresolvedElementsSubProcessor.getTypeProposals(context, problem, proposals);
+		
+		ICompilationUnit cu= context.getCompilationUnit();
+
+		CompilationUnit root= context.getASTRoot();
+		ASTNode selectedNode= problem.getCoveringNode(root);
+		if (selectedNode == null) {
+			return;
+		}
+
+		while (selectedNode.getLocationInParent() == QualifiedName.NAME_PROPERTY) {
+			selectedNode= selectedNode.getParent();
+		}
+
+		Name node= null;
+		if (selectedNode instanceof SimpleType) {
+			node= ((SimpleType) selectedNode).getName();
+		} else if (selectedNode instanceof ArrayType) {
+			Type elementType= ((ArrayType) selectedNode).getElementType();
+			if (elementType.isSimpleType()) {
+				node= ((SimpleType) elementType).getName();
+			} else {
+				return;
 			}
+		} else if (selectedNode instanceof Name) {
+			node= (Name) selectedNode;
+		} else {
+			return;
+		}
 
-			/**
-			 * {@inheritDoc}
-			 */
-			public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
-				return CorrectionMessages.LocalCorrectionsSubProcessor_InferGenericTypeArguments_description;
+		// try to resolve type in context
+		ITypeBinding binding= ASTResolving.guessBindingForTypeReference(node);
+		if (binding != null) {
+			ITypeBinding simpleBinding= binding;
+			if (simpleBinding.isArray()) {
+				simpleBinding= simpleBinding.getElementType();
 			}
-		};
-		proposals.add(proposal);
+			simpleBinding= simpleBinding.getTypeDeclaration();
+		
+			if (!simpleBinding.isRecovered()) {
+				if (binding.isParameterizedType() && node.getParent() instanceof SimpleType && !(node.getParent().getParent() instanceof Type)) {
+					proposals.add(UnresolvedElementsSubProcessor.createTypeRefChangeFullProposal(cu, binding, node, 3 + 2));
+				}
+			}
+		} else {
+			ASTNode normalizedNode= ASTNodes.getNormalizedNode(node);
+			if (!(normalizedNode.getParent() instanceof Type) && node.getParent() != normalizedNode) {
+				ITypeBinding normBinding= ASTResolving.guessBindingForTypeReference(normalizedNode);
+				if (normBinding != null && !normBinding.isRecovered()) {
+					proposals.add(UnresolvedElementsSubProcessor.createTypeRefChangeFullProposal(cu, normBinding, normalizedNode, 3 + 2));
+				}
+			}
+		}
 	}
 
-	public static void addFallThroughProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addFallThroughProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (selectedNode instanceof SwitchCase && selectedNode.getLocationInParent() == SwitchStatement.STATEMENTS_PROPERTY) {
 			AST ast= selectedNode.getAST();
@@ -1216,7 +1358,7 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static void addDeprecatedFieldsToMethodsProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addDeprecatedFieldsToMethodsProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (selectedNode instanceof Name) {
 			IBinding binding= ((Name) selectedNode).resolveBinding();
@@ -1235,6 +1377,30 @@ public class LocalCorrectionsSubProcessor {
 						String qfn= importRewrite.addImport(methodName[0]);
 						method.setExpression(ast.newName(qfn));
 						method.setName(ast.newSimpleName(methodName[1]));
+						ASTNode parent= selectedNode.getParent();
+						// add explicit type arguments if necessary:
+						if (Invocations.isInvocationWithArguments(parent)) {
+							IMethodBinding methodBinding= Invocations.resolveBinding(parent);
+							if (methodBinding != null) {
+								ITypeBinding[] parameterTypes= methodBinding.getParameterTypes();
+								int i= Invocations.getArguments(parent).indexOf(selectedNode);
+								if (parameterTypes.length >= i && parameterTypes[i].isParameterizedType()) {
+									ITypeBinding[] typeArguments= parameterTypes[i].getTypeArguments();
+									for (int j= 0; j < typeArguments.length; j++) {
+										ITypeBinding typeArgument= typeArguments[j];
+										if (! TypeRules.isJavaLangObject(typeArgument)) {
+											List<Type> typeArgumentsList= method.typeArguments();
+											for (int k= 0; k < typeArguments.length; k++) {
+												typeArgument= typeArguments[k];
+												typeArgumentsList.add(importRewrite.addImport(typeArgument, ast));
+											}
+											break;
+										}
+									}
+								}
+							}
+						}
+						
 						astRewrite.replace(selectedNode, method, null);
 
 						String label= Messages.format(CorrectionMessages.LocalCorrectionsSubProcessor_replacefieldaccesswithmethod_description, BasicElementLabels.getJavaElementName(ASTNodes.asString(method)));
@@ -1248,18 +1414,18 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	private static Map/*<String,String[]>*/ resolveMap;
+	private static Map<String, String[]> resolveMap;
 	private static String[] getMethod(String fieldName) {
 		if (resolveMap==null){
-			resolveMap=new HashMap();
+			resolveMap=new HashMap<String, String[]>();
 			resolveMap.put("java.util.Collections.EMPTY_MAP", new String[]{"java.util.Collections","emptyMap"});   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 			resolveMap.put("java.util.Collections.EMPTY_SET", new String[]{"java.util.Collections","emptySet"});  //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 			resolveMap.put("java.util.Collections.EMPTY_LIST", new String[]{"java.util.Collections","emptyList"});//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 		}
-		return (String[]) resolveMap.get(fieldName);
+		return resolveMap.get(fieldName);
 	}
 
-	public static void getMissingEnumConstantCaseProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getMissingEnumConstantCaseProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
 		if (selectedNode instanceof Name && selectedNode.getParent() instanceof SwitchStatement) {
 			SwitchStatement statement= (SwitchStatement) selectedNode.getParent();
@@ -1276,8 +1442,8 @@ public class LocalCorrectionsSubProcessor {
 		}
 	}
 
-	public static String[] evaluateMissingEnumConstantCases(ITypeBinding enumBindings, List switchStatements) {
-		ArrayList enumConstNames= new ArrayList();
+	public static String[] evaluateMissingEnumConstantCases(ITypeBinding enumBindings, List<Statement> switchStatements) {
+		ArrayList<String> enumConstNames= new ArrayList<String>();
 		IVariableBinding[] fields= enumBindings.getDeclaredFields();
 		for (int i= 0; i < fields.length; i++) {
 			if (fields[i].isEnumConstant()) {
@@ -1285,9 +1451,9 @@ public class LocalCorrectionsSubProcessor {
 			}
 		}
 
-		List statements= switchStatements;
+		List<Statement> statements= switchStatements;
 		for (int i= 0; i < statements.size(); i++) {
-			Object curr= statements.get(i);
+			Statement curr= statements.get(i);
 			if (curr instanceof SwitchCase) {
 				Expression expression= ((SwitchCase) curr).getExpression();
 				if (expression instanceof SimpleName) {
@@ -1295,15 +1461,15 @@ public class LocalCorrectionsSubProcessor {
 				}
 			}
 		}
-		return (String[]) enumConstNames.toArray(new String[enumConstNames.size()]);
+		return enumConstNames.toArray(new String[enumConstNames.size()]);
 
 	}
 
 	public static ASTRewriteCorrectionProposal createMissingEnumConstantCaseProposals(IInvocationContext context, SwitchStatement switchStatement, String[] enumConstNames) {
-		List statements= switchStatement.statements();
+		List<Statement> statements= switchStatement.statements();
 		int defaultIndex= statements.size();
 		for (int i= 0; i < statements.size(); i++) {
-			Object curr= statements.get(i);
+			Statement curr= statements.get(i);
 			if (curr instanceof SwitchCase && ((SwitchCase) curr).getExpression() == null) {
 				defaultIndex= i;
 				break;
@@ -1330,7 +1496,7 @@ public class LocalCorrectionsSubProcessor {
 		return new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), astRewrite, 10, image);
 	}
 
-	public static void addMissingHashCodeProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addMissingHashCodeProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		final ICompilationUnit cu= context.getCompilationUnit();
 		
 		CompilationUnit astRoot= context.getASTRoot();
@@ -1366,6 +1532,7 @@ public class LocalCorrectionsSubProcessor {
 			String label= CorrectionMessages.LocalCorrectionsSubProcessor_generate_hashCode_equals_description;
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
 			ChangeCorrectionProposal proposal= new ChangeCorrectionProposal(label, null, 3, image) {
+				@Override
 				public void apply(IDocument document) {
 					IEditorInput input= new FileEditorInput((IFile) cu.getResource());
 					IWorkbenchPage p= JavaPlugin.getActivePage();
@@ -1381,6 +1548,7 @@ public class LocalCorrectionsSubProcessor {
 					action.run(new StructuredSelection(type));
 				}
 	
+				@Override
 				public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 					return CorrectionMessages.LocalCorrectionsSubProcessor_generate_hashCode_equals_additional_info;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
index b950a08..d470a9d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.FieldAccess;
 import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
@@ -52,6 +53,7 @@ import org.eclipse.jdt.core.dom.Javadoc;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
@@ -62,7 +64,6 @@ import org.eclipse.jdt.core.dom.SuperMethodInvocation;
 import org.eclipse.jdt.core.dom.TagElement;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
-import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.formatter.IndentManipulation;
 
@@ -70,12 +71,12 @@ import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFix.CompilationUnitRewriteOperation;
 import org.eclipse.jdt.internal.corext.fix.IProposableFix;
 import org.eclipse.jdt.internal.corext.fix.Java50Fix;
 import org.eclipse.jdt.internal.corext.fix.LinkedProposalModel;
 import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup;
 import org.eclipse.jdt.internal.corext.fix.UnimplementedCodeFix;
-import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFix.CompilationUnitRewriteOperation;
 import org.eclipse.jdt.internal.corext.fix.UnimplementedCodeFix.MakeTypeAbstractOperation;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.JdtFlags;
@@ -105,7 +106,7 @@ public class ModifierCorrectionSubProcessor {
 	public static final int TO_NON_STATIC= 4;
 	public static final int TO_NON_FINAL= 5;
 
-	public static void addNonAccessibleReferenceProposal(IInvocationContext context, IProblemLocation problem, Collection proposals, int kind, int relevance) throws CoreException {
+	public static void addNonAccessibleReferenceProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals, int kind, int relevance) throws CoreException {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -193,8 +194,16 @@ public class ModifierCorrectionSubProcessor {
 					excludedModifiers= Modifier.STATIC;
 					break;
 				case TO_NON_PRIVATE:
-					label= Messages.format(CorrectionMessages.ModifierCorrectionSubProcessor_changemodifiertodefault_description, name);
-					excludedModifiers= Modifier.PRIVATE;
+					int visibility;
+					if (cu.getParent().getElementName().equals(typeBinding.getPackage().getName())) {
+						visibility= Modifier.NONE;
+						excludedModifiers= Modifier.PRIVATE;
+					} else {
+						visibility= Modifier.PUBLIC;
+						includedModifiers= Modifier.PUBLIC;
+						excludedModifiers= Modifier.PRIVATE | Modifier.PROTECTED | Modifier.PUBLIC;
+					}
+					label= Messages.format(CorrectionMessages.ModifierCorrectionSubProcessor_changevisibility_description, new String[] { name, getVisibilityString(visibility) });
 					break;
 				case TO_NON_FINAL:
 					label= Messages.format(CorrectionMessages.ModifierCorrectionSubProcessor_changemodifiertononfinal_description, name);
@@ -214,7 +223,7 @@ public class ModifierCorrectionSubProcessor {
 		}
 	}
 
-	public static void addChangeOverriddenModfierProposal(IInvocationContext context, IProblemLocation problem, Collection proposals, int kind) throws JavaModelException {
+	public static void addChangeOverriddenModifierProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals, int kind) throws JavaModelException {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -276,7 +285,7 @@ public class ModifierCorrectionSubProcessor {
 		}
 	}
 
-	public static void addNonFinalLocalProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addNonFinalLocalProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -295,7 +304,7 @@ public class ModifierCorrectionSubProcessor {
 
 
 
-	public static void addRemoveInvalidModfiersProposal(IInvocationContext context, IProblemLocation problem, Collection proposals, int relevance) {
+	public static void addRemoveInvalidModifiersProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals, int relevance) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -445,7 +454,7 @@ public class ModifierCorrectionSubProcessor {
 		return Modifier.PUBLIC;
 	}
 
-	public static void addAbstractMethodProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addAbstractMethodProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		CompilationUnit astRoot= context.getASTRoot();
@@ -522,7 +531,7 @@ public class ModifierCorrectionSubProcessor {
 
 	}
 
-	private static void addMakeTypeAbstractProposal(IInvocationContext context, TypeDeclaration parentTypeDecl, Collection proposals) {
+	private static void addMakeTypeAbstractProposal(IInvocationContext context, TypeDeclaration parentTypeDecl, Collection<ICommandAccess> proposals) {
 		MakeTypeAbstractOperation operation= new UnimplementedCodeFix.MakeTypeAbstractOperation(parentTypeDecl);
 	
 		String label= Messages.format(CorrectionMessages.ModifierCorrectionSubProcessor_addabstract_description, BasicElementLabels.getJavaElementName(parentTypeDecl.getName().getIdentifier()));
@@ -533,7 +542,7 @@ public class ModifierCorrectionSubProcessor {
 		proposals.add(proposal);
 	}
 
-	public static void addAbstractTypeProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addAbstractTypeProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit astRoot= context.getASTRoot();
 
 		ASTNode selectedNode= problem.getCoveringNode(astRoot);
@@ -558,7 +567,7 @@ public class ModifierCorrectionSubProcessor {
 		addMakeTypeAbstractProposal(context, parentTypeDecl, proposals);
 	}
 
-	public static void addNativeMethodProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addNativeMethodProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		CompilationUnit astRoot= context.getASTRoot();
@@ -616,7 +625,7 @@ public class ModifierCorrectionSubProcessor {
 
 	}
 
-	public static void addMethodRequiresBodyProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addMethodRequiresBodyProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 		AST ast= context.getASTRoot().getAST();
 
@@ -673,7 +682,7 @@ public class ModifierCorrectionSubProcessor {
 	}
 
 
-	public static void addNeedToEmulateProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addNeedToEmulateProposal(IInvocationContext context, IProblemLocation problem, Collection<ModifierChangeCorrectionProposal> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -690,11 +699,11 @@ public class ModifierCorrectionSubProcessor {
 		}
 	}
 
-	public static void addOverrideAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addOverrideAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IProposableFix fix= Java50Fix.createAddOverrideAnnotationFix(context.getASTRoot(), problem);
 		if (fix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.ADD_MISSING_ANNOTATIONS, CleanUpOptions.TRUE);
 			options.put(CleanUpConstants.ADD_MISSING_ANNOTATIONS_OVERRIDE, CleanUpOptions.TRUE);
 			options.put(CleanUpConstants.ADD_MISSING_ANNOTATIONS_OVERRIDE_FOR_INTERFACE_METHOD_IMPLEMENTATION, CleanUpOptions.TRUE);
@@ -703,11 +712,11 @@ public class ModifierCorrectionSubProcessor {
 		}
 	}
 
-	public static void addDeprecatedAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addDeprecatedAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IProposableFix fix= Java50Fix.createAddDeprectatedAnnotation(context.getASTRoot(), problem);
 		if (fix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.ADD_MISSING_ANNOTATIONS, CleanUpOptions.TRUE);
 			options.put(CleanUpConstants.ADD_MISSING_ANNOTATIONS_DEPRECATED, CleanUpOptions.TRUE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new Java50CleanUp(options), 15, image, context);
@@ -715,7 +724,7 @@ public class ModifierCorrectionSubProcessor {
 		}
 	}
 
-	public static void addOverridingDeprecatedMethodProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addOverridingDeprecatedMethodProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 
 		ICompilationUnit cu= context.getCompilationUnit();
 
@@ -749,7 +758,7 @@ public class ModifierCorrectionSubProcessor {
 		proposals.add(proposal);
 	}
 
-	public static void removeOverrideAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void removeOverrideAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -771,7 +780,15 @@ public class ModifierCorrectionSubProcessor {
 	}
 
 
-	public static void addSynchronizedMethodProposal(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addSynchronizedMethodProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
+		addAddMethodModifierProposal(context, problem, proposals, Modifier.SYNCHRONIZED, CorrectionMessages.ModifierCorrectionSubProcessor_addsynchronized_description);
+	}
+
+	public static void addStaticMethodProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
+		addAddMethodModifierProposal(context, problem, proposals, Modifier.STATIC, CorrectionMessages.ModifierCorrectionSubProcessor_addstatic_description);
+	}
+	
+	private static void addAddMethodModifierProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals, int modifier, String label) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -783,8 +800,7 @@ public class ModifierCorrectionSubProcessor {
 		if (binding instanceof IMethodBinding) {
 			binding= ((IMethodBinding) binding).getMethodDeclaration();
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-			String label= Messages.format(CorrectionMessages.ModifierCorrectionSubProcessor_addsynchronized_description, BasicElementLabels.getJavaElementName(binding.getName()));
-			proposals.add(new ModifierChangeCorrectionProposal(label, cu, binding, selectedNode, Modifier.SYNCHRONIZED, 0, 5, image));
+			proposals.add(new ModifierChangeCorrectionProposal(label, cu, binding, selectedNode, modifier, 0, 5, image));
 		}
 	}
 
@@ -799,10 +815,12 @@ public class ModifierCorrectionSubProcessor {
 			fModifier= modifier;
 		}
 
+		@Override
 		public String getAdditionalProposalInfo() {
 			return getDisplayString();
 		}
 
+		@Override
 		public String getDisplayString() {
 			if (fModifier == 0) {
 				return CorrectionMessages.ModifierCorrectionSubProcessor_default_visibility_label;
@@ -814,6 +832,7 @@ public class ModifierCorrectionSubProcessor {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.corext.fix.PositionGroup.Proposal#computeEdits(int, org.eclipse.jface.text.link.LinkedPosition, char, int, org.eclipse.jface.text.link.LinkedModeModel)
 		 */
+		@Override
 		public TextEdit computeEdits(int offset, LinkedPosition currentPosition, char trigger, int stateMask, LinkedModeModel model) throws CoreException {
 			try {
 				IDocument document= currentPosition.getDocument();
@@ -843,7 +862,7 @@ public class ModifierCorrectionSubProcessor {
 		}
 	}
 
-	public static void installLinkedVisibilityProposals(LinkedProposalModel linkedProposalModel, ASTRewrite rewrite, List modifiers, boolean inInterface) {
+	public static void installLinkedVisibilityProposals(LinkedProposalModel linkedProposalModel, ASTRewrite rewrite, List<IExtendedModifier> modifiers, boolean inInterface) {
 		ASTNode modifier= findVisibilityModifier(modifiers);
 		if (modifier != null) {
 			int selected= ((Modifier) modifier).getKeyword().toFlagValue();
@@ -862,9 +881,9 @@ public class ModifierCorrectionSubProcessor {
 		}
 	}
 
-	private static Modifier findVisibilityModifier(List modifiers) {
+	private static Modifier findVisibilityModifier(List<IExtendedModifier> modifiers) {
 		for (int i= 0; i < modifiers.size(); i++) {
-			Object curr= modifiers.get(i);
+			IExtendedModifier curr= modifiers.get(i);
 			if (curr instanceof Modifier) {
 				Modifier modifier= (Modifier) curr;
 				ModifierKeyword keyword= modifier.getKeyword();
@@ -876,9 +895,9 @@ public class ModifierCorrectionSubProcessor {
 		return null;
 	}
 
-	private static Annotation findAnnotation(String qualifiedTypeName, List modifiers) {
+	private static Annotation findAnnotation(String qualifiedTypeName, List<IExtendedModifier> modifiers) {
 		for (int i= 0; i < modifiers.size(); i++) {
-			Object curr= modifiers.get(i);
+			IExtendedModifier curr= modifiers.get(i);
 			if (curr instanceof Annotation) {
 				Annotation annot= (Annotation) curr;
 				ITypeBinding binding= annot.getTypeName().resolveTypeBinding();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ProblemLocation.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ProblemLocation.java
index 68a0207..bae84bd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ProblemLocation.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ProblemLocation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -125,6 +125,7 @@ public class ProblemLocation implements IProblemLocation {
 		return finder.getCoveredNode();
 	}
 
+	@Override
 	public String toString() {
 		StringBuffer buf= new StringBuffer();
 		buf.append("Id: ").append(getErrorCode(fId)).append('\n'); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java
index f83799a..81e511f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -260,9 +260,9 @@ public class QuickAssistLightBulbUpdater {
 			int currLine= document.getLineOfOffset(offset);
 
 			// this iterator is not protected, it may throw ConcurrentModificationExceptions
-			Iterator iter= model.getAnnotationIterator();
+			Iterator<Annotation> iter= model.getAnnotationIterator();
 			while (iter.hasNext()) {
-				Annotation annot= (Annotation) iter.next();
+				Annotation annot= iter.next();
 				if (JavaCorrectionProcessor.isQuickFixableType(annot)) {
 					// may throw an IndexOutOfBoundsException upon concurrent annotation model changes
 					Position pos= model.getPosition(annot);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
index ce08cbc..b9b68a1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.ConditionalExpression;
 import org.eclipse.jdt.core.dom.DoStatement;
+import org.eclipse.jdt.core.dom.EnhancedForStatement;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.eclipse.jdt.core.dom.ForStatement;
@@ -73,6 +74,7 @@ import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.IfStatement;
 import org.eclipse.jdt.core.dom.InfixExpression;
 import org.eclipse.jdt.core.dom.Initializer;
+import org.eclipse.jdt.core.dom.LabeledStatement;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Modifier;
@@ -85,7 +87,9 @@ import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.StringLiteral;
 import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
+import org.eclipse.jdt.core.dom.SwitchCase;
 import org.eclipse.jdt.core.dom.SwitchStatement;
+import org.eclipse.jdt.core.dom.SynchronizedStatement;
 import org.eclipse.jdt.core.dom.ThisExpression;
 import org.eclipse.jdt.core.dom.TryStatement;
 import org.eclipse.jdt.core.dom.Type;
@@ -122,6 +126,7 @@ import org.eclipse.jdt.internal.corext.refactoring.code.ExtractMethodRefactoring
 import org.eclipse.jdt.internal.corext.refactoring.code.ExtractTempRefactoring;
 import org.eclipse.jdt.internal.corext.refactoring.code.InlineTempRefactoring;
 import org.eclipse.jdt.internal.corext.refactoring.code.PromoteTempToFieldRefactoring;
+import org.eclipse.jdt.internal.corext.refactoring.util.TightSourceRangeComputer;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -141,6 +146,7 @@ import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.ASTRewriteCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.AssignToVariableAssistProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.CUCorrectionProposal;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.ChangeCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.FixCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.LinkedCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.LinkedNamesAssistProposal;
@@ -176,9 +182,9 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		ASTNode coveringNode= context.getCoveringNode();
 		if (coveringNode != null) {
 			return getCatchClauseToThrowsProposals(context, coveringNode, null)
-				|| getRenameLocalProposals(context, coveringNode, null, false, null)
-				|| getRenameRefactoringProposal(context, coveringNode, null, false, null)
-				|| getAssignToVariableProposals(context, coveringNode, null)
+				|| getRenameLocalProposals(context, coveringNode, null, null)
+				|| getRenameRefactoringProposal(context, coveringNode, null, null)
+				|| getAssignToVariableProposals(context, coveringNode, null, null)
 				|| getUnWrapProposals(context, coveringNode, null)
 				|| getAssignParamToFieldProposals(context, coveringNode, null)
 				|| getJoinVariableProposals(context, coveringNode, null)
@@ -190,8 +196,8 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 				|| getCreateInSuperClassProposals(context, coveringNode, null)
 				|| getInvertEqualsProposal(context, coveringNode, null)
 				|| getConvertForLoopProposal(context, coveringNode, null)
-				|| getExtractLocalProposal(context, null)
-				|| getExtractMethodProposal(context, coveringNode, null)
+				|| getExtractVariableProposal(context, false, null)
+				|| getExtractMethodProposal(context, coveringNode, false, null)
 				|| getInlineLocalProposal(context, coveringNode, null)
 				|| getConvertLocalToFieldProposal(context, coveringNode, null)
 				|| getConvertAnonymousToNestedProposal(context, coveringNode, null)
@@ -207,28 +213,29 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	public IJavaCompletionProposal[] getAssists(IInvocationContext context, IProblemLocation[] locations) throws CoreException {
 		ASTNode coveringNode= context.getCoveringNode();
 		if (coveringNode != null) {
-			ArrayList resultingCollections= new ArrayList();
+			ArrayList<ICommandAccess> resultingCollections= new ArrayList<ICommandAccess>();
 			boolean noErrorsAtLocation= noErrorsAtLocation(locations);
 
 			// quick assists that show up also if there is an error/warning
-			getRenameLocalProposals(context, coveringNode, locations, noErrorsAtLocation, resultingCollections);
-			getRenameRefactoringProposal(context, coveringNode, locations, noErrorsAtLocation, resultingCollections);
-			getAssignToVariableProposals(context, coveringNode, resultingCollections);
+			getRenameLocalProposals(context, coveringNode, locations, resultingCollections);
+			getRenameRefactoringProposal(context, coveringNode, locations, resultingCollections);
+			getAssignToVariableProposals(context, coveringNode, locations, resultingCollections);
 			getAssignParamToFieldProposals(context, coveringNode, resultingCollections);
 
 			if (noErrorsAtLocation) {
+				boolean problemsAtLocation= locations.length != 0;
 				getCatchClauseToThrowsProposals(context, coveringNode, resultingCollections);
 				getUnWrapProposals(context, coveringNode, resultingCollections);
-				getSplitVariableProposals(context, coveringNode, resultingCollections);
 				getJoinVariableProposals(context, coveringNode, resultingCollections);
+				getSplitVariableProposals(context, coveringNode, resultingCollections);
 				getAddFinallyProposals(context, coveringNode, resultingCollections);
 				getAddElseProposals(context, coveringNode, resultingCollections);
 				getAddBlockProposals(context, coveringNode, resultingCollections);
 				getInvertEqualsProposal(context, coveringNode, resultingCollections);
 				getArrayInitializerToArrayCreation(context, coveringNode, resultingCollections);
 				getCreateInSuperClassProposals(context, coveringNode, resultingCollections);
-				getExtractLocalProposal(context, resultingCollections);
-				getExtractMethodProposal(context, coveringNode, resultingCollections);
+				getExtractVariableProposal(context, problemsAtLocation, resultingCollections);
+				getExtractMethodProposal(context, coveringNode, problemsAtLocation, resultingCollections);
 				getInlineLocalProposal(context, coveringNode, resultingCollections);
 				getConvertLocalToFieldProposal(context, coveringNode, resultingCollections);
 				getConvertAnonymousToNestedProposal(context, coveringNode, resultingCollections);
@@ -239,7 +246,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 				getConvertStringConcatenationProposals(context, resultingCollections);
 				getMissingCaseStatementProposals(context, coveringNode, resultingCollections);
 			}
-			return (IJavaCompletionProposal[]) resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
+			return resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
 		}
 		return null;
 	}
@@ -261,9 +268,9 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static int getIndex(int offset, List statements) {
+	private static int getIndex(int offset, List<Statement> statements) {
 		for (int i= 0; i < statements.size(); i++) {
-			Statement s= (Statement) statements.get(i);
+			Statement s= statements.get(i);
 			if (offset < s.getStartPosition()) {
 				return i;
 			}
@@ -274,12 +281,12 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return statements.size();
 	}
 
-	private static boolean getExtractMethodProposal(IInvocationContext context, ASTNode coveringNode, Collection proposals) throws CoreException {
+	private static boolean getExtractMethodProposal(IInvocationContext context, ASTNode coveringNode, boolean problemsAtLocation, Collection<ICommandAccess> proposals) throws CoreException {
 		if (!(coveringNode instanceof Expression) && !(coveringNode instanceof Statement) && !(coveringNode instanceof Block)) {
 			return false;
 		}
 		if (coveringNode instanceof Block) {
-			List statements= ((Block) coveringNode).statements();
+			List<Statement> statements= ((Block) coveringNode).statements();
 			int startIndex= getIndex(context.getSelectionOffset(), statements);
 			if (startIndex == -1)
 				return false;
@@ -301,8 +308,8 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			extractMethodRefactoring.setLinkedProposalModel(linkedProposalModel);
 
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_MISC_PUBLIC);
-			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractMethodRefactoring, 4, image);
-			proposal.setCommandId(EXTRACT_CONSTANT_ID);
+			int relevance= problemsAtLocation ? 1 : 4;
+			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractMethodRefactoring, relevance, image);
 			proposal.setLinkedProposalModel(linkedProposalModel);
 			proposals.add(proposal);
 		}
@@ -311,11 +318,18 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 
 
 
-	private static boolean getExtractLocalProposal(IInvocationContext context, Collection proposals) throws CoreException {
+	private static boolean getExtractVariableProposal(IInvocationContext context, boolean problemsAtLocation, Collection<ICommandAccess> proposals) throws CoreException {
+		
 		ASTNode node= context.getCoveredNode();
 
 		if (!(node instanceof Expression)) {
-			return false;
+			if (context.getSelectionLength() != 0) {
+				return false;
+			}
+			node= context.getCoveringNode();
+			if (!(node instanceof Expression)) {
+				return false;
+			}
 		}
 		final Expression expression= (Expression) node;
 
@@ -327,6 +341,15 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			return true;
 		}
 
+		int relevanceDrop;
+		if (context.getSelectionLength() == 0) {
+			relevanceDrop= 6;
+		} else if (problemsAtLocation) {
+			relevanceDrop= 3;
+		} else {
+			relevanceDrop= 0;
+		}
+
 		final ICompilationUnit cu= context.getCompilationUnit();
 		ExtractTempRefactoring extractTempRefactoring= new ExtractTempRefactoring(context.getASTRoot(), expression.getStartPosition(), expression.getLength());
 		if (extractTempRefactoring.checkInitialConditions(new NullProgressMonitor()).isOK()) {
@@ -336,7 +359,8 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 
 			String label= CorrectionMessages.QuickAssistProcessor_extract_to_local_all_description;
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_LOCAL);
-			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractTempRefactoring, 6, image) {
+			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractTempRefactoring, 6 - relevanceDrop, image) {
+				@Override
 				protected void init(Refactoring refactoring) throws CoreException {
 					ExtractTempRefactoring etr= (ExtractTempRefactoring) refactoring;
 					etr.setTempName(etr.guessTempName()); // expensive
@@ -356,7 +380,8 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 
 			String label= CorrectionMessages.QuickAssistProcessor_extract_to_local_description;
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_LOCAL);
-			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractTempRefactoringSelectedOnly, 5, image) {
+			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractTempRefactoringSelectedOnly, 5 - relevanceDrop, image) {
+				@Override
 				protected void init(Refactoring refactoring) throws CoreException {
 					ExtractTempRefactoring etr= (ExtractTempRefactoring) refactoring;
 					etr.setTempName(etr.guessTempName()); // expensive
@@ -375,7 +400,8 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 
 			String label= CorrectionMessages.QuickAssistProcessor_extract_to_constant_description;
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_LOCAL);
-			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractConstRefactoring, 4, image) {
+			RefactoringCorrectionProposal proposal= new RefactoringCorrectionProposal(label, cu, extractConstRefactoring, 4 - relevanceDrop, image) {
+				@Override
 				protected void init(Refactoring refactoring) throws CoreException {
 					ExtractConstantRefactoring etr= (ExtractConstantRefactoring) refactoring;
 					etr.setConstantName(etr.guessConstantName()); // expensive
@@ -389,7 +415,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	}
 
 
-	private static boolean getConvertAnonymousToNestedProposal(IInvocationContext context, final ASTNode node, Collection proposals) throws CoreException {
+	private static boolean getConvertAnonymousToNestedProposal(IInvocationContext context, final ASTNode node, Collection<ICommandAccess> proposals) throws CoreException {
 		if (!(node instanceof Name))
 			return false;
 
@@ -439,7 +465,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return false;
 	}
 
-	private static boolean getJoinVariableProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getJoinVariableProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		ASTNode parent= node.getParent();
 
 		VariableDeclarationFragment fragment= null;
@@ -464,7 +490,8 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		}
 
 		IVariableBinding binding= fragment.resolveBinding();
-		if (fragment.getInitializer() != null || binding == null || binding.isField()) {
+		Expression initializer= fragment.getInitializer();
+		if ((initializer != null && initializer.getNodeType() != ASTNode.NULL_LITERAL) || binding == null || binding.isField()) {
 			return false;
 		}
 
@@ -499,6 +526,9 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 
 		AST ast= statement.getAST();
 		ASTRewrite rewrite= ASTRewrite.create(ast);
+		TightSourceRangeComputer sourceRangeComputer= new TightSourceRangeComputer();
+		sourceRangeComputer.addTightSourceNode(assignParent);
+		rewrite.setTargetSourceRangeComputer(sourceRangeComputer);
 
 		String label= CorrectionMessages.QuickAssistProcessor_joindeclaration_description;
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_LOCAL);
@@ -528,7 +558,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 
 	}
 
-	private static boolean getSplitVariableProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getSplitVariableProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		VariableDeclarationFragment fragment;
 		if (node instanceof VariableDeclarationFragment) {
 			fragment= (VariableDeclarationFragment) node;
@@ -559,7 +589,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			return false;
 		}
 
-		List list= (List) statementParent.getStructuralProperty(property);
+		List<? extends ASTNode> list= (List<? extends ASTNode>) statementParent.getStructuralProperty(property);
 
 		if (resultingCollections == null) {
 			return true;
@@ -571,7 +601,18 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		String label= CorrectionMessages.QuickAssistProcessor_splitdeclaration_description;
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_LOCAL);
 		ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, 1, image);
-		proposal.setCommandId(SPLIT_JOIN_VARIABLE_DECLARATION_ID);
+		boolean commandConflict= false;
+		for (Iterator<ICommandAccess> iterator= resultingCollections.iterator(); iterator.hasNext();) {
+			Object completionProposal= iterator.next();
+			if (completionProposal instanceof ChangeCorrectionProposal) {
+				if (SPLIT_JOIN_VARIABLE_DECLARATION_ID.equals(((ChangeCorrectionProposal)completionProposal).getCommandId())) {
+					commandConflict= true;
+				}
+			}
+		}
+		if (!commandConflict) {
+			proposal.setCommandId(SPLIT_JOIN_VARIABLE_DECLARATION_ID);
+		}
 
 		Statement newStatement;
 		int insertIndex= list.indexOf(statement);
@@ -618,7 +659,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getConvertStringConcatenationProposals(IInvocationContext context, Collection resultingCollections) {
+	private static boolean getConvertStringConcatenationProposals(IInvocationContext context, Collection<ICommandAccess> resultingCollections) {
 		ASTNode node= context.getCoveringNode();
 		BodyDeclaration parentDecl= ASTResolving.findParentBodyDeclaration(node);
 		if (!(parentDecl instanceof MethodDeclaration || parentDecl instanceof Initializer))
@@ -707,7 +748,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			// create buffer
 			VariableDeclarationFragment frag= ast.newVariableDeclarationFragment();
 			// check if name is already in use and provide alternative
-			List fExcludedVariableNames= Arrays.asList(ASTResolving.getUsedVariableNames(oldInfixExpression));
+			List<String> fExcludedVariableNames= Arrays.asList(ASTResolving.getUsedVariableNames(oldInfixExpression));
 
 			SimpleType bufferType= ast.newSimpleType(ast.newName(bufferOrBuilderName));
 			ClassInstanceCreation newBufferExpression= ast.newClassInstanceCreation();
@@ -745,12 +786,12 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			}
 		}
 
-		List operands= new ArrayList();
+		List<Expression> operands= new ArrayList<Expression>();
 		collectInfixPlusOperands(oldInfixExpression, operands);
 		
 		Statement lastAppend= insertAfter;
-		for (Iterator iter= operands.iterator(); iter.hasNext();) {
-			Expression operand= (Expression) iter.next();
+		for (Iterator<Expression> iter= operands.iterator(); iter.hasNext();) {
+			Expression operand= iter.next();
 
 			MethodInvocation appendIncovationExpression= ast.newMethodInvocation();
 			appendIncovationExpression.setName(ast.newSimpleName("append")); //$NON-NLS-1$
@@ -793,15 +834,15 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return proposal;
 	}
 
-	private static void collectInfixPlusOperands(Expression expression, List collector) {
+	private static void collectInfixPlusOperands(Expression expression, List<Expression> collector) {
 		if (expression instanceof InfixExpression && ((InfixExpression)expression).getOperator() == InfixExpression.Operator.PLUS) {
 			InfixExpression infixExpression= (InfixExpression)expression;
 			
 			collectInfixPlusOperands(infixExpression.getLeftOperand(), collector);
 			collectInfixPlusOperands(infixExpression.getRightOperand(), collector);
-			List extendedOperands= infixExpression.extendedOperands();
-			for (Iterator iter= extendedOperands.iterator(); iter.hasNext();) {
-				collectInfixPlusOperands((Expression)iter.next(), collector);
+			List<Expression> extendedOperands= infixExpression.extendedOperands();
+			for (Iterator<Expression> iter= extendedOperands.iterator(); iter.hasNext();) {
+				collectInfixPlusOperands(iter.next(), collector);
 			}
 			
 		} else {
@@ -861,14 +902,14 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		ContextSensitiveImportRewriteContext importContext= new ContextSensitiveImportRewriteContext(root, oldInfixExpression.getStartPosition(), importRewrite);
 
 		// collect operands
-		List operands= new ArrayList();
+		List<Expression> operands= new ArrayList<Expression>();
 		collectInfixPlusOperands(oldInfixExpression, operands);
 
-		List formatArguments= new ArrayList();
+		List<Expression> formatArguments= new ArrayList<Expression>();
 		String formatString= ""; //$NON-NLS-1$
 		int i= 0;
-		for (Iterator iterator= operands.iterator(); iterator.hasNext();) {
-			Expression operand= (Expression) iterator.next();
+		for (Iterator<Expression> iterator= operands.iterator(); iterator.hasNext();) {
+			Expression operand= iterator.next();
 
 			if (operand instanceof StringLiteral) {
 				String value= ((StringLiteral) operand).getEscapedValue();
@@ -878,15 +919,15 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			} else {
 				formatString+= "{" + i + "}"; //$NON-NLS-1$ //$NON-NLS-2$
 
-				ASTNode argument;
+				Expression argument;
 				if (is50OrHigher) {
-					argument= rewrite.createCopyTarget(operand);
+					argument= (Expression) rewrite.createCopyTarget(operand);
 				} else {
 					ITypeBinding binding= operand.resolveTypeBinding();
 					if (binding == null)
 						return null;
 
-					argument= rewrite.createCopyTarget(operand);
+					argument= (Expression) rewrite.createCopyTarget(operand);
 
 					if (binding.isPrimitive()) {
 						ITypeBinding boxedBinding= Bindings.getBoxedTypeBinding(binding, ast);
@@ -922,14 +963,14 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		formatInvocation.setExpression(ast.newName(messageType));
 		formatInvocation.setName(ast.newSimpleName("format")); //$NON-NLS-1$
 
-		List arguments= formatInvocation.arguments();
+		List<Expression> arguments= formatInvocation.arguments();
 
 		StringLiteral formatStringArgument= ast.newStringLiteral();
 		formatStringArgument.setEscapedValue("\"" + formatString + "\""); //$NON-NLS-1$ //$NON-NLS-2$
 		arguments.add(formatStringArgument);
 
 		if (is50OrHigher) {
-			for (Iterator iterator= formatArguments.iterator(); iterator.hasNext();) {
+			for (Iterator<Expression> iterator= formatArguments.iterator(); iterator.hasNext();) {
 				arguments.add(iterator.next());
 			}
 		} else {
@@ -941,8 +982,8 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 
 			ArrayInitializer arrayInitializer= ast.newArrayInitializer();
 
-			List initializerExpressions= arrayInitializer.expressions();
-			for (Iterator iterator= formatArguments.iterator(); iterator.hasNext();) {
+			List<Expression> initializerExpressions= arrayInitializer.expressions();
+			for (Iterator<Expression> iterator= formatArguments.iterator(); iterator.hasNext();) {
 				initializerExpressions.add(iterator.next());
 			}
 			objectArrayCreation.setInitializer(arrayInitializer);
@@ -955,7 +996,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return proposal;
 	}
 
-	private static boolean getAssignToVariableProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	public static boolean getAssignToVariableProposals(IInvocationContext context, ASTNode node, IProblemLocation[] locations, Collection<ICommandAccess> resultingCollections) {
 		Statement statement= ASTResolving.findParentStatement(node);
 		if (!(statement instanceof ExpressionStatement)) {
 			return false;
@@ -976,23 +1017,40 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			return true;
 		}
 
+		// don't add if already added as quick fix
+		if (containsMatchingProblem(locations, IProblem.UnusedObjectAllocation))
+			return false;
+		
 		ICompilationUnit cu= context.getCompilationUnit();
 
-		AssignToVariableAssistProposal localProposal= new AssignToVariableAssistProposal(cu, AssignToVariableAssistProposal.LOCAL, expressionStatement, typeBinding, 2);
+		AssignToVariableAssistProposal localProposal= new AssignToVariableAssistProposal(cu, AssignToVariableAssistProposal.LOCAL, expressionStatement, typeBinding, 3);
 		localProposal.setCommandId(ASSIGN_TO_LOCAL_ID);
 		resultingCollections.add(localProposal);
 
 		ASTNode type= ASTResolving.findParentType(expression);
 		if (type != null) {
-			AssignToVariableAssistProposal fieldProposal= new AssignToVariableAssistProposal(cu, AssignToVariableAssistProposal.FIELD, expressionStatement, typeBinding, 1);
+			AssignToVariableAssistProposal fieldProposal= new AssignToVariableAssistProposal(cu, AssignToVariableAssistProposal.FIELD, expressionStatement, typeBinding, 2);
 			fieldProposal.setCommandId(ASSIGN_TO_FIELD_ID);
 			resultingCollections.add(fieldProposal);
 		}
-		return false;
+		return true;
 
 	}
 
-	private static boolean getAssignParamToFieldProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean containsMatchingProblem(IProblemLocation[] locations, int problemId) {
+		if (locations != null) {
+			for (int i= 0; i < locations.length; i++) {
+				IProblemLocation location= locations[i];
+				if (IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER.equals(location.getMarkerType())
+						&& location.getProblemId() == problemId) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	private static boolean getAssignParamToFieldProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		node= ASTNodes.getNormalizedNode(node);
 		ASTNode parent= node.getParent();
 		if (!(parent instanceof SingleVariableDeclaration) || !(parent.getParent() instanceof MethodDeclaration)) {
@@ -1040,7 +1098,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getAddFinallyProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getAddFinallyProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		TryStatement tryStatement= ASTResolving.findParentTryStatement(node);
 		if (tryStatement == null || tryStatement.getFinally() != null) {
 			return false;
@@ -1067,7 +1125,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getAddElseProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getAddElseProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		if (!(node instanceof IfStatement)) {
 			return false;
 		}
@@ -1093,7 +1151,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	public static boolean getCatchClauseToThrowsProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	public static boolean getCatchClauseToThrowsProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		CatchClause catchClause= (CatchClause) ASTResolving.findAncestor(node, ASTNode.CATCH_CLAUSE);
 		if (catchClause == null) {
 			return false;
@@ -1160,15 +1218,15 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			rewrite.remove(catchClause, null);
 		} else {
 			Block block= tryStatement.getBody();
-			List statements= block.statements();
+			List<Statement> statements= block.statements();
 			int nStatements= statements.size();
 			if (nStatements == 1) {
-				ASTNode first= (ASTNode) statements.get(0);
+				ASTNode first= statements.get(0);
 				rewrite.replace(tryStatement, rewrite.createCopyTarget(first), null);
 			} else if (nStatements > 1) {
 				ListRewrite listRewrite= rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
-				ASTNode first= (ASTNode) statements.get(0);
-				ASTNode last= (ASTNode) statements.get(statements.size() - 1);
+				ASTNode first= statements.get(0);
+				ASTNode last= statements.get(statements.size() - 1);
 				ASTNode newStatement= listRewrite.createCopyTarget(first, last);
 				if (ASTNodes.isControlStatementBody(tryStatement.getLocationInParent())) {
 					Block newBlock= rewrite.getAST().newBlock();
@@ -1182,9 +1240,9 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		}
 	}
 
-	private static boolean isNotYetThrown(ITypeBinding binding, List thrownExcpetions) {
-		for (int i= 0; i < thrownExcpetions.size(); i++) {
-			Name name= (Name) thrownExcpetions.get(i);
+	private static boolean isNotYetThrown(ITypeBinding binding, List<Name> thrownExceptions) {
+		for (int i= 0; i < thrownExceptions.size(); i++) {
+			Name name= thrownExceptions.get(i);
 			ITypeBinding elem= (ITypeBinding) name.resolveBinding();
 			if (elem != null) {
 				if (Bindings.isSuperType(elem, binding)) { // existing exception is base class of new
@@ -1196,7 +1254,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	}
 
 
-	private static boolean getRenameLocalProposals(IInvocationContext context, ASTNode node, IProblemLocation[] locations, boolean noErrorsAtLocation, Collection resultingCollections) {
+	private static boolean getRenameLocalProposals(IInvocationContext context, ASTNode node, IProblemLocation[] locations, Collection<ICommandAccess> resultingCollections) {
 		if (!(node instanceof SimpleName)) {
 			return false;
 		}
@@ -1215,7 +1273,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		}
 
 		LinkedNamesAssistProposal proposal= new LinkedNamesAssistProposal(context, name);
-		if (!noErrorsAtLocation) {
+		if (locations.length != 0) {
 			proposal.setRelevance(1);
 		}
 
@@ -1223,7 +1281,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getRenameRefactoringProposal(IInvocationContext context, ASTNode node, IProblemLocation[] locations, boolean noErrorsAtLocation, Collection resultingCollections)
+	private static boolean getRenameRefactoringProposal(IInvocationContext context, ASTNode node, IProblemLocation[] locations, Collection<ICommandAccess> resultingCollections)
 			throws CoreException {
 		if (!(context instanceof AssistContext)) {
 			return false;
@@ -1251,7 +1309,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		}
 		
 		RenameRefactoringProposal proposal= new RenameRefactoringProposal((JavaEditor) editor);
-		if (!noErrorsAtLocation) {
+		if (locations.length != 0) {
 			proposal.setRelevance(1);
 		} else if (containsQuickFixableRenameLocal(locations)) {
 			proposal.setRelevance(7);
@@ -1265,14 +1323,17 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	private static boolean containsQuickFixableRenameLocal(IProblemLocation[] locations) {
 		if (locations != null) {
 			for (int i= 0; i < locations.length; i++) {
-				switch (locations[i].getProblemId()) {
-					case IProblem.LocalVariableHidingLocalVariable:
-					case IProblem.LocalVariableHidingField:
-					case IProblem.FieldHidingLocalVariable:
-					case IProblem.FieldHidingField:
-					case IProblem.ArgumentHidingLocalVariable:
-					case IProblem.ArgumentHidingField:
-						return true;
+				IProblemLocation location= locations[i];
+				if (IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER.equals(location.getMarkerType())) {
+					switch (location.getProblemId()) {
+						case IProblem.LocalVariableHidingLocalVariable:
+						case IProblem.LocalVariableHidingField:
+						case IProblem.FieldHidingLocalVariable:
+						case IProblem.FieldHidingField:
+						case IProblem.ArgumentHidingLocalVariable:
+						case IProblem.ArgumentHidingField:
+							return true;
+					}
 				}
 			}
 		}
@@ -1282,17 +1343,17 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	public static ASTNode getCopyOfInner(ASTRewrite rewrite, ASTNode statement, boolean toControlStatementBody) {
 		if (statement.getNodeType() == ASTNode.BLOCK) {
 			Block block= (Block) statement;
-			List innerStatements= block.statements();
+			List<Statement> innerStatements= block.statements();
 			int nStatements= innerStatements.size();
 			if (nStatements == 1) {
-				return rewrite.createCopyTarget(((ASTNode) innerStatements.get(0)));
+				return rewrite.createCopyTarget(innerStatements.get(0));
 			} else if (nStatements > 1) {
 				if (toControlStatementBody) {
 					return rewrite.createCopyTarget(block);
 				}
 				ListRewrite listRewrite= rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
-				ASTNode first= (ASTNode) innerStatements.get(0);
-				ASTNode last= (ASTNode) innerStatements.get(nStatements - 1);
+				ASTNode first= innerStatements.get(0);
+				ASTNode last= innerStatements.get(nStatements - 1);
 				return listRewrite.createCopyTarget(first, last);
 			}
 			return null;
@@ -1302,7 +1363,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	}
 
 
-	private static boolean getUnWrapProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getUnWrapProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		ASTNode outer= node;
 
 		Block block= null;
@@ -1326,6 +1387,18 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		} else if (outer instanceof ForStatement) {
 			body=((ForStatement) outer).getBody();
 			label= CorrectionMessages.QuickAssistProcessor_unwrap_forstatement;
+		} else if (outer instanceof EnhancedForStatement) {
+			body=((EnhancedForStatement) outer).getBody();
+			label= CorrectionMessages.QuickAssistProcessor_unwrap_forstatement;
+		} else if (outer instanceof SynchronizedStatement) {
+			body=((SynchronizedStatement) outer).getBody();
+			label= CorrectionMessages.QuickAssistProcessor_unwrap_synchronizedstatement;
+		} else if (outer instanceof SimpleName && outer.getParent() instanceof LabeledStatement) {
+			body=((LabeledStatement) outer.getParent()).getBody();
+			label= CorrectionMessages.QuickAssistProcessor_unwrap_labeledstatement;
+		} else if (outer instanceof LabeledStatement) {
+			body=((LabeledStatement) outer).getBody();
+			label= CorrectionMessages.QuickAssistProcessor_unwrap_labeledstatement;
 		} else if (outer instanceof DoStatement) {
 			body=((DoStatement) outer).getBody();
 			label= CorrectionMessages.QuickAssistProcessor_unwrap_dostatement;
@@ -1336,9 +1409,9 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			}
 			label= CorrectionMessages.QuickAssistProcessor_unwrap_trystatement;
 		} else if (outer instanceof AnonymousClassDeclaration) {
-			List decls= ((AnonymousClassDeclaration) outer).bodyDeclarations();
+			List<BodyDeclaration> decls= ((AnonymousClassDeclaration) outer).bodyDeclarations();
 			for (int i= 0; i < decls.size(); i++) {
-				ASTNode elem= (ASTNode) decls.get(i);
+				BodyDeclaration elem= decls.get(i);
 				if (elem instanceof MethodDeclaration) {
 					Block curr= ((MethodDeclaration) elem).getBody();
 					if (curr != null && !curr.statements().isEmpty()) {
@@ -1410,13 +1483,13 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		}
 	}
 
-	private static boolean getRemoveBlockProposals(IInvocationContext context, ASTNode coveringNode, Collection resultingCollections) {
+	private static boolean getRemoveBlockProposals(IInvocationContext context, ASTNode coveringNode, Collection<ICommandAccess> resultingCollections) {
 		IProposableFix[] fixes= ControlStatementsFix.createRemoveBlockFix(context.getASTRoot(), coveringNode);
 		if (fixes != null) {
 			if (resultingCollections == null) {
 				return true;
 			}
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.CONTROL_STATEMENTS_USE_BLOCKS, CleanUpOptions.TRUE);
 			options.put(CleanUpConstants.CONTROL_STATMENTS_USE_BLOCKS_NEVER, CleanUpOptions.TRUE);
 			ICleanUp cleanUp= new ControlStatementsCleanUp(options);
@@ -1431,7 +1504,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return false;
 	}
 
-	private static boolean getAddBlockProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getAddBlockProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		if (!(node instanceof Statement)) {
 			return false;
 		}
@@ -1603,21 +1676,23 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getInvertEqualsProposal(IInvocationContext context, ASTNode node, Collection resultingCollections) {
-		ASTNode parent= node.getParent();
-		if (!(parent instanceof MethodInvocation)) {
-			return false;
+	private static boolean getInvertEqualsProposal(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
+		if (!(node instanceof MethodInvocation)) {
+			node= node.getParent();
+			if (!(node instanceof MethodInvocation)) {
+				return false;
+			}
 		}
-		MethodInvocation method= (MethodInvocation) parent;
+		MethodInvocation method= (MethodInvocation) node;
 		String identifier= method.getName().getIdentifier();
 		if (!"equals".equals(identifier) && !"equalsIgnoreCase".equals(identifier)) { //$NON-NLS-1$ //$NON-NLS-2$
 			return false;
 		}
-		List arguments= method.arguments();
+		List<Expression> arguments= method.arguments();
 		if (arguments.size() != 1) { //overloaded equals w/ more than 1 argument
 			return false;
 		}
-		Expression right= (Expression) arguments.get(0);
+		Expression right= arguments.get(0);
 		ITypeBinding binding = right.resolveTypeBinding();
 		if (binding != null && !(binding.isClass() || binding.isInterface())) { //overloaded equals w/ non-class/interface argument or null
 			return false;
@@ -1668,7 +1743,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getArrayInitializerToArrayCreation(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getArrayInitializerToArrayCreation(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		if (!(node instanceof ArrayInitializer)) {
 			return false;
 		}
@@ -1710,7 +1785,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	}
 
 
-	public static boolean getCreateInSuperClassProposals(IInvocationContext context, ASTNode node, Collection resultingCollections) throws CoreException {
+	public static boolean getCreateInSuperClassProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) throws CoreException {
 		if (!(node instanceof SimpleName) || !(node.getParent() instanceof MethodDeclaration)) {
 			return false;
 		}
@@ -1735,10 +1810,10 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			}
 			return false;
 		}
-		List params= decl.parameters();
+		List<SingleVariableDeclaration> params= decl.parameters();
 		String[] paramNames= new String[paramTypes.length];
 		for (int i = 0; i < params.size(); i++) {
-			SingleVariableDeclaration param= (SingleVariableDeclaration) params.get(i);
+			SingleVariableDeclaration param= params.get(i);
 			paramNames[i]= param.getName().getIdentifier();
 		}
 
@@ -1759,7 +1834,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getConvertForLoopProposal(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getConvertForLoopProposal(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		ForStatement forStatement= getEnclosingForStatementHeader(node);
 		if (forStatement == null)
 			return false;
@@ -1772,7 +1847,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			return false;
 
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-		Map options= new HashMap();
+		Map<String, String> options= new HashMap<String, String>();
 		options.put(CleanUpConstants.CONTROL_STATMENTS_CONVERT_FOR_LOOP_TO_ENHANCED, CleanUpOptions.TRUE);
 		ICleanUp cleanUp= new ConvertLoopCleanUp(options);
 		FixCorrectionProposal proposal= new FixCorrectionProposal(fix, cleanUp, 1, image, context);
@@ -1782,7 +1857,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getConvertIterableLoopProposal(IInvocationContext context, ASTNode node, Collection resultingCollections) {
+	private static boolean getConvertIterableLoopProposal(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		ForStatement forStatement= getEnclosingForStatementHeader(node);
 		if (forStatement == null)
 			return false;
@@ -1795,7 +1870,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			return false;
 
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-		Map options= new HashMap();
+		Map<String, String> options= new HashMap<String, String>();
 		options.put(CleanUpConstants.CONTROL_STATMENTS_CONVERT_FOR_LOOP_TO_ENHANCED, CleanUpOptions.TRUE);
 		ICleanUp cleanUp= new ConvertLoopCleanUp(options);
 		FixCorrectionProposal proposal= new FixCorrectionProposal(fix, cleanUp, 1, image, context);
@@ -1825,7 +1900,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return null;
 	}
 
-	private static boolean getMakeVariableDeclarationFinalProposals(IInvocationContext context, Collection resultingCollections) {
+	private static boolean getMakeVariableDeclarationFinalProposals(IInvocationContext context, Collection<ICommandAccess> resultingCollections) {
 		SelectionAnalyzer analyzer= new SelectionAnalyzer(Selection.createFromStartLength(context.getSelectionOffset(), context.getSelectionLength()), false);
 		context.getASTRoot().accept(analyzer);
 		ASTNode[] selectedNodes= analyzer.getSelectedNodes();
@@ -1840,7 +1915,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 			return true;
 
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-		Map options= new Hashtable();
+		Map<String, String> options= new Hashtable<String, String>();
 		options.put(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL, CleanUpOptions.TRUE);
 		options.put(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL_LOCAL_VARIABLES, CleanUpOptions.TRUE);
 		options.put(CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL_PARAMETERS, CleanUpOptions.TRUE);
@@ -1851,7 +1926,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getInlineLocalProposal(IInvocationContext context, final ASTNode node, Collection proposals) throws CoreException {
+	private static boolean getInlineLocalProposal(IInvocationContext context, final ASTNode node, Collection<ICommandAccess> proposals) throws CoreException {
 		if (!(node instanceof SimpleName))
 			return false;
 
@@ -1882,14 +1957,14 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		return true;
 	}
 
-	private static boolean getMissingCaseStatementProposals(IInvocationContext context, ASTNode node, Collection proposals) {
+	private static boolean getMissingCaseStatementProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> proposals) {
+		if (node instanceof SwitchCase) {
+			node= node.getParent();
+		}
 		if (!(node instanceof SwitchStatement))
 			return false;
 
-		SwitchStatement switchStatement= (SwitchStatement) node;
-		if (context.getSelectionOffset() + context.getSelectionLength() >= switchStatement.getExpression().getStartPosition())
-			return false;
-
+		SwitchStatement switchStatement= (SwitchStatement)node;
 		ITypeBinding expressionBinding= switchStatement.getExpression().resolveTypeBinding();
 		if (expressionBinding == null || !expressionBinding.isEnum())
 			return false;
@@ -1906,7 +1981,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 	}
 
 
-	private static boolean getConvertLocalToFieldProposal(IInvocationContext context, final ASTNode node, Collection proposals) throws CoreException {
+	private static boolean getConvertLocalToFieldProposal(IInvocationContext context, final ASTNode node, Collection<ICommandAccess> proposals) throws CoreException {
 		if (!(node instanceof SimpleName))
 			return false;
 
@@ -1956,8 +2031,10 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		 * @throws CoreException if something goes wrong during init
 		 */
 		protected void init(Refactoring refactoring) throws CoreException {
+			// empty default implementation
 		}
 
+		@Override
 		protected TextChange createTextChange() throws CoreException {
 			init(fRefactoring);
 			fRefactoringStatus= fRefactoring.checkFinalConditions(new NullProgressMonitor());
@@ -1973,6 +2050,7 @@ public class QuickAssistProcessor implements IQuickAssistProcessor {
 		 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.CUCorrectionProposal#getAdditionalProposalInfo(org.eclipse.core.runtime.IProgressMonitor)
 		 * @since 3.6
 		 */
+		@Override
 		public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 			if (fRefactoringStatus != null && fRefactoringStatus.hasFatalError()) {
 				return fRefactoringStatus.getEntryWithHighestSeverity().getMessage();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java
index 8480a31..d73ffa0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -212,6 +212,8 @@ public class QuickFixProcessor implements IQuickFixProcessor {
 			case IProblem.MissingEnumConstantCase:
 			case IProblem.MissingSynchronizedModifierInInheritedMethod:
 			case IProblem.UnusedObjectAllocation:
+			case IProblem.MethodCanBeStatic:
+			case IProblem.MethodCanBePotentiallyStatic:
 				return true;
 			default:
 				return SuppressWarningsSubProcessor.hasSuppressWarningsProposal(cu.getJavaProject(), problemId);
@@ -241,8 +243,8 @@ public class QuickFixProcessor implements IQuickFixProcessor {
 			return null;
 		}
 
-		HashSet handledProblems= new HashSet(locations.length);
-		ArrayList resultingCollections= new ArrayList();
+		HashSet<Integer> handledProblems= new HashSet<Integer>(locations.length);
+		ArrayList<ICommandAccess> resultingCollections= new ArrayList<ICommandAccess>();
 		for (int i= 0; i < locations.length; i++) {
 			IProblemLocation curr= locations[i];
 			Integer id= new Integer(curr.getProblemId());
@@ -250,10 +252,10 @@ public class QuickFixProcessor implements IQuickFixProcessor {
 				process(context, curr, resultingCollections);
 			}
 		}
-		return (IJavaCompletionProposal[]) resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
+		return resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
 	}
 
-	private void process(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	private void process(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		int id= problem.getProblemId();
 		if (id == 0) { // no proposals for none-problem locations
 			return;
@@ -371,13 +373,13 @@ public class QuickFixProcessor implements IQuickFixProcessor {
 			case IProblem.InheritedMethodReducesVisibility:
 			case IProblem.MethodReducesVisibility:
 			case IProblem.OverridingNonVisibleMethod:
-				ModifierCorrectionSubProcessor.addChangeOverriddenModfierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE);
+				ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE);
 				break;
 			case IProblem.FinalMethodCannotBeOverridden:
-				ModifierCorrectionSubProcessor.addChangeOverriddenModfierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL);
+				ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL);
 				break;
 			case IProblem.CannotOverrideAStaticMethodWithAnInstanceMethod:
-				ModifierCorrectionSubProcessor.addChangeOverriddenModfierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_STATIC);
+				ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_STATIC);
 				break;
 			case IProblem.CannotHideAnInstanceMethodWithAStaticMethod:
 			case IProblem.IllegalModifierForInterfaceMethod:
@@ -400,7 +402,7 @@ public class QuickFixProcessor implements IQuickFixProcessor {
 			case IProblem.IllegalModifierForMemberEnum:
 			case IProblem.IllegalVisibilityModifierForInterfaceMemberType:
 			case IProblem.UnexpectedStaticModifierForMethod:
-				ModifierCorrectionSubProcessor.addRemoveInvalidModfiersProposal(context, problem, proposals, 5);
+				ModifierCorrectionSubProcessor.addRemoveInvalidModifiersProposal(context, problem, proposals, 5);
 				break;
 			case IProblem.NotVisibleField:
 				GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, problem, proposals, 9);
@@ -601,6 +603,10 @@ public class QuickFixProcessor implements IQuickFixProcessor {
 			case IProblem.UnusedObjectAllocation:
 				LocalCorrectionsSubProcessor.getUnusedObjectAllocationProposals(context, problem, proposals);
 				break;
+			case IProblem.MethodCanBeStatic:
+			case IProblem.MethodCanBePotentiallyStatic:
+				ModifierCorrectionSubProcessor.addStaticMethodProposal(context, problem, proposals);
+				break;
 			default:
 		}
 		if (JavaModelUtil.is50OrHigher(context.getCompilationUnit().getJavaProject())) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickTemplateProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickTemplateProcessor.java
index bfa3b8d..dfe3a9e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickTemplateProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickTemplateProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -152,20 +152,18 @@ public class QuickTemplateProcessor implements IQuickAssistProcessor {
 				}
 			}
 
-			ArrayList resultingCollections= new ArrayList();
+			ArrayList<IJavaCompletionProposal> resultingCollections= new ArrayList<IJavaCompletionProposal>();
 			collectSurroundTemplates(document, cu, offset, length, resultingCollections, contextId);
 			sort(resultingCollections);
-			return (IJavaCompletionProposal[]) resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
+			return resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
 		} catch (BadLocationException e) {
 			throw new CoreException(JavaUIStatus.createError(IStatus.ERROR, "", e)); //$NON-NLS-1$
 		}
 	}
 
-	private void sort(ArrayList proposals) {
-		Collections.sort(proposals, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				IJavaCompletionProposal p1= (IJavaCompletionProposal)o1;
-				IJavaCompletionProposal p2= (IJavaCompletionProposal)o2;
+	private void sort(ArrayList<IJavaCompletionProposal> proposals) {
+		Collections.sort(proposals, new Comparator<IJavaCompletionProposal>() {
+			public int compare(IJavaCompletionProposal p1, IJavaCompletionProposal p2) {
 				return Collator.getInstance().compare(p1.getDisplayString(), p2.getDisplayString());
 			}
 		});
@@ -180,7 +178,7 @@ public class QuickTemplateProcessor implements IQuickAssistProcessor {
 		return document;
 	}
 
-	private void collectSurroundTemplates(IDocument document, ICompilationUnit cu, int offset, int length, Collection result, String contextId) throws BadLocationException, CoreException {
+	private void collectSurroundTemplates(IDocument document, ICompilationUnit cu, int offset, int length, Collection<IJavaCompletionProposal> result, String contextId) throws BadLocationException, CoreException {
 		CompilationUnitContextType contextType= (CompilationUnitContextType) JavaPlugin.getDefault().getTemplateContextRegistry().getContextType(contextId);
 		CompilationUnitContext context= contextType.createContext(document, offset, length, cu);
 		context.setVariable("selection", document.get(offset, length)); //$NON-NLS-1$
@@ -210,6 +208,7 @@ public class QuickTemplateProcessor implements IQuickAssistProcessor {
 						/**
 						 * {@inheritDoc}
 						 */
+						@Override
 						public boolean validate(IDocument doc, int off, DocumentEvent event) {
 							return false;
 						}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java
index 211f772..727c9c0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -116,7 +116,7 @@ import org.eclipse.jdt.internal.ui.wizards.buildpaths.ClasspathFixSelectionDialo
 
 public class ReorgCorrectionsSubProcessor {
 
-	public static void getWrongTypeNameProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getWrongTypeNameProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 		boolean isLinked= cu.getResource().isLinked();
 
@@ -140,9 +140,9 @@ public class ReorgCorrectionsSubProcessor {
 		boolean hasOtherPublicTypeBefore= false;
 
 		boolean found= false;
-		List types= root.types();
+		List<AbstractTypeDeclaration> types= root.types();
 		for (int i= 0; i < types.size(); i++) {
-			AbstractTypeDeclaration curr= (AbstractTypeDeclaration) types.get(i);
+			AbstractTypeDeclaration curr= types.get(i);
 			if (parentType != curr) {
 				if (newTypeName.equals(curr.getName().getIdentifier())) {
 					return;
@@ -171,7 +171,7 @@ public class ReorgCorrectionsSubProcessor {
 		}
 	}
 
-	public static void getWrongPackageDeclNameProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void getWrongPackageDeclNameProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ICompilationUnit cu= context.getCompilationUnit();
 		boolean isLinked= cu.getResource().isLinked();
 
@@ -203,11 +203,11 @@ public class ReorgCorrectionsSubProcessor {
 		}
 	}
 
-	public static void removeImportStatementProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void removeImportStatementProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IProposableFix fix= UnusedCodeFix.createRemoveUnusedImportFix(context.getASTRoot(), problem);
 		if (fix != null) {
 			Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_DELETE_IMPORT);
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.REMOVE_UNUSED_CODE_IMPORTS, CleanUpOptions.TRUE);
 			FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new UnusedCodeCleanUp(options), 6, image, context);
 			proposals.add(proposal);
@@ -216,6 +216,7 @@ public class ReorgCorrectionsSubProcessor {
 		final ICompilationUnit cu= context.getCompilationUnit();
 		String name= CorrectionMessages.ReorgCorrectionsSubProcessor_organizeimports_description;
 		ChangeCorrectionProposal proposal= new ChangeCorrectionProposal(name, null, 5, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE)) {
+			@Override
 			public void apply(IDocument document) {
 				IEditorInput input= new FileEditorInput((IFile) cu.getResource());
 				IWorkbenchPage p= JavaPlugin.getActivePage();
@@ -247,6 +248,7 @@ public class ReorgCorrectionsSubProcessor {
 			fMissingType= missingType;
 		}
 
+		@Override
 		public void apply(IDocument document) {
 			IRunnableContext context= JavaPlugin.getActiveWorkbenchWindow();
 			if (context == null) {
@@ -271,23 +273,25 @@ public class ReorgCorrectionsSubProcessor {
 			}
 		}
 
+		@Override
 		protected void addEdits(IDocument document, TextEdit editRoot) throws CoreException {
 			if (fResultingEdit != null) {
 				editRoot.addChild(fResultingEdit);
 			}
 		}
 
+		@Override
 		public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 			return Messages.format(CorrectionMessages.ReorgCorrectionsSubProcessor_project_seup_fix_info, BasicElementLabels.getJavaElementName(fMissingType));
 		}
 	}
 
-	public static void addProjectSetupFixProposal(IInvocationContext context, IProblemLocation problem, String missingType, Collection proposals) {
+	public static void addProjectSetupFixProposal(IInvocationContext context, IProblemLocation problem, String missingType, Collection<ICommandAccess> proposals) {
 		proposals.add(new ClasspathFixCorrectionProposal(context.getCompilationUnit(), problem.getOffset(), problem.getLength(), missingType));
 	}
 
 
-	public static void importNotFoundProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void importNotFoundProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -323,8 +327,9 @@ public class ReorgCorrectionsSubProcessor {
 			fReferencedType= referencedType;
 			setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_ACCESSRULES_ATTRIB));
 		}
+		@Override
 		public void apply(IDocument document) {
-			Map data= null;
+			Map<Object, Object> data= null;
 			if (fReferencedType != null) {
 				IJavaElement elem= fReferencedType.getJavaElement();
 				if (elem != null) {
@@ -333,7 +338,7 @@ public class ReorgCorrectionsSubProcessor {
 						try {
 							IClasspathEntry entry= root.getRawClasspathEntry();
 							if (entry != null) {
-								data= new HashMap(1);
+								data= new HashMap<Object, Object>(1);
 								data.put(BuildPathsPropertyPage.DATA_REVEAL_ENTRY, entry);
 								if (entry.getEntryKind() != IClasspathEntry.CPE_CONTAINER) {
 									data.put(BuildPathsPropertyPage.DATA_REVEAL_ATTRIBUTE_KEY, CPListElement.ACCESSRULES);
@@ -351,6 +356,7 @@ public class ReorgCorrectionsSubProcessor {
 		 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension5#getAdditionalProposalInfo(org.eclipse.core.runtime.IProgressMonitor)
 		 * @since 3.5
 		 */
+		@Override
 		public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 			return Messages.format(CorrectionMessages.ReorgCorrectionsSubProcessor_configure_buildpath_description, BasicElementLabels.getResourceName(fProject));
 		}
@@ -449,6 +455,7 @@ public class ReorgCorrectionsSubProcessor {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getAdditionalProposalInfo()
 		 */
+		@Override
 		public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 			StringBuffer message= new StringBuffer();
 			if (fChangeOnWorkspace) {
@@ -484,13 +491,14 @@ public class ReorgCorrectionsSubProcessor {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.text.contentassist.ICompletionProposal#apply(IDocument)
 		 */
+		@Override
 		public void apply(IDocument document) {
 			if (fChangeOnWorkspace) {
-				Hashtable map= JavaCore.getOptions();
+				Hashtable<String, String> map= JavaCore.getOptions();
 				JavaModelUtil.set50ComplianceOptions(map);
 				JavaCore.setOptions(map);
 			} else {
-				Map map= fProject.getOptions(false);
+				Map<String, String> map= fProject.getOptions(false);
 				int optionsCount= map.size();
 				JavaModelUtil.set50ComplianceOptions(map);
 				if (map.size() > optionsCount) {
@@ -524,7 +532,7 @@ public class ReorgCorrectionsSubProcessor {
 	 * @param problem the current problem
 	 * @param proposals the resulting proposals
 	 */
-	public static void getNeed50ComplianceProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getNeed50ComplianceProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IJavaProject project= context.getCompilationUnit().getJavaProject();
 
 		String label1= CorrectionMessages.ReorgCorrectionsSubProcessor_50_project_compliance_description;
@@ -542,14 +550,14 @@ public class ReorgCorrectionsSubProcessor {
 	 * @param problem the current problem
 	 * @param proposals the resulting proposals
 	 */
-	public static void getIncorrectBuildPathProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getIncorrectBuildPathProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IProject project= context.getCompilationUnit().getJavaProject().getProject();
 		String label= CorrectionMessages.ReorgCorrectionsSubProcessor_configure_buildpath_label;
 		OpenBuildPathCorrectionProposal proposal= new OpenBuildPathCorrectionProposal(project, label, 5, null);
 		proposals.add(proposal);
 	}
 
-	public static void getAccessRulesProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getAccessRulesProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		IBinding referencedElement= null;
 		ASTNode node= problem.getCoveredNode(context.getASTRoot());
 		if (node instanceof Type) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReturnTypeSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReturnTypeSubProcessor.java
index a3f1de3..c714b56 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReturnTypeSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReturnTypeSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,12 +61,12 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 public class ReturnTypeSubProcessor {
 
 	private static class ReturnStatementCollector extends ASTVisitor {
-		private ArrayList fResult= new ArrayList();
+		private ArrayList<ReturnStatement> fResult= new ArrayList<ReturnStatement>();
 
 		public ITypeBinding getTypeBinding(AST ast) {
 			boolean couldBeObject= false;
 			for (int i= 0; i < fResult.size(); i++) {
-				ReturnStatement node= (ReturnStatement) fResult.get(i);
+				ReturnStatement node= fResult.get(i);
 				Expression expr= node.getExpression();
 				if (expr != null) {
 					ITypeBinding binding= Bindings.normalizeTypeBinding(expr.resolveTypeBinding());
@@ -85,23 +85,28 @@ public class ReturnTypeSubProcessor {
 			return ast.resolveWellKnownType("void"); //$NON-NLS-1$
 		}
 
+		@Override
 		public boolean visit(ReturnStatement node) {
 			fResult.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(AnonymousClassDeclaration node) {
 			return false;
 		}
 
+		@Override
 		public boolean visit(TypeDeclaration node) {
 			return false;
 		}
 
+		@Override
 		public boolean visit(EnumDeclaration node) {
 			return false;
 		}
 
+		@Override
 		public boolean visit(AnnotationTypeDeclaration node) {
 			return false;
 		}
@@ -109,7 +114,7 @@ public class ReturnTypeSubProcessor {
 	}
 
 
-	public static void addMethodWithConstrNameProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addMethodWithConstrNameProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -127,7 +132,7 @@ public class ReturnTypeSubProcessor {
 
 	}
 
-	public static void addVoidMethodReturnsProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addVoidMethodReturnsProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		CompilationUnit astRoot= context.getASTRoot();
@@ -200,7 +205,7 @@ public class ReturnTypeSubProcessor {
 
 
 
-	public static void addMissingReturnTypeProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addMissingReturnTypeProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		CompilationUnit astRoot= context.getASTRoot();
@@ -275,7 +280,7 @@ public class ReturnTypeSubProcessor {
 		}
 	}
 
-	public static void addMissingReturnStatementProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addMissingReturnStatementProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -313,7 +318,7 @@ public class ReturnTypeSubProcessor {
 		}
 	}
 
-	public static void addMethodRetunsVoidProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws JavaModelException {
+	public static void addMethodRetunsVoidProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws JavaModelException {
 		CompilationUnit astRoot= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(astRoot);
 		if (!(selectedNode instanceof ReturnStatement)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperation.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperation.java
index 18ca10c..1373d32 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperation.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -204,9 +204,9 @@ public final class SerialVersionHashOperation extends AbstractSerialVersionOpera
 
 	private static char[][] getSortedInterfacesNames(IClassFileReader cfReader) {
 		char[][] interfaceNames= cfReader.getInterfaceNames();
-		Arrays.sort(interfaceNames, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				return CharOperation.compareTo(((char[]) o1), ((char[]) o2));
+		Arrays.sort(interfaceNames, new Comparator<char[]>() {
+			public int compare(char[] o1, char[] o2) {
+				return CharOperation.compareTo(o1, o2);
 			}
 		});
 		return interfaceNames;
@@ -214,9 +214,9 @@ public final class SerialVersionHashOperation extends AbstractSerialVersionOpera
 
 	private static IFieldInfo[] getSortedFields(IClassFileReader cfReader) {
 		IFieldInfo[] allFields= cfReader.getFieldInfos();
-		Arrays.sort(allFields, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				return CharOperation.compareTo(((IFieldInfo) o1).getName(), ((IFieldInfo) o2).getName());
+		Arrays.sort(allFields, new Comparator<IFieldInfo>() {
+			public int compare(IFieldInfo o1, IFieldInfo o2) {
+				return CharOperation.compareTo(o1.getName(), o2.getName());
 			}
 		});
 		return allFields;
@@ -234,10 +234,8 @@ public final class SerialVersionHashOperation extends AbstractSerialVersionOpera
 
 	private static IMethodInfo[] getSortedMethods(IClassFileReader cfReader) {
 		IMethodInfo[] allMethods= cfReader.getMethodInfos();
-		Arrays.sort(allMethods, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				IMethodInfo mi1= (IMethodInfo) o1;
-				IMethodInfo mi2= (IMethodInfo) o2;
+		Arrays.sort(allMethods, new Comparator<IMethodInfo>() {
+			public int compare(IMethodInfo mi1, IMethodInfo mi2) {
 				if (mi1.isConstructor() != mi2.isConstructor()) {
 					return mi1.isConstructor() ? -1 : 1;
 				} else if (mi1.isConstructor()) {
@@ -354,6 +352,7 @@ public final class SerialVersionHashOperation extends AbstractSerialVersionOpera
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean addInitializer(final VariableDeclarationFragment fragment, final ASTNode declarationNode) {
 		Assert.isNotNull(fragment);
 		try {
@@ -376,6 +375,7 @@ public final class SerialVersionHashOperation extends AbstractSerialVersionOpera
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void addLinkedPositions(ASTRewrite rewrite, VariableDeclarationFragment fragment, LinkedProposalModel positionGroups) {
 		//Do nothing
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionSubProcessor.java
index 78ae53e..d9b453a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SerialVersionSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,7 +46,7 @@ public final class SerialVersionSubProcessor {
 		}
 
 		private static ICleanUp createCleanUp(boolean isDefault) {
-			Map options= new Hashtable();
+			Map<String, String> options= new Hashtable<String, String>();
 			options.put(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID, CleanUpOptions.TRUE);
 			if (isDefault) {
 				options.put(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_DEFAULT, CleanUpOptions.TRUE);
@@ -63,6 +63,7 @@ public final class SerialVersionSubProcessor {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 			if (fIsDefaultProposal) {
 				return CorrectionMessages.SerialVersionDefaultProposal_message_default_info;
@@ -83,7 +84,7 @@ public final class SerialVersionSubProcessor {
 	 * @param proposals
 	 *        the proposal collection to extend
 	 */
-	public static final void getSerialVersionProposals(final IInvocationContext context, final IProblemLocation location, final Collection proposals) {
+	public static final void getSerialVersionProposals(final IInvocationContext context, final IProblemLocation location, final Collection<ICommandAccess> proposals) {
 
 		Assert.isNotNull(context);
 		Assert.isNotNull(location);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElement.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElement.java
index 826b4a3..57c17d4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,6 +65,7 @@ public class SimilarElement {
 	/* (non-Javadoc)
 	 * @see Object#equals(Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (obj instanceof SimilarElement) {
 			SimilarElement elem= (SimilarElement) obj;
@@ -76,6 +77,7 @@ public class SimilarElement {
 	/* (non-Javadoc)
 	 * @see Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fName.hashCode() + fKind;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElementsRequestor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElementsRequestor.java
index 67ed27d..9c99ff2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElementsRequestor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SimilarElementsRequestor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ public class SimilarElementsRequestor extends CompletionRequestor {
 	private int fKind;
 	private String fName;
 
-	private HashSet fResult;
+	private HashSet<SimilarElement> fResult;
 
 	public static SimilarElement[] findSimilarElement(ICompilationUnit cu, Name name, int kind) throws JavaModelException {
 		int pos= name.getStartPosition();
@@ -96,7 +96,7 @@ public class SimilarElementsRequestor extends CompletionRequestor {
 	private static ICompilationUnit createPreparedCU(ICompilationUnit cu, Javadoc comment, int wordStart) throws JavaModelException {
 		int startpos= comment.getStartPosition();
 		boolean isTopLevel= comment.getParent().getParent() instanceof CompilationUnit;
-		char[] content= (char[]) cu.getBuffer().getCharacters().clone();
+		char[] content= cu.getBuffer().getCharacters().clone();
 		if (isTopLevel && (wordStart + 6 < content.length)) {
 			content[startpos++]= 'i'; content[startpos++]= 'm'; content[startpos++]= 'p';
 			content[startpos++]= 'o'; content[startpos++]= 'r'; content[startpos++]= 't';
@@ -128,7 +128,7 @@ public class SimilarElementsRequestor extends CompletionRequestor {
 		fName= name;
 		fKind= kind;
 
-		fResult= new HashSet();
+		fResult= new HashSet<SimilarElement>();
 		// nArguments and preferredType not yet used
 	}
 
@@ -140,7 +140,7 @@ public class SimilarElementsRequestor extends CompletionRequestor {
 		try {
 			cu.codeComplete(pos, this);
 			processKeywords();
-			return (SimilarElement[]) fResult.toArray(new SimilarElement[fResult.size()]);
+			return fResult.toArray(new SimilarElement[fResult.size()]);
 		} finally {
 			fResult.clear();
 		}
@@ -204,6 +204,7 @@ public class SimilarElementsRequestor extends CompletionRequestor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.CompletionRequestor#accept(org.eclipse.jdt.core.CompletionProposal)
 	 */
+	@Override
 	public void accept(CompletionProposal proposal) {
 		if (proposal.getKind() == CompletionProposal.TYPE_REF) {
 			addType(proposal.getSignature(), proposal.getFlags(), proposal.getRelevance());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SuppressWarningsSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SuppressWarningsSubProcessor.java
index 836a7a3..c7b9858 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SuppressWarningsSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SuppressWarningsSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,7 +83,7 @@ public class SuppressWarningsSubProcessor {
 	}
 
 
-	public static void addSuppressWarningsProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addSuppressWarningsProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		if (problem.isError() && ! JavaCore.ENABLED.equals(context.getCompilationUnit().getJavaProject().getOption(JavaCore.COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS, true))) {
 			return;
 		}
@@ -95,7 +95,7 @@ public class SuppressWarningsSubProcessor {
 		if (warningToken == null) {
 			return;
 		}
-		for (Iterator iter= proposals.iterator(); iter.hasNext();) {
+		for (Iterator<ICommandAccess> iter= proposals.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof SuppressWarningsProposal && warningToken.equals(((SuppressWarningsProposal) element).getWarningToken())) {
 				return; // only one at a time
@@ -125,9 +125,9 @@ public class SuppressWarningsSubProcessor {
 		}
 	}
 
-	private static String getFirstFragmentName(List fragments) {
+	private static String getFirstFragmentName(List<VariableDeclarationFragment> fragments) {
 		if (fragments.size() > 0) {
-			return ((VariableDeclarationFragment) fragments.get(0)).getName().getIdentifier();
+			return fragments.get(0).getName().getIdentifier();
 		}
 		return new String();
 	}
@@ -157,6 +157,7 @@ public class SuppressWarningsSubProcessor {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal#getRewrite()
 		 */
+		@Override
 		protected ASTRewrite getRewrite() throws CoreException {
 			AST ast= fNode.getAST();
 			ASTRewrite rewrite= ASTRewrite.create(ast);
@@ -164,7 +165,7 @@ public class SuppressWarningsSubProcessor {
 			StringLiteral newStringLiteral= ast.newStringLiteral();
 			newStringLiteral.setLiteralValue(fWarningToken);
 
-			Annotation existing= findExistingAnnotation((List) fNode.getStructuralProperty(fProperty));
+			Annotation existing= findExistingAnnotation((List<? extends ASTNode>) fNode.getStructuralProperty(fProperty));
 			if (existing == null) {
 				ListRewrite listRewrite= rewrite.getListRewrite(fNode, fProperty);
 
@@ -210,9 +211,9 @@ public class SuppressWarningsSubProcessor {
 			return true;
 		}
 
-		private static Expression findValue(List keyValues) {
+		private static Expression findValue(List<MemberValuePair> keyValues) {
 			for (int i= 0, len= keyValues.size(); i < len; i++) {
-				MemberValuePair curr= (MemberValuePair) keyValues.get(i);
+				MemberValuePair curr= keyValues.get(i);
 				if ("value".equals(curr.getName().getIdentifier())) { //$NON-NLS-1$
 					return curr.getValue();
 				}
@@ -220,7 +221,7 @@ public class SuppressWarningsSubProcessor {
 			return null;
 		}
 
-		private static Annotation findExistingAnnotation(List modifiers) {
+		private static Annotation findExistingAnnotation(List<? extends ASTNode> modifiers) {
 			for (int i= 0, len= modifiers.size(); i < len; i++) {
 				Object curr= modifiers.get(i);
 				if (curr instanceof NormalAnnotation || curr instanceof SingleMemberAnnotation) {
@@ -254,7 +255,7 @@ public class SuppressWarningsSubProcessor {
 	 * 
 	 * @since 3.6
 	 */
-	private static int addSuppressWarningsProposalIfPossible(ICompilationUnit cu, ASTNode node, String warningToken, int relevance, Collection proposals) {
+	private static int addSuppressWarningsProposalIfPossible(ICompilationUnit cu, ASTNode node, String warningToken, int relevance, Collection<ICommandAccess> proposals) {
 
 		ChildListPropertyDescriptor property;
 		String name;
@@ -321,7 +322,7 @@ public class SuppressWarningsSubProcessor {
 	 * @param problem the problem
 	 * @param proposals the resulting proposals
 	 */
-	public static void addUnknownSuppressWarningProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addUnknownSuppressWarningProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 
 		ASTNode coveringNode= context.getCoveringNode();
 		if (!(coveringNode instanceof StringLiteral))
@@ -349,7 +350,7 @@ public class SuppressWarningsSubProcessor {
 	}
 
 
-	public static void addRemoveUnusedSuppressWarningProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addRemoveUnusedSuppressWarningProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ASTNode coveringNode= problem.getCoveringNode(context.getASTRoot());
 		if (!(coveringNode instanceof StringLiteral))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SurroundWith.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SurroundWith.java
index 1555b35..e971c9b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SurroundWith.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/SurroundWith.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.Modifier;
@@ -63,14 +64,14 @@ public abstract class SurroundWith {
 
 	private static final class SplitSelectedOperator implements ISplitOperation {
 
-		private List fAccessedInside;
-		private List fStatements;
-		private List fAccessedAfter;
+		private List<VariableDeclaration> fAccessedInside;
+		private List<ASTNode> fStatements;
+		private List<VariableDeclarationFragment> fAccessedAfter;
 		private ASTRewrite fRewrite;
 		private ListRewrite fBlockRewrite;
 		private VariableDeclarationStatement fLastStatement= null;
 
-		public SplitSelectedOperator(List inside, List after, ListRewrite blockRewrite, ASTRewrite rewrite, List statements) {
+		public SplitSelectedOperator(List<VariableDeclaration> inside, List<VariableDeclarationFragment> after, ListRewrite blockRewrite, ASTRewrite rewrite, List<ASTNode> statements) {
 			super();
 			fAccessedInside= inside;
 			fStatements= statements;
@@ -119,12 +120,12 @@ public abstract class SurroundWith {
 
 	private static final class SplitUnselectedOperator implements ISplitOperation {
 
-		private List fAccessedInside;
+		private List<VariableDeclaration> fAccessedInside;
 		private ListRewrite fBlockRewrite;
 		private ASTRewrite fRewrite;
 		private VariableDeclarationStatement fLastStatement;
 
-		private SplitUnselectedOperator(List accessedInside, ListRewrite blockRewrite, ASTRewrite rewrite) {
+		private SplitUnselectedOperator(List<VariableDeclaration> accessedInside, ListRewrite blockRewrite, ASTRewrite rewrite) {
 			super();
 			fAccessedInside= accessedInside;
 			fBlockRewrite= blockRewrite;
@@ -220,11 +221,11 @@ public abstract class SurroundWith {
 
 		fIsNewContext= isNewContext();
 
-		List accessedAfter= getVariableDeclarationsAccessedAfter(selectedStatements[selectedStatements.length - 1], maxVariableId);
-		List readInside;
+		List<VariableDeclarationFragment> accessedAfter= getVariableDeclarationsAccessedAfter(selectedStatements[selectedStatements.length - 1], maxVariableId);
+		List<VariableDeclaration> readInside;
 		readInside= getVariableDeclarationReadsInside(selectedStatements, maxVariableId);
 
-		List inserted= new ArrayList();
+		List<ASTNode> inserted= new ArrayList<ASTNode>();
 		moveToBlock(selectedStatements, inserted, accessedAfter, readInside, rewrite);
 		if (fIsNewContext) {
 			ImportRewrite importRewrite= StubUtility.createImportRewrite((CompilationUnit)selectedStatements[0].getRoot(), false);
@@ -239,8 +240,8 @@ public abstract class SurroundWith {
 			rewrite.replace(selectedStatements[0], wrap, null);
 			ListRewrite listRewrite= rewrite.getListRewrite(wrap, Block.STATEMENTS_PROPERTY);
 
-			for (Iterator iterator= inserted.iterator(); iterator.hasNext();) {
-				ASTNode node= (ASTNode)iterator.next();
+			for (Iterator<ASTNode> iterator= inserted.iterator(); iterator.hasNext();) {
+				ASTNode node= iterator.next();
 				listRewrite.insertLast(node, null);
 			}
 
@@ -248,15 +249,15 @@ public abstract class SurroundWith {
 			ListRewrite listRewrite= getListRewrite(selectedStatements[0], rewrite);
 
 			ASTNode current= selectedStatements[selectedStatements.length - 1];
-			for (Iterator iterator= inserted.iterator(); iterator.hasNext();) {
-				ASTNode node= (ASTNode)iterator.next();
+			for (Iterator<ASTNode> iterator= inserted.iterator(); iterator.hasNext();) {
+				ASTNode node= iterator.next();
 				listRewrite.insertAfter(node, current, null);
 				current= node;
 			}
 		}
 
-		fFirstInsertedPosition= rewrite.track((ASTNode)inserted.get(0));
-		fLastInsertedPosition= rewrite.track((ASTNode)inserted.get(inserted.size() - 1));
+		fFirstInsertedPosition= rewrite.track(inserted.get(0));
+		fLastInsertedPosition= rewrite.track(inserted.get(inserted.size() - 1));
 
 		return rewrite;
 	}
@@ -274,8 +275,8 @@ public abstract class SurroundWith {
 	 * @param selectedNodes The selectedNodes
 	 * @return	List of VariableDeclaration
 	 */
-	protected List getVariableDeclarationReadsInside(Statement[] selectedNodes, int maxVariableId) {
-		ArrayList result= new ArrayList();
+	protected List<VariableDeclaration> getVariableDeclarationReadsInside(Statement[] selectedNodes, int maxVariableId) {
+		ArrayList<VariableDeclaration> result= new ArrayList<VariableDeclaration>();
 		if (!fIsNewContext)
 			return result;
 
@@ -285,7 +286,7 @@ public abstract class SurroundWith {
 			if (!read.isField()) {
 				ASTNode readDecl= getRootNode().findDeclaringNode(read);
 				if (readDecl instanceof VariableDeclaration) {
-					result.add(readDecl);
+					result.add((VariableDeclaration) readDecl);
 				}
 			}
 		}
@@ -300,9 +301,9 @@ public abstract class SurroundWith {
 	 * @param maxVariableId The maximum number of variable declarations
 	 * @return List of VariableDeclarationFragments which can't be moved to the new block
 	 */
-	protected List getVariableDeclarationsAccessedAfter(ASTNode startNode, int maxVariableId) {
+	protected List<VariableDeclarationFragment> getVariableDeclarationsAccessedAfter(ASTNode startNode, int maxVariableId) {
 
-		List statements;
+		List<Statement> statements;
 		if (startNode.getLocationInParent() == SwitchStatement.STATEMENTS_PROPERTY) {
 			SwitchStatement block= (SwitchStatement)ASTNodes.getParent(startNode, SwitchStatement.class);
 			statements= block.statements();
@@ -310,19 +311,19 @@ public abstract class SurroundWith {
 			Block block= (Block)ASTNodes.getParent(startNode, Block.class);
 			statements= block.statements();
 		}
-		List bodyAfterSelection= statements.subList(statements.indexOf(startNode) + 1, statements.size());
+		List<Statement> bodyAfterSelection= statements.subList(statements.indexOf(startNode) + 1, statements.size());
 
-		List result= new ArrayList();
+		List<VariableDeclarationFragment> result= new ArrayList<VariableDeclarationFragment>();
 		if (!bodyAfterSelection.isEmpty()) {
 
-			IVariableBinding[] accesses= getAccesses((ASTNode[]) bodyAfterSelection.toArray(new ASTNode[bodyAfterSelection.size()]), maxVariableId);
+			IVariableBinding[] accesses= getAccesses(bodyAfterSelection.toArray(new ASTNode[bodyAfterSelection.size()]), maxVariableId);
 
 			for (int i= 0; i < accesses.length; i++) {
 				IVariableBinding curVar= accesses[i];
 				if (!curVar.isField()) {
 					ASTNode readDecl= ASTNodes.findDeclaration(curVar, getRootNode());
 					if (readDecl instanceof VariableDeclarationFragment) {
-						result.add(readDecl);
+						result.add((VariableDeclarationFragment) readDecl);
 					}
 				}
 			}
@@ -377,7 +378,7 @@ public abstract class SurroundWith {
 	 * @param accessedInside VariableDeclaration which can be made final
 	 * @param rewrite The rewrite to use.
 	 */
-	private final void moveToBlock(Statement[] toMove, List statements, final List/*<VariableDeclarationFragment>*/ accessedAfter, final List/*<VariableDeclaration>*/ accessedInside, final ASTRewrite rewrite) {
+	private final void moveToBlock(Statement[] toMove, List<ASTNode> statements, final List<VariableDeclarationFragment> accessedAfter, final List<VariableDeclaration> accessedInside, final ASTRewrite rewrite) {
 
 		for (int i= 0; i < toMove.length; i++) {
 			ASTNode node= toMove[i];
@@ -387,7 +388,7 @@ public abstract class SurroundWith {
 
 				splitVariableDeclarationStatement(statement, createSplitSelectedOperator(accessedAfter, accessedInside, rewrite, statements, blockRewrite), rewrite);
 
-				for (Iterator iter= statement.fragments().iterator(); iter.hasNext();) {
+				for (Iterator<VariableDeclarationFragment> iter= statement.fragments().iterator(); iter.hasNext();) {
 					accessedInside.remove(iter.next());
 				}
 			} else {
@@ -396,7 +397,7 @@ public abstract class SurroundWith {
 		}
 
 		while (!accessedInside.isEmpty()) {
-			VariableDeclaration variableDeclaration= (VariableDeclaration)accessedInside.get(0);
+			VariableDeclaration variableDeclaration= accessedInside.get(0);
 			if (variableDeclaration instanceof SingleVariableDeclaration) {
 				if (ASTNodes.findModifierNode(Modifier.FINAL, ASTNodes.getModifiers(variableDeclaration)) == null) {
 					ModifierRewrite.create(rewrite, variableDeclaration).setModifiers(Modifier.FINAL, Modifier.NONE, null);
@@ -408,8 +409,8 @@ public abstract class SurroundWith {
 
 				splitVariableDeclarationStatement(statement, createSplitUnselectedOperator(accessedInside, rewrite, blockRewrite), rewrite);
 
-				for (Iterator iter= statement.fragments().iterator(); iter.hasNext();) {
-					VariableDeclarationFragment fragment= (VariableDeclarationFragment)iter.next();
+				for (Iterator<VariableDeclarationFragment> iter= statement.fragments().iterator(); iter.hasNext();) {
+					VariableDeclarationFragment fragment= iter.next();
 					accessedInside.remove(fragment);
 				}
 			} else if (variableDeclaration.getParent() instanceof VariableDeclarationExpression) {
@@ -417,23 +418,23 @@ public abstract class SurroundWith {
 
 				VariableDeclarationRewrite.rewriteModifiers(expression, Modifier.FINAL, 0, rewrite, null);
 
-				for (Iterator iter= expression.fragments().iterator(); iter.hasNext();) {
-					VariableDeclarationFragment fragment= (VariableDeclarationFragment)iter.next();
+				for (Iterator<VariableDeclarationFragment> iter= expression.fragments().iterator(); iter.hasNext();) {
+					VariableDeclarationFragment fragment= iter.next();
 					accessedInside.remove(fragment);
 				}
 			}
 		}
 	}
 
-	private void insertNodeAtEnd(final ASTRewrite rewrite, final List statements, ASTNode node) {
+	private void insertNodeAtEnd(final ASTRewrite rewrite, final List<ASTNode> statements, ASTNode node) {
 		statements.add(rewrite.createMoveTarget(node));
 	}
 
-	protected ISplitOperation createSplitUnselectedOperator(List accessedInside, ASTRewrite rewrite, ListRewrite blockRewrite) {
+	protected ISplitOperation createSplitUnselectedOperator(List<VariableDeclaration> accessedInside, ASTRewrite rewrite, ListRewrite blockRewrite) {
 		return new SplitUnselectedOperator(accessedInside, blockRewrite, rewrite);
 	}
 
-	protected ISplitOperation createSplitSelectedOperator(List accessedAfter, List accessedInside, ASTRewrite rewrite, List statements, ListRewrite blockRewrite) {
+	protected ISplitOperation createSplitSelectedOperator(List<VariableDeclarationFragment> accessedAfter, List<VariableDeclaration> accessedInside, ASTRewrite rewrite, List<ASTNode> statements, ListRewrite blockRewrite) {
 		return new SplitSelectedOperator(accessedInside, accessedAfter, blockRewrite, rewrite, statements);
 	}
 
@@ -449,23 +450,23 @@ public abstract class SurroundWith {
 	 */
 	private void splitVariableDeclarationStatement(VariableDeclarationStatement statement, ISplitOperation splitOperator, ASTRewrite rewrite) {
 
-		List fragments= statement.fragments();
-		Iterator iter= fragments.iterator();
-		VariableDeclarationFragment lastFragment= (VariableDeclarationFragment)iter.next();
+		List<VariableDeclarationFragment> fragments= statement.fragments();
+		Iterator<VariableDeclarationFragment> iter= fragments.iterator();
+		VariableDeclarationFragment lastFragment= iter.next();
 		VariableDeclarationStatement lastStatement= statement;
 
 		splitOperator.initializeStatement(lastStatement, lastFragment);
 
 		ListRewrite fragmentsRewrite= null;
 		while (iter.hasNext()) {
-			VariableDeclarationFragment currentFragment= (VariableDeclarationFragment)iter.next();
+			VariableDeclarationFragment currentFragment= iter.next();
 
 			if (splitOperator.needsSplit(lastFragment, currentFragment)) {
 
 				VariableDeclarationStatement newStatement= getAst().newVariableDeclarationStatement((VariableDeclarationFragment)rewrite.createMoveTarget(currentFragment));
 
 				ListRewrite modifierRewrite= rewrite.getListRewrite(newStatement, VariableDeclarationStatement.MODIFIERS2_PROPERTY);
-				for (Iterator iterator= statement.modifiers().iterator(); iterator.hasNext();) {
+				for (Iterator<IExtendedModifier> iterator= statement.modifiers().iterator(); iterator.hasNext();) {
 					modifierRewrite.insertLast(rewrite.createCopyTarget((ASTNode)iterator.next()), null);
 				}
 
@@ -502,6 +503,7 @@ public abstract class SurroundWith {
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public boolean visit(ThisExpression thisExpr) {
 				if (thisExpr.getQualifier() == null) {
 					ITypeBinding typeBinding= thisExpr.resolveTypeBinding();
@@ -522,7 +524,7 @@ public abstract class SurroundWith {
 	 * @param fragment The fragment to split.
 	 * @param rewrite The rewrite to use.
 	 */
-	protected static void splitOffInitializer(List statements, VariableDeclarationFragment fragment, ASTRewrite rewrite) {
+	protected static void splitOffInitializer(List<ASTNode> statements, VariableDeclarationFragment fragment, ASTRewrite rewrite) {
 		Expression initializer= fragment.getInitializer();
 		if (initializer != null) {
 			AST ast= rewrite.getAST();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeArgumentMismatchSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeArgumentMismatchSubProcessor.java
index 9b13036..3baba23 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeArgumentMismatchSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeArgumentMismatchSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,7 @@ public class TypeArgumentMismatchSubProcessor {
 
 //	}
 
-	public static void removeMismatchedArguments(IInvocationContext context, IProblemLocation problem, Collection proposals){
+	public static void removeMismatchedArguments(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals){
 		ICompilationUnit cu= context.getCompilationUnit();
 		ASTNode selectedNode= problem.getCoveredNode(context.getASTRoot());
 		if (!(selectedNode instanceof SimpleName)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
index e671bc1..3897392 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,7 +76,7 @@ public class TypeMismatchSubProcessor {
 	private TypeMismatchSubProcessor() {
 	}
 
-	public static void addTypeMismatchProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void addTypeMismatchProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		String[] args= problem.getProblemArguments();
 		if (args.length != 2) {
 			return;
@@ -230,7 +230,7 @@ public class TypeMismatchSubProcessor {
 		}
 	}
 
-	public static void addChangeSenderTypeProposals(IInvocationContext context, Expression nodeToCast, ITypeBinding castTypeBinding, boolean isAssignedNode, int relevance, Collection proposals) throws JavaModelException {
+	public static void addChangeSenderTypeProposals(IInvocationContext context, Expression nodeToCast, ITypeBinding castTypeBinding, boolean isAssignedNode, int relevance, Collection<ICommandAccess> proposals) throws JavaModelException {
 		IBinding callerBinding= Bindings.resolveExpressionBinding(nodeToCast, false);
 
 		ICompilationUnit cu= context.getCompilationUnit();
@@ -302,7 +302,7 @@ public class TypeMismatchSubProcessor {
 		return new CastCorrectionProposal(label, cu, nodeToCast, castTypeBinding, relevance);
 	}
 
-	public static void addIncompatibleReturnTypeProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws JavaModelException {
+	public static void addIncompatibleReturnTypeProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws JavaModelException {
 		CompilationUnit astRoot= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(astRoot);
 		if (selectedNode == null) {
@@ -317,37 +317,41 @@ public class TypeMismatchSubProcessor {
 			return;
 		}
 
+		ITypeBinding returnType= methodDeclBinding.getReturnType();
 		IMethodBinding overridden= Bindings.findOverriddenMethod(methodDeclBinding, false);
-		if (overridden == null || overridden.getReturnType() == methodDeclBinding.getReturnType()) {
+		if (overridden == null || overridden.getReturnType() == returnType) {
 			return;
 		}
 
 
 		ICompilationUnit cu= context.getCompilationUnit();
 		IMethodBinding methodDecl= methodDeclBinding.getMethodDeclaration();
-		proposals.add(new TypeChangeCorrectionProposal(cu, methodDecl, astRoot, overridden.getReturnType(), false, 8));
+		ITypeBinding overriddenReturnType= overridden.getReturnType();
+		if (! JavaModelUtil.is50OrHigher(context.getCompilationUnit().getJavaProject())) {
+			overriddenReturnType= overriddenReturnType.getErasure();
+		}
+		proposals.add(new TypeChangeCorrectionProposal(cu, methodDecl, astRoot, overriddenReturnType, false, 8));
 
 		ICompilationUnit targetCu= cu;
 
 		IMethodBinding overriddenDecl= overridden.getMethodDeclaration();
 		ITypeBinding overridenDeclType= overriddenDecl.getDeclaringClass();
 
-		ITypeBinding returnType= methodDeclBinding.getReturnType();
 		if (overridenDeclType.isFromSource()) {
 			targetCu= ASTResolving.findCompilationUnitForBinding(cu, astRoot, overridenDeclType);
-		}
-		if (targetCu != null && ASTResolving.isUseableTypeInContext(returnType, overriddenDecl, false)) {
-			TypeChangeCorrectionProposal proposal= new TypeChangeCorrectionProposal(targetCu, overriddenDecl, astRoot, returnType, false, 7);
-			if (overridenDeclType.isInterface()) {
-				proposal.setDisplayName(Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changereturnofimplemented_description, BasicElementLabels.getJavaElementName(overriddenDecl.getName())));
-			} else {
-				proposal.setDisplayName(Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changereturnofoverridden_description, BasicElementLabels.getJavaElementName(overriddenDecl.getName())));
+			if (targetCu != null && ASTResolving.isUseableTypeInContext(returnType, overriddenDecl, false)) {
+				TypeChangeCorrectionProposal proposal= new TypeChangeCorrectionProposal(targetCu, overriddenDecl, astRoot, returnType, false, 7);
+				if (overridenDeclType.isInterface()) {
+					proposal.setDisplayName(Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changereturnofimplemented_description, BasicElementLabels.getJavaElementName(overriddenDecl.getName())));
+				} else {
+					proposal.setDisplayName(Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changereturnofoverridden_description, BasicElementLabels.getJavaElementName(overriddenDecl.getName())));
+				}
+				proposals.add(proposal);
 			}
-			proposals.add(proposal);
 		}
 	}
 
-	public static void addIncompatibleThrowsProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws JavaModelException {
+	public static void addIncompatibleThrowsProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws JavaModelException {
 		CompilationUnit astRoot= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(astRoot);
 		if (!(selectedNode instanceof MethodDeclaration)) {
@@ -369,7 +373,7 @@ public class TypeMismatchSubProcessor {
 		ITypeBinding[] methodExceptions= methodDeclBinding.getExceptionTypes();
 		ITypeBinding[] definedExceptions= overridden.getExceptionTypes();
 
-		ArrayList undeclaredExceptions= new ArrayList();
+		ArrayList<ITypeBinding> undeclaredExceptions= new ArrayList<ITypeBinding>();
 		{
 			ChangeDescription[] changes= new ChangeDescription[methodExceptions.length];
 
@@ -393,7 +397,7 @@ public class TypeMismatchSubProcessor {
 			ChangeDescription[] changes= new ChangeDescription[definedExceptions.length + undeclaredExceptions.size()];
 
 			for (int i= 0; i < undeclaredExceptions.size(); i++) {
-				changes[i + definedExceptions.length]= new InsertDescription((ITypeBinding) undeclaredExceptions.get(i), ""); //$NON-NLS-1$
+				changes[i + definedExceptions.length]= new InsertDescription(undeclaredExceptions.get(i), ""); //$NON-NLS-1$
 			}
 			IMethodBinding overriddenDecl= overridden.getMethodDeclaration();
 			String[] args= {  BasicElementLabels.getJavaElementName(declaringType.getName()), BasicElementLabels.getJavaElementName(overridden.getName()) };
@@ -412,7 +416,7 @@ public class TypeMismatchSubProcessor {
 		return false;
 	}
 
-	public static void addTypeMismatchInForEachProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void addTypeMismatchInForEachProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		CompilationUnit astRoot= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(astRoot);
 		if (selectedNode == null || selectedNode.getLocationInParent() != EnhancedForStatement.EXPRESSION_PROPERTY) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java
index c5fb5ab..ea1c050 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -119,7 +119,7 @@ public class UnresolvedElementsSubProcessor {
 
 	private static final String ADD_IMPORT_ID= "org.eclipse.jdt.ui.correction.addImport"; //$NON-NLS-1$
 
-	public static void getVariableProposals(IInvocationContext context, IProblemLocation problem, IVariableBinding resolvedField, Collection proposals) throws CoreException {
+	public static void getVariableProposals(IInvocationContext context, IProblemLocation problem, IVariableBinding resolvedField, Collection<ICommandAccess> proposals) throws CoreException {
 
 		ICompilationUnit cu= context.getCompilationUnit();
 
@@ -263,7 +263,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static void addNewVariableProposals(ICompilationUnit cu, Name node, SimpleName simpleName, Collection proposals) {
+	private static void addNewVariableProposals(ICompilationUnit cu, Name node, SimpleName simpleName, Collection<ICommandAccess> proposals) {
 		String name= simpleName.getIdentifier();
 		BodyDeclaration bodyDeclaration= ASTResolving.findParentBodyDeclaration(node, true);
 		int type= bodyDeclaration.getNodeType();
@@ -298,7 +298,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static void addNewFieldProposals(ICompilationUnit cu, CompilationUnit astRoot, ITypeBinding binding, ITypeBinding declaringTypeBinding, SimpleName simpleName, boolean isWriteAccess, Collection proposals) throws JavaModelException {
+	private static void addNewFieldProposals(ICompilationUnit cu, CompilationUnit astRoot, ITypeBinding binding, ITypeBinding declaringTypeBinding, SimpleName simpleName, boolean isWriteAccess, Collection<ICommandAccess> proposals) throws JavaModelException {
 		// new variables
 		ICompilationUnit targetCU;
 		ITypeBinding senderDeclBinding;
@@ -329,7 +329,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static void addNewFieldForType(ICompilationUnit targetCU, ITypeBinding binding, ITypeBinding senderDeclBinding, SimpleName simpleName, boolean isWriteAccess, boolean mustBeConst, Collection proposals) {
+	private static void addNewFieldForType(ICompilationUnit targetCU, ITypeBinding binding, ITypeBinding senderDeclBinding, SimpleName simpleName, boolean isWriteAccess, boolean mustBeConst, Collection<ICommandAccess> proposals) {
 		String name= simpleName.getIdentifier();
 		String nameLabel= BasicElementLabels.getJavaElementName(name);
 		String label;
@@ -365,7 +365,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static void addSimilarVariableProposals(ICompilationUnit cu, CompilationUnit astRoot, ITypeBinding binding, SimpleName node, boolean isWriteAccess, Collection proposals) {
+	private static void addSimilarVariableProposals(ICompilationUnit cu, CompilationUnit astRoot, ITypeBinding binding, SimpleName node, boolean isWriteAccess, Collection<ICommandAccess> proposals) {
 		int kind= ScopeAnalyzer.VARIABLES | ScopeAnalyzer.CHECK_VISIBILITY;
 		if (!isWriteAccess) {
 			kind |= ScopeAnalyzer.METHODS; // also try to find similar methods
@@ -414,7 +414,7 @@ public class UnresolvedElementsSubProcessor {
 			ITypeBinding objectBinding= astRoot.getAST().resolveWellKnownType("java.lang.Object"); //$NON-NLS-1$
 			String identifier= node.getIdentifier();
 			boolean isInStaticContext= ASTResolving.isInStaticContext(node);
-			ArrayList newProposals= new ArrayList(51);
+			ArrayList<CUCorrectionProposal> newProposals= new ArrayList<CUCorrectionProposal>(51);
 
 			loop: for (int i= 0; i < varsAndMethodsInScope.length && newProposals.size() <= 50; i++) {
 				IBinding varOrMeth= varsAndMethodsInScope[i];
@@ -532,7 +532,7 @@ public class UnresolvedElementsSubProcessor {
 	}
 
 
-	public static void getTypeProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void getTypeProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
@@ -580,7 +580,7 @@ public class UnresolvedElementsSubProcessor {
 		ReorgCorrectionsSubProcessor.addProjectSetupFixProposal(context, problem, node.getFullyQualifiedName(), proposals);
 	}
 
-	private static void addSimilarTypeProposals(int kind, ICompilationUnit cu, Name node, int relevance, Collection proposals) throws CoreException {
+	private static void addSimilarTypeProposals(int kind, ICompilationUnit cu, Name node, int relevance, Collection<ICommandAccess> proposals) throws CoreException {
 		SimilarElement[] elements= SimilarElementsRequestor.findSimilarElement(cu, node, kind);
 
 		// try to resolve type in context -> highest severity
@@ -668,7 +668,7 @@ public class UnresolvedElementsSubProcessor {
 		return proposal;
 	}
 
-	private static CUCorrectionProposal createTypeRefChangeFullProposal(ICompilationUnit cu, ITypeBinding binding, ASTNode node, int relevance) {
+	static CUCorrectionProposal createTypeRefChangeFullProposal(ICompilationUnit cu, ITypeBinding binding, ASTNode node, int relevance) {
 		ASTRewrite rewrite= ASTRewrite.create(node.getAST());
 		String label= Messages.format(CorrectionMessages.UnresolvedElementsSubProcessor_change_full_type_description, BindingLabelProvider.getBindingLabel(binding, JavaElementLabels.ALL_DEFAULT));
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
@@ -704,7 +704,19 @@ public class UnresolvedElementsSubProcessor {
 		return name.length() == 1 && Character.isUpperCase(name.charAt(0));
 	}
 
-	public static void addNewTypeProposals(ICompilationUnit cu, Name refNode, int kind, int relevance, Collection proposals) throws JavaModelException {
+	private static boolean isLikelyMethodTypeParameterName(String name) {
+		if (name.length() == 1) {
+			switch (name.charAt(0)) {
+				case 'S':
+				case 'T':
+				case 'U':
+					return true;
+			}
+		}
+		return false;
+	}
+
+	public static void addNewTypeProposals(ICompilationUnit cu, Name refNode, int kind, int relevance, Collection<ICommandAccess> proposals) throws JavaModelException {
 		Name node= refNode;
 		do {
 			String typeName= ASTNodes.getSimpleNameIdentifier(node);
@@ -771,13 +783,15 @@ public class UnresolvedElementsSubProcessor {
 			BodyDeclaration declaration= ASTResolving.findParentBodyDeclaration(refNode);
 			int baseRel= relevance;
 			if (isLikelyTypeParameterName(name)) {
-				baseRel += 4;
+				baseRel += 8;
 			}
 			while (declaration != null) {
 				IBinding binding= null;
 				int rel= baseRel;
 				if (declaration instanceof MethodDeclaration) {
 					binding= ((MethodDeclaration) declaration).resolveBinding();
+					if (isLikelyMethodTypeParameterName(name))
+						rel+= 2;
 				} else if (declaration instanceof TypeDeclaration) {
 					binding= ((TypeDeclaration) declaration).resolveBinding();
 					rel++;
@@ -795,7 +809,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	public static void getMethodProposals(IInvocationContext context, IProblemLocation problem, boolean isOnlyParameterMismatch, Collection proposals) throws CoreException {
+	public static void getMethodProposals(IInvocationContext context, IProblemLocation problem, boolean isOnlyParameterMismatch, Collection<ICommandAccess> proposals) throws CoreException {
 
 		ICompilationUnit cu= context.getCompilationUnit();
 
@@ -807,7 +821,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 		SimpleName nameNode= (SimpleName) selectedNode;
 
-		List arguments;
+		List<Expression> arguments;
 		Expression sender;
 		boolean isSuperInvocation;
 
@@ -832,7 +846,7 @@ public class UnresolvedElementsSubProcessor {
 		// corrections
 		IBinding[] bindings= (new ScopeAnalyzer(astRoot)).getDeclarationsInScope(nameNode, ScopeAnalyzer.METHODS);
 
-		HashSet suggestedRenames= new HashSet();
+		HashSet<String> suggestedRenames= new HashSet<String>();
 		for (int i= 0; i < bindings.length; i++) {
 			IMethodBinding binding= (IMethodBinding) bindings[i];
 			String curr= binding.getName();
@@ -844,7 +858,7 @@ public class UnresolvedElementsSubProcessor {
 		suggestedRenames= null;
 
 		if (isOnlyParameterMismatch) {
-			ArrayList parameterMismatchs= new ArrayList();
+			ArrayList<IMethodBinding> parameterMismatchs= new ArrayList<IMethodBinding>();
 			for (int i= 0; i < bindings.length; i++) {
 				IMethodBinding binding= (IMethodBinding) bindings[i];
 				if (binding.getName().equals(methodName)) {
@@ -871,7 +885,7 @@ public class UnresolvedElementsSubProcessor {
 
 	}
 
-	private static void addNewMethodProposals(ICompilationUnit cu, CompilationUnit astRoot, Expression sender, List arguments, boolean isSuperInvocation, ASTNode invocationNode, String methodName, Collection proposals) throws JavaModelException {
+	private static void addNewMethodProposals(ICompilationUnit cu, CompilationUnit astRoot, Expression sender, List<Expression> arguments, boolean isSuperInvocation, ASTNode invocationNode, String methodName, Collection<ICommandAccess> proposals) throws JavaModelException {
 		ITypeBinding nodeParentType= Bindings.getBindingOfParentType(invocationNode);
 		ITypeBinding binding= null;
 		if (sender != null) {
@@ -920,7 +934,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static void addMissingCastParentsProposal(ICompilationUnit cu, MethodInvocation invocationNode, Collection proposals) {
+	private static void addMissingCastParentsProposal(ICompilationUnit cu, MethodInvocation invocationNode, Collection<ICommandAccess> proposals) {
 		Expression sender= invocationNode.getExpression();
 		if (sender instanceof ThisExpression) {
 			return;
@@ -978,7 +992,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static boolean useExistingParentCastProposal(ICompilationUnit cu, CastExpression expression, Expression accessExpression, SimpleName accessSelector, ITypeBinding[] paramTypes, Collection proposals) {
+	private static boolean useExistingParentCastProposal(ICompilationUnit cu, CastExpression expression, Expression accessExpression, SimpleName accessSelector, ITypeBinding[] paramTypes, Collection<ICommandAccess> proposals) {
 		ITypeBinding castType= expression.getType().resolveBinding();
 		if (castType == null) {
 			return false;
@@ -1018,7 +1032,7 @@ public class UnresolvedElementsSubProcessor {
 		return false;
 	}
 
-	private static void addParameterMissmatchProposals(IInvocationContext context, IProblemLocation problem, List similarElements, ASTNode invocationNode, List arguments, Collection proposals) throws CoreException {
+	private static void addParameterMissmatchProposals(IInvocationContext context, IProblemLocation problem, List<IMethodBinding> similarElements, ASTNode invocationNode, List<Expression> arguments, Collection<ICommandAccess> proposals) throws CoreException {
 		int nSimilarElements= similarElements.size();
 		ITypeBinding[] argTypes= getArgumentTypes(arguments);
 		if (argTypes == null || nSimilarElements == 0)  {
@@ -1026,7 +1040,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 
 		for (int i= 0; i < nSimilarElements; i++) {
-			IMethodBinding elem = (IMethodBinding) similarElements.get(i);
+			IMethodBinding elem = similarElements.get(i);
 			int diff= elem.getParameterTypes().length - argTypes.length;
 			if (diff == 0) {
 				int nProposals= proposals.size();
@@ -1042,7 +1056,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static void doMoreParameters(IInvocationContext context, ASTNode invocationNode, ITypeBinding[] argTypes, IMethodBinding methodBinding, Collection proposals) throws CoreException {
+	private static void doMoreParameters(IInvocationContext context, ASTNode invocationNode, ITypeBinding[] argTypes, IMethodBinding methodBinding, Collection<ICommandAccess> proposals) throws CoreException {
 		ITypeBinding[] paramTypes= methodBinding.getParameterTypes();
 		int k= 0, nSkipped= 0;
 		int diff= paramTypes.length - argTypes.length;
@@ -1125,10 +1139,10 @@ public class UnresolvedElementsSubProcessor {
 		return BasicElementLabels.getJavaElementName(buf.toString());
 	}
 
-	private static String getArgumentName(List arguments, int index) {
+	private static String getArgumentName(List<Expression> arguments, int index) {
 		String def= String.valueOf(index + 1);
 
-		ASTNode expr= (ASTNode) arguments.get(index);
+		ASTNode expr= arguments.get(index);
 		if (expr.getLength() > 18) {
 			return def;
 		}
@@ -1141,7 +1155,7 @@ public class UnresolvedElementsSubProcessor {
 		return '\'' + BasicElementLabels.getJavaElementName(ASTNodes.asString(expr)) + '\'';
 	}
 
-	private static void doMoreArguments(IInvocationContext context, ASTNode invocationNode, List arguments, ITypeBinding[] argTypes, IMethodBinding methodRef, Collection proposals) throws CoreException {
+	private static void doMoreArguments(IInvocationContext context, ASTNode invocationNode, List<Expression> arguments, ITypeBinding[] argTypes, IMethodBinding methodRef, Collection<ICommandAccess> proposals) throws CoreException {
 		ITypeBinding[] paramTypes= methodRef.getParameterTypes();
 		int k= 0, nSkipped= 0;
 		int diff= argTypes.length - paramTypes.length;
@@ -1165,7 +1179,7 @@ public class UnresolvedElementsSubProcessor {
 			ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST());
 
 			for (int i= diff - 1; i >= 0; i--) {
-				rewrite.remove((Expression) arguments.get(indexSkipped[i]), null);
+				rewrite.remove(arguments.get(indexSkipped[i]), null);
 			}
 			String[] arg= new String[] { ASTResolving.getMethodSignature(methodRef) };
 			String label;
@@ -1197,7 +1211,7 @@ public class UnresolvedElementsSubProcessor {
 			ITypeBinding[] changeTypes= new ITypeBinding[diff];
 			for (int i= diff - 1; i >= 0; i--) {
 				int idx= indexSkipped[i];
-				Expression arg= (Expression) arguments.get(idx);
+				Expression arg= arguments.get(idx);
 				String name= getExpressionBaseName(arg);
 				ITypeBinding newType= Bindings.normalizeTypeBinding(argTypes[idx]);
 				if (newType == null) {
@@ -1237,10 +1251,10 @@ public class UnresolvedElementsSubProcessor {
 		return meth.isDefaultConstructor();
 	}
 
-	private static ITypeBinding[] getParameterTypes(List args) {
+	private static ITypeBinding[] getParameterTypes(List<Expression> args) {
 		ITypeBinding[] params= new ITypeBinding[args.size()];
 		for (int i= 0; i < args.size(); i++) {
-			Expression expr= (Expression) args.get(i);
+			Expression expr= args.get(i);
 			ITypeBinding curr= Bindings.normalizeTypeBinding(expr.resolveTypeBinding());
 			if (curr != null && curr.isWildcardType()) {
 				curr= ASTResolving.normalizeWildcardType(curr, true, expr.getAST());
@@ -1253,7 +1267,7 @@ public class UnresolvedElementsSubProcessor {
 		return params;
 	}
 
-	private static void doEqualNumberOfParameters(IInvocationContext context, ASTNode invocationNode, IProblemLocation problem, List arguments, ITypeBinding[] argTypes, IMethodBinding methodBinding, Collection proposals) throws CoreException {
+	private static void doEqualNumberOfParameters(IInvocationContext context, ASTNode invocationNode, IProblemLocation problem, List<Expression> arguments, ITypeBinding[] argTypes, IMethodBinding methodBinding, Collection<ICommandAccess> proposals) throws CoreException {
 		ITypeBinding[] paramTypes= methodBinding.getParameterTypes();
 		int[] indexOfDiff= new int[paramTypes.length];
 		int nDiffs= 0;
@@ -1284,7 +1298,7 @@ public class UnresolvedElementsSubProcessor {
 
 		if (nDiffs == 1) { // one argument mismatching: try to fix
 			int idx= indexOfDiff[0];
-			Expression nodeToCast= (Expression) arguments.get(idx);
+			Expression nodeToCast= arguments.get(idx);
 			ITypeBinding castType= paramTypes[idx];
 			castType= Bindings.normalizeTypeBinding(castType);
 			if (castType.isWildcardType()) {
@@ -1318,8 +1332,8 @@ public class UnresolvedElementsSubProcessor {
 			int idx2= indexOfDiff[1];
 			boolean canSwap= canAssign(argTypes[idx1], paramTypes[idx2]) && canAssign(argTypes[idx2], paramTypes[idx1]);
 			if (canSwap) {
-				Expression arg1= (Expression) arguments.get(idx1);
-				Expression arg2= (Expression) arguments.get(idx2);
+				Expression arg1= arguments.get(idx1);
+				Expression arg2= arguments.get(idx2);
 
 				ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST());
 				rewrite.replace(arg1, rewrite.createCopyTarget(arg2), null);
@@ -1388,11 +1402,11 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	private static ChangeDescription[] createSignatureChangeDescription(int[] indexOfDiff, int nDiffs, ITypeBinding[] paramTypes, List arguments, ITypeBinding[] argTypes) {
+	private static ChangeDescription[] createSignatureChangeDescription(int[] indexOfDiff, int nDiffs, ITypeBinding[] paramTypes, List<Expression> arguments, ITypeBinding[] argTypes) {
 		ChangeDescription[] changeDesc= new ChangeDescription[paramTypes.length];
 		for (int i= 0; i < nDiffs; i++) {
 			int diffIndex= indexOfDiff[i];
-			Expression arg= (Expression) arguments.get(diffIndex);
+			Expression arg= arguments.get(diffIndex);
 			String name= getExpressionBaseName(arg);
 			ITypeBinding argType= argTypes[diffIndex];
 			if (argType.isWildcardType()) {
@@ -1423,10 +1437,10 @@ public class UnresolvedElementsSubProcessor {
 		return null;
 	}
 
-	private static ITypeBinding[] getArgumentTypes(List arguments) {
+	private static ITypeBinding[] getArgumentTypes(List<Expression> arguments) {
 		ITypeBinding[] res= new ITypeBinding[arguments.size()];
 		for (int i= 0; i < res.length; i++) {
-			Expression expression= (Expression) arguments.get(i);
+			Expression expression= arguments.get(i);
 			ITypeBinding curr= expression.resolveTypeBinding();
 			if (curr == null) {
 				return null;
@@ -1442,7 +1456,7 @@ public class UnresolvedElementsSubProcessor {
 		return res;
 	}
 
-	private static void addQualifierToOuterProposal(IInvocationContext context, MethodInvocation invocationNode, IMethodBinding binding, Collection proposals) {
+	private static void addQualifierToOuterProposal(IInvocationContext context, MethodInvocation invocationNode, IMethodBinding binding, Collection<ICommandAccess> proposals) {
 		ITypeBinding declaringType= binding.getDeclaringClass();
 		ITypeBinding parentType= Bindings.getBindingOfParentType(invocationNode);
 		ITypeBinding currType= parentType;
@@ -1487,7 +1501,7 @@ public class UnresolvedElementsSubProcessor {
 	}
 
 
-	public static void getConstructorProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void getConstructorProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		ICompilationUnit cu= context.getCompilationUnit();
 
 		CompilationUnit astRoot= context.getASTRoot();
@@ -1497,7 +1511,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 
 		ITypeBinding targetBinding= null;
-		List arguments= null;
+		List<Expression> arguments= null;
 		IMethodBinding recursiveConstructor= null;
 
 		int type= selectedNode.getNodeType();
@@ -1527,7 +1541,7 @@ public class UnresolvedElementsSubProcessor {
 			return;
 		}
 		IMethodBinding[] methods= targetBinding.getDeclaredMethods();
-		ArrayList similarElements= new ArrayList();
+		ArrayList<IMethodBinding> similarElements= new ArrayList<IMethodBinding>();
 		for (int i= 0; i < methods.length; i++) {
 			IMethodBinding curr= methods[i];
 			if (curr.isConstructor() && recursiveConstructor != curr) {
@@ -1550,7 +1564,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	public static void getAmbiguosTypeReferenceProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void getAmbiguosTypeReferenceProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		final ICompilationUnit cu= context.getCompilationUnit();
 		int offset= problem.getOffset();
 		int len= problem.getLength();
@@ -1575,7 +1589,7 @@ public class UnresolvedElementsSubProcessor {
 		}
 	}
 
-	public static void getArrayAccessProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) {
+	public static void getArrayAccessProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 
 		CompilationUnit root= context.getASTRoot();
 		ASTNode selectedNode= problem.getCoveringNode(root);
@@ -1603,7 +1617,7 @@ public class UnresolvedElementsSubProcessor {
 		proposals.add(new RenameNodeCorrectionProposal(label, context.getCompilationUnit(), offset, length, lengthId, 7));
 	}
 
-	public static void getAnnotationMemberProposals(IInvocationContext context, IProblemLocation problem, Collection proposals) throws CoreException {
+	public static void getAnnotationMemberProposals(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
 		CompilationUnit astRoot= context.getASTRoot();
 		ICompilationUnit cu= context.getCompilationUnit();
 		ASTNode selectedNode= problem.getCoveringNode(astRoot);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ASTRewriteCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ASTRewriteCorrectionProposal.java
index 1f0baf6..968bbb6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ASTRewriteCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ASTRewriteCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,6 +88,7 @@ public class ASTRewriteCorrectionProposal extends CUCorrectionProposal {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal#addEdits(org.eclipse.jface.text.IDocument)
 	 */
+	@Override
 	protected void addEdits(IDocument document, TextEdit editRoot) throws CoreException {
 		super.addEdits(document, editRoot);
 		ASTRewrite rewrite= getRewrite();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.java
index e090f9a..eebd5f4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,16 +24,21 @@ import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Block;
+import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.Javadoc;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.PrimitiveType;
 import org.eclipse.jdt.core.dom.ReturnStatement;
 import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Type;
+import org.eclipse.jdt.core.dom.TypeParameter;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
@@ -72,6 +77,7 @@ public abstract class AbstractMethodCorrectionProposal extends LinkedCorrectionP
 		return fSenderBinding;
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		CompilationUnit astRoot= ASTResolving.findParentCompilationUnit(fNode);
 		ASTNode typeDecl= astRoot.findDeclaringNode(fSenderBinding);
@@ -93,7 +99,7 @@ public abstract class AbstractMethodCorrectionProposal extends LinkedCorrectionP
 			MethodDeclaration newStub= getStub(rewrite, newTypeDecl);
 
 			ChildListPropertyDescriptor property= ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
-			List members= (List) newTypeDecl.getStructuralProperty(property);
+			List<BodyDeclaration> members= (List<BodyDeclaration>) newTypeDecl.getStructuralProperty(property);
 
 			int insertIndex;
 			if (isConstructor()) {
@@ -121,7 +127,7 @@ public abstract class AbstractMethodCorrectionProposal extends LinkedCorrectionP
 
 		addNewModifiers(rewrite, targetTypeDecl, decl.modifiers());
 
-		ArrayList takenNames= new ArrayList();
+		ArrayList<String> takenNames= new ArrayList<String>();
 		addNewTypeParameters(rewrite, takenNames, decl.typeParameters());
 
 		decl.setName(newNameNode);
@@ -152,7 +158,7 @@ public abstract class AbstractMethodCorrectionProposal extends LinkedCorrectionP
 			body= ast.newBlock();
 			String placeHolder= CodeGeneration.getMethodBodyContent(getCompilationUnit(), fSenderBinding.getName(), newNameNode.getIdentifier(), isConstructor(), bodyStatement, String.valueOf('\n'));
 			if (placeHolder != null) {
-				ASTNode todoNode= rewrite.createStringPlaceholder(placeHolder, ASTNode.RETURN_STATEMENT);
+				ReturnStatement todoNode= (ReturnStatement)rewrite.createStringPlaceholder(placeHolder, ASTNode.RETURN_STATEMENT);
 				body.statements().add(todoNode);
 			}
 		}
@@ -169,10 +175,10 @@ public abstract class AbstractMethodCorrectionProposal extends LinkedCorrectionP
 		return decl;
 	}
 
-	private int findMethodInsertIndex(List decls, int currPos) {
+	private int findMethodInsertIndex(List<BodyDeclaration> decls, int currPos) {
 		int nDecls= decls.size();
 		for (int i= 0; i < nDecls; i++) {
-			ASTNode curr= (ASTNode) decls.get(i);
+			BodyDeclaration curr= decls.get(i);
 			if (curr instanceof MethodDeclaration && currPos < curr.getStartPosition() + curr.getLength()) {
 				return i + 1;
 			}
@@ -180,11 +186,11 @@ public abstract class AbstractMethodCorrectionProposal extends LinkedCorrectionP
 		return nDecls;
 	}
 
-	private int findConstructorInsertIndex(List decls) {
+	private int findConstructorInsertIndex(List<BodyDeclaration> decls) {
 		int nDecls= decls.size();
 		int lastMethod= 0;
 		for (int i= nDecls - 1; i >= 0; i--) {
-			ASTNode curr= (ASTNode) decls.get(i);
+			BodyDeclaration curr= decls.get(i);
 			if (curr instanceof MethodDeclaration) {
 				if (((MethodDeclaration) curr).isConstructor()) {
 					return i + 1;
@@ -197,10 +203,10 @@ public abstract class AbstractMethodCorrectionProposal extends LinkedCorrectionP
 
 	protected abstract boolean isConstructor();
 
-	protected abstract void addNewModifiers(ASTRewrite rewrite, ASTNode targetTypeDecl, List exceptions);
-	protected abstract void addNewTypeParameters(ASTRewrite rewrite, List takenNames, List params) throws CoreException;
-	protected abstract void addNewParameters(ASTRewrite rewrite, List takenNames, List params) throws CoreException;
-	protected abstract void addNewExceptions(ASTRewrite rewrite, List exceptions) throws CoreException;
+	protected abstract void addNewModifiers(ASTRewrite rewrite, ASTNode targetTypeDecl, List<IExtendedModifier> exceptions);
+	protected abstract void addNewTypeParameters(ASTRewrite rewrite, List<String> takenNames, List<TypeParameter> params) throws CoreException;
+	protected abstract void addNewParameters(ASTRewrite rewrite, List<String> takenNames, List<SingleVariableDeclaration> params) throws CoreException;
+	protected abstract void addNewExceptions(ASTRewrite rewrite, List<Name> exceptions) throws CoreException;
 
 	protected abstract SimpleName getNewName(ASTRewrite rewrite);
 	protected abstract Type getNewMethodType(ASTRewrite rewrite) throws CoreException;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddArgumentCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddArgumentCorrectionProposal.java
index 6cae54f..546bfce 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddArgumentCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddArgumentCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class AddArgumentCorrectionProposal extends LinkedCorrectionProposal {
 	/*(non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal#getRewrite()
 	 */
+	@Override
 	protected ASTRewrite getRewrite() {
 		AST ast= fCallerNode.getAST();
 		ASTRewrite rewrite= ASTRewrite.create(ast);
@@ -67,9 +68,9 @@ public class AddArgumentCorrectionProposal extends LinkedCorrectionProposal {
 	}
 
 	private ChildListPropertyDescriptor getProperty() {
-		List list= fCallerNode.structuralPropertiesForType();
+		List<StructuralPropertyDescriptor> list= fCallerNode.structuralPropertiesForType();
 		for (int i= 0; i < list.size(); i++) {
-			StructuralPropertyDescriptor curr= (StructuralPropertyDescriptor) list.get(i);
+			StructuralPropertyDescriptor curr= list.get(i);
 			if (curr.isChildListProperty() && "arguments".equals(curr.getId())) { //$NON-NLS-1$
 				return (ChildListPropertyDescriptor) curr;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddImportCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddImportCorrectionProposal.java
index 272547f..9e384f1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddImportCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddImportCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class AddImportCorrectionProposal extends ASTRewriteCorrectionProposal {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal#performChange(org.eclipse.ui.IEditorPart, org.eclipse.jface.text.IDocument)
 	 */
+	@Override
 	protected void performChange(IEditorPart activeEditor, IDocument document) throws CoreException {
 		super.performChange(activeEditor, document);
 		rememberSelection();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddTypeParameterProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddTypeParameterProposal.java
index 04c2714..9f9edf5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddTypeParameterProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AddTypeParameterProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,7 @@ public class AddTypeParameterProposal extends LinkedCorrectionProposal {
 		}
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		ASTNode boundNode= fAstRoot.findDeclaringNode(fBinding);
 		ASTNode declNode= null;
@@ -88,7 +89,7 @@ public class AddTypeParameterProposal extends LinkedCorrectionProposal {
 		TypeParameter newTypeParam= ast.newTypeParameter();
 		newTypeParam.setName(ast.newSimpleName(fTypeParamName));
 		if (fBounds != null && fBounds.length > 0) {
-			List typeBounds= newTypeParam.typeBounds();
+			List<Type> typeBounds= newTypeParam.typeBounds();
 			ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(declNode, getImportRewrite());
 			for (int i= 0; i < fBounds.length; i++) {
 				Type newBound= getImportRewrite().addImport(fBounds[i], ast, importRewriteContext);
@@ -98,7 +99,7 @@ public class AddTypeParameterProposal extends LinkedCorrectionProposal {
 		ASTRewrite rewrite= ASTRewrite.create(ast);
 		ListRewrite listRewrite;
 		Javadoc javadoc;
-		List otherTypeParams;
+		List<TypeParameter> otherTypeParams;
 		if (declNode instanceof TypeDeclaration) {
 			TypeDeclaration declaration= (TypeDeclaration) declNode;
 			listRewrite= rewrite.getListRewrite(declaration, TypeDeclaration.TYPE_PARAMETERS_PROPERTY);
@@ -114,7 +115,7 @@ public class AddTypeParameterProposal extends LinkedCorrectionProposal {
 
 		if (javadoc != null && otherTypeParams != null) {
 			ListRewrite tagsRewriter= rewrite.getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);
-			Set previousNames= JavadocTagsSubProcessor.getPreviousTypeParamNames(otherTypeParams, null);
+			Set<String> previousNames= JavadocTagsSubProcessor.getPreviousTypeParamNames(otherTypeParams, null);
 
 			String name= '<' + fTypeParamName + '>';
 			TagElement newTag= ast.newTagElement();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java
index a617102..6d92be1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AssignToVariableAssistProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
+import org.eclipse.jdt.internal.corext.dom.LinkedNodeFinder;
 import org.eclipse.jdt.internal.corext.dom.TokenScanner;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -119,6 +120,7 @@ public class AssignToVariableAssistProposal extends LinkedCorrectionProposal {
 		setImage(JavaPluginImages.get(JavaPluginImages.IMG_FIELD_PRIVATE));
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		if (fVariableKind == FIELD) {
 			return doAddField();
@@ -265,6 +267,13 @@ public class AssignToVariableAssistProposal extends LinkedCorrectionProposal {
 			addLinkedPosition(rewrite.track(fieldDeclaration.getType()), false, KEY_TYPE);
 		}
 		addLinkedPosition(rewrite.track(accessName), true, KEY_NAME);
+		IVariableBinding variableBinding= newDeclFrag.resolveBinding();
+		if (variableBinding != null) {
+			SimpleName[] linkedNodes= LinkedNodeFinder.findByBinding(fNodeToAssign.getRoot(), variableBinding);
+			for (int i= 0; i < linkedNodes.length; i++) {
+				addLinkedPosition(rewrite.track(linkedNodes[i]), false, KEY_NAME);
+			}
+		}
 		setEndPosition(rewrite.track(selectionNode));
 
 		return rewrite;
@@ -276,7 +285,7 @@ public class AssignToVariableAssistProposal extends LinkedCorrectionProposal {
 		}
 
 		ChildListPropertyDescriptor property= ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
-		List decls= (List) newTypeDecl.getStructuralProperty(property);
+		List<BodyDeclaration> decls= (List<BodyDeclaration>) newTypeDecl.getStructuralProperty(property);
 		AST ast= newTypeDecl.getAST();
 		String[] varNames= suggestFieldNames(fTypeBinding, expression, modifiers);
 		for (int i= 0; i < varNames.length; i++) {
@@ -324,22 +333,22 @@ public class AssignToVariableAssistProposal extends LinkedCorrectionProposal {
 		return StubUtility.getVariableNameSuggestions(varKind, project, binding, expression, getUsedVariableNames());
 	}
 
-	private Collection getUsedVariableNames() {
+	private Collection<String> getUsedVariableNames() {
 		return Arrays.asList(ASTResolving.getUsedVariableNames(fNodeToAssign));
 	}
 
-	private int findAssignmentInsertIndex(List statements) {
+	private int findAssignmentInsertIndex(List<Statement> statements) {
 
-		HashSet paramsBefore= new HashSet();
-		List params = ((MethodDeclaration) fNodeToAssign.getParent()).parameters();
+		HashSet<String> paramsBefore= new HashSet<String>();
+		List<SingleVariableDeclaration> params = ((MethodDeclaration) fNodeToAssign.getParent()).parameters();
 		for (int i = 0; i < params.size() && (params.get(i) != fNodeToAssign); i++) {
-			SingleVariableDeclaration decl= (SingleVariableDeclaration) params.get(i);
+			SingleVariableDeclaration decl= params.get(i);
 			paramsBefore.add(decl.getName().getIdentifier());
 		}
 
 		int i= 0;
 		for (i = 0; i < statements.size(); i++) {
-			Statement curr= (Statement) statements.get(i);
+			Statement curr= statements.get(i);
 			switch (curr.getNodeType()) {
 				case ASTNode.CONSTRUCTOR_INVOCATION:
 				case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
@@ -366,9 +375,9 @@ public class AssignToVariableAssistProposal extends LinkedCorrectionProposal {
 
 	}
 
-	private int findFieldInsertIndex(List decls, int currPos) {
+	private int findFieldInsertIndex(List<BodyDeclaration> decls, int currPos) {
 		for (int i= decls.size() - 1; i >= 0; i--) {
-			ASTNode curr= (ASTNode) decls.get(i);
+			ASTNode curr= decls.get(i);
 			if (curr instanceof FieldDeclaration && currPos > curr.getStartPosition() + curr.getLength()) {
 				return i + 1;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CUCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CUCorrectionProposal.java
index 50bb9e1..47ffedf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CUCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CUCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -80,6 +80,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 
 	private ICompilationUnit fCompilationUnit;
 	private LinkedProposalModel fLinkedProposalModel;
+	private boolean fSwitchedEditor;
 
 
 	/**
@@ -143,6 +144,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 		fLinkedProposalModel= model;
 	}
 
+	@Override
 	public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 
 		final StringBuffer buf= new StringBuffer();
@@ -164,28 +166,34 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 					}
 				}
 
+				@Override
 				public boolean visit(MoveTargetEdit edit) {
 					return true; //rangeAdded(edit);
 				}
 
+				@Override
 				public boolean visit(CopyTargetEdit edit) {
 					return true; //return rangeAdded(edit);
 				}
 
+				@Override
 				public boolean visit(InsertEdit edit) {
 					return rangeAdded(edit);
 				}
 
+				@Override
 				public boolean visit(ReplaceEdit edit) {
 					if (edit.getLength() > 0)
 						return rangeAdded(edit);
 					return rangeRemoved(edit);
 				}
 
+				@Override
 				public boolean visit(MoveSourceEdit edit) {
 					return rangeRemoved(edit);
 				}
 
+				@Override
 				public boolean visit(DeleteEdit edit) {
 					return rangeRemoved(edit);
 				}
@@ -274,6 +282,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposal#apply(org.eclipse.jface.text.IDocument)
 	 */
+	@Override
 	public void apply(IDocument document) {
 		try {
 			ICompilationUnit unit= getCompilationUnit();
@@ -287,6 +296,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 				if (part == null) {
 					part= JavaUI.openInEditor(unit);
 					if (part != null) {
+						fSwitchedEditor= true;
 						document= JavaUI.getDocumentProvider().getDocument(part.getEditorInput());
 					}
 				}
@@ -318,6 +328,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal#performChange(org.eclipse.jface.text.IDocument, org.eclipse.ui.IEditorPart)
 	 */
+	@Override
 	protected void performChange(IEditorPart part, IDocument document) throws CoreException {
 		try {
 			super.performChange(part, document);
@@ -329,7 +340,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 				if (fLinkedProposalModel.hasLinkedPositions() && part instanceof JavaEditor) {
 					// enter linked mode
 					ITextViewer viewer= ((JavaEditor) part).getViewer();
-					new LinkedProposalModelPresenter().enterLinkedMode(viewer, part, fLinkedProposalModel);
+					new LinkedProposalModelPresenter().enterLinkedMode(viewer, part, fSwitchedEditor, fLinkedProposalModel);
 				} else if (part instanceof ITextEditor) {
 					LinkedProposalPositionGroup.PositionInformation endPosition= fLinkedProposalModel.getEndPosition();
 					if (endPosition != null) {
@@ -385,6 +396,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal#createChange()
 	 */
+	@Override
 	protected final Change createChange() throws CoreException {
 		return createTextChange(); // make sure that only text changes are allowed here
 	}
@@ -421,6 +433,7 @@ public class CUCorrectionProposal extends ChangeCorrectionProposal  {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		try {
 			return getPreviewContent();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CastCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CastCorrectionProposal.java
index 632de79..a46c372 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CastCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CastCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -118,6 +118,7 @@ public class CastCorrectionProposal extends LinkedCorrectionProposal {
 	}
 
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		AST ast= fNodeToCast.getAST();
 		ASTRewrite rewrite= ASTRewrite.create(ast);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ChangeMethodSignatureProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ChangeMethodSignatureProposal.java
index 4d5140d..b43f5fb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ChangeMethodSignatureProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ChangeMethodSignatureProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,8 +38,8 @@ import org.eclipse.jdt.core.dom.TextElement;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
@@ -110,6 +110,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 		fExceptionChanges= exceptionChanges;
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		CompilationUnit astRoot= (CompilationUnit) fInvocationNode.getRoot();
 		ASTNode methodDecl= astRoot.findDeclaringNode(fSenderBinding);
@@ -140,7 +141,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 	private void modifyParameters(ASTRewrite rewrite, MethodDeclaration methodDecl) {
 		AST ast= methodDecl.getAST();
 
-		ArrayList usedNames= new ArrayList();
+		ArrayList<String> usedNames= new ArrayList<String>();
 		boolean hasCreatedVariables= false;
 
 		IVariableBinding[] declaredFields= fSenderBinding.getDeclaringClass().getDeclaredFields();
@@ -152,14 +153,14 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 		ImportRewriteContext context= new ContextSensitiveImportRewriteContext(methodDecl, imports);
 		ListRewrite listRewrite= rewrite.getListRewrite(methodDecl, MethodDeclaration.PARAMETERS_PROPERTY);
 
-		List parameters= methodDecl.parameters(); // old parameters
+		List<SingleVariableDeclaration> parameters= methodDecl.parameters(); // old parameters
 		int k= 0; // index over the oldParameters
 
 		for (int i= 0; i < fParameterChanges.length; i++) {
 			ChangeDescription curr= fParameterChanges[i];
 
 			if (curr == null) {
-				SingleVariableDeclaration oldParam= (SingleVariableDeclaration) parameters.get(k);
+				SingleVariableDeclaration oldParam= parameters.get(k);
 				usedNames.add(oldParam.getName().getIdentifier());
 				k++;
 			} else if (curr instanceof InsertDescription) {
@@ -188,7 +189,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 					desc.resultingTagArg= null;
 				}
 			} else if (curr instanceof RemoveDescription) {
-				SingleVariableDeclaration decl= (SingleVariableDeclaration) parameters.get(k);
+				SingleVariableDeclaration decl= parameters.get(k);
 
 				listRewrite.remove(decl, null);
 				k++;
@@ -201,7 +202,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 				EditDescription desc= (EditDescription) curr;
 
 				ITypeBinding newTypeBinding= desc.type;
-				SingleVariableDeclaration decl= (SingleVariableDeclaration) parameters.get(k);
+				SingleVariableDeclaration decl= parameters.get(k);
 
 				if (k == parameters.size() - 1 && i == fParameterChanges.length - 1 && decl.isVarargs() && newTypeBinding.isArray()) {
 					newTypeBinding= newTypeBinding.getElementType(); // stick with varargs if it was before
@@ -239,17 +240,17 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 
 				TagElement tagNode= findParamTag(methodDecl, decl);
 				if (tagNode != null) {
-					List fragments= tagNode.fragments();
+					List<? extends ASTNode> fragments= tagNode.fragments();
 					if (!fragments.isEmpty()) {
 						SimpleName arg= ast.newSimpleName("x"); //$NON-NLS-1$
-						rewrite.replace((ASTNode) fragments.get(0), arg, null);
+						rewrite.replace(fragments.get(0), arg, null);
 						desc.resultingTagArg= arg;
 					}
 				}
 
 			} else if (curr instanceof SwapDescription) {
-				SingleVariableDeclaration decl1= (SingleVariableDeclaration) parameters.get(k);
-				SingleVariableDeclaration decl2= (SingleVariableDeclaration) parameters.get(((SwapDescription) curr).index);
+				SingleVariableDeclaration decl1= parameters.get(k);
+				SingleVariableDeclaration decl2= parameters.get(((SwapDescription) curr).index);
 
 				rewrite.replace(decl1, rewrite.createCopyTarget(decl2), null);
 				rewrite.replace(decl2, rewrite.createCopyTarget(decl1), null);
@@ -281,7 +282,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 		fixupNames(rewrite, usedNames);
 	}
 
-	private void fixupNames(ASTRewrite rewrite, ArrayList usedNames) {
+	private void fixupNames(ASTRewrite rewrite, ArrayList<String> usedNames) {
 		AST ast= rewrite.getAST();
 		// set names for new parameters
 		for (int i= 0; i < fParameterChanges.length; i++) {
@@ -294,7 +295,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 
 				// collect name suggestions
 				String favourite= null;
-				String[] excludedNames= (String[]) usedNames.toArray(new String[usedNames.size()]);
+				String[] excludedNames= usedNames.toArray(new String[usedNames.size()]);
 
 				String suggestedName= desc.name;
 				if (suggestedName != null) {
@@ -347,10 +348,10 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 		return null;
 	}
 
-	private TagElement insertParamTag(ListRewrite tagRewriter, List parameters, int currentIndex, TagElement newTagElement) {
-		HashSet previousNames= new HashSet();
+	private TagElement insertParamTag(ListRewrite tagRewriter, List<SingleVariableDeclaration> parameters, int currentIndex, TagElement newTagElement) {
+		HashSet<String> previousNames= new HashSet<String>();
 		for (int n = 0; n < currentIndex; n++) {
-			SingleVariableDeclaration var= (SingleVariableDeclaration) parameters.get(n);
+			SingleVariableDeclaration var= parameters.get(n);
 			previousNames.add(var.getName().getIdentifier());
 		}
 
@@ -365,7 +366,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 		ImportRewriteContext context= new ContextSensitiveImportRewriteContext(methodDecl, imports);
 		ListRewrite listRewrite= rewrite.getListRewrite(methodDecl, MethodDeclaration.THROWN_EXCEPTIONS_PROPERTY);
 
-		List exceptions= methodDecl.thrownExceptions(); // old exceptions
+		List<Name> exceptions= methodDecl.thrownExceptions(); // old exceptions
 		int k= 0; // index over the old exceptions
 
 		for (int i= 0; i < fExceptionChanges.length; i++) {
@@ -396,7 +397,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 				}
 
 			} else if (curr instanceof RemoveDescription) {
-				Name node= (Name) exceptions.get(k);
+				Name node= exceptions.get(k);
 
 				listRewrite.remove(node, null);
 				k++;
@@ -408,7 +409,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 			} else if (curr instanceof EditDescription) {
 				EditDescription desc= (EditDescription) curr;
 
-				Name oldNode= (Name) exceptions.get(k);
+				Name oldNode= exceptions.get(k);
 
 				String type= imports.addImport(desc.type, context);
 				ASTNode newNode= ASTNodeFactory.newName(ast, type);
@@ -427,8 +428,8 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 				}
 
 			} else if (curr instanceof SwapDescription) {
-				Name decl1= (Name) exceptions.get(k);
-				Name decl2= (Name) exceptions.get(((SwapDescription) curr).index);
+				Name decl1= exceptions.get(k);
+				Name decl2= exceptions.get(((SwapDescription) curr).index);
 
 				rewrite.replace(decl1, rewrite.createCopyTarget(decl2), null);
 				rewrite.replace(decl2, rewrite.createCopyTarget(decl1), null);
@@ -445,7 +446,7 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 		}
 	}
 
-	private void insertTabStop(ASTRewrite rewriter, List fragments, String linkedName) {
+	private void insertTabStop(ASTRewrite rewriter, List<ASTNode> fragments, String linkedName) {
 		TextElement textElement= rewriter.getAST().newTextElement();
 		textElement.setText(""); //$NON-NLS-1$
 		fragments.add(textElement);
@@ -461,10 +462,10 @@ public class ChangeMethodSignatureProposal extends LinkedCorrectionProposal {
 		return null;
 	}
 
-	private TagElement insertThrowsTag(ListRewrite tagRewriter, List exceptions, int currentIndex, TagElement newTagElement) {
-		HashSet previousNames= new HashSet();
+	private TagElement insertThrowsTag(ListRewrite tagRewriter, List<Name> exceptions, int currentIndex, TagElement newTagElement) {
+		HashSet<String> previousNames= new HashSet<String>();
 		for (int n = 0; n < currentIndex; n++) {
-			Name curr= (Name) exceptions.get(n);
+			Name curr= exceptions.get(n);
 			previousNames.add(ASTNodes.getSimpleNameIdentifier(curr));
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ConstructorFromSuperclassProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ConstructorFromSuperclassProposal.java
index 754a019..eb19bbe 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ConstructorFromSuperclassProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ConstructorFromSuperclassProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.Javadoc;
@@ -66,6 +67,7 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getImage()
 	 */
+	@Override
 	public Image getImage() {
 		return JavaPlugin.getImageDescriptorRegistry().get(
 				new JavaElementImageDescriptor(JavaPluginImages.DESC_MISC_PUBLIC, JavaElementImageDescriptor.CONSTRUCTOR, JavaElementImageProvider.SMALL_SIZE)
@@ -75,6 +77,7 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.ChangeCorrectionProposal#getName()
 	 */
+	@Override
 	public String getName() {
 		StringBuffer buf= new StringBuffer();
 		buf.append(fTypeNode.getName().getIdentifier());
@@ -95,6 +98,7 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal#getRewrite()
 	 */
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		AST ast= fTypeNode.getAST();
 
@@ -117,9 +121,9 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 	}
 
 	private void addLinkedRanges(ASTRewrite rewrite, MethodDeclaration newStub) {
-		List parameters= newStub.parameters();
+		List<SingleVariableDeclaration> parameters= newStub.parameters();
 		for (int i= 0; i < parameters.size(); i++) {
-			SingleVariableDeclaration curr= (SingleVariableDeclaration) parameters.get(i);
+			SingleVariableDeclaration curr= parameters.get(i);
 			String name= curr.getName().getIdentifier();
 			addLinkedPosition(rewrite.track(curr.getType()), false, "arg_type_" + name); //$NON-NLS-1$
 			addLinkedPosition(rewrite.track(curr.getName()), false, "arg_name_" + name); //$NON-NLS-1$
@@ -136,7 +140,7 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 
 		SuperConstructorInvocation invocation= null;
 
-		List parameters= decl.parameters();
+		List<SingleVariableDeclaration> parameters= decl.parameters();
 		String[] paramNames= getArgumentNames(binding);
 
 		ITypeBinding enclosingInstance= getEnclosingInstance();
@@ -157,7 +161,7 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 				parameters.add(var);
 			}
 
-			List thrownExceptions= decl.thrownExceptions();
+			List<Name> thrownExceptions= decl.thrownExceptions();
 			ITypeBinding[] excTypes= binding.getExceptionTypes();
 			for (int i= 0; i < excTypes.length; i++) {
 				String excTypeName= getImportRewrite().addImport(excTypes[i], importRewriteContext);
@@ -168,7 +172,7 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 				invocation= ast.newSuperConstructorInvocation();
 			}
 
-			List arguments= invocation.arguments();
+			List<Expression> arguments= invocation.arguments();
 			for (int i= 0; i < paramNames.length; i++) {
 				Name argument= ast.newSimpleName(paramNames[i]);
 				arguments.add(argument);
@@ -192,7 +196,7 @@ public class ConstructorFromSuperclassProposal extends LinkedCorrectionProposal
 		return decl;
 	}
 
-	private SuperConstructorInvocation addEnclosingInstanceAccess(ASTRewrite rewrite, ImportRewriteContext importRewriteContext, List parameters, String[] paramNames, ITypeBinding enclosingInstance) {
+	private SuperConstructorInvocation addEnclosingInstanceAccess(ASTRewrite rewrite, ImportRewriteContext importRewriteContext, List<SingleVariableDeclaration> parameters, String[] paramNames, ITypeBinding enclosingInstance) {
 		AST ast= rewrite.getAST();
 		SuperConstructorInvocation invocation= ast.newSuperConstructorInvocation();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectMainTypeNameProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectMainTypeNameProposal.java
index d04e28b..256756f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectMainTypeNameProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectMainTypeNameProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class CorrectMainTypeNameProposal extends ASTRewriteCorrectionProposal {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal#getRewrite()
 	 */
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		CompilationUnit astRoot= fContext.getASTRoot();
 
@@ -79,9 +80,9 @@ public class CorrectMainTypeNameProposal extends ASTRewriteCorrectionProposal {
 		return rewrite;
 	}
 
-	private AbstractTypeDeclaration findTypeDeclaration(List types, String name) {
-		for (Iterator iter= types.iterator(); iter.hasNext();) {
-			AbstractTypeDeclaration decl= (AbstractTypeDeclaration) iter.next();
+	private AbstractTypeDeclaration findTypeDeclaration(List<AbstractTypeDeclaration> types, String name) {
+		for (Iterator<AbstractTypeDeclaration> iter= types.iterator(); iter.hasNext();) {
+			AbstractTypeDeclaration decl= iter.next();
 			if (name.equals(decl.getName().getIdentifier())) {
 				return decl;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java
index 43e8334..91961ee 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class CorrectPackageDeclarationProposal extends CUCorrectionProposal {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal#addEdits(org.eclipse.jdt.internal.corext.textmanipulation.TextBuffer)
 	 */
+	@Override
 	protected void addEdits(IDocument doc, TextEdit root) throws CoreException {
 		super.addEdits(doc, root);
 
@@ -77,6 +78,7 @@ public class CorrectPackageDeclarationProposal extends CUCorrectionProposal {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.ChangeCorrectionProposal#getName()
 	 */
+	@Override
 	public String getName() {
 		ICompilationUnit cu= getCompilationUnit();
 		IPackageFragment parentPack= (IPackageFragment) cu.getParent();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/FixCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/FixCorrectionProposal.java
index 17c8ae0..cd5ae05 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/FixCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/FixCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class FixCorrectionProposal extends CUCorrectionProposal implements IComp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal#getImage()
 	 */
+	@Override
 	public Image getImage() {
 		IStatus status= getFixStatus();
 		if (status != null && !status.isOK()) {
@@ -110,6 +111,7 @@ public class FixCorrectionProposal extends CUCorrectionProposal implements IComp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal#getAdditionalProposalInfo()
 	 */
+	@Override
 	public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 		StringBuffer result= new StringBuffer();
 
@@ -139,6 +141,7 @@ public class FixCorrectionProposal extends CUCorrectionProposal implements IComp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal#getRelevance()
 	 */
+	@Override
 	public int getRelevance() {
 		IStatus status= getFixStatus();
 		if (status != null && !status.isOK()) {
@@ -151,6 +154,7 @@ public class FixCorrectionProposal extends CUCorrectionProposal implements IComp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal#createTextChange()
 	 */
+	@Override
 	protected TextChange createTextChange() throws CoreException {
 		CompilationUnitChange createChange= fFix.createChange(null);
 		createChange.setSaveMode(TextFileChange.LEAVE_DIRTY);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ImplementInterfaceProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ImplementInterfaceProposal.java
index 4347924..45c393b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ImplementInterfaceProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ImplementInterfaceProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class ImplementInterfaceProposal extends LinkedCorrectionProposal {
 		setDisplayName(Messages.format(CorrectionMessages.ImplementInterfaceProposal_name, args));
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		ASTNode boundNode= fAstRoot.findDeclaringNode(fBinding);
 		ASTNode declNode= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/LinkedNamesAssistProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/LinkedNamesAssistProposal.java
index d1a6cde..61a165f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/LinkedNamesAssistProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/LinkedNamesAssistProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,10 +31,10 @@ import org.eclipse.jface.text.contentassist.ICompletionProposalExtension6;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.jface.text.link.LinkedModeModel;
 import org.eclipse.jface.text.link.LinkedModeUI;
-import org.eclipse.jface.text.link.LinkedPosition;
-import org.eclipse.jface.text.link.LinkedPositionGroup;
 import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags;
 import org.eclipse.jface.text.link.LinkedModeUI.IExitPolicy;
+import org.eclipse.jface.text.link.LinkedPosition;
+import org.eclipse.jface.text.link.LinkedPositionGroup;
 
 import org.eclipse.ui.IEditorPart;
 
@@ -144,10 +144,10 @@ public class LinkedNamesAssistProposal implements IJavaCompletionProposal, IComp
 			}
 
 			// sort for iteration order, starting with the node @ offset
-			Arrays.sort(sameNodes, new Comparator() {
+			Arrays.sort(sameNodes, new Comparator<ASTNode>() {
 
-				public int compare(Object o1, Object o2) {
-					return rank((ASTNode) o1) - rank((ASTNode) o2);
+				public int compare(ASTNode o1, ASTNode o2) {
+					return rank(o1) - rank(o2);
 				}
 
 				/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingAnnotationAttributesProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingAnnotationAttributesProposal.java
index d8a909d..bf80ac4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingAnnotationAttributesProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingAnnotationAttributesProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,8 +32,8 @@ import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NormalAnnotation;
 import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
 
@@ -56,6 +56,7 @@ public class MissingAnnotationAttributesProposal extends LinkedCorrectionProposa
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal#getRewrite()
 	 */
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		AST ast= fAnnotation.getAST();
 
@@ -78,11 +79,11 @@ public class MissingAnnotationAttributesProposal extends LinkedCorrectionProposa
 	}
 
 	private void addMissingAtributes(ITypeBinding binding, ListRewrite listRewriter) {
-		Set implementedAttribs= new HashSet();
+		Set<String> implementedAttribs= new HashSet<String>();
 		if (fAnnotation instanceof NormalAnnotation) {
-			List list= ((NormalAnnotation) fAnnotation).values();
+			List<MemberValuePair> list= ((NormalAnnotation) fAnnotation).values();
 			for (int i= 0; i < list.size(); i++) {
-				MemberValuePair curr= (MemberValuePair) list.get(i);
+				MemberValuePair curr= list.get(i);
 				implementedAttribs.add(curr.getName().getIdentifier());
 			}
 		} else if (fAnnotation instanceof SingleMemberAnnotation){
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingReturnTypeCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingReturnTypeCorrectionProposal.java
index 871b93d..daa0f16 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingReturnTypeCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/MissingReturnTypeCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.ReturnStatement;
+import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 
 import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
@@ -48,6 +49,7 @@ public class MissingReturnTypeCorrectionProposal extends LinkedCorrectionProposa
 		fExistingReturn= existingReturn;
 	}
 
+	@Override
 	public String getName() {
 		if (fExistingReturn != null) {
 			return CorrectionMessages.MissingReturnTypeCorrectionProposal_changereturnstatement_description;
@@ -59,6 +61,7 @@ public class MissingReturnTypeCorrectionProposal extends LinkedCorrectionProposa
 	/*(non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal#getRewrite()
 	 */
+	@Override
 	protected ASTRewrite getRewrite() {
 		AST ast= fMethodDecl.getAST();
 
@@ -79,11 +82,11 @@ public class MissingReturnTypeCorrectionProposal extends LinkedCorrectionProposa
 
 			Block block= fMethodDecl.getBody();
 
-			List statements= block.statements();
+			List<Statement> statements= block.statements();
 			int nStatements= statements.size();
 			ASTNode lastStatement= null;
 			if (nStatements > 0) {
-				lastStatement= (ASTNode) statements.get(nStatements - 1);
+				lastStatement= statements.get(nStatements - 1);
 			}
 
 			if (returnBinding != null && lastStatement instanceof ExpressionStatement && lastStatement.getNodeType() != ASTNode.ASSIGNMENT) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java
index 071c9ad..bcef4e7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ModifierChangeCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@ package org.eclipse.jdt.internal.ui.text.correction.proposals;
 
 import org.eclipse.swt.graphics.Image;
 
-import org.eclipse.text.edits.TextEditGroup;
-
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
@@ -29,6 +27,8 @@ import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 
 import org.eclipse.jdt.internal.corext.dom.ModifierRewrite;
 import org.eclipse.jdt.internal.corext.dom.VariableDeclarationRewrite;
+import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup;
+import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup.PositionInformation;
 
 import org.eclipse.jdt.internal.ui.text.correction.ASTResolving;
 
@@ -47,17 +47,15 @@ public class ModifierChangeCorrectionProposal extends LinkedCorrectionProposal {
 		fExcludedModifiers= excludedModifiers;
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() {
 		CompilationUnit astRoot= ASTResolving.findParentCompilationUnit(fNode);
 		ASTNode boundNode= astRoot.findDeclaringNode(fBinding);
 		ASTNode declNode= null;
 
-		TextEditGroup selectionDescription= null;
-
 		if (boundNode != null) {
 			declNode= boundNode; // is same CU
 		} else {
-			selectionDescription= new TextEditGroup("selection"); // in different CU, needs selection //$NON-NLS-1$
 			//setSelectionDescription(selectionDescription);
 			CompilationUnit newRoot= ASTResolving.createQuickFixAST(getCompilationUnit(), null);
 			declNode= newRoot.findDeclaringNode(fBinding.getKey());
@@ -72,13 +70,13 @@ public class ModifierChangeCorrectionProposal extends LinkedCorrectionProposal {
 				if (parent instanceof FieldDeclaration) {
 					FieldDeclaration fieldDecl= (FieldDeclaration) parent;
 					if (fieldDecl.fragments().size() > 1 && (fieldDecl.getParent() instanceof AbstractTypeDeclaration)) { // split
-						VariableDeclarationRewrite.rewriteModifiers(fieldDecl, new VariableDeclarationFragment[] {fragment}, fIncludedModifiers, fExcludedModifiers, rewrite, selectionDescription);
+						VariableDeclarationRewrite.rewriteModifiers(fieldDecl, new VariableDeclarationFragment[] {fragment}, fIncludedModifiers, fExcludedModifiers, rewrite, null);
 						return rewrite;
 					}
 				} else if (parent instanceof VariableDeclarationStatement) {
 					VariableDeclarationStatement varDecl= (VariableDeclarationStatement) parent;
 					if (varDecl.fragments().size() > 1 && (varDecl.getParent() instanceof Block)) { // split
-						VariableDeclarationRewrite.rewriteModifiers(varDecl, new VariableDeclarationFragment[] {fragment}, fIncludedModifiers, fExcludedModifiers, rewrite, selectionDescription);
+						VariableDeclarationRewrite.rewriteModifiers(varDecl, new VariableDeclarationFragment[] {fragment}, fIncludedModifiers, fExcludedModifiers, rewrite, null);
 						return rewrite;
 					}
 				} else if (parent instanceof VariableDeclarationExpression) {
@@ -87,7 +85,16 @@ public class ModifierChangeCorrectionProposal extends LinkedCorrectionProposal {
 				declNode= parent;
 			}
 			ModifierRewrite listRewrite= ModifierRewrite.create(rewrite, declNode);
-			listRewrite.setModifiers(fIncludedModifiers, fExcludedModifiers, selectionDescription);
+			PositionInformation trackedDeclNode= listRewrite.setModifiers(fIncludedModifiers, fExcludedModifiers, null);
+			
+			LinkedProposalPositionGroup positionGroup= new LinkedProposalPositionGroup("group"); //$NON-NLS-1$
+			positionGroup.addPosition(trackedDeclNode);
+			getLinkedProposalModel().addPositionGroup(positionGroup);
+			
+			if (boundNode != null) {
+				// only set end position if in same CU
+				setEndPosition(rewrite.track(fNode));
+			}
 			return rewrite;
 		}
 		return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewAnnotationMemberProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewAnnotationMemberProposal.java
index b6f1e42..70b0e1c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewAnnotationMemberProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewAnnotationMemberProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
 import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
+import org.eclipse.jdt.core.dom.BodyDeclaration;
 import org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
@@ -53,6 +54,7 @@ public class NewAnnotationMemberProposal extends LinkedCorrectionProposal {
 		fSenderBinding= binding;
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		CompilationUnit astRoot= ASTResolving.findParentCompilationUnit(fInvocationNode);
 		ASTNode typeDecl= astRoot.findDeclaringNode(fSenderBinding);
@@ -71,7 +73,7 @@ public class NewAnnotationMemberProposal extends LinkedCorrectionProposal {
 			AnnotationTypeMemberDeclaration newStub= getStub(rewrite, (AnnotationTypeDeclaration) newTypeDecl);
 
 			ChildListPropertyDescriptor property= ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
-			List members= (List) newTypeDecl.getStructuralProperty(property);
+			List<? extends ASTNode> members= (List<? extends ASTNode>) newTypeDecl.getStructuralProperty(property);
 			int insertIndex= members.size();
 
 			ListRewrite listRewriter= rewrite.getListRewrite(newTypeDecl, property);
@@ -122,7 +124,7 @@ public class NewAnnotationMemberProposal extends LinkedCorrectionProposal {
 	}
 
 	private int evaluateModifiers(AnnotationTypeDeclaration targetTypeDecl) {
-		List methodDecls= targetTypeDecl.bodyDeclarations();
+		List<BodyDeclaration> methodDecls= targetTypeDecl.bodyDeclarations();
 		for (int i= 0; i < methodDecls.size(); i++) {
 			Object curr= methodDecls.get(i);
 			if (curr instanceof AnnotationTypeMemberDeclaration) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewCUUsingWizardProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewCUUsingWizardProposal.java
index f8c890f..b407eef 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewCUUsingWizardProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewCUUsingWizardProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -211,6 +211,7 @@ public class NewCUUsingWizardProposal extends ChangeCorrectionProposal {
 	}
 
 
+	@Override
 	public void apply(IDocument document) {
 		StructuredSelection selection= new StructuredSelection(fCompilationUnit);
 		NewElementWizard wizard= createWizard(selection);
@@ -334,7 +335,7 @@ public class NewCUUsingWizardProposal extends ChangeCorrectionProposal {
 				if (type.isClass() && (fTypeKind == K_CLASS)) {
 					page.setSuperClass(type.getQualifiedName(), true);
 				} else if (type.isInterface()) {
-					List superInterfaces= new ArrayList();
+					List<String> superInterfaces= new ArrayList<String>();
 					superInterfaces.add(type.getQualifiedName());
 					page.setSuperInterfaces(superInterfaces, true);
 				}
@@ -380,6 +381,7 @@ public class NewCUUsingWizardProposal extends ChangeCorrectionProposal {
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension5#getAdditionalProposalInfo(org.eclipse.core.runtime.IProgressMonitor)
 	 * @since 3.5
 	 */
+	@Override
 	public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
 		StringBuffer buf= new StringBuffer();
 		switch (fTypeKind) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.java
index c45c9ed..e04108b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.Modifier;
@@ -27,6 +28,7 @@ import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Type;
+import org.eclipse.jdt.core.dom.TypeParameter;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 
@@ -51,16 +53,18 @@ public class NewDefiningMethodProposal extends AbstractMethodCorrectionProposal
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#isConstructor()
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#isConstructor()
 	 */
+	@Override
 	protected boolean isConstructor() {
 		return fMethod.isConstructor();
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
 	 */
-	protected void addNewParameters(ASTRewrite rewrite, List takenNames, List params) throws CoreException {
+	@Override
+	protected void addNewParameters(ASTRewrite rewrite, List<String> takenNames, List<SingleVariableDeclaration> params) throws CoreException {
 		AST ast= rewrite.getAST();
 		ImportRewrite importRewrite= getImportRewrite();
 		ITypeBinding[] bindings= fMethod.getParameterTypes();
@@ -90,8 +94,9 @@ public class NewDefiningMethodProposal extends AbstractMethodCorrectionProposal
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#getNewName()
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#getNewName(org.eclipse.jdt.core.dom.rewrite.ASTRewrite)
 	 */
+	@Override
 	protected SimpleName getNewName(ASTRewrite rewrite) {
 		AST ast= rewrite.getAST();
 		SimpleName nameNode= ast.newSimpleName(fMethod.getName());
@@ -111,23 +116,26 @@ public class NewDefiningMethodProposal extends AbstractMethodCorrectionProposal
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewModifiers(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewModifiers(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, org.eclipse.jdt.core.dom.ASTNode, java.util.List)
 	 */
-	protected void addNewModifiers(ASTRewrite rewrite, ASTNode targetTypeDecl, List modifiers) {
+	@Override
+	protected void addNewModifiers(ASTRewrite rewrite, ASTNode targetTypeDecl, List<IExtendedModifier> modifiers) {
 		modifiers.addAll(rewrite.getAST().newModifiers(evaluateModifiers()));
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#getNewMethodType(org.eclipse.jdt.core.dom.rewrite.ASTRewrite)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#getNewMethodType(org.eclipse.jdt.core.dom.rewrite.ASTRewrite)
 	 */
+	@Override
 	protected Type getNewMethodType(ASTRewrite rewrite) throws CoreException {
 		return getImportRewrite().addImport(fMethod.getReturnType(), rewrite.getAST());
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewExceptions(org.eclipse.jdt.core.dom.AST, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewExceptions(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List)
 	 */
-	protected void addNewExceptions(ASTRewrite rewrite, List exceptions) throws CoreException {
+	@Override
+	protected void addNewExceptions(ASTRewrite rewrite, List<Name> exceptions) throws CoreException {
 		AST ast= rewrite.getAST();
 		ImportRewrite importRewrite= getImportRewrite();
 		ITypeBinding[] bindings= fMethod.getExceptionTypes();
@@ -141,9 +149,10 @@ public class NewDefiningMethodProposal extends AbstractMethodCorrectionProposal
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewTypeParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewTypeParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
 	 */
-	protected void addNewTypeParameters(ASTRewrite rewrite, List takenNames, List params) throws CoreException {
+	@Override
+	protected void addNewTypeParameters(ASTRewrite rewrite, List<String> takenNames, List<TypeParameter> params) throws CoreException {
 
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewMethodCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewMethodCorrectionProposal.java
index 1b7e114..324f9a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewMethodCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewMethodCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
 import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
@@ -39,6 +40,7 @@ import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.SuperMethodInvocation;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.TypeParameter;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
 
@@ -55,10 +57,10 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 	private static final String KEY_NAME= "name"; //$NON-NLS-1$
 	private static final String KEY_TYPE= "type"; //$NON-NLS-1$
 
-	private List fArguments;
+	private List<Expression> fArguments;
 
 	//	invocationNode is MethodInvocation, ConstructorInvocation, SuperConstructorInvocation, ClassInstanceCreation, SuperMethodInvocation
-	public NewMethodCorrectionProposal(String label, ICompilationUnit targetCU, ASTNode invocationNode,  List arguments, ITypeBinding binding, int relevance, Image image) {
+	public NewMethodCorrectionProposal(String label, ICompilationUnit targetCU, ASTNode invocationNode,  List<Expression> arguments, ITypeBinding binding, int relevance, Image image) {
 		super(label, targetCU, invocationNode, binding, relevance, image);
 		fArguments= arguments;
 	}
@@ -91,7 +93,7 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 				modifiers |= Modifier.PRIVATE;
 			} else if (node instanceof AnonymousClassDeclaration && ASTNodes.isParent(node, targetTypeDecl)) {
 				modifiers |= Modifier.PROTECTED;
-				if (ASTResolving.isInStaticContext(node)) {
+				if (ASTResolving.isInStaticContext(node) && expression == null) {
 					modifiers |= Modifier.STATIC;
 				}
 			} else {
@@ -103,16 +105,18 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewModifiers(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewModifiers(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, org.eclipse.jdt.core.dom.ASTNode, java.util.List)
 	 */
-	protected void addNewModifiers(ASTRewrite rewrite, ASTNode targetTypeDecl, List modifiers) {
+	@Override
+	protected void addNewModifiers(ASTRewrite rewrite, ASTNode targetTypeDecl, List<IExtendedModifier> modifiers) {
 		modifiers.addAll(rewrite.getAST().newModifiers(evaluateModifiers(targetTypeDecl)));
 		ModifierCorrectionSubProcessor.installLinkedVisibilityProposals(getLinkedProposalModel(), rewrite, modifiers, getSenderBinding().isInterface());
 	}
 
-	/*(non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#isConstructor()
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#isConstructor()
 	 */
+	@Override
 	protected boolean isConstructor() {
 		ASTNode node= getInvocationNode();
 
@@ -120,8 +124,9 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#getNewName(org.eclipse.jdt.core.dom.rewrite.ASTRewrite)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#getNewName(org.eclipse.jdt.core.dom.rewrite.ASTRewrite)
 	 */
+	@Override
 	protected SimpleName getNewName(ASTRewrite rewrite) {
 		ASTNode invocationNode= getInvocationNode();
 		String name;
@@ -160,8 +165,9 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#getNewMethodType(org.eclipse.jdt.core.dom.rewrite.ASTRewrite)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#getNewMethodType(org.eclipse.jdt.core.dom.rewrite.ASTRewrite)
 	 */
+	@Override
 	protected Type getNewMethodType(ASTRewrite rewrite) throws CoreException {
 		ASTNode node= getInvocationNode();
 		AST ast= rewrite.getAST();
@@ -211,16 +217,17 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
 	 */
-	protected void addNewParameters(ASTRewrite rewrite, List takenNames, List params) throws CoreException {
+	@Override
+	protected void addNewParameters(ASTRewrite rewrite, List<String> takenNames, List<SingleVariableDeclaration> params) throws CoreException {
 		AST ast= rewrite.getAST();
 
-		List arguments= fArguments;
+		List<Expression> arguments= fArguments;
 		ImportRewriteContext context= new ContextSensitiveImportRewriteContext(ASTResolving.findParentBodyDeclaration(getInvocationNode()), getImportRewrite());
 
 		for (int i= 0; i < arguments.size(); i++) {
-			Expression elem= (Expression) arguments.get(i);
+			Expression elem= arguments.get(i);
 			SingleVariableDeclaration param= ast.newSingleVariableDeclaration();
 
 			// argument type
@@ -255,7 +262,7 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 		return ast.newSimpleType(ast.newSimpleName("Object")); //$NON-NLS-1$
 	}
 
-	private String evaluateParameterName(List takenNames, Expression argNode, Type type, String key) {
+	private String evaluateParameterName(List<String> takenNames, Expression argNode, Type type, String key) {
 		IJavaProject project= getCompilationUnit().getJavaProject();
 		String[] names= StubUtility.getVariableNameSuggestions(NamingConventions.VK_PARAMETER, project, type, argNode, takenNames);
 		for (int i= 0; i < names.length; i++) {
@@ -267,14 +274,16 @@ public class NewMethodCorrectionProposal extends AbstractMethodCorrectionProposa
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewExceptions(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewExceptions(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List)
 	 */
-	protected void addNewExceptions(ASTRewrite rewrite, List exceptions) throws CoreException {
+	@Override
+	protected void addNewExceptions(ASTRewrite rewrite, List<Name> exceptions) throws CoreException {
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.internal.ui.text.correction.AbstractMethodCompletionProposal#addNewTypeParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
+	 * @see org.eclipse.jdt.internal.ui.text.correction.proposals.AbstractMethodCorrectionProposal#addNewTypeParameters(org.eclipse.jdt.core.dom.rewrite.ASTRewrite, java.util.List, java.util.List)
 	 */
-	protected void addNewTypeParameters(ASTRewrite rewrite, List takenNames, List params) throws CoreException {
+	@Override
+	protected void addNewTypeParameters(ASTRewrite rewrite, List<String> takenNames, List<TypeParameter> params) throws CoreException {
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewVariableCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewVariableCorrectionProposal.java
index 9c58ccb..169a6c5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewVariableCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewVariableCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,6 +101,7 @@ public class NewVariableCorrectionProposal extends LinkedCorrectionProposal {
 		fSenderBinding= senderBinding;
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		CompilationUnit cu= ASTResolving.findParentCompilationUnit(fOriginalNode);
 		switch (fVariableKind) {
@@ -143,9 +144,9 @@ public class NewVariableCorrectionProposal extends LinkedCorrectionProposal {
 			// add javadoc tag
 			Javadoc javadoc= methodDeclaration.getJavadoc();
 			if (javadoc != null) {
-				HashSet leadingNames= new HashSet();
-				for (Iterator iter= methodDeclaration.parameters().iterator(); iter.hasNext();) {
-					SingleVariableDeclaration curr= (SingleVariableDeclaration) iter.next();
+				HashSet<String> leadingNames= new HashSet<String>();
+				for (Iterator<SingleVariableDeclaration> iter= methodDeclaration.parameters().iterator(); iter.hasNext();) {
+					SingleVariableDeclaration curr= iter.next();
 					leadingNames.add(curr.getName().getIdentifier());
 				}
 				SimpleName newTagRef= ast.newSimpleName(node.getIdentifier());
@@ -185,7 +186,7 @@ public class NewVariableCorrectionProposal extends LinkedCorrectionProposal {
 	private boolean isForStatementInit(Statement statement, SimpleName name) {
 		if (statement instanceof ForStatement) {
 			ForStatement forStatement= (ForStatement) statement;
-			List list = forStatement.initializers();
+			List<Expression> list = forStatement.initializers();
 			if (list.size() == 1 && list.get(0) instanceof Assignment) {
 				Assignment assignment= (Assignment) list.get(0);
 				return assignment.getLeftHandSide() == name;
@@ -281,7 +282,7 @@ public class NewVariableCorrectionProposal extends LinkedCorrectionProposal {
 		addLinkedPosition(rewrite.track(newDeclFrag.getName()), false, KEY_NAME);
 
 		Statement statement= dominantStatement;
-		List list= ASTNodes.getContainingList(statement);
+		List<? extends ASTNode> list= ASTNodes.getContainingList(statement);
 		while (list == null && statement.getParent() instanceof Statement) { // parent must be if, for or while
 			statement= (Statement) statement.getParent();
 			list= ASTNodes.getContainingList(statement);
@@ -305,9 +306,9 @@ public class NewVariableCorrectionProposal extends LinkedCorrectionProposal {
 			return new SimpleName[] { fOriginalNode };
 		}
 		if (names.length > 1) {
-			Arrays.sort(names, new Comparator() {
-				public int compare(Object o1, Object o2) {
-					return ((SimpleName) o1).getStartPosition() - ((SimpleName) o2).getStartPosition();
+			Arrays.sort(names, new Comparator<SimpleName>() {
+				public int compare(SimpleName s1, SimpleName s2) {
+					return s1.getStartPosition() - s2.getStartPosition();
 				}
 			});
 		}
@@ -377,7 +378,7 @@ public class NewVariableCorrectionProposal extends LinkedCorrectionProposal {
 			}
 
 			ChildListPropertyDescriptor property= ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
-			List decls= (List) newTypeDecl.getStructuralProperty(property);
+			List<BodyDeclaration> decls= (List<BodyDeclaration>) newTypeDecl.getStructuralProperty(property);
 
 			int maxOffset= isInDifferentCU ? -1 : node.getStartPosition();
 
@@ -402,10 +403,10 @@ public class NewVariableCorrectionProposal extends LinkedCorrectionProposal {
 		return null;
 	}
 
-	private int findFieldInsertIndex(List decls, FieldDeclaration newDecl, int maxOffset) {
+	private int findFieldInsertIndex(List<BodyDeclaration> decls, FieldDeclaration newDecl, int maxOffset) {
 		if (maxOffset != -1) {
 			for (int i= decls.size() - 1; i >= 0; i--) {
-				ASTNode curr= (ASTNode) decls.get(i);
+				BodyDeclaration curr= decls.get(i);
 				if (maxOffset > curr.getStartPosition() + curr.getLength()) {
 					return ASTNodes.getInsertionIndex(newDecl, decls.subList(0, i + 1));
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RemoveDeclarationCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RemoveDeclarationCorrectionProposal.java
index 4edf739..e5d9980 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RemoveDeclarationCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RemoveDeclarationCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,22 +59,25 @@ public class RemoveDeclarationCorrectionProposal extends ASTRewriteCorrectionPro
 
 	private static class SideEffectFinder extends ASTVisitor {
 
-		private ArrayList fSideEffectNodes;
+		private ArrayList<Expression> fSideEffectNodes;
 
-		public SideEffectFinder(ArrayList res) {
+		public SideEffectFinder(ArrayList<Expression> res) {
 			fSideEffectNodes= res;
 		}
 
+		@Override
 		public boolean visit(Assignment node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(PostfixExpression node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(PrefixExpression node) {
 			Object operator= node.getOperator();
 			if (operator == PrefixExpression.Operator.INCREMENT || operator == PrefixExpression.Operator.DECREMENT) {
@@ -83,16 +86,19 @@ public class RemoveDeclarationCorrectionProposal extends ASTRewriteCorrectionPro
 			return false;
 		}
 
+		@Override
 		public boolean visit(MethodInvocation node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(ClassInstanceCreation node) {
 			fSideEffectNodes.add(node);
 			return false;
 		}
 
+		@Override
 		public boolean visit(SuperMethodInvocation node) {
 			fSideEffectNodes.add(node);
 			return false;
@@ -107,6 +113,7 @@ public class RemoveDeclarationCorrectionProposal extends ASTRewriteCorrectionPro
 		fName= name;
 	}
 
+	@Override
 	public String getName() {
 		IBinding binding= fName.resolveBinding();
 		String name= BasicElementLabels.getJavaElementName(fName.getIdentifier());
@@ -133,6 +140,7 @@ public class RemoveDeclarationCorrectionProposal extends ASTRewriteCorrectionPro
 	/*(non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.ASTRewriteCorrectionProposal#getRewrite()
 	 */
+	@Override
 	protected ASTRewrite getRewrite() {
 		IBinding binding= fName.resolveBinding();
 		CompilationUnit root= (CompilationUnit) fName.getRoot();
@@ -212,7 +220,7 @@ public class RemoveDeclarationCorrectionProposal extends ASTRewriteCorrectionPro
 		} else if (nameParentType == ASTNode.VARIABLE_DECLARATION_FRAGMENT) {
 			VariableDeclarationFragment frag= (VariableDeclarationFragment) parent;
 			ASTNode varDecl= frag.getParent();
-			List fragments;
+			List<VariableDeclarationFragment> fragments;
 			if (varDecl instanceof VariableDeclarationExpression) {
 				fragments= ((VariableDeclarationExpression) varDecl).fragments();
 			} else if (varDecl instanceof FieldDeclaration) {
@@ -229,7 +237,7 @@ public class RemoveDeclarationCorrectionProposal extends ASTRewriteCorrectionPro
 	}
 
 	private void removeVariableWithInitializer(ASTRewrite rewrite, ASTNode initializerNode, ASTNode statementNode) {
-		ArrayList sideEffectNodes= new ArrayList();
+		ArrayList<Expression> sideEffectNodes= new ArrayList<Expression>();
 		initializerNode.accept(new SideEffectFinder(sideEffectNodes));
 		int nSideEffects= sideEffectNodes.size();
 		if (nSideEffects == 0) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RenameNodeCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RenameNodeCorrectionProposal.java
index ddd70a8..dc8f856 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RenameNodeCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/RenameNodeCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class RenameNodeCorrectionProposal extends CUCorrectionProposal {
 	/*(non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal#addEdits(org.eclipse.jface.text.IDocument)
 	 */
+	@Override
 	protected void addEdits(IDocument doc, TextEdit root) throws CoreException {
 		super.addEdits(doc, root);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ReplaceCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ReplaceCorrectionProposal.java
index a1e3177..c186b72 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ReplaceCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/ReplaceCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class ReplaceCorrectionProposal extends CUCorrectionProposal {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal#addEdits(org.eclipse.jface.text.IDocument)
 	 */
+	@Override
 	protected void addEdits(IDocument doc, TextEdit rootEdit) throws CoreException {
 		super.addEdits(doc, rootEdit);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TaskMarkerProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TaskMarkerProposal.java
index b4e4464..f7263ec 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TaskMarkerProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TaskMarkerProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public class TaskMarkerProposal extends CUCorrectionProposal {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.correction.CUCorrectionProposal#addEdits(org.eclipse.jdt.internal.corext.textmanipulation.TextBuffer)
 	 */
+	@Override
 	protected void addEdits(IDocument document, TextEdit rootEdit) throws CoreException {
 		super.addEdits(document, rootEdit);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TypeChangeCorrectionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TypeChangeCorrectionProposal.java
index db87110..cfab9a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TypeChangeCorrectionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/TypeChangeCorrectionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,9 @@
 
 package org.eclipse.jdt.internal.ui.text.correction.proposals;
 
+import java.util.Arrays;
+import java.util.Comparator;
+
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 
@@ -23,6 +26,7 @@ import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.Javadoc;
@@ -37,8 +41,8 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
@@ -55,10 +59,10 @@ import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
 public class TypeChangeCorrectionProposal extends LinkedCorrectionProposal {
 
-	private IBinding fBinding;
-	private CompilationUnit fAstRoot;
-	private ITypeBinding fNewType;
-	private boolean fOfferSuperTypeProposals;
+	private final IBinding fBinding;
+	private final CompilationUnit fAstRoot;
+	private final ITypeBinding fNewType;
+	private final ITypeBinding[] fTypeProposals;
 
 	public TypeChangeCorrectionProposal(ICompilationUnit targetCU, IBinding binding, CompilationUnit astRoot, ITypeBinding newType, boolean offerSuperTypeProposals, int relevance) {
 		super("", targetCU, null, relevance, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE)); //$NON-NLS-1$
@@ -67,10 +71,17 @@ public class TypeChangeCorrectionProposal extends LinkedCorrectionProposal {
 
 		fBinding= binding; // must be generic method or (generic) variable
 		fAstRoot= astRoot;
-		fNewType= newType;
-		fOfferSuperTypeProposals= offerSuperTypeProposals;
 
-		String typeName= BindingLabelProvider.getBindingLabel(newType, JavaElementLabels.ALL_DEFAULT);
+		if (offerSuperTypeProposals) {
+			fTypeProposals= ASTResolving.getRelaxingTypes(astRoot.getAST(), newType);
+			sortTypes(fTypeProposals);
+			fNewType= fTypeProposals[0];
+		} else {
+			fNewType= newType;
+			fTypeProposals= null;
+		}
+		
+		String typeName= BindingLabelProvider.getBindingLabel(fNewType, JavaElementLabels.ALL_DEFAULT);
 		if (binding.getKind() == IBinding.VARIABLE) {
 			IVariableBinding varBinding= (IVariableBinding) binding;
 			String[] args= { BasicElementLabels.getJavaElementName(varBinding.getName()),  BasicElementLabels.getJavaElementName(typeName)};
@@ -87,6 +98,7 @@ public class TypeChangeCorrectionProposal extends LinkedCorrectionProposal {
 		}
 	}
 
+	@Override
 	protected ASTRewrite getRewrite() throws CoreException {
 		ASTNode boundNode= fAstRoot.findDeclaringNode(fBinding);
 		ASTNode declNode= null;
@@ -183,10 +195,9 @@ public class TypeChangeCorrectionProposal extends LinkedCorrectionProposal {
 			// set up linked mode
 			final String KEY_TYPE= "type"; //$NON-NLS-1$
 			addLinkedPosition(rewrite.track(type), true, KEY_TYPE);
-			if (fOfferSuperTypeProposals) {
-				ITypeBinding[] typeProposals= ASTResolving.getRelaxingTypes(ast, fNewType);
-				for (int i= 0; i < typeProposals.length; i++) {
-					addLinkedPositionProposal(KEY_TYPE, typeProposals[i]);
+			if (fTypeProposals != null) {
+				for (int i= 0; i < fTypeProposals.length; i++) {
+					addLinkedPositionProposal(KEY_TYPE, fTypeProposals[i]);
 				}
 			}
 			return rewrite;
@@ -194,5 +205,29 @@ public class TypeChangeCorrectionProposal extends LinkedCorrectionProposal {
 		return null;
 	}
 
+	private void sortTypes(ITypeBinding[] typeProposals) {
+		ITypeBinding oldType;
+		if (fBinding instanceof IMethodBinding) {
+			oldType= ((IMethodBinding) fBinding).getReturnType();
+		} else {
+			oldType= ((IVariableBinding) fBinding).getType();
+		}
+		if (! oldType.isParameterizedType())
+			return;
+		
+		final ITypeBinding oldTypeDeclaration= oldType.getTypeDeclaration();
+		Arrays.sort(typeProposals, new Comparator<ITypeBinding>() {
+			public int compare(ITypeBinding o1, ITypeBinding o2) {
+				return rank(o2) - rank(o1);
+			}
+
+			private int rank(ITypeBinding type) {
+				if (type.getTypeDeclaration().equals(oldTypeDeclaration))
+					return 1;
+				return 0;
+			}
+		});
+	}
+
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/DefaultJavaFoldingPreferenceBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/DefaultJavaFoldingPreferenceBlock.java
index 81169cc..7a6d6dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/DefaultJavaFoldingPreferenceBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/DefaultJavaFoldingPreferenceBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,13 +45,13 @@ public class DefaultJavaFoldingPreferenceBlock implements IJavaFoldingPreference
 	private IPreferenceStore fStore;
 	private OverlayPreferenceStore fOverlayStore;
 	private OverlayKey[] fKeys;
-	private Map fCheckBoxes= new HashMap();
+	private Map<Button, String> fCheckBoxes= new HashMap<Button, String>();
 	private SelectionListener fCheckBoxListener= new SelectionListener() {
 		public void widgetDefaultSelected(SelectionEvent e) {
 		}
 		public void widgetSelected(SelectionEvent e) {
 			Button button= (Button) e.widget;
-			fOverlayStore.setValue((String) fCheckBoxes.get(button), button.getSelection());
+			fOverlayStore.setValue(fCheckBoxes.get(button), button.getSelection());
 		}
 	};
 
@@ -63,7 +63,7 @@ public class DefaultJavaFoldingPreferenceBlock implements IJavaFoldingPreference
 	}
 
 	private OverlayKey[] createKeys() {
-		ArrayList overlayKeys= new ArrayList();
+		ArrayList<OverlayKey> overlayKeys= new ArrayList<OverlayKey>();
 
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_JAVADOC));
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_INNERTYPES));
@@ -71,7 +71,7 @@ public class DefaultJavaFoldingPreferenceBlock implements IJavaFoldingPreference
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_IMPORTS));
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PreferenceConstants.EDITOR_FOLDING_HEADERS));
 
-		return (OverlayKey[]) overlayKeys.toArray(new OverlayKey[overlayKeys.size()]);
+		return overlayKeys.toArray(new OverlayKey[overlayKeys.size()]);
 	}
 
 	/*
@@ -116,10 +116,10 @@ public class DefaultJavaFoldingPreferenceBlock implements IJavaFoldingPreference
 	}
 
 	private void initializeFields() {
-		Iterator it= fCheckBoxes.keySet().iterator();
+		Iterator<Button> it= fCheckBoxes.keySet().iterator();
 		while (it.hasNext()) {
-			Button b= (Button) it.next();
-			String key= (String) fCheckBoxes.get(b);
+			Button b= it.next();
+			String key= fCheckBoxes.get(b);
 			b.setSelection(fOverlayStore.getBoolean(key));
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java
index 4abc972..a321bb1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/folding/JavaFoldingStructureProviderRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@ public class JavaFoldingStructureProviderRegistry {
 	private static final String EXTENSION_POINT= "foldingStructureProviders"; //$NON-NLS-1$
 
 	/** The map of descriptors, indexed by their identifiers. */
-	private Map fDescriptors;
+	private Map<String, JavaFoldingStructureProviderDescriptor> fDescriptors;
 
 	/**
 	 * Creates a new instance.
@@ -58,7 +58,7 @@ public class JavaFoldingStructureProviderRegistry {
 	public JavaFoldingStructureProviderDescriptor[] getFoldingProviderDescriptors() {
 		synchronized (this) {
 			ensureRegistered();
-			return (JavaFoldingStructureProviderDescriptor[]) fDescriptors.values().toArray(new JavaFoldingStructureProviderDescriptor[fDescriptors.size()]);
+			return fDescriptors.values().toArray(new JavaFoldingStructureProviderDescriptor[fDescriptors.size()]);
 		}
 	}
 
@@ -73,7 +73,7 @@ public class JavaFoldingStructureProviderRegistry {
 	public JavaFoldingStructureProviderDescriptor getFoldingProviderDescriptor(String id) {
 		synchronized (this) {
 			ensureRegistered();
-			return (JavaFoldingStructureProviderDescriptor) fDescriptors.get(id);
+			return fDescriptors.get(id);
 		}
 	}
 
@@ -127,7 +127,7 @@ public class JavaFoldingStructureProviderRegistry {
 	 */
 	public void reloadExtensions() {
 		IExtensionRegistry registry= Platform.getExtensionRegistry();
-		Map map= new HashMap();
+		Map<String, JavaFoldingStructureProviderDescriptor> map= new HashMap<String, JavaFoldingStructureProviderDescriptor>();
 
 		IConfigurationElement[] elements= registry.getConfigurationElementsFor(JavaPlugin.getPluginId(), EXTENSION_POINT);
 		for (int i= 0; i < elements.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractJavaCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractJavaCompletionProposal.java
index 18cbab7..0654725 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractJavaCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractJavaCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1139,6 +1139,7 @@ public abstract class AbstractJavaCompletionProposal implements IJavaCompletionP
 	/*
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return getDisplayString();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractTemplateCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractTemplateCompletionProposalComputer.java
index f6d5382..d58ab5d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractTemplateCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AbstractTemplateCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,9 @@ import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 
 import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
@@ -46,24 +49,24 @@ public abstract class AbstractTemplateCompletionProposalComputer implements IJav
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeCompletionProposals(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (!(context instanceof JavaContentAssistInvocationContext))
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		JavaContentAssistInvocationContext javaContext= (JavaContentAssistInvocationContext) context;
 		ICompilationUnit unit= javaContext.getCompilationUnit();
 		if (unit == null)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		fEngine= computeCompletionEngine(javaContext);
 		if (fEngine == null)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		fEngine.reset();
 		fEngine.complete(javaContext.getViewer(), javaContext.getInvocationOffset(), unit);
 
 		TemplateProposal[] templateProposals= fEngine.getResults();
-		List result= new ArrayList(Arrays.asList(templateProposals));
+		List<ICompletionProposal> result= new ArrayList<ICompletionProposal>(Arrays.asList(templateProposals));
 
 		IJavaCompletionProposal[] keyWordResults= javaContext.getKeywordProposals();
 		if (keyWordResults.length == 0)
@@ -101,8 +104,8 @@ public abstract class AbstractTemplateCompletionProposalComputer implements IJav
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeContextInformation(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-		return Collections.EMPTY_LIST;
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+		return Collections.emptyList();
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AlphabeticSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AlphabeticSorter.java
index 4e612da..450dc14 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AlphabeticSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AlphabeticSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public final class AlphabeticSorter extends AbstractProposalSorter {
 	/*
 	 * @see org.eclipse.jdt.ui.text.java.AbstractProposalSorter#compare(org.eclipse.jface.text.contentassist.ICompletionProposal, org.eclipse.jface.text.contentassist.ICompletionProposal)
 	 */
+	@Override
 	public int compare(ICompletionProposal p1, ICompletionProposal p2) {
 		return fComparator.compare(p1, p2);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnnotationAtttributeProposalInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnnotationAtttributeProposalInfo.java
index 51ef352..5bd79c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnnotationAtttributeProposalInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnnotationAtttributeProposalInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public final class AnnotationAtttributeProposalInfo extends MemberProposalInfo {
 	 * @return the resolved member or <code>null</code> if none is found
 	 * @throws JavaModelException if accessing the java model fails
 	 */
+	@Override
 	protected IMember resolveMember() throws JavaModelException {
 		char[] declarationSignature= fProposal.getDeclarationSignature();
 		// for synthetic fields on arrays, declaration signatures may be null
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java
index e5f69bf..0b5ab0b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,6 @@ import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
@@ -70,6 +69,7 @@ import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.dialogs.OverrideMethodDialog;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 
 
@@ -156,7 +156,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 
 			workingCopy.getBuffer().setContents(workingCopyContents.toString());
 
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setResolveBindings(true);
 			parser.setStatementsRecovery(true);
 			parser.setSource(workingCopy);
@@ -202,12 +202,12 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 				dialog.setElementPositionEnabled(false);
 				if (dialog.open() == Window.OK) {
 					Object[] selection= dialog.getResult();
-					ArrayList result= new ArrayList(selection.length);
+					ArrayList<Object> result= new ArrayList<Object>(selection.length);
 					for (int i= 0; i < selection.length; i++) {
 						if (selection[i] instanceof IMethodBinding)
 							result.add(selection[i]);
 					}
-					methodsToOverride= (IMethodBinding[]) result.toArray(new IMethodBinding[result.size()]);
+					methodsToOverride= result.toArray(new IMethodBinding[result.size()]);
 					settings.createComments= dialog.getGenerateComment();
 				} else {
 					// cancelled
@@ -217,13 +217,13 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 				}
 			} else {
 				settings.createComments= false;
-				List result= new ArrayList();
+				List<IMethodBinding> result= new ArrayList<IMethodBinding>();
 				for (int i= 0; i < bindings.length; i++) {
 					IMethodBinding curr= bindings[i];
 					if (Modifier.isAbstract(curr.getModifiers()))
 						result.add(curr);
 				}
-				methodsToOverride= (IMethodBinding[]) result.toArray(new IMethodBinding[result.size()]);
+				methodsToOverride= result.toArray(new IMethodBinding[result.size()]);
 			}
 			ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST());
 			ITrackedNodePosition trackedDeclaration= rewrite.track(declaration);
@@ -280,6 +280,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isOffsetValid(int)
 	 * @since 3.5
 	 */
+	@Override
 	protected boolean isOffsetValid(int offset) {
 		CompletionProposal coreProposal= ((MemberProposalInfo)getProposalInfo()).fProposal;
 		if (coreProposal.getKind() != CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION)
@@ -292,6 +293,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#getPrefixCompletionStart(org.eclipse.jface.text.IDocument, int)
 	 * @since 3.5
 	 */
+	@Override
 	public int getPrefixCompletionStart(IDocument document, int completionOffset) {
 		CompletionProposal coreProposal= ((MemberProposalInfo)getProposalInfo()).fProposal;
 		if (coreProposal.getKind() != CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION)
@@ -304,6 +306,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaTypeCompletionProposal#getPrefixCompletionText(org.eclipse.jface.text.IDocument, int)
 	 * @since 3.5
 	 */
+	@Override
 	public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
 		CompletionProposal coreProposal= ((MemberProposalInfo)getProposalInfo()).fProposal;
 		if (coreProposal.getKind() != CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION)
@@ -316,6 +319,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#getPrefix(org.eclipse.jface.text.IDocument, int)
 	 * @since 3.5
 	 */
+	@Override
 	protected String getPrefix(IDocument document, int offset) {
 		CompletionProposal coreProposal= ((MemberProposalInfo)getProposalInfo()).fProposal;
 		if (coreProposal.getKind() != CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION)
@@ -337,6 +341,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaTypeCompletionProposal#isValidPrefix(java.lang.String)
 	 * @since 3.5
 	 */
+	@Override
 	protected boolean isValidPrefix(String prefix) {
 		CompletionProposal coreProposal= ((MemberProposalInfo)getProposalInfo()).fProposal;
 		if (coreProposal.getKind() != CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION)
@@ -349,6 +354,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaTypeCompletionProposal#apply(org.eclipse.jface.text.IDocument, char, int)
 	 * @since 3.5
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		super.apply(document, trigger, offset);
 		LinkedModeModel.closeAllModels(document);
@@ -358,6 +364,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaTypeCompletionProposal#updateReplacementString(org.eclipse.jface.text.IDocument, char, int, org.eclipse.jdt.core.dom.rewrite.ImportRewrite)
 	 */
+	@Override
 	protected boolean updateReplacementString(IDocument document, char trigger, int offset, ImportRewrite impRewrite) throws CoreException, BadLocationException {
 		fImportRewrite= impRewrite;
 		String newBody= createNewBody(impRewrite);
@@ -381,11 +388,22 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 		IRegion lineInfo= document.getLineInformationOfOffset(getReplacementOffset());
 		int indent= Strings.computeIndentUnits(document.get(lineInfo.getOffset(), lineInfo.getLength()), project);
 
-		Map options= project != null ? project.getOptions(true) : JavaCore.getOptions();
+		@SuppressWarnings("unchecked")
+		Map<String, String> options= project != null ? project.getOptions(true) : JavaCore.getOptions();
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.TRUE);
 		String replacementString= CodeFormatterUtil.format(CodeFormatter.K_EXPRESSION, buf.toString(), 0, lineDelim, options);
 
-		if (document.getChar(offset) != ')')
+		int lineEndOffset= lineInfo.getOffset() + lineInfo.getLength();
+
+		int p= offset;
+		char ch= document.getChar(p);
+		while (p < lineEndOffset) {
+			if (ch == '(' || ch == ')' || ch == ';' || ch == ',')
+				break;
+			ch= document.getChar(++p);
+		}
+
+		if (ch != ';' && ch != ',' && ch != ')')
 			replacementString= replacementString + ';';
 
 		replacementString= Strings.changeIndent(replacementString, 0, project, CodeFormatterUtil.createIndentString(indent, project), lineDelim);
@@ -395,18 +413,14 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 			beginIndex++;
 		replacementString= replacementString.substring(beginIndex);
 
-		int lineEndOffset= lineInfo.getOffset() + lineInfo.getLength();
 		int pos= offset;
-		while (pos < lineEndOffset && Character.isWhitespace(document.getChar(pos))) {
-			pos++;
-		}
-
 		if (isAnonymousConstructorInvoc && (insertCompletion() ^ isInsertModeToggled())) {
 			// Keep existing code
 			int endPos= pos;
-			while (endPos < lineEndOffset && document.getChar(endPos) != '(' && document.getChar(endPos) != ')') {
-				endPos++;
-			}
+			ch= document.getChar(endPos);
+			while (endPos < lineEndOffset && ch != '(' && ch != ')' && ch != ';' && ch != ',' && !Character.isWhitespace(ch))
+				ch= document.getChar(++endPos);
+
 			int keepLength= endPos - pos;
 			if (keepLength > 0) {
 				String keepStr= document.get(pos, keepLength);
@@ -432,6 +446,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see ICompletionProposalExtension#getContextInformationPosition()
 	 * @since 3.4
 	 */
+	@Override
 	public int getContextInformationPosition() {
 		if (!fIsContextInformationComputed)
 			setContextInformation(computeContextInformation());
@@ -443,6 +458,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see ICompletionProposal#getContextInformation()
 	 * @since 3.4
 	 */
+	@Override
 	public final IContextInformation getContextInformation() {
 		if (!fIsContextInformationComputed)
 			setContextInformation(computeContextInformation());
@@ -485,6 +501,7 @@ public class AnonymousTypeCompletionProposal extends JavaTypeCompletionProposal
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#createLazyJavaTypeCompletionProposal(org.eclipse.jdt.core.CompletionProposal, org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext)
 	 * @since 3.5
 	 */
+	@Override
 	protected LazyJavaCompletionProposal createRequiredTypeCompletionProposal(CompletionProposal completionProposal, JavaContentAssistInvocationContext invocationContext) {
 		LazyJavaCompletionProposal proposal= super.createRequiredTypeCompletionProposal(completionProposal, invocationContext);
 		if (proposal instanceof LazyJavaTypeCompletionProposal)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeProposalInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeProposalInfo.java
index eb7e747..fd9e4ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeProposalInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeProposalInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public final class AnonymousTypeProposalInfo extends MemberProposalInfo {
 	 * @return the resolved member or <code>null</code> if none is found
 	 * @throws JavaModelException if accessing the java model fails
 	 */
+	@Override
 	protected IMember resolveMember() throws JavaModelException {
 		char[] signature= fProposal.getDeclarationSignature();
 		String typeName= SignatureUtil.stripSignatureToFQN(String.valueOf(signature));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalCategory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalCategory.java
index a8bd2ae..bdcbdc7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalCategory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalCategory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,9 @@ import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.action.LegacyActionTools;
 import org.eclipse.jface.resource.ImageDescriptor;
 
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
@@ -202,9 +205,9 @@ public final class CompletionProposalCategory {
 	 *         otherwise
 	 */
 	public boolean hasComputers() {
-		List descriptors= fRegistry.getProposalComputerDescriptors();
-		for (Iterator it= descriptors.iterator(); it.hasNext();) {
-			CompletionProposalComputerDescriptor desc= (CompletionProposalComputerDescriptor) it.next();
+		List<CompletionProposalComputerDescriptor> descriptors= fRegistry.getProposalComputerDescriptors();
+		for (Iterator<CompletionProposalComputerDescriptor> it= descriptors.iterator(); it.hasNext();) {
+			CompletionProposalComputerDescriptor desc= it.next();
 			if (desc.getCategory() == this)
 				return true;
 		}
@@ -220,9 +223,9 @@ public final class CompletionProposalCategory {
 	 *         otherwise
 	 */
 	public boolean hasComputers(String partition) {
-		List descriptors= fRegistry.getProposalComputerDescriptors(partition);
-		for (Iterator it= descriptors.iterator(); it.hasNext();) {
-			CompletionProposalComputerDescriptor desc= (CompletionProposalComputerDescriptor) it.next();
+		List<CompletionProposalComputerDescriptor> descriptors= fRegistry.getProposalComputerDescriptors(partition);
+		for (Iterator<CompletionProposalComputerDescriptor> it= descriptors.iterator(); it.hasNext();) {
+			CompletionProposalComputerDescriptor desc= it.next();
 			if (desc.getCategory() == this)
 				return true;
 		}
@@ -254,12 +257,12 @@ public final class CompletionProposalCategory {
 	 * @return the list of computed completion proposals (element type:
 	 *         {@link org.eclipse.jface.text.contentassist.ICompletionProposal})
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, String partition, SubProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, String partition, SubProgressMonitor monitor) {
 		fLastError= null;
-		List result= new ArrayList();
-		List descriptors= new ArrayList(fRegistry.getProposalComputerDescriptors(partition));
-		for (Iterator it= descriptors.iterator(); it.hasNext();) {
-			CompletionProposalComputerDescriptor desc= (CompletionProposalComputerDescriptor) it.next();
+		List<ICompletionProposal> result= new ArrayList<ICompletionProposal>();
+		List<CompletionProposalComputerDescriptor> descriptors= new ArrayList<CompletionProposalComputerDescriptor>(fRegistry.getProposalComputerDescriptors(partition));
+		for (Iterator<CompletionProposalComputerDescriptor> it= descriptors.iterator(); it.hasNext();) {
+			CompletionProposalComputerDescriptor desc= it.next();
 			if (desc.getCategory() == this)
 				result.addAll(desc.computeCompletionProposals(context, monitor));
 			if (fLastError == null && desc.getErrorMessage() != null)
@@ -279,12 +282,12 @@ public final class CompletionProposalCategory {
 	 * @return the list of computed context information objects (element type:
 	 *         {@link org.eclipse.jface.text.contentassist.IContextInformation})
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, String partition, SubProgressMonitor monitor) {
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, String partition, SubProgressMonitor monitor) {
 		fLastError= null;
-		List result= new ArrayList();
-		List descriptors= new ArrayList(fRegistry.getProposalComputerDescriptors(partition));
-		for (Iterator it= descriptors.iterator(); it.hasNext();) {
-			CompletionProposalComputerDescriptor desc= (CompletionProposalComputerDescriptor) it.next();
+		List<IContextInformation> result= new ArrayList<IContextInformation>();
+		List<CompletionProposalComputerDescriptor> descriptors= new ArrayList<CompletionProposalComputerDescriptor>(fRegistry.getProposalComputerDescriptors(partition));
+		for (Iterator<CompletionProposalComputerDescriptor> it= descriptors.iterator(); it.hasNext();) {
+			CompletionProposalComputerDescriptor desc= it.next();
 			if (desc.getCategory() == this && (isIncluded() || isSeparateCommand()))
 				result.addAll(desc.computeContextInformation(context, monitor));
 			if (fLastError == null)
@@ -306,9 +309,9 @@ public final class CompletionProposalCategory {
 	 * Notifies the computers in this category of a proposal computation session start.
 	 */
 	public void sessionStarted() {
-		List descriptors= new ArrayList(fRegistry.getProposalComputerDescriptors());
-		for (Iterator it= descriptors.iterator(); it.hasNext();) {
-			CompletionProposalComputerDescriptor desc= (CompletionProposalComputerDescriptor) it.next();
+		List<CompletionProposalComputerDescriptor> descriptors= new ArrayList<CompletionProposalComputerDescriptor>(fRegistry.getProposalComputerDescriptors());
+		for (Iterator<CompletionProposalComputerDescriptor> it= descriptors.iterator(); it.hasNext();) {
+			CompletionProposalComputerDescriptor desc= it.next();
 			if (desc.getCategory() == this)
 				desc.sessionStarted();
 			if (fLastError == null)
@@ -320,9 +323,9 @@ public final class CompletionProposalCategory {
 	 * Notifies the computers in this category of a proposal computation session end.
 	 */
 	public void sessionEnded() {
-		List descriptors= new ArrayList(fRegistry.getProposalComputerDescriptors());
-		for (Iterator it= descriptors.iterator(); it.hasNext();) {
-			CompletionProposalComputerDescriptor desc= (CompletionProposalComputerDescriptor) it.next();
+		List<CompletionProposalComputerDescriptor> descriptors= new ArrayList<CompletionProposalComputerDescriptor>(fRegistry.getProposalComputerDescriptors());
+		for (Iterator<CompletionProposalComputerDescriptor> it= descriptors.iterator(); it.hasNext();) {
+			CompletionProposalComputerDescriptor desc= it.next();
 			if (desc.getCategory() == this)
 				desc.sessionEnded();
 			if (fLastError == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java
index 311a300..c9dfe2f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,8 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
 
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -62,7 +64,7 @@ final class CompletionProposalComputerDescriptor {
 	/** The extension schema name of the partition child elements. */
 	private static final String PARTITION= "partition"; //$NON-NLS-1$
 	/** Set of Java partition types. */
-	private static final Set PARTITION_SET;
+	private static final Set<String> PARTITION_SET;
 	/** The name of the performance event used to trace extensions. */
 	private static final String PERFORMANCE_EVENT= JavaPlugin.getPluginId() + "/perf/content_assist/extensions"; //$NON-NLS-1$
 	/**
@@ -85,7 +87,7 @@ final class CompletionProposalComputerDescriptor {
 	private static final String SESSION_ENDED= "sessionEnded()"; //$NON-NLS-1$
 
 	static {
-		Set partitions= new HashSet();
+		Set<String> partitions= new HashSet<String>();
 		partitions.add(IDocument.DEFAULT_CONTENT_TYPE);
 		partitions.add(IJavaPartitions.JAVA_DOC);
 		partitions.add(IJavaPartitions.JAVA_MULTI_LINE_COMMENT);
@@ -105,7 +107,7 @@ final class CompletionProposalComputerDescriptor {
 	/** The activate attribute value. */
 	private final boolean fActivate;
 	/** The partition of the extension (element type: {@link String}). */
-	private final Set fPartitions;
+	private final Set<String> fPartitions;
 	/** The configuration element of this extension. */
 	private final IConfigurationElement fElement;
 	/** The registry we are registered with. */
@@ -140,7 +142,7 @@ final class CompletionProposalComputerDescriptor {
 	 * @throws InvalidRegistryObjectException if this extension is no longer valid
 	 * @throws CoreException if the extension contains invalid values
 	 */
-	CompletionProposalComputerDescriptor(IConfigurationElement element, CompletionProposalComputerRegistry registry, List categories) throws InvalidRegistryObjectException, CoreException {
+	CompletionProposalComputerDescriptor(IConfigurationElement element, CompletionProposalComputerRegistry registry, List<CompletionProposalCategory> categories) throws InvalidRegistryObjectException, CoreException {
 		Assert.isLegal(registry != null);
 		Assert.isLegal(element != null);
 
@@ -156,7 +158,7 @@ final class CompletionProposalComputerDescriptor {
 		else
 			fName= name;
 
-		Set partitions= new HashSet();
+		Set<String> partitions= new HashSet<String>();
 		IConfigurationElement[] children= element.getChildren(PARTITION);
 		if (children.length == 0) {
 			fPartitions= PARTITION_SET; // add to all partition types if no partition is configured
@@ -179,8 +181,8 @@ final class CompletionProposalComputerDescriptor {
 		if (categoryId == null)
 			categoryId= DEFAULT_CATEGORY_ID;
 		CompletionProposalCategory category= null;
-		for (Iterator it= categories.iterator(); it.hasNext();) {
-			CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
+		for (Iterator<CompletionProposalCategory> it= categories.iterator(); it.hasNext();) {
+			CompletionProposalCategory cat= it.next();
 			if (cat.getId().equals(categoryId)) {
 				category= cat;
 				break;
@@ -235,7 +237,7 @@ final class CompletionProposalComputerDescriptor {
 	 *
 	 * @return the set of partition types (element type: {@link String})
 	 */
-	public Set getPartitions() {
+	public Set<String> getPartitions() {
 		return fPartitions;
 	}
 
@@ -301,19 +303,19 @@ final class CompletionProposalComputerDescriptor {
 	 * @return the list of computed completion proposals (element type:
 	 *         {@link org.eclipse.jface.text.contentassist.ICompletionProposal})
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (!isEnabled())
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		IStatus status;
 		try {
 			IJavaCompletionProposalComputer computer= getComputer(true);
 			if (computer == null) // not active yet
-				return Collections.EMPTY_LIST;
+				return Collections.emptyList();
 
 			try {
 				PerformanceStats stats= startMeter(context, computer);
-				List proposals= computer.computeCompletionProposals(context, monitor);
+				List<ICompletionProposal> proposals= computer.computeCompletionProposals(context, monitor);
 				stopMeter(stats, COMPUTE_COMPLETION_PROPOSALS);
 
 				if (proposals != null) {
@@ -336,7 +338,7 @@ final class CompletionProposalComputerDescriptor {
 
 		fRegistry.informUser(this, status);
 
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 	/**
@@ -349,18 +351,18 @@ final class CompletionProposalComputerDescriptor {
 	 * @return the list of computed context information objects (element type:
 	 *         {@link org.eclipse.jface.text.contentassist.IContextInformation})
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (!isEnabled())
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		IStatus status;
 		try {
 			IJavaCompletionProposalComputer computer= getComputer(true);
 			if (computer == null) // not active yet
-				return Collections.EMPTY_LIST;
+				return Collections.emptyList();
 
 			PerformanceStats stats= startMeter(context, computer);
-			List proposals= computer.computeContextInformation(context, monitor);
+			List<IContextInformation> proposals= computer.computeContextInformation(context, monitor);
 			stopMeter(stats, COMPUTE_CONTEXT_INFORMATION);
 
 			if (proposals != null) {
@@ -381,7 +383,7 @@ final class CompletionProposalComputerDescriptor {
 
 		fRegistry.informUser(this, status);
 
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java
index 205c4e7..59923fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,26 +92,26 @@ public final class CompletionProposalComputerRegistry {
 	 * {@link String}, value type:
 	 * {@linkplain List List<CompletionProposalComputerDescriptor>}).
 	 */
-	private final Map fDescriptorsByPartition= new HashMap();
+	private final Map<String, List<CompletionProposalComputerDescriptor>> fDescriptorsByPartition= new HashMap<String, List<CompletionProposalComputerDescriptor>>();
 	/**
 	 * Unmodifiable versions of the sets stored in
 	 * <code>fDescriptorsByPartition</code> (key type: {@link String},
 	 * value type:
 	 * {@linkplain List List<CompletionProposalComputerDescriptor>}).
 	 */
-	private final Map fPublicDescriptorsByPartition= new HashMap();
+	private final Map<String, List<CompletionProposalComputerDescriptor>> fPublicDescriptorsByPartition= new HashMap<String, List<CompletionProposalComputerDescriptor>>();
 	/**
 	 * All descriptors (element type:
 	 * {@link CompletionProposalComputerDescriptor}).
 	 */
-	private final List fDescriptors= new ArrayList();
+	private final List<CompletionProposalComputerDescriptor> fDescriptors= new ArrayList<CompletionProposalComputerDescriptor>();
 	/**
 	 * Unmodifiable view of <code>fDescriptors</code>
 	 */
-	private final List fPublicDescriptors= Collections.unmodifiableList(fDescriptors);
+	private final List<CompletionProposalComputerDescriptor> fPublicDescriptors= Collections.unmodifiableList(fDescriptors);
 
-	private final List fCategories= new ArrayList();
-	private final List fPublicCategories= Collections.unmodifiableList(fCategories);
+	private final List<CompletionProposalCategory> fCategories= new ArrayList<CompletionProposalCategory>();
+	private final List<CompletionProposalCategory> fPublicCategories= Collections.unmodifiableList(fCategories);
 	/**
 	 * <code>true</code> if this registry has been loaded.
 	 */
@@ -137,14 +137,15 @@ public final class CompletionProposalComputerRegistry {
 	 * 			<code>false</code> otherwise or if {@link #resetUnistalledComputers()} has been called
 	 * @since 3.4
 	 */
-	boolean hasUninstalledComputers(String partition, List included) {
+	boolean hasUninstalledComputers(String partition, List<CompletionProposalCategory> included) {
 		if (fHasUninstalledComputers)
 			return true;
 
 		if (fIsFirstTimeCheckForUninstalledComputers) {
 			if ((IJavaPartitions.JAVA_DOC.equals(partition) || IDocument.DEFAULT_CONTENT_TYPE.equals(partition)) && included.size() == 1 && !getProposalCategories().isEmpty()) {
-				if (included.get(0) instanceof CompletionProposalCategory) // paranoia check
-					return "org.eclipse.jdt.ui.swtProposalCategory".equals(((CompletionProposalCategory) included.get(0)).getId()); //$NON-NLS-1$
+				CompletionProposalCategory firstCategory= included.get(0);
+				if (firstCategory != null) // paranoia check
+					return "org.eclipse.jdt.ui.swtProposalCategory".equals(firstCategory.getId()); //$NON-NLS-1$
 			}
 		}
 
@@ -185,10 +186,10 @@ public final class CompletionProposalComputerRegistry {
 	 * @return the list of extensions to the <code>javaCompletionProposalComputer</code> extension
 	 *         point (element type: {@link CompletionProposalComputerDescriptor})
 	 */
-	List getProposalComputerDescriptors(String partition) {
+	List<CompletionProposalComputerDescriptor> getProposalComputerDescriptors(String partition) {
 		ensureExtensionPointRead();
-		List result= (List) fPublicDescriptorsByPartition.get(partition);
-		return result != null ? result : Collections.EMPTY_LIST;
+		List<CompletionProposalComputerDescriptor> result= fPublicDescriptorsByPartition.get(partition);
+		return result != null ? result : Collections.<CompletionProposalComputerDescriptor>emptyList();
 	}
 
 	/**
@@ -206,7 +207,7 @@ public final class CompletionProposalComputerRegistry {
 	 * @return the list of extensions to the <code>javaCompletionProposalComputer</code> extension
 	 *         point (element type: {@link CompletionProposalComputerDescriptor})
 	 */
-	List getProposalComputerDescriptors() {
+	List<CompletionProposalComputerDescriptor> getProposalComputerDescriptors() {
 		ensureExtensionPointRead();
 		return fPublicDescriptors;
 	}
@@ -225,7 +226,7 @@ public final class CompletionProposalComputerRegistry {
 	 *         <code>javaCompletionProposalComputer</code> extension point (element type:
 	 *         {@link CompletionProposalCategory})
 	 */
-	public List getProposalCategories() {
+	public List<CompletionProposalCategory> getProposalCategories() {
 		ensureExtensionPointRead();
 		return fPublicCategories;
 	}
@@ -253,7 +254,7 @@ public final class CompletionProposalComputerRegistry {
 		int currNumber= fDescriptors.size();
 		fHasUninstalledComputers= lastNumberOfComputers > currNumber;
 		preferenceStore.putValue(NUM_COMPUTERS_PREF_KEY, Integer.toString(currNumber));
-		JavaPlugin.getDefault().savePluginPreferences();
+		JavaPlugin.flushInstanceScope();
 	}
 
 	/**
@@ -265,22 +266,22 @@ public final class CompletionProposalComputerRegistry {
 	 */
 	public void reload() {
 		IExtensionRegistry registry= Platform.getExtensionRegistry();
-		List elements= new ArrayList(Arrays.asList(registry.getConfigurationElementsFor(JavaPlugin.getPluginId(), EXTENSION_POINT)));
+		List<IConfigurationElement> elements= new ArrayList<IConfigurationElement>(Arrays.asList(registry.getConfigurationElementsFor(JavaPlugin.getPluginId(), EXTENSION_POINT)));
 
-		Map map= new HashMap();
-		List all= new ArrayList();
+		Map<String, List<CompletionProposalComputerDescriptor>> map= new HashMap<String, List<CompletionProposalComputerDescriptor>>();
+		List<CompletionProposalComputerDescriptor> all= new ArrayList<CompletionProposalComputerDescriptor>();
 
-		List categories= getCategories(elements);
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
-			IConfigurationElement element= (IConfigurationElement) iter.next();
+		List<CompletionProposalCategory> categories= getCategories(elements);
+		for (Iterator<IConfigurationElement> iter= elements.iterator(); iter.hasNext();) {
+			IConfigurationElement element= iter.next();
 			try {
 				CompletionProposalComputerDescriptor desc= new CompletionProposalComputerDescriptor(element, this, categories);
-				Set partitions= desc.getPartitions();
-				for (Iterator it= partitions.iterator(); it.hasNext();) {
-					String partition= (String) it.next();
-					List list= (List) map.get(partition);
+				Set<String> partitions= desc.getPartitions();
+				for (Iterator<String> it= partitions.iterator(); it.hasNext();) {
+					String partition= it.next();
+					List<CompletionProposalComputerDescriptor> list= map.get(partition);
 					if (list == null) {
-						list= new ArrayList();
+						list= new ArrayList<CompletionProposalComputerDescriptor>();
 						map.put(partition, list);
 					}
 					list.add(desc);
@@ -306,13 +307,13 @@ public final class CompletionProposalComputerRegistry {
 			fCategories.clear();
 			fCategories.addAll(categories);
 
-			Set partitions= map.keySet();
+			Set<String> partitions= map.keySet();
 			fDescriptorsByPartition.keySet().retainAll(partitions);
 			fPublicDescriptorsByPartition.keySet().retainAll(partitions);
-			for (Iterator it= partitions.iterator(); it.hasNext();) {
-				String partition= (String) it.next();
-				List old= (List) fDescriptorsByPartition.get(partition);
-				List current= (List) map.get(partition);
+			for (Iterator<String> it= partitions.iterator(); it.hasNext();) {
+				String partition= it.next();
+				List<CompletionProposalComputerDescriptor> old= fDescriptorsByPartition.get(partition);
+				List<CompletionProposalComputerDescriptor> current= map.get(partition);
 				if (old != null) {
 					old.clear();
 					old.addAll(current);
@@ -327,14 +328,14 @@ public final class CompletionProposalComputerRegistry {
 		}
 	}
 
-	private List getCategories(List elements) {
+	private List<CompletionProposalCategory> getCategories(List<IConfigurationElement> elements) {
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		String preference= store.getString(PreferenceConstants.CODEASSIST_EXCLUDED_CATEGORIES);
-		Set disabled= new HashSet();
+		Set<String> disabled= new HashSet<String>();
 		StringTokenizer tok= new StringTokenizer(preference, "\0");  //$NON-NLS-1$
 		while (tok.hasMoreTokens())
 			disabled.add(tok.nextToken());
-		Map ordered= new HashMap();
+		Map<String, Integer> ordered= new HashMap<String, Integer>();
 		preference= store.getString(PreferenceConstants.CODEASSIST_CATEGORY_ORDER);
 		tok= new StringTokenizer(preference, "\0"); //$NON-NLS-1$
 		while (tok.hasMoreTokens()) {
@@ -348,9 +349,9 @@ public final class CompletionProposalComputerRegistry {
 		CompletionProposalCategory typeProposals= null;
 		CompletionProposalCategory allButTypeProposals= null;
 		
-		List categories= new ArrayList();
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
-			IConfigurationElement element= (IConfigurationElement) iter.next();
+		List<CompletionProposalCategory> categories= new ArrayList<CompletionProposalCategory>();
+		for (Iterator<IConfigurationElement> iter= elements.iterator(); iter.hasNext();) {
+			IConfigurationElement element= iter.next();
 			try {
 				if (element.getName().equals("proposalCategory")) { //$NON-NLS-1$
 					iter.remove(); // remove from list to leave only computers
@@ -358,7 +359,7 @@ public final class CompletionProposalComputerRegistry {
 					CompletionProposalCategory category= new CompletionProposalCategory(element, this);
 					categories.add(category);
 					category.setIncluded(!disabled.contains(category.getId()));
-					Integer rank= (Integer) ordered.get(category.getId());
+					Integer rank= ordered.get(category.getId());
 					if (rank != null) {
 						int r= rank.intValue();
 						boolean separate= r < 0xffff;
@@ -394,7 +395,7 @@ public final class CompletionProposalComputerRegistry {
 		return categories;
 	}
 
-	private void preventDuplicateCategories(IPreferenceStore store, Set disabled, CompletionProposalCategory allProposals, CompletionProposalCategory typeProposals,
+	private void preventDuplicateCategories(IPreferenceStore store, Set<String> disabled, CompletionProposalCategory allProposals, CompletionProposalCategory typeProposals,
 			CompletionProposalCategory allButTypeProposals) {
 		boolean adjusted= false;
 		if (allProposals == null || !allProposals.isIncluded())
@@ -413,7 +414,7 @@ public final class CompletionProposalComputerRegistry {
 
 		if (adjusted) {
 			StringBuffer buf= new StringBuffer(50 * disabled.size());
-			Iterator iter= disabled.iterator();
+			Iterator<String> iter= disabled.iterator();
 			while (iter.hasNext()) {
 				buf.append(iter.next());
 				buf.append('\0');
@@ -433,7 +434,7 @@ public final class CompletionProposalComputerRegistry {
         String title= JavaTextMessages.CompletionProposalComputerRegistry_error_dialog_title;
         CompletionProposalCategory category= descriptor.getCategory();
         IContributor culprit= descriptor.getContributor();
-        Set affectedPlugins= getAffectedContributors(category, culprit);
+        Set<String> affectedPlugins= getAffectedContributors(category, culprit);
 
 		final String avoidHint;
 		final String culpritName= culprit == null ? null : culprit.getName();
@@ -445,11 +446,13 @@ public final class CompletionProposalComputerRegistry {
 		String message= status.getMessage();
         // inlined from MessageDialog.openError
         MessageDialog dialog = new MessageDialog(JavaPlugin.getActiveWorkbenchShell(), title, null /* default image */, message, MessageDialog.ERROR, new String[] { IDialogConstants.OK_LABEL }, 0) {
-        	protected Control createCustomArea(Composite parent) {
+        	@Override
+			protected Control createCustomArea(Composite parent) {
         		Link link= new Link(parent, SWT.NONE);
         		link.setText(avoidHint);
         		link.addSelectionListener(new SelectionAdapter() {
-        			public void widgetSelected(SelectionEvent e) {
+        			@Override
+					public void widgetSelected(SelectionEvent e) {
         				PreferencesUtil.createPreferenceDialogOn(getShell(), "org.eclipse.jdt.ui.preferences.CodeAssistPreferenceAdvanced", null, null).open(); //$NON-NLS-1$
         			}
         		});
@@ -469,10 +472,10 @@ public final class CompletionProposalComputerRegistry {
 	 * @param culprit the culprit plug-in, which is not included in the returned list
 	 * @return the names of the contributors other than <code>culprit</code> that contribute to <code>category</code> (element type: {@link String})
 	 */
-	private Set getAffectedContributors(CompletionProposalCategory category, IContributor culprit) {
-	    Set affectedPlugins= new HashSet();
-        for (Iterator it= getProposalComputerDescriptors().iterator(); it.hasNext();) {
-	        CompletionProposalComputerDescriptor desc= (CompletionProposalComputerDescriptor) it.next();
+	private Set<String> getAffectedContributors(CompletionProposalCategory category, IContributor culprit) {
+	    Set<String> affectedPlugins= new HashSet<String>();
+        for (Iterator<CompletionProposalComputerDescriptor> it= getProposalComputerDescriptors().iterator(); it.hasNext();) {
+	        CompletionProposalComputerDescriptor desc= it.next();
 	        CompletionProposalCategory cat= desc.getCategory();
 	        if (cat.equals(category)) {
 	        	IContributor contributor= desc.getContributor();
@@ -483,7 +486,7 @@ public final class CompletionProposalComputerRegistry {
 	    return affectedPlugins;
     }
 
-    private Object toString(Collection collection) {
+    private Object toString(Collection<String> collection) {
     	// strip brackets off AbstractCollection.toString()
     	String string= collection.toString();
     	return string.substring(1, string.length() - 1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistComputerParameter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistComputerParameter.java
index 8c969bb..c44dff9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistComputerParameter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistComputerParameter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,11 +26,11 @@ public final class ContentAssistComputerParameter implements IParameterValues {
 	/*
 	 * @see org.eclipse.core.commands.IParameterValues#getParameterValues()
 	 */
-	public Map getParameterValues() {
-		Collection descriptors= CompletionProposalComputerRegistry.getDefault().getProposalCategories();
-		Map map= new HashMap(descriptors.size());
-		for (Iterator it= descriptors.iterator(); it.hasNext();) {
-			CompletionProposalCategory category= (CompletionProposalCategory) it.next();
+	public Map<String, String> getParameterValues() {
+		Collection<CompletionProposalCategory> descriptors= CompletionProposalComputerRegistry.getDefault().getProposalCategories();
+		Map<String, String> map= new HashMap<String, String>(descriptors.size());
+		for (Iterator<CompletionProposalCategory> it= descriptors.iterator(); it.hasNext();) {
+			CompletionProposalCategory category= it.next();
 			map.put(category.getDisplayName(), category.getId());
 		}
 		return map;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistHistory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistHistory.java
index 484e614..64d6301 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistHistory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistHistory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,8 +22,8 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -91,15 +91,15 @@ public final class ContentAssistHistory {
 				rootElement.setAttribute(ATTRIBUTE_MAX_RHS, Integer.toString(history.fMaxRHS));
 				document.appendChild(rootElement);
 
-				for (Iterator leftHandSides= history.fLHSCache.keySet().iterator(); leftHandSides.hasNext();) {
-					String lhs= (String) leftHandSides.next();
+				for (Iterator<String> leftHandSides= history.fLHSCache.keySet().iterator(); leftHandSides.hasNext();) {
+					String lhs= leftHandSides.next();
 					Element lhsElement= document.createElement(NODE_LHS);
 					lhsElement.setAttribute(ATTRIBUTE_NAME, lhs);
 					rootElement.appendChild(lhsElement);
 
-					Set rightHandSides= (Set) history.fLHSCache.get(lhs);
-					for (Iterator rhsIterator= rightHandSides.iterator(); rhsIterator.hasNext();) {
-						String rhs= (String) rhsIterator.next();
+					MRUSet<String> rightHandSides= history.fLHSCache.get(lhs);
+					for (Iterator<String> rhsIterator= rightHandSides.iterator(); rhsIterator.hasNext();) {
+						String rhs= rhsIterator.next();
 						Element rhsElement= document.createElement(NODE_RHS);
 						rhsElement.setAttribute(ATTRIBUTE_NAME, rhs);
 						lhsElement.appendChild(rhsElement);
@@ -151,7 +151,7 @@ public final class ContentAssistHistory {
 					if (lhsElement.getNodeName().equalsIgnoreCase(NODE_LHS)) {
 						String lhs= lhsElement.getAttribute(ATTRIBUTE_NAME);
 						if (lhs != null) {
-							Set cache= history.getCache(lhs);
+							Set<String> cache= history.getCache(lhs);
 							NodeList children= lhsElement.getChildNodes();
 							int nRHS= children.getLength();
 							for (int j= 0; j < nRHS; j++) {
@@ -197,7 +197,7 @@ public final class ContentAssistHistory {
 	 *
 	 * @since 3.2
 	 */
-	private static final class MRUMap extends LinkedHashMap {
+	private static final class MRUMap<K, V> extends LinkedHashMap<K, V> {
 		private static final long serialVersionUID= 1L;
 		private final int fMaxSize;
 
@@ -214,8 +214,9 @@ public final class ContentAssistHistory {
 		/*
 		 * @see java.util.HashMap#put(java.lang.Object, java.lang.Object)
 		 */
-		public Object put(Object key, Object value) {
-			Object object= remove(key);
+		@Override
+		public V put(K key, V value) {
+			V object= remove(key);
 			super.put(key, value);
 			return object;
 		}
@@ -223,7 +224,8 @@ public final class ContentAssistHistory {
 		/*
 		 * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry)
 		 */
-		protected boolean removeEldestEntry(Entry eldest) {
+		@Override
+		protected boolean removeEldestEntry(Entry<K, V> eldest) {
 			return size() > fMaxSize;
 		}
 	}
@@ -234,7 +236,7 @@ public final class ContentAssistHistory {
 	 *
 	 * @since 3.2
 	 */
-	private static final class MRUSet extends LinkedHashSet {
+	private static final class MRUSet<E> extends LinkedHashSet<E> {
 		private static final long serialVersionUID= 1L;
 		private final int fMaxSize;
 
@@ -251,7 +253,8 @@ public final class ContentAssistHistory {
 		/*
 		 * @see java.util.HashSet#add(java.lang.Object)
 		 */
-		public boolean add(Object o) {
+		@Override
+		public boolean add(E o) {
 			if (remove(o)) {
 				super.add(o);
 				return false;
@@ -271,10 +274,10 @@ public final class ContentAssistHistory {
 	 * @since 3.2
 	 */
 	public static final class RHSHistory {
-		private final LinkedHashMap fHistory;
-		private List fList;
+		private final LinkedHashMap<String, Integer> fHistory;
+		private List<String> fList;
 
-		RHSHistory(LinkedHashMap history) {
+		RHSHistory(LinkedHashMap<String, Integer> history) {
 			fHistory= history;
 		}
 
@@ -288,7 +291,7 @@ public final class ContentAssistHistory {
 		public float getRank(String type) {
 			if (fHistory == null)
 				return 0.0F;
-			Integer integer= (Integer) fHistory.get(type);
+			Integer integer= fHistory.get(type);
 			return integer == null ? 0.0F : integer.floatValue() / fHistory.size();
 		}
 
@@ -305,14 +308,13 @@ public final class ContentAssistHistory {
 		 * Returns the list of remembered types ordered by recency. The first element is the
 		 * <i>least</i>, the last element the <i>most</i> recently remembered type.
 		 *
-		 * @return the list of remembered types as fully qualified type names (element type:
-		 *         {@link String})
+		 * @return the list of remembered types as fully qualified type names
 		 */
-		public List getTypes() {
+		public List<String> getTypes() {
 			if (fHistory == null)
-				return Collections.EMPTY_LIST;
+				return Collections.emptyList();
 			if (fList == null) {
-				fList= Collections.unmodifiableList(new ArrayList(fHistory.keySet()));
+				fList= Collections.unmodifiableList(new ArrayList<String>(fHistory.keySet()));
 			}
 			return fList;
 		}
@@ -322,9 +324,9 @@ public final class ContentAssistHistory {
 	private static final int DEFAULT_TRACKED_LHS= 100;
 	private static final int DEFAULT_TRACKED_RHS= 10;
 
-	private static final Set UNCACHEABLE;
+	private static final Set<String> UNCACHEABLE;
 	static {
-		Set uncacheable= new HashSet();
+		Set<String> uncacheable= new HashSet<String>();
 		uncacheable.add("java.lang.Object"); //$NON-NLS-1$
 		uncacheable.add("java.lang.Comparable"); //$NON-NLS-1$
 		uncacheable.add("java.io.Serializable"); //$NON-NLS-1$
@@ -332,7 +334,7 @@ public final class ContentAssistHistory {
 		UNCACHEABLE= Collections.unmodifiableSet(uncacheable);
 	}
 
-	private final LinkedHashMap/*<IType, MRUSet<IType>>*/ fLHSCache;
+	private final LinkedHashMap<String, MRUSet<String>> fLHSCache;
 	private final int fMaxLHS;
 	private final int fMaxRHS;
 
@@ -347,7 +349,7 @@ public final class ContentAssistHistory {
 		Assert.isLegal(maxRHS > 0);
 		fMaxLHS= maxLHS;
 		fMaxRHS= maxRHS;
-		fLHSCache= new MRUMap(fMaxLHS);
+		fLHSCache= new MRUMap<String, MRUSet<String>>(fMaxLHS);
 	}
 
 	/**
@@ -395,13 +397,13 @@ public final class ContentAssistHistory {
 	 * @return the right hand side history for the given type
 	 */
 	public RHSHistory getHistory(String lhs) {
-		MRUSet rhsCache= (MRUSet) fLHSCache.get(lhs);
+		MRUSet<String> rhsCache= fLHSCache.get(lhs);
 		if (rhsCache != null) {
 			int count= rhsCache.size();
-			LinkedHashMap history= new LinkedHashMap((int) (count / 0.75));
+			LinkedHashMap<String, Integer> history= new LinkedHashMap<String, Integer>((int) (count / 0.75));
 			int rank= 1;
-			for (Iterator it= rhsCache.iterator(); it.hasNext(); rank++) {
-				String type= (String) it.next();
+			for (Iterator<String> it= rhsCache.iterator(); it.hasNext(); rank++) {
+				String type= it.next();
 				history.put(type, new Integer(rank));
 			}
 			return new RHSHistory(history);
@@ -415,11 +417,11 @@ public final class ContentAssistHistory {
 	 *
 	 * @return the set of remembered right hand sides ordered by least recent selection
 	 */
-	public Map getEntireHistory() {
-		HashMap map= new HashMap((int) (fLHSCache.size() / 0.75));
-		for (Iterator it= fLHSCache.entrySet().iterator(); it.hasNext();) {
-			Entry entry= (Entry) it.next();
-			String lhs= (String) entry.getKey();
+	public Map<String, RHSHistory> getEntireHistory() {
+		HashMap<String, RHSHistory> map= new HashMap<String, RHSHistory>((int) (fLHSCache.size() / 0.75));
+		for ( Iterator<Entry<String, MRUSet<String>>> it= fLHSCache.entrySet().iterator(); it.hasNext();) {
+			Entry<String, MRUSet<String>> entry= it.next();
+			String lhs= entry.getKey();
 			map.put(lhs, getHistory(lhs));
 		}
 		return Collections.unmodifiableMap(map);
@@ -439,10 +441,10 @@ public final class ContentAssistHistory {
 		return !type.isInterface() && !Flags.isAbstract(type.getFlags());
 	}
 
-	private Set getCache(String lhs) {
-		MRUSet rhsCache= (MRUSet) fLHSCache.get(lhs);
+	private Set<String> getCache(String lhs) {
+		MRUSet<String> rhsCache= fLHSCache.get(lhs);
 		if (rhsCache == null) {
-			rhsCache= new MRUSet(fMaxRHS);
+			rhsCache= new MRUSet<String>(fMaxRHS);
 			fLHSCache.put(lhs, rhsCache);
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
index b6782ed..4df2e1b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,8 +108,8 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 
 			// This may show the warning dialog if all categories are disabled
 			setCategoryIteration();
-			for (Iterator it= fCategories.iterator(); it.hasNext();) {
-				CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
+			for (Iterator<CompletionProposalCategory> it= fCategories.iterator(); it.hasNext();) {
+				CompletionProposalCategory cat= it.next();
 				cat.sessionStarted();
 			}
 
@@ -141,8 +141,8 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 			if (event.processor != ContentAssistProcessor.this)
 				return;
 
-			for (Iterator it= fCategories.iterator(); it.hasNext();) {
-				CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
+			for (Iterator<CompletionProposalCategory> it= fCategories.iterator(); it.hasNext();) {
+				CompletionProposalCategory cat= it.next();
 				cat.sessionEnded();
 			}
 
@@ -186,18 +186,15 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 	 */
 	private static final String PREF_WARN_ABOUT_EMPTY_ASSIST_CATEGORY= "EmptyDefaultAssistCategory"; //$NON-NLS-1$
 
-	private static final Comparator ORDER_COMPARATOR= new Comparator() {
-
-		public int compare(Object o1, Object o2) {
-			CompletionProposalCategory d1= (CompletionProposalCategory) o1;
-			CompletionProposalCategory d2= (CompletionProposalCategory) o2;
+	private static final Comparator<CompletionProposalCategory> ORDER_COMPARATOR= new Comparator<CompletionProposalCategory>() {
 
+		public int compare(CompletionProposalCategory d1, CompletionProposalCategory d2) {
 			return d1.getSortOrder() - d2.getSortOrder();
 		}
 
 	};
 
-	private final List fCategories;
+	private final List<CompletionProposalCategory> fCategories;
 	private final String fPartition;
 	private final ContentAssistant fAssistant;
 
@@ -205,7 +202,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 
 	/* cycling stuff */
 	private int fRepetition= -1;
-	private List/*<List<CompletionProposalCategory>>*/ fCategoryIteration= null;
+	private List<List<CompletionProposalCategory>> fCategoryIteration= null;
 	private String fIterationGesture= null;
 	private int fNumberOfComputedResults= 0;
 	private String fErrorMessage;
@@ -243,15 +240,15 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 		long setup= DEBUG ? System.currentTimeMillis() : 0;
 
 		monitor.subTask(JavaTextMessages.ContentAssistProcessor_collecting_proposals);
-		List proposals= collectProposals(viewer, offset, monitor, context);
+		List<ICompletionProposal> proposals= collectProposals(viewer, offset, monitor, context);
 		long collect= DEBUG ? System.currentTimeMillis() : 0;
 
 		monitor.subTask(JavaTextMessages.ContentAssistProcessor_sorting_proposals);
-		List filtered= filterAndSortProposals(proposals, monitor, context);
+		List<ICompletionProposal> filtered= filterAndSortProposals(proposals, monitor, context);
 		fNumberOfComputedResults= filtered.size();
 		long filter= DEBUG ? System.currentTimeMillis() : 0;
 
-		ICompletionProposal[] result= (ICompletionProposal[]) filtered.toArray(new ICompletionProposal[filtered.size()]);
+		ICompletionProposal[] result= filtered.toArray(new ICompletionProposal[filtered.size()]);
 		monitor.done();
 
 		if (DEBUG) {
@@ -278,12 +275,12 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 	 * @param context the code assist invocation context
 	 * @return the list of proposals
 	 */
-	private List collectProposals(ITextViewer viewer, int offset, IProgressMonitor monitor, ContentAssistInvocationContext context) {
-		List proposals= new ArrayList();
-		List providers= getCategories();
-		for (Iterator it= providers.iterator(); it.hasNext();) {
-			CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
-			List computed= cat.computeCompletionProposals(context, fPartition, new SubProgressMonitor(monitor, 1));
+	private List<ICompletionProposal> collectProposals(ITextViewer viewer, int offset, IProgressMonitor monitor, ContentAssistInvocationContext context) {
+		List<ICompletionProposal> proposals= new ArrayList<ICompletionProposal>();
+		List<CompletionProposalCategory> providers= getCategories();
+		for (Iterator<CompletionProposalCategory> it= providers.iterator(); it.hasNext();) {
+			CompletionProposalCategory cat= it.next();
+			List<ICompletionProposal> computed= cat.computeCompletionProposals(context, fPartition, new SubProgressMonitor(monitor, 1));
 			proposals.addAll(computed);
 			if (fErrorMessage == null)
 				fErrorMessage= cat.getErrorMessage();
@@ -303,7 +300,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 	 * @return the list of filtered and sorted proposals, ready for
 	 *         display (element type: {@link ICompletionProposal})
 	 */
-	protected List filterAndSortProposals(List proposals, IProgressMonitor monitor, ContentAssistInvocationContext context) {
+	protected List<ICompletionProposal> filterAndSortProposals(List<ICompletionProposal> proposals, IProgressMonitor monitor, ContentAssistInvocationContext context) {
 		return proposals;
 	}
 
@@ -317,25 +314,25 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 		monitor.beginTask(JavaTextMessages.ContentAssistProcessor_computing_contexts, fCategories.size() + 1);
 
 		monitor.subTask(JavaTextMessages.ContentAssistProcessor_collecting_contexts);
-		List proposals= collectContextInformation(viewer, offset, monitor);
+		List<IContextInformation> proposals= collectContextInformation(viewer, offset, monitor);
 
 		monitor.subTask(JavaTextMessages.ContentAssistProcessor_sorting_contexts);
-		List filtered= filterAndSortContextInformation(proposals, monitor);
+		List<IContextInformation> filtered= filterAndSortContextInformation(proposals, monitor);
 		fNumberOfComputedResults= filtered.size();
 
-		IContextInformation[] result= (IContextInformation[]) filtered.toArray(new IContextInformation[filtered.size()]);
+		IContextInformation[] result= filtered.toArray(new IContextInformation[filtered.size()]);
 		monitor.done();
 		return result;
 	}
 
-	private List collectContextInformation(ITextViewer viewer, int offset, IProgressMonitor monitor) {
-		List proposals= new ArrayList();
+	private List<IContextInformation> collectContextInformation(ITextViewer viewer, int offset, IProgressMonitor monitor) {
+		List<IContextInformation> proposals= new ArrayList<IContextInformation>();
 		ContentAssistInvocationContext context= createContext(viewer, offset);
 
-		List providers= getCategories();
-		for (Iterator it= providers.iterator(); it.hasNext();) {
-			CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
-			List computed= cat.computeContextInformation(context, fPartition, new SubProgressMonitor(monitor, 1));
+		List<CompletionProposalCategory> providers= getCategories();
+		for (Iterator<CompletionProposalCategory> it= providers.iterator(); it.hasNext();) {
+			CompletionProposalCategory cat= it.next();
+			List<IContextInformation> computed= cat.computeContextInformation(context, fPartition, new SubProgressMonitor(monitor, 1));
 			proposals.addAll(computed);
 			if (fErrorMessage == null)
 				fErrorMessage= cat.getErrorMessage();
@@ -355,7 +352,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 	 * @return the list of filtered and sorted proposals, ready for
 	 *         display (element type: {@link IContextInformation})
 	 */
-	protected List filterAndSortContextInformation(List contexts, IProgressMonitor monitor) {
+	protected List<IContextInformation> filterAndSortContextInformation(List<IContextInformation> contexts, IProgressMonitor monitor) {
 		return contexts;
 	}
 
@@ -427,7 +424,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 		return new ContentAssistInvocationContext(viewer, offset);
 	}
 
-	private List getCategories() {
+	private List<CompletionProposalCategory> getCategories() {
 		if (fCategoryIteration == null)
 			return fCategories;
 
@@ -438,7 +435,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 
 //		fAssistant.setShowMessage(fRepetition % 2 != 0);
 
-		return (List) fCategoryIteration.get(iteration);
+		return fCategoryIteration.get(iteration);
 	}
 
 	// This may show the warning dialog if all categories are disabled
@@ -446,19 +443,19 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 		fCategoryIteration= getCategoryIteration();
 	}
 
-	private List getCategoryIteration() {
-		List sequence= new ArrayList();
+	private List<List<CompletionProposalCategory>> getCategoryIteration() {
+		List<List<CompletionProposalCategory>> sequence= new ArrayList<List<CompletionProposalCategory>>();
 		sequence.add(getDefaultCategories());
-		for (Iterator it= getSeparateCategories().iterator(); it.hasNext();) {
-			CompletionProposalCategory cat= (CompletionProposalCategory) it.next();
+		for (Iterator<CompletionProposalCategory> it= getSeparateCategories().iterator(); it.hasNext();) {
+			CompletionProposalCategory cat= it.next();
 			sequence.add(Collections.singletonList(cat));
 		}
 		return sequence;
 	}
 
-	private List getDefaultCategories() {
+	private List<CompletionProposalCategory> getDefaultCategories() {
 		// default mix - enable all included computers
-		List included= getDefaultCategoriesUnchecked();
+		List<CompletionProposalCategory> included= getDefaultCategoriesUnchecked();
 
 		if (fComputerRegistry.hasUninstalledComputers(fPartition, included)) {
 			if (informUserAboutEmptyDefaultCategory())
@@ -470,10 +467,10 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 		return included;
 	}
 
-	private List getDefaultCategoriesUnchecked() {
-		List included= new ArrayList();
-		for (Iterator it= fCategories.iterator(); it.hasNext();) {
-			CompletionProposalCategory category= (CompletionProposalCategory) it.next();
+	private List<CompletionProposalCategory> getDefaultCategoriesUnchecked() {
+		List<CompletionProposalCategory> included= new ArrayList<CompletionProposalCategory>();
+		for (Iterator<CompletionProposalCategory> it= fCategories.iterator(); it.hasNext();) {
+			CompletionProposalCategory category= it.next();
 			if (category.isIncluded() && category.hasComputers(fPartition))
 				included.add(category);
 		}
@@ -501,6 +498,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 				/*
 				 * @see org.eclipse.jdt.internal.ui.dialogs.OptionalMessageDialog#createCustomArea(org.eclipse.swt.widgets.Composite)
 				 */
+				@Override
 				protected Control createCustomArea(Composite composite) {
 					// wrap link and checkbox in one composite without space
 					Composite parent= new Composite(composite, SWT.NONE);
@@ -520,7 +518,8 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 	        		Link link= new Link(linkComposite, SWT.NONE);
 	        		link.setText(linkMessage);
 	        		link.addSelectionListener(new SelectionAdapter() {
-	        			public void widgetSelected(SelectionEvent e) {
+	        			@Override
+						public void widgetSelected(SelectionEvent e) {
 	        				setReturnCode(settingsId);
 	        				close();
 	        			}
@@ -538,6 +537,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 				/*
 				 * @see org.eclipse.jface.dialogs.MessageDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
 				 */
+				@Override
 				protected void createButtonsForButtonBar(Composite parent) {
 			        Button[] buttons= new Button[2];
 					buttons[0]= createButton(parent, restoreId, restoreButtonLabel, false);
@@ -561,10 +561,10 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 		return false;
 	}
 
-	private List getSeparateCategories() {
-		ArrayList sorted= new ArrayList();
-		for (Iterator it= fCategories.iterator(); it.hasNext();) {
-			CompletionProposalCategory category= (CompletionProposalCategory) it.next();
+	private List<CompletionProposalCategory> getSeparateCategories() {
+		ArrayList<CompletionProposalCategory> sorted= new ArrayList<CompletionProposalCategory>();
+		for (Iterator<CompletionProposalCategory> it= fCategories.iterator(); it.hasNext();) {
+			CompletionProposalCategory category= it.next();
 			if (category.isSeparateCommand() && category.hasComputers(fPartition))
 				sorted.add(category);
 		}
@@ -584,7 +584,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
 		int iteration= repetition % fCategoryIteration.size();
 		if (iteration == 0)
 			return JavaTextMessages.ContentAssistProcessor_defaultProposalCategory;
-		return toString((CompletionProposalCategory) ((List) fCategoryIteration.get(iteration)).get(0));
+		return toString(fCategoryIteration.get(iteration).get(0));
 	}
 
 	private String toString(CompletionProposalCategory category) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FieldProposalInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FieldProposalInfo.java
index c04cae6..f6dc476 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FieldProposalInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FieldProposalInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public final class FieldProposalInfo extends MemberProposalInfo {
 	 * @return the resolved member or <code>null</code> if none is found
 	 * @throws JavaModelException if accessing the java model fails
 	 */
+	@Override
 	protected IMember resolveMember() throws JavaModelException {
 		char[] declarationSignature= fProposal.getDeclarationSignature();
 		// for synthetic fields on arrays, declaration signatures may be null
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java
index 9255d98..6326876 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public final class FillArgumentNamesCompletionProposalCollector extends Completi
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.ResultCollector#createJavaCompletionProposal(org.eclipse.jdt.core.CompletionProposal)
 	 */
+	@Override
 	protected IJavaCompletionProposal createJavaCompletionProposal(CompletionProposal proposal) {
 		switch (proposal.getKind()) {
 			case CompletionProposal.METHOD_REF:
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FilledArgumentNamesMethodProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FilledArgumentNamesMethodProposal.java
index 9a144a9..2fb3eab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FilledArgumentNamesMethodProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FilledArgumentNamesMethodProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public final class FilledArgumentNamesMethodProposal extends JavaMethodCompletio
 	/*
 	 * @see ICompletionProposalExtension#apply(IDocument, char)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		super.apply(document, trigger, offset);
 		int baseOffset= getReplacementOffset();
@@ -93,6 +94,7 @@ public final class FilledArgumentNamesMethodProposal extends JavaMethodCompletio
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaMethodCompletionProposal#needsLinkedMode()
 	 */
+	@Override
 	protected boolean needsLinkedMode() {
 		return false; // we handle it ourselves
 	}
@@ -100,6 +102,7 @@ public final class FilledArgumentNamesMethodProposal extends JavaMethodCompletio
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeReplacementString()
 	 */
+	@Override
 	protected String computeReplacementString() {
 
 		if (!hasParameters() || !hasArgumentList())
@@ -159,6 +162,7 @@ public final class FilledArgumentNamesMethodProposal extends JavaMethodCompletio
 	/*
 	 * @see ICompletionProposal#getSelection(IDocument)
 	 */
+	@Override
 	public Point getSelection(IDocument document) {
 		if (fSelectedRegion == null)
 			return new Point(getReplacementOffset(), 0);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/GetterSetterCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/GetterSetterCompletionProposal.java
index ac1a30b..bebc4c5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/GetterSetterCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/GetterSetterCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,13 +40,15 @@ import org.eclipse.jdt.internal.corext.util.JdtFlags;
 import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.internal.corext.util.Strings;
 
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 public class GetterSetterCompletionProposal extends JavaTypeCompletionProposal implements ICompletionProposalExtension4 {
 
-	public static void evaluateProposals(IType type, String prefix, int offset, int length, int relevance, Set suggestedMethods, Collection result) throws CoreException {
+	public static void evaluateProposals(IType type, String prefix, int offset, int length, int relevance, Set<String> suggestedMethods, Collection<IJavaCompletionProposal> result) throws CoreException {
 		if (prefix.length() == 0) {
 			relevance--;
 		}
@@ -116,6 +118,7 @@ public class GetterSetterCompletionProposal extends JavaTypeCompletionProposal i
 	/* (non-Javadoc)
 	 * @see JavaTypeCompletionProposal#updateReplacementString(IDocument, char, int, ImportRewrite)
 	 */
+	@Override
 	protected boolean updateReplacementString(IDocument document, char trigger, int offset, ImportRewrite impRewrite) throws CoreException, BadLocationException {
 
 		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(fField.getJavaProject());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/HippieProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/HippieProposalComputer.java
index a666787..49066c0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/HippieProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/HippieProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,9 @@ import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+
 import org.eclipse.ui.texteditor.HippieProposalProcessor;
 
 import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
@@ -39,14 +42,14 @@ public final class HippieProposalComputer implements IJavaCompletionProposalComp
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeCompletionProposals(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		return Arrays.asList(fProcessor.computeCompletionProposals(context.getViewer(), context.getInvocationOffset()));
 	}
 
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeContextInformation(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		return Arrays.asList(fProcessor.computeContextInformation(context.getViewer(), context.getInvocationOffset()));
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java
index d424dcf..f4f601e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,7 @@ public class ImportCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#getReplacementString()
 	 */
+	@Override
 	public final String getReplacementString() {
 		if (!fReplacementStringComputed)
 			setReplacementString(computeReplacementString());
@@ -129,6 +130,7 @@ public class ImportCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#apply(org.eclipse.jface.text.IDocument, char, int)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		try {
 			super.apply(document, trigger, offset);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAllCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAllCompletionProposalComputer.java
index 1b22a5d..3284bba 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAllCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAllCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
  */
 public class JavaAllCompletionProposalComputer extends JavaTypeCompletionProposalComputer {
 
+	@Override
 	protected CompletionProposalCollector createCollector(JavaContentAssistInvocationContext context) {
 		CompletionProposalCollector collector= super.createCollector(context);
 		collector.setIgnored(CompletionProposal.ANNOTATION_ATTRIBUTE_REF, false);
@@ -44,6 +45,7 @@ public class JavaAllCompletionProposalComputer extends JavaTypeCompletionProposa
 		return collector;
 	}
 
+	@Override
 	protected int guessContextInformationPosition(ContentAssistInvocationContext context) {
 		int invocationOffset= context.getInvocationOffset();
 		int typeContext= super.guessContextInformationPosition(context);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java
index 7c51a51..c79aa35 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,6 @@ import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.compiler.IScanner;
 import org.eclipse.jdt.core.compiler.ITerminalSymbols;
 import org.eclipse.jdt.core.compiler.InvalidInputException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -61,6 +60,7 @@ import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.text.IJavaPartitions;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
 import org.eclipse.jdt.internal.ui.text.FastJavaPartitionScanner;
 import org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner;
@@ -91,6 +91,7 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 	private boolean fCloseBrace;
 	private boolean fIsSmartMode;
 	private boolean fIsSmartTab;
+	private boolean fIsSmartIndentAfterNewline;
 
 	private String fPartitioning;
 	private final IJavaProject fProject;
@@ -520,7 +521,7 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 
 		CompilationUnit compilationUnit= null;
 		try {
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setSource(info.buffer);
 			compilationUnit= (CompilationUnit) parser.createAST(null);
 		} catch (ArrayIndexOutOfBoundsException x) {
@@ -679,6 +680,8 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 			boolean isIndentDetected= false;
 			StringBuffer addition= new StringBuffer();
 			int insertLength= 0;
+			int firstLineInsertLength= 0;
+			int firstLineIndent= 0;
 			int first= document.computeNumberOfLines(prefix) + firstLine; // don't format first line
 			int lines= temp.getNumberOfLines();
 			int tabLength= getVisualTabLengthPreference();
@@ -701,8 +704,14 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 						return; // bail out
 
 					insertLength= subtractIndent(correct, current, addition, tabLength);
+					if (l == first) {
+						firstLineInsertLength= insertLength;
+						firstLineIndent= current.length();
+					}
 					if (l != first && temp.get(lineOffset, lineLength).trim().length() != 0) {
 						isIndentDetected= true;
+						if (firstLineIndent >= current.length())
+							insertLength= firstLineInsertLength;
 						if (insertLength == 0) {
 							 // no adjustment needed, bail out
 							if (firstLine == 0) {
@@ -714,7 +723,6 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 							}
 							return;
 						}
-						removeJavaStuff(temp);
 					} else {
 						changed= insertLength != 0;
 					}
@@ -728,6 +736,7 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 
 			}
 
+			removeJavaStuff(temp);
 			temp.stopRewriteSession(session);
 			newText= temp.get(prefix.length(), temp.getLength() - prefix.length());
 
@@ -1203,6 +1212,7 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 	/*
 	 * @see org.eclipse.jface.text.IAutoIndentStrategy#customizeDocumentCommand(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.DocumentCommand)
 	 */
+	@Override
 	public void customizeDocumentCommand(IDocument d, DocumentCommand c) {
 		if (c.doit == false)
 			return;
@@ -1217,8 +1227,12 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
 		if (!fIsSmartTab && isRepresentingTab(c.text))
 			return;
 
-		if (c.length == 0 && c.text != null && isLineDelimiter(d, c.text))
-			smartIndentAfterNewLine(d, c);
+		if (c.length == 0 && c.text != null && isLineDelimiter(d, c.text)) {
+			if (fIsSmartIndentAfterNewline)
+				smartIndentAfterNewLine(d, c);
+			else
+				super.customizeDocumentCommand(d, c);
+		}
 		else if (c.text.length() == 1)
 			smartIndentOnKeypress(d, c);
 		else if (c.text.length() > 1 && getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SMART_PASTE))
@@ -1262,6 +1276,7 @@ public class JavaAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy {
         IPreferenceStore preferenceStore= getPreferenceStore();
 		fCloseBrace= preferenceStore.getBoolean(PreferenceConstants.EDITOR_CLOSE_BRACES);
 		fIsSmartTab= preferenceStore.getBoolean(PreferenceConstants.EDITOR_SMART_TAB);
+		fIsSmartIndentAfterNewline= preferenceStore.getBoolean(PreferenceConstants.EDITOR_SMART_INDENT_AFTER_NEWLINE);
 		fIsSmartMode= computeSmartMode();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java
index 3f3dca4..0f50a2f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -180,6 +180,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#evaluate(org.eclipse.jface.text.rules.ICharacterScanner, org.eclipse.jdt.internal.ui.text.CombinedWordRule.CharacterBuffer)
 		 */
+		@Override
 		public IToken evaluate(ICharacterScanner scanner, CombinedWordRule.CharacterBuffer word) {
 			IToken token= super.evaluate(scanner, word);
 
@@ -402,7 +403,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 		ANNOTATION_COLOR_KEY,
 	};
 
-	private List fVersionDependentRules= new ArrayList(3);
+	private List<ISourceVersionDependent> fVersionDependentRules= new ArrayList<ISourceVersionDependent>(3);
 
 	/**
 	 * Creates a Java code scanner
@@ -418,6 +419,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see AbstractJavaScanner#getTokenProperties()
 	 */
+	@Override
 	protected String[] getTokenProperties() {
 		return fgTokenProperties;
 	}
@@ -425,9 +427,10 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see AbstractJavaScanner#createRules()
 	 */
-	protected List createRules() {
+	@Override
+	protected List<IRule> createRules() {
 
-		List rules= new ArrayList();
+		List<IRule> rules= new ArrayList<IRule>();
 
 		// Add rule for character constants.
 		Token token= getToken(IJavaColorConstants.JAVA_STRING);
@@ -504,6 +507,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getBoldKey(java.lang.String)
 	 */
+	@Override
 	protected String getBoldKey(String colorKey) {
 		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
 			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_BOLD_SUFFIX;
@@ -513,6 +517,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getItalicKey(java.lang.String)
 	 */
+	@Override
 	protected String getItalicKey(String colorKey) {
 		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
 			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_ITALIC_SUFFIX;
@@ -522,6 +527,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getStrikethroughKey(java.lang.String)
 	 */
+	@Override
 	protected String getStrikethroughKey(String colorKey) {
 		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
 			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_STRIKETHROUGH_SUFFIX;
@@ -531,6 +537,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getUnderlineKey(java.lang.String)
 	 */
+	@Override
 	protected String getUnderlineKey(String colorKey) {
 		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
 			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_UNDERLINE_SUFFIX;
@@ -540,6 +547,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see AbstractJavaScanner#affectsBehavior(PropertyChangeEvent)
 	 */
+	@Override
 	public boolean affectsBehavior(PropertyChangeEvent event) {
 		return event.getProperty().equals(SOURCE_VERSION) || super.affectsBehavior(event);
 	}
@@ -547,6 +555,7 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 	/*
 	 * @see AbstractJavaScanner#adaptToPreferenceChange(PropertyChangeEvent)
 	 */
+	@Override
 	public void adaptToPreferenceChange(PropertyChangeEvent event) {
 
 		if (event.getProperty().equals(SOURCE_VERSION)) {
@@ -555,8 +564,8 @@ public final class JavaCodeScanner extends AbstractJavaScanner {
 			if (value instanceof String) {
 				String s= (String) value;
 
-				for (Iterator it= fVersionDependentRules.iterator(); it.hasNext();) {
-					ISourceVersionDependent dependent= (ISourceVersionDependent) it.next();
+				for (Iterator<ISourceVersionDependent> it= fVersionDependentRules.iterator(); it.hasNext();) {
+					ISourceVersionDependent dependent= it.next();
 					dependent.setSourceVersion(s);
 				}
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProcessor.java
index b395fa7..c94a720 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.text.contentassist.IContextInformationValidator;
 
 import org.eclipse.ui.IEditorPart;
@@ -50,7 +51,7 @@ public class JavaCompletionProcessor extends ContentAssistProcessor {
 	 * @param restrict <code>true</code> if proposals should be restricted
 	 */
 	public void restrictProposalsToVisibility(boolean restrict) {
-		Hashtable options= JavaCore.getOptions();
+		Hashtable<String, String> options= JavaCore.getOptions();
 		Object value= options.get(VISIBILITY);
 		if (value instanceof String) {
 			String newValue= restrict ? ENABLED : DISABLED;
@@ -74,6 +75,7 @@ public class JavaCompletionProcessor extends ContentAssistProcessor {
 	/*
 	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
 	 */
+	@Override
 	public IContextInformationValidator getContextInformationValidator() {
 		if (fValidator == null)
 			fValidator= new JavaParameterListValidator();
@@ -83,7 +85,8 @@ public class JavaCompletionProcessor extends ContentAssistProcessor {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor#filterAndSort(java.util.List, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	protected List filterAndSortProposals(List proposals, IProgressMonitor monitor, ContentAssistInvocationContext context) {
+	@Override
+	protected List<ICompletionProposal> filterAndSortProposals(List<ICompletionProposal> proposals, IProgressMonitor monitor, ContentAssistInvocationContext context) {
 		ProposalSorterRegistry.getDefault().getCurrentSorter().sortProposals(context, proposals);
 		return proposals;
 	}
@@ -91,6 +94,7 @@ public class JavaCompletionProcessor extends ContentAssistProcessor {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor#createContext(org.eclipse.jface.text.ITextViewer, int)
 	 */
+	@Override
 	protected ContentAssistInvocationContext createContext(ITextViewer viewer, int offset) {
 		return new JavaContentAssistInvocationContext(viewer, offset, fEditor);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java
index 052c8c0..cecfade 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,6 +106,7 @@ public class JavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isValidPrefix(java.lang.String)
 	 */
+	@Override
 	protected boolean isValidPrefix(String prefix) {
 		String word= TextProcessor.deprocess(getDisplayString());
 		if (isInJavadoc()) {
@@ -127,6 +128,7 @@ public class JavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension3#getReplacementText()
 	 */
+	@Override
 	public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
 		String string= getReplacementString();
 		int pos= string.indexOf('(');
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java
index 05d12b1..c36a19a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -103,6 +103,7 @@ public class JavaCompletionProposalComputer implements IJavaCompletionProposalCo
 		/*
 		 * @see org.eclipse.jface.text.contentassist.IContextInformation#equals(java.lang.Object)
 		 */
+		@Override
 		public boolean equals(Object object) {
 			if (object instanceof ContextInformationWrapper)
 				return fContextInformation.equals(((ContextInformationWrapper) object).fContextInformation);
@@ -114,6 +115,7 @@ public class JavaCompletionProposalComputer implements IJavaCompletionProposalCo
 		 * @see java.lang.Object#hashCode()
 		 * @since 3.5
 		 */
+		@Override
 		public int hashCode() {
 			return fContextInformation.hashCode();
 		}
@@ -157,13 +159,13 @@ public class JavaCompletionProposalComputer implements IJavaCompletionProposalCo
 		return contextPosition;
 	}
 
-	private List addContextInformations(JavaContentAssistInvocationContext context, int offset) {
-		List proposals= internalComputeCompletionProposals(offset, context);
-		List result= new ArrayList(proposals.size());
-		List anonymousResult= new ArrayList(proposals.size());
+	private List<IContextInformation> addContextInformations(JavaContentAssistInvocationContext context, int offset) {
+		List<ICompletionProposal> proposals= internalComputeCompletionProposals(offset, context);
+		List<IContextInformation> result= new ArrayList<IContextInformation>(proposals.size());
+		List<IContextInformation> anonymousResult= new ArrayList<IContextInformation>(proposals.size());
 
-		for (Iterator it= proposals.iterator(); it.hasNext();) {
-			ICompletionProposal proposal= (ICompletionProposal) it.next();
+		for (Iterator<ICompletionProposal> it= proposals.iterator(); it.hasNext();) {
+			ICompletionProposal proposal= it.next();
 			IContextInformation contextInformation= proposal.getContextInformation();
 			if (contextInformation != null) {
 				ContextInformationWrapper wrapper= new ContextInformationWrapper(contextInformation);
@@ -184,32 +186,32 @@ public class JavaCompletionProposalComputer implements IJavaCompletionProposalCo
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeContextInformation(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (context instanceof JavaContentAssistInvocationContext) {
 			JavaContentAssistInvocationContext javaContext= (JavaContentAssistInvocationContext) context;
 
 			int contextInformationPosition= guessContextInformationPosition(javaContext);
-			List result= addContextInformations(javaContext, contextInformationPosition);
+			List<IContextInformation> result= addContextInformations(javaContext, contextInformationPosition);
 			return result;
 		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeCompletionProposals(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (context instanceof JavaContentAssistInvocationContext) {
 			JavaContentAssistInvocationContext javaContext= (JavaContentAssistInvocationContext) context;
 			return internalComputeCompletionProposals(context.getInvocationOffset(), javaContext);
 		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
-	private List internalComputeCompletionProposals(int offset, JavaContentAssistInvocationContext context) {
+	private List<ICompletionProposal> internalComputeCompletionProposals(int offset, JavaContentAssistInvocationContext context) {
 		ICompilationUnit unit= context.getCompilationUnit();
 		if (unit == null)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		ITextViewer viewer= context.getViewer();
 
@@ -263,7 +265,7 @@ public class JavaCompletionProposalComputer implements IJavaCompletionProposalCo
 			}
 		}
 
-		List proposals= new ArrayList(Arrays.asList(javaProposals));
+		List<ICompletionProposal> proposals= new ArrayList<ICompletionProposal>(Arrays.asList(javaProposals));
 		if (proposals.size() == 0) {
 			String error= collector.getErrorMessage();
 			if (error.length() > 0)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaDoubleClickSelector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaDoubleClickSelector.java
index 78dba03..492b9a0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaDoubleClickSelector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaDoubleClickSelector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -315,6 +315,7 @@ public class JavaDoubleClickSelector extends DefaultTextDoubleClickStrategy impl
 
 
 
+	@Override
 	protected IRegion findWord(IDocument document, int anchor) {
 		return fWordDetector.getWordSelection(document, anchor);
 	}
@@ -327,6 +328,7 @@ public class JavaDoubleClickSelector extends DefaultTextDoubleClickStrategy impl
 		fWordDetector.setSourceVersion(version);
 	}
 
+	@Override
 	protected IRegion findExtendedDoubleClickSelection(IDocument document, int offset) {
 		IRegion match= fPairMatcher.match(document, offset);
 		if (match != null && match.getLength() >= 2)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFieldWithCastedReceiverCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFieldWithCastedReceiverCompletionProposal.java
index 089dbae..7546a0d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFieldWithCastedReceiverCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFieldWithCastedReceiverCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ public class JavaFieldWithCastedReceiverCompletionProposal extends JavaCompletio
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isPrefix(java.lang.String, java.lang.String)
 	 */
+	@Override
 	protected boolean isPrefix(String prefix, String string) {
 		if (prefix != null)
 			prefix= prefix.substring(fProposal.getReceiverEnd() - fProposal.getReceiverStart() + 1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingContext.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingContext.java
index a62b838..5985777 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ public class JavaFormattingContext extends FormattingContext {
 	/*
 	 * @see org.eclipse.jface.text.formatter.IFormattingContext#getPreferenceKeys()
 	 */
+	@Override
 	public String[] getPreferenceKeys() {
 		return new String[] {
 			    DefaultCodeFormatterConstants.FORMATTER_COMMENT_FORMAT_BLOCK_COMMENT,
@@ -45,6 +46,7 @@ public class JavaFormattingContext extends FormattingContext {
 	/*
 	 * @see org.eclipse.jface.text.formatter.IFormattingContext#isBooleanPreference(java.lang.String)
 	 */
+	@Override
 	public boolean isBooleanPreference(String key) {
 		return !key.equals(DefaultCodeFormatterConstants.FORMATTER_COMMENT_LINE_LENGTH);
 	}
@@ -52,6 +54,7 @@ public class JavaFormattingContext extends FormattingContext {
 	/*
 	 * @see org.eclipse.jface.text.formatter.IFormattingContext#isIntegerPreference(java.lang.String)
 	 */
+	@Override
 	public boolean isIntegerPreference(String key) {
 		return key.equals(DefaultCodeFormatterConstants.FORMATTER_COMMENT_LINE_LENGTH);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java
index 6ac558c..623aa92 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.text.edits.TextEdit;
 
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentPartitioner;
 import org.eclipse.jface.text.TextUtilities;
 import org.eclipse.jface.text.TypedPosition;
 import org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy;
@@ -38,9 +39,9 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 public class JavaFormattingStrategy extends ContextBasedFormattingStrategy {
 
 	/** Documents to be formatted by this strategy */
-	private final LinkedList fDocuments= new LinkedList();
+	private final LinkedList<IDocument> fDocuments= new LinkedList<IDocument>();
 	/** Partitions to be formatted by this strategy */
-	private final LinkedList fPartitions= new LinkedList();
+	private final LinkedList<TypedPosition> fPartitions= new LinkedList<TypedPosition>();
 
 	/**
 	 * Creates a new java formatting strategy.
@@ -52,14 +53,15 @@ public class JavaFormattingStrategy extends ContextBasedFormattingStrategy {
 	/*
 	 * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#format()
 	 */
+	@Override
 	public void format() {
 		super.format();
 
-		final IDocument document= (IDocument)fDocuments.removeFirst();
-		final TypedPosition partition= (TypedPosition)fPartitions.removeFirst();
+		final IDocument document= fDocuments.removeFirst();
+		final TypedPosition partition= fPartitions.removeFirst();
 
 		if (document != null && partition != null) {
-			Map partitioners= null;
+			Map<String, IDocumentPartitioner> partitioners= null;
 			try {
 
 				final TextEdit edit= CodeFormatterUtil.reformat(CodeFormatter.K_COMPILATION_UNIT | CodeFormatter.F_INCLUDE_COMMENTS, document.get(), partition.getOffset(), partition.getLength(), 0, TextUtilities.getDefaultLineDelimiter(document), getPreferences());
@@ -85,16 +87,18 @@ public class JavaFormattingStrategy extends ContextBasedFormattingStrategy {
 	/*
 	 * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStarts(org.eclipse.jface.text.formatter.IFormattingContext)
 	 */
+	@Override
 	public void formatterStarts(final IFormattingContext context) {
 		super.formatterStarts(context);
 
-		fPartitions.addLast(context.getProperty(FormattingContextProperties.CONTEXT_PARTITION));
-		fDocuments.addLast(context.getProperty(FormattingContextProperties.CONTEXT_MEDIUM));
+		fPartitions.addLast((TypedPosition) context.getProperty(FormattingContextProperties.CONTEXT_PARTITION));
+		fDocuments.addLast((IDocument) context.getProperty(FormattingContextProperties.CONTEXT_MEDIUM));
 	}
 
 	/*
 	 * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStops()
 	 */
+	@Override
 	public void formatterStops() {
 		super.formatterStops();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaMethodCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaMethodCompletionProposal.java
index 1ba3563..7077f1e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaMethodCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaMethodCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ import org.eclipse.jdt.core.formatter.CodeFormatter;
 
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
 
+import org.eclipse.jdt.ui.JavaElementLabels;
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
 
@@ -49,6 +50,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 		super(proposal, context);
 	}
 
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		if (trigger == ' ' || trigger == '(')
 			trigger= '\0';
@@ -62,6 +64,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 		return hasArgumentList() && hasParameters();
 	}
 
+	@Override
 	public int getPrefixCompletionStart(IDocument document, int completionOffset) {
 		if (fProposal.getKind() == CompletionProposal.METHOD_REF_WITH_CASTED_RECEIVER) {
 			return fProposal.getTokenStart();
@@ -70,6 +73,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 		return super.getPrefixCompletionStart(document, completionOffset);
 	}
 	
+	@Override
 	public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
 		if (hasArgumentList() || fProposal.getKind() == CompletionProposal.CONSTRUCTOR_INVOCATION) {
 			String completion= String.valueOf(fProposal.getName());
@@ -82,6 +86,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 		return super.getPrefixCompletionText(document, completionOffset);
 	}
 
+	@Override
 	protected IContextInformation computeContextInformation() {
 		// no context information for METHOD_NAME_REF proposals (e.g. for static imports)
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=94654
@@ -95,6 +100,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 		return super.computeContextInformation();
 	}
 
+	@Override
 	protected char[] computeTriggerCharacters() {
 		if (fProposal.getKind() == CompletionProposal.METHOD_NAME_REFERENCE)
 			return METHOD_NAME_TRIGGERS;
@@ -145,6 +151,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 	 *
 	 * @return the formatter settings
 	 */
+	@Override
 	protected final FormatterPrefs getFormatterPrefs() {
 		if (fFormatterPrefs == null)
 			fFormatterPrefs= new FormatterPrefs(fInvocationContext.getProject());
@@ -154,6 +161,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeReplacementString()
 	 */
+	@Override
 	protected String computeReplacementString() {
 		if (!hasArgumentList())
 			return super.computeReplacementString();
@@ -212,6 +220,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 		buffer.append(LPAREN);
 	}
 
+	@Override
 	protected ProposalInfo computeProposalInfo() {
 		IJavaProject project= fInvocationContext.getProject();
 		if (project != null)
@@ -222,6 +231,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeSortString()
 	 */
+	@Override
 	protected String computeSortString() {
 		/*
 		 * Lexicographical sort order:
@@ -246,6 +256,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isOffsetValid(int)
 	 * @since 3.5
 	 */
+	@Override
 	protected boolean isOffsetValid(int offset) {
 		if (fProposal.getKind() != CompletionProposal.CONSTRUCTOR_INVOCATION)
 			return super.isOffsetValid(offset);
@@ -256,11 +267,18 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isValidPrefix(java.lang.String)
 	 */
+	@Override
 	protected boolean isValidPrefix(String prefix) {
 		if (super.isValidPrefix(prefix))
 			return true;
 
 		String word= TextProcessor.deprocess(getDisplayString());
+		if (fProposal.getKind() == CompletionProposal.CONSTRUCTOR_INVOCATION) {
+			int start= word.indexOf(JavaElementLabels.CONCAT_STRING) + JavaElementLabels.CONCAT_STRING.length();
+			word= word.substring(start);
+			return isPrefix(prefix, word) || isPrefix(prefix, new String(fProposal.getName()));
+		}
+
 		if (isInJavadoc()) {
 			int idx = word.indexOf("{@link "); //$NON-NLS-1$
 			if (idx==0) {
@@ -279,6 +297,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isPrefix(java.lang.String, java.lang.String)
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isPrefix(String prefix, String string) {
 		if (fProposal.getKind() == CompletionProposal.METHOD_REF_WITH_CASTED_RECEIVER && prefix != null)
 			prefix= prefix.substring(fProposal.getReceiverEnd() - fProposal.getReceiverStart() + 1);
@@ -289,6 +308,7 @@ public class JavaMethodCompletionProposal extends LazyJavaCompletionProposal {
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#getPrefix(org.eclipse.jface.text.IDocument, int)
 	 * @since 3.5
 	 */
+	@Override
 	protected String getPrefix(IDocument document, int offset) {
 		if (fProposal.getKind() != CompletionProposal.CONSTRUCTOR_INVOCATION)
 			return super.getPrefix(document, offset);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaNoTypeCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaNoTypeCompletionProposalComputer.java
index 6c640bd..a2d5a03 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaNoTypeCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaNoTypeCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class JavaNoTypeCompletionProposalComputer extends JavaCompletionProposal
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer#createCollector(org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext)
 	 */
+	@Override
 	protected CompletionProposalCollector createCollector(JavaContentAssistInvocationContext context) {
 		CompletionProposalCollector collector= super.createCollector(context);
 		collector.setIgnored(CompletionProposal.ANNOTATION_ATTRIBUTE_REF, false);
@@ -45,6 +46,7 @@ public class JavaNoTypeCompletionProposalComputer extends JavaCompletionProposal
 		return collector;
 	}
 
+	@Override
 	protected int guessContextInformationPosition(ContentAssistInvocationContext context) {
 		return guessMethodContextInformationPosition(context);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaParameterListValidator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaParameterListValidator.java
index f00fcaa..15e1337 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaParameterListValidator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaParameterListValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -300,7 +300,7 @@ public class JavaParameterListValidator implements IContextInformationValidator,
 	private int[] computeCommaPositions(String code) {
 		final int length= code.length();
 	    int pos= 0;
-		List positions= new ArrayList();
+		List<Integer> positions= new ArrayList<Integer>();
 		positions.add(new Integer(-1));
 		while (pos < length && pos != -1) {
 			char ch= code.charAt(pos);
@@ -324,7 +324,7 @@ public class JavaParameterListValidator implements IContextInformationValidator,
 
 		int[] fields= new int[positions.size()];
 		for (int i= 0; i < fields.length; i++)
-	        fields[i]= ((Integer) positions.get(i)).intValue();
+	        fields[i]= positions.get(i).intValue();
 	    return fields;
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java
index 728b5c8..6eb1afb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -164,8 +164,8 @@ public class JavaStringAutoIndentStrategy extends DefaultIndentLineAutoEditStrat
 		String delimiter= TextUtilities.getDefaultLineDelimiter(document);
 
 		IRegion line= document.getLineInformationOfOffset(offset);
-		String string= document.get(line.getOffset(), offset - line.getOffset());
-		if (string.trim().length() != 0)
+		String string= document.get(line.getOffset(), offset - line.getOffset()).trim();
+		if (string.length() != 0 && !string.equals("+")) //$NON-NLS-1$
 			indentation += String.valueOf("\t\t"); //$NON-NLS-1$
 
 		IPreferenceStore preferenceStore= JavaPlugin.getDefault().getPreferenceStore();
@@ -191,6 +191,7 @@ public class JavaStringAutoIndentStrategy extends DefaultIndentLineAutoEditStrat
 	/*
 	 * @see org.eclipse.jface.text.IAutoIndentStrategy#customizeDocumentCommand(IDocument, DocumentCommand)
 	 */
+	@Override
 	public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
 		try {
 			if (command.text == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java
index 3a95aa9..a51d693 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,6 +95,7 @@ public class JavaTypeCompletionProposal extends JavaCompletionProposal {
 	/* (non-Javadoc)
 	 * @see ICompletionProposalExtension#apply(IDocument, char, int)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		try {
 			ImportRewrite impRewrite= null;
@@ -130,6 +131,7 @@ public class JavaTypeCompletionProposal extends JavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isValidPrefix(java.lang.String)
 	 */
+	@Override
 	protected boolean isValidPrefix(String prefix) {
 		return super.isValidPrefix(prefix) || isPrefix(prefix, fUnqualifiedTypeName) || isPrefix(prefix, fFullyQualifiedTypeName);
 	}
@@ -137,6 +139,7 @@ public class JavaTypeCompletionProposal extends JavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal#getCompletionText()
 	 */
+	@Override
 	public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
 		return fUnqualifiedTypeName;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java
index aaa00a1..132233d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
 
 import org.eclipse.jdt.core.CompletionProposal;
 import org.eclipse.jdt.core.IJavaElement;
@@ -45,6 +46,7 @@ public class JavaTypeCompletionProposalComputer extends JavaCompletionProposalCo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer#createCollector(org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext)
 	 */
+	@Override
 	protected CompletionProposalCollector createCollector(JavaContentAssistInvocationContext context) {
 		CompletionProposalCollector collector= super.createCollector(context);
 		collector.setIgnored(CompletionProposal.TYPE_REF, false);
@@ -54,8 +56,9 @@ public class JavaTypeCompletionProposalComputer extends JavaCompletionProposalCo
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer#computeCompletionProposals(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-		List types= super.computeCompletionProposals(context, monitor);
+	@Override
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+		List<ICompletionProposal> types= super.computeCompletionProposals(context, monitor);
 		if (context instanceof JavaContentAssistInvocationContext) {
 			JavaContentAssistInvocationContext javaContext= (JavaContentAssistInvocationContext) context;
 			try {
@@ -66,8 +69,8 @@ public class JavaTypeCompletionProposalComputer extends JavaCompletionProposalCo
 
 						// compute minmimum relevance and already proposed list
 						int relevance= Integer.MAX_VALUE;
-						Set proposed= new HashSet();
-						for (Iterator it= types.iterator(); it.hasNext();) {
+						Set<String> proposed= new HashSet<String>();
+						for (Iterator<ICompletionProposal> it= types.iterator(); it.hasNext();) {
 							AbstractJavaCompletionProposal p= (AbstractJavaCompletionProposal) it.next();
 							IJavaElement element= p.getJavaElement();
 							if (element instanceof IType)
@@ -76,10 +79,10 @@ public class JavaTypeCompletionProposalComputer extends JavaCompletionProposalCo
 						}
 
 						// insert history types
-						List history= JavaPlugin.getDefault().getContentAssistHistory().getHistory(expectedType.getFullyQualifiedName()).getTypes();
+						List<String> history= JavaPlugin.getDefault().getContentAssistHistory().getHistory(expectedType.getFullyQualifiedName()).getTypes();
 						relevance-= history.size() + 1;
-						for (Iterator it= history.iterator(); it.hasNext();) {
-							String type= (String) it.next();
+						for (Iterator<String> it= history.iterator(); it.hasNext();) {
+							String type= it.next();
 							if (proposed.contains(type))
 								continue;
 
@@ -141,6 +144,7 @@ public class JavaTypeCompletionProposalComputer extends JavaCompletionProposalCo
 		return sourceVersion != null && JavaCore.VERSION_1_5.compareTo(sourceVersion) <= 0;
 	}
 
+	@Override
 	protected int guessContextInformationPosition(ContentAssistInvocationContext context) {
 		final int contextPosition= context.getInvocationOffset();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavadocDoubleClickStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavadocDoubleClickStrategy.java
index eb2de6b..45b5684 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavadocDoubleClickStrategy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavadocDoubleClickStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,7 @@ public class JavadocDoubleClickStrategy extends PartitionDoubleClickSelector {
 	 * @param position the offset around which to return the word
 	 * @return the word's region, or <code>null</code> for no selection
 	 */
+	@Override
 	protected IRegion findExtendedDoubleClickSelection(IDocument document, int position) {
 		try {
 			IRegion match= super.findExtendedDoubleClickSelection(document, position);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyGenericTypeProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyGenericTypeProposal.java
index eaeef0f..a7871b5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyGenericTypeProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyGenericTypeProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,6 @@ import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
 import org.eclipse.jdt.core.dom.IBinding;
@@ -61,6 +60,7 @@ import org.eclipse.jdt.internal.corext.util.Strings;
 import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.EditorHighlightingSynchronizer;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 
@@ -145,6 +145,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 		/*
 		 * @see java.lang.Object#equals(java.lang.Object)
 		 */
+		@Override
 		public boolean equals(Object obj) {
 			if (obj instanceof ContextInformation) {
 				ContextInformation ci= (ContextInformation) obj;
@@ -157,6 +158,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 		 * @see java.lang.Object#hashCode()
 		 * @since 3.1
 		 */
+		@Override
 		public int hashCode() {
 			int low= fContextDisplayString != null ? fContextDisplayString.hashCode() : 0;
 			return fPosition << 24 | fInformationDisplayString.hashCode() << 16 | low;
@@ -183,6 +185,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 			return fIsAmbiguous;
 		}
 
+		@Override
 		public String toString() {
 			return fProposal;
 		}
@@ -198,6 +201,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 	/*
 	 * @see ICompletionProposalExtension#apply(IDocument, char)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 
 		if (shouldAppendArguments(document, offset, trigger)) {
@@ -249,6 +253,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaTypeCompletionProposal#computeTriggerCharacters()
 	 */
+	@Override
 	protected char[] computeTriggerCharacters() {
 		return GENERIC_TYPE_TRIGGERS;
 	}
@@ -454,7 +459,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 		if (!hierarchy.contains(superType))
 			return null; // no path
 
-		List path= new LinkedList();
+		List<IType> path= new LinkedList<IType>();
 		path.add(superType);
 		do {
 			// any sub type must be on a hierarchy chain from superType to subType
@@ -462,7 +467,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 			path.add(superType);
 		} while (!superType.equals(subType)); // since the equality case is handled above, we can spare one check
 
-		return (IType[]) path.toArray(new IType[path.size()]);
+		return path.toArray(new IType[path.size()]);
 	}
 
 	private NullProgressMonitor getProgressMonitor() {
@@ -595,13 +600,14 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 			keys[i]= String.valueOf(chKeys[0]);
 		}
 
-		final ASTParser parser= ASTParser.newParser(AST.JLS3);
+		final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		parser.setProject(fCompilationUnit.getJavaProject());
 		parser.setResolveBindings(true);
 		parser.setStatementsRecovery(true);
 
-		final Map bindings= new HashMap();
+		final Map<String, IBinding> bindings= new HashMap<String, IBinding>();
 		ASTRequestor requestor= new ASTRequestor() {
+			@Override
 			public void acceptBinding(String bindingKey, IBinding binding) {
 				bindings.put(bindingKey, binding);
 			}
@@ -758,6 +764,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 	/*
 	 * @see ICompletionProposal#getSelection(IDocument)
 	 */
+	@Override
 	public Point getSelection(IDocument document) {
 		if (fSelectedRegion == null)
 			return super.getSelection(document);
@@ -773,6 +780,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeContextInformation()
 	 */
+	@Override
 	protected IContextInformation computeContextInformation() {
 		try {
 			if (hasParameters()) {
@@ -785,6 +793,7 @@ public final class LazyGenericTypeProposal extends LazyJavaTypeCompletionProposa
 		return super.computeContextInformation();
 	}
 
+	@Override
 	protected int computeCursorPosition() {
 		if (fSelectedRegion != null)
 			return fSelectedRegion.getOffset() - getReplacementOffset();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaCompletionProposal.java
index 13262c0..4b12870 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,16 +11,18 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.text.java;
 
-
 import org.eclipse.osgi.util.TextProcessor;
 
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
 
 import org.eclipse.core.runtime.Assert;
 
 import org.eclipse.jface.viewers.StyledString;
 
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 
 import org.eclipse.jdt.core.CompletionProposal;
@@ -123,6 +125,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see ICompletionProposalExtension#getTriggerCharacters()
 	 */
+	@Override
 	public final char[] getTriggerCharacters() {
 		if (!fTriggerCharactersComputed)
 			setTriggerCharacters(computeTriggerCharacters());
@@ -137,6 +140,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the trigger characters.
 	 * @param triggerCharacters The set of characters which can trigger the application of this completion proposal
 	 */
+	@Override
 	public final void setTriggerCharacters(char[] triggerCharacters) {
 		fTriggerCharactersComputed= true;
 		super.setTriggerCharacters(triggerCharacters);
@@ -146,6 +150,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the proposal info.
 	 * @param proposalInfo The additional information associated with this proposal or <code>null</code>
 	 */
+	@Override
 	public final void setProposalInfo(ProposalInfo proposalInfo) {
 		fProposalInfoComputed= true;
 		super.setProposalInfo(proposalInfo);
@@ -158,6 +163,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * @return the additional proposal info, or <code>null</code> if none
 	 *         exists
 	 */
+	@Override
 	protected final ProposalInfo getProposalInfo() {
 		if (!fProposalInfoComputed)
 			setProposalInfo(computeProposalInfo());
@@ -173,11 +179,13 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * (Cursor positioned after the completion)
 	 * @param cursorPosition The cursorPosition to set
 	 */
+	@Override
 	public final void setCursorPosition(int cursorPosition) {
 		fCursorPositionComputed= true;
 		super.setCursorPosition(cursorPosition);
 	}
 
+	@Override
 	protected final int getCursorPosition() {
 		if (!fCursorPositionComputed)
 			setCursorPosition(computeCursorPosition());
@@ -191,6 +199,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isInJavadoc()
 	 */
+	@Override
 	protected final boolean isInJavadoc() {
 		return fInvocationContext.getCoreContext().isInJavadoc();
 	}
@@ -198,6 +207,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see ICompletionProposal#getContextInformation()
 	 */
+	@Override
 	public final IContextInformation getContextInformation() {
 		if (!fContextInformationComputed)
 			setContextInformation(computeContextInformation());
@@ -212,6 +222,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the context information.
 	 * @param contextInformation The context information associated with this proposal
 	 */
+	@Override
 	public final void setContextInformation(IContextInformation contextInformation) {
 		fContextInformationComputed= true;
 		super.setContextInformation(contextInformation);
@@ -221,23 +232,27 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#getStyledDisplayString()
 	 * @since 3.4
 	 */
+	@Override
 	public StyledString getStyledDisplayString() {
 		if (!fDisplayStringComputed)
 			setStyledDisplayString(computeDisplayString());
 		return super.getStyledDisplayString();
 	}
 
+	@Override
 	public String getDisplayString() {
 		if (!fDisplayStringComputed)
 			setStyledDisplayString(computeDisplayString());
 		return super.getDisplayString();
 	}
 
+	@Override
 	protected final void setDisplayString(String string) {
 		fDisplayStringComputed= true;
 		super.setDisplayString(string);
 	}
 
+	@Override
 	public void setStyledDisplayString(StyledString text) {
 		fDisplayStringComputed= true;
 		super.setStyledDisplayString(text);
@@ -250,6 +265,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see ICompletionProposal#getAdditionalProposalInfo()
 	 */
+	@Override
 	public final String getAdditionalProposalInfo() {
 		return super.getAdditionalProposalInfo();
 	}
@@ -258,6 +274,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Gets the replacement offset.
 	 * @return Returns a int
 	 */
+	@Override
 	public final int getReplacementOffset() {
 		if (!fReplacementOffsetComputed)
 			setReplacementOffset(fProposal.getReplaceStart());
@@ -268,6 +285,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the replacement offset.
 	 * @param replacementOffset The replacement offset to set
 	 */
+	@Override
 	public final void setReplacementOffset(int replacementOffset) {
 		fReplacementOffsetComputed= true;
 		super.setReplacementOffset(replacementOffset);
@@ -276,6 +294,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension3#getCompletionOffset()
 	 */
+	@Override
 	public int getPrefixCompletionStart(IDocument document, int completionOffset) {
 		return getReplacementOffset();
 	}
@@ -284,6 +303,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Gets the replacement length.
 	 * @return Returns a int
 	 */
+	@Override
 	public final int getReplacementLength() {
 		if (!fReplacementLengthComputed)
 			setReplacementLength(fProposal.getReplaceEnd() - fProposal.getReplaceStart());
@@ -294,6 +314,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the replacement length.
 	 * @param replacementLength The replacementLength to set
 	 */
+	@Override
 	public final void setReplacementLength(int replacementLength) {
 		fReplacementLengthComputed= true;
 		super.setReplacementLength(replacementLength);
@@ -303,6 +324,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Gets the replacement string.
 	 * @return Returns a String
 	 */
+	@Override
 	public final String getReplacementString() {
 		if (!fReplacementStringComputed)
 			setReplacementString(computeReplacementString());
@@ -317,6 +339,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the replacement string.
 	 * @param replacementString The replacement string to set
 	 */
+	@Override
 	public final void setReplacementString(String replacementString) {
 		fReplacementStringComputed= true;
 		super.setReplacementString(replacementString);
@@ -325,6 +348,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see ICompletionProposal#getImage()
 	 */
+	@Override
 	public final Image getImage() {
 		if (!fImageComputed)
 			setImage(computeImage());
@@ -339,6 +363,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the image.
 	 * @param image The image to set
 	 */
+	@Override
 	public final void setImage(Image image) {
 		fImageComputed= true;
 		super.setImage(image);
@@ -347,6 +372,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#isValidPrefix(java.lang.String)
 	 */
+	@Override
 	protected boolean isValidPrefix(String prefix) {
 		if (super.isValidPrefix(prefix))
 			return true;
@@ -367,6 +393,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Gets the proposal's relevance.
 	 * @return Returns a int
 	 */
+	@Override
 	public final int getRelevance() {
 		if (!fRelevanceComputed)
 			setRelevance(computeRelevance());
@@ -377,6 +404,7 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	 * Sets the proposal's relevance.
 	 * @param relevance The relevance to set
 	 */
+	@Override
 	public final void setRelevance(int relevance) {
 		fRelevanceComputed= true;
 		super.setRelevance(relevance);
@@ -413,12 +441,14 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 		}
 	}
 
+	@Override
 	public final String getSortString() {
 		if (!fSortStringComputed)
 			setSortString(computeSortString());
 		return super.getSortString();
 	}
 
+	@Override
 	protected final void setSortString(String string) {
 		fSortStringComputed= true;
 		super.setSortString(string);
@@ -444,4 +474,29 @@ public class LazyJavaCompletionProposal extends AbstractJavaCompletionProposal {
 	public void setContextInformationPosition(int contextInformationPosition) {
 		fContextInformationPosition= contextInformationPosition;
 	}
+
+	/*
+	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#apply(org.eclipse.jface.text.ITextViewer, char, int, int)
+	 * @since 3.7
+	 */
+	@Override
+	public void apply(ITextViewer viewer, char trigger, int stateMask, int offset) {
+		Point selection= viewer.getSelectedRange();
+		boolean smartToggle= (stateMask & SWT.CTRL) != 0;
+		if (!(insertCompletion() ^ smartToggle) && selection.y > 0)
+			fReplacementLengthComputed= false;
+		super.apply(viewer, trigger, stateMask, offset);
+	}
+
+	/*
+	 * @see org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal#selected(org.eclipse.jface.text.ITextViewer, boolean)
+	 * @since 3.7
+	 */
+	@Override
+	public void selected(ITextViewer viewer, boolean smartToggle) {
+		Point selection= viewer.getSelectedRange();
+		if (!(insertCompletion() ^ smartToggle) && selection.y > 0)
+			fReplacementLengthComputed= false;
+		super.selected(viewer, smartToggle);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java
index 5141c8b..b4deb8d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeReplacementString()
 	 */
+	@Override
 	protected String computeReplacementString() {
 		String replacement= super.computeReplacementString();
 
@@ -187,6 +188,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#apply(org.eclipse.jface.text.IDocument, char, int)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		try {
 			boolean insertClosingParenthesis= trigger == '(' && autocloseBrackets();
@@ -302,6 +304,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#isValidPrefix(java.lang.String)
 	 */
+	@Override
 	protected boolean isValidPrefix(String prefix) {
 		return isPrefix(prefix, getSimpleTypeName()) || isPrefix(prefix, getQualifiedTypeName());
 	}
@@ -309,6 +312,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal#getCompletionText()
 	 */
+	@Override
 	public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
 		String prefix= getPrefix(document, completionOffset);
 
@@ -328,6 +332,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeTriggerCharacters()
 	 */
+	@Override
 	protected char[] computeTriggerCharacters() {
 		return isInJavadoc() ? JDOC_TYPE_TRIGGERS : TYPE_TRIGGERS;
 	}
@@ -335,6 +340,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeProposalInfo()
 	 */
+	@Override
 	protected ProposalInfo computeProposalInfo() {
 		if (fCompilationUnit != null) {
 			IJavaProject project= fCompilationUnit.getJavaProject();
@@ -347,6 +353,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeSortString()
 	 */
+	@Override
 	protected String computeSortString() {
 		// try fast sort string to avoid display string creation
 		return getSimpleTypeName() + Character.MIN_VALUE + getQualifiedTypeName();
@@ -355,6 +362,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeRelevance()
 	 */
+	@Override
 	protected int computeRelevance() {
 		/*
 		 * There are two histories: the RHS history remembers types used for the current expected
@@ -380,6 +388,7 @@ public class LazyJavaTypeCompletionProposal extends LazyJavaCompletionProposal {
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeContextInformation()
 	 * @since 3.3
 	 */
+	@Override
 	protected IContextInformation computeContextInformation() {
 		char[] signature= fProposal.getSignature();
 		char[][] typeParameters= Signature.getTypeArguments(signature);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MemberProposalInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MemberProposalInfo.java
index bfd038b..8747c6d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MemberProposalInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MemberProposalInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public abstract class MemberProposalInfo extends ProposalInfo {
 	 * @return the java element that this computer corresponds to, possibly <code>null</code>
 	 * @throws JavaModelException if accessing the java model fails
 	 */
+	@Override
 	public IJavaElement getJavaElement() throws JavaModelException {
 		if (!fJavaElementResolved) {
 			fJavaElementResolved= true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodDeclarationCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodDeclarationCompletionProposal.java
index d5b6b0e..749cd18 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodDeclarationCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodDeclarationCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ import org.eclipse.jdt.internal.corext.util.Strings;
 
 import org.eclipse.jdt.ui.CodeGeneration;
 import org.eclipse.jdt.ui.JavaElementImageDescriptor;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
@@ -52,7 +53,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
 public class MethodDeclarationCompletionProposal extends JavaTypeCompletionProposal implements ICompletionProposalExtension4 {
 
 
-	public static void evaluateProposals(IType type, String prefix, int offset, int length, int relevance, Set suggestedMethods, Collection result) throws CoreException {
+	public static void evaluateProposals(IType type, String prefix, int offset, int length, int relevance, Set<String> suggestedMethods, Collection<IJavaCompletionProposal> result) throws CoreException {
 		IMethod[] methods= type.getMethods();
 		if (!type.isInterface()) {
 			String constructorName= type.getElementName();
@@ -120,6 +121,7 @@ public class MethodDeclarationCompletionProposal extends JavaTypeCompletionPropo
 	/* (non-Javadoc)
 	 * @see JavaTypeCompletionProposal#updateReplacementString(IDocument, char, int, ImportRewrite)
 	 */
+	@Override
 	protected boolean updateReplacementString(IDocument document, char trigger, int offset, ImportRewrite impRewrite) throws CoreException, BadLocationException {
 
 		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(fType.getJavaProject());
@@ -186,6 +188,7 @@ public class MethodDeclarationCompletionProposal extends JavaTypeCompletionPropo
 		return true;
 	}
 
+	@Override
 	public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
 		return new String(); // don't let method stub proposals complete incrementally
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodProposalInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodProposalInfo.java
index a7c55ec..2221320 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodProposalInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/MethodProposalInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public final class MethodProposalInfo extends MemberProposalInfo {
 	 * @return the resolved member or <code>null</code> if none is found
 	 * @throws JavaModelException if accessing the java model fails
 	 */
+	@Override
 	protected IMember resolveMember() throws JavaModelException {
 		char[] declarationSignature= fProposal.getDeclarationSignature();
 		String typeName= SignatureUtil.stripSignatureToFQN(String.valueOf(declarationSignature));
@@ -76,21 +77,19 @@ public final class MethodProposalInfo extends MemberProposalInfo {
 	/* adapted from JavaModelUtil */
 
 	/**
-	 * Finds a method in a type. This searches for a method with the same name
-	 * and signature. Parameter types are only compared by the simple name, no
-	 * resolving for the fully qualified type name is done. Constructors are
-	 * only compared by parameters, not the name.
-	 *
+	 * Finds a method in a type. This searches for a method with the same name and signature.
+	 * Parameter types are only compared by the simple name, no resolving for the fully qualified
+	 * type name is done. Constructors are only compared by parameters, not the name.
+	 * 
 	 * @param name The name of the method to find
-	 * @param paramTypes The type signatures of the parameters e.g.
-	 *        <code>{"QString;","I"}</code>
+	 * @param paramTypes The type signatures of the parameters e.g. <code>{"QString;","I"}</code>
 	 * @param isConstructor If the method is a constructor
 	 * @param type the type
 	 * @return The first found method or <code>null</code>, if nothing found
-	 * @throws JavaModelException
+	 * @throws JavaModelException if accessing the Java model fails
 	 */
 	private IMethod findMethod(String name, String[] paramTypes, boolean isConstructor, IType type) throws JavaModelException {
-		Map typeVariables= computeTypeVariables(type);
+		Map<String, char[]> typeVariables= computeTypeVariables(type);
 		return findMethod(name, paramTypes, isConstructor, type.getMethods(), typeVariables);
 	}
 
@@ -112,8 +111,8 @@ public final class MethodProposalInfo extends MemberProposalInfo {
 	 * @return a map from type variables to concrete type signatures
 	 * @throws JavaModelException if accessing the java model fails
 	 */
-	private Map computeTypeVariables(IType type) throws JavaModelException {
-		Map map= new HashMap();
+	private Map<String, char[]> computeTypeVariables(IType type) throws JavaModelException {
+		Map<String, char[]> map= new HashMap<String, char[]>();
 		char[] declarationSignature= fProposal.getDeclarationSignature();
 		if (declarationSignature == null) // array methods don't contain a declaration signature
 			return map;
@@ -148,7 +147,7 @@ public final class MethodProposalInfo extends MemberProposalInfo {
 	 * @return The found method or <code>null</code>, if nothing found
 	 * @throws JavaModelException if the method does not exist or if an exception occurs while accessing its corresponding resource
 	 */
-	private IMethod findMethod(String name, String[] paramTypes, boolean isConstructor, IMethod[] methods, Map typeVariables) throws JavaModelException {
+	private IMethod findMethod(String name, String[] paramTypes, boolean isConstructor, IMethod[] methods, Map<String, char[]> typeVariables) throws JavaModelException {
 		for (int i= methods.length - 1; i >= 0; i--) {
 			if (isSameMethodSignature(name, paramTypes, isConstructor, methods[i], typeVariables)) {
 				return methods[i];
@@ -172,7 +171,7 @@ public final class MethodProposalInfo extends MemberProposalInfo {
 	 *         parameter types and constructor state.
 	 * @throws JavaModelException if the method does not exist or if an exception occurs while accessing its corresponding resource
 	 */
-	private boolean isSameMethodSignature(String name, String[] paramTypes, boolean isConstructor, IMethod method, Map typeVariables) throws JavaModelException {
+	private boolean isSameMethodSignature(String name, String[] paramTypes, boolean isConstructor, IMethod method, Map<String, char[]> typeVariables) throws JavaModelException {
 		if (isConstructor || name.equals(method.getElementName())) {
 			if (isConstructor == method.isConstructor()) {
 				String[] otherParams= method.getParameterTypes(); // types may be type variables
@@ -205,12 +204,12 @@ public final class MethodProposalInfo extends MemberProposalInfo {
 	 * @param typeVariables the Map<SimpleName, VariableName>
 	 * @return the simple erased name for signature
 	 */
-	private String computeSimpleTypeName(String signature, Map typeVariables) {
+	private String computeSimpleTypeName(String signature, Map<String, char[]> typeVariables) {
 		// method equality uses erased types
 		String erasure= Signature.getTypeErasure(signature);
 		erasure= erasure.replaceAll("/", ".");  //$NON-NLS-1$//$NON-NLS-2$
 		String simpleName= Signature.getSimpleName(Signature.toString(erasure));
-		char[] typeVar= (char[]) typeVariables.get(simpleName);
+		char[] typeVar= typeVariables.get(simpleName);
 		if (typeVar != null)
 			simpleName= String.valueOf(Signature.getSignatureSimpleName(typeVar));
 		return simpleName;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
index 9d729f4..f286f84 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,6 @@ import org.eclipse.jface.text.contentassist.ICompletionProposalExtension4;
 
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
@@ -41,8 +40,8 @@ import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ITrackedNodePosition;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.formatter.IndentManipulation;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
@@ -50,9 +49,11 @@ import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRe
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
+
 import org.eclipse.jdt.ui.SharedASTProvider;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 
 public class OverrideCompletionProposal extends JavaTypeCompletionProposal implements ICompletionProposalExtension4 {
@@ -83,6 +84,7 @@ public class OverrideCompletionProposal extends JavaTypeCompletionProposal imple
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension3#getPrefixCompletionText(org.eclipse.jface.text.IDocument,int)
 	 */
+	@Override
 	public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
 		return fMethodName;
 	}
@@ -105,7 +107,7 @@ public class OverrideCompletionProposal extends JavaTypeCompletionProposal imple
 
 		recoveredDocument.set(new String(content));
 
-		final ASTParser parser= ASTParser.newParser(AST.JLS3);
+		final ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		parser.setResolveBindings(true);
 		parser.setStatementsRecovery(true);
 		parser.setSource(content);
@@ -117,6 +119,7 @@ public class OverrideCompletionProposal extends JavaTypeCompletionProposal imple
 	/*
 	 * @see JavaTypeCompletionProposal#updateReplacementString(IDocument,char,int,ImportRewrite)
 	 */
+	@Override
 	protected boolean updateReplacementString(IDocument document, char trigger, int offset, ImportRewrite importRewrite) throws CoreException, BadLocationException {
 		Document recoveredDocument= new Document();
 		CompilationUnit unit= getRecoveredAST(document, offset, recoveredDocument);
@@ -126,6 +129,7 @@ public class OverrideCompletionProposal extends JavaTypeCompletionProposal imple
 		} else {
 			importRewrite= StubUtility.createImportRewrite(unit, true); // create a dummy import rewriter to have one
 			context= new ImportRewriteContext() { // forces that all imports are fully qualified
+				@Override
 				public int findInContext(String qualifier, String name, int kind) {
 					return RES_NAME_CONFLICT;
 				}
@@ -134,7 +138,7 @@ public class OverrideCompletionProposal extends JavaTypeCompletionProposal imple
 
 		ITypeBinding declaringType= null;
 		ChildListPropertyDescriptor descriptor= null;
-		ASTNode node= NodeFinder.perform(unit, offset, 0);
+		ASTNode node= NodeFinder.perform(unit, offset, 1);
 		if (node instanceof AnonymousClassDeclaration) {
 			declaringType= ((AnonymousClassDeclaration) node).resolveBinding();
 			descriptor= AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuesser.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuesser.java
index 5bf0964..1defec4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuesser.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuesser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,6 +92,7 @@ public class ParameterGuesser {
 		/*
 		 * @see Object#toString()
 		 */
+		@Override
 		public String toString() {
 
 			StringBuffer buffer= new StringBuffer();
@@ -108,26 +109,26 @@ public class ParameterGuesser {
 
 	private static final char[] NO_TRIGGERS= new char[0];
 
-	private final Set fAlreadyMatchedNames;
+	private final Set<String> fAlreadyMatchedNames;
 	private final IJavaElement fEnclosingElement;
 
 	/**
 	 * Creates a parameter guesser
-	 *
-	 * @param enclosingElement
+	 * 
+	 * @param enclosingElement the enclosing Java element
 	 */
 	public ParameterGuesser(IJavaElement enclosingElement) {
 		fEnclosingElement= enclosingElement;
-		fAlreadyMatchedNames= new HashSet();
+		fAlreadyMatchedNames= new HashSet<String>();
 	}
 
-	private List /*Variable*/ evaluateVisibleMatches(String expectedType, IJavaElement[] suggestions) throws JavaModelException {
+	private List<Variable> evaluateVisibleMatches(String expectedType, IJavaElement[] suggestions) throws JavaModelException {
 		IType currentType= null;
 		if (fEnclosingElement != null) {
 			currentType= (IType) fEnclosingElement.getAncestor(IJavaElement.TYPE);
 		}
 
-		ArrayList res= new ArrayList();
+		ArrayList<Variable> res= new ArrayList<Variable>();
 		for (int i= 0; i < suggestions.length; i++) {
 			Variable variable= createVariable(suggestions[i], currentType, expectedType, i);
 			if (variable != null) {
@@ -283,24 +284,25 @@ public class ParameterGuesser {
 
 	/**
 	 * Returns the matches for the type and name argument, ordered by match quality.
-	 *
+	 * 
 	 * @param expectedType - the qualified type of the parameter we are trying to match
 	 * @param paramName - the name of the parameter (used to find similarly named matches)
-	 * @param pos
+	 * @param pos the position
 	 * @param suggestions the suggestions or <code>null</code>
-	 * @param fillBestGuess
+	 * @param fillBestGuess <code>true</code> if the best guess should be filled in
+	 * @param isLastParameter <code>true</code> iff this proposal is for the last parameter of a method
 	 * @return returns the name of the best match, or <code>null</code> if no match found
 	 * @throws JavaModelException if it fails
 	 */
-	public ICompletionProposal[] parameterProposals(String expectedType, String paramName, Position pos, IJavaElement[] suggestions, boolean fillBestGuess) throws JavaModelException {
-		List typeMatches= evaluateVisibleMatches(expectedType, suggestions);
+	public ICompletionProposal[] parameterProposals(String expectedType, String paramName, Position pos, IJavaElement[] suggestions, boolean fillBestGuess, boolean isLastParameter) throws JavaModelException {
+		List<Variable> typeMatches= evaluateVisibleMatches(expectedType, suggestions);
 		orderMatches(typeMatches, paramName);
 
 		boolean hasVarWithParamName= false;
 		ICompletionProposal[] ret= new ICompletionProposal[typeMatches.size()];
 		int i= 0; int replacementLength= 0;
-		for (Iterator it= typeMatches.iterator(); it.hasNext();) {
-			Variable v= (Variable)it.next();
+		for (Iterator<Variable> it= typeMatches.iterator(); it.hasNext();) {
+			Variable v= it.next();
 			if (i == 0) {
 				fAlreadyMatchedNames.add(v.name);
 				replacementLength= v.name.length();
@@ -309,40 +311,43 @@ public class ParameterGuesser {
 			String displayString= v.name;
 			hasVarWithParamName |= displayString.equals(paramName);
 
-			final char[] triggers= new char[v.triggerChars.length + 1];
-			System.arraycopy(v.triggerChars, 0, triggers, 0, v.triggerChars.length);
-			triggers[triggers.length - 1]= ';';
-
+			final char[] triggers;
+			if (isLastParameter) {
+				triggers= v.triggerChars;
+			} else {
+				triggers= new char[v.triggerChars.length + 1];
+				System.arraycopy(v.triggerChars, 0, triggers, 0, v.triggerChars.length);
+				triggers[triggers.length - 1]= ',';
+			}
+			
 			ret[i++]= new PositionBasedCompletionProposal(v.name, pos, replacementLength, getImage(v.descriptor), displayString, null, null, triggers);
 		}
 		if (!fillBestGuess && !hasVarWithParamName) {
 			// insert a proposal with the argument name
 			ICompletionProposal[] extended= new ICompletionProposal[ret.length + 1];
 			System.arraycopy(ret, 0, extended, 1, ret.length);
-			extended[0]= new PositionBasedCompletionProposal(paramName, pos, replacementLength, null, paramName, null, null, NO_TRIGGERS);
+			extended[0]= new PositionBasedCompletionProposal(paramName, pos, replacementLength, null, paramName, null, null, isLastParameter ? null : new char[] {','});
 			return extended;
 		}
 		return ret;
 	}
 
-	private static class MatchComparator implements Comparator {
+	private static class MatchComparator implements Comparator<Variable> {
 
 		private String fParamName;
 
 		MatchComparator(String paramName) {
 			fParamName= paramName;
 		}
-		public int compare(Object o1, Object o2) {
-			Variable one= (Variable)o1;
-			Variable two= (Variable)o2;
-
+		public int compare(Variable one, Variable two) {
 			return score(two) - score(one);
 		}
 
 		/**
-		 * The four order criteria as described below - put already used into bit 10, all others into
-		 * bits 0-9, 11-20, 21-30; 31 is sign - always 0
-		 * @param v
+		 * The four order criteria as described below - put already used into bit 10, all others
+		 * into bits 0-9, 11-20, 21-30; 31 is sign - always 0
+		 * 
+		 * @param v the variable
 		 * @return the score for <code>v</code>
 		 */
 		private int score(Variable v) {
@@ -384,7 +389,7 @@ public class ParameterGuesser {
 	 * @param typeMatches the list of type matches
 	 * @param paramName the parameter name
 	 */
-	private static void orderMatches(List typeMatches, String paramName) {
+	private static void orderMatches(List<Variable> typeMatches, String paramName) {
 		if (typeMatches != null) Collections.sort(typeMatches, new MatchComparator(paramName));
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java
index c85ffdd..094641a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -115,6 +115,7 @@ public final class ParameterGuessingProposal extends JavaMethodCompletionProposa
 	/*
 	 * @see ICompletionProposalExtension#apply(IDocument, char)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		try {
 			super.apply(document, trigger, offset);
@@ -173,6 +174,7 @@ public final class ParameterGuessingProposal extends JavaMethodCompletionProposa
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaMethodCompletionProposal#needsLinkedMode()
 	 */
+	@Override
 	protected boolean needsLinkedMode() {
 		return false; // we handle it ourselves
 	}
@@ -180,6 +182,7 @@ public final class ParameterGuessingProposal extends JavaMethodCompletionProposa
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaMethodCompletionProposal#computeReplacementString()
 	 */
+	@Override
 	protected String computeReplacementString() {
 
 		if (!hasParameters() || !hasArgumentList())
@@ -293,9 +296,14 @@ public final class ParameterGuessingProposal extends JavaMethodCompletionProposa
 			String paramName= new String(parameterNames[i]);
 			Position position= new Position(0,0);
 
-			ICompletionProposal[] argumentProposals= guesser.parameterProposals(parameterTypes[i], paramName, position, assignableElements[i], fFillBestGuess);
-			if (argumentProposals.length == 0)
-				argumentProposals= new ICompletionProposal[] {new JavaCompletionProposal(paramName, 0, paramName.length(), null, paramName, 0)};
+			boolean isLastParameter= i == count - 1;
+			ICompletionProposal[] argumentProposals= guesser.parameterProposals(parameterTypes[i], paramName, position, assignableElements[i], fFillBestGuess, isLastParameter);
+			if (argumentProposals.length == 0) {
+				JavaCompletionProposal proposal= new JavaCompletionProposal(paramName, 0, paramName.length(), null, paramName, 0);
+				if (isLastParameter)
+					proposal.setTriggerCharacters(new char[] { ',' });
+				argumentProposals= new ICompletionProposal[] { proposal };
+			}
 
 			fPositions[i]= position;
 			fChoices[i]= argumentProposals;
@@ -318,6 +326,7 @@ public final class ParameterGuessingProposal extends JavaMethodCompletionProposa
 	/*
 	 * @see ICompletionProposal#getSelection(IDocument)
 	 */
+	@Override
 	public Point getSelection(IDocument document) {
 		if (fSelectedRegion == null)
 			return new Point(getReplacementOffset(), 0);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PartitionDoubleClickSelector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PartitionDoubleClickSelector.java
index af7806e..16bcb6c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PartitionDoubleClickSelector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PartitionDoubleClickSelector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,7 @@ public class PartitionDoubleClickSelector extends DefaultTextDoubleClickStrategy
 	 * @see org.eclipse.jface.text.DefaultTextDoubleClickStrategy#findExtendedDoubleClickSelection(org.eclipse.jface.text.IDocument, int)
 	 * @since 3.5
 	 */
+	@Override
 	protected IRegion findExtendedDoubleClickSelection(IDocument document, int offset) {
 		IRegion match= super.findExtendedDoubleClickSelection(document, offset);
 		if (match != null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalContextInformation.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalContextInformation.java
index 3e29600..b042c3d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalContextInformation.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalContextInformation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public final class ProposalContextInformation implements IContextInformation, IC
 	/*
 	 * @see IContextInformation#equals
 	 */
+	@Override
 	public boolean equals(Object object) {
 		if (object instanceof IContextInformation) {
 			IContextInformation contextInformation= (IContextInformation) object;
@@ -76,6 +77,7 @@ public final class ProposalContextInformation implements IContextInformation, IC
 	 * @see java.lang.Object#hashCode()
 	 * @since 3.5
 	 */
+	@Override
 	public int hashCode() {
 		int low= fContextDisplayString != null ? fContextDisplayString.hashCode() : 0;
 		return (fInformationDisplayString.hashCode() << 16) | low;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalInfo.java
index 7433d95..9eb4ac5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.text.java;
 
-
 import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.jdt.core.IJavaElement;
@@ -93,7 +92,7 @@ public class ProposalInfo {
 	 */
 	private String extractJavadoc(IMember member, IProgressMonitor monitor) throws JavaModelException {
 		if (member != null) {
-			return JavadocContentAccess2.getHTMLContent(member, true, true);
+			return JavadocContentAccess2.getHTMLContent(member, true);
 		}
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterHandle.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterHandle.java
index af3466f..fe59e1c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterHandle.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterHandle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,8 @@ import org.eclipse.core.runtime.InvalidRegistryObjectException;
 import org.eclipse.core.runtime.PerformanceStats;
 import org.eclipse.core.runtime.Status;
 
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.text.java.AbstractProposalSorter;
@@ -160,7 +162,7 @@ public final class ProposalSorterHandle {
 	 * @param proposals the list of computed completion proposals to be sorted (element type:
 	 *        {@link org.eclipse.jface.text.contentassist.ICompletionProposal}), must be writable
 	 */
-	public void sortProposals(ContentAssistInvocationContext context, List proposals) {
+	public void sortProposals(ContentAssistInvocationContext context, List<ICompletionProposal> proposals) {
 		IStatus status;
 		try {
 			AbstractProposalSorter sorter= getSorter();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterRegistry.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterRegistry.java
index 385cd32..35d88e8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterRegistry.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ProposalSorterRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,7 +54,7 @@ public final class ProposalSorterRegistry {
 	private final IPreferenceStore fPreferenceStore;
 	private final String fKey;
 
-	private Map fSorters= null;
+	private Map<String, ProposalSorterHandle> fSorters= null;
 	private ProposalSorterHandle fDefaultSorter;
 
 	private ProposalSorterRegistry(final IPreferenceStore preferenceStore, final String key) {
@@ -67,7 +67,7 @@ public final class ProposalSorterRegistry {
 	public ProposalSorterHandle getCurrentSorter() {
 		ensureSortersRead();
 		String id= fPreferenceStore.getString(fKey);
-		ProposalSorterHandle sorter= (ProposalSorterHandle) fSorters.get(id);
+		ProposalSorterHandle sorter= fSorters.get(id);
 		return sorter != null ? sorter : fDefaultSorter;
 	}
 
@@ -75,12 +75,12 @@ public final class ProposalSorterRegistry {
 		if (fSorters != null)
 			return;
 
-		Map sorters= new LinkedHashMap();
+		Map<String, ProposalSorterHandle> sorters= new LinkedHashMap<String, ProposalSorterHandle>();
 		IExtensionRegistry registry= Platform.getExtensionRegistry();
-		List elements= new ArrayList(Arrays.asList(registry.getConfigurationElementsFor(JavaPlugin.getPluginId(), EXTENSION_POINT)));
+		List<IConfigurationElement> elements= new ArrayList<IConfigurationElement>(Arrays.asList(registry.getConfigurationElementsFor(JavaPlugin.getPluginId(), EXTENSION_POINT)));
 
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
-			IConfigurationElement element= (IConfigurationElement) iter.next();
+		for (Iterator<IConfigurationElement> iter= elements.iterator(); iter.hasNext();) {
+			IConfigurationElement element= iter.next();
 
 			try {
 
@@ -117,8 +117,8 @@ public final class ProposalSorterRegistry {
 
 	public ProposalSorterHandle[] getSorters() {
 		ensureSortersRead();
-		Collection sorters= fSorters.values();
-		return (ProposalSorterHandle[]) sorters.toArray(new ProposalSorterHandle[sorters.size()]);
+		Collection<ProposalSorterHandle> sorters= fSorters.values();
+		return sorters.toArray(new ProposalSorterHandle[sorters.size()]);
 	}
 
 	public void select(ProposalSorterHandle handle) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/RelevanceSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/RelevanceSorter.java
index cb1a99c..220152e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/RelevanceSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/RelevanceSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,7 +24,7 @@ import org.eclipse.jdt.ui.text.java.CompletionProposalComparator;
  */
 public final class RelevanceSorter extends AbstractProposalSorter {
 
-	private final Comparator fComparator= new CompletionProposalComparator();
+	private final Comparator<ICompletionProposal> fComparator= new CompletionProposalComparator();
 
 	public RelevanceSorter() {
 	}
@@ -32,6 +32,7 @@ public final class RelevanceSorter extends AbstractProposalSorter {
 	/*
 	 * @see org.eclipse.jdt.ui.text.java.AbstractProposalSorter#compare(org.eclipse.jface.text.contentassist.ICompletionProposal, org.eclipse.jface.text.contentassist.ICompletionProposal)
 	 */
+	@Override
 	public int compare(ICompletionProposal p1, ICompletionProposal p2) {
 		return fComparator.compare(p1, p2);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SWTTemplateCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SWTTemplateCompletionProposalComputer.java
index daa0b29..13bee28 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SWTTemplateCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SWTTemplateCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,6 +151,7 @@ public class SWTTemplateCompletionProposalComputer extends AbstractTemplateCompl
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.java.TemplateCompletionProposalComputer#computeCompletionEngine(org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext)
 	 */
+	@Override
 	protected TemplateEngine computeCompletionEngine(JavaContentAssistInvocationContext context) {
 		ICompilationUnit unit= context.getCompilationUnit();
 		if (unit == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TemplateCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TemplateCompletionProposalComputer.java
index ad273ee..b6a1c8c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TemplateCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TemplateCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ public class TemplateCompletionProposalComputer extends AbstractTemplateCompleti
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.java.TemplateCompletionProposalComputer#computeCompletionEngine(org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext)
 	 */
+	@Override
 	protected TemplateEngine computeCompletionEngine(JavaContentAssistInvocationContext context) {
 		try {
 			String partition= TextUtilities.getContentType(context.getDocument(), IJavaPartitions.JAVA_PARTITIONING, context.getInvocationOffset(), true);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TypeProposalInfo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TypeProposalInfo.java
index 185103a..3810f05 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TypeProposalInfo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/TypeProposalInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public final class TypeProposalInfo extends MemberProposalInfo {
 	 * @return the resolved member or <code>null</code> if none is found
 	 * @throws JavaModelException if accessing the java model fails
 	 */
+	@Override
 	protected IMember resolveMember() throws JavaModelException {
 		char[] signature= fProposal.getSignature();
 		String typeName= SignatureUtil.stripSignatureToFQN(String.valueOf(signature));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractAnnotationHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractAnnotationHover.java
index 471eb89..94ce88e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractAnnotationHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractAnnotationHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -171,6 +171,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jface.text.IInformationControl#setInformation(java.lang.String)
 		 */
+		@Override
 		public void setInformation(String information) {
 			//replaced by IInformationControlExtension2#setInput
 		}
@@ -199,6 +200,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover.AbstractInformationControl#setFocus()
 		 */
+		@Override
 		public void setFocus() {
 			super.setFocus();
 			if (fFocusControl != null)
@@ -208,6 +210,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jface.text.AbstractInformationControl#setVisible(boolean)
 		 */
+		@Override
 		public final void setVisible(boolean visible) {
 			if (!visible)
 				disposeDeferredCreatedContent();
@@ -227,6 +230,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jface.text.AbstractInformationControl#createContent(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected void createContent(Composite parent) {
 			fParent= parent;
 			GridLayout layout= new GridLayout(1, false);
@@ -239,6 +243,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jface.text.AbstractInformationControl#computeSizeHint()
 		 */
+		@Override
 		public Point computeSizeHint() {
 			Point preferedSize= getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 
@@ -368,7 +373,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 			layout.verticalSpacing= 2;
 			composite.setLayout(layout);
 			
-			List list= new ArrayList();
+			List<Link> list= new ArrayList<Link>();
 			for (int i= 0; i < proposals.length; i++) {
 				list.add(createCompletionProposalLink(composite, proposals[i], 1));// Original link for single fix, hence pass 1 for count
 
@@ -380,7 +385,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 					}
 				}
 			}
-			final Link[] links= (Link[])list.toArray(new Link[list.size()]);
+			final Link[] links= list.toArray(new Link[list.size()]);
 
 			scrolledComposite.setContent(composite);
 			setColorAndFont(scrolledComposite, parent.getForeground(), parent.getBackground(), JFaceResources.getDialogFont());
@@ -498,6 +503,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 				/*
 				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					apply(proposal, fInput.viewer, fInput.position.offset, isMultiFix);
 				}
@@ -552,6 +558,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		public IInformationControl doCreateInformationControl(Shell parent) {
 			return new AnnotationInformationControl(parent, new ToolBarManager(SWT.FLAT));
 		}
@@ -573,11 +580,13 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		public IInformationControl doCreateInformationControl(Shell parent) {
 			return new AnnotationInformationControl(parent, EditorsUI.getTooltipAffordanceString()) {
 				/*
 				 * @see org.eclipse.jface.text.IInformationControlExtension5#getInformationPresenterControlCreator()
 				 */
+				@Override
 				public IInformationControlCreator getInformationPresenterControlCreator() {
 					return fPresenterControlCreator;
 				}
@@ -587,6 +596,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#canReuse(org.eclipse.jface.text.IInformationControl)
 		 */
+		@Override
 		public boolean canReuse(IInformationControl control) {
 			if (!super.canReuse(control))
 				return false;
@@ -620,6 +630,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 		/*
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			Shell shell= PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
 
@@ -667,6 +678,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 	 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
 	 * @since 3.4
 	 */
+	@Override
 	public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
 		IPath path;
 		IAnnotationModel model;
@@ -682,18 +694,18 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 			return null;
 
 		try {
-			Iterator parent;
+			Iterator<Annotation> parent;
 			if (model instanceof IAnnotationModelExtension2)
 				parent= ((IAnnotationModelExtension2)model).getAnnotationIterator(hoverRegion.getOffset(), hoverRegion.getLength(), true, true);
 			else
 				parent= model.getAnnotationIterator();
-			Iterator e= new JavaAnnotationIterator(parent, fAllAnnotations);
+			Iterator<Annotation> e= new JavaAnnotationIterator(parent, fAllAnnotations);
 
 			int layer= -1;
 			Annotation annotation= null;
 			Position position= null;
 			while (e.hasNext()) {
-				Annotation a= (Annotation) e.next();
+				Annotation a= e.next();
 
 				AnnotationPreference preference= getAnnotationPreference(a);
 				if (preference == null || !(preference.getTextPreferenceKey() != null && fStore.getBoolean(preference.getTextPreferenceKey()) || (preference.getHighlightPreferenceKey() != null && fStore.getBoolean(preference.getHighlightPreferenceKey()))))
@@ -737,6 +749,7 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 	 * @see ITextHoverExtension#getHoverControlCreator()
 	 * @since 3.4
 	 */
+	@Override
 	public IInformationControlCreator getHoverControlCreator() {
 		if (fHoverControlCreator == null)
 			fHoverControlCreator= new HoverControlCreator(getInformationPresenterControlCreator());
@@ -744,9 +757,10 @@ public abstract class AbstractAnnotationHover extends AbstractJavaEditorTextHove
 	}
 
 	/*
-	 * @see org.eclipse.jface.text.ITextHoverExtension2#getInformationPresenterControlCreator()
+	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 * @since 3.4
 	 */
+	@Override
 	public IInformationControlCreator getInformationPresenterControlCreator() {
 		if (fPresenterControlCreator == null)
 			fPresenterControlCreator= new PresenterControlCreator();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java
index c5450cb..343fff1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AbstractJavaEditorTextHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,11 +11,11 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.text.java.hover;
 
-
-
 import org.eclipse.swt.widgets.Shell;
 
+import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.DefaultInformationControl;
+import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IInformationControl;
 import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.IRegion;
@@ -42,7 +42,6 @@ import org.eclipse.jdt.internal.ui.javaeditor.WorkingCopyManager;
 import org.eclipse.jdt.internal.ui.text.JavaWordFinder;
 
 
-
 /**
  * Abstract class for providing hover information for Java elements.
  *
@@ -108,6 +107,10 @@ public abstract class AbstractJavaEditorTextHover implements IJavaEditorTextHove
 		 */
 		if (hoverRegion.getLength() == 0)
 			return null;
+		
+		IDocument document= textViewer.getDocument();
+		if (document != null && isInheritDoc(document, hoverRegion))
+			return null;
 
 		ICodeAssist resolve= getCodeAssist();
 		if (resolve != null) {
@@ -120,6 +123,23 @@ public abstract class AbstractJavaEditorTextHover implements IJavaEditorTextHove
 		return null;
 	}
 
+	/**
+	 * Returns whether the word is "inheritDoc".
+	 * 
+	 * @param document the document
+	 * @param wordRegion the word region
+	 * @return <code>true</code> iff the word is "inheritDoc"
+	 * @since 3.7
+	 */
+	private static boolean isInheritDoc(IDocument document, IRegion wordRegion) {
+		try {
+			String word= document.get(wordRegion.getOffset(), wordRegion.getLength());
+			return "inheritDoc".equals(word); //$NON-NLS-1$
+		} catch (BadLocationException e) {
+			return false;
+		}
+	}
+
 	/*
 	 * @see ITextHoverExtension#getHoverControlCreator()
 	 * @since 3.0
@@ -133,7 +153,7 @@ public abstract class AbstractJavaEditorTextHover implements IJavaEditorTextHove
 	}
 
 	/*
-	 * @see org.eclipse.jface.text.ITextHoverExtension2#getInformationPresenterControlCreator()
+	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 * @since 3.4
 	 */
 	public IInformationControlCreator getInformationPresenterControlCreator() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpandHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpandHover.java
index 3a641ba..7219083 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpandHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpandHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,12 +142,12 @@ public class AnnotationExpandHover implements IAnnotationHover, IAnnotationHover
 		if (model == null)
 			return null;
 
-		List exact= new ArrayList();
-		HashMap messagesAtPosition= new HashMap();
+		List<Annotation> exact= new ArrayList<Annotation>();
+		HashMap<Position, Object> messagesAtPosition= new HashMap<Position, Object>();
 
-		Iterator e= model.getAnnotationIterator();
+		Iterator<Annotation> e= model.getAnnotationIterator();
 		while (e.hasNext()) {
-			Annotation annotation= (Annotation) e.next();
+			Annotation annotation= e.next();
 			Position position= model.getPosition(annotation);
 			if (position == null)
 				continue;
@@ -169,7 +169,7 @@ public class AnnotationExpandHover implements IAnnotationHover, IAnnotationHover
 			setLastRulerMouseLocation(viewer, line);
 
 		AnnotationHoverInput input= new AnnotationHoverInput();
-		input.fAnnotations= (Annotation[]) exact.toArray(new Annotation[0]);
+		input.fAnnotations= exact.toArray(new Annotation[0]);
 		input.fViewer= viewer;
 		input.fRulerInfo= fCompositeRuler;
 		input.fAnnotationListener= fgListener;
@@ -179,16 +179,13 @@ public class AnnotationExpandHover implements IAnnotationHover, IAnnotationHover
 		return input;
 	}
 
-	protected void sort(List exact, final IAnnotationModel model) {
-		class AnnotationComparator implements Comparator {
+	protected void sort(List<Annotation> exact, final IAnnotationModel model) {
+		class AnnotationComparator implements Comparator<Annotation> {
 
 			/*
 			 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
 			 */
-			public int compare(Object o1, Object o2) {
-				Annotation a1= (Annotation) o1;
-				Annotation a2= (Annotation) o2;
-
+			public int compare(Annotation a1, Annotation a2) {
 				Position p1= model.getPosition(a1);
 				Position p2= model.getPosition(a2);
 
@@ -213,7 +210,7 @@ public class AnnotationExpandHover implements IAnnotationHover, IAnnotationHover
 		return IAnnotationAccessExtension.DEFAULT_LAYER;
 	}
 
-	protected boolean isDuplicateMessage(Map messagesAtPosition, Position position, String message) {
+	protected boolean isDuplicateMessage(Map<Position, Object> messagesAtPosition, Position position, String message) {
 		if (message == null)
 			return false;
 
@@ -223,12 +220,13 @@ public class AnnotationExpandHover implements IAnnotationHover, IAnnotationHover
 				return true;
 
 			if (value instanceof List) {
-				List messages= (List)value;
+				@SuppressWarnings("unchecked")
+				List<String> messages= ((List<String>)value);
 				if  (messages.contains(message))
 					return true;
 				messages.add(message);
 			} else {
-				ArrayList messages= new ArrayList();
+				ArrayList<Object> messages= new ArrayList<Object>();
 				messages.add(value);
 				messages.add(message);
 				messagesAtPosition.put(position, messages);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpansionControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpansionControl.java
index db3b56c..a070fb7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpansionControl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/AnnotationExpansionControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -221,6 +221,7 @@ public class AnnotationExpansionControl implements IInformationControl, IInforma
 		/*
 		 * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
 		 */
+		@Override
 		public void mouseDoubleClick(MouseEvent e) {
 			Item item= (Item) ((Widget) e.getSource()).getData();
 			if (e.button == 1 && item.fAnnotation == fInput.fAnnotations[0] && fInput.fDoubleClickListener != null) {
@@ -245,6 +246,7 @@ public class AnnotationExpansionControl implements IInformationControl, IInforma
 		 *
 		 * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent)
 		 */
+		@Override
 		public void mouseDown(MouseEvent e) {
 			Item item= (Item) ((Widget) e.getSource()).getData();
 			// TODO for now, to make double click work: disable single click on the first item
@@ -397,6 +399,7 @@ public class AnnotationExpansionControl implements IInformationControl, IInforma
 		/*
 		 * @see org.eclipse.jface.text.AbstractInformationControlManager#computeInformation()
 		 */
+		@Override
 		protected void computeInformation() {
 			if (fSelection != null) {
 				Rectangle subjectArea= fSelection.canvas.getBounds();
@@ -479,6 +482,7 @@ public class AnnotationExpansionControl implements IInformationControl, IInforma
 		fComposite.setLayoutData(data);
 		fComposite.addMouseTrackListener(new MouseTrackAdapter() {
 
+			@Override
 			public void mouseExit(MouseEvent e) {
 				if (fComposite == null)
 						return;
@@ -755,13 +759,13 @@ public class AnnotationExpansionControl implements IInformationControl, IInforma
 
 		StyleRange[] ranges= text.getStyleRanges(region.getOffset(), region.getLength());
 
-		List undoRanges= new ArrayList(ranges.length);
+		List<StyleRange> undoRanges= new ArrayList<StyleRange>(ranges.length);
 		for (int i= 0; i < ranges.length; i++) {
-			undoRanges.add(ranges[i].clone());
+			undoRanges.add((StyleRange)ranges[i].clone());
 		}
 
 		int offset= region.getOffset();
-		StyleRange current= undoRanges.size() > 0 ? (StyleRange) undoRanges.get(0) : null;
+		StyleRange current= undoRanges.size() > 0 ? undoRanges.get(0) : null;
 		int curStart= current != null ? current.start : region.getOffset() + region.getLength();
 		int curEnd= current != null ? current.start + current.length : -1;
 		int index= 0;
@@ -779,7 +783,7 @@ public class AnnotationExpansionControl implements IInformationControl, IInforma
 			index++;
 			if (index < undoRanges.size()) {
 				offset= curEnd;
-				current= (StyleRange) undoRanges.get(index);
+				current= undoRanges.get(index);
 				curStart= current.start;
 				curEnd= current.start + current.length;
 			} else if (index == undoRanges.size()) {
@@ -793,20 +797,20 @@ public class AnnotationExpansionControl implements IInformationControl, IInforma
 		}
 
 		// create modified styles (with background)
-		List shadedRanges= new ArrayList(undoRanges.size());
-		for (Iterator it= undoRanges.iterator(); it.hasNext(); ) {
-			StyleRange range= (StyleRange) ((StyleRange) it.next()).clone();
+		List<StyleRange> shadedRanges= new ArrayList<StyleRange>(undoRanges.size());
+		for (Iterator<StyleRange> it= undoRanges.iterator(); it.hasNext(); ) {
+			StyleRange range= (StyleRange) it.next().clone();
 			shadedRanges.add(range);
 			range.background= getHighlightColor(disp);
 		}
 
 		// set the ranges one by one
-		for (Iterator iter= shadedRanges.iterator(); iter.hasNext(); ) {
-			text.setStyleRange((StyleRange) iter.next());
+		for (Iterator<StyleRange> iter= shadedRanges.iterator(); iter.hasNext(); ) {
+			text.setStyleRange(iter.next());
 
 		}
 
-		return (StyleRange[]) undoRanges.toArray(undoRanges.toArray(new StyleRange[0]));
+		return undoRanges.toArray(undoRanges.toArray(new StyleRange[0]));
 	}
 
 	private void resetViewerBackground(StyleRange[] oldRanges) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/BestMatchHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/BestMatchHover.java
index a89b0f0..24d5ddb 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/BestMatchHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/BestMatchHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,8 +35,8 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
  */
 public class BestMatchHover extends AbstractJavaEditorTextHover {
 
-	private List fTextHoverSpecifications;
-	private List fInstantiatedTextHovers;
+	private List<JavaEditorTextHoverDescriptor> fTextHoverSpecifications;
+	private List<IJavaEditorTextHover> fInstantiatedTextHovers;
 	private ITextHover fBestHover;
 
 	public BestMatchHover() {
@@ -54,8 +54,8 @@ public class BestMatchHover extends AbstractJavaEditorTextHover {
 	private void installTextHovers() {
 
 		// initialize lists - indicates that the initialization happened
-		fTextHoverSpecifications= new ArrayList(2);
-		fInstantiatedTextHovers= new ArrayList(2);
+		fTextHoverSpecifications= new ArrayList<JavaEditorTextHoverDescriptor>(2);
+		fInstantiatedTextHovers= new ArrayList<IJavaEditorTextHover>(2);
 
 		// populate list
 		JavaEditorTextHoverDescriptor[] hoverDescs= JavaPlugin.getDefault().getJavaEditorTextHoverDescriptors();
@@ -72,9 +72,9 @@ public class BestMatchHover extends AbstractJavaEditorTextHover {
 
 		boolean done= true;
 		int i= -1;
-		for (Iterator iterator= fTextHoverSpecifications.iterator(); iterator.hasNext();) {
+		for (Iterator<JavaEditorTextHoverDescriptor> iterator= fTextHoverSpecifications.iterator(); iterator.hasNext();) {
 			i++;
-			JavaEditorTextHoverDescriptor spec= (JavaEditorTextHoverDescriptor) iterator.next();
+			JavaEditorTextHoverDescriptor spec= iterator.next();
 			if (spec == null)
 				continue;
 
@@ -106,8 +106,8 @@ public class BestMatchHover extends AbstractJavaEditorTextHover {
 		if (fInstantiatedTextHovers == null)
 			return null;
 
-		for (Iterator iterator= fInstantiatedTextHovers.iterator(); iterator.hasNext(); ) {
-			ITextHover hover= (ITextHover)iterator.next();
+		for (Iterator<IJavaEditorTextHover> iterator= fInstantiatedTextHovers.iterator(); iterator.hasNext(); ) {
+			ITextHover hover= iterator.next();
 			if (hover == null)
 				continue;
 
@@ -124,6 +124,7 @@ public class BestMatchHover extends AbstractJavaEditorTextHover {
 	/*
 	 * @see org.eclipse.jface.text.ITextHoverExtension2#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
 	 */
+	@Override
 	public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
 
 		checkTextHovers();
@@ -132,8 +133,8 @@ public class BestMatchHover extends AbstractJavaEditorTextHover {
 		if (fInstantiatedTextHovers == null)
 			return null;
 
-		for (Iterator iterator= fInstantiatedTextHovers.iterator(); iterator.hasNext(); ) {
-			ITextHover hover= (ITextHover)iterator.next();
+		for (Iterator<IJavaEditorTextHover> iterator= fInstantiatedTextHovers.iterator(); iterator.hasNext(); ) {
+			ITextHover hover= iterator.next();
 			if (hover == null)
 				continue;
 
@@ -159,6 +160,7 @@ public class BestMatchHover extends AbstractJavaEditorTextHover {
 	 * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()
 	 * @since 3.0
 	 */
+	@Override
 	public IInformationControlCreator getHoverControlCreator() {
 		if (fBestHover instanceof ITextHoverExtension)
 			return ((ITextHoverExtension)fBestHover).getHoverControlCreator();
@@ -170,6 +172,7 @@ public class BestMatchHover extends AbstractJavaEditorTextHover {
 	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 * @since 3.0
 	 */
+	@Override
 	public IInformationControlCreator getInformationPresenterControlCreator() {
 		if (fBestHover instanceof IInformationProviderExtension2) // this is wrong, but left here for backwards compatibility
 			return ((IInformationProviderExtension2)fBestHover).getInformationPresenterControlCreator();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverDescriptor.java
index 307068e..6a76d7e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -179,18 +179,20 @@ public class JavaEditorTextHoverDescriptor {
 		return Boolean.valueOf(fElement.getAttribute(ACTIVATE_PLUG_IN_ATTRIBUTE)).booleanValue();
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (obj == null || !obj.getClass().equals(this.getClass()) || getId() == null)
 			return false;
 		return getId().equals(((JavaEditorTextHoverDescriptor)obj).getId());
 	}
 
+	@Override
 	public int hashCode() {
 		return getId().hashCode();
 	}
 
 	private static JavaEditorTextHoverDescriptor[] createDescriptors(IConfigurationElement[] elements) {
-		List result= new ArrayList(elements.length);
+		List<JavaEditorTextHoverDescriptor> result= new ArrayList<JavaEditorTextHoverDescriptor>(elements.length);
 		for (int i= 0; i < elements.length; i++) {
 			IConfigurationElement element= elements[i];
 			if (HOVER_TAG.equals(element.getName())) {
@@ -198,14 +200,14 @@ public class JavaEditorTextHoverDescriptor {
 				result.add(desc);
 			}
 		}
-		return (JavaEditorTextHoverDescriptor[])result.toArray(new JavaEditorTextHoverDescriptor[result.size()]);
+		return result.toArray(new JavaEditorTextHoverDescriptor[result.size()]);
 	}
 
 	private static void initializeFromPreferences(JavaEditorTextHoverDescriptor[] hovers) {
 		String compiledTextHoverModifiers= JavaPlugin.getDefault().getPreferenceStore().getString(PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIERS);
 
 		StringTokenizer tokenizer= new StringTokenizer(compiledTextHoverModifiers, VALUE_SEPARATOR);
-		HashMap idToModifier= new HashMap(tokenizer.countTokens() / 2);
+		HashMap<String, String> idToModifier= new HashMap<String, String>(tokenizer.countTokens() / 2);
 
 		while (tokenizer.hasMoreTokens()) {
 			String id= tokenizer.nextToken();
@@ -216,7 +218,7 @@ public class JavaEditorTextHoverDescriptor {
 		String compiledTextHoverModifierMasks= JavaPlugin.getDefault().getPreferenceStore().getString(PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIER_MASKS);
 
 		tokenizer= new StringTokenizer(compiledTextHoverModifierMasks, VALUE_SEPARATOR);
-		HashMap idToModifierMask= new HashMap(tokenizer.countTokens() / 2);
+		HashMap<String, String> idToModifierMask= new HashMap<String, String>(tokenizer.countTokens() / 2);
 
 		while (tokenizer.hasMoreTokens()) {
 			String id= tokenizer.nextToken();
@@ -225,7 +227,7 @@ public class JavaEditorTextHoverDescriptor {
 		}
 
 		for (int i= 0; i < hovers.length; i++) {
-			String modifierString= (String)idToModifier.get(hovers[i].getId());
+			String modifierString= idToModifier.get(hovers[i].getId());
 			boolean enabled= true;
 			if (modifierString == null)
 				modifierString= DISABLED_TAG;
@@ -244,7 +246,7 @@ public class JavaEditorTextHoverDescriptor {
 			if (hovers[i].fStateMask == -1) {
 				// Fallback: use stored modifier masks
 				try {
-					hovers[i].fStateMask= Integer.parseInt((String)idToModifierMask.get(hovers[i].getId()));
+					hovers[i].fStateMask= Integer.parseInt(idToModifierMask.get(hovers[i].getId()));
 				} catch (NumberFormatException ex) {
 					hovers[i].fStateMask= -1;
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverProxy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverProxy.java
index aa9348b..de33d25 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverProxy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaEditorTextHoverProxy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ public class JavaEditorTextHoverProxy extends AbstractJavaEditorTextHover {
 	/*
 	 * @see IJavaEditorTextHover#setEditor(IEditorPart)
 	 */
+	@Override
 	public void setEditor(IEditorPart editor) {
 		super.setEditor(editor);
 
@@ -55,6 +56,7 @@ public class JavaEditorTextHoverProxy extends AbstractJavaEditorTextHover {
 	/*
 	 * @see ITextHover#getHoverRegion(ITextViewer, int)
 	 */
+	@Override
 	public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
 		if (ensureHoverCreated())
 			return fHover.getHoverRegion(textViewer, offset);
@@ -76,6 +78,7 @@ public class JavaEditorTextHoverProxy extends AbstractJavaEditorTextHover {
 	 * @see org.eclipse.jface.text.ITextHoverExtension2#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
 	 * @since 3.4
 	 */
+	@Override
 	public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
 		if (ensureHoverCreated()) {
 			if (fHover instanceof ITextHoverExtension2)
@@ -108,6 +111,7 @@ public class JavaEditorTextHoverProxy extends AbstractJavaEditorTextHover {
 	 * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()
 	 * @since 3.0
 	 */
+	@Override
 	public IInformationControlCreator getHoverControlCreator() {
 		if (ensureHoverCreated() && (fHover instanceof ITextHoverExtension))
 			return ((ITextHoverExtension)fHover).getHoverControlCreator();
@@ -118,6 +122,7 @@ public class JavaEditorTextHoverProxy extends AbstractJavaEditorTextHover {
 	/*
 	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 */
+	@Override
 	public IInformationControlCreator getInformationPresenterControlCreator() {
 		if (ensureHoverCreated()) {
 			if (fHover instanceof IInformationProviderExtension2) // this is wrong, but left here for backwards compatibility
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaExpandHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaExpandHover.java
index 0ff2d1a..0531b74 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaExpandHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaExpandHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,9 +43,9 @@ import org.eclipse.jdt.ui.PreferenceConstants;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.ProblemAnnotation;
 import org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaMarkerAnnotation;
-import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.ProblemAnnotation;
 import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
 import org.eclipse.jdt.internal.ui.text.java.hover.AnnotationExpansionControl.AnnotationHoverInput;
 
@@ -91,6 +91,7 @@ public class JavaExpandHover extends AnnotationExpandHover {
 	/*
 	 * @see org.eclipse.ui.internal.texteditor.AnnotationExpandHover#getHoverInfoForLine(org.eclipse.jface.text.source.ISourceViewer, int)
 	 */
+	@Override
 	protected Object getHoverInfoForLine(final ISourceViewer viewer, final int line) {
 		final boolean showTemporaryProblems= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_CORRECTION_INDICATION);
 		IAnnotationModel model= viewer.getAnnotationModel();
@@ -99,12 +100,12 @@ public class JavaExpandHover extends AnnotationExpandHover {
 		if (model == null)
 			return null;
 
-		List exact= new ArrayList();
-		HashMap messagesAtPosition= new HashMap();
+		List<Annotation> exact= new ArrayList<Annotation>();
+		HashMap<Position, Object> messagesAtPosition= new HashMap<Position, Object>();
 
-		Iterator e= model.getAnnotationIterator();
+		Iterator<Annotation> e= model.getAnnotationIterator();
 		while (e.hasNext()) {
-			Annotation annotation= (Annotation) e.next();
+			Annotation annotation= e.next();
 
 			if (fAnnotationAccess instanceof IAnnotationAccessExtension)
 				if (!((IAnnotationAccessExtension)fAnnotationAccess).isPaintable(annotation))
@@ -139,7 +140,7 @@ public class JavaExpandHover extends AnnotationExpandHover {
 			setLastRulerMouseLocation(viewer, line);
 
 		if (exact.size() > 0) {
-			Annotation first= (Annotation) exact.get(0);
+			Annotation first= exact.get(0);
 			if (!isBreakpointAnnotation(first))
 				exact.add(0, new NoBreakpointAnnotation());
 		}
@@ -148,7 +149,7 @@ public class JavaExpandHover extends AnnotationExpandHover {
 			return null;
 
 		AnnotationHoverInput input= new AnnotationHoverInput();
-		input.fAnnotations= (Annotation[]) exact.toArray(new Annotation[0]);
+		input.fAnnotations= exact.toArray(new Annotation[0]);
 		input.fViewer= viewer;
 		input.fRulerInfo= fCompositeRuler;
 		input.fAnnotationListener= fgListener;
@@ -190,6 +191,7 @@ public class JavaExpandHover extends AnnotationExpandHover {
 	/*
 	 * @see org.eclipse.ui.internal.texteditor.AnnotationExpandHover#getOrder(org.eclipse.jface.text.source.Annotation)
 	 */
+	@Override
 	protected int getOrder(Annotation annotation) {
 		if (isBreakpointAnnotation(annotation))
 			return 1000;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.java
index e3447c6..5f4535a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ final class JavaHoverMessages extends NLS {
 	public static String NoBreakpointAnnotation_addBreakpoint;
 
 	public static String NLSStringHover_NLSStringHover_missingKeyWarning;
+	public static String NLSStringHover_NLSStringHover_PropertiesFileCouldNotBeReadWarning;
 	public static String NLSStringHover_NLSStringHover_PropertiesFileNotDetectedWarning;
 	public static String NLSStringHover_open_in_properties_file;
 	public static String ProblemHover_action_configureProblemSeverity;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.properties
index 2db5bf0..8da98ab 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaHoverMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ NoBreakpointAnnotation_addBreakpoint= Add a breakpoint
 
 NLSStringHover_NLSStringHover_PropertiesFileNotDetectedWarning= The properties file could not be detected
 NLSStringHover_NLSStringHover_missingKeyWarning= <b>Warning:</b> The key is missing!
+NLSStringHover_NLSStringHover_PropertiesFileCouldNotBeReadWarning=<b>Warning:</b> The properties file could not be read!
 NLSStringHover_open_in_properties_file=Open in Properties File
 JavadocHover_back= Back
 JavadocHover_back_toElement_toolTip=Back to {0}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaSourceHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaSourceHover.java
index 6a73167..e374bd5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaSourceHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavaSourceHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -115,6 +115,7 @@ public class JavaSourceHover extends AbstractJavaEditorTextHover {
 	 * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()
 	 * @since 3.0
 	 */
+	@Override
 	public IInformationControlCreator getHoverControlCreator() {
 		return new IInformationControlCreator() {
 			public IInformationControl createInformationControl(Shell parent) {
@@ -128,9 +129,10 @@ public class JavaSourceHover extends AbstractJavaEditorTextHover {
 	}
 
 	/*
-	 * @see org.eclipse.jface.text.ITextHoverExtension2#getInformationPresenterControlCreator()
+	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 * @since 3.0
 	 */
+	@Override
 	public IInformationControlCreator getInformationPresenterControlCreator() {
 		return new IInformationControlCreator() {
 			public IInformationControl createInformationControl(Shell parent) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocBrowserInformationControlInput.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocBrowserInformationControlInput.java
index 6a7971c..eba36c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocBrowserInformationControlInput.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocBrowserInformationControlInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ public class JavadocBrowserInformationControlInput extends BrowserInformationCon
 	 * @see org.eclipse.jface.internal.text.html.BrowserInformationControlInput#getLeadingImageWidth()
 	 * @since 3.4
 	 */
+	@Override
 	public int getLeadingImageWidth() {
 		return fLeadingImageWidth;
 	}
@@ -63,6 +64,7 @@ public class JavadocBrowserInformationControlInput extends BrowserInformationCon
 	/*
 	 * @see org.eclipse.jface.internal.text.html.BrowserInput#getHtml()
 	 */
+	@Override
 	public String getHtml() {
 		return fHtml;
 	}
@@ -70,6 +72,7 @@ public class JavadocBrowserInformationControlInput extends BrowserInformationCon
 	/*
 	 * @see org.eclipse.jdt.internal.ui.infoviews.BrowserInput#getInputElement()
 	 */
+	@Override
 	public Object getInputElement() {
 		return fElement == null ? (Object) fHtml : fElement;
 	}
@@ -77,6 +80,7 @@ public class JavadocBrowserInformationControlInput extends BrowserInformationCon
 	/*
 	 * @see org.eclipse.jdt.internal.ui.infoviews.BrowserInput#getInputName()
 	 */
+	@Override
 	public String getInputName() {
 		return fElement == null ? "" : fElement.getElementName(); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java
index ea2b4de..beaba82 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -105,6 +105,7 @@ import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.actions.OpenBrowserUtil;
 import org.eclipse.jdt.internal.ui.actions.SimpleSelectionProvider;
 import org.eclipse.jdt.internal.ui.infoviews.JavadocView;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks;
@@ -135,6 +136,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 			update();
 		}
 
+		@Override
 		public void run() {
 			BrowserInformationControlInput previous= (BrowserInformationControlInput) fInfoControl.getInput().getPrevious();
 			if (previous != null) {
@@ -174,6 +176,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 			update();
 		}
 
+		@Override
 		public void run() {
 			BrowserInformationControlInput next= (BrowserInformationControlInput) fInfoControl.getInput().getNext();
 			if (next != null) {
@@ -211,6 +214,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			JavadocBrowserInformationControlInput infoInput= (JavadocBrowserInformationControlInput) fInfoControl.getInput(); //TODO: check cast
 			fInfoControl.notifyDelayedInputChange(null);
@@ -241,6 +245,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			JavadocBrowserInformationControlInput infoInput= (JavadocBrowserInformationControlInput) fInfoControl.getInput(); //TODO: check cast
 			fInfoControl.notifyDelayedInputChange(null);
@@ -280,6 +285,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		public IInformationControl doCreateInformationControl(Shell parent) {
 			if (BrowserInformationControl.isAvailable(parent)) {
 				ToolBarManager tbm= new ToolBarManager(SWT.FLAT);
@@ -376,6 +382,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		public IInformationControl doCreateInformationControl(Shell parent) {
 			String tooltipAffordanceString= fAdditionalInfoAffordance ? JavaPlugin.getAdditionalInfoAffordanceString() : EditorsUI.getTooltipAffordanceString();
 			if (BrowserInformationControl.isAvailable(parent)) {
@@ -384,6 +391,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 					/*
 					 * @see org.eclipse.jface.text.IInformationControlExtension5#getInformationPresenterControlCreator()
 					 */
+					@Override
 					public IInformationControlCreator getInformationPresenterControlCreator() {
 						return fInformationPresenterControlCreator;
 					}
@@ -398,6 +406,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#canReuse(org.eclipse.jface.text.IInformationControl)
 		 */
+		@Override
 		public boolean canReuse(IInformationControl control) {
 			if (!super.canReuse(control))
 				return false;
@@ -438,9 +447,10 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 	private IInformationControlCreator fPresenterControlCreator;
 
 	/*
-	 * @see org.eclipse.jface.text.ITextHoverExtension2#getInformationPresenterControlCreator()
+	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 * @since 3.1
 	 */
+	@Override
 	public IInformationControlCreator getInformationPresenterControlCreator() {
 		if (fPresenterControlCreator == null)
 			fPresenterControlCreator= new PresenterControlCreator(getSite());
@@ -464,6 +474,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 	 * @see ITextHoverExtension#getHoverControlCreator()
 	 * @since 3.2
 	 */
+	@Override
 	public IInformationControlCreator getHoverControlCreator() {
 		if (fHoverControlCreator == null)
 			fHoverControlCreator= new HoverControlCreator(getInformationPresenterControlCreator());
@@ -543,6 +554,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 	/*
 	 * @see org.eclipse.jface.text.ITextHoverExtension2#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
 	 */
+	@Override
 	public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
 		return internalGetHoverInfo(textViewer, hoverRegion);
 	}
@@ -671,7 +683,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		if (element.getElementType() == IJavaElement.FIELD) {
 			String constantValue= getConstantValue((IField) element, editorInputElement, hoverRegion);
 			if (constantValue != null) {
-				constantValue= HTMLPrinter.convertToHTMLContent(constantValue);
+				constantValue= HTMLPrinter.convertToHTMLContentWithWhitespace(constantValue);
 				IJavaProject javaProject= element.getJavaProject();
 				if (JavaCore.INSERT.equals(javaProject.getOption(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR, true)))
 					label.append(' ');
@@ -801,7 +813,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 	}
 
 	private static String getEscapedStringLiteral(String stringValue) {
-		StringLiteral stringLiteral= AST.newAST(AST.JLS3).newStringLiteral();
+		StringLiteral stringLiteral= AST.newAST(ASTProvider.SHARED_AST_LEVEL).newStringLiteral();
 		stringLiteral.setLiteralValue(stringValue);
 		String stringConstant= stringLiteral.getEscapedValue();
 		if (stringConstant.length() > 80) {
@@ -812,7 +824,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 	}
 
 	private static String getEscapedCharacterLiteral(char ch) {
-		CharacterLiteral characterLiteral= AST.newAST(AST.JLS3).newCharacterLiteral();
+		CharacterLiteral characterLiteral= AST.newAST(ASTProvider.SHARED_AST_LEVEL).newCharacterLiteral();
 		characterLiteral.setCharValue(ch);
 		return characterLiteral.getEscapedValue();
 	}
@@ -881,10 +893,6 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		return null;
 	}
 
-	public static void addImageAndLabel(StringBuffer buf, String imageSrcPath, int imageWidth, int imageHeight, String label, int labelLeft, int labelTop) {
-		addImageAndLabel(buf, null, imageSrcPath, imageWidth, imageHeight, label, labelLeft, labelTop);
-	}
-	
 	public static void addImageAndLabel(StringBuffer buf, IJavaElement element, String imageSrcPath, int imageWidth, int imageHeight, String label, int labelLeft, int labelTop) {
 		buf.append("<div style='word-wrap: break-word; position: relative; "); //$NON-NLS-1$
 		
@@ -910,16 +918,16 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 
 			// hack for broken transparent PNG support in IE 6, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=223900 :
 			buf.append("<!--[if lte IE 6]><![if gte IE 5.5]>\n"); //$NON-NLS-1$
-			String tooltip= JavaHoverMessages.JavadocHover_openDeclaration;
-			buf.append("<span alt='").append(tooltip).append("' style=\"").append(imageStyle). //$NON-NLS-1$ //$NON-NLS-2$
+			String tooltip= element == null ? "" : "alt='" + JavaHoverMessages.JavadocHover_openDeclaration + "' "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			buf.append("<span ").append(tooltip).append("style=\"").append(imageStyle). //$NON-NLS-1$ //$NON-NLS-2$
 					append("filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='").append(imageSrcPath).append("')\"></span>\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			buf.append("<![endif]><![endif]-->\n"); //$NON-NLS-1$
 
 			buf.append("<!--[if !IE]>-->\n"); //$NON-NLS-1$
-			buf.append("<img alt='").append(tooltip).append("' style='").append(imageStyle).append("' src='").append(imageSrcPath).append("'/>\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			buf.append("<img ").append(tooltip).append("style='").append(imageStyle).append("' src='").append(imageSrcPath).append("'/>\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 			buf.append("<!--<![endif]-->\n"); //$NON-NLS-1$
 			buf.append("<!--[if gte IE 7]>\n"); //$NON-NLS-1$
-			buf.append("<img alt='").append(tooltip).append("' style='").append(imageStyle).append("' src='").append(imageSrcPath).append("'/>\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			buf.append("<img ").append(tooltip).append("style='").append(imageStyle).append("' src='").append(imageSrcPath).append("'/>\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 			buf.append("<![endif]-->\n"); //$NON-NLS-1$
 			if (element != null) {
 				buf.append("</a>"); //$NON-NLS-1$
@@ -961,7 +969,7 @@ public class JavadocHover extends AbstractJavaEditorTextHover {
 		ASTNode node= getHoveredASTNode(editorInputElement, hoverRegion);
 		
 		if (node == null) {
-			ASTParser p= ASTParser.newParser(AST.JLS3);
+			ASTParser p= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			p.setProject(element.getJavaProject());
 			try {
 				binding= p.createBindings(new IJavaElement[] { element }, null)[0];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/NLSStringHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/NLSStringHover.java
index ae73876..9bc171c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/NLSStringHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/NLSStringHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,7 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover#getHoverRegion(org.eclipse.jface.text.ITextViewer, int)
 	 */
+	@Override
 	public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
 		if (!(getEditor() instanceof JavaEditor))
 			return null;
@@ -108,6 +109,7 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 	/*
 	 * @see org.eclipse.jface.text.ITextHoverExtension2#getHoverInfo2(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion)
 	 */
+	@Override
 	public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
 		return internalGetHoverInfo(textViewer, hoverRegion);
 	}
@@ -158,22 +160,6 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 		if (ref == null)
 			return null;
 
-		IStorage propertiesFile;
-		try {
-			propertiesFile= NLSHintHelper.getResourceBundle(je.getJavaProject(), ref);
-			if (propertiesFile == null)
-				return new NLSHoverControlInput(toHtml(JavaHoverMessages.NLSStringHover_NLSStringHover_PropertiesFileNotDetectedWarning, ""), (IStorage)null, "", getEditor()); //$NON-NLS-1$ //$NON-NLS-2$
-		} catch (JavaModelException ex) {
-			return null;
-		}
-
-		final String propertiesFileName= propertiesFile.getName();
-		Properties properties= NLSHintHelper.getProperties(propertiesFile);
-		if (properties == null)
-			return null;
-		if (properties.isEmpty())
-			return new NLSHoverControlInput(toHtml(propertiesFileName, JavaHoverMessages.NLSStringHover_NLSStringHover_missingKeyWarning), propertiesFile, "", getEditor()); //$NON-NLS-1$
-
 		String identifier= null;
 		if (node instanceof StringLiteral) {
 			identifier= ((StringLiteral)node).getLiteralValue();
@@ -199,22 +185,51 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 		if (identifier == null)
 			return null;
 
-		String value= properties.getProperty(identifier, null);
-		if (value != null)
-			value= HTMLPrinter.convertToHTMLContent(value);
-		else
-			value= JavaHoverMessages.NLSStringHover_NLSStringHover_missingKeyWarning;
+		IStorage propertiesFile;
+		try {
+			propertiesFile= NLSHintHelper.getResourceBundle(je.getJavaProject(), ref);
+			if (propertiesFile == null)
+				return new NLSHoverControlInput(toHtml(JavaHoverMessages.NLSStringHover_NLSStringHover_PropertiesFileNotDetectedWarning, "", null, false), (IStorage)null, "", getEditor()); //$NON-NLS-1$ //$NON-NLS-2$
+		} catch (JavaModelException ex) {
+			return null;
+		}
+
+		final String propertiesFileName= propertiesFile.getName();
+		Properties properties= null;
+		try {
+			properties= NLSHintHelper.getProperties(propertiesFile);
+		} catch (IllegalArgumentException e) {
+			return new NLSHoverControlInput(toHtml(propertiesFileName, JavaHoverMessages.NLSStringHover_NLSStringHover_PropertiesFileCouldNotBeReadWarning, e.getLocalizedMessage(), false),
+					propertiesFile, identifier, getEditor());
+		}
+		if (properties == null)
+			return null;
+		if (properties.isEmpty())
+			return new NLSHoverControlInput(toHtml(propertiesFileName, JavaHoverMessages.NLSStringHover_NLSStringHover_missingKeyWarning, null, false), propertiesFile, "", getEditor()); //$NON-NLS-1$
 
-		String buffer= toHtml(propertiesFileName, value);
+		String value= properties.getProperty(identifier, null);
+		String buffer= toHtml(propertiesFileName, value, null, true);
 		return new NLSHoverControlInput(buffer, propertiesFile, identifier, getEditor());
 	}
 
-	private String toHtml(String header, String string) {
-
+	private String toHtml(String header, String string, String errorString, boolean addPreFormatted) {
 		StringBuffer buffer= new StringBuffer();
-
 		HTMLPrinter.addSmallHeader(buffer, header);
-		HTMLPrinter.addParagraph(buffer, string);
+
+		if (string != null) {
+			if (addPreFormatted) {
+				HTMLPrinter.addParagraph(buffer, ""); //$NON-NLS-1$
+				HTMLPrinter.addPreFormatted(buffer, HTMLPrinter.convertToHTMLContent(string));
+			} else {
+				HTMLPrinter.addParagraph(buffer, string);
+			}
+			if (errorString != null) {
+				HTMLPrinter.addParagraph(buffer, errorString);
+			}
+		} else {
+			HTMLPrinter.addParagraph(buffer, JavaHoverMessages.NLSStringHover_NLSStringHover_missingKeyWarning);
+		}
+
 		HTMLPrinter.insertPageProlog(buffer, 0);
 		HTMLPrinter.addPageEpilog(buffer);
 		return buffer.toString();
@@ -247,7 +262,7 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 			fActiveEditor= editor;
 		}
 	}
-	
+
 	/**
 	 * The NLS hover control.
 	 * 
@@ -312,6 +327,7 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		public IInformationControl doCreateInformationControl(Shell parent) {
 			ToolBarManager tbm= new ToolBarManager(SWT.FLAT);
 			NLSHoverControl iControl= new NLSHoverControl(parent, tbm);
@@ -346,11 +362,13 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractReusableInformationControlCreator#doCreateInformationControl(org.eclipse.swt.widgets.Shell)
 		 */
+		@Override
 		public IInformationControl doCreateInformationControl(Shell parent) {
 			return new NLSHoverControl(parent, EditorsUI.getTooltipAffordanceString()) {
 				/*
 				 * @see org.eclipse.jface.text.IInformationControlExtension5#getInformationPresenterControlCreator()
 				 */
+				@Override
 				public IInformationControlCreator getInformationPresenterControlCreator() {
 					return fPresenterControlCreator;
 				}
@@ -376,6 +394,7 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 	 * @see ITextHoverExtension#getHoverControlCreator()
 	 * @since 3.5
 	 */
+	@Override
 	public IInformationControlCreator getHoverControlCreator() {
 		if (fHoverControlCreator == null)
 			fHoverControlCreator= new HoverControlCreator(getInformationPresenterControlCreator());
@@ -383,9 +402,10 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 	}
 
 	/*
-	 * @see org.eclipse.jface.text.ITextHoverExtension2#getInformationPresenterControlCreator()
+	 * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
 	 * @since 3.5
 	 */
+	@Override
 	public IInformationControlCreator getInformationPresenterControlCreator() {
 		if (fPresenterControlCreator == null)
 			fPresenterControlCreator= new PresenterControlCreator();
@@ -419,6 +439,7 @@ public class NLSStringHover extends AbstractJavaEditorTextHover {
 		/*
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			NLSHoverControlInput input= fControl.getInput();
 			NLSKeyHyperlink.openKeyInPropertiesFile(input.fKeyName, input.fpropertiesFile, input.fActiveEditor);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/ProblemHover.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/ProblemHover.java
index 480b41b..c1680d7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/ProblemHover.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/ProblemHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.SharedASTProvider;
 import org.eclipse.jdt.ui.text.java.CompletionProposalComparator;
 import org.eclipse.jdt.ui.text.java.IInvocationContext;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jdt.ui.text.java.IProblemLocation;
 
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
@@ -63,9 +64,9 @@ import org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation;
 import org.eclipse.jdt.internal.ui.preferences.JavadocProblemsConfigurationBlock;
 import org.eclipse.jdt.internal.ui.preferences.JavadocProblemsPreferencePage;
 import org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock;
+import org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock.Key;
 import org.eclipse.jdt.internal.ui.preferences.ProblemSeveritiesConfigurationBlock;
 import org.eclipse.jdt.internal.ui.preferences.ProblemSeveritiesPreferencePage;
-import org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock.Key;
 import org.eclipse.jdt.internal.ui.text.correction.AssistContext;
 import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
 import org.eclipse.jdt.internal.ui.text.correction.ProblemLocation;
@@ -110,6 +111,7 @@ public class ProblemHover extends AbstractAnnotationHover {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			boolean showPropertyPage;
 
@@ -142,7 +144,7 @@ public class ProblemHover extends AbstractAnnotationHover {
 				showPropertyPage= true;
 			}
 
-			Map data= new HashMap();
+			Map<String, Object> data= new HashMap<String, Object>();
 			String pageId;
 			if (fIsJavadocOption) {
 				if (showPropertyPage) {
@@ -190,6 +192,7 @@ public class ProblemHover extends AbstractAnnotationHover {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover.AnnotationInfo#getCompletionProposals()
 		 */
+		@Override
 		public ICompletionProposal[] getCompletionProposals() {
 			if (annotation instanceof IJavaAnnotation) {
 				ICompletionProposal[] result= getJavaAnnotationFixes((IJavaAnnotation) annotation);
@@ -217,11 +220,11 @@ public class ProblemHover extends AbstractAnnotationHover {
 			if (!SpellingAnnotation.TYPE.equals(javaAnnotation.getType()) && !hasProblem(context.getASTRoot().getProblems(), location))
 				return NO_PROPOSALS;
 
-			ArrayList proposals= new ArrayList();
+			ArrayList<IJavaCompletionProposal> proposals= new ArrayList<IJavaCompletionProposal>();
 			JavaCorrectionProcessor.collectCorrections(context, new IProblemLocation[] { location }, proposals);
 			Collections.sort(proposals, new CompletionProposalComparator());
 
-			return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+			return proposals.toArray(new ICompletionProposal[proposals.size()]);
 		}
 
 		private static boolean hasProblem(IProblem[] problems, IProblemLocation location) {
@@ -257,10 +260,10 @@ public class ProblemHover extends AbstractAnnotationHover {
 
 			AssistContext context= new AssistContext(cu, sourceViewer, position.getOffset(), position.getLength());
 
-			ArrayList proposals= new ArrayList();
+			ArrayList<IJavaCompletionProposal> proposals= new ArrayList<IJavaCompletionProposal>();
 			JavaCorrectionProcessor.collectProposals(context, model, new Annotation[] { markerAnnotation }, true, false, proposals);
 
-			return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+			return proposals.toArray(new ICompletionProposal[proposals.size()]);
 		}
 
 		private static ICompilationUnit getCompilationUnit(IMarker marker) {
@@ -276,6 +279,7 @@ public class ProblemHover extends AbstractAnnotationHover {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover.AnnotationInfo#fillToolBar(org.eclipse.jface.action.ToolBarManager)
 		 */
+		@Override
 		public void fillToolBar(ToolBarManager manager, IInformationControl infoControl) {
 			super.fillToolBar(manager, infoControl);
 			if (!(annotation instanceof IJavaAnnotation))
@@ -298,6 +302,7 @@ public class ProblemHover extends AbstractAnnotationHover {
 		super(false);
 	}
 
+	@Override
 	protected AnnotationInfo createAnnotationInfo(Annotation annotation, Position position, ITextViewer textViewer) {
 		return new ProblemInfo(annotation, position, textViewer);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/HTMLTagCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/HTMLTagCompletionProposalComputer.java
old mode 100644
new mode 100755
index b6d8779..2d0d279
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/HTMLTagCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/HTMLTagCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,8 @@ import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
 
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.part.FileEditorInput;
@@ -66,7 +68,7 @@ public class HTMLTagCompletionProposalComputer implements IJavaCompletionProposa
 	private int fCurrentPos;
 	private int fCurrentLength;
 	private String fErrorMessage;
-	private List fResult;
+	private List<ICompletionProposal> fResult;
 
 	private boolean fRestrictToMatchingCase;
 
@@ -124,9 +126,9 @@ public class HTMLTagCompletionProposalComputer implements IJavaCompletionProposa
 	 * @see org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer#computeCompletionProposals(org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 * @since 3.2
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (!(context instanceof JavadocContentAssistInvocationContext))
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 
 		JavadocContentAssistInvocationContext docContext= (JavadocContentAssistInvocationContext) context;
 		int flags= docContext.getFlags();
@@ -136,7 +138,7 @@ public class HTMLTagCompletionProposalComputer implements IJavaCompletionProposa
 
 		ICompilationUnit cu= docContext.getCompilationUnit();
 		if (cu == null)
-			return Collections.EMPTY_LIST;
+			return Collections.emptyList();
 		IEditorInput editorInput= new FileEditorInput((IFile) cu.getResource());
 		fDocument= JavaUI.getDocumentProvider().getDocument(editorInput);
 		if (fDocument == null) {
@@ -144,7 +146,7 @@ public class HTMLTagCompletionProposalComputer implements IJavaCompletionProposa
 		}
 
 		try {
-			fResult= new ArrayList(100);
+			fResult= new ArrayList<ICompletionProposal>(100);
 			evalProposals();
 			return fResult;
 		} catch (JavaModelException e) {
@@ -229,8 +231,8 @@ public class HTMLTagCompletionProposalComputer implements IJavaCompletionProposa
 	 * @see org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer#computeContextInformation(org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 * @since 3.2
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-		return Collections.EMPTY_LIST;
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+		return Collections.emptyList();
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDoc2HTMLTextReader.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDoc2HTMLTextReader.java
index 5c95e34..dd977b7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDoc2HTMLTextReader.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDoc2HTMLTextReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,13 +41,13 @@ public class JavaDoc2HTMLTextReader extends SubstitutionTextReader {
 		}
 	}
 
-	private List fParameters;
+	private List<String> fParameters;
 	private String fReturn;
-	private List fExceptions;
-	private List fAuthors;
-	private List fSees;
-	private List fSince;
-	private List fRest; // list of Pair objects
+	private List<String> fExceptions;
+	private List<String> fAuthors;
+	private List<String> fSees;
+	private List<String> fSince;
+	private List<Pair> fRest; // list of Pair objects
 
 	public JavaDoc2HTMLTextReader(Reader reader) {
 		super(reader);
@@ -128,10 +128,10 @@ public class JavaDoc2HTMLTextReader extends SubstitutionTextReader {
 		return result;
 	}
 
-	private void printDefinitions(StringBuffer buffer, List list, boolean firstword) {
-		Iterator e= list.iterator();
+	private void printDefinitions(StringBuffer buffer, List<String> list, boolean firstword) {
+		Iterator<String> e= list.iterator();
 		while (e.hasNext()) {
-			String s= (String) e.next();
+			String s= e.next();
 			buffer.append("<dd>"); //$NON-NLS-1$
 			if (!firstword)
 				buffer.append(s);
@@ -175,7 +175,7 @@ public class JavaDoc2HTMLTextReader extends SubstitutionTextReader {
 		return i;
 	}
 
-	private void print(StringBuffer buffer, String tag, List elements, boolean firstword) {
+	private void print(StringBuffer buffer, String tag, List<String> elements, boolean firstword) {
 		if ( !elements.isEmpty()) {
 			buffer.append("<dt>"); //$NON-NLS-1$
 			buffer.append(tag);
@@ -197,9 +197,9 @@ public class JavaDoc2HTMLTextReader extends SubstitutionTextReader {
 
 	private void printRest(StringBuffer buffer) {
 		if ( !fRest.isEmpty()) {
-			Iterator e= fRest.iterator();
+			Iterator<Pair> e= fRest.iterator();
 			while (e.hasNext()) {
-				Pair p= (Pair) e.next();
+				Pair p= e.next();
 				buffer.append("<dt>"); //$NON-NLS-1$
 				if (p.fTag != null)
 					buffer.append(p.fTag);
@@ -254,12 +254,12 @@ public class JavaDoc2HTMLTextReader extends SubstitutionTextReader {
 	 */
 	private String processSimpleTag() throws IOException {
 
-		fParameters= new ArrayList();
-		fExceptions= new ArrayList();
-		fAuthors= new ArrayList();
-		fSees= new ArrayList();
-		fSince= new ArrayList();
-		fRest= new ArrayList();
+		fParameters= new ArrayList<String>();
+		fExceptions= new ArrayList<String>();
+		fAuthors= new ArrayList<String>();
+		fSees= new ArrayList<String>();
+		fSince= new ArrayList<String>();
+		fRest= new ArrayList<Pair>();
 
 		StringBuffer buffer= new StringBuffer();
 		int c= '@';
@@ -379,6 +379,7 @@ public class JavaDoc2HTMLTextReader extends SubstitutionTextReader {
 	/*
 	 * @see SubstitutionTextReaderr#computeSubstitution(int)
 	 */
+	@Override
 	protected String computeSubstitution(int c) throws IOException {
 		if (c == '@' && fWasWhiteSpace)
 			return processSimpleTag();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.java
index 896a5f2..c23f9b8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -302,7 +302,7 @@ public class JavaDocAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy
 	private boolean isFirstComment(IDocument document, DocumentCommand command, IMember member, boolean ignoreNonJavadoc) throws BadLocationException, JavaModelException {
 		IRegion partition= TextUtilities.getPartition(document, fPartitioning, command.offset, false);
 		ISourceRange sourceRange= member.getSourceRange();
-		if (sourceRange == null || sourceRange.getOffset() != partition.getOffset())
+		if (sourceRange == null)
 			return false;
 		int srcOffset= sourceRange.getOffset();
 		int srcLength= sourceRange.getLength();
@@ -387,6 +387,7 @@ public class JavaDocAutoIndentStrategy extends DefaultIndentLineAutoEditStrategy
 	/*
 	 * @see IAutoIndentStrategy#customizeDocumentCommand
 	 */
+	@Override
 	public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
 
 		if (!isSmartMode())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocScanner.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocScanner.java
index 7dc1d88..a30c3f6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocScanner.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IRule;
 import org.eclipse.jface.text.rules.IToken;
 import org.eclipse.jface.text.rules.IWordDetector;
 import org.eclipse.jface.text.rules.SingleLineRule;
@@ -33,10 +34,10 @@ import org.eclipse.jdt.ui.text.IColorManager;
 import org.eclipse.jdt.ui.text.IJavaColorConstants;
 
 import org.eclipse.jdt.internal.ui.text.CombinedWordRule;
-import org.eclipse.jdt.internal.ui.text.JavaCommentScanner;
-import org.eclipse.jdt.internal.ui.text.JavaWhitespaceDetector;
 import org.eclipse.jdt.internal.ui.text.CombinedWordRule.CharacterBuffer;
 import org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher;
+import org.eclipse.jdt.internal.ui.text.JavaCommentScanner;
+import org.eclipse.jdt.internal.ui.text.JavaWhitespaceDetector;
 
 /**
  * A rule based JavaDoc scanner.
@@ -111,6 +112,7 @@ public final class JavaDocScanner extends JavaCommentScanner {
 		/*
 		 * @see PatternRule#evaluate(ICharacterScanner)
 		 */
+		@Override
 		public IToken evaluate(ICharacterScanner scanner) {
 			IToken result= super.evaluate(scanner);
 			if (result == fToken)
@@ -150,9 +152,10 @@ public final class JavaDocScanner extends JavaCommentScanner {
 	/*
 	 * @see AbstractJavaScanner#createRules()
 	 */
-	protected List createRules() {
+	@Override
+	protected List<IRule> createRules() {
 
-		List list= new ArrayList();
+		List<IRule> list= new ArrayList<IRule>();
 
 		// Add rule for tags.
 		Token token= getToken(IJavaColorConstants.JAVADOC_TAG);
@@ -185,12 +188,14 @@ public final class JavaDocScanner extends JavaCommentScanner {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.JavaCommentScanner#createMatchers()
 	 */
-	protected List createMatchers() {
-		List list= super.createMatchers();
+	@Override
+	protected List<WordMatcher> createMatchers() {
+		List<WordMatcher> list= super.createMatchers();
 
 		// Add word rule for keywords.
 		final IToken token= getToken(IJavaColorConstants.JAVADOC_KEYWORD);
 		WordMatcher matcher= new CombinedWordRule.WordMatcher() {
+			@Override
 			public IToken evaluate(ICharacterScanner scanner, CharacterBuffer word) {
 				int length= word.length();
 				if (length > 1 && word.charAt(0) == '@') {
@@ -202,10 +207,11 @@ public final class JavaDocScanner extends JavaCommentScanner {
 						i--;
 						if (c == '*' || Character.isWhitespace((char)c)) {
 							scanner.unread();
+							i++;
 							return token;
 						}
 					} finally {
-						for (; i >= 0; i--)
+						for (; i > 0; i--)
 							scanner.read();
 					}
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProcessor.java
old mode 100644
new mode 100755
index 0e7badc..6864a45
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class JavadocCompletionProcessor extends JavaCompletionProcessor {
 	 *
 	 * @param restrict <code>true</code> if proposals should be restricted
 	 */
+	@Override
 	public void restrictProposalsToMatchingCases(boolean restrict) {
 		fSubProcessorFlags= restrict ? IJavadocCompletionProcessor.RESTRICT_TO_MATCHING_CASE : 0;
 	}
@@ -51,6 +52,7 @@ public class JavadocCompletionProcessor extends JavaCompletionProcessor {
 	/**
 	 * @see IContentAssistProcessor#getContextInformationValidator()
 	 */
+	@Override
 	public IContextInformationValidator getContextInformationValidator() {
 		return null;
 	}
@@ -58,6 +60,7 @@ public class JavadocCompletionProcessor extends JavaCompletionProcessor {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProcessor#createContext(org.eclipse.jface.text.ITextViewer, int)
 	 */
+	@Override
 	protected ContentAssistInvocationContext createContext(ITextViewer viewer, int offset) {
 		return new JavadocContentAssistInvocationContext(viewer, offset, fEditor, fSubProcessorFlags);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProposalComputer.java
index d4a4810..d7287ff 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ public class JavadocCompletionProposalComputer extends JavaCompletionProposalCom
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer#createCollector(org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext)
 	 */
+	@Override
 	protected CompletionProposalCollector createCollector(JavaContentAssistInvocationContext context) {
 		CompletionProposalCollector collector= super.createCollector(context);
 		collector.setIgnored(CompletionProposal.JAVADOC_TYPE_REF, false);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java
index 5059f20..26388c9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAccess2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Tom Hofmann, Google <eclipse at tom.eicher.name> - [hovering] NPE when hovering over @value reference within a type's javadoc - https://bugs.eclipse.org/bugs/show_bug.cgi?id=320084
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.text.javadoc;
 
@@ -27,6 +28,8 @@ import org.eclipse.core.runtime.IPath;
 
 import org.eclipse.core.resources.IResource;
 
+import org.eclipse.jface.internal.text.html.HTMLPrinter;
+
 import org.eclipse.jdt.core.IBuffer;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJavaProject;
@@ -70,6 +73,7 @@ import org.eclipse.jdt.ui.JavadocContentAccess;
 import org.eclipse.jdt.ui.SharedASTProvider;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks;
 
 
@@ -111,9 +115,11 @@ public class JavadocContentAccess2 {
 	 */
 	private static abstract class InheritDocVisitor {
 		public static final Object STOP_BRANCH= new Object() {
+			@Override
 			public String toString() { return "STOP_BRANCH"; } //$NON-NLS-1$
 		};
 		public static final Object CONTINUE= new Object() {
+			@Override
 			public String toString() { return "CONTINUE"; } //$NON-NLS-1$
 		};
 
@@ -145,7 +151,7 @@ public class JavadocContentAccess2 {
 		 * @throws JavaModelException unexpected problem
 		 */
 		public Object visitInheritDoc(IType currentType, ITypeHierarchy typeHierarchy) throws JavaModelException {
-			ArrayList visited= new ArrayList();
+			ArrayList<IType> visited= new ArrayList<IType>();
 			visited.add(currentType);
 			Object result= visitInheritDocInterfaces(visited, currentType, typeHierarchy);
 			if (result != InheritDocVisitor.CONTINUE)
@@ -185,8 +191,8 @@ public class JavadocContentAccess2 {
 		 * @return the result, or {@link #CONTINUE} if no result has been found
 		 * @throws JavaModelException unexpected problem
 		 */
-		private Object visitInheritDocInterfaces(ArrayList visited, IType currentType, ITypeHierarchy typeHierarchy) throws JavaModelException {
-			ArrayList toVisitChildren= new ArrayList();
+		private Object visitInheritDocInterfaces(ArrayList<IType> visited, IType currentType, ITypeHierarchy typeHierarchy) throws JavaModelException {
+			ArrayList<IType> toVisitChildren= new ArrayList<IType>();
 			IType[] superInterfaces= typeHierarchy.getSuperInterfaces(currentType);
 			for (int i= 0; i < superInterfaces.length; i++) {
 				IType superInterface= superInterfaces[i];
@@ -202,8 +208,8 @@ public class JavadocContentAccess2 {
 					return result;
 				}
 			}
-			for (Iterator iter= toVisitChildren.iterator(); iter.hasNext(); ) {
-				IType child= (IType) iter.next();
+			for (Iterator<IType> iter= toVisitChildren.iterator(); iter.hasNext(); ) {
+				IType child= iter.next();
 				Object result= visitInheritDocInterfaces(visited, child, typeHierarchy);
 				if (result != InheritDocVisitor.CONTINUE)
 					return result;
@@ -214,15 +220,19 @@ public class JavadocContentAccess2 {
 
 	private static class JavadocLookup {
 		private static final JavadocLookup NONE= new JavadocLookup(null) {
+			@Override
 			public CharSequence getInheritedMainDescription(IMethod method) {
 				return null;
 			}
+			@Override
 			public CharSequence getInheritedParamDescription(IMethod method, int i) {
 				return null;
 			}
+			@Override
 			public CharSequence getInheritedReturnDescription(IMethod method) {
 				return null;
 			}
+			@Override
 			public CharSequence getInheritedExceptionDescription(IMethod method, String name) {
 				return null;
 			}
@@ -240,7 +250,7 @@ public class JavadocContentAccess2 {
 		}
 
 		private final IType fStartingType;
-		private final HashMap fContentAccesses;
+		private final HashMap<IMethod, JavadocContentAccess2> fContentAccesses;
 
 		private ITypeHierarchy fTypeHierarchy;
 		private MethodOverrideTester fOverrideTester;
@@ -248,7 +258,7 @@ public class JavadocContentAccess2 {
 
 		private JavadocLookup(IType startingType) {
 			fStartingType= startingType;
-			fContentAccesses= new HashMap();
+			fContentAccesses= new HashMap<IMethod, JavadocContentAccess2>();
 		}
 
 		/**
@@ -318,6 +328,7 @@ public class JavadocContentAccess2 {
 		private CharSequence getInheritedDescription(final IMethod method, final DescriptionGetter descriptionGetter) {
 			try {
 				return (CharSequence) new InheritDocVisitor() {
+					@Override
 					public Object visit(IType currType) throws JavaModelException {
 						IMethod overridden= getOverrideTester().findOverriddenMethodInType(currType, method);
 						if (overridden == null)
@@ -413,7 +424,7 @@ public class JavadocContentAccess2 {
 	private StringBuffer fMainDescription;
 	private StringBuffer fReturnDescription;
 	private StringBuffer[] fParamDescriptions;
-	private HashMap/*<String, StringBuffer>*/ fExceptionDescriptions;
+	private HashMap<String, StringBuffer> fExceptionDescriptions;
 
 	private JavadocContentAccess2(IMethod method, Javadoc javadoc, String source, JavadocLookup lookup) {
 		fMember= method;
@@ -437,25 +448,6 @@ public class JavadocContentAccess2 {
 	 * Returns <code>null</code> if the member does not contain a Javadoc comment or if no source is available.
 	 *
 	 * @param member				the member to get the Javadoc of
-	 * @param allowInherited		for methods with no (Javadoc) comment, the comment of the overridden
-	 * 									class is returned if <code>allowInherited</code> is <code>true</code>
-	 * @param useAttachedJavadoc	if <code>true</code> Javadoc will be extracted from attached Javadoc
-	 * 									if there's no source
-	 * @return the Javadoc comment content in HTML or <code>null</code> if the member
-	 * 			does not have a Javadoc comment or if no source is available
-	 * @throws JavaModelException is thrown when the element's Javadoc can not be accessed
-	 * @deprecated use {@link #getHTMLContent(IMember, boolean)}
-	 */
-	public static String getHTMLContent(IMember member, boolean allowInherited, boolean useAttachedJavadoc) throws JavaModelException {
-		return getHTMLContent(member, useAttachedJavadoc);
-	}
-
-	/**
-	 * Gets an IMember's Javadoc comment content from the source or Javadoc attachment
-	 * and renders the tags and links in HTML.
-	 * Returns <code>null</code> if the member does not contain a Javadoc comment or if no source is available.
-	 *
-	 * @param member				the member to get the Javadoc of
 	 * @param useAttachedJavadoc	if <code>true</code> Javadoc will be extracted from attached Javadoc
 	 * 									if there's no source
 	 * @return the Javadoc comment content in HTML or <code>null</code> if the member
@@ -493,9 +485,10 @@ public class JavadocContentAccess2 {
 		ITypeHierarchy hierarchy= SuperTypeHierarchyCache.getTypeHierarchy(type);
 		final MethodOverrideTester tester= SuperTypeHierarchyCache.getMethodOverrideTester(type);
 
-		final ArrayList superInterfaceMethods= new ArrayList();
+		final ArrayList<IMethod> superInterfaceMethods= new ArrayList<IMethod>();
 		final IMethod[] superClassMethod= { null };
 		new InheritDocVisitor() {
+			@Override
 			public Object visit(IType currType) throws JavaModelException {
 				IMethod overridden= tester.findOverriddenMethodInType(currType, method);
 				if (overridden == null)
@@ -520,8 +513,8 @@ public class JavadocContentAccess2 {
 			buf.append("<b>"); //$NON-NLS-1$
 			buf.append(JavaDocMessages.JavaDoc2HTMLTextReader_specified_by_section);
 			buf.append("</b> "); //$NON-NLS-1$
-			for (Iterator iter= superInterfaceMethods.iterator(); iter.hasNext(); ) {
-				IMethod overridden= (IMethod) iter.next();
+			for (Iterator<IMethod> iter= superInterfaceMethods.iterator(); iter.hasNext(); ) {
+				IMethod overridden= iter.next();
 				buf.append(createMethodInTypeLinks(overridden));
 				if (iter.hasNext())
 					buf.append(JavaElementLabels.COMMA_STRING);
@@ -587,11 +580,11 @@ public class JavadocContentAccess2 {
 		//Caveat: Javadoc nodes are not available when Javadoc processing has been disabled!
 		//https://bugs.eclipse.org/bugs/show_bug.cgi?id=212207
 
-		ASTParser parser= ASTParser.newParser(AST.JLS3);
+		ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 
 		IJavaProject javaProject= member.getJavaProject();
 		parser.setProject(javaProject);
-		Map options= javaProject.getOptions(true);
+		Map<String, String> options= javaProject.getOptions(true);
 		options.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=212207
 		parser.setCompilerOptions(options);
 
@@ -601,10 +594,10 @@ public class JavadocContentAccess2 {
 		CompilationUnit root= (CompilationUnit) parser.createAST(null);
 		if (root == null)
 			return null;
-		List types= root.types();
+		List<AbstractTypeDeclaration> types= root.types();
 		if (types.size() != 1)
 			return null;
-		AbstractTypeDeclaration type= (AbstractTypeDeclaration) types.get(0);
+		AbstractTypeDeclaration type= types.get(0);
 		return type.getJavadoc();
 	}
 
@@ -676,6 +669,7 @@ public class JavadocContentAccess2 {
 		final MethodOverrideTester tester= SuperTypeHierarchyCache.getMethodOverrideTester(type);
 
 		return (String) new InheritDocVisitor() {
+			@Override
 			public Object visit(IType currType) throws JavaModelException {
 				IMethod overridden= tester.findOverriddenMethodInType(currType, method);
 				if (overridden == null)
@@ -698,30 +692,30 @@ public class JavadocContentAccess2 {
 		fLiteralContent= 0;
 
 		// After first loop, non-null entries in the following two lists are missing and need to be inherited:
-		List parameterNames= initParameterNames();
-		List exceptionNames= initExceptionNames();
+		List<String> parameterNames= initParameterNames();
+		List<String> exceptionNames= initExceptionNames();
 
 		TagElement deprecatedTag= null;
 		TagElement start= null;
-		List/*<TagElement>*/ parameters= new ArrayList();
+		List<TagElement> parameters= new ArrayList<TagElement>();
 		TagElement returnTag= null;
-		List/*<TagElement>*/ exceptions= new ArrayList();
-		List/*<TagElement>*/ versions= new ArrayList();
-		List/*<TagElement>*/ authors= new ArrayList();
-		List/*<TagElement>*/ sees= new ArrayList();
-		List/*<TagElement>*/ since= new ArrayList();
-		List/*<TagElement>*/ rest= new ArrayList();
-
-		List/*<TagElement>*/ tags= fJavadoc.tags();
-		for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-			TagElement tag= (TagElement) iter.next();
+		List<TagElement> exceptions= new ArrayList<TagElement>();
+		List<TagElement> versions= new ArrayList<TagElement>();
+		List<TagElement> authors= new ArrayList<TagElement>();
+		List<TagElement> sees= new ArrayList<TagElement>();
+		List<TagElement> since= new ArrayList<TagElement>();
+		List<TagElement> rest= new ArrayList<TagElement>();
+
+		List<TagElement> tags= fJavadoc.tags();
+		for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+			TagElement tag= iter.next();
 			String tagName= tag.getTagName();
 			if (tagName == null) {
 				start= tag;
 
 			} else if (TagElement.TAG_PARAM.equals(tagName)) {
 				parameters.add(tag);
-				List fragments= tag.fragments();
+				List<? extends ASTNode> fragments= tag.fragments();
 				if (fragments.size() > 0) {
 					Object first= fragments.get(0);
 					if (first instanceof SimpleName) {
@@ -739,7 +733,7 @@ public class JavadocContentAccess2 {
 
 			} else if (TagElement.TAG_EXCEPTION.equals(tagName) || TagElement.TAG_THROWS.equals(tagName)) {
 				exceptions.add(tag);
-				List fragments= tag.fragments();
+				List<? extends ASTNode> fragments= tag.fragments();
 				if (fragments.size() > 0) {
 					Object first= fragments.get(0);
 					if (first instanceof Name) {
@@ -837,22 +831,22 @@ public class JavadocContentAccess2 {
 		}
 	}
 
-	private List initParameterNames() {
+	private List<String> initParameterNames() {
 		if (fMethod != null) {
 			try {
-				return new ArrayList(Arrays.asList(fMethod.getParameterNames()));
+				return new ArrayList<String>(Arrays.asList(fMethod.getParameterNames()));
 			} catch (JavaModelException e) {
 				JavaPlugin.log(e);
 			}
 		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
-	private List initExceptionNames() {
+	private List<String> initExceptionNames() {
 		if (fMethod != null) {
 			try {
 				String[] exceptionTypes= fMethod.getExceptionTypes();
-				ArrayList exceptionNames= new ArrayList();
+				ArrayList<String> exceptionNames= new ArrayList<String>();
 				for (int i= 0; i < exceptionTypes.length; i++) {
 					exceptionNames.add(Signature.getSimpleName(Signature.toString(exceptionTypes[i])));
 				}
@@ -861,7 +855,7 @@ public class JavadocContentAccess2 {
 				JavaPlugin.log(e);
 			}
 		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 	private boolean needsReturnTag() {
@@ -875,10 +869,10 @@ public class JavadocContentAccess2 {
 		}
 	}
 
-	private boolean inheritParameterDescriptions(List parameterNames, CharSequence[] parameterDescriptions) {
+	private boolean inheritParameterDescriptions(List<String> parameterNames, CharSequence[] parameterDescriptions) {
 		boolean hasInheritedParameters= false;
 		for (int i= 0; i < parameterNames.size(); i++) {
-			String name= (String) parameterNames.get(i);
+			String name= parameterNames.get(i);
 			if (name != null) {
 				parameterDescriptions[i]= fJavadocLookup.getInheritedParamDescription(fMethod, i);
 				if (parameterDescriptions[i] != null)
@@ -888,10 +882,10 @@ public class JavadocContentAccess2 {
 		return hasInheritedParameters;
 	}
 
-	private boolean inheritExceptionDescriptions(List exceptionNames, CharSequence[] exceptionDescriptions) {
+	private boolean inheritExceptionDescriptions(List<String> exceptionNames, CharSequence[] exceptionDescriptions) {
 		boolean hasInheritedExceptions= false;
 		for (int i= 0; i < exceptionNames.size(); i++) {
-			String name= (String) exceptionNames.get(i);
+			String name= exceptionNames.get(i);
 			if (name != null) {
 				exceptionDescriptions[i]= fJavadocLookup.getInheritedExceptionDescription(fMethod, name);
 				if (exceptionDescriptions[i] != null)
@@ -907,9 +901,9 @@ public class JavadocContentAccess2 {
 			fBuf= fMainDescription;
 			fLiteralContent= 0;
 
-			List tags= fJavadoc.tags();
-			for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-				TagElement tag= (TagElement) iter.next();
+			List<TagElement> tags= fJavadoc.tags();
+			for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+				TagElement tag= iter.next();
 				String tagName= tag.getTagName();
 				if (tagName == null) {
 					handleContentElements(tag.fragments());
@@ -928,9 +922,9 @@ public class JavadocContentAccess2 {
 			fBuf= fReturnDescription;
 			fLiteralContent= 0;
 
-			List tags= fJavadoc.tags();
-			for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-				TagElement tag= (TagElement) iter.next();
+			List<TagElement> tags= fJavadoc.tags();
+			for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+				TagElement tag= iter.next();
 				String tagName= tag.getTagName();
 				if (TagElement.TAG_RETURN.equals(tagName)) {
 					handleContentElements(tag.fragments());
@@ -961,12 +955,12 @@ public class JavadocContentAccess2 {
 			fLiteralContent= 0;
 
 			String paramName= parameterNames[paramIndex];
-			List tags= fJavadoc.tags();
-			for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-				TagElement tag= (TagElement) iter.next();
+			List<TagElement> tags= fJavadoc.tags();
+			for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+				TagElement tag= iter.next();
 				String tagName= tag.getTagName();
 				if (TagElement.TAG_PARAM.equals(tagName)) {
-					List fragments= tag.fragments();
+					List<? extends ASTNode> fragments= tag.fragments();
 					if (fragments.size() > 0) {
 						Object first= fragments.get(0);
 						if (first instanceof SimpleName) {
@@ -989,9 +983,9 @@ public class JavadocContentAccess2 {
 	CharSequence getExceptionDescription(String simpleName) {
 		if (fMethod != null) {
 			if (fExceptionDescriptions == null) {
-				fExceptionDescriptions= new HashMap();
+				fExceptionDescriptions= new HashMap<String, StringBuffer>();
 			} else {
-				StringBuffer description= (StringBuffer) fExceptionDescriptions.get(simpleName);
+				StringBuffer description= fExceptionDescriptions.get(simpleName);
 				if (description != null) {
 					return description.length() > 0 ? description : null;
 				}
@@ -1002,12 +996,12 @@ public class JavadocContentAccess2 {
 			fBuf= description;
 			fLiteralContent= 0;
 
-			List tags= fJavadoc.tags();
-			for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-				TagElement tag= (TagElement) iter.next();
+			List<TagElement> tags= fJavadoc.tags();
+			for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+				TagElement tag= iter.next();
 				String tagName= tag.getTagName();
 				if (TagElement.TAG_THROWS.equals(tagName) || TagElement.TAG_EXCEPTION.equals(tagName)) {
-					List fragments= tag.fragments();
+					List<? extends ASTNode> fragments= tag.fragments();
 					if (fragments.size() > 0) {
 						Object first= fragments.get(0);
 						if (first instanceof Name) {
@@ -1029,14 +1023,14 @@ public class JavadocContentAccess2 {
 	}
 
 		
-	private void handleContentElements(List nodes) {
+	private void handleContentElements(List<? extends ASTNode> nodes) {
 		handleContentElements(nodes, false);
 	}
 	
-	private void handleContentElements(List nodes, boolean skipLeadingWhitespace) {
+	private void handleContentElements(List<? extends ASTNode> nodes, boolean skipLeadingWhitespace) {
 		ASTNode previousNode= null;
-		for (Iterator iter= nodes.iterator(); iter.hasNext(); ) {
-			ASTNode child= (ASTNode) iter.next();
+		for (Iterator<? extends ASTNode> iter= nodes.iterator(); iter.hasNext(); ) {
+			ASTNode child= iter.next();
 			if (previousNode != null) {
 				int previousEnd= previousNode.getStartPosition() + previousNode.getLength();
 				int childStart= child.getStartPosition();
@@ -1159,7 +1153,7 @@ public class JavadocContentAccess2 {
 
 	private boolean handleValueTag(TagElement node) {
 		
-		List fragments= node.fragments();
+		List<? extends ASTNode> fragments= node.fragments();
 		try {
 			if (fragments.isEmpty()) {
 				if (fMember instanceof IField && JdtFlags.isStatic(fMember) && JdtFlags.isFinal(fMember)) {
@@ -1172,9 +1166,16 @@ public class JavadocContentAccess2 {
 					MemberRef memberRef= (MemberRef) first;
 					if (memberRef.getQualifier() == null) {
 						SimpleName name= memberRef.getName();
-						IField field= fMember.getDeclaringType().getField(name.getIdentifier());
-						if (field != null && field.exists() && JdtFlags.isStatic(field) && JdtFlags.isFinal(field))
-							return handleConstantValue(field, true);
+						IType type= fMember instanceof IType ? (IType)fMember : fMember.getDeclaringType();
+						while (type != null) {
+							IField field= type.getField(name.getIdentifier());
+							if (field != null && field.exists()) {
+								if (JdtFlags.isStatic(field) && JdtFlags.isFinal(field))
+									return handleConstantValue(field, true);
+								break;
+							}
+							type= type.getDeclaringType();
+						}
 					}
 				}
 			}
@@ -1200,7 +1201,7 @@ public class JavadocContentAccess2 {
 						Object constantValue= variableBinding.getConstantValue();
 						if (constantValue != null) {
 							if (constantValue instanceof String) {
-								StringLiteral stringLiteral= AST.newAST(AST.JLS3).newStringLiteral();
+								StringLiteral stringLiteral= AST.newAST(ASTProvider.SHARED_AST_LEVEL).newStringLiteral();
 								stringLiteral.setLiteralValue((String) constantValue);
 								text= stringLiteral.getEscapedValue();
 							} else {
@@ -1220,6 +1221,7 @@ public class JavadocContentAccess2 {
 		}
 		
 		if (text != null) {
+			text= HTMLPrinter.convertToHTMLContentWithWhitespace(text);
 			if (link) {
 				String uri;
 				try {
@@ -1301,7 +1303,7 @@ public class JavadocContentAccess2 {
 				return handleInherited(inherited);
 
 			} else if (TagElement.TAG_PARAM.equals(blockTagName)) {
-				List fragments= blockTag.fragments();
+				List<? extends ASTNode> fragments= blockTag.fragments();
 				if (fragments.size() > 0) {
 					Object first= fragments.get(0);
 					if (first instanceof SimpleName) {
@@ -1321,7 +1323,7 @@ public class JavadocContentAccess2 {
 				return handleInherited(inherited);
 
 			} else if (TagElement.TAG_THROWS.equals(blockTagName) || TagElement.TAG_EXCEPTION.equals(blockTagName)) {
-				List fragments= blockTag.fragments();
+				List<? extends ASTNode> fragments= blockTag.fragments();
 				if (fragments.size() > 0) {
 					Object first= fragments.get(0);
 					if (first instanceof Name) {
@@ -1345,14 +1347,14 @@ public class JavadocContentAccess2 {
 		return true;
 	}
 
-	private void handleBlockTags(String title, List tags) {
+	private void handleBlockTags(String title, List<TagElement> tags) {
 		if (tags.isEmpty())
 			return;
 
 		handleBlockTagTitle(title);
 
-		for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-			TagElement tag= (TagElement) iter.next();
+		for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+			TagElement tag= iter.next();
 			fBuf.append(BlOCK_TAG_ENTRY_START);
 			if (TagElement.TAG_SEE.equals(tag.getTagName())) {
 				handleSeeTag(tag);
@@ -1376,9 +1378,9 @@ public class JavadocContentAccess2 {
 		fBuf.append(BlOCK_TAG_ENTRY_END);
 	}
 
-	private void handleBlockTags(List tags) {
-		for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-			TagElement tag= (TagElement) iter.next();
+	private void handleBlockTags(List<TagElement> tags) {
+		for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+			TagElement tag= iter.next();
 			handleBlockTagTitle(tag.getTagName());
 			fBuf.append(BlOCK_TAG_ENTRY_START);
 			handleContentElements(tag.fragments());
@@ -1396,21 +1398,21 @@ public class JavadocContentAccess2 {
 		handleLink(tag.fragments());
 	}
 
-	private void handleExceptionTags(List tags, List exceptionNames, CharSequence[] exceptionDescriptions) {
+	private void handleExceptionTags(List<TagElement> tags, List<String> exceptionNames, CharSequence[] exceptionDescriptions) {
 		if (tags.size() == 0 && containsOnlyNull(exceptionNames))
 			return;
 
 		handleBlockTagTitle(JavaDocMessages.JavaDoc2HTMLTextReader_throws_section);
 
-		for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-			TagElement tag= (TagElement) iter.next();
+		for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+			TagElement tag= iter.next();
 			fBuf.append(BlOCK_TAG_ENTRY_START);
 			handleThrowsTag(tag);
 			fBuf.append(BlOCK_TAG_ENTRY_END);
 		}
 		for (int i= 0; i < exceptionDescriptions.length; i++) {
 			CharSequence description= exceptionDescriptions[i];
-			String name= (String) exceptionNames.get(i);
+			String name= exceptionNames.get(i);
 			if (name != null) {
 				fBuf.append(BlOCK_TAG_ENTRY_START);
 				handleLink(Collections.singletonList(fJavadoc.getAST().newSimpleName(name)));
@@ -1424,7 +1426,7 @@ public class JavadocContentAccess2 {
 	}
 
 	private void handleThrowsTag(TagElement tag) {
-		List fragments= tag.fragments();
+		List<? extends ASTNode> fragments= tag.fragments();
 		int size= fragments.size();
 		if (size > 0) {
 			handleLink(fragments.subList(0, 1));
@@ -1435,21 +1437,21 @@ public class JavadocContentAccess2 {
 		}
 	}
 
-	private void handleParameterTags(List tags, List parameterNames, CharSequence[] parameterDescriptions) {
+	private void handleParameterTags(List<TagElement> tags, List<String> parameterNames, CharSequence[] parameterDescriptions) {
 		if (tags.size() == 0 && containsOnlyNull(parameterNames))
 			return;
 
 		handleBlockTagTitle(JavaDocMessages.JavaDoc2HTMLTextReader_parameters_section);
 
-		for (Iterator iter= tags.iterator(); iter.hasNext(); ) {
-			TagElement tag= (TagElement) iter.next();
+		for (Iterator<TagElement> iter= tags.iterator(); iter.hasNext(); ) {
+			TagElement tag= iter.next();
 			fBuf.append(BlOCK_TAG_ENTRY_START);
 			handleParamTag(tag);
 			fBuf.append(BlOCK_TAG_ENTRY_END);
 		}
 		for (int i= 0; i < parameterDescriptions.length; i++) {
 			CharSequence description= parameterDescriptions[i];
-			String name= (String) parameterNames.get(i);
+			String name= parameterNames.get(i);
 			if (name != null) {
 				fBuf.append(BlOCK_TAG_ENTRY_START);
 				fBuf.append(PARAM_NAME_START);
@@ -1463,7 +1465,7 @@ public class JavadocContentAccess2 {
 	}
 
 	private void handleParamTag(TagElement tag) {
-		List fragments= tag.fragments();
+		List<? extends ASTNode> fragments= tag.fragments();
 		int i= 0;
 		int size= fragments.size();
 		if (size > 0) {
@@ -1502,7 +1504,7 @@ public class JavadocContentAccess2 {
 		}
 	}
 
-	private void handleLink(List fragments) {
+	private void handleLink(List<? extends ASTNode> fragments) {
 		//TODO: Javadoc shortens type names to minimal length according to context
 		int fs= fragments.size();
 		if (fs > 0) {
@@ -1524,12 +1526,12 @@ public class JavadocContentAccess2 {
 				Name qualifier= methodRef.getQualifier();
 				refTypeName= qualifier == null ? "" : qualifier.getFullyQualifiedName(); //$NON-NLS-1$
 				refMemberName= methodRef.getName().getIdentifier();
-				List params= methodRef.parameters();
+				List<MethodRefParameter> params= methodRef.parameters();
 				int ps= params.size();
 				refMethodParamTypes= new String[ps];
 				refMethodParamNames= new String[ps];
 				for (int i= 0; i < ps; i++) {
-					MethodRefParameter param= (MethodRefParameter) params.get(i);
+					MethodRefParameter param= params.get(i);
 					refMethodParamTypes[i]= ASTNodes.asString(param.getType());
 					SimpleName paramName= param.getName();
 					if (paramName != null)
@@ -1588,8 +1590,8 @@ public class JavadocContentAccess2 {
 		return textElement.getText().trim().length() == 0;
 	}
 
-	private boolean containsOnlyNull(List parameterNames) {
-		for (Iterator iter= parameterNames.iterator(); iter.hasNext(); ) {
+	private boolean containsOnlyNull(List<String> parameterNames) {
+		for (Iterator<String> iter= parameterNames.iterator(); iter.hasNext(); ) {
 			if (iter.next() != null)
 				return false;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAssistInvocationContext.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAssistInvocationContext.java
index 6506467..fec33d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAssistInvocationContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocContentAssistInvocationContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,6 +58,7 @@ public final class JavadocContentAssistInvocationContext extends JavaContentAssi
 	/*
 	 * @see org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (!super.equals(obj))
 			return false;
@@ -68,6 +69,7 @@ public final class JavadocContentAssistInvocationContext extends JavaContentAssi
 	/*
 	 * @see org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return super.hashCode() << 2 | fFlags;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocInlineTagCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocInlineTagCompletionProposal.java
index b8fe676..1043e6a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocInlineTagCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocInlineTagCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public final class JavadocInlineTagCompletionProposal extends LazyJavaCompletion
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal#computeReplacementString()
 	 */
+	@Override
 	protected String computeReplacementString() {
 		String replacement= super.computeReplacementString();
 		// TODO respect the auto-close preference, but do so consistently with method completions
@@ -49,6 +50,7 @@ public final class JavadocInlineTagCompletionProposal extends LazyJavaCompletion
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaTypeCompletionProposal#apply(org.eclipse.jface.text.IDocument, char, int)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		// TODO respect the auto-close preference, but do so consistently with method completions
 		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=113544
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocLinkTypeCompletionProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocLinkTypeCompletionProposal.java
index 7fa3fd2..cd0c67e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocLinkTypeCompletionProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavadocLinkTypeCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public final class JavadocLinkTypeCompletionProposal extends LazyJavaTypeComplet
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaTypeCompletionProposal#computeReplacementString()
 	 */
+	@Override
 	protected String computeReplacementString() {
 		String typeReplacement= super.computeReplacementString();
 		// XXX: respect the auto-close preference, but do so consistently with method completions
@@ -48,6 +49,7 @@ public final class JavadocLinkTypeCompletionProposal extends LazyJavaTypeComplet
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.java.LazyJavaTypeCompletionProposal#apply(org.eclipse.jface.text.IDocument, char, int)
 	 */
+	@Override
 	public void apply(IDocument document, char trigger, int offset) {
 		// convert . to #
 		if (trigger == '.')
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/LegacyJavadocCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/LegacyJavadocCompletionProposalComputer.java
index b2d6e8a..16bfd4c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/LegacyJavadocCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/LegacyJavadocCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 
 import org.eclipse.jdt.core.ICompilationUnit;
@@ -76,14 +77,14 @@ public class LegacyJavadocCompletionProposalComputer implements IJavaCompletionP
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeContextInformation(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (context instanceof JavaContentAssistInvocationContext) {
 			JavaContentAssistInvocationContext javaContext= (JavaContentAssistInvocationContext) context;
 
 			ICompilationUnit cu= javaContext.getCompilationUnit();
 			int offset= javaContext.getInvocationOffset();
 
-			ArrayList result= new ArrayList();
+			ArrayList<IContextInformation> result= new ArrayList<IContextInformation>();
 
 			IJavadocCompletionProcessor[] processors= getContributedProcessors();
 			String error= null;
@@ -101,13 +102,13 @@ public class LegacyJavadocCompletionProposalComputer implements IJavaCompletionP
 			fErrorMessage= error;
 			return result;
 		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeCompletionProposals(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (context instanceof JavadocContentAssistInvocationContext) {
 			JavadocContentAssistInvocationContext javaContext= (JavadocContentAssistInvocationContext) context;
 
@@ -120,7 +121,7 @@ public class LegacyJavadocCompletionProposalComputer implements IJavaCompletionP
 				length= selection.y;
 			}
 
-			ArrayList result= new ArrayList();
+			ArrayList<ICompletionProposal> result= new ArrayList<ICompletionProposal>();
 
 			IJavadocCompletionProcessor[] processors= getContributedProcessors();
 			for (int i= 0; i < processors.length; i++) {
@@ -134,7 +135,7 @@ public class LegacyJavadocCompletionProposalComputer implements IJavaCompletionP
 			}
 			return result;
 		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/ChangeCaseProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/ChangeCaseProposal.java
index d168324..6009935 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/ChangeCaseProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/ChangeCaseProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class ChangeCaseProposal extends WordCorrectionProposal {
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getDisplayString()
 	 */
+	@Override
 	public String getDisplayString() {
 		return JavaUIMessages.Spelling_case_label;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/CoreSpellingProblem.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/CoreSpellingProblem.java
index d1eaae1..148c4cc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/CoreSpellingProblem.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/CoreSpellingProblem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -180,6 +180,7 @@ public class CoreSpellingProblem extends CategorizedProblem {
 	/*
 	 * @see org.eclipse.jdt.core.compiler.CategorizedProblem#getCategoryID()
 	 */
+	@Override
 	public int getCategoryID() {
 		return CAT_JAVADOC;
 	}
@@ -187,6 +188,7 @@ public class CoreSpellingProblem extends CategorizedProblem {
 	/*
 	 * @see org.eclipse.jdt.core.compiler.CategorizedProblem#getMarkerType()
 	 */
+	@Override
 	public String getMarkerType() {
 		return MARKER_TYPE;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/DefaultSpellingEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/DefaultSpellingEngine.java
index ab372a8..1ed9ca4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/DefaultSpellingEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/DefaultSpellingEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,7 +50,7 @@ public class DefaultSpellingEngine implements ISpellingEngine {
 	private static final IContentType PROPERTIES_CONTENT_TYPE= Platform.getContentTypeManager().getContentType("org.eclipse.jdt.core.javaProperties"); //$NON-NLS-1$
 
 	/** Available spelling engines by content type */
-	private Map fEngines= new HashMap();
+	private Map<IContentType, SpellingEngine> fEngines= new HashMap<IContentType, SpellingEngine>();
 
 	/**
 	 * Initialize concrete engines.
@@ -88,7 +88,7 @@ public class DefaultSpellingEngine implements ISpellingEngine {
 			return null;
 
 		if (fEngines.containsKey(contentType))
-			return (ISpellingEngine) fEngines.get(contentType);
+			return fEngines.get(contentType);
 
 		return getEngine(contentType.getBaseType());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/HtmlTagDictionary.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/HtmlTagDictionary.java
index 5d2ffcd..00d3d99 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/HtmlTagDictionary.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/HtmlTagDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class HtmlTagDictionary extends AbstractSpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
 	 */
+	@Override
 	protected final URL getURL() {
 		return null;
 	}
@@ -33,6 +34,7 @@ public class HtmlTagDictionary extends AbstractSpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
 	 */
+	@Override
 	public boolean isCorrect(final String word) {
 
 		if (word.charAt(0) == IHtmlTagConstants.HTML_TAG_PREFIX)
@@ -44,6 +46,7 @@ public class HtmlTagDictionary extends AbstractSpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
 	 */
+	@Override
 	protected synchronized boolean load(final URL url) {
 
 		unload();
@@ -60,6 +63,7 @@ public class HtmlTagDictionary extends AbstractSpellDictionary {
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#stripNonLetters(java.lang.String)
 	 * @since 3.3
 	 */
+	@Override
 	protected String stripNonLetters(String word) {
 		return word;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaDocTagDictionary.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaDocTagDictionary.java
index 096aeaa..4eaf410 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaDocTagDictionary.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaDocTagDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ public class JavaDocTagDictionary extends AbstractSpellDictionary implements IJa
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
 	 */
+	@Override
 	protected final URL getURL() {
 		return null;
 	}
@@ -32,6 +33,7 @@ public class JavaDocTagDictionary extends AbstractSpellDictionary implements IJa
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
 	 */
+	@Override
 	public boolean isCorrect(final String word) {
 
 		if (word.charAt(0) == JAVADOC_TAG_PREFIX)
@@ -43,6 +45,7 @@ public class JavaDocTagDictionary extends AbstractSpellDictionary implements IJa
 	/*
 	 * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
 	 */
+	@Override
 	protected synchronized boolean load(final URL url) {
 
 		unload();
@@ -63,6 +66,7 @@ public class JavaDocTagDictionary extends AbstractSpellDictionary implements IJa
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#stripNonLetters(java.lang.String)
 	 * @since 3.3
 	 */
+	@Override
 	protected String stripNonLetters(String word) {
 		return word;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java
index 0e98393..99695f1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ public class JavaSpellingEngine extends SpellingEngine {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.SpellingEngine#check(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.IRegion[], org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellChecker, org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void check(IDocument document, IRegion[] regions, ISpellChecker checker, ISpellingProblemCollector collector, IProgressMonitor monitor) {
 		SpellEventListener listener= new SpellEventListener(collector, document);
 		boolean isIgnoringJavaStrings= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.SPELLING_IGNORE_JAVA_STRINGS);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingProblem.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingProblem.java
index 6c02e1b..fbc7225 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingProblem.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingProblem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 	/*
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingProblem#getOffset()
 	 */
+	@Override
 	public int getOffset() {
 		return fSpellEvent.getBegin();
 	}
@@ -78,6 +79,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 	/*
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingProblem#getLength()
 	 */
+	@Override
 	public int getLength() {
 		return fSpellEvent.getEnd() - fSpellEvent.getBegin() + 1;
 	}
@@ -85,6 +87,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 	/*
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingProblem#getMessage()
 	 */
+	@Override
 	public String getMessage() {
 		if (isSentenceStart() && isDictionaryMatch())
 			return Messages.format(JavaUIMessages.Spelling_error_case_label, new String[] { fSpellEvent.getWord() });
@@ -95,6 +98,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 	/*
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingProblem#getProposals()
 	 */
+	@Override
 	public ICompletionProposal[] getProposals() {
 		return getProposals(null);
 	}
@@ -103,6 +107,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingProblem#getProposals(org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext)
 	 * @since 3.4
 	 */
+	@Override
 	public ICompletionProposal[] getProposals(IQuickAssistInvocationContext context) {
 		String[] arguments= getArguments();
 		if (arguments == null)
@@ -113,7 +118,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 
 		final int threshold= PreferenceConstants.getPreferenceStore().getInt(PreferenceConstants.SPELLING_PROPOSAL_THRESHOLD);
 		int size= 0;
-		List proposals= null;
+		List<RankedWordProposal> proposals= null;
 
 		RankedWordProposal proposal= null;
 		IJavaCompletionProposal[] result= null;
@@ -143,7 +148,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 								.getLocale()) };
 			else {
 
-				proposals= new ArrayList(checker.getProposals(arguments[0],
+				proposals= new ArrayList<RankedWordProposal>(checker.getProposals(arguments[0],
 						sentence));
 				size= proposals.size();
 
@@ -160,7 +165,7 @@ public class JavaSpellingProblem extends SpellingProblem {
 
 				for (index= 0; index < size; index++) {
 
-					proposal= (RankedWordProposal) proposals.get(index);
+					proposal= proposals.get(index);
 					result[index]= new WordCorrectionProposal(proposal
 							.getText(), arguments, getOffset(), getLength(),
 							context, proposal.getRank());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingReconcileStrategy.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingReconcileStrategy.java
index 20ed3b4..da365bc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingReconcileStrategy.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingReconcileStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -121,6 +121,7 @@ public class JavaSpellingReconcileStrategy extends SpellingReconcileStrategy {
 	/*
 	 * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#reconcile(org.eclipse.jface.text.IRegion)
 	 */
+	@Override
 	public void reconcile(IRegion region) {
 		if (fRequestor != null && isSpellingEnabled())
 			super.reconcile(region);
@@ -134,6 +135,7 @@ public class JavaSpellingReconcileStrategy extends SpellingReconcileStrategy {
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingReconcileStrategy#createSpellingProblemCollector()
 	 * @since 3.3
 	 */
+	@Override
 	protected ISpellingProblemCollector createSpellingProblemCollector() {
 		return new SpellingProblemCollector();
 	}
@@ -142,6 +144,7 @@ public class JavaSpellingReconcileStrategy extends SpellingReconcileStrategy {
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingReconcileStrategy#getContentType()
 	 * @since 3.3
 	 */
+	@Override
 	protected IContentType getContentType() {
 		return JAVA_CONTENT_TYPE;
 	}
@@ -149,6 +152,7 @@ public class JavaSpellingReconcileStrategy extends SpellingReconcileStrategy {
 	/*
 	 * @see org.eclipse.jface.text.reconciler.IReconcilingStrategy#setDocument(org.eclipse.jface.text.IDocument)
 	 */
+	@Override
 	public void setDocument(IDocument document) {
 		super.setDocument(document);
 		updateProblemRequester();
@@ -166,6 +170,7 @@ public class JavaSpellingReconcileStrategy extends SpellingReconcileStrategy {
 	 * @see org.eclipse.ui.texteditor.spelling.SpellingReconcileStrategy#getAnnotationModel()
 	 * @since 3.3
 	 */
+	@Override
 	protected IAnnotationModel getAnnotationModel() {
 		final IDocumentProvider documentProvider= fEditor.getDocumentProvider();
 		if (documentProvider == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellCheckIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellCheckIterator.java
index 0a848a4..4d9af53 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellCheckIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellCheckIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,7 +33,8 @@ public class PropertiesFileSpellCheckIterator extends SpellCheckIterator {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.SpellCheckIterator#next()
 	 */
-	public final Object next() {
+	@Override
+	public final String next() {
 		int previous= -1;
 		String token= nextToken();
 		while (fSuccessor != BreakIterator.DONE && (token == null || fContent.charAt(fNext) == '&')) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java
index 5b2ac9d..9c38fcc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,14 +44,15 @@ public class PropertiesFileSpellingEngine extends SpellingEngine {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.SpellingEngine#check(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.IRegion[], org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellChecker, org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void check(IDocument document, IRegion[] regions, ISpellChecker checker, ISpellingProblemCollector collector, IProgressMonitor monitor) {
 		SpellEventListener listener= new SpellEventListener(collector, document);
 		boolean isIgnoringAmpersand= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.SPELLING_IGNORE_AMPERSAND_IN_PROPERTIES);
 		try {
-			List partitionList= new ArrayList();
+			List<ITypedRegion> partitionList= new ArrayList<ITypedRegion>();
 			for (int i= 0; i < regions.length; i++)
 				partitionList.addAll(Arrays.asList(TextUtilities.computePartitioning(document, IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, regions[i].getOffset(), regions[i].getLength(), false)));
-			ITypedRegion[] partitions= (ITypedRegion[]) partitionList.toArray(new ITypedRegion[partitionList.size()]);
+			ITypedRegion[] partitions= partitionList.toArray(new ITypedRegion[partitionList.size()]);
 
 			for (int i= 0; i < partitions.length; i++) {
 				if (monitor != null && monitor.isCanceled())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckEngine.java
index f98ac3d..77c1738 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,6 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.jdt.internal.ui.text.spelling;
 
 import java.io.File;
@@ -23,8 +22,8 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.eclipse.core.variables.IStringVariableManager;
 import org.eclipse.core.variables.VariablesPlugin;
@@ -50,6 +49,7 @@ import org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary;
 import org.eclipse.jdt.internal.ui.text.spelling.engine.LocaleSensitiveSpellDictionary;
 import org.eclipse.jdt.internal.ui.text.spelling.engine.PersistentSpellDictionary;
 
+
 /**
  * Spell check engine for Java source spell checking.
  *
@@ -68,7 +68,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 	 *
 	 * @since 3.3
 	 */
-	private static Set fgLocalesWithInstalledDictionaries;
+	private static Set<Locale> fgLocalesWithInstalledDictionaries;
 
 	/**
 	 * Returns the locales for which this
@@ -77,22 +77,22 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 	 * @param location dictionaries location
 	 * @return The available locales for this engine
 	 */
-	private static Set getLocalesWithInstalledDictionaries(URL location) {
+	private static Set<Locale> getLocalesWithInstalledDictionaries(URL location) {
 		String[] fileNames;
 		try {
 			URL url= FileLocator.toFileURL(location);
 			File file= new File(url.getFile());
 			if (!file.isDirectory())
-				return Collections.EMPTY_SET;
+				return Collections.emptySet();
 			fileNames= file.list();
 			if (fileNames == null)
-				return Collections.EMPTY_SET;
+				return Collections.emptySet();
 		} catch (IOException ex) {
 			JavaPlugin.log(ex);
-			return Collections.EMPTY_SET;
+			return Collections.emptySet();
 		}
 
-		Set localesWithInstalledDictionaries= new HashSet();
+		Set<Locale> localesWithInstalledDictionaries= new HashSet<Locale>();
 		int fileNameCount= fileNames.length;
 		for (int i= 0; i < fileNameCount; i++) {
 			String fileName= fileNames[i];
@@ -119,25 +119,25 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 	 *
 	 * @return The available locales for this engine
 	 */
-	public static Set getLocalesWithInstalledDictionaries() {
+	public static Set<Locale> getLocalesWithInstalledDictionaries() {
 		if (fgLocalesWithInstalledDictionaries != null)
 			return fgLocalesWithInstalledDictionaries;
 
-		Enumeration locations;
+		Enumeration<URL> locations;
 		try {
 			locations= getDictionaryLocations();
 			if (locations == null)
-				return fgLocalesWithInstalledDictionaries= Collections.EMPTY_SET;
+				return fgLocalesWithInstalledDictionaries= Collections.emptySet();
 		} catch (IOException ex) {
 			JavaPlugin.log(ex);
-			return fgLocalesWithInstalledDictionaries= Collections.EMPTY_SET;
+			return fgLocalesWithInstalledDictionaries= Collections.emptySet();
 		}
 
-		fgLocalesWithInstalledDictionaries= new HashSet();
+		fgLocalesWithInstalledDictionaries= new HashSet<Locale>();
 
 		while (locations.hasMoreElements()) {
-			URL location= (URL) locations.nextElement();
-			Set locales= getLocalesWithInstalledDictionaries(location);
+			URL location= locations.nextElement();
+			Set<Locale> locales= getLocalesWithInstalledDictionaries(location);
 			fgLocalesWithInstalledDictionaries.addAll(locales);
 		}
 
@@ -161,18 +161,18 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 	 * @since 3.3
 	 */
 	public ISpellDictionary findDictionary(Locale locale) {
-		ISpellDictionary dictionary= (ISpellDictionary)fLocaleDictionaries.get(locale);
+		ISpellDictionary dictionary= fLocaleDictionaries.get(locale);
 		if (dictionary != null)
 			return dictionary;
 
 		// Try same language
 		String language= locale.getLanguage();
-		Iterator iter= fLocaleDictionaries.entrySet().iterator();
+		Iterator<Entry<Locale, ISpellDictionary>> iter= fLocaleDictionaries.entrySet().iterator();
 		while (iter.hasNext()) {
-			Entry entry= (Entry)iter.next();
-			Locale dictLocale= (Locale)entry.getKey();
+			Entry<Locale, ISpellDictionary> entry= iter.next();
+			Locale dictLocale= entry.getKey();
 			if (dictLocale.getLanguage().equals(language))
-				return (ISpellDictionary)entry.getValue();
+				return entry.getValue();
 		}
 
 		return null;
@@ -191,9 +191,9 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 
 		// Try same language
 		String language= locale.getLanguage();
-		Iterator iter= getLocalesWithInstalledDictionaries().iterator();
+		Iterator<Locale> iter= getLocalesWithInstalledDictionaries().iterator();
 		while (iter.hasNext()) {
-			Locale dictLocale= (Locale)iter.next();
+			Locale dictLocale= iter.next();
 			if (dictLocale.getLanguage().equals(language))
 				return dictLocale;
 		}
@@ -217,7 +217,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 	 * @throws IOException if there is an I/O error
 	 * @return The dictionary locations, or <code>null</code> iff the locations are not known
 	 */
-	public static Enumeration getDictionaryLocations() throws IOException {
+	public static Enumeration<URL> getDictionaryLocations() throws IOException {
 		final JavaPlugin plugin= JavaPlugin.getDefault();
 		if (plugin != null)
 			return plugin.getBundle().getResources("/" + DICTIONARY_LOCATION); //$NON-NLS-1$
@@ -248,13 +248,13 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 	}
 
 	/** The registered locale insensitive dictionaries */
-	private Set fGlobalDictionaries= new HashSet();
+	private Set<ISpellDictionary> fGlobalDictionaries= new HashSet<ISpellDictionary>();
 
 	/** The spell checker for fLocale */
 	private ISpellChecker fChecker= null;
 
 	/** The registered locale sensitive dictionaries */
-	private Map fLocaleDictionaries= new HashMap();
+	private Map<Locale, ISpellDictionary> fLocaleDictionaries= new HashMap<Locale, ISpellDictionary>();
 
 	/** The user dictionary */
 	private ISpellDictionary fUserDictionary= null;
@@ -271,14 +271,14 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 		try {
 
 			Locale locale= null;
-			final Enumeration locations= getDictionaryLocations();
+			final Enumeration<URL> locations= getDictionaryLocations();
 
 			while (locations != null && locations.hasMoreElements()) {
-				URL location= (URL)locations.nextElement();
+				URL location= locations.nextElement();
 
-				for (final Iterator iterator= getLocalesWithInstalledDictionaries(location).iterator(); iterator.hasNext();) {
+				for (final Iterator<Locale> iterator= getLocalesWithInstalledDictionaries(location).iterator(); iterator.hasNext();) {
 
-					locale= (Locale)iterator.next();
+					locale= iterator.next();
 					fLocaleDictionaries.put(locale, new LocaleSensitiveSpellDictionary(locale, location));
 				}
 			}
@@ -311,8 +311,8 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 		fChecker= new DefaultSpellChecker(store, locale);
 		resetUserDictionary();
 
-		for (Iterator iterator= fGlobalDictionaries.iterator(); iterator.hasNext();) {
-			ISpellDictionary dictionary= (ISpellDictionary)iterator.next();
+		for (Iterator<ISpellDictionary> iterator= fGlobalDictionaries.iterator(); iterator.hasNext();) {
+			ISpellDictionary dictionary= iterator.next();
 			fChecker.addDictionary(dictionary);
 		}
 
@@ -338,9 +338,16 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 		if (locale.equals(defaultLocale.toString()))
 			return defaultLocale;
 
-		if (locale.length() >= 5)
+		int length= locale.length();
+		if (length >= 5)
 			return new Locale(locale.substring(0, 2), locale.substring(3, 5));
 
+		if (length == 2 && locale.indexOf('_') == -1)
+			return new Locale(locale);
+
+		if (length == 3 && locale.charAt(0) == '_')
+			return new Locale("", locale.substring(1)); //$NON-NLS-1$
+
 		return new Locale(""); //$NON-NLS-1$
 	}
 
@@ -458,14 +465,14 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 		EditorsUI.getPreferenceStore().removePropertyChangeListener(this);
 
 		ISpellDictionary dictionary= null;
-		for (final Iterator iterator= fGlobalDictionaries.iterator(); iterator.hasNext();) {
-			dictionary= (ISpellDictionary)iterator.next();
+		for (final Iterator<ISpellDictionary> iterator= fGlobalDictionaries.iterator(); iterator.hasNext();) {
+			dictionary= iterator.next();
 			dictionary.unload();
 		}
 		fGlobalDictionaries= null;
 
-		for (final Iterator iterator= fLocaleDictionaries.values().iterator(); iterator.hasNext();) {
-			dictionary= (ISpellDictionary)iterator.next();
+		for (final Iterator<ISpellDictionary> iterator= fLocaleDictionaries.values().iterator(); iterator.hasNext();) {
+			dictionary= iterator.next();
 			dictionary.unload();
 		}
 		fLocaleDictionaries= null;
@@ -476,7 +483,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
 
 	private synchronized void resetSpellChecker() {
 		if (fChecker != null) {
-			ISpellDictionary dictionary= (ISpellDictionary)fLocaleDictionaries.get(fChecker.getLocale());
+			ISpellDictionary dictionary= fLocaleDictionaries.get(fChecker.getLocale());
 			if (dictionary != null)
 				dictionary.unload();
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckIterator.java
index 0bd1024..fba7922 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/SpellCheckIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public class SpellCheckIterator implements ISpellCheckIterator {
 	protected int fPrevious= 0;
 
 	/** The sentence breaks */
-	private final LinkedList fSentenceBreaks= new LinkedList();
+	private final LinkedList<Integer> fSentenceBreaks= new LinkedList<Integer>();
 
 	/** Does the current word start a sentence? */
 	private boolean fStartsSentence= false;
@@ -271,7 +271,7 @@ public class SpellCheckIterator implements ISpellCheckIterator {
 	/*
 	 * @see java.util.Iterator#next()
 	 */
-	public Object next() {
+	public String next() {
 
 		String token= nextToken();
 		while (token == null && fSuccessor != BreakIterator.DONE)
@@ -299,7 +299,7 @@ public class SpellCheckIterator implements ISpellCheckIterator {
 	 * @return the next sentence break
 	 */
 	protected final int nextSentence() {
-		return ((Integer) fSentenceBreaks.getFirst()).intValue();
+		return fSentenceBreaks.getFirst().intValue();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TaskTagDictionary.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TaskTagDictionary.java
index 5391ed6..b7eb4b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TaskTagDictionary.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TaskTagDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,12 +14,12 @@ package org.eclipse.jdt.internal.ui.text.spelling;
 import java.net.URL;
 import java.util.StringTokenizer;
 
-import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
 import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
 
 import org.eclipse.jdt.core.JavaCore;
 
+import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary;
 
 /**
@@ -32,6 +32,7 @@ public class TaskTagDictionary extends AbstractSpellDictionary implements IPrope
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
 	 */
+	@Override
 	protected final URL getURL() {
 		return null;
 	}
@@ -39,15 +40,10 @@ public class TaskTagDictionary extends AbstractSpellDictionary implements IPrope
 	/*
 	 * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
 	 */
+	@Override
 	protected synchronized boolean load(final URL url) {
-
-		final Plugin plugin= JavaCore.getPlugin();
-		if (plugin != null) {
-
-			plugin.getPluginPreferences().addPropertyChangeListener(this);
-			return updateTaskTags();
-		}
-		return false;
+		JavaPlugin.getJavaCorePluginPreferences().addPropertyChangeListener(this);
+		return updateTaskTags();
 	}
 
 	/*
@@ -62,12 +58,9 @@ public class TaskTagDictionary extends AbstractSpellDictionary implements IPrope
 	/*
 	 * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary#unload()
 	 */
+	@Override
 	public synchronized void unload() {
-
-		final Plugin plugin= JavaCore.getPlugin();
-		if (plugin != null)
-			plugin.getPluginPreferences().removePropertyChangeListener(this);
-
+		JavaPlugin.getJavaCorePluginPreferences().removePropertyChangeListener(this);
 		super.unload();
 	}
 
@@ -96,6 +89,7 @@ public class TaskTagDictionary extends AbstractSpellDictionary implements IPrope
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#stripNonLetters(java.lang.String)
 	 * @since 3.3
 	 */
+	@Override
 	protected String stripNonLetters(String word) {
 		return word;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TextSpellingEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TextSpellingEngine.java
index 7237f11..d021f0f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TextSpellingEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/TextSpellingEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class TextSpellingEngine extends SpellingEngine {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.SpellingEngine#check(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.IRegion[], org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellChecker, org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector, org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void check(IDocument document, IRegion[] regions, ISpellChecker checker, ISpellingProblemCollector collector, IProgressMonitor monitor) {
 		SpellEventListener listener= new SpellEventListener(collector, document);
 		for (int i= 0; i < regions.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordCompletionProposalComputer.java
index 7c66172..1b45de6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,8 @@ import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.DocumentEvent;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
@@ -54,7 +56,7 @@ public final class WordCompletionProposalComputer implements IJavaCompletionProp
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeCompletionProposals(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
 		if (contributes()) {
 			try {
 				IDocument document= context.getDocument();
@@ -77,11 +79,11 @@ public final class WordCompletionProposalComputer implements IJavaCompletionProp
 
 					if (checker != null) {
 
-						final List proposals= new ArrayList(checker.getProposals(candidate, Character.isUpperCase(candidate.charAt(0))));
-						final List result= new ArrayList(proposals.size());
+						final List<RankedWordProposal> proposals= new ArrayList<RankedWordProposal>(checker.getProposals(candidate, Character.isUpperCase(candidate.charAt(0))));
+						final List<ICompletionProposal> result= new ArrayList<ICompletionProposal>(proposals.size());
 
-						for (Iterator it= proposals.iterator(); it.hasNext();) {
-							RankedWordProposal word= (RankedWordProposal) it.next();
+						for (Iterator<RankedWordProposal> it= proposals.iterator(); it.hasNext();) {
+							RankedWordProposal word= it.next();
 							String text= word.getText();
 							if (text.startsWith(candidate))
 								word.setRank(word.getRank() + PREFIX_RANK_SHIFT);
@@ -90,6 +92,7 @@ public final class WordCompletionProposalComputer implements IJavaCompletionProp
 								/*
 								 * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal#validate(org.eclipse.jface.text.IDocument, int, org.eclipse.jface.text.DocumentEvent)
 								 */
+								@Override
 								public boolean validate(IDocument doc, int validate_offset, DocumentEvent event) {
 									return offset == validate_offset;
 								}
@@ -104,7 +107,7 @@ public final class WordCompletionProposalComputer implements IJavaCompletionProp
 				JavaPlugin.log(exception);
 			}
 		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 	private boolean contributes() {
@@ -114,8 +117,8 @@ public final class WordCompletionProposalComputer implements IJavaCompletionProp
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeContextInformation(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
-		return Collections.EMPTY_LIST;
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+		return Collections.emptyList();
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordQuickFixProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordQuickFixProcessor.java
index 889832d..ee6c635 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordQuickFixProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/WordQuickFixProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public class WordQuickFixProcessor implements IQuickFixProcessor {
 		final int threshold= PreferenceConstants.getPreferenceStore().getInt(PreferenceConstants.SPELLING_PROPOSAL_THRESHOLD);
 
 		int size= 0;
-		List proposals= null;
+		List<RankedWordProposal> proposals= null;
 		String[] arguments= null;
 
 		IProblemLocation location= null;
@@ -92,7 +92,7 @@ public class WordQuickFixProcessor implements IQuickFixProcessor {
 							result= new IJavaCompletionProposal[] { new ChangeCaseProposal(arguments, location.getOffset(), location.getLength(), context, engine.getLocale())};
 						else {
 
-							proposals= new ArrayList(checker.getProposals(arguments[0], sentence));
+							proposals= new ArrayList<RankedWordProposal>(checker.getProposals(arguments[0], sentence));
 							size= proposals.size();
 
 							if (threshold > 0 && size > threshold) {
@@ -107,7 +107,7 @@ public class WordQuickFixProcessor implements IQuickFixProcessor {
 
 							for (index= 0; index < size; index++) {
 
-								proposal= (RankedWordProposal)proposals.get(index);
+								proposal= proposals.get(index);
 								result[index]= new WordCorrectionProposal(proposal.getText(), arguments, location.getOffset(), location.getLength(), context, proposal.getRank());
 							}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java
index 1d85c90..a963b32 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 		public ByteArrayWrapper(byte[] byteArray) {
 			this.byteArray= byteArray;
 		}
+		@Override
 		public int hashCode() {
 			final int prime= 31;
 			int result= 1;
@@ -81,6 +82,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 			return result;
 		}
 
+		@Override
 		public boolean equals(Object obj) {
 			if (this == obj)
 				return true;
@@ -121,7 +123,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 	private IPhoneticDistanceAlgorithm fDistanceAlgorithm= new DefaultPhoneticDistanceAlgorithm();
 
 	/** The mapping from phonetic hashes to word lists */
-	private final Map fHashBuckets= new HashMap(getInitialSize(), LOAD_FACTOR);
+	private final Map<ByteArrayWrapper, Object> fHashBuckets= new HashMap<ByteArrayWrapper, Object>(getInitialSize(), LOAD_FACTOR);
 
 	/** The phonetic hash provider */
 	private IPhoneticHashProvider fHashProvider= new DefaultPhoneticHashProvider();
@@ -181,17 +183,17 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 	 *                   Array of close hashes to find the matches
 	 * @return Set of ranked words with bounded distance to the specified word
 	 */
-	protected final Set getCandidates(final String word, final boolean sentence, final ArrayList hashs) {
+	protected final Set<RankedWordProposal> getCandidates(final String word, final boolean sentence, final ArrayList<String> hashs) {
 
 		int distance= 0;
 		String hash= null;
 
 		final StringBuffer buffer= new StringBuffer(BUFFER_CAPACITY);
-		final HashSet result= new HashSet(BUCKET_CAPACITY * hashs.size());
+		final HashSet<RankedWordProposal> result= new HashSet<RankedWordProposal>(BUCKET_CAPACITY * hashs.size());
 
 		for (int index= 0; index < hashs.size(); index++) {
 
-			hash= (String)hashs.get(index);
+			hash= hashs.get(index);
 
 			final Object candidates= getCandidates(hash);
 			if (candidates == null)
@@ -215,13 +217,14 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 				continue;
 			}
 
-			final ArrayList candidateList= (ArrayList)candidates;
+			@SuppressWarnings("unchecked")
+			final ArrayList<byte[]> candidateList= (ArrayList<byte[]>)candidates;
 			int candidateSize= Math.min(500, candidateList.size()); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=195357
 			for (int offset= 0; offset < candidateSize; offset++) {
 
 				String candidate;
 				try {
-					candidate= new String((byte[])candidateList.get(offset), UTF_8);
+					candidate= new String(candidateList.get(offset), UTF_8);
 				} catch (UnsupportedEncodingException e) {
 					JavaPlugin.log(e);
 					return result;
@@ -256,7 +259,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 	 *                   Set of ranked words with smallest possible distance to the
 	 *                   specified word
 	 */
-	protected final void getCandidates(final String word, final boolean sentence, final Set result) {
+	protected final void getCandidates(final String word, final boolean sentence, final Set<RankedWordProposal> result) {
 
 		int distance= 0;
 		int minimum= Integer.MAX_VALUE;
@@ -282,13 +285,14 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 			return;
 		}
 
-		final ArrayList candidateList= (ArrayList)candidates;
-		final ArrayList matches= new ArrayList(candidateList.size());
+		@SuppressWarnings("unchecked")
+		final ArrayList<byte[]> candidateList= (ArrayList<byte[]>)candidates;
+		final ArrayList<RankedWordProposal> matches= new ArrayList<RankedWordProposal>(candidateList.size());
 
 		for (int index= 0; index < candidateList.size(); index++) {
 			String candidate;
 			try {
-				candidate= new String((byte[])candidateList.get(index), UTF_8);
+				candidate= new String(candidateList.get(index), UTF_8);
 			} catch (UnsupportedEncodingException e) {
 				JavaPlugin.log(e);
 				return;
@@ -345,7 +349,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#getProposals(java.lang.String,boolean)
 	 */
-	public Set getProposals(final String word, final boolean sentence) {
+	public Set<RankedWordProposal> getProposals(final String word, final boolean sentence) {
 
 		try {
 
@@ -364,10 +368,10 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 		final String hash= fHashProvider.getHash(word);
 		final char[] mutators= fHashProvider.getMutators();
 
-		final ArrayList neighborhood= new ArrayList((word.length() + 1) * (mutators.length + 2));
+		final ArrayList<String> neighborhood= new ArrayList<String>((word.length() + 1) * (mutators.length + 2));
 		neighborhood.add(hash);
 
-		final Set candidates= getCandidates(word, sentence, neighborhood);
+		final Set<RankedWordProposal> candidates= getCandidates(word, sentence, neighborhood);
 		neighborhood.clear();
 
 		char previous= 0;
@@ -445,7 +449,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 		}
 
 		neighborhood.remove(hash);
-		final Set matches= getCandidates(word, sentence, neighborhood);
+		final Set<RankedWordProposal> matches= getCandidates(word, sentence, neighborhood);
 
 		if (matches.size() == 0 && candidates.size() == 0)
 			getCandidates(word, sentence, candidates);
@@ -488,9 +492,11 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 		if (bucket == null) {
 			fHashBuckets.put(hashBytes, wordBytes);
 		} else if (bucket instanceof ArrayList) {
-			((ArrayList)bucket).add(wordBytes);
+			@SuppressWarnings("unchecked")
+			ArrayList<byte[]> bucketList= (ArrayList<byte[]>)bucket;
+			bucketList.add(wordBytes);
 		} else {
-			ArrayList list= new ArrayList(BUCKET_CAPACITY);
+			ArrayList<Object> list= new ArrayList<Object>(BUCKET_CAPACITY);
 			list.add(bucket);
 			list.add(wordBytes);
 			fHashBuckets.put(hashBytes, list);
@@ -531,7 +537,8 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 				return true;
 			return false;
 		}
-		final ArrayList candidateList= (ArrayList)candidates;
+		@SuppressWarnings("unchecked")
+		final ArrayList<byte[]> candidateList= (ArrayList<byte[]>)candidates;
 		byte[] wordBytes;
 		byte[] lowercaseWordBytes;
 		try {
@@ -542,7 +549,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 			return false;
 		}
 		for (int index= 0; index < candidateList.size(); index++) {
-			byte[] candidate= (byte[])candidateList.get(index);
+			byte[] candidate= candidateList.get(index);
 			if (Arrays.equals(candidate, wordBytes) || Arrays.equals(candidate, lowercaseWordBytes)) {
 				return true;
 			}
@@ -678,11 +685,11 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
 	 * @since 3.3.
 	 */
 	private void compact() {
-		Iterator iter= fHashBuckets.values().iterator();
+		Iterator<Object> iter= fHashBuckets.values().iterator();
 		while (iter.hasNext()) {
 			Object element= iter.next();
 			if (element instanceof ArrayList)
-				((ArrayList)element).trimToSize();
+				((ArrayList<?>)element).trimToSize();
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/DefaultSpellChecker.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/DefaultSpellChecker.java
index 1ef75fb..005a680 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/DefaultSpellChecker.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/DefaultSpellChecker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -124,12 +124,12 @@ public class DefaultSpellChecker implements ISpellChecker {
 	 * The dictionaries to use for spell checking. Synchronized to avoid
 	 * concurrent modifications.
 	 */
-	private final Set fDictionaries= Collections.synchronizedSet(new HashSet());
+	private final Set<ISpellDictionary> fDictionaries= Collections.synchronizedSet(new HashSet<ISpellDictionary>());
 
 	/**
 	 * The words to be ignored. Synchronized to avoid concurrent modifications.
 	 */
-	private final Set fIgnored= Collections.synchronizedSet(new HashSet());
+	private final Set<String> fIgnored= Collections.synchronizedSet(new HashSet<String>());
 
 	/**
 	 * The preference store. Assumes the <code>IPreferenceStore</code>
@@ -172,15 +172,15 @@ public class DefaultSpellChecker implements ISpellChecker {
 		// synchronizing might not be needed here since acceptWords is
 		// a read-only access and only called in the same thread as
 		// the modifying methods add/checkWord (?)
-		Set copy;
+		Set<ISpellDictionary> copy;
 		synchronized (fDictionaries) {
-			copy= new HashSet(fDictionaries);
+			copy= new HashSet<ISpellDictionary>(fDictionaries);
 		}
 
 		ISpellDictionary dictionary= null;
-		for (final Iterator iterator= copy.iterator(); iterator.hasNext();) {
+		for (final Iterator<ISpellDictionary> iterator= copy.iterator(); iterator.hasNext();) {
 
-			dictionary= (ISpellDictionary)iterator.next();
+			dictionary= iterator.next();
 			if (dictionary.acceptsWords())
 				return true;
 		}
@@ -192,14 +192,14 @@ public class DefaultSpellChecker implements ISpellChecker {
 	 */
 	public void addWord(final String word) {
 		// synchronizing is necessary as this is a write access
-		Set copy;
+		Set<ISpellDictionary> copy;
 		synchronized (fDictionaries) {
-			copy= new HashSet(fDictionaries);
+			copy= new HashSet<ISpellDictionary>(fDictionaries);
 		}
 
 		final String addable= word.toLowerCase();
-		for (final Iterator iterator= copy.iterator(); iterator.hasNext();) {
-			ISpellDictionary dictionary= (ISpellDictionary)iterator.next();
+		for (final Iterator<ISpellDictionary> iterator= copy.iterator(); iterator.hasNext();) {
+			ISpellDictionary dictionary= iterator.next();
 			if (dictionary.acceptsWords())
 				dictionary.addWord(addable);
 		}
@@ -230,9 +230,9 @@ public class DefaultSpellChecker implements ISpellChecker {
 
 		iterator.setIgnoreSingleLetters(ignoreSingleLetters);
 
-		Iterator iter= fDictionaries.iterator();
+		Iterator<ISpellDictionary> iter= fDictionaries.iterator();
 		while (iter.hasNext())
-			((ISpellDictionary)iter.next()).setStripNonLetters(ignoreNonLetters);
+			iter.next().setStripNonLetters(ignoreNonLetters);
 
 		String word= null;
 		boolean starts= false;
@@ -240,7 +240,7 @@ public class DefaultSpellChecker implements ISpellChecker {
 
 		while (problemCount <= problemsThreshold && iterator.hasNext()) {
 
-			word= (String)iterator.next();
+			word= iterator.next();
 			if (word != null) {
 
 				// synchronizing is necessary as this is called inside the reconciler
@@ -274,22 +274,22 @@ public class DefaultSpellChecker implements ISpellChecker {
 	/*
 	 * @see org.eclipse.spelling.done.ISpellChecker#getProposals(java.lang.String,boolean)
 	 */
-	public Set getProposals(final String word, final boolean sentence) {
+	public Set<RankedWordProposal> getProposals(final String word, final boolean sentence) {
 
 		// synchronizing might not be needed here since getProposals is
 		// a read-only access and only called in the same thread as
 		// the modifing methods add/removeDictionary (?)
-		Set copy;
+		Set<ISpellDictionary> copy;
 		synchronized (fDictionaries) {
-			copy= new HashSet(fDictionaries);
+			copy= new HashSet<ISpellDictionary>(fDictionaries);
 		}
 
 		ISpellDictionary dictionary= null;
-		final HashSet proposals= new HashSet();
+		final HashSet<RankedWordProposal> proposals= new HashSet<RankedWordProposal>();
 
-		for (final Iterator iterator= copy.iterator(); iterator.hasNext();) {
+		for (final Iterator<ISpellDictionary> iterator= copy.iterator(); iterator.hasNext();) {
 
-			dictionary= (ISpellDictionary)iterator.next();
+			dictionary= iterator.next();
 			proposals.addAll(dictionary.getProposals(word, sentence));
 		}
 		return proposals;
@@ -308,18 +308,18 @@ public class DefaultSpellChecker implements ISpellChecker {
 	 */
 	public final boolean isCorrect(final String word) {
 		// synchronizing is necessary as this is called from execute
-		Set copy;
+		Set<ISpellDictionary> copy;
 		synchronized (fDictionaries) {
-			copy= new HashSet(fDictionaries);
+			copy= new HashSet<ISpellDictionary>(fDictionaries);
 		}
 
 		if (fIgnored.contains(word.toLowerCase()))
 			return true;
 
 		ISpellDictionary dictionary= null;
-		for (final Iterator iterator= copy.iterator(); iterator.hasNext();) {
+		for (final Iterator<ISpellDictionary> iterator= copy.iterator(); iterator.hasNext();) {
 
-			dictionary= (ISpellDictionary)iterator.next();
+			dictionary= iterator.next();
 			if (dictionary.isCorrect(word))
 				return true;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellCheckIterator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellCheckIterator.java
index ff4c628..7d2e3e8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellCheckIterator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellCheckIterator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@ import java.util.Iterator;
  *
  * @since 3.0
  */
-public interface ISpellCheckIterator extends Iterator {
+public interface ISpellCheckIterator extends Iterator<String> {
 
 	/**
 	 * Returns the begin index (inclusive) of the current word.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellChecker.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellChecker.java
index e1b45b9..384147f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellChecker.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellChecker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,7 +71,7 @@ public interface ISpellChecker {
 	 *                   sentence, <code>false</code> otherwise
 	 * @return Set of ranked proposals for the word
 	 */
-	Set getProposals(String word, boolean sentence);
+	Set<RankedWordProposal> getProposals(String word, boolean sentence);
 
 	/**
 	 * Ignores the specified word until calling <code>checkWord(String)</code>.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellDictionary.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellDictionary.java
index 63e8347..597c6e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellDictionary.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ public interface ISpellDictionary {
 	 *                   <code>false</code> otherwise
 	 * @return Array of ranked word proposals
 	 */
-	public Set getProposals(String word, boolean sentence);
+	public Set<RankedWordProposal> getProposals(String word, boolean sentence);
 
 	/**
 	 * Is the specified word correctly spelled?
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellEvent.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellEvent.java
index afd6f3d..64dc3db 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellEvent.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/ISpellEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ public interface ISpellEvent {
 	 *
 	 * @return Array of proposals for the word
 	 */
-	public Set getProposals();
+	public Set<RankedWordProposal> getProposals();
 
 	/**
 	 * Returns the incorrectly spelled word.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/LocaleSensitiveSpellDictionary.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/LocaleSensitiveSpellDictionary.java
index 43e35ef..ca8f136 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/LocaleSensitiveSpellDictionary.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/LocaleSensitiveSpellDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ public class LocaleSensitiveSpellDictionary extends AbstractSpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getURL()
 	 */
+	@Override
 	protected final URL getURL() throws MalformedURLException {
 		return new URL(fLocation, fLocale.toString() + ".dictionary");  //$NON-NLS-1$
 	}
@@ -61,6 +62,7 @@ public class LocaleSensitiveSpellDictionary extends AbstractSpellDictionary {
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getInitialSize()
 	 * @since 3.6
 	 */
+	@Override
 	protected int getInitialSize() {
 		return 32 * 1024;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java
index 602cbc9..c618fc0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class PersistentSpellDictionary extends AbstractSpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#acceptsWords()
 	 */
+	@Override
 	public boolean acceptsWords() {
 		return true;
 	}
@@ -49,6 +50,7 @@ public class PersistentSpellDictionary extends AbstractSpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#addWord(java.lang.String)
 	 */
+	@Override
 	public void addWord(final String word) {
 		if (isCorrect(word))
 			return;
@@ -91,6 +93,7 @@ public class PersistentSpellDictionary extends AbstractSpellDictionary {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getURL()
 	 */
+	@Override
 	protected final URL getURL() {
 		return fLocation;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/RankedWordProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/RankedWordProposal.java
index 506b2e7..f7f85df 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/RankedWordProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/RankedWordProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@ package org.eclipse.jdt.internal.ui.text.spelling.engine;
  *
  * @since 3.0
  */
-public class RankedWordProposal implements Comparable {
+public class RankedWordProposal implements Comparable<RankedWordProposal> {
 
 	/** The word rank */
 	private int fRank;
@@ -40,9 +40,8 @@ public class RankedWordProposal implements Comparable {
 	/*
 	 * @see java.lang.Comparable#compareTo(java.lang.Object)
 	 */
-	public final int compareTo(Object object) {
+	public final int compareTo(RankedWordProposal word) {
 
-		final RankedWordProposal word= (RankedWordProposal)object;
 		final int rank= word.getRank();
 
 		if (fRank < rank)
@@ -57,6 +56,7 @@ public class RankedWordProposal implements Comparable {
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
+	@Override
 	public final boolean equals(Object object) {
 
 		if (object instanceof RankedWordProposal)
@@ -86,6 +86,7 @@ public class RankedWordProposal implements Comparable {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public final int hashCode() {
 		return fText.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/SpellEvent.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/SpellEvent.java
index 691e746..f0dc2ce 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/SpellEvent.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/engine/SpellEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,7 +82,7 @@ public class SpellEvent implements ISpellEvent {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent#getProposals()
 	 */
-	public final Set getProposals() {
+	public final Set<RankedWordProposal> getProposals() {
 		return fChecker.getProposals(fWord, fSentence);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariable.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariable.java
index b221b1c..d6821bd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariable.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@ import org.eclipse.jface.text.templates.TemplateVariableType;
 public class MultiVariable extends TemplateVariable {
 	private static final Object DEFAULT_KEY= new Object();
 
-	private final Map fValueMap= new HashMap(); // <Object, Object[]>
+	private final Map<Object, Object[]> fValueMap= new HashMap<Object, Object[]>();
 	/** The master key defining the active set. */
 	private Object fKey;
 	/** The currently active object. */
@@ -82,6 +82,7 @@ public class MultiVariable extends TemplateVariable {
 	/*
 	 * @see org.eclipse.jface.text.templates.TemplateVariable#setValues(java.lang.String[])
 	 */
+	@Override
 	public void setValues(String[] values) {
 		setChoices(values);
 	}
@@ -94,6 +95,7 @@ public class MultiVariable extends TemplateVariable {
 	 * @see org.eclipse.jface.text.templates.TemplateVariable#getDefaultValue()
 	 * @since 3.3
 	 */
+	@Override
 	public String getDefaultValue() {
 		return toString(fCurrentChoice);
 	}
@@ -105,6 +107,7 @@ public class MultiVariable extends TemplateVariable {
 	/*
 	 * @see org.eclipse.jface.text.templates.TemplateVariable#getValues()
 	 */
+	@Override
 	public String[] getValues() {
 		Object[] values= getChoices();
 		String[] result= new String[values.length];
@@ -125,10 +128,10 @@ public class MultiVariable extends TemplateVariable {
 	 *         <code>null</code> if the set is not defined.
 	 */
 	public Object[] getChoices(Object key) {
-		return (Object[]) fValueMap.get(key);
+		return fValueMap.get(key);
 	}
 
 	public Object[][] getAllChoices() {
-		return (Object[][]) fValueMap.values().toArray(new Object[fValueMap.size()][]);
+		return fValueMap.values().toArray(new Object[fValueMap.size()][]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariableGuess.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariableGuess.java
index 0d54d03..da2b119 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariableGuess.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/MultiVariableGuess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -183,15 +183,15 @@ public class MultiVariableGuess {
 		}
 	}
 
-	private final Map fDependencies= new HashMap();
-	private final Map fBackwardDeps= new HashMap();
-	private final Map fPositions= new HashMap();
+	private final Map<MultiVariable, Set<MultiVariable>> fDependencies= new HashMap<MultiVariable, Set<MultiVariable>>();
+	private final Map<MultiVariable, MultiVariable> fBackwardDeps= new HashMap<MultiVariable, MultiVariable>();
+	private final Map<MultiVariable, VariablePosition> fPositions= new HashMap<MultiVariable, VariablePosition>();
 
 	public MultiVariableGuess() {
 	}
 
 	public ICompletionProposal[] getProposals(final MultiVariable variable, int offset, int length) {
-		MultiVariable master= (MultiVariable) fBackwardDeps.get(variable);
+		MultiVariable master= fBackwardDeps.get(variable);
 		Object[] choices;
 		if (master == null)
 			choices= variable.getChoices();
@@ -206,6 +206,7 @@ public class MultiVariableGuess {
 			for (int i= 0; i < ret.length; i++) {
 				final Object choice= choices[i];
 				ret[i]= new Proposal(variable.toString(choice), offset, length, offset + length) {
+					@Override
 					public void apply(IDocument document) {
 						super.apply(document);
 						Object oldChoice= variable.getCurrentChoice();
@@ -232,10 +233,10 @@ public class MultiVariableGuess {
 	private void updateSlaves(MultiVariable variable, IDocument document, Object oldChoice) {
 		Object choice= variable.getCurrentChoice();
 		if (!oldChoice.equals(choice)) {
-			Set slaves= (Set) fDependencies.get(variable);
-			for (Iterator it= slaves.iterator(); it.hasNext();) {
-				MultiVariable slave= (MultiVariable) it.next();
-				VariablePosition pos= (VariablePosition) fPositions.get(slave);
+			Set<MultiVariable> slaves= fDependencies.get(variable);
+			for (Iterator<MultiVariable> it= slaves.iterator(); it.hasNext();) {
+				MultiVariable slave= it.next();
+				VariablePosition pos= fPositions.get(slave);
 
 				Object slavesOldChoice= slave.getCurrentChoice();
 				slave.setKey(choice); // resets the current choice
@@ -274,9 +275,9 @@ public class MultiVariableGuess {
 				throw new IllegalArgumentException("cycle detected"); //$NON-NLS-1$
 		}
 
-		Set slaves= (Set) fDependencies.get(master);
+		Set<MultiVariable> slaves= fDependencies.get(master);
 		if (slaves == null) {
-			slaves= new HashSet();
+			slaves= new HashSet<MultiVariable>();
 			fDependencies.put(master, slaves);
 		}
 		fBackwardDeps.put(slave, master);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java
index 19c2e3f..730124c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@ import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Statement;
+import org.eclipse.jdt.core.dom.VariableDeclaration;
 
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
@@ -74,12 +75,14 @@ public class SurroundWithTemplateProposal extends TemplateProposal {
 			fCurrentProject= context.getCompilationUnit().getJavaProject();
 		}
 
-		protected List getVariableDeclarationReadsInside(Statement[] selectedNodes, int maxVariableId) {
+		@Override
+		protected List<VariableDeclaration> getVariableDeclarationReadsInside(Statement[] selectedNodes, int maxVariableId) {
 			if (isNewContext())
 				return super.getVariableDeclarationReadsInside(selectedNodes, maxVariableId);
-			return new ArrayList();
+			return new ArrayList<VariableDeclaration>();
 		}
 
+		@Override
 		protected boolean isNewContext() {
 
 			final String templateVariableRegEx= "\\$\\{[^\\}]*\\}"; //$NON-NLS-1$
@@ -110,6 +113,7 @@ public class SurroundWithTemplateProposal extends TemplateProposal {
 
 			final int lineSelectionPosition= insertionPosition;
 			root.accept(new GenericVisitor() {
+				@Override
 				public void endVisit(Block node) {
 					super.endVisit(node);
 					if (fTemplateNode == null && node.getStartPosition() <= lineSelectionPosition && node.getLength() + node.getStartPosition() >= lineSelectionPosition) {
@@ -191,6 +195,7 @@ public class SurroundWithTemplateProposal extends TemplateProposal {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.template.contentassist.TemplateProposal#apply(org.eclipse.jface.text.ITextViewer, char, int, int)
 	 */
+	@Override
 	public void apply(ITextViewer viewer, char trigger, int stateMask, int offset) {
 		try {
 			setRedraw(viewer, false);
@@ -225,6 +230,7 @@ public class SurroundWithTemplateProposal extends TemplateProposal {
 		}
     }
 
+	@Override
 	public Point getSelection(IDocument document) {
 		if (fSelectedRegion != null) {
 			return new Point(fSelectedRegion.getOffset(), fSelectedRegion.getLength());
@@ -239,7 +245,7 @@ public class SurroundWithTemplateProposal extends TemplateProposal {
 		AssistContext invocationContext= new AssistContext(fCompilationUnit, fContext.getStart(), fContext.getEnd() - fContext.getStart());
 
 		SurroundWithTemplate surroundWith= new SurroundWithTemplate(invocationContext, fSelectedStatements, fTemplate);
-		Map options= fCompilationUnit.getJavaProject().getOptions(true);
+		Map<String, String> options= fCompilationUnit.getJavaProject().getOptions(true);
 
 		surroundWith.getRewrite().rewriteAST(document, options).apply(document);
 
@@ -268,6 +274,7 @@ public class SurroundWithTemplateProposal extends TemplateProposal {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean validate(IDocument document, int offset, DocumentEvent event) {
 		return false;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java
index 11018b5..2c3f326 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,9 +49,9 @@ public class TemplateEngine {
 	/** The context type. */
 	private TemplateContextType fContextType;
 	/** The result proposals. */
-	private ArrayList fProposals= new ArrayList();
+	private ArrayList<TemplateProposal> fProposals= new ArrayList<TemplateProposal>();
 	/** Positions created on the key documents to remove in reset. */
-	private final Map fPositions= new HashMap();
+	private final Map<IDocument, Position> fPositions= new HashMap<IDocument, Position>();
 
 	/**
 	 * Creates the template engine for the given <code>contextType</code>.
@@ -71,10 +71,10 @@ public class TemplateEngine {
 	 */
 	public void reset() {
 		fProposals.clear();
-		for (Iterator it= fPositions.entrySet().iterator(); it.hasNext();) {
-			Entry entry= (Entry) it.next();
-			IDocument doc= (IDocument) entry.getKey();
-			Position position= (Position) entry.getValue();
+		for (Iterator<Entry<IDocument, Position>> it= fPositions.entrySet().iterator(); it.hasNext();) {
+			Entry<IDocument, Position> entry= it.next();
+			IDocument doc= entry.getKey();
+			Position position= entry.getValue();
 			doc.removePosition(position);
 		}
 		fPositions.clear();
@@ -86,7 +86,7 @@ public class TemplateEngine {
 	 * @return the template proposals
 	 */
 	public TemplateProposal[] getResults() {
-		return (TemplateProposal[]) fProposals.toArray(new TemplateProposal[fProposals.size()]);
+		return fProposals.toArray(new TemplateProposal[fProposals.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/VariablePosition.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/VariablePosition.java
index 159a02b..4c7cac9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/VariablePosition.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/VariablePosition.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class VariablePosition extends ProposalPosition {
 	/*
 	 * @see org.eclipse.jface.text.link.ProposalPosition#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object o) {
 		if (o instanceof VariablePosition && super.equals(o)) {
 			return fGuess.equals(((VariablePosition) o).fGuess);
@@ -52,6 +53,7 @@ public class VariablePosition extends ProposalPosition {
 	/*
 	 * @see org.eclipse.jface.text.link.ProposalPosition#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return super.hashCode() | fGuess.hashCode();
 	}
@@ -59,6 +61,7 @@ public class VariablePosition extends ProposalPosition {
 	/*
 	 * @see org.eclipse.jface.text.link.ProposalPosition#getChoices()
 	 */
+	@Override
 	public ICompletionProposal[] getChoices() {
 		return fGuess.getProposals(fVariable, offset, length);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/preferences/TemplateVariableProcessor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/preferences/TemplateVariableProcessor.java
index 87b93cd..65daca7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/preferences/TemplateVariableProcessor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/preferences/TemplateVariableProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,11 +28,8 @@ import org.eclipse.jface.text.templates.TemplateVariableResolver;
 
 public class TemplateVariableProcessor implements IContentAssistProcessor {
 
-	private static Comparator fgTemplateVariableProposalComparator= new Comparator() {
-		public int compare(Object arg0, Object arg1) {
-			TemplateVariableProposal proposal0= (TemplateVariableProposal) arg0;
-			TemplateVariableProposal proposal1= (TemplateVariableProposal) arg1;
-
+	private static Comparator<TemplateVariableProposal> fgTemplateVariableProposalComparator= new Comparator<TemplateVariableProposal>() {
+		public int compare(TemplateVariableProposal proposal0, TemplateVariableProposal proposal1) {
 			return proposal0.getDisplayString().compareTo(proposal1.getDisplayString());
 		}
 	};
@@ -67,7 +64,7 @@ public class TemplateVariableProcessor implements IContentAssistProcessor {
 		if (fContextType == null)
 			return null;
 
-		List proposals= new ArrayList();
+		List<TemplateVariableProposal> proposals= new ArrayList<TemplateVariableProposal>();
 
 		String text= viewer.getDocument().get();
 		int start= getStart(text, documentOffset);
@@ -95,15 +92,15 @@ public class TemplateVariableProcessor implements IContentAssistProcessor {
 
 		int length= end - offset;
 
-		for (Iterator iterator= fContextType.resolvers(); iterator.hasNext(); ) {
-			TemplateVariableResolver variable= (TemplateVariableResolver) iterator.next();
+		for (Iterator<TemplateVariableResolver> iterator= fContextType.resolvers(); iterator.hasNext(); ) {
+			TemplateVariableResolver variable= iterator.next();
 
 			if (variable.getType().startsWith(prefix))
 				proposals.add(new TemplateVariableProposal(variable, offset, length, viewer, includeBrace));
 		}
 
 		Collections.sort(proposals, fgTemplateVariableProposalComparator);
-		return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
+		return proposals.toArray(new ICompletionProposal[proposals.size()]);
 	}
 
 	/* Guesses the start position of the completion */
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/AbstractHierarchyViewerSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/AbstractHierarchyViewerSorter.java
index 5bf7f62..f55ea38 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/AbstractHierarchyViewerSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/AbstractHierarchyViewerSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public abstract class AbstractHierarchyViewerSorter extends ViewerComparator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object)
 	 */
+	@Override
 	public int category(Object element) {
 		if (element instanceof IType) {
 			IType type= (IType) element;
@@ -78,6 +79,7 @@ public abstract class AbstractHierarchyViewerSorter extends ViewerComparator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerSorter#compare(null, null, null)
 	 */
+	@Override
 	public int compare(Viewer viewer, Object e1, Object e2) {
 		if (!isSortAlphabetically() && !isSortByDefiningType()) {
 			return fSourcePositonSorter.compare(viewer, e1, e2);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/EnableMemberFilterAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/EnableMemberFilterAction.java
index 65228ec..8467979 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/EnableMemberFilterAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/EnableMemberFilterAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class EnableMemberFilterAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		BusyIndicator.showWhile(fView.getSite().getShell().getDisplay(), new Runnable() {
 			public void run() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnSelectionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnSelectionAction.java
index 12b4267..5eb40ff 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnSelectionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnSelectionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class FocusOnSelectionAction extends Action {
 	/*
 	 * @see Action#run
 	 */
+	@Override
 	public void run() {
 		Object element= SelectionUtil.getSingleElement(getSelection());
 		if (element instanceof IType) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnTypeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnTypeAction.java
index 232c58d..f7df1d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnTypeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/FocusOnTypeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class FocusOnTypeAction extends Action {
 	/*
 	 * @see Action#run
 	 */
+	@Override
 	public void run() {
 		Shell parent= fViewPart.getSite().getShell();
 		FilteredTypesSelectionDialog dialog= new FilteredTypesSelectionDialog(parent, false,
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java
index beedbc0..3c6a75b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 	private KeyAdapter getKeyAdapter() {
 		if (fKeyAdapter == null) {
 			fKeyAdapter= new KeyAdapter() {
+				@Override
 				public void keyPressed(KeyEvent e) {
 					int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(e);
 					KeySequence keySequence = KeySequence.getInstance(SWTKeySupport.convertAcceleratorToKeyStroke(accelerator));
@@ -107,10 +108,12 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected boolean hasHeader() {
 		return true;
 	}
 
+	@Override
 	protected Text createFilterText(Composite parent) {
 		// text set later
 		Text text= super.createFilterText(parent);
@@ -122,6 +125,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.text.JavaOutlineInformationControl#createTreeViewer(org.eclipse.swt.widgets.Composite, int)
 	 */
+	@Override
 	protected TreeViewer createTreeViewer(Composite parent, int style) {
 		Tree tree= new Tree(parent, SWT.SINGLE | (style & ~SWT.MULTI));
 		GridData gd= new GridData(GridData.FILL_BOTH);
@@ -130,6 +134,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 
 		TreeViewer treeViewer= new TreeViewer(tree);
 		treeViewer.addFilter(new ViewerFilter() {
+			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
 				return element instanceof IType;
 			}
@@ -142,12 +147,13 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 
 		fLabelProvider= new HierarchyLabelProvider(fLifeCycle);
 		fLabelProvider.setFilter(new ViewerFilter() {
+			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
 				return hasFocusMethod((IType) element);
 			}
 		});
 
-		fLabelProvider.setTextFlags(JavaElementLabels.ALL_DEFAULT | JavaElementLabels.T_POST_QUALIFIED);
+		fLabelProvider.setTextFlags(JavaElementLabels.ALL_DEFAULT | JavaElementLabels.T_POST_QUALIFIED | JavaElementLabels.P_COMPRESSED);
 		fLabelProvider.addLabelDecorator(new ProblemsLabelDecorator(null));
 		treeViewer.setLabelProvider(new ColoringLabelProvider(fLabelProvider));
 
@@ -183,6 +189,10 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 
 	private IMethod findMethod(IMethod filterMethod, IType typeToFindIn) throws JavaModelException {
 		IType filterType= filterMethod.getDeclaringType();
+		if (filterType.equals(typeToFindIn)) {
+			return filterMethod;
+		}
+		
 		ITypeHierarchy hierarchy= fLifeCycle.getHierarchy();
 
 		boolean filterOverrides= JavaModelUtil.isSuperType(hierarchy, typeToFindIn, filterType);
@@ -202,6 +212,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setInput(Object information) {
 		if (!(information instanceof IJavaElement)) {
 			inputChanged(null, null);
@@ -211,8 +222,10 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 		IMethod locked= null;
 		try {
 			IJavaElement elem= (IJavaElement) information;
-			if (elem.getElementType() == IJavaElement.LOCAL_VARIABLE) {
-				elem= elem.getParent();
+			switch (elem.getElementType()) {
+				case IJavaElement.LOCAL_VARIABLE :
+				case IJavaElement.TYPE_PARAMETER :
+					elem= elem.getParent();
 			}
 
 			switch (elem.getElementType()) {
@@ -294,6 +307,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 		inputChanged(fLifeCycle, selection);
 	}
 
+	@Override
 	protected void stringMatcherUpdated() {
 		if (fDoFilter) {
 			super.stringMatcherUpdated(); // refresh the view
@@ -346,6 +360,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 		}
 	}
 
+	@Override
 	protected String getStatusFieldText() {
 		KeySequence[] sequences= getInvokingCommandKeySequences();
 		String keyName= ""; //$NON-NLS-1$
@@ -362,6 +377,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractInformationControl#getId()
 	 */
+	@Override
 	protected String getId() {
 		return "org.eclipse.jdt.internal.ui.typehierarchy.QuickHierarchy"; //$NON-NLS-1$
 	}
@@ -369,6 +385,7 @@ public class HierarchyInformationControl extends AbstractInformationControl {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object getSelectedElement() {
 		Object selectedElement= super.getSelectedElement();
 		if (selectedElement instanceof IType && fFocus != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java
index 3d0d9d6..c148be3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,15 +10,15 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.typehierarchy;
 
+import java.util.Arrays;
+import java.util.List;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Display;
 
 import org.eclipse.jface.preference.JFacePreferences;
-import org.eclipse.jface.resource.CompositeImageDescriptor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.viewers.ViewerFilter;
@@ -36,6 +36,7 @@ import org.eclipse.jdt.ui.JavaElementLabels;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.FocusDescriptor;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
 
 /**
@@ -44,36 +45,6 @@ import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
   */
 public class HierarchyLabelProvider extends AppearanceAwareLabelProvider {
 
-	private static class FocusDescriptor extends CompositeImageDescriptor {
-		private ImageDescriptor fBase;
-		public FocusDescriptor(ImageDescriptor base) {
-			fBase= base;
-		}
-		protected void drawCompositeImage(int width, int height) {
-			drawImage(getImageData(fBase), 0, 0);
-			drawImage(getImageData(JavaPluginImages.DESC_OVR_FOCUS), 0, 0);
-		}
-
-		private ImageData getImageData(ImageDescriptor descriptor) {
-			ImageData data= descriptor.getImageData(); // see bug 51965: getImageData can return null
-			if (data == null) {
-				data= DEFAULT_IMAGE_DATA;
-				JavaPlugin.logErrorMessage("Image data not available: " + descriptor.toString()); //$NON-NLS-1$
-			}
-			return data;
-		}
-
-		protected Point getSize() {
-			return JavaElementImageProvider.BIG_SIZE;
-		}
-		public int hashCode() {
-			return fBase.hashCode();
-		}
-		public boolean equals(Object object) {
-			return object != null && FocusDescriptor.class.equals(object.getClass()) && ((FocusDescriptor)object).fBase.equals(fBase);
-		}
-	}
-
 	private Color fSpecialColor;
 
 	private ViewerFilter fFilter;
@@ -81,7 +52,7 @@ public class HierarchyLabelProvider extends AppearanceAwareLabelProvider {
 	private TypeHierarchyLifeCycle fHierarchy;
 
 	public HierarchyLabelProvider(TypeHierarchyLifeCycle lifeCycle) {
-		super(DEFAULT_TEXTFLAGS | JavaElementLabels.USE_RESOLVED, DEFAULT_IMAGEFLAGS);
+		super(DEFAULT_TEXTFLAGS | JavaElementLabels.USE_RESOLVED | JavaElementLabels.P_COMPRESSED, DEFAULT_IMAGEFLAGS);
 
 		fHierarchy= lifeCycle;
 		fFilter= null;
@@ -101,23 +72,25 @@ public class HierarchyLabelProvider extends AppearanceAwareLabelProvider {
 		fFilter= filter;
 	}
 
-	protected boolean isDifferentScope(IType type) {
+	protected boolean isInDifferentHierarchyScope(IType type) {
 		if (fFilter != null && !fFilter.select(null, null, type)) {
 			return true;
 		}
-
-		IJavaElement input= fHierarchy.getInputElement();
-		if (input == null || input.getElementType() == IJavaElement.TYPE) {
+		IJavaElement[] input= fHierarchy.getInputElements();
+		if (input == null)
 			return false;
-		}
-
-		IJavaElement parent= type.getAncestor(input.getElementType());
-		if (input.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
-			if (parent == null || parent.getElementName().equals(input.getElementName())) {
+		for (int i= 0; i < input.length; i++) {
+			if (input[i] == null || input[i].getElementType() == IJavaElement.TYPE) {
+				return false;
+			}
+			IJavaElement parent= type.getAncestor(input[i].getElementType());
+			if (input[i].getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
+				if (parent == null || parent.getElementName().equals(input[i].getElementName())) {
+					return false;
+				}
+			} else if (input[i].equals(parent)) {
 				return false;
 			}
-		} else if (input.equals(parent)) {
-			return false;
 		}
 		return true;
 	}
@@ -125,12 +98,14 @@ public class HierarchyLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see ILabelProvider#getImage
 	 */
+	@Override
 	public Image getImage(Object element) {
 		Image result= null;
 		if (element instanceof IType) {
 			ImageDescriptor desc= getTypeImageDescriptor((IType) element);
 			if (desc != null) {
-				if (element.equals(fHierarchy.getInputElement())) {
+				List<IJavaElement> inputElements= Arrays.asList(fHierarchy.getInputElements());
+				if (inputElements.contains(element)) {
 					desc= new FocusDescriptor(desc);
 				}
 				result= JavaPlugin.getImageDescriptorRegistry().get(desc);
@@ -169,7 +144,7 @@ public class HierarchyLabelProvider extends AppearanceAwareLabelProvider {
 			}
 		}
 
-		ImageDescriptor desc= JavaElementImageProvider.getTypeImageDescriptor(isInner, isInInterfaceOrAnnotation, flags, isDifferentScope(type));
+		ImageDescriptor desc= JavaElementImageProvider.getTypeImageDescriptor(isInner, isInInterfaceOrAnnotation, flags, isInDifferentHierarchyScope(type));
 
 		int adornmentFlags= 0;
 		if (Flags.isFinal(flags)) {
@@ -191,13 +166,14 @@ public class HierarchyLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
 	 */
+	@Override
 	public Color getForeground(Object element) {
 		if (element instanceof IMethod) {
 			if (fSpecialColor == null) {
 				fSpecialColor= Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE);
 			}
 			return fSpecialColor;
-		} else if (element instanceof IType && isDifferentScope((IType) element)) {
+		} else if (element instanceof IType && isInDifferentHierarchyScope((IType) element)) {
 			return JFaceResources.getColorRegistry().get(JFacePreferences.QUALIFIER_COLOR);
 		}
 		return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyViewerSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyViewerSorter.java
index 448412d..1a55dd2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyViewerSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyViewerSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class HierarchyViewerSorter extends AbstractHierarchyViewerSorter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#getTypeKind(org.eclipse.jdt.core.IType)
 	 */
+	@Override
 	protected int getTypeFlags(IType type) {
 		ITypeHierarchy hierarchy= getHierarchy(type);
 		if (hierarchy != null) {
@@ -43,6 +44,7 @@ public class HierarchyViewerSorter extends AbstractHierarchyViewerSorter {
 	 * (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#isSortByDefiningType()
 	 */
+	@Override
 	public boolean isSortByDefiningType() {
 		return fSortByDefiningType;
 	}
@@ -50,6 +52,7 @@ public class HierarchyViewerSorter extends AbstractHierarchyViewerSorter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#isSortAlphabetically()
 	 */
+	@Override
 	public boolean isSortAlphabetically() {
 		return true;
 	}
@@ -57,6 +60,7 @@ public class HierarchyViewerSorter extends AbstractHierarchyViewerSorter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#getHierarchy(org.eclipse.jdt.core.IType)
 	 */
+	@Override
 	protected ITypeHierarchy getHierarchy(IType type) {
 		return fHierarchy.getHierarchy(); // hierarchy contains all types shown
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryAction.java
index 86179c7..3065be3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,11 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.typehierarchy;
 
+import org.eclipse.core.runtime.Assert;
+
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.StyledString;
 
 import org.eclipse.ui.PlatformUI;
 
@@ -30,16 +33,16 @@ import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
 public class HistoryAction extends Action {
 
 	private TypeHierarchyViewPart fViewPart;
-	private IJavaElement fElement;
+	private IJavaElement[] fElements;
 
-	public HistoryAction(TypeHierarchyViewPart viewPart, IJavaElement element) {
+	public HistoryAction(TypeHierarchyViewPart viewPart, IJavaElement[] elements) {
         super("", AS_RADIO_BUTTON); //$NON-NLS-1$
 		fViewPart= viewPart;
-		fElement= element;
+		fElements= elements;
 
-		String elementName= JavaElementLabels.getElementLabel(element, JavaElementLabels.ALL_POST_QUALIFIED | JavaElementLabels.ALL_DEFAULT);
+		String elementName= getElementLabel(elements);
 		setText(elementName);
-		setImageDescriptor(getImageDescriptor(element));
+		setImageDescriptor(getImageDescriptor(elements[0]));
 
 		setDescription(Messages.format(TypeHierarchyMessages.HistoryAction_description, elementName));
 		setToolTipText(Messages.format(TypeHierarchyMessages.HistoryAction_tooltip, elementName));
@@ -56,8 +59,56 @@ public class HistoryAction extends Action {
 	/*
 	 * @see Action#run()
 	 */
+	@Override
 	public void run() {
-		fViewPart.gotoHistoryEntry(fElement);
+		fViewPart.gotoHistoryEntry(fElements);
+	}
+
+	/**
+	 * Fetches the label for the java element.
+	 * 
+	 * @param element the java element
+	 * @return the label for the java element
+	 * @since 3.7
+	 */
+	static StyledString getSingleElementLabel(IJavaElement element) {
+		return JavaElementLabels.getStyledElementLabel(element, JavaElementLabels.ALL_POST_QUALIFIED | JavaElementLabels.COLORIZE | JavaElementLabels.P_COMPRESSED);
+	}
+
+	/**
+	 * Fetches the label for all the java elements.
+	 * 
+	 * @param elements the java elements
+	 * @return the label for all the java elements
+	 * @since 3.7
+	 */
+	static String getElementLabel(IJavaElement[] elements) {
+		switch (elements.length) {
+			case 0:
+				Assert.isTrue(false);
+				return null;
+
+			case 1:
+				return Messages.format(TypeHierarchyMessages.HistoryAction_inputElements_1,
+						new String[] { getShortLabel(elements[0]) });
+			case 2:
+				return Messages.format(TypeHierarchyMessages.HistoryAction_inputElements_2,
+						new String[] { getShortLabel(elements[0]), getShortLabel(elements[1]) });
+			default:
+				return Messages.format(TypeHierarchyMessages.HistoryAction_inputElements_more,
+						new String[] { getShortLabel(elements[0]), getShortLabel(elements[1]), getShortLabel(elements[2]) });
+		}
+	}
+
+	/**
+	 * Fetches the short label for the java element.
+	 * 
+	 * @param element the java element
+	 * @return the short label for the java element
+	 * @since 3.7
+	 */
+	static String getShortLabel(IJavaElement element) {
+		return JavaElementLabels.getElementLabel(element, JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_POST_QUALIFIED | JavaElementLabels.P_COMPRESSED);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryDropDownAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryDropDownAction.java
index e00b8f6..b49f6e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryDropDownAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryDropDownAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,9 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.typehierarchy;
 
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
@@ -37,6 +40,7 @@ public class HistoryDropDownAction extends Action implements IMenuCreator {
 			fView= view;
 		}
 
+		@Override
 		public void run() {
 			fView.setHistoryEntries(new IJavaElement[0]);
 			fView.setInputElement(null);
@@ -74,7 +78,7 @@ public class HistoryDropDownAction extends Action implements IMenuCreator {
 			fMenu.dispose();
 		}
 		fMenu= new Menu(parent);
-		IJavaElement[] elements= fHierarchyView.getHistoryEntries();
+		List<IJavaElement[]> elements= fHierarchyView.getHistoryEntries();
 		addEntries(fMenu, elements);
 		new MenuItem(fMenu, SWT.SEPARATOR);
 		addActionToMenu(fMenu, new HistoryListAction(fHierarchyView));
@@ -82,18 +86,19 @@ public class HistoryDropDownAction extends Action implements IMenuCreator {
 		return fMenu;
 	}
 
-	private boolean addEntries(Menu menu, IJavaElement[] elements) {
+	private boolean addEntries(Menu menu, List<IJavaElement[]> elements) {
 		boolean checked= false;
-
-		int min= Math.min(elements.length, RESULTS_IN_DROP_DOWN);
-		for (int i= 0; i < min; i++) {
-			HistoryAction action= new HistoryAction(fHierarchyView, elements[i]);
-			action.setChecked(elements[i].equals(fHierarchyView.getInputElement()));
+		int count= 0;
+		int min= Math.min(elements.size(), RESULTS_IN_DROP_DOWN);
+		for (Iterator<IJavaElement[]> iterator= elements.iterator(); count < min; count++) {
+			IJavaElement[] entries= iterator.next();
+			if (entries == null || entries.length == 0)
+				continue;
+			HistoryAction action= new HistoryAction(fHierarchyView, entries);
+			action.setChecked(entries.equals(fHierarchyView.getInputElements()));
 			checked= checked || action.isChecked();
 			addActionToMenu(menu, action);
 		}
-
-
 		return checked;
 	}
 
@@ -103,6 +108,7 @@ public class HistoryDropDownAction extends Action implements IMenuCreator {
 		item.fill(parent, -1);
 	}
 
+	@Override
 	public void run() {
 		(new HistoryListAction(fHierarchyView)).run();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryListAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryListAction.java
index 9804efe..89db5b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryListAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HistoryListAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -25,6 +26,7 @@ import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.StatusDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.jface.window.Window;
 
 import org.eclipse.ui.PlatformUI;
@@ -45,11 +47,11 @@ public class HistoryListAction extends Action {
 
 	private class HistoryListDialog extends StatusDialog {
 
-		private ListDialogField fHistoryList;
+		private ListDialogField<IJavaElement[]> fHistoryList;
 		private IStatus fHistoryStatus;
-		private IJavaElement fResult;
+		private IJavaElement[] fResult;
 
-		private HistoryListDialog(Shell shell, IJavaElement[] elements) {
+		private HistoryListDialog(Shell shell, IJavaElement[][] elements) {
 			super(shell);
 			setTitle(TypeHierarchyMessages.HistoryListDialog_title);
 
@@ -57,22 +59,56 @@ public class HistoryListAction extends Action {
 				TypeHierarchyMessages.HistoryListDialog_remove_button,
 			};
 
-			IListAdapter adapter= new IListAdapter() {
-				public void customButtonPressed(ListDialogField field, int index) {
+			IListAdapter<IJavaElement[]> adapter= new IListAdapter<IJavaElement[]>() {
+				public void customButtonPressed(ListDialogField<IJavaElement[]> field, int index) {
 					doCustomButtonPressed();
 				}
-				public void selectionChanged(ListDialogField field) {
+				public void selectionChanged(ListDialogField<IJavaElement[]> field) {
 					doSelectionChanged();
 				}
 
-				public void doubleClicked(ListDialogField field) {
+				public void doubleClicked(ListDialogField<IJavaElement[]> field) {
 					doDoubleClicked();
 				}
 			};
 
-			JavaElementLabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT);
+			JavaElementLabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT) {
+				/*
+				 * @see org.eclipse.jdt.ui.JavaElementLabelProvider#getStyledText(java.lang.Object)
+				 * @since 3.7
+				 */
+				@Override
+				public StyledString getStyledText(Object element) {
+					IJavaElement[] elem= (IJavaElement[])element;
+					if (elem.length == 1)
+						return HistoryAction.getSingleElementLabel(elem[0]);
+					else
+						return new StyledString(HistoryAction.getElementLabel(elem));
+				}
+
+				/*
+				 * @see org.eclipse.jdt.ui.JavaElementLabelProvider#getText(java.lang.Object)
+				 * @since 3.7
+				 */
+				@Override
+				public String getText(Object element) {
+					IJavaElement[] elem= (IJavaElement[])element;
+					return HistoryAction.getElementLabel(elem);
+				}
+
+				/*
+				 * @see org.eclipse.jdt.ui.JavaElementLabelProvider#getImage(java.lang.Object)
+				 * @since 3.7
+				 */
+				@Override
+				public Image getImage(Object element) {
+					IJavaElement[] elem= (IJavaElement[])element;
+					return super.getImage(elem[0]);
+					
+				}
+			};
 
-			fHistoryList= new ListDialogField(adapter, buttonLabels, labelProvider);
+			fHistoryList= new ListDialogField<IJavaElement[]>(adapter, buttonLabels, labelProvider);
 			fHistoryList.setLabelText(TypeHierarchyMessages.HistoryListDialog_label);
 			fHistoryList.setElements(Arrays.asList(elements));
 
@@ -90,6 +126,7 @@ public class HistoryListAction extends Action {
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 * @since 3.4
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
@@ -97,6 +134,7 @@ public class HistoryListAction extends Action {
 		/*
 		 * @see Dialog#createDialogArea(Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			initializeDialogUnits(parent);
 
@@ -131,30 +169,37 @@ public class HistoryListAction extends Action {
 
 		private void doSelectionChanged() {
 			StatusInfo status= new StatusInfo();
-			List selected= fHistoryList.getSelectedElements();
+			List<IJavaElement[]> selected= fHistoryList.getSelectedElements();
 			if (selected.size() != 1) {
 				status.setError(""); //$NON-NLS-1$
 				fResult= null;
 			} else {
-				fResult= (IJavaElement) selected.get(0);
+				fResult= selected.get(0);
 			}
 			fHistoryList.enableButton(0, fHistoryList.getSize() > selected.size() && selected.size() != 0);
 			fHistoryStatus= status;
 			updateStatus(status);
 		}
 
-		public IJavaElement getResult() {
+		public IJavaElement[] getResult() {
 			return fResult;
 		}
 
-		public IJavaElement[] getRemaining() {
-			List elems= fHistoryList.getElements();
-			return (IJavaElement[]) elems.toArray(new IJavaElement[elems.size()]);
+		/**
+		 * Gets the remaining elements in the list.
+		 * 
+		 * @return the remaining elements in the list
+		 * @since 3.7
+		 */
+		public List<IJavaElement[]> getRemaining() {
+			List<IJavaElement[]> elems= fHistoryList.getElements();
+			return elems;
 		}
 
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.HISTORY_LIST_DIALOG);
@@ -173,12 +218,14 @@ public class HistoryListAction extends Action {
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
-		IJavaElement[] historyEntries= fView.getHistoryEntries();
-		HistoryListDialog dialog= new HistoryListDialog(JavaPlugin.getActiveWorkbenchShell(), historyEntries);
+		List<IJavaElement[]> historyEntries= fView.getHistoryEntries();
+		IJavaElement[][] entries= historyEntries.toArray(new IJavaElement[historyEntries.size()][]);
+		HistoryListDialog dialog= new HistoryListDialog(JavaPlugin.getActiveWorkbenchShell(), entries);
 		if (dialog.open() == Window.OK) {
 			fView.setHistoryEntries(dialog.getRemaining());
-			fView.setInputElement(dialog.getResult());
+			fView.setInputElements(dialog.getResult());
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsContentProvider.java
index 068a912..c086e67 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,7 +74,7 @@ public class MethodsContentProvider implements IStructuredContentProvider, IWork
 	}
 
 
-	private void addAll(Object[] arr, List res) {
+	private void addAll(Object[] arr, List<Object> res) {
 		if (arr != null) {
 			for (int j= 0; j < arr.length; j++) {
 				res.add(arr[j]);
@@ -89,7 +89,7 @@ public class MethodsContentProvider implements IStructuredContentProvider, IWork
 		if (element instanceof IType) {
 			IType type= (IType)element;
 
-			List res= new ArrayList();
+			List<Object> res= new ArrayList<Object>();
 			try {
 				ITypeHierarchy hierarchy= fHierarchyLifeCycle.getHierarchy();
 				if (fShowInheritedMethods && hierarchy != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java
index b05298c..afff8e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,7 @@ public class MethodsLabelProvider extends AppearanceAwareLabelProvider {
 	private IPropertyChangeListener fColorRegistryListener;
 
 	public MethodsLabelProvider(TypeHierarchyLifeCycle lifeCycle, MethodsViewer methodsViewer) {
-		super(DEFAULT_TEXTFLAGS, DEFAULT_IMAGEFLAGS);
+		super(DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED, DEFAULT_IMAGEFLAGS);
 		fHierarchy= lifeCycle;
 		fShowDefiningType= false;
 		fMethodsViewer= methodsViewer;
@@ -92,6 +92,7 @@ public class MethodsLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see ILabelProvider#getText
 	 */
+	@Override
 	public String getText(Object element) {
 		String text= super.getText(element);
 		String qualifier= getQualifier(element);
@@ -104,6 +105,7 @@ public class MethodsLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getStyledText(java.lang.Object)
 	 */
+	@Override
 	public StyledString getStyledText(Object element) {
 		StyledString text= super.getStyledText(element);
 		String qualifier= getQualifier(element);
@@ -133,6 +135,7 @@ public class MethodsLabelProvider extends AppearanceAwareLabelProvider {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
 	 */
+	@Override
 	public Color getForeground(Object element) {
 		if (fMethodsViewer.isShowInheritedMethods() && element instanceof IMethod) {
 			IMethod curr= (IMethod) element;
@@ -145,6 +148,7 @@ public class MethodsLabelProvider extends AppearanceAwareLabelProvider {
 		return null;
 	}
 
+	@Override
 	public void dispose() {
 		JFaceResources.getColorRegistry().removeListener(fColorRegistryListener);
 		fColorRegistryListener= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
index c8ace37..d0aaf41 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -148,6 +148,7 @@ public class MethodsViewer extends ProblemTableViewer {
 	/*
 	 * @see Viewer#inputChanged(Object, Object)
 	 */
+	@Override
 	protected void inputChanged(Object input, Object oldInput) {
 		super.inputChanged(input, oldInput);
 	}
@@ -254,13 +255,14 @@ public class MethodsViewer extends ProblemTableViewer {
 	/*
 	 * @see StructuredViewer#handleInvalidSelection(ISelection, ISelection)
 	 */
+	@Override
 	protected void handleInvalidSelection(ISelection invalidSelection, ISelection newSelection) {
 		// on change of input, try to keep selected methods stable by selecting a method with the same
 		// signature: See #5466
-		List oldSelections= SelectionUtil.toList(invalidSelection);
-		List newSelections= SelectionUtil.toList(newSelection);
+		List<?> oldSelections= SelectionUtil.toList(invalidSelection);
+		List<?> newSelections= SelectionUtil.toList(newSelection);
 		if (!oldSelections.isEmpty()) {
-			ArrayList newSelectionElements= new ArrayList(newSelections);
+			ArrayList<Object> newSelectionElements= new ArrayList<Object>(newSelections);
 			try {
 				Object[] currElements= getFilteredChildren(getInput());
 				for (int i= 0; i < oldSelections.size(); i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowInheritedMembersAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowInheritedMembersAction.java
index eec4bd6..bbc9f35 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowInheritedMembersAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowInheritedMembersAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class ShowInheritedMembersAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		BusyIndicator.showWhile(fMethodsViewer.getControl().getDisplay(), new Runnable() {
 			public void run() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowQualifiedTypeNamesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowQualifiedTypeNamesAction.java
index f8a7c66..4f53f42 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowQualifiedTypeNamesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ShowQualifiedTypeNamesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class ShowQualifiedTypeNamesAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		BusyIndicator.showWhile(fView.getSite().getShell().getDisplay(), new Runnable() {
 			public void run() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SortByDefiningTypeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SortByDefiningTypeAction.java
index 0099fc0..df88fb7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SortByDefiningTypeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SortByDefiningTypeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,7 @@ public class SortByDefiningTypeAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		BusyIndicator.showWhile(fMethodsViewer.getControl().getDisplay(), new Runnable() {
 			public void run() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java
index 16d0073..8526e79 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class SubTypeHierarchyViewer extends TypeHierarchyViewer {
 	/*
 	 * @see TypeHierarchyViewer#updateContent
 	 */
+	@Override
 	public void updateContent(boolean expand) {
 		getTree().setRedraw(false);
 		refresh();
@@ -53,7 +54,8 @@ public class SubTypeHierarchyViewer extends TypeHierarchyViewer {
 			super(lifeCycle);
 		}
 
-		protected final void getTypesInHierarchy(IType type, List res) {
+		@Override
+		protected final void getTypesInHierarchy(IType type, List<IType> res) {
 			ITypeHierarchy hierarchy= getHierarchy();
 			if (hierarchy != null) {
 				IType[] types= hierarchy.getSubtypes(type);
@@ -73,6 +75,7 @@ public class SubTypeHierarchyViewer extends TypeHierarchyViewer {
 
 		}
 
+		@Override
 		protected IType getParentType(IType type) {
 			ITypeHierarchy hierarchy= getHierarchy();
 			if (hierarchy != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SuperTypeHierarchyViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SuperTypeHierarchyViewer.java
index 7702e92..0443352 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SuperTypeHierarchyViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SuperTypeHierarchyViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class SuperTypeHierarchyViewer extends TypeHierarchyViewer {
 	/*
 	 * @see TypeHierarchyViewer#updateContent
 	 */
+	@Override
 	public void updateContent(boolean expand) {
 		getTree().setRedraw(false);
 		refresh();
@@ -48,7 +49,8 @@ public class SuperTypeHierarchyViewer extends TypeHierarchyViewer {
 			super(lifeCycle);
 		}
 
-		protected final void getTypesInHierarchy(IType type, List res) {
+		@Override
+		protected final void getTypesInHierarchy(IType type, List<IType> res) {
 			ITypeHierarchy hierarchy= getHierarchy();
 			if (hierarchy != null) {
 				IType[] types= hierarchy.getSupertypes(type);
@@ -58,6 +60,7 @@ public class SuperTypeHierarchyViewer extends TypeHierarchyViewer {
 			}
 		}
 
+		@Override
 		protected IType getParentType(IType type) {
 			// cant handle
 			return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleLinkingAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleLinkingAction.java
index 69b73ee..fb79b5a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleLinkingAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleLinkingAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,6 +37,7 @@ public class ToggleLinkingAction extends AbstractToggleLinkingAction {
 	/**
 	 * Runs the action.
 	 */
+	@Override
 	public void run() {
 		fHierarchyViewPart.setLinkingEnabled(isChecked());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleOrientationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleOrientationAction.java
index 09af972..ea797a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleOrientationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleOrientationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,7 @@ public class ToggleOrientationAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		if (isChecked()) {
 			fView.setViewLayout(fActionOrientation);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleViewAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleViewAction.java
index 773c4bb..746bb4b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleViewAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/ToggleViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,6 +67,7 @@ public class ToggleViewAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		fViewPart.setHierarchyMode(fViewerIndex);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java
index 4d3ce1e..7b4bdb5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public class TraditionalHierarchyViewer extends TypeHierarchyViewer {
 	/*
 	 * @see TypeHierarchyViewer#updateContent
 	 */
+	@Override
 	public void updateContent(boolean expand) {
 		getTree().setRedraw(false);
 		refresh();
@@ -86,7 +87,8 @@ public class TraditionalHierarchyViewer extends TypeHierarchyViewer {
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyContentProvider#getRootTypes(java.util.List)
 		 */
-		protected final void getRootTypes(List res) {
+		@Override
+		protected final void getRootTypes(List<IType> res) {
 			ITypeHierarchy hierarchy= getHierarchy();
 			if (hierarchy != null) {
 				IType input= hierarchy.getType();
@@ -121,7 +123,8 @@ public class TraditionalHierarchyViewer extends TypeHierarchyViewer {
 		/*
 		 * @see TypeHierarchyContentProvider.getTypesInHierarchy
 		 */
-		protected final void getTypesInHierarchy(IType type, List res) {
+		@Override
+		protected final void getTypesInHierarchy(IType type, List<IType> res) {
 			ITypeHierarchy hierarchy= getHierarchy();
 			if (hierarchy != null) {
 				IType[] types= hierarchy.getSubtypes(type);
@@ -152,6 +155,7 @@ public class TraditionalHierarchyViewer extends TypeHierarchyViewer {
 			}
 		}
 
+		@Override
 		protected IType getParentType(IType type) {
 			ITypeHierarchy hierarchy= getHierarchy();
 			if (hierarchy != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java
index 1883b33..2aee695 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 
+import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
@@ -91,12 +92,18 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 		return filterOverrides;
 	}
 
-	private void addCompatibleMethods(IMethod filterMethod, IType typeToFindIn, List children) throws JavaModelException {
+	private void addCompatibleMethods(IMethod filterMethod, IType typeToFindIn, List<IMember> children) throws JavaModelException {
+		int flags= filterMethod.getFlags();
+		if (Flags.isPrivate(flags) || Flags.isStatic(flags) || filterMethod.isConstructor())
+			return;
 		synchronized (fTypeHierarchyLifeCycleListener) {
 			boolean filterMethodOverrides= initializeMethodOverrideTester(filterMethod, typeToFindIn);
 			IMethod[] methods= typeToFindIn.getMethods();
 			for (int i= 0; i < methods.length; i++) {
 				IMethod curr= methods[i];
+				flags= curr.getFlags();
+				if (Flags.isPrivate(flags) || Flags.isStatic(flags) || curr.isConstructor())
+					continue;
 				if (isCompatibleMethod(filterMethod, curr, filterMethodOverrides) && !children.contains(curr)) {
 					children.add(curr);
 				}
@@ -105,11 +112,18 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 	}
 
 	private boolean hasCompatibleMethod(IMethod filterMethod, IType typeToFindIn) throws JavaModelException {
+		int flags= filterMethod.getFlags();
+		if (Flags.isPrivate(flags) || Flags.isStatic(flags) || filterMethod.isConstructor())
+			return false;
 		synchronized (fTypeHierarchyLifeCycleListener) {
 			boolean filterMethodOverrides= initializeMethodOverrideTester(filterMethod, typeToFindIn);
 			IMethod[] methods= typeToFindIn.getMethods();
 			for (int i= 0; i < methods.length; i++) {
-				if (isCompatibleMethod(filterMethod, methods[i], filterMethodOverrides)) {
+				IMethod curr= methods[i];
+				flags= curr.getFlags();
+				if (Flags.isPrivate(flags) || Flags.isStatic(flags) || curr.isConstructor())
+					continue;
+				if (isCompatibleMethod(filterMethod, curr, filterMethodOverrides)) {
 					return true;
 				}
 			}
@@ -160,10 +174,10 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 	 * @see IStructuredContentProvider#getElements
 	 */
 	public Object[] getElements(Object parent) {
-		ArrayList types= new ArrayList();
+		ArrayList<IType> types= new ArrayList<IType>();
 		getRootTypes(types);
 		for (int i= types.size() - 1; i >= 0; i--) {
-			IType curr= (IType) types.get(i);
+			IType curr= types.get(i);
 			try {
 				if (!isInTree(curr)) {
 					types.remove(i);
@@ -175,7 +189,7 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 		return types.toArray();
 	}
 
-	protected void getRootTypes(List res) {
+	protected void getRootTypes(List<IType> res) {
 		ITypeHierarchy hierarchy= getHierarchy();
 		if (hierarchy != null) {
 			IType input= hierarchy.getType();
@@ -191,7 +205,7 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 	 * @param type the type
 	 * @param res all types in the hierarchy of the given type
 	 */
-	protected abstract void getTypesInHierarchy(IType type, List res);
+	protected abstract void getTypesInHierarchy(IType type, List<IType> res);
 
 	/**
 	 * Hook to overwrite. Return null if parent is ambiguous.
@@ -201,24 +215,26 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 	protected abstract IType getParentType(IType type);
 
 
-	private boolean isInScope(IType type) {
+	private boolean isInHierarchyOfInputElements(IType type) {
 		if (fWorkingSetFilter != null && !fWorkingSetFilter.select(null, null, type)) {
 			return false;
 		}
 
-		IJavaElement input= fTypeHierarchy.getInputElement();
-		int inputType= input.getElementType();
-		if (inputType ==  IJavaElement.TYPE) {
-			return true;
-		}
+		IJavaElement[] input= fTypeHierarchy.getInputElements();
+		for (int i= 0; i < input.length; i++) {
+			int inputType= input[i].getElementType();
+			if (inputType == IJavaElement.TYPE) {
+				return true;
+			}
 
-		IJavaElement parent= type.getAncestor(input.getElementType());
-		if (inputType == IJavaElement.PACKAGE_FRAGMENT) {
-			if (parent == null || parent.getElementName().equals(input.getElementName())) {
+			IJavaElement parent= type.getAncestor(inputType);
+			if (inputType == IJavaElement.PACKAGE_FRAGMENT) {
+				if (parent == null || parent.getElementName().equals(input[i].getElementName())) {
+					return true;
+				}
+			} else if (input[i].equals(parent)) {
 				return true;
 			}
-		} else if (input.equals(parent)) {
-			return true;
 		}
 		return false;
 	}
@@ -232,7 +248,7 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 			try {
 				IType type= (IType)element;
 
-				List children= new ArrayList();
+				List<IMember> children= new ArrayList<IMember>();
 				if (fMemberFilter != null) {
 					addFilteredMemberChildren(type, children);
 				}
@@ -262,7 +278,7 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 		return false;
 	}
 
-	private void addFilteredMemberChildren(IType parent, List children) throws JavaModelException {
+	private void addFilteredMemberChildren(IType parent, List<IMember> children) throws JavaModelException {
 		for (int i= 0; i < fMemberFilter.length; i++) {
 			IMember member= fMemberFilter[i];
 			if (parent.equals(member.getDeclaringType())) {
@@ -275,12 +291,12 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 		}
 	}
 
-	private void addTypeChildren(IType type, List children) throws JavaModelException {
-		ArrayList types= new ArrayList();
+	private void addTypeChildren(IType type, List<IMember> children) throws JavaModelException {
+		ArrayList<IType> types= new ArrayList<IType>();
 		getTypesInHierarchy(type, types);
 		int len= types.size();
 		for (int i= 0; i < len; i++) {
-			IType curr= (IType) types.get(i);
+			IType curr= types.get(i);
 			if (isInTree(curr)) {
 				children.add(curr);
 			}
@@ -288,7 +304,7 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 	}
 
 	protected final boolean isInTree(IType type) throws JavaModelException {
-		if (isInScope(type)) {
+		if (isInHierarchyOfInputElements(type)) {
 			if (fMemberFilter != null) {
 				return hasMemberFilterChildren(type) || hasTypeChildren(type);
 			} else {
@@ -313,11 +329,11 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 	}
 
 	private boolean hasTypeChildren(IType type) throws JavaModelException {
-		ArrayList types= new ArrayList();
+		ArrayList<IType> types= new ArrayList<IType>();
 		getTypesInHierarchy(type, types);
 		int len= types.size();
 		for (int i= 0; i < len; i++) {
-			IType curr= (IType) types.get(i);
+			IType curr= types.get(i);
 			if (isInTree(curr)) {
 				return true;
 			}
@@ -367,8 +383,4 @@ public abstract class TypeHierarchyContentProvider implements ITreeContentProvid
 		return "Object".equals(type.getElementName()) && type.getDeclaringType() == null && "java.lang".equals(type.getPackageFragment().getElementName());  //$NON-NLS-1$//$NON-NLS-2$
 	}
 
-
-
-
-
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java
index 93a778c..72cd63c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,6 @@ import org.eclipse.jdt.core.IElementChangedListener;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaElementDelta;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IRegion;
 import org.eclipse.jdt.core.IType;
@@ -46,8 +45,6 @@ import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
-import org.eclipse.jdt.ui.JavaElementLabels;
-
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
 /**
@@ -57,10 +54,10 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 
 	private boolean fHierarchyRefreshNeeded;
 	private ITypeHierarchy fHierarchy;
-	private IJavaElement fInputElement;
+	private IJavaElement[] fInputElements;
 	private boolean fIsSuperTypesOnly;
 
-	private List fChangeListeners;
+	private List<ITypeHierarchyLifeCycleListener> fChangeListeners;
 
 	/**
 	 * The type hierarchy view part.
@@ -97,17 +94,22 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 
 	public TypeHierarchyLifeCycle(boolean isSuperTypesOnly) {
 		fHierarchy= null;
-		fInputElement= null;
+		fInputElements= null;
 		fIsSuperTypesOnly= isSuperTypesOnly;
-		fChangeListeners= new ArrayList(2);
+		fChangeListeners= new ArrayList<ITypeHierarchyLifeCycleListener>(2);
 	}
 
 	public ITypeHierarchy getHierarchy() {
 		return fHierarchy;
 	}
 
-	public IJavaElement getInputElement() {
-		return fInputElement;
+	/**
+	 * Returns the array of input elements.
+	 * 
+	 * @return the input elements
+	 */
+	public IJavaElement[] getInputElements() {
+		return fInputElements;
 	}
 
 
@@ -116,7 +118,7 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 			fHierarchy.removeTypeHierarchyChangedListener(this);
 			JavaCore.removeElementChangedListener(this);
 			fHierarchy= null;
-			fInputElement= null;
+			fInputElements= null;
 		}
 		synchronized (this) {
 			if (fRefreshHierarchyJob != null) {
@@ -138,7 +140,7 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 
 	private void fireChange(IType[] changedTypes) {
 		for (int i= fChangeListeners.size()-1; i>=0; i--) {
-			ITypeHierarchyLifeCycleListener curr= (ITypeHierarchyLifeCycleListener) fChangeListeners.get(i);
+			ITypeHierarchyLifeCycleListener curr= fChangeListeners.get(i);
 			curr.typeHierarchyChanged(this, changedTypes);
 		}
 	}
@@ -152,6 +154,19 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 	 * @throws InvocationTargetException thrown from the <code>JavaModelException</code> if the java element does not exist or if an exception occurs while accessing its corresponding resource
 	 */
 	public void ensureRefreshedTypeHierarchy(final IJavaElement element, IRunnableContext context) throws InvocationTargetException, InterruptedException {
+		ensureRefreshedTypeHierarchy(new IJavaElement[] { element }, context);
+	}
+
+	/**
+	 * Refreshes the type hierarchy for the java elements if they exist.
+	 * 
+	 * @param elements the java elements for which the type hierarchy is computed
+	 * @param context the runnable context
+	 * @throws InterruptedException thrown from the <code>OperationCanceledException</code> when the monitor is canceled
+	 * @throws InvocationTargetException thrown from the <code>JavaModelException</code> if a java element does not exist or if an exception occurs while accessing its corresponding resource
+	 * @since 3.7
+	 */
+	public void ensureRefreshedTypeHierarchy(final IJavaElement[] elements, IRunnableContext context) throws InvocationTargetException, InterruptedException {
 		synchronized (this) {
 			if (fRefreshHierarchyJob != null) {
 				fRefreshHierarchyJob.cancel();
@@ -166,18 +181,24 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 				}
 			}
 		}
-		if (element == null || !element.exists()) {
+		if (elements == null || elements.length == 0) {
 			freeHierarchy();
 			return;
 		}
-		boolean hierachyCreationNeeded= (fHierarchy == null || !element.equals(fInputElement));
+		for (int i= 0; i < elements.length; i++) {
+			if (elements[i] == null || !elements[i].exists()) {
+				freeHierarchy();
+				return;
+			}
+		}
+		boolean hierachyCreationNeeded= (fHierarchy == null || !elements.equals(fInputElements));
 
 		if (hierachyCreationNeeded || fHierarchyRefreshNeeded) {
 			if (fTypeHierarchyViewPart == null) {
 				IRunnableWithProgress op= new IRunnableWithProgress() {
 					public void run(IProgressMonitor pm) throws InvocationTargetException, InterruptedException {
 						try {
-							doHierarchyRefresh(element, pm);
+							doHierarchyRefresh(elements, pm);
 						} catch (JavaModelException e) {
 							throw new InvocationTargetException(e);
 						} catch (OperationCanceledException e) {
@@ -189,16 +210,17 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 				context.run(true, true, op);
 				fHierarchyRefreshNeeded= false;
 			} else {
-				final String label= Messages.format(TypeHierarchyMessages.TypeHierarchyLifeCycle_computeInput, JavaElementLabels.getElementLabel(element, JavaElementLabels.ALL_DEFAULT));
+				final String label= Messages.format(TypeHierarchyMessages.TypeHierarchyLifeCycle_computeInput, HistoryAction.getElementLabel(elements));
 				synchronized (this) {
 					fRefreshHierarchyJob= new Job(label) {
 						/*
 						 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 						 */
+						@Override
 						public IStatus run(IProgressMonitor pm) {
 							pm.beginTask(label, LONG);
 							try {
-								doHierarchyRefreshBackground(element, pm);
+								doHierarchyRefreshBackground(elements, pm);
 							} catch (OperationCanceledException e) {
 								if (fRefreshJobCanceledExplicitly) {
 									fTypeHierarchyViewPart.showEmptyViewer();
@@ -237,15 +259,15 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 	 * Refreshes the hierarchy in the background and updates the hierarchy viewer asynchronously in
 	 * the UI thread.
 	 * 
-	 * @param element the java element on which the hierarchy is computed
+	 * @param elements the java elements on which the hierarchy is computed
 	 * @param pm the progress monitor
 	 * @throws JavaModelException if the java element does not exist or if an exception occurs while
 	 *             accessing its corresponding resource.
 	 * 
 	 * @since 3.6
 	 */
-	protected void doHierarchyRefreshBackground(final IJavaElement element, final IProgressMonitor pm) throws JavaModelException {
-		doHierarchyRefresh(element, pm);
+	protected void doHierarchyRefreshBackground(final IJavaElement[] elements, final IProgressMonitor pm) throws JavaModelException {
+		doHierarchyRefresh(elements, pm);
 		if (!pm.isCanceled()) {
 			Display.getDefault().asyncExec(new Runnable() {
 				/*
@@ -267,9 +289,9 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 		}
 	}
 
-	private ITypeHierarchy createTypeHierarchy(IJavaElement element, IProgressMonitor pm) throws JavaModelException {
-		if (element.getElementType() == IJavaElement.TYPE) {
-			IType type= (IType) element;
+	private ITypeHierarchy createTypeHierarchy(IJavaElement[] elements, IProgressMonitor pm) throws JavaModelException {
+		if (elements.length == 1 && elements[0].getElementType() == IJavaElement.TYPE) {
+			IType type= (IType)elements[0];
 			if (fIsSuperTypesOnly) {
 				return type.newSupertypeHierarchy(pm);
 			} else {
@@ -277,34 +299,26 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 			}
 		} else {
 			IRegion region= JavaCore.newRegion();
-			if (element.getElementType() == IJavaElement.JAVA_PROJECT) {
-				// for projects only add the contained source folders
-				IPackageFragmentRoot[] roots= ((IJavaProject) element).getPackageFragmentRoots();
-				for (int i= 0; i < roots.length; i++) {
-					if (!roots[i].isExternal()) {
-						region.add(roots[i]);
-					}
-				}
-			} else if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
-				IPackageFragmentRoot[] roots= element.getJavaProject().getPackageFragmentRoots();
-				String name= element.getElementName();
-				for (int i= 0; i < roots.length; i++) {
-					IPackageFragment pack= roots[i].getPackageFragment(name);
-					if (pack.exists()) {
-						region.add(pack);
+			for (int i= 0; i < elements.length; i++) {
+				if (elements[i].getElementType() == IJavaElement.JAVA_PROJECT) {
+					// for projects only add the contained source folders
+					IPackageFragmentRoot[] roots= ((IJavaProject)elements[i]).getPackageFragmentRoots();
+					for (int j= 0; j < roots.length; j++) {
+						if (!roots[j].isExternal()) {
+							region.add(roots[j]);
+						}
 					}
+				} else {
+					region.add(elements[i]);
 				}
-			} else {
-				region.add(element);
 			}
-			IJavaProject jproject= element.getJavaProject();
-			return jproject.newTypeHierarchy(region, pm);
+			return JavaCore.newTypeHierarchy(region, null, pm);
 		}
 	}
 
 
-	public void doHierarchyRefresh(IJavaElement element, IProgressMonitor pm) throws JavaModelException {
-		boolean hierachyCreationNeeded= (fHierarchy == null || !element.equals(fInputElement));
+	public void doHierarchyRefresh(IJavaElement[] elements, IProgressMonitor pm) throws JavaModelException {
+		boolean hierachyCreationNeeded= (fHierarchy == null || !elements.equals(fInputElements));
 		// to ensure the order of the two listeners always remove / add listeners on operations
 		// on type hierarchies
 		if (fHierarchy != null) {
@@ -312,11 +326,11 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 			JavaCore.removeElementChangedListener(this);
 		}
 		if (hierachyCreationNeeded) {
-			fHierarchy= createTypeHierarchy(element, pm);
+			fHierarchy= createTypeHierarchy(elements, pm);
 			if (pm != null && pm.isCanceled()) {
 				throw new OperationCanceledException();
 			}
-			fInputElement= element;
+			fInputElements= elements;
 		} else {
 			fHierarchy.refresh(pm);
 			if (pm != null && pm.isCanceled())
@@ -346,10 +360,10 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 		if (fHierarchyRefreshNeeded) {
 			return;
 		} else {
-			ArrayList changedTypes= new ArrayList();
+			ArrayList<IType> changedTypes= new ArrayList<IType>();
 			processDelta(event.getDelta(), changedTypes);
 			if (changedTypes.size() > 0) {
-				fireChange((IType[]) changedTypes.toArray(new IType[changedTypes.size()]));
+				fireChange(changedTypes.toArray(new IType[changedTypes.size()]));
 			}
 		}
 	}
@@ -357,7 +371,7 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 	/*
 	 * Assume that the hierarchy is intact (no refresh needed)
 	 */
-	private void processDelta(IJavaElementDelta delta, ArrayList changedTypes) {
+	private void processDelta(IJavaElementDelta delta, ArrayList<IType> changedTypes) {
 		IJavaElement element= delta.getElement();
 		switch (element.getElementType()) {
 			case IJavaElement.TYPE:
@@ -406,13 +420,13 @@ public class TypeHierarchyLifeCycle implements ITypeHierarchyChangedListener, IE
 		return (flags & (IJavaElementDelta.F_CONTENT | IJavaElementDelta.F_FINE_GRAINED)) == IJavaElementDelta.F_CONTENT;
 	}
 
-	private void processTypeDelta(IType type, ArrayList changedTypes) {
+	private void processTypeDelta(IType type, ArrayList<IType> changedTypes) {
 		if (getHierarchy().contains(type)) {
 			changedTypes.add(type);
 		}
 	}
 
-	private void processChildrenDelta(IJavaElementDelta delta, ArrayList changedTypes) {
+	private void processChildrenDelta(IJavaElementDelta delta, ArrayList<IType> changedTypes) {
 		IJavaElementDelta[] children= delta.getAffectedChildren();
 		for (int i= 0; i < children.length; i++) {
 			processDelta(children[i], changedTypes); // recursive
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.java
index b8324d9..5130071 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,9 @@ public final class TypeHierarchyMessages extends NLS {
 	public static String HistoryDropDownAction_tooltip;
 	public static String HistoryAction_description;
 	public static String HistoryAction_tooltip;
+	public static String HistoryAction_inputElements_1;
+	public static String HistoryAction_inputElements_2;
+	public static String HistoryAction_inputElements_more;
 	public static String HistoryListDialog_title;
 	public static String HistoryListDialog_label;
 	public static String HistoryListDialog_remove_button;
@@ -68,8 +71,14 @@ public final class TypeHierarchyMessages extends NLS {
 	public static String TypeHierarchyViewPart_exception_title;
 	public static String TypeHierarchyViewPart_exception_message;
 	public static String TypeHierarchyViewPart_tooltip;
+	public static String TypeHierarchyViewPart_tooltip2;
+	public static String TypeHierarchyViewPart_tooltip_more;
 	public static String TypeHierarchyViewPart_ws_description;
+	public static String TypeHierarchyViewPart_ws_description2;
+	public static String TypeHierarchyViewPart_ws_description_more;
 	public static String TypeHierarchyViewPart_ws_tooltip;
+	public static String TypeHierarchyViewPart_ws_tooltip2;
+	public static String TypeHierarchyViewPart_ws_tooltip_more;
 	public static String TypeHierarchyViewPart_restoreinput;
 	public static String TypeHierarchyViewPart_layout_submenu;
 	public static String TypeHierarchyLifeCycle_computeInput;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.properties
index 56fcbd6..5ef5ea4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -44,6 +44,9 @@ HistoryDropDownAction_clearhistory_label=Clear History
 
 HistoryAction_description=Open ''{0}'' in Hierarchy
 HistoryAction_tooltip=Open ''{0}'' in Hierarchy
+HistoryAction_inputElements_1={0}
+HistoryAction_inputElements_2={0}, {1}
+HistoryAction_inputElements_more= {0}, {1}, ...
 
 HistoryListDialog_title=Type Hierarchy History
 HistoryListDialog_label=&Select the element to open in the type hierarchy:
@@ -74,8 +77,14 @@ TypeHierarchyViewPart_exception_title=Type Hierarchy
 TypeHierarchyViewPart_exception_message=Creating hierarchy failed. See log for details.
 
 TypeHierarchyViewPart_tooltip=Type Hierarchy of ''{0}''
-TypeHierarchyViewPart_ws_description={0}, working set: {1}
-TypeHierarchyViewPart_ws_tooltip=Type Hierarchy of {0} - working set: {1}
+TypeHierarchyViewPart_tooltip2=Type Hierarchy of ''{0}'', ''{1}''
+TypeHierarchyViewPart_tooltip_more=Type Hierarchy of ''{0}'', ''{1}'', ...
+TypeHierarchyViewPart_ws_description=''{0}'' - in working set: {1}
+TypeHierarchyViewPart_ws_description2=''{0}'', ''{1}'' - in working set: {2}
+TypeHierarchyViewPart_ws_description_more=''{0}'', ''{1}'', ... - in working set: {2}
+TypeHierarchyViewPart_ws_tooltip=Type Hierarchy of ''{0}'' - in working set: {1}
+TypeHierarchyViewPart_ws_tooltip2=Type Hierarchy of ''{0}'', ''{1}'' - in working set: {2}
+TypeHierarchyViewPart_ws_tooltip_more=Type Hierarchy of ''{0}'', ''{1}'', ... - in working set: {2}
 
 TypeHierarchyViewPart_restoreinput=Restoring type hierarchy of ''{0}''...
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyTransferDropAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyTransferDropAdapter.java
index df23795..aaeb586 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyTransferDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyTransferDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class TypeHierarchyTransferDropAdapter extends ViewerInputDropAdapter {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void doInputView(Object inputElement) {
 		fTypeHierarchyViewPart.setInputElement((IJavaElement) inputElement);
 	}
@@ -38,6 +39,7 @@ public class TypeHierarchyTransferDropAdapter extends ViewerInputDropAdapter {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object getInputElement(ISelection selection) {
 		Object single= SelectionUtil.getSingleElement(selection);
 		if (single == null)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
index f6df9cd..354cf99 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,8 @@ package org.eclipse.jdt.internal.ui.typehierarchy;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.help.IContextProvider;
@@ -110,7 +112,6 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.IContextMenuConstants;
 import org.eclipse.jdt.ui.ITypeHierarchyViewPart;
-import org.eclipse.jdt.ui.JavaElementLabels;
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.actions.CCPActionGroup;
@@ -169,11 +170,11 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 	// the selected type in the hierarchy view
 	private IType fSelectedType;
-	// input element or null
-	private IJavaElement fInputElement;
+	// input elements or null
+	private IJavaElement[] fInputElements;
 
 	// history of input elements. No duplicates
-	private ArrayList fInputHistory;
+	private ArrayList<IJavaElement[]> fInputHistory;
 
 	private IMemento fMemento;
 	private IDialogSettings fDialogSettings;
@@ -259,7 +260,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 	public TypeHierarchyViewPart() {
 		fSelectedType= null;
-		fInputElement= null;
+		fInputElements= null;
 		fIsVisible= false;
 		fIsRefreshRunnablePosted= false;
 		fSelectInEditor= true;
@@ -282,7 +283,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 		fIsEnableMemberFilter= false;
 
-		fInputHistory= new ArrayList();
+		fInputHistory= new ArrayList<IJavaElement[]>();
 		fAllViewers= null;
 
 		fViewActions= new ToggleViewAction[] {
@@ -372,9 +373,13 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * Adds the entry if new. Inserted at the beginning of the history entries list.
 	 * @param entry The new entry
 	 */
-	private void addHistoryEntry(IJavaElement entry) {
-		if (fInputHistory.contains(entry)) {
-			fInputHistory.remove(entry);
+	private void addHistoryEntry(IJavaElement[] entry) {
+		for (Iterator<IJavaElement[]> iter= fInputHistory.iterator(); iter.hasNext();) {
+			IJavaElement[] elem= iter.next();
+			if (Arrays.equals(elem, entry)) {
+				fInputHistory.remove(elem);
+				break;
+			}
 		}
 		fInputHistory.add(0, entry);
 		fHistoryDropDownAction.setEnabled(true);
@@ -382,9 +387,13 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 	private void updateHistoryEntries() {
 		for (int i= fInputHistory.size() - 1; i >= 0; i--) {
-			IJavaElement type= (IJavaElement) fInputHistory.get(i);
-			if (!type.exists()) {
-				fInputHistory.remove(i);
+			IJavaElement[] entries= fInputHistory.get(i);
+			for (int j= 0; j < entries.length; j++) {
+				IJavaElement elem= entries[j];
+				if (elem != null && !elem.exists()) {
+					fInputHistory.remove(i);
+					break;
+				}
 			}
 		}
 		fHistoryDropDownAction.setEnabled(!fInputHistory.isEmpty());
@@ -392,9 +401,10 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 	/**
 	 * Goes to the selected entry, without updating the order of history entries.
-	 * @param entry The entry to open
+	 * 
+	 * @param entry the entry to open
 	 */
-	public void gotoHistoryEntry(IJavaElement entry) {
+	public void gotoHistoryEntry(IJavaElement[] entry) {
 		if (fInputHistory.contains(entry)) {
 			updateInput(entry);
 		}
@@ -404,21 +414,36 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * Gets all history entries.
 	 * @return All history entries
 	 */
-	public IJavaElement[] getHistoryEntries() {
+	public List<IJavaElement[]> getHistoryEntries() {
 		if (fInputHistory.size() > 0) {
 			updateHistoryEntries();
 		}
-		return (IJavaElement[]) fInputHistory.toArray(new IJavaElement[fInputHistory.size()]);
+		return fInputHistory;
 	}
 
 	/**
-	 * Sets the history entries
-	 * @param elems The history elements to set
+	 * Sets the history entries.
+	 * 
+	 * @param elems the history elements to set
 	 */
 	public void setHistoryEntries(IJavaElement[] elems) {
+		List<IJavaElement[]> list= new ArrayList<IJavaElement[]>(1);
+		list.add(elems);
+		setHistoryEntries(list);
+	}
+
+	/**
+	 * Sets the history entries.
+	 * 
+	 * @param elems the history elements to set
+	 * @since 3.7
+	 */
+	public void setHistoryEntries(List<IJavaElement[]> elems) {
 		fInputHistory.clear();
-		for (int i= 0; i < elems.length; i++) {
-			fInputHistory.add(elems[i]);
+		for (Iterator<IJavaElement[]> iterator= elems.iterator(); iterator.hasNext();) {
+			IJavaElement[] elements= iterator.next();
+			if (elements != null && elements.length != 0)
+				fInputHistory.add(elements);
 		}
 		updateHistoryEntries();
 	}
@@ -455,8 +480,8 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * @deprecated use getInputElement instead
 	 */
 	public IType getInput() {
-		if (fInputElement instanceof IType) {
-			return (IType) fInputElement;
+		if (fInputElements.length == 1 && fInputElements[0] instanceof IType) {
+			return (IType)fInputElements[0];
 		}
 		return null;
 	}
@@ -471,45 +496,74 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	}
 
 	/**
-	 * Returns the input element of the type hierarchy.
-	 * Can be of type <code>IType</code> or <code>IPackageFragment</code>
+	 * Returns the input element of the type hierarchy. Can be of type <code>IType</code> or
+	 * <code>IPackageFragment</code>
+	 * 
 	 * @return the input element
 	 */
 	public IJavaElement getInputElement() {
-		return fInputElement;
+		return fInputElements == null ? null : (fInputElements.length == 1 ? fInputElements[0] : null);
 	}
 
+	/**
+	 * Returns the input elements of the type hierarchy.
+	 * 
+	 * @return the input elements
+	 * @since 3.7
+	 */
+	public IJavaElement[] getInputElements() {
+		return fInputElements;
+	}
+	
 
 	/**
 	 * Sets the input to a new element.
 	 * @param element the input element
 	 */
 	public void setInputElement(IJavaElement element) {
-		IMember memberToSelect= null;
-		if (element != null) {
-			if (element instanceof IMember) {
-				if (element.getElementType() != IJavaElement.TYPE) {
-					memberToSelect= (IMember) element;
-					element= memberToSelect.getDeclaringType();
+		setInputElements(element == null ? null : new IJavaElement[] { element });
+	}
 
-				}
-				if (!element.exists()) {
-					MessageDialog.openError(getSite().getShell(), TypeHierarchyMessages.TypeHierarchyViewPart_error_title, TypeHierarchyMessages.TypeHierarchyViewPart_error_message);
-					return;
-				}
-			} else {
-				int kind= element.getElementType();
-				if (kind != IJavaElement.JAVA_PROJECT && kind != IJavaElement.PACKAGE_FRAGMENT_ROOT && kind != IJavaElement.PACKAGE_FRAGMENT) {
-					element= null;
-					JavaPlugin.logErrorMessage("Invalid type hierarchy input type.");//$NON-NLS-1$
+
+	/**
+	 * Sets the input to a new element.
+	 * 
+	 * @param javaElements the input java elements
+	 * @since 3.7
+	 */
+	public void setInputElements(IJavaElement[] javaElements) {
+		IJavaElement[] newElements= null;
+		IMember memberToSelect= null;
+		if (javaElements != null) {
+			newElements= new IJavaElement[javaElements.length];
+			for (int i= 0; i < javaElements.length; i++) {
+				newElements[i]= javaElements[i];
+				memberToSelect= null;
+				if (newElements[i] != null) {
+					if (newElements[i] instanceof IMember) {
+						if (newElements[i].getElementType() != IJavaElement.TYPE) {
+							memberToSelect= (IMember)newElements[i];
+							newElements[i]= memberToSelect.getDeclaringType();
+						}
+						if (!newElements[i].exists()) {
+							MessageDialog.openError(getSite().getShell(), TypeHierarchyMessages.TypeHierarchyViewPart_error_title, TypeHierarchyMessages.TypeHierarchyViewPart_error_message);
+							return;
+						}
+					} else {
+						int kind= newElements[i].getElementType();
+						if (kind != IJavaElement.JAVA_PROJECT && kind != IJavaElement.PACKAGE_FRAGMENT_ROOT && kind != IJavaElement.PACKAGE_FRAGMENT) {
+							newElements= null;
+							JavaPlugin.logErrorMessage("Invalid type hierarchy input type.");//$NON-NLS-1$
+							return;
+						}
+					}
 				}
 			}
+			if (!javaElements.equals(fInputElements)) {
+				addHistoryEntry(javaElements);
+			}
 		}
-		if (element != null && !element.equals(fInputElement)) {
-			addHistoryEntry(element);
-		}
-
-		updateInput(element);
+		updateInput(newElements);
 		if (memberToSelect != null) {
 			selectMember(memberToSelect);
 		}
@@ -519,8 +573,8 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * Changes the input to a new type
 	 * @param inputElement
 	 */
-	private void updateInput(IJavaElement inputElement) {
-		IJavaElement prevInput= fInputElement;
+	private void updateInput(IJavaElement[] inputElements) {
+		IJavaElement[] prevInput= fInputElements;
 
 		synchronized (this) {
 			if (fRestoreStateJob != null) {
@@ -541,18 +595,19 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 		// separate thread.
 		// Work-around for http://dev.eclipse.org/bugs/show_bug.cgi?id=30881
 		processOutstandingEvents();
-		if (inputElement == null) {
+		if (inputElements == null) {
 			clearInput();
 		} else {
-			if (!inputElement.equals(prevInput)) {
+			if (!inputElements.equals(prevInput)) {
 				for (int i= 0; i < fAllViewers.length; i++) {
 					fAllViewers[i].setInput(null);
 				}
 			}
-			fInputElement= inputElement;
-			fNoHierarchyShownLabel.setText(Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_createinput, JavaElementLabels.getElementLabel(inputElement, JavaElementLabels.ALL_DEFAULT)));
+			fInputElements= inputElements;
+			fNoHierarchyShownLabel
+					.setText(Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_createinput, HistoryAction.getElementLabel(fInputElements)));
 			try {
-				fHierarchyLifeCycle.ensureRefreshedTypeHierarchy(inputElement, JavaPlugin.getActiveWorkbenchWindow());
+				fHierarchyLifeCycle.ensureRefreshedTypeHierarchy(inputElements, JavaPlugin.getActiveWorkbenchWindow());
 				// fHierarchyLifeCycle.ensureRefreshedTypeHierarchy(inputElement, getSite().getWorkbenchWindow());
 			} catch (InvocationTargetException e) {
 				ExceptionHandler.handle(e, getSite().getShell(), TypeHierarchyMessages.TypeHierarchyViewPart_exception_title, TypeHierarchyMessages.TypeHierarchyViewPart_exception_message);
@@ -563,7 +618,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 				return;// panic code. This code wont be executed.
 			}
 
-			if (inputElement.getElementType() != IJavaElement.TYPE) {
+			if (inputElements.length == 1 && inputElements[0].getElementType() != IJavaElement.TYPE) {
 				setHierarchyMode(HIERARCHY_MODE_CLASSIC);
 			}
 			updateViewers();
@@ -576,7 +631,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * @since 3.6
 	 */
 	public void updateViewers() {
-		if (fInputElement == null)
+		if (fInputElements == null)
 			return;
 		if (!fHierarchyLifeCycle.isRefreshJobRunning()) {
 			setViewersInput();
@@ -588,7 +643,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 		internalSelectType(null, false); // clear selection
 		fIsEnableMemberFilter= false;
 		updateHierarchyViewer(true);
-		IType root= getSelectableType(fInputElement);
+		IType root= getSelectableType(fInputElements);
 		internalSelectType(root, true);
 		updateMethodViewer(root);
 		updateToolbarButtons();
@@ -605,17 +660,19 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	}
 
 	private void clearInput() {
-		fInputElement= null;
+		fInputElements= null;
 		fHierarchyLifeCycle.freeHierarchy();
 
 		updateHierarchyViewer(false);
 		updateToolbarButtons();
 		updateToolTipAndDescription();
+		getViewSite().getActionBars().getStatusLineManager().setMessage(""); //$NON-NLS-1$		
 	}
 
 	/*
 	 * @see IWorbenchPart#setFocus
 	 */
+	@Override
 	public void setFocus() {
 		fPagebook.setFocus();
 	}
@@ -623,6 +680,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	/*
 	 * @see IWorkbenchPart#dispose
 	 */
+	@Override
 	public void dispose() {
 		if (fHierarchyLifeCycle != null) {
 			fHierarchyLifeCycle.freeHierarchy();
@@ -654,6 +712,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
 	 */
+	@Override
 	public Object getAdapter(Class key) {
 		if (key == IShowInSource.class) {
 			return getShowInSource();
@@ -717,6 +776,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 	private KeyListener createKeyListener() {
 		return new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent event) {
 				if (event.stateMask == 0) {
 					if (event.keyCode == SWT.F5) {
@@ -757,6 +817,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 		fMethodsViewer.addPostSelectionChangedListener(fSelectionChangedListener);
 
 		new OpenAndLinkWithEditorHelper(fMethodsViewer) {
+			@Override
 			protected void activate(ISelection selection) {
 				try {
 					final Object selectedElement= SelectionUtil.getSingleElement(selection);
@@ -767,10 +828,12 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 				}
 			}
 
+			@Override
 			protected void linkToEditor(ISelection selection) {
 				// do nothing: this is handled in more detail by the part itself
 			}
 
+			@Override
 			protected void open(ISelection selection, boolean activate) {
 				if (selection instanceof IStructuredSelection)
 					fOpenAction.run((IStructuredSelection)selection);
@@ -834,6 +897,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * Returns the inner component in a workbench part.
 	 * @see IWorkbenchPart#createPartControl(Composite)
 	 */
+	@Override
 	public void createPartControl(Composite container) {
 		fParent= container;
     	addResizeListener(container);
@@ -938,15 +1002,10 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 		getSite().setSelectionProvider(fSelectionProviderMediator);
 		getSite().getPage().addPartListener(fPartListener);
 
-		// see http://bugs.eclipse.org/bugs/show_bug.cgi?id=33657
-		IJavaElement input= null; //determineInputElement();
-		if (fMemento != null) {
-			restoreState(fMemento, input);
-		//} else if (input != null) {
-		//	setInputElement(input);
-		} else {
+		if (fMemento != null)
+			restoreState(fMemento);
+		else
 			setViewerVisibility(false);
-		}
 
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(fPagebook, IJavaHelpContextIds.TYPE_HIERARCHY_VIEW);
 
@@ -1140,11 +1199,11 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 		}
 	}
 
-	private IType getSelectableType(IJavaElement elem) {
-		if (elem.getElementType() != IJavaElement.TYPE) {
+	private IType getSelectableType(IJavaElement[] elem) {
+		if (elem[0].getElementType() != IJavaElement.TYPE) {
 			return getCurrentViewer().getTreeRootType();
 		} else {
-			return (IType) elem;
+			return (IType)elem[0];
 		}
 	}
 
@@ -1161,7 +1220,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * the current tree
 	 */
 	private void updateHierarchyViewer(final boolean doExpand) {
-		if (fInputElement == null) {
+		if (fInputElements == null) {
 			fNoHierarchyShownLabel.setText(TypeHierarchyMessages.TypeHierarchyViewPart_empty);
 			fPagebook.showPage(fNoHierarchyShownLabel);
 		} else {
@@ -1176,7 +1235,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 					setViewerVisibility(true);
 				}
 			} else if (!isKeepShowingEmptyViewers()) {//Show the empty hierarchy viewer till fresh computation is done.
-				fEmptyTypesViewer.setText(Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_nodecl, JavaElementLabels.getElementLabel(fInputElement, JavaElementLabels.ALL_DEFAULT)));
+				fEmptyTypesViewer.setText(Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_nodecl, HistoryAction.getElementLabel(fInputElements)));
 				setViewerVisibility(false);
 			}
 		}
@@ -1223,7 +1282,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 	private void methodSelectionChanged(ISelection sel) {
 		if (sel instanceof IStructuredSelection) {
-			List selected= ((IStructuredSelection)sel).toList();
+			List<?> selected= ((IStructuredSelection)sel).toList();
 			int nSelected= selected.size();
 			if (fIsEnableMemberFilter) {
 				IMember[] memberFilter= null;
@@ -1244,10 +1303,10 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 	private void typeSelectionChanged(ISelection sel) {
 		if (sel instanceof IStructuredSelection) {
-			List selected= ((IStructuredSelection)sel).toList();
+			List<?> selected= ((IStructuredSelection)sel).toList();
 			int nSelected= selected.size();
 			if (nSelected != 0) {
-				List types= new ArrayList(nSelected);
+				List<Object> types= new ArrayList<Object>(nSelected);
 				for (int i= nSelected-1; i >= 0; i--) {
 					Object elem= selected.get(i);
 					if (elem instanceof IType && !types.contains(elem)) {
@@ -1308,18 +1367,44 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	}
 
 	private void updateToolTipAndDescription() {
-		String tooltip;
+		String tooltip= ""; //$NON-NLS-1$
 		String description;
-		if (fInputElement != null) {
+		if (fInputElements != null && fInputElements.length != 0) {
 			IWorkingSet workingSet= fWorkingSetActionGroup.getWorkingSet();
-			String elementName= JavaElementLabels.getElementLabel(fInputElement, JavaElementLabels.ALL_DEFAULT);
+			String[] elementLabel= null;
 			if (workingSet == null) {
-				description= elementName;
-				tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_tooltip, elementName);
+				description= HistoryAction.getElementLabel(fInputElements);
+				switch (fInputElements.length) {
+					case 1:
+						elementLabel= new String[] { HistoryAction.getShortLabel(fInputElements[0]) };
+						tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_tooltip, elementLabel);
+						break;
+					case 2:
+						elementLabel= new String[] { HistoryAction.getShortLabel(fInputElements[0]), HistoryAction.getShortLabel(fInputElements[1]) };
+						tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_tooltip2, elementLabel);
+						break;
+					default:
+						elementLabel= new String[] { HistoryAction.getShortLabel(fInputElements[0]), HistoryAction.getShortLabel(fInputElements[1]) };
+						tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_tooltip_more, elementLabel);
+				}
 			} else {
-				String[] args= new String[] { elementName, workingSet.getLabel() };
-				description= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_description, args);
-				tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_tooltip, args);
+				switch (fInputElements.length) {
+					case 1:
+						elementLabel= new String[] { HistoryAction.getShortLabel(fInputElements[0]), workingSet.getLabel() };
+						description= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_description, elementLabel);
+						tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_tooltip, elementLabel);
+						break;
+					case 2:
+						elementLabel= new String[] { HistoryAction.getShortLabel(fInputElements[0]), HistoryAction.getShortLabel(fInputElements[1]), workingSet.getLabel() };
+						description= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_description2, elementLabel);
+						tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_tooltip2, elementLabel);
+						break;
+					default:
+						elementLabel= new String[] { HistoryAction.getShortLabel(fInputElements[0]), HistoryAction.getShortLabel(fInputElements[1]), workingSet.getLabel() };
+						description= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_description_more, elementLabel);
+						tooltip= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_ws_tooltip_more, elementLabel);
+				}
+
 			}
 		} else {
 			description= ""; //$NON-NLS-1$
@@ -1330,11 +1415,12 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	}
 
 	private void updateToolbarButtons() {
-		boolean isType= fInputElement instanceof IType;
+		boolean isNull= fInputElements == null;
+		boolean isType= !isNull && fInputElements.length == 1 && fInputElements[0] instanceof IType;
 		for (int i= 0; i < fViewActions.length; i++) {
 			ToggleViewAction action= fViewActions[i];
 			if (action.getViewerIndex() == HIERARCHY_MODE_CLASSIC) {
-				action.setEnabled(fInputElement != null);
+				action.setEnabled(!isNull);
 			} else {
 				action.setEnabled(isType);
 			}
@@ -1349,10 +1435,10 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 			fCurrentViewerIndex= viewerIndex;
 
 			updateHierarchyViewer(true);
-			if (fInputElement != null) {
+			if (fInputElements != null) {
 				ISelection currSelection= getCurrentViewer().getSelection();
 				if (currSelection == null || currSelection.isEmpty()) {
-					internalSelectType(getSelectableType(fInputElement), false);
+					internalSelectType(getSelectableType(fInputElements), false);
 					currSelection= getCurrentViewer().getSelection();
 				}
 				if (!fIsEnableMemberFilter) {
@@ -1367,6 +1453,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 			if (fTypeOpenAndLinkWithEditorHelper != null)
 				fTypeOpenAndLinkWithEditorHelper.dispose();
 			fTypeOpenAndLinkWithEditorHelper= new OpenAndLinkWithEditorHelper(getCurrentViewer()) {
+				@Override
 				protected void activate(ISelection selection) {
 					try {
 						final Object selectedElement= SelectionUtil.getSingleElement(selection);
@@ -1377,10 +1464,12 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 					}
 				}
 
+				@Override
 				protected void linkToEditor(ISelection selection) {
 					// do nothing: this is handled in more detailed by the part itself
 				}
 
+				@Override
 				protected void open(ISelection selection, boolean activate) {
 					if (selection instanceof IStructuredSelection)
 						fOpenAction.run((IStructuredSelection)selection);
@@ -1499,7 +1588,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 			if (changedTypes == null) {
 				// hierarchy change
 				try {
-					fHierarchyLifeCycle.ensureRefreshedTypeHierarchy(fInputElement, getSite().getWorkbenchWindow());
+					fHierarchyLifeCycle.ensureRefreshedTypeHierarchy(fInputElements, getSite().getWorkbenchWindow());
 				} catch (InvocationTargetException e) {
 					ExceptionHandler.handle(e, getSite().getShell(), TypeHierarchyMessages.TypeHierarchyViewPart_exception_title, TypeHierarchyMessages.TypeHierarchyViewPart_exception_message);
 					clearInput();
@@ -1531,6 +1620,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	/*
 	 * @see IViewPart#init
 	 */
+	@Override
 	public void init(IViewSite site, IMemento memento) throws PartInitException {
 		super.init(site, memento);
 		fMemento= memento;
@@ -1539,6 +1629,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	/*
 	 * @see ViewPart#saveState(IMemento)
 	 */
+	@Override
 	public void saveState(IMemento memento) {
 		if (fPagebook == null) {
 			// part has not been created
@@ -1547,9 +1638,12 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 			}
 			return;
 		}
-		if (fInputElement != null) {
-			String handleIndentifier=  fInputElement.getHandleIdentifier();
-			memento.putString(TAG_INPUT, handleIndentifier);
+		if (fInputElements != null) {
+			memento.putString(TAG_INPUT, fInputElements[0].getHandleIdentifier());
+			for (int i= 1; i < fInputElements.length; i++) {
+				IJavaElement element= fInputElements[i];
+				memento.putString(TAG_INPUT + i, element.getHandleIdentifier());
+			}
 		}
 		memento.putInteger(TAG_VIEW, getHierarchyMode());
 		memento.putInteger(TAG_LAYOUT, getViewLayout());
@@ -1577,25 +1671,31 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	/*
 	 * Restores the type hierarchy settings from a memento.
 	 */
-	private void restoreState(final IMemento memento, IJavaElement defaultInput) {
-		IJavaElement input= defaultInput;
+	private void restoreState(final IMemento memento) {
+		IJavaElement input= null;
+		List<IJavaElement> inputList= new ArrayList<IJavaElement>();
 		String elementId= memento.getString(TAG_INPUT);
-		if (elementId != null) {
+		int i= 0;
+		while (elementId != null) {
 			input= JavaCore.create(elementId);
-			if (input != null && !input.exists()) {
-				input= null;
+			if (input == null || !input.exists()) {
+				inputList= null;
+				break;
 			}
+			inputList.add(input);
+			elementId= memento.getString(TAG_INPUT + ++i);
 		}
-		if (input == null) {
+		if (inputList == null || inputList.size() == 0) {
 			doRestoreState(memento, input);
 		} else {
-			final IJavaElement hierarchyInput= input;
+			final IJavaElement[] hierarchyInput= inputList.toArray(new IJavaElement[inputList.size()]);
 
 			synchronized (this) {
-				String label= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_restoreinput, JavaElementLabels.getElementLabel(hierarchyInput, JavaElementLabels.ALL_DEFAULT));
+				String label= Messages.format(TypeHierarchyMessages.TypeHierarchyViewPart_restoreinput, HistoryAction.getElementLabel(hierarchyInput));
 				fNoHierarchyShownLabel.setText(label);
 
 				fRestoreStateJob= new Job(label) {
+					@Override
 					protected IStatus run(IProgressMonitor monitor) {
 						try {
 							doRestoreInBackground(memento, hierarchyInput, monitor);
@@ -1615,7 +1715,8 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 		}
 	}
 
-	private void doRestoreInBackground(final IMemento memento, final IJavaElement hierarchyInput, IProgressMonitor monitor) throws JavaModelException {
+
+	private void doRestoreInBackground(final IMemento memento, final IJavaElement[] hierarchyInput, IProgressMonitor monitor) throws JavaModelException {
 		fHierarchyLifeCycle.doHierarchyRefresh(hierarchyInput, monitor);
 		final boolean doRestore= !monitor.isCanceled();
 		if (doRestore) {
@@ -1632,6 +1733,17 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 
 	final void doRestoreState(IMemento memento, IJavaElement input) {
+		doRestoreState(memento, input == null ? null : new IJavaElement[] { input });
+	}
+
+	/**
+	 * Restores the state of the type hierarchy view from the memento.
+	 * 
+	 * @param memento the memento
+	 * @param input the input java elements
+	 * @since 3.7
+	 */
+	final void doRestoreState(IMemento memento, IJavaElement[] input) {
 		synchronized (this) {
 			if (fRestoreStateJob == null) {
 				return;
@@ -1641,7 +1753,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 
 		fWorkingSetActionGroup.restoreState(memento);
 		setKeepShowingEmptyViewers(false);
-		setInputElement(input);
+		setInputElements(input);
 
 		Integer viewerIndex= memento.getInteger(TAG_VIEW);
 		if (viewerIndex != null) {
@@ -1700,7 +1812,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 		if (!isLinkingEnabled()) {
 			return;
 		}
-		if (fInputElement == null) {
+		if (fInputElements == null) {
 			// no type hierarchy shown
 			return;
 		}
@@ -1723,7 +1835,7 @@ public class TypeHierarchyViewPart extends ViewPart implements ITypeHierarchyVie
 	 * @see org.eclipse.jdt.internal.ui.viewsupport.IViewPartInputProvider#getViewPartInput()
 	 */
 	public Object getViewPartInput() {
-		return fInputElement;
+		return fInputElements;
 	}
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java
index 8de301a..7cb81ef 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -169,6 +169,7 @@ public abstract class TypeHierarchyViewer extends ProblemTreeViewer {
 	 * @see StructuredViewer#setContentProvider
 	 * Content provider must be of type TypeHierarchyContentProvider
 	 */
+	@Override
 	public void setContentProvider(IContentProvider cp) {
 		Assert.isTrue(cp instanceof TypeHierarchyContentProvider);
 		super.setContentProvider(cp);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/BusyIndicatorRunnableContext.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/BusyIndicatorRunnableContext.java
index 66d5fa5..66da330 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/BusyIndicatorRunnableContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/BusyIndicatorRunnableContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public class BusyIndicatorRunnableContext implements IRunnableContext {
 				super(name);
 				fRunnable= runnable;
 			}
+			@Override
 			public void run() {
 				try {
 					fRunnable.run(new NullProgressMonitor());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java
index d1c9ddb..4410b7d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -138,6 +138,7 @@ public class CoreUtility {
 		/* (non-Javadoc)
 		 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 		 */
+		@Override
 		protected IStatus run(IProgressMonitor monitor) {
 			synchronized (getClass()) {
 				if (monitor.isCanceled()) {
@@ -173,6 +174,7 @@ public class CoreUtility {
 			}
 			return Status.OK_STATUS;
 		}
+		@Override
 		public boolean belongsTo(Object family) {
 			return ResourcesPlugin.FAMILY_MANUAL_BUILD == family;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java
index 1e3813b..a68938b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -189,7 +189,7 @@ public class ElementValidator {
 	}
 
 	private static IResource[] getResources(IAdaptable[] elements) {
-		Set result= new HashSet();
+		Set<IResource> result= new HashSet<IResource>();
 		for (int i= 0; i < elements.length; i++) {
 			IAdaptable element= elements[i];
 			IResource resource= null;
@@ -206,6 +206,6 @@ public class ElementValidator {
 			if (resource != null)
 				result.add(resource);
 		}
-		return (IResource[]) result.toArray(new IResource[result.size()]);
+		return result.toArray(new IResource[result.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavaUIHelp.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavaUIHelp.java
index 1b4dd8a..1ae165b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavaUIHelp.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavaUIHelp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -96,7 +96,7 @@ public class JavaUIHelp {
 					}
 				} else if (fEditor != null) {
 					IJavaElement input= SelectionConverter.getInput(fEditor);
-					if (ActionUtil.isOnBuildPath(input)) {
+					if (input != null && ActionUtil.isOnBuildPath(input)) {
 						selected= SelectionConverter.codeResolve(fEditor);
 					}
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java
index f81886a..9b508c6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,7 +95,7 @@ public class JavadocHelpContext implements IContext2 {
 		if (context instanceof IContext2)
 			fTitle= ((IContext2)context).getTitle();
 
-		List helpResources= new ArrayList();
+		List<IHelpResource> helpResources= new ArrayList<IHelpResource>();
 
 		String javadocSummary= null;
 		for (int i= 0; i < elements.length; i++) {
@@ -150,7 +150,7 @@ public class JavadocHelpContext implements IContext2 {
 			}
 		}
 
-		fHelpResources= (IHelpResource[]) helpResources.toArray(new IHelpResource[helpResources.size()]);
+		fHelpResources= helpResources.toArray(new IHelpResource[helpResources.size()]);
 
 		if (context != null)
 			fText= context.getText();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/MainMethodSearchEngine.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/MainMethodSearchEngine.java
index 6b7af01..d1b3a7d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/MainMethodSearchEngine.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/MainMethodSearchEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,10 +42,10 @@ import org.eclipse.jdt.internal.ui.JavaPlugin;
 public class MainMethodSearchEngine{
 
 	private static class MethodCollector extends SearchRequestor {
-			private List fResult;
+			private List<IType> fResult;
 			private int fStyle;
 
-			public MethodCollector(List result, int style) {
+			public MethodCollector(List<IType> result, int style) {
 				Assert.isNotNull(result);
 				fResult= result;
 				fStyle= style;
@@ -62,6 +62,7 @@ public class MainMethodSearchEngine{
 			/* (non-Javadoc)
 			 * @see org.eclipse.jdt.core.search.SearchRequestor#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch)
 			 */
+			@Override
 			public void acceptSearchMatch(SearchMatch match) throws CoreException {
 				Object enclosingElement= match.getElement();
 				if (enclosingElement instanceof IMethod) { // defensive code
@@ -97,14 +98,14 @@ public class MainMethodSearchEngine{
 	 * @throws CoreException
 	 */
 	public IType[] searchMainMethods(IProgressMonitor pm, IJavaSearchScope scope, int style) throws CoreException {
-		List typesFound= new ArrayList(200);
+		List<IType> typesFound= new ArrayList<IType>(200);
 
 		SearchPattern pattern= SearchPattern.createPattern("main(String[]) void", //$NON-NLS-1$
 				IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE);
 		SearchRequestor requestor= new MethodCollector(typesFound, style);
 		new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(), scope, requestor, pm);
 
-		return (IType[]) typesFound.toArray(new IType[typesFound.size()]);
+		return typesFound.toArray(new IType[typesFound.size()]);
 	}
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/OpenTypeHierarchyUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/OpenTypeHierarchyUtil.java
index 6b8093c..adeda05 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/OpenTypeHierarchyUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/OpenTypeHierarchyUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,6 @@ import org.eclipse.jdt.ui.PreferenceConstants;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaUIMessages;
-import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
 import org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart;
 
 public class OpenTypeHierarchyUtil {
@@ -54,22 +53,14 @@ public class OpenTypeHierarchyUtil {
 	public static TypeHierarchyViewPart open(IJavaElement[] candidates, IWorkbenchWindow window) {
 		Assert.isTrue(candidates != null && candidates.length != 0);
 
-		IJavaElement input= null;
-		if (candidates.length > 1) {
-			String title= JavaUIMessages.OpenTypeHierarchyUtil_selectionDialog_title;
-			String message= JavaUIMessages.OpenTypeHierarchyUtil_selectionDialog_message;
-			input= SelectionConverter.selectJavaElement(candidates, window.getShell(), title, message);
-		} else {
-			input= candidates[0];
-		}
-		if (input == null)
+		if (candidates == null)
 			return null;
 
 		try {
 			if (PreferenceConstants.OPEN_TYPE_HIERARCHY_IN_PERSPECTIVE.equals(PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.OPEN_TYPE_HIERARCHY))) {
-				return openInPerspective(window, input);
+				return openInPerspective(window, candidates);
 			} else {
-				return openInViewPart(window, input);
+				return openInViewPart(window, candidates);
 			}
 
 		} catch (WorkbenchException e) {
@@ -84,7 +75,7 @@ public class OpenTypeHierarchyUtil {
 		return null;
 	}
 
-	private static TypeHierarchyViewPart openInViewPart(IWorkbenchWindow window, IJavaElement input) {
+	private static TypeHierarchyViewPart openInViewPart(IWorkbenchWindow window, IJavaElement[] input) {
 		IWorkbenchPage page= window.getActivePage();
 		try {
 			TypeHierarchyViewPart result= (TypeHierarchyViewPart) page.findView(JavaUI.ID_TYPE_HIERARCHY);
@@ -92,7 +83,7 @@ public class OpenTypeHierarchyUtil {
 				result.clearNeededRefresh(); // avoid refresh of old hierarchy on 'becomes visible'
 			}
 			result= (TypeHierarchyViewPart) page.showView(JavaUI.ID_TYPE_HIERARCHY);
-			result.setInputElement(input);
+			result.setInputElements(input);
 			return result;
 		} catch (CoreException e) {
 			ExceptionHandler.handle(e, window.getShell(),
@@ -101,17 +92,15 @@ public class OpenTypeHierarchyUtil {
 		return null;
 	}
 
-	private static TypeHierarchyViewPart openInPerspective(IWorkbenchWindow window, IJavaElement input) throws WorkbenchException, JavaModelException {
+	private static TypeHierarchyViewPart openInPerspective(IWorkbenchWindow window, IJavaElement[] input) throws WorkbenchException, JavaModelException {
 		IWorkbench workbench= JavaPlugin.getDefault().getWorkbench();
-		// The problem is that the input element can be a working copy. So we first convert it to the original element if
-		// it exists.
-		IJavaElement perspectiveInput= input;
+		IJavaElement perspectiveInput= input.length == 1 ? input[0] : null;
 
-		if (input instanceof IMember) {
-			if (input.getElementType() != IJavaElement.TYPE) {
-				perspectiveInput= ((IMember)input).getDeclaringType();
+		if (perspectiveInput != null && input[0] instanceof IMember) {
+			if (input[0].getElementType() != IJavaElement.TYPE) {
+				perspectiveInput= ((IMember)input[0]).getDeclaringType();
 			} else {
-				perspectiveInput= input;
+				perspectiveInput= input[0];
 			}
 		}
 		IWorkbenchPage page= workbench.showPerspective(JavaUI.ID_HIERARCHYPERSPECTIVE, window, perspectiveInput);
@@ -121,10 +110,10 @@ public class OpenTypeHierarchyUtil {
 			part.clearNeededRefresh(); // avoid refresh of old hierarchy on 'becomes visible'
 		}
 		part= (TypeHierarchyViewPart) page.showView(JavaUI.ID_TYPE_HIERARCHY);
-		part.setInputElement(input);
-		if (input instanceof IMember) {
+		part.setInputElements(input);
+		if (perspectiveInput != null) {
 			if (page.getEditorReferences().length == 0) {
-				JavaUI.openInEditor(input, false, false); // only open when the perspecive has been created
+				JavaUI.openInEditor(input[0], false, false); // only open when the perspective has been created
 			}
 		}
 		return part;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SWTUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SWTUtil.java
index b559837..7ecd768 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SWTUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SWTUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.jdt.internal.ui.util;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.ACC;
 import org.eclipse.swt.accessibility.AccessibleAdapter;
 import org.eclipse.swt.accessibility.AccessibleEvent;
 import org.eclipse.swt.dnd.DragSource;
@@ -21,7 +22,6 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Caret;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.ScrollBar;
 import org.eclipse.swt.widgets.Shell;
@@ -51,20 +51,6 @@ public class SWTUtil {
 	public static final int COMBO_VISIBLE_ITEM_COUNT= 30;
 
 	/**
-	 * Returns the standard display to be used. The method first checks, if
-	 * the thread calling this method has an associated display. If so, this
-	 * display is returned. Otherwise the method returns the default display.
-	 * @return returns the standard display to be used
-	 */
-	public static Display getStandardDisplay() {
-		Display display;
-		display= Display.getCurrent();
-		if (display == null)
-			display= Display.getDefault();
-		return display;
-	}
-
-	/**
 	 * Returns the shell for the given widget. If the widget doesn't represent
 	 * a SWT object that manage a shell, <code>null</code> is returned.
 	 * @param widget the widget
@@ -134,8 +120,11 @@ public class SWTUtil {
 	 */
 	public static void setAccessibilityText(Control control, final String text) {
 		control.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			@Override
 			public void getName(AccessibleEvent e) {
-				e.result= text;
+				if (e.childID == ACC.CHILDID_SELF) {
+					e.result= text;
+				}
 			}
 		});
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java
index 214480d..5cdcac3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,7 @@ import org.eclipse.ui.part.ISetSelectionTarget;
 
 public class SelectionUtil {
 
-	public static List toList(ISelection selection) {
+	public static List<?> toList(ISelection selection) {
 		if (selection instanceof IStructuredSelection)
 			return ((IStructuredSelection) selection).toList();
 		return null;
@@ -81,7 +81,7 @@ public class SelectionUtil {
 		}
 
 		// get all the view and editor parts
-		List parts= new ArrayList();
+		List<IWorkbenchPart> parts= new ArrayList<IWorkbenchPart>();
 		IWorkbenchPartReference refs[]= page.getViewReferences();
 		for (int i= 0; i < refs.length; i++) {
 			IWorkbenchPart part= refs[i].getPart(false);
@@ -97,9 +97,9 @@ public class SelectionUtil {
 		}
 
 		final ISelection selection= new StructuredSelection(resources);
-		Iterator itr= parts.iterator();
+		Iterator<IWorkbenchPart> itr= parts.iterator();
 		while (itr.hasNext()) {
-			IWorkbenchPart part= (IWorkbenchPart) itr.next();
+			IWorkbenchPart part= itr.next();
 
 			// get the part's ISetSelectionTarget implementation
 			ISetSelectionTarget target= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/StringMatcher.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/StringMatcher.java
index b38958f..8a38792 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/StringMatcher.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/StringMatcher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -239,7 +239,7 @@ public class StringMatcher {
 			}
 		}
 
-		Vector temp= new Vector();
+		Vector<String> temp= new Vector<String>();
 
 		int pos= 0;
 		StringBuffer buf= new StringBuffer();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TableLayoutComposite.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TableLayoutComposite.java
index c8535a2..85b71b4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TableLayoutComposite.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TableLayoutComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,7 +60,7 @@ public class TableLayoutComposite extends Composite {
 			COLUMN_TRIM= 3;
 	}
 
-	private List columns= new ArrayList();
+	private List<ColumnLayoutData> columns= new ArrayList<ColumnLayoutData>();
 
 	/**
 	 * Creates a new <code>TableLayoutComposite</code>.
@@ -71,7 +71,8 @@ public class TableLayoutComposite extends Composite {
 	public TableLayoutComposite(Composite parent, int style) {
 		super(parent, style);
         addControlListener(new ControlAdapter() {
-            public void controlResized(ControlEvent e) {
+            @Override
+			public void controlResized(ControlEvent e) {
                 Rectangle area= getClientArea();
                 Table table= (Table)getChildren()[0];
                 Point preferredSize= computeTableSize(table);
@@ -104,7 +105,7 @@ public class TableLayoutComposite extends Composite {
 		int width= 0;
 		int size= columns.size();
 		for (int i= 0; i < size; ++i) {
-			ColumnLayoutData layoutData= (ColumnLayoutData) columns.get(i);
+			ColumnLayoutData layoutData= columns.get(i);
 			if (layoutData instanceof ColumnPixelData) {
 				ColumnPixelData col= (ColumnPixelData) layoutData;
 				width += col.width;
@@ -140,7 +141,7 @@ public class TableLayoutComposite extends Composite {
 
 		// First calc space occupied by fixed columns
 		for (int i= 0; i < size; i++) {
-			ColumnLayoutData col= (ColumnLayoutData) columns.get(i);
+			ColumnLayoutData col= columns.get(i);
 			if (col instanceof ColumnPixelData) {
 				ColumnPixelData cpd= (ColumnPixelData) col;
 				int pixels= cpd.width;
@@ -167,7 +168,7 @@ public class TableLayoutComposite extends Composite {
 			int rest= width - fixedWidth;
 			int totalDistributed= 0;
 			for (int i= 0; i < size; ++i) {
-				ColumnLayoutData col= (ColumnLayoutData) columns.get(i);
+				ColumnLayoutData col= columns.get(i);
 				if (col instanceof ColumnWeightData) {
 					ColumnWeightData cw= (ColumnWeightData) col;
 					// calculate weight as above
@@ -186,7 +187,7 @@ public class TableLayoutComposite extends Composite {
 			for (int i= 0; diff > 0; ++i) {
 				if (i == size)
 					i= 0;
-				ColumnLayoutData col= (ColumnLayoutData) columns.get(i);
+				ColumnLayoutData col= columns.get(i);
 				if (col instanceof ColumnWeightData) {
 					++widths[i];
 					--diff;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TypeNameMatchLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TypeNameMatchLabelProvider.java
index 31a47f3..ae2c9e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TypeNameMatchLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/TypeNameMatchLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ public class TypeNameMatchLabelProvider extends LabelProvider {
 	/* non java-doc
 	 * @see ILabelProvider#getText
 	 */
+	@Override
 	public String getText(Object element) {
 		if (! (element instanceof TypeNameMatch))
 			return super.getText(element);
@@ -57,6 +58,7 @@ public class TypeNameMatchLabelProvider extends LabelProvider {
 	/* non java-doc
 	 * @see ILabelProvider#getImage
 	 */
+	@Override
 	public Image getImage(Object element) {
 		if (! (element instanceof TypeNameMatch))
 			return super.getImage(element);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/AppearanceAwareLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/AppearanceAwareLabelProvider.java
index e7cd9d8..2cece74 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/AppearanceAwareLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/AppearanceAwareLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,7 +65,7 @@ public class AppearanceAwareLabelProvider extends JavaUILabelProvider implements
 			fTextFlagMask ^= JavaElementLabels.M_APP_TYPE_PARAMETERS;
 		}
 		if (!(store.getBoolean(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES)
-				|| store.getBoolean(JavaElementLabelComposer.APPEARANCE_ABBREVIATE_PACKAGE_NAMES))) {
+				|| store.getBoolean(PreferenceConstants.APPEARANCE_ABBREVIATE_PACKAGE_NAMES))) {
 			fTextFlagMask ^= JavaElementLabels.P_COMPRESSED;
 		}
 		if (!store.getBoolean(PreferenceConstants.APPEARANCE_CATEGORY)) {
@@ -85,8 +85,8 @@ public class AppearanceAwareLabelProvider extends JavaUILabelProvider implements
 				|| property.equals(PreferenceConstants.APPEARANCE_CATEGORY)
 				|| property.equals(PreferenceConstants.APPEARANCE_PKG_NAME_PATTERN_FOR_PKG_VIEW)
 				|| property.equals(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES)
-				|| property.equals(JavaElementLabelComposer.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW)
-				|| property.equals(JavaElementLabelComposer.APPEARANCE_ABBREVIATE_PACKAGE_NAMES)) {
+				|| property.equals(PreferenceConstants.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW)
+				|| property.equals(PreferenceConstants.APPEARANCE_ABBREVIATE_PACKAGE_NAMES)) {
 			initMasks();
 			LabelProviderChangedEvent lpEvent= new LabelProviderChangedEvent(this, null); // refresh all
 			fireLabelProviderChanged(lpEvent);
@@ -105,6 +105,7 @@ public class AppearanceAwareLabelProvider extends JavaUILabelProvider implements
 	/*
 	 * @see IBaseLabelProvider#dispose()
 	 */
+	@Override
 	public void dispose() {
 		PreferenceConstants.getPreferenceStore().removePropertyChangeListener(this);
 		PlatformUI.getWorkbench().getEditorRegistry().removePropertyListener(this);
@@ -114,6 +115,7 @@ public class AppearanceAwareLabelProvider extends JavaUILabelProvider implements
 	/*
 	 * @see JavaUILabelProvider#evaluateImageFlags()
 	 */
+	@Override
 	protected int evaluateImageFlags(Object element) {
 		return getImageFlags() & fImageFlagMask;
 	}
@@ -121,6 +123,7 @@ public class AppearanceAwareLabelProvider extends JavaUILabelProvider implements
 	/*
 	 * @see JavaUILabelProvider#evaluateTextFlags()
 	 */
+	@Override
 	protected long evaluateTextFlags(Object element) {
 		return getTextFlags() & fTextFlagMask;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLabelProvider.java
index 1dea8e2..bc312f6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,19 +43,25 @@ public class BindingLabelProvider extends LabelProvider {
 
 	private static int getAdornmentFlags(IBinding binding) {
 		int adornments= 0;
-		if (binding instanceof IMethodBinding && ((IMethodBinding) binding).isConstructor())
-			adornments|= JavaElementImageDescriptor.CONSTRUCTOR;
 		final int modifiers= binding.getModifiers();
 		if (Modifier.isAbstract(modifiers))
 			adornments|= JavaElementImageDescriptor.ABSTRACT;
 		if (Modifier.isFinal(modifiers))
 			adornments|= JavaElementImageDescriptor.FINAL;
-		if (Modifier.isSynchronized(modifiers))
-			adornments|= JavaElementImageDescriptor.SYNCHRONIZED;
 		if (Modifier.isStatic(modifiers))
 			adornments|= JavaElementImageDescriptor.STATIC;
+		
 		if (binding.isDeprecated())
 			adornments|= JavaElementImageDescriptor.DEPRECATED;
+		
+		if (binding instanceof IMethodBinding) {
+			if (((IMethodBinding) binding).isConstructor())
+				adornments|= JavaElementImageDescriptor.CONSTRUCTOR;
+			if (Modifier.isSynchronized(modifiers))
+				adornments|= JavaElementImageDescriptor.SYNCHRONIZED;
+			if (Modifier.isNative(modifiers))
+				adornments|= JavaElementImageDescriptor.NATIVE;
+		}
 		if (binding instanceof IVariableBinding && ((IVariableBinding) binding).isField()) {
 			if (Modifier.isTransient(modifiers))
 				adornments|= JavaElementImageDescriptor.TRANSIENT;
@@ -504,6 +510,7 @@ public class BindingLabelProvider extends LabelProvider {
 	/*
 	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
 	 */
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof IBinding) {
 			ImageDescriptor baseImage= getBindingImageDescriptor((IBinding) element, fImageFlags);
@@ -523,6 +530,7 @@ public class BindingLabelProvider extends LabelProvider {
 	/*
 	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 	 */
+	@Override
 	public String getText(Object element) {
 		if (element instanceof IBinding) {
 			return getBindingLabel((IBinding) element, fTextFlags);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java
index e76678a..cff571e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,10 +34,10 @@ public class ColoredViewersManager implements IPropertyChangeListener {
 
 	private static ColoredViewersManager fgInstance= new ColoredViewersManager();
 
-	private Set fManagedLabelProviders;
+	private Set<ColoringLabelProvider> fManagedLabelProviders;
 
 	public ColoredViewersManager() {
-		fManagedLabelProviders= new HashSet();
+		fManagedLabelProviders= new HashSet<ColoringLabelProvider>();
 	}
 
 	public void installColoredLabels(ColoringLabelProvider labelProvider) {
@@ -82,8 +82,8 @@ public class ColoredViewersManager implements IPropertyChangeListener {
 	}
 
 	protected final void updateAllViewers() {
-		for (Iterator iterator= fManagedLabelProviders.iterator(); iterator.hasNext();) {
-			ColoringLabelProvider lp= (ColoringLabelProvider) iterator.next();
+		for (Iterator<ColoringLabelProvider> iterator= fManagedLabelProviders.iterator(); iterator.hasNext();) {
+			ColoringLabelProvider lp= iterator.next();
 			lp.update();
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoringLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoringLabelProvider.java
index ac3fec8..eaff8b4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoringLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoringLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ public class ColoringLabelProvider extends DecoratingStyledCellLabelProvider imp
 		super(labelProvider, decorator, decorationContext);
 	}
 
+	@Override
 	public void initialize(ColumnViewer viewer, ViewerColumn column) {
 		ColoredViewersManager.install(this);
 		setOwnerDrawEnabled(ColoredViewersManager.showColoredLabels());
@@ -45,6 +46,7 @@ public class ColoringLabelProvider extends DecoratingStyledCellLabelProvider imp
 		super.initialize(viewer, column);
 	}
 
+	@Override
 	public void dispose() {
 		super.dispose();
 		ColoredViewersManager.uninstall(this);
@@ -71,6 +73,7 @@ public class ColoringLabelProvider extends DecoratingStyledCellLabelProvider imp
 		}
 	}
 
+	@Override
 	protected StyleRange prepareStyleRange(StyleRange styleRange, boolean applyColors) {
 		if (!applyColors && styleRange.background != null) {
 			styleRange= super.prepareStyleRange(styleRange, applyColors);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java
index f6914ea..e48e1da 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,11 +56,12 @@ public class FilteredElementTreeSelectionDialog extends ElementTreeSelectionDial
 			fIsDeepFiltering= deepFiltering;
 		}
 
+		@Override
 		public void setPattern(String patternString) {
 			super.setPattern(patternString);
 			fMatchers= null;
 			if (patternString != null && patternString.length() > 0) {
-				ArrayList res= new ArrayList();
+				ArrayList<StringMatcher> res= new ArrayList<StringMatcher>();
 				StringTokenizer tok= new StringTokenizer(patternString, ",;"); //$NON-NLS-1$
 				int tokenCount= tok.countTokens();
 				for (int i= 0; i < tokenCount; i++) {
@@ -70,11 +71,12 @@ public class FilteredElementTreeSelectionDialog extends ElementTreeSelectionDial
 					}
 				}
 				if (!res.isEmpty()) {
-					fMatchers= (StringMatcher[]) res.toArray(new StringMatcher[res.size()]);
+					fMatchers= res.toArray(new StringMatcher[res.size()]);
 				}
 			}
 		}
 
+		@Override
 		protected boolean wordMatches(String text) {
 			if (text != null) {
 				if (fMatchers == null || fMatchers.length == 0) {
@@ -93,6 +95,7 @@ public class FilteredElementTreeSelectionDialog extends ElementTreeSelectionDial
 		 * @see org.eclipse.ui.dialogs.PatternFilter#isElementVisible(org.eclipse.jface.viewers.Viewer, java.lang.Object)
 		 * @since 3.5
 		 */
+		@Override
 		public boolean isElementVisible(Viewer viewer, Object element) {
 			boolean hasChildren= ((ITreeContentProvider) ((AbstractTreeViewer) viewer).getContentProvider()).hasChildren(element);
 			if (fIsDeepFiltering) {
@@ -126,6 +129,7 @@ public class FilteredElementTreeSelectionDialog extends ElementTreeSelectionDial
 
 		}
 
+		@Override
 		protected void textChanged() {
 			narrowingDown= previousFilterText == null || getFilterString().startsWith(previousFilterText);
 			previousFilterText= getFilterString();
@@ -133,10 +137,12 @@ public class FilteredElementTreeSelectionDialog extends ElementTreeSelectionDial
 		}
 
 		// This is a copy of the super method, but without auto-expansion.
+		@Override
 		protected WorkbenchJob doCreateRefreshJob() {
 			return new WorkbenchJob("Refresh Filter") {//$NON-NLS-1$
 
 
+				@Override
 				public IStatus runInUIThread(IProgressMonitor monitor) {
 					if (treeViewer.getControl().isDisposed()) {
 						return Status.CANCEL_STATUS;
@@ -213,6 +219,7 @@ public class FilteredElementTreeSelectionDialog extends ElementTreeSelectionDial
 		fInitialFilter= initialFilter;
 	}
 
+	@Override
 	protected TreeViewer doCreateTreeViewer(Composite parent, int style) {
 		FilteredTree tree= new FilteredTreeWithFilter(parent, style, fInitialFilter, fIsDeepFiltering);
 		tree.setLayoutData(new GridData(GridData.FILL_BOTH));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FocusDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FocusDescriptor.java
new file mode 100644
index 0000000..2be8fe9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FocusDescriptor.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+
+/**
+ * An image descriptor that draws a focus adornment on top of a base image.
+ * 
+ * @since 3.7
+ */
+public class FocusDescriptor extends CompositeImageDescriptor {
+	private ImageDescriptor fBase;
+	public FocusDescriptor(ImageDescriptor base) {
+		fBase= base;
+	}
+	@Override
+	protected void drawCompositeImage(int width, int height) {
+		drawImage(getImageData(fBase), 0, 0);
+		drawImage(getImageData(JavaPluginImages.DESC_OVR_FOCUS), 0, 0);
+	}
+
+	private ImageData getImageData(ImageDescriptor descriptor) {
+		ImageData data= descriptor.getImageData(); // see bug 51965: getImageData can return null
+		if (data == null) {
+			data= DEFAULT_IMAGE_DATA;
+			JavaPlugin.logErrorMessage("Image data not available: " + descriptor.toString()); //$NON-NLS-1$
+		}
+		return data;
+	}
+
+	@Override
+	protected Point getSize() {
+		return JavaElementImageProvider.BIG_SIZE;
+	}
+	@Override
+	public int hashCode() {
+		return fBase.hashCode();
+	}
+	@Override
+	public boolean equals(Object object) {
+		return object != null && FocusDescriptor.class.equals(object.getClass()) && ((FocusDescriptor)object).fBase.equals(fBase);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryDropDownAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryDropDownAction.java
index 152ea58..5c8dbc9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryDropDownAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryDropDownAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,12 +30,12 @@ import org.eclipse.jface.action.Separator;
 
 import org.eclipse.ui.IWorkbenchActionConstants;
 
-/*package*/ class HistoryDropDownAction extends Action {
+/*package*/ class HistoryDropDownAction<E> extends Action {
 
 	private class HistoryAction extends Action {
-		private final Object fElement;
+		private final E fElement;
 
-		public HistoryAction(Object element, int accelerator) {
+		public HistoryAction(E element, int accelerator) {
 	        super("", AS_RADIO_BUTTON); //$NON-NLS-1$
 			Assert.isNotNull(element);
 			fElement= element;
@@ -50,6 +50,7 @@ import org.eclipse.ui.IWorkbenchActionConstants;
 			setImageDescriptor(fHistory.getImageDescriptor(element));
 		}
 
+		@Override
 		public void run() {
 			if (isChecked())
 				fHistory.setActiveEntry(fElement);
@@ -70,12 +71,12 @@ import org.eclipse.ui.IWorkbenchActionConstants;
 			manager.setRemoveAllWhenShown(true);
 			manager.addMenuListener(new IMenuListener() {
 				public void menuAboutToShow(IMenuManager manager2) {
-					List entries= fHistory.getHistoryEntries();
+					List<E> entries= fHistory.getHistoryEntries();
 					boolean checkOthers= addEntryMenuItems(manager2, entries);
 
 					manager2.add(new Separator());
 
-					Action others= new HistoryListAction(fHistory);
+					Action others= new HistoryListAction<E>(fHistory);
 					others.setChecked(checkOthers);
 					manager2.add(others);
 
@@ -89,7 +90,7 @@ import org.eclipse.ui.IWorkbenchActionConstants;
 					fHistory.addMenuEntries(manager);
 				}
 
-				private boolean addEntryMenuItems(IMenuManager manager2, List entries) {
+				private boolean addEntryMenuItems(IMenuManager manager2, List<E> entries) {
 					if (entries.isEmpty()) {
 						return false;
 					}
@@ -97,7 +98,7 @@ import org.eclipse.ui.IWorkbenchActionConstants;
 					boolean checkOthers= true;
 					int min= Math.min(entries.size(), RESULTS_IN_DROP_DOWN);
 					for (int i= 0; i < min; i++) {
-						Object entry= entries.get(i);
+						E entry= entries.get(i);
 						HistoryAction action= new HistoryAction(entry, i + 1);
 						boolean check= entry.equals(fHistory.getCurrentEntry());
 						action.setChecked(check);
@@ -114,6 +115,7 @@ import org.eclipse.ui.IWorkbenchActionConstants;
 			//workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=129973
 			final Display display= parent.getDisplay();
 			fMenu.addMenuListener(new MenuAdapter() {
+				@Override
 				public void menuHidden(final MenuEvent e) {
 					display.asyncExec(new Runnable() {
 						public void run() {
@@ -141,17 +143,18 @@ import org.eclipse.ui.IWorkbenchActionConstants;
 
 	public static final int RESULTS_IN_DROP_DOWN= 10;
 
-	private ViewHistory fHistory;
+	private ViewHistory<E> fHistory;
 	private Menu fMenu;
 
-	public HistoryDropDownAction(ViewHistory history) {
+	public HistoryDropDownAction(ViewHistory<E> history) {
 		fHistory= history;
 		fMenu= null;
 		setMenuCreator(new HistoryMenuCreator());
 		fHistory.configureHistoryDropDownAction(this);
 	}
 
+	@Override
 	public void run() {
-		new HistoryListAction(fHistory).run();
+		new HistoryListAction<E>(fHistory).run();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryListAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryListAction.java
index 4ba04ef..59cebc3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryListAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/HistoryListAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,15 +44,15 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.Separator;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 
-/*package*/ class HistoryListAction extends Action {
+/*package*/ class HistoryListAction<E> extends Action {
 
 	private class HistoryListDialog extends StatusDialog {
 		private static final int MAX_MAX_ENTRIES= 100;
-		private ListDialogField fHistoryList;
+		private ListDialogField<E> fHistoryList;
 		private StringDialogField fMaxEntriesField;
 		private int fMaxEntries;
 
-		private Object fResult;
+		private E fResult;
 
 		private HistoryListDialog() {
 			super(fHistory.getShell());
@@ -67,29 +67,30 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 * @since 3.4
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
 
 		private void createHistoryList() {
-			IListAdapter adapter= new IListAdapter() {
-				public void customButtonPressed(ListDialogField field, int index) {
+			IListAdapter<E> adapter= new IListAdapter<E>() {
+				public void customButtonPressed(ListDialogField<E> field, int index) {
 					doCustomButtonPressed(index);
 				}
-				public void selectionChanged(ListDialogField field) {
+				public void selectionChanged(ListDialogField<E> field) {
 					doSelectionChanged();
 				}
 
-				public void doubleClicked(ListDialogField field) {
+				public void doubleClicked(ListDialogField<E> field) {
 					doDoubleClicked();
 				}
 			};
 			String[] buttonLabels= new String[] { JavaUIMessages.HistoryListAction_remove, JavaUIMessages.HistoryListAction_remove_all };
 			LabelProvider labelProvider= new TestRunLabelProvider();
-			fHistoryList= new ListDialogField(adapter, buttonLabels, labelProvider);
+			fHistoryList= new ListDialogField<E>(adapter, buttonLabels, labelProvider);
 			fHistoryList.setLabelText(fHistory.getHistoryListDialogMessage());
 
-			List historyEntries= fHistory.getHistoryEntries();
+			List<E> historyEntries= fHistory.getHistoryEntries();
 			fHistoryList.setElements(historyEntries);
 
 			Object currentEntry= fHistory.getCurrentEntry();
@@ -127,6 +128,7 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 		/*
 		 * @see Dialog#createDialogArea(Composite)
 		 */
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			initializeDialogUnits(parent);
 
@@ -169,7 +171,7 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 		}
 
 		private void doSelectionChanged() {
-			List selected= fHistoryList.getSelectedElements();
+			List<E> selected= fHistoryList.getSelectedElements();
 			if (selected.size() >= 1) {
 				fResult= selected.get(0);
 			} else {
@@ -178,11 +180,11 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 			fHistoryList.enableButton(0, selected.size() != 0);
 		}
 
-		public Object getResult() {
+		public E getResult() {
 			return fResult;
 		}
 
-		public List getRemaining() {
+		public List<E> getRemaining() {
 			return fHistoryList.getElements();
 		}
 
@@ -193,12 +195,15 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 	}
 
 	private final class TestRunLabelProvider extends LabelProvider {
-		private final HashMap fImages= new HashMap();
+		private final HashMap<ImageDescriptor, Image> fImages= new HashMap<ImageDescriptor, Image>();
 
+		@SuppressWarnings("unchecked")
+		@Override
 		public String getText(Object element) {
-			return fHistory.getText(element);
+			return fHistory.getText((E) element);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			ImageDescriptor imageDescriptor= fHistory.getImageDescriptor(element);
 			return getCachedImage(imageDescriptor);
@@ -213,18 +218,19 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 			return image;
 		}
 
+		@Override
 		public void dispose() {
-			for (Iterator iter= fImages.values().iterator(); iter.hasNext();) {
-				Image image= (Image) iter.next();
+			for (Iterator<Image> iter= fImages.values().iterator(); iter.hasNext();) {
+				Image image= iter.next();
 				image.dispose();
 			}
 			fImages.clear();
 		}
 	}
 
-	private ViewHistory fHistory;
+	private ViewHistory<E> fHistory;
 
-	public HistoryListAction(ViewHistory history) {
+	public HistoryListAction(ViewHistory<E> history) {
 		super(null, IAction.AS_RADIO_BUTTON);
 		fHistory= history;
 		fHistory.configureHistoryListAction(this);
@@ -233,6 +239,7 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 	/*
 	 * @see IAction#run()
 	 */
+	@Override
 	public void run() {
 		HistoryListDialog dialog= new HistoryListDialog();
 		if (dialog.open() == Window.OK) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDescriptorRegistry.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDescriptorRegistry.java
index d62116a..0fd2b28 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDescriptorRegistry.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDescriptorRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,32 +20,22 @@ import org.eclipse.core.runtime.Assert;
 
 import org.eclipse.jface.resource.ImageDescriptor;
 
-import org.eclipse.jdt.internal.ui.util.SWTUtil;
+import org.eclipse.ui.PlatformUI;
 
 /**
  * A registry that maps <code>ImageDescriptors</code> to <code>Image</code>.
  */
 public class ImageDescriptorRegistry {
 
-	private HashMap fRegistry= new HashMap(10);
+	private HashMap<ImageDescriptor, Image> fRegistry= new HashMap<ImageDescriptor, Image>(10);
 	private Display fDisplay;
 
 	/**
-	 * Creates a new image descriptor registry for the current or default display,
-	 * respectively.
-	 */
-	public ImageDescriptorRegistry() {
-		this(SWTUtil.getStandardDisplay());
-	}
-
-	/**
 	 * Creates a new image descriptor registry for the given display. All images
 	 * managed by this registry will be disposed when the display gets disposed.
-	 *
-	 * @param display the display the images managed by this registry are allocated for
 	 */
-	public ImageDescriptorRegistry(Display display) {
-		fDisplay= display;
+	public ImageDescriptorRegistry() {
+		fDisplay= PlatformUI.getWorkbench().getDisplay();
 		Assert.isNotNull(fDisplay);
 		hookDisplay();
 	}
@@ -62,11 +52,10 @@ public class ImageDescriptorRegistry {
 		if (descriptor == null)
 			descriptor= ImageDescriptor.getMissingImageDescriptor();
 
-		Image result= (Image)fRegistry.get(descriptor);
+		Image result= fRegistry.get(descriptor);
 		if (result != null)
 			return result;
 
-		Assert.isTrue(fDisplay == SWTUtil.getStandardDisplay(), "Allocating image for wrong display."); //$NON-NLS-1$
 		result= descriptor.createImage();
 		if (result != null)
 			fRegistry.put(descriptor, result);
@@ -77,8 +66,8 @@ public class ImageDescriptorRegistry {
 	 * Disposes all images managed by this registry.
 	 */
 	public void dispose() {
-		for (Iterator iter= fRegistry.values().iterator(); iter.hasNext(); ) {
-			Image image= (Image)iter.next();
+		for (Iterator<Image> iter= fRegistry.values().iterator(); iter.hasNext(); ) {
+			Image image= iter.next();
 			image.dispose();
 		}
 		fRegistry.clear();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageImageDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageImageDescriptor.java
index c19ee11..6be454d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageImageDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageImageDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public class ImageImageDescriptor extends ImageDescriptor {
 	/* (non-Javadoc)
 	 * @see ImageDescriptor#getImageData()
 	 */
+	@Override
 	public ImageData getImageData() {
 		return fImage.getImageData();
 	}
@@ -40,6 +41,7 @@ public class ImageImageDescriptor extends ImageDescriptor {
 	/* (non-Javadoc)
 	 * @see Object#equals(Object)
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		return (obj != null) && getClass().equals(obj.getClass()) && fImage.equals(((ImageImageDescriptor)obj).fImage);
 	}
@@ -47,6 +49,7 @@ public class ImageImageDescriptor extends ImageDescriptor {
 	/* (non-Javadoc)
 	 * @see Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fImage.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java
index 478abd8..127489e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,13 +35,13 @@ public class ImagesOnFileSystemRegistry {
 
 	private static final String IMAGE_DIR= "jdt-images"; //$NON-NLS-1$
 
-	private HashMap fURLMap;
+	private HashMap<ImageDescriptor, URL> fURLMap;
 	private final File fTempDir;
 	private final JavaElementImageProvider fImageProvider;
 	private int fImageCount;
 
 	public ImagesOnFileSystemRegistry() {
-		fURLMap= new HashMap();
+		fURLMap= new HashMap<ImageDescriptor, URL>();
 		fTempDir= getTempDir();
 		fImageProvider= new JavaElementImageProvider();
 		fImageCount= 0;
@@ -89,7 +89,7 @@ public class ImagesOnFileSystemRegistry {
 		if (fTempDir == null)
 			return null;
 
-		URL url= (URL) fURLMap.get(descriptor);
+		URL url= fURLMap.get(descriptor);
 		if (url != null)
 			return url;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementImageProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementImageProvider.java
index bedac17..82b66ba 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementImageProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementImageProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ import org.eclipse.ui.model.IWorkbenchAdapter;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.ILocalVariable;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IPackageFragment;
@@ -354,38 +355,47 @@ public class JavaElementImageProvider {
 
 	private int computeJavaAdornmentFlags(IJavaElement element, int renderFlags) {
 		int flags= 0;
-		if (showOverlayIcons(renderFlags) && element instanceof IMember) {
+		if (showOverlayIcons(renderFlags)) {
 			try {
-				IMember member= (IMember) element;
-
-				if (element.getElementType() == IJavaElement.METHOD && ((IMethod)element).isConstructor())
-					flags |= JavaElementImageDescriptor.CONSTRUCTOR;
-
-				int modifiers= member.getFlags();
-				if (Flags.isAbstract(modifiers) && confirmAbstract(member))
-					flags |= JavaElementImageDescriptor.ABSTRACT;
-				if (Flags.isFinal(modifiers) || isInterfaceOrAnnotationField(member) || isEnumConstant(member, modifiers))
-					flags |= JavaElementImageDescriptor.FINAL;
-				if (Flags.isSynchronized(modifiers) && confirmSynchronized(member))
-					flags |= JavaElementImageDescriptor.SYNCHRONIZED;
-				if (Flags.isStatic(modifiers) || isInterfaceOrAnnotationFieldOrType(member) || isEnumConstant(member, modifiers))
-					flags |= JavaElementImageDescriptor.STATIC;
-
-				if (Flags.isDeprecated(modifiers))
-					flags |= JavaElementImageDescriptor.DEPRECATED;
-				if (member.getElementType() == IJavaElement.TYPE) {
-					if (JavaModelUtil.hasMainMethod((IType) member)) {
-						flags |= JavaElementImageDescriptor.RUNNABLE;
+				if (element instanceof IMember) {
+					IMember member= (IMember)element;
+
+					int modifiers= member.getFlags();
+					if (Flags.isAbstract(modifiers) && confirmAbstract(member))
+						flags|= JavaElementImageDescriptor.ABSTRACT;
+					if (Flags.isFinal(modifiers) || isInterfaceOrAnnotationField(member) || isEnumConstant(member, modifiers))
+						flags|= JavaElementImageDescriptor.FINAL;
+					if (Flags.isStatic(modifiers) || isInterfaceOrAnnotationFieldOrType(member) || isEnumConstant(member, modifiers))
+						flags|= JavaElementImageDescriptor.STATIC;
+
+					if (Flags.isDeprecated(modifiers))
+						flags|= JavaElementImageDescriptor.DEPRECATED;
+
+					int elementType= element.getElementType();
+					if (elementType == IJavaElement.METHOD) {
+						if (((IMethod)element).isConstructor())
+							flags|= JavaElementImageDescriptor.CONSTRUCTOR;
+						if (Flags.isSynchronized(modifiers)) // collides with 'super' flag
+							flags|= JavaElementImageDescriptor.SYNCHRONIZED;
+						if (Flags.isNative(modifiers))
+							flags|= JavaElementImageDescriptor.NATIVE;
 					}
-				}
-				if (member.getElementType() == IJavaElement.FIELD) {
-					if (Flags.isVolatile(modifiers))
-						flags |= JavaElementImageDescriptor.VOLATILE;
-					if (Flags.isTransient(modifiers))
-						flags |= JavaElementImageDescriptor.TRANSIENT;
-				}
 
+					if (member.getElementType() == IJavaElement.TYPE) {
+						if (JavaModelUtil.hasMainMethod((IType)member)) {
+							flags|= JavaElementImageDescriptor.RUNNABLE;
+						}
+					}
 
+					if (member.getElementType() == IJavaElement.FIELD) {
+						if (Flags.isVolatile(modifiers))
+							flags|= JavaElementImageDescriptor.VOLATILE;
+						if (Flags.isTransient(modifiers))
+							flags|= JavaElementImageDescriptor.TRANSIENT;
+					}
+				} else if (element instanceof ILocalVariable && Flags.isFinal(((ILocalVariable)element).getFlags())) {
+					flags|= JavaElementImageDescriptor.FINAL;
+				}
 			} catch (JavaModelException e) {
 				// do nothing. Can't compute runnable adornment or get flags
 			}
@@ -393,6 +403,7 @@ public class JavaElementImageProvider {
 		return flags;
 	}
 
+
 	private static boolean confirmAbstract(IMember element) throws JavaModelException {
 		// never show the abstract symbol on interfaces or members in interfaces
 		if (element.getElementType() == IJavaElement.TYPE) {
@@ -426,12 +437,6 @@ public class JavaElementImageProvider {
 		return false;
 	}
 
-	private static boolean confirmSynchronized(IJavaElement member) {
-		// Synchronized types are allowed but meaningless.
-		return member.getElementType() != IJavaElement.TYPE;
-	}
-
-
 	public static ImageDescriptor getMethodImageDescriptor(boolean isInInterfaceOrAnnotation, int flags) {
 		if (Flags.isPublic(flags) || isInInterfaceOrAnnotation)
 			return JavaPluginImages.DESC_MISC_PUBLIC;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java
index 3a81391..541fe1a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,24 +60,6 @@ import org.eclipse.jdt.internal.ui.JavaUIMessages;
 public class JavaElementLabelComposer {
 
 	/**
-	 * Use of this constant is <b>FORBIDDEN</b> for external clients.
-	 * <p>
-	 * TODO: Make API in PreferenceConstants in 3.7, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=306069
-	 * 
-	 * @see PreferenceConstants#APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW
-	 */
-	public static final String APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW= "org.eclipse.jdt.ui.pkgNameAbbreviationPatternForPackagesView";//$NON-NLS-1$
-
-	/**
-	 * Use of this constant is <b>FORBIDDEN</b> for external clients.
-	 * <p>
-	 * TODO: Make API in PreferenceConstants in 3.7, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=306069
-	 * 
-	 * @see PreferenceConstants#APPEARANCE_ABBREVIATE_PACKAGE_NAMES
-	 */
-	public static final String APPEARANCE_ABBREVIATE_PACKAGE_NAMES= "org.eclipse.jdt.ui.abbreviatepackagenames";//$NON-NLS-1$
-
-	/**
 	 * An adapter for buffer supported by the label composer.
 	 */
 	public static abstract class FlexibleBuffer {
@@ -126,24 +108,29 @@ public class JavaElementLabelComposer {
 			fStringBuffer= stringBuffer;
 		}
 
+		@Override
 		public FlexibleBuffer append(char ch) {
 			fStringBuffer.append(ch);
 			return this;
 		}
 
+		@Override
 		public FlexibleBuffer append(String string) {
 			fStringBuffer.append(string);
 			return this;
 		}
 
+		@Override
 		public int length() {
 			return fStringBuffer.length();
 		}
 
+		@Override
 		public void setStyle(int offset, int length, Styler styler) {
 			// no style
 		}
 
+		@Override
 		public String toString() {
 			return fStringBuffer.toString();
 		}
@@ -156,24 +143,29 @@ public class JavaElementLabelComposer {
 			fStyledString= stringBuffer;
 		}
 
+		@Override
 		public FlexibleBuffer append(char ch) {
 			fStyledString.append(ch);
 			return this;
 		}
 
+		@Override
 		public FlexibleBuffer append(String string) {
 			fStyledString.append(string);
 			return this;
 		}
 
+		@Override
 		public int length() {
 			return fStyledString.length();
 		}
 
+		@Override
 		public void setStyle(int offset, int length, Styler styler) {
 			fStyledString.setStyle(offset, length, styler);
 		}
 
+		@Override
 		public String toString() {
 			return fStyledString.toString();
 		}
@@ -630,7 +622,7 @@ public class JavaElementLabelComposer {
 		}
 
 		if (getFlag(flags, JavaElementLabels.F_FULLY_QUALIFIED)) {
-			appendElementLabel(localVariable.getParent(), JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
+			appendElementLabel(localVariable.getDeclaringMember(), JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
 			fBuffer.append('.');
 		}
 
@@ -648,7 +640,7 @@ public class JavaElementLabelComposer {
 		// post qualification
 		if (getFlag(flags, JavaElementLabels.F_POST_QUALIFIED)) {
 			fBuffer.append(JavaElementLabels.CONCAT_STRING);
-			appendElementLabel(localVariable.getParent(), JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
+			appendElementLabel(localVariable.getDeclaringMember(), JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS));
 		}
 	}
 
@@ -726,7 +718,7 @@ public class JavaElementLabelComposer {
 				}
 				break;
 			case Signature.CLASS_TYPE_SIGNATURE:
-				String baseType= getSimpleTypeName(enclosingElement, Signature.getTypeErasure(typeSig));
+				String baseType= getSimpleTypeName(enclosingElement, typeSig);
 				fBuffer.append(baseType);
 
 				String[] typeArguments= Signature.getTypeArguments(typeSig);
@@ -765,7 +757,7 @@ public class JavaElementLabelComposer {
 	 * @return the simple name of the given type signature
 	 */
 	protected String getSimpleTypeName(IJavaElement enclosingElement, String typeSig) {
-		return Signature.getSimpleName(Signature.toString(typeSig));
+		return Signature.getSimpleName(Signature.toString(Signature.getTypeErasure(typeSig)));
 	}
 
 	private void appendTypeArgumentSignaturesLabel(IJavaElement enclosingElement, String[] typeArgsSig, long flags) {
@@ -1366,7 +1358,7 @@ public class JavaElementLabelComposer {
 	public static PackageNameAbbreviation[] parseAbbreviationPattern(String pattern) {
 		String[] parts= pattern.split("\\s*(?:\r\n?|\n)\\s*"); //$NON-NLS-1$
 
-		ArrayList result= new ArrayList();
+		ArrayList<PackageNameAbbreviation> result= new ArrayList<PackageNameAbbreviation>();
 
 		for (int i= 0; i < parts.length; i++) {
 			String part= parts[i].trim();
@@ -1390,16 +1382,13 @@ public class JavaElementLabelComposer {
 			result.add(pkgAbbr);
 		}
 
-		Collections.sort(result, new Comparator() {
-			public int compare(Object o1, Object o2) {
-				PackageNameAbbreviation a1= (PackageNameAbbreviation)o1;
-				PackageNameAbbreviation a2= (PackageNameAbbreviation)o2;
-
+		Collections.sort(result, new Comparator<PackageNameAbbreviation>() {
+			public int compare(PackageNameAbbreviation a1, PackageNameAbbreviation a2) {
 				return a2.getPackagePrefix().length() - a1.getPackagePrefix().length();
 			}
 		});
 
-		return (PackageNameAbbreviation[])result.toArray(new PackageNameAbbreviation[0]);
+		return result.toArray(new PackageNameAbbreviation[0]);
 	}
 	
 	private boolean isPackageNameCompressionEnabled() {
@@ -1416,14 +1405,14 @@ public class JavaElementLabelComposer {
 
 	private boolean isPackageNameAbbreviationEnabled() {
 		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
-		return store.getBoolean(JavaElementLabelComposer.APPEARANCE_ABBREVIATE_PACKAGE_NAMES);
+		return store.getBoolean(PreferenceConstants.APPEARANCE_ABBREVIATE_PACKAGE_NAMES);
 	}
 
 	private String getPkgNameAbbreviationPatternForPackagesView() {
 		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
-		if (!store.getBoolean(JavaElementLabelComposer.APPEARANCE_ABBREVIATE_PACKAGE_NAMES))
+		if (!store.getBoolean(PreferenceConstants.APPEARANCE_ABBREVIATE_PACKAGE_NAMES))
 			return ""; //$NON-NLS-1$
-		return store.getString(JavaElementLabelComposer.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW);
+		return store.getString(PreferenceConstants.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java
index 198812b..7fc01fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,12 +31,15 @@ import org.eclipse.jdt.core.ILocalVariable;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
 
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Strings;
+import org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache;
 
 import org.eclipse.jdt.ui.JavaElementLabels;
 
@@ -102,6 +105,7 @@ public class JavaElementLinks {
 			fElement= member;
 		}
 
+		@Override
 		public String getElementName(IJavaElement element) {
 			String elementName= element.getElementName();
 			if (element.equals(fElement)) { // linking to the member itself would be a no-op
@@ -119,14 +123,17 @@ public class JavaElementLinks {
 			}
 		}
 
+		@Override
 		protected String getGT() {
 			return ">"; //$NON-NLS-1$
 		}
 
+		@Override
 		protected String getLT() {
 			return "<"; //$NON-NLS-1$
 		}
 
+		@Override
 		protected String getSimpleTypeName(IJavaElement enclosingElement, String typeSig) {
 			String typeName= super.getSimpleTypeName(enclosingElement, typeSig);
 			try {
@@ -170,6 +177,7 @@ public class JavaElementLinks {
 	 */
 	public static LocationListener createLocationListener(final ILinkHandler handler) {
 		return new LocationAdapter() {
+			@Override
 			public void changing(LocationEvent event) {
 				String loc= event.location;
 
@@ -321,7 +329,7 @@ public class JavaElementLinks {
 			}
 			
 			if (element instanceof ILocalVariable) {
-				element= element.getAncestor(IJavaElement.TYPE);
+				element= ((ILocalVariable)element).getDeclaringMember();
 			} else if (element instanceof ITypeParameter) {
 				element= ((ITypeParameter)element).getDeclaringMember();
 			}
@@ -350,7 +358,6 @@ public class JavaElementLinks {
 								} else {
 									//TODO: methods whose signature contains type parameters can not be found
 									// easily, since the Javadoc references are erasures
-									//TODO: reference can also point to method from supertype
 
 									//Shortcut: only check name and parameter count:
 									methods= type.getMethods();
@@ -359,7 +366,12 @@ public class JavaElementLinks {
 										if (method.getElementName().equals(refMemberName) && method.getNumberOfParameters() == paramSignatures.length)
 											return method;
 									}
-
+									
+									// reference can also point to method from supertype:
+									ITypeHierarchy hierarchy= SuperTypeHierarchyCache.getTypeHierarchy(type);
+									method= JavaModelUtil.findMethodInHierarchy(hierarchy, type, refMemberName, paramSignatures, false);
+									if (method != null)
+										return method;
 								}
 							} else {
 								IField field= type.getField(refMemberName);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java
index ac9959f..72883b0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaUILabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ public class JavaUILabelProvider implements ILabelProvider, IColorProvider, ISty
 	protected JavaElementImageProvider fImageLabelProvider;
 	protected StorageLabelProvider fStorageLabelProvider;
 
-	private ArrayList fLabelDecorators;
+	private ArrayList<ILabelDecorator> fLabelDecorators;
 
 	private int fImageFlags;
 	private long fTextFlags;
@@ -70,7 +70,7 @@ public class JavaUILabelProvider implements ILabelProvider, IColorProvider, ISty
 	 */
 	public void addLabelDecorator(ILabelDecorator decorator) {
 		if (fLabelDecorators == null) {
-			fLabelDecorators= new ArrayList(2);
+			fLabelDecorators= new ArrayList<ILabelDecorator>(2);
 		}
 		fLabelDecorators.add(decorator);
 	}
@@ -130,7 +130,7 @@ public class JavaUILabelProvider implements ILabelProvider, IColorProvider, ISty
 	protected Image decorateImage(Image image, Object element) {
 		if (fLabelDecorators != null && image != null) {
 			for (int i= 0; i < fLabelDecorators.size(); i++) {
-				ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
+				ILabelDecorator decorator= fLabelDecorators.get(i);
 				image= decorator.decorateImage(image, element);
 			}
 		}
@@ -152,7 +152,7 @@ public class JavaUILabelProvider implements ILabelProvider, IColorProvider, ISty
 	protected String decorateText(String text, Object element) {
 		if (fLabelDecorators != null && text.length() > 0) {
 			for (int i= 0; i < fLabelDecorators.size(); i++) {
-				ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
+				ILabelDecorator decorator= fLabelDecorators.get(i);
 				String decorated= decorator.decorateText(text, element);
 				if (decorated != null) {
 					text= decorated;
@@ -192,7 +192,7 @@ public class JavaUILabelProvider implements ILabelProvider, IColorProvider, ISty
 	public void dispose() {
 		if (fLabelDecorators != null) {
 			for (int i= 0; i < fLabelDecorators.size(); i++) {
-				ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
+				ILabelDecorator decorator= fLabelDecorators.get(i);
 				decorator.dispose();
 			}
 			fLabelDecorators= null;
@@ -207,7 +207,7 @@ public class JavaUILabelProvider implements ILabelProvider, IColorProvider, ISty
 	public void addListener(ILabelProviderListener listener) {
 		if (fLabelDecorators != null) {
 			for (int i= 0; i < fLabelDecorators.size(); i++) {
-				ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
+				ILabelDecorator decorator= fLabelDecorators.get(i);
 				decorator.addListener(listener);
 			}
 		}
@@ -227,7 +227,7 @@ public class JavaUILabelProvider implements ILabelProvider, IColorProvider, ISty
 	public void removeListener(ILabelProviderListener listener) {
 		if (fLabelDecorators != null) {
 			for (int i= 0; i < fLabelDecorators.size(); i++) {
-				ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
+				ILabelDecorator decorator= fLabelDecorators.get(i);
 				decorator.removeListener(listener);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaViewerFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaViewerFilter.java
index 698da6b..c683048 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaViewerFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaViewerFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ public abstract class JavaViewerFilter extends ViewerFilter {
 	/*
  	 * Overrides method from ViewerFilter
  	 */
+	@Override
 	public Object[] filter(Viewer viewer, Object parent, Object[] elements) {
 		try {
 			filteringStart();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LibraryFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LibraryFilter.java
index ff1819f..92a8fe5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LibraryFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LibraryFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class LibraryFilter extends ViewerFilter {
 	 * @param element the element to test
 	 * @return Returns true if element should be included in filtered set
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IPackageFragmentRoot)
 			return !((IPackageFragmentRoot)element).isArchive();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
index 009c05e..864d9a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,10 +33,10 @@ import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.jface.text.link.ILinkedModeListener;
 import org.eclipse.jface.text.link.LinkedModeModel;
 import org.eclipse.jface.text.link.LinkedModeUI;
+import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags;
 import org.eclipse.jface.text.link.LinkedPosition;
 import org.eclipse.jface.text.link.LinkedPositionGroup;
 import org.eclipse.jface.text.link.ProposalPosition;
-import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags;
 
 import org.eclipse.ui.IEditorPart;
 
@@ -60,15 +60,15 @@ public class LinkedProposalModelPresenter {
 	public LinkedProposalModelPresenter() {
 	}
 
-	public void enterLinkedMode(ITextViewer viewer, IEditorPart editor, LinkedProposalModel linkedProposalModel) throws BadLocationException {
+	public void enterLinkedMode(ITextViewer viewer, IEditorPart editor, boolean switchedEditor, LinkedProposalModel linkedProposalModel) throws BadLocationException {
 		IDocument document= viewer.getDocument();
 
 		LinkedModeModel model= new LinkedModeModel();
 		boolean added= false;
 
-		Iterator iterator= linkedProposalModel.getPositionGroupIterator();
+		Iterator<LinkedProposalPositionGroup> iterator= linkedProposalModel.getPositionGroupIterator();
 		while (iterator.hasNext()) {
-			LinkedProposalPositionGroup curr= (LinkedProposalPositionGroup) iterator.next();
+			LinkedProposalPositionGroup curr= iterator.next();
 
 			LinkedPositionGroup group= new LinkedPositionGroup();
 
@@ -111,7 +111,7 @@ public class LinkedProposalModelPresenter {
 			LinkedProposalPositionGroup.PositionInformation endPosition= linkedProposalModel.getEndPosition();
 			if (endPosition != null && endPosition.getOffset() != -1) {
 				ui.setExitPosition(viewer, endPosition.getOffset() + endPosition.getLength(), 0, Integer.MAX_VALUE);
-			} else {
+			} else if (! switchedEditor) {
 				int cursorPosition= viewer.getSelectedRange().x;
 				if (cursorPosition != 0) {
 					ui.setExitPosition(viewer, cursorPosition, 0, Integer.MAX_VALUE);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilter.java
index 77f5ff6..5fb286b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,6 +62,7 @@ public class MemberFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		try {
 			if (element instanceof IMember) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilterAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilterAction.java
index 7d921a5..6884f03 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilterAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/MemberFilterAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class MemberFilterAction extends Action {
 	/*
 	 * @see Action#actionPerformed
 	 */
+	@Override
 	public void run() {
 		fFilterActionGroup.setMemberFilter(fFilterProperty, isChecked());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java
index 4a9c90d..84afcb0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,12 +36,12 @@ import org.eclipse.jface.text.source.IAnnotationModel;
 import org.eclipse.jface.text.source.IAnnotationModelListener;
 import org.eclipse.jface.text.source.IAnnotationModelListenerExtension;
 
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.UIJob;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaUIMessages;
 import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitAnnotationModelEvent;
-import org.eclipse.jdt.internal.ui.util.SWTUtil;
 
 /**
  * Listens to resource deltas and filters for marker changes of type IMarker.PROBLEM
@@ -55,9 +55,9 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
 	 */
 	private static class ProjectErrorVisitor implements IResourceDeltaVisitor {
 
-		private HashSet fChangedElements;
+		private HashSet<IResource> fChangedElements;
 
-		public ProjectErrorVisitor(HashSet changedElements) {
+		public ProjectErrorVisitor(HashSet<IResource> changedElements) {
 			fChangedElements= changedElements;
 		}
 
@@ -105,22 +105,22 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
 
 	private ListenerList fListeners;
 
-	private Set fResourcesWithMarkerChanges;
-	private Set fResourcesWithAnnotationChanges;
+	private Set<IResource> fResourcesWithMarkerChanges;
+	private Set<IResource> fResourcesWithAnnotationChanges;
 
 	private UIJob fNotifierJob;
 
 	public ProblemMarkerManager() {
 		fListeners= new ListenerList();
-		fResourcesWithMarkerChanges= new HashSet();
-		fResourcesWithAnnotationChanges= new HashSet();
+		fResourcesWithMarkerChanges= new HashSet<IResource>();
+		fResourcesWithAnnotationChanges= new HashSet<IResource>();
 	}
 
 	/*
 	 * @see IResourceChangeListener#resourceChanged
 	 */
 	public void resourceChanged(IResourceChangeEvent event) {
-		HashSet changedElements= new HashSet();
+		HashSet<IResource> changedElements= new HashSet<IResource>();
 
 		try {
 			IResourceDelta delta= event.getDelta();
@@ -198,7 +198,7 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
 	}
 
 	private void fireChanges() {
-		Display display= SWTUtil.getStandardDisplay();
+		Display display= PlatformUI.getWorkbench().getDisplay();
 		if (display != null && !display.isDisposed()) {
 			postAsyncUpdate(display);
 		}
@@ -207,6 +207,7 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
 	private void postAsyncUpdate(final Display display) {
 		if (fNotifierJob == null) {
 			fNotifierJob= new UIJob(display, JavaUIMessages.ProblemMarkerManager_problem_marker_update_job_description) {
+				@Override
 				public IStatus runInUIThread(IProgressMonitor monitor) {
 					runPendingUpdates();
 					return Status.OK_STATUS;
@@ -225,11 +226,11 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
 		IResource[] annotationResources= null;
 		synchronized (this) {
 			if (!fResourcesWithMarkerChanges.isEmpty()) {
-				markerResources= (IResource[]) fResourcesWithMarkerChanges.toArray(new IResource[fResourcesWithMarkerChanges.size()]);
+				markerResources= fResourcesWithMarkerChanges.toArray(new IResource[fResourcesWithMarkerChanges.size()]);
 				fResourcesWithMarkerChanges.clear();
 			}
 			if (!fResourcesWithAnnotationChanges.isEmpty()) {
-				annotationResources= (IResource[]) fResourcesWithAnnotationChanges.toArray(new IResource[fResourcesWithAnnotationChanges.size()]);
+				annotationResources= fResourcesWithAnnotationChanges.toArray(new IResource[fResourcesWithAnnotationChanges.size()]);
 				fResourcesWithAnnotationChanges.clear();
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java
index 2bb8ced..0a7af98 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,8 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 
 	/**
 	 * Constructor for ProblemTableViewer.
-	 * @param parent
+	 * 
+	 * @param parent the parent composite
 	 */
 	public ProblemTableViewer(Composite parent) {
 		super(parent);
@@ -47,8 +48,9 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 
 	/**
 	 * Constructor for ProblemTableViewer.
-	 * @param parent
-	 * @param style
+	 * 
+	 * @param parent the parent composite
+	 * @param style the style
 	 */
 	public ProblemTableViewer(Composite parent, int style) {
 		super(parent, style);
@@ -57,7 +59,8 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 
 	/**
 	 * Constructor for ProblemTableViewer.
-	 * @param table
+	 * 
+	 * @param table the table
 	 */
 	public ProblemTableViewer(Table table) {
 		super(table);
@@ -78,6 +81,7 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 	/*
 	 * @see StructuredViewer#mapElement(Object, Widget)
 	 */
+	@Override
 	protected void mapElement(Object element, Widget item) {
 		super.mapElement(element, item);
 		if (item instanceof Item) {
@@ -88,6 +92,7 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 	/*
 	 * @see StructuredViewer#unmapElement(Object, Widget)
 	 */
+	@Override
 	protected void unmapElement(Object element, Widget item) {
 		if (item instanceof Item) {
 			fResourceToItemsMapper.removeFromMap(element, (Item) item);
@@ -98,6 +103,7 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 	/*
 	 * @see StructuredViewer#unmapAllElements()
 	 */
+	@Override
 	protected void unmapAllElements() {
 		fResourceToItemsMapper.clearMap();
 		super.unmapAllElements();
@@ -106,6 +112,7 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 	/*
 	 * @see ContentViewer#handleLabelProviderChanged(LabelProviderChangedEvent)
 	 */
+	@Override
 	protected void handleLabelProviderChanged(LabelProviderChangedEvent event) {
 		if (event instanceof ProblemsLabelChangedEvent) {
 			ProblemsLabelChangedEvent e= (ProblemsLabelChangedEvent) event;
@@ -116,7 +123,7 @@ public class ProblemTableViewer extends TableViewer implements ResourceToItemsMa
 
 		Object[] changed= event.getElements();
 		if (changed != null && !fResourceToItemsMapper.isEmpty()) {
-			ArrayList others= new ArrayList(changed.length);
+			ArrayList<Object> others= new ArrayList<Object>(changed.length);
 			for (int i= 0; i < changed.length; i++) {
 				Object curr= changed[i];
 				if (curr instanceof IResource) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
index 401615b..72b9d85 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/*
 	 * @see StructuredViewer#mapElement(Object, Widget)
 	 */
+	@Override
 	protected void mapElement(Object element, Widget item) {
 		super.mapElement(element, item);
 		if (item instanceof Item) {
@@ -91,6 +92,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/*
 	 * @see StructuredViewer#unmapElement(Object, Widget)
 	 */
+	@Override
 	protected void unmapElement(Object element, Widget item) {
 		if (item instanceof Item) {
 			fResourceToItemsMapper.removeFromMap(element, (Item) item);
@@ -101,6 +103,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/*
 	 * @see StructuredViewer#unmapAllElements()
 	 */
+	@Override
 	protected void unmapAllElements() {
 		fResourceToItemsMapper.clearMap();
 		super.unmapAllElements();
@@ -112,6 +115,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.StructuredViewer#addFilter(org.eclipse.jface.viewers.ViewerFilter)
 	 */
+	@Override
 	public void addFilter(ViewerFilter filter) {
 		if (filter instanceof JavaViewerFilter) {
 			((JavaViewerFilter) filter).filteringStart();
@@ -122,6 +126,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.StructuredViewer#removeFilter(org.eclipse.jface.viewers.ViewerFilter)
 	 */
+	@Override
 	public void removeFilter(ViewerFilter filter) {
 		super.removeFilter(filter);
 		if (filter instanceof JavaViewerFilter) {
@@ -132,6 +137,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.StructuredViewer#setFilters(org.eclipse.jface.viewers.ViewerFilter[])
 	 */
+	@Override
 	public void setFilters(ViewerFilter[] filters) {
 		ViewerFilter[] oldFilters= getFilters();
 		for (int i= 0; i < filters.length; i++) {
@@ -147,6 +153,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.StructuredViewer#resetFilters()
 	 */
+	@Override
 	public void resetFilters() {
     	endFilterSessions(getFilters());
 		super.resetFilters();
@@ -174,7 +181,8 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.StructuredViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
 	 */
-    protected void handleDispose(DisposeEvent event) {
+    @Override
+	protected void handleDispose(DisposeEvent event) {
     	endFilterSessions(getFilters());
     	super.handleDispose(event);
     }
@@ -183,6 +191,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/*
 	 * @see ContentViewer#handleLabelProviderChanged(LabelProviderChangedEvent)
 	 */
+	@Override
 	protected void handleLabelProviderChanged(LabelProviderChangedEvent event) {
 		if (event instanceof ProblemsLabelChangedEvent) {
 			ProblemsLabelChangedEvent e= (ProblemsLabelChangedEvent) event;
@@ -193,7 +202,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 		Object[] changed= addAditionalProblemParents(event.getElements());
 
 		if (changed != null && !fResourceToItemsMapper.isEmpty()) {
-			ArrayList others= new ArrayList();
+			ArrayList<Object> others= new ArrayList<Object>();
 			for (int i= 0; i < changed.length; i++) {
 				Object curr= changed[i];
 				if (curr instanceof IResource) {
@@ -238,6 +247,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#isExpandable(java.lang.Object)
 	 */
+	@Override
 	public boolean isExpandable(Object parent) {
 		if (hasFilters() && evaluateExpandableWithFilters(parent)) {
 			// workaround for 65762
@@ -259,6 +269,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.AbstractTreeViewer#getFilteredChildren(java.lang.Object)
 	 */
+	@Override
 	protected final Object[] getFilteredChildren(Object parent) {
 		return filter(getRawChildren(parent), parent);
 	}
@@ -267,7 +278,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 		if (!hasFilters() || elements.length == 0) {
 			return elements;
 		}
-		List list= new ArrayList(elements.length);
+		List<Object> list= new ArrayList<Object>(elements.length);
 		ViewerFilter[] filters = getFilters();
 		for (int i = 0; i < elements.length; i++) {
 			Object object = elements[i];
@@ -316,6 +327,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.StructuredViewer#filter(java.lang.Object[])
 	 */
+	@Override
 	protected final Object[] filter(Object[] elements) {
 		return filter(elements, getRoot());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProjectTemplateStore.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProjectTemplateStore.java
index 84ad1d2..53404b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProjectTemplateStore.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProjectTemplateStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,10 +54,12 @@ public final class ProjectTemplateStore {
 				 * Make sure we keep the id of added code templates - add removes
 				 * it in the usual add() method
 				 */
+				@Override
 				public void add(TemplatePersistenceData data) {
 					internalAdd(data);
 				}
 
+				@Override
 				public void save() throws IOException {
 
 					TemplatePersistenceData[] templateData= ProjectTemplateStore.this.getTemplateData();
@@ -120,7 +122,7 @@ public final class ProjectTemplateStore {
 		if (fProjectStore != null) {
 			fProjectStore.load();
 
-			Set datas= new HashSet();
+			Set<String> datas= new HashSet<String>();
 			TemplatePersistenceData[] data= fProjectStore.getTemplateData(false);
 			for (int i= 0; i < data.length; i++) {
 				datas.add(data[i].getId());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ResourceToItemsMapper.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ResourceToItemsMapper.java
index 712b7d5..35f0674 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ResourceToItemsMapper.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ResourceToItemsMapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,15 +38,15 @@ public class ResourceToItemsMapper {
 
 	private static final int NUMBER_LIST_REUSE= 10;
 
-	// map from resource to item
-	private HashMap fResourceToItem;
-	private Stack fReuseLists;
+	// map from IResource to Item or List<Item>
+	private HashMap<IResource, Object> fResourceToItem;
+	private Stack<List<Item>> fReuseLists;
 
 	private IContentViewerAccessor fContentViewerAccess;
 
 	public ResourceToItemsMapper(IContentViewerAccessor viewer) {
-		fResourceToItem= new HashMap();
-		fReuseLists= new Stack();
+		fResourceToItem= new HashMap<IResource, Object>();
+		fReuseLists= new Stack<List<Item>>();
 
 		fContentViewerAccess= viewer;
 	}
@@ -62,9 +62,10 @@ public class ResourceToItemsMapper {
 		} else if (obj instanceof Item) {
 			updateItem((Item) obj);
 		} else { // List of Items
-			List list= (List) obj;
+			@SuppressWarnings("unchecked")
+			List<Item> list= (List<Item>) obj;
 			for (int k= 0; k < list.size(); k++) {
-				updateItem((Item) list.get(k));
+				updateItem(list.get(k));
 			}
 		}
 	}
@@ -88,13 +89,14 @@ public class ResourceToItemsMapper {
 				fResourceToItem.put(resource, item);
 			} else if (existingMapping instanceof Item) {
 				if (existingMapping != item) {
-					List list= getNewList();
-					list.add(existingMapping);
+					List<Item> list= getNewList();
+					list.add((Item) existingMapping);
 					list.add(item);
 					fResourceToItem.put(resource, list);
 				}
 			} else { // List
-				List list= (List) existingMapping;
+				@SuppressWarnings("unchecked")
+				List<Item> list= (List<Item>) existingMapping;
 				if (!list.contains(item)) {
 					list.add(item);
 				}
@@ -116,7 +118,8 @@ public class ResourceToItemsMapper {
 			} else if (existingMapping instanceof Item) {
 				fResourceToItem.remove(resource);
 			} else { // List
-				List list= (List) existingMapping;
+				@SuppressWarnings("unchecked")
+				List<Item> list= (List<Item>) existingMapping;
 				list.remove(item);
 				if (list.isEmpty()) {
 					fResourceToItem.remove(list);
@@ -126,14 +129,14 @@ public class ResourceToItemsMapper {
 		}
 	}
 
-	private List getNewList() {
+	private List<Item> getNewList() {
 		if (!fReuseLists.isEmpty()) {
-			return (List) fReuseLists.pop();
+			return fReuseLists.pop();
 		}
-		return new ArrayList(2);
+		return new ArrayList<Item>(2);
 	}
 
-	private void releaseList(List list) {
+	private void releaseList(List<Item> list) {
 		if (fReuseLists.size() < NUMBER_LIST_REUSE) {
 			fReuseLists.push(list);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionListenerWithASTManager.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionListenerWithASTManager.java
index 7fe18de..aa368b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionListenerWithASTManager.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionListenerWithASTManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -146,6 +146,7 @@ public class SelectionListenerWithASTManager {
 
 
 			fCurrentJob= new Job(JavaUIMessages.SelectionListenerWithASTManager_job_title) {
+				@Override
 				public IStatus run(IProgressMonitor monitor) {
 					if (monitor == null) {
 						monitor= new NullProgressMonitor();
@@ -189,10 +190,10 @@ public class SelectionListenerWithASTManager {
 	}
 
 
-	private Map fListenerGroups;
+	private Map<ITextEditor, PartListenerGroup> fListenerGroups;
 
 	private SelectionListenerWithASTManager() {
-		fListenerGroups= new HashMap();
+		fListenerGroups= new HashMap<ITextEditor, PartListenerGroup>();
 	}
 
 	/**
@@ -202,7 +203,7 @@ public class SelectionListenerWithASTManager {
 	 */
 	public void addListener(ITextEditor part, ISelectionListenerWithAST listener) {
 		synchronized (this) {
-			PartListenerGroup partListener= (PartListenerGroup) fListenerGroups.get(part);
+			PartListenerGroup partListener= fListenerGroups.get(part);
 			if (partListener == null) {
 				partListener= new PartListenerGroup(part);
 				fListenerGroups.put(part, partListener);
@@ -218,7 +219,7 @@ public class SelectionListenerWithASTManager {
 	 */
 	public void removeListener(ITextEditor part, ISelectionListenerWithAST listener) {
 		synchronized (this) {
-			PartListenerGroup partListener= (PartListenerGroup) fListenerGroups.get(part);
+			PartListenerGroup partListener= fListenerGroups.get(part);
 			if (partListener != null) {
 				partListener.uninstall(listener);
 				if (partListener.isEmpty()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SourcePositionComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SourcePositionComparator.java
index c6131d9..1ebaf9d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SourcePositionComparator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SourcePositionComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public class SourcePositionComparator extends ViewerComparator {
 	/*
 	 * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public int compare(Viewer viewer, Object e1, Object e2) {
 		if (!(e1 instanceof ISourceReference))
 			return 0;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/StorageLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/StorageLabelProvider.java
index 7b53df3..c66da2b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/StorageLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/StorageLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ import org.eclipse.jdt.core.IJarEntryResource;
 public class StorageLabelProvider extends LabelProvider {
 
 	private IEditorRegistry fEditorRegistry= null;
-	private Map fJarImageMap= new HashMap(10);
+	private Map<String, Image> fJarImageMap= new HashMap<String, Image>(10);
 	private Image fDefaultImage;
 
 	private IEditorRegistry getEditorRegistry() {
@@ -50,6 +50,7 @@ public class StorageLabelProvider extends LabelProvider {
 	/* (non-Javadoc)
 	 * @see ILabelProvider#getImage
 	 */
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof IStorage)
 			return getImageForJarEntry((IStorage)element);
@@ -60,6 +61,7 @@ public class StorageLabelProvider extends LabelProvider {
 	/* (non-Javadoc)
 	 * @see ILabelProvider#getText
 	 */
+	@Override
 	public String getText(Object element) {
 		if (element instanceof IStorage) {
 			return BasicElementLabels.getResourceName(((IStorage)element).getName());
@@ -71,11 +73,12 @@ public class StorageLabelProvider extends LabelProvider {
 	 *
 	 * @see IBaseLabelProvider#dispose
 	 */
+	@Override
 	public void dispose() {
 		if (fJarImageMap != null) {
-			Iterator each= fJarImageMap.values().iterator();
+			Iterator<Image> each= fJarImageMap.values().iterator();
 			while (each.hasNext()) {
-				Image image= (Image)each.next();
+				Image image= each.next();
 				image.dispose();
 			}
 			fJarImageMap= null;
@@ -100,7 +103,7 @@ public class StorageLabelProvider extends LabelProvider {
 
 		// Try to find icon for full name
 		String name= element.getName();
-		Image image= (Image)fJarImageMap.get(name);
+		Image image= fJarImageMap.get(name);
 		if (image != null)
 			return image;
 		IFileEditorMapping[] mappings= getEditorRegistry().getFileEditorMappings();
@@ -119,7 +122,7 @@ public class StorageLabelProvider extends LabelProvider {
 			key= path.getFileExtension();
 			if (key == null)
 				return getDefaultImage();
-			image= (Image)fJarImageMap.get(key);
+			image= fJarImageMap.get(key);
 			if (image != null)
 				return image;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java
index 2b9df95..24cc394 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public class TreeHierarchyLayoutProblemsDecorator extends ProblemsLabelDecorator
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.ProblemsLabelDecorator#computeAdornmentFlags(java.lang.Object)
 	 */
+	@Override
 	protected int computeAdornmentFlags(Object element) {
 		if (element instanceof IPackageFragment) {
 			return computePackageAdornmentFlags((IPackageFragment) element);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ViewHistory.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ViewHistory.java
index 47a29ec..3b81eb7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ViewHistory.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ViewHistory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,9 +22,11 @@ import org.eclipse.jface.resource.ImageDescriptor;
 
 
 /**
- *
+ * History support for a view.
+ * 
+ * @param <E> the type of elements managed by this history
  */
-public abstract class ViewHistory {
+public abstract class ViewHistory<E> {
 
 	/**
 	 * Configure the history List action.
@@ -58,23 +60,23 @@ public abstract class ViewHistory {
 	 * @return An unmodifiable list of history entries, can be empty. The list
 	 *         is sorted by age, youngest first.
 	 */
-	public abstract List getHistoryEntries();
+	public abstract List<E> getHistoryEntries();
 
 	/**
 	 * @return the active entry from the history
 	 */
-	public abstract Object getCurrentEntry();
+	public abstract E getCurrentEntry();
 
 	/**
 	 * @param entry the entry to activate, or <code>null</code> if none should be active
 	 */
-	public abstract void setActiveEntry(Object entry);
+	public abstract void setActiveEntry(E entry);
 
 	/**
 	 * @param remainingEntries all the remaining history entries, can be empty
 	 * @param activeEntry the entry to activate, or <code>null</code> if none should be active
 	 */
-	public abstract void setHistoryEntries(List remainingEntries, Object activeEntry);
+	public abstract void setHistoryEntries(List<E> remainingEntries, E activeEntry);
 
 	/**
 	 * @param element the element to render
@@ -86,13 +88,13 @@ public abstract class ViewHistory {
 	 * @param element the element to render
 	 * @return the label text for the given element
 	 */
-	public abstract String getText(Object element);
+	public abstract String getText(E element);
 
 	/**
 	 * @return a history drop down action, ready for inclusion in a view toolbar
 	 */
 	public final IAction createHistoryDropDownAction() {
-		return new HistoryDropDownAction(this);
+		return new HistoryDropDownAction<E>(this);
 	}
 
 	public abstract void addMenuEntries(MenuManager manager);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/ClassPathDetector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/ClassPathDetector.java
index 792bc2e..a1492ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/ClassPathDetector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/ClassPathDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,6 @@ import org.eclipse.jdt.core.JavaConventions;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.ToolFactory;
 import org.eclipse.jdt.core.compiler.CharOperation;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.PackageDeclaration;
@@ -58,15 +57,16 @@ import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.ui.PreferenceConstants;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 
 /**
   */
 public class ClassPathDetector implements IResourceProxyVisitor {
 
-	private HashMap fSourceFolders;
-	private List fClassFiles;
-	private HashSet fJARFiles;
+	private HashMap<IPath, List<IPath>> fSourceFolders;
+	private List<IResource> fClassFiles;
+	private HashSet<IPath> fJARFiles;
 
 	private IProject fProject;
 
@@ -75,20 +75,18 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 
 	private IProgressMonitor fMonitor;
 
-	private static class CPSorter implements Comparator {
+	private static class CPSorter implements Comparator<IClasspathEntry> {
 		private Collator fCollator= Collator.getInstance();
-		public int compare(Object o1, Object o2) {
-			IClasspathEntry e1= (IClasspathEntry) o1;
-			IClasspathEntry e2= (IClasspathEntry) o2;
+		public int compare(IClasspathEntry e1, IClasspathEntry e2) {
 			return fCollator.compare(e1.getPath().toString(), e2.getPath().toString());
 		}
 	}
 
 
 	public ClassPathDetector(IProject project, IProgressMonitor monitor) throws CoreException {
-		fSourceFolders= new HashMap();
-		fJARFiles= new HashSet(10);
-		fClassFiles= new ArrayList(100);
+		fSourceFolders= new HashMap<IPath, List<IPath>>();
+		fJARFiles= new HashSet<IPath>(10);
+		fClassFiles= new ArrayList<IResource>(100);
 		fProject= project;
 
 		fResultClasspath= null;
@@ -102,9 +100,9 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 	}
 
 
-	private boolean isNested(IPath path, Iterator iter) {
+	private boolean isNested(IPath path, Iterator<IPath> iter) {
 		while (iter.hasNext()) {
-			IPath other= (IPath) iter.next();
+			IPath other= iter.next();
 			if (other.isPrefixOf(path)) {
 				return true;
 			}
@@ -126,7 +124,7 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 			fProject.accept(this, IResource.NONE);
 			monitor.worked(1);
 
-			ArrayList cpEntries= new ArrayList();
+			ArrayList<IClasspathEntry> cpEntries= new ArrayList<IClasspathEntry>();
 
 			detectSourceFolders(cpEntries);
 			if (monitor.isCanceled()) {
@@ -155,7 +153,7 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 				cpEntries.add(jreEntries[i]);
 			}
 
-			IClasspathEntry[] entries= (IClasspathEntry[]) cpEntries.toArray(new IClasspathEntry[cpEntries.size()]);
+			IClasspathEntry[] entries= cpEntries.toArray(new IClasspathEntry[cpEntries.size()]);
 			if (!JavaConventions.validateClasspath(JavaCore.create(fProject), entries, outputLocation).isOK()) {
 				return;
 			}
@@ -168,10 +166,10 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 	}
 
 	private IPath findInSourceFolders(IPath path) {
-		Iterator iter= fSourceFolders.keySet().iterator();
+		Iterator<IPath> iter= fSourceFolders.keySet().iterator();
 		while (iter.hasNext()) {
 			Object key= iter.next();
-			List cus= (List) fSourceFolders.get(key);
+			List<IPath> cus= fSourceFolders.get(key);
 			if (cus.contains(path)) {
 				return (IPath) key;
 			}
@@ -180,9 +178,9 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 	}
 
 	private IPath detectOutputFolder() throws CoreException {
-		HashSet classFolders= new HashSet();
+		HashSet<IPath> classFolders= new HashSet<IPath>();
 
-		for (Iterator iter= fClassFiles.iterator(); iter.hasNext();) {
+		for (Iterator<IResource> iter= fClassFiles.iterator(); iter.hasNext();) {
 			IFile file= (IFile) iter.next();
 			IClassFileReader reader= null;
 			InputStream content= null;
@@ -242,11 +240,11 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 	}
 
 
-	private void detectLibraries(ArrayList cpEntries, IPath outputLocation) {
-		ArrayList res= new ArrayList();
-		Set sourceFolderSet= fSourceFolders.keySet();
-		for (Iterator iter= fJARFiles.iterator(); iter.hasNext();) {
-			IPath path= (IPath) iter.next();
+	private void detectLibraries(ArrayList<IClasspathEntry> cpEntries, IPath outputLocation) {
+		ArrayList<IClasspathEntry> res= new ArrayList<IClasspathEntry>();
+		Set<IPath> sourceFolderSet= fSourceFolders.keySet();
+		for (Iterator<IPath> iter= fJARFiles.iterator(); iter.hasNext();) {
+			IPath path= iter.next();
 			if (isNested(path, sourceFolderSet.iterator())) {
 				continue;
 			}
@@ -261,20 +259,20 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 	}
 
 
-	private void detectSourceFolders(ArrayList resEntries) {
-		ArrayList res= new ArrayList();
-		Set sourceFolderSet= fSourceFolders.keySet();
-		for (Iterator iter= sourceFolderSet.iterator(); iter.hasNext();) {
-			IPath path= (IPath) iter.next();
-			ArrayList excluded= new ArrayList();
-			for (Iterator inner= sourceFolderSet.iterator(); inner.hasNext();) {
-				IPath other= (IPath) inner.next();
+	private void detectSourceFolders(ArrayList<IClasspathEntry> resEntries) {
+		ArrayList<IClasspathEntry> res= new ArrayList<IClasspathEntry>();
+		Set<IPath> sourceFolderSet= fSourceFolders.keySet();
+		for (Iterator<IPath> iter= sourceFolderSet.iterator(); iter.hasNext();) {
+			IPath path= iter.next();
+			ArrayList<IPath> excluded= new ArrayList<IPath>();
+			for (Iterator<IPath> inner= sourceFolderSet.iterator(); inner.hasNext();) {
+				IPath other= inner.next();
 				if (!path.equals(other) && path.isPrefixOf(other)) {
 					IPath pathToExclude= other.removeFirstSegments(path.segmentCount()).addTrailingSeparator();
 					excluded.add(pathToExclude);
 				}
 			}
-			IPath[] excludedPaths= (IPath[]) excluded.toArray(new IPath[excluded.size()]);
+			IPath[] excludedPaths= excluded.toArray(new IPath[excluded.size()]);
 			IClasspathEntry entry= JavaCore.newSourceEntry(path, excludedPaths);
 			res.add(entry);
 		}
@@ -285,7 +283,7 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 	private void visitCompilationUnit(IFile file) {
 		ICompilationUnit cu= JavaCore.createCompilationUnitFrom(file);
 		if (cu != null) {
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setSource(cu);
 			parser.setFocalPosition(0);
 			CompilationUnit root= (CompilationUnit)parser.createAST(null);
@@ -305,10 +303,10 @@ public class ClassPathDetector implements IResourceProxyVisitor {
 		}
 	}
 
-	private void addToMap(HashMap map, IPath folderPath, IPath relPath) {
-		List list= (List) map.get(folderPath);
+	private void addToMap(HashMap<IPath, List<IPath>> map, IPath folderPath, IPath relPath) {
+		List<IPath> list= map.get(folderPath);
 		if (list == null) {
-			list= new ArrayList(50);
+			list= new ArrayList<IPath>(50);
 			map.put(folderPath, list);
 		}
 		list.add(relPath);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java
index b22e6c8..1befc42 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class JavaProjectWizard extends NewElementWizard implements IExecutableEx
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.Wizard#addPages()
 	 */
+	@Override
 	public void addPages() {
 		if (fFirstPage == null)
 			fFirstPage= new NewJavaProjectWizardPageOne();
@@ -76,6 +77,7 @@ public class JavaProjectWizard extends NewElementWizard implements IExecutableEx
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 		fSecondPage.performFinish(monitor); // use the full progress monitor
 	}
@@ -83,6 +85,7 @@ public class JavaProjectWizard extends NewElementWizard implements IExecutableEx
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		boolean res= super.performFinish();
 		if (res) {
@@ -120,6 +123,7 @@ public class JavaProjectWizard extends NewElementWizard implements IExecutableEx
 		return null;
 	}
 
+	@Override
 	protected void handleFinishException(Shell shell, InvocationTargetException e) {
 		String title= NewWizardMessages.JavaProjectWizard_op_error_title;
 		String message= NewWizardMessages.JavaProjectWizard_op_error_create_message;
@@ -137,6 +141,7 @@ public class JavaProjectWizard extends NewElementWizard implements IExecutableEx
 	/* (non-Javadoc)
 	 * @see IWizard#performCancel()
 	 */
+	@Override
 	public boolean performCancel() {
 		fSecondPage.performCancel();
 		return super.performCancel();
@@ -145,6 +150,7 @@ public class JavaProjectWizard extends NewElementWizard implements IExecutableEx
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#getCreatedElement()
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fSecondPage.getJavaProject();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewAnnotationCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewAnnotationCreationWizard.java
index aa61265..fada22a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewAnnotationCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewAnnotationCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class NewAnnotationCreationWizard extends NewElementWizard {
 	/*
 	 * @see Wizard#addPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		if (fPage == null) {
@@ -57,6 +58,7 @@ public class NewAnnotationCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#canRunForked()
 	 */
+	@Override
 	protected boolean canRunForked() {
 		return !fPage.isEnclosingTypeSelected();
 	}
@@ -64,6 +66,7 @@ public class NewAnnotationCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 		fPage.createType(monitor); // use the full progress monitor
 	}
@@ -71,6 +74,7 @@ public class NewAnnotationCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		warnAboutTypeCommentDeprecation();
 		boolean res= super.performFinish();
@@ -89,6 +93,7 @@ public class NewAnnotationCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#getCreatedElement()
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fPage.getCreatedType();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewClassCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewClassCreationWizard.java
index c45a3dc..e6d8179 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewClassCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewClassCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class NewClassCreationWizard extends NewElementWizard {
 	/*
 	 * @see Wizard#createPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		if (fPage == null) {
@@ -56,6 +57,7 @@ public class NewClassCreationWizard extends NewElementWizard {
 	/*(non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#canRunForked()
 	 */
+	@Override
 	protected boolean canRunForked() {
 		return !fPage.isEnclosingTypeSelected();
 	}
@@ -63,6 +65,7 @@ public class NewClassCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 		fPage.createType(monitor); // use the full progress monitor
 	}
@@ -70,6 +73,7 @@ public class NewClassCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		warnAboutTypeCommentDeprecation();
 		boolean res= super.performFinish();
@@ -88,6 +92,7 @@ public class NewClassCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#getCreatedElement()
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fPage.getCreatedType();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java
index 030c87f..8da44a4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,6 +110,7 @@ public abstract class NewElementWizard extends Wizard implements INewWizard {
 	/*
 	 * @see Wizard#performFinish
 	 */
+	@Override
 	public boolean performFinish() {
 		IWorkspaceRunnable op= new IWorkspaceRunnable() {
 			public void run(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewEnumCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewEnumCreationWizard.java
index 4c1b860..64d6110 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewEnumCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewEnumCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class NewEnumCreationWizard extends NewElementWizard {
 	/*
 	 * @see Wizard#addPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		if (fPage == null) {
@@ -56,6 +57,7 @@ public class NewEnumCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#canRunForked()
 	 */
+	@Override
 	protected boolean canRunForked() {
 		return !fPage.isEnclosingTypeSelected();
 	}
@@ -63,6 +65,7 @@ public class NewEnumCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 	    fPage.createType(monitor); // use the full progress monitor
 	}
@@ -70,6 +73,7 @@ public class NewEnumCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		warnAboutTypeCommentDeprecation();
 		boolean res= super.performFinish();
@@ -88,6 +92,7 @@ public class NewEnumCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#getCreatedElement()
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fPage.getCreatedType();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewInterfaceCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewInterfaceCreationWizard.java
index ad2ae62..da48e2f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewInterfaceCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewInterfaceCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class NewInterfaceCreationWizard extends NewElementWizard {
 	/*
 	 * @see Wizard#addPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		if (fPage == null) {
@@ -56,6 +57,7 @@ public class NewInterfaceCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#canRunForked()
 	 */
+	@Override
 	protected boolean canRunForked() {
 		return !fPage.isEnclosingTypeSelected();
 	}
@@ -63,6 +65,7 @@ public class NewInterfaceCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 		fPage.createType(monitor); // use the full progress monitor
 	}
@@ -70,6 +73,7 @@ public class NewInterfaceCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		warnAboutTypeCommentDeprecation();
 		boolean res= super.performFinish();
@@ -88,6 +92,7 @@ public class NewInterfaceCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#getCreatedElement()
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fPage.getCreatedType();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewJavaWorkingSetWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewJavaWorkingSetWizard.java
index 43b3d25..1e9a879 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewJavaWorkingSetWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewJavaWorkingSetWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ public class NewJavaWorkingSetWizard extends Wizard implements INewWizard {
 	/*
 	 * @see Wizard#addPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		if (fPage == null) {
@@ -54,6 +55,7 @@ public class NewJavaWorkingSetWizard extends Wizard implements INewWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		fPage.finish();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewPackageCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewPackageCreationWizard.java
index 65bb839..29159ae 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewPackageCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewPackageCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ public class NewPackageCreationWizard extends NewElementWizard {
 	/*
 	 * @see Wizard#addPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		if (fPage == null) {
@@ -52,6 +53,7 @@ public class NewPackageCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 		fPage.createPackage(monitor); // use the full progress monitor
 	}
@@ -59,6 +61,7 @@ public class NewPackageCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		boolean res= super.performFinish();
 		if (res) {
@@ -70,6 +73,7 @@ public class NewPackageCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#getCreatedElement()
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fPage.getNewPackageFragment();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderCreationWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderCreationWizard.java
index 4af6f20..ead686f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderCreationWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderCreationWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public class NewSourceFolderCreationWizard extends NewElementWizard {
 	/*
 	 * @see Wizard#addPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 		fPage= new NewSourceFolderWizardPage();
@@ -43,6 +44,7 @@ public class NewSourceFolderCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 		fPage.createPackageFragmentRoot(monitor); // use the full progress monitor
 	}
@@ -50,6 +52,7 @@ public class NewSourceFolderCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		boolean res= super.performFinish();
 		if (res) {
@@ -61,6 +64,7 @@ public class NewSourceFolderCreationWizard extends NewElementWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#getCreatedElement()
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fPage.getNewPackageFragmentRoot();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderWizardPage.java
index 4474adc..8a054d2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewSourceFolderWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,9 +142,7 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 
 	public void init(IStructuredSelection selection) {
 		String projPath= getProjectPath(selection);
-		if (projPath != null) {
-			fProjectField.setText(projPath);
-		}
+		fProjectField.setText(projPath != null ? projPath : ""); //$NON-NLS-1$
 		fRootDialogField.setText(""); //$NON-NLS-1$
 	}
 
@@ -202,10 +200,12 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
-			fRootDialogField.setFocus();
+			if (fProjectField.getText().length() > 0)
+				fRootDialogField.setFocus();
 		}
 	}
 
@@ -341,7 +341,7 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 						}
 					}
 				}
-				ArrayList newEntries= new ArrayList(fEntries.length + 1);
+				ArrayList<IClasspathEntry> newEntries= new ArrayList<IClasspathEntry>(fEntries.length + 1);
 				int projectEntryIndex= -1;
 
 				for (int i= 0; i < fEntries.length; i++) {
@@ -360,7 +360,7 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 
 				IClasspathEntry newEntry= JavaCore.newSourceEntry(path);
 
-				Set modified= new HashSet();
+				Set<IClasspathEntry> modified= new HashSet<IClasspathEntry>();
 				if (fExcludeInOthersFields.isSelected()) {
 					addExclusionPatterns(newEntry, newEntries, modified);
 					IClasspathEntry entry= JavaCore.newSourceEntry(path);
@@ -375,7 +375,7 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 					}
 				}
 
-				fNewEntries= (IClasspathEntry[]) newEntries.toArray(new IClasspathEntry[newEntries.size()]);
+				fNewEntries= newEntries.toArray(new IClasspathEntry[newEntries.size()]);
 				fNewOutputLocation= fOutputLocation;
 
 				IJavaModelStatus status= JavaConventions.validateClasspath(fCurrJProject, fNewEntries, fNewOutputLocation);
@@ -399,7 +399,7 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 					return;
 				}
 				if (!modified.isEmpty()) {
-					String info= modified.size() == 1 ? Messages.format(NewWizardMessages.NewSourceFolderWizardPage_warning_AddedExclusions_singular, ((IClasspathEntry)(modified.iterator().next()))
+					String info= modified.size() == 1 ? Messages.format(NewWizardMessages.NewSourceFolderWizardPage_warning_AddedExclusions_singular, (modified.iterator().next())
 							.getPath()) : Messages.format(NewWizardMessages.NewSourceFolderWizardPage_warning_AddedExclusions_plural, String.valueOf(modified.size()));
 					fRootStatus.setInfo(info);
 					return;
@@ -408,9 +408,9 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 		}
 	}
 
-	private void insertAtEndOfCategory(IClasspathEntry entry, List entries) {
+	private void insertAtEndOfCategory(IClasspathEntry entry, List<IClasspathEntry> entries) {
 		int length= entries.size();
-		IClasspathEntry[] elements= (IClasspathEntry[])entries.toArray(new IClasspathEntry[length]);
+		IClasspathEntry[] elements= entries.toArray(new IClasspathEntry[length]);
 		int i= 0;
 		while (i < length && elements[i].getEntryKind() != entry.getEntryKind()) {
 			i++;
@@ -438,10 +438,10 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 		}
 	}
 
-	private void addExclusionPatterns(IClasspathEntry newEntry, List existing, Set modifiedEntries) {
+	private void addExclusionPatterns(IClasspathEntry newEntry, List<IClasspathEntry> existing, Set<IClasspathEntry> modifiedEntries) {
 		IPath entryPath= newEntry.getPath();
 		for (int i= 0; i < existing.size(); i++) {
-			IClasspathEntry curr= (IClasspathEntry) existing.get(i);
+			IClasspathEntry curr= existing.get(i);
 			IPath currPath= curr.getPath();
 			if (curr.getEntryKind() == IClasspathEntry.CPE_SOURCE && currPath.isPrefixOf(entryPath)) {
 				IPath[] exclusionFilters= curr.getExclusionPatterns();
@@ -505,7 +505,7 @@ public class NewSourceFolderWizardPage extends NewElementWizardPage {
 	// ------------- choose dialogs
 
 	private IFolder chooseFolder(String title, String message, IPath initialPath) {
-		Class[] acceptedClasses= new Class[] { IFolder.class };
+		Class<?>[] acceptedClasses= new Class[] { IFolder.class };
 		ISelectionStatusValidator validator= new TypedElementSelectionValidator(acceptedClasses, false);
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses, null);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java
index 1081771..d4d7c76 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,7 @@ public class NewTypeDropDownAction extends Action implements IMenuCreator, IWork
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.wizards.AbstractOpenWizardAction#createWizard()
 		 */
+		@Override
 		protected INewWizard createWizard() throws CoreException {
 			return (INewWizard) CoreUtility.createExtension(fConfigurationElement, ATT_CLASS);
 		}
@@ -153,12 +154,13 @@ public class NewTypeDropDownAction extends Action implements IMenuCreator, IWork
 		return fMenu;
 	}
 
+	@Override
 	public void run() {
 		new OpenNewClassWizardAction().run();
 	}
 
 	public static OpenTypeWizardAction[] getActionFromDescriptors() {
-		ArrayList containers= new ArrayList();
+		ArrayList<OpenTypeWizardAction> containers= new ArrayList<OpenTypeWizardAction>();
 
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(PlatformUI.PLUGIN_ID, PL_NEW);
 		if (extensionPoint != null) {
@@ -170,7 +172,7 @@ public class NewTypeDropDownAction extends Action implements IMenuCreator, IWork
 				}
 			}
 		}
-		return (OpenTypeWizardAction[]) containers.toArray(new OpenTypeWizardAction[containers.size()]);
+		return containers.toArray(new OpenTypeWizardAction[containers.size()]);
 	}
 
 	private static boolean isJavaTypeWizard(IConfigurationElement element) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
index 71edcdf..7fe3af9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -209,6 +209,7 @@ public final class NewWizardMessages extends NLS {
 	public static String NewJavaProjectWizardPageOne_NoJREFound_link;
 	public static String NewJavaProjectWizardPageOne_LayoutGroup_link_description;
 	public static String NewJavaProjectWizardPageOne_LayoutGroup_option_oneFolder;
+	public static String NewJavaProjectWizardPageOne_DetectGroup_java17_message;
 	public static String NewJavaProjectWizardPageOne_DetectGroup_differendWorkspaceCC_message;
 	public static String NewJavaProjectWizardPageOne_Message_invalidProjectNameForWorkspaceRoot;
 	public static String NewJavaProjectWizardPageOne_Message_cannotCreateAtExternalLocation;
@@ -599,17 +600,9 @@ public final class NewWizardMessages extends NLS {
 
 	public static String NewFolderDialog_linkTargetNonExistent;
 	public static String NewFolderDialog_linkTargetNotFolder;
-	public static String NewFolderDialog_folderNameEmpty;
 	public static String NewFolderDialog_folderNameEmpty_alreadyExists;
-	public static String NewFolderDialog_errorTitle;
-	public static String NewFolderDialog_internalError;
-	public static String NewFolderDialog_progress;
 	public static String NewFolderDialog_createIn;
 
-	public static String LinkFolderDialog_title;
-	public static String LinkFolderDialog_createIn;
-	public static String LinkFolderDialog_directory_message;
-	public static String LinkFolderDialog_folderNameGroup_label;
 	public static String LinkFolderDialog_dependenciesGroup_locationLabel_desc;
 	public static String LinkFolderDialog_dependenciesGroup_browseButton_desc;
 	public static String LinkFolderDialog_dependenciesGroup_variables_desc;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
index d25b07f..4205d59 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -54,7 +54,7 @@ NewPackageWizardPage_error_InvalidPackageName=Invalid package name. {0}
 NewPackageWizardPage_error_IsOutputFolder=Name conflict with output folder.
 
 NewPackageWizardPage_error_PackageExists=Package already exists.
-NewPackageWizardPage_error_PackageExistsDifferentCase=Package already exists with a different case
+NewPackageWizardPage_error_PackageExistsDifferentCase=Package already exists with a different case.
 NewPackageWizardPage_error_EnterName=Enter a package name.
 NewPackageWizardPage_error_PackageNotShown=Package already exists. Note: Views might filter empty parent packages.
 NewPackageWizardPage_error_PackageNameFiltered= This package is hidden in the workspace due to resource filters.
@@ -721,18 +721,10 @@ NewSourceContainerWorkbookPage_ToolBar_Help_link=/org.eclipse.jdt.doc.user/refer
 # ------- NewFolderDialog -------
 NewFolderDialog_linkTargetNonExistent=Link target does not exist
 NewFolderDialog_linkTargetNotFolder=Link target must be a folder
-NewFolderDialog_folderNameEmpty=Folder name must be specified
 NewFolderDialog_folderNameEmpty_alreadyExists=The folder ''{0}'' already exists.
-NewFolderDialog_errorTitle=Creation Error
-NewFolderDialog_internalError=Internal error: {0}
-NewFolderDialog_progress=Creating new folder
 NewFolderDialog_createIn=Link additional source to project ''{0}''.
 
 # ------- Link Folder Dialog -------
-LinkFolderDialog_title=Link Additional Source
-LinkFolderDialog_createIn=Link additional source to project ''{0}''.
-LinkFolderDialog_directory_message=Choose a directory for the project contents:
-LinkFolderDialog_folderNameGroup_label=&Folder name:
 LinkFolderDialog_dependenciesGroup_locationLabel_desc=&Linked folder location:
 LinkFolderDialog_dependenciesGroup_browseButton_desc=Bro&wse...
 LinkFolderDialog_dependenciesGroup_variables_desc=&Variables...
@@ -881,6 +873,7 @@ NewJavaProjectWizardPageOne_LayoutGroup_link_description=<a>Configure default...
 NewJavaProjectWizardPageOne_DetectGroup_message=The wizard will automatically configure the JRE and the project layout based on the existing source.<a></a>
 NewJavaProjectWizardPageOne_DetectGroup_jre_message=The current workspace uses a {1} JRE with compiler compliance level {0}. This is not recommended and either the JRE or the compiler compliance level should be changed. <a>Configure...</a>
 NewJavaProjectWizardPageOne_DetectGroup_differendWorkspaceCC_message=The default compiler compliance level for the current workspace is {0}. The new project will use a project specific compiler compliance level of {1}.<a></a>
+NewJavaProjectWizardPageOne_DetectGroup_java17_message=The 1.7 compiler compliance level is not yet supported. The new project will use a project specific compiler compliance level of 1.6.<a></a>
 NewJavaProjectWizardPageOne_Message_enterProjectName=Enter a project name.
 NewJavaProjectWizardPageOne_Message_projectAlreadyExists=A project with this name already exists.
 NewJavaProjectWizardPageOne_JREGroup_specific_compliance=U&se a project specific JRE: 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/SuperInterfaceSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/SuperInterfaceSelectionDialog.java
index 4b711da..66be739 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/SuperInterfaceSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/SuperInterfaceSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	private static final int ADD_ID= IDialogConstants.CLIENT_ID + 1;
 
 	private NewTypeWizardPage fTypeWizardPage;
-	private List fOldContent;
+	private List<String> fOldContent;
 
 	/**
 	 * Creates new instance of SuperInterfaceSelectionDialog
@@ -82,6 +82,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.dialogs.SelectionDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected void createButtonsForButtonBar(Composite parent) {
 		createButton(parent, ADD_ID, NewWizardMessages.SuperInterfaceSelectionDialog_addButton_label, true);
 		super.createButtonsForButtonBar(parent);
@@ -90,6 +91,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
 	 */
+	@Override
 	protected IDialogSettings getDialogBoundsSettings() {
 		return JavaPlugin.getDefault().getDialogSettingsSection("DialogBounds_SuperInterfaceSelectionDialog"); //$NON-NLS-1$
 	}
@@ -97,6 +99,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.dialogs.SelectionStatusDialog#updateButtonsEnableState(org.eclipse.core.runtime.IStatus)
 	 */
+	@Override
 	protected void updateButtonsEnableState(IStatus status) {
 		super.updateButtonsEnableState(status);
 		Button addButton= getButton(ADD_ID);
@@ -107,6 +110,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#handleShellCloseEvent()
 	 */
+	@Override
 	protected void handleShellCloseEvent() {
 		super.handleShellCloseEvent();
 		// Handle the closing of the shell by selecting the close icon
@@ -116,6 +120,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
 	 */
+	@Override
 	protected void cancelPressed() {
 		fTypeWizardPage.setSuperInterfaces(fOldContent, true);
 		super.cancelPressed();
@@ -124,6 +129,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
 	 */
+	@Override
 	protected void buttonPressed(int buttonId) {
 		if (buttonId == ADD_ID) {
 			addSelectedInterfaces();
@@ -135,6 +141,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.dialogs.SelectionStatusDialog#okPressed()
 	 */
+	@Override
 	protected void okPressed() {
 		addSelectedInterfaces();
 		super.okPressed();
@@ -147,7 +154,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 		StructuredSelection selection= getSelectedItems();
 		if (selection == null)
 			return;
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object obj= iter.next();
 			if (obj instanceof TypeNameMatch) {
 				accessedHistoryItem(obj);
@@ -175,6 +182,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/*(non-Javadoc)
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#handleDoubleClick()
 	 */
+	@Override
 	protected void handleDoubleClick() {
 		buttonPressed(ADD_ID);
 	}
@@ -182,6 +190,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#handleSelected(org.eclipse.jface.viewers.StructuredSelection)
 	 */
+	@Override
 	protected void handleSelected(StructuredSelection selection) {
 		super.handleSelected(selection);
 
@@ -206,6 +215,7 @@ public class SuperInterfaceSelectionDialog extends OpenTypeSelectionDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.dialogs.OpenTypeSelectionDialog2#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.SUPER_INTERFACE_SELECTION_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java
index 2963789..67a4162 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,9 +29,9 @@ public class TypedElementSelectionValidator implements ISelectionStatusValidator
 	private IStatus fgErrorStatus= new StatusInfo(IStatus.ERROR, ""); //$NON-NLS-1$
 	private IStatus fgOKStatus= new StatusInfo();
 
-	private Class[] fAcceptedTypes;
+	private Class<?>[] fAcceptedTypes;
 	private boolean fAllowMultipleSelection;
-	private Collection fRejectedElements;
+	private Collection<?> fRejectedElements;
 
 	/**
 	 * @param acceptedTypes The types accepted by the validator
@@ -48,7 +48,7 @@ public class TypedElementSelectionValidator implements ISelectionStatusValidator
 	 * allows multiple selection.
 	 * @param rejectedElements A list of elements that are not accepted
 	 */
-	public TypedElementSelectionValidator(Class[] acceptedTypes, boolean allowMultipleSelection, Collection rejectedElements) {
+	public TypedElementSelectionValidator(Class<?>[] acceptedTypes, boolean allowMultipleSelection, Collection rejectedElements) {
 		Assert.isNotNull(acceptedTypes);
 		fAcceptedTypes= acceptedTypes;
 		fAllowMultipleSelection= allowMultipleSelection;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java
index d7985e4..35ad249 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@ import org.eclipse.jface.viewers.ViewerFilter;
  */
 public class TypedViewerFilter extends ViewerFilter {
 
-	private Class[] fAcceptedTypes;
+	private Class<?>[] fAcceptedTypes;
 	private Object[] fRejectedElements;
 
 	/**
@@ -47,6 +47,7 @@ public class TypedViewerFilter extends ViewerFilter {
 	/**
 	 * @see ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (fRejectedElements != null) {
 			for (int i= 0; i < fRejectedElements.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRuleEntryDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRuleEntryDialog.java
index 8bb86e3..e586b39 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRuleEntryDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRuleEntryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,10 +101,12 @@ public class AccessRuleEntryDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -179,6 +181,7 @@ public class AccessRuleEntryDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.ACCESS_RULES_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRulesDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRulesDialog.java
index e44a38a..b870e1b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRulesDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AccessRulesDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,7 +63,7 @@ public class AccessRulesDialog extends StatusDialog {
 
 	public static final int SWITCH_PAGE= 10;
 
-	private final ListDialogField fAccessRulesList;
+	private final ListDialogField<IAccessRule> fAccessRulesList;
 	private final SelectionButtonDialogField fCombineRulesCheckbox;
 	private final CPListElement fCurrElement;
 
@@ -98,11 +98,12 @@ public class AccessRulesDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
 
-	private ListDialogField createListContents(CPListElement entryToEdit) {
+	private ListDialogField<IAccessRule> createListContents(CPListElement entryToEdit) {
 		String label= NewWizardMessages.AccessRulesDialog_rules_label;
 		String[] buttonLabels= new String[] {
 				NewWizardMessages.AccessRulesDialog_rules_add,
@@ -117,7 +118,7 @@ public class AccessRulesDialog extends StatusDialog {
 		TypeRestrictionAdapter adapter= new TypeRestrictionAdapter();
 		AccessRulesLabelProvider labelProvider= new AccessRulesLabelProvider();
 
-		ListDialogField patternList= new ListDialogField(adapter, buttonLabels, labelProvider);
+		ListDialogField<IAccessRule> patternList= new ListDialogField<IAccessRule>(adapter, buttonLabels, labelProvider);
 		patternList.setDialogFieldListener(adapter);
 
 		patternList.setLabelText(label);
@@ -127,7 +128,7 @@ public class AccessRulesDialog extends StatusDialog {
 		patternList.enableButton(IDX_EDIT, false);
 
 		IAccessRule[] rules= (IAccessRule[]) entryToEdit.getAttribute(CPListElement.ACCESSRULES);
-		ArrayList elements= new ArrayList(rules.length);
+		ArrayList<IAccessRule> elements= new ArrayList<IAccessRule>(rules.length);
 		for (int i= 0; i < rules.length; i++) {
 			elements.add(rules[i]);
 		}
@@ -137,6 +138,7 @@ public class AccessRulesDialog extends StatusDialog {
 	}
 
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -207,6 +209,7 @@ public class AccessRulesDialog extends StatusDialog {
 					// with link
 					text.setText(Messages.format(NewWizardMessages.AccessRulesDialog_severity_info_with_link, args), true, false);
 					text.addHyperlinkListener(new HyperlinkAdapter() {
+						@Override
 						public void linkActivated(HyperlinkEvent e) {
 							doErrorWarningLinkPressed();
 						}
@@ -267,7 +270,7 @@ public class AccessRulesDialog extends StatusDialog {
 	}
 
 
-	protected void doCustomButtonPressed(ListDialogField field, int index) {
+	protected void doCustomButtonPressed(ListDialogField<IAccessRule> field, int index) {
 		if (index == IDX_ADD) {
 			addEntry(field);
 		} else if (index == IDX_EDIT) {
@@ -275,33 +278,33 @@ public class AccessRulesDialog extends StatusDialog {
 		}
 	}
 
-	protected void doDoubleClicked(ListDialogField field) {
+	protected void doDoubleClicked(ListDialogField<IAccessRule> field) {
 		editEntry(field);
 	}
 
-	protected void doSelectionChanged(ListDialogField field) {
-		List selected= field.getSelectedElements();
+	protected void doSelectionChanged(ListDialogField<IAccessRule> field) {
+		List<IAccessRule> selected= field.getSelectedElements();
 		field.enableButton(IDX_EDIT, canEdit(selected));
 	}
 
-	private boolean canEdit(List selected) {
+	private boolean canEdit(List<IAccessRule> selected) {
 		return selected.size() == 1;
 	}
 
-	private void editEntry(ListDialogField field) {
+	private void editEntry(ListDialogField<IAccessRule> field) {
 
-		List selElements= field.getSelectedElements();
+		List<IAccessRule> selElements= field.getSelectedElements();
 		if (selElements.size() != 1) {
 			return;
 		}
-		IAccessRule rule= (IAccessRule) selElements.get(0);
+		IAccessRule rule= selElements.get(0);
 		AccessRuleEntryDialog dialog= new AccessRuleEntryDialog(getShell(), rule, fCurrElement);
 		if (dialog.open() == Window.OK) {
 			field.replaceElement(rule, dialog.getRule());
 		}
 	}
 
-	private void addEntry(ListDialogField field) {
+	private void addEntry(ListDialogField<IAccessRule> field) {
 		AccessRuleEntryDialog dialog= new AccessRuleEntryDialog(getShell(), null, fCurrElement);
 		if (dialog.open() == Window.OK) {
 			field.addElement(dialog.getRule());
@@ -312,24 +315,24 @@ public class AccessRulesDialog extends StatusDialog {
 
 	// -------- TypeRestrictionAdapter --------
 
-	private class TypeRestrictionAdapter implements IListAdapter, IDialogFieldListener {
+	private class TypeRestrictionAdapter implements IListAdapter<IAccessRule>, IDialogFieldListener {
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#customButtonPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField, int)
 		 */
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<IAccessRule> field, int index) {
 			doCustomButtonPressed(field, index);
 		}
 
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#selectionChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<IAccessRule> field) {
 			doSelectionChanged(field);
 		}
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#doubleClicked(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<IAccessRule> field) {
 			doDoubleClicked(field);
 		}
 
@@ -348,8 +351,8 @@ public class AccessRulesDialog extends StatusDialog {
 	}
 
 	public IAccessRule[] getAccessRules() {
-		List elements= fAccessRulesList.getElements();
-		return (IAccessRule[]) elements.toArray(new IAccessRule[elements.size()]);
+		List<IAccessRule> elements= fAccessRulesList.getElements();
+		return elements.toArray(new IAccessRule[elements.size()]);
 	}
 
 	public boolean doCombineAccessRules() {
@@ -359,14 +362,19 @@ public class AccessRulesDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.ACCESS_RULES_DIALOG);
+		String helpContextId;
+		if (fCurrElement.getEntryKind() == IClasspathEntry.CPE_PROJECT)
+			helpContextId= IJavaHelpContextIds.ACCESS_RULES_DIALOG_COMBINE_RULES;
+		else
+			helpContextId= IJavaHelpContextIds.ACCESS_RULES_DIALOG;
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, helpContextId);
 	}
 
-
 	public void performPageSwitch(IWorkbenchPreferenceContainer pageContainer) {
-		HashMap data= new HashMap();
+		HashMap<String, String> data= new HashMap<String, String>();
 		data.put(ProblemSeveritiesPreferencePage.DATA_SELECT_OPTION_KEY, JavaCore.COMPILER_PB_FORBIDDEN_REFERENCE);
 		data.put(ProblemSeveritiesPreferencePage.DATA_SELECT_OPTION_QUALIFIER, JavaCore.PLUGIN_ID);
 		pageContainer.openPage(ProblemSeveritiesPreferencePage.PROP_ID, data);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizard.java
index 8e85d74..d495bbf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class AddSourceFolderWizard extends BuildPathWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 
@@ -78,8 +79,9 @@ public class AddSourceFolderWizard extends BuildPathWizard {
 	/**
 	 * {@inheritDoc}
 	 */
-	public List getInsertedElements() {
-		List result= super.getInsertedElements();
+	@Override
+	public List<CPListElement> getInsertedElements() {
+		List<CPListElement> result= super.getInsertedElements();
 		if (getEntryToEdit().getOrginalPath() == null)
 			result.add(getEntryToEdit());
 
@@ -89,20 +91,23 @@ public class AddSourceFolderWizard extends BuildPathWizard {
 	/**
 	 * {@inheritDoc}
 	 */
-	public List getRemovedElements() {
+	@Override
+	public List<CPListElement> getRemovedElements() {
 		return fAddFolderPage.getRemovedElements();
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
-	public List getModifiedElements() {
+	@Override
+	public List<CPListElement> getModifiedElements() {
 		return fAddFolderPage.getModifiedElements();
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public boolean performFinish() {
 		getEntryToEdit().setAttribute(CPListElement.INCLUSION, fFilterPage.getInclusionPattern());
 		getEntryToEdit().setAttribute(CPListElement.EXCLUSION, fFilterPage.getExclusionPattern());
@@ -115,6 +120,7 @@ public class AddSourceFolderWizard extends BuildPathWizard {
 		return res;
 	}
 
+	@Override
 	public void cancel() {
 		fAddFolderPage.restore();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
index 5d4a9d8..c9d3f23 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -195,8 +195,8 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 	private final LinkFields fLinkFields;
 
 	private final CPListElement fNewElement;
-	private final List/*<CPListElement>*/ fExistingEntries;
-	private final Hashtable/*<CPListElement, IPath[]>*/ fOrginalExlusionFilters, fOrginalInclusionFilters, fOrginalExlusionFiltersCopy, fOrginalInclusionFiltersCopy;
+	private final List<CPListElement> fExistingEntries;
+	private final Hashtable<CPListElement, IPath[]> fOrginalExlusionFilters, fOrginalInclusionFilters, fOrginalExlusionFiltersCopy, fOrginalInclusionFiltersCopy;
 	private final IPath fOrginalPath;
 	private final boolean fLinkedMode;
 
@@ -204,8 +204,8 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 	private IPath fNewOutputLocation;
 	private CPListElement fOldProjectSourceFolder;
 
-	private List fModifiedElements;
-	private List fRemovedElements;
+	private List<CPListElement> fModifiedElements;
+	private List<CPListElement> fRemovedElements;
 
 	private final boolean fAllowConflict;
 	private final boolean fAllowRemoveProjectFolder;
@@ -213,7 +213,7 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 	private final boolean fCanCommitConflictingBuildpath;
 	private final IContainer fParent;
 
-	public AddSourceFolderWizardPage(CPListElement newElement, List/*<CPListElement>*/ existingEntries, IPath outputLocation,
+	public AddSourceFolderWizardPage(CPListElement newElement, List<CPListElement> existingEntries, IPath outputLocation,
 			boolean linkedMode, boolean canCommitConflictingBuildpath,
 			boolean allowIgnoreConflicts, boolean allowRemoveProjectFolder, boolean allowAddExclusionPatterns, IContainer parent) {
 
@@ -226,12 +226,12 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 		fAllowAddExclusionPatterns= allowAddExclusionPatterns;
 		fParent= parent;
 
-		fOrginalExlusionFilters= new Hashtable();
-		fOrginalInclusionFilters= new Hashtable();
-		fOrginalExlusionFiltersCopy= new Hashtable();
-		fOrginalInclusionFiltersCopy= new Hashtable();
-		for (Iterator iter= existingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= (CPListElement)iter.next();
+		fOrginalExlusionFilters= new Hashtable<CPListElement, IPath[]>();
+		fOrginalInclusionFilters= new Hashtable<CPListElement, IPath[]>();
+		fOrginalExlusionFiltersCopy= new Hashtable<CPListElement, IPath[]>();
+		fOrginalInclusionFiltersCopy= new Hashtable<CPListElement, IPath[]>();
+		for (Iterator<CPListElement> iter= existingEntries.iterator(); iter.hasNext();) {
+			CPListElement element= iter.next();
 			IPath[] exlusions= (IPath[])element.getAttribute(CPListElement.EXCLUSION);
 			if (exlusions != null) {
 				IPath[] save= new IPath[exlusions.length];
@@ -266,8 +266,8 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 
 		fNewElement= newElement;
 		fExistingEntries= existingEntries;
-		fModifiedElements= new ArrayList();
-		fRemovedElements= new ArrayList();
+		fModifiedElements= new ArrayList<CPListElement>();
+		fRemovedElements= new ArrayList<CPListElement>();
 		fOutputLocation= outputLocation;
 
 		RootFieldAdapter adapter= new RootFieldAdapter();
@@ -355,6 +355,7 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 	/*
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
@@ -430,7 +431,7 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 
 		IFolder folder= fParent.getFolder(new Path(fRootDialogField.getText()));
 		for (int i= 0; i < fExistingEntries.size(); i++) {
-			IClasspathEntry curr= ((CPListElement)fExistingEntries.get(i)).getClasspathEntry();
+			IClasspathEntry curr= fExistingEntries.get(i).getClasspathEntry();
 			if (curr.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 				if (path.equals(curr.getPath()) && fExistingEntries.get(i) != fNewElement) {
 					if (folder.exists()) {
@@ -459,7 +460,7 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 			fNewElement.setLinkTarget(fLinkFields.getLinkTarget());
 		}
 		fRemovedElements.clear();
-		Set modified= new HashSet();
+		Set<CPListElement> modified= new HashSet<CPListElement>();
 		boolean isProjectSourceFolderReplaced= false;
 		if (fAddExclusionPatterns.isSelected()) {
 			if (fOrginalPath == null) {
@@ -471,7 +472,7 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 		} else {
 			if (isProjectASourceFolder) {
 				if (fRemoveProjectFolder.isSelected()) {
-					fOldProjectSourceFolder= (CPListElement)fExistingEntries.get(projectEntryIndex);
+					fOldProjectSourceFolder= fExistingEntries.get(projectEntryIndex);
 					fRemovedElements.add(fOldProjectSourceFolder);
 					fExistingEntries.set(projectEntryIndex, fNewElement);
 					isProjectSourceFolderReplaced= true;
@@ -534,8 +535,8 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 	}
 
 	public void restore() {
-		for (Iterator iter= fExistingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= (CPListElement)iter.next();
+		for (Iterator<CPListElement> iter= fExistingEntries.iterator(); iter.hasNext();) {
+			CPListElement element= iter.next();
 			if (fOrginalExlusionFilters.containsKey(element)) {
 				element.setAttribute(CPListElement.EXCLUSION, fOrginalExlusionFiltersCopy.get(element));
 			}
@@ -548,8 +549,8 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 
 	private void restoreCPElements() {
 		if (fNewElement.getPath() != null) {
-			for (Iterator iter= fExistingEntries.iterator(); iter.hasNext();) {
-				CPListElement element= (CPListElement)iter.next();
+			for (Iterator<CPListElement> iter= fExistingEntries.iterator(); iter.hasNext();) {
+				CPListElement element= iter.next();
 				if (fOrginalExlusionFilters.containsKey(element)) {
 					element.setAttribute(CPListElement.EXCLUSION, fOrginalExlusionFilters.get(element));
 				}
@@ -579,8 +580,8 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 			newPath= newPath.removeFirstSegments(projPath.segmentCount()).addTrailingSeparator();
 		}
 
-		for (Iterator iter= fExistingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= (CPListElement)iter.next();
+		for (Iterator<CPListElement> iter= fExistingEntries.iterator(); iter.hasNext();) {
+			CPListElement element= iter.next();
 			IPath elementPath= element.getPath();
 			if (projPath.isPrefixOf(elementPath)) {
 				elementPath= elementPath.removeFirstSegments(projPath.segmentCount());
@@ -700,10 +701,10 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 		return result;
 	}
 
-	private void addExclusionPatterns(CPListElement newEntry, List existing, Set modifiedEntries) {
+	private void addExclusionPatterns(CPListElement newEntry, List<CPListElement> existing, Set<CPListElement> modifiedEntries) {
 		IPath entryPath= newEntry.getPath();
 		for (int i= 0; i < existing.size(); i++) {
-			CPListElement curr= (CPListElement) existing.get(i);
+			CPListElement curr= existing.get(i);
 			IPath currPath= curr.getPath();
 			if (curr != newEntry && curr.getEntryKind() == IClasspathEntry.CPE_SOURCE && currPath.isPrefixOf(entryPath)) {
 				boolean added= curr.addToExclusions(entryPath);
@@ -729,7 +730,7 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 	// ------------- choose dialogs
 
 	private IFolder chooseFolder(String title, String message, IPath initialPath) {
-		Class[] acceptedClasses= new Class[] { IFolder.class };
+		Class<?>[] acceptedClasses= new Class[] { IFolder.class };
 		ISelectionStatusValidator validator= new TypedElementSelectionValidator(acceptedClasses, false);
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses, null);
 
@@ -739,6 +740,7 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 		IProject currProject= fNewElement.getJavaProject().getProject();
 
 		ElementTreeSelectionDialog dialog= new ElementTreeSelectionDialog(getShell(), lp, cp) {
+			@Override
 			protected Control createDialogArea(Composite parent) {
 				Control result= super.createDialogArea(parent);
 				PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJavaHelpContextIds.BP_CHOOSE_EXISTING_FOLDER_TO_MAKE_SOURCE_FOLDER);
@@ -762,14 +764,14 @@ public class AddSourceFolderWizardPage extends NewElementWizardPage {
 		return null;
 	}
 
-	public List getModifiedElements() {
+	public List<CPListElement> getModifiedElements() {
 		if (fOrginalPath != null && !fModifiedElements.contains(fNewElement))
 			fModifiedElements.add(fNewElement);
 
 		return fModifiedElements;
 	}
 
-	public List getRemovedElements() {
+	public List<CPListElement> getRemovedElements() {
 		return fRemovedElements;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java
index d183c69..b525af5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,12 +40,12 @@ public class ArchiveFileFilter extends ViewerFilter {
 
 	private static final String[] fgArchiveExtensions= { "jar", "zip" }; //$NON-NLS-1$ //$NON-NLS-2$
 
-	private List fExcludes;
+	private List<IResource> fExcludes;
 	private boolean fRecursive;
 	private boolean fAllowAllArchives;
 
 
-	public ArchiveFileFilter(List excludedFiles, boolean recusive, boolean allowAllArchives) {
+	public ArchiveFileFilter(List<IResource> excludedFiles, boolean recusive, boolean allowAllArchives) {
 		fExcludes= excludedFiles;
 		fRecursive= recusive;
 		fAllowAllArchives= allowAllArchives;
@@ -54,6 +54,7 @@ public class ArchiveFileFilter extends ViewerFilter {
 	/*
 	 * @see ViewerFilter#select
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof IFile) {
 			if (fExcludes != null && fExcludes.contains(element)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
index 44e1440..0fb4251 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,8 +79,8 @@ public abstract class BuildPathBasePage {
 	}
 
 
-	public abstract List getSelection();
-	public abstract void setSelection(List selection, boolean expand);
+	public abstract List<?> getSelection();
+	public abstract void setSelection(List<?> selection, boolean expand);
 
 
 	/**
@@ -94,8 +94,8 @@ public abstract class BuildPathBasePage {
 
 	public abstract boolean isEntryKind(int kind);
 
-	protected void filterAndSetSelection(List list) {
-		ArrayList res= new ArrayList(list.size());
+	protected void filterAndSetSelection(List<?> list) {
+		ArrayList<Object> res= new ArrayList<Object>(list.size());
 		for (int i= list.size()-1; i >= 0; i--) {
 			Object curr= list.get(i);
 			if (curr instanceof CPListElement) {
@@ -108,13 +108,13 @@ public abstract class BuildPathBasePage {
 		setSelection(res, false);
 	}
 
-	public static void fixNestingConflicts(CPListElement[] newEntries, CPListElement[] existing, Set modifiedSourceEntries) {
+	public static void fixNestingConflicts(CPListElement[] newEntries, CPListElement[] existing, Set<CPListElement> modifiedSourceEntries) {
 		for (int i= 0; i < newEntries.length; i++) {
 			addExclusionPatterns(newEntries[i], existing, modifiedSourceEntries);
 		}
 	}
 
-	private static void addExclusionPatterns(CPListElement newEntry, CPListElement[] existing, Set modifiedEntries) {
+	private static void addExclusionPatterns(CPListElement newEntry, CPListElement[] existing, Set<CPListElement> modifiedEntries) {
 		IPath entryPath= newEntry.getPath();
 		for (int i= 0; i < existing.length; i++) {
 			CPListElement curr= existing[i];
@@ -148,7 +148,7 @@ public abstract class BuildPathBasePage {
 		return false;
 	}
 
-	protected boolean containsOnlyTopLevelEntries(List selElements) {
+	protected boolean containsOnlyTopLevelEntries(List<?> selElements) {
 		if (selElements.size() == 0) {
 			return true;
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
index 5d16aac..91467d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -257,7 +257,7 @@ public class BuildPathSupport {
 	private static void updateProjectClasspath(Shell shell, IJavaProject jproject, IClasspathEntry newEntry, String[] changedAttributes, IProgressMonitor monitor) throws JavaModelException {
 		IClasspathEntry[] oldClasspath= jproject.getRawClasspath();
 		int nEntries= oldClasspath.length;
-		ArrayList newEntries= new ArrayList(nEntries + 1);
+		ArrayList<IClasspathEntry> newEntries= new ArrayList<IClasspathEntry>(nEntries + 1);
 		int entryKind= newEntry.getEntryKind();
 		IPath jarPath= newEntry.getPath();
 		boolean found= false;
@@ -278,7 +278,7 @@ public class BuildPathSupport {
 			// add new
 			newEntries.add(newEntry);
 		}
-		IClasspathEntry[] newClasspath= (IClasspathEntry[]) newEntries.toArray(new IClasspathEntry[newEntries.size()]);
+		IClasspathEntry[] newClasspath= newEntries.toArray(new IClasspathEntry[newEntries.size()]);
 		jproject.setRawClasspath(newClasspath, monitor);
 	}
 
@@ -309,7 +309,7 @@ public class BuildPathSupport {
 	private static void updateReferencedClasspathEntry(IJavaProject jproject, IClasspathEntry newReferencedEntry, String[] changedAttributes, IProgressMonitor monitor) throws CoreException {
 		IClasspathEntry[] oldReferencedClasspath= jproject.getReferencedClasspathEntries();
 		int nEntries= oldReferencedClasspath.length;
-		ArrayList newReferencedEntries= new ArrayList(nEntries + 1);
+		ArrayList<IClasspathEntry> newReferencedEntries= new ArrayList<IClasspathEntry>(nEntries + 1);
 		int entryKind= newReferencedEntry.getEntryKind();
 		IPath jarPath= newReferencedEntry.getPath();
 		boolean found= false;
@@ -326,7 +326,7 @@ public class BuildPathSupport {
 		if (!found) {
 			newReferencedEntries.add(newReferencedEntry);
 		}
-		IClasspathEntry[] newReferencedClasspath= (IClasspathEntry[]) newReferencedEntries.toArray(new IClasspathEntry[newReferencedEntries.size()]);
+		IClasspathEntry[] newReferencedClasspath= newReferencedEntries.toArray(new IClasspathEntry[newReferencedEntries.size()]);
 		
 		jproject.setRawClasspath(jproject.getRawClasspath(), newReferencedClasspath, jproject.getOutputLocation(), monitor);
 	}
@@ -343,9 +343,9 @@ public class BuildPathSupport {
 	 * 
 	 * @since 3.5
 	 */
-	public static void setEEComplianceOptions(IJavaProject javaProject, List modifiedClassPathEntries) {
-		for (Iterator iter= modifiedClassPathEntries.iterator(); iter.hasNext();) {
-			CPListElement entry= (CPListElement)iter.next();
+	public static void setEEComplianceOptions(IJavaProject javaProject, List<CPListElement> modifiedClassPathEntries) {
+		for (Iterator<CPListElement> iter= modifiedClassPathEntries.iterator(); iter.hasNext();) {
+			CPListElement entry= iter.next();
 			if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
 				IPath path= entry.getPath();
 				if (! path.equals(entry.getOrginalPath())) {
@@ -374,8 +374,8 @@ public class BuildPathSupport {
 	public static void setEEComplianceOptions(IJavaProject javaProject, String eeID, String newProjectCompliance) {
 		IExecutionEnvironment ee= JavaRuntime.getExecutionEnvironmentsManager().getEnvironment(eeID);
 		if (ee != null) {
-			Map options= javaProject.getOptions(false);
-			Map eeOptions= getEEOptions(ee);
+			Map<String, String> options= javaProject.getOptions(false);
+			Map<String, String> eeOptions= getEEOptions(ee);
 			if (eeOptions != null) {
 				for (int i= 0; i < PREFS_COMPLIANCE.length; i++) {
 					String option= PREFS_COMPLIANCE[i];
@@ -387,7 +387,7 @@ public class BuildPathSupport {
 				}
 				
 				String option= JavaCore.COMPILER_CODEGEN_INLINE_JSR_BYTECODE;
-				String inlineJSR= (String)eeOptions.get(option);
+				String inlineJSR= eeOptions.get(option);
 				if (inlineJSR != null) {
 					options.put(option, inlineJSR);
 				}
@@ -413,10 +413,10 @@ public class BuildPathSupport {
 	 * @return the options, or <code>null</code> if none
 	 * @since 3.5
 	 */
-	public static Map getEEOptions(IExecutionEnvironment ee) {
+	public static Map<String, String> getEEOptions(IExecutionEnvironment ee) {
 		if (ee == null)
 			return null;
-		Map eeOptions= ee.getComplianceOptions();
+		Map<String, String> eeOptions= ee.getComplianceOptions();
 		if (eeOptions == null)
 			return null;
 		
@@ -425,7 +425,7 @@ public class BuildPathSupport {
 			return null;
 	
 		// eeOptions can miss some options, make sure they are complete:
-		HashMap options= new HashMap();
+		HashMap<String, String> options= new HashMap<String, String>();
 		JavaModelUtil.setComplianceOptions(options, (String)complianceOption);
 		options.putAll(eeOptions);
 		return options;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathWizard.java
index 2f77642..19e79b6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ public abstract class BuildPathWizard extends NewElementWizard {
 	private final CPListElement fEntryToEdit;
 	private IPackageFragmentRoot fPackageFragmentRoot;
 	private IPath fOutputLocation;
-	private final ArrayList fExistingEntries;
+	private final ArrayList<CPListElement> fExistingEntries;
 
 	public BuildPathWizard(CPListElement[] existingEntries, CPListElement newEntry, IPath outputLocation, String titel, ImageDescriptor image) {
 		fOutputLocation= outputLocation;
@@ -47,13 +47,14 @@ public abstract class BuildPathWizard extends NewElementWizard {
 		setWindowTitle(titel);
 
 		fEntryToEdit= newEntry;
-		fExistingEntries= new ArrayList(Arrays.asList(existingEntries));
+		fExistingEntries= new ArrayList<CPListElement>(Arrays.asList(existingEntries));
 		fDoFlushChange= true;
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
 		if (fDoFlushChange) {
 			IJavaProject javaProject= getEntryToEdit().getJavaProject();
@@ -71,6 +72,7 @@ public abstract class BuildPathWizard extends NewElementWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public IJavaElement getCreatedElement() {
 		return fPackageFragmentRoot;
 	}
@@ -79,7 +81,7 @@ public abstract class BuildPathWizard extends NewElementWizard {
 		fDoFlushChange= b;
 	}
 
-	public ArrayList getExistingEntries() {
+	public ArrayList<CPListElement> getExistingEntries() {
 		return fExistingEntries;
 	}
 
@@ -95,16 +97,16 @@ public abstract class BuildPathWizard extends NewElementWizard {
 		return fEntryToEdit;
 	}
 
-	public List/*<CPListElement>*/ getInsertedElements() {
-		return new ArrayList();
+	public List<CPListElement> getInsertedElements() {
+		return new ArrayList<CPListElement>();
 	}
 
-	public List/*<CPListElement>*/ getRemovedElements() {
-		return new ArrayList();
+	public List<CPListElement> getRemovedElements() {
+		return new ArrayList<CPListElement>();
 	}
 
-	public List/*<CPListElement>*/ getModifiedElements() {
-		ArrayList result= new ArrayList(1);
+	public List<CPListElement> getModifiedElements() {
+		ArrayList<CPListElement> result= new ArrayList<CPListElement>(1);
 		result.add(fEntryToEdit);
 		return result;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
index 8d580f0..4ffe8ac 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -120,7 +120,7 @@ public class BuildPathsBlock {
 
 	private IWorkspaceRoot fWorkspaceRoot;
 
-	private CheckedListDialogField fClassPathList;
+	private CheckedListDialogField<CPListElement> fClassPathList;
 	private StringButtonDialogField fBuildPathDialogField;
 
 	private StatusInfo fClassPathStatus;
@@ -186,7 +186,7 @@ public class BuildPathsBlock {
 
 		};
 
-		fClassPathList= new CheckedListDialogField(adapter, buttonLabels, new CPListLabelProvider());
+		fClassPathList= new CheckedListDialogField<CPListElement>(adapter, buttonLabels, new CPListLabelProvider());
 		fClassPathList.setDialogFieldListener(adapter);
 		fClassPathList.setLabelText(NewWizardMessages.BuildPathsBlock_classpath_label);
 		fClassPathList.setUpButtonIndex(IDX_UP);
@@ -274,6 +274,7 @@ public class BuildPathsBlock {
 		folder.setSelection(fPageIndex);
 		fCurrPage= (BuildPathBasePage) folder.getItem(fPageIndex).getData();
 		folder.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				tabChanged(e.item);
 			}
@@ -305,7 +306,7 @@ public class BuildPathsBlock {
 	public void init(IJavaProject jproject, IPath outputLocation, IClasspathEntry[] classpathEntries) {
 		fCurrJProject= jproject;
 		boolean projectExists= false;
-		List newClassPath= null;
+		List<CPListElement> newClassPath= null;
 		IProject project= fCurrJProject.getProject();
 		projectExists= (project.exists() && project.getFile(".classpath").exists()); //$NON-NLS-1$
 		IClasspathEntry[] existingEntries= null;
@@ -329,9 +330,9 @@ public class BuildPathsBlock {
 			newClassPath= getDefaultClassPath(jproject);
 		}
 
-		List exportedEntries = new ArrayList();
+		List<CPListElement> exportedEntries = new ArrayList<CPListElement>();
 		for (int i= 0; i < newClassPath.size(); i++) {
-			CPListElement curr= (CPListElement) newClassPath.get(i);
+			CPListElement curr= newClassPath.get(i);
 			if (curr.isExported() || curr.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 				exportedEntries.add(curr);
 			}
@@ -388,7 +389,7 @@ public class BuildPathsBlock {
 		int nElements= fClassPathList.getSize();
 		buf.append('[').append(nElements).append(']');
 		for (int i= 0; i < nElements; i++) {
-			CPListElement elem= (CPListElement) fClassPathList.getElement(i);
+			CPListElement elem= fClassPathList.getElement(i);
 			elem.appendEncodedSettings(buf);
 		}
 		return buf.toString();
@@ -414,9 +415,9 @@ public class BuildPathsBlock {
 		fUserSettingsTimeStamp= getEncodedSettings();
 	}
 
-	private ArrayList getCPListElements(IClasspathEntry[] classpathEntries, IClasspathEntry[] existingEntries) {
-		List existing= existingEntries == null ? Collections.EMPTY_LIST : Arrays.asList(existingEntries);
-		ArrayList newClassPath= new ArrayList();
+	private ArrayList<CPListElement> getCPListElements(IClasspathEntry[] classpathEntries, IClasspathEntry[] existingEntries) {
+		List<IClasspathEntry> existing= existingEntries == null ? Collections.<IClasspathEntry>emptyList() : Arrays.asList(existingEntries);
+		ArrayList<CPListElement> newClassPath= new ArrayList<CPListElement>();
 		for (int i= 0; i < classpathEntries.length; i++) {
 			IClasspathEntry curr= classpathEntries[i];
 			newClassPath.add(CPListElement.create(curr, ! existing.contains(curr), fCurrJProject));
@@ -445,12 +446,12 @@ public class BuildPathsBlock {
 	 *  @return Returns the current class path (raw). Note that the entries returned must not be valid.
 	 */
 	public IClasspathEntry[] getRawClassPath() {
-		List elements=  fClassPathList.getElements();
+		List<CPListElement> elements=  fClassPathList.getElements();
 		int nElements= elements.size();
 		IClasspathEntry[] entries= new IClasspathEntry[elements.size()];
 
 		for (int i= 0; i < nElements; i++) {
-			CPListElement currElement= (CPListElement) elements.get(i);
+			CPListElement currElement= elements.get(i);
 			entries[i]= currElement.getClasspathEntry();
 		}
 		return entries;
@@ -463,8 +464,8 @@ public class BuildPathsBlock {
 
 	// -------- evaluate default settings --------
 
-	private List getDefaultClassPath(IJavaProject jproj) {
-		List list= new ArrayList();
+	private List<CPListElement> getDefaultClassPath(IJavaProject jproj) {
+		List<CPListElement> list= new ArrayList<CPListElement>();
 		IResource srcFolder;
 		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
 		String sourceFolderName= store.getString(PreferenceConstants.SRCBIN_SRCNAME);
@@ -491,7 +492,7 @@ public class BuildPathsBlock {
 		}
 	}
 
-	private class BuildPathAdapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter {
+	private class BuildPathAdapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter<CPListElement> {
 
 		// -------- IStringButtonAdapter --------
 		public void changeControlPressed(DialogField field) {
@@ -504,14 +505,14 @@ public class BuildPathsBlock {
 		}
 
 		// ---------- IListAdapter --------
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<CPListElement> field, int index) {
 			buildPathCustomButtonPressed(field, index);
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<CPListElement> field) {
 		}
 
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<CPListElement> field) {
 			updateTopButtonEnablement();
 		}
 	}
@@ -530,8 +531,8 @@ public class BuildPathsBlock {
 		fClassPathList.enableButton(IDX_TOP, fClassPathList.canMoveUp());
 	}
 
-	public void buildPathCustomButtonPressed(ListDialogField field, int index) {
-		List elems= field.getSelectedElements();
+	public void buildPathCustomButtonPressed(ListDialogField<CPListElement> field, int index) {
+		List<CPListElement> elems= field.getSelectedElements();
 		field.removeElements(elems);
 		if (index == IDX_BOTTOM) {
 			field.addElements(elems);
@@ -572,7 +573,7 @@ public class BuildPathsBlock {
 	public void updateClassPathStatus() {
 		fClassPathStatus.setOK();
 
-		List elements= fClassPathList.getElements();
+		List<CPListElement> elements= fClassPathList.getElements();
 
 		CPListElement entryMissing= null;
 		CPListElement entryDeprecated= null;
@@ -580,7 +581,7 @@ public class BuildPathsBlock {
 		IClasspathEntry[] entries= new IClasspathEntry[elements.size()];
 
 		for (int i= elements.size()-1 ; i >= 0 ; i--) {
-			CPListElement currElement= (CPListElement)elements.get(i);
+			CPListElement currElement= elements.get(i);
 			boolean isChecked= fClassPathList.isChecked(currElement);
 			if (currElement.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 				if (!isChecked) {
@@ -662,11 +663,11 @@ public class BuildPathsBlock {
 	}
 
 	private void updateBuildPathStatus() {
-		List elements= fClassPathList.getElements();
+		List<CPListElement> elements= fClassPathList.getElements();
 		IClasspathEntry[] entries= new IClasspathEntry[elements.size()];
 
 		for (int i= elements.size()-1 ; i >= 0 ; i--) {
-			CPListElement currElement= (CPListElement)elements.get(i);
+			CPListElement currElement= elements.get(i);
 			entries[i]= currElement.getClasspathEntry();
 		}
 
@@ -753,7 +754,7 @@ public class BuildPathsBlock {
 	 * @throws CoreException if flushing failed
 	 * @throws OperationCanceledException if flushing has been cancelled
 	 */
-	public static void flush(List classPathEntries, IPath outputLocation, IJavaProject javaProject, String newProjectCompliance, IProgressMonitor monitor) throws CoreException, OperationCanceledException {
+	public static void flush(List<CPListElement> classPathEntries, IPath outputLocation, IJavaProject javaProject, String newProjectCompliance, IProgressMonitor monitor) throws CoreException, OperationCanceledException {
 		if (monitor == null) {
 			monitor= new NullProgressMonitor();
 		}
@@ -809,8 +810,8 @@ public class BuildPathsBlock {
 			IClasspathEntry[] classpath= new IClasspathEntry[nEntries];
 			int i= 0;
 
-			for (Iterator iter= classPathEntries.iterator(); iter.hasNext();) {
-				CPListElement entry= (CPListElement)iter.next();
+			for (Iterator<CPListElement> iter= classPathEntries.iterator(); iter.hasNext();) {
+				CPListElement entry= iter.next();
 				classpath[i]= entry.getClasspathEntry();
 				i++;
 
@@ -894,7 +895,7 @@ public class BuildPathsBlock {
 							}
 						}
 						if (newProjectCompliance != null) {
-							Map options= javaProject.getOptions(false);
+							Map<String, String> options= javaProject.getOptions(false);
 							JavaModelUtil.setComplianceOptions(options, newProjectCompliance);
 							JavaModelUtil.setDefaultClassfileOptions(options, newProjectCompliance); // complete compliance options
 							javaProject.setOptions(options);
@@ -973,10 +974,10 @@ public class BuildPathsBlock {
 	// ---------- util method ------------
 
 	private IContainer chooseContainer() {
-		Class[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
+		Class<?>[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
 		ISelectionStatusValidator validator= new TypedElementSelectionValidator(acceptedClasses, false);
 		IProject[] allProjects= fWorkspaceRoot.getProjects();
-		ArrayList rejectedElements= new ArrayList(allProjects.length);
+		ArrayList<IProject> rejectedElements= new ArrayList<IProject>(allProjects.length);
 		IProject currProject= fCurrJProject.getProject();
 		for (int i= 0; i < allProjects.length; i++) {
 			if (!allProjects[i].equals(currProject)) {
@@ -1015,7 +1016,7 @@ public class BuildPathsBlock {
 			TabItem tabItem= (TabItem) widget;
 			BuildPathBasePage newPage= (BuildPathBasePage) tabItem.getData();
 			if (fCurrPage != null) {
-				List selection= fCurrPage.getSelection();
+				List<?> selection= fCurrPage.getSelection();
 				if (!selection.isEmpty()) {
 					newPage.setSelection(selection, false);
 				}
@@ -1043,7 +1044,7 @@ public class BuildPathsBlock {
 		CPListElement prefixMatch= null;
 		int entryKind= entry.getEntryKind();
 		for (int i= 0, len= fClassPathList.getSize(); i < len; i++) {
-			CPListElement curr= (CPListElement) fClassPathList.getElement(i);
+			CPListElement curr= fClassPathList.getElement(i);
 			if (curr.getEntryKind() == entryKind) {
 				IPath entryPath= entry.getPath();
 				IPath currPath= curr.getPath();
@@ -1082,7 +1083,7 @@ public class BuildPathsBlock {
 					}
 				}
 				BuildPathBasePage page= (BuildPathBasePage) fTabFolder.getItem(pageIndex).getData();
-				List selection= new ArrayList(1);
+				List<Object> selection= new ArrayList<Object>(1);
 				selection.add(elementToSelect);
 				page.setSelection(selection, true);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java
index 800e79e..9824b4c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,7 +67,10 @@ public class CPListElement {
 	private Object fParentContainer;
 
 	private IClasspathEntry fCachedEntry;
-	private ArrayList fChildren;
+	/**
+	 * List of {@link CPListElement} and {@link CPListElementAttribute}.
+	 */
+	private ArrayList<Object> fChildren;
 	private IPath fLinkTarget, fOrginalLinkTarget;
 
 	private CPListElement() {}
@@ -96,7 +99,7 @@ public class CPListElement {
 		fOrginalPath= newElement ? null : path;
 		fLinkTarget= linkTarget;
 		fOrginalLinkTarget= linkTarget;
-		fChildren= new ArrayList();
+		fChildren= new ArrayList<Object>();
 		fResource= res;
 		fIsExported= false;
 
@@ -160,7 +163,7 @@ public class CPListElement {
 
 
 	private IClasspathAttribute[] getClasspathAttributes() {
-		ArrayList res= new ArrayList();
+		ArrayList<IClasspathAttribute> res= new ArrayList<IClasspathAttribute>();
 		for (int i= 0; i < fChildren.size(); i++) {
 			Object curr= fChildren.get(i);
 			if (curr instanceof CPListElementAttribute) {
@@ -170,7 +173,7 @@ public class CPListElement {
 				}
 			}
 		}
-		return (IClasspathAttribute[]) res.toArray(new IClasspathAttribute[res.size()]);
+		return res.toArray(new IClasspathAttribute[res.size()]);
 	}
 
 
@@ -297,9 +300,9 @@ public class CPListElement {
 
 		IPath toRemove= path.removeFirstSegments(getPath().segmentCount()).addTrailingSeparator();
 		if (JavaModelUtil.isExcludedPath(toRemove, filters)) {
-			List l= new ArrayList(Arrays.asList(filters));
+			List<IPath> l= new ArrayList<IPath>(Arrays.asList(filters));
 			l.remove(toRemove);
-			IPath[] newFilters= (IPath[])l.toArray(new IPath[l.size()]);
+			IPath[] newFilters= l.toArray(new IPath[l.size()]);
 			setAttribute(key, newFilters);
 			return true;
 		}
@@ -329,14 +332,14 @@ public class CPListElement {
 	}
 
 	public CPListElementAttribute[] getAllAttributes() {
-		ArrayList res= new ArrayList();
+		ArrayList<Object> res= new ArrayList<Object>();
 		for (int i= 0; i < fChildren.size(); i++) {
 			Object curr= fChildren.get(i);
 			if (curr instanceof CPListElementAttribute) {
 				res.add(curr);
 			}
 		}
-		return (CPListElementAttribute[]) res.toArray(new CPListElementAttribute[res.size()]);
+		return res.toArray(new CPListElementAttribute[res.size()]);
 	}
 
 
@@ -365,7 +368,7 @@ public class CPListElement {
 
 	private Object[] getFilteredChildren(String[] filteredKeys) {
 		int nChildren= fChildren.size();
-		ArrayList res= new ArrayList(nChildren);
+		ArrayList<Object> res= new ArrayList<Object>(nChildren);
 
 		for (int i= 0; i < nChildren; i++) {
 			Object curr= fChildren.get(i);
@@ -394,6 +397,16 @@ public class CPListElement {
 	}
 
 	/**
+	 * Sets the parent container.
+	 * 
+	 * @param parent the parent container
+	 * @since 3.7
+	 */
+	void setParentContainer(CPUserLibraryElement parent) {
+		fParentContainer= parent;
+	}
+
+	/**
 	 * Notifies that an attribute has changed
 	 *
 	 * @param key the changed key
@@ -464,6 +477,7 @@ public class CPListElement {
 	/*
 	 * @see Object#equals(java.lang.Object)
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (other != null && other.getClass().equals(getClass())) {
 			CPListElement elem= (CPListElement) other;
@@ -475,6 +489,7 @@ public class CPListElement {
 	/*
 	 * @see Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fPath.hashCode() + fEntryKind;
 	}
@@ -482,6 +497,7 @@ public class CPListElement {
 	/* (non-Javadoc)
 	 * @see java.lang.Object#toString()
 	 */
+	@Override
 	public String toString() {
 		return getClasspathEntry().toString();
 	}
@@ -732,9 +748,9 @@ public class CPListElement {
 		fLinkTarget= linkTarget;
 	}
 
-	public static void insert(CPListElement element, List cpList) {
+	public static void insert(CPListElement element, List<CPListElement> cpList) {
 		int length= cpList.size();
-		CPListElement[] elements= (CPListElement[])cpList.toArray(new CPListElement[length]);
+		CPListElement[] elements= cpList.toArray(new CPListElement[length]);
 		int i= 0;
 		while (i < length && elements[i].getEntryKind() != element.getEntryKind()) {
 			i++;
@@ -762,11 +778,11 @@ public class CPListElement {
 		}
 	}
 
-	public static IClasspathEntry[] convertToClasspathEntries(List/*<CPListElement>*/ cpList) {
+	public static IClasspathEntry[] convertToClasspathEntries(List<CPListElement> cpList) {
 		IClasspathEntry[] result= new IClasspathEntry[cpList.size()];
 		int i= 0;
-		for (Iterator iter= cpList.iterator(); iter.hasNext();) {
-			CPListElement cur= (CPListElement)iter.next();
+		for (Iterator<CPListElement> iter= cpList.iterator(); iter.hasNext();) {
+			CPListElement cur= iter.next();
 			result[i]= cur.getClasspathEntry();
 			i++;
 		}
@@ -815,8 +831,8 @@ public class CPListElement {
     	result.fIsMissing= fIsMissing;
     	result.fParentContainer= fParentContainer;
     	result.fCachedEntry= null;
-    	result.fChildren= new ArrayList(fChildren.size());
-    	for (Iterator iterator= fChildren.iterator(); iterator.hasNext();) {
+    	result.fChildren= new ArrayList<Object>(fChildren.size());
+    	for (Iterator<Object> iterator= fChildren.iterator(); iterator.hasNext();) {
     		Object child= iterator.next();
     		if (child instanceof CPListElement) {
     			result.fChildren.add(((CPListElement)child).copy());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementAttribute.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementAttribute.java
index bdad040..18212dc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementAttribute.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementAttribute.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -113,14 +113,16 @@ public class CPListElementAttribute {
 		getParent().attributeChanged(fKey);
 	}
 
-    public boolean equals(Object obj) {
+    @Override
+	public boolean equals(Object obj) {
         if (!(obj instanceof CPListElementAttribute))
             return false;
         CPListElementAttribute attrib= (CPListElementAttribute)obj;
         return attrib.fKey== this.fKey && attrib.getParent().getPath().equals(fParent.getPath());
     }
     
-    public int hashCode() {
+    @Override
+	public int hashCode() {
     	return fKey.hashCode() * 89 + fParent.getPath().hashCode();
     }
 
@@ -136,12 +138,15 @@ public class CPListElementAttribute {
     public ClasspathAttributeAccess getClasspathAttributeAccess() {
     	if (fCachedAccess == null) {
 	    	fCachedAccess= new ClasspathAttributeAccess() {
-	    		public IClasspathAttribute getClasspathAttribute() {
+	    		@Override
+				public IClasspathAttribute getClasspathAttribute() {
 	 				return CPListElementAttribute.this.getClasspathAttribute();
 				}
+				@Override
 				public IJavaProject getJavaProject() {
 					return getParent().getJavaProject();
 				}
+				@Override
 				public IClasspathEntry getParentClasspassEntry() {
 					return getParent().getClasspathEntry();
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementSorter.java
index 3d3409d..32c5125 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElementSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public class CPListElementSorter extends ViewerComparator {
 	/*
 	 * @see ViewerSorter#category(Object)
 	 */
+	@Override
 	public int category(Object obj) {
 		if (obj instanceof CPListElement) {
 			CPListElement element= (CPListElement) obj;
@@ -64,6 +65,7 @@ public class CPListElementSorter extends ViewerComparator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public int compare(Viewer viewer, Object e1, Object e2) {
 
         int cat1 = category(e1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java
index 4042e82..f6bbafc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,6 +73,7 @@ public class CPListLabelProvider extends LabelProvider {
 		fAttributeDescriptors= JavaPlugin.getDefault().getClasspathAttributeConfigurationDescriptors();
 	}
 
+	@Override
 	public String getText(Object element) {
 		if (element instanceof CPListElement) {
 			return getCPListElementText((CPListElement) element);
@@ -389,6 +390,7 @@ public class CPListLabelProvider extends LabelProvider {
 		}
 	}
 
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof CPListElement) {
 			CPListElement cpentry= (CPListElement) element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java
index 3ee97f0..06f7c7a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,12 +62,12 @@ public class CPUserLibraryElement {
 
 
 	private String fName;
-	private List fChildren;
+	private List<CPListElement> fChildren;
 	private boolean fIsSystemLibrary;
 
 	public CPUserLibraryElement(String name, IClasspathContainer container, IJavaProject project) {
 		fName= name;
-		fChildren= new ArrayList();
+		fChildren= new ArrayList<CPListElement>();
 		if (container != null) {
 			IClasspathEntry[] entries= container.getClasspathEntries();
 			CPListElement[] res= new CPListElement[entries.length];
@@ -84,11 +84,21 @@ public class CPUserLibraryElement {
 		}
 	}
 
+	/**
+	 * Creates a new user library element with the given name and children and sets itself as the
+	 * parent container to each given child element.
+	 * 
+	 * @param name the name of the library element
+	 * @param isSystemLibrary <code>true</code> if the library is a system library,
+	 *            <code>false</code> otherwise
+	 * @param children the children elements of the library element or <code>null</code>
+	 */
 	public CPUserLibraryElement(String name, boolean isSystemLibrary, CPListElement[] children) {
 		fName= name;
-		fChildren= new ArrayList();
+		fChildren= new ArrayList<CPListElement>();
 		if (children != null) {
 			for (int i= 0; i < children.length; i++) {
+				children[i].setParentContainer(this);
 				fChildren.add(children[i]);
 			}
 		}
@@ -96,7 +106,7 @@ public class CPUserLibraryElement {
 	}
 
 	public CPListElement[] getChildren() {
-		return (CPListElement[]) fChildren.toArray(new CPListElement[fChildren.size()]);
+		return fChildren.toArray(new CPListElement[fChildren.size()]);
 	}
 
 	public String getName() {
@@ -117,12 +127,12 @@ public class CPUserLibraryElement {
 		}
 	}
 
-	private List moveUp(List elements, List move) {
+	private List<CPListElement> moveUp(List<CPListElement> elements, List<CPListElement> move) {
 		int nElements= elements.size();
-		List res= new ArrayList(nElements);
-		Object floating= null;
+		List<CPListElement> res= new ArrayList<CPListElement>(nElements);
+		CPListElement floating= null;
 		for (int i= 0; i < nElements; i++) {
-			Object curr= elements.get(i);
+			CPListElement curr= elements.get(i);
 			if (move.contains(curr)) {
 				res.add(curr);
 			} else {
@@ -138,13 +148,13 @@ public class CPUserLibraryElement {
 		return res;
 	}
 
-	public void moveUp(List toMoveUp) {
+	public void moveUp(List<CPListElement> toMoveUp) {
 		if (toMoveUp.size() > 0) {
 			fChildren= moveUp(fChildren, toMoveUp);
 		}
 	}
 
-	public void moveDown(List toMoveDown) {
+	public void moveDown(List<CPListElement> toMoveDown) {
 		if (toMoveDown.size() > 0) {
 			Collections.reverse(fChildren);
 			fChildren= moveUp(fChildren, toMoveDown);
@@ -186,7 +196,7 @@ public class CPUserLibraryElement {
 			return true;
 		}
 		for (int i= 0; i < oldEntries.length; i++) {
-			CPListElement child= (CPListElement) fChildren.get(i);
+			CPListElement child= fChildren.get(i);
 			if (!child.getClasspathEntry().equals(oldEntries[i])) {
 				return true;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElement.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElement.java
index 945d84c..15edb79 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElement.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class CPVariableElement {
 	/*
 	 * @see Object#equals()
 	 */
+	@Override
 	public boolean equals(Object other) {
 		if (other != null && other.getClass().equals(getClass())) {
 			CPVariableElement elem= (CPVariableElement)other;
@@ -80,6 +81,7 @@ public class CPVariableElement {
 	/*
 	 * @see Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return fName.hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElementLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElementLabelProvider.java
index cba5052..3d88307 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElementLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPVariableElementLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class CPVariableElementLabelProvider extends LabelProvider implements ICo
 	/*
 	 * @see LabelProvider#getImage(java.lang.Object)
 	 */
+	@Override
 	public Image getImage(Object element) {
 		if (element instanceof CPVariableElement) {
 			CPVariableElement curr= (CPVariableElement) element;
@@ -78,6 +79,7 @@ public class CPVariableElementLabelProvider extends LabelProvider implements ICo
 	/*
 	 * @see LabelProvider#getText(java.lang.Object)
 	 */
+	@Override
 	public String getText(Object element) {
 		if (element instanceof CPVariableElement) {
 			CPVariableElement curr= (CPVariableElement)element;
@@ -85,7 +87,7 @@ public class CPVariableElementLabelProvider extends LabelProvider implements ICo
 			IPath path= curr.getPath();
 
 			String result= name;
-			ArrayList restrictions= new ArrayList(2);
+			ArrayList<String> restrictions= new ArrayList<String>(2);
 
 			if (curr.isReadOnly() && fHighlightReadOnly) {
 				restrictions.add(NewWizardMessages.CPVariableElementLabelProvider_read_only);
@@ -143,6 +145,7 @@ public class CPVariableElementLabelProvider extends LabelProvider implements ICo
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		fDeprecatedFolderImage.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
index e9ac1e7..8f77d04 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,13 +70,13 @@ public class ClasspathAttributeConfigurationDescriptors {
 
 	private static final String ATT_EXTENSION = "classpathAttributeConfiguration"; //$NON-NLS-1$
 
-	private HashMap fDescriptors;
+	private HashMap<String, Descriptor> fDescriptors;
 
 	public ClasspathAttributeConfigurationDescriptors() {
 		fDescriptors= null;
 	}
 
-	private HashMap getDescriptors() {
+	private HashMap<String, Descriptor> getDescriptors() {
 		if (fDescriptors == null) {
 			fDescriptors= readExtensions();
 		}
@@ -88,7 +88,7 @@ public class ClasspathAttributeConfigurationDescriptors {
 	}
 
 	public ClasspathAttributeConfiguration get(final String attributeKey) {
-		final Descriptor desc= (Descriptor) getDescriptors().get(attributeKey);
+		final Descriptor desc= getDescriptors().get(attributeKey);
 		if (desc == null) {
 			return null;
 		}
@@ -107,9 +107,9 @@ public class ClasspathAttributeConfigurationDescriptors {
 		return res[0];
 	}
 
-	private static HashMap readExtensions() {
+	private static HashMap<String, Descriptor> readExtensions() {
 		IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(JavaUI.ID_PLUGIN, ATT_EXTENSION);
-		HashMap descriptors= new HashMap(elements.length * 2);
+		HashMap<String, Descriptor> descriptors= new HashMap<String, Descriptor>(elements.length * 2);
 		for (int i= 0; i < elements.length; i++) {
 			try {
 				Descriptor curr= new Descriptor(elements[i]);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
index 4659394..fdabd6f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 public class ClasspathContainerDefaultPage extends NewElementWizardPage implements IClasspathContainerPage, IClasspathContainerPageExtension {
 
 	private StringDialogField fEntryField;
-	private ArrayList fUsedPaths;
+	private ArrayList<IPath> fUsedPaths;
 
 	/**
 	 * Constructor for ClasspathContainerDefaultPage.
@@ -56,7 +56,7 @@ public class ClasspathContainerDefaultPage extends NewElementWizardPage implemen
 		setDescription(NewWizardMessages.ClasspathContainerDefaultPage_description);
 		setImageDescriptor(JavaPluginImages.DESC_WIZBAN_ADD_LIBRARY);
 
-		fUsedPaths= new ArrayList();
+		fUsedPaths= new ArrayList<IPath>();
 
 		fEntryField= new StringDialogField();
 		fEntryField.setLabelText(NewWizardMessages.ClasspathContainerDefaultPage_path_label);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java
index eafb0e1..539c7d5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -105,7 +105,7 @@ public class ClasspathContainerDescriptor {
 	}
 
 	public static ClasspathContainerDescriptor[] getDescriptors() {
-		ArrayList containers= new ArrayList();
+		ArrayList<ClasspathContainerDescriptor> containers= new ArrayList<ClasspathContainerDescriptor>();
 
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(JavaUI.ID_PLUGIN, ATT_EXTENSION);
 		if (extensionPoint != null) {
@@ -132,7 +132,7 @@ public class ClasspathContainerDescriptor {
 				containers.add(defaultPage);
 			}
 		}
-		return (ClasspathContainerDescriptor[]) containers.toArray(new ClasspathContainerDescriptor[containers.size()]);
+		return containers.toArray(new ClasspathContainerDescriptor[containers.size()]);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java
index 98ce41c..2f149a1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class ClasspathContainerSelectionPage extends WizardPage {
 
 
 	private static class ClasspathContainerLabelProvider extends LabelProvider {
+		@Override
 		public String getText(Object element) {
 			return ((ClasspathContainerDescriptor) element).getName();
 		}
@@ -56,7 +57,8 @@ public class ClasspathContainerSelectionPage extends WizardPage {
 
 	/**
 	 * Constructor for ClasspathContainerWizardPage.
-	 * @param containerPages
+	 * 
+	 * @param containerPages the array of container pages
 	 */
 	protected ClasspathContainerSelectionPage(ClasspathContainerDescriptor[] containerPages) {
 		super("ClasspathContainerWizardPage"); //$NON-NLS-1$
@@ -136,6 +138,7 @@ public class ClasspathContainerSelectionPage extends WizardPage {
 	/* (non-Javadoc)
 	 * @see IWizardPage#canFlipToNextPage()
 	 */
+	@Override
 	public boolean canFlipToNextPage() {
 		return isPageComplete(); // avoid the getNextPage call to prevent potential plugin load
 	}
@@ -143,6 +146,7 @@ public class ClasspathContainerSelectionPage extends WizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		if (!visible && fListViewer != null) {
 			fDialogSettings.put(DIALOGSTORE_CONTAINER_IDX, fListViewer.getList().getSelectionIndex());
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java
index 7dd03f7..d0822f6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -89,6 +89,7 @@ public class ClasspathContainerWizard extends Wizard {
 	/* (non-Javadoc)
 	 * @see IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		if (fContainerPage != null) {
 			if (fContainerPage.finish()) {
@@ -107,6 +108,7 @@ public class ClasspathContainerWizard extends Wizard {
 	/* (non-Javadoc)
 	 * @see IWizard#addPages()
 	 */
+	@Override
 	public void addPages() {
 		if (fPageDesc != null) {
 			fContainerPage= getContainerPage(fPageDesc);
@@ -162,6 +164,7 @@ public class ClasspathContainerWizard extends Wizard {
 	/* (non-Javadoc)
 	 * @see IWizard#getNextPage(IWizardPage)
 	 */
+	@Override
 	public IWizardPage getNextPage(IWizardPage page) {
 		if (page == fSelectionWizardPage) {
 
@@ -192,6 +195,7 @@ public class ClasspathContainerWizard extends Wizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.Wizard#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fSelectionWizardPage != null) {
 			ClasspathContainerDescriptor[] descriptors= fSelectionWizardPage.getContainers();
@@ -205,6 +209,7 @@ public class ClasspathContainerWizard extends Wizard {
 	/* (non-Javadoc)
 	 * @see IWizard#canFinish()
 	 */
+	@Override
 	public boolean canFinish() {
 		if (fSelectionWizardPage != null) {
 			if (!fContainerPage.isPageComplete()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java
index d4e1817..364ea0f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -148,6 +148,7 @@ public class ClasspathFixSelectionDialog extends StatusDialog {
 		fSelectedFix= null;
 	}
 
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -162,6 +163,7 @@ public class ClasspathFixSelectionDialog extends StatusDialog {
 	}
 
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -186,6 +188,7 @@ public class ClasspathFixSelectionDialog extends StatusDialog {
 			fFixSelectionTable.setContentProvider(new ArrayContentProvider());
 			fFixSelectionTable.setLabelProvider(new ClasspathFixLabelProvider());
 			fFixSelectionTable.setComparator(new ViewerComparator() {
+				@Override
 				public int category(Object element) {
 					return - ((ClasspathFixProposal) element).getRelevance();
 				}
@@ -218,7 +221,7 @@ public class ClasspathFixSelectionDialog extends StatusDialog {
 	protected final void configureBuildPathPressed() {
 		cancelPressed();
 		String id= BUILD_PATH_PAGE_ID;
-		Map input= new HashMap();
+		Map<Object, Boolean> input= new HashMap<Object, Boolean>();
 		input.put(BUILD_PATH_BLOCK, Boolean.TRUE);
 		if (PreferencesUtil.createPropertyDialogOn(getShell(), fProject, id, new String[] { id }, input).open() != Window.OK) {
 			return;
@@ -269,6 +272,7 @@ public class ClasspathFixSelectionDialog extends StatusDialog {
 
 	private static class ClasspathFixLabelProvider extends LabelProvider {
 
+		@Override
 		public Image getImage(Object element) {
 			if (element instanceof ClasspathFixProposal) {
 				ClasspathFixProposal classpathFixProposal= (ClasspathFixProposal) element;
@@ -277,6 +281,7 @@ public class ClasspathFixSelectionDialog extends StatusDialog {
 			return null;
 		}
 
+		@Override
 		public String getText(Object element) {
 			if (element instanceof ClasspathFixProposal) {
 				ClasspathFixProposal classpathFixProposal= (ClasspathFixProposal) element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathOrderingWorkbookPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathOrderingWorkbookPage.java
index 7c05af0..60e93a1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathOrderingWorkbookPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathOrderingWorkbookPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,12 +28,13 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
 
 public class ClasspathOrderingWorkbookPage extends BuildPathBasePage {
 
-	private ListDialogField fClassPathList;
+	private ListDialogField<CPListElement> fClassPathList;
 
-	public ClasspathOrderingWorkbookPage(ListDialogField classPathList) {
+	public ClasspathOrderingWorkbookPage(ListDialogField<CPListElement> classPathList) {
 		fClassPathList= classPathList;
 	}
 
+	@Override
 	public Control getControl(Composite parent) {
 		PixelConverter converter= new PixelConverter(parent);
 
@@ -52,20 +53,23 @@ public class ClasspathOrderingWorkbookPage extends BuildPathBasePage {
 	/*
 	 * @see BuildPathBasePage#getSelection
 	 */
-	public List getSelection() {
+	@Override
+	public List<?> getSelection() {
 		return fClassPathList.getSelectedElements();
 	}
 
 	/*
 	 * @see BuildPathBasePage#setSelection
 	 */
-	public void setSelection(List selElements, boolean expand) {
+	@Override
+	public void setSelection(List<?> selElements, boolean expand) {
 		fClassPathList.selectElements(new StructuredSelection(selElements));
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#isEntryKind(int)
 	 */
+	@Override
 	public boolean isEntryKind(int kind) {
 		return true;
 	}
@@ -73,13 +77,15 @@ public class ClasspathOrderingWorkbookPage extends BuildPathBasePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#init(org.eclipse.jdt.core.IJavaProject)
 	 */
+	@Override
 	public void init(IJavaProject javaProject) {
 	}
 
 	/**
      * {@inheritDoc}
      */
-    public void setFocus() {
+    @Override
+	public void setFocus() {
     	fClassPathList.setFocus();
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
index 9efe104..6769f18 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,7 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public Object getParent(Object element) {
 			Object object= fNonExistingFolders.get(element);
 			if (object != null)
@@ -77,11 +78,12 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public Object[] getChildren(Object element) {
-			List result= new ArrayList();
+			List<Object> result= new ArrayList<Object>();
 			//all keys with value element
-			Set keys= fNonExistingFolders.keySet();
-			for (Iterator iter= keys.iterator(); iter.hasNext();) {
+			Set<IFolder> keys= fNonExistingFolders.keySet();
+			for (Iterator<IFolder> iter= keys.iterator(); iter.hasNext();) {
 				Object key= iter.next();
 				if (fNonExistingFolders.get(key).equals(element)) {
 					result.add(key);
@@ -101,20 +103,20 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 	private final IJavaProject fJavaProject;
 	private final CPListElement[] fExistingElements;
 	private String fOutputLocation;
-	private final HashSet fRemovedElements;
-	private final HashSet fModifiedElements;
-	private final HashSet fInsertedElements;
-	private final Hashtable fNonExistingFolders;
+	private final HashSet<CPListElement> fRemovedElements;
+	private final HashSet<CPListElement> fModifiedElements;
+	private final HashSet<CPListElement> fInsertedElements;
+	private final Hashtable<IFolder, IContainer> fNonExistingFolders;
 
 	public CreateMultipleSourceFoldersDialog(final IJavaProject javaProject, final CPListElement[] existingElements, final String outputLocation, Shell shell) {
 		super(shell);
 		fJavaProject= javaProject;
 		fExistingElements= existingElements;
 		fOutputLocation= outputLocation;
-		fRemovedElements= new HashSet();
-		fModifiedElements= new HashSet();
-		fInsertedElements= new HashSet();
-		fNonExistingFolders= new Hashtable();
+		fRemovedElements= new HashSet<CPListElement>();
+		fModifiedElements= new HashSet<CPListElement>();
+		fInsertedElements= new HashSet<CPListElement>();
+		fNonExistingFolders= new Hashtable<IFolder, IContainer>();
 
 		for (int i= 0; i < existingElements.length; i++) {
 			CPListElement cur= existingElements[i];
@@ -124,12 +126,13 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 		}
 	}
 
+	@Override
 	public int open() {
-		Class[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
-		List existingContainers= getExistingContainers(fExistingElements);
+		Class<?>[] acceptedClasses= new Class<?>[] { IProject.class, IFolder.class };
+		List<IResource> existingContainers= getExistingContainers(fExistingElements);
 
 		IProject[] allProjects= ResourcesPlugin.getWorkspace().getRoot().getProjects();
-		ArrayList rejectedElements= new ArrayList(allProjects.length);
+		ArrayList<IProject> rejectedElements= new ArrayList<IProject>(allProjects.length);
 		IProject currProject= fJavaProject.getProject();
 		for (int i= 0; i < allProjects.length; i++) {
 			if (!allProjects[i].equals(currProject)) {
@@ -141,6 +144,7 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 			/* (non-Javadoc)
 			 * @see org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 			 */
+			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
 				if (element instanceof IFolder && ((IFolder)element).isVirtual()) {
 					return false;
@@ -157,17 +161,20 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 
 
 		MultipleFolderSelectionDialog dialog= new MultipleFolderSelectionDialog(getShell(), lp, cp) {
+			@Override
 			protected Control createDialogArea(Composite parent) {
 				Control result= super.createDialogArea(parent);
 				PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJavaHelpContextIds.BP_CHOOSE_EXISTING_FOLDER_TO_MAKE_SOURCE_FOLDER);
 				return result;
 			}
 
+			@Override
 			protected Object createFolder(final IContainer container) {
 				final Object[] result= new Object[1];
 				final CPListElement newElement= new CPListElement(fJavaProject, IClasspathEntry.CPE_SOURCE);
 				final AddSourceFolderWizard wizard= newSourceFolderWizard(newElement, fExistingElements, fOutputLocation, container);
 				AbstractOpenWizardAction action= new AbstractOpenWizardAction() {
+					@Override
 					protected INewWizard createWizard() throws CoreException {
 						return wizard;
 					}
@@ -205,15 +212,15 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 				CPListElement existingElement= fExistingElements[0];
 				if (existingElement.getResource() instanceof IProject) {
 					if (!removeProjectFromBP(existingElement)) {
-						ArrayList added= new ArrayList(fInsertedElements);
-						HashSet updatedEclusionPatterns= new HashSet();
+						ArrayList<CPListElement> added= new ArrayList<CPListElement>(fInsertedElements);
+						HashSet<CPListElement> updatedEclusionPatterns= new HashSet<CPListElement>();
 						addExlusionPatterns(added, updatedEclusionPatterns);
 						fModifiedElements.addAll(updatedEclusionPatterns);
 					}
 				}
 			} else {
-				ArrayList added= new ArrayList(fInsertedElements);
-				HashSet updatedEclusionPatterns= new HashSet();
+				ArrayList<CPListElement> added= new ArrayList<CPListElement>(fInsertedElements);
+				HashSet<CPListElement> updatedEclusionPatterns= new HashSet<CPListElement>();
 				addExlusionPatterns(added, updatedEclusionPatterns);
 				fModifiedElements.addAll(updatedEclusionPatterns);
 			}
@@ -223,16 +230,16 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 		}
 	}
 
-	public List getInsertedElements() {
-		return new ArrayList(fInsertedElements);
+	public List<CPListElement> getInsertedElements() {
+		return new ArrayList<CPListElement>(fInsertedElements);
 	}
 
-	public List getRemovedElements() {
-		return new ArrayList(fRemovedElements);
+	public List<CPListElement> getRemovedElements() {
+		return new ArrayList<CPListElement>(fRemovedElements);
 	}
 
-	public List getModifiedElements() {
-		return new ArrayList(fModifiedElements);
+	public List<CPListElement> getModifiedElements() {
+		return new ArrayList<CPListElement>(fModifiedElements);
 	}
 
 	public IPath getOutputLocation() {
@@ -268,8 +275,8 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 		return false;
 	}
 
-	private void addExlusionPatterns(List newEntries, Set modifiedEntries) {
-		BuildPathBasePage.fixNestingConflicts((CPListElement[])newEntries.toArray(new CPListElement[newEntries.size()]), fExistingElements, modifiedEntries);
+	private void addExlusionPatterns(List<CPListElement> newEntries, Set<CPListElement> modifiedEntries) {
+		BuildPathBasePage.fixNestingConflicts(newEntries.toArray(new CPListElement[newEntries.size()]), fExistingElements, modifiedEntries);
 		if (!modifiedEntries.isEmpty()) {
 			String title= NewWizardMessages.SourceContainerWorkbookPage_exclusion_added_title;
 			String message= NewWizardMessages.SourceContainerWorkbookPage_exclusion_added_message;
@@ -283,17 +290,17 @@ public class CreateMultipleSourceFoldersDialog extends TrayDialog {
 		return wizard;
 	}
 
-	private List getExistingContainers(CPListElement[] existingElements) {
-		List res= new ArrayList();
+	private List<IResource> getExistingContainers(CPListElement[] existingElements) {
+		List<IResource> res= new ArrayList<IResource>();
 		for (int i= 0; i < existingElements.length; i++) {
 			IResource resource= existingElements[i].getResource();
 			if (resource instanceof IContainer) {
 				res.add(resource);
 			}
 		}
-		Set keys= fNonExistingFolders.keySet();
-		for (Iterator iter= keys.iterator(); iter.hasNext();) {
-			IFolder folder= (IFolder)iter.next();
+		Set<IFolder> keys= fNonExistingFolders.keySet();
+		for (Iterator<IFolder> iter= keys.iterator(); iter.hasNext();) {
+			IFolder folder= iter.next();
 			res.add(folder);
 		}
 		return res;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditFilterWizard.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditFilterWizard.java
index da28f05..3816a45 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditFilterWizard.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditFilterWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class EditFilterWizard extends BuildPathWizard {
 	/*
 	 * @see Wizard#addPages
 	 */
+	@Override
 	public void addPages() {
 		super.addPages();
 
@@ -44,6 +45,7 @@ public class EditFilterWizard extends BuildPathWizard {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.wizard.IWizard#performFinish()
 	 */
+	@Override
 	public boolean performFinish() {
 		CPListElement entryToEdit= getEntryToEdit();
 		entryToEdit.setAttribute(CPListElement.INCLUSION, fFilterPage.getInclusionPattern());
@@ -55,6 +57,7 @@ public class EditFilterWizard extends BuildPathWizard {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void cancel() {
 		CPListElement entryToEdit= getEntryToEdit();
 		entryToEdit.setAttribute(CPListElement.INCLUSION, fOrginalInclusion);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java
index 940876a..091629a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,7 +56,7 @@ public class EditVariableEntryDialog extends StatusDialog {
 
 	private IStatus fNameStatus;
 
-	private Set fExistingEntries;
+	private Set<IPath> fExistingEntries;
 	private VariablePathDialogField fFileNameField;
 	private CLabel fFullPathResolvedLabel;
 
@@ -65,7 +65,7 @@ public class EditVariableEntryDialog extends StatusDialog {
 		super(parent);
 		setTitle(NewWizardMessages.EditVariableEntryDialog_title);
 
-		fExistingEntries= new HashSet();
+		fExistingEntries= new HashSet<IPath>();
 		if (existingEntries != null) {
 			for (int i = 0; i < existingEntries.length; i++) {
 				IPath curr= existingEntries[i];
@@ -90,6 +90,7 @@ public class EditVariableEntryDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -102,6 +103,7 @@ public class EditVariableEntryDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		initializeDialogUnits(parent);
 		Composite composite= (Composite) super.createDialogArea(parent);
@@ -329,6 +331,7 @@ public class EditVariableEntryDialog extends StatusDialog {
 	 * overridden to ensure full message is visible
 	 * @see org.eclipse.jface.dialogs.StatusDialog#updateStatus(org.eclipse.core.runtime.IStatus)
 	 */
+	@Override
 	protected void updateStatus(IStatus status) {
 		super.updateStatus(status);
 		Shell shell= getShell();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java
index 0efd1ed..4c8ea26 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,18 +64,20 @@ public class ExclusionInclusionDialog extends StatusDialog {
 			fElementImage= registry.get(descriptor);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			return fElementImage;
 		}
 
+		@Override
 		public String getText(Object element) {
 			return BasicElementLabels.getFilePattern((String) element);
 		}
 
 	}
 
-	private ListDialogField fInclusionPatternList;
-	private ListDialogField fExclusionPatternList;
+	private ListDialogField<String> fInclusionPatternList;
+	private ListDialogField<String> fExclusionPatternList;
 	private CPListElement fCurrElement;
 	private IProject fCurrProject;
 
@@ -135,14 +137,15 @@ public class ExclusionInclusionDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
 
-	private ListDialogField createListContents(CPListElement entryToEdit, String key, String label, ImageDescriptor descriptor, String[] buttonLabels) {
+	private ListDialogField<String> createListContents(CPListElement entryToEdit, String key, String label, ImageDescriptor descriptor, String[] buttonLabels) {
 		ExclusionPatternAdapter adapter= new ExclusionPatternAdapter();
 
-		ListDialogField patternList= new ListDialogField(adapter, buttonLabels, new ExclusionInclusionLabelProvider(descriptor));
+		ListDialogField<String> patternList= new ListDialogField<String>(adapter, buttonLabels, new ExclusionInclusionLabelProvider(descriptor));
 		patternList.setDialogFieldListener(adapter);
 		patternList.setLabelText(label);
 		patternList.setRemoveButtonIndex(IDX_REMOVE);
@@ -150,7 +153,7 @@ public class ExclusionInclusionDialog extends StatusDialog {
 
 		IPath[] pattern= (IPath[]) entryToEdit.getAttribute(key);
 
-		ArrayList elements= new ArrayList(pattern.length);
+		ArrayList<String> elements= new ArrayList<String>(pattern.length);
 		for (int i= 0; i < pattern.length; i++) {
 			elements.add(pattern[i].toString());
 		}
@@ -162,6 +165,7 @@ public class ExclusionInclusionDialog extends StatusDialog {
 	}
 
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -191,7 +195,7 @@ public class ExclusionInclusionDialog extends StatusDialog {
 		return composite;
 	}
 
-	protected void doCustomButtonPressed(ListDialogField field, int index) {
+	protected void doCustomButtonPressed(ListDialogField<String> field, int index) {
 		if (index == IDX_ADD) {
 			addEntry(field);
 		} else if (index == IDX_EDIT) {
@@ -201,39 +205,39 @@ public class ExclusionInclusionDialog extends StatusDialog {
 		}
 	}
 
-	protected void doDoubleClicked(ListDialogField field) {
+	protected void doDoubleClicked(ListDialogField<String> field) {
 		editEntry(field);
 	}
 
-	protected void doSelectionChanged(ListDialogField field) {
-		List selected= field.getSelectedElements();
+	protected void doSelectionChanged(ListDialogField<String> field) {
+		List<String> selected= field.getSelectedElements();
 		field.enableButton(IDX_EDIT, canEdit(selected));
 	}
 
-	private boolean canEdit(List selected) {
+	private boolean canEdit(List<String> selected) {
 		return selected.size() == 1;
 	}
 
-	private void editEntry(ListDialogField field) {
-		List selElements= field.getSelectedElements();
+	private void editEntry(ListDialogField<String> field) {
+		List<String> selElements= field.getSelectedElements();
 		if (selElements.size() != 1) {
 			return;
 		}
-		List existing= field.getElements();
-		String entry= (String) selElements.get(0);
+		List<String> existing= field.getElements();
+		String entry= selElements.get(0);
 		ExclusionInclusionEntryDialog dialog= new ExclusionInclusionEntryDialog(getShell(), isExclusion(field), entry, existing, fCurrElement);
 		if (dialog.open() == Window.OK) {
 			field.replaceElement(entry, dialog.getExclusionPattern());
 		}
 	}
 
-	private boolean isExclusion(ListDialogField field) {
+	private boolean isExclusion(ListDialogField<String> field) {
 		return field == fExclusionPatternList;
 	}
 
 
-	private void addEntry(ListDialogField field) {
-		List existing= field.getElements();
+	private void addEntry(ListDialogField<String> field) {
+		List<String> existing= field.getElements();
 		ExclusionInclusionEntryDialog dialog= new ExclusionInclusionEntryDialog(getShell(), isExclusion(field), null, existing, fCurrElement);
 		if (dialog.open() == Window.OK) {
 			field.addElement(dialog.getExclusionPattern());
@@ -244,24 +248,24 @@ public class ExclusionInclusionDialog extends StatusDialog {
 
 	// -------- ExclusionPatternAdapter --------
 
-	private class ExclusionPatternAdapter implements IListAdapter, IDialogFieldListener {
+	private class ExclusionPatternAdapter implements IListAdapter<String>, IDialogFieldListener {
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#customButtonPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField, int)
 		 */
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<String> field, int index) {
 			doCustomButtonPressed(field, index);
 		}
 
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#selectionChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<String> field) {
 			doSelectionChanged(field);
 		}
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#doubleClicked(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<String> field) {
 			doDoubleClicked(field);
 		}
 
@@ -280,7 +284,7 @@ public class ExclusionInclusionDialog extends StatusDialog {
 	}
 
 
-	private IPath[] getPattern(ListDialogField field) {
+	private IPath[] getPattern(ListDialogField<?> field) {
 		Object[] arr= field.getElements().toArray();
 		Arrays.sort(arr);
 		IPath[] res= new IPath[arr.length];
@@ -301,12 +305,13 @@ public class ExclusionInclusionDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.EXCLUSION_PATTERN_DIALOG);
 	}
 
-	private void addMultipleEntries(ListDialogField field) {
+	private void addMultipleEntries(ListDialogField<String> field) {
 		String title, message;
 		if (isExclusion(field)) {
 			title= NewWizardMessages.ExclusionInclusionDialog_ChooseExclusionPattern_title;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionEntryDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionEntryDialog.java
index c3b2847..c4ff2f7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionEntryDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionEntryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,10 +63,10 @@ public class ExclusionInclusionEntryDialog extends StatusDialog {
 
 	private IContainer fCurrSourceFolder;
 	private String fExclusionPattern;
-	private List fExistingPatterns;
+	private List<String> fExistingPatterns;
 	private boolean fIsExclusion;
 
-	public ExclusionInclusionEntryDialog(Shell parent, boolean isExclusion, String patternToEdit, List existingPatterns, CPListElement entryToEdit) {
+	public ExclusionInclusionEntryDialog(Shell parent, boolean isExclusion, String patternToEdit, List<String> existingPatterns, CPListElement entryToEdit) {
 		super(parent);
 		fIsExclusion= isExclusion;
 		fExistingPatterns= existingPatterns;
@@ -115,6 +115,7 @@ public class ExclusionInclusionEntryDialog extends StatusDialog {
 	}
 
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite)super.createDialogArea(parent);
 
@@ -208,6 +209,7 @@ public class ExclusionInclusionEntryDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.EXCLUSION_PATTERN_DIALOG);
@@ -234,7 +236,7 @@ public class ExclusionInclusionEntryDialog extends StatusDialog {
 	}
 
 	public static IPath[] chooseExclusionPattern(Shell shell, IContainer currentSourceFolder, String title, String message, IPath initialPath, boolean multiSelection) {
-		Class[] acceptedClasses= new Class[] { IFolder.class, IFile.class };
+		Class<?>[] acceptedClasses= new Class[] { IFolder.class, IFile.class };
 		ISelectionStatusValidator validator= new TypedElementSelectionValidator(acceptedClasses, multiSelection);
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/FolderSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/FolderSelectionDialog.java
index 367e9e3..4be0a0a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/FolderSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/FolderSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public class FolderSelectionDialog extends ElementTreeSelectionDialog implements
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite result= (Composite)super.createDialogArea(parent);
 
@@ -60,6 +61,7 @@ public class FolderSelectionDialog extends ElementTreeSelectionDialog implements
 		Button button = new Button(result, SWT.PUSH);
 		button.setText(NewWizardMessages.FolderSelectionDialog_button);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				newFolderButtonPressed();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java
index 29c272f..82fc123 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public class JARFileSelectionDialog extends FilteredElementTreeSelectionDialog {
 		private final Image IMG_FOLDER= PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
 		private final Image IMG_JAR=  JavaPlugin.getDefault().getImageRegistry().get(JavaPluginImages.IMG_OBJS_EXTJAR);
 
+		@Override
 		public Image getImage(Object element) {
 			if (element instanceof File) {
 				File curr= (File) element;
@@ -86,6 +87,7 @@ public class JARFileSelectionDialog extends FilteredElementTreeSelectionDialog {
 			return null;
 		}
 
+		@Override
 		public String getText(Object element) {
 			if (element instanceof File) {
 				return BasicElementLabels.getResourceName(((File) element).getName());
@@ -138,6 +140,7 @@ public class JARFileSelectionDialog extends FilteredElementTreeSelectionDialog {
 			fAcceptFolders= acceptFolders;
 		}
 
+		@Override
 		public boolean select(Viewer viewer, Object parent, Object element) {
 			if (element instanceof File) {
 				File file= (File) element;
@@ -167,6 +170,7 @@ public class JARFileSelectionDialog extends FilteredElementTreeSelectionDialog {
 	}
 
 	private static class FileViewerComparator extends ViewerComparator {
+		@Override
 		public int category(Object element) {
 			if (element instanceof File) {
 				if (((File) element).isFile()) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocAttributeConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocAttributeConfiguration.java
index 87d4668..c3eb162 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocAttributeConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocAttributeConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ public class JavadocAttributeConfiguration extends ClasspathAttributeConfigurati
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#getImageDescriptor(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public ImageDescriptor getImageDescriptor(ClasspathAttributeAccess attribute) {
 		return JavaPluginImages.DESC_OBJS_JAVADOC_LOCATION_ATTRIB;
 	}
@@ -42,6 +43,7 @@ public class JavadocAttributeConfiguration extends ClasspathAttributeConfigurati
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#getNameLabel(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public String getNameLabel(ClasspathAttributeAccess attribute) {
 		return NewWizardMessages.CPListLabelProvider_javadoc_location_label;
 	}
@@ -49,6 +51,7 @@ public class JavadocAttributeConfiguration extends ClasspathAttributeConfigurati
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#getValueLabel(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public String getValueLabel(ClasspathAttributeAccess access) {
 		String arg= null;
 		String str= access.getClasspathAttribute().getValue();
@@ -79,6 +82,7 @@ public class JavadocAttributeConfiguration extends ClasspathAttributeConfigurati
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#performEdit(org.eclipse.swt.widgets.Shell, org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public IClasspathAttribute performEdit(Shell shell, ClasspathAttributeAccess attribute) {
 		String initialLocation= attribute.getClasspathAttribute().getValue();
 		String elementName= attribute.getParentClasspassEntry().getPath().lastSegment();
@@ -99,6 +103,7 @@ public class JavadocAttributeConfiguration extends ClasspathAttributeConfigurati
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#performRemove(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public IClasspathAttribute performRemove(ClasspathAttributeAccess attribute) {
 		return JavaCore.newClasspathAttribute(IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME, null);
 	}
@@ -106,6 +111,7 @@ public class JavadocAttributeConfiguration extends ClasspathAttributeConfigurati
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#canEdit(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public boolean canEdit(ClasspathAttributeAccess attribute) {
 		return true;
 	}
@@ -113,6 +119,7 @@ public class JavadocAttributeConfiguration extends ClasspathAttributeConfigurati
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#canRemove(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public boolean canRemove(ClasspathAttributeAccess attribute) {
 		return attribute.getClasspathAttribute().getValue() != null;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java
index 02aff9e..036d543 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,6 +62,7 @@ public class JavadocLocationDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -69,6 +70,7 @@ public class JavadocLocationDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 		Control inner= fJavadocConfigurationBlock.createContents(composite);
@@ -89,6 +91,7 @@ public class JavadocLocationDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.JAVADOC_PROPERTY_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
index f4767bc..af78015 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,6 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyEvent;
@@ -81,10 +80,10 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.TreeListDialogField;
 
 public class LibrariesWorkbookPage extends BuildPathBasePage {
 
-	private final ListDialogField fClassPathList;
+	private final ListDialogField<CPListElement> fClassPathList;
 	private IJavaProject fCurrJProject;
 
-	private final TreeListDialogField fLibrariesList;
+	private final TreeListDialogField<CPListElement> fLibrariesList;
 
 	private Control fSWTControl;
 	private final IWorkbenchPreferenceContainer fPageContainer;
@@ -101,7 +100,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 
 	private final int IDX_REPLACE= 10;
 
-	public LibrariesWorkbookPage(CheckedListDialogField classPathList, IWorkbenchPreferenceContainer pageContainer) {
+	public LibrariesWorkbookPage(CheckedListDialogField<CPListElement> classPathList, IWorkbenchPreferenceContainer pageContainer) {
 		fClassPathList= classPathList;
 		fPageContainer= pageContainer;
 		fSWTControl= null;
@@ -122,7 +121,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 
 		LibrariesAdapter adapter= new LibrariesAdapter();
 
-		fLibrariesList= new TreeListDialogField(adapter, buttonLabels, new CPListLabelProvider());
+		fLibrariesList= new TreeListDialogField<CPListElement>(adapter, buttonLabels, new CPListLabelProvider());
 		fLibrariesList.setDialogFieldListener(adapter);
 		fLibrariesList.setLabelText(NewWizardMessages.LibrariesWorkbookPage_libraries_label);
 
@@ -134,6 +133,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 
 	}
 
+	@Override
 	public void init(IJavaProject jproject) {
 		fCurrJProject= jproject;
 		if (Display.getCurrent() != null) {
@@ -148,12 +148,12 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void updateLibrariesList() {
-		List cpelements= fClassPathList.getElements();
-		List libelements= new ArrayList(cpelements.size());
+		List<CPListElement> cpelements= fClassPathList.getElements();
+		List<CPListElement> libelements= new ArrayList<CPListElement>(cpelements.size());
 
 		int nElements= cpelements.size();
 		for (int i= 0; i < nElements; i++) {
-			CPListElement cpe= (CPListElement)cpelements.get(i);
+			CPListElement cpe= cpelements.get(i);
 			if (isEntryKind(cpe.getEntryKind())) {
 				libelements.add(cpe);
 			}
@@ -163,6 +163,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 
 	// -------- UI creation
 
+	@Override
 	public Control getControl(Composite parent) {
 		PixelConverter converter= new PixelConverter(parent);
 
@@ -189,28 +190,28 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 
-	private class LibrariesAdapter implements IDialogFieldListener, ITreeListAdapter {
+	private class LibrariesAdapter implements IDialogFieldListener, ITreeListAdapter<CPListElement> {
 
 		private final Object[] EMPTY_ARR= new Object[0];
 
 		// -------- IListAdapter --------
-		public void customButtonPressed(TreeListDialogField field, int index) {
+		public void customButtonPressed(TreeListDialogField<CPListElement> field, int index) {
 			libaryPageCustomButtonPressed(field, index);
 		}
 
-		public void selectionChanged(TreeListDialogField field) {
+		public void selectionChanged(TreeListDialogField<CPListElement> field) {
 			libaryPageSelectionChanged(field);
 		}
 
-		public void doubleClicked(TreeListDialogField field) {
+		public void doubleClicked(TreeListDialogField<CPListElement> field) {
 			libaryPageDoubleClicked(field);
 		}
 
-		public void keyPressed(TreeListDialogField field, KeyEvent event) {
+		public void keyPressed(TreeListDialogField<CPListElement> field, KeyEvent event) {
 			libaryPageKeyPressed(field, event);
 		}
 
-		public Object[] getChildren(TreeListDialogField field, Object element) {
+		public Object[] getChildren(TreeListDialogField<CPListElement> field, Object element) {
 			if (element instanceof CPListElement) {
 				return ((CPListElement) element).getChildren(false);
 			} else if (element instanceof CPListElementAttribute) {
@@ -222,14 +223,14 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 			return EMPTY_ARR;
 		}
 
-		public Object getParent(TreeListDialogField field, Object element) {
+		public Object getParent(TreeListDialogField<CPListElement> field, Object element) {
 			if (element instanceof CPListElementAttribute) {
 				return ((CPListElementAttribute) element).getParent();
 			}
 			return null;
 		}
 
-		public boolean hasChildren(TreeListDialogField field, Object element) {
+		public boolean hasChildren(TreeListDialogField<CPListElement> field, Object element) {
 			return getChildren(field, element).length > 0;
 		}
 
@@ -280,8 +281,8 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 		if (libentries != null) {
 			int nElementsChosen= libentries.length;
 			// remove duplicates
-			List cplist= fLibrariesList.getElements();
-			List elementsToAdd= new ArrayList(nElementsChosen);
+			List<?> cplist= fLibrariesList.getElements();
+			List<CPListElement> elementsToAdd= new ArrayList<CPListElement>(nElementsChosen);
 
 			for (int i= 0; i < nElementsChosen; i++) {
 				CPListElement curr= libentries[i];
@@ -306,15 +307,16 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#addElement(org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement)
 	 */
+	@Override
 	public void addElement(CPListElement element) {
 		fLibrariesList.addElement(element);
 		fLibrariesList.postSetSelection(new StructuredSelection(element));
 	}
 
-	private void askForAddingExclusionPatternsDialog(List newEntries) {
-		HashSet modified= new HashSet();
-		List existing= fClassPathList.getElements();
-		fixNestingConflicts((CPListElement[])newEntries.toArray(new CPListElement[newEntries.size()]), (CPListElement[])existing.toArray(new CPListElement[existing.size()]), modified);
+	private void askForAddingExclusionPatternsDialog(List<CPListElement> newEntries) {
+		HashSet<CPListElement> modified= new HashSet<CPListElement>();
+		List<CPListElement> existing= fClassPathList.getElements();
+		fixNestingConflicts(newEntries.toArray(new CPListElement[newEntries.size()]), existing.toArray(new CPListElement[existing.size()]), modified);
 		if (!modified.isEmpty()) {
 			String title= NewWizardMessages.LibrariesWorkbookPage_exclusion_added_title;
 			String message= NewWizardMessages.LibrariesWorkbookPage_exclusion_added_message;
@@ -322,17 +324,17 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 		}
 	}
 
-	protected void libaryPageDoubleClicked(TreeListDialogField field) {
-		List selection= field.getSelectedElements();
+	protected void libaryPageDoubleClicked(TreeListDialogField<CPListElement> field) {
+		List<?> selection= field.getSelectedElements();
 		if (canEdit(selection)) {
 			editEntry();
 		}
 	}
 
-	protected void libaryPageKeyPressed(TreeListDialogField field, KeyEvent event) {
+	protected void libaryPageKeyPressed(TreeListDialogField<CPListElement> field, KeyEvent event) {
 		if (field == fLibrariesList) {
 			if (event.character == SWT.DEL && event.stateMask == 0) {
-				List selection= field.getSelectedElements();
+				List<?> selection= field.getSelectedElements();
 				if (canRemove(selection)) {
 					removeEntry();
 				}
@@ -354,7 +356,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 	private IPackageFragmentRoot getSelectedPackageFragmentRoot() {
-		final List elements= fLibrariesList.getSelectedElements();
+		final List<Object> elements= fLibrariesList.getSelectedElements();
 		if (elements.size() == 1) {
 			final Object object= elements.get(0);
 			if (object instanceof CPListElement) {
@@ -380,8 +382,8 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void removeEntry() {
-		List selElements= fLibrariesList.getSelectedElements();
-		HashMap containerEntriesToUpdate= new HashMap();
+		List<Object> selElements= fLibrariesList.getSelectedElements();
+		HashMap<CPListElement, HashSet<String>> containerEntriesToUpdate= new HashMap<CPListElement, HashSet<String>>();
 		for (int i= selElements.size() - 1; i >= 0 ; i--) {
 			Object elem= selElements.get(i);
 			if (elem instanceof CPListElementAttribute) {
@@ -399,9 +401,9 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 				selElements.remove(i);
 				if (attrib.getParent().getParentContainer() instanceof CPListElement) { // inside a container: apply changes right away
 					CPListElement containerEntry= attrib.getParent();
-					HashSet changedAttributes= (HashSet) containerEntriesToUpdate.get(containerEntry);
+					HashSet<String> changedAttributes= containerEntriesToUpdate.get(containerEntry);
 					if (changedAttributes == null) {
-						changedAttributes= new HashSet();
+						changedAttributes= new HashSet<String>();
 						containerEntriesToUpdate.put(containerEntry, changedAttributes);
 					}
 					changedAttributes.add(key); // collect the changed attributes
@@ -414,17 +416,17 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 		} else {
 			fLibrariesList.removeElements(selElements);
 		}
-		for (Iterator iter= containerEntriesToUpdate.entrySet().iterator(); iter.hasNext();) {
-			Map.Entry entry= (Entry) iter.next();
-			CPListElement curr= (CPListElement) entry.getKey();
-			HashSet attribs= (HashSet) entry.getValue();
-			String[] changedAttributes= (String[]) attribs.toArray(new String[attribs.size()]);
+		for (Iterator<Map.Entry<CPListElement, HashSet<String>>> iter= containerEntriesToUpdate.entrySet().iterator(); iter.hasNext();) {
+			Map.Entry<CPListElement, HashSet<String>> entry= iter.next();
+			CPListElement curr= entry.getKey();
+			HashSet<String> attribs= entry.getValue();
+			String[] changedAttributes= attribs.toArray(new String[attribs.size()]);
 			IClasspathEntry changedEntry= curr.getClasspathEntry();
 			updateContainerEntry(changedEntry, changedAttributes, fCurrJProject, ((CPListElement) curr.getParentContainer()).getPath());
 		}
 	}
 
-	private boolean canRemove(List selElements) {
+	private boolean canRemove(List<?> selElements) {
 		if (selElements.size() == 0) {
 			return false;
 		}
@@ -466,7 +468,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	 * Method editEntry.
 	 */
 	private void editEntry() {
-		List selElements= fLibrariesList.getSelectedElements();
+		List<?> selElements= fLibrariesList.getSelectedElements();
 		if (selElements.size() != 1) {
 			return;
 		}
@@ -596,7 +598,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void updateEnabledState() {
-		List selElements= fLibrariesList.getSelectedElements();
+		List<?> selElements= fLibrariesList.getSelectedElements();
 		fLibrariesList.enableButton(IDX_EDIT, canEdit(selElements));
 		fLibrariesList.enableButton(IDX_REMOVE, canRemove(selElements));
 		fLibrariesList.enableButton(IDX_REPLACE, getSelectedPackageFragmentRoot() != null);
@@ -610,7 +612,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 		fLibrariesList.enableButton(IDX_ADDVAR, noAttributes);
 	}
 
-	private boolean canEdit(List selElements) {
+	private boolean canEdit(List<?> selElements) {
 		if (selElements.size() != 1) {
 			return false;
 		}
@@ -643,14 +645,14 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void updateClasspathList() {
-		List projelements= fLibrariesList.getElements();
+		List<CPListElement> projelements= fLibrariesList.getElements();
 
-		List cpelements= fClassPathList.getElements();
+		List<CPListElement> cpelements= fClassPathList.getElements();
 		int nEntries= cpelements.size();
 		// backwards, as entries will be deleted
 		int lastRemovePos= nEntries;
 		for (int i= nEntries - 1; i >= 0; i--) {
-			CPListElement cpe= (CPListElement)cpelements.get(i);
+			CPListElement cpe= cpelements.get(i);
 			int kind= cpe.getEntryKind();
 			if (isEntryKind(kind)) {
 				if (!projelements.remove(cpe)) {
@@ -688,7 +690,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 			IPath[] selected= BuildPathDialogAccess.chooseClassFolderEntries(getShell(), fCurrJProject.getPath(), getUsedContainers(existing));
 			if (selected != null) {
 				IWorkspaceRoot root= fCurrJProject.getProject().getWorkspace().getRoot();
-				ArrayList res= new ArrayList();
+				ArrayList<CPListElement> res= new ArrayList<CPListElement>();
 				for (int i= 0; i < selected.length; i++) {
 					IPath curr= selected[i];
 					IResource resource= root.findMember(curr);
@@ -696,7 +698,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 						res.add(newCPLibraryElement(resource));
 					}
 				}
-				return (CPListElement[]) res.toArray(new CPListElement[res.size()]);
+				return res.toArray(new CPListElement[res.size()]);
 			}
 		} else {
 			// disabled
@@ -710,7 +712,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 		if (existing == null) {
 			IPath[] selected= BuildPathDialogAccess.chooseJAREntries(getShell(), fCurrJProject.getPath(), getUsedJARFiles(existing));
 			if (selected != null) {
-				ArrayList res= new ArrayList();
+				ArrayList<CPListElement> res= new ArrayList<CPListElement>();
 
 				for (int i= 0; i < selected.length; i++) {
 					IPath curr= selected[i];
@@ -719,7 +721,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 						res.add(newCPLibraryElement(resource));
 					}
 				}
-				return (CPListElement[]) res.toArray(new CPListElement[res.size()]);
+				return res.toArray(new CPListElement[res.size()]);
 			}
 		} else {
 			IPath configured= BuildPathDialogAccess.configureJAREntry(getShell(), existing.getPath(), getUsedJARFiles(existing));
@@ -734,7 +736,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 	private IPath[] getUsedContainers(CPListElement existing) {
-		ArrayList res= new ArrayList();
+		ArrayList<IPath> res= new ArrayList<IPath>();
 		if (fCurrJProject.exists()) {
 			try {
 				IPath outputLocation= fCurrJProject.getOutputLocation();
@@ -747,9 +749,9 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 			}
 		}
 
-		List cplist= fLibrariesList.getElements();
+		List<CPListElement> cplist= fLibrariesList.getElements();
 		for (int i= 0; i < cplist.size(); i++) {
-			CPListElement elem= (CPListElement)cplist.get(i);
+			CPListElement elem= cplist.get(i);
 			if (elem.getEntryKind() == IClasspathEntry.CPE_LIBRARY && (elem != existing)) {
 				IResource resource= elem.getResource();
 				if (resource instanceof IContainer && !resource.equals(existing)) {
@@ -757,14 +759,14 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 				}
 			}
 		}
-		return (IPath[]) res.toArray(new IPath[res.size()]);
+		return res.toArray(new IPath[res.size()]);
 	}
 
 	private IPath[] getUsedJARFiles(CPListElement existing) {
-		List res= new ArrayList();
-		List cplist= fLibrariesList.getElements();
+		List<IPath> res= new ArrayList<IPath>();
+		List<CPListElement> cplist= fLibrariesList.getElements();
 		for (int i= 0; i < cplist.size(); i++) {
-			CPListElement elem= (CPListElement)cplist.get(i);
+			CPListElement elem= cplist.get(i);
 			if (elem.getEntryKind() == IClasspathEntry.CPE_LIBRARY && (elem != existing)) {
 				IResource resource= elem.getResource();
 				if (resource instanceof IFile) {
@@ -772,7 +774,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 				}
 			}
 		}
-		return (IPath[]) res.toArray(new IPath[res.size()]);
+		return res.toArray(new IPath[res.size()]);
 	}
 
 	private CPListElement newCPLibraryElement(IResource res) {
@@ -783,11 +785,11 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 		if (existing == null) {
 			IPath[] selected= BuildPathDialogAccess.chooseExternalJAREntries(getShell());
 			if (selected != null) {
-				ArrayList res= new ArrayList();
+				ArrayList<CPListElement> res= new ArrayList<CPListElement>();
 				for (int i= 0; i < selected.length; i++) {
 					res.add(new CPListElement(fCurrJProject, IClasspathEntry.CPE_LIBRARY, selected[i], null));
 				}
-				return (CPListElement[]) res.toArray(new CPListElement[res.size()]);
+				return res.toArray(new CPListElement[res.size()]);
 			}
 		} else {
 			IPath path;
@@ -808,11 +810,11 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 		if (existing == null) {
 			IPath[] selected= BuildPathDialogAccess.chooseExternalClassFolderEntries(getShell());
 			if (selected != null) {
-				ArrayList res= new ArrayList();
+				ArrayList<CPListElement> res= new ArrayList<CPListElement>();
 				for (int i= 0; i < selected.length; i++) {
 					res.add(new CPListElement(fCurrJProject, IClasspathEntry.CPE_LIBRARY, selected[i], null));
 				}
-				return (CPListElement[]) res.toArray(new CPListElement[res.size()]);
+				return res.toArray(new CPListElement[res.size()]);
 			}
 		} else {
 			IPath configured= BuildPathDialogAccess.configureExternalClassFolderEntries(getShell(), existing.getPath());
@@ -824,20 +826,20 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	}
 
 	private CPListElement[] openVariableSelectionDialog(CPListElement existing) {
-		List existingElements= fLibrariesList.getElements();
-		ArrayList existingPaths= new ArrayList(existingElements.size());
+		List<CPListElement> existingElements= fLibrariesList.getElements();
+		ArrayList<IPath> existingPaths= new ArrayList<IPath>(existingElements.size());
 		for (int i= 0; i < existingElements.size(); i++) {
-			CPListElement elem= (CPListElement) existingElements.get(i);
+			CPListElement elem= existingElements.get(i);
 			if (elem.getEntryKind() == IClasspathEntry.CPE_VARIABLE) {
 				existingPaths.add(elem.getPath());
 			}
 		}
-		IPath[] existingPathsArray= (IPath[]) existingPaths.toArray(new IPath[existingPaths.size()]);
+		IPath[] existingPathsArray= existingPaths.toArray(new IPath[existingPaths.size()]);
 
 		if (existing == null) {
 			IPath[] paths= BuildPathDialogAccess.chooseVariableEntries(getShell(), existingPathsArray);
 			if (paths != null) {
-				ArrayList result= new ArrayList();
+				ArrayList<CPListElement> result= new ArrayList<CPListElement>();
 				for (int i = 0; i < paths.length; i++) {
 					IPath path= paths[i];
 					CPListElement elem= createCPVariableElement(path);
@@ -845,7 +847,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 						result.add(elem);
 					}
 				}
-				return (CPListElement[]) result.toArray(new CPListElement[result.size()]);
+				return result.toArray(new CPListElement[result.size()]);
 			}
 		} else {
 			IPath path= BuildPathDialogAccess.configureVariableEntry(getShell(), existing.getPath(), existingPathsArray);
@@ -887,7 +889,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	private IClasspathEntry[] getRawClasspath() {
 		IClasspathEntry[] currEntries= new IClasspathEntry[fClassPathList.getSize()];
 		for (int i= 0; i < currEntries.length; i++) {
-			CPListElement curr= (CPListElement) fClassPathList.getElement(i);
+			CPListElement curr= fClassPathList.getElement(i);
 			currEntries[i]= curr.getClasspathEntry();
 		}
 		return currEntries;
@@ -896,6 +898,7 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#isEntryKind(int)
 	 */
+	@Override
 	public boolean isEntryKind(int kind) {
 		return kind == IClasspathEntry.CPE_LIBRARY || kind == IClasspathEntry.CPE_VARIABLE || kind == IClasspathEntry.CPE_CONTAINER;
 	}
@@ -903,14 +906,16 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	/*
 	 * @see BuildPathBasePage#getSelection
 	 */
-	public List getSelection() {
+	@Override
+	public List<?> getSelection() {
 		return fLibrariesList.getSelectedElements();
 	}
 
 	/*
 	 * @see BuildPathBasePage#setSelection
 	 */
-	public void setSelection(List selElements, boolean expand) {
+	@Override
+	public void setSelection(List<?> selElements, boolean expand) {
 		fLibrariesList.selectElements(new StructuredSelection(selElements));
 		if (expand) {
 			for (int i= 0; i < selElements.size(); i++) {
@@ -922,7 +927,8 @@ public class LibrariesWorkbookPage extends BuildPathBasePage {
 	/**
      * {@inheritDoc}
      */
-    public void setFocus() {
+    @Override
+	public void setFocus() {
     	fLibrariesList.setFocus();
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java
index 6cdffab..7127890 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,12 +58,12 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 
 	private ILabelProvider fLabelProvider;
 	private ITreeContentProvider fContentProvider;
-	private List fFilters;
+	private List<ViewerFilter> fFilters;
 
 	private Object fInput;
 	private Button fNewFolderButton;
 	private IContainer fSelectedContainer;
-	private Set fExisting;
+	private Set<Object> fExisting;
 	private Object fFocusElement;
 
 	public MultipleFolderSelectionDialog(Shell parent, ILabelProvider labelProvider, ITreeContentProvider contentProvider) {
@@ -80,7 +80,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 	}
 
 	public void setExisting(Object[] existing) {
-		fExisting= new HashSet();
+		fExisting= new HashSet<Object>();
 		for (int i= 0; i < existing.length; i++) {
 			fExisting.add(existing[i]);
 		}
@@ -100,7 +100,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 	 */
 	public void addFilter(ViewerFilter filter) {
 		if (fFilters == null)
-			fFilters = new ArrayList(4);
+			fFilters = new ArrayList<ViewerFilter>(4);
 
 		fFilters.add(filter);
 	}
@@ -108,6 +108,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 	/**
 	 * Handles cancel button pressed event.
 	 */
+	@Override
 	protected void cancelPressed() {
 		setSelectionResult(null);
 		super.cancelPressed();
@@ -116,6 +117,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 	/*
 	 * @see SelectionStatusDialog#computeResult()
 	 */
+	@Override
 	protected void computeResult() {
 		Object[] checked= fViewer.getCheckedElements();
 		if (fExisting == null) {
@@ -123,7 +125,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 				checked= null;
 			}
 		} else {
-			ArrayList res= new ArrayList();
+			ArrayList<Object> res= new ArrayList<Object>();
 			for (int i= 0; i < checked.length; i++) {
 				Object elem= checked[i];
 				if (!fExisting.contains(elem)) {
@@ -146,6 +148,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 	/*
 	 * @see Window#create()
 	 */
+	@Override
 	public void create() {
 
 		BusyIndicator.showWhile(null, new Runnable() {
@@ -157,7 +160,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 
 				fViewer.expandToLevel(2);
 				if (fExisting != null) {
-					for (Iterator iter= fExisting.iterator(); iter.hasNext();) {
+					for (Iterator<Object> iter= fExisting.iterator(); iter.hasNext();) {
 						fViewer.reveal(iter.next());
 					}
 				}
@@ -188,7 +191,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 		fViewer.setComparator(new ResourceComparator(ResourceComparator.NAME));
 		if (fFilters != null) {
 			for (int i = 0; i != fFilters.size(); i++)
-				fViewer.addFilter((ViewerFilter) fFilters.get(i));
+				fViewer.addFilter(fFilters.get(i));
 		}
 
 		fViewer.setInput(fInput);
@@ -213,6 +216,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite = (Composite) super.createDialogArea(parent);
 
@@ -230,6 +234,7 @@ public class MultipleFolderSelectionDialog extends SelectionStatusDialog impleme
 		Button button = new Button(composite, SWT.PUSH);
 		button.setText(NewWizardMessages.MultipleFolderSelectionDialog_button);
 		button.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent event) {
 				newFolderButtonPressed();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibAttributeConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibAttributeConfiguration.java
index 251ed36..c411aed 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibAttributeConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibAttributeConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ public class NativeLibAttributeConfiguration extends ClasspathAttributeConfigura
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#getImageDescriptor(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public ImageDescriptor getImageDescriptor(ClasspathAttributeAccess attribute) {
 		return JavaPluginImages.DESC_OBJS_NATIVE_LIB_PATH_ATTRIB;
 	}
@@ -38,6 +39,7 @@ public class NativeLibAttributeConfiguration extends ClasspathAttributeConfigura
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#getNameLabel(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public String getNameLabel(ClasspathAttributeAccess attribute) {
 		return NewWizardMessages.CPListLabelProvider_native_library_path;
 	}
@@ -45,6 +47,7 @@ public class NativeLibAttributeConfiguration extends ClasspathAttributeConfigura
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#getValueLabel(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public String getValueLabel(ClasspathAttributeAccess attribute) {
 		String arg= attribute.getClasspathAttribute().getValue();
 		if (arg == null) {
@@ -56,6 +59,7 @@ public class NativeLibAttributeConfiguration extends ClasspathAttributeConfigura
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#canEdit(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public boolean canEdit(ClasspathAttributeAccess attribute) {
 		return true;
 	}
@@ -63,6 +67,7 @@ public class NativeLibAttributeConfiguration extends ClasspathAttributeConfigura
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#canRemove(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public boolean canRemove(ClasspathAttributeAccess attribute) {
 		return attribute.getClasspathAttribute().getValue() != null;
 	}
@@ -70,6 +75,7 @@ public class NativeLibAttributeConfiguration extends ClasspathAttributeConfigura
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#performEdit(org.eclipse.swt.widgets.Shell, org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public IClasspathAttribute performEdit(Shell shell, ClasspathAttributeAccess attribute) {
 		NativeLibrariesDialog dialog= new NativeLibrariesDialog(shell, attribute.getClasspathAttribute().getValue(), attribute.getParentClasspassEntry());
 		if (dialog.open() == Window.OK) {
@@ -81,6 +87,7 @@ public class NativeLibAttributeConfiguration extends ClasspathAttributeConfigura
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration#performRemove(org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration.ClasspathAttributeAccess)
 	 */
+	@Override
 	public IClasspathAttribute performRemove(ClasspathAttributeAccess attribute) {
 		return JavaCore.newClasspathAttribute(JavaRuntime.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY, null);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java
index e8f8a68..a6a68a3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class NativeLibrariesDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		// TODO Auto-generated method stub
 		return true;
@@ -57,6 +58,7 @@ public class NativeLibrariesDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 		Control inner= fConfigurationBlock.createContents(composite);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java
index d359122..277d81d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,7 @@ public class NewContainerDialog extends StatusDialog {
 		fContainerDialogField.setLabelText(message);
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite)super.createDialogArea(parent);
 
@@ -155,6 +156,7 @@ public class NewContainerDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.NEW_CONTAINER_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewSourceFolderDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewSourceFolderDialog.java
index 6d5ec1a..becf26d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewSourceFolderDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewSourceFolderDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,10 +52,10 @@ public class NewSourceFolderDialog extends StatusDialog {
 	private StatusInfo fContainerFieldStatus;
 
 	private IContainer fFolder;
-	private List fExistingFolders;
+	private List<IContainer> fExistingFolders;
 	private IProject fCurrProject;
 
-	public NewSourceFolderDialog(Shell parent, String title, IProject project, List existingFolders, CPListElement entryToEdit) {
+	public NewSourceFolderDialog(Shell parent, String title, IProject project, List<IContainer> existingFolders, CPListElement entryToEdit) {
 		super(parent);
 		setTitle(title);
 
@@ -97,6 +97,7 @@ public class NewSourceFolderDialog extends StatusDialog {
 		fContainerDialogField.setLabelText(message);
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite)super.createDialogArea(parent);
 
@@ -191,6 +192,7 @@ public class NewSourceFolderDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.NEW_CONTAINER_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java
index 30ff071..319c78a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,11 +61,11 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogFie
 
 public class NewVariableEntryDialog extends StatusDialog {
 
-	private class VariablesAdapter implements IDialogFieldListener, IListAdapter {
+	private class VariablesAdapter implements IDialogFieldListener, IListAdapter<CPVariableElement> {
 
 		// -------- IListAdapter --------
 
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<CPVariableElement> field, int index) {
 			switch (index) {
 			case IDX_EXTEND: /* extend */
 				extendButtonPressed();
@@ -73,11 +73,11 @@ public class NewVariableEntryDialog extends StatusDialog {
 			}
 		}
 
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<CPVariableElement> field) {
 			doSelectionChanged();
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<CPVariableElement> field) {
 			doDoubleClick();
 		}
 
@@ -94,7 +94,7 @@ public class NewVariableEntryDialog extends StatusDialog {
 
 	private final int IDX_EXTEND= 0;
 
-	private ListDialogField fVariablesList;
+	private ListDialogField<CPVariableElement> fVariablesList;
 	private boolean fCanExtend;
 	private boolean fIsValidSelection;
 
@@ -118,13 +118,14 @@ public class NewVariableEntryDialog extends StatusDialog {
 
 		CPVariableElementLabelProvider labelProvider= new CPVariableElementLabelProvider(false);
 
-		fVariablesList= new ListDialogField(adapter, buttonLabels, labelProvider);
+		fVariablesList= new ListDialogField<CPVariableElement>(adapter, buttonLabels, labelProvider);
 		fVariablesList.setDialogFieldListener(adapter);
 		fVariablesList.setLabelText(NewWizardMessages.NewVariableEntryDialog_vars_label);
 
 		fVariablesList.enableButton(IDX_EXTEND, false);
 
 		fVariablesList.setViewerComparator(new ViewerComparator() {
+			@Override
 			public int compare(Viewer viewer, Object e1, Object e2) {
 				if (e1 instanceof CPVariableElement && e2 instanceof CPVariableElement) {
 					return getComparator().compare(((CPVariableElement)e1).getName(), ((CPVariableElement)e2).getName());
@@ -151,13 +152,14 @@ public class NewVariableEntryDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
 
 	private void initializeElements() {
 		String[] entries= JavaCore.getClasspathVariableNames();
-		ArrayList elements= new ArrayList(entries.length);
+		ArrayList<CPVariableElement> elements= new ArrayList<CPVariableElement>(entries.length);
 		for (int i= 0; i < entries.length; i++) {
 			String name= entries[i];
 			IPath entryPath= JavaCore.getClasspathVariable(name);
@@ -173,6 +175,7 @@ public class NewVariableEntryDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.NEW_VARIABLE_ENTRY_DIALOG);
@@ -181,6 +184,7 @@ public class NewVariableEntryDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
 	 */
+	@Override
 	protected IDialogSettings getDialogBoundsSettings() {
 		return JavaPlugin.getDefault().getDialogSettingsSection(getClass().getName());
 	}
@@ -188,6 +192,7 @@ public class NewVariableEntryDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		initializeDialogUnits(parent);
 
@@ -241,13 +246,13 @@ public class NewVariableEntryDialog extends StatusDialog {
 		boolean canExtend= false;
 		StatusInfo status= new StatusInfo();
 
-		List selected= fVariablesList.getSelectedElements();
+		List<CPVariableElement> selected= fVariablesList.getSelectedElements();
 		int nSelected= selected.size();
 
 		if (nSelected > 0) {
 			fResultPaths= new Path[nSelected];
 			for (int i= 0; i < nSelected; i++) {
-				CPVariableElement curr= (CPVariableElement) selected.get(i);
+				CPVariableElement curr= selected.get(i);
 				fResultPaths[i]= new Path(curr.getName());
 				File file= curr.getPath().toFile();
 				if (!file.exists()) {
@@ -283,8 +288,8 @@ public class NewVariableEntryDialog extends StatusDialog {
 		if (fWarning == null || fWarning.isDisposed())
 			return;
 
-		for (Iterator iter= fVariablesList.getSelectedElements().iterator(); iter.hasNext();) {
-			CPVariableElement element= (CPVariableElement) iter.next();
+		for (Iterator<CPVariableElement> iter= fVariablesList.getSelectedElements().iterator(); iter.hasNext();) {
+			CPVariableElement element= iter.next();
 			String deprecationMessage= element.getDeprecationMessage();
 			if (deprecationMessage != null) {
 				fWarning.setText(deprecationMessage);
@@ -320,9 +325,9 @@ public class NewVariableEntryDialog extends StatusDialog {
 	}
 
 	protected final void extendButtonPressed() {
-		List selected= fVariablesList.getSelectedElements();
+		List<CPVariableElement> selected= fVariablesList.getSelectedElements();
 		if (selected.size() == 1) {
-			IPath[] extendedPaths= chooseExtensions((CPVariableElement) selected.get(0));
+			IPath[] extendedPaths= chooseExtensions(selected.get(0));
 			if (extendedPaths != null) {
 				fResultPaths= extendedPaths;
 				super.buttonPressed(IDialogConstants.OK_ID);
@@ -332,17 +337,17 @@ public class NewVariableEntryDialog extends StatusDialog {
 
 	protected final void configButtonPressed() {
 		String id= ClasspathVariablesPreferencePage.ID;
-		Map options= new HashMap();
-		List selected= fVariablesList.getSelectedElements();
+		Map<String, String> options= new HashMap<String, String>();
+		List<CPVariableElement> selected= fVariablesList.getSelectedElements();
 		if (!selected.isEmpty()) {
-			String varName= ((CPVariableElement) selected.get(0)).getName();
+			String varName= selected.get(0).getName();
 			options.put(ClasspathVariablesPreferencePage.DATA_SELECT_VARIABLE, varName);
 		}
 		PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, options).open();
 
-		List oldElements= fVariablesList.getElements();
+		List<CPVariableElement> oldElements= fVariablesList.getElements();
 		initializeElements();
-		List newElements= fVariablesList.getElements();
+		List<CPVariableElement> newElements= fVariablesList.getElements();
 		newElements.removeAll(oldElements);
 		if (!newElements.isEmpty()) {
 			fVariablesList.selectElements(new StructuredSelection(newElements));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java
index b32e9fa..4b64103 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,7 +77,7 @@ public class OutputLocationDialog extends StatusDialog {
 	private final boolean fAllowInvalidClasspath;
 	private CPJavaProject fCPJavaProject;
 
-	public OutputLocationDialog(Shell parent, CPListElement entryToEdit, List classPathList, IPath defaultOutputFolder, boolean allowInvalidClasspath) {
+	public OutputLocationDialog(Shell parent, CPListElement entryToEdit, List<CPListElement> classPathList, IPath defaultOutputFolder, boolean allowInvalidClasspath) {
 		super(parent);
 		fEntryToEdit= entryToEdit;
 		fAllowInvalidClasspath= allowInvalidClasspath;
@@ -114,6 +114,7 @@ public class OutputLocationDialog extends StatusDialog {
 		}
 	}
 
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite)super.createDialogArea(parent);
 
@@ -208,6 +209,7 @@ public class OutputLocationDialog extends StatusDialog {
 	/*
 	 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.OUTPUT_LOCATION_DIALOG);
@@ -217,9 +219,9 @@ public class OutputLocationDialog extends StatusDialog {
 
 	private IContainer chooseOutputLocation() {
 		IWorkspaceRoot root= fCurrProject.getWorkspace().getRoot();
-		final Class[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
+		final Class<?>[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
 		IProject[] allProjects= root.getProjects();
-		ArrayList rejectedElements= new ArrayList(allProjects.length);
+		ArrayList<IProject> rejectedElements= new ArrayList<IProject>(allProjects.length);
 		for (int i= 0; i < allProjects.length; i++) {
 			if (!allProjects[i].equals(fCurrProject)) {
 				rejectedElements.add(allProjects[i]);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
index 9bea8fa..b375899 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,16 +55,16 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	private final int IDX_EDIT= 2;
 	private final int IDX_REMOVE= 3;
 
-	private final ListDialogField fClassPathList;
+	private final ListDialogField<CPListElement> fClassPathList;
 	private IJavaProject fCurrJProject;
 
-	private final TreeListDialogField fProjectsList;
+	private final TreeListDialogField<CPListElement> fProjectsList;
 
 	private Control fSWTControl;
 
 	private final IWorkbenchPreferenceContainer fPageContainer;
 
-	public ProjectsWorkbookPage(ListDialogField classPathList, IWorkbenchPreferenceContainer pageContainer) {
+	public ProjectsWorkbookPage(ListDialogField<CPListElement> classPathList, IWorkbenchPreferenceContainer pageContainer) {
 		fClassPathList= classPathList;
 		fPageContainer= pageContainer;
 		fSWTControl= null;
@@ -78,7 +78,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 
 		ProjectsAdapter adapter= new ProjectsAdapter();
 
-		fProjectsList= new TreeListDialogField(adapter, buttonLabels, new CPListLabelProvider());
+		fProjectsList= new TreeListDialogField<CPListElement>(adapter, buttonLabels, new CPListLabelProvider());
 		fProjectsList.setDialogFieldListener(adapter);
 		fProjectsList.setLabelText(NewWizardMessages.ProjectsWorkbookPage_projects_label);
 
@@ -88,6 +88,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 		fProjectsList.setViewerComparator(new CPListElementSorter());
 	}
 
+	@Override
 	public void init(final IJavaProject jproject) {
 		fCurrJProject= jproject;
 
@@ -104,12 +105,12 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 
 	private void updateProjectsList() {
 		// add the projects-cpentries that are already on the class path
-		List cpelements= fClassPathList.getElements();
+		List<CPListElement> cpelements= fClassPathList.getElements();
 
-		final List checkedProjects= new ArrayList(cpelements.size());
+		final List<CPListElement> checkedProjects= new ArrayList<CPListElement>(cpelements.size());
 
 		for (int i= cpelements.size() - 1 ; i >= 0; i--) {
-			CPListElement cpelem= (CPListElement)cpelements.get(i);
+			CPListElement cpelem= cpelements.get(i);
 			if (isEntryKind(cpelem.getEntryKind())) {
 				checkedProjects.add(cpelem);
 			}
@@ -119,6 +120,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 
 	// -------- UI creation ---------
 
+	@Override
 	public Control getControl(Composite parent) {
 		PixelConverter converter= new PixelConverter(parent);
 
@@ -136,13 +138,13 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void updateClasspathList() {
-		List projelements= fProjectsList.getElements();
+		List<CPListElement> projelements= fProjectsList.getElements();
 
 		boolean remove= false;
-		List cpelements= fClassPathList.getElements();
+		List<CPListElement> cpelements= fClassPathList.getElements();
 		// backwards, as entries will be deleted
 		for (int i= cpelements.size() -1; i >= 0 ; i--) {
-			CPListElement cpe= (CPListElement)cpelements.get(i);
+			CPListElement cpe= cpelements.get(i);
 			if (isEntryKind(cpe.getEntryKind())) {
 				if (!projelements.remove(cpe)) {
 					cpelements.remove(i);
@@ -161,14 +163,16 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	/*
 	 * @see BuildPathBasePage#getSelection
 	 */
-	public List getSelection() {
+	@Override
+	public List<Object> getSelection() {
 		return fProjectsList.getSelectedElements();
 	}
 
 	/*
 	 * @see BuildPathBasePage#setSelection
 	 */
-	public void setSelection(List selElements, boolean expand) {
+	@Override
+	public void setSelection(List<?> selElements, boolean expand) {
 		fProjectsList.selectElements(new StructuredSelection(selElements));
 		if (expand) {
 			for (int i= 0; i < selElements.size(); i++) {
@@ -180,47 +184,48 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#isEntryKind(int)
 	 */
+	@Override
 	public boolean isEntryKind(int kind) {
 		return kind == IClasspathEntry.CPE_PROJECT;
 	}
 
 
-	private class ProjectsAdapter implements IDialogFieldListener, ITreeListAdapter {
+	private class ProjectsAdapter implements IDialogFieldListener, ITreeListAdapter<CPListElement> {
 
 		private final Object[] EMPTY_ARR= new Object[0];
 
 		// -------- IListAdapter --------
-		public void customButtonPressed(TreeListDialogField field, int index) {
+		public void customButtonPressed(TreeListDialogField<CPListElement> field, int index) {
 			projectPageCustomButtonPressed(field, index);
 		}
 
-		public void selectionChanged(TreeListDialogField field) {
+		public void selectionChanged(TreeListDialogField<CPListElement> field) {
 			projectPageSelectionChanged(field);
 		}
 
-		public void doubleClicked(TreeListDialogField field) {
+		public void doubleClicked(TreeListDialogField<CPListElement> field) {
 			projectPageDoubleClicked(field);
 		}
 
-		public void keyPressed(TreeListDialogField field, KeyEvent event) {
+		public void keyPressed(TreeListDialogField<CPListElement> field, KeyEvent event) {
 			projectPageKeyPressed(field, event);
 		}
 
-		public Object[] getChildren(TreeListDialogField field, Object element) {
+		public Object[] getChildren(TreeListDialogField<CPListElement> field, Object element) {
 			if (element instanceof CPListElement) {
 				return ((CPListElement) element).getChildren(false);
 			}
 			return EMPTY_ARR;
 		}
 
-		public Object getParent(TreeListDialogField field, Object element) {
+		public Object getParent(TreeListDialogField<CPListElement> field, Object element) {
 			if (element instanceof CPListElementAttribute) {
 				return ((CPListElementAttribute) element).getParent();
 			}
 			return null;
 		}
 
-		public boolean hasChildren(TreeListDialogField field, Object element) {
+		public boolean hasChildren(TreeListDialogField<CPListElement> field, Object element) {
 			return getChildren(field, element).length > 0;
 		}
 
@@ -251,8 +256,8 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 		if (entries != null) {
 			int nElementsChosen= entries.length;
 			// remove duplicates
-			List cplist= fProjectsList.getElements();
-			List elementsToAdd= new ArrayList(nElementsChosen);
+			List<CPListElement> cplist= fProjectsList.getElements();
+			List<CPListElement> elementsToAdd= new ArrayList<CPListElement>(nElementsChosen);
 			for (int i= 0; i < nElementsChosen; i++) {
 				CPListElement curr= entries[i];
 				if (!cplist.contains(curr) && !elementsToAdd.contains(curr)) {
@@ -269,7 +274,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void removeEntry() {
-		List selElements= fProjectsList.getSelectedElements();
+		List<Object> selElements= fProjectsList.getSelectedElements();
 		for (int i= selElements.size() - 1; i >= 0 ; i--) {
 			Object elem= selElements.get(i);
 			if (elem instanceof CPListElementAttribute) {
@@ -295,7 +300,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 		}
 	}
 
-	private boolean canRemove(List selElements) {
+	private boolean canRemove(List<?> selElements) {
 		if (selElements.size() == 0) {
 			return false;
 		}
@@ -325,7 +330,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 		return true;
 	}
 
-	private boolean canEdit(List selElements) {
+	private boolean canEdit(List<?> selElements) {
 		if (selElements.size() != 1) {
 			return false;
 		}
@@ -350,7 +355,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	 * Method editEntry.
 	 */
 	private void editEntry() {
-		List selElements= fProjectsList.getSelectedElements();
+		List<Object> selElements= fProjectsList.getSelectedElements();
 		if (selElements.size() != 1) {
 			return;
 		}
@@ -420,13 +425,13 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	}
 
 	private Object[] getNotYetRequiredProjects() throws JavaModelException {
-		ArrayList selectable= new ArrayList();
+		ArrayList<IJavaProject> selectable= new ArrayList<IJavaProject>();
 		selectable.addAll(Arrays.asList(fCurrJProject.getJavaModel().getJavaProjects()));
 		selectable.remove(fCurrJProject);
 
-		List elements= fProjectsList.getElements();
+		List<CPListElement> elements= fProjectsList.getElements();
 		for (int i= 0; i < elements.size(); i++) {
-			CPListElement curr= (CPListElement)elements.get(i);
+			CPListElement curr= elements.get(i);
 			IJavaProject proj= (IJavaProject) JavaCore.create(curr.getResource());
 			selectable.remove(proj);
 		}
@@ -437,17 +442,17 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	/**
 	 * @param field the dialog field
 	 */
-	protected void projectPageDoubleClicked(TreeListDialogField field) {
-		List selection= fProjectsList.getSelectedElements();
+	protected void projectPageDoubleClicked(TreeListDialogField<CPListElement> field) {
+		List<Object> selection= fProjectsList.getSelectedElements();
 		if (canEdit(selection)) {
 			editEntry();
 		}
 	}
 
-	protected void projectPageKeyPressed(TreeListDialogField field, KeyEvent event) {
+	protected void projectPageKeyPressed(TreeListDialogField<CPListElement> field, KeyEvent event) {
 		if (field == fProjectsList) {
 			if (event.character == SWT.DEL && event.stateMask == 0) {
-				List selection= field.getSelectedElements();
+				List<Object> selection= field.getSelectedElements();
 				if (canRemove(selection)) {
 					removeEntry();
 				}
@@ -469,7 +474,7 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	 * @param field the dialog field
 	 */
 	private void projectPageSelectionChanged(DialogField field) {
-		List selElements= fProjectsList.getSelectedElements();
+		List<Object> selElements= fProjectsList.getSelectedElements();
 		fProjectsList.enableButton(IDX_EDIT, canEdit(selElements));
 		fProjectsList.enableButton(IDX_REMOVE, canRemove(selElements));
 
@@ -485,7 +490,8 @@ public class ProjectsWorkbookPage extends BuildPathBasePage {
 	/**
      * {@inheritDoc}
      */
-    public void setFocus() {
+    @Override
+	public void setFocus() {
     	fProjectsList.setFocus();
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java
index 6d89503..a9076ce 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,8 +59,8 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 
 	private static final String PAGE_NAME= "SetFilterWizardPage"; //$NON-NLS-1$
 
-	private ListDialogField fInclusionPatternList;
-	private ListDialogField fExclusionPatternList;
+	private ListDialogField<String> fInclusionPatternList;
+	private ListDialogField<String> fExclusionPatternList;
 	private CPListElement fCurrElement;
 	private IProject fCurrProject;
 
@@ -71,11 +71,11 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 	private static final int IDX_EDIT= 2;
 	private static final int IDX_REMOVE= 4;
 
-	private final ArrayList fExistingEntries;
+	private final ArrayList<CPListElement> fExistingEntries;
 
 	private final IPath fOutputLocation;
 
-	public SetFilterWizardPage(CPListElement entryToEdit, ArrayList existingEntries, IPath outputLocation) {
+	public SetFilterWizardPage(CPListElement entryToEdit, ArrayList<CPListElement> existingEntries, IPath outputLocation) {
 		super(PAGE_NAME);
 		fExistingEntries= existingEntries;
 		fOutputLocation= outputLocation;
@@ -143,6 +143,17 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(inner, IJavaHelpContextIds.INCLUSION_EXCLUSION_WIZARD_PAGE);
 	}
 
+	/*
+	 * @see org.eclipse.jdt.ui.wizards.NewElementWizardPage#setVisible(boolean)
+	 * @since 3.7
+	 */
+	@Override
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible) {
+			fInclusionPatternList.setFocus();
+		}
+	}
 
 	private static class ExclusionInclusionLabelProvider extends LabelProvider {
 
@@ -153,27 +164,29 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 			fElementImage= registry.get(descriptor);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			return fElementImage;
 		}
 
+		@Override
 		public String getText(Object element) {
 			return BasicElementLabels.getFilePattern((String) element);
 		}
 
 	}
 
-	private ListDialogField createListContents(CPListElement entryToEdit, String key, String label, ImageDescriptor descriptor, String[] buttonLabels) {
+	private ListDialogField<String> createListContents(CPListElement entryToEdit, String key, String label, ImageDescriptor descriptor, String[] buttonLabels) {
 		ExclusionPatternAdapter adapter= new ExclusionPatternAdapter();
 
-		ListDialogField patternList= new ListDialogField(adapter, buttonLabels, new ExclusionInclusionLabelProvider(descriptor));
+		ListDialogField<String> patternList= new ListDialogField<String>(adapter, buttonLabels, new ExclusionInclusionLabelProvider(descriptor));
 		patternList.setDialogFieldListener(adapter);
 		patternList.setLabelText(label);
 		patternList.enableButton(IDX_EDIT, false);
 
 		IPath[] pattern= (IPath[]) entryToEdit.getAttribute(key);
 
-		ArrayList elements= new ArrayList(pattern.length);
+		ArrayList<String> elements= new ArrayList<String>(pattern.length);
 		for (int i= 0; i < pattern.length; i++) {
 			String patternName= pattern[i].toString();
 			if (patternName.length() > 0)
@@ -186,7 +199,7 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 		return patternList;
 	}
 
-	protected void doCustomButtonPressed(ListDialogField field, int index) {
+	protected void doCustomButtonPressed(ListDialogField<String> field, int index) {
 		if (index == IDX_ADD) {
 			addEntry(field);
 		} else if (index == IDX_EDIT) {
@@ -214,40 +227,40 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 		}
 	}
 
-	protected void doDoubleClicked(ListDialogField field) {
+	protected void doDoubleClicked(ListDialogField<String> field) {
 		editEntry(field);
 		updateStatus();
 	}
 
-	protected void doSelectionChanged(ListDialogField field) {
-		List selected= field.getSelectedElements();
+	protected void doSelectionChanged(ListDialogField<String> field) {
+		List<String> selected= field.getSelectedElements();
 		field.enableButton(IDX_EDIT, canEdit(selected));
 	}
 
-	private boolean canEdit(List selected) {
+	private boolean canEdit(List<String> selected) {
 		return selected.size() == 1;
 	}
 
-	private void editEntry(ListDialogField field) {
-		List selElements= field.getSelectedElements();
+	private void editEntry(ListDialogField<String> field) {
+		List<String> selElements= field.getSelectedElements();
 		if (selElements.size() != 1) {
 			return;
 		}
-		List existing= field.getElements();
-		String entry= (String) selElements.get(0);
+		List<String> existing= field.getElements();
+		String entry= selElements.get(0);
 		ExclusionInclusionEntryDialog dialog= new ExclusionInclusionEntryDialog(getShell(), isExclusion(field), entry, existing, fCurrElement);
 		if (dialog.open() == Window.OK) {
 			field.replaceElement(entry, dialog.getExclusionPattern());
 		}
 	}
 
-	private boolean isExclusion(ListDialogField field) {
+	private boolean isExclusion(ListDialogField<String> field) {
 		return field == fExclusionPatternList;
 	}
 
 
-	private void addEntry(ListDialogField field) {
-		List existing= field.getElements();
+	private void addEntry(ListDialogField<String> field) {
+		List<String> existing= field.getElements();
 		ExclusionInclusionEntryDialog dialog= new ExclusionInclusionEntryDialog(getShell(), isExclusion(field), null, existing, fCurrElement);
 		if (dialog.open() == Window.OK) {
 			field.addElement(dialog.getExclusionPattern());
@@ -256,24 +269,24 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 
 	// -------- ExclusionPatternAdapter --------
 
-	private class ExclusionPatternAdapter implements IListAdapter, IDialogFieldListener {
+	private class ExclusionPatternAdapter implements IListAdapter<String>, IDialogFieldListener {
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#customButtonPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField, int)
 		 */
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<String> field, int index) {
 			doCustomButtonPressed(field, index);
 		}
 
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#selectionChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<String> field) {
 			doSelectionChanged(field);
 		}
 		/**
 		 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#doubleClicked(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
 		 */
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<String> field) {
 			doDoubleClicked(field);
 		}
 
@@ -292,7 +305,7 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 	}
 
 
-	private IPath[] getPattern(ListDialogField field) {
+	private IPath[] getPattern(ListDialogField<String> field) {
 		Object[] arr= field.getElements().toArray();
 		Arrays.sort(arr);
 		IPath[] res= new IPath[arr.length];
@@ -317,7 +330,7 @@ public class SetFilterWizardPage extends NewElementWizardPage {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.EXCLUSION_PATTERN_DIALOG);
 	}
 
-	private void addMultipleEntries(ListDialogField field) {
+	private void addMultipleEntries(ListDialogField<String> field) {
 		String title, message;
 		if (isExclusion(field)) {
 			title= NewWizardMessages.ExclusionInclusionDialog_ChooseExclusionPattern_title;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
index d439cc0..fc4b2e4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -509,7 +509,7 @@ public class SourceAttachmentBlock {
 	private IPath chooseInternal() {
 		String initSelection= fFileNameField.getText();
 
-		ViewerFilter filter= new ArchiveFileFilter((List) null, false, false);
+		ViewerFilter filter= new ArchiveFileFilter((List<IResource>) null, false, false);
 
 		ILabelProvider lp= new WorkbenchLabelProvider();
 		ITreeContentProvider cp= new WorkbenchContentProvider();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java
index ec30eb1..634b258 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class SourceAttachmentDialog extends StatusDialog {
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 * @since 3.4
 	 */
+	@Override
 	protected boolean isResizable() {
 		return true;
 	}
@@ -67,6 +68,7 @@ public class SourceAttachmentDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.SOURCE_ATTACHMENT_DIALOG);
@@ -75,6 +77,7 @@ public class SourceAttachmentDialog extends StatusDialog {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
index 24a7a6b..8e9f239 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	private class OpenBuildPathWizardAction extends AbstractOpenWizardAction implements IPropertyChangeListener {
 
 		private final BuildPathWizard fWizard;
-		private final List fSelectedElements;
+		private final List<Object> fSelectedElements;
 
 		public OpenBuildPathWizardAction(BuildPathWizard wizard) {
 			fWizard= wizard;
@@ -73,12 +73,22 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected INewWizard createWizard() throws CoreException {
 			return fWizard;
 		}
 
 		/**
 		 * {@inheritDoc}
+		 * @since 3.7
+		 */
+		@Override
+		protected Shell getShell() {
+			return SourceContainerWorkbookPage.this.getShell();
+		}
+		
+		/**
+		 * {@inheritDoc}
 		 */
 		public void propertyChange(PropertyChangeEvent event) {
 			if (event.getProperty().equals(IAction.RESULT)) {
@@ -91,7 +101,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		}
 
 		protected void finishWizard() {
-			List insertedElements= fWizard.getInsertedElements();
+			List<CPListElement> insertedElements= fWizard.getInsertedElements();
 			refresh(insertedElements, fWizard.getRemovedElements(), fWizard.getModifiedElements(), fWizard.getOutputLocation());
 
 			if (insertedElements.isEmpty()) {
@@ -101,32 +111,32 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 
 	}
 
-	private static AddSourceFolderWizard newSourceFolderWizard(CPListElement element, List/*<CPListElement>*/ existingElements, String outputLocation, boolean newFolder) {
-		CPListElement[] existing= (CPListElement[])existingElements.toArray(new CPListElement[existingElements.size()]);
+	private static AddSourceFolderWizard newSourceFolderWizard(CPListElement element, List<CPListElement> existingElements, String outputLocation, boolean newFolder) {
+		CPListElement[] existing= existingElements.toArray(new CPListElement[existingElements.size()]);
 		AddSourceFolderWizard wizard= new AddSourceFolderWizard(existing, element, new Path(outputLocation).makeAbsolute(), false, newFolder, newFolder, newFolder?CPListElement.isProjectSourceFolder(existing, element.getJavaProject()):false, newFolder);
 		wizard.setDoFlushChange(false);
 		return wizard;
 	}
 
-	private static AddSourceFolderWizard newLinkedSourceFolderWizard(CPListElement element, List/*<CPListElement>*/ existingElements, String outputLocation, boolean newFolder) {
-		CPListElement[] existing= (CPListElement[])existingElements.toArray(new CPListElement[existingElements.size()]);
+	private static AddSourceFolderWizard newLinkedSourceFolderWizard(CPListElement element, List<CPListElement> existingElements, String outputLocation, boolean newFolder) {
+		CPListElement[] existing= existingElements.toArray(new CPListElement[existingElements.size()]);
 		AddSourceFolderWizard wizard= new AddSourceFolderWizard(existing, element, new Path(outputLocation).makeAbsolute(), true, newFolder, newFolder, newFolder?CPListElement.isProjectSourceFolder(existing, element.getJavaProject()):false, newFolder);
 		wizard.setDoFlushChange(false);
 		return wizard;
 	}
 
-	private static EditFilterWizard newEditFilterWizard(CPListElement element, List/*<CPListElement>*/ existingElements, String outputLocation) {
-		CPListElement[] existing= (CPListElement[])existingElements.toArray(new CPListElement[existingElements.size()]);
+	private static EditFilterWizard newEditFilterWizard(CPListElement element, List<CPListElement> existingElements, String outputLocation) {
+		CPListElement[] existing= existingElements.toArray(new CPListElement[existingElements.size()]);
 		EditFilterWizard result = new EditFilterWizard(existing, element, new Path(outputLocation).makeAbsolute());
 		result.setDoFlushChange(false);
 		return result;
 	}
 
-	private final ListDialogField fClassPathList;
+	private final ListDialogField<CPListElement> fClassPathList;
 	private IJavaProject fCurrJProject;
 
 	private Control fSWTControl;
-	private final TreeListDialogField fFoldersList;
+	private final TreeListDialogField<CPListElement> fFoldersList;
 
 	private final StringDialogField fOutputLocationField;
 
@@ -137,7 +147,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	private final int IDX_EDIT= 3;
 	private final int IDX_REMOVE= 4;
 
-	public SourceContainerWorkbookPage(ListDialogField classPathList, StringDialogField outputLocationField) {
+	public SourceContainerWorkbookPage(ListDialogField<CPListElement> classPathList, StringDialogField outputLocationField) {
 		fClassPathList= classPathList;
 
 		fOutputLocationField= outputLocationField;
@@ -156,7 +166,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 			NewWizardMessages.SourceContainerWorkbookPage_folders_remove_button
 		};
 
-		fFoldersList= new TreeListDialogField(adapter, buttonLabels, new CPListLabelProvider());
+		fFoldersList= new TreeListDialogField<CPListElement>(adapter, buttonLabels, new CPListLabelProvider());
 		fFoldersList.setDialogFieldListener(adapter);
 		fFoldersList.setLabelText(NewWizardMessages.SourceContainerWorkbookPage_folders_label);
 
@@ -169,6 +179,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		fUseFolderOutputs.setDialogFieldListener(adapter);
 	}
 
+	@Override
 	public void init(IJavaProject jproject) {
 		fCurrJProject= jproject;
 		if (Display.getCurrent() != null) {
@@ -187,12 +198,12 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 			return;
 		}
 
-		ArrayList folders= new ArrayList();
+		ArrayList<CPListElement> folders= new ArrayList<CPListElement>();
 
 		boolean useFolderOutputs= false;
-		List cpelements= fClassPathList.getElements();
+		List<CPListElement> cpelements= fClassPathList.getElements();
 		for (int i= 0; i < cpelements.size(); i++) {
-			CPListElement cpe= (CPListElement)cpelements.get(i);
+			CPListElement cpe= cpelements.get(i);
 			if (cpe.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 				folders.add(cpe);
 				boolean hasOutputFolder= (cpe.getAttribute(CPListElement.OUTPUT) != null);
@@ -206,7 +217,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		fUseFolderOutputs.setSelection(useFolderOutputs);
 
 		for (int i= 0; i < folders.size(); i++) {
-			CPListElement cpe= (CPListElement) folders.get(i);
+			CPListElement cpe= folders.get(i);
 			IPath[] ePatterns= (IPath[]) cpe.getAttribute(CPListElement.EXCLUSION);
 			IPath[] iPatterns= (IPath[])cpe.getAttribute(CPListElement.INCLUSION);
 			boolean hasOutputFolder= (cpe.getAttribute(CPListElement.OUTPUT) != null);
@@ -216,6 +227,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		}
 	}
 
+	@Override
 	public Control getControl(Composite parent) {
 		PixelConverter converter= new PixelConverter(parent);
 		Composite composite= new Composite(parent, SWT.NONE);
@@ -229,9 +241,9 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		fSWTControl= composite;
 
 		// expand
-		List elements= fFoldersList.getElements();
+		List<CPListElement> elements= fFoldersList.getElements();
 		for (int i= 0; i < elements.size(); i++) {
-			CPListElement elem= (CPListElement) elements.get(i);
+			CPListElement elem= elements.get(i);
 			IPath[] exclusionPatterns= (IPath[]) elem.getAttribute(CPListElement.EXCLUSION);
 			IPath[] inclusionPatterns= (IPath[]) elem.getAttribute(CPListElement.INCLUSION);
 			IPath output= (IPath) elem.getAttribute(CPListElement.OUTPUT);
@@ -250,42 +262,42 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	}
 
 
-	private class SourceContainerAdapter implements ITreeListAdapter, IDialogFieldListener {
+	private class SourceContainerAdapter implements ITreeListAdapter<CPListElement>, IDialogFieldListener {
 
 		private final Object[] EMPTY_ARR= new Object[0];
 
 		// -------- IListAdapter --------
-		public void customButtonPressed(TreeListDialogField field, int index) {
+		public void customButtonPressed(TreeListDialogField<CPListElement> field, int index) {
 			sourcePageCustomButtonPressed(field, index);
 		}
 
-		public void selectionChanged(TreeListDialogField field) {
+		public void selectionChanged(TreeListDialogField<CPListElement> field) {
 			sourcePageSelectionChanged(field);
 		}
 
-		public void doubleClicked(TreeListDialogField field) {
+		public void doubleClicked(TreeListDialogField<CPListElement> field) {
 			sourcePageDoubleClicked(field);
 		}
 
-		public void keyPressed(TreeListDialogField field, KeyEvent event) {
+		public void keyPressed(TreeListDialogField<CPListElement> field, KeyEvent event) {
 			sourcePageKeyPressed(field, event);
 		}
 
-		public Object[] getChildren(TreeListDialogField field, Object element) {
+		public Object[] getChildren(TreeListDialogField<CPListElement> field, Object element) {
 			if (element instanceof CPListElement) {
 				return ((CPListElement) element).getChildren(!fUseFolderOutputs.isSelected());
 			}
 			return EMPTY_ARR;
 		}
 
-		public Object getParent(TreeListDialogField field, Object element) {
+		public Object getParent(TreeListDialogField<CPListElement> field, Object element) {
 			if (element instanceof CPListElementAttribute) {
 				return ((CPListElementAttribute) element).getParent();
 			}
 			return null;
 		}
 
-		public boolean hasChildren(TreeListDialogField field, Object element) {
+		public boolean hasChildren(TreeListDialogField<CPListElement> field, Object element) {
 			return (element instanceof CPListElement);
 		}
 
@@ -296,10 +308,10 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 
 	}
 
-	protected void sourcePageKeyPressed(TreeListDialogField field, KeyEvent event) {
+	protected void sourcePageKeyPressed(TreeListDialogField<CPListElement> field, KeyEvent event) {
 		if (field == fFoldersList) {
 			if (event.character == SWT.DEL && event.stateMask == 0) {
-				List selection= field.getSelectedElements();
+				List<Object> selection= field.getSelectedElements();
 				if (canRemove(selection)) {
 					removeEntry();
 				}
@@ -307,9 +319,9 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		}
 	}
 
-	protected void sourcePageDoubleClicked(TreeListDialogField field) {
+	protected void sourcePageDoubleClicked(TreeListDialogField<CPListElement> field) {
 		if (field == fFoldersList) {
-			List selection= field.getSelectedElements();
+			List<Object> selection= field.getSelectedElements();
 			if (canEdit(selection)) {
 				editEntry();
 			}
@@ -321,8 +333,8 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 			if (index == IDX_ADD) {
 				IProject project= fCurrJProject.getProject();
 				if (project.isAccessible() && hasFolders(project)) {
-					List existingElements= fFoldersList.getElements();
-					CPListElement[] existing= (CPListElement[])existingElements.toArray(new CPListElement[existingElements.size()]);
+					List<CPListElement> existingElements= fFoldersList.getElements();
+					CPListElement[] existing= existingElements.toArray(new CPListElement[existingElements.size()]);
 					CreateMultipleSourceFoldersDialog dialog= new CreateMultipleSourceFoldersDialog(fCurrJProject, existing, fOutputLocationField.getText(), getShell());
 					if (dialog.open() == Window.OK) {
 						refresh(dialog.getInsertedElements(), dialog.getRemovedElements(), dialog.getModifiedElements(), dialog.getOutputLocation());
@@ -359,14 +371,14 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 			// ignore
 		}
 
-		List elements= fFoldersList.getElements();
+		List<CPListElement> elements= fFoldersList.getElements();
 		if (elements.size() > 1)
 			return true;
 
 		if (elements.size() == 0)
 			return false;
 
-		CPListElement single= (CPListElement)elements.get(0);
+		CPListElement single= elements.get(0);
 		if (single.getPath().equals(fCurrJProject.getPath()))
 			return false;
 
@@ -374,7 +386,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void editEntry() {
-		List selElements= fFoldersList.getSelectedElements();
+		List<Object> selElements= fFoldersList.getSelectedElements();
 		if (selElements.size() != 1) {
 			return;
 		}
@@ -424,7 +436,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	 * @param field the dialog field
 	 */
 	protected void sourcePageSelectionChanged(DialogField field) {
-		List selected= fFoldersList.getSelectedElements();
+		List<Object> selected= fFoldersList.getSelectedElements();
 		fFoldersList.enableButton(IDX_EDIT, canEdit(selected));
 		fFoldersList.enableButton(IDX_REMOVE, canRemove(selected));
 		boolean noAttributes= containsOnlyTopLevelEntries(selected);
@@ -432,7 +444,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	}
 
 	private void removeEntry() {
-		List selElements= fFoldersList.getSelectedElements();
+		List<Object> selElements= fFoldersList.getSelectedElements();
 		for (int i= selElements.size() - 1; i >= 0 ; i--) {
 			Object elem= selElements.get(i);
 			if (elem instanceof CPListElementAttribute) {
@@ -454,12 +466,12 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 			fFoldersList.refresh();
 			fClassPathList.dialogFieldChanged(); // validate
 		} else {
-			for (Iterator iter= selElements.iterator(); iter.hasNext();) {
+			for (Iterator<Object> iter= selElements.iterator(); iter.hasNext();) {
 				CPListElement element= (CPListElement)iter.next();
 				if (element.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
-					List list= ClasspathModifier.removeFilters(element.getPath(), fCurrJProject, fFoldersList.getElements());
-					for (Iterator iterator= list.iterator(); iterator.hasNext();) {
-						CPListElement modified= (CPListElement)iterator.next();
+					List<CPListElement> list= ClasspathModifier.removeFilters(element.getPath(), fCurrJProject, fFoldersList.getElements());
+					for (Iterator<CPListElement> iterator= list.iterator(); iterator.hasNext();) {
+						CPListElement modified= iterator.next();
 						fFoldersList.refresh(modified);
 						fFoldersList.expandElement(modified, 3);
 					}
@@ -469,7 +481,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		}
 	}
 
-	private boolean canRemove(List selElements) {
+	private boolean canRemove(List<Object> selElements) {
 		if (selElements.size() == 0) {
 			return false;
 		}
@@ -505,7 +517,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 		return true;
 	}
 
-	private boolean canEdit(List selElements) {
+	private boolean canEdit(List<Object> selElements) {
 		if (selElements.size() != 1) {
 			return false;
 		}
@@ -538,7 +550,7 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 			if (!fUseFolderOutputs.isSelected()) {
 				int nFolders= fFoldersList.getSize();
 				for (int i= 0; i < nFolders; i++) {
-					CPListElement cpe= (CPListElement) fFoldersList.getElement(i);
+					CPListElement cpe= fFoldersList.getElement(i);
 					cpe.setAttribute(CPListElement.OUTPUT, null);
 				}
 			}
@@ -550,15 +562,15 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 
 
 	private void updateClasspathList() {
-		List srcelements= fFoldersList.getElements();
+		List<CPListElement> srcelements= fFoldersList.getElements();
 
-		List cpelements= fClassPathList.getElements();
+		List<CPListElement> cpelements= fClassPathList.getElements();
 		int nEntries= cpelements.size();
 		// backwards, as entries will be deleted
 		int lastRemovePos= nEntries;
 		int afterLastSourcePos= 0;
 		for (int i= nEntries - 1; i >= 0; i--) {
-			CPListElement cpe= (CPListElement)cpelements.get(i);
+			CPListElement cpe= cpelements.get(i);
 			int kind= cpe.getEntryKind();
 			if (isEntryKind(kind)) {
 				if (!srcelements.remove(cpe)) {
@@ -583,14 +595,16 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	/*
 	 * @see BuildPathBasePage#getSelection
 	 */
-	public List getSelection() {
+	@Override
+	public List<Object> getSelection() {
 		return fFoldersList.getSelectedElements();
 	}
 
 	/*
 	 * @see BuildPathBasePage#setSelection
 	 */
-	public void setSelection(List selElements, boolean expand) {
+	@Override
+	public void setSelection(List<?> selElements, boolean expand) {
 		fFoldersList.selectElements(new StructuredSelection(selElements));
 		if (expand) {
 			for (int i= 0; i < selElements.size(); i++) {
@@ -602,21 +616,22 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#isEntryKind(int)
 	 */
+	@Override
 	public boolean isEntryKind(int kind) {
 		return kind == IClasspathEntry.CPE_SOURCE;
 	}
 
-	private void refresh(List insertedElements, List removedElements, List modifiedElements, IPath outputLocation) {
+	private void refresh(List<CPListElement> insertedElements, List<?> removedElements, List<CPListElement> modifiedElements, IPath outputLocation) {
 		fFoldersList.addElements(insertedElements);
-		for (Iterator iter= insertedElements.iterator(); iter.hasNext();) {
-			CPListElement element= (CPListElement)iter.next();
+		for (Iterator<CPListElement> iter= insertedElements.iterator(); iter.hasNext();) {
+			CPListElement element= iter.next();
 			fFoldersList.expandElement(element, 3);
 		}
 
 		fFoldersList.removeElements(removedElements);
 
-		for (Iterator iter= modifiedElements.iterator(); iter.hasNext();) {
-			CPListElement element= (CPListElement)iter.next();
+		for (Iterator<CPListElement> iter= modifiedElements.iterator(); iter.hasNext();) {
+			CPListElement element= iter.next();
 			fFoldersList.refresh(element);
 			fFoldersList.expandElement(element, 3);
 		}
@@ -632,7 +647,8 @@ public class SourceContainerWorkbookPage extends BuildPathBasePage {
 	/**
      * {@inheritDoc}
      */
-    public void setFocus() {
+    @Override
+	public void setFocus() {
     	fFoldersList.setFocus();
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryMarkerResolutionGenerator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryMarkerResolutionGenerator.java
index d4bfbc7..c7f88e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryMarkerResolutionGenerator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryMarkerResolutionGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.wizards.buildpaths;
 
-
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -30,7 +29,6 @@ import org.eclipse.jface.operation.IRunnableWithProgress;
 
 import org.eclipse.ui.IMarkerResolution;
 import org.eclipse.ui.IMarkerResolution2;
-import org.eclipse.ui.IMarkerResolutionGenerator;
 import org.eclipse.ui.IMarkerResolutionGenerator2;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.PreferencesUtil;
@@ -56,7 +54,8 @@ import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
 
-public class UserLibraryMarkerResolutionGenerator implements IMarkerResolutionGenerator, IMarkerResolutionGenerator2 {
+
+public class UserLibraryMarkerResolutionGenerator implements IMarkerResolutionGenerator2 {
 
 	private final static IMarkerResolution[] NO_RESOLUTION = new IMarkerResolution[0];
 
@@ -84,7 +83,7 @@ public class UserLibraryMarkerResolutionGenerator implements IMarkerResolutionGe
 			return NO_RESOLUTION;
 		}
 
-		ArrayList resolutions= new ArrayList();
+		ArrayList<IMarkerResolution2> resolutions= new ArrayList<IMarkerResolution2>();
 
 		final IJavaProject project= getJavaProject(marker);
 
@@ -124,7 +123,7 @@ public class UserLibraryMarkerResolutionGenerator implements IMarkerResolutionGe
 			resolutions.add(new OpenBuildPathMarkerResolution(project));
 		}
 
-		return (IMarkerResolution[]) resolutions.toArray(new IMarkerResolution[resolutions.size()]);
+		return resolutions.toArray(new IMarkerResolution[resolutions.size()]);
 	}
 
 	protected void changeToExistingLibrary(Shell shell, IPath path, boolean isNew, final IJavaProject project) {
@@ -191,7 +190,7 @@ public class UserLibraryMarkerResolutionGenerator implements IMarkerResolutionGe
 	protected void createUserLibrary(final Shell shell, IPath unboundPath) {
 		String name= unboundPath.segment(1);
 		String id= UserLibraryPreferencePage.ID;
-		HashMap data= new HashMap(3);
+		HashMap<String, Object> data= new HashMap<String, Object>(3);
 		data.put(UserLibraryPreferencePage.DATA_LIBRARY_TO_SELECT, name);
 		data.put(UserLibraryPreferencePage.DATA_DO_CREATE, Boolean.TRUE);
 		PreferencesUtil.createPreferenceDialogOn(shell, id, new String[] { id }, data).open();
@@ -204,7 +203,7 @@ public class UserLibraryMarkerResolutionGenerator implements IMarkerResolutionGe
 	/**
 	 * Library quick fix base class
 	 */
-	private static abstract class UserLibraryMarkerResolution implements IMarkerResolution, IMarkerResolution2 {
+	private static abstract class UserLibraryMarkerResolution implements IMarkerResolution2 {
 
 		private final String fLabel;
 		private final Image fImage;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java
index d4baaaa..db75e35 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Konstantin Komissarchik <konstantin.komissarchik at oracle.com> - [build path] editing user library properties drops classpath entry attributes - http://bugs.eclipse.org/311603
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.wizards.buildpaths;
 
@@ -63,30 +64,30 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
  */
 public class UserLibraryWizardPage extends NewElementWizardPage implements IClasspathContainerPage, IClasspathContainerPageExtension, IClasspathContainerPageExtension2  {
 
-	private CheckedListDialogField fLibrarySelector;
+	private CheckedListDialogField<CPUserLibraryElement> fLibrarySelector;
 	private CPUserLibraryElement fEditResult;
-	private Set fUsedPaths;
+	private Set<IPath> fUsedPaths;
 	private boolean fIsEditMode;
 	private IJavaProject fProject;
-	private boolean fIsExported;
+	private IClasspathEntry fOldClasspathEntry;
 
 	public UserLibraryWizardPage() {
 		super("UserLibraryWizardPage"); //$NON-NLS-1$
 		setTitle(NewWizardMessages.UserLibraryWizardPage_title);
 		setImageDescriptor(JavaPluginImages.DESC_WIZBAN_ADD_LIBRARY);
 		updateDescription(null);
-		fUsedPaths= new HashSet();
+		fUsedPaths= new HashSet<IPath>();
 		fProject= createPlaceholderProject();
 
 		LibraryListAdapter adapter= new LibraryListAdapter();
 		String[] buttonLabels= new String[] {
 				NewWizardMessages.UserLibraryWizardPage_list_config_button
 		};
-		fLibrarySelector= new CheckedListDialogField(adapter, buttonLabels, new CPListLabelProvider());
+		fLibrarySelector= new CheckedListDialogField<CPUserLibraryElement>(adapter, buttonLabels, new CPListLabelProvider());
 		fLibrarySelector.setDialogFieldListener(adapter);
 		fLibrarySelector.setLabelText(NewWizardMessages.UserLibraryWizardPage_list_label);
 		fEditResult= null;
-		updateStatus(validateSetting(Collections.EMPTY_LIST));
+		updateStatus(validateSetting(Collections.<CPUserLibraryElement>emptyList()));
 	}
 
     private static IJavaProject createPlaceholderProject() {
@@ -109,24 +110,24 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 		}
 	}
 
-	private List updateLibraryList() {
-		HashSet oldNames= new HashSet();
-		HashSet oldCheckedNames= new HashSet();
-		List oldElements= fLibrarySelector.getElements();
+	private List<CPUserLibraryElement> updateLibraryList() {
+		HashSet<String> oldNames= new HashSet<String>();
+		HashSet<String> oldCheckedNames= new HashSet<String>();
+		List<CPUserLibraryElement> oldElements= fLibrarySelector.getElements();
 		for (int i= 0; i < oldElements.size(); i++) {
-			CPUserLibraryElement curr= (CPUserLibraryElement) oldElements.get(i);
+			CPUserLibraryElement curr= oldElements.get(i);
 			oldNames.add(curr.getName());
 			if (fLibrarySelector.isChecked(curr)) {
 				oldCheckedNames.add(curr.getName());
 			}
 		}
 
-		ArrayList entriesToCheck= new ArrayList();
+		ArrayList<CPUserLibraryElement> entriesToCheck= new ArrayList<CPUserLibraryElement>();
 
 		String[] names= JavaCore.getUserLibraryNames();
 		Arrays.sort(names, Collator.getInstance());
 
-		ArrayList elements= new ArrayList(names.length);
+		ArrayList<CPUserLibraryElement> elements= new ArrayList<CPUserLibraryElement>(names.length);
 		for (int i= 0; i < names.length; i++) {
 			String curr= names[i];
 			IPath path= new Path(JavaCore.USER_LIBRARY_CONTAINER_ID).append(curr);
@@ -154,25 +155,25 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 
 	private void doDialogFieldChanged(DialogField field) {
 		if (field == fLibrarySelector) {
-			List list= fLibrarySelector.getCheckedElements();
+			List<CPUserLibraryElement> list= fLibrarySelector.getCheckedElements();
 			if (fIsEditMode) {
 				if (list.size() > 1) {
 					if (fEditResult != null && list.remove(fEditResult)) {
 						fLibrarySelector.setCheckedWithoutUpdate(fEditResult, false);
 					}
-					fEditResult= (CPUserLibraryElement) list.get(0); // take the first
+					fEditResult= list.get(0); // take the first
 					for (int i= 1; i < list.size(); i++) { // uncheck the rest
 						fLibrarySelector.setCheckedWithoutUpdate(list.get(i), false);
 					}
 				} else if (list.size() == 1) {
-					fEditResult= (CPUserLibraryElement) list.get(0);
+					fEditResult= list.get(0);
 				}
 			}
 			updateStatus(validateSetting(list));
 		}
 	}
 
-	private IStatus validateSetting(List selected) {
+	private IStatus validateSetting(List<CPUserLibraryElement> selected) {
 		int nSelected= selected.size();
 		if (nSelected == 0) {
 			return new StatusInfo(IStatus.ERROR, NewWizardMessages.UserLibraryWizardPage_error_selectentry);
@@ -180,7 +181,7 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 			return new StatusInfo(IStatus.ERROR, NewWizardMessages.UserLibraryWizardPage_error_selectonlyone);
 		}
 		for (int i= 0; i < selected.size(); i++) {
-			CPUserLibraryElement curr= (CPUserLibraryElement) selected.get(i);
+			CPUserLibraryElement curr= selected.get(i);
 			if (fUsedPaths.contains(curr.getPath())) {
 				return new StatusInfo(IStatus.ERROR, NewWizardMessages.UserLibraryWizardPage_error_alreadyoncp);
 			}
@@ -190,14 +191,14 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 
 	private void doButtonPressed(int index) {
 		if (index == 0) {
-			HashMap data= new HashMap(3);
+			HashMap<String, String> data= new HashMap<String, String>(3);
 			if (fEditResult != null) {
 				data.put(UserLibraryPreferencePage.DATA_LIBRARY_TO_SELECT, fEditResult.getName());
 			}
 			String id= UserLibraryPreferencePage.ID;
 			PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, data).open();
 
-			List newEntries= updateLibraryList();
+			List<CPUserLibraryElement> newEntries= updateLibraryList();
 			if (newEntries.size() > 0) {
 				if (fIsEditMode) {
 					fLibrarySelector.setChecked(newEntries.get(0), true);
@@ -210,11 +211,11 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 		}
 	}
 
-	private void doDoubleClicked(ListDialogField field) {
+	private void doDoubleClicked(ListDialogField<CPUserLibraryElement> field) {
 		if (field == fLibrarySelector) {
-			List list= fLibrarySelector.getSelectedElements();
+			List<CPUserLibraryElement> list= fLibrarySelector.getSelectedElements();
 			if (list.size() == 1) {
-				Object elem= list.get(0);
+				CPUserLibraryElement elem= list.get(0);
 				boolean state= fLibrarySelector.isChecked(elem);
 				if (!state || !fIsEditMode) {
 					fLibrarySelector.setChecked(elem, !state);
@@ -236,6 +237,18 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 		setControl(composite);
 	}
 
+	/*
+	 * @see org.eclipse.jdt.ui.wizards.NewElementWizardPage#setVisible(boolean)
+	 * @since 3.7
+	 */
+	@Override
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible) {
+			fLibrarySelector.setFocus();
+		}
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#finish()
 	 */
@@ -248,7 +261,11 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 	 */
 	public IClasspathEntry getSelection() {
 		if (fEditResult != null) {
-			return JavaCore.newContainerEntry(fEditResult.getPath(), fIsExported);
+			if (fOldClasspathEntry != null && fOldClasspathEntry.getPath().equals(fEditResult.getPath())) {
+				return JavaCore.newContainerEntry(fEditResult.getPath(), fOldClasspathEntry.getAccessRules(), fOldClasspathEntry.getExtraAttributes(), fOldClasspathEntry.isExported());
+			} else {
+				return JavaCore.newContainerEntry(fEditResult.getPath(), false);
+			}
 		}
 		return null;
 	}
@@ -257,11 +274,11 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension2#getNewContainers()
 	 */
 	public IClasspathEntry[] getNewContainers() {
-		List selected= fLibrarySelector.getCheckedElements();
+		List<CPUserLibraryElement> selected= fLibrarySelector.getCheckedElements();
 		IClasspathEntry[] res= new IClasspathEntry[selected.size()];
 		for (int i= 0; i < res.length; i++) {
-			CPUserLibraryElement curr= (CPUserLibraryElement) selected.get(i);
-			res[i]= JavaCore.newContainerEntry(curr.getPath(), fIsExported);
+			CPUserLibraryElement curr= selected.get(i);
+			res[i]= JavaCore.newContainerEntry(curr.getPath(), false);
 		}
 		return res;
 	}
@@ -270,7 +287,7 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 	 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#setSelection(org.eclipse.jdt.core.IClasspathEntry)
 	 */
 	public void setSelection(IClasspathEntry containerEntry) {
-		fIsExported= containerEntry != null && containerEntry.isExported();
+		fOldClasspathEntry= containerEntry;
 
 		updateDescription(containerEntry);
 		fIsEditMode= (containerEntry != null);
@@ -286,9 +303,9 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 		}
 		updateLibraryList();
 		if (selected != null) {
-			List elements= fLibrarySelector.getElements();
+			List<CPUserLibraryElement> elements= fLibrarySelector.getElements();
 			for (int i= 0; i < elements.size(); i++) {
-				CPUserLibraryElement curr= (CPUserLibraryElement) elements.get(i);
+				CPUserLibraryElement curr= elements.get(i);
 				if (curr.getName().equals(selected)) {
 					fLibrarySelector.setChecked(curr, true);
 					return;
@@ -297,7 +314,7 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 		}
 	}
 
-	private class LibraryListAdapter implements IListAdapter, IDialogFieldListener {
+	private class LibraryListAdapter implements IListAdapter<CPUserLibraryElement>, IDialogFieldListener {
 
 		public LibraryListAdapter() {
 		}
@@ -306,14 +323,14 @@ public class UserLibraryWizardPage extends NewElementWizardPage implements IClas
 			doDialogFieldChanged(field);
 		}
 
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<CPUserLibraryElement> field, int index) {
 			doButtonPressed(index);
 		}
 
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<CPUserLibraryElement> field) {
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<CPUserLibraryElement> field) {
 			doDoubleClicked(field);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java
index c5c3030..a211fe2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,19 +66,19 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
 
 public class VariableBlock {
 
-	private final ListDialogField fVariablesList;
+	private final ListDialogField<CPVariableElement> fVariablesList;
 	private Control fControl;
 	private CLabel fWarning;
 	private boolean fHasChanges;
 
-	private List fSelectedElements;
+	private List<CPVariableElement> fSelectedElements;
 	private boolean fAskToBuild;
 	private final boolean fEditOnDoubleclick;
 
 
 	public VariableBlock(boolean inPreferencePage, String initSelection) {
 
-		fSelectedElements= new ArrayList(0);
+		fSelectedElements= new ArrayList<CPVariableElement>(0);
 		fEditOnDoubleclick= inPreferencePage;
 		fAskToBuild= true;
 
@@ -92,7 +92,7 @@ public class VariableBlock {
 
 		CPVariableElementLabelProvider labelProvider= new CPVariableElementLabelProvider(inPreferencePage);
 
-		fVariablesList= new ListDialogField(adapter, buttonLabels, labelProvider);
+		fVariablesList= new ListDialogField<CPVariableElement>(adapter, buttonLabels, labelProvider);
 		fVariablesList.setDialogFieldListener(adapter);
 		fVariablesList.setLabelText(NewWizardMessages.VariableBlock_vars_label);
 		fVariablesList.setRemoveButtonIndex(2);
@@ -100,6 +100,7 @@ public class VariableBlock {
 		fVariablesList.enableButton(1, false);
 
 		fVariablesList.setViewerComparator(new ViewerComparator() {
+			@Override
 			public int compare(Viewer viewer, Object e1, Object e2) {
 				if (e1 instanceof CPVariableElement && e2 instanceof CPVariableElement) {
 					return getComparator().compare(((CPVariableElement)e1).getName(), ((CPVariableElement)e2).getName());
@@ -150,31 +151,31 @@ public class VariableBlock {
 		return JavaPlugin.getActiveWorkbenchShell();
 	}
 
-	private class VariablesAdapter implements IDialogFieldListener, IListAdapter {
+	private class VariablesAdapter implements IDialogFieldListener, IListAdapter<CPVariableElement> {
 
 		// -------- IListAdapter --------
 
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<CPVariableElement> field, int index) {
 			switch (index) {
 			case 0: /* add */
 				editEntries(null);
 				break;
 			case 1: /* edit */
-				List selected= field.getSelectedElements();
-				editEntries((CPVariableElement)selected.get(0));
+				List<CPVariableElement> selected= field.getSelectedElements();
+				editEntries(selected.get(0));
 				break;
 			}
 		}
 
-		public void selectionChanged(ListDialogField field) {
+		public void selectionChanged(ListDialogField<CPVariableElement> field) {
 			doSelectionChanged(field);
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<CPVariableElement> field) {
 			if (fEditOnDoubleclick) {
-				List selected= field.getSelectedElements();
+				List<CPVariableElement> selected= field.getSelectedElements();
 				if (canEdit(selected, containsReadOnly(selected))) {
-					editEntries((CPVariableElement) selected.get(0));
+					editEntries(selected.get(0));
 				}
 			}
 		}
@@ -186,16 +187,16 @@ public class VariableBlock {
 
 	}
 
-	private boolean containsReadOnly(List selected) {
+	private boolean containsReadOnly(List<CPVariableElement> selected) {
 		for (int i= selected.size()-1; i >= 0; i--) {
-			if (((CPVariableElement)selected.get(i)).isReadOnly()) {
+			if (selected.get(i).isReadOnly()) {
 				return true;
 			}
 		}
 		return false;
 	}
 
-	private boolean canEdit(List selected, boolean containsReadOnly) {
+	private boolean canEdit(List<CPVariableElement> selected, boolean containsReadOnly) {
 		return selected.size() == 1 && !containsReadOnly;
 	}
 
@@ -203,7 +204,7 @@ public class VariableBlock {
 	 * @param field the dialog field
 	 */
 	private void doSelectionChanged(DialogField field) {
-		List selected= fVariablesList.getSelectedElements();
+		List<CPVariableElement> selected= fVariablesList.getSelectedElements();
 		boolean containsReadOnly= containsReadOnly(selected);
 
 		// edit
@@ -219,8 +220,8 @@ public class VariableBlock {
 		if (fWarning == null || fWarning.isDisposed())
 			return;
 
-		for (Iterator iter= fSelectedElements.iterator(); iter.hasNext();) {
-			CPVariableElement element= (CPVariableElement) iter.next();
+		for (Iterator<CPVariableElement> iter= fSelectedElements.iterator(); iter.hasNext();) {
+			CPVariableElement element= iter.next();
 			String deprecationMessage= element.getDeprecationMessage();
 			if (deprecationMessage != null) {
 				fWarning.setText(deprecationMessage);
@@ -233,7 +234,7 @@ public class VariableBlock {
 	}
 
 	private void editEntries(CPVariableElement entry) {
-		List existingEntries= fVariablesList.getElements();
+		List<CPVariableElement> existingEntries= fVariablesList.getElements();
 
 		VariableCreationDialog dialog= new VariableCreationDialog(getShell(), entry, existingEntries);
 		if (dialog.open() != Window.OK) {
@@ -256,19 +257,19 @@ public class VariableBlock {
 		fVariablesList.selectElements(new StructuredSelection(entry));
 	}
 
-	public List getSelectedElements() {
+	public List<CPVariableElement> getSelectedElements() {
 		return fSelectedElements;
 	}
 
 	public boolean performOk() {
-		ArrayList removedVariables= new ArrayList();
-		ArrayList changedVariables= new ArrayList();
+		ArrayList<String> removedVariables= new ArrayList<String>();
+		ArrayList<String> changedVariables= new ArrayList<String>();
 		removedVariables.addAll(Arrays.asList(JavaCore.getClasspathVariableNames()));
 
 		// remove all unchanged
-		List changedElements= fVariablesList.getElements();
+		List<CPVariableElement> changedElements= fVariablesList.getElements();
 		for (int i= changedElements.size()-1; i >= 0; i--) {
-			CPVariableElement curr= (CPVariableElement) changedElements.get(i);
+			CPVariableElement curr= changedElements.get(i);
 			if (curr.isReadOnly()) {
 				changedElements.remove(curr);
 			} else {
@@ -316,7 +317,7 @@ public class VariableBlock {
 		return true;
 	}
 
-	private boolean doesChangeRequireFullBuild(List removed, List changed) {
+	private boolean doesChangeRequireFullBuild(List<String> removed, List<String> changed) {
 		try {
 			IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
 			IJavaProject[] projects= model.getJavaProjects();
@@ -339,10 +340,10 @@ public class VariableBlock {
 	}
 
 	private class VariableBlockRunnable implements IRunnableWithProgress {
-		private final List fToRemove;
-		private final List fToChange;
+		private final List<String> fToRemove;
+		private final List<CPVariableElement> fToChange;
 
-		public VariableBlockRunnable(List toRemove, List toChange) {
+		public VariableBlockRunnable(List<String> toRemove, List<CPVariableElement> toChange) {
 			fToRemove= toRemove;
 			fToChange= toChange;
 		}
@@ -372,13 +373,13 @@ public class VariableBlock {
 			int k= 0;
 
 			for (int i= 0; i < fToChange.size(); i++) {
-				CPVariableElement curr= (CPVariableElement) fToChange.get(i);
+				CPVariableElement curr= fToChange.get(i);
 				names[k]= curr.getName();
 				paths[k]= curr.getPath();
 				k++;
 			}
 			for (int i= 0; i < fToRemove.size(); i++) {
-				names[k]= (String) fToRemove.get(i);
+				names[k]= fToRemove.get(i);
 				paths[k]= null;
 				k++;
 			}
@@ -401,7 +402,7 @@ public class VariableBlock {
 		CPVariableElement initSelectedElement= null;
 
 		String[] entries= JavaCore.getClasspathVariableNames();
-		ArrayList elements= new ArrayList(entries.length);
+		ArrayList<CPVariableElement> elements= new ArrayList<CPVariableElement>(entries.length);
 		for (int i= 0; i < entries.length; i++) {
 			String name= entries[i];
 			CPVariableElement elem;
@@ -429,7 +430,7 @@ public class VariableBlock {
 
 	public void setSelection(String elementName) {
 		for (int i= 0; i < fVariablesList.getSize(); i++) {
-			CPVariableElement elem= (CPVariableElement) fVariablesList.getElement(i);
+			CPVariableElement elem= fVariablesList.getElement(i);
 			if (elem.getName().equals(elementName)) {
 				fVariablesList.selectElements(new StructuredSelection(elem));
 				return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableCreationDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableCreationDialog.java
index 125d351..18518ed 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableCreationDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableCreationDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,9 +56,9 @@ public class VariableCreationDialog extends StatusDialog {
 
 	private CPVariableElement fElement;
 
-	private List fExistingNames;
+	private List<CPVariableElement> fExistingNames;
 
-	public VariableCreationDialog(Shell parent, CPVariableElement element, List existingNames) {
+	public VariableCreationDialog(Shell parent, CPVariableElement element, List<CPVariableElement> existingNames) {
 		super(parent);
 		if (element == null) {
 			setTitle(NewWizardMessages.VariableCreationDialog_titlenew);
@@ -102,6 +102,7 @@ public class VariableCreationDialog extends StatusDialog {
 	/*
 	 * @see Windows#configureShell
 	 */
+	@Override
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.VARIABLE_CREATION_DIALOG);
@@ -115,6 +116,7 @@ public class VariableCreationDialog extends StatusDialog {
 	/*
 	 * @see Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -207,7 +209,7 @@ public class VariableCreationDialog extends StatusDialog {
 			return false;
 		}
 		for (int i= 0; i < fExistingNames.size(); i++) {
-			CPVariableElement elem= (CPVariableElement)fExistingNames.get(i);
+			CPVariableElement elem= fExistingNames.get(i);
 			if (name.equals(elem.getName())){
 				return true;
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariablePathDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariablePathDialogField.java
index 86dbb63..d4f6be7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariablePathDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariablePathDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public class VariablePathDialogField extends StringButtonDialogField {
 			fVariableBlock= new VariableBlock(false, variableSelection);
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite composite= (Composite) super.createDialogArea(parent);
 			Control control= fVariableBlock.createContents(composite);
@@ -74,18 +75,20 @@ public class VariablePathDialogField extends StringButtonDialogField {
 		 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 		 * @since 3.4
 		 */
+		@Override
 		protected boolean isResizable() {
 			return true;
 		}
 
+		@Override
 		protected void okPressed() {
 			fVariableBlock.performOk();
 			super.okPressed();
 		}
 
 		public String getSelectedVariable() {
-			List elements= fVariableBlock.getSelectedElements();
-			return ((CPVariableElement) elements.get(0)).getName();
+			List<CPVariableElement> elements= fVariableBlock.getSelectedElements();
+			return elements.get(0).getName();
 		}
 
 		/*
@@ -101,7 +104,7 @@ public class VariablePathDialogField extends StringButtonDialogField {
 		 * @see ISelectionChangedListener#selectionChanged(SelectionChangedEvent)
 		 */
 		public void selectionChanged(SelectionChangedEvent event) {
-			List elements= fVariableBlock.getSelectedElements();
+			List<CPVariableElement> elements= fVariableBlock.getSelectedElements();
 			StatusInfo status= new StatusInfo();
 			if (elements.size() != 1) {
 				status.setError(""); //$NON-NLS-1$
@@ -111,6 +114,7 @@ public class VariablePathDialogField extends StringButtonDialogField {
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.CHOOSE_VARIABLE_DIALOG);
@@ -130,6 +134,7 @@ public class VariablePathDialogField extends StringButtonDialogField {
 
 	// ------- layout helpers
 
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		assertEnoughColumns(nColumns);
 
@@ -144,6 +149,7 @@ public class VariablePathDialogField extends StringButtonDialogField {
 		return new Control[] { label, text, variableButton, browseButton };
 	}
 
+	@Override
 	public int getNumberOfControls() {
 		return 4;
 	}
@@ -210,6 +216,7 @@ public class VariablePathDialogField extends StringButtonDialogField {
 		}
 	}
 
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 		if (isOkToUse(fBrowseVariableButton)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java
index 0c080c2..8af6b26 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public class AddArchiveToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		return NewWizardMessages.PackageExplorerActionGroup_FormText_Default_toBuildpath_archives;
 	}
@@ -81,6 +82,7 @@ public class AddArchiveToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 
 		final Shell shell= getShell();
@@ -103,7 +105,7 @@ public class AddArchiveToBuildpathAction extends BuildpathModifierAction {
         	final IRunnableWithProgress runnable= new IRunnableWithProgress() {
         		public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
         			try {
-        				List result= addExternalJars(selected, javaProject, monitor);
+        				List<IJavaElement> result= addExternalJars(selected, javaProject, monitor);
         				if (result.size() > 0)
         					selectAndReveal(new StructuredSelection(result));
         			} catch (CoreException e) {
@@ -125,7 +127,7 @@ public class AddArchiveToBuildpathAction extends BuildpathModifierAction {
         }
 	}
 
-	private List addExternalJars(IPath[] jarPaths, IJavaProject project, IProgressMonitor monitor) throws CoreException {
+	private List<IJavaElement> addExternalJars(IPath[] jarPaths, IJavaProject project, IProgressMonitor monitor) throws CoreException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 		try {
@@ -137,10 +139,10 @@ public class AddArchiveToBuildpathAction extends BuildpathModifierAction {
 
     		informListeners(delta);
 
-    		List addedEntries= delta.getAddedEntries();
-			List result= new ArrayList(addedEntries.size());
+    		List<CPListElement> addedEntries= delta.getAddedEntries();
+			List<IJavaElement> result= new ArrayList<IJavaElement>(addedEntries.size());
 			for (int i= 0; i < addedEntries.size(); i++) {
-				IClasspathEntry entry= ((CPListElement) addedEntries.get(i)).getClasspathEntry();
+				IClasspathEntry entry= addedEntries.get(i).getClasspathEntry();
 				IJavaElement elem= project.findPackageFragmentRoot(entry.getPath());
 				if (elem != null) {
 					result.add(elem);
@@ -153,6 +155,7 @@ public class AddArchiveToBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection selection) {
 		if (selection.size() != 1)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java
index f10c5ba..a8bf222 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,6 +90,7 @@ public class AddFolderToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		if (!isEnabled())
 			return null;
@@ -113,6 +114,7 @@ public class AddFolderToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 
 		try {
@@ -174,7 +176,7 @@ public class AddFolderToBuildpathAction extends BuildpathModifierAction {
 				final IRunnableWithProgress runnable= new IRunnableWithProgress() {
 					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 						try {
-							List result= addToClasspath(getSelectedElements(), project, newDefaultOutputLocation.makeAbsolute(), removeProjectFromClasspath, removeOldClassFiles, monitor);
+							List<IJavaElement> result= addToClasspath(getSelectedElements(), project, newDefaultOutputLocation.makeAbsolute(), removeProjectFromClasspath, removeOldClassFiles, monitor);
 							selectAndReveal(new StructuredSelection(result));
 						} catch (CoreException e) {
 							throw new InvocationTargetException(e);
@@ -195,7 +197,7 @@ public class AddFolderToBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
-	private List addToClasspath(List elements, IJavaProject project, IPath outputLocation, boolean removeProjectFromClasspath, boolean removeOldClassFiles, IProgressMonitor monitor) throws OperationCanceledException, CoreException {
+	private List<IJavaElement> addToClasspath(List<?> elements, IJavaProject project, IPath outputLocation, boolean removeProjectFromClasspath, boolean removeOldClassFiles, IProgressMonitor monitor) throws OperationCanceledException, CoreException {
 		if (!project.getProject().hasNature(JavaCore.NATURE_ID)) {
 			StatusInfo rootStatus= new StatusInfo();
 			rootStatus.setError(NewWizardMessages.ClasspathModifier_Error_NoNatures);
@@ -222,14 +224,14 @@ public class AddFolderToBuildpathAction extends BuildpathModifierAction {
 				monitor.worked(1);
 			}
 
-			List existingEntries= ClasspathModifier.getExistingEntries(project);
+			List<CPListElement> existingEntries= ClasspathModifier.getExistingEntries(project);
 			if (removeProjectFromClasspath) {
 				ClasspathModifier.removeFromClasspath(project, existingEntries, new SubProgressMonitor(monitor, 1));
 			} else {
 				monitor.worked(1);
 			}
 
-			List newEntries= new ArrayList();
+			List<CPListElement> newEntries= new ArrayList<CPListElement>();
 			for (int i= 0; i < elements.size(); i++) {
 				Object element= elements.get(i);
 				CPListElement entry;
@@ -240,19 +242,19 @@ public class AddFolderToBuildpathAction extends BuildpathModifierAction {
 				newEntries.add(entry);
 			}
 
-			Set modifiedSourceEntries= new HashSet();
-			BuildPathBasePage.fixNestingConflicts((CPListElement[])newEntries.toArray(new CPListElement[newEntries.size()]), (CPListElement[])existingEntries.toArray(new CPListElement[existingEntries.size()]), modifiedSourceEntries);
+			Set<CPListElement> modifiedSourceEntries= new HashSet<CPListElement>();
+			BuildPathBasePage.fixNestingConflicts(newEntries.toArray(new CPListElement[newEntries.size()]), existingEntries.toArray(new CPListElement[existingEntries.size()]), modifiedSourceEntries);
 
 			ClasspathModifier.setNewEntry(existingEntries, newEntries, project, new SubProgressMonitor(monitor, 1));
 
 			ClasspathModifier.commitClassPath(existingEntries, project, new SubProgressMonitor(monitor, 1));
 
-        	delta.setNewEntries((CPListElement[])existingEntries.toArray(new CPListElement[existingEntries.size()]));
+        	delta.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
         	informListeners(delta);
 
-			List result= new ArrayList();
+			List<IJavaElement> result= new ArrayList<IJavaElement>();
 			for (int i= 0; i < newEntries.size(); i++) {
-				IClasspathEntry entry= ((CPListElement) newEntries.get(i)).getClasspathEntry();
+				IClasspathEntry entry= newEntries.get(i).getClasspathEntry();
 				IJavaElement root;
 				if (entry.getPath().equals(project.getPath()))
 					root= project;
@@ -269,11 +271,12 @@ public class AddFolderToBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
 		if (elements.size() == 0)
 			return false;
 		try {
-			for (Iterator iter= elements.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 				Object element= iter.next();
 				if (element instanceof IJavaProject) {
 					if (ClasspathModifier.isSourceFolder((IJavaProject)element))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
index c3fe164..13313a2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class AddLibraryToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 	    return NewWizardMessages.PackageExplorerActionGroup_FormText_Default_toBuildpath_library;
 	}
@@ -70,6 +71,7 @@ public class AddLibraryToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		final IJavaProject project= (IJavaProject)getSelectedElements().get(0);
 
@@ -91,6 +93,7 @@ public class AddLibraryToBuildpathAction extends BuildpathModifierAction {
 			/**
 			 * {@inheritDoc}
 			 */
+			@Override
 			public boolean performFinish() {
 				if (super.performFinish()) {
 					IWorkspaceRunnable op= new IWorkspaceRunnable() {
@@ -130,7 +133,7 @@ public class AddLibraryToBuildpathAction extends BuildpathModifierAction {
 					try {
 						pm.beginTask(NewWizardMessages.ClasspathModifier_Monitor_AddToBuildpath, 4);
 
-						List addedEntries= new ArrayList();
+						List<CPListElement> addedEntries= new ArrayList<CPListElement>();
 						for (int i= 0; i < selected.length; i++) {
 							addedEntries.add(CPListElement.create(selected[i], true, project));
 						}
@@ -139,7 +142,7 @@ public class AddLibraryToBuildpathAction extends BuildpathModifierAction {
 						if (pm.isCanceled())
 							throw new InterruptedException();
 
-						List existingEntries= ClasspathModifier.getExistingEntries(project);
+						List<CPListElement> existingEntries= ClasspathModifier.getExistingEntries(project);
 						ClasspathModifier.setNewEntry(existingEntries, addedEntries, project, new SubProgressMonitor(pm, 1));
 						if (pm.isCanceled())
 							throw new InterruptedException();
@@ -147,10 +150,10 @@ public class AddLibraryToBuildpathAction extends BuildpathModifierAction {
 						ClasspathModifier.commitClassPath(existingEntries, project, new SubProgressMonitor(pm, 1));
 
 			        	BuildpathDelta delta= new BuildpathDelta(getToolTipText());
-			        	delta.setNewEntries((CPListElement[])existingEntries.toArray(new CPListElement[existingEntries.size()]));
+			        	delta.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
 			        	informListeners(delta);
 
-						List result= new ArrayList(addedEntries.size());
+						List<ClassPathContainer> result= new ArrayList<ClassPathContainer>(addedEntries.size());
 						for (int i= 0; i < addedEntries.size(); i++) {
 							result.add(new ClassPathContainer(project, selected[i]));
 						}
@@ -174,6 +177,7 @@ public class AddLibraryToBuildpathAction extends BuildpathModifierAction {
 		dialog.open();
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection selection) {
 		if (selection.size() != 1)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
index c1aff5b..ed164f0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,6 +73,7 @@ public class AddSelectedLibraryToBuildpathAction extends BuildpathModifierAction
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		if (!isEnabled())
 			return null;
@@ -95,15 +96,16 @@ public class AddSelectedLibraryToBuildpathAction extends BuildpathModifierAction
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		try {
-			final IFile[] files= (IFile[])getSelectedElements().toArray(new IFile[getSelectedElements().size()]);
+			final IFile[] files= getSelectedElements().toArray(new IFile[getSelectedElements().size()]);
 
 			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
 				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 					try {
 				        IJavaProject project= JavaCore.create(files[0].getProject());
-				        List result= addLibraryEntries(files, project, monitor);
+				        List<IJavaElement> result= addLibraryEntries(files, project, monitor);
 						selectAndReveal(new StructuredSelection(result));
 					} catch (CoreException e) {
 						throw new InvocationTargetException(e);
@@ -121,8 +123,8 @@ public class AddSelectedLibraryToBuildpathAction extends BuildpathModifierAction
 		}
 	}
 
-	private List addLibraryEntries(IFile[] resources, IJavaProject project, IProgressMonitor monitor) throws CoreException {
-		List addedEntries= new ArrayList();
+	private List<IJavaElement> addLibraryEntries(IFile[] resources, IJavaProject project, IProgressMonitor monitor) throws CoreException {
+		List<CPListElement> addedEntries= new ArrayList<CPListElement>();
 		try {
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_AddToBuildpath, 4);
 			for (int i= 0; i < resources.length; i++) {
@@ -131,15 +133,15 @@ public class AddSelectedLibraryToBuildpathAction extends BuildpathModifierAction
 			}
 			monitor.worked(1);
 
-			List existingEntries= ClasspathModifier.getExistingEntries(project);
+			List<CPListElement> existingEntries= ClasspathModifier.getExistingEntries(project);
 			ClasspathModifier.setNewEntry(existingEntries, addedEntries, project, new SubProgressMonitor(monitor, 1));
 			ClasspathModifier.commitClassPath(existingEntries, project, new SubProgressMonitor(monitor, 1));
 
         	BuildpathDelta delta= new BuildpathDelta(getToolTipText());
-        	delta.setNewEntries((CPListElement[])existingEntries.toArray(new CPListElement[existingEntries.size()]));
+        	delta.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
         	informListeners(delta);
 
-			List result= new ArrayList(addedEntries.size());
+			List<IJavaElement> result= new ArrayList<IJavaElement>(addedEntries.size());
 			for (int i= 0; i < resources.length; i++) {
 				IResource res= resources[i];
 				IJavaElement elem= project.getPackageFragmentRoot(res);
@@ -155,12 +157,13 @@ public class AddSelectedLibraryToBuildpathAction extends BuildpathModifierAction
 		}
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
 		if (elements.size() == 0)
 			return false;
 
 		try {
-			for (Iterator iter= elements.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 				Object element= iter.next();
 				if (element instanceof IFile) {
 					IFile file= (IFile)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
index 29eca27..f0eb196 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,9 +64,9 @@ public abstract class BuildpathModifierAction extends Action implements ISelecti
 	public static final int DROP_DOWN_ACTION= 18;
 
 	private final IWorkbenchSite fSite;
-	private final List fSelectedElements;
+	private final List<Object> fSelectedElements;
 	private final ISetSelectionTarget fSelectionTarget;
-	private final List fListeners;
+	private final List<IBuildpathModifierListener> fListeners;
 
 	public BuildpathModifierAction(IWorkbenchSite site, ISetSelectionTarget selectionTarget, int id) {
 		this(site, selectionTarget, id, IAction.AS_PUSH_BUTTON);
@@ -77,8 +77,8 @@ public abstract class BuildpathModifierAction extends Action implements ISelecti
 
 		fSite= site;
 		fSelectionTarget= selectionTarget;
-		fSelectedElements= new ArrayList();
-		fListeners= new ArrayList();
+		fSelectedElements= new ArrayList<Object>();
+		fListeners= new ArrayList<IBuildpathModifierListener>();
 
 		setId(Integer.toString(id));
     }
@@ -109,7 +109,7 @@ public abstract class BuildpathModifierAction extends Action implements ISelecti
 
 	protected abstract boolean canHandle(IStructuredSelection elements);
 
-	protected List getSelectedElements() {
+	protected List<?> getSelectedElements() {
 		return fSelectedElements;
 	}
 
@@ -122,8 +122,8 @@ public abstract class BuildpathModifierAction extends Action implements ISelecti
 	}
 
 	protected void informListeners(BuildpathDelta delta) {
-		for (Iterator iterator= fListeners.iterator(); iterator.hasNext();) {
-	        ((IBuildpathModifierListener)iterator.next()).buildpathChanged(delta);
+		for (Iterator<IBuildpathModifierListener> iterator= fListeners.iterator(); iterator.hasNext();) {
+	        iterator.next().buildpathChanged(delta);
         }
 	}
 
@@ -160,7 +160,7 @@ public abstract class BuildpathModifierAction extends Action implements ISelecti
 			return;
 
 		// get all the view and editor parts
-		List parts= new ArrayList();
+		List<IWorkbenchPart> parts= new ArrayList<IWorkbenchPart>();
 		IWorkbenchPartReference refs[]= page.getViewReferences();
 		for (int i= 0; i < refs.length; i++) {
 			IWorkbenchPart part= refs[i].getPart(false);
@@ -173,9 +173,9 @@ public abstract class BuildpathModifierAction extends Action implements ISelecti
 				parts.add(refs[i].getPart(false));
 		}
 
-		Iterator itr= parts.iterator();
+		Iterator<IWorkbenchPart> itr= parts.iterator();
 		while (itr.hasNext()) {
-			IWorkbenchPart part= (IWorkbenchPart) itr.next();
+			IWorkbenchPart part= itr.next();
 
 			// get the part's ISetSelectionTarget implementation
 			ISetSelectionTarget target= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java
index 3a32d3e..0cf4b58 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@ public class ClasspathModifierDropDownAction extends BuildpathModifierAction imp
 
 	/** The menu to be populated with items*/
     private Menu fMenu;
-    private List fActions;
+    private List<BuildpathModifierAction> fActions;
     //The action to execute on run iff enabled
 	private BuildpathModifierAction fFirstValidAction;
 
@@ -46,7 +46,7 @@ public class ClasspathModifierDropDownAction extends BuildpathModifierAction imp
     public ClasspathModifierDropDownAction() {
         super(null, null, BuildpathModifierAction.DROP_DOWN_ACTION, IAction.AS_DROP_DOWN_MENU);
 
-        fActions= new ArrayList();
+        fActions= new ArrayList<BuildpathModifierAction>();
         fFirstValidAction= null;
 
         setText(""); //$NON-NLS-1$
@@ -56,11 +56,12 @@ public class ClasspathModifierDropDownAction extends BuildpathModifierAction imp
 	/**
      * {@inheritDoc}
      */
-    public String getDetailedDescription() {
+    @Override
+	public String getDetailedDescription() {
     	if (fFirstValidAction != null) {
     		return fFirstValidAction.getDetailedDescription();
     	} else if (fActions.size() > 0) {
-    		return ((BuildpathModifierAction)fActions.get(0)).getDetailedDescription();
+    		return fActions.get(0).getDetailedDescription();
     	} else {
     		return ""; //$NON-NLS-1$
     	}
@@ -69,11 +70,13 @@ public class ClasspathModifierDropDownAction extends BuildpathModifierAction imp
     /**
      * Runs the first action of the list of managed actions that is valid.
      */
-    public void run() {
+    @Override
+	public void run() {
     	fFirstValidAction.run();
     }
 
-    public IMenuCreator getMenuCreator() {
+    @Override
+	public IMenuCreator getMenuCreator() {
         return this;
     }
 
@@ -129,7 +132,7 @@ public class ClasspathModifierDropDownAction extends BuildpathModifierAction imp
      */
     private void createEntries(Menu menu) {
         for(int i= 0; i < fActions.size(); i++) {
-            IAction action= (IAction)fActions.get(i);
+            IAction action= fActions.get(i);
             addActionToMenu(menu, action);
         }
     }
@@ -144,14 +147,15 @@ public class ClasspathModifierDropDownAction extends BuildpathModifierAction imp
 	/**
      * {@inheritDoc}
      */
-    protected boolean canHandle(IStructuredSelection elements) {
+    @Override
+	protected boolean canHandle(IStructuredSelection elements) {
     	update();
     	return fFirstValidAction != null;
     }
 
 	private void update() {
-		for (Iterator iterator= fActions.iterator(); iterator.hasNext();) {
-	        BuildpathModifierAction action= (BuildpathModifierAction)iterator.next();
+		for (Iterator<BuildpathModifierAction> iterator= fActions.iterator(); iterator.hasNext();) {
+	        BuildpathModifierAction action= iterator.next();
 	        if (action.isEnabled()) {
 	        	if (action != fFirstValidAction) {
 	        		updateButton(action);
@@ -162,7 +166,7 @@ public class ClasspathModifierDropDownAction extends BuildpathModifierAction imp
         }
 		if (fFirstValidAction != null) {
 			if (fActions.size() > 0) {
-				updateButton((BuildpathModifierAction)fActions.get(0));
+				updateButton(fActions.get(0));
 			} else {
 				updateButton(this);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java
index 30c47f7..a70a7ea 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public class ClasspathModifierQueries {
      */
     public static abstract class OutputFolderValidator {
         protected IClasspathEntry[] fEntries;
-        protected List fElements;
+        protected List<?> fElements;
 
         /**
          * Create a output folder validator.
@@ -68,7 +68,7 @@ public class ClasspathModifierQueries {
          * @param project the Java project
          * @throws JavaModelException
          */
-        public OutputFolderValidator(List newElements, IJavaProject project) throws JavaModelException {
+        public OutputFolderValidator(List<?> newElements, IJavaProject project) throws JavaModelException {
             fEntries= project.getRawClasspath();
             fElements= newElements;
         }
@@ -86,45 +86,6 @@ public class ClasspathModifierQueries {
     }
 
     /**
-     * Query that processes the request of
-     * creating a link to an existing source
-     * folder.
-     *
-     * @deprecated Not used anymore in 3.4
-     */
-    public static interface ILinkToQuery {
-        /**
-         * Query that processes the request of
-         * creating a link to an existing source
-         * folder.
-         *
-         * @return <code>true</code> if the query was
-         * executed successfully (that is the result of
-         * this query can be used), <code>false</code>
-         * otherwise
-         */
-        public boolean doQuery();
-
-        /**
-         * Get the newly created folder.
-         * This method is only valid after having
-         * called <code>doQuery</code>.
-         *
-         * @return the created folder of type
-         * <code>IFolder</code>
-         */
-        public IFolder getCreatedFolder();
-
-        /**
-         * Getter for an output folder query.
-         *
-         * @return an output folder query which will be needed
-         * when adding the folder to the build path
-         *
-         */
-        public OutputFolderQuery getOutputFolderQuery();
-    }
-    /**
      * Query to get information about whether the project should be removed as
      * source folder and update build folder to <code>outputLocation</code>
      */
@@ -407,7 +368,8 @@ public class ClasspathModifierQueries {
 			protected IPath fOutputLocation;
 			protected boolean fRemoveProject;
 
-            public boolean doQuery(final boolean editingOutputFolder,  final OutputFolderValidator validator, final IJavaProject project) throws JavaModelException {
+            @Override
+			public boolean doQuery(final boolean editingOutputFolder,  final OutputFolderValidator validator, final IJavaProject project) throws JavaModelException {
                 final boolean[] result= { false };
                 fRemoveProject= false;
                 fOutputLocation= project.getOutputLocation();
@@ -447,11 +409,13 @@ public class ClasspathModifierQueries {
                 return result[0];
             }
 
-            public IPath getOutputLocation() {
+            @Override
+			public IPath getOutputLocation() {
                 return fOutputLocation;
             }
 
-            public boolean removeProjectFromClasspath() {
+            @Override
+			public boolean removeProjectFromClasspath() {
                 return fRemoveProject;
             }
 
@@ -508,54 +472,6 @@ public class ClasspathModifierQueries {
 	}
 
     /**
-     * Query to create a linked source folder.
-     *
-     * The default query shows a dialog which allows
-     * the user to specify the new folder that should
-     * be created.
-     *
-     * @param shell shell if there is any or <code>null</code>
-     * @param project the Java project to create the linked source folder for
-     * @param desiredOutputLocation the output location
-     * @return an <code>ILinkToQuery</code> showing a dialog
-     * to create a linked source folder.
-     *
-     * @see ClasspathModifierQueries.ICreateFolderQuery
-     * @see LinkFolderDialog
-     *
-     * @deprecated Not used anymore in 3.4
-     */
-    public static ILinkToQuery getDefaultLinkQuery(final Shell shell, final IJavaProject project, final IPath desiredOutputLocation) {
-        return new ILinkToQuery() {
-            protected IFolder fFolder;
-
-            public boolean doQuery() {
-                final boolean[] isOK= {false};
-                Display.getDefault().syncExec(new Runnable() {
-                    public void run() {
-                        Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
-
-                        LinkFolderDialog dialog= new LinkFolderDialog(sh, project.getProject());
-                        isOK[0]= dialog.open() == Window.OK;
-                        if (isOK[0])
-                            fFolder= dialog.getCreatedFolder();
-                    }
-                });
-                return isOK[0];
-            }
-
-            public IFolder getCreatedFolder() {
-                return fFolder;
-            }
-
-            public OutputFolderQuery getOutputFolderQuery() {
-                return getDefaultFolderQuery(shell, desiredOutputLocation);
-            }
-
-        };
-    }
-
-    /**
      * Shows the UI to select new external JAR or ZIP archive entries. If the query
      * was aborted, the result is an empty array.
      *
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ConfigureBuildPathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ConfigureBuildPathAction.java
index 482897a..c570e74 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ConfigureBuildPathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ConfigureBuildPathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,14 +55,16 @@ public class ConfigureBuildPathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 	    return null;
 	}
 
+	@Override
 	public void run() {
 		IProject project= null;
 		Object firstElement= getSelectedElements().get(0);
-		HashMap data= new HashMap();
+		HashMap<Object, IClasspathEntry> data= new HashMap<Object, IClasspathEntry>();
 
 		if (firstElement instanceof IJavaElement) {
 			IJavaElement element= (IJavaElement) firstElement;
@@ -86,6 +88,7 @@ public class ConfigureBuildPathAction extends BuildpathModifierAction {
 		PreferencesUtil.createPropertyDialogOn(getShell(), project, BuildPathsPropertyPage.PROP_ID, null, data).open();
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
 		if (elements.size() != 1)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction.java
index 84730b8..75bbb27 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@ public class CreateLinkedSourceFolderAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		return NewWizardMessages.PackageExplorerActionGroup_FormText_createLinkedFolder;
 	}
@@ -76,6 +77,7 @@ public class CreateLinkedSourceFolderAction extends BuildpathModifierAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		Shell shell= getShell();
 
@@ -98,8 +100,8 @@ public class CreateLinkedSourceFolderAction extends BuildpathModifierAction {
 
 				BuildpathDelta delta= new BuildpathDelta(getToolTipText());
 
-				ArrayList newEntries= wizard.getExistingEntries();
-				delta.setNewEntries((CPListElement[])newEntries.toArray(new CPListElement[newEntries.size()]));
+				ArrayList<CPListElement> newEntries= wizard.getExistingEntries();
+				delta.setNewEntries(newEntries.toArray(new CPListElement[newEntries.size()]));
 
 				IResource resource= wizard.getCreatedElement().getCorrespondingResource();
 				delta.addCreatedResource(resource);
@@ -129,7 +131,8 @@ public class CreateLinkedSourceFolderAction extends BuildpathModifierAction {
 		}
     }
 
-    protected boolean canHandle(IStructuredSelection selection) {
+    @Override
+	protected boolean canHandle(IStructuredSelection selection) {
     	if (selection.size() != 1)
     		return false;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction2.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction2.java
index 45d7196..1c11743 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction2.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateLinkedSourceFolderAction2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public class CreateLinkedSourceFolderAction2 extends CreateLinkedSourceFolderAct
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void selectAndReveal(ISelection selection) {
 	    fProvider.handleFolderCreation(((StructuredSelection)selection).toList());
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction.java
index 23e007b..b0fc389 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,6 +73,7 @@ public class CreateSourceFolderAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 	    return NewWizardMessages.PackageExplorerActionGroup_FormText_createNewSourceFolder;
 	}
@@ -80,6 +81,7 @@ public class CreateSourceFolderAction extends BuildpathModifierAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		Shell shell= getShell();
 
@@ -101,8 +103,8 @@ public class CreateSourceFolderAction extends BuildpathModifierAction {
 			if (res == Window.OK) {
 				BuildpathDelta delta= new BuildpathDelta(getToolTipText());
 
-				ArrayList newEntries= wizard.getExistingEntries();
-				delta.setNewEntries((CPListElement[])newEntries.toArray(new CPListElement[newEntries.size()]));
+				ArrayList<CPListElement> newEntries= wizard.getExistingEntries();
+				delta.setNewEntries(newEntries.toArray(new CPListElement[newEntries.size()]));
 
 				IResource resource= wizard.getCreatedElement().getCorrespondingResource();
 				delta.addCreatedResource(resource);
@@ -132,7 +134,8 @@ public class CreateSourceFolderAction extends BuildpathModifierAction {
 		}
     }
 
-    protected boolean canHandle(IStructuredSelection selection) {
+    @Override
+	protected boolean canHandle(IStructuredSelection selection) {
     	if (selection.size() != 1)
     		return false;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction2.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction2.java
index dfde6d0..8e7ad3c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction2.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/CreateSourceFolderAction2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class CreateSourceFolderAction2 extends CreateSourceFolderAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void selectAndReveal(ISelection selection) {
 	    fProvider.handleFolderCreation(((StructuredSelection)selection).toList());
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java
index 9ea8042..93acde5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,6 @@ import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.IPostSelectionProvider;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -83,7 +82,7 @@ import org.eclipse.jdt.internal.ui.workingsets.WorkingSetModel;
  * elements that are not shown usually in the package explorer of the
  * workspace.
  */
-public class DialogPackageExplorer implements IMenuListener, ISelectionProvider, IPostSelectionProvider, ISetSelectionTarget {
+public class DialogPackageExplorer implements IMenuListener, IPostSelectionProvider, ISetSelectionTarget {
     /**
      * A extended content provider for the package explorer which can additionally display
      * an output folder item.
@@ -100,7 +99,8 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
          * not be used, instead the project children are returned directly
          * @return returns the children of the project
          */
-        public Object[] getElements(Object element) {
+        @Override
+		public Object[] getElements(Object element) {
             if (fCurrJProject == null || !fCurrJProject.exists())
                 return new Object[0];
             return new Object[] {fCurrJProject};
@@ -115,7 +115,8 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
          * @param element the current element to get the children from
          * @return an array of children
          */
-        public Object[] getChildren(Object element) {
+        @Override
+		public Object[] getChildren(Object element) {
             Object[] children= super.getChildren(element);
             if (((element instanceof IPackageFragmentRoot && !ClasspathModifier.isInExternalOrArchive((IPackageFragmentRoot) element)) ||
                     (element instanceof IJavaProject && fCurrJProject.isOnClasspath(fCurrJProject))) && fShowOutputFolders) {
@@ -154,7 +155,8 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
             outputFolderLabel= new CPListLabelProvider();
         }
 
-        public String getText(Object element) {
+        @Override
+		public String getText(Object element) {
             if (element instanceof CPListElementAttribute)
                 return outputFolderLabel.getText(element);
             String text= super.getText(element);
@@ -198,7 +200,8 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
         /* (non-Javadoc)
          * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getForeground(java.lang.Object)
          */
-        public Color getForeground(Object element) {
+        @Override
+		public Color getForeground(Object element) {
             try {
                 if (element instanceof IPackageFragmentRoot) {
                     IPackageFragmentRoot root= (IPackageFragmentRoot)element;
@@ -228,13 +231,15 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
             return Display.getCurrent().getSystemColor(SWT.COLOR_BLUE);
         }
 
-        public Image getImage(Object element) {
+        @Override
+		public Image getImage(Object element) {
             if (element instanceof CPListElementAttribute)
                 return outputFolderLabel.getImage(element);
             return super.getImage(element);
         }
 
-        public void dispose() {
+        @Override
+		public void dispose() {
             outputFolderLabel.dispose();
             super.dispose();
         }
@@ -250,7 +255,8 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
             super();
         }
 
-        public int compare(Viewer viewer, Object e1, Object e2) {
+        @Override
+		public int compare(Viewer viewer, Object e1, Object e2) {
             if (e1 instanceof CPListElementAttribute)
                 return -1;
             if (e2 instanceof CPListElementAttribute)
@@ -268,7 +274,8 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
      */
     private final class PackageFilter extends LibraryFilter {
         private OutputFolderFilter fOutputFolderFilter= new OutputFolderFilter();
-        public boolean select(Viewer viewer, Object parentElement, Object element) {
+        @Override
+		public boolean select(Viewer viewer, Object parentElement, Object element) {
             try {
                 if (element instanceof IFile) {
                     IFile file= (IFile) element;
@@ -426,7 +433,7 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
         	fContentProvider.inputChanged(fPackageViewer, oldProject, fCurrJProject);
 		fPackageViewer.setInput(new Object[0]);
 
-        List selectedElements= new ArrayList();
+        List<IJavaProject> selectedElements= new ArrayList<IJavaProject>();
         selectedElements.add(fCurrJProject);
         setSelection(selectedElements);
     }
@@ -447,7 +454,7 @@ public class DialogPackageExplorer implements IMenuListener, ISelectionProvider,
      * Set the selection and focus to the list of elements
      * @param elements the object to be selected and displayed
      */
-    public void setSelection(final List elements) {
+    public void setSelection(final List<?> elements) {
         if (elements == null || elements.size() == 0)
             return;
 		try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorerActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorerActionGroup.java
index f45b7f9..e98d703 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorerActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorerActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,8 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 
 import org.eclipse.ui.PlatformUI;
 
+import org.eclipse.jdt.core.IJavaProject;
+
 import org.eclipse.jdt.internal.corext.buildpath.IBuildpathModifierListener;
 
 import org.eclipse.jdt.internal.ui.actions.CompositeActionGroup;
@@ -69,7 +71,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
         	context= PlatformUI.getWorkbench().getProgressService();
 
         fAddFolderToBuildpathAction= new AddFolderToBuildpathAction(context, fDialogPackageExplorer) {
-        	public void run() {
+        	@Override
+			public void run() {
         		page.commitDefaultOutputFolder();
         	    super.run();
         	}
@@ -77,7 +80,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
 		fDialogPackageExplorer.addSelectionChangedListener(fAddFolderToBuildpathAction);
 
 		fRemoveFromBuildpathAction= new RemoveFromBuildpathAction(context, fDialogPackageExplorer) {
-        	public void run() {
+        	@Override
+			public void run() {
         		page.commitDefaultOutputFolder();
         	    super.run();
         	}
@@ -85,7 +89,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
 		fDialogPackageExplorer.addSelectionChangedListener(fRemoveFromBuildpathAction);
 
 		fExcludeFromBuildpathAction= new ExcludeFromBuildpathAction(context, fDialogPackageExplorer) {
-        	public void run() {
+        	@Override
+			public void run() {
         		page.commitDefaultOutputFolder();
         	    super.run();
         	}
@@ -93,7 +98,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
 		fDialogPackageExplorer.addSelectionChangedListener(fExcludeFromBuildpathAction);
 
 		fIncludeToBuildpathAction= new IncludeToBuildpathAction(context, fDialogPackageExplorer) {
-        	public void run() {
+        	@Override
+			public void run() {
         		page.commitDefaultOutputFolder();
         	    super.run();
         	}
@@ -101,7 +107,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
 		fDialogPackageExplorer.addSelectionChangedListener(fIncludeToBuildpathAction);
 
 			fEditFilterAction= new EditFilterAction(context, fDialogPackageExplorer) {
-	        	public void run() {
+	        	@Override
+				public void run() {
 	        		page.commitDefaultOutputFolder();
 	        	    super.run();
 	        	}
@@ -109,7 +116,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
 			fDialogPackageExplorer.addSelectionChangedListener(fEditFilterAction);
 
 	        fEditOutputFolderAction= new EditOutputFolderAction(context, fDialogPackageExplorer) {
-	        	public void run() {
+	        	@Override
+				public void run() {
 	        		page.commitDefaultOutputFolder();
 	        	    super.run();
 	        	}
@@ -122,7 +130,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
 		fDialogPackageExplorer.addPostSelectionChangedListener(fDropDownAction);
 
         fCreateLinkedSourceFolderAction= new CreateLinkedSourceFolderAction2(provider, context, fDialogPackageExplorer) {
-        	public void run() {
+        	@Override
+			public void run() {
         		page.commitDefaultOutputFolder();
         	    super.run();
         	}
@@ -130,8 +139,9 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
         	/**
         	 * {@inheritDoc}
         	 */
-        	protected List getSelectedElements() {
-        		ArrayList result= new ArrayList();
+        	@Override
+			protected List<IJavaProject> getSelectedElements() {
+        		ArrayList<IJavaProject> result= new ArrayList<IJavaProject>();
         		result.add(page.getJavaProject());
         		return result;
         	}
@@ -139,13 +149,15 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
         	/**
         	 * {@inheritDoc}
         	 */
-        	protected boolean canHandle(IStructuredSelection selection) {
+        	@Override
+			protected boolean canHandle(IStructuredSelection selection) {
         		return true;
         	}
         };
 
         fCreateSourceFolderAction= new CreateSourceFolderAction2(provider, context, fDialogPackageExplorer) {
-        	public void run() {
+        	@Override
+			public void run() {
         		page.commitDefaultOutputFolder();
         	    super.run();
         	}
@@ -153,8 +165,9 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
         	/**
         	 * {@inheritDoc}
         	 */
-        	protected List getSelectedElements() {
-        		ArrayList result= new ArrayList();
+        	@Override
+			protected List<IJavaProject> getSelectedElements() {
+        		ArrayList<IJavaProject> result= new ArrayList<IJavaProject>();
         		result.add(page.getJavaProject());
         		return result;
         	}
@@ -162,7 +175,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
         	/**
         	 * {@inheritDoc}
         	 */
-        	protected boolean canHandle(IStructuredSelection selection) {
+        	@Override
+			protected boolean canHandle(IStructuredSelection selection) {
         		return true;
         	}
         };
@@ -181,7 +195,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.actions.CompositeActionGroup#dispose()
      */
-    public void dispose() {
+    @Override
+	public void dispose() {
         super.dispose();
 
         fDialogPackageExplorer.removeSelectionChangedListener(fAddFolderToBuildpathAction);
@@ -265,7 +280,8 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
      *
      * @param menu the menu to be filled up with actions
      */
-    public void fillContextMenu(IMenuManager menu) {
+    @Override
+	public void fillContextMenu(IMenuManager menu) {
 
     	if (fAddFolderToBuildpathAction.isEnabled())
     		menu.add(fAddFolderToBuildpathAction);
@@ -295,7 +311,7 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
     }
 
 	public BuildpathModifierAction[] getHintTextGroupActions() {
-		List result= new ArrayList();
+		List<BuildpathModifierAction> result= new ArrayList<BuildpathModifierAction>();
 
     	if (fCreateSourceFolderAction.isEnabled())
     		result.add(fCreateSourceFolderAction);
@@ -321,7 +337,7 @@ public class DialogPackageExplorerActionGroup extends CompositeActionGroup {
     	if (fRemoveFromBuildpathAction.isEnabled())
     		result.add(fRemoveFromBuildpathAction);
 
-	    return (BuildpathModifierAction[])result.toArray(new BuildpathModifierAction[result.size()]);
+	    return result.toArray(new BuildpathModifierAction[result.size()]);
     }
 
 	public EditOutputFolderAction getEditOutputFolderAction() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java
index 7833fa7..d622ab9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public class EditFilterAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		if (!isEnabled())
 			return null;
@@ -85,6 +86,7 @@ public class EditFilterAction extends BuildpathModifierAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		Shell shell= getShell();
 
@@ -100,8 +102,8 @@ public class EditFilterAction extends BuildpathModifierAction {
 			if (res == Window.OK) {
 				BuildpathDelta delta= new BuildpathDelta(getToolTipText());
 
-				ArrayList newEntries= wizard.getExistingEntries();
-				delta.setNewEntries((CPListElement[])newEntries.toArray(new CPListElement[newEntries.size()]));
+				ArrayList<CPListElement> newEntries= wizard.getExistingEntries();
+				delta.setNewEntries(newEntries.toArray(new CPListElement[newEntries.size()]));
 
 				IResource resource= wizard.getCreatedElement().getCorrespondingResource();
 				delta.addCreatedResource(resource);
@@ -155,6 +157,7 @@ public class EditFilterAction extends BuildpathModifierAction {
 		return null;
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection selection) {
 		if (selection.size() != 1)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
index 262fb80..610f51a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class EditOutputFolderAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 	    return NewWizardMessages.PackageExplorerActionGroup_FormText_EditOutputFolder;
 	}
@@ -98,6 +99,7 @@ public class EditOutputFolderAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		try {
 
@@ -127,7 +129,7 @@ public class EditOutputFolderAction extends BuildpathModifierAction {
 				return;
 			}
 
-			final List classpathEntries= ClasspathModifier.getExistingEntries(javaProject);
+			final List<CPListElement> classpathEntries= ClasspathModifier.getExistingEntries(javaProject);
 			final CPListElement element= ClasspathModifier.getClasspathEntry(classpathEntries, cpElement);
 
 			final OutputLocationDialog dialog= new OutputLocationDialog(shell, element, classpathEntries, javaProject.getOutputLocation(), false);
@@ -182,7 +184,7 @@ public class EditOutputFolderAction extends BuildpathModifierAction {
 
 	private IFolder getOldOutputFolder(final BuildpathDelta delta) {
 	    IResource[] deletedResources= delta.getDeletedResources();
-	    List existingFolders= new ArrayList();
+	    List<IResource> existingFolders= new ArrayList<IResource>();
 	    for (int i= 0; i < deletedResources.length; i++) {
 	        if (deletedResources[i] instanceof IFolder && deletedResources[i].exists()) {
 	        	existingFolders.add(deletedResources[i]);
@@ -191,7 +193,7 @@ public class EditOutputFolderAction extends BuildpathModifierAction {
 	    if (existingFolders.size() > 0) {
 	    	if (existingFolders.size() > 1) {
 	    		String message= "Found more then one existing folders:"; //$NON-NLS-1$
-	    		for (Iterator iterator= existingFolders.iterator(); iterator.hasNext();) {
+	    		for (Iterator<IResource> iterator= existingFolders.iterator(); iterator.hasNext();) {
 	                IFolder folder= (IFolder)iterator.next();
 	                message+= "\n" + folder.toString(); //$NON-NLS-1$
 	            }
@@ -202,6 +204,7 @@ public class EditOutputFolderAction extends BuildpathModifierAction {
 	    return null;
     }
 
+	@Override
 	protected boolean canHandle(final IStructuredSelection elements) {
 		if (!fShowOutputFolders)
 			return false;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java
index 89b0d66..946b0d6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,7 @@ public class ExcludeFromBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		if (!isEnabled())
 			return null;
@@ -97,6 +98,7 @@ public class ExcludeFromBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
         final IJavaProject project;
         Object object= getSelectedElements().get(0);
@@ -110,7 +112,7 @@ public class ExcludeFromBuildpathAction extends BuildpathModifierAction {
 			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
 				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 					try {
-				        List result= exclude(getSelectedElements(), project, monitor);
+				        List<IResource> result= exclude(getSelectedElements(), project, monitor);
 				        selectAndReveal(new StructuredSelection(result));
 					} catch (CoreException e) {
 						throw new InvocationTargetException(e);
@@ -128,14 +130,14 @@ public class ExcludeFromBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
-	private List exclude(List javaElements, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	private List<IResource> exclude(List<?> javaElements, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 		try {
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_Excluding, javaElements.size() + 4);
 
-			List existingEntries= ClasspathModifier.getExistingEntries(project);
-			List resources= new ArrayList();
+			List<CPListElement> existingEntries= ClasspathModifier.getExistingEntries(project);
+			List<IResource> resources= new ArrayList<IResource>();
 			for (int i= 0; i < javaElements.size(); i++) {
 				IJavaElement javaElement= (IJavaElement) javaElements.get(i);
 				IPackageFragmentRoot root= (IPackageFragmentRoot) javaElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
@@ -150,7 +152,7 @@ public class ExcludeFromBuildpathAction extends BuildpathModifierAction {
 			ClasspathModifier.commitClassPath(existingEntries, project, new SubProgressMonitor(monitor, 4));
 
         	BuildpathDelta delta= new BuildpathDelta(getToolTipText());
-        	delta.setNewEntries((CPListElement[])existingEntries.toArray(new CPListElement[existingEntries.size()]));
+        	delta.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
         	informListeners(delta);
 
 			return resources;
@@ -159,11 +161,12 @@ public class ExcludeFromBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
         if (elements.size() == 0)
             return false;
 
-        for (Iterator iter= elements.iterator(); iter.hasNext();) {
+        for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IPackageFragment) {
 				IPackageFragment fragment= (IPackageFragment)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java
index 1048d40..85e6ecd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -118,7 +118,7 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
 
     private final IWorkbenchSite fSite;
 	private final ISelectionProvider fSelectionProvider;
-	private final List/*<Action>*/fActions;
+	private final List<Action> fActions;
 
 	private String fGroupName= IContextMenuConstants.GROUP_REORGANIZE;
 
@@ -158,7 +158,7 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
 	public GenerateBuildPathActionGroup(IWorkbenchSite site, ISelectionProvider selectionProvider) {
         fSite= site;
 		fSelectionProvider= selectionProvider;
-        fActions= new ArrayList();
+        fActions= new ArrayList<Action>();
 
 		final CreateLinkedSourceFolderAction addLinkedSourceFolderAction= new CreateLinkedSourceFolderAction(site);
 		fActions.add(addLinkedSourceFolderAction);
@@ -199,8 +199,8 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
 		final ConfigureBuildPathAction configure= new ConfigureBuildPathAction(site);
 		fActions.add(configure);
 
-		for (Iterator iter= fActions.iterator(); iter.hasNext();) {
-			Action action= (Action)iter.next();
+		for (Iterator<Action> iter= fActions.iterator(); iter.hasNext();) {
+			Action action= iter.next();
 			if (action instanceof ISelectionChangedListener) {
 				ISelectionChangedListener listener= (ISelectionChangedListener)action;
 				selectionProvider.addSelectionChangedListener(listener);
@@ -213,7 +213,8 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
     /* (non-Javadoc)
      * Method declared in ActionGroup
      */
-    public void fillActionBars(IActionBars actionBar) {
+    @Override
+	public void fillActionBars(IActionBars actionBar) {
         super.fillActionBars(actionBar);
         setGlobalActionHandlers(actionBar);
     }
@@ -221,7 +222,8 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
     /* (non-Javadoc)
      * Method declared in ActionGroup
      */
-    public void fillContextMenu(IMenuManager menu) {
+    @Override
+	public void fillContextMenu(IMenuManager menu) {
         super.fillContextMenu(menu);
         if (!canOperateOnSelection())
         	return;
@@ -240,8 +242,8 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
 	private void fillViewSubMenu(IMenuManager source) {
         int added= 0;
         int i=0;
-        for (Iterator iter= fActions.iterator(); iter.hasNext();) {
-			Action action= (Action)iter.next();
+        for (Iterator<Action> iter= fActions.iterator(); iter.hasNext();) {
+			Action action= iter.next();
 			if (action instanceof IUpdate)
 				((IUpdate) action).update();
 
@@ -282,7 +284,7 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
     	IStructuredSelection selection= (IStructuredSelection)sel;
     	if (selection.isEmpty())
 			return false;
-    	for (Iterator iter= selection.iterator(); iter.hasNext();) {
+    	for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IWorkingSet)
 				return false;
@@ -293,10 +295,11 @@ public class GenerateBuildPathActionGroup extends ActionGroup {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dispose() {
 		if (fActions != null) {
-			for (Iterator iter= fActions.iterator(); iter.hasNext();) {
-				Action action= (Action)iter.next();
+			for (Iterator<Action> iter= fActions.iterator(); iter.hasNext();) {
+				Action action= iter.next();
 				if (action instanceof ISelectionChangedListener)
 					fSelectionProvider.removeSelectionChangedListener((ISelectionChangedListener) action);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HelpAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HelpAction.java
index 563cd1f..6299c2f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HelpAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HelpAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,8 @@ public class HelpAction extends Action {
         setToolTipText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Help_tooltip);
     }
 
-    public void run() {
+    @Override
+	public void run() {
         PlatformUI.getWorkbench().getHelpSystem().displayHelpResource(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Help_link);
     }
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java
index 40ff8b0..ab7ba2a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,8 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Shell;
 
+import org.eclipse.core.resources.IResource;
+
 import org.eclipse.jface.layout.PixelConverter;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -62,12 +64,12 @@ public final class HintTextGroup implements ISelectionChangedListener {
 
     private Composite fTopComposite;
     private DialogPackageExplorerActionGroup fActionGroup;
-    private List fNewFolders;
-    private HashMap fImageMap;
+    private List<IResource> fNewFolders;
+    private HashMap<String, Image> fImageMap;
 
     public HintTextGroup() {
-        fNewFolders= new ArrayList();
-        fImageMap= new HashMap();
+        fNewFolders= new ArrayList<IResource>();
+        fImageMap= new HashMap<String, Image>();
     }
 
     public Composite createControl(Composite parent) {
@@ -86,10 +88,10 @@ public final class HintTextGroup implements ISelectionChangedListener {
         fTopComposite.setData(null);
         fTopComposite.addDisposeListener(new DisposeListener() {
             public void widgetDisposed(DisposeEvent e) {
-                Collection collection= fImageMap.values();
-                Iterator iterator= collection.iterator();
+                Collection<Image> collection= fImageMap.values();
+                Iterator<Image> iterator= collection.iterator();
                 while(iterator.hasNext()) {
-                    Image image= (Image)iterator.next();
+                    Image image= iterator.next();
                     image.dispose();
                 }
             }
@@ -158,7 +160,7 @@ public final class HintTextGroup implements ISelectionChangedListener {
      */
     private void createLabel(Composite parent, String text, final BuildpathModifierAction action) {
         FormText formText= createFormText(parent, text);
-        Image image= (Image)fImageMap.get(action.getId());
+        Image image= fImageMap.get(action.getId());
         if (image == null) {
             image= action.getImageDescriptor().createImage();
             fImageMap.put(action.getId(), image);
@@ -166,7 +168,8 @@ public final class HintTextGroup implements ISelectionChangedListener {
         formText.setImage("defaultImage", image); //$NON-NLS-1$
         formText.addHyperlinkListener(new HyperlinkAdapter() {
 
-            public void linkActivated(HyperlinkEvent e) {
+            @Override
+			public void linkActivated(HyperlinkEvent e) {
                 action.run();
             }
 
@@ -190,17 +193,17 @@ public final class HintTextGroup implements ISelectionChangedListener {
      * <code>fPackageExplorer</code>, or an empty list if creation was
      * aborted
      */
-    void handleFolderCreation(List result) {
+    void handleFolderCreation(List<IPackageFragmentRoot> result) {
         if (result.size() == 1) {
             try {
-	            fNewFolders.add(((IPackageFragmentRoot)result.get(0)).getCorrespondingResource());
+	            fNewFolders.add(result.get(0).getCorrespondingResource());
             } catch (JavaModelException e) {
 	            JavaPlugin.log(e);
             }
         }
     }
 
-    public List getCreatedResources() {
+    public List<IResource> getCreatedResources() {
     	return fNewFolders;
     }
 
@@ -282,7 +285,7 @@ public final class HintTextGroup implements ISelectionChangedListener {
     	}
     }
 
-	private String noAction(List selectedElements) {
+	private String noAction(List<?> selectedElements) {
 		if (selectedElements.size() == 0)
 			return NewWizardMessages.PackageExplorerActionGroup_NoAction_NullSelection;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java
index 2c2d097..9b77f10 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public class IncludeToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		if (!isEnabled())
 			return null;
@@ -96,6 +97,7 @@ public class IncludeToBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		IResource resource= (IResource)getSelectedElements().get(0);
 		final IJavaProject project= JavaCore.create(resource.getProject());
@@ -104,7 +106,7 @@ public class IncludeToBuildpathAction extends BuildpathModifierAction {
 			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
 				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 					try {
-						List result= unExclude(getSelectedElements(), project, monitor);
+						List<?> result= unExclude(getSelectedElements(), project, monitor);
 						selectAndReveal(new StructuredSelection(result));
 					} catch (CoreException e) {
 						throw new InvocationTargetException(e);
@@ -122,13 +124,13 @@ public class IncludeToBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
-	protected List unExclude(List elements, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	protected List<?> unExclude(List<?> elements, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 		try {
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_Including, 2 * elements.size());
 
-			List entries= ClasspathModifier.getExistingEntries(project);
+			List<CPListElement> entries= ClasspathModifier.getExistingEntries(project);
 			for (int i= 0; i < elements.size(); i++) {
 				IResource resource= (IResource) elements.get(i);
 				IPackageFragmentRoot root= ClasspathModifier.getFragmentRoot(resource, project, new SubProgressMonitor(monitor, 1));
@@ -141,22 +143,23 @@ public class IncludeToBuildpathAction extends BuildpathModifierAction {
 			ClasspathModifier.commitClassPath(entries, project, new SubProgressMonitor(monitor, 4));
 
         	BuildpathDelta delta= new BuildpathDelta(getToolTipText());
-        	delta.setNewEntries((CPListElement[])entries.toArray(new CPListElement[entries.size()]));
+        	delta.setNewEntries(entries.toArray(new CPListElement[entries.size()]));
         	informListeners(delta);
 
-			List resultElements= ClasspathModifier.getCorrespondingElements(elements, project);
+			List<?> resultElements= ClasspathModifier.getCorrespondingElements(elements, project);
 			return resultElements;
 		} finally {
 			monitor.done();
 		}
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
 		if (elements.size() == 0)
 			return false;
 
 		try {
-			for (Iterator iter= elements.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 				Object element= iter.next();
 				if (element instanceof IResource) {
 					IResource resource= (IResource)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/LinkFolderDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/LinkFolderDialog.java
deleted file mode 100644
index 23e1a79..0000000
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/LinkFolderDialog.java
+++ /dev/null
@@ -1,532 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.ui.wizards.buildpaths.newsourcepage;
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Observable;
-import java.util.Observer;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IPathVariableManager;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.dialogs.StatusDialog;
-
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.ui.ide.dialogs.PathVariableSelectionDialog;
-
-import org.eclipse.jdt.internal.corext.util.Messages;
-
-import org.eclipse.jdt.ui.JavaUI;
-
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
-import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
-import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
-import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
-
-
-/**
- * @deprecated Not used anymore in 3.4
- */
-public class LinkFolderDialog extends StatusDialog {
-    private final class FolderNameField extends Observable implements IDialogFieldListener {
-        private StringDialogField fNameDialogField;
-
-        public FolderNameField(Composite parent, int numOfColumns) {
-            createControls(parent, numOfColumns);
-        }
-
-        private void createControls(Composite parent, int numColumns) {
-            fNameDialogField= new StringDialogField();
-            fNameDialogField.setLabelText(NewWizardMessages.LinkFolderDialog_folderNameGroup_label);
-            fNameDialogField.doFillIntoGrid(parent, 2);
-            LayoutUtil.setHorizontalGrabbing(fNameDialogField.getTextControl(null));
-			LayoutUtil.setHorizontalSpan(fNameDialogField.getLabelControl(null), numColumns);
-			DialogField.createEmptySpace(parent, numColumns - 1);
-
-            fNameDialogField.setDialogFieldListener(this);
-        }
-
-        public void setText(String text) {
-            fNameDialogField.setText(text);
-            fNameDialogField.setFocus();
-        }
-
-        public String getText() {
-            return fNameDialogField.getText();
-        }
-
-        protected void fireEvent() {
-            setChanged();
-            notifyObservers();
-        }
-
-        public void dialogFieldChanged(DialogField field) {
-            fireEvent();
-        }
-    }
-
-    private final class LinkFields extends Observable implements IStringButtonAdapter, IDialogFieldListener{
-        private StringButtonDialogField fLinkLocation;
-
-        private static final String DIALOGSTORE_LAST_EXTERNAL_LOC= JavaUI.ID_PLUGIN + ".last.external.project"; //$NON-NLS-1$
-
-        public LinkFields(Composite parent, int numColumns) {
-            createControls(parent, numColumns);
-        }
-
-        private void createControls(Composite parent, int numColumns) {
-            fLinkLocation= new StringButtonDialogField(this);
-
-            fLinkLocation.setLabelText(NewWizardMessages.LinkFolderDialog_dependenciesGroup_locationLabel_desc);
-            fLinkLocation.setButtonLabel(NewWizardMessages.LinkFolderDialog_dependenciesGroup_browseButton_desc);
-            fLinkLocation.setDialogFieldListener(this);
-
-            SelectionButtonDialogField variables= new SelectionButtonDialogField(SWT.PUSH);
-            variables.setLabelText(NewWizardMessages.LinkFolderDialog_dependenciesGroup_variables_desc);
-            variables.setDialogFieldListener(new IDialogFieldListener() {
-                public void dialogFieldChanged(DialogField field) {
-                    handleVariablesButtonPressed();
-                }
-            });
-
-            fLinkLocation.doFillIntoGrid(parent, numColumns);
-
-			LayoutUtil.setHorizontalSpan(fLinkLocation.getLabelControl(null), numColumns);
-            LayoutUtil.setHorizontalGrabbing(fLinkLocation.getTextControl(null));
-
-            variables.doFillIntoGrid(parent, 1);
-        }
-
-        public String getLinkTarget() {
-            return fLinkLocation.getText();
-        }
-
-		public void setLinkTarget(String text) {
-			fLinkLocation.setText(text);
-		}
-
-        /*(non-Javadoc)
-         * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter#changeControlPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField)
-         */
-        public void changeControlPressed(DialogField field) {
-            final DirectoryDialog dialog= new DirectoryDialog(getShell());
-            dialog.setMessage(NewWizardMessages.LinkFolderDialog_directory_message);
-            String directoryName = getLinkTarget().trim();
-            if (directoryName.length() == 0) {
-                String prevLocation= JavaPlugin.getDefault().getDialogSettings().get(DIALOGSTORE_LAST_EXTERNAL_LOC);
-                if (prevLocation != null) {
-                    directoryName= prevLocation;
-                }
-            }
-
-            if (directoryName.length() > 0) {
-                final File path = new File(directoryName);
-                if (path.exists())
-                    dialog.setFilterPath(directoryName);
-            }
-            final String selectedDirectory = dialog.open();
-            if (selectedDirectory != null) {
-                fLinkLocation.setText(selectedDirectory);
-                if (fName == null) {
-                	fFolderNameField.setText(selectedDirectory.substring(selectedDirectory.lastIndexOf(File.separatorChar) + 1));
-                }
-                JavaPlugin.getDefault().getDialogSettings().put(DIALOGSTORE_LAST_EXTERNAL_LOC, selectedDirectory);
-            }
-        }
-
-        /**
-         * Opens a path variable selection dialog
-         */
-        private void handleVariablesButtonPressed() {
-            int variableTypes = IResource.FOLDER;
-
-            // allow selecting file and folder variables when creating a
-            // linked file
-            /*if (type == IResource.FILE)
-                variableTypes |= IResource.FILE;*/
-
-            PathVariableSelectionDialog dialog = new PathVariableSelectionDialog(getShell(), variableTypes);
-            if (dialog.open() == IDialogConstants.OK_ID) {
-                String[] variableNames = (String[]) dialog.getResult();
-                if (variableNames != null && variableNames.length == 1) {
-                    fLinkLocation.setText(variableNames[0]);
-                    if (fName == null) {
-                        fFolderNameField.setText(variableNames[0]);
-                    }
-                }
-            }
-        }
-
-        public void dialogFieldChanged(DialogField field) {
-            fireEvent();
-        }
-
-		private void fireEvent() {
-            setChanged();
-            notifyObservers();
-        }
-    }
-
-    /**
-     * Validate this page and show appropriate warnings and error NewWizardMessages.
-     */
-    private final class Validator implements Observer {
-
-        public void update(Observable o, Object arg) {
-            String name= fFolderNameField.getText();
-            IStatus nameStatus= validateFolderName(name);
-            if (nameStatus.matches(IStatus.ERROR)) {
-            	updateStatus(nameStatus);
-            } else {
-	            IStatus dependencyStatus= validateLinkLocation(name);
-	            updateStatus(StatusUtil.getMoreSevere(nameStatus, dependencyStatus));
-            }
-        }
-
-        /**
-		 * Validates this page's controls.
-         * @param name the folder name
-		 *
-		 * @return IStatus indicating the validation result. IStatus.OK if the
-		 *  specified link target is valid given the linkHandle.
-		 */
-		private IStatus validateLinkLocation(String name) {
-			IWorkspace workspace= JavaPlugin.getWorkspace();
-			IPath path= Path.fromOSString(fDependenciesGroup.getLinkTarget());
-
-			IStatus locationStatus= workspace.validateLinkLocation(fContainer.getFolder(new Path(name)), path);
-			if (locationStatus.matches(IStatus.ERROR))
-				return locationStatus;
-
-			// use the resolved link target name
-			String resolvedLinkTarget= resolveVariable();
-			path= new Path(resolvedLinkTarget);
-			File linkTargetFile= new Path(resolvedLinkTarget).toFile();
-			if (linkTargetFile.exists()) {
-				IStatus fileTypeStatus= validateFileType(linkTargetFile);
-				if (!fileTypeStatus.isOK())
-					return fileTypeStatus;
-			} else
-				if (locationStatus.isOK()) {
-					// locationStatus takes precedence over missing location warning.
-					return new StatusInfo(IStatus.ERROR, NewWizardMessages.NewFolderDialog_linkTargetNonExistent);
-				}
-			if (locationStatus.isOK()) {
-				return new StatusInfo();
-			}
-			return new StatusInfo(locationStatus.getSeverity(), locationStatus.getMessage());
-		}
-
-        /**
-         * Validates the type of the given file against the link type specified
-         * in the constructor.
-         *
-         * @param linkTargetFile file to validate
-         * @return IStatus indicating the validation result. IStatus.OK if the
-         *  given file is valid.
-         */
-        private IStatus validateFileType(File linkTargetFile) {
-            if (!linkTargetFile.isDirectory())
-                return new StatusInfo(IStatus.ERROR, NewWizardMessages.NewFolderDialog_linkTargetNotFolder);
-            return new StatusInfo();
-        }
-
-        /**
-         * Tries to resolve the value entered in the link target field as
-         * a variable, if the value is a relative path.
-         * Displays the resolved value if the entered value is a variable.
-         * @return returns the resolved variable
-         */
-        private String resolveVariable() {
-            IPathVariableManager pathVariableManager = ResourcesPlugin.getWorkspace().getPathVariableManager();
-            IPath path= Path.fromOSString(fDependenciesGroup.getLinkTarget());
-            IPath resolvedPath= pathVariableManager.resolvePath(path);
-            return resolvedPath.toOSString();
-        }
-
-        /**
-         * Checks if the folder name is valid.
-         * @param name the folder name
-         *
-         * @return <code>true</code> if validation was
-         * correct, <code>false</code> otherwise
-         */
-        private IStatus validateFolderName(String name) {
-            if (name.length() == 0) {
-            	return new StatusInfo(IStatus.ERROR, NewWizardMessages.NewFolderDialog_folderNameEmpty);
-            }
-
-            IStatus nameStatus = fContainer.getWorkspace().validateName(name, IResource.FOLDER);
-            if (!nameStatus.matches(IStatus.ERROR)) {
-                return nameStatus;
-            }
-
-            IPath path = new Path(name);
-            if (fContainer.findMember(path) != null) {
-            	return new StatusInfo(IStatus.ERROR, Messages.format(NewWizardMessages.NewFolderDialog_folderNameEmpty_alreadyExists, BasicElementLabels.getResourceName(name)));
-            }
-            return nameStatus;
-        }
-    }
-
-    private FolderNameField fFolderNameField;
-    private LinkFields fDependenciesGroup;
-    private IContainer fContainer;
-	private IFolder fCreatedFolder;
-	private boolean fCreateLink;
-	private String fName;
-	private String fTarget;
-
-    /**
-     * Creates a NewFolderDialog
-     *
-     * @param parentShell parent of the new dialog
-     * @param container parent of the new folder
-     *
-     * @see HintTextGroup
-     */
-    public LinkFolderDialog(Shell parentShell, IContainer container) {
-    	this(parentShell, container, true);
-    }
-
-    public LinkFolderDialog(Shell parentShell, IContainer container, boolean createLink) {
-    	super(parentShell);
-    	fContainer = container;
-		fCreateLink= createLink;
-        setTitle(NewWizardMessages.LinkFolderDialog_title);
-        setStatusLineAboveButtons(true);
-	}
-
-    /*
-	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
-	 * @since 3.4
-	 */
-	protected boolean isResizable() {
-		return true;
-	}
-
-	/* (non-Javadoc)
-     * Method declared in Window.
-     */
-    protected void configureShell(Shell shell) {
-        super.configureShell(shell);
-    }
-
-    /**
-     * @see org.eclipse.jface.window.Window#create()
-     */
-    public void create() {
-        super.create();
-        // initially disable the ok button since we don't preset the
-        // folder name field
-        getButton(IDialogConstants.OK_ID).setEnabled(false);
-    }
-
-    public void setName(String name) {
-		if (fFolderNameField != null) {
-    		fFolderNameField.setText(name);
-    	}
-    	fName= name;
-    }
-
-    public void setLinkTarget(String target) {
-		if (fDependenciesGroup != null) {
-    		fDependenciesGroup.setLinkTarget(target);
-    	}
-    	fTarget= target;
-    }
-
-    /* (non-Javadoc)
-     * Method declared on Dialog.
-     */
-    protected Control createDialogArea(Composite parent) {
-		initializeDialogUnits(parent);
-
-        int numOfColumns= 3;
-        Composite composite = new Composite(parent, SWT.NONE);
-        composite.setFont(parent.getFont());
-
-        GridLayout layout = new GridLayout(numOfColumns, false);
-		layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-		layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
-        composite.setLayout(layout);
-        GridData gridData= new GridData(SWT.FILL, SWT.FILL, true, true);
-        gridData.minimumWidth= convertWidthInCharsToPixels(80);
-        composite.setLayoutData(gridData);
-
-        Label label= new Label(composite, SWT.NONE);
-        label.setFont(composite.getFont());
-        label.setText(Messages.format(NewWizardMessages.LinkFolderDialog_createIn, BasicElementLabels.getPathLabel(fContainer.getFullPath(), false)));
-		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, numOfColumns, 1));
-
-        fDependenciesGroup= new LinkFields(composite, numOfColumns);
-        if (fTarget != null) {
-        	fDependenciesGroup.setLinkTarget(fTarget);
-        }
-        fFolderNameField= new FolderNameField(composite, numOfColumns);
-        if (fName != null) {
-        	fFolderNameField.setText(fName);
-        }
-
-        Validator validator= new Validator();
-        fDependenciesGroup.addObserver(validator);
-        fFolderNameField.addObserver(validator);
-
-        return composite;
-    }
-
-    /**
-     * Creates a folder resource handle for the folder with the given name.
-     * The folder handle is created relative to the container specified during
-     * object creation.
-     *
-     * @param folderName the name of the folder resource to create a handle for
-     * @return the new folder resource handle
-     */
-    private IFolder createFolderHandle(String folderName) {
-        IWorkspaceRoot workspaceRoot = fContainer.getWorkspace().getRoot();
-        IPath folderPath = fContainer.getFullPath().append(folderName);
-        IFolder folderHandle = workspaceRoot.getFolder(folderPath);
-
-        return folderHandle;
-    }
-
-    /**
-     * Creates a new folder with the given name and optionally linking to
-     * the specified link target.
-     *
-     * @param folderName name of the new folder
-     * @param linkTargetName name of the link target folder. may be null.
-     * @return IFolder the new folder
-     */
-    private IFolder createNewFolder(final String folderName, final String linkTargetName) {
-        final IFolder folderHandle = createFolderHandle(folderName);
-
-        WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
-            public void execute(IProgressMonitor monitor) throws CoreException {
-                try {
-                    monitor.beginTask(NewWizardMessages.NewFolderDialog_progress, 2000);
-                    if (monitor.isCanceled())
-                        throw new OperationCanceledException();
-
-                        // create link to folder
-                    folderHandle.createLink(Path.fromOSString(fDependenciesGroup.getLinkTarget()), IResource.ALLOW_MISSING_LOCAL, monitor);
-
-                    if (monitor.isCanceled())
-                        throw new OperationCanceledException();
-                } catch (StringIndexOutOfBoundsException e) {
-                    e.printStackTrace();
-                }
-                finally {
-                    monitor.done();
-                }
-            }
-        };
-
-        try {
-            new ProgressMonitorDialog(getShell())
-                    .run(true, true, operation);
-        } catch (InterruptedException exception) {
-            return null;
-        } catch (InvocationTargetException exception) {
-            if (exception.getTargetException() instanceof CoreException) {
-                ErrorDialog.openError(getShell(), NewWizardMessages.NewFolderDialog_errorTitle,
-                        null, // no special message
-                        ((CoreException) exception.getTargetException())
-                                .getStatus());
-            } else {
-                // CoreExceptions are handled above, but unexpected runtime exceptions and errors may still occur.
-                JavaPlugin.log(new Exception(Messages.format(
-                        "Exception in {0}.createNewFolder(): {1}", //$NON-NLS-1$
-                        new Object[] { getClass().getName(),
-                                exception.getTargetException() })));
-                MessageDialog.openError(getShell(), NewWizardMessages.NewFolderDialog_errorTitle,
-                        Messages.format(
-                                NewWizardMessages.NewFolderDialog_internalError,
-                                new Object[] { exception.getTargetException()
-                                        .getMessage() }));
-            }
-            return null;
-        }
-
-        return folderHandle;
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.dialogs.StatusDialog#updateStatus(org.eclipse.core.runtime.IStatus)
-     */
-    protected void updateStatus(IStatus status) {
-        super.updateStatus(status);
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.dialogs.SelectionStatusDialog#okPressed()
-     */
-    protected void okPressed() {
-    	if (fCreateLink) {
-	        String linkTarget = fDependenciesGroup.getLinkTarget();
-	        linkTarget= linkTarget.length() == 0 ? null : linkTarget;
-	        fCreatedFolder = createNewFolder(fFolderNameField.getText(), linkTarget);
-    	} else {
-    		fCreatedFolder = createFolderHandle(fFolderNameField.getText());
-    	}
-        super.okPressed();
-    }
-
-    /**
-     * Returns the created folder or <code>null</code>
-     * if there is none.
-     *
-     * @return created folder or <code>null</code>
-     */
-    public IFolder getCreatedFolder() {
-        return fCreatedFolder;
-    }
-
-	public IPath getLinkTarget() {
-		return Path.fromOSString(fDependenciesGroup.getLinkTarget());
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
index df788fb..d6e37b8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,7 +68,7 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
 
     public static final String OPEN_SETTING= "org.eclipse.jdt.internal.ui.wizards.buildpaths.NewSourceContainerPage.openSetting";  //$NON-NLS-1$
 
-    private ListDialogField fClassPathList;
+    private ListDialogField<CPListElement> fClassPathList;
     private HintTextGroup fHintTextGroup;
     private DialogPackageExplorer fPackageExplorer;
     private SelectionButtonDialogField fUseFolderOutputs;
@@ -93,7 +93,7 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
      * @param context a runnable context, can be <code>null</code>
      * @param buildPathsBlock
      */
-    public NewSourceContainerWorkbookPage(ListDialogField classPathList, StringDialogField outputLocationField, IRunnableContext context, BuildPathsBlock buildPathsBlock) {
+    public NewSourceContainerWorkbookPage(ListDialogField<CPListElement> classPathList, StringDialogField outputLocationField, IRunnableContext context, BuildPathsBlock buildPathsBlock) {
         fClassPathList= classPathList;
 		fOutputLocationField= outputLocationField;
 		fContext= context;
@@ -117,7 +117,8 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
      *
      * @param javaProject the current java project
      */
-    public void init(IJavaProject javaProject) {
+    @Override
+	public void init(IJavaProject javaProject) {
 		fJavaProject= javaProject;
 		fPackageExplorer.addPostSelectionChangedListener(fHintTextGroup);
 	    fActionGroup.getResetAllAction().setBreakPoint(javaProject);
@@ -137,9 +138,9 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
         fPackageExplorer.setInput(fJavaProject);
 
 		boolean useFolderOutputs= false;
-		List cpelements= fClassPathList.getElements();
+		List<CPListElement> cpelements= fClassPathList.getElements();
 		for (int i= 0; i < cpelements.size() && !useFolderOutputs; i++) {
-			CPListElement cpe= (CPListElement) cpelements.get(i);
+			CPListElement cpe= cpelements.get(i);
 			if (cpe.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 				if (cpe.getAttribute(CPListElement.OUTPUT) != null) {
 					useFolderOutputs= true;
@@ -171,7 +172,8 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
      *
      * @see #init(IJavaProject)
      */
-    public Control getControl(Composite parent) {
+    @Override
+	public Control getControl(Composite parent) {
         final int[] sashWeight= {60};
         final IPreferenceStore preferenceStore= JavaPlugin.getDefault().getPreferenceStore();
         preferenceStore.setDefault(OPEN_SETTING, true);
@@ -194,7 +196,8 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
         final boolean isExpanded= preferenceStore.getBoolean(OPEN_SETTING);
         excomposite.setExpanded(isExpanded);
         excomposite.addExpansionListener(new ExpansionAdapter() {
-                       public void expansionStateChanged(ExpansionEvent e) {
+                       @Override
+					public void expansionStateChanged(ExpansionEvent e) {
                            ScrolledPageContent parentScrolledComposite= getParentScrolledComposite(excomposite);
                            if (parentScrolledComposite != null) {
                               boolean expanded= excomposite.isExpanded();
@@ -217,7 +220,8 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
                 boolean isUseFolders= fUseFolderOutputs.isSelected();
                 if (!isUseFolders) {
                 	ResetAllOutputFoldersAction action= new ResetAllOutputFoldersAction(fContext, fJavaProject, fPackageExplorer) {
-                		public void run() {
+                		@Override
+						public void run() {
                     		commitDefaultOutputFolder();
                     	    super.run();
                     	}
@@ -302,13 +306,14 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#getSelection()
      */
-    public List getSelection() {
-        List selectedList= new ArrayList();
+    @Override
+	public List<CPListElement> getSelection() {
+        List<CPListElement> selectedList= new ArrayList<CPListElement>();
 
         IJavaProject project= fJavaProject;
         try {
-            List list= ((StructuredSelection)fPackageExplorer.getSelection()).toList();
-            List existingEntries= ClasspathModifier.getExistingEntries(project);
+            List<?> list= ((StructuredSelection)fPackageExplorer.getSelection()).toList();
+            List<CPListElement> existingEntries= ClasspathModifier.getExistingEntries(project);
 
             for(int i= 0; i < list.size(); i++) {
                 Object obj= list.get(i);
@@ -326,7 +331,7 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
                 }
             }
         } catch (JavaModelException e) {
-            return new ArrayList();
+            return new ArrayList<CPListElement>();
         }
         return selectedList;
     }
@@ -334,13 +339,14 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#setSelection(java.util.List)
      */
-    public void setSelection(List selection, boolean expand) {
+    @Override
+	public void setSelection(List<?> selection, boolean expand) {
 		// page switch
 
         if (selection.size() == 0)
             return;
 
-		List cpEntries= new ArrayList();
+		List<CPListElement> cpEntries= new ArrayList<CPListElement>();
 
 		for (int i= 0; i < selection.size(); i++) {
 			Object obj= selection.get(i);
@@ -359,10 +365,10 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
 		}
 
         // refresh classpath
-        List list= fClassPathList.getElements();
+        List<CPListElement> list= fClassPathList.getElements();
         IClasspathEntry[] entries= new IClasspathEntry[list.size()];
         for(int i= 0; i < list.size(); i++) {
-            CPListElement entry= (CPListElement) list.get(i);
+            CPListElement entry= list.get(i);
             entries[i]= entry.getClasspathEntry();
         }
         try {
@@ -377,7 +383,8 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
     /* (non-Javadoc)
      * @see org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathBasePage#isEntryKind(int)
      */
-    public boolean isEntryKind(int kind) {
+    @Override
+	public boolean isEntryKind(int kind) {
         return kind == IClasspathEntry.CPE_SOURCE;
     }
 
@@ -421,7 +428,8 @@ public class NewSourceContainerWorkbookPage extends BuildPathBasePage implements
 	/**
      * {@inheritDoc}
      */
-    public void setFocus() {
+    @Override
+	public void setFocus() {
     	fPackageExplorer.getViewerControl().setFocus();
     }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
index 3fc4d86..ca6ca67 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		if (!isEnabled())
 			return null;
@@ -111,6 +112,7 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		try {
 
@@ -126,8 +128,8 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 				project= container.getJavaProject();
 			}
 
-			final List elementsToRemove= new ArrayList();
-			final List foldersToDelete= new ArrayList();
+			final List<Object> elementsToRemove= new ArrayList<Object>();
+			final List<IFolder> foldersToDelete= new ArrayList<IFolder>();
 			queryToRemoveLinkedFolders(elementsToRemove, foldersToDelete);
 
 			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
@@ -138,7 +140,7 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 						CPJavaProject cpProject= CPJavaProject.createFromExisting(project);
 						CPListElement[] toRemove= new CPListElement[elementsToRemove.size()];
 						int i= 0;
-						for (Iterator iterator= elementsToRemove.iterator(); iterator.hasNext();) {
+						for (Iterator<Object> iterator= elementsToRemove.iterator(); iterator.hasNext();) {
 							Object element= iterator.next();
 							if (element instanceof IJavaProject) {
 								toRemove[i]= ClasspathModifier.getListElement(((IJavaProject)element).getPath(), cpProject.getCPListElements());
@@ -160,7 +162,7 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 						if (delta.getDeletedResources().length == foldersToDelete.size()) {
 							selectAndReveal(new StructuredSelection(project));
 						} else {
-							List result= new ArrayList(Arrays.asList(delta.getDeletedResources()));
+							List<IResource> result= new ArrayList<IResource>(Arrays.asList(delta.getDeletedResources()));
 							result.removeAll(foldersToDelete);
 							selectAndReveal(new StructuredSelection(result));
 						}
@@ -185,12 +187,12 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
-	private void deleteFolders(List folders, IProgressMonitor monitor) throws CoreException {
+	private void deleteFolders(List<IFolder> folders, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_RemoveFromBuildpath, folders.size());
 
-			for (Iterator iter= folders.iterator(); iter.hasNext();) {
-				IFolder folder= (IFolder)iter.next();
+			for (Iterator<IFolder> iter= folders.iterator(); iter.hasNext();) {
+				IFolder folder= iter.next();
 				folder.delete(true, true, new SubProgressMonitor(monitor, 1));
 			}
 		} finally {
@@ -198,9 +200,9 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 		}
 	}
 
-	private void queryToRemoveLinkedFolders(final List elementsToRemove, final List foldersToDelete) throws JavaModelException {
+	private void queryToRemoveLinkedFolders(final List<Object> elementsToRemove, final List<IFolder> foldersToDelete) throws JavaModelException {
 		final Shell shell= getShell();
-		for (Iterator iter= getSelectedElements().iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= getSelectedElements().iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IPackageFragmentRoot) {
 				IFolder folder= getLinkedSourceFolder((IPackageFragmentRoot)element);
@@ -241,12 +243,13 @@ public class RemoveFromBuildpathAction extends BuildpathModifierAction {
 		return folder;
 	}
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
 		if (elements.size() == 0)
 			return false;
 
 		try {
-			for (Iterator iter= elements.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 				Object element= iter.next();
 
 				if (element instanceof IJavaProject) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveLinkedFolderDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveLinkedFolderDialog.java
index 35af08c..a942b32 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveLinkedFolderDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveLinkedFolderDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ class RemoveLinkedFolderDialog extends MessageDialog {
 		Assert.isTrue(folder.isLinked());
 	}
 
+	@Override
 	protected Control createCustomArea(final Composite parent) {
 
 		final Composite composite= new Composite(parent, SWT.NONE);
@@ -84,6 +85,7 @@ class RemoveLinkedFolderDialog extends MessageDialog {
 
 	private SelectionListener selectionListener= new SelectionAdapter() {
 
+		@Override
 		public final void widgetSelected(final SelectionEvent event) {
 			final Button button= (Button) event.widget;
 			if (button.getSelection())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java
index 9e08c6c..be4032a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,11 +69,12 @@ public class ResetAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		if (!isEnabled())
 			return null;
 
-		Iterator iterator= getSelectedElements().iterator();
+		Iterator<?> iterator= getSelectedElements().iterator();
 		Object p= iterator.next();
 		while (iterator.hasNext()) {
 			Object q= iterator.next();
@@ -95,6 +96,7 @@ public class ResetAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		final IRunnableWithProgress runnable= new IRunnableWithProgress() {
 			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
@@ -109,7 +111,7 @@ public class ResetAction extends BuildpathModifierAction {
 						project= ((CPListElementAttribute)firstElement).getParent().getJavaProject();
 					}
 
-					List result= reset(getSelectedElements(), project, monitor);
+					List<Object> result= reset(getSelectedElements(), project, monitor);
 					selectAndReveal(new StructuredSelection(result));
 				} catch (CoreException e) {
 					throw new InvocationTargetException(e);
@@ -128,13 +130,13 @@ public class ResetAction extends BuildpathModifierAction {
         }
 	}
 
-	private List reset(List selection, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	private List<Object> reset(List<?> selection, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 	    if (monitor == null)
         	monitor= new NullProgressMonitor();
         try {
         	monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_Resetting, selection.size());
-        	List entries= ClasspathModifier.getExistingEntries(project);
-        	List result= new ArrayList();
+        	List<CPListElement> entries= ClasspathModifier.getExistingEntries(project);
+        	List<Object> result= new ArrayList<Object>();
         	for (int i= 0; i < selection.size(); i++) {
         		Object element= selection.get(i);
         		if (element instanceof IJavaElement) {
@@ -158,7 +160,7 @@ public class ResetAction extends BuildpathModifierAction {
         	ClasspathModifier.commitClassPath(entries, project, null);
 
         	BuildpathDelta delta= new BuildpathDelta(getToolTipText());
-        	delta.setNewEntries((CPListElement[])entries.toArray(new CPListElement[entries.size()]));
+        	delta.setNewEntries(entries.toArray(new CPListElement[entries.size()]));
         	informListeners(delta);
 
         	return result;
@@ -167,9 +169,10 @@ public class ResetAction extends BuildpathModifierAction {
         }
     }
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
 		try {
-	        for (Iterator iterator= elements.iterator(); iterator.hasNext();) {
+	        for (Iterator<?> iterator= elements.iterator(); iterator.hasNext();) {
 	            Object element= iterator.next();
 	            if (element instanceof IJavaProject) {
 	            	IJavaProject project= (IJavaProject)element;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
index 9b01d0f..ae088e4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,7 @@ public class ResetAllAction extends BuildpathModifierAction {
 	private final HintTextGroup fProvider;
 	private final IRunnableContext fContext;
 	private IJavaProject fJavaProject;
-	private List fEntries;
+	private List<CPListElement> fEntries;
 	private IPath fOutputLocation;
 
 	public ResetAllAction(HintTextGroup provider, IRunnableContext context, ISetSelectionTarget selectionTarget) {
@@ -67,6 +67,7 @@ public class ResetAllAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		return NewWizardMessages.PackageExplorerActionGroup_FormText_Default_ResetAll;
 	}
@@ -107,6 +108,7 @@ public class ResetAllAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 
 		try {
@@ -121,13 +123,13 @@ public class ResetAllAction extends BuildpathModifierAction {
 	        			BuildpathDelta delta= new BuildpathDelta(getToolTipText());
 
 	        			ClasspathModifier.commitClassPath(fEntries, fJavaProject, monitor);
-        				delta.setNewEntries((CPListElement[])fEntries.toArray(new CPListElement[fEntries.size()]));
+        				delta.setNewEntries(fEntries.toArray(new CPListElement[fEntries.size()]));
 
 	        			fJavaProject.setOutputLocation(fOutputLocation, monitor);
 	        			delta.setDefaultOutputLocation(fOutputLocation);
 
-	        			for (Iterator iterator= fProvider.getCreatedResources().iterator(); iterator.hasNext();) {
-	                        IResource resource= (IResource)iterator.next();
+	        			for (Iterator<IResource> iterator= fProvider.getCreatedResources().iterator(); iterator.hasNext();) {
+	                        IResource resource= iterator.next();
 	                        resource.delete(false, null);
 	                        delta.addDeletedResource(resource);
                         }
@@ -161,7 +163,8 @@ public class ResetAllAction extends BuildpathModifierAction {
 	/**
      * {@inheritDoc}
      */
-    protected boolean canHandle(IStructuredSelection elements) {
+    @Override
+	protected boolean canHandle(IStructuredSelection elements) {
     	if (fJavaProject == null)
     		return false;
 
@@ -179,8 +182,8 @@ public class ResetAllAction extends BuildpathModifierAction {
             return true;
 
         int i= 0;
-        for (Iterator iterator= fEntries.iterator(); iterator.hasNext();) {
-	        CPListElement oldEntrie= (CPListElement)iterator.next();
+        for (Iterator<CPListElement> iterator= fEntries.iterator(); iterator.hasNext();) {
+	        CPListElement oldEntrie= iterator.next();
 	        if (!oldEntrie.getClasspathEntry().equals(currentEntries[i]))
 	        	return true;
 	        i++;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
index 0a3ec24..72dfde0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class ResetAllOutputFoldersAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public String getDetailedDescription() {
 		return NewWizardMessages.PackageExplorerActionGroup_FormText_Default_ResetAllOutputFolders;
 	}
@@ -70,6 +71,7 @@ public class ResetAllOutputFoldersAction extends BuildpathModifierAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		final IRunnableWithProgress runnable= new IRunnableWithProgress() {
 			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
@@ -92,13 +94,13 @@ public class ResetAllOutputFoldersAction extends BuildpathModifierAction {
         }
 	}
 
-	private List resetOutputFolders(IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	private List<Object> resetOutputFolders(IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 		if (monitor == null)
 			monitor= new NullProgressMonitor();
 		try {
 			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_ResetOutputFolder, roots.length + 10);
-			List entries= new ArrayList();
+			List<CPListElementAttribute> entries= new ArrayList<CPListElementAttribute>();
 			for (int i= 0; i < roots.length; i++) {
 				monitor.worked(1);
 				IPackageFragmentRoot root= roots[i];
@@ -115,13 +117,13 @@ public class ResetAllOutputFoldersAction extends BuildpathModifierAction {
 		}
 	}
 
-	private List reset(List selection, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+	private List<Object> reset(List<CPListElementAttribute> selection, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 	    if (monitor == null)
         	monitor= new NullProgressMonitor();
         try {
         	monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_Resetting, selection.size());
-        	List entries= ClasspathModifier.getExistingEntries(project);
-        	List result= new ArrayList();
+        	List<CPListElement> entries= ClasspathModifier.getExistingEntries(project);
+        	List<Object> result= new ArrayList<Object>();
         	for (int i= 0; i < selection.size(); i++) {
         		Object element= selection.get(i);
         		if (element instanceof IJavaElement) {
@@ -145,7 +147,7 @@ public class ResetAllOutputFoldersAction extends BuildpathModifierAction {
         	ClasspathModifier.commitClassPath(entries, project, null);
 
         	BuildpathDelta delta= new BuildpathDelta(getToolTipText());
-        	delta.setNewEntries((CPListElement[])entries.toArray(new CPListElement[entries.size()]));
+        	delta.setNewEntries(entries.toArray(new CPListElement[entries.size()]));
         	informListeners(delta);
 
         	return result;
@@ -154,6 +156,7 @@ public class ResetAllOutputFoldersAction extends BuildpathModifierAction {
         }
     }
 
+	@Override
 	protected boolean canHandle(IStructuredSelection elements) {
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
index 44ef1d9..e9a3a54 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,19 +32,21 @@ import org.eclipse.jface.viewers.TableViewer;
  * A list with check boxes and a button bar. Typical buttons are 'Check All' and 'Uncheck All'.
  * List model is independent of widget creation.
  * DialogFields controls are: Label, List and Composite containing buttons.
+ * 
+ * @param <E> the type of the list elements
  */
-public class CheckedListDialogField extends ListDialogField {
+public class CheckedListDialogField<E> extends ListDialogField<E> {
 
 	private int fCheckAllButtonIndex;
 	private int fUncheckAllButtonIndex;
 
-	private List fCheckedElements;
-	private List fGrayedElements;
+	private List<E> fCheckedElements;
+	private List<E> fGrayedElements;
 
-	public CheckedListDialogField(IListAdapter adapter, String[] customButtonLabels, ILabelProvider lprovider) {
+	public CheckedListDialogField(IListAdapter<E> adapter, String[] customButtonLabels, ILabelProvider lprovider) {
 		super(adapter, customButtonLabels, lprovider);
-		fCheckedElements= new ArrayList();
-		fGrayedElements= new ArrayList();
+		fCheckedElements= new ArrayList<E>();
+		fGrayedElements= new ArrayList<E>();
 
 		fCheckAllButtonIndex= -1;
 		fUncheckAllButtonIndex= -1;
@@ -78,6 +80,7 @@ public class CheckedListDialogField extends ListDialogField {
 	/*
 	 * @see ListDialogField#createTableViewer
 	 */
+	@Override
 	protected TableViewer createTableViewer(Composite parent) {
 		Table table= new Table(parent, SWT.CHECK | getListStyle());
 		table.setFont(parent.getFont());
@@ -94,6 +97,7 @@ public class CheckedListDialogField extends ListDialogField {
 	/*
 	 * @see ListDialogField#getListControl
 	 */
+	@Override
 	public Control getListControl(Composite parent) {
 		Control control= super.getListControl(parent);
 		if (parent != null) {
@@ -107,6 +111,7 @@ public class CheckedListDialogField extends ListDialogField {
 	 * @see DialogField#dialogFieldChanged
 	 * Hooks in to get element changes to update check model.
 	 */
+	@Override
 	public void dialogFieldChanged() {
 		for (int i= fCheckedElements.size() -1; i >= 0; i--) {
 			if (!fElements.contains(fCheckedElements.get(i))) {
@@ -126,19 +131,20 @@ public class CheckedListDialogField extends ListDialogField {
 	 * 
 	 * @return the list of checked elements
 	 */
-	public List getCheckedElements() {
+	@SuppressWarnings("unchecked")
+	public List<E> getCheckedElements() {
 		if (isOkToUse(fTableControl)) {
 			// workaround for bug 53853
 			Object[] checked= ((CheckboxTableViewer) fTable).getCheckedElements();
-			ArrayList res= new ArrayList(checked.length);
+			ArrayList<E> res= new ArrayList<E>(checked.length);
 			for (int i= 0; i < checked.length; i++) {
-				res.add(checked[i]);
+				res.add((E) checked[i]);
 			}
 			return res;
 		}
 
 
-		return new ArrayList(fCheckedElements);
+		return new ArrayList<E>(fCheckedElements);
 	}
 
 	/**
@@ -177,8 +183,8 @@ public class CheckedListDialogField extends ListDialogField {
 	 * 
 	 * @param list the list of checked elements
 	 */
-	public void setCheckedElements(Collection list) {
-		fCheckedElements= new ArrayList(list);
+	public void setCheckedElements(Collection<E> list) {
+		fCheckedElements= new ArrayList<E>(list);
 		if (isOkToUse(fTableControl)) {
 			((CheckboxTableViewer)fTable).setCheckedElements(list.toArray());
 		}
@@ -191,7 +197,7 @@ public class CheckedListDialogField extends ListDialogField {
 	 * @param object the element for which to set the state
 	 * @param state the checked state
 	 */
-	public void setChecked(Object object, boolean state) {
+	public void setChecked(E object, boolean state) {
 		setCheckedWithoutUpdate(object, state);
 		checkStateChanged();
 	}
@@ -202,7 +208,7 @@ public class CheckedListDialogField extends ListDialogField {
 	 * @param object the element for which to set the state
 	 * @param state the checked state
 	 */
-	public void setCheckedWithoutUpdate(Object object, boolean state) {
+	public void setCheckedWithoutUpdate(E object, boolean state) {
 		if (state) {
 			if (!fCheckedElements.contains(object)) {
 				fCheckedElements.add(object);
@@ -215,7 +221,7 @@ public class CheckedListDialogField extends ListDialogField {
 		}
 	}
 
-	public void setGrayedWithoutUpdate(Object object, boolean state) {
+	public void setGrayedWithoutUpdate(E object, boolean state) {
 		if (state) {
 			if (!fGrayedElements.contains(object)) {
 				fGrayedElements.add(object);
@@ -248,7 +254,7 @@ public class CheckedListDialogField extends ListDialogField {
 
 	private void doCheckStateChanged(CheckStateChangedEvent e) {
 		if (e.getChecked()) {
-			fCheckedElements.add(e.getElement());
+			fCheckedElements.add((E) e.getElement());
 		} else {
 			fCheckedElements.remove(e.getElement());
 		}
@@ -258,7 +264,8 @@ public class CheckedListDialogField extends ListDialogField {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField#replaceElement(java.lang.Object, java.lang.Object)
 	 */
-	public void replaceElement(Object oldElement, Object newElement) throws IllegalArgumentException {
+	@Override
+	public void replaceElement(E oldElement, E newElement) throws IllegalArgumentException {
 		boolean wasChecked= isChecked(oldElement);
 		super.replaceElement(oldElement, newElement);
 		setChecked(newElement, wasChecked);
@@ -269,6 +276,7 @@ public class CheckedListDialogField extends ListDialogField {
 	/*
 	 * @see ListDialogField#getManagedButtonState
 	 */
+	@Override
 	protected boolean getManagedButtonState(ISelection sel, int index) {
 		if (index == fCheckAllButtonIndex) {
 			return !fElements.isEmpty();
@@ -281,6 +289,7 @@ public class CheckedListDialogField extends ListDialogField {
 	/*
 	 * @see ListDialogField#extraButtonPressed
 	 */
+	@Override
 	protected boolean managedButtonPressed(int index) {
 		if (index == fCheckAllButtonIndex) {
 			checkAll(true);
@@ -292,6 +301,7 @@ public class CheckedListDialogField extends ListDialogField {
 		return true;
 	}
 
+	@Override
 	public void refresh() {
 		super.refresh();
 		if (isOkToUse(fTableControl)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java
index e2d02f7..8ebe0a9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@ public class ComboDialogField extends DialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		assertEnoughColumns(nColumns);
 
@@ -61,6 +62,7 @@ public class ComboDialogField extends DialogField {
 	/*
 	 * @see DialogField#getNumberOfControls
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return 2;
 	}
@@ -78,6 +80,7 @@ public class ComboDialogField extends DialogField {
 	/*
 	 * @see DialogField#setFocus
 	 */
+	@Override
 	public boolean setFocus() {
 		if (isOkToUse(fComboControl)) {
 			fComboControl.setFocus();
@@ -147,6 +150,7 @@ public class ComboDialogField extends DialogField {
 	/*
 	 * @see DialogField#updateEnableState
 	 */
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 		if (isOkToUse(fComboControl)) {
@@ -247,6 +251,7 @@ public class ComboDialogField extends DialogField {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
 	 */
+	@Override
 	public void refresh() {
 		super.refresh();
 		setTextWithoutUpdate(fText);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/IListAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/IListAdapter.java
index 36786c4..8b377c7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/IListAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/IListAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,22 +12,31 @@ package org.eclipse.jdt.internal.ui.wizards.dialogfields;
 
 /**
  * Change listener used by <code>ListDialogField</code> and <code>CheckedListDialogField</code>
+ * 
+ * @param <E> the type of the list elements
  */
-public interface IListAdapter {
+public interface IListAdapter<E> {
 
 	/**
 	 * A button from the button bar has been pressed.
+	 * 
+	 * @param field the dialog field 
+	 * @param index the button index
 	 */
-	void customButtonPressed(ListDialogField field, int index);
+	void customButtonPressed(ListDialogField<E> field, int index);
 
 	/**
 	 * The selection of the list has changed.
+	 * 
+	 * @param field the dialog field 
 	 */
-	void selectionChanged(ListDialogField field);
+	void selectionChanged(ListDialogField<E> field);
 
 	/**
-	 * En entry in the list has been double clicked
+	 * An entry in the list has been double clicked
+	 * 
+	 * @param field the dialog field 
 	 */
-	void doubleClicked(ListDialogField field);
+	void doubleClicked(ListDialogField<E> field);
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ITreeListAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ITreeListAdapter.java
index 3dff256..cd9eb3e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ITreeListAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ITreeListAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,33 +14,35 @@ import org.eclipse.swt.events.KeyEvent;
 
 /**
  * Change listener used by <code>TreeListDialogField</code>
+ * 
+ * @param <E> the type of the root elements
  */
-public interface ITreeListAdapter {
+public interface ITreeListAdapter<E> {
 
 	/**
 	 * A button from the button bar has been pressed.
 	 */
-	void customButtonPressed(TreeListDialogField field, int index);
+	void customButtonPressed(TreeListDialogField<E> field, int index);
 
 	/**
 	 * The selection of the list has changed.
 	 */
-	void selectionChanged(TreeListDialogField field);
+	void selectionChanged(TreeListDialogField<E> field);
 
 	/**
 	 * The list has been double clicked
 	 */
-	void doubleClicked(TreeListDialogField field);
+	void doubleClicked(TreeListDialogField<E> field);
 
 	/**
 	 * A key has been pressed
 	 */
-	void keyPressed(TreeListDialogField field, KeyEvent event);
+	void keyPressed(TreeListDialogField<E> field, KeyEvent event);
 
-	Object[] getChildren(TreeListDialogField field, Object element);
+	Object[] getChildren(TreeListDialogField<E> field, Object element);
 
-	Object getParent(TreeListDialogField field, Object element);
+	Object getParent(TreeListDialogField<E> field, Object element);
 
-	boolean hasChildren(TreeListDialogField field, Object element);
+	boolean hasChildren(TreeListDialogField<E> field, Object element);
 
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java
index 0aabe11..1ec492d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,8 +59,10 @@ import org.eclipse.jdt.internal.ui.util.TableLayoutComposite;
  * Typical buttons are 'Add', 'Remove', 'Up' and 'Down'.
  * List model is independent of widget creation.
  * DialogFields controls are: Label, List and Composite containing buttons.
+ * 
+ * @param <E> the type of the list elements
  */
-public class ListDialogField extends DialogField {
+public class ListDialogField<E> extends DialogField {
 
 	public static class ColumnsDescription {
 		private ColumnLayoutData[] columns;
@@ -94,7 +96,7 @@ public class ListDialogField extends DialogField {
 	protected Control fTableControl;
 	protected ILabelProvider fLabelProvider;
 	protected ListViewerAdapter fListViewerAdapter;
-	protected List fElements;
+	protected List<E> fElements;
 	protected ViewerComparator fViewerComparator;
 
 	protected String[] fButtonLabels;
@@ -112,7 +114,7 @@ public class ListDialogField extends DialogField {
 	private Composite fButtonsControl;
 	private ISelection fSelectionWhenEnabled;
 
-	private IListAdapter fListAdapter;
+	private IListAdapter<E> fListAdapter;
 
 	private Object fParentElement;
 
@@ -127,7 +129,7 @@ public class ListDialogField extends DialogField {
 	 * marks a separator.
 	 * @param lprovider The label provider to render the table entries
 	 */
-	public ListDialogField(IListAdapter adapter, String[] buttonLabels, ILabelProvider lprovider) {
+	public ListDialogField(IListAdapter<E> adapter, String[] buttonLabels, ILabelProvider lprovider) {
 		super();
 		fListAdapter= adapter;
 
@@ -135,7 +137,7 @@ public class ListDialogField extends DialogField {
 		fListViewerAdapter= new ListViewerAdapter();
 		fParentElement= this;
 
-		fElements= new ArrayList(10);
+		fElements= new ArrayList<E>(10);
 
 		fButtonLabels= buttonLabels;
 		if (fButtonLabels != null) {
@@ -237,6 +239,7 @@ public class ListDialogField extends DialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		PixelConverter converter= new PixelConverter(parent);
 
@@ -274,6 +277,7 @@ public class ListDialogField extends DialogField {
 	/*
 	 * @see DialogField#getNumberOfControls
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return 3;
 	}
@@ -287,6 +291,18 @@ public class ListDialogField extends DialogField {
 		}
 	}
 
+	// ------- focus methods
+
+	/*
+	 * @see DialogField#setFocus
+	 */
+	@Override
+	public boolean setFocus() {
+		if (fTable != null && isOkToUse(fTable.getControl())) {
+			fTable.getControl().setFocus();
+		}
+		return true;
+	}
 
 	// ------ UI creation
 
@@ -327,6 +343,7 @@ public class ListDialogField extends DialogField {
 			}
 
 			fTable.getTable().addKeyListener(new KeyAdapter() {
+				@Override
 				public void keyPressed(KeyEvent e) {
 					handleKeyPressed(e);
 				}
@@ -482,6 +499,7 @@ public class ListDialogField extends DialogField {
 	/*
 	 * @see DialogField#dialogFieldChanged
 	 */
+	@Override
 	public void dialogFieldChanged() {
 		super.dialogFieldChanged();
 		updateButtonState();
@@ -516,6 +534,7 @@ public class ListDialogField extends DialogField {
 	/*
 	 * @see DialogField#updateEnableState
 	 */
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 
@@ -556,8 +575,8 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Sets the elements shown in the list.
 	 */
-	public void setElements(Collection elements) {
-		fElements= new ArrayList(elements);
+	public void setElements(Collection<E> elements) {
+		fElements= new ArrayList<E>(elements);
 		if (isOkToUse(fTableControl)) {
 			fTable.refresh();
 		}
@@ -568,33 +587,33 @@ public class ListDialogField extends DialogField {
 	 * Gets the elements shown in the list.
 	 * The list returned is a copy, so it can be modified by the user.
 	 */
-	public List getElements() {
-		return new ArrayList(fElements);
+	public List<E> getElements() {
+		return new ArrayList<E>(fElements);
 	}
 
 	/**
 	 * Gets the elements shown at the given index.
 	 */
-	public Object getElement(int index) {
+	public E getElement(int index) {
 		return fElements.get(index);
 	}
 
 	/**
 	* Gets the index of an element in the list or -1 if element is not in list.
 	*/
-	public int getIndexOfElement(Object elem) {
+	public int getIndexOfElement(E elem) {
 		return fElements.indexOf(elem);
 	}
 
 	/**
 	 * Replaces an element.
 	 */
-	public void replaceElement(Object oldElement, Object newElement) throws IllegalArgumentException {
+	public void replaceElement(E oldElement, E newElement) throws IllegalArgumentException {
 		int idx= fElements.indexOf(oldElement);
 		if (idx != -1) {
 			fElements.set(idx, newElement);
 			if (isOkToUse(fTableControl)) {
-				List selected= getSelectedElements();
+				List<E> selected= getSelectedElements();
 				if (selected.remove(oldElement)) {
 					selected.add(newElement);
 				}
@@ -610,7 +629,7 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Notifies clients that the element has changed.
 	 */
-	public void elementChanged(Object element) throws IllegalArgumentException {
+	public void elementChanged(E element) throws IllegalArgumentException {
 		if (fElements.contains(element)) {
 			if (isOkToUse(fTableControl)) {
 				fTable.update(element, null);
@@ -624,14 +643,14 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Adds an element at the end of the list.
 	 */
-	public boolean addElement(Object element) {
+	public boolean addElement(E element) {
 		return addElement(element, fElements.size());
 	}
 
 	/**
 	 * Adds an element at a position.
 	 */
-	public boolean addElement(Object element, int index) {
+	public boolean addElement(E element, int index) {
 		if (fElements.contains(element)) {
 			return false;
 		}
@@ -648,16 +667,16 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Adds elements at the given index
 	 */
-	public boolean addElements(List elements, int index) {
+	public boolean addElements(List<E> elements, int index) {
 
 		int nElements= elements.size();
 
 		if (nElements > 0 && index >= 0 && index <= fElements.size()) {
 			// filter duplicated
-			ArrayList elementsToAdd= new ArrayList(nElements);
+			ArrayList<E> elementsToAdd= new ArrayList<E>(nElements);
 
 			for (int i= 0; i < nElements; i++) {
-				Object elem= elements.get(i);
+				E elem= elements.get(i);
 				if (!fElements.contains(elem)) {
 					elementsToAdd.add(elem);
 				}
@@ -684,7 +703,7 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Adds elements at the end of the list.
 	 */
-	public boolean addElements(List elements) {
+	public boolean addElements(List<E> elements) {
 		return addElements(elements, fElements.size());
 	}
 
@@ -720,7 +739,7 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Removes elements from the list.
 	 */
-	public void removeElements(List elements) {
+	public void removeElements(List<E> elements) {
 		if (elements.size() > 0) {
 			fElements.removeAll(elements);
 			if (isOkToUse(fTableControl)) {
@@ -787,6 +806,7 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Refreshes the table.
 	 */
+	@Override
 	public void refresh() {
 		super.refresh();
 		if (isOkToUse(fTableControl)) {
@@ -796,12 +816,12 @@ public class ListDialogField extends DialogField {
 
 	// ------- list maintenance
 
-	private List moveUp(List elements, List move) {
+	private List<E> moveUp(List<E> elements, List<E> move) {
 		int nElements= elements.size();
-		List res= new ArrayList(nElements);
-		Object floating= null;
+		List<E> res= new ArrayList<E>(nElements);
+		E floating= null;
 		for (int i= 0; i < nElements; i++) {
-			Object curr= elements.get(i);
+			E curr= elements.get(i);
 			if (move.contains(curr)) {
 				res.add(curr);
 			} else {
@@ -817,22 +837,22 @@ public class ListDialogField extends DialogField {
 		return res;
 	}
 
-	private void moveUp(List toMoveUp) {
+	private void moveUp(List<E> toMoveUp) {
 		if (toMoveUp.size() > 0) {
 			setElements(moveUp(fElements, toMoveUp));
 			fTable.reveal(toMoveUp.get(0));
 		}
 	}
 
-	private void moveDown(List toMoveDown) {
+	private void moveDown(List<E> toMoveDown) {
 		if (toMoveDown.size() > 0) {
 			setElements(reverse(moveUp(reverse(fElements), toMoveDown)));
 			fTable.reveal(toMoveDown.get(toMoveDown.size() - 1));
 		}
 	}
 
-	private List reverse(List p) {
-		List reverse= new ArrayList(p.size());
+	private List<E> reverse(List<E> p) {
+		List<E> reverse= new ArrayList<E>(p.size());
 		for (int i= p.size()-1; i >= 0; i--) {
 			reverse.add(p.get(i));
 		}
@@ -880,14 +900,15 @@ public class ListDialogField extends DialogField {
 	/**
 	 * Returns the selected elements.
 	 */
-	public List getSelectedElements() {
-		List result= new ArrayList();
+	public List<E> getSelectedElements() {
+		List<E> result= new ArrayList<E>();
 		if (isOkToUse(fTableControl)) {
 			ISelection selection= fTable.getSelection();
 			if (selection instanceof IStructuredSelection) {
-				Iterator iter= ((IStructuredSelection)selection).iterator();
+				Iterator<?> iter= ((IStructuredSelection)selection).iterator();
 				while (iter.hasNext()) {
-					result.add(iter.next());
+					E element= (E) iter.next();
+					result.add(element);
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java
index d268070..2add235 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,7 @@ public class SelectionButtonDialogField extends DialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		assertEnoughColumns(nColumns);
 
@@ -98,6 +99,7 @@ public class SelectionButtonDialogField extends DialogField {
 	/*
 	 * @see DialogField#getNumberOfControls
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return 1;
 	}
@@ -157,6 +159,7 @@ public class SelectionButtonDialogField extends DialogField {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#setLabelText(java.lang.String)
 	 */
+	@Override
 	public void setLabelText(String labeltext) {
 		fLabelText= labeltext;
 		if (isOkToUse(fButton)) {
@@ -189,6 +192,7 @@ public class SelectionButtonDialogField extends DialogField {
 	/*
 	 * @see DialogField#updateEnableState
 	 */
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 		if (isOkToUse(fButton)) {
@@ -199,6 +203,7 @@ public class SelectionButtonDialogField extends DialogField {
 	/*(non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
 	 */
+	@Override
 	public void refresh() {
 		super.refresh();
 		if (isOkToUse(fButton)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogFieldGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogFieldGroup.java
index 931f10d..3ebc6e9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogFieldGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogFieldGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,6 +83,7 @@ public class SelectionButtonDialogFieldGroup extends DialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		assertEnoughColumns(nColumns);
 
@@ -109,6 +110,7 @@ public class SelectionButtonDialogFieldGroup extends DialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return (fGroupBorderStyle == SWT.NONE) ? 2 : 1;
 	}
@@ -230,6 +232,7 @@ public class SelectionButtonDialogFieldGroup extends DialogField {
 
 	// ------ enable / disable management
 
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 		if (fButtons != null) {
@@ -262,6 +265,7 @@ public class SelectionButtonDialogFieldGroup extends DialogField {
 	/*(non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
 	 */
+	@Override
 	public void refresh() {
 		super.refresh();
 		for (int i= 0; i < fButtons.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/Separator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/Separator.java
index cd19473..5a71849 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/Separator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/Separator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ public class Separator extends DialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		return doFillIntoGrid(parent, nColumns, 4);
 	}
@@ -62,6 +63,7 @@ public class Separator extends DialogField {
 	/*
 	 * @see DialogField#getNumberOfControls
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return 1;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonDialogField.java
index 0f20226..cf6780c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class StringButtonDialogField extends StringDialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		assertEnoughColumns(nColumns);
 
@@ -77,6 +78,7 @@ public class StringButtonDialogField extends StringDialogField {
 	/*
 	 * @see DialogField#getNumberOfControls
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return 3;
 	}
@@ -133,6 +135,7 @@ public class StringButtonDialogField extends StringDialogField {
 	/*
 	 * @see DialogField#updateEnableState
 	 */
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 		if (isOkToUse(fBrowseButton)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonStatusDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonStatusDialogField.java
index a94abc9..290c37f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonStatusDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringButtonStatusDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,6 +91,7 @@ public class StringButtonStatusDialogField extends StringButtonDialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		assertEnoughColumns(nColumns);
 
@@ -109,6 +110,7 @@ public class StringButtonStatusDialogField extends StringButtonDialogField {
 	/*
 	 * @see DialogField#getNumberOfControls
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return 4;
 	}
@@ -160,6 +162,7 @@ public class StringButtonStatusDialogField extends StringButtonDialogField {
 	/*
 	 * @see DialogField#updateEnableState
 	 */
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 		if (isOkToUse(fStatusLabelControl)) {
@@ -170,6 +173,7 @@ public class StringButtonStatusDialogField extends StringButtonDialogField {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
 	 */
+	@Override
 	public void refresh() {
 		super.refresh();
 		if (fStatus instanceof String) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java
index 6978a1b..b403f73 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class StringDialogField extends DialogField {
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		assertEnoughColumns(nColumns);
 
@@ -68,6 +69,7 @@ public class StringDialogField extends DialogField {
 	/*
 	 * @see DialogField#getNumberOfControls
 	 */
+	@Override
 	public int getNumberOfControls() {
 		return 2;
 	}
@@ -85,6 +87,7 @@ public class StringDialogField extends DialogField {
 	/*
 	 * @see DialogField#setFocus
 	 */
+	@Override
 	public boolean setFocus() {
 		if (isOkToUse(fTextControl)) {
 			fTextControl.setFocus();
@@ -147,6 +150,7 @@ public class StringDialogField extends DialogField {
 	/*
 	 * @see DialogField#updateEnableState
 	 */
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 		if (isOkToUse(fTextControl)) {
@@ -192,6 +196,7 @@ public class StringDialogField extends DialogField {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
 	 */
+	@Override
 	public void refresh() {
 		super.refresh();
 		if (isOkToUse(fTextControl)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java
index 4ce29da..b8c8e93 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ public class TextBoxDialogField extends StringDialogField {
 	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField#createTextControl(org.eclipse.swt.widgets.Composite)
 	 * @since 3.6
 	 */
+	@Override
 	protected Text createTextControl(Composite parent) {
 		Text text= new Text(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
 		text.addTraverseListener(new TraverseListener() {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java
index da7df7f..be1dcf1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,17 +48,19 @@ import org.eclipse.jdt.internal.ui.util.SWTUtil;
 
 
 /**
- * A list with a button bar.
+ * A tree with a button bar.
  * Typical buttons are 'Add', 'Remove', 'Up' and 'Down'.
- * List model is independent of widget creation.
- * DialogFields controls are: Label, List and Composite containing buttons.
+ * Tree model is independent of widget creation.
+ * DialogFields controls are: Label, Tree, and Composite containing buttons.
+ * 
+ * @param <E> the type of the root elements
  */
-public class TreeListDialogField extends DialogField {
+public class TreeListDialogField<E> extends DialogField {
 
 	protected TreeViewer fTree;
 	protected ILabelProvider fLabelProvider;
 	protected TreeViewerAdapter fTreeViewerAdapter;
-	protected List fElements;
+	protected List<E> fElements;
 	protected ViewerComparator fViewerComparator;
 
 	protected String[] fButtonLabels;
@@ -76,7 +78,7 @@ public class TreeListDialogField extends DialogField {
 	private Composite fButtonsControl;
 	private ISelection fSelectionWhenEnabled;
 
-	private ITreeListAdapter fTreeAdapter;
+	private ITreeListAdapter<E> fTreeAdapter;
 
 	private Object fParentElement;
 	private int fTreeExpandLevel;
@@ -84,7 +86,7 @@ public class TreeListDialogField extends DialogField {
 	/**
 	 * @param adapter Can be <code>null</code>.
 	 */
-	public TreeListDialogField(ITreeListAdapter adapter, String[] buttonLabels, ILabelProvider lprovider) {
+	public TreeListDialogField(ITreeListAdapter<E> adapter, String[] buttonLabels, ILabelProvider lprovider) {
 		super();
 		fTreeAdapter= adapter;
 
@@ -92,7 +94,7 @@ public class TreeListDialogField extends DialogField {
 		fTreeViewerAdapter= new TreeViewerAdapter();
 		fParentElement= this;
 
-		fElements= new ArrayList(10);
+		fElements= new ArrayList<E>(10);
 
 		fButtonLabels= buttonLabels;
 		if (fButtonLabels != null) {
@@ -192,6 +194,7 @@ public class TreeListDialogField extends DialogField {
 	/*
 	* @see DialogField#doFillIntoGrid
 	*/
+	@Override
 	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
 		PixelConverter converter= new PixelConverter(parent);
 
@@ -229,6 +232,7 @@ public class TreeListDialogField extends DialogField {
 	/*
 	* @see DialogField#getNumberOfControls
 	*/
+	@Override
 	public int getNumberOfControls() {
 		return 3;
 	}
@@ -258,6 +262,7 @@ public class TreeListDialogField extends DialogField {
 
 			fTreeControl= (Tree) fTree.getControl();
 			fTreeControl.addKeyListener(new KeyAdapter() {
+				@Override
 				public void keyPressed(KeyEvent e) {
 					handleKeyPressed(e);
 				}
@@ -410,6 +415,7 @@ public class TreeListDialogField extends DialogField {
 	/*
 	* @see DialogField#dialogFieldChanged
 	*/
+	@Override
 	public void dialogFieldChanged() {
 		super.dialogFieldChanged();
 		updateButtonState();
@@ -431,7 +437,7 @@ public class TreeListDialogField extends DialogField {
 	}
 
 
-	protected boolean containsAttributes(List selected) {
+	protected boolean containsAttributes(List<Object> selected) {
 		for (int i= 0; i < selected.size(); i++) {
 			if (!fElements.contains(selected.get(i))) {
 				return true;
@@ -442,7 +448,7 @@ public class TreeListDialogField extends DialogField {
 
 
 	protected boolean getManagedButtonState(ISelection sel, int index) {
-		List selected= getSelectedElements();
+		List<Object> selected= getSelectedElements();
 		boolean hasAttributes= containsAttributes(selected);
 		if (index == fRemoveButtonIndex) {
 			return !selected.isEmpty() && !hasAttributes;
@@ -457,6 +463,7 @@ public class TreeListDialogField extends DialogField {
 	/*
 	* @see DialogField#updateEnableState
 	*/
+	@Override
 	protected void updateEnableState() {
 		super.updateEnableState();
 
@@ -495,8 +502,8 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Sets the elements shown in the list.
 	*/
-	public void setElements(List elements) {
-		fElements= new ArrayList(elements);
+	public void setElements(List<E> elements) {
+		fElements= new ArrayList<E>(elements);
 		refresh();
 		if (isOkToUse(fTreeControl)) {
 			fTree.expandToLevel(fTreeExpandLevel);
@@ -508,14 +515,14 @@ public class TreeListDialogField extends DialogField {
 	* Gets the elements shown in the list.
 	* The list returned is a copy, so it can be modified by the user.
 	*/
-	public List getElements() {
-		return new ArrayList(fElements);
+	public List<E> getElements() {
+		return new ArrayList<E>(fElements);
 	}
 
 	/**
 	* Gets the element shown at the given index.
 	*/
-	public Object getElement(int index) {
+	public E getElement(int index) {
 		return fElements.get(index);
 	}
 
@@ -529,12 +536,12 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Replace an element.
 	*/
-	public void replaceElement(Object oldElement, Object newElement) throws IllegalArgumentException {
+	public void replaceElement(E oldElement, E newElement) throws IllegalArgumentException {
 		int idx= fElements.indexOf(oldElement);
 		if (idx != -1) {
 			fElements.set(idx, newElement);
 			if (isOkToUse(fTreeControl)) {
-				List selected= getSelectedElements();
+				List<Object> selected= getSelectedElements();
 				if (selected.remove(oldElement)) {
 					selected.add(newElement);
 				}
@@ -555,7 +562,7 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Adds an element at the end of the tree list.
 	*/
-	public boolean addElement(Object element) {
+	public boolean addElement(E element) {
 		if (fElements.contains(element)) {
 			return false;
 		}
@@ -571,15 +578,15 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Adds elements at the end of the tree list.
 	*/
-	public boolean addElements(List elements) {
+	public boolean addElements(List<E> elements) {
 		int nElements= elements.size();
 
 		if (nElements > 0) {
 			// filter duplicated
-			ArrayList elementsToAdd= new ArrayList(nElements);
+			ArrayList<E> elementsToAdd= new ArrayList<E>(nElements);
 
 			for (int i= 0; i < nElements; i++) {
-				Object elem= elements.get(i);
+				E elem= elements.get(i);
 				if (!fElements.contains(elem)) {
 					elementsToAdd.add(elem);
 				}
@@ -602,7 +609,7 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Adds an element at a position.
 	*/
-	public void insertElementAt(Object element, int index) {
+	public void insertElementAt(E element, int index) {
 		if (fElements.contains(element)) {
 			return;
 		}
@@ -631,7 +638,7 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Removes an element from the list.
 	*/
-	public void removeElement(Object element) throws IllegalArgumentException {
+	public void removeElement(E element) throws IllegalArgumentException {
 		if (fElements.remove(element)) {
 			if (isOkToUse(fTreeControl)) {
 				fTree.remove(element);
@@ -645,7 +652,7 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Removes elements from the list.
 	*/
-	public void removeElements(List elements) {
+	public void removeElements(List<?> elements) {
 		if (elements.size() > 0) {
 			fElements.removeAll(elements);
 			if (isOkToUse(fTreeControl)) {
@@ -703,6 +710,7 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Refreshes the tree.
 	*/
+	@Override
 	public void refresh() {
 		super.refresh();
 		if (isOkToUse(fTreeControl)) {
@@ -730,12 +738,12 @@ public class TreeListDialogField extends DialogField {
 
 	// ------- list maintenance
 
-	private List moveUp(List elements, List move) {
+	private List<E> moveUp(List<E> elements, List<E> move) {
 		int nElements= elements.size();
-		List res= new ArrayList(nElements);
-		Object floating= null;
+		List<E> res= new ArrayList<E>(nElements);
+		E floating= null;
 		for (int i= 0; i < nElements; i++) {
-			Object curr= elements.get(i);
+			E curr= elements.get(i);
 			if (move.contains(curr)) {
 				res.add(curr);
 			} else {
@@ -751,22 +759,22 @@ public class TreeListDialogField extends DialogField {
 		return res;
 	}
 
-	private void moveUp(List toMoveUp) {
+	private void moveUp(List<E> toMoveUp) {
 		if (toMoveUp.size() > 0) {
 			setElements(moveUp(fElements, toMoveUp));
 			fTree.reveal(toMoveUp.get(0));
 		}
 	}
 
-	private void moveDown(List toMoveDown) {
+	private void moveDown(List<E> toMoveDown) {
 		if (toMoveDown.size() > 0) {
 			setElements(reverse(moveUp(reverse(fElements), toMoveDown)));
 			fTree.reveal(toMoveDown.get(toMoveDown.size() - 1));
 		}
 	}
 
-	private List reverse(List p) {
-		List reverse= new ArrayList(p.size());
+	private List<E> reverse(List<E> p) {
+		List<E> reverse= new ArrayList<E>(p.size());
 		for (int i= p.size() - 1; i >= 0; i--) {
 			reverse.add(p.get(i));
 		}
@@ -778,14 +786,14 @@ public class TreeListDialogField extends DialogField {
 	}
 
 	private void up() {
-		moveUp(getSelectedElements());
+		moveUp(getSelectedRootElements());
 	}
 
 	private void down() {
-		moveDown(getSelectedElements());
+		moveDown(getSelectedRootElements());
 	}
 
-	private boolean canMoveUp(List selectedElements) {
+	private boolean canMoveUp(List<Object> selectedElements) {
 		if (isOkToUse(fTreeControl)) {
 			int nSelected= selectedElements.size();
 			int nElements= fElements.size();
@@ -799,7 +807,7 @@ public class TreeListDialogField extends DialogField {
 		return false;
 	}
 
-	private boolean canMoveDown(List selectedElements) {
+	private boolean canMoveDown(List<Object> selectedElements) {
 		if (isOkToUse(fTreeControl)) {
 			int nSelected= selectedElements.size();
 			for (int i= fElements.size() - 1; i >= 0 && nSelected > 0; i--) {
@@ -815,12 +823,12 @@ public class TreeListDialogField extends DialogField {
 	/**
 	* Returns the selected elements.
 	*/
-	public List getSelectedElements() {
-		ArrayList result= new ArrayList();
+	public List<Object> getSelectedElements() {
+		ArrayList<Object> result= new ArrayList<Object>();
 		if (isOkToUse(fTreeControl)) {
 			ISelection selection= fTree.getSelection();
 			if (selection instanceof IStructuredSelection) {
-				Iterator iter= ((IStructuredSelection)selection).iterator();
+				Iterator<?> iter= ((IStructuredSelection)selection).iterator();
 				while (iter.hasNext()) {
 					result.add(iter.next());
 				}
@@ -829,6 +837,25 @@ public class TreeListDialogField extends DialogField {
 		return result;
 	}
 
+	public List<E> getSelectedRootElements() {
+		ArrayList<E> result= new ArrayList<E>();
+		if (isOkToUse(fTreeControl)) {
+			ISelection selection= fTree.getSelection();
+			if (selection instanceof IStructuredSelection) {
+				Iterator<?> iter= ((IStructuredSelection)selection).iterator();
+				while (iter.hasNext()) {
+					Object element= iter.next();
+					if (fElements.contains(element)) {
+						@SuppressWarnings("unchecked")
+						E rootElement= (E) element;
+						result.add(rootElement);
+					}
+				}
+			}
+		}
+		return result;
+	}
+	
 	public void expandElement(Object element, int level) {
 		if (isOkToUse(fTreeControl)) {
 			fTree.expandToLevel(element, level);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java
index bcc8471..77cc6d3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,6 +67,7 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 		 */
+		@Override
 		public boolean select(Viewer viewer, Object parentElement, Object element) {
 			return !fSelectedElements.contains(element);
 		}
@@ -79,13 +80,13 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 	private ITreeContentProvider fTreeContentProvider;
 
 	private boolean fFirstCheck;
-	private final HashSet fSelectedElements;
+	private final HashSet<Object> fSelectedElements;
 	private IWorkingSet fWorkingSet;
 
 	protected AbstractWorkingSetWizardPage(String pageName, String title, ImageDescriptor titleImage) {
 		super(pageName, title, titleImage);
 
-		fSelectedElements= new HashSet();
+		fSelectedElements= new HashSet<Object>();
 		fFirstCheck= true;
 	}
 
@@ -277,6 +278,7 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 		});
 
 		addButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				addTreeSelection();
 
@@ -301,6 +303,7 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 		});
 
 		removeButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				removeTableSelection();
 
@@ -322,6 +325,7 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 			/* (non-Javadoc)
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				TreeItem[] items= fTree.getTree().getItems();
 				for (int i= 0; i < items.length; i++) {
@@ -339,6 +343,7 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 			/* (non-Javadoc)
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fSelectedElements.clear();
 
@@ -442,17 +447,17 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 	 */
 	public void finish() {
 		String workingSetName= fWorkingSetName.getText();
-		HashSet elements= fSelectedElements;
+		HashSet<Object> elements= fSelectedElements;
 
 		if (fWorkingSet == null) {
 			IWorkingSetManager workingSetManager= PlatformUI.getWorkbench().getWorkingSetManager();
-			fWorkingSet= workingSetManager.createWorkingSet(workingSetName, (IAdaptable[])elements.toArray(new IAdaptable[elements.size()]));
+			fWorkingSet= workingSetManager.createWorkingSet(workingSetName, elements.toArray(new IAdaptable[elements.size()]));
 			fWorkingSet.setId(getPageId());
 		} else {
 			// Add inaccessible resources
 			IAdaptable[] oldItems= fWorkingSet.getElements();
-			HashSet closedProjectsToRetain= new HashSet(elements.size());
-			HashSet closedProjectsToRemove= new HashSet(elements.size());
+			HashSet<IProject> closedProjectsToRetain= new HashSet<IProject>(elements.size());
+			HashSet<IProject> closedProjectsToRemove= new HashSet<IProject>(elements.size());
 			for (int i= 0; i < oldItems.length; i++) {
 				IResource oldResource= null;
 				if (oldItems[i] instanceof IResource) {
@@ -474,7 +479,7 @@ public abstract class AbstractWorkingSetWizardPage extends WizardPage implements
 			elements.removeAll(closedProjectsToRemove);
 
 			fWorkingSet.setName(workingSetName);
-			fWorkingSet.setElements((IAdaptable[]) elements.toArray(new IAdaptable[elements.size()]));
+			fWorkingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ClearWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ClearWorkingSetAction.java
index d8cc7ec..18a5f9f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ClearWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ClearWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ public class ClearWorkingSetAction extends Action {
 	/*
 	 * Overrides method from Action
 	 */
+	@Override
 	public void run() {
 		fActionGroup.setWorkingSet(null, true);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java
index ef0d09f..1c52301 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,8 +42,9 @@ public class ConfigureWorkingSetAction extends Action {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
-		List workingSets= new ArrayList(Arrays.asList(fWorkingSetModel.getAllWorkingSets()));
+		List<IWorkingSet> workingSets= new ArrayList<IWorkingSet>(Arrays.asList(fWorkingSetModel.getAllWorkingSets()));
 		IWorkingSet[] activeWorkingSets;
 		if (fWorkingSetModel.needsConfiguration()) {
 			activeWorkingSets= fWorkingSetModel.getAllWorkingSets();
@@ -51,12 +52,11 @@ public class ConfigureWorkingSetAction extends Action {
 			activeWorkingSets= fWorkingSetModel.getActiveWorkingSets();
 		}
 		boolean isSortingEnabled= fWorkingSetModel.isSortingEnabled();
-		WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog(fSite.getShell(), (IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]), isSortingEnabled);
+		WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog(fSite.getShell(), workingSets.toArray(new IWorkingSet[workingSets.size()]), isSortingEnabled);
 		dialog.setSelection(activeWorkingSets);
 		if (dialog.open() == IDialogConstants.OK_ID) {
 			isSortingEnabled= dialog.isSortingEnabled();
-			IWorkingSet[] selection= dialog.getSelection();
-			fWorkingSetModel.setActiveWorkingSets(selection, isSortingEnabled);
+			fWorkingSetModel.setWorkingSets(dialog.getAllWorkingSets(), isSortingEnabled, dialog.getSelection());
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java
index e475473..4ebcee2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,10 +83,10 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 	 */
 	private static final class GrayedCheckedModel {
 
-		private ArrayList fElements;
+		private ArrayList<GrayedCheckedModelElement> fElements;
 
 		public GrayedCheckedModel(GrayedCheckedModelElement[] elements) {
-			fElements= new ArrayList(Arrays.asList(elements));
+			fElements= new ArrayList<GrayedCheckedModelElement>(Arrays.asList(elements));
 		}
 
 		public void addElement(GrayedCheckedModelElement element) {
@@ -94,36 +94,36 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		}
 
 		public GrayedCheckedModelElement[] getElements() {
-			return (GrayedCheckedModelElement[]) fElements.toArray(new GrayedCheckedModelElement[fElements.size()]);
+			return fElements.toArray(new GrayedCheckedModelElement[fElements.size()]);
 		}
 
 		public GrayedCheckedModelElement[] getChecked() {
-			ArrayList result= new ArrayList();
+			ArrayList<GrayedCheckedModelElement> result= new ArrayList<GrayedCheckedModelElement>();
 			for (int i= 0; i < fElements.size(); i++) {
-				if (((GrayedCheckedModelElement)fElements.get(i)).isChecked())
+				if (fElements.get(i).isChecked())
 					result.add(fElements.get(i));
 			}
-			return (GrayedCheckedModelElement[])result.toArray(new GrayedCheckedModelElement[result.size()]);
+			return result.toArray(new GrayedCheckedModelElement[result.size()]);
 		}
 
 		public GrayedCheckedModelElement[] getGrayed() {
-			ArrayList result= new ArrayList();
+			ArrayList<GrayedCheckedModelElement> result= new ArrayList<GrayedCheckedModelElement>();
 			for (int i= 0; i < fElements.size(); i++) {
-				if (((GrayedCheckedModelElement)fElements.get(i)).isGrayed())
+				if (fElements.get(i).isGrayed())
 					result.add(fElements.get(i));
 			}
-			return (GrayedCheckedModelElement[])result.toArray(new GrayedCheckedModelElement[result.size()]);
+			return result.toArray(new GrayedCheckedModelElement[result.size()]);
 		}
 
 		public void selectAll() {
 			for (int i= 0; i < fElements.size(); i++) {
-				((GrayedCheckedModelElement) fElements.get(i)).select();
+				fElements.get(i).select();
 			}
 		}
 
 		public void deselectAll() {
 			for (int i= 0; i < fElements.size(); i++) {
-				((GrayedCheckedModelElement) fElements.get(i)).deselect();
+				fElements.get(i).deselect();
 			}
 		}
 
@@ -184,7 +184,9 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			return fElements;
 		}
 
-		public void dispose() {}
+		public void dispose() {
+			// do nothing
+		}
 
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 			if (newInput instanceof GrayedCheckedModel) {
@@ -200,28 +202,30 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 	 */
 	private class GrayedCheckedModelLabelProvider extends LabelProvider {
 
-		private Map fIcons;
+		private Map<ImageDescriptor, Image> fIcons;
 
 		public GrayedCheckedModelLabelProvider() {
-			fIcons= new Hashtable();
+			fIcons= new Hashtable<ImageDescriptor, Image>();
 		}
 
+		@Override
 		public void dispose() {
-			Iterator iterator= fIcons.values().iterator();
+			Iterator<Image> iterator= fIcons.values().iterator();
 			while (iterator.hasNext()) {
-				Image icon= (Image)iterator.next();
+				Image icon= iterator.next();
 				icon.dispose();
 			}
 			super.dispose();
 		}
 
+		@Override
 		public Image getImage(Object object) {
 			IWorkingSet workingSet= ((GrayedCheckedModelElement)object).getWorkingSet();
 			ImageDescriptor imageDescriptor= workingSet.getImageDescriptor();
 			if (imageDescriptor == null)
 				return null;
 
-			Image icon= (Image)fIcons.get(imageDescriptor);
+			Image icon= fIcons.get(imageDescriptor);
 			if (icon == null) {
 				icon= imageDescriptor.createImage();
 				fIcons.put(imageDescriptor, icon);
@@ -230,6 +234,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			return icon;
 		}
 
+		@Override
 		public String getText(Object object) {
 			GrayedCheckedModelElement modelElement= (GrayedCheckedModelElement)object;
 			IWorkingSet workingSet= modelElement.getWorkingSet();
@@ -261,6 +266,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 
 
 		private final class GrayedCheckModelElementSorter extends ViewerSorter {
+			@Override
 			public int compare(Viewer viewer, Object e1, Object e2) {
 				GrayedCheckedModelElement w1= (GrayedCheckedModelElement)e1;
 				GrayedCheckedModelElement w2= (GrayedCheckedModelElement)e2;
@@ -270,6 +276,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 
 		private class Filter extends ViewerFilter {
 
+			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
 				GrayedCheckedModelElement model= (GrayedCheckedModelElement) element;
 				IWorkingSet set= model.getWorkingSet();
@@ -295,7 +302,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		private boolean fShowVisibleOnly;
 		private GrayedCheckedModel fModel;
 		private final IAdaptable[] fElements;
-		private final ArrayList fCreatedWorkingSets;
+		private final ArrayList<IWorkingSet> fCreatedWorkingSets;
 
 		/**
 		 * @since 3.5
@@ -308,7 +315,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			setTitle(WorkingSetMessages.ConfigureWorkingSetAssignementAction_WorkingSetAssignments_title);
 			fModel= model;
 			fElements= elements;
-			fCreatedWorkingSets= new ArrayList();
+			fCreatedWorkingSets= new ArrayList<IWorkingSet>();
 			fSettings= JavaPlugin.getDefault().getDialogSettingsSection(DIALOG_SETTINGS_SECTION);
 			if (fSettings.get(SETTINGS_SHOW_VISIBLE_ONLY) == null) {
 				fSettings.put(SETTINGS_SHOW_VISIBLE_ONLY, true);
@@ -321,6 +328,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		 * 
 		 * @since 3.5
 		 */
+		@Override
 		protected void configureShell(Shell shell) {
 			super.configureShell(shell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.WORKING_SET_ASSIGNMENTS_DIALOG);
@@ -344,6 +352,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			return result;
 		}
 
+		@Override
 		protected final Control createDialogArea(Composite parent) {
 			Composite composite= (Composite)super.createDialogArea(parent);
 
@@ -384,6 +393,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			selectAll.setText(WorkingSetMessages.ConfigureWorkingSetAssignementAction_SelectAll_button);
 			setButtonLayoutData(selectAll);
 			selectAll.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fTableViewer.setAllChecked(true);
 
@@ -397,6 +407,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			deselectAll.setText(WorkingSetMessages.ConfigureWorkingSetAssignementAction_DeselectAll_button);
 			setButtonLayoutData(deselectAll);
 			deselectAll.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fTableViewer.setAllChecked(false);
 
@@ -406,12 +417,14 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 				}
 			});
 
-			new Label(composite, SWT.NONE);
+			@SuppressWarnings("unused")
+			Label spacer= new Label(composite, SWT.NONE);
 
 			Button newWorkingSet= new Button(composite, SWT.PUSH);
 			newWorkingSet.setText(WorkingSetMessages.ConfigureWorkingSetAssignementAction_New_button);
 			setButtonLayoutData(newWorkingSet);
 			newWorkingSet.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
 
@@ -497,6 +510,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			showVisibleOnly.setSelection(fShowVisibleOnly);
 			showVisibleOnly.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, true, false));
 			showVisibleOnly.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fShowVisibleOnly= showVisibleOnly.getSelection();
 
@@ -512,16 +526,16 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 			ppwsLink.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, true, false));
 			ppwsLink.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 
-					List workingSets= new ArrayList(Arrays.asList(fWorkingSetModel.getAllWorkingSets()));
+					List<IWorkingSet> workingSets= new ArrayList<IWorkingSet>(Arrays.asList(fWorkingSetModel.getAllWorkingSets()));
 					boolean isSortingEnabled= fWorkingSetModel.isSortingEnabled();
-					WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog(getShell(), (IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]), isSortingEnabled);
+					WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog(getShell(), workingSets.toArray(new IWorkingSet[workingSets.size()]), isSortingEnabled);
 					dialog.setSelection(fWorkingSetModel.getActiveWorkingSets());
 					if (dialog.open() == IDialogConstants.OK_ID) {
 						isSortingEnabled= dialog.isSortingEnabled();
-						IWorkingSet[] selection= dialog.getSelection();
-						fWorkingSetModel.setActiveWorkingSets(selection, isSortingEnabled);
+						fWorkingSetModel.setWorkingSets(dialog.getAllWorkingSets(), isSortingEnabled, dialog.getSelection());
 					}
 					
 					recalculateCheckedState(dialog.getNewlyAddedWorkingSets());
@@ -533,14 +547,15 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		 * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
 		 * @since 3.5
 		 */
+		@Override
 		protected void buttonPressed(int buttonId) {
 			if (IDialogConstants.OK_ID == buttonId)
 				fSettings.put(SETTINGS_SHOW_VISIBLE_ONLY, fShowVisibleOnly);
 			super.buttonPressed(buttonId);
 		}
 
-		private void recalculateCheckedState(List addedWorkingSets) {
-			Set checkedWorkingSets= new HashSet();
+		private void recalculateCheckedState(List<IWorkingSet> addedWorkingSets) {
+			Set<IWorkingSet> checkedWorkingSets= new HashSet<IWorkingSet>();
 			GrayedCheckedModelElement[] elements= fModel.getChecked();
 			for (int i= 0; i < elements.length; i++)
 				checkedWorkingSets.add(elements[i].getWorkingSet());
@@ -559,10 +574,11 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected void cancelPressed() {
 			IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
 			for (int i= 0; i < fCreatedWorkingSets.size(); i++) {
-				manager.removeWorkingSet((IWorkingSet)fCreatedWorkingSets.get(i));
+				manager.removeWorkingSet(fCreatedWorkingSets.get(i));
 			}
 
 			super.cancelPressed();
@@ -589,6 +605,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		fWorkingSetModel= workingSetModel;
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(canEnable(selection));
 	}
@@ -597,8 +614,8 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		if (selection.isEmpty())
 			return false;
 
-		List list= selection.toList();
-		for (Iterator iterator= list.iterator(); iterator.hasNext();) {
+		List<?> list= selection.toList();
+		for (Iterator<?> iterator= list.iterator(); iterator.hasNext();) {
 			Object object= iterator.next();
 			if (!(object instanceof IResource) && !(object instanceof IJavaElement))
 				return false;
@@ -608,19 +625,20 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 	}
 
 	private IAdaptable[] getSelectedElements(IStructuredSelection selection) {
-		ArrayList result= new ArrayList();
+		ArrayList<Object> result= new ArrayList<Object>();
 
-		List list= selection.toList();
-		for (Iterator iterator= list.iterator(); iterator.hasNext();) {
+		List<?> list= selection.toList();
+		for (Iterator<?> iterator= list.iterator(); iterator.hasNext();) {
 			Object object= iterator.next();
 			if (object instanceof IResource || object instanceof IJavaElement) {
 				result.add(object);
 			}
 		}
 
-		return (IAdaptable[])result.toArray(new IAdaptable[result.size()]);
+		return result.toArray(new IAdaptable[result.size()]);
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		IAdaptable[] elements= getSelectedElements(selection);
 		GrayedCheckedModel model= createGrayedCheckedModel(elements, getAllWorkingSets(), null);
@@ -644,7 +662,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 		}
 	}
 
-	private static GrayedCheckedModel createGrayedCheckedModel(IAdaptable[] elements, IWorkingSet[] workingSets, Set checkedWorkingSets) {
+	private static GrayedCheckedModel createGrayedCheckedModel(IAdaptable[] elements, IWorkingSet[] workingSets, Set<IWorkingSet> checkedWorkingSets) {
 		GrayedCheckedModelElement[] result= new GrayedCheckedModelElement[workingSets.length];
 
 		for (int i= 0; i < workingSets.length; i++) {
@@ -669,8 +687,8 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 	}
 
 	private void updateWorkingSets(IWorkingSet[] newWorkingSets, IWorkingSet[] grayedWorkingSets, IAdaptable[] elements) {
-		HashSet selectedSets= new HashSet(Arrays.asList(newWorkingSets));
-		HashSet grayedSets= new HashSet(Arrays.asList(grayedWorkingSets));
+		HashSet<IWorkingSet> selectedSets= new HashSet<IWorkingSet>(Arrays.asList(newWorkingSets));
+		HashSet<IWorkingSet> grayedSets= new HashSet<IWorkingSet>(Arrays.asList(grayedWorkingSets));
 		IWorkingSet[] workingSets= getAllWorkingSets();
 
 		for (int i= 0; i < workingSets.length; i++) {
@@ -699,7 +717,7 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 				if (checkForYetHiddenWorkingSet) {
 					IWorkingSet[] activeSets= getActiveWorkingSets();
 					if (activeSets != null) {
-						List activeWorkingSets= new ArrayList(Arrays.asList(activeSets));
+						List<IWorkingSet> activeWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(activeSets));
 						if (!activeWorkingSets.contains(set))
 							activateWorkingSet(set);
 					}
@@ -791,9 +809,9 @@ public final class ConfigureWorkingSetAssignementAction extends SelectionDispatc
 	}
 
 	private static void remove(IWorkingSet workingSet, IAdaptable adaptedElement) {
-		HashSet set= new HashSet(Arrays.asList(workingSet.getElements()));
+		HashSet<IAdaptable> set= new HashSet<IAdaptable>(Arrays.asList(workingSet.getElements()));
 		set.remove(adaptedElement);
-		workingSet.setElements((IAdaptable[])set.toArray(new IAdaptable[set.size()]));
+		workingSet.setElements(set.toArray(new IAdaptable[set.size()]));
 	}
 
 	private static void add(IWorkingSet workingSet, IAdaptable adaptedElement) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java
index 7b9ddc0..2b85e84 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/EditWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,7 @@ public class EditWorkingSetAction extends Action {
 	/*
 	 * Overrides method from Action
 	 */
+	@Override
 	public void run() {
 		Shell shell= getShell();
 		IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java
index 9fbb7e2..0bf4935 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import org.eclipse.jdt.core.JavaCore;
 public class JavaWorkingSetElementAdapter implements IWorkingSetElementAdapter {
 
 	public IAdaptable[] adaptElements(IWorkingSet ws, IAdaptable[] elements) {
-		ArrayList result= new ArrayList(elements.length);
+		ArrayList<Object> result= new ArrayList<Object>(elements.length);
 
 		for (int i= 0; i < elements.length; i++) {
 			IAdaptable curr= elements[i];
@@ -49,7 +49,7 @@ public class JavaWorkingSetElementAdapter implements IWorkingSetElementAdapter {
 				} // ignore all others
 			}
 		}
-		return (IAdaptable[]) result.toArray(new IAdaptable[result.size()]);
+		return result.toArray(new IAdaptable[result.size()]);
 	}
 
 	private Object adaptFromResource(IResource resource) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
index d748cd1..aa5dba0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class JavaWorkingSetPage extends AbstractWorkingSetWizardPage {
 		fInitialSelection= selection;
 	}
 
+	@Override
 	protected String getPageId() {
 		return "org.eclipse.jdt.ui.JavaWorkingSetPage"; //$NON-NLS-1$
 	}
@@ -93,6 +94,7 @@ public class JavaWorkingSetPage extends AbstractWorkingSetWizardPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void createControl(Composite parent) {
 		super.createControl(parent);
 
@@ -103,6 +105,7 @@ public class JavaWorkingSetPage extends AbstractWorkingSetWizardPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void configureTree(TreeViewer tree) {
 		tree.setContentProvider(new JavaWorkingSetPageContentProvider());
 
@@ -139,6 +142,7 @@ public class JavaWorkingSetPage extends AbstractWorkingSetWizardPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void configureTable(TableViewer table) {
 		AppearanceAwareLabelProvider javaElementLabelProvider= new AppearanceAwareLabelProvider(
 				AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED
@@ -153,11 +157,12 @@ public class JavaWorkingSetPage extends AbstractWorkingSetWizardPage {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Object[] getInitialWorkingSetElements(IWorkingSet workingSet) {
 		Object[] elements;
 		if (workingSet == null) {
 			if (fInitialSelection == null)
-				return new Object[0];
+				return new IAdaptable[0];
 
 			elements= fInitialSelection.toArray();
 		} else {
@@ -190,7 +195,7 @@ public class JavaWorkingSetPage extends AbstractWorkingSetWizardPage {
 		if (deletedElements == 0)
 			return elements;
 
-		Object[] result= new Object[elements.length - deletedElements];
+		IAdaptable[] result= new IAdaptable[elements.length - deletedElements];
 		System.arraycopy(elements, 0, result, 0, result.length);
 		return result;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPageContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPageContentProvider.java
index 6bc98f3..8591677 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPageContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPageContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
 
 class JavaWorkingSetPageContentProvider extends StandardJavaElementContentProvider {
 
+	@Override
 	public boolean hasChildren(Object element) {
 
 		if (element instanceof IProject && !((IProject)element).isAccessible())
@@ -42,6 +43,7 @@ class JavaWorkingSetPageContentProvider extends StandardJavaElementContentProvid
 		return super.hasChildren(element);
 	}
 
+	@Override
 	public Object[] getChildren(Object parentElement) {
 		try {
 			if (parentElement instanceof IJavaModel)
@@ -60,6 +62,7 @@ class JavaWorkingSetPageContentProvider extends StandardJavaElementContentProvid
 		}
 	}
 
+	@Override
 	protected Object[] getPackageFragmentRootContent(IPackageFragmentRoot root) throws JavaModelException {
 		if (root.getKind() == IPackageFragmentRoot.K_BINARY) {
 			// Don't show IJarEntryResource
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java
index bb0567f..a95a872 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,20 +42,20 @@ public class JavaWorkingSetUpdater implements IWorkingSetUpdater, IElementChange
 	public static final String ID= IWorkingSetIDs.JAVA;
 	
 
-	private List fWorkingSets;
+	private List<IWorkingSet> fWorkingSets;
 
 	private static class WorkingSetDelta {
 		private IWorkingSet fWorkingSet;
-		private List fElements;
+		private List<IAdaptable> fElements;
 		private boolean fChanged;
 		public WorkingSetDelta(IWorkingSet workingSet) {
 			fWorkingSet= workingSet;
-			fElements= new ArrayList(Arrays.asList(workingSet.getElements()));
+			fElements= new ArrayList<IAdaptable>(Arrays.asList(workingSet.getElements()));
 		}
 		public int indexOf(Object element) {
 			return fElements.indexOf(element);
 		}
-		public void set(int index, Object element) {
+		public void set(int index, IAdaptable element) {
 			fElements.set(index, element);
 			fChanged= true;
 		}
@@ -66,13 +66,13 @@ public class JavaWorkingSetUpdater implements IWorkingSetUpdater, IElementChange
 		}
 		public void process() {
 			if (fChanged) {
-				fWorkingSet.setElements((IAdaptable[])fElements.toArray(new IAdaptable[fElements.size()]));
+				fWorkingSet.setElements(fElements.toArray(new IAdaptable[fElements.size()]));
 			}
 		}
 	}
 
 	public JavaWorkingSetUpdater() {
-		fWorkingSets= new ArrayList();
+		fWorkingSets= new ArrayList<IWorkingSet>();
 		JavaCore.addElementChangedListener(this);
 	}
 
@@ -122,7 +122,7 @@ public class JavaWorkingSetUpdater implements IWorkingSetUpdater, IElementChange
 	public void elementChanged(ElementChangedEvent event) {
 		IWorkingSet[] workingSets;
 		synchronized(fWorkingSets) {
-			workingSets= (IWorkingSet[])fWorkingSets.toArray(new IWorkingSet[fWorkingSets.size()]);
+			workingSets= fWorkingSets.toArray(new IWorkingSet[fWorkingSets.size()]);
 		}
 		for (int w= 0; w < workingSets.length; w++) {
 			WorkingSetDelta workingSetDelta= new WorkingSetDelta(workingSets[w]);
@@ -210,10 +210,10 @@ public class JavaWorkingSetUpdater implements IWorkingSetUpdater, IElementChange
 	}
 
 	private void checkElementExistence(IWorkingSet workingSet) {
-		List elements= new ArrayList(Arrays.asList(workingSet.getElements()));
+		List<IAdaptable> elements= new ArrayList<IAdaptable>(Arrays.asList(workingSet.getElements()));
 		boolean changed= false;
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
-			IAdaptable element= (IAdaptable)iter.next();
+		for (Iterator<IAdaptable> iter= elements.iterator(); iter.hasNext();) {
+			IAdaptable element= iter.next();
 			boolean remove= false;
 			if (element instanceof IJavaElement) {
 				IJavaElement jElement= (IJavaElement)element;
@@ -245,7 +245,7 @@ public class JavaWorkingSetUpdater implements IWorkingSetUpdater, IElementChange
 			}
 		}
 		if (changed) {
-			workingSet.setElements((IAdaptable[])elements.toArray(new IAdaptable[elements.size()]));
+			workingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java
index 9523293..25c68f3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.Set;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
@@ -42,6 +43,8 @@ import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.corext.util.CollectionsUtil;
+
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
 public class OthersWorkingSetUpdater implements IWorkingSetUpdater {
@@ -89,9 +92,9 @@ public class OthersWorkingSetUpdater implements IWorkingSetUpdater {
 			if (fWorkingSet == null)
 				return; // not yet initialized
 
-			processJavaDelta(new ArrayList(Arrays.asList(fWorkingSet.getElements())), event.getDelta());
+			processJavaDelta(new ArrayList<IAdaptable>(Arrays.asList(fWorkingSet.getElements())), event.getDelta());
 		}
-		private void processJavaDelta(List elements, IJavaElementDelta delta) {
+		private void processJavaDelta(List<IAdaptable> elements, IJavaElementDelta delta) {
 			IJavaElement jElement= delta.getElement();
 			int type= jElement.getElementType();
 			if (type == IJavaElement.JAVA_PROJECT) {
@@ -101,12 +104,12 @@ public class OthersWorkingSetUpdater implements IWorkingSetUpdater {
 				if (kind == IJavaElementDelta.CHANGED) {
 					if (index != -1 && (flags & IJavaElementDelta.F_CLOSED) != 0) {
 						elements.set(index, ((IJavaProject)jElement).getProject());
-						fWorkingSet.setElements((IAdaptable[])elements.toArray(new IAdaptable[elements.size()]));
+						fWorkingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
 					} else if ((flags & IJavaElementDelta.F_OPENED) != 0) {
 						index= elements.indexOf(((IJavaProject)jElement).getProject());
 						if (index != -1) {
 							elements.set(index, jElement);
-							fWorkingSet.setElements((IAdaptable[])elements.toArray(new IAdaptable[elements.size()]));
+							fWorkingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
 						}
 					}
 				}
@@ -174,8 +177,8 @@ public class OthersWorkingSetUpdater implements IWorkingSetUpdater {
 
 		IWorkingSet[] activeWorkingSets= fWorkingSetModel.getActiveWorkingSets();
 
-		List result= new ArrayList();
-		Set projects= new HashSet();
+		List<IAdaptable> result= new ArrayList<IAdaptable>();
+		Set<IResource> projects= new HashSet<IResource>();
 		for (int i= 0; i < activeWorkingSets.length; i++) {
 			if (activeWorkingSets[i] == fWorkingSet) continue;
 			IAdaptable[] elements= activeWorkingSets[i].getElements();
@@ -197,11 +200,11 @@ public class OthersWorkingSetUpdater implements IWorkingSetUpdater {
 			Object[] rProjects= model.getNonJavaResources();
 			for (int i= 0; i < rProjects.length; i++) {
 				if (!projects.contains(rProjects[i]))
-					result.add(rProjects[i]);
+					result.add((IProject) rProjects[i]);
 			}
 		} catch (JavaModelException e) {
 			JavaPlugin.log(e);
 		}
-		fWorkingSet.setElements((IAdaptable[])result.toArray(new IAdaptable[result.size()]));
+		fWorkingSet.setElements(CollectionsUtil.toArray(result, IAdaptable.class));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java
index dbcdb7c..1b89862 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ public class RemoveWorkingSetElementAction extends SelectionDispatchAction {
 		setText(WorkingSetMessages.RemoveWorkingSetElementAction_label);
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		IWorkingSet workingSet= getWorkingSet(selection);
 		setEnabled(workingSet != null && !IWorkingSetIDs.OTHERS.equals(workingSet.getId()));
@@ -42,9 +43,9 @@ public class RemoveWorkingSetElementAction extends SelectionDispatchAction {
 		if (!(selection instanceof ITreeSelection))
 			return null;
 		ITreeSelection treeSelection= (ITreeSelection)selection;
-		List elements= treeSelection.toList();
+		List<?> elements= treeSelection.toList();
 		IWorkingSet result= null;
-		for (Iterator iter= elements.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			TreePath[] paths= treeSelection.getPathsFor(element);
 			if (paths.length != 1)
@@ -65,13 +66,14 @@ public class RemoveWorkingSetElementAction extends SelectionDispatchAction {
 		return result;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		IWorkingSet ws= getWorkingSet(selection);
 		if (ws == null)
 			return;
-		HashSet elements= new HashSet(Arrays.asList(ws.getElements()));
-		List selectedElements= selection.toList();
-		for (Iterator iter= selectedElements.iterator(); iter.hasNext();) {
+		HashSet<IAdaptable> elements= new HashSet<IAdaptable>(Arrays.asList(ws.getElements()));
+		List<?> selectedElements= selection.toList();
+		for (Iterator<?> iter= selectedElements.iterator(); iter.hasNext();) {
 			Object object= iter.next();
 			if (object instanceof IAdaptable) {
 				IAdaptable[] adaptedElements= ws.adaptElements(new IAdaptable[] {(IAdaptable)object});
@@ -80,6 +82,6 @@ public class RemoveWorkingSetElementAction extends SelectionDispatchAction {
 				}
 			}
 		}
-		ws.setElements((IAdaptable[])elements.toArray(new IAdaptable[elements.size()]));
+		ws.setElements(elements.toArray(new IAdaptable[elements.size()]));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/SelectWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/SelectWorkingSetAction.java
index 2d7d2af..86b0fd8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/SelectWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/SelectWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,6 +58,7 @@ public class SelectWorkingSetAction extends Action {
 	/*
 	 * Overrides method from Action
 	 */
+	@Override
 	public void run() {
 		Shell shell= getShell();
 		IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewAction.java
index d9af5a8..3f6ad06 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class ViewAction extends Action {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run() {
 		if (isChecked())
 			fActionGroup.setMode(fMode);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java
index df97481..e6ce766 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,6 +73,7 @@ public class ViewActionGroup extends ActionGroup {
 			fActiveActionGroup= fFilterActionGroup;
 	}
 
+	@Override
 	public void dispose() {
 		fFilterActionGroup.dispose();
 		fShowActionGroup.dispose();
@@ -87,6 +88,7 @@ public class ViewActionGroup extends ActionGroup {
 		fWorkingSetAssignementAction.setWorkingSetModel(model);
 	}
 
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		if (fWorkingSetAssignementAction.isEnabled())
 			menu.appendToGroup(IContextMenuConstants.GROUP_BUILD, fWorkingSetAssignementAction);
@@ -95,6 +97,7 @@ public class ViewActionGroup extends ActionGroup {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		fMenuManager= actionBars.getMenuManager();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetComparator.java
index 24a452f..a27412b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetComparator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@ import org.eclipse.ui.IWorkingSet;
  * 
  * @since 3.5
  */
-public class WorkingSetComparator implements Comparator {
+public class WorkingSetComparator implements Comparator<IWorkingSet> {
 	
 	private Collator fCollator= Collator.getInstance();
 
@@ -59,27 +59,15 @@ public class WorkingSetComparator implements Comparator {
 	 * 
 	 * @see Comparator#compare(Object, Object)
 	 */
-	public int compare(Object o1, Object o2) {
+	public int compare(IWorkingSet w1, IWorkingSet w2) {
 
-		String name1= null;
-		String name2= null;
-
-		if (o1 instanceof IWorkingSet) {
-			IWorkingSet workingSet= (IWorkingSet)o1;
-			if (fIsOtherWorkingSetOnTop && IWorkingSetIDs.OTHERS.equals(workingSet.getId())) {
-				return -1;
-			}
-			name1= workingSet.getLabel();
-		}
-
-		if (o2 instanceof IWorkingSet) {
-			IWorkingSet workingSet= (IWorkingSet)o2;
-			if (fIsOtherWorkingSetOnTop && IWorkingSetIDs.OTHERS.equals(workingSet.getId())) {
-				return 1;
-			}
-			name2= workingSet.getLabel();
-		}
-		return fCollator.compare(name1, name2);
+		if (fIsOtherWorkingSetOnTop && IWorkingSetIDs.OTHERS.equals(w1.getId()))
+			return -1;
+		
+		if (fIsOtherWorkingSetOnTop && IWorkingSetIDs.OTHERS.equals(w2.getId()))
+			return 1;
+		
+		return fCollator.compare(w1.getLabel(), w2.getLabel());
 	}
 }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java
index 12f935c..d175a93 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ package org.eclipse.jdt.internal.ui.workingsets;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Comparator;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Hashtable;
@@ -38,6 +38,7 @@ import org.eclipse.core.runtime.Assert;
 
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -45,14 +46,12 @@ import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.WizardDialog;
 
@@ -69,31 +68,34 @@ import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
 public class WorkingSetConfigurationDialog extends SelectionDialog {
 
 	private static class WorkingSetLabelProvider extends LabelProvider {
-		private Map fIcons;
+		private Map<ImageDescriptor, Image> fIcons;
 		public WorkingSetLabelProvider() {
-			fIcons= new Hashtable();
+			fIcons= new Hashtable<ImageDescriptor, Image>();
 		}
+		@Override
 		public void dispose() {
-			Iterator iterator= fIcons.values().iterator();
+			Iterator<Image> iterator= fIcons.values().iterator();
 			while (iterator.hasNext()) {
-				Image icon= (Image)iterator.next();
+				Image icon= iterator.next();
 				icon.dispose();
 			}
 			super.dispose();
 		}
+		@Override
 		public Image getImage(Object object) {
 			Assert.isTrue(object instanceof IWorkingSet);
 			IWorkingSet workingSet= (IWorkingSet)object;
 			ImageDescriptor imageDescriptor= workingSet.getImageDescriptor();
 			if (imageDescriptor == null)
 				return null;
-			Image icon= (Image)fIcons.get(imageDescriptor);
+			Image icon= fIcons.get(imageDescriptor);
 			if (icon == null) {
 				icon= imageDescriptor.createImage();
 				fIcons.put(imageDescriptor, icon);
 			}
 			return icon;
 		}
+		@Override
 		public String getText(Object object) {
 			Assert.isTrue(object instanceof IWorkingSet);
 			IWorkingSet workingSet= (IWorkingSet)object;
@@ -101,15 +103,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		}
 	}
 
-
-	private class Filter extends ViewerFilter {
-
-		public boolean select(Viewer viewer, Object parentElement, Object element) {
-			return WorkingSetModel.isSupportedAsTopLevelElement((IWorkingSet)element);
-		}
-	}
-
-	private List fAllWorkingSets;
+	private List<IWorkingSet> fAllWorkingSets;
 	private CheckboxTableViewer fTableViewer;
 
 	private Button fNewButton;
@@ -128,10 +122,10 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	private Button fSortWorkingSet;
 
 	private IWorkingSet[] fResult;
-	private List fAddedWorkingSets;
-	private List fRemovedWorkingSets;
-	private Map fEditedWorkingSets;
-	private List fRemovedMRUWorkingSets;
+	private List<IWorkingSet> fAddedWorkingSets;
+	private List<IWorkingSet> fRemovedWorkingSets;
+	private Map<IWorkingSet, IWorkingSet> fEditedWorkingSets;
+	private List<IWorkingSet> fRemovedMRUWorkingSets;
 
 	private int nextButtonId= IDialogConstants.CLIENT_ID + 1;
 
@@ -147,17 +141,15 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	 * 
 	 * @since 3.5
 	 */
-	private Comparator fComparator;
+	private WorkingSetComparator fComparator;
 
 	public WorkingSetConfigurationDialog(Shell parentShell, IWorkingSet[] allWorkingSets, boolean isSortingEnabled) {
 		super(parentShell);
 		setTitle(WorkingSetMessages.WorkingSetConfigurationDialog_title);
 		setMessage(WorkingSetMessages.WorkingSetConfigurationDialog_message);
-		fAllWorkingSets= new ArrayList(allWorkingSets.length);
-		Filter filter= new Filter();
+		fAllWorkingSets= new ArrayList<IWorkingSet>(allWorkingSets.length);
 		for (int i= 0; i < allWorkingSets.length; i++) {
-			if (filter.select(null, null, allWorkingSets[i]))
-				fAllWorkingSets.add(allWorkingSets[i]);
+			fAllWorkingSets.add(allWorkingSets[i]);
 		}
 		fIsSortingEnabled= isSortingEnabled;
 	}
@@ -165,6 +157,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.WORKING_SET_CONFIGURATION_DIALOG);
@@ -192,6 +185,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Control createContents(Composite parent) {
 		Control control= super.createContents(parent);
 		setInitialSelection();
@@ -202,6 +196,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite)super.createDialogArea(parent);
 
@@ -222,6 +217,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 				 * @see ViewerComparator#compare(Viewer, Object, Object)
 				 * @since 3.5
 				 */
+				@Override
 				public int compare(Viewer viewer, Object e1, Object e2) {
 					return getComparator().compare(e1, e2);
 				}
@@ -245,17 +241,8 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		data.widthHint= convertWidthInCharsToPixels(50);
 		fTableViewer.getTable().setLayoutData(data);
 
-		fTableViewer.addFilter(new Filter());
 		fTableViewer.setLabelProvider(new WorkingSetLabelProvider());
-		fTableViewer.setContentProvider(new IStructuredContentProvider() {
-			public Object[] getElements(Object element) {
-				return ((List)element).toArray();
-			}
-			public void dispose() {
-			}
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			}
-		});
+		fTableViewer.setContentProvider(new ArrayContentProvider());
 		fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
 				handleSelectionChanged();
@@ -281,6 +268,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fNewButton= createButton(buttonComposite, nextButtonId++,
 			WorkingSetMessages.WorkingSetConfigurationDialog_new_label, false);
 		fNewButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				createWorkingSet();
 			}
@@ -289,6 +277,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fEditButton= createButton(buttonComposite, nextButtonId++,
 			WorkingSetMessages.WorkingSetConfigurationDialog_edit_label, false);
 		fEditButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				editSelectedWorkingSet();
 			}
@@ -297,6 +286,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fRemoveButton= createButton(buttonComposite, nextButtonId++,
 			WorkingSetMessages.WorkingSetConfigurationDialog_remove_label, false);
 		fRemoveButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				removeSelectedWorkingSets();
 			}
@@ -315,6 +305,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fUpButton.setText(WorkingSetMessages.WorkingSetConfigurationDialog_up_label);
 		setButtonLayoutData(fUpButton);
 		fUpButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				moveUp(((IStructuredSelection)fTableViewer.getSelection()).toList());
 			}
@@ -324,6 +315,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fDownButton.setText(WorkingSetMessages.WorkingSetConfigurationDialog_down_label);
 		setButtonLayoutData(fDownButton);
 		fDownButton.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				moveDown(((IStructuredSelection)fTableViewer.getSelection()).toList());
 			}
@@ -333,6 +325,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fSelectAll.setText(WorkingSetMessages.WorkingSetConfigurationDialog_selectAll_label);
 		setButtonLayoutData(fSelectAll);
 		fSelectAll.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				selectAll();
 			}
@@ -342,6 +335,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fDeselectAll.setText(WorkingSetMessages.WorkingSetConfigurationDialog_deselectAll_label);
 		setButtonLayoutData(fDeselectAll);
 		fDeselectAll.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				deselectAll();
 			}
@@ -358,6 +352,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		fSortWorkingSet.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, true, false));
 		fSortWorkingSet.setSelection(fIsSortingEnabled);
 		fSortWorkingSet.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				fIsSortingEnabled= fSortWorkingSet.getSelection();
 				updateButtonAvailability();
@@ -367,6 +362,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 						 * @see ViewerComparator#compare(Viewer, Object, Object)
 						 * @since 3.5
 						 */
+						@Override
 						public int compare(Viewer viewer, Object e1, Object e2) {
 							return getComparator().compare(e1, e2);
 						}
@@ -381,14 +377,19 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void okPressed() {
-		List newResult= getResultWorkingSets();
-		fResult= (IWorkingSet[])newResult.toArray(new IWorkingSet[newResult.size()]);
+		List<IWorkingSet> newResult= getResultWorkingSets();
+		fResult= newResult.toArray(new IWorkingSet[newResult.size()]);
+		if (fIsSortingEnabled) {
+			Collections.sort(fAllWorkingSets, getComparator());
+		}
 		setResult(newResult);
 		super.okPressed();
 	}
 
-	private List getResultWorkingSets() {
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	private List<IWorkingSet> getResultWorkingSets() {
 		Object[] checked= fTableViewer.getCheckedElements();
 		return new ArrayList(Arrays.asList(checked));
 	}
@@ -396,6 +397,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected void cancelPressed() {
 		restoreAddedWorkingSets();
 		restoreChangedWorkingSets();
@@ -404,7 +406,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	}
 
 	private void setInitialSelection() {
-		List selections= getInitialElementSelections();
+		List<Object[]> selections= getInitialElementSelections();
 		if (!selections.isEmpty()) {
 			fTableViewer.setCheckedElements(selections.toArray());
 		}
@@ -418,8 +420,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		dialog.create();
 		if (dialog.open() == Window.OK) {
 			IWorkingSet workingSet= wizard.getSelection();
-			Filter filter= new Filter();
-			if (filter.select(null, null, workingSet)) {
+			if (WorkingSetModel.isSupportedAsTopLevelElement(workingSet)) {
 				fAllWorkingSets.add(workingSet);
 				fTableViewer.add(workingSet);
 				fTableViewer.setSelection(new StructuredSelection(workingSet), true);
@@ -435,7 +436,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		IWorkingSet editWorkingSet= (IWorkingSet)((IStructuredSelection)fTableViewer.getSelection()).getFirstElement();
 		IWorkingSetEditWizard wizard= manager.createWorkingSetEditWizard(editWorkingSet);
 		WizardDialog dialog= new WizardDialog(getShell(), wizard);
-		IWorkingSet originalWorkingSet= (IWorkingSet)fEditedWorkingSets.get(editWorkingSet);
+		IWorkingSet originalWorkingSet= fEditedWorkingSets.get(editWorkingSet);
 		boolean firstEdit= originalWorkingSet == null;
 
 		// save the original working set values for restoration when selection
@@ -474,11 +475,12 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#open()
 	 */
+	@Override
 	public int open() {
-		fAddedWorkingSets= new ArrayList();
-		fRemovedWorkingSets= new ArrayList();
-		fEditedWorkingSets= new HashMap();
-		fRemovedMRUWorkingSets= new ArrayList();
+		fAddedWorkingSets= new ArrayList<IWorkingSet>();
+		fRemovedWorkingSets= new ArrayList<IWorkingSet>();
+		fEditedWorkingSets= new HashMap<IWorkingSet, IWorkingSet>();
+		fRemovedMRUWorkingSets= new ArrayList<IWorkingSet>();
 		return super.open();
 	}
 
@@ -489,7 +491,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		ISelection selection= fTableViewer.getSelection();
 		if (selection instanceof IStructuredSelection) {
 			IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
-			Iterator iter= ((IStructuredSelection)selection).iterator();
+			Iterator<?> iter= ((IStructuredSelection)selection).iterator();
 			while (iter.hasNext()) {
 				IWorkingSet workingSet= (IWorkingSet)iter.next();
 				if (fAddedWorkingSets.contains(workingSet)) {
@@ -516,10 +518,10 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	 */
 	private void restoreAddedWorkingSets() {
 		IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
-		Iterator iterator= fAddedWorkingSets.iterator();
+		Iterator<IWorkingSet> iterator= fAddedWorkingSets.iterator();
 
 		while (iterator.hasNext()) {
-			manager.removeWorkingSet(((IWorkingSet)iterator.next()));
+			manager.removeWorkingSet(iterator.next());
 		}
 	}
 
@@ -527,11 +529,11 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	 * Rolls back changes to working sets.
 	 */
 	private void restoreChangedWorkingSets() {
-		Iterator iterator= fEditedWorkingSets.keySet().iterator();
+		Iterator<IWorkingSet> iterator= fEditedWorkingSets.keySet().iterator();
 
 		while (iterator.hasNext()) {
-			IWorkingSet editedWorkingSet= (IWorkingSet)iterator.next();
-			IWorkingSet originalWorkingSet= (IWorkingSet)fEditedWorkingSets.get(editedWorkingSet);
+			IWorkingSet editedWorkingSet= iterator.next();
+			IWorkingSet originalWorkingSet= fEditedWorkingSets.get(editedWorkingSet);
 
 			if (editedWorkingSet.getName().equals(originalWorkingSet.getName()) == false) {
 				editedWorkingSet.setName(originalWorkingSet.getName());
@@ -547,14 +549,14 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	 */
 	private void restoreRemovedWorkingSets() {
 		IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
-		Iterator iterator= fRemovedWorkingSets.iterator();
+		Iterator<IWorkingSet> iterator= fRemovedWorkingSets.iterator();
 
 		while (iterator.hasNext()) {
-			manager.addWorkingSet(((IWorkingSet)iterator.next()));
+			manager.addWorkingSet(iterator.next());
 		}
 		iterator= fRemovedMRUWorkingSets.iterator();
 		while (iterator.hasNext()) {
-			manager.addRecentWorkingSet(((IWorkingSet)iterator.next()));
+			manager.addRecentWorkingSet(iterator.next());
 		}
 	}
 
@@ -577,40 +579,40 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	}
 
 	private boolean areAllGlobalWorkingSets(IStructuredSelection selection) {
-		Set globals= new HashSet(Arrays.asList(PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets()));
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		Set<IWorkingSet> globals= new HashSet<IWorkingSet>(Arrays.asList(PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets()));
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			if (!globals.contains(iter.next()))
 				return false;
 		}
 		return true;
 	}
 
-	private void moveUp(List toMoveUp) {
+	private void moveUp(List<IWorkingSet> toMoveUp) {
 		if (toMoveUp.size() > 0) {
 			setElements(moveUp(fAllWorkingSets, toMoveUp));
 			fTableViewer.reveal(toMoveUp.get(0));
 		}
 	}
 
-	private void moveDown(List toMoveDown) {
+	private void moveDown(List<IWorkingSet> toMoveDown) {
 		if (toMoveDown.size() > 0) {
 			setElements(reverse(moveUp(reverse(fAllWorkingSets), toMoveDown)));
 			fTableViewer.reveal(toMoveDown.get(toMoveDown.size() - 1));
 		}
 	}
 
-	private void setElements(List elements) {
+	private void setElements(List<IWorkingSet> elements) {
 		fAllWorkingSets= elements;
 		fTableViewer.setInput(fAllWorkingSets);
 		updateButtonAvailability();
 	}
 
-	private List moveUp(List elements, List move) {
+	private List<IWorkingSet> moveUp(List<IWorkingSet> elements, List<IWorkingSet> move) {
 		int nElements= elements.size();
-		List res= new ArrayList(nElements);
-		Object floating= null;
+		List<IWorkingSet> res= new ArrayList<IWorkingSet>(nElements);
+		IWorkingSet floating= null;
 		for (int i= 0; i < nElements; i++) {
-			Object curr= elements.get(i);
+			IWorkingSet curr= elements.get(i);
 			if (move.contains(curr)) {
 				res.add(curr);
 			} else {
@@ -626,8 +628,8 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 		return res;
 	}
 
-	private List reverse(List p) {
-		List reverse= new ArrayList(p.size());
+	private List<IWorkingSet> reverse(List<IWorkingSet> p) {
+		List<IWorkingSet> reverse= new ArrayList<IWorkingSet>(p.size());
 		for (int i= p.size() - 1; i >= 0; i--) {
 			reverse.add(p.get(i));
 		}
@@ -675,7 +677,7 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	 * @return the list of newly added working sets
 	 * @since 3.5
 	 */
-	public List getNewlyAddedWorkingSets() {
+	public List<IWorkingSet> getNewlyAddedWorkingSets() {
 		return fAddedWorkingSets;
 		
 	}
@@ -696,10 +698,20 @@ public class WorkingSetConfigurationDialog extends SelectionDialog {
 	 * @return the working set comparator
 	 * @since 3.5
 	 */
-	private Comparator getComparator() {
+	private WorkingSetComparator getComparator() {
 		if (fComparator == null) {
 			fComparator= new WorkingSetComparator(true);
 		}
 		return fComparator;
 	}
+
+	/**
+	 * Returns all the working sets.
+	 * 
+	 * @return all the working sets
+	 * @since 3.7
+	 */
+	public IWorkingSet[] getAllWorkingSets() {
+		return fAllWorkingSets.toArray(new IWorkingSet[fAllWorkingSets.size()]);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java
index a6778a4..4a9f86a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -176,6 +176,7 @@ public class WorkingSetFilter extends JavaViewerFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.filters.JavaViewerFilter#initFilter()
 	 */
+	@Override
 	protected void initFilter() {
 		notifyWorkingSetContentChange();
 	}
@@ -198,6 +199,7 @@ public class WorkingSetFilter extends JavaViewerFilter {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.internal.ui.filters.JavaViewerFilter#freeFilter()
 	 */
+	@Override
 	protected void freeFilter() {
 		fCachedCompareEntries= null;
 	}
@@ -205,6 +207,7 @@ public class WorkingSetFilter extends JavaViewerFilter {
 	/*
 	 * Overrides method from ViewerFilter.
 	 */
+	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (fWorkingSet == null || (fWorkingSet.isAggregateWorkingSet() && fWorkingSet.isEmpty()))
 			return true;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
index 0d415f0..b4b3da6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,7 +65,7 @@ public class WorkingSetFilterActionGroup extends ActionGroup implements IWorking
 	private int fLRUMenuCount;
 	private IMenuManager fMenuManager;
 	private IMenuListener fMenuListener;
-	private List fContributions= new ArrayList();
+	private List<IContributionItem> fContributions= new ArrayList<IContributionItem>();
 	private final IWorkbenchPage fWorkbenchPage;
 	private boolean fAllowWindowWorkingSetByDefault;
 
@@ -199,6 +199,7 @@ public class WorkingSetFilterActionGroup extends ActionGroup implements IWorking
 	/* (non-Javadoc)
 	 * @see ActionGroup#fillActionBars(IActionBars)
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		fillToolBar(actionBars.getToolBarManager());
 		fillViewMenu(actionBars.getMenuManager());
@@ -285,8 +286,8 @@ public class WorkingSetFilterActionGroup extends ActionGroup implements IWorking
 
 
 	public void cleanViewMenu(IMenuManager menuManager) {
-		for (Iterator iter= fContributions.iterator(); iter.hasNext();) {
-			IContributionItem removed= menuManager.remove((IContributionItem) iter.next());
+		for (Iterator<IContributionItem> iter= fContributions.iterator(); iter.hasNext();) {
+			IContributionItem removed= menuManager.remove(iter.next());
 			if (removed != null) {
 				removed.dispose();
 			}
@@ -299,6 +300,7 @@ public class WorkingSetFilterActionGroup extends ActionGroup implements IWorking
 	/* (non-Javadoc)
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (fMenuManager != null && fMenuListener != null)
 			fMenuManager.removeMenuListener(fMenuListener);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMenuContributionItem.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMenuContributionItem.java
index 5d1de98..de6d301 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMenuContributionItem.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMenuContributionItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ public class WorkingSetMenuContributionItem extends ContributionItem {
 	/*
 	 * Overrides method from ContributionItem.
 	 */
+	@Override
 	public void fill(Menu menu, int index) {
 		MenuItem mi= new MenuItem(menu, SWT.RADIO, index);
 
@@ -71,6 +72,7 @@ public class WorkingSetMenuContributionItem extends ContributionItem {
 		mi.setImage(fImage);
 		mi.setSelection(fWorkingSet.equals(fActionGroup.getWorkingSet()));
 		mi.addSelectionListener(new SelectionAdapter() {
+			@Override
 			public void widgetSelected(SelectionEvent e) {
 				IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
 				fActionGroup.setWorkingSet(fWorkingSet, true);
@@ -83,6 +85,7 @@ public class WorkingSetMenuContributionItem extends ContributionItem {
 	 * @see org.eclipse.jface.action.ContributionItem#dispose()
 	 * @since 3.0
 	 */
+	@Override
 	public void dispose() {
 		if (fImage != null && !fImage.isDisposed())
 			fImage.dispose();
@@ -94,6 +97,7 @@ public class WorkingSetMenuContributionItem extends ContributionItem {
 	/*
 	 * @see org.eclipse.jface.action.IContributionItem#isDynamic()
 	 */
+	@Override
 	public boolean isDynamic() {
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMessages.properties b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMessages.properties
index 2b2b536..8f638ec 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMessages.properties
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,10 +9,10 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 
-JavaWorkingSetPage_add_button=&Add -->
-JavaWorkingSetPage_addAll_button=A&dd All -->
-JavaWorkingSetPage_remove_button=<-- &Remove
-JavaWorkingSetPage_removeAll_button=\ \ <-- R&emove All  
+JavaWorkingSetPage_add_button=&Add ->
+JavaWorkingSetPage_addAll_button=A&dd All ->
+JavaWorkingSetPage_remove_button=<- &Remove
+JavaWorkingSetPage_removeAll_button=\ \ <- R&emove All  
 JavaWorkingSetPage_title= Java Working Set
 JavaWorkingSetPage_workingSet_name= &Working set name:
 JavaWorkingSetPage_workingSet_description= Enter a working set name and select the working set elements.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
index 2dab114..95c67cf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,12 @@ public class WorkingSetModel {
 	public static final IElementComparer COMPARER= new WorkingSetComparar();
 
 	private static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$
+
+	/**
+	 * Key associated with the state of all working sets.
+	 * @since 3.7
+	 */
+	private static final String TAG_ALL_WORKING_SETS= "allWorkingSets";  //$NON-NLS-1$
 	private static final String TAG_ACTIVE_WORKING_SET= "activeWorkingSet"; //$NON-NLS-1$
 	private static final String TAG_WORKING_SET_NAME= "workingSetName"; //$NON-NLS-1$
 	private static final String TAG_CONFIGURED= "configured"; //$NON-NLS-1$
@@ -58,13 +64,13 @@ public class WorkingSetModel {
 	 */
 	private static final String TAG_SORT_WORKING_SETS= "sortWorkingSets"; //$NON-NLS-1$
 
-	private ILocalWorkingSetManager fLocalWorkingSetManager;
-	private List fActiveWorkingSets;
+	private final ILocalWorkingSetManager fLocalWorkingSetManager;
+	private List<IWorkingSet> fActiveWorkingSets;
 	private ListenerList fListeners;
 	private IPropertyChangeListener fWorkingSetManagerListener;
 	private OthersWorkingSetUpdater fOthersWorkingSetUpdater;
 
-	private ElementMapper fElementMapper= new ElementMapper();
+	private final ElementMapper fElementMapper= new ElementMapper();
 
 	private boolean fConfigured;
 
@@ -75,6 +81,12 @@ public class WorkingSetModel {
 	 */
 	private boolean fIsSortingEnabled;
 
+	/**
+	 * List of all working sets. 
+	 * @since 3.7
+	 */
+	private List<IWorkingSet> fAllWorkingSets;
+
 	private static class WorkingSetComparar implements IElementComparer {
 		public boolean equals(Object o1, Object o2) {
 			IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet)o1 : null;
@@ -91,11 +103,11 @@ public class WorkingSetModel {
 	}
 
 	private static class ElementMapper {
-		private Map fElementToWorkingSet= new HashMap();
-		private Map fWorkingSetToElement= new IdentityHashMap();
+		private final Map<IAdaptable, Object> fElementToWorkingSet= new HashMap<IAdaptable, Object>();
+		private final Map<IWorkingSet, IAdaptable[]> fWorkingSetToElement= new IdentityHashMap<IWorkingSet, IAdaptable[]>();
 
-		private Map fResourceToWorkingSet= new HashMap();
-		private List fNonProjectTopLevelElements= new ArrayList();
+		private final Map<IAdaptable, Object> fResourceToWorkingSet= new HashMap<IAdaptable, Object>();
+		private final List<IAdaptable> fNonProjectTopLevelElements= new ArrayList<IAdaptable>();
 
 		public void clear() {
 			fElementToWorkingSet.clear();
@@ -110,24 +122,24 @@ public class WorkingSetModel {
 			}
 		}
 		public IAdaptable[] refresh(IWorkingSet ws) {
-			IAdaptable[] oldElements= (IAdaptable[])fWorkingSetToElement.get(ws);
+			IAdaptable[] oldElements= fWorkingSetToElement.get(ws);
 			if (oldElements == null)
 				return null;
 			IAdaptable[] newElements= ws.getElements();
-			List toRemove= new ArrayList(Arrays.asList(oldElements));
-			List toAdd= new ArrayList(Arrays.asList(newElements));
+			List<IAdaptable> toRemove= new ArrayList<IAdaptable>(Arrays.asList(oldElements));
+			List<IAdaptable> toAdd= new ArrayList<IAdaptable>(Arrays.asList(newElements));
 			computeDelta(toRemove, toAdd, oldElements, newElements);
-			for (Iterator iter= toAdd.iterator(); iter.hasNext();) {
-				addElement((IAdaptable)iter.next(), ws);
+			for (Iterator<IAdaptable> iter= toAdd.iterator(); iter.hasNext();) {
+				addElement(iter.next(), ws);
 			}
-			for (Iterator iter= toRemove.iterator(); iter.hasNext();) {
-				removeElement((IAdaptable)iter.next(), ws);
+			for (Iterator<IAdaptable> iter= toRemove.iterator(); iter.hasNext();) {
+				removeElement(iter.next(), ws);
 			}
 			if (toRemove.size() > 0 || toAdd.size() > 0)
 				fWorkingSetToElement.put(ws, newElements);
 			return oldElements;
 		}
-		private void computeDelta(List toRemove, List toAdd, IAdaptable[] oldElements, IAdaptable[] newElements) {
+		private void computeDelta(List<IAdaptable> toRemove, List<IAdaptable> toAdd, IAdaptable[] oldElements, IAdaptable[] newElements) {
 			for (int i= 0; i < oldElements.length; i++) {
 				toAdd.remove(oldElements[i]);
 			}
@@ -139,18 +151,18 @@ public class WorkingSetModel {
 		public IWorkingSet getFirstWorkingSet(Object element) {
 			return (IWorkingSet)getFirstElement(fElementToWorkingSet, element);
 		}
-		public List getAllWorkingSets(Object element) {
-			 List allElements= getAllElements(fElementToWorkingSet, element);
+		public List<IWorkingSet> getAllWorkingSets(Object element) {
+			 List<IWorkingSet> allElements= getAllElements(fElementToWorkingSet, element);
 			 if (allElements.isEmpty() && element instanceof IJavaElement) {
 				 // try a second time in case the working set was manually updated (bug 168032)
 				 allElements= getAllElements(fElementToWorkingSet, ((IJavaElement) element).getResource());
 			 }
 			 return allElements;
 		}
-		public List getAllWorkingSetsForResource(IResource resource) {
+		public List<IWorkingSet> getAllWorkingSetsForResource(IResource resource) {
 			return getAllElements(fResourceToWorkingSet, resource);
 		}
-		public List getNonProjectTopLevelElements() {
+		public List<IAdaptable> getNonProjectTopLevelElements() {
 			return fNonProjectTopLevelElements;
 		}
 		private void put(IWorkingSet ws) {
@@ -180,52 +192,61 @@ public class WorkingSetModel {
 				removeFromMap(fResourceToWorkingSet, resource, ws);
 			}
 		}
-		private void addToMap(Map map, IAdaptable key, IWorkingSet value) {
+		private void addToMap(Map<IAdaptable, Object> map, IAdaptable key, IWorkingSet value) {
 			Object obj= map.get(key);
 			if (obj == null) {
 				map.put(key, value);
 			} else if (obj instanceof IWorkingSet) {
-				List l= new ArrayList(2);
-				l.add(obj);
+				List<IWorkingSet> l= new ArrayList<IWorkingSet>(2);
+				l.add((IWorkingSet) obj);
 				l.add(value);
 				map.put(key, l);
 			} else if (obj instanceof List) {
-				((List)obj).add(value);
+				@SuppressWarnings("unchecked")
+				List<IWorkingSet> sets= (List<IWorkingSet>)obj;
+				sets.add(value);
 			}
 		}
-		private void removeFromMap(Map map, IAdaptable key, IWorkingSet value) {
+		private void removeFromMap(Map<IAdaptable, Object> map, IAdaptable key, IWorkingSet value) {
 			Object current= map.get(key);
 			if (current == null) {
 				return;
 			} else if (current instanceof List) {
-				List list= (List)current;
-				list.remove(value);
-				switch (list.size()) {
+				@SuppressWarnings("unchecked")
+				List<IWorkingSet> sets= (List<IWorkingSet>)current;
+				sets.remove(value);
+				switch (sets.size()) {
 					case 0:
 						map.remove(key);
 						break;
 					case 1:
-						map.put(key, list.get(0));
+						map.put(key, sets.get(0));
 						break;
 				}
 			} else if (current == value) {
 				map.remove(key);
 			}
 		}
-		private Object getFirstElement(Map map, Object key) {
+		private Object getFirstElement(Map<IAdaptable, Object> map, Object key) {
 			Object obj= map.get(key);
-			if (obj instanceof List)
-				return ((List)obj).get(0);
+			if (obj instanceof List) {
+				@SuppressWarnings("unchecked")
+				List<IWorkingSet> sets= (List<IWorkingSet>)obj;
+				return sets.get(0);
+			}
 			return obj;
 		}
-		private List getAllElements(Map map, Object key) {
+		private List<IWorkingSet> getAllElements(Map<IAdaptable, Object> map, Object key) {
 			Object obj= map.get(key);
-			if (obj instanceof List)
-				return (List)obj;
+			if (obj instanceof List) {
+				@SuppressWarnings("unchecked")
+				List<IWorkingSet> sets= (List<IWorkingSet>)obj;
+				return sets;
+			}
 			if (obj == null)
-				return Collections.EMPTY_LIST;
-			List result= new ArrayList(1);
-			result.add(obj);
+				return Collections.emptyList();
+			List<IWorkingSet> result= new ArrayList<IWorkingSet>(1);
+			result.add((IWorkingSet) obj);
 			return result;
 		}
 	}
@@ -236,13 +257,15 @@ public class WorkingSetModel {
 	public WorkingSetModel(IMemento memento) {
 		fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager();
 		addListenersToWorkingSetManagers();
-		fActiveWorkingSets= new ArrayList(2);
+		fActiveWorkingSets= new ArrayList<IWorkingSet>();
+		fAllWorkingSets= new ArrayList<IWorkingSet>();
 
 		if (memento == null || ! restoreState(memento)) {
 			IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]);
 			others.setId(IWorkingSetIDs.OTHERS);
 			fLocalWorkingSetManager.addWorkingSet(others);
 			fActiveWorkingSets.add(others);
+			fAllWorkingSets.add(others);
 		}
 		Assert.isNotNull(fOthersWorkingSetUpdater);
 
@@ -289,10 +312,10 @@ public class WorkingSetModel {
 	}
 
 	public Object[] addWorkingSets(Object[] elements) {
-		List result= null;
+		List<? super IWorkingSet> result= null;
 		for (int i= 0; i < elements.length; i++) {
 			Object element= elements[i];
-			List sets= null;
+			List<IWorkingSet> sets= null;
 			if (element instanceof IResource) {
 				sets= fElementMapper.getAllWorkingSetsForResource((IResource)element);
 			} else {
@@ -300,7 +323,7 @@ public class WorkingSetModel {
 			}
 			if (sets != null && sets.size() > 0) {
 				if (result == null)
-					result= new ArrayList(Arrays.asList(elements));
+					result= new ArrayList<Object>(Arrays.asList(elements));
 				result.addAll(sets);
 			}
 		}
@@ -311,7 +334,7 @@ public class WorkingSetModel {
 
 	public boolean needsConfiguration() {
 		return !fConfigured && fActiveWorkingSets.size() == 1 &&
-			IWorkingSetIDs.OTHERS.equals(((IWorkingSet)fActiveWorkingSets.get(0)).getId());
+			IWorkingSetIDs.OTHERS.equals(fActiveWorkingSets.get(0).getId());
 	}
 
 	public void configured() {
@@ -339,36 +362,151 @@ public class WorkingSetModel {
 	}
 
 	public IWorkingSet[] getActiveWorkingSets() {
-		return (IWorkingSet[])fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
+		return fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
 	}
 
+	/**
+	 * Returns the array of all working sets.
+	 * 
+	 * @return the array of all working sets
+	 * @since 3.7
+	 */
 	public IWorkingSet[] getAllWorkingSets() {
-		List result= new ArrayList();
+		if (fAllWorkingSets.size() == 1 && IWorkingSetIDs.OTHERS.equals(fAllWorkingSets.get(0).getId()))
+			fAllWorkingSets= getActiveAndAllWorkingSetsFromManagers();
+		return fAllWorkingSets.toArray(new IWorkingSet[fAllWorkingSets.size()]);
+	}
+
+	/**
+	 * Returns the list containing active and all working sets from the working set managers.
+	 * 
+	 * @return the list of all the working sets
+	 * @since 3.7
+	 */
+	private List<IWorkingSet> getActiveAndAllWorkingSetsFromManagers() {
+		List<IWorkingSet> result= new ArrayList<IWorkingSet>();
 		result.addAll(fActiveWorkingSets);
 		IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
 		for (int i= 0; i < locals.length; i++) {
-			if (!result.contains(locals[i]))
+			if (!result.contains(locals[i]) && isSupportedAsTopLevelElement(locals[i]))
 				result.add(locals[i]);
 		}
 		IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
 		for (int i= 0; i < globals.length; i++) {
-			if (!result.contains(globals[i]))
+			if (!result.contains(globals[i]) && isSupportedAsTopLevelElement(globals[i]))
 				result.add(globals[i]);
 		}
-		return (IWorkingSet[])result.toArray(new IWorkingSet[result.size()]);
+
+		if (fIsSortingEnabled)
+			Collections.sort(result, new WorkingSetComparator(true));
+		return result;
+	}
+
+	/**
+	 * Adds newly created working sets to the list of all working sets.
+	 * 
+	 * @param result the list of all working sets from the working set managers
+	 * @since 3.7
+	 */
+	private void addNewlyCreatedWorkingSets(List<IWorkingSet> result) {
+		for (Iterator<IWorkingSet> iter= result.iterator(); iter.hasNext();) {
+			IWorkingSet set= iter.next();
+			if (!fAllWorkingSets.contains(set))
+				fAllWorkingSets.add(set);
+		}
 	}
 
+	/**
+	 * Sets the working sets lists.
+	 * <p>
+	 * Note : All the active working sets must be contained in allWorkingSets and the relative
+	 * ordering of the active working sets must be same in both allWorkingSets and activeWorkingSets
+	 * arrays, else the method throws an <code>IllegalArgumentException</code.
+	 * </p>
+	 * 
+	 * @param allWorkingSets the array of all working sets
+	 * @param isSortingEnabled <code>true</code> if sorting is enabled, <code>false</code> otherwise
+	 * @param activeWorkingSets the array of active working sets
+	 * @since 3.7
+	 */
+	public void setWorkingSets(IWorkingSet[] allWorkingSets, boolean isSortingEnabled, IWorkingSet[] activeWorkingSets) {
+		Assert.isLegal(Arrays.asList(allWorkingSets).containsAll(Arrays.asList(activeWorkingSets)));
+		Assert.isLegal(!isOrderDifferentInWorkingSetLists(Arrays.asList(allWorkingSets), Arrays.asList(activeWorkingSets)));
+		if (isSortingEnabled)
+			Arrays.sort(allWorkingSets, new WorkingSetComparator(true));
+		fAllWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(allWorkingSets));
+		setActiveWorkingSets(activeWorkingSets, isSortingEnabled);
+	}
+
+	/**
+	 * Sets the active working sets.
+	 * <p>
+	 * Note: If the relative ordering of the active working sets is not same in both fAllWorkingSets
+	 * and fActiveWorkingSets, fAllWorkingSets is re-ordered according to fActiveWorkingSets.
+	 * </p>
+	 * 
+	 * @param workingSets the active working sets to be set
+	 * 
+	 */
 	public void setActiveWorkingSets(IWorkingSet[] workingSets) {
+		Assert.isLegal(Arrays.asList(getAllWorkingSets()).containsAll(Arrays.asList(workingSets)));
 		if (fIsSortingEnabled) {
 			Arrays.sort(workingSets, new WorkingSetComparator(true));
 		}
-		fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets));
+		fActiveWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(workingSets));
+		if (isOrderDifferentInWorkingSetLists(fAllWorkingSets, fActiveWorkingSets)) { //see bug 338531
+			adjustOrderingOfAllWorkingSets();
+		}
 		fElementMapper.rebuild(getActiveWorkingSets());
 		fOthersWorkingSetUpdater.updateElements();
 		fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null));
 	}
 
 	/**
+	 * Adjusts the relative ordering of the active working sets in fAllWorkingSets according to
+	 * fActiveWorkingSets.
+	 * 
+	 * @since 3.7
+	 */
+	private void adjustOrderingOfAllWorkingSets() {
+		int countActive= 0;
+		for (Iterator<IWorkingSet> iter= fAllWorkingSets.iterator(); iter.hasNext();) {
+			IWorkingSet set= iter.next();
+			if (fActiveWorkingSets.contains(set)) {
+				IWorkingSet workingSet= fActiveWorkingSets.get(countActive++);
+				if (!workingSet.equals(set)) {
+					int index= fAllWorkingSets.indexOf(workingSet);
+					fAllWorkingSets.set(fAllWorkingSets.indexOf(set), workingSet);
+					fAllWorkingSets.set(index, set);
+				}
+				if (countActive == fActiveWorkingSets.size())
+					return;
+			}
+		}
+	}
+
+	/**
+	 * Checks if the order of active working sets is different in the active and all working set
+	 * lists.
+	 * 
+	 * @param allWorkingSets the list of all working sets
+	 * @param activeWorkingSets the list of active working sets
+	 * @return <code>true</code> if the order is different, <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	private boolean isOrderDifferentInWorkingSetLists(List<IWorkingSet> allWorkingSets, List<IWorkingSet> activeWorkingSets) {
+		int count= 0;
+		for (Iterator<IWorkingSet> iter= allWorkingSets.iterator(); iter.hasNext();) {
+			IWorkingSet set= iter.next();
+			if (activeWorkingSets.contains(set)) {
+				if (!activeWorkingSets.get(count++).equals(set))
+					return true;
+			}
+		}
+		return false;
+	}
+
+	/**
 	 * Sets the active working sets.
 	 * 
 	 * @param workingSets the array of working sets
@@ -384,14 +522,20 @@ public class WorkingSetModel {
 		memento.putBoolean(TAG_SORT_WORKING_SETS, fIsSortingEnabled);
 		memento.putBoolean(TAG_CONFIGURED, fConfigured);
 		fLocalWorkingSetManager.saveState(memento.createChild(TAG_LOCAL_WORKING_SET_MANAGER));
-		for (Iterator iter= fActiveWorkingSets.iterator(); iter.hasNext();) {
+		for (Iterator<IWorkingSet> iter= fActiveWorkingSets.iterator(); iter.hasNext();) {
 			IMemento active= memento.createChild(TAG_ACTIVE_WORKING_SET);
-			IWorkingSet workingSet= (IWorkingSet)iter.next();
+			IWorkingSet workingSet= iter.next();
 			active.putString(TAG_WORKING_SET_NAME, workingSet.getName());
 		}
+		for (Iterator<IWorkingSet> iter= Arrays.asList(getAllWorkingSets()).iterator(); iter.hasNext();) {
+			IMemento allWorkingSet= memento.createChild(TAG_ALL_WORKING_SETS);
+			IWorkingSet workingSet= iter.next();
+			if (isSupportedAsTopLevelElement(workingSet))
+				allWorkingSet.putString(TAG_WORKING_SET_NAME, workingSet.getName());
+		}
 	}
 
-	public List getNonProjectTopLevelElements() {
+	public List<IAdaptable> getNonProjectTopLevelElements() {
 		return fElementMapper.getNonProjectTopLevelElements();
 	}
 
@@ -440,6 +584,23 @@ public class WorkingSetModel {
 				}
 			}
 		}
+		IMemento[] allWorkingSets= memento.getChildren(TAG_ALL_WORKING_SETS);
+		for (int i= 0; i < allWorkingSets.length; i++) {
+			String name= allWorkingSets[i].getString(TAG_WORKING_SET_NAME);
+			if (name != null) {
+				IWorkingSet ws= fLocalWorkingSetManager.getWorkingSet(name);
+				if (ws == null) {
+					ws= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(name);
+				}
+				if (ws != null) {
+					fAllWorkingSets.add(ws);
+				}
+			}
+		}
+
+		List<IWorkingSet> result= getActiveAndAllWorkingSetsFromManagers();
+		if (!fAllWorkingSets.containsAll(result))
+			addNewlyCreatedWorkingSets(result);
 		return true;
 	}
 	private void workingSetManagerChanged(PropertyChangeEvent event) {
@@ -453,16 +614,20 @@ public class WorkingSetModel {
 			return;
 		}
 
-		// Add new working set to the list of active working sets
+		// Add new working set to the list of active working sets and all working sets
 		if (IWorkingSetManager.CHANGE_WORKING_SET_ADD.equals(property)) {
 			IWorkingSet workingSet= (IWorkingSet)event.getNewValue();
 			if (isSupportedAsTopLevelElement(workingSet)) {
 				IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
-				List allWorkingSets= new ArrayList(Arrays.asList(manager.getAllWorkingSets()));
-				if (workingSet.isVisible() && allWorkingSets.contains(workingSet) && !fActiveWorkingSets.contains(workingSet)) {
-					List elements= new ArrayList(fActiveWorkingSets);
-					elements.add(workingSet);
-					setActiveWorkingSets((IWorkingSet[])elements.toArray(new IWorkingSet[elements.size()]));
+				List<IWorkingSet> allWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(manager.getAllWorkingSets()));
+				if (allWorkingSets.contains(workingSet)) {
+					List<IWorkingSet> elements= new ArrayList<IWorkingSet>(fActiveWorkingSets);
+					if (workingSet.isVisible() && !fActiveWorkingSets.contains(workingSet))
+						elements.add(workingSet);
+					List<IWorkingSet> allElements= new ArrayList<IWorkingSet>(Arrays.asList(getAllWorkingSets()));
+					if (!allElements.contains(workingSet))
+						allElements.add(workingSet);
+					setWorkingSets(allElements.toArray(new IWorkingSet[allElements.size()]), fIsSortingEnabled, elements.toArray(new IWorkingSet[elements.size()]));
 				}
 			}
 		}
@@ -479,14 +644,15 @@ public class WorkingSetModel {
 			}
 		} else if (IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property)) {
 			IWorkingSet workingSet= (IWorkingSet)event.getOldValue();
-			List elements= new ArrayList(fActiveWorkingSets);
+			List<IWorkingSet> elements= new ArrayList<IWorkingSet>(fActiveWorkingSets);
 			elements.remove(workingSet);
-			setActiveWorkingSets((IWorkingSet[])elements.toArray(new IWorkingSet[elements.size()]));
+			List<IWorkingSet> allElements= new ArrayList<IWorkingSet>(Arrays.asList(getAllWorkingSets()));
+			allElements.remove(workingSet);
+			setWorkingSets(allElements.toArray(new IWorkingSet[allElements.size()]), fIsSortingEnabled, elements.toArray(new IWorkingSet[elements.size()]));
 		} else if (IWorkingSetManager.CHANGE_WORKING_SET_LABEL_CHANGE.equals(property)) {
 			IWorkingSet workingSet= (IWorkingSet)event.getNewValue();
-			if (isSortingEnabled() && fActiveWorkingSets.contains(workingSet)) {
-				// re-sort the active working sets in PE after label update
-				setActiveWorkingSets((IWorkingSet[])fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]));
+			if (isSortingEnabled() && Arrays.asList(getAllWorkingSets()).contains(workingSet)) {
+				setWorkingSets(getAllWorkingSets(), isSortingEnabled(), fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]));
 			} else {
 				fireEvent(event);
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetShowActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetShowActionGroup.java
index 616be5c..847eef8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetShowActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetShowActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@ import org.eclipse.ui.actions.ActionGroup;
 
 public class WorkingSetShowActionGroup extends ActionGroup implements IWorkingSetActionGroup {
 
-	private List fContributions= new ArrayList();
+	private List<IContributionItem> fContributions= new ArrayList<IContributionItem>();
 	private ConfigureWorkingSetAction fConfigureWorkingSetAction;
 	private WorkingSetModel fWorkingSetModel;
 	private final IWorkbenchPartSite fSite;
@@ -47,6 +47,7 @@ public class WorkingSetShowActionGroup extends ActionGroup implements IWorkingSe
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		IMenuManager menuManager= actionBars.getMenuManager();
@@ -61,8 +62,8 @@ public class WorkingSetShowActionGroup extends ActionGroup implements IWorkingSe
 	}
 
 	public void cleanViewMenu(IMenuManager menuManager) {
-		for (Iterator iter= fContributions.iterator(); iter.hasNext();) {
-			IContributionItem removed= menuManager.remove((IContributionItem) iter.next());
+		for (Iterator<IContributionItem> iter= fContributions.iterator(); iter.hasNext();) {
+			IContributionItem removed= menuManager.remove(iter.next());
 			if (removed != null) {
 				removed.dispose();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/CodeGeneration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/CodeGeneration.java
index 308d949..05f5893 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/CodeGeneration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/CodeGeneration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -267,7 +267,7 @@ public class CodeGeneration {
 	public static String getMethodComment(IMethod method, IMethod overridden, String lineDelimiter) throws CoreException {
 		String retType= method.isConstructor() ? null : method.getReturnType();
 		String[] paramNames= method.getParameterNames();
-		String[] typeParameterNames= StubUtility.getTypeParameterNames(method.getTypeParameters());
+		String[] typeParameterNames= StubUtility.shouldGenerateMethodTypeParameterTags(method.getJavaProject()) ? StubUtility.getTypeParameterNames(method.getTypeParameters()) : new String[0];
 
 		return StubUtility.getMethodComment(method.getCompilationUnit(), method.getDeclaringType().getElementName(),
 			method.getElementName(), paramNames, method.getExceptionTypes(), retType, typeParameterNames, overridden, false, lineDelimiter);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementComparator.java
index 51a3bc4..7e617d3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementComparator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,6 +97,7 @@ public class JavaElementComparator extends ViewerComparator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerComparator#category(java.lang.Object)
 	 */
+	@Override
 	public int category(Object element) {
 		if (element instanceof IJavaElement) {
 			try {
@@ -184,6 +185,7 @@ public class JavaElementComparator extends ViewerComparator {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
+	@Override
 	public int compare(Viewer viewer, Object e1, Object e2) {
 		int cat1= category(e1);
 		int cat2= category(e2);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementContentProvider.java
index 53f0dde..b52dcc8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ public class JavaElementContentProvider extends StandardJavaElementContentProvid
 	/* (non-Javadoc)
 	 * Method declared on IContentProvider.
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		JavaCore.removeElementChangedListener(this);
@@ -64,6 +65,7 @@ public class JavaElementContentProvider extends StandardJavaElementContentProvid
 	/* (non-Javadoc)
 	 * Method declared on IContentProvider.
 	 */
+	@Override
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		super.inputChanged(viewer, oldInput, newInput);
 		fViewer= (TreeViewer)viewer;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementImageDescriptor.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementImageDescriptor.java
index 5f4a17a..1b701c5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementImageDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementImageDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,6 @@ import org.eclipse.jface.resource.ImageDescriptor;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
-import org.eclipse.jdt.internal.ui.packageview.PackageExplorerProblemsDecorator;
 
 /**
  * A {@link JavaElementImageDescriptor} consists of a base image and several adornments. The adornments
@@ -88,10 +87,15 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 
 	/**
 	 * Flag to render the build path error adornment.
-	 * @since 3.6
+	 * @since 3.7
 	 */
-	//TODO: make API in 3.7, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=308672
-	final static int BUILDPATH_ERROR= PackageExplorerProblemsDecorator.BUILDPATH_ERROR;
+	public final static int BUILDPATH_ERROR= 0x2000;
+
+	/**
+	 * Flag to render the 'native' adornment.
+	 * @since 3.7
+	 */
+	public final static int NATIVE= 	0x4000;
 
 	private ImageDescriptor fBaseImage;
 	private int fFlags;
@@ -118,7 +122,8 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 	 * Sets the descriptors adornments. Valid values are: {@link #ABSTRACT}, {@link #FINAL},
 	 * {@link #SYNCHRONIZED}, {@link #STATIC}, {@link #RUNNABLE}, {@link #WARNING},
 	 * {@link #ERROR}, {@link #OVERRIDES}, {@link #IMPLEMENTS}, {@link #CONSTRUCTOR},
-	 * {@link #DEPRECATED}, {@link #VOLATILE}, {@link #TRANSIENT} or any combination of those.
+	 * {@link #DEPRECATED}, {@link #VOLATILE}, {@link #TRANSIENT}, {@link #BUILDPATH_ERROR},
+	 * {@link #NATIVE}, or any combination of those.
 	 *
 	 * @param adornments the image descriptors adornments
 	 */
@@ -159,6 +164,7 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 	/* (non-Javadoc)
 	 * Method declared in CompositeImageDescriptor
 	 */
+	@Override
 	protected Point getSize() {
 		return fSize;
 	}
@@ -166,6 +172,7 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 	/* (non-Javadoc)
 	 * Method declared on Object.
 	 */
+	@Override
 	public boolean equals(Object object) {
 		if (object == null || !JavaElementImageDescriptor.class.equals(object.getClass()))
 			return false;
@@ -177,6 +184,7 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 	/* (non-Javadoc)
 	 * Method declared on Object.
 	 */
+	@Override
 	public int hashCode() {
 		return fBaseImage.hashCode() | fFlags | fSize.hashCode();
 	}
@@ -184,6 +192,7 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 	/* (non-Javadoc)
 	 * Method declared in CompositeImageDescriptor
 	 */
+	@Override
 	protected void drawCompositeImage(int width, int height) {
 		ImageData bg= getImageData(fBaseImage);
 
@@ -257,7 +266,9 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 		if ((fFlags & STATIC) != 0) {
 			addTopRightImage(JavaPluginImages.DESC_OVR_STATIC, pos);
 		}
-
+		if ((fFlags & NATIVE) != 0) {
+			addTopRightImage(JavaPluginImages.DESC_OVR_NATIVE, pos);
+		}
 	}
 
 	private void drawBottomRight() {
@@ -269,6 +280,7 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 		int syncAndOver= SYNCHRONIZED | OVERRIDES;
 		int syncAndImpl= SYNCHRONIZED | IMPLEMENTS;
 
+		// methods:
 		if ((flags & syncAndOver) == syncAndOver) { // both flags set: merged overlay image
 			addBottomRightImage(JavaPluginImages.DESC_OVR_SYNCH_AND_OVERRIDES, pos);
 			flags &= ~syncAndOver; // clear to not render again
@@ -285,9 +297,13 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 		if ((flags & SYNCHRONIZED) != 0) {
 			addBottomRightImage(JavaPluginImages.DESC_OVR_SYNCH, pos);
 		}
+		
+		// types:
 		if ((flags & RUNNABLE) != 0) {
 			addBottomRightImage(JavaPluginImages.DESC_OVR_RUN, pos);
 		}
+		
+		// fields:
 		if ((flags & TRANSIENT) != 0) {
 			addBottomRightImage(JavaPluginImages.DESC_OVR_TRANSIENT, pos);
 		}
@@ -298,7 +314,7 @@ public class JavaElementImageDescriptor extends CompositeImageDescriptor {
 		if ((fFlags & ERROR) != 0) {
 			addBottomLeftImage(JavaPluginImages.DESC_OVR_ERROR, pos);
 		}
-		if ((fFlags & PackageExplorerProblemsDecorator.BUILDPATH_ERROR) != 0) {
+		if ((fFlags & BUILDPATH_ERROR) != 0) {
 			addBottomLeftImage(JavaPluginImages.DESC_OVR_BUILDPATH_ERROR, pos);
 		}
 		if ((fFlags & WARNING) != 0) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java
index 2dd78d6..1c6eae3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -234,6 +234,7 @@ public class JavaElementLabelProvider extends LabelProvider implements IStyledLa
 	/* (non-Javadoc)
 	 * @see ILabelProvider#getImage
 	 */
+	@Override
 	public Image getImage(Object element) {
 		Image result= fImageLabelProvider.getImageLabel(element, fImageFlags);
 		if (result != null) {
@@ -249,6 +250,7 @@ public class JavaElementLabelProvider extends LabelProvider implements IStyledLa
 	/* (non-Javadoc)
 	 * @see ILabelProvider#getText
 	 */
+	@Override
 	public String getText(Object element) {
 		return JavaElementLabels.getTextLabel(element, fTextFlags);
 	}
@@ -270,6 +272,7 @@ public class JavaElementLabelProvider extends LabelProvider implements IStyledLa
 	/* (non-Javadoc)
 	 * @see IBaseLabelProvider#dispose
 	 */
+	@Override
 	public void dispose() {
 		fStorageLabelProvider.dispose();
 		fImageLabelProvider.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabels.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabels.java
index a459a73..e422ec2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabels.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementLabels.java
@@ -232,8 +232,10 @@ public class JavaElementLabels {
 	public final static long P_POST_QUALIFIED= 1L << 36;
 
 	/**
-	 * Package names are compressed.
-	 * e.g. <code>o*.e*.search</code>
+	 * Package names are abbreviated if
+	 * {@link PreferenceConstants#APPEARANCE_ABBREVIATE_PACKAGE_NAMES} is <code>true</code> and/or
+	 * compressed if {@link PreferenceConstants#APPEARANCE_COMPRESS_PACKAGE_NAMES} is
+	 * <code>true</code>.
 	 */
 	public final static long P_COMPRESSED= 1L << 37;
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementSorter.java
index 5e510d1..8bef9c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaElementSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@ public class JavaElementSorter extends ViewerSorter {
 	/*
 	 * @see ViewerSorter#category
 	 */
+	@Override
 	public int category(Object element) {
 		return fComparator.category(element);
 	}
@@ -61,6 +62,7 @@ public class JavaElementSorter extends ViewerSorter {
 	/*
 	 * @see ViewerSorter#compare
 	 */
+	@Override
 	public int compare(Viewer viewer, Object e1, Object e2) {
 		return fComparator.compare(viewer, e1, e2);
 	}
@@ -69,6 +71,7 @@ public class JavaElementSorter extends ViewerSorter {
 	 * Overrides {@link org.eclipse.jface.viewers.ViewerSorter#getCollator()}.
 	 * @deprecated The method is not intended to be used by clients.
 	 */
+	@Override
 	public final java.text.Collator getCollator() {
 		// kept in for API compatibility
 		if (collator == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaUI.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaUI.java
index 597d8e7..5d52dd5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaUI.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/JavaUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -329,11 +329,11 @@ public final class JavaUI {
 			roots= project.getPackageFragmentRoots();
 		}
 
-		List consideredRoots= null;
+		List<IPackageFragmentRoot> consideredRoots= null;
 		if ((style & IJavaElementSearchConstants.CONSIDER_BINARIES) != 0) {
 			consideredRoots= Arrays.asList(roots);
 		} else {
-			consideredRoots= new ArrayList(roots.length);
+			consideredRoots= new ArrayList<IPackageFragmentRoot>(roots.length);
 			for (int i= 0; i < roots.length; i++) {
 				IPackageFragmentRoot root= roots[i];
 				if (root.getKind() != IPackageFragmentRoot.K_BINARY)
@@ -342,7 +342,7 @@ public final class JavaUI {
 			}
 		}
 
-		IJavaSearchScope searchScope= SearchEngine.createJavaSearchScope((IJavaElement[])consideredRoots.toArray(new IJavaElement[consideredRoots.size()]));
+		IJavaSearchScope searchScope= SearchEngine.createJavaSearchScope(consideredRoots.toArray(new IJavaElement[consideredRoots.size()]));
 		BusyIndicatorRunnableContext context= new BusyIndicatorRunnableContext();
 		if (style == 0 || style == IJavaElementSearchConstants.CONSIDER_REQUIRED_PROJECTS) {
 			return createPackageDialog(parent, context, searchScope, false, true, filter);
@@ -805,7 +805,7 @@ public final class JavaUI {
 	 */
 	public static org.eclipse.jdt.core.IWorkingCopy[] getSharedWorkingCopiesOnClasspath() {
 		org.eclipse.jdt.core.IWorkingCopy[] wcs= getSharedWorkingCopies();
-		List result= new ArrayList(wcs.length);
+		List<org.eclipse.jdt.core.IWorkingCopy> result= new ArrayList<org.eclipse.jdt.core.IWorkingCopy>(wcs.length);
 		for (int i = 0; i < wcs.length; i++) {
 			org.eclipse.jdt.core.IWorkingCopy wc= wcs[i];
 			if (wc instanceof IJavaElement) {
@@ -815,7 +815,7 @@ public final class JavaUI {
 				}
 			}
 		}
-		return (org.eclipse.jdt.core.IWorkingCopy[])result.toArray(new org.eclipse.jdt.core.IWorkingCopy[result.size()]);
+		return result.toArray(new org.eclipse.jdt.core.IWorkingCopy[result.size()]);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
index 1f8f96f..a3036e6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,7 +53,6 @@ import org.eclipse.jdt.internal.ui.preferences.formatter.FormatterProfileManager
 import org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerRegistry;
 import org.eclipse.jdt.internal.ui.text.java.ProposalSorterRegistry;
 import org.eclipse.jdt.internal.ui.text.spelling.SpellCheckEngine;
-import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLabelComposer;
 
 
 /**
@@ -139,26 +138,25 @@ public class PreferenceConstants {
 	 * A named preference that defines the patterns used for package name abbreviation.
 	 * <p>
 	 * Value is of type <code>String</code>. Value is a newline separated list of
-	 * packagePrefix=abbreviation pairs. For example, a pattern of
-	 * 'javax.management=<JMX>' will abbreviate 'javax.management.monitor' to
-	 * '<JMX>.monitor'. A '#' at the beginning of a line disables an entry.
+	 * packagePrefix=abbreviation pairs. For example, a pattern of 'javax.management=<JMX>'
+	 * will abbreviate 'javax.management.monitor' to '<JMX>.monitor'. A '#' at the beginning
+	 * of a line disables an entry.
 	 * </p>
-	 * @since 3.6
+	 * 
+	 * @since 3.7
 	 */
-	//TODO: make API in 3.7, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=306069
-	static final String APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW= JavaElementLabelComposer.APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW;
+	public static final String APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW= "org.eclipse.jdt.ui.pkgNameAbbreviationPatternForPackagesView"; //$NON-NLS-1$
 
 	/**
 	 * A named preference that controls if package name abbreviation is turned on or off.
 	 * <p>
 	 * Value is of type <code>Boolean</code>.
 	 * </p>
-	 *
+	 * 
 	 * @see #APPEARANCE_PKG_NAME_ABBREVIATION_PATTERN_FOR_PKG_VIEW
-	 * @since 3.6
+	 * @since 3.7
 	 */
-	//TODO: make API in 3.7, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=306069
-	static final String APPEARANCE_ABBREVIATE_PACKAGE_NAMES= JavaElementLabelComposer.APPEARANCE_ABBREVIATE_PACKAGE_NAMES;
+	public static final String APPEARANCE_ABBREVIATE_PACKAGE_NAMES= "org.eclipse.jdt.ui.abbreviatepackagenames"; //$NON-NLS-1$
 
 	/**
 	 * A named preference that controls if empty inner packages are folded in
@@ -1131,6 +1129,15 @@ public class PreferenceConstants {
 	public final static String EDITOR_SMART_PASTE= "smartPaste"; //$NON-NLS-1$
 
 	/**
+	 * A named preference that controls whether on Enter key the indentation should be smart or the same as previous line.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * @since 3.7
+	 */
+	public final static String EDITOR_SMART_INDENT_AFTER_NEWLINE= "smartIndentAfterNewline"; //$NON-NLS-1$
+
+	/**
 	 * A named preference that controls whether 'paste' should update the imports.
 	 * <p>
 	 * Value is of type <code>Boolean</code>.
@@ -1216,7 +1223,7 @@ public class PreferenceConstants {
 
 	/**
 	 * A named preference that holds the color used as the text foreground.
-	 * This value has not effect if the system default color is used.
+	 * This value has no effect if the system default color is used.
 	 * <p>
 	 * Value is of type <code>String</code>. A RGB color value encoded as a string
 	 * using class <code>PreferenceConverter</code>
@@ -1240,7 +1247,7 @@ public class PreferenceConstants {
 
 	/**
 	 * A named preference that holds the color used as the text background.
-	 * This value has not effect if the system default color is used.
+	 * This value has no effect if the system default color is used.
 	 * <p>
 	 * Value is of type <code>String</code>. A RGB color value encoded as a string
 	 * using class <code>PreferenceConverter</code>
@@ -3674,7 +3681,7 @@ public class PreferenceConstants {
 		if (store.getBoolean(PreferenceConstants.CODEGEN_USE_GETTERSETTER_PREFIX)) {
 			String prefix= store.getString(PreferenceConstants.CODEGEN_GETTERSETTER_PREFIX);
 			if (prefix.length() > 0) {
-				new InstanceScope().getNode(JavaCore.PLUGIN_ID).put(JavaCore.CODEASSIST_FIELD_PREFIXES, prefix);
+				InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID).put(JavaCore.CODEASSIST_FIELD_PREFIXES, prefix);
 				store.setToDefault(PreferenceConstants.CODEGEN_USE_GETTERSETTER_PREFIX);
 				store.setToDefault(PreferenceConstants.CODEGEN_GETTERSETTER_PREFIX);
 			}
@@ -3682,7 +3689,7 @@ public class PreferenceConstants {
 		if (store.getBoolean(PreferenceConstants.CODEGEN_USE_GETTERSETTER_SUFFIX)) {
 			String suffix= store.getString(PreferenceConstants.CODEGEN_GETTERSETTER_SUFFIX);
 			if (suffix.length() > 0) {
-				new InstanceScope().getNode(JavaCore.PLUGIN_ID).put(JavaCore.CODEASSIST_FIELD_SUFFIXES, suffix);
+				InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID).put(JavaCore.CODEASSIST_FIELD_SUFFIXES, suffix);
 				store.setToDefault(PreferenceConstants.CODEGEN_USE_GETTERSETTER_SUFFIX);
 				store.setToDefault(PreferenceConstants.CODEGEN_GETTERSETTER_SUFFIX);
 			}
@@ -3794,6 +3801,7 @@ public class PreferenceConstants {
 		store.setDefault(PreferenceConstants.EDITOR_ESCAPE_STRINGS, false);
 		store.setDefault(PreferenceConstants.EDITOR_ADD_JAVADOC_TAGS, true);
 		store.setDefault(PreferenceConstants.EDITOR_FORMAT_JAVADOCS, false);
+		store.setDefault(PreferenceConstants.EDITOR_SMART_INDENT_AFTER_NEWLINE, true);
 
 		int sourceHoverModifier= SWT.MOD2;
 		String sourceHoverModifierName= Action.findModifierString(sourceHoverModifier);	// Shift
@@ -4049,11 +4057,11 @@ public class PreferenceConstants {
 				return val;
 			}
 		}
-		val= new InstanceScope().getNode(JavaUI.ID_PLUGIN).get(key, null);
+		val= InstanceScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).get(key, null);
 		if (val != null) {
 			return val;
 		}
-		return new DefaultScope().getNode(JavaUI.ID_PLUGIN).get(key, null);
+		return DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).get(key, null);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/ProblemsLabelDecorator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/ProblemsLabelDecorator.java
index adff97a..ab1e62d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/ProblemsLabelDecorator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/ProblemsLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,9 +48,10 @@ import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.ISourceReference;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.launching.JavaRuntime;
+
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
-import org.eclipse.jdt.internal.ui.packageview.PackageExplorerProblemsDecorator;
 import org.eclipse.jdt.internal.ui.viewsupport.IProblemChangedListener;
 import org.eclipse.jdt.internal.ui.viewsupport.ImageDescriptorRegistry;
 import org.eclipse.jdt.internal.ui.viewsupport.ImageImageDescriptor;
@@ -108,14 +109,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
 
 	private static final int ERRORTICK_WARNING= JavaElementImageDescriptor.WARNING;
 	private static final int ERRORTICK_ERROR= JavaElementImageDescriptor.ERROR;
-	private static final int ERRORTICK_BUILDPATH_ERROR= PackageExplorerProblemsDecorator.BUILDPATH_ERROR;
-
-	/**
-	 * JRE container problem marker type (value
-	 * <code>"org.eclipse.jdt.launching.jreContainerMarker"</code>). This can be used to recognize
-	 * those markers in the workspace that flag problems in the JRE container.
-	 */
-	private static final String JRE_CONTAINER_PROBLEM_MARKER= "org.eclipse.jdt.launching.jreContainerMarker"; //$NON-NLS-1$
+	private static final int ERRORTICK_BUILDPATH_ERROR= JavaElementImageDescriptor.BUILDPATH_ERROR;
 
 	private ImageDescriptorRegistry fRegistry;
 	private boolean fUseNewRegistry= false;
@@ -251,7 +245,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
 				if (severity == IMarker.SEVERITY_ERROR) {
 					return ERRORTICK_BUILDPATH_ERROR;
 				}
-				severity= res.findMaxProblemSeverity(JRE_CONTAINER_PROBLEM_MARKER, true, IResource.DEPTH_ZERO);
+				severity= res.findMaxProblemSeverity(JavaRuntime.JRE_CONTAINER_MARKER, true, IResource.DEPTH_ZERO);
 				if (severity == IMarker.SEVERITY_ERROR) {
 					return ERRORTICK_BUILDPATH_ERROR;
 				}
@@ -298,9 +292,9 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
 
 	private int getErrorTicksFromAnnotationModel(IAnnotationModel model, ISourceReference sourceElement) throws CoreException {
 		int info= 0;
-		Iterator iter= model.getAnnotationIterator();
+		Iterator<Annotation> iter= model.getAnnotationIterator();
 		while ((info != ERRORTICK_ERROR) && iter.hasNext()) {
-			Annotation annot= (Annotation) iter.next();
+			Annotation annot= iter.next();
 			IMarker marker= isAnnotationInRange(model, annot, sourceElement);
 			if (marker != null) {
 				int priority= marker.getAttribute(IMarker.SEVERITY, -1);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.java
index 4d9d2fb..7e36eca 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,6 +68,7 @@ public final class SharedASTProvider {
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
 			return fName;
 		}
@@ -108,18 +109,19 @@ public final class SharedASTProvider {
 	 * <p>
 	 * Clients are not allowed to modify the AST and must not keep any references.
 	 * </p>
-	 *
+	 * 
 	 * @param element the {@link ITypeRoot}, must not be <code>null</code>
 	 * @param waitFlag {@link #WAIT_YES}, {@link #WAIT_NO} or {@link #WAIT_ACTIVE_ONLY}
 	 * @param progressMonitor the progress monitor or <code>null</code>
 	 * @return the AST or <code>null</code>.
 	 *         <dl>
-	 *         <li>if {@link #WAIT_NO} has been specified <code>null</code> is returned if the
+	 *         <li>If {@link #WAIT_NO} has been specified <code>null</code> is returned if the
 	 *         element is not input of the current Java editor or no AST is available</li>
-	 *         <li>if {@link #WAIT_ACTIVE_ONLY} has been specified <code>null</code> is returned if
+	 *         <li>If {@link #WAIT_ACTIVE_ONLY} has been specified <code>null</code> is returned if
 	 *         the element is not input of the current Java editor</li>
-	 *         <li>if {@link #WAIT_YES} has been specified either the shared AST is returned or a
+	 *         <li>If {@link #WAIT_YES} has been specified either the shared AST is returned or a
 	 *         new AST is created.</li>
+	 *         <li><code>null</code> will be returned if the operation gets canceled.</li>
 	 *         </dl>
 	 */
 	public static CompilationUnit getAST(ITypeRoot element, WAIT_FLAG waitFlag, IProgressMonitor progressMonitor) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java
index 31840ec..eef7b8e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/StandardJavaElementContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -283,7 +283,7 @@ public class StandardJavaElementContentProvider implements ITreeContentProvider,
 			return NO_CHILDREN;
 
 		IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-		List list= new ArrayList(roots.length);
+		List<Object> list= new ArrayList<Object>(roots.length);
 		// filter out package fragments that correspond to projects and
 		// replace them with the package fragments directly
 		for (int i= 0; i < roots.length; i++) {
@@ -345,7 +345,7 @@ public class StandardJavaElementContentProvider implements ITreeContentProvider,
 		if (javaProject == null || !javaProject.exists())
 			return members;
 		boolean isFolderOnClasspath = javaProject.isOnClasspath(folder);
-		List nonJavaResources= new ArrayList();
+		List<IResource> nonJavaResources= new ArrayList<IResource>();
 		// Can be on classpath but as a member of non-java resource folder
 		for (int i= 0; i < members.length; i++) {
 			IResource member= members[i];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AbstractOpenWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AbstractOpenWizardAction.java
index b3d2921..9da41b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AbstractOpenWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AbstractOpenWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,6 +68,7 @@ public abstract class AbstractOpenWizardAction extends Action {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
+	@Override
 	public void run() {
 		Shell shell= getShell();
 		if (!doCreateProjectFirstOnEmptyWorkspace(shell)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddDelegateMethodsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddDelegateMethodsAction.java
index ac4d92a..b351df9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddDelegateMethodsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddDelegateMethodsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,9 +62,9 @@ import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.AddDelegateMethodsOperation;
+import org.eclipse.jdt.internal.corext.codemanipulation.AddDelegateMethodsOperation.DelegateEntry;
 import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2;
-import org.eclipse.jdt.internal.corext.codemanipulation.AddDelegateMethodsOperation.DelegateEntry;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil;
 import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
@@ -127,7 +127,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 			int duplicateCount= 0;
 			if (selection != null && selection.length > 0) {
 
-				HashSet signatures= new HashSet(selection.length);
+				HashSet<String> signatures= new HashSet<String>(selection.length);
 				for (int index= 0; index < selection.length; index++) {
 					if (selection[index] instanceof DelegateEntry) {
 						DelegateEntry delegateEntry= (DelegateEntry) selection[index];
@@ -168,7 +168,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 			if (binding != null) {
 				fDelegateEntries= StubUtility2.getDelegatableMethods(binding);
 
-				List expanded= new ArrayList();
+				List<IVariableBinding> expanded= new ArrayList<IVariableBinding>();
 				for (int index= 0; index < fields.length; index++) {
 					VariableDeclarationFragment fragment= ASTNodeSearchUtil.getFieldDeclarationFragmentNode(fields[index], astRoot);
 					if (fragment != null) {
@@ -177,7 +177,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 							expanded.add(variableBinding);
 					}
 				}
-				fExpanded= (IVariableBinding[]) expanded.toArray(new IVariableBinding[expanded.size()]);
+				fExpanded= expanded.toArray(new IVariableBinding[expanded.size()]);
 			}
 		}
 
@@ -186,7 +186,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 
 		public Object[] getChildren(Object element) {
 			if (element instanceof IVariableBinding) {
-				List result= new ArrayList();
+				List<DelegateEntry> result= new ArrayList<DelegateEntry>();
 				for (int i= 0; i < fDelegateEntries.length; i++) {
 					if (element == fDelegateEntries[i].field) {
 						result.add(fDelegateEntries[i]);
@@ -202,7 +202,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 		}
 
 		public Object[] getElements(Object inputElement) {
-			HashSet result= new HashSet();
+			HashSet<IVariableBinding> result= new HashSet<IVariableBinding>();
 			for (int i= 0; i < fDelegateEntries.length; i++) {
 				DelegateEntry curr= fDelegateEntries[i];
 				result.add(curr.field);
@@ -238,6 +238,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 			super(parent, labelProvider, contentProvider, editor, type, isConstructor);
 		}
 
+		@Override
 		protected void configureShell(Shell shell) {
 			super.configureShell(shell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.ADD_DELEGATE_METHODS_SELECTION_DIALOG);
@@ -246,10 +247,12 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog#createLinkControl(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createLinkControl(Composite composite) {
 			Link link= new Link(composite, SWT.WRAP);
 			link.setText(ActionMessages.AddDelegateMethodsAction_template_link_message);
 			link.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					openCodeTempatePage(CodeTemplateContextType.OVERRIDECOMMENT_ID);
 				}
@@ -265,6 +268,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 
 	private static class AddDelegateMethodsLabelProvider extends BindingLabelProvider {
 
+		@Override
 		public Image getImage(Object element) {
 			if (element instanceof DelegateEntry) {
 				DelegateEntry delegateEntry= (DelegateEntry) element;
@@ -275,6 +279,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 			return null;
 		}
 
+		@Override
 		public String getText(Object element) {
 			if (element instanceof DelegateEntry) {
 				DelegateEntry delegateEntry= (DelegateEntry) element;
@@ -288,12 +293,14 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 
 	private static class AddDelegateMethodsViewerComparator extends ViewerComparator {
 
+		@Override
 		public int category(Object element) {
 			if (element instanceof DelegateEntry)
 				return 0;
 			return 1;
 		}
 
+		@Override
 		public int compare(Viewer viewer, Object o1, Object o2) {
 			if (o1 instanceof DelegateEntry && o2 instanceof DelegateEntry) {
 				String bindingLabel1= BindingLabelProvider.getBindingLabel(((DelegateEntry) o1).delegateMethod, BindingLabelProvider.DEFAULT_TEXTFLAGS);
@@ -393,7 +400,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 	}
 
 	private IField[] getSelectedFields(IStructuredSelection selection) {
-		List elements= selection.toList();
+		List<?> elements= selection.toList();
 		if (elements.size() > 0) {
 			IField[] result= new IField[elements.size()];
 			ICompilationUnit unit= null;
@@ -434,6 +441,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IField[] selectedFields= getSelectedFields(selection);
@@ -457,6 +465,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			if (!ActionUtil.isProcessable(fEditor))
@@ -503,6 +512,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(canEnable(selection));
@@ -519,6 +529,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
@@ -555,10 +566,10 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 					notifyResult(false);
 					return;
 				}
-				List tuples= new ArrayList(object.length);
+				List<DelegateEntry> tuples= new ArrayList<DelegateEntry>(object.length);
 				for (int index= 0; index < object.length; index++) {
 					if (object[index] instanceof DelegateEntry)
-						tuples.add(object[index]);
+						tuples.add((DelegateEntry) object[index]);
 				}
 				IEditorPart part= JavaUI.openInEditor(type);
 				IRewriteTarget target= (IRewriteTarget) part.getAdapter(IRewriteTarget.class);
@@ -568,7 +579,7 @@ public class AddDelegateMethodsAction extends SelectionDispatchAction {
 					CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(type.getJavaProject());
 					settings.createComments= dialog.getGenerateComment();
 
-					DelegateEntry[] methodToDelegate= (DelegateEntry[]) tuples.toArray(new DelegateEntry[tuples.size()]);
+					DelegateEntry[] methodToDelegate= tuples.toArray(new DelegateEntry[tuples.size()]);
 
 					AddDelegateMethodsOperation operation= new AddDelegateMethodsOperation(astRoot, methodToDelegate, dialog.getElementPosition(), settings, true, false);
 					IRunnableContext context= JavaPlugin.getActiveWorkbenchWindow();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddGetterSetterAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddGetterSetterAction.java
index 007d385..7d85b97 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddGetterSetterAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddGetterSetterAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,7 +69,6 @@ import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 
 import org.eclipse.jdt.internal.corext.codemanipulation.AddGetterSetterOperation;
@@ -96,6 +95,7 @@ import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
 import org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter;
 import org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext;
@@ -177,6 +177,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(canEnable(selection));
@@ -191,6 +192,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IField[] selectedFields= getSelectedFields(selection);
@@ -291,7 +293,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 
 		ILabelProvider lp= new AddGetterSetterLabelProvider();
 		resetNumEntries();
-		Map entries= createGetterSetterMapping(type);
+		Map<IField, GetterSetterEntry[]> entries= createGetterSetterMapping(type);
 		if (entries.isEmpty()) {
 			MessageDialog.openInformation(getShell(), DIALOG_TITLE, ActionMessages.AddGettSetterAction_typeContainsNoFields_message);
 			notifyResult(false);
@@ -312,7 +314,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			dialog.setInitialSelections(preselected);
 			dialog.setExpandedElements(preselected);
 		}
-		final Set keySet= new LinkedHashSet(entries.keySet());
+		final Set<IField> keySet= new LinkedHashSet<IField>(entries.keySet());
 		int dialogResult= dialog.open();
 		if (dialogResult == Window.OK) {
 			Object[] result= dialog.getResult();
@@ -335,7 +337,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 				setterFields= getSetterOnlyFields(result, keySet);
 				getterSetterFields= getGetterSetterFields(result, keySet);
 			}
-			generate(type, getterFields, setterFields, getterSetterFields, new RefactoringASTParser(AST.JLS3).parse(type.getCompilationUnit(), true), dialog.getElementPosition());
+			generate(type, getterFields, setterFields, getterSetterFields, new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(type.getCompilationUnit(), true), dialog.getElementPosition());
 		}
 		notifyResult(dialogResult == Window.OK);
 	}
@@ -350,9 +352,9 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 
 		public IStatus validate(Object[] selection) {
 			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=38478
-			HashSet map= null;
+			HashSet<Object> map= null;
 			if ((selection != null) && (selection.length > 1)) {
-				map= new HashSet(selection.length);
+				map= new HashSet<Object>(selection.length);
 			}
 
 			int selectedCount= 0;
@@ -414,8 +416,8 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 	}
 
 	// returns a list of fields with setter entries checked
-	private static IField[] getSetterFields(Object[] result, Set set) {
-		List list= new ArrayList(0);
+	private static IField[] getSetterFields(Object[] result, Set<IField> set) {
+		List<IField> list= new ArrayList<IField>(0);
 		Object each= null;
 		GetterSetterEntry entry= null;
 		for (int i= 0; i < result.length; i++) {
@@ -428,12 +430,12 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			}
 		}
 		list= reorderFields(list, set);
-		return (IField[]) list.toArray(new IField[list.size()]);
+		return list.toArray(new IField[list.size()]);
 	}
 
 	// returns a list of fields with getter entries checked
-	private static IField[] getGetterFields(Object[] result, Set set) {
-		List list= new ArrayList(0);
+	private static IField[] getGetterFields(Object[] result, Set<IField> set) {
+		List<IField> list= new ArrayList<IField>(0);
 		Object each= null;
 		GetterSetterEntry entry= null;
 		for (int i= 0; i < result.length; i++) {
@@ -446,12 +448,12 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			}
 		}
 		list= reorderFields(list, set);
-		return (IField[]) list.toArray(new IField[list.size()]);
+		return list.toArray(new IField[list.size()]);
 	}
 
 	// returns a list of fields with only getter entries checked
-	private static IField[] getGetterOnlyFields(Object[] result, Set set) {
-		List list= new ArrayList(0);
+	private static IField[] getGetterOnlyFields(Object[] result, Set<IField> set) {
+		List<IField> list= new ArrayList<IField>(0);
 		Object each= null;
 		GetterSetterEntry entry= null;
 		boolean getterSet= false;
@@ -471,12 +473,12 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 				getterSet= false;
 		}
 		list= reorderFields(list, set);
-		return (IField[]) list.toArray(new IField[list.size()]);
+		return list.toArray(new IField[list.size()]);
 	}
 
 	// returns a list of fields with only setter entries checked
-	private static IField[] getSetterOnlyFields(Object[] result, Set set) {
-		List list= new ArrayList(0);
+	private static IField[] getSetterOnlyFields(Object[] result, Set<IField> set) {
+		List<IField> list= new ArrayList<IField>(0);
 		Object each= null;
 		GetterSetterEntry entry= null;
 		boolean getterSet= false;
@@ -495,12 +497,12 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 				getterSet= false;
 		}
 		list= reorderFields(list, set);
-		return (IField[]) list.toArray(new IField[list.size()]);
+		return list.toArray(new IField[list.size()]);
 	}
 
 	// returns a list of fields with both entries checked
-	private static IField[] getGetterSetterFields(Object[] result, Set set) {
-		List list= new ArrayList(0);
+	private static IField[] getGetterSetterFields(Object[] result, Set<IField> set) {
+		List<IField> list= new ArrayList<IField>(0);
 		Object each= null;
 		GetterSetterEntry entry= null;
 		boolean getterSet= false;
@@ -519,13 +521,13 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 				getterSet= false;
 		}
 		list= reorderFields(list, set);
-		return (IField[]) list.toArray(new IField[list.size()]);
+		return list.toArray(new IField[list.size()]);
 	}
 
-	private static List reorderFields(List collection, Set set) {
-		final List list= new ArrayList(collection.size());
-		for (final Iterator iterator= set.iterator(); iterator.hasNext();) {
-			final IField field= (IField) iterator.next();
+	private static List<IField> reorderFields(List<IField> collection, Set<IField> set) {
+		final List<IField> list= new ArrayList<IField>(collection.size());
+		for (final Iterator<IField> iterator= set.iterator(); iterator.hasNext();) {
+			final IField field= iterator.next();
 			if (collection.contains(field))
 				list.add(field);
 		}
@@ -552,12 +554,14 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			if (!ActionUtil.isProcessable(fEditor)) {
@@ -678,7 +682,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 	 * not valid.
 	 */
 	private IField[] getSelectedFields(IStructuredSelection selection) {
-		List elements= selection.toList();
+		List<?> elements= selection.toList();
 		int nElements= elements.size();
 		if (nElements > 0) {
 			IField[] res= new IField[nElements];
@@ -725,6 +729,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 		/*
 		 * @see ILabelProvider#getText(Object)
 		 */
+		@Override
 		public String getText(Object element) {
 			if (element instanceof GetterSetterEntry) {
 				GetterSetterEntry entry= (GetterSetterEntry) element;
@@ -744,6 +749,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 		/*
 		 * @see ILabelProvider#getImage(Object)
 		 */
+		@Override
 		public Image getImage(Object element) {
 			if (element instanceof GetterSetterEntry) {
 				int flags= 0;
@@ -767,14 +773,14 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 	 * @throws JavaModelException if the type does not exist or if an exception occurs while
 	 *             accessing its corresponding resource
 	 */
-	private Map createGetterSetterMapping(IType type) throws JavaModelException {
+	private Map<IField, GetterSetterEntry[]> createGetterSetterMapping(IType type) throws JavaModelException {
 		IField[] fields= type.getFields();
-		Map result= new LinkedHashMap();
+		Map<IField, GetterSetterEntry[]> result= new LinkedHashMap<IField, GetterSetterEntry[]>();
 		for (int i= 0; i < fields.length; i++) {
 			IField field= fields[i];
 			int flags= field.getFlags();
 			if (!Flags.isEnum(flags)) {
-				List l= new ArrayList(2);
+				List<GetterSetterEntry> l= new ArrayList<GetterSetterEntry>(2);
 				if (GetterSetterUtil.getGetter(field) == null) {
 					l.add(new GetterSetterEntry(field, true, Flags.isFinal(flags)));
 					incNumEntries();
@@ -796,9 +802,9 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 
 		private static final Object[] EMPTY= new Object[0];
 
-		private Map fGetterSetterEntries;
+		private Map<IField, GetterSetterEntry[]> fGetterSetterEntries;
 
-		public AddGetterSetterContentProvider(Map entries) {
+		public AddGetterSetterContentProvider(Map<IField, GetterSetterEntry[]> entries) {
 			fGetterSetterEntries= entries;
 		}
 
@@ -813,7 +819,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 		 */
 		public Object[] getChildren(Object parentElement) {
 			if (parentElement instanceof IField)
-				return (Object[]) fGetterSetterEntries.get(parentElement);
+				return fGetterSetterEntries.get(parentElement);
 			return EMPTY;
 		}
 
@@ -859,6 +865,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			fContentProvider= contentProvider;
 		}
 
+		@Override
 		public boolean select(Viewer viewer, Object parentElement, Object element) {
 			if (element instanceof GetterSetterEntry) {
 				GetterSetterEntry getterSetterEntry= (GetterSetterEntry) element;
@@ -894,13 +901,13 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 		private boolean fSortOrder;
 		private boolean fAllowSettersForFinals;
 
-		private ArrayList fPreviousSelectedFinals;
+		private ArrayList<GetterSetterEntry> fPreviousSelectedFinals;
 
 
 		public GetterSetterTreeSelectionDialog(Shell parent, ILabelProvider labelProvider, AddGetterSetterContentProvider contentProvider, CompilationUnitEditor editor, IType type) throws JavaModelException {
 			super(parent, labelProvider, contentProvider, editor, type, false);
 			fContentProvider= contentProvider;
-			fPreviousSelectedFinals= new ArrayList();
+			fPreviousSelectedFinals= new ArrayList<GetterSetterEntry>();
 
 			// http://bugs.eclipse.org/bugs/show_bug.cgi?id=19253
 			IDialogSettings dialogSettings= JavaPlugin.getDefault().getDialogSettings();
@@ -941,7 +948,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 				fSettings.put(ALLOW_SETTERS_FOR_FINALS, allowSettersForFinals);
 				CheckboxTreeViewer treeViewer= getTreeViewer();
 				if (treeViewer != null) {
-					ArrayList newChecked= new ArrayList();
+					ArrayList<GetterSetterEntry> newChecked= new ArrayList<GetterSetterEntry>();
 					if (allowSettersForFinals) {
 						newChecked.addAll(fPreviousSelectedFinals);
 					}
@@ -971,6 +978,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 		/* (non-Javadoc)
 		 * @see org.eclipse.ui.dialogs.CheckedTreeSelectionDialog#createTreeViewer(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected CheckboxTreeViewer createTreeViewer(Composite parent) {
 			CheckboxTreeViewer treeViewer= super.createTreeViewer(parent);
 			if (!fAllowSettersForFinals) {
@@ -979,6 +987,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			return treeViewer;
 		}
 
+		@Override
 		protected void configureShell(Shell shell) {
 			super.configureShell(shell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.ADD_GETTER_SETTER_SELECTION_DIALOG);
@@ -989,6 +998,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			createButton(buttonComposite, SELECT_SETTERS_ID, ActionMessages.GetterSetterTreeSelectionDialog_select_setters, false);
 		}
 
+		@Override
 		protected void buttonPressed(int buttonId) {
 			super.buttonPressed(buttonId);
 			switch (buttonId) {
@@ -1005,6 +1015,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			}
 		}
 
+		@Override
 		protected Composite createInsertPositionCombo(Composite composite) {
 			Button addRemoveFinalCheckbox= addAllowSettersForFinalslCheckbox(composite);
 			addRemoveFinalCheckbox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -1051,6 +1062,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 			combo.setLayoutData(gd);
 			combo.addSelectionListener(new SelectionAdapter() {
 
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					setSortOrder(combo.getSelectionIndex() == methodIndex);
 				}
@@ -1060,7 +1072,7 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 
 		private Object[] getGetterSetterElements(boolean isGetter) {
 			Object[] allFields= fContentProvider.getElements(null);
-			Set result= new HashSet();
+			Set<GetterSetterEntry> result= new HashSet<GetterSetterEntry>();
 			for (int i= 0; i < allFields.length; i++) {
 				IField field= (IField) allFields[i];
 				GetterSetterEntry[] entries= getEntries(field);
@@ -1074,10 +1086,11 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 		}
 
 		private GetterSetterEntry[] getEntries(IField field) {
-			List result= Arrays.asList(fContentProvider.getChildren(field));
-			return (GetterSetterEntry[]) result.toArray(new GetterSetterEntry[result.size()]);
+			List<Object> result= Arrays.asList(fContentProvider.getChildren(field));
+			return result.toArray(new GetterSetterEntry[result.size()]);
 		}
 
+		@Override
 		protected Composite createSelectionButtons(Composite composite) {
 			Composite buttonComposite= super.createSelectionButtons(composite);
 
@@ -1096,10 +1109,12 @@ public class AddGetterSetterAction extends SelectionDispatchAction {
 		/*
 		 * @see org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog#createLinkControl(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createLinkControl(Composite composite) {
 			Link link= new Link(composite, SWT.WRAP);
 			link.setText(ActionMessages.AddGetterSetterAction_template_link_description);
 			link.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					openCodeTempatePage(CodeTemplateContextType.GETTERCOMMENT_ID);
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddJavaDocStubAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddJavaDocStubAction.java
index 3e41f81..000bc72 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddJavaDocStubAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddJavaDocStubAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,7 @@ public class AddJavaDocStubAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		IMember[] members= getSelectedMembers(selection);
 		setEnabled(members != null && members.length > 0);
@@ -108,6 +109,7 @@ public class AddJavaDocStubAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		IMember[] members= getSelectedMembers(selection);
 		if (members == null || members.length == 0) {
@@ -138,6 +140,7 @@ public class AddJavaDocStubAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
@@ -148,6 +151,7 @@ public class AddJavaDocStubAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			IJavaElement element= SelectionConverter.getElementAtOffset(fEditor);
@@ -203,7 +207,7 @@ public class AddJavaDocStubAction extends SelectionDispatchAction {
 	}
 
 	private IMember[] getSelectedMembers(IStructuredSelection selection) {
-		List elements= selection.toList();
+		List<?> elements= selection.toList();
 		int nElements= elements.size();
 		if (nElements > 0) {
 			IMember[] res= new IMember[nElements];
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddToClasspathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddToClasspathAction.java
index fb58db9..e81f3be 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddToClasspathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddToClasspathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,7 @@ public class AddToClasspathAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared in SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(checkEnabled(selection));
@@ -90,7 +91,7 @@ public class AddToClasspathAction extends SelectionDispatchAction {
 	private static boolean checkEnabled(IStructuredSelection selection) throws JavaModelException {
 		if (selection.isEmpty())
 			return false;
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			if (! canBeAddedToBuildPath(iter.next()))
 				return false;
 		}
@@ -115,6 +116,7 @@ public class AddToClasspathAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared in SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			final IFile[] files= getJARFiles(selection);
@@ -156,8 +158,8 @@ public class AddToClasspathAction extends SelectionDispatchAction {
 	}
 
 	private static IFile[] getJARFiles(IStructuredSelection selection) throws JavaModelException {
-		ArrayList list= new ArrayList();
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		ArrayList<IFile> list= new ArrayList<IFile>();
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IAdaptable) {
 				IFile file= getCandidate((IAdaptable) element);
@@ -166,7 +168,7 @@ public class AddToClasspathAction extends SelectionDispatchAction {
 				}
 			}
 		}
-		return (IFile[]) list.toArray(new IFile[list.size()]);
+		return list.toArray(new IFile[list.size()]);
 	}
 }
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddUnimplementedConstructorsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddUnimplementedConstructorsAction.java
index bebac1c..d60d4a2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddUnimplementedConstructorsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/AddUnimplementedConstructorsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,7 +54,6 @@ import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -82,6 +81,7 @@ import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
 import org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter;
 import org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.refactoring.IVisibilityChangeListener;
@@ -120,7 +120,7 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 		private final CompilationUnit fUnit;
 
 		public AddUnimplementedConstructorsContentProvider(IType type) throws JavaModelException {
-			RefactoringASTParser parser= new RefactoringASTParser(AST.JLS3);
+			RefactoringASTParser parser= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL);
 			fUnit= parser.parse(type.getCompilationUnit(), true);
 			AbstractTypeDeclaration declaration= (AbstractTypeDeclaration) ASTNodes.getParent(NodeFinder.perform(fUnit, type.getNameRange()), AbstractTypeDeclaration.class);
 			if (declaration != null) {
@@ -203,11 +203,13 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 			fOmitSuper= fAddConstructorsSettings.getBoolean(OMIT_SUPER);
 		}
 
+		@Override
 		protected void configureShell(Shell shell) {
 			super.configureShell(shell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IJavaHelpContextIds.ADD_UNIMPLEMENTED_CONSTRUCTORS_DIALOG);
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			initializeDialogUnits(parent);
 
@@ -270,6 +272,7 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 			return composite;
 		}
 
+		@Override
 		protected Composite createInsertPositionCombo(Composite composite) {
 			Composite entryComposite= super.createInsertPositionCombo(composite);
 			addVisibilityAndModifiersChoices(entryComposite);
@@ -280,10 +283,12 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 		/*
 		 * @see org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog#createLinkControl(org.eclipse.swt.widgets.Composite)
 		 */
+		@Override
 		protected Control createLinkControl(Composite composite) {
 			Link link= new Link(composite, SWT.WRAP);
 			link.setText(ActionMessages.AddUnimplementedConstructorsAction_template_link_message);
 			link.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					openCodeTempatePage(CodeTemplateContextType.CONSTRUCTORCOMMENT_ID);
 				}
@@ -327,6 +332,7 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 			return omitSuperComposite;
 		}
 
+		@Override
 		protected Composite createVisibilityControlAndModifiers(Composite parent, final IVisibilityChangeListener visibilityChangeListener, int[] availableVisibilities, int correctVisibility) {
 			Composite visibilityComposite= createVisibilityControl(parent, visibilityChangeListener, availableVisibilities, correctVisibility);
 			return visibilityComposite;
@@ -445,6 +451,7 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		Shell shell= getShell();
 		try {
@@ -472,6 +479,7 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isProcessable(fEditor))
 			return;
@@ -528,14 +536,14 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 				return;
 			}
 
-			ArrayList result= new ArrayList();
+			ArrayList<IMethodBinding> result= new ArrayList<IMethodBinding>();
 			for (int i= 0; i < elements.length; i++) {
 				Object elem= elements[i];
 				if (elem instanceof IMethodBinding) {
-					result.add(elem);
+					result.add((IMethodBinding) elem);
 				}
 			}
-			IMethodBinding[] selected= (IMethodBinding[]) result.toArray(new IMethodBinding[result.size()]);
+			IMethodBinding[] selected= result.toArray(new IMethodBinding[result.size()]);
 
 			CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(type.getJavaProject());
 			settings.createComments= dialog.getGenerateComment();
@@ -598,6 +606,7 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(canEnable(selection));
@@ -614,6 +623,7 @@ public class AddUnimplementedConstructorsAction extends SelectionDispatchAction
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/BuildActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/BuildActionGroup.java
index 12bacf6..496e637 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/BuildActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/BuildActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ public class BuildActionGroup extends ActionGroup {
 			fPart= part;
 		}
 
+		@Override
 		public void run(IStructuredSelection selection) {
 			super.run(selection);
 			if (fPart instanceof IRefreshable) {
@@ -150,6 +151,7 @@ public class BuildActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBar) {
 		super.fillActionBars(actionBar);
 		setGlobalActionHandlers(actionBar);
@@ -158,6 +160,7 @@ public class BuildActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		ISelection selection= getContext().getSelection();
 		if (!ResourcesPlugin.getWorkspace().isAutoBuilding() && isBuildTarget(selection)) {
@@ -170,6 +173,7 @@ public class BuildActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void dispose() {
 		fSelectionProvider.removeSelectionChangedListener(fBuildAction);
 		fSelectionProvider.removeSelectionChangedListener(fRefreshAction);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CCPActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CCPActionGroup.java
index 72254d7..9eb9244 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CCPActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CCPActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,6 @@ import org.eclipse.ui.actions.ActionGroup;
 import org.eclipse.ui.navigator.ICommonMenuConstants;
 import org.eclipse.ui.part.Page;
 
-
 import org.eclipse.jdt.internal.ui.actions.CopyQualifiedNameAction;
 import org.eclipse.jdt.internal.ui.refactoring.reorg.CopyToClipboardAction;
 import org.eclipse.jdt.internal.ui.refactoring.reorg.CutAction;
@@ -33,7 +32,7 @@ import org.eclipse.jdt.internal.ui.refactoring.reorg.DeleteAction;
 import org.eclipse.jdt.internal.ui.refactoring.reorg.PasteAction;
 
 /**
- * Action group that adds the copy, cut, paste actions to a view part's context
+ * Action group that adds copy, cut, paste, and delete actions to a view part's context
  * menu and installs handlers for the corresponding global menu actions.
  *
  * <p>
@@ -55,6 +54,21 @@ public class CCPActionGroup extends ActionGroup {
 	private final SelectionDispatchAction fCutAction;
 	private final ISelectionProvider fSelectionProvider;
 
+
+	/**
+	 * Creates a new <code>CCPActionGroup</code>. The group requires that the selection provided by
+	 * the view part's selection provider is of type
+	 * <code>org.eclipse.jface.viewers.IStructuredSelection</code>.
+	 * 
+	 * @param part the view part that owns this action group
+	 * @param includeOnlyCopyActions <code>true</code> if the group only includes the copy actions,
+	 *            <code>false</code> to include all actions
+	 * @since 3.7
+	 */
+	public CCPActionGroup(IViewPart part, boolean includeOnlyCopyActions) {
+		this(part.getSite(), null, includeOnlyCopyActions);
+	}
+
 	/**
 	 * Creates a new <code>CCPActionGroup</code>. The group requires that
 	 * the selection provided by the view part's selection provider is of type
@@ -63,7 +77,7 @@ public class CCPActionGroup extends ActionGroup {
 	 * @param part the view part that owns this action group
 	 */
 	public CCPActionGroup(IViewPart  part) {
-		this(part.getSite(), null);
+		this(part.getSite(), null, false);
 	}
 
 	/**
@@ -74,7 +88,7 @@ public class CCPActionGroup extends ActionGroup {
 	 * @param page the page that owns this action group
 	 */
 	public CCPActionGroup(Page page) {
-		this(page.getSite(), null);
+		this(page.getSite(), null, false);
 	}
 
 	/**
@@ -89,10 +103,22 @@ public class CCPActionGroup extends ActionGroup {
 	 * @since 3.4
 	 */
 	public CCPActionGroup(IWorkbenchSite site, ISelectionProvider specialSelectionProvider) {
-		fSelectionProvider= specialSelectionProvider == null ? site.getSelectionProvider() : specialSelectionProvider;
+		this(site, specialSelectionProvider, false);
+	}
 
-		fPasteAction= new PasteAction(site);
-		fPasteAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_PASTE);
+	/**
+	 * Creates a new <code>CCPActionGroup</code>. The group requires that the selection provided by
+	 * the given selection provider is of type {@link IStructuredSelection}.
+	 * 
+	 * @param site the site that will own the action group.
+	 * @param specialSelectionProvider the selection provider used instead of the sites selection
+	 *            provider.
+	 * @param includeOnlyCopyActions <code>true</code> if the group only included the copy actions,
+	 *            <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	private CCPActionGroup(IWorkbenchSite site, ISelectionProvider specialSelectionProvider, boolean includeOnlyCopyActions) {
+		fSelectionProvider= specialSelectionProvider == null ? site.getSelectionProvider() : specialSelectionProvider;
 
 		fCopyAction= new CopyToClipboardAction(site);
 		fCopyAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_COPY);
@@ -100,13 +126,22 @@ public class CCPActionGroup extends ActionGroup {
 		fCopyQualifiedNameAction= new CopyQualifiedNameAction(site);
 		fCopyQualifiedNameAction.setActionDefinitionId(CopyQualifiedNameAction.ACTION_DEFINITION_ID);
 
-		fCutAction= new CutAction(site);
-		fCutAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_CUT);
 
-		fDeleteAction= new DeleteAction(site);
-		fDeleteAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_DELETE);
+		if (!includeOnlyCopyActions) {
+			fPasteAction= new PasteAction(site);
+			fPasteAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_PASTE);
+			fDeleteAction= new DeleteAction(site);
+			fDeleteAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_DELETE);
+			fCutAction= new CutAction(site);
+			fCutAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_CUT);
+			fActions= new SelectionDispatchAction[] { fCutAction, fCopyAction, fCopyQualifiedNameAction, fPasteAction, fDeleteAction };
+		} else {
+			fPasteAction= null;
+			fDeleteAction= null;
+			fCutAction= null;
+			fActions= new SelectionDispatchAction[] { fCopyAction, fCopyQualifiedNameAction };
+		}
 
-		fActions= new SelectionDispatchAction[] { fCutAction, fCopyAction, fCopyQualifiedNameAction, fPasteAction, fDeleteAction };
 		if (specialSelectionProvider != null) {
 			for (int i= 0; i < fActions.length; i++) {
 				fActions[i].setSpecialSelectionProvider(specialSelectionProvider);
@@ -147,18 +182,23 @@ public class CCPActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
-		actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), fDeleteAction);
+		if (fDeleteAction != null)
+			actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), fDeleteAction);
 		actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), fCopyAction);
 		actionBars.setGlobalActionHandler(CopyQualifiedNameAction.ACTION_HANDLER_ID, fCopyQualifiedNameAction);
-		actionBars.setGlobalActionHandler(ActionFactory.CUT.getId(), fCutAction);
-		actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), fPasteAction);
+		if (fCopyAction != null)
+			actionBars.setGlobalActionHandler(ActionFactory.CUT.getId(), fCutAction);
+		if (fPasteAction != null)
+			actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), fPasteAction);
 	}
 
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		for (int i= 0; i < fActions.length; i++) {
@@ -172,6 +212,7 @@ public class CCPActionGroup extends ActionGroup {
 	/*
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		deregisterActionsAsSelectionChangeListeners();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ChangeTypeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ChangeTypeAction.java
index 2d81e42..2ca603f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ChangeTypeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ChangeTypeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,6 +87,7 @@ public class ChangeTypeAction extends SelectionDispatchAction {
 
 	//---- structured selection ---------------------------------------------
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isGeneralizeTypeAvailable(selection));
@@ -97,6 +98,7 @@ public class ChangeTypeAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IMember member= getMember(selection);
@@ -134,6 +136,7 @@ public class ChangeTypeAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -144,6 +147,7 @@ public class ChangeTypeAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isGeneralizeTypeAvailable(selection));
@@ -155,6 +159,7 @@ public class ChangeTypeAction extends SelectionDispatchAction {
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertAnonymousToNestedAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertAnonymousToNestedAction.java
index 4f61a6d..0360bdc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertAnonymousToNestedAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertAnonymousToNestedAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class ConvertAnonymousToNestedAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isConvertAnonymousAvailable(selection));
@@ -97,6 +98,7 @@ public class ConvertAnonymousToNestedAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		IType type= getElement(selection);
 		if (type == null)
@@ -131,6 +133,7 @@ public class ConvertAnonymousToNestedAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		run(SelectionConverter.getInputAsCompilationUnit(fEditor), selection.getOffset(), selection.getLength());
 	}
@@ -138,6 +141,7 @@ public class ConvertAnonymousToNestedAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null);
 	}
@@ -148,6 +152,7 @@ public class ConvertAnonymousToNestedAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isConvertAnonymousAvailable(selection));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertLocalToFieldAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertLocalToFieldAction.java
index 8984b28..cc12355 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertLocalToFieldAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertLocalToFieldAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class ConvertLocalToFieldAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null);
 	}
@@ -73,6 +74,7 @@ public class ConvertLocalToFieldAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isPromoteTempAvailable(selection));
@@ -84,6 +86,7 @@ public class ConvertLocalToFieldAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertNestedToTopAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertNestedToTopAction.java
index ca7b891..4063976 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertNestedToTopAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertNestedToTopAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,6 +87,7 @@ public class ConvertNestedToTopAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isMoveInnerAvailable(selection));
@@ -101,6 +102,7 @@ public class ConvertNestedToTopAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			//we have to call this here - no selection changed event is sent
@@ -135,6 +137,7 @@ public class ConvertNestedToTopAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -145,6 +148,7 @@ public class ConvertNestedToTopAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isMoveInnerAvailable(selection));
@@ -156,12 +160,13 @@ public class ConvertNestedToTopAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
+			if (!ActionUtil.isEditable(fEditor))
+				return;
 			IType type= RefactoringAvailabilityTester.getDeclaringType(SelectionConverter.resolveEnclosingElement(fEditor, selection));
 			if (type != null && RefactoringAvailabilityTester.isMoveInnerAvailable(type)) {
-				if (! ActionUtil.isEditable(fEditor, getShell(), type))
-					return;
 				RefactoringExecutionStarter.startMoveInnerRefactoring(type, getShell());
 			} else {
 				MessageDialog.openInformation(getShell(), RefactoringMessages.OpenRefactoringWizardAction_unavailable, RefactoringMessages.ConvertNestedToTopAction_To_activate);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertingSelectionProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertingSelectionProvider.java
index dc8145d..0cc7c34 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertingSelectionProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ConvertingSelectionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,8 +98,8 @@ public class ConvertingSelectionProvider implements ISelectionProvider {
 		if (! (viewerSelection instanceof IStructuredSelection))
 			return viewerSelection;
 		IStructuredSelection selection= (IStructuredSelection)viewerSelection;
-		List result= new ArrayList(selection.size());
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		List<Object> result= new ArrayList<Object>(selection.size());
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IResource || element instanceof IJavaElement) {
 				result.add(element);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CustomFiltersActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CustomFiltersActionGroup.java
index b4b7c7d..2cf9f07 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CustomFiltersActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CustomFiltersActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,6 @@ import org.eclipse.jface.action.GroupMarker;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.IContentProvider;
@@ -54,6 +53,7 @@ import org.eclipse.jdt.core.IJavaModel;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.filters.CustomFiltersDialog;
+import org.eclipse.jdt.internal.ui.filters.EmptyLibraryContainerFilter;
 import org.eclipse.jdt.internal.ui.filters.FilterDescriptor;
 import org.eclipse.jdt.internal.ui.filters.FilterMessages;
 import org.eclipse.jdt.internal.ui.filters.NamePatternFilter;
@@ -80,6 +80,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 			setDisabledImageDescriptor(JavaPluginImages.DESC_DLCL_FILTER);
 		}
 
+		@Override
 		public void run() {
 			openDialog();
 		}
@@ -122,6 +123,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 		/*
 		 * Overrides method from ContributionItem.
 		 */
+		@Override
 		public void fill(Menu menu, int index) {
 			MenuItem mi= new MenuItem(menu, SWT.CHECK, index);
 			mi.setText("&" + fItemNumber + " " + fFilterName);  //$NON-NLS-1$  //$NON-NLS-2$
@@ -132,6 +134,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 //			mi.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_JAVA_WORKING_SET));
 			mi.setSelection(fState);
 			mi.addSelectionListener(new SelectionAdapter() {
+				@Override
 				public void widgetSelected(SelectionEvent e) {
 					fState= !fState;
 					fActionGroup.setFilter(fFilterId, fState);
@@ -142,6 +145,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 		/*
 		 * @see org.eclipse.jface.action.IContributionItem#isDynamic()
 		 */
+		@Override
 		public boolean isDynamic() {
 			return true;
 		}
@@ -196,14 +200,14 @@ public class CustomFiltersActionGroup extends ActionGroup {
 
 	private String[] fPreviousPatterns;
 
-	private final Map/*String, FilterItem*/ fFilterItems;
+	private final Map<String, FilterItem> fFilterItems;
 
 	/**
 	 * Recently changed filter Ids stack with oldest on top (i.e. at the end).
 	 *
 	 * @since 3.0
 	 */
-	private Stack fLRUFilterIdsStack;
+	private Stack<String> fLRUFilterIdsStack;
 	/**
 	 * Handle to menu manager to dynamically update
 	 * the last recently used filters.
@@ -250,13 +254,13 @@ public class CustomFiltersActionGroup extends ActionGroup {
 		fViewer= viewer;
 		fPatternFilter= new NamePatternFilter();
 
-		fLRUFilterIdsStack= new Stack();
+		fLRUFilterIdsStack= new Stack<String>();
 
 		fUserDefinedPatterns= new String[0];
 		fUserDefinedPatternsEnabled= false;
 		fPreviousPatterns= new String[0];
 
-		fFilterItems= new HashMap();
+		fFilterItems= new HashMap<String, FilterItem>();
 		FilterDescriptor[] filterDescriptors= FilterDescriptor.getFilterDescriptors(fTargetId);
 		for (int i= 0; i < filterDescriptors.length; i++) {
 			FilterItem item= new FilterItem(filterDescriptors[i]);
@@ -274,8 +278,8 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
-		fillToolBar(actionBars.getToolBarManager());
 		fillViewMenu(actionBars.getMenuManager());
 	}
 
@@ -294,14 +298,14 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
 	public String[] internalGetEnabledFilterIds() {
-		ArrayList enabledFilterIds= new ArrayList();
-		for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
-			FilterItem item= (FilterItem) iterator.next();
+		ArrayList<String> enabledFilterIds= new ArrayList<String>();
+		for (Iterator<FilterItem> iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
+			FilterItem item= iterator.next();
 			if (item.enabled) {
 				enabledFilterIds.add(item.id);
 			}
 		}
-		return (String[])enabledFilterIds.toArray(new String[enabledFilterIds.size()]);
+		return enabledFilterIds.toArray(new String[enabledFilterIds.size()]);
 	}
 
 	/**
@@ -315,9 +319,9 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	 * @return the array of new filter ids
 	 */
 	public String[] removeFiltersFor(Object parent, Object element, IContentProvider contentProvider) {
-		ArrayList newFilters= new ArrayList();
-		for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
-			FilterItem item= (FilterItem) iterator.next();
+		ArrayList<String> newFilters= new ArrayList<String>();
+		for (Iterator<FilterItem> iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
+			FilterItem item= iterator.next();
 			if (item.enabled) {
 				ViewerFilter filter= item.getFilterInstance();
 	            if (filter != null && isSelected(parent, element, contentProvider, filter))
@@ -327,7 +331,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 		if (fUserDefinedPatternsEnabled && isSelected(parent, element, contentProvider, fPatternFilter))
 			newFilters.add(fPatternFilter.getClass().getName());
 
-	    return (String[])newFilters.toArray(new String[newFilters.size()]);
+	    return newFilters.toArray(new String[newFilters.size()]);
 	}
 
 	/**
@@ -341,6 +345,8 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	}
 
 	private boolean isSelected(Object parent, Object element, IContentProvider contentProvider, ViewerFilter filter) {
+		if (filter instanceof EmptyLibraryContainerFilter) // workaround for https://bugs.eclipse.org/341109
+			return true;
 	    if (contentProvider instanceof ITreeContentProvider) {
 	        // the element and all its parents have to be selected
 	        ITreeContentProvider provider = (ITreeContentProvider) contentProvider;
@@ -365,7 +371,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 		fLRUFilterIdsStack.remove(filterId);
 		fLRUFilterIdsStack.add(0, filterId);
 
-		FilterItem item= (FilterItem) fFilterItems.get(filterId);
+		FilterItem item= fFilterItems.get(filterId);
 		if (item != null) {
 			item.enabled= state;
 			storeViewDefaults();
@@ -377,13 +383,13 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	private void setEnabledFilterIds(String[] enabledIds) {
 		// set all to false
 		fUserDefinedPatternsEnabled= false;
-		for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
-			FilterItem item= (FilterItem) iterator.next();
+		for (Iterator<FilterItem> iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
+			FilterItem item= iterator.next();
 			item.enabled= false;
 		}
 		// set enabled to true
 		for (int i= 0; i < enabledIds.length; i++) {
-			FilterItem item= (FilterItem) fFilterItems.get(enabledIds[i]);
+			FilterItem item= fFilterItems.get(enabledIds[i]);
 			if (item != null) {
 				item.enabled= true;
 			}
@@ -402,17 +408,17 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	 * @param changeHistory the change history
 	 * @since 3.0
 	 */
-	private void setRecentlyChangedFilters(Stack changeHistory) {
-		Stack oldestFirstStack= new Stack();
+	private void setRecentlyChangedFilters(Stack<FilterDescriptor> changeHistory) {
+		Stack<String> oldestFirstStack= new Stack<String>();
 
 		int length= Math.min(changeHistory.size(), MAX_FILTER_MENU_ENTRIES);
 		for (int i= 0; i < length; i++)
-			oldestFirstStack.push(((FilterDescriptor)changeHistory.pop()).getId());
+			oldestFirstStack.push(changeHistory.pop().getId());
 
 		length= Math.min(fLRUFilterIdsStack.size(), MAX_FILTER_MENU_ENTRIES - oldestFirstStack.size());
 		int NEWEST= 0;
 		for (int i= 0; i < length; i++) {
-			Object filter= fLRUFilterIdsStack.remove(NEWEST);
+			String filter= fLRUFilterIdsStack.remove(NEWEST);
 			if (!oldestFirstStack.contains(filter))
 				oldestFirstStack.push(filter);
 		}
@@ -428,13 +434,6 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	}
 
 	/**
-	 * Fills the tool bar.
-	 * @param tooBar the tool bar
-	 */
-	private void fillToolBar(IToolBarManager tooBar) {
-	}
-
-	/**
 	 * Fills the given view menu with the entries managed by the
 	 * group.
 	 *
@@ -474,14 +473,14 @@ public class CustomFiltersActionGroup extends ActionGroup {
 			return;
 		}
 
-		SortedSet sortedFilters= new TreeSet(fLRUFilterIdsStack);
-		String[] recentlyChangedFilterIds= (String[])sortedFilters.toArray(new String[sortedFilters.size()]);
+		SortedSet<String> sortedFilters= new TreeSet<String>(fLRUFilterIdsStack);
+		String[] recentlyChangedFilterIds= sortedFilters.toArray(new String[sortedFilters.size()]);
 
 		fFilterIdsUsedInLastViewMenu= new String[recentlyChangedFilterIds.length];
 		for (int i= 0; i < recentlyChangedFilterIds.length; i++) {
 			String id= recentlyChangedFilterIds[i];
 			fFilterIdsUsedInLastViewMenu[i]= id;
-			FilterItem filterItem= (FilterItem) fFilterItems.get(id);
+			FilterItem filterItem= fFilterItems.get(id);
 			if (filterItem != null) {
 				IContributionItem item= new FilterActionMenuContributionItem(this, id, filterItem.descriptor.getName(), filterItem.enabled, i+1);
 				mm.insertBefore(RECENT_FILTERS_GROUP_NAME, item);
@@ -492,6 +491,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void dispose() {
 		if (fMenuManager != null)
 			fMenuManager.removeMenuListener(fMenuListener);
@@ -503,14 +503,14 @@ public class CustomFiltersActionGroup extends ActionGroup {
 
 	private boolean updateViewerFilters() {
 		ViewerFilter[] installedFilters= fViewer.getFilters();
-		ArrayList viewerFilters= new ArrayList(Arrays.asList(installedFilters));
-		HashSet patterns= new HashSet();
+		ArrayList<ViewerFilter> viewerFilters= new ArrayList<ViewerFilter>(Arrays.asList(installedFilters));
+		HashSet<String> patterns= new HashSet<String>();
 
 		boolean hasChange= false;
 		boolean patternChange= false;
 
-		for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
-			FilterItem item= (FilterItem) iterator.next();
+		for (Iterator<FilterItem> iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
+			FilterItem item= iterator.next();
 			if (item.descriptor.isCustomFilter()) {
 				if (item.enabled != item.previouslyEnabled) {
 					ViewerFilter filter= item.getFilterInstance(); // only create when changed
@@ -541,7 +541,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 			patternChange= hasChanges(patterns, fPreviousPatterns);
 		}
 
-		fPreviousPatterns= (String[]) patterns.toArray(new String[patterns.size()]);
+		fPreviousPatterns= patterns.toArray(new String[patterns.size()]);
 		if (patternChange) {
 			fPatternFilter.setPatterns(fPreviousPatterns);
 			if (patterns.isEmpty()) {
@@ -552,13 +552,13 @@ public class CustomFiltersActionGroup extends ActionGroup {
 			hasChange= true;
 		}
 		if (hasChange) {
-			fViewer.setFilters((ViewerFilter[]) viewerFilters.toArray(new ViewerFilter[viewerFilters.size()])); // will refresh
+			fViewer.setFilters(viewerFilters.toArray(new ViewerFilter[viewerFilters.size()])); // will refresh
 		}
 		return hasChange;
 	}
 
-	private boolean hasChanges(HashSet patterns, String[] oldPatterns) {
-		HashSet copy= (HashSet) patterns.clone();
+	private boolean hasChanges(HashSet<String> patterns, String[] oldPatterns) {
+		HashSet<String> copy= (HashSet<String>) patterns.clone();
 		for (int i= 0; i < oldPatterns.length; i++) {
 			boolean found= copy.remove(oldPatterns[i]);
 			if (!found)
@@ -580,8 +580,8 @@ public class CustomFiltersActionGroup extends ActionGroup {
 		fUserDefinedPatternsEnabled= store.getBoolean(getPreferenceKey(TAG_USER_DEFINED_PATTERNS_ENABLED));
 		setUserDefinedPatterns(CustomFiltersDialog.convertFromString(store.getString(getPreferenceKey(TAG_USER_DEFINED_PATTERNS)), SEPARATOR));
 
-		for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
-			FilterItem item= (FilterItem) iterator.next();
+		for (Iterator<FilterItem> iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
+			FilterItem item= iterator.next();
 			String id= item.id;
 			// set default to value from plugin contributions (fixes https://bugs.eclipse.org/bugs/show_bug.cgi?id=73991 ):
 			store.setDefault(id, item.descriptor.isEnabled());
@@ -608,15 +608,15 @@ public class CustomFiltersActionGroup extends ActionGroup {
 		store.setValue(getPreferenceKey(TAG_USER_DEFINED_PATTERNS_ENABLED), fUserDefinedPatternsEnabled);
 		store.setValue(getPreferenceKey(TAG_USER_DEFINED_PATTERNS), CustomFiltersDialog.convertToString(fUserDefinedPatterns ,SEPARATOR));
 
-		for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
-			FilterItem item= (FilterItem) iterator.next();
+		for (Iterator<FilterItem> iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
+			FilterItem item= iterator.next();
 			store.setValue(item.id, item.enabled);
 		}
 
 		StringBuffer buf= new StringBuffer(fLRUFilterIdsStack.size() * 20);
-		Iterator iter= fLRUFilterIdsStack.iterator();
+		Iterator<String> iter= fLRUFilterIdsStack.iterator();
 		while (iter.hasNext()) {
-			buf.append((String)iter.next());
+			buf.append(iter.next());
 			buf.append(SEPARATOR);
 		}
 		store.setValue(TAG_LRU_FILTERS, buf.toString());
@@ -644,8 +644,8 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	private void saveXmlDefinedFilters(IMemento memento) {
 		IMemento xmlDefinedFilters= memento.createChild(TAG_XML_DEFINED_FILTERS);
 
-		for (Iterator iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
-			FilterItem item= (FilterItem) iterator.next();
+		for (Iterator<FilterItem> iterator= fFilterItems.values().iterator(); iterator.hasNext();) {
+			FilterItem item= iterator.next();
 
 			IMemento child= xmlDefinedFilters.createChild(TAG_CHILD);
 			child.putString(TAG_FILTER_ID, item.id);
@@ -662,9 +662,9 @@ public class CustomFiltersActionGroup extends ActionGroup {
 	private void saveLRUFilters(IMemento memento) {
 		if(fLRUFilterIdsStack != null && !fLRUFilterIdsStack.isEmpty()) {
 			IMemento lruFilters= memento.createChild(TAG_LRU_FILTERS);
-			Iterator iter= fLRUFilterIdsStack.iterator();
+			Iterator<String> iter= fLRUFilterIdsStack.iterator();
 			while (iter.hasNext()) {
-				String id= (String)iter.next();
+				String id= iter.next();
 				IMemento child= lruFilters.createChild(TAG_CHILD);
 				child.putString(TAG_FILTER_ID, id);
 			}
@@ -727,7 +727,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
 			for (int i= 0; i < children.length; i++) {
 				String id= children[i].getString(TAG_FILTER_ID);
 				Boolean isEnabled= Boolean.valueOf(children[i].getString(TAG_IS_ENABLED));
-				FilterItem item= (FilterItem) fFilterItems.get(id);
+				FilterItem item= fFilterItems.get(id);
 				if (item != null) {
 					item.enabled= isEnabled.booleanValue();
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/DeclarationsSearchGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/DeclarationsSearchGroup.java
index cf82b77..55af8e0 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/DeclarationsSearchGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/DeclarationsSearchGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -150,6 +150,7 @@ public class DeclarationsSearchGroup extends ActionGroup  {
 	/* (non-Javadoc)
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		Assert.isNotNull(actionBars);
 		super.fillActionBars(actionBars);
@@ -177,6 +178,7 @@ public class DeclarationsSearchGroup extends ActionGroup  {
 	/* (non-Javadoc)
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager manager) {
 		IMenuManager javaSearchMM= new MenuManager(MENU_TEXT, IContextMenuConstants.GROUP_SEARCH);
 		addAction(fFindDeclarationsAction, javaSearchMM);
@@ -185,9 +187,9 @@ public class DeclarationsSearchGroup extends ActionGroup  {
 
 		javaSearchMM.add(new Separator());
 
-		Iterator iter= SearchUtil.getLRUWorkingSets().sortedIterator();
+		Iterator<IWorkingSet[]> iter= SearchUtil.getLRUWorkingSets().sortedIterator();
 		while (iter.hasNext()) {
-			addWorkingSetAction((IWorkingSet[]) iter.next(), javaSearchMM);
+			addWorkingSetAction(iter.next(), javaSearchMM);
 		}
 		addAction(fFindDeclarationsInWorkingSetAction, javaSearchMM);
 
@@ -198,6 +200,7 @@ public class DeclarationsSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void dispose() {
 		ISelectionProvider provider= fSite.getSelectionProvider();
 		if (provider != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java
index 85294e3..57c2995 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -136,12 +136,14 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isExternalizeStringsAvailable(selection));
@@ -155,6 +157,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		IJavaElement element= SelectionConverter.getInput(fEditor);
 		if (!(element instanceof ICompilationUnit))
@@ -165,6 +168,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		ICompilationUnit unit= getCompilationUnit(selection);
 		if (unit != null) {//run on cu
@@ -224,25 +228,25 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	}
 
 	private NonNLSElement[] doRun(IStructuredSelection selection, IProgressMonitor pm) throws CoreException {
-		List elements= getSelectedElementList(selection);
+		List<?> elements= getSelectedElementList(selection);
 		if (elements == null || elements.isEmpty())
 			return new NonNLSElement[0];
 
 		pm.beginTask(ActionMessages.FindStringsToExternalizeAction_find_strings, elements.size());
 
 		try{
-			List result= new ArrayList();
-			for (Iterator iter= elements.iterator(); iter.hasNext();) {
+			List<NonNLSElement> result= new ArrayList<NonNLSElement>();
+			for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 				Object obj= iter.next();
 				result.addAll(analyze(obj, pm));
 			}
-			return (NonNLSElement[]) result.toArray(new NonNLSElement[result.size()]);
+			return result.toArray(new NonNLSElement[result.size()]);
 		} finally{
 			pm.done();
 		}
 	}
 
-	private List analyze(Object obj, IProgressMonitor pm) throws CoreException, JavaModelException {
+	private List<NonNLSElement> analyze(Object obj, IProgressMonitor pm) throws CoreException, JavaModelException {
 		if (obj instanceof IJavaElement) {
 			IJavaElement element= (IJavaElement) obj;
 			int elementType= element.getElementType();
@@ -264,7 +268,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 					NonNLSElement nlsElement= analyze(cu);
 					if (nlsElement != null) {
 						pm.worked(1);
-						ArrayList result= new ArrayList();
+						ArrayList<NonNLSElement> result= new ArrayList<NonNLSElement>();
 						result.add(nlsElement);
 						return result;
 					}
@@ -277,7 +281,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 					NonNLSElement nlsElement= analyze(cu);
 					if (nlsElement != null) {
 						pm.worked(1);
-						ArrayList result= new ArrayList();
+						ArrayList<NonNLSElement> result= new ArrayList<NonNLSElement>();
 						result.add(nlsElement);
 						return result;
 					}
@@ -287,7 +291,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 				pm.worked(1);
 			}
 		} else if (obj instanceof IWorkingSet) {
-			List result= new ArrayList();
+			List<NonNLSElement> result= new ArrayList<NonNLSElement>();
 
 			IWorkingSet workingSet= (IWorkingSet) obj;
 			IAdaptable[] elements= workingSet.getElements();
@@ -300,7 +304,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 			pm.worked(1);
 		}
 
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
 
 	private void showResults() {
@@ -323,17 +327,17 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	/*
 	 * returns List of Strings
 	 */
-	private List analyze(IPackageFragment pack, IProgressMonitor pm) throws CoreException {
+	private List<NonNLSElement> analyze(IPackageFragment pack, IProgressMonitor pm) throws CoreException {
 		try{
 			if (pack == null)
-				return new ArrayList(0);
+				return new ArrayList<NonNLSElement>(0);
 
 			ICompilationUnit[] cus= pack.getCompilationUnits();
 
 			pm.beginTask("", cus.length); //$NON-NLS-1$
 			pm.setTaskName(pack.getElementName());
 
-			List l= new ArrayList(cus.length);
+			List<NonNLSElement> l= new ArrayList<NonNLSElement>(cus.length);
 			for (int i= 0; i < cus.length; i++){
 				pm.subTask(BasicElementLabels.getFileName(cus[i]));
 				NonNLSElement element= analyze(cus[i]);
@@ -352,12 +356,12 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	/*
 	 * returns List of Strings
 	 */
-	private List analyze(IPackageFragmentRoot sourceFolder, IProgressMonitor pm) throws CoreException {
+	private List<NonNLSElement> analyze(IPackageFragmentRoot sourceFolder, IProgressMonitor pm) throws CoreException {
 		try{
 			IJavaElement[] children= sourceFolder.getChildren();
 			pm.beginTask("", children.length); //$NON-NLS-1$
 			pm.setTaskName(JavaElementLabels.getElementLabel(sourceFolder, JavaElementLabels.ALL_DEFAULT));
-			List result= new ArrayList();
+			List<NonNLSElement> result= new ArrayList<NonNLSElement>();
 			for (int i= 0; i < children.length; i++) {
 				IJavaElement iJavaElement= children[i];
 				if (iJavaElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT){
@@ -378,11 +382,11 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	/*
 	 * returns List of Strings
 	 */
-	private List analyze(IJavaProject project, IProgressMonitor pm) throws CoreException {
+	private List<NonNLSElement> analyze(IJavaProject project, IProgressMonitor pm) throws CoreException {
 		try{
 			IPackageFragment[] packs= project.getPackageFragments();
 			pm.beginTask("", packs.length); //$NON-NLS-1$
-			List result= new ArrayList();
+			List<NonNLSElement> result= new ArrayList<NonNLSElement>();
 			for (int i= 0; i < packs.length; i++) {
 				if (! packs[i].isReadOnly())
 					result.addAll(analyze(packs[i], new SubProgressMonitor(pm, 1)));
@@ -445,7 +449,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 	 * @param selection the selection
 	 * @return the selected elements
 	 */
-	private static List getSelectedElementList(IStructuredSelection selection) {
+	private static List<?> getSelectedElementList(IStructuredSelection selection) {
 		if (selection == null)
 			return null;
 
@@ -472,10 +476,12 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 			setLabelProvider(createLabelProvider());
 		}
 
+		@Override
 		protected Point getInitialSize() {
 			return getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite result= (Composite)super.createDialogArea(parent);
 			getTableViewer().addSelectionChangedListener(new ISelectionChangedListener(){
@@ -486,6 +492,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 				}
 			});
 			getTableViewer().getTable().addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetDefaultSelected(SelectionEvent e) {
 					NonNLSElement element= (NonNLSElement)e.item.getData();
 					ExternalizeWizard.open(element.cu, getShell());
@@ -496,6 +503,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 			return result;
 		}
 
+		@Override
 		protected void createButtonsForButtonBar(Composite parent) {
 			fOpenButton= createButton(parent, OPEN_BUTTON_ID, ActionMessages.FindStringsToExternalizeAction_button_label, true);
 			fOpenButton.setEnabled(false);
@@ -504,6 +512,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 			createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CLOSE_LABEL, false);
 		}
 
+		@Override
 		protected void buttonPressed(int buttonId) {
 			if (buttonId != OPEN_BUTTON_ID){
 				super.buttonPressed(buttonId);
@@ -519,6 +528,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 
 		private static LabelProvider createLabelProvider() {
 			return new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT){
+				@Override
 				public String getText(Object element) {
 					NonNLSElement nlsel= (NonNLSElement)element;
 					String elementName= BasicElementLabels.getPathLabel(nlsel.cu.getResource().getFullPath(), false);
@@ -526,6 +536,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 							ActionMessages.FindStringsToExternalizeAction_foundStrings,
 							new Object[] {new Integer(nlsel.count), elementName} );
 				}
+				@Override
 				public Image getImage(Object element) {
 					return super.getImage(((NonNLSElement)element).cu);
 				}
@@ -535,6 +546,7 @@ public class ExternalizeStringsAction extends SelectionDispatchAction {
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.NONNLS_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractClassAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractClassAction.java
index 1020a1f..b714673 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractClassAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractClassAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,7 @@ public class ExtractClassAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			IType singleSelectedType= RefactoringAvailabilityTester.getSingleSelectedType(selection);
@@ -88,6 +89,7 @@ public class ExtractClassAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IType singleSelectedType= RefactoringAvailabilityTester.getSingleSelectedType(selection);
@@ -104,6 +106,7 @@ public class ExtractClassAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -114,6 +117,7 @@ public class ExtractClassAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			IJavaElement element= selection.resolveEnclosingElement();
@@ -131,12 +135,13 @@ public class ExtractClassAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
+			if (!ActionUtil.isEditable(fEditor))
+				return;
 			IType type= RefactoringActions.getEnclosingOrPrimaryType(fEditor);
 			if (RefactoringAvailabilityTester.isExtractClassAvailable(type)) {
-				if (!ActionUtil.isEditable(fEditor, getShell(), type))
-					return;
 				RefactoringExecutionStarter.startExtractClassRefactoring(type, getShell());
 			}
 		} catch (CoreException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractConstantAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractConstantAction.java
index 78b2298..ff6a4c8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractConstantAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractConstantAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class ExtractConstantAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled((fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null));
 	}
@@ -71,6 +72,7 @@ public class ExtractConstantAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		setEnabled(RefactoringAvailabilityTester.isExtractConstantAvailable(selection));
 	}
@@ -78,6 +80,7 @@ public class ExtractConstantAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractInterfaceAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractInterfaceAction.java
index ea2e057..77fabd9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractInterfaceAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractInterfaceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class ExtractInterfaceAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isExtractInterfaceAvailable(selection));
@@ -96,6 +97,7 @@ public class ExtractInterfaceAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			if (RefactoringAvailabilityTester.isExtractInterfaceAvailable(selection)) {
@@ -112,6 +114,7 @@ public class ExtractInterfaceAction extends SelectionDispatchAction {
     /*
      * @see SelectionDispatchAction#selectionChanged(ITextSelection)
      */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -122,6 +125,7 @@ public class ExtractInterfaceAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isExtractInterfaceAvailable(selection));
@@ -133,12 +137,13 @@ public class ExtractInterfaceAction extends SelectionDispatchAction {
 	/*
      * @see SelectionDispatchAction#run(ITextSelection)
      */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
+			if (!ActionUtil.isEditable(fEditor))
+				return;
 			IType type= RefactoringActions.getEnclosingOrPrimaryType(fEditor);
 			if (RefactoringAvailabilityTester.isExtractInterfaceAvailable(type)) {
-				if (! ActionUtil.isEditable(fEditor, getShell(), type))
-					return;
 				RefactoringExecutionStarter.startExtractInterfaceRefactoring(type, getShell());
 			} else {
 				String unavailable= RefactoringMessages.ExtractInterfaceAction_To_activate;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractMethodAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractMethodAction.java
index a31d5d4..b76a296 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractMethodAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractMethodAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@ public class ExtractMethodAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(selection.getLength() == 0 ? false : fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null);
 	}
@@ -73,6 +74,7 @@ public class ExtractMethodAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		setEnabled(RefactoringAvailabilityTester.isExtractMethodAvailable(selection));
 	}
@@ -80,6 +82,7 @@ public class ExtractMethodAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractTempAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractTempAction.java
index 605905f..a40c7c3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractTempAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExtractTempAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class ExtractTempAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null);
 	}
@@ -71,6 +72,7 @@ public class ExtractTempAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		setEnabled(RefactoringAvailabilityTester.isExtractTempAvailable(selection));
 	}
@@ -78,6 +80,7 @@ public class ExtractTempAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java
index 8724762..6998a7a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,7 +69,7 @@ public abstract class FindAction extends SelectionDispatchAction {
 	// A dummy which can't be selected in the UI
 	private static final IJavaElement RETURN_WITHOUT_BEEP= JavaCore.create(JavaPlugin.getWorkspace().getRoot());
 
-	private Class[] fValidTypes;
+	private Class<?>[] fValidTypes;
 	private JavaEditor fEditor;
 
 
@@ -96,7 +96,7 @@ public abstract class FindAction extends SelectionDispatchAction {
 	 * To be overridden by implementors of this action.
 	 * @return the valid input types of the action
 	 */
-	abstract Class[] getValidTypes();
+	abstract Class<?>[] getValidTypes();
 
 	private boolean canOperateOn(IStructuredSelection sel) {
 		return sel != null && !sel.isEmpty() && canOperateOn(getJavaElement(sel, true));
@@ -199,6 +199,7 @@ public abstract class FindAction extends SelectionDispatchAction {
 	/*
 	 * Method declared on SelectionChangedAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		IJavaElement element= getJavaElement(selection, false);
 		if (element == null || !element.exists()) {
@@ -214,6 +215,7 @@ public abstract class FindAction extends SelectionDispatchAction {
 	/*
 	 * Method declared on SelectionChangedAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isProcessable(fEditor))
 			return;
@@ -243,6 +245,7 @@ public abstract class FindAction extends SelectionDispatchAction {
 	/*
 	 * Method declared on SelectionChangedAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(canOperateOn(selection));
 	}
@@ -250,6 +253,7 @@ public abstract class FindAction extends SelectionDispatchAction {
 	/*
 	 * Method declared on SelectionChangedAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindBreakContinueTargetOccurrencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindBreakContinueTargetOccurrencesAction.java
index b65fae5..4cdaba1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindBreakContinueTargetOccurrencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindBreakContinueTargetOccurrencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class FindBreakContinueTargetOccurrencesAction extends SelectionDispatchA
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -93,6 +94,7 @@ public class FindBreakContinueTargetOccurrencesAction extends SelectionDispatchA
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		CompilationUnit astRoot= selection.resolvePartialAstAtOffset();
 		setEnabled(astRoot != null && new BreakContinueTargetFinder().initialize(astRoot, selection.getOffset(), selection.getLength()) == null);
@@ -101,6 +103,7 @@ public class FindBreakContinueTargetOccurrencesAction extends SelectionDispatchA
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(false);
 	}
@@ -108,6 +111,7 @@ public class FindBreakContinueTargetOccurrencesAction extends SelectionDispatchA
 	/* (non-JavaDoc)
 	 * Method declared in SelectionDispatchAction.
 	 */
+	@Override
 	public final void run(ITextSelection ts) {
 		ITypeRoot input= getEditorInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsAction.java
index 7ec93cb..9f6ab58 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ public class FindDeclarationsAction extends FindAction {
 		super(editor);
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindDeclarationAction_label);
 		setToolTipText(SearchMessages.Search_FindDeclarationAction_tooltip);
@@ -71,10 +72,12 @@ public class FindDeclarationsAction extends FindAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_DECLARATIONS_IN_WORKSPACE_ACTION);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, IMethod.class, IType.class, ICompilationUnit.class, IPackageDeclaration.class, IImportDeclaration.class, IPackageFragment.class, ILocalVariable.class, ITypeParameter.class };
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.DECLARATIONS | IJavaSearchConstants.IGNORE_DECLARING_TYPE | IJavaSearchConstants.IGNORE_RETURN_TYPE;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInHierarchyAction.java
index 486d402..ff0ef2a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,10 +67,12 @@ public class FindDeclarationsInHierarchyAction extends FindDeclarationsAction {
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, IMethod.class, ILocalVariable.class, ITypeParameter.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindHierarchyDeclarationsAction_label);
 		setToolTipText(SearchMessages.Search_FindHierarchyDeclarationsAction_tooltip);
@@ -78,6 +80,7 @@ public class FindDeclarationsInHierarchyAction extends FindDeclarationsAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_DECLARATIONS_IN_HIERARCHY_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInProjectAction.java
index 375765a..1395126 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,6 +62,7 @@ public class FindDeclarationsInProjectAction extends FindDeclarationsAction {
 		super(editor);
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindDeclarationsInProjectAction_label);
 		setToolTipText(SearchMessages.Search_FindDeclarationsInProjectAction_tooltip);
@@ -69,6 +70,7 @@ public class FindDeclarationsInProjectAction extends FindDeclarationsAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_DECLARATIONS_IN_PROJECT_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 		JavaEditor editor= getEditor();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java
index 831037e..1c927fa 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,6 +92,7 @@ public class FindDeclarationsInWorkingSetAction extends FindDeclarationsAction {
 		fWorkingSet= workingSets;
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindDeclarationsInWorkingSetAction_label);
 		setToolTipText(SearchMessages.Search_FindDeclarationsInWorkingSetAction_tooltip);
@@ -99,6 +100,7 @@ public class FindDeclarationsInWorkingSetAction extends FindDeclarationsAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_DECLARATIONS_IN_WORKING_SET_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindExceptionOccurrencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindExceptionOccurrencesAction.java
index aee4cf3..fd2e63a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindExceptionOccurrencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindExceptionOccurrencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,6 +83,7 @@ public class FindExceptionOccurrencesAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -93,6 +94,7 @@ public class FindExceptionOccurrencesAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		CompilationUnit astRoot= selection.resolvePartialAstAtOffset();
 		setEnabled(astRoot != null && new ExceptionOccurrencesFinder().initialize(astRoot, selection.getOffset(), selection.getLength()) == null);
@@ -101,6 +103,7 @@ public class FindExceptionOccurrencesAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(false);
 	}
@@ -108,6 +111,7 @@ public class FindExceptionOccurrencesAction extends SelectionDispatchAction {
 	/* (non-JavaDoc)
 	 * Method declared in SelectionDispatchAction.
 	 */
+	@Override
 	public final void run(ITextSelection ts) {
 		ITypeRoot input= getEditorInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementOccurrencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementOccurrencesAction.java
index 6eef61e..56ca2c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementOccurrencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementOccurrencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class FindImplementOccurrencesAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -92,6 +93,7 @@ public class FindImplementOccurrencesAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		CompilationUnit astRoot= selection.resolvePartialAstAtOffset();
 		setEnabled(astRoot != null && new ImplementOccurrencesFinder().initialize(astRoot, selection.getOffset(), selection.getLength()) == null);
@@ -102,6 +104,7 @@ public class FindImplementOccurrencesAction extends SelectionDispatchAction {
 	 *
 	 * @since 3.2
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(false);
 	}
@@ -109,6 +112,7 @@ public class FindImplementOccurrencesAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public final void run(ITextSelection ts) {
 		ITypeRoot input= getEditorInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsAction.java
index f8f22e1..4117599 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@ public class FindImplementorsAction extends FindAction {
 		super(editor);
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindImplementorsAction_label);
 		setToolTipText(SearchMessages.Search_FindImplementorsAction_tooltip);
@@ -66,10 +67,12 @@ public class FindImplementorsAction extends FindAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_IMPLEMENTORS_IN_WORKSPACE_ACTION);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { ICompilationUnit.class, IType.class};
 	}
 
+	@Override
 	boolean canOperateOn(IJavaElement element) {
 		if (!super.canOperateOn(element))
 			return false;
@@ -84,10 +87,12 @@ public class FindImplementorsAction extends FindAction {
 		return false;
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.IMPLEMENTORS;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return SearchMessages.JavaElementAction_operationUnavailable_interface;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInProjectAction.java
index 5f2066c..71fc064 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class FindImplementorsInProjectAction extends FindImplementorsAction {
 		super(editor);
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindImplementorsInProjectAction_label);
 		setToolTipText(SearchMessages.Search_FindImplementorsInProjectAction_tooltip);
@@ -68,6 +69,7 @@ public class FindImplementorsInProjectAction extends FindImplementorsAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_IMPLEMENTORS_IN_PROJECT_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 		JavaEditor editor= getEditor();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java
index f258cc3..40d5cc9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,6 +91,7 @@ public class FindImplementorsInWorkingSetAction extends FindImplementorsAction {
 		fWorkingSets= workingSets;
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindImplementorsInWorkingSetAction_label);
 		setToolTipText(SearchMessages.Search_FindImplementorsInWorkingSetAction_tooltip);
@@ -98,6 +99,7 @@ public class FindImplementorsInWorkingSetAction extends FindImplementorsAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_IMPLEMENTORS_IN_WORKING_SET_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindMethodExitOccurrencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindMethodExitOccurrencesAction.java
index 20076f6..db50a26 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindMethodExitOccurrencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindMethodExitOccurrencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class FindMethodExitOccurrencesAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -92,6 +93,7 @@ public class FindMethodExitOccurrencesAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		CompilationUnit astRoot= selection.resolvePartialAstAtOffset();
 		setEnabled(astRoot != null && new MethodExitsFinder().initialize(astRoot, selection.getOffset(), selection.getLength()) == null);
@@ -100,6 +102,7 @@ public class FindMethodExitOccurrencesAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(false);
 	}
@@ -107,6 +110,7 @@ public class FindMethodExitOccurrencesAction extends SelectionDispatchAction {
 	/* (non-JavaDoc)
 	 * Method declared in SelectionDispatchAction.
 	 */
+	@Override
 	public final void run(ITextSelection ts) {
 		ITypeRoot input= getEditorInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindOccurrencesInFileAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindOccurrencesInFileAction.java
index e427aac..d835efc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindOccurrencesInFileAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindOccurrencesInFileAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -128,6 +128,7 @@ public class FindOccurrencesInFileAction extends SelectionDispatchAction {
 	/* (non-JavaDoc)
 	 * Method declared in SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(getMember(selection) != null);
 	}
@@ -162,6 +163,7 @@ public class FindOccurrencesInFileAction extends SelectionDispatchAction {
 		return null;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		IMember member= getMember(selection);
 		if (!ActionUtil.isProcessable(getShell(), member))
@@ -191,6 +193,7 @@ public class FindOccurrencesInFileAction extends SelectionDispatchAction {
 	/* (non-JavaDoc)
 	 * Method declared in SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -201,6 +204,7 @@ public class FindOccurrencesInFileAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		CompilationUnit astRoot= selection.resolvePartialAstAtOffset();
 		setEnabled(astRoot != null && new OccurrencesFinder().initialize(astRoot, selection.getOffset(), selection.getLength()) == null);
@@ -209,6 +213,7 @@ public class FindOccurrencesInFileAction extends SelectionDispatchAction {
 	/* (non-JavaDoc)
 	 * Method declared in SelectionDispatchAction.
 	 */
+	@Override
 	public final void run(ITextSelection ts) {
 		ITypeRoot input= getEditorInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesAction.java
index 75fc147..f13ee4a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,10 +56,12 @@ public class FindReadReferencesAction extends FindReferencesAction {
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, ILocalVariable.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindReadReferencesAction_label);
 		setToolTipText(SearchMessages.Search_FindReadReferencesAction_tooltip);
@@ -67,10 +69,12 @@ public class FindReadReferencesAction extends FindReferencesAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_READ_REFERENCES_IN_WORKSPACE_ACTION);
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.READ_ACCESSES;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return SearchMessages.JavaElementAction_operationUnavailable_field;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInHierarchyAction.java
index 8636eba..f0639b9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,10 +57,12 @@ public class FindReadReferencesInHierarchyAction extends FindReferencesInHierarc
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, ILocalVariable.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindReadReferencesInHierarchyAction_label);
 		setToolTipText(SearchMessages.Search_FindReadReferencesInHierarchyAction_tooltip);
@@ -68,10 +70,12 @@ public class FindReadReferencesInHierarchyAction extends FindReferencesInHierarc
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_READ_REFERENCES_IN_HIERARCHY_ACTION);
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.READ_ACCESSES;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return SearchMessages.JavaElementAction_operationUnavailable_field;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInProjectAction.java
index f7c77a7..6d21f7b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class FindReadReferencesInProjectAction extends FindReadReferencesAction
 		super(editor);
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindReadReferencesInProjectAction_label);
 		setToolTipText(SearchMessages.Search_FindReadReferencesInProjectAction_tooltip);
@@ -68,6 +69,7 @@ public class FindReadReferencesInProjectAction extends FindReadReferencesAction
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_READ_REFERENCES_IN_PROJECT_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 		JavaEditor editor= getEditor();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInWorkingSetAction.java
index 1f5c85b..fc88011 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReadReferencesInWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,10 +82,12 @@ public class FindReadReferencesInWorkingSetAction extends FindReferencesInWorkin
 		super(editor, workingSets);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, ILocalVariable.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindReadReferencesInWorkingSetAction_label);
 		setToolTipText(SearchMessages.Search_FindReadReferencesInWorkingSetAction_tooltip);
@@ -93,10 +95,12 @@ public class FindReadReferencesInWorkingSetAction extends FindReferencesInWorkin
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_READ_REFERENCES_IN_WORKING_SET_ACTION);
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.READ_ACCESSES;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return SearchMessages.JavaElementAction_operationUnavailable_field;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesAction.java
index 35fb289..a134df7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,10 +72,12 @@ public class FindReferencesAction extends FindAction {
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { ICompilationUnit.class, IType.class, IMethod.class, IField.class, IPackageDeclaration.class, IImportDeclaration.class, IPackageFragment.class, ILocalVariable.class, ITypeParameter.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindReferencesAction_label);
 		setToolTipText(SearchMessages.Search_FindReferencesAction_tooltip);
@@ -83,10 +85,12 @@ public class FindReferencesAction extends FindAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_REFERENCES_IN_WORKSPACE_ACTION);
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.REFERENCES;
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 		boolean isInsideJRE= factory.isInsideJRE(element);
@@ -96,6 +100,7 @@ public class FindReferencesAction extends FindAction {
 		return new ElementQuerySpecification(element, getLimitTo(), scope, description);
 	}
 
+	@Override
 	public void run(IJavaElement element) {
 		SearchUtil.warnIfBinaryConstant(element, getShell());
 		super.run(element);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInHierarchyAction.java
index 9db99aa..942df16 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,10 +68,12 @@ public class FindReferencesInHierarchyAction extends FindReferencesAction {
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { ICompilationUnit.class, IType.class, IMethod.class, IField.class, ILocalVariable.class, ITypeParameter.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindHierarchyReferencesAction_label);
 		setToolTipText(SearchMessages.Search_FindHierarchyReferencesAction_tooltip);
@@ -79,6 +81,7 @@ public class FindReferencesInHierarchyAction extends FindReferencesAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_REFERENCES_IN_HIERARCHY_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
 		IType type= getType(element);
 		if (type == null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInProjectAction.java
index 8aaab95..f4a2e69 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,10 +71,12 @@ public class FindReferencesInProjectAction extends FindReferencesAction {
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, IMethod.class, IType.class, ICompilationUnit.class, IPackageDeclaration.class, IImportDeclaration.class, IPackageFragment.class, ILocalVariable.class, ITypeParameter.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindReferencesInProjectAction_label);
 		setToolTipText(SearchMessages.Search_FindReferencesInProjectAction_tooltip);
@@ -82,6 +84,7 @@ public class FindReferencesInProjectAction extends FindReferencesAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_REFERENCES_IN_PROJECT_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 		JavaEditor editor= getEditor();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java
index def44f6..5c53979 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,6 +92,7 @@ public class FindReferencesInWorkingSetAction extends FindReferencesAction {
 		fWorkingSets= workingSets;
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindReferencesInWorkingSetAction_label);
 		setToolTipText(SearchMessages.Search_FindReferencesInWorkingSetAction_tooltip);
@@ -99,6 +100,7 @@ public class FindReferencesInWorkingSetAction extends FindReferencesAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_REFERENCES_IN_WORKING_SET_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java
index 5fd7afb..db8abdf 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -109,6 +109,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(computeEnablementState(selection));
@@ -122,7 +123,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	private boolean computeEnablementState(IStructuredSelection selection) throws JavaModelException {
 		if (selection.isEmpty())
 			return false;
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (!(element instanceof IJavaElement))
 				return false;
@@ -146,6 +147,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(final IStructuredSelection selection) {
 		try {
 			PlatformUI.getWorkbench().getProgressService().run(true, true, createRunnable(selection));
@@ -174,15 +176,15 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	}
 
 	private NonNLSElement[] doRun(IStructuredSelection selection, IProgressMonitor pm) throws CoreException {
-		List elements= getSelectedElementList(selection);
+		List<?> elements= getSelectedElementList(selection);
 		if (elements == null || elements.isEmpty())
 			return new NonNLSElement[0];
 
 		pm.beginTask(ActionMessages.FindStringsToExternalizeAction_find_strings, elements.size());
 
 		try{
-			List l= new ArrayList();
-			for (Iterator iter= elements.iterator(); iter.hasNext();) {
+			List<NonNLSElement> l= new ArrayList<NonNLSElement>();
+			for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
 				IJavaElement element= (IJavaElement) iter.next();
 				if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT)
 					l.addAll(analyze((IPackageFragment) element, new SubProgressMonitor(pm, 1)));
@@ -191,7 +193,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 				if (element.getElementType() == IJavaElement.JAVA_PROJECT)
 					l.addAll(analyze((IJavaProject) element, new SubProgressMonitor(pm, 1)));
 			}
-			return (NonNLSElement[]) l.toArray(new NonNLSElement[l.size()]);
+			return l.toArray(new NonNLSElement[l.size()]);
 		} finally{
 			pm.done();
 		}
@@ -217,17 +219,17 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	/*
 	 * returns List of Strings
 	 */
-	private List analyze(IPackageFragment pack, IProgressMonitor pm) throws CoreException {
+	private List<NonNLSElement> analyze(IPackageFragment pack, IProgressMonitor pm) throws CoreException {
 		try{
 			if (pack == null)
-				return new ArrayList(0);
+				return new ArrayList<NonNLSElement>(0);
 
 			ICompilationUnit[] cus= pack.getCompilationUnits();
 
 			pm.beginTask("", cus.length); //$NON-NLS-1$
 			pm.setTaskName(pack.getElementName());
 
-			List l= new ArrayList(cus.length);
+			List<NonNLSElement> l= new ArrayList<NonNLSElement>(cus.length);
 			for (int i= 0; i < cus.length; i++){
 				pm.subTask(BasicElementLabels.getFileName(cus[i]));
 				NonNLSElement element= analyze(cus[i]);
@@ -246,12 +248,12 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	/*
 	 * returns List of Strings
 	 */
-	private List analyze(IPackageFragmentRoot sourceFolder, IProgressMonitor pm) throws CoreException {
+	private List<NonNLSElement> analyze(IPackageFragmentRoot sourceFolder, IProgressMonitor pm) throws CoreException {
 		try{
 			IJavaElement[] children= sourceFolder.getChildren();
 			pm.beginTask("", children.length); //$NON-NLS-1$
 			pm.setTaskName(JavaElementLabels.getElementLabel(sourceFolder, JavaElementLabels.ALL_DEFAULT));
-			List result= new ArrayList();
+			List<NonNLSElement> result= new ArrayList<NonNLSElement>();
 			for (int i= 0; i < children.length; i++) {
 				IJavaElement iJavaElement= children[i];
 				if (iJavaElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT){
@@ -272,11 +274,11 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	/*
 	 * returns List of Strings
 	 */
-	private List analyze(IJavaProject project, IProgressMonitor pm) throws CoreException {
+	private List<NonNLSElement> analyze(IJavaProject project, IProgressMonitor pm) throws CoreException {
 		try{
 			IPackageFragment[] packs= project.getPackageFragments();
 			pm.beginTask("", packs.length); //$NON-NLS-1$
-			List result= new ArrayList();
+			List<NonNLSElement> result= new ArrayList<NonNLSElement>();
 			for (int i= 0; i < packs.length; i++) {
 				if (! packs[i].isReadOnly())
 					result.addAll(analyze(packs[i], new SubProgressMonitor(pm, 1)));
@@ -339,7 +341,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 	 * @return returns <code>List</code> of <code>IPackageFragments</code>,  <code>IPackageFragmentRoots</code> or
 	 * <code>IJavaProjects</code> (all entries are of the same kind)
 	 */
-	private static List getSelectedElementList(IStructuredSelection selection) {
+	private static List<?> getSelectedElementList(IStructuredSelection selection) {
 		if (selection == null)
 			return null;
 
@@ -366,10 +368,12 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 			setLabelProvider(createLabelProvider());
 		}
 
+		@Override
 		protected Point getInitialSize() {
 			return getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 		}
 
+		@Override
 		protected Control createDialogArea(Composite parent) {
 			Composite result= (Composite)super.createDialogArea(parent);
 			getTableViewer().addSelectionChangedListener(new ISelectionChangedListener(){
@@ -380,6 +384,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 				}
 			});
 			getTableViewer().getTable().addSelectionListener(new SelectionAdapter(){
+				@Override
 				public void widgetDefaultSelected(SelectionEvent e) {
 					NonNLSElement element= (NonNLSElement)e.item.getData();
 					ExternalizeWizard.open(element.cu, getShell());
@@ -390,6 +395,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 			return result;
 		}
 
+		@Override
 		protected void createButtonsForButtonBar(Composite parent) {
 			fOpenButton= createButton(parent, OPEN_BUTTON_ID, ActionMessages.FindStringsToExternalizeAction_button_label, true);
 			fOpenButton.setEnabled(false);
@@ -398,6 +404,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 			createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CLOSE_LABEL, false);
 		}
 
+		@Override
 		protected void buttonPressed(int buttonId) {
 			if (buttonId != OPEN_BUTTON_ID){
 				super.buttonPressed(buttonId);
@@ -413,6 +420,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 
 		private static LabelProvider createLabelProvider() {
 			return new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT){
+				@Override
 				public String getText(Object element) {
 					NonNLSElement nlsel= (NonNLSElement)element;
 					String elementName= BasicElementLabels.getPathLabel(nlsel.cu.getResource().getFullPath(), false);
@@ -420,6 +428,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 						ActionMessages.FindStringsToExternalizeAction_foundStrings,
 						new Object[] {new Integer(nlsel.count), elementName} );
 				}
+				@Override
 				public Image getImage(Object element) {
 					return super.getImage(((NonNLSElement)element).cu);
 				}
@@ -429,6 +438,7 @@ public class FindStringsToExternalizeAction extends SelectionDispatchAction {
 		/*
 		 * @see org.eclipse.jface.window.Window#configureShell(Shell)
 		 */
+		@Override
 		protected void configureShell(Shell newShell) {
 			super.configureShell(newShell);
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.NONNLS_DIALOG);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesAction.java
index 3db3a5d..d0a2c11 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,10 +57,12 @@ public class FindWriteReferencesAction extends FindReferencesAction {
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, ILocalVariable.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindWriteReferencesAction_label);
 		setToolTipText(SearchMessages.Search_FindWriteReferencesAction_tooltip);
@@ -68,10 +70,12 @@ public class FindWriteReferencesAction extends FindReferencesAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_WRITE_REFERENCES_IN_WORKSPACE_ACTION);
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.WRITE_ACCESSES;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return SearchMessages.JavaElementAction_operationUnavailable_field;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInHierarchyAction.java
index 8f1088f..581ab2b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,10 +57,12 @@ public class FindWriteReferencesInHierarchyAction extends FindReferencesInHierar
 		super(editor);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, ILocalVariable.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindWriteReferencesInHierarchyAction_label);
 		setToolTipText(SearchMessages.Search_FindWriteReferencesInHierarchyAction_tooltip);
@@ -68,10 +70,12 @@ public class FindWriteReferencesInHierarchyAction extends FindReferencesInHierar
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_WRITE_REFERENCES_IN_HIERARCHY_ACTION);
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.WRITE_ACCESSES;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return SearchMessages.JavaElementAction_operationUnavailable_field;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInProjectAction.java
index 847e582..3a753b1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public class FindWriteReferencesInProjectAction extends FindWriteReferencesActio
 		super(editor);
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindWriteReferencesInProjectAction_label);
 		setToolTipText(SearchMessages.Search_FindWriteReferencesInProjectAction_tooltip);
@@ -68,6 +69,7 @@ public class FindWriteReferencesInProjectAction extends FindWriteReferencesActio
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_WRITE_REFERENCES_IN_PROJECT_ACTION);
 	}
 
+	@Override
 	QuerySpecification createQuery(IJavaElement element) throws JavaModelException {
 		JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
 		JavaEditor editor= getEditor();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInWorkingSetAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInWorkingSetAction.java
index 7006b99..5d253d8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInWorkingSetAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindWriteReferencesInWorkingSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,10 +82,12 @@ public class FindWriteReferencesInWorkingSetAction extends FindReferencesInWorki
 		super(editor, workingSets);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return new Class[] { IField.class, ILocalVariable.class };
 	}
 
+	@Override
 	void init() {
 		setText(SearchMessages.Search_FindWriteReferencesInWorkingSetAction_label);
 		setToolTipText(SearchMessages.Search_FindWriteReferencesInWorkingSetAction_tooltip);
@@ -93,10 +95,12 @@ public class FindWriteReferencesInWorkingSetAction extends FindReferencesInWorki
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_WRITE_REFERENCES_IN_WORKING_SET_ACTION);
 	}
 
+	@Override
 	int getLimitTo() {
 		return IJavaSearchConstants.WRITE_ACCESSES;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return SearchMessages.JavaElementAction_operationUnavailable_field;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FormatAllAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FormatAllAction.java
index a6eb56f..b3906df 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FormatAllAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FormatAllAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,6 +83,7 @@ public class FormatAllAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		// do nothing
 	}
@@ -90,6 +91,7 @@ public class FormatAllAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		fCleanUpDelegate.selectionChanged(selection);
 		setEnabled(fCleanUpDelegate.isEnabled());
@@ -98,12 +100,14 @@ public class FormatAllAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		fCleanUpDelegate.run(selection);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateActionGroup.java
index 9be2e82..3d12ce9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -125,7 +125,7 @@ public class GenerateActionGroup extends ActionGroup {
 	private CompilationUnitEditor fEditor;
 	private IWorkbenchSite fSite;
 	private String fGroupName= IContextMenuConstants.GROUP_REORGANIZE;
-	private List fRegisteredSelectionListeners;
+	private List<ISelectionChangedListener> fRegisteredSelectionListeners;
 
 	private AddImportOnSelectionAction fAddImport;
 	private OverrideMethodsAction fOverrideMethods;
@@ -372,6 +372,7 @@ public class GenerateActionGroup extends ActionGroup {
 		fHandlerService= (IHandlerService)fSite.getService(IHandlerService.class);
 		if (fHandlerService != null) {
 			IHandler handler= new JDTQuickMenuCreator(fEditor) {
+				@Override
 				protected void fillMenu(IMenuManager menu) {
 					fillQuickMenu(menu);
 				}
@@ -382,7 +383,7 @@ public class GenerateActionGroup extends ActionGroup {
 
 	private void registerSelectionListener(ISelectionProvider provider, ISelectionChangedListener listener) {
 		if (fRegisteredSelectionListeners == null)
-			fRegisteredSelectionListeners= new ArrayList(20);
+			fRegisteredSelectionListeners= new ArrayList<ISelectionChangedListener>(20);
 		provider.addSelectionChangedListener(listener);
 		fRegisteredSelectionListeners.add(listener);
 	}
@@ -405,6 +406,7 @@ public class GenerateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBar) {
 		super.fillActionBars(actionBar);
 		setGlobalActionHandlers(actionBar);
@@ -413,6 +415,7 @@ public class GenerateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		MenuManager subMenu= new MenuManager(ActionMessages.SourceMenu_label, MENU_ID);
@@ -446,6 +449,7 @@ public class GenerateActionGroup extends ActionGroup {
 		source.add(new Separator(GROUP_EDIT));
 		added+= addEditorAction(source, "Indent"); //$NON-NLS-1$
 		added+= addEditorAction(source, "Format"); //$NON-NLS-1$
+		added+= addEditorAction(source, "QuickFormat"); //$NON-NLS-1$
 		source.add(new Separator(GROUP_IMPORT));
 		added+= addAction(source, fAddImport);
 		added+= addAction(source, fOrganizeImports);
@@ -494,11 +498,12 @@ public class GenerateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void dispose() {
 		if (fRegisteredSelectionListeners != null) {
 			ISelectionProvider provider= fSelectionProvider;
-			for (Iterator iter= fRegisteredSelectionListeners.iterator(); iter.hasNext();) {
-				ISelectionChangedListener listener= (ISelectionChangedListener) iter.next();
+			for (Iterator<ISelectionChangedListener> iter= fRegisteredSelectionListeners.iterator(); iter.hasNext();) {
+				ISelectionChangedListener listener= iter.next();
 				provider.removeSelectionChangedListener(listener);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateHashCodeEqualsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateHashCodeEqualsAction.java
index 37a7de3..333e731 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateHashCodeEqualsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateHashCodeEqualsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,10 +87,10 @@ public final class GenerateHashCodeEqualsAction extends GenerateMethodAbstractAc
 		public boolean useBlocks= false;
 	}
 
-	private List allFields;
-	private List selectedFields;
+	private List<IVariableBinding> allFields;
+	private List<IVariableBinding> selectedFields;
 
-	private ArrayList alreadyCheckedMemberTypes;
+	private ArrayList<ITypeBinding> alreadyCheckedMemberTypes;
 
 	/**
 	 * Note: This constructor is for internal use only. Clients should not call
@@ -124,6 +124,7 @@ public final class GenerateHashCodeEqualsAction extends GenerateMethodAbstractAc
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.GENERATE_HASHCODE_EQUALS_ACTION);
 	}
 
+	@Override
 	boolean isMethodAlreadyImplemented(ITypeBinding typeBinding) {
 		HashCodeEqualsInfo info= getTypeInfo(typeBinding, false);
 		return (info.foundEquals || info.foundHashCode);
@@ -200,6 +201,7 @@ public final class GenerateHashCodeEqualsAction extends GenerateMethodAbstractAc
 		return status;
 	}
 
+	@Override
 	CodeGenerationSettings createSettings(IType type, SourceActionDialog dialog) {
 		HashCodeEqualsGenerationSettings settings= new HashCodeEqualsGenerationSettings();
 		super.createSettings(type, dialog).setSettings(settings);
@@ -210,20 +212,23 @@ public final class GenerateHashCodeEqualsAction extends GenerateMethodAbstractAc
 		return settings;
 	}
 
+	@Override
 	void initialize(IType type) throws JavaModelException {
 		super.initialize(type);
-		alreadyCheckedMemberTypes= new ArrayList();
+		alreadyCheckedMemberTypes= new ArrayList<ITypeBinding>();
 	}
 
+	@Override
 	String getAlreadyImplementedErrorMethodName() {
 		return ActionMessages.GenerateHashCodeEqualsAction_hashcode_or_equals;
 	}
 
+	@Override
 	boolean generateCandidates() {
 		IVariableBinding[] fCandidateFields= fTypeBinding.getDeclaredFields();
 
-		allFields= new ArrayList();
-		selectedFields= new ArrayList();
+		allFields= new ArrayList<IVariableBinding>();
+		selectedFields= new ArrayList<IVariableBinding>();
 		for (int i= 0; i < fCandidateFields.length; i++) {
 			if (!Modifier.isStatic(fCandidateFields[i].getModifiers())) {
 				allFields.add(fCandidateFields[i]);
@@ -237,20 +242,24 @@ public final class GenerateHashCodeEqualsAction extends GenerateMethodAbstractAc
 		return true;
 	}
 
+	@Override
 	SourceActionDialog createDialog(Shell shell, IType type) throws JavaModelException {
-		IVariableBinding[] allFieldBindings= (IVariableBinding[]) allFields.toArray(new IVariableBinding[0]);
-		IVariableBinding[] selectedFieldBindings= (IVariableBinding[]) selectedFields.toArray(new IVariableBinding[0]);
+		IVariableBinding[] allFieldBindings= allFields.toArray(new IVariableBinding[0]);
+		IVariableBinding[] selectedFieldBindings= selectedFields.toArray(new IVariableBinding[0]);
 		return new GenerateHashCodeEqualsDialog(shell, fEditor, type, allFieldBindings, selectedFieldBindings);
 	}
 
+	@Override
 	RefactoringStatus checkSuperClass(ITypeBinding superclass) {
 		return checkHashCodeEqualsExists(superclass, true);
 	}
 
+	@Override
 	RefactoringStatus checkGeneralConditions(IType type, CodeGenerationSettings settings, Object[] selected) {
 		return new RefactoringStatus();
 	}
 
+	@Override
 	RefactoringStatus checkMember(Object memberBinding) {
 		RefactoringStatus status= new RefactoringStatus();
 		IVariableBinding variableBinding= (IVariableBinding)memberBinding;
@@ -267,8 +276,9 @@ public final class GenerateHashCodeEqualsAction extends GenerateMethodAbstractAc
 		return status;
 	}
 
+	@Override
 	IWorkspaceRunnable createOperation(Object[] selectedBindings, CodeGenerationSettings settings, boolean regenerate, IJavaElement type, IJavaElement elementPosition) {
-		final IVariableBinding[] selectedVariableBindings= (IVariableBinding[]) Arrays.asList(selectedBindings).toArray(new IVariableBinding[0]);
+		final IVariableBinding[] selectedVariableBindings= Arrays.asList(selectedBindings).toArray(new IVariableBinding[0]);
 		HashCodeEqualsGenerationSettings hashCodeEqualsGenerationSettings= (HashCodeEqualsGenerationSettings)settings;
 		GenerateHashCodeEqualsOperation operation= new GenerateHashCodeEqualsOperation(fTypeBinding, selectedVariableBindings, fUnit, elementPosition, settings,
 				hashCodeEqualsGenerationSettings.useInstanceOf, regenerate, true, false);
@@ -276,10 +286,12 @@ public final class GenerateHashCodeEqualsAction extends GenerateMethodAbstractAc
 		return operation;
 	}
 
+	@Override
 	String getErrorCaption() {
 		return ActionMessages.GenerateHashCodeEqualsAction_error_caption;
 	}
 
+	@Override
 	String getNoMembersError() {
 		return ActionMessages.GenerateHashCodeEqualsAction_no_nonstatic_fields_error;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateMethodAbstractAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateMethodAbstractAction.java
index 89cf8de..3a61e0b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateMethodAbstractAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateMethodAbstractAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,6 @@ import org.eclipse.jdt.core.IOpenable;
 import org.eclipse.jdt.core.ISourceReference;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.ITypeBinding;
@@ -73,6 +72,7 @@ import org.eclipse.jdt.internal.ui.actions.ActionUtil;
 import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
 import org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter;
 import org.eclipse.jdt.internal.ui.dialogs.SourceActionDialog;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext;
@@ -160,6 +160,7 @@ abstract class GenerateMethodAbstractAction extends SelectionDispatchAction {
 		return null;
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			checkAndRun(getSelectedType(selection));
@@ -169,6 +170,7 @@ abstract class GenerateMethodAbstractAction extends SelectionDispatchAction {
 	}
 
 
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			checkAndRun(SelectionConverter.getTypeAtOffset(fEditor));
@@ -392,7 +394,7 @@ abstract class GenerateMethodAbstractAction extends SelectionDispatchAction {
 	}
 
 	void initialize(IType type) throws JavaModelException {
-		RefactoringASTParser parser= new RefactoringASTParser(AST.JLS3);
+		RefactoringASTParser parser= new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL);
 		fUnit= parser.parse(type.getCompilationUnit(), true);
 		fTypeBinding= null;
 		// type cannot be anonymous
@@ -402,6 +404,7 @@ abstract class GenerateMethodAbstractAction extends SelectionDispatchAction {
 			fTypeBinding= declaration.resolveBinding();
 	}
 
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(canEnable(selection));
@@ -412,6 +415,7 @@ abstract class GenerateMethodAbstractAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		// Do nothing
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateNewConstructorUsingFieldsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateNewConstructorUsingFieldsAction.java
index 9402ba8..cb378c9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateNewConstructorUsingFieldsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateNewConstructorUsingFieldsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -162,7 +162,7 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 	 * not valid.
 	 */
 	private IField[] getSelectedFields(IStructuredSelection selection) {
-		List elements= selection.toList();
+		List<?> elements= selection.toList();
 		if (elements.size() > 0) {
 			IField[] fields= new IField[elements.size()];
 			ICompilationUnit unit= null;
@@ -218,6 +218,7 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IType selectionType= getSelectedType(selection);
@@ -258,6 +259,7 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isProcessable(fEditor)) {
 			notifyResult(false);
@@ -312,7 +314,7 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 			return;
 		}
 
-		List allSelected= Arrays.asList(selectedFields);
+		List<IField> allSelected= Arrays.asList(selectedFields);
 
 		CompilationUnit astRoot= SharedASTProvider.getAST(cu, SharedASTProvider.WAIT_YES, new NullProgressMonitor());
 		ITypeBinding typeBinding= ASTNodes.getTypeBinding(astRoot, type);
@@ -322,8 +324,8 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 			return;
 		}
 
-		HashMap fieldsToBindings= new HashMap();
-		ArrayList selected= new ArrayList();
+		HashMap<IJavaElement, IVariableBinding> fieldsToBindings= new HashMap<IJavaElement, IVariableBinding>();
+		ArrayList<IVariableBinding> selected= new ArrayList<IVariableBinding>();
 
 		IVariableBinding[] candidates= typeBinding.getDeclaredFields();
 		for (int i= 0; i < candidates.length; i++) {
@@ -352,10 +354,10 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 			return;
 		}
 
-		ArrayList fields= new ArrayList();
+		ArrayList<IVariableBinding> fields= new ArrayList<IVariableBinding>();
 		IField[] allFields= type.getFields();
 		for (int i= 0; i < allFields.length; i++) {
-			Object fieldBinding= fieldsToBindings.remove(allFields[i]);
+			IVariableBinding fieldBinding= fieldsToBindings.remove(allFields[i]);
 			if (fieldBinding != null) {
 				fields.add(fieldBinding);
 			}
@@ -398,12 +400,12 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 				notifyResult(false);
 				return;
 			}
-			ArrayList result= new ArrayList(elements.length);
+			ArrayList<IVariableBinding> result= new ArrayList<IVariableBinding>(elements.length);
 			for (int index= 0; index < elements.length; index++) {
 				if (elements[index] instanceof IVariableBinding)
-					result.add(elements[index]);
+					result.add((IVariableBinding) elements[index]);
 			}
-			IVariableBinding[] variables= (IVariableBinding[]) result.toArray(new IVariableBinding[result.size()]);
+			IVariableBinding[] variables= result.toArray(new IVariableBinding[result.size()]);
 
 			IEditorPart editor= JavaUI.openInEditor(cu);
 			CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(type.getJavaProject());
@@ -442,6 +444,7 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(canEnable(selection));
@@ -458,6 +461,7 @@ public class GenerateNewConstructorUsingFieldsAction extends SelectionDispatchAc
 	/*
 	 * (non-Javadoc) Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateToStringAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateToStringAction.java
index f08d64b..b60772f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateToStringAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/GenerateToStringAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Mateusz Matela and others.
+ * Copyright (c) 2008, 2011 Mateusz Matela and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,15 +73,15 @@ public class GenerateToStringAction extends GenerateMethodAbstractAction {
 	
 	private static final String METHODNAME_TO_STRING= "toString"; //$NON-NLS-1$
 	
-	private List fFields;
+	private List<IVariableBinding> fFields;
 
-	private List fInheritedFields;
+	private List<IVariableBinding> fInheritedFields;
 
-	private List fSelectedFields;
+	private List<IVariableBinding> fSelectedFields;
 
-	private List fMethods;
+	private List<IMethodBinding> fMethods;
 
-	private List fInheritedMethods;
+	private List<IMethodBinding> fInheritedMethods;
 
 	private GenerateToStringOperation operation;
 
@@ -136,16 +136,19 @@ public class GenerateToStringAction extends GenerateMethodAbstractAction {
 		setEnabled((fEditor != null && SelectionConverter.canOperateOn(fEditor)));
 	}
 
+	@Override
 	RefactoringStatus checkMember(Object object) {
 		// no conditions need to be checked 
 		return new RefactoringStatus();
 	}
 
+	@Override
 	RefactoringStatus checkGeneralConditions(IType type, CodeGenerationSettings settings, Object[] selected) {
 		return operation.checkConditions();
 	}
 
-	 RefactoringStatus checkSuperClass(ITypeBinding superclass) {
+	 @Override
+	RefactoringStatus checkSuperClass(ITypeBinding superclass) {
 		RefactoringStatus status= new RefactoringStatus();
 		if (new ToStringInfo(superclass).foundFinalToString) {
 			status.addError(Messages.format(ActionMessages.GenerateMethodAbstractAction_final_method_in_superclass_error, new String[] {
@@ -155,19 +158,22 @@ public class GenerateToStringAction extends GenerateMethodAbstractAction {
 		return status;
 	}
 
+	@Override
 	SourceActionDialog createDialog(Shell shell, IType type) throws JavaModelException {
-		IVariableBinding[] fieldBindings= (IVariableBinding[]) fFields.toArray(new IVariableBinding[0]);
-		IVariableBinding[] inheritedFieldBindings= (IVariableBinding[]) fInheritedFields.toArray(new IVariableBinding[0]);
-		IVariableBinding[] selectedFieldBindings= (IVariableBinding[]) fSelectedFields.toArray(new IVariableBinding[0]);
-		IMethodBinding[] methodBindings= (IMethodBinding[]) fMethods.toArray(new IMethodBinding[0]);
-		IMethodBinding[] inheritededMethodBindings= (IMethodBinding[]) fInheritedMethods.toArray(new IMethodBinding[0]);
+		IVariableBinding[] fieldBindings= fFields.toArray(new IVariableBinding[0]);
+		IVariableBinding[] inheritedFieldBindings= fInheritedFields.toArray(new IVariableBinding[0]);
+		IVariableBinding[] selectedFieldBindings= fSelectedFields.toArray(new IVariableBinding[0]);
+		IMethodBinding[] methodBindings= fMethods.toArray(new IMethodBinding[0]);
+		IMethodBinding[] inheritededMethodBindings= fInheritedMethods.toArray(new IMethodBinding[0]);
 		return new GenerateToStringDialog(shell, fEditor, type, fieldBindings, inheritedFieldBindings, selectedFieldBindings, methodBindings, inheritededMethodBindings);
 	}
 
+	@Override
 	IWorkspaceRunnable createOperation(Object[] selectedBindings, CodeGenerationSettings settings, boolean regenerate, IJavaElement type, IJavaElement elementPosition) {
 		return operation= GenerateToStringOperation.createOperation(fTypeBinding, selectedBindings, fUnit, elementPosition, (ToStringGenerationSettings)settings);
 	}
 	
+	@Override
 	CodeGenerationSettings createSettings(IType type, SourceActionDialog dialog) {
 		ToStringGenerationSettings settings= ((GenerateToStringDialog) dialog).getGenerationSettings();
 		super.createSettings(type, dialog).setSettings(settings);
@@ -179,10 +185,11 @@ public class GenerateToStringAction extends GenerateMethodAbstractAction {
 		return settings;
 	}
 
+	@Override
 	boolean generateCandidates() throws JavaModelException {
 		IVariableBinding[] candidateFields= fTypeBinding.getDeclaredFields();
-		HashMap fieldsToBindings= new HashMap();
-		HashMap selectedFieldsToBindings= new HashMap();
+		HashMap<IJavaElement, IVariableBinding> fieldsToBindings= new HashMap<IJavaElement, IVariableBinding>();
+		HashMap<IJavaElement, IVariableBinding> selectedFieldsToBindings= new HashMap<IJavaElement, IVariableBinding>();
 		for (int i= 0; i < candidateFields.length; i++) {
 			if (!Modifier.isStatic(candidateFields[i].getModifiers())) {
 				fieldsToBindings.put(candidateFields[i].getJavaElement(), candidateFields[i]);
@@ -192,24 +199,24 @@ public class GenerateToStringAction extends GenerateMethodAbstractAction {
 		}
 		IType type= (IType)fTypeBinding.getJavaElement();
 		IField[] allFields= type.getFields();
-		fFields= new ArrayList();
+		fFields= new ArrayList<IVariableBinding>();
 		populateMembers(fFields, allFields, fieldsToBindings);
-		fSelectedFields= new ArrayList();
+		fSelectedFields= new ArrayList<IVariableBinding>();
 		populateMembers(fSelectedFields, allFields, selectedFieldsToBindings);
 
 		IMethodBinding[] candidateMethods= fTypeBinding.getDeclaredMethods();
-		HashMap methodsToBindings= new HashMap();
+		HashMap<IJavaElement, IMethodBinding> methodsToBindings= new HashMap<IJavaElement, IMethodBinding>();
 		for (int i= 0; i < candidateMethods.length; i++) {
 			if (!Modifier.isStatic(candidateMethods[i].getModifiers()) && candidateMethods[i].getParameterTypes().length == 0
 					&& !candidateMethods[i].getReturnType().getName().equals("void") && !candidateMethods[i].getName().equals("toString") && !candidateMethods[i].getName().equals("clone")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				methodsToBindings.put(candidateMethods[i].getJavaElement(), candidateMethods[i]);
 			}
 		}
-		fMethods= new ArrayList();
+		fMethods= new ArrayList<IMethodBinding>();
 		populateMembers(fMethods, type.getMethods(), methodsToBindings);
 
-		fInheritedFields= new ArrayList();
-		fInheritedMethods= new ArrayList();
+		fInheritedFields= new ArrayList<IVariableBinding>();
+		fInheritedMethods= new ArrayList<IMethodBinding>();
 		ITypeBinding typeBinding= fTypeBinding;
 		while ((typeBinding= typeBinding.getSuperclass()) != null) {
 			type = (IType)typeBinding.getJavaElement();
@@ -246,18 +253,18 @@ public class GenerateToStringAction extends GenerateMethodAbstractAction {
 	 * @param membersToBindings map from {@link IMember} to {@link IBinding}
 	 * @since 3.6
 	 */
-	private static void populateMembers(List result, IMember[] allMembers, HashMap membersToBindings) {
+	private static <T extends IBinding> void populateMembers(List<T> result, IMember[] allMembers, HashMap<IJavaElement, T> membersToBindings) {
 		for (int i= 0; i < allMembers.length; i++) {
-			Object memberBinding= membersToBindings.remove(allMembers[i]);
+			T memberBinding= membersToBindings.remove(allMembers[i]);
 			if (memberBinding != null) {
 				result.add(memberBinding);
 			}
 		}
 	}
 
-	private static boolean contains(List inheritedFields, Object member) {
-		for (Iterator iterator= inheritedFields.iterator(); iterator.hasNext();) {
-			Object object= iterator.next();
+	private static <T extends IBinding> boolean contains(List<T> inheritedFields, T member) {
+		for (Iterator<T> iterator= inheritedFields.iterator(); iterator.hasNext();) {
+			T object= iterator.next();
 			if (object instanceof IVariableBinding && member instanceof IVariableBinding)
 				if (((IVariableBinding) object).getName().equals(((IVariableBinding) member).getName()))
 					return true;
@@ -268,18 +275,22 @@ public class GenerateToStringAction extends GenerateMethodAbstractAction {
 		return false;
 	}
 
+	@Override
 	String getAlreadyImplementedErrorMethodName() {
 		return ActionMessages.GenerateToStringAction_tostring;
 	}
 
+	@Override
 	boolean isMethodAlreadyImplemented(ITypeBinding typeBinding) {
 		return new ToStringInfo(typeBinding).foundToString;
 	}
 
+	@Override
 	String getErrorCaption() {
 		return ActionMessages.GenerateToStringAction_error_caption;
 	}
 
+	@Override
 	String getNoMembersError() {
 		//no members error never occurs
 		return null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IJavaEditorActionDefinitionIds.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IJavaEditorActionDefinitionIds.java
index c945029..002fa81 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IJavaEditorActionDefinitionIds.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IJavaEditorActionDefinitionIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -513,12 +513,12 @@ public interface IJavaEditorActionDefinitionIds extends ITextEditorActionDefinit
 	 */
 	public static final String OPEN_TYPE_HIERARCHY= "org.eclipse.jdt.ui.edit.text.java.open.type.hierarchy"; //$NON-NLS-1$
 
-    /**
-     * Action definition ID of the navigate -> open call hierarchy action
-     * (value <code>"org.eclipse.jdt.ui.edit.text.java.org.eclipse.jdt.ui.edit.text.java.open.call.hierarchy"</code>).
-     * @since 3.0
-     */
-    public static final String OPEN_CALL_HIERARCHY= "org.eclipse.jdt.ui.edit.text.java.open.call.hierarchy"; //$NON-NLS-1$
+	/**
+	 * Action definition ID of the navigate -> Open Call Hierarchy action (value
+	 * <code>"org.eclipse.jdt.ui.edit.text.java.org.eclipse.jdt.ui.edit.text.java.open.call.hierarchy"</code>).
+	 * @since 3.0
+	 */
+	public static final String OPEN_CALL_HIERARCHY= "org.eclipse.jdt.ui.edit.text.java.open.call.hierarchy"; //$NON-NLS-1$
 
 	/**
 	 * Action definition ID of the navigate -> show in package explorer action (value
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImplementorsSearchGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImplementorsSearchGroup.java
index 77df31e..5a298f9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImplementorsSearchGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImplementorsSearchGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -156,6 +156,7 @@ public class ImplementorsSearchGroup extends ActionGroup  {
 	/* (non-Javadoc)
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager manager) {
 		MenuManager javaSearchMM= new MenuManager(MENU_TEXT, IContextMenuConstants.GROUP_SEARCH);
 		addAction(fFindImplementorsAction, javaSearchMM);
@@ -163,9 +164,9 @@ public class ImplementorsSearchGroup extends ActionGroup  {
 
 		javaSearchMM.add(new Separator());
 
-		Iterator iter= SearchUtil.getLRUWorkingSets().sortedIterator();
+		Iterator<IWorkingSet[]> iter= SearchUtil.getLRUWorkingSets().sortedIterator();
 		while (iter.hasNext()) {
-			addWorkingSetAction((IWorkingSet[]) iter.next(), javaSearchMM);
+			addWorkingSetAction(iter.next(), javaSearchMM);
 		}
 		addAction(fFindImplementorsInWorkingSetAction, javaSearchMM);
 
@@ -177,6 +178,7 @@ public class ImplementorsSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		Assert.isNotNull(actionBars);
 		super.fillActionBars(actionBars);
@@ -187,6 +189,7 @@ public class ImplementorsSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void dispose() {
 		ISelectionProvider provider= fSite.getSelectionProvider();
 		if (provider != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImportActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImportActionGroup.java
index 6ab260f..623272b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImportActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ImportActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@ public class ImportActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		menu.appendToGroup(IContextMenuConstants.GROUP_REORGANIZE, new Separator(GROUP_IMPORT));
 		menu.appendToGroup(GROUP_IMPORT, fImportAction);
@@ -66,6 +67,7 @@ public class ImportActionGroup extends ActionGroup {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void dispose() {
 		fImportAction.dispose();
 		fExportAction.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InferTypeArgumentsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InferTypeArgumentsAction.java
index 05508fc..052e996 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InferTypeArgumentsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InferTypeArgumentsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,6 +77,7 @@ public class InferTypeArgumentsAction extends SelectionDispatchAction {
     /*
      * @see SelectionDispatchAction#selectionChanged(ITextSelection)
      */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -87,6 +88,7 @@ public class InferTypeArgumentsAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		if (selection.getLength() != 0)
 			setEnabled(false);
@@ -97,6 +99,7 @@ public class InferTypeArgumentsAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isInferTypeArgumentsAvailable(selection));
@@ -111,6 +114,7 @@ public class InferTypeArgumentsAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		IJavaElement[] elements= getSelectedElements(selection);
 		try {
@@ -130,6 +134,7 @@ public class InferTypeArgumentsAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
@@ -147,7 +152,7 @@ public class InferTypeArgumentsAction extends SelectionDispatchAction {
 	}
 
 	private static IJavaElement[] getSelectedElements(IStructuredSelection selection){
-		List list= selection.toList();
+		List<?> list= selection.toList();
 		IJavaElement[] elements= new IJavaElement[list.size()];
 		for (int i= 0; i < list.size(); i++) {
 			Object object= list.get(i);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineAction.java
index fe5f4e8..3b4ca92 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,6 +90,7 @@ public class InlineAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.ISelection)
 	 */
+	@Override
 	public void selectionChanged(ISelection selection) {
 		fInlineConstant.update(selection);
 		fInlineMethod.update(selection);
@@ -100,6 +101,7 @@ public class InlineAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
@@ -128,6 +130,7 @@ public class InlineAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (fInlineConstant.isEnabled())
 			fInlineConstant.run(selection);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineTempAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineTempAction.java
index d5454dc..c0c28c3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineTempAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/InlineTempAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,6 +73,7 @@ public class InlineTempAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -83,6 +84,7 @@ public class InlineTempAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isInlineTempAvailable(selection));
@@ -94,6 +96,7 @@ public class InlineTempAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		ICompilationUnit input= SelectionConverter.getInputAsCompilationUnit(fEditor);
 		if (!ActionUtil.isEditable(fEditor))
@@ -104,6 +107,7 @@ public class InlineTempAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		//do nothing
 	}
@@ -111,6 +115,7 @@ public class InlineTempAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(false);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceFactoryAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceFactoryAction.java
index 91315b9..8d1071c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceFactoryAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceFactoryAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class IntroduceFactoryAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isIntroduceFactoryAvailable(selection));
@@ -97,6 +98,7 @@ public class IntroduceFactoryAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			// we have to call this here - no selection changed event is sent after a refactoring but it may still invalidate enablement
@@ -115,6 +117,7 @@ public class IntroduceFactoryAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null);
 	}
@@ -125,6 +128,7 @@ public class IntroduceFactoryAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isIntroduceFactoryAvailable(selection));
@@ -133,6 +137,7 @@ public class IntroduceFactoryAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceIndirectionAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceIndirectionAction.java
index 82a1545..5e78390 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceIndirectionAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceIndirectionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,6 +85,7 @@ public class IntroduceIndirectionAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isIntroduceIndirectionAvailable(selection));
@@ -97,6 +98,7 @@ public class IntroduceIndirectionAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -107,6 +109,7 @@ public class IntroduceIndirectionAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isIntroduceIndirectionAvailable(selection));
@@ -118,11 +121,14 @@ public class IntroduceIndirectionAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			Assert.isTrue(RefactoringAvailabilityTester.isIntroduceIndirectionAvailable(selection));
 			Object first= selection.getFirstElement();
 			Assert.isTrue(first instanceof IMethod);
+			if (!ActionUtil.isEditable(getShell(), (IMethod)first))
+				return;
 			run((IMethod) first);
 		} catch (CoreException e) {
 			ExceptionHandler.handle(e, RefactoringMessages.IntroduceIndirectionAction_dialog_title, RefactoringMessages.IntroduceIndirectionAction_unknown_exception);
@@ -132,8 +138,13 @@ public class IntroduceIndirectionAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
+		if (!ActionUtil.isProcessable(fEditor))
+			return;
 		ITypeRoot editorInput= SelectionConverter.getInput(fEditor);
+		if (!ActionUtil.isEditable(getShell(), editorInput))
+			return;
 		if (editorInput instanceof ICompilationUnit)
 			run(selection.getOffset(), selection.getLength(), (ICompilationUnit) editorInput);
 		else if (editorInput instanceof IClassFile)
@@ -141,20 +152,14 @@ public class IntroduceIndirectionAction extends SelectionDispatchAction {
 	}
 
 	private void run(int offset, int length, ICompilationUnit unit) {
-		if (!ActionUtil.isEditable(fEditor, getShell(), unit))
-			return;
 		RefactoringExecutionStarter.startIntroduceIndirectionRefactoring(unit, offset, length, getShell());
 	}
 
 	private void run(int offset, int length, IClassFile file) {
-		if (!ActionUtil.isEditable(fEditor, getShell(), file))
-			return;
 		RefactoringExecutionStarter.startIntroduceIndirectionRefactoring(file, offset, length, getShell());
 	}
 
 	private void run(IMethod method) {
-		if (!ActionUtil.isEditable(fEditor, getShell(), method))
-			return;
 		RefactoringExecutionStarter.startIntroduceIndirectionRefactoring(method, getShell());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceParameterAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceParameterAction.java
index 862a80c..a9aad10 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceParameterAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/IntroduceParameterAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,7 @@ public class IntroduceParameterAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled((fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null));
 	}
@@ -67,6 +68,7 @@ public class IntroduceParameterAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		setEnabled(RefactoringAvailabilityTester.isIntroduceParameterAvailable(selection));
 	}
@@ -74,6 +76,7 @@ public class IntroduceParameterAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/JavaSearchActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/JavaSearchActionGroup.java
index 38c0a13..78f5c8b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/JavaSearchActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/JavaSearchActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,6 +129,7 @@ public class JavaSearchActionGroup extends ActionGroup {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void setContext(ActionContext context) {
 		fReferencesGroup.setContext(context);
 		fDeclarationsGroup.setContext(context);
@@ -141,6 +142,7 @@ public class JavaSearchActionGroup extends ActionGroup {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBar) {
 		super.fillActionBars(actionBar);
 		fReferencesGroup.fillActionBars(actionBar);
@@ -154,6 +156,7 @@ public class JavaSearchActionGroup extends ActionGroup {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 
@@ -197,6 +200,7 @@ public class JavaSearchActionGroup extends ActionGroup {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void dispose() {
 		fReferencesGroup.dispose();
 		fDeclarationsGroup.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MemberFilterActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MemberFilterActionGroup.java
index 856c89e..7f12bb1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MemberFilterActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MemberFilterActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -125,7 +125,7 @@ public class MemberFilterActionGroup extends ActionGroup {
 		fFilter= new MemberFilter();
 
 		String title, helpContext;
-		ArrayList actions= new ArrayList(4);
+		ArrayList<MemberFilterAction> actions= new ArrayList<MemberFilterAction>(4);
 
 		// fields
 		int filterProperty= FILTER_FIELDS;
@@ -192,7 +192,7 @@ public class MemberFilterActionGroup extends ActionGroup {
 		}
 
 		// order corresponds to order in toolbar
-		fFilterActions= (MemberFilterAction[]) actions.toArray(new MemberFilterAction[actions.size()]);
+		fFilterActions= actions.toArray(new MemberFilterAction[actions.size()]);
 
 		fViewer.addFilter(fFilter);
 	}
@@ -302,6 +302,7 @@ public class MemberFilterActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * @see ActionGroup#fillActionBars(IActionBars)
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		contributeToToolBar(actionBars.getToolBarManager());
 	}
@@ -343,6 +344,7 @@ public class MemberFilterActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ModifyParametersAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ModifyParametersAction.java
index 52d9204..1c13eb6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ModifyParametersAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ModifyParametersAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class ModifyParametersAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isChangeSignatureAvailable(selection));
@@ -96,6 +97,7 @@ public class ModifyParametersAction extends SelectionDispatchAction {
     /*
      * @see SelectionDispatchAction#selectionChanged(ITextSelection)
      */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -106,6 +108,7 @@ public class ModifyParametersAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isChangeSignatureAvailable(selection));
@@ -117,6 +120,7 @@ public class ModifyParametersAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			// we have to call this here - no selection changed event is sent after a refactoring but it may still invalidate enablement
@@ -134,6 +138,7 @@ public class ModifyParametersAction extends SelectionDispatchAction {
     /*
      * @see SelectionDispatchAction#run(ITextSelection)
      */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			if (! ActionUtil.isEditable(fEditor))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MoveAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MoveAction.java
index 93c231a..4f3c6f7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MoveAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/MoveAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,6 +110,7 @@ public class MoveAction extends SelectionDispatchAction{
 	/*
 	 * @see ISelectionChangedListener#selectionChanged(SelectionChangedEvent)
 	 */
+	@Override
 	public void selectionChanged(SelectionChangedEvent event) {
 		fMoveStaticMembersAction.selectionChanged(event);
 		fMoveInstanceMethodAction.selectionChanged(event);
@@ -120,6 +121,7 @@ public class MoveAction extends SelectionDispatchAction{
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#setSpecialSelectionProvider(org.eclipse.jface.viewers.ISelectionProvider)
 	 */
+	@Override
 	public void setSpecialSelectionProvider(ISelectionProvider provider) {
 		super.setSpecialSelectionProvider(provider);
 
@@ -131,6 +133,7 @@ public class MoveAction extends SelectionDispatchAction{
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			if (fMoveInstanceMethodAction.isEnabled() && tryMoveInstanceMethod(selection))
@@ -151,6 +154,7 @@ public class MoveAction extends SelectionDispatchAction{
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			if (!ActionUtil.isEditable(fEditor))
@@ -185,7 +189,7 @@ public class MoveAction extends SelectionDispatchAction{
 		if (selection.isEmpty())
 			return null;
 
-		for  (Iterator iter= selection.iterator(); iter.hasNext(); ) {
+		for  (Iterator<?> iter= selection.iterator(); iter.hasNext(); ) {
 			if (! (iter.next() instanceof IMember))
 				return null;
 		}
@@ -195,9 +199,9 @@ public class MoveAction extends SelectionDispatchAction{
 	private static IMember[] convertToMemberArray(Object[] obj) {
 		if (obj == null)
 			return null;
-		Set memberSet= new HashSet();
+		Set<Object> memberSet= new HashSet<Object>();
 		memberSet.addAll(Arrays.asList(obj));
-		return (IMember[]) memberSet.toArray(new IMember[memberSet.size()]);
+		return memberSet.toArray(new IMember[memberSet.size()]);
 	}
 
 	private boolean tryMoveStaticMembers(IStructuredSelection selection) throws JavaModelException {
@@ -258,6 +262,7 @@ public class MoveAction extends SelectionDispatchAction{
 	/*
 	 * @see SelectionDispatchAction#update(ISelection)
 	 */
+	@Override
 	public void update(ISelection selection) {
 		fMoveStaticMembersAction.update(selection);
 		fMoveInstanceMethodAction.update(selection);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/NavigateActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/NavigateActionGroup.java
index 4556130..4d66445 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/NavigateActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/NavigateActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -80,6 +80,7 @@ public class NavigateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 		fOpenEditorActionGroup.dispose();
@@ -89,6 +90,7 @@ public class NavigateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		fOpenEditorActionGroup.fillActionBars(actionBars);
@@ -98,6 +100,7 @@ public class NavigateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 
@@ -108,6 +111,7 @@ public class NavigateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void setContext(ActionContext context) {
 		super.setContext(context);
 		fOpenEditorActionGroup.setContext(context);
@@ -117,6 +121,7 @@ public class NavigateActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void updateActionBars() {
 		super.updateActionBars();
 		fOpenEditorActionGroup.updateActionBars();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OccurrencesSearchGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OccurrencesSearchGroup.java
index 6c277f6..6925e0c 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OccurrencesSearchGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OccurrencesSearchGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,6 +173,7 @@ public class OccurrencesSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager manager) {
 		String menuText= SearchMessages.group_occurrences;
 		MenuManager javaSearchMM= new MenuManager(menuText, IContextMenuConstants.GROUP_SEARCH);
@@ -190,6 +191,7 @@ public class OccurrencesSearchGroup extends ActionGroup  {
 				addAction(fBreakContinueTargetOccurrencesAction, mm);
 				if (mm.isEmpty()) {
 					mm.add(new Action(SearchMessages.group_occurrences_quickMenu_noEntriesAvailable) {
+						@Override
 						public boolean isEnabled() {
 							return false;
 						}
@@ -227,6 +229,7 @@ public class OccurrencesSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		Assert.isNotNull(actionBars);
 		super.fillActionBars(actionBars);
@@ -237,6 +240,7 @@ public class OccurrencesSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void dispose() {
 		ISelectionProvider provider= fSite.getSelectionProvider();
 		if (provider != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAction.java
index bc651b2..bf867c7 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,9 @@ import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.util.OpenStrategy;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
+import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.Region;
 
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchSite;
@@ -35,9 +37,9 @@ import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.ui.texteditor.IEditorStatusLine;
 
-import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.ISourceReference;
+import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
 
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
@@ -53,6 +55,8 @@ import org.eclipse.jdt.internal.ui.actions.ActionUtil;
 import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
 import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jdt.internal.ui.javaeditor.JavaElementHyperlinkDetector;
+import org.eclipse.jdt.internal.ui.search.IOccurrencesFinder.OccurrenceLocation;
 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 
 
@@ -106,12 +110,14 @@ public class OpenAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(checkEnabled(selection));
 	}
@@ -119,7 +125,7 @@ public class OpenAction extends SelectionDispatchAction {
 	private boolean checkEnabled(IStructuredSelection selection) {
 		if (selection.isEmpty())
 			return false;
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof ISourceReference)
 				continue;
@@ -135,17 +141,26 @@ public class OpenAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
-		if (!isProcessable())
+		ITypeRoot input= EditorUtility.getEditorInputJavaElement(fEditor, false);
+		if (input == null) {
+			setStatusLineMessage();
 			return;
+		}
+		IRegion region= new Region(selection.getOffset(), selection.getLength());
+		OccurrenceLocation location= JavaElementHyperlinkDetector.findBreakOrContinueTarget(input, region);
+		if (location != null) {
+			fEditor.selectAndReveal(location.getOffset(), location.getLength());
+			return;
+		}
 		try {
 			IJavaElement[] elements= SelectionConverter.codeResolveForked(fEditor, false);
 			elements= selectOpenableElements(elements);
 			if (elements == null || elements.length == 0) {
-				IEditorStatusLine statusLine= (IEditorStatusLine) fEditor.getAdapter(IEditorStatusLine.class);
-				if (statusLine != null)
-					statusLine.setMessage(true, ActionMessages.OpenAction_error_messageBadSelection, null);
-				getShell().getDisplay().beep();
+				if (!ActionUtil.isProcessable(fEditor))
+					return;
+				setStatusLineMessage();
 				return;
 			}
 
@@ -165,6 +180,19 @@ public class OpenAction extends SelectionDispatchAction {
 	}
 
 	/**
+	 * Sets the error message in the status line.
+	 * 
+	 * @since 3.7
+	 */
+	private void setStatusLineMessage() {
+		IEditorStatusLine statusLine= (IEditorStatusLine) fEditor.getAdapter(IEditorStatusLine.class);
+		if (statusLine != null)
+			statusLine.setMessage(true, ActionMessages.OpenAction_error_messageBadSelection, null);
+		getShell().getDisplay().beep();
+		return;
+	}
+
+	/**
 	 * Selects the openable elements out of the given ones.
 	 *
 	 * @param elements the elements to filter
@@ -172,7 +200,7 @@ public class OpenAction extends SelectionDispatchAction {
 	 * @since 3.4
 	 */
 	private IJavaElement[] selectOpenableElements(IJavaElement[] elements) {
-		List result= new ArrayList(elements.length);
+		List<IJavaElement> result= new ArrayList<IJavaElement>(elements.length);
 		for (int i= 0; i < elements.length; i++) {
 			IJavaElement element= elements[i];
 			switch (element.getElementType()) {
@@ -187,21 +215,13 @@ public class OpenAction extends SelectionDispatchAction {
 					break;
 			}
 		}
-		return (IJavaElement[])result.toArray(new IJavaElement[result.size()]);
-	}
-
-	private boolean isProcessable() {
-		if (fEditor != null) {
-			IJavaElement je= EditorUtility.getEditorInputJavaElement(fEditor, false);
-			if (je instanceof ICompilationUnit && !JavaModelUtil.isPrimary((ICompilationUnit)je))
-				return true; // can process non-primary working copies
-		}
-		return ActionUtil.isProcessable(fEditor);
+		return result.toArray(new IJavaElement[result.size()]);
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (!checkEnabled(selection))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAttachedJavadocAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAttachedJavadocAction.java
index 852fc8f..70f81b3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAttachedJavadocAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenAttachedJavadocAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,12 +90,14 @@ public class OpenAttachedJavadocAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(canEnableFor(selection));
 	}
@@ -115,6 +117,7 @@ public class OpenAttachedJavadocAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		IJavaElement element= SelectionConverter.getInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), element))
@@ -141,6 +144,7 @@ public class OpenAttachedJavadocAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (!canEnableFor(selection))
 			return;
@@ -239,6 +243,7 @@ public class OpenAttachedJavadocAction extends SelectionDispatchAction {
 	 * 
 	 * @return the site's shell
 	 */
+	@Override
 	public Shell getShell() {
 		if (fShell != null)
 			return fShell;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenEditorActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenEditorActionGroup.java
index 1bb8f0c..1a1505a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenEditorActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenEditorActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,6 +122,7 @@ public class OpenEditorActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBar) {
 		super.fillActionBars(actionBar);
 		setGlobalActionHandlers(actionBar);
@@ -130,6 +131,7 @@ public class OpenEditorActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		appendToGroup(menu, fOpen);
@@ -141,6 +143,7 @@ public class OpenEditorActionGroup extends ActionGroup {
 	/*
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		fSelectionProvider.removeSelectionChangedListener(fOpen);
 		super.dispose();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenExternalJavadocAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenExternalJavadocAction.java
index b3f859c..5e6b984 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenExternalJavadocAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenExternalJavadocAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class OpenExternalJavadocAction extends OpenAttachedJavadocAction {
 	 * No Javadoc since the method isn't meant to be public but is
 	 * since the beginning
 	 */
+	@Override
 	public void run(IJavaElement element) {
 		super.run(element);
 	}
@@ -91,6 +92,7 @@ public class OpenExternalJavadocAction extends OpenAttachedJavadocAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.OpenAttachedJavadocAction#forceExternalBrowser()
 	 */
+	@Override
 	boolean forceExternalBrowser() {
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenImplementationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenImplementationAction.java
index 4211eba..f3df17a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenImplementationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenImplementationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,14 +23,9 @@ import org.eclipse.ui.IWorkbenchSite;
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.JavaModelException;
-
-import org.eclipse.jdt.internal.corext.util.JdtFlags;
 
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
-import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.actions.ActionMessages;
 import org.eclipse.jdt.internal.ui.actions.ActionUtil;
 import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
@@ -86,12 +81,14 @@ public class OpenImplementationAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(false);
 	}
@@ -99,6 +96,7 @@ public class OpenImplementationAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isProcessable(fEditor))
 			return;
@@ -114,7 +112,7 @@ public class OpenImplementationAction extends SelectionDispatchAction {
 			return;
 		}
 
-		if (element == null || !((element instanceof IMethod) && canBeOverriddenMethod((IMethod)element))) {
+		if (element == null || !(element instanceof IMethod)) {
 			MessageDialog.openInformation(getShell(), getDialogTitle(), ActionMessages.OpenImplementationAction_not_applicable);
 			return;
 		}
@@ -137,20 +135,4 @@ public class OpenImplementationAction extends SelectionDispatchAction {
 	private String getDialogTitle() {
 		return ActionMessages.OpenImplementationAction_error_title;
 	}
-
-	/**
-	 * Checks whether a method can be overridden.
-	 * 
-	 * @param method the method
-	 * @return <code>true</code> if the method can be overridden, <code>false</code> otherwise
-	 */
-	private boolean canBeOverriddenMethod(IMethod method) {
-		try {
-			return !(JdtFlags.isPrivate(method) || JdtFlags.isFinal(method) || JdtFlags.isStatic(method) ||
-					method.isConstructor() || JdtFlags.isFinal((IMember)method.getParent()));
-		} catch (JavaModelException e) {
-			JavaPlugin.log(e);
-			return false;
-		}
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaBrowsingPerspectiveAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaBrowsingPerspectiveAction.java
index 73163d2..8e501c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaBrowsingPerspectiveAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaBrowsingPerspectiveAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class OpenJavaBrowsingPerspectiveAction extends Action {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.OPEN_JAVA_BROWSING_PERSPECTIVE_ACTION);
 	}
 
+	@Override
 	public void run() {
 		IWorkbench workbench= JavaPlugin.getDefault().getWorkbench();
 		IWorkbenchWindow window= workbench.getActiveWorkbenchWindow();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaPerspectiveAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaPerspectiveAction.java
index c9a12e3..78de4fc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaPerspectiveAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenJavaPerspectiveAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class OpenJavaPerspectiveAction extends Action {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.OPEN_JAVA_PERSPECTIVE_ACTION);
 	}
 
+	@Override
 	public void run() {
 		IWorkbench workbench= JavaPlugin.getDefault().getWorkbench();
 		IWorkbenchWindow window= workbench.getActiveWorkbenchWindow();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewAnnotationWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewAnnotationWizardAction.java
index a3d1a41..d928101 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewAnnotationWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewAnnotationWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,6 +84,7 @@ public class OpenNewAnnotationWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#createWizard()
 	 */
+	@Override
 	protected final INewWizard createWizard() throws CoreException {
 		return new NewAnnotationCreationWizard(fPage, fOpenEditorOnFinish);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewClassWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewClassWizardAction.java
index 80e1e37..37723dd 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewClassWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewClassWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ public class OpenNewClassWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#createWizard()
 	 */
+	@Override
 	protected final INewWizard createWizard() throws CoreException {
 		return new NewClassCreationWizard(fPage, fOpenEditorOnFinish);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewEnumWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewEnumWizardAction.java
index 0b6a61e..03888db 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewEnumWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewEnumWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class OpenNewEnumWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#createWizard()
 	 */
+	@Override
 	protected final INewWizard createWizard() throws CoreException {
 		return new NewEnumCreationWizard(fPage, fOpenEditorOnFinish);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewInterfaceWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewInterfaceWizardAction.java
index 32d4fd6..f6f1c02 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewInterfaceWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewInterfaceWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,6 +82,7 @@ public class OpenNewInterfaceWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#createWizard()
 	 */
+	@Override
 	protected final INewWizard createWizard() throws CoreException {
 		return new NewInterfaceCreationWizard(fPage, fOpenEditorOnFinish);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewJavaProjectWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewJavaProjectWizardAction.java
index c2da2b1..aa3dfcc 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewJavaProjectWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewJavaProjectWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,7 @@ public class OpenNewJavaProjectWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#createWizard()
 	 */
+	@Override
 	protected final INewWizard createWizard() throws CoreException {
 		return new JavaProjectWizard(fPageOne, fPageTwo);
 	}
@@ -86,6 +87,7 @@ public class OpenNewJavaProjectWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#doCreateProjectFirstOnEmptyWorkspace(Shell)
 	 */
+	@Override
 	protected boolean doCreateProjectFirstOnEmptyWorkspace(Shell shell) {
 		return true; // can work on an empty workspace
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewPackageWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewPackageWizardAction.java
index 592530e..eba2eb5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewPackageWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewPackageWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -67,6 +67,7 @@ public class OpenNewPackageWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#createWizard()
 	 */
+	@Override
 	protected final INewWizard createWizard() throws CoreException {
 		return new NewPackageCreationWizard(fPage);
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewSourceFolderWizardAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewSourceFolderWizardAction.java
index 396a3e0..0d9ae0b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewSourceFolderWizardAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenNewSourceFolderWizardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public class OpenNewSourceFolderWizardAction extends AbstractOpenWizardAction {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.AbstractOpenWizardAction#createWizard()
 	 */
+	@Override
 	protected final INewWizard createWizard() throws CoreException {
 		return new NewSourceFolderCreationWizard();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenProjectAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenProjectAction.java
index 57d3db0..3b95da6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenProjectAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,8 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.OpenResourceAction;
 import org.eclipse.ui.dialogs.ListSelectionDialog;
 
+import org.eclipse.jdt.core.IJavaProject;
+
 import org.eclipse.jdt.ui.JavaElementLabelProvider;
 
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
@@ -106,17 +108,19 @@ public class OpenProjectAction extends SelectionDispatchAction implements IResou
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.ISelection)
 	 */
+	@Override
 	public void selectionChanged(ISelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.ISelection)
 	 */
+	@Override
 	public void run(ISelection selection) {
 		internalRun(null);
 	}
 
-	private int evaluateSelection(IStructuredSelection selection, List allClosedProjects) {
+	private int evaluateSelection(IStructuredSelection selection, List<Object> allClosedProjects) {
 		Object[] array= selection.toArray();
 		int selectionStatus = 0;
 		for (int i= 0; i < array.length; i++) {
@@ -145,6 +149,11 @@ public class OpenProjectAction extends SelectionDispatchAction implements IResou
 	}
 
 	private static boolean isClosedProject(Object element) {
+		if (element instanceof IJavaProject) {
+			IProject project= ((IJavaProject) element).getProject();
+			return !project.isOpen();
+		}
+
 		// assume all closed project are rendered as IProject
 		return element instanceof IProject && !((IProject) element).isOpen();
 	}
@@ -155,8 +164,9 @@ public class OpenProjectAction extends SelectionDispatchAction implements IResou
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
-		ArrayList allClosedProjects= new ArrayList();
+		List<Object> allClosedProjects= new ArrayList<Object>();
 		int selectionStatus= evaluateSelection(selection, allClosedProjects);
 		if ((selectionStatus & CLOSED_PROJECTS_SELECTED) != 0) { // selection contains closed projects
 			fWorkbenchAction.selectionChanged(new StructuredSelection(allClosedProjects));
@@ -166,7 +176,7 @@ public class OpenProjectAction extends SelectionDispatchAction implements IResou
 		}
 	}
 
-	private void internalRun(List initialSelection) {
+	private void internalRun(List<?> initialSelection) {
 		ListSelectionDialog dialog= new ListSelectionDialog(getShell(), getClosedProjectsInWorkspace(), new ArrayContentProvider(), new JavaElementLabelProvider(), ActionMessages.OpenProjectAction_dialog_message);
 		dialog.setTitle(ActionMessages.OpenProjectAction_dialog_title);
 		if (initialSelection != null && !initialSelection.isEmpty()) {
@@ -210,7 +220,7 @@ public class OpenProjectAction extends SelectionDispatchAction implements IResou
 
 	private Object[] getClosedProjectsInWorkspace() {
 		IProject[] projects= ResourcesPlugin.getWorkspace().getRoot().getProjects();
-		List result= new ArrayList(5);
+		List<IProject> result= new ArrayList<IProject>(5);
 		for (int i = 0; i < projects.length; i++) {
 			IProject project= projects[i];
 			if (!project.isOpen())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenSuperImplementationAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenSuperImplementationAction.java
index 2ff2ce2..a060056 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenSuperImplementationAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenSuperImplementationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,12 +110,14 @@ public class OpenSuperImplementationAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		IMethod method= getMethod(selection);
 
@@ -125,6 +127,7 @@ public class OpenSuperImplementationAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isProcessable(fEditor))
 			return;
@@ -139,6 +142,7 @@ public class OpenSuperImplementationAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		run(getMethod(selection));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenTypeHierarchyAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenTypeHierarchyAction.java
index 3cfc86f..049572d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenTypeHierarchyAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenTypeHierarchyAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.jdt.ui.actions;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.IStatus;
@@ -32,6 +33,7 @@ import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IImportDeclaration;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
@@ -117,50 +119,77 @@ public class OpenTypeHierarchyAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(isEnabled(selection));
 	}
 
 	private boolean isEnabled(IStructuredSelection selection) {
-		if (selection.size() != 1)
+		Object[] elements= selection.toArray();
+		if (elements.length == 0)
 			return false;
-		Object input= selection.getFirstElement();
-
-
-		if (input instanceof LogicalPackage)
-			return true;
-
-		if (!(input instanceof IJavaElement))
-			return false;
-		switch (((IJavaElement)input).getElementType()) {
-			case IJavaElement.INITIALIZER:
-			case IJavaElement.METHOD:
-			case IJavaElement.FIELD:
-			case IJavaElement.TYPE:
-				return true;
-			case IJavaElement.PACKAGE_FRAGMENT_ROOT:
-			case IJavaElement.JAVA_PROJECT:
-			case IJavaElement.PACKAGE_FRAGMENT:
-			case IJavaElement.PACKAGE_DECLARATION:
-			case IJavaElement.IMPORT_DECLARATION:
-			case IJavaElement.CLASS_FILE:
-			case IJavaElement.COMPILATION_UNIT:
+		
+		if (elements.length == 1) {
+			Object input= elements[0];
+			if (input instanceof LogicalPackage)
 				return true;
-			case IJavaElement.LOCAL_VARIABLE:
-			default:
+			if (!(input instanceof IJavaElement))
 				return false;
+
+			switch (((IJavaElement)input).getElementType()) {
+				case IJavaElement.INITIALIZER:
+				case IJavaElement.METHOD:
+				case IJavaElement.FIELD:
+				case IJavaElement.TYPE:
+				case IJavaElement.IMPORT_DECLARATION:
+				case IJavaElement.CLASS_FILE:
+				case IJavaElement.COMPILATION_UNIT:
+					return true;
+				case IJavaElement.LOCAL_VARIABLE:
+				case IJavaElement.TYPE_PARAMETER:
+				case IJavaElement.ANNOTATION:
+					return false;
+				default:
+					// continue below
+			}
+		}
+		
+		// strategy: allow non-IJavaElements (e.g. an IResource), but stop for invalid IJavaElements
+		boolean hasValidElement= false;
+		for (int j= 0; j < elements.length; j++) {
+			Object input= elements[j];
+			if (input instanceof LogicalPackage) {
+				hasValidElement= true;
+				continue;
+			}
+			if (!(input instanceof IJavaElement))
+				continue;
+			
+			switch (((IJavaElement)input).getElementType()) {
+				case IJavaElement.PACKAGE_FRAGMENT_ROOT:
+				case IJavaElement.JAVA_PROJECT:
+				case IJavaElement.PACKAGE_FRAGMENT:
+				case IJavaElement.PACKAGE_DECLARATION:
+					hasValidElement= true;
+					continue;
+				default:
+					return false;
+			}
 		}
+		return hasValidElement;
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		IJavaElement input= SelectionConverter.getInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
@@ -170,13 +199,13 @@ public class OpenTypeHierarchyAction extends SelectionDispatchAction {
 			IJavaElement[] elements= SelectionConverter.codeResolveOrInputForked(fEditor);
 			if (elements == null)
 				return;
-			List candidates= new ArrayList(elements.length);
+			List<IJavaElement> candidates= new ArrayList<IJavaElement>(elements.length);
 			for (int i= 0; i < elements.length; i++) {
 				IJavaElement[] resolvedElements= OpenTypeHierarchyUtil.getCandidates(elements[i]);
 				if (resolvedElements != null)
 					candidates.addAll(Arrays.asList(resolvedElements));
 			}
-			run((IJavaElement[])candidates.toArray(new IJavaElement[candidates.size()]));
+			run(candidates.toArray(new IJavaElement[candidates.size()]));
 		} catch (InvocationTargetException e) {
 			ExceptionHandler.handle(e, getShell(), getDialogTitle(), ActionMessages.SelectionConverter_codeResolve_failed);
 		} catch (InterruptedException e) {
@@ -187,31 +216,51 @@ public class OpenTypeHierarchyAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
-		if (selection.size() != 1)
-			return;
-		Object input= selection.getFirstElement();
+		List<IJavaElement> validElements= new ArrayList<IJavaElement>();
+		Object[] selectedElements= selection.toArray();
 
-		if (input instanceof LogicalPackage) {
-			IPackageFragment[] fragments= ((LogicalPackage)input).getFragments();
-			if (fragments.length == 0)
-				return;
-			input= fragments[0];
+		for (int i= 0; i < selectedElements.length; i++) {
+			Object input= selectedElements[i];
+			if (input instanceof LogicalPackage) {
+				IPackageFragment[] fragments= ((LogicalPackage)input).getFragments();
+				if (fragments.length == 0)
+					continue;
+				for (int j= 0; j < fragments.length; j++) {
+					validElements.add(fragments[j]);
+				}
+			} else if (input instanceof IPackageFragment) {
+				IPackageFragment fragment= (IPackageFragment)input;
+				IPackageFragmentRoot[] roots;
+				try {
+					roots= fragment.getJavaProject().getPackageFragmentRoots();
+				} catch (JavaModelException e) {
+					JavaPlugin.log(e);
+					continue;
+				}
+				String name= fragment.getElementName();
+				for (int j= 0; j < roots.length; j++) {
+					IPackageFragment pack= roots[j].getPackageFragment(name);
+					if (pack.exists())
+						validElements.add(pack);
+				}
+			} else {
+				if (!(input instanceof IJavaElement) || !ActionUtil.isProcessable(getShell(), (IJavaElement)input))
+					continue;
+				IJavaElement element= (IJavaElement)input;
+				validElements.add(element);
+			}
 		}
-
-		if (!(input instanceof IJavaElement)) {
-			IStatus status= createStatus(ActionMessages.OpenTypeHierarchyAction_messages_no_java_element);
+		if (validElements.size() == 0) {
+			IStatus status= createStatus(ActionMessages.OpenTypeHierarchyAction_messages_no_java_elements);
 			ErrorDialog.openError(getShell(), getDialogTitle(), ActionMessages.OpenTypeHierarchyAction_messages_title, status);
 			return;
 		}
-		IJavaElement element= (IJavaElement) input;
-		if (!ActionUtil.isProcessable(getShell(), element))
-			return;
-
-		List result= new ArrayList(1);
-		IStatus status= compileCandidates(result, element);
+		List<IJavaElement> result= new ArrayList<IJavaElement>();
+		IStatus status= compileCandidates(result, validElements);
 		if (status.isOK()) {
-			run((IJavaElement[]) result.toArray(new IJavaElement[result.size()]));
+			run(result.toArray(new IJavaElement[result.size()]));
 		} else {
 			ErrorDialog.openError(getShell(), getDialogTitle(), ActionMessages.OpenTypeHierarchyAction_messages_title, status);
 		}
@@ -233,55 +282,61 @@ public class OpenTypeHierarchyAction extends SelectionDispatchAction {
 		return ActionMessages.OpenTypeHierarchyAction_dialog_title;
 	}
 
-	private static IStatus compileCandidates(List result, IJavaElement elem) {
+	private static IStatus compileCandidates(List<IJavaElement> result, List<IJavaElement> elements) {
 		IStatus ok= Status.OK_STATUS;
-		try {
-			switch (elem.getElementType()) {
-				case IJavaElement.INITIALIZER:
-				case IJavaElement.METHOD:
-				case IJavaElement.FIELD:
-				case IJavaElement.TYPE:
-				case IJavaElement.PACKAGE_FRAGMENT_ROOT:
-				case IJavaElement.JAVA_PROJECT:
-					result.add(elem);
-					return ok;
-				case IJavaElement.PACKAGE_FRAGMENT:
-					if (((IPackageFragment)elem).containsJavaResources()) {
+		boolean onlyContainers= true;
+		for (Iterator<IJavaElement> iter= elements.iterator(); iter.hasNext();) {
+			IJavaElement elem= iter.next();
+			try {
+				switch (elem.getElementType()) {
+					case IJavaElement.INITIALIZER:
+					case IJavaElement.METHOD:
+					case IJavaElement.FIELD:
+					case IJavaElement.TYPE:
+						onlyContainers= false;
+						//$FALL-THROUGH$
+					case IJavaElement.PACKAGE_FRAGMENT_ROOT:
+					case IJavaElement.JAVA_PROJECT:
 						result.add(elem);
-						return ok;
-					}
-					return createStatus(ActionMessages.OpenTypeHierarchyAction_messages_no_java_resources);
-				case IJavaElement.PACKAGE_DECLARATION:
-					result.add(elem.getAncestor(IJavaElement.PACKAGE_FRAGMENT));
-					return ok;
-				case IJavaElement.IMPORT_DECLARATION:
-					IImportDeclaration decl= (IImportDeclaration) elem;
-					if (decl.isOnDemand()) {
-						elem= JavaModelUtil.findTypeContainer(elem.getJavaProject(), Signature.getQualifier(elem.getElementName()));
-					} else {
-						elem= elem.getJavaProject().findType(elem.getElementName());
-					}
-					if (elem != null) {
-						result.add(elem);
-						return ok;
-					}
-					return createStatus(ActionMessages.OpenTypeHierarchyAction_messages_unknown_import_decl);
-				case IJavaElement.CLASS_FILE:
-					result.add(((IClassFile)elem).getType());
-					return ok;
-				case IJavaElement.COMPILATION_UNIT:
-					ICompilationUnit cu= (ICompilationUnit)elem;
-					IType[] types= cu.getTypes();
-					if (types.length > 0) {
-						result.addAll(Arrays.asList(types));
-						return ok;
-					}
-					return createStatus(ActionMessages.OpenTypeHierarchyAction_messages_no_types);
+						break;
+					case IJavaElement.PACKAGE_FRAGMENT:
+						if (((IPackageFragment)elem).containsJavaResources())
+							result.add(elem);
+						break;
+					case IJavaElement.PACKAGE_DECLARATION:
+						result.add(elem.getAncestor(IJavaElement.PACKAGE_FRAGMENT));
+						break;
+					case IJavaElement.IMPORT_DECLARATION:
+						IImportDeclaration decl= (IImportDeclaration)elem;
+						if (decl.isOnDemand())
+							elem= JavaModelUtil.findTypeContainer(elem.getJavaProject(), Signature.getQualifier(elem.getElementName()));
+						else
+							elem= elem.getJavaProject().findType(elem.getElementName());
+						if (elem != null) {
+							onlyContainers= false;
+							result.add(elem);
+						}
+						break;
+					case IJavaElement.CLASS_FILE:
+						onlyContainers= false;
+						result.add(((IClassFile)elem).getType());
+						break;
+					case IJavaElement.COMPILATION_UNIT:
+						ICompilationUnit cu= (ICompilationUnit)elem;
+						IType[] types= cu.getTypes();
+						if (types.length > 0) {
+							onlyContainers= false;
+							result.addAll(Arrays.asList(types));
+						}
+				}
+			} catch (JavaModelException e) {
+				return e.getStatus();
 			}
-		} catch (JavaModelException e) {
-			return e.getStatus();
 		}
-		return createStatus(ActionMessages.OpenTypeHierarchyAction_messages_no_valid_java_element);
+		int size= result.size();
+		if (size == 0 || (size > 1 && !onlyContainers))
+			return createStatus(ActionMessages.OpenTypeHierarchyAction_messages_no_valid_java_element);
+		return ok;
 	}
 
 	private static IStatus createStatus(String message) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenViewActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenViewActionGroup.java
index 8753efc..60d59e5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenViewActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OpenViewActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -250,6 +250,7 @@ public class OpenViewActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBar) {
 		super.fillActionBars(actionBar);
 		setGlobalActionHandlers(actionBar);
@@ -258,6 +259,7 @@ public class OpenViewActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		if (!fIsTypeHiararchyViewerOwner)
@@ -293,6 +295,7 @@ public class OpenViewActionGroup extends ActionGroup {
 	/*
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		fSelectionProvider.removeSelectionChangedListener(fOpenImplementation);
 		fSelectionProvider.removeSelectionChangedListener(fOpenSuperImplementation);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java
index 76002b6..e5a6943 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -113,10 +113,10 @@ public class OrganizeImportsAction extends SelectionDispatchAction {
 		}
 	}
 
-	private static final class OrganizeImportComparator implements Comparator {
+	private static final class OrganizeImportComparator implements Comparator<String> {
 
-		public int compare(Object o1, Object o2) {
-			if (((String)o1).equals(o2))
+		public int compare(String o1, String o2) {
+			if (o1.equals(o2))
 				return 0;
 
 			History history= QualifiedTypeNameHistory.getDefault();
@@ -179,6 +179,7 @@ public class OrganizeImportsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		fCleanUpDelegate.selectionChanged(selection);
 		setEnabled(fCleanUpDelegate.isEnabled());
@@ -187,6 +188,7 @@ public class OrganizeImportsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		fCleanUpDelegate.selectionChanged(selection);
 		setEnabled(fCleanUpDelegate.isEnabled());
@@ -195,6 +197,7 @@ public class OrganizeImportsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		ICompilationUnit cu= getCompilationUnit(fEditor);
 		if (cu != null) {
@@ -213,6 +216,7 @@ public class OrganizeImportsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		ICompilationUnit[] cus= fCleanUpDelegate.getCompilationUnits(selection);
 		if (cus.length == 0) {
@@ -338,6 +342,7 @@ public class OrganizeImportsAction extends SelectionDispatchAction {
 		ILabelProvider labelProvider= new TypeNameMatchLabelProvider(TypeNameMatchLabelProvider.SHOW_FULLYQUALIFIED);
 
 		MultiElementListSelectionDialog dialog= new MultiElementListSelectionDialog(getShell(), labelProvider) {
+			@Override
 			protected void handleSelectionChanged() {
 				super.handleSelectionChanged();
 				// show choices in editor
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java
index 0839ef5..9cce445 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -148,6 +148,7 @@ public class OverrideMethodsAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			final IType type= getSelectedType(selection);
@@ -169,6 +170,7 @@ public class OverrideMethodsAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			final IType type= SelectionConverter.getTypeAtOffset(fEditor);
@@ -216,14 +218,14 @@ public class OverrideMethodsAction extends SelectionDispatchAction {
 			return;
 		}
 
-		ArrayList methods= new ArrayList();
+		ArrayList<IMethodBinding> methods= new ArrayList<IMethodBinding>();
 		for (int i= 0; i < selected.length; i++) {
 			Object elem= selected[i];
 			if (elem instanceof IMethodBinding) {
-				methods.add(elem);
+				methods.add((IMethodBinding) elem);
 			}
 		}
-		IMethodBinding[] methodToOverride= (IMethodBinding[]) methods.toArray(new IMethodBinding[methods.size()]);
+		IMethodBinding[] methodToOverride= methods.toArray(new IMethodBinding[methods.size()]);
 
 
 		final IEditorPart editor= JavaUI.openInEditor(type.getCompilationUnit());
@@ -277,6 +279,7 @@ public class OverrideMethodsAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(canEnable(selection));
@@ -290,6 +293,7 @@ public class OverrideMethodsAction extends SelectionDispatchAction {
 	/*
 	 * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.text.ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		// Do nothing
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ProjectActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ProjectActionGroup.java
index b3f1e86..d041ee6 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ProjectActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ProjectActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -125,7 +125,7 @@ public class ProjectActionGroup extends ActionGroup {
 
 	protected void performSelectionChanged(IStructuredSelection structuredSelection) {
 		Object[] array= structuredSelection.toArray();
-		ArrayList openProjects= new ArrayList();
+		ArrayList<IProject> openProjects= new ArrayList<IProject>();
 		int selectionStatus= evaluateSelection(array, openProjects);
 		StructuredSelection sel= new StructuredSelection(openProjects);
 
@@ -139,7 +139,7 @@ public class ProjectActionGroup extends ActionGroup {
 	private int CLOSED_PROJECTS_SELECTED= 1;
 	private int NON_PROJECT_SELECTED= 2;
 
-	private int evaluateSelection(Object[] array, List allOpenProjects) {
+	private int evaluateSelection(Object[] array, List<IProject> allOpenProjects) {
 		int status= 0;
 		for (int i= 0; i < array.length; i++) {
 			Object curr= array[i];
@@ -177,6 +177,7 @@ public class ProjectActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		actionBars.setGlobalActionHandler(IDEActionFactory.CLOSE_PROJECT.getId(), fCloseAction);
@@ -187,6 +188,7 @@ public class ProjectActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		if (fOpenAction.isEnabled() && fEnableOpenInContextMenu)
@@ -212,7 +214,7 @@ public class ProjectActionGroup extends ActionGroup {
 		if (selection.isEmpty())
 			return false;
 
-		Iterator iter= selection.iterator();
+		Iterator<?> iter= selection.iterator();
 		while (iter.hasNext()) {
 			Object obj= iter.next();
 			if (obj instanceof IAdaptable) {
@@ -226,6 +228,7 @@ public class ProjectActionGroup extends ActionGroup {
 	/*
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		fSelectionProvider.removeSelectionChangedListener(fSelectionChangedListener);
 		fSelectionProvider= null;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PullUpAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PullUpAction.java
index 7daa1eb..680c9e2 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PullUpAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PullUpAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,13 +70,13 @@ public class PullUpAction extends SelectionDispatchAction {
 				JavaPlugin.log(exception);
 			}
 		}
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			if (!(iter.next() instanceof IMember))
 				return null;
 		}
-		Set memberSet= new HashSet();
+		Set<Object> memberSet= new HashSet<Object>();
 		memberSet.addAll(Arrays.asList(selection.toArray()));
-		return (IMember[]) memberSet.toArray(new IMember[memberSet.size()]);
+		return memberSet.toArray(new IMember[memberSet.size()]);
 	}
 
 	private JavaEditor fEditor;
@@ -120,6 +120,7 @@ public class PullUpAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IMember[] members= getSelectedMembers(selection);
@@ -133,6 +134,7 @@ public class PullUpAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			if (!ActionUtil.isEditable(fEditor))
@@ -152,6 +154,7 @@ public class PullUpAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isPullUpAvailable(selection));
@@ -166,6 +169,7 @@ public class PullUpAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -176,6 +180,7 @@ public class PullUpAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isPullUpAvailable(selection));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PushDownAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PushDownAction.java
index 236f683..de31926 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PushDownAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/PushDownAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,13 +69,13 @@ public class PushDownAction extends SelectionDispatchAction {
 				JavaPlugin.log(exception);
 			}
 		}
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			if (!(iter.next() instanceof IMember))
 				return null;
 		}
-		Set memberSet= new HashSet();
+		Set<Object> memberSet= new HashSet<Object>();
 		memberSet.addAll(Arrays.asList(selection.toArray()));
-		return (IMember[]) memberSet.toArray(new IMember[memberSet.size()]);
+		return memberSet.toArray(new IMember[memberSet.size()]);
 	}
 
 	private JavaEditor fEditor;
@@ -118,6 +118,7 @@ public class PushDownAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			IMember[] members= getSelectedMembers(selection);
@@ -131,6 +132,7 @@ public class PushDownAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			if (!ActionUtil.isEditable(fEditor))
@@ -150,6 +152,7 @@ public class PushDownAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isPushDownAvailable(selection));
@@ -164,6 +167,7 @@ public class PushDownAction extends SelectionDispatchAction {
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -174,6 +178,7 @@ public class PushDownAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isPushDownAvailable(selection));
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReadReferencesSearchGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReadReferencesSearchGroup.java
index 6e7fcae..aec9a87 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReadReferencesSearchGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReadReferencesSearchGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -165,6 +165,7 @@ public class ReadReferencesSearchGroup extends ActionGroup  {
 	/* (non-Javadoc)
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager manager) {
 		MenuManager javaSearchMM= new MenuManager(MENU_TEXT, IContextMenuConstants.GROUP_SEARCH);
 		addAction(fFindReadReferencesAction, javaSearchMM);
@@ -173,9 +174,9 @@ public class ReadReferencesSearchGroup extends ActionGroup  {
 
 		javaSearchMM.add(new Separator());
 
-		Iterator iter= SearchUtil.getLRUWorkingSets().sortedIterator();
+		Iterator<IWorkingSet[]> iter= SearchUtil.getLRUWorkingSets().sortedIterator();
 		while (iter.hasNext()) {
-			addWorkingSetAction((IWorkingSet[]) iter.next(), javaSearchMM);
+			addWorkingSetAction(iter.next(), javaSearchMM);
 		}
 		addAction(fFindReadReferencesInWorkingSetAction, javaSearchMM);
 
@@ -186,6 +187,7 @@ public class ReadReferencesSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		Assert.isNotNull(actionBars);
 		super.fillActionBars(actionBars);
@@ -196,6 +198,7 @@ public class ReadReferencesSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void dispose() {
 		ISelectionProvider provider= fSite.getSelectionProvider();
 		if (provider != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefactorActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefactorActionGroup.java
index cd2b9a3..bb0fd6d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefactorActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefactorActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -177,7 +177,7 @@ public class RefactorActionGroup extends ActionGroup {
 
 	private UndoRedoActionGroup fUndoRedoActionGroup;
 
-	private final List fActions= new ArrayList();
+	private final List<SelectionDispatchAction> fActions= new ArrayList<SelectionDispatchAction>();
 
 	private static final String QUICK_MENU_ID= "org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu"; //$NON-NLS-1$
 
@@ -430,6 +430,7 @@ public class RefactorActionGroup extends ActionGroup {
 		fHandlerService= (IHandlerService)fSite.getService(IHandlerService.class);
 		if (fHandlerService != null) {
 			IHandler handler= new JDTQuickMenuCreator(fEditor) {
+				@Override
 				protected void fillMenu(IMenuManager menu) {
 					fillQuickMenu(menu);
 				}
@@ -465,6 +466,7 @@ public class RefactorActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
 		if (!fBinary) {
@@ -511,6 +513,7 @@ public class RefactorActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		addRefactorSubmenu(menu);
@@ -519,6 +522,7 @@ public class RefactorActionGroup extends ActionGroup {
 	/*
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		if (!fBinary) {
 			disposeAction(fSelfEncapsulateField, fSelectionProvider);
@@ -576,8 +580,8 @@ public class RefactorActionGroup extends ActionGroup {
 			}
 		} else {
 			ISelection selection= fSelectionProvider.getSelection();
-			for (Iterator iter= fActions.iterator(); iter.hasNext(); ) {
-				((SelectionDispatchAction)iter.next()).update(selection);
+			for (Iterator<SelectionDispatchAction> iter= fActions.iterator(); iter.hasNext(); ) {
+				iter.next().update(selection);
 			}
 			if (fillRefactorMenu(refactorSubmenu) > 0)
 				menu.appendToGroup(fGroupName, refactorSubmenu);
@@ -636,6 +640,7 @@ public class RefactorActionGroup extends ActionGroup {
 		// addRefactorSubmenu.
 		Menu menu= ((MenuManager)refactorSubmenu).getMenu();
 		menu.addMenuListener(new MenuAdapter() {
+			@Override
 			public void menuHidden(MenuEvent e) {
 				refactorMenuHidden();
 			}
@@ -643,8 +648,8 @@ public class RefactorActionGroup extends ActionGroup {
 		ITextSelection textSelection= (ITextSelection)fEditor.getSelectionProvider().getSelection();
 		JavaTextSelection javaSelection= new JavaTextSelection(getEditorInput(), getDocument(), textSelection.getOffset(), textSelection.getLength());
 
-		for (Iterator iter= fActions.iterator(); iter.hasNext(); ) {
-			SelectionDispatchAction action= (SelectionDispatchAction)iter.next();
+		for (Iterator<SelectionDispatchAction> iter= fActions.iterator(); iter.hasNext(); ) {
+			SelectionDispatchAction action= iter.next();
 			action.update(javaSelection);
 		}
 		refactorSubmenu.removeAll();
@@ -654,8 +659,8 @@ public class RefactorActionGroup extends ActionGroup {
 
 	private void refactorMenuHidden() {
 		ITextSelection textSelection= (ITextSelection)fEditor.getSelectionProvider().getSelection();
-		for (Iterator iter= fActions.iterator(); iter.hasNext(); ) {
-			SelectionDispatchAction action= (SelectionDispatchAction)iter.next();
+		for (Iterator<SelectionDispatchAction> iter= fActions.iterator(); iter.hasNext(); ) {
+			SelectionDispatchAction action= iter.next();
 			action.update(textSelection);
 		}
 	}
@@ -681,18 +686,18 @@ public class RefactorActionGroup extends ActionGroup {
 			ITextSelection textSelection= (ITextSelection)fEditor.getSelectionProvider().getSelection();
 			JavaTextSelection javaSelection= new JavaTextSelection(element, getDocument(), textSelection.getOffset(), textSelection.getLength());
 
-			for (Iterator iter= fActions.iterator(); iter.hasNext(); ) {
-				((SelectionDispatchAction)iter.next()).update(javaSelection);
+			for (Iterator<SelectionDispatchAction> iter= fActions.iterator(); iter.hasNext(); ) {
+				iter.next().update(javaSelection);
 			}
 			fillRefactorMenu(menu);
-			for (Iterator iter= fActions.iterator(); iter.hasNext(); ) {
-				((SelectionDispatchAction)iter.next()).update(textSelection);
+			for (Iterator<SelectionDispatchAction> iter= fActions.iterator(); iter.hasNext(); ) {
+				iter.next().update(textSelection);
 			}
 
 		} else {
 			ISelection selection= fSelectionProvider.getSelection();
-			for (Iterator iter= fActions.iterator(); iter.hasNext(); ) {
-				((SelectionDispatchAction)iter.next()).update(selection);
+			for (Iterator<SelectionDispatchAction> iter= fActions.iterator(); iter.hasNext(); ) {
+				iter.next().update(selection);
 			}
 			fillRefactorMenu(menu);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReferencesSearchGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReferencesSearchGroup.java
index bbbeb25..7830483 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReferencesSearchGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReferencesSearchGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -158,6 +158,7 @@ public class ReferencesSearchGroup extends ActionGroup  {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		Assert.isNotNull(actionBars);
 		super.fillActionBars(actionBars);
@@ -186,6 +187,7 @@ public class ReferencesSearchGroup extends ActionGroup  {
 	/* (non-Javadoc)
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager manager) {
 		MenuManager javaSearchMM= new MenuManager(getName(), IContextMenuConstants.GROUP_SEARCH);
 		addAction(fFindReferencesAction, javaSearchMM);
@@ -194,9 +196,9 @@ public class ReferencesSearchGroup extends ActionGroup  {
 
 		javaSearchMM.add(new Separator());
 
-		Iterator iter= SearchUtil.getLRUWorkingSets().sortedIterator();
+		Iterator<IWorkingSet[]> iter= SearchUtil.getLRUWorkingSets().sortedIterator();
 		while (iter.hasNext()) {
-			addWorkingSetAction((IWorkingSet[]) iter.next(), javaSearchMM);
+			addWorkingSetAction(iter.next(), javaSearchMM);
 		}
 		addAction(fFindReferencesInWorkingSetAction, javaSearchMM);
 
@@ -207,6 +209,7 @@ public class ReferencesSearchGroup extends ActionGroup  {
 	/*
 	 * Overrides method declared in ActionGroup
 	 */
+	@Override
 	public void dispose() {
 		ISelectionProvider provider= fSite.getSelectionProvider();
 		if (provider != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefreshAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefreshAction.java
index 2b83d95..66adc5e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefreshAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RefreshAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,25 +79,26 @@ public class RefreshAction extends SelectionDispatchAction {
 			super(provider);
 		}
 
-		protected List getSelectedResources() {
-			List selectedResources= super.getSelectedResources();
+		@Override
+		protected List<IResource> getSelectedResources() {
+			List<IResource> selectedResources= super.getSelectedResources();
 			if (!getStructuredSelection().isEmpty() && selectedResources.size() == 1 && selectedResources.get(0) instanceof IWorkspaceRoot) {
-				selectedResources= Collections.EMPTY_LIST; // Refresh action refreshes root when it can't find any resources in selection
+				selectedResources= Collections.emptyList(); // Refresh action refreshes root when it can't find any resources in selection
 			}
 
-			ArrayList allResources= new ArrayList(selectedResources);
+			ArrayList<IResource> allResources= new ArrayList<IResource>(selectedResources);
 			addWorkingSetResources(allResources);
 			return allResources;
 		}
 
-		private void addWorkingSetResources(List selectedResources) {
+		private void addWorkingSetResources(List<IResource> selectedResources) {
 			Object[] elements= getStructuredSelection().toArray();
 			for (int i= 0; i < elements.length; i++) {
 				Object curr= elements[i];
 				if (curr instanceof IWorkingSet) {
 					IAdaptable[] members= ((IWorkingSet) curr).getElements();
 					for (int k= 0; k < members.length; k++) {
-						Object adapted= members[k].getAdapter(IResource.class);
+						IResource adapted= (IResource) members[k].getAdapter(IResource.class);
 						if (adapted != null) {
 							selectedResources.add(adapted);
 						}
@@ -135,13 +136,14 @@ public class RefreshAction extends SelectionDispatchAction {
 		super(site);
 		setText(ActionMessages.RefreshAction_label);
 		setToolTipText(ActionMessages.RefreshAction_toolTip);
-		JavaPluginImages.setLocalImageDescriptors(this, "refresh_nav.gif");//$NON-NLS-1$
+		JavaPluginImages.setLocalImageDescriptors(this, "refresh.gif");//$NON-NLS-1$
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.REFRESH_ACTION);
 	}
 
 	/* (non-Javadoc)
 	 * Method declared in SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(checkEnabled(selection));
 	}
@@ -149,7 +151,7 @@ public class RefreshAction extends SelectionDispatchAction {
 	private boolean checkEnabled(IStructuredSelection selection) {
 		if (selection.isEmpty())
 			return true;
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (element instanceof IWorkingSet) {
 				// don't inspect working sets any deeper.
@@ -173,6 +175,7 @@ public class RefreshAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared in SelectionDispatchAction
 	 */
+	@Override
 	public void run(final IStructuredSelection selection) {
 		IWorkspaceRunnable operation= new IWorkspaceRunnable() {
 			public void run(IProgressMonitor monitor) throws CoreException {
@@ -193,34 +196,26 @@ public class RefreshAction extends SelectionDispatchAction {
 
 	private void refreshJavaElements(IStructuredSelection selection, IProgressMonitor monitor) throws JavaModelException {
 		Object[] selectedElements= selection.toArray();
-		ArrayList javaElements= new ArrayList();
+		ArrayList<IJavaElement> javaElements= new ArrayList<IJavaElement>();
 		for (int i= 0; i < selectedElements.length; i++) {
 			Object curr= selectedElements[i];
-			if (curr instanceof IJavaElement) {
-				javaElements.add(curr);
+			if (curr instanceof IPackageFragmentRoot) {
+				javaElements.add((IPackageFragmentRoot) curr);
 			} else if (curr instanceof PackageFragmentRootContainer) {
 				javaElements.addAll(Arrays.asList(((PackageFragmentRootContainer) curr).getPackageFragmentRoots()));
 			} else if (curr instanceof IWorkingSet) {
 				IAdaptable[] members= ((IWorkingSet) curr).getElements();
 				for (int k= 0; k < members.length; k++) {
-					Object adapted= members[k].getAdapter(IJavaElement.class);
-					if (adapted != null) {
+					IJavaElement adapted= (IJavaElement)members[k].getAdapter(IJavaElement.class);
+					if (adapted instanceof IPackageFragmentRoot) {
 						javaElements.add(adapted);
 					}
 				}
-			} else if (curr instanceof IAdaptable) {
-				Object adapted= ((IAdaptable) curr).getAdapter(IJavaElement.class);
-				if (adapted != null) {
-					javaElements.add(adapted);
-				}
 			}
  		}
-		IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
-		if (selection.isEmpty()) {
-			javaElements.add(model);
-		}
 		if (!javaElements.isEmpty()) {
-			model.refreshExternalArchives((IJavaElement[]) javaElements.toArray(new IJavaElement[javaElements.size()]), monitor);
+			IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
+			model.refreshExternalArchives(javaElements.toArray(new IJavaElement[javaElements.size()]), monitor);
 		}
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RemoveFromClasspathAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RemoveFromClasspathAction.java
index ac19ff7..9e85fd8 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RemoveFromClasspathAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RemoveFromClasspathAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@ public class RemoveFromClasspathAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared in SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(checkEnabled(selection));
 	}
@@ -78,7 +79,7 @@ public class RemoveFromClasspathAction extends SelectionDispatchAction {
 	private static boolean checkEnabled(IStructuredSelection selection) {
 		if (selection.isEmpty())
 			return false;
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			if (! canRemove(iter.next()))
 				return false;
 		}
@@ -88,6 +89,7 @@ public class RemoveFromClasspathAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared in SelectionDispatchAction
 	 */
+	@Override
 	public void run(final IStructuredSelection selection) {
 		try {
 			PlatformUI.getWorkbench().getActiveWorkbenchWindow().run(true, true, new WorkbenchRunnableAdapter(new IWorkspaceRunnable() {
@@ -114,13 +116,13 @@ public class RemoveFromClasspathAction extends SelectionDispatchAction {
 	}
 
 	private static IPackageFragmentRoot[] getRootsToRemove(IStructuredSelection selection){
-		List result= new ArrayList(selection.size());
-		for (Iterator iter= selection.iterator(); iter.hasNext();) {
+		List<Object> result= new ArrayList<Object>(selection.size());
+		for (Iterator<?> iter= selection.iterator(); iter.hasNext();) {
 			Object element= iter.next();
 			if (canRemove(element))
 				result.add(element);
 		}
-		return (IPackageFragmentRoot[]) result.toArray(new IPackageFragmentRoot[result.size()]);
+		return result.toArray(new IPackageFragmentRoot[result.size()]);
 	}
 
 	private static boolean canRemove(Object element){
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RenameAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RenameAction.java
index 981dda1..b6331d9 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RenameAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/RenameAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.actions;
 
-import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
@@ -76,6 +75,7 @@ public class RenameAction extends SelectionDispatchAction {
 	/*
 	 * @see ISelectionChangedListener#selectionChanged(SelectionChangedEvent)
 	 */
+	@Override
 	public void selectionChanged(SelectionChangedEvent event) {
 		fRenameJavaElement.selectionChanged(event);
 		if (fRenameResource != null)
@@ -86,6 +86,7 @@ public class RenameAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#update(ISelection)
 	 */
+	@Override
 	public void update(ISelection selection) {
 		fRenameJavaElement.update(selection);
 
@@ -103,6 +104,7 @@ public class RenameAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (fRenameJavaElement.isEnabled())
 			fRenameJavaElement.run(selection);
@@ -110,10 +112,9 @@ public class RenameAction extends SelectionDispatchAction {
 			fRenameResource.run(selection);
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
-		if (fRenameJavaElement.canRunInEditor())
+		if (fRenameJavaElement.isEnabled())
 			fRenameJavaElement.run(selection);
-		else
-			MessageDialog.openInformation(getShell(), RefactoringMessages.RenameAction_rename, RefactoringMessages.RenameAction_unavailable);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReplaceInvocationsAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReplaceInvocationsAction.java
index 9183691..587426d 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReplaceInvocationsAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ReplaceInvocationsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ public class ReplaceInvocationsAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isReplaceInvocationsAvailable(selection));
@@ -93,6 +94,7 @@ public class ReplaceInvocationsAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(ITextSelection)
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -103,6 +105,7 @@ public class ReplaceInvocationsAction extends SelectionDispatchAction {
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isReplaceInvocationsAvailable(selection));
@@ -114,6 +117,7 @@ public class ReplaceInvocationsAction extends SelectionDispatchAction {
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			Assert.isTrue(RefactoringAvailabilityTester.isReplaceInvocationsAvailable(selection));
@@ -134,6 +138,7 @@ public class ReplaceInvocationsAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		ITypeRoot typeRoot= SelectionConverter.getInput(fEditor);
 		if (ActionUtil.isProcessable(getShell(), typeRoot)) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelectionDispatchAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelectionDispatchAction.java
index 890b321..0debe00 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelectionDispatchAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelectionDispatchAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -246,6 +246,7 @@ public abstract class SelectionDispatchAction extends Action implements ISelecti
 	/* (non-Javadoc)
 	 * Method declared on IAction.
 	 */
+	@Override
 	public void run() {
 		dispatchRun(getSelection());
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelfEncapsulateFieldAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelfEncapsulateFieldAction.java
index 0cac17b..1b64199 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelfEncapsulateFieldAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SelfEncapsulateFieldAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class SelfEncapsulateFieldAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -96,6 +97,7 @@ public class SelfEncapsulateFieldAction extends SelectionDispatchAction {
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isSelfEncapsulateAvailable(selection));
@@ -110,8 +112,11 @@ public class SelfEncapsulateFieldAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
+			if (!ActionUtil.isEditable(fEditor))
+				return;
 			IJavaElement[] elements= SelectionConverter.codeResolve(fEditor);
 			if (elements.length != 1 || !(elements[0] instanceof IField)) {
 				MessageDialog.openInformation(getShell(), ActionMessages.SelfEncapsulateFieldAction_dialog_title, ActionMessages.SelfEncapsulateFieldAction_dialog_unavailable);
@@ -135,6 +140,7 @@ public class SelfEncapsulateFieldAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isSelfEncapsulateAvailable(selection));
@@ -150,10 +156,15 @@ public class SelfEncapsulateFieldAction extends SelectionDispatchAction {
 	 * (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
-			if (RefactoringAvailabilityTester.isSelfEncapsulateAvailable(selection))
-				run((IField) selection.getFirstElement());
+			IField firstElement= (IField)selection.getFirstElement();
+			if (!ActionUtil.isEditable(getShell(), firstElement))
+				return;
+			if (RefactoringAvailabilityTester.isSelfEncapsulateAvailable(selection)) {
+				run(firstElement);
+			}
 		} catch (JavaModelException e) {
 			ExceptionHandler.handle(e, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringMessages.OpenRefactoringWizardAction_exception);
 		}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowActionGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowActionGroup.java
index 7346594..79dc6d1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowActionGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,6 +102,7 @@ public class ShowActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBar) {
 		super.fillActionBars(actionBar);
 		setGlobalActionHandlers(actionBar);
@@ -110,6 +111,7 @@ public class ShowActionGroup extends ActionGroup {
 	/* (non-Javadoc)
 	 * Method declared in ActionGroup
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager menu) {
 		super.fillContextMenu(menu);
 		if (!fIsPackageExplorer) {
@@ -120,6 +122,7 @@ public class ShowActionGroup extends ActionGroup {
 	/*
 	 * @see ActionGroup#dispose()
 	 */
+	@Override
 	public void dispose() {
 		ISelectionProvider provider= fSite.getSelectionProvider();
 		provider.removeSelectionChangedListener(fShowInPackagesViewAction);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInNavigatorViewAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInNavigatorViewAction.java
index d3cb823..f70f1c3 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInNavigatorViewAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInNavigatorViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,12 +85,14 @@ public class ShowInNavigatorViewAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(getResource(selection) != null);
 	}
@@ -98,6 +100,7 @@ public class ShowInNavigatorViewAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		IJavaElement input= SelectionConverter.getInput(fEditor);
 		if (!ActionUtil.isProcessable(getShell(), input))
@@ -126,6 +129,7 @@ public class ShowInNavigatorViewAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		run(getResource(selection));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInPackageViewAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInPackageViewAction.java
index d8c078b..231e650 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInPackageViewAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ShowInPackageViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,12 +76,14 @@ public class ShowInPackageViewAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(checkEnabled(selection));
 	}
@@ -95,6 +97,7 @@ public class ShowInPackageViewAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
 			IJavaElement element= SelectionConverter.getElementAtOffset(fEditor);
@@ -110,6 +113,7 @@ public class ShowInPackageViewAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		if (!checkEnabled(selection))
 			return;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java
index b1d62fc..b16cd64 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.Window;
 
 import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.IAnnotationModel;
 
 import org.eclipse.ui.IEditorPart;
@@ -113,6 +114,7 @@ public class SortMembersAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		boolean enabled= false;
 		enabled= getSelectedCompilationUnit(selection) != null;
@@ -122,6 +124,7 @@ public class SortMembersAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		Shell shell= getShell();
 		try {
@@ -174,12 +177,14 @@ public class SortMembersAction extends SelectionDispatchAction {
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 	}
 
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		Shell shell= getShell();
 		IJavaElement input= SelectionConverter.getInput(fEditor);
@@ -204,9 +209,9 @@ public class SortMembersAction extends SelectionDispatchAction {
 
 	private boolean containsRelevantMarkers(IEditorPart editor) {
 		IAnnotationModel model= JavaUI.getDocumentProvider().getAnnotationModel(editor.getEditorInput());
-		Iterator iterator= model.getAnnotationIterator();
+		Iterator<Annotation> iterator= model.getAnnotationIterator();
 		while (iterator.hasNext()) {
-			Object element= iterator.next();
+			Annotation element= iterator.next();
 			if (element instanceof IJavaAnnotation) {
 				IJavaAnnotation annot= (IJavaAnnotation) element;
 				if (!annot.isMarkedDeleted() && annot.isPersistent() && !annot.isProblem())
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java
index b1df24b..dc78525 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,6 +74,7 @@ public class SurroundWithTryCatchAction extends SelectionDispatchAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.SURROUND_WITH_TRY_CATCH_ACTION);
 	}
 
+	@Override
 	public void run(ITextSelection selection) {
 		if (!ActionUtil.isEditable(fEditor))
 			return;
@@ -106,7 +107,7 @@ public class SurroundWithTryCatchAction extends SelectionDispatchAction {
 			PlatformUI.getWorkbench().getProgressService().runInUI(
 				new BusyIndicatorRunnableContext(), adapter, adapter.getSchedulingRule());
 
-			new LinkedProposalModelPresenter().enterLinkedMode(fEditor.getViewer(), fEditor, refactoring.getLinkedProposalModel());
+			new LinkedProposalModelPresenter().enterLinkedMode(fEditor.getViewer(), fEditor, false, refactoring.getLinkedProposalModel());
 
 		} catch (CoreException e) {
 			ExceptionHandler.handle(e, getDialogTitle(), RefactoringMessages.SurroundWithTryCatchAction_exception);
@@ -119,6 +120,7 @@ public class SurroundWithTryCatchAction extends SelectionDispatchAction {
 		}
 	}
 
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(selection.getLength() > 0 && (fEditor != null && SelectionConverter.getInputAsCompilationUnit(fEditor) != null));
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/UseSupertypeAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/UseSupertypeAction.java
index 105b471..3dc8b57 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/UseSupertypeAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/UseSupertypeAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class UseSupertypeAction extends SelectionDispatchAction{
 	/*
 	 * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isUseSuperTypeAvailable(selection));
@@ -100,6 +101,7 @@ public class UseSupertypeAction extends SelectionDispatchAction{
 	/*
 	 * @see SelectionDispatchAction#run(IStructuredSelection)
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		try {
 			if (RefactoringAvailabilityTester.isUseSuperTypeAvailable(selection)) {
@@ -130,6 +132,7 @@ public class UseSupertypeAction extends SelectionDispatchAction{
     /*
      * @see SelectionDispatchAction#selectionChanged(ITextSelection)
      */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(true);
 	}
@@ -140,6 +143,7 @@ public class UseSupertypeAction extends SelectionDispatchAction{
 	 * @param selection the Java text selection
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
+	@Override
 	public void selectionChanged(JavaTextSelection selection) {
 		try {
 			setEnabled(RefactoringAvailabilityTester.isUseSuperTypeAvailable(selection));
@@ -151,11 +155,14 @@ public class UseSupertypeAction extends SelectionDispatchAction{
 	/*
      * @see SelectionDispatchAction#run(ITextSelection)
      */
+	@Override
 	public void run(ITextSelection selection) {
 		try {
+			if (!ActionUtil.isProcessable(fEditor))
+				return;
 			IType type= RefactoringActions.getEnclosingOrPrimaryType(fEditor);
 			if (RefactoringAvailabilityTester.isUseSuperTypeAvailable(type)) {
-				if (! ActionUtil.isEditable(fEditor, getShell(), type))
+				if (!ActionUtil.isEditable(getShell(), type))
 					return;
 				RefactoringExecutionStarter.startUseSupertypeRefactoring(type, getShell());
 			} else {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WorkingSetFindAction.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WorkingSetFindAction.java
index f4e010b..07f8790 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WorkingSetFindAction.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WorkingSetFindAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,10 +64,12 @@ public class WorkingSetFindAction extends FindAction {
 		init(action, workingSetName);
 	}
 
-	Class[] getValidTypes() {
+	@Override
+	Class<?>[] getValidTypes() {
 		return null; // ignore, we override canOperateOn
 	}
 
+	@Override
 	void init() {
 		// ignore: do our own init in 'init(FindAction, String)'
 	}
@@ -81,18 +83,22 @@ public class WorkingSetFindAction extends FindAction {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.WORKING_SET_FIND_ACTION);
 	}
 
+	@Override
 	public void run(IJavaElement element) {
 		fAction.run(element);
 	}
 
+	@Override
 	boolean canOperateOn(IJavaElement element) {
 		return fAction.canOperateOn(element);
 	}
 
+	@Override
 	int getLimitTo() {
 		return -1;
 	}
 
+	@Override
 	String getOperationUnavailableMessage() {
 		return fAction.getOperationUnavailableMessage();
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WriteReferencesSearchGroup.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WriteReferencesSearchGroup.java
index 26e9924..3cf2a56 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WriteReferencesSearchGroup.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/WriteReferencesSearchGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -165,6 +165,7 @@ public class WriteReferencesSearchGroup extends ActionGroup  {
 	/* (non-Javadoc)
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillContextMenu(IMenuManager manager) {
 		MenuManager javaSearchMM= new MenuManager(MENU_TEXT, IContextMenuConstants.GROUP_SEARCH);
 		addAction(fFindWriteReferencesAction, javaSearchMM);
@@ -173,9 +174,9 @@ public class WriteReferencesSearchGroup extends ActionGroup  {
 
 		javaSearchMM.add(new Separator());
 
-		Iterator iter= SearchUtil.getLRUWorkingSets().sortedIterator();
+		Iterator<IWorkingSet[]> iter= SearchUtil.getLRUWorkingSets().sortedIterator();
 		while (iter.hasNext()) {
-			addWorkingSetAction((IWorkingSet[]) iter.next(), javaSearchMM);
+			addWorkingSetAction(iter.next(), javaSearchMM);
 		}
 		addAction(fFindWriteReferencesInWorkingSetAction, javaSearchMM);
 
@@ -186,6 +187,7 @@ public class WriteReferencesSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void fillActionBars(IActionBars actionBars) {
 		Assert.isNotNull(actionBars);
 		super.fillActionBars(actionBars);
@@ -196,6 +198,7 @@ public class WriteReferencesSearchGroup extends ActionGroup  {
 	/*
 	 * Method declared on ActionGroup.
 	 */
+	@Override
 	public void dispose() {
 		ISelectionProvider provider= fSite.getSelectionProvider();
 		if (provider != null) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpContext.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpContext.java
index 95baa15..60b92a4 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,6 +58,8 @@ public class CleanUpContext {
 	 * <code>false</code>. The AST is guaranteed to contain changes made by previous clean ups only
 	 * if {@link CleanUpRequirements#requiresFreshAST()} returns <code>true</code>.
 	 * </p>
+	 * <p>Clients should check the AST API level and do nothing if they are given an AST
+	 * they can't handle (see {@link org.eclipse.jdt.core.dom.AST#apiLevel()}).
 	 * 
 	 * @return an AST or <code>null</code> if none required
 	 */
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpOptions.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpOptions.java
index 5a5218a..f0ea745 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpOptions.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpOptions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
  */
 public class CleanUpOptions {
 
-	private final Map fOptions;
+	private final Map<String, String> fOptions;
 
 	/**
 	 * True value
@@ -46,7 +46,7 @@ public class CleanUpOptions {
 	 * @param options map that maps clean ups keys (<code>String</code>) to a non-<code>null</code>
 	 *            string value
 	 */
-	protected CleanUpOptions(Map options) {
+	protected CleanUpOptions(Map<String, String> options) {
 		fOptions= options;
 	}
 
@@ -54,7 +54,7 @@ public class CleanUpOptions {
 	 * Creates a new instance.
 	 */
 	public CleanUpOptions() {
-		fOptions= new Hashtable();
+		fOptions= new Hashtable<String, String>();
 	}
 
 	/**
@@ -80,7 +80,7 @@ public class CleanUpOptions {
 	 */
 	public String getValue(String key) {
 		Assert.isLegal(key != null);
-		String value= (String)fOptions.get(key);
+		String value= fOptions.get(key);
 		Assert.isLegal(value != null);
 		return value;
 	}
@@ -105,7 +105,7 @@ public class CleanUpOptions {
 	 * 
 	 * @return an unmodifiable set of all keys
 	 */
-	public Set getKeys() {
+	public Set<String> getKeys() {
 		return Collections.unmodifiableSet(fOptions.keySet());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpRequirements.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpRequirements.java
index d1010af..7a66c86 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpRequirements.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/cleanup/CleanUpRequirements.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,7 @@ public final class CleanUpRequirements {
 
 	private final boolean fRequiresAST;
 
-	private final Map fCompilerOptions;
+	private final Map<String, String> fCompilerOptions;
 
 	private final boolean fRequiresFreshAST;
 
@@ -41,7 +41,7 @@ public final class CleanUpRequirements {
 	 * @param requiresChangedRegions <code>true</code> if changed regions are required
 	 * @param compilerOptions map of compiler options or <code>null</code> if no requirements
 	 */
-	public CleanUpRequirements(boolean requiresAST, boolean requiresFreshAST, boolean requiresChangedRegions, Map compilerOptions) {
+	public CleanUpRequirements(boolean requiresAST, boolean requiresFreshAST, boolean requiresChangedRegions, Map<String, String> compilerOptions) {
 		Assert.isLegal(!requiresFreshAST || requiresAST, "Must not request fresh AST if no AST is required"); //$NON-NLS-1$
 		Assert.isLegal(compilerOptions == null || requiresAST, "Must not provide options if no AST is required"); //$NON-NLS-1$
 		fRequiresAST= requiresAST;
@@ -79,7 +79,7 @@ public final class CleanUpRequirements {
 	 * @return the compiler options map or <code>null</code> if none
 	 * @see JavaCore
 	 */
-	public Map getCompilerOptions() {
+	public Map<String, String> getCompilerOptions() {
 		return fCompilerOptions;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter.java
index 5091767..830b971 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,7 @@ public class JarWriter {
 	private JarOutputStream fJarOutputStream;
 	private JarPackageData fJarPackage;
 
-	private Set fDirectories= new HashSet();
+	private Set<String> fDirectories= new HashSet<String>();
 
 	/**
 	 * Creates an instance which is used to create a JAR based
@@ -213,7 +213,7 @@ public class JarWriter {
 	private void addDirectories(IPath destinationPath, File correspondingFile) throws IOException {
 		String path= destinationPath.toString().replace(File.separatorChar, '/');
 		int lastSlash= path.lastIndexOf('/');
-		List directories= new ArrayList(2);
+		List<JarEntry> directories= new ArrayList<JarEntry>(2);
 		while(lastSlash != -1) {
 			path= path.substring(0, lastSlash + 1);
 			if (!fDirectories.add(path))
@@ -236,7 +236,7 @@ public class JarWriter {
 		}
 
 		for(int i= directories.size() - 1; i >= 0; --i) {
-			fJarOutputStream.putNextEntry((JarEntry)directories.get(i));
+			fJarOutputStream.putNextEntry(directories.get(i));
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter2.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter2.java
index 6117a14..ca28376 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter2.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,7 +59,7 @@ public class JarWriter2 {
 	private JarOutputStream fJarOutputStream;
 	private JarPackageData fJarPackage;
 
-	private Set fDirectories= new HashSet();
+	private Set<String> fDirectories= new HashSet<String>();
 
 	/**
 	 * Creates an instance which is used to create a JAR based
@@ -229,7 +229,7 @@ public class JarWriter2 {
 	protected void addDirectories(IPath destinationPath, File correspondingFile) throws IOException {
 		String path= destinationPath.toString().replace(File.separatorChar, '/');
 		int lastSlash= path.lastIndexOf('/');
-		List directories= new ArrayList(2);
+		List<JarEntry> directories= new ArrayList<JarEntry>(2);
 		while(lastSlash != -1) {
 			path= path.substring(0, lastSlash + 1);
 			if (!fDirectories.add(path))
@@ -252,7 +252,7 @@ public class JarWriter2 {
 		}
 
 		for(int i= directories.size() - 1; i >= 0; --i) {
-			fJarOutputStream.putNextEntry((JarEntry)directories.get(i));
+			fJarOutputStream.putNextEntry(directories.get(i));
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java
index 5520296..d5c779b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,7 +75,7 @@ import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
  */
 public class JarWriter3 {
 
-	private Set fDirectories= new HashSet();
+	private Set<String> fDirectories= new HashSet<String>();
 
 	private JarOutputStream fJarOutputStream;
 
@@ -142,7 +142,7 @@ public class JarWriter3 {
 	protected void addDirectories(String destPath) throws IOException {
 		String path= destPath.replace(File.separatorChar, '/');
 		int lastSlash= path.lastIndexOf('/');
-		List directories= new ArrayList(2);
+		List<JarEntry> directories= new ArrayList<JarEntry>(2);
 		while (lastSlash != -1) {
 			path= path.substring(0, lastSlash + 1);
 			if (!fDirectories.add(path))
@@ -159,7 +159,7 @@ public class JarWriter3 {
 		}
 
 		for (int i= directories.size() - 1; i >= 0; --i) {
-			fJarOutputStream.putNextEntry((JarEntry) directories.get(i));
+			fJarOutputStream.putNextEntry(directories.get(i));
 		}
 	}
 
@@ -181,7 +181,7 @@ public class JarWriter3 {
 		IContainer parent= null;
 		String path= destinationPath.toString().replace(File.separatorChar, '/');
 		int lastSlash= path.lastIndexOf('/');
-		List directories= new ArrayList(2);
+		List<JarEntry> directories= new ArrayList<JarEntry>(2);
 		while (lastSlash != -1) {
 			path= path.substring(0, lastSlash + 1);
 			if (!fDirectories.add(path))
@@ -207,7 +207,7 @@ public class JarWriter3 {
 		}
 
 		for (int i= directories.size() - 1; i >= 0; --i) {
-			fJarOutputStream.putNextEntry((JarEntry) directories.get(i));
+			fJarOutputStream.putNextEntry(directories.get(i));
 		}
 	}
 
@@ -300,12 +300,10 @@ public class JarWriter3 {
 		Assert.isNotNull(path);
 		Assert.isNotNull(monitor);
 		final RefactoringDescriptorProxy[] proxies= data.getRefactoringDescriptors();
-		Arrays.sort(proxies, new Comparator() {
+		Arrays.sort(proxies, new Comparator<RefactoringDescriptorProxy>() {
 
-			public final int compare(final Object first, final Object second) {
-				final RefactoringDescriptorProxy predecessor= (RefactoringDescriptorProxy) first;
-				final RefactoringDescriptorProxy successor= (RefactoringDescriptorProxy) second;
-				final long delta= predecessor.getTimeStamp() - successor.getTimeStamp();
+			public final int compare(final RefactoringDescriptorProxy first, final RefactoringDescriptorProxy second) {
+				final long delta= first.getTimeStamp() - second.getTimeStamp();
 				if (delta > 0)
 					return 1;
 				else if (delta < 0)
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/IRefactoringProcessorIds.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/IRefactoringProcessorIds.java
index a18b4d0..dd18a38 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/IRefactoringProcessorIds.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/IRefactoringProcessorIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,8 @@ import org.eclipse.jdt.core.refactoring.IJavaElementMapper;
  * implemented.
  * </p>
  *
+ * @see org.eclipse.jdt.core.refactoring.participants.IRefactoringProcessorIds
+ * 
  * @since 3.0
  *
  * @noimplement This interface is not intended to be implemented by clients.
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RefactoringSaveHelper.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RefactoringSaveHelper.java
index 92bb061..7e58a18 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RefactoringSaveHelper.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RefactoringSaveHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -198,6 +198,7 @@ public class RefactoringSaveHelper {
 			{
 				setShellStyle(getShellStyle() | SWT.APPLICATION_MODAL);
 			}
+			@Override
 			protected Control createDialogArea(Composite parent) {
 				Composite result= (Composite) super.createDialogArea(parent);
 				if (canSaveAutomatically) {
@@ -205,6 +206,7 @@ public class RefactoringSaveHelper {
 					check.setText(RefactoringMessages.RefactoringStarter_always_save);
 					check.setSelection(RefactoringSavePreferences.getSaveAllEditors());
 					check.addSelectionListener(new SelectionAdapter() {
+						@Override
 						public void widgetSelected(SelectionEvent e) {
 							RefactoringSavePreferences.setSaveAllEditors(check.getSelection());
 						}
@@ -224,9 +226,11 @@ public class RefactoringSaveHelper {
 
 	private ILabelProvider createDialogLabelProvider() {
 		return new LabelProvider() {
+			@Override
 			public Image getImage(Object element) {
 				return ((IEditorPart) element).getTitleImage();
 			}
+			@Override
 			public String getText(Object element) {
 				return ((IEditorPart) element).getTitle();
 			}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RenameSupport.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RenameSupport.java
index 26e1a5e..2e2ffd1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RenameSupport.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/refactoring/RenameSupport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -149,6 +149,7 @@ public class RenameSupport {
 		} else {
 			starter= new RenameUserInterfaceStarter();
 			RenameRefactoringWizard wizard= new RenameRefactoringWizard(fRefactoring, fRefactoring.getName(), null, null, null) {
+				@Override
 				protected void addUserInputPages() {
 					// nothing to add
 				}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
index 07139ff..dfa4a5f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -347,6 +347,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getPresentationReconciler(ISourceViewer)
 	 */
+	@Override
 	public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
 
 		PresentationReconciler reconciler= new JavaPresentationReconciler();
@@ -383,6 +384,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getContentAssistant(ISourceViewer)
 	 */
+	@Override
 	public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
 
 		if (getEditor() != null) {
@@ -426,15 +428,20 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getQuickAssistAssistant(org.eclipse.jface.text.source.ISourceViewer)
 	 * @since 3.2
 	 */
+	@Override
 	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
-		if (getEditor() != null)
-			return new JavaCorrectionAssistant(getEditor());
+		if (getEditor() != null) {
+			JavaCorrectionAssistant assistant= new JavaCorrectionAssistant(getEditor());
+			assistant.setRestoreCompletionProposalSize(getSettings("quick_assist_proposal_size")); //$NON-NLS-1$
+			return assistant;
+		}
 		return null;
 	}
 
 	/*
 	 * @see SourceViewerConfiguration#getReconciler(ISourceViewer)
 	 */
+	@Override
 	public IReconciler getReconciler(ISourceViewer sourceViewer) {
 
 		final ITextEditor editor= getEditor();
@@ -453,6 +460,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
 	 */
+	@Override
 	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
 		String partitioning= getConfiguredDocumentPartitioning(sourceViewer);
 		if (IJavaPartitions.JAVA_DOC.equals(contentType) || IJavaPartitions.JAVA_MULTI_LINE_COMMENT.equals(contentType))
@@ -468,6 +476,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getDoubleClickStrategy(ISourceViewer, String)
 	 */
+	@Override
 	public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType) {
 		if (IJavaPartitions.JAVA_DOC.equals(contentType))
 			return new JavadocDoubleClickStrategy(getConfiguredDocumentPartitioning(sourceViewer));
@@ -488,6 +497,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see SourceViewerConfiguration#getDefaultPrefixes(ISourceViewer, String)
 	 * @since 2.0
 	 */
+	@Override
 	public String[] getDefaultPrefixes(ISourceViewer sourceViewer, String contentType) {
 		return new String[] { "//", "" }; //$NON-NLS-1$ //$NON-NLS-2$
 	}
@@ -495,6 +505,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getIndentPrefixes(ISourceViewer, String)
 	 */
+	@Override
 	public String[] getIndentPrefixes(ISourceViewer sourceViewer, String contentType) {
  		IJavaProject project= getProject();
 		final int tabWidth= CodeFormatterUtil.getTabWidth(project);
@@ -585,6 +596,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getTabWidth(ISourceViewer)
 	 */
+	@Override
 	public int getTabWidth(ISourceViewer sourceViewer) {
 		return CodeFormatterUtil.getTabWidth(getProject());
 	}
@@ -592,8 +604,10 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getAnnotationHover(ISourceViewer)
 	 */
+	@Override
 	public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
 		return new HTMLAnnotationHover(false) {
+			@Override
 			protected boolean isIncluded(Annotation annotation) {
 				return isShowInVerticalRuler(annotation);
 			}
@@ -604,8 +618,10 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see SourceViewerConfiguration#getOverviewRulerAnnotationHover(ISourceViewer)
 	 * @since 3.0
 	 */
+	@Override
 	public IAnnotationHover getOverviewRulerAnnotationHover(ISourceViewer sourceViewer) {
 		return new HTMLAnnotationHover(true) {
+			@Override
 			protected boolean isIncluded(Annotation annotation) {
 				return isShowInOverviewRuler(annotation);
 			}
@@ -616,6 +632,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see SourceViewerConfiguration#getConfiguredTextHoverStateMasks(ISourceViewer, String)
 	 * @since 2.1
 	 */
+	@Override
 	public int[] getConfiguredTextHoverStateMasks(ISourceViewer sourceViewer, String contentType) {
 		JavaEditorTextHoverDescriptor[] hoverDescs= JavaPlugin.getDefault().getJavaEditorTextHoverDescriptors();
 		int stateMasks[]= new int[hoverDescs.length];
@@ -645,6 +662,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String, int)
 	 * @since 2.1
 	 */
+	@Override
 	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType, int stateMask) {
 		JavaEditorTextHoverDescriptor[] hoverDescs= JavaPlugin.getDefault().getJavaEditorTextHoverDescriptors();
 		int i= 0;
@@ -660,6 +678,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String)
 	 */
+	@Override
 	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
 		return getTextHover(sourceViewer, contentType, ITextViewerExtension2.DEFAULT_HOVER_STATE_MASK);
 	}
@@ -667,6 +686,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getConfiguredContentTypes(ISourceViewer)
 	 */
+	@Override
 	public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
 		return new String[] {
 			IDocument.DEFAULT_CONTENT_TYPE,
@@ -682,6 +702,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getConfiguredDocumentPartitioning(org.eclipse.jface.text.source.ISourceViewer)
 	 * @since 3.0
 	 */
+	@Override
 	public String getConfiguredDocumentPartitioning(ISourceViewer sourceViewer) {
 		if (fDocumentPartitioning != null)
 			return fDocumentPartitioning;
@@ -691,6 +712,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	/*
 	 * @see SourceViewerConfiguration#getContentFormatter(ISourceViewer)
 	 */
+	@Override
 	public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) {
 		final MultiPassContentFormatter formatter= new MultiPassContentFormatter(getConfiguredDocumentPartitioning(sourceViewer), IDocument.DEFAULT_CONTENT_TYPE);
 		formatter.setMasterStrategy(new JavaFormattingStrategy());
@@ -701,6 +723,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see SourceViewerConfiguration#getInformationControlCreator(ISourceViewer)
 	 * @since 2.0
 	 */
+	@Override
 	public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
 		return new IInformationControlCreator() {
 			public IInformationControl createInformationControl(Shell parent) {
@@ -760,6 +783,7 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see SourceViewerConfiguration#getInformationPresenter(ISourceViewer)
 	 * @since 2.0
 	 */
+	@Override
 	public IInformationPresenter getInformationPresenter(ISourceViewer sourceViewer) {
 		InformationPresenter presenter= new InformationPresenter(getInformationPresenterControlCreator(sourceViewer));
 		presenter.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
@@ -896,8 +920,9 @@ public class JavaSourceViewerConfiguration extends TextSourceViewerConfiguration
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getHyperlinkDetectorTargets(org.eclipse.jface.text.source.ISourceViewer)
 	 * @since 3.3
 	 */
-	protected Map getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
-		Map targets= super.getHyperlinkDetectorTargets(sourceViewer);
+	@Override
+	protected Map<String, ITextEditor> getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
+		Map<String, ITextEditor> targets= super.getHyperlinkDetectorTargets(sourceViewer);
 		targets.put("org.eclipse.jdt.ui.javaCode", fTextEditor); //$NON-NLS-1$
 		return targets;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
old mode 100644
new mode 100755
index 89e1798..66580c8
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,13 +58,13 @@ import org.eclipse.jdt.core.ISourceReference;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.SourceRange;
 import org.eclipse.jdt.core.ToolFactory;
 import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.compiler.IScanner;
 import org.eclipse.jdt.core.compiler.ITerminalSymbols;
 import org.eclipse.jdt.core.compiler.InvalidInputException;
 import org.eclipse.jdt.core.dom.CompilationUnit;
-import org.eclipse.jdt.core.SourceRange;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
 
@@ -99,7 +99,7 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 
 		private IType fFirstType;
 		private boolean fHasHeaderComment;
-		private LinkedHashMap fMap= new LinkedHashMap();
+		private LinkedHashMap<JavaProjectionAnnotation, Position> fMap= new LinkedHashMap<JavaProjectionAnnotation, Position>();
 		private IScanner fScanner;
 
 		private FoldingStructureComputationContext(IDocument document, ProjectionAnnotationModel model, boolean allowCollapsing, IScanner scanner) {
@@ -265,6 +265,7 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 		/*
 		 * @see java.lang.Object#toString()
 		 */
+		@Override
 		public String toString() {
 			return "JavaProjectionAnnotation:\n" + //$NON-NLS-1$
 					"\telement: \t"+ fJavaElement.toString() + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
@@ -323,10 +324,10 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 	 * Matches java elements contained in a certain set.
 	 */
 	private static final class JavaElementSetFilter implements Filter {
-		private final Set/*<? extends IJavaElement>*/ fSet;
+		private final Set<? extends IJavaElement> fSet;
 		private final boolean fMatchCollapsed;
 
-		private JavaElementSetFilter(Set/*<? extends IJavaElement>*/ set, boolean matchCollapsed) {
+		private JavaElementSetFilter(Set<? extends IJavaElement> set, boolean matchCollapsed) {
 			fSet= set;
 			fMatchCollapsed= matchCollapsed;
 		}
@@ -876,18 +877,18 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 		if (ctx == null)
 			return;
 
-		Map additions= new HashMap();
-		List deletions= new ArrayList();
-		List updates= new ArrayList();
+		Map<JavaProjectionAnnotation, Position> additions= new HashMap<JavaProjectionAnnotation, Position>();
+		List<JavaProjectionAnnotation> deletions= new ArrayList<JavaProjectionAnnotation>();
+		List<JavaProjectionAnnotation> updates= new ArrayList<JavaProjectionAnnotation>();
 
 		computeFoldingStructure(ctx);
-		Map newStructure= ctx.fMap;
-		Map oldStructure= computeCurrentStructure(ctx);
+		Map<JavaProjectionAnnotation, Position> newStructure= ctx.fMap;
+		Map<IJavaElement, List<Tuple>> oldStructure= computeCurrentStructure(ctx);
 
-		Iterator e= newStructure.keySet().iterator();
+		Iterator<JavaProjectionAnnotation> e= newStructure.keySet().iterator();
 		while (e.hasNext()) {
-			JavaProjectionAnnotation newAnnotation= (JavaProjectionAnnotation) e.next();
-			Position newPosition= (Position) newStructure.get(newAnnotation);
+			JavaProjectionAnnotation newAnnotation= e.next();
+			Position newPosition= newStructure.get(newAnnotation);
 
 			IJavaElement element= newAnnotation.getElement();
 			/*
@@ -900,15 +901,15 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 			 * stable.
 			 */
 			boolean isMalformedAnonymousType= newPosition.getOffset() == 0 && element.getElementType() == IJavaElement.TYPE && isInnerType((IType) element);
-			List annotations= (List) oldStructure.get(element);
+			List<Tuple> annotations= oldStructure.get(element);
 			if (annotations == null) {
 				if (!isMalformedAnonymousType)
 					additions.put(newAnnotation, newPosition);
 			} else {
-				Iterator x= annotations.iterator();
+				Iterator<Tuple> x= annotations.iterator();
 				boolean matched= false;
 				while (x.hasNext()) {
-					Tuple tuple= (Tuple) x.next();
+					Tuple tuple= x.next();
 					JavaProjectionAnnotation existingAnnotation= tuple.annotation;
 					Position existingPosition= tuple.position;
 					if (newAnnotation.isComment() == existingAnnotation.isComment()) {
@@ -936,18 +937,18 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 			}
 		}
 
-		e= oldStructure.values().iterator();
-		while (e.hasNext()) {
-			List list= (List) e.next();
+		Iterator<List<Tuple>> iter= oldStructure.values().iterator();
+		while (iter.hasNext()) {
+			List<Tuple> list= iter.next();
 			int size= list.size();
 			for (int i= 0; i < size; i++)
-				deletions.add(((Tuple) list.get(i)).annotation);
+				deletions.add(list.get(i).annotation);
 		}
 
 		match(deletions, additions, updates, ctx);
 
-		Annotation[] deletedArray= (Annotation[]) deletions.toArray(new Annotation[deletions.size()]);
-		Annotation[] changedArray= (Annotation[]) updates.toArray(new Annotation[updates.size()]);
+		Annotation[] deletedArray= deletions.toArray(new Annotation[deletions.size()]);
+		Annotation[] changedArray= updates.toArray(new Annotation[updates.size()]);
 		ctx.getModel().modifyAnnotations(deletedArray, additions, changedArray);
 
 		ctx.fScanner.setSource(null);
@@ -1102,7 +1103,7 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 				if (contents == null)
 					return new IRegion[0];
 
-				List regions= new ArrayList();
+				List<IRegion> regions= new ArrayList<IRegion>();
 				if (!ctx.hasFirstType() && reference instanceof IType) {
 					ctx.setFirstType((IType) reference);
 					IRegion headerComment= computeHeaderComment(ctx);
@@ -1288,16 +1289,16 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 	 * @param changes list with changed annotations
 	 * @param ctx	the context
 	 */
-	private void match(List deletions, Map additions, List changes, FoldingStructureComputationContext ctx) {
+	private void match(List<JavaProjectionAnnotation> deletions, Map<JavaProjectionAnnotation, Position> additions, List<JavaProjectionAnnotation> changes, FoldingStructureComputationContext ctx) {
 		if (deletions.isEmpty() || (additions.isEmpty() && changes.isEmpty()))
 			return;
 
-		List newDeletions= new ArrayList();
-		List newChanges= new ArrayList();
+		List<JavaProjectionAnnotation> newDeletions= new ArrayList<JavaProjectionAnnotation>();
+		List<JavaProjectionAnnotation> newChanges= new ArrayList<JavaProjectionAnnotation>();
 
-		Iterator deletionIterator= deletions.iterator();
+		Iterator<JavaProjectionAnnotation> deletionIterator= deletions.iterator();
 		while (deletionIterator.hasNext()) {
-			JavaProjectionAnnotation deleted= (JavaProjectionAnnotation) deletionIterator.next();
+			JavaProjectionAnnotation deleted= deletionIterator.next();
 			Position deletedPosition= ctx.getModel().getPosition(deleted);
 			if (deletedPosition == null)
 				continue;
@@ -1356,12 +1357,12 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 	 * @param ctx the context
 	 * @return a matching tuple or <code>null</code> for no match
 	 */
-	private Tuple findMatch(Tuple tuple, Collection annotations, Map positionMap, FoldingStructureComputationContext ctx) {
-		Iterator it= annotations.iterator();
+	private Tuple findMatch(Tuple tuple, Collection<JavaProjectionAnnotation> annotations, Map<JavaProjectionAnnotation, Position> positionMap, FoldingStructureComputationContext ctx) {
+		Iterator<JavaProjectionAnnotation> it= annotations.iterator();
 		while (it.hasNext()) {
-			JavaProjectionAnnotation annotation= (JavaProjectionAnnotation) it.next();
+			JavaProjectionAnnotation annotation= it.next();
 			if (tuple.annotation.isComment() == annotation.isComment()) {
-				Position position= positionMap == null ? ctx.getModel().getPosition(annotation) : (Position) positionMap.get(annotation);
+				Position position= positionMap == null ? ctx.getModel().getPosition(annotation) : positionMap.get(annotation);
 				if (position == null)
 					continue;
 
@@ -1375,32 +1376,32 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 		return null;
 	}
 
-	private Map computeCurrentStructure(FoldingStructureComputationContext ctx) {
-		Map map= new HashMap();
+	private Map<IJavaElement, List<Tuple>> computeCurrentStructure(FoldingStructureComputationContext ctx) {
+		Map<IJavaElement, List<Tuple>> map= new HashMap<IJavaElement, List<Tuple>>();
 		ProjectionAnnotationModel model= ctx.getModel();
-		Iterator e= model.getAnnotationIterator();
+		Iterator<Annotation> e= model.getAnnotationIterator();
 		while (e.hasNext()) {
 			Object annotation= e.next();
 			if (annotation instanceof JavaProjectionAnnotation) {
 				JavaProjectionAnnotation java= (JavaProjectionAnnotation) annotation;
 				Position position= model.getPosition(java);
 				Assert.isNotNull(position);
-				List list= (List) map.get(java.getElement());
+				List<Tuple> list= map.get(java.getElement());
 				if (list == null) {
-					list= new ArrayList(2);
+					list= new ArrayList<Tuple>(2);
 					map.put(java.getElement(), list);
 				}
 				list.add(new Tuple(java, position));
 			}
 		}
 
-		Comparator comparator= new Comparator() {
-			public int compare(Object o1, Object o2) {
-				return ((Tuple) o1).position.getOffset() - ((Tuple) o2).position.getOffset();
+		Comparator<Tuple> comparator= new Comparator<Tuple>() {
+			public int compare(Tuple o1, Tuple o2) {
+				return o1.position.getOffset() - o2.position.getOffset();
 			}
 		};
-		for (Iterator it= map.values().iterator(); it.hasNext();) {
-			List list= (List) it.next();
+		for (Iterator<List<Tuple>> it= map.values().iterator(); it.hasNext();) {
+			List<Tuple> list= it.next();
 			Collections.sort(list, comparator);
 		}
 		return map;
@@ -1426,7 +1427,7 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 	 * @see org.eclipse.jdt.ui.text.folding.IJavaFoldingStructureProviderExtension#collapseElements(org.eclipse.jdt.core.IJavaElement[])
 	 */
 	public final void collapseElements(IJavaElement[] elements) {
-		Set set= new HashSet(Arrays.asList(elements));
+		Set<IJavaElement> set= new HashSet<IJavaElement>(Arrays.asList(elements));
 		modifyFiltered(new JavaElementSetFilter(set, false), false);
 	}
 
@@ -1434,7 +1435,7 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 	 * @see org.eclipse.jdt.ui.text.folding.IJavaFoldingStructureProviderExtension#expandElements(org.eclipse.jdt.core.IJavaElement[])
 	 */
 	public final void expandElements(IJavaElement[] elements) {
-		Set set= new HashSet(Arrays.asList(elements));
+		Set<IJavaElement> set= new HashSet<IJavaElement>(Arrays.asList(elements));
 		modifyFiltered(new JavaElementSetFilter(set, true), true);
 	}
 
@@ -1453,8 +1454,8 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 		if (model == null)
 			return;
 
-		List modified= new ArrayList();
-		Iterator iter= model.getAnnotationIterator();
+		List<JavaProjectionAnnotation> modified= new ArrayList<JavaProjectionAnnotation>();
+		Iterator<Annotation> iter= model.getAnnotationIterator();
 		while (iter.hasNext()) {
 			Object annotation= iter.next();
 			if (annotation instanceof JavaProjectionAnnotation) {
@@ -1471,6 +1472,6 @@ public class DefaultJavaFoldingStructureProvider implements IJavaFoldingStructur
 			}
 		}
 
-		model.modifyAnnotations(null, null, (Annotation[]) modified.toArray(new Annotation[modified.size()]));
+		model.modifyAnnotations(null, null, modified.toArray(new Annotation[modified.size()]));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/AbstractProposalSorter.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/AbstractProposalSorter.java
index 9ced2cc..2fd7d79 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/AbstractProposalSorter.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/AbstractProposalSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ import org.eclipse.jface.text.contentassist.ICompletionProposal;
  *
  * @since 3.2
  */
-public abstract class AbstractProposalSorter implements Comparator {
+public abstract class AbstractProposalSorter implements Comparator<ICompletionProposal> {
 
 	/**
 	 * Creates a new sorter. Note that subclasses must provide a zero-argument constructor to be
@@ -51,18 +51,14 @@ public abstract class AbstractProposalSorter implements Comparator {
 	}
 
 	/**
-	 * Implements the same contract as {@link Comparator#compare(Object, Object)} but with
-	 * completion proposals as parameters. This method will implement the {@link Comparator}
-	 * interface if this class is ever converted to extend
-	 * <code>Comparator<ICompletionProposal></code>.
-	 * <p>
 	 * The orderings imposed by an implementation need not be consistent with equals.
-	 * </p>
 	 *
 	 * @param p1 the first proposal to be compared
 	 * @param p2 the second proposal to be compared
 	 * @return a negative integer, zero, or a positive integer as the first argument is less than,
 	 *         equal to, or greater than the second.
+	 * 
+	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
 	 */
 	public abstract int compare(ICompletionProposal p1, ICompletionProposal p2);
 
@@ -74,18 +70,4 @@ public abstract class AbstractProposalSorter implements Comparator {
 	 */
 	public void endSorting() {
 	}
-
-	/**
-	 * This method delegates to {@link #compare(ICompletionProposal, ICompletionProposal)} and may
-	 * be removed if the class is ever converted to extend
-	 * <code>Comparator<ICompletionProposal></code>.
-	 *
-	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
-	 */
-	public final int compare(Object o1, Object o2) {
-		ICompletionProposal p1= (ICompletionProposal) o1;
-		ICompletionProposal p2= (ICompletionProposal) o2;
-
-		return compare(p1, p2);
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalCollector.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalCollector.java
old mode 100644
new mode 100755
index 56e02bc..7921b65
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalCollector.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalCollector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.formatter.CodeFormatter;
 
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
+import org.eclipse.jdt.internal.corext.util.CollectionsUtil;
 import org.eclipse.jdt.internal.corext.util.TypeFilter;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
@@ -106,9 +107,9 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	private final CompletionProposalLabelProvider fLabelProvider= new CompletionProposalLabelProvider();
 	private final ImageDescriptorRegistry fRegistry= JavaPlugin.getImageDescriptorRegistry();
 
-	private final List fJavaProposals= new ArrayList();
-	private final List fKeywords= new ArrayList();
-	private final Set fSuggestedMethodNames= new HashSet();
+	private final List<IJavaCompletionProposal> fJavaProposals= new ArrayList<IJavaCompletionProposal>();
+	private final List<IJavaCompletionProposal> fKeywords= new ArrayList<IJavaCompletionProposal>();
+	private final Set<String> fSuggestedMethodNames= new HashSet<String>();
 
 	private final ICompilationUnit fCompilationUnit;
 	private final IJavaProject fJavaProject;
@@ -190,6 +191,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.core.CompletionRequestor#setIgnored(int, boolean)
 	 */
+	@Override
 	public void setIgnored(int completionProposalKind, boolean ignore) {
 		super.setIgnored(completionProposalKind, ignore);
 		if (completionProposalKind == CompletionProposal.METHOD_DECLARATION && !ignore) {
@@ -235,6 +237,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	 * instead.
 	 * </p>
 	 */
+	@Override
 	public void accept(CompletionProposal proposal) {
 		long start= DEBUG ? System.currentTimeMillis() : 0;
 		try {
@@ -268,6 +271,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	 * </p>
 	 * @see #getContext()
 	 */
+	@Override
 	public void acceptContext(CompletionContext context) {
 		fContext= context;
 		fLabelProvider.setContext(context);
@@ -278,6 +282,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	 *
 	 * Subclasses may extend, but must call the super implementation.
 	 */
+	@Override
 	public void beginReporting() {
 		if (DEBUG) {
 			fStartTime= System.currentTimeMillis();
@@ -295,6 +300,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	 *
 	 * Subclasses may extend, but must call the super implementation.
 	 */
+	@Override
 	public void completionFailure(IProblem problem) {
 		fLastProblem= problem;
 	}
@@ -304,6 +310,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	 *
 	 * Subclasses may extend, but must call the super implementation.
 	 */
+	@Override
 	public void endReporting() {
 		if (DEBUG) {
 			long total= System.currentTimeMillis() - fStartTime;
@@ -332,7 +339,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	 * @return the unsorted list of received proposals
 	 */
 	public final IJavaCompletionProposal[] getJavaCompletionProposals() {
-		return (IJavaCompletionProposal[]) fJavaProposals.toArray(new IJavaCompletionProposal[fJavaProposals.size()]);
+		return CollectionsUtil.toArray(fJavaProposals, IJavaCompletionProposal.class);
 	}
 
 	/**
@@ -341,7 +348,7 @@ public class CompletionProposalCollector extends CompletionRequestor {
 	 * @return the unsorted list of received keyword proposals
 	 */
 	public final IJavaCompletionProposal[] getKeywordCompletionProposals() {
-		return (JavaCompletionProposal[]) fKeywords.toArray(new JavaCompletionProposal[fKeywords.size()]);
+		return CollectionsUtil.toArray(fKeywords, IJavaCompletionProposal.class);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalComparator.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalComparator.java
index 6ea01a2..218573b 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalComparator.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,7 @@ import org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal;
  *
  * @since 3.1
  */
-public final class CompletionProposalComparator implements Comparator {
+public final class CompletionProposalComparator implements Comparator<ICompletionProposal> {
 
 	private boolean fOrderAlphabetically;
 
@@ -48,13 +48,11 @@ public final class CompletionProposalComparator implements Comparator {
 		fOrderAlphabetically= orderAlphabetically;
 	}
 
-	/*
-	 * @see Comparator#compare(Object, Object)
+	/**
+	 * {@inheritDoc}
+	 * @since 3.7
 	 */
-	public int compare(Object o1, Object o2) {
-		ICompletionProposal p1= (ICompletionProposal) o1;
-		ICompletionProposal p2= (ICompletionProposal) o2;
-
+	public int compare(ICompletionProposal p1, ICompletionProposal p2) {
 		if (!fOrderAlphabetically) {
 			int r1= getRelevance(p1);
 			int r2= getRelevance(p2);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java
index 788f5d7..1afa429 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/CompletionProposalLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,6 +86,7 @@ public class CompletionProposalLabelProvider {
 				paramList= appendUnboundedParameterList(new StyledString(), proposal).getString();
 				return Strings.markJavaElementLabelLTR(paramList);
 			case CompletionProposal.TYPE_REF:
+			case CompletionProposal.JAVADOC_TYPE_REF:
 				paramList= appendTypeParameterList(new StyledString(), proposal).getString();
 				return Strings.markJavaElementLabelLTR(paramList);
 			case CompletionProposal.ANONYMOUS_CLASS_DECLARATION:
@@ -729,6 +730,8 @@ public class CompletionProposalLabelProvider {
 			adornments |= JavaElementImageDescriptor.ABSTRACT;
 
 		if (kind == CompletionProposal.FIELD_REF) {
+			if (Flags.isFinal(flags))
+				adornments |= JavaElementImageDescriptor.FINAL;
 			if (Flags.isTransient(flags))
 				adornments |= JavaElementImageDescriptor.TRANSIENT;
 			if (Flags.isVolatile(flags))
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/ContentAssistInvocationContext.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/ContentAssistInvocationContext.java
index e75733c..1587c0f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/ContentAssistInvocationContext.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/ContentAssistInvocationContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -176,6 +176,7 @@ public class ContentAssistInvocationContext {
 	 * @param obj {@inheritDoc}
 	 * @return {@inheritDoc}
 	 */
+	@Override
 	public boolean equals(Object obj) {
 		if (obj == null)
 			return false;
@@ -188,6 +189,7 @@ public class ContentAssistInvocationContext {
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
+	@Override
 	public int hashCode() {
 		return 23459213 << 5 | (fViewer == null ? 0 : fViewer.hashCode() << 3) | fOffset;
 	}
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/IJavaCompletionProposalComputer.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/IJavaCompletionProposalComputer.java
index dbc6dc3..d04af31 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/IJavaCompletionProposalComputer.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/java/IJavaCompletionProposalComputer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,7 @@ public interface IJavaCompletionProposalComputer {
 	 *        invocation, i.e. there is no need for the receiver to spawn a sub monitor.
 	 * @return a list of completion proposals (element type: {@link ICompletionProposal})
 	 */
-	List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor);
+	List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor);
 
 	/**
 	 * Returns context information objects valid at the given invocation context.
@@ -52,7 +52,7 @@ public interface IJavaCompletionProposalComputer {
 	 *        invocation, i.e. there is no need for the receiver to spawn a sub monitor.
 	 * @return a list of context information objects (element type: {@link IContextInformation})
 	 */
-	List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor);
+	List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor);
 
 	/**
 	 * Returns the reason why this computer was unable to produce any completion proposals or
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/BuildPathDialogAccess.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/BuildPathDialogAccess.java
index 7786611..4574495 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/BuildPathDialogAccess.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/BuildPathDialogAccess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -297,10 +297,10 @@ public final class BuildPathDialogAccess {
 			throw new IllegalArgumentException();
 		}
 
-		Class[] acceptedClasses= new Class[] { IFile.class };
+		Class<?>[] acceptedClasses= new Class[] { IFile.class };
 		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false);
 
-		ArrayList usedJars= new ArrayList(usedEntries.length);
+		ArrayList<IResource> usedJars= new ArrayList<IResource>(usedEntries.length);
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		for (int i= 0; i < usedEntries.length; i++) {
 			IPath curr= usedEntries[i];
@@ -348,9 +348,9 @@ public final class BuildPathDialogAccess {
 			throw new IllegalArgumentException();
 		}
 
-		Class[] acceptedClasses= new Class[] { IFile.class };
+		Class<?>[] acceptedClasses= new Class[] { IFile.class };
 		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, true);
-		ArrayList usedJars= new ArrayList(usedEntries.length);
+		ArrayList<IResource> usedJars= new ArrayList<IResource>(usedEntries.length);
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		for (int i= 0; i < usedEntries.length; i++) {
 			IResource resource= root.findMember(usedEntries[i]);
@@ -558,9 +558,9 @@ public final class BuildPathDialogAccess {
 
 
 	private static IPath[] internalChooseFolderEntry(Shell shell, IPath initialSelection, IPath[] usedEntries, String title, String message) {
-		Class[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
+		Class<?>[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
 
-		ArrayList usedContainers= new ArrayList(usedEntries.length);
+		ArrayList<IResource> usedContainers= new ArrayList<IResource>(usedEntries.length);
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		for (int i= 0; i < usedEntries.length; i++) {
 			IResource resource= root.findMember(usedEntries[i]);
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java
index 3ffddc9..ded8872 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavaCapabilityConfigurationPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,7 +101,8 @@ public class JavaCapabilityConfigurationPage extends NewElementWizardPage {
      * @see org.eclipse.jface.dialogs.DialogPage#dispose()
      * @since 3.3
      */
-    public void dispose() {
+    @Override
+	public void dispose() {
     	try {
         	super.dispose();
         } finally {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavadocExportWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavadocExportWizardPage.java
index 0d0338b..5f889a1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavadocExportWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/JavadocExportWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,7 +142,7 @@ public abstract class JavadocExportWizardPage {
 	 * @param toolOptions A {@link List} of {@link String} with the Javadoc tool arguments.
 	 * See the <a href="http://java.sun.com/javase/6/docs/technotes/guides/javadoc/index.html"> Javadoc command specification</a> for the format of the arguments.
 	 */
-	public void updateArguments(List vmOptions, List toolOptions) {
+	public void updateArguments(List<String> vmOptions, List<String> toolOptions) {
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewAnnotationWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewAnnotationWizardPage.java
index 101c18f..af2391f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewAnnotationWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewAnnotationWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,6 +88,7 @@ public class NewAnnotationWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see NewContainerWizardPage#handleFieldChanged
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 
@@ -132,6 +133,7 @@ public class NewAnnotationWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see WizardPage#becomesVisible
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewClassWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewClassWizardPage.java
index 329c88a..cbbe2ad 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewClassWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewClassWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -127,6 +127,7 @@ public class NewClassWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see NewContainerWizardPage#handleFieldChanged
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 
@@ -179,6 +180,7 @@ public class NewClassWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see WizardPage#becomesVisible
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
@@ -257,6 +259,7 @@ public class NewClassWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see NewTypeWizardPage#createTypeMembers
 	 */
+	@Override
 	protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
 		boolean doMain= isCreateMain();
 		boolean doConstr= isCreateConstructors();
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewContainerWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewContainerWizardPage.java
index 598b69c..cd2e12e 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewContainerWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewContainerWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -480,8 +480,9 @@ public abstract class NewContainerWizardPage extends NewElementWizardPage {
 	 */
 	protected IPackageFragmentRoot chooseContainer() {
 		IJavaElement initElement= getPackageFragmentRoot();
-		Class[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class };
+		Class<?>[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class };
 		TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) {
+			@Override
 			public boolean isSelectedValid(Object element) {
 				try {
 					if (element instanceof IJavaProject) {
@@ -501,6 +502,7 @@ public abstract class NewContainerWizardPage extends NewElementWizardPage {
 
 		acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class };
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses) {
+			@Override
 			public boolean select(Viewer viewer, Object parent, Object element) {
 				if (element instanceof IPackageFragmentRoot) {
 					try {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewElementWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewElementWizardPage.java
index 59859d8..de7c79f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewElementWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewElementWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ public abstract class NewElementWizardPage extends WizardPage {
 	/*
 	 * @see WizardPage#becomesVisible
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		fPageVisible= visible;
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewEnumWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewEnumWizardPage.java
index a87b8e5..a1b25c1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewEnumWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewEnumWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,6 +90,7 @@ public class NewEnumWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see NewContainerWizardPage#handleFieldChanged
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 
@@ -137,6 +138,7 @@ public class NewEnumWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see WizardPage#becomesVisible
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewInterfaceWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewInterfaceWizardPage.java
index 5764006..19cbbb5 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewInterfaceWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewInterfaceWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,6 +88,7 @@ public class NewInterfaceWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see NewContainerWizardPage#handleFieldChanged
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 
@@ -135,6 +136,7 @@ public class NewInterfaceWizardPage extends NewTypeWizardPage {
 	/*
 	 * @see WizardPage#becomesVisible
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPage.java
index d4005a9..b1a71e1 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,7 +108,8 @@ public class NewJavaProjectWizardPage extends NewElementWizardPage {
      * @see org.eclipse.jface.dialogs.DialogPage#dispose()
      * @since 3.3
      */
-    public void dispose() {
+    @Override
+	public void dispose() {
     	try {
         	super.dispose();
         } finally {
@@ -250,6 +251,7 @@ public class NewJavaProjectWizardPage extends NewElementWizardPage {
 	 * @param visible if <code>true</code> the page becomes visible; otherwise
 	 * it becomes invisible
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java
index e204ea4..0016b72 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageOne.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -484,11 +484,9 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 			}
 
 			fInstalledJVMs= getWorkspaceJREs();
-			Arrays.sort(fInstalledJVMs, new Comparator() {
+			Arrays.sort(fInstalledJVMs, new Comparator<IVMInstall>() {
 
-				public int compare(Object arg0, Object arg1) {
-					IVMInstall i0= (IVMInstall)arg0;
-					IVMInstall i1= (IVMInstall)arg1;
+				public int compare(IVMInstall i0, IVMInstall i1) {
 					if (i1 instanceof IVMInstall2 && i0 instanceof IVMInstall2) {
 						String cc0= JavaModelUtil.getCompilerCompliance((IVMInstall2) i0, JavaCore.VERSION_1_4);
 						String cc1= JavaModelUtil.getCompilerCompliance((IVMInstall2) i1, JavaCore.VERSION_1_4);
@@ -533,9 +531,9 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 			}
 
 			fInstalledEEs= JavaRuntime.getExecutionEnvironmentsManager().getExecutionEnvironments();
-			Arrays.sort(fInstalledEEs, new Comparator() {
-				public int compare(Object arg0, Object arg1) {
-					return Policy.getComparator().compare(((IExecutionEnvironment)arg0).getId(), ((IExecutionEnvironment)arg1).getId());
+			Arrays.sort(fInstalledEEs, new Comparator<IExecutionEnvironment>() {
+				public int compare(IExecutionEnvironment arg0, IExecutionEnvironment arg1) {
+					return Policy.getComparator().compare(arg0.getId(), arg1.getId());
 				}
 			});
 			selectionIndex= -1;//find new index
@@ -557,7 +555,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 		}
 
 		private IVMInstall[] getWorkspaceJREs() {
-			List standins = new ArrayList();
+			List<VMStandin> standins = new ArrayList<VMStandin>();
 			IVMInstallType[] types = JavaRuntime.getVMInstallTypes();
 			for (int i = 0; i < types.length; i++) {
 				IVMInstallType type = types[i];
@@ -567,7 +565,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 					standins.add(new VMStandin(install));
 				}
 			}
-			return ((IVMInstall[])standins.toArray(new IVMInstall[standins.size()]));
+			return standins.toArray(new IVMInstall[standins.size()]);
 		}
 
 		private String getDefaultJVMName() {
@@ -644,7 +642,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 			String jreID= BuildPathSupport.JRE_PREF_PAGE_ID;
 			String eeID= BuildPathSupport.EE_PREF_PAGE_ID;
 			String complianceId= CompliancePreferencePage.PREF_ID;
-			Map data= new HashMap();
+			Map<String, Boolean> data= new HashMap<String, Boolean>();
 			data.put(PropertyAndPreferencePage.DATA_NO_LINK, Boolean.TRUE);
 			PreferencesUtil.createPreferenceDialogOn(getShell(), jreID, new String[] { jreID, complianceId , eeID }, data).open();
 
@@ -845,7 +843,12 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 			String selectedCompliance= fJREGroup.getSelectedCompilerCompliance();
 			if (selectedCompliance != null) {
 				String defaultCompliance= JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE);
-				if (selectedCompliance.equals(defaultCompliance)) {
+				if (JavaModelUtil.HIDE_VERSION_1_7 && fJREGroup.fUseEEJRE.isSelected() && fJREGroup.fEECombo.getText().indexOf(JavaCore.VERSION_1_7) != -1) {
+					fHintText.setText(NewWizardMessages.NewJavaProjectWizardPageOne_DetectGroup_java17_message);
+					fHintText.setVisible(true);
+					fIcon.setImage(Dialog.getImage(Dialog.DLG_IMG_MESSAGE_WARNING));
+					fIcon.setVisible(true);
+				} else if (selectedCompliance.equals(defaultCompliance)) {
 					fHintText.setVisible(false);
 					fIcon.setVisible(false);
 				} else {
@@ -875,6 +878,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 				fHintText.setVisible(false);
 				fIcon.setVisible(false);
 			}
+
 		}
 
 		private boolean computeDetectState() {
@@ -931,7 +935,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 			String jreID= BuildPathSupport.JRE_PREF_PAGE_ID;
 			String eeID= BuildPathSupport.EE_PREF_PAGE_ID;
 			String complianceId= CompliancePreferencePage.PREF_ID;
-			Map data= new HashMap();
+			Map<String, Boolean> data= new HashMap<String, Boolean>();
 			data.put(PropertyAndPreferencePage.DATA_NO_LINK, Boolean.TRUE);
 			String id= "JRE".equals(e.text) ? jreID : complianceId; //$NON-NLS-1$
 			PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { jreID, complianceId, eeID  }, data).open();
@@ -1146,6 +1150,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 		setControl(composite);
 	}
 
+	@Override
 	protected void setControl(Control newControl) {
 		Dialog.applyDialogFont(newControl);
 
@@ -1344,6 +1349,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
@@ -1412,7 +1418,7 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 		if (treeSelection.isEmpty())
 			return EMPTY_WORKING_SET_ARRAY;
 
-		List elements= treeSelection.toList();
+		List<?> elements= treeSelection.toList();
 		if (elements.size() == 1) {
 			Object element= elements.get(0);
 			TreePath[] paths= treeSelection.getPathsFor(element);
@@ -1434,14 +1440,14 @@ public class NewJavaProjectWizardPageOne extends WizardPage {
 			return EMPTY_WORKING_SET_ARRAY;
 		}
 
-		ArrayList result= new ArrayList();
-		for (Iterator iterator= elements.iterator(); iterator.hasNext();) {
+		ArrayList<IWorkingSet> result= new ArrayList<IWorkingSet>();
+		for (Iterator<?> iterator= elements.iterator(); iterator.hasNext();) {
 			Object element= iterator.next();
 			if (element instanceof IWorkingSet && isValidWorkingSet((IWorkingSet) element)) {
-				result.add(element);
+				result.add((IWorkingSet) element);
 			}
 		}
-		return (IWorkingSet[]) result.toArray(new IWorkingSet[result.size()]);
+		return result.toArray(new IWorkingSet[result.size()]);
 	}
 
 
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
index 91c49df..ddff49a 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,7 +94,7 @@ public class NewJavaProjectWizardPageTwo extends JavaCapabilityConfigurationPage
 	private File fDotProjectBackup;
 	private File fDotClasspathBackup;
 	private Boolean fIsAutobuild;
-	private HashSet fOrginalFolders;
+	private HashSet<IFileStore> fOrginalFolders;
 
 	/**
 	 * Constructor for the {@link NewJavaProjectWizardPageTwo}.
@@ -115,6 +115,7 @@ public class NewJavaProjectWizardPageTwo extends JavaCapabilityConfigurationPage
 	/* (non-Javadoc)
 	 * @see org.eclipse.jdt.ui.wizards.JavaCapabilityConfigurationPage#useNewSourcePage()
 	 */
+	@Override
 	protected final boolean useNewSourcePage() {
 		return true;
 	}
@@ -123,6 +124,7 @@ public class NewJavaProjectWizardPageTwo extends JavaCapabilityConfigurationPage
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		boolean isShownFirstTime= visible && fCurrProject == null;
 		if (visible) {
@@ -286,7 +288,7 @@ public class NewJavaProjectWizardPageTwo extends JavaCapabilityConfigurationPage
 					monitor.worked(2);
 				}
 			} else {
-				List cpEntries= new ArrayList();
+				List<IClasspathEntry> cpEntries= new ArrayList<IClasspathEntry>();
 				IWorkspaceRoot root= project.getWorkspace().getRoot();
 
 				IClasspathEntry[] sourceClasspathEntries= fFirstPage.getSourceClasspathEntries();
@@ -301,7 +303,7 @@ public class NewJavaProjectWizardPageTwo extends JavaCapabilityConfigurationPage
 
 				cpEntries.addAll(Arrays.asList(fFirstPage.getDefaultClasspathEntries()));
 
-				entries= (IClasspathEntry[]) cpEntries.toArray(new IClasspathEntry[cpEntries.size()]);
+				entries= cpEntries.toArray(new IClasspathEntry[cpEntries.size()]);
 
 				outputLocation= fFirstPage.getOutputLocation();
 				if (outputLocation.segmentCount() > 1) {
@@ -330,7 +332,7 @@ public class NewJavaProjectWizardPageTwo extends JavaCapabilityConfigurationPage
 	}
 
 	private void rememberExisitingFolders(URI projectLocation) {
-		fOrginalFolders= new HashSet();
+		fOrginalFolders= new HashSet<IFileStore>();
 
 		try {
 			IFileStore[] children= EFS.getStore(projectLocation).childStores(EFS.NONE, null);
@@ -358,8 +360,8 @@ public class NewJavaProjectWizardPageTwo extends JavaCapabilityConfigurationPage
 				}
 			}
 
-			for (Iterator iterator= fOrginalFolders.iterator(); iterator.hasNext();) {
-				IFileStore deleted= (IFileStore) iterator.next();
+			for (Iterator<IFileStore> iterator= fOrginalFolders.iterator(); iterator.hasNext();) {
+				IFileStore deleted= iterator.next();
 				deleted.mkdir(EFS.NONE, null);
 			}
 		} catch (CoreException e) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewPackageWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewPackageWizardPage.java
index e2c35d4..b93d16f 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewPackageWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewPackageWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -162,6 +162,7 @@ public class NewPackageWizardPage extends NewContainerWizardPage {
 	/**
 	 * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean)
 	 */
+	@Override
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
@@ -205,6 +206,7 @@ public class NewPackageWizardPage extends NewContainerWizardPage {
 	/*
 	 * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 		if (fieldName == CONTAINER) {
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
index 10789f9..4292053 100644
--- a/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
+++ b/eclipse/plugins/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,7 +90,6 @@ import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.compiler.IScanner;
 import org.eclipse.jdt.core.compiler.ITerminalSymbols;
 import org.eclipse.jdt.core.compiler.InvalidInputException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
@@ -130,6 +129,7 @@ import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.dialogs.TableTextCellEditor;
 import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
+import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.CodeTemplatePreferencePage;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.refactoring.contentassist.CompletionContextRequestor;
@@ -289,10 +289,12 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 			this.interfaceName= interfaceName;
 		}
 
+		@Override
 		public int hashCode() {
 			return interfaceName.hashCode();
 		}
 
+		@Override
 		public boolean equals(Object obj) {
 			return obj != null && getClass().equals(obj.getClass()) && ((InterfaceWrapper) obj).interfaceName.equals(interfaceName);
 		}
@@ -305,10 +307,12 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 			fInterfaceImage= JavaPluginImages.get(JavaPluginImages.IMG_OBJS_INTERFACE);
 		}
 
+		@Override
 		public String getText(Object element) {
 			return BasicElementLabels.getJavaElementName(((InterfaceWrapper) element).interfaceName);
 		}
 
+		@Override
 		public Image getImage(Object element) {
 			return fInterfaceImage;
 		}
@@ -332,7 +336,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	private StringDialogField fTypeNameDialogField;
 
 	private StringButtonDialogField fSuperClassDialogField;
-	private ListDialogField fSuperInterfacesDialogField;
+	private ListDialogField<InterfaceWrapper> fSuperInterfacesDialogField;
 
 	private SelectionButtonDialogFieldGroup fAccMdfButtons;
 	private SelectionButtonDialogFieldGroup fOtherMdfButtons;
@@ -439,7 +443,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 			/* 1 */ null,
 			NewWizardMessages.NewTypeWizardPage_interfaces_remove
 		};
-		fSuperInterfacesDialogField= new ListDialogField(adapter, addButtons, new InterfacesListLabelProvider());
+		fSuperInterfacesDialogField= new ListDialogField<InterfaceWrapper>(adapter, addButtons, new InterfacesListLabelProvider());
 		fSuperInterfacesDialogField.setDialogFieldListener(adapter);
 		fSuperInterfacesDialogField.setTableColumns(new ListDialogField.ColumnsDescription(1, false));
 		fSuperInterfacesDialogField.setLabelText(getSuperInterfacesLabel());
@@ -515,7 +519,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	 */
 	protected void initTypePage(IJavaElement elem) {
 		String initSuperclass= "java.lang.Object"; //$NON-NLS-1$
-		ArrayList initSuperinterfaces= new ArrayList(5);
+		ArrayList<String> initSuperinterfaces= new ArrayList<String>(5);
 
 		IJavaProject project= null;
 		IPackageFragment pack= null;
@@ -776,6 +780,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 
 		JavaTypeCompletionProcessor superClassCompletionProcessor= new JavaTypeCompletionProcessor(false, false, true);
 		superClassCompletionProcessor.setCompletionContextRequestor(new CompletionContextRequestor() {
+			@Override
 			public StubTypeContext getStubTypeContext() {
 				return getSuperClassStubTypeContext();
 			}
@@ -799,7 +804,8 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 		tableViewer.setColumnProperties(new String[] {INTERFACE});
 
 		TableTextCellEditor cellEditor= new TableTextCellEditor(tableViewer, 0) {
-		    protected void doSetFocus() {
+		    @Override
+			protected void doSetFocus() {
 		        if (text != null) {
 		            text.setFocus();
 		            text.setSelection(text.getText().length());
@@ -811,6 +817,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 		};
 		JavaTypeCompletionProcessor superInterfaceCompletionProcessor= new JavaTypeCompletionProcessor(false, false, true);
 		superInterfaceCompletionProcessor.setCompletionContextRequestor(new CompletionContextRequestor() {
+			@Override
 			public StubTypeContext getStubTypeContext() {
 				return getSuperInterfacesStubTypeContext();
 			}
@@ -828,7 +835,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 					element = ((Item) element).getData();
 
 				((InterfaceWrapper) element).interfaceName= (String) value;
-				fSuperInterfacesDialogField.elementChanged(element);
+				fSuperInterfacesDialogField.elementChanged((InterfaceWrapper) element);
 			}
 			public Object getValue(Object element, String property) {
 				return ((InterfaceWrapper) element).interfaceName;
@@ -838,6 +845,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 			}
 		});
 		tableViewer.getTable().addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyPressed(KeyEvent event) {
 				if (event.keyCode == SWT.F2 && event.stateMask == 0) {
 					ISelection selection= tableViewer.getSelection();
@@ -891,7 +899,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 
 	// -------- TypeFieldsAdapter --------
 
-	private class TypeFieldsAdapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter, SelectionListener {
+	private class TypeFieldsAdapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter<InterfaceWrapper>, SelectionListener {
 
 		// -------- IStringButtonAdapter
 		public void changeControlPressed(DialogField field) {
@@ -899,18 +907,18 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 		}
 
 		// -------- IListAdapter
-		public void customButtonPressed(ListDialogField field, int index) {
+		public void customButtonPressed(ListDialogField<InterfaceWrapper> field, int index) {
 			typePageCustomButtonPressed(field, index);
 		}
 
-		public void selectionChanged(ListDialogField field) {}
+		public void selectionChanged(ListDialogField<InterfaceWrapper> field) {}
 
 		// -------- IDialogFieldListener
 		public void dialogFieldChanged(DialogField field) {
 			typePageDialogFieldChanged(field);
 		}
 
-		public void doubleClicked(ListDialogField field) {
+		public void doubleClicked(ListDialogField<InterfaceWrapper> field) {
 		}
 
 
@@ -957,7 +965,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	private void typePageCustomButtonPressed(DialogField field, int index) {
 		if (field == fSuperInterfacesDialogField && index == 0) {
 			chooseSuperInterfaces();
-			List interfaces= fSuperInterfacesDialogField.getElements();
+			List<InterfaceWrapper> interfaces= fSuperInterfacesDialogField.getElements();
 			if (!interfaces.isEmpty()) {
 				Object element= interfaces.get(interfaces.size() - 1);
 				fSuperInterfacesDialogField.editElement(element);
@@ -1025,6 +1033,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	/*
 	 * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 		if (fieldName == CONTAINER) {
@@ -1251,11 +1260,11 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	 * @return a list of chosen super interfaces. The list's elements
 	 * are of type <code>String</code>
 	 */
-	public List getSuperInterfaces() {
-		List interfaces= fSuperInterfacesDialogField.getElements();
-		ArrayList result= new ArrayList(interfaces.size());
-		for (Iterator iter= interfaces.iterator(); iter.hasNext();) {
-			InterfaceWrapper wrapper= (InterfaceWrapper) iter.next();
+	public List<String> getSuperInterfaces() {
+		List<InterfaceWrapper> interfaces= fSuperInterfacesDialogField.getElements();
+		ArrayList<String> result= new ArrayList<String>(interfaces.size());
+		for (Iterator<InterfaceWrapper> iter= interfaces.iterator(); iter.hasNext();) {
+			InterfaceWrapper wrapper= iter.next();
 			result.add(wrapper.interfaceName);
 		}
 		return result;
@@ -1269,10 +1278,10 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	 * @param canBeModified if <code>true</code> the super interface field is
 	 * editable; otherwise it is read-only.
 	 */
-	public void setSuperInterfaces(List interfacesNames, boolean canBeModified) {
-		ArrayList interfaces= new ArrayList(interfacesNames.size());
-		for (Iterator iter= interfacesNames.iterator(); iter.hasNext();) {
-			interfaces.add(new InterfaceWrapper((String) iter.next()));
+	public void setSuperInterfaces(List<String> interfacesNames, boolean canBeModified) {
+		ArrayList<InterfaceWrapper> interfaces= new ArrayList<InterfaceWrapper>(interfacesNames.size());
+		for (Iterator<String> iter= interfacesNames.iterator(); iter.hasNext();) {
+			interfaces.add(new InterfaceWrapper(iter.next()));
 		}
 		fSuperInterfacesDialogField.setElements(interfaces);
 		fSuperInterfacesDialogField.setEnabled(canBeModified);
@@ -1356,6 +1365,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	/*
 	 * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#containerChanged()
 	 */
+	@Override
 	protected IStatus containerChanged() {
 		IStatus status= super.containerChanged();
 	    IPackageFragmentRoot root= getPackageFragmentRoot();
@@ -1647,7 +1657,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 				return status;
 			}
 			String typeDeclaration= "class " + typeNameWithParameters + " {}"; //$NON-NLS-1$//$NON-NLS-2$
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setSource(typeDeclaration.toCharArray());
 			parser.setProject(project);
 			CompilationUnit compilationUnit= (CompilationUnit) parser.createAST(null);
@@ -1727,10 +1737,10 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 		fSuperInterfacesDialogField.enableButton(0, root != null);
 
 		if (root != null) {
-			List elements= fSuperInterfacesDialogField.getElements();
+			List<InterfaceWrapper> elements= fSuperInterfacesDialogField.getElements();
 			int nElements= elements.size();
 			for (int i= 0; i < nElements; i++) {
-				String intfname= ((InterfaceWrapper) elements.get(i)).interfaceName;
+				String intfname= elements.get(i).interfaceName;
 				Type type= TypeContextChecker.parseSuperInterface(intfname);
 				if (type == null) {
 					status.setError(Messages.format(NewWizardMessages.NewTypeWizardPage_error_InvalidSuperInterfaceName, BasicElementLabels.getJavaElementName(intfname)));
@@ -1955,7 +1965,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 			ImportsManager imports;
 			int indent= 0;
 
-			Set /* String (import names) */ existingImports;
+			Set<String> existingImports;
 
 			String lineDelimiter= null;
 			if (!isInnerClass) {
@@ -2105,7 +2115,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	}
 
 	private CompilationUnit createASTForImports(ICompilationUnit cu) {
-		ASTParser parser= ASTParser.newParser(AST.JLS3);
+		ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		parser.setSource(cu);
 		parser.setResolveBindings(false);
 		parser.setFocalPosition(0);
@@ -2113,17 +2123,17 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	}
 
 
-	private Set /* String */ getExistingImports(CompilationUnit root) {
-		List imports= root.imports();
-		Set res= new HashSet(imports.size());
+	private Set<String> getExistingImports(CompilationUnit root) {
+		List<ImportDeclaration> imports= root.imports();
+		Set<String> res= new HashSet<String>(imports.size());
 		for (int i= 0; i < imports.size(); i++) {
-			res.add(ASTNodes.asString((ImportDeclaration) imports.get(i)));
+			res.add(ASTNodes.asString(imports.get(i)));
 		}
 		return res;
 	}
 
-	private void removeUnusedImports(ICompilationUnit cu, Set existingImports, boolean needsSave) throws CoreException {
-		ASTParser parser= ASTParser.newParser(AST.JLS3);
+	private void removeUnusedImports(ICompilationUnit cu, Set<String> existingImports, boolean needsSave) throws CoreException {
+		ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		parser.setSource(cu);
 		parser.setResolveBindings(true);
 
@@ -2132,13 +2142,13 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 			return;
 		}
 
-		List importsDecls= root.imports();
+		List<ImportDeclaration> importsDecls= root.imports();
 		if (importsDecls.isEmpty()) {
 			return;
 		}
 		ImportsManager imports= new ImportsManager(root);
 
-		int importsEnd= ASTNodes.getExclusiveEnd((ASTNode) importsDecls.get(importsDecls.size() - 1));
+		int importsEnd= ASTNodes.getExclusiveEnd(importsDecls.get(importsDecls.size() - 1));
 		IProblem[] problems= root.getProblems();
 		for (int i= 0; i < problems.length; i++) {
 			IProblem curr= problems[i];
@@ -2147,7 +2157,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 				if (id == IProblem.UnusedImport || id == IProblem.NotVisibleType) { // not visible problems hide unused -> remove both
 					int pos= curr.getSourceStart();
 					for (int k= 0; k < importsDecls.size(); k++) {
-						ImportDeclaration decl= (ImportDeclaration) importsDecls.get(k);
+						ImportDeclaration decl= importsDecls.get(k);
 						if (decl.getStartPosition() <= pos && pos < decl.getStartPosition() + decl.getLength()) {
 							if (existingImports.isEmpty() || !existingImports.contains(ASTNodes.asString(decl))) {
 								String name= decl.getName().getFullyQualifiedName();
@@ -2189,7 +2199,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 		IPackageFragment pack= (IPackageFragment) cu.getParent();
 		String content= CodeGeneration.getCompilationUnitContent(cu, fileComment, typeComment, typeContent, lineDelimiter);
 		if (content != null) {
-			ASTParser parser= ASTParser.newParser(AST.JLS3);
+			ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 			parser.setProject(cu.getJavaProject());
 			parser.setSource(content.toCharArray());
 			CompilationUnit unit= (CompilationUnit) parser.createAST(null);
@@ -2241,7 +2251,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 	}
 
 	private void writeSuperInterfaces(StringBuffer buf, ImportsManager imports) {
-		List interfaces= getSuperInterfaces();
+		List<String> interfaces= getSuperInterfaces();
 		int last= interfaces.size() - 1;
 		if (last >= 0) {
 		    if (fTypeKind != INTERFACE_TYPE) {
@@ -2249,7 +2259,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 			} else {
 				buf.append(" extends "); //$NON-NLS-1$
 			}
-			String[] intfs= (String[]) interfaces.toArray(new String[interfaces.size()]);
+			String[] intfs= interfaces.toArray(new String[interfaces.size()]);
 			ITypeBinding[] bindings;
 			if (fCurrType != null) {
 				bindings= TypeContextChecker.resolveSuperInterfaces(intfs, fCurrType, getSuperInterfacesStubTypeContext());
@@ -2500,13 +2510,13 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
 		final ICompilationUnit cu= type.getCompilationUnit();
 		JavaModelUtil.reconcile(cu);
 		IMethod[] typeMethods= type.getMethods();
-		Set handleIds= new HashSet(typeMethods.length);
+		Set<String> handleIds= new HashSet<String>(typeMethods.length);
 		for (int index= 0; index < typeMethods.length; index++)
 			handleIds.add(typeMethods[index].getHandleIdentifier());
-		ArrayList newMethods= new ArrayList();
+		ArrayList<IMethod> newMethods= new ArrayList<IMethod>();
 		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(type.getJavaProject());
 		settings.createComments= isAddComments();
-		ASTParser parser= ASTParser.newParser(AST.JLS3);
+		ASTParser parser= ASTParser.newParser(ASTProvider.SHARED_AST_LEVEL);
 		parser.setResolveBindings(true);
 		parser.setSource(cu);
 		CompilationUnit unit= (CompilationUnit) parser.createAST(new SubProgressMonitor(monitor, 1));
diff --git a/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF
index 7aa3203..8457aee 100644
--- a/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jdt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui.intro;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.jdt/about.properties b/eclipse/plugins/org.eclipse.jdt/about.properties
index e436179..b95eea0 100644
--- a/eclipse/plugins/org.eclipse.jdt/about.properties
+++ b/eclipse/plugins/org.eclipse.jdt/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Java Development Tools\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/jdt
 
diff --git a/eclipse/plugins/org.eclipse.jdt/cheatsheets/HelloWorldSWT.xml b/eclipse/plugins/org.eclipse.jdt/cheatsheets/HelloWorldSWT.xml
index 82b4271..5c00be0 100644
--- a/eclipse/plugins/org.eclipse.jdt/cheatsheets/HelloWorldSWT.xml
+++ b/eclipse/plugins/org.eclipse.jdt/cheatsheets/HelloWorldSWT.xml
@@ -19,25 +19,22 @@
       <command serialization="org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaPerspective)" required="false" translate="">
       </command>
    </item>
-   <item title="Download SWT standalone" dialog="true" skip="false" href="/org.eclipse.platform.doc.isv/guide/swt.htm">
-      <description>
-         Open your Web browser to http://download.eclipse.org/eclipse/downloads/,
-			select the latest release build, and find the <b>SWT Binary and Source</b>
-			download.<br/>
-			<br/>
-			Save the file to your disk; you do not need to extract the archive.
-      </description>
-   </item>
    <item title="Import the SWT project" dialog="true" skip="false" href="/org.eclipse.platform.doc.user/tasks/tasks-importproject.htm">
       <description>
-         Import the SWT project from the main menu via File > Import...,
-			and select <b>Existing Projects into Workspace</b>. Specify the
-			<b>archive</b> file you downloaded and click <b>Finish</b>.<br/>
+         Open the Import wizard from the main menu via <b>File > Import...</b>,
+			and select <b>Plug-in Development > Plug-ins and Fragments</b>. Click <b>Next</b>.<br/><br/>
+			On the <b>Import Plug-ins and Fragments</b> page, select <br/>
+				<b>Import from: </b> The active target platform.<br/>
+				<b>Plug-ins and Fragments to import: </b> Select from all plug-ins and fragments found at specified location.<br/>
+				<b>Import As: </b> Projects with source folders.<br/>
+			Click <b>Next</b>.<br/><br/>
+			On the <b>Selection</b> page, Add <b>org.eclipse.swt.{platform}.{os}.{arch}</b> (for example: org.eclipse.swt.win32.win32.x86 for win32) to <b>Plug-ins and Fragments to Import:</b> list.<br/>
+			Click <b>Finish</b>.<br/>
 			<br/>
-			This will create the org.eclipse.swt project which we will need
+			This will create the org.eclipse.swt.{platform}.{os}.{arch} project which we will need
 			to compile and run the application.
       </description>
-      <command serialization="org.eclipse.ui.file.import(importWizardId=org.eclipse.ui.wizards.import.ExternalProject)" required="false" translate="">
+      <command serialization="org.eclipse.ui.file.import(importWizardId=org.eclipse.pde.ui.PluginImportWizard)" required="false" translate="">
       </command>
    </item>
    <item title="Create a Java project" dialog="true" skip="false" href="/org.eclipse.jdt.doc.user/concepts/concepts-3.htm">
@@ -57,7 +54,7 @@
 			<b>Properties</b>.<br/>
 			<br/>
 			In the <b>Java Build Path</b> page open the <b>Projects</b> tab,
-			add the org.eclipse.swt project, then click <b>OK</b>.
+			add the org.eclipse.swt.{platform}.{os}.{arch} project, then click <b>OK</b>.
       </description>
    </item>
    <item title="Create a class" dialog="true" skip="false" href="/org.eclipse.jdt.doc.user/gettingStarted/qs-9.htm">
diff --git a/eclipse/plugins/org.eclipse.jdt/notice.html b/eclipse/plugins/org.eclipse.jdt/notice.html
index c6af966..dc5aefd 100644
--- a/eclipse/plugins/org.eclipse.jdt/notice.html
+++ b/eclipse/plugins/org.eclipse.jdt/notice.html
@@ -1,79 +1,162 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
+<!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=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head><body lang="EN-US">
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
+<p>February 1, 2011</p>
 
 <h3>Usage Of Content</h3>
 
 <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
    CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
    OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
    NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
    CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-   
-<h3>Applicable Licenses</h3>   
-   
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository ("Repository") in CVS
-   modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-   
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
+
 <ul>
-	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
       and/or Fragments associated with that Feature.</li>
-	<li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>   
- 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
 including, but not limited to the following locations:</p>
 
 <ul>
-	<li>The top-level (root) directory</li>
-	<li>Plug-in and Fragment directories</li>
-	<li>Inside Plug-ins and Fragments packaged as JARs</li>
-	<li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-	<li>Feature directories</li>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
 </ul>
-		
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
 that directory.</p>
 
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
 OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
 
 <ul>
-	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
-	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
 </ul>
 
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
+</ol>
 
 <h3>Cryptography</h3>
 
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-   
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
-</body>
-</html>
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body></html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jface.databinding/META-INF/MANIFEST.MF
index f9e1507..274f3aa 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jface.databinding/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jface.databinding
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java
index 3261536..1aeefc7 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/SWTObservables.java
@@ -94,8 +94,29 @@ public class SWTObservables {
 	 */
 	public static ISWTObservableValue observeDelayedValue(int delay,
 			ISWTObservableValue observable) {
-		return new SWTDelayedObservableValueDecorator(Observables
-				.observeDelayedValue(delay, observable), observable.getWidget());
+		return new SWTDelayedObservableValueDecorator(
+				Observables.observeDelayedValue(delay, observable),
+				observable.getWidget());
+	}
+
+	/**
+	 * Returns an observable value tracking the enabled state of the given
+	 * widget. The supported types are:
+	 * <ul>
+	 * <li>org.eclipse.swt.widgets.Control</li>
+	 * <li>org.eclipse.swt.widgets.Menu</li>
+	 * <li>org.eclipse.swt.widgets.MenuItem</li>
+	 * <li>org.eclipse.swt.widgets.ScrollBar</li>
+	 * <li>org.eclipse.swt.widgets.ToolItem</li>
+	 * </ul>
+	 * 
+	 * @param widget
+	 * @return an observable value tracking the enabled state of the given
+	 *         widget.
+	 * @since 1.5
+	 */
+	public static ISWTObservableValue observeEnabled(Widget widget) {
+		return WidgetProperties.enabled().observe(widget);
 	}
 
 	/**
@@ -108,7 +129,7 @@ public class SWTObservables {
 	 *         control
 	 */
 	public static ISWTObservableValue observeEnabled(Control control) {
-		return WidgetProperties.enabled().observe(control);
+		return observeEnabled((Widget) control);
 	}
 
 	/**
@@ -168,16 +189,40 @@ public class SWTObservables {
 	 * <li>org.eclipse.swt.widgets.Combo</li>
 	 * <li>org.eclipse.swt.custom.CCombo</li>
 	 * <li>org.eclipse.swt.widgets.List</li>
+	 * <li>org.eclipse.swt.widgets.MenuItem (since 1.5)</li>
 	 * <li>org.eclipse.swt.widgets.Scale</li>
 	 * </ul>
 	 * 
+	 * @param widget
+	 * @return observable value
+	 * @throws IllegalArgumentException
+	 *             if <code>control</code> type is unsupported
+	 * @since 1.5
+	 */
+	public static ISWTObservableValue observeSelection(Widget widget) {
+		return WidgetProperties.selection().observe(widget);
+	}
+
+	/**
+	 * Returns an observable observing the selection attribute of the provided
+	 * <code>control</code>. The supported types are:
+	 * <ul>
+	 * <li>org.eclipse.swt.widgets.Button</li>
+	 * <li>org.eclipse.swt.widgets.Combo</li>
+	 * <li>org.eclipse.swt.custom.CCombo</li>
+	 * <li>org.eclipse.swt.widgets.List</li>
+	 * <li>org.eclipse.swt.widgets.Scale</li>
+	 * <li>org.eclipse.swt.widgets.Slider (since 1.5)</li>
+	 * <li>org.eclipse.swt.widgets.Spinner</li>
+	 * </ul>
+	 * 
 	 * @param control
 	 * @return observable value
 	 * @throws IllegalArgumentException
 	 *             if <code>control</code> type is unsupported
 	 */
 	public static ISWTObservableValue observeSelection(Control control) {
-		return WidgetProperties.selection().observe(control);
+		return observeSelection((Widget) control);
 	}
 
 	/**
@@ -185,6 +230,7 @@ public class SWTObservables {
 	 * <code>control</code>. The supported types are:
 	 * <ul>
 	 * <li>org.eclipse.swt.widgets.Spinner</li>
+	 * <li>org.eclipse.swt.widgets.Slider (since 1.5)</li>
 	 * <li>org.eclipse.swt.widgets.Scale</li>
 	 * </ul>
 	 * 
@@ -202,6 +248,7 @@ public class SWTObservables {
 	 * <code>control</code>. The supported types are:
 	 * <ul>
 	 * <li>org.eclipse.swt.widgets.Spinner</li>
+	 * <li>org.eclipse.swt.widgets.Slider (since 1.5)</li>
 	 * <li>org.eclipse.swt.widgets.Scale</li>
 	 * </ul>
 	 * 
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java
index 67f60cd..e9b9dc5 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/swt/WidgetProperties.java
@@ -15,7 +15,6 @@ package org.eclipse.jface.databinding.swt;
 
 import org.eclipse.jface.internal.databinding.swt.ControlBackgroundProperty;
 import org.eclipse.jface.internal.databinding.swt.ControlBoundsProperty;
-import org.eclipse.jface.internal.databinding.swt.ControlEnabledProperty;
 import org.eclipse.jface.internal.databinding.swt.ControlFocusedProperty;
 import org.eclipse.jface.internal.databinding.swt.ControlFontProperty;
 import org.eclipse.jface.internal.databinding.swt.ControlForegroundProperty;
@@ -23,6 +22,7 @@ import org.eclipse.jface.internal.databinding.swt.ControlLocationProperty;
 import org.eclipse.jface.internal.databinding.swt.ControlSizeProperty;
 import org.eclipse.jface.internal.databinding.swt.ControlVisibleProperty;
 import org.eclipse.jface.internal.databinding.swt.WidgetEditableProperty;
+import org.eclipse.jface.internal.databinding.swt.WidgetEnabledProperty;
 import org.eclipse.jface.internal.databinding.swt.WidgetImageProperty;
 import org.eclipse.jface.internal.databinding.swt.WidgetItemsProperty;
 import org.eclipse.jface.internal.databinding.swt.WidgetMaximumProperty;
@@ -46,8 +46,12 @@ import org.eclipse.swt.widgets.Item;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.ScrollBar;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Slider;
 import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Table;
@@ -98,13 +102,15 @@ public class WidgetProperties {
 
 	/**
 	 * Returns a value property for observing the enablement state of a
-	 * {@link Control}.
+	 * {@link Control}, {@link Menu} (since 1.5), {@link MenuItem} (since 1.5),
+	 * {@link ScrollBar} (since 1.5) or {@link ToolItem} (since 1.5).
 	 * 
 	 * @return a value property for observing the enablement state of a
-	 *         {@link Control}.
+	 *         {@link Control}, {@link Menu}, {@link MenuItem},
+	 *         {@link ScrollBar} or {@link ToolItem}.
 	 */
 	public static IWidgetValueProperty enabled() {
-		return new ControlEnabledProperty();
+		return new WidgetEnabledProperty();
 	}
 
 	/**
@@ -171,10 +177,10 @@ public class WidgetProperties {
 
 	/**
 	 * Returns a value property for observing the maximum value of a
-	 * {@link Scale} or {@link Spinner}.
+	 * {@link Scale}, {@link Slider} (since 1.5) or {@link Spinner}.
 	 * 
 	 * @return a value property for observing the maximum value of a
-	 *         {@link Scale} or {@link Spinner}.
+	 *         {@link Scale}, {@link Slider} (since 1.5) or {@link Spinner}.
 	 */
 	public static IWidgetValueProperty maximum() {
 		return new WidgetMaximumProperty();
@@ -193,10 +199,10 @@ public class WidgetProperties {
 
 	/**
 	 * Returns a value property for observing the minimum value of a
-	 * {@link Scale} or {@link Spinner}.
+	 * {@link Scale}, {@link Slider} (since 1.5) or {@link Spinner}.
 	 * 
 	 * @return a value property for observing the minimum value of a
-	 *         {@link Scale} or {@link Spinner}.
+	 *         {@link Scale}, {@link Slider} (since 1.5) or {@link Spinner}.
 	 */
 	public static IWidgetValueProperty minimum() {
 		return new WidgetMinimumProperty();
@@ -205,11 +211,13 @@ public class WidgetProperties {
 	/**
 	 * Returns a value property for observing the selection state of a
 	 * {@link Button}, {@link CCombo}, {@link Combo}, {@link DateTime},
-	 * {@link List}, {@link Scale} or {@link Spinner}.
+	 * {@link List}, {@link MenuItem} (since 1.5), {@link Scale}, {@link Slider}
+	 * (since 1.5) or {@link Spinner}.
 	 * 
 	 * @return a value property for observing the selection state of a
 	 *         {@link Button}, {@link CCombo}, {@link Combo}, {@link DateTime},
-	 *         {@link List}, {@link Scale} or {@link Spinner}.
+	 *         {@link List}, {@link MenuItem}, {@link Scale}, {@link Slider} or
+	 *         {@link Spinner}.
 	 */
 	public static IWidgetValueProperty selection() {
 		return new WidgetSelectionProperty();
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java
index 188dd07..2345369 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListContentProvider.java
@@ -58,9 +58,8 @@ public class ObservableListContentProvider implements
 		}
 
 		protected void checkInput(Object input) {
-			Assert
-					.isTrue(input instanceof IObservableList,
-							"This content provider only works with input of type IObservableList"); //$NON-NLS-1$
+			Assert.isTrue(input instanceof IObservableList,
+					"This content provider only works with input of type IObservableList"); //$NON-NLS-1$
 		}
 
 		protected void addCollectionChangeListener(
@@ -175,6 +174,18 @@ public class ObservableListContentProvider implements
 		return impl.getElements(inputElement);
 	}
 
+	/**
+	 * Disposes of this content provider. This is called by the viewer when a
+	 * content provider is replaced, or when the viewer itself is disposed.
+	 * <p>
+	 * The viewer should not be updated during this call, as it is in the
+	 * process of being disposed.
+	 * </p>
+	 * <p>
+	 * <em>Note:</em> Data binding content providers become unusable on
+	 * disposal.
+	 * </p>
+	 */
 	public void dispose() {
 		impl.dispose();
 	}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListTreeContentProvider.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListTreeContentProvider.java
index b79296a..fc94004 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListTreeContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableListTreeContentProvider.java
@@ -219,6 +219,18 @@ public class ObservableListTreeContentProvider implements ITreeContentProvider {
 		return impl.getParent(element);
 	}
 
+	/**
+	 * Disposes of this content provider. This is called by the viewer when a
+	 * content provider is replaced, or when the viewer itself is disposed.
+	 * <p>
+	 * The viewer should not be updated during this call, as it is in the
+	 * process of being disposed.
+	 * </p>
+	 * <p>
+	 * <em>Note:</em> Data binding content providers become unusable on
+	 * disposal.
+	 * </p>
+	 */
 	public void dispose() {
 		impl.dispose();
 	}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java
index 4f67c85..3240eb2 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetContentProvider.java
@@ -45,9 +45,8 @@ public class ObservableSetContentProvider implements IStructuredContentProvider
 		}
 
 		protected void checkInput(Object input) {
-			Assert
-					.isTrue(input instanceof IObservableSet,
-							"This content provider only works with input of type IObservableSet"); //$NON-NLS-1$
+			Assert.isTrue(input instanceof IObservableSet,
+					"This content provider only works with input of type IObservableSet"); //$NON-NLS-1$
 		}
 
 		protected void addCollectionChangeListener(
@@ -109,6 +108,18 @@ public class ObservableSetContentProvider implements IStructuredContentProvider
 		return impl.getElements(inputElement);
 	}
 
+	/**
+	 * Disposes of this content provider. This is called by the viewer when a
+	 * content provider is replaced, or when the viewer itself is disposed.
+	 * <p>
+	 * The viewer should not be updated during this call, as it is in the
+	 * process of being disposed.
+	 * </p>
+	 * <p>
+	 * <em>Note:</em> Data binding content providers become unusable on
+	 * disposal.
+	 * </p>
+	 */
 	public void dispose() {
 		impl.dispose();
 	}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetTreeContentProvider.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetTreeContentProvider.java
index 593aa2c..2ca876c 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetTreeContentProvider.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ObservableSetTreeContentProvider.java
@@ -159,6 +159,18 @@ public class ObservableSetTreeContentProvider implements ITreeContentProvider {
 		return impl.getParent(element);
 	}
 
+	/**
+	 * Disposes of this content provider. This is called by the viewer when a
+	 * content provider is replaced, or when the viewer itself is disposed.
+	 * <p>
+	 * The viewer should not be updated during this call, as it is in the
+	 * process of being disposed.
+	 * </p>
+	 * <p>
+	 * <em>Note:</em> Data binding content providers become unusable on
+	 * disposal.
+	 * </p>
+	 */
 	public void dispose() {
 		impl.dispose();
 	}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/wizard/package.html b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/wizard/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/CTabItemTooltipTextProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/CTabItemTooltipTextProperty.java
index f5be5d8..790fda2 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/CTabItemTooltipTextProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/CTabItemTooltipTextProperty.java
@@ -24,7 +24,7 @@ public class CTabItemTooltipTextProperty extends WidgetStringValueProperty {
 	}
 
 	void doSetStringValue(Object source, String value) {
-		((CTabItem) source).setToolTipText(value == null ? "" : (String) value); //$NON-NLS-1$
+		((CTabItem) source).setToolTipText(value);
 	}
 
 	public String toString() {
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuEnabledProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuEnabledProperty.java
new file mode 100644
index 0000000..05e3c25
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuEnabledProperty.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 280157)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.widgets.Menu;
+
+/**
+ * 
+ */
+public class MenuEnabledProperty extends WidgetBooleanValueProperty {
+	public boolean doGetBooleanValue(Object source) {
+		return ((Menu) source).getEnabled();
+	}
+
+	void doSetBooleanValue(Object source, boolean value) {
+		((Menu) source).setEnabled(value);
+	}
+
+	public String toString() {
+		return "Menu.enabled <boolean>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuItemEnabledProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuItemEnabledProperty.java
new file mode 100644
index 0000000..9340e00
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuItemEnabledProperty.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 280157)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * 
+ */
+public class MenuItemEnabledProperty extends WidgetBooleanValueProperty {
+	public boolean doGetBooleanValue(Object source) {
+		return ((MenuItem) source).getEnabled();
+	}
+
+	void doSetBooleanValue(Object source, boolean value) {
+		((MenuItem) source).setEnabled(value);
+	}
+
+	public String toString() {
+		return "MenuItem.enabled <boolean>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuItemSelectionProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuItemSelectionProperty.java
new file mode 100644
index 0000000..ae3182d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/MenuItemSelectionProperty.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 194734)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * 
+ */
+public class MenuItemSelectionProperty extends WidgetBooleanValueProperty {
+	/**
+	 * 
+	 */
+	public MenuItemSelectionProperty() {
+		super(SWT.Selection);
+	}
+
+	boolean doGetBooleanValue(Object source) {
+		return ((MenuItem) source).getSelection();
+	}
+
+	void doSetBooleanValue(Object source, boolean value) {
+		((MenuItem) source).setSelection(value);
+	}
+
+	public String toString() {
+		return "MenuItem.selection <Boolean>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ScrollBarEnabledProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ScrollBarEnabledProperty.java
new file mode 100644
index 0000000..241c5c9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ScrollBarEnabledProperty.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 280157)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.widgets.ScrollBar;
+
+/**
+ * 
+ */
+public class ScrollBarEnabledProperty extends WidgetBooleanValueProperty {
+	public boolean doGetBooleanValue(Object source) {
+		return ((ScrollBar) source).getEnabled();
+	}
+
+	void doSetBooleanValue(Object source, boolean value) {
+		((ScrollBar) source).setEnabled(value);
+	}
+
+	public String toString() {
+		return "ScrollBar.enabled <boolean>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderMaximumProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderMaximumProperty.java
new file mode 100644
index 0000000..fa5ce5a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderMaximumProperty.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 299123)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.widgets.Slider;
+
+/**
+ * 
+ */
+public class SliderMaximumProperty extends WidgetIntValueProperty {
+	int doGetIntValue(Object source) {
+		return ((Slider) source).getMaximum();
+	}
+
+	void doSetIntValue(Object source, int value) {
+		((Slider) source).setMaximum(value);
+	}
+
+	public String toString() {
+		return "Slider.maximum <int>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderMinimumProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderMinimumProperty.java
new file mode 100644
index 0000000..6f36a36
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderMinimumProperty.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 299123)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.widgets.Slider;
+
+/**
+ * 
+ */
+public class SliderMinimumProperty extends WidgetIntValueProperty {
+	int doGetIntValue(Object source) {
+		return ((Slider) source).getMinimum();
+	}
+
+	void doSetIntValue(Object source, int value) {
+		((Slider) source).setMinimum(value);
+	}
+
+	public String toString() {
+		return "Slider.minimum <int>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderSelectionProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderSelectionProperty.java
new file mode 100644
index 0000000..99757ce
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/SliderSelectionProperty.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 299123)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Slider;
+
+/**
+ * 
+ */
+public class SliderSelectionProperty extends WidgetIntValueProperty {
+	/**
+	 * 
+	 */
+	public SliderSelectionProperty() {
+		super(SWT.Selection);
+	}
+
+	int doGetIntValue(Object source) {
+		return ((Slider) source).getSelection();
+	}
+
+	void doSetIntValue(Object source, int value) {
+		((Slider) source).setSelection(value);
+	}
+
+	public String toString() {
+		return "Slider.selection <int>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TabItemTooltipTextProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TabItemTooltipTextProperty.java
index 90fe5cd..d773fd9 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TabItemTooltipTextProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TabItemTooltipTextProperty.java
@@ -24,7 +24,7 @@ public class TabItemTooltipTextProperty extends WidgetStringValueProperty {
 	}
 
 	void doSetStringValue(Object source, String value) {
-		((TabItem) source).setToolTipText(value == null ? "" : value); //$NON-NLS-1$
+		((TabItem) source).setToolTipText(value);
 	}
 
 	public String toString() {
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TableColumnTooltipTextProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TableColumnTooltipTextProperty.java
index f828380..bf88296 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TableColumnTooltipTextProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TableColumnTooltipTextProperty.java
@@ -24,7 +24,7 @@ public class TableColumnTooltipTextProperty extends WidgetStringValueProperty {
 	}
 
 	void doSetStringValue(Object source, String value) {
-		((TableColumn) source).setToolTipText(value == null ? "" : value); //$NON-NLS-1$
+		((TableColumn) source).setToolTipText(value);
 	}
 
 	public String toString() {
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ToolItemEnabledProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ToolItemEnabledProperty.java
new file mode 100644
index 0000000..9a38502
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ToolItemEnabledProperty.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 280157)
+ ******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.swt.widgets.ToolItem;
+
+/**
+ * 
+ */
+public class ToolItemEnabledProperty extends WidgetBooleanValueProperty {
+	public boolean doGetBooleanValue(Object source) {
+		return ((ToolItem) source).getEnabled();
+	}
+
+	void doSetBooleanValue(Object source, boolean value) {
+		((ToolItem) source).setEnabled(value);
+	}
+
+	public String toString() {
+		return "ToolItem.enabled <boolean>"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ToolItemTooltipTextProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ToolItemTooltipTextProperty.java
index ead5d17..7b19632 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ToolItemTooltipTextProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/ToolItemTooltipTextProperty.java
@@ -24,7 +24,7 @@ public class ToolItemTooltipTextProperty extends WidgetStringValueProperty {
 	}
 
 	void doSetStringValue(Object source, String value) {
-		((ToolItem) source).setToolTipText(value == null ? "" : value); //$NON-NLS-1$
+		((ToolItem) source).setToolTipText(value);
 	}
 
 	public String toString() {
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TrayItemTooltipTextProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TrayItemTooltipTextProperty.java
index be1a8ff..25c3f89 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TrayItemTooltipTextProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TrayItemTooltipTextProperty.java
@@ -24,7 +24,7 @@ public class TrayItemTooltipTextProperty extends WidgetStringValueProperty {
 	}
 
 	void doSetStringValue(Object source, String value) {
-		((TrayItem) source).setToolTipText(value == null ? "" : value); //$NON-NLS-1$
+		((TrayItem) source).setToolTipText(value);
 	}
 
 	public String toString() {
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TreeColumnTooltipTextProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TreeColumnTooltipTextProperty.java
index b2e5e2c..18ab0d1 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TreeColumnTooltipTextProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/TreeColumnTooltipTextProperty.java
@@ -24,7 +24,7 @@ public class TreeColumnTooltipTextProperty extends WidgetStringValueProperty {
 	}
 
 	void doSetStringValue(Object source, String value) {
-		((TreeColumn) source).setToolTipText(value == null ? "" : value); //$NON-NLS-1$
+		((TreeColumn) source).setToolTipText(value);
 	}
 
 	public String toString() {
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetEnabledProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetEnabledProperty.java
new file mode 100644
index 0000000..d49112f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetEnabledProperty.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Matthew Hall and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Matthew Hall - initial API and implementation (bug 264286)
+ *******************************************************************************/
+
+package org.eclipse.jface.internal.databinding.swt;
+
+import org.eclipse.core.databinding.property.value.IValueProperty;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.ToolItem;
+
+/**
+ * 
+ */
+public class WidgetEnabledProperty extends WidgetDelegatingValueProperty {
+	IValueProperty control;
+	IValueProperty menu;
+	IValueProperty menuItem;
+	IValueProperty scrollBar;
+	IValueProperty toolItem;
+
+	/**
+	 * 
+	 */
+	public WidgetEnabledProperty() {
+		super(Boolean.TYPE);
+	}
+
+	protected IValueProperty doGetDelegate(Object source) {
+		if (source instanceof Control) {
+			if (control == null)
+				control = new ControlEnabledProperty();
+			return control;
+		}
+		if (source instanceof Menu) {
+			if (menu == null)
+				menu = new MenuEnabledProperty();
+			return menu;
+		}
+		if (source instanceof MenuItem) {
+			if (menuItem == null)
+				menuItem = new MenuItemEnabledProperty();
+			return menuItem;
+		}
+		if (source instanceof ScrollBar) {
+			if (scrollBar == null)
+				scrollBar = new ScrollBarEnabledProperty();
+			return scrollBar;
+		}
+		if (source instanceof ToolItem) {
+			if (toolItem == null)
+				toolItem = new ToolItemEnabledProperty();
+			return toolItem;
+		}
+		throw notSupported(source);
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMaximumProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMaximumProperty.java
index 27b0b67..ee1d67e 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMaximumProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMaximumProperty.java
@@ -13,6 +13,7 @@ package org.eclipse.jface.internal.databinding.swt;
 
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Slider;
 import org.eclipse.swt.widgets.Spinner;
 
 /**
@@ -21,6 +22,7 @@ import org.eclipse.swt.widgets.Spinner;
  */
 public class WidgetMaximumProperty extends WidgetDelegatingValueProperty {
 	private IValueProperty scale;
+	private IValueProperty slider;
 	private IValueProperty spinner;
 
 	/**
@@ -36,6 +38,12 @@ public class WidgetMaximumProperty extends WidgetDelegatingValueProperty {
 				scale = new ScaleMaximumProperty();
 			return scale;
 		}
+		if (source instanceof Slider) {
+			if (slider == null) {
+				slider = new SliderMaximumProperty();
+			}
+			return slider;
+		}
 		if (source instanceof Spinner) {
 			if (spinner == null)
 				spinner = new SpinnerMaximumProperty();
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMinimumProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMinimumProperty.java
index f1b3715..efa8539 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMinimumProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetMinimumProperty.java
@@ -13,6 +13,7 @@ package org.eclipse.jface.internal.databinding.swt;
 
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Slider;
 import org.eclipse.swt.widgets.Spinner;
 
 /**
@@ -21,6 +22,7 @@ import org.eclipse.swt.widgets.Spinner;
  */
 public class WidgetMinimumProperty extends WidgetDelegatingValueProperty {
 	private IValueProperty scale;
+	private IValueProperty slider;
 	private IValueProperty spinner;
 
 	/**
@@ -36,6 +38,12 @@ public class WidgetMinimumProperty extends WidgetDelegatingValueProperty {
 				scale = new ScaleMinimumProperty();
 			return scale;
 		}
+		if (source instanceof Slider) {
+			if (slider == null) {
+				slider = new SliderMinimumProperty();
+			}
+			return slider;
+		}
 		if (source instanceof Spinner) {
 			if (spinner == null)
 				spinner = new SpinnerMinimumProperty();
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetSelectionProperty.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetSelectionProperty.java
index 094aa4f..7a5ca0d 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetSelectionProperty.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/WidgetSelectionProperty.java
@@ -18,7 +18,9 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.DateTime;
 import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Slider;
 import org.eclipse.swt.widgets.Spinner;
 
 /**
@@ -32,7 +34,9 @@ public final class WidgetSelectionProperty extends
 	private IValueProperty combo;
 	private IValueProperty dateTime;
 	private IValueProperty list;
+	private IValueProperty menuItem;
 	private IValueProperty scale;
+	private IValueProperty slider;
 	private IValueProperty spinner;
 
 	protected IValueProperty doGetDelegate(Object source) {
@@ -61,11 +65,21 @@ public final class WidgetSelectionProperty extends
 				list = new ListSelectionProperty();
 			return list;
 		}
+		if (source instanceof MenuItem) {
+			if (menuItem == null)
+				menuItem = new MenuItemSelectionProperty();
+			return menuItem;
+		}
 		if (source instanceof Scale) {
 			if (scale == null)
 				scale = new ScaleSelectionProperty();
 			return scale;
 		}
+		if (source instanceof Slider) {
+			if (slider == null)
+				slider = new SliderSelectionProperty();
+			return slider;
+		}
 		if (source instanceof Spinner) {
 			if (spinner == null)
 				spinner = new SpinnerSelectionProperty();
diff --git a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java
index 73fcece..5052d94 100644
--- a/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java
+++ b/eclipse/plugins/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/viewers/TreeViewerUpdater.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     Matthew Hall - initial API and implementation (bug 207858)
- *     Matthew Hall - bugs 226765, 230296, 226292
+ *     Matthew Hall - bugs 226765, 230296, 226292, 312926
  ******************************************************************************/
 
 package org.eclipse.jface.internal.databinding.viewers;
@@ -74,6 +74,7 @@ public class TreeViewerUpdater {
 			int position) {
 		if (treeViewer != null && isElementOrderPreserved()) {
 			treeViewer.replace(parent, position, newElement);
+			treeViewer.refresh(newElement);
 		} else {
 			remove(parent, oldElement, position);
 			insert(parent, newElement, position);
diff --git a/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF
index 90c54ec..d5eee90 100644
--- a/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jface.text/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jface.text
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionSummary.java b/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionSummary.java
index 7dea0cd..eccbeb4 100644
--- a/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionSummary.java
+++ b/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionSummary.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,9 +19,7 @@ import java.util.Map;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
-import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.ISynchronizable;
 import org.eclipse.jface.text.Position;
 import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.IAnnotationAccess;
@@ -82,7 +80,6 @@ class ProjectionSummary {
 
 
 	private ProjectionViewer fProjectionViewer;
-	private IAnnotationModel fAnnotationModel;
 	private IAnnotationAccess fAnnotationAccess;
 	private List fConfiguredAnnotationTypes;
 
@@ -148,60 +145,37 @@ class ProjectionSummary {
 	}
 
 	private void internalUpdateSummaries(IProgressMonitor monitor) {
-
-		Object previousLockObject= null;
-		fAnnotationModel= fProjectionViewer.getVisualAnnotationModel();
-		if (fAnnotationModel == null)
+		IAnnotationModel visualAnnotationModel= fProjectionViewer.getVisualAnnotationModel();
+		if (visualAnnotationModel == null)
 			return;
 
-		try {
-
-
-			IDocument document= fProjectionViewer.getDocument();
-			if (document instanceof ISynchronizable && fAnnotationModel instanceof ISynchronizable) {
-				ISynchronizable sync= (ISynchronizable) fAnnotationModel;
-				previousLockObject= sync.getLockObject();
-				sync.setLockObject(((ISynchronizable) document).getLockObject());
-			}
-
-
-			removeSummaries(monitor);
-
-			if (isCanceled(monitor))
-				return;
-
-			createSummaries(monitor);
-
-		} finally {
+		removeSummaries(monitor, visualAnnotationModel);
 
-			if (fAnnotationModel instanceof ISynchronizable) {
-				ISynchronizable sync= (ISynchronizable) fAnnotationModel;
-				sync.setLockObject(previousLockObject);
-			}
-			fAnnotationModel= null;
+		if (isCanceled(monitor))
+			return;
 
-		}
+		createSummaries(monitor, visualAnnotationModel);
 	}
 
 	private boolean isCanceled(IProgressMonitor monitor) {
 		return monitor != null && monitor.isCanceled();
 	}
 
-	private void removeSummaries(IProgressMonitor monitor) {
+	private void removeSummaries(IProgressMonitor monitor, IAnnotationModel visualAnnotationModel) {
 		IAnnotationModelExtension extension= null;
 		List bags= null;
 
-		if (fAnnotationModel instanceof IAnnotationModelExtension) {
-			extension= (IAnnotationModelExtension) fAnnotationModel;
+		if (visualAnnotationModel instanceof IAnnotationModelExtension) {
+			extension= (IAnnotationModelExtension)visualAnnotationModel;
 			bags= new ArrayList();
 		}
 
-		Iterator e= fAnnotationModel.getAnnotationIterator();
+		Iterator e= visualAnnotationModel.getAnnotationIterator();
 		while (e.hasNext()) {
 			Annotation annotation= (Annotation) e.next();
 			if (annotation instanceof AnnotationBag) {
 				if (bags == null)
-					fAnnotationModel.removeAnnotation(annotation);
+					visualAnnotationModel.removeAnnotation(annotation);
 				else
 					bags.add(annotation);
 			}
@@ -218,7 +192,7 @@ class ProjectionSummary {
 		}
 	}
 
-	private void createSummaries(IProgressMonitor monitor) {
+	private void createSummaries(IProgressMonitor monitor, IAnnotationModel visualAnnotationModel) {
 		ProjectionAnnotationModel model= fProjectionViewer.getProjectionAnnotationModel();
 		if (model == null)
 			return;
@@ -245,8 +219,8 @@ class ProjectionSummary {
 		}
 
 		if (additions.size() > 0) {
-			if (fAnnotationModel instanceof IAnnotationModelExtension) {
-				IAnnotationModelExtension extension= (IAnnotationModelExtension) fAnnotationModel;
+			if (visualAnnotationModel instanceof IAnnotationModelExtension) {
+				IAnnotationModelExtension extension= (IAnnotationModelExtension)visualAnnotationModel;
 				if (!isCanceled(monitor))
 					extension.replaceAnnotations(null, additions);
 			} else {
@@ -256,7 +230,7 @@ class ProjectionSummary {
 					Position position= (Position) additions.get(bag);
 					if (isCanceled(monitor))
 						return;
-					fAnnotationModel.addAnnotation(bag, position);
+					visualAnnotationModel.addAnnotation(bag, position);
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java b/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java
index 6aedcf3..02e0145 100644
--- a/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java
+++ b/eclipse/plugins/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java
@@ -1325,7 +1325,7 @@ public class ProjectionViewer extends SourceViewer implements ITextViewerExtensi
 		IRegion rangeIndication= getRangeIndication();
 		if (moveCursor && fProjectionAnnotationModel != null && (rangeIndication == null || offset != rangeIndication.getOffset() || length != rangeIndication.getLength())) {
 			List expand= new ArrayList(2);
-			// expand the immediate effected collapsed regions
+			// expand the immediate affected collapsed regions
 			Iterator iterator= fProjectionAnnotationModel.getAnnotationIterator();
 			while (iterator.hasNext()) {
 				ProjectionAnnotation annotation= (ProjectionAnnotation)iterator.next();
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
index 2894c7b..a7733f5 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Avaloq Evolution AG and others.
+ * Copyright (c) 2009, 2010 Avaloq Evolution AG and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java
index 620829e..c81636c 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/html/HTMLPrinter.java
@@ -24,6 +24,8 @@ import org.eclipse.swt.widgets.Listener;
 
 import org.eclipse.jface.util.Util;
 
+import org.eclipse.jface.text.DefaultInformationControl;
+
 /**
  * Provides a set of convenience methods for creating HTML pages.
  * <p>
@@ -97,6 +99,17 @@ public class HTMLPrinter {
 		return buffer.toString();
 	}
 
+	/**
+	 * Escapes reserved HTML characters in the given string.
+	 * <p>
+	 * <b>Warning:</b> Does not preserve whitespace.
+	 * 
+	 * @param content the input string
+	 * @return the string with escaped characters
+	 * 
+	 * @see #convertToHTMLContentWithWhitespace(String) for use in browsers
+	 * @see #addPreFormatted(StringBuffer, String) for rendering with an {@link HTML2TextReader}
+	 */
 	public static String convertToHTMLContent(String content) {
 		content= replace(content, '&', "&"); //$NON-NLS-1$
 		content= replace(content, '"', """); //$NON-NLS-1$
@@ -104,6 +117,28 @@ public class HTMLPrinter {
 		return replace(content, '>', ">"); //$NON-NLS-1$
 	}
 
+	/**
+	 * Escapes reserved HTML characters in the given string
+	 * and returns them in a way that preserves whitespace in a browser.
+	 * <p>
+	 * <b>Warning:</b> Whitespace will not be preserved when rendered with an {@link HTML2TextReader}
+	 * (e.g. in a {@link DefaultInformationControl} that renders simple HTML).
+
+	 * @param content the input string
+	 * @return the processed string
+	 * 
+	 * @see #addPreFormatted(StringBuffer, String)
+	 * @see #convertToHTMLContent(String)
+	 * @since 3.7
+	 */
+	public static String convertToHTMLContentWithWhitespace(String content) {
+		content= replace(content, '&', "&"); //$NON-NLS-1$
+		content= replace(content, '"', """); //$NON-NLS-1$
+		content= replace(content, '<', "<"); //$NON-NLS-1$
+		content= replace(content, '>', ">"); //$NON-NLS-1$
+		return "<span style='white-space:pre'>" + content + "</span>"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
 	public static String read(Reader rd) {
 
 		StringBuffer buffer= new StringBuffer();
@@ -277,6 +312,28 @@ public class HTMLPrinter {
 		}
 	}
 
+	/**
+	 * Appends a string and keeps its whitespace and newlines.
+	 * <p>
+	 * <b>Warning:</b> This starts a new paragraph when rendered in a browser, but
+	 * it doesn't starts a new paragraph when rendered with a {@link HTML2TextReader}
+	 * (e.g. in a {@link DefaultInformationControl} that renders simple HTML).
+	 * 
+	 * @param buffer the output buffer
+	 * @param preFormatted the string that should be rendered with whitespace preserved
+	 * 
+	 * @see #convertToHTMLContent(String)
+	 * @see #convertToHTMLContentWithWhitespace(String)
+	 * @since 3.7
+	 */
+	public static void addPreFormatted(StringBuffer buffer, String preFormatted) {
+		if (preFormatted != null) {
+			buffer.append("<pre>"); //$NON-NLS-1$
+			buffer.append(preFormatted);
+			buffer.append("</pre>"); //$NON-NLS-1$
+		}
+	}
+
 	public static void addParagraph(StringBuffer buffer, Reader paragraphReader) {
 		if (paragraphReader != null)
 			addParagraph(buffer, read(paragraphReader));
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/CompletionProposalPopup2.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/CompletionProposalPopup2.java
index 6a9ba79..712b33e 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/CompletionProposalPopup2.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/CompletionProposalPopup2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,6 +90,8 @@ class CompletionProposalPopup2 implements IContentAssistListener2 {
 	private IDocumentListener fDocumentListener;
 	/** Reentrance count for <code>filterProposals</code> */
 	private long fInvocationCounter= 0;
+	/** Holds the last value of {@link #fInvocationCounter} that has been processed */
+	private long fInvocationProcessedCounter= 0;
 	/** The filter list of proposals */
 	private ICompletionProposal[] fFilteredProposals;
 	/** The computed list of proposals */
@@ -347,13 +349,21 @@ class CompletionProposalPopup2 implements IContentAssistListener2 {
 	 * Takes the selected proposal and applies it.
 	 *
 	 * @param stateMask the state mask
+	 * @return <code>true</code> iff a proposal has been inserted
 	 * @since 2.1
 	 */
-	private void selectProposalWithMask(int stateMask) {
+	private boolean selectProposalWithMask(int stateMask) {
+		if (fInvocationCounter != fInvocationProcessedCounter)
+			if (!doFilterProposals())
+				return false;
+			
 		ICompletionProposal p= getSelectedProposal();
 		hide();
-		if (p != null)
+		if (p != null) {
 			insertProposal(p, (char) 0, stateMask, fViewer.getSelectedRange().x);
+			return true;
+		}
+		return false;
 	}
 
 	/**
@@ -758,8 +768,7 @@ class CompletionProposalPopup2 implements IContentAssistListener2 {
 				case '\n': // Ctrl-Enter on w2k
 				case '\r': // Enter
 					if ((e.stateMask & SWT.CTRL) == 0) {
-						e.doit= false;
-						selectProposalWithMask(e.stateMask);
+						e.doit= !selectProposalWithMask(e.stateMask);
 					}
 					break;
 
@@ -776,13 +785,8 @@ class CompletionProposalPopup2 implements IContentAssistListener2 {
 					char[] triggers= t.getTriggerCharacters();
 					if (contains(triggers, key)) {
 						hide();
-						if (key == ';') {
-							e.doit= true;
-							insertProposal(p, (char) 0, e.stateMask, fViewer.getSelectedRange().x);
-						} else {
-							e.doit= false;
-							insertProposal(p, key, e.stateMask, fViewer.getSelectedRange().x);
-						}
+						e.doit= false;
+						insertProposal(p, key, e.stateMask, fViewer.getSelectedRange().x);
 					}
 				}
 			}
@@ -845,8 +849,7 @@ class CompletionProposalPopup2 implements IContentAssistListener2 {
 	}
 
 	/**
-	 * Filters the displayed proposal based on the given cursor position and the
-	 * offset of the original invocation of the content assistant.
+	 * Posts an async runnable to filter displayed proposals.
 	 */
 	private void filterProposals() {
 		++ fInvocationCounter;
@@ -855,30 +858,48 @@ class CompletionProposalPopup2 implements IContentAssistListener2 {
 			long fCounter= fInvocationCounter;
 			public void run() {
 
-				if (fCounter != fInvocationCounter) return;
-
-				int offset= fViewer.getSelectedRange().x;
-				ICompletionProposal[] proposals= null;
-				try  {
-					if (offset > -1) {
-						DocumentEvent event= TextUtilities.mergeProcessedDocumentEvents(fDocumentEvents);
-						proposals= computeFilteredProposals(offset, event);
-					}
-				} catch (BadLocationException x)  {
-				} finally  {
-					fDocumentEvents.clear();
-				}
-				fFilterOffset= offset;
+				if (fCounter != fInvocationCounter)
+					return;
+				if (fInvocationProcessedCounter == fInvocationCounter)
+					return;
 
-				if (proposals != null && proposals.length > 0)
-					setProposals(proposals);
-				else
-					hide();
+				doFilterProposals();
 			}
 		});
 	}
 
 	/**
+	 * Filters the displayed proposal based on the given cursor position and the
+	 * offset of the original invocation of the content assistant.
+	 * 
+	 * @return <code>true</code> if there are still proposals left, <code>false</code> if the popup has been closed
+	 * @since 3.7
+	 */
+	public boolean doFilterProposals() {
+		fInvocationProcessedCounter= fInvocationCounter;
+		int offset= fViewer.getSelectedRange().x;
+		ICompletionProposal[] proposals= null;
+		try  {
+			if (offset > -1) {
+				DocumentEvent event= TextUtilities.mergeProcessedDocumentEvents(fDocumentEvents);
+				proposals= computeFilteredProposals(offset, event);
+			}
+		} catch (BadLocationException x)  {
+		} finally  {
+			fDocumentEvents.clear();
+		}
+		fFilterOffset= offset;
+	
+		if (proposals != null && proposals.length > 0) {
+			setProposals(proposals);
+			return true;
+		} else {
+			hide();
+			return false;
+		}
+	}
+
+	/**
 	 * Computes the subset of already computed propsals that are still valid for
 	 * the given offset.
 	 *
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/ContentAssistant2.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/ContentAssistant2.java
index d6a6cd2..823674e 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/ContentAssistant2.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/link/contentassist/ContentAssistant2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,8 @@ import org.eclipse.swt.widgets.Widget;
 
 import org.eclipse.core.runtime.Assert;
 
+import org.eclipse.jface.util.OpenStrategy;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.DefaultInformationControl;
 import org.eclipse.jface.text.IEventConsumer;
@@ -825,9 +827,10 @@ public class ContentAssistant2 implements IContentAssistant, IContentAssistantEx
 	}
 
 	/**
-	 * Installs and uninstall the listeners needed for auto-activation.
-	 * @param start <code>true</code> if listeners must be installed,
-	 * 	<code>false</code> if they must be removed
+	 * Installs and uninstall the listeners needed for auto activation.
+	 * 
+	 * @param start <code>true</code> if listeners must be installed, <code>false</code> if they
+	 *            must be removed
 	 * @since 2.0
 	 */
 	private void manageAutoActivation(boolean start) {
@@ -1013,13 +1016,9 @@ public class ContentAssistant2 implements IContentAssistant, IContentAssistantEx
 		fInternalListener= new InternalListener();
 
 		AdditionalInfoController2 controller= null;
-		if (fInformationControlCreator != null) {
-			int delay= fAutoActivationDelay;
-			if (delay == 0)
-				delay= DEFAULT_AUTO_ACTIVATION_DELAY;
-			delay= Math.round(delay * 1.5f);
-			controller= new AdditionalInfoController2(fInformationControlCreator, delay);
-		}
+		if (fInformationControlCreator != null)
+			controller= new AdditionalInfoController2(fInformationControlCreator, OpenStrategy.getPostSelectionDelay());
+
 		fContextInfoPopup= new ContextInformationPopup2(this, fViewer);
 		fProposalPopup= new CompletionProposalPopup2(this, fViewer, controller);
 
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/revisions/package.html b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/revisions/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/source/package.html b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/source/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControl.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControl.java
index 861d2a0..4d0c8ec 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControl.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControl.java
@@ -241,8 +241,7 @@ public abstract class AbstractInformationControl implements IInformationControl,
 		fStatusLabel.setFont(fStatusLabelFont);
 		
 		fStatusLabelForeground= new Color(fStatusLabel.getDisplay(), Colors.blend(background.getRGB(), foreground.getRGB(), 0.56f));
-		fStatusLabel.setForeground(fStatusLabelForeground);
-		fStatusLabel.setBackground(background);
+		setColor(fStatusLabel, fStatusLabelForeground, background);
 		setColor(fStatusComposite, foreground, background);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControlManager.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControlManager.java
index e613179..9149273 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControlManager.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/AbstractInformationControlManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -615,6 +615,17 @@ abstract public class AbstractInformationControlManager {
 	}
 
 	/**
+	 * Tells whether the control takes focus when visible.
+	 * 
+	 * @return <code>true</code> if the control takes focus when visible, <code>false</code>
+	 *         otherwise
+	 * @since 3.7
+	 */
+	protected boolean isTakingFocusWhenVisible() {
+		return fTakesFocusWhenVisible;
+	}
+
+	/**
 	 * Handles the disposal of the subject control. By default, the information control
 	 * is disposed by calling <code>disposeInformationControl</code>. Subclasses may extend
 	 * this method.
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/DefaultTextDoubleClickStrategy.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/DefaultTextDoubleClickStrategy.java
index a30b1d6..46c37dc 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/DefaultTextDoubleClickStrategy.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/DefaultTextDoubleClickStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,9 +12,11 @@
 package org.eclipse.jface.text;
 
 import java.text.CharacterIterator;
+import java.util.Locale;
 
 import com.ibm.icu.text.BreakIterator;
 
+
 /**
  * Standard implementation of
  * {@link org.eclipse.jface.text.ITextDoubleClickStrategy}.
@@ -166,12 +168,28 @@ public class DefaultTextDoubleClickStrategy implements ITextDoubleClickStrategy
 	 */
 	private DocumentCharacterIterator fDocIter= new DocumentCharacterIterator();
 
+	/**
+	 * The locale specific word break iterator.
+	 * @since 3.7
+	 */
+	private BreakIterator fWordBreakIterator;
+
+	/**
+	 * The POSIX word break iterator.
+	 * <p>
+	 * Used to workaround ICU bug not treating '.' as word boundary, see
+	 * http://bugs.icu-project.org/trac/ticket/8371 for details.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	private BreakIterator fPOSIXWordBreakIterator;
+
 
 	/**
 	 * Creates a new default text double click strategy.
 	 */
 	public DefaultTextDoubleClickStrategy() {
-		super();
 	}
 
 	/*
@@ -196,7 +214,7 @@ public class DefaultTextDoubleClickStrategy implements ITextDoubleClickStrategy
 	/**
 	 * Tries to find a suitable double click selection for the given offset.
 	 * <p>
-	 * <strong>Note:</> This method must return <code>null</code> if it simply selects the word at
+	 * <strong>Note:</strong> This method must return <code>null</code> if it simply selects the word at
 	 * the given offset.
 	 * </p>
 	 * 
@@ -218,6 +236,48 @@ public class DefaultTextDoubleClickStrategy implements ITextDoubleClickStrategy
 	 * @since 3.5
 	 */
 	protected IRegion findWord(IDocument document, int offset) {
+		return findWord(document, offset, getWordBreakIterator());
+	}
+
+	/**
+	 * Returns the locale specific word break iterator.
+	 * 
+	 * @return the locale specific word break iterator
+	 * @since 3.7
+	 */
+	private BreakIterator getWordBreakIterator() {
+		if (fWordBreakIterator == null)
+			fWordBreakIterator= BreakIterator.getWordInstance();
+		return fWordBreakIterator;
+	}
+
+	/**
+	 * Returns the POSIX word break iterator.
+	 * 
+	 * <p>
+	 * Used to workaround ICU bug not treating '.' as word boundary, see
+	 * http://bugs.icu-project.org/trac/ticket/8371 for details.
+	 * </p>
+	 * 
+	 * @return the POSIX word break iterator.
+	 * @since 3.7
+	 */
+	private BreakIterator getPOSIXWordBreakIterator() {
+		if (fPOSIXWordBreakIterator == null)
+			fPOSIXWordBreakIterator= BreakIterator.getWordInstance(new Locale("en", "US", "POSIX")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return fPOSIXWordBreakIterator;
+	}
+
+	/**
+	 * Tries to find the word at the given offset.
+	 * 
+	 * @param document the document
+	 * @param offset the offset
+	 * @param wordBreakIterator the word break iterator
+	 * @return the word or <code>null</code> if none
+	 * @since 3.7
+	 */
+	private IRegion findWord(IDocument document, int offset, BreakIterator wordBreakIterator) {
 		IRegion line;
 		try {
 			line= document.getLineInformationOfOffset(offset);
@@ -230,18 +290,17 @@ public class DefaultTextDoubleClickStrategy implements ITextDoubleClickStrategy
 
 		fDocIter.setDocument(document, line);
 
-		BreakIterator breakIter= BreakIterator.getWordInstance();
-		breakIter.setText(fDocIter);
+		wordBreakIterator.setText(fDocIter);
 
-		int start= breakIter.preceding(offset);
+		int start= wordBreakIterator.preceding(offset);
 		if (start == BreakIterator.DONE)
 			start= line.getOffset();
 
-		int end= breakIter.following(offset);
+		int end= wordBreakIterator.following(offset);
 		if (end == BreakIterator.DONE)
 			end= line.getOffset() + line.getLength();
 
-		if (breakIter.isBoundary(offset)) {
+		if (wordBreakIterator.isBoundary(offset)) {
 			if (end - offset > offset - start)
 				start= offset;
 			else
@@ -251,7 +310,24 @@ public class DefaultTextDoubleClickStrategy implements ITextDoubleClickStrategy
 		if (end == start)
 			return null;
 
-		return new Region(start, end - start);
+		int length= end - start;
+		try {
+			// Workaround for ICU bug not treating '.' as word boundary, see http://bugs.icu-project.org/trac/ticket/8371 for details.
+			if (fPOSIXWordBreakIterator != wordBreakIterator && document.get(start, length).indexOf('.') != -1) {
+				IRegion wordRegion= findWord(document, offset, getPOSIXWordBreakIterator());
+				if (wordRegion != null) {
+					int wordStart= wordRegion.getOffset();
+					int wordEnd= wordStart + wordRegion.getLength();
+					// Check that no additional breaks besides '.' are introduced
+					if ((wordStart == start || wordStart > start && document.getChar(wordStart - 1) == '.') && (wordEnd == end || wordEnd < end && document.getChar(wordEnd) == '.'))
+						return wordRegion;
+				}
+			}
+		} catch (BadLocationException e) {
+			// Use previously computed word region
+		}
+
+		return new Region(start, length);
 		
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/IInformationControl.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/IInformationControl.java
index 999aefa..ada325f 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/IInformationControl.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/IInformationControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,10 +8,8 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.jface.text;
 
-
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.FocusListener;
@@ -191,7 +189,7 @@ public interface IInformationControl {
 
 	/**
 	 * Removes the given listeners from the list of focus listeners.
-	 * If the listener is not registered this call has no affect.
+	 * If the listener is not registered this call has no effect.
 	 *
 	 * @param listener the listener to be removed
 	 */
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextMessages.properties b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextMessages.properties
index 4998e6a..721fa0e 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextMessages.properties
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -28,6 +28,8 @@ TextViewer.error.bad_location.verifyText= TextViewer.verifyText: BadLocationExce
 TextViewer.error.invalid_range= Invalid range argument
 TextViewer.error.invalid_visible_region_1= Invalid visible region argument
 TextViewer.error.invalid_visible_region_2= Invalid visible region argument
+TextViewer.open_hyperlink_error_title=Open Hyperlink
+TextViewer.open_hyperlink_error_message=The operation is not applicable to the current selection. Select a hyperlink target.
 TextViewer.warning.noPrinter.title= Printing
 TextViewer.warning.noPrinter.message= Cannot print: there are no printers available.
 
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextPresentation.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextPresentation.java
index 8bf9f69..2d160e7 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextPresentation.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextPresentation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -160,10 +160,10 @@ public class TextPresentation {
 	}
 
 	/**
-	 * Creates a new empty text presentation. <code>sizeHint</code>  tells the
-	 * expected size of this presentation.
-	 *
-	 * @param sizeHint the expected size of this presentation
+	 * Creates a new empty text presentation. <code>sizeHint</code> tells the expected size of this
+	 * presentation.
+	 * 
+	 * @param sizeHint the expected size of this presentation, must be positive
 	 */
 	public TextPresentation(int sizeHint) {
 		Assert.isTrue(sizeHint > 0);
@@ -171,11 +171,11 @@ public class TextPresentation {
 	}
 
 	/**
-	 * Creates a new empty text presentation with the given extent.
-	 * <code>sizeHint</code>  tells the expected size of this presentation.
-	 *
+	 * Creates a new empty text presentation with the given extent. <code>sizeHint</code> tells the
+	 * expected size of this presentation.
+	 * 
 	 * @param extent the extent of the created <code>TextPresentation</code>
-	 * @param sizeHint the expected size of this presentation
+	 * @param sizeHint the expected size of this presentation, must be positive
 	 * @since 3.0
 	 */
 	public TextPresentation(IRegion extent, int sizeHint) {
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
index 42b75cf..064240f 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Tom Eicher (Avaloq Evolution AG) - block selection mode
+ *     Markus Schorn <markus.schorn at windriver.com> - shift with trailing empty line - https://bugs.eclipse.org/325438
  *******************************************************************************/
 package org.eclipse.jface.text;
 
@@ -73,6 +74,7 @@ import org.eclipse.jface.internal.text.NonDeletingPositionUpdater;
 import org.eclipse.jface.internal.text.SelectionProcessor;
 import org.eclipse.jface.internal.text.StickyHoverManager;
 import org.eclipse.jface.util.Geometry;
+import org.eclipse.jface.util.OpenStrategy;
 import org.eclipse.jface.viewers.IPostSelectionProvider;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -1991,20 +1993,22 @@ public class TextViewer extends Viewer implements
 	}
 
 	/**
-	 * The delay in milliseconds before an empty selection
-	 * changed event is sent by the cursor listener.
+	 * The delay in milliseconds before an empty selection changed event is sent by the cursor
+	 * listener.
 	 * <p>
-	 * Note: The return value is used to initialize the cursor
-	 * listener. To return a non-constant value has no effect.</p>
+	 * Note: The return value is used to initialize the cursor listener. To return a non-constant
+	 * value has no effect.
+	 * </p>
 	 * <p>
-	 * The same value (<code>500</code>) is used in <code>OpenStrategy.TIME</code>.</p>
-	 *
+	 * This implementation returns {@link OpenStrategy#getPostSelectionDelay()}.
+	 * </p>
+	 * 
 	 * @return delay in milliseconds
 	 * @see org.eclipse.jface.util.OpenStrategy
 	 * @since 3.0
 	 */
 	protected int getEmptySelectionChangedEventDelay() {
-		return 500;
+		return OpenStrategy.getPostSelectionDelay();
 	}
 
 	/**
@@ -3929,6 +3933,8 @@ public class TextViewer extends Viewer implements
 				return fUndoManager != null && fUndoManager.redoable();
 			case PRINT:
 				return isPrintable();
+			case HyperlinkManager.OPEN_HYPERLINK:
+				return fHyperlinkManager != null;
 		}
 
 		return false;
@@ -4012,6 +4018,12 @@ public class TextViewer extends Viewer implements
 			case PRINT:
 				print();
 				break;
+			case HyperlinkManager.OPEN_HYPERLINK:
+				boolean atleastOneLinkOpened= fHyperlinkManager.openHyperlink();
+				if (!atleastOneLinkOpened)
+					MessageDialog.openInformation(getControl().getShell(),
+							JFaceTextMessages.getString("TextViewer.open_hyperlink_error_title"), JFaceTextMessages.getString("TextViewer.open_hyperlink_error_message")); //$NON-NLS-1$ //$NON-NLS-2$
+				return;
 		}
 	}
 
@@ -4290,22 +4302,19 @@ public class TextViewer extends Viewer implements
 	 *
 	 * @param selection the selection to use
 	 * @return the region describing the text block comprising the given selection
-	 * @since 2.0
+	 * @throws BadLocationException when the document does not contain the selection
 	 */
-	private IRegion getTextBlockFromSelection(ITextSelection selection) {
-
-		try {
-			IDocument document= getDocument();
-			int start= document.getLineOffset(selection.getStartLine());
-			int endLine= selection.getEndLine();
-			IRegion endLineInfo= document.getLineInformation(endLine);
-			int end= endLineInfo.getOffset() + endLineInfo.getLength();
-			return new Region(start, end - start);
-
-		} catch (BadLocationException x) {
+	private IRegion getTextBlockFromSelection(ITextSelection selection) throws BadLocationException {
+		IDocument document= getDocument();
+		int start= document.getLineOffset(selection.getStartLine());
+		int end;
+		int endLine= selection.getEndLine();
+		if (document.getNumberOfLines() > endLine+1) {
+			end= document.getLineOffset(endLine+1);
+		} else {
+			end= document.getLength();
 		}
-
-		return null;
+		return new Region(start, end - start);
 	}
 
 	/**
@@ -4534,8 +4543,7 @@ public class TextViewer extends Viewer implements
 			/*
 			 * FIXME:
 			 * 	Should copy the printer data to avoid threading issues,
-			 *	but this is currently not possible, see:
-			 *  https://bugs.eclipse.org/bugs/show_bug.cgi?id=297957
+			 *	but this is currently not possible, see http://bugs.eclipse.org/297957
 			 */
 			fgPrinterData= data;
 			fgPrinterData.startPage= 1;
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java
index f59ef41..78c6dbe 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 Wind River Systems, Inc., IBM Corporation and others.
+ * Copyright (c) 2006, 2010 Wind River Systems, Inc., IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
  *******************************************************************************/
 package org.eclipse.jface.text;
 
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyleRange;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.custom.StyledTextContent;
@@ -22,6 +23,7 @@ import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.FontMetrics;
 import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
 
 
 /**
@@ -46,6 +48,35 @@ public class WhitespaceCharacterPainter implements IPainter, PaintListener {
 	private StyledText fTextWidget;
 	/** Tells whether the advanced graphics sub system is available. */
 	private final boolean fIsAdvancedGraphicsPresent;
+	/**
+	 * Tells whether the text widget was created with the full selection style bit or not.
+	 * @since 3.7
+	 */
+	private final boolean fIsFullSelectionStyle;
+	/** @since 3.7 */
+	private boolean fShowLeadingSpaces= true;
+	/** @since 3.7 */
+	private boolean fShowEnclosedSpace= true;
+	/** @since 3.7 */
+	private boolean fShowTrailingSpaces= true;
+	/** @since 3.7 */
+	private boolean fShowLeadingIdeographicSpaces= true;
+	/** @since 3.7 */
+	private boolean fShowEnclosedIdeographicSpaces= true;
+	/** @since 3.7 */
+	private boolean fShowTrailingIdeographicSpaces= true;
+	/** @since 3.7 */
+	private boolean fShowLeadingTabs= true;
+	/** @since 3.7 */
+	private boolean fShowEnclosedTabs= true;
+	/** @since 3.7 */
+	private boolean fShowTrailingTabs= true;
+	/** @since 3.7 */
+	private boolean fShowCarriageReturn= true;
+	/** @since 3.7 */
+	private boolean fShowLineFeed= true;
+	/** @since 3.7 */
+	private int fAlpha= 80;
 
 	/**
 	 * Creates a new painter for the given text viewer.
@@ -60,6 +91,43 @@ public class WhitespaceCharacterPainter implements IPainter, PaintListener {
 		gc.setAdvanced(true);
 		fIsAdvancedGraphicsPresent= gc.getAdvanced();
 		gc.dispose();
+		fIsFullSelectionStyle= (fTextWidget.getStyle() & SWT.FULL_SELECTION) != SWT.NONE;
+	}
+
+	/**
+	 * Creates a new painter for the given text viewer and the painter options.
+	 * 
+	 * @param viewer the text viewer the painter should be attached to
+	 * @param showLeadingSpaces if <code>true</code>, show leading Spaces
+	 * @param showEnclosedSpaces if <code>true</code>, show enclosed Spaces
+	 * @param showTrailingSpaces if <code>true</code>, show trailing Spaces
+	 * @param showLeadingIdeographicSpaces if <code>true</code>, show leading Ideographic Spaces
+	 * @param showEnclosedIdeographicSpaces if <code>true</code>, show enclosed Ideographic Spaces
+	 * @param showTrailingIdeographicSpace if <code>true</code>, show trailing Ideographic Spaces
+	 * @param showLeadingTabs if <code>true</code>, show leading Tabs
+	 * @param showEnclosedTabs if <code>true</code>, show enclosed Tabs
+	 * @param showTrailingTabs if <code>true</code>, show trailing Tabs
+	 * @param showCarriageReturn if <code>true</code>, show Carriage Returns
+	 * @param showLineFeed if <code>true</code>, show Line Feeds
+	 * @param alpha the alpha value
+	 * @since 3.7
+	 */
+	public WhitespaceCharacterPainter(ITextViewer viewer, boolean showLeadingSpaces, boolean showEnclosedSpaces, boolean showTrailingSpaces, boolean showLeadingIdeographicSpaces,
+			boolean showEnclosedIdeographicSpaces, boolean showTrailingIdeographicSpace, boolean showLeadingTabs,
+			boolean showEnclosedTabs, boolean showTrailingTabs, boolean showCarriageReturn, boolean showLineFeed, int alpha) {
+		this(viewer);
+		fShowLeadingSpaces= showLeadingSpaces;
+		fShowEnclosedSpace= showEnclosedSpaces;
+		fShowTrailingSpaces= showTrailingSpaces;
+		fShowLeadingIdeographicSpaces= showLeadingIdeographicSpaces;
+		fShowEnclosedIdeographicSpaces= showEnclosedIdeographicSpaces;
+		fShowTrailingIdeographicSpaces= showTrailingIdeographicSpace;
+		fShowLeadingTabs= showLeadingTabs;
+		fShowEnclosedTabs= showEnclosedTabs;
+		fShowTrailingTabs= showTrailingTabs;
+		fShowCarriageReturn= showCarriageReturn;
+		fShowLineFeed= showLineFeed;
+		fAlpha= alpha;
 	}
 
 	/*
@@ -138,13 +206,26 @@ public class WhitespaceCharacterPainter implements IPainter, PaintListener {
 		int startLine= fTextWidget.getLineIndex(y);
 		int endLine= fTextWidget.getLineIndex(y + h - 1);
 		if (startLine <= endLine && startLine < fTextWidget.getLineCount()) {
+			
+			// avoid painting into the margins:
+			Rectangle clipping= gc.getClipping();
+			Rectangle clientArea= fTextWidget.getClientArea();
+			int leftMargin= fTextWidget.getLeftMargin();
+			int rightMargin= fTextWidget.getRightMargin();
+			clientArea.x+= leftMargin;
+			clientArea.width-= leftMargin + rightMargin;
+			clipping.intersect(clientArea);
+			gc.setClipping(clientArea);
+			
 			if (fIsAdvancedGraphicsPresent) {
 				int alpha= gc.getAlpha();
-				gc.setAlpha(100);
+				gc.setAlpha(fAlpha);
 				drawLineRange(gc, startLine, endLine, x, w);
 				gc.setAlpha(alpha);
-			} else
+			} else {
 				drawLineRange(gc, startLine, endLine, x, w);
+			}
+			gc.setClipping(clipping);
 		}
 	}
 
@@ -212,69 +293,147 @@ public class WhitespaceCharacterPainter implements IPainter, PaintListener {
 			}
 			// draw character range
 			if (endOffset > startOffset) {
-				drawCharRange(gc, startOffset, endOffset);
+				drawCharRange(gc, startOffset, endOffset, lineOffset, lineEndOffset);
 			}
 		}
 	}
 
+	private boolean isWhitespaceCharacter(char c) {
+		return c == ' ' || c == '\u3000' || c == '\t' || c == '\r' || c == '\n';
+	}
+
 	/**
 	 * Draw characters of content range.
-	 *
+	 * 
 	 * @param gc the GC
-	 * @param startOffset inclusive start index
-	 * @param endOffset exclusive end index
+	 * @param startOffset inclusive start index of the drawing range
+	 * @param endOffset exclusive end index of the drawing range
+	 * @param lineOffset inclusive start index of the line
+	 * @param lineEndOffset exclusive end index of the line
 	 */
-	private void drawCharRange(GC gc, int startOffset, int endOffset) {
+	private void drawCharRange(GC gc, int startOffset, int endOffset, int lineOffset, int lineEndOffset) {
 		StyledTextContent content= fTextWidget.getContent();
-		int length= endOffset - startOffset;
-		String text= content.getTextRange(startOffset, length);
+		String lineText= content.getTextRange(lineOffset, lineEndOffset - lineOffset);
+		int startOffsetInLine= startOffset - lineOffset;
+		int endOffsetInLine= endOffset - lineOffset;
+
+		int textBegin= -1;
+		for (int i= 0; i < lineText.length(); ++i) {
+			if (!isWhitespaceCharacter(lineText.charAt(i))) {
+				textBegin= i;
+				break;
+			}
+		}
+		boolean isEmptyLine= textBegin == -1;
+		int textEnd= lineText.length() - 1;
+		if (!isEmptyLine) {
+			for (int i= lineText.length() - 1; i >= 0; --i) {
+				if (!isWhitespaceCharacter(lineText.charAt(i))) {
+					textEnd= i;
+					break;
+				}
+			}
+		}
+
 		StyleRange styleRange= null;
 		Color fg= null;
 		StringBuffer visibleChar= new StringBuffer(10);
-		for (int textOffset= 0; textOffset <= length; ++textOffset) {
+		for (int textOffset= startOffsetInLine; textOffset <= endOffsetInLine; ++textOffset) {
 			int delta= 0;
 			boolean eol= false;
-			if (textOffset < length) {
+			if (textOffset < endOffsetInLine) {
 				delta= 1;
-				char c= text.charAt(textOffset);
+				char c= lineText.charAt(textOffset);
 				switch (c) {
-				case ' ' :
-					visibleChar.append(SPACE_SIGN);
-					// 'continue' would improve performance but may produce drawing errors
-					// for long runs of space if width of space and dot differ
-					break;
-				case '\u3000' : // ideographic whitespace
-					visibleChar.append(IDEOGRAPHIC_SPACE_SIGN);
-					// 'continue' would improve performance but may produce drawing errors
-					// for long runs of space if width of space and dot differ
-					break;
-				case '\t' :
-					visibleChar.append(TAB_SIGN);
-					break;
-				case '\r' :
-					visibleChar.append(CARRIAGE_RETURN_SIGN);
-					if (textOffset >= length - 1 || text.charAt(textOffset + 1) != '\n') {
+					case ' ':
+						if (isEmptyLine) {
+							if (fShowLeadingSpaces || fShowEnclosedSpace || fShowTrailingSpaces) {
+								visibleChar.append(SPACE_SIGN);
+							}
+						} else if (textOffset < textBegin) {
+							if (fShowLeadingSpaces) {
+								visibleChar.append(SPACE_SIGN);
+							}
+						} else if (textOffset < textEnd) {
+							if (fShowEnclosedSpace) {
+								visibleChar.append(SPACE_SIGN);
+							}
+						} else {
+							if (fShowTrailingSpaces) {
+								visibleChar.append(SPACE_SIGN);
+							}
+						}
+						// 'continue' would improve performance but may produce drawing errors
+						// for long runs of space if width of space and dot differ
+						break;
+					case '\u3000': // ideographic whitespace
+						if (isEmptyLine) {
+							if (fShowLeadingIdeographicSpaces || fShowEnclosedIdeographicSpaces || fShowTrailingIdeographicSpaces) {
+								visibleChar.append(IDEOGRAPHIC_SPACE_SIGN);
+							}
+						} else if (textOffset < textBegin) {
+							if (fShowLeadingIdeographicSpaces) {
+								visibleChar.append(IDEOGRAPHIC_SPACE_SIGN);
+							}
+						} else if (textOffset < textEnd) {
+							if (fShowEnclosedIdeographicSpaces) {
+								visibleChar.append(IDEOGRAPHIC_SPACE_SIGN);
+							}
+						} else {
+							if (fShowTrailingIdeographicSpaces) {
+								visibleChar.append(IDEOGRAPHIC_SPACE_SIGN);
+							}
+						}
+						// 'continue' would improve performance but may produce drawing errors
+						// for long runs of space if width of space and dot differ
+						break;
+					case '\t':
+						if (isEmptyLine) {
+							if (fShowLeadingTabs || fShowEnclosedTabs || fShowTrailingTabs) {
+								visibleChar.append(TAB_SIGN);
+							}
+						} else if (textOffset < textBegin) {
+							if (fShowLeadingTabs) {
+								visibleChar.append(TAB_SIGN);
+							}
+						} else if (textOffset < textEnd) {
+							if (fShowEnclosedTabs) {
+								visibleChar.append(TAB_SIGN);
+							}
+						} else {
+							if (fShowTrailingTabs) {
+								visibleChar.append(TAB_SIGN);
+							}
+						}
+						break;
+					case '\r':
+						if (fShowCarriageReturn) {
+							visibleChar.append(CARRIAGE_RETURN_SIGN);
+						}
+						if (textOffset >= endOffsetInLine - 1 || lineText.charAt(textOffset + 1) != '\n') {
+							eol= true;
+							break;
+						}
+						continue;
+					case '\n':
+						if (fShowLineFeed) {
+							visibleChar.append(LINE_FEED_SIGN);
+						}
 						eol= true;
 						break;
-					}
-					continue;
-				case '\n' :
-					visibleChar.append(LINE_FEED_SIGN);
-					eol= true;
-					break;
-				default :
-					delta= 0;
-					break;
+					default:
+						delta= 0;
+						break;
 				}
 			}
 			if (visibleChar.length() > 0) {
-				int widgetOffset= startOffset + textOffset - visibleChar.length() + delta;
+				int widgetOffset= startOffset + textOffset - startOffsetInLine - visibleChar.length() + delta;
 				if (!eol || !isFoldedLine(content.getLineAtOffset(widgetOffset))) {
-					/* 
+					/*
 					 * Block selection is drawn using alpha and no selection-inverting
 					 * takes place, we always draw as 'unselected' in block selection mode.
 					 */
-					if (!fTextWidget.getBlockSelection() && isOffsetSelected(fTextWidget, widgetOffset)) {
+					if (!fTextWidget.getBlockSelection() && fIsFullSelectionStyle && isOffsetSelected(fTextWidget, widgetOffset)) {
 						fg= fTextWidget.getSelectionForeground();
 					} else if (styleRange == null || styleRange.start + styleRange.length <= widgetOffset) {
 						styleRange= fTextWidget.getStyleRangeAtOffset(widgetOffset);
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java
index acac873..dc046a0 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java
@@ -288,7 +288,7 @@ class CompletionProposalPopup implements IContentAssistListener {
 	private ITextViewer fViewer;
 	/** The associated content assistant. */
 	private final ContentAssistant fContentAssistant;
-	/** The used additional info controller. */
+	/** The used additional info controller, or <code>null</code> if none. */
 	private final AdditionalInfoController fAdditionalInfoController;
 	/** The closing strategy for this completion proposal popup. */
 	private final PopupCloser fPopupCloser= new PopupCloser();
@@ -435,7 +435,7 @@ class CompletionProposalPopup implements IContentAssistListener {
 	 *
 	 * @param contentAssistant the content assistant feeding this popup
 	 * @param viewer the viewer on top of which this popup appears
-	 * @param infoController the information control collaborating with this popup
+	 * @param infoController the information control collaborating with this popup, or <code>null</code>
 	 * @since 2.0
 	 */
 	public CompletionProposalPopup(ContentAssistant contentAssistant, ITextViewer viewer, AdditionalInfoController infoController) {
@@ -450,7 +450,7 @@ class CompletionProposalPopup implements IContentAssistListener {
 	 *
 	 * @param contentAssistant the content assistant feeding this popup
 	 * @param contentAssistSubjectControl the content assist subject control on top of which this popup appears
-	 * @param infoController the information control collaborating with this popup
+	 * @param infoController the information control collaborating with this popup, or <code>null</code>
 	 * @since 3.0
 	 */
 	public CompletionProposalPopup(ContentAssistant contentAssistant, IContentAssistSubjectControl contentAssistSubjectControl, AdditionalInfoController infoController) {
@@ -717,33 +717,35 @@ class CompletionProposalPopup implements IContentAssistListener {
     			}
     		});
     	}
-    	control.addFocusListener(new FocusListener() {
-    		private TraverseListener fTraverseListener;
-    		public void focusGained(FocusEvent e) {
-    			if (Helper.okToUse(control)) {
-    				if (fTraverseListener == null) {
-    					fTraverseListener= new TraverseListener() {
-    						public void keyTraversed(TraverseEvent event) {
-    							if (event.detail == SWT.TRAVERSE_TAB_NEXT) {
-    								IInformationControl iControl= fAdditionalInfoController.getCurrentInformationControl2();
-    								if (fAdditionalInfoController.getInternalAccessor().canReplace(iControl)) {
-    									fAdditionalInfoController.getInternalAccessor().replaceInformationControl(true);
-    									event.doit= false;
-    								}
-    							}
-    						}
-    					};
-    					fProposalTable.addTraverseListener(fTraverseListener);
-    				}
-    			}
-    		}
-    		public void focusLost(FocusEvent e) {
-    			if (fTraverseListener != null) {
-    				control.removeTraverseListener(fTraverseListener);
-    				fTraverseListener= null;
-    			}
-    		}
-    	});
+    	if (fAdditionalInfoController != null) {
+	    	control.addFocusListener(new FocusListener() {
+	    		private TraverseListener fTraverseListener;
+	    		public void focusGained(FocusEvent e) {
+	    			if (Helper.okToUse(control)) {
+	    				if (fTraverseListener == null) {
+	    					fTraverseListener= new TraverseListener() {
+	    						public void keyTraversed(TraverseEvent event) {
+	    							if (event.detail == SWT.TRAVERSE_TAB_NEXT) {
+	    								IInformationControl iControl= fAdditionalInfoController.getCurrentInformationControl2();
+	    								if (fAdditionalInfoController.getInternalAccessor().canReplace(iControl)) {
+	    									fAdditionalInfoController.getInternalAccessor().replaceInformationControl(true);
+	    									event.doit= false;
+	    								}
+	    							}
+	    						}
+	    					};
+	    					fProposalTable.addTraverseListener(fTraverseListener);
+	    				}
+	    			}
+	    		}
+	    		public void focusLost(FocusEvent e) {
+	    			if (fTraverseListener != null) {
+	    				control.removeTraverseListener(fTraverseListener);
+	    				fTraverseListener= null;
+	    			}
+	    		}
+	    	});
+    	}
     }
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistSubjectControlAdapter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistSubjectControlAdapter.java
index b1c76e5..5b9da38 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistSubjectControlAdapter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistSubjectControlAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -294,7 +294,7 @@ final class ContentAssistSubjectControlAdapter implements IContentAssistSubjectC
 	* Creates and returns a completion proposal popup for the given content assistant.
 	*
 	* @param contentAssistant the content assistant
-	* @param controller the additional info controller
+	* @param controller the additional info controller, or <code>null</code>
 	* @return the completion proposal popup
 	*/
 	CompletionProposalPopup createCompletionProposalPopup(ContentAssistant contentAssistant, AdditionalInfoController controller) {
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java
index 4d472d9..b0981b5 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,6 +55,7 @@ import org.eclipse.jface.contentassist.ISubjectControlContentAssistProcessor;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.preference.JFacePreferences;
 import org.eclipse.jface.util.Geometry;
+import org.eclipse.jface.util.OpenStrategy;
 
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
@@ -849,9 +850,9 @@ public class ContentAssistant implements IContentAssistant, IContentAssistantExt
 	 * @since 3.0
 	 */
 	public static final int WIDGET_PRIORITY= 20;
-
 	private static final int DEFAULT_AUTO_ACTIVATION_DELAY= 500;
 
+
 	private IInformationControlCreator fInformationControlCreator;
 	private int fAutoActivationDelay= DEFAULT_AUTO_ACTIVATION_DELAY;
 	private boolean fIsAutoActivated= false;
@@ -1368,13 +1369,8 @@ public class ContentAssistant implements IContentAssistant, IContentAssistantExt
 		fInternalListener= new InternalListener();
 
 		AdditionalInfoController controller= null;
-		if (fInformationControlCreator != null) {
-			int delay= fAutoActivationDelay;
-			if (delay == 0)
-				delay= DEFAULT_AUTO_ACTIVATION_DELAY;
-			delay= Math.round(delay * 1.5f);
-			controller= new AdditionalInfoController(fInformationControlCreator, delay);
-		}
+		if (fInformationControlCreator != null)
+			controller= new AdditionalInfoController(fInformationControlCreator, OpenStrategy.getPostSelectionDelay());
 
 		fContextInfoPopup= fContentAssistSubjectControlAdapter.createContextInfoPopup(this);
 		fProposalPopup= fContentAssistSubjectControlAdapter.createCompletionProposalPopup(this, controller);
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/DefaultHyperlinkPresenter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/DefaultHyperlinkPresenter.java
index 4690816..109ab6e 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/DefaultHyperlinkPresenter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/DefaultHyperlinkPresenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,8 @@ import org.eclipse.jface.text.TextPresentation;
  *
  * @since 3.1
  */
-public class DefaultHyperlinkPresenter implements IHyperlinkPresenter, IHyperlinkPresenterExtension, ITextPresentationListener, ITextInputListener, IDocumentListener, IPropertyChangeListener {
+public class DefaultHyperlinkPresenter implements IHyperlinkPresenter, IHyperlinkPresenterExtension, ITextPresentationListener, ITextInputListener, IDocumentListener,
+		IPropertyChangeListener {
 
 	/**
 	 * A named preference that holds the color used for hyperlinks.
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/HyperlinkManager.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/HyperlinkManager.java
index 16dcd85..a683e05 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/HyperlinkManager.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/HyperlinkManager.java
@@ -33,10 +33,12 @@ import org.eclipse.core.runtime.Assert;
 
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextListener;
+import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.JFaceTextUtil;
 import org.eclipse.jface.text.Region;
 import org.eclipse.jface.text.TextEvent;
+import org.eclipse.jface.text.TextViewer;
 import org.eclipse.jface.text.source.ISourceViewer;
 
 
@@ -50,9 +52,6 @@ public class HyperlinkManager implements ITextListener, Listener, KeyListener, M
 
 	/**
 	 * Text operation code for requesting to open the hyperlink at the caret position.
-	 * <p>
-	 * FIXME: Not yet implemented. Will be implemented during M7.
-	 * </p>
 	 * @see #openHyperlink()
 	 * @since 3.6
 	 */
@@ -255,8 +254,18 @@ public class HyperlinkManager implements ITextListener, Listener, KeyListener, M
 		if (offset == -1)
 			return null;
 
-		boolean canShowMultipleHyperlinks= fHyperlinkPresenter.canShowMultipleHyperlinks();
 		IRegion region= new Region(offset, 0);
+		return findHyperlinks(region);
+	}
+
+	/**
+	 * Returns the hyperlinks in the given region or <code>null</code> if none.
+	 * 
+	 * @param region the selection region
+	 * @return the array of hyperlinks found or <code>null</code> if none
+	 * @since 3.7
+	 */
+	private IHyperlink[] findHyperlinks(IRegion region) {
 		List allHyperlinks= new ArrayList(fHyperlinkDetectors.length * 2);
 		synchronized (fHyperlinkDetectors) {
 			for (int i= 0, length= fHyperlinkDetectors.length; i < length; i++) {
@@ -273,6 +282,7 @@ public class HyperlinkManager implements ITextListener, Listener, KeyListener, M
 				} else if (fActiveHyperlinkStateMask != fHyperlinkStateMask)
 					continue;
 
+				boolean canShowMultipleHyperlinks= fHyperlinkPresenter.canShowMultipleHyperlinks();
 				IHyperlink[] hyperlinks= detector.detectHyperlinks(fTextViewer, region, canShowMultipleHyperlinks);
 				if (hyperlinks == null)
 					continue;
@@ -328,9 +338,9 @@ public class HyperlinkManager implements ITextListener, Listener, KeyListener, M
 	}
 
 	/**
-	 * Returns the current text offset.
-	 *
-	 * @return the current text offset
+	 * Returns the offset in the given viewer that corresponds to the current cursor location.
+	 * 
+	 * @return the offset in the given viewer that corresponds to the current cursor location.
 	 */
 	protected int getCurrentTextOffset() {
 		return JFaceTextUtil.getOffsetForCursorLocation(fTextViewer);
@@ -450,13 +460,7 @@ public class HyperlinkManager implements ITextListener, Listener, KeyListener, M
 		}
 
 		fActiveHyperlinks= findHyperlinks();
-		if (fActiveHyperlinks == null || fActiveHyperlinks.length == 0) {
-			fHyperlinkPresenter.hideHyperlinks();
-			return;
-		}
-
-		fHyperlinkPresenter.showHyperlinks(fActiveHyperlinks);
-
+		showHyperlinks(false);
 	}
 
 	/**
@@ -541,17 +545,56 @@ public class HyperlinkManager implements ITextListener, Listener, KeyListener, M
 	}
 
 	/**
+	 * Opens the hyperlink at the current caret location directly if there's only one link, else
+	 * opens the hyperlink control showing all the hyperlinks at that location.
+	 * 
+	 * @param takesFocusWhenVisible <code>true</code> if the control takes focus when visible,
+	 *            <code>false</code> otherwise
+	 * 
+	 * @return <code>true</code> if at least one hyperlink has been found at the caret location,
+	 *         <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	private boolean showHyperlinks(boolean takesFocusWhenVisible) {
+		
+		if (fActiveHyperlinks == null || fActiveHyperlinks.length == 0) {
+			fHyperlinkPresenter.hideHyperlinks();
+			return false;
+		}
+		if (fActiveHyperlinks.length == 1 && takesFocusWhenVisible) {
+			fActiveHyperlinks[0].open();
+		} else {
+			if (fHyperlinkPresenter instanceof IHyperlinkPresenterExtension2)
+				((IHyperlinkPresenterExtension2)fHyperlinkPresenter).showHyperlinks(fActiveHyperlinks, takesFocusWhenVisible);
+			else
+				fHyperlinkPresenter.showHyperlinks(fActiveHyperlinks);
+		}
+		return true;
+
+	}
+
+	/**
 	 * Opens the hyperlink at the caret location or opens a chooser
 	 * if more than one hyperlink is available.
-	 * <p>
-	 * FIXME: Will be implemented during M7.
-	 * </p>
 	 * 
 	 * @return <code>true</code> if at least one hyperlink has been found at the caret location, <code>false</code> otherwise
 	 * @see #OPEN_HYPERLINK
 	 * @since 3.6
 	 */
 	public boolean openHyperlink() {
-		return false;
+		fActiveHyperlinkStateMask= fHyperlinkStateMask;
+
+		if (fHyperlinkPresenter instanceof IHyperlinkPresenterExtension) {
+			if (!((IHyperlinkPresenterExtension)fHyperlinkPresenter).canHideHyperlinks())
+				return false;
+		}
+		ITextSelection sel= (ITextSelection)((TextViewer)fTextViewer).getSelection();
+		int offset= sel.getOffset();
+		if (offset == -1)
+			return false;
+
+		IRegion region= new Region(offset, 0);
+		fActiveHyperlinks= findHyperlinks(region);
+		return showHyperlinks(true);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/IHyperlinkPresenter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/IHyperlinkPresenter.java
index aa79f98..562133d 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/IHyperlinkPresenter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/IHyperlinkPresenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,10 @@ import org.eclipse.jface.text.ITextViewer;
  * 		adds the ability to query  whether the currently shown hyperlinks
  *		can be hidden.
  * </li>
+ * <li>{@link IHyperlinkPresenterExtension2} since version 3.7,
+ *      adds the ability distinguish between the modes in which the
+ *      control either takes focus or not when visible.
+ * </li> 
  * </ul></p>
  * <p>
  * Clients may implement this interface. A default implementation is provided
@@ -31,6 +35,7 @@ import org.eclipse.jface.text.ITextViewer;
  * </p>
  *
  * @see IHyperlinkPresenterExtension
+ * @see IHyperlinkPresenterExtension2
  * @since 3.1
  */
 public interface IHyperlinkPresenter {
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/IHyperlinkPresenterExtension2.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/IHyperlinkPresenterExtension2.java
new file mode 100644
index 0000000..a08fb27
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/IHyperlinkPresenterExtension2.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jface.text.hyperlink;
+
+
+/**
+ * Extends {@link IHyperlinkPresenter} with ability to distinguish between the modes in which the
+ * control either takes focus or not when visible.
+ * <p>
+ * Clients may implement this interface.
+ * </p>
+ * 
+ * @since 3.7
+ */
+public interface IHyperlinkPresenterExtension2 {
+
+	/**
+	 * Tells this hyperlink presenter to show the given hyperlinks on the installed text viewer and
+	 * specifies whether or not the control takes focus when visible.
+	 * 
+	 * @param activeHyperlinks the hyperlinks to show
+	 * @param takesFocusWhenVisible <code>true</code> if the control takes the focus when visible,
+	 *            <code>false</code> otherwise. Will be ignored if there is only one hyperlink to
+	 *            show.
+	 */
+	public void showHyperlinks(IHyperlink[] activeHyperlinks, boolean takesFocusWhenVisible);
+
+}
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/MultipleHyperlinkPresenter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/MultipleHyperlinkPresenter.java
index cad1cc5..edbd29a 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/MultipleHyperlinkPresenter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/MultipleHyperlinkPresenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.jface.text.hyperlink;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyAdapter;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.KeyListener;
 import org.eclipse.swt.events.MouseAdapter;
@@ -22,6 +21,8 @@ import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.ShellAdapter;
 import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.RGB;
@@ -40,6 +41,7 @@ import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.util.Geometry;
+import org.eclipse.jface.util.Util;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.TableViewer;
@@ -69,9 +71,29 @@ import org.eclipse.jface.text.Region;
  *
  * @since 3.4
  */
-public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
-
-	private static final boolean IS_WIN32= "win32".equals(SWT.getPlatform()); //$NON-NLS-1$
+public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter implements IHyperlinkPresenterExtension2 {
+
+	private static final boolean IS_OLD_WINDOWS;
+	static {
+		int majorVersion= Integer.MAX_VALUE;
+		if (Util.isWin32()) {
+			String osVersion= System.getProperty("os.version"); //$NON-NLS-1$
+			if (osVersion != null) {
+				int majorIndex = osVersion.indexOf('.');
+				if (majorIndex != -1) {
+					osVersion = osVersion.substring(0, majorIndex);
+					try {
+						majorVersion= Integer.parseInt(osVersion);
+					} catch (NumberFormatException exception) {
+						// use default
+					}
+				}
+			}
+		}
+		IS_OLD_WINDOWS= majorVersion < 6; // before Vista (6.0)
+	}
+	private static final boolean IS_MAC= Util.isMac();
+	private static final boolean IS_GTK= Util.isGtk();
 
 	/**
 	 * An information control capable of showing a list of hyperlinks. The hyperlinks can be opened.
@@ -119,8 +141,8 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 		private Composite fParent;
 		private Table fTable;
 
-		private Color fForegroundColor;
-		private Color fBackgroundColor;
+		private final Color fForegroundColor;
+		private final Color fBackgroundColor;
 
 
 		/**
@@ -159,12 +181,28 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 		 */
 		protected void createContent(Composite parent) {
 			fParent= parent;
-			if (IS_WIN32) {
-				GridLayout layout= new GridLayout();
+			GridLayout layout= new GridLayout();
+			
+			if (IS_OLD_WINDOWS) {
 				layout.marginWidth= 0;
+				layout.marginHeight= 4;
 				layout.marginRight= 4;
-				fParent.setLayout(layout);
+			} else if (IS_MAC) {
+				layout.marginWidth= 4;
+				layout.marginHeight= 0;
+				layout.marginTop= 4;
+				layout.marginBottom= 4 - 1;
+			} else if (IS_GTK) {
+				layout.marginWidth= 4;
+				layout.marginHeight= 0;
+				layout.marginTop= 4;
+				layout.marginBottom= 4 - 2;
+			} else {
+				layout.marginWidth= 4;
+				layout.marginHeight= 4;
 			}
+			
+			fParent.setLayout(layout);
 			fParent.setForeground(fForegroundColor);
 			fParent.setBackground(fBackgroundColor);
 		}
@@ -212,10 +250,8 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 			fTable.setBackground(fBackgroundColor);
 			fTable.setFont(JFaceResources.getDialogFont());
 
-			if (IS_WIN32) {
-				GridData data= new GridData(SWT.BEGINNING, SWT.BEGINNING, true, true);
-				fTable.setLayoutData(data);
-			}
+			GridData data= new GridData(SWT.BEGINNING, SWT.BEGINNING, true, true);
+			fTable.setLayoutData(data);
 
 			final TableViewer viewer= new TableViewer(fTable);
 			viewer.setContentProvider(new LinkContentProvider());
@@ -248,6 +284,9 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 				public void mouseMove(MouseEvent e) {
 					if (fTable.equals(e.getSource())) {
 						Object o= fTable.getItem(new Point(e.x, e.y));
+						if (fLastItem == null ^ o == null) {
+							fTable.setCursor(o == null ? null : fTable.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
+						}
 						if (o instanceof TableItem) {
 							TableItem item= (TableItem) o;
 							if (!o.equals(fLastItem)) {
@@ -268,13 +307,15 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 									fTable.setSelection(new TableItem[] { fLastItem });
 								}
 							}
+						} else if (o == null) {
+							fLastItem= null;
 						}
 					}
 				}
 			});
 
 			fTable.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
+				public void widgetDefaultSelected(SelectionEvent e) {
 					openSelectedLink();
 				}
 			});
@@ -296,10 +337,11 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 				}
 			});
 
-			fTable.addKeyListener(new KeyAdapter() {
-				public void keyPressed(KeyEvent e) {
-					if (e.keyCode == 0x0D) // return
-						openSelectedLink();
+			fTable.addTraverseListener(new TraverseListener() {
+				public void keyTraversed(TraverseEvent e) {
+					if (e.keyCode == SWT.ESC) {
+						fManager.hideInformationControl();
+					}
 				}
 			});
 		}
@@ -455,7 +497,8 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 				if (inKeepUpZone(mouseLoc.x, mouseLoc.y, ((IInformationControlExtension3) fControl).getBounds()))
 					return;
 
-				hideInformationControl();
+				if (!isTakingFocusWhenVisible())
+					hideInformationControl();
 			}
 
 			/**
@@ -493,13 +536,15 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 			 * @see org.eclipse.swt.events.KeyListener#keyPressed(org.eclipse.swt.events.KeyEvent)
 			 */
 			public void keyPressed(KeyEvent e) {
+				hideInformationControl();
 			}
 
 			/*
 			 * @see org.eclipse.swt.events.KeyListener#keyReleased(org.eclipse.swt.events.KeyEvent)
 			 */
 			public void keyReleased(KeyEvent e) {
-				hideInformationControl();
+				if (!isTakingFocusWhenVisible())
+					hideInformationControl();
 			}
 
 			/*
@@ -536,7 +581,7 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 		private final MultipleHyperlinkHover fHover;
 		private final ITextViewer fTextViewer;
 		private final MultipleHyperlinkPresenter fHyperlinkPresenter;
-		private Closer fCloser;
+		private final Closer fCloser;
 		private boolean fIsControlVisible;
 
 
@@ -588,7 +633,7 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 			Point result= super.computeInformationControlLocation(subjectArea, controlSize);
 
 			Point cursorLocation= fTextViewer.getTextWidget().getDisplay().getCursorLocation();
-			if (cursorLocation.x <= result.x + controlSize.x)
+			if (isTakingFocusWhenVisible() || cursorLocation.x <= result.x + controlSize.x)
 				return result;
 
 			result.x= cursorLocation.x + 20 - controlSize.x;
@@ -600,16 +645,19 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 		 */
 		protected void showInformationControl(Rectangle subjectArea) {
 			if (fTextViewer instanceof IWidgetTokenOwnerExtension) {
-				if (((IWidgetTokenOwnerExtension) fTextViewer).requestWidgetToken(this, WIDGET_TOKEN_PRIORITY))
+				if (((IWidgetTokenOwnerExtension)fTextViewer).requestWidgetToken(this, WIDGET_TOKEN_PRIORITY)) {
 					super.showInformationControl(subjectArea);
+					fIsControlVisible= true;
+				}
 			} else if (fTextViewer instanceof IWidgetTokenOwner) {
-				if (((IWidgetTokenOwner) fTextViewer).requestWidgetToken(this))
+				if (((IWidgetTokenOwner)fTextViewer).requestWidgetToken(this)) {
 					super.showInformationControl(subjectArea);
+					fIsControlVisible= true;
+				}
 			} else {
 				super.showInformationControl(subjectArea);
+				fIsControlVisible= true;
 			}
-
-			fIsControlVisible= true;
 		}
 
 		/**
@@ -672,7 +720,7 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 		 * @see org.eclipse.jface.text.IWidgetTokenKeeperExtension#setFocus(org.eclipse.jface.text.IWidgetTokenOwner)
 		 */
 		public boolean setFocus(IWidgetTokenOwner owner) {
-			return false;
+			return isTakingFocusWhenVisible();
 		}
 
 		/**
@@ -699,9 +747,9 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 	private int fCursorOffset;
 
 	/**
-	 * Creates a new multiple hyperlink presenter which uses
-	 * {@link #HYPERLINK_COLOR} to read the color from the given preference store.
-	 *
+	 * Creates a new multiple hyperlink presenter which uses {@link #HYPERLINK_COLOR} to read the
+	 * color from the given preference store.
+	 * 
 	 * @param store the preference store
 	 */
 	public MultipleHyperlinkPresenter(IPreferenceStore store) {
@@ -768,20 +816,30 @@ public class MultipleHyperlinkPresenter extends DefaultHyperlinkPresenter {
 	 * @see org.eclipse.jface.text.hyperlink.DefaultHyperlinkPresenter#showHyperlinks(org.eclipse.jface.text.hyperlink.IHyperlink[])
 	 */
 	public void showHyperlinks(IHyperlink[] hyperlinks) {
-		super.showHyperlinks(new IHyperlink[] { hyperlinks[0] });
+		showHyperlinks(hyperlinks, false);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @since 3.7
+	 */
+	public void showHyperlinks(IHyperlink[] activeHyperlinks, boolean takesFocusWhenVisible) {
+		fManager.takesFocusWhenVisible(takesFocusWhenVisible);
+		super.showHyperlinks(new IHyperlink[] { activeHyperlinks[0] });
 
 		fSubjectRegion= null;
-		fHyperlinks= hyperlinks;
+		fHyperlinks= activeHyperlinks;
 
-		if (hyperlinks.length == 1)
+		if (activeHyperlinks.length == 1)
 			return;
 
-		int start= hyperlinks[0].getHyperlinkRegion().getOffset();
-		int end= start + hyperlinks[0].getHyperlinkRegion().getLength();
+		int start= activeHyperlinks[0].getHyperlinkRegion().getOffset();
+		int end= start + activeHyperlinks[0].getHyperlinkRegion().getLength();
 
-		for (int i= 1; i < hyperlinks.length; i++) {
-			int hstart= hyperlinks[i].getHyperlinkRegion().getOffset();
-			int hend= hstart + hyperlinks[i].getHyperlinkRegion().getLength();
+		for (int i= 1; i < activeHyperlinks.length; i++) {
+			int hstart= activeHyperlinks[i].getHyperlinkRegion().getOffset();
+			int hend= hstart + activeHyperlinks[i].getHyperlinkRegion().getLength();
 
 			start= Math.min(start, hstart);
 			end= Math.max(end, hend);
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/URLHyperlinkDetector.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/URLHyperlinkDetector.java
index f29bfea..62710db 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/URLHyperlinkDetector.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/hyperlink/URLHyperlinkDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,7 +73,7 @@ public class URLHyperlinkDetector extends AbstractHyperlinkDetector {
 
 		int offsetInLine= offset - lineInfo.getOffset();
 
-		boolean startDoubleQuote= false;
+		char quote= 0;
 		int urlOffsetInLine= 0;
 		int urlLength= 0;
 
@@ -88,7 +88,8 @@ public class URLHyperlinkDetector extends AbstractHyperlinkDetector {
 				ch= ' ';
 				if (urlOffsetInLine > -1)
 					ch= line.charAt(urlOffsetInLine);
-				startDoubleQuote= ch == '"';
+				if (ch == '"' || ch == '\'')
+					quote= ch;
 			} while (Character.isUnicodeIdentifierStart(ch));
 			urlOffsetInLine++;
 
@@ -107,14 +108,14 @@ public class URLHyperlinkDetector extends AbstractHyperlinkDetector {
 		if (urlSeparatorOffset < 0)
 			return null;
 
-		if (startDoubleQuote) {
+		if (quote != 0) {
 			int endOffset= -1;
-			int nextDoubleQuote= line.indexOf('"', urlOffsetInLine);
+			int nextQuote= line.indexOf(quote, urlOffsetInLine);
 			int nextWhitespace= line.indexOf(' ', urlOffsetInLine);
-			if (nextDoubleQuote != -1 && nextWhitespace != -1)
-				endOffset= Math.min(nextDoubleQuote, nextWhitespace);
-			else if (nextDoubleQuote != -1)
-				endOffset= nextDoubleQuote;
+			if (nextQuote != -1 && nextWhitespace != -1)
+				endOffset= Math.min(nextQuote, nextWhitespace);
+			else if (nextQuote != -1)
+				endOffset= nextQuote;
 			else if (nextWhitespace != -1)
 				endOffset= nextWhitespace;
 			if (endOffset != -1)
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/information/InformationPresenter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/information/InformationPresenter.java
index 2030138..a691c44 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/information/InformationPresenter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/information/InformationPresenter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,8 @@ import org.eclipse.swt.widgets.Display;
 
 import org.eclipse.core.runtime.Assert;
 
+import org.eclipse.jface.util.Geometry;
+
 import org.eclipse.jface.text.AbstractInformationControlManager;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocumentExtension3;
@@ -378,7 +380,9 @@ public class InformationPresenter extends AbstractInformationControlManager impl
 			Point loc= styledText.getLocationAtOffset(start);
 			bounds= new Rectangle(loc.x, loc.y, 0, styledText.getLineHeight(start));
 		}
-
+		
+		Rectangle clientArea= styledText.getClientArea();
+		Geometry.moveInside(bounds, clientArea);
 		return bounds;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/quickassist/QuickAssistAssistant.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/quickassist/QuickAssistAssistant.java
index 7f81993..598d185 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/quickassist/QuickAssistAssistant.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/quickassist/QuickAssistAssistant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,8 @@ import org.eclipse.swt.graphics.Color;
 
 import org.eclipse.core.commands.IHandler;
 
+import org.eclipse.jface.dialogs.IDialogSettings;
+
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.ITextViewer;
@@ -192,6 +194,30 @@ public class QuickAssistAssistant implements IQuickAssistAssistant, IQuickAssist
 	}
 
 	/**
+	 * Tells this assistant to open the proposal popup with the size
+	 * contained in the given dialog settings and to store the control's last valid size in the
+	 * given dialog settings.
+	 * <p>
+	 * Note: This API is only valid if the information control implements
+	 * {@link org.eclipse.jface.text.IInformationControlExtension3}. Not following this restriction
+	 * will later result in an {@link UnsupportedOperationException}.
+	 * </p>
+	 * <p>
+	 * The constants used to store the values are:
+	 * <ul>
+	 * <li>{@link ContentAssistant#STORE_SIZE_X}</li>
+	 * <li>{@link ContentAssistant#STORE_SIZE_Y}</li>
+	 * </ul>
+	 * </p>
+	 *
+	 * @param dialogSettings the dialog settings
+	 * @since 3.7
+	 */
+	public void setRestoreCompletionProposalSize(IDialogSettings dialogSettings) {
+		fQuickAssistAssistantImpl.setRestoreCompletionProposalSize(dialogSettings);
+	}
+	
+	/**
 	 * Callback to signal this quick assist assistant that the presentation of the
 	 * possible completions has been stopped.
 	 */
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/reconciler/AbstractReconciler.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/reconciler/AbstractReconciler.java
index bfdb539..1965ba1 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/reconciler/AbstractReconciler.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/reconciler/AbstractReconciler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -235,7 +235,7 @@ abstract public class AbstractReconciler implements IReconciler {
 		 */
 		public void documentChanged(DocumentEvent e) {
 
-			if (!fThread.isDirty() && fThread.isAlive()) {
+			if (fThread.isActive() || !fThread.isDirty() && fThread.isAlive()) {
 				if (!fIsAllowedToModifyDocument && Thread.currentThread() == fThread)
 					throw new UnsupportedOperationException("The reconciler thread is not allowed to modify the document"); //$NON-NLS-1$
 				aboutToBeReconciled();
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationBarHoverManager.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationBarHoverManager.java
index da1e975..cdf1e06 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationBarHoverManager.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationBarHoverManager.java
@@ -701,6 +701,24 @@ public class AnnotationBarHoverManager extends AbstractHoverInformationControlMa
 	}
 
 	/*
+	 * @see org.eclipse.jface.text.AbstractInformationControlManager#computeInformationControlLocation(org.eclipse.swt.graphics.Rectangle, org.eclipse.swt.graphics.Point)
+	 * @since 3.7
+	 */
+	protected Point computeInformationControlLocation(Rectangle subjectArea, Point controlSize) {
+		MouseEvent event= getHoverEvent();
+		IAnnotationHover hover= getHover(event);
+
+		if (hover instanceof IAnnotationHoverExtension) {
+			IAnnotationHoverExtension extension= (IAnnotationHoverExtension) hover;
+			boolean allowMouseExit= extension.canHandleMouseCursor();
+			if (allowMouseExit) {
+				return computeLocation(subjectArea, controlSize, ANCHOR_RIGHT);
+			}
+		}
+		return super.computeInformationControlLocation(subjectArea, controlSize);
+	}
+	
+	/*
 	 * @see org.eclipse.jface.text.AbstractInformationControlManager#computeLocation(org.eclipse.swt.graphics.Rectangle, org.eclipse.swt.graphics.Point, org.eclipse.jface.text.AbstractInformationControlManager.Anchor)
 	 * @since 3.0
 	 */
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java
index 07f88cc..1feb5b6 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java
@@ -11,7 +11,6 @@
  *******************************************************************************/
 package org.eclipse.jface.text.source;
 
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -47,6 +46,7 @@ import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextInputListener;
 import org.eclipse.jface.text.ITextPresentationListener;
 import org.eclipse.jface.text.ITextViewerExtension2;
+import org.eclipse.jface.text.ITextViewerExtension4;
 import org.eclipse.jface.text.ITextViewerExtension5;
 import org.eclipse.jface.text.JFaceTextUtil;
 import org.eclipse.jface.text.Position;
@@ -262,7 +262,7 @@ public class AnnotationPainter implements IPainter, PaintListener, IAnnotationMo
 		int fBorderStyle;
 
 		public BoxStrategy(int style) {
-			Assert.isLegal(style == SWT.BORDER_DASH || style == SWT.BORDER_DASH || style == SWT.BORDER_SOLID);
+			Assert.isLegal(style == SWT.BORDER_DASH || style == SWT.BORDER_DOT || style == SWT.BORDER_SOLID);
 			fBorderStyle= style;
 		}
 
@@ -1095,27 +1095,31 @@ public class AnnotationPainter implements IPainter, PaintListener, IAnnotationMo
 	}
 
 	/**
-	 * Adds the given annotation type to the list of annotation types whose
-	 * annotations should be painted by this painter using squiggly drawing. If the annotation  type
-	 * is already in this list, this method is without effect.
-	 *
+	 * Adds the given annotation type to the list of annotation types whose annotations should be
+	 * painted by this painter using squiggly drawing. If the annotation type is already in this
+	 * list, this method is without effect.
+	 * 
 	 * @param annotationType the annotation type
+	 * @deprecated As of 3.4 replaced by
+	 *             {@link #addTextStyleStrategy(Object, AnnotationPainter.ITextStyleStrategy)} and
+	 *             {@link UnderlineStrategy}
 	 */
 	public void addAnnotationType(Object annotationType) {
 		addAnnotationType(annotationType, SQUIGGLES);
 	}
 
 	/**
-	 * Adds the given annotation type to the list of annotation types whose
-	 * annotations should be painted by this painter using the given drawing strategy.
-	 * If the annotation type is already in this list, the old drawing strategy gets replaced.
-	 *
+	 * Adds the given annotation type to the list of annotation types whose annotations should be
+	 * painted by this painter using the given strategy. If the annotation type is already in this
+	 * list, the old strategy gets replaced.
+	 * 
 	 * @param annotationType the annotation type
-	 * @param drawingStrategyID the id of the drawing strategy that should be used for this annotation type
+	 * @param strategyID the id of the drawing or text style strategy that should be used for this
+	 *            annotation type
 	 * @since 3.0
 	 */
-	public void addAnnotationType(Object annotationType, Object drawingStrategyID) {
-		fAnnotationType2PaintingStrategyId.put(annotationType, drawingStrategyID);
+	public void addAnnotationType(Object annotationType, Object strategyID) {
+		fAnnotationType2PaintingStrategyId.put(annotationType, strategyID);
 		fCachedAnnotationType2PaintingStrategy.clear();
 
 		if (fTextInputListener == null) {
@@ -1165,11 +1169,14 @@ public class AnnotationPainter implements IPainter, PaintListener, IAnnotationMo
 	 * replaced.
 	 * <p>
 	 * The given id can be referenced when adding annotation types, see
-	 * {@link #addAnnotationType(Object, Object)}.
-	 * </p>
+	 * {@link #addAnnotationType(Object, Object)}.</p>
+	 * <p>
+	 * <strong>Note:</strong> The annotations will only be painted if this
+	 * painter has been registered as text presentation listener on the viewer.</p>
 	 *
 	 * @param id the identifier under which the strategy can be referenced, not <code>null</code>
 	 * @param strategy the new strategy
+	 * @see ITextViewerExtension4#addTextPresentationListener(ITextPresentationListener)
 	 * @since 3.4
 	 */
 	public void addTextStyleStrategy(Object id, ITextStyleStrategy strategy) {
@@ -1185,8 +1192,12 @@ public class AnnotationPainter implements IPainter, PaintListener, IAnnotationMo
 	 * Adds the given annotation type to the list of annotation types whose
 	 * annotations should be highlighted this painter. If the annotation  type
 	 * is already in this list, this method is without effect.
+	 * <p>
+	 * <strong>Note:</strong> The annotations will only be painted if this
+	 * painter has been registered as text presentation listener on the viewer.</p>
 	 *
 	 * @param annotationType the annotation type
+	 * @see ITextViewerExtension4#addTextPresentationListener(ITextPresentationListener)
 	 * @since 3.0
 	 */
 	public void addHighlightAnnotationType(Object annotationType) {
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/ChangeRulerColumn.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/ChangeRulerColumn.java
index 0581713..d2be64c 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/ChangeRulerColumn.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/ChangeRulerColumn.java
@@ -55,7 +55,7 @@ import org.eclipse.jface.text.revisions.RevisionInformation;
  *
  * @since 3.0
  */
-public final class ChangeRulerColumn implements IVerticalRulerColumn, IVerticalRulerInfo, IVerticalRulerInfoExtension, IChangeRulerColumn, IRevisionRulerColumn {
+public final class ChangeRulerColumn implements IChangeRulerColumn, IRevisionRulerColumn {
 	/**
 	 * Handles all the mouse interaction in this line number ruler column.
 	 */
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/DefaultAnnotationHover.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/DefaultAnnotationHover.java
index 88c5b35..70ed3c6 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/DefaultAnnotationHover.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/DefaultAnnotationHover.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,7 +129,7 @@ public class DefaultAnnotationHover implements IAnnotationHover {
 	 * format like HTML.
 	 * </p>
 	 *
-	 * @param messages the messages to format
+	 * @param messages the messages to format (element type: {@link String})
 	 * @return the formatted message
 	 */
 	protected String formatMultipleMessages(List messages) {
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/OverviewRuler.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/OverviewRuler.java
index af6a447..d673ec4 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/OverviewRuler.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/OverviewRuler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ import org.eclipse.swt.widgets.Canvas;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.ScrollBar;
 
 import org.eclipse.jface.util.Util;
 
@@ -308,6 +309,70 @@ public class OverviewRuler implements IOverviewRuler {
 	}
 
 	/**
+	 * Container for cached widget infos.
+	 * 
+	 * @since 3.7
+	 */
+	static class WidgetInfos {
+		/**
+		 * the text widget line count
+		 */
+		int maxLines;
+		/**
+		 * the height of the vertical scrollbar thumb
+		 */
+		int thumbHeight;
+		/**
+		 * the visible lines of the text widget
+		 */
+		double visibleLines;
+		/**
+		 * the invisible lines of the text widget
+		 */
+		double invisibleLines;
+		/**
+		 * the bounds of {@link OverviewRuler#fCanvas}
+		 */
+		Rectangle bounds;
+		/**
+		 * the writable area in the text widget (height of all lines in pixels)
+		 */
+		int writable;
+	
+		/**
+		 * Initializes the widget infos.
+		 * 
+		 * @param textWidget the text widget
+		 * @param canvas the overview ruler canvas
+		 */
+		public WidgetInfos(StyledText textWidget, Canvas canvas) {
+			maxLines= textWidget.getLineCount();
+			bounds= canvas.getBounds();
+			writable= JFaceTextUtil.computeLineHeight(textWidget, 0, maxLines, maxLines);
+			
+			ScrollBar verticalBar= textWidget.getVerticalBar();
+			thumbHeight= verticalBar != null ? Math.max(Math.min(bounds.height, verticalBar.getThumbBounds().height), 0) : 0;
+			
+	        int partialTopIndex= JFaceTextUtil.getPartialTopIndex(textWidget);
+	        int topLineHeight= textWidget.getLineHeight(textWidget.getOffsetAtLine(partialTopIndex));
+	        int topLinePixel= textWidget.getLinePixel(partialTopIndex);
+	        double topIndex= partialTopIndex - (double) topLinePixel / topLineHeight;
+	        
+	        int partialBottomIndex= JFaceTextUtil.getPartialBottomIndex(textWidget);
+	        int bottomLineHeight= textWidget.getLineHeight(textWidget.getOffsetAtLine(partialBottomIndex));
+	        int bottomLinePixel= textWidget.getLinePixel(partialBottomIndex);
+	        double bottomIndex= partialBottomIndex - ((double) bottomLinePixel - textWidget.getClientArea().height) / bottomLineHeight;
+			
+	        visibleLines= bottomIndex - topIndex;
+	        invisibleLines= maxLines - visibleLines;
+		}
+	}
+
+	private static final boolean DEBUG_DRAW= false;
+	private static final boolean DEBUG_COMPUTE_Y= false;
+	private static final boolean DEBUG_TO_DOCUMENT_LINE_NUMBER= false;
+	
+	/**
 	 * <code>true</code> if we're on a Mac, where "new GC(canvas)" is expensive.
 	 * @see <a href="https://bugs.eclipse.org/298936">bug 298936</a>
 	 * @since 3.6
@@ -601,10 +666,7 @@ public class OverviewRuler implements IOverviewRuler {
 
 			cacheAnnotations();
 
-			if (fTextViewer instanceof ITextViewerExtension5)
-				doPaint1(gc);
-			else
-				doPaint(gc);
+			doPaint(gc);
 
 		} finally {
 			gc.dispose();
@@ -613,102 +675,6 @@ public class OverviewRuler implements IOverviewRuler {
 		dest.drawImage(fBuffer, 0, 0);
 	}
 
-	/**
-	 * Draws this overview ruler.
-	 *
-	 * @param gc the GC to draw into
-	 */
-	private void doPaint(GC gc) {
-
-		Rectangle r= new Rectangle(0, 0, 0, 0);
-		int yy, hh= ANNOTATION_HEIGHT;
-
-		IDocument document= fTextViewer.getDocument();
-		IRegion visible= fTextViewer.getVisibleRegion();
-
-		StyledText textWidget= fTextViewer.getTextWidget();
-		int maxLines= textWidget.getLineCount();
-
-		Point size= fCanvas.getSize();
-		int writable= JFaceTextUtil.computeLineHeight(textWidget, 0, maxLines, maxLines);
-
-		if (size.y > writable)
-			size.y= Math.max(writable - fHeader.getSize().y, 0);
-
-		for (Iterator iterator= fAnnotationsSortedByLayer.iterator(); iterator.hasNext();) {
-			Object annotationType= iterator.next();
-
-			if (skip(annotationType))
-				continue;
-
-			int[] style= new int[] { FilterIterator.PERSISTENT, FilterIterator.TEMPORARY };
-			for (int t=0; t < style.length; t++) {
-
-				Iterator e= new FilterIterator(annotationType, style[t], fCachedAnnotations.iterator());
-
-				boolean areColorsComputed= false;
-				Color fill= null;
-				Color stroke= null;
-
-				for (int i= 0; e.hasNext(); i++) {
-
-					Annotation a= (Annotation) e.next();
-					Position p= fModel.getPosition(a);
-
-					if (p == null || !p.overlapsWith(visible.getOffset(), visible.getLength()))
-						continue;
-
-					int annotationOffset= Math.max(p.getOffset(), visible.getOffset());
-					int annotationEnd= Math.min(p.getOffset() + p.getLength(), visible.getOffset() + visible.getLength());
-					int annotationLength= annotationEnd - annotationOffset;
-
-					try {
-						if (ANNOTATION_HEIGHT_SCALABLE) {
-							int numbersOfLines= document.getNumberOfLines(annotationOffset, annotationLength);
-							// don't count empty trailing lines
-							IRegion lastLine= document.getLineInformationOfOffset(annotationOffset + annotationLength);
-							if (lastLine.getOffset() == annotationOffset + annotationLength) {
-								numbersOfLines -= 2;
-								hh= (numbersOfLines * size.y) / maxLines + ANNOTATION_HEIGHT;
-								if (hh < ANNOTATION_HEIGHT)
-									hh= ANNOTATION_HEIGHT;
-							} else
-								hh= ANNOTATION_HEIGHT;
-						}
-						fAnnotationHeight= hh;
-
-						int startLine= textWidget.getLineAtOffset(annotationOffset - visible.getOffset());
-						yy= Math.min((startLine * size.y) / maxLines, size.y - hh);
-
-						if (!areColorsComputed) {
-							fill= getFillColor(annotationType, style[t] == FilterIterator.TEMPORARY);
-							stroke= getStrokeColor(annotationType, style[t] == FilterIterator.TEMPORARY);
-							areColorsComputed= true;
-						}
-
-						if (fill != null) {
-							gc.setBackground(fill);
-							gc.fillRectangle(INSET, yy, size.x-(2*INSET), hh);
-						}
-
-						if (stroke != null) {
-							gc.setForeground(stroke);
-							r.x= INSET;
-							r.y= yy;
-							if (yy + hh == size.y)
-								r.y--;
-							r.width= size.x - (2 * INSET);
-							r.height= hh;
-							gc.setLineWidth(0); // NOTE: 0 means width is 1 but with optimized performance
-							gc.drawRectangle(r);
-						}
-					} catch (BadLocationException x) {
-					}
-				}
-			}
-		}
-	}
-
 	private void cacheAnnotations() {
 		fCachedAnnotations.clear();
 		if (fModel != null) {
@@ -728,26 +694,26 @@ public class OverviewRuler implements IOverviewRuler {
 	}
 
 	/**
-	 * Draws this overview ruler. Uses <code>ITextViewerExtension5</code> for
-	 * its implementation. Will replace <code>doPaint(GC)</code>.
+	 * Draws this overview ruler.
 	 *
 	 * @param gc the GC to draw into
 	 */
-	private void doPaint1(GC gc) {
+	private void doPaint(GC gc) {
 
 		Rectangle r= new Rectangle(0, 0, 0, 0);
 		int yy, hh= ANNOTATION_HEIGHT;
 
-		ITextViewerExtension5 extension= (ITextViewerExtension5) fTextViewer;
 		IDocument document= fTextViewer.getDocument();
 		StyledText textWidget= fTextViewer.getTextWidget();
+		ITextViewerExtension5 extension= null;
+		IRegion visible= null;
+		if (fTextViewer instanceof ITextViewerExtension5)
+			extension= (ITextViewerExtension5) fTextViewer;
+		else
+			visible= fTextViewer.getVisibleRegion(); // legacy support
 
-		int maxLines= textWidget.getLineCount();
-		Point size= fCanvas.getSize();
-		int writable= JFaceTextUtil.computeLineHeight(textWidget, 0, maxLines, maxLines);
-		if (size.y > writable)
-			size.y= Math.max(writable - fHeader.getSize().y, 0);
-
+		WidgetInfos infos= null;
+		
 		for (Iterator iterator= fAnnotationsSortedByLayer.iterator(); iterator.hasNext();) {
 			Object annotationType= iterator.next();
 
@@ -756,43 +722,58 @@ public class OverviewRuler implements IOverviewRuler {
 
 			int[] style= new int[] { FilterIterator.PERSISTENT, FilterIterator.TEMPORARY };
 			for (int t=0; t < style.length; t++) {
-
-				Iterator e= new FilterIterator(annotationType, style[t], fCachedAnnotations.iterator());
-
 				boolean areColorsComputed= false;
 				Color fill= null;
 				Color stroke= null;
 
-				for (int i= 0; e.hasNext(); i++) {
-
+				Iterator e= new FilterIterator(annotationType, style[t], fCachedAnnotations.iterator());
+				while (e.hasNext()) {
 					Annotation a= (Annotation) e.next();
 					Position p= fModel.getPosition(a);
 
 					if (p == null)
 						continue;
-
-					IRegion widgetRegion= extension.modelRange2WidgetRange(new Region(p.getOffset(), p.getLength()));
-					if (widgetRegion == null)
+					if (visible != null && !p.overlapsWith(visible.getOffset(), visible.getLength()))
 						continue;
 
+					int annotationOffset= p.getOffset();
+					int annotationLength= p.getLength();
+					IRegion widgetRegion= null;
+					if (visible != null) {
+						annotationOffset= Math.max(p.getOffset(), visible.getOffset());
+						int annotationEnd= Math.min(p.getOffset() + p.getLength(), visible.getOffset() + visible.getLength());
+						annotationLength= annotationEnd - annotationOffset;
+					} else {
+						widgetRegion= extension.modelRange2WidgetRange(new Region(annotationOffset, annotationLength));
+						if (widgetRegion == null)
+							continue;
+					}
+					
+					if (infos == null) {
+						infos= new WidgetInfos(textWidget, fCanvas);
+						r.x= INSET;
+						r.width= infos.bounds.width - (2 * INSET);
+					}
+
 					try {
+						int startOffset= visible != null ? annotationOffset - visible.getOffset() : widgetRegion.getOffset();
+						int startLine= textWidget.getLineAtOffset(startOffset);
+						
+						yy= computeY(startLine, infos);
+						
 						if (ANNOTATION_HEIGHT_SCALABLE) {
-							int numbersOfLines= document.getNumberOfLines(p.getOffset(), p.getLength());
+							int numbersOfLines= document.getNumberOfLines(annotationOffset, annotationLength);
 							// don't count empty trailing lines
-							IRegion lastLine= document.getLineInformationOfOffset(p.getOffset() + p.getLength());
-							if (lastLine.getOffset() == p.getOffset() + p.getLength()) {
+							IRegion lastLine= document.getLineInformationOfOffset(annotationOffset + annotationLength);
+							if (lastLine.getOffset() == annotationOffset + annotationLength) {
 								numbersOfLines -= 2;
-								hh= (numbersOfLines * size.y) / maxLines + ANNOTATION_HEIGHT;
-								if (hh < ANNOTATION_HEIGHT)
-									hh= ANNOTATION_HEIGHT;
+								int yy2= computeY(startLine + numbersOfLines, infos);
+								hh= Math.max(yy2 - yy, ANNOTATION_HEIGHT);
 							} else
 								hh= ANNOTATION_HEIGHT;
 						}
 						fAnnotationHeight= hh;
-
-						int startLine= textWidget.getLineAtOffset(widgetRegion.getOffset());
-						yy= Math.min((startLine * size.y) / maxLines, size.y - hh);
-
+						
 						if (!areColorsComputed) {
 							fill= getFillColor(annotationType, style[t] == FilterIterator.TEMPORARY);
 							stroke= getStrokeColor(annotationType, style[t] == FilterIterator.TEMPORARY);
@@ -801,16 +782,14 @@ public class OverviewRuler implements IOverviewRuler {
 
 						if (fill != null) {
 							gc.setBackground(fill);
-							gc.fillRectangle(INSET, yy, size.x-(2*INSET), hh);
+							gc.fillRectangle(INSET, yy, infos.bounds.width-(2*INSET), hh);
 						}
 
 						if (stroke != null) {
 							gc.setForeground(stroke);
-							r.x= INSET;
 							r.y= yy;
-							if (yy + hh == size.y)
+							if (yy + hh == infos.bounds.height)
 								r.y--;
-							r.width= size.x - (2 * INSET);
 							r.height= hh;
 							gc.setLineWidth(0); // NOTE: 0 means width is 1 but with optimized performance
 							gc.drawRectangle(r);
@@ -820,6 +799,62 @@ public class OverviewRuler implements IOverviewRuler {
 				}
 			}
 		}
+		
+		if (DEBUG_DRAW) {
+			// draw debugging guides (boundaries):
+			if (infos == null)
+				infos= new WidgetInfos(textWidget, fCanvas);
+			gc.setForeground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_MAGENTA));
+			yy= infos.thumbHeight / 2;
+			gc.drawLine(0, yy, infos.bounds.x/2, yy);
+			yy= infos.bounds.height - infos.thumbHeight / 2;
+			gc.drawLine(0, yy, infos.bounds.x/2, yy);
+			
+			gc.setForeground(gc.getDevice().getSystemColor(SWT.COLOR_BLUE));
+			yy= 0;
+			gc.drawLine(0, yy, infos.bounds.x/2, yy);
+			yy= infos.bounds.height - 1;
+			gc.drawLine(0, yy, infos.bounds.x/2, yy);
+		}
+	}
+
+	/**
+	 * Computes and returns the y location of the given startLine.
+	 * 
+	 * @param startLine the start line
+	 * @param infos the cached widget infos
+	 * @return the vertical position of the given startLine in the overview ruler
+	 * @since 3.7
+	 */
+	private int computeY(int startLine, WidgetInfos infos) {
+		// this is the inverse of #toLineNumbers(int)
+		
+		int yy;
+		if (infos.bounds.height > infos.writable || infos.invisibleLines <= 0) { // too few lines for relative positions: align annotations with textWidget lines
+			yy = Math.max(0, (2 * startLine + 1) * infos.writable / (infos.maxLines * 2) - infos.bounds.y);
+			if (DEBUG_COMPUTE_Y)
+				System.out.println("static: " + yy); //$NON-NLS-1$
+			
+		} else if (startLine + 1 < infos.visibleLines / 2) { // before middle of first page: map to area from 0 to thumbHeight/2
+			yy= (int) (startLine * infos.thumbHeight / infos.visibleLines); // == startLine * (thumbHeight / 2) / (visibleLines / 2);
+			if (DEBUG_COMPUTE_Y)
+				System.out.println("start:  " + yy); //$NON-NLS-1$
+			
+		} else if (infos.maxLines - infos.visibleLines / 2 <= startLine) { // after middle of last page: map to area from canvasHeight-1 - thumbHeight/2 to canvasHeight-1
+			yy= (int) (infos.bounds.height-1 - (double)infos.thumbHeight / 2 + (startLine - (infos.maxLines - infos.visibleLines / 2) + 1) * infos.thumbHeight / infos.visibleLines);
+			if (DEBUG_COMPUTE_Y)
+				System.out.println("end:    " + yy); //$NON-NLS-1$
+			
+		} else { // middle of text: map to area from thumbHeight/2 to (canvasHeight-1 - thumbHeight/2)
+			yy= (int) ((double)infos.thumbHeight/2 + (startLine + 1 - infos.visibleLines / 2) * (infos.bounds.height-1 - infos.thumbHeight) / infos.invisibleLines);
+			if (DEBUG_COMPUTE_Y)
+				System.out.println("middle: " + yy); //$NON-NLS-1$
+		}
+		// center of rectangle should be at the calculated position:
+		yy-= ANNOTATION_HEIGHT / 2;
+		// cap at start/end:
+		yy= Math.max(0, Math.min(yy, infos.bounds.height-1 - ANNOTATION_HEIGHT));
+		return yy;
 	}
 
 	/*
@@ -865,31 +900,80 @@ public class OverviewRuler implements IOverviewRuler {
 	 * of the document.
 	 *
 	 * @param y_coordinate the y-coordinate
-	 * @return the corresponding document lines
+	 * @param annotationRect <code>true</code> to only consider the position of a drawn annotation rectangle,
+	 * 	<code>false</code> to consider the whole line
+	 * @return the corresponding document lines as {firstLine, lastLine}, or {-1, -1} if no lines correspond to the y-coordinate 
 	 */
-	private int[] toLineNumbers(int y_coordinate) {
-
-		StyledText textWidget=  fTextViewer.getTextWidget();
-		int maxLines= textWidget.getContent().getLineCount();
-
-		int rulerLength= fCanvas.getSize().y;
-		int writable= JFaceTextUtil.computeLineHeight(textWidget, 0, maxLines, maxLines);
-
-		if (rulerLength > writable)
-			rulerLength= Math.max(writable - fHeader.getSize().y, 0);
-
-		if (y_coordinate >= writable || y_coordinate >= rulerLength)
+	private int[] toLineNumbers(int y_coordinate, boolean annotationRect) {
+		// this is the inverse of #computeY(int, WidgetInfos)
+		
+		WidgetInfos infos= new WidgetInfos(fTextViewer.getTextWidget(), fCanvas);
+		
+		if (y_coordinate >= infos.writable || y_coordinate >= infos.bounds.height || y_coordinate < 0)
 			return new int[] {-1, -1};
-
+		
+		if (annotationRect && ANNOTATION_HEIGHT >= infos.bounds.height / infos.maxLines)
+			annotationRect= false;
+		
 		int[] lines= new int[2];
+		int[] pixels;
 
-		int pixel0= Math.max(y_coordinate - 1, 0);
-		int pixel1= Math.min(rulerLength, y_coordinate + 1);
-		rulerLength= Math.max(rulerLength, 1);
-
-		lines[0]= (pixel0 * maxLines) / rulerLength;
-		lines[1]= (pixel1 * maxLines) / rulerLength;
-
+		int pixelEnd= Math.min(infos.bounds.height, y_coordinate + ANNOTATION_HEIGHT / 2 + 1);
+		if (annotationRect) {
+			pixels= new int[] { pixelEnd };
+		} else {
+			int pixelStart= Math.max(y_coordinate - ANNOTATION_HEIGHT / 2 + 1, 0);
+			pixels= new int[] { pixelStart, pixelEnd };
+		}
+		
+		if (infos.bounds.height > infos.writable || infos.invisibleLines <= 0) { // too few lines for relative positions: align annotations with textWidget lines
+//			yy = Math.max(0, (2 * startLine + 1) * infos.writable / (infos.maxLines * 2) - infos.bounds.y);
+			for (int i= 0; i < pixels.length; i++)
+				lines[i]= (int) ((pixels[i] + infos.bounds.y) * infos.maxLines / (double)infos.writable);
+			if (DEBUG_TO_DOCUMENT_LINE_NUMBER)
+				System.out.println("static y: " + y_coordinate + " => [" + lines[0] + ", " + lines[1] + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			
+		} else if (y_coordinate < infos.thumbHeight / 2) { // before middle of first page: map to area from 0 to thumbHeight/2
+//			yy= (int) (startLine * infos.thumbHeight / infos.visibleLines);
+			for (int i= 0; i < pixels.length; i++)
+				lines[i] = (int) (pixels[i] * infos.visibleLines / infos.thumbHeight);
+			if (DEBUG_TO_DOCUMENT_LINE_NUMBER)
+				System.out.println("start  y: " + y_coordinate + " => [" + lines[0] + ", " + lines[1] + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			
+		} else if (infos.bounds.height - 1 - infos.thumbHeight / 2 < y_coordinate) { // after middle of last page: map to area from canvasHeight-1 - thumbHeight/2 to canvasHeight-1
+//			yy= (int) (infos.bounds.height-1 - (double)infos.thumbHeight / 2 + (startLine - (infos.maxLines - infos.visibleLines / 2) + 1) * infos.thumbHeight / infos.visibleLines);
+			for (int i= 0; i < pixels.length; i++)
+				lines[i] = (int) ((pixels[i] - (infos.bounds.height-1) + (double)infos.thumbHeight / 2) * infos.visibleLines / infos.thumbHeight - 1 + (infos.maxLines - infos.visibleLines / 2));
+			if (DEBUG_TO_DOCUMENT_LINE_NUMBER)
+				System.out.println("end    y: " + y_coordinate + " => [" + lines[0] + ", " + lines[1] + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			
+		} else { // middle of text: map to area from thumbHeight/2 to (canvasHeight-1 - thumbHeight/2)
+//			yy= (int) ((double)infos.thumbHeight/2 + (startLine + 1 - infos.visibleLines / 2) * (infos.bounds.height-1 - infos.thumbHeight) / infos.invisibleLines);
+			for (int i= 0; i < pixels.length; i++)
+				lines[i]= (int) ((pixels[i] - (double)infos.thumbHeight/2) * infos.invisibleLines / (infos.bounds.height-1 - infos.thumbHeight) - 1 + infos.visibleLines / 2);
+			if (DEBUG_TO_DOCUMENT_LINE_NUMBER)
+				System.out.println("middle y: " + y_coordinate + " => [" + lines[0] + ", " + lines[1] + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		}
+		
+		if (y_coordinate < ANNOTATION_HEIGHT && y_coordinate < infos.bounds.y)
+			lines[0]= 0;
+		else if (lines[0] < 0)
+			lines[0]= 0;
+		
+		if (annotationRect) {
+			int y0= computeY(lines[0], infos);
+			if (y_coordinate < y0 || y0 + ANNOTATION_HEIGHT < y_coordinate) {
+				lines[0]= -1;
+				lines[1]= -1;
+				return lines;
+			} else {
+				lines[1]= lines[0];
+			}
+		}
+		
+		if (lines[1] > infos.maxLines)
+			lines[1]= infos.maxLines;
+		
 		if (fTextViewer instanceof ITextViewerExtension5) {
 			ITextViewerExtension5 extension= (ITextViewerExtension5) fTextViewer;
 			lines[0]= extension.widgetLine2ModelLine(lines[0]);
@@ -903,7 +987,9 @@ public class OverviewRuler implements IOverviewRuler {
 			} catch (BadLocationException x) {
 			}
 		}
-
+		
+		if (DEBUG_TO_DOCUMENT_LINE_NUMBER)
+			System.out.println("result: [" + lines[0] + ", " + lines[1] + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		return lines;
 	}
 
@@ -992,7 +1078,9 @@ public class OverviewRuler implements IOverviewRuler {
 	 */
 	private void handleMouseDown(MouseEvent event) {
 		if (fTextViewer != null) {
-			int[] lines= toLineNumbers(event.y);
+			int[] lines= toLineNumbers(event.y, true);
+			if (lines[0] == -1)
+				lines= toLineNumbers(event.y, false);
 			Position p= getAnnotationPosition(lines);
 			if (p == null && event.button == 1) {
 				try {
@@ -1017,7 +1105,7 @@ public class OverviewRuler implements IOverviewRuler {
 	 */
 	private void handleMouseMove(MouseEvent event) {
 		if (fTextViewer != null) {
-			int[] lines= toLineNumbers(event.y);
+			int[] lines= toLineNumbers(event.y, true);
 			Position p= getAnnotationPosition(lines);
 			Cursor cursor= (p != null ? fHitDetectionCursor : null);
 			if (cursor != fLastCursor) {
@@ -1271,7 +1359,9 @@ public class OverviewRuler implements IOverviewRuler {
 		if (fTextViewer == null || y_coordinate == -1)
 			return -1;
 
-		int[] lineNumbers= toLineNumbers(y_coordinate);
+		int[] lineNumbers= toLineNumbers(y_coordinate, true);
+		if (lineNumbers[0] == -1)
+			lineNumbers= toLineNumbers(y_coordinate, false);
 		int bestLine= findBestMatchingLineNumber(lineNumbers);
 		if (bestLine == -1 && lineNumbers.length > 0)
 			return lineNumbers[0];
@@ -1296,7 +1386,7 @@ public class OverviewRuler implements IOverviewRuler {
 	 * @see org.eclipse.jface.text.source.IOverviewRuler#hasAnnotation(int)
 	 */
 	public boolean hasAnnotation(int y) {
-		return findBestMatchingLineNumber(toLineNumbers(y)) != -1;
+		return findBestMatchingLineNumber(toLineNumbers(y, true)) != -1;
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java
index e3c48d1..87b2a78 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/SourceViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.IRewriteTarget;
 import org.eclipse.jface.text.ISlaveDocumentManager;
 import org.eclipse.jface.text.ISlaveDocumentManagerExtension;
+import org.eclipse.jface.text.ISynchronizable;
 import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.ITextViewerExtension2;
 import org.eclipse.jface.text.Position;
@@ -204,7 +205,6 @@ public class SourceViewer extends TextViewer implements ISourceViewer, ISourceVi
 				} finally {
 					textWidget.setSize(originalSize); // also resets scroll bar values
 				}
-				return arrowHeights;
 			}
 			return arrowHeights;
 		}
@@ -622,6 +622,13 @@ public class SourceViewer extends TextViewer implements ISourceViewer, ISourceVi
 
 		if (annotationModel != null && document != null) {
 			fVisualAnnotationModel= createVisualAnnotationModel(annotationModel);
+
+			// Make sure the visual model uses the same lock as the underlying model
+			if (annotationModel instanceof ISynchronizable && fVisualAnnotationModel instanceof ISynchronizable) {
+				ISynchronizable sync= (ISynchronizable)fVisualAnnotationModel;
+				sync.setLockObject(((ISynchronizable)annotationModel).getLockObject());
+			}
+
 			fVisualAnnotationModel.connect(document);
 		}
 
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/VisualAnnotationModel.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/VisualAnnotationModel.java
deleted file mode 100644
index bec1088..0000000
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/source/VisualAnnotationModel.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jface.text.source;
-
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.Position;
-
-
-
-/**
- * Annotation model for visual annotations. Assume a viewer's input element is annotated with
- * some semantic annotation such as a breakpoint and that it is simultaneously shown in multiple
- * viewers. A source viewer, e.g., supports visual range indication for which it utilizes
- * annotations. The range indicating annotation is specific to the visual presentation
- * of the input element in this viewer and thus should only be visible in this viewer. The
- * breakpoints however are independent from the input element's presentation and thus should
- * be shown in all viewers in which the element is shown. As a viewer supports one vertical
- * ruler which is based on one annotation model, there must be a visual annotation model for
- * each viewer which all wrap the same element specific model annotation model.
- */
-class VisualAnnotationModel extends AnnotationModel implements IAnnotationModelListener {
-
-	/** The wrapped model annotation model */
-	private IAnnotationModel fModel;
-
-	/**
-	 * Constructs a visual annotation model which wraps the given
-	 * model based annotation model
-	 *
-	 * @param modelAnnotationModel the model based annotation model
-	 */
-	public VisualAnnotationModel(IAnnotationModel modelAnnotationModel) {
-		fModel= modelAnnotationModel;
-	}
-
-	/**
-	 * Returns the visual annotation model's wrapped model based annotation model.
-	 *
-	 * @return the model based annotation model
-	 */
-	public IAnnotationModel getModelAnnotationModel() {
-		return fModel;
-	}
-
-	/*
-	 * @see IAnnotationModel#addAnnotationModelListener(IAnnotationModelListener)
-	 */
-	public void addAnnotationModelListener(IAnnotationModelListener listener) {
-
-		if (fModel != null && fAnnotationModelListeners.isEmpty())
-			fModel.addAnnotationModelListener(this);
-
-		super.addAnnotationModelListener(listener);
-	}
-
-	/*
-	 * @see IAnnotationModel#connect(IDocument)
-	 */
-	public void connect(IDocument document) {
-		super.connect(document);
-		if (fModel != null)
-			fModel.connect(document);
-	}
-
-	/*
-	 * @see IAnnotationModel#disconnect(IDocument)
-	 */
-	public void disconnect(IDocument document) {
-		super.disconnect(document);
-		if (fModel != null)
-			fModel.disconnect(document);
-	}
-
-	/*
-	 * @see IAnnotationModel#getAnnotationIterator()
-	 */
-	public Iterator getAnnotationIterator() {
-
-		if (fModel == null)
-			return super.getAnnotationIterator();
-
-		ArrayList a= new ArrayList(20);
-
-		Iterator e= fModel.getAnnotationIterator();
-		while (e.hasNext())
-			a.add(e.next());
-
-		e= super.getAnnotationIterator();
-		while (e.hasNext())
-			a.add(e.next());
-
-		return a.iterator();
-	}
-
-	/*
-	 * @see IAnnotationModel#getPosition(Annotation)
-	 */
-	public Position getPosition(Annotation annotation) {
-
-		Position p= (Position) getAnnotationMap().get(annotation);
-		if (p != null)
-			return p;
-
-		if (fModel != null)
-			return fModel.getPosition(annotation);
-
-		return null;
-	}
-
-	/*
-	 * @see IAnnotationModelListener#modelChanged(IAnnotationModel)
-	 */
-	public void modelChanged(IAnnotationModel model) {
-		if (model == fModel) {
-			Iterator iter= new ArrayList(fAnnotationModelListeners).iterator();
-			while (iter.hasNext()) {
-				IAnnotationModelListener l= (IAnnotationModelListener)iter.next();
-				l.modelChanged(this);
-			}
-		}
-	}
-
-	/*
-	 * @see IAnnotationModel#removeAnnotationModelListener(IAnnotationModelListener)
-	 */
-	public void removeAnnotationModelListener(IAnnotationModelListener listener) {
-		super.removeAnnotationModelListener(listener);
-
-		if (fModel != null && fAnnotationModelListeners.isEmpty())
-			fModel.removeAnnotationModelListener(this);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/templates/ContextTypeRegistry.java b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/templates/ContextTypeRegistry.java
index 70b526a..8a21620 100644
--- a/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/templates/ContextTypeRegistry.java
+++ b/eclipse/plugins/org.eclipse.jface.text/src/org/eclipse/jface/text/templates/ContextTypeRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,7 @@ public class ContextTypeRegistry {
 	/**
 	 * Returns an iterator over all registered context types.
 	 *
-	 * @return an iterator over all registered context types
+	 * @return an iterator over all registered context types (element type: {@link TemplateContextType})
 	 */
 	public Iterator contextTypes() {
 		return fContextTypes.values().iterator();
diff --git a/eclipse/plugins/org.eclipse.jface/.options b/eclipse/plugins/org.eclipse.jface/.options
index f62a68c..a96d276 100644
--- a/eclipse/plugins/org.eclipse.jface/.options
+++ b/eclipse/plugins/org.eclipse.jface/.options
@@ -1,7 +1,7 @@
 # Debugging options for the org.eclipse.jface plugin.
 
-# Turn on debugging for the org.eclipse.ui plugin.
-org.eclipse.jface/debug=false
+# Turn on debugging for the org.eclipse.jface plugin.
+org.eclipse.jface/debug=true
 
 # Log a message if a dialog is opened without a parent
 org.eclipse.jface/debug/dialog/noparent=false
@@ -9,6 +9,9 @@ org.eclipse.jface/debug/dialog/noparent=false
 # Always log reentrant calls to viewers (if set to false, it just logs the first reentrant call)
 org.eclipse.jface/debug/viewers/reentrantViewerCalls=false
 
+# Log illegal equal elements in a viewer
+org.eclipse.jface/debug/viewers/equalElements=false
+
 # Show the jface new look for the preferences dialog
 org.eclipse.jface/newlook/preferences/showNewLook=false
 
diff --git a/eclipse/plugins/org.eclipse.jface/.settings/.api_filters b/eclipse/plugins/org.eclipse.jface/.settings/.api_filters
new file mode 100644
index 0000000..a203a09
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface/.settings/.api_filters
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><component id="org.eclipse.jface" version="2">
+    <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.browser.WebKit">
+        <filter id="305426566">
+            <message_arguments>
+                <message_argument value="org.eclipse.swt.browser.WebKit"/>
+                <message_argument value="org.eclipse.jface_3.6.0"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF
index 9f7a4a9..68b6e05 100644
--- a/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jface/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jface
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java
index 93463d7..e4a4eda 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/MenuManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ import org.eclipse.swt.widgets.ToolBar;
  * </p>
  */
 public class MenuManager extends ContributionManager implements IMenuManager {
+	private static final String MANAGER_KEY = "org.eclipse.jface.action.MenuManager.managerKey"; //$NON-NLS-1$
 
     /**
      * The menu id.
@@ -174,6 +175,7 @@ public class MenuManager extends ContributionManager implements IMenuManager {
     public Menu createContextMenu(Control parent) {
         if (!menuExist()) {
             menu = new Menu(parent);
+            menu.setData(MANAGER_KEY, this);
             initializeMenu();
         }
         return menu;
@@ -191,6 +193,7 @@ public class MenuManager extends ContributionManager implements IMenuManager {
     public Menu createMenuBar(Decorations parent) {
         if (!menuExist()) {
             menu = new Menu(parent, SWT.BAR);
+            menu.setData(MANAGER_KEY, this);
             update(false);
         }
         return menu;
@@ -275,6 +278,7 @@ public class MenuManager extends ContributionManager implements IMenuManager {
 
             if (!menuExist()) {
 				menu = new Menu(parent);
+				menu.setData(MANAGER_KEY, this);
 			}
 
             menuItem.setMenu(menu);
@@ -895,7 +899,7 @@ public class MenuManager extends ContributionManager implements IMenuManager {
                             char character = Character.toUpperCase(text
                                     .charAt(index + 1));
 
-                            if (callback.isAcceleratorInUse(SWT.ALT | character)) {
+                            if (callback.isAcceleratorInUse(SWT.ALT | character) && isTopLevelMenu()) {
                                 if (index == 0) {
     								text = text.substring(1);
     							} else {
@@ -918,6 +922,16 @@ public class MenuManager extends ContributionManager implements IMenuManager {
         }
     }
 
+	private boolean isTopLevelMenu() {
+		if (menu != null && !menu.isDisposed() && menuItem != null
+				&& !menuItem.isDisposed()) {
+			Menu parentMenu = menuItem.getParent();
+			return parentMenu != null
+					&& ((parentMenu.getStyle() & SWT.BAR) == SWT.BAR);
+		}
+		return false;
+	}
+
 	/**
 	 * Dispose any images allocated for this menu
 	 */
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java
index 443017e..315e8dc 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/action/StatusLine.java
@@ -12,12 +12,19 @@
 package org.eclipse.jface.action;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-
+import org.eclipse.jface.dialogs.ProgressIndicator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceColors;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.Util;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.accessibility.ACC;
 import org.eclipse.swt.accessibility.AccessibleControlAdapter;
 import org.eclipse.swt.accessibility.AccessibleControlEvent;
 import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -33,15 +40,11 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Layout;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.swt.widgets.ToolItem;
 
-import org.eclipse.jface.dialogs.ProgressIndicator;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceColors;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.util.Util;
-
 /**
  * A StatusLine control is a SWT Composite with a horizontal layout which hosts
  * a number of status indication controls. Typically it is situated below the
@@ -113,6 +116,8 @@ import org.eclipse.jface.util.Util;
 	/** stop image descriptor */
 	protected static ImageDescriptor fgStopImage = ImageDescriptor
 			.createFromFile(StatusLine.class, "images/stop.gif");//$NON-NLS-1$
+
+	private MenuItem copyMenuItem;
 	static {
 		JFaceResources.getImageRegistry().put(
 				"org.eclipse.jface.parts.StatusLine.stopImage", fgStopImage);//$NON-NLS-1$
@@ -282,13 +287,26 @@ import org.eclipse.jface.util.Util;
 		setLayout(new StatusLineLayout());
 
 		fMessageLabel = new CLabel(this, SWT.NONE);// SWT.SHADOW_IN);
-		// Color[] colors = new Color[2];
-		// colors[0] =
-		// parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW);
-		// colors[1] = fMessageLabel.getBackground();
-		// int[] gradient = new int[] {JFaceColors.STATUS_PERCENT};
-		// fMessageLabel.setBackground(colors, gradient);
-
+		
+		// this would need extra work to make this accessible
+		// from the workbench command framework.
+		Menu menu = new Menu(fMessageLabel);
+		fMessageLabel.setMenu(menu);
+		copyMenuItem = new MenuItem(menu, SWT.PUSH);
+		copyMenuItem.setText(JFaceResources.getString("copy")); //$NON-NLS-1$
+		copyMenuItem.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				String text = fMessageLabel.getText();
+				if (text != null && text.length() > 0) {
+					text = LegacyActionTools.removeMnemonics(text);
+					Clipboard cp = new Clipboard(e.display);
+					cp.setContents(new Object[] { text },
+							new Transfer[] { TextTransfer.getInstance() });
+					cp.dispose();
+				}
+			}
+		});
+		
 		fProgressIsVisible = false;
 		fCancelEnabled = false;
 
@@ -678,6 +696,10 @@ import org.eclipse.jface.util.Util;
 				fMessageLabel.setText(fMessageText == null ? "" : fMessageText); //$NON-NLS-1$
 				fMessageLabel.setImage(fMessageImage);
 			}
+			if (copyMenuItem != null && !copyMenuItem.isDisposed()) {
+				String text = fMessageLabel.getText();
+				copyMenuItem.setEnabled(text != null && text.length() > 0);
+			}
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/DialogSettings.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/DialogSettings.java
index 328d78e..37fac45 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/DialogSettings.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/DialogSettings.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -210,6 +210,27 @@ public class DialogSettings implements IDialogSettings {
     public String getName() {
         return name;
     }
+    
+	/**
+	 * Returns a section with the given name in the given dialog settings. If
+	 * the section doesn't exist yet, then it is first created.
+	 * 
+	 * @param settings
+	 *            the parent settings
+	 * @param sectionName
+	 *            the name of the section
+	 * @return the section
+	 * 
+	 * @since 3.7
+	 */
+	public static IDialogSettings getOrCreateSection(IDialogSettings settings,
+			String sectionName) {
+		IDialogSettings section = settings.getSection(sectionName);
+		if (section == null) {
+			section = settings.addNewSection(sectionName);
+		}
+		return section;
+	}
 
     /* (non-Javadoc)
      * Method declared on IDialogSettings.
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorDialog.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorDialog.java
index 25159bb..e42eef7 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorDialog.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorDialog.java
@@ -195,6 +195,10 @@ public class ErrorDialog extends IconAndMessageDialog {
 
 		if (provider == null)
 			return;
+		
+		if(!provider.validFor(status)){
+			return;
+		}
 
 		Composite supportArea = new Composite(parent, SWT.NONE);
 		provider.createSupportArea(supportArea, status);
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorSupportProvider.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorSupportProvider.java
index 9293ac9..9bb4f4c 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorSupportProvider.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/ErrorSupportProvider.java
@@ -30,4 +30,19 @@ public abstract class ErrorSupportProvider {
 		 * @return Control
 		 */
 		public abstract Control createSupportArea(Composite parent, IStatus status);
+		
+		/**
+		 * This method is called before
+		 * {@link #createSupportArea(Composite, IStatus)} to check if the
+		 * {@link ErrorSupportProvider} will display any significant
+		 * informations. If not, then it will not be presented at all.
+		 * 
+		 * @param status
+		 *            - {@link IStatus} for which status are will be requested.
+		 * @return true if provider is able to process particular {@link IStatus}
+		 * @since 3.7
+		 */
+		public boolean validFor(IStatus status){
+			return true;
+		}
 }
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java
index 883a4c2..fbc7ee3 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,10 +36,8 @@ package org.eclipse.jface.dialogs;
 import org.eclipse.jface.resource.JFaceResources;
 
 /**
- * IDialogConstants is the interface for common dialog strings and ids
- * used throughout JFace.
- * It is recommended that you use these labels and ids whereever 
- * for consistency with the JFace dialogs.
+ * IDialogConstants is the interface for common dialog strings and ids used throughout JFace. It is
+ * recommended that you use these labels and ids wherever for consistency with the JFace dialogs.
  */
 public interface IDialogConstants {
     // button ids
@@ -171,103 +169,202 @@ public interface IDialogConstants {
     // button labels
     /**
      * The label for OK buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String OK_LABEL = JFaceResources.getString("ok"); //$NON-NLS-1$
+    public String OK_LABEL = JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY); 
 
     /**
      * The label for cancel buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.CANCEL_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String CANCEL_LABEL = JFaceResources.getString("cancel"); //$NON-NLS-1$
+    public String CANCEL_LABEL = JFaceResources.getString(IDialogLabelKeys.CANCEL_LABEL_KEY);
 
     /**
      * The label for yes buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.YES_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String YES_LABEL = JFaceResources.getString("yes"); //$NON-NLS-1$
-
+    public String YES_LABEL = JFaceResources.getString(IDialogLabelKeys.YES_LABEL_KEY);
     /**
      * The label for no buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.NO_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String NO_LABEL = JFaceResources.getString("no"); //$NON-NLS-1$
+    public String NO_LABEL = JFaceResources.getString(IDialogLabelKeys.NO_LABEL_KEY);
 
     /**
      * The label for not to all buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.NO_TO_ALL_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String NO_TO_ALL_LABEL = JFaceResources.getString("notoall"); //$NON-NLS-1$
+    public String NO_TO_ALL_LABEL = JFaceResources.getString(IDialogLabelKeys.NO_TO_ALL_LABEL_KEY);
 
     /**
      * The label for yes to all buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.YES_TO_ALL_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String YES_TO_ALL_LABEL = JFaceResources.getString("yestoall"); //$NON-NLS-1$
+    public String YES_TO_ALL_LABEL = JFaceResources.getString(IDialogLabelKeys.YES_TO_ALL_LABEL_KEY);
 
     /**
      * The label for skip buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.SKIP_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String SKIP_LABEL = JFaceResources.getString("skip"); //$NON-NLS-1$
+    public String SKIP_LABEL = JFaceResources.getString(IDialogLabelKeys.SKIP_LABEL_KEY);
 
     /**
      * The label for stop buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.STOP_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String STOP_LABEL = JFaceResources.getString("stop"); //$NON-NLS-1$
+    public String STOP_LABEL = JFaceResources.getString(IDialogLabelKeys.STOP_LABEL_KEY);
 
     /**
      * The label for abort buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.ABORT_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String ABORT_LABEL = JFaceResources.getString("abort"); //$NON-NLS-1$
+    public String ABORT_LABEL = JFaceResources.getString(IDialogLabelKeys.ABORT_LABEL_KEY);
 
     /**
      * The label for retry buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.RETRY_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String RETRY_LABEL = JFaceResources.getString("retry"); //$NON-NLS-1$
+    public String RETRY_LABEL = JFaceResources.getString(IDialogLabelKeys.RETRY_LABEL_KEY);
 
     /**
      * The label for ignore buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.IGNORE_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String IGNORE_LABEL = JFaceResources.getString("ignore"); //$NON-NLS-1$
+    public String IGNORE_LABEL = JFaceResources.getString(IDialogLabelKeys.IGNORE_LABEL_KEY);
 
     /**
      * The label for proceed buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.PROCEED_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String PROCEED_LABEL = JFaceResources.getString("proceed"); //$NON-NLS-1$
+    public String PROCEED_LABEL = JFaceResources.getString(IDialogLabelKeys.PROCEED_LABEL_KEY);
 
     /**
      * The label for open buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.OPEN_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String OPEN_LABEL = JFaceResources.getString("open"); //$NON-NLS-1$
+    public String OPEN_LABEL = JFaceResources.getString(IDialogLabelKeys.OPEN_LABEL_KEY);
 
     /**
      * The label for close buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.CLOSE_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String CLOSE_LABEL = JFaceResources.getString("close"); //$NON-NLS-1$
+    public String CLOSE_LABEL = JFaceResources.getString(IDialogLabelKeys.CLOSE_LABEL_KEY);
 
     /**
      * The label for show details buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.SHOW_DETAILS_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String SHOW_DETAILS_LABEL = JFaceResources.getString("showDetails"); //$NON-NLS-1$
+    public String SHOW_DETAILS_LABEL = JFaceResources.getString(IDialogLabelKeys.SHOW_DETAILS_LABEL_KEY);
 
     /**
      * The label for hide details buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.HIDE_DETAILS_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String HIDE_DETAILS_LABEL = JFaceResources.getString("hideDetails"); //$NON-NLS-1$
+    public String HIDE_DETAILS_LABEL = JFaceResources.getString(IDialogLabelKeys.HIDE_DETAILS_LABEL_KEY);
 
     /**
      * The label for back buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.BACK_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String BACK_LABEL = JFaceResources.getString("backButton"); //$NON-NLS-1$
+    public String BACK_LABEL = JFaceResources.getString(IDialogLabelKeys.BACK_LABEL_KEY);
 
     /**
      * The label for next buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.NEXT_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String NEXT_LABEL = JFaceResources.getString("nextButton"); //$NON-NLS-1$
+    public String NEXT_LABEL = JFaceResources.getString(IDialogLabelKeys.NEXT_LABEL_KEY);
 
     /**
      * The label for finish buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.FINISH_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String FINISH_LABEL = JFaceResources.getString("finish"); //$NON-NLS-1$
+    public String FINISH_LABEL = JFaceResources.getString(IDialogLabelKeys.FINISH_LABEL_KEY);
 
     /**
      * The label for help buttons.
+     * Using this static label string provides optimum performance by looking
+     * up the label only once when JFace is initialized.  However, clients that 
+     * wish to support multiple locales in one system should instead use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.HELP_LABEL_KEY)</code>
+     * so that a locale other than the default may be consulted.
      */
-    public String HELP_LABEL = JFaceResources.getString("help"); //$NON-NLS-1$
+    public String HELP_LABEL = JFaceResources.getString(IDialogLabelKeys.HELP_LABEL_KEY);
 
     // Margins, spacings, and sizes
     /**
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogLabelKeys.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogLabelKeys.java
new file mode 100644
index 0000000..0f4465a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogLabelKeys.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jface.dialogs;
+
+/**
+ * IDialogLabelKeys contains publicly accessible keys to the common dialog 
+ * labels used throughout JFace.  <code>IDialogConstants</code> provides
+ * access to these labels using static constants.  This is the preferred
+ * method when the client is optimizing for performance and is known to be 
+ * used in a single-locale system.  Using the keys and accessing the
+ * common dialog labels dynamically is the preferred method when the client
+ * may be running in a multi-locale system.
+ * 
+ * @see IDialogConstants
+ * @since 3.7
+ * 
+ * @noimplement This interface is not intended to be implemented by clients.
+
+ */
+public interface IDialogLabelKeys {
+
+    /**
+     * The key used to retrieve the label for OK buttons. Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY)</code> to retrieve the label
+     * dynamically when using multiple locales.
+     * 
+     * @since 3.7
+     */
+    public String OK_LABEL_KEY = "ok"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for cancel buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.CANCEL_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String CANCEL_LABEL_KEY = "cancel"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for yes buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.YES_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String YES_LABEL_KEY = "yes"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for no buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.NO_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String NO_LABEL_KEY = "no"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for no to all buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.NO_TO_ALL_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String NO_TO_ALL_LABEL_KEY = "notoall"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for yes to all buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.YES_TO_ALL_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String YES_TO_ALL_LABEL_KEY = "yestoall"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for skip buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.SKIP_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String SKIP_LABEL_KEY = "skip"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for stop buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.STOP_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String STOP_LABEL_KEY = "stop"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for abort buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.ABORT_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String ABORT_LABEL_KEY = "abort"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for retry buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.RETRY_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String RETRY_LABEL_KEY = "retry"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for ignore buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.IGNORE_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String IGNORE_LABEL_KEY = "ignore"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for proceed buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.PROCEED_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String PROCEED_LABEL_KEY = "proceed"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for open buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.OPEN_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String OPEN_LABEL_KEY = "open"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for close buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.CLOSE_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String CLOSE_LABEL_KEY = "close"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for show details buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.SHOW_DETAILS_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String SHOW_DETAILS_LABEL_KEY = "showDetails"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for hide details buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.HIDE_DETAILS_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String HIDE_DETAILS_LABEL_KEY = "hideDetails"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for back buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.BACK_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String BACK_LABEL_KEY = "backButton"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for next buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.NEXT_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String NEXT_LABEL_KEY = "nextButton"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for finish buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.FINISH_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String FINISH_LABEL_KEY = "finish"; //$NON-NLS-1$
+
+    /**
+     * The key used to retrieve the label for help buttons.
+     * Clients should use the pattern
+     * <code>JFaceResources.getString(IDialogLabelKeys.HELP_LABEL_KEY)</code>
+     * to retrieve the label dynamically when using multiple locales.
+     * @since 3.7
+     */
+    public String HELP_LABEL_KEY = "help"; //$NON-NLS-1$
+}
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java
index 70933ea..dbdeb9e 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/IDialogSettings.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,8 @@ import java.io.Writer;
  * The store manages a collection of key/value pairs. The keys must be strings
  * and the values can be either, strings or array of strings. Convenience API to
  * convert primitive types to strings is provided.
+ * 
+ * @see DialogSettings
  */
 public interface IDialogSettings {
     /**
@@ -27,6 +29,8 @@ public interface IDialogSettings {
      * @param name
      *            the name of the new section
      * @return the new section
+     * 
+     * @see DialogSettings#getOrCreateSection(IDialogSettings, String)
      */
     public IDialogSettings addNewSection(String name);
 
@@ -140,6 +144,8 @@ public interface IDialogSettings {
      * @param sectionName
      *            the key
      * @return IDialogSettings (the section), or <code>null</code> if none
+     * 
+     * @see DialogSettings#getOrCreateSection(IDialogSettings, String)
      */
     public IDialogSettings getSection(String sectionName);
 
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/PopupDialog.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/PopupDialog.java
index c775d7d..87c0f6c 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/PopupDialog.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/PopupDialog.java
@@ -76,9 +76,15 @@ public class PopupDialog extends Window {
 	/**
 	 * 
 	 */
-	private static final GridDataFactory LAYOUTDATA_GRAB_BOTH = GridDataFactory
-			.fillDefaults().grab(true, true);
+	private static GridDataFactory grabBothGridDataFactory;
 
+	private static GridDataFactory getGrabBothGridData() {
+		if (grabBothGridDataFactory == null) {
+			grabBothGridDataFactory = GridDataFactory.fillDefaults().grab(true, true);
+		}
+		return grabBothGridDataFactory;
+	}
+	
 	/**
 	 * The dialog settings key name for stored dialog x location.
 	 */
@@ -293,9 +299,15 @@ public class PopupDialog extends Window {
 	/**
 	 * 
 	 */
-	private static final GridLayoutFactory POPUP_LAYOUT_FACTORY = GridLayoutFactory
-			.fillDefaults().margins(POPUP_MARGINWIDTH, POPUP_MARGINHEIGHT)
-			.spacing(POPUP_HORIZONTALSPACING, POPUP_VERTICALSPACING);
+	private static GridLayoutFactory popupLayoutFactory;
+	private static GridLayoutFactory getPopupLayout() {
+		if (popupLayoutFactory == null) {
+			popupLayoutFactory = GridLayoutFactory.fillDefaults()
+					.margins(POPUP_MARGINWIDTH, POPUP_MARGINHEIGHT)
+					.spacing(POPUP_HORIZONTALSPACING, POPUP_VERTICALSPACING);
+		}
+		return popupLayoutFactory;
+	}
 
 	/**
 	 * The dialog's toolbar for the move and resize capabilities.
@@ -676,8 +688,8 @@ public class PopupDialog extends Window {
 	 */
 	protected Control createContents(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		POPUP_LAYOUT_FACTORY.applyTo(composite);
-		LAYOUTDATA_GRAB_BOTH.applyTo(composite);
+		getPopupLayout().applyTo(composite);
+		getGrabBothGridData().applyTo(composite);
 
 		// Title area
 		if (hasTitleArea()) {
@@ -689,7 +701,7 @@ public class PopupDialog extends Window {
 		// Create a grid data layout data if one was not provided.
 		// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=118025
 		if (dialogArea.getLayoutData() == null) {
-			LAYOUTDATA_GRAB_BOTH.applyTo(dialogArea);
+			getGrabBothGridData().applyTo(dialogArea);
 		}
 
 		// Info field
@@ -730,8 +742,8 @@ public class PopupDialog extends Window {
 	 */
 	protected Control createDialogArea(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		POPUP_LAYOUT_FACTORY.applyTo(composite);
-		LAYOUTDATA_GRAB_BOTH.applyTo(composite);
+		getPopupLayout().applyTo(composite);
+		getGrabBothGridData().applyTo(composite);
 		return composite;
 	}
 
@@ -802,7 +814,7 @@ public class PopupDialog extends Window {
 	protected Control createTitleMenuArea(Composite parent) {
 
 		Composite titleAreaComposite = new Composite(parent, SWT.NONE);
-		POPUP_LAYOUT_FACTORY.copy().numColumns(2).applyTo(titleAreaComposite);
+		getPopupLayout().copy().numColumns(2).applyTo(titleAreaComposite);
 		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true,
 				false).applyTo(titleAreaComposite);
 
@@ -990,10 +1002,11 @@ public class PopupDialog extends Window {
 		boolean oldListenToDeactivate = listenToDeactivate;
 		listenToDeactivate = false;
 		if (tracker.open()) {
-			if (shell != null && !shell.isDisposed()) {
+			if (!shell.isDisposed()) {
 				shell.setBounds(tracker.getRectangles()[0]);
 			}
 		}
+		tracker.dispose();
 		listenToDeactivate = oldListenToDeactivate;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/TrayDialog.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/TrayDialog.java
index da2103a..d5d8308 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/TrayDialog.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/dialogs/TrayDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,16 +86,21 @@ public abstract class TrayDialog extends Dialog {
 
 	private static boolean dialogHelpAvailable;
 
-	/*
+	/**
 	 * The dialog's tray (null if none).
 	 */
 	private DialogTray tray;
 
-	/*
-	 * The tray's control.
+	/**
+	 * The tray's control (null if none).
 	 */
 	private Control trayControl;
 	
+	/**
+	 * The control that had focus before the tray was opened (null if none).
+	 */
+	private Control nonTrayFocusControl;
+	
 	/*
 	 * The separator to the left of the sash.
 	 */
@@ -121,6 +126,11 @@ public abstract class TrayDialog extends Dialog {
 	private ControlAdapter resizeListener;
 
 	/**
+	 * The help button (null if none).
+	 */
+	private ToolItem fHelpButton;
+
+	/**
 	 * Creates a tray dialog instance. Note that the window will have no visual
 	 * representation (no widgets) until it is told to open.
 	 * 
@@ -149,6 +159,15 @@ public abstract class TrayDialog extends Dialog {
 			throw new IllegalStateException("Tray was not open"); //$NON-NLS-1$
 		}
 		Shell shell = getShell();
+		Control focusControl = shell.getDisplay().getFocusControl();
+		if (focusControl!= null && isContained(trayControl, focusControl)) {
+			if (nonTrayFocusControl!= null && !nonTrayFocusControl.isDisposed()) {
+				nonTrayFocusControl.setFocus();
+			} else {
+				shell.setFocus();
+			}
+		}
+		nonTrayFocusControl= null;
 		shell.removeControlListener (resizeListener);
 		resizeListener = null;
 		int trayWidth = trayControl.getSize().x + leftSeparator.getSize().x + sash.getSize().x + rightSeparator.getSize().x;
@@ -163,8 +182,31 @@ public abstract class TrayDialog extends Dialog {
 		sash = null;
 		Rectangle bounds = shell.getBounds();
 		shell.setBounds(bounds.x + ((getDefaultOrientation() == SWT.RIGHT_TO_LEFT) ? trayWidth : 0), bounds.y, bounds.width - trayWidth, bounds.height);
+		if (fHelpButton != null) {
+			fHelpButton.setSelection(false);
+		}
 	}
 	
+	/**
+	 * Returns true if the given Control is a direct or indirect child of
+	 * container.
+	 * 
+	 * @param container
+	 *            the potential parent
+	 * @param control
+	 * @return boolean <code>true</code> if control is a child of container
+	 */
+	private boolean isContained(Control container, Control control) {
+		Composite parent;
+		while ((parent = control.getParent()) != null) {
+			if (parent == container) {
+				return true;
+			}
+			control = parent;
+		}
+		return false;
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#close()
 	 */
@@ -238,10 +280,10 @@ public abstract class TrayDialog extends Dialog {
 				cursor.dispose();
 			}
 		});		
-        ToolItem item = new ToolItem(toolBar, SWT.NONE);
-		item.setImage(image);
-		item.setToolTipText(JFaceResources.getString("helpToolTip")); //$NON-NLS-1$
-		item.addSelectionListener(new SelectionAdapter() {
+        fHelpButton = new ToolItem(toolBar, SWT.CHECK);
+		fHelpButton.setImage(image);
+		fHelpButton.setToolTipText(JFaceResources.getString("helpToolTip")); //$NON-NLS-1$
+		fHelpButton.addSelectionListener(new SelectionAdapter() {
             public void widgetSelected(SelectionEvent e) {
 				helpPressed();
             }
@@ -326,23 +368,34 @@ public abstract class TrayDialog extends Dialog {
 	 * context help behavior (e.g. F1 on Windows). It traverses the widget
 	 * tree upward until it finds a widget that has a help listener on it,
 	 * then invokes a help event on that widget.
+	 * If the help tray is already open, it closes it and doesn't invoke
+	 * any help listener.
 	 */
 	private void helpPressed() {
-    	if (getShell() != null) {
-	    	Control c = getShell().getDisplay().getFocusControl();
-	    	while (c != null) {
-	    		if (c.isListening(SWT.Help)) {
-	    			c.notifyListeners(SWT.Help, new Event());
-	    			break;
-	    		}
-	    		c = c.getParent();
-	    	}
-    	}
+		if (getTray() == null ||
+				fHelpButton != null && fHelpButton.getSelection()) { // help button was not selected before
+			if (getShell() != null) {
+				Control c = getShell().getDisplay().getFocusControl();
+				while (c != null) {
+					if (c.isListening(SWT.Help)) {
+						c.notifyListeners(SWT.Help, new Event());
+						break;
+					}
+					c = c.getParent();
+				}
+				if (fHelpButton != null && getTray() != null) {
+					fHelpButton.setSelection(true);
+				}
+			}
+
+		} else {
+			closeTray();
+		}
 	}
 	
 	/**
 	 * Constructs the tray's widgets and displays the tray in this dialog. The
-	 * dialog's size will be adjusted to accomodate the tray.
+	 * dialog's size will be adjusted to accommodate the tray.
 	 * 
 	 * @param tray the tray to show in this dialog
 	 * @throws IllegalStateException if the dialog already has a tray open
@@ -360,6 +413,10 @@ public abstract class TrayDialog extends Dialog {
 			throw new UnsupportedOperationException("Trays not supported with custom layouts"); //$NON-NLS-1$
 		}
 		final Shell shell = getShell();
+		Control focusControl = shell.getDisplay().getFocusControl();
+		if (focusControl != null && isContained(shell, focusControl)) {
+			nonTrayFocusControl = focusControl;
+		}
 		leftSeparator = new Label(shell, SWT.SEPARATOR | SWT.VERTICAL);
 		leftSeparator.setLayoutData(new GridData(GridData.FILL_VERTICAL));
 		sash = new Sash(shell, SWT.VERTICAL);
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/fieldassist/ControlDecoration.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/fieldassist/ControlDecoration.java
index 062499b..a46f926 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/fieldassist/ControlDecoration.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/fieldassist/ControlDecoration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@ import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Widget;
 
+
 /**
  * ControlDecoration renders an image decoration near a control. It allows
  * clients to specify an image and a position for the image relative to the
@@ -897,9 +898,9 @@ public class ControlDecoration {
 	}
 
 	/**
-	 * Set the image shown in this control decoration. Update the rendered
-	 * decoration.
-	 * 
+	 * Set the description text that may be shown in a hover for this
+	 * decoration. Update the rendered decoration.
+	 *
 	 * @param text
 	 *            the text to be shown as a description for the decoration, or
 	 *            <code>null</code> if none has been set.
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/internal/InternalPolicy.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/internal/InternalPolicy.java
index 94d354d..d7135e3 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/internal/InternalPolicy.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/internal/InternalPolicy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,13 @@ public class InternalPolicy {
 	 * @since 3.3
 	 */
 	public static boolean DEBUG_LOG_REENTRANT_VIEWER_CALLS = false;
+	
+	/**
+	 * (NON-API) A flag to indicate whether illegal equal elements in a viewer should be logged.
+	 * 
+	 * @since 3.7
+	 */
+	public static boolean DEBUG_LOG_EQUAL_VIEWER_ELEMENTS= false;
 
 	/**
 	 * (NON-API) A flag to indicate whether label provider changed notifications
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/ColorSelector.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/ColorSelector.java
index 45daaec..530eb62 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/ColorSelector.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/ColorSelector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,10 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jface.preference;
 
-import org.eclipse.core.commands.common.EventManager;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.accessibility.AccessibleAdapter;
 import org.eclipse.swt.accessibility.AccessibleEvent;
@@ -33,6 +29,12 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 
+import org.eclipse.core.commands.common.EventManager;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
 /**
  * The <code>ColorSelector</code> is a wrapper for a button that displays a
  * selected <code>Color</code> and allows the user to change the selection.
@@ -153,7 +155,7 @@ public class ColorSelector extends EventManager {
 
     /**
      * Removes the given listener from this <code>ColorSelector</code>. Has
-     * no affect if the listener is not registered.
+     * no effect if the listener is not registered.
      * 
      * @param listener
      *            a property change listener
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java
index b15af78..b3331b4 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ import org.eclipse.jface.util.IPropertyChangeListener;
 
 /**
  * The <code>IPreferenceStore</code> interface represents a table mapping
- * named preferences to values. If there is no value for a given name, 
+ * named preferences to values. If there is no value for a given name,
  * then that preferences's default value is returned; and if there is no
  * default value for that preference, then a default-default value is returned.
  * The default-default values for the primitive types are as follows:
@@ -30,7 +30,7 @@ import org.eclipse.jface.util.IPropertyChangeListener;
  * Thus a preference store maintains two values for each of a set of
  * names: a current value and a default value.
  * The typical usage is to establish the defaults for all known preferences
- * and then restore previously stored values for preferences whose values 
+ * and then restore previously stored values for preferences whose values
  * were different from their defaults. After the current values of
  * the preferences have been modified, it is a simple matter to write
  * out only those preferences whose values are different from their defaults.
@@ -47,7 +47,7 @@ import org.eclipse.jface.util.IPropertyChangeListener;
  * does not cause such events to be reported.
  * </p>
  * <p>
- * Clients who need a preference store may implement this interface or 
+ * Clients who need a preference store may implement this interface or
  * instantiate the standard implementation <code>PreferenceStore</code>.
  * </p>
  *
@@ -103,7 +103,7 @@ public interface IPreferenceStore {
      * <b>Note</b> The types of the oldValue and newValue of the
      * generated PropertyChangeEvent are determined by whether
      * or not the typed API in IPreferenceStore was called.
-     * If values are changed via setValue(name,type) the 
+     * If values are changed via setValue(name,type) the
      * values in the PropertyChangedEvent will be of that type.
      * If they are set using a non typed API (i.e. #setToDefault
      * or using the OSGI Preferences) the values will be unconverted
@@ -111,15 +111,15 @@ public interface IPreferenceStore {
      * </p>
      * <p>
      * A listener will be called in the same Thread
-     * that it is invoked in. Any Thread dependant listeners (such as 
+     * that it is invoked in. Any Thread dependant listeners (such as
      * those who update an SWT widget) will need to update in the
      * correct Thread. In the case of an SWT update you can update
      * using Display#syncExec(Runnable) or Display#asyncExec(Runnable).
      * </p>
-     * <p>  
-     * Likewise any application that updates an IPreferenceStore 
+     * <p>
+     * Likewise any application that updates an IPreferenceStore
      * from a Thread other than the UI Thread should be aware of
-     * any listeners that require an update in the UI Thread. 
+     * any listeners that require an update in the UI Thread.
      * </p>
      *
      * @param listener a property change listener
@@ -148,7 +148,7 @@ public interface IPreferenceStore {
      * Fires a property change event corresponding to a change to the
      * current value of the preference with the given name.
      * <p>
-     * This method is provided on this interface to simplify the implementation 
+     * This method is provided on this interface to simplify the implementation
      * of decorators. There is normally no need to call this method since
      * <code>setValue</code> and <code>setToDefault</code> report such
      * events in due course. Implementations should funnel all preference
@@ -167,7 +167,7 @@ public interface IPreferenceStore {
      * Returns the current value of the boolean-valued preference with the
      * given name.
      * Returns the default-default value (<code>false</code>) if there
-     * is no preference with the given name, or if the current value 
+     * is no preference with the given name, or if the current value
      * cannot be treated as a boolean.
      *
      * @param name the name of the preference
@@ -179,7 +179,7 @@ public interface IPreferenceStore {
      * Returns the default value for the boolean-valued preference
      * with the given name.
      * Returns the default-default value (<code>false</code>) if there
-     * is no default preference with the given name, or if the default 
+     * is no default preference with the given name, or if the default
      * value cannot be treated as a boolean.
      *
      * @param name the name of the preference
@@ -191,7 +191,7 @@ public interface IPreferenceStore {
      * Returns the default value for the double-valued preference
      * with the given name.
      * Returns the default-default value (<code>0.0</code>) if there
-     * is no default preference with the given name, or if the default 
+     * is no default preference with the given name, or if the default
      * value cannot be treated as a double.
      *
      * @param name the name of the preference
@@ -203,7 +203,7 @@ public interface IPreferenceStore {
      * Returns the default value for the float-valued preference
      * with the given name.
      * Returns the default-default value (<code>0.0f</code>) if there
-     * is no default preference with the given name, or if the default 
+     * is no default preference with the given name, or if the default
      * value cannot be treated as a float.
      *
      * @param name the name of the preference
@@ -215,7 +215,7 @@ public interface IPreferenceStore {
      * Returns the default value for the integer-valued preference
      * with the given name.
      * Returns the default-default value (<code>0</code>) if there
-     * is no default preference with the given name, or if the default 
+     * is no default preference with the given name, or if the default
      * value cannot be treated as an integer.
      *
      * @param name the name of the preference
@@ -227,7 +227,7 @@ public interface IPreferenceStore {
      * Returns the default value for the long-valued preference
      * with the given name.
      * Returns the default-default value (<code>0L</code>) if there
-     * is no default preference with the given name, or if the default 
+     * is no default preference with the given name, or if the default
      * value cannot be treated as a long.
      *
      * @param name the name of the preference
@@ -238,8 +238,8 @@ public interface IPreferenceStore {
     /**
      * Returns the default value for the string-valued preference
      * with the given name.
-     * Returns the default-default value (the empty string <code>""</code>) 
-     * is no default preference with the given name, or if the default 
+     * Returns the default-default value (the empty string <code>""</code>)
+     * is no default preference with the given name, or if the default
      * value cannot be treated as a string.
      *
      * @param name the name of the preference
@@ -251,7 +251,7 @@ public interface IPreferenceStore {
      * Returns the current value of the double-valued preference with the
      * given name.
      * Returns the default-default value (<code>0.0</code>) if there
-     * is no preference with the given name, or if the current value 
+     * is no preference with the given name, or if the current value
      * cannot be treated as a double.
      *
      * @param name the name of the preference
@@ -263,7 +263,7 @@ public interface IPreferenceStore {
      * Returns the current value of the float-valued preference with the
      * given name.
      * Returns the default-default value (<code>0.0f</code>) if there
-     * is no preference with the given name, or if the current value 
+     * is no preference with the given name, or if the current value
      * cannot be treated as a float.
      *
      * @param name the name of the preference
@@ -275,7 +275,7 @@ public interface IPreferenceStore {
      * Returns the current value of the integer-valued preference with the
      * given name.
      * Returns the default-default value (<code>0</code>) if there
-     * is no preference with the given name, or if the current value 
+     * is no preference with the given name, or if the current value
      * cannot be treated as an integter.
      *
      * @param name the name of the preference
@@ -287,7 +287,7 @@ public interface IPreferenceStore {
      * Returns the current value of the long-valued preference with the
      * given name.
      * Returns the default-default value (<code>0L</code>) if there
-     * is no preference with the given name, or if the current value 
+     * is no preference with the given name, or if the current value
      * cannot be treated as a long.
      *
      * @param name the name of the preference
@@ -299,7 +299,7 @@ public interface IPreferenceStore {
      * Returns the current value of the string-valued preference with the
      * given name.
      * Returns the default-default value (the empty string <code>""</code>)
-     * if there is no preference with the given name, or if the current value 
+     * if there is no preference with the given name, or if the current value
      * cannot be treated as a string.
      *
      * @param name the name of the preference
@@ -322,8 +322,8 @@ public interface IPreferenceStore {
      * Returns whether the current values in this property store
      * require saving.
      *
-     * @return <code>true</code> if at least one of values of 
-     *  the preferences known to this store has changed and 
+     * @return <code>true</code> if at least one of values of
+     *  the preferences known to this store has changed and
      *  requires saving, and <code>false</code> otherwise.
      */
     public boolean needsSaving();
@@ -332,8 +332,8 @@ public interface IPreferenceStore {
      * Sets the current value of the preference with the given name to
      * the given string value without sending a property change.
      * <p>
-     * This method does not fire a property change event and 
-     * should only be used for setting internal preferences 
+     * This method does not fire a property change event and
+     * should only be used for setting internal preferences
      * that are not meant to be processed by listeners.
      * Normal clients should instead call #setValue.
      * </p>
@@ -343,17 +343,17 @@ public interface IPreferenceStore {
      */
     public void putValue(String name, String value);
 
-    /**
-     * Removes the given listener from this preference store.
-     * Has no affect if the listener is not registered.
-     *
-     * @param listener a property change listener
-     */
+	/**
+	 * Removes the given listener from this preference store. Has no effect if the listener is not
+	 * registered.
+	 * 
+	 * @param listener a property change listener, must not be <code>null</code>
+	 */
     public void removePropertyChangeListener(IPropertyChangeListener listener);
 
     /**
      * Sets the default value for the double-valued preference with the
-     * given name. 
+     * given name.
      * <p>
      * Note that the current value of the preference is affected if
      * the preference's current value was its old default value, in which
@@ -370,7 +370,7 @@ public interface IPreferenceStore {
 
     /**
      * Sets the default value for the float-valued preference with the
-     * given name. 
+     * given name.
      * <p>
      * Note that the current value of the preference is affected if
      * the preference's current value was its old default value, in which
@@ -387,7 +387,7 @@ public interface IPreferenceStore {
 
     /**
      * Sets the default value for the integer-valued preference with the
-     * given name. 
+     * given name.
      * <p>
      * Note that the current value of the preference is affected if
      * the preference's current value was its old default value, in which
@@ -404,7 +404,7 @@ public interface IPreferenceStore {
 
     /**
      * Sets the default value for the long-valued preference with the
-     * given name. 
+     * given name.
      * <p>
      * Note that the current value of the preference is affected if
      * the preference's current value was its old default value, in which
@@ -421,7 +421,7 @@ public interface IPreferenceStore {
 
     /**
      * Sets the default value for the string-valued preference with the
-     * given name. 
+     * given name.
      * <p>
      * Note that the current value of the preference is affected if
      * the preference's current value was its old default value, in which
@@ -438,7 +438,7 @@ public interface IPreferenceStore {
 
     /**
      * Sets the default value for the boolean-valued preference with the
-     * given name. 
+     * given name.
      * <p>
      * Note that the current value of the preference is affected if
      * the preference's current value was its old default value, in which
@@ -459,7 +459,7 @@ public interface IPreferenceStore {
      * <p>
      * Note that the preferred way of re-initializing a preference to the
      * appropriate default value is to call <code>setToDefault</code>.
-     * This is implemented by removing the named value from the store, 
+     * This is implemented by removing the named value from the store,
      * thereby exposing the default value.
      * </p>
      *
@@ -471,7 +471,7 @@ public interface IPreferenceStore {
      * Sets the current value of the double-valued preference with the
      * given name.
      * <p>
-     * A property change event is reported if the current value of the 
+     * A property change event is reported if the current value of the
      * preference actually changes from its previous value. In the event
      * object, the property name is the name of the preference, and the
      * old and new values are wrapped as objects.
@@ -490,7 +490,7 @@ public interface IPreferenceStore {
      * Sets the current value of the float-valued preference with the
      * given name.
      * <p>
-     * A property change event is reported if the current value of the 
+     * A property change event is reported if the current value of the
      * preference actually changes from its previous value. In the event
      * object, the property name is the name of the preference, and the
      * old and new values are wrapped as objects.
@@ -509,7 +509,7 @@ public interface IPreferenceStore {
      * Sets the current value of the integer-valued preference with the
      * given name.
      * <p>
-     * A property change event is reported if the current value of the 
+     * A property change event is reported if the current value of the
      * preference actually changes from its previous value. In the event
      * object, the property name is the name of the preference, and the
      * old and new values are wrapped as objects.
@@ -528,7 +528,7 @@ public interface IPreferenceStore {
      * Sets the current value of the long-valued preference with the
      * given name.
      * <p>
-     * A property change event is reported if the current value of the 
+     * A property change event is reported if the current value of the
      * preference actually changes from its previous value. In the event
      * object, the property name is the name of the preference, and the
      * old and new values are wrapped as objects.
@@ -547,7 +547,7 @@ public interface IPreferenceStore {
      * Sets the current value of the string-valued preference with the
      * given name.
      * <p>
-     * A property change event is reported if the current value of the 
+     * A property change event is reported if the current value of the
      * preference actually changes from its previous value. In the event
      * object, the property name is the name of the preference, and the
      * old and new values are wrapped as objects.
@@ -566,7 +566,7 @@ public interface IPreferenceStore {
      * Sets the current value of the boolean-valued preference with the
      * given name.
      * <p>
-     * A property change event is reported if the current value of the 
+     * A property change event is reported if the current value of the
      * preference actually changes from its previous value. In the event
      * object, the property name is the name of the preference, and the
      * old and new values are wrapped as objects.
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/PreferencePage.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/PreferencePage.java
index 3777493..f68510c 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/PreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/preference/PreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -614,8 +614,19 @@ public abstract class PreferencePage extends DialogPage implements
     }
 
 	/**
-	 * Apply the data to the receiver. By default do nothing.
-	 * @param data
+	 * Applies the given data to this page.
+	 * <p>
+	 * It is up to the subclasses to specify the contract and the data format. The contract is not
+	 * guaranteed if the subclass is in an internal package.
+	 * </p>
+	 * <p>
+	 * <strong>Note:</strong> The implementation must silently ignore all unknown data.
+	 * </p>
+	 * <p>
+	 * The default implementation does nothing.
+	 * </p>
+	 * 
+	 * @param data the data as specified by the subclass
 	 * @since 3.1
 	 */
 	public void applyData(Object data) {
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/CompositeImageDescriptor.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/CompositeImageDescriptor.java
index 9db0480..e92a608 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/CompositeImageDescriptor.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/CompositeImageDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Stephan Wahlbrink - fix for bug 341702 - incorrect mixing of images with alpha channel
  *******************************************************************************/
 package org.eclipse.jface.resource;
 
@@ -130,10 +131,24 @@ public abstract class CompositeImageDescriptor extends ImageDescriptor {
 					dstRed = (dstPixel & 0xFF) >>> 0;
 					dstGreen = (dstPixel & 0xFF00) >>> 8;
 					dstBlue = (dstPixel & 0xFF0000) >>> 16;
-					dstRed += (srcRed - dstRed) * srcAlpha / 255;
-					dstGreen += (srcGreen - dstGreen) * srcAlpha / 255;
-					dstBlue += (srcBlue - dstBlue) * srcAlpha / 255;
-					dstAlpha += (srcAlpha - dstAlpha) * srcAlpha / 255;
+					if (dstAlpha == 255) { // simplified calculations for performance
+						dstRed += (srcRed - dstRed) * srcAlpha / 255;
+						dstGreen += (srcGreen - dstGreen) * srcAlpha / 255;
+						dstBlue += (srcBlue - dstBlue) * srcAlpha / 255;
+					} else {
+						// See Porter T., Duff T. 1984. "Compositing Digital Images". 
+						// Computer Graphics 18 (3): 253–259.
+						dstRed = srcRed * srcAlpha * 255 + dstRed * dstAlpha * (255 - srcAlpha);
+						dstGreen = srcGreen * srcAlpha * 255 + dstGreen * dstAlpha * (255 - srcAlpha);
+						dstBlue = srcBlue * srcAlpha * 255 + dstBlue * dstAlpha * (255 - srcAlpha);
+						dstAlpha = srcAlpha * 255 + dstAlpha * (255 - srcAlpha); 
+						if (dstAlpha != 0) { // if both original alphas == 0, then all colors are 0
+							dstRed /= dstAlpha;
+							dstGreen /= dstAlpha;
+							dstBlue /= dstAlpha;
+							dstAlpha /= 255;
+						}
+					}
 				}
 				dst.setPixel(dstX, dstY, ((dstRed & 0xFF) << 0) | ((dstGreen & 0xFF) << 8) | ((dstBlue & 0xFF) << 16));
 				dst.setAlpha(dstX, dstY, dstAlpha);
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/ResourceRegistry.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/ResourceRegistry.java
index 82184b8..d03439f 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/ResourceRegistry.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/ResourceRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.jface.resource;
 import java.util.Set;
 
 import org.eclipse.core.commands.common.EventManager;
+
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 
@@ -37,8 +38,8 @@ public abstract class ResourceRegistry extends EventManager {
      */
     protected abstract void clearCaches();
 
-    /** 
-     * @return the set of keys this manager knows about.  This collection 
+    /**
+     * @return the set of keys this manager knows about.  This collection
      * should be immutable.
      */
     public abstract Set getKeySet();
@@ -76,7 +77,7 @@ public abstract class ResourceRegistry extends EventManager {
     }
 
     /**
-     * Removes the given listener from this registry. Has no affect if the
+     * Removes the given listener from this registry. Has no effect if the
      * listener is not registered.
      * 
      * @param listener a property change listener
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/jfacefonts_windows7.properties b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/jfacefonts_windows7.properties
new file mode 100644
index 0000000..1d3a5c1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/jfacefonts_windows7.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# Copyright (c) 2010 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# Font file for JFace when running under Windows7
+#############################################################
+# START NON-TRANSLATABLE
+org.eclipse.jface.bannerfont.0=Segoe UI-bold-10
+org.eclipse.jface.bannerfont.1=Tahoma-bold-10
+
+org.eclipse.jface.headerfont.0=Segoe UI-bold-12
+org.eclipse.jface.headerfont.1=Tahoma-bold-12
+
+org.eclipse.jface.textfont.0=Consolas-regular-10
+org.eclipse.jface.textfont.1=Courier New-regular-10
+# END NON-TRANSLATABLE
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/jfacefonts_windowsvista.properties b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/jfacefonts_windowsvista.properties
new file mode 100644
index 0000000..40267d8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/resource/jfacefonts_windowsvista.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+# Font file for JFace when running under Windows Vista
+#############################################################
+# START NON-TRANSLATABLE
+org.eclipse.jface.bannerfont.0=Segoe UI-bold-10
+org.eclipse.jface.bannerfont.1=Tahoma-bold-10
+
+org.eclipse.jface.headerfont.0=Segoe UI-bold-12
+org.eclipse.jface.headerfont.1=Tahoma-bold-12
+
+org.eclipse.jface.textfont.0=Consolas-regular-10
+org.eclipse.jface.textfont.1=Courier New-regular-10
+# END NON-TRANSLATABLE
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java
index 83f095c..692f25e 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jface.util;
 
-import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.TableTree;
 import org.eclipse.swt.custom.TableTreeItem;
@@ -27,6 +26,8 @@ import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.swt.widgets.Widget;
 
+import org.eclipse.core.runtime.ListenerList;
+
 /**
  * Implementation of single-click and double-click strategies.
  * <p>
@@ -88,6 +89,16 @@ public class OpenStrategy {
     // Not declared final, see bug 246209
     private static int TIME = 500;
 
+	/**
+	 * Returns the delay for post selection events.
+	 * 
+	 * @return the delay for post selection events in milliseconds
+	 * @since 3.7
+	 */
+	public static final int getPostSelectionDelay() {
+		return TIME;
+	}
+
     /* SINGLE_CLICK or DOUBLE_CLICK;
      * In case of SINGLE_CLICK, the bits SELECT_ON_HOVER and ARROW_KEYS_OPEN
      * my be set as well. */
@@ -367,6 +378,7 @@ public class OpenStrategy {
                         mouseUpEvent = e;
                         collapseOccurred = false;
                         expandOccurred = false;
+                        selectionPendent= null;
                     }
                     break;
                 case SWT.KeyDown:
@@ -383,6 +395,8 @@ public class OpenStrategy {
                             enterKeyDown = true;
                         }
                     }
+                    collapseOccurred= false;
+                    expandOccurred= false;
                     break;
                 case SWT.Selection:
                     SelectionEvent event = new SelectionEvent(e);
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java
index 2f29802..d81d3ac 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,7 +24,11 @@ import java.util.LinkedList;
 import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.internal.InternalPolicy;
+import org.eclipse.jface.util.Policy;
 import org.eclipse.jface.util.SafeRunnable;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
@@ -1347,12 +1351,14 @@ public abstract class AbstractTreeViewer extends ColumnViewer {
 					}
 					Object[] result = tpcp.getChildren(path);
 					if (result != null) {
+						assertElementsNotNull(parent, result);
 						return result;
 					}
 				} else if (cp instanceof ITreeContentProvider) {
 					ITreeContentProvider tcp = (ITreeContentProvider) cp;
 					Object[] result = tcp.getChildren(parent);
 					if (result != null) {
+						assertElementsNotNull(parent, result);
 						return result;
 					}
 				}
@@ -1364,6 +1370,41 @@ public abstract class AbstractTreeViewer extends ColumnViewer {
 	}
 
 	/**
+	 * Asserts that the given array of elements is itself non- <code>null</code>
+	 * and contains no <code>null</code> elements.
+	 * 
+	 * @param parent
+	 *            the parent element
+	 * @param elements
+	 *            the array to check
+	 * 
+	 * @see #assertElementsNotNull(Object[])
+	 */
+	private void assertElementsNotNull(Object parent, Object[] elements) {
+		Assert.isNotNull(elements);
+		for (int i = 0, n = elements.length; i < n; ++i) {
+			Assert.isNotNull(elements[i]);
+		}
+		
+		if (InternalPolicy.DEBUG_LOG_EQUAL_VIEWER_ELEMENTS
+				&& elements.length > 1) {
+			CustomHashtable elementSet = newHashtable(elements.length * 2);
+			for (int i = 0; i < elements.length; i++) {
+				Object element = elements[i];
+				Object old = elementSet.put(element, element);
+				if (old != null) {
+					String message = "Sibling elements in viewer must not be equal:\n  " //$NON-NLS-1$
+							+ old + ",\n  " + element + ",\n  parent: " + parent; //$NON-NLS-1$ //$NON-NLS-2$
+					Policy.getLog().log(
+							new Status(IStatus.WARNING, Policy.JFACE, message,
+									new RuntimeException()));
+					return;
+				}
+			}
+		}
+	}
+	
+	/**
 	 * Returns all selected items for the given SWT control.
 	 *
 	 * @param control
@@ -2222,7 +2263,7 @@ public abstract class AbstractTreeViewer extends ColumnViewer {
 
 	/**
 	 * Removes a listener for expand and collapse events in this viewer. Has no
-	 * affect if an identical listener is not registered.
+	 * effect if an identical listener is not registered.
 	 *
 	 * @param listener
 	 *            a tree viewer listener
@@ -2621,7 +2662,7 @@ public abstract class AbstractTreeViewer extends ColumnViewer {
 			int i = 0;
 			while (numItemsToDispose > 0 && i < items.length) {
 				Object data = items[i].getData();
-				if (data == null || items.length - i <= numItemsToDispose || !children.containsKey(data)) {
+				if (data == null || !children.containsKey(data)) {
 					if (data != null) {
 						disassociate(items[i]);
 					}
@@ -2706,7 +2747,7 @@ public abstract class AbstractTreeViewer extends ColumnViewer {
 		// add any remaining elements
 		if (min < elementChildren.length) {
 			for (int i = min; i < elementChildren.length; ++i) {
-				createTreeItem(widget, elementChildren[i], i);
+				createTreeItem(widget, elementChildren[i], -1);
 			}
 
 			// Need to restore expanded state in a separate pass
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java
index 39514f4..42abff8 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CellEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,17 +12,19 @@
 
 package org.eclipse.jface.viewers;
 
-import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.util.SafeRunnable;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.ListenerList;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.util.SafeRunnable;
+
 /**
  * Abstract base class for cell editors. Implements property change listener
  * handling, and SWT window management.
@@ -791,7 +793,7 @@ public abstract class CellEditor {
 	}
 
 	/**
-	 * Removes the given listener from this cell editor. Has no affect if an
+	 * Removes the given listener from this cell editor. Has no effect if an
 	 * identical listener is not registered.
 	 *
 	 * @param listener
@@ -803,7 +805,7 @@ public abstract class CellEditor {
 
 	/**
 	 * Removes the given property change listener from this cell editor. Has no
-	 * affect if an identical property change listener is not registered.
+	 * effect if an identical property change listener is not registered.
 	 *
 	 * @param listener
 	 *            a property change listener
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CheckboxTableViewer.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CheckboxTableViewer.java
index 579d2bf..e1ed43d 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CheckboxTableViewer.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/CheckboxTableViewer.java
@@ -237,17 +237,20 @@ public class CheckboxTableViewer extends TableViewer implements ICheckable {
      * @return the array of checked elements
      * @see #setCheckedElements
      */
-    public Object[] getCheckedElements() {
-        TableItem[] children = getTable().getItems();
-        ArrayList v = new ArrayList(children.length);
-        for (int i = 0; i < children.length; i++) {
-            TableItem item = children[i];
-            if (item.getChecked()) {
-				v.add(item.getData());
+	public Object[] getCheckedElements() {
+		TableItem[] children = getTable().getItems();
+		ArrayList v = new ArrayList(children.length);
+		for (int i = 0; i < children.length; i++) {
+			TableItem item = children[i];
+			Object data = item.getData();
+			if (data != null) {
+				if (item.getChecked()) {
+					v.add(data);
+				}
 			}
-        }
-        return v.toArray();
-    }
+		}
+		return v.toArray();
+	}
 
     /**
      * Returns the grayed state of the given element.
@@ -275,17 +278,20 @@ public class CheckboxTableViewer extends TableViewer implements ICheckable {
      * @return the array of grayed elements
      * @see #setGrayedElements
      */
-    public Object[] getGrayedElements() {
-        TableItem[] children = getTable().getItems();
-        List v = new ArrayList(children.length);
-        for (int i = 0; i < children.length; i++) {
-            TableItem item = children[i];
-            if (item.getGrayed()) {
-				v.add(item.getData());
+	public Object[] getGrayedElements() {
+		TableItem[] children = getTable().getItems();
+		List v = new ArrayList(children.length);
+		for (int i = 0; i < children.length; i++) {
+			TableItem item = children[i];
+			Object data = item.getData();
+			if (data != null) {
+				if (item.getGrayed()) {
+					v.add(data);
+				}
 			}
-        }
-        return v.toArray();
-    }
+		}
+		return v.toArray();
+	}
 
     /* (non-Javadoc)
      * Method declared on StructuredViewer.
@@ -366,13 +372,16 @@ public class CheckboxTableViewer extends TableViewer implements ICheckable {
      * @param state <code>true</code> if the element should be checked,
      *  and <code>false</code> if it should be unchecked
      */
-    public void setAllChecked(boolean state) {
-        TableItem[] children = getTable().getItems();
-        for (int i = 0; i < children.length; i++) {
-            TableItem item = children[i];
-            item.setChecked(state);
-        }
-    }
+	public void setAllChecked(boolean state) {
+		TableItem[] children = getTable().getItems();
+		for (int i = 0; i < children.length; i++) {
+			TableItem item = children[i];
+			if (item.getData() != null) {
+				if (item.getChecked() != state)
+					item.setChecked(state);
+			}
+		}
+	}
 
     /**
      * Sets to the given value the grayed state for all elements in this viewer.
@@ -384,7 +393,10 @@ public class CheckboxTableViewer extends TableViewer implements ICheckable {
         TableItem[] children = getTable().getItems();
         for (int i = 0; i < children.length; i++) {
             TableItem item = children[i];
-            item.setGrayed(state);
+			if (item.getData() != null) {
+				if (item.getGrayed() != state)
+					item.setGrayed(state);
+			}
         }
     }
 
@@ -394,10 +406,12 @@ public class CheckboxTableViewer extends TableViewer implements ICheckable {
     public boolean setChecked(Object element, boolean state) {
         Assert.isNotNull(element);
         Widget widget = findItem(element);
-        if (widget instanceof TableItem) {
-            ((TableItem) widget).setChecked(state);
-            return true;
-        }
+		if (widget instanceof TableItem) {
+			TableItem item = (TableItem) widget;
+			if (item.getChecked() != state)
+				item.setChecked(state);
+			return true;
+		}
         return false;
     }
 
@@ -446,10 +460,12 @@ public class CheckboxTableViewer extends TableViewer implements ICheckable {
     public boolean setGrayed(Object element, boolean state) {
         Assert.isNotNull(element);
         Widget widget = findItem(element);
-        if (widget instanceof TableItem) {
-            ((TableItem) widget).setGrayed(state);
-            return true;
-        }
+		if (widget instanceof TableItem) {
+			TableItem item = (TableItem) widget;
+			if (item.getGrayed() != state)
+				item.setGrayed(state);
+			return true;
+		}
         return false;
     }
 
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewerEditor.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewerEditor.java
index 609fcd0..6228d32 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewerEditor.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewerEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Tom Schindl <tom.schindl at bestsolution.at> - refactoring (bug 153993)
  *     											   fix in bug: 151295,178946,166500,195908,201906,207676,180504,216706,218336
+ *     Tony Juckel -  Bug 130854 - JFace TableViewer ignoring ICellEditor validator state
  *******************************************************************************/
 
 package org.eclipse.jface.viewers;
@@ -307,7 +308,7 @@ public abstract class ColumnViewerEditor {
 					Item t = (Item) this.cell.getItem();
 
 					// don't null out table item -- same item is still selected
-					if (t != null && !t.isDisposed()) {
+					if (t != null && !t.isDisposed() && c.isValueValid()) {
 						saveEditorValue(c);
 					}
 					if (!viewer.getControl().isDisposed()) {
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java
index f47de75..4d39ace 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Tom Schindl and others.
+ * Copyright (c) 2006, 2010 Tom Schindl and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -193,6 +193,18 @@ public class ComboBoxViewerCellEditor extends AbstractComboBoxCellEditor {
 	 * @param provider
 	 *            the content provider used
 	 * @see StructuredViewer#setContentProvider(IContentProvider)
+	 * @since 3.7
+	 */
+	public void setContentProvider(IStructuredContentProvider provider) {
+		viewer.setContentProvider(provider);
+	}
+
+	/**
+	 * @param provider
+	 *            the content provider used
+	 * @see StructuredViewer#setContentProvider(IContentProvider)
+	 * @deprecated As of 3.7, replaced by
+	 *             {@link #setContentProvider(IStructuredContentProvider)}
 	 */
 	public void setContenProvider(IStructuredContentProvider provider) {
 		viewer.setContentProvider(provider);
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ContentViewer.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ContentViewer.java
index 38acd10..4acab9f 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ContentViewer.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ContentViewer.java
@@ -262,6 +262,12 @@ public abstract class ContentViewer extends Viewer {
      * if required.
      */
     public void setInput(Object input) {
+    	Control control = getControl();
+		if (control == null || control.isDisposed()) {
+			throw new IllegalStateException(
+					"Need an underlying widget to be able to set the input." + //$NON-NLS-1$
+							"(Has the widget been disposed?)"); //$NON-NLS-1$
+		}
         Assert
                 .isTrue(getContentProvider() != null,
                         "ContentViewer must have a content provider when input is set."); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IBaseLabelProvider.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IBaseLabelProvider.java
index a6af26a..28319b6 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IBaseLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IBaseLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,18 +14,18 @@ package org.eclipse.jface.viewers;
  * A label provider maps an element of the viewer's model to
  * an optional image and optional text string used to display
  * the element in the viewer's control.  Certain label providers
- * may allow multiple labels per element.  
- * This is an "abstract interface", defining methods common 
- * to all label providers, but does not actually define the methods 
+ * may allow multiple labels per element.
+ * This is an "abstract interface", defining methods common
+ * to all label providers, but does not actually define the methods
  * to get the label(s) for an element.  This interface should never
  * be directly implemented.
  * Most viewers will take either an <code>ILabelProvider</code> or
  * an <code>ITableLabelProvider</code>.
  * <p>
- * A label provider must not be shared between viewers 
+ * A label provider must not be shared between viewers
  * since a label provider generally manages SWT resources (images),
  * which must be disposed when the viewer is disposed.
- * To simplify life cycle management, the current label provider 
+ * To simplify life cycle management, the current label provider
  * of a viewer is disposed when the viewer is disposed.
  * </p>
  * <p>
@@ -40,10 +40,10 @@ package org.eclipse.jface.viewers;
  */
 public interface IBaseLabelProvider {
     /**
-     * Adds a listener to this label provider. 
+     * Adds a listener to this label provider.
      * Has no effect if an identical listener is already registered.
      * <p>
-     * Label provider listeners are informed about state changes 
+     * Label provider listeners are informed about state changes
      * that affect the rendering of the viewer that uses this label provider.
      * </p>
      *
@@ -62,7 +62,7 @@ public interface IBaseLabelProvider {
     public void dispose();
 
     /**
-     * Returns whether the label would be affected 
+     * Returns whether the label would be affected
      * by a change to the given property of the given element.
      * This can be used to optimize a non-structural viewer update.
      * If the property mentioned in the update does not affect the label,
@@ -77,7 +77,7 @@ public interface IBaseLabelProvider {
 
     /**
      * Removes a listener to this label provider.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a label provider listener
      */
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IPostSelectionProvider.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IPostSelectionProvider.java
index a62792d..37d9405 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IPostSelectionProvider.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/IPostSelectionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ package org.eclipse.jface.viewers;
  * Selection provider extension interface to allow providers
  * to notify about post selection changed events.
  * A post selection changed event is equivalent to selection changed event
- * if the selection change was triggered by the mouse, but it has a delay 
+ * if the selection change was triggered by the mouse, but it has a delay
  * if the selection change is triggered by keyboard navigation.
  *
  * @see ISelectionProvider
@@ -33,9 +33,9 @@ public interface IPostSelectionProvider extends ISelectionProvider {
             ISelectionChangedListener listener);
 
     /**
-     * Removes the given listener for post selection changes from this selection 
+     * Removes the given listener for post selection changes from this selection
      * provider.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a selection changed listener
      */
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionProvider.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionProvider.java
index 4a4e963..d01492f 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionProvider.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ISelectionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ public interface ISelectionProvider {
 
     /**
      * Removes the given selection change listener from this selection provider.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a selection changed listener
      */
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java
index d6c638a..82b9fde 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java
@@ -13,7 +13,6 @@
 
 package org.eclipse.jface.viewers;
 
-import org.eclipse.core.runtime.Assert;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.accessibility.ACC;
 import org.eclipse.swt.accessibility.AccessibleAdapter;
@@ -24,6 +23,8 @@ import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 
+import org.eclipse.core.runtime.Assert;
+
 /**
  * This class is responsible to provide cell management base features for the
  * SWT-Controls {@link org.eclipse.swt.widgets.Table} and
@@ -224,7 +225,7 @@ abstract class SWTFocusCellManager {
 		}
 
 		if( focusCell != null ) {
-			focusCell.scrollIntoView();	
+			focusCell.scrollIntoView();
 		}
 		
 		this.cellHighlighter.focusCellChanged(focusCell,oldCell);
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java
index 4dbd861..4710519 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,9 +17,13 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.internal.InternalPolicy;
 import org.eclipse.jface.util.IOpenEventListener;
 import org.eclipse.jface.util.OpenStrategy;
+import org.eclipse.jface.util.Policy;
 import org.eclipse.jface.util.SafeRunnable;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.TableTreeItem;
@@ -594,6 +598,23 @@ public abstract class StructuredViewer extends ContentViewer implements IPostSel
 		for (int i = 0, n = elements.length; i < n; ++i) {
 			Assert.isNotNull(elements[i]);
 		}
+		
+		if (InternalPolicy.DEBUG_LOG_EQUAL_VIEWER_ELEMENTS
+				&& elements.length > 1) {
+			CustomHashtable elementSet = newHashtable(elements.length * 2);
+			for (int i = 0; i < elements.length; i++) {
+				Object element = elements[i];
+				Object old = elementSet.put(element, element);
+				if (old != null) {
+					String message = "Sibling elements in viewer must not be equal:\n  " //$NON-NLS-1$
+							+ old + ",\n  " + element; //$NON-NLS-1$
+					Policy.getLog().log(
+							new Status(IStatus.WARNING, Policy.JFACE, message,
+									new RuntimeException()));
+					return;
+				}
+			}
+		}
 	}
 
 	/**
@@ -1534,7 +1555,7 @@ public abstract class StructuredViewer extends ContentViewer implements IPostSel
 	}
 
 	/**
-	 * Removes the given open listener from this viewer. Has no affect if an
+	 * Removes the given open listener from this viewer. Has no effect if an
 	 * identical listener is not registered.
 	 * 
 	 * @param listener
@@ -1552,7 +1573,7 @@ public abstract class StructuredViewer extends ContentViewer implements IPostSel
 	}
 
 	/**
-	 * Removes the given double-click listener from this viewer. Has no affect
+	 * Removes the given double-click listener from this viewer. Has no effect
 	 * if an identical listener is not registered.
 	 * 
 	 * @param listener
@@ -1655,7 +1676,12 @@ public abstract class StructuredViewer extends ContentViewer implements IPostSel
 	 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
 	 */
 	public final void setInput(Object input) {
-
+		Control control = getControl();
+		if (control == null || control.isDisposed()) {
+			throw new IllegalStateException(
+					"Need an underlying widget to be able to set the input." + //$NON-NLS-1$
+							"(Has the widget been disposed?)"); //$NON-NLS-1$
+		}
 		try {
 			//		fInChange= true;
 
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StyledCellLabelProvider.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StyledCellLabelProvider.java
index 5547da5..c0bae3a 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StyledCellLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/StyledCellLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
  *******************************************************************************/
 package org.eclipse.jface.viewers;
 
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.viewers.StyledString.Styler;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyleRange;
 import org.eclipse.swt.graphics.Color;
@@ -20,11 +22,6 @@ import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.graphics.TextLayout;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Widget;
-
-import org.eclipse.core.runtime.Assert;
-
-import org.eclipse.jface.viewers.StyledString.Styler;
 
 /**
  * A {@link StyledCellLabelProvider} supports styled labels by using owner
@@ -74,8 +71,6 @@ public abstract class StyledCellLabelProvider extends OwnerDrawLabelProvider {
 	private ColumnViewer viewer;
 	private ViewerColumn column;
 	
-	private Widget itemOfLastMeasure;
-	private Object elementOfLastMeasure;
 	private int deltaOfLastMeasure;
 
 	/**
@@ -183,8 +178,6 @@ public abstract class StyledCellLabelProvider extends OwnerDrawLabelProvider {
 	
 		this.viewer= null;
 		this.column= null;
-		this.itemOfLastMeasure = null;
-		this.elementOfLastMeasure = null;
 		
 		super.dispose();
 	}
@@ -278,15 +271,11 @@ public abstract class StyledCellLabelProvider extends OwnerDrawLabelProvider {
 			return;
 		
 		ViewerCell cell= getViewerCell(event, element);
-		boolean applyColors = useColors(event); // returns false because of bug 228376
+		boolean applyColors = useColors(event);
 		
 		TextLayout layout = getSharedTextLayout(event.display);
 		
 		int textWidthDelta = deltaOfLastMeasure = updateTextLayout(layout, cell, applyColors);
-		/* remove-begin if bug 228695 fixed */
-		itemOfLastMeasure = event.item;
-		elementOfLastMeasure = event.item.getData();
-		/* remove-end if bug 228695 fixed */
 
 		event.width += textWidthDelta;
 	}
@@ -299,8 +288,8 @@ public abstract class StyledCellLabelProvider extends OwnerDrawLabelProvider {
 	 */
 	private int updateTextLayout(TextLayout layout, ViewerCell cell,
 			boolean applyColors) {
-		layout.setText(""); //$NON-NLS-1$  //make sure all previous ranges are cleared (see bug 226090)
-		
+		layout.setStyle(null, 0, Integer.MAX_VALUE); // clear old styles
+
 		layout.setText(cell.getText());
 		layout.setFont(cell.getFont()); // set also if null to clear previous usages
 		
@@ -372,28 +361,7 @@ public abstract class StyledCellLabelProvider extends OwnerDrawLabelProvider {
 		Rectangle textBounds = cell.getTextBounds();
 		if (textBounds != null) {
 			TextLayout textLayout= getSharedTextLayout(event.display);
-
-			/* remove-begin if bug 228695 fixed */
-			if (event.item != itemOfLastMeasure || event.item.getData() != elementOfLastMeasure) {
-				// fLayout has not been configured in 'measure()'
-				deltaOfLastMeasure = updateTextLayout(textLayout, cell, applyColors);
-				itemOfLastMeasure = event.item;
-				elementOfLastMeasure = event.item.getData();
-			}
-			/* remove-end if bug 228695 fixed */
-			
-			/* remove-begin if bug 228376 fixed */
-			if (!applyColors) {
-				// need to remove colors for selected elements: measure doesn't provide that information, see bug 228376
-				StyleRange[] styleRanges= cell.getStyleRanges();
-				if (styleRanges != null) {
-					for (int i= 0; i < styleRanges.length; i++) {
-						StyleRange curr = prepareStyleRange(styleRanges[i], applyColors);
-						textLayout.setStyle(curr, curr.start, curr.start + curr.length - 1);
-					}
-				}
-			}
-			/* remove-end if bug 228376 fixed */
+			// text layout already configured in measure(Event, Object)
 			
 			Rectangle layoutBounds = textLayout.getBounds();
 	
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java
index bca6433..ee9ffb3 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/Viewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,18 +10,20 @@
  *******************************************************************************/
 package org.eclipse.jface.viewers;
 
-import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.util.SafeRunnable;
 import org.eclipse.swt.events.HelpEvent;
 import org.eclipse.swt.events.HelpListener;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Item;
 
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.ListenerList;
+
+import org.eclipse.jface.util.SafeRunnable;
+
 /**
  * A viewer is a model-based adapter on a widget.
  * <p>
- * A viewer can be created as an adapter on a pre-existing control (e.g., 
+ * A viewer can be created as an adapter on a pre-existing control (e.g.,
  * creating a <code>ListViewer</code> on an existing <code>List</code> control).
  * All viewers also provide a convenience constructor for creating the control.
  * </p>
@@ -228,7 +230,7 @@ public abstract class Viewer implements IInputSelectionProvider {
      * Internal hook method called when the input to this viewer is
      * initially set or subsequently changed.
      * <p>
-     * The default implementation does nothing. Subclassers may override 
+     * The default implementation does nothing. Subclassers may override
      * this method to do something when a viewer's input is set.
      * A typical use is populate the viewer.
      * </p>
@@ -248,7 +250,7 @@ public abstract class Viewer implements IInputSelectionProvider {
 
     /**
      * Removes the given help listener from this viewer.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a help listener
      */
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerDropAdapter.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerDropAdapter.java
index e9817a5..35bc938 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerDropAdapter.java
@@ -369,12 +369,12 @@ public abstract class ViewerDropAdapter extends DropTargetAdapter {
         return feedbackEnabled;
     }
 
-    /**
-     * Returns the object currently selected by the viewer.
-     *
-     * @return the selected object, or <code>null</code> if either no object or 
-     *   multiple objects are selected
-     */
+	/**
+	 * Returns the object currently selected by the viewer.
+	 * 
+	 * @return the selected object or the first element in current selection,
+	 *         and null if no objects are selected
+	 */
     protected Object getSelectedObject() {
         ISelection selection = viewer.getSelection();
         if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/deferred/ChangeQueue.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/deferred/ChangeQueue.java
index 575bde3..e630b28 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/deferred/ChangeQueue.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/viewers/deferred/ChangeQueue.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,7 +82,6 @@ final class ChangeQueue {
 	}
 	
 	private LinkedList queue = new LinkedList();
-	private int workload = 0;
 	
 	/**
 	 * Create a change of the given type and elements and enqueue it.
@@ -102,7 +101,6 @@ final class ChangeQueue {
 		// A SET event makes all previous adds, removes, and sets redundant... so remove
 		// them from the queue
 		if (toQueue.type == SET) {
-			workload = 0;
 			LinkedList newQueue = new LinkedList();
 			for (Iterator iter = queue.iterator(); iter.hasNext();) {
 				Change next = (Change) iter.next();
@@ -112,13 +110,11 @@ final class ChangeQueue {
 				}
 				
 				newQueue.add(next);
-				workload += next.elements.length;
 			}
 			queue = newQueue;
 		}
 		
 		queue.add(toQueue);
-		workload += toQueue.elements.length;
 	}
 	
 	/**
@@ -127,8 +123,6 @@ final class ChangeQueue {
 	 */
 	public synchronized Change dequeue() {
 		Change result = (Change)queue.removeFirst();
-		
-		workload -= result.elements.length;
 		return result;
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/IWizard.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/IWizard.java
index 22602ac..4f9e0d5 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/IWizard.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/IWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.jface.wizard;
 
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.TrayDialog;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Composite;
@@ -163,15 +164,24 @@ public interface IWizard {
     public String getWindowTitle();
 
     /**
-     * Returns whether help is available for this wizard.
-     * <p>
-     * The result of this method is typically used by the container to
-     * show or hide the Help button.
-     * </p>
-     *
-     * @return <code>true</code> if help is available,
-     *   and <code>false</code> if this wizard is helpless
-     */
+	 * Returns whether help is available for this wizard.
+	 * <p>
+	 * The result of this method is typically used by the container to show or hide a button labeled
+	 * "Help".
+	 * </p>
+	 * <p>
+	 * <strong>Note:</strong> This wizard's container might be a {@link TrayDialog} which provides
+	 * its own help support that is independent of this property.
+	 * </p>
+	 * <p>
+	 * <strong>Note 2:</strong> In the default {@link WizardDialog} implementation, the "Help"
+	 * button only works when {@link org.eclipse.jface.dialogs.IDialogPage#performHelp()} is implemented.
+	 * </p>
+	 * 
+	 * @return <code>true</code> if help is available, <code>false</code> otherwise
+	 * @see TrayDialog#isHelpAvailable()
+	 * @see TrayDialog#setHelpAvailable(boolean)
+	 */
     public boolean isHelpAvailable();
 
     /**
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/Wizard.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/Wizard.java
index 3484781..da8a8fe 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/Wizard.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/Wizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,9 +14,13 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.TrayDialog;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.Policy;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Composite;
@@ -185,7 +189,12 @@ public abstract class Wizard implements IWizard {
     public void dispose() {
         // notify pages
         for (int i = 0; i < pages.size(); i++) {
-            ((IWizardPage) pages.get(i)).dispose();
+			try {
+	            ((IWizardPage) pages.get(i)).dispose();
+			} catch (Exception e) {
+				Status status = new Status(IStatus.ERROR, Policy.JFACE, IStatus.ERROR, e.getMessage(), e);
+				Policy.getLog().log(status);
+			}
         }
         // dispose of image
         if (defaultImage != null) {
@@ -402,17 +411,25 @@ public abstract class Wizard implements IWizard {
     }
 
     /**
-     * Sets whether help is available for this wizard.
-     * <p>
-     * The result of this method is typically used by the container to show or
-     * hide the Help button.
-     * </p>
-     * 
-     * @param b
-     *            <code>true</code> if help is available, and
-     *            <code>false</code> if this wizard is helpless
-     * @see #isHelpAvailable()
-     */
+	 * Sets whether help is available for this wizard.
+	 * <p>
+	 * The result of this method is typically used by the container to show or hide the button
+	 * labeled "Help".
+	 * </p>
+	 * <p>
+	 * <strong>Note:</strong> This wizard's container might be a {@link TrayDialog} which provides
+	 * its own help support that is independent of this property.
+	 * </p>
+	 * <p>
+	 * <strong>Note 2:</strong> In the default {@link WizardDialog} implementation, the "Help"
+	 * button only works when {@link org.eclipse.jface.dialogs.IDialogPage#performHelp()} is implemented.
+	 * </p>
+	 * 
+	 * @param b <code>true</code> if help is available, <code>false</code> otherwise
+	 * @see #isHelpAvailable()
+	 * @see TrayDialog#isHelpAvailable()
+	 * @see TrayDialog#setHelpAvailable(boolean)
+	 */
     public void setHelpAvailable(boolean b) {
         isHelpAvailable = b;
     }
diff --git a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java
index a1de24f..7ee8d81 100644
--- a/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java
+++ b/eclipse/plugins/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,29 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ControlEnableState;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.IPageChangeProvider;
+import org.eclipse.jface.dialogs.IPageChangedListener;
+import org.eclipse.jface.dialogs.IPageChangingListener;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.PageChangedEvent;
+import org.eclipse.jface.dialogs.PageChangingEvent;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.operation.ModalContext;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.Policy;
+import org.eclipse.jface.util.SafeRunnable;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleEvent;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.HelpEvent;
 import org.eclipse.swt.events.HelpListener;
@@ -39,26 +61,6 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Shell;
 
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.ListenerList;
-
-import org.eclipse.jface.dialogs.ControlEnableState;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.dialogs.IPageChangeProvider;
-import org.eclipse.jface.dialogs.IPageChangedListener;
-import org.eclipse.jface.dialogs.IPageChangingListener;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.PageChangedEvent;
-import org.eclipse.jface.dialogs.PageChangingEvent;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.operation.ModalContext;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.util.SafeRunnable;
-
 /**
  * A dialog to show a wizard to the end user.
  * <p>
@@ -774,6 +776,20 @@ public class WizardDialog extends TitleAreaDialog implements IWizardContainer2,
 				IDialogConstants.BACK_LABEL, false);
 		nextButton = createButton(composite, IDialogConstants.NEXT_ID,
 				IDialogConstants.NEXT_LABEL, false);
+		
+		// make sure screen readers skip visual '<', '>' chars on buttons:
+		final String backReaderText = IDialogConstants.BACK_LABEL.replace('<', ' ');
+		backButton.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			public void getName(AccessibleEvent e) {
+				e.result = backReaderText;
+			}
+		});
+		final String nextReaderText = IDialogConstants.NEXT_LABEL.replace('>', ' ');
+		nextButton.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			public void getName(AccessibleEvent e) {
+				e.result = nextReaderText;
+			}
+		});
 		return composite;
 	}
 
@@ -856,7 +872,12 @@ public class WizardDialog extends TitleAreaDialog implements IWizardContainer2,
 		// inform wizards
 		for (int i = 0; i < createdWizards.size(); i++) {
 			IWizard createdWizard = (IWizard) createdWizards.get(i);
-			createdWizard.dispose();
+			try {
+				createdWizard.dispose();
+			} catch (Exception e) {
+				Status status = new Status(IStatus.ERROR, Policy.JFACE, IStatus.ERROR, e.getMessage(), e);
+				Policy.getLog().log(status);
+			}
 			// Remove this dialog as a parent from the managed wizard.
 			// Note that we do this after calling dispose as the wizard or
 			// its pages may need access to the container during
diff --git a/eclipse/plugins/org.eclipse.jsch.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.jsch.core/META-INF/MANIFEST.MF
index 0bf9e09..3094f8d 100644
--- a/eclipse/plugins/org.eclipse.jsch.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.jsch.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jsch.core;singleton:=true
-Bundle-Version: 1.1.200.qualifier
+Bundle-Version: 1.1.300.qualifier
 Bundle-Activator: org.eclipse.jsch.internal.core.JSchCorePlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.jsch.core/plugin.xml b/eclipse/plugins/org.eclipse.jsch.core/plugin.xml
index d9ae796..0bce2cd 100644
--- a/eclipse/plugins/org.eclipse.jsch.core/plugin.xml
+++ b/eclipse/plugins/org.eclipse.jsch.core/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?>
+<!--
+    Copyright (c) 2007, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
    <extension-point id="authenticator" name="%Authenticator" schema="schema/authenticator.exsd" /> 
    <extension
diff --git a/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/IConstants.java b/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/IConstants.java
index ce7f29e..5ec77eb 100644
--- a/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/IConstants.java
+++ b/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/IConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,9 @@ public interface IConstants{
   public static final  String RSA="RSA"; //$NON-NLS-1$
   
   public static final int SSH_DEFAULT_PORT=22;
+  public static final String SSH_DEFAULT_HOME=".ssh"; //$NON-NLS-1$
+  public static final String SSH_OLD_DEFAULT_WIN32_HOME="ssh"; //$NON-NLS-1$
+  public static final String SYSTEM_PROPERTY_USER_HOME="user.home"; //$NON-NLS-1$
   
   public final String PREF_USE_PROXY="proxyEnabled"; //$NON-NLS-1$
   public final String PREF_PROXY_TYPE="proxyType"; //$NON-NLS-1$
@@ -47,6 +50,7 @@ public interface IConstants{
   public final String PREF_PROXY_AUTH="proxyAuth"; //$NON-NLS-1$
 
   public final String PREF_HAS_MIGRATED_SSH2_PREFS="org.eclipse.jsch.core.hasMigratedSsh2Preferences"; //$NON-NLS-1$
+  public final String PREF_HAS_CHANGED_DEFAULT_WIN32_SSH_HOME="org.eclipse.jsch.core.hasChangedDefaultWin32SshHome"; //$NON-NLS-1$
   
   public static final String PREF_PREFERRED_AUTHENTICATION_METHODS="CVSSSH2PreferencePage.PREF_AUTH_METHODS"; //$NON-NLS-1$
   public static final String PREF_PREFERRED_AUTHENTICATION_METHODS_ORDER="CVSSSH2PreferencePage.PREF_AUTH_METHODS_ORDER"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/PreferenceInitializer.java b/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/PreferenceInitializer.java
index 57c9900..437b7db 100644
--- a/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/PreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/PreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,30 +11,78 @@
  *******************************************************************************/
 package org.eclipse.jsch.internal.core;
 
+import java.io.File;
+
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.preferences.*;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.BackingStoreException;
 
 public class PreferenceInitializer extends AbstractPreferenceInitializer{
 
   public static String SSH_HOME_DEFAULT=null;
-  static{
-    String ssh_dir_name=".ssh"; //$NON-NLS-1$
 
-    // Windows doesn't like files or directories starting with a dot.
-    if(Platform.getOS().equals(Platform.OS_WIN32)){
-      ssh_dir_name="ssh"; //$NON-NLS-1$
-    }
-    SSH_HOME_DEFAULT=System.getProperty("user.home"); //$NON-NLS-1$
+  public static String SSH_OLD_WIN32_HOME_DEFAULT=null;
+
+  static{
+    SSH_HOME_DEFAULT=System.getProperty(IConstants.SYSTEM_PROPERTY_USER_HOME);
     if(SSH_HOME_DEFAULT!=null){
-      SSH_HOME_DEFAULT=SSH_HOME_DEFAULT+java.io.File.separator+ssh_dir_name;
+      SSH_OLD_WIN32_HOME_DEFAULT=SSH_HOME_DEFAULT+File.separator
+          +IConstants.SSH_OLD_DEFAULT_WIN32_HOME;
+      SSH_HOME_DEFAULT=SSH_HOME_DEFAULT+File.separator
+          +IConstants.SSH_DEFAULT_HOME;
     }
   }
-  
+
   public void initializeDefaultPreferences(){
-    IEclipsePreferences defaultNode=new DefaultScope().getNode(JSchCorePlugin.ID);
-    defaultNode.put(IConstants.KEY_SSH2HOME, SSH_HOME_DEFAULT);
+    IEclipsePreferences defaultNode=DefaultScope.INSTANCE
+        .getNode(JSchCorePlugin.ID);
+    if(SSH_HOME_DEFAULT!=null)
+      defaultNode.put(IConstants.KEY_SSH2HOME, SSH_HOME_DEFAULT);
     defaultNode.put(IConstants.KEY_PRIVATEKEY, IConstants.PRIVATE_KEYS_DEFAULT);
+    changeDefaultWin32SshHome();
     Utils.migrateSSH2Preferences();
   }
 
+  private void changeDefaultWin32SshHome(){
+    if(!Platform.getOS().equals(Platform.OS_WIN32))
+      return;
+
+    IEclipsePreferences preferences=InstanceScope.INSTANCE
+        .getNode(JSchCorePlugin.ID);
+
+    // flag to check if the win32 default ssh home was alrady changed
+    boolean defaultWin32SshHomeChanged=preferences.getBoolean(
+        IConstants.PREF_HAS_CHANGED_DEFAULT_WIN32_SSH_HOME, false);
+
+    // flag to check if it is an existing workspace
+    // TODO bug 334508 needs to be fixed to determine that we are on an existing workspace
+    boolean existingWorkspace=true;
+
+    if(!defaultWin32SshHomeChanged){
+      if(null==preferences.get(IConstants.KEY_SSH2HOME, null)){
+        if(SSH_OLD_WIN32_HOME_DEFAULT!=null
+            &&new File(SSH_OLD_WIN32_HOME_DEFAULT).exists()){
+          if(!(SSH_HOME_DEFAULT!=null&&new File(SSH_HOME_DEFAULT).exists())
+              ||existingWorkspace)
+            preferences
+                .put(IConstants.KEY_SSH2HOME, SSH_OLD_WIN32_HOME_DEFAULT);
+        }
+      }
+
+      preferences.putBoolean(
+          IConstants.PREF_HAS_CHANGED_DEFAULT_WIN32_SSH_HOME, true);
+      try{
+        preferences.flush();
+      }
+      catch(BackingStoreException e){
+        JSchCorePlugin.log(new Status(IStatus.INFO, JSchCorePlugin.ID,
+            "Could not flush preferences.", e)); //$NON-NLS-1$
+      }
+    }
+  }
 }
diff --git a/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/Utils.java b/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/Utils.java
index 33b6d96..dad3cca 100644
--- a/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/Utils.java
+++ b/eclipse/plugins/org.eclipse.jsch.core/src/org/eclipse/jsch/internal/core/Utils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jsch.ui/plugin.xml b/eclipse/plugins/org.eclipse.jsch.ui/plugin.xml
index 7297d8a..5babf6a 100644
--- a/eclipse/plugins/org.eclipse.jsch.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.jsch.ui/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?>
+<!--
+    Copyright (c) 2007, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
 
    <extension
diff --git a/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java b/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java
index 28c6047..a0e1ba8 100644
--- a/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java
+++ b/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java b/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java
index 491345a..419f6ef 100644
--- a/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java
+++ b/eclipse/plugins/org.eclipse.jsch.ui/src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF
index 2c52c09..a685a69 100644
--- a/eclipse/plugins/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ltk.core.refactoring/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ltk.core.refactoring; singleton:=true
-Bundle-Version: 3.5.101.qualifier
+Bundle-Version: 3.5.200.qualifier
 Bundle-Activator: org.eclipse.ltk.internal.core.refactoring.RefactoringCorePlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java
index c9ac693..0fd8cf0 100644
--- a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java
+++ b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/ProcessorBasedRefactoring.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -255,6 +255,8 @@ public class ProcessorBasedRefactoring extends Refactoring {
 
 			try {
 				result.merge(participant.checkConditions(new SubProgressMonitor(sm, 1), context));
+			} catch (OperationCanceledException e) {
+				throw e;
 			} catch (RuntimeException e) {
 				// remove the participant so that it will be ignored during change execution.
 				RefactoringCorePlugin.log(e);
@@ -327,6 +329,8 @@ public class ProcessorBasedRefactoring extends Refactoring {
 			} catch (CoreException e) {
 				disableParticipant(participant, e);
 				throw e;
+			} catch (OperationCanceledException e) {
+				throw e;
 			} catch (RuntimeException e) {
 				disableParticipant(participant, e);
 				throw e;
diff --git a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/RefactoringProcessor.java b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/RefactoringProcessor.java
index b9cf0bf..7cfe83b 100644
--- a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/RefactoringProcessor.java
+++ b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/participants/RefactoringProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,7 +86,7 @@ public abstract class RefactoringProcessor extends PlatformObject {
 	 * example a processor responsible for renaming Java methods returns the
 	 * method to be renamed via this call.
 	 *
-	 * @return an array containing the element to be refactored
+	 * @return an array containing the elements to be refactored
 	 */
 	public abstract Object[] getElements();
 
@@ -138,7 +138,7 @@ public abstract class RefactoringProcessor extends PlatformObject {
 	 *  the refactoring is considered as not being executable.
 	 *
 	 * @throws CoreException if an exception occurred during initial condition
-	 *         checking. If this happens the initial condition checking is
+	 *         checking. If this happens, the initial condition checking is
 	 *         interpreted as failed.
 	 *
 	 * @throws OperationCanceledException if the condition checking got canceled
@@ -166,7 +166,7 @@ public abstract class RefactoringProcessor extends PlatformObject {
 	 *  the refactoring is considered as not being executable.
 	 *
 	 * @throws CoreException if an exception occurred during final condition
-	 *  checking. If this happens the final condition checking is interpreted as failed.
+	 *  checking. If this happens, the final condition checking is interpreted as failed.
 	 *
 	 * @throws OperationCanceledException if the condition checking got canceled
 	 *
diff --git a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/resource/MoveResourcesDescriptor.java b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/resource/MoveResourcesDescriptor.java
index edb8e1f..482548b 100644
--- a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/resource/MoveResourcesDescriptor.java
+++ b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/core/refactoring/resource/MoveResourcesDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,7 +54,7 @@ public final class MoveResourcesDescriptor extends RefactoringDescriptor {
 
 	/**
 	 * Refactoring id of the 'Move Resources Resource' refactoring (value:
-	 * <code>org.eclipse.ltk.core.refactoring.rename.resources</code>).
+	 * <code>org.eclipse.ltk.core.refactoring.move.resources</code>).
 	 * <p>
 	 * Clients may safely cast the obtained refactoring descriptor to
 	 * {@link MoveResourcesDescriptor}.
diff --git a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java
index 415764d..364d64d 100644
--- a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java
+++ b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/UndoManager2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 
 public class UndoManager2 implements IUndoManager {
 
-	private class OperationHistroyListener implements IOperationHistoryListener {
+	private class OperationHistoryListener implements IOperationHistoryListener {
 		public void historyNotification(OperationHistoryEvent event) {
 			IUndoableOperation op= event.getOperation();
 			if (op instanceof TriggeredOperations) {
@@ -99,7 +99,7 @@ public class UndoManager2 implements IUndoManager {
 		}
 	}
 
-	private IOperationHistory fOperationHistroy;
+	private IOperationHistory fOperationHistory;
 	private IOperationHistoryListener fOperationHistoryListener;
 
 	private boolean fIsOpen;
@@ -108,14 +108,14 @@ public class UndoManager2 implements IUndoManager {
 	private ListenerList fListeners;
 
 	public UndoManager2() {
-		fOperationHistroy= OperationHistoryFactory.getOperationHistory();
+		fOperationHistory= OperationHistoryFactory.getOperationHistory();
 	}
 
 	public void addListener(IUndoManagerListener listener) {
 		if (fListeners == null) {
 			fListeners= new ListenerList(ListenerList.IDENTITY);
-			fOperationHistoryListener= new OperationHistroyListener();
-			fOperationHistroy.addOperationHistoryListener(fOperationHistoryListener);
+			fOperationHistoryListener= new OperationHistoryListener();
+			fOperationHistory.addOperationHistoryListener(fOperationHistoryListener);
 		}
 		fListeners.add(listener);
 	}
@@ -125,7 +125,7 @@ public class UndoManager2 implements IUndoManager {
 			return;
 		fListeners.remove(listener);
 		if (fListeners.size() == 0) {
-			fOperationHistroy.removeOperationHistoryListener(fOperationHistoryListener);
+			fOperationHistory.removeOperationHistoryListener(fOperationHistoryListener);
 			fListeners= null;
 			fOperationHistoryListener= null;
 		}
@@ -134,9 +134,9 @@ public class UndoManager2 implements IUndoManager {
 	public void aboutToPerformChange(Change change) {
 		IUndoableOperation operation= new UndoableOperation2ChangeAdapter(change);
 		operation.addContext(RefactoringCorePlugin.getUndoContext());
-		fActiveOperation= new TriggeredOperations(operation, fOperationHistroy);
+		fActiveOperation= new TriggeredOperations(operation, fOperationHistory);
 		fActiveOperation.addContext(RefactoringCorePlugin.getUndoContext());
-    	fOperationHistroy.openOperation(fActiveOperation, IOperationHistory.EXECUTE);
+    	fOperationHistory.openOperation(fActiveOperation, IOperationHistory.EXECUTE);
     	fIsOpen= true;
 	}
 
@@ -150,7 +150,7 @@ public class UndoManager2 implements IUndoManager {
 
 	public void changePerformed(Change change, boolean successful) {
 		if (fIsOpen && fActiveOperation != null) {
-			fOperationHistroy.closeOperation(successful, false, IOperationHistory.EXECUTE);
+			fOperationHistory.closeOperation(successful, false, IOperationHistory.EXECUTE);
 	        fIsOpen= false;
 		}
 	}
@@ -160,24 +160,24 @@ public class UndoManager2 implements IUndoManager {
 			UndoableOperation2ChangeAdapter operation= (UndoableOperation2ChangeAdapter)fActiveOperation.getTriggeringOperation();
 			operation.setUndoChange(change);
 			operation.setLabel(name);
-			fOperationHistroy.add(fActiveOperation);
+			fOperationHistory.add(fActiveOperation);
 			fActiveOperation= null;
 		}
 	}
 
 	public boolean anythingToUndo() {
-		return fOperationHistroy.canUndo(RefactoringCorePlugin.getUndoContext());
+		return fOperationHistory.canUndo(RefactoringCorePlugin.getUndoContext());
 	}
 
 	public String peekUndoName() {
-		IUndoableOperation op= fOperationHistroy.getUndoOperation(RefactoringCorePlugin.getUndoContext());
+		IUndoableOperation op= fOperationHistory.getUndoOperation(RefactoringCorePlugin.getUndoContext());
 		if (op == null)
 			return null;
 		return op.getLabel();
 	}
 
 	public void performUndo(IValidationCheckResultQuery query, IProgressMonitor pm) throws CoreException {
-		IUndoableOperation undo= fOperationHistroy.getUndoOperation(RefactoringCorePlugin.getUndoContext());
+		IUndoableOperation undo= fOperationHistory.getUndoOperation(RefactoringCorePlugin.getUndoContext());
 		UndoableOperation2ChangeAdapter changeOperation= getUnwrappedOperation(undo);
 		if (changeOperation == null)
 			throw new CoreException(new Status(IStatus.ERROR, RefactoringCorePlugin.getPluginId(),
@@ -185,25 +185,25 @@ public class UndoManager2 implements IUndoManager {
 		if (query == null)
 			query= new NullQuery();
 		try {
-			fOperationHistroy.undoOperation(undo, pm, new QueryAdapter(query));
+			fOperationHistory.undoOperation(undo, pm, new QueryAdapter(query));
 		} catch (ExecutionException e) {
 			handleException(e);
 		}
 	}
 
 	public boolean anythingToRedo() {
-		return fOperationHistroy.canRedo(RefactoringCorePlugin.getUndoContext());
+		return fOperationHistory.canRedo(RefactoringCorePlugin.getUndoContext());
 	}
 
 	public String peekRedoName() {
-		IUndoableOperation op= fOperationHistroy.getRedoOperation(RefactoringCorePlugin.getUndoContext());
+		IUndoableOperation op= fOperationHistory.getRedoOperation(RefactoringCorePlugin.getUndoContext());
 		if (op == null)
 			return null;
 		return op.getLabel();
 	}
 
 	public void performRedo(IValidationCheckResultQuery query, IProgressMonitor pm) throws CoreException {
-		IUndoableOperation redo= fOperationHistroy.getRedoOperation(RefactoringCorePlugin.getUndoContext());
+		IUndoableOperation redo= fOperationHistory.getRedoOperation(RefactoringCorePlugin.getUndoContext());
 		UndoableOperation2ChangeAdapter changeOperation= getUnwrappedOperation(redo);
 		if (changeOperation == null)
 			throw new CoreException(new Status(IStatus.ERROR, RefactoringCorePlugin.getPluginId(),
@@ -211,7 +211,7 @@ public class UndoManager2 implements IUndoManager {
 		if (query == null)
 			query= new NullQuery();
 		try {
-			fOperationHistroy.redoOperation(redo, pm, new QueryAdapter(query));
+			fOperationHistory.redoOperation(redo, pm, new QueryAdapter(query));
 		} catch (ExecutionException e) {
 			handleException(e);
 		}
@@ -231,7 +231,7 @@ public class UndoManager2 implements IUndoManager {
 	public void flush() {
 		if (fActiveOperation != null) {
 			if (fIsOpen) {
-				fOperationHistroy.closeOperation(false, false, IOperationHistory.EXECUTE);
+				fOperationHistory.closeOperation(false, false, IOperationHistory.EXECUTE);
 			}
 			/* the triggering operation is invalid, but we must ensure that any
 	         * other operations executed while it was open remain in the undo
@@ -239,11 +239,11 @@ public class UndoManager2 implements IUndoManager {
 	         * since disposing the context later will cause it to be broken up into
 	         * its atomic parts.
 	         */
-			fOperationHistroy.add(fActiveOperation);
+			fOperationHistory.add(fActiveOperation);
 		}
 		fActiveOperation= null;
 		fIsOpen= false;
-		fOperationHistroy.dispose(RefactoringCorePlugin.getUndoContext(), true, true, false);
+		fOperationHistory.dispose(RefactoringCorePlugin.getUndoContext(), true, true, false);
 	}
 
 	public void shutdown() {
@@ -335,10 +335,10 @@ public class UndoManager2 implements IUndoManager {
 	//---- testing methods ---------------------------------------------
 
 	public boolean testHasNumberOfUndos(int number) {
-		return fOperationHistroy.getUndoHistory(RefactoringCorePlugin.getUndoContext()).length == number;
+		return fOperationHistory.getUndoHistory(RefactoringCorePlugin.getUndoContext()).length == number;
 	}
 
 	public boolean testHasNumberOfRedos(int number) {
-		return fOperationHistroy.getRedoHistory(RefactoringCorePlugin.getUndoContext()).length == number;
+		return fOperationHistory.getRedoHistory(RefactoringCorePlugin.getUndoContext()).length == number;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/history/RefactoringHistoryManager.java b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/history/RefactoringHistoryManager.java
index 6b71ea9..db0e88c 100644
--- a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/history/RefactoringHistoryManager.java
+++ b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/history/RefactoringHistoryManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,9 +31,9 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TimeZone;
-import java.util.Map.Entry;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -593,8 +593,6 @@ public final class RefactoringHistoryManager {
 	 */
 	private static final class DOMWriter extends PrintWriter {
 
-		private int tab;
-
 		/* constants */
 		private static final String XML_VERSION= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; //$NON-NLS-1$
 
@@ -605,7 +603,6 @@ public final class RefactoringHistoryManager {
 		 */
 		public DOMWriter(Writer output) {
 			super(output);
-			tab= 0;
 		}
 
 		public void printDocument(Document doc) {
@@ -625,7 +622,6 @@ public final class RefactoringHistoryManager {
 			boolean hasChildren= element.hasChildNodes();
 			startTag(element, hasChildren);
 			if (hasChildren) {
-				tab++;
 				boolean prevWasText= false;
 				NodeList children= element.getChildNodes();
 				for (int i= 0; i < children.getLength(); i++) {
@@ -633,7 +629,6 @@ public final class RefactoringHistoryManager {
 					if (node instanceof Element) {
 						if (!prevWasText) {
 							println();
-							printTabulation();
 						}
 						printElement((Element) children.item(i));
 						prevWasText= false;
@@ -642,25 +637,13 @@ public final class RefactoringHistoryManager {
 						prevWasText= true;
 					}
 				}
-				tab--;
 				if (!prevWasText) {
 					println();
-					printTabulation();
 				}
 				endTag(element);
 			}
 		}
 
-		private void printTabulation() {
-			// Indenting is disabled, as it can affect the result of getTextData().
-			// In 3.0, elements were separated by a newline but not indented.
-			// This causes getTextData() to return "\n" even if no text data had explicitly been set.
-			// The code here emulates that behaviour.
-
-//    		for (int i = 0; i < tab; i++)
-//    			super.print("\t"); //$NON-NLS-1$
-		}
-
 		private void startTag(Element element, boolean hasChildren) {
 			StringBuffer sb= new StringBuffer();
 			sb.append("<"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/RenameResourceProcessor.java b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/RenameResourceProcessor.java
index e0da564..5215308 100644
--- a/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/RenameResourceProcessor.java
+++ b/eclipse/plugins/org.eclipse.ltk.core.refactoring/src/org/eclipse/ltk/internal/core/refactoring/resource/RenameResourceProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,12 +151,12 @@ public class RenameResourceProcessor extends RenameProcessor {
 		if (c == null)
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.RenameResourceProcessor_error_no_parent);
 
-		if (c.findMember(newName) != null)
-			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.RenameResourceProcessor_error_resource_already_exists);
-
 		if (!c.getFullPath().isValidSegment(newName))
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.RenameResourceProcessor_error_invalid_name);
 
+		if (c.findMember(newName) != null)
+			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.RenameResourceProcessor_error_resource_already_exists);
+
 		RefactoringStatus result= RefactoringStatus.create(c.getWorkspace().validateName(newName, fResource.getType()));
 		if (!result.hasFatalError())
 			result.merge(RefactoringStatus.create(c.getWorkspace().validatePath(createNewPath(newName), fResource.getType())));
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/META-INF/MANIFEST.MF
index ba6838e..6534a86 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ltk.ui.refactoring; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-Activator: org.eclipse.ltk.internal.ui.refactoring.RefactoringUIPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/AbstractChangeNode.java b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/AbstractChangeNode.java
index 74eed78..3854b42 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/AbstractChangeNode.java
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/AbstractChangeNode.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -163,12 +163,12 @@ public abstract class AbstractChangeNode extends PreviewNode {
 	static boolean hasDerivedResourceChange(Change change) {
 		Object modifiedElement= change.getModifiedElement();
 		if (modifiedElement instanceof IResource) {
-			return ((IResource) modifiedElement).isDerived();
+			return ((IResource) modifiedElement).isDerived(IResource.CHECK_ANCESTORS);
 		} else if (modifiedElement instanceof IAdaptable) {
 			IAdaptable adaptable= (IAdaptable) modifiedElement;
 			IResource resource= (IResource) adaptable.getAdapter(IResource.class);
 			if (resource != null) {
-				return resource.isDerived();
+				return resource.isDerived(IResource.CHECK_ANCESTORS);
 			}
 		}
 		return false;
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringStatusViewer.java b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringStatusViewer.java
index a892c0f..eec1198 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringStatusViewer.java
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringStatusViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
 package org.eclipse.ltk.internal.ui.refactoring;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.accessibility.AccessibleAdapter;
-import org.eclipse.swt.accessibility.AccessibleEvent;
 import org.eclipse.swt.custom.SashForm;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridData;
@@ -21,7 +19,6 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
 
 import org.eclipse.core.runtime.CoreException;
 
@@ -46,6 +43,7 @@ import org.eclipse.compare.CompareUI;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 import org.eclipse.ltk.core.refactoring.RefactoringStatusContext;
 import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry;
+import org.eclipse.ltk.internal.ui.refactoring.util.SWTUtil;
 import org.eclipse.ltk.internal.ui.refactoring.util.ViewerPane;
 import org.eclipse.ltk.ui.refactoring.IStatusContextViewer;
 
@@ -159,7 +157,6 @@ public class RefactoringStatusViewer extends SashForm {
 		fStatus= status;
 		if (fTableViewer.getInput() != fStatus) {
 			fTableViewer.setInput(fStatus);
-			fTableViewer.getTable().getColumn(0).pack();
 			ISelection selection= fTableViewer.getSelection();
 			if (selection.isEmpty()) {
 				RefactoringStatusEntry entry= getFirstEntry();
@@ -233,15 +230,8 @@ public class RefactoringStatusViewer extends SashForm {
 		tableControl.setFont(JFaceResources.getDialogFont());
 		GridData gd= new GridData(GridData.FILL_BOTH);
 		tableControl.setLayoutData(gd);
-		// Add a column so that we can pack it in setVisible.
-		TableColumn tc= new TableColumn(tableControl, SWT.NONE);
-		tc.setResizable(false);
 
-		tableControl.getAccessible().addAccessibleListener(new AccessibleAdapter() {
-			public void getName(AccessibleEvent e) {
-				e.result= RefactoringUIMessages.RefactoringStatusViewer_Found_problems;
-			}
-		});
+		SWTUtil.setAccessibilityText(tableControl, RefactoringUIMessages.RefactoringStatusViewer_Found_problems);
 	}
 
 	//---- Feed status entry into context viewer ---------------------------------------------------------
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringWizardDialog2.java b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringWizardDialog2.java
index 1cb771d..b4f3fa8 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringWizardDialog2.java
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/RefactoringWizardDialog2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,11 +35,11 @@ import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
 import org.eclipse.jface.dialogs.ControlEnableState;
-import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.DialogSettings;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.TrayDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.operation.ModalContext;
 import org.eclipse.jface.wizard.IWizardContainer;
@@ -48,7 +48,7 @@ import org.eclipse.jface.wizard.ProgressMonitorPart;
 
 import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
 
-public class RefactoringWizardDialog2 extends Dialog implements IWizardContainer {
+public class RefactoringWizardDialog2 extends TrayDialog implements IWizardContainer {
 
 	private RefactoringWizard fWizard;
 	private IWizardPage fCurrentPage;
@@ -165,6 +165,7 @@ public class RefactoringWizardDialog2 extends Dialog implements IWizardContainer
 			settings= RefactoringUIPlugin.getDefault().getDialogSettings();
 			wizard.setDialogSettings(settings);
 		}
+		setHelpAvailable((wizard.getWizardFlags() & RefactoringWizard.SHOW_HELP_CONTROL) != 0);
 		fWizard= wizard;
 		fWizard.setContainer(this);
 		fWizard.addPages();
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/history/RefactoringHistoryControl.java b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/history/RefactoringHistoryControl.java
index 5885473..3b6b946 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/history/RefactoringHistoryControl.java
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/history/RefactoringHistoryControl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,12 +18,9 @@ import java.util.Set;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.custom.CLabel;
 import org.eclipse.swt.custom.ViewForm;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -79,38 +76,6 @@ import org.eclipse.ltk.ui.refactoring.history.RefactoringHistoryLabelProvider;
  */
 public class RefactoringHistoryControl extends Composite implements IRefactoringHistoryControl {
 
-	/** Label for the refactoring history tree viewer */
-	protected final class RefactoringHistoryLabel extends CLabel {
-
-		/**
-		 * Creates a new refactoring history label.
-		 *
-		 * @param parent
-		 *            the parent control
-		 * @param style
-		 *            the style
-		 */
-		public RefactoringHistoryLabel(final Composite parent, final int style) {
-			super(parent, style);
-		}
-
-		/**
-		 * {@inheritDoc}
-		 */
-		public Point computeSize(final int wHint, final int hHint, final boolean changed) {
-			return super.computeSize(wHint, Math.max(24, hHint), changed);
-		}
-
-		/**
-		 * {@inheritDoc}
-		 */
-		public Color getForeground() {
-			if (isEnabled())
-				return super.getForeground();
-			return getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
-		}
-	}
-
 	/** Checkbox tree viewer for the refactoring history */
 	protected final class RefactoringHistoryTreeViewer extends CheckboxTreeViewer {
 
@@ -377,7 +342,6 @@ public class RefactoringHistoryControl extends Composite implements IRefactoring
 		layout.verticalSpacing= 2;
 		leftPane.setLayout(layout);
 		fHistoryPane= new CompareViewerPane(leftPane, SWT.BORDER | SWT.FLAT);
-		fHistoryPane.setTopLeft(new RefactoringHistoryLabel(fHistoryPane, SWT.NONE));
 		fHistoryPane.setText(getHistoryPaneText());
 		fHistoryPane.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));
 		fHistoryViewer= createHistoryViewer(fHistoryPane);
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/util/SWTUtil.java b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/util/SWTUtil.java
index c4f73b9..21db982 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/util/SWTUtil.java
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/util/SWTUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,12 @@
 package org.eclipse.ltk.internal.ui.refactoring.util;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.ACC;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Control;
 
 import org.eclipse.core.runtime.Assert;
 
@@ -42,6 +46,24 @@ public final class SWTUtil {
 		}
 	}
 
+	/**
+	 * Adds an accessibility listener returning the given fixed name.
+	 *
+	 * @param control the control to add the accessibility support to
+	 * @param text the name
+	 * 
+	 * @since 3.5.100
+	 */
+	public static void setAccessibilityText(Control control, final String text) {
+		control.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			public void getName(AccessibleEvent e) {
+				if (e.childID == ACC.CHILDID_SELF) {
+					e.result= text;
+				}
+			}
+		});
+	}
+	
 	private SWTUtil() {
 		// Not for instantiation
 	}
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizard.java b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizard.java
index 8b7a883..5240388 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizard.java
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,16 +134,27 @@ public abstract class RefactoringWizard extends Wizard {
 
 	/**
 	 * Flag (value 64) indicating that the dialog representing the refactoring
-	 * status to the user will not contain a back button. The flag
-	 * is ignored if the flag (@link #WIZARD_BASED_USER_INTERFACE}
+	 * status to the user will not contain a back button.
+	 * The flag is ignored if the flag {@link #WIZARD_BASED_USER_INTERFACE}
 	 * is specified.
 	 */
 	public static final int NO_BACK_BUTTON_ON_STATUS_DIALOG= 1 << 6;
 
-	private static final int LAST= 1 << 7;
+	/**
+	 * Flag (value 128) indicating that a help control should be shown.
+	 * The flag is ignored if the flag {@link #WIZARD_BASED_USER_INTERFACE}
+	 * is specified (the '?' button is always shown there).
+	 * 
+	 * @see org.eclipse.jface.dialogs.TrayDialog#setHelpAvailable(boolean)
+	 * 
+	 * @since 3.6
+	 */
+	public static final int SHOW_HELP_CONTROL= 1 << 7;
+	
+	private static final int LAST= 1 << 8;
 
-	private int fFlags;
-	private Refactoring fRefactoring;
+	private final int fFlags;
+	private final Refactoring fRefactoring;
 	private String fDefaultPageTitle;
 
 	private Change fChange;
@@ -194,6 +205,18 @@ public abstract class RefactoringWizard extends Wizard {
 	}
 
 	/**
+	 * Returns the refactoring wizard flags that have been set for this wizard.
+	 * Note that the set of valid flags may grow in the future.
+	 *
+	 * @return the wizard's flags
+	 * 
+	 * @since 3.6
+	 */
+	public final int getWizardFlags(){
+		return fFlags;
+	}
+	
+	/**
 	 * Sets the default page title to the given value. This value is used
 	 * as a page title for wizard pages which don't provide their own
 	 * page title. Setting this value has only an effect as long as the
@@ -289,6 +312,15 @@ public abstract class RefactoringWizard extends Wizard {
 	public final Change getChange() {
 		return fChange;
 	}
+	
+    /**
+	 * @param b {@inheritDoc}
+     * @deprecated {@link #WIZARD_BASED_USER_INTERFACE} always shows a '?' button.
+	 *  To show the button with {@link #DIALOG_BASED_USER_INTERFACE}, add the {@link #SHOW_HELP_CONTROL} flag.
+	 */
+	public void setHelpAvailable(boolean b) {
+		super.setHelpAvailable(b);
+	}
 
 	/**
 	 * Returns the status of the initial condition checking or <code>null</code>
diff --git a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizardOpenOperation.java b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizardOpenOperation.java
index 4401e42..3044fc8 100644
--- a/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizardOpenOperation.java
+++ b/eclipse/plugins/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/ui/refactoring/RefactoringWizardOpenOperation.java
@@ -39,6 +39,7 @@ import org.eclipse.ltk.internal.ui.refactoring.ExceptionHandler;
 import org.eclipse.ltk.internal.ui.refactoring.RefactoringUIMessages;
 import org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter;
 
+
 /**
  * A helper class to open a refactoring wizard dialog. The class first checks
  * the initial conditions of the refactoring and depending on its outcome
@@ -189,7 +190,7 @@ public class RefactoringWizardOpenOperation {
 				}
 			}
 		};
-		BusyIndicator.showWhile(parent.getDisplay(), r);
+		BusyIndicator.showWhile(parent != null ? parent.getDisplay() : null, r);
 		if (canceled[0] != null)
 			throw canceled[0];
 		return result[0];
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/.classpath b/eclipse/plugins/org.eclipse.osgi.jmx/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/.project b/eclipse/plugins/org.eclipse.osgi.jmx/.project
deleted file mode 100644
index 9005d9e..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.osgi.jmx</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.osgi.jmx/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index b4f3d12..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,309 +0,0 @@
-#Thu May 10 13:51:44 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.osgi.jmx/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 3f677eb..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:28:03 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.osgi.jmx/META-INF/MANIFEST.MF
deleted file mode 100644
index ccb0cdf..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,23 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring OSGi Extensions (Incubation)
-Bundle-SymbolicName: org.eclipse.osgi.jmx;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.osgi.jmx.internal.Activator
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Bundle-Vendor: Eclipse.org
-Import-Package: javax.management,
- org.eclipse.core.runtime; common=split,
- org.eclipse.equinox.jmx.common,
- org.eclipse.equinox.jmx.common.util,
- org.eclipse.equinox.jmx.server,
- org.eclipse.osgi.service.pluginconversion,
- org.eclipse.osgi.service.resolver,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.packageadmin,
- org.osgi.util.tracker
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/about.html b/eclipse/plugins/org.eclipse.osgi.jmx/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/build.properties b/eclipse/plugins/org.eclipse.osgi.jmx/build.properties
deleted file mode 100644
index b8f0ab6..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html,\
-               icons/
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle.gif
deleted file mode 100644
index f2ef78c..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle_provider.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle_provider.gif
deleted file mode 100644
index e9a6bd9..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle_provider.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle_service.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle_service.gif
deleted file mode 100644
index 6cb185c..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/bundle_service.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/component.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/component.gif
deleted file mode 100644
index a831fe7..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/component.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operation.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operation.gif
deleted file mode 100644
index 92075a8..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operation.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operation_none.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operation_none.gif
deleted file mode 100644
index 2d30266..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operation_none.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operations.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operations.gif
deleted file mode 100644
index 49f9a93..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/mbean_operations.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_active.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_active.gif
deleted file mode 100644
index 95f87ea..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_active.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_resolved.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_resolved.gif
deleted file mode 100644
index d6344db..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_resolved.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_stopped.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_stopped.gif
deleted file mode 100644
index 1683fca..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/bundles/ovr_bundle_stopped.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_reg_service.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_reg_service.gif
deleted file mode 100644
index 76ad5cf..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_reg_service.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_reg_service.png b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_reg_service.png
deleted file mode 100644
index c38bfce..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_reg_service.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_reg_service.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_reg_service.gif
deleted file mode 100644
index 6947605..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_reg_service.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_reg_service.png b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_reg_service.png
deleted file mode 100644
index 83f7b57..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_reg_service.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_service.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_service.gif
deleted file mode 100644
index aa526d3..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_service.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_service.png b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_service.png
deleted file mode 100644
index 17b5d74..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/bundle_use_service.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/service.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/service.gif
deleted file mode 100644
index a831fe7..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/service.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/service_provider.gif b/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/service_provider.gif
deleted file mode 100644
index 5ba5b91..0000000
Binary files a/eclipse/plugins/org.eclipse.osgi.jmx/icons/services/service_provider.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/plugin.xml b/eclipse/plugins/org.eclipse.osgi.jmx/plugin.xml
deleted file mode 100644
index 208b3ec..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/plugin.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension
-         point="org.eclipse.equinox.jmx.server.contribution">
-      <contribution
-            class="org.eclipse.osgi.jmx.internal.BundleContributionProvider"
-            isroot="true">
-         <extendsClass class="org.osgi.framework.ServiceReference"/>
-      </contribution>
-      <contribution
-            class="org.eclipse.osgi.jmx.internal.ServiceContributionProvider"
-            isroot="true">
-         <extendsClass class="org.osgi.framework.Bundle"/>
-      </contribution>
-      <contribution
-            class="org.eclipse.osgi.jmx.internal.BundleRequiresProvider"
-            isroot="false">
-         <extendsClass class="org.osgi.framework.Bundle"/>
-      </contribution>
-      <contribution
-            class="org.eclipse.osgi.jmx.internal.BundlePackagesProvider"
-            isroot="false">
-         <extendsClass class="org.osgi.framework.Bundle"/>
-      </contribution>
-   </extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/Activator.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/Activator.java
deleted file mode 100644
index eb91e22..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/Activator.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * The activator for this bundle.
- * 
- * @since 1.0
- */
-public class Activator implements BundleActivator {
-
-	private static BundleContext context;
-	private static ServiceTracker bundleTracker;
-
-	/**
-	 * The constructor.
-	 */
-	public Activator() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext bundleContext) throws Exception {
-		Activator.context = bundleContext;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext bundleContext) throws Exception {
-		if (bundleTracker != null) {
-			bundleTracker.close();
-			bundleTracker = null;
-		}
-		Activator.context = null;
-	}
-
-	/**
-	 * @return The bundle context.
-	 */
-	public static BundleContext getBundleContext() {
-		return context;
-	}
-
-	public static Bundle getBundle() {
-		return context.getBundle();
-	}
-
-	/**
-	 * Return the resolved bundle with the specified symbolic name.
-	 * 
-	 * @see PackageAdmin#getBundles(String, String)
-	 */
-	public static Bundle getBundle(String symbolicName) {
-		if (bundleTracker == null) {
-			bundleTracker = new ServiceTracker(getBundleContext(), PackageAdmin.class.getName(), null);
-			bundleTracker.open();
-		}
-		PackageAdmin admin = (PackageAdmin) bundleTracker.getService();
-		if (admin == null)
-			return null;
-		Bundle[] bundles = admin.getBundles(symbolicName, null);
-		if (bundles == null)
-			return null;
-		//Return the first bundle that is not installed or uninstalled
-		for (int i = 0; i < bundles.length; i++) {
-			if ((bundles[i].getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) {
-				return bundles[i];
-			}
-		}
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContribution.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContribution.java
deleted file mode 100644
index f7584fb..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContribution.java
+++ /dev/null
@@ -1,475 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.common.ContributionNotificationEvent;
-import org.eclipse.equinox.jmx.common.JMXConstants;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.osgi.framework.*;
-
-/**
- * A <code>BundleContribution</code> exposes a <code>Bundle</code> as a <code>Contribution</code>.
- * 
- * @since 1.0
- */
-public class BundleContribution extends Contribution implements BundleListener {
-	private static final long serialVersionUID = 1180032465513448129L;
-	private static final String BUNDLE_IMG_PATH = "icons/bundles/bundle.gif"; //$NON-NLS-1$
-	private static final Map stateStrings = new HashMap();
-	static {
-		stateStrings.put(new Integer(Bundle.ACTIVE), "ACTIVE"); //$NON-NLS-1$
-		stateStrings.put(new Integer(Bundle.INSTALLED), "INSTALLED"); //$NON-NLS-1$
-		stateStrings.put(new Integer(Bundle.RESOLVED), "RESOLVED"); //$NON-NLS-1$
-		stateStrings.put(new Integer(Bundle.STARTING), "STARTING"); //$NON-NLS-1$
-		stateStrings.put(new Integer(Bundle.STOPPING), "STOPPING"); //$NON-NLS-1$
-		stateStrings.put(new Integer(Bundle.UNINSTALLED), "UNINSTALLED"); //$NON-NLS-1$
-	}
-	private ServiceReference service;
-
-	/**
-	 * Allocate a <code>BundleContribution</code> from the <code>bundle</code> provided.
-	 * 
-	 * @param bundle The bundle to expose as a contribution.
-	 */
-	public BundleContribution(Bundle bundle) {
-		this(bundle, null);
-	}
-
-	/**
-	 * Allocate a <code>BundleContribution</code> from the <code>bundle</code> that
-	 * is associated with the <code>service</code> provided.
-	 * 
-	 * @param bundle The bundle to expose as a contribution.
-	 * @param service The service associated with this contribution.
-	 */
-	public BundleContribution(Bundle bundle, ServiceReference service) {
-		super(bundle);
-		this.bundle = bundle;
-		this.service = service;
-		setProperties(bundle);
-		Activator.getBundleContext().addBundleListener(this);
-	}
-
-    /* (non-Javadoc)
-     * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-     */
-    protected ObjectName getObjectName() {
-        try {
-            return new ObjectName(JMXConstants.DEFAULT_DOMAIN + ":type=Bundle,name=" + getName()); //$NON-NLS-1$
-        } catch (Exception e) {
-            return super.getObjectName();
-        }
-    }
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		Set ret = new TreeSet();
-		ret.add("Symbolic-name: " + symbolicName); //$NON-NLS-1$
-		ret.add("Bundle ID: " + Long.toString(id)); //$NON-NLS-1$
-		ret.add("Description: " + description); //$NON-NLS-1$
-		ret.add("State: " + (String) stateStrings.get(new Integer(getState()))); //$NON-NLS-1$
-		ret.add("Vendor: " + vendor); //$NON-NLS-1$
-		ret.add("Contact Address: " + contactAddress); //$NON-NLS-1$
-		ret.add("Location: " + location); //$NON-NLS-1$
-		ret.add("DocURL: " + docURL); //$NON-NLS-1$
-		return ret;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		String imgPath = BUNDLE_IMG_PATH;
-		if (service != null) {
-			// check if we are a providing this bundle
-			if (service.getBundle() == bundle) {
-				imgPath = ServiceContribution.IMG_REG_SERVICE_PATH;
-				// check if we are also using this bundle
-				Bundle[] usingBundles = service.getUsingBundles();
-				if (usingBundles != null) {
-					for (int i = 0; i < usingBundles.length; i++) {
-						if (usingBundles[i] == bundle) {
-							imgPath = ServiceContribution.IMG_USE_REG_SERVICE_PATH;
-							break;
-						}
-					}
-				}
-			} else {
-				// bundle is merely a consumer of this service
-				imgPath = ServiceContribution.IMG_USE_SERVICE_PATH;
-			}
-		}
-		return FileLocator.find(Activator.getBundle(), new Path(imgPath), null);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		if (args.length == 0 && argTypes.length == 0) {
-			try {
-				if (operationName.equals("start")) { //$NON-NLS-1$
-					bundle.start();
-				} else if (operationName.equals("stop")) { //$NON-NLS-1$
-					bundle.stop();
-				} else if (operationName.equals("uninstall")) { //$NON-NLS-1$
-					bundle.uninstall();
-					//BundleContributionProvider.refreshPackages(new Bundle[] {bundle});
-				}
-			} catch (Exception e) {
-				return e.getMessage();
-			}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleListener#bundleChanged(org.osgi.framework.BundleEvent)
-	 */
-	public void bundleChanged(BundleEvent event) {
-		Bundle b = (Bundle) event.getSource();
-		if (b != bundle && event.getType() != getState()) {
-			return;
-		}
-		setProperties(bundle);
-		ContributionNotificationEvent cEvent = null;
-		switch (event.getType()) {
-			case BundleEvent.UNINSTALLED :
-				cEvent = new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_REMOVED);
-				break;
-			case BundleEvent.STARTED :
-			case BundleEvent.STOPPED :
-				cEvent = new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_UPDATED);
-				break;
-			default :
-				return;
-		}
-		super.contributionStateChanged(cEvent);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	public String getName() {
-		return symbolicName + "-" + version; //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	public MBeanInfo getMBeanInfo(Object delegate) {
-		MBeanInfo info = new MBeanInfo(getClass().getName(), BundleContributionMessages.bundle_description, getAttributes(), getConstructorInfo(), getOperationInfo(), getNotificationInfo());
-		return info;
-	}
-
-	/**
-	 * Returns the <code>contactAddress</code> for this bundle, or <code>null</code> if one doesn't exist.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @return The <code>contactAddress</code> of a specific bundle
-	 */
-	public String getContactAddress() {
-		return contactAddress;
-	}
-
-	/**
-	 * Sets the <code>contactAddress</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders() 
-	 * @param contactAddress is a <code>String<code> which specifying the <code>contactAddress</code> of a specific bundle
-	 */
-	public void setContactAddress(String contactAddress) {
-		this.contactAddress = contactAddress;
-	}
-
-	/**
-	 * Returns the <code>description</code> for this bundle, or null if one doesn't exist.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @return The <code>description</code> of a specific bundle
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * Sets the <code>description</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @param description is a <code>String</code> which specifying the <code>description</code> of a specific bundle
-	 */
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	/**
-	 * Returns the <code>dorURL</code> for this bundles, or <code>null</code> if one doesn't exist.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @return The <code>dorURL</code> of a specific bundle
-	 */
-	public String getDocURL() {
-		return docURL;
-	}
-
-	/**
-	 * Sets the <code>docURL</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders() 
-	 * @param docURL is a <code>String</code> which specifying the <code>DocURL</code> of a specific bundle
-	 */
-	public void setDocURL(String docURL) {
-		this.docURL = docURL;
-	}
-
-	/**
-	 * Returns the identifier for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getBundleId()
-	 * @return The <code>id</code> is a unique identifier of a specific bundle
-	 */
-	public long getId() {
-		return id;
-	}
-
-	/**
-	 * Sets the bundle's identifier for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getBundleId()
-	 * @param id is a <code>long<code> that specifying the identifier of a specific bundle
-	 * @exception <code>IllegalArgumentException</code> if input id smaller than 0
-	 */
-	public void setId(long id) throws IllegalArgumentException {
-		Assert.isLegal(id >= 0);
-		this.id = id;
-	}
-
-	/**
-	 * Returns the date when this bundle was last modified.
-	 * 
-	 * @see org.osgi.framework.Bundle#getLastModified()
-	 * @return The <code>lastModified</code> which indicates when this bundle was last modified
-	 */
-	public long getLastModified() {
-		return lastModified;
-	}
-
-	/**
-	 * Sets the time when this bundle was last modified.
-	 * 
-	 * @see org.osgi.framework.Bundle#getLastModified()
-	 * @param lastModified the bundle's last modified time
-	 */
-	public void setLastModified(long lastModified) {
-		this.lastModified = lastModified;
-	}
-
-	/**
-	 * Returns the <code>location</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getLocation()
-	 * @return The <code>location</code> of a specific bundle
-	 */
-	public String getLocation() {
-		return location;
-	}
-
-	/**
-	 * Sets the <code>location</code> of a specific bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getLocation()
-	 * @param location is a <code>String<code> which specifying the <code>location</code> 
-	 *        of a specific bundle
-	 * @exception IllegalArgumentException if <code>location<code> is null or empty string
-	 */
-	public void setLocation(String location) throws IllegalArgumentException {
-		Assert.isLegal(location != null && !location.equals("")); //$NON-NLS-1$
-		this.location = location;
-	}
-
-	/**
-	 * Return the <code>state</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getState()
-	 * @return The current <code>state</code> of a specific bundle
-	 */
-	public int getState() {
-		return state;
-	}
-
-	/**
-	 * Sets the <code>state</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getState()
-	 * @param state is a <code>int</code> which specifying the <code>state</code> of a specific bundle
-	 */
-	public void setState(int state) {
-		this.state = state;
-	}
-
-	/**
-	 * Returns the </code>symbolicName</code> for this bundle, or <code>null</code> if one doesn't exist.
-	 * 
-	 * @see org.osgi.framework.Bundle#getSymbolicName()
-	 * @return The symbolic name of a specific bundle
-	 */
-	public String getSymbolicName() {
-		return symbolicName;
-	}
-
-	/**
-	 * Sets the </code>symbolicName</code> of for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getSymbolicName()
-	 * @param symbolicName is a <code>String</code> which specifying the <code>symbolicName<code> of a specific bundle
-	 */
-	public void setSymbolicName(String symbolicName) {
-		this.symbolicName = symbolicName;
-	}
-
-	/**
-	 * Returns the <code>vendor</code> for this bundle, or <code>null</code> if one doesn't exist.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @return The <code>vendor</code> of a specific bundle
-	 */
-	public String getVendor() {
-		return vendor;
-	}
-
-	/**
-	 * Sets the <code>vendor</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @param vendor specifying the vendor for the bundle.
-	 */
-	public void setVendor(String vendor) {
-		this.vendor = vendor;
-	}
-
-	/**
-	 * Returns the <code>version</code> for this bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @return version of a specific bundle
-	 */
-	public Version getVersion() {
-		return version;
-	}
-
-	/**
-	 * Sets the <code>version</code> of a specific bundle.
-	 * 
-	 * @see org.osgi.framework.Bundle#getHeaders()
-	 * @param version is a <code>Version</code> that specifying the <code>version</code> for a specific bundle
-	 * @exception <code>IllegalArgumentException</code> if given version is <code>null</code> 
-	 */
-	public void setVersion(Version version) throws IllegalArgumentException {
-		Assert.isLegal(version != null);
-		this.version = version;
-	}
-
-	private MBeanAttributeInfo[] getAttributes() {
-		MBeanAttributeInfo[] ret = new MBeanAttributeInfo[0];
-		return ret;
-	}
-
-	private MBeanConstructorInfo[] getConstructorInfo() {
-		MBeanConstructorInfo[] ret = new MBeanConstructorInfo[0];
-		return ret;
-	}
-
-	private MBeanOperationInfo[] getOperationInfo() {
-		if (BundleContributionProvider.isPluginDependency(bundle)) {
-			// expose no operations
-			return new MBeanOperationInfo[0];
-		}
-		return new MBeanOperationInfo[] {createStartOperation(), createStopOperation(), createUninstallOperation()};
-	}
-
-	private void setProperties(Bundle bundle) {
-		setContactAddress((String) bundle.getHeaders().get("Bundle-ContactAddress")); //$NON-NLS-1$
-		setDescription((String) bundle.getHeaders().get("Bundle-Description")); //$NON-NLS-1$
-		setDocURL((String) bundle.getHeaders().get("Bundle-DocURL")); //$NON-NLS-1$
-		setId(bundle.getBundleId());
-		setLastModified(bundle.getLastModified());
-		setLocation(bundle.getLocation());
-		setState(bundle.getState());
-		setSymbolicName(bundle.getSymbolicName());
-		setVendor((String) bundle.getHeaders().get("Bundle-Vendor")); //$NON-NLS-1$
-		setVersion(new Version((String) bundle.getHeaders().get("Bundle-Version"))); //$NON-NLS-1$
-	}
-
-	private static MBeanOperationInfo createStartOperation() {
-		return new MBeanOperationInfo("start", BundleContributionMessages.start_operation_desc, new MBeanParameterInfo[0], Void.TYPE.getName(), 0);//$NON-NLS-1$
-	}
-
-	private static MBeanOperationInfo createStopOperation() {
-		return new MBeanOperationInfo("stop", BundleContributionMessages.stop_operation_desc, new MBeanParameterInfo[0], Void.TYPE.getName(), 0); //$NON-NLS-1$
-	}
-
-	private static MBeanOperationInfo createUninstallOperation() {
-		return new MBeanOperationInfo("uninstall", BundleContributionMessages.stop_operation_desc, new MBeanParameterInfo[0], Void.TYPE.getName(), 0); //$NON-NLS-1$
-	}
-
-	private long id;
-	private long lastModified;
-	private int state;
-	private Version version;
-	private String symbolicName;
-	private String vendor;
-	private String description;
-	private String docURL;
-	private String contactAddress;
-	private String location;
-	private Bundle bundle;
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionMessages.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionMessages.java
deleted file mode 100644
index eff2b32..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionMessages.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public class BundleContributionMessages extends NLS {
-
-	public static String bundle_contribution_name;
-	public static String service_bundle_contribution_name;
-	public static String bundle_description;
-	public static String start_operation_desc;
-	public static String stop_operation_desc;
-	public static String install_operation_desc;
-	public static String uninstall_operation_desc;
-	public static String bundle_url_desc;
-	public static String excep_null_install_url;
-
-	private BundleContributionMessages() {
-		// disallow instantiations
-	}
-
-	static {
-		NLS.initializeMessages(BundleContributionMessages.class.getName(), BundleContributionMessages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionMessages.properties b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionMessages.properties
deleted file mode 100644
index 80ec309..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionMessages.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-bundle_contribution_name = Bundles
-service_bundle_contribution_name = Bundles [ Service: {0} ]
-bundle_description = Eclipse OSGI Bundle
-start_operation_desc = Start the bundle.
-stop_operation_desc = Stop the bundle.
-install_operation_desc = Install bundle.
-uninstall_operation_desc = Uninstall the bundle.
-bundle_url_desc = Bundle location.
-excep_null_install_url = Expected non-null install url.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionProvider.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionProvider.java
deleted file mode 100644
index 647b7c4..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleContributionProvider.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.jmx.common.ContributionNotificationEvent;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-/**
- * @since 1.0
- */
-public class BundleContributionProvider extends ContributionProvider implements BundleListener {
-
-	private static final long serialVersionUID = -8497760387909218802L;
-	private static final String BUNDLE_IMG_PATH = "icons/bundles/bundle.gif"; //$NON-NLS-1$
-	private static Set serverPluginDependencies;
-	private ServiceReference serviceReference;
-
-	/**
-	 * Default constructor.
-	 */
-	public BundleContributionProvider() {
-		this(null);
-	}
-
-	public BundleContributionProvider(ServiceReference serviceReference) {
-		this.serviceReference = serviceReference;
-		if (serverPluginDependencies == null) {
-			try {
-				serverPluginDependencies = BundleUtils.computeDependencies(Activator.getBundle(), Activator.getBundleContext());
-			} catch (Exception e) {
-				e.printStackTrace();
-				throw new RuntimeException(e.getMessage());
-			}
-		}
-	}
-
-	public static boolean isPluginDependency(Bundle bundle) {
-		Assert.isNotNull(serverPluginDependencies);
-		Iterator iter = serverPluginDependencies.iterator();
-		while (iter.hasNext()) {
-			String name = (String) iter.next();
-			if (null != bundle.getSymbolicName() && bundle.getSymbolicName().equals(name)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return obj instanceof ServiceReference;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#isProviderForType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof Bundle;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return providesType(obj) ? new BundleContributionProvider((ServiceReference) obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) throws MalformedObjectNameException, NullPointerException {
-		// if this service provider is associated with a bundle, we wrap the service contribution in a specialized type to display bundle associated information
-		if (contributesType(obj)) {
-			if (serviceReference != null) {
-				return new BundleContribution((Bundle) obj, serviceReference);
-			}
-			return new BundleContribution((Bundle) obj);
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	public Object[] getChildren() {
-		Set result = null;
-		if (serviceReference != null) {
-			result = new TreeSet();
-			Object[] usingBundles = serviceReference.getUsingBundles();
-			if (usingBundles != null) {
-				for (int i = 0; i < usingBundles.length; i++) {
-					result.add(usingBundles[i]);
-				}
-			}
-			// add service provider bundle
-			result.add(serviceReference.getBundle());
-		}
-		return result == null ? Activator.getBundleContext().getBundles() : result.toArray();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	public String getName() {
-		return serviceReference == null ? BundleContributionMessages.bundle_contribution_name : NLS.bind(BundleContributionMessages.service_bundle_contribution_name, ServiceContribution.getServiceReferenceName(serviceReference));
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	public Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getBundle(), new Path(BUNDLE_IMG_PATH), null);
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String arg0) throws AttributeNotFoundException, MBeanException, ReflectionException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute arg0) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#getMBeanInfo(java.lang.Object)
-	 */
-	public MBeanInfo getMBeanInfo(Object delegate) {
-		return new MBeanInfo(getClass().getName(), null, null, null, new MBeanOperationInfo[] {createInstallOperation()}, null);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	public Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		if (operationName.equals("install") && args.length == 1 && argTypes.length == 1 && args[0] instanceof String) { //$NON-NLS-1$
-			String installUrl = (String) args[0];
-			try {
-				Bundle bundle = Activator.getBundleContext().installBundle(installUrl);
-				refreshPackages(new Bundle[] {bundle});
-			} catch (BundleException e) {
-				return e.getMessage();
-			}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleListener#bundleChanged(org.osgi.framework.BundleEvent)
-	 */
-	public void bundleChanged(BundleEvent event) {
-		switch (event.getType()) {
-			case BundleEvent.INSTALLED :
-				super.contributionStateChanged(new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_ADDED));
-				return;
-		}
-	}
-
-	public static void refreshPackages(Bundle[] bundles) {
-		if (bundles.length == 0) {
-			return;
-		}
-		BundleContext context = Activator.getBundleContext();
-		ServiceReference packageAdminRef = context.getServiceReference(PackageAdmin.class.getName());
-		PackageAdmin packageAdmin = null;
-		if (packageAdminRef != null) {
-			packageAdmin = (PackageAdmin) context.getService(packageAdminRef);
-			if (packageAdmin == null) {
-				return;
-			}
-		}
-		packageAdmin.refreshPackages(bundles);
-		context.ungetService(packageAdminRef);
-	}
-
-	private static MBeanOperationInfo createInstallOperation() {
-		return new MBeanOperationInfo("install", BundleContributionMessages.install_operation_desc, new MBeanParameterInfo[] {new MBeanParameterInfo("bundleURLAsString", String.class.getName(), BundleContributionMessages.bundle_url_desc)}, Void.TYPE.getName(), 0); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleMessages.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleMessages.java
deleted file mode 100644
index 8d41faf..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleMessages.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-public class BundleMessages extends NLS {
-
-	public static String requires_name;
-	public static String packages_name;
-
-	private BundleMessages() {
-		// disallow instantiations
-	}
-
-	static {
-		NLS.initializeMessages(BundleMessages.class.getName(), BundleMessages.class);
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleMessages.properties b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleMessages.properties
deleted file mode 100644
index 63d2a33..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleMessages.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-requires_name = Required Bundles
-packages_name = Imported Packages
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundlePackagesProvider.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundlePackagesProvider.java
deleted file mode 100644
index bd9e6fe..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundlePackagesProvider.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import java.net.URL;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.osgi.service.resolver.ImportPackageSpecification;
-import org.osgi.framework.Bundle;
-
-/**
- * @since 1.0
- */
-public class BundlePackagesProvider extends ContributionProvider {
-
-	// the bundle being provided for
-	private Bundle bundle;
-
-	/**
-	 * Default Constructor.
-	 */
-	public BundlePackagesProvider() {
-		this(null);
-	}
-
-	/**
-	 * Constructor specifying the bundle which this provider is associated with.
-	 * 
-	 * @param bundle The providers associated bundle.
-	 */
-	public BundlePackagesProvider(Bundle bundle) {
-		this.bundle = bundle;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof ImportPackageSpecification;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) throws MalformedObjectNameException {
-		return contributesType(obj) ? new Contribution(obj) {
-
-			/* (non-Javadoc)
-			 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-			 */
-			protected Object[] getChildren() {
-				return null;
-			}
-
-			/* (non-Javadoc)
-			 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-			 */
-			protected URL getImageLocation() {
-				return null;
-			}
-
-			/* (non-Javadoc)
-			 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-			 */
-			protected MBeanInfo getMBeanInfo(Object contributionDelegate) {
-				return null;
-			}
-
-			/* (non-Javadoc)
-			 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-			 */
-			protected String getName() {
-				return contributionDelegate.toString();
-			}
-
-			/* (non-Javadoc)
-			 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-			 */
-			protected Set getProperties() {
-				return null;
-			}
-
-			/* (non-Javadoc)
-			 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-			 */
-			protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-				return null;
-			}
-
-			/* (non-Javadoc)
-			 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-			 */
-			public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException {
-				return null;
-			}
-
-			/* (non-Javadoc)
-			 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-			 */
-			public AttributeList getAttributes(String[] attributes) {
-				return null;
-			}
-
-			/* (non-Javadoc)
-			 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-			 */
-			public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-
-			}
-
-			/* (non-Javadoc)
-			 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-			 */
-			public AttributeList setAttributes(AttributeList attributes) {
-				return null;
-			}
-		} : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return providesType(obj) ? new BundlePackagesProvider((Bundle) obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return obj instanceof Bundle;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		Object[] ret = null;
-		if (bundle != null) {
-			try {
-				BundleDescription desc = BundleUtils.getBundleDescription(bundle, Activator.getBundleContext());
-				return desc.getImportPackages();
-			} catch (Exception e) {
-			}
-		}
-		return ret;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return BundleMessages.packages_name;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleRequiresProvider.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleRequiresProvider.java
deleted file mode 100644
index 7f5f63d..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleRequiresProvider.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import java.net.URL;
-import java.util.*;
-import javax.management.*;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.osgi.service.resolver.BundleSpecification;
-import org.osgi.framework.Bundle;
-
-/**
- * @since 1.0
- */
-public class BundleRequiresProvider extends ContributionProvider {
-
-	// the bundle being provided for
-	private Bundle bundle;
-
-	/**
-	 * Default Constructor.
-	 */
-	public BundleRequiresProvider() {
-		this(null);
-	}
-
-	/**
-	 * Constructor specifying the bundle which this provider is associated with.
-	 * 
-	 * @param bundle The providers associated bundle.
-	 */
-	public BundleRequiresProvider(Bundle bundle) {
-		this.bundle = bundle;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof BundleSpecification;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) throws MalformedObjectNameException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return providesType(obj) ? new BundleRequiresProvider((Bundle) obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return obj instanceof Bundle;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		if (bundle == null)
-			return new Object[0];
-		List result = new ArrayList();
-		try {
-			BundleDescription desc = BundleUtils.getBundleDescription(bundle, Activator.getBundleContext());
-			BundleSpecification[] specs = desc.getRequiredBundles();
-			for (int i = 0; i < specs.length; i++)
-				result.add(Activator.getBundle(specs[i].getName()));
-		} catch (Exception e) {
-		}
-		return result.toArray(new Object[result.size()]);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return BundleMessages.requires_name;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleUtils.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleUtils.java
deleted file mode 100644
index da5e7a5..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/BundleUtils.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import java.io.*;
-import java.net.URL;
-import java.util.*;
-import java.util.jar.*;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.service.pluginconversion.PluginConversionException;
-import org.eclipse.osgi.service.pluginconversion.PluginConverter;
-import org.eclipse.osgi.service.resolver.*;
-import org.osgi.framework.*;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class BundleUtils {
-
-	public static Set computeDependencies(Bundle bundle, BundleContext bundleContext) throws PluginConversionException, CoreException, IOException {
-		Map disjointSets = new HashMap();
-
-		Bundle[] installedBundles = bundleContext.getBundles();
-		for (int i = 0; i < installedBundles.length; i++) {
-			BundleDescription desc = getBundleDescription(installedBundles[i], bundleContext);
-			if (desc == null) {
-				continue;
-			}
-			// add bundle to map with initial empty dependency list
-			List descDeps = new ArrayList();
-			disjointSets.put(desc.getName(), descDeps);
-			BundleSpecification[] specs = desc.getRequiredBundles();
-			for (int j = 0; j < specs.length; j++) {
-				descDeps.add(specs[j].getName());
-			}
-		}
-		Set bundleDeps = new HashSet();
-		BundleDescription rootDesc = getBundleDescription(bundle, bundleContext);
-		BundleSpecification[] rootSpecs = rootDesc.getRequiredBundles();
-		for (int i = 0; i < rootSpecs.length; i++) {
-			bundleDeps.add(rootSpecs[i].getName());
-			List specDeps = (List) disjointSets.get(rootSpecs[i].getName());
-			if (specDeps == null) {
-				continue;
-			}
-			mergeDependencies(bundleDeps, specDeps, disjointSets);
-		}
-		return bundleDeps;
-	}
-
-	private static void mergeDependencies(Set bundleDeps, List deps, Map disjointSets) {
-		if (deps != null) {
-			// merge dependencies
-			bundleDeps.addAll(deps);
-			Iterator iter = deps.iterator();
-			while (iter.hasNext()) {
-				String name = (String) iter.next();
-				mergeDependencies(bundleDeps, (List) disjointSets.get(name), disjointSets);
-			}
-		}
-	}
-
-	public static BundleDescription getBundleDescription(Bundle bundle, BundleContext bundleContext) throws PluginConversionException, CoreException, IOException {
-		String bundleRootLoc = getBundleRoot(bundle);
-		//FIXME hack for loading jar files
-		int protoIdx = bundleRootLoc.indexOf("file:"); //$NON-NLS-1$
-		bundleRootLoc = bundleRootLoc.substring(protoIdx == -1 ? 0 : protoIdx + 5);
-		if (bundleRootLoc.endsWith("jar!/")) { //$NON-NLS-1$
-			bundleRootLoc = bundleRootLoc.substring(0, bundleRootLoc.length() - 2);
-		}
-		File bundleLocation = new File(bundleRootLoc);
-		Dictionary manifest = loadManifest(bundleLocation);
-		long bundleId = bundle.getBundleId();
-		boolean hasBundleStructure = manifest != null && manifest.get(Constants.BUNDLE_SYMBOLICNAME) != null;
-		if (!hasBundleStructure) {
-			if (!bundleLocation.isFile() && !new File(bundleLocation, "plugin.xml").exists() //$NON-NLS-1$
-					&& !new File(bundleLocation, "fragment.xml").exists()) { //$NON-NLS-1$
-				return null;
-			}
-			PluginConverter converter = acquirePluginConverter(bundleContext);
-			manifest = converter.convertManifest(bundleLocation, false, null, false, null);
-			if (manifest == null || Constants.BUNDLE_SYMBOLICNAME == null) {
-				return null;
-			}
-		}
-		try {
-			return getBundleDescription(manifest, bundleLocation, bundleId);
-		} catch (BundleException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	public static String getBundleRoot(Bundle bundle) throws IOException {
-		URL url = FileLocator.find(bundle, new Path("/"), null); //$NON-NLS-1$
-		URL resolvedUrl = FileLocator.resolve(url);
-		return resolvedUrl.getPath();
-	}
-
-	public static BundleDescription getBundleDescription(Dictionary manifest, File bundleLocation, long bundleId) throws BundleException {
-		BundleContext context = Activator.getBundleContext();
-		ServiceReference platformAdminReference = context.getServiceReference(PlatformAdmin.class.getName());
-		if (platformAdminReference == null)
-			return null;
-		PlatformAdmin admin = (PlatformAdmin) context.getService(platformAdminReference);
-		StateObjectFactory stateObjectFactory = admin.getFactory();
-
-		State state = stateObjectFactory.createState(false);
-		BundleDescription descriptor = stateObjectFactory.createBundleDescription(state, manifest, bundleLocation.getAbsolutePath(), bundleId);
-		context.ungetService(platformAdminReference);
-		return descriptor;
-	}
-
-	public static Dictionary loadManifest(File bundleLocation) throws IOException {
-		ZipFile jarFile = null;
-		InputStream manifestStream = null;
-		try {
-			String extension = new Path(bundleLocation.getName()).getFileExtension();
-			bundleLocation = new File(bundleLocation.getAbsolutePath());
-			if (extension != null && (extension.equals("jar") || extension.equals("jar!")) && bundleLocation.isFile()) { //$NON-NLS-1$ //$NON-NLS-2$
-				jarFile = new ZipFile(bundleLocation, ZipFile.OPEN_READ);
-				ZipEntry manifestEntry = jarFile.getEntry(JarFile.MANIFEST_NAME);
-				if (manifestEntry != null) {
-					manifestStream = jarFile.getInputStream(manifestEntry);
-				}
-			} else {
-				File file = new File(bundleLocation, JarFile.MANIFEST_NAME);
-				if (file.exists())
-					manifestStream = new FileInputStream(file);
-			}
-		} catch (IOException e) {
-		}
-		if (manifestStream == null)
-			return null;
-		try {
-			Manifest m = new Manifest(manifestStream);
-			return manifestToProperties(m.getMainAttributes());
-		} finally {
-			try {
-				manifestStream.close();
-			} catch (IOException e1) {
-			}
-			try {
-				if (jarFile != null)
-					jarFile.close();
-			} catch (IOException e2) {
-			}
-		}
-	}
-
-	public static Properties manifestToProperties(Attributes d) {
-		Iterator iter = d.keySet().iterator();
-		Properties result = new Properties();
-		while (iter.hasNext()) {
-			Attributes.Name key = (Attributes.Name) iter.next();
-			result.put(key.toString(), d.get(key));
-		}
-		return result;
-	}
-
-	public static PluginConverter acquirePluginConverter(BundleContext bundleContext) {
-		ServiceTracker tracker = new ServiceTracker(bundleContext, PluginConverter.class.getName(), null);
-		tracker.open();
-		PluginConverter converter = (PluginConverter) tracker.getService();
-		tracker.close();
-		return converter;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContribution.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContribution.java
deleted file mode 100644
index 7754669..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContribution.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * 	Jeff Mesnil - Bug 151266 - [monitoring] Browsing our server in jconsole is really unfriendly
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.equinox.jmx.common.ContributionNotificationEvent;
-import org.eclipse.equinox.jmx.common.util.MBeanInfoWrapper;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.osgi.framework.*;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * @since 1.0
- */
-public class ServiceContribution extends Contribution implements ServiceListener {
-
-	static final String IMG_REG_SERVICE_PATH = "icons/services/bundle_reg_service.png"; //$NON-NLS-1$
-	static final String IMG_USE_REG_SERVICE_PATH = "icons/services/bundle_use_reg_service.png"; //$NON-NLS-1$
-	static final String IMG_USE_SERVICE_PATH = "icons/services/bundle_use_service.png"; //$NON-NLS-1$
-
-	private static final String IMG_SERVICE_PATH = "icons/services/service.gif"; //$NON-NLS-1$
-
-	private final MBeanInfo mbeanInfo;
-	private final ServiceReference serviceDelegate;
-	private final Bundle bundle;
-	private Class serviceDelegateImplClass;
-
-	public ServiceContribution(ServiceReference serviceDelegate) {
-		this(serviceDelegate, null);
-	}
-
-	public ServiceContribution(ServiceReference serviceDelegate, Bundle bundle) {
-		super(serviceDelegate);
-		if (serviceDelegate == null) {
-			throw new IllegalArgumentException();
-		}
-		this.serviceDelegate = serviceDelegate;
-		this.bundle = bundle;
-		try {
-			serviceDelegateImplClass = getClass().getClassLoader().loadClass(getName());
-		} catch (ClassNotFoundException e) {
-			serviceDelegateImplClass = serviceDelegate.getClass();
-		}
-		mbeanInfo = MBeanInfoWrapper.createMBeanInfo(serviceDelegateImplClass, ServiceContributionMessages.service_contribution_name, new MBeanAttributeInfo[0], new MBeanNotificationInfo[0]);
-		Activator.getBundleContext().addServiceListener(this);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getObjectName()
-	 */
-	protected ObjectName getObjectName() {
-		try {
-			return new ObjectName("jmxserver:type=Service,name=" + getName()); //$NON-NLS-1$
-		} catch (Exception e) {
-			return super.getObjectName();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return ServiceContribution.getServiceReferenceName(serviceDelegate);
-
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		Set ret = new HashSet();
-		String[] propKeys = serviceDelegate.getPropertyKeys();
-		for (int i = 0; i < propKeys.length; i++) {
-			ret.add(propKeys[i] + ":" + serviceDelegate.getProperty(propKeys[i]).toString()); //$NON-NLS-1$
-		}
-		return ret;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		String imgPath = IMG_SERVICE_PATH;
-		if (bundle != null) {
-			boolean isUsingService = false, hasRegisteredService = false;
-			ServiceReference[] servicesInUse = bundle.getServicesInUse();
-			for (int i = 0; i < servicesInUse.length; i++) {
-				if (serviceDelegate == servicesInUse[i]) {
-					isUsingService = true;
-				}
-			}
-			ServiceReference[] registeredServices = bundle.getRegisteredServices();
-			for (int i = 0; i < registeredServices.length; i++) {
-				if (serviceDelegate == registeredServices[i]) {
-					hasRegisteredService = true;
-				}
-			}
-			if (isUsingService || hasRegisteredService) {
-				if (isUsingService && hasRegisteredService) {
-					imgPath = IMG_USE_REG_SERVICE_PATH;
-				} else if (isUsingService) {
-					imgPath = IMG_USE_SERVICE_PATH;
-				} else {
-					imgPath = IMG_REG_SERVICE_PATH;
-				}
-			}
-		}
-		return FileLocator.find(Activator.getBundle(), new Path(imgPath), null);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		Object[] ret = null;
-		if (serviceDelegate.getUsingBundles() != null) {
-			ret = new Object[serviceDelegate.getUsingBundles().length + 1];
-			System.arraycopy(serviceDelegate.getUsingBundles(), 0, ret, 0, serviceDelegate.getUsingBundles().length);
-		} else {
-			ret = new Object[1];
-		}
-		System.arraycopy(new Object[] {serviceDelegate.getBundle()}, 0, ret, (serviceDelegate.getUsingBundles() == null ? 0 : serviceDelegate.getUsingBundles().length), 1);
-		return ret;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		Object ret = null;
-		// determine if bundle has registered the exposed service
-		BundleContext context = Activator.getBundleContext();
-		if (context != null) {
-			// attempt to locate service
-			ServiceTracker st = new ServiceTracker(context, serviceDelegate, null);
-			st.open();
-			Object serviceImpl = st.getService(serviceDelegate);
-			if (serviceImpl != null) {
-				try {
-					Method[] methods = serviceImpl.getClass().getMethods();
-					for (int i = 0; i < methods.length; i++) {
-						if (methods[i].getName().equals(operationName)) {
-							ret = methods[i].invoke(serviceImpl, args);
-							break;
-						}
-					}
-				} catch (Exception e) {
-					ret = e.getMessage();
-				}
-				st.close();
-				st = null;
-			}
-		} else {
-			// bundle which contains service has not been started
-			ret = new String(ServiceContributionMessages.controlling_bundle_stopped);
-		}
-		return ret;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	public MBeanInfo getMBeanInfo(Object delegate) {
-		return mbeanInfo;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
-	 */
-	public void serviceChanged(ServiceEvent event) {
-		if (serviceDelegate != event.getServiceReference()) {
-			return;
-		}
-		ContributionNotificationEvent cEvent = null;
-		switch (event.getType()) {
-			case ServiceEvent.MODIFIED :
-				cEvent = new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_UPDATED);
-				break;
-			case ServiceEvent.UNREGISTERING :
-				cEvent = new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_REMOVED);
-				break;
-			default :
-				return;
-		}
-		super.contributionStateChanged(cEvent);
-	}
-
-	public static String getServiceReferenceName(ServiceReference serviceReference) {
-		Object prop = serviceReference.getProperty("objectClass"); //$NON-NLS-1$
-		if (prop instanceof String[]) {
-			String[] props = (String[]) prop;
-			if (props.length == 1) {
-				return props[0];
-			}
-		}
-		return serviceReference.toString();
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionMessages.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionMessages.java
deleted file mode 100644
index ffe32f0..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionMessages.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-/**
- * @since 1.0
- */
-public class ServiceContributionMessages extends NLS {
-
-	public static String service_contribution_name;
-	public static String bundle_service_contribution_name;
-	public static String bundleservice_contribution_name;
-	public static String controlling_bundle_stopped;
-
-	private ServiceContributionMessages() {
-		// disallow instantiations
-	}
-
-	static {
-		NLS.initializeMessages(ServiceContributionMessages.class.getName(), ServiceContributionMessages.class);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionMessages.properties b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionMessages.properties
deleted file mode 100644
index 38c64e5..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionMessages.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-service_contribution_name = Services
-bundle_service_contribution_name = Services [ Bundle: {0} ]
-bundleservice_contribution_name = Dependent Services
-controlling_bundle_stopped = Controlling bundle stopped.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionProvider.java b/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionProvider.java
deleted file mode 100644
index 455edca..0000000
--- a/eclipse/plugins/org.eclipse.osgi.jmx/src/org/eclipse/osgi/jmx/internal/ServiceContributionProvider.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osgi.jmx.internal;
-
-import java.net.URL;
-import java.util.HashSet;
-import java.util.Set;
-import javax.management.*;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-
-/**
- * Eclipse service contribution provider.  Determines the available services
- * and exports supported services for remote inspection.  
- *  
- * @since 1.0
- */
-public class ServiceContributionProvider extends ContributionProvider {
-
-	private static final String SERVICE_IMG_PATH = "icons/services/service.gif"; //$NON-NLS-1$
-
-	private Bundle bundle;
-
-	public ServiceContributionProvider() {
-		this(null);
-	}
-
-	public ServiceContributionProvider(Bundle bundle) {
-		this.bundle = bundle;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getName()
-	 */
-	protected String getName() {
-		return bundle == null ? ServiceContributionMessages.service_contribution_name : NLS.bind(ServiceContributionMessages.bundle_service_contribution_name, bundle.getSymbolicName());
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getBundle(), new Path(SERVICE_IMG_PATH), null);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return obj instanceof ServiceReference;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return obj instanceof Bundle;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return providesType(obj) ? new ServiceContributionProvider((Bundle) obj) : null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) throws MalformedObjectNameException, NullPointerException {
-		// if this service provider is associated with a bundle, we wrap the service contribution in a specialized type to display bundle associated information
-		if (contributesType(obj)) {
-			if (bundle != null) {
-				return new ServiceContribution((ServiceReference) obj, bundle);
-			}
-			return new ServiceContribution((ServiceReference) obj);
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		if (bundle != null) {
-			Set services = null;
-			if (bundle.getRegisteredServices() != null && bundle.getServicesInUse() != null) {
-				services = new HashSet();
-				if (bundle.getRegisteredServices() != null) {
-					for (int i = 0; i < bundle.getRegisteredServices().length; i++) {
-						services.add(bundle.getRegisteredServices()[i]);
-					}
-				}
-				if (bundle.getServicesInUse() != null) {
-					for (int i = 0; i < bundle.getServicesInUse().length; i++) {
-						services.add(bundle.getServicesInUse()[i]);
-					}
-				}
-			}
-			return services == null ? null : services.toArray();
-		}
-		BundleContext bc = Activator.getBundleContext();
-		try {
-			return bc.getServiceReferences(null, null);
-		} catch (InvalidSyntaxException e) {
-			// invalid syntax on null, null...
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String arg0) throws AttributeNotFoundException, MBeanException, ReflectionException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute arg0) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList arg0) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.jmx.server.contrib.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	public MBeanInfo getMBeanInfo(Object obj) {
-		return new MBeanInfo(getClass().getName(), null, null, null, null, null);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.osgi.services/META-INF/MANIFEST.MF
index e8090ec..935da0c 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.osgi.services/META-INF/MANIFEST.MF
@@ -2,34 +2,33 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %osgiServices
 Bundle-SymbolicName: org.eclipse.osgi.services
-Bundle-Version: 3.2.100.qualifier
+Bundle-Version: 3.3.0.qualifier
 Bundle-Description: %osgiServicesDes
 Bundle-Localization: plugin
 Bundle-Vendor: %eclipse.org
 Bundle-DocUrl: http://www.eclipse.org
 Bundle-ContactAddress: www.eclipse.org
-Bundle-Copyright: %copyright
-Export-Package: org.osgi.service.cm; version="1.2.1",
+Export-Package: org.osgi.service.cm; version="1.3",
  org.osgi.service.component; version="1.1",
  org.osgi.service.device; version="1.1",
- org.osgi.service.event; version="1.2",
+ org.osgi.service.event; version="1.3",
  org.osgi.service.http; version="1.2.1",
  org.osgi.service.io; version="1.0",
  org.osgi.service.log; version="1.3",
- org.osgi.service.metatype; version="1.1",
+ org.osgi.service.metatype; version="1.2",
  org.osgi.service.provisioning; version="1.2",
  org.osgi.service.upnp; version="1.1",
  org.osgi.service.useradmin; version="1.1",
  org.osgi.service.wireadmin; version="1.0"
 Import-Package: org.osgi.framework; version=1.2,
- org.osgi.service.cm; version="[1.2.1, 1.3)",
+ org.osgi.service.cm; version="[1.3, 1.4)",
  org.osgi.service.component; version="[1.1, 1.2)",
  org.osgi.service.device; version="[1.1, 1.2)",
- org.osgi.service.event; version="[1.2, 1.3)",
+ org.osgi.service.event; version="[1.3, 1.4)",
  org.osgi.service.http; version="[1.2.1, 1.3)",
  org.osgi.service.io; version="[1.0, 1.1)",
  org.osgi.service.log; version="[1.3, 1.4)",
- org.osgi.service.metatype; version="[1.1, 1.2)",
+ org.osgi.service.metatype; version="[1.2, 1.3)",
  org.osgi.service.provisioning; version="[1.2, 1.3)",
  org.osgi.service.upnp; version="[1.1, 1.2)",
  org.osgi.service.useradmin; version="[1.1, 1.2)",
@@ -37,7 +36,8 @@ Import-Package: org.osgi.framework; version=1.2,
  javax.servlet; resolution:="optional",
  javax.servlet.http; resolution:="optional"
 DynamicImport-Package: javax.servlet,
- javax.servlet.http
+ javax.servlet.http,
+ javax.microedition.io
 Bundle-RequiredExecutionEnvironment: OSGi/Minimum-1.2,
  CDC-1.1/Foundation-1.1,
  J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.osgi.services/META-INF/p2.inf b/eclipse/plugins/org.eclipse.osgi.services/META-INF/p2.inf
new file mode 100644
index 0000000..4474342
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/META-INF/p2.inf
@@ -0,0 +1,14 @@
+requires.0.namespace = java.package
+requires.0.name = javax.servlet
+requires.0.greedy = false
+requires.0.optional = true
+
+requires.1.namespace = java.package
+requires.1.name = javax.servlet.http
+requires.1.greedy = false
+requires.1.optional = true
+
+requires.2.namespace = java.package
+requires.2.name = javax.microedition.io
+requires.2.greedy = false
+requires.2.optional = true
diff --git a/eclipse/plugins/org.eclipse.osgi.services/plugin.properties b/eclipse/plugins/org.eclipse.osgi.services/plugin.properties
index fafc623..1f1a9ca 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/plugin.properties
+++ b/eclipse/plugins/org.eclipse.osgi.services/plugin.properties
@@ -11,4 +11,3 @@
 osgiServices = OSGi Release 4.2.0 Services
 eclipse.org = Eclipse.org - Equinox
 osgiServicesDes = OSGi Service Platform Release 4.2.0 Service Interfaces and Classes
-copyright = Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the accompanying materials  are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/Configuration.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/Configuration.java
index 7c17cf1..2400eca 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/Configuration.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/Configuration.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,78 +19,79 @@ import java.io.IOException;
 import java.util.Dictionary;
 
 /**
- * The configuration information for a <code>ManagedService</code> or
- * <code>ManagedServiceFactory</code> object.
+ * The configuration information for a {@code ManagedService} or
+ * {@code ManagedServiceFactory} object.
  * 
  * The Configuration Admin service uses this interface to represent the
- * configuration information for a <code>ManagedService</code> or for a
- * service instance of a <code>ManagedServiceFactory</code>.
+ * configuration information for a {@code ManagedService} or for a
+ * service instance of a {@code ManagedServiceFactory}.
  * 
  * <p>
- * A <code>Configuration</code> object contains a configuration dictionary and
+ * A {@code Configuration} object contains a configuration dictionary and
  * allows the properties to be updated via this object. Bundles wishing to
  * receive configuration dictionaries do not need to use this class - they
- * register a <code>ManagedService</code> or
- * <code>ManagedServiceFactory</code>. Only administrative bundles, and
+ * register a {@code ManagedService} or
+ * {@code ManagedServiceFactory}. Only administrative bundles, and
  * bundles wishing to update their own configurations need to use this class.
  * 
  * <p>
  * The properties handled in this configuration have case insensitive
- * <code>String</code> objects as keys. However, case is preserved from the
+ * {@code String} objects as keys. However, case is preserved from the
  * last set key/value.
  * <p>
  * A configuration can be <i>bound </i> to a bundle location (
- * <code>Bundle.getLocation()</code>). The purpose of binding a
- * <code>Configuration</code> object to a location is to make it impossible
+ * {@code Bundle.getLocation()}). The purpose of binding a
+ * {@code Configuration} object to a location is to make it impossible
  * for another bundle to forge a PID that would match this configuration. When a
  * configuration is bound to a specific location, and a bundle with a different
- * location registers a corresponding <code>ManagedService</code> object or
- * <code>ManagedServiceFactory</code> object, then the configuration is not
+ * location registers a corresponding {@code ManagedService} object or
+ * {@code ManagedServiceFactory} object, then the configuration is not
  * passed to the updated method of that object.
  * 
  * <p>
- * If a configuration's location is <code>null</code>, it is not yet bound to
+ * If a configuration's location is {@code null}, it is not yet bound to
  * a location. It will become bound to the location of the first bundle that
- * registers a <code>ManagedService</code> or
- * <code>ManagedServiceFactory</code> object with the corresponding PID.
+ * registers a {@code ManagedService} or
+ * {@code ManagedServiceFactory} object with the corresponding PID.
  * <p>
- * The same <code>Configuration</code> object is used for configuring both a
+ * The same {@code Configuration} object is used for configuring both a
  * Managed Service Factory and a Managed Service. When it is important to
  * differentiate between these two the term "factory configuration" is used.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: fe3cdfcf23da63bf0a03565f478dfe4d0e8b6d58 $
  */
 public interface Configuration {
 	/**
-	 * Get the PID for this <code>Configuration</code> object.
+	 * Get the PID for this {@code Configuration} object.
 	 * 
-	 * @return the PID for this <code>Configuration</code> object.
+	 * @return the PID for this {@code Configuration} object.
 	 * @throws IllegalStateException if this configuration has been deleted
 	 */
 	public String getPid();
 
 	/**
-	 * Return the properties of this <code>Configuration</code> object.
+	 * Return the properties of this {@code Configuration} object.
 	 * 
-	 * The <code>Dictionary</code> object returned is a private copy for the
+	 * The {@code Dictionary} object returned is a private copy for the
 	 * caller and may be changed without influencing the stored configuration.
 	 * The keys in the returned dictionary are case insensitive and are always
-	 * of type <code>String</code>.
+	 * of type {@code String}.
 	 * 
 	 * <p>
 	 * If called just after the configuration is created and before update has
-	 * been called, this method returns <code>null</code>.
+	 * been called, this method returns {@code null}.
 	 * 
 	 * @return A private copy of the properties for the caller or
-	 *         <code>null</code>. These properties must not contain the
+	 *         {@code null}. These properties must not contain the
 	 *         "service.bundleLocation" property. The value of this property may
-	 *         be obtained from the <code>getBundleLocation</code> method.
+	 *         be obtained from the {@code getBundleLocation} method.
 	 * @throws IllegalStateException if this configuration has been deleted
 	 */
 	public Dictionary getProperties();
 
 	/**
-	 * Update the properties of this <code>Configuration</code> object.
+	 * Update the properties of this {@code Configuration} object.
 	 * 
 	 * Stores the properties in persistent storage after adding or overwriting
 	 * the following properties:
@@ -99,7 +100,7 @@ public interface Configuration {
 	 * <li>"service.factoryPid" : if this is a factory configuration it is set
 	 * to the factory PID else it is not set.</li>
 	 * </ul>
-	 * These system properties are all of type <code>String</code>.
+	 * These system properties are all of type {@code String}.
 	 * 
 	 * <p>
 	 * If the corresponding Managed Service/Managed Service Factory is
@@ -108,12 +109,12 @@ public interface Configuration {
 	 * 
 	 * <p>
 	 * Also initiates an asynchronous call to all
-	 * <code>ConfigurationListener</code>s with a
-	 * <code>ConfigurationEvent.CM_UPDATED</code> event.
+	 * {@code ConfigurationListener}s with a
+	 * {@code ConfigurationEvent.CM_UPDATED} event.
 	 * 
 	 * @param properties the new set of properties for this configuration
 	 * @throws IOException if update cannot be made persistent
-	 * @throws IllegalArgumentException if the <code>Dictionary</code> object
+	 * @throws IllegalArgumentException if the {@code Dictionary} object
 	 *         contains invalid configuration types or contains case variants of
 	 *         the same key name.
 	 * @throws IllegalStateException if this configuration has been deleted
@@ -121,19 +122,19 @@ public interface Configuration {
 	public void update(Dictionary properties) throws IOException;
 
 	/**
-	 * Delete this <code>Configuration</code> object.
+	 * Delete this {@code Configuration} object.
 	 * 
 	 * Removes this configuration object from the persistent store. Notify
 	 * asynchronously the corresponding Managed Service or Managed Service
-	 * Factory. A <code>ManagedService</code> object is notified by a call to
-	 * its <code>updated</code> method with a <code>null</code> properties
-	 * argument. A <code>ManagedServiceFactory</code> object is notified by a
-	 * call to its <code>deleted</code> method.
+	 * Factory. A {@code ManagedService} object is notified by a call to
+	 * its {@code updated} method with a {@code null} properties
+	 * argument. A {@code ManagedServiceFactory} object is notified by a
+	 * call to its {@code deleted} method.
 	 * 
 	 * <p>
 	 * Also initiates an asynchronous call to all
-	 * <code>ConfigurationListener</code>s with a
-	 * <code>ConfigurationEvent.CM_DELETED</code> event.
+	 * {@code ConfigurationListener}s with a
+	 * {@code ConfigurationEvent.CM_DELETED} event.
 	 * 
 	 * @throws IOException If delete fails
 	 * @throws IllegalStateException if this configuration has been deleted
@@ -142,25 +143,25 @@ public interface Configuration {
 
 	/**
 	 * For a factory configuration return the PID of the corresponding Managed
-	 * Service Factory, else return <code>null</code>.
+	 * Service Factory, else return {@code null}.
 	 * 
-	 * @return factory PID or <code>null</code>
+	 * @return factory PID or {@code null}
 	 * @throws IllegalStateException if this configuration has been deleted
 	 */
 	public String getFactoryPid();
 
 	/**
-	 * Update the <code>Configuration</code> object with the current
+	 * Update the {@code Configuration} object with the current
 	 * properties.
 	 * 
-	 * Initiate the <code>updated</code> callback to the Managed Service or
+	 * Initiate the {@code updated} callback to the Managed Service or
 	 * Managed Service Factory with the current properties asynchronously.
 	 * 
 	 * <p>
 	 * This is the only way for a bundle that uses a Configuration Plugin
 	 * service to initiate a callback. For example, when that bundle detects a
 	 * change that requires an update of the Managed Service or Managed Service
-	 * Factory via its <code>ConfigurationPlugin</code> object.
+	 * Factory via its {@code ConfigurationPlugin} object.
 	 * 
 	 * @see ConfigurationPlugin
 	 * @throws IOException if update cannot access the properties in persistent
@@ -170,20 +171,20 @@ public interface Configuration {
 	public void update() throws IOException;
 
 	/**
-	 * Bind this <code>Configuration</code> object to the specified bundle
+	 * Bind this {@code Configuration} object to the specified bundle
 	 * location.
 	 * 
-	 * If the bundleLocation parameter is <code>null</code> then the
-	 * <code>Configuration</code> object will not be bound to a location. It
+	 * If the bundleLocation parameter is {@code null} then the
+	 * {@code Configuration} object will not be bound to a location. It
 	 * will be set to the bundle's location before the first time a Managed
-	 * Service/Managed Service Factory receives this <code>Configuration</code>
+	 * Service/Managed Service Factory receives this {@code Configuration}
 	 * object via the updated method and before any plugins are called. The
 	 * bundle location will be set persistently.
 	 * 
-	 * @param bundleLocation a bundle location or <code>null</code>
+	 * @param bundleLocation a bundle location or {@code null}
 	 * @throws IllegalStateException If this configuration has been deleted.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>ConfigurationPermission[*,CONFIGURE]</code>.
+	 *         {@code ConfigurationPermission[*,CONFIGURE]}.
 	 */
 	public void setBundleLocation(String bundleLocation);
 
@@ -191,14 +192,14 @@ public interface Configuration {
 	 * Get the bundle location.
 	 * 
 	 * Returns the bundle location to which this configuration is bound, or
-	 * <code>null</code> if it is not yet bound to a bundle location.
+	 * {@code null} if it is not yet bound to a bundle location.
 	 * 
 	 * @return location to which this configuration is bound, or
-	 *         <code>null</code>.
-	 * @throws IllegalStateException If this <code>Configuration</code> object
+	 *         {@code null}.
+	 * @throws IllegalStateException If this {@code Configuration} object
 	 *         has been deleted.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>ConfigurationPermission[*,CONFIGURE]</code>.
+	 *         {@code ConfigurationPermission[*,CONFIGURE]}.
 	 */
 	public String getBundleLocation();
 
@@ -207,9 +208,9 @@ public interface Configuration {
 	 * 
 	 * Two Configuration objects are equal when their PIDs are equal.
 	 * 
-	 * @param other <code>Configuration</code> object to compare against
-	 * @return <code>true</code> if equal, <code>false</code> if not a
-	 *         <code>Configuration</code> object or one with a different PID.
+	 * @param other {@code Configuration} object to compare against
+	 * @return {@code true} if equal, {@code false} if not a
+	 *         {@code Configuration} object or one with a different PID.
 	 */
 	public boolean equals(Object other);
 
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationAdmin.java
index a8d0a78..6797b52 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,9 +25,9 @@ import org.osgi.framework.InvalidSyntaxException;
  * 
  * <p>
  * The main purpose of this interface is to store bundle configuration data
- * persistently. This information is represented in <code>Configuration</code>
- * objects. The actual configuration data is a <code>Dictionary</code> of
- * properties inside a <code>Configuration</code> object.
+ * persistently. This information is represented in {@code Configuration}
+ * objects. The actual configuration data is a {@code Dictionary} of
+ * properties inside a {@code Configuration} object.
  * 
  * <p>
  * There are two principally different ways to manage configurations. First
@@ -36,7 +36,7 @@ import org.osgi.framework.InvalidSyntaxException;
  * 
  * <p>
  * Next, there is the concept of a factory where the Configuration Admin service
- * will maintain 0 or more <code>Configuration</code> objects for a Managed
+ * will maintain 0 or more {@code Configuration} objects for a Managed
  * Service Factory that is registered with the Framework.
  * 
  * <p>
@@ -48,204 +48,206 @@ import org.osgi.framework.InvalidSyntaxException;
  * <p>
  * Bundles that require configuration should register a Managed Service or a
  * Managed Service Factory in the service registry. A registration property
- * named <code>service.pid</code> (persistent identifier or PID) must be used
- * to identify this Managed Service or Managed Service Factory to the
- * Configuration Admin service.
+ * named {@code service.pid} (persistent identifier or PID) must be used to
+ * identify this Managed Service or Managed Service Factory to the Configuration
+ * Admin service.
  * 
  * <p>
  * When the ConfigurationAdmin detects the registration of a Managed Service, it
- * checks its persistent storage for a configuration object whose PID matches
- * the PID registration property (<code>service.pid</code>) of the Managed
- * Service. If found, it calls {@link ManagedService#updated} method with the
- * new properties. The implementation of a Configuration Admin service must run
- * these call-backs asynchronously to allow proper synchronization.
+ * checks its persistent storage for a configuration object whose
+ * {@code service.pid} property matches the PID service property (
+ * {@code service.pid}) of the Managed Service. If found, it calls
+ * {@link ManagedService#updated} method with the new properties. The
+ * implementation of a Configuration Admin service must run these call-backs
+ * asynchronously to allow proper synchronization.
  * 
  * <p>
  * When the Configuration Admin service detects a Managed Service Factory
  * registration, it checks its storage for configuration objects whose
- * <code>factoryPid</code> matches the PID of the Managed Service Factory. For
- * each such <code>Configuration</code> objects, it calls the
- * <code>ManagedServiceFactory.updated</code> method asynchronously with the
- * new properties. The calls to the <code>updated</code> method of a
- * <code>ManagedServiceFactory</code> must be executed sequentially and not
- * overlap in time.
+ * {@code service.factoryPid} property matches the PID service property of
+ * the Managed Service Factory. For each such {@code Configuration}
+ * objects, it calls the {@code ManagedServiceFactory.updated} method
+ * asynchronously with the new properties. The calls to the {@code updated}
+ * method of a {@code ManagedServiceFactory} must be executed sequentially
+ * and not overlap in time.
  * 
  * <p>
  * In general, bundles having permission to use the Configuration Admin service
  * can only access and modify their own configuration information. Accessing or
  * modifying the configuration of another bundle requires
- * <code>ConfigurationPermission[*,CONFIGURE]</code>.
+ * {@code ConfigurationPermission[*,CONFIGURE]}.
  * 
  * <p>
- * <code>Configuration</code> objects can be <i>bound </i> to a specified
- * bundle location. In this case, if a matching Managed Service or Managed
- * Service Factory is registered by a bundle with a different location, then the
+ * {@code Configuration} objects can be <i>bound </i> to a specified bundle
+ * location. In this case, if a matching Managed Service or Managed Service
+ * Factory is registered by a bundle with a different location, then the
  * Configuration Admin service must not do the normal callback, and it should
- * log an error. In the case where a <code>Configuration</code> object is not
- * bound, its location field is <code>null</code>, the Configuration Admin
+ * log an error. In the case where a {@code Configuration} object is not
+ * bound, its location field is {@code null}, the Configuration Admin
  * service will bind it to the location of the bundle that registers the first
  * Managed Service or Managed Service Factory that has a corresponding PID
- * property. When a <code>Configuration</code> object is bound to a bundle
+ * property. When a {@code Configuration} object is bound to a bundle
  * location in this manner, the Configuration Admin service must detect if the
  * bundle corresponding to the location is uninstalled. If this occurs, the
- * <code>Configuration</code> object is unbound, that is its location field is
- * set back to <code>null</code>.
+ * {@code Configuration} object is unbound, that is its location field is
+ * set back to {@code null}.
  * 
  * <p>
  * The method descriptions of this class refer to a concept of "the calling
  * bundle". This is a loose way of referring to the bundle which obtained the
  * Configuration Admin service from the service registry. Implementations of
- * <code>ConfigurationAdmin</code> must use a
+ * {@code ConfigurationAdmin} must use a
  * {@link org.osgi.framework.ServiceFactory} to support this concept.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 7d988e187551a32e617f6691d28f743291b253b5 $
  */
 public interface ConfigurationAdmin {
 	/**
-	 * Service property naming the Factory PID in the configuration dictionary.
-	 * The property's value is of type <code>String</code>.
+	 * Configuration property naming the Factory PID in the configuration
+	 * dictionary. The property's value is of type {@code String}.
 	 * 
 	 * @since 1.1
 	 */
 	public final static String	SERVICE_FACTORYPID		= "service.factoryPid";
 	/**
-	 * Service property naming the location of the bundle that is associated
-	 * with a a <code>Configuration</code> object. This property can be
-	 * searched for but must not appear in the configuration dictionary for
-	 * security reason. The property's value is of type <code>String</code>.
+	 * Configuration property naming the location of the bundle that is
+	 * associated with a a {@code Configuration} object. This property can
+	 * be searched for but must not appear in the configuration dictionary for
+	 * security reason. The property's value is of type {@code String}.
 	 * 
 	 * @since 1.1
 	 */
 	public final static String	SERVICE_BUNDLELOCATION	= "service.bundleLocation";
 
 	/**
-	 * Create a new factory <code>Configuration</code> object with a new PID.
+	 * Create a new factory {@code Configuration} object with a new PID.
 	 * 
-	 * The properties of the new <code>Configuration</code> object are
-	 * <code>null</code> until the first time that its
+	 * The properties of the new {@code Configuration} object are
+	 * {@code null} until the first time that its
 	 * {@link Configuration#update(Dictionary)} method is called.
 	 * 
 	 * <p>
-	 * It is not required that the <code>factoryPid</code> maps to a
+	 * It is not required that the {@code factoryPid} maps to a
 	 * registered Managed Service Factory.
 	 * <p>
-	 * The <code>Configuration</code> object is bound to the location of the
+	 * The {@code Configuration} object is bound to the location of the
 	 * calling bundle.
 	 * 
-	 * @param factoryPid PID of factory (not <code>null</code>).
-	 * @return A new <code>Configuration</code> object.
+	 * @param factoryPid PID of factory (not {@code null}).
+	 * @return A new {@code Configuration} object.
 	 * @throws IOException if access to persistent storage fails.
-	 * @throws SecurityException if caller does not have <code>ConfigurationPermission[*,CONFIGURE]</code> and <code>factoryPid</code> is bound to another bundle.
+	 * @throws SecurityException if caller does not have {@code ConfigurationPermission[*,CONFIGURE]} and {@code factoryPid} is bound to another bundle.
 	 */
 	public Configuration createFactoryConfiguration(String factoryPid)
 			throws IOException;
 
 	/**
-	 * Create a new factory <code>Configuration</code> object with a new PID.
+	 * Create a new factory {@code Configuration} object with a new PID.
 	 * 
-	 * The properties of the new <code>Configuration</code> object are
-	 * <code>null</code> until the first time that its
+	 * The properties of the new {@code Configuration} object are
+	 * {@code null} until the first time that its
 	 * {@link Configuration#update(Dictionary)} method is called.
 	 * 
 	 * <p>
-	 * It is not required that the <code>factoryPid</code> maps to a
+	 * It is not required that the {@code factoryPid} maps to a
 	 * registered Managed Service Factory.
 	 * 
 	 * <p>
-	 * The <code>Configuration</code> is bound to the location specified. If
-	 * this location is <code>null</code> it will be bound to the location of
+	 * The {@code Configuration} is bound to the location specified. If
+	 * this location is {@code null} it will be bound to the location of
 	 * the first bundle that registers a Managed Service Factory with a
 	 * corresponding PID.
 	 * 
-	 * @param factoryPid PID of factory (not <code>null</code>).
-	 * @param location A bundle location string, or <code>null</code>.
-	 * @return a new <code>Configuration</code> object.
+	 * @param factoryPid PID of factory (not {@code null}).
+	 * @param location A bundle location string, or {@code null}.
+	 * @return a new {@code Configuration} object.
 	 * @throws IOException if access to persistent storage fails.
-	 * @throws SecurityException if caller does not have <code>ConfigurationPermission[*,CONFIGURE]</code>.
+	 * @throws SecurityException if caller does not have {@code ConfigurationPermission[*,CONFIGURE]}.
 	 */
 	public Configuration createFactoryConfiguration(String factoryPid, String location)
 			throws IOException;
 
 	/**
-	 * Get an existing <code>Configuration</code> object from the persistent
-	 * store, or create a new <code>Configuration</code> object.
+	 * Get an existing {@code Configuration} object from the persistent
+	 * store, or create a new {@code Configuration} object.
 	 * 
 	 * <p>
-	 * If a <code>Configuration</code> with this PID already exists in
+	 * If a {@code Configuration} with this PID already exists in
 	 * Configuration Admin service return it. The location parameter is ignored
 	 * in this case.
 	 * 
 	 * <p>
-	 * Else, return a new <code>Configuration</code> object. This new object
-	 * is bound to the location and the properties are set to <code>null</code>.
-	 * If the location parameter is <code>null</code>, it will be set when a
+	 * Else, return a new {@code Configuration} object. This new object
+	 * is bound to the location and the properties are set to {@code null}.
+	 * If the location parameter is {@code null}, it will be set when a
 	 * Managed Service with the corresponding PID is registered for the first
 	 * time.
 	 * 
 	 * @param pid Persistent identifier.
-	 * @param location The bundle location string, or <code>null</code>.
-	 * @return An existing or new <code>Configuration</code> object.
+	 * @param location The bundle location string, or {@code null}.
+	 * @return An existing or new {@code Configuration} object.
 	 * @throws IOException if access to persistent storage fails.
-	 * @throws SecurityException if the caller does not have <code>ConfigurationPermission[*,CONFIGURE]</code>.
+	 * @throws SecurityException if the caller does not have {@code ConfigurationPermission[*,CONFIGURE]}.
 	 */
 	public Configuration getConfiguration(String pid, String location)
 			throws IOException;
 
 	/**
-	 * Get an existing or new <code>Configuration</code> object from the
+	 * Get an existing or new {@code Configuration} object from the
 	 * persistent store.
 	 * 
-	 * If the <code>Configuration</code> object for this PID does not exist,
-	 * create a new <code>Configuration</code> object for that PID, where
-	 * properties are <code>null</code>. Bind its location to the calling
+	 * If the {@code Configuration} object for this PID does not exist,
+	 * create a new {@code Configuration} object for that PID, where
+	 * properties are {@code null}. Bind its location to the calling
 	 * bundle's location.
 	 * 
 	 * <p>
-	 * Otherwise, if the location of the existing <code>Configuration</code> object
-	 * is <code>null</code>, set it to the calling bundle's location.
+	 * Otherwise, if the location of the existing {@code Configuration} object
+	 * is {@code null}, set it to the calling bundle's location.
 	 * 
 	 * @param pid persistent identifier.
-	 * @return an existing or new <code>Configuration</code> matching the PID.
+	 * @return an existing or new {@code Configuration} matching the PID.
 	 * @throws IOException if access to persistent storage fails.
-	 * @throws SecurityException if the <code>Configuration</code> object is bound to a location different from that of the calling bundle and it has no <code>ConfigurationPermission[*,CONFIGURE]</code>.
+	 * @throws SecurityException if the {@code Configuration} object is bound to a location different from that of the calling bundle and it has no {@code ConfigurationPermission[*,CONFIGURE]}.
 	 */
 	public Configuration getConfiguration(String pid) throws IOException;
 
 	/**
-	 * List the current <code>Configuration</code> objects which match the
+	 * List the current {@code Configuration} objects which match the
 	 * filter.
 	 * 
 	 * <p>
-	 * Only <code>Configuration</code> objects with non- <code>null</code>
+	 * Only {@code Configuration} objects with non- {@code null}
 	 * properties are considered current. That is,
-	 * <code>Configuration.getProperties()</code> is guaranteed not to return
-	 * <code>null</code> for each of the returned <code>Configuration</code>
+	 * {@code Configuration.getProperties()} is guaranteed not to return
+	 * {@code null} for each of the returned {@code Configuration}
 	 * objects.
 	 * 
 	 * <p>
-	 * Normally only <code>Configuration</code> objects that are bound to the
-	 * location of the calling bundle are returned, or all if the caller has 
-	 * <code>ConfigurationPermission[*,CONFIGURE]</code>.
+	 * Normally only {@code Configuration} objects that are bound to the
+	 * location of the calling bundle are returned, or all if the caller has
+	 * {@code ConfigurationPermission[*,CONFIGURE]}.
 	 * 
 	 * <p>
-	 * The syntax of the filter string is as defined in the {@link org.osgi.framework.Filter}
-	 * class. The filter can test any configuration parameters including the
-	 * following system properties:
+	 * The syntax of the filter string is as defined in the
+	 * {@link org.osgi.framework.Filter} class. The filter can test any
+	 * configuration properties including the following:
 	 * <ul>
-	 * <li><code>service.pid</code>-<code>String</code>- the PID under
-	 * which this is registered</li>
-	 * <li><code>service.factoryPid</code>-<code>String</code>- the
-	 * factory if applicable</li>
-	 * <li><code>service.bundleLocation</code>-<code>String</code>- the
-	 * bundle location</li>
+	 * <li>{@code service.pid}-{@code String}- the PID under which
+	 * this is registered</li>
+	 * <li>{@code service.factoryPid}-{@code String}- the factory if
+	 * applicable</li>
+	 * <li>{@code service.bundleLocation}-{@code String}- the bundle
+	 * location</li>
 	 * </ul>
-	 * The filter can also be <code>null</code>, meaning that all
-	 * <code>Configuration</code> objects should be returned.
+	 * The filter can also be {@code null}, meaning that all
+	 * {@code Configuration} objects should be returned.
 	 * 
-	 * @param filter A filter string, or <code>null</code> to
-	 *        retrieve all <code>Configuration</code> objects.
-	 * @return All matching <code>Configuration</code> objects, or
-	 *         <code>null</code> if there aren't any.
+	 * @param filter A filter string, or {@code null} to retrieve all
+	 *        {@code Configuration} objects.
+	 * @return All matching {@code Configuration} objects, or
+	 *         {@code null} if there aren't any.
 	 * @throws IOException if access to persistent storage fails
 	 * @throws InvalidSyntaxException if the filter string is invalid
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationEvent.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationEvent.java
index f17007f..af2a19a 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationEvent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,8 +23,8 @@ import org.osgi.framework.ServiceReference;
  * A Configuration Event.
  * 
  * <p>
- * <code>ConfigurationEvent</code> objects are delivered to all registered
- * <code>ConfigurationListener</code> service objects. ConfigurationEvents
+ * {@code ConfigurationEvent} objects are delivered to all registered
+ * {@code ConfigurationListener} service objects. ConfigurationEvents
  * must be asynchronously delivered in chronological order with respect to each
  * listener.
  * 
@@ -38,44 +38,44 @@ import org.osgi.framework.ServiceReference;
  * Additional event types may be defined in the future.
  * 
  * <p>
- * Security Considerations. <code>ConfigurationEvent</code> objects do not
- * provide <code>Configuration</code> objects, so no sensitive configuration
+ * Security Considerations. {@code ConfigurationEvent} objects do not
+ * provide {@code Configuration} objects, so no sensitive configuration
  * information is available from the event. If the listener wants to locate the
- * <code>Configuration</code> object for the specified pid, it must use
- * <code>ConfigurationAdmin</code>.
+ * {@code Configuration} object for the specified pid, it must use
+ * {@code ConfigurationAdmin}.
  * 
  * @see ConfigurationListener
  * 
- * @version $Revision: 6180 $
+ * @version $Id: b0efbb26d23b0931d901cac9c16f0a49b06a530b $
  * @since 1.2
  */
 public class ConfigurationEvent {
 	/**
-	 * A <code>Configuration</code> has been updated.
+	 * A {@code Configuration} has been updated.
 	 * 
 	 * <p>
-	 * This <code>ConfigurationEvent</code> type that indicates that a
-	 * <code>Configuration</code> object has been updated with new properties.
+	 * This {@code ConfigurationEvent} type that indicates that a
+	 * {@code Configuration} object has been updated with new properties.
 	 * 
 	 * An event is fired when a call to {@link Configuration#update(Dictionary)}
 	 * successfully changes a configuration.
 	 * 
 	 * <p>
-	 * The value of <code>CM_UPDATED</code> is 1.
+	 * The value of {@code CM_UPDATED} is 1.
 	 */
 	public static final int			CM_UPDATED	= 1;
 	/**
-	 * A <code>Configuration</code> has been deleted.
+	 * A {@code Configuration} has been deleted.
 	 * 
 	 * <p>
-	 * This <code>ConfigurationEvent</code> type that indicates that a
-	 * <code>Configuration</code> object has been deleted.
+	 * This {@code ConfigurationEvent} type that indicates that a
+	 * {@code Configuration} object has been deleted.
 	 * 
 	 * An event is fired when a call to {@link Configuration#delete()}
 	 * successfully deletes a configuration.
 	 * 
 	 * <p>
-	 * The value of <code>CM_DELETED</code> is 2.
+	 * The value of {@code CM_DELETED} is 2.
 	 */
 	public static final int			CM_DELETED	= 2;
 	/**
@@ -98,15 +98,15 @@ public class ConfigurationEvent {
 	private final ServiceReference	reference;
 
 	/**
-	 * Constructs a <code>ConfigurationEvent</code> object from the given
-	 * <code>ServiceReference</code> object, event type, and pids.
+	 * Constructs a {@code ConfigurationEvent} object from the given
+	 * {@code ServiceReference} object, event type, and pids.
 	 * 
-	 * @param reference The <code>ServiceReference</code> object of the
+	 * @param reference The {@code ServiceReference} object of the
 	 *        Configuration Admin service that created this event.
 	 * @param type The event type. See {@link #getType}.
 	 * @param factoryPid The factory pid of the associated configuration if the
 	 *        target of the configuration is a ManagedServiceFactory. Otherwise
-	 *        <code>null</code> if the target of the configuration is a
+	 *        {@code null} if the target of the configuration is a
 	 *        ManagedService.
 	 * @param pid The pid of the associated configuration.
 	 */
@@ -126,7 +126,7 @@ public class ConfigurationEvent {
 	 * 
 	 * @return Returns the factory pid of the associated configuration if the
 	 *         target of the configuration is a ManagedServiceFactory. Otherwise
-	 *         <code>null</code> if the target of the configuration is a
+	 *         {@code null} if the target of the configuration is a
 	 *         ManagedService.
 	 */
 	public String getFactoryPid() {
@@ -158,10 +158,10 @@ public class ConfigurationEvent {
 	}
 
 	/**
-	 * Return the <code>ServiceReference</code> object of the Configuration
+	 * Return the {@code ServiceReference} object of the Configuration
 	 * Admin service that created this event.
 	 * 
-	 * @return The <code>ServiceReference</code> object for the Configuration
+	 * @return The {@code ServiceReference} object for the Configuration
 	 *         Admin service that created this event.
 	 */
 	public ServiceReference getReference() {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationException.java
index 300f5c8..ee2b78e 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationException.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,10 +16,10 @@
 package org.osgi.service.cm;
 
 /**
- * An <code>Exception</code> class to inform the Configuration Admin service
+ * An {@code Exception} class to inform the Configuration Admin service
  * of problems with configuration data.
  * 
- * @version $Revision: 6083 $
+ * @version $Id: c9fb6fbf0fb8fc75291a073348fa0f4e56f248a7 $
  */
 public class ConfigurationException extends Exception {
 	static final long	serialVersionUID	= -1690090413441769377L;
@@ -28,10 +28,10 @@ public class ConfigurationException extends Exception {
 	private final String		reason;
 
 	/**
-	 * Create a <code>ConfigurationException</code> object.
+	 * Create a {@code ConfigurationException} object.
 	 * 
 	 * @param property name of the property that caused the problem,
-	 *        <code>null</code> if no specific property was the cause
+	 *        {@code null} if no specific property was the cause
 	 * @param reason reason for failure
 	 */
 	public ConfigurationException(String property, String reason) {
@@ -41,10 +41,10 @@ public class ConfigurationException extends Exception {
 	}
 
 	/**
-	 * Create a <code>ConfigurationException</code> object.
+	 * Create a {@code ConfigurationException} object.
 	 * 
 	 * @param property name of the property that caused the problem,
-	 *        <code>null</code> if no specific property was the cause
+	 *        {@code null} if no specific property was the cause
 	 * @param reason reason for failure
 	 * @param cause The cause of this exception.
 	 * @since 1.2
@@ -76,10 +76,10 @@ public class ConfigurationException extends Exception {
 	}
 	
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * set.
 	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
+	 * @return The cause of this exception or {@code null} if no cause was
 	 *         set.
 	 * @since 1.2
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationListener.java
index 5d7793d..57978b7 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationListener.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,33 +16,33 @@
 package org.osgi.service.cm;
 
 /**
- * Listener for Configuration Events. When a <code>ConfigurationEvent</code>
+ * Listener for Configuration Events. When a {@code ConfigurationEvent}
  * is fired, it is asynchronously delivered to a
- * <code>ConfigurationListener</code>.
+ * {@code ConfigurationListener}.
  * 
  * <p>
- * <code>ConfigurationListener</code> objects are registered with the
+ * {@code ConfigurationListener} objects are registered with the
  * Framework service registry and are notified with a
- * <code>ConfigurationEvent</code> object when an event is fired.
+ * {@code ConfigurationEvent} object when an event is fired.
  * <p>
- * <code>ConfigurationListener</code> objects can inspect the received
- * <code>ConfigurationEvent</code> object to determine its type, the pid of
- * the <code>Configuration</code> object with which it is associated, and the
+ * {@code ConfigurationListener} objects can inspect the received
+ * {@code ConfigurationEvent} object to determine its type, the pid of
+ * the {@code Configuration} object with which it is associated, and the
  * Configuration Admin service that fired the event.
  * 
  * <p>
  * Security Considerations. Bundles wishing to monitor configuration events will
- * require <code>ServicePermission[ConfigurationListener,REGISTER]</code> to
- * register a <code>ConfigurationListener</code> service.
+ * require {@code ServicePermission[ConfigurationListener,REGISTER]} to
+ * register a {@code ConfigurationListener} service.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: bc0872c4df2541cba4060a0036f8aeb24a608051 $
  * @since 1.2
  */
 public interface ConfigurationListener {
 	/**
 	 * Receives notification of a Configuration that has changed.
 	 * 
-	 * @param event The <code>ConfigurationEvent</code>.
+	 * @param event The {@code ConfigurationEvent}.
 	 */
 	public void configurationEvent(ConfigurationEvent event);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPermission.java
index 3af9088..4fd9683 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPermission.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,14 +28,14 @@ import java.util.NoSuchElementException;
  * This permission has only a single action: CONFIGURE.
  * 
  * @ThreadSafe
- * @version $Revision: 6381 $
+ * @version $Id: 6b918f50972aaa9890b9a2d613ddd08598509280 $
  * @since 1.2
  */
 
 public final class ConfigurationPermission extends BasicPermission {
 	static final long			serialVersionUID	= 5716868734811965383L;
 	/**
-	 * The action string <code>configure</code>.
+	 * The action string {@code configure}.
 	 */
 	public final static String	CONFIGURE			= "configure";
 
@@ -43,7 +43,7 @@ public final class ConfigurationPermission extends BasicPermission {
 	 * Create a new ConfigurationPermission.
 	 * 
 	 * @param name Name must be "*".
-	 * @param actions <code>configure</code> (canonical order).
+	 * @param actions {@code configure} (canonical order).
 	 */
 
 	public ConfigurationPermission(String name, String actions) {
@@ -59,12 +59,12 @@ public final class ConfigurationPermission extends BasicPermission {
 	}
 
 	/**
-	 * Determines if a <code>ConfigurationPermission</code> object "implies"
+	 * Determines if a {@code ConfigurationPermission} object "implies"
 	 * the specified permission.
 	 * 
 	 * @param p The target permission to check.
-	 * @return <code>true</code> if the specified permission is implied by
-	 *         this object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by
+	 *         this object; {@code false} otherwise.
 	 */
 
 	public boolean implies(Permission p) {
@@ -72,14 +72,14 @@ public final class ConfigurationPermission extends BasicPermission {
 	}
 
 	/**
-	 * Determines the equality of two <code>ConfigurationPermission</code>
+	 * Determines the equality of two {@code ConfigurationPermission}
 	 * objects.
 	 * <p>
-	 * Two <code>ConfigurationPermission</code> objects are equal.
+	 * Two {@code ConfigurationPermission} objects are equal.
 	 * 
 	 * @param obj The object being compared for equality with this object.
-	 * @return <code>true</code> if <code>obj</code> is equivalent to this
-	 *         <code>ConfigurationPermission</code>; <code>false</code>
+	 * @return {@code true} if {@code obj} is equivalent to this
+	 *         {@code ConfigurationPermission}; {@code false}
 	 *         otherwise.
 	 */
 	public boolean equals(Object obj) {
@@ -100,24 +100,24 @@ public final class ConfigurationPermission extends BasicPermission {
 
 	/**
 	 * Returns the canonical string representation of the
-	 * <code>ConfigurationPermission</code> actions.
+	 * {@code ConfigurationPermission} actions.
 	 * 
 	 * <p>
-	 * Always returns present <code>ConfigurationPermission</code> actions in
-	 * the following order: <code>CONFIGURE</code>
+	 * Always returns present {@code ConfigurationPermission} actions in
+	 * the following order: {@code CONFIGURE}
 	 * 
 	 * @return Canonical string representation of the
-	 *         <code>ConfigurationPermission</code> actions.
+	 *         {@code ConfigurationPermission} actions.
 	 */
 	public String getActions() {
 		return CONFIGURE;
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object suitable for
-	 * storing <code>ConfigurationPermission</code>s.
+	 * Returns a new {@code PermissionCollection} object suitable for
+	 * storing {@code ConfigurationPermission}s.
 	 * 
-	 * @return A new <code>PermissionCollection</code> object.
+	 * @return A new {@code PermissionCollection} object.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new ConfigurationPermissionCollection();
@@ -125,7 +125,7 @@ public final class ConfigurationPermission extends BasicPermission {
 }
 
 /**
- * Stores a set of <code>ConfigurationPermission</code> permissions.
+ * Stores a set of {@code ConfigurationPermission} permissions.
  * 
  * @see java.security.Permission
  * @see java.security.Permissions
@@ -141,7 +141,7 @@ final class ConfigurationPermissionCollection extends PermissionCollection {
 	private volatile boolean	hasElement;
 
 	/**
-	 * Creates an empty <tt>ConfigurationPermissionCollection</tt> object.
+	 * Creates an empty {@code ConfigurationPermissionCollection} object.
 	 * 
 	 */
 	public ConfigurationPermissionCollection() {
@@ -150,13 +150,13 @@ final class ConfigurationPermissionCollection extends PermissionCollection {
 
 	/**
 	 * Adds the specified permission to the
-	 * <tt>ConfigurationPermissionCollection</tt>. The key for the hash is
+	 * {@code ConfigurationPermissionCollection}. The key for the hash is
 	 * the interface name of the service.
 	 * 
-	 * @param permission The <tt>Permission</tt> object to add.
+	 * @param permission The {@code Permission} object to add.
 	 * 
 	 * @exception IllegalArgumentException If the permission is not an
-	 *            <tt>ConfigurationPermission</tt>.
+	 *            {@code ConfigurationPermission}.
 	 * 
 	 * @exception SecurityException If this ConfigurationPermissionCollection
 	 *            object has been marked read-only.
@@ -177,7 +177,7 @@ final class ConfigurationPermissionCollection extends PermissionCollection {
 
 	/**
 	 * Determines if the specified set of permissions implies the permissions
-	 * expressed in the parameter <tt>permission</tt>.
+	 * expressed in the parameter {@code permission}.
 	 * 
 	 * @param p The Permission object to compare.
 	 * 
@@ -190,9 +190,9 @@ final class ConfigurationPermissionCollection extends PermissionCollection {
 	}
 
 	/**
-	 * Returns an enumeration of an <tt>ConfigurationPermission</tt> object.
+	 * Returns an enumeration of an {@code ConfigurationPermission} object.
 	 * 
-	 * @return Enumeration of an <tt>ConfigurationPermission</tt> object.
+	 * @return Enumeration of an {@code ConfigurationPermission} object.
 	 */
 
 	public Enumeration elements() {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPlugin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPlugin.java
index 574466e..5d48622 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPlugin.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ConfigurationPlugin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,13 +24,13 @@ import org.osgi.framework.ServiceReference;
  * update.
  * 
  * <p>
- * A bundle registers a <code>ConfigurationPlugin</code> object in order to
+ * A bundle registers a {@code ConfigurationPlugin} object in order to
  * process configuration updates before they reach the Managed Service or
  * Managed Service Factory. The Configuration Admin service will detect
  * registrations of Configuration Plugin services and must call these services
- * every time before it calls the <code>ManagedService</code> or
- * <code>ManagedServiceFactory</code>
- * <code>updated</code> method. The
+ * every time before it calls the {@code ManagedService} or
+ * {@code ManagedServiceFactory}
+ * {@code updated} method. The
  * Configuration Plugin service thus has the opportunity to view and modify the
  * properties before they are passed to the Managed Service or Managed Service
  * Factory.
@@ -39,24 +39,24 @@ import org.osgi.framework.ServiceReference;
  * Configuration Plugin (plugin) services have full read/write access to all
  * configuration information. Therefore, bundles using this facility should be
  * trusted. Access to this facility should be limited with
- * <code>ServicePermission[ConfigurationPlugin,REGISTER]</code>.
+ * {@code ServicePermission[ConfigurationPlugin,REGISTER]}.
  * Implementations of a Configuration Plugin service should assure that they
  * only act on appropriate configurations.
  * 
  * <p>
- * The <code>Integer</code> <code>service.cmRanking</code> registration
+ * The {@code Integer} {@code service.cmRanking} registration
  * property may be specified. Not specifying this registration property, or
- * setting it to something other than an <code>Integer</code>, is the same as
- * setting it to the <code>Integer</code> zero. The
- * <code>service.cmRanking</code> property determines the order in which
+ * setting it to something other than an {@code Integer}, is the same as
+ * setting it to the {@code Integer} zero. The
+ * {@code service.cmRanking} property determines the order in which
  * plugins are invoked. Lower ranked plugins are called before higher ranked
  * ones. In the event of more than one plugin having the same value of
- * <code>service.cmRanking</code>, then the Configuration Admin service
+ * {@code service.cmRanking}, then the Configuration Admin service
  * arbitrarily chooses the order in which they are called.
  * 
  * <p>
- * By convention, plugins with <code>service.cmRanking< 0</code> or
- * <code>service.cmRanking > 1000</code> should not make modifications to
+ * By convention, plugins with {@code service.cmRanking< 0} or
+ * {@code service.cmRanking > 1000} should not make modifications to
  * the properties.
  * 
  * <p>
@@ -66,15 +66,15 @@ import org.osgi.framework.ServiceReference;
  * defined.
  * 
  * <p>
- * A plugin may optionally specify a <code>cm.target</code> registration
+ * A plugin may optionally specify a {@code cm.target} registration
  * property whose value is the PID of the Managed Service or Managed Service
  * Factory whose configuration updates the plugin is intended to intercept. The
  * plugin will then only be called with configuration updates that are targeted
  * at the Managed Service or Managed Service Factory with the specified PID.
- * Omitting the <code>cm.target</code> registration property means that the
+ * Omitting the {@code cm.target} registration property means that the
  * plugin is called for all configuration updates.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 3b134aa21524b8f9cd461f040a8899334eb07d2a $
  */
 public interface ConfigurationPlugin {
 	/**
@@ -82,7 +82,7 @@ public interface ConfigurationPlugin {
 	 * Factory configuration dictionaries a Configuration Plugin service
 	 * receives.
 	 * 
-	 * This property contains a <code>String[]</code> of PIDs. A Configuration
+	 * This property contains a {@code String[]} of PIDs. A Configuration
 	 * Admin service must call a Configuration Plugin service only when this
 	 * property is not set, or the target service's PID is listed in this
 	 * property.
@@ -91,10 +91,10 @@ public interface ConfigurationPlugin {
 	/**
 	 * A service property to specify the order in which plugins are invoked.
 	 * 
-	 * This property contains an <code>Integer</code> ranking of the plugin.
+	 * This property contains an {@code Integer} ranking of the plugin.
 	 * Not specifying this registration property, or setting it to something
-	 * other than an <code>Integer</code>, is the same as setting it to the
-	 * <code>Integer</code> zero. This property determines the order in which
+	 * other than an {@code Integer}, is the same as setting it to the
+	 * {@code Integer} zero. This property determines the order in which
 	 * plugins are invoked. Lower ranked plugins are called before higher ranked
 	 * ones.
 	 * 
@@ -106,15 +106,15 @@ public interface ConfigurationPlugin {
 	 * View and possibly modify the a set of configuration properties before
 	 * they are sent to the Managed Service or the Managed Service Factory. The
 	 * Configuration Plugin services are called in increasing order of their
-	 * <code>service.cmRanking</code> property. If this property is undefined
-	 * or is a non- <code>Integer</code> type, 0 is used.
+	 * {@code service.cmRanking} property. If this property is undefined
+	 * or is a non- {@code Integer} type, 0 is used.
 	 * 
 	 * <p>
 	 * This method should not modify the properties unless the
-	 * <code>service.cmRanking</code> of this plugin is in the range
-	 * <code>0 <= service.cmRanking <= 1000</code>.
+	 * {@code service.cmRanking} of this plugin is in the range
+	 * {@code 0 <= service.cmRanking <= 1000}.
 	 * <p>
-	 * If this method throws any <code>Exception</code>, the Configuration
+	 * If this method throws any {@code Exception}, the Configuration
 	 * Admin service must catch it and should log it.
 	 * 
 	 * @param reference reference to the Managed Service or Managed Service
@@ -122,7 +122,7 @@ public interface ConfigurationPlugin {
 	 * @param properties The configuration properties. This argument must not
 	 *        contain the "service.bundleLocation" property. The value of this
 	 *        property may be obtained from the
-	 *        <code>Configuration.getBundleLocation</code> method.
+	 *        {@code Configuration.getBundleLocation} method.
 	 */
 	public void modifyConfiguration(ServiceReference reference,
 			Dictionary properties);
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedService.java
index 6812434..5dcd0ff 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,29 +24,29 @@ import java.util.Dictionary;
  * <p>
  * A Managed Service is a service that needs configuration data. Such an object
  * should be registered with the Framework registry with the
- * <code>service.pid</code> property set to some unique identifier called a
+ * {@code service.pid} property set to some unique identifier called a
  * PID.
  * 
  * <p>
- * If the Configuration Admin service has a <code>Configuration</code> object
- * corresponding to this PID, it will callback the <code>updated()</code>
- * method of the <code>ManagedService</code> object, passing the properties of
- * that <code>Configuration</code> object.
+ * If the Configuration Admin service has a {@code Configuration} object
+ * corresponding to this PID, it will callback the {@code updated()}
+ * method of the {@code ManagedService} object, passing the properties of
+ * that {@code Configuration} object.
  * 
  * <p>
- * If it has no such <code>Configuration</code> object, then it calls back
- * with a <code>null</code> properties argument. Registering a Managed Service
- * will always result in a callback to the <code>updated()</code> method
+ * If it has no such {@code Configuration} object, then it calls back
+ * with a {@code null} properties argument. Registering a Managed Service
+ * will always result in a callback to the {@code updated()} method
  * provided the Configuration Admin service is, or becomes active. This callback
  * must always be done asynchronously.
  * 
  * <p>
- * Else, every time that either of the <code>updated()</code> methods is
- * called on that <code>Configuration</code> object, the
- * <code>ManagedService.updated()</code> method with the new properties is
- * called. If the <code>delete()</code> method is called on that
- * <code>Configuration</code> object, <code>ManagedService.updated()</code>
- * is called with a <code>null</code> for the properties parameter. All these
+ * Else, every time that either of the {@code updated()} methods is
+ * called on that {@code Configuration} object, the
+ * {@code ManagedService.updated()} method with the new properties is
+ * called. If the {@code delete()} method is called on that
+ * {@code Configuration} object, {@code ManagedService.updated()}
+ * is called with a {@code null} for the properties parameter. All these
  * callbacks must be done asynchronously.
  * 
  * <p>
@@ -84,9 +84,9 @@ import java.util.Dictionary;
  *     public synchronized void updated(
  *       Dictionary configuration  ) {
  *       if ( configuration == 
- * <code>
+ * {@code 
  * null
- * </code>
+ * }
  *   )
  *         registration.setProperties( getDefaults() );
  *       else {
@@ -105,21 +105,21 @@ import java.util.Dictionary;
  * registration properties. This will allow the Configuration Admin service to
  * set properties on services which can then be used by other applications.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 6dc466c566ce80e1cd8dfc4d78e4a9c699c7b655 $
  */
 public interface ManagedService {
 	/**
 	 * Update the configuration for a Managed Service.
 	 * 
 	 * <p>
-	 * When the implementation of <code>updated(Dictionary)</code> detects any
+	 * When the implementation of {@code updated(Dictionary)} detects any
 	 * kind of error in the configuration properties, it should create a new
-	 * <code>ConfigurationException</code> which describes the problem. This
+	 * {@code ConfigurationException} which describes the problem. This
 	 * can allow a management system to provide useful information to a human
 	 * administrator.
 	 * 
 	 * <p>
-	 * If this method throws any other <code>Exception</code>, the
+	 * If this method throws any other {@code Exception}, the
 	 * Configuration Admin service must catch it and should log it.
 	 * <p>
 	 * The Configuration Admin service must call this method asynchronously
@@ -128,9 +128,9 @@ public interface ManagedService {
 	 * registration when they execute the registration in a synchronized method.
 	 * 
 	 * @param properties A copy of the Configuration properties, or
-	 *        <code>null</code>. This argument must not contain the
+	 *        {@code null}. This argument must not contain the
 	 *        "service.bundleLocation" property. The value of this property may
-	 *        be obtained from the <code>Configuration.getBundleLocation</code>
+	 *        be obtained from the {@code Configuration.getBundleLocation}
 	 *        method.
 	 * @throws ConfigurationException when the update fails
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedServiceFactory.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedServiceFactory.java
index 8c334c0..4a765ac 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/ManagedServiceFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,10 +29,10 @@ import java.util.Dictionary;
  * <p>
  * Each of these <i>service instances </i> is represented, in the persistent
  * storage of the Configuration Admin service, by a factory
- * <code>Configuration</code> object that has a PID. When such a
- * <code>Configuration</code> is updated, the Configuration Admin service
- * calls the <code>ManagedServiceFactory</code> updated method with the new
- * properties. When <code>updated</code> is called with a new PID, the Managed
+ * {@code Configuration} object that has a PID. When such a
+ * {@code Configuration} is updated, the Configuration Admin service
+ * calls the {@code ManagedServiceFactory} updated method with the new
+ * properties. When {@code updated} is called with a new PID, the Managed
  * Service Factory should create a new factory instance based on these
  * configuration properties. When called with a PID that it has seen before, it
  * should update that existing service instance with the new configuration
@@ -44,7 +44,7 @@ import java.util.Dictionary;
  * created. The semantics of a factory instance are defined by the Managed
  * Service Factory. However, if the factory instance is registered as a service
  * object with the service registry, its PID should match the PID of the
- * corresponding <code>Configuration</code> object (but it should <b>not </b>
+ * corresponding {@code Configuration} object (but it should <b>not </b>
  * be registered as a Managed Service!).
  * 
  * <p>
@@ -92,7 +92,7 @@ import java.util.Dictionary;
  *   
  * </pre>
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 107d3da81f09a25309cc8052073057afdd2d36e3 $
  */
 public interface ManagedServiceFactory {
 	/**
@@ -106,19 +106,19 @@ public interface ManagedServiceFactory {
 	 * Create a new instance, or update the configuration of an existing
 	 * instance.
 	 * 
-	 * If the PID of the <code>Configuration</code> object is new for the
+	 * If the PID of the {@code Configuration} object is new for the
 	 * Managed Service Factory, then create a new factory instance, using the
-	 * configuration <code>properties</code> provided. Else, update the
-	 * service instance with the provided <code>properties</code>.
+	 * configuration {@code properties} provided. Else, update the
+	 * service instance with the provided {@code properties}.
 	 * 
 	 * <p>
 	 * If the factory instance is registered with the Framework, then the
-	 * configuration <code>properties</code> should be copied to its registry
+	 * configuration {@code properties} should be copied to its registry
 	 * properties. This is not mandatory and security sensitive properties
 	 * should obviously not be copied.
 	 * 
 	 * <p>
-	 * If this method throws any <code>Exception</code>, the Configuration
+	 * If this method throws any {@code Exception}, the Configuration
 	 * Admin service must catch it and should log it.
 	 * 
 	 * <p>
@@ -128,7 +128,7 @@ public interface ManagedServiceFactory {
 	 * 
 	 * <p>
 	 * The Configuration Admin service must call this method asynchronously.
-	 * This implies that implementors of the <code>ManagedServiceFactory</code>
+	 * This implies that implementors of the {@code ManagedServiceFactory}
 	 * class can be assured that the callback will not take place during
 	 * registration when they execute the registration in a synchronized method.
 	 * 
@@ -136,7 +136,7 @@ public interface ManagedServiceFactory {
 	 * @param properties A copy of the configuration properties. This argument
 	 *        must not contain the service.bundleLocation" property. The value
 	 *        of this property may be obtained from the
-	 *        <code>Configuration.getBundleLocation</code> method.
+	 *        {@code Configuration.getBundleLocation} method.
 	 * @throws ConfigurationException when the configuration properties are
 	 *         invalid.
 	 */
@@ -149,7 +149,7 @@ public interface ManagedServiceFactory {
 	 * Remove the factory instance associated with the PID. If the instance was
 	 * registered with the service registry, it should be unregistered.
 	 * <p>
-	 * If this method throws any <code>Exception</code>, the Configuration
+	 * If this method throws any {@code Exception}, the Configuration
 	 * Admin service must catch it and should log it.
 	 * <p>
 	 * The Configuration Admin service must call this method asynchronously.
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package-info.java
new file mode 100644
index 0000000..a95cf28
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Configuration Admin Package Version 1.3.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.cm; version="[1.3,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.cm; version="[1.3,1.4)"}
+ * 
+ * @version $Id: 10168cbf1555ba91c73aff69ff27fed93f5f7e69 $
+ */
+
+package org.osgi.service.cm;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package.html
deleted file mode 100644
index 443d9c1..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Configuration Admin Package Version 1.2.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.cm; version="[1.2,2.0)"
-</pre>
-</BODY>
-
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/packageinfo
index 6ebb891..0117a56 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/packageinfo
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/cm/packageinfo
@@ -1 +1 @@
-version 1.2.1
+version 1.3
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentConstants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentConstants.java
index 2f9d089..71d2dec 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentConstants.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentConstants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,30 +19,31 @@ package org.osgi.service.component;
 /**
  * Defines standard names for Service Component constants.
  * 
- * @version $Revision: 6454 $
+ * @noimplement
+ * @version $Id: b2e509f16a23384cc6c90697b0fd8a70c8f9eae7 $
  */
 public interface ComponentConstants {
 	/**
 	 * Manifest header specifying the XML documents within a bundle that contain
 	 * the bundle's Service Component descriptions.
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The attribute value may be retrieved from the {@code Dictionary}
+	 * object returned by the {@code Bundle.getHeaders} method.
 	 */
 	public static final String	SERVICE_COMPONENT		= "Service-Component";
 
 	/**
 	 * A component property for a component configuration that contains the name
-	 * of the component as specified in the <code>name</code> attribute of the
-	 * <code>component</code> element. The value of this property must be of
-	 * type <code>String</code>.
+	 * of the component as specified in the {@code name} attribute of the
+	 * {@code component} element. The value of this property must be of
+	 * type {@code String}.
 	 */
 	public final static String	COMPONENT_NAME			= "component.name";
 
 	/**
 	 * A component property that contains the generated id for a component
 	 * configuration. The value of this property must be of type
-	 * <code>Long</code>.
+	 * {@code Long}.
 	 * 
 	 * <p>
 	 * The value of this property is assigned by the Service Component Runtime
@@ -55,15 +56,15 @@ public interface ComponentConstants {
 
 	/**
 	 * A service registration property for a Component Factory that contains the
-	 * value of the <code>factory</code> attribute. The value of this property
-	 * must be of type <code>String</code>.
+	 * value of the {@code factory} attribute. The value of this property
+	 * must be of type {@code String}.
 	 */
 	public final static String	COMPONENT_FACTORY		= "component.factory";
 
 	/**
 	 * The suffix for reference target properties. These properties contain the
 	 * filter to select the target services for a reference. The value of this
-	 * property must be of type <code>String</code>.
+	 * property must be of type {@code String}.
 	 */
 	public final static String	REFERENCE_TARGET_SUFFIX	= ".target";
 	
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentContext.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentContext.java
index aad348c..275e9ca 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentContext.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentContext.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,28 +31,29 @@ import org.osgi.framework.ServiceReference;
  * A component instance may have an activate method. If a component instance has
  * a suitable and accessible activate method, this method will be called when a
  * component configuration is activated. If the activate method takes a
- * <code>ComponentContext</code> argument, it will be passed the component
+ * {@code ComponentContext} argument, it will be passed the component
  * instance's Component Context object. If the activate method takes a
- * <code>BundleContext</code> argument, it will be passed the component
+ * {@code BundleContext} argument, it will be passed the component
  * instance's Bundle Context object. If the activate method takes a
- * <code>Map</code> argument, it will be passed an unmodifiable Map containing
+ * {@code Map} argument, it will be passed an unmodifiable Map containing
  * the component properties.
  * 
  * <p>
  * A component instance may have a deactivate method. If a component instance
  * has a suitable and accessible deactivate method, this method will be called
  * when the component configuration is deactivated. If the deactivate method
- * takes a <code>ComponentContext</code> argument, it will be passed the
+ * takes a {@code ComponentContext} argument, it will be passed the
  * component instance's Component Context object. If the deactivate method takes
- * a <code>BundleContext</code> argument, it will be passed the component
+ * a {@code BundleContext} argument, it will be passed the component
  * instance's Bundle Context object. If the deactivate method takes a
- * <code>Map</code> argument, it will be passed an unmodifiable Map containing
- * the component properties. If the deactivate method takes an <code>int</code>
- * or <code>Integer</code> argument, it will be passed the reason code for the
+ * {@code Map} argument, it will be passed an unmodifiable Map containing
+ * the component properties. If the deactivate method takes an {@code int}
+ * or {@code Integer} argument, it will be passed the reason code for the
  * component instance's deactivation.
  * 
  * @ThreadSafe
- * @version $Revision: 6462 $
+ * @noimplement
+ * @version $Id: 78c996676c92ad2d2457f75337b3d97a18c88e5d $
  */
 public interface ComponentContext {
 	/**
@@ -67,19 +68,19 @@ public interface ComponentContext {
 	 * Returns the service object for the specified reference name.
 	 * 
 	 * <p>
-	 * If the cardinality of the reference is <code>0..n</code> or
-	 * <code>1..n</code> and multiple services are bound to the reference, the
+	 * If the cardinality of the reference is {@code 0..n} or
+	 * {@code 1..n} and multiple services are bound to the reference, the
 	 * service with the highest ranking (as specified in its
-	 * <code>Constants.SERVICE_RANKING</code> property) is returned. If there is
+	 * {@code Constants.SERVICE_RANKING} property) is returned. If there is
 	 * a tie in ranking, the service with the lowest service ID (as specified in
-	 * its <code>Constants.SERVICE_ID</code> property); that is, the service
+	 * its {@code Constants.SERVICE_ID} property); that is, the service
 	 * that was registered first is returned.
 	 * 
 	 * @param name The name of a reference as specified in a
-	 *        <code>reference</code> element in this component's description.
-	 * @return A service object for the referenced service or <code>null</code>
-	 *         if the reference cardinality is <code>0..1</code> or
-	 *         <code>0..n</code> and no bound service is available.
+	 *        {@code reference} element in this component's description.
+	 * @return A service object for the referenced service or {@code null}
+	 *         if the reference cardinality is {@code 0..1} or
+	 *         {@code 0..n} and no bound service is available.
 	 * @throws ComponentException If the Service Component Runtime catches an
 	 *         exception while activating the bound service.
 	 */
@@ -87,16 +88,16 @@ public interface ComponentContext {
 
 	/**
 	 * Returns the service object for the specified reference name and
-	 * <code>ServiceReference</code>.
+	 * {@code ServiceReference}.
 	 * 
 	 * @param name The name of a reference as specified in a
-	 *        <code>reference</code> element in this component's description.
-	 * @param reference The <code>ServiceReference</code> to a bound service.
-	 *        This must be a <code>ServiceReference</code> provided to the
+	 *        {@code reference} element in this component's description.
+	 * @param reference The {@code ServiceReference} to a bound service.
+	 *        This must be a {@code ServiceReference} provided to the
 	 *        component via the bind or unbind method for the specified
 	 *        reference name.
-	 * @return A service object for the referenced service or <code>null</code>
-	 *         if the specified <code>ServiceReference</code> is not a bound
+	 * @return A service object for the referenced service or {@code null}
+	 *         if the specified {@code ServiceReference} is not a bound
 	 *         service for the specified reference name.
 	 * @throws ComponentException If the Service Component Runtime catches an
 	 *         exception while activating the bound service.
@@ -107,12 +108,12 @@ public interface ComponentContext {
 	 * Returns the service objects for the specified reference name.
 	 * 
 	 * @param name The name of a reference as specified in a
-	 *        <code>reference</code> element in this component's description.
+	 *        {@code reference} element in this component's description.
 	 * @return An array of service objects for the referenced service or
-	 *         <code>null</code> if the reference cardinality is
-	 *         <code>0..1</code> or <code>0..n</code> and no bound service is
-	 *         available. If the reference cardinality is <code>0..1</code> or
-	 *         <code>1..1</code> and a bound service is available, the array
+	 *         {@code null} if the reference cardinality is
+	 *         {@code 0..1} or {@code 0..n} and no bound service is
+	 *         available. If the reference cardinality is {@code 0..1} or
+	 *         {@code 1..1} and a bound service is available, the array
 	 *         will have exactly one element.
 	 * @throws ComponentException If the Service Component Runtime catches an
 	 *         exception while activating a bound service.
@@ -120,25 +121,25 @@ public interface ComponentContext {
 	public Object[] locateServices(String name);
 
 	/**
-	 * Returns the <code>BundleContext</code> of the bundle which contains this
+	 * Returns the {@code BundleContext} of the bundle which contains this
 	 * component.
 	 * 
-	 * @return The <code>BundleContext</code> of the bundle containing this
+	 * @return The {@code BundleContext} of the bundle containing this
 	 *         component.
 	 */
 	public BundleContext getBundleContext();
 
 	/**
 	 * If the component instance is registered as a service using the
-	 * <code>servicefactory="true"</code> attribute, then this method
+	 * {@code servicefactory="true"} attribute, then this method
 	 * returns the bundle using the service provided by the component instance.
 	 * <p>
-	 * This method will return <code>null</code> if:
+	 * This method will return {@code null} if:
 	 * <ul>
 	 * <li>The component instance is not a service, then no bundle can be using
 	 * it as a service.
 	 * <li>The component instance is a service but did not specify the
-	 * <code>servicefactory="true"</code> attribute, then all bundles
+	 * {@code servicefactory="true"} attribute, then all bundles
 	 * using the service provided by the component instance will share the same
 	 * component instance.
 	 * <li>The service provided by the component instance is not currently being
@@ -146,7 +147,7 @@ public interface ComponentContext {
 	 * </ul>
 	 * 
 	 * @return The bundle using the component instance as a service or
-	 *         <code>null</code>.
+	 *         {@code null}.
 	 */
 	public Bundle getUsingBundle();
 
@@ -162,7 +163,7 @@ public interface ComponentContext {
 	 * Enables the specified component name. The specified component name must
 	 * be in the same bundle as this component.
 	 * 
-	 * @param name The name of a component or <code>null</code> to indicate all
+	 * @param name The name of a component or {@code null} to indicate all
 	 *        components in the bundle.
 	 */
 	public void enableComponent(String name);
@@ -177,14 +178,14 @@ public interface ComponentContext {
 
 	/**
 	 * If the component instance is registered as a service using the
-	 * <code>service</code> element, then this method returns the service
+	 * {@code service} element, then this method returns the service
 	 * reference of the service provided by this component instance.
 	 * <p>
-	 * This method will return <code>null</code> if the component instance is
+	 * This method will return {@code null} if the component instance is
 	 * not registered as a service.
 	 * 
-	 * @return The <code>ServiceReference</code> object for the component
-	 *         instance or <code>null</code> if the component instance is not
+	 * @return The {@code ServiceReference} object for the component
+	 *         instance or {@code null} if the component instance is not
 	 *         registered as a service.
 	 */
 	public ServiceReference getServiceReference();
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentException.java
index 0aee948..c9ae370 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentException.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@ package org.osgi.service.component;
 /**
  * Unchecked exception which may be thrown by the Service Component Runtime.
  * 
- * @version $Revision: 6083 $
+ * @version $Id: ce00b5bdbe563ef48a1e76cfc6ce88ce2e13298b $
  */
 public class ComponentException extends RuntimeException {
 	static final long	serialVersionUID	= -7438212656298726924L;
@@ -28,7 +28,7 @@ public class ComponentException extends RuntimeException {
 	 * Construct a new ComponentException with the specified message and cause.
 	 * 
 	 * @param message The message for the exception.
-	 * @param cause The cause of the exception. May be <code>null</code>.
+	 * @param cause The cause of the exception. May be {@code null}.
 	 */
 	public ComponentException(String message, Throwable cause) {
 		super(message, cause);
@@ -46,17 +46,17 @@ public class ComponentException extends RuntimeException {
 	/**
 	 * Construct a new ComponentException with the specified cause.
 	 * 
-	 * @param cause The cause of the exception. May be <code>null</code>.
+	 * @param cause The cause of the exception. May be {@code null}.
 	 */
 	public ComponentException(Throwable cause) {
 		super(cause);
 	}
 	
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * set.
 	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
+	 * @return The cause of this exception or {@code null} if no cause was
 	 *         set.
 	 */
 	public Throwable getCause() {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentFactory.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentFactory.java
index 1c77177..59ca74f 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,14 +19,15 @@ package org.osgi.service.component;
 import java.util.Dictionary;
 
 /**
- * When a component is declared with the <code>factory</code> attribute on its
- * <code>component</code> element, the Service Component Runtime will register
+ * When a component is declared with the {@code factory} attribute on its
+ * {@code component} element, the Service Component Runtime will register
  * a Component Factory service to allow new component configurations to be
  * created and activated rather than automatically creating and activating
  * component configuration as necessary.
  * 
  * @ThreadSafe
- * @version $Revision: 5654 $
+ * @noimplement
+ * @version $Id: 7ec637e902c10319017d2a7c9e67bc76127dbce4 $
  */
 public interface ComponentFactory {
 	/**
@@ -34,11 +35,11 @@ public interface ComponentFactory {
 	 * may be provided for the component configuration.
 	 * 
 	 * @param properties Additional properties for the component configuration
-	 *        or <code>null</code> if there are no additional properties.
-	 * @return A <code>ComponentInstance</code> object encapsulating the
+	 *        or {@code null} if there are no additional properties.
+	 * @return A {@code ComponentInstance} object encapsulating the
 	 *         component instance of the component configuration. The component
 	 *         configuration has been activated and, if the component specifies
-	 *         a <code>service</code> element, the component instance has been
+	 *         a {@code service} element, the component instance has been
 	 *         registered as a service.
 	 * @throws ComponentException If the Service Component Runtime is unable to
 	 *         activate the component configuration.
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentInstance.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentInstance.java
index f2bd2cb..2eb0aae 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentInstance.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/ComponentInstance.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,7 +26,8 @@ package org.osgi.service.component;
  * created when the component configuration is activated again.
  * 
  * @ThreadSafe
- * @version $Revision: 5654 $
+ * @noimplement
+ * @version $Id: 153a0cbf3bc5bd82afeceea35cfd6dcd8498083e $
  */
 public interface ComponentInstance {
 	/**
@@ -39,7 +40,7 @@ public interface ComponentInstance {
 	/**
 	 * Returns the component instance of the activated component configuration.
 	 * 
-	 * @return The component instance or <code>null</code> if the component
+	 * @return The component instance or {@code null} if the component
 	 *         configuration has been deactivated.
 	 */
 	public Object getInstance();
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package-info.java
new file mode 100644
index 0000000..56d7919
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Service Component Package Version 1.1.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.component; version="[1.1,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.component; version="[1.1,1.2)"}
+ * 
+ * @version $Id: b9d67bb6dc2a108f89d826771b56d7b3a67b3e9b $
+ */
+
+package org.osgi.service.component;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package.html
deleted file mode 100644
index 2e7717e..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/component/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Service Component Package Version 1.1.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.component; version="[1.1,2.0)"
-</pre>
-</BODY>
-
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Constants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Constants.java
index 8787256..cc28a91 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Constants.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Constants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,10 +20,11 @@ package org.osgi.service.device;
  * {@link Device} and {@link Driver} services.
  * 
  * <p>
- * The values associated with these keys are of type <code>java.lang.String</code>,
+ * The values associated with these keys are of type {@code java.lang.String},
  * unless otherwise stated.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 58acb0b3339b5db94bb014d32f4eeb360a394fd4 $
  * @since 1.1
  * @see Device
  * @see Driver
@@ -33,8 +34,8 @@ public interface Constants {
 	 * Property (named "DRIVER_ID") identifying a driver.
 	 * 
 	 * <p>
-	 * A <code>DRIVER_ID</code> should start with the reversed domain name of the
-	 * company that implemented the driver (e.g., <code>com.acme</code>), and
+	 * A {@code DRIVER_ID} should start with the reversed domain name of the
+	 * company that implemented the driver (e.g., {@code com.acme}), and
 	 * must meet the following requirements:
 	 * 
 	 * <ul>
@@ -46,14 +47,14 @@ public interface Constants {
 	 * </ul>
 	 * 
 	 * <p>
-	 * This property is mandatory, i.e., every <code>Driver</code> service must be
+	 * This property is mandatory, i.e., every {@code Driver} service must be
 	 * registered with it.
 	 */
 	public static final String	DRIVER_ID			= "DRIVER_ID";
 	/**
 	 * Property (named "DEVICE_CATEGORY") containing a human readable
 	 * description of the device categories implemented by a device. This
-	 * property is of type <code>String[]</code>
+	 * property is of type {@code String[]}
 	 * 
 	 * <p>
 	 * Services registered with this property will be treated as devices and
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Device.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Device.java
index 2af0330..8d343e8 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Device.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Device.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,20 +23,20 @@ package org.osgi.service.device;
  * A service must implement this interface or use the
  * {@link Constants#DEVICE_CATEGORY} registration property to indicate that it
  * is a device. Any services implementing this interface or registered with the
- * <code>DEVICE_CATEGORY</code> property will be discovered by the device
+ * {@code DEVICE_CATEGORY} property will be discovered by the device
  * manager.
  * 
  * <p>
  * Device services implementing this interface give the device manager the
  * opportunity to indicate to the device that no drivers were found that could
  * (further) refine it. In this case, the device manager calls the
- * {@link #noDriverFound} method on the <code>Device</code> object.
+ * {@link #noDriverFound} method on the {@code Device} object.
  * 
  * <p>
  * Specialized device implementations will extend this interface by adding
  * methods appropriate to their device category to it.
  * 
- * @version $Revision: 5654 $
+ * @version $Id: 74fe5066d2a5a096645f348ec9f7320859c30a88 $
  * @see Driver
  * @ThreadSafe
  */
@@ -50,12 +50,12 @@ public interface Device {
 	public static final int	MATCH_NONE	= 0;
 
 	/**
-	 * Indicates to this <code>Device</code> object that the device manager has
+	 * Indicates to this {@code Device} object that the device manager has
 	 * failed to attach any drivers to it.
 	 * 
 	 * <p>
-	 * If this <code>Device</code> object can be configured differently, the
-	 * driver that registered this <code>Device</code> object may unregister it
+	 * If this {@code Device} object can be configured differently, the
+	 * driver that registered this {@code Device} object may unregister it
 	 * and register a different Device service instead.
 	 */
 	public void noDriverFound();
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java
index 98e3617..5e30cca 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Driver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,14 +18,14 @@ package org.osgi.service.device;
 import org.osgi.framework.ServiceReference;
 
 /**
- * A <code>Driver</code> service object must be registered by each Driver bundle
+ * A {@code Driver} service object must be registered by each Driver bundle
  * wishing to attach to Device services provided by other drivers. For each
  * newly discovered {@link Device} object, the device manager enters a bidding
- * phase. The <code>Driver</code> object whose {@link #match} method bids the
- * highest for a particular <code>Device</code> object will be instructed by the
- * device manager to attach to the <code>Device</code> object.
+ * phase. The {@code Driver} object whose {@link #match} method bids the
+ * highest for a particular {@code Device} object will be instructed by the
+ * device manager to attach to the {@code Device} object.
  * 
- * @version $Revision: 5654 $
+ * @version $Id: 5b8c43ba272e71e061214a9937671979576791e4 $
  * @see Device
  * @see DriverLocator
  * @ThreadSafe
@@ -42,7 +42,7 @@ public interface Driver {
 	 * <p>
 	 * The return value must be one of the possible match values defined in the
 	 * device category definition for the given Device service, or
-	 * <code>Device.MATCH_NONE</code> if the category of the Device service is
+	 * {@code Device.MATCH_NONE} if the category of the Device service is
 	 * not recognized.
 	 * 
 	 * <p>
@@ -60,11 +60,11 @@ public interface Driver {
 	 * The match function is called by the device manager during the matching
 	 * process.
 	 * 
-	 * @param reference the <code>ServiceReference</code> object of the device
+	 * @param reference the {@code ServiceReference} object of the device
 	 *        to match
 	 * 
 	 * @return value indicating how well this driver can support the given
-	 *         Device service, or <code>Device.MATCH_NONE</code> if it cannot
+	 *         Device service, or {@code Device.MATCH_NONE} if it cannot
 	 *         support the Device service at all
 	 * 
 	 * @throws java.lang.Exception if this Driver service cannot examine the
@@ -74,13 +74,13 @@ public interface Driver {
 
 	/**
 	 * Attaches this Driver service to the Device service represented by the
-	 * given <code>ServiceReference</code> object.
+	 * given {@code ServiceReference} object.
 	 * 
 	 * <p>
-	 * A return value of <code>null</code> indicates that this Driver service
+	 * A return value of {@code null} indicates that this Driver service
 	 * has successfully attached to the given Device service. If this Driver
 	 * service is unable to attach to the given Device service, but knows of a
-	 * more suitable Driver service, it must return the <code>DRIVER_ID</code>
+	 * more suitable Driver service, it must return the {@code DRIVER_ID}
 	 * of that Driver service. This allows for the implementation of referring
 	 * drivers whose only purpose is to refer to other drivers capable of
 	 * handling a given Device service.
@@ -93,12 +93,12 @@ public interface Driver {
 	 * <p>
 	 * This method is called by the device manager.
 	 * 
-	 * @param reference the <code>ServiceReference</code> object of the device
+	 * @param reference the {@code ServiceReference} object of the device
 	 *        to attach to
 	 * 
-	 * @return <code>null</code> if this Driver service has successfully
+	 * @return {@code null} if this Driver service has successfully
 	 *         attached to the given Device service, or the
-	 *         <code>DRIVER_ID</code> of a more suitable driver
+	 *         {@code DRIVER_ID} of a more suitable driver
 	 * 
 	 * @throws java.lang.Exception if the driver cannot attach to the given
 	 *         device and does not know of a more suitable driver
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java
index 2726b99..a2d12a3 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverLocator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,42 +21,42 @@ import java.util.Dictionary;
 
 /**
  * A Driver Locator service can find and load device driver bundles given a
- * property set. Each driver is represented by a unique <code>DRIVER_ID</code>.
+ * property set. Each driver is represented by a unique {@code DRIVER_ID}.
  * <p>
  * Driver Locator services provide the mechanism for dynamically downloading new
  * device driver bundles into an OSGi environment. They are supplied by
  * providers and encapsulate all provider-specific details related to the
  * location and acquisition of driver bundles.
  * 
- * @version $Revision: 5654 $
+ * @version $Id: 85498ef85f1a48248b6dc01455264b2f866022ea $
  * @see Driver
  * @ThreadSafe
  */
 public interface DriverLocator {
 	/**
-	 * Returns an array of <code>DRIVER_ID</code> strings of drivers capable of
+	 * Returns an array of {@code DRIVER_ID} strings of drivers capable of
 	 * attaching to a device with the given properties.
 	 * 
 	 * <p>
-	 * The property keys in the specified <code>Dictionary</code> objects are
+	 * The property keys in the specified {@code Dictionary} objects are
 	 * case-insensitive.
 	 * 
 	 * @param props the properties of the device for which a driver is sought
-	 * @return array of driver <code>DRIVER_ID</code> strings of drivers capable
+	 * @return array of driver {@code DRIVER_ID} strings of drivers capable
 	 *         of attaching to a Device service with the given properties, or
-	 *         <code>null</code> if this Driver Locator service does not know of
+	 *         {@code null} if this Driver Locator service does not know of
 	 *         any such drivers
 	 */
 	public String[] findDrivers(Dictionary props);
 
 	/**
-	 * Get an <code>InputStream</code> from which the driver bundle providing a
-	 * driver with the giving <code>DRIVER_ID</code> can be installed.
+	 * Get an {@code InputStream} from which the driver bundle providing a
+	 * driver with the giving {@code DRIVER_ID} can be installed.
 	 * 
-	 * @param id the <code>DRIVER_ID</code> of the driver that needs to be
+	 * @param id the {@code DRIVER_ID} of the driver that needs to be
 	 *        installed.
-	 * @return An <code>InputStream</code> object from which the driver bundle
-	 *         can be installed or <code>null</code> if the driver with the
+	 * @return An {@code InputStream} object from which the driver bundle
+	 *         can be installed or {@code null} if the driver with the
 	 *         given ID cannot be located
 	 * @throws java.io.IOException the input stream for the bundle cannot be
 	 *         created
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java
index 59fd0b9..484c003 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/DriverSelector.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,16 +24,16 @@ import org.osgi.framework.ServiceReference;
  * there is a Driver Selector service registered with the Framework, the device
  * manager will ask it to make the selection. If there is no Driver Selector
  * service, or if it returns an invalid result, or throws an
- * <code>Exception</code>, the device manager uses the default selection
+ * {@code Exception}, the device manager uses the default selection
  * strategy.
  * 
- * @version $Revision: 5654 $
+ * @version $Id: f3ab3493b4fe468954a709a5699f92244efacb0e $
  * @since 1.1
  * @ThreadSafe
  */
 public interface DriverSelector {
 	/**
-	 * Return value from <code>DriverSelector.select</code>, if no Driver
+	 * Return value from {@code DriverSelector.select}, if no Driver
 	 * service should be attached to the Device service. The value is -1.
 	 */
 	public static final int	SELECT_NONE	= -1;
@@ -42,13 +42,13 @@ public interface DriverSelector {
 	 * Select one of the matching Driver services. The device manager calls this
 	 * method if there is at least one driver bidding for a device. Only Driver
 	 * services that have responded with nonzero (not {@link Device#MATCH_NONE})
-	 * <code></code> match values will be included in the list.
+	 * {@code } match values will be included in the list.
 	 * 
-	 * @param reference the <code>ServiceReference</code> object of the Device
+	 * @param reference the {@code ServiceReference} object of the Device
 	 *        service.
 	 * @param matches the array of all non-zero matches.
-	 * @return index into the array of <code>Match</code> objects, or
-	 *         <code>SELECT_NONE</code> if no Driver service should be attached
+	 * @return index into the array of {@code Match} objects, or
+	 *         {@code SELECT_NONE} if no Driver service should be attached
 	 */
 	public int select(ServiceReference reference, Match[] matches);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java
index 6410659..aed9fbd 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/Match.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,19 +18,20 @@ package org.osgi.service.device;
 import org.osgi.framework.ServiceReference;
 
 /**
- * Instances of <code>Match</code> are used in the {@link DriverSelector#select}
+ * Instances of {@code Match} are used in the {@link DriverSelector#select}
  * method to identify Driver services matching a Device service.
  * 
- * @version $Revision: 5654 $
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: f94fdeb11ab061d578d9e279b444b80ebe34129e $
  * @since 1.1
  * @see DriverSelector
- * @ThreadSafe
  */
 public interface Match {
 	/**
 	 * Return the reference to a Driver service.
 	 * 
-	 * @return <code>ServiceReference</code> object to a Driver service.
+	 * @return {@code ServiceReference} object to a Driver service.
 	 */
 	public ServiceReference getDriver();
 
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package-info.java
new file mode 100644
index 0000000..4743484
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Device Access Package Version 1.1.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.device; version="[1.1,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.device; version="[1.1,1.2)"}
+ * 
+ * @version $Id: 0c957a50efbc06eb4bb7f1c46695a757bc12e9a6 $
+ */
+
+package org.osgi.service.device;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package.html
deleted file mode 100644
index 7647c20..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/device/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Device Access Package Version 1.1.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.device; version="[1.1,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/Event.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/Event.java
index 42cdb1b..bcf41e4 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/Event.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/Event.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,11 +16,14 @@
 
 package org.osgi.service.event;
 
+import static org.osgi.service.event.EventConstants.EVENT_TOPIC;
+
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 import org.osgi.framework.Filter;
@@ -28,11 +31,11 @@ import org.osgi.framework.Filter;
 /**
  * An event.
  * 
- * <code>Event</code> objects are delivered to <code>EventHandler</code>
+ * {@code Event} objects are delivered to {@code EventHandler}
  * services which subscribe to the topic of the event.
  * 
  * @Immutable
- * @version $Revision: 7003 $
+ * @version $Id: 3f12c0b086a6cda93122ce3cb2b83e21a5023ecc $
  */
 public class Event {
 	/**
@@ -43,81 +46,85 @@ public class Event {
 	 * The properties carried by this event. Keys are strings and values are
 	 * objects
 	 */
-	private final Map		/* <String,Object> */properties;
+	private final EventProperties	properties;
 
 	/**
 	 * Constructs an event.
 	 * 
 	 * @param topic The topic of the event.
-	 * @param properties The event's properties (may be <code>null</code>). A
-	 *        property whose key is not of type <code>String</code> will be
+	 * @param properties The event's properties (may be {@code null}). A
+	 *        property whose key is not of type {@code String} will be
 	 *        ignored.
 	 * @throws IllegalArgumentException If topic is not a valid topic name.
 	 * @since 1.2
 	 */
-	public Event(String topic, Map/* <String,Object> */properties) {
+	public Event(String topic, Map<String, ? > properties) {
 		validateTopicName(topic);
 		this.topic = topic;
-		int size = (properties == null) ? 1 : (properties.size() + 1);
-		Map p = new HashMap(size);
-		if (properties != null) {
-			for (Iterator iter = properties.keySet().iterator(); iter.hasNext();) {
-				Object key = iter.next();
-				if (key instanceof String) {
-					Object value = properties.get(key);
-					p.put(key, value);
-				}
-			}
-		}
-		p.put(EventConstants.EVENT_TOPIC, topic);
-		this.properties = p; // safely publish the map
+		// safely publish the event properties
+		this.properties = (properties instanceof EventProperties) ? (EventProperties) properties
+				: new EventProperties(properties);
 	}
 
 	/**
 	 * Constructs an event.
 	 * 
 	 * @param topic The topic of the event.
-	 * @param properties The event's properties (may be <code>null</code>). A
-	 *        property whose key is not of type <code>String</code> will be
+	 * @param properties The event's properties (may be {@code null}). A
+	 *        property whose key is not of type {@code String} will be
 	 *        ignored.
 	 * @throws IllegalArgumentException If topic is not a valid topic name.
 	 */
-	public Event(String topic, Dictionary/* <String,Object> */properties) {
+	public Event(String topic, Dictionary<String, ? > properties) {
 		validateTopicName(topic);
 		this.topic = topic;
-		int size = (properties == null) ? 1 : (properties.size() + 1);
-		Map p = new HashMap(size);
-		if (properties != null) {
-			for (Enumeration e = properties.keys(); e.hasMoreElements();) {
-				Object key = e.nextElement();
-				if (key instanceof String) {
-					Object value = properties.get(key);
-					p.put(key, value);
-				}
-			}
-		}
-		p.put(EventConstants.EVENT_TOPIC, topic);
-		this.properties = p; // safely publish the map
+		// safely publish the event properties
+		this.properties = new EventProperties(properties);
 	}
 
 	/**
-	 * Retrieves a property.
+	 * Retrieve the value of an event property. The event topic may be retrieved
+	 * with the property name "event.topics".
 	 * 
-	 * @param name the name of the property to retrieve
-	 * @return The value of the property, or <code>null</code> if not found.
+	 * @param name The name of the property to retrieve.
+	 * @return The value of the property, or {@code null} if not found.
 	 */
 	public final Object getProperty(String name) {
+		if (EVENT_TOPIC.equals(name)) {
+			return topic;
+		}
 		return properties.get(name);
 	}
 
 	/**
-	 * Returns a list of this event's property names.
+	 * Indicate the presence of an event property. The event topic is present
+	 * using the property name "event.topics".
+	 * 
+	 * @param name The name of the property.
+	 * @return {@code true} if a property with the specified name is in the
+	 *         event. This property may have a {@code null} value.
+	 *         {@code false} otherwise.
+	 * @since 1.3
+	 */
+	public final boolean containsProperty(String name) {
+		if (EVENT_TOPIC.equals(name)) {
+			return true;
+		}
+		return properties.containsKey(name);
+	}
+
+	/**
+	 * Returns a list of this event's property names. The list will include the
+	 * event topic property name "event.topics".
 	 * 
 	 * @return A non-empty array with one element per property.
 	 */
 	public final String[] getPropertyNames() {
-		return (String[]) properties.keySet().toArray(
-				new String[properties.size()]);
+		int size = properties.size();
+		String[] result = new String[size + 1];
+		properties.keySet().toArray(result);
+		result[size] = EVENT_TOPIC;
+		return result;
 	}
 
 	/**
@@ -138,19 +145,21 @@ public class Event {
 	 *         otherwise.
 	 */
 	public final boolean matches(Filter filter) {
-		return filter.matchCase(new UnmodifiableDictionary(properties));
+		return filter.matchCase(new FilterProperties(topic, properties));
 	}
 
 	/**
-	 * Compares this <code>Event</code> object to another object.
+	 * Compares this {@code Event} object to another object.
 	 * 
 	 * <p>
 	 * An event is considered to be <b>equal to</b> another event if the topic
-	 * is equal and the properties are equal.
+	 * is equal and the properties are equal. The properties are compared using
+	 * the {@code java.util.Map.equals()} rules which includes identity
+	 * comparison for array values.
 	 * 
-	 * @param object The <code>Event</code> object to be compared.
-	 * @return <code>true</code> if <code>object</code> is a <code>Event</code>
-	 *         and is equal to this object; <code>false</code> otherwise.
+	 * @param object The {@code Event} object to be compared.
+	 * @return {@code true} if {@code object} is a {@code Event}
+	 *         and is equal to this object; {@code false} otherwise.
 	 */
 	public boolean equals(Object object) {
 		if (object == this) { // quick test
@@ -166,7 +175,7 @@ public class Event {
 	}
 
 	/**
-	 * Returns a hash code value for the object.
+	 * Returns a hash code value for this object.
 	 * 
 	 * @return An integer which is a hash code value for this object.
 	 */
@@ -182,7 +191,7 @@ public class Event {
 	 * @return The string representation of this event.
 	 */
 	public String toString() {
-		return getClass().getName() + " [topic=" + topic + "]";  
+		return getClass().getName() + " [topic=" + topic + "]";
 	}
 
 	/**
@@ -192,72 +201,92 @@ public class Event {
 	 * @throws IllegalArgumentException If the topic name is invalid.
 	 */
 	private static void validateTopicName(String topic) {
-	    char[] chars = topic.toCharArray();
-	    int length = chars.length;
-	    if (length == 0) {
+		char[] chars = topic.toCharArray();
+		int length = chars.length;
+		if (length == 0) {
 			throw new IllegalArgumentException("empty topic");
 		}
 		for (int i = 0; i < length; i++) {
-	        char ch = chars[i];
-	        if (ch == '/') {
-	        	// Can't start or end with a '/' but anywhere else is okay
+			char ch = chars[i];
+			if (ch == '/') {
+				// Can't start or end with a '/' but anywhere else is okay
 				if (i == 0 || (i == length - 1)) {
-	                throw new IllegalArgumentException(
-							"invalid topic: "
-							+ topic); 
-	            }
-	            // Can't have "//" as that implies empty token
-	            if (chars[i-1] == '/') {
-	                throw new IllegalArgumentException(
-							"invalid topic: "
-							+ topic); 
-	            }
-	            continue;
-	        }
-	        if (('A' <= ch) && (ch <= 'Z')) {
-	            continue;
-	        }
-	        if (('a' <= ch) && (ch <= 'z')) {
-	            continue;
-	        }
-	        if (('0' <= ch) && (ch <= '9')) {
-	            continue;
-	        }
-	        if ((ch == '_') || (ch == '-')) {
-	            continue;
-	        }
-	        throw new IllegalArgumentException("invalid topic: " + topic); 
-	    }
+					throw new IllegalArgumentException("invalid topic: "
+							+ topic);
+				}
+				// Can't have "//" as that implies empty token
+				if (chars[i - 1] == '/') {
+					throw new IllegalArgumentException("invalid topic: "
+							+ topic);
+				}
+				continue;
+			}
+			if (('A' <= ch) && (ch <= 'Z')) {
+				continue;
+			}
+			if (('a' <= ch) && (ch <= 'z')) {
+				continue;
+			}
+			if (('0' <= ch) && (ch <= '9')) {
+				continue;
+			}
+			if ((ch == '_') || (ch == '-')) {
+				continue;
+			}
+			throw new IllegalArgumentException("invalid topic: " + topic);
+		}
 	}
-	
+
 	/**
-	 * Unmodifiable wrapper for Dictionary.
+	 * Dictionary to use for Filter matching.
 	 */
-	private static class UnmodifiableDictionary extends Dictionary {
-		private final Map	wrapped;
-		UnmodifiableDictionary(Map wrapped) {
-			this.wrapped = wrapped;
+	static private final class FilterProperties extends
+			Dictionary<String, Object> {
+		private final String			topic;
+		private final EventProperties	properties;
+
+		FilterProperties(String topic, EventProperties properties) {
+			this.topic = topic;
+			this.properties = properties;
 		}
-		public Enumeration elements() {
-			return Collections.enumeration(wrapped.values());
+
+		public Enumeration<Object> elements() {
+			Collection<Object> values = properties.values();
+			List<Object> result = new ArrayList<Object>(values.size() + 1);
+			result.add(topic);
+			result.addAll(values);
+			return Collections.enumeration(result);
 		}
+
 		public Object get(Object key) {
-			return wrapped.get(key);
+			if (EVENT_TOPIC.equals(key)) {
+				return topic;
+			}
+			return properties.get(key);
 		}
+
 		public boolean isEmpty() {
-			return wrapped.isEmpty();
+			return false;
 		}
-		public Enumeration keys() {
-			return Collections.enumeration(wrapped.keySet());
+
+		public Enumeration<String> keys() {
+			Collection<String> keys = properties.keySet();
+			List<String> result = new ArrayList<String>(keys.size() + 1);
+			result.add(EVENT_TOPIC);
+			result.addAll(keys);
+			return Collections.enumeration(result);
 		}
-		public Object put(Object key, Object value) {
+
+		public Object put(String key, Object value) {
 			throw new UnsupportedOperationException();
 		}
+
 		public Object remove(Object key) {
 			throw new UnsupportedOperationException();
 		}
+
 		public int size() {
-			return wrapped.size();
+			return properties.size() + 1;
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventAdmin.java
index f48a10f..63b362b 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,18 +21,20 @@ package org.osgi.service.event;
  * Event Admin service and call one of the event delivery methods.
  * 
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: d21a164e318da4b9ca165d1e481e270610cc0c77 $
  */
 public interface EventAdmin {
 	/**
-	 * Initiate asynchronous delivery of an event. This method returns to the
-	 * caller before delivery of the event is completed.
+	 * Initiate asynchronous, ordered delivery of an event. This method returns
+	 * to the caller before delivery of the event is completed. Events are
+	 * delivered in the order that they are received by this method.
 	 * 
 	 * @param event The event to send to all listeners which subscribe to the
 	 *        topic of the event.
 	 * 
 	 * @throws SecurityException If the caller does not have
-	 *         <code>TopicPermission[topic,PUBLISH]</code> for the topic
+	 *         {@code TopicPermission[topic,PUBLISH]} for the topic
 	 *         specified in the event.
 	 */
 	void postEvent(Event event);
@@ -45,7 +47,7 @@ public interface EventAdmin {
 	 *        topic of the event.
 	 * 
 	 * @throws SecurityException If the caller does not have
-	 *         <code>TopicPermission[topic,PUBLISH]</code> for the topic
+	 *         {@code TopicPermission[topic,PUBLISH]} for the topic
 	 *         specified in the event.
 	 */
 	void sendEvent(Event event);
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java
index ac6b484..d653d7a 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventConstants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,37 +23,40 @@ import org.osgi.framework.ServiceReference;
 import org.osgi.framework.Version;
 
 /**
- * Defines standard names for <code>EventHandler</code> properties.
+ * Defines standard names for {@code EventHandler} properties.
  * 
- * @version $Revision: 6080 $
+ * @noimplement
+ * @version $Id: 4416a32be106f158ab6f776219a2203ed54c9b7d $
  */
 public interface EventConstants {
 
 	/**
-	 * Service registration property (named <code>event.topics</code>)
-	 * specifying the <code>Event</code> topics of interest to a Event Handler
-	 * service.
+	 * Service registration property specifying the {@code Event} topics of
+	 * interest to an Event Handler service.
 	 * <p>
-	 * Event handlers SHOULD be registered with this property. The value of the
-	 * property is a string or an array of strings that describe the topics in
-	 * which the handler is interested. An asterisk ('*') may be used as a
-	 * trailing wildcard. Event Handlers which do not have a value for this
-	 * property must not receive events. More precisely, the value of each
-	 * string must conform to the following grammar:
+	 * Event handlers SHOULD be registered with this property. Each value of
+	 * this property is a string that describe the topics in which the handler
+	 * is interested. An asterisk ('*') may be used as a trailing wildcard.
+	 * Event Handlers which do not have a value for this property must not
+	 * receive events. More precisely, the value of each string must conform to
+	 * the following grammar:
 	 * 
 	 * <pre>
 	 *  topic-description := '*' | topic ( '/*' )?
 	 *  topic := token ( '/' token )*
 	 * </pre>
 	 * 
+	 * <p>
+	 * The value of this property must be of type {@code String},
+	 * {@code String[]}, or {@code Collection<String>}.
+	 * 
 	 * @see Event
 	 */
 	public static final String	EVENT_TOPIC			= "event.topics";
 
 	/**
-	 * Service Registration property (named <code>event.filter</code>)
-	 * specifying a filter to further select <code>Event</code> s of interest to
-	 * a Event Handler service.
+	 * Service Registration property specifying a filter to further select
+	 * {@code Event} s of interest to an Event Handler service.
 	 * <p>
 	 * Event handlers MAY be registered with this property. The value of this
 	 * property is a string containing an LDAP-style filter specification. Any
@@ -67,28 +70,80 @@ public interface EventConstants {
 	 * If the filter syntax is invalid, then the Event Handler must be ignored
 	 * and a warning should be logged.
 	 * 
+	 * <p>
+	 * The value of this property must be of type {@code String}.
+	 * 
 	 * @see Event
 	 * @see Filter
 	 */
 	public static final String	EVENT_FILTER		= "event.filter";
 
 	/**
+	 * Service Registration property specifying the delivery qualities requested
+	 * by an Event Handler service.
+	 * <p>
+	 * Event handlers MAY be registered with this property. Each value of this
+	 * property is a string specifying a delivery quality for the Event handler.
+	 * 
+	 * <p>
+	 * The value of this property must be of type {@code String},
+	 * {@code String[]}, or {@code Collection<String>}.
+	 * 
+	 * @see #DELIVERY_ASYNC_ORDERED
+	 * @see #DELIVERY_ASYNC_UNORDERED
+	 * @since 1.3
+	 */
+	public static final String	EVENT_DELIVERY			= "event.delivery";
+
+	/**
+	 * Event Handler delivery quality value specifying the Event Handler
+	 * requires asynchronously delivered events be delivered in order. Ordered
+	 * delivery is the default for asynchronously delivered events.
+	 * 
+	 * <p>
+	 * This delivery quality value is mutually exclusive with
+	 * {@link #DELIVERY_ASYNC_UNORDERED}. However, if both this value and
+	 * {@link #DELIVERY_ASYNC_UNORDERED} are specified for an event handler,
+	 * this value takes precedence.
+	 * 
+	 * @see #EVENT_DELIVERY
+	 * @since 1.3
+	 */
+	public static final String	DELIVERY_ASYNC_ORDERED		= "async.ordered";
+
+	/**
+	 * Event Handler delivery quality value specifying the Event Handler does
+	 * not require asynchronously delivered events be delivered in order. This
+	 * may allow an Event Admin implementation to optimize asynchronous event
+	 * delivery by relaxing ordering requirements.
+	 * 
+	 * <p>
+	 * This delivery quality value is mutually exclusive with
+	 * {@link #DELIVERY_ASYNC_ORDERED}. However, if both this value and
+	 * {@link #DELIVERY_ASYNC_ORDERED} are specified for an event handler,
+	 * {@link #DELIVERY_ASYNC_ORDERED} takes precedence.
+	 * 
+	 * @see #EVENT_DELIVERY
+	 * @since 1.3
+	 */
+	public static final String	DELIVERY_ASYNC_UNORDERED	= "async.unordered";
+
+	/**
 	 * The Distinguished Names of the signers of the bundle relevant to the
 	 * event. The type of the value for this event property is
-	 * <code>String</code> if there is a single signer or <code>String[]</code>
-	 * if there are multiple signers.
+	 * {@code String} or {@code Collection} of {@code String}.
 	 */
 	public static final String	BUNDLE_SIGNER		= "bundle.signer";
 
 	/**
 	 * The Bundle Symbolic Name of the bundle relevant to the event. The type of
-	 * the value for this event property is <code>String</code>.
+	 * the value for this event property is {@code String}.
 	 */
 	public static final String	BUNDLE_SYMBOLICNAME	= "bundle.symbolicName";
 
 	/**
 	 * The Bundle id of the bundle relevant to the event. The type of the value
-	 * for this event property is <code>Long</code>.
+	 * for this event property is {@code Long}.
 	 * 
 	 * @since 1.1
 	 */
@@ -113,20 +168,20 @@ public interface EventConstants {
 	/**
 	 * The forwarded event object. Used when rebroadcasting an event that was
 	 * sent via some other event mechanism. The type of the value for this event
-	 * property is <code>Object</code>.
+	 * property is {@code Object}.
 	 */
 	public static final String	EVENT				= "event";
 
 	/**
 	 * An exception or error. The type of the value for this event property is
-	 * <code>Throwable</code>.
+	 * {@code Throwable}.
 	 */
 	public static final String	EXCEPTION			= "exception";
 
 	/**
 	 * The name of the exception type. Must be equal to the name of the class of
 	 * the exception in the event property {@link #EXCEPTION}. The type of the
-	 * value for this event property is <code>String</code>.
+	 * value for this event property is {@code String}.
 	 * 
 	 * @since 1.1
 	 */
@@ -134,15 +189,15 @@ public interface EventConstants {
 
 	/**
 	 * The exception message. Must be equal to the result of calling
-	 * <code>getMessage()</code> on the exception in the event property
+	 * {@code getMessage()} on the exception in the event property
 	 * {@link #EXCEPTION}. The type of the value for this event property is
-	 * <code>String</code>.
+	 * {@code String}.
 	 */
 	public static final String	EXCEPTION_MESSAGE	= "exception.message";
 
 	/**
 	 * A human-readable message that is usually not localized. The type of the
-	 * value for this event property is <code>String</code>.
+	 * value for this event property is {@code String}.
 	 */
 	public static final String	MESSAGE				= "message";
 
@@ -154,26 +209,26 @@ public interface EventConstants {
 
 	/**
 	 * A service's id. The type of the value for this event property is
-	 * <code>Long</code>.
+	 * {@code Long}.
 	 */
 	public static final String	SERVICE_ID			= Constants.SERVICE_ID;
 
 	/**
 	 * A service's objectClass. The type of the value for this event property is
-	 * <code>String[]</code>.
+	 * {@code String[]}.
 	 */
 	public static final String	SERVICE_OBJECTCLASS	= "service.objectClass";
 
 	/**
 	 * A service's persistent identity. The type of the value for this event
-	 * property is <code>String</code>.
+	 * property is {@code String}.
 	 */
 	public static final String	SERVICE_PID			= Constants.SERVICE_PID;
 
 	/**
 	 * The time when the event occurred, as reported by
-	 * <code>System.currentTimeMillis()</code>. The type of the value for this
-	 * event property is <code>Long</code>.
+	 * {@code System.currentTimeMillis()}. The type of the value for this
+	 * event property is {@code Long}.
 	 */
 	public static final String	TIMESTAMP			= "timestamp";
 
@@ -184,4 +239,4 @@ public interface EventConstants {
 	 * @deprecated As of 1.1, replaced by EXCEPTION_CLASS
 	 */
 	public static final String	EXECPTION_CLASS		= "exception.class";
-}
\ No newline at end of file
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventHandler.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventHandler.java
index d25782f..3b4f07f 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventHandler.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,15 +20,15 @@ package org.osgi.service.event;
  * Listener for Events.
  * 
  * <p>
- * <code>EventHandler</code> objects are registered with the Framework service
- * registry and are notified with an <code>Event</code> object when an event
+ * {@code EventHandler} objects are registered with the Framework service
+ * registry and are notified with an {@code Event} object when an event
  * is sent or posted.
  * <p>
- * <code>EventHandler</code> objects can inspect the received
- * <code>Event</code> object to determine its topic and properties.
+ * {@code EventHandler} objects can inspect the received
+ * {@code Event} object to determine its topic and properties.
  * 
  * <p>
- * <code>EventHandler</code> objects must be registered with a service
+ * {@code EventHandler} objects must be registered with a service
  * property {@link EventConstants#EVENT_TOPIC} whose value is the list of topics
  * in which the event handler is interested.
  * <p>
@@ -47,16 +47,16 @@ package org.osgi.service.event;
  * be ignored by the Event Admin service. The Event Admin service should log a
  * warning.
  * <p>
- * Security Considerations. Bundles wishing to monitor <code>Event</code>
- * objects will require <code>ServicePermission[EventHandler,REGISTER]</code>
- * to register an <code>EventHandler</code> service. The bundle must also have
- * <code>TopicPermission[topic,SUBSCRIBE]</code> for the topic specified in
+ * Security Considerations. Bundles wishing to monitor {@code Event}
+ * objects will require {@code ServicePermission[EventHandler,REGISTER]}
+ * to register an {@code EventHandler} service. The bundle must also have
+ * {@code TopicPermission[topic,SUBSCRIBE]} for the topic specified in
  * the event in order to receive the event.
  * 
  * @see Event
  * 
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: 2b8202d10e77b774897c74714115059f46abc7e1 $
  */
 public interface EventHandler {
 	/**
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventProperties.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventProperties.java
new file mode 100644
index 0000000..d22d786
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/EventProperties.java
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.event;
+
+import static org.osgi.service.event.EventConstants.EVENT_TOPIC;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The properties for an {@link Event}. An event source can create an
+ * EventProperties object if it needs to reuse the same event properties for
+ * multiple events.
+ * 
+ * <p>
+ * The keys are all of type {@code String}. The values are of type
+ * {@code Object}. The key "event.topics" is ignored as event
+ * topics can only be set when an {@link Event} is constructed.
+ * 
+ * <p>
+ * Once constructed, an EventProperties object is unmodifiable. However, the
+ * values of the map used to construct an EventProperties object are still
+ * subject to modification as they are not deeply copied.
+ * 
+ * @Immutable
+ * @since 1.3
+ * @version $Id: 2b1e756cdb49df53926aede978132c26f31515ed $
+ */
+public class EventProperties implements Map<String, Object> {
+	/**
+	 * The properties for an event. Keys are strings and values are objects. The
+	 * object is unmodifiable.
+	 */
+	private final Map<String, Object>	properties;
+
+	/**
+	 * Create an EventProperties from the specified properties.
+	 * 
+	 * <p>
+	 * The specified properties will be copied into this EventProperties.
+	 * Properties whose key is not of type {@code String} will be ignored.
+	 * A property with the key "event.topics" will be ignored.
+	 * 
+	 * @param properties The properties to use for this EventProperties object
+	 *        (may be {@code null}).
+	 */
+	public EventProperties(Map<String, ? > properties) {
+		int size = (properties == null) ? 0 : properties.size();
+		Map<String, Object> p = new HashMap<String, Object>(size);
+		if (size > 0) {
+			for (Object key : (Set< ? >) properties.keySet()) {
+				if ((key instanceof String) && !EVENT_TOPIC.equals(key)) {
+					Object value = properties.get(key);
+					p.put((String) key, value);
+				}
+			}
+		}
+		// safely publish the map
+		this.properties = Collections.unmodifiableMap(p);
+	}
+
+	/**
+	 * Create an EventProperties from the specified dictionary.
+	 * 
+	 * <p>
+	 * The specified properties will be copied into this EventProperties.
+	 * Properties whose key is not of type {@code String} will be ignored.
+	 * A property with the key "event.topics" will be ignored.
+	 * 
+	 * @param properties The properties to use for this EventProperties object
+	 *        (may be {@code null}).
+	 */
+	EventProperties(Dictionary<String, ? > properties) {
+		int size = (properties == null) ? 0 : properties.size();
+		Map<String, Object> p = new HashMap<String, Object>(size);
+		if (size > 0) {
+			for (Enumeration< ? > e = properties.keys(); e.hasMoreElements();) {
+				Object key = e.nextElement();
+				if ((key instanceof String) && !EVENT_TOPIC.equals(key)) {
+					Object value = properties.get(key);
+					p.put((String) key, value);
+				}
+			}
+		}
+		// safely publish the map
+		this.properties = Collections.unmodifiableMap(p);
+	}
+
+	/**
+	 * This method throws {@link UnsupportedOperationException}.
+	 * 
+	 * @throws UnsupportedOperationException if called.
+	 */
+	public void clear() {
+		properties.clear();
+	}
+
+	/**
+	 * Indicates if the specified property is present.
+	 * 
+	 * @param name The property name.
+	 * @return {@code true} If the property is present, {@code false}
+	 *         otherwise.
+	 */
+	public boolean containsKey(Object name) {
+		return properties.containsKey(name);
+	}
+
+	/**
+	 * Indicates if the specified value is present.
+	 * 
+	 * @param value The property value.
+	 * @return {@code true} If the value is present, {@code false}
+	 *         otherwise.
+	 */
+	public boolean containsValue(Object value) {
+		return properties.containsValue(value);
+	}
+
+	/**
+	 * Return the property entries.
+	 * 
+	 * @return A set containing the property name/value pairs.
+	 */
+	public Set<java.util.Map.Entry<String, Object>> entrySet() {
+		return properties.entrySet();
+	}
+
+	/**
+	 * Return the value of the specified property.
+	 * 
+	 * @param name The name of the specified property.
+	 * @return The value of the specified property.
+	 */
+	public Object get(Object name) {
+		return properties.get(name);
+	}
+
+	/**
+	 * Indicate if this properties is empty.
+	 * 
+	 * @return {@code true} If this properties is empty, {@code false}
+	 *         otherwise.
+	 */
+	public boolean isEmpty() {
+		return properties.isEmpty();
+	}
+
+	/**
+	 * Return the names of the properties.
+	 * 
+	 * @return The names of the properties.
+	 */
+	public Set<String> keySet() {
+		return properties.keySet();
+	}
+
+	/**
+	 * This method throws {@link UnsupportedOperationException}.
+	 * 
+	 * @throws UnsupportedOperationException if called.
+	 */
+	public Object put(String key, Object value) {
+		return properties.put(key, value);
+	}
+
+	/**
+	 * This method throws {@link UnsupportedOperationException}.
+	 * 
+	 * @throws UnsupportedOperationException if called.
+	 */
+	public void putAll(Map< ? extends String, ? extends Object> map) {
+		properties.putAll(map);
+	}
+
+	/**
+	 * This method throws {@link UnsupportedOperationException}.
+	 * 
+	 * @throws UnsupportedOperationException if called.
+	 */
+	public Object remove(Object key) {
+		return properties.remove(key);
+	}
+
+	/**
+	 * Return the number of properties.
+	 * 
+	 * @return The number of properties.
+	 */
+	public int size() {
+		return properties.size();
+	}
+
+	/**
+	 * Return the properties values.
+	 * 
+	 * @return The values of the properties.
+	 */
+	public Collection<Object> values() {
+		return properties.values();
+	}
+
+	/**
+	 * Compares this {@code EventProperties} object to another object.
+	 * 
+	 * <p>
+	 * The properties are compared using the {@code java.util.Map.equals()}
+	 * rules which includes identity comparison for array values.
+	 * 
+	 * @param object The {@code EventProperties} object to be compared.
+	 * @return {@code true} if {@code object} is a
+	 *         {@code EventProperties} and is equal to this object;
+	 *         {@code false} otherwise.
+	 */
+	public boolean equals(Object object) {
+		if (this == object) {
+			return true;
+		}
+		if (!(object instanceof EventProperties)) {
+			return false;
+		}
+		EventProperties other = (EventProperties) object;
+		return properties.equals(other.properties);
+	}
+
+	/**
+	 * Returns a hash code value for this object.
+	 * 
+	 * @return An integer which is a hash code value for this object.
+	 */
+	public int hashCode() {
+		return properties.hashCode();
+	}
+
+	/**
+	 * Returns the string representation of this object.
+	 * 
+	 * @return The string representation of this object.
+	 */
+	public String toString() {
+		return properties.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java
index ae0d190..557ef77 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/TopicPermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,10 +17,18 @@
 package org.osgi.service.event;
 
 import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
 import java.security.Permission;
 import java.security.PermissionCollection;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
 
 /**
  * A bundle's authority to publish or subscribe to event on a topic.
@@ -35,20 +43,20 @@ import java.util.Hashtable;
  * </pre>
  * 
  * <p>
- * <code>TopicPermission</code> has two actions: <code>publish</code> and
- * <code>subscribe</code>.
+ * {@code TopicPermission} has two actions: {@code publish} and
+ * {@code subscribe}.
  * 
  * @ThreadSafe
- * @version $Revision: 6381 $
+ * @version $Id: c5e3452781547a63cb4984d3c7e9f166b6abbd42 $
  */
 public final class TopicPermission extends Permission {
 	static final long			serialVersionUID	= -5855563886961618300L;
 	/**
-	 * The action string <code>publish</code>.
+	 * The action string {@code publish}.
 	 */
 	public final static String	PUBLISH				= "publish";
 	/**
-	 * The action string <code>subscribe</code>.
+	 * The action string {@code subscribe}.
 	 */
 	public final static String	SUBSCRIBE			= "subscribe";
 	private final static int	ACTION_PUBLISH		= 0x00000001;
@@ -88,13 +96,13 @@ public final class TopicPermission extends Permission {
 	 * 
 	 * <p>
 	 * A bundle that needs to publish events on a topic must have the
-	 * appropriate <code>TopicPermission</code> for that topic; similarly, a
+	 * appropriate {@code TopicPermission} for that topic; similarly, a
 	 * bundle that needs to subscribe to events on a topic must have the
-	 * appropriate <code>TopicPermssion</code> for that topic.
+	 * appropriate {@code TopicPermssion} for that topic.
 	 * <p>
 	 * 
 	 * @param name Topic name.
-	 * @param actions <code>publish</code>,<code>subscribe</code> (canonical
+	 * @param actions {@code publish},{@code subscribe} (canonical
 	 *        order).
 	 */
 	public TopicPermission(String name, String actions) {
@@ -240,9 +248,9 @@ public final class TopicPermission extends Permission {
 	 * 
 	 * <p>
 	 * This method checks that the topic name of the target is implied by the
-	 * topic name of this object. The list of <code>TopicPermission</code>
+	 * topic name of this object. The list of {@code TopicPermission}
 	 * actions must either match or allow for the list of the target object to
-	 * imply the target <code>TopicPermission</code> action.
+	 * imply the target {@code TopicPermission} action.
 	 * 
 	 * <pre>
 	 *    x/y/*,"publish" -> x/y/z,"publish" is true
@@ -252,8 +260,8 @@ public final class TopicPermission extends Permission {
 	 * </pre>
 	 * 
 	 * @param p The target permission to interrogate.
-	 * @return <code>true</code> if the specified <code>TopicPermission</code>
-	 *         action is implied by this object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified {@code TopicPermission}
+	 *         action is implied by this object; {@code false} otherwise.
 	 */
 	public boolean implies(Permission p) {
 		if (p instanceof TopicPermission) {
@@ -274,14 +282,14 @@ public final class TopicPermission extends Permission {
 
 	/**
 	 * Returns the canonical string representation of the
-	 * <code>TopicPermission</code> actions.
+	 * {@code TopicPermission} actions.
 	 * 
 	 * <p>
-	 * Always returns present <code>TopicPermission</code> actions in the
-	 * following order: <code>publish</code>,<code>subscribe</code>.
+	 * Always returns present {@code TopicPermission} actions in the
+	 * following order: {@code publish},{@code subscribe}.
 	 * 
 	 * @return Canonical string representation of the
-	 *         <code>TopicPermission</code> actions.
+	 *         {@code TopicPermission} actions.
 	 */
 	public String getActions() {
 		String result = actions;
@@ -304,27 +312,27 @@ public final class TopicPermission extends Permission {
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object suitable for
-	 * storing <code>TopicPermission</code> objects.
+	 * Returns a new {@code PermissionCollection} object suitable for
+	 * storing {@code TopicPermission} objects.
 	 * 
-	 * @return A new <code>PermissionCollection</code> object.
+	 * @return A new {@code PermissionCollection} object.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new TopicPermissionCollection();
 	}
 
 	/**
-	 * Determines the equality of two <code>TopicPermission</code> objects.
+	 * Determines the equality of two {@code TopicPermission} objects.
 	 * 
-	 * This method checks that specified <code>TopicPermission</code> has the
-	 * same topic name and actions as this <code>TopicPermission</code> object.
+	 * This method checks that specified {@code TopicPermission} has the
+	 * same topic name and actions as this {@code TopicPermission} object.
 	 * 
 	 * @param obj The object to test for equality with this
-	 *        <code>TopicPermission</code> object.
-	 * @return <code>true</code> if <code>obj</code> is a
-	 *         <code>TopicPermission</code>, and has the same topic name and
-	 *         actions as this <code>TopicPermission</code> object;
-	 *         <code>false</code> otherwise.
+	 *        {@code TopicPermission} object.
+	 * @return {@code true} if {@code obj} is a
+	 *         {@code TopicPermission}, and has the same topic name and
+	 *         actions as this {@code TopicPermission} object;
+	 *         {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
@@ -376,7 +384,7 @@ public final class TopicPermission extends Permission {
 }
 
 /**
- * Stores a set of <code>TopicPermission</code> permissions.
+ * Stores a set of {@code TopicPermission} permissions.
  * 
  * @see java.security.Permission
  * @see java.security.Permissions
@@ -387,10 +395,9 @@ final class TopicPermissionCollection extends PermissionCollection {
 	/**
 	 * Table of permissions.
 	 * 
-	 * @serial
 	 * @GuardedBy this
 	 */
-	private final Hashtable	permissions;
+	private transient Map<String, TopicPermission>	permissions;
 	/**
 	 * Boolean saying if "*" is in the collection.
 	 * 
@@ -404,20 +411,20 @@ final class TopicPermissionCollection extends PermissionCollection {
 	 * 
 	 */
 	public TopicPermissionCollection() {
-		permissions = new Hashtable();
+		permissions = new HashMap<String, TopicPermission>();
 		all_allowed = false;
 	}
 
 	/**
-	 * Adds a permission to the <code>TopicPermission</code> objects. The key
+	 * Adds a permission to the {@code TopicPermission} objects. The key
 	 * for the hash is the name.
 	 * 
-	 * @param permission The <code>TopicPermission</code> object to add.
+	 * @param permission The {@code TopicPermission} object to add.
 	 * 
 	 * @throws IllegalArgumentException If the permission is not a
-	 *         <code>TopicPermission</code> instance.
+	 *         {@code TopicPermission} instance.
 	 * 
-	 * @throws SecurityException If this <code>TopicPermissionCollection</code>
+	 * @throws SecurityException If this {@code TopicPermissionCollection}
 	 *         object has been marked read-only.
 	 */
 	public void add(final Permission permission) {
@@ -434,7 +441,7 @@ final class TopicPermissionCollection extends PermissionCollection {
 		final int newMask = tp.getActionsMask();
 
 		synchronized (this) {
-			final TopicPermission existing = (TopicPermission) permissions
+			final TopicPermission existing = permissions
 					.get(name);
 			if (existing != null) {
 				final int oldMask = existing.getActionsMask();
@@ -455,13 +462,13 @@ final class TopicPermissionCollection extends PermissionCollection {
 
 	/**
 	 * Determines if the specified permissions implies the permissions expressed
-	 * in <code>permission</code>.
+	 * in {@code permission}.
 	 * 
 	 * @param permission The Permission object to compare with this
-	 *        <code>TopicPermission</code> object.
+	 *        {@code TopicPermission} object.
 	 * 
-	 * @return <code>true</code> if <code>permission</code> is a proper subset
-	 *         of a permission in the set; <code>false</code> otherwise.
+	 * @return {@code true} if {@code permission} is a proper subset
+	 *         of a permission in the set; {@code false} otherwise.
 	 */
 	public boolean implies(final Permission permission) {
 		if (!(permission instanceof TopicPermission)) {
@@ -476,7 +483,7 @@ final class TopicPermissionCollection extends PermissionCollection {
 		// short circuit if the "*" Permission was added
 		synchronized (this) {
 			if (all_allowed) {
-				x = (TopicPermission) permissions.get("*");
+				x = permissions.get("*");
 				if (x != null) {
 					effective |= x.getActionsMask();
 					if ((effective & desired) == desired) {
@@ -484,7 +491,7 @@ final class TopicPermissionCollection extends PermissionCollection {
 					}
 				}
 			}
-			x = (TopicPermission) permissions.get(name);
+			x = permissions.get(name);
 		}
 		// strategy:
 		// Check for full match first. Then work our way up the
@@ -502,7 +509,7 @@ final class TopicPermissionCollection extends PermissionCollection {
 		while ((last = name.lastIndexOf("/", offset)) != -1) {
 			name = name.substring(0, last + 1) + "*";
 			synchronized (this) {
-				x = (TopicPermission) permissions.get(name);
+				x = permissions.get(name);
 			}
 			if (x != null) {
 				effective |= x.getActionsMask();
@@ -518,12 +525,37 @@ final class TopicPermissionCollection extends PermissionCollection {
 	}
 
 	/**
-	 * Returns an enumeration of all <code>TopicPermission</code> objects in the
+	 * Returns an enumeration of all {@code TopicPermission} objects in the
 	 * container.
 	 * 
-	 * @return Enumeration of all <code>TopicPermission</code> objects.
+	 * @return Enumeration of all {@code TopicPermission} objects.
 	 */
-	public Enumeration elements() {
-		return permissions.elements();
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		return Collections.enumeration(all);
+	}
+
+	/* serialization logic */
+	private static final ObjectStreamField[]	serialPersistentFields	= {
+			new ObjectStreamField("permissions", Hashtable.class),
+			new ObjectStreamField("all_allowed", Boolean.TYPE)			};
+
+	private synchronized void writeObject(ObjectOutputStream out)
+			throws IOException {
+		Hashtable<String, TopicPermission> hashtable = new Hashtable<String, TopicPermission>(
+				permissions);
+		ObjectOutputStream.PutField pfields = out.putFields();
+		pfields.put("permissions", hashtable);
+		pfields.put("all_allowed", all_allowed);
+		out.writeFields();
+	}
+
+	private synchronized void readObject(java.io.ObjectInputStream in)
+			throws IOException, ClassNotFoundException {
+		ObjectInputStream.GetField gfields = in.readFields();
+		Hashtable<String, TopicPermission> hashtable = (Hashtable<String, TopicPermission>) gfields
+				.get("permissions", null);
+		permissions = new HashMap<String, TopicPermission>(hashtable);
+		all_allowed = gfields.get("all_allowed", false);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package-info.java
new file mode 100644
index 0000000..e215247
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Event Admin Package Version 1.3.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.event; version="[1.3,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.event; version="[1.3,1.4)"}
+ * 
+ * @version $Id: ce0d325e118d7610d5eea38f021525f4855b85c6 $
+ */
+
+package org.osgi.service.event;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package.html
deleted file mode 100644
index 0d9d0bf..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Event Admin Package Version 1.2.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.event; version="[1.2,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo
index ef7df68..0117a56 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/event/packageinfo
@@ -1 +1 @@
-version 1.2
+version 1.3
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpContext.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpContext.java
index e39cd17..e6b0652 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpContext.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpContext.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,43 +26,43 @@ import javax.servlet.http.HttpServletResponse;
  * information about a registration.
  * 
  * <p>
- * Servlets and resources may be registered with an <code>HttpContext</code>
- * object; if no <code>HttpContext</code> object is specified, a default
- * <code>HttpContext</code> object is used. Servlets that are registered using the
- * same <code>HttpContext</code> object will share the same
- * <code>ServletContext</code> object.
+ * Servlets and resources may be registered with an {@code HttpContext}
+ * object; if no {@code HttpContext} object is specified, a default
+ * {@code HttpContext} object is used. Servlets that are registered using the
+ * same {@code HttpContext} object will share the same
+ * {@code ServletContext} object.
  * 
  * <p>
- * This interface is implemented by users of the <code>HttpService</code>.
+ * This interface is implemented by users of the {@code HttpService}.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 59a9fe552260fa80620a82563b0970bfa1f87ef5 $
  */
 public interface HttpContext {
 	/**
-	 * <code>HttpServletRequest</code> attribute specifying the name of the
+	 * {@code HttpServletRequest} attribute specifying the name of the
 	 * authenticated user. The value of the attribute can be retrieved by
-	 * <code>HttpServletRequest.getRemoteUser</code>. This attribute name is
-	 * <code>org.osgi.service.http.authentication.remote.user</code>.
+	 * {@code HttpServletRequest.getRemoteUser}. This attribute name is
+	 * {@code org.osgi.service.http.authentication.remote.user}.
 	 * 
 	 * @since 1.1
 	 */
 	public static final String	REMOTE_USER			= "org.osgi.service.http.authentication.remote.user";
 	/**
-	 * <code>HttpServletRequest</code> attribute specifying the scheme used in
+	 * {@code HttpServletRequest} attribute specifying the scheme used in
 	 * authentication. The value of the attribute can be retrieved by
-	 * <code>HttpServletRequest.getAuthType</code>. This attribute name is
-	 * <code>org.osgi.service.http.authentication.type</code>.
+	 * {@code HttpServletRequest.getAuthType}. This attribute name is
+	 * {@code org.osgi.service.http.authentication.type}.
 	 * 
 	 * @since 1.1
 	 */
 	public static final String	AUTHENTICATION_TYPE	= "org.osgi.service.http.authentication.type";
 	/**
-	 * <code>HttpServletRequest</code> attribute specifying the
-	 * <code>Authorization</code> object obtained from the
-	 * <code>org.osgi.service.useradmin.UserAdmin</code> service. The value of the
+	 * {@code HttpServletRequest} attribute specifying the
+	 * {@code Authorization} object obtained from the
+	 * {@code org.osgi.service.useradmin.UserAdmin} service. The value of the
 	 * attribute can be retrieved by
-	 * <code>HttpServletRequest.getAttribute(HttpContext.AUTHORIZATION)</code>.
-	 * This attribute name is <code>org.osgi.service.useradmin.authorization</code>.
+	 * {@code HttpServletRequest.getAttribute(HttpContext.AUTHORIZATION)}.
+	 * This attribute name is {@code org.osgi.service.useradmin.authorization}.
 	 * 
 	 * @since 1.1
 	 */
@@ -80,20 +80,20 @@ public interface HttpContext {
 	 * If the request requires authentication and the Authorization header in
 	 * the request is missing or not acceptable, then this method should set the
 	 * WWW-Authenticate header in the response object, set the status in the
-	 * response object to Unauthorized(401) and return <code>false</code>. See
+	 * response object to Unauthorized(401) and return {@code false}. See
 	 * also RFC 2617: <i>HTTP Authentication: Basic and Digest Access
 	 * Authentication </i> (available at http://www.ietf.org/rfc/rfc2617.txt).
 	 * 
 	 * <p>
-	 * If the request requires a secure connection and the <code>getScheme</code>
+	 * If the request requires a secure connection and the {@code getScheme}
 	 * method in the request does not return 'https' or some other acceptable
 	 * secure protocol, then this method should set the status in the response
-	 * object to Forbidden(403) and return <code>false</code>.
+	 * object to Forbidden(403) and return {@code false}.
 	 * 
 	 * <p>
-	 * When this method returns <code>false</code>, the Http Service will send
+	 * When this method returns {@code false}, the Http Service will send
 	 * the response back to the client, thereby completing the request. When
-	 * this method returns <code>true</code>, the Http Service will proceed with
+	 * this method returns {@code true}, the Http Service will proceed with
 	 * servicing the request.
 	 * 
 	 * <p>
@@ -101,24 +101,24 @@ public interface HttpContext {
 	 * {@link #AUTHENTICATION_TYPE} request attribute to the type of
 	 * authentication used, and the {@link #REMOTE_USER} request attribute to
 	 * the remote user (request attributes are set using the
-	 * <code>setAttribute</code> method on the request). If this method does not
+	 * {@code setAttribute} method on the request). If this method does not
 	 * perform any authentication, it must not set these attributes.
 	 * 
 	 * <p>
 	 * If the authenticated user is also authorized to access certain resources,
 	 * this method must set the {@link #AUTHORIZATION} request attribute to the
-	 * <code>Authorization</code> object obtained from the
-	 * <code>org.osgi.service.useradmin.UserAdmin</code> service.
+	 * {@code Authorization} object obtained from the
+	 * {@code org.osgi.service.useradmin.UserAdmin} service.
 	 * 
 	 * <p>
 	 * The servlet responsible for servicing the specified request determines
 	 * the authentication type and remote user by calling the
-	 * <code>getAuthType</code> and <code>getRemoteUser</code> methods,
+	 * {@code getAuthType} and {@code getRemoteUser} methods,
 	 * respectively, on the request.
 	 * 
 	 * @param request the HTTP request
 	 * @param response the HTTP response
-	 * @return <code>true</code> if the request should be serviced, <code>false</code>
+	 * @return {@code true} if the request should be serviced, {@code false}
 	 *         if the request should not be serviced and Http Service will send
 	 *         the response back to the client.
 	 * @throws java.io.IOException may be thrown by this method. If this
@@ -134,17 +134,17 @@ public interface HttpContext {
 	 * <p>
 	 * Called by the Http Service to map a resource name to a URL. For servlet
 	 * registrations, Http Service will call this method to support the
-	 * <code>ServletContext</code> methods <code>getResource</code> and
-	 * <code>getResourceAsStream</code>. For resource registrations, Http Service
+	 * {@code ServletContext} methods {@code getResource} and
+	 * {@code getResourceAsStream}. For resource registrations, Http Service
 	 * will call this method to locate the named resource. The context can
 	 * control from where resources come. For example, the resource can be
 	 * mapped to a file in the bundle's persistent storage area via
-	 * <code>bundleContext.getDataFile(name).toURL()</code> or to a resource in
-	 * the context's bundle via <code>getClass().getResource(name)</code>
+	 * {@code bundleContext.getDataFile(name).toURL()} or to a resource in
+	 * the context's bundle via {@code getClass().getResource(name)}
 	 * 
 	 * @param name the name of the requested resource
 	 * @return URL that Http Service can use to read the resource or
-	 *         <code>null</code> if the resource does not exist.
+	 *         {@code null} if the resource does not exist.
 	 */
 	public URL getResource(String name);
 
@@ -153,12 +153,12 @@ public interface HttpContext {
 	 * 
 	 * Called by the Http Service to determine the MIME type for the name. For
 	 * servlet registrations, the Http Service will call this method to support
-	 * the <code>ServletContext</code> method <code>getMimeType</code>. For
+	 * the {@code ServletContext} method {@code getMimeType}. For
 	 * resource registrations, the Http Service will call this method to
 	 * determine the MIME type for the Content-Type header in the response.
 	 * 
 	 * @param name determine the MIME type for this name.
-	 * @return MIME type (e.g. text/html) of the name or <code>null</code> to
+	 * @return MIME type (e.g. text/html) of the name or {@code null} to
 	 *         indicate that the Http Service should determine the MIME type
 	 *         itself.
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpService.java
index c578a93..2431f9f 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/HttpService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,7 +25,8 @@ import javax.servlet.ServletException;
  * register resources and servlets into the URI namespace of Http Service. A
  * bundle may later unregister its resources or servlets.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: a171d17b60e04856ede37220eb90825d7bf79362 $
  * @see HttpContext
  */
 public interface HttpService {
@@ -43,7 +44,7 @@ public interface HttpService {
 	 * requests are mapped to servlet and resource registrations.
 	 * 
 	 * <p>
-	 * The Http Service will call the servlet's <code>init</code> method before
+	 * The Http Service will call the servlet's {@code init} method before
 	 * returning.
 	 * 
 	 * <pre>
@@ -51,26 +52,26 @@ public interface HttpService {
 	 * </pre>
 	 * 
 	 * <p>
-	 * Servlets registered with the same <code>HttpContext</code> object will
-	 * share the same <code>ServletContext</code>. The Http Service will call the
-	 * <code>context</code> argument to support the <code>ServletContext</code>
-	 * methods <code>getResource</code>,<code>getResourceAsStream</code> and
-	 * <code>getMimeType</code>, and to handle security for requests. If the
-	 * <code>context</code> argument is <code>null</code>, a default
-	 * <code>HttpContext</code> object is used (see
+	 * Servlets registered with the same {@code HttpContext} object will
+	 * share the same {@code ServletContext}. The Http Service will call the
+	 * {@code context} argument to support the {@code ServletContext}
+	 * methods {@code getResource},{@code getResourceAsStream} and
+	 * {@code getMimeType}, and to handle security for requests. If the
+	 * {@code context} argument is {@code null}, a default
+	 * {@code HttpContext} object is used (see
 	 * {@link #createDefaultHttpContext}).
 	 * 
 	 * @param alias name in the URI namespace at which the servlet is registered
 	 * @param servlet the servlet object to register
 	 * @param initparams initialization arguments for the servlet or
-	 *        <code>null</code> if there are none. This argument is used by the
-	 *        servlet's <code>ServletConfig</code> object.
-	 * @param context the <code>HttpContext</code> object for the registered
-	 *        servlet, or <code>null</code> if a default <code>HttpContext</code> is
+	 *        {@code null} if there are none. This argument is used by the
+	 *        servlet's {@code ServletConfig} object.
+	 * @param context the {@code HttpContext} object for the registered
+	 *        servlet, or {@code null} if a default {@code HttpContext} is
 	 *        to be created and used.
 	 * @throws NamespaceException if the registration fails because the alias
 	 *            is already in use.
-	 * @throws javax.servlet.ServletException if the servlet's <code>init</code>
+	 * @throws javax.servlet.ServletException if the servlet's {@code init}
 	 *            method throws an exception, or the given servlet object has
 	 *            already been registered at a different alias.
 	 * @throws java.lang.IllegalArgumentException if any of the arguments are
@@ -101,18 +102,18 @@ public interface HttpService {
 	 * httpservice.registerResources("/files", "/tmp", context);
 	 * </pre>
 	 * 
-	 * The Http Service will call the <code>HttpContext</code> argument to map
+	 * The Http Service will call the {@code HttpContext} argument to map
 	 * resource names to URLs and MIME types and to handle security for
-	 * requests. If the <code>HttpContext</code> argument is <code>null</code>,
-	 * a default <code>HttpContext</code> is used (see
+	 * requests. If the {@code HttpContext} argument is {@code null},
+	 * a default {@code HttpContext} is used (see
 	 * {@link #createDefaultHttpContext}).
 	 * 
 	 * @param alias name in the URI namespace at which the resources are
 	 *        registered
 	 * @param name the base name of the resources that will be registered
-	 * @param context the <code>HttpContext</code> object for the registered
-	 *        resources, or <code>null</code> if a default
-	 *        <code>HttpContext</code> is to be created and used.
+	 * @param context the {@code HttpContext} object for the registered
+	 *        resources, or {@code null} if a default
+	 *        {@code HttpContext} is to be created and used.
 	 * @throws NamespaceException if the registration fails because the alias is
 	 *         already in use.
 	 * @throws java.lang.IllegalArgumentException if any of the parameters are
@@ -122,23 +123,23 @@ public interface HttpService {
 			HttpContext context) throws NamespaceException;
 
 	/**
-	 * Unregisters a previous registration done by <code>registerServlet</code> or
-	 * <code>registerResources</code> methods.
+	 * Unregisters a previous registration done by {@code registerServlet} or
+	 * {@code registerResources} methods.
 	 * 
 	 * <p>
 	 * After this call, the registered alias in the URI name-space will no
 	 * longer be available. If the registration was for a servlet, the Http
-	 * Service must call the <code>destroy</code> method of the servlet before
+	 * Service must call the {@code destroy} method of the servlet before
 	 * returning.
 	 * <p>
 	 * If the bundle which performed the registration is stopped or otherwise
 	 * "unget"s the Http Service without calling {@link #unregister} then Http
 	 * Service must automatically unregister the registration. However, if the
-	 * registration was for a servlet, the <code>destroy</code> method of the
+	 * registration was for a servlet, the {@code destroy} method of the
 	 * servlet will not be called in this case since the bundle may be stopped.
 	 * {@link #unregister} must be explicitly called to cause the
-	 * <code>destroy</code> method of the servlet to be called. This can be done
-	 * in the <code>BundleActivator.stop</code> method of the
+	 * {@code destroy} method of the servlet to be called. This can be done
+	 * in the {@code BundleActivator.stop} method of the
 	 * bundle registering the servlet.
 	 * 
 	 * @param alias name in the URI name-space of the registration to unregister
@@ -149,28 +150,28 @@ public interface HttpService {
 	public void unregister(String alias);
 
 	/**
-	 * Creates a default <code>HttpContext</code> for registering servlets or
-	 * resources with the HttpService, a new <code>HttpContext</code> object is
+	 * Creates a default {@code HttpContext} for registering servlets or
+	 * resources with the HttpService, a new {@code HttpContext} object is
 	 * created each time this method is called.
 	 * 
 	 * <p>
-	 * The behavior of the methods on the default <code>HttpContext</code> is
+	 * The behavior of the methods on the default {@code HttpContext} is
 	 * defined as follows:
 	 * <ul>
-	 * <li><code>getMimeType</code>- Does not define any customized MIME types
+	 * <li>{@code getMimeType}- Does not define any customized MIME types
 	 * for the Content-Type header in the response, and always returns
-	 * <code>null</code>.
-	 * <li><code>handleSecurity</code>- Performs implementation-defined
+	 * {@code null}.
+	 * <li>{@code handleSecurity}- Performs implementation-defined
 	 * authentication on the request.
-	 * <li><code>getResource</code>- Assumes the named resource is in the
+	 * <li>{@code getResource}- Assumes the named resource is in the
 	 * context bundle; this method calls the context bundle's
-	 * <code>Bundle.getResource</code> method, and returns the appropriate URL to
+	 * {@code Bundle.getResource} method, and returns the appropriate URL to
 	 * access the resource. On a Java runtime environment that supports
 	 * permissions, the Http Service needs to be granted 
-	 * <code>org.osgi.framework.AdminPermission[*,RESOURCE]</code>.
+	 * {@code org.osgi.framework.AdminPermission[*,RESOURCE]}.
 	 * </ul>
 	 * 
-	 * @return a default <code>HttpContext</code> object.
+	 * @return a default {@code HttpContext} object.
 	 * @since 1.1
 	 */
 	public HttpContext createDefaultHttpContext();
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/NamespaceException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/NamespaceException.java
index dce2ba8..b4393ab 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/NamespaceException.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/NamespaceException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,13 +20,13 @@ package org.osgi.service.http;
  * to register a servlet or resources into the URI namespace of the Http
  * Service. This exception indicates that the requested alias already is in use.
  * 
- * @version $Revision: 6083 $
+ * @version $Id: 9093cd6ea6e0532fe624424738ea720993c1a31b $
  */
 public class NamespaceException extends Exception {
     static final long serialVersionUID = 7235606031147877747L;
     
 	/**
-	 * Construct a <code>NamespaceException</code> object with a detail message.
+	 * Construct a {@code NamespaceException} object with a detail message.
 	 * 
 	 * @param message the detail message
 	 */
@@ -35,7 +35,7 @@ public class NamespaceException extends Exception {
 	}
 
 	/**
-	 * Construct a <code>NamespaceException</code> object with a detail message
+	 * Construct a {@code NamespaceException} object with a detail message
 	 * and a nested exception.
 	 * 
 	 * @param message The detail message.
@@ -50,20 +50,20 @@ public class NamespaceException extends Exception {
 	 * 
 	 * <p>
 	 * This method predates the general purpose exception chaining mechanism.
-	 * The <code>getCause()</code> method is now the preferred means of
+	 * The {@code getCause()} method is now the preferred means of
 	 * obtaining this information.
 	 * 
-	 * @return The result of calling <code>getCause()</code>.
+	 * @return The result of calling {@code getCause()}.
 	 */
 	public Throwable getException() {
 		return getCause();
 	}
 	
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * set.
 	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
+	 * @return The cause of this exception or {@code null} if no cause was
 	 *         set.
 	 * @since 1.2
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package-info.java
new file mode 100644
index 0000000..5d3baba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Http Service Package Version 1.2.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.http; version="[1.2,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.http; version="[1.2,1.3)"}
+ * 
+ * @version $Id: 13acc6dd84bdca96a441e96c7b76557daac72cb6 $
+ */
+
+package org.osgi.service.http;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package.html
deleted file mode 100644
index 21f5fed..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/http/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Http Service Package Version 1.2.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.http; version="[1.2,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectionFactory.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectionFactory.java
index 71a0af8..863d643 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectionFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectionFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,38 +21,38 @@ import javax.microedition.io.Connection;
 
 /**
  * A Connection Factory service is called by the implementation of the Connector
- * Service to create <code>javax.microedition.io.Connection</code> objects which
- * implement the scheme named by <code>IO_SCHEME</code>.
+ * Service to create {@code javax.microedition.io.Connection} objects which
+ * implement the scheme named by {@code IO_SCHEME}.
  * 
- * When a <code>ConnectorService.open</code> method is called, the implementation
+ * When a {@code ConnectorService.open} method is called, the implementation
  * of the Connector Service will examine the specified name for a scheme. The
  * Connector Service will then look for a Connection Factory service which is
- * registered with the service property <code>IO_SCHEME</code> which matches the
+ * registered with the service property {@code IO_SCHEME} which matches the
  * scheme. The {@link #createConnection} method of the selected Connection
- * Factory will then be called to create the actual <code>Connection</code>
+ * Factory will then be called to create the actual {@code Connection}
  * object.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 364857aea4663f97a8e300548a65573ca839d3e7 $
  */
 public interface ConnectionFactory {
 	/**
 	 * Service property containing the scheme(s) for which this Connection
-	 * Factory can create <code>Connection</code> objects. This property is of
-	 * type <code>String</code> or <code>String[]</code>.
+	 * Factory can create {@code Connection} objects. This property is of
+	 * type {@code String[]}.
 	 */
 	public static final String	IO_SCHEME	= "io.scheme";
 
 	/**
-	 * Create a new <code>Connection</code> object for the specified URI.
+	 * Create a new {@code Connection} object for the specified URI.
 	 * 
-	 * @param name The full URI passed to the <code>ConnectorService.open</code>
+	 * @param name The full URI passed to the {@code ConnectorService.open}
 	 *        method
 	 * @param mode The mode parameter passed to the
-	 *        <code>ConnectorService.open</code> method
+	 *        {@code ConnectorService.open} method
 	 * @param timeouts The timeouts parameter passed to the
-	 *        <code>ConnectorService.open</code> method
-	 * @return A new <code>javax.microedition.io.Connection</code> object.
-	 * @throws IOException If a <code>javax.microedition.io.Connection</code>
+	 *        {@code ConnectorService.open} method
+	 * @return A new {@code javax.microedition.io.Connection} object.
+	 * @throws IOException If a {@code javax.microedition.io.Connection}
 	 *         object can not not be created.
 	 */
 	public Connection createConnection(String name, int mode, boolean timeouts)
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectorService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectorService.java
index dbfc04a..ee2765c 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectorService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/ConnectorService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,25 +22,25 @@ import javax.microedition.io.Connector;
 
 /**
  * The Connector Service should be called to create and open
- * <code>javax.microedition.io.Connection</code> objects.
+ * {@code javax.microedition.io.Connection} objects.
  * 
- * When an <code>open*</code> method is called, the implementation of the
+ * When an {@code open*} method is called, the implementation of the
  * Connector Service will examine the specified name for a scheme. The Connector
  * Service will then look for a Connection Factory service which is registered
- * with the service property <code>IO_SCHEME</code> which matches the scheme. The
- * <code>createConnection</code> method of the selected Connection Factory will
- * then be called to create the actual <code>Connection</code> object.
+ * with the service property {@code IO_SCHEME} which matches the scheme. The
+ * {@code createConnection} method of the selected Connection Factory will
+ * then be called to create the actual {@code Connection} object.
  * 
  * <p>
  * If more than one Connection Factory service is registered for a particular
  * scheme, the service with the highest ranking (as specified in its
- * <code>service.ranking</code> property) is called. If there is a tie in ranking,
+ * {@code service.ranking} property) is called. If there is a tie in ranking,
  * the service with the lowest service ID (as specified in its
- * <code>service.id</code> property), that is the service that was registered
+ * {@code service.id} property), that is the service that was registered
  * first, is called. This is the same algorithm used by
- * <code>BundleContext.getServiceReference</code>.
+ * {@code BundleContext.getServiceReference}.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 0532872ebea40c8058c65b7fb0f4251fe6b67ce0 $
  */
 public interface ConnectorService {
 	/**
@@ -63,10 +63,10 @@ public interface ConnectorService {
 	public static final int	READ_WRITE	= Connector.READ_WRITE;
 
 	/**
-	 * Create and open a <code>Connection</code> object for the specified name.
+	 * Create and open a {@code Connection} object for the specified name.
 	 * 
 	 * @param name The URI for the connection.
-	 * @return A new <code>javax.microedition.io.Connection</code> object.
+	 * @return A new {@code javax.microedition.io.Connection} object.
 	 * @throws IllegalArgumentException If a parameter is invalid.
 	 * @throws javax.microedition.io.ConnectionNotFoundException If the
 	 *         connection cannot be found.
@@ -76,12 +76,12 @@ public interface ConnectorService {
 	public Connection open(String name) throws IOException;
 
 	/**
-	 * Create and open a <code>Connection</code> object for the specified name and
+	 * Create and open a {@code Connection} object for the specified name and
 	 * access mode.
 	 * 
 	 * @param name The URI for the connection.
 	 * @param mode The access mode.
-	 * @return A new <code>javax.microedition.io.Connection</code> object.
+	 * @return A new {@code javax.microedition.io.Connection} object.
 	 * @throws IllegalArgumentException If a parameter is invalid.
 	 * @throws javax.microedition.io.ConnectionNotFoundException If the
 	 *         connection cannot be found.
@@ -91,28 +91,28 @@ public interface ConnectorService {
 	public Connection open(String name, int mode) throws IOException;
 
 	/**
-	 * Create and open a <code>Connection</code> object for the specified name,
+	 * Create and open a {@code Connection} object for the specified name,
 	 * access mode and timeouts.
 	 * 
 	 * @param name The URI for the connection.
 	 * @param mode The access mode.
 	 * @param timeouts A flag to indicate that the caller wants timeout
 	 *        exceptions.
-	 * @return A new <code>javax.microedition.io.Connection</code> object.
+	 * @return A new {@code javax.microedition.io.Connection} object.
 	 * @throws IllegalArgumentException If a parameter is invalid.
 	 * @throws javax.microedition.io.ConnectionNotFoundException If the
 	 *         connection cannot be found.
 	 * @throws IOException If some other kind of I/O error occurs.
-	 * @see "<code>javax.microedition.io.Connector.open</code>"
+	 * @see "{@code javax.microedition.io.Connector.open}"
 	 */
 	public Connection open(String name, int mode, boolean timeouts)
 			throws IOException;
 
 	/**
-	 * Create and open an <code>InputStream</code> object for the specified name.
+	 * Create and open an {@code InputStream} object for the specified name.
 	 * 
 	 * @param name The URI for the connection.
-	 * @return An <code>InputStream</code> object.
+	 * @return An {@code InputStream} object.
 	 * @throws IllegalArgumentException If a parameter is invalid.
 	 * @throws javax.microedition.io.ConnectionNotFoundException If the
 	 *         connection cannot be found.
@@ -122,11 +122,11 @@ public interface ConnectorService {
 	public InputStream openInputStream(String name) throws IOException;
 
 	/**
-	 * Create and open a <code>DataInputStream</code> object for the specified
+	 * Create and open a {@code DataInputStream} object for the specified
 	 * name.
 	 * 
 	 * @param name The URI for the connection.
-	 * @return A <code>DataInputStream</code> object.
+	 * @return A {@code DataInputStream} object.
 	 * @throws IllegalArgumentException If a parameter is invalid.
 	 * @throws javax.microedition.io.ConnectionNotFoundException If the
 	 *         connection cannot be found.
@@ -136,10 +136,10 @@ public interface ConnectorService {
 	public DataInputStream openDataInputStream(String name) throws IOException;
 
 	/**
-	 * Create and open an <code>OutputStream</code> object for the specified name.
+	 * Create and open an {@code OutputStream} object for the specified name.
 	 * 
 	 * @param name The URI for the connection.
-	 * @return An <code>OutputStream</code> object.
+	 * @return An {@code OutputStream} object.
 	 * @throws IllegalArgumentException If a parameter is invalid.
 	 * @throws javax.microedition.io.ConnectionNotFoundException If the
 	 *         connection cannot be found.
@@ -149,11 +149,11 @@ public interface ConnectorService {
 	public OutputStream openOutputStream(String name) throws IOException;
 
 	/**
-	 * Create and open a <code>DataOutputStream</code> object for the specified
+	 * Create and open a {@code DataOutputStream} object for the specified
 	 * name.
 	 * 
 	 * @param name The URI for the connection.
-	 * @return A <code>DataOutputStream</code> object.
+	 * @return A {@code DataOutputStream} object.
 	 * @throws IllegalArgumentException If a parameter is invalid.
 	 * @throws javax.microedition.io.ConnectionNotFoundException If the
 	 *         connection cannot be found.
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package-info.java
new file mode 100644
index 0000000..301312b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * IO Connector Package Version 1.0.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.io; version="[1.0,2.0)", javax.microedition.io}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.io; version="[1.0,1.1)", javax.microedition.io}
+ * 
+ * @version $Id: 40377d63fd5ef9e12349a23f6b3a5fc83ae5fd75 $
+ */
+
+package org.osgi.service.io;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package.html
deleted file mode 100644
index cecc3c3..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/io/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>IO Connector Package Version 1.0.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.io; version="[1.0,2.0)", javax.microedition.io
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java
index 8130cf8..f14bdbc 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogEntry.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,43 +23,44 @@ import org.osgi.framework.ServiceReference;
  * Service log entry.
  * 
  * <p>
- * A <code>LogEntry</code> object may be acquired from the
- * <code>LogReaderService.getLog</code> method or by registering a
- * <code>LogListener</code> object.
+ * A {@code LogEntry} object may be acquired from the
+ * {@code LogReaderService.getLog} method or by registering a
+ * {@code LogListener} object.
  * 
  * @ThreadSafe
- * @version $Revision: 5654 $
+ * @noimplement
+ * @version $Id: e20fd66ff9e0264d77f7b7ea19212b305d1b3a40 $
  * @see LogReaderService#getLog
  * @see LogListener
  */
 public interface LogEntry {
 	/**
-	 * Returns the bundle that created this <code>LogEntry</code> object.
+	 * Returns the bundle that created this {@code LogEntry} object.
 	 * 
-	 * @return The bundle that created this <code>LogEntry</code> object;
-	 *         <code>null</code> if no bundle is associated with this
-	 *         <code>LogEntry</code> object.
+	 * @return The bundle that created this {@code LogEntry} object;
+	 *         {@code null} if no bundle is associated with this
+	 *         {@code LogEntry} object.
 	 */
 	public Bundle getBundle();
 
 	/**
-	 * Returns the <code>ServiceReference</code> object for the service associated
-	 * with this <code>LogEntry</code> object.
+	 * Returns the {@code ServiceReference} object for the service associated
+	 * with this {@code LogEntry} object.
 	 * 
-	 * @return <code>ServiceReference</code> object for the service associated
-	 *         with this <code>LogEntry</code> object; <code>null</code> if no
-	 *         <code>ServiceReference</code> object was provided.
+	 * @return {@code ServiceReference} object for the service associated
+	 *         with this {@code LogEntry} object; {@code null} if no
+	 *         {@code ServiceReference} object was provided.
 	 */
 	public ServiceReference getServiceReference();
 
 	/**
-	 * Returns the severity level of this <code>LogEntry</code> object.
+	 * Returns the severity level of this {@code LogEntry} object.
 	 * 
 	 * <p>
-	 * This is one of the severity levels defined by the <code>LogService</code>
+	 * This is one of the severity levels defined by the {@code LogService}
 	 * interface.
 	 * 
-	 * @return Severity level of this <code>LogEntry</code> object.
+	 * @return Severity level of this {@code LogEntry} object.
 	 * 
 	 * @see LogService#LOG_ERROR
 	 * @see LogService#LOG_WARNING
@@ -69,16 +70,16 @@ public interface LogEntry {
 	public int getLevel();
 
 	/**
-	 * Returns the human readable message associated with this <code>LogEntry</code>
+	 * Returns the human readable message associated with this {@code LogEntry}
 	 * object.
 	 * 
-	 * @return <code>String</code> containing the message associated with this
-	 *         <code>LogEntry</code> object.
+	 * @return {@code String} containing the message associated with this
+	 *         {@code LogEntry} object.
 	 */
 	public String getMessage();
 
 	/**
-	 * Returns the exception object associated with this <code>LogEntry</code>
+	 * Returns the exception object associated with this {@code LogEntry}
 	 * object.
 	 * 
 	 * <p>
@@ -90,17 +91,17 @@ public interface LogEntry {
 	 * information as possible from the original exception object such as the
 	 * message and stack trace.
 	 * 
-	 * @return <code>Throwable</code> object of the exception associated with this
-	 *         <code>LogEntry</code>;<code>null</code> if no exception is
-	 *         associated with this <code>LogEntry</code> object.
+	 * @return {@code Throwable} object of the exception associated with this
+	 *         {@code LogEntry};{@code null} if no exception is
+	 *         associated with this {@code LogEntry} object.
 	 */
 	public Throwable getException();
 
 	/**
-	 * Returns the value of <code>currentTimeMillis()</code> at the time this
-	 * <code>LogEntry</code> object was created.
+	 * Returns the value of {@code currentTimeMillis()} at the time this
+	 * {@code LogEntry} object was created.
 	 * 
-	 * @return The system time in milliseconds when this <code>LogEntry</code>
+	 * @return The system time in milliseconds when this {@code LogEntry}
 	 *         object was created.
 	 * @see "System.currentTimeMillis()"
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogListener.java
index de29a56..4704a39 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogListener.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,18 +18,18 @@ package org.osgi.service.log;
 import java.util.EventListener;
 
 /**
- * Subscribes to <code>LogEntry</code> objects from the <code>LogReaderService</code>.
+ * Subscribes to {@code LogEntry} objects from the {@code LogReaderService}.
  * 
  * <p>
- * A <code>LogListener</code> object may be registered with the Log Reader Service
- * using the <code>LogReaderService.addLogListener</code> method. After the
- * listener is registered, the <code>logged</code> method will be called for each
- * <code>LogEntry</code> object created. The <code>LogListener</code> object may be
- * unregistered by calling the <code>LogReaderService.removeLogListener</code>
+ * A {@code LogListener} object may be registered with the Log Reader Service
+ * using the {@code LogReaderService.addLogListener} method. After the
+ * listener is registered, the {@code logged} method will be called for each
+ * {@code LogEntry} object created. The {@code LogListener} object may be
+ * unregistered by calling the {@code LogReaderService.removeLogListener}
  * method.
  * 
  * @ThreadSafe
- * @version $Revision: 5654 $
+ * @version $Id: 9b1ea6645e00027d03684b74745f47a42fb9ad30 $
  * @see LogReaderService
  * @see LogEntry
  * @see LogReaderService#addLogListener(LogListener)
@@ -43,7 +43,7 @@ public interface LogListener extends EventListener {
 	 * As with all event listeners, this method should return to its caller as
 	 * soon as possible.
 	 * 
-	 * @param entry A <code>LogEntry</code> object containing log information.
+	 * @param entry A {@code LogEntry} object containing log information.
 	 * @see LogEntry
 	 */
 	public void logged(LogEntry entry);
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogReaderService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogReaderService.java
index b3753e4..d6b81f4 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogReaderService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogReaderService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,44 +18,44 @@ package org.osgi.service.log;
 import java.util.Enumeration;
 
 /**
- * Provides methods to retrieve <code>LogEntry</code> objects from the log.
+ * Provides methods to retrieve {@code LogEntry} objects from the log.
  * <p>
- * There are two ways to retrieve <code>LogEntry</code> objects:
+ * There are two ways to retrieve {@code LogEntry} objects:
  * <ul>
- * <li>The primary way to retrieve <code>LogEntry</code> objects is to register a
- * <code>LogListener</code> object whose <code>LogListener.logged</code> method will
+ * <li>The primary way to retrieve {@code LogEntry} objects is to register a
+ * {@code LogListener} object whose {@code LogListener.logged} method will
  * be called for each entry added to the log.
- * <li>To retrieve past <code>LogEntry</code> objects, the <code>getLog</code>
- * method can be called which will return an <code>Enumeration</code> of all
- * <code>LogEntry</code> objects in the log.
+ * <li>To retrieve past {@code LogEntry} objects, the {@code getLog}
+ * method can be called which will return an {@code Enumeration} of all
+ * {@code LogEntry} objects in the log.
  * 
  * @ThreadSafe
- * @version $Revision: 5654 $
+ * @version $Id: bb22587248982a76202b77d03550515b3205f935 $
  * @see LogEntry
  * @see LogListener
  * @see LogListener#logged(LogEntry)
  */
 public interface LogReaderService {
 	/**
-	 * Subscribes to <code>LogEntry</code> objects.
+	 * Subscribes to {@code LogEntry} objects.
 	 * 
 	 * <p>
-	 * This method registers a <code>LogListener</code> object with the Log Reader
-	 * Service. The <code>LogListener.logged(LogEntry)</code> method will be
-	 * called for each <code>LogEntry</code> object placed into the log.
+	 * This method registers a {@code LogListener} object with the Log Reader
+	 * Service. The {@code LogListener.logged(LogEntry)} method will be
+	 * called for each {@code LogEntry} object placed into the log.
 	 * 
 	 * <p>
-	 * When a bundle which registers a <code>LogListener</code> object is stopped
+	 * When a bundle which registers a {@code LogListener} object is stopped
 	 * or otherwise releases the Log Reader Service, the Log Reader Service must
 	 * remove all of the bundle's listeners.
 	 * 
 	 * <p>
 	 * If this Log Reader Service's list of listeners already contains a
-	 * listener <code>l</code> such that <code>(l==listener)</code>, this method
+	 * listener {@code l} such that {@code (l==listener)}, this method
 	 * does nothing.
 	 * 
-	 * @param listener A <code>LogListener</code> object to register; the
-	 *        <code>LogListener</code> object is used to receive <code>LogEntry</code>
+	 * @param listener A {@code LogListener} object to register; the
+	 *        {@code LogListener} object is used to receive {@code LogEntry}
 	 *        objects.
 	 * @see LogListener
 	 * @see LogEntry
@@ -64,33 +64,33 @@ public interface LogReaderService {
 	public void addLogListener(LogListener listener);
 
 	/**
-	 * Unsubscribes to <code>LogEntry</code> objects.
+	 * Unsubscribes to {@code LogEntry} objects.
 	 * 
 	 * <p>
-	 * This method unregisters a <code>LogListener</code> object from the Log
+	 * This method unregisters a {@code LogListener} object from the Log
 	 * Reader Service.
 	 * 
 	 * <p>
-	 * If <code>listener</code> is not contained in this Log Reader Service's list
+	 * If {@code listener} is not contained in this Log Reader Service's list
 	 * of listeners, this method does nothing.
 	 * 
-	 * @param listener A <code>LogListener</code> object to unregister.
+	 * @param listener A {@code LogListener} object to unregister.
 	 * @see LogListener
 	 */
 	public void removeLogListener(LogListener listener);
 
 	/**
-	 * Returns an <code>Enumeration</code> of all <code>LogEntry</code> objects in
+	 * Returns an {@code Enumeration} of all {@code LogEntry} objects in
 	 * the log.
 	 * 
 	 * <p>
-	 * Each element of the enumeration is a <code>LogEntry</code> object, ordered
+	 * Each element of the enumeration is a {@code LogEntry} object, ordered
 	 * with the most recent entry first. Whether the enumeration is of all
-	 * <code>LogEntry</code> objects since the Log Service was started or some
+	 * {@code LogEntry} objects since the Log Service was started or some
 	 * recent past is implementation-specific. Also implementation-specific is
-	 * whether informational and debug <code>LogEntry</code> objects are included
+	 * whether informational and debug {@code LogEntry} objects are included
 	 * in the enumeration.
-	 * @return An <code>Enumeration</code> of all <code>LogEntry</code> objects in
+	 * @return An {@code Enumeration} of all {@code LogEntry} objects in
 	 * the log.
 	 */
 	public Enumeration getLog();
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogService.java
index 1889355..6809ce9 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/LogService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,8 +21,8 @@ import org.osgi.framework.ServiceReference;
  * Provides methods for bundles to write messages to the log.
  * 
  * <p>
- * <code>LogService</code> methods are provided to log messages; optionally with a
- * <code>ServiceReference</code> object or an exception.
+ * {@code LogService} methods are provided to log messages; optionally with a
+ * {@code ServiceReference} object or an exception.
  * 
  * <p>
  * Bundles must log messages in the OSGi environment with a severity level
@@ -35,7 +35,8 @@ import org.osgi.framework.ServiceReference;
  * </ol>
  * 
  * @ThreadSafe
- * @version $Revision: 5654 $
+ * @noimplement
+ * @version $Id: 3f44517702a7c759054adbd7bdcc561ace624af9 $
  */
 public interface LogService {
 	/**
@@ -74,14 +75,14 @@ public interface LogService {
 	 * Logs a message.
 	 * 
 	 * <p>
-	 * The <code>ServiceReference</code> field and the <code>Throwable</code> field
-	 * of the <code>LogEntry</code> object will be set to <code>null</code>.
+	 * The {@code ServiceReference} field and the {@code Throwable} field
+	 * of the {@code LogEntry} object will be set to {@code null}.
 	 * 
 	 * @param level The severity of the message. This should be one of the
 	 *        defined log levels but may be any integer that is interpreted in a
 	 *        user defined way.
 	 * @param message Human readable string describing the condition or
-	 *        <code>null</code>.
+	 *        {@code null}.
 	 * @see #LOG_ERROR
 	 * @see #LOG_WARNING
 	 * @see #LOG_INFO
@@ -93,16 +94,16 @@ public interface LogService {
 	 * Logs a message with an exception.
 	 * 
 	 * <p>
-	 * The <code>ServiceReference</code> field of the <code>LogEntry</code> object
-	 * will be set to <code>null</code>.
+	 * The {@code ServiceReference} field of the {@code LogEntry} object
+	 * will be set to {@code null}.
 	 * 
 	 * @param level The severity of the message. This should be one of the
 	 *        defined log levels but may be any integer that is interpreted in a
 	 *        user defined way.
 	 * @param message The human readable string describing the condition or
-	 *        <code>null</code>.
+	 *        {@code null}.
 	 * @param exception The exception that reflects the condition or
-	 *        <code>null</code>.
+	 *        {@code null}.
 	 * @see #LOG_ERROR
 	 * @see #LOG_WARNING
 	 * @see #LOG_INFO
@@ -111,20 +112,20 @@ public interface LogService {
 	public void log(int level, String message, Throwable exception);
 
 	/**
-	 * Logs a message associated with a specific <code>ServiceReference</code>
+	 * Logs a message associated with a specific {@code ServiceReference}
 	 * object.
 	 * 
 	 * <p>
-	 * The <code>Throwable</code> field of the <code>LogEntry</code> will be set to
-	 * <code>null</code>.
+	 * The {@code Throwable} field of the {@code LogEntry} will be set to
+	 * {@code null}.
 	 * 
-	 * @param sr The <code>ServiceReference</code> object of the service that this
-	 *        message is associated with or <code>null</code>.
+	 * @param sr The {@code ServiceReference} object of the service that this
+	 *        message is associated with or {@code null}.
 	 * @param level The severity of the message. This should be one of the
 	 *        defined log levels but may be any integer that is interpreted in a
 	 *        user defined way.
 	 * @param message Human readable string describing the condition or
-	 *        <code>null</code>.
+	 *        {@code null}.
 	 * @see #LOG_ERROR
 	 * @see #LOG_WARNING
 	 * @see #LOG_INFO
@@ -134,17 +135,17 @@ public interface LogService {
 
 	/**
 	 * Logs a message with an exception associated and a
-	 * <code>ServiceReference</code> object.
+	 * {@code ServiceReference} object.
 	 * 
-	 * @param sr The <code>ServiceReference</code> object of the service that this
+	 * @param sr The {@code ServiceReference} object of the service that this
 	 *        message is associated with.
 	 * @param level The severity of the message. This should be one of the
 	 *        defined log levels but may be any integer that is interpreted in a
 	 *        user defined way.
 	 * @param message Human readable string describing the condition or
-	 *        <code>null</code>.
+	 *        {@code null}.
 	 * @param exception The exception that reflects the condition or
-	 *        <code>null</code>.
+	 *        {@code null}.
 	 * @see #LOG_ERROR
 	 * @see #LOG_WARNING
 	 * @see #LOG_INFO
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package-info.java
new file mode 100644
index 0000000..a882111
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Log Service Package Version 1.3.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.log; version="[1.3,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.log; version="[1.3,1.4)"}
+ * 
+ * @version $Id: 5c4120fc17628d242e1641557eacb9581b08c920 $
+ */
+
+package org.osgi.service.log;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package.html
deleted file mode 100644
index 02312bb..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Log Service Package Version 1.3.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.log; version="[1.3,2.0)"
-</pre>
-</BODY>
-
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/AttributeDefinition.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/AttributeDefinition.java
index d427163..2c2b573 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/AttributeDefinition.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/AttributeDefinition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,132 +19,145 @@ package org.osgi.service.metatype;
  * An interface to describe an attribute.
  * 
  * <p>
- * An <code>AttributeDefinition</code> object defines a description of the data
- * type of a property/attribute.
+ * An {@code AttributeDefinition} object defines a description of the data type
+ * of a property/attribute.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: b8935116f49bb6c12194f291d4e38f6be856e25c $
  */
 public interface AttributeDefinition {
 	/**
-	 * The <code>STRING</code> (1) type.
+	 * The {@code STRING} (1) type.
 	 * 
 	 * <p>
-	 * Attributes of this type should be stored as <code>String</code>,
-	 * <code>Vector</code> with <code>String</code> or <code>String[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code String}, {@code
+	 * Vector} with {@code String} or {@code String[]} objects, depending on the
+	 * {@code getCardinality()} value.
 	 */
-	public static final int	STRING		= 1;
+	int	STRING		= 1;
 	/**
-	 * The <code>LONG</code> (2) type.
+	 * The {@code LONG} (2) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Long</code>,
-	 * <code>Vector</code> with <code>Long</code> or <code>long[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code Long}, {@code Vector}
+	 * with {@code Long} or {@code long[]} objects, depending on the {@code
+	 * getCardinality()} value.
 	 */
-	public static final int	LONG		= 2;
+	int	LONG		= 2;
 	/**
-	 * The <code>INTEGER</code> (3) type.
+	 * The {@code INTEGER} (3) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Integer</code>,
-	 * <code>Vector</code> with <code>Integer</code> or <code>int[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code Integer}, {@code
+	 * Vector} with {@code Integer} or {@code int[]} objects, depending on the
+	 * {@code getCardinality()} value.
 	 */
-	public static final int	INTEGER		= 3;
+	int	INTEGER		= 3;
 	/**
-	 * The <code>SHORT</code> (4) type.
+	 * The {@code SHORT} (4) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Short</code>,
-	 * <code>Vector</code> with <code>Short</code> or <code>short[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code Short}, {@code Vector}
+	 * with {@code Short} or {@code short[]} objects, depending on the {@code
+	 * getCardinality()} value.
 	 */
-	public static final int	SHORT		= 4;
+	int	SHORT		= 4;
 	/**
-	 * The <code>CHARACTER</code> (5) type.
+	 * The {@code CHARACTER} (5) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Character</code>,
-	 * <code>Vector</code> with <code>Character</code> or <code>char[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code Character}, {@code
+	 * Vector} with {@code Character} or {@code char[]} objects, depending on
+	 * the {@code getCardinality()} value.
 	 */
-	public static final int	CHARACTER	= 5;
+	int	CHARACTER	= 5;
 	/**
-	 * The <code>BYTE</code> (6) type.
+	 * The {@code BYTE} (6) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Byte</code>,
-	 * <code>Vector</code> with <code>Byte</code> or <code>byte[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code Byte}, {@code Vector}
+	 * with {@code Byte} or {@code byte[]} objects, depending on the {@code
+	 * getCardinality()} value.
 	 */
-	public static final int	BYTE		= 6;
+	int	BYTE		= 6;
 	/**
-	 * The <code>DOUBLE</code> (7) type.
+	 * The {@code DOUBLE} (7) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Double</code>,
-	 * <code>Vector</code> with <code>Double</code> or <code>double[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code Double}, {@code
+	 * Vector} with {@code Double} or {@code double[]} objects, depending on the
+	 * {@code getCardinality()} value.
 	 */
-	public static final int	DOUBLE		= 7;
+	int	DOUBLE		= 7;
 	/**
-	 * The <code>FLOAT</code> (8) type.
+	 * The {@code FLOAT} (8) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Float</code>,
-	 * <code>Vector</code> with <code>Float</code> or <code>float[]</code> objects,
-	 * depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code Float}, {@code Vector}
+	 * with {@code Float} or {@code float[]} objects, depending on the {@code
+	 * getCardinality()} value.
 	 */
-	public static final int	FLOAT		= 8;
+	int	FLOAT		= 8;
 	/**
-	 * The <code>BIGINTEGER</code> (9) type.
+	 * The {@code BIGINTEGER} (9) type.
 	 * 
-	 * Attributes of this type should be stored as <code>BigInteger</code>,
-	 * <code>Vector</code> with <code>BigInteger</code> or <code>BigInteger[]</code>
-	 * objects, depending on the <code>getCardinality()</code> value.
+	 * Attributes of this type should be stored as {@code BigInteger}, {@code
+	 * Vector} with {@code BigInteger} or {@code BigInteger[]} objects,
+	 * depending on the {@code getCardinality()} value.
 	 * 
 	 * @deprecated As of 1.1.
 	 */
-	public static final int	BIGINTEGER	= 9;
+	int	BIGINTEGER	= 9;
 	/**
-	 * The <code>BIGDECIMAL</code> (10) type.
+	 * The {@code BIGDECIMAL} (10) type.
 	 * 
-	 * Attributes of this type should be stored as <code>BigDecimal</code>,
-	 * <code>Vector</code> with <code>BigDecimal</code> or <code>BigDecimal[]</code>
-	 * objects depending on <code>getCardinality()</code>.
+	 * Attributes of this type should be stored as {@code BigDecimal}, {@code
+	 * Vector} with {@code BigDecimal} or {@code BigDecimal[]} objects depending
+	 * on {@code getCardinality()}.
 	 * 
 	 * @deprecated As of 1.1.
 	 */
-	public static final int	BIGDECIMAL	= 10;
+	int	BIGDECIMAL	= 10;
 	/**
-	 * The <code>BOOLEAN</code> (11) type.
+	 * The {@code BOOLEAN} (11) type.
 	 * 
-	 * Attributes of this type should be stored as <code>Boolean</code>,
-	 * <code>Vector</code> with <code>Boolean</code> or <code>boolean[]</code> objects
-	 * depending on <code>getCardinality()</code>.
+	 * Attributes of this type should be stored as {@code Boolean}, {@code
+	 * Vector} with {@code Boolean} or {@code boolean[]} objects depending on
+	 * {@code getCardinality()}.
 	 */
-	public static final int	BOOLEAN		= 11;
+	int	BOOLEAN		= 11;
+
+	/**
+	 * The {@code PASSWORD} (12) type.
+	 * 
+	 * Attributes of this type must be stored as {@code String}, {@code Vector}
+	 * with {@code String} or {@code String[]} objects depending on {link
+	 * getCardinality()}. A {@code PASSWORD} must be treated as a string but the
+	 * type can be used to disguise the information when displayed to a user to
+	 * prevent others from seeing it.
+	 * 
+	 * @since 1.2
+	 */
+	int	PASSWORD	= 12;
 
 	/**
 	 * Get the name of the attribute. This name may be localized.
 	 * 
 	 * @return The localized name of the definition.
 	 */
-	public String getName();
+	String getName();
 
 	/**
 	 * Unique identity for this attribute.
 	 * 
 	 * Attributes share a global namespace in the registry. E.g. an attribute
-	 * <code>cn</code> or <code>commonName</code> must always be a <code>String</code>
-	 * and the semantics are always a name of some object. They share this
-	 * aspect with LDAP/X.500 attributes. In these standards the OSI Object
-	 * Identifier (OID) is used to uniquely identify an attribute. If such an
-	 * OID exists, (which can be requested at several standard organisations and
-	 * many companies already have a node in the tree) it can be returned here.
-	 * Otherwise, a unique id should be returned which can be a Java class name
-	 * (reverse domain name) or generated with a GUID algorithm. Note that all
-	 * LDAP defined attributes already have an OID. It is strongly advised to
-	 * define the attributes from existing LDAP schemes which will give the OID.
-	 * Many such schemes exist ranging from postal addresses to DHCP parameters.
+	 * {@code cn} or {@code commonName} must always be a {@code String} and the
+	 * semantics are always a name of some object. They share this aspect with
+	 * LDAP/X.500 attributes. In these standards the OSI Object Identifier (OID)
+	 * is used to uniquely identify an attribute. If such an OID exists, (which
+	 * can be requested at several standard organisations and many companies
+	 * already have a node in the tree) it can be returned here. Otherwise, a
+	 * unique id should be returned which can be a Java class name (reverse
+	 * domain name) or generated with a GUID algorithm. Note that all LDAP
+	 * defined attributes already have an OID. It is strongly advised to define
+	 * the attributes from existing LDAP schemes which will give the OID. Many
+	 * such schemes exist ranging from postal addresses to DHCP parameters.
 	 * 
 	 * @return The id or oid
 	 */
-	public String getID();
+	String getID();
 
 	/**
 	 * Return a description of this attribute.
@@ -154,13 +167,13 @@ public interface AttributeDefinition {
 	 * 
 	 * @return The localized description of the definition.
 	 */
-	public String getDescription();
+	String getDescription();
 
 	/**
 	 * Return the cardinality of this attribute.
 	 * 
 	 * The OSGi environment handles multi valued attributes in arrays ([]) or in
-	 * <code>Vector</code> objects. The return value is defined as follows:
+	 * {@code Vector} objects. The return value is defined as follows:
 	 * 
 	 * <pre>
 	 * 
@@ -169,42 +182,41 @@ public interface AttributeDefinition {
 	 *    x > 0                     x = max occurrences, store in array []
 	 *    x = Integer.MAX_VALUE    no limit, but use array []
 	 *    x = 0                     1 occurrence required
-	 *  
+	 * 
 	 * </pre>
 	 * 
-	 * @return The cardinality of this attribute. 
+	 * @return The cardinality of this attribute.
 	 */
-	public int getCardinality();
+	int getCardinality();
 
 	/**
 	 * Return the type for this attribute.
 	 * 
 	 * <p>
 	 * Defined in the following constants which map to the appropriate Java
-	 * type. <code>STRING</code>,<code>LONG</code>,<code>INTEGER</code>,
-	 * <code>CHAR</code>,<code>BYTE</code>,<code>DOUBLE</code>,<code>FLOAT</code>,
-	 * <code>BOOLEAN</code>.
-	 *
+	 * type. {@code STRING},{@code LONG},{@code INTEGER}, {@code CHAR},{@code
+	 * BYTE},{@code DOUBLE},{@code FLOAT}, {@code BOOLEAN}.
+	 * 
 	 * @return The type for this attribute.
 	 */
-	public int getType();
+	int getType();
 
 	/**
 	 * Return a list of option values that this attribute can take.
 	 * 
 	 * <p>
-	 * If the function returns <code>null</code>, there are no option values
+	 * If the function returns {@code null}, there are no option values
 	 * available.
 	 * 
 	 * <p>
 	 * Each value must be acceptable to validate() (return "") and must be a
-	 * <code>String</code> object that can be converted to the data type defined
-	 * by getType() for this attribute.
+	 * {@code String} object that can be converted to the data type defined by
+	 * getType() for this attribute.
 	 * 
 	 * <p>
-	 * This list must be in the same sequence as <code>getOptionLabels()</code>.
-	 * I.e. for each index i in <code>getOptionValues</code>, i in
-	 * <code>getOptionLabels()</code> should be the label.
+	 * This list must be in the same sequence as {@code getOptionLabels()}. I.e.
+	 * for each index i in {@code getOptionValues}, i in {@code
+	 * getOptionLabels()} should be the label.
 	 * 
 	 * <p>
 	 * For example, if an attribute can have the value male, female, unknown,
@@ -213,23 +225,23 @@ public interface AttributeDefinition {
 	 * 
 	 * @return A list values
 	 */
-	public String[] getOptionValues();
+	String[] getOptionValues();
 
 	/**
 	 * Return a list of labels of option values.
 	 * 
 	 * <p>
 	 * The purpose of this method is to allow menus with localized labels. It is
-	 * associated with <code>getOptionValues</code>. The labels returned here are
+	 * associated with {@code getOptionValues}. The labels returned here are
 	 * ordered in the same way as the values in that method.
 	 * 
 	 * <p>
-	 * If the function returns <code>null</code>, there are no option labels
+	 * If the function returns {@code null}, there are no option labels
 	 * available.
 	 * <p>
-	 * This list must be in the same sequence as the <code>getOptionValues()</code>
-	 * method. I.e. for each index i in <code>getOptionLabels</code>, i in
-	 * <code>getOptionValues()</code> should be the associated value.
+	 * This list must be in the same sequence as the {@code getOptionValues()}
+	 * method. I.e. for each index i in {@code getOptionLabels}, i in {@code
+	 * getOptionValues()} should be the associated value.
 	 * 
 	 * <p>
 	 * For example, if an attribute can have the value male, female, unknown,
@@ -238,10 +250,10 @@ public interface AttributeDefinition {
 	 * 
 	 * @return A list values
 	 */
-	public String[] getOptionLabels();
+	String[] getOptionLabels();
 
 	/**
-	 * Validate an attribute in <code>String</code> form.
+	 * Validate an attribute in {@code String} form.
 	 * 
 	 * An attribute might be further constrained in value. This method will
 	 * attempt to validate the attribute according to these constraints. It can
@@ -254,15 +266,15 @@ public interface AttributeDefinition {
 	 * </pre>
 	 * 
 	 * @param value The value before turning it into the basic data type
-	 * @return <code>null</code>, "", or another string
+	 * @return {@code null}, "", or another string
 	 */
-	public String validate(String value);
+	String validate(String value);
 
 	/**
 	 * Return a default for this attribute.
 	 * 
 	 * The object must be of the appropriate type as defined by the cardinality
-	 * and <code>getType()</code>. The return type is a list of <code>String</code>
+	 * and {@code getType()}. The return type is a list of {@code String}
 	 * objects that can be converted to the appropriate type. The cardinality of
 	 * the return array must follow the absolute cardinality of this type. E.g.
 	 * if the cardinality = 0, the array must contain 1 element. If the
@@ -271,7 +283,7 @@ public interface AttributeDefinition {
 	 * cardinality, meaning a single value, does not allow arrays or vectors of
 	 * 0 elements.
 	 * 
-	 * @return Return a default value or <code>null</code> if no default exists.
+	 * @return Return a default value or {@code null} if no default exists.
 	 */
-	public String[] getDefaultValue();
+	String[] getDefaultValue();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeInformation.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeInformation.java
index 8b336dc..315197d 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeInformation.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeInformation.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,8 @@ import org.osgi.framework.Bundle;
  * A MetaType Information object is created by the MetaTypeService to return
  * meta type information for a specific bundle.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: e9f2197c7ff1475c73b847fb1a6f2157bc99cbf8 $
  * @since 1.1
  */
 public interface MetaTypeInformation extends MetaTypeProvider {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeProvider.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeProvider.java
index b2385b2..28546bd 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeProvider.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,40 +16,65 @@
 package org.osgi.service.metatype;
 
 /**
- * Provides access to metatypes.
+ * Provides access to metatypes. This interface can be implemented on a Managed
+ * Service or Managed Service Factory as well as registered as a service. When
+ * registered as a service, it must be registered with a
+ * {@link #METATYPE_FACTORY_PID} or {@link #METATYPE_PID} service property (or
+ * both). Any PID mentioned in either of these factories must be a valid argument
+ * to the {@link #getObjectClassDefinition(String, String)} method.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: c9ac9ae0403544906652ac97ddc87ed8c9900c78 $
  */
 public interface MetaTypeProvider {
+
+	/**
+	 * Service property to signal that this service has
+	 * {@link ObjectClassDefinition} objects for the given PIDs. The type of
+	 * this service property is {@code String+}.
+	 * 
+	 * @since 1.2
+	 */
+	String	METATYPE_PID			= "metatype.pid";
+
+	/**
+	 * Service property to signal that this service has
+	 * {@link ObjectClassDefinition} objects for the given factory PIDs. The
+	 * type of this service property is {@code String+}.
+	 * 
+	 * @since 1.2
+	 */
+	String	METATYPE_FACTORY_PID	= "metatype.factory.pid";
+
 	/**
 	 * Returns an object class definition for the specified id localized to the
 	 * specified locale.
 	 * 
 	 * <p>
-	 * The locale parameter must be a name that consists of <code>language</code>[
-	 * "_" <code>country</code>[ "_" <code>variation</code>] ] as is customary in
-	 * the <code>Locale</code> class. This <code>Locale</code> class is not used
-	 * because certain profiles do not contain it.
+	 * The locale parameter must be a name that consists of {@code language}[
+	 * "_" {@code country}[ "_" {@code variation}] ] as is customary in the
+	 * {@code Locale} class. This {@code Locale} class is not used because
+	 * certain profiles do not contain it.
 	 * 
 	 * @param id The ID of the requested object class. This can be a pid or
 	 *        factory pid returned by getPids or getFactoryPids.
-	 * @param locale The locale of the definition or <code>null</code> for default
+	 * @param locale The locale of the definition or {@code null} for default
 	 *        locale.
-	 * @return A <code>ObjectClassDefinition</code> object.
+	 * @return A {@code ObjectClassDefinition} object.
 	 * @throws IllegalArgumentException If the id or locale arguments are not
 	 *         valid
 	 */
-	public ObjectClassDefinition getObjectClassDefinition(String id, String locale);
+	public ObjectClassDefinition getObjectClassDefinition(String id,
+			String locale);
 
 	/**
 	 * Return a list of available locales.
 	 * 
 	 * The results must be names that consists of language [ _ country [ _
-	 * variation ]] as is customary in the <code>Locale</code> class.
+	 * variation ]] as is customary in the {@code Locale} class.
+	 * 
+	 * @return An array of locale strings or {@code null} if there is no locale
+	 *         specific localization can be found.
 	 * 
-	 * @return An array of locale strings or <code>null</code> if there is no
-	 *         locale specific localization can be found.
-	 *  
 	 */
 	public String[] getLocales();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java
index d8f77a3..b9335de 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/MetaTypeService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,18 +20,19 @@ import org.osgi.framework.Bundle;
 /**
  * The MetaType Service can be used to obtain meta type information for a
  * bundle. The MetaType Service will examine the specified bundle for meta type
- * documents to create the returned <code>MetaTypeInformation</code> object.
+ * documents to create the returned {@code MetaTypeInformation} object.
  * 
  * <p>
  * If the specified bundle does not contain any meta type documents, then a
- * <code>MetaTypeInformation</code> object will be returned that wrappers any
- * <code>ManagedService</code> or <code>ManagedServiceFactory</code>
+ * {@code MetaTypeInformation} object will be returned that wrappers any
+ * {@code ManagedService} or {@code ManagedServiceFactory}
  * services registered by the specified bundle that implement
- * <code>MetaTypeProvider</code>. Thus the MetaType Service can be used to
+ * {@code MetaTypeProvider}. Thus the MetaType Service can be used to
  * retrieve meta type information for bundles which contain a meta type
- * documents or which provide their own <code>MetaTypeProvider</code> objects.
+ * documents or which provide their own {@code MetaTypeProvider} objects.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 2324451e73130e2c8dde2aa1595997a05c77ab5b $
  * @since 1.1
  */
 public interface MetaTypeService {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/ObjectClassDefinition.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/ObjectClassDefinition.java
index 5c6687e..4ddc33c 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/ObjectClassDefinition.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/ObjectClassDefinition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,27 +21,27 @@ import java.io.InputStream;
 /**
  * Description for the data type information of an objectclass.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 944028508b3b88cef2e1996567d0d946fba8b9bb $
  */
 public interface ObjectClassDefinition {
 	/**
-	 * Argument for <code>getAttributeDefinitions(int)</code>.
+	 * Argument for {@code getAttributeDefinitions(int)}.
 	 * <p>
-	 * <code>REQUIRED</code> indicates that only the required definitions are
+	 * {@code REQUIRED} indicates that only the required definitions are
 	 * returned. The value is 1.
 	 */
 	public static final int	REQUIRED	= 1;
 	/**
-	 * Argument for <code>getAttributeDefinitions(int)</code>.
+	 * Argument for {@code getAttributeDefinitions(int)}.
 	 * <p>
-	 * <code>OPTIONAL</code> indicates that only the optional definitions are
+	 * {@code OPTIONAL} indicates that only the optional definitions are
 	 * returned. The value is 2.
 	 */
 	public static final int	OPTIONAL	= 2;
 	/**
-	 * Argument for <code>getAttributeDefinitions(int)</code>.
+	 * Argument for {@code getAttributeDefinitions(int)}.
 	 * <p>
-	 * <code>ALL</code> indicates that all the definitions are returned. The value
+	 * {@code ALL} indicates that all the definitions are returned. The value
 	 * is -1.
 	 */
 	public static final int	ALL			= 0xFFFFFFFF;
@@ -59,7 +59,7 @@ public interface ObjectClassDefinition {
 	 * Return the id of this object class.
 	 * 
 	 * <p>
-	 * <code>ObjectDefintion</code> objects share a global namespace in the
+	 * {@code ObjectDefintion} objects share a global namespace in the
 	 * registry. They share this aspect with LDAP/X.500 attributes. In these
 	 * standards the OSI Object Identifier (OID) is used to uniquely identify
 	 * object classes. If such an OID exists, (which can be requested at several
@@ -89,21 +89,21 @@ public interface ObjectClassDefinition {
 	 * 
 	 * <p>
 	 * Return a set of attributes. The filter parameter can distinguish between
-	 * <code>ALL</code>,<code>REQUIRED</code> or the <code>OPTIONAL</code>
+	 * {@code ALL},{@code REQUIRED} or the {@code OPTIONAL}
 	 * attributes.
 	 * 
-	 * @param filter <code>ALL</code>,<code>REQUIRED</code>,<code>OPTIONAL</code>
-	 * @return An array of attribute definitions or <code>null</code> if no
+	 * @param filter {@code ALL},{@code REQUIRED},{@code OPTIONAL}
+	 * @return An array of attribute definitions or {@code null} if no
 	 *         attributes are selected
 	 */
 	public AttributeDefinition[] getAttributeDefinitions(int filter);
 
 	/**
-	 * Return an <code>InputStream</code> object that can be used to create an
+	 * Return an {@code InputStream} object that can be used to create an
 	 * icon from.
 	 * 
 	 * <p>
-	 * Indicate the size and return an <code>InputStream</code> object containing
+	 * Indicate the size and return an {@code InputStream} object containing
 	 * an icon. The returned icon maybe larger or smaller than the indicated
 	 * size.
 	 * 
@@ -112,8 +112,8 @@ public interface ObjectClassDefinition {
 	 * 
 	 * @param size Requested size of an icon, e.g. a 16x16 pixels icon then size =
 	 *        16
-	 * @return An InputStream representing an icon or <code>null</code>
-	 * @throws IOException If the <code>InputStream</code> cannot be returned.
+	 * @return An InputStream representing an icon or {@code null}
+	 * @throws IOException If the {@code InputStream} cannot be returned.
 	 */
 	public InputStream getIcon(int size) throws IOException;
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package-info.java
new file mode 100644
index 0000000..40c1152
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Metatype Package Version 1.2.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.metatype; version="[1.2,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.metatype; version="[1.2,1.3)"}
+ * 
+ * @version $Id: 8ca1bb1dade823a7e80a6f8d26f47997774b88ff $
+ */
+
+package org.osgi.service.metatype;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package.html
deleted file mode 100644
index 0b2b533..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Metatype Package Version 1.1.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.metatype; version="[1.1,2.0)"
-</pre>
-</BODY>
-
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo
index 3987f9c..ef7df68 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/metatype/packageinfo
@@ -1 +1 @@
-version 1.1
+version 1.2
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java
index 0b29053..c4be975 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/ProvisioningService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,13 +29,13 @@ import java.util.zip.ZipInputStream;
  * these bundles to exchange information. It also provides a means for the
  * initial Management Bundle to get its initial configuration information.
  * <p>
- * The provisioning information is collected in a <code>Dictionary</code>
+ * The provisioning information is collected in a {@code Dictionary}
  * object, called the Provisioning Dictionary. Any bundle that can access the
  * service can get a reference to this object and read and update provisioning
- * information. The key of the dictionary is a <code>String</code> object and
- * the value is a <code>String</code> or <code>byte[]</code> object. The
+ * information. The key of the dictionary is a {@code String} object and
+ * the value is a {@code String} or {@code byte[]} object. The
  * single exception is the PROVISIONING_UPDATE_COUNT value which is an Integer.
- * The <code>provisioning</code> prefix is reserved for keys defined by OSGi,
+ * The {@code provisioning} prefix is reserved for keys defined by OSGi,
  * other key names may be used for implementation dependent provisioning
  * systems.
  * <p>
@@ -51,31 +51,32 @@ import java.util.zip.ZipInputStream;
  * The provisioning information has the potential to contain sensitive
  * information. Also, the ability to modify provisioning information can have
  * drastic consequences. Thus, only trusted bundles should be allowed to
- * register and get the Provisioning Service. The <code>ServicePermission</code>
+ * register and get the Provisioning Service. The {@code ServicePermission}
  * is used to limit the bundles that can gain access to the Provisioning
- * Service. There is no check of <code>Permission</code> objects to read or
+ * Service. There is no check of {@code Permission} objects to read or
  * modify the provisioning information, so care must be taken not to leak the
- * Provisioning Dictionary received from <code>getInformation</code> method.
+ * Provisioning Dictionary received from {@code getInformation} method.
  * 
- * @version $Revision: 5654 $
+ * @noimplement
+ * @version $Id: b60b95d058ae1ac8498de17dceab9c21c712859b $
  */
 public interface ProvisioningService {
 	/**
 	 * The key to the provisioning information that uniquely identifies the
-	 * Service Platform. The value must be of type <code>String</code>.
+	 * Service Platform. The value must be of type {@code String}.
 	 */
 	public final static String	PROVISIONING_SPID			= "provisioning.spid";
 
 	/**
 	 * The key to the provisioning information that contains the location of the
-	 * provision data provider. The value must be of type <code>String</code>.
+	 * provision data provider. The value must be of type {@code String}.
 	 */
 	public final static String	PROVISIONING_REFERENCE		= "provisioning.reference";
 	
 	/**
 	 * The key to the provisioning information that contains the initial
 	 * configuration information of the initial Management Agent. The value will
-	 * be of type <code>byte[]</code>.
+	 * be of type {@code byte[]}.
 	 */
 	public final static String	PROVISIONING_AGENT_CONFIG	= "provisioning.agent.config";
 	
@@ -83,14 +84,14 @@ public interface ProvisioningService {
 	 * The key to the provisioning information that contains the update count of
 	 * the info data. Each set of changes to the provisioning information must
 	 * end with this value being incremented. The value must be of type
-	 * <code>Integer</code>. This key/value pair is also reflected in the
+	 * {@code Integer}. This key/value pair is also reflected in the
 	 * properties of the ProvisioningService in the service registry.
 	 */
 	public final static String	PROVISIONING_UPDATE_COUNT	= "provisioning.update.count";
 	
 	/**
 	 * The key to the provisioning information that contains the location of the
-	 * bundle to start with <code>AllPermission</code>. The bundle must have
+	 * bundle to start with {@code AllPermission}. The bundle must have
 	 * be previously installed for this entry to have any effect.
 	 */
 	public final static String	PROVISIONING_START_BUNDLE	= "provisioning.start.bundle";
@@ -106,37 +107,37 @@ public interface ProvisioningService {
 	 * used in conjunction with the RSH protocol.
 	 */
 	public final static String	PROVISIONING_RSH_SECRET		= "provisioning.rsh.secret";
-	
+
 	/**
-	 * MIME type to be used in the InitialProvisioning-Entries header or stored
-	 * in the extra field of a <code>ZipEntry</code> object for String data.
+	 * MIME type to be stored in the extra field of a {@code ZipEntry}
+	 * object for String data.
 	 */
 	public final static String	MIME_STRING					= "text/plain;charset=utf-8";
-	
+
 	/**
-	 * MIME type to be used in the InitialProvisioning-Entries header or stored
-	 * stored in the extra field of a <code>ZipEntry</code> object for
-	 * <code>byte[]</code> data.
+	 * MIME type to be stored stored in the extra field of a
+	 * {@code ZipEntry} object for {@code byte[]} data.
 	 */
 	public final static String	MIME_BYTE_ARRAY				= "application/octet-stream";
-	
+
 	/**
-	 * MIME type to be used in the InitialProvisioning-Entries header or stored
-	 * stored in the extra field of a <code>ZipEntry</code> object for an
-	 * installable bundle file. Zip entries of this type will be installed in
-	 * the framework, but not started. The entry will also not be put into the
-	 * information dictionary.
+	 * MIME type to be stored in the extra field of a {@code ZipEntry}
+	 * object for an installable bundle file. Zip entries of this type will be
+	 * installed in the framework, but not started. The entry will also not be
+	 * put into the information dictionary.
 	 */
 	public final static String	MIME_BUNDLE					= "application/vnd.osgi.bundle";
 
 	/**
-	 * Alternative MIME type to be used in the InitialProvisioning-Entries header or stored
-	 * stored in the extra field of a <code>ZipEntry</code> object for an
-	 * installable bundle file. Zip entries of this type will be installed in
-	 * the framework, but not started. The entry will also not be put into the
-	 * information dictionary. This alternative entry is only for backward compatibility,
-	 * new applications are recommended to use <code>MIME_BUNDLE</code>, which is an official
+	 * Alternative MIME type to be stored in the extra field of a
+	 * {@code ZipEntry} object for an installable bundle file. Zip entries
+	 * of this type will be installed in the framework, but not started. The
+	 * entry will also not be put into the information dictionary. This
+	 * alternative entry is only for backward compatibility, new applications
+	 * are recommended to use {@code MIME_BUNDLE}, which is an official
 	 * IANA MIME type.
+	 * 
+	 * @since 1.2
 	 */
 	public final static String	MIME_BUNDLE_ALT				= "application/x-osgi-bundle";
 
@@ -149,17 +150,19 @@ public interface ProvisioningService {
 	public final static String	MIME_BUNDLE_URL				= "text/x-osgi-bundle-url";
 
 	/**
-	 * Name of the header that specifies the (MIME) type information for the ZIP file
+	 * Name of the header that specifies the type information for the ZIP file
 	 * entries.
+	 * 
+	 * @since 1.2
 	 */	
 	public final static String INITIALPROVISIONING_ENTRIES = "InitialProvisioning-Entries";
 	
 	/**
 	 * Returns a reference to the Provisioning Dictionary. Any change operations
 	 * (put and remove) to the dictionary will cause an
-	 * <code>UnsupportedOperationException</code> to be thrown. Changes must
-	 * be done using the <code>setInformation</code> and
-	 * <code>addInformation</code> methods of this service.
+	 * {@code UnsupportedOperationException} to be thrown. Changes must
+	 * be done using the {@code setInformation} and
+	 * {@code addInformation} methods of this service.
 	 * 
 	 * @return A reference to the Provisioning Dictionary.
 	 */
@@ -167,9 +170,9 @@ public interface ProvisioningService {
 
 	/**
 	 * Replaces the Provisioning Information dictionary with the key/value pairs
-	 * contained in <code>info</code>. Any key/value pairs not in
-	 * <code>info</code> will be removed from the Provisioning Information
-	 * dictionary. This method causes the <code>PROVISIONING_UPDATE_COUNT</code>
+	 * contained in {@code info}. Any key/value pairs not in
+	 * {@code info} will be removed from the Provisioning Information
+	 * dictionary. This method causes the {@code PROVISIONING_UPDATE_COUNT}
 	 * to be incremented.
 	 * 
 	 * @param info the new set of Provisioning Information key/value pairs. Any
@@ -179,9 +182,9 @@ public interface ProvisioningService {
 	public void setInformation(Dictionary info);
 
 	/**
-	 * Adds the key/value pairs contained in <code>info</code> to the
+	 * Adds the key/value pairs contained in {@code info} to the
 	 * Provisioning Information dictionary. This method causes the
-	 * <code>PROVISIONING_UPDATE_COUNT</code> to be incremented.
+	 * {@code PROVISIONING_UPDATE_COUNT} to be incremented.
 	 * 
 	 * @param info the set of Provisioning Information key/value pairs to add to
 	 *        the Provisioning Information dictionary. Any keys are values that
@@ -190,18 +193,18 @@ public interface ProvisioningService {
 	public void addInformation(Dictionary info);
 
 	/**
-	 * Processes the <code>ZipInputStream</code> and extracts information to
+	 * Processes the {@code ZipInputStream} and extracts information to
 	 * add to the Provisioning Information dictionary, as well as,
 	 * install/update and start bundles. This method causes the
-	 * <code>PROVISIONING_UPDATE_COUNT</code> to be incremented.
+	 * {@code PROVISIONING_UPDATE_COUNT} to be incremented.
 	 * 
-	 * @param zis the <code>ZipInputStream</code> that will be used to add
+	 * @param zis the {@code ZipInputStream} that will be used to add
 	 *        key/value pairs to the Provisioning Information dictionary and
-	 *        install and start bundles. If a <code>ZipEntry</code> does not
-	 *        have an <code>Extra</code> field that corresponds to one of the
-	 *        four defined MIME types (<code>MIME_STRING</code>,
-	 *        <code>MIME_BYTE_ARRAY</code>,<code>MIME_BUNDLE</code>, and
-	 *        <code>MIME_BUNDLE_URL</code>) in will be silently ignored.
+	 *        install and start bundles. If a {@code ZipEntry} does not
+	 *        have an {@code Extra} field that corresponds to one of the
+	 *        four defined MIME types ({@code MIME_STRING},
+	 *        {@code MIME_BYTE_ARRAY},{@code MIME_BUNDLE}, and
+	 *        {@code MIME_BUNDLE_URL}) in will be silently ignored.
 	 * @throws IOException if an error occurs while processing the
 	 *         ZipInputStream. No additions will be made to the Provisioning
 	 *         Information dictionary and no bundles must be started or
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package-info.java
new file mode 100644
index 0000000..42dba55
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Provisioning Package Version 1.2.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.provisioning; version="[1.2,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.provisioning; version="[1.2,1.3)"}
+ * 
+ * @version $Id: 6c38e491df3cbc37cfad465c0298d642463c9c3a $
+ */
+
+package org.osgi.service.provisioning;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package.html
deleted file mode 100644
index 8c28950..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/provisioning/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Provisioning Package Version 1.2.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.provisioning; version="[1.2,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java
index 742673f..0568f8a 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPAction.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,19 +23,19 @@ import java.util.Dictionary;
  * Each UPnP service contains zero or more actions. Each action may have zero or
  * more UPnP state variables as arguments.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: c2a6803411defc79ce59fe2e93828158355cb1e0 $
  */
 public interface UPnPAction {
 	/**
 	 * Returns the action name.
 	 * 
-	 * The action name corresponds to the <code>name</code> field in the
-	 * <code>actionList</code> of the service description.
+	 * The action name corresponds to the {@code name} field in the
+	 * {@code actionList} of the service description.
 	 * <ul>
 	 * <li>For standard actions defined by a UPnP Forum working committee,
-	 * action names must not begin with <code>X_ </code> nor <code> A_</code>.</li>
+	 * action names must not begin with {@code X_ } nor {@code  A_}.</li>
 	 * <li>For non-standard actions specified by a UPnP vendor and added to a
-	 * standard service, action names must begin with <code>X_</code>.</li>
+	 * standard service, action names must begin with {@code X_}.</li>
 	 * </ul>
 	 * 
 	 * @return Name of action, must not contain a hyphen character or a hash
@@ -49,7 +49,7 @@ public interface UPnPAction {
 	 * One of the output arguments can be flagged as a designated return
 	 * argument.
 	 * 
-	 * @return The name of the designated return argument or <code>null</code> if
+	 * @return The name of the designated return argument or {@code null} if
 	 *         none is marked.
 	 */
 	String getReturnArgumentName();
@@ -59,7 +59,7 @@ public interface UPnPAction {
 	 * <p>
 	 * Each action may have zero or more input arguments.
 	 * 
-	 * @return Array of input argument names or <code>null</code> if no input
+	 * @return Array of input argument names or {@code null} if no input
 	 *         arguments.
 	 * 
 	 * @see UPnPStateVariable
@@ -69,7 +69,7 @@ public interface UPnPAction {
 	/**
 	 * List all output arguments for this action.
 	 * 
-	 * @return Array of output argument names or <code>null</code> if there are no
+	 * @return Array of output argument names or {@code null} if there are no
 	 *         output arguments.
 	 * 
 	 * @see UPnPStateVariable
@@ -84,7 +84,7 @@ public interface UPnPAction {
 	 * 
 	 * @param argumentName The name of the UPnP action argument.
 	 * @return State variable associated with the named argument or
-	 *         <code>null</code> if there is no such argument.
+	 *         {@code null} if there is no such argument.
 	 * 
 	 * @see UPnPStateVariable
 	 */
@@ -93,23 +93,23 @@ public interface UPnPAction {
 	/**
 	 * Invokes the action.
 	 * 
-	 * The input and output arguments are both passed as <code>Dictionary</code>
-	 * objects. Each entry in the <code>Dictionary</code> object has a
-	 * <code>String</code> object as key representing the argument name and the
+	 * The input and output arguments are both passed as {@code Dictionary}
+	 * objects. Each entry in the {@code Dictionary} object has a
+	 * {@code String} object as key representing the argument name and the
 	 * value is the argument itself. The class of an argument value must be
 	 * assignable from the class of the associated UPnP state variable.
 	 * 
-	 * The input argument <code>Dictionary</code> object must contain exactly
-	 * those arguments listed by <code>getInputArguments</code> method. The output
-	 * argument <code>Dictionary</code> object will contain exactly those
-	 * arguments listed by <code>getOutputArguments</code> method.
+	 * The input argument {@code Dictionary} object must contain exactly
+	 * those arguments listed by {@code getInputArguments} method. The output
+	 * argument {@code Dictionary} object will contain exactly those
+	 * arguments listed by {@code getOutputArguments} method.
 	 *
-	 * @param args A <code>Dictionary</code> of arguments. Must contain the correct set and
-	 * type of arguments for this action. May be <code>null</code> if no
+	 * @param args A {@code Dictionary} of arguments. Must contain the correct set and
+	 * type of arguments for this action. May be {@code null} if no
 	 * input arguments exist.
 	 *
-	 * @return A <code>Dictionary</code> with the output arguments.
-	 *         <code>null</code> if the action has no output arguments.
+	 * @return A {@code Dictionary} with the output arguments.
+	 *         {@code null} if the action has no output arguments.
 	 *
 	 * @throws UPnPException  A UPnP error has occured.
 	 * @throws Exception The execution fails for some reason.
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java
index 24ce178..62b2441 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPDevice.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,11 +21,11 @@ import java.util.Dictionary;
  * Represents a UPnP device.
  * 
  * For each UPnP root and embedded device, an object is registered with the
- * framework under the <code>UPnPDevice</code> interface.
+ * framework under the {@code UPnPDevice} interface.
  * <p>
  * The relationship between a root device and its embedded devices can be
- * deduced using the <code>UPnPDevice.CHILDREN_UDN</code> and
- * <code>UPnPDevice.PARENT_UDN</code> service registration properties.
+ * deduced using the {@code UPnPDevice.CHILDREN_UDN} and
+ * {@code UPnPDevice.PARENT_UDN} service registration properties.
  * <p>
  * The values of the UPnP property names are defined by the UPnP Forum.
  * <p>
@@ -33,9 +33,9 @@ import java.util.Dictionary;
  * device's default locale.
  * <p>
  * If an application wants to query for a set of localized property values, it
- * has to use the method <code>UPnPDevice.getDescriptions(String locale)</code>.
+ * has to use the method {@code UPnPDevice.getDescriptions(String locale)}.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 0ab66605c59e61ce1dd1d807e45beceef5d44f67 $
  */
 public interface UPnPDevice {
 	/*
@@ -67,14 +67,14 @@ public interface UPnPDevice {
 	 */
 	int		MATCH_MANUFACTURER_MODEL_REVISION_SERIAL	= 31;
 	/**
-	 * Constant for the value of the service property <code>DEVICE_CATEGORY</code>
+	 * Constant for the value of the service property {@code DEVICE_CATEGORY}
 	 * used for all UPnP devices. Value is "UPnP".
 	 * 
-	 * @see "<code>org.osgi.service.device.Constants.DEVICE_CATEGORY</code>"
+	 * @see "{@code org.osgi.service.device.Constants.DEVICE_CATEGORY}"
 	 */
 	String	DEVICE_CATEGORY								= "UPnP";
 	/**
-	 * The <code>UPnP.export</code> service property is a hint that marks a device
+	 * The {@code UPnP.export} service property is a hint that marks a device
 	 * to be picked up and exported by the UPnP Service. Imported devices do not
 	 * have this property set. The registered property requires no value.
 	 * <p>
@@ -83,16 +83,16 @@ public interface UPnPDevice {
 	String	UPNP_EXPORT									= "UPnP.export";
 	/**
 	 * Property key for the Unique Device Name (UDN) property. It is the unique
-	 * identifier of an instance of a <code>UPnPDevice</code>. The value of the
-	 * property is a <code>String</code> object of the Device UDN. Value of the
+	 * identifier of an instance of a {@code UPnPDevice}. The value of the
+	 * property is a {@code String} object of the Device UDN. Value of the
 	 * key is "UPnP.device.UDN". This property must be set.
 	 */
 	String	UDN											= "UPnP.device.UDN";
 	/**
 	 * Property key for the Unique Device ID property. This property is an alias
-	 * to <code>UPnPDevice.UDN</code>. It is merely provided for reasons of
-	 * symmetry with the <code>UPnPService.ID</code> property. The value of the
-	 * property is a <code>String</code> object of the Device UDN. The value of
+	 * to {@code UPnPDevice.UDN}. It is merely provided for reasons of
+	 * symmetry with the {@code UPnPService.ID} property. The value of the
+	 * property is a {@code String} object of the Device UDN. The value of
 	 * the key is "UPnP.device.UDN".
 	 */
 	String	ID											= UDN;
@@ -106,18 +106,18 @@ public interface UPnPDevice {
 	 * consist of the following components in the given order separated by
 	 * colons:
 	 * <ul>
-	 * <li><code>urn</code></li>
+	 * <li>{@code urn}</li>
 	 * <li>schemas-upnp-org</li>
-	 * <li><code>device</code></li>
+	 * <li>{@code device}</li>
 	 * <li>a device type suffix</li>
 	 * <li>an integer device version</li>
 	 * </ul>
 	 * For non-standard devices specified by UPnP vendors following components
 	 * must be specified in the given order separated by colons:
 	 * <ul>
-	 * <li><code>urn</code></li>
+	 * <li>{@code urn}</li>
 	 * <li>an ICANN domain name owned by the vendor</li>
-	 * <li><code>device</code></li>
+	 * <li>{@code device}</li>
 	 * <li>a device type suffix</li>
 	 * <li>an integer device version</li>
 	 * </ul>
@@ -131,7 +131,7 @@ public interface UPnPDevice {
 	 * In the case of exporting a UPnPDevice, the highest available version must
 	 * be announced on the network.
 	 * <p>
-	 * Syntax Example: <code>urn:schemas-upnp-org:device:deviceType:v</code>
+	 * Syntax Example: {@code urn:schemas-upnp-org:device:deviceType:v}
 	 * <p>
 	 * The value is "UPnP.device.type".
 	 */
@@ -144,53 +144,53 @@ public interface UPnPDevice {
 	String	MANUFACTURER								= "UPnP.device.manufacturer";
 	/**
 	 * Mandatory property key for the device model name. The property value
-	 * holds a <code>String</code> object giving more information about the device
+	 * holds a {@code String} object giving more information about the device
 	 * model. Value is "UPnP.device.modelName".
 	 */
 	String	MODEL_NAME									= "UPnP.device.modelName";
 	/**
 	 * Mandatory property key for a short user friendly version of the device
-	 * name. The property value holds a <code>String</code> object with the user
+	 * name. The property value holds a {@code String} object with the user
 	 * friendly name of the device. Value is "UPnP.device.friendlyName".
 	 */
 	String	FRIENDLY_NAME								= "UPnP.device.friendlyName";
 	/**
 	 * Optional property key for a URL to the device manufacturers Web site. The
-	 * value of the property is a <code>String</code> object representing the URL.
+	 * value of the property is a {@code String} object representing the URL.
 	 * Value is "UPnP.device.manufacturerURL".
 	 */
 	String	MANUFACTURER_URL							= "UPnP.device.manufacturerURL";
 	/**
-	 * Optional (but recommended) property key for a <code>String</code> object
+	 * Optional (but recommended) property key for a {@code String} object
 	 * with a long description of the device for the end user. The value is
 	 * "UPnP.device.modelDescription".
 	 */
 	String	MODEL_DESCRIPTION							= "UPnP.device.modelDescription";
 	/**
-	 * Optional (but recommended) property key for a <code>String</code> class
+	 * Optional (but recommended) property key for a {@code String} class
 	 * typed property holding the model number of the device. Value is
 	 * "UPnP.device.modelNumber".
 	 */
 	String	MODEL_NUMBER								= "UPnP.device.modelNumber";
 	/**
-	 * Optional property key for a <code>String</code> typed property holding a
+	 * Optional property key for a {@code String} typed property holding a
 	 * string representing the URL to the Web site for this model. Value is
 	 * "UPnP.device.modelURL".
 	 */
 	String	MODEL_URL									= "UPnP.device.modelURL";
 	/**
-	 * Optional (but recommended) property key for a <code>String</code> typed
+	 * Optional (but recommended) property key for a {@code String} typed
 	 * property holding the serial number of the device. Value is
 	 * "UPnP.device.serialNumber".
 	 */
 	String	SERIAL_NUMBER								= "UPnP.device.serialNumber";
 	/**
-	 * Optional property key for a <code>String</code> typed property holding the
+	 * Optional property key for a {@code String} typed property holding the
 	 * Universal Product Code (UPC) of the device. Value is "UPnP.device.UPC".
 	 */
 	String	UPC											= "UPnP.device.UPC";
 	/**
-	 * Optional (but recommended) property key for a <code>String</code> typed
+	 * Optional (but recommended) property key for a {@code String} typed
 	 * property holding a string representing the URL to a device representation
 	 * Web page. Value is "UPnP.presentationURL".
 	 */
@@ -206,7 +206,7 @@ public interface UPnPDevice {
 	 * embedded devices.
 	 * <p>
 	 * The value is an array of UDNs for each of the device's children (
-	 * <code>String[]</code>). The array contains UDNs for the immediate
+	 * {@code String[]}). The array contains UDNs for the immediate
 	 * descendants only.
 	 * </p>
 	 * <p>
@@ -218,7 +218,7 @@ public interface UPnPDevice {
 	 * <p>
 	 * The property is not set if the device does not contain embedded devices.
 	 * <p>
-	 * The property is of type <code>String[]</code>. Value is
+	 * The property is of type {@code String[]}. Value is
 	 * "UPnP.device.childrenUDN"
 	 */
 	String	CHILDREN_UDN								= "UPnP.device.childrenUDN";
@@ -234,7 +234,7 @@ public interface UPnPDevice {
 	/**
 	 * Lists all services provided by this device.
 	 * 
-	 * @return Array of services or <code>null</code> if no services are
+	 * @return Array of services or {@code null} if no services are
 	 *         available.
 	 */
 	UPnPService[] getServices();
@@ -246,9 +246,9 @@ public interface UPnPDevice {
 	 * on the client's locale.
 	 * 
 	 * @param locale A language tag as defined by RFC 1766 and maintained by ISO
-	 *        639. Examples include "<code>de</code>", "<code>en</code>" or "
-	 *        <code>en-US</code>". The default locale of the device is specified
-	 *        by passing a <code>null</code> argument.
+	 *        639. Examples include "{@code de}", "{@code en}" or "
+	 *        {@code en-US}". The default locale of the device is specified
+	 *        by passing a {@code null} argument.
 	 * 
 	 * @return Array of icons or null if no icons are available.
 	 */
@@ -269,9 +269,9 @@ public interface UPnPDevice {
 	 * <p>
 	 * 
 	 * @param locale A language tag as defined by RFC 1766 and maintained by ISO
-	 *        639. Examples include "<code>de</code>", "<code>en</code>" or "
-	 *        <code>en-US</code>". The default locale of the device is specified
-	 *        by passing a <code>null</code> argument.
+	 *        639. Examples include "{@code de}", "{@code en}" or "
+	 *        {@code en-US}". The default locale of the device is specified
+	 *        by passing a {@code null} argument.
 	 * @return Dictionary mapping property name Strings to property value
 	 *         Strings
 	 *  
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java
index 80d4455..98a3f5d 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPEventListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@ import java.util.Dictionary;
  * interface.
  * <p>
  * The notification call from the UPnP Service to any
- * <code>UPnPEventListener</code> object must be done asynchronous with respect
+ * {@code UPnPEventListener} object must be done asynchronous with respect
  * to the originator (in a separate thread).
  * <p>
  * Upon registration of the UPnP Event Listener service with the Framework, the
@@ -37,30 +37,30 @@ import java.util.Dictionary;
  * when the listener service is registered.
  * <p>
  * The filter is specified in a property named "upnp.filter" and has as a value
- * an object of type <code>org.osgi.framework.Filter</code>.
+ * an object of type {@code org.osgi.framework.Filter}.
  * <p>
  * When the Filter is evaluated, the folowing keywords are recognized as defined
- * as literal constants in the <code>UPnPDevice</code> class.
+ * as literal constants in the {@code UPnPDevice} class.
  * <p>
  * The valid subset of properties for the registration of UPnP Event Listener
  * services are:
  * <ul>
- * <li><code>UPnPDevice.TYPE</code>-- Which type of device to listen for events.
+ * <li>{@code UPnPDevice.TYPE}-- Which type of device to listen for events.
  * </li>
- * <li><code>UPnPDevice.ID</code>-- The ID of a specific device to listen for
+ * <li>{@code UPnPDevice.ID}-- The ID of a specific device to listen for
  * events.</li>
- * <li><code>UPnPService.TYPE</code>-- The type of a specific service to listen
+ * <li>{@code UPnPService.TYPE}-- The type of a specific service to listen
  * for events.</li>
- * <li><code>UPnPService.ID</code>-- The ID of a specific service to listen for
+ * <li>{@code UPnPService.ID}-- The ID of a specific service to listen for
  * events.</li>
  * </ul>
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 9b3521a5da0f062c4bcbd6ffb4039c140c093ea5 $
  */
 public interface UPnPEventListener {
 	/**
 	 * Key for a service property having a value that is an object of type
-	 * <code>org.osgi.framework.Filter</code> and that is used to limit received
+	 * {@code org.osgi.framework.Filter} and that is used to limit received
 	 * events.
 	 */
 	static final String	UPNP_FILTER	= "upnp.filter";
@@ -68,15 +68,15 @@ public interface UPnPEventListener {
 	/**
 	 * Callback method that is invoked for received events.
 	 * 
-	 * The events are collected in a <code>Dictionary</code> object. Each entry
-	 * has a <code>String</code> key representing the event name (= state variable
+	 * The events are collected in a {@code Dictionary} object. Each entry
+	 * has a {@code String} key representing the event name (= state variable
 	 * name) and the new value of the state variable. The class of the value
 	 * object must match the class specified by the UPnP State Variable
 	 * associated with the event. This method must be called asynchronously
 	 * 
 	 * @param deviceId ID of the device sending the events
 	 * @param serviceId ID of the service sending the events
-	 * @param events <code>Dictionary</code> object containing the new values for
+	 * @param events {@code Dictionary} object containing the new values for
 	 *        the state variables that have changed.
 	 * 
 	 *  
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java
index 172c995..d6db389 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@ package org.osgi.service.upnp;
  * control point invokes actions to UPnPDevices.
  * 
  * @since 1.1
- * @version $Revision: 5673 $
+ * @version $Id: 04d60e47fb9f2b70e2236253bcfffb9445089953 $
  */
 public class UPnPException extends Exception {
 	static final long		serialVersionUID		= -262013318122195146L;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPIcon.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPIcon.java
index 8b99be9..dd1ebbe 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPIcon.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPIcon.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,14 +23,14 @@ import java.io.InputStream;
  * 
  * Each UPnP device can contain zero or more icons.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: c8d78fcf357a283d6d1999912ffa5f67d03b75a8 $
  */
 public interface UPnPIcon {
 	/**
 	 * Returns the MIME type of the icon.
 	 * 
 	 * This method returns the format in which the icon graphics, read from the
-	 * <code>InputStream</code> object obtained by the <code>getInputStream()</code>
+	 * {@code InputStream} object obtained by the {@code getInputStream()}
 	 * method, is encoded.
 	 * <p>
 	 * The format of the returned string is in accordance to RFC2046. A list of
@@ -65,8 +65,8 @@ public interface UPnPIcon {
 	 * Returns the size of the icon in bytes.
 	 * 
 	 * This method returns the number of bytes of the icon available to read
-	 * from the <code>InputStream</code> object obtained by the
-	 * <code>getInputStream()</code> method. If the actual size can not be
+	 * from the {@code InputStream} object obtained by the
+	 * {@code getInputStream()} method. If the actual size can not be
 	 * determined, -1 is returned.
 	 * 
 	 * @return The icon size in bytes, or -1 if the size is unknown.
@@ -82,17 +82,17 @@ public interface UPnPIcon {
 	int getDepth();
 
 	/**
-	 * Returns an <code>InputStream</code> object for the icon data.
+	 * Returns an {@code InputStream} object for the icon data.
 	 * 
-	 * The <code>InputStream</code> object provides a way for a client to read the
+	 * The {@code InputStream} object provides a way for a client to read the
 	 * actual icon graphics data. The number of bytes available from this
-	 * <code>InputStream</code> object can be determined via the
-	 * <code>getSize()</code> method. The format of the data encoded can be
-	 * determined by the MIME type availble via the <code>getMimeType()</code>
+	 * {@code InputStream} object can be determined via the
+	 * {@code getSize()} method. The format of the data encoded can be
+	 * determined by the MIME type availble via the {@code getMimeType()}
 	 * method.
 	 * 
 	 * @return An InputStream to read the icon graphics data from.
-	 * @throws IOException If the <code>InputStream</code> cannot be returned.
+	 * @throws IOException If the {@code InputStream} cannot be returned.
 	 * @see UPnPIcon#getMimeType()
 	 */
 	InputStream getInputStream() throws IOException;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPLocalStateVariable.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPLocalStateVariable.java
index 241fb8a..8413ee1 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPLocalStateVariable.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPLocalStateVariable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@ package org.osgi.service.upnp;
  * 
  * @since 1.1
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 6ae0a918b04ba50b9782148ac784ea76d9379ace $
  */
 public interface UPnPLocalStateVariable extends UPnPStateVariable {
 	/**
@@ -36,7 +36,7 @@ public interface UPnPLocalStateVariable extends UPnPStateVariable {
 	 * UPnPDevice whenever UPnPStateVariable's value is changed , this method
 	 * must be called.
 	 * 
-	 * @return <code>Object</code> current value of UPnPStateVariable. if the
+	 * @return {@code Object} current value of UPnPStateVariable. if the
 	 *         current value is initialized with the default value defined UPnP
 	 *         service description.
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPService.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPService.java
index 64b5894..1c31bcd 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPService.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,19 +21,19 @@ package org.osgi.service.upnp;
  * Each UPnP device contains zero or more services. The UPnP description for a
  * service defines actions, their arguments, and event characteristics.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 3ba6780294dc8596281eea937a3e80409d2e722c $
  */
 public interface UPnPService {
 	/**
 	 * Property key for the optional service type uri.
 	 * 
 	 * The service type property is used when registering UPnP Device services
-	 * and UPnP Event Listener services. The property contains a <code>String</code>
-	 * array (<code>String[]</code>) of service types. A UPnP Device service can
+	 * and UPnP Event Listener services. The property contains a {@code String}
+	 * array ({@code String[]}) of service types. A UPnP Device service can
 	 * thus announce what types of services it contains. A UPnP Event Listener
 	 * service can announce for what type of UPnP services it wants
 	 * notifications. The service version is encoded in the type string as
-	 * specified in the UPnP specification. A <code>null</code> value is a
+	 * specified in the UPnP specification. A {@code null} value is a
 	 * wildcard, matching <b>all </b> service types. Value is
 	 * "UPnP.service.type".
 	 * 
@@ -45,32 +45,32 @@ public interface UPnPService {
 	 * 
 	 * The service id property is used when registering UPnP Device services or
 	 * UPnP Event Listener services. The value of the property contains a
-	 * <code>String</code> array (<code>String[]</code>) of service ids. A UPnP
+	 * {@code String} array ({@code String[]}) of service ids. A UPnP
 	 * Device service can thus announce what service ids it contains. A UPnP
 	 * Event Listener service can announce for what UPnP service ids it wants
 	 * notifications. A service id does <b>not </b> have to be universally
-	 * unique. It must be unique only within a device. A <code>null</code> value
+	 * unique. It must be unique only within a device. A {@code null} value
 	 * is a wildcard, matching <b>all </b> services. The value is
 	 * "UPnP.service.id".
 	 */
 	String	ID		= "UPnP.service.id";
 
 	/**
-	 * Returns the <code>serviceId</code> field in the UPnP service description.
+	 * Returns the {@code serviceId} field in the UPnP service description.
 	 * 
 	 * 
 	 * <p>
 	 * For standard services defined by a UPnP Forum working committee, the
 	 * serviceId must contain the following components in the indicated order:
 	 * <ul>
-	 * <li><code>urn:upnp-org:serviceId:</code></li>
+	 * <li>{@code urn:upnp-org:serviceId:}</li>
 	 * <li>service ID suffix</li>
 	 * </ul>
-	 * Example: <code>urn:upnp-org:serviceId:serviceID</code>.
+	 * Example: {@code urn:upnp-org:serviceId:serviceID}.
 	 * 
 	 * <p>
-	 * Note that <code>upnp-org</code> is used instead of
-	 * <code>schemas-upnp-org</code> in this example because an XML schema is not
+	 * Note that {@code upnp-org} is used instead of
+	 * {@code schemas-upnp-org} in this example because an XML schema is not
 	 * defined for each serviceId.
 	 * </p>
 	 * 
@@ -78,12 +78,12 @@ public interface UPnPService {
 	 * For non-standard services specified by UPnP vendors, the serviceId must
 	 * contain the following components in the indicated order:
 	 * <ul>
-	 * <li><code>urn:</code></li>
+	 * <li>{@code urn:}</li>
 	 * <li>ICANN domain name owned by the vendor</li>
-	 * <li><code>:serviceId:</code></li>
+	 * <li>{@code :serviceId:}</li>
 	 * <li>service ID suffix</li>
 	 * </ul>
-	 * Example: <code>urn:domain-name:serviceId:serviceID</code>.
+	 * Example: {@code urn:domain-name:serviceId:serviceID}.
 	 * 
 	 * @return The service ID suffix defined by a UPnP Forum working committee
 	 *         or specified by a UPnP vendor. Must be <= 64 characters.
@@ -92,30 +92,30 @@ public interface UPnPService {
 	String getId();
 
 	/**
-	 * Returns the <code>serviceType</code> field in the UPnP service description.
+	 * Returns the {@code serviceType} field in the UPnP service description.
 	 * 
 	 * <p>
 	 * For standard services defined by a UPnP Forum working committee, the
 	 * serviceType must contain the following components in the indicated order:
 	 * <ul>
-	 * <li><code>urn:schemas-upnp-org:service:</code></li>
+	 * <li>{@code urn:schemas-upnp-org:service:}</li>
 	 * <li>service type suffix:</li>
 	 * <li>integer service version</li>
 	 * </ul>
-	 * Example: <code>urn:schemas-upnp-org:service:serviceType:v</code>.
+	 * Example: {@code urn:schemas-upnp-org:service:serviceType:v}.
 	 * 
 	 * <p>
 	 * For non-standard services specified by UPnP vendors, the
-	 * <code>serviceType</code> must contain the following components in the
+	 * {@code serviceType} must contain the following components in the
 	 * indicated order:
 	 * <ul>
-	 * <li><code>urn:</code></li>
+	 * <li>{@code urn:}</li>
 	 * <li>ICANN domain name owned by the vendor</li>
-	 * <li><code>:service:</code></li>
+	 * <li>{@code :service:}</li>
 	 * <li>service type suffix:</li>
 	 * <li>integer service version</li>
 	 * </ul>
-	 * Example: <code>urn:domain-name:service:serviceType:v</code>.
+	 * Example: {@code urn:domain-name:service:serviceType:v}.
 	 * 
 	 * @return The service type suffix defined by a UPnP Forum working committee
 	 *         or specified by a UPnP vendor. Must be <= 64 characters, not
@@ -124,7 +124,7 @@ public interface UPnPService {
 	String getType();
 
 	/**
-	 * Returns the version suffix encoded in the <code>serviceType</code> field in
+	 * Returns the version suffix encoded in the {@code serviceType} field in
 	 * the UPnP service description.
 	 * 
 	 * @return The integer service version defined by a UPnP Forum working
@@ -140,33 +140,33 @@ public interface UPnPService {
 	 * @param name Name of action. Must not contain hyphen or hash characters.
 	 *        Should be < 32 characters.
 	 * 
-	 * @return The requested action or <code>null</code> if no action is found.
+	 * @return The requested action or {@code null} if no action is found.
 	 */
 	UPnPAction getAction(String name);
 
 	/**
 	 * Lists all actions provided by this service.
 	 * 
-	 * @return Array of actions (<code>UPnPAction[]</code> )or <code>null</code> if
+	 * @return Array of actions ({@code UPnPAction[]} )or {@code null} if
 	 *         no actions are defined for this service.
 	 */
 	UPnPAction[] getActions();
 
 	/**
-	 * Lists all <code>UPnPStateVariable</code> objects provided by this service.
+	 * Lists all {@code UPnPStateVariable} objects provided by this service.
 	 * 
-	 * @return Array of state variables or <code>null</code> if none are defined
+	 * @return Array of state variables or {@code null} if none are defined
 	 *         for this service.
 	 */
 	UPnPStateVariable[] getStateVariables();
 
 	/**
-	 * Gets a <code>UPnPStateVariable</code> objects provided by this service by
+	 * Gets a {@code UPnPStateVariable} objects provided by this service by
 	 * name
 	 * 
 	 * @param name Name of the State Variable
 	 * 
-	 * @return State variable or <code>null</code> if no such state variable
+	 * @return State variable or {@code null} if no such state variable
 	 *         exists for this service.
 	 */
 	UPnPStateVariable getStateVariable(String name);
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java
index 27b7241..62de16b 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/UPnPStateVariable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,44 +20,44 @@ package org.osgi.service.upnp;
  * service state table (SST).
  * <p>
  * Method calls to interact with a device (e.g.
- * <code>UPnPAction.invoke(...);</code>) use this class to encapsulate meta
+ * {@code UPnPAction.invoke(...);}) use this class to encapsulate meta
  * information about the input and output arguments.
  * <p>
  * The actual values of the arguments are passed as Java objects. The mapping of
  * types from UPnP data types to Java data types is described with the field
  * definitions.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 01f68f7e5d51feaaee83d39544d27d0e7a6abbcd $
  */
 public interface UPnPStateVariable {
 	/**
-	 * Unsigned 1 <code>Byte</code> int.
+	 * Unsigned 1 {@code Byte} int.
 	 * <p>
-	 * Mapped to an <code>Integer</code> object.
+	 * Mapped to an {@code Integer} object.
 	 */
 	static final String	TYPE_UI1			= "ui1";
 	/**
 	 * Unsigned 2 Byte int.
 	 * <p>
-	 * Mapped to <code>Integer</code> object.
+	 * Mapped to {@code Integer} object.
 	 */
 	static final String	TYPE_UI2			= "ui2";
 	/**
 	 * Unsigned 4 Byte int.
 	 * <p>
-	 * Mapped to <code>Long</code> object.
+	 * Mapped to {@code Long} object.
 	 */
 	static final String	TYPE_UI4			= "ui4";
 	/**
 	 * 1 Byte int.
 	 * <p>
-	 * Mapped to <code>Integer</code> object.
+	 * Mapped to {@code Integer} object.
 	 */
 	static final String	TYPE_I1				= "i1";
 	/**
 	 * 2 Byte int.
 	 * <p>
-	 * Mapped to <code>Integer</code> object.
+	 * Mapped to {@code Integer} object.
 	 */
 	static final String	TYPE_I2				= "i2";
 	/**
@@ -65,13 +65,13 @@ public interface UPnPStateVariable {
 	 * <p>
 	 * Must be between -2147483648 and 2147483647
 	 * <p>
-	 * Mapped to <code>Integer</code> object.
+	 * Mapped to {@code Integer} object.
 	 */
 	static final String	TYPE_I4				= "i4";
 	/**
 	 * Integer number.
 	 * <p>
-	 * Mapped to <code>Integer</code> object.
+	 * Mapped to {@code Integer} object.
 	 */
 	static final String	TYPE_INT			= "int";
 	/**
@@ -79,7 +79,7 @@ public interface UPnPStateVariable {
 	 * <p>
 	 * Same format as float. Must be between 3.40282347E+38 to 1.17549435E-38.
 	 * <p>
-	 * Mapped to <code>Float</code> object.
+	 * Mapped to {@code Float} object.
 	 */
 	static final String	TYPE_R4				= "r4";
 	/**
@@ -90,20 +90,20 @@ public interface UPnPStateVariable {
 	 * 4.94065645841247E-324 and 1.79769313486232E308 for positive values, i.e.,
 	 * IEEE 64-bit (8-Byte) double.
 	 * <p>
-	 * Mapped to <code>Double</code> object.
+	 * Mapped to {@code Double} object.
 	 */
 	static final String	TYPE_R8				= "r8";
 	/**
 	 * Same as r8.
 	 * <p>
-	 * Mapped to <code>Double</code> object.
+	 * Mapped to {@code Double} object.
 	 */
 	static final String	TYPE_NUMBER			= "number";
 	/**
 	 * Same as r8 but no more than 14 digits to the left of the decimal point
 	 * and no more than 4 to the right.
 	 * <p>
-	 * Mapped to <code>Double</code> object.
+	 * Mapped to {@code Double} object.
 	 */
 	static final String	TYPE_FIXED_14_4		= "fixed.14.4";
 	/**
@@ -116,7 +116,7 @@ public interface UPnPStateVariable {
 	 * currency symbol.) (No grouping of digits in the mantissa, e.g., no
 	 * commas.)
 	 * <p>
-	 * Mapped to <code>Float</code> object.
+	 * Mapped to {@code Float} object.
 	 */
 	static final String	TYPE_FLOAT			= "float";
 	/**
@@ -124,7 +124,7 @@ public interface UPnPStateVariable {
 	 * <p>
 	 * One character long.
 	 * <p>
-	 * Mapped to <code>Character</code> object.
+	 * Mapped to {@code Character} object.
 	 */
 	static final String	TYPE_CHAR			= "char";
 	/**
@@ -132,7 +132,7 @@ public interface UPnPStateVariable {
 	 * <p>
 	 * No limit on length.
 	 * <p>
-	 * Mapped to <code>String</code> object.
+	 * Mapped to {@code String} object.
 	 */
 	static final String	TYPE_STRING			= "string";
 	/**
@@ -144,7 +144,7 @@ public interface UPnPStateVariable {
 	 * href="http://www.w3.org/TR/xmlschema-2/#date">http://www.w3.org/TR/xmlschema-2/#date
 	 * </a>.
 	 * <p>
-	 * Mapped to <code>java.util.Date</code> object. Always 00:00 hours.
+	 * Mapped to {@code java.util.Date} object. Always 00:00 hours.
 	 */
 	static final String	TYPE_DATE			= "date";
 	/**
@@ -156,7 +156,7 @@ public interface UPnPStateVariable {
 	 * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#dateTime
 	 * </a>.
 	 * <p>
-	 * Mapped to <code>java.util.Date</code> object using default time zone.
+	 * Mapped to {@code java.util.Date} object using default time zone.
 	 */
 	static final String	TYPE_DATETIME		= "dateTime";
 	/**
@@ -168,7 +168,7 @@ public interface UPnPStateVariable {
 	 * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#dateTime
 	 * </a>.
 	 * <p>
-	 * Mapped to <code>java.util.Date</code> object adjusted to default time zone.
+	 * Mapped to {@code java.util.Date} object adjusted to default time zone.
 	 */
 	static final String	TYPE_DATETIME_TZ	= "dateTime.tz";
 	/**
@@ -180,7 +180,7 @@ public interface UPnPStateVariable {
 	 * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#time
 	 * </a>.
 	 * <p>
-	 * Mapped to <code>Long</code>. Converted to milliseconds since midnight.
+	 * Mapped to {@code Long}. Converted to milliseconds since midnight.
 	 */
 	static final String	TYPE_TIME			= "time";
 	/**
@@ -192,7 +192,7 @@ public interface UPnPStateVariable {
 	 * href="http://www.w3.org/TR/xmlschema-2/#dateTime">http://www.w3.org/TR/xmlschema-2/#time
 	 * </a>.
 	 * <p>
-	 * Mapped to <code>Long</code> object. Converted to milliseconds since
+	 * Mapped to {@code Long} object. Converted to milliseconds since
 	 * midnight and adjusted to default time zone, wrapping at 0 and
 	 * 24*60*60*1000.
 	 */
@@ -200,7 +200,7 @@ public interface UPnPStateVariable {
 	/**
 	 * True or false.
 	 * <p>
-	 * Mapped to <code>Boolean</code> object.
+	 * Mapped to {@code Boolean} object.
 	 */
 	static final String	TYPE_BOOLEAN		= "boolean";
 	/**
@@ -209,7 +209,7 @@ public interface UPnPStateVariable {
 	 * Takes 3 Bytes, splits them into 4 parts, and maps each 6 bit piece to an
 	 * octet. (3 octets are encoded as 4.) No limit on size.
 	 * <p>
-	 * Mapped to <code>byte[]</code> object. The Java byte array will hold the
+	 * Mapped to {@code byte[]} object. The Java byte array will hold the
 	 * decoded content of the BLOB.
 	 */
 	static final String	TYPE_BIN_BASE64		= "bin.base64";
@@ -219,14 +219,14 @@ public interface UPnPStateVariable {
 	 * Treats each nibble as a hex digit and encodes as a separate Byte. (1
 	 * octet is encoded as 2.) No limit on size.
 	 * <p>
-	 * Mapped to <code>byte[]</code> object. The Java byte array will hold the
+	 * Mapped to {@code byte[]} object. The Java byte array will hold the
 	 * decoded content of the BLOB.
 	 */
 	static final String	TYPE_BIN_HEX		= "bin.hex";
 	/**
 	 * Universal Resource Identifier.
 	 * <p>
-	 * Mapped to <code>String</code> object.
+	 * Mapped to {@code String} object.
 	 */
 	static final String	TYPE_URI			= "uri";
 	/**
@@ -235,7 +235,7 @@ public interface UPnPStateVariable {
 	 * Hexadecimal digits representing octets. Optional embedded hyphens are
 	 * ignored.
 	 * <p>
-	 * Mapped to <code>String</code> object.
+	 * Mapped to {@code String} object.
 	 */
 	static final String	TYPE_UUID			= "uuid";
 
@@ -244,9 +244,9 @@ public interface UPnPStateVariable {
 	 * 
 	 * <ul>
 	 * <li>All standard variables defined by a UPnP Forum working committee
-	 * must not begin with <code>X_</code> nor <code>A_</code>.</li>
+	 * must not begin with {@code X_} nor {@code A_}.</li>
 	 * <li>All non-standard variables specified by a UPnP vendor and added to a
-	 * standard service must begin with <code>X_</code>.</li>
+	 * standard service must begin with {@code X_}.</li>
 	 * </ul>
 	 * 
 	 * @return Name of state variable. Must not contain a hyphen character nor a
@@ -291,8 +291,8 @@ public interface UPnPStateVariable {
 	/**
 	 * Returns the default value, if defined.
 	 * 
-	 * @return The default value or <code>null</code> if not defined. The type of
-	 *         the returned object can be determined by <code>getJavaDataType</code>.
+	 * @return The default value or {@code null} if not defined. The type of
+	 *         the returned object can be determined by {@code getJavaDataType}.
 	 */
 	Object getDefaultValue();
 
@@ -300,7 +300,7 @@ public interface UPnPStateVariable {
 	 * Returns the allowed values, if defined. Allowed values can be defined
 	 * only for String types.
 	 * 
-	 * @return The allowed values or <code>null</code> if not defined. Should be
+	 * @return The allowed values or {@code null} if not defined. Should be
 	 *         less than 32 characters.
 	 */
 	String[] getAllowedValues();
@@ -309,7 +309,7 @@ public interface UPnPStateVariable {
 	 * Returns the minimum value, if defined. Minimum values can only be defined
 	 * for numeric types.
 	 * 
-	 * @return The minimum value or <code>null</code> if not defined.
+	 * @return The minimum value or {@code null} if not defined.
 	 */
 	Number getMinimum();
 
@@ -317,7 +317,7 @@ public interface UPnPStateVariable {
 	 * Returns the maximum value, if defined. Maximum values can only be defined
 	 * for numeric types.
 	 * 
-	 * @return The maximum value or <code>null</code> if not defined.
+	 * @return The maximum value or {@code null} if not defined.
 	 */
 	Number getMaximum();
 
@@ -335,8 +335,8 @@ public interface UPnPStateVariable {
 	 * If the StateVariable is eventable, an event listener service can be
 	 * registered to be notified when changes to the variable appear.
 	 * 
-	 * @return <code>true</code> if the <code>StateVariable</code> generates events,
-	 *         <code>false</code> otherwise.
+	 * @return {@code true} if the {@code StateVariable} generates events,
+	 *         {@code false} otherwise.
 	 */
 	boolean sendsEvents();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package-info.java
new file mode 100644
index 0000000..098bc96
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * UPnP Package Version 1.1.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.upnp; version="[1.1,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.upnp; version="[1.1,1.2)"}
+ * 
+ * @version $Id: f278e12d61cb7c24aad9ece612882dfbdbd97566 $
+ */
+
+package org.osgi.service.upnp;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package.html
deleted file mode 100644
index 5422e04..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/upnp/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>UPnP Package Version 1.1.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.upnp; version="[1.1,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Authorization.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Authorization.java
index 94289f7..2a4d349 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Authorization.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Authorization.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,13 +16,13 @@
 package org.osgi.service.useradmin;
 
 /**
- * The <code>Authorization</code> interface encapsulates an authorization context
+ * The {@code Authorization} interface encapsulates an authorization context
  * on which bundles can base authorization decisions, where appropriate.
  * <p>
  * Bundles associate the privilege to access restricted resources or operations
  * with roles. Before granting access to a restricted resource or operation, a
- * bundle will check if the <code>Authorization</code> object passed to it possess
- * the required role, by calling its <code>hasRole</code> method.
+ * bundle will check if the {@code Authorization} object passed to it possess
+ * the required role, by calling its {@code hasRole} method.
  * <p>
  * Authorization contexts are instantiated by calling the
  * {@link UserAdmin#getAuthorization} method.
@@ -30,22 +30,22 @@ package org.osgi.service.useradmin;
  * <p>
  * <i>Trusting Authorization objects </i>
  * <p>
- * There are no restrictions regarding the creation of <code>Authorization</code>
- * objects. Hence, a service must only accept <code>Authorization</code> objects
+ * There are no restrictions regarding the creation of {@code Authorization}
+ * objects. Hence, a service must only accept {@code Authorization} objects
  * from bundles that has been authorized to use the service using code based (or
  * Java 2) permissions.
  * 
  * <p>
- * In some cases it is useful to use <code>ServicePermission</code> to do the code
+ * In some cases it is useful to use {@code ServicePermission} to do the code
  * based access control. A service basing user access control on
- * <code>Authorization</code> objects passed to it, will then require that a
- * calling bundle has the <code>ServicePermission</code> to get the service in
+ * {@code Authorization} objects passed to it, will then require that a
+ * calling bundle has the {@code ServicePermission} to get the service in
  * question. This is the most convenient way. The OSGi environment will do the
  * code based permission check when the calling bundle attempts to get the
  * service from the service registry.
  * <p>
  * Example: A servlet using a service on a user's behalf. The bundle with the
- * servlet must be given the <code>ServicePermission</code> to get the Http
+ * servlet must be given the {@code ServicePermission} to get the Http
  * Service.
  * <p>
  * However, in some cases the code based permission checks need to be more
@@ -55,26 +55,27 @@ package org.osgi.service.useradmin;
  * Example: A servlet using a service on a user's behalf, where some service
  * functionality is open to anyone, and some is restricted by code based
  * permissions. When a restricted method is called (e.g., one handing over an
- * <code>Authorization</code> object), the service explicitly checks that the
+ * {@code Authorization} object), the service explicitly checks that the
  * calling bundle has permission to make the call.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 18fadc9678390b2deeab99b54bdded82c4714552 $
  */
 public interface Authorization {
 	/**
-	 * Gets the name of the {@link User} that this <code>Authorization</code>
+	 * Gets the name of the {@link User} that this {@code Authorization}
 	 * context was created for.
 	 * 
 	 * @return The name of the {@link User} object that this
-	 *         <code>Authorization</code> context was created for, or
-	 *         <code>null</code> if no user was specified when this
-	 *         <code>Authorization</code> context was created.
+	 *         {@code Authorization} context was created for, or
+	 *         {@code null} if no user was specified when this
+	 *         {@code Authorization} context was created.
 	 */
 	public String getName();
 
 	/**
 	 * Checks if the role with the specified name is implied by this
-	 * <code>Authorization</code> context.
+	 * {@code Authorization} context.
 	 * <p>
 	 * 
 	 * Bundles must define globally unique role names that are associated with
@@ -84,18 +85,18 @@ public interface Authorization {
 	 * 
 	 * @param name The name of the role to check for.
 	 * 
-	 * @return <code>true</code> if this <code>Authorization</code> context implies
-	 *         the specified role, otherwise <code>false</code>.
+	 * @return {@code true} if this {@code Authorization} context implies
+	 *         the specified role, otherwise {@code false}.
 	 */
 	public boolean hasRole(String name);
 
 	/**
-	 * Gets the names of all roles implied by this <code>Authorization</code>
+	 * Gets the names of all roles implied by this {@code Authorization}
 	 * context.
 	 * 
 	 * @return The names of all roles implied by this
-	 *         <code>Authorization</code> context, or <code>null</code> if no roles
-	 *         are in the context. The predefined role <code>user.anyone</code>
+	 *         {@code Authorization} context, or {@code null} if no roles
+	 *         are in the context. The predefined role {@code user.anyone}
 	 *         will not be included in this list.
 	 */
 	public String[] getRoles();
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Group.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Group.java
index 4016a43..e0b1e50 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Group.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Group.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,30 +16,30 @@
 package org.osgi.service.useradmin;
 
 /**
- * A named grouping of roles (<code>Role</code> objects).
+ * A named grouping of roles ({@code Role} objects).
  * <p>
- * Whether or not a given <code>Authorization</code> context implies a
- * <code>Group</code> object depends on the members of that <code>Group</code>
+ * Whether or not a given {@code Authorization} context implies a
+ * {@code Group} object depends on the members of that {@code Group}
  * object.
  * <p>
- * A <code>Group</code> object can have two kinds of members: <i>basic </i> and
- * <i>required </i>. A <code>Group</code> object is implied by an
- * <code>Authorization</code> context if all of its required members are implied
+ * A {@code Group} object can have two kinds of members: <i>basic </i> and
+ * <i>required </i>. A {@code Group} object is implied by an
+ * {@code Authorization} context if all of its required members are implied
  * and at least one of its basic members is implied.
  * <p>
- * A <code>Group</code> object must contain at least one basic member in order to
- * be implied. In other words, a <code>Group</code> object without any basic
- * member roles is never implied by any <code>Authorization</code> context.
+ * A {@code Group} object must contain at least one basic member in order to
+ * be implied. In other words, a {@code Group} object without any basic
+ * member roles is never implied by any {@code Authorization} context.
  * <p>
- * A <code>User</code> object always implies itself.
+ * A {@code User} object always implies itself.
  * <p>
- * No loop detection is performed when adding members to <code>Group</code>
+ * No loop detection is performed when adding members to {@code Group}
  * objects, which means that it is possible to create circular implications.
  * Loop detection is instead done when roles are checked. The semantics is that
  * if a role depends on itself (i.e., there is an implication loop), the role is
  * not implied.
  * <p>
- * The rule that a <code>Group</code> object must have at least one basic member
+ * The rule that a {@code Group} object must have at least one basic member
  * to be implied is motivated by the following example:
  * 
  * <pre>
@@ -55,10 +55,10 @@ package org.osgi.service.useradmin;
  * <p>
  * If "alice" and "bob" ever transfer to a different department, anybody in
  * marketing will be able to assume the "foo" role, which certainly must be
- * prevented. Requiring that "foo" (or any <code>Group</code> object for that
+ * prevented. Requiring that "foo" (or any {@code Group} object for that
  * matter) must have at least one basic member accomplishes that.
  * <p>
- * However, this would make it impossible for a <code>Group</code> object to be
+ * However, this would make it impossible for a {@code Group} object to be
  * implied by just its required members. An example where this implication might
  * be useful is the following declaration: "Any citizen who is an adult is
  * allowed to vote." An intuitive configuration of "voter" would be:
@@ -85,73 +85,74 @@ package org.osgi.service.useradmin;
  *  
  * </pre>
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: b9b52c17de69d7b8a908a7cca84d02eec3c9e609 $
  */
 public interface Group extends User {
 	/**
-	 * Adds the specified <code>Role</code> object as a basic member to this
-	 * <code>Group</code> object.
+	 * Adds the specified {@code Role} object as a basic member to this
+	 * {@code Group} object.
 	 * 
 	 * @param role The role to add as a basic member.
 	 * 
-	 * @return <code>true</code> if the given role could be added as a basic
-	 *         member, and <code>false</code> if this <code>Group</code> object
-	 *         already contains a <code>Role</code> object whose name matches that
+	 * @return {@code true} if the given role could be added as a basic
+	 *         member, and {@code false} if this {@code Group} object
+	 *         already contains a {@code Role} object whose name matches that
 	 *         of the specified role.
 	 * 
 	 * @throws SecurityException If a security manager exists and the caller
-	 *         does not have the <code>UserAdminPermission</code> with name
-	 *         <code>admin</code>.
+	 *         does not have the {@code UserAdminPermission} with name
+	 *         {@code admin}.
 	 */
 	public boolean addMember(Role role);
 
 	/**
-	 * Adds the specified <code>Role</code> object as a required member to this
-	 * <code>Group</code> object.
+	 * Adds the specified {@code Role} object as a required member to this
+	 * {@code Group} object.
 	 * 
-	 * @param role The <code>Role</code> object to add as a required member.
+	 * @param role The {@code Role} object to add as a required member.
 	 * 
-	 * @return <code>true</code> if the given <code>Role</code> object could be
-	 *         added as a required member, and <code>false</code> if this
-	 *         <code>Group</code> object already contains a <code>Role</code> object
+	 * @return {@code true} if the given {@code Role} object could be
+	 *         added as a required member, and {@code false} if this
+	 *         {@code Group} object already contains a {@code Role} object
 	 *         whose name matches that of the specified role.
 	 * 
 	 * @throws SecurityException If a security manager exists and the caller
-	 *         does not have the <code>UserAdminPermission</code> with name
-	 *         <code>admin</code>.
+	 *         does not have the {@code UserAdminPermission} with name
+	 *         {@code admin}.
 	 */
 	public boolean addRequiredMember(Role role);
 
 	/**
-	 * Removes the specified <code>Role</code> object from this <code>Group</code>
+	 * Removes the specified {@code Role} object from this {@code Group}
 	 * object.
 	 * 
-	 * @param role The <code>Role</code> object to remove from this <code>Group</code>
+	 * @param role The {@code Role} object to remove from this {@code Group}
 	 *        object.
 	 * 
-	 * @return <code>true</code> if the <code>Role</code> object could be removed,
-	 *         otherwise <code>false</code>.
+	 * @return {@code true} if the {@code Role} object could be removed,
+	 *         otherwise {@code false}.
 	 * 
 	 * @throws SecurityException If a security manager exists and the caller
-	 *         does not have the <code>UserAdminPermission</code> with name
-	 *         <code>admin</code>.
+	 *         does not have the {@code UserAdminPermission} with name
+	 *         {@code admin}.
 	 */
 	public boolean removeMember(Role role);
 
 	/**
-	 * Gets the basic members of this <code>Group</code> object.
+	 * Gets the basic members of this {@code Group} object.
 	 * 
-	 * @return The basic members of this <code>Group</code> object, or
-	 *         <code>null</code> if this <code>Group</code> object does not contain
+	 * @return The basic members of this {@code Group} object, or
+	 *         {@code null} if this {@code Group} object does not contain
 	 *         any basic members.
 	 */
 	public Role[] getMembers();
 
 	/**
-	 * Gets the required members of this <code>Group</code> object.
+	 * Gets the required members of this {@code Group} object.
 	 * 
-	 * @return The required members of this <code>Group</code> object, or
-	 *         <code>null</code> if this <code>Group</code> object does not contain
+	 * @return The required members of this {@code Group} object, or
+	 *         {@code null} if this {@code Group} object does not contain
 	 *         any required members.
 	 */
 	public Role[] getRequiredMembers();
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java
index e33d559..b80490e 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/Role.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,34 +18,35 @@ package org.osgi.service.useradmin;
 import java.util.Dictionary;
 
 /**
- * The base interface for <code>Role</code> objects managed by the User Admin
+ * The base interface for {@code Role} objects managed by the User Admin
  * service.
  * 
  * <p>
- * This interface exposes the characteristics shared by all <code>Role</code>
+ * This interface exposes the characteristics shared by all {@code Role}
  * classes: a name, a type, and a set of properties.
  * <p>
- * Properties represent public information about the <code>Role</code> object that
+ * Properties represent public information about the {@code Role} object that
  * can be read by anyone. Specific {@link UserAdminPermission} objects are
- * required to change a <code>Role</code> object's properties.
+ * required to change a {@code Role} object's properties.
  * <p>
- * <code>Role</code> object properties are <code>Dictionary</code> objects. Changes
+ * {@code Role} object properties are {@code Dictionary} objects. Changes
  * to these objects are propagated to the User Admin service and made
  * persistent.
  * <p>
- * Every User Admin service contains a set of predefined <code>Role</code> objects
- * that are always present and cannot be removed. All predefined <code>Role</code>
- * objects are of type <code>ROLE</code>. This version of the
- * <code>org.osgi.service.useradmin</code> package defines a single predefined
+ * Every User Admin service contains a set of predefined {@code Role} objects
+ * that are always present and cannot be removed. All predefined {@code Role}
+ * objects are of type {@code ROLE}. This version of the
+ * {@code org.osgi.service.useradmin} package defines a single predefined
  * role named "user.anyone", which is inherited by any other role.
  * Other predefined roles may be added in the future. Since
- * "user.anyone" is a <code>Role</code> object that has properties
+ * "user.anyone" is a {@code Role} object that has properties
  * associated with it that can be read and modified. Access to these properties
  * and their use is application specific and is controlled using
- * <code>UserAdminPermission</code> in the same way that properties for other
- * <code>Role</code> objects are.
+ * {@code UserAdminPermission} in the same way that properties for other
+ * {@code Role} objects are.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 880594a6887dda5a3e089a8b8ce7546976367a92 $
  */
 public interface Role {
 	/**
@@ -58,21 +59,21 @@ public interface Role {
 	 * The type of a predefined role.
 	 * 
 	 * <p>
-	 * The value of <code>ROLE</code> is 0.
+	 * The value of {@code ROLE} is 0.
 	 */
 	public static final int		ROLE		= 0;
 	/**
 	 * The type of a {@link User} role.
 	 * 
 	 * <p>
-	 * The value of <code>USER</code> is 1.
+	 * The value of {@code USER} is 1.
 	 */
 	public static final int		USER		= 1;
 	/**
 	 * The type of a {@link Group} role.
 	 * 
 	 * <p>
-	 * The value of <code>GROUP</code> is 2.
+	 * The value of {@code GROUP} is 2.
 	 */
 	public static final int		GROUP		= 2;
 
@@ -91,27 +92,27 @@ public interface Role {
 	public int getType();
 
 	/**
-	 * Returns a <code>Dictionary</code> of the (public) properties of this
-	 * <code>Role</code> object. Any changes to the returned <code>Dictionary</code>
-	 * will change the properties of this <code>Role</code> object. This will
-	 * cause a <code>UserAdminEvent</code> object of type
+	 * Returns a {@code Dictionary} of the (public) properties of this
+	 * {@code Role} object. Any changes to the returned {@code Dictionary}
+	 * will change the properties of this {@code Role} object. This will
+	 * cause a {@code UserAdminEvent} object of type
 	 * {@link UserAdminEvent#ROLE_CHANGED} to be broadcast to any
-	 * <code>UserAdminListener</code> objects.
+	 * {@code UserAdminListener} objects.
 	 * 
 	 * <p>
-	 * Only objects of type <code>String</code> may be used as property keys, and
-	 * only objects of type <code>String</code> or <code>byte[]</code> may be used
+	 * Only objects of type {@code String} may be used as property keys, and
+	 * only objects of type {@code String} or {@code byte[]} may be used
 	 * as property values. Any other types will cause an exception of type
-	 * <code>IllegalArgumentException</code> to be raised.
+	 * {@code IllegalArgumentException} to be raised.
 	 * 
 	 * <p>
 	 * In order to add, change, or remove a property in the returned
-	 * <code>Dictionary</code>, a {@link UserAdminPermission} named after the
-	 * property name (or a prefix of it) with action <code>changeProperty</code>
+	 * {@code Dictionary}, a {@link UserAdminPermission} named after the
+	 * property name (or a prefix of it) with action {@code changeProperty}
 	 * is required.
 	 * 
-	 * @return <code>Dictionary</code> containing the properties of this
-	 *         <code>Role</code> object.
+	 * @return {@code Dictionary} containing the properties of this
+	 *         {@code Role} object.
 	 */
 	public Dictionary getProperties();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java
index b9103fd..1551d99 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/User.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,77 +18,78 @@ package org.osgi.service.useradmin;
 import java.util.Dictionary;
 
 /**
- * A <code>User</code> role managed by a User Admin service.
+ * A {@code User} role managed by a User Admin service.
  * 
  * <p>
  * In this context, the term "user" is not limited to just human
  * beings. Instead, it refers to any entity that may have any number of
  * credentials associated with it that it may use to authenticate itself.
  * <p>
- * In general, <code>User</code> objects are associated with a specific User Admin
+ * In general, {@code User} objects are associated with a specific User Admin
  * service (namely the one that created them), and cannot be used with other
  * User Admin services.
  * <p>
- * A <code>User</code> object may have credentials (and properties, inherited from
+ * A {@code User} object may have credentials (and properties, inherited from
  * the {@link Role} class) associated with it. Specific
  * {@link UserAdminPermission} objects are required to read or change a
- * <code>User</code> object's credentials.
+ * {@code User} object's credentials.
  * <p>
- * Credentials are <code>Dictionary</code> objects and have semantics that are
- * similar to the properties in the <code>Role</code> class.
+ * Credentials are {@code Dictionary} objects and have semantics that are
+ * similar to the properties in the {@code Role} class.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 1db8d1efd3c0875d94b90b413552c5263019130a $
  */
 public interface User extends Role {
 	/**
-	 * Returns a <code>Dictionary</code> of the credentials of this <code>User</code>
-	 * object. Any changes to the returned <code>Dictionary</code> object will
-	 * change the credentials of this <code>User</code> object. This will cause a
-	 * <code>UserAdminEvent</code> object of type
+	 * Returns a {@code Dictionary} of the credentials of this {@code User}
+	 * object. Any changes to the returned {@code Dictionary} object will
+	 * change the credentials of this {@code User} object. This will cause a
+	 * {@code UserAdminEvent} object of type
 	 * {@link UserAdminEvent#ROLE_CHANGED} to be broadcast to any
-	 * <code>UserAdminListeners</code> objects.
+	 * {@code UserAdminListeners} objects.
 	 * 
 	 * <p>
-	 * Only objects of type <code>String</code> may be used as credential keys,
-	 * and only objects of type <code>String</code> or of type <code>byte[]</code>
+	 * Only objects of type {@code String} may be used as credential keys,
+	 * and only objects of type {@code String} or of type {@code byte[]}
 	 * may be used as credential values. Any other types will cause an exception
-	 * of type <code>IllegalArgumentException</code> to be raised.
+	 * of type {@code IllegalArgumentException} to be raised.
 	 * 
 	 * <p>
-	 * In order to retrieve a credential from the returned <code>Dictionary</code>
+	 * In order to retrieve a credential from the returned {@code Dictionary}
 	 * object, a {@link UserAdminPermission} named after the credential name (or
-	 * a prefix of it) with action <code>getCredential</code> is required.
+	 * a prefix of it) with action {@code getCredential} is required.
 	 * <p>
 	 * In order to add or remove a credential from the returned
-	 * <code>Dictionary</code> object, a {@link UserAdminPermission} named after
+	 * {@code Dictionary} object, a {@link UserAdminPermission} named after
 	 * the credential name (or a prefix of it) with action
-	 * <code>changeCredential</code> is required.
+	 * {@code changeCredential} is required.
 	 * 
-	 * @return <code>Dictionary</code> object containing the credentials of this
-	 *         <code>User</code> object.
+	 * @return {@code Dictionary} object containing the credentials of this
+	 *         {@code User} object.
 	 */
 	public Dictionary getCredentials();
 
 	/**
-	 * Checks to see if this <code>User</code> object has a credential with the
-	 * specified <code>key</code> set to the specified <code>value</code>.
+	 * Checks to see if this {@code User} object has a credential with the
+	 * specified {@code key} set to the specified {@code value}.
 	 * 
 	 * <p>
-	 * If the specified credential <code>value</code> is not of type
-	 * <code>String</code> or <code>byte[]</code>, it is ignored, that is,
-	 * <code>false</code> is returned (as opposed to an
-	 * <code>IllegalArgumentException</code> being raised).
+	 * If the specified credential {@code value} is not of type
+	 * {@code String} or {@code byte[]}, it is ignored, that is,
+	 * {@code false} is returned (as opposed to an
+	 * {@code IllegalArgumentException} being raised).
 	 * 
-	 * @param key The credential <code>key</code>.
-	 * @param value The credential <code>value</code>.
+	 * @param key The credential {@code key}.
+	 * @param value The credential {@code value}.
 	 * 
-	 * @return <code>true</code> if this user has the specified credential;
-	 *         <code>false</code> otherwise.
+	 * @return {@code true} if this user has the specified credential;
+	 *         {@code false} otherwise.
 	 * 
 	 * @throws SecurityException If a security manager exists and the caller
-	 *         does not have the <code>UserAdminPermission</code> named after the
+	 *         does not have the {@code UserAdminPermission} named after the
 	 *         credential key (or a prefix of it) with action
-	 *         <code>getCredential</code>.
+	 *         {@code getCredential}.
 	 */
 	public boolean hasCredential(String key, Object value);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdmin.java
index 2e4b096..166de03 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,13 +18,13 @@ package org.osgi.service.useradmin;
 import org.osgi.framework.InvalidSyntaxException;
 
 /**
- * This interface is used to manage a database of named <code>Role</code> objects,
+ * This interface is used to manage a database of named {@code Role} objects,
  * which can be used for authentication and authorization purposes.
  * 
  * <p>
- * This version of the User Admin service defines two types of <code>Role</code>
+ * This version of the User Admin service defines two types of {@code Role}
  * objects: "User" and "Group". Each type of role is represented by an
- * <code>int</code> constant and an interface. The range of positive integers is
+ * {@code int} constant and an interface. The range of positive integers is
  * reserved for new types of roles that may be added in the future. When
  * defining proprietary role types, negative constant values must be used.
  * 
@@ -36,96 +36,97 @@ import org.osgi.framework.InvalidSyntaxException;
  * and properties (e.g., a street address, phone number, etc.).
  * <p>
  * A {@link Group} object represents an aggregation of {@link User} and
- * {@link Group} objects. In other words, the members of a <code>Group</code>
+ * {@link Group} objects. In other words, the members of a {@code Group}
  * object are roles themselves.
  * <p>
  * Every User Admin service manages and maintains its own namespace of
- * <code>Role</code> objects, in which each <code>Role</code> object has a unique
+ * {@code Role} objects, in which each {@code Role} object has a unique
  * name.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 66973d897c8f3fc69fadd42836441f4ad726069a $
  */
 public interface UserAdmin {
 	/**
-	 * Creates a <code>Role</code> object with the given name and of the given
+	 * Creates a {@code Role} object with the given name and of the given
 	 * type.
 	 * 
 	 * <p>
-	 * If a <code>Role</code> object was created, a <code>UserAdminEvent</code>
+	 * If a {@code Role} object was created, a {@code UserAdminEvent}
 	 * object of type {@link UserAdminEvent#ROLE_CREATED} is broadcast to any
-	 * <code>UserAdminListener</code> object.
+	 * {@code UserAdminListener} object.
 	 * 
-	 * @param name The <code>name</code> of the <code>Role</code> object to create.
-	 * @param type The type of the <code>Role</code> object to create. Must be
+	 * @param name The {@code name} of the {@code Role} object to create.
+	 * @param type The type of the {@code Role} object to create. Must be
 	 *        either a {@link Role#USER} type or {@link Role#GROUP} type.
 	 * 
-	 * @return The newly created <code>Role</code> object, or <code>null</code> if a
+	 * @return The newly created {@code Role} object, or {@code null} if a
 	 *         role with the given name already exists.
 	 * 
-	 * @throws IllegalArgumentException if <code>type</code> is invalid.
+	 * @throws IllegalArgumentException if {@code type} is invalid.
 	 * 
 	 * @throws SecurityException If a security manager exists and the caller
-	 *         does not have the <code>UserAdminPermission</code> with name
-	 *         <code>admin</code>.
+	 *         does not have the {@code UserAdminPermission} with name
+	 *         {@code admin}.
 	 */
 	public Role createRole(String name, int type);
 
 	/**
-	 * Removes the <code>Role</code> object with the given name from this User
+	 * Removes the {@code Role} object with the given name from this User
 	 * Admin service and all groups it is a member of.
 	 * 
 	 * <p>
-	 * If the <code>Role</code> object was removed, a <code>UserAdminEvent</code>
+	 * If the {@code Role} object was removed, a {@code UserAdminEvent}
 	 * object of type {@link UserAdminEvent#ROLE_REMOVED} is broadcast to any
-	 * <code>UserAdminListener</code> object.
+	 * {@code UserAdminListener} object.
 	 * 
-	 * @param name The name of the <code>Role</code> object to remove.
+	 * @param name The name of the {@code Role} object to remove.
 	 * 
-	 * @return <code>true</code> If a <code>Role</code> object with the given name
+	 * @return {@code true} If a {@code Role} object with the given name
 	 *         is present in this User Admin service and could be removed,
-	 *         otherwise <code>false</code>.
+	 *         otherwise {@code false}.
 	 * 
 	 * @throws SecurityException If a security manager exists and the caller
-	 *         does not have the <code>UserAdminPermission</code> with name
-	 *         <code>admin</code>.
+	 *         does not have the {@code UserAdminPermission} with name
+	 *         {@code admin}.
 	 */
 	public boolean removeRole(String name);
 
 	/**
-	 * Gets the <code>Role</code> object with the given <code>name</code> from this
+	 * Gets the {@code Role} object with the given {@code name} from this
 	 * User Admin service.
 	 * 
-	 * @param name The name of the <code>Role</code> object to get.
+	 * @param name The name of the {@code Role} object to get.
 	 * 
-	 * @return The requested <code>Role</code> object, or <code>null</code> if this
-	 *         User Admin service does not have a <code>Role</code> object with
-	 *         the given <code>name</code>.
+	 * @return The requested {@code Role} object, or {@code null} if this
+	 *         User Admin service does not have a {@code Role} object with
+	 *         the given {@code name}.
 	 */
 	public Role getRole(String name);
 
 	/**
-	 * Gets the <code>Role</code> objects managed by this User Admin service that
+	 * Gets the {@code Role} objects managed by this User Admin service that
 	 * have properties matching the specified LDAP filter criteria. See
-	 * <code>org.osgi.framework.Filter</code> for a description of the filter
-	 * syntax. If a <code>null</code> filter is specified, all Role objects
+	 * {@code org.osgi.framework.Filter} for a description of the filter
+	 * syntax. If a {@code null} filter is specified, all Role objects
 	 * managed by this User Admin service are returned.
 	 * 
 	 * @param filter The filter criteria to match.
 	 * 
-	 * @return The <code>Role</code> objects managed by this User Admin service
+	 * @return The {@code Role} objects managed by this User Admin service
 	 *         whose properties match the specified filter criteria, or all
-	 *         <code>Role</code> objects if a <code>null</code> filter is specified.
-	 *         If no roles match the filter, <code>null</code> will be returned.
+	 *         {@code Role} objects if a {@code null} filter is specified.
+	 *         If no roles match the filter, {@code null} will be returned.
 	 * @throws InvalidSyntaxException If the filter is not well formed.
 	 *  
 	 */
 	public Role[] getRoles(String filter) throws InvalidSyntaxException;
 
 	/**
-	 * Gets the user with the given property <code>key</code>-<code>value</code>
+	 * Gets the user with the given property {@code key}-{@code value}
 	 * pair from the User Admin service database. This is a convenience method
-	 * for retrieving a <code>User</code> object based on a property for which
-	 * every <code>User</code> object is supposed to have a unique value (within
+	 * for retrieving a {@code User} object based on a property for which
+	 * every {@code User} object is supposed to have a unique value (within
 	 * the scope of this User Admin service), such as for example a X.500
 	 * distinguished name.
 	 * 
@@ -133,25 +134,25 @@ public interface UserAdmin {
 	 * @param value The property value to compare with.
 	 * 
 	 * @return A matching user, if <em>exactly</em> one is found. If zero or
-	 *         more than one matching users are found, <code>null</code> is
+	 *         more than one matching users are found, {@code null} is
 	 *         returned.
 	 */
 	public User getUser(String key, String value);
 
 	/**
-	 * Creates an <code>Authorization</code> object that encapsulates the
-	 * specified <code>User</code> object and the <code>Role</code> objects it
-	 * possesses. The <code>null</code> user is interpreted as the anonymous user.
+	 * Creates an {@code Authorization} object that encapsulates the
+	 * specified {@code User} object and the {@code Role} objects it
+	 * possesses. The {@code null} user is interpreted as the anonymous user.
 	 * The anonymous user represents a user that has not been authenticated. An
-	 * <code>Authorization</code> object for an anonymous user will be unnamed,
+	 * {@code Authorization} object for an anonymous user will be unnamed,
 	 * and will only imply groups that user.anyone implies.
 	 * 
-	 * @param user The <code>User</code> object to create an
-	 *        <code>Authorization</code> object for, or <code>null</code> for the
+	 * @param user The {@code User} object to create an
+	 *        {@code Authorization} object for, or {@code null} for the
 	 *        anonymous user.
 	 * 
-	 * @return the <code>Authorization</code> object for the specified
-	 *         <code>User</code> object.
+	 * @return the {@code Authorization} object for the specified
+	 *         {@code User} object.
 	 */
 	public Authorization getAuthorization(User user);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java
index 88ef8fb..7dce840 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminEvent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,11 +18,11 @@ package org.osgi.service.useradmin;
 import org.osgi.framework.ServiceReference;
 
 /**
- * <code>Role</code> change event.
+ * {@code Role} change event.
  * <p>
- * <code>UserAdminEvent</code> objects are delivered asynchronously to any
- * <code>UserAdminListener</code> objects when a change occurs in any of the
- * <code>Role</code> objects managed by a User Admin service.
+ * {@code UserAdminEvent} objects are delivered asynchronously to any
+ * {@code UserAdminListener} objects when a change occurs in any of the
+ * {@code Role} objects managed by a User Admin service.
  * 
  * <p>
  * A type code is used to identify the event. The following event types are
@@ -33,43 +33,43 @@ import org.osgi.framework.ServiceReference;
  * @see UserAdmin
  * @see UserAdminListener
  * 
- * @version $Revision: 5673 $
+ * @version $Id: f4a18b25cc305bcdd8308c742129e893d72d2ae4 $
  */
 public class UserAdminEvent {
 	private ServiceReference	ref;
 	private int					type;
 	private Role				role;
 	/**
-	 * A <code>Role</code> object has been created.
+	 * A {@code Role} object has been created.
 	 * 
 	 * <p>
-	 * The value of <code>ROLE_CREATED</code> is 0x00000001.
+	 * The value of {@code ROLE_CREATED} is 0x00000001.
 	 */
 	public static final int		ROLE_CREATED	= 0x00000001;
 	/**
-	 * A <code>Role</code> object has been modified.
+	 * A {@code Role} object has been modified.
 	 * 
 	 * <p>
-	 * The value of <code>ROLE_CHANGED</code> is 0x00000002.
+	 * The value of {@code ROLE_CHANGED} is 0x00000002.
 	 */
 	public static final int		ROLE_CHANGED	= 0x00000002;
 	/**
-	 * A <code>Role</code> object has been removed.
+	 * A {@code Role} object has been removed.
 	 * 
 	 * <p>
-	 * The value of <code>ROLE_REMOVED</code> is 0x00000004.
+	 * The value of {@code ROLE_REMOVED} is 0x00000004.
 	 */
 	public static final int		ROLE_REMOVED	= 0x00000004;
 
 	/**
-	 * Constructs a <code>UserAdminEvent</code> object from the given
-	 * <code>ServiceReference</code> object, event type, and <code>Role</code>
+	 * Constructs a {@code UserAdminEvent} object from the given
+	 * {@code ServiceReference} object, event type, and {@code Role}
 	 * object.
 	 * 
-	 * @param ref The <code>ServiceReference</code> object of the User Admin
+	 * @param ref The {@code ServiceReference} object of the User Admin
 	 *        service that generated this event.
 	 * @param type The event type.
-	 * @param role The <code>Role</code> object on which this event occurred.
+	 * @param role The {@code Role} object on which this event occurred.
 	 */
 	public UserAdminEvent(ServiceReference ref, int type, Role role) {
 		this.ref = ref;
@@ -78,10 +78,10 @@ public class UserAdminEvent {
 	}
 
 	/**
-	 * Gets the <code>ServiceReference</code> object of the User Admin service
+	 * Gets the {@code ServiceReference} object of the User Admin service
 	 * that generated this event.
 	 * 
-	 * @return The User Admin service's <code>ServiceReference</code> object.
+	 * @return The User Admin service's {@code ServiceReference} object.
 	 */
 	public ServiceReference getServiceReference() {
 		return ref;
@@ -101,9 +101,9 @@ public class UserAdminEvent {
 	}
 
 	/**
-	 * Gets the <code>Role</code> object this event was generated for.
+	 * Gets the {@code Role} object this event was generated for.
 	 * 
-	 * @return The <code>Role</code> object this event was generated for.
+	 * @return The {@code Role} object this event was generated for.
 	 */
 	public Role getRole() {
 		return role;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminListener.java
index a301b92..1b925a8 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminListener.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,25 +19,25 @@ package org.osgi.service.useradmin;
  * Listener for UserAdminEvents.
  * 
  * <p>
- * <code>UserAdminListener</code> objects are registered with the Framework
- * service registry and notified with a <code>UserAdminEvent</code> object when a
- * <code>Role</code> object has been created, removed, or modified.
+ * {@code UserAdminListener} objects are registered with the Framework
+ * service registry and notified with a {@code UserAdminEvent} object when a
+ * {@code Role} object has been created, removed, or modified.
  * <p>
- * <code>UserAdminListener</code> objects can further inspect the received
- * <code>UserAdminEvent</code> object to determine its type, the <code>Role</code>
+ * {@code UserAdminListener} objects can further inspect the received
+ * {@code UserAdminEvent} object to determine its type, the {@code Role}
  * object it occurred on, and the User Admin service that generated it.
  * 
  * @see UserAdmin
  * @see UserAdminEvent
  * 
- * @version $Revision: 5673 $
+ * @version $Id: f9a8c4675bd9486ef22c99250f8ee24f412967e4 $
  */
 public interface UserAdminListener {
 	/**
-	 * Receives notification that a <code>Role</code> object has been created,
+	 * Receives notification that a {@code Role} object has been created,
 	 * removed, or modified.
 	 * 
-	 * @param event The <code>UserAdminEvent</code> object.
+	 * @param event The {@code UserAdminEvent} object.
 	 */
 	public void roleChanged(UserAdminEvent event);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java
index 52be194..998363f 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/UserAdminPermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@ import java.util.Hashtable;
  * Admin service.
  * 
  * <p>
- * This class represents access to the <code>Role</code> objects managed by a
+ * This class represents access to the {@code Role} objects managed by a
  * User Admin service and their properties and credentials (in the case of
  * {@link User} objects).
  * <p>
@@ -39,18 +39,18 @@ import java.util.Hashtable;
  * "*protocol" or "a*b" are not valid.
  * 
  * <p>
- * The <code>UserAdminPermission</code> with the reserved name "admin"
+ * The {@code UserAdminPermission} with the reserved name "admin"
  * represents the permission required for creating and removing
- * <code>Role</code> objects in the User Admin service, as well as adding and
- * removing members in a <code>Group</code> object. This
- * <code>UserAdminPermission</code> does not have any actions associated with
+ * {@code Role} objects in the User Admin service, as well as adding and
+ * removing members in a {@code Group} object. This
+ * {@code UserAdminPermission} does not have any actions associated with
  * it.
  * 
  * <p>
  * The actions to be granted are passed to the constructor in a string
  * containing a list of one or more comma-separated keywords. The possible
- * keywords are: <code>changeProperty</code>,<code>changeCredential</code>, and
- * <code>getCredential</code>. Their meaning is defined as follows:
+ * keywords are: {@code changeProperty},{@code changeCredential}, and
+ * {@code getCredential}. Their meaning is defined as follows:
  * 
  * <pre>
  * 
@@ -72,7 +72,7 @@ import java.util.Hashtable;
  * 
  * <p>
  * Following is a PermissionInfo style policy entry which grants a user
- * administration bundle a number of <code>UserAdminPermission</code> object:
+ * administration bundle a number of {@code UserAdminPermission} object:
  * 
  * <pre>
  * 
@@ -84,16 +84,16 @@ import java.util.Hashtable;
  * 
  * The first permission statement grants the bundle the permission to perform
  * any User Admin service operations of type "admin", that is, create and remove
- * roles and configure <code>Group</code> objects.
+ * roles and configure {@code Group} objects.
  * 
  * <p>
  * The second permission statement grants the bundle the permission to change
  * any properties as well as get and change any credentials whose names start
- * with <code>com.foo.</code>.
+ * with {@code com.foo.}.
  * 
  * <p>
  * The third permission statement grants the bundle the permission to change any
- * properties and credentials whose names start with <code>user.</code>. This
+ * properties and credentials whose names start with {@code user.}. This
  * means that the bundle is allowed to change, but not retrieve any credentials
  * with the given prefix.
  * 
@@ -116,7 +116,7 @@ import java.util.Hashtable;
  * bundle is not allowed to change any properties or credentials.
  * 
  * @ThreadSafe
- * @version $Revision: 6381 $
+ * @version $Id: ee66dbf80d6e146ef7fe9f95088bdd06c640e3c6 $
  */
 public final class UserAdminPermission extends BasicPermission {
 	static final long			serialVersionUID			= -1179971692401603789L;
@@ -161,19 +161,19 @@ public final class UserAdminPermission extends BasicPermission {
 	private transient int		action_mask;
 
 	/**
-	 * Creates a new <code>UserAdminPermission</code> with the specified name
-	 * and actions. <code>name</code> is either the reserved string
+	 * Creates a new {@code UserAdminPermission} with the specified name
+	 * and actions. {@code name} is either the reserved string
 	 * "admin" or the name of a credential or property, and
-	 * <code>actions</code> contains a comma-separated list of the actions
+	 * {@code actions} contains a comma-separated list of the actions
 	 * granted on the specified name. Valid actions are
-	 * <code>changeProperty</code>,<code>changeCredential</code>, and
+	 * {@code changeProperty},{@code changeCredential}, and
 	 * getCredential.
 	 * 
-	 * @param name the name of this <code>UserAdminPermission</code>
+	 * @param name the name of this {@code UserAdminPermission}
 	 * @param actions the action string.
 	 * 
-	 * @throws IllegalArgumentException If <code>name</code> equals
-	 *         "admin" and <code>actions</code> are specified.
+	 * @throws IllegalArgumentException If {@code name} equals
+	 *         "admin" and {@code actions} are specified.
 	 */
 	public UserAdminPermission(String name, String actions) {
 		this(name, parseActions(actions));
@@ -181,7 +181,7 @@ public final class UserAdminPermission extends BasicPermission {
 
 	/**
 	 * Package private constructor used by
-	 * <code>UserAdminPermissionCollection</code>.
+	 * {@code UserAdminPermissionCollection}.
 	 * 
 	 * @param name class name
 	 * @param mask action mask
@@ -332,13 +332,13 @@ public final class UserAdminPermission extends BasicPermission {
 	}
 
 	/**
-	 * Checks if this <code>UserAdminPermission</code> object
+	 * Checks if this {@code UserAdminPermission} object
 	 * "implies" the specified permission.
 	 * <P>
-	 * More specifically, this method returns <code>true</code> if:
+	 * More specifically, this method returns {@code true} if:
 	 * <p>
 	 * <ul>
-	 * <li><i>p </i> is an instanceof <code>UserAdminPermission</code>,
+	 * <li><i>p </i> is an instanceof {@code UserAdminPermission},
 	 * <li><i>p </i>'s actions are a proper subset of this object's actions, and
 	 * <li><i>p </i>'s name is implied by this object's name. For example,
 	 * "java.*" implies "java.home".
@@ -346,8 +346,8 @@ public final class UserAdminPermission extends BasicPermission {
 	 * 
 	 * @param p the permission to check against.
 	 * 
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean implies(Permission p) {
 		if (p instanceof UserAdminPermission) {
@@ -398,26 +398,26 @@ public final class UserAdminPermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object for storing
-	 * <code>UserAdminPermission</code> objects.
+	 * Returns a new {@code PermissionCollection} object for storing
+	 * {@code UserAdminPermission} objects.
 	 * 
-	 * @return a new <code>PermissionCollection</code> object suitable for
-	 *         storing <code>UserAdminPermission</code> objects.
+	 * @return a new {@code PermissionCollection} object suitable for
+	 *         storing {@code UserAdminPermission} objects.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new UserAdminPermissionCollection();
 	}
 
 	/**
-	 * Checks two <code>UserAdminPermission</code> objects for equality. Checks
-	 * that <code>obj</code> is a <code>UserAdminPermission</code>, and has the
+	 * Checks two {@code UserAdminPermission} objects for equality. Checks
+	 * that {@code obj} is a {@code UserAdminPermission}, and has the
 	 * same name and actions as this object.
 	 * 
 	 * @param obj the object to be compared for equality with this object.
 	 * 
-	 * @return <code>true</code> if <code>obj</code> is a
-	 *         <code>UserAdminPermission</code> object, and has the same name
-	 *         and actions as this <code>UserAdminPermission</code> object.
+	 * @return {@code true} if {@code obj} is a
+	 *         {@code UserAdminPermission} object, and has the same name
+	 *         and actions as this {@code UserAdminPermission} object.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
@@ -468,12 +468,12 @@ public final class UserAdminPermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a string describing this <code>UserAdminPermission</code> object.
-	 * This string must be in <code>PermissionInfo</code> encoded format.
+	 * Returns a string describing this {@code UserAdminPermission} object.
+	 * This string must be in {@code PermissionInfo} encoded format.
 	 * 
-	 * @return The <code>PermissionInfo</code> encoded string for this
-	 *         <code>UserAdminPermission</code> object.
-	 * @see "<code>org.osgi.service.permissionadmin.PermissionInfo.getEncoded</code>"
+	 * @return The {@code PermissionInfo} encoded string for this
+	 *         {@code UserAdminPermission} object.
+	 * @see "{@code org.osgi.service.permissionadmin.PermissionInfo.getEncoded}"
 	 */
 	public String toString() {
 		StringBuffer sb = new StringBuffer();
@@ -492,8 +492,8 @@ public final class UserAdminPermission extends BasicPermission {
 }
 
 /**
- * A <code>UserAdminPermissionCollection</code> stores a set of
- * <code>UserAdminPermission</code> permissions.
+ * A {@code UserAdminPermissionCollection} stores a set of
+ * {@code UserAdminPermission} permissions.
  */
 
 final class UserAdminPermissionCollection extends PermissionCollection {
@@ -514,7 +514,7 @@ final class UserAdminPermissionCollection extends PermissionCollection {
 	private boolean			all_allowed;
 
 	/**
-	 * Creates an empty <code>UserAdminPermissionCollection</code> object.
+	 * Creates an empty {@code UserAdminPermissionCollection} object.
 	 */
 	public UserAdminPermissionCollection() {
 		permissions = new Hashtable();
@@ -523,15 +523,15 @@ final class UserAdminPermissionCollection extends PermissionCollection {
 
 	/**
 	 * Adds the given permission to this
-	 * <code>UserAdminPermissionCollection</code>. The key for the hash is the
+	 * {@code UserAdminPermissionCollection}. The key for the hash is the
 	 * name.
 	 * 
-	 * @param permission the <code>Permission</code> object to add.
+	 * @param permission the {@code Permission} object to add.
 	 * 
 	 * @throws IllegalArgumentException If the given permission is not a
-	 *         <code>UserAdminPermission</code>
+	 *         {@code UserAdminPermission}
 	 * @throws SecurityException If this
-	 *         <code>UserAdminPermissionCollection</code> object has been marked
+	 *         {@code UserAdminPermissionCollection} object has been marked
 	 *         readonly
 	 */
 	public void add(Permission permission) {
@@ -567,13 +567,13 @@ final class UserAdminPermissionCollection extends PermissionCollection {
 	}
 
 	/**
-	 * Checks to see if this <code>PermissionCollection</code> implies the given
+	 * Checks to see if this {@code PermissionCollection} implies the given
 	 * permission.
 	 * 
-	 * @param permission the <code>Permission</code> object to check against
+	 * @param permission the {@code Permission} object to check against
 	 * 
 	 * @return true if the given permission is implied by this
-	 *         <code>PermissionCollection</code>, false otherwise.
+	 *         {@code PermissionCollection}, false otherwise.
 	 */
 	public boolean implies(Permission permission) {
 		if (!(permission instanceof UserAdminPermission)) {
@@ -631,10 +631,10 @@ final class UserAdminPermissionCollection extends PermissionCollection {
 	}
 
 	/**
-	 * Returns an enumeration of all the <code>UserAdminPermission</code>
+	 * Returns an enumeration of all the {@code UserAdminPermission}
 	 * objects in the container.
 	 * 
-	 * @return an enumeration of all the <code>UserAdminPermission</code>
+	 * @return an enumeration of all the {@code UserAdminPermission}
 	 *         objects.
 	 */
 	public Enumeration elements() {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package-info.java
new file mode 100644
index 0000000..0e1208b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * User Admin Package Version 1.1.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.useradmin; version="[1.1,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.useradmin; version="[1.1,1.2)"}
+ * 
+ * @version $Id: 0a74b78291403f3c7cfa647c77bba084f3015196 $
+ */
+
+package org.osgi.service.useradmin;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package.html
deleted file mode 100644
index c8c223d..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/useradmin/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>User Admin Package Version 1.1.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.useradmin; version="[1.1,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java
index 49df68a..bf4db1a 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/BasicEnvelope.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,10 +16,10 @@
 package org.osgi.service.wireadmin;
 
 /**
- * <code>BasicEnvelope</code> is an implementation of the {@link Envelope}
+ * {@code BasicEnvelope} is an implementation of the {@link Envelope}
  * interface
  * 
- * @version $Revision: 5673 $
+ * @version $Id: fed6fc5c19b980344db75523bb2ebc905e2d44c2 $
  */
 public class BasicEnvelope implements Envelope {
 	Object	value;
@@ -29,10 +29,10 @@ public class BasicEnvelope implements Envelope {
 	/**
 	 * Constructor.
 	 * 
-	 * @param value Content of this envelope, may be <code>null</code>.
-	 * @param identification Identifying object for this <code>Envelope</code>
-	 *        object, must not be <code>null</code>
-	 * @param scope Scope name for this object, must not be <code>null</code>
+	 * @param value Content of this envelope, may be {@code null}.
+	 * @param identification Identifying object for this {@code Envelope}
+	 *        object, must not be {@code null}
+	 * @param scope Scope name for this object, must not be {@code null}
 	 * @see Envelope
 	 */
 	public BasicEnvelope(Object value, Object identification, String scope) {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Consumer.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Consumer.java
index cef1c1c..fd68dea 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Consumer.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Consumer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,8 +20,8 @@ package org.osgi.service.wireadmin;
  * {@link Producer} services.
  * 
  * <p>
- * Service objects registered under the <code>Consumer</code> interface are
- * expected to consume values from a Producer service via a <code>Wire</code>
+ * Service objects registered under the {@code Consumer} interface are
+ * expected to consume values from a Producer service via a {@code Wire}
  * object. A Consumer service may poll the Producer service by calling the
  * {@link Wire#poll} method. The Consumer service will also receive an updated
  * value when called at it's {@link #updated} method. The Producer service
@@ -29,48 +29,48 @@ package org.osgi.service.wireadmin;
  * by the {@link Wire#getFlavors} method, or one of their subclasses.
  * 
  * <p>
- * Consumer service objects must register with a <code>service.pid</code> and a
+ * Consumer service objects must register with a {@code service.pid} and a
  * {@link WireConstants#WIREADMIN_CONSUMER_FLAVORS} property. It is recommended
  * that Consumer service objects also register with a
- * <code>service.description</code> property.
+ * {@code service.description} property.
  * 
  * <p>
- * If an <code>Exception</code> is thrown by any of the <code>Consumer</code>
- * methods, a <code>WireAdminEvent</code> of type
+ * If an {@code Exception} is thrown by any of the {@code Consumer}
+ * methods, a {@code WireAdminEvent} of type
  * {@link WireAdminEvent#CONSUMER_EXCEPTION} is broadcast by the Wire Admin
  * service.
  * 
  * <p>
  * Security Considerations - Data consuming bundles will require
- * <code>ServicePermission[Consumer,REGISTER]</code>. In general, only the Wire
+ * {@code ServicePermission[Consumer,REGISTER]}. In general, only the Wire
  * Admin service bundle should have this permission. Thus only the Wire Admin
  * service may directly call a Consumer service. Care must be taken in the
- * sharing of <code>Wire</code> objects with other bundles.
+ * sharing of {@code Wire} objects with other bundles.
  * <p>
  * Consumer services must be registered with their scope when they can receive
  * different types of objects from the Producer service. The Consumer service
- * should have <code>WirePermission</code> for each of these scope names.
+ * should have {@code WirePermission} for each of these scope names.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: f03f0a6f18b69e7e46c733c13231ed54b26e886e $
  */
 public interface Consumer {
 	/**
-	 * Update the value. This Consumer service is called by the <code>Wire</code>
+	 * Update the value. This Consumer service is called by the {@code Wire}
 	 * object with an updated value from the Producer service.
 	 * 
 	 * <p>
-	 * Note: This method may be called by a <code>Wire</code> object prior to this
-	 * object being notified that it is connected to that <code>Wire</code> object
+	 * Note: This method may be called by a {@code Wire} object prior to this
+	 * object being notified that it is connected to that {@code Wire} object
 	 * (via the {@link #producersConnected} method).
 	 * <p>
-	 * When the Consumer service can receive <code>Envelope</code> objects, it
+	 * When the Consumer service can receive {@code Envelope} objects, it
 	 * must have registered all scope names together with the service object,
 	 * and each of those names must be permitted by the bundle's
-	 * <code>WirePermission</code>. If an <code>Envelope</code> object is delivered
-	 * with the <code>updated</code> method, then the Consumer service should
+	 * {@code WirePermission}. If an {@code Envelope} object is delivered
+	 * with the {@code updated} method, then the Consumer service should
 	 * assume that the security check has been performed.
 	 * 
-	 * @param wire The <code>Wire</code> object which is delivering the updated
+	 * @param wire The {@code Wire} object which is delivering the updated
 	 *        value.
 	 * @param value The updated value. The value should be an instance of one of
 	 *        the types specified by the {@link Wire#getFlavors} method.
@@ -78,12 +78,12 @@ public interface Consumer {
 	public void updated(Wire wire, Object value);
 
 	/**
-	 * Update the list of <code>Wire</code> objects to which this Consumer service
+	 * Update the list of {@code Wire} objects to which this Consumer service
 	 * is connected.
 	 * 
 	 * <p>
 	 * This method is called when the Consumer service is first registered and
-	 * subsequently whenever a <code>Wire</code> associated with this Consumer
+	 * subsequently whenever a {@code Wire} associated with this Consumer
 	 * service becomes connected, is modified or becomes disconnected.
 	 * 
 	 * <p>
@@ -92,10 +92,10 @@ public interface Consumer {
 	 * take place during registration when they execute the registration in a
 	 * synchronized method.
 	 * 
-	 * @param wires An array of the current and complete list of <code>Wire</code>
+	 * @param wires An array of the current and complete list of {@code Wire}
 	 *        objects to which this Consumer service is connected. May be
-	 *        <code>null</code> if the Consumer service is not currently connected
-	 *        to any <code>Wire</code> objects.
+	 *        {@code null} if the Consumer service is not currently connected
+	 *        to any {@code Wire} objects.
 	 */
 	public void producersConnected(Wire[] wires);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Envelope.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Envelope.java
index 5f57638..fe08741 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Envelope.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Envelope.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,44 +18,44 @@ package org.osgi.service.wireadmin;
 /**
  * Identifies a contained value.
  * 
- * An <code>Envelope</code> object combines a status value, an identification
- * object and a scope name. The <code>Envelope</code> object allows the use of
+ * An {@code Envelope} object combines a status value, an identification
+ * object and a scope name. The {@code Envelope} object allows the use of
  * standard Java types when a Producer service can produce more than one kind of
- * object. The <code>Envelope</code> object allows the Consumer service to
+ * object. The {@code Envelope} object allows the Consumer service to
  * recognize the kind of object that is received. For example, a door lock could
- * be represented by a <code>Boolean</code> object. If the <code>Producer</code>
- * service would send such a <code>Boolean</code> object, then the Consumer
- * service would not know what door the <code>Boolean</code> object represented.
- * The <code>Envelope</code> object contains an identification object so the
+ * be represented by a {@code Boolean} object. If the {@code Producer}
+ * service would send such a {@code Boolean} object, then the Consumer
+ * service would not know what door the {@code Boolean} object represented.
+ * The {@code Envelope} object contains an identification object so the
  * Consumer service can discriminate between different kinds of values. The
- * identification object may be a simple <code>String</code> object, but it can
+ * identification object may be a simple {@code String} object, but it can
  * also be a domain specific object that is mutually agreed by the Producer and
  * the Consumer service. This object can then contain relevant information that
  * makes the identification easier.
  * <p>
  * The scope name of the envelope is used for security. The Wire object must
- * verify that any <code>Envelope</code> object send through the <code>update</code>
- * method or coming from the <code>poll</code> method has a scope name that
+ * verify that any {@code Envelope} object send through the {@code update}
+ * method or coming from the {@code poll} method has a scope name that
  * matches the permissions of both the Producer service and the Consumer service
- * involved. The wireadmin package also contains a class <code>BasicEnvelope</code>
+ * involved. The wireadmin package also contains a class {@code BasicEnvelope}
  * that implements the methods of this interface.
  * 
  * @see WirePermission
  * @see BasicEnvelope
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 1b320a1161ba45d1fd6c203663210a47e3588ad2 $
  */
 public interface Envelope {
 	/**
-	 * Return the value associated with this <code>Envelope</code> object.
+	 * Return the value associated with this {@code Envelope} object.
 	 * 
-	 * @return the value of the status item, or <code>null</code> when no item is
+	 * @return the value of the status item, or {@code null} when no item is
 	 *         associated with this object.
 	 */
 	public Object getValue();
 
 	/**
-	 * Return the identification of this <code>Envelope</code> object.
+	 * Return the identification of this {@code Envelope} object.
 	 * 
 	 * An identification may be of any Java type. The type must be mutually
 	 * agreed between the Consumer and Producer services.
@@ -66,12 +66,12 @@ public interface Envelope {
 	public Object getIdentification();
 
 	/**
-	 * Return the scope name of this <code>Envelope</code> object.
+	 * Return the scope name of this {@code Envelope} object.
 	 * 
 	 * Scope names are used to restrict the communication between the Producer
-	 * and Consumer services. Only <code>Envelopes</code> objects with a scope
+	 * and Consumer services. Only {@code Envelopes} objects with a scope
 	 * name that is permitted for the Producer and the Consumer services must be
-	 * passed through a <code>Wire</code> object.
+	 * passed through a {@code Wire} object.
 	 * 
 	 * @return the security scope for the status item, must not be null.
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Producer.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Producer.java
index faf6dfd..c22ed6d 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Producer.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Producer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,90 +22,90 @@ package org.osgi.service.wireadmin;
  * <p>
  * Service objects registered under the Producer interface are expected to
  * produce values (internally generated or from external sensors). The value can
- * be of different types. When delivering a value to a <code>Wire</code> object,
+ * be of different types. When delivering a value to a {@code Wire} object,
  * the Producer service should coerce the value to be an instance of one of the
  * types specified by {@link Wire#getFlavors}. The classes are specified in
  * order of preference.
  * 
  * <p>
  * When the data represented by the Producer object changes, this object should
- * send the updated value by calling the <code>update</code> method on each of
- * <code>Wire</code> objects passed in the most recent call to this object's
- * {@link #consumersConnected} method. These <code>Wire</code> objects will pass
- * the value on to the associated <code>Consumer</code> service object.
+ * send the updated value by calling the {@code update} method on each of
+ * {@code Wire} objects passed in the most recent call to this object's
+ * {@link #consumersConnected} method. These {@code Wire} objects will pass
+ * the value on to the associated {@code Consumer} service object.
  * 
  * <p>
- * The Producer service may use the information in the <code>Wire</code> object's
- * properties to schedule the delivery of values to the <code>Wire</code> object.
+ * The Producer service may use the information in the {@code Wire} object's
+ * properties to schedule the delivery of values to the {@code Wire} object.
  * 
  * <p>
- * Producer service objects must register with a <code>service.pid</code> and a
+ * Producer service objects must register with a {@code service.pid} and a
  * {@link WireConstants#WIREADMIN_PRODUCER_FLAVORS} property. It is recommended
  * that a Producer service object also registers with a
- * <code>service.description</code> property. Producer service objects must
+ * {@code service.description} property. Producer service objects must
  * register with a {@link WireConstants#WIREADMIN_PRODUCER_FILTERS} property if
  * the Producer service will be performing filtering instead of the
- * <code>Wire</code> object.
+ * {@code Wire} object.
  * 
  * <p>
  * If an exception is thrown by a Producer object method, a
- * <code>WireAdminEvent</code> of type {@link WireAdminEvent#PRODUCER_EXCEPTION}
+ * {@code WireAdminEvent} of type {@link WireAdminEvent#PRODUCER_EXCEPTION}
  * is broadcast by the Wire Admin service.
  * 
  * <p>
  * Security Considerations. Data producing bundles will require
- * <code>ServicePermission[Producer,REGISTER]</code> to register a Producer
+ * {@code ServicePermission[Producer,REGISTER]} to register a Producer
  * service. In general, only the Wire Admin service should have
- * <code>ServicePermission[Producer,GET]</code>. Thus only the Wire Admin service
+ * {@code ServicePermission[Producer,GET]}. Thus only the Wire Admin service
  * may directly call a Producer service. Care must be taken in the sharing of
- * <code>Wire</code> objects with other bundles.
+ * {@code Wire} objects with other bundles.
  * <p>
  * Producer services must be registered with scope names when they can send
  * different types of objects (composite) to the Consumer service. The Producer
- * service should have <code>WirePermission</code> for each of these scope names.
+ * service should have {@code WirePermission} for each of these scope names.
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 548da8077c4f225a0082a336330fae19e3c64aa4 $
  */
 public interface Producer {
 	/**
-	 * Return the current value of this <code>Producer</code> object.
+	 * Return the current value of this {@code Producer} object.
 	 * 
 	 * <p>
-	 * This method is called by a <code>Wire</code> object in response to the
-	 * Consumer service calling the <code>Wire</code> object's <code>poll</code>
+	 * This method is called by a {@code Wire} object in response to the
+	 * Consumer service calling the {@code Wire} object's {@code poll}
 	 * method. The Producer should coerce the value to be an instance of one of
 	 * the types specified by {@link Wire#getFlavors}. The types are specified
 	 * in order of of preference. The returned value should be as new or newer
 	 * than the last value furnished by this object.
 	 * 
 	 * <p>
-	 * Note: This method may be called by a <code>Wire</code> object prior to this
-	 * object being notified that it is connected to that <code>Wire</code> object
+	 * Note: This method may be called by a {@code Wire} object prior to this
+	 * object being notified that it is connected to that {@code Wire} object
 	 * (via the {@link #consumersConnected} method).
 	 * <p>
-	 * If the Producer service returns an <code>Envelope</code> object that has an
+	 * If the Producer service returns an {@code Envelope} object that has an
 	 * unpermitted scope name, then the Wire object must ignore (or remove) the
 	 * transfer.
 	 * <p>
-	 * If the <code>Wire</code> object has a scope set, the return value must be
-	 * an array of <code>Envelope</code> objects (<code>Envelope[]</code>). The
-	 * <code>Wire</code> object must have removed any <code>Envelope</code> objects
+	 * If the {@code Wire} object has a scope set, the return value must be
+	 * an array of {@code Envelope} objects ({@code Envelope[]}). The
+	 * {@code Wire} object must have removed any {@code Envelope} objects
 	 * that have a scope name that is not in the Wire object's scope.
 	 * 
-	 * @param wire The <code>Wire</code> object which is polling this service.
-	 * @return The current value of the Producer service or <code>null</code> if
+	 * @param wire The {@code Wire} object which is polling this service.
+	 * @return The current value of the Producer service or {@code null} if
 	 *         the value cannot be coerced into a compatible type. Or an array
-	 *         of <code>Envelope</code> objects.
+	 *         of {@code Envelope} objects.
 	 */
 	public Object polled(Wire wire);
 
 	/**
-	 * Update the list of <code>Wire</code> objects to which this
-	 * <code>Producer</code> object is connected.
+	 * Update the list of {@code Wire} objects to which this
+	 * {@code Producer} object is connected.
 	 * 
 	 * <p>
 	 * This method is called when the Producer service is first registered and
-	 * subsequently whenever a <code>Wire</code> associated with this Producer
+	 * subsequently whenever a {@code Wire} associated with this Producer
 	 * becomes connected, is modified or becomes disconnected.
 	 * 
 	 * <p>
@@ -114,10 +114,10 @@ public interface Producer {
 	 * will not take place during registration when they execute the
 	 * registration in a synchronized method.
 	 * 
-	 * @param wires An array of the current and complete list of <code>Wire</code>
+	 * @param wires An array of the current and complete list of {@code Wire}
 	 *        objects to which this Producer service is connected. May be
-	 *        <code>null</code> if the Producer is not currently connected to any
-	 *        <code>Wire</code> objects.
+	 *        {@code null} if the Producer is not currently connected to any
+	 *        {@code Wire} objects.
 	 */
 	public void consumersConnected(Wire[] wires);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java
index 9e0c1a9..d5b8ba6 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/Wire.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,101 +21,102 @@ import java.util.Dictionary;
  * A connection between a Producer service and a Consumer service.
  * 
  * <p>
- * A <code>Wire</code> object connects a Producer service to a Consumer service.
+ * A {@code Wire} object connects a Producer service to a Consumer service.
  * Both the Producer and Consumer services are identified by their unique
- * <code>service.pid</code> values. The Producer and Consumer services may
- * communicate with each other via <code>Wire</code> objects that connect them.
+ * {@code service.pid} values. The Producer and Consumer services may
+ * communicate with each other via {@code Wire} objects that connect them.
  * The Producer service may send updated values to the Consumer service by
  * calling the {@link #update} method. The Consumer service may request an
  * updated value from the Producer service by calling the {@link #poll} method.
  * 
  * <p>
  * A Producer service and a Consumer service may be connected through multiple
- * <code>Wire</code> objects.
+ * {@code Wire} objects.
  * 
  * <p>
- * Security Considerations. <code>Wire</code> objects are available to Producer
- * and Consumer services connected to a given <code>Wire</code> object and to
- * bundles which can access the <code>WireAdmin</code> service. A bundle must have
- * <code>ServicePermission[WireAdmin,GET]</code> to get the <code>WireAdmin</code>
- * service to access all <code>Wire</code> objects. A bundle registering a
+ * Security Considerations. {@code Wire} objects are available to Producer
+ * and Consumer services connected to a given {@code Wire} object and to
+ * bundles which can access the {@code WireAdmin} service. A bundle must have
+ * {@code ServicePermission[WireAdmin,GET]} to get the {@code WireAdmin}
+ * service to access all {@code Wire} objects. A bundle registering a
  * Producer service or a Consumer service must have the appropriate
- * <code>ServicePermission[Consumer|Producer,REGISTER]</code> to register the
- * service and will be passed <code>Wire</code> objects when the service object's
- * <code>consumersConnected</code> or <code>producersConnected</code> method is
+ * {@code ServicePermission[Consumer|Producer,REGISTER]} to register the
+ * service and will be passed {@code Wire} objects when the service object's
+ * {@code consumersConnected} or {@code producersConnected} method is
  * called.
  * 
  * <p>
- * Scope. Each Wire object can have a scope set with the <code>setScope</code>
+ * Scope. Each Wire object can have a scope set with the {@code setScope}
  * method. This method should be called by a Consumer service when it assumes a
  * Producer service that is composite (supports multiple information items). The
- * names in the scope must be verified by the <code>Wire</code> object before it
+ * names in the scope must be verified by the {@code Wire} object before it
  * is used in communication. The semantics of the names depend on the Producer
  * service and must not be interpreted by the Wire Admin service.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 199afde5bdac49c99cff8d257ee621ef3eb13f7c $
  */
 public interface Wire {
 	/**
-	 * Return the state of this <code>Wire</code> object.
+	 * Return the state of this {@code Wire} object.
 	 * 
 	 * <p>
-	 * A connected <code>Wire</code> must always be disconnected before becoming
+	 * A connected {@code Wire} must always be disconnected before becoming
 	 * invalid.
 	 * 
-	 * @return <code>false</code> if this <code>Wire</code> object is invalid
+	 * @return {@code false} if this {@code Wire} object is invalid
 	 *         because it has been deleted via {@link WireAdmin#deleteWire};
-	 *         <code>true</code> otherwise.
+	 *         {@code true} otherwise.
 	 */
 	public boolean isValid();
 
 	/**
-	 * Return the connection state of this <code>Wire</code> object.
+	 * Return the connection state of this {@code Wire} object.
 	 * 
 	 * <p>
-	 * A <code>Wire</code> is connected after the Wire Admin service receives
+	 * A {@code Wire} is connected after the Wire Admin service receives
 	 * notification that the Producer service and the Consumer service for this
-	 * <code>Wire</code> object are both registered. This method will return
-	 * <code>true</code> prior to notifying the Producer and Consumer services via
-	 * calls to their respective <code>consumersConnected</code> and
-	 * <code>producersConnected</code> methods.
+	 * {@code Wire} object are both registered. This method will return
+	 * {@code true} prior to notifying the Producer and Consumer services via
+	 * calls to their respective {@code consumersConnected} and
+	 * {@code producersConnected} methods.
 	 * <p>
-	 * A <code>WireAdminEvent</code> of type {@link WireAdminEvent#WIRE_CONNECTED}
-	 * must be broadcast by the Wire Admin service when the <code>Wire</code>
+	 * A {@code WireAdminEvent} of type {@link WireAdminEvent#WIRE_CONNECTED}
+	 * must be broadcast by the Wire Admin service when the {@code Wire}
 	 * becomes connected.
 	 * 
 	 * <p>
-	 * A <code>Wire</code> object is disconnected when either the Consumer or
-	 * Producer service is unregistered or the <code>Wire</code> object is
+	 * A {@code Wire} object is disconnected when either the Consumer or
+	 * Producer service is unregistered or the {@code Wire} object is
 	 * deleted.
 	 * <p>
-	 * A <code>WireAdminEvent</code> of type
+	 * A {@code WireAdminEvent} of type
 	 * {@link WireAdminEvent#WIRE_DISCONNECTED} must be broadcast by the Wire
-	 * Admin service when the <code>Wire</code> becomes disconnected.
+	 * Admin service when the {@code Wire} becomes disconnected.
 	 * 
-	 * @return <code>true</code> if both the Producer and Consumer for this
-	 *         <code>Wire</code> object are connected to the <code>Wire</code>
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if both the Producer and Consumer for this
+	 *         {@code Wire} object are connected to the {@code Wire}
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean isConnected();
 
 	/**
 	 * Return the list of data types understood by the Consumer service
-	 * connected to this <code>Wire</code> object. Note that subclasses of the
+	 * connected to this {@code Wire} object. Note that subclasses of the
 	 * classes in this list are acceptable data types as well.
 	 * 
 	 * <p>
 	 * The list is the value of the
 	 * {@link WireConstants#WIREADMIN_CONSUMER_FLAVORS} service property of the
 	 * Consumer service object connected to this object. If no such property was
-	 * registered or the type of the property value is not <code>Class[]</code>,
-	 * this method must return <code>null</code>.
+	 * registered or the type of the property value is not {@code Class[]},
+	 * this method must return {@code null}.
 	 * 
 	 * @return An array containing the list of classes understood by the
-	 *         Consumer service or <code>null</code> if the <code>Wire</code> is not
+	 *         Consumer service or {@code null} if the {@code Wire} is not
 	 *         connected, or the consumer did not register a
 	 *         {@link WireConstants#WIREADMIN_CONSUMER_FLAVORS} property or the
-	 *         value of the property is not of type <code>Class[]</code>.
+	 *         value of the property is not of type {@code Class[]}.
 	 */
 	public Class[] getFlavors();
 
@@ -124,29 +125,29 @@ public interface Wire {
 	 * 
 	 * <p>
 	 * This methods is called by the Producer service to notify the Consumer
-	 * service connected to this <code>Wire</code> object of an updated value.
+	 * service connected to this {@code Wire} object of an updated value.
 	 * <p>
-	 * If the properties of this <code>Wire</code> object contain a
+	 * If the properties of this {@code Wire} object contain a
 	 * {@link WireConstants#WIREADMIN_FILTER} property, then filtering is
-	 * performed. If the Producer service connected to this <code>Wire</code>
+	 * performed. If the Producer service connected to this {@code Wire}
 	 * object was registered with the service property
 	 * {@link WireConstants#WIREADMIN_PRODUCER_FILTERS}, the Producer service
 	 * will perform the filtering according to the rules specified for the
-	 * filter. Otherwise, this <code>Wire</code> object will perform the filtering
+	 * filter. Otherwise, this {@code Wire} object will perform the filtering
 	 * of the value.
 	 * <p>
 	 * If no filtering is done, or the filter indicates the updated value should
-	 * be delivered to the Consumer service, then this <code>Wire</code> object
+	 * be delivered to the Consumer service, then this {@code Wire} object
 	 * must call the {@link Consumer#updated} method with the updated value. If
-	 * this <code>Wire</code> object is not connected, then the Consumer service
+	 * this {@code Wire} object is not connected, then the Consumer service
 	 * must not be called and the value is ignored.
 	 * <p>
-	 * If the value is an <code>Envelope</code> object, and the scope name is not
-	 * permitted, then the <code>Wire</code> object must ignore this call and not
+	 * If the value is an {@code Envelope} object, and the scope name is not
+	 * permitted, then the {@code Wire} object must ignore this call and not
 	 * transfer the object to the Consumer service.
 	 * 
 	 * <p>
-	 * A <code>WireAdminEvent</code> of type {@link WireAdminEvent#WIRE_TRACE}
+	 * A {@code WireAdminEvent} of type {@link WireAdminEvent#WIRE_TRACE}
 	 * must be broadcast by the Wire Admin service after the Consumer service
 	 * has been successfully called.
 	 * 
@@ -161,28 +162,28 @@ public interface Wire {
 	 * 
 	 * <p>
 	 * This methods is normally called by the Consumer service to request an
-	 * updated value from the Producer service connected to this <code>Wire</code>
-	 * object. This <code>Wire</code> object will call the {@link Producer#polled}
-	 * method to obtain an updated value. If this <code>Wire</code> object is not
+	 * updated value from the Producer service connected to this {@code Wire}
+	 * object. This {@code Wire} object will call the {@link Producer#polled}
+	 * method to obtain an updated value. If this {@code Wire} object is not
 	 * connected, then the Producer service must not be called.
 	 * <p>
 	 * 
-	 * If this <code>Wire</code> object has a scope, then this method must return
-	 * an array of <code>Envelope</code> objects. The objects returned must match
-	 * the scope of this object. The <code>Wire</code> object must remove all
-	 * <code>Envelope</code> objects with a scope name that is not in the
-	 * <code>Wire</code> object's scope. Thus, the list of objects returned must
-	 * only contain <code>Envelope</code> objects with a permitted scope name. If
-	 * the array becomes empty, <code>null</code> must be returned.
+	 * If this {@code Wire} object has a scope, then this method must return
+	 * an array of {@code Envelope} objects. The objects returned must match
+	 * the scope of this object. The {@code Wire} object must remove all
+	 * {@code Envelope} objects with a scope name that is not in the
+	 * {@code Wire} object's scope. Thus, the list of objects returned must
+	 * only contain {@code Envelope} objects with a permitted scope name. If
+	 * the array becomes empty, {@code null} must be returned.
 	 * 
 	 * <p>
-	 * A <code>WireAdminEvent</code> of type {@link WireAdminEvent#WIRE_TRACE}
+	 * A {@code WireAdminEvent} of type {@link WireAdminEvent#WIRE_TRACE}
 	 * must be broadcast by the Wire Admin service after the Producer service
 	 * has been successfully called.
 	 * 
 	 * @return A value whose type should be one of the types returned by
-	 *         {@link #getFlavors},<code>Envelope[]</code>, or <code>null</code>
-	 *         if the <code>Wire</code> object is not connected, the Producer
+	 *         {@link #getFlavors},{@code Envelope[]}, or {@code null}
+	 *         if the {@code Wire} object is not connected, the Producer
 	 *         service threw an exception, or the Producer service returned a
 	 *         value which is not an instance of one of the types returned by
 	 *         {@link #getFlavors}.
@@ -190,67 +191,67 @@ public interface Wire {
 	public Object poll();
 
 	/**
-	 * Return the last value sent through this <code>Wire</code> object.
+	 * Return the last value sent through this {@code Wire} object.
 	 * 
 	 * <p>
 	 * The returned value is the most recent, valid value passed to the
 	 * {@link #update} method or returned by the {@link #poll} method of this
-	 * object. If filtering is performed by this <code>Wire</code> object, this
+	 * object. If filtering is performed by this {@code Wire} object, this
 	 * methods returns the last value provided by the Producer service. This
-	 * value may be an <code>Envelope[]</code> when the Producer service uses
+	 * value may be an {@code Envelope[]} when the Producer service uses
 	 * scoping. If the return value is an Envelope object (or array), it must be
 	 * verified that the Consumer service has the proper WirePermission to see
 	 * it.
 	 * 
-	 * @return The last value passed though this <code>Wire</code> object or
-	 *         <code>null</code> if no valid values have been passed or the
+	 * @return The last value passed though this {@code Wire} object or
+	 *         {@code null} if no valid values have been passed or the
 	 *         Consumer service has no permission.
 	 */
 	public Object getLastValue();
 
 	/**
-	 * Return the wire properties for this <code>Wire</code> object.
+	 * Return the wire properties for this {@code Wire} object.
 	 * 
-	 * @return The properties for this <code>Wire</code> object. The returned
-	 *         <code>Dictionary</code> must be read only.
+	 * @return The properties for this {@code Wire} object. The returned
+	 *         {@code Dictionary} must be read only.
 	 */
 	public Dictionary getProperties();
 
 	/**
-	 * Return the calculated scope of this <code>Wire</code> object.
+	 * Return the calculated scope of this {@code Wire} object.
 	 * 
-	 * The purpose of the <code>Wire</code> object's scope is to allow a Producer
+	 * The purpose of the {@code Wire} object's scope is to allow a Producer
 	 * and/or Consumer service to produce/consume different types over a single
-	 * <code>Wire</code> object (this was deemed necessary for efficiency
+	 * {@code Wire} object (this was deemed necessary for efficiency
 	 * reasons). Both the Consumer service and the Producer service must set an
 	 * array of scope names (their scope) with the service registration property
-	 * <code>WIREADMIN_PRODUCER_SCOPE</code>, or
-	 * <code>WIREADMIN_CONSUMER_SCOPE</code> when they can produce multiple types.
+	 * {@code WIREADMIN_PRODUCER_SCOPE}, or
+	 * {@code WIREADMIN_CONSUMER_SCOPE} when they can produce multiple types.
 	 * If a Producer service can produce different types, it should set this
 	 * property to the array of scope names it can produce, the Consumer service
 	 * must set the array of scope names it can consume. The scope of a
-	 * <code>Wire</code> object is defined as the intersection of permitted scope
+	 * {@code Wire} object is defined as the intersection of permitted scope
 	 * names of the Producer service and Consumer service.
 	 * <p>
 	 * If neither the Consumer, or the Producer service registers scope names
-	 * with its service registration, then the <code>Wire</code> object's scope
-	 * must be <code>null</code>.
+	 * with its service registration, then the {@code Wire} object's scope
+	 * must be {@code null}.
 	 * <p>
-	 * The <code>Wire</code> object's scope must not change when a Producer or
+	 * The {@code Wire} object's scope must not change when a Producer or
 	 * Consumer services modifies its scope.
 	 * <p>
 	 * A scope name is permitted for a Producer service when the registering
-	 * bundle has <code>WirePermission[name,PRODUCE]</code>, and for a Consumer
-	 * service when the registering bundle has <code>WirePermission[name,CONSUME]</code>.
+	 * bundle has {@code WirePermission[name,PRODUCE]}, and for a Consumer
+	 * service when the registering bundle has {@code WirePermission[name,CONSUME]}.
 	 * <p>
 	 * If either Consumer service or Producer service has not set a
-	 * <code>WIREADMIN_*_SCOPE</code> property, then the returned value must be
-	 * <code>null</code>.
+	 * {@code WIREADMIN_*_SCOPE} property, then the returned value must be
+	 * {@code null}.
 	 * <p>
-	 * If the scope is set, the <code>Wire</code> object must enforce the scope
-	 * names when <code>Envelope</code> objects are used as a parameter to update
-	 * or returned from the <code>poll</code> method. The <code>Wire</code> object
-	 * must then remove all <code>Envelope</code> objects with a scope name that
+	 * If the scope is set, the {@code Wire} object must enforce the scope
+	 * names when {@code Envelope} objects are used as a parameter to update
+	 * or returned from the {@code poll} method. The {@code Wire} object
+	 * must then remove all {@code Envelope} objects with a scope name that
 	 * is not permitted.
 	 * 
 	 * @return A list of permitted scope names or null if the Produce or
@@ -259,7 +260,7 @@ public interface Wire {
 	public String[] getScope();
 
 	/**
-	 * Return true if the given name is in this <code>Wire</code> object's scope.
+	 * Return true if the given name is in this {@code Wire} object's scope.
 	 * 
 	 * @param name The scope name
 	 * @return true if the name is listed in the permitted scope names
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java
index 578ef4f..f4af804 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,72 +23,73 @@ import org.osgi.framework.InvalidSyntaxException;
  * Wire Administration service.
  * 
  * <p>
- * This service can be used to create <code>Wire</code> objects connecting a
- * Producer service and a Consumer service. <code>Wire</code> objects also have
- * wire properties that may be specified when a <code>Wire</code> object is
- * created. The Producer and Consumer services may use the <code>Wire</code>
+ * This service can be used to create {@code Wire} objects connecting a
+ * Producer service and a Consumer service. {@code Wire} objects also have
+ * wire properties that may be specified when a {@code Wire} object is
+ * created. The Producer and Consumer services may use the {@code Wire}
  * object's properties to manage or control their interaction. The use of
- * <code>Wire</code> object's properties by a Producer or Consumer services is
+ * {@code Wire} object's properties by a Producer or Consumer services is
  * optional.
  * 
  * <p>
  * Security Considerations. A bundle must have
- * <code>ServicePermission[WireAdmin,GET]</code> to get the Wire Admin service to
- * create, modify, find, and delete <code>Wire</code> objects.
+ * {@code ServicePermission[WireAdmin,GET]} to get the Wire Admin service to
+ * create, modify, find, and delete {@code Wire} objects.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: eac2fbb91deccf76175eab1efa524a8bfa0f4aec $
  */
 public interface WireAdmin {
 	/**
-	 * Create a new <code>Wire</code> object that connects a Producer service to a
+	 * Create a new {@code Wire} object that connects a Producer service to a
 	 * Consumer service.
 	 * 
 	 * The Producer service and Consumer service do not have to be registered
-	 * when the <code>Wire</code> object is created.
+	 * when the {@code Wire} object is created.
 	 * 
 	 * <p>
-	 * The <code>Wire</code> configuration data must be persistently stored. All
-	 * <code>Wire</code> connections are reestablished when the <code>WireAdmin</code>
-	 * service is registered. A <code>Wire</code> can be permanently removed by
+	 * The {@code Wire} configuration data must be persistently stored. All
+	 * {@code Wire} connections are reestablished when the {@code WireAdmin}
+	 * service is registered. A {@code Wire} can be permanently removed by
 	 * using the {@link #deleteWire} method.
 	 * 
 	 * <p>
-	 * The <code>Wire</code> object's properties must have case insensitive
-	 * <code>String</code> objects as keys (like the Framework). However, the case
+	 * The {@code Wire} object's properties must have case insensitive
+	 * {@code String} objects as keys (like the Framework). However, the case
 	 * of the key must be preserved.
 	 * 
 	 * <p>
-	 * The <code>WireAdmin</code> service must automatically add the following
-	 * <code>Wire</code> properties:
+	 * The {@code WireAdmin} service must automatically add the following
+	 * {@code Wire} properties:
 	 * <ul>
 	 * <li>{@link WireConstants#WIREADMIN_PID} set to the value of the
-	 * <code>Wire</code> object's persistent identity (PID). This value is
-	 * generated by the Wire Admin service when a <code>Wire</code> object is
+	 * {@code Wire} object's persistent identity (PID). This value is
+	 * generated by the Wire Admin service when a {@code Wire} object is
 	 * created.</li>
 	 * <li>{@link WireConstants#WIREADMIN_PRODUCER_PID} set to the value of
 	 * Producer service's PID.</li>
 	 * <li>{@link WireConstants#WIREADMIN_CONSUMER_PID} set to the value of
 	 * Consumer service's PID.</li>
 	 * </ul>
-	 * If the <code>properties</code> argument already contains any of these keys,
+	 * If the {@code properties} argument already contains any of these keys,
 	 * then the supplied values are replaced with the values assigned by the
 	 * Wire Admin service.
 	 * 
 	 * <p>
-	 * The Wire Admin service must broadcast a <code>WireAdminEvent</code> of type
-	 * {@link WireAdminEvent#WIRE_CREATED} after the new <code>Wire</code> object
+	 * The Wire Admin service must broadcast a {@code WireAdminEvent} of type
+	 * {@link WireAdminEvent#WIRE_CREATED} after the new {@code Wire} object
 	 * becomes available from {@link #getWires}.
 	 * 
-	 * @param producerPID The <code>service.pid</code> of the Producer service to
-	 *        be connected to the <code>Wire</code> object.
-	 * @param consumerPID The <code>service.pid</code> of the Consumer service to
-	 *        be connected to the <code>Wire</code> object.
-	 * @param properties The <code>Wire</code> object's properties. This argument
-	 *        may be <code>null</code> if the caller does not wish to define any
-	 *        <code>Wire</code> object's properties.
-	 * @return The <code>Wire</code> object for this connection.
+	 * @param producerPID The {@code service.pid} of the Producer service to
+	 *        be connected to the {@code Wire} object.
+	 * @param consumerPID The {@code service.pid} of the Consumer service to
+	 *        be connected to the {@code Wire} object.
+	 * @param properties The {@code Wire} object's properties. This argument
+	 *        may be {@code null} if the caller does not wish to define any
+	 *        {@code Wire} object's properties.
+	 * @return The {@code Wire} object for this connection.
 	 * 
-	 * @throws java.lang.IllegalArgumentException If <code>properties</code>
+	 * @throws java.lang.IllegalArgumentException If {@code properties}
 	 *         contains invalid wire types or case variants of the same key
 	 *         name.
 	 */
@@ -96,72 +97,72 @@ public interface WireAdmin {
 			Dictionary properties);
 
 	/**
-	 * Delete a <code>Wire</code> object.
+	 * Delete a {@code Wire} object.
 	 * 
 	 * <p>
-	 * The <code>Wire</code> object representing a connection between a Producer
+	 * The {@code Wire} object representing a connection between a Producer
 	 * service and a Consumer service must be removed. The persistently stored
-	 * configuration data for the <code>Wire</code> object must destroyed. The
-	 * <code>Wire</code> object's method {@link Wire#isValid} will return
-	 * <code>false</code> after it is deleted.
+	 * configuration data for the {@code Wire} object must destroyed. The
+	 * {@code Wire} object's method {@link Wire#isValid} will return
+	 * {@code false} after it is deleted.
 	 * 
 	 * <p>
-	 * The Wire Admin service must broadcast a <code>WireAdminEvent</code> of type
-	 * {@link WireAdminEvent#WIRE_DELETED} after the <code>Wire</code> object
+	 * The Wire Admin service must broadcast a {@code WireAdminEvent} of type
+	 * {@link WireAdminEvent#WIRE_DELETED} after the {@code Wire} object
 	 * becomes invalid.
 	 * 
-	 * @param wire The <code>Wire</code> object which is to be deleted.
+	 * @param wire The {@code Wire} object which is to be deleted.
 	 */
 	public void deleteWire(Wire wire);
 
 	/**
-	 * Update the properties of a <code>Wire</code> object.
+	 * Update the properties of a {@code Wire} object.
 	 * 
-	 * The persistently stored configuration data for the <code>Wire</code> object
+	 * The persistently stored configuration data for the {@code Wire} object
 	 * is updated with the new properties and then the Consumer and Producer
 	 * services will be called at the respective
 	 * {@link Consumer#producersConnected} and
 	 * {@link Producer#consumersConnected} methods.
 	 * 
 	 * <p>
-	 * The Wire Admin service must broadcast a <code>WireAdminEvent</code> of type
+	 * The Wire Admin service must broadcast a {@code WireAdminEvent} of type
 	 * {@link WireAdminEvent#WIRE_UPDATED} after the updated properties are
-	 * available from the <code>Wire</code> object.
+	 * available from the {@code Wire} object.
 	 * 
-	 * @param wire The <code>Wire</code> object which is to be updated.
-	 * @param properties The new <code>Wire</code> object's properties or
-	 *        <code>null</code> if no properties are required.
+	 * @param wire The {@code Wire} object which is to be updated.
+	 * @param properties The new {@code Wire} object's properties or
+	 *        {@code null} if no properties are required.
 	 * 
-	 * @throws java.lang.IllegalArgumentException If <code>properties</code>
+	 * @throws java.lang.IllegalArgumentException If {@code properties}
 	 *         contains invalid wire types or case variants of the same key
 	 *         name.
 	 */
 	public void updateWire(Wire wire, Dictionary properties);
 
 	/**
-	 * Return the <code>Wire</code> objects that match the given <code>filter</code>.
+	 * Return the {@code Wire} objects that match the given {@code filter}.
 	 * 
 	 * <p>
-	 * The list of available <code>Wire</code> objects is matched against the
-	 * specified <code>filter</code>.<code>Wire</code> objects which match the
-	 * <code>filter</code> must be returned. These <code>Wire</code> objects are not
+	 * The list of available {@code Wire} objects is matched against the
+	 * specified {@code filter}.{@code Wire} objects which match the
+	 * {@code filter} must be returned. These {@code Wire} objects are not
 	 * necessarily connected. The Wire Admin service should not return invalid
-	 * <code>Wire</code> objects, but it is possible that a <code>Wire</code> object
+	 * {@code Wire} objects, but it is possible that a {@code Wire} object
 	 * is deleted after it was placed in the list.
 	 * 
 	 * <p>
-	 * The filter matches against the <code>Wire</code> object's properties
+	 * The filter matches against the {@code Wire} object's properties
 	 * including {@link WireConstants#WIREADMIN_PRODUCER_PID},
 	 * {@link WireConstants#WIREADMIN_CONSUMER_PID} and
 	 * {@link WireConstants#WIREADMIN_PID}.
 	 * 
-	 * @param filter Filter string to select <code>Wire</code> objects or
-	 *        <code>null</code> to select all <code>Wire</code> objects.
-	 * @return An array of <code>Wire</code> objects which match the
-	 *         <code>filter</code> or <code>null</code> if no <code>Wire</code>
-	 *         objects match the <code>filter</code>.
+	 * @param filter Filter string to select {@code Wire} objects or
+	 *        {@code null} to select all {@code Wire} objects.
+	 * @return An array of {@code Wire} objects which match the
+	 *         {@code filter} or {@code null} if no {@code Wire}
+	 *         objects match the {@code filter}.
 	 * @throws org.osgi.framework.InvalidSyntaxException If the specified
-	 *         <code>filter</code> has an invalid syntax.
+	 *         {@code filter} has an invalid syntax.
 	 * @see org.osgi.framework.Filter
 	 */
 	public Wire[] getWires(String filter) throws InvalidSyntaxException;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java
index bba84ef..bba03cc 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminEvent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,13 +21,13 @@ import org.osgi.framework.ServiceReference;
  * A Wire Admin Event.
  * 
  * <p>
- * <code>WireAdminEvent</code> objects are delivered to all registered
- * <code>WireAdminListener</code> service objects which specify an interest in the
- * <code>WireAdminEvent</code> type. Events must be delivered in chronological
- * order with respect to each listener. For example, a <code>WireAdminEvent</code>
+ * {@code WireAdminEvent} objects are delivered to all registered
+ * {@code WireAdminListener} service objects which specify an interest in the
+ * {@code WireAdminEvent} type. Events must be delivered in chronological
+ * order with respect to each listener. For example, a {@code WireAdminEvent}
  * of type {@link #WIRE_CONNECTED} must be delivered before a
- * <code>WireAdminEvent</code> of type {@link #WIRE_DISCONNECTED} for a particular
- * <code>Wire</code> object.
+ * {@code WireAdminEvent} of type {@link #WIRE_DISCONNECTED} for a particular
+ * {@code Wire} object.
  * 
  * <p>
  * A type code is used to identify the type of event. The following event types
@@ -48,13 +48,13 @@ import org.osgi.framework.ServiceReference;
  * Event type values must be unique and disjoint bit values. Event types must be
  * defined as a bit in a 32 bit integer and can thus be bitwise OR'ed together.
  * <p>
- * Security Considerations. <code>WireAdminEvent</code> objects contain
- * <code>Wire</code> objects. Care must be taken in the sharing of <code>Wire</code>
+ * Security Considerations. {@code WireAdminEvent} objects contain
+ * {@code Wire} objects. Care must be taken in the sharing of {@code Wire}
  * objects with other bundles.
  * 
  * @see WireAdminListener
  * 
- * @version $Revision: 5673 $
+ * @version $Id: b9a956b3a96d756b72bdd50271a5d334dc8ce6cd $
  */
 public class WireAdminEvent {
 	/**
@@ -62,7 +62,7 @@ public class WireAdminEvent {
 	 */
 	private ServiceReference	reference;
 	/**
-	 * The <code>Wire</code> object associated with this event.
+	 * The {@code Wire} object associated with this event.
 	 */
 	private Wire				wire;
 	/**
@@ -79,104 +79,104 @@ public class WireAdminEvent {
 	 * A Producer service method has thrown an exception.
 	 * 
 	 * <p>
-	 * This <code>WireAdminEvent</code> type indicates that a Producer service
+	 * This {@code WireAdminEvent} type indicates that a Producer service
 	 * method has thrown an exception. The {@link WireAdminEvent#getThrowable}
 	 * method will return the exception that the Producer service method raised.
 	 * 
 	 * <p>
-	 * The value of <code>PRODUCER_EXCEPTION</code> is 0x00000001.
+	 * The value of {@code PRODUCER_EXCEPTION} is 0x00000001.
 	 */
 	public final static int		PRODUCER_EXCEPTION	= 0x00000001;
 	/**
 	 * A Consumer service method has thrown an exception.
 	 * 
 	 * <p>
-	 * This <code>WireAdminEvent</code> type indicates that a Consumer service
+	 * This {@code WireAdminEvent} type indicates that a Consumer service
 	 * method has thrown an exception. The {@link WireAdminEvent#getThrowable}
 	 * method will return the exception that the Consumer service method raised.
 	 * 
 	 * <p>
-	 * The value of <code>CONSUMER_EXCEPTION</code> is 0x00000002.
+	 * The value of {@code CONSUMER_EXCEPTION} is 0x00000002.
 	 */
 	public final static int		CONSUMER_EXCEPTION	= 0x00000002;
 	/**
-	 * A <code>Wire</code> has been created.
+	 * A {@code Wire} has been created.
 	 * 
 	 * <p>
-	 * This <code>WireAdminEvent</code> type that indicates that a new
-	 * <code>Wire</code> object has been created.
+	 * This {@code WireAdminEvent} type that indicates that a new
+	 * {@code Wire} object has been created.
 	 * 
 	 * An event is broadcast when {@link WireAdmin#createWire} is called. The
-	 * {@link WireAdminEvent#getWire} method will return the <code>Wire</code>
+	 * {@link WireAdminEvent#getWire} method will return the {@code Wire}
 	 * object that has just been created.
 	 * 
 	 * <p>
-	 * The value of <code>WIRE_CREATED</code> is 0x00000004.
+	 * The value of {@code WIRE_CREATED} is 0x00000004.
 	 */
 	public final static int		WIRE_CREATED		= 0x00000004;
 	/**
-	 * A <code>Wire</code> has been updated.
+	 * A {@code Wire} has been updated.
 	 * 
 	 * <p>
-	 * This <code>WireAdminEvent</code> type that indicates that an existing
-	 * <code>Wire</code> object has been updated with new properties.
+	 * This {@code WireAdminEvent} type that indicates that an existing
+	 * {@code Wire} object has been updated with new properties.
 	 * 
 	 * An event is broadcast when {@link WireAdmin#updateWire} is called with a
 	 * valid wire. The {@link WireAdminEvent#getWire} method will return the
-	 * <code>Wire</code> object that has just been updated.
+	 * {@code Wire} object that has just been updated.
 	 * 
 	 * <p>
-	 * The value of <code>WIRE_UPDATED</code> is 0x00000008.
+	 * The value of {@code WIRE_UPDATED} is 0x00000008.
 	 */
 	public final static int		WIRE_UPDATED		= 0x00000008;
 	/**
-	 * A <code>Wire</code> has been deleted.
+	 * A {@code Wire} has been deleted.
 	 * 
 	 * <p>
-	 * This <code>WireAdminEvent</code> type that indicates that an existing wire
+	 * This {@code WireAdminEvent} type that indicates that an existing wire
 	 * has been deleted.
 	 * 
 	 * An event is broadcast when {@link WireAdmin#deleteWire} is called with a
-	 * valid wire. {@link WireAdminEvent#getWire} will return the <code>Wire</code>
+	 * valid wire. {@link WireAdminEvent#getWire} will return the {@code Wire}
 	 * object that has just been deleted.
 	 * 
 	 * <p>
-	 * The value of <code>WIRE_DELETED</code> is 0x00000010.
+	 * The value of {@code WIRE_DELETED} is 0x00000010.
 	 */
 	public final static int		WIRE_DELETED		= 0x00000010;
 	/**
-	 * The <code>WireAdminEvent</code> type that indicates that an existing
-	 * <code>Wire</code> object has become connected.
+	 * The {@code WireAdminEvent} type that indicates that an existing
+	 * {@code Wire} object has become connected.
 	 * 
 	 * The Consumer object and the Producer object that are associated with the
-	 * <code>Wire</code> object have both been registered and the <code>Wire</code>
+	 * {@code Wire} object have both been registered and the {@code Wire}
 	 * object is connected. See {@link Wire#isConnected} for a description of
 	 * the connected state. This event may come before the
-	 * <code>producersConnected</code> and <code>consumersConnected</code> method
+	 * {@code producersConnected} and {@code consumersConnected} method
 	 * have returned or called to allow synchronous delivery of the events. Both
-	 * methods can cause other <code>WireAdminEvent</code> s to take place and
+	 * methods can cause other {@code WireAdminEvent} s to take place and
 	 * requiring this event to be send before these methods are returned would
 	 * mandate asynchronous delivery.
 	 * 
 	 * <p>
-	 * The value of <code>WIRE_CONNECTED</code> is 0x00000020.
+	 * The value of {@code WIRE_CONNECTED} is 0x00000020.
 	 */
 	public final static int		WIRE_CONNECTED		= 0x00000020;
 	/**
-	 * The <code>WireAdminEvent</code> type that indicates that an existing
-	 * <code>Wire</code> object has become disconnected.
+	 * The {@code WireAdminEvent} type that indicates that an existing
+	 * {@code Wire} object has become disconnected.
 	 * 
 	 * The Consumer object or/and Producer object is/are unregistered breaking
 	 * the connection between the two. See {@link Wire#isConnected} for a
 	 * description of the connected state.
 	 * 
 	 * <p>
-	 * The value of <code>WIRE_DISCONNECTED</code> is 0x00000040.
+	 * The value of {@code WIRE_DISCONNECTED} is 0x00000040.
 	 */
 	public final static int		WIRE_DISCONNECTED	= 0x00000040;
 	/**
-	 * The <code>WireAdminEvent</code> type that indicates that a new value is
-	 * transferred over the <code>Wire</code> object.
+	 * The {@code WireAdminEvent} type that indicates that a new value is
+	 * transferred over the {@code Wire} object.
 	 * 
 	 * This event is sent after the Consumer service has been notified by
 	 * calling the {@link Consumer#updated} method or the Consumer service
@@ -187,21 +187,21 @@ public class WireAdminEvent {
 	 * event.
 	 * 
 	 * <p>
-	 * The value of <code>WIRE_TRACE</code> is 0x00000080.
+	 * The value of {@code WIRE_TRACE} is 0x00000080.
 	 */
 	public final static int		WIRE_TRACE			= 0x00000080;
 
 	/**
-	 * Constructs a <code>WireAdminEvent</code> object from the given
-	 * <code>ServiceReference</code> object, event type, <code>Wire</code> object
+	 * Constructs a {@code WireAdminEvent} object from the given
+	 * {@code ServiceReference} object, event type, {@code Wire} object
 	 * and exception.
 	 * 
-	 * @param reference The <code>ServiceReference</code> object of the Wire Admin
+	 * @param reference The {@code ServiceReference} object of the Wire Admin
 	 *        service that created this event.
 	 * @param type The event type. See {@link #getType}.
-	 * @param wire The <code>Wire</code> object associated with this event.
+	 * @param wire The {@code Wire} object associated with this event.
 	 * @param exception An exception associated with this event. This may be
-	 *        <code>null</code> if no exception is associated with this event.
+	 *        {@code null} if no exception is associated with this event.
 	 */
 	public WireAdminEvent(ServiceReference reference, int type, Wire wire,
 			Throwable exception) {
@@ -212,10 +212,10 @@ public class WireAdminEvent {
 	}
 
 	/**
-	 * Return the <code>ServiceReference</code> object of the Wire Admin service
+	 * Return the {@code ServiceReference} object of the Wire Admin service
 	 * that created this event.
 	 * 
-	 * @return The <code>ServiceReference</code> object for the Wire Admin service
+	 * @return The {@code ServiceReference} object for the Wire Admin service
 	 *         that created this event.
 	 */
 	public ServiceReference getServiceReference() {
@@ -223,10 +223,10 @@ public class WireAdminEvent {
 	}
 
 	/**
-	 * Return the <code>Wire</code> object associated with this event.
+	 * Return the {@code Wire} object associated with this event.
 	 * 
-	 * @return The <code>Wire</code> object associated with this event or
-	 *         <code>null</code> when no <code>Wire</code> object is associated with
+	 * @return The {@code Wire} object associated with this event or
+	 *         {@code null} when no {@code Wire} object is associated with
 	 *         the event.
 	 */
 	public Wire getWire() {
@@ -257,7 +257,7 @@ public class WireAdminEvent {
 	/**
 	 * Returns the exception associated with the event, if any.
 	 * 
-	 * @return An exception or <code>null</code> if no exception is associated
+	 * @return An exception or {@code null} if no exception is associated
 	 *         with this event.
 	 */
 	public Throwable getThrowable() {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminListener.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminListener.java
index e741dd9..66f91df 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminListener.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireAdminListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,17 +19,17 @@ package org.osgi.service.wireadmin;
  * Listener for Wire Admin Events.
  * 
  * <p>
- * <code>WireAdminListener</code> objects are registered with the Framework
- * service registry and are notified with a <code>WireAdminEvent</code> object
+ * {@code WireAdminListener} objects are registered with the Framework
+ * service registry and are notified with a {@code WireAdminEvent} object
  * when an event is broadcast.
  * <p>
- * <code>WireAdminListener</code> objects can inspect the received
- * <code>WireAdminEvent</code> object to determine its type, the <code>Wire</code>
+ * {@code WireAdminListener} objects can inspect the received
+ * {@code WireAdminEvent} object to determine its type, the {@code Wire}
  * object with which it is associated, and the Wire Admin service that
  * broadcasts the event.
  * 
  * <p>
- * <code>WireAdminListener</code> objects must be registered with a service
+ * {@code WireAdminListener} objects must be registered with a service
  * property {@link WireConstants#WIREADMIN_EVENTS} whose value is a bitwise OR
  * of all the event types the listener is interested in receiving.
  * <p>
@@ -42,31 +42,31 @@ package org.osgi.service.wireadmin;
  * context.registerService(WireAdminListener.class.getName(), this, ht);
  * </pre>
  * 
- * If a <code>WireAdminListener</code> object is registered without a service
+ * If a {@code WireAdminListener} object is registered without a service
  * property {@link WireConstants#WIREADMIN_EVENTS}, then the
- * <code>WireAdminListener</code> will receive no events.
+ * {@code WireAdminListener} will receive no events.
  * 
  * <p>
- * Security Considerations. Bundles wishing to monitor <code>WireAdminEvent</code>
- * objects will require <code>ServicePermission[WireAdminListener,REGISTER]</code>
- * to register a <code>WireAdminListener</code> service. Since
- * <code>WireAdminEvent</code> objects contain <code>Wire</code> objects, care must
- * be taken in assigning permission to register a <code>WireAdminListener</code>
+ * Security Considerations. Bundles wishing to monitor {@code WireAdminEvent}
+ * objects will require {@code ServicePermission[WireAdminListener,REGISTER]}
+ * to register a {@code WireAdminListener} service. Since
+ * {@code WireAdminEvent} objects contain {@code Wire} objects, care must
+ * be taken in assigning permission to register a {@code WireAdminListener}
  * service.
  * 
  * @see WireAdminEvent
  * 
- * @version $Revision: 5673 $
+ * @version $Id: 1dc2fe90f2fd938c96bdaf952a68bb0fb12c4db4 $
  */
 public interface WireAdminListener {
 	/**
-	 * Receives notification of a broadcast <code>WireAdminEvent</code> object.
+	 * Receives notification of a broadcast {@code WireAdminEvent} object.
 	 * 
 	 * The event object will be of an event type specified in this
-	 * <code>WireAdminListener</code> service's
+	 * {@code WireAdminListener} service's
 	 * {@link WireConstants#WIREADMIN_EVENTS} service property.
 	 * 
-	 * @param event The <code>WireAdminEvent</code> object.
+	 * @param event The {@code WireAdminEvent} object.
 	 */
 	void wireAdminEvent(WireAdminEvent event);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireConstants.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireConstants.java
index b616a4f..d3adb35 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireConstants.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WireConstants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,25 +16,26 @@
 package org.osgi.service.wireadmin;
 
 /**
- * Defines standard names for <code>Wire</code> properties, wire filter
+ * Defines standard names for {@code Wire} properties, wire filter
  * attributes, Consumer and Producer service properties.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 52672c539686dcdeec1b1eb70aa69ad6071560bf $
  */
 public interface WireConstants {
 	/**
-	 * <code>Wire</code> property key (named <code>wireadmin.pid</code>) specifying
-	 * the persistent identity (PID) of this <code>Wire</code> object.
+	 * {@code Wire} property key (named {@code wireadmin.pid}) specifying
+	 * the persistent identity (PID) of this {@code Wire} object.
 	 * 
 	 * <p>
-	 * Each <code>Wire</code> object has a PID to allow unique and persistent
-	 * identification of a specific <code>Wire</code> object. The PID must be
-	 * generated by the {@link WireAdmin} service when the <code>Wire</code>
+	 * Each {@code Wire} object has a PID to allow unique and persistent
+	 * identification of a specific {@code Wire} object. The PID must be
+	 * generated by the {@link WireAdmin} service when the {@code Wire}
 	 * object is created.
 	 * 
 	 * <p>
 	 * This wire property is automatically set by the Wire Admin service. The
-	 * value of the property must be of type <code>String</code>.
+	 * value of the property must be of type {@code String}.
 	 */
 	public final static String	WIREADMIN_PID					= "wireadmin.pid";
 	/**
@@ -42,7 +43,7 @@ public interface WireConstants {
 	 * It contains the names of the composite Consumer services it can
 	 * inter-operate with. Inter-operability exists when any name in this array
 	 * matches any name in the array set by the Consumer service. The type of
-	 * this property must be <code>String[]</code>.
+	 * this property must be {@code String[]}.
 	 */
 	public final static String	WIREADMIN_PRODUCER_COMPOSITE	= "wireadmin.producer.composite";
 	/**
@@ -50,19 +51,19 @@ public interface WireConstants {
 	 * It contains the names of the composite Producer services it can cooperate
 	 * with. Inter-operability exists when any name in this array matches any
 	 * name in the array set by the Producer service. The type of this property
-	 * must be <code>String[]</code>.
+	 * must be {@code String[]}.
 	 */
 	public final static String	WIREADMIN_CONSUMER_COMPOSITE	= "wireadmin.consumer.composite";
 	/**
 	 * Service registration property key (named
-	 * <code>wireadmin.producer.scope</code>) specifying a list of names that may
-	 * be used to define the scope of this <code>Wire</code> object. A Producer
+	 * {@code wireadmin.producer.scope}) specifying a list of names that may
+	 * be used to define the scope of this {@code Wire} object. A Producer
 	 * service should set this service property when it can produce more than
 	 * one kind of value. This property is only used during registration,
-	 * modifying the property must not have any effect of the <code>Wire</code>
+	 * modifying the property must not have any effect of the {@code Wire}
 	 * object's scope. Each name in the given list mist have
-	 * <code>WirePermission[name,PRODUCE]</code> or else is ignored. The type of
-	 * this service registration property must be <code>String[]</code>.
+	 * {@code WirePermission[name,PRODUCE]} or else is ignored. The type of
+	 * this service registration property must be {@code String[]}.
 	 * 
 	 * @see Wire#getScope
 	 * @see #WIREADMIN_CONSUMER_SCOPE
@@ -70,14 +71,14 @@ public interface WireConstants {
 	public final static String	WIREADMIN_PRODUCER_SCOPE		= "wireadmin.producer.scope";
 	/**
 	 * Service registration property key (named
-	 * <code>wireadmin.consumer.scope</code>) specifying a list of names that may
-	 * be used to define the scope of this <code>Wire</code> object. A
-	 * <code>Consumer</code> service should set this service property when it can
+	 * {@code wireadmin.consumer.scope}) specifying a list of names that may
+	 * be used to define the scope of this {@code Wire} object. A
+	 * {@code Consumer} service should set this service property when it can
 	 * produce more than one kind of value. This property is only used during
 	 * registration, modifying the property must not have any effect of the
-	 * <code>Wire</code> object's scope. Each name in the given list mist have
-	 * <code>WirePermission[name,CONSUME]</code> or else is ignored. The type of this
-	 * service registration property must be <code>String[]</code>.
+	 * {@code Wire} object's scope. Each name in the given list mist have
+	 * {@code WirePermission[name,CONSUME]} or else is ignored. The type of this
+	 * service registration property must be {@code String[]}.
 	 * 
 	 * @see Wire#getScope
 	 * @see #WIREADMIN_PRODUCER_SCOPE
@@ -88,30 +89,30 @@ public interface WireConstants {
 	 */
 	public final static String	WIREADMIN_SCOPE_ALL[]			= {"*"};
 	/**
-	 * <code>Wire</code> property key (named <code>wireadmin.producer.pid</code>)
-	 * specifying the <code>service.pid</code> of the associated Producer service.
+	 * {@code Wire} property key (named {@code wireadmin.producer.pid})
+	 * specifying the {@code service.pid} of the associated Producer service.
 	 * 
 	 * <p>
 	 * This wire property is automatically set by the WireAdmin service. The
-	 * value of the property must be of type <code>String</code>.
+	 * value of the property must be of type {@code String}.
 	 */
 	public final static String	WIREADMIN_PRODUCER_PID			= "wireadmin.producer.pid";
 	/**
-	 * <code>Wire</code> property key (named <code>wireadmin.consumer.pid</code>)
-	 * specifying the <code>service.pid</code> of the associated Consumer service.
+	 * {@code Wire} property key (named {@code wireadmin.consumer.pid})
+	 * specifying the {@code service.pid} of the associated Consumer service.
 	 * 
 	 * <p>
 	 * This wire property is automatically set by the Wire Admin service. The
-	 * value of the property must be of type <code>String</code>.
+	 * value of the property must be of type {@code String}.
 	 */
 	public final static String	WIREADMIN_CONSUMER_PID			= "wireadmin.consumer.pid";
 	/**
-	 * <code>Wire</code> property key (named <code>wireadmin.filter</code>)
+	 * {@code Wire} property key (named {@code wireadmin.filter})
 	 * specifying a filter used to control the delivery rate of data between the
 	 * Producer and the Consumer service.
 	 * 
 	 * <p>
-	 * This property should contain a filter as described in the <code>Filter</code>
+	 * This property should contain a filter as described in the {@code Filter}
 	 * class. The filter can be used to specify when an updated value from the
 	 * Producer service should be delivered to the Consumer service. In many
 	 * cases the Consumer service does not need to receive the data with the
@@ -125,8 +126,8 @@ public interface WireConstants {
 	 * <p>
 	 * If the Producer service was registered with the
 	 * {@link #WIREADMIN_PRODUCER_FILTERS} service property indicating that the
-	 * Producer service will perform the data filtering then the <code>Wire</code>
-	 * object will not perform data filtering. Otherwise, the <code>Wire</code>
+	 * Producer service will perform the data filtering then the {@code Wire}
+	 * object will not perform data filtering. Otherwise, the {@code Wire}
 	 * object must perform basic filtering. Basic filtering includes supporting
 	 * the following standard wire filter attributes:
 	 * <ul>
@@ -142,45 +143,45 @@ public interface WireConstants {
 	public final static String	WIREADMIN_FILTER				= "wireadmin.filter";
 	/* Wire filter attribute names. */
 	/**
-	 * <code>Wire</code> object's filter attribute (named
-	 * <code>wirevalue.current</code>) representing the current value.
+	 * {@code Wire} object's filter attribute (named
+	 * {@code wirevalue.current}) representing the current value.
 	 */
 	public final static String	WIREVALUE_CURRENT				= "wirevalue.current";
 	/**
-	 * <code>Wire</code> object's filter attribute (named
-	 * <code>wirevalue.previous</code>) representing the previous value.
+	 * {@code Wire} object's filter attribute (named
+	 * {@code wirevalue.previous}) representing the previous value.
 	 */
 	public final static String	WIREVALUE_PREVIOUS				= "wirevalue.previous";
 	/**
-	 * <code>Wire</code> object's filter attribute (named
-	 * <code>wirevalue.delta.absolute</code>) representing the absolute delta.
+	 * {@code Wire} object's filter attribute (named
+	 * {@code wirevalue.delta.absolute}) representing the absolute delta.
 	 * The absolute (always positive) difference between the last update and the
 	 * current value (only when numeric). This attribute must not be used when
 	 * the values are not numeric.
 	 */
 	public final static String	WIREVALUE_DELTA_ABSOLUTE		= "wirevalue.delta.absolute";
 	/**
-	 * <code>Wire</code> object's filter attribute (named
-	 * <code>wirevalue.delta.relative</code>) representing the relative delta.
-	 * The relative difference is |<code>previous</code>-<code>current</code> |/|
-	 * <code>current</code>| (only when numeric). This attribute must not be used
+	 * {@code Wire} object's filter attribute (named
+	 * {@code wirevalue.delta.relative}) representing the relative delta.
+	 * The relative difference is |{@code previous}-{@code current} |/|
+	 * {@code current}| (only when numeric). This attribute must not be used
 	 * when the values are not numeric.
 	 */
 	public final static String	WIREVALUE_DELTA_RELATIVE		= "wirevalue.delta.relative";
 	/**
-	 * <code>Wire</code> object's filter attribute (named
-	 * <code>wirevalue.elapsed</code>) representing the elapsed time, in ms,
+	 * {@code Wire} object's filter attribute (named
+	 * {@code wirevalue.elapsed}) representing the elapsed time, in ms,
 	 * between this filter evaluation and the last update of the
-	 * <code>Consumer</code> service.
+	 * {@code Consumer} service.
 	 */
 	public final static String	WIREVALUE_ELAPSED				= "wirevalue.elapsed";
 	/* Service registration property key names. */
 	/**
-	 * Service Registration property (named <code>wireadmin.producer.filters</code>).
-	 * A <code>Producer</code> service registered with this property indicates to
+	 * Service Registration property (named {@code wireadmin.producer.filters}).
+	 * A {@code Producer} service registered with this property indicates to
 	 * the Wire Admin service that the Producer service implements at least the
 	 * filtering as described for the {@link #WIREADMIN_FILTER} property. If the
-	 * Producer service is not registered with this property, the <code>Wire</code>
+	 * Producer service is not registered with this property, the {@code Wire}
 	 * object must perform the basic filtering as described in
 	 * {@link #WIREADMIN_FILTER}.
 	 * 
@@ -190,18 +191,18 @@ public interface WireConstants {
 	 */
 	public final static String	WIREADMIN_PRODUCER_FILTERS		= "wireadmin.producer.filters";
 	/**
-	 * Service Registration property (named <code>wireadmin.consumer.flavors</code>)
+	 * Service Registration property (named {@code wireadmin.consumer.flavors})
 	 * specifying the list of data types understood by this Consumer service.
 	 * 
 	 * <p>
 	 * The Consumer service object must be registered with this service
 	 * property. The list must be in the order of preference with the first type
 	 * being the most preferred. The value of the property must be of type
-	 * <code>Class[]</code>.
+	 * {@code Class[]}.
 	 */
 	public final static String	WIREADMIN_CONSUMER_FLAVORS		= "wireadmin.consumer.flavors";
 	/**
-	 * Service Registration property (named <code>wireadmin.producer.flavors</code>)
+	 * Service Registration property (named {@code wireadmin.producer.flavors})
 	 * specifying the list of data types available from this Producer service.
 	 * 
 	 * <p>
@@ -209,15 +210,15 @@ public interface WireConstants {
 	 * property.
 	 * 
 	 * <p>
-	 * The value of the property must be of type <code>Class[]</code>.
+	 * The value of the property must be of type {@code Class[]}.
 	 */
 	public final static String	WIREADMIN_PRODUCER_FLAVORS		= "wireadmin.producer.flavors";
 	/**
-	 * Service Registration property (named <code>wireadmin.events</code>)
-	 * specifying the <code>WireAdminEvent</code> type of interest to a Wire Admin
+	 * Service Registration property (named {@code wireadmin.events})
+	 * specifying the {@code WireAdminEvent} type of interest to a Wire Admin
 	 * Listener service. The value of the property is a bitwise OR of all the
-	 * <code>WireAdminEvent</code> types the Wire Admin Listener service wishes to
-	 * receive and must be of type <code>Integer</code>.
+	 * {@code WireAdminEvent} types the Wire Admin Listener service wishes to
+	 * receive and must be of type {@code Integer}.
 	 * 
 	 * @see WireAdminEvent
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java
index 6073466..f22ea61 100644
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/WirePermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,29 +23,29 @@ import java.util.Enumeration;
 import java.util.Hashtable;
 
 /**
- * Permission for the scope of a <code>Wire</code> object. When a
- * <code>Envelope</code> object is used for communication with the
- * <code>poll</code> or <code>update</code> method, and the scope is set, then
- * the <code>Wire</code> object must verify that the Consumer service has
- * <code>WirePermission[name,CONSUME]</code> and the Producer service has
- * <code>WirePermission[name,PRODUCE]</code> for all names in the scope.
+ * Permission for the scope of a {@code Wire} object. When a
+ * {@code Envelope} object is used for communication with the
+ * {@code poll} or {@code update} method, and the scope is set, then
+ * the {@code Wire} object must verify that the Consumer service has
+ * {@code WirePermission[name,CONSUME]} and the Producer service has
+ * {@code WirePermission[name,PRODUCE]} for all names in the scope.
  * <p>
  * The names are compared with the normal rules for permission names. This means
  * that they may end with a "*" to indicate wildcards. E.g. Door.* indicates all
  * scope names starting with the string "Door". The last period is required due
- * to the implementations of the <code>BasicPermission</code> class.
+ * to the implementations of the {@code BasicPermission} class.
  * 
  * @ThreadSafe
- * @version $Revision: 6381 $
+ * @version $Id: 2910866cb953b6311421e6d2a33ae1f597be4b95 $
  */
 final public class WirePermission extends BasicPermission {
 	static final long			serialVersionUID	= -5583709391516569321L;
 	/**
-	 * The action string for the <code>produce</code> action.
+	 * The action string for the {@code produce} action.
 	 */
 	public static final String	PRODUCE				= "produce";
 	/**
-	 * The action string for the <code>consume</code> action.
+	 * The action string for the {@code consume} action.
 	 */
 	public static final String	CONSUME				= "consume";
 	private final static int	ACTION_PRODUCE		= 0x00000001;
@@ -69,7 +69,7 @@ final public class WirePermission extends BasicPermission {
 	 * actions.
 	 * 
 	 * @param name Wire name.
-	 * @param actions <code>produce</code>, <code>consume</code> (canonical
+	 * @param actions {@code produce}, {@code consume} (canonical
 	 *        order).
 	 */
 	public WirePermission(String name, String actions) {
@@ -190,22 +190,22 @@ final public class WirePermission extends BasicPermission {
 	}
 
 	/**
-	 * Checks if this <code>WirePermission</code> object <code>implies</code>
+	 * Checks if this {@code WirePermission} object {@code implies}
 	 * the specified permission.
 	 * <P>
-	 * More specifically, this method returns <code>true</code> if:
+	 * More specifically, this method returns {@code true} if:
 	 * <p>
 	 * <ul>
-	 * <li><i>p </i> is an instanceof the <code>WirePermission</code> class,
+	 * <li><i>p </i> is an instanceof the {@code WirePermission} class,
 	 * <li><i>p </i>'s actions are a proper subset of this object's actions, and
 	 * <li><i>p </i>'s name is implied by this object's name. For example,
-	 * <code>java.*</code> implies <code>java.home</code>.
+	 * {@code java.*} implies {@code java.home}.
 	 * </ul>
 	 * 
 	 * @param p The permission to check against.
 	 * 
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean implies(Permission p) {
 		if (p instanceof WirePermission) {
@@ -219,8 +219,8 @@ final public class WirePermission extends BasicPermission {
 
 	/**
 	 * Returns the canonical string representation of the actions. Always
-	 * returns present actions in the following order: <code>produce</code>,
-	 * <code>consume</code>.
+	 * returns present actions in the following order: {@code produce},
+	 * {@code consume}.
 	 * 
 	 * @return The canonical string representation of the actions.
 	 */
@@ -245,26 +245,26 @@ final public class WirePermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object for storing
-	 * <code>WirePermission</code> objects.
+	 * Returns a new {@code PermissionCollection} object for storing
+	 * {@code WirePermission} objects.
 	 * 
-	 * @return A new <code>PermissionCollection</code> object suitable for
-	 *         storing <code>WirePermission</code> objects.
+	 * @return A new {@code PermissionCollection} object suitable for
+	 *         storing {@code WirePermission} objects.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new WirePermissionCollection();
 	}
 
 	/**
-	 * Determines the equalty of two <code>WirePermission</code> objects.
+	 * Determines the equalty of two {@code WirePermission} objects.
 	 * 
 	 * Checks that specified object has the same name and actions as this
-	 * <code>WirePermission</code> object.
+	 * {@code WirePermission} object.
 	 * 
 	 * @param obj The object to test for equality.
-	 * @return true if <code>obj</code> is a <code>WirePermission</code>, and
-	 *         has the same name and actions as this <code>WirePermission</code>
-	 *         object; <code>false</code> otherwise.
+	 * @return true if {@code obj} is a {@code WirePermission}, and
+	 *         has the same name and actions as this {@code WirePermission}
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
@@ -290,13 +290,13 @@ final public class WirePermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a string describing this <code>WirePermission</code>. The
+	 * Returns a string describing this {@code WirePermission}. The
 	 * convention is to specify the class name, the permission name, and the
 	 * actions in the following format:
 	 * '(org.osgi.service.wireadmin.WirePermission "name"
 	 * "actions")'.
 	 * 
-	 * @return information about this <code>Permission</code> object.
+	 * @return information about this {@code Permission} object.
 	 */
 	public String toString() {
 		StringBuffer sb = new StringBuffer();
@@ -340,8 +340,8 @@ final public class WirePermission extends BasicPermission {
 }
 
 /**
- * A <code>WirePermissionCollection</code> stores a set of
- * <code>WirePermission</code> permissions.
+ * A {@code WirePermissionCollection} stores a set of
+ * {@code WirePermission} permissions.
  */
 
 final class WirePermissionCollection extends PermissionCollection {
@@ -415,12 +415,12 @@ final class WirePermissionCollection extends PermissionCollection {
 
 	/**
 	 * Determines if a set of permissions implies the permissions expressed in
-	 * <code>permission</code>.
+	 * {@code permission}.
 	 * 
 	 * @param permission The Permission object to compare.
 	 * 
-	 * @return <code>true</code> if <code>permission</code> is a proper subset
-	 *         of a permission in the set; <code>false</code> otherwise.
+	 * @return {@code true} if {@code permission} is a proper subset
+	 *         of a permission in the set; {@code false} otherwise.
 	 */
 	public boolean implies(Permission permission) {
 		if (!(permission instanceof WirePermission)) {
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package-info.java b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package-info.java
new file mode 100644
index 0000000..a54f1d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Wire Admin Package Version 1.0.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.wireadmin; version="[1.0,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.wireadmin; version="[1.0,1.1)"}
+ * 
+ * @version $Id: 69305f027e4729d464462bb9ecd994aca699f43d $
+ */
+
+package org.osgi.service.wireadmin;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package.html b/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package.html
deleted file mode 100644
index 36d1d82..0000000
--- a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/wireadmin/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Wire Admin Package Version 1.0.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.service.wireadmin; version="[1.0,2.0)"
-</pre>
-</BODY>
-
diff --git a/eclipse/plugins/org.eclipse.osgi.util/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.osgi.util/META-INF/MANIFEST.MF
index e8a692a..d2e5551 100644
--- a/eclipse/plugins/org.eclipse.osgi.util/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.osgi.util/META-INF/MANIFEST.MF
@@ -2,13 +2,12 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %osgiUtil
 Bundle-SymbolicName: org.eclipse.osgi.util
-Bundle-Version: 3.2.100.qualifier
+Bundle-Version: 3.2.200.qualifier
 Bundle-Description: %osgiUtilDes
 Bundle-Vendor: %eclipse.org
 Bundle-Localization: plugin
 Bundle-DocUrl: http://www.eclipse.org
 Bundle-ContactAddress: www.eclipse.org
-Bundle-Copyright: %copyright
 Export-Package: org.osgi.util.measurement; version="1.0.1",
  org.osgi.util.position; version="1.0.1",
  org.osgi.util.xml; version="1.0.1"
diff --git a/eclipse/plugins/org.eclipse.osgi.util/plugin.properties b/eclipse/plugins/org.eclipse.osgi.util/plugin.properties
index 7aa8609..b58fce0 100644
--- a/eclipse/plugins/org.eclipse.osgi.util/plugin.properties
+++ b/eclipse/plugins/org.eclipse.osgi.util/plugin.properties
@@ -11,4 +11,3 @@
 osgiUtil = OSGi Release 4.2.0 Utility Classes
 eclipse.org = Eclipse.org - Equinox
 osgiUtilDes = OSGi Service Platform Release 4.2.0 Utility Classes
-copyright = Copyright (c) 2003, 2005 IBM Corporation and others. All rights reserved. This program and the accompanying materials  are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java
index 82779cc..0347e48 100644
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Measurement.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@ package org.osgi.util.measurement;
  * Represents a value with an error, a unit and a time-stamp.
  * 
  * <p>
- * A <code>Measurement</code> object is used for maintaining the tuple of value,
+ * A {@code Measurement} object is used for maintaining the tuple of value,
  * error, unit and time-stamp. The value and error are represented as doubles
  * and the time is measured in milliseconds since midnight, January 1, 1970 UTC.
  * 
@@ -37,30 +37,30 @@ package org.osgi.util.measurement;
  * 95% or more of the time.
  * 
  * <p>
- * A <code>Measurement</code> object is immutable in order to be easily shared.
+ * A {@code Measurement} object is immutable in order to be easily shared.
  * 
  * <p>
  * Note: This class has a natural ordering that is inconsistent with equals. See
  * {@link #compareTo}.
  * 
  * @Immutable
- * @version $Revision: 5715 $
+ * @version $Id: 9ac53f19aa09dbc2f5aa34864c1a6e57f666efda $
  */
 public class Measurement implements Comparable {
-	private final double				value;
-	private final double				error;
-	private final long					time;
-	private final Unit					unit;
-	private transient volatile String	name;
-	private transient volatile int		hashCode;
+	private final double		value;
+	private final double		error;
+	private final long			time;
+	private final Unit			unit;
+	private transient String	name;
+	private transient int		hashCode;
 
 	/**
-	 * Create a new <code>Measurement</code> object.
+	 * Create a new {@code Measurement} object.
 	 * 
-	 * @param value The value of the <code>Measurement</code>.
-	 * @param error The error of the <code>Measurement</code>.
-	 * @param unit The <code>Unit</code> object in which the value is measured. If
-	 *        this argument is <code>null</code>, then the unit will be set to
+	 * @param value The value of the {@code Measurement}.
+	 * @param error The error of the {@code Measurement}.
+	 * @param unit The {@code Unit} object in which the value is measured. If
+	 *        this argument is {@code null}, then the unit will be set to
 	 *        {@link Unit#unity}.
 	 * @param time The time measured in milliseconds since midnight, January 1,
 	 *        1970 UTC.
@@ -70,15 +70,17 @@ public class Measurement implements Comparable {
 		this.error = Math.abs(error);
 		this.unit = (unit != null) ? unit : Unit.unity;
 		this.time = time;
+		name = null;
+		hashCode = 0;
 	}
 
 	/**
-	 * Create a new <code>Measurement</code> object with a time of zero.
+	 * Create a new {@code Measurement} object with a time of zero.
 	 * 
-	 * @param value The value of the <code>Measurement</code>.
-	 * @param error The error of the <code>Measurement</code>.
-	 * @param unit The <code>Unit</code> object in which the value is measured. If
-	 *        this argument is <code>null</code>, then the unit will be set to
+	 * @param value The value of the {@code Measurement}.
+	 * @param error The error of the {@code Measurement}.
+	 * @param unit The {@code Unit} object in which the value is measured. If
+	 *        this argument is {@code null}, then the unit will be set to
 	 *        {@link Unit#unity}.
 	 */
 	public Measurement(double value, double error, Unit unit) {
@@ -86,12 +88,12 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Create a new <code>Measurement</code> object with an error of 0.0 and a
+	 * Create a new {@code Measurement} object with an error of 0.0 and a
 	 * time of zero.
 	 * 
-	 * @param value The value of the <code>Measurement</code>.
-	 * @param unit The <code>Unit</code> in which the value is measured. If this
-	 *        argument is <code>null</code>, then the unit will be set to
+	 * @param value The value of the {@code Measurement}.
+	 * @param unit The {@code Unit} in which the value is measured. If this
+	 *        argument is {@code null}, then the unit will be set to
 	 *        {@link Unit#unity}.
 	 */
 	public Measurement(double value, Unit unit) {
@@ -99,38 +101,38 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Create a new <code>Measurement</code> object with an error of 0.0, a unit
+	 * Create a new {@code Measurement} object with an error of 0.0, a unit
 	 * of {@link Unit#unity} and a time of zero.
 	 * 
-	 * @param value The value of the <code>Measurement</code>.
+	 * @param value The value of the {@code Measurement}.
 	 */
 	public Measurement(double value) {
 		this(value, 0.0d, null, 0l);
 	}
 
 	/**
-	 * Returns the value of this <code>Measurement</code> object.
+	 * Returns the value of this {@code Measurement} object.
 	 * 
-	 * @return The value of this <code>Measurement</code> object as a double.
+	 * @return The value of this {@code Measurement} object as a double.
 	 */
 	public final double getValue() {
 		return value;
 	}
 
 	/**
-	 * Returns the error of this <code>Measurement</code> object. The error is
+	 * Returns the error of this {@code Measurement} object. The error is
 	 * always a positive value.
 	 * 
-	 * @return The error of this <code>Measurement</code> as a double.
+	 * @return The error of this {@code Measurement} as a double.
 	 */
 	public final double getError() {
 		return error;
 	}
 
 	/**
-	 * Returns the <code>Unit</code> object of this <code>Measurement</code> object.
+	 * Returns the {@code Unit} object of this {@code Measurement} object.
 	 * 
-	 * @return The <code>Unit</code> object of this <code>Measurement</code> object.
+	 * @return The {@code Unit} object of this {@code Measurement} object.
 	 * 
 	 * @see Unit
 	 */
@@ -139,11 +141,11 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns the time at which this <code>Measurement</code> object was taken.
+	 * Returns the time at which this {@code Measurement} object was taken.
 	 * The time is measured in milliseconds since midnight, January 1, 1970 UTC,
 	 * or zero when not defined.
 	 * 
-	 * @return The time at which this <code>Measurement</code> object was taken or
+	 * @return The time at which this {@code Measurement} object was taken or
 	 *         zero.
 	 */
 	public final long getTime() {
@@ -151,16 +153,16 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the product of this
+	 * Returns a new {@code Measurement} object that is the product of this
 	 * object multiplied by the specified object.
 	 * 
-	 * @param m The <code>Measurement</code> object that will be multiplied with
+	 * @param m The {@code Measurement} object that will be multiplied with
 	 *        this object.
-	 * @return A new <code>Measurement</code> that is the product of this object
+	 * @return A new {@code Measurement} that is the product of this object
 	 *         multiplied by the specified object. The error and unit of the new
 	 *         object are computed. The time of the new object is set to the
 	 *         time of this object.
-	 * @throws ArithmeticException If the <code>Unit</code> objects of this object
+	 * @throws ArithmeticException If the {@code Unit} objects of this object
 	 *         and the specified object cannot be multiplied.
 	 * @see Unit
 	 */
@@ -171,12 +173,12 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the product of this
+	 * Returns a new {@code Measurement} object that is the product of this
 	 * object multiplied by the specified value.
 	 * 
 	 * @param d The value that will be multiplied with this object.
-	 * @param u The <code>Unit</code> of the specified value.
-	 * @return A new <code>Measurement</code> object that is the product of this
+	 * @param u The {@code Unit} of the specified value.
+	 * @return A new {@code Measurement} object that is the product of this
 	 *         object multiplied by the specified value. The error and unit of
 	 *         the new object are computed. The time of the new object is set to
 	 *         the time of this object.
@@ -190,11 +192,11 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the product of this
+	 * Returns a new {@code Measurement} object that is the product of this
 	 * object multiplied by the specified value.
 	 * 
 	 * @param d The value that will be multiplied with this object.
-	 * @return A new <code>Measurement</code> object that is the product of this
+	 * @return A new {@code Measurement} object that is the product of this
 	 *         object multiplied by the specified value. The error of the new
 	 *         object is computed. The unit and time of the new object is set to
 	 *         the unit and time of this object.
@@ -204,16 +206,16 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the quotient of this
+	 * Returns a new {@code Measurement} object that is the quotient of this
 	 * object divided by the specified object.
 	 * 
-	 * @param m The <code>Measurement</code> object that will be the divisor of
+	 * @param m The {@code Measurement} object that will be the divisor of
 	 *        this object.
-	 * @return A new <code>Measurement</code> object that is the quotient of this
+	 * @return A new {@code Measurement} object that is the quotient of this
 	 *         object divided by the specified object. The error and unit of the
 	 *         new object are computed. The time of the new object is set to the
 	 *         time of this object.
-	 * @throws ArithmeticException If the <code>Unit</code> objects of this object
+	 * @throws ArithmeticException If the {@code Unit} objects of this object
 	 *         and the specified object cannot be divided.
 	 * @see Unit
 	 */
@@ -225,16 +227,16 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the quotient of this
+	 * Returns a new {@code Measurement} object that is the quotient of this
 	 * object divided by the specified value.
 	 * 
 	 * @param d The value that will be the divisor of this object.
-	 * @param u The <code>Unit</code> object of the specified value.
-	 * @return A new <code>Measurement</code> that is the quotient of this object
+	 * @param u The {@code Unit} object of the specified value.
+	 * @return A new {@code Measurement} that is the quotient of this object
 	 *         divided by the specified value. The error and unit of the new
 	 *         object are computed. The time of the new object is set to the
 	 *         time of this object.
-	 * @throws ArithmeticException If the <code>Unit</code> objects of this object
+	 * @throws ArithmeticException If the {@code Unit} objects of this object
 	 *         and the specified object cannot be divided.
 	 * @see Unit
 	 */
@@ -244,32 +246,32 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the quotient of this
+	 * Returns a new {@code Measurement} object that is the quotient of this
 	 * object divided by the specified value.
 	 * 
 	 * @param d The value that will be the divisor of this object.
-	 * @return A new <code>Measurement</code> object that is the quotient of this
+	 * @return A new {@code Measurement} object that is the quotient of this
 	 *         object divided by the specified value. The error of the new
 	 *         object is computed. The unit and time of the new object is set to
-	 *         the <code>Unit</code> and time of this object.
+	 *         the {@code Unit} and time of this object.
 	 */
 	public Measurement div(double d) {
 		return new Measurement(value / d, error / Math.abs(d), unit, time);
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the sum of this
+	 * Returns a new {@code Measurement} object that is the sum of this
 	 * object added to the specified object.
 	 * 
 	 * The error and unit of the new object are computed. The time of the new
 	 * object is set to the time of this object.
 	 * 
-	 * @param m The <code>Measurement</code> object that will be added with this
+	 * @param m The {@code Measurement} object that will be added with this
 	 *        object.
-	 * @return A new <code>Measurement</code> object that is the sum of this and
+	 * @return A new {@code Measurement} object that is the sum of this and
 	 *         m.
 	 * @see Unit
-	 * @throws ArithmeticException If the <code>Unit</code> objects of this object
+	 * @throws ArithmeticException If the {@code Unit} objects of this object
 	 *         and the specified object cannot be added.
 	 */
 	public Measurement add(Measurement m) {
@@ -278,16 +280,16 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the sum of this
+	 * Returns a new {@code Measurement} object that is the sum of this
 	 * object added to the specified value.
 	 * 
 	 * @param d The value that will be added with this object.
-	 * @param u The <code>Unit</code> object of the specified value.
-	 * @return A new <code>Measurement</code> object that is the sum of this
+	 * @param u The {@code Unit} object of the specified value.
+	 * @return A new {@code Measurement} object that is the sum of this
 	 *         object added to the specified value. The unit of the new object
 	 *         is computed. The error and time of the new object is set to the
 	 *         error and time of this object.
-	 * @throws ArithmeticException If the <code>Unit</code> objects of this object
+	 * @throws ArithmeticException If the {@code Unit} objects of this object
 	 *         and the specified value cannot be added.
 	 * @see Unit
 	 */
@@ -296,13 +298,13 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the sum of this
+	 * Returns a new {@code Measurement} object that is the sum of this
 	 * object added to the specified value.
 	 * 
 	 * @param d The value that will be added with this object.
-	 * @return A new <code>Measurement</code> object that is the sum of this
+	 * @return A new {@code Measurement} object that is the sum of this
 	 *         object added to the specified value. The error, unit, and time of
-	 *         the new object is set to the error, <code>Unit</code> and time of
+	 *         the new object is set to the error, {@code Unit} and time of
 	 *         this object.
 	 */
 	public Measurement add(double d) {
@@ -310,16 +312,16 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the subtraction of
+	 * Returns a new {@code Measurement} object that is the subtraction of
 	 * the specified object from this object.
 	 * 
-	 * @param m The <code>Measurement</code> object that will be subtracted from
+	 * @param m The {@code Measurement} object that will be subtracted from
 	 *        this object.
-	 * @return A new <code>Measurement</code> object that is the subtraction of
+	 * @return A new {@code Measurement} object that is the subtraction of
 	 *         the specified object from this object. The error and unit of the
 	 *         new object are computed. The time of the new object is set to the
 	 *         time of this object.
-	 * @throws ArithmeticException If the <code>Unit</code> objects of this object
+	 * @throws ArithmeticException If the {@code Unit} objects of this object
 	 *         and the specified object cannot be subtracted.
 	 * @see Unit
 	 */
@@ -329,16 +331,16 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the subtraction of
+	 * Returns a new {@code Measurement} object that is the subtraction of
 	 * the specified value from this object.
 	 * 
 	 * @param d The value that will be subtracted from this object.
-	 * @param u The <code>Unit</code> object of the specified value.
-	 * @return A new <code>Measurement</code> object that is the subtraction of
+	 * @param u The {@code Unit} object of the specified value.
+	 * @return A new {@code Measurement} object that is the subtraction of
 	 *         the specified value from this object. The unit of the new object
 	 *         is computed. The error and time of the new object is set to the
 	 *         error and time of this object.
-	 * @throws ArithmeticException If the <code>Unit</code> objects of this object
+	 * @throws ArithmeticException If the {@code Unit} objects of this object
 	 *         and the specified object cannot be subtracted.
 	 * @see Unit
 	 */
@@ -347,13 +349,13 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a new <code>Measurement</code> object that is the subtraction of
+	 * Returns a new {@code Measurement} object that is the subtraction of
 	 * the specified value from this object.
 	 * 
 	 * @param d The value that will be subtracted from this object.
-	 * @return A new <code>Measurement</code> object that is the subtraction of
+	 * @return A new {@code Measurement} object that is the subtraction of
 	 *         the specified value from this object. The error, unit and time of
-	 *         the new object is set to the error, <code>Unit</code> object and
+	 *         the new object is set to the error, {@code Unit} object and
 	 *         time of this object.
 	 */
 	public Measurement sub(double d) {
@@ -361,10 +363,10 @@ public class Measurement implements Comparable {
 	}
 
 	/**
-	 * Returns a <code>String</code> object representing this <code>Measurement</code>
+	 * Returns a {@code String} object representing this {@code Measurement}
 	 * object.
 	 * 
-	 * @return a <code>String</code> object representing this <code>Measurement</code>
+	 * @return a {@code String} object representing this {@code Measurement}
 	 *         object.
 	 */
 	public String toString() {
@@ -394,23 +396,23 @@ public class Measurement implements Comparable {
 	 * 
 	 * <p>
 	 * Note: This class has a natural ordering that is inconsistent with equals.
-	 * For this method, another <code>Measurement</code> object is considered
-	 * equal if there is some <code>x</code> such that
+	 * For this method, another {@code Measurement} object is considered
+	 * equal if there is some {@code x} such that
 	 * 
 	 * <pre>
 	 * getValue() - getError() <= x <= getValue() + getError()
 	 * </pre>
 	 * 
-	 * for both <code>Measurement</code> objects being compared.
+	 * for both {@code Measurement} objects being compared.
 	 * 
 	 * @param obj The object to be compared.
 	 * @return A negative integer, zero, or a positive integer if this object is
 	 *         less than, equal to, or greater than the specified object.
 	 * 
 	 * @throws ClassCastException If the specified object is not of type
-	 *         <code>Measurement</code>.
+	 *         {@code Measurement}.
 	 * @throws ArithmeticException If the unit of the specified
-	 *         <code>Measurement</code> object is not equal to the <code>Unit</code>
+	 *         {@code Measurement} object is not equal to the {@code Unit}
 	 *         object of this object.
 	 */
 	public int compareTo(Object obj) {
@@ -458,16 +460,16 @@ public class Measurement implements Comparable {
 
 	/**
 	 * Returns whether the specified object is equal to this object. Two
-	 * <code>Measurement</code> objects are equal if they have same value, error
-	 * and <code>Unit</code>.
+	 * {@code Measurement} objects are equal if they have same value, error
+	 * and {@code Unit}.
 	 * 
 	 * <p>
 	 * Note: This class has a natural ordering that is inconsistent with equals.
 	 * See {@link #compareTo}.
 	 * 
 	 * @param obj The object to compare with this object.
-	 * @return <code>true</code> if this object is equal to the specified object;
-	 *         <code>false</code> otherwise.
+	 * @return {@code true} if this object is equal to the specified object;
+	 *         {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (this == obj) {
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java
index 7fcc469..1c516a9 100644
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/State.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,10 +23,10 @@ package org.osgi.util.measurement;
  * milliseconds since midnight, January 1, 1970 UTC.
  * 
  * <p>
- * A <code>State</code> object is immutable so that it may be easily shared.
+ * A {@code State} object is immutable so that it may be easily shared.
  * 
  * @Immutable
- * @version $Revision: 5715 $
+ * @version $Id: ff96b95ce2466f6b5a90daeb07560f6fb8a930cb $
  */
 public class State {
 	private final int		value;
@@ -34,7 +34,7 @@ public class State {
 	private final String	name;
 
 	/**
-	 * Create a new <code>State</code> object.
+	 * Create a new {@code State} object.
 	 * 
 	 * @param value The value of the state.
 	 * @param name The name of the state.
@@ -48,7 +48,7 @@ public class State {
 	}
 
 	/**
-	 * Create a new <code>State</code> object with a time of 0.
+	 * Create a new {@code State} object with a time of 0.
 	 * 
 	 * @param value The value of the state.
 	 * @param name The name of the state.
@@ -58,18 +58,18 @@ public class State {
 	}
 
 	/**
-	 * Returns the value of this <code>State</code>.
+	 * Returns the value of this {@code State}.
 	 * 
-	 * @return The value of this <code>State</code> object.
+	 * @return The value of this {@code State} object.
 	 */
 	public final int getValue() {
 		return value;
 	}
 
 	/**
-	 * Returns the time with which this <code>State</code> was created.
+	 * Returns the time with which this {@code State} was created.
 	 * 
-	 * @return The time with which this <code>State</code> was created. The time
+	 * @return The time with which this {@code State} was created. The time
 	 *         is measured in milliseconds since midnight, January 1, 1970 UTC.
 	 */
 	public final long getTime() {
@@ -77,18 +77,18 @@ public class State {
 	}
 
 	/**
-	 * Returns the name of this <code>State</code>.
+	 * Returns the name of this {@code State}.
 	 * 
-	 * @return The name of this <code>State</code> object.
+	 * @return The name of this {@code State} object.
 	 */
 	public final String getName() {
 		return name;
 	}
 
 	/**
-	 * Returns a <code>String</code> object representing this object.
+	 * Returns a {@code String} object representing this object.
 	 * 
-	 * @return a <code>String</code> object representing this object.
+	 * @return a {@code String} object representing this object.
 	 */
 	public String toString() {
 		StringBuffer sb = new StringBuffer();
@@ -98,7 +98,7 @@ public class State {
 			sb.append(name);
 			sb.append("\"");
 		}
-		return (sb.toString());
+		return sb.toString();
 	}
 
 	/**
@@ -116,11 +116,11 @@ public class State {
 
 	/**
 	 * Return whether the specified object is equal to this object. Two
-	 * <code>State</code> objects are equal if they have same value and name.
+	 * {@code State} objects are equal if they have same value and name.
 	 * 
 	 * @param obj The object to compare with this object.
-	 * @return <code>true</code> if this object is equal to the specified object;
-	 *         <code>false</code> otherwise.
+	 * @return {@code true} if this object is equal to the specified object;
+	 *         {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (this == obj) {
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java
index 5bea0c1..66950f3 100644
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/Unit.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,10 +26,10 @@ import java.util.Hashtable;
  * <p>
  * This class only support exponents for the base SI units in the range -64 to
  * +63. Any operation which produces an exponent outside of this range will
- * result in a <code>Unit</code> object with undefined exponents.
+ * result in a {@code Unit} object with undefined exponents.
  * 
  * @Immutable
- * @version $Revision: 5715 $
+ * @version $Id: ce5744bb0043e38f84c77ffea478e88b0e344bd9 $
  */
 /*
  * This local class maintains the information about units. It can calculate new
@@ -285,10 +285,10 @@ public class Unit {
 	private final long			type;
 
 	/**
-	 * Creates a new <code>Unit</code> instance.
+	 * Creates a new {@code Unit} instance.
 	 * 
-	 * @param name the name of the <code>Unit</code>
-	 * @param type the type of the <code>Unit</code>
+	 * @param name the name of the {@code Unit}
+	 * @param type the type of the {@code Unit}
 	 */
 	private Unit(String name, long type) {
 		if (name == null) {
@@ -303,28 +303,28 @@ public class Unit {
 	 * Create a type field from the base SI unit exponent values.
 	 *  
 	 */
-	private static long createType(int x, int rad, int cd, int mol, int A,
-			int K, int kg, int s, int m) {
-		return (((ZERO + m) & MASK) << m_SHIFT)
-				| (((ZERO + s) & MASK) << s_SHIFT)
-				| (((ZERO + kg) & MASK) << kg_SHIFT)
-				| (((ZERO + K) & MASK) << K_SHIFT)
-				| (((ZERO + A) & MASK) << A_SHIFT)
-				| (((ZERO + mol) & MASK) << mol_SHIFT)
-				| (((ZERO + cd) & MASK) << cd_SHIFT)
-				| (((ZERO + rad) & MASK) << rad_SHIFT)
-				| (((long) x) << x_SHIFT);
+	private static long createType(int _x, int _rad, int _cd, int _mol, int _A,
+			int _K, int _kg, int _s, int _m) {
+		return (((ZERO + _m) & MASK) << m_SHIFT)
+				| (((ZERO + _s) & MASK) << s_SHIFT)
+				| (((ZERO + _kg) & MASK) << kg_SHIFT)
+				| (((ZERO + _K) & MASK) << K_SHIFT)
+				| (((ZERO + _A) & MASK) << A_SHIFT)
+				| (((ZERO + _mol) & MASK) << mol_SHIFT)
+				| (((ZERO + _cd) & MASK) << cd_SHIFT)
+				| (((ZERO + _rad) & MASK) << rad_SHIFT)
+				| (((long) _x) << x_SHIFT);
 	}
 
 	/**
-	 * Checks whether this <code>Unit</code> object is equal to the specified
-	 * <code>Unit</code> object. The <code>Unit</code> objects are considered equal
+	 * Checks whether this {@code Unit} object is equal to the specified
+	 * {@code Unit} object. The {@code Unit} objects are considered equal
 	 * if their exponents are equal.
 	 * 
-	 * @param obj the <code>Unit</code> object that should be checked for equality
+	 * @param obj the {@code Unit} object that should be checked for equality
 	 * 
-	 * @return true if the specified <code>Unit</code> object is equal to this
-	 *         <code>Unit</code> object.
+	 * @return true if the specified {@code Unit} object is equal to this
+	 *         {@code Unit} object.
 	 */
 	public boolean equals(Object obj) {
 		if (this == obj) {
@@ -346,16 +346,16 @@ public class Unit {
 	}
 
 	/**
-	 * Returns a new <code>Unit</code> that is the multiplication of this
-	 * <code>Unit</code> and the <code>Unit</code> specified
+	 * Returns a new {@code Unit} that is the multiplication of this
+	 * {@code Unit} and the {@code Unit} specified
 	 * 
-	 * @param that the <code>Unit</code> that will be multiplied with this
-	 *        <code>Unit</code>
+	 * @param that the {@code Unit} that will be multiplied with this
+	 *        {@code Unit}
 	 * 
-	 * @return a new <code>Unit</code> that is the multiplication of this
-	 *         <code>Unit</code> and the <code>Unit</code> specified
+	 * @return a new {@code Unit} that is the multiplication of this
+	 *         {@code Unit} and the {@code Unit} specified
 	 * 
-	 * @throws RuntimeException if both <code>Unit</code> s are special
+	 * @throws RuntimeException if both {@code Unit} s are special
 	 * 
 	 * @see Unit#isSpecial
 	 */
@@ -368,15 +368,15 @@ public class Unit {
 	}
 
 	/**
-	 * Returns a new <code>Unit</code> that is the division of this <code>Unit</code>
-	 * and the <code>Unit</code> specified
+	 * Returns a new {@code Unit} that is the division of this {@code Unit}
+	 * and the {@code Unit} specified
 	 * 
-	 * @param that the <code>Unit</code> that this <code>Unit</code> will be divided
+	 * @param that the {@code Unit} that this {@code Unit} will be divided
 	 *        with
-	 * @return a new <code>Unit</code> that is the division of this <code>Unit</code>
-	 *         and the <code>Unit</code> specified
+	 * @return a new {@code Unit} that is the division of this {@code Unit}
+	 *         and the {@code Unit} specified
 	 * 
-	 * @throws RuntimeException if both <code>Unit</code> s are special
+	 * @throws RuntimeException if both {@code Unit} s are special
 	 * 
 	 * @see Unit#isSpecial
 	 */
@@ -392,16 +392,16 @@ public class Unit {
 	}
 
 	/**
-	 * Returns a new <code>Unit</code> that is the addition of this <code>Unit</code>
-	 * and the <code>Unit</code> specified.
+	 * Returns a new {@code Unit} that is the addition of this {@code Unit}
+	 * and the {@code Unit} specified.
 	 * 
-	 * @param that the <code>Unit</code> that should be added to this
-	 *        <code>Unit</code>
+	 * @param that the {@code Unit} that should be added to this
+	 *        {@code Unit}
 	 * 
-	 * @return a new <code>Unit</code> that is the addition of this <code>Unit</code>
-	 *         and the <code>Unit</code> specified.
+	 * @return a new {@code Unit} that is the addition of this {@code Unit}
+	 *         and the {@code Unit} specified.
 	 * 
-	 * @throws RuntimeException if the two <code>Unit</code> s are not the same
+	 * @throws RuntimeException if the two {@code Unit} s are not the same
 	 */
 	Unit add(Unit that) {
 		if (!this.equals(that)) {
@@ -411,16 +411,16 @@ public class Unit {
 	}
 
 	/**
-	 * Returns a new <code>Unit</code> that is the subtraction between this
-	 * <code>Unit</code> and the <code>Unit</code> specified.
+	 * Returns a new {@code Unit} that is the subtraction between this
+	 * {@code Unit} and the {@code Unit} specified.
 	 * 
-	 * @param that the <code>Unit</code> that will be subtracted from this
-	 *        <code>Unit</code>
-	 * @return a new <code>Unit</code> that is the subtraction between this
-	 *         <code>Unit</code> and the <code>Unit</code> specified.
+	 * @param that the {@code Unit} that will be subtracted from this
+	 *        {@code Unit}
+	 * @return a new {@code Unit} that is the subtraction between this
+	 *         {@code Unit} and the {@code Unit} specified.
 	 * 
-	 * @throws RuntimeException if the <code>Unit</code> specified is not the same
-	 *         as this <code>Unit</code>
+	 * @throws RuntimeException if the {@code Unit} specified is not the same
+	 *         as this {@code Unit}
 	 */
 	Unit sub(Unit that) {
 		if (!this.equals(that)) {
@@ -431,13 +431,13 @@ public class Unit {
 	}
 
 	/**
-	 * Finds a <code>Unit</code> based on a type. If the <code>Unit</code> is not
+	 * Finds a {@code Unit} based on a type. If the {@code Unit} is not
 	 * found, it will be created and added to the list of all units under a null
 	 * name.
 	 * 
-	 * @param type the type of the <code>Unit</code> to find
+	 * @param type the type of the {@code Unit} to find
 	 * 
-	 * @return the <code>Unit</code>
+	 * @return the {@code Unit}
 	 */
 	static synchronized Unit find(long type) {
 		if (base == null) {
@@ -457,33 +457,33 @@ public class Unit {
 	}
 
 	/**
-	 * Returns a <code>String</code> object representing the <code>Unit</code>
+	 * Returns a {@code String} object representing the {@code Unit}
 	 * 
-	 * @return A <code>String</code> object representing the <code>Unit</code>
+	 * @return A {@code String} object representing the {@code Unit}
 	 */
 	public String toString() {
 		return name;
 	}
 
 	private static String computeName(long type) {
-		int m = (int) (((type >> m_SHIFT) & MASK) - ZERO);
-		int s = (int) (((type >> s_SHIFT) & MASK) - ZERO);
-		int kg = (int) (((type >> kg_SHIFT) & MASK) - ZERO);
-		int K = (int) (((type >> K_SHIFT) & MASK) - ZERO);
-		int A = (int) (((type >> A_SHIFT) & MASK) - ZERO);
-		int mol = (int) (((type >> mol_SHIFT) & MASK) - ZERO);
-		int cd = (int) (((type >> cd_SHIFT) & MASK) - ZERO);
-		int rad = (int) (((type >> rad_SHIFT) & MASK) - ZERO);
+		int _m = (int) (((type >> m_SHIFT) & MASK) - ZERO);
+		int _s = (int) (((type >> s_SHIFT) & MASK) - ZERO);
+		int _kg = (int) (((type >> kg_SHIFT) & MASK) - ZERO);
+		int _K = (int) (((type >> K_SHIFT) & MASK) - ZERO);
+		int _A = (int) (((type >> A_SHIFT) & MASK) - ZERO);
+		int _mol = (int) (((type >> mol_SHIFT) & MASK) - ZERO);
+		int _cd = (int) (((type >> cd_SHIFT) & MASK) - ZERO);
+		int _rad = (int) (((type >> rad_SHIFT) & MASK) - ZERO);
 		StringBuffer numerator = new StringBuffer();
 		StringBuffer denominator = new StringBuffer();
-		addSIname(m, "m", numerator, denominator);
-		addSIname(s, "s", numerator, denominator);
-		addSIname(kg, "kg", numerator, denominator);
-		addSIname(K, "K", numerator, denominator);
-		addSIname(A, "A", numerator, denominator);
-		addSIname(mol, "mol", numerator, denominator);
-		addSIname(cd, "cd", numerator, denominator);
-		addSIname(rad, "rad", numerator, denominator);
+		addSIname(_m, "m", numerator, denominator);
+		addSIname(_s, "s", numerator, denominator);
+		addSIname(_kg, "kg", numerator, denominator);
+		addSIname(_K, "K", numerator, denominator);
+		addSIname(_A, "A", numerator, denominator);
+		addSIname(_mol, "mol", numerator, denominator);
+		addSIname(_cd, "cd", numerator, denominator);
+		addSIname(_rad, "rad", numerator, denominator);
 		if (denominator.length() > 0) {
 			if (numerator.length() == 0) {
 				numerator.append("1");
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/package-info.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/package-info.java
new file mode 100644
index 0000000..0193246
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/package-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Measurement Package Version 1.0.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.util.measurement; version="[1.0,2.0)"}
+ * 
+ * @version $Id: 55a13a30edfa606fcb43f3ec94b10ba80ec58780 $
+ */
+
+package org.osgi.util.measurement;
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/package.html b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/package.html
deleted file mode 100644
index 2eb3a8c..0000000
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/measurement/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Measurement Package Version 1.0.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.util.measurement; version="[1.0,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/Position.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/Position.java
index 5fe3e0f..78a19ee 100644
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/Position.java
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/Position.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@ import org.osgi.util.measurement.Unit;
  * Position represents a geographic location, based on the WGS84 System (World
  * Geodetic System 1984).
  * <p>
- * The <code>org.osgi.util.measurement.Measurement</code> class is used to
+ * The {@code org.osgi.util.measurement.Measurement} class is used to
  * represent the values that make up a position.
  * <p>
  * <p>
@@ -32,10 +32,10 @@ import org.osgi.util.measurement.Unit;
  * Position does not override the implementation of either equals() or
  * hashCode() because it is not clear how missing values should be handled. It
  * is up to the user of a position to determine how best to compare two position
- * objects. A <code>Position</code> object is immutable.
+ * objects. A {@code Position} object is immutable.
  * 
  * @Immutable
- * @version $Revision: 6860 $
+ * @version $Id: 85f546ae0d82caa22d370a8dff0aeea2a595efa5 $
  */
 public class Position {
 	private final Measurement	altitude;
@@ -45,17 +45,17 @@ public class Position {
 	private final Measurement	track;
 
 	/**
-	 * Constructs a <code>Position</code> object with the given values.
+	 * Constructs a {@code Position} object with the given values.
 	 * 
-	 * @param lat a <code>Measurement</code> object specifying the latitude in
+	 * @param lat a {@code Measurement} object specifying the latitude in
 	 *        radians, or null
-	 * @param lon a <code>Measurement</code> object specifying the longitude in
+	 * @param lon a {@code Measurement} object specifying the longitude in
 	 *        radians, or null
-	 * @param alt a <code>Measurement</code> object specifying the altitude in
+	 * @param alt a {@code Measurement} object specifying the altitude in
 	 *        meters, or null
-	 * @param speed a <code>Measurement</code> object specifying the speed in
+	 * @param speed a {@code Measurement} object specifying the speed in
 	 *        meters per second, or null
-	 * @param track a <code>Measurement</code> object specifying the track in
+	 * @param track a {@code Measurement} object specifying the track in
 	 *        radians, or null
 	 */
 	public Position(Measurement lat, Measurement lon, Measurement alt,
@@ -150,8 +150,8 @@ public class Position {
 	/**
 	 * Returns the altitude of this position in meters.
 	 * 
-	 * @return a <code>Measurement</code> object in <code>Unit.m</code> representing
-	 *         the altitude in meters above the ellipsoid <code>null</code> if the
+	 * @return a {@code Measurement} object in {@code Unit.m} representing
+	 *         the altitude in meters above the ellipsoid {@code null} if the
 	 *         altitude is not known.
 	 */
 	public Measurement getAltitude() {
@@ -161,8 +161,8 @@ public class Position {
 	/**
 	 * Returns the longitude of this position in radians.
 	 * 
-	 * @return a <code>Measurement</code> object in <code>Unit.rad</code>
-	 *         representing the longitude, or <code>null</code> if the longitude
+	 * @return a {@code Measurement} object in {@code Unit.rad}
+	 *         representing the longitude, or {@code null} if the longitude
 	 *         is not known.
 	 */
 	public Measurement getLongitude() {
@@ -172,8 +172,8 @@ public class Position {
 	/**
 	 * Returns the latitude of this position in radians.
 	 * 
-	 * @return a <code>Measurement</code> object in <code>Unit.rad</code>
-	 *         representing the latitude, or <code>null</code> if the latitude is
+	 * @return a {@code Measurement} object in {@code Unit.rad}
+	 *         representing the latitude, or {@code null} if the latitude is
 	 *         not known..
 	 */
 	public Measurement getLatitude() {
@@ -183,8 +183,8 @@ public class Position {
 	/**
 	 * Returns the ground speed of this position in meters per second.
 	 * 
-	 * @return a <code>Measurement</code> object in <code>Unit.m_s</code>
-	 *         representing the speed, or <code>null</code> if the speed is not
+	 * @return a {@code Measurement} object in {@code Unit.m_s}
+	 *         representing the speed, or {@code null} if the speed is not
 	 *         known..
 	 */
 	public Measurement getSpeed() {
@@ -196,8 +196,8 @@ public class Position {
 	 * track is the extrapolation of previous previously measured positions to a
 	 * future position.
 	 * 
-	 * @return a <code>Measurement</code> object in <code>Unit.rad</code>
-	 *         representing the track, or <code>null</code> if the track is not
+	 * @return a {@code Measurement} object in {@code Unit.rad}
+	 *         representing the track, or {@code null} if the track is not
 	 *         known..
 	 */
 	public Measurement getTrack() {
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/package-info.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/package-info.java
new file mode 100644
index 0000000..457155e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/package-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Position Package Version 1.0.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.util.position; version="[1.0,2.0)"}
+ * 
+ * @version $Id: 41629cc3bc0ef1e0ee324a85c01fa537e6bd2a87 $
+ */
+
+package org.osgi.util.position;
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/package.html b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/package.html
deleted file mode 100644
index d0d745f..0000000
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/position/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>Position Package Version 1.0.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.util.position; version="[1.0,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java
index 963c092..854dfd8 100644
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/XMLParserActivator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -51,8 +51,8 @@ import org.osgi.framework.ServiceRegistration;
  * <p>
  * The services that this bundle activator enables a bundle to provide are:
  * <ul>
- * <li><code>javax.xml.parsers.SAXParserFactory</code>({@link #SAXFACTORYNAME})
- * <li><code>javax.xml.parsers.DocumentBuilderFactory</code>(
+ * <li>{@code javax.xml.parsers.SAXParserFactory}({@link #SAXFACTORYNAME})
+ * <li>{@code javax.xml.parsers.DocumentBuilderFactory}(
  * {@link #DOMFACTORYNAME})
  * </ul>
  * 
@@ -63,47 +63,47 @@ import org.osgi.framework.ServiceRegistration;
  * An XMLParserActivator assumes that it can find the class file names of the
  * factory classes in the following files:
  * <ul>
- * <li><code>/META-INF/services/javax.xml.parsers.SAXParserFactory</code> is a
+ * <li>{@code /META-INF/services/javax.xml.parsers.SAXParserFactory} is a
  * file contained in a jar available to the runtime which contains the
  * implementation class name(s) of the SAXParserFactory.
- * <li><code>/META-INF/services/javax.xml.parsers.DocumentBuilderFactory</code>
+ * <li>{@code /META-INF/services/javax.xml.parsers.DocumentBuilderFactory}
  * is a file contained in a jar available to the runtime which contains the
- * implementation class name(s) of the <code>DocumentBuilderFactory</code>
+ * implementation class name(s) of the {@code DocumentBuilderFactory}
  * </ul>
  * <p>
- * If either of the files does not exist, <code>XMLParserActivator</code>
+ * If either of the files does not exist, {@code XMLParserActivator}
  * assumes that the parser does not support that parser type.
  * 
  * <p>
- * <code>XMLParserActivator</code> attempts to instantiate both the
- * <code>SAXParserFactory</code> and the <code>DocumentBuilderFactory</code>. It
+ * {@code XMLParserActivator} attempts to instantiate both the
+ * {@code SAXParserFactory} and the {@code DocumentBuilderFactory}. It
  * registers each factory with the framework along with service properties:
  * <ul>
  * <li>{@link #PARSER_VALIDATING}- indicates if this factory supports validating
- * parsers. It's value is a <code>Boolean</code>.
+ * parsers. It's value is a {@code Boolean}.
  * <li>{@link #PARSER_NAMESPACEAWARE}- indicates if this factory supports
- * namespace aware parsers It's value is a <code>Boolean</code>.
+ * namespace aware parsers It's value is a {@code Boolean}.
  * </ul>
  * <p>
  * Individual parser implementations may have additional features, properties,
  * or attributes which could be used to select a parser with a filter. These can
  * be added by extending this class and overriding the
- * <code>setSAXProperties</code> and <code>setDOMProperties</code> methods.
+ * {@code setSAXProperties} and {@code setDOMProperties} methods.
  * 
  * @ThreadSafe
- * @version $Revision: 5900 $
+ * @version $Id: 08fe20ecd0552bb592878bdda77e785cc83a7ca3 $
  */
 public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	/** Context of this bundle */
 	private volatile BundleContext	context;
 	/**
 	 * Filename containing the SAX Parser Factory Class name. Also used as the
-	 * basis for the <code>SERVICE_PID<code> registration property.
+	 * basis for the {@code SERVICE_PID} registration property.
 	 */
 	public static final String		SAXFACTORYNAME			= "javax.xml.parsers.SAXParserFactory";
 	/**
 	 * Filename containing the DOM Parser Factory Class name. Also used as the
-	 * basis for the <code>SERVICE_PID</code> registration property.
+	 * basis for the {@code SERVICE_PID} registration property.
 	 */
 	public static final String		DOMFACTORYNAME			= "javax.xml.parsers.DocumentBuilderFactory";
 	/** Path to the factory class name files */
@@ -120,12 +120,12 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	private static final String		DOMFACTORYDESCRIPTION	= "A JAXP Compliant DOM Parser";
 	/**
 	 * Service property specifying if factory is configured to support
-	 * validating parsers. The value is of type <code>Boolean</code>.
+	 * validating parsers. The value is of type {@code Boolean}.
 	 */
 	public static final String		PARSER_VALIDATING		= "parser.validating";
 	/**
 	 * Service property specifying if factory is configured to support namespace
-	 * aware parsers. The value is of type <code>Boolean</code>.
+	 * aware parsers. The value is of type {@code Boolean}.
 	 */
 	public static final String		PARSER_NAMESPACEAWARE	= "parser.namespaceAware";
 	/**
@@ -224,10 +224,10 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	/**
 	 * Register SAX Parser Factory Services with the framework.
 	 * 
-	 * @param parserFactoryClassNames - a <code>List</code> of
-	 *        <code>String</code> objects containing the names of the parser
+	 * @param parserFactoryClassNames - a {@code List} of
+	 *        {@code String} objects containing the names of the parser
 	 *        Factory Classes
-	 * @throws FactoryConfigurationError if thrown from <code>getFactory</code>
+	 * @throws FactoryConfigurationError if thrown from {@code getFactory}
 	 */
 	private void registerSAXParsers(List parserFactoryClassNames)
 			throws FactoryConfigurationError {
@@ -258,16 +258,16 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	 * Set the SAX Parser Service Properties. By default, the following
 	 * properties are set:
 	 * <ul>
-	 * <li><code>SERVICE_DESCRIPTION</code>
-	 * <li><code>SERVICE_PID</code>
-	 * <li><code>PARSER_VALIDATING</code>- instantiates a parser and queries
+	 * <li>{@code SERVICE_DESCRIPTION}
+	 * <li>{@code SERVICE_PID}
+	 * <li>{@code PARSER_VALIDATING}- instantiates a parser and queries
 	 * it to find out whether it is validating or not
-	 * <li><code>PARSER_NAMESPACEAWARE</code>- instantiates a parser and
+	 * <li>{@code PARSER_NAMESPACEAWARE}- instantiates a parser and
 	 * queries it to find out whether it is namespace aware or not
 	 * <ul>
 	 * 
-	 * @param factory The <code>SAXParserFactory</code> object
-	 * @param props <code>Hashtable</code> of service properties.
+	 * @param factory The {@code SAXParserFactory} object
+	 * @param props {@code Hashtable} of service properties.
 	 */
 	private void setDefaultSAXProperties(SAXParserFactory factory,
 			Hashtable props, int index) {
@@ -329,10 +329,10 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	/**
 	 * Register DOM Parser Factory Services with the framework.
 	 * 
-	 * @param parserFactoryClassNames - a <code>List</code> of
-	 *        <code>String</code> objects containing the names of the parser
+	 * @param parserFactoryClassNames - a {@code List} of
+	 *        {@code String} objects containing the names of the parser
 	 *        Factory Classes
-	 * @throws FactoryConfigurationError if thrown from <code>getFactory</code>
+	 * @throws FactoryConfigurationError if thrown from {@code getFactory}
 	 */
 	private void registerDOMParsers(List parserFactoryClassNames)
 			throws FactoryConfigurationError {
@@ -363,14 +363,14 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	 * 
 	 * By default, the following properties are set:
 	 * <ul>
-	 * <li><code>SERVICE_DESCRIPTION</code>
-	 * <li><code>SERVICE_PID</code>
-	 * <li><code>PARSER_VALIDATING</code>
-	 * <li><code>PARSER_NAMESPACEAWARE</code>
+	 * <li>{@code SERVICE_DESCRIPTION}
+	 * <li>{@code SERVICE_PID}
+	 * <li>{@code PARSER_VALIDATING}
+	 * <li>{@code PARSER_NAMESPACEAWARE}
 	 * <ul>
 	 * 
-	 * @param factory The <code>DocumentBuilderFactory</code> object
-	 * @param props <code>Hashtable</code> of service properties.
+	 * @param factory The {@code DocumentBuilderFactory} object
+	 * @param props {@code Hashtable} of service properties.
 	 */
 	private void setDefaultDOMProperties(DocumentBuilderFactory factory,
 			Hashtable props, int index) {
@@ -432,7 +432,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	/**
 	 * Given a parser factory class name, instantiate that class.
 	 * 
-	 * @param parserFactoryClassName A <code>String</code> object containing
+	 * @param parserFactoryClassName A {@code String} object containing
 	 *        the name of the parser factory class
 	 * @return a parserFactoryClass Object
 	 * @pre parserFactoryClassName!=null
@@ -467,7 +467,7 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	 * returned XML Parser Factory object.
 	 * 
 	 * @param bundle The bundle using the service.
-	 * @param registration The <code>ServiceRegistration</code> object for the
+	 * @param registration The {@code ServiceRegistration} object for the
 	 *        service.
 	 * @return A new, configured XML Parser Factory object or null if a
 	 *         configuration error was encountered
@@ -502,10 +502,10 @@ public class XMLParserActivator implements BundleActivator, ServiceFactory {
 	 * Releases a XML Parser Factory object.
 	 * 
 	 * @param bundle The bundle releasing the service.
-	 * @param registration The <code>ServiceRegistration</code> object for the
+	 * @param registration The {@code ServiceRegistration} object for the
 	 *        service.
 	 * @param service The XML Parser Factory object returned by a previous call
-	 *        to the <code>getService</code> method.
+	 *        to the {@code getService} method.
 	 */
 	public void ungetService(Bundle bundle, ServiceRegistration registration,
 			Object service) {
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/package-info.java b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/package-info.java
new file mode 100644
index 0000000..881051a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/package-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * XML Parser Package Version 1.0.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.util.xml; version="[1.0,2.0)"}
+ * 
+ * @version $Id: 2bdf5e50ab3cb446ae0e60f6004c77914fb2b9e4 $
+ */
+
+package org.osgi.util.xml;
diff --git a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/package.html b/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/package.html
deleted file mode 100644
index e153322..0000000
--- a/eclipse/plugins/org.eclipse.osgi.util/src/org/osgi/util/xml/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Revision: 6204 $ -->
-<BODY>
-<p>XML Parser Package Version 1.0.
-<p>Bundles wishing to use this package must list the package
-in the Import-Package header of the bundle's manifest.
-For example:
-<pre>
-Import-Package: org.osgi.util.xml; version="[1.0,2.0)"
-</pre>
-</BODY>
diff --git a/eclipse/plugins/org.eclipse.osgi/.classpath b/eclipse/plugins/org.eclipse.osgi/.classpath
index 0629761..5e737b4 100644
--- a/eclipse/plugins/org.eclipse.osgi/.classpath
+++ b/eclipse/plugins/org.eclipse.osgi/.classpath
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="lib" path="osgi/exceptions.jar"/>
-	<classpathentry kind="lib" path="osgi/xmlParserAPIs.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSGi%Minimum-1.2"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="osgi/src"/>
 	<classpathentry kind="src" path="supplement/src"/>
diff --git a/eclipse/plugins/org.eclipse.osgi/.classpath.osgisource b/eclipse/plugins/org.eclipse.osgi/.classpath.osgisource
new file mode 100644
index 0000000..f274aee
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/.classpath.osgisource
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry combineaccessrules="false" exported="true" kind="src" path="/org.osgi.framework"/>
+	<classpathentry combineaccessrules="false" exported="true" kind="src" path="/org.osgi.util.tracker"/>
+	<classpathentry combineaccessrules="false" exported="true" kind="src" path="/org.osgi.service.composite"/>
+	<classpathentry combineaccessrules="false" exported="true" kind="src" path="/org.osgi.service.packageadmin"/>
+	<classpathentry combineaccessrules="false" exported="true" kind="src" path="/org.osgi.service.startlevel"/>
+	<classpathentry kind="src" path="osgi/src"/>
+	<classpathentry kind="src" path="supplement/src"/>
+	<classpathentry kind="src" path="core/adaptor"/>
+	<classpathentry kind="src" path="core/framework"/>
+	<classpathentry kind="src" path="core/composite"/>
+	<classpathentry kind="src" path="resolver/src"/>
+	<classpathentry kind="src" path="defaultAdaptor/src"/>
+	<classpathentry kind="src" path="eclipseAdaptor/src"/>
+	<classpathentry kind="src" path="security/src"/>
+	<classpathentry kind="src" path="console/src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/eclipse/plugins/org.eclipse.osgi/.settings/.api_filters b/eclipse/plugins/org.eclipse.osgi/.settings/.api_filters
index a6308bc..29273de 100644
--- a/eclipse/plugins/org.eclipse.osgi/.settings/.api_filters
+++ b/eclipse/plugins/org.eclipse.osgi/.settings/.api_filters
@@ -1,682 +1,1247 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <component id="org.eclipse.osgi" version="2">
-<resource path="osgi/src/org/osgi/framework/Bundle.java" type="org.osgi.framework.Bundle">
-<filter id="403767336">
+<resource path="core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerFactoryProxyFor15.java" type="org.eclipse.osgi.framework.internal.protocol.URLStreamHandlerFactoryProxyFor15">
+<filter comment="Code is protected when running on a limited environment" id="646971428">
 <message_arguments>
-<message_argument value="org.osgi.framework.Bundle"/>
-<message_argument value="SIGNERS_TRUSTED"/>
+<message_argument value="org.eclipse.osgi.framework.internal.protocol.URLStreamHandlerFactoryProxyFor15.openConnection(URL, Proxy)"/>
+<message_argument value="Proxy"/>
+<message_argument value="OSGi/Minimum-1.2"/>
 </message_arguments>
 </filter>
-<filter id="403767336">
+</resource>
+<resource path="core/framework/org/eclipse/osgi/launch/Equinox.java" type="org.eclipse.osgi.launch.Equinox">
+<filter id="1143996420">
 <message_arguments>
-<message_argument value="org.osgi.framework.Bundle"/>
-<message_argument value="SIGNERS_ALL"/>
+<message_argument value="adapt(Class<A>)"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+<filter id="1143996420">
 <message_arguments>
-<message_argument value="org.osgi.framework.Bundle"/>
-<message_argument value="getVersion()"/>
+<message_argument value="compareTo(Bundle)"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+<filter id="1143996420">
 <message_arguments>
-<message_argument value="org.osgi.framework.Bundle"/>
-<message_argument value="getSignerCertificates(int)"/>
+<message_argument value="getDataFile(String)"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java" type="org.eclipse.core.runtime.internal.adaptor.EclipseAdaptorHook$ParsingService">
+<filter comment="Code is protected when running on a limited environment" id="647004193">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="getSignerCertificates(int)"/>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.EclipseAdaptorHook.ParsingService.createService()"/>
+<message_argument value="DocumentBuilderFactory"/>
+<message_argument value="newInstance()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+<filter comment="Code is protected when running on a limited environment" id="647004193">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="SIGNERS_TRUSTED"/>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.EclipseAdaptorHook.ParsingService.createService()"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="newInstance()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginParser.java" type="org.eclipse.core.runtime.internal.adaptor.PluginParser">
+<filter comment="Code is protected when running on a limited environment" id="579862564">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="SIGNERS_ALL"/>
+<message_argument value="PluginParser"/>
+<message_argument value="DefaultHandler"/>
+<message_argument value="OSGi/Minimum-1.2"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+<filter comment="Code is protected when running on a limited environment" id="630194212">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="getVersion()"/>
+<message_argument value="PluginParser.locator"/>
+<message_argument value="Locator"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="630194212">
+<message_arguments>
+<message_argument value="PluginParser.xmlTracker"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.acquireXMLParsing(BundleContext)"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.error(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.fatalError(SAXParseException)"/>
+<message_argument value="SAXException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.fatalError(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleExtensionPointState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleExtensionState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleInitialState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleLibraryExportState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleLibraryState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handlePluginState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleRequiresImportState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleRequiresState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleRuntimeState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.logStatus(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parseFragmentAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parseLibraryAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePlugin(InputStream)"/>
+<message_argument value="SAXException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePlugin(InputStream)"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePluginAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePluginRequiresImport(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parseRequiresAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.processingInstruction(String, String)"/>
+<message_argument value="SAXException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.setDocumentLocator(Locator)"/>
+<message_argument value="Locator"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.startElement(String, String, String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.warning(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647000098">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.PluginParser(FrameworkAdaptor, BundleContext, Version)"/>
+<message_argument value="DefaultHandler()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.acquireXMLParsing(BundleContext)"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="newInstance()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.handleLibraryState(String, Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getValue(String, String)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.logStatus(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="getColumnNumber()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.logStatus(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="getLineNumber()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.logStatus(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="getMessage()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.logStatus(SAXParseException)"/>
+<message_argument value="SAXParseException"/>
+<message_argument value="getSystemId()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parseFragmentAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getLength()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parseFragmentAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getLocalName(int)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parseFragmentAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getValue(int)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parseLibraryAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getValue(String, String)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePlugin(InputStream)"/>
+<message_argument value="SAXParser"/>
+<message_argument value="parse(InputStream, DefaultHandler)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePlugin(InputStream)"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="newSAXParser()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePlugin(InputStream)"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="setFeature(String, boolean)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePlugin(InputStream)"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="setNamespaceAware(boolean)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePlugin(InputStream)"/>
+<message_argument value="SAXParserFactory"/>
+<message_argument value="setValidating(boolean)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePluginAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getLength()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePluginAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getLocalName(int)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePluginAttributes(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getValue(int)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.PluginParser.parsePluginRequiresImport(Attributes)"/>
+<message_argument value="Attributes"/>
+<message_argument value="getValue(String, String)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/BundleException.java" type="org.osgi.framework.BundleException">
-<filter id="1141899266">
+<resource path="eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java" type="org.eclipse.equinox.log.internal.ExtendedLogEntryImpl">
+<filter comment="Code is protected by reflection check." id="647004193">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="DUPLICATE_BUNDLE_ERROR"/>
+<message_argument value="org.eclipse.equinox.log.internal.ExtendedLogEntryImpl.getId(Thread)"/>
+<message_argument value="Thread"/>
+<message_argument value="getId()"/>
+<message_argument value="J2SE-1.4"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="protected by reflection method check." id="647004193">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="STATECHANGE_ERROR"/>
+<message_argument value="org.eclipse.equinox.log.internal.ExtendedLogEntryImpl.getId(Thread)"/>
+<message_argument value="Thread"/>
+<message_argument value="getId()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/AdaptPermission.java" type="org.osgi.framework.AdaptPermission">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="NATIVECODE_ERROR"/>
+<message_argument value="org.osgi.framework.AdaptPermission"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/AdminPermission.java" type="org.osgi.framework.AdminPermission">
+<filter comment="Ignore OSGi API" id="1141899266">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="SECURITY_ERROR"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="WEAVE"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/Bundle.java" type="org.osgi.framework.Bundle">
+<filter id="403853384">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="UNSUPPORTED_OPERATION"/>
+<message_argument value="org.osgi.framework.Bundle"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="Ignore OSGi API." id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="INVALID_OPERATION"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="adapt(Class<A>)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="Ignore OSGi API." id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="MANIFEST_ERROR"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="getDataFile(String)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/BundleContext.java" type="org.osgi.framework.BundleContext">
+<filter comment="ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="BundleException(String, int)"/>
+<message_argument value="org.osgi.framework.BundleContext"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="ignore OSGi API" id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="RESOLVE_ERROR"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="getBundle(String)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="ignore OSGi API" id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="ACTIVATOR_ERROR"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="getServiceReference(Class<S>)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="ignore OSGi API" id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="START_TRANSIENT_ERROR"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="getServiceReferences(Class<S>, String)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="ignore OSGi API" id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="getType()"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="registerService(Class<S>, S, Dictionary<String,?>)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/BundleEvent.java" type="org.osgi.framework.BundleEvent">
+<filter comment="Ignore OSGi API" id="1141899266">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="BundleException(String, int, Throwable)"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="BundleEvent(int, Bundle, Bundle)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="Ignore OSGi API" id="1141899266">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="UNSPECIFIED"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="getOrigin()"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="osgi/src/org/osgi/framework/BundleException.java" type="org.osgi.framework.BundleException">
+<filter comment="Ignore OSGi API" id="1141899266">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="READ_ERROR"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi API." id="1141899266">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="REJECTED_BY_HOOK"/>
 </message_arguments>
 </filter>
 </resource>
 <resource path="osgi/src/org/osgi/framework/BundleReference.java" type="org.osgi.framework.BundleReference">
-<filter id="1108344834">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
 <message_argument value="org.osgi.framework.BundleReference"/>
 </message_arguments>
 </filter>
 </resource>
+<resource path="osgi/src/org/osgi/framework/CapabilityPermission.java" type="org.osgi.framework.CapabilityPermission">
+<filter comment="Ignore OSGi APIs." id="1108344834">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="org.osgi.framework.CapabilityPermission"/>
+</message_arguments>
+</filter>
+</resource>
 <resource path="osgi/src/org/osgi/framework/Constants.java" type="org.osgi.framework.Constants">
-<filter id="403767336">
+<filter comment="Ignore OSGi APIs." id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_LIBRARY_EXTENSIONS"/>
+<message_argument value="EFFECTIVE_ACTIVE"/>
 </message_arguments>
 </filter>
-<filter id="403767336">
+<filter comment="Ignore OSGi APIs." id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_SECURITY"/>
+<message_argument value="EFFECTIVE_DIRECTIVE"/>
 </message_arguments>
 </filter>
-<filter id="403767336">
+<filter comment="Ignore OSGi APIs." id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_TRUST_REPOSITORIES"/>
+<message_argument value="EFFECTIVE_RESOLVE"/>
 </message_arguments>
 </filter>
-<filter id="403767336">
+<filter comment="Ignore OSGi API" id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_EXT"/>
+<message_argument value="FRAMEWORK_BSNVERSION"/>
 </message_arguments>
 </filter>
-<filter id="403767336">
+<filter comment="Ignore OSGi API" id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_SECURITY_OSGI"/>
+<message_argument value="FRAMEWORK_BSNVERSION_MULTIPLE"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi API" id="403767336">
+<message_arguments>
+<message_argument value="org.osgi.framework.Constants"/>
+<message_argument value="FRAMEWORK_BSNVERSION_SINGLE"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_FRAMEWORK"/>
+<message_argument value="FRAMEWORK_COMMAND_ABSPATH"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_STORAGE"/>
+<message_argument value="FRAMEWORK_JARURLS"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="403767336">
+<message_arguments>
+<message_argument value="org.osgi.framework.Constants"/>
+<message_argument value="FRAMEWORK_SYSTEMCAPABILITIES"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="403767336">
+<message_arguments>
+<message_argument value="org.osgi.framework.Constants"/>
+<message_argument value="FRAMEWORK_SYSTEMCAPABILITIES_EXTRA"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="SERVICE_TYPE"/>
+<message_argument value="FRAMEWORK_UUID"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="403767336">
+<message_arguments>
+<message_argument value="org.osgi.framework.Constants"/>
+<message_argument value="PROVIDE_CAPABILITY"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_APP"/>
+<message_argument value="REMOTE_CONFIGS_SUPPORTED"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_BEGINNING_STARTLEVEL"/>
+<message_argument value="REMOTE_INTENTS_SUPPORTED"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="403767336">
+<message_arguments>
+<message_argument value="org.osgi.framework.Constants"/>
+<message_argument value="REQUIRE_CAPABILITY"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT"/>
+<message_argument value="SERVICE_EXPORTED_CONFIGS"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_SYSTEMPACKAGES_EXTRA"/>
+<message_argument value="SERVICE_EXPORTED_INTENTS"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT"/>
+<message_argument value="SERVICE_EXPORTED_INTENTS_EXTRA"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_BOOT"/>
+<message_argument value="SERVICE_EXPORTED_INTERFACES"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_STORAGE_CLEAN"/>
+<message_argument value="SERVICE_IMPORTED"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_EXECPERMISSION"/>
+<message_argument value="SERVICE_IMPORTED_CONFIGS"/>
 </message_arguments>
 </filter>
 <filter id="403767336">
 <message_arguments>
 <message_argument value="org.osgi.framework.Constants"/>
-<message_argument value="FRAMEWORK_WINDOWSYSTEM"/>
+<message_argument value="SERVICE_INTENTS"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT"/>
+<message_argument value="org.osgi.framework.Constants"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+<filter comment="Ignore OSGi APIs." id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_FRAMEWORK"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="EFFECTIVE_ACTIVE"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+<filter comment="Ignore OSGi APIs." id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_STORAGE"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="EFFECTIVE_DIRECTIVE"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+<filter comment="Ignore OSGi APIs." id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_SECURITY_OSGI"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="EFFECTIVE_RESOLVE"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+<filter comment="Ignore OSGi APIs." id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_SYSTEMPACKAGES_EXTRA"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FILTER_ATTRIBUTE"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGI API." id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FILTER_DIRECTIVE"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi API" id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_BSNVERSION"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi API" id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_BSNVERSION_MULTIPLE"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi API" id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_BSNVERSION_SINGLE"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="SERVICE_TYPE"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_COMMAND_ABSPATH"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_BEGINNING_STARTLEVEL"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_JARURLS"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_SYSTEMCAPABILITIES"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_SYSTEMCAPABILITIES_EXTRA"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_TRUST_REPOSITORIES"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FRAMEWORK_UUID"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="PROVIDE_CAPABILITY"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_SECURITY"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="REMOTE_CONFIGS_SUPPORTED"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="REMOTE_INTENTS_SUPPORTED"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi APIs." id="1209008130">
+<message_arguments>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="REQUIRE_CAPABILITY"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_APP"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="SERVICE_EXPORTED_CONFIGS"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_EXECPERMISSION"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="SERVICE_EXPORTED_INTENTS"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_LIBRARY_EXTENSIONS"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="SERVICE_EXPORTED_INTENTS_EXTRA"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_STORAGE_CLEAN"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="SERVICE_EXPORTED_INTERFACES"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_BOOT"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="SERVICE_IMPORTED"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_WINDOWSYSTEM"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="SERVICE_IMPORTED_CONFIGS"/>
 </message_arguments>
 </filter>
 <filter id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="FRAMEWORK_BUNDLE_PARENT_EXT"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="SERVICE_INTENTS"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/FrameworkEvent.java" type="org.osgi.framework.FrameworkEvent">
-<filter id="1141899266">
+<resource path="osgi/src/org/osgi/framework/Filter.java" type="org.osgi.framework.Filter">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="WAIT_TIMEDOUT"/>
+<message_argument value="org.osgi.framework.Filter"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+<filter comment="Ignore OSGi API" id="1209008130">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="STOPPED"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="matches(Map<String,?>)"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/ServiceException.java" type="org.osgi.framework.ServiceException">
+<filter comment="Ignore OSGi API" id="1141899266">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="STOPPED_BOOTCLASSPATH_MODIFIED"/>
+<message_argument value="1.6"/>
+<message_argument value="3.7"/>
+<message_argument value="FACTORY_RECURSION"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/ServiceReference.java" type="org.osgi.framework.ServiceReference">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="STOPPED_UPDATE"/>
+<message_argument value="org.osgi.framework.ServiceReference"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/FrameworkUtil.java" type="org.osgi.framework.FrameworkUtil">
-<filter id="1141899266">
+<resource path="osgi/src/org/osgi/framework/ServiceRegistration.java" type="org.osgi.framework.ServiceRegistration">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="matchDistinguishedNameChain(String, List)"/>
+<message_argument value="org.osgi.framework.ServiceRegistration"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/Version.java" type="org.osgi.framework.Version">
+<filter id="1143996420">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="getBundle(Class)"/>
+<message_argument value="compareTo(Version)"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/PackagePermission.java" type="org.osgi.framework.PackagePermission">
-<filter id="1141899266">
+<resource path="osgi/src/org/osgi/framework/hooks/bundle/EventHook.java" type="org.osgi.framework.hooks.bundle.EventHook">
+<filter comment="Ingore OSGi API." id="1110441988">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="PackagePermission(String, Bundle, String)"/>
+<message_argument value="org.osgi.framework.hooks.bundle.EventHook"/>
 </message_arguments>
 </filter>
-<filter id="1141899266">
+</resource>
+<resource path="osgi/src/org/osgi/framework/hooks/bundle/FindHook.java" type="org.osgi.framework.hooks.bundle.FindHook">
+<filter comment="Ingore OSGi API." id="1110441988">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="EXPORTONLY"/>
+<message_argument value="org.osgi.framework.hooks.bundle.FindHook"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/ServiceEvent.java" type="org.osgi.framework.ServiceEvent">
-<filter id="1141899266">
+<resource path="osgi/src/org/osgi/framework/hooks/resolver/ResolverHook.java" type="org.osgi.framework.hooks.resolver.ResolverHook">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="MODIFIED_ENDMATCH"/>
+<message_argument value="org.osgi.framework.hooks.resolver.ResolverHook"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/ServiceException.java" type="org.osgi.framework.ServiceException">
-<filter id="1108344834">
+<resource path="osgi/src/org/osgi/framework/hooks/resolver/ResolverHookFactory.java" type="org.osgi.framework.hooks.resolver.ResolverHookFactory">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="org.osgi.framework.ServiceException"/>
+<message_argument value="org.osgi.framework.hooks.resolver.ResolverHookFactory"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/ServicePermission.java" type="org.osgi.framework.ServicePermission">
-<filter id="1141899266">
+<resource path="osgi/src/org/osgi/framework/hooks/service/EventListenerHook.java" type="org.osgi.framework.hooks.service.EventListenerHook">
+<filter comment="Ignore OSGi API" id="1108344834">
 <message_arguments>
-<message_argument value="1.5"/>
-<message_argument value="3.5"/>
-<message_argument value="ServicePermission(ServiceReference, String)"/>
+<message_argument value="1.1"/>
+<message_argument value="3.7"/>
+<message_argument value="org.osgi.framework.hooks.service.EventListenerHook"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="osgi/src/org/osgi/framework/hooks/service/ListenerHook.java" type="org.osgi.framework.hooks.service.ListenerHook$ListenerInfo">
+<filter comment="Ignore OSGi APIs" id="403853384">
+<message_arguments>
+<message_argument value="org.osgi.framework.hooks.service.ListenerHook.ListenerInfo"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/hooks/service/EventHook.java" type="org.osgi.framework.hooks.service.EventHook">
-<filter id="1110441988">
+<resource path="osgi/src/org/osgi/framework/hooks/weaving/WeavingException.java" type="org.osgi.framework.hooks.weaving.WeavingException">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.framework.hooks.service.EventHook"/>
+<message_argument value="org.osgi.framework.hooks.weaving.WeavingException"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/hooks/service/FindHook.java" type="org.osgi.framework.hooks.service.FindHook">
-<filter id="1110441988">
+<resource path="osgi/src/org/osgi/framework/hooks/weaving/WeavingHook.java" type="org.osgi.framework.hooks.weaving.WeavingHook">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.framework.hooks.service.FindHook"/>
+<message_argument value="org.osgi.framework.hooks.weaving.WeavingHook"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/framework/hooks/service/ListenerHook.java" type="org.osgi.framework.hooks.service.ListenerHook">
-<filter id="1110441988">
+<resource path="osgi/src/org/osgi/framework/hooks/weaving/WovenClass.java" type="org.osgi.framework.hooks.weaving.WovenClass">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.framework.hooks.service.ListenerHook"/>
+<message_argument value="org.osgi.framework.hooks.weaving.WovenClass"/>
 </message_arguments>
 </filter>
 </resource>
 <resource path="osgi/src/org/osgi/framework/launch/Framework.java" type="org.osgi.framework.launch.Framework">
-<filter id="1110441988">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
 <message_argument value="org.osgi.framework.launch.Framework"/>
 </message_arguments>
 </filter>
 </resource>
 <resource path="osgi/src/org/osgi/framework/launch/FrameworkFactory.java" type="org.osgi.framework.launch.FrameworkFactory">
-<filter id="1110441988">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
 <message_argument value="org.osgi.framework.launch.FrameworkFactory"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java" type="org.osgi.service.condpermadmin.ConditionalPermissionAdmin">
-<filter id="403804204">
+<resource path="osgi/src/org/osgi/framework/startlevel/BundleStartLevel.java" type="org.osgi.framework.startlevel.BundleStartLevel">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>
-<message_argument value="newConditionalPermissionUpdate()"/>
+<message_argument value="org.osgi.framework.startlevel.BundleStartLevel"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+</resource>
+<resource path="osgi/src/org/osgi/framework/startlevel/FrameworkStartLevel.java" type="org.osgi.framework.startlevel.FrameworkStartLevel">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>
-<message_argument value="newConditionalPermissionInfo(String, ConditionInfo[], PermissionInfo[], String)"/>
+<message_argument value="org.osgi.framework.startlevel.FrameworkStartLevel"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+</resource>
+<resource path="osgi/src/org/osgi/framework/wiring/BundleCapability.java" type="org.osgi.framework.wiring.BundleCapability">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>
-<message_argument value="newConditionalPermissionInfo(String)"/>
+<message_argument value="org.osgi.framework.wiring.BundleCapability"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/framework/wiring/BundleRequirement.java" type="org.osgi.framework.wiring.BundleRequirement">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="newConditionalPermissionUpdate()"/>
+<message_argument value="org.osgi.framework.wiring.BundleRequirement"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/framework/wiring/BundleRevision.java" type="org.osgi.framework.wiring.BundleRevision">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="newConditionalPermissionInfo(String, ConditionInfo[], PermissionInfo[], String)"/>
+<message_argument value="org.osgi.framework.wiring.BundleRevision"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/framework/wiring/BundleRevisions.java" type="org.osgi.framework.wiring.BundleRevisions">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="newConditionalPermissionInfo(String)"/>
+<message_argument value="org.osgi.framework.wiring.BundleRevisions"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java" type="org.osgi.service.condpermadmin.ConditionalPermissionInfo">
-<filter id="403767336">
+<resource path="osgi/src/org/osgi/framework/wiring/BundleWire.java" type="org.osgi.framework.wiring.BundleWire">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>
-<message_argument value="DENY"/>
+<message_argument value="org.osgi.framework.wiring.BundleWire"/>
 </message_arguments>
 </filter>
-<filter id="403767336">
+</resource>
+<resource path="osgi/src/org/osgi/framework/wiring/BundleWiring.java" type="org.osgi.framework.wiring.BundleWiring">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>
-<message_argument value="ALLOW"/>
+<message_argument value="org.osgi.framework.wiring.BundleWiring"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+</resource>
+<resource path="osgi/src/org/osgi/framework/wiring/FrameworkWiring.java" type="org.osgi.framework.wiring.FrameworkWiring">
+<filter comment="Ignore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>
-<message_argument value="toString()"/>
+<message_argument value="org.osgi.framework.wiring.FrameworkWiring"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+</resource>
+<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java" type="org.osgi.service.condpermadmin.ConditionalPermissionAdmin">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>
-<message_argument value="getEncoded()"/>
+<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+</resource>
+<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java" type="org.osgi.service.condpermadmin.ConditionalPermissionInfo">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
 <message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>
-<message_argument value="equals(Object)"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+</resource>
+<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java" type="org.osgi.service.condpermadmin.ConditionalPermissionUpdate">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>
-<message_argument value="hashCode()"/>
+<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionUpdate"/>
 </message_arguments>
 </filter>
-<filter id="403804204">
+</resource>
+<resource path="osgi/src/org/osgi/service/log/LogEntry.java" type="org.osgi.service.log.LogEntry">
+<filter comment="Ingore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>
-<message_argument value="getAccessDecision()"/>
+<message_argument value="org.osgi.service.log.LogEntry"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/service/log/LogListener.java" type="org.osgi.service.log.LogListener">
+<filter comment="Ingore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="equals(Object)"/>
+<message_argument value="org.osgi.service.log.LogListener"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/service/log/LogReaderService.java" type="org.osgi.service.log.LogReaderService">
+<filter comment="Ingore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="getAccessDecision()"/>
+<message_argument value="org.osgi.service.log.LogReaderService"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/service/log/LogService.java" type="org.osgi.service.log.LogService">
+<filter comment="Ingore OSGi API" id="1110441988">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="DENY"/>
+<message_argument value="org.osgi.service.log.LogService"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/service/packageadmin/ExportedPackage.java" type="org.osgi.service.packageadmin.ExportedPackage">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="getEncoded()"/>
+<message_argument value="org.osgi.service.packageadmin.ExportedPackage"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/service/packageadmin/PackageAdmin.java" type="org.osgi.service.packageadmin.PackageAdmin">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="ALLOW"/>
+<message_argument value="org.osgi.service.packageadmin.PackageAdmin"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/service/packageadmin/RequiredBundle.java" type="org.osgi.service.packageadmin.RequiredBundle">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="hashCode()"/>
+<message_argument value="org.osgi.service.packageadmin.RequiredBundle"/>
 </message_arguments>
 </filter>
-<filter id="1209008130">
+</resource>
+<resource path="osgi/src/org/osgi/service/permissionadmin/PermissionAdmin.java" type="org.osgi.service.permissionadmin.PermissionAdmin">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="toString()"/>
+<message_argument value="org.osgi.service.permissionadmin.PermissionAdmin"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java" type="org.osgi.service.condpermadmin.ConditionalPermissionUpdate">
-<filter id="1108344834">
+<resource path="osgi/src/org/osgi/service/startlevel/StartLevel.java" type="org.osgi.service.startlevel.StartLevel">
+<filter comment="Ignore OSGi API" id="403853384">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.5"/>
-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionUpdate"/>
+<message_argument value="org.osgi.service.startlevel.StartLevel"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="osgi/src/org/osgi/service/url/URLConstants.java" type="org.osgi.service.url.URLConstants">
+<filter comment="Ignore OSGi API" id="403853384">
+<message_arguments>
+<message_argument value="org.osgi.service.url.URLConstants"/>
 </message_arguments>
 </filter>
 </resource>
 <resource path="osgi/src/org/osgi/util/tracker/BundleTracker.java" type="org.osgi.util.tracker.BundleTracker">
-<filter id="1108344834">
+<filter id="1141899266">
 <message_arguments>
-<message_argument value="1.4"/>
-<message_argument value="3.5"/>
-<message_argument value="org.osgi.util.tracker.BundleTracker"/>
+<message_argument value="1.5"/>
+<message_argument value="3.7"/>
+<message_argument value="getTracked()"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi API" id="1141899266">
+<message_arguments>
+<message_argument value="1.5"/>
+<message_argument value="3.7"/>
+<message_argument value="isEmpty()"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="osgi/src/org/osgi/util/tracker/BundleTrackerCustomizer.java" type="org.osgi.util.tracker.BundleTrackerCustomizer">
-<filter id="1108344834">
+<resource path="osgi/src/org/osgi/util/tracker/ServiceTracker.java" type="org.osgi.util.tracker.ServiceTracker">
+<filter comment="Ignore OSGi API" id="1141899266">
+<message_arguments>
+<message_argument value="1.5"/>
+<message_argument value="3.7"/>
+<message_argument value="getServices(T[])"/>
+</message_arguments>
+</filter>
+<filter id="1141899266">
 <message_arguments>
-<message_argument value="1.4"/>
-<message_argument value="3.5"/>
-<message_argument value="org.osgi.util.tracker.BundleTrackerCustomizer"/>
+<message_argument value="1.5"/>
+<message_argument value="3.7"/>
+<message_argument value="getTracked()"/>
+</message_arguments>
+</filter>
+<filter comment="Ignore OSGi API" id="1141899266">
+<message_arguments>
+<message_argument value="1.5"/>
+<message_argument value="3.7"/>
+<message_argument value="isEmpty()"/>
+</message_arguments>
+</filter>
+<filter id="1143996420">
+<message_arguments>
+<message_argument value="ServiceTracker(BundleContext, Class<S>, ServiceTrackerCustomizer<S,T>)"/>
 </message_arguments>
 </filter>
 </resource>
-<resource path="supplement/src/org/eclipse/osgi/service/localization/LocaleProvider.java" type="org.eclipse.osgi.service.localization.LocaleProvider">
-<filter id="1108344834">
+<resource path="supplement/src/org/eclipse/core/runtime/internal/adaptor/Locker_JavaNio.java" type="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio">
+<filter comment="Code is protected when running on a limited environment" id="630194212">
 <message_arguments>
-<message_argument value="1.1"/>
-<message_argument value="3.6"/>
-<message_argument value="org.eclipse.osgi.service.localization.LocaleProvider"/>
+<message_argument value="Locker_JavaNio.fileLock"/>
+<message_argument value="FileLock"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.isLocked()"/>
+<message_argument value="FileLock"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.isLocked()"/>
+<message_argument value="OverlappingFileLockException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="646971428">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.lock()"/>
+<message_argument value="OverlappingFileLockException"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.isLocked()"/>
+<message_argument value="FileChannel"/>
+<message_argument value="tryLock(long, long, boolean)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.isLocked()"/>
+<message_argument value="FileLock"/>
+<message_argument value="release()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.isLocked()"/>
+<message_argument value="RandomAccessFile"/>
+<message_argument value="getChannel()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.lock()"/>
+<message_argument value="FileChannel"/>
+<message_argument value="tryLock(long, long, boolean)"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.lock()"/>
+<message_argument value="RandomAccessFile"/>
+<message_argument value="getChannel()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
+</message_arguments>
+</filter>
+<filter comment="Code is protected when running on a limited environment" id="647004193">
+<message_arguments>
+<message_argument value="org.eclipse.core.runtime.internal.adaptor.Locker_JavaNio.release()"/>
+<message_argument value="FileLock"/>
+<message_argument value="release()"/>
+<message_argument value="OSGi/Minimum-1.2"/>
 </message_arguments>
 </filter>
 </resource>
diff --git a/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.jdt.core.prefs
index 5a56c43..4f32b45 100644
--- a/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.jdt.core.prefs
@@ -1,24 +1,23 @@
-#Mon May 03 08:45:46 CDT 2010
+#Thu Feb 17 07:54:09 CST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
 org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=jsr14
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
 org.eclipse.jdt.core.compiler.problem.deadCode=warning
@@ -27,17 +26,18 @@ org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=error
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
@@ -52,6 +52,7 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
 org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
@@ -69,12 +70,15 @@ org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -95,8 +99,8 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=en
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=error
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
diff --git a/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.jdt.launching.prefs
deleted file mode 100644
index 7754db2..0000000
--- a/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.jdt.launching.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Mon May 03 08:45:46 CDT 2010
-eclipse.preferences.version=1
-org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning
diff --git a/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.pde.api.tools.prefs b/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.pde.api.tools.prefs
index 7ae2079..5b3c8e0 100644
--- a/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.pde.api.tools.prefs
+++ b/eclipse/plugins/org.eclipse.osgi/.settings/org.eclipse.pde.api.tools.prefs
@@ -1,4 +1,4 @@
-#Wed Mar 11 14:32:26 CDT 2009
+#Thu Oct 08 09:47:30 CDT 2009
 ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
 ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
 ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
@@ -57,7 +57,7 @@ INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
 INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
 INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
 INVALID_JAVADOC_TAG=Ignore
-INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Error
 LEAK_EXTEND=Warning
 LEAK_FIELD_DECL=Warning
 LEAK_IMPLEMENT=Warning
diff --git a/eclipse/plugins/org.eclipse.osgi/CDC-1.0_Foundation-1.0.profile b/eclipse/plugins/org.eclipse.osgi/CDC-1.0_Foundation-1.0.profile
index dde120a..3cbbc60 100644
--- a/eclipse/plugins/org.eclipse.osgi/CDC-1.0_Foundation-1.0.profile
+++ b/eclipse/plugins/org.eclipse.osgi/CDC-1.0_Foundation-1.0.profile
@@ -16,6 +16,9 @@ org.osgi.framework.executionenvironment = \
  OSGi/Minimum-1.0,\
  OSGi/Minimum-1.1,\
  CDC-1.0/Foundation-1.0
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1",\
+ osgi.ee; osgi.ee="CDC/Foundation"; version:Version="1.0"
 osgi.java.profile.name = CDC-1.0/Foundation-1.0
 org.eclipse.jdt.core.compiler.compliance=1.3
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/CDC-1.1_Foundation-1.1.profile b/eclipse/plugins/org.eclipse.osgi/CDC-1.1_Foundation-1.1.profile
index 67b20c7..efa83eb 100644
--- a/eclipse/plugins/org.eclipse.osgi/CDC-1.1_Foundation-1.1.profile
+++ b/eclipse/plugins/org.eclipse.osgi/CDC-1.1_Foundation-1.1.profile
@@ -22,6 +22,9 @@ org.osgi.framework.executionenvironment = \
  OSGi/Minimum-1.2,\
  CDC-1.0/Foundation-1.0,\
  CDC-1.1/Foundation-1.1
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2",\
+ osgi.ee; osgi.ee="CDC/Foundation"; version:List<Version>="1.0, 1.1"
 osgi.java.profile.name = CDC-1.1/Foundation-1.1
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/J2SE-1.2.profile b/eclipse/plugins/org.eclipse.osgi/J2SE-1.2.profile
index aba27c4..81ce7bc 100644
--- a/eclipse/plugins/org.eclipse.osgi/J2SE-1.2.profile
+++ b/eclipse/plugins/org.eclipse.osgi/J2SE-1.2.profile
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2009 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -39,6 +39,8 @@ org.osgi.framework.bootdelegation = \
 org.osgi.framework.executionenvironment = \
  JRE-1.1,\
  J2SE-1.2
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2"
 osgi.java.profile.name = J2SE-1.2
 org.eclipse.jdt.core.compiler.compliance=1.3
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/J2SE-1.3.profile b/eclipse/plugins/org.eclipse.osgi/J2SE-1.3.profile
index da3538e..53b95e8 100644
--- a/eclipse/plugins/org.eclipse.osgi/J2SE-1.3.profile
+++ b/eclipse/plugins/org.eclipse.osgi/J2SE-1.3.profile
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -60,6 +60,9 @@ org.osgi.framework.executionenvironment = \
  JRE-1.1,\
  J2SE-1.2,\
  J2SE-1.3
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1",\
+ osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2, 1.3"
 osgi.java.profile.name = J2SE-1.3
 org.eclipse.jdt.core.compiler.compliance=1.3
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/J2SE-1.4.profile b/eclipse/plugins/org.eclipse.osgi/J2SE-1.4.profile
index abaa0c3..925e2bc 100644
--- a/eclipse/plugins/org.eclipse.osgi/J2SE-1.4.profile
+++ b/eclipse/plugins/org.eclipse.osgi/J2SE-1.4.profile
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -121,6 +121,9 @@ org.osgi.framework.executionenvironment = \
  J2SE-1.2,\
  J2SE-1.3,\
  J2SE-1.4
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2",\
+ osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2, 1.3, 1.4"
 osgi.java.profile.name = J2SE-1.4
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/J2SE-1.5.profile b/eclipse/plugins/org.eclipse.osgi/J2SE-1.5.profile
index e56a929..e0f6808 100644
--- a/eclipse/plugins/org.eclipse.osgi/J2SE-1.5.profile
+++ b/eclipse/plugins/org.eclipse.osgi/J2SE-1.5.profile
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -148,6 +148,9 @@ org.osgi.framework.executionenvironment = \
  J2SE-1.3,\
  J2SE-1.4,\
  J2SE-1.5
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2",\
+ osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2, 1.3, 1.4, 1.5"
 osgi.java.profile.name = J2SE-1.5
 org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.source=1.5
diff --git a/eclipse/plugins/org.eclipse.osgi/JavaSE-1.6.profile b/eclipse/plugins/org.eclipse.osgi/JavaSE-1.6.profile
index 68e811f..8b466ff 100644
--- a/eclipse/plugins/org.eclipse.osgi/JavaSE-1.6.profile
+++ b/eclipse/plugins/org.eclipse.osgi/JavaSE-1.6.profile
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -185,6 +185,9 @@ org.osgi.framework.executionenvironment = \
  J2SE-1.4,\
  J2SE-1.5,\
  JavaSE-1.6
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2",\
+ osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6"
 osgi.java.profile.name = JavaSE-1.6
 org.eclipse.jdt.core.compiler.compliance=1.6
 org.eclipse.jdt.core.compiler.source=1.6
diff --git a/eclipse/plugins/org.eclipse.osgi/JavaSE-1.7.profile b/eclipse/plugins/org.eclipse.osgi/JavaSE-1.7.profile
index 192b46e..6f623c7 100644
--- a/eclipse/plugins/org.eclipse.osgi/JavaSE-1.7.profile
+++ b/eclipse/plugins/org.eclipse.osgi/JavaSE-1.7.profile
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009, 2010 IBM Corporation and others.
+# Copyright (c) 2009, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -125,6 +125,7 @@ org.osgi.framework.system.packages = \
  javax.xml.ws.http,\
  javax.xml.ws.soap,\
  javax.xml.ws.spi,\
+ javax.xml.ws.spi.http,\
  javax.xml.ws.wsaddressing,\
  javax.xml.xpath,\
  org.ietf.jgss,\
@@ -189,6 +190,9 @@ org.osgi.framework.executionenvironment = \
  J2SE-1.5,\
  JavaSE-1.6,\
  JavaSE-1.7
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2",\
+ osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7"
 osgi.java.profile.name = JavaSE-1.7
 org.eclipse.jdt.core.compiler.compliance=1.6
 org.eclipse.jdt.core.compiler.source=1.6
diff --git a/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF
index 9452d1d..e568ae7 100644
--- a/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.osgi/META-INF/MANIFEST.MF
@@ -3,31 +3,37 @@ Bundle-ManifestVersion: 2
 Export-Package: org.eclipse.osgi.event;version="1.0",
  org.eclipse.osgi.framework.console;version="1.1",
  org.eclipse.osgi.framework.eventmgr;version="1.2",
- org.eclipse.osgi.framework.log;version="1.0",
+ org.eclipse.osgi.framework.log;version="1.1",
  org.eclipse.osgi.launch; version="1.0",
  org.eclipse.osgi.service.datalocation;version="1.3",
  org.eclipse.osgi.service.debug;version="1.2",
  org.eclipse.osgi.service.environment;version="1.3",
  org.eclipse.osgi.service.localization;version="1.1",
  org.eclipse.osgi.service.pluginconversion;version="1.0",
- org.eclipse.osgi.service.resolver;version="1.4",
+ org.eclipse.osgi.service.resolver;version="1.5",
  org.eclipse.osgi.service.runnable;version="1.1",
  org.eclipse.osgi.service.security; version="1.0",
  org.eclipse.osgi.service.urlconversion;version="1.0",
  org.eclipse.osgi.signedcontent; version="1.0",
  org.eclipse.osgi.storagemanager;version="1.0",
  org.eclipse.osgi.util;version="1.1",
- org.osgi.framework;version="1.5",
+ org.eclipse.equinox.log; version="1.0",
+ org.osgi.framework;version="1.6",
  org.osgi.framework.launch; version="1.0",
- org.osgi.framework.hooks.service; version="1.0",
- org.osgi.service.condpermadmin;version="1.1",
+ org.osgi.framework.hooks.bundle; version="1.0",
+ org.osgi.framework.hooks.resolver; version="1.0",
+ org.osgi.framework.hooks.service; version="1.1",
+ org.osgi.framework.hooks.weaving; version="1.0",
+ org.osgi.framework.startlevel; version="1.0",
+ org.osgi.framework.wiring; version="1.0",
+ org.osgi.service.condpermadmin;version="1.1.1",
  org.osgi.service.framework; version="1.0"; x-internal:=true,
+ org.osgi.service.log; version="1.3",
  org.osgi.service.packageadmin;version="1.2",
  org.osgi.service.permissionadmin;version="1.2",
  org.osgi.service.startlevel;version="1.1",
  org.osgi.service.url;version="1.0",
- org.osgi.util.tracker;version="1.4.0",
- org.osgi.util.tracker;version="1.4.2",
+ org.osgi.util.tracker;version="1.5",
  org.eclipse.core.runtime.adaptor;x-friends:="org.eclipse.core.runtime",
  org.eclipse.core.runtime.internal.adaptor;x-internal:=true,
  org.eclipse.core.runtime.internal.stats;x-friends:="org.eclipse.core.runtime",
@@ -57,7 +63,8 @@ Export-Package: org.eclipse.osgi.event;version="1.0",
  org.eclipse.osgi.internal.provisional.verifier;x-friends:="org.eclipse.update.core,org.eclipse.ui.workbench,org.eclipse.equinox.p2.artifact.repository",
  org.eclipse.osgi.internal.service.security;x-friends:="org.eclipse.equinox.security.ui",
  org.eclipse.osgi.internal.signedcontent; x-internal:=true,
- org.eclipse.osgi.service.internal.composite; x-internal:=true
+ org.eclipse.osgi.service.internal.composite; x-internal:=true,
+ org.eclipse.equinox.log.internal; x-internal:=true
 Export-Service: org.osgi.service.packageadmin.PackageAdmin,
  org.osgi.service.permissionadmin.PermissionAdmin,
  org.osgi.service.startlevel.StartLevel,
@@ -68,7 +75,7 @@ Bundle-Activator: org.eclipse.osgi.framework.internal.core.SystemBundleActivator
 Bundle-Description: %systemBundle
 Bundle-Copyright: %copyright
 Bundle-Vendor: %eclipse.org
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Localization: systembundle
 Bundle-DocUrl: http://www.eclipse.org
 Eclipse-ExtensibleAPI: true
diff --git a/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.0.profile b/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.0.profile
index 773501a..40da61f 100644
--- a/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.0.profile
+++ b/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.0.profile
@@ -14,6 +14,8 @@ org.osgi.framework.bootdelegation = \
  com.sun.*
 org.osgi.framework.executionenvironment = \
  OSGi/Minimum-1.0
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:Version="1.0"
 osgi.java.profile.name = OSGi/Minimum-1.0
 org.eclipse.jdt.core.compiler.compliance=1.3
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.1.profile b/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.1.profile
index 5031392..818bf10 100644
--- a/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.1.profile
+++ b/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.1.profile
@@ -15,6 +15,8 @@ org.osgi.framework.bootdelegation = \
 org.osgi.framework.executionenvironment = \
  OSGi/Minimum-1.0,\
  OSGi/Minimum-1.1
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1"
 osgi.java.profile.name = OSGi/Minimum-1.1
 org.eclipse.jdt.core.compiler.compliance=1.3
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.2.profile b/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.2.profile
index 601b373..95a6896 100644
--- a/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.2.profile
+++ b/eclipse/plugins/org.eclipse.osgi/OSGi_Minimum-1.2.profile
@@ -16,6 +16,8 @@ org.osgi.framework.executionenvironment = \
  OSGi/Minimum-1.0,\
  OSGi/Minimum-1.1,\
  OSGi/Minimum-1.2
+org.osgi.framework.system.capabilities = \
+ osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2"
 osgi.java.profile.name = OSGi/Minimum-1.2
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.osgi/bnd.bnd b/eclipse/plugins/org.eclipse.osgi/bnd.bnd
new file mode 100644
index 0000000..43251fc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/bnd.bnd
@@ -0,0 +1,35 @@
+javac.source            = 1.5
+javac.target            = jsr14
+# We don't want bnd to make the manifest
+-nomanifest=true
+# We export packages which are not in this project
+-failok=true
+# We don't want bnd to put the source code in the jar
+-sources=false
+# We don't want bnd to try and figure out what classes to put in the jar
+-resourceonly
+# The following line prevents bnd from complaining about no folder named "src"
+src=osgi
+# The following line prevents bnd from complaining about no packages
+Private-Package: org.*
+# We tell bnd what resources to put in the jar. We rely upon Eclipse to populate the bin folder
+Include-Resource= bin, \
+				.options,\
+               META-INF=META-INF,\
+               systembundle.properties,\
+ JavaSE-1.7.profile,\
+ JavaSE-1.6.profile,\
+ J2SE-1.5.profile,\
+ J2SE-1.4.profile,\
+ J2SE-1.3.profile,\
+ J2SE-1.2.profile,\
+ JRE-1.1.profile,\
+ CDC-1.1_Foundation-1.1.profile,\
+ CDC-1.0_Foundation-1.0.profile,\
+ OSGi_Minimum-1.0.profile,\
+ OSGi_Minimum-1.1.profile,\
+ OSGi_Minimum-1.2.profile, \
+                profile.list,\
+               hookconfigurators.properties
+               
+-runpath =
diff --git a/eclipse/plugins/org.eclipse.osgi/build.properties b/eclipse/plugins/org.eclipse.osgi/build.properties
index d21ae37..deea927 100644
--- a/eclipse/plugins/org.eclipse.osgi/build.properties
+++ b/eclipse/plugins/org.eclipse.osgi/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2008 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,10 +30,18 @@ source.. = osgi/src,\
            supplement/src/,\
            security/src/
 output.. = bin/
-jre.compilation.profile = CDC-1.1/Foundation-1.1
-bootClasspath=osgi/exceptions.jar;osgi/xmlParserAPIs.jar;${CDC-1.1/Foundation-1.1}
+jre.compilation.profile = J2SE-1.5
 
-javacSource=1.3
-javacTarget=1.2
+# jre.compilation.profile = CDC-1.1/Foundation-1.1
+# bootClasspath=osgi/exceptions.jar;osgi/xmlParserAPIs.jar;${CDC-1.1/Foundation-1.1}
 
-javacWarnings..=-deadCode
\ No newline at end of file
+javacSource=1.5
+javacTarget=jsr14
+
+# To enable building the framework using projects from OSGi repo uncomment customBuildCallbacks 
+# and add the following to the beginning of source..
+#           osgi/src2,\
+# and use the .classpath.osgisource as the .classpath file.
+# customBuildCallbacks=customBuildCallbacks.xml
+
+javacWarnings..=-deadCode,-raw,-unchecked
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java
index c487509..815e138 100644
--- a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,8 @@ package org.eclipse.osgi.framework.internal.core;
 
 import java.io.*;
 import java.lang.reflect.Method;
-import java.net.ServerSocket;
-import java.net.Socket;
+import java.net.*;
+import java.util.Dictionary;
 import java.util.Hashtable;
 import org.eclipse.osgi.framework.console.CommandProvider;
 import org.eclipse.osgi.framework.console.ConsoleSession;
@@ -23,7 +23,7 @@ import org.osgi.framework.ServiceRegistration;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
-public class ConsoleManager implements ServiceTrackerCustomizer {
+public class ConsoleManager implements ServiceTrackerCustomizer<ConsoleSession, FrameworkConsole> {
 	/**
 	 * ConsoleSocketGetter - provides a Thread that listens on the port
 	 * for FrameworkConsole.
@@ -55,7 +55,7 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 
 		public void run() {
 			// Print message containing port console actually bound to..
-			System.out.println(NLS.bind(ConsoleMsg.CONSOLE_LISTENING_ON_PORT, Integer.toString(server.getLocalPort())));
+			System.out.println(NLS.bind(ConsoleMsg.CONSOLE_LISTENING_ON_PORT, server.getInetAddress().toString() + ':' + Integer.toString(server.getLocalPort())));
 			while (!shutdown) {
 				try {
 					Socket socket = server.accept();
@@ -86,19 +86,45 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 	public static final String PROP_CONSOLE = "osgi.console"; //$NON-NLS-1$
 	private static final String PROP_SYSTEM_IN_OUT = "console.systemInOut"; //$NON-NLS-1$
 	private static final String CONSOLE_NAME = "OSGi Console"; //$NON-NLS-1$
+	private static final String PROP_CONSOLE_ENABLED = "osgi.console.enable.builtin"; //$NON-NLS-1$
 	private final Framework framework;
-	private final ServiceTracker cpTracker;
-	private final ServiceTracker sessions;
+	private final ServiceTracker<CommandProvider, CommandProvider> cpTracker;
+	private final ServiceTracker<ConsoleSession, FrameworkConsole> sessions;
 	private final String consolePort;
+	// Allow for specifying the particular local host address on which the framework to listen for connections. Currently it listens on 
+	// all network interfaces of the host and restricting this is desirable from security point of view. See bug 322917.
+	private final String consoleHost;
 	private FrameworkCommandProvider fwkCommands;
-	private ServiceRegistration builtinSession;
-	private ConsoleSocketGetter scsg;
+	private ServiceRegistration<?> builtinSession;
+	private ConsoleSocketGetter socketGetter;
+	private final boolean isEnabled;
+
+	public ConsoleManager(Framework framework, String consolePropValue) {
+		String port = null;
+		String host = null;
+		if (consolePropValue != null) {
+			int index = consolePropValue.lastIndexOf(":"); //$NON-NLS-1$
+			if (index > -1) {
+				host = consolePropValue.substring(0, index);
+			}
+			port = consolePropValue.substring(index + 1);
+		}
 
-	public ConsoleManager(Framework framework, String consolePort) {
+		if ("false".equals(FrameworkProperties.getProperty(PROP_CONSOLE_ENABLED)) || "none".equals(port)) { //$NON-NLS-1$ //$NON-NLS-2$
+			isEnabled = false;
+			this.framework = null;
+			this.cpTracker = null;
+			this.sessions = null;
+			this.consoleHost = null;
+			this.consolePort = null;
+			return;
+		}
+		this.isEnabled = true;
 		this.framework = framework;
-		this.consolePort = consolePort != null ? consolePort.trim() : consolePort;
-		this.cpTracker = new ServiceTracker(framework.getSystemBundleContext(), CommandProvider.class.getName(), null);
-		this.sessions = new ServiceTracker(framework.getSystemBundleContext(), ConsoleSession.class.getName(), this);
+		this.consoleHost = host != null ? host.trim() : host;
+		this.consolePort = port != null ? port.trim() : port;
+		this.cpTracker = new ServiceTracker<CommandProvider, CommandProvider>(framework.getSystemBundleContext(), CommandProvider.class.getName(), null);
+		this.sessions = new ServiceTracker<ConsoleSession, FrameworkConsole>(framework.getSystemBundleContext(), ConsoleSession.class.getName(), this);
 	}
 
 	public static ConsoleManager startConsole(Framework framework) {
@@ -108,8 +134,10 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 	}
 
 	private void startConsole() {
-		if ("none".equals(consolePort)) //$NON-NLS-1$
-			return; // disables all console sessions
+		if (!isEnabled) {
+			return;
+		}
+
 		this.cpTracker.open();
 		this.sessions.open();
 		fwkCommands = new FrameworkCommandProvider(framework);
@@ -125,11 +153,17 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 		}
 		if (port < 0) {
 			InputStream in = new FilterInputStream(System.in) {
+				/**
+				 * @throws IOException  
+				 */
 				public void close() throws IOException {
 					// We don't want to close System.in
 				}
 			};
 			OutputStream out = new FilterOutputStream(System.out) {
+				/**
+				 * @throws IOException  
+				 */
 				public void close() throws IOException {
 					// We don't want to close System.out
 				}
@@ -140,13 +174,17 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 
 			};
 			FrameworkConsoleSession session = new FrameworkConsoleSession(in, out, null);
-			Hashtable props = null;
-			props = new Hashtable(1);
+			Dictionary<String, Object> props = null;
+			props = new Hashtable<String, Object>(1);
 			props.put(PROP_SYSTEM_IN_OUT, Boolean.TRUE);
 			builtinSession = framework.getSystemBundleContext().registerService(ConsoleSession.class.getName(), session, props);
 		} else {
 			try {
-				scsg = new ConsoleManager.ConsoleSocketGetter(new ServerSocket(port));
+				if (consoleHost != null) {
+					socketGetter = new ConsoleSocketGetter(new ServerSocket(port, 0, InetAddress.getByName(consoleHost)));
+				} else {
+					socketGetter = new ConsoleManager.ConsoleSocketGetter(new ServerSocket(port));
+				}
 			} catch (IOException e) {
 				e.printStackTrace();
 			}
@@ -158,6 +196,9 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 	 *
 	 */
 	public void stopConsole() {
+		if (!isEnabled) {
+			return;
+		}
 		if (builtinSession != null)
 			try {
 				builtinSession.unregister();
@@ -166,20 +207,20 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 			}
 		sessions.close();
 		cpTracker.close();
-		if (scsg != null)
-			scsg.shutdown();
+		if (socketGetter != null)
+			socketGetter.shutdown();
 		if (fwkCommands != null)
 			fwkCommands.stop();
 	}
 
-	public Object addingService(ServiceReference reference) {
+	public FrameworkConsole addingService(ServiceReference<ConsoleSession> reference) {
 		FrameworkConsole console = null;
 
 		Boolean isSystemInOut = (Boolean) reference.getProperty(PROP_SYSTEM_IN_OUT);
 		if (isSystemInOut == null)
 			isSystemInOut = Boolean.FALSE;
 
-		ConsoleSession session = (ConsoleSession) framework.getSystemBundleContext().getService(reference);
+		ConsoleSession session = framework.getSystemBundleContext().getService(reference);
 		console = new FrameworkConsole(framework.getSystemBundleContext(), session, isSystemInOut.booleanValue(), cpTracker);
 
 		Thread t = new Thread(console, CONSOLE_NAME);
@@ -188,11 +229,11 @@ public class ConsoleManager implements ServiceTrackerCustomizer {
 		return console;
 	}
 
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<ConsoleSession> reference, FrameworkConsole service) {
 		// nothing
 	}
 
-	public void removedService(ServiceReference reference, Object service) {
-		((FrameworkConsole) service).shutdown();
+	public void removedService(ServiceReference<ConsoleSession> reference, FrameworkConsole service) {
+		service.shutdown();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMessages.properties b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMessages.properties
index f461a3c..fc686ad 100644
--- a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMessages.properties
+++ b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2009 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ CONSOLE_HELP_DISPLAYING_STATUS_HEADER=Displaying Status
 CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION=display installed bundles and registered services
 CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION=[-s [<comma separated list of bundle states>]  [<segment of bsn>]]
 CONSOLE_HELP_SS_COMMAND_DESCRIPTION=display installed bundles (short status)
-CONSOLE_HELP_SERVICES_COMMAND_DESCRIPTION=display registered service details
+CONSOLE_HELP_SERVICES_COMMAND_DESCRIPTION=display registered service details. Examples for [filter]: (objectClass=com.xyz.Person); (&(objectClass=com.xyz.Person)(|(sn=Jensen)(cn=Babs J*))); passing only com.xyz.Person is a shortcut for (objectClass=com.xyz.Person). The filter syntax specification is available at http://www.ietf.org/rfc/rfc1960.txt
 CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION=display imported/exported package details
 CONSOLE_HELP_BUNDLES_COMMAND_DESCRIPTION=display details for all installed bundles
 CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION=display details for the specified bundle(s)
@@ -138,3 +138,6 @@ CONSOLE_NO_REQUIRED_BUNDLES_MESSAGE=No required bundles
 CONSOLE_REQUIRES_MESSAGE=[requires]
 CONSOLE_HELP_PROFILE_HEADING=Controlling the Profiling
 CONSOLE_HELP_PROFILELOG_DESCRIPTION=Display & flush the profile log messages
+CONSOLE_HELP_HELP_COMMAND_DESCRIPTION=Display help for the specified command
+CONSOLE_PROPS_COMMAND_DESCRIPTION=Display system properties
+CONSOLE_THREADS_COMMAND_DESCRIPTION=Display threads and thread groups
diff --git a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMsg.java b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMsg.java
index 020f216..ac72bc2 100644
--- a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMsg.java
+++ b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/ConsoleMsg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,6 +81,7 @@ public class ConsoleMsg extends NLS {
 	public static String CONSOLE_HELP_PROFILE_HEADING;
 	public static String CONSOLE_HELP_PROFILELOG_DESCRIPTION;
 	public static String CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION;
+	public static String CONSOLE_HELP_HELP_COMMAND_DESCRIPTION;
 
 	public static String CONSOLE_NO_BUNDLE_SPECIFIED_ERROR;
 	public static String CONSOLE_NOTHING_TO_INSTALL_ERROR;
@@ -141,6 +142,8 @@ public class ConsoleMsg extends NLS {
 	public static String CONSOLE_REQUIRES_MESSAGE;
 	public static String CONSOLE_CAN_NOT_USE_STARTLEVEL_NO_STARTLEVEL_SVC_ERROR;
 	public static String CONSOLE_CANNOT_FIND_BUNDLE_ERROR;
+	public static String CONSOLE_PROPS_COMMAND_DESCRIPTION;
+	public static String CONSOLE_THREADS_COMMAND_DESCRIPTION;
 
 	public static String STARTLEVEL_FRAMEWORK_ACTIVE_STARTLEVEL;
 	public static String STARTLEVEL_BUNDLE_STARTLEVEL;
diff --git a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandInterpreter.java b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandInterpreter.java
index a54f2d8..c23e1fe 100644
--- a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandInterpreter.java
+++ b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandInterpreter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 	/** The command line in StringTokenizer form */
 	private StringTokenizer tok;
 	/** The active CommandProviders */
-	private Object[] commandProviders;
+	private CommandProvider[] commandProviders;
 	/** The FrameworkConsole */
 	private FrameworkConsole con;
 	/** The stream to send output to */
@@ -60,7 +60,7 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 	 *  The constructor.  It turns the cmdline string into a StringTokenizer and remembers
 	 *  the input parms.
 	 */
-	public FrameworkCommandInterpreter(String cmdline, Object[] commandProviders, FrameworkConsole con) {
+	public FrameworkCommandInterpreter(String cmdline, CommandProvider[] commandProviders, FrameworkConsole con) {
 		tok = new StringTokenizer(cmdline);
 		this.commandProviders = commandProviders;
 		this.con = con;
@@ -144,44 +144,105 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 			}
 			return retval;
 		}
-		Class[] parameterTypes = new Class[] {CommandInterpreter.class};
+
+		// handle "help" command here
+		if (cmd.equalsIgnoreCase("help") && !tok.hasMoreElements()) { //$NON-NLS-1$
+			displayAllHelp();
+			return retval;
+		}
+
+		Class<?>[] parameterTypes = new Class[] {CommandInterpreter.class};
 		Object[] parameters = new Object[] {this};
 		boolean executed = false;
 		int size = commandProviders.length;
-		for (int i = 0; !executed && (i < size); i++) {
-			try {
-				Object target = commandProviders[i];
-				Method method = target.getClass().getMethod("_" + cmd, parameterTypes); //$NON-NLS-1$
-				retval = method.invoke(target, parameters);
-				executed = true; // stop after the command has been found
-			} catch (NoSuchMethodException ite) {
-				// keep going - maybe another command provider will be able to execute this command
-			} catch (InvocationTargetException ite) {
-				executed = true; // don't want to keep trying - we found the method but got an error
-				printStackTrace(ite.getTargetException());
-			} catch (Exception ee) {
-				executed = true; // don't want to keep trying - we got an error we don't understand
-				printStackTrace(ee);
+
+		if (cmd.equalsIgnoreCase("help") && tok.hasMoreElements()) { //$NON-NLS-1$
+			String commandName = nextArgument();
+
+			String builtinHelp = getHelp(commandName);
+			if (builtinHelp != null) {
+				print(builtinHelp);
+				return builtinHelp;
 			}
-		}
-		// if no command was found to execute, display help for all registered command providers
-		if (!executed) {
 			for (int i = 0; i < size; i++) {
+				// re-create the StringTokenizer for the call of each CommandProvider - there may be help commands in more than one CommandProvider
+				tok = new StringTokenizer(commandName);
+				boolean isException = false;
+				Object target = commandProviders[i];
+				Method method = null;
 				try {
-					CommandProvider commandProvider = (CommandProvider) commandProviders[i];
-					out.print(commandProvider.getHelp());
-					out.flush();
+					method = target.getClass().getMethod("_" + cmd, parameterTypes); //$NON-NLS-1$
+					retval = method.invoke(target, parameters);
+				} catch (NoSuchMethodException e) {
+					// keep going - maybe another command provider will provide help <command> method
+					isException = true;
+				} catch (InvocationTargetException e) {
+					// keep going - maybe another command provider will provide help <command> method
+					printStackTrace(e.getTargetException());
+					isException = true;
 				} catch (Exception ee) {
 					printStackTrace(ee);
 				}
+
+				if (retval != null) {
+					if (retval instanceof Boolean) {
+						executed = executed || ((Boolean) retval).booleanValue();
+					} else if (retval instanceof String) {
+						print(retval);
+						return retval;
+					} else {
+						// this could happen if a CommandProvider provides an arbitrary help command;
+						// since there is no way to determine if this CommandProvider provides the search command,
+						// we should continue with the other CommandProvider
+						executed = true;
+					}
+				} else {
+					// if the return value is null, but there was no exception assume that a help method was called
+					executed = executed || !isException;
+				}
+			}
+		} else {
+			for (int i = 0; !executed && (i < size); i++) {
+				try {
+					Object target = commandProviders[i];
+					Method method = target.getClass().getMethod("_" + cmd, parameterTypes); //$NON-NLS-1$
+					retval = method.invoke(target, parameters);
+					executed = true; // stop after the command has been found
+				} catch (NoSuchMethodException ite) {
+					// keep going - maybe another command provider will be able to execute this command
+				} catch (InvocationTargetException ite) {
+					executed = true; // don't want to keep trying - we found the method but got an error
+					printStackTrace(ite.getTargetException());
+				} catch (Exception ee) {
+					executed = true; // don't want to keep trying - we got an error we don't understand
+					printStackTrace(ee);
+				}
 			}
-			// call help for the more command provided by this class
-			out.print(getHelp());
-			out.flush();
+		}
+
+		// if no command was found to execute, display help for all registered command providers
+		if (!executed) {
+			displayAllHelp();
 		}
 		return retval;
 	}
 
+	private void displayAllHelp() {
+		int size = commandProviders.length;
+		for (int i = 0; i < size; i++) {
+			try {
+				CommandProvider commandProvider = commandProviders[i];
+				out.print(commandProvider.getHelp());
+				out.flush();
+			} catch (Exception ee) {
+				printStackTrace(ee);
+			}
+		}
+		// call help for the more command provided by this class
+		out.print(getHelp(null));
+		out.flush();
+	}
+
 	private Object innerExecute(String cmd) {
 		if (cmd != null && cmd.length() > 0) {
 			CommandInterpreter intcp = new FrameworkCommandInterpreter(cmd, commandProviders, con);
@@ -270,21 +331,23 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 		Method[] methods = t.getClass().getMethods();
 
 		int size = methods.length;
-		Class throwable = Throwable.class;
+		Class<Throwable> throwable = Throwable.class;
 
 		for (int i = 0; i < size; i++) {
 			Method method = methods[i];
 
 			if (Modifier.isPublic(method.getModifiers()) && method.getName().startsWith("get") && throwable.isAssignableFrom(method.getReturnType()) && (method.getParameterTypes().length == 0)) { //$NON-NLS-1$
 				try {
-					Throwable nested = (Throwable) method.invoke(t, null);
+					Throwable nested = (Throwable) method.invoke(t, (Object[]) null);
 
 					if ((nested != null) && (nested != t)) {
 						out.println(ConsoleMsg.CONSOLE_NESTED_EXCEPTION);
 						printStackTrace(nested);
 					}
 				} catch (IllegalAccessException e) {
+					// nothing
 				} catch (InvocationTargetException e) {
+					// nothing
 				}
 			}
 		}
@@ -319,13 +382,13 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 	 * @param dic	the dictionary to print
 	 * @param title	the header to print above the key/value pairs
 	 */
-	public void printDictionary(Dictionary dic, String title) {
+	public void printDictionary(Dictionary<?, ?> dic, String title) {
 		if (dic == null)
 			return;
 
 		int count = dic.size();
 		String[] keys = new String[count];
-		Enumeration keysEnum = dic.keys();
+		Enumeration<?> keysEnum = dic.keys();
 		int i = 0;
 		while (keysEnum.hasMoreElements()) {
 			keys[i++] = (String) keysEnum.nextElement();
@@ -364,6 +427,7 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 						try {
 							in.close();
 						} catch (IOException e) {
+							// nothing
 						}
 					}
 				}
@@ -396,19 +460,32 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 	 Answer a string (may be as many lines as you like) with help
 	 texts that explain the command.
 	 */
-	public String getHelp() {
+	public String getHelp(String commandName) {
+		boolean all = commandName == null;
 		StringBuffer help = new StringBuffer(256);
-		help.append(ConsoleMsg.CONSOLE_HELP_CONTROLLING_CONSOLE_HEADING);
-		help.append(newline);
-		help.append(tab);
-		help.append("more - "); //$NON-NLS-1$
-		help.append(ConsoleMsg.CONSOLE_HELP_MORE);
-		help.append(newline);
-		help.append(tab);
-		help.append("disconnect - "); //$NON-NLS-1$
-		help.append(ConsoleMsg.CONSOLE_HELP_DISCONNECT);
-		help.append(newline);
-		return help.toString();
+		if (all) {
+			help.append(ConsoleMsg.CONSOLE_HELP_CONTROLLING_CONSOLE_HEADING);
+			help.append(newline);
+		}
+		if (all || "more".equals(commandName)) { //$NON-NLS-1$
+			help.append(tab);
+			help.append("more - "); //$NON-NLS-1$
+			help.append(ConsoleMsg.CONSOLE_HELP_MORE);
+			help.append(newline);
+		}
+		if (all || "disconnect".equals(commandName)) { //$NON-NLS-1$
+			help.append(tab);
+			help.append("disconnect - "); //$NON-NLS-1$
+			help.append(ConsoleMsg.CONSOLE_HELP_DISCONNECT);
+			help.append(newline);
+		}
+		if (all || "help".equals(commandName)) { //$NON-NLS-1$
+			help.append(tab);
+			help.append("help <commmand> - "); //$NON-NLS-1$
+			help.append(ConsoleMsg.CONSOLE_HELP_HELP_COMMAND_DESCRIPTION);
+			help.append(newline);
+		}
+		return help.length() == 0 ? null : help.toString();
 	}
 
 	/**
@@ -512,6 +589,7 @@ public class FrameworkCommandInterpreter implements CommandInterpreter {
 					return answer;
 				}
 			} catch (NumberFormatException e) {
+				// nothing
 			}
 			println(ConsoleMsg.CONSOLE_INVALID_INPUT);
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandProvider.java b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandProvider.java
index da34820..20036db 100644
--- a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandProvider.java
+++ b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkCommandProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.lang.reflect.Field;
 import java.net.URL;
 import java.security.ProtectionDomain;
 import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.osgi.framework.console.CommandInterpreter;
 import org.eclipse.osgi.framework.console.CommandProvider;
 import org.eclipse.osgi.internal.permadmin.SecurityAdmin;
@@ -27,6 +28,7 @@ import org.osgi.service.condpermadmin.ConditionalPermissionInfo;
 import org.osgi.service.condpermadmin.ConditionalPermissionUpdate;
 import org.osgi.service.packageadmin.PackageAdmin;
 import org.osgi.service.packageadmin.RequiredBundle;
+import org.osgi.service.startlevel.StartLevel;
 
 /**
  * This class provides methods to execute commands from the command line.  It registers
@@ -56,7 +58,7 @@ import org.osgi.service.packageadmin.RequiredBundle;
  headers (<id>|<location>) - print bundle headers
  packages {<pkgname>|<id>|<location>} - display imported/exported package details
  props - display System properties
- services {filter} - display registered service details
+ services {filter} - display registered service details. Examples for [filter]: (objectClass=com.xyz.Person); (&(objectClass=com.xyz.Person)(sn=Jensen)); passing only com.xyz.Person is a shortcut for (objectClass=com.xyz.Person). The filter syntax specification is available at http://www.ietf.org/rfc/rfc1960.txt
  ss - display installed bundles (short status)
  status - display installed bundles and registered services
  threads - display threads and thread groups
@@ -69,6 +71,8 @@ import org.osgi.service.packageadmin.RequiredBundle;
  setfwsl <start level> - set the framework start level
  setbsl <start level> (<id>|<location>) - set the start level for the bundle(s)
  setibsl <start level> - set the initial bundle start level
+ ---Getting Help---
+ help <command> - Display help for the specified command
  
  *
  *  There is a method for each command which is named '_'+method.  The methods are
@@ -83,14 +87,19 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 	/** The start level implementation */
 	private final StartLevelManager slImpl;
 	private final SecurityAdmin securityAdmin;
-	private ServiceRegistration providerReg;
+	private ServiceRegistration<?> providerReg;
 
 	/** Strings used to format other strings */
 	private final static String tab = "\t"; //$NON-NLS-1$
 	private final static String newline = "\r\n"; //$NON-NLS-1$
 
 	/** this list contains the bundles known to be lazily awaiting activation */
-	private final List lazyActivation = new ArrayList();
+	private final List<Bundle> lazyActivation = new ArrayList<Bundle>();
+
+	/** this map contains the mapping between the command name and its description and eventually arguments.*/
+	private Map<String, String[]> commandsHelp = null;
+	/** this map contains the mapping between the command groups and the names of the commands in each group*/
+	private Map<String, String[]> commandGroups = null;
 
 	/**
 	 *  Constructor.
@@ -113,7 +122,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 	 *  Adds this object as a SynchronousBundleListener.
 	 */
 	void start() {
-		Dictionary props = new Hashtable();
+		Dictionary<String, Object> props = new Hashtable<String, Object>();
 		props.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE));
 		providerReg = context.registerService(CommandProvider.class.getName(), this, props);
 		context.addBundleListener(this);
@@ -133,44 +142,107 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 	 @return The help string
 	 */
 	public String getHelp() {
+		return getHelp(null);
+	}
+
+	/* This method either returns the help message for a particular command, 
+	 * or returns the help messages for all commands (if commandName is not specified)*/
+	private String getHelp(String commandName) {
 		StringBuffer help = new StringBuffer(1024);
-		addHeader(ConsoleMsg.CONSOLE_HELP_CONTROLLING_FRAMEWORK_HEADER, help);
-		addCommand("launch", ConsoleMsg.CONSOLE_HELP_LAUNCH_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("shutdown", ConsoleMsg.CONSOLE_HELP_SHUTDOWN_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("close", ConsoleMsg.CONSOLE_HELP_CLOSE_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("exit", ConsoleMsg.CONSOLE_HELP_EXIT_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("init", ConsoleMsg.CONSOLE_HELP_INIT_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("setprop", ConsoleMsg.CONSOLE_HELP_KEYVALUE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SETPROP_COMMAND_DESCRIPTION, help); //$NON-NLS-1$  
-		addHeader(ConsoleMsg.CONSOLE_HELP_CONTROLLING_BUNDLES_HEADER, help);
-		addCommand("install", ConsoleMsg.CONSOLE_HELP_INSTALL_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("uninstall", ConsoleMsg.CONSOLE_HELP_UNINSTALL_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("start", ConsoleMsg.CONSOLE_HELP_START_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("stop", ConsoleMsg.CONSOLE_HELP_STOP_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("refresh", ConsoleMsg.CONSOLE_HELP_REFRESH_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("update", ConsoleMsg.CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addHeader(ConsoleMsg.CONSOLE_HELP_DISPLAYING_STATUS_HEADER, help);
-		addCommand("status", ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("ss", ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SS_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("services", ConsoleMsg.CONSOLE_HELP_FILTER_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SERVICES_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("packages", ConsoleMsg.CONSOLE_HELP_PACKAGES_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("bundles", ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLES_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("bundle", ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("headers", ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addHeader(ConsoleMsg.CONSOLE_HELP_EXTRAS_HEADER, help);
-		addCommand("exec", ConsoleMsg.CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_EXEC_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("fork", ConsoleMsg.CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_FORK_COMMAND_DESCRIPTION, help); //$NON-NLS-1$
-		addCommand("gc", ConsoleMsg.CONSOLE_HELP_GC_COMMAND_DESCRIPTION, help); //$NON-NLS-1$ 
-		addCommand("getprop ", ConsoleMsg.CONSOLE_HELP_GETPROP_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_GETPROP_COMMAND_DESCRIPTION, help);//$NON-NLS-1$
-		addHeader(ConsoleMsg.STARTLEVEL_HELP_HEADING, help);
-		addCommand("sl", ConsoleMsg.CONSOLE_HELP_OPTIONAL_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SL, help); //$NON-NLS-1$ 
-		addCommand("setfwsl", ConsoleMsg.STARTLEVEL_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETFWSL, help); //$NON-NLS-1$ 
-		addCommand("setbsl", ConsoleMsg.STARTLEVEL_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETBSL, help); //$NON-NLS-1$ 
-		addCommand("setibsl", ConsoleMsg.STARTLEVEL_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETIBSL, help); //$NON-NLS-1$ 
-		addHeader(ConsoleMsg.CONSOLE_HELP_PROFILE_HEADING, help);
-		addCommand("profilelog", ConsoleMsg.CONSOLE_HELP_PROFILELOG_DESCRIPTION, help); //$NON-NLS-1$ 	
+
+		if (commandsHelp == null) {
+			initializeCommandsHelp();
+		}
+
+		if (commandGroups == null) {
+			initializeCommandGroups();
+		}
+
+		if (commandName != null) {
+			if (commandsHelp.containsKey(commandName)) {
+				addCommand(commandName, commandsHelp.get(commandName), help);
+			}
+			return help.toString();
+		}
+
+		for (Entry<String, String[]> groupEntry : commandGroups.entrySet()) {
+			addHeader(groupEntry.getKey(), help);
+			for (String command : groupEntry.getValue()) {
+				addCommand(command, commandsHelp.get(command), help);
+			}
+		}
+
 		return help.toString();
 	}
 
+	private void initializeCommandsHelp() {
+		commandsHelp = new HashMap<String, String[]>();
+		// add help for commands for controlling the framework
+		commandsHelp.put("launch", new String[] {ConsoleMsg.CONSOLE_HELP_LAUNCH_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("shutdown", new String[] {ConsoleMsg.CONSOLE_HELP_SHUTDOWN_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("close", new String[] {ConsoleMsg.CONSOLE_HELP_CLOSE_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("exit", new String[] {ConsoleMsg.CONSOLE_HELP_EXIT_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("init", new String[] {ConsoleMsg.CONSOLE_HELP_INIT_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("setprop", new String[] {ConsoleMsg.CONSOLE_HELP_KEYVALUE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SETPROP_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("setp", new String[] {ConsoleMsg.CONSOLE_HELP_KEYVALUE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SETPROP_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+
+		// add help for commands for controlling bundles
+		commandsHelp.put("install", new String[] {ConsoleMsg.CONSOLE_HELP_INSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("i", new String[] {ConsoleMsg.CONSOLE_HELP_INSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("uninstall", new String[] {ConsoleMsg.CONSOLE_HELP_UNINSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("un", new String[] {ConsoleMsg.CONSOLE_HELP_UNINSTALL_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("start", new String[] {ConsoleMsg.CONSOLE_HELP_START_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("sta", new String[] {ConsoleMsg.CONSOLE_HELP_START_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("stop", new String[] {ConsoleMsg.CONSOLE_HELP_STOP_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("sto", new String[] {ConsoleMsg.CONSOLE_HELP_STOP_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("refresh", new String[] {ConsoleMsg.CONSOLE_HELP_REFRESH_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("r", new String[] {ConsoleMsg.CONSOLE_HELP_REFRESH_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("update", new String[] {ConsoleMsg.CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("up", new String[] {ConsoleMsg.CONSOLE_HELP_UPDATE_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+
+		// add help for commands for displaying status
+		commandsHelp.put("status", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("s", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_STATUS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("ss", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("services", new String[] {ConsoleMsg.CONSOLE_HELP_FILTER_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_SERVICES_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("packages", new String[] {ConsoleMsg.CONSOLE_HELP_PACKAGES_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("p", new String[] {ConsoleMsg.CONSOLE_HELP_PACKAGES_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_PACKAGES_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("bundles", new String[] {ConsoleMsg.CONSOLE_HELP_STATE_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLES_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("bundle", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("b", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_BUNDLE_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("headers", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("h", new String[] {ConsoleMsg.CONSOLE_HELP_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+
+		// add help for extra commands
+		commandsHelp.put("exec", new String[] {ConsoleMsg.CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_EXEC_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("fork", new String[] {ConsoleMsg.CONSOLE_HELP_COMMAND_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_FORK_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("gc", new String[] {ConsoleMsg.CONSOLE_HELP_GC_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("getprop", new String[] {ConsoleMsg.CONSOLE_HELP_GETPROP_ARGUMENT_DESCRIPTION, ConsoleMsg.CONSOLE_HELP_GETPROP_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("props", new String[] {ConsoleMsg.CONSOLE_PROPS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("pr", new String[] {ConsoleMsg.CONSOLE_PROPS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("threads", new String[] {ConsoleMsg.CONSOLE_THREADS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+		commandsHelp.put("t", new String[] {ConsoleMsg.CONSOLE_THREADS_COMMAND_DESCRIPTION}); //$NON-NLS-1$
+
+		// add help for startlevel commands
+		commandsHelp.put("sl", new String[] {ConsoleMsg.CONSOLE_HELP_OPTIONAL_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SL}); //$NON-NLS-1$
+		commandsHelp.put("setfwsl", new String[] {ConsoleMsg.STARTLEVEL_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETFWSL}); //$NON-NLS-1$
+		commandsHelp.put("setbsl", new String[] {ConsoleMsg.STARTLEVEL_IDLOCATION_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETBSL}); //$NON-NLS-1$
+		commandsHelp.put("setibsl", new String[] {ConsoleMsg.STARTLEVEL_ARGUMENT_DESCRIPTION, ConsoleMsg.STARTLEVEL_HELP_SETIBSL}); //$NON-NLS-1$
+
+		// add help for profilelog command
+		commandsHelp.put("profilelog", new String[] {ConsoleMsg.CONSOLE_HELP_PROFILELOG_DESCRIPTION}); //$NON-NLS-1$
+	}
+
+	private void initializeCommandGroups() {
+		commandGroups = new LinkedHashMap<String, String[]>();
+		commandGroups.put(ConsoleMsg.CONSOLE_HELP_CONTROLLING_FRAMEWORK_HEADER, new String[] {"launch", "shutdown", "close", "exit", "init", "setprop"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+		commandGroups.put(ConsoleMsg.CONSOLE_HELP_CONTROLLING_BUNDLES_HEADER, new String[] {"install", "uninstall", "start", "stop", "refresh", "update"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+		commandGroups.put(ConsoleMsg.CONSOLE_HELP_DISPLAYING_STATUS_HEADER, new String[] {"status", "ss", "services", "packages", "bundles", "bundle", "headers"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
+		commandGroups.put(ConsoleMsg.CONSOLE_HELP_EXTRAS_HEADER, new String[] {"exec", "fork", "gc", "getprop", "props", "threads"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+		commandGroups.put(ConsoleMsg.STARTLEVEL_HELP_HEADING, new String[] {"sl", "setfwsl", "setbsl", "setibsl"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		commandGroups.put(ConsoleMsg.CONSOLE_HELP_PROFILE_HEADING, new String[] {"profilelog"}); //$NON-NLS-1$
+	}
+
 	/** Private helper method for getHelp.  Formats the help headers. */
 	private void addHeader(String header, StringBuffer help) {
 		help.append("---"); //$NON-NLS-1$
@@ -188,7 +260,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 		help.append(newline);
 	}
 
-	/** Private helper method for getHelp.  Formats the command descriptions with command arguements. */
+	/** Private helper method for getHelp.  Formats the command descriptions with command arguments. */
 	private void addCommand(String command, String parameters, String description, StringBuffer help) {
 		help.append(tab);
 		help.append(command);
@@ -199,6 +271,15 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 		help.append(newline);
 	}
 
+	/** Private helper method for getHelp. According to its arguments chooses which one of the above addCommand methods to use. */
+	private void addCommand(String command, String[] attributes, StringBuffer help) {
+		if (attributes.length == 1) {
+			addCommand(command, attributes[0], help);
+		} else if (attributes.length == 2) {
+			addCommand(command, attributes[0], attributes[1], help);
+		}
+	}
+
 	/**
 	 *  Handle the exit command.  Exit immediately (System.exit)
 	 *
@@ -498,7 +579,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 			intp.println(bundle.bundledata);
 		}
 
-		ServiceReference[] services = context.getServiceReferences(null, null);
+		ServiceReference<?>[] services = context.getServiceReferences((String) null, (String) null);
 		if (services != null) {
 			intp.println(ConsoleMsg.CONSOLE_REGISTERED_SERVICES_MESSAGE);
 			size = services.length;
@@ -536,12 +617,36 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 			filter = buf.toString();
 		}
 
-		ServiceReference[] services = context.getServiceReferences(null, filter);
+		InvalidSyntaxException originalException = null;
+		ServiceReference<?>[] services = null;
+
+		try {
+			services = context.getServiceReferences((String) null, filter);
+		} catch (InvalidSyntaxException e) {
+			originalException = e;
+		}
+
+		if (filter != null) {
+			filter = filter.trim();
+		}
+		// If the filter is invalid and does not start with a bracket, probably the argument was the name of an interface.
+		// Try to construct an object class filter with this argument, and if still invalid - throw the original InvalidSyntaxException
+		if (originalException != null && !filter.startsWith("(") && filter.indexOf(' ') < 0) { //$NON-NLS-1$
+			try {
+				filter = "(" + Constants.OBJECTCLASS + "=" + filter + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				services = context.getServiceReferences((String) null, filter);
+			} catch (InvalidSyntaxException e) {
+				throw originalException;
+			}
+		} else if (originalException != null) {
+			throw originalException;
+		}
+
 		if (services != null) {
 			int size = services.length;
 			if (size > 0) {
 				for (int j = 0; j < size; j++) {
-					ServiceReference service = services[j];
+					ServiceReference<?> service = services[j];
 					intp.println(service);
 					intp.print("  "); //$NON-NLS-1$
 					intp.print(ConsoleMsg.CONSOLE_REGISTERED_BY_BUNDLE_MESSAGE);
@@ -588,9 +693,9 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 			bundle = getBundleFromToken(intp, token, false);
 		}
 
-		org.osgi.framework.ServiceReference packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
+		ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
 		if (packageAdminRef != null) {
-			org.osgi.service.packageadmin.PackageAdmin packageAdmin = (org.osgi.service.packageadmin.PackageAdmin) context.getService(packageAdminRef);
+			PackageAdmin packageAdmin = (PackageAdmin) context.getService(packageAdminRef);
 			if (packageAdmin != null) {
 				try {
 					org.osgi.service.packageadmin.ExportedPackage[] packages = null;
@@ -682,7 +787,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 				intp.println();
 			}
 
-			ServiceReference[] services = bundle.getRegisteredServices();
+			ServiceReference<?>[] services = bundle.getRegisteredServices();
 			if (services != null) {
 				intp.print("  "); //$NON-NLS-1$
 				intp.println(ConsoleMsg.CONSOLE_REGISTERED_SERVICES_MESSAGE);
@@ -749,7 +854,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 					intp.println();
 				}
 
-				ServiceReference[] services = bundle.getRegisteredServices();
+				ServiceReference<?>[] services = bundle.getRegisteredServices();
 				if (services != null) {
 					intp.print("  "); //$NON-NLS-1$
 					intp.println(ConsoleMsg.CONSOLE_REGISTERED_SERVICES_MESSAGE);
@@ -775,13 +880,13 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 					intp.println(ConsoleMsg.CONSOLE_NO_SERVICES_IN_USE_MESSAGE);
 				}
 
-				org.osgi.framework.ServiceReference packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
+				ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
 				if (packageAdminRef != null) {
 					BundleDescription desc = bundle.getBundleDescription();
 					if (desc != null) {
 						boolean title = true;
 						try {
-							ExportPackageDescription[] exports = desc.getExportPackages();
+							ExportPackageDescription[] exports = desc.getSelectedExports();
 							if (exports == null || exports.length == 0) {
 								intp.print("  "); //$NON-NLS-1$
 								intp.println(ConsoleMsg.CONSOLE_NO_EXPORTED_PACKAGES_MESSAGE);
@@ -813,7 +918,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 							}
 							title = true;
 							if (desc != null) {
-								ArrayList fragmentsImportPackages = new ArrayList();
+								List<ImportPackageSpecification> fragmentsImportPackages = new ArrayList<ImportPackageSpecification>();
 
 								// Get bundle' fragments imports
 								BundleDescription[] fragments = desc.getFragments();
@@ -836,7 +941,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 
 									int offset = directImportPackages.length;
 									for (int i = 0; i < fragmentsImportPackages.size(); i++) {
-										importPackages[offset + i] = (ImportPackageSpecification) fragmentsImportPackages.get(i);
+										importPackages[offset + i] = fragmentsImportPackages.get(i);
 									}
 								} else {
 									importPackages = desc.getImportPackages();
@@ -847,7 +952,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 								imports = desc.getContainingState().getStateHelper().getVisiblePackages(desc, StateHelper.VISIBLE_INCLUDE_EE_PACKAGES | StateHelper.VISIBLE_INCLUDE_ALL_HOST_WIRES);
 
 								// Get the unresolved optional and dynamic imports
-								ArrayList unresolvedImports = new ArrayList();
+								List<ImportPackageSpecification> unresolvedImports = new ArrayList<ImportPackageSpecification>();
 
 								for (int i = 0; i < importPackages.length; i++) {
 									if (importPackages[i].getDirective(Constants.RESOLUTION_DIRECTIVE).equals(ImportPackageSpecification.RESOLUTION_OPTIONAL)) {
@@ -1014,9 +1119,9 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 		return title;
 	}
 
-	private void printUnwiredDynamicImports(ArrayList dynamicImports, CommandInterpreter intp) {
+	private void printUnwiredDynamicImports(List<ImportPackageSpecification> dynamicImports, CommandInterpreter intp) {
 		for (int i = 0; i < dynamicImports.size(); i++) {
-			ImportPackageSpecification importPackage = (ImportPackageSpecification) dynamicImports.get(i);
+			ImportPackageSpecification importPackage = dynamicImports.get(i);
 			intp.print("    "); //$NON-NLS-1$
 			intp.print(importPackage.getName());
 			intp.print("; version=\""); //$NON-NLS-1$
@@ -1065,6 +1170,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 	 *
 	 *  @param intp A CommandInterpreter object containing the command and it's arguments.
 	 */
+	@SuppressWarnings("deprecation")
 	public void _init(CommandInterpreter intp) throws Exception {
 		if (framework.isActive()) {
 			intp.print(newline);
@@ -1104,8 +1210,8 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 		}
 		// clear the permissions from conditional permission admin
 		if (securityAdmin != null)
-			for (Enumeration infos = securityAdmin.getConditionalPermissionInfos(); infos.hasMoreElements();)
-				((ConditionalPermissionInfo) infos.nextElement()).delete();
+			for (Enumeration<ConditionalPermissionInfo> infos = securityAdmin.getConditionalPermissionInfos(); infos.hasMoreElements();)
+				infos.nextElement().delete();
 	}
 
 	/**
@@ -1134,22 +1240,22 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 	 *  @param intp A CommandInterpreter object containing the command and it's arguments.
 	 */
 	public void _refresh(CommandInterpreter intp) throws Exception {
-		org.osgi.framework.ServiceReference packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
+		ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
 		if (packageAdminRef != null) {
 			org.osgi.service.packageadmin.PackageAdmin packageAdmin = (org.osgi.service.packageadmin.PackageAdmin) context.getService(packageAdminRef);
 			if (packageAdmin != null) {
 				try {
-					AbstractBundle[] refresh = null;
+					Bundle[] refresh = null;
 
 					String token = intp.nextArgument();
 					if (token != null) {
-						Vector bundles = new Vector();
+						List<Bundle> bundles = new ArrayList<Bundle>();
 
 						while (token != null) {
 							AbstractBundle bundle = getBundleFromToken(intp, token, true);
 
 							if (bundle != null) {
-								bundles.addElement(bundle);
+								bundles.add(bundle);
 							}
 							token = intp.nextArgument();
 						}
@@ -1161,8 +1267,8 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 							return;
 						}
 
-						refresh = new AbstractBundle[size];
-						bundles.copyInto(refresh);
+						refresh = new Bundle[size];
+						bundles.toArray(refresh);
 					}
 
 					packageAdmin.refreshPackages(refresh);
@@ -1285,7 +1391,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 				Properties newprops = new Properties();
 				newprops.load(in);
 				intp.println(ConsoleMsg.CONSOLE_SETTING_PROPERTIES_TITLE);
-				Enumeration keys = newprops.propertyNames();
+				Enumeration<?> keys = newprops.propertyNames();
 				while (keys.hasMoreElements()) {
 					String key = (String) keys.nextElement();
 					String value = (String) newprops.get(key);
@@ -1549,9 +1655,9 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 
 		String token = intp.nextArgument();
 
-		org.osgi.framework.ServiceReference packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
+		ServiceReference<?> packageAdminRef = context.getServiceReference("org.osgi.service.packageadmin.PackageAdmin"); //$NON-NLS-1$
 		if (packageAdminRef != null) {
-			org.osgi.service.packageadmin.PackageAdmin packageAdmin = (org.osgi.service.packageadmin.PackageAdmin) context.getService(packageAdminRef);
+			PackageAdmin packageAdmin = (PackageAdmin) context.getService(packageAdminRef);
 			if (packageAdmin != null) {
 				try {
 					org.osgi.service.packageadmin.RequiredBundle[] symBundles = null;
@@ -1618,7 +1724,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 		if (nextArg == null)
 			return;
 		AbstractBundle bundle = getBundleFromToken(intp, nextArg, true);
-		ServiceReference ref = context.getServiceReference("org.eclipse.osgi.service.resolver.PlatformAdmin"); //$NON-NLS-1$
+		ServiceReference<?> ref = context.getServiceReference("org.eclipse.osgi.service.resolver.PlatformAdmin"); //$NON-NLS-1$
 		if (ref == null)
 			return;
 		PlatformAdmin platformAdmin = (PlatformAdmin) context.getService(ref);
@@ -1633,15 +1739,30 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 	}
 
 	/**
+	 * Handles the help command
+	 * 
+	 * @param intp
+	 * @return description for a particular command or false if there is no command with the specified name
+	 */
+	public Object _help(CommandInterpreter intp) {
+		String commandName = intp.nextArgument();
+		if (commandName == null) {
+			return false;
+		}
+		String help = getHelp(commandName);
+		return help.length() > 0 ? help : false;
+	}
+
+	/**
 	 * Checks for the presence of the StartLevel Service.  Outputs a message if it is not present.
 	 * @param intp The CommandInterpreter object to be used to write to the console
 	 * @return true or false if service is present or not
 	 */
 	protected boolean isStartLevelSvcPresent(CommandInterpreter intp) {
 		boolean retval = false;
-		org.osgi.framework.ServiceReference slSvcRef = context.getServiceReference("org.osgi.service.startlevel.StartLevel"); //$NON-NLS-1$
+		ServiceReference<?> slSvcRef = context.getServiceReference("org.osgi.service.startlevel.StartLevel"); //$NON-NLS-1$
 		if (slSvcRef != null) {
-			org.osgi.service.startlevel.StartLevel slSvc = (org.osgi.service.startlevel.StartLevel) context.getService(slSvcRef);
+			StartLevel slSvc = (StartLevel) context.getService(slSvcRef);
 			if (slSvc != null) {
 				retval = true;
 			}
@@ -1768,7 +1889,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 
 	private boolean isDisabled(Bundle bundle) {
 		boolean disabled = false;
-		ServiceReference platformAdminRef = null;
+		ServiceReference<?> platformAdminRef = null;
 		try {
 			platformAdminRef = context.getServiceReference(PlatformAdmin.class.getName());
 			if (platformAdminRef != null) {
@@ -1843,7 +1964,7 @@ public class FrameworkCommandProvider implements CommandProvider, SynchronousBun
 	public void _getprop(CommandInterpreter ci) throws Exception {
 		Properties allProperties = FrameworkProperties.getProperties();
 		String filter = ci.nextArgument();
-		Iterator propertyNames = new TreeSet(allProperties.keySet()).iterator();
+		Iterator<?> propertyNames = new TreeSet<Object>(allProperties.keySet()).iterator();
 		while (propertyNames.hasNext()) {
 			String prop = (String) propertyNames.next();
 			if (filter == null || prop.startsWith(filter)) {
diff --git a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsole.java b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsole.java
index 317e2bb..8ecbcf9 100644
--- a/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsole.java
+++ b/eclipse/plugins/org.eclipse.osgi/console/src/org/eclipse/osgi/framework/internal/core/FrameworkConsole.java
@@ -12,8 +12,7 @@
 package org.eclipse.osgi.framework.internal.core;
 
 import java.io.*;
-import org.eclipse.osgi.framework.console.CommandInterpreter;
-import org.eclipse.osgi.framework.console.ConsoleSession;
+import org.eclipse.osgi.framework.console.*;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
@@ -32,7 +31,7 @@ public class FrameworkConsole implements Runnable {
 	/** The current bundle context */
 	private final BundleContext context;
 	/** A tracker containing the service object of all registered command providers */
-	private final ServiceTracker cptracker;
+	private final ServiceTracker<CommandProvider, CommandProvider> cptracker;
 	private final ConsoleSession consoleSession;
 	private final boolean isSystemInOut;
 	/** Default code page which must be supported by all JVMs */
@@ -42,7 +41,7 @@ public class FrameworkConsole implements Runnable {
 	private static final boolean blockOnready = FrameworkProperties.getProperty("osgi.dev") != null || FrameworkProperties.getProperty("osgi.console.blockOnReady") != null; //$NON-NLS-1$ //$NON-NLS-2$
 	volatile boolean shutdown = false;
 
-	public FrameworkConsole(BundleContext context, ConsoleSession consoleSession, boolean isSystemInOut, ServiceTracker cptracker) {
+	public FrameworkConsole(BundleContext context, ConsoleSession consoleSession, boolean isSystemInOut, ServiceTracker<CommandProvider, CommandProvider> cptracker) {
 		this.context = context;
 		this.cptracker = cptracker;
 		this.isSystemInOut = isSystemInOut;
@@ -185,13 +184,13 @@ public class FrameworkConsole implements Runnable {
 	 * @return Array of service objects; if no service
 	 * are being tracked then an empty array is returned
 	 */
-	public Object[] getServices() {
-		ServiceReference[] serviceRefs = cptracker.getServiceReferences();
+	public CommandProvider[] getServices() {
+		ServiceReference<CommandProvider>[] serviceRefs = cptracker.getServiceReferences();
 		if (serviceRefs == null)
-			return new Object[0];
+			return new CommandProvider[0];
 		Util.dsort(serviceRefs, 0, serviceRefs.length);
 
-		Object[] serviceObjects = new Object[serviceRefs.length];
+		CommandProvider[] serviceObjects = new CommandProvider[serviceRefs.length];
 		for (int i = 0; i < serviceRefs.length; i++)
 			serviceObjects[i] = FrameworkConsole.this.context.getService(serviceRefs[i]);
 		return serviceObjects;
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleClassLoader.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleClassLoader.java
index 34c9602..258b063 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleClassLoader.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleClassLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,9 @@ package org.eclipse.osgi.framework.adaptor;
 import java.io.IOException;
 import java.net.URL;
 import java.security.ProtectionDomain;
-import java.util.Enumeration;
+import java.util.*;
 import org.osgi.framework.BundleReference;
+import org.osgi.framework.wiring.BundleWiring;
 
 /**
  * The BundleClassLoader interface is used by the Framework to load local 
@@ -55,7 +56,7 @@ public interface BundleClassLoader /*extends ClassLoader*/extends BundleReferenc
 	 * @return An Enumeration of all resources found or null if the resource.
 	 * does not exist.
 	 */
-	public Enumeration findLocalResources(String resource);
+	public Enumeration<URL> findLocalResources(String resource);
 
 	/**
 	 * Finds a local class in the BundleClassLoader without
@@ -64,7 +65,7 @@ public interface BundleClassLoader /*extends ClassLoader*/extends BundleReferenc
 	 * @return The class object found.
 	 * @throws ClassNotFoundException if the classname does not exist locally.
 	 */
-	public Class findLocalClass(String classname) throws ClassNotFoundException;
+	public Class<?> findLocalClass(String classname) throws ClassNotFoundException;
 
 	/**
 	 * This method will first search the parent class loader for the resource;
@@ -82,7 +83,7 @@ public interface BundleClassLoader /*extends ClassLoader*/extends BundleReferenc
 	 * @param name the resource path to get.
 	 * @return an Enumeration of URL objects for the resource or <code>null</code> if the resource is not found.
 	 */
-	public Enumeration getResources(String name) throws IOException;
+	public Enumeration<URL> getResources(String name) throws IOException;
 
 	/**
 	 * This method will first search the parent class loader for the class;
@@ -92,7 +93,7 @@ public interface BundleClassLoader /*extends ClassLoader*/extends BundleReferenc
 	 * @return the Class.
 	 * @throws ClassNotFoundException
 	 */
-	public Class loadClass(String name) throws ClassNotFoundException;
+	public Class<?> loadClass(String name) throws ClassNotFoundException;
 
 	/**
 	 * Closes this class loader.  After this method is called
@@ -129,4 +130,49 @@ public interface BundleClassLoader /*extends ClassLoader*/extends BundleReferenc
 	 * @return the parent classloader used by this BundleClassLoader
 	 */
 	public ClassLoader getParent();
+
+	/**
+	 * Returns resource entries for the bundle associated with this class loader.  
+	 * This is used to answer a call to the 
+	 * {@link BundleWiring#findEntries(String, String, int)} method.
+	 * @param path The path name in which to look.
+	 * @param filePattern The file name pattern for selecting resource names in
+	 *        the specified path.
+	 * @param options The options for listing resource names.
+	 * @return a list of resource URLs.  If no resources are found then
+	 * the empty list is returned.
+	 * @see {@link BundleWiring#findEntries(String, String, int)}
+	 */
+	List<URL> findEntries(String path, String filePattern, int options);
+
+	/**
+	 * Returns the names of resources visible to this bundle class loader.
+	 * This is used to answer a call to the 
+	 * {@link BundleWiring#listResources(String, String, int)} method.
+	 * This method should simply return the result of calling
+	 * {@link ClassLoaderDelegate#listResources(String, String, int)}
+	 * @param path The path name in which to look.
+	 * @param filePattern The file name pattern for selecting resource names in
+	 *        the specified path.
+	 * @param options The options for listing resource names.
+	 * @return a collection of resource names.  If no resources are found then
+	 * the empty collection is returned.
+	 * @see {@link BundleWiring#listResources(String, String, int)}
+	 * @see {@link ClassLoaderDelegate#listResources(String, String, int)}
+	 */
+	Collection<String> listResources(String path, String filePattern, int options);
+
+	/**
+	 * Returns the names of local resources visible to this bundle class loader.
+	 * Only the resources available on the local class path of this bundle 
+	 * class loader are searched.
+	 * @param path The path name in which to look.
+	 * @param filePattern The file name pattern for selecting resource names in
+	 *        the specified path.
+	 * @param options The options for listing resource names.
+	 * @return a collection of resource names.  If no resources are found then
+	 * the empty collection is returned.
+	 * @see {@link ClassLoaderDelegate#listResources(String, String, int)}
+	 */
+	Collection<String> listLocalResources(String path, String filePattern, int options);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleData.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleData.java
index ff33a02..71efc11 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleData.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/BundleData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ import org.osgi.framework.*;
  * </p>
  * @since 3.1
  */
-public interface BundleData {
+public interface BundleData extends BundleReference {
 
 	/** The BundleData is for a fragment bundle */
 	public static final int TYPE_FRAGMENT = 0x00000001;
@@ -84,7 +84,7 @@ public interface BundleData {
 	 * @return An Enumeration of the entry paths or null if the specified path
 	 * does not exist.
 	 */
-	public Enumeration getEntryPaths(String path);
+	public Enumeration<String> getEntryPaths(String path);
 
 	/**
 	 * Returns the absolute path name of a native library. The BundleData
@@ -123,7 +123,7 @@ public interface BundleData {
 	 * @throws BundleException if an error occurred while reading the
 	 * bundle manifest data.
 	 */
-	public Dictionary getManifest() throws BundleException;
+	public Dictionary<String, String> getManifest() throws BundleException;
 
 	/**
 	 * Get the BundleData bundle ID.  This will be used as the bundle
@@ -245,4 +245,11 @@ public interface BundleData {
 	 * @return the DynamicImport-Packaget for this BundleData.
 	 */
 	public String getDynamicImports();
+
+	/**
+	 * Finds local resources by searching the class path of this bundle data.
+	 * @param path the requested resource name.
+	 * @return the requested enumeration of resource URLs or null if the resource does not exist
+	 */
+	public Enumeration<URL> findLocalResources(String path);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegate.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegate.java
index 997cadc..fd1ec3d 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegate.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,8 +13,10 @@ package org.eclipse.osgi.framework.adaptor;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Collection;
 import java.util.Enumeration;
 import org.osgi.framework.BundleException;
+import org.osgi.framework.wiring.BundleWiring;
 
 /**
  * A ClassLoaderDelegate is used by the BundleClassLoader in a similar
@@ -43,7 +45,7 @@ public interface ClassLoaderDelegate {
 	 * @return the Class.
 	 * @throws ClassNotFoundException if the class is not found.
 	 */
-	public Class findClass(String classname) throws ClassNotFoundException;
+	public Class<?> findClass(String classname) throws ClassNotFoundException;
 
 	/**
 	 * Finds a resource for a bundle that may be outside of the actual bundle
@@ -72,7 +74,7 @@ public interface ClassLoaderDelegate {
 	 * @return the enumeration of resources found or null if the resource
 	 * does not exist.
 	 */
-	public Enumeration findResources(String resource) throws IOException;
+	public Enumeration<URL> findResources(String resource) throws IOException;
 
 	/**
 	 * Returns the absolute path name of a native library.  The following is
@@ -109,4 +111,24 @@ public interface ClassLoaderDelegate {
 	 * @since 3.6
 	 */
 	public void setLazyTrigger() throws BundleException;
+
+	/**
+	 * Returns the names of resources visible to this delegate.
+	 * This is used to answer a call to the 
+	 * {@link BundleWiring#listResources(String, String, int)} method.
+	 * First a search is done on the packages imported by the bundle associated
+	 * with this delegate.  Next a search is done on the the bundles required by 
+	 * the bundle associated with this delegate.  Finally a local search of 
+	 * the bundle associated with this delegate is done by calling
+	 * {@link BundleClassLoader#listLocalResources(String, String, int)}.  Note
+	 * that for imported packages the search stops at the source for the import.
+	 * @param path The path name in which to look.
+	 * @param filePattern The file name pattern for selecting resource names in
+	 *        the specified path.
+	 * @param options The options for listing resource names.
+	 * @return a collection of resource names.  If no resources are found then
+	 * the empty collection is returned.
+	 * @see BundleWiring#listResources(String, String, int)
+	 */
+	public Collection<String> listResources(String path, String filePattern, int options);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegateHook.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegateHook.java
index e77e76d..424feb9 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegateHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/ClassLoaderDelegateHook.java
@@ -36,7 +36,7 @@ public interface ClassLoaderDelegateHook {
 	 * @return the class found by this hook or null if normal delegation should continue
 	 * @throws ClassNotFoundException to terminate the delegation and throw an exception
 	 */
-	public Class preFindClass(String name, BundleClassLoader classLoader, BundleData data) throws ClassNotFoundException;
+	public Class<?> preFindClass(String name, BundleClassLoader classLoader, BundleData data) throws ClassNotFoundException;
 
 	/**
 	 * Called by a {@link ClassLoaderDelegate#findClass(String)} method after delegating to the resolved constraints and 
@@ -48,7 +48,7 @@ public interface ClassLoaderDelegateHook {
 	 * @return the class found by this hook or null if normal delegation should continue
 	 * @throws ClassNotFoundException to terminate the delegation and throw an exception
 	 */
-	public Class postFindClass(String name, BundleClassLoader classLoader, BundleData data) throws ClassNotFoundException;
+	public Class<?> postFindClass(String name, BundleClassLoader classLoader, BundleData data) throws ClassNotFoundException;
 
 	/**
 	 * Called by a {@link ClassLoaderDelegate #findResource(String)} before delegating to the resolved constraints and 
@@ -86,7 +86,7 @@ public interface ClassLoaderDelegateHook {
 	 * @return the resources found by this hook or null if normal delegation should continue
 	 * @throws FileNotFoundException to terminate the delegation
 	 */
-	public Enumeration preFindResources(String name, BundleClassLoader classLoader, BundleData data) throws FileNotFoundException;
+	public Enumeration<URL> preFindResources(String name, BundleClassLoader classLoader, BundleData data) throws FileNotFoundException;
 
 	/**
 	 * Called by a {@link ClassLoaderDelegate} after delegating to the resolved constraints and 
@@ -98,7 +98,7 @@ public interface ClassLoaderDelegateHook {
 	 * @return the resources found by this hook or null if normal delegation should continue
 	 * @throws FileNotFoundException to terminate the delegation
 	 */
-	public Enumeration postFindResources(String name, BundleClassLoader classLoader, BundleData data) throws FileNotFoundException;
+	public Enumeration<URL> postFindResources(String name, BundleClassLoader classLoader, BundleData data) throws FileNotFoundException;
 
 	/**
 	 * Called by a {@link ClassLoaderDelegate} before normal delegation.  If this method returns 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FilePath.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FilePath.java
index fbb69c1..55dd1d3 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FilePath.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FilePath.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -137,7 +137,7 @@ public class FilePath {
 	 * @return an array containing all segments for this path 
 	 */
 	public String[] getSegments() {
-		return (String[]) segments.clone();
+		return segments.clone();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java
index ef19ed7..e09b363 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,13 +12,13 @@
 package org.eclipse.osgi.framework.adaptor;
 
 import java.io.IOException;
+import java.net.URL;
 import java.net.URLConnection;
-import java.util.Properties;
+import java.util.*;
 import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.eclipse.osgi.service.resolver.PlatformAdmin;
 import org.eclipse.osgi.service.resolver.State;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
+import org.osgi.framework.*;
 
 /**
  * FrameworkAdaptor interface to the osgi framework. This class is used to provide
@@ -279,4 +279,18 @@ public interface FrameworkAdaptor {
 	 * @param error The Throwable for the runtime error that is to be handled.
 	 */
 	public void handleRuntimeError(Throwable error);
+
+	/**
+	 * Returns resources entries for the specified bundle datas.
+	 * @param datas the list of bundle datas to search in
+	 * @param path The path name in which to look.
+	 * @param filePattern The file name pattern for selecting resource names in
+	 *        the specified path.
+	 * @param options The options for listing resource names.
+	 * @return a list of resource URLs.  If no resources are found then
+	 * the empty list is returned.
+	 * @see BundleClassLoader#findEntries(String, String, int)
+	 * @see Bundle#findEntries(String, String, boolean)
+	 */
+	public Enumeration<URL> findEntries(List<BundleData> datas, String path, String filePattern, int options);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/Headers.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/Headers.java
index 053c6fc..3268b3e 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/Headers.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/Headers.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import org.osgi.framework.BundleException;
 
 /**
  * Headers classes. This class implements a Dictionary that has
- * the following behaviour:
+ * the following behavior:
  * <ul>
  * <li>put and remove clear throw UnsupportedOperationException.
  * The Dictionary is thus read-only to others.
@@ -30,10 +30,10 @@ import org.osgi.framework.BundleException;
  * </ul>
  * @since 3.1
  */
-public class Headers extends Dictionary implements Map {
+public class Headers<K, V> extends Dictionary<K, V> implements Map<K, V> {
 	private boolean readOnly = false;
-	private Object[] headers;
-	private Object[] values;
+	private K[] headers;
+	private V[] values;
 	private int size = 0;
 
 	/**
@@ -43,8 +43,12 @@ public class Headers extends Dictionary implements Map {
 	 */
 	public Headers(int initialCapacity) {
 		super();
-		headers = new Object[initialCapacity];
-		values = new Object[initialCapacity];
+		@SuppressWarnings("unchecked")
+		K[] k = (K[]) new Object[initialCapacity];
+		headers = k;
+		@SuppressWarnings("unchecked")
+		V[] v = (V[]) new Object[initialCapacity];
+		values = v;
 	}
 
 	/**
@@ -54,12 +58,12 @@ public class Headers extends Dictionary implements Map {
 	 * @exception IllegalArgumentException If a case-variant of the key is
 	 * in the dictionary parameter.
 	 */
-	public Headers(Dictionary values) {
+	public Headers(Dictionary<? extends K, ? extends V> values) {
 		this(values.size());
 		/* initialize the headers and values */
-		Enumeration keys = values.keys();
+		Enumeration<? extends K> keys = values.keys();
 		while (keys.hasMoreElements()) {
-			Object key = keys.nextElement();
+			K key = keys.nextElement();
 			set(key, values.get(key));
 		}
 	}
@@ -67,15 +71,15 @@ public class Headers extends Dictionary implements Map {
 	/**
 	 * Case-preserved keys.
 	 */
-	public synchronized Enumeration keys() {
-		return new ArrayEnumeration(headers, size);
+	public synchronized Enumeration<K> keys() {
+		return new ArrayEnumeration<K>(headers, size);
 	}
 
 	/**
 	 * Values.
 	 */
-	public synchronized Enumeration elements() {
-		return new ArrayEnumeration(values, size);
+	public synchronized Enumeration<V> elements() {
+		return new ArrayEnumeration<V>(values, size);
 	}
 
 	private int getIndex(Object key) {
@@ -92,8 +96,8 @@ public class Headers extends Dictionary implements Map {
 		return -1;
 	}
 
-	private Object remove(int remove) {
-		Object removed = values[remove];
+	private V remove(int remove) {
+		V removed = values[remove];
 		for (int i = remove; i < size; i++) {
 			if (i == headers.length - 1) {
 				headers[i] = null;
@@ -108,11 +112,15 @@ public class Headers extends Dictionary implements Map {
 		return removed;
 	}
 
-	private void add(Object header, Object value) {
+	private void add(K header, V value) {
 		if (size == headers.length) {
 			// grow the arrays
-			Object[] newHeaders = new Object[headers.length + 10];
-			Object[] newValues = new Object[values.length + 10];
+			@SuppressWarnings("unchecked")
+			K[] nh = (K[]) new Object[headers.length + 10];
+			K[] newHeaders = nh;
+			@SuppressWarnings("unchecked")
+			V[] nv = (V[]) new Object[values.length + 10];
+			V[] newValues = nv;
 			System.arraycopy(headers, 0, newHeaders, 0, headers.length);
 			System.arraycopy(values, 0, newValues, 0, values.length);
 			headers = newHeaders;
@@ -128,7 +136,7 @@ public class Headers extends Dictionary implements Map {
 	 *
 	 * @param key name.
 	 */
-	public synchronized Object get(Object key) {
+	public synchronized V get(Object key) {
 		int i = -1;
 		if ((i = getIndex(key)) != -1)
 			return values[i];
@@ -151,11 +159,14 @@ public class Headers extends Dictionary implements Map {
 	 * already present.
 	 * @since 3.2
 	 */
-	public synchronized Object set(Object key, Object value, boolean replace) {
+	public synchronized V set(K key, V value, boolean replace) {
 		if (readOnly)
 			throw new UnsupportedOperationException();
-		if (key instanceof String)
-			key = ((String) key).intern();
+		if (key instanceof String) {
+			@SuppressWarnings("unchecked")
+			K k = (K) ((String) key).intern();
+			key = k;
+		}
 		int i = getIndex(key);
 		if (value == null) { /* remove */
 			if (i != -1)
@@ -164,7 +175,7 @@ public class Headers extends Dictionary implements Map {
 			if (i != -1) { /* duplicate key */
 				if (!replace)
 					throw new IllegalArgumentException(NLS.bind(Msg.HEADER_DUPLICATE_KEY_EXCEPTION, key));
-				Object oldVal = values[i];
+				V oldVal = values[i];
 				values[i] = value;
 				return oldVal;
 			}
@@ -184,7 +195,7 @@ public class Headers extends Dictionary implements Map {
 	 * @exception IllegalArgumentException If a case-variant of the key is
 	 * already present.
 	 */
-	public synchronized Object set(Object key, Object value) {
+	public synchronized V set(K key, V value) {
 		return set(key, value, false);
 	}
 
@@ -220,7 +231,7 @@ public class Headers extends Dictionary implements Map {
 	 * @param value header value.
 	 * @throws UnsupportedOperationException
 	 */
-	public synchronized Object put(Object key, Object value) {
+	public synchronized V put(K key, V value) {
 		if (readOnly)
 			throw new UnsupportedOperationException();
 		return set(key, value, true);
@@ -232,16 +243,16 @@ public class Headers extends Dictionary implements Map {
 	 * @param key header name.
 	 * @throws UnsupportedOperationException
 	 */
-	public Object remove(Object key) {
+	public V remove(Object key) {
 		throw new UnsupportedOperationException();
 	}
 
 	public String toString() {
-		return (values.toString());
+		return values.toString();
 	}
 
-	public static Headers parseManifest(InputStream in) throws BundleException {
-		Headers headers = new Headers(10);
+	public static Headers<String, String> parseManifest(InputStream in) throws BundleException {
+		Headers<String, String> headers = new Headers<String, String>(10);
 		try {
 			ManifestElement.parseBundleManifest(in, headers);
 		} catch (IOException e) {
@@ -251,12 +262,14 @@ public class Headers extends Dictionary implements Map {
 		return headers;
 	}
 
-	class ArrayEnumeration implements Enumeration {
-		private Object[] array;
+	private static class ArrayEnumeration<E> implements Enumeration<E> {
+		private E[] array;
 		int cur = 0;
 
-		public ArrayEnumeration(Object[] array, int size) {
-			this.array = new Object[size];
+		public ArrayEnumeration(E[] array, int size) {
+			@SuppressWarnings("unchecked")
+			E[] a = (E[]) new Object[size];
+			this.array = a;
 			System.arraycopy(array, 0, this.array, 0, this.array.length);
 		}
 
@@ -264,7 +277,7 @@ public class Headers extends Dictionary implements Map {
 			return cur < array.length;
 		}
 
-		public Object nextElement() {
+		public E nextElement() {
 			return array[cur++];
 		}
 	}
@@ -278,23 +291,23 @@ public class Headers extends Dictionary implements Map {
 		return getIndex(key) >= 0;
 	}
 
-	public boolean containsValue(Object var0) {
+	public boolean containsValue(Object value) {
 		throw new UnsupportedOperationException();
 	}
 
-	public Set entrySet() {
+	public Set<Map.Entry<K, V>> entrySet() {
 		throw new UnsupportedOperationException();
 	}
 
-	public Set keySet() {
+	public Set<K> keySet() {
 		throw new UnsupportedOperationException();
 	}
 
-	public void putAll(Map var0) {
+	public void putAll(Map<? extends K, ? extends V> c) {
 		throw new UnsupportedOperationException();
 	}
 
-	public Collection values() {
+	public Collection<V> values() {
 		throw new UnsupportedOperationException();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/KeyedHashSet.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/KeyedHashSet.java
index 17bd38b..0fc3f41 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/KeyedHashSet.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/KeyedHashSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -450,11 +450,11 @@ public class KeyedHashSet {
 	 * Returns an iterator of elements in this set
 	 * @return an iterator of elements in this set
 	 */
-	public Iterator iterator() {
+	public Iterator<KeyedElement> iterator() {
 		return new EquinoxSetIterator();
 	}
 
-	class EquinoxSetIterator implements Iterator {
+	class EquinoxSetIterator implements Iterator<KeyedElement> {
 		private int currentIndex = -1;
 		private int found;
 
@@ -462,7 +462,7 @@ public class KeyedHashSet {
 			return found < elementCount;
 		}
 
-		public Object next() {
+		public KeyedElement next() {
 			if (!hasNext())
 				throw new NoSuchElementException();
 			while (++currentIndex < elements.length)
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/ObjectPool.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/ObjectPool.java
index e80bd1a..45cb44c 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/ObjectPool.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/util/ObjectPool.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ public class ObjectPool {
 	private static String OPTION_DEBUG_OBJECTPOOL_DUPS = Debug.ECLIPSE_OSGI + "/debug/objectPool/dups"; //$NON-NLS-1$
 	private static final boolean DEBUG_OBJECTPOOL_ADDS;
 	private static final boolean DEBUG_OBJECTPOOL_DUPS;
-	private static Map objectCache = new WeakHashMap();
+	private static Map<Object, WeakReference<Object>> objectCache = new WeakHashMap<Object, WeakReference<Object>>();
 	static {
 		FrameworkDebugOptions dbgOptions = FrameworkDebugOptions.getDefault();
 		if (dbgOptions != null) {
@@ -35,7 +35,7 @@ public class ObjectPool {
 
 	public static Object intern(Object obj) {
 		synchronized (objectCache) {
-			WeakReference ref = (WeakReference) objectCache.get(obj);
+			WeakReference<Object> ref = objectCache.get(obj);
 			if (ref != null) {
 				Object refValue = ref.get();
 				if (refValue != null) {
@@ -44,7 +44,7 @@ public class ObjectPool {
 						Debug.println("[ObjectPool] Found duplicate object: " + getObjectString(obj)); //$NON-NLS-1$
 				}
 			} else {
-				objectCache.put(obj, new WeakReference(obj));
+				objectCache.put(obj, new WeakReference<Object>(obj));
 				if (DEBUG_OBJECTPOOL_ADDS)
 					Debug.println("[ObjectPool] Added unique object to pool: " + getObjectString(obj) + " Pool size: " + objectCache.size()); //$NON-NLS-1$ //$NON-NLS-2$
 			}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BaseDescription.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BaseDescription.java
index 50b1078..c9b02b7 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BaseDescription.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BaseDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.osgi.service.resolver;
 
+import java.util.Map;
 import org.osgi.framework.Version;
+import org.osgi.framework.wiring.BundleCapability;
 
 /**
  * This class represents a base description object for a state.  All description
@@ -41,4 +43,32 @@ public interface BaseDescription {
 	 * @since 3.2
 	 */
 	public BundleDescription getSupplier();
+
+	/**
+	 * Returns the directives declared with the description.
+	 * This will return all known directives for the type of description.
+	 * The set of directives differs for each description type.
+	 * @return the known directives declared with the description
+	 * @since 3.7
+	 */
+	public Map<String, String> getDeclaredDirectives();
+
+	/**
+	 * Returns the attributes declared with the description.
+	 * This will return all known attributes for the type of description.
+	 * The set of attributes differs for each description type.
+	 * @return the attributes declared with the description
+	 * @since 3.7
+	 */
+	public Map<String, Object> getDeclaredAttributes();
+
+	/**
+	 * Returns the capability represented by this description.
+	 * Some descriptions types may not be able to represent 
+	 * a capability.  In such cases <code>null</code> is
+	 * returned.
+	 * @return the capability represented by this base description
+	 * @since 3.7
+	 */
+	public BundleCapability getCapability();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDelta.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDelta.java
index 74e7931..f343f1d 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDelta.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@ package org.eclipse.osgi.service.resolver;
  * @since 3.1
  * @noimplement This interface is not intended to be implemented by clients.
  */
-public interface BundleDelta extends Comparable {
+public interface BundleDelta extends Comparable<BundleDelta> {
 
 	/**
 	 * Delta type constant (bit mask) indicating that the bundle has been added
@@ -120,6 +120,7 @@ public interface BundleDelta extends Comparable {
 	 * @exception ClassCastException
 	 *                if the argument can not be converted into something
 	 *                comparable with the receiver.
+	 * @since 3.7
 	 */
-	public int compareTo(Object obj);
+	public int compareTo(BundleDelta obj);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDescription.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDescription.java
index 8cfb270..38f02be 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDescription.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/BundleDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,9 @@
  *******************************************************************************/
 package org.eclipse.osgi.service.resolver;
 
+import java.util.Map;
+import org.osgi.framework.wiring.BundleRevision;
+
 /**
  * This class represents a specific version of a bundle in the system.
  * <p>
@@ -19,7 +22,7 @@ package org.eclipse.osgi.service.resolver;
  * @since 3.1
  * @noimplement This interface is not intended to be implemented by clients.
  */
-public interface BundleDescription extends BaseDescription {
+public interface BundleDescription extends BaseDescription, BundleRevision {
 
 	/**
 	 * Gets the Bundle-SymbolicName of this BundleDescription.
@@ -30,6 +33,13 @@ public interface BundleDescription extends BaseDescription {
 	public String getSymbolicName();
 
 	/**
+	 * Returns the arbitrary attributes for this bundle description.
+	 * @return the arbitrary attributes for this bundle description
+	 * @since 3.7
+	 */
+	public Map<String, Object> getAttributes();
+
+	/**
 	 * The location string for this bundle.
 	 * @return The bundle location or null if the bundle description
 	 * does not have a location
@@ -60,6 +70,15 @@ public interface BundleDescription extends BaseDescription {
 	public ImportPackageSpecification[] getImportPackages();
 
 	/**
+	 * Returns an array of dynamic import package specifications that have been added
+	 * dynamically to this bundle description.
+	 * @return an array of dynamic import package specifications
+	 * @see State#addDynamicImportPackages(BundleDescription, ImportPackageSpecification[])
+	 * @since 3.7
+	 */
+	public ImportPackageSpecification[] getAddedDynamicImportPackages();
+
+	/**
 	 * Returns an array of generic specifications constraints required by this bundle.
 	 * @return an array of generic specifications
 	 * @since 3.2
@@ -90,6 +109,17 @@ public interface BundleDescription extends BaseDescription {
 	public ExportPackageDescription[] getSelectedExports();
 
 	/**
+	 * Returns all the capabilities provided by ths bundle that have been selected by
+	 * the resolver.  The returned list will include the capabilities
+	 * returned by {@link #getGenericCapabilities()} that have been selected by the 
+	 * resolver and any capabilities provided by fragments attached to this bundle.
+	 * @return the selected capabilities that this bundle provides.  If the bundle is
+	 * unresolved or has no capabilities then an empty array is returned.
+	 * @since 3.7
+	 */
+	public GenericDescription[] getSelectedGenericCapabilities();
+
+	/**
 	 * Returns all the bundle descriptions that satisfy all the require bundles for this bundle.
 	 * If the bundle is not resolved or the bundle does not require any bundles then an empty array is
 	 * returned.
@@ -106,6 +136,16 @@ public interface BundleDescription extends BaseDescription {
 	public ExportPackageDescription[] getResolvedImports();
 
 	/**
+	 * Returns all the capabilities that satisfy all the capability requirements for this
+	 * bundle.  This includes any capabilities required by fragments attached to this bundle.
+	 * @return the capabilities that satisfy all the capability requirements for this bundle.
+	 * If the bundle is unresolved or has no capability requirements then an empty array is
+	 * returned.
+	 * @since 3.7
+	 */
+	public GenericDescription[] getResolvedGenericRequires();
+
+	/**
 	 * Returns true if this bundle is resolved in its host state.
 	 * 
 	 * @return true if this bundle is resolved in its host state.
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ExportPackageDescription.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ExportPackageDescription.java
index cb9a839..c857576 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ExportPackageDescription.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ExportPackageDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,13 +37,13 @@ public interface ExportPackageDescription extends BaseDescription {
 	 * Returns the arbitrary attributes for this package.
 	 * @return the arbitrary attributes for this package
 	 */
-	public Map getAttributes();
+	public Map<String, Object> getAttributes();
 
 	/**
 	 * Returns the directives for this package.
 	 * @return the directives for this package
 	 */
-	public Map getDirectives();
+	public Map<String, Object> getDirectives();
 
 	/**
 	 * Returns the specified directive for this package.
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/GenericDescription.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/GenericDescription.java
index 33c27bf..8f091ae 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/GenericDescription.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/GenericDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.osgi.service.resolver;
 
 import java.util.Dictionary;
+import org.osgi.framework.Version;
 
 /**
  * A description of a generic capability.
@@ -27,11 +28,37 @@ public interface GenericDescription extends BaseDescription {
 	 * Returns the arbitrary attributes for this description
 	 * @return the arbitrary attributes for this description
 	 */
-	public Dictionary getAttributes();
+	public Dictionary<String, Object> getAttributes();
 
 	/**
 	 * Returns the type of generic description capability
 	 * @return the type of generic description capability
 	 */
 	public String getType();
+
+	/**
+	 * This method is deprecated.  Capabilities do not always have a 
+	 * name associated with them.  All matching attributes associated
+	 * with a capability are available in the attributes of a 
+	 * capability.  This method will return the value of the 
+	 * attribute with the same key as this capabilities type.
+	 * If this attribute's value is not a String then null is
+	 * returned.
+	 * @deprecated matching should only be done against a capability's 
+	 * attributes.
+	 */
+	public String getName();
+
+	/**
+	 * This method is deprecated.  Capabilities do not always have a
+	 * version associated with them. All matching attributes associated
+	 * with a capability are available in the attributes of a
+	 * capability.  This method will return the value of the 
+	 * attribute with the key <code>"version"</code>.
+	 * If this attribute's value is not a {@link Version} then null is
+	 * returned.
+	 * @deprecated matching should only be done against a capability's
+	 * attributes.
+	 */
+	public Version getVersion();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java
index 8e12846..09da758 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,13 +53,13 @@ public interface ImportPackageSpecification extends VersionConstraint {
 	 * Returns the arbitrary attributes which this import package may be resolved to.
 	 * @return the arbitrary attributes which this import package may be resolved to.
 	 */
-	public Map getAttributes();
+	public Map<String, Object> getAttributes();
 
 	/**
 	 * Returns the directives that control this import package.
 	 * @return the directives that control this import package.
 	 */
-	public Map getDirectives();
+	public Map<String, Object> getDirectives();
 
 	/**
 	 * Returns the specified directive that control this import package.
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/NativeCodeDescription.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/NativeCodeDescription.java
index c788a99..bb67414 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/NativeCodeDescription.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/NativeCodeDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,7 @@ import org.osgi.framework.Filter;
  * @since 3.4
  * @noimplement This interface is not intended to be implemented by clients.
  */
-public interface NativeCodeDescription extends BaseDescription, Comparable {
+public interface NativeCodeDescription extends BaseDescription, Comparable<NativeCodeDescription> {
 	/**
 	 * Returns the paths to the native code libraries.
 	 * @return the paths to the native code libraries.
@@ -71,8 +71,9 @@ public interface NativeCodeDescription extends BaseDescription, Comparable {
 	 * @param other the native code description to be compared
 	 * @return a negative integer, zero, or a positive integer as this natve
 	 * code description is less than, equal to, or greater than the specified object.
+	 * @since 3.7
 	 */
-	public int compareTo(Object other);
+	public int compareTo(NativeCodeDescription other);
 
 	/**
 	 * Indicates if this native code description has invalid native code paths.  Native
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/PlatformAdmin.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/PlatformAdmin.java
index f7f58ac..e7b1684 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/PlatformAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/PlatformAdmin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,8 @@ public interface PlatformAdmin {
 	 * an <code>java.lang.UnsupportedOperationException</code>.
 	 * <p>
 	 * If a mutable state is requested, the resulting state will <strong>not</strong> 
-	 * be resolved. 
+	 * be resolved and the user objects from the system state bundle descriptions will 
+	 * not be copied.
 	 * </p> 
 	 * @param mutable whether the returned state should mutable
 	 * @return a state representing the current framework.
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/Resolver.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/Resolver.java
index e24e855..24bed1c 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/Resolver.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/Resolver.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,7 +46,7 @@ public interface Resolver {
 	 * against.  A <tt>null</tt> value indicates that the system properties should
 	 * be used to match against
 	 */
-	public void resolve(BundleDescription[] discard, Dictionary[] platformProperties);
+	public void resolve(BundleDescription[] discard, Dictionary<Object, Object>[] platformProperties);
 
 	/**
 	 * Flushes this resolver of any stored/cached data it may be keeping to
@@ -135,12 +135,12 @@ public interface Resolver {
 	 * @param selectionPolicy the selection policy for this resolver
 	 * @since 3.2
 	 */
-	public void setSelectionPolicy(Comparator selectionPolicy);
+	public void setSelectionPolicy(Comparator<BaseDescription> selectionPolicy);
 
 	/**
 	 * Returns the selection policy for this resolver or null if it is not set 
 	 * @return the selection policy for this resolver or null if it is not set
 	 * @since 3.2 
 	 */
-	public Comparator getSelectionPolicy();
+	public Comparator<BaseDescription> getSelectionPolicy();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ResolverError.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ResolverError.java
index ea7ae4b..ee823ee 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ResolverError.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ResolverError.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,7 +86,7 @@ public interface ResolverError {
 	/**
 	 * Error type constant (bit mask) indicating that a Require-Bundle could
 	 * not be resolved because no bundle with the required symbolic name has 
-	 * the correct permissions to provied the required symbolic name.
+	 * the correct permissions to provide the required symbolic name.
 	 * @see ResolverError#getType()
 	 */
 	public static final int PROVIDE_BUNDLE_PERMISSION = 0x0400;
@@ -147,6 +147,24 @@ public interface ResolverError {
 	public static final int DISABLED_BUNDLE = 0x40000;
 
 	/**
+	 * Error type constant (bit mask) indicating that a Require-Capability could
+	 * not be resolved because the requiring bundle does not have the correct
+	 * permissions to require the capability.
+	 * @see ResolverError#getType()
+	 * @since 3.7
+	 */
+	public static final int REQUIRE_CAPABILITY_PERMISSION = 0x80000;
+
+	/**
+	 * Error type constant (bit mask) indicating that a Require-Bundle could
+	 * not be resolved because no bundle with the required symbolic name has 
+	 * the correct permissions to provide the required symbolic name.
+	 * @see ResolverError#getType()
+	 * @since 3.7
+	 */
+	public static final int PROVIDE_CAPABILITY_PERMISSION = 0x100000;
+
+	/**
 	 * Returns the bundle which this ResolverError is for
 	 * @return the bundle which this ResolverError is for
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ResolverHookException.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ResolverHookException.java
new file mode 100644
index 0000000..3feb596
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/ResolverHookException.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.service.resolver;
+
+/**
+ * A runtime exception thrown by a resolver to indicate that a resolver
+ * hook threw an unexpected exception and the resolve operation terminated.
+ * @since 3.7
+ */
+public class ResolverHookException extends RuntimeException {
+	private static final long serialVersionUID = 5686047743173396286L;
+
+	/**
+	 * Constructs a new resolver hook exception.
+	 * @param message the message of the exception
+	 * @param cause the cause of the exception
+	 */
+	public ResolverHookException(String message, Throwable cause) {
+		super(message, cause);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/State.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/State.java
index 56c42ca..ab13c3f 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/State.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/State.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,9 +10,10 @@
  *******************************************************************************/
 package org.eclipse.osgi.service.resolver;
 
-import java.util.Dictionary;
+import java.util.*;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Version;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
 
 /**
  * The state of a system as reported by a resolver. This includes all bundles
@@ -185,10 +186,10 @@ public interface State {
 	 * @param status whether or not the given bundle is resolved, if false the other parameters are ignored
 	 * @param hosts the host for the resolve fragment, can be <code>null</code>
 	 * @param selectedExports the selected exported packages for this resolved bundle, can be <code>null</code>
-	 * @param resolvedRequires the BundleDescriptions that resolve the required bundles for this bundle, can be <code>null</code>
+	 * @param resolvedRequires the {@link BundleDescription}s that resolve the required bundles for this bundle, can be <code>null</code>
 	 * @param resolvedImports the exported packages that resolve the imports for this bundle, can be <code>null</code>
 	 * @throws IllegalStateException if this is not done during a call to <code>resolve</code>
-	 * @deprecated use {@link #resolveBundle(BundleDescription, boolean, BundleDescription[], ExportPackageDescription[], ExportPackageDescription[], BundleDescription[], ExportPackageDescription[])}
+	 * @deprecated use {@link #resolveBundle(BundleDescription, boolean, BundleDescription[], ExportPackageDescription[], ExportPackageDescription[], GenericDescription[], BundleDescription[], ExportPackageDescription[], GenericDescription[], Map)}
 	 */
 	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports);
 
@@ -204,14 +205,37 @@ public interface State {
 	 * @param hosts the host for the resolve fragment, can be <code>null</code>
 	 * @param selectedExports the selected exported packages for this resolved bundle, can be <code>null</code>
 	 * @param substitutedExports the exported packages that resolve imports for this bundle and substitute exports, can be <code>null</code>
-	 * @param resolvedRequires the BundleDescriptions that resolve the required bundles for this bundle, can be <code>null</code>
+	 * @param resolvedRequires the {@link BundleDescription}s that resolve the required bundles for this bundle, can be <code>null</code>
 	 * @param resolvedImports the exported packages that resolve the imports for this bundle, can be <code>null</code>
 	 * @throws IllegalStateException if this is not done during a call to <code>resolve</code>
 	 * @since 3.4
+	 * @deprecated use {@link #resolveBundle(BundleDescription, boolean, BundleDescription[], ExportPackageDescription[], ExportPackageDescription[], GenericDescription[], BundleDescription[], ExportPackageDescription[], GenericDescription[], Map)}
 	 */
 	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports);
 
 	/**
+	 * Sets whether or not the given bundle is selected in this state.
+	 * <p>
+	 * This method is intended to be used by resolvers in the process of
+	 * determining which constraints are satisfied by which components.
+	 * </p>
+	 * 
+	 * @param bundle the bundle to update
+	 * @param status whether or not the given bundle is resolved, if false the other parameters are ignored
+	 * @param hosts the host for the resolve fragment, can be <code>null</code>
+	 * @param selectedExports the selected exported packages for this resolved bundle, can be <code>null</code>
+	 * @param substitutedExports the exported packages that resolve imports for this bundle and substitute exports, can be <code>null</code>
+	 * @param selectedCapabilities the selected capabilities for this resolved bundle, can be <code>null</code>
+	 * @param resolvedRequires the {@link BundleDescription}s that resolve the required bundles for this bundle, can be <code>null</code>
+	 * @param resolvedImports the exported packages that resolve the imports for this bundle, can be <code>null</code>
+	 * @param resolvedCapabilities the capabilities that resolve the required capabilities for this bundle, can be <code>null</code>
+	 * @param resolvedWires the map of state wires for the resolved requirements of the given bundle.  The key is the name space of the requirement.
+	 * @throws IllegalStateException if this is not done during a call to <code>resolve</code>
+	 * @since 3.7
+	 */
+	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, GenericDescription[] selectedCapabilities, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports, GenericDescription[] resolvedCapabilities, Map<String, List<StateWire>> resolvedWires);
+
+	/**
 	 * Sets the given removal pending bundle to removal complete for this state.
 	 * <p>
 	 * This method is intended to be used by resolvers in the process of 
@@ -324,7 +348,7 @@ public interface State {
 
 	/**
 	 * Resolves the constraints contained in this state using the resolver
-	 * currently associated with the state in a incremental, "least-perturbing" 
+	 * currently associated with the state in an incremental, "least-perturbing" 
 	 * mode, and returns a delta describing the changes in resolved states and 
 	 * dependencies in the state.
 	 * 
@@ -337,14 +361,35 @@ public interface State {
 	public StateDelta resolve(BundleDescription[] discard);
 
 	/**
+	 * Resolves the constraints contained in this state using the resolver
+	 * currently associated with the state in an incremental, "least-perturbing"
+	 * mode, and returns a delta describing the changes in resolved states and
+	 * dependencies in the state.  If discard is set to true the 
+	 * the descriptions contained in the resolve array will have their 
+	 * current resolution state discarded and will be re-resolved.
+	 * This method will attempt to resolve the supplied descriptions
+	 * and may attempt to resolve any other unresolved descriptions contained
+	 * in this state.
+	 * 
+	 * @param resolve an array containing descriptions for bundles to resolve.
+	 * @param discard a value of true indicates the resolve descriptions
+	 * should have their current resolution state discarded and re-resolved.
+	 * @return a delta describing the changes in the resolved state and
+	 * interconnections.
+	 * @since 3.7
+	 */
+	public StateDelta resolve(BundleDescription[] resolve, boolean discard);
+
+	/**
 	 * Sets the version overrides which are to be applied during the resolutoin
 	 * of this state. Version overrides allow external forces to
 	 * refine/override the version constraints setup by the components in the
 	 * state.
 	 * 
 	 * @param value
+	 * @deprecated The exact form of this has never been defined.  There is
+	 * no alternative method available.
 	 */
-	// TODO the exact form of this is not defined as yet.
 	public void setOverrides(Object value);
 
 	/**
@@ -356,6 +401,33 @@ public interface State {
 	public BundleDescription[] getResolvedBundles();
 
 	/**
+	 * Returns descriptions for all bundles in a removal pending state.
+	 * @return the descriptions for all bundles in a removal pending state.
+	 * @since 3.7
+	 */
+	public BundleDescription[] getRemovalPending();
+
+	/**
+	 * Returns the dependency closure for the specified bundles.
+	 * 
+	 * <p>
+	 * A graph of bundles is computed starting with the specified bundles. The
+	 * graph is expanded by adding any bundle that is either wired to a package
+	 * that is currently exported by a bundle in the graph or requires a bundle
+	 * in the graph. The graph is fully constructed when there is no bundle
+	 * outside the graph that is wired to a bundle in the graph. The graph may
+	 * contain removal pending bundles.
+	 * 
+	 * @param bundles The initial bundles for which to generate the dependency
+	 *        closure.
+	 * @return A collection containing a snapshot of the dependency closure of
+	 *         the specified bundles, or an empty collection if there were no
+	 *         specified bundles.
+	 * @since 3.7
+	 */
+	public Collection<BundleDescription> getDependencyClosure(Collection<BundleDescription> bundles);
+
+	/**
 	 * Returns whether this state is empty.
 	 * @return <code>true</code> if this state is empty, <code>false</code> 
 	 * 	otherwise
@@ -395,6 +467,17 @@ public interface State {
 	public ExportPackageDescription linkDynamicImport(BundleDescription importingBundle, String requestedPackage);
 
 	/**
+	 * Adds the specified dynamic imports to the specified importingBundle.  The added 
+	 * dynamic imports are only valid for the instance of this state and will be 
+	 * forgotten if this state is read from a persistent cache.
+	 * @param importingBundle the bundle to add the imports to.
+	 * @param dynamicImports the dynamic imports to add.
+	 * @since 3.7
+	 * @see BundleDescription#getAddedDynamicImportPackages()
+	 */
+	public void addDynamicImportPackages(BundleDescription importingBundle, ImportPackageSpecification[] dynamicImports);
+
+	/**
 	 * Sets the platform properties of the state.  The platform properties
 	 * are used to resolve the following constraints:
 	 * <ul>
@@ -430,7 +513,7 @@ public interface State {
 	 * supported properties already set.  If any of the supported property values 
 	 * are changed as a result of calling this method then true is returned.
 	 */
-	public boolean setPlatformProperties(Dictionary platformProperties);
+	public boolean setPlatformProperties(Dictionary<?, ?> platformProperties);
 
 	/**
 	 * Sets the platform properties of the state to a list of platform properties.  
@@ -441,12 +524,13 @@ public interface State {
 	 * supported properties already set.  If any of the supported property values 
 	 * are changed as a result of calling this method then true is returned.
 	 */
-	public boolean setPlatformProperties(Dictionary[] platformProperties);
+	public boolean setPlatformProperties(Dictionary<?, ?>[] platformProperties);
 
 	/**
 	 * Returns the list of platform properties currently set for this state.
 	 * @return the list of platform properties currently set for this state.
 	 */
+	@SuppressWarnings("rawtypes")
 	public Dictionary[] getPlatformProperties();
 
 	/**
@@ -541,4 +625,14 @@ public interface State {
 	 * @since 3.4
 	 */
 	public DisabledInfo getDisabledInfo(BundleDescription bundle, String policyName);
+
+	/**
+	 * Sets the resolver hook factory for this state.  The resolver hook factory is 
+	 * used during resolve operations according to the OSGi specification for the
+	 * resolver hook factory.
+	 * @param hookFactory the resolver hook factory
+	 * @since 3.7
+	 * @throws IllegalStateException if the resolver hook factory is already set
+	 */
+	public void setResolverHookFactory(ResolverHookFactory hookFactory);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateDelta.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateDelta.java
index ab6dfcb..3369080 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateDelta.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,4 +43,11 @@ public interface StateDelta {
 	 * @return the state
 	 */
 	public State getState();
+
+	/**
+	 * Returns the resolver hook exception if one occurred while
+	 * resolving the state.
+	 * @since 3.7
+	 */
+	public ResolverHookException getResovlerHookException();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateObjectFactory.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateObjectFactory.java
index 37cc205..3367b0d 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateObjectFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateObjectFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,8 +53,9 @@ public interface StateObjectFactory {
 
 	/**
 	 * Creates a new state that is a copy of the given state. The returned state 
-	 * will contain copies of all bundle descriptions in the given state. No data 
-	 * pertaining to resolution is copied.  The returned state will have a 
+	 * will contain copies of all bundle descriptions in the given state.
+	 * The user objects from the original bundle descriptions is not copied and
+	 * no data pertaining to resolution is copied.  The returned state will have a 
 	 * new resolver attached to it.
 	 *  
 	 * @param state a state to be copied
@@ -172,7 +173,7 @@ public interface StateObjectFactory {
 	 * @return a bundle description derived from the given information
 	 * @throws BundleException if an error occurs while reading the manifest 
 	 */
-	public BundleDescription createBundleDescription(State state, Dictionary manifest, String location, long id) throws BundleException;
+	public BundleDescription createBundleDescription(State state, Dictionary<String, String> manifest, String location, long id) throws BundleException;
 
 	/**
 	 * Returns a bundle description based on the information in the supplied manifest dictionary.
@@ -186,10 +187,11 @@ public interface StateObjectFactory {
 	 * @throws BundleException if an error occurs while reading the manifest 
 	 * @deprecated use {@link #createBundleDescription(State, Dictionary, String, long)}
 	 */
-	public BundleDescription createBundleDescription(Dictionary manifest, String location, long id) throws BundleException;
+	public BundleDescription createBundleDescription(Dictionary<String, String> manifest, String location, long id) throws BundleException;
 
 	/**
 	 * Creates a bundle description that is a copy of the given description.
+	 * The user object of the original bundle description is not copied.
 	 * 
 	 * @param original the bundle description to be copied
 	 * @return the created bundle description
@@ -246,7 +248,7 @@ public interface StateObjectFactory {
 	 * @param importer the importing bundle (may be <code>null</code>)
 	 * @return the created package specification
 	 */
-	public ImportPackageSpecification createImportPackageSpecification(String packageName, VersionRange versionRange, String bundleSymbolicName, VersionRange bundleVersionRange, Map directives, Map attributes, BundleDescription importer);
+	public ImportPackageSpecification createImportPackageSpecification(String packageName, VersionRange versionRange, String bundleSymbolicName, VersionRange bundleVersionRange, Map<String, ?> directives, Map<String, ?> attributes, BundleDescription importer);
 
 	/**
 	 * Creates an import package specification that is a copy of the given import package
@@ -268,7 +270,7 @@ public interface StateObjectFactory {
 	 * @param exporter the exporter of the package (may be <code>null</code>)
 	 * @return the created package
 	 */
-	public ExportPackageDescription createExportPackageDescription(String packageName, Version version, Map directives, Map attributes, boolean root, BundleDescription exporter);
+	public ExportPackageDescription createExportPackageDescription(String packageName, Version version, Map<String, ?> directives, Map<String, ?> attributes, boolean root, BundleDescription exporter);
 
 	/**
 	 * Creates a generic description from the given parameters
@@ -277,8 +279,20 @@ public interface StateObjectFactory {
 	 * @param version the version of the generic description (may be <code>null</code>)
 	 * @param attributes the attributes for the generic description (may be <code>null</code>)
 	 * @return the created generic description
+	 * @deprecated use {@link #createGenericDescription(String, String, Version, Map)}
 	 */
-	public GenericDescription createGenericDescription(String name, String type, Version version, Map attributes);
+	public GenericDescription createGenericDescription(String name, String type, Version version, Map<String, ?> attributes);
+
+	/**
+	 * Creates a generic description from the given parameters
+	 * @param type the type of the generic description (may be <code>null</code>)
+	 * @param attributes the attributes for the generic description (may be <code>null</code>)
+	 * @param directives the directives for the generic description (may be <code>null</code>)
+	 * @param supplier the supplier of the generic description (may be <code>null</code>)
+	 * @return the created generic description
+	 * @since 3.7
+	 */
+	public GenericDescription createGenericDescription(String type, Map<String, ?> attributes, Map<String, String> directives, BundleDescription supplier);
 
 	/**
 	 * Creates a generic specification from the given parameters
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateWire.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateWire.java
new file mode 100644
index 0000000..2b2afdf
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/StateWire.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.service.resolver;
+
+/**
+ * A state wire represents a decision made by a resolver to wire a requirement to a capability.
+ * There are 4 parts to a state wire.
+ * <ul>
+ * <li>The requirement which may have been specified by a host bundle or one of its attached fragments.</li>
+ * <li>The host bundle which is associated with the requirement.  There are cases where the host 
+ * bundle may not be the same as the bundle which declared the requirement.  For example, if a fragment
+ * specifies additional requirements.</li>
+ * <li>The capability which may have been specified by a host bundle or one of its attached fragments.</li>
+ * <li>The host bundle which is associated with the capability.  There are cases where the host
+ * bundle may not be the same as the bundle which declared the capability.  For example, if a fragment
+ * specifies additional capabilities.</li>
+ * </ul>
+ * @since 3.7
+ */
+public class StateWire {
+	private final BundleDescription requirementHost;
+	private final VersionConstraint declaredRequirement;
+	private final BundleDescription capabilityHost;
+	private final BaseDescription declaredCapability;
+
+	/**
+	 * Constructs a new state wire.
+	 * @param requirementHost the bundle hosting the requirement.
+	 * @param declaredRequirement the declared requirement.  The bundle declaring the requirement may be different from the requirement host.
+	 * @param capabilityHost the bundle hosting the capability.
+	 * @param declaredCapability the declared capability.  The bundle declaring the capability may be different from the capability host.
+	 */
+	public StateWire(BundleDescription requirementHost, VersionConstraint declaredRequirement, BundleDescription capabilityHost, BaseDescription declaredCapability) {
+		super();
+		this.requirementHost = requirementHost;
+		this.declaredRequirement = declaredRequirement;
+		this.capabilityHost = capabilityHost;
+		this.declaredCapability = declaredCapability;
+
+	}
+
+	/**
+	 * Gets the requirement host.
+	 * @return the requirement host.
+	 */
+	public BundleDescription getRequirementHost() {
+		return requirementHost;
+	}
+
+	/**
+	 * Gets the declared requirement.
+	 * @return the declared requirement.
+	 */
+	public VersionConstraint getDeclaredRequirement() {
+		return declaredRequirement;
+	}
+
+	/**
+	 * gets the capability host.
+	 * @return the capability host.
+	 */
+	public BundleDescription getCapabilityHost() {
+		return capabilityHost;
+	}
+
+	/**
+	 * gets the declared capability.
+	 * @return the declared capability.
+	 */
+	public BaseDescription getDeclaredCapability() {
+		return declaredCapability;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/VersionConstraint.java b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/VersionConstraint.java
index b61ad42..3b3be74 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/VersionConstraint.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/service/resolver/VersionConstraint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.osgi.service.resolver;
 
+import org.osgi.framework.wiring.BundleRequirement;
+
 /**
  * VersionConstraints represent the relationship between two bundles (in the 
  * case of bundle requires) or a bundle and a package (in the case of import/export).
@@ -70,4 +72,14 @@ public interface VersionConstraint extends Cloneable {
 	 * @see #isResolved()
 	 */
 	public BaseDescription getSupplier();
+
+	/**
+	 * Returns the requirement represented by this constraint.
+	 * Some constraint types may not be able to represent 
+	 * a requirement.  In such cases <code>null</code> is
+	 * returned.
+	 * @return the requirement represented by this constraint
+	 * @since 3.7
+	 */
+	public BundleRequirement getRequirement();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeBase.java b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeBase.java
index d6413f4..6d47cb9 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeBase.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeBase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,7 +66,7 @@ public abstract class CompositeBase extends BundleHost implements CompositeResol
 	public void refreshContent() {
 		resolving.set(Boolean.TRUE);
 		try {
-			framework.getPackageAdmin().refreshPackages(new Bundle[] {this}, true);
+			framework.getPackageAdmin().refreshPackages(new Bundle[] {this}, true, null);
 		} finally {
 			resolving.set(null);
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeClassLoader.java b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeClassLoader.java
index 65f2795..e0706ff 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeClassLoader.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeClassLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -144,4 +144,19 @@ public class CompositeClassLoader extends ClassLoader implements BaseClassLoader
 	public Bundle getBundle() {
 		return manager.getBaseData().getBundle();
 	}
+
+	@SuppressWarnings("unchecked")
+	public List<URL> findEntries(String path, String filePattern, int options) {
+		return Collections.EMPTY_LIST;
+	}
+
+	@SuppressWarnings("unchecked")
+	public Collection<String> listResources(String path, String filePattern, int options) {
+		return Collections.EMPTY_LIST;
+	}
+
+	@SuppressWarnings("unchecked")
+	public Collection<String> listLocalResources(String path, String filePattern, int options) {
+		return Collections.EMPTY_LIST;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeHelper.java b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeHelper.java
index d5ad91a..5ef32c7 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeHelper.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ public class CompositeHelper {
 			addImports(attributes, compositeDesc, matchingExports);
 
 			// convert the matchingExports from the composite into exports
-			addExports(attributes, matchingExports);
+			addExports(attributes, compositeDesc, matchingExports);
 		}
 
 		// add the rest
@@ -158,16 +158,22 @@ public class CompositeHelper {
 		addMap(importStatement, export.getAttributes(), "="); //$NON-NLS-1$
 	}
 
-	private static void addExports(Attributes attributes, ExportPackageDescription[] matchingExports) {
+	private static void addExports(Attributes attributes, BundleDescription compositeDesc, ExportPackageDescription[] matchingExports) {
 		if (matchingExports.length == 0)
 			return;
 		StringBuffer exportStatement = new StringBuffer();
 		for (int i = 0; i < matchingExports.length; i++) {
-			if (i != 0)
+			if (matchingExports[i].getExporter() == compositeDesc) {
+				// the matching export from outside is the composite bundle itself
+				// this must be one of our own substitutable exports, it must be ignored (bug 345640)
+				continue;
+			}
+			if (exportStatement.length() > 0)
 				exportStatement.append(',');
 			getExportFrom(matchingExports[i], exportStatement);
 		}
-		attributes.putValue(Constants.EXPORT_PACKAGE, exportStatement.toString());
+		if (exportStatement.length() > 0)
+			attributes.putValue(Constants.EXPORT_PACKAGE, exportStatement.toString());
 	}
 
 	private static void getExportFrom(ExportPackageDescription export, StringBuffer exportStatement) {
diff --git a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeImpl.java b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeImpl.java
index f900dc6..329009b 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,7 +57,7 @@ public class CompositeImpl extends CompositeBase implements CompositeBundle {
 		props.put(PROP_PARENTFRAMEWORK, thisFramework.getSystemBundleContext().getBundle());
 		// TODO leaks "this" out of the constructor
 		props.put(PROP_COMPOSITE, this);
-		Equinox equinox = new Equinox(props);
+		Equinox equinox = new Equinox((Map) props);
 		if (!firstTime)
 			// if not the first time then we are done
 			return equinox;
@@ -98,6 +98,14 @@ public class CompositeImpl extends CompositeBase implements CompositeBundle {
 	}
 
 	public Framework getCompositeFramework() {
+		if ((getState() & Bundle.UNINSTALLED) == 0) {
+			if ((companionFramework.getState() & (Bundle.INSTALLED | Bundle.RESOLVED)) != 0)
+				try {
+					companionFramework.init();
+				} catch (BundleException e) {
+					throw new RuntimeException("Cannot initialize child framework.", e);
+				}
+		}
 		return companionFramework;
 	}
 
@@ -106,13 +114,7 @@ public class CompositeImpl extends CompositeBase implements CompositeBundle {
 	}
 
 	protected Bundle getCompanionBundle() {
-		if ((companionFramework.getState() & (Bundle.INSTALLED | Bundle.RESOLVED)) != 0)
-			try {
-				companionFramework.init();
-			} catch (BundleException e) {
-				throw new RuntimeException("Cannot initialize child framework.", e);
-			}
-		return companionFramework.getBundleContext().getBundle(1);
+		return getCompositeFramework().getBundleContext().getBundle(1);
 	}
 
 	public void update(Map compositeManifest) throws BundleException {
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/CommandInterpreter.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/CommandInterpreter.java
index 4289fea..627d981 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/CommandInterpreter.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/CommandInterpreter.java
@@ -79,7 +79,7 @@ public interface CommandInterpreter {
 	 * @param dic	the dictionary to print
 	 * @param title	the header to print above the key/value pairs
 	 */
-	public void printDictionary(Dictionary dic, String title);
+	public void printDictionary(Dictionary<?, ?> dic, String title);
 
 	/**
 	 * Prints the given bundle resource if it exists
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/ConsoleSession.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/ConsoleSession.java
index bb43b14..4ad021c 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/ConsoleSession.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/console/ConsoleSession.java
@@ -28,8 +28,8 @@ import org.osgi.framework.*;
  * </p>
  * @since 3.6
  */
-public abstract class ConsoleSession implements ServiceFactory {
-	private volatile ServiceRegistration sessionRegistration;
+public abstract class ConsoleSession implements ServiceFactory<Object> {
+	private volatile ServiceRegistration<Object> sessionRegistration;
 
 	/**
 	 * Called by the console implementation to free resources associated
@@ -39,7 +39,7 @@ public abstract class ConsoleSession implements ServiceFactory {
 	 */
 	public final void close() {
 		doClose();
-		ServiceRegistration current = sessionRegistration;
+		ServiceRegistration<Object> current = sessionRegistration;
 		if (current != null) {
 			sessionRegistration = null;
 			try {
@@ -79,7 +79,7 @@ public abstract class ConsoleSession implements ServiceFactory {
 	/**
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
-	public final Object getService(Bundle bundle, ServiceRegistration registration) {
+	public final Object getService(Bundle bundle, ServiceRegistration<Object> registration) {
 		if (sessionRegistration == null)
 			sessionRegistration = registration;
 		return this;
@@ -88,7 +88,7 @@ public abstract class ConsoleSession implements ServiceFactory {
 	/**
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
-	public final void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
+	public final void ungetService(Bundle bundle, ServiceRegistration<Object> registration, Object service) {
 		// do nothing
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
deleted file mode 100644
index 6345a3f..0000000
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
+++ /dev/null
@@ -1,439 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.osgi.framework.eventmgr;
-
-import java.util.*;
-
-/**
- * A copy-on-write identity map. Write operations result in copying the underlying data so that
- * simultaneous read operations are not affected.
- * This allows for safe, unsynchronized traversal.
- * 
- * <p>
- * Note: This class uses identity for key and value comparison, not equals.
- * 
- * @since 3.5
- */
-public class CopyOnWriteIdentityMap implements Map {
-	/**
-	 * The empty array singleton instance.
-	 */
-	private static final Entry[] emptyArray = new Entry[0];
-
-	/**
-	 * The array of entries. This field is volatile so it can be 
-	 * accessed from unsynchronized reader methods.
-	 */
-	private volatile Entry[] entries;
-
-	/**
-	 * Creates an empty map.
-	 *
-	 */
-	public CopyOnWriteIdentityMap() {
-		entries = emptyArray;
-	}
-
-	/**
-	 * Copy constructor.
-	 *
-	 * @param source The CopyOnWriteMap to copy.
-	 */
-	public CopyOnWriteIdentityMap(CopyOnWriteIdentityMap source) {
-		this.entries = source.entries();
-	}
-
-	/* These methods modify the map and are synchronized. */
-
-	/**
-	 * Add a key, value pair to the map.
-	 * If the key object is already in the map, then its value is replaced with the new value.
-	 * Keys are compared using identity.
-	 *
-	 * @param key The key object to be added to the list.
-	 * @param value The value object to be associated with the key.
-	 * This may be null.
-	 * @return <code>null</code> if the specified key was newly added to the map.
-	 * Otherwise the previous value of the key.
-	 * @throws IllegalArgumentException If key is null.
-	 */
-	public synchronized Object put(Object key, Object value) {
-		if (key == null) {
-			throw new IllegalArgumentException();
-		}
-
-		int size = entries.length;
-		for (int i = 0; i < size; i++) {
-			if (entries[i].key == key) {
-				Object v = entries[i].value;
-				if (v == value) {
-					return v;
-				}
-				Entry[] newEntries = new Entry[size];
-				System.arraycopy(entries, 0, newEntries, 0, size);
-				newEntries[i] = new Entry(key, value);
-				entries = newEntries;
-				return v;
-			}
-		}
-
-		Entry[] newEntries = new Entry[size + 1];
-		if (size > 0) {
-			System.arraycopy(entries, 0, newEntries, 0, size);
-		}
-		newEntries[size] = new Entry(key, value);
-		entries = newEntries;
-		return null;
-	}
-
-	/**
-	 * Add all the entries from the specified map to this map.
-	 * 
-	 * @param source The map whose entries are to be added to this map.
-	 */
-	public void putAll(Map source) {
-		int sourceSize = source.size();
-		if (sourceSize == 0) {
-			return;
-		}
-		if (source instanceof CopyOnWriteIdentityMap) {
-			putAll(((CopyOnWriteIdentityMap) source).entries());
-			return;
-		}
-
-		Entry[] toCopy = new Entry[sourceSize];
-		Iterator iter = source.entrySet().iterator();
-		for (int i = 0; i < sourceSize; i++) {
-			Map.Entry mapEntry = (Map.Entry) iter.next();
-			toCopy[i] = new Entry(mapEntry.getKey(), mapEntry.getValue());
-		}
-		putAll(toCopy);
-	}
-
-	/**
-	 * Add all the keys from the specified array to this map with the value
-	 * <code>null</code>.
-	 * 
-	 * @param keys The array of keys to be added to this map.
-	 */
-	public void putAll(Object[] keys) {
-		int sourceSize = keys.length;
-		if (sourceSize == 0) {
-			return;
-		}
-		Entry[] toCopy = new Entry[sourceSize];
-		for (int i = 0; i < sourceSize; i++) {
-			toCopy[i] = new Entry(keys[i], null);
-		}
-		putAll(toCopy);
-	}
-
-	/**
-	 * Add all the entries to this map.
-	 * 
-	 * @param toCopy Array of entries to add to this map.
-	 */
-	private synchronized void putAll(Entry[] toCopy) {
-		int sourceSize = toCopy.length;
-		int size = entries.length;
-		Entry[] newEntries = new Entry[size + sourceSize];
-		System.arraycopy(entries, 0, newEntries, 0, size);
-		copy: for (int n = 0; n < sourceSize; n++) {
-			Entry copy = toCopy[n];
-			for (int i = 0; i < size; i++) {
-				if (newEntries[i].key == copy.key) {
-					newEntries[i] = copy;
-					continue copy;
-				}
-			}
-			newEntries[size] = copy;
-			size++;
-		}
-		if (size == newEntries.length) {
-			entries = newEntries;
-			return;
-		}
-		Entry[] e = new Entry[size];
-		System.arraycopy(newEntries, 0, e, 0, size);
-		entries = e;
-	}
-
-	/**
-	 * Remove a key from the map and returns the value associated with the key.
-	 * Key objects are compared using identity.
-	 *
-	 * @param key The key object to be removed from the map.
-	 * @return <code>null</code> if the key was not in the list. 
-	 * Otherwise, the value associated with the key.
-	 * @throws IllegalArgumentException If key is null.
-	 */
-	public synchronized Object remove(Object key) {
-		if (key == null) {
-			throw new IllegalArgumentException();
-		}
-
-		int size = entries.length;
-		for (int i = 0; i < size; i++) {
-			if (entries[i].key == key) {
-				Object v = entries[i].value;
-				if (size == 1) {
-					entries = emptyArray;
-					return v;
-				}
-				Entry[] newEntries = new Entry[size - 1];
-				if (i > 0) {
-					System.arraycopy(entries, 0, newEntries, 0, i);
-				}
-				int next = size - 1 - i;
-				if (next > 0) {
-					System.arraycopy(entries, i + 1, newEntries, i, next);
-				}
-				entries = newEntries;
-				return v;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Remove all entries from the map.
-	 * 
-	 */
-	public synchronized void clear() {
-		entries = emptyArray;
-	}
-
-	/* These methods only read the map and are not synchronized. */
-
-	/**
-	 * Accessor for methods which only read the entries.
-	 * @return The array of entries. Callers to this method MUST NOT
-	 * modify the returned array.
-	 */
-	private Entry[] entries() {
-		return entries;
-	}
-
-	/**
-	 * Is the map empty?
-	 * 
-	 * @return <code>true</code> if the list is empty.
-	 */
-	public boolean isEmpty() {
-		return size() == 0;
-	}
-
-	/**
-	 * Return the number of entries in the map.
-	 * 
-	 * @return The number of entries in the map.
-	 */
-	public int size() {
-		return entries().length;
-	}
-
-	/**
-	 * Return the value object for the specified key.
-	 * Keys are compared using identity.
-	 * 
-	 * @param key The key object.
-	 * @return The value object for the specified key.
-	 * @throws IllegalArgumentException If key is null.
-	 */
-	public Object get(Object key) {
-		if (key == null) {
-			throw new IllegalArgumentException();
-		}
-
-		Entry[] e = entries();
-		for (int i = 0; i < e.length; i++) {
-			if (e[i].key == key) {
-				return e[i].value;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Check if the map contains the specified key.
-	 * Keys are compared using identity.
-	 * 
-	 * @param key The key object.
-	 * @return <code>true</code> if the specified key is in the map.
-	 * @throws IllegalArgumentException If key is null.
-	 */
-	public boolean containsKey(Object key) {
-		if (key == null) {
-			throw new IllegalArgumentException();
-		}
-
-		Entry[] e = entries();
-		for (int i = 0; i < e.length; i++) {
-			if (e[i].key == key) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Check if the map contains the specified value.
-	 * Values are compared using identity.
-	 * 
-	 * @param value The value object.
-	 * @return <code>true</code> if the specified value is in the map.
-	 */
-	public boolean containsValue(Object value) {
-		Entry[] e = entries();
-		for (int i = 0; i < e.length; i++) {
-			if (e[i].value == value) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Returns a snapshot of the entries in this map.
-	 * The returned set will NOT be changed by future changes to this map.
-	 * 
-	 * @return A Set of Map.Entry for each entry in this map.
-	 * The set and the entries returned by the set cannot be modified.
-	 */
-	public Set entrySet() {
-		return new EntrySet(entries(), EntrySet.ENTRY);
-	}
-
-	/**
-	 * Returns a snapshot of the keys in this map.
-	 * The returned set will NOT be changed by future changes to this map.
-	 * 
-	 * @return A Set of the key objects in this map
-	 * The set cannot be modified.
-	 */
-	public Set keySet() {
-		return new EntrySet(entries(), EntrySet.KEY);
-	}
-
-	/**
-	 * Returns a snapshot of the values in this map.
-	 * The returned collection will NOT be changed by future changes to this map.
-	 * 
-	 * @return A Collection of the value objects in this map.
-	 * The collection cannot be modified.
-	 */
-	public Collection values() {
-		return new EntrySet(entries(), EntrySet.VALUE);
-	}
-
-	/**
-	 * This class represents the entry in this Map.
-	 * Entry is immutable.
-	 */
-	private static class Entry implements Map.Entry {
-		/**
-		 * Key object.
-		 */
-		final Object key;
-
-		/**
-		 * Value object.
-		 */
-		final Object value;
-
-		/**
-		 * Constructor for map entry.
-		 * @param key Key object in entry. Used for uniqueness.
-		 * @param value Value object stored with key object.
-		 */
-		Entry(final Object key, final Object value) {
-			this.key = key;
-			this.value = value;
-		}
-
-		public Object getKey() {
-			return key;
-		}
-
-		public Object getValue() {
-			return value;
-		}
-
-		public Object setValue(Object value) {
-			throw new UnsupportedOperationException(); // entries cannot be modified.
-		}
-	}
-
-	/**
-	 * Set class used for entry and key sets and values collections.
-	 *
-	 * This class is immutable.
-	 */
-	private static class EntrySet extends AbstractSet {
-		private final Entry[] entries;
-		private final int returnType;
-		final static int ENTRY = 1;
-		final static int KEY = 2;
-		final static int VALUE = 3;
-
-		EntrySet(Entry[] entries, int returnType) {
-			this.entries = entries;
-			this.returnType = returnType;
-		}
-
-		public Iterator iterator() {
-			return new EntryIterator(entries, returnType);
-		}
-
-		public int size() {
-			return entries.length;
-		}
-	}
-
-	/** 
-	 * Iterator class used for entry and key sets and values collections.
-	 *
-	 */
-	private static class EntryIterator implements Iterator {
-		private final Entry[] entries;
-		private final int returnType;
-		private int cursor = 0;
-
-		EntryIterator(Entry[] entries, int returnType) {
-			this.entries = entries;
-			this.returnType = returnType;
-		}
-
-		public boolean hasNext() {
-			return cursor < entries.length;
-		}
-
-		public Object next() {
-			if (cursor == entries.length) {
-				throw new NoSuchElementException();
-			}
-			switch (returnType) {
-				case EntrySet.ENTRY :
-					return entries[cursor++];
-				case EntrySet.KEY :
-					return entries[cursor++].key;
-				case EntrySet.VALUE :
-					return entries[cursor++].value;
-			}
-			throw new InternalError();
-		}
-
-		public void remove() {
-			throw new UnsupportedOperationException(); // the collection cannot be modified.
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
deleted file mode 100644
index 3e6f3cb..0000000
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.osgi.framework.eventmgr;
-
-/**
- * The EventDispatcher interface contains the method that is called by the
- * Event Manager to complete the event delivery to the event listener.
- * <p>
- * Clients may implement this interface.
- * </p>
- * @since 3.1
- */
-public interface EventDispatcher {
-	/**
-	 * This method is called once for each listener.
-	 * This method must cast the event listener object to the appropriate listener
-	 * class for the event type and call the appropriate listener method.
-	 * 
-	 * <p>The method should properly log/handle any exceptions thrown by the called
-	 * listener. The EventManager will ignore any Throwable thrown by this method
-	 * in order to continue delivery of the event to the next listener.
-	 *
-	 * @param eventListener This is the key in the Map.Entry for the listener.
-	 * The implementation of this method must cast it to the appropriate listener
-	 * class for the event to be delivered and the appropriate listener method
-	 * must then be called.
-	 * @param listenerObject This is the value in the Map.Entry for the listener.
-	 * @param eventAction This value was passed to the ListenerQueue object via one of its
-	 * dispatchEvent* method calls. It can provide information (such
-	 * as which listener method to call) so that the EventDispatcher
-	 * can complete the delivery of the event to the listener.
-	 * @param eventObject This object was passed to the ListenerQueue object via one of its
-	 * dispatchEvent* method calls. This object was created by the event source and
-	 * is passed to this method. It should contain all the necessary information (such
-	 * as what event object to pass) so that this method
-	 * can complete the delivery of the event to the listener.
-	 * This is typically the actual event object.
-	 */
-	public void dispatchEvent(Object eventListener, Object listenerObject, int eventAction, Object eventObject);
-}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventListeners.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventListeners.java
deleted file mode 100644
index fee66ae..0000000
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventListeners.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.osgi.framework.eventmgr;
-
-import java.util.Set;
-
-/**
- * This class manages a list of listeners. 
- * 
- * Listeners may be added or removed as necessary.
- * 
- * This class uses identity for comparison, not equals.
- * 
- * @since 3.1
- * @deprecated As of 3.5. Replaced by CopyOnWriteIdentityMap.
- * @noextend This class is not intended to be subclassed by clients.
- */
-public class EventListeners {
-	private final CopyOnWriteIdentityMap list = new CopyOnWriteIdentityMap();
-
-	/**
-	 * Creates an empty listener list.
-	 *
-	 */
-	public EventListeners() {
-		super();
-	}
-
-	/**
-	 * Creates an empty listener list.
-	 *
-	 * @param capacity This argument is ignored.
-	 */
-	public EventListeners(int capacity) {
-		this();
-	}
-
-	/**
-	 * Add a listener to the list.
-	 * If a listener object is already in the list, then it is replaced.
-	 * This method calls the put method.
-	 *
-	 * @param listener This is the listener object to be added to the list.
-	 * @param listenerObject This is an optional listener-specific object.
-	 * This object will be passed to the EventDispatcher along with the listener
-	 * when the listener is to be called. This may be null
-	 * @throws IllegalArgumentException If listener is null.
-	 */
-	public void addListener(Object listener, Object listenerObject) {
-		list.put(listener, listenerObject);
-	}
-
-	/**
-	 * Remove a listener from the list.
-	 * This method calls the remove method.
-	 *
-	 * @param listener This is the listener object to be removed from the list.
-	 * @throws IllegalArgumentException If listener is null.
-	 */
-	public void removeListener(Object listener) {
-		list.remove(listener);
-	}
-
-	/**
-	 * Remove all listeners from the list.
-	 * 
-	 * This method calls the clear method.
-	 */
-	public void removeAllListeners() {
-		list.clear();
-	}
-
-	/**
-	 * Get the entry Set from the internal CopyOnWriteIdentityMap.
-	 * @return The entry Set.
-	 */
-	Set entrySet() {
-		return list.entrySet();
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventManager.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventManager.java
deleted file mode 100644
index 2dc7188..0000000
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/EventManager.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.osgi.framework.eventmgr;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.*;
-
-/**
- * This class is the central class for the Event Manager. Each
- * program that wishes to use the Event Manager should construct
- * an EventManager object and use that object to construct
- * ListenerQueue for dispatching events. CopyOnWriteIdentityMap objects
- * must be used to manage listener lists.
- *
- * <p>This example uses the fictitious SomeEvent class and shows how to use this package 
- * to deliver a SomeEvent to a set of SomeEventListeners.  
- * <pre>
- *
- * 	// Create an EventManager with a name for an asynchronous event dispatch thread
- * 	EventManager eventManager = new EventManager("SomeEvent Async Event Dispatcher Thread");
- * 	// Create a CopyOnWriteIdentityMap to hold the list of SomeEventListeners
- *	Map eventListeners = new CopyOnWriteIdentityMap();
- *
- *	// Add a SomeEventListener to the listener list
- *	eventListeners.put(someEventListener, null);
- *
- *	// Asynchronously deliver a SomeEvent to registered SomeEventListeners
- *	// Create the listener queue for this event delivery
- *	ListenerQueue listenerQueue = new ListenerQueue(eventManager);
- *	// Add the listeners to the queue and associate them with the event dispatcher
- *	listenerQueue.queueListeners(eventListeners.entrySet(), new EventDispatcher() {
- *		public void dispatchEvent(Object eventListener, Object listenerObject, 
- *                                    int eventAction, Object eventObject) {
- * 			try {
- *				(SomeEventListener)eventListener.someEventOccured((SomeEvent)eventObject);
- * 			} catch (Throwable t) {
- * 				// properly log/handle any Throwable thrown by the listener
- * 			}
- *		}
- *	});
- *	// Deliver the event to the listeners. 
- *	listenerQueue.dispatchEventAsynchronous(0, new SomeEvent());
- *		
- *	// Remove the listener from the listener list
- *	eventListeners.remove(someEventListener);
- *
- *	// Close EventManager to clean when done to terminate async event dispatch thread.
- *	// Note that closing the event manager while asynchronously delivering events 
- *	// may cause some events to not be delivered before the async event dispatch 
- *	// thread terminates
- *	eventManager.close();
- * </pre>
- * 
- * <p>At first glance, this package may seem more complicated than necessary
- * but it has support for some important features. The listener list supports
- * companion objects for each listener object. This is used by the OSGi framework
- * to create wrapper objects for a listener which are passed to the event dispatcher.
- * The ListenerQueue class is used to build a snap shot of the listeners prior to beginning
- * event dispatch. 
- * 
- * The OSGi framework uses a 2 level listener list for each listener type (4 types). 
- * Level one is managed per framework instance and contains the list of BundleContexts which have 
- * registered a listener. Level 2 is managed per BundleContext for the listeners in that 
- * context. This allows all the listeners of a bundle to be easily and atomically removed from 
- * the level one list. To use a "flat" list for all bundles would require the list to know which 
- * bundle registered a listener object so that the list could be traversed when stopping a bundle 
- * to remove all the bundle's listeners. 
- * 
- * When an event is fired, a snapshot list (ListenerQueue) must be made of the current listeners before delivery 
- * is attempted. The snapshot list is necessary to allow the listener list to be modified while the 
- * event is being delivered to the snapshot list. The memory cost of the snapshot list is
- * low since the ListenerQueue object uses the copy-on-write semantics 
- * of the CopyOnWriteIdentityMap. This guarantees the snapshot list is never modified once created.
- * 
- * The OSGi framework also uses a 2 level dispatch technique (EventDispatcher).
- * Level one dispatch is used by the framework to add the level 2 listener list of each 
- * BundleContext to the snapshot in preparation for delivery of the event.
- * Level 2 dispatch is used as the final event deliverer and must cast the listener 
- * and event objects to the proper type before calling the listener. Level 2 dispatch
- * will cancel delivery of an event 
- * to a bundle that has stopped between the time the snapshot was created and the
- * attempt was made to deliver the event.
- * 
- * <p> The highly dynamic nature of the OSGi framework had necessitated these features for 
- * proper and efficient event delivery.  
- * @since 3.1
- * @noextend This class is not intended to be subclassed by clients.
- */
-
-public class EventManager {
-	static final boolean DEBUG = false;
-
-	/**
-	 * EventThread for asynchronous dispatch of events.
-	 * Access to this field must be protected by a synchronized region.
-	 */
-	private EventThread thread;
-
-	/** 
-	 * Once closed, an attempt to create a new EventThread will result in an 
-	 * IllegalStateException. 
-	 */
-	private boolean closed;
-
-	/**
-	 * Thread name used for asynchronous event delivery
-	 */
-	protected final String threadName;
-
-	/**
-	 * The thread group used for asynchronous event delivery
-	 */
-	protected final ThreadGroup threadGroup;
-
-	/**
-	 * EventManager constructor. An EventManager object is responsible for
-	 * the delivery of events to listeners via an EventDispatcher.
-	 *
-	 */
-	public EventManager() {
-		this(null, null);
-	}
-
-	/**
-	 * EventManager constructor. An EventManager object is responsible for
-	 * the delivery of events to listeners via an EventDispatcher.
-	 *
-	 * @param threadName The name to give the event thread associated with
-	 * this EventManager.  A <code>null</code> value is allowed.
-	 */
-	public EventManager(String threadName) {
-		this(threadName, null);
-	}
-
-	/**
-	 * EventManager constructor. An EventManager object is responsible for
-	 * the delivery of events to listeners via an EventDispatcher.
-	 *
-	 * @param threadName The name to give the event thread associated with
-	 * this EventManager.  A <code>null</code> value is allowed.
-	 * @param threadGroup The thread group to use for the asynchronous event
-	 * thread associated with this EventManager. A <code>null</code> value is allowed.
-	 * @since 3.4
-	 */
-	public EventManager(String threadName, ThreadGroup threadGroup) {
-		thread = null;
-		closed = false;
-		this.threadName = threadName;
-		this.threadGroup = threadGroup;
-	}
-
-	/**
-	 * This method can be called to release any resources associated with this
-	 * EventManager.
-	 * <p>
-	 * Closing this EventManager while it is asynchronously delivering events 
-	 * may cause some events to not be delivered before the async event dispatch 
-	 * thread terminates.
-	 */
-	public synchronized void close() {
-		if (closed) {
-			return;
-		}
-		if (thread != null) {
-			thread.close();
-			thread = null;
-		}
-		closed = true;
-	}
-
-	/**
-	 * Returns the EventThread to use for dispatching events asynchronously for
-	 * this EventManager.
-	 *
-	 * @return EventThread to use for dispatching events asynchronously for
-	 * this EventManager.
-	 */
-	synchronized EventThread getEventThread() {
-		if (closed) {
-			throw new IllegalStateException();
-		}
-		if (thread == null) {
-			/* if there is no thread, then create a new one */
-			thread = (EventThread) AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
-					EventThread t = new EventThread(threadGroup, threadName);
-					return t;
-				}
-			});
-			/* start the new thread */
-			thread.start();
-		}
-		return thread;
-	}
-
-	/**
-	 * This method calls the EventDispatcher object to complete the dispatch of
-	 * the event. If there are more elements in the list, call dispatchEvent
-	 * on the next item on the list.
-	 * This method is package private.
-	 *
-	 * @param listeners A Set of entries from a CopyOnWriteIdentityMap map.
-	 * @param dispatcher Call back object which is called to complete the delivery of
-	 * the event.
-	 * @param eventAction This value was passed by the event source and
-	 * is passed to this method. This is passed on to the call back object.
-	 * @param eventObject This object was created by the event source and
-	 * is passed to this method. This is passed on to the call back object.
-	 */
-	static void dispatchEvent(Set/*<Map.Entry<Object,Object>>*/listeners, EventDispatcher dispatcher, int eventAction, Object eventObject) {
-		for (Iterator iter = listeners.iterator(); iter.hasNext();) { /* iterate over the list of listeners */
-			Map.Entry listener = (Map.Entry) iter.next();
-			Object eventListener = listener.getKey();
-			Object listenerObject = listener.getValue();
-			try {
-				/* Call the EventDispatcher to complete the delivery of the event. */
-				dispatcher.dispatchEvent(eventListener, listenerObject, eventAction, eventObject);
-			} catch (Throwable t) {
-				/* Consume and ignore any exceptions thrown by the listener */
-				if (DEBUG) {
-					System.out.println("Exception in " + listener.getKey()); //$NON-NLS-1$
-					t.printStackTrace();
-				}
-			}
-		}
-	}
-
-	/**
-	 * This package private class is used for asynchronously dispatching events.
-	 */
-
-	static class EventThread extends Thread {
-		private static int nextThreadNumber;
-
-		/**
-		 * Queued is a nested top-level (non-member) class. This class
-		 * represents the items which are placed on the asynch dispatch queue.
-		 * This class is private.
-		 */
-		private static class Queued {
-			/** listener list for this event */
-			final Set/*<Map.Entry<Object,Object>>*/listeners;
-			/** dispatcher of this event */
-			final EventDispatcher dispatcher;
-			/** action for this event */
-			final int action;
-			/** object for this event */
-			final Object object;
-			/** next item in event queue */
-			Queued next;
-
-			/**
-			 * Constructor for event queue item
-			 *
-			 * @param l Listener list for this event
-			 * @param d Dispatcher for this event
-			 * @param a Action for this event
-			 * @param o Object for this event
-			 */
-			Queued(Set/*<Map.Entry<Object,Object>>*/l, EventDispatcher d, int a, Object o) {
-				listeners = l;
-				dispatcher = d;
-				action = a;
-				object = o;
-				next = null;
-			}
-		}
-
-		/** item at the head of the event queue */
-		private Queued head;
-		/** item at the tail of the event queue */
-		private Queued tail;
-		/** if false the thread must terminate */
-		private volatile boolean running;
-
-		/**
-		 * Constructor for the event thread. 
-		 * @param threadName Name of the EventThread 
-		 */
-		EventThread(ThreadGroup threadGroup, String threadName) {
-			super(threadGroup, threadName == null ? getNextName() : threadName);
-			running = true;
-			head = null;
-			tail = null;
-
-			setDaemon(true); /* Mark thread as daemon thread */
-		}
-
-		private static synchronized String getNextName() {
-			return "EventManagerThread-" + nextThreadNumber++; //$NON-NLS-1$
-		}
-
-		/**
-		 * Constructor for the event thread. 
-		 * @param threadName Name of the EventThread 
-		 */
-		EventThread(String threadName) {
-			this(null, threadName);
-		}
-
-		/**
-		 * Constructor for the event thread.
-		 */
-		EventThread() {
-			this(null, null);
-		}
-
-		/**
-		 * Stop thread.
-		 */
-		void close() {
-			running = false;
-			interrupt();
-		}
-
-		/**
-		 * This method pulls events from
-		 * the queue and dispatches them.
-		 */
-		public void run() {
-			try {
-				while (true) {
-					Queued item = getNextEvent();
-					if (item == null) {
-						return;
-					}
-					EventManager.dispatchEvent(item.listeners, item.dispatcher, item.action, item.object);
-					// Bug 299589: since the call to getNextEvent() will eventually block for a long time, we need to make sure that the 'item'
-					// variable is cleared of the previous value before the call to getNextEvent(). See VM SPec 2.5.7 for why the compiler 
-					// will not automatically clear this variable for each loop iteration.
-					item = null;
-				}
-			} catch (RuntimeException e) {
-				if (EventManager.DEBUG) {
-					e.printStackTrace();
-				}
-				throw e;
-			} catch (Error e) {
-				if (EventManager.DEBUG) {
-					e.printStackTrace();
-				}
-				throw e;
-			}
-		}
-
-		/**
-		 * This methods takes the input parameters and creates a Queued
-		 * object and queues it.
-		 * The thread is notified.
-		 *
-		 * @param l Listener list for this event
-		 * @param d Dispatcher for this event
-		 * @param a Action for this event
-		 * @param o Object for this event
-		 */
-		synchronized void postEvent(Set/*<Map.Entry<Object,Object>>*/l, EventDispatcher d, int a, Object o) {
-			if (!isAlive()) { /* If the thread is not alive, throw an exception */
-				throw new IllegalStateException();
-			}
-
-			Queued item = new Queued(l, d, a, o);
-
-			if (head == null) /* if the queue was empty */
-			{
-				head = item;
-				tail = item;
-			} else /* else add to end of queue */
-			{
-				tail.next = item;
-				tail = item;
-			}
-
-			notify();
-		}
-
-		/**
-		 * This method is called by the thread to remove
-		 * items from the queue so that they can be dispatched to their listeners.
-		 * If the queue is empty, the thread waits.
-		 *
-		 * @return The Queued removed from the top of the queue or null
-		 * if the thread has been requested to stop.
-		 */
-		private synchronized Queued getNextEvent() {
-			while (running && (head == null)) {
-				try {
-					wait();
-				} catch (InterruptedException e) {
-					// If interrupted, we will loop back up and check running
-				}
-			}
-
-			if (!running) { /* if we are stopping */
-				return null;
-			}
-
-			Queued item = head;
-			head = item.next;
-			if (head == null) {
-				tail = null;
-			}
-
-			return item;
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
deleted file mode 100644
index 0f63ecc..0000000
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.osgi.framework.eventmgr;
-
-import java.util.*;
-import org.eclipse.osgi.framework.eventmgr.EventManager.EventThread;
-
-/**
- * The ListenerQueue is used to snapshot the list of listeners at the time the event
- * is fired. The snapshot list is then used to dispatch
- * events to those listeners. A ListenerQueue object is associated with a
- * specific EventManager object. ListenerQueue objects constructed with the same
- * EventManager object will get in-order delivery of events when
- * using asynchronous delivery. No delivery order is guaranteed for synchronous
- * delivery to avoid any potential deadly embraces.
- *
- * <p>ListenerQueue objects are created as necessary to build a list of listeners
- * that should receive a specific event or events. Once the list is created, the event
- * can then be synchronously or asynchronously delivered to the list of
- * listeners. After the event has been dispatched for delivery, the
- * ListenerQueue object should be discarded as it is likely the list of listeners is stale.
- * A new ListenerQueue object should be created when it is time to deliver 
- * another event. The Sets used to build the list of listeners must not change after being 
- * added to the list.
- * @since 3.1
- */
-public class ListenerQueue {
-	/**
-	 * EventManager with which this queue is associated.
-	 */
-	protected final EventManager manager;
-	/**
-	 * A list of listener lists.
-	 */
-	private final Map /*<Set<Map.Entry<Object,Object>>,EventDispatcher>*/queue;
-
-	/**
-	 * Once the listener queue has been used to dispatch an event, 
-	 * you cannot add modify the queue.
-	 * Access to this field must be protected by a synchronized region.
-	 */
-	private boolean readOnly;
-
-	/**
-	 * ListenerQueue constructor. This method creates an empty snapshot list.
-	 *
-	 * @param manager The EventManager this queue is associated with.
-	 * @throws IllegalArgumentException If manager is null.
-	 */
-	public ListenerQueue(EventManager manager) {
-		if (manager == null) {
-			throw new IllegalArgumentException();
-		}
-
-		this.manager = manager;
-		queue = new CopyOnWriteIdentityMap();
-		readOnly = false;
-	}
-
-	/**
-	 * Add a listener list to the snapshot list. This method can be called multiple times, prior to
-	 * calling one of the dispatchEvent methods, to build the set of listeners for the
-	 * delivery of a specific event. The current list of listeners in the specified EventListeners
-	 * object is added to the snapshot list.
-	 *
-	 * @param listeners An EventListeners object to add to the queue. The current listeners
-	 * in the EventListeners object will be called when an event is dispatched.
-	 * @param dispatcher An EventDispatcher object to use when dispatching an event
-	 * to the listeners on the specified EventListeners.
-	 * @throws IllegalStateException If called after one of the dispatch methods has been called.
-	 * @deprecated As of 3.5. Replaced by {@link #queueListeners(Set, EventDispatcher)}.
-	 */
-	public void queueListeners(EventListeners listeners, EventDispatcher dispatcher) {
-		queueListeners(listeners.entrySet(), dispatcher);
-	}
-
-	/**
-	 * Add a set of listeners to the snapshot list. This method can be called multiple times, prior to
-	 * calling one of the dispatchEvent methods, to build the list of listeners for the
-	 * delivery of a specific event. The specified listeners
-	 * are added to the snapshot list.
-	 *
-	 * @param listeners A Set of Map.Entries to add to the queue. This is typically the entrySet
-	 * from a CopyOnWriteIdentityMap object. This set must not change after being added to this
-	 * snapshot list.
-	 * @param dispatcher An EventDispatcher object to use when dispatching an event
-	 * to the specified listeners.
-	 * @throws IllegalStateException If called after one of the dispatch methods has been called.
-	 * @since 3.5
-	 */
-	public synchronized void queueListeners(Set/*<Map.Entry<Object,Object>>*/listeners, EventDispatcher dispatcher) {
-		if (readOnly) {
-			throw new IllegalStateException();
-		}
-
-		if (listeners.size() != 0) {
-			queue.put(listeners, dispatcher); // enqueue the list and its dispatcher
-		}
-	}
-
-	/**
-	 * Asynchronously dispatch an event to the snapshot list. An event dispatch thread
-	 * maintained by the associated EventManager is used to deliver the events.
-	 * This method may return immediately to the caller.
-	 *
-	 * @param eventAction This value is passed to the EventDispatcher.
-	 * @param eventObject This object is passed to the EventDispatcher.
-	 */
-	public void dispatchEventAsynchronous(int eventAction, Object eventObject) {
-		synchronized (this) {
-			readOnly = true;
-		}
-		EventThread eventThread = manager.getEventThread();
-		synchronized (eventThread) { /* synchronize on the EventThread to ensure no interleaving of posting to the event thread */
-			for (Iterator iter = queue.entrySet().iterator(); iter.hasNext();) { /* iterate over the list of listener lists */
-				Map.Entry entry = (Map.Entry) iter.next();
-				eventThread.postEvent((Set) entry.getKey(), (EventDispatcher) entry.getValue(), eventAction, eventObject);
-			}
-		}
-	}
-
-	/**
-	 * Synchronously dispatch an event to the snapshot list. The event may
-	 * be dispatched on the current thread or an event dispatch thread
-	 * maintained by the associated EventManager.
-	 * This method will not return to the caller until the EventDispatcher
-	 * has been called (and has returned) for each listener on the queue.
-	 *
-	 * @param eventAction This value is passed to the EventDispatcher.
-	 * @param eventObject This object is passed to the EventDispatcher.
-	 */
-	public void dispatchEventSynchronous(int eventAction, Object eventObject) {
-		synchronized (this) {
-			readOnly = true;
-		}
-		// We can't guarantee any delivery order for synchronous events.
-		// Attempts to do so result in deadly embraces.
-		for (Iterator iter = queue.entrySet().iterator(); iter.hasNext();) { /* iterate over the list of listener lists */
-			Map.Entry entry = (Map.Entry) iter.next();
-			EventManager.dispatchEvent((Set) entry.getKey(), (EventDispatcher) entry.getValue(), eventAction, eventObject);
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AbstractBundle.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AbstractBundle.java
index 4e33972..36d52ab 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AbstractBundle.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AbstractBundle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,12 +10,12 @@
  *******************************************************************************/
 package org.eclipse.osgi.framework.internal.core;
 
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 import java.security.*;
 import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
 import java.util.*;
 import org.eclipse.osgi.framework.adaptor.*;
 import org.eclipse.osgi.framework.debug.Debug;
@@ -29,15 +29,30 @@ import org.eclipse.osgi.service.resolver.ResolverError;
 import org.eclipse.osgi.signedcontent.*;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
+import org.osgi.framework.startlevel.BundleStartLevel;
+import org.osgi.framework.wiring.*;
 
 /**
  * This object is given out to bundles and wraps the internal Bundle object. It
  * is destroyed when a bundle is uninstalled and reused if a bundle is updated.
  * This class is abstract and is extended by BundleHost and BundleFragment.
  */
-public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement {
+public abstract class AbstractBundle implements Bundle, Comparable<Bundle>, KeyedElement, BundleStartLevel, BundleReference, BundleRevisions {
+	private final static long STATE_CHANGE_TIMEOUT;
+	static {
+		long stateChangeWait = 5000;
+		try {
+			String prop = FrameworkProperties.getProperty("equinox.statechange.timeout"); //$NON-NLS-1$
+			if (prop != null)
+				stateChangeWait = Long.parseLong(prop);
+		} catch (Throwable t) {
+			// use default 5000
+			stateChangeWait = 5000;
+		}
+		STATE_CHANGE_TIMEOUT = stateChangeWait;
+	}
 	/** The Framework this bundle is part of */
-	protected Framework framework;
+	protected final Framework framework;
 	/** The state of the bundle. */
 	protected volatile int state;
 	/** A flag to denote whether a bundle state change is in progress */
@@ -45,7 +60,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	/** Bundle's BundleData object */
 	protected BundleData bundledata;
 	/** Internal object used for state change synchronization */
-	protected Object statechangeLock = new Object();
+	protected final Object statechangeLock = new Object();
 	/** ProtectionDomain for the bundle */
 	protected BundleProtectionDomain domain;
 
@@ -129,7 +144,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 *  
 	 */
 	protected void close() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (INSTALLED)) == 0) {
 				Debug.println("Bundle.close called when state != INSTALLED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -146,11 +161,11 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		String activatorClassName = bundledata.getActivator();
 		if (activatorClassName != null) {
 			try {
-				Class activatorClass = loadClass(activatorClassName, false);
+				Class<?> activatorClass = loadClass(activatorClassName, false);
 				/* Create the activator for the bundle */
 				return (BundleActivator) (activatorClass.newInstance());
 			} catch (Throwable t) {
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+				if (Debug.DEBUG_GENERAL) {
 					Debug.printStackTrace(t);
 				}
 				throw new BundleException(NLS.bind(Msg.BUNDLE_INVALID_ACTIVATOR_EXCEPTION, activatorClassName, bundledata.getSymbolicName()), BundleException.ACTIVATOR_ERROR, t);
@@ -170,7 +185,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 * @exception java.lang.ClassNotFoundException
 	 *                if the class definition was not found.
 	 */
-	protected abstract Class loadClass(String name, boolean checkPermission) throws ClassNotFoundException;
+	protected abstract Class<?> loadClass(String name, boolean checkPermission) throws ClassNotFoundException;
 
 	/**
 	 * Returns the current state of the bundle.
@@ -469,8 +484,8 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 */
 	protected void setStatus(final int mask, final boolean state) {
 		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BundleException, IOException {
+			AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
+				public Object run() throws IOException {
 					int status = bundledata.getStatus();
 					boolean test = ((status & mask) != 0);
 					if (test != state) {
@@ -560,7 +575,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	}
 
 	public void update(final InputStream in) throws BundleException {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			Debug.println("update location " + bundledata.getLocation()); //$NON-NLS-1$
 			Debug.println("   from: " + in); //$NON-NLS-1$
 		}
@@ -573,15 +588,15 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		try {
 			final AccessControlContext callerContext = AccessController.getContext();
 			//note AdminPermission is checked again after updated bundle is loaded
-			updateWorker(new PrivilegedExceptionAction() {
+			updateWorker(new PrivilegedExceptionAction<Object>() {
 				public Object run() throws BundleException {
 					/* compute the update location */
 					URLConnection source = null;
 					if (in == null) {
-						String updateLocation = (String) bundledata.getManifest().get(Constants.BUNDLE_UPDATELOCATION);
+						String updateLocation = bundledata.getManifest().get(Constants.BUNDLE_UPDATELOCATION);
 						if (updateLocation == null)
 							updateLocation = bundledata.getLocation();
-						if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+						if (Debug.DEBUG_GENERAL)
 							Debug.println("   from location: " + updateLocation); //$NON-NLS-1$
 						/* Map the update location to a URLConnection */
 						source = framework.adaptor.mapLocationToURLConnection(updateLocation);
@@ -602,7 +617,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	/**
 	 * Update worker. Assumes the caller has the state change lock.
 	 */
-	protected void updateWorker(PrivilegedExceptionAction action) throws BundleException {
+	protected void updateWorker(PrivilegedExceptionAction<Object> action) throws BundleException {
 		int previousState = 0;
 		if (!isFragment())
 			previousState = state;
@@ -663,7 +678,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 				if (extension && !hasPermission(new AllPermission()))
 					throw new BundleException(Msg.BUNDLE_EXTENSION_PERMISSION, BundleException.SECURITY_ERROR, new SecurityException(Msg.BUNDLE_EXTENSION_PERMISSION));
 				try {
-					AccessController.doPrivileged(new PrivilegedExceptionAction() {
+					AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
 						public Object run() throws Exception {
 							framework.checkAdminPermission(newBundle, AdminPermission.LIFECYCLE);
 							if (extension) // need special permission to update extension bundles
@@ -755,7 +770,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 * @see #stop()
 	 */
 	public void uninstall() throws BundleException {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			Debug.println("uninstall location: " + bundledata.getLocation()); //$NON-NLS-1$
 		}
 		framework.checkAdminPermission(this, AdminPermission.LIFECYCLE);
@@ -765,7 +780,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		checkValid();
 		beginStateChange();
 		try {
-			uninstallWorker(new PrivilegedExceptionAction() {
+			uninstallWorker(new PrivilegedExceptionAction<Object>() {
 				public Object run() throws BundleException {
 					uninstallWorkerPrivileged();
 					return null;
@@ -779,7 +794,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	/**
 	 * Uninstall worker. Assumes the caller has the state change lock.
 	 */
-	protected void uninstallWorker(PrivilegedExceptionAction action) throws BundleException {
+	protected void uninstallWorker(PrivilegedExceptionAction<Object> action) throws BundleException {
 		boolean bundleActive = false;
 		if (!isFragment())
 			bundleActive = (state & (ACTIVE | STARTING)) != 0;
@@ -813,11 +828,9 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 * Uninstall worker. Assumes the caller has the state change lock.
 	 */
 	protected void uninstallWorkerPrivileged() throws BundleException {
-		if (Debug.DEBUG) {
-			BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
-			if (bundleStats != null)
-				bundleStats.watchBundle(this, BundleWatcher.START_UNINSTALLING);
-		}
+		BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
+		if (bundleStats != null)
+			bundleStats.watchBundle(this, BundleWatcher.START_UNINSTALLING);
 		boolean unloaded = false;
 		//cache the bundle's headers
 		getHeaders();
@@ -855,11 +868,8 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 			}
 			throw e;
 		} finally {
-			if (Debug.DEBUG) {
-				BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
-				if (bundleStats != null)
-					bundleStats.watchBundle(this, BundleWatcher.END_UNINSTALLING);
-			}
+			if (bundleStats != null)
+				bundleStats.watchBundle(this, BundleWatcher.END_UNINSTALLING);
 		}
 	}
 
@@ -897,7 +907,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 *                permission and the Java runtime environment supports
 	 *                permissions.
 	 */
-	public Dictionary getHeaders() {
+	public Dictionary<String, String> getHeaders() {
 		return getHeaders(null);
 	}
 
@@ -939,7 +949,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 *                If the caller does not have the <tt>AdminPermission</tt>,
 	 *                and the Java Runtime Environment supports permissions.
 	 */
-	public Dictionary getHeaders(String localeString) {
+	public Dictionary<String, String> getHeaders(String localeString) {
 		framework.checkAdminPermission(this, AdminPermission.METADATA);
 		ManifestLocalization localization;
 		try {
@@ -947,7 +957,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		} catch (BundleException e) {
 			framework.publishFrameworkEvent(FrameworkEvent.ERROR, this, e);
 			// return an empty dictinary.
-			return new Hashtable();
+			return new Hashtable<String, String>();
 		}
 		if (localeString == null)
 			localeString = Locale.getDefault().toString();
@@ -1078,16 +1088,16 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 				}
 				try {
 					long start = 0;
-					if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+					if (Debug.DEBUG_GENERAL) {
 						Debug.println(" Waiting for state to change in bundle " + this); //$NON-NLS-1$
 						start = System.currentTimeMillis();
 					}
-					statechangeLock.wait(5000);
+					statechangeLock.wait(STATE_CHANGE_TIMEOUT);
 					/*
 					 * wait for other thread to
 					 * finish changing state
 					 */
-					if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+					if (Debug.DEBUG_GENERAL) {
 						long end = System.currentTimeMillis();
 						if (end - start > 0)
 							System.out.println("Waiting... : " + getSymbolicName() + ' ' + (end - start)); //$NON-NLS-1$
@@ -1143,8 +1153,8 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 *                if the argument can not be converted into something
 	 *                comparable with the receiver.
 	 */
-	public int compareTo(Object obj) {
-		int slcomp = getStartLevel() - ((AbstractBundle) obj).getStartLevel();
+	public int compareTo(Bundle obj) {
+		int slcomp = getInternalStartLevel() - ((AbstractBundle) obj).getInternalStartLevel();
 		if (slcomp != 0) {
 			return slcomp;
 		}
@@ -1193,7 +1203,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 * 
 	 * @see org.osgi.framework.Bundle#findClass(java.lang.String)
 	 */
-	public Class loadClass(String classname) throws ClassNotFoundException {
+	public Class<?> loadClass(String classname) throws ClassNotFoundException {
 		return loadClass(classname, true);
 	}
 
@@ -1202,7 +1212,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 * 
 	 * @see org.osgi.framework.Bundle#getResourcePaths(java.lang.String)
 	 */
-	public Enumeration getEntryPaths(final String path) {
+	public Enumeration<String> getEntryPaths(final String path) {
 		try {
 			framework.checkAdminPermission(this, AdminPermission.RESOURCE);
 		} catch (SecurityException e) {
@@ -1210,8 +1220,8 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		}
 		checkValid();
 		// TODO this doPrivileged is probably not needed.  The adaptor isolates callers from disk access
-		return (Enumeration) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Enumeration<String>>() {
+			public Enumeration<String> run() {
 				return bundledata.getEntryPaths(path);
 			}
 		});
@@ -1256,7 +1266,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		return framework.adaptor.getState().getBundle(getBundleId());
 	}
 
-	protected int getStartLevel() {
+	int getInternalStartLevel() {
 		return bundledata.getStartLevel();
 	}
 
@@ -1266,7 +1276,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 	 * Mark this bundle as resolved.
 	 */
 	protected void resolve() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (INSTALLED)) == 0) {
 				Debug.println("Bundle.resolve called when state != INSTALLED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -1342,16 +1352,17 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		} catch (BundleException ex) {
 			return (null);
 		}
+		String defaultLocale = Locale.getDefault().toString();
 		if (localeString == null) {
-			localeString = Locale.getDefault().toString();
+			localeString = defaultLocale;
 		}
-		return localization.getResourceBundle(localeString);
+		return localization.getResourceBundle(localeString, defaultLocale.equals(localeString));
 	}
 
 	private synchronized ManifestLocalization getManifestLocalization() throws BundleException {
 		ManifestLocalization currentLocalization = manifestLocalization;
 		if (currentLocalization == null) {
-			Dictionary rawHeaders = bundledata.getManifest();
+			Dictionary<String, String> rawHeaders = bundledata.getManifest();
 			manifestLocalization = currentLocalization = new ManifestLocalization(this, rawHeaders);
 		}
 		return currentLocalization;
@@ -1365,7 +1376,7 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		return stateChanging;
 	}
 
-	public Enumeration findEntries(String path, String filePattern, boolean recurse) {
+	public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
 		try {
 			framework.checkAdminPermission(this, AdminPermission.RESOURCE);
 		} catch (SecurityException e) {
@@ -1376,157 +1387,15 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 		if (!isResolved())
 			framework.packageAdmin.resolveBundles(new Bundle[] {this});
 
-		// a list used to store the results of the search
-		List pathList = new ArrayList();
-		Filter patternFilter = null;
-		Hashtable patternProps = null;
-		if (filePattern != null)
-			try {
-				// create a file pattern filter with 'filename' as the key
-				patternFilter = FilterImpl.newInstance("(filename=" + sanitizeFilterInput(filePattern) + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				// create a single hashtable to be shared during the recursive search
-				patternProps = new Hashtable(2);
-			} catch (InvalidSyntaxException e) {
-				// something unexpected happened; log error and return nothing
-				Bundle b = framework.systemBundle;
-				framework.publishFrameworkEvent(FrameworkEvent.ERROR, b, e);
-				return null;
-			}
-		// find the local entries of this bundle
-		findLocalEntryPaths(path, patternFilter, patternProps, recurse, pathList);
 		// if this bundle is a host to fragments then search the fragments
-		final BundleFragment[] fragments = getFragments();
-		final int numFragments = fragments == null ? -1 : fragments.length;
-		for (int i = 0; i < numFragments; i++)
-			((AbstractBundle) fragments[i]).findLocalEntryPaths(path, patternFilter, patternProps, recurse, pathList);
-		// return null if no entries found
-		if (pathList.size() == 0)
-			return null;
-		// create an enumeration to enumerate the pathList
-		final String[] pathArray = (String[]) pathList.toArray(new String[pathList.size()]);
-		return new Enumeration() {
-			int curIndex = 0;
-			int curFragment = -1;
-			URL nextElement = null;
-
-			public boolean hasMoreElements() {
-				if (nextElement != null)
-					return true;
-				getNextElement();
-				return nextElement != null;
-			}
-
-			public Object nextElement() {
-				if (!hasMoreElements())
-					throw new NoSuchElementException();
-				URL result;
-				result = nextElement;
-				// force the next element search
-				getNextElement();
-				return result;
-			}
-
-			private void getNextElement() {
-				nextElement = null;
-				if (curIndex >= pathArray.length)
-					// reached the end of the pathArray; no more elements
-					return;
-				String curPath = pathArray[curIndex];
-				if (curFragment == -1) {
-					// need to search ourselves first
-					nextElement = getEntry0(curPath);
-					curFragment++;
-				}
-				// if the element is not in the host look in the fragments until we have searched them all
-				while (nextElement == null && curFragment < numFragments)
-					nextElement = fragments[curFragment++].getEntry0(curPath);
-				// if we have no fragments or we have searched all fragments then advance to the next path 
-				if (numFragments == -1 || curFragment >= numFragments) {
-					curIndex++;
-					curFragment = -1;
-				}
-				// searched all fragments for the current path, move to the next one
-				if (nextElement == null)
-					getNextElement();
-			}
-
-		};
-	}
-
-	private String sanitizeFilterInput(String filePattern) throws InvalidSyntaxException {
-		StringBuffer buffer = null;
-		boolean foundEscape = false;
-		for (int i = 0; i < filePattern.length(); i++) {
-			char c = filePattern.charAt(i);
-			switch (c) {
-				case '\\' :
-					// we either used the escape found or found a new escape.
-					foundEscape = foundEscape ? false : true;
-					if (buffer != null)
-						buffer.append(c);
-					break;
-				case '(' :
-				case ')' :
-					if (!foundEscape) {
-						if (buffer == null) {
-							buffer = new StringBuffer(filePattern.length() + 16);
-							buffer.append(filePattern.substring(0, i));
-						}
-						// must escape with '\'
-						buffer.append('\\');
-					} else {
-						foundEscape = false; // used the escape found
-					}
-					if (buffer != null)
-						buffer.append(c);
-					break;
-				default :
-					// if we found an escape it has been used
-					foundEscape = false;
-					if (buffer != null)
-						buffer.append(c);
-					break;
-			}
-		}
-		if (foundEscape)
-			throw new InvalidSyntaxException("Trailing escape characters must be escaped.", filePattern); //$NON-NLS-1$
-		return buffer == null ? filePattern : buffer.toString();
-	}
-
-	protected void findLocalEntryPaths(String path, Filter patternFilter, Hashtable patternProps, boolean recurse, List pathList) {
-		Enumeration entryPaths = bundledata.getEntryPaths(path);
-		if (entryPaths == null)
-			return;
-		while (entryPaths.hasMoreElements()) {
-			String entry = (String) entryPaths.nextElement();
-			int lastSlash = entry.lastIndexOf('/');
-			if (patternProps != null) {
-				int secondToLastSlash = entry.lastIndexOf('/', lastSlash - 1);
-				int fileStart;
-				int fileEnd = entry.length();
-				if (lastSlash < 0)
-					fileStart = 0;
-				else if (lastSlash != entry.length() - 1)
-					fileStart = lastSlash + 1;
-				else {
-					fileEnd = lastSlash; // leave the lastSlash out
-					if (secondToLastSlash < 0)
-						fileStart = 0;
-					else
-						fileStart = secondToLastSlash + 1;
-				}
-				String fileName = entry.substring(fileStart, fileEnd);
-				// set the filename to the current entry
-				patternProps.put("filename", fileName); //$NON-NLS-1$
-			}
-			// prevent duplicates and match on the patterFilter
-			if (!pathList.contains(entry) && (patternFilter == null || patternFilter.matchCase(patternProps)))
-				pathList.add(entry);
-			// rescurse only into entries that are directories
-			if (recurse && !entry.equals(path) && entry.length() > 0 && lastSlash == (entry.length() - 1))
-				findLocalEntryPaths(entry, patternFilter, patternProps, recurse, pathList);
-		}
-		return;
+		BundleFragment[] fragments = getFragments();
+		List<BundleData> datas = new ArrayList<BundleData>((fragments == null ? 0 : fragments.length) + 1);
+		datas.add(getBundleData());
+		if (fragments != null)
+			for (BundleFragment fragment : fragments)
+				datas.add(fragment.getBundleData());
+		int options = recurse ? BundleWiring.FINDENTRIES_RECURSE : 0;
+		return framework.getAdaptor().findEntries(datas, path, filePattern, options);
 	}
 
 	class BundleStatusException extends Throwable implements StatusException {
@@ -1550,34 +1419,123 @@ public abstract class AbstractBundle implements Bundle, Comparable, KeyedElement
 
 	}
 
-	public Map/* <X509Certificate, List<X509Certificate>> */getSignerCertificates(int signersType) {
+	public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+		@SuppressWarnings("unchecked")
+		final Map<X509Certificate, List<X509Certificate>> empty = Collections.EMPTY_MAP;
 		if (signersType != SIGNERS_ALL && signersType != SIGNERS_TRUSTED)
 			throw new IllegalArgumentException("Invalid signers type: " + signersType); //$NON-NLS-1$
 		if (framework == null)
-			return Collections.EMPTY_MAP;
+			return empty;
 		SignedContentFactory factory = framework.getSignedContentFactory();
 		if (factory == null)
-			return Collections.EMPTY_MAP;
+			return empty;
 		try {
 			SignedContent signedContent = factory.getSignedContent(this);
 			SignerInfo[] infos = signedContent.getSignerInfos();
 			if (infos.length == 0)
-				return Collections.EMPTY_MAP;
-			Map/* <X509Certificate, List<X509Certificate>> */results = new HashMap(infos.length);
+				return empty;
+			Map<X509Certificate, List<X509Certificate>> results = new HashMap<X509Certificate, List<X509Certificate>>(infos.length);
 			for (int i = 0; i < infos.length; i++) {
 				if (signersType == SIGNERS_TRUSTED && !infos[i].isTrusted())
 					continue;
 				Certificate[] certs = infos[i].getCertificateChain();
 				if (certs == null || certs.length == 0)
 					continue;
-				List/* <X509Certificate> */certChain = new ArrayList();
+				List<X509Certificate> certChain = new ArrayList<X509Certificate>();
 				for (int j = 0; j < certs.length; j++)
-					certChain.add(certs[j]);
-				results.put(certs[0], certChain);
+					certChain.add((X509Certificate) certs[j]);
+				results.put((X509Certificate) certs[0], certChain);
 			}
 			return results;
 		} catch (Exception e) {
-			return Collections.EMPTY_MAP;
+			return empty;
+		}
+	}
+
+	public final <A> A adapt(Class<A> adapterType) {
+		checkAdaptPermission(adapterType);
+		return adapt0(adapterType);
+	}
+
+	public List<BundleRevision> getRevisions() {
+		List<BundleRevision> revisions = new ArrayList<BundleRevision>();
+		BundleDescription current = getBundleDescription();
+		if (current != null)
+			revisions.add(current);
+		BundleDescription[] removals = framework.adaptor.getState().getRemovalPending();
+		for (BundleDescription removed : removals) {
+			if (removed.getBundleId() == getBundleId() && removed != current) {
+				revisions.add(removed);
+			}
+		}
+		return revisions;
+	}
+
+	@SuppressWarnings("unchecked")
+	protected <A> A adapt0(Class<A> adapterType) {
+		if (adapterType.isInstance(this))
+			return (A) this;
+		if (BundleContext.class.equals(adapterType)) {
+			try {
+				return (A) getBundleContext();
+			} catch (SecurityException e) {
+				return null;
+			}
+		}
+		if (BundleWiring.class.equals(adapterType)) {
+			if (state == UNINSTALLED)
+				return null;
+			BundleDescription description = getBundleDescription();
+			return (A) description.getWiring();
 		}
+
+		if (BundleRevision.class.equals(adapterType)) {
+			if (state == UNINSTALLED)
+				return null;
+			return (A) getBundleDescription();
+		}
+		return null;
 	}
+
+	/**
+	 * Check for permission to get a service.
+	 */
+	private <A> void checkAdaptPermission(Class<A> adapterType) {
+		SecurityManager sm = System.getSecurityManager();
+		if (sm == null) {
+			return;
+		}
+		sm.checkPermission(new AdaptPermission(adapterType.getName(), this, AdaptPermission.ADAPT));
+	}
+
+	public File getDataFile(String filename) {
+		return framework.getDataFile(this, filename);
+	}
+
+	public Bundle getBundle() {
+		return this;
+	}
+
+	public int getStartLevel() {
+		if (getState() == Bundle.UNINSTALLED)
+			throw new IllegalArgumentException(NLS.bind(Msg.BUNDLE_UNINSTALLED_EXCEPTION, getBundleData().getLocation()));
+		return getInternalStartLevel();
+	}
+
+	public void setStartLevel(int startlevel) {
+		framework.startLevelManager.setBundleStartLevel(this, startlevel);
+	}
+
+	public boolean isPersistentlyStarted() {
+		if (getState() == Bundle.UNINSTALLED)
+			throw new IllegalArgumentException(NLS.bind(Msg.BUNDLE_UNINSTALLED_EXCEPTION, getBundleData().getLocation()));
+		return (getBundleData().getStatus() & Constants.BUNDLE_STARTED) != 0;
+	}
+
+	public boolean isActivationPolicyUsed() {
+		if (getState() == Bundle.UNINSTALLED)
+			throw new IllegalArgumentException(NLS.bind(Msg.BUNDLE_UNINSTALLED_EXCEPTION, getBundleData().getLocation()));
+		return (getBundleData().getStatus() & Constants.BUNDLE_ACTIVATION_POLICY) != 0;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AliasMapper.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AliasMapper.java
index 3aef47a..7287453 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AliasMapper.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/AliasMapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,34 +11,20 @@
 package org.eclipse.osgi.framework.internal.core;
 
 import java.io.*;
-import java.util.Hashtable;
-import java.util.Vector;
+import java.util.*;
 import org.eclipse.osgi.framework.debug.Debug;
 
 /**
  * This class maps aliases.
  */
 public class AliasMapper {
-	private static Hashtable processorAliasTable;
-	private static Hashtable osnameAliasTable;
+	private static Map<String, Object> processorAliasTable;
+	private static Map<String, Object> osnameAliasTable;
 
-	/**
-	 * Constructor.
-	 *
-	 */
-	public AliasMapper() {
-	}
-
-	/**
-	 * Return the master alias for the processor.
-	 *
-	 * @param processor Input name
-	 * @return aliased name (if any)
-	 */
-	public String aliasProcessor(String processor) {
-		processor = processor.toLowerCase();
+	// Safe lazy initialization
+	private static synchronized Map<String, Object> getProcessorAliasTable() {
 		if (processorAliasTable == null) {
-			InputStream in = getClass().getResourceAsStream(Constants.OSGI_PROCESSOR_ALIASES);
+			InputStream in = AliasMapper.class.getResourceAsStream(Constants.OSGI_PROCESSOR_ALIASES);
 			if (in != null) {
 				try {
 					processorAliasTable = initAliases(in);
@@ -46,29 +32,18 @@ public class AliasMapper {
 					try {
 						in.close();
 					} catch (IOException ee) {
+						// nothing
 					}
 				}
 			}
 		}
-		if (processorAliasTable != null) {
-			String alias = (String) processorAliasTable.get(processor);
-			if (alias != null) {
-				processor = alias;
-			}
-		}
-		return (processor);
+		return processorAliasTable;
 	}
 
-	/**
-	 * Return the master alias for the osname.
-	 *
-	 * @param osname Input name
-	 * @return aliased name (if any)
-	 */
-	public Object aliasOSName(String osname) {
-		osname = osname.toLowerCase();
+	// Safe lazy initialization
+	private static synchronized Map<String, Object> getOSNameAliasTable() {
 		if (osnameAliasTable == null) {
-			InputStream in = getClass().getResourceAsStream(Constants.OSGI_OSNAME_ALIASES);
+			InputStream in = AliasMapper.class.getResourceAsStream(Constants.OSGI_OSNAME_ALIASES);
 			if (in != null) {
 				try {
 					osnameAliasTable = initAliases(in);
@@ -76,31 +51,62 @@ public class AliasMapper {
 					try {
 						in.close();
 					} catch (IOException ee) {
+						// nothing
 					}
 				}
 			}
 		}
-		if (osnameAliasTable != null) {
-			Object aliasObject = osnameAliasTable.get(osname);
+		return osnameAliasTable;
+	}
+
+	/**
+	 * Return the master alias for the processor.
+	 *
+	 * @param processor Input name
+	 * @return aliased name (if any)
+	 */
+	public String aliasProcessor(String processor) {
+		processor = processor.toLowerCase();
+		Map<String, Object> aliases = getProcessorAliasTable();
+		if (aliases != null) {
+			String alias = (String) aliases.get(processor);
+			if (alias != null) {
+				processor = alias;
+			}
+		}
+		return processor;
+	}
+
+	/**
+	 * Return the master alias for the osname.
+	 *
+	 * @param osname Input name
+	 * @return aliased name (if any)
+	 */
+	public Object aliasOSName(String osname) {
+		osname = osname.toLowerCase();
+		Map<String, Object> aliases = getOSNameAliasTable();
+		if (aliases != null) {
+			Object aliasObject = aliases.get(osname);
 			//String alias = (String) osnameAliasTable.get(osname);
 			if (aliasObject != null)
 				if (aliasObject instanceof String) {
 					osname = (String) aliasObject;
 				} else {
-					return (Vector) aliasObject;
+					return aliasObject;
 				}
 		}
-		return (osname);
+		return osname;
 	}
 
 	/**
-	 * Read alias data and populate a Hashtable.
+	 * Read alias data and populate a Map.
 	 *
 	 * @param in InputStream from which to read alias data.
-	 * @return Hashtable of aliases.
+	 * @return Map of aliases.
 	 */
-	protected static Hashtable initAliases(InputStream in) {
-		Hashtable aliases = new Hashtable(37);
+	protected static Map<String, Object> initAliases(InputStream in) {
+		Map<String, Object> aliases = new HashMap<String, Object>(37);
 		try {
 			BufferedReader br;
 			try {
@@ -127,22 +133,23 @@ public class AliasMapper {
 						if (storedMaster == null) {
 							aliases.put(lowerCaseAlias, master);
 						} else if (storedMaster instanceof String) {
-							Vector newMaster = new Vector();
-							newMaster.add(storedMaster);
+							List<String> newMaster = new ArrayList<String>();
+							newMaster.add((String) storedMaster);
 							newMaster.add(master);
 							aliases.put(lowerCaseAlias, newMaster);
 						} else {
-							((Vector) storedMaster).add(master);
-							aliases.put(lowerCaseAlias, storedMaster);
+							@SuppressWarnings("unchecked")
+							List<String> newMaster = ((List<String>) storedMaster);
+							newMaster.add(master);
 						}
 					}
 				}
 			}
 		} catch (IOException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.printStackTrace(e);
 			}
 		}
-		return (aliases);
+		return aliases;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java
index b405a3d..a6581cd 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,22 +17,21 @@ import java.security.*;
 import java.util.*;
 import org.eclipse.osgi.event.BatchBundleListener;
 import org.eclipse.osgi.framework.debug.Debug;
-import org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap;
 import org.eclipse.osgi.framework.eventmgr.EventDispatcher;
 import org.eclipse.osgi.internal.profile.Profile;
-import org.eclipse.osgi.internal.serviceregistry.ServiceReferenceImpl;
-import org.eclipse.osgi.internal.serviceregistry.ServiceRegistry;
+import org.eclipse.osgi.internal.serviceregistry.*;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
 
 /**
  * Bundle's execution context.
  *
- * This object is given out to bundles and wraps the internal
- * BundleContext object. It is destroyed when a bundle is stopped.
+ * This object is given out to bundles and provides the
+ * implementation to the BundleContext for a host bundle.
+ * It is destroyed when a bundle is stopped.
  */
 
-public class BundleContextImpl implements BundleContext, EventDispatcher {
+public class BundleContextImpl implements BundleContext, EventDispatcher<Object, Object, Object> {
 	private static boolean SET_TCCL = "true".equals(FrameworkProperties.getProperty("eclipse.bundle.setTCCL", "true")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	/** true if the bundle context is still valid */
 	private volatile boolean valid;
@@ -49,16 +48,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	/** Services that bundle is using. Key is ServiceRegistrationImpl,
 	 Value is ServiceUse */
 	/* @GuardedBy("contextLock") */
-	private HashMap/*<ServiceRegistrationImpl, ServiceUse>*/servicesInUse;
-
-	/** Listener list for bundle's BundleListeners */
-	protected Map bundleEvent;
-
-	/** Listener list for bundle's SynchronousBundleListeners */
-	protected Map bundleEventSync;
-
-	/** Listener list for bundle's FrameworkListeners */
-	protected Map frameworkEvent;
+	private HashMap<ServiceRegistrationImpl<?>, ServiceUse<?>> servicesInUse;
 
 	/** The current instantiation of the activator. */
 	protected BundleActivator activator;
@@ -76,9 +66,6 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 		this.bundle = bundle;
 		valid = true;
 		framework = bundle.framework;
-		bundleEvent = null;
-		bundleEventSync = null;
-		frameworkEvent = null;
 		synchronized (contextLock) {
 			servicesInUse = null;
 		}
@@ -95,24 +82,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 		final ServiceRegistry registry = framework.getServiceRegistry();
 
 		registry.removeAllServiceListeners(this);
-		synchronized (framework.frameworkEvent) {
-			if (frameworkEvent != null) {
-				framework.frameworkEvent.remove(this);
-				frameworkEvent = null;
-			}
-		}
-		synchronized (framework.bundleEvent) {
-			if (bundleEvent != null) {
-				framework.bundleEvent.remove(this);
-				bundleEvent = null;
-			}
-		}
-		synchronized (framework.bundleEventSync) {
-			if (bundleEventSync != null) {
-				framework.bundleEventSync.remove(this);
-				bundleEventSync = null;
-			}
-		}
+		framework.removeAllListeners(this);
 
 		/* service's registered by the bundle, if any, are unregistered. */
 		registry.unregisterServices(this);
@@ -164,7 +134,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	public Bundle installBundle(String location, InputStream in) throws BundleException {
 		checkValid();
 		//note AdminPermission is checked after bundle is loaded
-		return framework.installBundle(location, in);
+		return framework.installBundle(location, in, this);
 	}
 
 	/**
@@ -175,7 +145,11 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * if the identifier doesn't match any installed bundle.
 	 */
 	public Bundle getBundle(long id) {
-		return (framework.getBundle(id));
+		return framework.getBundle(this, id);
+	}
+
+	public Bundle getBundle(String location) {
+		return framework.getBundleByLocation(location);
 	}
 
 	/**
@@ -199,7 +173,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * object per installed bundle.
 	 */
 	public Bundle[] getBundles() {
-		return framework.getAllBundles();
+		return framework.getBundles(this);
 	}
 
 	/**
@@ -255,7 +229,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 		try {
 			addServiceListener(listener, null);
 		} catch (InvalidSyntaxException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("InvalidSyntaxException w/ null filter" + e.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(e);
 			}
@@ -304,33 +278,12 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 			throw new IllegalArgumentException();
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+		if (Debug.DEBUG_EVENTS) {
 			String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 			Debug.println("addBundleListener[" + bundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
-		if (listener instanceof SynchronousBundleListener) {
-			framework.checkAdminPermission(getBundle(), AdminPermission.LISTENER);
-			synchronized (framework.bundleEventSync) {
-				checkValid();
-				if (bundleEventSync == null) {
-					bundleEventSync = new CopyOnWriteIdentityMap();
-					framework.bundleEventSync.put(this, this);
-				}
-
-				bundleEventSync.put(listener, listener);
-			}
-		} else {
-			synchronized (framework.bundleEvent) {
-				checkValid();
-				if (bundleEvent == null) {
-					bundleEvent = new CopyOnWriteIdentityMap();
-					framework.bundleEvent.put(this, this);
-				}
-
-				bundleEvent.put(listener, listener);
-			}
-		}
+		framework.addBundleListener(listener, this);
 	}
 
 	/**
@@ -352,26 +305,12 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 			throw new IllegalArgumentException();
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+		if (Debug.DEBUG_EVENTS) {
 			String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 			Debug.println("removeBundleListener[" + bundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
-		if (listener instanceof SynchronousBundleListener) {
-			framework.checkAdminPermission(getBundle(), AdminPermission.LISTENER);
-
-			synchronized (framework.bundleEventSync) {
-				if (bundleEventSync != null) {
-					bundleEventSync.remove(listener);
-				}
-			}
-		} else {
-			synchronized (framework.bundleEvent) {
-				if (bundleEvent != null) {
-					bundleEvent.remove(listener);
-				}
-			}
-		}
+		framework.removeBundleListener(listener, this);
 	}
 
 	/**
@@ -393,20 +332,12 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 			throw new IllegalArgumentException();
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+		if (Debug.DEBUG_EVENTS) {
 			String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 			Debug.println("addFrameworkListener[" + bundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
-		synchronized (framework.frameworkEvent) {
-			checkValid();
-			if (frameworkEvent == null) {
-				frameworkEvent = new CopyOnWriteIdentityMap();
-				framework.frameworkEvent.put(this, this);
-			}
-
-			frameworkEvent.put(listener, listener);
-		}
+		framework.addFrameworkListener(listener, this);
 	}
 
 	/**
@@ -428,16 +359,12 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 			throw new IllegalArgumentException();
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+		if (Debug.DEBUG_EVENTS) {
 			String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 			Debug.println("removeFrameworkListener[" + bundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
-		synchronized (framework.frameworkEvent) {
-			if (frameworkEvent != null) {
-				frameworkEvent.remove(listener);
-			}
-		}
+		framework.removeFrameworkListener(listener, this);
 	}
 
 	/**
@@ -501,9 +428,8 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * @see ServiceRegistration
 	 * @see ServiceFactory
 	 */
-	public ServiceRegistration registerService(String[] clazzes, Object service, Dictionary properties) {
+	public ServiceRegistration<?> registerService(String[] clazzes, Object service, Dictionary<String, ?> properties) {
 		checkValid();
-
 		return framework.getServiceRegistry().registerService(this, clazzes, service, properties);
 	}
 
@@ -519,7 +445,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 *
 	 * @see #registerService(java.lang.String[], java.lang.Object, java.util.Dictionary)
 	 */
-	public ServiceRegistration registerService(String clazz, Object service, Dictionary properties) {
+	public ServiceRegistration<?> registerService(String clazz, Object service, Dictionary<String, ?> properties) {
 		String[] clazzes = new String[] {clazz};
 
 		return registerService(clazzes, service, properties);
@@ -568,12 +494,12 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * @exception InvalidSyntaxException If <tt>filter</tt> contains
 	 * an invalid filter string which cannot be parsed.
 	 */
-	public ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
+	public ServiceReference<?>[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
 		checkValid();
 		return framework.getServiceRegistry().getServiceReferences(this, clazz, filter, false);
 	}
 
-	public ServiceReference[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
+	public ServiceReference<?>[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
 		checkValid();
 		return framework.getServiceRegistry().getServiceReferences(this, clazz, filter, true);
 	}
@@ -598,7 +524,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * if no services are registered which implement the named class.
 	 * @see #getServiceReferences
 	 */
-	public ServiceReference getServiceReference(String clazz) {
+	public ServiceReference<?> getServiceReference(String clazz) {
 		checkValid();
 
 		return framework.getServiceRegistry().getServiceReference(this, clazz);
@@ -654,17 +580,19 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * @see #ungetService
 	 * @see ServiceFactory
 	 */
-	public Object getService(ServiceReference reference) {
+	public <S> S getService(ServiceReference<S> reference) {
 		checkValid();
 		if (reference == null)
 			throw new NullPointerException("A null service reference is not allowed."); //$NON-NLS-1$
 		synchronized (contextLock) {
 			if (servicesInUse == null)
 				// Cannot predict how many services a bundle will use, start with a small table.
-				servicesInUse = new HashMap(10);
+				servicesInUse = new HashMap<ServiceRegistrationImpl<?>, ServiceUse<?>>(10);
 		}
 
-		return framework.getServiceRegistry().getService(this, (ServiceReferenceImpl) reference);
+		@SuppressWarnings("unchecked")
+		S service = (S) framework.getServiceRegistry().getService(this, (ServiceReferenceImpl<S>) reference);
+		return service;
 	}
 
 	/**
@@ -702,10 +630,10 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * @see #getService
 	 * @see ServiceFactory
 	 */
-	public boolean ungetService(ServiceReference reference) {
+	public boolean ungetService(ServiceReference<?> reference) {
 		checkValid();
 
-		return framework.getServiceRegistry().ungetService(this, (ServiceReferenceImpl) reference);
+		return framework.getServiceRegistry().ungetService(this, (ServiceReferenceImpl<?>) reference);
 	}
 
 	/**
@@ -771,7 +699,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 		if (Profile.PROFILE && Profile.STARTUP)
 			Profile.logEnter("BundleContextImpl.startActivator()", null); //$NON-NLS-1$
 		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
+			AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
 				public Object run() throws Exception {
 					if (bundleActivator != null) {
 						if (Profile.PROFILE && Profile.STARTUP)
@@ -796,7 +724,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 				t = ((PrivilegedActionException) t).getException();
 			}
 
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.printStackTrace(t);
 			}
 
@@ -833,7 +761,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 */
 	protected void stop() throws BundleException {
 		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
+			AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
 				public Object run() throws Exception {
 					if (activator != null) {
 						// make sure the context class loader is set correctly
@@ -854,7 +782,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 				t = ((PrivilegedActionException) t).getException();
 			}
 
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.printStackTrace(t);
 			}
 
@@ -872,7 +800,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	 * @return A map of ServiceRegistrationImpl to ServiceUse for services in use by 
 	 * this context.
 	 */
-	public Map getServicesInUseMap() {
+	public Map<ServiceRegistrationImpl<?>, ServiceUse<?>> getServicesInUseMap() {
 		synchronized (contextLock) {
 			return servicesInUse;
 		}
@@ -898,7 +826,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 					case Framework.BUNDLEEVENTSYNC : {
 						BundleListener listener = (BundleListener) l;
 
-						if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+						if (Debug.DEBUG_EVENTS) {
 							String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 							Debug.println("dispatchBundleEvent[" + tmpBundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 						}
@@ -926,7 +854,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 						ServiceEvent event = (ServiceEvent) object;
 
 						ServiceListener listener = (ServiceListener) l;
-						if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+						if (Debug.DEBUG_EVENTS) {
 							String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 							Debug.println("dispatchServiceEvent[" + tmpBundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 						}
@@ -938,7 +866,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 					case Framework.FRAMEWORKEVENT : {
 						FrameworkListener listener = (FrameworkListener) l;
 
-						if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+						if (Debug.DEBUG_EVENTS) {
 							String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 							Debug.println("dispatchFrameworkEvent[" + tmpBundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 						}
@@ -952,7 +880,7 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 				}
 			}
 		} catch (Throwable t) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Exception in bottom level event dispatcher: " + t.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(t);
 			}
@@ -1016,4 +944,31 @@ public class BundleContextImpl implements BundleContext, EventDispatcher {
 	public Framework getFramework() {
 		return framework;
 	}
+
+	public <S> ServiceRegistration<S> registerService(Class<S> clazz, S service, Dictionary<String, ?> properties) {
+		@SuppressWarnings("unchecked")
+		ServiceRegistration<S> registration = (ServiceRegistration<S>) registerService(clazz.getName(), service, properties);
+		return registration;
+	}
+
+	public <S> ServiceReference<S> getServiceReference(Class<S> clazz) {
+		@SuppressWarnings("unchecked")
+		ServiceReference<S> reference = (ServiceReference<S>) getServiceReference(clazz.getName());
+		return reference;
+	}
+
+	public <S> Collection<ServiceReference<S>> getServiceReferences(Class<S> clazz, String filter) throws InvalidSyntaxException {
+		@SuppressWarnings("unchecked")
+		ServiceReference<S>[] refs = (ServiceReference<S>[]) getServiceReferences(clazz.getName(), filter);
+		if (refs == null) {
+			@SuppressWarnings("unchecked")
+			Collection<ServiceReference<S>> empty = Collections.EMPTY_LIST;
+			return empty;
+		}
+		List<ServiceReference<S>> result = new ArrayList<ServiceReference<S>>(refs.length);
+		for (ServiceReference<S> b : refs) {
+			result.add(b);
+		}
+		return result;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleFragment.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleFragment.java
index 453360a..98ca8ee 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleFragment.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ public class BundleFragment extends AbstractBundle {
 	 * Load the bundle.
 	 */
 	protected void load() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (INSTALLED)) == 0) {
 				Debug.println("Bundle.load called when state != INSTALLED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -62,7 +62,7 @@ public class BundleFragment extends AbstractBundle {
 	 * @return  true if an exported package is "in use". i.e. it has been imported by a bundle
 	 */
 	protected boolean reload(AbstractBundle newBundle) {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (INSTALLED | RESOLVED)) == 0) {
 				Debug.println("Bundle.reload called when state != INSTALLED | RESOLVED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -73,8 +73,6 @@ public class BundleFragment extends AbstractBundle {
 		if (framework.isActive()) {
 			if (hosts != null) {
 				if (state == RESOLVED) {
-					// add the bundle data to the list of removals
-					framework.packageAdmin.addRemovalPending(bundledata);
 					exporting = true; // if we have a host we cannot be removed until the host is refreshed
 					hosts = null;
 					state = INSTALLED;
@@ -112,7 +110,7 @@ public class BundleFragment extends AbstractBundle {
 	 * this method!
 	 */
 	protected void refresh() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (UNINSTALLED | INSTALLED | RESOLVED)) == 0) {
 				Debug.println("Bundle.refresh called when state != UNINSTALLED | INSTALLED | RESOLVED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -135,7 +133,7 @@ public class BundleFragment extends AbstractBundle {
 	 * @return  true if an exported package is "in use". i.e. it has been imported by a bundle
 	 */
 	protected boolean unload() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (UNINSTALLED | INSTALLED | RESOLVED)) == 0) {
 				Debug.println("Bundle.unload called when state != UNINSTALLED | INSTALLED | RESOLVED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -146,8 +144,6 @@ public class BundleFragment extends AbstractBundle {
 		if (framework.isActive()) {
 			if (hosts != null) {
 				if (state == RESOLVED) {
-					// add the bundle data to the list of removals
-					framework.packageAdmin.addRemovalPending(bundledata);
 					exporting = true; // if we have a host we cannot be removed until the host is refreshed
 					hosts = null;
 					state = INSTALLED;
@@ -173,7 +169,7 @@ public class BundleFragment extends AbstractBundle {
 	 * @return     the resulting Class
 	 * @exception  java.lang.ClassNotFoundException  if the class definition was not found.
 	 */
-	protected Class loadClass(String name, boolean checkPermission) throws ClassNotFoundException {
+	protected Class<?> loadClass(String name, boolean checkPermission) throws ClassNotFoundException {
 		if (checkPermission) {
 			try {
 				framework.checkAdminPermission(this, AdminPermission.CLASS);
@@ -212,7 +208,7 @@ public class BundleFragment extends AbstractBundle {
 
 	}
 
-	public Enumeration getResources(String name) {
+	public Enumeration<URL> getResources(String name) {
 		checkValid();
 		// cannot get a resource for a fragment because there is no classloader
 		// associated with fragments.
@@ -253,7 +249,7 @@ public class BundleFragment extends AbstractBundle {
 	 * @see ServiceRegistration
 	 * @see ServiceReference
 	 */
-	public ServiceReference[] getRegisteredServices() {
+	public ServiceReference<?>[] getRegisteredServices() {
 		checkValid();
 		// Fragments cannot have a BundleContext and therefore
 		// cannot have any services registered.
@@ -276,7 +272,7 @@ public class BundleFragment extends AbstractBundle {
 	 * bundle has been uninstalled.
 	 * @see ServiceReference
 	 */
-	public ServiceReference[] getServicesInUse() {
+	public ServiceReference<?>[] getServicesInUse() {
 		checkValid();
 		// Fragments cannot have a BundleContext and therefore
 		// cannot have any services in use.
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleHost.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleHost.java
index 4e40f9b..cfc55b0 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleHost.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleHost.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.internal.loader.BundleLoader;
 import org.eclipse.osgi.internal.loader.BundleLoaderProxy;
 import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.ResolverHookException;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
 
@@ -37,7 +38,7 @@ public class BundleHost extends AbstractBundle {
 	/** The List of BundleFragments */
 	protected BundleFragment[] fragments;
 
-	public BundleHost(BundleData bundledata, Framework framework) throws BundleException {
+	public BundleHost(BundleData bundledata, Framework framework) {
 		super(bundledata, framework);
 		context = null;
 		fragments = null;
@@ -47,7 +48,7 @@ public class BundleHost extends AbstractBundle {
 	 * Load the bundle.
 	 */
 	protected void load() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (INSTALLED)) == 0) {
 				Debug.println("Bundle.load called when state != INSTALLED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -75,7 +76,7 @@ public class BundleHost extends AbstractBundle {
 	 * @return  true if an exported package is "in use". i.e. it has been imported by a bundle
 	 */
 	protected boolean reload(AbstractBundle newBundle) {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (INSTALLED | RESOLVED)) == 0) {
 				Debug.println("Bundle.reload called when state != INSTALLED | RESOLVED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -89,8 +90,6 @@ public class BundleHost extends AbstractBundle {
 				BundleLoaderProxy curProxy = getLoaderProxy();
 				exporting = curProxy.inUse();
 				if (exporting) {
-					// add the bundle data to the list of removals
-					framework.packageAdmin.addRemovalPending(bundledata);
 					// make sure the BundleLoader is created.
 					curProxy.getBundleLoader().createClassLoader();
 				} else
@@ -121,7 +120,7 @@ public class BundleHost extends AbstractBundle {
 	 * This method must be called while holding the bundles lock.
 	 */
 	protected void refresh() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (UNINSTALLED | INSTALLED | RESOLVED)) == 0) {
 				Debug.println("Bundle.reload called when state != UNINSTALLED | INSTALLED | RESOLVED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -145,7 +144,7 @@ public class BundleHost extends AbstractBundle {
 	 * @return  true if an exported package is "in use". i.e. it has been imported by a bundle
 	 */
 	protected boolean unload() {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (UNINSTALLED | INSTALLED | RESOLVED)) == 0) {
 				Debug.println("Bundle.unload called when state != UNINSTALLED | INSTALLED | RESOLVED: " + this); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -159,8 +158,6 @@ public class BundleHost extends AbstractBundle {
 				BundleLoaderProxy curProxy = getLoaderProxy();
 				exporting = curProxy.inUse();
 				if (exporting) {
-					// add the bundle data to the list of removals
-					framework.packageAdmin.addRemovalPending(bundledata);
 					// make sure the BundleLoader is created.
 					curProxy.getBundleLoader().createClassLoader();
 				} else
@@ -191,7 +188,7 @@ public class BundleHost extends AbstractBundle {
 				return null;
 			}
 		}
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			if ((state & (STARTING | ACTIVE | STOPPING | RESOLVED)) == 0) {
 				Debug.println("Bundle.checkLoader() called when state != STARTING | ACTIVE | STOPPING | RESOLVED: " + this); //$NON-NLS-1$ 
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -200,7 +197,7 @@ public class BundleHost extends AbstractBundle {
 
 		BundleLoader loader = getBundleLoader();
 		if (loader == null) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Bundle.checkLoader() called when loader == null: " + this); //$NON-NLS-1$ 
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
 			}
@@ -217,7 +214,7 @@ public class BundleHost extends AbstractBundle {
 	 * @return     the resulting Class
 	 * @exception  java.lang.ClassNotFoundException  if the class definition was not found.
 	 */
-	protected Class loadClass(String name, boolean checkPermission) throws ClassNotFoundException {
+	protected Class<?> loadClass(String name, boolean checkPermission) throws ClassNotFoundException {
 		if (checkPermission) {
 			try {
 				framework.checkAdminPermission(this, AdminPermission.CLASS);
@@ -269,22 +266,28 @@ public class BundleHost extends AbstractBundle {
 			return null;
 		}
 		loader = checkLoader();
-		if (loader == null)
+		if (loader == null) {
+			Enumeration<URL> result = bundledata.findLocalResources(name);
+			if (result != null && result.hasMoreElements())
+				return result.nextElement();
 			return null;
-		return (loader.findResource(name));
+		}
+		return loader.findResource(name);
 	}
 
-	public Enumeration getResources(String name) throws IOException {
+	public Enumeration<URL> getResources(String name) throws IOException {
 		BundleLoader loader = null;
 		try {
 			framework.checkAdminPermission(this, AdminPermission.RESOURCE);
 		} catch (SecurityException ee) {
 			return null;
 		}
+		Enumeration<URL> result;
 		loader = checkLoader();
 		if (loader == null)
-			return null;
-		Enumeration result = loader.getResources(name);
+			result = bundledata.findLocalResources(name);
+		else
+			result = loader.getResources(name);
 		if (result != null && result.hasMoreElements())
 			return result;
 		return null;
@@ -299,12 +302,12 @@ public class BundleHost extends AbstractBundle {
 		if ((options & START_TRANSIENT) == 0) {
 			setStatus(Constants.BUNDLE_STARTED, true);
 			setStatus(Constants.BUNDLE_ACTIVATION_POLICY, (options & START_ACTIVATION_POLICY) != 0);
-			if (Debug.DEBUG && Debug.MONITOR_ACTIVATION)
+			if (Debug.MONITOR_ACTIVATION)
 				new Exception("A persistent start has been called on bundle: " + getBundleData()).printStackTrace(); //$NON-NLS-1$
 		}
 		if (!framework.active || (state & ACTIVE) != 0)
 			return;
-		if (getStartLevel() > framework.startLevelManager.getStartLevel()) {
+		if (getInternalStartLevel() > framework.startLevelManager.getStartLevel()) {
 			if ((options & LAZY_TRIGGER) == 0 && (options & START_TRANSIENT) != 0) {
 				// throw exception if this is a transient start
 				String msg = NLS.bind(Msg.BUNDLE_TRANSIENT_START_ERROR, this);
@@ -315,8 +318,16 @@ public class BundleHost extends AbstractBundle {
 		}
 
 		if (state == INSTALLED) {
-			if (!framework.packageAdmin.resolveBundles(new Bundle[] {this}))
-				throw getResolutionFailureException();
+			try {
+				if (!framework.packageAdmin.resolveBundles(new Bundle[] {this}, true))
+					throw getResolutionFailureException();
+			} catch (IllegalStateException e) {
+				// Can happen if the resolver detects a nested resolve process
+				throw new BundleException("Unexpected resolution exception.", BundleException.RESOLVE_ERROR, e); //$NON-NLS-1$
+			} catch (ResolverHookException e) {
+				throw new BundleException("Unexpected resolution exception.", BundleException.REJECTED_BY_HOOK, e.getCause()); //$NON-NLS-1$
+			}
+
 		}
 
 		if ((options & START_ACTIVATION_POLICY) != 0 && (bundledata.getStatus() & Constants.BUNDLE_LAZY_START) != 0) {
@@ -331,8 +342,8 @@ public class BundleHost extends AbstractBundle {
 			return;
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
-			Debug.println("Bundle: Active sl = " + framework.startLevelManager.getStartLevel() + "; Bundle " + getBundleId() + " sl = " + getStartLevel()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		if (Debug.DEBUG_GENERAL) {
+			Debug.println("Bundle: Active sl = " + framework.startLevelManager.getStartLevel() + "; Bundle " + getBundleId() + " sl = " + getInternalStartLevel()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
 		if ((options & LAZY_TRIGGER) != 0) {
@@ -357,22 +368,22 @@ public class BundleHost extends AbstractBundle {
 		context = getContext();
 		//STARTUP TIMING Start here		
 		long start = 0;
-		if (Debug.DEBUG) {
-			BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
-			if (bundleStats != null)
-				bundleStats.watchBundle(this, BundleWatcher.START_ACTIVATION);
-			if (Debug.DEBUG_BUNDLE_TIME) {
-				start = System.currentTimeMillis();
-				System.out.println("Starting " + getSymbolicName()); //$NON-NLS-1$
-			}
+
+		BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
+		if (bundleStats != null)
+			bundleStats.watchBundle(this, BundleWatcher.START_ACTIVATION);
+		if (Debug.DEBUG_BUNDLE_TIME) {
+			start = System.currentTimeMillis();
+			System.out.println("Starting " + getSymbolicName()); //$NON-NLS-1$
 		}
+
 		try {
 			context.start();
 			startHook();
 			if (framework.active) {
 				state = ACTIVE;
 
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+				if (Debug.DEBUG_GENERAL) {
 					Debug.println("->started " + this); //$NON-NLS-1$
 				}
 				// release the state change lock before sending lazy activation event (bug 258659)
@@ -395,13 +406,11 @@ public class BundleHost extends AbstractBundle {
 			framework.publishBundleEvent(BundleEvent.STOPPED, this);
 			throw e;
 		} finally {
-			if (Debug.DEBUG) {
-				BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
-				if (bundleStats != null)
-					bundleStats.watchBundle(this, BundleWatcher.END_ACTIVATION);
-				if (Debug.DEBUG_BUNDLE_TIME)
-					System.out.println("End starting " + getSymbolicName() + " " + (System.currentTimeMillis() - start)); //$NON-NLS-1$ //$NON-NLS-2$
-			}
+			if (bundleStats != null)
+				bundleStats.watchBundle(this, BundleWatcher.END_ACTIVATION);
+			if (Debug.DEBUG_BUNDLE_TIME)
+				System.out.println("End starting " + getSymbolicName() + " " + (System.currentTimeMillis() - start)); //$NON-NLS-1$ //$NON-NLS-2$
+
 		}
 
 		if (state == UNINSTALLED) {
@@ -420,7 +429,7 @@ public class BundleHost extends AbstractBundle {
 
 	protected boolean readyToResume() {
 		// Return false if the bundle is not at the correct start-level
-		if (getStartLevel() > framework.startLevelManager.getStartLevel())
+		if (getInternalStartLevel() > framework.startLevelManager.getStartLevel())
 			return false;
 		int status = bundledata.getStatus();
 		// Return false if the bundle is not persistently marked for start
@@ -481,18 +490,18 @@ public class BundleHost extends AbstractBundle {
 		if ((options & STOP_TRANSIENT) == 0) {
 			setStatus(Constants.BUNDLE_STARTED, false);
 			setStatus(Constants.BUNDLE_ACTIVATION_POLICY, false);
-			if (Debug.DEBUG && Debug.MONITOR_ACTIVATION)
+			if (Debug.MONITOR_ACTIVATION)
 				new Exception("A persistent start has been called on bundle: " + getBundleData()).printStackTrace(); //$NON-NLS-1$
 		}
 		if (framework.active) {
 			if ((state & (STOPPING | RESOLVED | INSTALLED)) != 0) {
 				return;
 			}
-			if (Debug.DEBUG) {
-				BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
-				if (bundleStats != null)
-					bundleStats.watchBundle(this, BundleWatcher.START_DEACTIVATION);
-			}
+
+			BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
+			if (bundleStats != null)
+				bundleStats.watchBundle(this, BundleWatcher.START_DEACTIVATION);
+
 			state = STOPPING;
 			framework.publishBundleEvent(BundleEvent.STOPPING, this);
 			try {
@@ -510,16 +519,14 @@ public class BundleHost extends AbstractBundle {
 
 				state = RESOLVED;
 
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+				if (Debug.DEBUG_GENERAL) {
 					Debug.println("->stopped " + this); //$NON-NLS-1$
 				}
 
 				framework.publishBundleEvent(BundleEvent.STOPPED, this);
-				if (Debug.DEBUG) {
-					BundleWatcher bundleStats = framework.adaptor.getBundleWatcher();
-					if (bundleStats != null)
-						bundleStats.watchBundle(this, BundleWatcher.END_DEACTIVATION);
-				}
+				if (bundleStats != null)
+					bundleStats.watchBundle(this, BundleWatcher.END_DEACTIVATION);
+
 			}
 		}
 	}
@@ -547,7 +554,7 @@ public class BundleHost extends AbstractBundle {
 	 * @see ServiceRegistration
 	 * @see ServiceReference
 	 */
-	public ServiceReference[] getRegisteredServices() {
+	public ServiceReference<?>[] getRegisteredServices() {
 		checkValid();
 
 		if (context == null) {
@@ -573,7 +580,7 @@ public class BundleHost extends AbstractBundle {
 	 * bundle has been uninstalled.
 	 * @see ServiceReference
 	 */
-	public ServiceReference[] getServicesInUse() {
+	public ServiceReference<?>[] getServicesInUse() {
 		checkValid();
 
 		if (context == null) {
@@ -619,6 +626,8 @@ public class BundleHost extends AbstractBundle {
 			for (int i = 0; i < fragments.length; i++) {
 				if (fragment == fragments[i])
 					return; // this fragment is already attached
+				// need to flush the other attached fragment manifest caches in case the attaching fragment provides translations (bug 339211)
+				fragments[i].manifestLocalization = null;
 				if (!inserted && fragment.getBundleId() < fragments[i].getBundleId()) {
 					// if the loader has already been created
 					// then we cannot attach a fragment into the middle
@@ -635,6 +644,7 @@ public class BundleHost extends AbstractBundle {
 				newFragments[newFragments.length - 1] = fragment;
 			fragments = newFragments;
 		}
+		// need to flush the manifest cache in case the attaching fragment provides translations
 		manifestLocalization = null;
 	}
 
@@ -650,6 +660,9 @@ public class BundleHost extends AbstractBundle {
 		if (bundleDescription == null)
 			return null;
 		proxy = new BundleLoaderProxy(this, bundleDescription);
+		// Note that BundleLoaderProxy is a BundleReference
+		// this is necessary to ensure the resolver can continue
+		// to provide BundleRevision objects to resolver hooks.
 		bundleDescription.setUserObject(proxy);
 		return proxy;
 	}
@@ -669,4 +682,5 @@ public class BundleHost extends AbstractBundle {
 		BundleClassLoader bcl = loader == null ? null : loader.createClassLoader();
 		return (bcl instanceof ClassLoader) ? (ClassLoader) bcl : null;
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleRepository.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleRepository.java
index 22819de..b5dae7f 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleRepository.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleRepository.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,19 +28,19 @@ import org.osgi.framework.Version;
  */
 public final class BundleRepository {
 	/** bundles by install order */
-	private ArrayList bundlesByInstallOrder;
+	private List<AbstractBundle> bundlesByInstallOrder;
 
 	/** bundles keyed by bundle Id */
 	private KeyedHashSet bundlesById;
 
 	/** bundles keyed by SymbolicName */
-	private HashMap bundlesBySymbolicName;
+	private Map<String, AbstractBundle[]> bundlesBySymbolicName;
 
 	public BundleRepository(int initialCapacity) {
 		synchronized (this) {
-			bundlesByInstallOrder = new ArrayList(initialCapacity);
+			bundlesByInstallOrder = new ArrayList<AbstractBundle>(initialCapacity);
 			bundlesById = new KeyedHashSet(initialCapacity, true);
-			bundlesBySymbolicName = new HashMap(initialCapacity);
+			bundlesBySymbolicName = new HashMap<String, AbstractBundle[]>(initialCapacity);
 		}
 	}
 
@@ -48,7 +48,7 @@ public final class BundleRepository {
 	 * Gets a list of bundles ordered by install order.
 	 * @return List of bundles by install order.
 	 */
-	public synchronized List getBundles() {
+	public synchronized List<AbstractBundle> getBundles() {
 		return bundlesByInstallOrder;
 	}
 
@@ -65,7 +65,7 @@ public final class BundleRepository {
 	public synchronized AbstractBundle[] getBundles(String symbolicName) {
 		if (Constants.SYSTEM_BUNDLE_SYMBOLICNAME.equals(symbolicName))
 			symbolicName = Constants.getInternalSymbolicName();
-		return (AbstractBundle[]) bundlesBySymbolicName.get(symbolicName);
+		return bundlesBySymbolicName.get(symbolicName);
 	}
 
 	public synchronized AbstractBundle getBundle(String symbolicName, Version version) {
@@ -92,7 +92,7 @@ public final class BundleRepository {
 		String symbolicName = bundle.getSymbolicName();
 		if (symbolicName == null)
 			return;
-		AbstractBundle[] bundles = (AbstractBundle[]) bundlesBySymbolicName.get(symbolicName);
+		AbstractBundle[] bundles = bundlesBySymbolicName.get(symbolicName);
 		if (bundles == null) {
 			// making the initial capacity on this 1 since it
 			// should be rare that multiple version exist
@@ -102,7 +102,7 @@ public final class BundleRepository {
 			return;
 		}
 
-		ArrayList list = new ArrayList(bundles.length + 1);
+		List<AbstractBundle> list = new ArrayList<AbstractBundle>(bundles.length + 1);
 		// find place to insert the bundle
 		Version newVersion = bundle.getVersion();
 		boolean added = false;
@@ -141,7 +141,7 @@ public final class BundleRepository {
 	}
 
 	private void removeSymbolicName(String symbolicName, AbstractBundle bundle) {
-		AbstractBundle[] bundles = (AbstractBundle[]) bundlesBySymbolicName.get(symbolicName);
+		AbstractBundle[] bundles = bundlesBySymbolicName.get(symbolicName);
 		if (bundles == null)
 			return;
 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleSource.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleSource.java
index 79a3bbe..a27e1ee 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleSource.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleSource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,10 +29,16 @@ public class BundleSource extends URLConnection {
 		this.in = in;
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public void connect() throws IOException {
 		connected = true;
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public InputStream getInputStream() throws IOException {
 		return (in);
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Constants.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Constants.java
index d5bee83..ccbd8eb 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Constants.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Constants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -204,29 +204,6 @@ public class Constants implements org.osgi.framework.Constants {
 	public final static String OPTIONAL_ATTRIBUTE = "optional"; //$NON-NLS-1$
 
 	/**
-	 * Manifest header attribute (named "require-packages")
-	 * for Require-Bundle
-	 * specifying the subset of packages that are accessible from
-	 * the required bundle.  If the require-packages parameter
-	 * is not specified then all packages provided by the required bundle
-	 * are accessible.  The value of this parameter must be a quoted
-	 * string.  The syntax of the quoted string value is the same as
-	 * that of the Provide-Package manifest header value.
-	 *
-	 * <p> The attribute value is encoded in the Require-Bundle
-	 * manifest header like:
-	 * <pre>
-	 * Require-Bundle: org.osgi.test;
-	 *  require-packages="org.osgi.test.pkg1,org.osgi.test.pkg2"
-	 * </pre>
-	 * <p>
-	 * NOTE: this is only used for backwards compatibility, bundles manifest using
-	 * syntax version 2 will not recognize this attribute.
-	 * @deprecated
-	 */
-	public final static String REQUIRE_PACKAGES_ATTRIBUTE = "require-packages"; //$NON-NLS-1$
-
-	/**
 	* The key used to designate the buddy loader associated with a given bundle.
 	*/
 	public final static String BUDDY_LOADER = "Eclipse-BuddyPolicy"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/CoreResolverHookFactory.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/CoreResolverHookFactory.java
new file mode 100644
index 0000000..90a5801
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/CoreResolverHookFactory.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.framework.internal.core;
+
+import java.util.*;
+import org.eclipse.osgi.framework.debug.Debug;
+import org.eclipse.osgi.internal.serviceregistry.*;
+import org.eclipse.osgi.service.resolver.ResolverHookException;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.*;
+import org.osgi.framework.hooks.resolver.ResolverHook;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+import org.osgi.framework.wiring.*;
+
+/**
+ * This class encapsulates the delegation to ResolverHooks that are registered with the service
+ * registry.  This way the resolver implementation only has to call out to a single hook
+ * which does all the necessary service registry lookups.
+ * 
+ * This class is not thread safe and expects external synchronization.
+ *
+ */
+public class CoreResolverHookFactory implements ResolverHookFactory {
+	// need a tuple to hold the service reference and hook object
+	// do not use a map for performance reasons; no need to hash based on a key.
+	static class HookReference {
+		public HookReference(ServiceReferenceImpl<ResolverHookFactory> reference, ResolverHook hook) {
+			this.reference = reference;
+			this.hook = hook;
+		}
+
+		final ServiceReferenceImpl<ResolverHookFactory> reference;
+		final ResolverHook hook;
+	}
+
+	private final BundleContextImpl context;
+	private final ServiceRegistry registry;
+
+	public CoreResolverHookFactory(BundleContextImpl context, ServiceRegistry registry) {
+		this.context = context;
+		this.registry = registry;
+	}
+
+	void handleHookException(Throwable t, Object hook, String method, Bundle hookBundle, List<HookReference> hookRefs, boolean causeFailure) {
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println(hook.getClass().getName() + "." + method + "() exception:"); //$NON-NLS-1$ //$NON-NLS-2$
+			if (t != null)
+				Debug.printStackTrace(t);
+		}
+		String message = NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, hook.getClass().getName(), method);
+		if (causeFailure) {
+			releaseHooks(hookRefs);
+			throw new ResolverHookException(message, t);
+		}
+		BundleException be = new BundleException(message, BundleException.REJECTED_BY_HOOK, t);
+		context.framework.publishFrameworkEvent(FrameworkEvent.ERROR, hookBundle, be);
+	}
+
+	private ServiceReferenceImpl<ResolverHookFactory>[] getHookReferences() {
+		try {
+			@SuppressWarnings("unchecked")
+			ServiceReferenceImpl<ResolverHookFactory>[] result = (ServiceReferenceImpl<ResolverHookFactory>[]) registry.getServiceReferences(context, ResolverHookFactory.class.getName(), null, false, false);
+			return result;
+		} catch (InvalidSyntaxException e) {
+			// cannot happen; no filter
+			return null;
+		}
+	}
+
+	public ResolverHook begin(Collection<BundleRevision> triggers) {
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("ResolverHook.begin"); //$NON-NLS-1$
+		}
+		ServiceReferenceImpl<ResolverHookFactory>[] refs = getHookReferences();
+		@SuppressWarnings("unchecked")
+		List<HookReference> hookRefs = refs == null ? Collections.EMPTY_LIST : new ArrayList<CoreResolverHookFactory.HookReference>(refs.length);
+		if (refs != null)
+			for (ServiceReferenceImpl<ResolverHookFactory> hookRef : refs) {
+				ResolverHookFactory factory = context.getService(hookRef);
+				if (factory != null) {
+					try {
+						ResolverHook hook = factory.begin(triggers);
+						if (hook != null)
+							hookRefs.add(new HookReference(hookRef, hook));
+					} catch (Throwable t) {
+						handleHookException(t, factory, "begin", hookRef.getBundle(), hookRefs, true); //$NON-NLS-1$
+					}
+				}
+			}
+		return new CoreResolverHook(hookRefs);
+	}
+
+	void releaseHooks(List<HookReference> hookRefs) {
+		for (HookReference hookRef : hookRefs)
+			context.ungetService(hookRef.reference);
+		hookRefs.clear();
+	}
+
+	class CoreResolverHook implements ResolverHook {
+		private final List<HookReference> hooks;
+
+		CoreResolverHook(List<HookReference> hooks) {
+			this.hooks = hooks;
+		}
+
+		public void filterResolvable(Collection<BundleRevision> candidates) {
+			if (Debug.DEBUG_HOOKS) {
+				Debug.println("ResolverHook.filterResolvable(" + candidates + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			if (hooks.isEmpty())
+				return;
+			candidates = new ShrinkableCollection<BundleRevision>(candidates);
+			for (Iterator<HookReference> iHooks = hooks.iterator(); iHooks.hasNext();) {
+				HookReference hookRef = iHooks.next();
+				if (hookRef.reference.getBundle() == null) {
+					handleHookException(null, hookRef.hook, "filterResolvable", hookRef.reference.getBundle(), hooks, true); //$NON-NLS-1$
+				} else {
+					try {
+						hookRef.hook.filterResolvable(candidates);
+					} catch (Throwable t) {
+						handleHookException(t, hookRef.hook, "filterResolvable", hookRef.reference.getBundle(), hooks, true); //$NON-NLS-1$
+					}
+				}
+			}
+		}
+
+		public void filterSingletonCollisions(BundleCapability singleton, Collection<BundleCapability> collisionCandidates) {
+			if (Debug.DEBUG_HOOKS) {
+				Debug.println("ResolverHook.filterSingletonCollisions(" + singleton + ", " + collisionCandidates + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			if (hooks.isEmpty())
+				return;
+			collisionCandidates = new ShrinkableCollection<BundleCapability>(collisionCandidates);
+			for (Iterator<HookReference> iHooks = hooks.iterator(); iHooks.hasNext();) {
+				HookReference hookRef = iHooks.next();
+				if (hookRef.reference.getBundle() == null) {
+					handleHookException(null, hookRef.hook, "filterSingletonCollisions", hookRef.reference.getBundle(), hooks, true); //$NON-NLS-1$
+				} else {
+					try {
+						hookRef.hook.filterSingletonCollisions(singleton, collisionCandidates);
+					} catch (Throwable t) {
+						handleHookException(t, hookRef.hook, "filterSingletonCollisions", hookRef.reference.getBundle(), hooks, true); //$NON-NLS-1$
+					}
+				}
+			}
+		}
+
+		public void filterMatches(BundleRequirement requirement, Collection<BundleCapability> candidates) {
+			if (Debug.DEBUG_HOOKS) {
+				Debug.println("ResolverHook.filterMatches(" + requirement + ", " + candidates + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			if (hooks.isEmpty())
+				return;
+			candidates = new ShrinkableCollection<BundleCapability>(candidates);
+			for (Iterator<HookReference> iHooks = hooks.iterator(); iHooks.hasNext();) {
+				HookReference hookRef = iHooks.next();
+				if (hookRef.reference.getBundle() == null) {
+					handleHookException(null, hookRef.hook, "filterMatches", hookRef.reference.getBundle(), hooks, true); //$NON-NLS-1$
+				} else {
+					try {
+						hookRef.hook.filterMatches(requirement, candidates);
+					} catch (Throwable t) {
+						handleHookException(t, hookRef.hook, "filterMatches", hookRef.reference.getBundle(), hooks, true); //$NON-NLS-1$
+					}
+				}
+			}
+		}
+
+		public void end() {
+			if (Debug.DEBUG_HOOKS) {
+				Debug.println("ResolverHook.end"); //$NON-NLS-1$
+			}
+			if (hooks.isEmpty())
+				return;
+			for (Iterator<HookReference> iHooks = hooks.iterator(); iHooks.hasNext();) {
+				HookReference hookRef = iHooks.next();
+				// We do not remove unregistered services here because we are going to remove of of them at the end
+				if (hookRef.reference.getBundle() != null) {
+					try {
+						hookRef.hook.end();
+					} catch (Throwable t) {
+						handleHookException(t, hookRef.hook, "end", hookRef.reference.getBundle(), hooks, false); //$NON-NLS-1$
+					}
+
+				}
+			}
+			releaseHooks(hooks);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/EquinoxLauncher.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/EquinoxLauncher.java
index 895e045..2b71f24 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/EquinoxLauncher.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/EquinoxLauncher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,13 +10,12 @@
  *******************************************************************************/
 package org.eclipse.osgi.framework.internal.core;
 
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.net.URL;
 import java.security.*;
+import java.security.cert.X509Certificate;
 import java.util.*;
 import org.eclipse.core.runtime.adaptor.EclipseStarter;
-import org.eclipse.core.runtime.adaptor.LocationManager;
 import org.eclipse.osgi.baseadaptor.BaseAdaptor;
 import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
 import org.osgi.framework.*;
@@ -25,10 +24,10 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 
 	private volatile Framework framework;
 	private volatile Bundle systemBundle;
-	private final Map configuration;
+	private final Map<String, String> configuration;
 	private volatile ConsoleManager consoleMgr = null;
 
-	public EquinoxLauncher(Map configuration) {
+	public EquinoxLauncher(Map<String, String> configuration) {
 		this.configuration = configuration;
 	}
 
@@ -37,7 +36,7 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		if (System.getSecurityManager() == null)
 			internalInit();
 		else {
-			AccessController.doPrivileged(new PrivilegedAction() {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
 					internalInit();
 					return null;
@@ -78,7 +77,7 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		return current;
 	}
 
-	private void setEquinoxProperties(Map configuration) {
+	private void setEquinoxProperties(Map<String, String> configuration) {
 		Object threadBehavior = configuration == null ? null : configuration.get(Framework.PROP_FRAMEWORK_THREAD);
 		if (threadBehavior == null) {
 			if (FrameworkProperties.getProperty(Framework.PROP_FRAMEWORK_THREAD) == null)
@@ -87,6 +86,12 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 			FrameworkProperties.setProperty(Framework.PROP_FRAMEWORK_THREAD, (String) threadBehavior);
 		}
 
+		// set the compatibility boot delegation flag to false to get "standard" OSGi behavior WRT boot delegation (bug 344850)
+		if (FrameworkProperties.getProperty(Constants.OSGI_COMPATIBILITY_BOOTDELEGATION) == null)
+			FrameworkProperties.setProperty(Constants.OSGI_COMPATIBILITY_BOOTDELEGATION, "false"); //$NON-NLS-1$
+		// set the support for multiple host to true to get "standard" OSGi behavior (bug 344850)
+		if (FrameworkProperties.getProperty("osgi.support.multipleHosts") == null) //$NON-NLS-1$
+			FrameworkProperties.setProperty("osgi.support.multipleHosts", "true"); //$NON-NLS-1$ //$NON-NLS-2$
 		// first check props we are required to provide reasonable defaults for
 		Object windowSystem = configuration == null ? null : configuration.get(Constants.FRAMEWORK_WINDOWSYSTEM);
 		if (windowSystem == null) {
@@ -97,28 +102,13 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		// rest of props can be ignored if the configuration is null
 		if (configuration == null)
 			return;
-		// check each osgi defined property and set the appropriate equinox one
-		Object security = configuration.get(Constants.FRAMEWORK_SECURITY);
-		if (security != null) {
-			if (Framework.SECURITY_OSGI.equals(security))
-				FrameworkProperties.setProperty(Framework.PROP_EQUINOX_SECURITY, Framework.SECURITY_OSGI);
-			else if (security instanceof String)
-				FrameworkProperties.setProperty(Framework.PROP_EQUINOX_SECURITY, (String) security);
-		}
-		Object storage = configuration.get(Constants.FRAMEWORK_STORAGE);
-		if (storage != null && storage instanceof String)
-			FrameworkProperties.setProperty(LocationManager.PROP_CONFIG_AREA, (String) storage);
+		// check each osgi clean property and set the appropriate equinox one
 		Object clean = configuration.get(Constants.FRAMEWORK_STORAGE_CLEAN);
 		if (Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT.equals(clean)) {
 			// remove this so we only clean on first init
 			configuration.remove(Constants.FRAMEWORK_STORAGE_CLEAN);
 			FrameworkProperties.setProperty(EclipseStarter.PROP_CLEAN, Boolean.TRUE.toString());
 		}
-		Object parentCL = configuration.get(Constants.FRAMEWORK_BUNDLE_PARENT);
-		if (Constants.FRAMEWORK_BUNDLE_PARENT_FRAMEWORK.equals(parentCL))
-			parentCL = "fwk"; //$NON-NLS-1$
-		if (parentCL instanceof String)
-			FrameworkProperties.setProperty("osgi.parentClassloader", (String) parentCL); //$NON-NLS-1$
 	}
 
 	public FrameworkEvent waitForStop(long timeout) throws InterruptedException {
@@ -128,7 +118,7 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		return current.waitForStop(timeout);
 	}
 
-	public Enumeration findEntries(String path, String filePattern, boolean recurse) {
+	public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
@@ -153,21 +143,21 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		return current.getEntry(path);
 	}
 
-	public Enumeration getEntryPaths(String path) {
+	public Enumeration<String> getEntryPaths(String path) {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
 		return current.getEntryPaths(path);
 	}
 
-	public Dictionary getHeaders() {
+	public Dictionary<String, String> getHeaders() {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
 		return current.getHeaders();
 	}
 
-	public Dictionary getHeaders(String locale) {
+	public Dictionary<String, String> getHeaders(String locale) {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
@@ -185,7 +175,7 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		return Constants.SYSTEM_BUNDLE_LOCATION;
 	}
 
-	public ServiceReference[] getRegisteredServices() {
+	public ServiceReference<?>[] getRegisteredServices() {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
@@ -199,14 +189,14 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		return current.getResource(name);
 	}
 
-	public Enumeration getResources(String name) throws IOException {
+	public Enumeration<URL> getResources(String name) throws IOException {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
 		return current.getResources(name);
 	}
 
-	public ServiceReference[] getServicesInUse() {
+	public ServiceReference<?>[] getServicesInUse() {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
@@ -231,7 +221,7 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		return current.hasPermission(permission);
 	}
 
-	public Class loadClass(String name) throws ClassNotFoundException {
+	public Class<?> loadClass(String name) throws ClassNotFoundException {
 		Bundle current = systemBundle;
 		if (current == null)
 			return null;
@@ -251,8 +241,8 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 			internalStart();
 		else
 			try {
-				AccessController.doPrivileged(new PrivilegedExceptionAction() {
-					public Object run() throws BundleException {
+				AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
+					public Object run() {
 						internalStart();
 						return null;
 					}
@@ -268,13 +258,13 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 			sm.checkPermission(new AdminPermission(this, actions));
 	}
 
-	void internalStart() throws BundleException {
+	void internalStart() {
 		if (getState() == Bundle.ACTIVE)
 			return;
 		Framework current = internalInit();
 		int level = 1;
 		try {
-			level = Integer.parseInt((String) configuration.get(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+			level = Integer.parseInt(configuration.get(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
 		} catch (Throwable t) {
 			// do nothing
 		}
@@ -317,17 +307,41 @@ public class EquinoxLauncher implements org.osgi.framework.launch.Framework {
 		update();
 	}
 
-	public Map getSignerCertificates(int signersType) {
+	public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
 		Bundle current = systemBundle;
 		if (current != null)
 			return current.getSignerCertificates(signersType);
-		return Collections.EMPTY_MAP;
+		@SuppressWarnings("unchecked")
+		final Map<X509Certificate, List<X509Certificate>> empty = Collections.EMPTY_MAP;
+		return empty;
 	}
 
 	public Version getVersion() {
 		Bundle current = systemBundle;
 		if (current != null)
-			current.getVersion();
+			return current.getVersion();
 		return Version.emptyVersion;
 	}
+
+	public <A> A adapt(Class<A> adapterType) {
+		Bundle current = systemBundle;
+		if (current != null) {
+			return current.adapt(adapterType);
+		}
+		return null;
+	}
+
+	public int compareTo(Bundle o) {
+		Bundle current = systemBundle;
+		if (current != null)
+			return current.compareTo(o);
+		throw new IllegalStateException();
+	}
+
+	public File getDataFile(String filename) {
+		Bundle current = systemBundle;
+		if (current != null)
+			return current.getDataFile(filename);
+		return null;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java
index 310ebf0..f4482e0 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,9 +10,9 @@
  *******************************************************************************/
 package org.eclipse.osgi.framework.internal.core;
 
-import org.eclipse.osgi.internal.loader.*;
-
 import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osgi.internal.loader.*;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.ExportPackageDescription;
 import org.osgi.framework.*;
@@ -59,7 +59,7 @@ public class ExportedPackageImpl implements ExportedPackage {
 		if (bundle == null)
 			return null;
 		AbstractBundle[] bundles = bundle.framework.getAllBundles();
-		ArrayList importers = new ArrayList(10);
+		List<Bundle> importers = new ArrayList<Bundle>(10);
 		PackageSource supplierSource = supplier.createPackageSource(exportedPackage, false);
 		for (int i = 0; i < bundles.length; i++) {
 			if (!(bundles[i] instanceof BundleHost))
@@ -71,9 +71,12 @@ public class ExportedPackageImpl implements ExportedPackage {
 			if (supplierSource != null && supplierSource.hasCommonSource(importerSource))
 				importers.add(bundles[i]);
 		}
-		return (Bundle[]) importers.toArray(new Bundle[importers.size()]);
+		return importers.toArray(new Bundle[importers.size()]);
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public String getSpecificationVersion() {
 		return specVersion;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/FilterImpl.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/FilterImpl.java
index 19180a2..d4ccda3 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/FilterImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/FilterImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -145,58 +145,171 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 	/**
 	 * Filter using a service's properties.
 	 * <p>
-	 * The filter is executed using the keys and values of the referenced
-	 * service's properties. The keys are case insensitively matched with
-	 * the filter.
-	 *
-	 * @param reference The reference to the service whose properties are
-	 *        used in the match.
-	 * @return <code>true</code> if the service's properties match this
-	 *         filter; <code>false</code> otherwise.
+	 * This {@code Filter} is executed using the keys and values of the
+	 * referenced service's properties. The keys are looked up in a case
+	 * insensitive manner.
+	 * 
+	 * @param reference The reference to the service whose properties are used
+	 *        in the match.
+	 * @return {@code true} if the service's properties match this
+	 *         {@code Filter}; {@code false} otherwise.
 	 */
-	public boolean match(ServiceReference reference) {
+	public boolean match(ServiceReference<?> reference) {
 		if (reference instanceof ServiceReferenceImpl) {
-			return match0(((ServiceReferenceImpl) reference).getRegistration().getProperties());
+			return matchCase(((ServiceReferenceImpl<?>) reference).getRegistration().getProperties());
 		}
-		return match0(new ServiceReferenceDictionary(reference));
+		return matchCase(new ServiceReferenceDictionary(reference));
 	}
 
 	/**
-	 * Filter using a <code>Dictionary</code> object. The Filter is executed
-	 * using the <code>Dictionary</code> object's keys and values. The keys
-	 * are case insensitively matched with the filter.
-	 *
-	 * @param dictionary The <code>Dictionary</code> object whose keys are
-	 *        used in the match.
-	 * @return <code>true</code> if the <code>Dictionary</code> object's
-	 *         keys and values match this filter; <code>false</code>
-	 *         otherwise.
-	 * @throws IllegalArgumentException If <code>dictionary</code> contains
-	 *         case variants of the same key name.
+	 * Filter using a {@code Dictionary} with case insensitive key lookup. This
+	 * {@code Filter} is executed using the specified {@code Dictionary}'s keys
+	 * and values. The keys are looked up in a case insensitive manner.
+	 * 
+	 * @param dictionary The {@code Dictionary} whose key/value pairs are used
+	 *        in the match.
+	 * @return {@code true} if the {@code Dictionary}'s values match this
+	 *         filter; {@code false} otherwise.
+	 * @throws IllegalArgumentException If {@code dictionary} contains case
+	 *         variants of the same key name.
 	 */
-	public boolean match(Dictionary dictionary) {
+	public boolean match(Dictionary<String, ?> dictionary) {
 		if (dictionary != null) {
-			dictionary = new Headers(dictionary);
+			dictionary = new Headers<String, Object>(dictionary);
 		}
 
-		return match0(dictionary);
+		return matchCase(dictionary);
 	}
 
 	/**
-	 * Filter with case sensitivity using a <code>Dictionary</code> object.
-	 * The Filter is executed using the <code>Dictionary</code> object's
-	 * keys and values. The keys are case sensitively matched with the
-	 * filter.
+	 * Filter using a {@code Dictionary}. This {@code Filter} is executed using
+	 * the specified {@code Dictionary}'s keys and values. The keys are looked
+	 * up in a normal manner respecting case.
 	 * 
-	 * @param dictionary The <code>Dictionary</code> object whose keys are
-	 *        used in the match.
-	 * @return <code>true</code> if the <code>Dictionary</code> object's
-	 *         keys and values match this filter; <code>false</code>
-	 *         otherwise.
+	 * @param dictionary The {@code Dictionary} whose key/value pairs are used
+	 *        in the match.
+	 * @return {@code true} if the {@code Dictionary}'s values match this
+	 *         filter; {@code false} otherwise.
 	 * @since 1.3
 	 */
-	public boolean matchCase(Dictionary dictionary) {
-		return match0(dictionary);
+	public boolean matchCase(Dictionary<String, ?> dictionary) {
+		switch (op) {
+			case AND : {
+				FilterImpl[] filters = (FilterImpl[]) value;
+				for (FilterImpl f : filters) {
+					if (!f.matchCase(dictionary)) {
+						return false;
+					}
+				}
+
+				return true;
+			}
+
+			case OR : {
+				FilterImpl[] filters = (FilterImpl[]) value;
+				for (FilterImpl f : filters) {
+					if (f.matchCase(dictionary)) {
+						return true;
+					}
+				}
+
+				return false;
+			}
+
+			case NOT : {
+				FilterImpl filter = (FilterImpl) value;
+
+				return !filter.matchCase(dictionary);
+			}
+
+			case SUBSTRING :
+			case EQUAL :
+			case GREATER :
+			case LESS :
+			case APPROX : {
+				Object prop = (dictionary == null) ? null : dictionary.get(attr);
+
+				return compare(op, prop, value);
+			}
+
+			case PRESENT : {
+				if (Debug.DEBUG_FILTER) {
+					Debug.println("PRESENT(" + attr + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+
+				Object prop = (dictionary == null) ? null : dictionary.get(attr);
+
+				return prop != null;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Filter using a {@code Map}. This {@code Filter} is executed using the
+	 * specified {@code Map}'s keys and values. The keys are looked up in a
+	 * normal manner respecting case.
+	 * 
+	 * @param map The {@code Map} whose key/value pairs are used in the match.
+	 *        Maps with {@code null} key or values are not supported. A
+	 *        {@code null} value is considered not present to the filter.
+	 * @return {@code true} if the {@code Map}'s values match this filter;
+	 *         {@code false} otherwise.
+	 * @since 1.6
+	 */
+	public boolean matches(Map<String, ?> map) {
+		switch (op) {
+			case AND : {
+				FilterImpl[] filters = (FilterImpl[]) value;
+				for (FilterImpl f : filters) {
+					if (!f.matches(map)) {
+						return false;
+					}
+				}
+
+				return true;
+			}
+
+			case OR : {
+				FilterImpl[] filters = (FilterImpl[]) value;
+				for (FilterImpl f : filters) {
+					if (f.matches(map)) {
+						return true;
+					}
+				}
+
+				return false;
+			}
+
+			case NOT : {
+				FilterImpl filter = (FilterImpl) value;
+
+				return !filter.matches(map);
+			}
+
+			case SUBSTRING :
+			case EQUAL :
+			case GREATER :
+			case LESS :
+			case APPROX : {
+				Object prop = (map == null) ? null : map.get(attr);
+
+				return compare(op, prop, value);
+			}
+
+			case PRESENT : {
+				if (Debug.DEBUG_FILTER) {
+					Debug.println("PRESENT(" + attr + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+
+				Object prop = (map == null) ? null : map.get(attr);
+
+				return prop != null;
+			}
+		}
+
+		return false;
 	}
 
 	/**
@@ -233,8 +346,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 				sb.append('&');
 
 				FilterImpl[] filters = (FilterImpl[]) value;
-				for (int i = 0, size = filters.length; i < size; i++) {
-					sb.append(filters[i].normalize());
+				for (FilterImpl f : filters) {
+					sb.append(f.normalize());
 				}
 
 				break;
@@ -244,8 +357,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 				sb.append('|');
 
 				FilterImpl[] filters = (FilterImpl[]) value;
-				for (int i = 0, size = filters.length; i < size; i++) {
-					sb.append(filters[i].normalize());
+				for (FilterImpl f : filters) {
+					sb.append(f.normalize());
 				}
 
 				break;
@@ -265,9 +378,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 				String[] substrings = (String[]) value;
 
-				for (int i = 0, size = substrings.length; i < size; i++) {
-					String substr = substrings[i];
-
+				for (String substr : substrings) {
 					if (substr == null) /* * */{
 						sb.append('*');
 					} else /* xxx */{
@@ -379,69 +490,6 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 	}
 
 	/**
-	 * Internal match routine.
-	 * Dictionary parameter must support case-insensitive get.
-	 *
-	 * @param properties A dictionary whose
-	 * keys are used in the match.
-	 * @return If the Dictionary's keys match the filter,
-	 * return <code>true</code>. Otherwise, return <code>false</code>.
-	 */
-	private boolean match0(Dictionary properties) {
-		switch (op) {
-			case AND : {
-				FilterImpl[] filters = (FilterImpl[]) value;
-				for (int i = 0, size = filters.length; i < size; i++) {
-					if (!filters[i].match0(properties)) {
-						return false;
-					}
-				}
-
-				return true;
-			}
-
-			case OR : {
-				FilterImpl[] filters = (FilterImpl[]) value;
-				for (int i = 0, size = filters.length; i < size; i++) {
-					if (filters[i].match0(properties)) {
-						return true;
-					}
-				}
-
-				return false;
-			}
-
-			case NOT : {
-				FilterImpl filter = (FilterImpl) value;
-
-				return !filter.match0(properties);
-			}
-
-			case SUBSTRING :
-			case EQUAL :
-			case GREATER :
-			case LESS :
-			case APPROX : {
-				Object prop = (properties == null) ? null : properties.get(attr);
-
-				return compare(op, prop, value);
-			}
-
-			case PRESENT : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("PRESENT(" + attr + ")"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-
-				Object prop = (properties == null) ? null : properties.get(attr);
-
-				return prop != null;
-			}
-		}
-
-		return false;
-	}
-
-	/**
 	 * Encode the value string such that '(', '*', ')'
 	 * and '\' are escaped.
 	 *
@@ -482,7 +530,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare(int operation, Object value1, Object value2) {
 		if (value1 == null) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("compare(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 
@@ -493,19 +541,16 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 			return compare_String(operation, (String) value1, value2);
 		}
 
-		Class clazz = value1.getClass();
-
+		Class<?> clazz = value1.getClass();
 		if (clazz.isArray()) {
-			Class type = clazz.getComponentType();
-
+			Class<?> type = clazz.getComponentType();
 			if (type.isPrimitive()) {
 				return compare_PrimitiveArray(operation, type, value1, value2);
 			}
 			return compare_ObjectArray(operation, (Object[]) value1, value2);
 		}
-
-		if (value1 instanceof Collection) {
-			return compare_Collection(operation, (Collection) value1, value2);
+		if (value1 instanceof Collection<?>) {
+			return compare_Collection(operation, (Collection<?>) value1, value2);
 		}
 
 		if (value1 instanceof Integer) {
@@ -539,17 +584,18 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		if (value1 instanceof Boolean) {
 			return compare_Boolean(operation, ((Boolean) value1).booleanValue(), value2);
 		}
-
-		if (value1 instanceof Comparable) {
-			return compare_Comparable(operation, (Comparable) value1, value2);
+		if (value1 instanceof Comparable<?>) {
+			@SuppressWarnings("unchecked")
+			Comparable<Object> comparable = (Comparable<Object>) value1;
+			return compare_Comparable(operation, comparable, value2);
 		}
 
 		return compare_Unknown(operation, value1, value2); // RFC 59
 	}
 
-	private boolean compare_Collection(int operation, Collection collection, Object value2) {
-		for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
-			if (compare(operation, iterator.next(), value2)) {
+	private boolean compare_Collection(int operation, Collection<?> collection, Object value2) {
+		for (Object value1 : collection) {
+			if (compare(operation, value1, value2)) {
 				return true;
 			}
 		}
@@ -558,8 +604,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 	}
 
 	private boolean compare_ObjectArray(int operation, Object[] array, Object value2) {
-		for (int i = 0, size = array.length; i < size; i++) {
-			if (compare(operation, array[i], value2)) {
+		for (Object value1 : array) {
+			if (compare(operation, value1, value2)) {
 				return true;
 			}
 		}
@@ -567,11 +613,11 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		return false;
 	}
 
-	private boolean compare_PrimitiveArray(int operation, Class type, Object primarray, Object value2) {
+	private boolean compare_PrimitiveArray(int operation, Class<?> type, Object primarray, Object value2) {
 		if (Integer.TYPE.isAssignableFrom(type)) {
 			int[] array = (int[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Integer(operation, array[i], value2)) {
+			for (int value1 : array) {
+				if (compare_Integer(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -581,8 +627,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 		if (Long.TYPE.isAssignableFrom(type)) {
 			long[] array = (long[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Long(operation, array[i], value2)) {
+			for (long value1 : array) {
+				if (compare_Long(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -592,8 +638,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 		if (Byte.TYPE.isAssignableFrom(type)) {
 			byte[] array = (byte[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Byte(operation, array[i], value2)) {
+			for (byte value1 : array) {
+				if (compare_Byte(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -603,8 +649,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 		if (Short.TYPE.isAssignableFrom(type)) {
 			short[] array = (short[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Short(operation, array[i], value2)) {
+			for (short value1 : array) {
+				if (compare_Short(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -614,8 +660,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 		if (Character.TYPE.isAssignableFrom(type)) {
 			char[] array = (char[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Character(operation, array[i], value2)) {
+			for (char value1 : array) {
+				if (compare_Character(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -625,8 +671,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 		if (Float.TYPE.isAssignableFrom(type)) {
 			float[] array = (float[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Float(operation, array[i], value2)) {
+			for (float value1 : array) {
+				if (compare_Float(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -636,8 +682,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 		if (Double.TYPE.isAssignableFrom(type)) {
 			double[] array = (double[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Double(operation, array[i], value2)) {
+			for (double value1 : array) {
+				if (compare_Double(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -647,8 +693,8 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 		if (Boolean.TYPE.isAssignableFrom(type)) {
 			boolean[] array = (boolean[]) primarray;
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare_Boolean(operation, array[i], value2)) {
+			for (boolean value1 : array) {
+				if (compare_Boolean(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -662,7 +708,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 	private boolean compare_String(int operation, String string, Object value2) {
 		switch (operation) {
 			case SUBSTRING : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("SUBSTRING(" + string + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 
@@ -678,7 +724,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 							if (substr2 == null) /* ** */
 								continue; /* ignore first star */
 							/* *xxx */
-							if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+							if (Debug.DEBUG_FILTER) {
 								Debug.println("indexOf(\"" + substr2 + "\"," + pos + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 							}
 							int index = string.indexOf(substr2, pos);
@@ -692,7 +738,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 						} else /* xxx */{
 							int len = substr.length();
 
-							if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+							if (Debug.DEBUG_FILTER) {
 								Debug.println("regionMatches(" + pos + ",\"" + substr + "\")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 							}
 							if (string.regionMatches(pos, substr, 0, len)) {
@@ -706,7 +752,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 							return true;
 						}
 						/* xxx */
-						if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+						if (Debug.DEBUG_FILTER) {
 							Debug.println("regionMatches(" + pos + "," + substr + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 						}
 						return string.endsWith(substr);
@@ -716,13 +762,13 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 				return true;
 			}
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + string + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return string.equals(value2);
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + string + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 
@@ -732,13 +778,13 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 				return string.equalsIgnoreCase(string2);
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + string + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return string.compareTo((String) value2) >= 0;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + string + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return string.compareTo((String) value2) <= 0;
@@ -750,7 +796,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Integer(int operation, int intval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + intval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -764,25 +810,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + intval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return intval == intval2;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + intval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return intval == intval2;
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + intval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return intval >= intval2;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + intval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return intval <= intval2;
@@ -794,7 +840,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Long(int operation, long longval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + longval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -808,25 +854,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + longval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return longval == longval2;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + longval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return longval == longval2;
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + longval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return longval >= longval2;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + longval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return longval <= longval2;
@@ -838,7 +884,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Byte(int operation, byte byteval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + byteval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -852,25 +898,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + byteval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return byteval == byteval2;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + byteval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return byteval == byteval2;
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + byteval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return byteval >= byteval2;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + byteval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return byteval <= byteval2;
@@ -882,7 +928,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Short(int operation, short shortval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + shortval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -896,25 +942,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + shortval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return shortval == shortval2;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + shortval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return shortval == shortval2;
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + shortval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return shortval >= shortval2;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + shortval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return shortval <= shortval2;
@@ -926,7 +972,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Character(int operation, char charval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + charval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -940,25 +986,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + charval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return charval == charval2;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + charval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return (charval == charval2) || (Character.toUpperCase(charval) == Character.toUpperCase(charval2)) || (Character.toLowerCase(charval) == Character.toLowerCase(charval2));
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + charval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return charval >= charval2;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + charval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return charval <= charval2;
@@ -970,7 +1016,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Boolean(int operation, boolean boolval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + boolval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -979,25 +1025,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		boolean boolval2 = Boolean.valueOf(((String) value2).trim()).booleanValue();
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + boolval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return boolval == boolval2;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + boolval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return boolval == boolval2;
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + boolval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return boolval == boolval2;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + boolval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return boolval == boolval2;
@@ -1009,7 +1055,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Float(int operation, float floatval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + floatval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -1023,25 +1069,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + floatval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Float.compare(floatval, floatval2) == 0;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + floatval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Float.compare(floatval, floatval2) == 0;
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + floatval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Float.compare(floatval, floatval2) >= 0;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + floatval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Float.compare(floatval, floatval2) <= 0;
@@ -1053,7 +1099,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 
 	private boolean compare_Double(int operation, double doubleval, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + doubleval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
@@ -1067,25 +1113,25 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 		switch (operation) {
 			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("EQUAL(" + doubleval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Double.compare(doubleval, doubleval2) == 0;
 			}
 			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("APPROX(" + doubleval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Double.compare(doubleval, doubleval2) == 0;
 			}
 			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("GREATER(" + doubleval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Double.compare(doubleval, doubleval2) >= 0;
 			}
 			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+				if (Debug.DEBUG_FILTER) {
 					Debug.println("LESS(" + doubleval + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				return Double.compare(doubleval, doubleval2) <= 0;
@@ -1095,17 +1141,16 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		return false;
 	}
 
-	private static final Class[] constructorType = new Class[] {String.class};
+	private static final Class<?>[] constructorType = new Class[] {String.class};
 
-	private boolean compare_Comparable(int operation, Comparable value1, Object value2) {
+	private boolean compare_Comparable(int operation, Comparable<Object> value1, Object value2) {
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
 		}
-
-		Constructor constructor;
+		Constructor<?> constructor;
 		try {
 			constructor = value1.getClass().getConstructor(constructorType);
 		} catch (NoSuchMethodException e) {
@@ -1123,49 +1168,52 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 			return false;
 		}
 
-		switch (operation) {
-			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("EQUAL(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		try {
+			switch (operation) {
+				case EQUAL : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("EQUAL(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.compareTo(value2) == 0;
 				}
-				return value1.compareTo(value2) == 0;
-			}
-			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("APPROX(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				case APPROX : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("APPROX(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.compareTo(value2) == 0;
 				}
-				return value1.compareTo(value2) == 0;
-			}
-			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("GREATER(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				case GREATER : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("GREATER(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.compareTo(value2) >= 0;
 				}
-				return value1.compareTo(value2) >= 0;
-			}
-			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("LESS(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				case LESS : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("LESS(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.compareTo(value2) <= 0;
 				}
-				return value1.compareTo(value2) <= 0;
 			}
+		} catch (Exception e) {
+			// if the compareTo method throws an exception; return false
+			return false;
 		}
-
 		return false;
 	}
 
 	private boolean compare_Unknown(int operation, Object value1, Object value2) { //RFC 59
 		if (operation == SUBSTRING) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("SUBSTRING(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			return false;
 		}
-
-		Constructor constructor;
+		Constructor<?> constructor;
 		try {
 			constructor = value1.getClass().getConstructor(constructorType);
 		} catch (NoSuchMethodException e) {
-			if (Debug.DEBUG && Debug.DEBUG_FILTER) {
+			if (Debug.DEBUG_FILTER) {
 				Debug.println("Type not supported"); //$NON-NLS-1$
 			}
 			return false;
@@ -1182,31 +1230,36 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 			return false;
 		}
 
-		switch (operation) {
-			case EQUAL : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("EQUAL(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		try {
+			switch (operation) {
+				case EQUAL : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("EQUAL(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.equals(value2);
 				}
-				return value1.equals(value2);
-			}
-			case APPROX : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("APPROX(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				case APPROX : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("APPROX(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.equals(value2);
 				}
-				return value1.equals(value2);
-			}
-			case GREATER : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("GREATER(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				case GREATER : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("GREATER(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.equals(value2);
 				}
-				return value1.equals(value2);
-			}
-			case LESS : {
-				if (Debug.DEBUG && Debug.DEBUG_FILTER) {
-					Debug.println("LESS(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				case LESS : {
+					if (Debug.DEBUG_FILTER) {
+						Debug.println("LESS(" + value1 + "," + value2 + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					}
+					return value1.equals(value2);
 				}
-				return value1.equals(value2);
 			}
+		} catch (Exception e) {
+			// if the equals method throws an exception; return false
+			return false;
 		}
 
 		return false;
@@ -1226,9 +1279,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		boolean changed = false;
 		char[] output = input.toCharArray();
 		int cursor = 0;
-		for (int i = 0, length = output.length; i < length; i++) {
-			char c = output[i];
-
+		for (char c : output) {
 			if (Character.isWhitespace(c)) {
 				changed = true;
 				continue;
@@ -1247,22 +1298,32 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 	 * @return The leftmost required objectClass value or null if none could be determined.
 	 */
 	public String getRequiredObjectClass() {
-		// just checking for simple filters here where objectClass is the only attr or it is one attr of a base '&' clause
-		// (objectClass=org.acme.BrickService) OK
-		// (&(objectClass=org.acme.BrickService)(|(vendor=IBM)(vendor=SUN))) OK
-		// (objectClass=org.acme.*) NOT OK
-		// (|(objectClass=org.acme.BrickService)(objectClass=org.acme.CementService)) NOT OK
-		// (&(objectClass=org.acme.BrickService)(objectClass=org.acme.CementService)) OK but only the first objectClass is returned
+		return getPrimaryKeyValue(Constants.OBJECTCLASS);
+	}
+
+	/**
+	 * Returns the leftmost required primary key value for the filter to evaluate to true.
+	 * This is useful for indexing candidates to match against this filter.
+	 * @param primaryKey the primary key
+	 * @return The leftmost required primary key value or null if none could be determined.
+	 */
+	public String getPrimaryKeyValue(String primaryKey) {
+		// just checking for simple filters here where primaryKey is the only attr or it is one attr of a base '&' clause
+		// (primaryKey=org.acme.BrickService) OK
+		// (&(primaryKey=org.acme.BrickService)(|(vendor=IBM)(vendor=SUN))) OK
+		// (primaryKey=org.acme.*) NOT OK
+		// (|(primaryKey=org.acme.BrickService)(primaryKey=org.acme.CementService)) NOT OK
+		// (&(primaryKey=org.acme.BrickService)(primaryKey=org.acme.CementService)) OK but only the first objectClass is returned
 		switch (op) {
 			case EQUAL :
-				if (attr.equalsIgnoreCase(org.osgi.framework.Constants.OBJECTCLASS) && (value instanceof String))
+				if (attr.equalsIgnoreCase(primaryKey) && (value instanceof String))
 					return (String) value;
 				break;
 			case AND :
 				FilterImpl[] clauses = (FilterImpl[]) value;
-				for (int i = 0; i < clauses.length; i++)
-					if (clauses[i].op == EQUAL) {
-						String result = clauses[i].getRequiredObjectClass();
+				for (FilterImpl clause : clauses)
+					if (clause.op == EQUAL) {
+						String result = clause.getPrimaryKeyValue(primaryKey);
 						if (result != null)
 							return result;
 					}
@@ -1276,20 +1337,21 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 	 * @return all the attributes contained within this filter
 	 */
 	public String[] getAttributes() {
-		ArrayList results = new ArrayList();
+		List<String> results = new ArrayList<String>();
 		getAttributesInternal(results);
-		return (String[]) results.toArray(new String[results.size()]);
+		return results.toArray(new String[results.size()]);
 	}
 
-	private void getAttributesInternal(ArrayList results) {
+	private void getAttributesInternal(List<String> results) {
 		if (value instanceof FilterImpl[]) {
 			FilterImpl[] children = (FilterImpl[]) value;
-			for (int i = 0; i < children.length; i++)
-				children[i].getAttributesInternal(results);
+			for (FilterImpl child : children)
+				child.getAttributesInternal(results);
 			return;
 		} else if (value instanceof FilterImpl) {
 			// The NOT operation only has one child filter (bug 188075)
-			((FilterImpl) value).getAttributesInternal(results);
+			FilterImpl child = ((FilterImpl) value);
+			child.getAttributesInternal(results);
 			return;
 		}
 		if (attr != null)
@@ -1382,7 +1444,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 				return parse_item();
 			}
 
-			List operands = new ArrayList(10);
+			List<FilterImpl> operands = new ArrayList<FilterImpl>(10);
 
 			while (filterChars[pos] == '(') {
 				FilterImpl child = parse_filter();
@@ -1401,7 +1463,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 				return parse_item();
 			}
 
-			List operands = new ArrayList(10);
+			List<FilterImpl> operands = new ArrayList<FilterImpl>(10);
 
 			while (filterChars[pos] == '(') {
 				FilterImpl child = parse_filter();
@@ -1542,7 +1604,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		private Object parse_substring() throws InvalidSyntaxException {
 			StringBuffer sb = new StringBuffer(filterChars.length - pos);
 
-			List operands = new ArrayList(10);
+			List<String> operands = new ArrayList<String>(10);
 
 			parseloop: while (true) {
 				char c = filterChars[pos];
@@ -1590,7 +1652,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 			int size = operands.size();
 
 			if (size == 0) {
-				return "";
+				return ""; //$NON-NLS-1$
 			}
 
 			if (size == 1) {
@@ -1618,10 +1680,10 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 	 * Filter implementation.
 	 * 
 	 */
-	private static class ServiceReferenceDictionary extends Dictionary {
-		private final ServiceReference reference;
+	private static class ServiceReferenceDictionary extends Dictionary<String, Object> {
+		private final ServiceReference<?> reference;
 
-		ServiceReferenceDictionary(ServiceReference reference) {
+		ServiceReferenceDictionary(ServiceReference<?> reference) {
 			this.reference = reference;
 		}
 
@@ -1636,15 +1698,15 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 			throw new UnsupportedOperationException();
 		}
 
-		public Enumeration keys() {
+		public Enumeration<String> keys() {
 			throw new UnsupportedOperationException();
 		}
 
-		public Enumeration elements() {
+		public Enumeration<Object> elements() {
 			throw new UnsupportedOperationException();
 		}
 
-		public Object put(Object key, Object value) {
+		public Object put(String key, Object value) {
 			throw new UnsupportedOperationException();
 		}
 
@@ -1657,7 +1719,7 @@ public class FilterImpl implements Filter /* since Framework 1.1 */{
 		}
 	}
 
-	private static class SetAccessibleAction implements PrivilegedAction {
+	private static class SetAccessibleAction implements PrivilegedAction<Object> {
 		private final AccessibleObject accessible;
 
 		SetAccessibleAction(AccessibleObject accessible) {
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java
index 01aaee3..1e54884 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,24 +22,25 @@ import org.eclipse.osgi.framework.debug.Debug;
 import org.eclipse.osgi.framework.eventmgr.*;
 import org.eclipse.osgi.framework.internal.protocol.ContentHandlerFactory;
 import org.eclipse.osgi.framework.internal.protocol.StreamHandlerFactory;
-import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.framework.util.SecureAction;
 import org.eclipse.osgi.internal.loader.*;
 import org.eclipse.osgi.internal.permadmin.EquinoxSecurityManager;
 import org.eclipse.osgi.internal.permadmin.SecurityAdmin;
 import org.eclipse.osgi.internal.profile.Profile;
-import org.eclipse.osgi.internal.serviceregistry.ServiceRegistry;
+import org.eclipse.osgi.internal.serviceregistry.*;
 import org.eclipse.osgi.signedcontent.SignedContentFactory;
 import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
+import org.osgi.framework.hooks.bundle.EventHook;
+import org.osgi.framework.hooks.bundle.FindHook;
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * Core OSGi Framework class.
  */
-public class Framework implements EventDispatcher, EventPublisher, Runnable {
+public class Framework implements EventPublisher, Runnable {
 	// System property used to set the context classloader parent classloader type (ccl is the default)
 	private static final String PROP_CONTEXTCLASSLOADER_PARENT = "osgi.contextClassLoaderParent"; //$NON-NLS-1$
 	private static final String CONTEXTCLASSLOADER_PARENT_APP = "app"; //$NON-NLS-1$
@@ -78,28 +79,30 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	private ServiceRegistry serviceRegistry;
 
 	/*
-	 * The following EventListeners objects keep track of event listeners
-	 * by BundleContext.  Each element is a EventListeners that is the list
+	 * The following maps objects keep track of event listeners
+	 * by BundleContext.  Each element is a Map that is the set
 	 * of event listeners for a particular BundleContext.  The max number of
-	 * elements each of the following lists will have is the number of bundles
+	 * elements each of the following maps will have is the number of bundles
 	 * installed in the Framework.
 	 */
-	/** List of BundleContexts for bundle's BundleListeners. */
-	protected Map bundleEvent;
+	// Map of BundleContexts for bundle's BundleListeners.
+	private final Map<BundleContextImpl, CopyOnWriteIdentityMap<BundleListener, BundleListener>> allBundleListeners = new HashMap<BundleContextImpl, CopyOnWriteIdentityMap<BundleListener, BundleListener>>();
 	protected static final int BUNDLEEVENT = 1;
-	/** List of BundleContexts for bundle's SynchronousBundleListeners. */
-	protected Map bundleEventSync;
+	// Map of BundleContexts for bundle's SynchronousBundleListeners.
+	private final Map<BundleContextImpl, CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener>> allSyncBundleListeners = new HashMap<BundleContextImpl, CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener>>();
 	protected static final int BUNDLEEVENTSYNC = 2;
 	/* SERVICEEVENT(3) is now handled by ServiceRegistry */
-	/** List of BundleContexts for bundle's FrameworkListeners. */
-	protected Map frameworkEvent;
+	// Map of BundleContexts for bundle's FrameworkListeners.
+	private final Map<BundleContextImpl, CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener>> allFrameworkListeners = new HashMap<BundleContextImpl, CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener>>();
 	protected static final int FRAMEWORKEVENT = 4;
 	protected static final int BATCHEVENT_BEGIN = Integer.MIN_VALUE + 1;
 	protected static final int BATCHEVENT_END = Integer.MIN_VALUE;
+	static final String eventHookName = EventHook.class.getName();
+	static final String findHookName = FindHook.class.getName();
 	/** EventManager for event delivery. */
 	protected EventManager eventManager;
 	/* Reservation object for install synchronization */
-	protected Hashtable installLock;
+	private Map<String, Thread> installLock;
 	/** System Bundle object */
 	protected InternalSystemBundle systemBundle;
 	private String[] bootDelegation;
@@ -107,21 +110,22 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	private boolean bootDelegateAll = false;
 	public final boolean contextBootDelegation = "true".equals(FrameworkProperties.getProperty("osgi.context.bootdelegation", "true")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	public final boolean compatibiltyBootDelegation = "true".equals(FrameworkProperties.getProperty(Constants.OSGI_COMPATIBILITY_BOOTDELEGATION, "true")); //$NON-NLS-1$ //$NON-NLS-2$
+	private final boolean allowDuplicateBSNVersion = Constants.FRAMEWORK_BSNVERSION_MULTIPLE.equals(FrameworkProperties.getProperty(Constants.FRAMEWORK_BSNVERSION));
 	ClassLoaderDelegateHook[] delegateHooks;
 	private volatile boolean forcedRestart = false;
 	/**
 	 * The AliasMapper used to alias OS Names.
 	 */
 	protected static AliasMapper aliasMapper = new AliasMapper();
-	SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 	// cache of AdminPermissions keyed by Bundle ID
-	private HashMap adminPermissions = new HashMap();
+	private final Map<Long, Map<String, AdminPermission>> adminPermissions = new HashMap<Long, Map<String, AdminPermission>>();
 
 	// we need to hold these so that we can unregister them at shutdown
 	private StreamHandlerFactory streamHandlerFactory;
 	private ContentHandlerFactory contentHandlerFactory;
 
-	private volatile ServiceTracker signedContentFactory;
+	private volatile ServiceTracker<SignedContentFactory, SignedContentFactory> signedContentFactory;
 	private volatile ContextFinder contextFinder;
 
 	/* 
@@ -129,12 +133,12 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * see bug 161561
 	 */
 	static {
-		Class c;
+		Class<?> c;
 		c = GetDataFileAction.class;
 		c.getName(); // to prevent compiler warnings
 	}
 
-	static class GetDataFileAction implements PrivilegedAction {
+	static class GetDataFileAction implements PrivilegedAction<File> {
 		private AbstractBundle bundle;
 		private String filename;
 
@@ -143,7 +147,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			this.filename = filename;
 		}
 
-		public Object run() {
+		public File run() {
 			return bundle.getBundleData().getDataFile(filename);
 		}
 	}
@@ -162,15 +166,15 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * by the Framework constructor.
 	 *  
 	 */
-	protected void initialize(FrameworkAdaptor adaptor) {
+	protected void initialize(FrameworkAdaptor initAdaptor) {
 		if (Profile.PROFILE && Profile.STARTUP)
 			Profile.logEnter("Framework.initialze()", null); //$NON-NLS-1$
 		long start = System.currentTimeMillis();
-		this.adaptor = adaptor;
-		delegateHooks = adaptor instanceof BaseAdaptor ? ((BaseAdaptor) adaptor).getHookRegistry().getClassLoaderDelegateHooks() : null;
+		this.adaptor = initAdaptor;
+		delegateHooks = initAdaptor instanceof BaseAdaptor ? ((BaseAdaptor) initAdaptor).getHookRegistry().getClassLoaderDelegateHooks() : null;
 		active = false;
 		installSecurityManager();
-		if (Debug.DEBUG && Debug.DEBUG_SECURITY) {
+		if (Debug.DEBUG_SECURITY) {
 			Debug.println("SecurityManager: " + System.getSecurityManager()); //$NON-NLS-1$
 			Debug.println("ProtectionDomain of Framework.class: \n" + this.getClass().getProtectionDomain()); //$NON-NLS-1$
 		}
@@ -178,11 +182,11 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		// initialize ContextFinder
 		initializeContextFinder();
 		/* initialize the adaptor */
-		adaptor.initialize(this);
+		initAdaptor.initialize(this);
 		if (Profile.PROFILE && Profile.STARTUP)
 			Profile.logTime("Framework.initialze()", "adapter initialized"); //$NON-NLS-1$//$NON-NLS-2$
 		try {
-			adaptor.initializeStorage();
+			initAdaptor.initializeStorage();
 		} catch (IOException e) /* fatal error */{
 			throw new RuntimeException(e.getMessage(), e);
 		}
@@ -192,12 +196,12 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		 * This must be done before calling any of the framework getProperty
 		 * methods.
 		 */
-		initializeProperties(adaptor.getProperties());
+		initializeProperties(initAdaptor.getProperties());
 		/* initialize admin objects */
 		packageAdmin = new PackageAdminImpl(this);
 		try {
 			// always create security admin even with security off
-			securityAdmin = new SecurityAdmin(null, this, adaptor.getPermissionStorage());
+			securityAdmin = new SecurityAdmin(null, this, initAdaptor.getPermissionStorage());
 		} catch (IOException e) /* fatal error */{
 			e.printStackTrace();
 			throw new RuntimeException(e.getMessage(), e);
@@ -207,9 +211,6 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		startLevelManager = new StartLevelManager(this);
 		/* create the event manager and top level event dispatchers */
 		eventManager = new EventManager("Framework Event Dispatcher"); //$NON-NLS-1$
-		bundleEvent = new CopyOnWriteIdentityMap();
-		bundleEventSync = new CopyOnWriteIdentityMap();
-		frameworkEvent = new CopyOnWriteIdentityMap();
 		if (Profile.PROFILE && Profile.STARTUP)
 			Profile.logTime("Framework.initialze()", "done new EventManager"); //$NON-NLS-1$ //$NON-NLS-2$
 		/* create the service registry */
@@ -217,7 +218,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		// Initialize the installLock; there is no way of knowing 
 		// what the initial size should be, at most it will be the number
 		// of threads trying to install a bundle (probably a very low number).
-		installLock = new Hashtable(10);
+		installLock = new HashMap<String, Thread>(10);
 		/* create the system bundle */
 		createSystemBundle();
 		loadVMProfile(); // load VM profile after the system bundle has been created
@@ -225,13 +226,13 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		if (Profile.PROFILE && Profile.STARTUP)
 			Profile.logTime("Framework.initialze()", "done createSystemBundle"); //$NON-NLS-1$ //$NON-NLS-2$
 		/* install URLStreamHandlerFactory */
-		installURLStreamHandlerFactory(systemBundle.context, adaptor);
+		installURLStreamHandlerFactory(systemBundle.context, initAdaptor);
 		/* install ContentHandlerFactory for OSGi URLStreamHandler support */
-		installContentHandlerFactory(systemBundle.context, adaptor);
+		installContentHandlerFactory(systemBundle.context, initAdaptor);
 		if (Profile.PROFILE && Profile.STARTUP)
 			Profile.logTime("Framework.initialze()", "done new URLStream/Content HandlerFactory"); //$NON-NLS-1$//$NON-NLS-2$
 		/* create bundle objects for all installed bundles. */
-		BundleData[] bundleDatas = adaptor.getInstalledBundles();
+		BundleData[] bundleDatas = initAdaptor.getInstalledBundles();
 		bundles = new BundleRepository(bundleDatas == null ? 10 : bundleDatas.length + 1);
 		/* add the system bundle to the Bundle Repository */
 		bundles.add(systemBundle);
@@ -246,7 +247,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 				}
 			}
 		}
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+		if (Debug.DEBUG_GENERAL)
 			System.out.println("Initialize the framework: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$
 		if (Profile.PROFILE && Profile.STARTUP)
 			Profile.logExit("Framework.initialize()"); //$NON-NLS-1$
@@ -291,7 +292,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 */
 	protected void initializeProperties(Properties adaptorProperties) {
 		properties = FrameworkProperties.getProperties();
-		Enumeration enumKeys = adaptorProperties.propertyNames();
+		Enumeration<?> enumKeys = adaptorProperties.propertyNames();
 		while (enumKeys.hasMoreElements()) {
 			String key = (String) enumKeys.nextElement();
 			if (properties.getProperty(key) == null) {
@@ -373,6 +374,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		// set the support properties for fragments and require-bundle (bug 173090)
 		properties.put(Constants.SUPPORTS_FRAMEWORK_FRAGMENT, "true"); //$NON-NLS-1$
 		properties.put(Constants.SUPPORTS_FRAMEWORK_REQUIREBUNDLE, "true"); //$NON-NLS-1$
+		properties.put(Constants.FRAMEWORK_UUID, new UniversalUniqueIdentifier().toString());
 	}
 
 	private int parseVersionInt(String value) {
@@ -401,8 +403,8 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		if (bootDelegationProp.trim().length() == 0)
 			return;
 		String[] bootPackages = ManifestElement.getArrayFromList(bootDelegationProp);
-		ArrayList exactMatch = new ArrayList(bootPackages.length);
-		ArrayList stemMatch = new ArrayList(bootPackages.length);
+		List<String> exactMatch = new ArrayList<String>(bootPackages.length);
+		List<String> stemMatch = new ArrayList<String>(bootPackages.length);
 		for (int i = 0; i < bootPackages.length; i++) {
 			if (bootPackages[i].equals("*")) { //$NON-NLS-1$
 				bootDelegateAll = true;
@@ -414,12 +416,13 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 				exactMatch.add(bootPackages[i]);
 			}
 		}
-		if (exactMatch.size() > 0)
-			bootDelegation = (String[]) exactMatch.toArray(new String[exactMatch.size()]);
-		if (stemMatch.size() > 0)
-			bootDelegationStems = (String[]) stemMatch.toArray(new String[stemMatch.size()]);
+		if (!exactMatch.isEmpty())
+			bootDelegation = exactMatch.toArray(new String[exactMatch.size()]);
+		if (!stemMatch.isEmpty())
+			bootDelegationStems = stemMatch.toArray(new String[stemMatch.size()]);
 	}
 
+	@SuppressWarnings("deprecation")
 	private void loadVMProfile() {
 		Properties profileProps = findVMProfile();
 		String systemExports = properties.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
@@ -446,6 +449,12 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			if (ee != null)
 				properties.put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, ee);
 		}
+		// set the org.osgi.framework.system.capabilities property according to the java profile
+		if (properties.getProperty(Constants.FRAMEWORK_SYSTEMCAPABILITIES) == null) {
+			String systemCapabilities = profileProps.getProperty(Constants.FRAMEWORK_SYSTEMCAPABILITIES);
+			if (systemCapabilities != null)
+				properties.put(Constants.FRAMEWORK_SYSTEMCAPABILITIES, systemCapabilities);
+		}
 	}
 
 	private Properties findVMProfile() {
@@ -588,27 +597,18 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			shutdown(FrameworkEvent.STOPPED);
 
 		synchronized (bundles) {
-			List allBundles = bundles.getBundles();
+			List<AbstractBundle> allBundles = bundles.getBundles();
 			int size = allBundles.size();
 			for (int i = 0; i < size; i++) {
-				AbstractBundle bundle = (AbstractBundle) allBundles.get(i);
+				AbstractBundle bundle = allBundles.get(i);
 				bundle.close();
 			}
 			bundles.removeAllBundles();
 		}
 		serviceRegistry = null;
-		if (bundleEvent != null) {
-			bundleEvent.clear();
-			bundleEvent = null;
-		}
-		if (bundleEventSync != null) {
-			bundleEventSync.clear();
-			bundleEventSync = null;
-		}
-		if (frameworkEvent != null) {
-			frameworkEvent.clear();
-			frameworkEvent = null;
-		}
+		allBundleListeners.clear();
+		allSyncBundleListeners.clear();
+		allFrameworkListeners.clear();
 		if (eventManager != null) {
 			eventManager.close();
 			eventManager = null;
@@ -642,17 +642,17 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		/* mark framework as started */
 		active = true;
 		shutdownEvent = new FrameworkEvent[1];
-		if (THREAD_NORMAL.equals(FrameworkProperties.getProperty(PROP_FRAMEWORK_THREAD))) {
+		if (THREAD_NORMAL.equals(FrameworkProperties.getProperty(PROP_FRAMEWORK_THREAD, THREAD_NORMAL))) {
 			Thread fwkThread = new Thread(this, "Framework Active Thread"); //$NON-NLS-1$
 			fwkThread.setDaemon(false);
 			fwkThread.start();
 		}
 		/* Resume systembundle */
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			Debug.println("Trying to launch framework"); //$NON-NLS-1$
 		}
 		systemBundle.resume();
-		signedContentFactory = new ServiceTracker(systemBundle.getBundleContext(), SignedContentFactory.class.getName(), null);
+		signedContentFactory = new ServiceTracker<SignedContentFactory, SignedContentFactory>(systemBundle.getBundleContext(), SignedContentFactory.class.getName(), null);
 		signedContentFactory.open();
 	}
 
@@ -675,7 +675,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		 * set the state of the System Bundle to STOPPING.
 		 * this must be done first according to section 4.19.2 from the OSGi R3 spec.  
 		 */
-		systemBundle.state = AbstractBundle.STOPPING;
+		systemBundle.state = Bundle.STOPPING;
 		publishBundleEvent(BundleEvent.STOPPING, systemBundle); // need to send system bundle stopping event 
 		/* call the FrameworkAdaptor.frameworkStopping method first */
 		try {
@@ -684,7 +684,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			publishFrameworkEvent(FrameworkEvent.ERROR, systemBundle, t);
 		}
 		/* Suspend systembundle */
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			Debug.println("Trying to shutdown Framework"); //$NON-NLS-1$
 		}
 		systemBundle.suspend();
@@ -707,7 +707,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 */
 	AbstractBundle createAndVerifyBundle(BundleData bundledata, boolean setBundle) throws BundleException {
 		// Check for a bundle already installed with the same symbolic name and version.
-		if (bundledata.getSymbolicName() != null) {
+		if (!allowDuplicateBSNVersion && bundledata.getSymbolicName() != null) {
 			AbstractBundle installedBundle = getBundleBySymbolicName(bundledata.getSymbolicName(), bundledata.getVersion());
 			if (installedBundle != null && installedBundle.getBundleId() != bundledata.getBundleID()) {
 				String msg = NLS.bind(Msg.BUNDLE_INSTALL_SAME_UNIQUEID, new Object[] {installedBundle.getSymbolicName(), installedBundle.getVersion().toString(), installedBundle.getLocation()});
@@ -824,19 +824,19 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 *            then the location is used to get the bundle content.
 	 * @return The Bundle of the installed bundle.
 	 */
-	protected AbstractBundle installBundle(final String location, final InputStream in) throws BundleException {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+	AbstractBundle installBundle(final String location, final InputStream in, BundleContext origin) throws BundleException {
+		if (Debug.DEBUG_GENERAL) {
 			Debug.println("install from inputstream: " + location + ", " + in); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		final AccessControlContext callerContext = AccessController.getContext();
-		return installWorker(location, new PrivilegedExceptionAction() {
-			public Object run() throws BundleException {
+		return installWorker(location, new PrivilegedExceptionAction<AbstractBundle>() {
+			public AbstractBundle run() throws BundleException {
 				/* Map the InputStream or location to a URLConnection */
 				URLConnection source = in != null ? new BundleSource(in) : adaptor.mapLocationToURLConnection(location);
 				/* call the worker to install the bundle */
 				return installWorkerPrivileged(location, source, callerContext);
 			}
-		});
+		}, origin);
 	}
 
 	/**
@@ -851,18 +851,24 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * @exception BundleException
 	 *                If the action throws an error.
 	 */
-	protected AbstractBundle installWorker(String location, PrivilegedExceptionAction action) throws BundleException {
+	protected AbstractBundle installWorker(String location, PrivilegedExceptionAction<AbstractBundle> action, BundleContext origin) throws BundleException {
 		synchronized (installLock) {
 			while (true) {
 				/* Check that the bundle is not already installed. */
 				AbstractBundle bundle = getBundleByLocation(location);
 				/* If already installed, return bundle object */
 				if (bundle != null) {
+					Bundle visible = origin.getBundle(bundle.getBundleId());
+					if (visible == null) {
+						BundleData data = bundle.getBundleData();
+						String msg = NLS.bind(Msg.BUNDLE_INSTALL_SAME_UNIQUEID, new Object[] {data.getSymbolicName(), data.getVersion().toString(), data.getLocation()});
+						throw new BundleException(msg, BundleException.REJECTED_BY_HOOK);
+					}
 					return bundle;
 				}
 				Thread current = Thread.currentThread();
 				/* Check for and make reservation */
-				Thread reservation = (Thread) installLock.put(location, current);
+				Thread reservation = installLock.put(location, current);
 				/* if the location is not already reserved */
 				if (reservation == null) {
 					/* we have made the reservation and can continue */
@@ -880,13 +886,15 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 					/* wait for the reservation to be released */
 					installLock.wait();
 				} catch (InterruptedException e) {
+					Thread.currentThread().interrupt();
+					throw new BundleException("Thread has been interrupted while waiting for the location lock.", e); //$NON-NLS-1$
 				}
 			}
 		}
 		/* Don't call adaptor while holding the install lock */
 		try {
-			AbstractBundle bundle = (AbstractBundle) AccessController.doPrivileged(action);
-			publishBundleEvent(BundleEvent.INSTALLED, bundle);
+			AbstractBundle bundle = AccessController.doPrivileged(action);
+			publishBundleEvent(new BundleEvent(BundleEvent.INSTALLED, bundle, origin.getBundle()));
 			return bundle;
 		} catch (PrivilegedActionException e) {
 			if (e.getException() instanceof RuntimeException)
@@ -920,11 +928,11 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		try {
 			BundleData bundledata = storage.begin();
 			bundle = createAndVerifyBundle(bundledata, true);
-			if (Debug.DEBUG) {
-				BundleWatcher bundleStats = adaptor.getBundleWatcher();
-				if (bundleStats != null)
-					bundleStats.watchBundle(bundle, BundleWatcher.START_INSTALLING);
-			}
+
+			BundleWatcher bundleStats = adaptor.getBundleWatcher();
+			if (bundleStats != null)
+				bundleStats.watchBundle(bundle, BundleWatcher.START_INSTALLING);
+
 			try {
 				bundle.load();
 				if (System.getSecurityManager() != null) {
@@ -933,7 +941,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 					if (extension && !bundle.hasPermission(new AllPermission()))
 						throw new BundleException(Msg.BUNDLE_EXTENSION_PERMISSION, BundleException.SECURITY_ERROR, new SecurityException(Msg.BUNDLE_EXTENSION_PERMISSION));
 					try {
-						AccessController.doPrivileged(new PrivilegedExceptionAction() {
+						AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
 							public Object run() throws Exception {
 								checkAdminPermission(bundle, AdminPermission.LIFECYCLE);
 								if (extension) // need special permission to install extension bundles
@@ -945,22 +953,21 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 						throw e.getException();
 					}
 				}
+				// must add the bundle before committing (bug 330905)
+				bundles.add(bundle);
 				storage.commit(false);
 			} catch (Throwable error) {
+				bundles.remove(bundle);
 				synchronized (bundles) {
 					bundle.unload();
 				}
 				bundle.close();
 				throw error;
 			} finally {
-				if (Debug.DEBUG) {
-					BundleWatcher bundleStats = adaptor.getBundleWatcher();
-					if (bundleStats != null)
-						bundleStats.watchBundle(bundle, BundleWatcher.END_INSTALLING);
-				}
+				if (bundleStats != null)
+					bundleStats.watchBundle(bundle, BundleWatcher.END_INSTALLING);
 			}
-			/* bundle has been successfully installed */
-			bundles.add(bundle);
+
 		} catch (Throwable t) {
 			try {
 				storage.undo();
@@ -991,6 +998,18 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		}
 	}
 
+	AbstractBundle getBundle(final BundleContextImpl context, long id) {
+		AbstractBundle bundle = getBundle(id);
+		// TODO we make the system bundle special because there are lots of places
+		// where we assume the system bundle can get all bundles
+		if (bundle == null || context.getBundle().getBundleId() == 0)
+			return bundle;
+		List<AbstractBundle> single = new ArrayList<AbstractBundle>(1);
+		single.add(bundle);
+		notifyFindHooks(context, single);
+		return single.size() == 0 ? null : bundle;
+	}
+
 	public BundleContextImpl getSystemBundleContext() {
 		if (systemBundle == null)
 			return null;
@@ -1038,7 +1057,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 */
 	protected AbstractBundle[] getAllBundles() {
 		synchronized (bundles) {
-			List allBundles = bundles.getBundles();
+			List<AbstractBundle> allBundles = bundles.getBundles();
 			int size = allBundles.size();
 			if (size == 0) {
 				return (null);
@@ -1049,6 +1068,50 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		}
 	}
 
+	AbstractBundle[] getBundles(final BundleContextImpl context) {
+		List<AbstractBundle> allBundles;
+		synchronized (bundles) {
+			allBundles = new ArrayList<AbstractBundle>(bundles.getBundles());
+		}
+		notifyFindHooks(context, allBundles);
+		return allBundles.toArray(new AbstractBundle[allBundles.size()]);
+	}
+
+	private void notifyFindHooks(final BundleContextImpl context, List<AbstractBundle> allBundles) {
+		final Collection<Bundle> shrinkable = new ShrinkableCollection<Bundle>(allBundles);
+		if (System.getSecurityManager() == null) {
+			notifyFindHooksPriviledged(context, shrinkable);
+		} else {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
+				public Object run() {
+					notifyFindHooksPriviledged(context, shrinkable);
+					return null;
+				}
+			});
+		}
+	}
+
+	void notifyFindHooksPriviledged(final BundleContextImpl context, final Collection<Bundle> allBundles) {
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("notifyBundleFindHooks(" + allBundles + ")"); //$NON-NLS-1$ //$NON-NLS-2$ 
+		}
+		getServiceRegistry().notifyHooksPrivileged(new HookContext() {
+			public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+				if (hook instanceof FindHook) {
+					((FindHook) hook).find(context, allBundles);
+				}
+			}
+
+			public String getHookClassName() {
+				return findHookName;
+			}
+
+			public String getHookMethodName() {
+				return "find"; //$NON-NLS-1$ 
+			}
+		});
+	}
+
 	/**
 	 * Resume a bundle.
 	 * 
@@ -1061,12 +1124,12 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			return;
 		}
 		try {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Trying to resume bundle " + bundle); //$NON-NLS-1$
 			}
 			bundle.resume();
 		} catch (BundleException be) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Bundle resume exception: " + be.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(be.getNestedException() == null ? be : be.getNestedException());
 			}
@@ -1091,12 +1154,12 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			return changed;
 		}
 		try {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Trying to suspend bundle " + bundle); //$NON-NLS-1$
 			}
 			bundle.suspend(lock);
 		} catch (BundleException be) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Bundle suspend exception: " + be.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(be.getNestedException() == null ? be : be.getNestedException());
 			}
@@ -1123,17 +1186,17 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			final String finalLocation = location;
 
 			//Bundle.getLocation requires AdminPermission (metadata)
-			return (AbstractBundle) AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
-					List allBundles = bundles.getBundles();
+			return AccessController.doPrivileged(new PrivilegedAction<AbstractBundle>() {
+				public AbstractBundle run() {
+					List<AbstractBundle> allBundles = bundles.getBundles();
 					int size = allBundles.size();
 					for (int i = 0; i < size; i++) {
-						AbstractBundle bundle = (AbstractBundle) allBundles.get(i);
+						AbstractBundle bundle = allBundles.get(i);
 						if (finalLocation.equals(bundle.getLocation())) {
-							return (bundle);
+							return bundle;
 						}
 					}
-					return (null);
+					return null;
 				}
 			});
 		}
@@ -1165,7 +1228,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * parameter.
 	 */
 	protected File getDataFile(final AbstractBundle bundle, final String filename) {
-		return (File) AccessController.doPrivileged(new GetDataFileAction(bundle, filename));
+		return AccessController.doPrivileged(new GetDataFileAction(bundle, filename));
 	}
 
 	/**
@@ -1182,12 +1245,12 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	private AdminPermission getAdminPermission(Bundle bundle, String action) {
 		synchronized (adminPermissions) {
 			Long ID = new Long(bundle.getBundleId());
-			HashMap bundlePermissions = (HashMap) adminPermissions.get(ID);
+			Map<String, AdminPermission> bundlePermissions = adminPermissions.get(ID);
 			if (bundlePermissions == null) {
-				bundlePermissions = new HashMap();
+				bundlePermissions = new HashMap<String, AdminPermission>();
 				adminPermissions.put(ID, bundlePermissions);
 			}
-			AdminPermission result = (AdminPermission) bundlePermissions.get(action);
+			AdminPermission result = bundlePermissions.get(action);
 			if (result == null) {
 				result = new AdminPermission(bundle, action);
 				bundlePermissions.put(action, result);
@@ -1201,7 +1264,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * is set much later than we would like!
 	 */
 	protected void installSecurityManager() {
-		String securityManager = FrameworkProperties.getProperty(PROP_EQUINOX_SECURITY, FrameworkProperties.getProperty("java.security.manager")); //$NON-NLS-1$
+		String securityManager = FrameworkProperties.getProperty(Constants.FRAMEWORK_SECURITY, FrameworkProperties.getProperty(PROP_EQUINOX_SECURITY, FrameworkProperties.getProperty("java.security.manager")));
 		if (securityManager != null) {
 			SecurityManager sm = System.getSecurityManager();
 			if (sm == null) {
@@ -1212,7 +1275,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 				else {
 					// try to use a specific classloader by classname
 					try {
-						Class clazz = Class.forName(securityManager);
+						Class<?> clazz = Class.forName(securityManager);
 						sm = (SecurityManager) clazz.newInstance();
 					} catch (ClassNotFoundException e) {
 						// do nothing
@@ -1226,7 +1289,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 				}
 				if (sm == null)
 					throw new NoClassDefFoundError(securityManager);
-				if (Debug.DEBUG && Debug.DEBUG_SECURITY)
+				if (Debug.DEBUG_SECURITY)
 					Debug.println("Setting SecurityManager to: " + sm); //$NON-NLS-1$
 				System.setSecurityManager(sm);
 				return;
@@ -1234,6 +1297,37 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		}
 	}
 
+	void addFrameworkListener(FrameworkListener listener, BundleContextImpl context) {
+		synchronized (allFrameworkListeners) {
+			CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener> listeners = allFrameworkListeners.get(context);
+			if (listeners == null) {
+				listeners = new CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener>();
+				allFrameworkListeners.put(context, listeners);
+			}
+			listeners.put(listener, listener);
+		}
+	}
+
+	void removeFrameworkListener(FrameworkListener listener, BundleContextImpl context) {
+		synchronized (allFrameworkListeners) {
+			CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener> listeners = allFrameworkListeners.get(context);
+			if (listeners != null)
+				listeners.remove(listener);
+		}
+	}
+
+	void removeAllListeners(BundleContextImpl context) {
+		synchronized (allBundleListeners) {
+			allBundleListeners.remove(context);
+		}
+		synchronized (allSyncBundleListeners) {
+			allSyncBundleListeners.remove(context);
+		}
+		synchronized (allFrameworkListeners) {
+			allFrameworkListeners.remove(context);
+		}
+	}
+
 	/**
 	 * Deliver a FrameworkEvent.
 	 * 
@@ -1244,44 +1338,106 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * @param throwable
 	 *            Related exception or null.
 	 */
-	public void publishFrameworkEvent(int type, org.osgi.framework.Bundle bundle, Throwable throwable) {
-		if (frameworkEvent != null) {
-			if (bundle == null)
-				bundle = systemBundle;
-			final FrameworkEvent event = new FrameworkEvent(type, bundle, throwable);
-			if (System.getSecurityManager() == null) {
-				publishFrameworkEventPrivileged(event);
-			} else {
-				AccessController.doPrivileged(new PrivilegedAction() {
-					public Object run() {
-						publishFrameworkEventPrivileged(event);
-						return null;
-					}
-				});
+	public void publishFrameworkEvent(int type, Bundle bundle, Throwable throwable) {
+		publishFrameworkEvent(type, bundle, throwable, (FrameworkListener[]) null);
+	}
+
+	public void publishFrameworkEvent(int type, Bundle bundle, Throwable throwable, final FrameworkListener... listeners) {
+		if (bundle == null)
+			bundle = systemBundle;
+		final FrameworkEvent event = new FrameworkEvent(type, bundle, throwable);
+		if (System.getSecurityManager() == null) {
+			publishFrameworkEventPrivileged(event, listeners);
+		} else {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
+				public Object run() {
+					publishFrameworkEventPrivileged(event, listeners);
+					return null;
+				}
+			});
+		}
+	}
+
+	public void publishFrameworkEventPrivileged(FrameworkEvent event, FrameworkListener... callerListeners) {
+		// Build the listener snapshot
+		Map<BundleContextImpl, Set<Map.Entry<FrameworkListener, FrameworkListener>>> listenerSnapshot;
+		synchronized (allFrameworkListeners) {
+			listenerSnapshot = new HashMap<BundleContextImpl, Set<Map.Entry<FrameworkListener, FrameworkListener>>>(allFrameworkListeners.size());
+			for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener>> entry : allFrameworkListeners.entrySet()) {
+				CopyOnWriteIdentityMap<FrameworkListener, FrameworkListener> listeners = entry.getValue();
+				if (!listeners.isEmpty()) {
+					listenerSnapshot.put(entry.getKey(), listeners.entrySet());
+				}
 			}
 		}
+		// If framework event hook were defined they would be called here
+
+		// deliver the event to the snapshot
+		ListenerQueue<FrameworkListener, FrameworkListener, FrameworkEvent> queue = newListenerQueue();
+
+		// add the listeners specified by the caller first
+		if (callerListeners != null && callerListeners.length > 0) {
+			Map<FrameworkListener, FrameworkListener> listeners = new HashMap<FrameworkListener, FrameworkListener>();
+			for (FrameworkListener listener : callerListeners) {
+				if (listener != null)
+					listeners.put(listener, listener);
+			}
+			// We use the system bundle context as the dispatcher
+			if (listeners.size() > 0) {
+				@SuppressWarnings({"rawtypes", "unchecked"})
+				EventDispatcher<FrameworkListener, FrameworkListener, FrameworkEvent> dispatcher = (EventDispatcher) getSystemBundleContext();
+				queue.queueListeners(listeners.entrySet(), dispatcher);
+			}
+		}
+
+		for (Map.Entry<BundleContextImpl, Set<Map.Entry<FrameworkListener, FrameworkListener>>> entry : listenerSnapshot.entrySet()) {
+			@SuppressWarnings({"rawtypes", "unchecked"})
+			EventDispatcher<FrameworkListener, FrameworkListener, FrameworkEvent> dispatcher = (EventDispatcher) entry.getKey();
+			Set<Map.Entry<FrameworkListener, FrameworkListener>> listeners = entry.getValue();
+			queue.queueListeners(listeners, dispatcher);
+		}
+
+		queue.dispatchEventAsynchronous(FRAMEWORKEVENT, event);
 	}
 
-	public void publishFrameworkEventPrivileged(FrameworkEvent event) {
-		/* if the event is an error then it should be logged */
-		if (event.getType() == FrameworkEvent.ERROR) {
-			FrameworkLog frameworkLog = adaptor.getFrameworkLog();
-			if (frameworkLog != null)
-				frameworkLog.log(event);
+	void addBundleListener(BundleListener listener, BundleContextImpl context) {
+		if (listener instanceof SynchronousBundleListener) {
+			checkAdminPermission(context.getBundle(), AdminPermission.LISTENER);
+			synchronized (allSyncBundleListeners) {
+				CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener> listeners = allSyncBundleListeners.get(context);
+				if (listeners == null) {
+					listeners = new CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener>();
+					allSyncBundleListeners.put(context, listeners);
+				}
+				listeners.put((SynchronousBundleListener) listener, (SynchronousBundleListener) listener);
+			}
+		} else {
+			synchronized (allBundleListeners) {
+				CopyOnWriteIdentityMap<BundleListener, BundleListener> listeners = allBundleListeners.get(context);
+				if (listeners == null) {
+					listeners = new CopyOnWriteIdentityMap<BundleListener, BundleListener>();
+					allBundleListeners.put(context, listeners);
+				}
+				listeners.put(listener, listener);
+			}
 		}
-		/* queue to hold set of listeners */
-		ListenerQueue listeners = new ListenerQueue(eventManager);
-		/* queue to hold set of BundleContexts w/ listeners */
-		ListenerQueue contexts = new ListenerQueue(eventManager);
-		/* synchronize while building the listener list */
-		synchronized (frameworkEvent) {
-			/* add set of BundleContexts w/ listeners to queue */
-			contexts.queueListeners(frameworkEvent.entrySet(), this);
-			/* synchronously dispatch to populate listeners queue */
-			contexts.dispatchEventSynchronous(FRAMEWORKEVENT, listeners);
+	}
+
+	void removeBundleListener(BundleListener listener, BundleContextImpl context) {
+		if (listener instanceof SynchronousBundleListener) {
+			checkAdminPermission(context.getBundle(), AdminPermission.LISTENER);
+			synchronized (allSyncBundleListeners) {
+				CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener> listeners = allSyncBundleListeners.get(context);
+				if (listeners != null)
+					listeners.remove(listener);
+			}
+		} else {
+			synchronized (allBundleListeners) {
+				CopyOnWriteIdentityMap<BundleListener, BundleListener> listeners = allBundleListeners.get(context);
+				if (listeners != null)
+					listeners.remove(listener);
+			}
 		}
-		/* dispatch event to set of listeners */
-		listeners.dispatchEventAsynchronous(FRAMEWORKEVENT, event);
 	}
 
 	/**
@@ -1293,19 +1449,20 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * @param bundle
 	 *            Affected bundle or null.
 	 */
-	public void publishBundleEvent(int type, org.osgi.framework.Bundle bundle) {
-		if ((bundleEventSync != null) || (bundleEvent != null)) {
-			final BundleEvent event = new BundleEvent(type, bundle);
-			if (System.getSecurityManager() == null) {
-				publishBundleEventPrivileged(event);
-			} else {
-				AccessController.doPrivileged(new PrivilegedAction() {
-					public Object run() {
-						publishBundleEventPrivileged(event);
-						return null;
-					}
-				});
-			}
+	public void publishBundleEvent(int type, Bundle bundle) {
+		publishBundleEvent(new BundleEvent(type, bundle));
+	}
+
+	private void publishBundleEvent(final BundleEvent event) {
+		if (System.getSecurityManager() == null) {
+			publishBundleEventPrivileged(event);
+		} else {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
+				public Object run() {
+					publishBundleEventPrivileged(event);
+					return null;
+				}
+			});
 		}
 	}
 
@@ -1315,102 +1472,106 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		 * BEFORE we dispatch the event.
 		 */
 		/* Collect snapshot of SynchronousBundleListeners */
-		ListenerQueue listenersSync = null;
-		if (bundleEventSync != null) {
-			/* queue to hold set of listeners */
-			listenersSync = new ListenerQueue(eventManager);
-			/* queue to hold set of BundleContexts w/ listeners */
-			ListenerQueue contexts = new ListenerQueue(eventManager);
-			/* synchronize while building the listener list */
-			synchronized (bundleEventSync) {
-				/* add set of BundleContexts w/ listeners to queue */
-				contexts.queueListeners(bundleEventSync.entrySet(), this);
-				/* synchronously dispatch to populate listeners queue */
-				contexts.dispatchEventSynchronous(BUNDLEEVENTSYNC, listenersSync);
+		/* Build the listener snapshot */
+		Map<BundleContextImpl, Set<Map.Entry<SynchronousBundleListener, SynchronousBundleListener>>> listenersSync;
+		synchronized (allSyncBundleListeners) {
+			listenersSync = new HashMap<BundleContextImpl, Set<Map.Entry<SynchronousBundleListener, SynchronousBundleListener>>>(allSyncBundleListeners.size());
+			for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener>> entry : allSyncBundleListeners.entrySet()) {
+				CopyOnWriteIdentityMap<SynchronousBundleListener, SynchronousBundleListener> listeners = entry.getValue();
+				if (!listeners.isEmpty()) {
+					listenersSync.put(entry.getKey(), listeners.entrySet());
+				}
 			}
 		}
 		/* Collect snapshot of BundleListeners; only if the event is NOT STARTING or STOPPING or LAZY_ACTIVATION */
-		ListenerQueue listenersAsync = null;
-		if (bundleEvent != null && (event.getType() & (BundleEvent.STARTING | BundleEvent.STOPPING | BundleEvent.LAZY_ACTIVATION)) == 0) {
-			/* queue to hold set of listeners */
-			listenersAsync = new ListenerQueue(eventManager);
-			/* queue to hold set of BundleContexts w/ listeners */
-			ListenerQueue contexts = new ListenerQueue(eventManager);
-			/* synchronize while building the listener list */
-			synchronized (bundleEvent) {
-				/* add set of BundleContexts w/ listeners to queue */
-				contexts.queueListeners(bundleEvent.entrySet(), this);
-				/* synchronously dispatch to populate listeners queue */
-				contexts.dispatchEventSynchronous(BUNDLEEVENT, listenersAsync);
+		Map<BundleContextImpl, Set<Map.Entry<BundleListener, BundleListener>>> listenersAsync = null;
+		if ((event.getType() & (BundleEvent.STARTING | BundleEvent.STOPPING | BundleEvent.LAZY_ACTIVATION)) == 0) {
+			synchronized (allBundleListeners) {
+				listenersAsync = new HashMap<BundleContextImpl, Set<Map.Entry<BundleListener, BundleListener>>>(allBundleListeners.size());
+				for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<BundleListener, BundleListener>> entry : allBundleListeners.entrySet()) {
+					CopyOnWriteIdentityMap<BundleListener, BundleListener> listeners = entry.getValue();
+					if (!listeners.isEmpty()) {
+						listenersAsync.put(entry.getKey(), listeners.entrySet());
+					}
+				}
 			}
 		}
-		/* Dispatch BundleEvent to SynchronousBundleListeners */
-		if (listenersSync != null) {
-			listenersSync.dispatchEventSynchronous(BUNDLEEVENTSYNC, event);
-		}
-		/* Dispatch BundleEvent to BundleListeners */
-		if (listenersAsync != null) {
-			listenersAsync.dispatchEventAsynchronous(BUNDLEEVENT, event);
+
+		/* shrink the snapshot.
+		 * keySet returns a Collection which cannot be added to and
+		 * removals from that collection will result in removals of the
+		 * entry from the snapshot.
+		 */
+		Collection<BundleContext> shrinkable;
+		if (listenersAsync == null) {
+			shrinkable = asBundleContexts(listenersSync.keySet());
+		} else {
+			shrinkable = new ShrinkableCollection<BundleContext>(asBundleContexts(listenersSync.keySet()), asBundleContexts(listenersAsync.keySet()));
+		}
+		notifyEventHooksPrivileged(event, shrinkable);
+
+		/* Dispatch the event to the snapshot for sync listeners */
+		if (!listenersSync.isEmpty()) {
+			ListenerQueue<SynchronousBundleListener, SynchronousBundleListener, BundleEvent> queue = newListenerQueue();
+			for (Map.Entry<BundleContextImpl, Set<Map.Entry<SynchronousBundleListener, SynchronousBundleListener>>> entry : listenersSync.entrySet()) {
+				@SuppressWarnings({"rawtypes", "unchecked"})
+				EventDispatcher<SynchronousBundleListener, SynchronousBundleListener, BundleEvent> dispatcher = (EventDispatcher) entry.getKey();
+				Set<Map.Entry<SynchronousBundleListener, SynchronousBundleListener>> listeners = entry.getValue();
+				queue.queueListeners(listeners, dispatcher);
+			}
+			queue.dispatchEventSynchronous(BUNDLEEVENTSYNC, event);
 		}
-	}
 
-	public ListenerQueue newListenerQueue() {
-		return new ListenerQueue(eventManager);
+		/* Dispatch the event to the snapshot for async listeners */
+		if ((listenersAsync != null) && !listenersAsync.isEmpty()) {
+			ListenerQueue<BundleListener, BundleListener, BundleEvent> queue = newListenerQueue();
+			for (Map.Entry<BundleContextImpl, Set<Map.Entry<BundleListener, BundleListener>>> entry : listenersAsync.entrySet()) {
+				@SuppressWarnings({"rawtypes", "unchecked"})
+				EventDispatcher<BundleListener, BundleListener, BundleEvent> dispatcher = (EventDispatcher) entry.getKey();
+				Set<Map.Entry<BundleListener, BundleListener>> listeners = entry.getValue();
+				queue.queueListeners(listeners, dispatcher);
+			}
+			queue.dispatchEventAsynchronous(BUNDLEEVENT, event);
+		}
 	}
 
 	/**
-	 * Top level event dispatcher for the framework.
-	 * 
-	 * @param l
-	 *            BundleContext for receiving bundle
-	 * @param lo
-	 *            BundleContext for receiving bundle
-	 * @param action
-	 *            Event class type
-	 * @param object
-	 *            ListenerQueue to populate
+	 * Coerce the generic type of a collection from Collection<BundleContextImpl>
+	 * to Collection<BundleContext>
+	 * @param c Collection to be coerced.
+	 * @return c coerced to Collection<BundleContext>
 	 */
-	public void dispatchEvent(Object l, Object lo, int action, Object object) {
-		try {
-			BundleContextImpl context = (BundleContextImpl) l;
-			if (context.isValid()) /* if context still valid */{
-				ListenerQueue queue = (ListenerQueue) object;
-				switch (action) {
-					case BUNDLEEVENT : {
-						queue.queueListeners(context.bundleEvent.entrySet(), context);
-						break;
-					}
-					case BUNDLEEVENTSYNC : {
-						queue.queueListeners(context.bundleEventSync.entrySet(), context);
-						break;
-					}
-					case FRAMEWORKEVENT : {
-						queue.queueListeners(context.frameworkEvent.entrySet(), context);
-						break;
-					}
-					default : {
-						throw new InternalError();
-					}
+	@SuppressWarnings("unchecked")
+	public static Collection<BundleContext> asBundleContexts(Collection<? extends BundleContext> c) {
+		return (Collection<BundleContext>) c;
+	}
+
+	private void notifyEventHooksPrivileged(final BundleEvent event, final Collection<BundleContext> result) {
+		if (event.getType() == Framework.BATCHEVENT_BEGIN || event.getType() == Framework.BATCHEVENT_END)
+			return; // we don't need to send this event; it is used to book case special listeners
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("notifyBundleEventHooks(" + event.getType() + ":" + event.getBundle() + ", " + result + " )"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$  
+		}
+
+		getServiceRegistry().notifyHooksPrivileged(new HookContext() {
+			public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+				if (hook instanceof EventHook) {
+					((EventHook) hook).event(event, result);
 				}
 			}
-		} catch (Throwable t) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
-				Debug.println("Exception in Top level event dispatcher: " + t.getMessage()); //$NON-NLS-1$
-				Debug.printStackTrace(t);
+
+			public String getHookClassName() {
+				return eventHookName;
 			}
-			// allow the adaptor to handle this unexpected error
-			adaptor.handleRuntimeError(t);
-			publisherror: {
-				if (action == FRAMEWORKEVENT) {
-					FrameworkEvent event = (FrameworkEvent) object;
-					if (event.getType() == FrameworkEvent.ERROR) {
-						break publisherror; /* avoid infinite loop */
-					}
-				}
-				BundleContextImpl context = (BundleContextImpl) l;
-				publishFrameworkEvent(FrameworkEvent.ERROR, context.bundle, t);
+
+			public String getHookMethodName() {
+				return "event"; //$NON-NLS-1$
 			}
-		}
+		});
+	}
+
+	public <K, V, E> ListenerQueue<K, V, E> newListenerQueue() {
+		return new ListenerQueue<K, V, E>(eventManager);
 	}
 
 	private void initializeContextFinder() {
@@ -1442,7 +1603,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 
 	}
 
-	public static Field getField(Class clazz, Class type, boolean instance) {
+	public static Field getField(Class<?> clazz, Class<?> type, boolean instance) {
 		Field[] fields = clazz.getDeclaredFields();
 		for (int i = 0; i < fields.length; i++) {
 			boolean isStatic = Modifier.isStatic(fields[i].getModifiers());
@@ -1483,7 +1644,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 
 			if (factory != null) {
 				try {
-					factory.getClass().getMethod("isMultiplexing", null); //$NON-NLS-1$
+					factory.getClass().getMethod("isMultiplexing", (Class[]) null); //$NON-NLS-1$
 					Method register = factory.getClass().getMethod("register", new Class[] {Object.class}); //$NON-NLS-1$
 					register.invoke(factory, new Object[] {chf});
 				} catch (NoSuchMethodException e) {
@@ -1536,7 +1697,8 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	private static void resetContentHandlers() throws IllegalAccessException {
 		Field handlersField = getField(URLConnection.class, Hashtable.class, false);
 		if (handlersField != null) {
-			Hashtable handlers = (Hashtable) handlersField.get(null);
+			@SuppressWarnings("rawtypes")
+			Hashtable<?, ?> handlers = (Hashtable) handlersField.get(null);
 			if (handlers != null)
 				handlers.clear();
 		}
@@ -1571,7 +1733,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 			// because we failed to set the factory normally!!
 			if (factory != null) {
 				try {
-					factory.getClass().getMethod("isMultiplexing", null); //$NON-NLS-1$
+					factory.getClass().getMethod("isMultiplexing", (Class[]) null); //$NON-NLS-1$
 					Method register = factory.getClass().getMethod("register", new Class[] {Object.class}); //$NON-NLS-1$
 					register.invoke(factory, new Object[] {shf});
 				} catch (NoSuchMethodException e) {
@@ -1633,7 +1795,8 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	private static void resetURLStreamHandlers() throws IllegalAccessException {
 		Field handlersField = getField(URL.class, Hashtable.class, false);
 		if (handlersField != null) {
-			Hashtable handlers = (Hashtable) handlersField.get(null);
+			@SuppressWarnings("rawtypes")
+			Hashtable<?, ?> handlers = (Hashtable) handlersField.get(null);
 			if (handlers != null)
 				handlers.clear();
 		}
@@ -1694,7 +1857,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	 * @param serviceClass class of original service object
 	 * @return true if assignable given package wiring
 	 */
-	public boolean isServiceAssignableTo(Bundle registrant, Bundle client, String className, Class serviceClass) {
+	public boolean isServiceAssignableTo(Bundle registrant, Bundle client, String className, Class<?> serviceClass) {
 		// always return false for fragments
 		AbstractBundle consumer = (AbstractBundle) client;
 		if (consumer.isFragment())
@@ -1726,6 +1889,14 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		// 4) For the registrant bundle, find the wiring for the package.
 		PackageSource producerSource = producerBL.getPackageSource(pkgName);
 		if (producerSource == null) {
+			if (serviceClass != null && ServiceFactory.class.isAssignableFrom(serviceClass)) {
+				Bundle bundle = packageAdmin.getBundle(serviceClass);
+				if (bundle != null && bundle != registrant)
+					// in this case we have a wacky ServiceFactory that is doing something we cannot 
+					// verify if it is correct.  Instead of failing we allow the assignment and hope for the best
+					// bug 326918
+					return true;
+			}
 			// 5) If no wiring is found for the registrant bundle then find the wiring for the classloader of the service object.  If no wiring is found return false.
 			producerSource = getPackageSource(serviceClass, pkgName);
 			if (producerSource == null)
@@ -1735,7 +1906,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		return producerSource.hasCommonSource(consumerSource);
 	}
 
-	private PackageSource getPackageSource(Class serviceClass, String pkgName) {
+	private PackageSource getPackageSource(Class<?> serviceClass, String pkgName) {
 		if (serviceClass == null)
 			return null;
 		AbstractBundle serviceBundle = (AbstractBundle) packageAdmin.getBundle(serviceClass);
@@ -1748,7 +1919,7 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 		if (producerSource != null)
 			return producerSource;
 		// try the interfaces
-		Class[] interfaces = serviceClass.getInterfaces();
+		Class<?>[] interfaces = serviceClass.getInterfaces();
 		// note that getInterfaces never returns null
 		for (int i = 0; i < interfaces.length; i++) {
 			producerSource = getPackageSource(interfaces[i], pkgName);
@@ -1774,8 +1945,8 @@ public class Framework implements EventDispatcher, EventPublisher, Runnable {
 	}
 
 	SignedContentFactory getSignedContentFactory() {
-		ServiceTracker currentTracker = signedContentFactory;
-		return (SignedContentFactory) (currentTracker == null ? null : currentTracker.getService());
+		ServiceTracker<SignedContentFactory, SignedContentFactory> currentTracker = signedContentFactory;
+		return (currentTracker == null ? null : currentTracker.getService());
 	}
 
 	ContextFinder getContextFinder() {
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/InternalSystemBundle.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/InternalSystemBundle.java
index 1890cc5..f19f765 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/InternalSystemBundle.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/InternalSystemBundle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,8 @@ import java.util.Dictionary;
 import java.util.Enumeration;
 import org.eclipse.osgi.framework.debug.Debug;
 import org.osgi.framework.*;
+import org.osgi.framework.startlevel.FrameworkStartLevel;
+import org.osgi.framework.wiring.FrameworkWiring;
 
 /**
  * This class subclasses Bundle to provide a system Bundle
@@ -28,44 +30,58 @@ import org.osgi.framework.*;
  */
 
 public class InternalSystemBundle extends BundleHost implements org.osgi.framework.launch.Framework {
-	class SystemBundleHeaders extends Dictionary {
-		private final Dictionary headers;
+	class SystemBundleHeaders extends Dictionary<String, String> {
+		private final Dictionary<String, String> headers;
 
-		public SystemBundleHeaders(Dictionary headers) {
+		public SystemBundleHeaders(Dictionary<String, String> headers) {
 			this.headers = headers;
 		}
 
-		public Enumeration elements() {
+		public Enumeration<String> elements() {
 			return headers.elements();
 		}
 
-		public Object get(Object key) {
-			if (!org.osgi.framework.Constants.EXPORT_PACKAGE.equals(key))
-				return headers.get(key);
-			String systemPackages = FrameworkProperties.getProperty(org.osgi.framework.Constants.FRAMEWORK_SYSTEMPACKAGES);
-			String results = (String) headers.get(org.osgi.framework.Constants.EXPORT_PACKAGE);
-			if (systemPackages != null) {
-				if (results != null)
-					results += ", " + systemPackages; //$NON-NLS-1$
+		public String get(Object key) {
+			if (!(key instanceof String))
+				return null;
+			if (org.osgi.framework.Constants.EXPORT_PACKAGE.equalsIgnoreCase((String) key)) {
+				return getExtra(org.osgi.framework.Constants.EXPORT_PACKAGE, org.osgi.framework.Constants.FRAMEWORK_SYSTEMPACKAGES, org.osgi.framework.Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA);
+			} else if (org.osgi.framework.Constants.PROVIDE_CAPABILITY.equalsIgnoreCase((String) key)) {
+				return getExtra(org.osgi.framework.Constants.PROVIDE_CAPABILITY, org.osgi.framework.Constants.FRAMEWORK_SYSTEMCAPABILITIES, org.osgi.framework.Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA);
+			}
+			return headers.get(key);
+		}
+
+		private String getExtra(String header, String systemProp, String systemExtraProp) {
+			String systemValue = FrameworkProperties.getProperty(systemProp);
+			String systemExtraValue = FrameworkProperties.getProperty(systemExtraProp);
+			if (systemValue == null)
+				systemValue = systemExtraValue;
+			else if (systemExtraValue != null)
+				systemValue += ", " + systemExtraValue; //$NON-NLS-1$
+			String result = headers.get(header);
+			if (systemValue != null) {
+				if (result != null)
+					result += ", " + systemValue; //$NON-NLS-1$
 				else
-					results = systemPackages;
+					result = systemValue;
 			}
-			return results;
+			return result;
 		}
 
 		public boolean isEmpty() {
 			return headers.isEmpty();
 		}
 
-		public Enumeration keys() {
+		public Enumeration<String> keys() {
 			return headers.keys();
 		}
 
-		public Object put(Object key, Object value) {
+		public String put(String key, String value) {
 			return headers.put(key, value);
 		}
 
-		public Object remove(Object key) {
+		public String remove(Object key) {
 			return headers.remove(key);
 		}
 
@@ -75,6 +91,7 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 
 	}
 
+	private final FrameworkStartLevel fsl;
 	ProtectionDomain systemDomain;
 
 	/**
@@ -90,6 +107,7 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 		Constants.setInternalSymbolicName(bundledata.getSymbolicName());
 		state = Bundle.RESOLVED;
 		context = createContext();
+		fsl = new EquinoxStartLevel();
 	}
 
 	/**
@@ -153,7 +171,7 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 	 * @return     the resulting Class
 	 * @exception  java.lang.ClassNotFoundException  if the class definition was not found.
 	 */
-	protected Class loadClass(String name, boolean checkPermission) throws ClassNotFoundException {
+	protected Class<?> loadClass(String name, boolean checkPermission) throws ClassNotFoundException {
 		if (checkPermission) {
 			framework.checkAdminPermission(this, AdminPermission.CLASS);
 			checkValid();
@@ -207,7 +225,7 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 			framework.systemBundle.context.start();
 			framework.publishBundleEvent(BundleEvent.STARTING, framework.systemBundle);
 		} catch (BundleException be) {
-			if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+			if (Debug.DEBUG_STARTLEVEL) {
 				Debug.println("SLL: Bundle resume exception: " + be.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(be.getNestedException() == null ? be : be.getNestedException());
 			}
@@ -221,7 +239,7 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 
 		for (int i = 0; i < installedBundles.length; i++) {
 			AbstractBundle bundle = installedBundles[i];
-			if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+			if (Debug.DEBUG_STARTLEVEL) {
 				Debug.println("SLL: Trying to load bundle " + bundle); //$NON-NLS-1$
 			}
 			bundle.load();
@@ -269,7 +287,7 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 		/* clean up the exporting loaders */
 		framework.packageAdmin.cleanup();
 
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+		if (Debug.DEBUG_GENERAL) {
 			Debug.println("->Framework shutdown"); //$NON-NLS-1$
 		}
 		// fire the STOPPED event here.
@@ -365,7 +383,7 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 		// Do nothing
 	}
 
-	public Dictionary getHeaders(String localeString) {
+	public Dictionary<String, String> getHeaders(String localeString) {
 		return new SystemBundleHeaders(super.getHeaders(localeString));
 	}
 
@@ -380,4 +398,36 @@ public class InternalSystemBundle extends BundleHost implements org.osgi.framewo
 	public ClassLoader getClassLoader() {
 		return getClass().getClassLoader();
 	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected <A> A adapt0(Class<A> adapterType) {
+		if (FrameworkStartLevel.class.equals(adapterType))
+			return (A) fsl;
+		else if (FrameworkWiring.class.equals(adapterType))
+			return (A) framework.getPackageAdmin();
+		return super.adapt0(adapterType);
+	}
+
+	class EquinoxStartLevel implements FrameworkStartLevel {
+		public void setStartLevel(int startlevel, FrameworkListener... listeners) {
+			framework.startLevelManager.setStartLevel(startlevel, InternalSystemBundle.this, listeners);
+		}
+
+		public int getInitialBundleStartLevel() {
+			return framework.startLevelManager.getInitialBundleStartLevel();
+		}
+
+		public void setInitialBundleStartLevel(int startlevel) {
+			framework.startLevelManager.setInitialBundleStartLevel(startlevel);
+		}
+
+		public Bundle getBundle() {
+			return InternalSystemBundle.this;
+		}
+
+		public int getStartLevel() {
+			return framework.startLevelManager.getStartLevel();
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ManifestLocalization.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ManifestLocalization.java
index d0067fd..eefad0d 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ManifestLocalization.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ManifestLocalization.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,43 +22,39 @@ import org.osgi.framework.Constants;
  * This class is used by the Bundle Class to localize manifest headers.
  */
 public class ManifestLocalization {
-	private AbstractBundle bundle = null;
-	private Dictionary rawHeaders = null;
-	private Dictionary defaultLocaleHeaders = null;
-	private Hashtable cache = new Hashtable(5);
+	final static String DEFAULT_ROOT = FrameworkProperties.getProperty("equinox.root.locale", "en"); //$NON-NLS-1$ //$NON-NLS-2$
+	private final AbstractBundle bundle;
+	private final Dictionary<String, String> rawHeaders;
+	private Dictionary<String, String> defaultLocaleHeaders = null;
+	private final Hashtable<String, BundleResourceBundle> cache = new Hashtable<String, BundleResourceBundle>(5);
 
-	public ManifestLocalization(AbstractBundle bundle, Dictionary rawHeaders) {
+	public ManifestLocalization(AbstractBundle bundle, Dictionary<String, String> rawHeaders) {
 		this.bundle = bundle;
 		this.rawHeaders = rawHeaders;
 	}
 
-	protected Dictionary getHeaders(String localeString) {
+	Dictionary<String, String> getHeaders(String localeString) {
 		if (localeString.length() == 0)
-			return (rawHeaders);
-		boolean isDefaultLocale = false;
-		String defaultLocale = Locale.getDefault().toString();
-		if (localeString.equals(defaultLocale)) {
-			if (defaultLocaleHeaders != null)
-				return (defaultLocaleHeaders);
-			isDefaultLocale = true;
+			return rawHeaders;
+		boolean isDefaultLocale = localeString.equals(Locale.getDefault().toString());
+		Dictionary<String, String> currentDefault = defaultLocaleHeaders;
+		if (isDefaultLocale && currentDefault != null) {
+			return currentDefault;
 		}
 		try {
 			bundle.checkValid();
 		} catch (IllegalStateException ex) {
 			// defaultLocaleHeaders should have been initialized on uninstall
-			if (defaultLocaleHeaders != null)
-				return defaultLocaleHeaders;
-			return (rawHeaders);
-		}
-		ResourceBundle localeProperties = getResourceBundle(localeString);
-		if (localeProperties == null && !isDefaultLocale)
-			// could not find the requested locale use the default locale
-			localeProperties = getResourceBundle(defaultLocale);
-		Enumeration e = this.rawHeaders.keys();
-		Headers localeHeaders = new Headers(this.rawHeaders.size());
+			if (currentDefault != null)
+				return currentDefault;
+			return rawHeaders;
+		}
+		ResourceBundle localeProperties = getResourceBundle(localeString, isDefaultLocale);
+		Enumeration<String> e = this.rawHeaders.keys();
+		Headers<String, String> localeHeaders = new Headers<String, String>(this.rawHeaders.size());
 		while (e.hasMoreElements()) {
-			String key = (String) e.nextElement();
-			String value = (String) this.rawHeaders.get(key);
+			String key = e.nextElement();
+			String value = this.rawHeaders.get(key);
 			if (value.startsWith("%") && (value.length() > 1)) { //$NON-NLS-1$
 				String propertiesKey = value.substring(1);
 				try {
@@ -77,64 +73,77 @@ public class ManifestLocalization {
 	}
 
 	private String[] buildNLVariants(String nl) {
-		ArrayList result = new ArrayList();
+		List<String> result = new ArrayList<String>();
 		while (nl.length() > 0) {
 			result.add(nl);
 			int i = nl.lastIndexOf('_');
 			nl = (i < 0) ? "" : nl.substring(0, i); //$NON-NLS-1$
 		}
 		result.add(""); //$NON-NLS-1$
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/*
-	 * This method find the appropiate Manifest Localization file inside the
+	 * This method find the appropriate Manifest Localization file inside the
 	 * bundle. If not found, return null.
 	 */
-	protected ResourceBundle getResourceBundle(String localeString) {
-		String propertiesLocation = (String) rawHeaders.get(Constants.BUNDLE_LOCALIZATION);
-		if (propertiesLocation == null) {
-			propertiesLocation = Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
-		}
+	ResourceBundle getResourceBundle(String localeString, boolean isDefaultLocale) {
+		BundleResourceBundle resourceBundle = lookupResourceBundle(localeString);
+		if (isDefaultLocale)
+			return (ResourceBundle) resourceBundle;
+		// need to determine if this is resource bundle is an empty stem
+		// if it is then the default locale should be used
+		if (resourceBundle == null || resourceBundle.isStemEmpty())
+			return (ResourceBundle) lookupResourceBundle(Locale.getDefault().toString());
+		return (ResourceBundle) resourceBundle;
+	}
 
-		BundleResourceBundle result = (BundleResourceBundle) cache.get(localeString);
-		if (result != null)
-			return (ResourceBundle) (result.isEmpty() ? null : result);
-		String[] nlVarients = buildNLVariants(localeString);
-		BundleResourceBundle parent = null;
-		for (int i = nlVarients.length - 1; i >= 0; i--) {
-			BundleResourceBundle varientBundle = null;
-			URL varientURL = findResource(propertiesLocation + (nlVarients[i].equals("") ? nlVarients[i] : '_' + nlVarients[i]) + ".properties"); //$NON-NLS-1$ //$NON-NLS-2$
-			if (varientURL == null) {
-				varientBundle = (BundleResourceBundle) cache.get(nlVarients[i]);
-			} else {
-				InputStream resourceStream = null;
-				try {
-					resourceStream = varientURL.openStream();
-					varientBundle = new LocalizationResourceBundle(resourceStream);
-				} catch (IOException e) {
-					// ignore and continue
-				} finally {
-					if (resourceStream != null) {
-						try {
-							resourceStream.close();
-						} catch (IOException e3) {
-							//Ignore exception
+	private BundleResourceBundle lookupResourceBundle(String localeString) {
+		// get the localization header as late as possible to avoid accessing the raw headers
+		// getting the first value from the raw headers forces the manifest to be parsed (bug 332039)
+		String localizationHeader = rawHeaders.get(Constants.BUNDLE_LOCALIZATION);
+		if (localizationHeader == null)
+			localizationHeader = Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
+		synchronized (cache) {
+			BundleResourceBundle result = cache.get(localeString);
+			if (result != null)
+				return result.isEmpty() ? null : result;
+			String[] nlVarients = buildNLVariants(localeString);
+			BundleResourceBundle parent = null;
+			for (int i = nlVarients.length - 1; i >= 0; i--) {
+				BundleResourceBundle varientBundle = null;
+				URL varientURL = findResource(localizationHeader + (nlVarients[i].equals("") ? nlVarients[i] : '_' + nlVarients[i]) + ".properties"); //$NON-NLS-1$ //$NON-NLS-2$
+				if (varientURL == null) {
+					varientBundle = cache.get(nlVarients[i]);
+				} else {
+					InputStream resourceStream = null;
+					try {
+						resourceStream = varientURL.openStream();
+						varientBundle = new LocalizationResourceBundle(resourceStream);
+					} catch (IOException e) {
+						// ignore and continue
+					} finally {
+						if (resourceStream != null) {
+							try {
+								resourceStream.close();
+							} catch (IOException e3) {
+								//Ignore exception
+							}
 						}
 					}
 				}
-			}
 
-			if (varientBundle == null) {
-				varientBundle = new EmptyResouceBundle();
+				if (varientBundle == null) {
+					varientBundle = new EmptyResouceBundle(nlVarients[i]);
+				}
+				if (parent != null)
+					varientBundle.setParent((ResourceBundle) parent);
+				cache.put(nlVarients[i], varientBundle);
+				parent = varientBundle;
 			}
-			if (parent != null)
-				varientBundle.setParent((ResourceBundle) parent);
-			cache.put(nlVarients[i], varientBundle);
-			parent = varientBundle;
+			result = cache.get(localeString);
+			return result.isEmpty() ? null : result;
 		}
-		result = (BundleResourceBundle) cache.get(localeString);
-		return (ResourceBundle) (result.isEmpty() ? null : result);
 	}
 
 	private URL findResource(String resource) {
@@ -151,14 +160,14 @@ public class ManifestLocalization {
 		return searchBundle.getEntry0(resource);
 	}
 
-	private URL findInResolved(String filePath, AbstractBundle bundleHost) {
+	private static URL findInResolved(String filePath, AbstractBundle bundleHost) {
 		URL result = bundleHost.getEntry0(filePath);
 		if (result != null)
 			return result;
 		return findInFragments(filePath, bundleHost);
 	}
 
-	private URL findInFragments(String filePath, AbstractBundle searchBundle) {
+	private static URL findInFragments(String filePath, AbstractBundle searchBundle) {
 		BundleFragment[] fragments = searchBundle.getFragments();
 		URL fileURL = null;
 		for (int i = 0; fragments != null && i < fragments.length && fileURL == null; i++) {
@@ -168,10 +177,12 @@ public class ManifestLocalization {
 		return fileURL;
 	}
 
-	private abstract interface BundleResourceBundle {
+	private interface BundleResourceBundle {
 		void setParent(ResourceBundle parent);
 
 		boolean isEmpty();
+
+		boolean isStemEmpty();
 	}
 
 	private class LocalizationResourceBundle extends PropertyResourceBundle implements BundleResourceBundle {
@@ -186,10 +197,21 @@ public class ManifestLocalization {
 		public boolean isEmpty() {
 			return false;
 		}
+
+		public boolean isStemEmpty() {
+			return parent == null;
+		}
 	}
 
-	private class EmptyResouceBundle extends ResourceBundle implements BundleResourceBundle {
-		public Enumeration getKeys() {
+	class EmptyResouceBundle extends ResourceBundle implements BundleResourceBundle {
+		private final String localeString;
+
+		public EmptyResouceBundle(String locale) {
+			super();
+			this.localeString = locale;
+		}
+
+		public Enumeration<String> getKeys() {
 			return null;
 		}
 
@@ -206,5 +228,13 @@ public class ManifestLocalization {
 				return true;
 			return ((BundleResourceBundle) parent).isEmpty();
 		}
+
+		public boolean isStemEmpty() {
+			if (DEFAULT_ROOT.equals(localeString))
+				return false;
+			if (parent == null)
+				return true;
+			return ((BundleResourceBundle) parent).isStemEmpty();
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java
index a286644..ba60bf7 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.osgi.internal.profile.Profile;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
+import org.osgi.framework.wiring.FrameworkWiring;
 import org.osgi.service.packageadmin.*;
 
 /**
@@ -48,31 +49,30 @@ import org.osgi.service.packageadmin.*;
  * old values, isRemovalPending() returns true, and getExportingBundle()
  * and getImportingBundles() return null.
  */
-public class PackageAdminImpl implements PackageAdmin {
+public class PackageAdminImpl implements PackageAdmin, FrameworkWiring {
 	/** framework object */
 	protected Framework framework;
-	private Map removalPendings = new HashMap();
 
 	/* 
 	 * We need to make sure that the GetBundleAction class loads early to prevent a ClassCircularityError when checking permissions.
 	 * See bug 161561
 	 */
 	static {
-		Class c;
+		Class<?> c;
 		c = GetBundleAction.class;
 		c.getName(); // to prevent compiler warnings
 	}
 
-	static class GetBundleAction implements PrivilegedAction {
-		private Class clazz;
+	static class GetBundleAction implements PrivilegedAction<Bundle> {
+		private Class<?> clazz;
 		private PackageAdminImpl impl;
 
-		public GetBundleAction(PackageAdminImpl impl, Class clazz) {
+		public GetBundleAction(PackageAdminImpl impl, Class<?> clazz) {
 			this.impl = impl;
 			this.clazz = clazz;
 		}
 
-		public Object run() {
+		public Bundle run() {
 			return impl.getBundlePriv(clazz);
 		}
 	}
@@ -87,7 +87,7 @@ public class PackageAdminImpl implements PackageAdmin {
 	}
 
 	public ExportedPackage[] getExportedPackages(Bundle bundle) {
-		ArrayList allExports = new ArrayList();
+		List<ExportedPackage> allExports = new ArrayList<ExportedPackage>();
 		FrameworkAdaptor adaptor = framework.adaptor;
 		if (adaptor == null)
 			return null;
@@ -99,21 +99,21 @@ public class PackageAdminImpl implements PackageAdmin {
 			if (bundle == null || exportedPackage.getBundle() == bundle)
 				allExports.add(exportedPackage);
 		}
-		return (ExportedPackage[]) (allExports.size() == 0 ? null : allExports.toArray(new ExportedPackage[allExports.size()]));
+		return (allExports.size() == 0 ? null : allExports.toArray(new ExportedPackage[allExports.size()]));
 	}
 
 	private ExportedPackageImpl createExportedPackage(ExportPackageDescription description) {
 		BundleDescription exporter = description.getExporter();
 		if (exporter == null || exporter.getHost() != null)
 			return null;
-		BundleLoaderProxy proxy = (BundleLoaderProxy) exporter.getUserObject();
-		if (proxy == null) {
+		Object userObject = exporter.getUserObject();
+		if (!(userObject instanceof BundleLoaderProxy)) {
 			BundleHost bundle = (BundleHost) framework.getBundle(exporter.getBundleId());
 			if (bundle == null)
 				return null;
-			proxy = bundle.getLoaderProxy();
+			userObject = bundle.getLoaderProxy();
 		}
-		return new ExportedPackageImpl(description, proxy);
+		return new ExportedPackageImpl(description, (BundleLoaderProxy) userObject);
 	}
 
 	public ExportedPackage getExportedPackage(String name) {
@@ -126,9 +126,8 @@ public class PackageAdminImpl implements PackageAdmin {
 				if (result == null) {
 					result = allExports[i];
 				} else {
-					// TODO not efficient but this is not called very often
-					Version curVersion = Version.parseVersion(result.getSpecificationVersion());
-					Version newVersion = Version.parseVersion(allExports[i].getSpecificationVersion());
+					Version curVersion = result.getVersion();
+					Version newVersion = allExports[i].getVersion();
 					if (newVersion.compareTo(curVersion) >= 0)
 						result = allExports[i];
 				}
@@ -141,18 +140,18 @@ public class PackageAdminImpl implements PackageAdmin {
 		ExportedPackage[] allExports = getExportedPackages((Bundle) null);
 		if (allExports == null)
 			return null;
-		ArrayList result = new ArrayList(1); // rare to have more than one
+		List<ExportedPackage> result = new ArrayList<ExportedPackage>(1); // rare to have more than one
 		for (int i = 0; i < allExports.length; i++)
 			if (name.equals(allExports[i].getName()))
 				result.add(allExports[i]);
-		return (ExportedPackage[]) (result.size() == 0 ? null : result.toArray(new ExportedPackage[result.size()]));
+		return (result.size() == 0 ? null : result.toArray(new ExportedPackage[result.size()]));
 	}
 
 	public void refreshPackages(Bundle[] input) {
-		refreshPackages(input, false);
+		refreshPackages(input, false, null);
 	}
 
-	public void refreshPackages(Bundle[] input, boolean synchronously) {
+	public void refreshPackages(Bundle[] input, boolean synchronously, final FrameworkListener[] listeners) {
 		framework.checkAdminPermission(framework.systemBundle, AdminPermission.RESOLVE);
 
 		final AbstractBundle[] copy;
@@ -165,13 +164,13 @@ public class PackageAdminImpl implements PackageAdmin {
 			copy = null;
 
 		if (synchronously) {
-			doResolveBundles(copy, true);
+			doResolveBundles(copy, true, listeners);
 			if (framework.isForcedRestart())
 				framework.systemBundle.stop();
 		} else {
 			Thread refresh = framework.secureAction.createThread(new Runnable() {
 				public void run() {
-					doResolveBundles(copy, true);
+					doResolveBundles(copy, true, listeners);
 					if (framework.isForcedRestart())
 						framework.shutdown(FrameworkEvent.STOPPED_BOOTCLASSPATH_MODIFIED);
 				}
@@ -181,10 +180,19 @@ public class PackageAdminImpl implements PackageAdmin {
 	}
 
 	public boolean resolveBundles(Bundle[] bundles) {
+		return resolveBundles(bundles, false);
+	}
+
+	boolean resolveBundles(Bundle[] bundles, boolean propagateError) {
 		framework.checkAdminPermission(framework.systemBundle, AdminPermission.RESOLVE);
-		doResolveBundles(null, false);
 		if (bundles == null)
 			bundles = framework.getAllBundles();
+		try {
+			doResolveBundles(bundles, false, null);
+		} catch (ResolverHookException e) {
+			if (propagateError)
+				throw e;
+		}
 		for (int i = 0; i < bundles.length; i++)
 			if (!((AbstractBundle) bundles[i]).isResolved())
 				return false;
@@ -193,7 +201,7 @@ public class PackageAdminImpl implements PackageAdmin {
 	}
 
 	// This method is protected to enable a work around to bug 245251
-	synchronized protected void doResolveBundles(AbstractBundle[] bundles, boolean refreshPackages) {
+	synchronized protected void doResolveBundles(Bundle[] bundles, boolean refreshPackages, FrameworkListener[] listeners) {
 		try {
 			if (Profile.PROFILE && Profile.STARTUP)
 				Profile.logEnter("resolve bundles"); //$NON-NLS-1$
@@ -201,20 +209,23 @@ public class PackageAdminImpl implements PackageAdmin {
 			State systemState = framework.adaptor.getState();
 			BundleDescription[] descriptions = null;
 			int numBundles = bundles == null ? 0 : bundles.length;
-			if (!refreshPackages)
-				// in this case we must make descriptions non-null so we do
-				// not force the removal pendings to be processed when resolving
-				// the state.
-				descriptions = new BundleDescription[0];
-			else if (numBundles > 0) {
+			if (!refreshPackages) {
+				List<BundleDescription> resolving = new ArrayList<BundleDescription>();
+				for (Bundle bundle : bundles) {
+					BundleDescription description = ((AbstractBundle) bundle).getBundleDescription();
+					if (((bundle.getState() & Bundle.INSTALLED) != 0) && description != null)
+						resolving.add(description);
+				}
+				descriptions = resolving.toArray(new BundleDescription[resolving.size()]);
+			} else if (numBundles > 0) {
 				// populate the resolved hosts package sources first (do this outside sync block: bug 280929)
 				populateLoaders(framework.getAllBundles());
 				synchronized (framework.bundles) {
 					// now collect the descriptions to refresh
-					ArrayList results = new ArrayList(numBundles);
+					List<BundleDescription> results = new ArrayList<BundleDescription>(numBundles);
 					BundleDelta[] addDeltas = null;
 					for (int i = 0; i < numBundles; i++) {
-						BundleDescription description = bundles[i].getBundleDescription();
+						BundleDescription description = ((AbstractBundle) bundles[i]).getBundleDescription();
 						if (description != null && description.getBundleId() != 0 && !results.contains(description))
 							results.add(description);
 						// add in any bundles that have the same symbolic name see bug (169593)
@@ -232,13 +243,16 @@ public class PackageAdminImpl implements PackageAdmin {
 								}
 						}
 					}
-					descriptions = (BundleDescription[]) (results.size() == 0 ? null : results.toArray(new BundleDescription[results.size()]));
+					descriptions = (results.size() == 0 ? null : results.toArray(new BundleDescription[results.size()]));
 				}
 			}
-			BundleDelta[] delta = systemState.resolve(descriptions).getChanges();
+			StateDelta stateDelta = systemState.resolve(descriptions, refreshPackages);
+			BundleDelta[] delta = stateDelta.getChanges();
 			processDelta(delta, refreshPackages, systemState);
+			if (stateDelta.getResovlerHookException() != null)
+				throw stateDelta.getResovlerHookException();
 		} catch (Throwable t) {
-			if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+			if (Debug.DEBUG_PACKAGEADMIN) {
 				Debug.println("PackageAdminImpl.doResolveBundles: Error occured :"); //$NON-NLS-1$
 				Debug.printStackTrace(t);
 			}
@@ -252,7 +266,7 @@ public class PackageAdminImpl implements PackageAdmin {
 			if (framework.isActive()) {
 				framework.publishBundleEvent(Framework.BATCHEVENT_END, framework.systemBundle);
 				if (refreshPackages)
-					framework.publishFrameworkEvent(FrameworkEvent.PACKAGES_REFRESHED, framework.systemBundle, null);
+					framework.publishFrameworkEvent(FrameworkEvent.PACKAGES_REFRESHED, framework.systemBundle, null, listeners);
 			}
 		}
 	}
@@ -282,7 +296,7 @@ public class PackageAdminImpl implements PackageAdmin {
 	}
 
 	private void resumeBundles(AbstractBundle[] bundles, boolean refreshPackages, int[] previousStates) {
-		if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+		if (Debug.DEBUG_PACKAGEADMIN) {
 			Debug.println("PackageAdminImpl: restart the bundles"); //$NON-NLS-1$
 		}
 		if (bundles == null)
@@ -318,7 +332,7 @@ public class PackageAdminImpl implements PackageAdmin {
 				}
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+		if (Debug.DEBUG_PACKAGEADMIN) {
 			if (bundle.stateChanging == null) {
 				Debug.println("Bundle state change lock is clear! " + bundle); //$NON-NLS-1$
 				Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
@@ -331,28 +345,23 @@ public class PackageAdminImpl implements PackageAdmin {
 			BundleDescription bundle = bundleDelta.getBundle();
 			if (bundle.getDependents() != null && bundle.getDependents().length > 0) {
 				/* Reaching here is an internal error */
-				if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+				if (Debug.DEBUG_PACKAGEADMIN) {
 					Debug.println("Bundles still depend on removed bundle! " + bundle); //$NON-NLS-1$
 					Debug.printStackTrace(new Exception("Stack trace")); //$NON-NLS-1$
 				}
 				throw new BundleException(Msg.OSGI_INTERNAL_ERROR);
 			}
-			synchronized (removalPendings) {
-				// ensure that the bundle datas are closed, (fix for bug 259399)
-				List removals = (List) removalPendings.remove(new Long(bundle.getBundleId()));
-				if (removals != null)
-					for (Iterator iRemovals = removals.iterator(); iRemovals.hasNext();)
-						try {
-							((BundleData) iRemovals.next()).close();
-						} catch (IOException e) {
-							// ignore
-						}
-			}
-			BundleLoaderProxy proxy = (BundleLoaderProxy) bundle.getUserObject();
-			if (proxy != null) {
-				BundleLoader.closeBundleLoader(proxy);
+			Object userObject = bundle.getUserObject();
+			if (userObject instanceof BundleLoaderProxy) {
+				BundleLoader.closeBundleLoader((BundleLoaderProxy) userObject);
 				try {
-					proxy.getBundleHost().getBundleData().close();
+					((BundleLoaderProxy) userObject).getBundleData().close();
+				} catch (IOException e) {
+					// ignore
+				}
+			} else if (userObject instanceof BundleData) {
+				try {
+					((BundleData) userObject).close();
 				} catch (IOException e) {
 					// ignore
 				}
@@ -383,9 +392,9 @@ public class PackageAdminImpl implements PackageAdmin {
 	}
 
 	private void applyDeltas(BundleDelta[] bundleDeltas) throws BundleException {
-		Arrays.sort(bundleDeltas, new Comparator() {
-			public int compare(Object delta0, Object delta1) {
-				return (int) (((BundleDelta) delta0).getBundle().getBundleId() - ((BundleDelta) delta1).getBundle().getBundleId());
+		Arrays.sort(bundleDeltas, new Comparator<BundleDelta>() {
+			public int compare(BundleDelta delta0, BundleDelta delta1) {
+				return (int) (delta0.getBundle().getBundleId() - delta1.getBundle().getBundleId());
 			}
 		});
 		for (int i = 0; i < bundleDeltas.length; i++) {
@@ -409,7 +418,7 @@ public class PackageAdminImpl implements PackageAdmin {
 	}
 
 	private AbstractBundle[] processDelta(BundleDelta[] bundleDeltas, boolean refreshPackages, State systemState) {
-		ArrayList bundlesList = new ArrayList(bundleDeltas.length);
+		List<AbstractBundle> bundlesList = new ArrayList<AbstractBundle>(bundleDeltas.length);
 		// get all the bundles that are going to be refreshed
 		for (int i = 0; i < bundleDeltas.length; i++) {
 			if ((bundleDeltas[i].getType() & BundleDelta.REMOVAL_COMPLETE) != 0 && (bundleDeltas[i].getType() & BundleDelta.REMOVED) == 0)
@@ -419,7 +428,7 @@ public class PackageAdminImpl implements PackageAdmin {
 			if (changedBundle != null && !bundlesList.contains(changedBundle))
 				bundlesList.add(changedBundle);
 		}
-		AbstractBundle[] refresh = (AbstractBundle[]) bundlesList.toArray(new AbstractBundle[bundlesList.size()]);
+		AbstractBundle[] refresh = bundlesList.toArray(new AbstractBundle[bundlesList.size()]);
 		// first sort by id/start-level order
 		Util.sort(refresh, 0, refresh.length);
 		// then sort by dependency order
@@ -428,7 +437,7 @@ public class PackageAdminImpl implements PackageAdmin {
 		int[] previousStates = new int[refresh.length];
 		try {
 			try {
-				if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+				if (Debug.DEBUG_PACKAGEADMIN) {
 					Debug.println("refreshPackages: Suspend each bundle and acquire its state change lock"); //$NON-NLS-1$
 				}
 				// find which bundles were previously resolved and handle extension bundles
@@ -460,7 +469,7 @@ public class PackageAdminImpl implements PackageAdmin {
 				 * Refresh the bundles which will unexport the packages.
 				 * This will move RESOLVED bundles to the INSTALLED state.
 				 */
-				if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+				if (Debug.DEBUG_PACKAGEADMIN) {
 					Debug.println("refreshPackages: refresh the bundles"); //$NON-NLS-1$
 				}
 
@@ -479,7 +488,7 @@ public class PackageAdminImpl implements PackageAdmin {
 				/*
 				 * apply Deltas.
 				 */
-				if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+				if (Debug.DEBUG_PACKAGEADMIN) {
 					Debug.println("refreshPackages: applying deltas to bundles"); //$NON-NLS-1$
 				}
 				synchronized (framework.bundles) {
@@ -490,7 +499,7 @@ public class PackageAdminImpl implements PackageAdmin {
 				/*
 				 * Release the state change locks.
 				 */
-				if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+				if (Debug.DEBUG_PACKAGEADMIN) {
 					Debug.println("refreshPackages: release the state change locks"); //$NON-NLS-1$
 				}
 				if (refreshPackages)
@@ -503,12 +512,12 @@ public class PackageAdminImpl implements PackageAdmin {
 			 * Take this opportunity to clean up the adaptor storage.
 			 */
 			if (refreshPackages) {
-				if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN)
+				if (Debug.DEBUG_PACKAGEADMIN)
 					Debug.println("refreshPackages: clean up adaptor storage"); //$NON-NLS-1$
 				try {
 					framework.adaptor.compactStorage();
 				} catch (IOException e) {
-					if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+					if (Debug.DEBUG_PACKAGEADMIN) {
 						Debug.println("refreshPackages exception: " + e.getMessage()); //$NON-NLS-1$
 						Debug.printStackTrace(e);
 					}
@@ -516,7 +525,7 @@ public class PackageAdminImpl implements PackageAdmin {
 				}
 			}
 		} catch (BundleException e) {
-			if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN) {
+			if (Debug.DEBUG_PACKAGEADMIN) {
 				Debug.println("refreshPackages exception: " + e.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(e.getNestedException() == null ? e : e.getNestedException());
 			}
@@ -524,7 +533,7 @@ public class PackageAdminImpl implements PackageAdmin {
 		}
 
 		// send out any resolved.  This must be done after the state change locks have been release.
-		if (Debug.DEBUG && Debug.DEBUG_PACKAGEADMIN)
+		if (Debug.DEBUG_PACKAGEADMIN)
 			Debug.println("refreshPackages: send out RESOLVED events"); //$NON-NLS-1$
 		for (int i = 0; i < refresh.length; i++)
 			if (refresh[i].isResolved())
@@ -556,14 +565,14 @@ public class PackageAdminImpl implements PackageAdmin {
 		if (bundles == null || bundles.length == 0)
 			return null;
 
-		ArrayList result = new ArrayList(bundles.length);
+		List<RequiredBundle> result = new ArrayList<RequiredBundle>(bundles.length);
 		for (int i = 0; i < bundles.length; i++) {
 			if (bundles[i].isFragment() || !bundles[i].isResolved() || bundles[i].getSymbolicName() == null)
 				continue;
 			if (bundles[i].hasPermission(new BundlePermission(bundles[i].getSymbolicName(), BundlePermission.PROVIDE)))
 				result.add(((BundleHost) bundles[i]).getLoaderProxy());
 		}
-		return result.size() == 0 ? null : (RequiredBundle[]) result.toArray(new RequiredBundle[result.size()]);
+		return result.size() == 0 ? null : result.toArray(new RequiredBundle[result.size()]);
 	}
 
 	public Bundle[] getBundles(String symbolicName, String versionRange) {
@@ -582,7 +591,7 @@ public class PackageAdminImpl implements PackageAdmin {
 
 		// This code depends on the array of bundles being in descending
 		// version order.
-		ArrayList result = new ArrayList(bundles.length);
+		List<AbstractBundle> result = new ArrayList<AbstractBundle>(bundles.length);
 		VersionRange range = new VersionRange(versionRange);
 		for (int i = 0; i < bundles.length; i++) {
 			if (range.isIncluded(bundles[i].getVersion())) {
@@ -592,7 +601,7 @@ public class PackageAdminImpl implements PackageAdmin {
 
 		if (result.size() == 0)
 			return null;
-		return (AbstractBundle[]) result.toArray(new AbstractBundle[result.size()]);
+		return result.toArray(new AbstractBundle[result.size()]);
 	}
 
 	public Bundle[] getFragments(Bundle bundle) {
@@ -610,7 +619,7 @@ public class PackageAdminImpl implements PackageAdmin {
 		return result;
 	}
 
-	Bundle getBundlePriv(Class clazz) {
+	Bundle getBundlePriv(Class<?> clazz) {
 		ClassLoader cl = clazz.getClassLoader();
 		if (cl instanceof BundleClassLoader) {
 			ClassLoaderDelegate delegate = ((BundleClassLoader) cl).getDelegate();
@@ -622,10 +631,10 @@ public class PackageAdminImpl implements PackageAdmin {
 		return null;
 	}
 
-	public Bundle getBundle(final Class clazz) {
+	public Bundle getBundle(@SuppressWarnings("rawtypes") final Class clazz) {
 		if (System.getSecurityManager() == null)
 			return getBundlePriv(clazz);
-		return (Bundle) AccessController.doPrivileged(new GetBundleAction(this, clazz));
+		return AccessController.doPrivileged(new GetBundleAction(this, clazz));
 	}
 
 	public int getBundleType(Bundle bundle) {
@@ -634,18 +643,6 @@ public class PackageAdminImpl implements PackageAdmin {
 
 	protected void cleanup() {
 		//This is only called when the framework is shutting down
-		synchronized (removalPendings) {
-			for (Iterator pendings = removalPendings.values().iterator(); pendings.hasNext();) {
-				List removals = (List) pendings.next();
-				for (Iterator iRemovals = removals.iterator(); iRemovals.hasNext();)
-					try {
-						((BundleData) iRemovals.next()).close();
-					} catch (IOException e) {
-						// ignore
-					}
-			}
-			removalPendings.clear();
-		}
 	}
 
 	protected void setResolvedBundles(InternalSystemBundle systemBundle) {
@@ -714,15 +711,55 @@ public class PackageAdminImpl implements PackageAdmin {
 		FrameworkProperties.setProperty(Constants.OSGI_IMPL_VERSION_KEY, systemBundle.getVersion().toString());
 	}
 
-	void addRemovalPending(BundleData bundledata) {
-		synchronized (removalPendings) {
-			Long id = new Long(bundledata.getBundleID());
-			List removals = (List) removalPendings.get(id);
-			if (removals == null) {
-				removals = new ArrayList(1);
-				removalPendings.put(id, removals);
+	public Bundle getBundle() {
+		return framework.getBundle(0);
+	}
+
+	public void refreshBundles(Collection<Bundle> bundles, FrameworkListener... listeners) {
+		refreshPackages(bundles == null ? null : bundles.toArray(new Bundle[bundles.size()]), false, listeners);
+	}
+
+	public boolean resolveBundles(Collection<Bundle> bundles) {
+		return resolveBundles(bundles == null ? null : bundles.toArray(new Bundle[bundles.size()]));
+	}
+
+	public Collection<Bundle> getRemovalPendingBundles() {
+		// TODO need to consolidate our removal pending tracking.
+		// We currently have three places this is kept (PackageAdminImpl, StateImpl and ResolverImpl)
+		// Using the state's because it has easy access to the uninstalled Bundle objects
+		BundleDescription[] removals = framework.adaptor.getState().getRemovalPending();
+		Set<Bundle> result = new HashSet<Bundle>();
+		for (int i = 0; i < removals.length; i++) {
+			Object ref = removals[i].getUserObject();
+			if (ref instanceof BundleReference)
+				result.add(((BundleReference) ref).getBundle());
+		}
+		return result;
+	}
+
+	public Collection<Bundle> getDependencyClosure(Collection<Bundle> bundles) {
+		Collection<BundleDescription> descriptions = getDescriptionClosure(bundles);
+		Set<Bundle> result = new HashSet<Bundle>();
+		for (BundleDescription description : descriptions) {
+			Object userObject = description.getUserObject();
+			if (userObject instanceof BundleReference) {
+				Bundle bundle = ((BundleReference) userObject).getBundle();
+				if (bundle != null)
+					result.add(bundle);
 			}
-			removals.add(bundledata);
 		}
+		return result;
 	}
+
+	private Collection<BundleDescription> getDescriptionClosure(Collection<Bundle> bundles) {
+		State state = framework.adaptor.getState();
+		Collection<BundleDescription> descriptions = new ArrayList<BundleDescription>();
+		for (Bundle bundle : bundles) {
+			BundleDescription description = state.getBundle(bundle.getBundleId());
+			if (description != null)
+				descriptions.add(description);
+		}
+		return state.getDependencyClosure(descriptions);
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelEvent.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelEvent.java
index aab377f..10636bc 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
 package org.eclipse.osgi.framework.internal.core;
 
 import java.util.EventObject;
+import org.osgi.framework.FrameworkListener;
 
 /**
  * StartLevel Event for the OSGi framework.
@@ -27,7 +28,7 @@ class StartLevelEvent extends EventObject {
 	/**
 	 * Event Type
 	 */
-	private transient int type;
+	private final transient int type;
 
 	/**
 	 * StartLevel - value depends on event type: 
@@ -35,13 +36,18 @@ class StartLevelEvent extends EventObject {
 	 *  CHANGE_FW_SL - value is the new framework startlevel
 	 * 
 	 */
-	private transient int newSl;
+	private final transient int newSl;
 
 	/**
 	 * For a change in bundle startlevel, this is the bundle to be changed.
 	 * For a change in framework startlevel, this is the bundle requesting the change.
 	 */
-	private transient AbstractBundle bundle;
+	private final transient AbstractBundle bundle;
+
+	/**
+	 * A list of framework listeners that must be called at the end of the operation.
+	 */
+	private final transient FrameworkListener[] listeners;
 
 	/**
 	 * Creates a StartLevel event regarding the specified bundle.
@@ -50,11 +56,12 @@ class StartLevelEvent extends EventObject {
 	 * @param newSl the ultimate requested startlevel we are on our way to
 	 * @param bundle The affected bundle, or system bundle if it is for the framework
 	 */
-	public StartLevelEvent(int type, int newSl, AbstractBundle bundle) {
+	public StartLevelEvent(int type, int newSl, AbstractBundle bundle, FrameworkListener... listeners) {
 		super(bundle);
 		this.type = type;
 		this.newSl = newSl;
 		this.bundle = bundle;
+		this.listeners = listeners;
 	}
 
 	public int getType() {
@@ -69,4 +76,7 @@ class StartLevelEvent extends EventObject {
 		return this.bundle;
 	}
 
+	public FrameworkListener[] getListeners() {
+		return listeners;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelManager.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelManager.java
index 96e0c20..70ddca5 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/StartLevelManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,9 +32,9 @@ import org.osgi.service.startlevel.StartLevel;
  * If present, there will only be a single instance of this service
  * registered in the framework.
  */
-public class StartLevelManager implements EventDispatcher, EventListener, StartLevel {
+public class StartLevelManager implements EventDispatcher<Object, Object, StartLevelEvent>, StartLevel {
 	protected static EventManager eventManager;
-	protected static Map startLevelListeners;
+	protected static Map<Object, Object> startLevelListeners;
 
 	/** The initial bundle start level for newly installed bundles */
 	protected int initialBundleStartLevel = 1;
@@ -58,7 +58,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 		// create an event manager and a start level listener
 		// note that we do not pass the ContextFinder because it is set each time doSetStartLevel is called
 		eventManager = new EventManager("Start Level Event Dispatcher"); //$NON-NLS-1$
-		startLevelListeners = new CopyOnWriteIdentityMap();
+		startLevelListeners = new CopyOnWriteIdentityMap<Object, Object>();
 		startLevelListeners.put(this, this);
 	}
 
@@ -188,16 +188,16 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	 * <tt>AdminPermission</tt> and the Java runtime environment supports
 	 * permissions.
 	 */
-	public void setStartLevel(int newSL, org.osgi.framework.Bundle callerBundle) {
+	public void setStartLevel(int newSL, org.osgi.framework.Bundle callerBundle, FrameworkListener... listeners) {
 		if (newSL <= 0) {
 			throw new IllegalArgumentException(NLS.bind(Msg.STARTLEVEL_EXCEPTION_INVALID_REQUESTED_STARTLEVEL, "" + newSL)); //$NON-NLS-1$ 
 		}
 		framework.checkAdminPermission(framework.systemBundle, AdminPermission.STARTLEVEL);
 
-		if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+		if (Debug.DEBUG_STARTLEVEL) {
 			Debug.println("StartLevelImpl: setStartLevel: " + newSL + "; callerBundle = " + callerBundle.getBundleId()); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-		issueEvent(new StartLevelEvent(StartLevelEvent.CHANGE_FW_SL, newSL, (AbstractBundle) callerBundle));
+		issueEvent(new StartLevelEvent(StartLevelEvent.CHANGE_FW_SL, newSL, (AbstractBundle) callerBundle, listeners));
 
 	}
 
@@ -221,7 +221,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	 * @param newSL start level value                  
 	 * @param callerBundle - the bundle initiating the change in start level
 	 */
-	void doSetStartLevel(int newSL) {
+	void doSetStartLevel(int newSL, FrameworkListener... listeners) {
 		synchronized (lock) {
 			ClassLoader previousTCCL = Thread.currentThread().getContextClassLoader();
 			ClassLoader contextFinder = framework.getContextFinder();
@@ -234,7 +234,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 				if (newSL > tempSL) {
 					boolean launching = tempSL == 0;
 					for (int i = tempSL; i < newSL; i++) {
-						if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+						if (Debug.DEBUG_STARTLEVEL) {
 							Debug.println("sync - incrementing Startlevel from " + tempSL); //$NON-NLS-1$
 						}
 						tempSL++;
@@ -250,7 +250,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 				} else {
 					AbstractBundle[] sortedBundles = getInstalledBundles(framework.bundles, true);
 					for (int i = tempSL; i > newSL; i--) {
-						if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+						if (Debug.DEBUG_STARTLEVEL) {
 							Debug.println("sync - decrementing Startlevel from " + tempSL); //$NON-NLS-1$
 						}
 						tempSL--;
@@ -262,10 +262,16 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 						unloadAllBundles(framework.bundles);
 					}
 				}
-				framework.publishFrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, framework.systemBundle, null);
-				if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+				framework.publishFrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, framework.systemBundle, null, listeners);
+				if (Debug.DEBUG_STARTLEVEL) {
 					Debug.println("StartLevelImpl: doSetStartLevel: STARTLEVEL_CHANGED event published"); //$NON-NLS-1$
 				}
+			} catch (Error e) {
+				framework.publishFrameworkEvent(FrameworkEvent.ERROR, framework.systemBundle, e, listeners);
+				throw e;
+			} catch (RuntimeException e) {
+				framework.publishFrameworkEvent(FrameworkEvent.ERROR, framework.systemBundle, e, listeners);
+				throw e;
 			} finally {
 				if (contextFinder != null)
 					Thread.currentThread().setContextClassLoader(previousTCCL);
@@ -298,15 +304,11 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	 * @exception java.lang.IllegalArgumentException If the specified bundle has been uninstalled.
 	 */
 	public boolean isBundlePersistentlyStarted(org.osgi.framework.Bundle bundle) {
-		if (bundle.getState() == Bundle.UNINSTALLED)
-			throw new IllegalArgumentException(NLS.bind(Msg.BUNDLE_UNINSTALLED_EXCEPTION, ((AbstractBundle) bundle).getBundleData().getLocation()));
-		return (((AbstractBundle) bundle).getBundleData().getStatus() & Constants.BUNDLE_STARTED) != 0;
+		return ((AbstractBundle) bundle).isPersistentlyStarted();
 	}
 
 	public boolean isBundleActivationPolicyUsed(Bundle bundle) {
-		if (bundle.getState() == Bundle.UNINSTALLED)
-			throw new IllegalArgumentException(NLS.bind(Msg.BUNDLE_UNINSTALLED_EXCEPTION, ((AbstractBundle) bundle).getBundleData().getLocation()));
-		return (((AbstractBundle) bundle).getBundleData().getStatus() & Constants.BUNDLE_ACTIVATION_POLICY) != 0;
+		return ((AbstractBundle) bundle).isActivationPolicyUsed();
 	}
 
 	/**
@@ -317,10 +319,6 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	 * @exception java.lang.IllegalArgumentException If the specified bundle has been uninstalled.
 	 */
 	public int getBundleStartLevel(org.osgi.framework.Bundle bundle) {
-
-		if (bundle.getState() == Bundle.UNINSTALLED) {
-			throw new IllegalArgumentException(NLS.bind(Msg.BUNDLE_UNINSTALLED_EXCEPTION, ((AbstractBundle) bundle).getBundleData().getLocation()));
-		}
 		return ((AbstractBundle) bundle).getStartLevel();
 	}
 
@@ -368,11 +366,11 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 		framework.checkAdminPermission(bundle, AdminPermission.EXECUTE);
 		try {
 			// if the bundle's startlevel is not already at the requested startlevel
-			if (newSL != ((org.eclipse.osgi.framework.internal.core.AbstractBundle) bundle).getStartLevel()) {
+			if (newSL != ((org.eclipse.osgi.framework.internal.core.AbstractBundle) bundle).getInternalStartLevel()) {
 				final AbstractBundle b = (AbstractBundle) bundle;
 				b.getBundleData().setStartLevel(newSL);
 				try {
-					AccessController.doPrivileged(new PrivilegedExceptionAction() {
+					AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
 						public Object run() throws Exception {
 							b.getBundleData().save();
 							return null;
@@ -401,7 +399,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	private void issueEvent(StartLevelEvent sle) {
 
 		/* queue to hold set of listeners */
-		ListenerQueue queue = new ListenerQueue(eventManager);
+		ListenerQueue<Object, Object, StartLevelEvent> queue = new ListenerQueue<Object, Object, StartLevelEvent>(eventManager);
 
 		/* add set of StartLevelListeners to queue */
 		queue.queueListeners(startLevelListeners.entrySet(), this);
@@ -424,20 +422,20 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	 * dispatchEvent* method calls. It can provide information (such
 	 * as which listener method to call) so that this method
 	 * can complete the delivery of the event to the listener.
-	 * @param eventObject This object was passed to the ListenerQueue object via one of its
+	 * @param event This object was passed to the ListenerQueue object via one of its
 	 * dispatchEvent* method calls. This object was created by the event source and
 	 * is passed to this method. It should contain all the necessary information (such
 	 * as what event object to pass) so that this method
 	 * can complete the delivery of the event to the listener.
 	 */
-	public void dispatchEvent(Object listener, Object listenerObject, int eventAction, Object eventObject) {
+	public void dispatchEvent(Object listener, Object listenerObject, int eventAction, StartLevelEvent event) {
 		try {
 			switch (eventAction) {
 				case StartLevelEvent.CHANGE_BUNDLE_SL :
-					setBundleSL((StartLevelEvent) eventObject);
+					setBundleSL(event);
 					break;
 				case StartLevelEvent.CHANGE_FW_SL :
-					doSetStartLevel(((StartLevelEvent) eventObject).getNewSL());
+					doSetStartLevel(event.getNewSL(), event.getListeners());
 					break;
 			}
 		} catch (Throwable t) {
@@ -450,7 +448,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	 *  Increment the active startlevel by one
 	 */
 	protected void incFWSL(int incToSL, AbstractBundle[] launchBundles) {
-		if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+		if (Debug.DEBUG_STARTLEVEL) {
 			Debug.println("SLL: incFWSL: saving activeSL of " + incToSL); //$NON-NLS-1$
 		}
 		// save the startlevel
@@ -471,7 +469,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 		AbstractBundle[] installedBundles;
 
 		synchronized (bundles) {
-			List allBundles = bundles.getBundles();
+			List<AbstractBundle> allBundles = bundles.getBundles();
 			installedBundles = new AbstractBundle[allBundles.size()];
 			allBundles.toArray(installedBundles);
 
@@ -489,14 +487,14 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 		synchronized (framework.bundles) {
 			if (bundles.length <= 1)
 				return;
-			int currentSL = bundles[0].getStartLevel();
+			int currentSL = bundles[0].getInternalStartLevel();
 			int currentSLindex = 0;
 			boolean lazy = false;
 			for (int i = 0; i < bundles.length; i++) {
-				if (currentSL != bundles[i].getStartLevel()) {
+				if (currentSL != bundles[i].getInternalStartLevel()) {
 					if (lazy)
 						sortByDependencies(bundles, currentSLindex, i);
-					currentSL = bundles[i].getStartLevel();
+					currentSL = bundles[i].getInternalStartLevel();
 					currentSLindex = i;
 					lazy = false;
 				}
@@ -511,8 +509,8 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	private void sortByDependencies(AbstractBundle[] bundles, int start, int end) {
 		if (end - start <= 1)
 			return;
-		List descList = new ArrayList(end - start);
-		List missingDescs = new ArrayList(0);
+		List<BundleDescription> descList = new ArrayList<BundleDescription>(end - start);
+		List<AbstractBundle> missingDescs = new ArrayList<AbstractBundle>(0);
 		for (int i = start; i < end; i++) {
 			BundleDescription desc = bundles[i].getBundleDescription();
 			if (desc != null)
@@ -522,14 +520,14 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 		}
 		if (descList.size() <= 1)
 			return;
-		BundleDescription[] descriptions = (BundleDescription[]) descList.toArray(new BundleDescription[descList.size()]);
+		BundleDescription[] descriptions = descList.toArray(new BundleDescription[descList.size()]);
 		framework.adaptor.getPlatformAdmin().getStateHelper().sortBundles(descriptions);
 		for (int i = start; i < descriptions.length + start; i++)
 			bundles[i] = framework.bundles.getBundle(descriptions[i - start].getBundleId());
 		if (missingDescs.size() > 0) {
-			Iterator missing = missingDescs.iterator();
+			Iterator<AbstractBundle> missing = missingDescs.iterator();
 			for (int i = start + descriptions.length; i < end && missing.hasNext(); i++)
-				bundles[i] = (AbstractBundle) missing.next();
+				bundles[i] = missing.next();
 		}
 	}
 
@@ -548,12 +546,12 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 
 	private void resumeBundles(AbstractBundle[] launch, boolean lazyOnly, int currentSL) {
 		for (int i = 0; i < launch.length && !framework.isForcedRestart(); i++) {
-			int bsl = launch[i].getStartLevel();
+			int bsl = launch[i].getInternalStartLevel();
 			if (bsl < currentSL) {
 				// skip bundles who should have already been started
 				continue;
 			} else if (bsl == currentSL) {
-				if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+				if (Debug.DEBUG_STARTLEVEL) {
 					Debug.println("SLL: Active sl = " + currentSL + "; Bundle " + launch[i].getBundleId() + " sl = " + bsl); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 				boolean isLazyStart = launch[i].isLazyStart();
@@ -571,7 +569,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	 * @param decToSL -  the startlevel value to set the framework to
 	 */
 	protected void decFWSL(int decToSL, AbstractBundle[] shutdown) {
-		if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+		if (Debug.DEBUG_STARTLEVEL) {
 			Debug.println("SLL: decFWSL: saving activeSL of " + decToSL); //$NON-NLS-1$
 		}
 
@@ -583,7 +581,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 		// just decrementing the active startlevel - framework is not shutting down
 		// Do not check framework.isForcedRestart here because we want to stop the active bundles regardless.
 		for (int i = shutdown.length - 1; i >= 0; i--) {
-			int bsl = shutdown[i].getStartLevel();
+			int bsl = shutdown[i].getInternalStartLevel();
 			if (bsl > decToSL + 1)
 				// skip bundles who should have already been stopped
 				continue;
@@ -592,7 +590,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 				break;
 			else if (shutdown[i].isActive()) {
 				// if bundle is active or starting, then stop the bundle
-				if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL)
+				if (Debug.DEBUG_STARTLEVEL)
 					Debug.println("SLL: stopping bundle " + shutdown[i].getBundleId()); //$NON-NLS-1$
 				framework.suspendBundle(shutdown[i], false);
 			}
@@ -615,7 +613,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 				AbstractBundle bundle = shutdown[i];
 
 				if (framework.suspendBundle(bundle, false)) {
-					if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+					if (Debug.DEBUG_STARTLEVEL) {
 						Debug.println("SLL: stopped bundle " + bundle.getBundleId()); //$NON-NLS-1$
 					}
 					changed = true;
@@ -626,7 +624,7 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 		try {
 			framework.systemBundle.context.stop();
 		} catch (BundleException sbe) {
-			if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+			if (Debug.DEBUG_STARTLEVEL) {
 				Debug.println("SLL: Bundle suspend exception: " + sbe.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(sbe.getNestedException() == null ? sbe : sbe.getNestedException());
 			}
@@ -645,13 +643,13 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 	private void unloadAllBundles(BundleRepository bundles) {
 		synchronized (bundles) {
 			/* unload all installed bundles */
-			List allBundles = bundles.getBundles();
+			List<AbstractBundle> allBundles = bundles.getBundles();
 			int size = allBundles.size();
 
 			for (int i = 0; i < size; i++) {
-				AbstractBundle bundle = (AbstractBundle) allBundles.get(i);
+				AbstractBundle bundle = allBundles.get(i);
 
-				if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+				if (Debug.DEBUG_STARTLEVEL) {
 					Debug.println("SLL: Trying to unload bundle " + bundle); //$NON-NLS-1$
 				}
 				bundle.refresh();
@@ -676,26 +674,26 @@ public class StartLevelManager implements EventDispatcher, EventListener, StartL
 			int newSL = startLevelEvent.getNewSL();
 			AbstractBundle bundle = startLevelEvent.getBundle();
 
-			if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+			if (Debug.DEBUG_STARTLEVEL) {
 				Debug.print("SLL: bundle active=" + bundle.isActive()); //$NON-NLS-1$
 				Debug.print("; newSL = " + newSL); //$NON-NLS-1$
 				Debug.println("; activeSL = " + currentSL); //$NON-NLS-1$
 			}
 
 			if (bundle.isActive() && (newSL > currentSL)) {
-				if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+				if (Debug.DEBUG_STARTLEVEL) {
 					Debug.println("SLL: stopping bundle " + bundle.getBundleId()); //$NON-NLS-1$
 				}
 				framework.suspendBundle(bundle, false);
 			} else {
 				if (!bundle.isActive() && (newSL <= currentSL)) {
-					if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+					if (Debug.DEBUG_STARTLEVEL) {
 						Debug.println("SLL: starting bundle " + bundle.getBundleId()); //$NON-NLS-1$
 					}
 					framework.resumeBundle(bundle);
 				}
 			}
-			if (Debug.DEBUG && Debug.DEBUG_STARTLEVEL) {
+			if (Debug.DEBUG_STARTLEVEL) {
 				Debug.println("SLL: Bundle Startlevel set to " + newSL); //$NON-NLS-1$
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/SystemBundleActivator.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/SystemBundleActivator.java
index b8cbd46..f323320 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/SystemBundleActivator.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/SystemBundleActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,8 @@ package org.eclipse.osgi.framework.internal.core;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import org.eclipse.osgi.framework.debug.FrameworkDebugOptions;
+import org.eclipse.osgi.internal.resolver.StateImpl;
+import org.eclipse.osgi.service.resolver.State;
 import org.osgi.framework.*;
 import org.osgi.service.condpermadmin.ConditionalPermissionAdmin;
 
@@ -25,18 +27,15 @@ public class SystemBundleActivator implements BundleActivator {
 	private BundleContext context;
 	private InternalSystemBundle bundle;
 	private Framework framework;
-	private ServiceRegistration packageAdmin;
-	private ServiceRegistration securityAdmin;
-	private ServiceRegistration startLevel;
-	private ServiceRegistration debugOptions;
-	private ServiceRegistration contextFinder;
+	private ServiceRegistration<?> packageAdmin;
+	private ServiceRegistration<?> securityAdmin;
+	private ServiceRegistration<?> startLevel;
+	private ServiceRegistration<?> debugOptions;
+	private ServiceRegistration<?> contextFinder;
 
-	public SystemBundleActivator() {
-	}
-
-	public void start(BundleContext context) throws Exception {
-		this.context = context;
-		bundle = (InternalSystemBundle) context.getBundle();
+	public void start(BundleContext bc) throws Exception {
+		this.context = bc;
+		bundle = (InternalSystemBundle) bc.getBundle();
 		framework = bundle.framework;
 
 		if (framework.packageAdmin != null)
@@ -47,18 +46,21 @@ public class SystemBundleActivator implements BundleActivator {
 			startLevel = register(new String[] {Constants.OSGI_STARTLEVEL_NAME}, framework.startLevelManager, null);
 		FrameworkDebugOptions dbgOptions = null;
 		if ((dbgOptions = FrameworkDebugOptions.getDefault()) != null) {
-			dbgOptions.start(context);
+			dbgOptions.start(bc);
 			debugOptions = register(new String[] {org.eclipse.osgi.service.debug.DebugOptions.class.getName()}, dbgOptions, null);
 		}
 		ClassLoader tccl = framework.getContextFinder();
 		if (tccl != null) {
-			Hashtable props = new Hashtable(7);
+			Dictionary<String, Object> props = new Hashtable<String, Object>(7);
 			props.put("equinox.classloader.type", "contextClassLoader"); //$NON-NLS-1$ //$NON-NLS-2$
 			contextFinder = register(new String[] {ClassLoader.class.getName()}, tccl, props);
 		}
 
 		// Always call the adaptor.frameworkStart() at the end of this method.
-		framework.adaptor.frameworkStart(context);
+		framework.adaptor.frameworkStart(bc);
+		State state = framework.adaptor.getState();
+		if (state instanceof StateImpl)
+			((StateImpl) state).setResolverHookFactory(new CoreResolverHookFactory((BundleContextImpl) context, framework.getServiceRegistry()));
 		// attempt to resolve all bundles
 		// this is done after the adaptor.frameworkStart has been called
 		// this should be the first time the resolver State is accessed
@@ -67,9 +69,9 @@ public class SystemBundleActivator implements BundleActivator {
 		framework.systemBundle.manifestLocalization = null;
 	}
 
-	public void stop(BundleContext context) throws Exception {
+	public void stop(BundleContext bc) throws Exception {
 		// Always call the adaptor.frameworkStop() at the begining of this method.
-		framework.adaptor.frameworkStop(context);
+		framework.adaptor.frameworkStop(bc);
 
 		if (packageAdmin != null)
 			packageAdmin.unregister();
@@ -80,7 +82,7 @@ public class SystemBundleActivator implements BundleActivator {
 		if (debugOptions != null) {
 			FrameworkDebugOptions dbgOptions = FrameworkDebugOptions.getDefault();
 			if (dbgOptions != null)
-				dbgOptions.stop(context);
+				dbgOptions.stop(bc);
 			debugOptions.unregister();
 		}
 		if (contextFinder != null)
@@ -95,10 +97,10 @@ public class SystemBundleActivator implements BundleActivator {
 	 * Register a service object.
 	 *
 	 */
-	private ServiceRegistration register(String[] names, Object service, Hashtable properties) {
+	private ServiceRegistration<?> register(String[] names, Object service, Dictionary<String, Object> properties) {
 		if (properties == null)
-			properties = new Hashtable(7);
-		Dictionary headers = bundle.getHeaders();
+			properties = new Hashtable<String, Object>(7);
+		Dictionary<String, String> headers = bundle.getHeaders();
 		properties.put(Constants.SERVICE_VENDOR, headers.get(Constants.BUNDLE_VENDOR));
 		properties.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE));
 		properties.put(Constants.SERVICE_PID, bundle.getBundleId() + "." + service.getClass().getName()); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/UniversalUniqueIdentifier.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/UniversalUniqueIdentifier.java
new file mode 100755
index 0000000..7b42f7d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/UniversalUniqueIdentifier.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.framework.internal.core;
+
+import java.io.*;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.SecureRandom;
+import java.util.GregorianCalendar;
+import java.util.Random;
+
+public class UniversalUniqueIdentifier {
+
+	/* INSTANCE FIELDS =============================================== */
+
+	private byte[] fBits = new byte[BYTES_SIZE];
+
+	/* NON-FINAL PRIVATE STATIC FIELDS =============================== */
+
+	private volatile static BigInteger fgPreviousClockValue;
+	private volatile static int fgClockAdjustment = 0;
+	private volatile static int fgClockSequence = -1;
+	private final static byte[] nodeAddress;
+
+	static {
+		nodeAddress = computeNodeAddress();
+	}
+
+	/* PRIVATE STATIC FINAL FIELDS =================================== */
+
+	private final static Random fgRandomNumberGenerator = new Random();
+
+	/* PUBLIC STATIC FINAL FIELDS ==================================== */
+
+	public static final int BYTES_SIZE = 16;
+	public static final byte[] UNDEFINED_UUID_BYTES = new byte[16];
+	public static final int MAX_CLOCK_SEQUENCE = 0x4000;
+	public static final int MAX_CLOCK_ADJUSTMENT = 0x7FFF;
+	public static final int TIME_FIELD_START = 0;
+	public static final int TIME_FIELD_STOP = 6;
+	public static final int TIME_HIGH_AND_VERSION = 7;
+	public static final int CLOCK_SEQUENCE_HIGH_AND_RESERVED = 8;
+	public static final int CLOCK_SEQUENCE_LOW = 9;
+	public static final int NODE_ADDRESS_START = 10;
+	public static final int NODE_ADDRESS_BYTE_SIZE = 6;
+
+	public static final int BYTE_MASK = 0xFF;
+
+	public static final int HIGH_NIBBLE_MASK = 0xF0;
+
+	public static final int LOW_NIBBLE_MASK = 0x0F;
+
+	public static final int SHIFT_NIBBLE = 4;
+
+	public static final int ShiftByte = 8;
+
+	/**
+	 UniversalUniqueIdentifier default constructor returns a
+	 new instance that has been initialized to a unique value.
+	 */
+	public UniversalUniqueIdentifier() {
+		this.setVersion(1);
+		this.setVariant(1);
+		this.setTimeValues();
+		this.setNode(getNodeAddress());
+	}
+
+	private void appendByteString(StringBuffer buffer, byte value) {
+		String hexString;
+
+		if (value < 0)
+			hexString = Integer.toHexString(256 + value);
+		else
+			hexString = Integer.toHexString(value);
+		if (hexString.length() == 1)
+			buffer.append("0"); //$NON-NLS-1$
+		buffer.append(hexString);
+	}
+
+	private static BigInteger clockValueNow() {
+		GregorianCalendar now = new GregorianCalendar();
+		BigInteger nowMillis = BigInteger.valueOf(now.getTime().getTime());
+		BigInteger baseMillis = BigInteger.valueOf(now.getGregorianChange().getTime());
+
+		return (nowMillis.subtract(baseMillis).multiply(BigInteger.valueOf(10000L)));
+	}
+
+	/**
+	 * Answers the node address attempting to mask the IP
+	 * address of this machine.
+	 * 
+	 * @return byte[] the node address
+	 */
+	private static byte[] computeNodeAddress() {
+
+		byte[] address = new byte[NODE_ADDRESS_BYTE_SIZE];
+
+		// Seed the secure randomizer with some oft-varying inputs
+		int thread = Thread.currentThread().hashCode();
+		long time = System.currentTimeMillis();
+		int objectId = System.identityHashCode(new String());
+		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+		DataOutputStream out = new DataOutputStream(byteOut);
+		byte[] ipAddress = getIPAddress();
+
+		try {
+			if (ipAddress != null)
+				out.write(ipAddress);
+			out.write(thread);
+			out.writeLong(time);
+			out.write(objectId);
+			out.close();
+		} catch (IOException exc) {
+			//ignore the failure, we're just trying to come up with a random seed
+		}
+		byte[] rand = byteOut.toByteArray();
+
+		SecureRandom randomizer = new SecureRandom(rand);
+		randomizer.nextBytes(address);
+
+		// set the MSB of the first octet to 1 to distinguish from IEEE node addresses
+		address[0] = (byte) (address[0] | (byte) 0x80);
+
+		return address;
+	}
+
+	/**
+	 Answers the IP address of the local machine using the
+	 Java API class <code>InetAddress</code>.
+
+	 @return byte[] the network address in network order
+	 @see    java.net.InetAddress#getLocalHost()
+	 @see    java.net.InetAddress#getAddress()
+	 */
+	private static byte[] getIPAddress() {
+		try {
+			return InetAddress.getLocalHost().getAddress();
+		} catch (UnknownHostException e) {
+			//valid for this to be thrown be a machine with no IP connection
+			//It is VERY important NOT to throw this exception
+			return null;
+		}
+	}
+
+	private static byte[] getNodeAddress() {
+		return nodeAddress;
+	}
+
+	private static int nextClockSequence() {
+
+		if (fgClockSequence == -1)
+			fgClockSequence = (int) (fgRandomNumberGenerator.nextDouble() * MAX_CLOCK_SEQUENCE);
+
+		fgClockSequence = (fgClockSequence + 1) % MAX_CLOCK_SEQUENCE;
+
+		return fgClockSequence;
+	}
+
+	private static BigInteger nextTimestamp() {
+
+		BigInteger timestamp = clockValueNow();
+		int timestampComparison;
+
+		timestampComparison = timestamp.compareTo(fgPreviousClockValue);
+
+		if (timestampComparison == 0) {
+			if (fgClockAdjustment == MAX_CLOCK_ADJUSTMENT) {
+				while (timestamp.compareTo(fgPreviousClockValue) == 0)
+					timestamp = clockValueNow();
+				timestamp = nextTimestamp();
+			} else
+				fgClockAdjustment++;
+		} else {
+			fgClockAdjustment = 0;
+
+			if (timestampComparison < 0)
+				nextClockSequence();
+		}
+
+		return timestamp;
+	}
+
+	private void setClockSequence(int clockSeq) {
+		int clockSeqHigh = (clockSeq >>> ShiftByte) & LOW_NIBBLE_MASK;
+		int reserved = fBits[CLOCK_SEQUENCE_HIGH_AND_RESERVED] & HIGH_NIBBLE_MASK;
+
+		fBits[CLOCK_SEQUENCE_HIGH_AND_RESERVED] = (byte) (reserved | clockSeqHigh);
+		fBits[CLOCK_SEQUENCE_LOW] = (byte) (clockSeq & BYTE_MASK);
+	}
+
+	private void setNode(byte[] bytes) {
+
+		for (int index = 0; index < NODE_ADDRESS_BYTE_SIZE; index++)
+			fBits[index + NODE_ADDRESS_START] = bytes[index];
+	}
+
+	private void setTimestamp(BigInteger timestamp) {
+		BigInteger value = timestamp;
+		BigInteger bigByte = BigInteger.valueOf(256L);
+		BigInteger[] results;
+		int version;
+		int timeHigh;
+
+		for (int index = TIME_FIELD_START; index < TIME_FIELD_STOP; index++) {
+			results = value.divideAndRemainder(bigByte);
+			value = results[0];
+			fBits[index] = (byte) results[1].intValue();
+		}
+		version = fBits[TIME_HIGH_AND_VERSION] & HIGH_NIBBLE_MASK;
+		timeHigh = value.intValue() & LOW_NIBBLE_MASK;
+		fBits[TIME_HIGH_AND_VERSION] = (byte) (timeHigh | version);
+	}
+
+	private synchronized void setTimeValues() {
+		this.setTimestamp(timestamp());
+		this.setClockSequence(fgClockSequence);
+	}
+
+	private int setVariant(int variantIdentifier) {
+		int clockSeqHigh = fBits[CLOCK_SEQUENCE_HIGH_AND_RESERVED] & LOW_NIBBLE_MASK;
+		int variant = variantIdentifier & LOW_NIBBLE_MASK;
+
+		fBits[CLOCK_SEQUENCE_HIGH_AND_RESERVED] = (byte) ((variant << SHIFT_NIBBLE) | clockSeqHigh);
+		return (variant);
+	}
+
+	private void setVersion(int versionIdentifier) {
+		int timeHigh = fBits[TIME_HIGH_AND_VERSION] & LOW_NIBBLE_MASK;
+		int version = versionIdentifier & LOW_NIBBLE_MASK;
+
+		fBits[TIME_HIGH_AND_VERSION] = (byte) (timeHigh | (version << SHIFT_NIBBLE));
+	}
+
+	private static BigInteger timestamp() {
+		BigInteger timestamp;
+
+		if (fgPreviousClockValue == null) {
+			fgClockAdjustment = 0;
+			nextClockSequence();
+			timestamp = clockValueNow();
+		} else
+			timestamp = nextTimestamp();
+
+		fgPreviousClockValue = timestamp;
+		return fgClockAdjustment == 0 ? timestamp : timestamp.add(BigInteger.valueOf(fgClockAdjustment));
+	}
+
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		for (int i = 0; i < fBits.length; i++) {
+			if (i == 4 || i == 6 || i == 8 || i == 10)
+				buffer.append('-');
+			appendByteString(buffer, fBits[i]);
+		}
+		return buffer.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Util.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Util.java
index de5683c..63ccfd2 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Util.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Util.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,6 +92,7 @@ public class Util {
 	 * @exception	ArrayIndexOutOfBoundsException when <code>start < 0</code>
 	 *				or <code>end > array.size()</code>
 	 */
+	@SuppressWarnings("unchecked")
 	public static void sort(Object[] array, int start, int end) {
 		int middle = (start + end) / 2;
 		if (start + 1 < middle)
@@ -100,7 +101,7 @@ public class Util {
 			sort(array, middle, end);
 		if (start + 1 >= end)
 			return; // this case can only happen when this method is called by the user
-		if (((Comparable) array[middle - 1]).compareTo(array[middle]) <= 0)
+		if (((Comparable<Object>) array[middle - 1]).compareTo(array[middle]) <= 0)
 			return;
 		if (start + 2 == end) {
 			Object temp = array[start];
@@ -111,7 +112,7 @@ public class Util {
 		int i1 = start, i2 = middle, i3 = 0;
 		Object[] merge = new Object[end - start];
 		while (i1 < middle && i2 < end) {
-			merge[i3++] = ((Comparable) array[i1]).compareTo(array[i2]) <= 0 ? array[i1++] : array[i2++];
+			merge[i3++] = ((Comparable<Object>) array[i1]).compareTo(array[i2]) <= 0 ? array[i1++] : array[i2++];
 		}
 		if (i1 < middle)
 			System.arraycopy(array, i1, merge, i3, middle - i1);
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/osname.aliases b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/osname.aliases
index 8bb962c..82b3a88 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/osname.aliases
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/osname.aliases
@@ -1,5 +1,5 @@
 ########################################################################
-# Copyright (c) 2003, 2009 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials 
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -40,4 +40,6 @@ WindowsXP "Windows XP" WinXP Win32       # Microsoft
 Windows2003 "Windows 2003" "Windows Server 2003" Win2003 Win32 # Microsoft
 WindowsVista WinVista "Windows Vista" Win32 # Microsoft
 Windows2008 "Windows 2008" "Windows Server 2008" Win2008 Win32 # Microsoft
+WindowsServer2008 "Windows 2008" "Windows Server 2008" Win2008 Win32 # Microsoft
+WindowsServer2008R2 "Windows 2008 R2" "Windows Server 2008 R2" Win2008R2 Win32 # Microsoft
 Windows7 "Windows 7" Win7 Win32 # Microsoft
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerFactory.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerFactory.java
index 5e296dd..c84f76d 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerFactory.java
@@ -20,6 +20,7 @@ import org.eclipse.osgi.framework.internal.core.Msg;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.url.URLConstants;
 import org.osgi.util.tracker.ServiceTracker;
 
@@ -32,24 +33,24 @@ import org.osgi.util.tracker.ServiceTracker;
  */
 // TODO rename this class!!!  its really confusing to name the impl the same as the interface
 public class ContentHandlerFactory extends MultiplexingFactory implements java.net.ContentHandlerFactory {
-	private ServiceTracker contentHandlerTracker;
+	private ServiceTracker<ContentHandler, ContentHandler> contentHandlerTracker;
 
 	private static final String contentHandlerClazz = "java.net.ContentHandler"; //$NON-NLS-1$
 	private static final String CONTENT_HANDLER_PKGS = "java.content.handler.pkgs"; //$NON-NLS-1$
 	private static final String DEFAULT_VM_CONTENT_HANDLERS = "sun.net.www.content"; //$NON-NLS-1$
 
-	private static final List ignoredClasses = Arrays.asList(new Class[] {MultiplexingContentHandler.class, ContentHandlerFactory.class, URLConnection.class});
+	private static final List<Class<?>> ignoredClasses = Arrays.asList(new Class<?>[] {MultiplexingContentHandler.class, ContentHandlerFactory.class, URLConnection.class});
 
-	private Hashtable proxies;
+	private Map<String, ContentHandlerProxy> proxies;
 	private java.net.ContentHandlerFactory parentFactory;
 
 	public ContentHandlerFactory(BundleContext context, FrameworkAdaptor adaptor) {
 		super(context, adaptor);
 
-		proxies = new Hashtable(5);
+		proxies = new Hashtable<String, ContentHandlerProxy>(5);
 
 		//We need to track content handler registrations
-		contentHandlerTracker = new ServiceTracker(context, contentHandlerClazz, null);
+		contentHandlerTracker = new ServiceTracker<ContentHandler, ContentHandler>(context, contentHandlerClazz, null);
 		contentHandlerTracker.open();
 	}
 
@@ -62,7 +63,7 @@ public class ContentHandlerFactory extends MultiplexingFactory implements java.n
 		//this content type.  we can not overwrite built in ContentHandlers
 		String builtInHandlers = StreamHandlerFactory.secureAction.getProperty(CONTENT_HANDLER_PKGS);
 		builtInHandlers = builtInHandlers == null ? DEFAULT_VM_CONTENT_HANDLERS : DEFAULT_VM_CONTENT_HANDLERS + '|' + builtInHandlers;
-		Class clazz = null;
+		Class<?> clazz = null;
 		if (builtInHandlers != null) {
 			//replace '/' with a '.' and all characters not allowed in a java class name
 			//with a '_'.
@@ -96,11 +97,11 @@ public class ContentHandlerFactory extends MultiplexingFactory implements java.n
 
 	public ContentHandler createInternalContentHandler(String contentType) {
 		//first check to see if the handler is in the cache
-		ContentHandlerProxy proxy = (ContentHandlerProxy) proxies.get(contentType);
+		ContentHandlerProxy proxy = proxies.get(contentType);
 		if (proxy != null) {
 			return (proxy);
 		}
-		org.osgi.framework.ServiceReference[] serviceReferences = contentHandlerTracker.getServiceReferences();
+		ServiceReference<ContentHandler>[] serviceReferences = contentHandlerTracker.getServiceReferences();
 		if (serviceReferences != null) {
 			for (int i = 0; i < serviceReferences.length; i++) {
 				Object prop = serviceReferences[i].getProperty(URLConstants.URL_CONTENT_MIMETYPE);
@@ -146,7 +147,7 @@ public class ContentHandlerFactory extends MultiplexingFactory implements java.n
 			Method createInternalContentHandlerMethod = factory.getClass().getMethod("createInternalContentHandler", new Class[] {String.class}); //$NON-NLS-1$
 			return (ContentHandler) createInternalContentHandlerMethod.invoke(factory, new Object[] {contentType});
 		} catch (Exception e) {
-			adaptor.getFrameworkLog().log(new FrameworkLogEntry(ContentHandlerFactory.class.getName(), "findAuthorizedContentHandler-loop", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+			adaptor.getFrameworkLog().log(new FrameworkLogEntry(ContentHandlerFactory.class.getName(), FrameworkLogEntry.ERROR, 0, "findAuthorizedContentHandler-loop", 0, e, null)); //$NON-NLS-1$
 			throw new RuntimeException(e.getMessage(), e);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerProxy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerProxy.java
index 54021cc..b60b794 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerProxy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/ContentHandlerProxy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,20 +27,20 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
  * because the JVM caches ContentHandlers and therefore would not support a dynamic environment of
  * ContentHandlers being registered and unregistered.
  */
-public class ContentHandlerProxy extends ContentHandler implements ServiceTrackerCustomizer {
+public class ContentHandlerProxy extends ContentHandler implements ServiceTrackerCustomizer<ContentHandler, ServiceReference<ContentHandler>> {
 	protected ContentHandler realHandler;
 
 	//TODO avoid type-based names
-	protected ServiceTracker contentHandlerServiceTracker;
+	protected ServiceTracker<ContentHandler, ServiceReference<ContentHandler>> contentHandlerServiceTracker;
 
 	protected BundleContext context;
-	protected ServiceReference contentHandlerServiceReference;
+	protected ServiceReference<ContentHandler> contentHandlerServiceReference;
 
 	protected String contentType;
 
 	protected int ranking = Integer.MIN_VALUE;
 
-	public ContentHandlerProxy(String contentType, ServiceReference reference, BundleContext context) {
+	public ContentHandlerProxy(String contentType, ServiceReference<ContentHandler> reference, BundleContext context) {
 		this.context = context;
 		this.contentType = contentType;
 
@@ -48,11 +48,11 @@ public class ContentHandlerProxy extends ContentHandler implements ServiceTracke
 		// until a real ContentHandler for this mime-type is registered
 		setNewHandler(reference, getRank(reference));
 
-		contentHandlerServiceTracker = new ServiceTracker(context, ContentHandler.class.getName(), this);
+		contentHandlerServiceTracker = new ServiceTracker<ContentHandler, ServiceReference<ContentHandler>>(context, ContentHandler.class.getName(), this);
 		StreamHandlerFactory.secureAction.open(contentHandlerServiceTracker);
 	}
 
-	private void setNewHandler(ServiceReference reference, int rank) {
+	private void setNewHandler(ServiceReference<ContentHandler> reference, int rank) {
 		if (contentHandlerServiceReference != null)
 			context.ungetService(contentHandlerServiceReference);
 
@@ -62,13 +62,13 @@ public class ContentHandlerProxy extends ContentHandler implements ServiceTracke
 		if (reference == null)
 			realHandler = new DefaultContentHandler();
 		else
-			realHandler = (ContentHandler) StreamHandlerFactory.secureAction.getService(reference, context);
+			realHandler = StreamHandlerFactory.secureAction.getService(reference, context);
 	}
 
 	/**
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#addingService(ServiceReference)
 	 */
-	public Object addingService(ServiceReference reference) {
+	public ServiceReference<ContentHandler> addingService(ServiceReference<ContentHandler> reference) {
 		//check to see if our contentType is being registered by another service
 		Object prop = reference.getProperty(URLConstants.URL_CONTENT_MIMETYPE);
 		if (!(prop instanceof String[]))
@@ -92,14 +92,14 @@ public class ContentHandlerProxy extends ContentHandler implements ServiceTracke
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
 	 */
 
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<ContentHandler> reference, ServiceReference<ContentHandler> service) {
 		int newrank = getRank(reference);
 		if (reference == contentHandlerServiceReference) {
 			if (newrank < ranking) {
 				// The ContentHandler we are currently using has dropped it's ranking below a ContentHandler 
 				// registered for the same protocol.  We need to swap out ContentHandlers.
 				// this should get us the highest ranked service, if available
-				ServiceReference newReference = contentHandlerServiceTracker.getServiceReference();
+				ServiceReference<ContentHandler> newReference = contentHandlerServiceTracker.getServiceReference();
 				if (newReference != contentHandlerServiceReference && newReference != null) {
 					setNewHandler(newReference, ((Integer) newReference.getProperty(Constants.SERVICE_RANKING)).intValue());
 				}
@@ -114,13 +114,13 @@ public class ContentHandlerProxy extends ContentHandler implements ServiceTracke
 	/**
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#removedService(ServiceReference, Object)
 	 */
-	public void removedService(ServiceReference reference, Object service) {
+	public void removedService(ServiceReference<ContentHandler> reference, ServiceReference<ContentHandler> service) {
 		//check to see if our URLStreamHandler was unregistered.
 		if (reference != contentHandlerServiceReference)
 			return;
 		// If so, look for a lower ranking URLHandler
 		// this should get us the highest ranking service left, if available
-		ServiceReference newReference = contentHandlerServiceTracker.getServiceReference();
+		ServiceReference<ContentHandler> newReference = contentHandlerServiceTracker.getServiceReference();
 		// if newReference == null then we will use the DefaultContentHandler here
 		setNewHandler(newReference, getRank(newReference));
 	}
@@ -133,7 +133,7 @@ public class ContentHandlerProxy extends ContentHandler implements ServiceTracke
 		return realHandler.getContent(uConn);
 	}
 
-	private int getRank(ServiceReference reference) {
+	private int getRank(ServiceReference<?> reference) {
 		if (reference == null)
 			return Integer.MIN_VALUE;
 		Object property = reference.getProperty(Constants.SERVICE_RANKING);
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java
index 1761141..6482923 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingFactory.java
@@ -9,10 +9,12 @@
 package org.eclipse.osgi.framework.internal.protocol;
 
 import java.lang.reflect.Method;
-import java.util.*;
+import java.util.LinkedList;
+import java.util.List;
 import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.packageadmin.PackageAdmin;
 import org.osgi.util.tracker.ServiceTracker;
 
@@ -25,12 +27,12 @@ public abstract class MultiplexingFactory {
 	protected static final String PACKAGEADMINCLASS = "org.osgi.service.packageadmin.PackageAdmin"; //$NON-NLS-1$
 	protected BundleContext context;
 	protected FrameworkAdaptor adaptor;
-	private List factories; // list of multiplexed factories
-	private ServiceTracker packageAdminTracker;
+	private List<Object> factories; // list of multiplexed factories
+	private ServiceTracker<ServiceReference<?>, PackageAdmin> packageAdminTracker;
 
 	// used to get access to the protected SecurityManager#getClassContext method
 	static class InternalSecurityManager extends SecurityManager {
-		public Class[] getClassContext() {
+		public Class<?>[] getClassContext() {
 			return super.getClassContext();
 		}
 	}
@@ -40,7 +42,7 @@ public abstract class MultiplexingFactory {
 	MultiplexingFactory(BundleContext context, FrameworkAdaptor adaptor) {
 		this.context = context;
 		this.adaptor = adaptor;
-		packageAdminTracker = new ServiceTracker(context, PACKAGEADMINCLASS, null);
+		packageAdminTracker = new ServiceTracker<ServiceReference<?>, PackageAdmin>(context, PACKAGEADMINCLASS, null);
 		packageAdminTracker.open();
 	}
 
@@ -55,7 +57,7 @@ public abstract class MultiplexingFactory {
 	public void register(Object factory) {
 		// set parent for each factory so they can do proper delegation
 		try {
-			Class clazz = factory.getClass();
+			Class<?> clazz = factory.getClass();
 			Method setParentFactory = clazz.getMethod("setParentFactory", new Class[] {Object.class}); //$NON-NLS-1$
 			setParentFactory.invoke(factory, new Object[] {getParentFactory()});
 		} catch (Exception e) {
@@ -70,9 +72,9 @@ public abstract class MultiplexingFactory {
 		// close the service tracker
 		try {
 			// this is brittle; if class does not directly extend MultplexingFactory then this method will not exist, but we do not want a public method here
-			Method closeTracker = factory.getClass().getSuperclass().getDeclaredMethod("closePackageAdminTracker", null); //$NON-NLS-1$
+			Method closeTracker = factory.getClass().getSuperclass().getDeclaredMethod("closePackageAdminTracker", (Class[]) null); //$NON-NLS-1$
 			closeTracker.setAccessible(true); // its a private method
-			closeTracker.invoke(factory, null);
+			closeTracker.invoke(factory, (Object[]) null);
 		} catch (Exception e) {
 			adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingFactory.class.getName(), FrameworkLogEntry.ERROR, 0, "unregister", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
 			throw new RuntimeException(e.getMessage(), e);
@@ -80,7 +82,7 @@ public abstract class MultiplexingFactory {
 	}
 
 	public Object designateSuccessor() {
-		List released = releaseFactories();
+		List<Object> released = releaseFactories();
 		// Note that we do this outside of the sync block above.
 		// This is only possible because we do additional locking outside of
 		// this class to ensure no other threads are trying to manipulate the
@@ -93,10 +95,10 @@ public abstract class MultiplexingFactory {
 			return getParentFactory();
 		Object successor = released.remove(0);
 		try {
-			Class clazz = successor.getClass();
+			Class<?> clazz = successor.getClass();
 			Method register = clazz.getMethod("register", new Class[] {Object.class}); //$NON-NLS-1$		
-			for (Iterator it = released.iterator(); it.hasNext();) {
-				register.invoke(successor, new Object[] {it.next()});
+			for (Object r : released) {
+				register.invoke(successor, new Object[] {r});
 			}
 		} catch (Exception e) {
 			adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingFactory.class.getName(), FrameworkLogEntry.ERROR, 0, "designateSuccessor", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
@@ -110,19 +112,18 @@ public abstract class MultiplexingFactory {
 		packageAdminTracker.close();
 	}
 
-	public Object findAuthorizedFactory(List ignoredClasses) {
-		List current = getFactories();
-		Class[] classStack = internalSecurityManager.getClassContext();
+	public Object findAuthorizedFactory(List<Class<?>> ignoredClasses) {
+		List<Object> current = getFactories();
+		Class<?>[] classStack = internalSecurityManager.getClassContext();
 		for (int i = 0; i < classStack.length; i++) {
-			Class clazz = classStack[i];
+			Class<?> clazz = classStack[i];
 			if (clazz == InternalSecurityManager.class || clazz == MultiplexingFactory.class || ignoredClasses.contains(clazz))
 				continue;
 			if (hasAuthority(clazz))
 				return this;
 			if (current == null)
 				continue;
-			for (Iterator it = current.iterator(); it.hasNext();) {
-				Object factory = it.next();
+			for (Object factory : current) {
 				try {
 					Method hasAuthorityMethod = factory.getClass().getMethod("hasAuthority", new Class[] {Class.class}); //$NON-NLS-1$
 					if (((Boolean) hasAuthorityMethod.invoke(factory, new Object[] {clazz})).booleanValue()) {
@@ -137,35 +138,35 @@ public abstract class MultiplexingFactory {
 		return null;
 	}
 
-	public boolean hasAuthority(Class clazz) {
-		PackageAdmin packageAdminService = (PackageAdmin) packageAdminTracker.getService();
+	public boolean hasAuthority(Class<?> clazz) {
+		PackageAdmin packageAdminService = packageAdminTracker.getService();
 		if (packageAdminService != null) {
 			return packageAdminService.getBundle(clazz) != null;
 		}
 		return false;
 	}
 
-	private synchronized List getFactories() {
+	private synchronized List<Object> getFactories() {
 		return factories;
 	}
 
-	private synchronized List releaseFactories() {
+	private synchronized List<Object> releaseFactories() {
 		if (factories == null)
 			return null;
 
-		List released = new LinkedList(factories);
+		List<Object> released = new LinkedList<Object>(factories);
 		factories = null;
 		return released;
 	}
 
 	private synchronized void addFactory(Object factory) {
-		List updated = (factories == null) ? new LinkedList() : new LinkedList(factories);
+		List<Object> updated = (factories == null) ? new LinkedList<Object>() : new LinkedList<Object>(factories);
 		updated.add(factory);
 		factories = updated;
 	}
 
 	private synchronized void removeFactory(Object factory) {
-		List updated = new LinkedList(factories);
+		List<Object> updated = new LinkedList<Object>(factories);
 		updated.remove(factory);
 		factories = updated.isEmpty() ? null : updated;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingURLStreamHandler.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingURLStreamHandler.java
index b7dadfc..4bc71a8 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingURLStreamHandler.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/MultiplexingURLStreamHandler.java
@@ -41,7 +41,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			equalsMethod = URLStreamHandler.class.getDeclaredMethod("equals", new Class[] {URL.class, URL.class}); //$NON-NLS-1$
 			equalsMethod.setAccessible(true);
 
-			getDefaultPortMethod = URLStreamHandler.class.getDeclaredMethod("getDefaultPort", null); //$NON-NLS-1$
+			getDefaultPortMethod = URLStreamHandler.class.getDeclaredMethod("getDefaultPort", (Class[]) null); //$NON-NLS-1$
 			getDefaultPortMethod.setAccessible(true);
 
 			getHostAddressMethod = URLStreamHandler.class.getDeclaredMethod("getHostAddress", new Class[] {URL.class}); //$NON-NLS-1$
@@ -74,7 +74,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			}
 			handlerField.setAccessible(true);
 		} catch (Exception e) {
-			factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "initializeMethods", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+			factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "initializeMethods", 0, e, null)); //$NON-NLS-1$
 			throw new RuntimeException(e.getMessage(), e);
 		}
 		methodsInitialized = true;
@@ -96,7 +96,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 					throw (IOException) e.getTargetException();
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "openConnection", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "openConnection", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -111,7 +111,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "equals", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "equals", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -122,11 +122,11 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 		URLStreamHandler handler = factory.findAuthorizedURLStreamHandler(protocol);
 		if (handler != null) {
 			try {
-				return ((Integer) getDefaultPortMethod.invoke(handler, null)).intValue();
+				return ((Integer) getDefaultPortMethod.invoke(handler, (Object[]) null)).intValue();
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "getDefaultPort", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "getDefaultPort", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -141,7 +141,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "hashCode", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "hashCode", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -156,7 +156,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "hashCode", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "hashCode", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -171,7 +171,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "hostsEqual", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "hostsEqual", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -189,7 +189,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "parseURL", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "parseURL", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -204,7 +204,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "sameFile", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "sameFile", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -222,7 +222,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "setURL", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "setURL", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
@@ -237,7 +237,7 @@ public class MultiplexingURLStreamHandler extends URLStreamHandler {
 			} catch (InvocationTargetException e) {
 				throw (RuntimeException) e.getTargetException();
 			} catch (Exception e) {
-				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), "toExternalForm", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+				factory.adaptor.getFrameworkLog().log(new FrameworkLogEntry(MultiplexingURLStreamHandler.class.getName(), FrameworkLogEntry.ERROR, 0, "toExternalForm", 0, e, null)); //$NON-NLS-1$
 				throw new RuntimeException(e.getMessage(), e);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/StreamHandlerFactory.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/StreamHandlerFactory.java
index 10c5d03..3e38687 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/StreamHandlerFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/StreamHandlerFactory.java
@@ -22,25 +22,27 @@ import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.framework.util.SecureAction;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.url.URLConstants;
+import org.osgi.service.url.URLStreamHandlerService;
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * This class contains the URL stream handler factory for the OSGi framework.
  */
 public class StreamHandlerFactory extends MultiplexingFactory implements URLStreamHandlerFactory {
-	static final SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	static final SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 
-	private ServiceTracker handlerTracker;
+	private ServiceTracker<URLStreamHandlerService, URLStreamHandlerService> handlerTracker;
 
 	protected static final String URLSTREAMHANDLERCLASS = "org.osgi.service.url.URLStreamHandlerService"; //$NON-NLS-1$
 	protected static final String PROTOCOL_HANDLER_PKGS = "java.protocol.handler.pkgs"; //$NON-NLS-1$
 	protected static final String INTERNAL_PROTOCOL_HANDLER_PKG = "org.eclipse.osgi.framework.internal.protocol"; //$NON-NLS-1$
 
-	private static final List ignoredClasses = Arrays.asList(new Class[] {MultiplexingURLStreamHandler.class, StreamHandlerFactory.class, URL.class});
+	private static final List<Class<?>> ignoredClasses = Arrays.asList(new Class<?>[] {MultiplexingURLStreamHandler.class, StreamHandlerFactory.class, URL.class});
 	private static final boolean useNetProxy;
 	static {
-		Class clazz = null;
+		Class<?> clazz = null;
 		try {
 			clazz = Class.forName("java.net.Proxy"); //$NON-NLS-1$
 		} catch (ClassNotFoundException e) {
@@ -48,9 +50,9 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 		}
 		useNetProxy = clazz != null;
 	}
-	private Hashtable proxies;
+	private Map<String, URLStreamHandler> proxies;
 	private URLStreamHandlerFactory parentFactory;
-	private ThreadLocal creatingProtocols = new ThreadLocal();
+	private ThreadLocal<List<String>> creatingProtocols = new ThreadLocal<List<String>>();
 
 	/**
 	 * Create the factory.
@@ -60,15 +62,15 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 	public StreamHandlerFactory(BundleContext context, FrameworkAdaptor adaptor) {
 		super(context, adaptor);
 
-		proxies = new Hashtable(15);
-		handlerTracker = new ServiceTracker(context, URLSTREAMHANDLERCLASS, null);
+		proxies = new Hashtable<String, URLStreamHandler>(15);
+		handlerTracker = new ServiceTracker<URLStreamHandlerService, URLStreamHandlerService>(context, URLSTREAMHANDLERCLASS, null);
 		handlerTracker.open();
 	}
 
-	private Class getBuiltIn(String protocol, String builtInHandlers, boolean fromFramework) {
+	private Class<?> getBuiltIn(String protocol, String builtInHandlers, boolean fromFramework) {
 		if (builtInHandlers == null)
 			return null;
-		Class clazz;
+		Class<?> clazz;
 		StringTokenizer tok = new StringTokenizer(builtInHandlers, "|"); //$NON-NLS-1$
 		while (tok.hasMoreElements()) {
 			StringBuffer name = new StringBuffer();
@@ -104,7 +106,7 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 		try {
 			//first check for built in handlers
 			String builtInHandlers = secureAction.getProperty(PROTOCOL_HANDLER_PKGS);
-			Class clazz = getBuiltIn(protocol, builtInHandlers, false);
+			Class<?> clazz = getBuiltIn(protocol, builtInHandlers, false);
 			if (clazz != null)
 				return null; // let the VM handle it
 			URLStreamHandler result = null;
@@ -118,15 +120,18 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 			if (result == null && parentFactory != null)
 				result = parentFactory.createURLStreamHandler(protocol);
 			return result; //result may be null; let the VM handle it (consider sun.net.protocol.www.*)
+		} catch (Throwable t) {
+			adaptor.getFrameworkLog().log(new FrameworkLogEntry(StreamHandlerFactory.class.getName(), FrameworkLogEntry.ERROR, 0, "Unexpected error in factory.", 0, t, null)); //$NON-NLS-1$
+			return null;
 		} finally {
 			releaseRecursive(protocol);
 		}
 	}
 
 	private boolean isRecursive(String protocol) {
-		List protocols = (List) creatingProtocols.get();
+		List<String> protocols = creatingProtocols.get();
 		if (protocols == null) {
-			protocols = new ArrayList(1);
+			protocols = new ArrayList<String>(1);
 			creatingProtocols.set(protocols);
 		}
 		if (protocols.contains(protocol))
@@ -136,7 +141,7 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 	}
 
 	private void releaseRecursive(String protocol) {
-		List protocols = (List) creatingProtocols.get();
+		List<String> protocols = creatingProtocols.get();
 		protocols.remove(protocol);
 	}
 
@@ -144,7 +149,7 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 		//internal protocol handlers
 		String internalHandlerPkgs = secureAction.getProperty(Constants.INTERNAL_HANDLER_PKGS);
 		internalHandlerPkgs = internalHandlerPkgs == null ? INTERNAL_PROTOCOL_HANDLER_PKG : internalHandlerPkgs + '|' + INTERNAL_PROTOCOL_HANDLER_PKG;
-		Class clazz = getBuiltIn(protocol, internalHandlerPkgs, true);
+		Class<?> clazz = getBuiltIn(protocol, internalHandlerPkgs, true);
 
 		if (clazz == null) {
 			//Now we check the service registry
@@ -153,7 +158,7 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 			if (handler != null)
 				return (handler);
 			//look through the service registry for a URLStramHandler registered for this protocol
-			org.osgi.framework.ServiceReference[] serviceReferences = handlerTracker.getServiceReferences();
+			ServiceReference<URLStreamHandlerService>[] serviceReferences = handlerTracker.getServiceReferences();
 			if (serviceReferences == null)
 				return null;
 			for (int i = 0; i < serviceReferences.length; i++) {
@@ -202,7 +207,7 @@ public class StreamHandlerFactory extends MultiplexingFactory implements URLStre
 			Method createInternalURLStreamHandlerMethod = factory.getClass().getMethod("createInternalURLStreamHandler", new Class[] {String.class}); //$NON-NLS-1$
 			return (URLStreamHandler) createInternalURLStreamHandlerMethod.invoke(factory, new Object[] {protocol});
 		} catch (Exception e) {
-			adaptor.getFrameworkLog().log(new FrameworkLogEntry(StreamHandlerFactory.class.getName(), "findAuthorizedURLStreamHandler-loop", FrameworkLogEntry.ERROR, e, null)); //$NON-NLS-1$
+			adaptor.getFrameworkLog().log(new FrameworkLogEntry(StreamHandlerFactory.class.getName(), FrameworkLogEntry.ERROR, 0, "findAuthorizedURLStreamHandler-loop", 0, e, null)); //$NON-NLS-1$
 			throw new RuntimeException(e.getMessage(), e);
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerFactoryProxyFor15.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerFactoryProxyFor15.java
index 48b9f73..ddfaf80 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerFactoryProxyFor15.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerFactoryProxyFor15.java
@@ -17,10 +17,11 @@ import java.lang.reflect.Method;
 import java.net.*;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
+import org.osgi.service.url.URLStreamHandlerService;
 
 public class URLStreamHandlerFactoryProxyFor15 extends URLStreamHandlerProxy {
 
-	public URLStreamHandlerFactoryProxyFor15(String protocol, ServiceReference reference, BundleContext context) {
+	public URLStreamHandlerFactoryProxyFor15(String protocol, ServiceReference<URLStreamHandlerService> reference, BundleContext context) {
 		super(protocol, reference, context);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerProxy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerProxy.java
index ec441d6..cb0dc57 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerProxy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/protocol/URLStreamHandlerProxy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,22 +29,22 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
  * and unregistered.
  */
 
-public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTrackerCustomizer {
+public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTrackerCustomizer<URLStreamHandlerService, ServiceReference<URLStreamHandlerService>> {
 	// TODO lots of type-based names 
 	protected URLStreamHandlerService realHandlerService;
 
 	protected URLStreamHandlerSetter urlSetter;
 
-	protected ServiceTracker urlStreamHandlerServiceTracker;
+	protected ServiceTracker<URLStreamHandlerService, ServiceReference<URLStreamHandlerService>> urlStreamHandlerServiceTracker;
 
 	protected BundleContext context;
-	protected ServiceReference urlStreamServiceReference;
+	protected ServiceReference<URLStreamHandlerService> urlStreamServiceReference;
 
 	protected String protocol;
 
 	protected int ranking = Integer.MIN_VALUE;
 
-	public URLStreamHandlerProxy(String protocol, ServiceReference reference, BundleContext context) {
+	public URLStreamHandlerProxy(String protocol, ServiceReference<URLStreamHandlerService> reference, BundleContext context) {
 		this.context = context;
 		this.protocol = protocol;
 
@@ -53,11 +53,11 @@ public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTr
 		//set the handler and ranking
 		setNewHandler(reference, getRank(reference));
 
-		urlStreamHandlerServiceTracker = new ServiceTracker(context, StreamHandlerFactory.URLSTREAMHANDLERCLASS, this);
+		urlStreamHandlerServiceTracker = new ServiceTracker<URLStreamHandlerService, ServiceReference<URLStreamHandlerService>>(context, StreamHandlerFactory.URLSTREAMHANDLERCLASS, this);
 		StreamHandlerFactory.secureAction.open(urlStreamHandlerServiceTracker);
 	}
 
-	private void setNewHandler(ServiceReference reference, int rank) {
+	private void setNewHandler(ServiceReference<URLStreamHandlerService> reference, int rank) {
 		if (urlStreamServiceReference != null)
 			context.ungetService(urlStreamServiceReference);
 
@@ -67,7 +67,7 @@ public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTr
 		if (reference == null)
 			realHandlerService = new NullURLStreamHandlerService();
 		else
-			realHandlerService = (URLStreamHandlerService) StreamHandlerFactory.secureAction.getService(reference, context);
+			realHandlerService = StreamHandlerFactory.secureAction.getService(reference, context);
 	}
 
 	/**
@@ -140,6 +140,7 @@ public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTr
 		super.setURL(u, protocol, host, port, authority, userInfo, file, query, ref);
 	}
 
+	@SuppressWarnings("deprecation")
 	public void setURL(URL url, String protocol, String host, int port, String file, String ref) {
 
 		//using non-deprecated URLStreamHandler.setURL method. 
@@ -150,7 +151,7 @@ public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTr
 	/**
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#addingService(ServiceReference)
 	 */
-	public Object addingService(ServiceReference reference) {
+	public ServiceReference<URLStreamHandlerService> addingService(ServiceReference<URLStreamHandlerService> reference) {
 		//check to see if our protocol is being registered by another service
 		Object prop = reference.getProperty(URLConstants.URL_HANDLER_PROTOCOL);
 		if (!(prop instanceof String[]))
@@ -162,26 +163,26 @@ public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTr
 				int newServiceRanking = getRank(reference);
 				if (newServiceRanking > ranking || urlStreamServiceReference == null)
 					setNewHandler(reference, newServiceRanking);
-				return (reference);
+				return reference;
 			}
 		}
 
 		//we don't want to continue hearing events about a URLStreamHandlerService not registered under our protocol
-		return (null);
+		return null;
 	}
 
 	/**
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
 	 */
 	// check to see if the ranking has changed.  If so, re-select a new URLHandler
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<URLStreamHandlerService> reference, ServiceReference<URLStreamHandlerService> service) {
 		int newRank = getRank(reference);
 		if (reference == urlStreamServiceReference) {
 			if (newRank < ranking) {
 				// The URLHandler we are currently using has dropped it's ranking below a URLHandler registered 
 				// for the same protocol. We need to swap out URLHandlers.
 				// this should get us the highest ranked service, if available
-				ServiceReference newReference = urlStreamHandlerServiceTracker.getServiceReference();
+				ServiceReference<URLStreamHandlerService> newReference = urlStreamHandlerServiceTracker.getServiceReference();
 				if (newReference != urlStreamServiceReference && newReference != null) {
 					setNewHandler(newReference, ((Integer) newReference.getProperty(Constants.SERVICE_RANKING)).intValue());
 				}
@@ -196,18 +197,18 @@ public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTr
 	/**
 	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#removedService(ServiceReference, Object)
 	 */
-	public void removedService(ServiceReference reference, Object service) {
+	public void removedService(ServiceReference<URLStreamHandlerService> reference, ServiceReference<URLStreamHandlerService> service) {
 		// check to see if our URLStreamHandler was unregistered.
 		if (reference != urlStreamServiceReference)
 			return;
 		// If so, look for a lower ranking URLHandler
 		// this should get us the highest ranking service left, if available
-		ServiceReference newReference = urlStreamHandlerServiceTracker.getServiceReference();
+		ServiceReference<URLStreamHandlerService> newReference = urlStreamHandlerServiceTracker.getServiceReference();
 		// if newReference == null then we will use the NullURLStreamHandlerService here
 		setNewHandler(newReference, getRank(newReference));
 	}
 
-	private int getRank(ServiceReference reference) {
+	private int getRank(ServiceReference<?> reference) {
 		if (reference == null)
 			return Integer.MIN_VALUE;
 		Object property = reference.getProperty(Constants.SERVICE_RANKING);
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java
index bdc8720..fb84e7b 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,11 +21,14 @@ import org.eclipse.osgi.framework.adaptor.*;
 import org.eclipse.osgi.framework.debug.Debug;
 import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
+import org.eclipse.osgi.framework.util.KeyedElement;
 import org.eclipse.osgi.framework.util.KeyedHashSet;
 import org.eclipse.osgi.internal.loader.buddy.PolicyHandler;
+import org.eclipse.osgi.internal.resolver.StateBuilder;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.ManifestElement;
 import org.osgi.framework.*;
+import org.osgi.framework.wiring.BundleWiring;
 
 /**
  * This object is responsible for all classloader delegation for a bundle.
@@ -43,8 +46,8 @@ public class BundleLoader implements ClassLoaderDelegate {
 	public final static byte FLAG_CLOSED = 0x08;
 	public final static byte FLAG_LAZYTRIGGER = 0x10;
 
-	public final static ClassContext CLASS_CONTEXT = (ClassContext) AccessController.doPrivileged(new PrivilegedAction() {
-		public Object run() {
+	public final static ClassContext CLASS_CONTEXT = AccessController.doPrivileged(new PrivilegedAction<ClassContext>() {
+		public ClassContext run() {
 			return new ClassContext();
 		}
 	});
@@ -60,7 +63,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 	private static final int POST_LIBRARY = 8;
 
 	private static final boolean USE_GLOBAL_DEADLOCK_AVOIDANCE_LOCK = "true".equals(BundleLoaderProxy.secureAction.getProperty("osgi.classloader.singleThreadLoads")); //$NON-NLS-1$//$NON-NLS-2$
-	private static final List waitingList = USE_GLOBAL_DEADLOCK_AVOIDANCE_LOCK ? new ArrayList(0) : null;
+	private static final List<Object[]> waitingList = USE_GLOBAL_DEADLOCK_AVOIDANCE_LOCK ? new ArrayList<Object[]>(0) : null;
 	private static Object lockThread;
 	private static int lockCount = 0;
 
@@ -70,8 +73,8 @@ public class BundleLoader implements ClassLoaderDelegate {
 	final BundleHost bundle;
 	final private PolicyHandler policy;
 	/* List of package names that are exported by this BundleLoader */
-	final private Collection exportedPackages;
-	final private Collection substitutedPackages;
+	final private Collection<String> exportedPackages;
+	final private Collection<String> substitutedPackages;
 	/* List of required bundle BundleLoaderProxy objects */
 	final BundleLoaderProxy[] requiredBundles;
 	/* List of indexes into the requiredBundles list of reexported bundles */
@@ -149,7 +152,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 		BundleDescription[] required = description.getResolvedRequires();
 		if (required.length > 0) {
 			// get a list of re-exported symbolic names
-			HashSet reExportSet = new HashSet(required.length);
+			Set<String> reExportSet = new HashSet<String>(required.length);
 			BundleSpecification[] requiredSpecs = description.getRequiredBundles();
 			if (requiredSpecs != null && requiredSpecs.length > 0)
 				for (int i = 0; i < requiredSpecs.length; i++)
@@ -180,15 +183,15 @@ public class BundleLoader implements ClassLoaderDelegate {
 		// init the provided packages set
 		ExportPackageDescription[] exports = description.getSelectedExports();
 		if (exports != null && exports.length > 0) {
-			exportedPackages = Collections.synchronizedCollection(exports.length > 10 ? (Collection) new HashSet(exports.length) : new ArrayList(exports.length));
+			exportedPackages = Collections.synchronizedCollection(exports.length > 10 ? new HashSet<String>(exports.length) : new ArrayList<String>(exports.length));
 			initializeExports(exports, exportedPackages);
 		} else {
-			exportedPackages = Collections.synchronizedCollection(new ArrayList(0));
+			exportedPackages = Collections.synchronizedCollection(new ArrayList<String>(0));
 		}
 
 		ExportPackageDescription substituted[] = description.getSubstitutedExports();
 		if (substituted.length > 0) {
-			substitutedPackages = substituted.length > 10 ? (Collection) new HashSet(substituted.length) : new ArrayList(substituted.length);
+			substitutedPackages = substituted.length > 10 ? new HashSet<String>(substituted.length) : new ArrayList<String>(substituted.length);
 			for (int i = 0; i < substituted.length; i++)
 				substitutedPackages.add(substituted[i].getName());
 		} else {
@@ -211,7 +214,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 		//Initialize the policy handler
 		String buddyList = null;
 		try {
-			buddyList = (String) bundle.getBundleData().getManifest().get(Constants.BUDDY_LOADER);
+			buddyList = bundle.getBundleData().getManifest().get(Constants.BUDDY_LOADER);
 		} catch (BundleException e) {
 			// do nothing; buddyList == null
 		}
@@ -220,7 +223,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 			policy.open(bundle.getFramework().getSystemBundleContext());
 	}
 
-	private void initializeExports(ExportPackageDescription[] exports, Collection exportNames) {
+	private void initializeExports(ExportPackageDescription[] exports, Collection<String> exportNames) {
 		for (int i = 0; i < exports.length; i++) {
 			if (proxy.forceSourceCreation(exports[i])) {
 				if (!exportNames.contains(exports[i].getName())) {
@@ -280,30 +283,34 @@ public class BundleLoader implements ClassLoaderDelegate {
 	private static PackageSource createMultiSource(String packageName, PackageSource[] sources) {
 		if (sources.length == 1)
 			return sources[0];
-		ArrayList sourceList = new ArrayList(sources.length);
+		List<SingleSourcePackage> sourceList = new ArrayList<SingleSourcePackage>(sources.length);
 		for (int i = 0; i < sources.length; i++) {
 			SingleSourcePackage[] innerSources = sources[i].getSuppliers();
 			for (int j = 0; j < innerSources.length; j++)
 				if (!sourceList.contains(innerSources[j]))
 					sourceList.add(innerSources[j]);
 		}
-		return new MultiSourcePackage(packageName, (SingleSourcePackage[]) sourceList.toArray(new SingleSourcePackage[sourceList.size()]));
+		return new MultiSourcePackage(packageName, sourceList.toArray(new SingleSourcePackage[sourceList.size()]));
 	}
 
 	/*
 	 * get the loader proxy for a bundle description
 	 */
 	public final BundleLoaderProxy getLoaderProxy(BundleDescription source) {
-		BundleLoaderProxy sourceProxy = (BundleLoaderProxy) source.getUserObject();
-		if (sourceProxy == null) {
+		Object userObject = source.getUserObject();
+		if (!(userObject instanceof BundleLoaderProxy)) {
 			// may need to force the proxy to be created
 			long exportingID = source.getBundleId();
 			BundleHost exportingBundle = (BundleHost) bundle.getFramework().getBundle(exportingID);
 			if (exportingBundle == null)
 				return null;
-			sourceProxy = exportingBundle.getLoaderProxy();
+			userObject = exportingBundle.getLoaderProxy();
 		}
-		return sourceProxy;
+		return (BundleLoaderProxy) userObject;
+	}
+
+	public BundleLoaderProxy getLoaderProxy() {
+		return proxy;
 	}
 
 	/*
@@ -329,7 +336,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 	 * @return     the resulting Class
 	 * @exception  java.lang.ClassNotFoundException  if the class definition was not found.
 	 */
-	final public Class loadClass(String name) throws ClassNotFoundException {
+	final public Class<?> loadClass(String name) throws ClassNotFoundException {
 		BundleClassLoader bcl = createClassLoader();
 		// The instanceof check here is just to be safe.  The javadoc contract stated in BundleClassLoader
 		// mandate that BundleClassLoaders be an instance of ClassLoader.
@@ -386,12 +393,12 @@ public class BundleLoader implements ClassLoaderDelegate {
 	 * @return The loaded Class or null if the class is not found.
 	 * @throws ClassNotFoundException 
 	 */
-	Class findLocalClass(String name) throws ClassNotFoundException {
-		if (Debug.DEBUG && Debug.DEBUG_LOADER)
+	Class<?> findLocalClass(String name) throws ClassNotFoundException {
+		if (Debug.DEBUG_LOADER)
 			Debug.println("BundleLoader[" + this + "].findLocalClass(" + name + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		try {
-			Class clazz = createClassLoader().findLocalClass(name);
-			if (Debug.DEBUG && Debug.DEBUG_LOADER && clazz != null)
+			Class<?> clazz = createClassLoader().findLocalClass(name);
+			if (Debug.DEBUG_LOADER && clazz != null)
 				Debug.println("BundleLoader[" + this + "] found local class " + name); //$NON-NLS-1$ //$NON-NLS-2$
 			return clazz;
 		} catch (ClassNotFoundException e) {
@@ -406,11 +413,11 @@ public class BundleLoader implements ClassLoaderDelegate {
 	/**
 	 * Finds the class for a bundle.  This method is used for delegation by the bundle's classloader.
 	 */
-	public Class findClass(String name) throws ClassNotFoundException {
+	public Class<?> findClass(String name) throws ClassNotFoundException {
 		return findClass(name, true);
 	}
 
-	Class findClass(String name, boolean checkParent) throws ClassNotFoundException {
+	Class<?> findClass(String name, boolean checkParent) throws ClassNotFoundException {
 		ClassLoader parentCL = getParentClassLoader();
 		if (checkParent && parentCL != null && name.startsWith(JAVA_PACKAGE))
 			// 1) if startsWith "java." delegate to parent and terminate search
@@ -426,8 +433,8 @@ public class BundleLoader implements ClassLoaderDelegate {
 		}
 	}
 
-	private Class findClassInternal(String name, boolean checkParent, ClassLoader parentCL) throws ClassNotFoundException {
-		if (Debug.DEBUG && Debug.DEBUG_LOADER)
+	private Class<?> findClassInternal(String name, boolean checkParent, ClassLoader parentCL) throws ClassNotFoundException {
+		if (Debug.DEBUG_LOADER)
 			Debug.println("BundleLoader[" + this + "].loadBundleClass(" + name + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		String pkgName = getPackageName(name);
 		boolean bootDelegation = false;
@@ -440,9 +447,9 @@ public class BundleLoader implements ClassLoaderDelegate {
 				// we want to continue
 				bootDelegation = true;
 			}
-		Class result = null;
+		Class<?> result = null;
 		try {
-			result = (Class) searchHooks(name, PRE_CLASS);
+			result = (Class<?>) searchHooks(name, PRE_CLASS);
 		} catch (ClassNotFoundException e) {
 			throw e;
 		} catch (FileNotFoundException e) {
@@ -483,7 +490,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 
 		if (result == null)
 			try {
-				result = (Class) searchHooks(name, POST_CLASS);
+				result = (Class<?>) searchHooks(name, POST_CLASS);
 			} catch (ClassNotFoundException e) {
 				throw e;
 			} catch (FileNotFoundException e) {
@@ -506,36 +513,37 @@ public class BundleLoader implements ClassLoaderDelegate {
 		throw new ClassNotFoundException(name);
 	}
 
-	private Object searchHooks(String name, int type) throws ClassNotFoundException, FileNotFoundException {
+	@SuppressWarnings("unchecked")
+	private <E> E searchHooks(String name, int type) throws ClassNotFoundException, FileNotFoundException {
 		ClassLoaderDelegateHook[] delegateHooks = bundle.getFramework().getDelegateHooks();
 		if (delegateHooks == null)
 			return null;
-		Object result = null;
+		E result = null;
 		for (int i = 0; i < delegateHooks.length && result == null; i++) {
 			switch (type) {
 				case PRE_CLASS :
-					result = delegateHooks[i].preFindClass(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].preFindClass(name, createClassLoader(), bundle.getBundleData());
 					break;
 				case POST_CLASS :
-					result = delegateHooks[i].postFindClass(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].postFindClass(name, createClassLoader(), bundle.getBundleData());
 					break;
 				case PRE_RESOURCE :
-					result = delegateHooks[i].preFindResource(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].preFindResource(name, createClassLoader(), bundle.getBundleData());
 					break;
 				case POST_RESOURCE :
-					result = delegateHooks[i].postFindResource(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].postFindResource(name, createClassLoader(), bundle.getBundleData());
 					break;
 				case PRE_RESOURCES :
-					result = delegateHooks[i].preFindResources(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].preFindResources(name, createClassLoader(), bundle.getBundleData());
 					break;
 				case POST_RESOURCES :
-					result = delegateHooks[i].postFindResources(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].postFindResources(name, createClassLoader(), bundle.getBundleData());
 					break;
 				case PRE_LIBRARY :
-					result = delegateHooks[i].preFindLibrary(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].preFindLibrary(name, createClassLoader(), bundle.getBundleData());
 					break;
 				case POST_LIBRARY :
-					result = delegateHooks[i].postFindLibrary(name, createClassLoader(), bundle.getBundleData());
+					result = (E) delegateHooks[i].postFindLibrary(name, createClassLoader(), bundle.getBundleData());
 					break;
 			}
 		}
@@ -546,7 +554,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 		if (bundle.getFramework().isBootDelegationPackage("*") || !bundle.getFramework().contextBootDelegation) //$NON-NLS-1$
 			return false;
 		// works around VM bugs that require all classloaders to have access to parent packages
-		Class[] context = CLASS_CONTEXT.getClassContext();
+		Class<?>[] context = CLASS_CONTEXT.getClassContext();
 		if (context == null || context.length < 2)
 			return false;
 		// skip the first class; it is the ClassContext class
@@ -564,11 +572,11 @@ public class BundleLoader implements ClassLoaderDelegate {
 		return false;
 	}
 
-	private static ClassLoader getClassLoader(final Class clazz) {
+	private static ClassLoader getClassLoader(final Class<?> clazz) {
 		if (System.getSecurityManager() == null)
 			return clazz.getClassLoader();
-		return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+			public ClassLoader run() {
 				return clazz.getClassLoader();
 			}
 		});
@@ -660,14 +668,14 @@ public class BundleLoader implements ClassLoaderDelegate {
 	/**
 	 * Finds the resources for a bundle.  This  method is used for delegation by the bundle's classloader.
 	 */
-	public Enumeration findResources(String name) throws IOException {
+	public Enumeration<URL> findResources(String name) throws IOException {
 		// do not delegate to parent because ClassLoader#getResources already did and it is final!!
 		if ((name.length() > 1) && (name.charAt(0) == '/')) /* if name has a leading slash */
 			name = name.substring(1); /* remove leading slash before search */
 		String pkgName = getResourcePackageName(name);
-		Enumeration result = null;
+		Enumeration<URL> result = null;
 		try {
-			result = (Enumeration) searchHooks(name, PRE_RESOURCES);
+			result = searchHooks(name, PRE_RESOURCES);
 		} catch (ClassNotFoundException e) {
 			// will not happen
 		} catch (FileNotFoundException e) {
@@ -689,7 +697,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 
 		// 5) search the local bundle
 		// compound the required source results with the local ones
-		Enumeration localResults = findLocalResources(name);
+		Enumeration<URL> localResults = findLocalResources(name);
 		result = compoundEnumerations(result, localResults);
 		// 6) attempt to find a dynamic import source; only do this if a required source was not found
 		if (result == null && source == null) {
@@ -699,29 +707,95 @@ public class BundleLoader implements ClassLoaderDelegate {
 		}
 		if (result == null)
 			try {
-				result = (Enumeration) searchHooks(name, POST_RESOURCES);
+				result = searchHooks(name, POST_RESOURCES);
 			} catch (ClassNotFoundException e) {
 				// will not happen
 			} catch (FileNotFoundException e) {
 				return null;
 			}
 		if (policy != null) {
-			Enumeration buddyResult = policy.doBuddyResourcesLoading(name);
+			Enumeration<URL> buddyResult = policy.doBuddyResourcesLoading(name);
 			result = compoundEnumerations(result, buddyResult);
 		}
 		return result;
 	}
 
+	private boolean isSubPackage(String parentPackage, String subPackage) {
+		String prefix = (parentPackage.length() == 0 || parentPackage.equals(DEFAULT_PACKAGE)) ? "" : parentPackage + '.'; //$NON-NLS-1$
+		return subPackage.startsWith(prefix);
+	}
+
+	public Collection<String> listResources(String path, String filePattern, int options) {
+		String pkgName = getResourcePackageName(path.endsWith("/") ? path : path + '/'); //$NON-NLS-1$
+		if ((path.length() > 1) && (path.charAt(0) == '/')) /* if name has a leading slash */
+			path = path.substring(1); /* remove leading slash before search */
+		boolean subPackages = (options & BundleWiring.LISTRESOURCES_RECURSE) != 0;
+		List<String> packages = new ArrayList<String>();
+		// search imported package names
+		KeyedHashSet importSources = getImportedSources(null);
+		if (importSources != null) {
+			KeyedElement[] imports = importSources.elements();
+			for (KeyedElement keyedElement : imports) {
+				String id = ((PackageSource) keyedElement).getId();
+				if (id.equals(pkgName) || (subPackages && isSubPackage(pkgName, id)))
+					packages.add(id);
+			}
+		}
+
+		// now add package names from required bundles
+		if (requiredBundles != null) {
+			KeyedHashSet visited = new KeyedHashSet(false);
+			visited.add(bundle); // always add ourselves so we do not recurse back to ourselves
+			for (BundleLoaderProxy requiredProxy : requiredBundles) {
+				BundleLoader requiredLoader = requiredProxy.getBundleLoader();
+				requiredLoader.addProvidedPackageNames(requiredProxy.getSymbolicName(), pkgName, packages, subPackages, visited);
+			}
+		}
+
+		boolean localSearch = (options & BundleWiring.LISTRESOURCES_LOCAL) != 0;
+		List<String> result = new ArrayList<String>();
+		Set<String> importedPackages = new HashSet<String>(0);
+		for (String name : packages) {
+			// look for import source
+			PackageSource externalSource = findImportedSource(name, null);
+			if (externalSource != null) {
+				// record this package is imported
+				importedPackages.add(name);
+			} else {
+				// look for require bundle source
+				externalSource = findRequiredSource(name, null);
+			}
+			// only add the content of the external source if this is not a localSearch
+			if (externalSource != null && !localSearch) {
+				String packagePath = name.replace('.', '/');
+				Collection<String> externalResources = externalSource.listResources(packagePath, filePattern);
+				for (String resource : externalResources) {
+					if (!result.contains(resource)) // prevent duplicates; could happen if the package is split or exporter has fragments/multiple jars
+						result.add(resource);
+				}
+			}
+		}
+
+		// now search locally
+		Collection<String> localResources = createClassLoader().listLocalResources(path, filePattern, options);
+		for (String resource : localResources) {
+			String resourcePkg = getResourcePackageName(resource);
+			if (!importedPackages.contains(resourcePkg) && !result.contains(resource))
+				result.add(resource);
+		}
+		return result;
+	}
+
 	/*
 	 * This method is used by Bundle.getResources to do proper parent delegation.
 	 */
-	public Enumeration getResources(String name) throws IOException {
+	public Enumeration<URL> getResources(String name) throws IOException {
 		if ((name.length() > 1) && (name.charAt(0) == '/')) /* if name has a leading slash */
 			name = name.substring(1); /* remove leading slash before search */
 		String pkgName = getResourcePackageName(name);
 		// follow the OSGi delegation model
 		// First check the parent classloader for system resources, if it is a java resource.
-		Enumeration result = null;
+		Enumeration<URL> result = null;
 		if (pkgName.startsWith(JAVA_PACKAGE) || bundle.getFramework().isBootDelegationPackage(pkgName)) {
 			// 1) if startsWith "java." delegate to parent and terminate search
 			// 2) if part of the bootdelegation list then delegate to parent and continue of failure
@@ -733,20 +807,20 @@ public class BundleLoader implements ClassLoaderDelegate {
 		return compoundEnumerations(result, findResources(name));
 	}
 
-	public static Enumeration compoundEnumerations(Enumeration list1, Enumeration list2) {
+	public static <E> Enumeration<E> compoundEnumerations(Enumeration<E> list1, Enumeration<E> list2) {
 		if (list2 == null || !list2.hasMoreElements())
 			return list1;
 		if (list1 == null || !list1.hasMoreElements())
 			return list2;
-		Vector compoundResults = new Vector();
+		List<E> compoundResults = new ArrayList<E>();
 		while (list1.hasMoreElements())
 			compoundResults.add(list1.nextElement());
 		while (list2.hasMoreElements()) {
-			Object item = list2.nextElement();
+			E item = list2.nextElement();
 			if (!compoundResults.contains(item)) //don't add duplicates
 				compoundResults.add(item);
 		}
-		return compoundResults.elements();
+		return Collections.enumeration(compoundResults);
 	}
 
 	/**
@@ -765,7 +839,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 	 * @param  name the resource name
 	 * @return an Enumeration of URLs for the resources
 	 */
-	Enumeration findLocalResources(String name) {
+	Enumeration<URL> findLocalResources(String name) {
 		return createClassLoader().findLocalResources(name);
 	}
 
@@ -778,8 +852,8 @@ public class BundleLoader implements ClassLoaderDelegate {
 	public String findLibrary(final String name) {
 		if (System.getSecurityManager() == null)
 			return findLocalLibrary(name);
-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<String>() {
+			public String run() {
 				return findLocalLibrary(name);
 			}
 		});
@@ -830,8 +904,8 @@ public class BundleLoader implements ClassLoaderDelegate {
 		if (System.getSecurityManager() == null)
 			return createBCL(pd, cp);
 
-		return (BundleClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<BundleClassLoader>() {
+			public BundleClassLoader run() {
 				return createBCL(pd, cp);
 			}
 		});
@@ -902,7 +976,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 		return false;
 	}
 
-	final void addExportedProvidersFor(String symbolicName, String packageName, ArrayList result, KeyedHashSet visited) {
+	final void addExportedProvidersFor(String symbolicName, String packageName, List<PackageSource> result, KeyedHashSet visited) {
 		if (!visited.add(bundle))
 			return;
 
@@ -936,6 +1010,34 @@ public class BundleLoader implements ClassLoaderDelegate {
 			result.add(local);
 	}
 
+	final void addProvidedPackageNames(String symbolicName, String packageName, List<String> result, boolean subPackages, KeyedHashSet visitied) {
+		if (!visitied.add(bundle))
+			return;
+		for (String exported : exportedPackages) {
+			if (exported.equals(packageName) || (subPackages && isSubPackage(packageName, exported))) {
+				if (!result.contains(exported))
+					result.add(exported);
+			}
+		}
+		if (substitutedPackages != null)
+			for (String substituted : substitutedPackages) {
+				if (substituted.equals(packageName) || (subPackages && isSubPackage(packageName, substituted))) {
+					if (!result.contains(substituted))
+						result.add(substituted);
+				}
+			}
+		if (requiredBundles != null) {
+			int size = reexportTable == null ? 0 : reexportTable.length;
+			int reexportIndex = 0;
+			for (int i = 0; i < requiredBundles.length; i++) {
+				if (reexportIndex < size && reexportTable[reexportIndex] == i) {
+					reexportIndex++;
+					requiredBundles[i].getBundleLoader().addProvidedPackageNames(symbolicName, packageName, result, subPackages, visitied);
+				}
+			}
+		}
+	}
+
 	final boolean isExportedPackage(String name) {
 		return exportedPackages.contains(name);
 	}
@@ -947,12 +1049,12 @@ public class BundleLoader implements ClassLoaderDelegate {
 	private void addDynamicImportPackage(ImportPackageSpecification[] packages) {
 		if (packages == null)
 			return;
-		ArrayList dynamicImports = new ArrayList(packages.length);
+		List<String> dynamicImports = new ArrayList<String>(packages.length);
 		for (int i = 0; i < packages.length; i++)
 			if (ImportPackageSpecification.RESOLUTION_DYNAMIC.equals(packages[i].getDirective(Constants.RESOLUTION_DIRECTIVE)))
 				dynamicImports.add(packages[i].getName());
 		if (dynamicImports.size() > 0)
-			addDynamicImportPackage((String[]) dynamicImports.toArray(new String[dynamicImports.size()]));
+			addDynamicImportPackage(dynamicImports.toArray(new String[dynamicImports.size()]));
 	}
 
 	/**
@@ -968,21 +1070,21 @@ public class BundleLoader implements ClassLoaderDelegate {
 
 		loaderFlags |= FLAG_HASDYNAMICIMPORTS;
 		int size = packages.length;
-		ArrayList stems;
+		List<String> stems;
 		if (dynamicImportPackageStems == null) {
-			stems = new ArrayList(size);
+			stems = new ArrayList<String>(size);
 		} else {
-			stems = new ArrayList(size + dynamicImportPackageStems.length);
+			stems = new ArrayList<String>(size + dynamicImportPackageStems.length);
 			for (int i = 0; i < dynamicImportPackageStems.length; i++) {
 				stems.add(dynamicImportPackageStems[i]);
 			}
 		}
 
-		ArrayList names;
+		List<String> names;
 		if (dynamicImportPackages == null) {
-			names = new ArrayList(size);
+			names = new ArrayList<String>(size);
 		} else {
-			names = new ArrayList(size + dynamicImportPackages.length);
+			names = new ArrayList<String>(size + dynamicImportPackages.length);
 			for (int i = 0; i < dynamicImportPackages.length; i++) {
 				names.add(dynamicImportPackages[i]);
 			}
@@ -1005,11 +1107,11 @@ public class BundleLoader implements ClassLoaderDelegate {
 
 		size = stems.size();
 		if (size > 0)
-			dynamicImportPackageStems = (String[]) stems.toArray(new String[size]);
+			dynamicImportPackageStems = stems.toArray(new String[size]);
 
 		size = names.size();
 		if (size > 0)
-			dynamicImportPackages = (String[]) names.toArray(new String[size]);
+			dynamicImportPackages = names.toArray(new String[size]);
 	}
 
 	/**
@@ -1021,11 +1123,20 @@ public class BundleLoader implements ClassLoaderDelegate {
 	public final synchronized void addDynamicImportPackage(ManifestElement[] packages) {
 		if (packages == null)
 			return;
-		ArrayList dynamicImports = new ArrayList(packages.length);
-		for (int i = 0; i < packages.length; i++)
-			dynamicImports.add(packages[i].getValue());
-		if (dynamicImports.size() > 0)
-			addDynamicImportPackage((String[]) dynamicImports.toArray(new String[dynamicImports.size()]));
+		List<String> dynamicImports = new ArrayList<String>(packages.length);
+		List<ImportPackageSpecification> dynamicImportSpecs = new ArrayList<ImportPackageSpecification>(packages.length);
+		for (ManifestElement dynamicImportElement : packages) {
+			String[] names = dynamicImportElement.getValueComponents();
+			for (String name : names)
+				dynamicImports.add(name);
+			StateBuilder.addImportPackages(dynamicImportElement, dynamicImportSpecs, 2, true);
+		}
+		if (dynamicImports.size() > 0) {
+			addDynamicImportPackage(dynamicImports.toArray(new String[dynamicImports.size()]));
+			BundleDescription revision = getLoaderProxy().getBundleDescription();
+			State state = revision.getContainingState();
+			state.addDynamicImportPackages(revision, dynamicImportSpecs.toArray(new ImportPackageSpecification[dynamicImportSpecs.size()]));
+		}
 	}
 
 	synchronized public void attachFragment(BundleFragment fragment) throws BundleException {
@@ -1092,7 +1203,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 		if (visited == null)
 			visited = new KeyedHashSet(false);
 		visited.add(bundle); // always add ourselves so we do not recurse back to ourselves
-		ArrayList result = new ArrayList(3);
+		List<PackageSource> result = new ArrayList<PackageSource>(3);
 		for (int i = 0; i < requiredBundles.length; i++) {
 			BundleLoader requiredLoader = requiredBundles[i].getBundleLoader();
 			requiredLoader.addExportedProvidersFor(proxy.getSymbolicName(), pkgName, result, visited);
@@ -1105,10 +1216,10 @@ public class BundleLoader implements ClassLoaderDelegate {
 			source = NullPackageSource.getNullPackageSource(pkgName);
 		} else if (result.size() == 1) {
 			// if there is just one source, remember just the single source 
-			source = (PackageSource) result.get(0);
+			source = result.get(0);
 		} else {
 			// if there was more than one source, build a multisource and cache that.
-			PackageSource[] srcs = (PackageSource[]) result.toArray(new PackageSource[result.size()]);
+			PackageSource[] srcs = result.toArray(new PackageSource[result.size()]);
 			source = createMultiSource(pkgName, srcs);
 		}
 		synchronized (requiredSources) {
@@ -1139,8 +1250,8 @@ public class BundleLoader implements ClassLoaderDelegate {
 		if (System.getSecurityManager() == null)
 			return bcl.getParent();
 
-		return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+			public ClassLoader run() {
 				return bcl.getParent();
 			}
 		});
@@ -1148,7 +1259,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 
 	static final class ClassContext extends SecurityManager {
 		// need to make this method public
-		public Class[] getClassContext() {
+		public Class<?>[] getClassContext() {
 			return super.getClassContext();
 		}
 	}
@@ -1227,7 +1338,7 @@ public class BundleLoader implements ClassLoaderDelegate {
 				return;
 			}
 
-			Object[] waiting = (Object[]) waitingList.get(0);
+			Object[] waiting = waitingList.get(0);
 			waitingThread = (Thread) waiting[0];
 			loader = waiting[1];
 		}
@@ -1251,6 +1362,8 @@ public class BundleLoader implements ClassLoaderDelegate {
 		// if proxy is not null then make sure to unset user object
 		// associated with the proxy in the state
 		BundleDescription description = proxy.getBundleDescription();
-		description.setUserObject(null);
+		// must set it back to the bundle object; not null
+		// need to make sure the user object is a BundleReference
+		description.setUserObject(proxy.getBundleData());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoaderProxy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoaderProxy.java
index 6f2e494..fa30a83 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoaderProxy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoaderProxy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,8 @@ package org.eclipse.osgi.internal.loader;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.osgi.framework.adaptor.BundleData;
 import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.framework.util.KeyedHashSet;
@@ -30,14 +32,16 @@ import org.osgi.service.packageadmin.RequiredBundle;
  * keeps track of the depedencies between the bundles installed in the 
  * Framework.
  */
-public class BundleLoaderProxy implements RequiredBundle {
-	static SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+public class BundleLoaderProxy implements RequiredBundle, BundleReference {
+	static SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 	// The BundleLoader that this BundleLoaderProxy is managing
 	private BundleLoader loader;
 	// The Bundle that this BundleLoaderProxy is for
 	final private BundleHost bundle;
 	// the BundleDescription for the Bundle
 	final private BundleDescription description;
+	// the BundleData for the bundle revision
+	final private BundleData data;
 	// Indicates if this BundleLoaderProxy is stale; 
 	// this is true when the bundle is updated or uninstalled.
 	private boolean stale = false;
@@ -48,13 +52,14 @@ public class BundleLoaderProxy implements RequiredBundle {
 		this.bundle = bundle;
 		this.description = description;
 		this.pkgSources = new KeyedHashSet(false);
+		this.data = bundle.getBundleData();
 	}
 
 	public BundleLoader getBundleLoader() {
 		if (System.getSecurityManager() == null)
 			return getBundleLoader0();
-		return (BundleLoader) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<BundleLoader>() {
+			public BundleLoader run() {
 				return getBundleLoader0();
 			}
 		});
@@ -108,20 +113,24 @@ public class BundleLoaderProxy implements RequiredBundle {
 		return bundle;
 	}
 
-	public org.osgi.framework.Bundle[] getRequiringBundles() {
+	public BundleData getBundleData() {
+		return data;
+	}
+
+	public Bundle[] getRequiringBundles() {
 		if (isStale())
 			return null;
 		// This is VERY slow; but never gets called in regular execution.
 		BundleDescription[] dependents = description.getDependents();
 		if (dependents == null || dependents.length == 0)
 			return new Bundle[0];
-		ArrayList result = new ArrayList(dependents.length);
+		List<Bundle> result = new ArrayList<Bundle>(dependents.length);
 		for (int i = 0; i < dependents.length; i++)
 			addRequirers(dependents[i], result);
-		return (Bundle[]) result.toArray(new org.osgi.framework.Bundle[result.size()]);
+		return result.toArray(new org.osgi.framework.Bundle[result.size()]);
 	}
 
-	void addRequirers(BundleDescription dependent, ArrayList result) {
+	void addRequirers(BundleDescription dependent, List<Bundle> result) {
 		if (dependent.getHost() != null) // don't look in fragments.
 			return;
 		BundleLoaderProxy dependentProxy = getBundleLoader().getLoaderProxy(dependent);
@@ -165,7 +174,7 @@ public class BundleLoaderProxy implements RequiredBundle {
 		return description.isRemovalPending();
 	}
 
-	BundleDescription getBundleDescription() {
+	public BundleDescription getBundleDescription() {
 		return description;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/FilteredSourcePackage.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/FilteredSourcePackage.java
index f148293..287f9eb 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/FilteredSourcePackage.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/FilteredSourcePackage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.osgi.internal.loader;
 
 import java.net.URL;
-import java.util.Enumeration;
+import java.util.*;
 import org.eclipse.osgi.util.ManifestElement;
 
 public class FilteredSourcePackage extends SingleSourcePackage {
@@ -44,13 +44,13 @@ public class FilteredSourcePackage extends SingleSourcePackage {
 		return super.getResource(name);
 	}
 
-	public Enumeration getResources(String name) {
+	public Enumeration<URL> getResources(String name) {
 		if (isFiltered(name, getId()))
 			return null;
 		return super.getResources(name);
 	}
 
-	public Class loadClass(String name) throws ClassNotFoundException {
+	public Class<?> loadClass(String name) throws ClassNotFoundException {
 		if (isFiltered(name, getId()))
 			return null;
 		return super.loadClass(name);
@@ -95,4 +95,18 @@ public class FilteredSourcePackage extends SingleSourcePackage {
 		}
 		return false;
 	}
+
+	@Override
+	public Collection<String> listResources(String path, String filePattern) {
+		Collection<String> result = super.listResources(path, filePattern);
+		for (Iterator<String> resources = result.iterator(); resources.hasNext();) {
+			String resource = resources.next();
+			int lastSlash = resource.lastIndexOf('/');
+			String fileName = lastSlash >= 0 ? resource.substring(lastSlash + 1) : resource;
+			if (!isIncluded(fileName) || isExcluded(fileName))
+				resources.remove();
+		}
+		return result;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/MultiSourcePackage.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/MultiSourcePackage.java
index 3155fa5..83eefc6 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/MultiSourcePackage.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/MultiSourcePackage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.osgi.internal.loader;
 
 import java.net.URL;
-import java.util.Enumeration;
+import java.util.*;
 
 public class MultiSourcePackage extends PackageSource {
 	SingleSourcePackage[] suppliers;
@@ -25,8 +25,8 @@ public class MultiSourcePackage extends PackageSource {
 		return suppliers;
 	}
 
-	public Class loadClass(String name) throws ClassNotFoundException {
-		Class result = null;
+	public Class<?> loadClass(String name) throws ClassNotFoundException {
+		Class<?> result = null;
 		for (int i = 0; i < suppliers.length; i++) {
 			result = suppliers[i].loadClass(name);
 			if (result != null)
@@ -45,10 +45,23 @@ public class MultiSourcePackage extends PackageSource {
 		return result;
 	}
 
-	public Enumeration getResources(String name) {
-		Enumeration results = null;
+	public Enumeration<URL> getResources(String name) {
+		Enumeration<URL> results = null;
 		for (int i = 0; i < suppliers.length; i++)
 			results = BundleLoader.compoundEnumerations(results, suppliers[i].getResources(name));
 		return results;
 	}
+
+	@Override
+	public Collection<String> listResources(String path, String filePattern) {
+		List<String> result = new ArrayList<String>();
+		for (SingleSourcePackage source : suppliers) {
+			Collection<String> sourceResources = source.listResources(path, filePattern);
+			for (String resource : sourceResources) {
+				if (!result.contains(resource))
+					result.add(resource);
+			}
+		}
+		return result;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/NullPackageSource.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/NullPackageSource.java
index b70b483..796432b 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/NullPackageSource.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/NullPackageSource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.osgi.internal.loader;
 
 import java.net.URL;
-import java.util.Enumeration;
+import java.util.*;
 import org.eclipse.osgi.framework.util.KeyedHashSet;
 
 /**
@@ -39,7 +39,7 @@ public class NullPackageSource extends PackageSource {
 		return id + " -> null"; //$NON-NLS-1$
 	}
 
-	public Class loadClass(String name) {
+	public Class<?> loadClass(String name) {
 		return null;
 	}
 
@@ -47,7 +47,7 @@ public class NullPackageSource extends PackageSource {
 		return null;
 	}
 
-	public Enumeration getResources(String name) {
+	public Enumeration<URL> getResources(String name) {
 		return null;
 	}
 
@@ -61,4 +61,10 @@ public class NullPackageSource extends PackageSource {
 		sources.add(result);
 		return result;
 	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<String> listResources(String path, String filePattern) {
+		return Collections.EMPTY_LIST;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/PackageSource.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/PackageSource.java
index 6b4eaeb..0f2d988 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/PackageSource.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/PackageSource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.osgi.internal.loader;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Collection;
 import java.util.Enumeration;
 import org.eclipse.osgi.framework.util.KeyedElement;
 
@@ -49,11 +50,11 @@ public abstract class PackageSource implements KeyedElement {
 		return true;
 	}
 
-	public abstract Class loadClass(String name) throws ClassNotFoundException;
+	public abstract Class<?> loadClass(String name) throws ClassNotFoundException;
 
 	public abstract URL getResource(String name);
 
-	public abstract Enumeration getResources(String name) throws IOException;
+	public abstract Enumeration<URL> getResources(String name) throws IOException;
 
 	//TODO See how this relates with FilteredSourcePackage. Overwriting or doing a double dispatch might be good.
 	// This is intentionally lenient; we don't force all suppliers to match (only one)
@@ -75,4 +76,6 @@ public abstract class PackageSource implements KeyedElement {
 					return true;
 		return false;
 	}
+
+	public abstract Collection<String> listResources(String path, String filePattern);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SingleSourcePackage.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SingleSourcePackage.java
index 7079bb2..533c996 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SingleSourcePackage.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SingleSourcePackage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,9 @@
 package org.eclipse.osgi.internal.loader;
 
 import java.net.URL;
+import java.util.Collection;
 import java.util.Enumeration;
+import org.eclipse.osgi.framework.adaptor.BundleClassLoader;
 
 public class SingleSourcePackage extends PackageSource {
 	BundleLoaderProxy supplier;
@@ -29,7 +31,7 @@ public class SingleSourcePackage extends PackageSource {
 		return id + " -> " + supplier; //$NON-NLS-1$
 	}
 
-	public Class loadClass(String name) throws ClassNotFoundException {
+	public Class<?> loadClass(String name) throws ClassNotFoundException {
 		return supplier.getBundleLoader().findLocalClass(name);
 	}
 
@@ -37,7 +39,7 @@ public class SingleSourcePackage extends PackageSource {
 		return supplier.getBundleLoader().findLocalResource(name);
 	}
 
-	public Enumeration getResources(String name) {
+	public Enumeration<URL> getResources(String name) {
 		return supplier.getBundleLoader().findLocalResources(name);
 	}
 
@@ -58,4 +60,10 @@ public class SingleSourcePackage extends PackageSource {
 		result = prime * result + supplier.hashCode();
 		return result;
 	}
+
+	@Override
+	public Collection<String> listResources(String path, String filePattern) {
+		BundleClassLoader bcl = supplier.getBundleLoader().createClassLoader();
+		return bcl.listLocalResources(path, filePattern, 0);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SystemBundleLoader.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SystemBundleLoader.java
index 0408149..252fdb2 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SystemBundleLoader.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/SystemBundleLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,14 +14,14 @@ package org.eclipse.osgi.internal.loader;
 import java.io.IOException;
 import java.net.URL;
 import java.security.ProtectionDomain;
-import java.util.Enumeration;
-import java.util.HashSet;
+import java.util.*;
 import org.eclipse.osgi.framework.adaptor.*;
 import org.eclipse.osgi.framework.internal.core.BundleFragment;
 import org.eclipse.osgi.framework.internal.core.BundleHost;
 import org.eclipse.osgi.service.resolver.ExportPackageDescription;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
+import org.osgi.framework.wiring.BundleWiring;
 
 /**
  * The System Bundle's BundleLoader.  This BundleLoader is used by ImportClassLoaders
@@ -29,9 +29,9 @@ import org.osgi.framework.BundleException;
  */
 public class SystemBundleLoader extends BundleLoader {
 	public static final String EQUINOX_EE = "x-equinox-ee"; //$NON-NLS-1$
-	private final ClassLoader classLoader;
-	private final HashSet eePackages;
-	private final HashSet extPackages;
+	final ClassLoader classLoader;
+	private final Set<String> eePackages;
+	private final Set<String> extPackages;
 	private final ClassLoader extClassLoader;
 
 	/**
@@ -45,13 +45,13 @@ public class SystemBundleLoader extends BundleLoader {
 		if (exports == null || exports.length == 0)
 			eePackages = null;
 		else {
-			eePackages = new HashSet(exports.length);
+			eePackages = new HashSet<String>(exports.length);
 			for (int i = 0; i < exports.length; i++)
 				if (((Integer) exports[i].getDirective(EQUINOX_EE)).intValue() >= 0)
 					eePackages.add(exports[i].getName());
 		}
 		this.classLoader = getClass().getClassLoader();
-		extPackages = new HashSet(0); // not common; start with 0
+		extPackages = new HashSet<String>(0); // not common; start with 0
 		BundleFragment[] fragments = bundle.getFragments();
 		if (fragments != null)
 			for (int i = 0; i < fragments.length; i++)
@@ -94,8 +94,8 @@ public class SystemBundleLoader extends BundleLoader {
 	 * The ClassLoader that loads OSGi framework classes is used to find the class.
 	 * This method never gets called because there is no BundleClassLoader for the framework.
 	 */
-	public Class findClass(String name) throws ClassNotFoundException {
-		Class result = findLocalClass(name);
+	public Class<?> findClass(String name) throws ClassNotFoundException {
+		Class<?> result = findLocalClass(name);
 		if (result == null)
 			throw new ClassNotFoundException(name);
 		return result;
@@ -112,7 +112,7 @@ public class SystemBundleLoader extends BundleLoader {
 	/**
 	 * The ClassLoader that loads OSGi framework classes is used to find the class. 
 	 */
-	Class findLocalClass(String name) {
+	Class<?> findLocalClass(String name) {
 		try {
 			return classLoader.loadClass(name);
 		} catch (ClassNotFoundException e) {
@@ -145,8 +145,8 @@ public class SystemBundleLoader extends BundleLoader {
 	/**
 	 * The ClassLoader that loads OSGi framework classes is used to find the resource.
 	 */
-	Enumeration findLocalResources(String name) {
-		Enumeration result = null;
+	Enumeration<URL> findLocalResources(String name) {
+		Enumeration<URL> result = null;
 		try {
 			result = classLoader.getResources(name);
 		} catch (IOException e) {
@@ -175,8 +175,9 @@ public class SystemBundleLoader extends BundleLoader {
 	/**
 	 * The ClassLoader that loads OSGi framework classes is used to find the resource.
 	 * This method never gets called because there is no BundleClassLoader for the framework.
+	 * @throws IOException 
 	 */
-	public Enumeration findResources(String name) throws IOException {
+	public Enumeration<URL> findResources(String name) throws IOException {
 		return findLocalResources(name);
 	}
 
@@ -198,7 +199,7 @@ public class SystemBundleLoader extends BundleLoader {
 				return SystemBundleLoader.this.getBundle();
 			}
 
-			public Class loadClass(String name) throws ClassNotFoundException {
+			public Class<?> loadClass(String name) throws ClassNotFoundException {
 				return SystemBundleLoader.this.loadClass(name);
 			}
 
@@ -206,7 +207,10 @@ public class SystemBundleLoader extends BundleLoader {
 				// nothing
 			}
 
-			public Enumeration getResources(String name) throws IOException {
+			/**
+			 * @throws IOException  
+			 */
+			public Enumeration<URL> getResources(String name) throws IOException {
 				return findLocalResources(name);
 			}
 
@@ -222,7 +226,7 @@ public class SystemBundleLoader extends BundleLoader {
 				return SystemBundleLoader.this;
 			}
 
-			public Enumeration findLocalResources(String resource) {
+			public Enumeration<URL> findLocalResources(String resource) {
 				return SystemBundleLoader.this.findLocalResources(resource);
 			}
 
@@ -230,7 +234,10 @@ public class SystemBundleLoader extends BundleLoader {
 				return getResource(resource);
 			}
 
-			public Class findLocalClass(String classname) throws ClassNotFoundException {
+			/**
+			 * @throws ClassNotFoundException  
+			 */
+			public Class<?> findLocalClass(String classname) throws ClassNotFoundException {
 				return SystemBundleLoader.this.findLocalClass(classname);
 			}
 
@@ -241,6 +248,30 @@ public class SystemBundleLoader extends BundleLoader {
 			public void attachFragment(BundleData bundledata, ProtectionDomain domain, String[] classpath) {
 				// nothing
 			}
+
+			public List<URL> findEntries(String path, String filePattern, int options) {
+				Bundle systemBundle = SystemBundleLoader.this.getBundle();
+				boolean recurse = (options & BundleWiring.FINDENTRIES_RECURSE) != 0;
+				@SuppressWarnings("unchecked")
+				List<URL> result = Collections.EMPTY_LIST;
+				Enumeration<URL> entries = systemBundle.findEntries(path, filePattern, recurse);
+				if (entries != null) {
+					result = new ArrayList<URL>();
+					while (entries.hasMoreElements())
+						result.add(entries.nextElement());
+				}
+				return Collections.unmodifiableList(result);
+			}
+
+			@SuppressWarnings("unchecked")
+			public Collection<String> listResources(String path, String filePattern, int options) {
+				return Collections.EMPTY_LIST;
+			}
+
+			@SuppressWarnings("unchecked")
+			public Collection<String> listLocalResources(String path, String filePattern, int options) {
+				return Collections.EMPTY_LIST;
+			}
 		};
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java
index 85240f2..74121ae 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,27 +26,27 @@ import org.eclipse.osgi.service.resolver.BundleDescription;
 public class DependentPolicy implements IBuddyPolicy {
 	BundleLoader buddyRequester;
 	int lastDependentOfAdded = -1; //remember the index of the bundle for which we last added the dependent
-	List allDependents = null; //the list of all dependents known so far
+	List<BundleDescription> allDependents = null; //the list of all dependents known so far
 
 	public DependentPolicy(BundleLoader requester) {
 		buddyRequester = requester;
 
 		//Initialize with the first level of dependent the list
-		allDependents = new ArrayList();
+		allDependents = new ArrayList<BundleDescription>();
 		basicAddImmediateDependents(buddyRequester.getBundle().getBundleDescription());
 		//If there is no dependent, reset to null
 		if (allDependents.size() == 0)
 			allDependents = null;
 	}
 
-	public Class loadClass(String name) {
+	public Class<?> loadClass(String name) {
 		if (allDependents == null)
 			return null;
 
-		Class result = null;
+		Class<?> result = null;
 		//size may change, so we must check it every time
 		for (int i = 0; i < allDependents.size() && result == null; i++) {
-			BundleDescription searchedBundle = (BundleDescription) allDependents.get(i);
+			BundleDescription searchedBundle = allDependents.get(i);
 			try {
 				BundleLoaderProxy proxy = buddyRequester.getLoaderProxy(searchedBundle);
 				if (proxy == null)
@@ -74,7 +74,7 @@ public class DependentPolicy implements IBuddyPolicy {
 		URL result = null;
 		//size may change, so we must check it every time
 		for (int i = 0; i < allDependents.size() && result == null; i++) {
-			BundleDescription searchedBundle = (BundleDescription) allDependents.get(i);
+			BundleDescription searchedBundle = allDependents.get(i);
 			BundleLoaderProxy proxy = buddyRequester.getLoaderProxy(searchedBundle);
 			if (proxy == null)
 				continue;
@@ -86,14 +86,14 @@ public class DependentPolicy implements IBuddyPolicy {
 		return result;
 	}
 
-	public Enumeration loadResources(String name) {
+	public Enumeration<URL> loadResources(String name) {
 		if (allDependents == null)
 			return null;
 
-		Enumeration results = null;
+		Enumeration<URL> results = null;
 		//size may change, so we must check it every time
 		for (int i = 0; i < allDependents.size(); i++) {
-			BundleDescription searchedBundle = (BundleDescription) allDependents.get(i);
+			BundleDescription searchedBundle = allDependents.get(i);
 			try {
 				BundleLoaderProxy proxy = buddyRequester.getLoaderProxy(searchedBundle);
 				if (proxy == null)
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java
index e1dc69b..1985ff8 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ public class GlobalPolicy implements IBuddyPolicy {
 		this.admin = admin;
 	}
 
-	public Class loadClass(String name) {
+	public Class<?> loadClass(String name) {
 		ExportedPackage pkg = admin.getExportedPackage(BundleLoader.getPackageName(name));
 		if (pkg == null)
 			return null;
@@ -49,14 +49,14 @@ public class GlobalPolicy implements IBuddyPolicy {
 		return pkg.getExportingBundle().getResource(name);
 	}
 
-	public Enumeration loadResources(String name) {
+	public Enumeration<URL> loadResources(String name) {
 		//get all exported packages that match the resource's package
 		ExportedPackage[] pkgs = admin.getExportedPackages(BundleLoader.getResourcePackageName(name));
 		if (pkgs == null || pkgs.length == 0)
 			return null;
 
 		//get all matching resources for each package
-		Enumeration results = null;
+		Enumeration<URL> results = null;
 		for (int i = 0; i < pkgs.length; i++) {
 			try {
 				results = BundleLoader.compoundEnumerations(results, pkgs[i].getExportingBundle().getResources(name));
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java
index 3e513f6..a4066ee 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,9 +14,9 @@ import java.net.URL;
 import java.util.Enumeration;
 
 public interface IBuddyPolicy {
-	public Class loadClass(String name);
+	public Class<?> loadClass(String name);
 
 	public URL loadResource(String name);
 
-	public Enumeration loadResources(String name);
+	public Enumeration<URL> loadResources(String name);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java
index 6ade20e..0795902 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,27 +33,27 @@ public class PolicyHandler implements SynchronousBundleListener {
 	private volatile Object[] policies = null;
 
 	//Support to cut class / resource loading cycles in the context of one thread. The contained object is a set of classname
-	private final ThreadLocal beingLoaded;
+	private final ThreadLocal<Set<String>> beingLoaded;
 	private final PackageAdmin packageAdmin;
 
 	public PolicyHandler(BundleLoader loader, String buddyList, PackageAdmin packageAdmin) {
 		policedLoader = loader;
 		policies = getArrayFromList(buddyList);
-		beingLoaded = new ThreadLocal();
+		beingLoaded = new ThreadLocal<Set<String>>();
 		this.packageAdmin = packageAdmin;
 	}
 
 	static Object[] getArrayFromList(String stringList) {
 		if (stringList == null || stringList.trim().equals("")) //$NON-NLS-1$
 			return null;
-		Vector list = new Vector();
+		List<Object> list = new ArrayList<Object>();
 		StringTokenizer tokens = new StringTokenizer(stringList, ","); //$NON-NLS-1$
 		while (tokens.hasMoreTokens()) {
 			String token = tokens.nextToken().trim();
 			if (!token.equals("")) //$NON-NLS-1$
-				list.addElement(token);
+				list.add(token);
 		}
-		return list.isEmpty() ? new Object[0] : (Object[]) list.toArray(new Object[list.size()]);
+		return list.isEmpty() ? new Object[0] : list.toArray(new Object[list.size()]);
 	}
 
 	private IBuddyPolicy getPolicyImplementation(Object[] policiesSnapshot, int policyOrder) {
@@ -122,11 +122,11 @@ public class PolicyHandler implements SynchronousBundleListener {
 		}
 	}
 
-	public Class doBuddyClassLoading(String name) {
+	public Class<?> doBuddyClassLoading(String name) {
 		if (startLoading(name) == false)
 			return null;
 
-		Class result = null;
+		Class<?> result = null;
 		Object[] policiesSnapshot = policies;
 		int policyCount = (policiesSnapshot == null) ? 0 : policiesSnapshot.length;
 		for (int i = 0; i < policyCount && result == null; i++) {
@@ -154,39 +154,39 @@ public class PolicyHandler implements SynchronousBundleListener {
 		return result;
 	}
 
-	public Enumeration doBuddyResourcesLoading(String name) {
+	public Enumeration<URL> doBuddyResourcesLoading(String name) {
 		if (startLoading(name) == false)
 			return null;
 
-		Vector results = null;
+		List<URL> results = null;
 		Object[] policiesSnapshot = policies;
 		int policyCount = (policiesSnapshot == null) ? 0 : policiesSnapshot.length;
 		for (int i = 0; i < policyCount; i++) {
 			IBuddyPolicy policy = getPolicyImplementation(policiesSnapshot, i);
 			if (policy == null)
 				continue;
-			Enumeration result = policy.loadResources(name);
+			Enumeration<URL> result = policy.loadResources(name);
 			if (result != null) {
 				if (results == null)
-					results = new Vector(policyCount);
+					results = new ArrayList<URL>(policyCount);
 				while (result.hasMoreElements()) {
-					Object url = result.nextElement();
+					URL url = result.nextElement();
 					if (!results.contains(url)) //only add if not already added 
 						results.add(url);
 				}
 			}
 		}
 		stopLoading(name);
-		return results == null || results.isEmpty() ? null : results.elements();
+		return results == null || results.isEmpty() ? null : Collections.enumeration(results);
 	}
 
 	private boolean startLoading(String name) {
-		Set classesAndResources = (Set) beingLoaded.get();
+		Set<String> classesAndResources = beingLoaded.get();
 		if (classesAndResources != null && classesAndResources.contains(name))
 			return false;
 
 		if (classesAndResources == null) {
-			classesAndResources = new HashSet(3);
+			classesAndResources = new HashSet<String>(3);
 			beingLoaded.set(classesAndResources);
 		}
 		classesAndResources.add(name);
@@ -194,7 +194,7 @@ public class PolicyHandler implements SynchronousBundleListener {
 	}
 
 	private void stopLoading(String name) {
-		((Set) beingLoaded.get()).remove(name);
+		beingLoaded.get().remove(name);
 	}
 
 	public void open(BundleContext context) {
@@ -210,7 +210,7 @@ public class PolicyHandler implements SynchronousBundleListener {
 			return;
 		// reinitialize the policies
 		try {
-			String list = (String) policedLoader.getBundle().getBundleData().getManifest().get(Constants.BUDDY_LOADER);
+			String list = policedLoader.getBundle().getBundleData().getManifest().get(Constants.BUDDY_LOADER);
 			policies = getArrayFromList(list);
 		} catch (BundleException e) {
 			//Ignore
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java
index 9623081..bf59610 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,13 +36,13 @@ public class RegisteredPolicy extends DependentPolicy {
 		if (allDependents == null)
 			return;
 
-		for (Iterator iter = allDependents.iterator(); iter.hasNext();) {
-			BundleLoaderProxy proxy = buddyRequester.getLoaderProxy((BundleDescription) iter.next());
+		for (Iterator<BundleDescription> iter = allDependents.iterator(); iter.hasNext();) {
+			BundleLoaderProxy proxy = buddyRequester.getLoaderProxy(iter.next());
 			if (proxy == null)
 				iter.remove();
 
 			try {
-				String[] allContributions = ManifestElement.getArrayFromList((String) ((AbstractBundle) proxy.getBundle()).getBundleData().getManifest().get(Constants.REGISTERED_POLICY));
+				String[] allContributions = ManifestElement.getArrayFromList(((AbstractBundle) proxy.getBundle()).getBundleData().getManifest().get(Constants.REGISTERED_POLICY));
 				if (allContributions == null) {
 					iter.remove();
 					continue;
@@ -65,15 +65,15 @@ public class RegisteredPolicy extends DependentPolicy {
 			allDependents = null;
 	}
 
-	public Class loadClass(String name) {
+	public Class<?> loadClass(String name) {
 		if (allDependents == null)
 			return null;
 
-		Class result = null;
+		Class<?> result = null;
 		int size = allDependents.size();
 		for (int i = 0; i < size && result == null; i++) {
 			try {
-				BundleLoaderProxy proxy = buddyRequester.getLoaderProxy((BundleDescription) allDependents.get(i));
+				BundleLoaderProxy proxy = buddyRequester.getLoaderProxy(allDependents.get(i));
 				if (proxy == null)
 					continue;
 				result = proxy.getBundleLoader().findClass(name);
@@ -92,7 +92,7 @@ public class RegisteredPolicy extends DependentPolicy {
 		URL result = null;
 		int size = allDependents.size();
 		for (int i = 0; i < size && result == null; i++) {
-			BundleLoaderProxy proxy = buddyRequester.getLoaderProxy((BundleDescription) allDependents.get(i));
+			BundleLoaderProxy proxy = buddyRequester.getLoaderProxy(allDependents.get(i));
 			if (proxy == null)
 				continue;
 			result = proxy.getBundleLoader().findResource(name);
@@ -100,15 +100,15 @@ public class RegisteredPolicy extends DependentPolicy {
 		return result;
 	}
 
-	public Enumeration loadResources(String name) {
+	public Enumeration<URL> loadResources(String name) {
 		if (allDependents == null)
 			return null;
 
-		Enumeration results = null;
+		Enumeration<URL> results = null;
 		int size = allDependents.size();
 		for (int i = 0; i < size; i++) {
 			try {
-				BundleLoaderProxy proxy = buddyRequester.getLoaderProxy((BundleDescription) allDependents.get(i));
+				BundleLoaderProxy proxy = buddyRequester.getLoaderProxy(allDependents.get(i));
 				if (proxy == null)
 					continue;
 				results = BundleLoader.compoundEnumerations(results, proxy.getBundleLoader().findResources(name));
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java
index 04d12f1..a72e6ac 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java
@@ -35,8 +35,8 @@ public class SystemPolicy implements IBuddyPolicy {
 	public static SystemPolicy getInstance(final byte type) {
 		if (instances[type] == null) {
 			instances[type] = new SystemPolicy();
-			instances[type].classLoader = (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
+			instances[type].classLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+				public ClassLoader run() {
 					return createClassLoader(type);
 				}
 			});
@@ -70,7 +70,7 @@ public class SystemPolicy implements IBuddyPolicy {
 		return null;
 	}
 
-	public Class loadClass(String name) {
+	public Class<?> loadClass(String name) {
 		try {
 			return classLoader.loadClass(name);
 		} catch (ClassNotFoundException e) {
@@ -82,7 +82,7 @@ public class SystemPolicy implements IBuddyPolicy {
 		return classLoader.getResource(name);
 	}
 
-	public Enumeration loadResources(String name) {
+	public Enumeration<URL> loadResources(String name) {
 		try {
 			return classLoader.getResources(name);
 		} catch (IOException e) {
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/BundlePermissions.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/BundlePermissions.java
index 659410a..5ade23f 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/BundlePermissions.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/BundlePermissions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,12 +20,12 @@ public final class BundlePermissions extends PermissionCollection {
 	private static final long serialVersionUID = -5443618108312606612L;
 
 	// Note that this forces the Enumeration inner class to be loaded as soon as possible (see bug 119069)  
-	static final Enumeration EMPTY_ENUMERATION = new Enumeration() {
+	static final Enumeration<Permission> EMPTY_ENUMERATION = new Enumeration<Permission>() {
 		public boolean hasMoreElements() {
 			return false;
 		}
 
-		public Object nextElement() {
+		public Permission nextElement() {
 			throw new NoSuchElementException();
 		}
 	};
@@ -47,7 +47,7 @@ public final class BundlePermissions extends PermissionCollection {
 		throw new SecurityException();
 	}
 
-	public Enumeration elements() {
+	public Enumeration<Permission> elements() {
 		// TODO return an empty enumeration for now; 
 		// It does not seem possible to do this properly with multiple exports and conditional permissions.
 		// When looking to fix this be sure the Enumeration class is loaded as soon as possible (see bug 119069)
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java
index dd94b59..10d5ce7 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ public class EquinoxSecurityManager extends SecurityManager {
 	 * CheckPermissionAction classes load early. Otherwise, we run into problems later.
 	 */
 	static {
-		Class c;
+		Class<?> c;
 		c = CheckPermissionAction.class;
 		c = CheckContext.class;
 		c.getName(); // to prevent compiler warnings
@@ -36,16 +36,16 @@ public class EquinoxSecurityManager extends SecurityManager {
 
 	static class CheckContext {
 		// A non zero depth indicates that we are doing a recursive permission check.
-		ArrayList depthCondSets = new ArrayList(2);
-		ArrayList accs = new ArrayList(2);
-		ArrayList CondClassSet;
+		List<List<Decision[]>> depthCondSets = new ArrayList<List<Decision[]>>(2);
+		List<AccessControlContext> accs = new ArrayList<AccessControlContext>(2);
+		List<Class<?>> CondClassSet;
 
 		public int getDepth() {
 			return depthCondSets.size() - 1;
 		}
 	}
 
-	static class CheckPermissionAction implements PrivilegedAction {
+	static class CheckPermissionAction implements PrivilegedAction<Object> {
 		Permission perm;
 		Object context;
 		EquinoxSecurityManager fsm;
@@ -62,18 +62,18 @@ public class EquinoxSecurityManager extends SecurityManager {
 		}
 	}
 
-	private final ThreadLocal localCheckContext = new ThreadLocal();
+	private final ThreadLocal<CheckContext> localCheckContext = new ThreadLocal<CheckContext>();
 
-	boolean addConditionsForDomain(Decision results[]) {
-		CheckContext cc = (CheckContext) localCheckContext.get();
+	boolean addConditionsForDomain(Decision[] results) {
+		CheckContext cc = localCheckContext.get();
 		if (cc == null) {
 			// We are being invoked in a weird way. Perhaps the ProtectionDomain is
 			// getting invoked directly.
 			return false;
 		}
-		ArrayList condSets = (ArrayList) cc.depthCondSets.get(cc.getDepth());
+		List<Decision[]> condSets = cc.depthCondSets.get(cc.getDepth());
 		if (condSets == null) {
-			condSets = new ArrayList(1);
+			condSets = new ArrayList<Decision[]>(1);
 			cc.depthCondSets.set(cc.getDepth(), condSets);
 		}
 		condSets.add(results);
@@ -98,15 +98,15 @@ public class EquinoxSecurityManager extends SecurityManager {
 	 * rather than the SecurityManager.
 	 */
 	public AccessControlContext getContextToBeChecked() {
-		CheckContext cc = (CheckContext) localCheckContext.get();
+		CheckContext cc = localCheckContext.get();
 		if (cc != null && cc.accs != null && !cc.accs.isEmpty())
-			return (AccessControlContext) cc.accs.get(cc.accs.size() - 1);
+			return cc.accs.get(cc.accs.size() - 1);
 		return null;
 	}
 
 	void internalCheckPermission(Permission perm, Object context) {
 		AccessControlContext acc = (AccessControlContext) context;
-		CheckContext cc = (CheckContext) localCheckContext.get();
+		CheckContext cc = localCheckContext.get();
 		if (cc == null) {
 			cc = new CheckContext();
 			localCheckContext.set(cc);
@@ -116,13 +116,12 @@ public class EquinoxSecurityManager extends SecurityManager {
 		try {
 			acc.checkPermission(perm);
 			// We want to pop the first set of postponed conditions and process them
-			ArrayList conditionSets = (ArrayList) cc.depthCondSets.get(cc.getDepth());
+			List<Decision[]> conditionSets = cc.depthCondSets.get(cc.getDepth());
 			if (conditionSets == null)
 				return;
 			// TODO the spec seems impossible to implement just doing the simple thing for now
-			HashMap conditionDictionaries = new HashMap();
-			for (Iterator iConditionSets = conditionSets.iterator(); iConditionSets.hasNext();) {
-				Decision[] domainDecisions = (Decision[]) iConditionSets.next();
+			Map<Class<? extends Condition>, Dictionary<Object, Object>> conditionDictionaries = new HashMap<Class<? extends Condition>, Dictionary<Object, Object>>();
+			for (Decision[] domainDecisions : conditionSets) {
 				boolean grant = false;
 				for (int i = 0; i < domainDecisions.length; i++) {
 					if (domainDecisions[i] == null)
@@ -154,17 +153,17 @@ public class EquinoxSecurityManager extends SecurityManager {
 		}
 	}
 
-	private int getPostponedDecision(Decision decision, HashMap conditionDictionaries, CheckContext cc) {
+	private int getPostponedDecision(Decision decision, Map<Class<? extends Condition>, Dictionary<Object, Object>> conditionDictionaries, CheckContext cc) {
 		Condition[] postponed = decision.postponed;
 		for (int i = 0; i < postponed.length; i++) {
-			Dictionary condContext = (Dictionary) conditionDictionaries.get(postponed[i].getClass());
+			Dictionary<Object, Object> condContext = conditionDictionaries.get(postponed[i].getClass());
 			if (condContext == null) {
-				condContext = new Hashtable();
+				condContext = new Hashtable<Object, Object>();
 				conditionDictionaries.put(postponed[i].getClass(), condContext);
 			}
 			// prevent recursion into Condition
 			if (cc.CondClassSet == null)
-				cc.CondClassSet = new ArrayList(2);
+				cc.CondClassSet = new ArrayList<Class<?>>(2);
 			if (cc.CondClassSet.contains(postponed[i].getClass()))
 				return SecurityTable.ABSTAIN;
 			cc.CondClassSet.add(postponed[i].getClass());
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java
index c933323..472c350 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,17 +11,18 @@
 package org.eclipse.osgi.internal.permadmin;
 
 import java.util.HashMap;
+import java.util.Map;
 import org.osgi.service.permissionadmin.PermissionInfo;
 
 public class PermissionAdminTable {
-	private final HashMap locations = new HashMap();
+	private final Map<String, PermissionInfoCollection> locations = new HashMap<String, PermissionInfoCollection>();
 
 	String[] getLocations() {
-		return (String[]) locations.keySet().toArray(new String[locations.size()]);
+		return locations.keySet().toArray(new String[locations.size()]);
 	}
 
 	PermissionInfo[] getPermissions(String location) {
-		PermissionInfoCollection collection = (PermissionInfoCollection) locations.get(location);
+		PermissionInfoCollection collection = locations.get(location);
 		if (collection != null)
 			return collection.getPermissionInfos();
 		return null;
@@ -36,7 +37,7 @@ public class PermissionAdminTable {
 	}
 
 	PermissionInfoCollection getCollection(String location) {
-		return (PermissionInfoCollection) locations.get(location);
+		return locations.get(location);
 	}
 
 	PermissionInfoCollection[] getCollections() {
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
index cbea15e..8d72ff1 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
@@ -14,20 +14,19 @@ import java.io.File;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.security.*;
-import java.util.Enumeration;
-import java.util.HashMap;
+import java.util.*;
 import org.osgi.service.permissionadmin.PermissionInfo;
 
 public final class PermissionInfoCollection extends PermissionCollection {
 	private static final long serialVersionUID = 3140511562980923957L;
 	/* Used to find permission constructors in addPermissions */
-	static private final Class twoStringClassArray[] = new Class[] {String.class, String.class};
-	static private final Class oneStringClassArray[] = new Class[] {String.class};
-	static private final Class noArgClassArray[] = new Class[] {};
-	static private final Class[][] permClassArrayArgs = new Class[][] {noArgClassArray, oneStringClassArray, twoStringClassArray};
+	static private final Class<?> twoStringClassArray[] = new Class[] {String.class, String.class};
+	static private final Class<?> oneStringClassArray[] = new Class[] {String.class};
+	static private final Class<?> noArgClassArray[] = new Class[] {};
+	static private final Class<?>[][] permClassArrayArgs = new Class[][] {noArgClassArray, oneStringClassArray, twoStringClassArray};
 
 	/* @GuardedBy(cachedPermisssionCollections) */
-	private final HashMap cachedPermissionCollections = new HashMap();
+	private final Map<Class<? extends Permission>, PermissionCollection> cachedPermissionCollections = new HashMap<Class<? extends Permission>, PermissionCollection>();
 	private final boolean hasAllPermission;
 	private final PermissionInfo[] permInfos;
 
@@ -45,7 +44,7 @@ public final class PermissionInfoCollection extends PermissionCollection {
 		throw new SecurityException();
 	}
 
-	public Enumeration elements() {
+	public Enumeration<Permission> elements() {
 		// TODO return an empty enumeration for now; 
 		return BundlePermissions.EMPTY_ENUMERATION;
 	}
@@ -53,10 +52,10 @@ public final class PermissionInfoCollection extends PermissionCollection {
 	public boolean implies(Permission perm) {
 		if (hasAllPermission)
 			return true;
-		Class permClass = perm.getClass();
+		Class<? extends Permission> permClass = perm.getClass();
 		PermissionCollection collection;
 		synchronized (cachedPermissionCollections) {
-			collection = (PermissionCollection) cachedPermissionCollections.get(permClass);
+			collection = cachedPermissionCollections.get(permClass);
 		}
 		// must populate the collection outside of the lock to prevent class loader deadlock
 		if (collection == null) {
@@ -66,11 +65,11 @@ public final class PermissionInfoCollection extends PermissionCollection {
 			try {
 				addPermissions(collection, permClass);
 			} catch (Exception e) {
-				throw (SecurityException) new SecurityException("Exception creating permissions: " + e.getClass().getName() + ": " + e.getMessage()).initCause(e); //$NON-NLS-1$ //$NON-NLS-2$
+				throw (SecurityException) new SecurityException("Exception creating permissions: " + permClass + ": " + e.getMessage()).initCause(e); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 			synchronized (cachedPermissionCollections) {
 				// check to see if another thread beat this thread at adding the collection
-				PermissionCollection exists = (PermissionCollection) cachedPermissionCollections.get(permClass);
+				PermissionCollection exists = cachedPermissionCollections.get(permClass);
 				if (exists != null)
 					collection = exists;
 				else
@@ -84,9 +83,9 @@ public final class PermissionInfoCollection extends PermissionCollection {
 		return permInfos;
 	}
 
-	private void addPermissions(PermissionCollection collection, Class permClass) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
+	private void addPermissions(PermissionCollection collection, Class<? extends Permission> permClass) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
 		String permClassName = permClass.getName();
-		Constructor constructor = null;
+		Constructor<? extends Permission> constructor = null;
 		int numArgs = -1;
 		for (int i = permClassArrayArgs.length - 1; i >= 0; i--) {
 			try {
@@ -120,7 +119,7 @@ public final class PermissionInfoCollection extends PermissionCollection {
 						}
 					}
 				}
-				collection.add((Permission) constructor.newInstance(args));
+				collection.add(constructor.newInstance((Object[]) args));
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionsHash.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionsHash.java
index b2dc8a8..667f23e 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionsHash.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionsHash.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ class PermissionsHash extends PermissionCollection {
 	/**
 	 * A hashtable to store the elements of the collection.
 	 */
-	Hashtable perms = new Hashtable(8);
+	Hashtable<Permission, Permission> perms = new Hashtable<Permission, Permission>(8);
 
 	/**
 	 * Constructs a new instance of this class.
@@ -68,7 +68,7 @@ class PermissionsHash extends PermissionCollection {
 	 * @return		Enumeration
 	 *					the permissions in the receiver.
 	 */
-	public Enumeration elements() {
+	public Enumeration<Permission> elements() {
 		return perms.keys();
 	}
 
@@ -84,16 +84,16 @@ class PermissionsHash extends PermissionCollection {
 	 *					the permission to check
 	 */
 	public boolean implies(Permission perm) {
-		Permission p = (Permission) perms.get(perm);
+		Permission p = perms.get(perm);
 
 		if ((p != null) && p.implies(perm)) {
 			return true;
 		}
 
-		Enumeration permsEnum = elements();
+		Enumeration<Permission> permsEnum = elements();
 
 		while (permsEnum.hasMoreElements()) {
-			if (((Permission) permsEnum.nextElement()).implies(perm)) {
+			if (permsEnum.nextElement().implies(perm)) {
 				return true;
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurePermissionStorage.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurePermissionStorage.java
index 39b87d0..270212b 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurePermissionStorage.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurePermissionStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,11 +16,11 @@ import java.security.*;
 import org.eclipse.osgi.framework.adaptor.PermissionStorage;
 
 /**
- * PermissionStorage privileged action class.
+ * PermissionStorage privileged action class.  This class is not thread safe.  Callers
+ * must ensure multiple threads do not call methods on this class at the same time.
  */
-
-public class SecurePermissionStorage implements PermissionStorage, PrivilegedExceptionAction {
-	private PermissionStorage storage;
+public class SecurePermissionStorage implements PermissionStorage, PrivilegedExceptionAction<String[]> {
+	private final PermissionStorage storage;
 	private String location;
 	private String[] data;
 	private String[] infos;
@@ -35,7 +35,7 @@ public class SecurePermissionStorage implements PermissionStorage, PrivilegedExc
 		this.storage = storage;
 	}
 
-	public Object run() throws IOException {
+	public String[] run() throws IOException {
 		switch (action) {
 			case GET :
 				return storage.getPermissionData(location);
@@ -54,12 +54,12 @@ public class SecurePermissionStorage implements PermissionStorage, PrivilegedExc
 		throw new UnsupportedOperationException();
 	}
 
-	public String[] getPermissionData(String location) throws IOException {
-		this.location = location;
+	public String[] getPermissionData(String loc) throws IOException {
+		this.location = loc;
 		this.action = GET;
 
 		try {
-			return (String[]) AccessController.doPrivileged(this);
+			return AccessController.doPrivileged(this);
 		} catch (PrivilegedActionException e) {
 			throw (IOException) e.getException();
 		}
@@ -69,7 +69,7 @@ public class SecurePermissionStorage implements PermissionStorage, PrivilegedExc
 		this.action = LOCATION;
 
 		try {
-			return (String[]) AccessController.doPrivileged(this);
+			return AccessController.doPrivileged(this);
 		} catch (PrivilegedActionException e) {
 			throw (IOException) e.getException();
 		}
@@ -87,9 +87,9 @@ public class SecurePermissionStorage implements PermissionStorage, PrivilegedExc
 		}
 	}
 
-	public void saveConditionalPermissionInfos(String[] infos) throws IOException {
+	public void saveConditionalPermissionInfos(String[] updatedInfos) throws IOException {
 		this.action = SAVE_INFOS;
-		this.infos = infos;
+		this.infos = updatedInfos;
 		try {
 			AccessController.doPrivileged(this);
 		} catch (PrivilegedActionException e) {
@@ -101,7 +101,7 @@ public class SecurePermissionStorage implements PermissionStorage, PrivilegedExc
 	public String[] getConditionalPermissionInfos() throws IOException {
 		this.action = GET_INFOS;
 		try {
-			return (String[]) AccessController.doPrivileged(this);
+			return AccessController.doPrivileged(this);
 		} catch (PrivilegedActionException e) {
 			throw (IOException) e.getException();
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
index cc369b1..356c4ce 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
@@ -202,9 +202,10 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 
 	void delete(SecurityRow securityRow, boolean firstTry) {
 		ConditionalPermissionUpdate update = newConditionalPermissionUpdate();
-		List rows = update.getConditionalPermissionInfos();
-		for (Iterator iRows = rows.iterator(); iRows.hasNext();) {
-			ConditionalPermissionInfo info = (ConditionalPermissionInfo) iRows.next();
+		@SuppressWarnings("unchecked")
+		List<ConditionalPermissionInfo> rows = update.getConditionalPermissionInfos();
+		for (Iterator<ConditionalPermissionInfo> iRows = rows.iterator(); iRows.hasNext();) {
+			ConditionalPermissionInfo info = iRows.next();
 			if (securityRow.getName().equals(info.getName())) {
 				iRows.remove();
 				synchronized (lock) {
@@ -257,14 +258,14 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 	/**
 	 * @deprecated
 	 */
-	public Enumeration getConditionalPermissionInfos() {
+	public Enumeration<ConditionalPermissionInfo> getConditionalPermissionInfos() {
 		// could implement our own Enumeration, but we don't care about performance here.  Just do something simple:
 		synchronized (lock) {
 			SecurityRow[] rows = condAdminTable.getRows();
-			Vector vRows = new Vector(rows.length);
+			List<ConditionalPermissionInfo> vRows = new ArrayList<ConditionalPermissionInfo>(rows.length);
 			for (int i = 0; i < rows.length; i++)
 				vRows.add(rows[i]);
-			return vRows.elements();
+			return Collections.enumeration(vRows);
 		}
 	}
 
@@ -290,12 +291,13 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 
 	private ConditionalPermissionInfo setConditionalPermissionInfo(String name, ConditionInfo[] conds, PermissionInfo[] perms, boolean firstTry) {
 		ConditionalPermissionUpdate update = newConditionalPermissionUpdate();
-		List rows = update.getConditionalPermissionInfos();
+		@SuppressWarnings("unchecked")
+		List<ConditionalPermissionInfo> rows = update.getConditionalPermissionInfos();
 		ConditionalPermissionInfo newInfo = newConditionalPermissionInfo(name, conds, perms, ConditionalPermissionInfo.ALLOW);
 		int index = -1;
 		if (name != null) {
 			for (int i = 0; i < rows.size() && index < 0; i++) {
-				ConditionalPermissionInfo info = (ConditionalPermissionInfo) rows.get(i);
+				ConditionalPermissionInfo info = rows.get(i);
 				if (name.equals(info.getName())) {
 					index = i;
 				}
@@ -318,13 +320,13 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 		}
 	}
 
-	boolean commit(List rows, long updateStamp) {
+	boolean commit(List<ConditionalPermissionInfo> rows, long updateStamp) {
 		checkAllPermission();
 		synchronized (lock) {
 			if (updateStamp != timeStamp)
 				return false;
 			SecurityRow[] newRows = new SecurityRow[rows.size()];
-			Collection names = new ArrayList();
+			Collection<String> names = new ArrayList<String>();
 			for (int i = 0; i < newRows.length; i++) {
 				Object rowObj = rows.get(i);
 				if (!(rowObj instanceof ConditionalPermissionInfo))
@@ -430,7 +432,7 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 		DataInputStream in = null;
 		try {
 			in = new DataInputStream(resource.openStream());
-			ArrayList permissions = new ArrayList();
+			List<PermissionInfo> permissions = new ArrayList<PermissionInfo>();
 			BufferedReader reader;
 			try {
 				reader = new BufferedReader(new InputStreamReader(in, "UTF8")); //$NON-NLS-1$
@@ -456,7 +458,7 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 			}
 			int size = permissions.size();
 			if (size > 0)
-				info = (PermissionInfo[]) permissions.toArray(new PermissionInfo[size]);
+				info = permissions.toArray(new PermissionInfo[size]);
 		} catch (IOException e) {
 			// do nothing
 		} finally {
@@ -471,15 +473,15 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 	}
 
 	private static Bundle createMockBundle(String[] signers) {
-		Map /* <X509Certificate, List<X509Certificate>> */signersMap = new HashMap();
+		Map<X509Certificate, List<X509Certificate>> signersMap = new HashMap<X509Certificate, List<X509Certificate>>();
 		for (int i = 0; i < signers.length; i++) {
-			List chain = parseDNchain(signers[i]);
-			List /* <X509Certificate> */signersList = new ArrayList();
+			List<String> chain = parseDNchain(signers[i]);
+			List<X509Certificate> signersList = new ArrayList<X509Certificate>();
 			Principal subject = null, issuer = null;
 			X509Certificate first = null;
-			for (Iterator iChain = chain.iterator(); iChain.hasNext();) {
-				subject = issuer == null ? new MockPrincipal((String) iChain.next()) : issuer;
-				issuer = iChain.hasNext() ? new MockPrincipal((String) iChain.next()) : subject;
+			for (Iterator<String> iChain = chain.iterator(); iChain.hasNext();) {
+				subject = issuer == null ? new MockPrincipal(iChain.next()) : issuer;
+				issuer = iChain.hasNext() ? new MockPrincipal(iChain.next()) : subject;
 				X509Certificate cert = new MockX509Certificate(subject, issuer);
 				if (first == null)
 					first = cert;
@@ -493,13 +495,13 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 	}
 
 	static class MockBundle implements Bundle {
-		private final Map signers;
+		private final Map<X509Certificate, List<X509Certificate>> signers;
 
-		MockBundle(Map signers) {
+		MockBundle(Map<X509Certificate, List<X509Certificate>> signers) {
 			this.signers = signers;
 		}
 
-		public Enumeration findEntries(String path, String filePattern, boolean recurse) {
+		public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
 			return null;
 		}
 
@@ -515,15 +517,15 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 			return null;
 		}
 
-		public Enumeration getEntryPaths(String path) {
+		public Enumeration<String> getEntryPaths(String path) {
 			return null;
 		}
 
-		public Dictionary getHeaders() {
-			return new Hashtable();
+		public Dictionary<String, String> getHeaders() {
+			return new Hashtable<String, String>();
 		}
 
-		public Dictionary getHeaders(String locale) {
+		public Dictionary<String, String> getHeaders(String locale) {
 			return getHeaders();
 		}
 
@@ -535,7 +537,7 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 			return ""; //$NON-NLS-1$
 		}
 
-		public ServiceReference[] getRegisteredServices() {
+		public ServiceReference<?>[] getRegisteredServices() {
 			return null;
 		}
 
@@ -546,16 +548,16 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 		/**
 		 * @throws IOException  
 		 */
-		public Enumeration getResources(String name) throws IOException {
+		public Enumeration<URL> getResources(String name) throws IOException {
 			return null;
 		}
 
-		public ServiceReference[] getServicesInUse() {
+		public ServiceReference<?>[] getServicesInUse() {
 			return null;
 		}
 
-		public Map getSignerCertificates(int signersType) {
-			return new HashMap(signers);
+		public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+			return new HashMap<X509Certificate, List<X509Certificate>>(signers);
 		}
 
 		public int getState() {
@@ -577,7 +579,7 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 		/**
 		 * @throws ClassNotFoundException  
 		 */
-		public Class loadClass(String name) throws ClassNotFoundException {
+		public Class<?> loadClass(String name) throws ClassNotFoundException {
 			throw new IllegalStateException();
 		}
 
@@ -629,6 +631,18 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 		public void update(InputStream in) throws BundleException {
 			throw new IllegalStateException();
 		}
+
+		public int compareTo(Bundle o) {
+			return 0;
+		}
+
+		public <A> A adapt(Class<A> type) {
+			throw new IllegalStateException();
+		}
+
+		public File getDataFile(String filename) {
+			return null;
+		}
 	}
 
 	private static class MockX509Certificate extends X509Certificate {
@@ -768,7 +782,7 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 			throw new UnsupportedOperationException();
 		}
 
-		public Set getCriticalExtensionOIDs() {
+		public Set<String> getCriticalExtensionOIDs() {
 			throw new UnsupportedOperationException();
 		}
 
@@ -776,7 +790,7 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 			throw new UnsupportedOperationException();
 		}
 
-		public Set getNonCriticalExtensionOIDs() {
+		public Set<String> getNonCriticalExtensionOIDs() {
 			throw new UnsupportedOperationException();
 		}
 
@@ -815,11 +829,11 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 		}
 	}
 
-	private static ArrayList parseDNchain(String dnChain) {
+	private static List<String> parseDNchain(String dnChain) {
 		if (dnChain == null) {
 			throw new IllegalArgumentException("The DN chain must not be null."); //$NON-NLS-1$
 		}
-		ArrayList parsed = new ArrayList();
+		List<String> parsed = new ArrayList<String>();
 		int startIndex = 0;
 		startIndex = skipSpaces(dnChain, startIndex);
 		while (startIndex < dnChain.length()) {
@@ -841,7 +855,7 @@ public final class SecurityAdmin implements PermissionAdmin, ConditionalPermissi
 				endIndex++;
 			}
 			if (endIndex > dnChain.length()) {
-				throw new IllegalArgumentException("unterminated escape");
+				throw new IllegalArgumentException("unterminated escape"); //$NON-NLS-1$
 			}
 			parsed.add(dnChain.substring(startIndex, endIndex));
 			startIndex = endIndex + 1;
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java
index fb3d9b3..25d2694 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@ import org.osgi.service.permissionadmin.PermissionInfo;
 
 public final class SecurityRow implements ConditionalPermissionInfo {
 	/* Used to find condition constructors getConditions */
-	static final Class[] conditionMethodArgs = new Class[] {Bundle.class, ConditionInfo.class};
+	static final Class<?>[] conditionMethodArgs = new Class[] {Bundle.class, ConditionInfo.class};
 	static Condition[] ABSTAIN_LIST = new Condition[0];
 	static Condition[] SATISFIED_LIST = new Condition[0];
 	static final Decision DECISION_ABSTAIN = new Decision(SecurityTable.ABSTAIN, null, null, null);
@@ -32,7 +32,7 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 	private final PermissionInfoCollection permissionInfoCollection;
 	private final boolean deny;
 	/* GuardedBy(bundleConditions) */
-	final HashMap bundleConditions;
+	final Map<BundlePermissions, Condition[]> bundleConditions;
 
 	public SecurityRow(SecurityAdmin securityAdmin, String name, ConditionInfo[] conditionInfos, PermissionInfo[] permissionInfos, String decision) {
 		if (permissionInfos == null || permissionInfos.length == 0)
@@ -50,7 +50,7 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 		if (conditionInfos == null || conditionInfos.length == 0)
 			bundleConditions = null;
 		else
-			bundleConditions = new HashMap();
+			bundleConditions = new HashMap<BundlePermissions, Condition[]>();
 	}
 
 	static SecurityRowSnapShot createSecurityRowSnapShot(String encoded) {
@@ -103,8 +103,8 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 		if (decision.length() == 0 || (!ConditionalPermissionInfo.DENY.equalsIgnoreCase(decision) && !ConditionalPermissionInfo.ALLOW.equalsIgnoreCase(decision)))
 			throw new IllegalArgumentException(encoded);
 
-		ArrayList condList = new ArrayList();
-		ArrayList permList = new ArrayList();
+		List<ConditionInfo> condList = new ArrayList<ConditionInfo>();
+		List<PermissionInfo> permList = new ArrayList<PermissionInfo>();
 		int pos = start + 1;
 		while (pos < end) {
 			while (pos < end && chars[pos] != '[' && chars[pos] != '(')
@@ -134,8 +134,8 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 		}
 		if (permList.size() == 0)
 			throw new IllegalArgumentException("No Permission infos: " + encoded); //$NON-NLS-1$
-		ConditionInfo[] conds = (ConditionInfo[]) condList.toArray(new ConditionInfo[condList.size()]);
-		PermissionInfo[] perms = (PermissionInfo[]) permList.toArray(new PermissionInfo[permList.size()]);
+		ConditionInfo[] conds = condList.toArray(new ConditionInfo[condList.size()]);
+		PermissionInfo[] perms = permList.toArray(new PermissionInfo[permList.size()]);
 		if (securityAdmin == null)
 			return new SecurityRowSnapShot(encodedName, conds, perms, decision);
 		return new SecurityRow(securityAdmin, encodedName, conds, perms, decision);
@@ -243,14 +243,14 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 			/*
 			 * TODO: Can we pre-get the Constructors in our own constructor
 			 */
-			Class clazz;
+			Class<?> clazz;
 			try {
 				clazz = Class.forName(conditionInfos[i].getType());
 			} catch (ClassNotFoundException e) {
 				/* If the class isn't there, we fail */
 				return null;
 			}
-			Constructor constructor = null;
+			Constructor<?> constructor = null;
 			Method method = null;
 			try {
 				method = clazz.getMethod("getCondition", conditionMethodArgs); //$NON-NLS-1$
@@ -287,7 +287,7 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 			return evaluatePermission(permission);
 		Condition[] conditions;
 		synchronized (bundleConditions) {
-			conditions = (Condition[]) bundleConditions.get(bundlePermissions);
+			conditions = bundleConditions.get(bundlePermissions);
 			if (conditions == null) {
 				conditions = getConditions(bundlePermissions.getBundle());
 				bundleConditions.put(bundlePermissions, conditions);
@@ -299,7 +299,7 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 			return evaluatePermission(permission);
 
 		boolean empty = true;
-		List postponedConditions = null;
+		List<Condition> postponedConditions = null;
 		Decision postponedPermCheck = null;
 		for (int i = 0; i < conditions.length; i++) {
 			Condition condition = conditions[i];
@@ -327,7 +327,7 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 					return postponedPermCheck; // no need to postpone the condition if the row abstains
 				// this row will deny or allow the permission; must queue the postponed condition
 				if (postponedConditions == null)
-					postponedConditions = new ArrayList(1);
+					postponedConditions = new ArrayList<Condition>(1);
 				postponedConditions.add(condition);
 			}
 			empty &= conditions[i] == null;
@@ -338,7 +338,7 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 			}
 		}
 		if (postponedPermCheck != null)
-			return new Decision(postponedPermCheck.decision | SecurityTable.POSTPONED, (Condition[]) postponedConditions.toArray(new Condition[postponedConditions.size()]), this, bundlePermissions);
+			return new Decision(postponedPermCheck.decision | SecurityTable.POSTPONED, postponedConditions.toArray(new Condition[postponedConditions.size()]), this, bundlePermissions);
 		return evaluatePermission(permission);
 	}
 
@@ -436,7 +436,7 @@ public final class SecurityRow implements ConditionalPermissionInfo {
 				return; // do nothing
 			if (isSatisfied) {
 				synchronized (row.bundleConditions) {
-					Condition[] rowConditions = (Condition[]) row.bundleConditions.get(bundlePermissions);
+					Condition[] rowConditions = row.bundleConditions.get(bundlePermissions);
 					boolean isEmpty = true;
 					for (int i = 0; i < rowConditions.length; i++) {
 						if (rowConditions[i] == condition)
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTable.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTable.java
index 62d4126..72d587d 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTable.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -123,7 +123,7 @@ public class SecurityTable extends PermissionCollection {
 		throw new SecurityException();
 	}
 
-	public Enumeration elements() {
+	public Enumeration<Permission> elements() {
 		return BundlePermissions.EMPTY_ENUMERATION;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
index 4214924..286e328 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,19 +12,20 @@ package org.eclipse.osgi.internal.permadmin;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.osgi.service.condpermadmin.ConditionalPermissionInfo;
 import org.osgi.service.condpermadmin.ConditionalPermissionUpdate;
 
 public class SecurityTableUpdate implements ConditionalPermissionUpdate {
 
 	private final SecurityAdmin securityAdmin;
-	private final List rows;
+	private final List<ConditionalPermissionInfo> rows;
 	private final long timeStamp;
 
 	public SecurityTableUpdate(SecurityAdmin securityAdmin, SecurityRow[] rows, long timeStamp) {
 		this.securityAdmin = securityAdmin;
 		this.timeStamp = timeStamp;
 		// must make a snap shot of the security rows.
-		this.rows = new ArrayList(rows.length);
+		this.rows = new ArrayList<ConditionalPermissionInfo>(rows.length);
 		for (int i = 0; i < rows.length; i++)
 			// Use SecurityRowSnapShot to prevent modification before commit 
 			// and to throw exceptions from delete
@@ -35,7 +36,7 @@ public class SecurityTableUpdate implements ConditionalPermissionUpdate {
 		return securityAdmin.commit(rows, timeStamp);
 	}
 
-	public List getConditionalPermissionInfos() {
+	public List<ConditionalPermissionInfo> getConditionalPermissionInfos() {
 		// it is fine to return the internal list; it is a snap shot and we allow clients to modify it.
 		return rows;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/implied.permissions b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/implied.permissions
index 1bf4626..1ddcfe9 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/implied.permissions
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/implied.permissions
@@ -1,5 +1,5 @@
 ########################################################################
-# Copyright (c) 2003, 2005 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials 
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -44,5 +44,7 @@
 (java.io.FilePermission "" "read")
 (java.io.FilePermission "-" "read,write,delete")
 
-# Added for OSGi SP R3
+# Added for OSGi SP R3 - this likely is not needed any more
 (org.osgi.framework.PackagePermission "java.*" "import")
+# Added for OSGi R4.3
+(org.osgi.framework.CapabilityPermission "osgi.ee" "require")
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/DefaultProfileLogger.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/DefaultProfileLogger.java
index b3b27e1..00d60d9 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/DefaultProfileLogger.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/DefaultProfileLogger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,8 +43,8 @@ public class DefaultProfileLogger implements ProfileLogger {
 	private StringBuffer padsb = new StringBuffer(16); // to prevent creating this over and over
 	protected int indent;
 	protected int timePaddingLength;
-	protected Stack scopeStack;
-	protected Map scopeToAccumPerfDataMap;
+	protected Stack<AccumPerfScope> scopeStack;
+	protected Map<String, AccumPerfData> scopeToAccumPerfDataMap;
 
 	public DefaultProfileLogger() {
 		initProps();
@@ -168,9 +168,9 @@ public class DefaultProfileLogger implements ProfileLogger {
 	public synchronized void accumLogEnter(String scope) {
 		// Initialize our data structures
 		if (scopeStack == null)
-			scopeStack = new Stack();
+			scopeStack = new Stack<AccumPerfScope>();
 		if (scopeToAccumPerfDataMap == null)
-			scopeToAccumPerfDataMap = new TreeMap();
+			scopeToAccumPerfDataMap = new TreeMap<String, AccumPerfData>();
 
 		// We want getTime() to evaluate as late as possible
 		scopeStack.push(new AccumPerfScope(scope, getTime()));
@@ -182,19 +182,19 @@ public class DefaultProfileLogger implements ProfileLogger {
 
 		// Initialize our data structures
 		if (scopeStack == null)
-			scopeStack = new Stack();
+			scopeStack = new Stack<AccumPerfScope>();
 		if (scopeToAccumPerfDataMap == null)
-			scopeToAccumPerfDataMap = new TreeMap();
+			scopeToAccumPerfDataMap = new TreeMap<String, AccumPerfData>();
 
 		// Do our calculations
-		AccumPerfScope then = (AccumPerfScope) scopeStack.pop();
+		AccumPerfScope then = scopeStack.pop();
 		if (then == null)
 			System.err.println("ACCUM PERF ERROR: Scope stack empty: " + scope); //$NON-NLS-1$
 		else {
 			if (!then.scope.equals(scope))
 				System.err.println("ACCUM PERF ERROR: Scope mismatch: then='" + then.scope + "', now='" + scope + "'"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 
-			AccumPerfData now = (AccumPerfData) scopeToAccumPerfDataMap.get(scope);
+			AccumPerfData now = scopeToAccumPerfDataMap.get(scope);
 			if (now == null) {
 				now = new AccumPerfData(scope);
 				scopeToAccumPerfDataMap.put(scope, now);
@@ -291,9 +291,7 @@ public class DefaultProfileLogger implements ProfileLogger {
 			return; // No data; nothing to do
 		timelog.append("\r\n"); //$NON-NLS-1$
 		timelog.append("Cumulative Log:\r\n"); //$NON-NLS-1$
-		Iterator iter = scopeToAccumPerfDataMap.values().iterator();
-		while (iter.hasNext()) {
-			AccumPerfData d = (AccumPerfData) iter.next();
+		for (AccumPerfData d : scopeToAccumPerfDataMap.values()) {
 			timelog.append(accumEntryReport(d));
 		}
 		scopeToAccumPerfDataMap.clear();
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/Profile.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/Profile.java
index b8c49ca..aed3e7e 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/Profile.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/profile/Profile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -249,7 +249,7 @@ public class Profile {
 
 		// Try to create it by class name
 		if (profileLoggerClassName != null) {
-			Class profileImplClass = null;
+			Class<?> profileImplClass = null;
 			try {
 				profileImplClass = Class.forName(profileLoggerClassName);
 				result = (ProfileLogger) profileImplClass.newInstance();
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java
old mode 100644
new mode 100755
index beeb492..64aef1b
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,7 +69,7 @@ class FilteredServiceListener implements ServiceListener, ListenerHook.ListenerI
 	 * @param event The <code>ServiceEvent</code> object.
 	 */
 	public void serviceChanged(ServiceEvent event) {
-		ServiceReferenceImpl reference = (ServiceReferenceImpl) event.getServiceReference();
+		ServiceReferenceImpl<?> reference = (ServiceReferenceImpl<?>) event.getServiceReference();
 
 		// first check if we can short circuit the filter match if the required objectClass does not match the event
 		objectClassCheck: if (objectClass != null) {
@@ -86,7 +86,7 @@ class FilteredServiceListener implements ServiceListener, ListenerHook.ListenerI
 		if (!ServiceRegistry.hasListenServicePermission(event, context))
 			return;
 
-		if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+		if (Debug.DEBUG_EVENTS) {
 			String listenerName = this.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(this)); //$NON-NLS-1$
 			Debug.println("filterServiceEvent(" + listenerName + ", \"" + getFilter() + "\", " + reference.getRegistration().getProperties() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
@@ -96,7 +96,7 @@ class FilteredServiceListener implements ServiceListener, ListenerHook.ListenerI
 			return;
 		}
 		if (allservices || ServiceRegistry.isAssignableTo(context, reference)) {
-			if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+			if (Debug.DEBUG_EVENTS) {
 				String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 				Debug.println("dispatchFilteredServiceEvent(" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
@@ -118,7 +118,7 @@ class FilteredServiceListener implements ServiceListener, ListenerHook.ListenerI
 		if (filter == null) {
 			return event;
 		}
-		ServiceReference reference = event.getServiceReference();
+		ServiceReference<?> reference = event.getServiceReference();
 		if (filter.match(reference)) {
 			return event;
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/HookContext.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/HookContext.java
new file mode 100644
index 0000000..7461034
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/HookContext.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.internal.serviceregistry;
+
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * A callable hook that contains the context for call a collection of hooks.
+ * This is effectively a "closure" for calling each hook. The hook context
+ * must know the type of the hook object, the method to call on the hook
+ * as well as all the parameters which need to be passed to the hook method.
+ *
+ */
+public interface HookContext {
+
+	/**
+	 * Call the specified hook.
+	 * 
+	 * @param hook The hook object to call. The hook object must be of the type
+	 * supported by this hook context. If it is not, then this method will
+	 * simply return.
+	 * @param hookRegistration the registration for the hook object
+	 * @throws Exception An exception thrown by the hook object.
+	 */
+	public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception;
+
+	/**
+	 * Return the class name of the hook type supported by this hook context.
+	 * 
+	 * @return The class name of the hook type supported by this hook context.
+	 */
+	public String getHookClassName();
+
+	/**
+	 * Return the hook method name called by this hook context.
+	 * 
+	 * @return The hook method name called by this hook context.
+	 */
+	public String getHookMethodName();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java
index 78fe99d..b3e62c2 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,7 @@ class ModifiedServiceEvent extends ServiceEvent {
 	 * @param reference Reference to service with modified properties.
 	 * @param previousProperties Service properties prior to modification.
 	 */
-	ModifiedServiceEvent(ServiceReference reference, ServiceProperties previousProperties) {
+	ModifiedServiceEvent(ServiceReference<?> reference, ServiceProperties previousProperties) {
 		super(ServiceEvent.MODIFIED, reference);
 		this.modified = new ServiceEvent(ServiceEvent.MODIFIED, reference);
 		this.modifiedEndMatch = new ServiceEvent(ServiceEvent.MODIFIED_ENDMATCH, reference);
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java
index d9dc630..a829d26 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,20 +21,20 @@ import org.osgi.framework.Constants;
  * 
  * Supports case-insensitive key lookup.
  */
-class ServiceProperties extends Headers {
+class ServiceProperties extends Headers<String, Object> {
 	/**
 	 * Create a properties object for the service.
 	 *
 	 * @param props The properties for this service.
 	 */
-	private ServiceProperties(int size, Dictionary props) {
+	private ServiceProperties(int size, Dictionary<String, ?> props) {
 		super(size);
 
 		if (props == null) {
 			return;
 		}
 		synchronized (props) {
-			Enumeration keysEnum = props.keys();
+			Enumeration<?> keysEnum = props.keys();
 
 			while (keysEnum.hasMoreElements()) {
 				Object key = keysEnum.nextElement();
@@ -53,7 +53,7 @@ class ServiceProperties extends Headers {
 	 *
 	 * @param props The properties for this service.
 	 */
-	ServiceProperties(Dictionary props) {
+	ServiceProperties(Dictionary<String, ?> props) {
 		this((props == null) ? 2 : props.size() + 2, props);
 	}
 
@@ -78,10 +78,10 @@ class ServiceProperties extends Headers {
 
 		String[] keynames = new String[size];
 
-		Enumeration keysEnum = keys();
+		Enumeration<String> keysEnum = keys();
 
 		for (int i = 0; i < size; i++) {
-			keynames[i] = (String) keysEnum.nextElement();
+			keynames[i] = keysEnum.nextElement();
 		}
 
 		return keynames;
@@ -120,10 +120,10 @@ class ServiceProperties extends Headers {
 		if (value instanceof Boolean) /* shortcut Boolean */
 			return value;
 
-		Class clazz = value.getClass();
+		Class<?> clazz = value.getClass();
 		if (clazz.isArray()) {
 			// Do an array copy
-			Class type = clazz.getComponentType();
+			Class<?> type = clazz.getComponentType();
 			int len = Array.getLength(value);
 			Object clonedArray = Array.newInstance(type, len);
 			System.arraycopy(value, 0, clonedArray, 0, len);
@@ -131,15 +131,15 @@ class ServiceProperties extends Headers {
 		}
 		// must use reflection because Object clone method is protected!!
 		try {
-			return clazz.getMethod("clone", null).invoke(value, null); //$NON-NLS-1$
+			return clazz.getMethod("clone", (Class<?>[]) null).invoke(value, (Object[]) null); //$NON-NLS-1$
 		} catch (Exception e) {
 			/* clone is not a public method on value's class */
 		} catch (Error e) {
 			/* JCL does not support reflection; try some well known types */
-			if (value instanceof Vector)
-				return ((Vector) value).clone();
-			if (value instanceof Hashtable)
-				return ((Hashtable) value).clone();
+			if (value instanceof Vector<?>)
+				return ((Vector<?>) value).clone();
+			if (value instanceof Hashtable<?, ?>)
+				return ((Hashtable<?, ?>) value).clone();
 		}
 		return value;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java
old mode 100644
new mode 100755
index a89ef80..e6784ca
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,15 +42,15 @@ import org.osgi.framework.*;
  * @see BundleContext#getService
  * @ThreadSafe
  */
-public class ServiceReferenceImpl implements ServiceReference, Comparable {
+public class ServiceReferenceImpl<S> implements ServiceReference<S> {
 	/** Registered Service object. */
-	private final ServiceRegistrationImpl registration;
+	private final ServiceRegistrationImpl<S> registration;
 
 	/**
 	 * Construct a reference.
 	 *
 	 */
-	ServiceReferenceImpl(ServiceRegistrationImpl registration) {
+	ServiceReferenceImpl(ServiceRegistrationImpl<S> registration) {
 		this.registration = registration;
 		/* We must not dereference registration in the constructor
 		 * since it is "leaked" to us in the ServiceRegistrationImpl
@@ -195,7 +195,7 @@ public class ServiceReferenceImpl implements ServiceReference, Comparable {
 	 * @since 1.4
 	 */
 	public int compareTo(Object object) {
-		ServiceRegistrationImpl other = ((ServiceReferenceImpl) object).registration;
+		ServiceRegistrationImpl<?> other = ((ServiceReferenceImpl<?>) object).registration;
 
 		final int thisRanking = registration.getRanking();
 		final int otherRanking = other.getRanking();
@@ -237,11 +237,11 @@ public class ServiceReferenceImpl implements ServiceReference, Comparable {
 			return true;
 		}
 
-		if (!(obj instanceof ServiceReferenceImpl)) {
+		if (!(obj instanceof ServiceReferenceImpl<?>)) {
 			return false;
 		}
 
-		ServiceReferenceImpl other = (ServiceReferenceImpl) obj;
+		ServiceReferenceImpl<?> other = (ServiceReferenceImpl<?>) obj;
 
 		return registration == other.registration;
 	}
@@ -260,7 +260,7 @@ public class ServiceReferenceImpl implements ServiceReference, Comparable {
 	 * 
 	 * @return The ServiceRegistrationImpl for this ServiceReferenceImpl.
 	 */
-	public ServiceRegistrationImpl getRegistration() {
+	public ServiceRegistrationImpl<S> getRegistration() {
 		return registration;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java
old mode 100644
new mode 100755
index 787759e..3821f9f
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java
@@ -34,7 +34,7 @@ import org.osgi.framework.Constants;
  * 
  * @ThreadSafe
  */
-public class ServiceRegistrationImpl implements ServiceRegistration, Comparable {
+public class ServiceRegistrationImpl<S> implements ServiceRegistration<S>, Comparable<ServiceRegistrationImpl<?>> {
 	/** Internal framework object. */
 	private final Framework framework;
 
@@ -50,17 +50,17 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	private final String[] clazzes;
 
 	/** service object for this registration. */
-	private final Object service;
+	private final S service;
 
 	/** Reference to this registration. */
 	/* @GuardedBy("registrationLock") */
-	private ServiceReferenceImpl reference;
+	private ServiceReferenceImpl<S> reference;
 
 	/** List of contexts using the service. 
 	 * List<BundleContextImpl>.
 	 * */
 	/* @GuardedBy("registrationLock") */
-	private final List contextsUsing;
+	private final List<BundleContextImpl> contextsUsing;
 
 	/** properties for this registration. */
 	/* @GuardedBy("registrationLock") */
@@ -88,7 +88,7 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	 * in the framework's service registry.
 	 *
 	 */
-	ServiceRegistrationImpl(ServiceRegistry registry, BundleContextImpl context, String[] clazzes, Object service) {
+	ServiceRegistrationImpl(ServiceRegistry registry, BundleContextImpl context, String[] clazzes, S service) {
 		this.registry = registry;
 		this.context = context;
 		this.bundle = context.getBundleImpl();
@@ -96,7 +96,7 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 		this.clazzes = clazzes; /* must be set before calling createProperties. */
 		this.service = service;
 		this.serviceid = registry.getNextServiceId(); /* must be set before calling createProperties. */
-		this.contextsUsing = new ArrayList(10);
+		this.contextsUsing = new ArrayList<BundleContextImpl>(10);
 
 		synchronized (registrationLock) {
 			this.state = REGISTERED;
@@ -105,22 +105,22 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 			 * stores the value in a final field without
 			 * otherwise using it.
 			 */
-			this.reference = new ServiceReferenceImpl(this);
+			this.reference = new ServiceReferenceImpl<S>(this);
 		}
 	}
 
 	/**
 	 * Call after constructing this object to complete the registration.
 	 */
-	void register(Dictionary props) {
-		final ServiceReferenceImpl ref;
+	void register(Dictionary<String, ?> props) {
+		final ServiceReferenceImpl<S> ref;
 		synchronized (registry) {
 			context.checkValid();
 			synchronized (registrationLock) {
 				ref = reference; /* used to publish event outside sync */
 				this.properties = createProperties(props); /* must be valid after unregister is called. */
 			}
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+			if (Debug.DEBUG_SERVICES) {
 				Debug.println("registerService[" + bundle + "](" + this + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			registry.addServiceRegistration(context, this);
@@ -152,8 +152,8 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	 * @exception IllegalArgumentException If the <tt>properties</tt>
 	 * parameter contains case variants of the same key name.
 	 */
-	public void setProperties(Dictionary props) {
-		final ServiceReferenceImpl ref;
+	public void setProperties(Dictionary<String, ?> props) {
+		final ServiceReferenceImpl<S> ref;
 		final ServiceProperties previousProperties;
 		synchronized (registry) {
 			synchronized (registrationLock) {
@@ -202,7 +202,7 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	 * @see BundleContextImpl#ungetService
 	 */
 	public void unregister() {
-		final ServiceReferenceImpl ref;
+		final ServiceReferenceImpl<S> ref;
 		synchronized (registry) {
 			synchronized (registrationLock) {
 				if (state != REGISTERED) { /* in the process of unregisterING */
@@ -210,7 +210,7 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 				}
 
 				/* remove this object from the service registry */
-				if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+				if (Debug.DEBUG_SERVICES) {
 					Debug.println("unregisterService[" + bundle + "](" + this + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				}
 
@@ -233,10 +233,10 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 
 			size = contextsUsing.size();
 			if (size > 0) {
-				if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+				if (Debug.DEBUG_SERVICES) {
 					Debug.println("unregisterService: releasing users"); //$NON-NLS-1$
 				}
-				users = (BundleContextImpl[]) contextsUsing.toArray(new BundleContextImpl[size]);
+				users = contextsUsing.toArray(new BundleContextImpl[size]);
 			}
 		}
 
@@ -262,11 +262,11 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	 * this ServiceRegistration has already been unregistered.
 	 * @return A {@link ServiceReferenceImpl} object.
 	 */
-	public ServiceReference getReference() {
+	public ServiceReference<S> getReference() {
 		return getReferenceImpl();
 	}
 
-	ServiceReferenceImpl getReferenceImpl() {
+	ServiceReferenceImpl<S> getReferenceImpl() {
 		/* use reference instead of unregistered so that ServiceFactorys, called
 		 * by releaseService after the registration is unregistered, can
 		 * get the ServiceReference. Note this technically may violate the spec
@@ -289,7 +289,8 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	 * @return A Properties object for this ServiceRegistration.
 	 */
 	/* @GuardedBy("registrationLock") */
-	private ServiceProperties createProperties(Dictionary p) {
+	private ServiceProperties createProperties(Dictionary<String, ?> p) {
+		assert Thread.holdsLock(registrationLock);
 		ServiceProperties props = new ServiceProperties(p);
 
 		props.set(Constants.OBJECTCLASS, clazzes, true);
@@ -368,7 +369,7 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 		return clazzes;
 	}
 
-	Object getServiceObject() {
+	S getServiceObject() {
 		return service;
 	}
 
@@ -392,6 +393,26 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	}
 
 	/**
+	 * This method returns the bundle which registered the 
+	 * service regardless of the registration status of this
+	 * service registration.  This is not an OSGi specified
+	 * method.
+	 * @return The bundle which registered the service.
+	 */
+	public Bundle getRegisteringBundle() {
+		return bundle;
+	}
+
+	Object getSafeService(BundleContextImpl user) {
+		try {
+			return getService(user);
+		} catch (IllegalStateException e) {
+			// can happen if the user is stopped on another thread
+			return null;
+		}
+	}
+
+	/**
 	 * Get a service object for the using BundleContext.
 	 *
 	 * @param user BundleContext using service.
@@ -403,26 +424,26 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 				return null;
 			}
 		}
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("getService[" + user.getBundleImpl() + "](" + this + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
-		Map servicesInUse = user.getServicesInUseMap();
+		Map<ServiceRegistrationImpl<?>, ServiceUse<?>> servicesInUse = user.getServicesInUseMap();
 		if (servicesInUse == null) { /* user is closed */
 			user.checkValid(); /* throw exception */
 		}
 		/* Use a while loop to support retry if a call to a ServiceFactory fails */
 		while (true) {
-			ServiceUse use;
+			ServiceUse<?> use;
 			boolean added = false;
 			/* Obtain the ServiceUse object for this service by bundle user */
 			synchronized (servicesInUse) {
 				user.checkValid();
-				use = (ServiceUse) servicesInUse.get(this);
+				use = servicesInUse.get(this);
 				if (use == null) {
 					/* if this is the first use of the service
 					 * optimistically record this service is being used. */
-					use = new ServiceUse(user, this);
+					use = new ServiceUse<S>(user, this);
 					added = true;
 					synchronized (registrationLock) {
 						if (state == UNREGISTERED) { /* service unregistered */
@@ -476,18 +497,18 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 			}
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("ungetService[" + user.getBundleImpl() + "](" + this + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
-		Map servicesInUse = user.getServicesInUseMap();
+		Map<ServiceRegistrationImpl<?>, ServiceUse<?>> servicesInUse = user.getServicesInUseMap();
 		if (servicesInUse == null) {
 			return false;
 		}
 
-		ServiceUse use;
+		ServiceUse<?> use;
 		synchronized (servicesInUse) {
-			use = (ServiceUse) servicesInUse.get(this);
+			use = servicesInUse.get(this);
 			if (use == null) {
 				return false;
 			}
@@ -519,18 +540,18 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 			}
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("releaseService[" + user.getBundleImpl() + "](" + this + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
-		Map servicesInUse = user.getServicesInUseMap();
+		Map<ServiceRegistrationImpl<?>, ServiceUse<?>> servicesInUse = user.getServicesInUseMap();
 		if (servicesInUse == null) {
 			return;
 		}
-		ServiceUse use;
+		ServiceUse<?> use;
 		synchronized (servicesInUse) {
 			synchronized (registrationLock) {
-				use = (ServiceUse) servicesInUse.remove(this);
+				use = servicesInUse.remove(this);
 				if (use == null) {
 					return;
 				}
@@ -559,7 +580,7 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 			/* Copy list of BundleContext into an array of Bundle. */
 			Bundle[] bundles = new Bundle[size];
 			for (int i = 0; i < size; i++)
-				bundles[i] = ((BundleContextImpl) contextsUsing.get(i)).getBundleImpl();
+				bundles[i] = contextsUsing.get(i).getBundleImpl();
 
 			return bundles;
 		}
@@ -602,14 +623,12 @@ public class ServiceRegistrationImpl implements ServiceRegistration, Comparable
 	 * We keep ServiceRegistationImpls in sorted lists such that the highest
 	 * ranked service is at element 0 for quick retrieval.
 	 * 
-	 * @param object The <code>ServiceRegistrationImpl</code> to be compared.
+	 * @param other The <code>ServiceRegistrationImpl</code> to be compared.
 	 * @return Returns a negative integer, zero, or a positive integer if this
 	 *         <code>ServiceRegistrationImpl</code> is greater than, equal to, or
 	 *         less than the specified <code>ServiceRegistrationImpl</code>.
 	 */
-	public int compareTo(Object object) {
-		ServiceRegistrationImpl other = (ServiceRegistrationImpl) object;
-
+	public int compareTo(ServiceRegistrationImpl<?> other) {
 		final int thisRanking = this.getRanking();
 		final int otherRanking = other.getRanking();
 		if (thisRanking != otherRanking) {
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java
old mode 100644
new mode 100755
index 86ab5f0..7634ca9
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java
@@ -20,6 +20,7 @@ import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
 import org.osgi.framework.Constants;
 import org.osgi.framework.hooks.service.*;
+import org.osgi.framework.hooks.service.ListenerHook.ListenerInfo;
 
 /**
  * The Service Registry. This class is the main control point for service 
@@ -30,36 +31,43 @@ import org.osgi.framework.hooks.service.*;
 public class ServiceRegistry {
 	public static final int SERVICEEVENT = 3;
 
-	private static final String findHookName = FindHook.class.getName();
-	private static final String eventHookName = EventHook.class.getName();
-	private static final String listenerHookName = ListenerHook.class.getName();
+	static final String findHookName = FindHook.class.getName();
+	static final String eventHookName = EventHook.class.getName();
+	static final String eventListenerHookName = EventListenerHook.class.getName();
+	static final String listenerHookName = ListenerHook.class.getName();
 
 	/** Published services by class name. 
-	 * Map<String,List<ServiceRegistrationImpl>>
-	 * The List<ServiceRegistrationImpl>s are sorted.
+	 * The {@literal List<ServiceRegistrationImpl<?>>}s are both sorted 
+	 * in the natural order of ServiceRegistrationImpl and also are sets in that
+	 * there must be no two entries in a List which are equal.
 	 */
 	/* @GuardedBy("this") */
-	private final Map/*<String,List<ServiceRegistrationImpl>>*/publishedServicesByClass;
+	private final Map<String, List<ServiceRegistrationImpl<?>>> publishedServicesByClass;
+
 	/** All published services. 
-	 * List<ServiceRegistrationImpl>.
-	 * The List<ServiceRegistrationImpl>s are sorted.
+	 * The List is both sorted in the natural order of ServiceRegistrationImpl and also is a
+	 * set in that there must be no two entries in the List which are equal.
 	 */
 	/* @GuardedBy("this") */
-	private final List/*<ServiceRegistrationImpl>*/allPublishedServices;
+	private final List<ServiceRegistrationImpl<?>> allPublishedServices;
+
 	/** Published services by BundleContextImpl.  
-	 * Map<BundleContextImpl,List<ServiceRegistrationImpl>>.
-	 * The List<ServiceRegistrationImpl>s are NOT sorted.
+	 * The {@literal List<ServiceRegistrationImpl<?>>}s are NOT sorted 
+	 * and also are sets in that
+	 * there must be no two entries in a List which are equal.
 	 */
 	/* @GuardedBy("this") */
-	private final Map/*<BundleContextImpl,List<ServiceRegistrationImpl>>*/publishedServicesByContext;
+	private final Map<BundleContextImpl, List<ServiceRegistrationImpl<?>>> publishedServicesByContext;
+
 	/** next free service id. */
 	/* @GuardedBy("this") */
 	private long serviceid;
+
 	/** Active Service Listeners.
-	 * Map<BundleContextImpl,CopyOnWriteIdentityMap<ServiceListener,FilteredServiceListener>>.
+	 * {@literal Map<BundleContextImpl,CopyOnWriteIdentityMap<ServiceListener,FilteredServiceListener>>}.
 	 */
 	/* @GuardedBy("serviceEventListeners") */
-	private final Map/*<BundleContextImpl,CopyOnWriteIdentityMap<ServiceListener,FilteredServiceListener>>*/serviceEventListeners;
+	private final Map<BundleContextImpl, CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener>> serviceEventListeners;
 
 	/** initial capacity of the main data structure */
 	private static final int initialCapacity = 50;
@@ -75,10 +83,10 @@ public class ServiceRegistry {
 	public ServiceRegistry(Framework framework) {
 		this.framework = framework;
 		serviceid = 1;
-		publishedServicesByClass = new HashMap(initialCapacity);
-		publishedServicesByContext = new HashMap(initialCapacity);
-		allPublishedServices = new ArrayList(initialCapacity);
-		serviceEventListeners = new HashMap(initialCapacity);
+		publishedServicesByClass = new HashMap<String, List<ServiceRegistrationImpl<?>>>(initialCapacity);
+		publishedServicesByContext = new HashMap<BundleContextImpl, List<ServiceRegistrationImpl<?>>>(initialCapacity);
+		allPublishedServices = new ArrayList<ServiceRegistrationImpl<?>>(initialCapacity);
+		serviceEventListeners = new HashMap<BundleContextImpl, CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener>>(initialCapacity);
 	}
 
 	/**
@@ -158,9 +166,9 @@ public class ServiceRegistry {
 	 * @see ServiceRegistration
 	 * @see ServiceFactory
 	 */
-	public ServiceRegistrationImpl registerService(BundleContextImpl context, String[] clazzes, Object service, Dictionary properties) {
+	public ServiceRegistrationImpl<?> registerService(BundleContextImpl context, String[] clazzes, Object service, Dictionary<String, ?> properties) {
 		if (service == null) {
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+			if (Debug.DEBUG_SERVICES) {
 				Debug.println("Service object is null"); //$NON-NLS-1$
 			}
 
@@ -170,7 +178,7 @@ public class ServiceRegistry {
 		int size = clazzes.length;
 
 		if (size == 0) {
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+			if (Debug.DEBUG_SERVICES) {
 				Debug.println("Classes array is empty"); //$NON-NLS-1$
 			}
 
@@ -178,7 +186,7 @@ public class ServiceRegistry {
 		}
 
 		/* copy the array so that changes to the original will not affect us. */
-		List copy = new ArrayList(size);
+		List<String> copy = new ArrayList<String>(size);
 		// intern the strings and remove duplicates
 		for (int i = 0; i < size; i++) {
 			String clazz = clazzes[i].intern();
@@ -187,22 +195,22 @@ public class ServiceRegistry {
 			}
 		}
 		size = copy.size();
-		clazzes = (String[]) copy.toArray(new String[size]);
+		clazzes = copy.toArray(new String[size]);
 
 		/* check for ServicePermissions. */
 		checkRegisterServicePermission(clazzes);
 
-		if (!(service instanceof ServiceFactory)) {
+		if (!(service instanceof ServiceFactory<?>)) {
 			String invalidService = checkServiceClass(clazzes, service);
 			if (invalidService != null) {
-				if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+				if (Debug.DEBUG_SERVICES) {
 					Debug.println("Service object is not an instanceof " + invalidService); //$NON-NLS-1$
 				}
 				throw new IllegalArgumentException(NLS.bind(Msg.SERVICE_NOT_INSTANCEOF_CLASS_EXCEPTION, invalidService));
 			}
 		}
 
-		ServiceRegistrationImpl registration = new ServiceRegistrationImpl(this, context, clazzes, service);
+		ServiceRegistrationImpl<?> registration = new ServiceRegistrationImpl<Object>(this, context, clazzes, service);
 		registration.register(properties);
 		if (copy.contains(listenerHookName)) {
 			notifyNewListenerHook(registration);
@@ -274,6 +282,7 @@ public class ServiceRegistry {
 	 *        <code>null</code> for all services.
 	 * @param filterstring The filter criteria.
 	 * @param allservices True if the bundle called getAllServiceReferences.
+	 * @param callHooks True if the references should be filtered using service find hooks.
 	 * @return An array of <code>ServiceReferenceImpl</code> objects or
 	 *         <code>null</code> if no services are registered which satisfy
 	 *         the search.
@@ -282,33 +291,62 @@ public class ServiceRegistry {
 	 * @throws java.lang.IllegalStateException If this BundleContext is no
 	 *         longer valid.
 	 */
-	public ServiceReferenceImpl[] getServiceReferences(final BundleContextImpl context, final String clazz, final String filterstring, final boolean allservices) throws InvalidSyntaxException {
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+	public ServiceReferenceImpl<?>[] getServiceReferences(final BundleContextImpl context, final String clazz, final String filterstring, final boolean allservices, boolean callHooks) throws InvalidSyntaxException {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println((allservices ? "getAllServiceReferences(" : "getServiceReferences(") + clazz + ", \"" + filterstring + "\")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
 		Filter filter = (filterstring == null) ? null : context.createFilter(filterstring);
-		List references = changeRegistrationsToReferences(lookupServiceRegistrations(clazz, filter));
-		for (Iterator iter = references.iterator(); iter.hasNext();) {
-			ServiceReferenceImpl reference = (ServiceReferenceImpl) iter.next();
+		List<ServiceRegistrationImpl<?>> registrations = lookupServiceRegistrations(clazz, filter);
+		List<ServiceReferenceImpl<?>> references = new ArrayList<ServiceReferenceImpl<?>>(registrations.size());
+		for (ServiceRegistrationImpl<?> registration : registrations) {
+			ServiceReferenceImpl<?> reference;
+			try {
+				reference = registration.getReferenceImpl();
+			} catch (IllegalStateException e) {
+				continue; // got unregistered, don't return reference
+			}
 			if (allservices || isAssignableTo(context, reference)) {
 				try { /* test for permission to get the service */
 					checkGetServicePermission(reference);
 				} catch (SecurityException se) {
-					iter.remove();
+					continue; // don't return reference
 				}
 			} else {
-				iter.remove();
+				continue; // don't return reference
 			}
+			references.add(reference);
 		}
 
-		final Collection shrinkable = new ShrinkableCollection(references);
-		notifyFindHooks(context, clazz, filterstring, allservices, shrinkable);
-
+		if (callHooks) {
+			Collection<ServiceReference<?>> shrinkable = new ShrinkableCollection<ServiceReference<?>>(references);
+			notifyFindHooks(context, clazz, filterstring, allservices, shrinkable);
+		}
 		int size = references.size();
 		if (size == 0) {
 			return null;
 		}
-		return (ServiceReferenceImpl[]) references.toArray(new ServiceReferenceImpl[size]);
+		return references.toArray(new ServiceReferenceImpl[size]);
+	}
+
+	/**
+	 * This method performs the same function as calling
+	 * {@link #getServiceReferences(BundleContextImpl, String, String, boolean, boolean)} with a 
+	 * {@code true} callHooks value.
+	 * @param context The BundleContext of the requesting bundle.
+	 * @param clazz The class name with which the service was registered or
+	 *        <code>null</code> for all services.
+	 * @param filterstring The filter criteria.
+	 * @param allservices True if the bundle called getAllServiceReferences.
+	 * @return An array of <code>ServiceReferenceImpl</code> objects or
+	 *         <code>null</code> if no services are registered which satisfy
+	 *         the search.
+	 * @throws InvalidSyntaxException If <code>filter</code> contains an
+	 *         invalid filter string that cannot be parsed.
+	 * @throws java.lang.IllegalStateException If this BundleContext is no
+	 *         longer valid.
+	 */
+	public ServiceReferenceImpl<?>[] getServiceReferences(final BundleContextImpl context, final String clazz, final String filterstring, final boolean allservices) throws InvalidSyntaxException {
+		return getServiceReferences(context, clazz, filterstring, allservices, true);
 	}
 
 	/**
@@ -341,13 +379,13 @@ public class ServiceRegistry {
 	 * @throws java.lang.IllegalStateException If this BundleContext is no
 	 *         longer valid.
 	 */
-	public ServiceReferenceImpl getServiceReference(BundleContextImpl context, String clazz) {
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+	public ServiceReferenceImpl<?> getServiceReference(BundleContextImpl context, String clazz) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("getServiceReference(" + clazz + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 
 		try {
-			ServiceReferenceImpl[] references = getServiceReferences(context, clazz, null, false);
+			ServiceReferenceImpl<?>[] references = getServiceReferences(context, clazz, null, false);
 
 			if (references != null) {
 				// Since we maintain the registrations in a sorted List, the first element is always the
@@ -355,7 +393,7 @@ public class ServiceRegistry {
 				return references[0];
 			}
 		} catch (InvalidSyntaxException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("InvalidSyntaxException w/ null filter" + e.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(e);
 			}
@@ -423,10 +461,9 @@ public class ServiceRegistry {
 	 * @see #ungetService(BundleContextImpl, ServiceReferenceImpl)
 	 * @see ServiceFactory
 	 */
-	public Object getService(BundleContextImpl context, ServiceReferenceImpl reference) {
+	public Object getService(BundleContextImpl context, ServiceReferenceImpl<?> reference) {
 		/* test for permission to get the service */
 		checkGetServicePermission(reference);
-
 		return reference.getRegistration().getService(context);
 	}
 
@@ -467,8 +504,8 @@ public class ServiceRegistry {
 	 * @see #getService
 	 * @see ServiceFactory
 	 */
-	public boolean ungetService(BundleContextImpl context, ServiceReferenceImpl reference) {
-		ServiceRegistrationImpl registration = reference.getRegistration();
+	public boolean ungetService(BundleContextImpl context, ServiceReferenceImpl<?> reference) {
+		ServiceRegistrationImpl<?> registration = reference.getRegistration();
 
 		return registration.ungetService(context);
 	}
@@ -498,22 +535,30 @@ public class ServiceRegistry {
 	 * @see ServiceReference
 	 * @see ServicePermission
 	 */
-	public ServiceReferenceImpl[] getRegisteredServices(BundleContextImpl context) {
-		List references = changeRegistrationsToReferences(lookupServiceRegistrations(context));
-		for (Iterator iter = references.iterator(); iter.hasNext();) {
-			ServiceReferenceImpl reference = (ServiceReferenceImpl) iter.next();
-			try { /* test for permission to get the service */
+	public ServiceReferenceImpl<?>[] getRegisteredServices(BundleContextImpl context) {
+		List<ServiceRegistrationImpl<?>> registrations = lookupServiceRegistrations(context);
+		List<ServiceReferenceImpl<?>> references = new ArrayList<ServiceReferenceImpl<?>>(registrations.size());
+		for (ServiceRegistrationImpl<?> registration : registrations) {
+			ServiceReferenceImpl<?> reference;
+			try {
+				reference = registration.getReferenceImpl();
+			} catch (IllegalStateException e) {
+				continue; // got unregistered, don't return reference
+			}
+			try {
+				/* test for permission to get the service */
 				checkGetServicePermission(reference);
 			} catch (SecurityException se) {
-				iter.remove();
+				continue; // don't return reference
 			}
+			references.add(reference);
 		}
 
 		int size = references.size();
 		if (size == 0) {
 			return null;
 		}
-		return (ServiceReferenceImpl[]) references.toArray(new ServiceReferenceImpl[size]);
+		return references.toArray(new ServiceReferenceImpl[size]);
 	}
 
 	/**
@@ -541,33 +586,41 @@ public class ServiceRegistry {
 	 * @see ServiceReference
 	 * @see ServicePermission
 	 */
-	public ServiceReferenceImpl[] getServicesInUse(BundleContextImpl context) {
-		Map servicesInUse = context.getServicesInUseMap();
+	public ServiceReferenceImpl<?>[] getServicesInUse(BundleContextImpl context) {
+		Map<ServiceRegistrationImpl<?>, ServiceUse<?>> servicesInUse = context.getServicesInUseMap();
 		if (servicesInUse == null) {
 			return null;
 		}
 
-		List references;
+		List<ServiceRegistrationImpl<?>> registrations;
 		synchronized (servicesInUse) {
-			if (servicesInUse.size() == 0) {
+			if (servicesInUse.isEmpty()) {
 				return null;
 			}
-			references = changeRegistrationsToReferences(new ArrayList(servicesInUse.keySet()));
+			registrations = new ArrayList<ServiceRegistrationImpl<?>>(servicesInUse.keySet());
 		}
-		for (Iterator iter = references.iterator(); iter.hasNext();) {
-			ServiceReferenceImpl reference = (ServiceReferenceImpl) iter.next();
-			try { /* test for permission to get the service */
+		List<ServiceReferenceImpl<?>> references = new ArrayList<ServiceReferenceImpl<?>>(registrations.size());
+		for (ServiceRegistrationImpl<?> registration : registrations) {
+			ServiceReferenceImpl<?> reference;
+			try {
+				reference = registration.getReferenceImpl();
+			} catch (IllegalStateException e) {
+				continue; // got unregistered, don't return reference
+			}
+			try {
+				/* test for permission to get the service */
 				checkGetServicePermission(reference);
 			} catch (SecurityException se) {
-				iter.remove();
+				continue; // don't return reference
 			}
+			references.add(reference);
 		}
 
 		int size = references.size();
 		if (size == 0) {
 			return null;
 		}
-		return (ServiceReferenceImpl[]) references.toArray(new ServiceReferenceImpl[size]);
+		return references.toArray(new ServiceReferenceImpl[size]);
 	}
 
 	/**
@@ -577,9 +630,7 @@ public class ServiceRegistry {
 	 * @param context The BundleContext of the closing bundle.
 	 */
 	public void unregisterServices(BundleContextImpl context) {
-		List registrations = lookupServiceRegistrations(context);
-		for (Iterator iter = registrations.iterator(); iter.hasNext();) {
-			ServiceRegistrationImpl registration = (ServiceRegistrationImpl) iter.next();
+		for (ServiceRegistrationImpl<?> registration : lookupServiceRegistrations(context)) {
 			try {
 				registration.unregister();
 			} catch (IllegalStateException e) {
@@ -596,22 +647,21 @@ public class ServiceRegistry {
 	 * @param context The BundleContext of the closing bundle.
 	 */
 	public void releaseServicesInUse(BundleContextImpl context) {
-		Map servicesInUse = context.getServicesInUseMap();
+		Map<ServiceRegistrationImpl<?>, ServiceUse<?>> servicesInUse = context.getServicesInUseMap();
 		if (servicesInUse == null) {
 			return;
 		}
-		List registrations;
+		List<ServiceRegistrationImpl<?>> registrations;
 		synchronized (servicesInUse) {
-			if (servicesInUse.size() == 0) {
+			if (servicesInUse.isEmpty()) {
 				return;
 			}
-			registrations = new ArrayList(servicesInUse.keySet());
+			registrations = new ArrayList<ServiceRegistrationImpl<?>>(servicesInUse.keySet());
 		}
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("Releasing services"); //$NON-NLS-1$
 		}
-		for (Iterator iter = registrations.iterator(); iter.hasNext();) {
-			ServiceRegistrationImpl registration = (ServiceRegistrationImpl) iter.next();
+		for (ServiceRegistrationImpl<?> registration : registrations) {
 			registration.releaseService(context);
 		}
 	}
@@ -625,7 +675,7 @@ public class ServiceRegistry {
 	 * @throws InvalidSyntaxException If the filter string is invalid.
 	 */
 	public void addServiceListener(BundleContextImpl context, ServiceListener listener, String filter) throws InvalidSyntaxException {
-		if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+		if (Debug.DEBUG_EVENTS) {
 			String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 			Debug.println("addServiceListener[" + context.getBundleImpl() + "](" + listenerName + ", \"" + filter + "\")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
@@ -633,21 +683,21 @@ public class ServiceRegistry {
 		FilteredServiceListener filteredListener = new FilteredServiceListener(context, listener, filter);
 		FilteredServiceListener oldFilteredListener;
 		synchronized (serviceEventListeners) {
-			Map listeners = (Map) serviceEventListeners.get(context);
+			CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener> listeners = serviceEventListeners.get(context);
 			if (listeners == null) {
-				listeners = new CopyOnWriteIdentityMap();
+				listeners = new CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener>();
 				serviceEventListeners.put(context, listeners);
 			}
-			oldFilteredListener = (FilteredServiceListener) listeners.put(listener, filteredListener);
+			oldFilteredListener = listeners.put(listener, filteredListener);
 		}
 
 		if (oldFilteredListener != null) {
 			oldFilteredListener.markRemoved();
-			Collection removedListeners = Collections.singletonList(oldFilteredListener);
+			Collection<ListenerInfo> removedListeners = Collections.<ListenerInfo> singletonList(oldFilteredListener);
 			notifyListenerHooks(removedListeners, false);
 		}
 
-		Collection addedListeners = Collections.singletonList(filteredListener);
+		Collection<ListenerInfo> addedListeners = Collections.<ListenerInfo> singletonList(filteredListener);
 		notifyListenerHooks(addedListeners, true);
 	}
 
@@ -658,25 +708,25 @@ public class ServiceRegistry {
 	 * @param listener Service Listener to be removed.
 	 */
 	public void removeServiceListener(BundleContextImpl context, ServiceListener listener) {
-		if (Debug.DEBUG && Debug.DEBUG_EVENTS) {
+		if (Debug.DEBUG_EVENTS) {
 			String listenerName = listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)); //$NON-NLS-1$
 			Debug.println("removeServiceListener[" + context.getBundleImpl() + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
 		FilteredServiceListener oldFilteredListener;
 		synchronized (serviceEventListeners) {
-			Map listeners = (Map) serviceEventListeners.get(context);
+			Map<ServiceListener, FilteredServiceListener> listeners = serviceEventListeners.get(context);
 			if (listeners == null) {
 				return; // this context has no listeners to begin with
 			}
-			oldFilteredListener = (FilteredServiceListener) listeners.remove(listener);
+			oldFilteredListener = listeners.remove(listener);
 		}
 
 		if (oldFilteredListener == null) {
 			return;
 		}
 		oldFilteredListener.markRemoved();
-		Collection removedListeners = Collections.singletonList(oldFilteredListener);
+		Collection<ListenerInfo> removedListeners = Collections.<ListenerInfo> singletonList(oldFilteredListener);
 		notifyListenerHooks(removedListeners, false);
 	}
 
@@ -686,19 +736,29 @@ public class ServiceRegistry {
 	 * @param context Context of bundle removing all listeners.
 	 */
 	public void removeAllServiceListeners(BundleContextImpl context) {
-		Map removedListenersMap;
+		Map<ServiceListener, FilteredServiceListener> removedListenersMap;
 		synchronized (serviceEventListeners) {
-			removedListenersMap = (Map) serviceEventListeners.remove(context);
+			removedListenersMap = serviceEventListeners.remove(context);
 		}
-		if ((removedListenersMap == null) || (removedListenersMap.size() == 0)) {
+		if ((removedListenersMap == null) || removedListenersMap.isEmpty()) {
 			return;
 		}
-		Collection removedListeners = removedListenersMap.values();
-		for (Iterator iter = removedListeners.iterator(); iter.hasNext();) {
-			FilteredServiceListener oldFilteredListener = (FilteredServiceListener) iter.next();
+		Collection<FilteredServiceListener> removedListeners = removedListenersMap.values();
+		for (FilteredServiceListener oldFilteredListener : removedListeners) {
 			oldFilteredListener.markRemoved();
 		}
-		notifyListenerHooks(removedListeners, false);
+		notifyListenerHooks(asListenerInfos(removedListeners), false);
+	}
+
+	/**
+	 * Coerce the generic type of a collection from Collection<FilteredServiceListener>
+	 * to Collection<ListenerInfo>
+	 * @param c Collection to be coerced.
+	 * @return c coerced to Collection<ListenerInfo>
+	 */
+	@SuppressWarnings("unchecked")
+	private static Collection<ListenerInfo> asListenerInfos(Collection<? extends ListenerInfo> c) {
+		return (Collection<ListenerInfo>) c;
 	}
 
 	/**
@@ -706,11 +766,11 @@ public class ServiceRegistry {
 	 * 
 	 * @param event The ServiceEvent to deliver.
 	 */
-	void publishServiceEvent(final ServiceEvent event) {
+	public void publishServiceEvent(final ServiceEvent event) {
 		if (System.getSecurityManager() == null) {
 			publishServiceEventPrivileged(event);
 		} else {
-			AccessController.doPrivileged(new PrivilegedAction() {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
 					publishServiceEventPrivileged(event);
 					return null;
@@ -721,15 +781,13 @@ public class ServiceRegistry {
 
 	void publishServiceEventPrivileged(final ServiceEvent event) {
 		/* Build the listener snapshot */
-		Map /*<BundleContextImpl,Set<Map.Entry<Object,Object>>>*/listenerSnapshot;
+		Map<BundleContextImpl, Set<Map.Entry<ServiceListener, FilteredServiceListener>>> listenerSnapshot;
 		synchronized (serviceEventListeners) {
-			listenerSnapshot = new HashMap(serviceEventListeners.size());
-			for (Iterator iter = serviceEventListeners.entrySet().iterator(); iter.hasNext();) {
-				Map.Entry entry = (Map.Entry) iter.next();
-				BundleContextImpl context = (BundleContextImpl) entry.getKey();
-				Map listeners = (Map) entry.getValue();
+			listenerSnapshot = new HashMap<BundleContextImpl, Set<Map.Entry<ServiceListener, FilteredServiceListener>>>(serviceEventListeners.size());
+			for (Map.Entry<BundleContextImpl, CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener>> entry : serviceEventListeners.entrySet()) {
+				CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener> listeners = entry.getValue();
 				if (!listeners.isEmpty()) {
-					listenerSnapshot.put(context, listeners.entrySet());
+					listenerSnapshot.put(entry.getKey(), listeners.entrySet());
 				}
 			}
 		}
@@ -739,31 +797,47 @@ public class ServiceRegistry {
 		 * removals from that collection will result in removals of the
 		 * entry from the snapshot.
 		 */
-		Collection/*<BundleContextImpl>*/shrinkable = listenerSnapshot.keySet();
-		notifyEventHooksPrivileged(event, shrinkable);
+		Collection<BundleContext> contexts = asBundleContexts(listenerSnapshot.keySet());
+		notifyEventHooksPrivileged(event, contexts);
+		if (listenerSnapshot.isEmpty()) {
+			return;
+		}
+		Map<BundleContext, Collection<ListenerInfo>> listeners = new ShrinkableValueCollectionMap<BundleContext, ListenerInfo>(listenerSnapshot);
+		notifyEventListenerHooksPrivileged(event, listeners);
 		if (listenerSnapshot.isEmpty()) {
 			return;
 		}
 
 		/* deliver the event to the snapshot */
-		ListenerQueue queue = framework.newListenerQueue();
-		for (Iterator iter = listenerSnapshot.entrySet().iterator(); iter.hasNext();) {
-			Map.Entry entry = (Map.Entry) iter.next();
-			EventDispatcher dispatcher = (BundleContextImpl) entry.getKey();
-			Set listeners = (Set) entry.getValue();
-			queue.queueListeners(listeners, dispatcher);
+		ListenerQueue<ServiceListener, FilteredServiceListener, ServiceEvent> queue = framework.newListenerQueue();
+		for (Map.Entry<BundleContextImpl, Set<Map.Entry<ServiceListener, FilteredServiceListener>>> entry : listenerSnapshot.entrySet()) {
+			@SuppressWarnings({"unchecked", "rawtypes"})
+			EventDispatcher<ServiceListener, FilteredServiceListener, ServiceEvent> dispatcher = (EventDispatcher) entry.getKey();
+			Set<Map.Entry<ServiceListener, FilteredServiceListener>> listenerSet = entry.getValue();
+			queue.queueListeners(listenerSet, dispatcher);
 		}
 		queue.dispatchEventSynchronous(SERVICEEVENT, event);
 	}
 
 	/**
+	 * Coerce the generic type of a collection from Collection<BundleContextImpl>
+	 * to Collection<BundleContext>
+	 * @param c Collection to be coerced.
+	 * @return c coerced to Collection<BundleContext>
+	 */
+	@SuppressWarnings("unchecked")
+	private static Collection<BundleContext> asBundleContexts(Collection<? extends BundleContext> c) {
+		return (Collection<BundleContext>) c;
+	}
+
+	/**
 	 * Return the next available service id.
 	 * 
 	 * @return next service id.
 	 */
 	synchronized long getNextServiceId() {
 		long id = serviceid;
-		serviceid++;
+		serviceid = id + 1;
 		return id;
 	}
 
@@ -774,26 +848,24 @@ public class ServiceRegistry {
 	 * @param registration The new ServiceRegistration.
 	 */
 	/* @GuardedBy("this") */
-	void addServiceRegistration(BundleContextImpl context, ServiceRegistrationImpl registration) {
+	void addServiceRegistration(BundleContextImpl context, ServiceRegistrationImpl<?> registration) {
+		assert Thread.holdsLock(this);
 		// Add the ServiceRegistrationImpl to the list of Services published by BundleContextImpl.
-		List contextServices = (List) publishedServicesByContext.get(context);
+		List<ServiceRegistrationImpl<?>> contextServices = publishedServicesByContext.get(context);
 		if (contextServices == null) {
-			contextServices = new ArrayList(initialSubCapacity);
+			contextServices = new ArrayList<ServiceRegistrationImpl<?>>(initialSubCapacity);
 			publishedServicesByContext.put(context, contextServices);
 		}
 		// The list is NOT sorted, so we just add
 		contextServices.add(registration);
 
 		// Add the ServiceRegistrationImpl to the list of Services published by Class Name.
-		String[] clazzes = registration.getClasses();
 		int insertIndex;
-		for (int i = 0, size = clazzes.length; i < size; i++) {
-			String clazz = clazzes[i];
-
-			List services = (List) publishedServicesByClass.get(clazz);
+		for (String clazz : registration.getClasses()) {
+			List<ServiceRegistrationImpl<?>> services = publishedServicesByClass.get(clazz);
 
 			if (services == null) {
-				services = new ArrayList(initialSubCapacity);
+				services = new ArrayList<ServiceRegistrationImpl<?>>(initialSubCapacity);
 				publishedServicesByClass.put(clazz, services);
 			}
 
@@ -815,17 +887,16 @@ public class ServiceRegistry {
 	 * @param registration The modified ServiceRegistration.
 	 */
 	/* @GuardedBy("this") */
-	void modifyServiceRegistration(BundleContextImpl context, ServiceRegistrationImpl registration) {
+	void modifyServiceRegistration(BundleContextImpl context, ServiceRegistrationImpl<?> registration) {
+		assert Thread.holdsLock(this);
 		// The list of Services published by BundleContextImpl is not sorted, so
 		// we do not need to modify it.
 
 		// Remove the ServiceRegistrationImpl from the list of Services published by Class Name
 		// and then add at the correct index.
-		String[] clazzes = registration.getClasses();
 		int insertIndex;
-		for (int i = 0, size = clazzes.length; i < size; i++) {
-			String clazz = clazzes[i];
-			List services = (List) publishedServicesByClass.get(clazz);
+		for (String clazz : registration.getClasses()) {
+			List<ServiceRegistrationImpl<?>> services = publishedServicesByClass.get(clazz);
 			services.remove(registration);
 			// The list is sorted, so we must find the proper location to insert
 			insertIndex = -Collections.binarySearch(services, registration) - 1;
@@ -847,18 +918,17 @@ public class ServiceRegistry {
 	 * @param registration The ServiceRegistration to remove.
 	 */
 	/* @GuardedBy("this") */
-	void removeServiceRegistration(BundleContextImpl context, ServiceRegistrationImpl registration) {
+	void removeServiceRegistration(BundleContextImpl context, ServiceRegistrationImpl<?> registration) {
+		assert Thread.holdsLock(this);
 		// Remove the ServiceRegistrationImpl from the list of Services published by BundleContextImpl.
-		List contextServices = (List) publishedServicesByContext.get(context);
+		List<ServiceRegistrationImpl<?>> contextServices = publishedServicesByContext.get(context);
 		if (contextServices != null) {
 			contextServices.remove(registration);
 		}
 
 		// Remove the ServiceRegistrationImpl from the list of Services published by Class Name.
-		String[] clazzes = registration.getClasses();
-		for (int i = 0, size = clazzes.length; i < size; i++) {
-			String clazz = clazzes[i];
-			List services = (List) publishedServicesByClass.get(clazz);
+		for (String clazz : registration.getClasses()) {
+			List<ServiceRegistrationImpl<?>> services = publishedServicesByClass.get(clazz);
 			services.remove(registration);
 			if (services.isEmpty()) { // remove empty list
 				publishedServicesByClass.remove(clazz);
@@ -877,30 +947,32 @@ public class ServiceRegistry {
 	 * @param filter The filter criteria.
 	 * @return List<ServiceRegistrationImpl>
 	 */
-	private List lookupServiceRegistrations(String clazz, Filter filter) {
-		List result;
+	private List<ServiceRegistrationImpl<?>> lookupServiceRegistrations(String clazz, Filter filter) {
+		List<ServiceRegistrationImpl<?>> result;
 		synchronized (this) {
 			if (clazz == null) { /* all services */
 				result = allPublishedServices;
 			} else {
 				/* services registered under the class name */
-				result = (List) publishedServicesByClass.get(clazz);
+				result = publishedServicesByClass.get(clazz);
 			}
 
-			if ((result == null) || (result.size() == 0)) {
-				return Collections.EMPTY_LIST;
+			if ((result == null) || result.isEmpty()) {
+				@SuppressWarnings("unchecked")
+				List<ServiceRegistrationImpl<?>> empty = Collections.EMPTY_LIST;
+				return empty;
 			}
 
-			result = new ArrayList(result); /* make a new list since we don't want to change the real list */
+			result = new ArrayList<ServiceRegistrationImpl<?>>(result); /* make a new list since we don't want to change the real list */
 		}
 
 		if (filter == null) {
 			return result;
 		}
 
-		for (Iterator iter = result.iterator(); iter.hasNext();) {
-			ServiceRegistrationImpl registration = (ServiceRegistrationImpl) iter.next();
-			ServiceReferenceImpl reference;
+		for (Iterator<ServiceRegistrationImpl<?>> iter = result.iterator(); iter.hasNext();) {
+			ServiceRegistrationImpl<?> registration = iter.next();
+			ServiceReferenceImpl<?> reference;
 			try {
 				reference = registration.getReferenceImpl();
 			} catch (IllegalStateException e) {
@@ -920,14 +992,16 @@ public class ServiceRegistry {
 	 * @param context The BundleContext for which to return Service Registrations.
 	 * @return List<ServiceRegistrationImpl>
 	 */
-	private synchronized List lookupServiceRegistrations(BundleContextImpl context) {
-		List result = (List) publishedServicesByContext.get(context);
+	private synchronized List<ServiceRegistrationImpl<?>> lookupServiceRegistrations(BundleContextImpl context) {
+		List<ServiceRegistrationImpl<?>> result = publishedServicesByContext.get(context);
 
-		if ((result == null) || (result.size() == 0)) {
-			return Collections.EMPTY_LIST;
+		if ((result == null) || result.isEmpty()) {
+			@SuppressWarnings("unchecked")
+			List<ServiceRegistrationImpl<?>> empty = Collections.EMPTY_LIST;
+			return empty;
 		}
 
-		return new ArrayList(result); /* make a new list since we don't want to change the real list */
+		return new ArrayList<ServiceRegistrationImpl<?>>(result); /* make a new list since we don't want to change the real list */
 	}
 
 	/**
@@ -940,27 +1014,6 @@ public class ServiceRegistry {
 	}
 
 	/**
-	 * Modify a List<ServiceRegistrationImpl> in place to a List<ServiceReferenceImpl>.
-	 * 
-	 * @param result The input List<ServiceRegistrationImpl>.
-	 * @return result which has been changed to List<ServiceReferenceImpl>
-	 */
-	private static List changeRegistrationsToReferences(List result) {
-		for (ListIterator iter = result.listIterator(); iter.hasNext();) {
-			ServiceRegistrationImpl registration = (ServiceRegistrationImpl) iter.next();
-			ServiceReferenceImpl reference;
-			try {
-				reference = registration.getReferenceImpl();
-			} catch (IllegalStateException e) {
-				iter.remove(); /* service was unregistered after we were called */
-				continue;
-			}
-			iter.set(reference); /* replace the registration with its reference */
-		}
-		return result;
-	}
-
-	/**
 	 * Check for permission to register a service.
 	 * 
 	 * The caller must have permission for ALL names.
@@ -978,7 +1031,7 @@ public class ServiceRegistry {
 	/**
 	 * Check for permission to get a service.
 	 */
-	private static void checkGetServicePermission(ServiceReference reference) {
+	private static void checkGetServicePermission(ServiceReference<?> reference) {
 		SecurityManager sm = System.getSecurityManager();
 		if (sm == null) {
 			return;
@@ -1005,14 +1058,14 @@ public class ServiceRegistry {
 	 * @return The name of the class that is not satisfied by the service object.
 	 */
 	static String checkServiceClass(final String[] clazzes, final Object serviceObject) {
-		ClassLoader cl = (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		ClassLoader cl = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+			public ClassLoader run() {
 				return serviceObject.getClass().getClassLoader();
 			}
 		});
 		for (int i = 0, len = clazzes.length; i < len; i++) {
 			try {
-				Class serviceClazz = cl == null ? Class.forName(clazzes[i]) : cl.loadClass(clazzes[i]);
+				Class<?> serviceClazz = cl == null ? Class.forName(clazzes[i]) : cl.loadClass(clazzes[i]);
 				if (!serviceClazz.isInstance(serviceObject))
 					return clazzes[i];
 			} catch (ClassNotFoundException e) {
@@ -1024,21 +1077,21 @@ public class ServiceRegistry {
 		return null;
 	}
 
-	private static boolean extensiveCheckServiceClass(String clazz, Class serviceClazz) {
+	private static boolean extensiveCheckServiceClass(String clazz, Class<?> serviceClazz) {
 		if (clazz.equals(serviceClazz.getName()))
 			return false;
-		Class[] interfaces = serviceClazz.getInterfaces();
+		Class<?>[] interfaces = serviceClazz.getInterfaces();
 		for (int i = 0, len = interfaces.length; i < len; i++)
 			if (!extensiveCheckServiceClass(clazz, interfaces[i]))
 				return false;
-		Class superClazz = serviceClazz.getSuperclass();
+		Class<?> superClazz = serviceClazz.getSuperclass();
 		if (superClazz != null)
 			if (!extensiveCheckServiceClass(clazz, superClazz))
 				return false;
 		return true;
 	}
 
-	static boolean isAssignableTo(BundleContextImpl context, ServiceReferenceImpl reference) {
+	static boolean isAssignableTo(BundleContextImpl context, ServiceReferenceImpl<?> reference) {
 		Bundle bundle = context.getBundleImpl();
 		String[] clazzes = reference.getClasses();
 		for (int i = 0, len = clazzes.length; i < len; i++)
@@ -1058,11 +1111,11 @@ public class ServiceRegistry {
 	 * @param allservices True if getAllServiceReferences called.
 	 * @param result The result to return to the caller which may have been shrunk by the FindHooks.
 	 */
-	private void notifyFindHooks(final BundleContextImpl context, final String clazz, final String filterstring, final boolean allservices, final Collection result) {
+	private void notifyFindHooks(final BundleContextImpl context, final String clazz, final String filterstring, final boolean allservices, final Collection<ServiceReference<?>> result) {
 		if (System.getSecurityManager() == null) {
 			notifyFindHooksPrivileged(context, clazz, filterstring, allservices, result);
 		} else {
-			AccessController.doPrivileged(new PrivilegedAction() {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
 					notifyFindHooksPrivileged(context, clazz, filterstring, allservices, result);
 					return null;
@@ -1071,43 +1124,25 @@ public class ServiceRegistry {
 		}
 	}
 
-	void notifyFindHooksPrivileged(BundleContextImpl context, String clazz, String filterstring, boolean allservices, Collection result) {
-		BundleContextImpl systemBundleContext = framework.getSystemBundleContext();
-		if (systemBundleContext == null) { // if no system bundle context, we are done!
-			return;
-		}
-
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-			Debug.println("notifyFindHooks(" + context.getBundleImpl() + "," + clazz + "," + filterstring + "," + allservices + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+	void notifyFindHooksPrivileged(final BundleContextImpl context, final String clazz, final String filterstring, final boolean allservices, final Collection<ServiceReference<?>> result) {
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("notifyServiceFindHooks(" + context.getBundleImpl() + "," + clazz + "," + filterstring + "," + allservices + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
 		}
+		notifyHooksPrivileged(new HookContext() {
+			public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+				if (hook instanceof FindHook) {
+					((FindHook) hook).find(context, clazz, filterstring, allservices, result);
+				}
+			}
 
-		List hooks = lookupServiceRegistrations(findHookName, null);
-		// Since the list is already sorted, we don't need to sort the list to call the hooks
-		// in the proper order.
-
-		for (Iterator iter = hooks.iterator(); iter.hasNext();) {
-			ServiceRegistrationImpl registration = (ServiceRegistrationImpl) iter.next();
-			Object findHook = registration.getService(systemBundleContext);
-			if (findHook == null) { // if the hook is null
-				continue;
+			public String getHookClassName() {
+				return findHookName;
 			}
-			try {
-				if (findHook instanceof FindHook) { // if the hook is usable
-					((FindHook) findHook).find(context, clazz, filterstring, allservices, result);
-				}
-			} catch (Throwable t) {
-				if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-					Debug.println(findHook + ".find() exception: " + t.getMessage()); //$NON-NLS-1$
-					Debug.printStackTrace(t);
-				}
-				// allow the adaptor to handle this unexpected error
-				framework.getAdaptor().handleRuntimeError(t);
-				ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, findHook.getClass().getName(), "find"), t); //$NON-NLS-1$ 
-				framework.publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
-			} finally {
-				registration.ungetService(systemBundleContext);
+
+			public String getHookMethodName() {
+				return "find"; //$NON-NLS-1$
 			}
-		}
+		});
 	}
 
 	/**
@@ -1118,42 +1153,101 @@ public class ServiceRegistry {
 	 * @param event The service event to be delivered.
 	 * @param result The result to return to the caller which may have been shrunk by the EventHooks.
 	 */
-	private void notifyEventHooksPrivileged(ServiceEvent event, Collection result) {
+	private void notifyEventHooksPrivileged(final ServiceEvent event, final Collection<BundleContext> result) {
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("notifyServiceEventHooks(" + event.getType() + ":" + event.getServiceReference() + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
+		}
+		notifyHooksPrivileged(new HookContext() {
+			public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+				if (hook instanceof EventHook) {
+					((EventHook) hook).event(event, result);
+				}
+			}
+
+			public String getHookClassName() {
+				return eventHookName;
+			}
+
+			public String getHookMethodName() {
+				return "event"; //$NON-NLS-1$
+			}
+		});
+	}
+
+	/**
+	 * Call the registered EventListenerHook services to allow them to inspect and possibly shrink the result.
+	 * The EventListenerHooks must be called in order: descending by service.ranking, then ascending by service.id.
+	 * This is the natural order for ServiceReference.
+	 * 
+	 * @param event The service event to be delivered.
+	 * @param result The result to return to the caller which may have been shrunk by the EventListenerHooks.
+	 */
+	private void notifyEventListenerHooksPrivileged(final ServiceEvent event, final Map<BundleContext, Collection<ListenerInfo>> result) {
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("notifyServiceEventListenerHooks(" + event.getType() + ":" + event.getServiceReference() + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
+		}
+		notifyHooksPrivileged(new HookContext() {
+			public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+				if (hook instanceof EventListenerHook) {
+					((EventListenerHook) hook).event(event, result);
+				}
+			}
+
+			public String getHookClassName() {
+				return eventListenerHookName;
+			}
+
+			public String getHookMethodName() {
+				return "event"; //$NON-NLS-1$
+			}
+		});
+	}
+
+	/**
+	 * Calls all hook services of the type specified by the hook context.
+	 * 
+	 * @param hookContext Context to use when calling the hook services.
+	 */
+	public void notifyHooksPrivileged(HookContext hookContext) {
 		BundleContextImpl systemBundleContext = framework.getSystemBundleContext();
 		if (systemBundleContext == null) { // if no system bundle context, we are done!
 			return;
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-			Debug.println("notifyEventHooks(" + event.getType() + ":" + event.getServiceReference() + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
-		}
-
-		List hooks = lookupServiceRegistrations(eventHookName, null);
+		List<ServiceRegistrationImpl<?>> hooks = lookupServiceRegistrations(hookContext.getHookClassName(), null);
 		// Since the list is already sorted, we don't need to sort the list to call the hooks
 		// in the proper order.
 
-		for (Iterator iter = hooks.iterator(); iter.hasNext();) {
-			ServiceRegistrationImpl registration = (ServiceRegistrationImpl) iter.next();
-			Object eventHook = registration.getService(systemBundleContext);
-			if (eventHook == null) { // if the hook is null
-				continue;
-			}
-			try {
-				if (eventHook instanceof EventHook) { // if the hook is usable
-					((EventHook) eventHook).event(event, result);
-				}
-			} catch (Throwable t) {
-				if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-					Debug.println(eventHook + ".event() exception: " + t.getMessage()); //$NON-NLS-1$
-					Debug.printStackTrace(t);
-				}
-				// allow the adaptor to handle this unexpected error
-				framework.getAdaptor().handleRuntimeError(t);
-				ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, eventHook.getClass().getName(), "event"), t); //$NON-NLS-1$ 
-				framework.publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
-			} finally {
-				registration.ungetService(systemBundleContext);
+		for (ServiceRegistrationImpl<?> registration : hooks) {
+			notifyHookPrivileged(systemBundleContext, registration, hookContext);
+		}
+	}
+
+	/**
+	 * Call a hook service via a hook context.
+	 * 
+	 * @param context Context of the bundle to get the hook service.
+	 * @param registration Hook service to call.
+	 * @param hookContext Context to use when calling the hook service.
+	 */
+	private void notifyHookPrivileged(BundleContextImpl context, ServiceRegistrationImpl<?> registration, HookContext hookContext) {
+		Object hook = registration.getSafeService(context);
+		if (hook == null) { // if the hook is null
+			return;
+		}
+		try {
+			hookContext.call(hook, registration);
+		} catch (Throwable t) {
+			if (Debug.DEBUG_HOOKS) {
+				Debug.println(hook.getClass().getName() + "." + hookContext.getHookMethodName() + "() exception: " + t.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+				Debug.printStackTrace(t);
 			}
+			// allow the adaptor to handle this unexpected error
+			framework.getAdaptor().handleRuntimeError(t);
+			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, hook.getClass().getName(), hookContext.getHookMethodName()), t);
+			framework.publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
+		} finally {
+			registration.ungetService(context);
 		}
 	}
 
@@ -1163,11 +1257,11 @@ public class ServiceRegistry {
 	 * 
 	 * @param registration The newly registered ListenerHook service.
 	 */
-	private void notifyNewListenerHook(final ServiceRegistrationImpl registration) {
+	private void notifyNewListenerHook(final ServiceRegistrationImpl<?> registration) {
 		if (System.getSecurityManager() == null) {
 			notifyNewListenerHookPrivileged(registration);
 		} else {
-			AccessController.doPrivileged(new PrivilegedAction() {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
 					notifyNewListenerHookPrivileged(registration);
 					return null;
@@ -1177,47 +1271,42 @@ public class ServiceRegistry {
 
 	}
 
-	void notifyNewListenerHookPrivileged(ServiceRegistrationImpl registration) {
+	void notifyNewListenerHookPrivileged(ServiceRegistrationImpl<?> registration) {
 		BundleContextImpl systemBundleContext = framework.getSystemBundleContext();
 		if (systemBundleContext == null) { // if no system bundle context, we are done!
 			return;
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-			Debug.println("notifyNewListenerHook(" + registration + ")"); //$NON-NLS-1$ //$NON-NLS-2$ 
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("notifyServiceNewListenerHook(" + registration + ")"); //$NON-NLS-1$ //$NON-NLS-2$ 
 		}
 
-		Collection addedListeners = new ArrayList(initialCapacity);
+		// snapshot the listeners
+		Collection<ListenerInfo> addedListeners = new ArrayList<ListenerInfo>(initialCapacity);
 		synchronized (serviceEventListeners) {
-			for (Iterator iter = serviceEventListeners.values().iterator(); iter.hasNext();) {
-				Map listeners = (Map) iter.next();
+			for (CopyOnWriteIdentityMap<ServiceListener, FilteredServiceListener> listeners : serviceEventListeners.values()) {
 				if (!listeners.isEmpty()) {
 					addedListeners.addAll(listeners.values());
 				}
 			}
 		}
-		addedListeners = Collections.unmodifiableCollection(addedListeners);
 
-		Object listenerHook = registration.getService(systemBundleContext);
-		if (listenerHook == null) { // if the hook is null
-			return;
-		}
-		try {
-			if (listenerHook instanceof ListenerHook) { // if the hook is usable
-				((ListenerHook) listenerHook).added(addedListeners);
+		final Collection<ListenerInfo> listeners = Collections.unmodifiableCollection(addedListeners);
+		notifyHookPrivileged(systemBundleContext, registration, new HookContext() {
+			public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+				if (hook instanceof ListenerHook) {
+					((ListenerHook) hook).added(listeners);
+				}
 			}
-		} catch (Throwable t) {
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-				Debug.println(listenerHook + ".added() exception: " + t.getMessage()); //$NON-NLS-1$
-				Debug.printStackTrace(t);
+
+			public String getHookClassName() {
+				return listenerHookName;
 			}
-			// allow the adaptor to handle this unexpected error
-			framework.getAdaptor().handleRuntimeError(t);
-			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, listenerHook.getClass().getName(), "event"), t); //$NON-NLS-1$ 
-			framework.publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
-		} finally {
-			registration.ungetService(systemBundleContext);
-		}
+
+			public String getHookMethodName() {
+				return "added"; //$NON-NLS-1$
+			}
+		});
 	}
 
 	/**
@@ -1225,15 +1314,16 @@ public class ServiceRegistry {
 	 * The ListenerHook must be called in order: descending by service.ranking, then ascending by service.id.
 	 * This is the natural order for ServiceReference.
 	 * 
-	 * @param listeners An unmodifiable collection of ListenerInfo objects.
+	 * @param listeners A non-empty, unmodifiable collection of ListenerInfo objects. 
+	 * All elements in the list must be for the same bundle. 
 	 * @param added <code>true</code> if the specified listeners are being added. <code>false</code>
 	 * if they are being removed.
 	 */
-	private void notifyListenerHooks(final Collection listeners, final boolean added) {
+	private void notifyListenerHooks(final Collection<ListenerInfo> listeners, final boolean added) {
 		if (System.getSecurityManager() == null) {
 			notifyListenerHooksPrivileged(listeners, added);
 		} else {
-			AccessController.doPrivileged(new PrivilegedAction() {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
 					notifyListenerHooksPrivileged(listeners, added);
 					return null;
@@ -1243,46 +1333,30 @@ public class ServiceRegistry {
 
 	}
 
-	void notifyListenerHooksPrivileged(Collection listeners, boolean added) {
-		BundleContextImpl systemBundleContext = framework.getSystemBundleContext();
-		if (systemBundleContext == null) { // if no system bundle context, we are done!
-			return;
-		}
-
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-			Debug.println("notifyListenerHooks(" + listeners + "," + (added ? "added" : "removed") + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+	void notifyListenerHooksPrivileged(final Collection<ListenerInfo> listeners, final boolean added) {
+		assert !listeners.isEmpty();
+		if (Debug.DEBUG_HOOKS) {
+			Debug.println("notifyServiceListenerHooks(" + listeners + "," + (added ? "added" : "removed") + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 		}
 
-		List hooks = lookupServiceRegistrations(listenerHookName, null);
-		// Since the list is already sorted, we don't need to sort the list to call the hooks
-		// in the proper order.
-
-		for (Iterator iter = hooks.iterator(); iter.hasNext();) {
-			ServiceRegistrationImpl registration = (ServiceRegistrationImpl) iter.next();
-			Object listenerHook = registration.getService(systemBundleContext);
-			if (listenerHook == null) { // if the hook is null
-				continue;
-			}
-			try {
-				if (listenerHook instanceof ListenerHook) { // if the hook is usable
+		notifyHooksPrivileged(new HookContext() {
+			public void call(Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+				if (hook instanceof ListenerHook) {
 					if (added) {
-						((ListenerHook) listenerHook).added(listeners);
+						((ListenerHook) hook).added(listeners);
 					} else {
-						((ListenerHook) listenerHook).removed(listeners);
+						((ListenerHook) hook).removed(listeners);
 					}
 				}
-			} catch (Throwable t) {
-				if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
-					Debug.println(listenerHook + "." + (added ? "added" : "removed") + "() exception: " + t.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-					Debug.printStackTrace(t);
-				}
-				// allow the adaptor to handle this unexpected error
-				framework.getAdaptor().handleRuntimeError(t);
-				ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, listenerHook.getClass().getName(), "event"), t); //$NON-NLS-1$ 
-				framework.publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
-			} finally {
-				registration.ungetService(systemBundleContext);
 			}
-		}
+
+			public String getHookClassName() {
+				return listenerHookName;
+			}
+
+			public String getHookMethodName() {
+				return added ? "added" : "removed"; //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		});
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java
old mode 100644
new mode 100755
index 11f3a54..5651dac
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java
@@ -27,22 +27,25 @@ import org.osgi.framework.*;
  * @ThreadSafe
  */
 
-public class ServiceUse {
+public class ServiceUse<S> {
 	/** ServiceFactory object if the service instance represents a factory,
 	 null otherwise */
-	final ServiceFactory factory;
+	final ServiceFactory<S> factory;
 	/** BundleContext associated with this service use */
 	final BundleContextImpl context;
 	/** ServiceDescription of the registered service */
-	final ServiceRegistrationImpl registration;
+	final ServiceRegistrationImpl<S> registration;
 
 	/** Service object either registered or that returned by
 	 ServiceFactory.getService() */
 	/* @GuardedBy("this") */
-	private Object cachedService;
+	private S cachedService;
 	/** bundle's use count for this service */
 	/* @GuardedBy("this") */
 	private int useCount;
+	/** true if we are calling the factory getService method. Used to detect recursion. */
+	/* @GuardedBy("this") */
+	private boolean factoryInUse;
 
 	/** Internal framework object. */
 
@@ -54,11 +57,14 @@ public class ServiceUse {
 	 * @param   context bundle getting the service
 	 * @param   registration ServiceRegistration of the service
 	 */
-	ServiceUse(BundleContextImpl context, ServiceRegistrationImpl registration) {
+	ServiceUse(BundleContextImpl context, ServiceRegistrationImpl<S> registration) {
 		this.useCount = 0;
-		Object service = registration.getServiceObject();
-		if (service instanceof ServiceFactory) {
-			this.factory = (ServiceFactory) service;
+		this.factoryInUse = false;
+		S service = registration.getServiceObject();
+		if (service instanceof ServiceFactory<?>) {
+			@SuppressWarnings("unchecked")
+			ServiceFactory<S> f = (ServiceFactory<S>) service;
+			this.factory = f;
 			this.cachedService = null;
 		} else {
 			this.factory = null;
@@ -104,24 +110,36 @@ public class ServiceUse {
 	 * reference.
 	 */
 	/* @GuardedBy("this") */
-	Object getService() {
+	S getService() {
+		assert Thread.holdsLock(this);
 		if ((useCount > 0) || (factory == null)) {
 			useCount++;
 			return cachedService;
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("getService[factory=" + registration.getBundle() + "](" + context.getBundleImpl() + "," + registration + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
-		final Object service;
+		// check for recursive call
+		if (factoryInUse == true) {
+			if (Debug.DEBUG_SERVICES) {
+				Debug.println(factory + ".getService() recursively called."); //$NON-NLS-1$
+			}
+
+			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_RECURSION, factory.getClass().getName(), "getService"), ServiceException.FACTORY_RECURSION); //$NON-NLS-1$
+			context.getFramework().publishFrameworkEvent(FrameworkEvent.WARNING, registration.getBundle(), se);
+			return null;
+		}
+		factoryInUse = true;
+		final S service;
 		try {
-			service = AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
+			service = AccessController.doPrivileged(new PrivilegedAction<S>() {
+				public S run() {
 					return factory.getService(context.getBundleImpl(), registration);
 				}
 			});
 		} catch (Throwable t) {
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+			if (Debug.DEBUG_SERVICES) {
 				Debug.println(factory + ".getService() exception: " + t.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(t);
 			}
@@ -130,10 +148,12 @@ public class ServiceUse {
 			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, factory.getClass().getName(), "getService"), ServiceException.FACTORY_EXCEPTION, t); //$NON-NLS-1$ 
 			context.getFramework().publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
 			return null;
+		} finally {
+			factoryInUse = false;
 		}
 
 		if (service == null) {
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+			if (Debug.DEBUG_SERVICES) {
 				Debug.println(factory + ".getService() returned null."); //$NON-NLS-1$
 			}
 
@@ -145,7 +165,7 @@ public class ServiceUse {
 		String[] clazzes = registration.getClasses();
 		String invalidService = ServiceRegistry.checkServiceClass(clazzes, service);
 		if (invalidService != null) {
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+			if (Debug.DEBUG_SERVICES) {
 				Debug.println("Service object is not an instanceof " + invalidService); //$NON-NLS-1$
 			}
 			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_NOT_INSTANCEOF_CLASS_EXCEPTION, factory.getClass().getName(), invalidService), ServiceException.FACTORY_ERROR);
@@ -189,6 +209,7 @@ public class ServiceUse {
 	 */
 	/* @GuardedBy("this") */
 	boolean ungetService() {
+		assert Thread.holdsLock(this);
 		if (useCount == 0) {
 			return true;
 		}
@@ -202,21 +223,21 @@ public class ServiceUse {
 			return true;
 		}
 
-		final Object service = cachedService;
+		final S service = cachedService;
 		cachedService = null;
 
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("ungetService[factory=" + registration.getBundle() + "](" + context.getBundleImpl() + "," + registration + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
 		try {
-			AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
+			AccessController.doPrivileged(new PrivilegedAction<S>() {
+				public S run() {
 					factory.ungetService(context.getBundleImpl(), registration, service);
 					return null;
 				}
 			});
 		} catch (Throwable t) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println(factory + ".ungetService() exception"); //$NON-NLS-1$
 				Debug.printStackTrace(t);
 			}
@@ -239,25 +260,26 @@ public class ServiceUse {
 	 */
 	/* @GuardedBy("this") */
 	void releaseService() {
+		assert Thread.holdsLock(this);
 		if ((useCount == 0) || (factory == null)) {
 			return;
 		}
-		final Object service = cachedService;
+		final S service = cachedService;
 		cachedService = null;
 		useCount = 0;
 
-		if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+		if (Debug.DEBUG_SERVICES) {
 			Debug.println("releaseService[factory=" + registration.getBundle() + "](" + context.getBundleImpl() + "," + registration + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
 		try {
-			AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
+			AccessController.doPrivileged(new PrivilegedAction<S>() {
+				public S run() {
 					factory.ungetService(context.getBundleImpl(), registration, service);
 					return null;
 				}
 			});
 		} catch (Throwable t) {
-			if (Debug.DEBUG && Debug.DEBUG_SERVICES) {
+			if (Debug.DEBUG_SERVICES) {
 				Debug.println(factory + ".ungetService() exception"); //$NON-NLS-1$
 				Debug.printStackTrace(t);
 			}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java
index cbc70ec..2c2e600 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,13 +11,16 @@
 
 package org.eclipse.osgi.internal.serviceregistry;
 
-import java.util.Collection;
-import java.util.Iterator;
+import java.util.*;
 
 /**
- * A Shrinkable Collection. This class provides a wrapper for a collection
- * that allows items to be removed from the wrapped collection (shrinking) but
- * does not allow items to be added to the wrapped collection. 
+ * A Shrinkable Collection. This class provides a wrapper for a list of collections
+ * that allows items to be removed from the wrapped collections (shrinking) but
+ * does not allow items to be added to the wrapped collections. 
+ * 
+ * <p>
+ * The collections must act as sets in that each collection in the list
+ * must not have two entries which are equal.
  * 
  * <p>
  * All the optional <code>Collection</code> operations except
@@ -26,54 +29,153 @@ import java.util.Iterator;
  *
  */
 
-public class ShrinkableCollection implements Collection {
-	private final Collection collection;
+public class ShrinkableCollection<E> implements Collection<E> {
+	private final Collection<? extends E> collection;
+	private final List<Collection<? extends E>> list;
 
-	ShrinkableCollection(Collection c) {
+	public ShrinkableCollection(Collection<? extends E> c) {
 		if (c == null) {
 			throw new NullPointerException();
 		}
+		@SuppressWarnings("unchecked")
+		List<Collection<? extends E>> empty = Collections.EMPTY_LIST;
+		list = empty;
 		collection = c;
 	}
 
-	public boolean add(Object var0) {
+	public ShrinkableCollection(Collection<? extends E> c1, Collection<? extends E> c2) {
+		list = new ArrayList<Collection<? extends E>>(2);
+		list.add(c1);
+		list.add(c2);
+		collection = initComposite(list);
+	}
+
+	public ShrinkableCollection(List<Collection<? extends E>> l) {
+		list = new ArrayList<Collection<? extends E>>(l);
+		collection = initComposite(list);
+	}
+
+	private static <E> Collection<? extends E> initComposite(List<Collection<? extends E>> collections) {
+		int size = 0;
+		for (Collection<? extends E> c : collections) {
+			assert verifyNoDuplicates(c);
+			size += c.size();
+		}
+		Collection<E> result = new ArrayList<E>(size);
+		for (Collection<? extends E> c : collections) {
+			for (E e : c) {
+				if (!result.contains(e)) {
+					result.add(e);
+				}
+			}
+		}
+		return result;
+	}
+
+	private static <E> boolean verifyNoDuplicates(Collection<? extends E> c) {
+		for (E e : c) {
+			int count = 0;
+			for (E f : c) {
+				if (e == null) {
+					if (f == null) {
+						count++;
+					}
+				} else {
+					if (e.equals(f)) {
+						count++;
+					}
+				}
+			}
+			if (count != 1) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	public boolean add(E e) {
 		throw new UnsupportedOperationException();
 	}
 
-	public boolean addAll(Collection var0) {
+	public boolean addAll(Collection<? extends E> c) {
 		throw new UnsupportedOperationException();
 	}
 
 	public void clear() {
 		collection.clear();
+		for (Collection<? extends E> c : list) {
+			c.clear();
+		}
 	}
 
-	public boolean contains(Object var0) {
-		return collection.contains(var0);
+	public boolean contains(Object o) {
+		return collection.contains(o);
 	}
 
-	public boolean containsAll(Collection var0) {
-		return collection.containsAll(var0);
+	public boolean containsAll(Collection<?> c) {
+		return collection.containsAll(c);
 	}
 
 	public boolean isEmpty() {
 		return collection.isEmpty();
 	}
 
-	public Iterator iterator() {
-		return collection.iterator();
+	public Iterator<E> iterator() {
+		@SuppressWarnings("unchecked")
+		final Iterator<E> iter = (Iterator<E>) collection.iterator();
+		final List<Collection<? extends E>> collections = list;
+		if (collections.isEmpty()) {
+			return iter;
+		}
+		return new Iterator<E>() {
+			private E last;
+
+			public boolean hasNext() {
+				return iter.hasNext();
+			}
+
+			public E next() {
+				last = iter.next();
+				return last;
+			}
+
+			public void remove() {
+				iter.remove();
+				for (Collection<? extends E> c : collections) {
+					c.remove(last);
+				}
+			}
+		};
 	}
 
-	public boolean remove(Object var0) {
-		return collection.remove(var0);
+	public boolean remove(Object o) {
+		final boolean result = collection.remove(o);
+		if (result) {
+			for (Collection<? extends E> c : list) {
+				c.remove(o);
+			}
+		}
+		return result;
 	}
 
-	public boolean removeAll(Collection var0) {
-		return collection.removeAll(var0);
+	public boolean removeAll(Collection<?> c) {
+		final boolean result = collection.removeAll(c);
+		if (result) {
+			for (Collection<? extends E> cc : list) {
+				cc.removeAll(c);
+			}
+		}
+		return result;
 	}
 
-	public boolean retainAll(Collection var0) {
-		return collection.retainAll(var0);
+	public boolean retainAll(Collection<?> c) {
+		final boolean result = collection.retainAll(c);
+		if (result) {
+			for (Collection<? extends E> cc : list) {
+				cc.retainAll(c);
+			}
+		}
+		return result;
 	}
 
 	public int size() {
@@ -84,7 +186,11 @@ public class ShrinkableCollection implements Collection {
 		return collection.toArray();
 	}
 
-	public Object[] toArray(Object[] var0) {
+	public <T> T[] toArray(T[] var0) {
 		return collection.toArray(var0);
 	}
+
+	public String toString() {
+		return collection.toString();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableEntrySetValueCollection.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableEntrySetValueCollection.java
new file mode 100644
index 0000000..a98fdce
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableEntrySetValueCollection.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.internal.serviceregistry;
+
+import java.util.*;
+
+public class ShrinkableEntrySetValueCollection<E> extends AbstractCollection<E> implements Collection<E> {
+	private final Set<? extends Map.Entry<?, ? extends E>> entrySet;
+
+	public ShrinkableEntrySetValueCollection(Set<? extends Map.Entry<?, ? extends E>> e) {
+		if (e == null) {
+			throw new NullPointerException();
+		}
+		entrySet = e;
+	}
+
+	public void clear() {
+		entrySet.clear();
+	}
+
+	public boolean isEmpty() {
+		return entrySet.isEmpty();
+	}
+
+	public Iterator<E> iterator() {
+		return new ValueIterator<E>(entrySet.iterator());
+	}
+
+	public int size() {
+		return entrySet.size();
+	}
+
+	/**
+	 * Iterator over the values of the entry set.
+	 */
+	static private final class ValueIterator<E> implements Iterator<E> {
+		private final Iterator<? extends Map.Entry<?, ? extends E>> iter;
+
+		ValueIterator(Iterator<? extends Map.Entry<?, ? extends E>> i) {
+			iter = i;
+		}
+
+		public boolean hasNext() {
+			return iter.hasNext();
+		}
+
+		public E next() {
+			final Map.Entry<?, ? extends E> entry = iter.next();
+			return entry.getValue();
+		}
+
+		public void remove() {
+			iter.remove();
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableValueCollectionMap.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableValueCollectionMap.java
new file mode 100644
index 0000000..d999260
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/serviceregistry/ShrinkableValueCollectionMap.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.internal.serviceregistry;
+
+import java.util.*;
+
+public class ShrinkableValueCollectionMap<K, V> extends AbstractMap<K, Collection<V>> implements Map<K, Collection<V>> {
+	final Map<? extends K, ? extends Set<? extends Map.Entry<?, ? extends V>>> map;
+	Map<Object, Collection<V>> values;
+
+	public ShrinkableValueCollectionMap(Map<? extends K, ? extends Set<? extends Map.Entry<?, ? extends V>>> m) {
+		if (m == null) {
+			throw new NullPointerException();
+		}
+		map = m;
+		values = null;
+	}
+
+	public void clear() {
+		map.clear();
+		if (values != null) {
+			values.clear();
+		}
+	}
+
+	public boolean containsKey(Object key) {
+		return map.containsKey(key);
+	}
+
+	public boolean containsValue(Object value) {
+		/* Since values are collections and the collection has identity equality,
+		 * there is no way any value could be contained in this map unless that
+		 * value has already been gotten from this map.
+		 */
+		if (values == null) {
+			return false;
+		}
+		return values.containsValue(value);
+	}
+
+	public Set<Map.Entry<K, Collection<V>>> entrySet() {
+		return new EntrySet();
+	}
+
+	public Collection<V> get(Object key) {
+		Collection<V> value = null;
+		if (values != null) {
+			value = values.get(key);
+		}
+		if (value == null) {
+			Set<? extends Map.Entry<?, ? extends V>> entrySet = map.get(key);
+			if (entrySet == null) {
+				return null;
+			}
+			value = new ShrinkableEntrySetValueCollection<V>(entrySet);
+			if (values == null) {
+				values = new HashMap<Object, Collection<V>>(map.size());
+			}
+			values.put(key, value);
+		}
+		return value;
+	}
+
+	public boolean isEmpty() {
+		return map.isEmpty();
+	}
+
+	public Collection<V> remove(Object key) {
+		Set<? extends Map.Entry<?, ? extends V>> entrySet = map.remove(key);
+		Collection<V> value = null;
+		if (values != null) {
+			value = values.remove(key);
+		}
+		if ((value == null) && (entrySet != null)) {
+			value = new ShrinkableEntrySetValueCollection<V>(entrySet);
+		}
+		return value;
+	}
+
+	public int size() {
+		return map.size();
+	}
+
+	/**
+	 * Set class used for entry sets.
+	 */
+	private final class EntrySet extends AbstractSet<Map.Entry<K, Collection<V>>> {
+		EntrySet() {
+			super();
+		}
+
+		public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+			return new EntryIterator();
+		}
+
+		public int size() {
+			return ShrinkableValueCollectionMap.this.size();
+		}
+	}
+
+	/** 
+	 * Iterator class used for entry sets.
+	 */
+	private final class EntryIterator implements Iterator<Map.Entry<K, Collection<V>>> {
+		private final Iterator<? extends K> iter;
+		private K last;
+
+		EntryIterator() {
+			iter = map.keySet().iterator();
+		}
+
+		public boolean hasNext() {
+			return iter.hasNext();
+		}
+
+		public Map.Entry<K, Collection<V>> next() {
+			last = iter.next();
+			return new Entry(last);
+		}
+
+		public void remove() {
+			iter.remove();
+			if (values != null) {
+				values.remove(last);
+			}
+		}
+	}
+
+	/**
+	 * This class represents the entry in this map.
+	 */
+	private final class Entry implements Map.Entry<K, Collection<V>> {
+		private final K key;
+		private Collection<V> value;
+
+		Entry(final K k) {
+			key = k;
+		}
+
+		public K getKey() {
+			return key;
+		}
+
+		public Collection<V> getValue() {
+			if (value == null) {
+				value = ShrinkableValueCollectionMap.this.get(key);
+			}
+			return value;
+		}
+
+		public Collection<V> setValue(Collection<V> value) {
+			throw new UnsupportedOperationException(); // entries cannot be modified.
+		}
+
+		public String toString() {
+			return getKey() + "=" + getValue(); //$NON-NLS-1$
+		}
+
+		public int hashCode() {
+			return hash(getKey()) ^ hash(getValue());
+		}
+
+		public boolean equals(Object obj) {
+			if (obj == this) {
+				return true;
+			}
+			if (!(obj instanceof Map.Entry)) {
+				return false;
+			}
+			Map.Entry<?, ?> other = (Map.Entry<?, ?>) obj;
+			return equality(getKey(), other.getKey()) && equality(getValue(), other.getValue());
+		}
+	}
+
+	static int hash(Object one) {
+		return (one == null) ? 0 : one.hashCode();
+	}
+
+	static boolean equality(Object one, Object two) {
+		return (one == null) ? (two == null) : one.equals(two);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/Equinox.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/Equinox.java
index 3d6e280..d24ff52 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/Equinox.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/Equinox.java
@@ -10,12 +10,12 @@
  *******************************************************************************/
 package org.eclipse.osgi.launch;
 
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.net.*;
 import java.security.*;
+import java.security.cert.X509Certificate;
 import java.util.*;
 import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.framework.util.Headers;
@@ -34,21 +34,23 @@ public class Equinox implements Framework {
 	/**@GuardedBy this*/
 	private Framework impl;
 	private final boolean useSeparateCL;
-	private final Map configuration;
+	private final Map<String, Object> configuration;
 
-	public Equinox(Map configuration) {
+	public Equinox(Map<String, ?> configuration) {
 		SecurityManager sm = System.getSecurityManager();
 		if (sm != null)
 			sm.checkPermission(new AllPermission());
 		useSeparateCL = FrameworkProperties.inUse();
-		this.configuration = configuration == null ? Collections.EMPTY_MAP : new HashMap(configuration);
+		@SuppressWarnings("unchecked")
+		final Map<String, Object> empty = Collections.EMPTY_MAP;
+		this.configuration = configuration == null ? empty : new HashMap<String, Object>(configuration);
 	}
 
 	private Framework createImpl() {
 		if (System.getSecurityManager() == null)
 			return createImpl0();
-		return (Framework) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Framework>() {
+			public Framework run() {
 				return createImpl0();
 			}
 		});
@@ -56,8 +58,8 @@ public class Equinox implements Framework {
 
 	Framework createImpl0() {
 		try {
-			Class implClazz = getImplClass();
-			Constructor constructor = implClazz.getConstructor(new Class[] {Map.class});
+			Class<?> implClazz = getImplClass();
+			Constructor<?> constructor = implClazz.getConstructor(new Class[] {Map.class});
 			return (Framework) constructor.newInstance(new Object[] {configuration});
 		} catch (ClassNotFoundException e) {
 			throw new NoClassDefFoundError(implName);
@@ -72,7 +74,7 @@ public class Equinox implements Framework {
 		}
 	}
 
-	private Class getImplClass() throws ClassNotFoundException {
+	private Class<?> getImplClass() throws ClassNotFoundException {
 		ClassLoader thisCL = this.getClass().getClassLoader();
 		if (!(useSeparateCL && (thisCL instanceof URLClassLoader)))
 			return Class.forName(implName);
@@ -84,7 +86,7 @@ public class Equinox implements Framework {
 	private URL[] getFrameworkURLs(URLClassLoader frameworkLoader) {
 		// use the classpath of the framework class loader
 		URL[] cp = frameworkLoader.getURLs();
-		ArrayList result = new ArrayList(cp.length);
+		List<URL> result = new ArrayList<URL>(cp.length);
 		for (int i = 0; i < cp.length; i++) {
 			// need to add only the urls for the framework and any framework fragments
 			InputStream manifest = null;
@@ -94,7 +96,7 @@ public class Equinox implements Framework {
 				} else {
 					manifest = new URL("jar:" + cp[i].toExternalForm() + "!/" + org.eclipse.osgi.framework.internal.core.Constants.OSGI_BUNDLE_MANIFEST).openStream(); //$NON-NLS-1$ //$NON-NLS-2$
 				}
-				Map headers = ManifestElement.parseBundleManifest(manifest, new Headers(10));
+				Map<String, String> headers = ManifestElement.parseBundleManifest(manifest, new Headers<String, String>(10));
 				String bsnSpec = getValue(headers, Constants.BUNDLE_SYMBOLICNAME);
 				if (bsnSpec == null)
 					continue;
@@ -123,10 +125,10 @@ public class Equinox implements Framework {
 					}
 			}
 		}
-		return (URL[]) result.toArray(new URL[result.size()]);
+		return result.toArray(new URL[result.size()]);
 	}
 
-	private void addDevClassPaths(URL cp, String bsn, ArrayList result) {
+	private void addDevClassPaths(URL cp, String bsn, List<URL> result) {
 		if (!cp.getPath().endsWith("/")) //$NON-NLS-1$
 			return;
 		String[] devPaths = DevClassPathHelper.getDevClassPath(bsn);
@@ -146,13 +148,13 @@ public class Equinox implements Framework {
 			}
 	}
 
-	private boolean isFrameworkFragment(Map headers, String internalBSN) {
+	private boolean isFrameworkFragment(Map<String, String> headers, String internalBSN) {
 		String hostBSN = getValue(headers, Constants.FRAGMENT_HOST);
 		return internalBSN.equals(hostBSN) || Constants.SYSTEM_BUNDLE_SYMBOLICNAME.equals(hostBSN);
 	}
 
-	private String getValue(Map headers, String key) {
-		String headerSpec = (String) headers.get(key);
+	private String getValue(Map<String, String> headers, String key) {
+		String headerSpec = headers.get(key);
 		if (headerSpec == null)
 			return null;
 		ManifestElement[] elements;
@@ -180,7 +182,7 @@ public class Equinox implements Framework {
 		return getImpl().waitForStop(timeout);
 	}
 
-	public Enumeration findEntries(String path, String filePattern, boolean recurse) {
+	public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
 		return getImpl().findEntries(path, filePattern, recurse);
 	}
 
@@ -196,15 +198,15 @@ public class Equinox implements Framework {
 		return getImpl().getEntry(path);
 	}
 
-	public Enumeration getEntryPaths(String path) {
+	public Enumeration<String> getEntryPaths(String path) {
 		return getImpl().getEntryPaths(path);
 	}
 
-	public Dictionary getHeaders() {
+	public Dictionary<String, String> getHeaders() {
 		return getImpl().getHeaders();
 	}
 
-	public Dictionary getHeaders(String locale) {
+	public Dictionary<String, String> getHeaders(String locale) {
 		return getImpl().getHeaders(locale);
 	}
 
@@ -216,7 +218,7 @@ public class Equinox implements Framework {
 		return getImpl().getLocation();
 	}
 
-	public ServiceReference[] getRegisteredServices() {
+	public ServiceReference<?>[] getRegisteredServices() {
 		return getImpl().getRegisteredServices();
 	}
 
@@ -224,11 +226,11 @@ public class Equinox implements Framework {
 		return getImpl().getResource(name);
 	}
 
-	public Enumeration getResources(String name) throws IOException {
+	public Enumeration<URL> getResources(String name) throws IOException {
 		return getImpl().getResources(name);
 	}
 
-	public ServiceReference[] getServicesInUse() {
+	public ServiceReference<?>[] getServicesInUse() {
 		return getImpl().getServicesInUse();
 	}
 
@@ -244,7 +246,7 @@ public class Equinox implements Framework {
 		return getImpl().hasPermission(permission);
 	}
 
-	public Class loadClass(String name) throws ClassNotFoundException {
+	public Class<?> loadClass(String name) throws ClassNotFoundException {
 		return getImpl().loadClass(name);
 	}
 
@@ -276,11 +278,24 @@ public class Equinox implements Framework {
 		getImpl().update(in);
 	}
 
-	public Map getSignerCertificates(int signersType) {
+	public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
 		return getImpl().getSignerCertificates(signersType);
 	}
 
 	public Version getVersion() {
 		return getImpl().getVersion();
 	}
+
+	public <A> A adapt(Class<A> adapterType) {
+		return getImpl().adapt(adapterType);
+	}
+
+	public int compareTo(Bundle o) {
+		return getImpl().compareTo(o);
+	}
+
+	public File getDataFile(String filename) {
+		return getImpl().getDataFile(filename);
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFWClassLoader.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFWClassLoader.java
index 01fd48b..7011b5b 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFWClassLoader.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFWClassLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,8 @@ class EquinoxFWClassLoader extends URLClassLoader {
 		this.parent = parent;
 	}
 
-	protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
-		Class clazz = findLoadedClass(name);
+	protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+		Class<?> clazz = findLoadedClass(name);
 		if (clazz != null)
 			return clazz;
 
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFactory.java b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFactory.java
index 5c0c9e8..389f07a 100644
--- a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/launch/EquinoxFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@ import org.osgi.framework.launch.FrameworkFactory;
  */
 public class EquinoxFactory implements FrameworkFactory {
 
-	public Framework newFramework(Map configuration) {
+	public Framework newFramework(Map<String, String> configuration) {
 		return new Equinox(configuration);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/customBuildCallbacks.xml b/eclipse/plugins/org.eclipse.osgi/customBuildCallbacks.xml
new file mode 100644
index 0000000..c282787
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/customBuildCallbacks.xml
@@ -0,0 +1,164 @@
+<!-- ===================================================================== -->
+<!-- Custom targets called from a project's generated build.xml            -->
+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
+<!-- ===================================================================== -->
+<project name="Build specific targets and properties" default="noDefault">
+
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="This file must be called with explicit targets" />
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.jars                              -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.jars">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.jars                               -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.jars">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target build.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="pre.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target build.sources                            -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder to contain the build results           -->
+	<!-- ===================================================================== -->
+	<target name="post.build.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the compilation target <name>                      -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="pre.name">
+	</target>
+
+	<target name="pre. at dot">
+		<copydir dest="osgi/src2" src="../org.osgi.framework/src"></copydir>
+		<copydir dest="osgi/src2" src="../org.osgi.service.composite/src"></copydir>
+		<copydir dest="osgi/src2" src="../org.osgi.service.packageadmin/src"></copydir>
+		<copydir dest="osgi/src2" src="../org.osgi.service.startlevel/src"></copydir>
+		<copydir dest="osgi/src2" src="../org.osgi.util.tracker/src"></copydir>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do during the compilation target <name>, after the compile   -->
+	<!-- but before jaring.  Substitute "name" with the name of the compilation-->
+	<!-- target, eg @dot                                                       -->
+	<!-- Available parameters :                                                -->
+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
+	<!--   target.folder  : where the results of the compilation go            -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.compile.name">
+	</target>
+
+	<target name="post.compile. at dot">
+		<deltree dir="osgi/src2/org/"/>
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the compilation target <name>                       -->
+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
+	<!-- Available parameters :                                                -->
+	<!--   jar.Location - the location of the compilation results              -->
+	<!--   <name>.classpath : name = name of the compilation target. A         -->
+	<!--                      reference to the classpath structure.            -->
+	<!-- ===================================================================== -->
+	<target name="post.name">
+	</target>
+
+	<target name="post. at dot">
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.bin.parts">
+	</target>
+		
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.bin.parts                         -->
+	<!-- Available parameters :                                                -->
+	<!--   build.result.folder - folder containing the build results           -->
+	<!--   target.folder - destination folder                                  -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.bin.parts">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.sources                          -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.sources                           -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.sources">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target gather.logs                             -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.gather.logs">        
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target gather.logs                              -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="post.gather.logs">       
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before the target clean                                   -->
+	<!-- Available parameters :                                                -->
+	<!--   destination.temp.folder - destination folder                        -->
+	<!-- ===================================================================== -->
+	<target name="pre.clean">              
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the target clean                                    -->
+	<!-- Available parameters :                                                -->
+	<!--   plugin.destination - final destination of the build                 -->
+	<!--   build.result.folder - results of the compilation                    -->
+	<!--   temp.folder - temporary folder                                      -->
+	<!-- ===================================================================== -->
+	<target name="post.clean">             
+	</target>
+</project>
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java
index 324ff1c..0c2aebb 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,14 +14,14 @@ package org.eclipse.osgi.baseadaptor;
 import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
-import java.util.Properties;
+import java.util.*;
 import org.eclipse.core.runtime.adaptor.LocationManager;
 import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile;
 import org.eclipse.osgi.baseadaptor.hooks.*;
 import org.eclipse.osgi.framework.adaptor.*;
 import org.eclipse.osgi.framework.debug.Debug;
+import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
-import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.internal.baseadaptor.*;
@@ -29,6 +29,7 @@ import org.eclipse.osgi.service.resolver.PlatformAdmin;
 import org.eclipse.osgi.service.resolver.State;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
+import org.osgi.framework.wiring.BundleWiring;
 
 /**
  * A Framework adaptor implementation that allows additional functionality to be
@@ -55,7 +56,15 @@ public class BaseAdaptor implements FrameworkAdaptor {
 	private static ClassLoader bundleClassLoaderParent;
 	static {
 		// check property for specified parent
-		String type = FrameworkProperties.getProperty(BaseAdaptor.PROP_PARENT_CLASSLOADER, BaseAdaptor.PARENT_CLASSLOADER_BOOT);
+		// check the osgi defined property first
+		String type = FrameworkProperties.getProperty(Constants.FRAMEWORK_BUNDLE_PARENT);
+		if (type != null) {
+			if (Constants.FRAMEWORK_BUNDLE_PARENT_FRAMEWORK.equals(type))
+				type = PARENT_CLASSLOADER_FWK;
+		} else {
+			type = FrameworkProperties.getProperty(BaseAdaptor.PROP_PARENT_CLASSLOADER, BaseAdaptor.PARENT_CLASSLOADER_BOOT);
+		}
+
 		if (BaseAdaptor.PARENT_CLASSLOADER_FWK.equalsIgnoreCase(type))
 			bundleClassLoaderParent = FrameworkAdaptor.class.getClassLoader();
 		else if (BaseAdaptor.PARENT_CLASSLOADER_APP.equalsIgnoreCase(type))
@@ -70,7 +79,7 @@ public class BaseAdaptor implements FrameworkAdaptor {
 			bundleClassLoaderParent = new ClassLoader(Object.class.getClassLoader()) {/* boot class loader*/};
 	}
 
-	private EventPublisher eventPublisher;
+	private Framework eventPublisher;
 	private boolean stopping;
 	private HookRegistry hookRegistry;
 	private FrameworkLog log;
@@ -100,7 +109,7 @@ public class BaseAdaptor implements FrameworkAdaptor {
 	 * @see FrameworkAdaptor#initialize(EventPublisher)
 	 */
 	public void initialize(EventPublisher publisher) {
-		this.eventPublisher = publisher;
+		this.eventPublisher = (Framework) publisher;
 		// set the adaptor for the adaptor hooks
 		AdaptorHook[] adaptorHooks = getHookRegistry().getAdaptorHooks();
 		for (int i = 0; i < adaptorHooks.length; i++)
@@ -115,6 +124,7 @@ public class BaseAdaptor implements FrameworkAdaptor {
 	}
 
 	/**
+	 * @throws IOException 
 	 * @see FrameworkAdaptor#compactStorage()
 	 */
 	public void compactStorage() throws IOException {
@@ -146,11 +156,11 @@ public class BaseAdaptor implements FrameworkAdaptor {
 					}
 				}
 			} else {
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+				if (Debug.DEBUG_GENERAL)
 					Debug.println("Skipping osgi.properties: " + resource); //$NON-NLS-1$
 			}
 		} catch (IOException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+			if (Debug.DEBUG_GENERAL)
 				Debug.println("Unable to load osgi.properties: " + e.getMessage()); //$NON-NLS-1$
 		}
 		// add the storage properties
@@ -222,6 +232,7 @@ public class BaseAdaptor implements FrameworkAdaptor {
 	}
 
 	/**
+	 * @throws IOException 
 	 * @see FrameworkAdaptor#getPermissionStorage()
 	 */
 	public PermissionStorage getPermissionStorage() throws IOException {
@@ -314,6 +325,9 @@ public class BaseAdaptor implements FrameworkAdaptor {
 				// do nothing
 			}
 
+			/**
+			 * @throws IOException  
+			 */
 			public void setFile(File newFile, boolean append) throws IOException {
 				// do nothing
 			}
@@ -434,6 +448,19 @@ public class BaseAdaptor implements FrameworkAdaptor {
 	}
 
 	/**
+	 * Returns the bundle with the specified identifier.  This method 
+	 * does not invoke and bundle find hooks and therefore does not 
+	 * allow bundle find hooks to hide a bundle from the caller.
+	 * 
+	 * @param id The identifier of the bundle to retrieve.
+	 * @return A {@code Bundle} object or {@code null} if the identifier does
+	 *         not match any installed bundle.
+	 */
+	public Bundle getBundle(long id) {
+		return eventPublisher.getBundle(id);
+	}
+
+	/**
 	 * Creates a bundle file object for the given content and base data. 
 	 * This method must delegate to each configured bundle file factory 
 	 * {@link BundleFileFactoryHook#createBundleFile(Object, BaseData, boolean)} method until one 
@@ -483,4 +510,190 @@ public class BaseAdaptor implements FrameworkAdaptor {
 				storage = ((BaseStorageHook) hooks[i]).getStorage();
 		return storage;
 	}
+
+	/**
+	 * @see FrameworkAdaptor#findEntries(List, String, String, int)
+	 */
+	public Enumeration<URL> findEntries(List<BundleData> datas, String path, String filePattern, int options) {
+		List<BundleFile> bundleFiles = new ArrayList<BundleFile>(datas.size());
+		for (BundleData data : datas)
+			bundleFiles.add(((BaseData) data).getBundleFile());
+		// search all the bundle files
+		List<String> pathList = listEntryPaths(bundleFiles, path, filePattern, options);
+		// return null if no entries found
+		if (pathList.size() == 0)
+			return null;
+		// create an enumeration to enumerate the pathList
+		final String[] pathArray = pathList.toArray(new String[pathList.size()]);
+		final BundleData[] dataArray = datas.toArray(new BundleData[datas.size()]);
+		return new Enumeration<URL>() {
+			private int curPathIndex = 0;
+			private int curDataIndex = 0;
+			private URL nextElement = null;
+
+			public boolean hasMoreElements() {
+				if (nextElement != null)
+					return true;
+				getNextElement();
+				return nextElement != null;
+			}
+
+			public URL nextElement() {
+				if (!hasMoreElements())
+					throw new NoSuchElementException();
+				URL result = nextElement;
+				// force the next element search
+				getNextElement();
+				return result;
+			}
+
+			private void getNextElement() {
+				nextElement = null;
+				if (curPathIndex >= pathArray.length)
+					// reached the end of the pathArray; no more elements
+					return;
+				while (nextElement == null && curPathIndex < pathArray.length) {
+					String curPath = pathArray[curPathIndex];
+					// search the datas until we have searched them all
+					while (nextElement == null && curDataIndex < dataArray.length)
+						nextElement = dataArray[curDataIndex++].getEntry(curPath);
+					// we have searched all datas then advance to the next path 
+					if (curDataIndex >= dataArray.length) {
+						curPathIndex++;
+						curDataIndex = 0;
+					}
+				}
+			}
+		};
+	}
+
+	/**
+	 * Returns the names of resources available from a list of bundle files.
+	 * No duplicate resource names are returned, each name is unique.
+	 * @param bundleFiles the list of bundle files to search in
+	 * @param path The path name in which to look.
+	 * @param filePattern The file name pattern for selecting resource names in
+	 *        the specified path.
+	 * @param options The options for listing resource names.
+	 * @return a list of resource names.  If no resources are found then
+	 * the empty list is returned.
+	 * @see BundleWiring#listResources(String, String, int)
+	 */
+	public List<String> listEntryPaths(List<BundleFile> bundleFiles, String path, String filePattern, int options) {
+		// a list used to store the results of the search
+		List<String> pathList = new ArrayList<String>();
+		Filter patternFilter = null;
+		Hashtable<String, String> patternProps = null;
+		if (filePattern != null) {
+			// Optimization: If the file pattern does not include a wildcard  or escape  char then it must represent a single file.
+			// Avoid pattern matching and use BundleFile.getEntry() if recursion was not requested.
+			if ((options & BundleWiring.FINDENTRIES_RECURSE) == 0 && filePattern.indexOf('*') == -1 && filePattern.indexOf('\\') == -1) {
+				if (path.length() == 0)
+					path = filePattern;
+				else
+					path += path.charAt(path.length() - 1) == '/' ? filePattern : '/' + filePattern;
+				for (BundleFile bundleFile : bundleFiles) {
+					if (bundleFile.getEntry(path) != null && !pathList.contains(path))
+						pathList.add(path);
+				}
+				return pathList;
+			}
+			// For when the file pattern includes a wildcard.
+			try {
+				// create a file pattern filter with 'filename' as the key
+				patternFilter = FilterImpl.newInstance("(filename=" + sanitizeFilterInput(filePattern) + ")"); //$NON-NLS-1$ //$NON-NLS-2$
+				// create a single hashtable to be shared during the recursive search
+				patternProps = new Hashtable<String, String>(2);
+			} catch (InvalidSyntaxException e) {
+				// something unexpected happened; log error and return nothing
+				Bundle b = context == null ? null : context.getBundle();
+				eventPublisher.publishFrameworkEvent(FrameworkEvent.ERROR, b, e);
+				return pathList;
+			}
+		}
+		// find the entry paths for the datas
+		for (BundleFile bundleFile : bundleFiles) {
+			listEntryPaths(bundleFile, path, patternFilter, patternProps, options, pathList);
+		}
+		return pathList;
+	}
+
+	private String sanitizeFilterInput(String filePattern) throws InvalidSyntaxException {
+		StringBuffer buffer = null;
+		boolean foundEscape = false;
+		for (int i = 0; i < filePattern.length(); i++) {
+			char c = filePattern.charAt(i);
+			switch (c) {
+				case '\\' :
+					// we either used the escape found or found a new escape.
+					foundEscape = foundEscape ? false : true;
+					if (buffer != null)
+						buffer.append(c);
+					break;
+				case '(' :
+				case ')' :
+					if (!foundEscape) {
+						if (buffer == null) {
+							buffer = new StringBuffer(filePattern.length() + 16);
+							buffer.append(filePattern.substring(0, i));
+						}
+						// must escape with '\'
+						buffer.append('\\');
+					} else {
+						foundEscape = false; // used the escape found
+					}
+					if (buffer != null)
+						buffer.append(c);
+					break;
+				default :
+					// if we found an escape it has been used
+					foundEscape = false;
+					if (buffer != null)
+						buffer.append(c);
+					break;
+			}
+		}
+		if (foundEscape)
+			throw new InvalidSyntaxException("Trailing escape characters must be escaped.", filePattern); //$NON-NLS-1$
+		return buffer == null ? filePattern : buffer.toString();
+	}
+
+	private List<String> listEntryPaths(BundleFile bundleFile, String path, Filter patternFilter, Hashtable<String, String> patternProps, int options, List<String> pathList) {
+		if (pathList == null)
+			pathList = new ArrayList<String>();
+		Enumeration<String> entryPaths = bundleFile.getEntryPaths(path);
+		if (entryPaths == null)
+			return pathList;
+		while (entryPaths.hasMoreElements()) {
+			String entry = entryPaths.nextElement();
+			int lastSlash = entry.lastIndexOf('/');
+			if (patternProps != null) {
+				int secondToLastSlash = entry.lastIndexOf('/', lastSlash - 1);
+				int fileStart;
+				int fileEnd = entry.length();
+				if (lastSlash < 0)
+					fileStart = 0;
+				else if (lastSlash != entry.length() - 1)
+					fileStart = lastSlash + 1;
+				else {
+					fileEnd = lastSlash; // leave the lastSlash out
+					if (secondToLastSlash < 0)
+						fileStart = 0;
+					else
+						fileStart = secondToLastSlash + 1;
+				}
+				String fileName = entry.substring(fileStart, fileEnd);
+				// set the filename to the current entry
+				patternProps.put("filename", fileName); //$NON-NLS-1$
+			}
+			// prevent duplicates and match on the patternFilter
+			if (!pathList.contains(entry) && (patternFilter == null || patternFilter.matchCase(patternProps)))
+				pathList.add(entry);
+			// recurse only into entries that are directories
+			if (((options & BundleWiring.FINDENTRIES_RECURSE) != 0) && !entry.equals(path) && entry.length() > 0 && lastSlash == (entry.length() - 1))
+				listEntryPaths(bundleFile, entry, patternFilter, patternProps, options, pathList);
+		}
+		return pathList;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseData.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseData.java
index 808474e..d7a910b 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseData.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseData.java
@@ -23,12 +23,14 @@ import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile;
 import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingHook;
 import org.eclipse.osgi.baseadaptor.hooks.StorageHook;
 import org.eclipse.osgi.baseadaptor.loader.BaseClassLoader;
+import org.eclipse.osgi.baseadaptor.loader.ClasspathManager;
 import org.eclipse.osgi.framework.adaptor.*;
 import org.eclipse.osgi.framework.debug.Debug;
 import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.framework.internal.protocol.bundleentry.Handler;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
+import org.eclipse.osgi.internal.baseadaptor.ArrayMap;
 import org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader;
 import org.eclipse.osgi.util.ManifestElement;
 import org.osgi.framework.*;
@@ -52,12 +54,13 @@ public class BaseData implements BundleData {
 	private String location;
 	private long lastModified;
 	protected BundleFile bundleFile;
+	private ArrayMap<Object, BundleFile> bundleFiles;
 	private boolean dirty = false;
-	protected Dictionary manifest;
+	protected Dictionary<String, String> manifest;
 	// This field is only used by PDE source lookup, and is set by a hook (bug 126517).  It serves no purpose at runtime.
 	protected String fileName;
 	// This is only used to keep track of when the same native library is loaded more than once
-	protected Collection loadedNativeCode;
+	protected Collection<String> loadedNativeCode;
 
 	///////////////////// Begin values from Manifest     /////////////////////
 	private String symbolicName;
@@ -100,8 +103,8 @@ public class BaseData implements BundleData {
 	public final URL getEntry(final String path) {
 		if (System.getSecurityManager() == null)
 			return getEntry0(path);
-		return (URL) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<URL>() {
+			public URL run() {
 				return getEntry0(path);
 			}
 		});
@@ -120,7 +123,7 @@ public class BaseData implements BundleData {
 		}
 	}
 
-	public final Enumeration getEntryPaths(String path) {
+	public final Enumeration<String> getEntryPaths(String path) {
 		return getBundleFile().getEntryPaths(path);
 	}
 
@@ -141,7 +144,7 @@ public class BaseData implements BundleData {
 		if (result != null)
 			synchronized (this) {
 				if (loadedNativeCode == null)
-					loadedNativeCode = new ArrayList(1);
+					loadedNativeCode = new ArrayList<String>(1);
 				if (loadedNativeCode.contains(result) || COPY_NATIVES) {
 					// we must copy the library to a temp space to allow another class loader to load the library
 					String temp = copyToTempLibrary(result);
@@ -171,7 +174,7 @@ public class BaseData implements BundleData {
 		return adaptor.getStorage().getDataFile(this, path);
 	}
 
-	public Dictionary getManifest() throws BundleException {
+	public Dictionary<String, String> getManifest() throws BundleException {
 		if (manifest == null)
 			manifest = adaptor.getStorage().loadManifest(this);
 		return manifest;
@@ -205,9 +208,14 @@ public class BaseData implements BundleData {
 		this.lastModified = lastModified;
 	}
 
-	public void close() throws IOException {
+	public synchronized void close() throws IOException {
 		if (bundleFile != null)
 			getBundleFile().close(); // only close the bundleFile if it already exists.
+		if (bundleFiles != null) {
+			for (BundleFile bundlefile : bundleFiles.getValues())
+				bundlefile.close();
+			bundleFiles.clear();
+		}
 	}
 
 	public void open() throws IOException {
@@ -267,6 +275,9 @@ public class BaseData implements BundleData {
 		return value;
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public void save() throws IOException {
 		adaptor.getStorage().save(this);
 	}
@@ -398,17 +409,27 @@ public class BaseData implements BundleData {
 		return bundleFile;
 	}
 
+	public synchronized BundleFile getBundleFile(Object content, boolean base) {
+		return base ? bundleFile : (bundleFiles == null) ? null : bundleFiles.get(content);
+	}
+
+	public synchronized void setBundleFile(Object content, BundleFile bundleFile) {
+		if (bundleFiles == null)
+			bundleFiles = new ArrayMap<Object, BundleFile>(1);
+		bundleFiles.put(content, bundleFile);
+	}
+
 	private static String[] getClassPath(ManifestElement[] classpath) {
 		if (classpath == null) {
-			if (Debug.DEBUG && Debug.DEBUG_LOADER)
+			if (Debug.DEBUG_LOADER)
 				Debug.println("  no classpath"); //$NON-NLS-1$
 			/* create default BundleClassPath */
 			return new String[] {"."}; //$NON-NLS-1$
 		}
 
-		ArrayList result = new ArrayList(classpath.length);
+		List<String> result = new ArrayList<String>(classpath.length);
 		for (int i = 0; i < classpath.length; i++) {
-			if (Debug.DEBUG && Debug.DEBUG_LOADER)
+			if (Debug.DEBUG_LOADER)
 				Debug.println("  found classpath entry " + classpath[i].getValueComponents()); //$NON-NLS-1$
 			String[] paths = classpath[i].getValueComponents();
 			for (int j = 0; j < paths.length; j++) {
@@ -416,7 +437,7 @@ public class BaseData implements BundleData {
 			}
 		}
 
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	/**
@@ -489,4 +510,21 @@ public class BaseData implements BundleData {
 			return name;
 		return name + "_" + ver; //$NON-NLS-1$
 	}
+
+	public Enumeration<URL> findLocalResources(String path) {
+		String[] cp;
+		try {
+			cp = getClassPath();
+		} catch (BundleException e) {
+			cp = new String[0];
+		}
+		if (cp == null)
+			cp = new String[0];
+		// this is not optimized; degenerate case of someone calling getResource on an unresolved bundle!
+		ClasspathManager cm = new ClasspathManager(this, cp, null);
+		cm.initialize();
+		Enumeration<URL> result = cm.findLocalResources(path);
+		// no need to close ClassPathManager because the BundleFile objects are stored in the BaseData and closed on shutdown or uninstall
+		return result;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/HookRegistry.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/HookRegistry.java
index de883f8..e0c91e0 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/HookRegistry.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/HookRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -93,20 +93,20 @@ public final class HookRegistry {
 	 * @return an array of error log entries that occurred while initializing the hooks
 	 */
 	public FrameworkLogEntry[] initialize() {
-		ArrayList configurators = new ArrayList(5);
-		ArrayList errors = new ArrayList(0); // optimistic that no errors will occur
+		List<String> configurators = new ArrayList<String>(5);
+		List<FrameworkLogEntry> errors = new ArrayList<FrameworkLogEntry>(0); // optimistic that no errors will occur
 		mergeFileHookConfigurators(configurators, errors);
 		mergePropertyHookConfigurators(configurators);
 		loadConfigurators(configurators, errors);
 		// set to read-only
 		readonly = true;
-		return (FrameworkLogEntry[]) errors.toArray(new FrameworkLogEntry[errors.size()]);
+		return errors.toArray(new FrameworkLogEntry[errors.size()]);
 	}
 
-	private void mergeFileHookConfigurators(ArrayList configuratorList, ArrayList errors) {
+	private void mergeFileHookConfigurators(List<String> configuratorList, List<FrameworkLogEntry> errors) {
 		ClassLoader cl = getClass().getClassLoader();
 		// get all hook configurators files in your classloader delegation
-		Enumeration hookConfigurators;
+		Enumeration<URL> hookConfigurators;
 		try {
 			hookConfigurators = cl != null ? cl.getResources(HookRegistry.HOOK_CONFIGURATORS_FILE) : ClassLoader.getSystemResources(HookRegistry.HOOK_CONFIGURATORS_FILE);
 		} catch (IOException e) {
@@ -115,7 +115,7 @@ public final class HookRegistry {
 		}
 		int curBuiltin = 0;
 		while (hookConfigurators.hasMoreElements()) {
-			URL url = (URL) hookConfigurators.nextElement();
+			URL url = hookConfigurators.nextElement();
 			InputStream input = null;
 			try {
 				// check each file for a hook.configurators property
@@ -148,7 +148,7 @@ public final class HookRegistry {
 		}
 	}
 
-	private void mergePropertyHookConfigurators(ArrayList configuratorList) {
+	private void mergePropertyHookConfigurators(List<String> configuratorList) {
 		// see if there is a configurators list
 		String[] configurators = ManifestElement.getArrayFromList(FrameworkProperties.getProperty(HookRegistry.PROP_HOOK_CONFIGURATORS), ","); //$NON-NLS-1$
 		if (configurators.length > 0) {
@@ -169,11 +169,11 @@ public final class HookRegistry {
 			configuratorList.remove(excludeHooks[i]);
 	}
 
-	private void loadConfigurators(ArrayList configurators, ArrayList errors) {
-		for (Iterator iHooks = configurators.iterator(); iHooks.hasNext();) {
-			String hookName = (String) iHooks.next();
+	private void loadConfigurators(List<String> configurators, List<FrameworkLogEntry> errors) {
+		for (Iterator<String> iHooks = configurators.iterator(); iHooks.hasNext();) {
+			String hookName = iHooks.next();
 			try {
-				Class clazz = Class.forName(hookName);
+				Class<?> clazz = Class.forName(hookName);
 				HookConfigurator configurator = (HookConfigurator) clazz.newInstance();
 				configurator.addHooks(this);
 			} catch (Throwable t) {
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleEntry.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleEntry.java
index ba096bc..860bb9a 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleEntry.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,7 +92,7 @@ public abstract class BundleEntry {
 		byte[] classbytes;
 		int bytesread = 0;
 		int readcount;
-		if (Debug.DEBUG && Debug.DEBUG_LOADER)
+		if (Debug.DEBUG_LOADER)
 			Debug.println("  about to read " + length + " bytes from " + getName()); //$NON-NLS-1$ //$NON-NLS-2$
 
 		try {
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFile.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFile.java
index 35d4cc5..011359d 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFile.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,8 +16,7 @@ import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.security.AccessController;
-import java.util.ArrayList;
-import java.util.Enumeration;
+import java.util.*;
 import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.internal.protocol.bundleresource.Handler;
@@ -34,7 +33,7 @@ import org.eclipse.osgi.util.ManifestElement;
  */
 abstract public class BundleFile {
 	protected static final String PROP_SETPERMS_CMD = "osgi.filepermissions.command"; //$NON-NLS-1$
-	static final SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	static final SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 	/**
 	 * The File object for this BundleFile.
 	 */
@@ -91,7 +90,7 @@ abstract public class BundleFile {
 	 * @return an Enumeration of Strings that indicate the paths found or
 	 * null if the path does not exist. 
 	 */
-	abstract public Enumeration getEntryPaths(String path);
+	abstract public Enumeration<String> getEntryPaths(String path);
 
 	/**
 	 * Closes the BundleFile.
@@ -189,7 +188,7 @@ abstract public class BundleFile {
 		if (commandProp == null)
 			return;
 		String[] temp = ManifestElement.getArrayFromList(commandProp, " "); //$NON-NLS-1$
-		ArrayList command = new ArrayList(temp.length + 1);
+		List<String> command = new ArrayList<String>(temp.length + 1);
 		boolean foundFullPath = false;
 		for (int i = 0; i < temp.length; i++) {
 			if ("[fullpath]".equals(temp[i]) || "${abspath}".equals(temp[i])) { //$NON-NLS-1$ //$NON-NLS-2$
@@ -201,7 +200,7 @@ abstract public class BundleFile {
 		if (!foundFullPath)
 			command.add(file.getAbsolutePath());
 		try {
-			Runtime.getRuntime().exec((String[]) command.toArray(new String[command.size()])).waitFor();
+			Runtime.getRuntime().exec(command.toArray(new String[command.size()])).waitFor();
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFileWrapperChain.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFileWrapperChain.java
index 29f2fd2..24e4730 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFileWrapperChain.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/BundleFileWrapperChain.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,13 +11,12 @@
 
 package org.eclipse.osgi.baseadaptor.bundlefile;
 
-import org.eclipse.osgi.baseadaptor.hooks.BundleFileWrapperFactoryHook;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 import java.util.Enumeration;
 import org.eclipse.osgi.baseadaptor.BaseData;
+import org.eclipse.osgi.baseadaptor.hooks.BundleFileWrapperFactoryHook;
 
 /**
  * Used to chain the BundleFile objects returned from {@link BundleFileWrapperFactoryHook}.  
@@ -44,7 +43,7 @@ public class BundleFileWrapperChain extends BundleFile {
 		return wrapped.getEntry(path);
 	}
 
-	public Enumeration getEntryPaths(String path) {
+	public Enumeration<String> getEntryPaths(String path) {
 		return wrapped.getEntryPaths(path);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirBundleFile.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirBundleFile.java
index 3f8ee1d..64c3f71 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirBundleFile.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirBundleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,46 +37,53 @@ public class DirBundleFile extends BundleFile {
 	}
 
 	public File getFile(String path, boolean nativeCode) {
-		File filePath = new File(this.basefile, path);
-		if (BundleFile.secureAction.exists(filePath)) {
-			return filePath;
+		boolean checkInBundle = path != null && path.indexOf("..") >= 0; //$NON-NLS-1$
+		File file = new File(basefile, path);
+		if (!BundleFile.secureAction.exists(file)) {
+			return null;
+		}
+		// must do an extra check to make sure file is within the bundle (bug 320546)
+		if (checkInBundle) {
+			try {
+				if (!BundleFile.secureAction.getCanonicalPath(file).startsWith(BundleFile.secureAction.getCanonicalPath(basefile)))
+					return null;
+			} catch (IOException e) {
+				return null;
+			}
 		}
-		return null;
+		return file;
 	}
 
 	public BundleEntry getEntry(String path) {
-		File filePath = new File(this.basefile, path);
-		if (!BundleFile.secureAction.exists(filePath)) {
+		File filePath = getFile(path, false);
+		if (filePath == null)
 			return null;
-		}
 		return new FileBundleEntry(filePath, path);
 	}
 
 	public boolean containsDir(String dir) {
-		File dirPath = new File(this.basefile, dir);
-		return BundleFile.secureAction.exists(dirPath) && BundleFile.secureAction.isDirectory(dirPath);
+		File dirPath = getFile(dir, false);
+		return dirPath != null && BundleFile.secureAction.isDirectory(dirPath);
 	}
 
-	public Enumeration getEntryPaths(String path) {
+	public Enumeration<String> getEntryPaths(String path) {
 		if (path.length() > 0 && path.charAt(0) == '/')
 			path = path.substring(1);
-		final java.io.File pathFile = new java.io.File(basefile, path);
-		if (!BundleFile.secureAction.exists(pathFile))
-			return null;
-		if (!BundleFile.secureAction.isDirectory(pathFile))
+		final File pathFile = getFile(path, false);
+		if (pathFile == null || !BundleFile.secureAction.isDirectory(pathFile))
 			return null;
 		final String[] fileList = BundleFile.secureAction.list(pathFile);
 		if (fileList == null || fileList.length == 0)
 			return null;
 		final String dirPath = path.length() == 0 || path.charAt(path.length() - 1) == '/' ? path : path + '/';
-		return new Enumeration() {
+		return new Enumeration<String>() {
 			int cur = 0;
 
 			public boolean hasMoreElements() {
 				return fileList != null && cur < fileList.length;
 			}
 
-			public Object nextElement() {
+			public String nextElement() {
 				if (!hasMoreElements()) {
 					throw new NoSuchElementException();
 				}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirZipBundleEntry.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirZipBundleEntry.java
index 352a67e..de3209a 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirZipBundleEntry.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/DirZipBundleEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,9 @@ public class DirZipBundleEntry extends BundleEntry {
 		this.bundleFile = bundleFile;
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public InputStream getInputStream() throws IOException {
 		return null;
 	}
@@ -54,6 +57,7 @@ public class DirZipBundleEntry extends BundleEntry {
 		return 0;
 	}
 
+	@SuppressWarnings("deprecation")
 	public URL getLocalURL() {
 		try {
 			return new URL("jar:" + bundleFile.basefile.toURL() + "!/" + name); //$NON-NLS-1$ //$NON-NLS-2$
@@ -63,6 +67,7 @@ public class DirZipBundleEntry extends BundleEntry {
 		}
 	}
 
+	@SuppressWarnings("deprecation")
 	public URL getFileURL() {
 		try {
 			return bundleFile.extractDirectory(name).toURL();
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/FileBundleEntry.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/FileBundleEntry.java
index 5c143ad..21a7b6c 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/FileBundleEntry.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/FileBundleEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -89,6 +89,7 @@ public class FileBundleEntry extends BundleEntry {
 		return getFileURL();
 	}
 
+	@SuppressWarnings("deprecation")
 	public URL getFileURL() {
 		try {
 			return file.toURL();
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/MRUBundleFileList.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/MRUBundleFileList.java
index 1ac4e58..40f75af 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/MRUBundleFileList.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/MRUBundleFileList.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,11 +22,11 @@ import org.eclipse.osgi.framework.eventmgr.*;
  * file limit.
  * @since 3.2
  */
-public class MRUBundleFileList implements EventDispatcher {
+public class MRUBundleFileList implements EventDispatcher<Object, Object, BundleFile> {
 	private static final String PROP_FILE_LIMIT = "osgi.bundlefile.limit"; //$NON-NLS-1$
 	private static final int MIN = 10;
 	private static final int PROP_FILE_LIMIT_VALUE;
-	private static final ThreadLocal closingBundleFile = new ThreadLocal();
+	private static final ThreadLocal<BundleFile> closingBundleFile = new ThreadLocal<BundleFile>();
 	static {
 		int propValue = 100; // enable to 100 open files by default
 		try {
@@ -45,7 +45,7 @@ public class MRUBundleFileList implements EventDispatcher {
 	// the limit of open files to allow before least used bundle file is closed
 	final private int fileLimit; // value < MIN will disable MRU
 	final private EventManager bundleFileCloserManager;
-	final private Map bundleFileCloser;
+	final private Map<Object, Object> bundleFileCloser;
 	// the current number of open bundle files
 	private int numOpen = 0;
 	// the current use stamp
@@ -64,7 +64,7 @@ public class MRUBundleFileList implements EventDispatcher {
 			this.bundleFileList = new BundleFile[fileLimit];
 			this.useStampList = new long[fileLimit];
 			this.bundleFileCloserManager = new EventManager("Bundle File Closer"); //$NON-NLS-1$
-			this.bundleFileCloser = new CopyOnWriteIdentityMap();
+			this.bundleFileCloser = new CopyOnWriteIdentityMap<Object, Object>();
 			this.bundleFileCloser.put(this, this);
 		} else {
 			this.bundleFileList = null;
@@ -172,7 +172,7 @@ public class MRUBundleFileList implements EventDispatcher {
 		useStampList[index] = ++curUseStamp;
 	}
 
-	public final void dispatchEvent(Object eventListener, Object listenerObject, int eventAction, Object eventObject) {
+	public final void dispatchEvent(Object eventListener, Object listenerObject, int eventAction, BundleFile eventObject) {
 		if (firstDispatch) {
 			// used to work around bug 275166; we don't want to leak the TCCL in this thread.
 			Thread.currentThread().setContextClassLoader(null);
@@ -180,7 +180,7 @@ public class MRUBundleFileList implements EventDispatcher {
 		}
 		try {
 			closingBundleFile.set(eventObject);
-			((BundleFile) eventObject).close();
+			eventObject.close();
 		} catch (IOException e) {
 			// TODO should log ??
 		} finally {
@@ -193,7 +193,7 @@ public class MRUBundleFileList implements EventDispatcher {
 			return;
 		try {
 			/* queue to hold set of listeners */
-			ListenerQueue queue = new ListenerQueue(bundleFileCloserManager);
+			ListenerQueue<Object, Object, BundleFile> queue = new ListenerQueue<Object, Object, BundleFile>(bundleFileCloserManager);
 			/* add bundle file closer to the queue */
 			queue.queueListeners(bundleFileCloser.entrySet(), this);
 			/* dispatch event to set of listeners */
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/NestedDirBundleFile.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/NestedDirBundleFile.java
index b25f4cb..88514c2 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/NestedDirBundleFile.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/NestedDirBundleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,8 +28,8 @@ import java.util.Enumeration;
  * @since 3.2
  */
 public class NestedDirBundleFile extends BundleFile {
-	BundleFile baseBundleFile;
-	String cp;
+	private final BundleFile baseBundleFile;
+	private final String cp;
 
 	/**
 	 * Constructs a NestedDirBundleFile
@@ -39,10 +39,10 @@ public class NestedDirBundleFile extends BundleFile {
 	public NestedDirBundleFile(BundleFile baseBundlefile, String cp) {
 		super(baseBundlefile.getBaseFile());
 		this.baseBundleFile = baseBundlefile;
-		this.cp = cp;
 		if (cp.charAt(cp.length() - 1) != '/') {
-			this.cp = this.cp + '/';
+			cp = cp + '/';
 		}
+		this.cp = cp;
 	}
 
 	public void close() {
@@ -50,32 +50,49 @@ public class NestedDirBundleFile extends BundleFile {
 	}
 
 	public BundleEntry getEntry(String path) {
-		if (path.length() > 0 && path.charAt(0) == '/')
-			path = path.substring(1);
-		String newpath = new StringBuffer(cp).append(path).toString();
-		return baseBundleFile.getEntry(newpath);
+		return baseBundleFile.getEntry(prependNestedDir(path));
 	}
 
 	public boolean containsDir(String dir) {
 		if (dir == null)
 			return false;
 
-		if (dir.length() > 0 && dir.charAt(0) == '/')
-			dir = dir.substring(1);
-		String newdir = new StringBuffer(cp).append(dir).toString();
-		return baseBundleFile.containsDir(newdir);
+		return baseBundleFile.containsDir(prependNestedDir(dir));
 	}
 
-	public Enumeration getEntryPaths(String path) {
-		// getEntryPaths is only valid if this is a root bundle file.
-		return null;
+	private String prependNestedDir(String path) {
+		if (path.length() > 0 && path.charAt(0) == '/')
+			path = path.substring(1);
+		return new StringBuffer(cp).append(path).toString();
+	}
+
+	public Enumeration<String> getEntryPaths(String path) {
+		final Enumeration<String> basePaths = baseBundleFile.getEntryPaths(prependNestedDir(path));
+		final int cpLength = cp.length();
+		if (basePaths == null)
+			return null;
+		return new Enumeration<String>() {
+
+			public boolean hasMoreElements() {
+				return basePaths.hasMoreElements();
+			}
+
+			public String nextElement() {
+				String next = basePaths.nextElement();
+				return next.substring(cpLength);
+			}
+		};
 	}
 
 	public File getFile(String entry, boolean nativeCode) {
 		// getFile is only valid if this is a root bundle file.
+		// TODO to catch bugs we probably should throw new UnsupportedOperationException()
 		return null;
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public void open() throws IOException {
 		// do nothing
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleEntry.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleEntry.java
index 37495b4..06a46aa 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleEntry.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,6 +94,7 @@ public class ZipBundleEntry extends BundleEntry {
 		return zipEntry.getTime();
 	}
 
+	@SuppressWarnings("deprecation")
 	public URL getLocalURL() {
 		try {
 			return new URL("jar:" + bundleFile.basefile.toURL() + "!/" + zipEntry.getName()); //$NON-NLS-1$//$NON-NLS-2$
@@ -103,6 +104,7 @@ public class ZipBundleEntry extends BundleEntry {
 		}
 	}
 
+	@SuppressWarnings("deprecation")
 	public URL getFileURL() {
 		try {
 			File file = bundleFile.getFile(zipEntry.getName(), false);
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleFile.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleFile.java
index ac9f32c..9ce5c78 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleFile.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/bundlefile/ZipBundleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,8 +13,7 @@
 package org.eclipse.osgi.baseadaptor.bundlefile;
 
 import java.io.*;
-import java.util.Enumeration;
-import java.util.Vector;
+import java.util.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import org.eclipse.osgi.baseadaptor.BaseData;
@@ -135,9 +134,9 @@ public class ZipBundleFile extends BundleFile {
 	protected synchronized File extractDirectory(String dirName) {
 		if (!checkedOpen())
 			return null;
-		Enumeration entries = zipFile.entries();
+		Enumeration<? extends ZipEntry> entries = zipFile.entries();
 		while (entries.hasMoreElements()) {
-			String entryPath = ((ZipEntry) entries.nextElement()).getName();
+			String entryPath = entries.nextElement().getName();
 			if (entryPath.startsWith(dirName) && !entryPath.endsWith("/")) //$NON-NLS-1$
 				getFile(entryPath, false);
 		}
@@ -168,7 +167,7 @@ public class ZipBundleFile extends BundleFile {
 			if (nested != null) {
 				if (nested.exists()) {
 					/* the entry is already cached */
-					if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+					if (Debug.DEBUG_GENERAL)
 						Debug.println("File already present: " + nested.getPath()); //$NON-NLS-1$
 					if (nested.isDirectory())
 						// must ensure the complete directory is extracted (bug 182585)
@@ -176,7 +175,7 @@ public class ZipBundleFile extends BundleFile {
 				} else {
 					if (zipEntry.getName().endsWith("/")) { //$NON-NLS-1$
 						if (!nested.mkdirs()) {
-							if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+							if (Debug.DEBUG_GENERAL)
 								Debug.println("Unable to create directory: " + nested.getPath()); //$NON-NLS-1$
 							throw new IOException(NLS.bind(AdaptorMsg.ADAPTOR_DIRECTORY_CREATE_EXCEPTION, nested.getAbsolutePath()));
 						}
@@ -186,12 +185,12 @@ public class ZipBundleFile extends BundleFile {
 						if (in == null)
 							return null;
 						/* the entry has not been cached */
-						if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+						if (Debug.DEBUG_GENERAL)
 							Debug.println("Creating file: " + nested.getPath()); //$NON-NLS-1$
 						/* create the necessary directories */
 						File dir = new File(nested.getParent());
 						if (!dir.exists() && !dir.mkdirs()) {
-							if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+							if (Debug.DEBUG_GENERAL)
 								Debug.println("Unable to create directory: " + dir.getPath()); //$NON-NLS-1$
 							throw new IOException(NLS.bind(AdaptorMsg.ADAPTOR_DIRECTORY_CREATE_EXCEPTION, dir.getAbsolutePath()));
 						}
@@ -205,7 +204,7 @@ public class ZipBundleFile extends BundleFile {
 				return nested;
 			}
 		} catch (IOException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+			if (Debug.DEBUG_GENERAL)
 				Debug.printStackTrace(e);
 		}
 		return null;
@@ -229,11 +228,11 @@ public class ZipBundleFile extends BundleFile {
 		if (dir.length() > 0 && dir.charAt(dir.length() - 1) != '/')
 			dir = dir + '/';
 
-		Enumeration entries = zipFile.entries();
+		Enumeration<? extends ZipEntry> entries = zipFile.entries();
 		ZipEntry zipEntry;
 		String entryPath;
 		while (entries.hasMoreElements()) {
-			zipEntry = (ZipEntry) entries.nextElement();
+			zipEntry = entries.nextElement();
 			entryPath = zipEntry.getName();
 			if (entryPath.startsWith(dir)) {
 				return true;
@@ -259,7 +258,7 @@ public class ZipBundleFile extends BundleFile {
 
 	}
 
-	public synchronized Enumeration getEntryPaths(String path) {
+	public synchronized Enumeration<String> getEntryPaths(String path) {
 		if (!checkedOpen())
 			return null;
 		if (path == null)
@@ -270,10 +269,10 @@ public class ZipBundleFile extends BundleFile {
 		if (path.length() > 0 && path.charAt(path.length() - 1) != '/')
 			path = new StringBuffer(path).append("/").toString(); //$NON-NLS-1$
 
-		Vector vEntries = new Vector();
-		Enumeration entries = zipFile.entries();
+		List<String> vEntries = new ArrayList<String>();
+		Enumeration<? extends ZipEntry> entries = zipFile.entries();
 		while (entries.hasMoreElements()) {
-			ZipEntry zipEntry = (ZipEntry) entries.nextElement();
+			ZipEntry zipEntry = entries.nextElement();
 			String entryPath = zipEntry.getName();
 			if (entryPath.startsWith(path)) {
 				if (path.length() < entryPath.length()) {
@@ -289,7 +288,7 @@ public class ZipBundleFile extends BundleFile {
 				}
 			}
 		}
-		return vEntries.size() == 0 ? null : vEntries.elements();
+		return vEntries.size() == 0 ? null : Collections.enumeration(vEntries);
 	}
 
 	public synchronized void close() throws IOException {
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingHook.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingHook.java
index 896b6d6..59e36ea 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ public interface ClassLoadingHook {
 	 * @param sourcedomain the source domain of the requested ClasspathEntry
 	 * @return true if a ClasspathEntry has been added to cpEntries
 	 */
-	boolean addClassPathEntry(ArrayList cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain);
+	boolean addClassPathEntry(ArrayList<ClasspathEntry> cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain);
 
 	/**
 	 * Gets called by a base data during {@link BundleData#findLibrary(String)}.
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingStatsHook.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingStatsHook.java
index 41a320c..26a84a1 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingStatsHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/ClassLoadingStatsHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,7 +44,7 @@ public interface ClassLoadingStatsHook {
 	 * @param clazz the loaded class or null if not found
 	 * @param manager the classpath manager used to find and load the requested class
 	 */
-	void postFindLocalClass(String name, Class clazz, ClasspathManager manager) throws ClassNotFoundException;
+	void postFindLocalClass(String name, Class<?> clazz, ClasspathManager manager) throws ClassNotFoundException;
 
 	/**
 	 * Gets called by a classpath manager during {@link ClasspathManager#findLocalResource(String)} before
@@ -75,6 +75,6 @@ public interface ClassLoadingStatsHook {
 	 * @param entry the BundleEntyr source of the class bytes
 	 * @param manager the classpath manager used to define the class
 	 */
-	void recordClassDefine(String name, Class clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager);
+	void recordClassDefine(String name, Class<?> clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager);
 
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/StorageHook.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/StorageHook.java
index 28a7b8c..160f2c1 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/StorageHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/StorageHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public interface StorageHook extends KeyedElement {
 	 * @param manifest the bundle manifest to load into this storage hook
 	 * @throws BundleException if any error occurs
 	 */
-	void initialize(Dictionary manifest) throws BundleException;
+	void initialize(Dictionary<String, String> manifest) throws BundleException;
 
 	/**
 	 * Creates a new storage hook and loads the data from the specified 
@@ -112,7 +112,7 @@ public interface StorageHook extends KeyedElement {
 	 * not provide the manifest
 	 * @throws BundleException 
 	 */
-	Dictionary getManifest(boolean firstLoad) throws BundleException;
+	Dictionary<String, String> getManifest(boolean firstLoad) throws BundleException;
 
 	/**
 	 * Gets called by a base data during {@link BundleData#setStatus(int)}.
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/BaseClassLoader.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/BaseClassLoader.java
index c10632a..5f72707 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/BaseClassLoader.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/BaseClassLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,14 +46,14 @@ public interface BaseClassLoader extends BundleClassLoader {
 	 * @param entry the bundle entry used to load the class bytes
 	 * @return a defined Class
 	 */
-	Class defineClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry);
+	Class<?> defineClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry);
 
 	/**
 	 * A public version of the ClassLoader.findLoadedClass(java.lang.String) method.
 	 * @param classname the class name to find.
 	 * @return a loaded class
 	 */
-	Class publicFindLoaded(String classname);
+	Class<?> publicFindLoaded(String classname);
 
 	/**
 	 * A public version of the ClassLoader#getPackage(java.lang.String) method.
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java
index 08b0aac..da6943d 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,16 +16,17 @@ import java.io.IOException;
 import java.net.URL;
 import java.security.ProtectionDomain;
 import java.util.*;
+import org.eclipse.osgi.baseadaptor.BaseAdaptor;
 import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry;
 import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile;
 import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingHook;
 import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingStatsHook;
-import org.eclipse.osgi.framework.adaptor.BundleData;
-import org.eclipse.osgi.framework.adaptor.BundleProtectionDomain;
+import org.eclipse.osgi.framework.adaptor.*;
 import org.eclipse.osgi.framework.debug.Debug;
 import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.internal.baseadaptor.AdaptorMsg;
+import org.eclipse.osgi.internal.baseadaptor.ArrayMap;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.FrameworkEvent;
@@ -47,17 +48,20 @@ public class ClasspathManager {
 	private final static String VALUE_CLASSNAME_LOCK = "classname"; //$NON-NLS-1$
 	private final static boolean LOCK_CLASSNAME = VALUE_CLASSNAME_LOCK.equals(FrameworkProperties.getProperty(PROP_CLASSLOADER_LOCK));
 
-	private BaseData data;
-	private String[] classpath;
+	private final BaseData data;
+	private final String[] classpath;
+	private final BaseClassLoader classloader;
+	private final boolean isParallelClassLoader;
+	private final Map<String, Thread> classNameLocks = new HashMap<String, Thread>(5);
+
 	// Note that PDE has internal dependency on this field type/name (bug 267238)
 	private ClasspathEntry[] entries;
-	private BaseClassLoader classloader;
 	// Note that PDE has internal dependency on this field type/name (bug 267238)
 	private FragmentClasspath[] fragments = emptyFragments;
-	// a collection of String[2], each element is {"libname", "libpath"}
-	private Collection loadedLibraries = null;
-	private HashMap classNameLocks = new HashMap(5);
-	private final boolean isParallelClassLoader;
+	// a Map<String,String> where "libname" is the key and libpath" is the value
+	private ArrayMap<String, String> loadedLibraries = null;
+	// used to detect recusive defineClass calls for the same class on the same class loader (bug 345500)
+	private ThreadLocal<Collection<String>> currentlyDefining = new ThreadLocal<Collection<String>>();
 
 	/**
 	 * Constructs a classpath manager for the given host base data, classpath and base class loader
@@ -81,10 +85,11 @@ public class ClasspathManager {
 	 * </p>
 	 */
 	public void initialize() {
-		entries = buildClasspath(classpath, this, data, classloader.getDomain());
+		entries = buildClasspath(classpath, this, data, classloader == null ? null : classloader.getDomain());
 		ClassLoadingHook[] hooks = data.getAdaptor().getHookRegistry().getClassLoadingHooks();
-		for (int i = 0; i < hooks.length; i++)
-			hooks[i].initializedClassLoader(classloader, data);
+		if (classloader != null)
+			for (int i = 0; i < hooks.length; i++)
+				hooks[i].initializedClassLoader(classloader, data);
 	}
 
 	/**
@@ -144,11 +149,11 @@ public class ClasspathManager {
 	}
 
 	private static ClasspathEntry[] buildClasspath(String[] cp, ClasspathManager hostloader, BaseData sourcedata, ProtectionDomain sourcedomain) {
-		ArrayList result = new ArrayList(cp.length);
+		ArrayList<ClasspathEntry> result = new ArrayList<ClasspathEntry>(cp.length);
 		// add the regular classpath entries.
 		for (int i = 0; i < cp.length; i++)
 			findClassPathEntry(result, cp[i], hostloader, sourcedata, sourcedomain);
-		return (ClasspathEntry[]) result.toArray(new ClasspathEntry[result.size()]);
+		return result.toArray(new ClasspathEntry[result.size()]);
 	}
 
 	/**
@@ -163,7 +168,7 @@ public class ClasspathManager {
 	 * @param sourcedata the source EquionoxData to search for the classpath
 	 * @param sourcedomain the source domain to used by the new ClasspathEntry
 	 */
-	public static void findClassPathEntry(ArrayList result, String cp, ClasspathManager hostloader, BaseData sourcedata, ProtectionDomain sourcedomain) {
+	public static void findClassPathEntry(ArrayList<ClasspathEntry> result, String cp, ClasspathManager hostloader, BaseData sourcedata, ProtectionDomain sourcedomain) {
 		// look in classpath manager hooks first
 		ClassLoadingHook[] loaderHooks = sourcedata.getAdaptor().getHookRegistry().getClassLoadingHooks();
 		boolean hookAdded = false;
@@ -186,7 +191,7 @@ public class ClasspathManager {
 	 * @param sourcedomain the source domain to used by the new ClasspathEntry
 	 * @return true if a ClasspathEntry was added to the result
 	 */
-	public static boolean addClassPathEntry(ArrayList result, String cp, ClasspathManager hostloader, BaseData sourcedata, ProtectionDomain sourcedomain) {
+	public static boolean addClassPathEntry(ArrayList<ClasspathEntry> result, String cp, ClasspathManager hostloader, BaseData sourcedata, ProtectionDomain sourcedomain) {
 		if (cp.equals(".")) { //$NON-NLS-1$
 			result.add(hostloader.createClassPathEntry(sourcedata.getBundleFile(), sourcedomain, sourcedata));
 			return true;
@@ -260,12 +265,16 @@ public class ClasspathManager {
 		return null;
 	}
 
-	private ClasspathEntry createClassPathEntry(BundleFile bundlefile, ProtectionDomain cpDomain, BaseData data) {
-		ClasspathEntry entry = classloader.createClassPathEntry(bundlefile, cpDomain);
-		entry.setBaseData(data);
+	private ClasspathEntry createClassPathEntry(BundleFile bundlefile, ProtectionDomain cpDomain, BaseData cpData) {
+		ClasspathEntry entry;
+		if (classloader != null)
+			entry = classloader.createClassPathEntry(bundlefile, cpDomain);
+		else
+			entry = new ClasspathEntry(bundlefile, null);
+		entry.setBaseData(cpData);
 		Object domain = entry.getDomain();
 		if (domain instanceof BundleProtectionDomain)
-			((BundleProtectionDomain) domain).setBundle(data.getBundle());
+			((BundleProtectionDomain) domain).setBundle(cpData.getBundle());
 		return entry;
 	}
 
@@ -321,14 +330,14 @@ public class ClasspathManager {
 	 * @param resource the requested resource name.
 	 * @return an enumeration of the the requested resources or null if the resources do not exist
 	 */
-	public Enumeration findLocalResources(String resource) {
-		Vector resources = new Vector(6); // use a Vector instead of ArrayList because we need an enumeration
+	public Enumeration<URL> findLocalResources(String resource) {
+		List<URL> resources = new ArrayList<URL>(6);
 		int classPathIndex = 0;
 		for (int i = 0; i < entries.length; i++) {
 			if (entries[i] != null) {
 				URL url = findResourceImpl(resource, entries[i].getBundleFile(), classPathIndex);
 				if (url != null)
-					resources.addElement(url);
+					resources.add(url);
 			}
 			classPathIndex++;
 		}
@@ -338,12 +347,12 @@ public class ClasspathManager {
 			for (int j = 0; j < fragEntries.length; j++) {
 				URL url = findResourceImpl(resource, fragEntries[j].getBundleFile(), classPathIndex);
 				if (url != null)
-					resources.addElement(url);
+					resources.add(url);
 				classPathIndex++;
 			}
 		}
 		if (resources.size() > 0)
-			return resources.elements();
+			return Collections.enumeration(resources);
 		return null;
 	}
 
@@ -396,13 +405,13 @@ public class ClasspathManager {
 	 * @param path the requested entry path.
 	 * @return an enumeration of the the requested entries or null if the entries do not exist
 	 */
-	public Enumeration findLocalEntries(String path) {
-		Vector objects = new Vector(6); // use a Vector instead of ArrayList because we need an enumeration
+	public Enumeration<BundleEntry> findLocalEntries(String path) {
+		List<BundleEntry> objects = new ArrayList<BundleEntry>(6);
 		for (int i = 0; i < entries.length; i++) {
 			if (entries[i] != null) {
 				BundleEntry result = findEntryImpl(path, entries[i].getBundleFile());
 				if (result != null)
-					objects.addElement(result);
+					objects.add(result);
 			}
 		}
 		// look in fragments
@@ -411,11 +420,11 @@ public class ClasspathManager {
 			for (int j = 0; j < fragEntries.length; j++) {
 				BundleEntry result = findEntryImpl(path, fragEntries[j].getBundleFile());
 				if (result != null)
-					objects.addElement(result);
+					objects.add(result);
 			}
 		}
 		if (objects.size() > 0)
-			return objects.elements();
+			return Collections.enumeration(objects);
 		return null;
 	}
 
@@ -437,8 +446,8 @@ public class ClasspathManager {
 	 * @return the requested class
 	 * @throws ClassNotFoundException if the class does not exist
 	 */
-	public Class findLocalClass(String classname) throws ClassNotFoundException {
-		Class result = null;
+	public Class<?> findLocalClass(String classname) throws ClassNotFoundException {
+		Class<?> result = null;
 		ClassLoadingStatsHook[] hooks = data.getAdaptor().getHookRegistry().getClassLoadingStatsHooks();
 		try {
 			for (int i = 0; i < hooks.length; i++)
@@ -454,7 +463,7 @@ public class ClasspathManager {
 		}
 	}
 
-	private Class findLocalClass_LockClassName(String classname, ClassLoadingStatsHook[] hooks) throws ClassNotFoundException {
+	private Class<?> findLocalClass_LockClassName(String classname, ClassLoadingStatsHook[] hooks) throws ClassNotFoundException {
 		boolean initialLock = lockClassName(classname);
 		try {
 			return findLocalClassImpl(classname, hooks);
@@ -464,16 +473,16 @@ public class ClasspathManager {
 		}
 	}
 
-	private Class findLocalClass_LockClassLoader(String classname, ClassLoadingStatsHook[] hooks) throws ClassNotFoundException {
+	private Class<?> findLocalClass_LockClassLoader(String classname, ClassLoadingStatsHook[] hooks) throws ClassNotFoundException {
 		synchronized (classloader) {
 			return findLocalClassImpl(classname, hooks);
 		}
 	}
 
-	private Class findLocalClassImpl(String classname, ClassLoadingStatsHook[] hooks) throws ClassNotFoundException {
+	private Class<?> findLocalClassImpl(String classname, ClassLoadingStatsHook[] hooks) throws ClassNotFoundException {
 		// must call findLoadedClass here even if it was called earlier,
 		// the findLoadedClass and defineClass calls must be atomic
-		Class result = classloader.publicFindLoaded(classname);
+		Class<?> result = classloader.publicFindLoaded(classname);
 		if (result != null)
 			return result;
 		for (int i = 0; i < entries.length; i++) {
@@ -524,8 +533,8 @@ public class ClasspathManager {
 		}
 	}
 
-	private Class findClassImpl(String name, ClasspathEntry classpathEntry, ClassLoadingStatsHook[] hooks) {
-		if (Debug.DEBUG && Debug.DEBUG_LOADER)
+	private Class<?> findClassImpl(String name, ClasspathEntry classpathEntry, ClassLoadingStatsHook[] hooks) {
+		if (Debug.DEBUG_LOADER)
 			Debug.println("BundleClassLoader[" + classpathEntry.getBundleFile() + "].findClass(" + name + ")"); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
 		String filename = name.replace('.', '/').concat(".class"); //$NON-NLS-1$
 		BundleEntry entry = classpathEntry.getBundleFile().getEntry(filename);
@@ -536,22 +545,32 @@ public class ClasspathManager {
 		try {
 			classbytes = entry.getBytes();
 		} catch (IOException e) {
-			if (Debug.DEBUG && Debug.DEBUG_LOADER)
+			if (Debug.DEBUG_LOADER)
 				Debug.println("  IOException reading " + filename + " from " + classpathEntry.getBundleFile()); //$NON-NLS-1$ //$NON-NLS-2$
 			return null;
 		}
 
-		if (Debug.DEBUG && Debug.DEBUG_LOADER) {
+		if (Debug.DEBUG_LOADER) {
 			Debug.println("  read " + classbytes.length + " bytes from " + classpathEntry.getBundleFile() + "/" + filename); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			Debug.println("  defining class " + name); //$NON-NLS-1$
 		}
 
+		Collection<String> current = currentlyDefining.get();
+		if (current == null) {
+			current = new ArrayList<String>(5);
+			currentlyDefining.set(current);
+		}
+		if (current.contains(name))
+			return null; // avoid recursive defines (bug 345500)
 		try {
+			current.add(name);
 			return defineClass(name, classbytes, classpathEntry, entry, hooks);
 		} catch (Error e) {
-			if (Debug.DEBUG && Debug.DEBUG_LOADER)
+			if (Debug.DEBUG_LOADER)
 				Debug.println("  error defining class " + name); //$NON-NLS-1$
 			throw e;
+		} finally {
+			current.remove(name);
 		}
 	}
 
@@ -568,19 +587,22 @@ public class ClasspathManager {
 	 * @param statsHooks the class loading stat hooks
 	 * @return the defined class
 	 */
-	private Class defineClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClassLoadingStatsHook[] statsHooks) {
+	private Class<?> defineClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClassLoadingStatsHook[] statsHooks) {
 		ClassLoadingHook[] hooks = data.getAdaptor().getHookRegistry().getClassLoadingHooks();
 		byte[] modifiedBytes = classbytes;
-		for (int i = 0; i < hooks.length; i++) {
-			modifiedBytes = hooks[i].processClass(name, classbytes, classpathEntry, entry, this);
-			if (modifiedBytes != null)
-				classbytes = modifiedBytes;
-		}
-
-		Class result = classloader.defineClass(name, classbytes, classpathEntry, entry);
+		Class<?> result = null;
+		try {
+			for (int i = 0; i < hooks.length; i++) {
+				modifiedBytes = hooks[i].processClass(name, classbytes, classpathEntry, entry, this);
+				if (modifiedBytes != null)
+					classbytes = modifiedBytes;
+			}
 
-		for (int i = 0; i < statsHooks.length; i++)
-			statsHooks[i].recordClassDefine(name, result, classbytes, classpathEntry, entry, this);
+			result = classloader.defineClass(name, classbytes, classpathEntry, entry);
+		} finally {
+			for (int i = 0; i < statsHooks.length; i++)
+				statsHooks[i].recordClassDefine(name, result, classbytes, classpathEntry, entry, this);
+		}
 		return result;
 	}
 
@@ -616,26 +638,73 @@ public class ClasspathManager {
 		return classloader;
 	}
 
+	/**
+	 * Finds a library for the bundle represented by this class path managert
+	 * @param libname the library name
+	 * @return The absolution path to the library or null if not found
+	 */
 	public String findLibrary(String libname) {
 		synchronized (this) {
 			if (loadedLibraries == null)
-				loadedLibraries = new ArrayList(1);
+				loadedLibraries = new ArrayMap<String, String>(1);
 		}
 		synchronized (loadedLibraries) {
 			// we assume that each classloader will load a small number of of libraries
 			// instead of wasting space with a map we iterate over our collection of found libraries
 			// each element is a String[2], each array is {"libname", "libpath"}
-			for (Iterator libs = loadedLibraries.iterator(); libs.hasNext();) {
-				String[] libNameResult = (String[]) libs.next();
-				if (libNameResult[0].equals(libname))
-					return libNameResult[1];
-			}
+			String libpath = loadedLibraries.get(libname);
+			if (libpath != null)
+				return libpath;
+
+			libpath = classloader.getDelegate().findLibrary(libname);
+			if (libpath != null)
+				loadedLibraries.put(libname, libpath);
+			return libpath;
+		}
+	}
 
-			String result = classloader.getDelegate().findLibrary(libname);
-			if (result != null)
-				loadedLibraries.add(new String[] {libname, result});
+	/**
+	 * @see BundleClassLoader#findEntries(String, String, int)
+	 */
+	public List<URL> findEntries(String path, String filePattern, int options) {
+		BaseAdaptor adaptor = getBaseData().getAdaptor();
+		List<BundleData> datas = new ArrayList<BundleData>();
+		// first get the host bundle file
+		datas.add(getBaseData());
+		// next get the attached fragments bundle files
+		FragmentClasspath[] currentFragments = getFragmentClasspaths();
+		for (FragmentClasspath fragmentClasspath : currentFragments)
+			datas.add(fragmentClasspath.getBundleData());
+
+		@SuppressWarnings("unchecked")
+		List<URL> result = Collections.EMPTY_LIST;
+		// now search over all the bundle files
+		Enumeration<URL> eURLs = adaptor.findEntries(datas, path, filePattern, options);
+		if (eURLs == null)
 			return result;
-		}
+		result = new ArrayList<URL>();
+		while (eURLs.hasMoreElements())
+			result.add(eURLs.nextElement());
+		return Collections.unmodifiableList(result);
 	}
 
+	/**
+	 * @see BundleClassLoader#listLocalResources(String, String, int)
+	 */
+	public Collection<String> listLocalResources(String path, String filePattern, int options) {
+		List<BundleFile> bundleFiles = new ArrayList<BundleFile>();
+
+		ClasspathEntry[] cpEntries = getHostClasspathEntries();
+		for (ClasspathEntry cpEntry : cpEntries)
+			bundleFiles.add(cpEntry.getBundleFile());
+
+		FragmentClasspath[] currentFragments = getFragmentClasspaths();
+		for (FragmentClasspath fragmentClasspath : currentFragments) {
+			ClasspathEntry[] fragEntries = fragmentClasspath.getEntries();
+			for (ClasspathEntry cpEntry : fragEntries)
+				bundleFiles.add(cpEntry.getBundleFile());
+		}
+
+		return getBaseData().getAdaptor().listEntryPaths(bundleFiles, path, filePattern, options);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/core/BundleResourceHandler.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/core/BundleResourceHandler.java
index ac7ae6e..68d28e9 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/core/BundleResourceHandler.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/core/BundleResourceHandler.java
@@ -124,7 +124,7 @@ public abstract class BundleResourceHandler extends URLStreamHandler implements
 		// are allowed access to the resource.
 		String authorized = SECURITY_UNCHECKED;
 		long bundleId = getBundleID(host);
-		Bundle bundle = adaptor == null ? null : adaptor.getContext().getBundle(bundleId);
+		Bundle bundle = adaptor == null ? null : adaptor.getBundle(bundleId);
 		if (checkAuthorization(bundle))
 			authorized = SECURITY_CHECKED;
 		// Always force the use of the hash from the adaptor
@@ -162,7 +162,7 @@ public abstract class BundleResourceHandler extends URLStreamHandler implements
 		} catch (NumberFormatException nfe) {
 			throw (MalformedURLException) new MalformedURLException(NLS.bind(AdaptorMsg.URL_INVALID_BUNDLE_ID, host)).initCause(nfe);
 		}
-		bundle = adaptor == null ? null : (AbstractBundle) adaptor.getContext().getBundle(bundleID);
+		bundle = adaptor == null ? null : (AbstractBundle) adaptor.getBundle(bundleID);
 		if (bundle == null)
 			throw new IOException(NLS.bind(AdaptorMsg.URL_NO_BUNDLE_FOUND, url.toExternalForm()));
 		// check to make sure that this URL was created using the
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/Handler.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/Handler.java
index f7b4b81..d26175e 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/Handler.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/Handler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,9 +27,10 @@ import java.net.*;
  * </pre>
  */
 public class Handler extends URLStreamHandler {
-	public Handler() {
-	}
 
+	/**
+	 * @throws IOException  
+	 */
 	protected URLConnection openConnection(URL url) throws IOException {
 		return new ReferenceURLConnection(url);
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/ReferenceURLConnection.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/ReferenceURLConnection.java
index 4c8ecc1..f58a4b3 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/ReferenceURLConnection.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/internal/protocol/reference/ReferenceURLConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class ReferenceURLConnection extends URLConnection {
 		super(url);
 	}
 
+	@SuppressWarnings("deprecation")
 	public synchronized void connect() throws IOException {
 		if (!connected) {
 			// TODO assumes that reference URLs are always based on file: URLs.
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorMsg.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorMsg.java
index 3185ff2..751119b 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorMsg.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorMsg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,11 +22,8 @@ import org.eclipse.osgi.util.NLS;
 public class AdaptorMsg extends NLS {
 
 	public static String ADAPTER_FILEEXIST_EXCEPTION;
-	public static String ADAPTOR_DATA_AREA_NOT_SET;
 	public static String ADAPTOR_DIRECTORY_CREATE_EXCEPTION;
 	public static String ADAPTOR_DIRECTORY_EXCEPTION;
-	public static String ADAPTOR_DIRECTORY_REMOVE_EXCEPTION;
-	public static String ADAPTOR_ERROR_GETTING_MANIFEST;
 	public static String ADAPTOR_EXTENSION_IMPORT_ERROR;
 	public static String ADAPTOR_EXTENSION_NATIVECODE_ERROR;
 	public static String ADAPTOR_EXTENSION_REQUIRE_ERROR;
@@ -36,7 +33,6 @@ public class AdaptorMsg extends NLS {
 	public static String ADAPTOR_URL_CREATE_EXCEPTION;
 
 	public static String BUNDLE_CLASSPATH_ENTRY_NOT_FOUND_EXCEPTION;
-	public static String BUNDLE_CLASSPATH_PROPERTIES_ERROR;
 	public static String BUNDLE_NATIVECODE_EXCEPTION;
 	public static String BUNDLE_READ_EXCEPTION;
 
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorUtil.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorUtil.java
index e998e76..419850c 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorUtil.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/AdaptorUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,7 +77,7 @@ public class AdaptorUtil {
 				fos.write(buffer, 0, count);
 			}
 		} catch (IOException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Unable to read file"); //$NON-NLS-1$
 				Debug.printStackTrace(e);
 			}
@@ -120,7 +120,7 @@ public class AdaptorUtil {
 					}
 				}
 			}
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				if (file.isDirectory()) {
 					Debug.println("rmdir " + file.getPath()); //$NON-NLS-1$
 				} else {
@@ -130,7 +130,7 @@ public class AdaptorUtil {
 
 			boolean success = file.delete();
 
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				if (!success) {
 					Debug.println("  rm failed!!"); //$NON-NLS-1$
 				}
@@ -174,16 +174,16 @@ public class AdaptorUtil {
 	 * @param context the registering bundle context
 	 * @return the service registration object
 	 */
-	public static ServiceRegistration register(String name, Object service, BundleContext context) {
-		Hashtable properties = new Hashtable(7);
-		Dictionary headers = context.getBundle().getHeaders();
+	public static ServiceRegistration<?> register(String name, Object service, BundleContext context) {
+		Dictionary<String, Object> properties = new Hashtable<String, Object>(7);
+		Dictionary<String, String> headers = context.getBundle().getHeaders();
 		properties.put(Constants.SERVICE_VENDOR, headers.get(Constants.BUNDLE_VENDOR));
 		properties.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE));
 		properties.put(Constants.SERVICE_PID, context.getBundle().getBundleId() + "." + service.getClass().getName()); //$NON-NLS-1$
 		return context.registerService(name, service, properties);
 	}
 
-	public static Dictionary loadManifestFrom(BaseData bundledata) throws BundleException {
+	public static Dictionary<String, String> loadManifestFrom(BaseData bundledata) throws BundleException {
 		URL url = bundledata.getEntry(Constants.OSGI_BUNDLE_MANIFEST);
 		if (url == null)
 			return null;
@@ -216,12 +216,13 @@ public class AdaptorUtil {
 		return true;
 	}
 
+	@SuppressWarnings("deprecation")
 	public static URL encodeFileURL(File file) throws MalformedURLException {
 		try {
-			Method toURI = File.class.getMethod("toURI", null); //$NON-NLS-1$
-			Object uri = toURI.invoke(file, null);
-			Method toURL = uri.getClass().getMethod("toURL", null); //$NON-NLS-1$
-			return (URL) toURL.invoke(uri, null);
+			Method toURI = File.class.getMethod("toURI", (Class[]) null); //$NON-NLS-1$
+			Object uri = toURI.invoke(file, (Object[]) null);
+			Method toURL = uri.getClass().getMethod("toURL", (Class[]) null); //$NON-NLS-1$
+			return (URL) toURL.invoke(uri, (Object[]) null);
 		} catch (NoSuchMethodException e) {
 			// use toURL.
 		} catch (IllegalAccessException e) {
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/ArrayMap.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/ArrayMap.java
new file mode 100644
index 0000000..7365644
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/ArrayMap.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.internal.baseadaptor;
+
+import java.util.*;
+
+/**
+ * Simple map when dealing with small amounts of entries.
+ * This class also provides a Collections view of the keys
+ *
+ * @param <K> The key type
+ * @param <V> the value type
+ */
+public class ArrayMap<K, V> implements Collection<K> {
+	final List<K> keys;
+	final List<V> values;
+
+	public ArrayMap(int initialCapacity) {
+		keys = new ArrayList<K>(initialCapacity);
+		values = new ArrayList<V>(initialCapacity);
+	}
+
+	/**
+	 * Note that the keys and values are not copied.  Changes to this ArrayMap
+	 * will change the values of the keys and values Lists.
+	 * @param keys
+	 * @param values
+	 */
+	public ArrayMap(List<K> keys, List<V> values) {
+		if (keys.size() != values.size())
+			throw new IllegalArgumentException("Keys and values size must be equal."); //$NON-NLS-1$
+		this.keys = keys;
+		this.values = values;
+	}
+
+	public V get(K key) {
+		int index = keys.indexOf(key);
+		if (index < 0)
+			return null;
+		return values.get(index);
+	}
+
+	public void put(K key, V value) {
+		int index = keys.indexOf(key);
+		if (index > 0) {
+			values.add(index, value);
+		} else {
+			keys.add(key);
+			values.add(value);
+		}
+	}
+
+	public boolean remove(Object key) {
+		int index = keys.indexOf(key);
+		if (index < 0)
+			return false;
+		keys.remove(index);
+		values.remove(index);
+		return true;
+	}
+
+	public void clear() {
+		keys.clear();
+		values.clear();
+	}
+
+	public List<K> getKeys() {
+		return new ArrayList<K>(keys);
+	}
+
+	public List<V> getValues() {
+		return new ArrayList<V>(values);
+	}
+
+	public int size() {
+		return keys.size();
+	}
+
+	public boolean isEmpty() {
+		return keys.isEmpty();
+	}
+
+	public boolean contains(Object o) {
+		return keys.contains(o);
+	}
+
+	public Iterator<K> iterator() {
+		final Iterator<K> keyIter = keys.iterator();
+		final Iterator<V> valueIter = values.iterator();
+
+		return new Iterator<K>() {
+			public boolean hasNext() {
+				return keyIter.hasNext();
+			}
+
+			public K next() {
+				valueIter.next();
+				return keyIter.next();
+			}
+
+			public void remove() {
+				valueIter.remove();
+				keyIter.remove();
+			}
+		};
+	}
+
+	public Object[] toArray() {
+		return keys.toArray();
+	}
+
+	public <T> T[] toArray(T[] a) {
+		return keys.toArray(a);
+	}
+
+	public boolean add(K o) {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean containsAll(Collection<?> c) {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean addAll(Collection<? extends K> c) {
+		throw new UnsupportedOperationException();
+	}
+
+	public boolean removeAll(Collection<?> c) {
+		boolean result = false;
+		for (Object key : c)
+			result |= remove(key);
+		return result;
+	}
+
+	public boolean retainAll(Collection<?> c) {
+		boolean result = false;
+		Object[] keyArray = keys.toArray();
+		for (Object key : keyArray) {
+			if (!c.contains(key))
+				result |= remove(key);
+		}
+		return result;
+	}
+
+	public K getKey(int index) {
+		return keys.get(index);
+	}
+
+	public V getValue(int index) {
+		return values.get(index);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseClassLoadingHook.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseClassLoadingHook.java
index f1f8abf..8431ac3 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseClassLoadingHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseClassLoadingHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@ public class BaseClassLoadingHook implements ClassLoadingHook {
 	public String findLibrary(BaseData data, String libName) {
 		String mappedName = System.mapLibraryName(libName);
 		String path = null;
-		if (Debug.DEBUG && Debug.DEBUG_LOADER)
+		if (Debug.DEBUG_LOADER)
 			Debug.println("  mapped library name: " + mappedName); //$NON-NLS-1$
 		path = findNativePath(data, mappedName);
 		if (path == null) {
@@ -64,11 +64,11 @@ public class BaseClassLoadingHook implements ClassLoadingHook {
 				path = findNativePath(data, mappedNames[i]);
 		}
 		if (path == null) {
-			if (Debug.DEBUG && Debug.DEBUG_LOADER)
+			if (Debug.DEBUG_LOADER)
 				Debug.println("  library does not exist: " + mappedName); //$NON-NLS-1$
 			path = findNativePath(data, libName);
 		}
-		if (Debug.DEBUG && Debug.DEBUG_LOADER)
+		if (Debug.DEBUG_LOADER)
 			Debug.println("  returning library: " + path); //$NON-NLS-1$
 		return path;
 	}
@@ -104,7 +104,7 @@ public class BaseClassLoadingHook implements ClassLoadingHook {
 		return storageHook != null ? storageHook.getNativePaths() : null;
 	}
 
-	public boolean addClassPathEntry(ArrayList cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain) {
+	public boolean addClassPathEntry(ArrayList<ClasspathEntry> cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain) {
 		// do nothing
 		return false;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BasePermissionStorage.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BasePermissionStorage.java
index c0deb55..1208615 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BasePermissionStorage.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BasePermissionStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,13 +12,12 @@
 package org.eclipse.osgi.internal.baseadaptor;
 
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
+import java.util.*;
 import org.eclipse.osgi.framework.adaptor.PermissionStorage;
 
 public class BasePermissionStorage implements PermissionStorage {
 
-	private HashMap locations = new HashMap();
+	private Map<String, String[]> locations = new HashMap<String, String[]>();
 	private String[] defaultInfos;
 	private String[] condPermInfos;
 	private BaseStorage storage;
@@ -28,26 +27,35 @@ public class BasePermissionStorage implements PermissionStorage {
 		this.storage = storage;
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public String[] getLocations() throws IOException {
 		synchronized (locations) {
 			String[] result = new String[locations.size()];
 			int i = 0;
-			for (Iterator iLocs = locations.keySet().iterator(); iLocs.hasNext(); i++)
-				result[i] = (String) iLocs.next();
+			for (Iterator<String> iLocs = locations.keySet().iterator(); iLocs.hasNext(); i++)
+				result[i] = iLocs.next();
 			return result;
 		}
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public String[] getPermissionData(String location) throws IOException {
 		if (location == null)
 			return defaultInfos;
 		synchronized (locations) {
 			if (locations.size() == 0)
 				return null;
-			return (String[]) locations.get(location);
+			return locations.get(location);
 		}
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public void setPermissionData(String location, String[] data) throws IOException {
 		if (location == null) {
 			defaultInfos = data;
@@ -63,12 +71,18 @@ public class BasePermissionStorage implements PermissionStorage {
 		storage.requestSave();
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public void saveConditionalPermissionInfos(String[] infos) throws IOException {
 		condPermInfos = infos;
 		setDirty(true);
 		storage.requestSave();
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public String[] getConditionalPermissionInfos() throws IOException {
 		return condPermInfos;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java
index 5d197d5..93e06c9 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,8 @@ import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.framework.util.KeyedHashSet;
+import org.eclipse.osgi.internal.loader.BundleLoader;
+import org.eclipse.osgi.internal.loader.BundleLoaderProxy;
 import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.storagemanager.ManagedOutputStream;
@@ -75,6 +77,11 @@ public class BaseStorage implements SynchronousBundleListener {
 	 */
 	public static final byte EXTENSION_UPDATED = 0x08;
 
+	/** The BundleData is for a bundle exploded in a directory */
+	public static final int TYPE_DIRECTORYBUNDLE = 0x10000000;
+	/** The BundleData is for a bundle contained in a file (typically jar) */
+	public static final int TYPE_FILEBUNDLE = 0x20000000;
+
 	/**
 	 * the file name for the delete flag.  If this file exists in one a directory 
 	 * under the bundle store area then it will be removed during the 
@@ -84,9 +91,9 @@ public class BaseStorage implements SynchronousBundleListener {
 	private static final String PERM_DATA_FILE = ".permdata"; //$NON-NLS-1$
 	private static final byte PERMDATA_VERSION = 1;
 
-	private final MRUBundleFileList mruList = new MRUBundleFileList();
+	private MRUBundleFileList mruList = new MRUBundleFileList();
 
-	private BaseAdaptor adaptor;
+	BaseAdaptor adaptor;
 	// assume a file: installURL
 	private String installPath;
 	private StorageManager storageManager;
@@ -129,8 +136,8 @@ public class BaseStorage implements SynchronousBundleListener {
 		addExtURLMethod = findAddURLMethod(getExtClassLoader(), "addURL"); //$NON-NLS-1$
 	}
 
-	public void initialize(BaseAdaptor adaptor) throws IOException {
-		this.adaptor = adaptor;
+	public void initialize(BaseAdaptor initAdaptor) throws IOException {
+		this.adaptor = initAdaptor;
 		setDebugOptions();
 		if (Boolean.valueOf(FrameworkProperties.getProperty(BaseStorage.PROP_CLEAN)).booleanValue())
 			cleanOSGiCache();
@@ -147,7 +154,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		storageManager = initFileManager(LocationManager.getOSGiConfigurationDir(), readOnlyConfiguration ? "none" : null, readOnlyConfiguration); //$NON-NLS-1$
 		storageManagerClosed = false;
 		// initialize the storageHooks
-		StorageHook[] hooks = adaptor.getHookRegistry().getStorageHooks();
+		StorageHook[] hooks = initAdaptor.getHookRegistry().getStorageHooks();
 		for (int i = 0; i < hooks.length; i++)
 			storageHooks.add(hooks[i]);
 	}
@@ -159,7 +166,7 @@ public class BaseStorage implements SynchronousBundleListener {
 	}
 
 	// recursively searches a class and it's superclasses for a (potentially inaccessable) method
-	private static Method findMethod(Class clazz, String name, Class[] args) {
+	private static Method findMethod(Class<?> clazz, String name, Class<?>[] args) {
 		if (clazz == null)
 			return null; // ends the recursion when getSuperClass returns null
 		try {
@@ -212,7 +219,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		try {
 			sManager.open(!readOnly);
 		} catch (IOException ex) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Error reading framework metadata: " + ex.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(ex);
 			}
@@ -231,13 +238,13 @@ public class BaseStorage implements SynchronousBundleListener {
 		return storageManager.isReadOnly();
 	}
 
-	public void compact() throws IOException {
+	public void compact() {
 		if (!isReadOnly())
 			compact(getBundleStoreRoot());
 	}
 
 	private void compact(File directory) {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+		if (Debug.DEBUG_GENERAL)
 			Debug.println("compact(" + directory.getPath() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		String list[] = directory.list();
 		if (list == null)
@@ -261,7 +268,7 @@ public class BaseStorage implements SynchronousBundleListener {
 						FileOutputStream out = new FileOutputStream(delete);
 						out.close();
 					} catch (IOException e) {
-						if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+						if (Debug.DEBUG_GENERAL)
 							Debug.println("Unable to write " + delete.getPath() + ": " + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
 					}
 				}
@@ -271,6 +278,9 @@ public class BaseStorage implements SynchronousBundleListener {
 		}
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public long getFreeSpace() throws IOException {
 		// cannot implement this without native code!
 		return -1;
@@ -295,12 +305,12 @@ public class BaseStorage implements SynchronousBundleListener {
 		}
 	}
 
-	public Dictionary loadManifest(BaseData data) throws BundleException {
+	public Dictionary<String, String> loadManifest(BaseData data) throws BundleException {
 		return loadManifest(data, false);
 	}
 
-	public Dictionary loadManifest(BaseData bundleData, boolean firstTime) throws BundleException {
-		Dictionary result = null;
+	public Dictionary<String, String> loadManifest(BaseData bundleData, boolean firstTime) throws BundleException {
+		Dictionary<String, String> result = null;
 		StorageHook[] dataStorageHooks = bundleData.getStorageHooks();
 		for (int i = 0; i < dataStorageHooks.length && result == null; i++)
 			result = dataStorageHooks[i].getManifest(firstTime);
@@ -366,18 +376,18 @@ public class BaseStorage implements SynchronousBundleListener {
 				nextId = in.readLong();
 
 				int numStorageHooks = in.readInt();
-				StorageHook[] storageHooks = adaptor.getHookRegistry().getStorageHooks();
-				if (numStorageHooks != storageHooks.length)
+				StorageHook[] hooks = adaptor.getHookRegistry().getStorageHooks();
+				if (numStorageHooks != hooks.length)
 					return null; // must have the same number of storagehooks to properly read the data
 				for (int i = 0; i < numStorageHooks; i++) {
-					Object storageKey = storageHooks[i].getKey();
-					int storageVersion = storageHooks[i].getStorageVersion();
+					Object storageKey = hooks[i].getKey();
+					int storageVersion = hooks[i].getStorageVersion();
 					if (!storageKey.equals(in.readUTF()) || storageVersion != in.readInt())
 						return null; // some storage hooks have changed must throw the data away.
 				}
 
 				int bundleCount = in.readInt();
-				ArrayList result = new ArrayList(bundleCount);
+				List<BaseData> result = new ArrayList<BaseData>(bundleCount);
 				long id = -1;
 				boolean bundleDiscarded = false;
 				for (int i = 0; i < bundleCount; i++) {
@@ -391,7 +401,7 @@ public class BaseStorage implements SynchronousBundleListener {
 							StorageHook[] dataStorageHooks = data.getStorageHooks();
 							for (int j = 0; j < dataStorageHooks.length; j++)
 								dataStorageHooks[j].validate();
-							if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+							if (Debug.DEBUG_GENERAL)
 								Debug.println("BundleData created: " + data); //$NON-NLS-1$
 							processExtension(data, EXTENSION_INITIALIZE);
 							result.add(data);
@@ -407,7 +417,7 @@ public class BaseStorage implements SynchronousBundleListener {
 					} catch (IOException e) {
 						bundleDiscarded = true;
 						error = true;
-						if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+						if (Debug.DEBUG_GENERAL) {
 							Debug.println("Error reading framework metadata: " + e.getMessage()); //$NON-NLS-1$ 
 							Debug.printStackTrace(e);
 						}
@@ -419,12 +429,12 @@ public class BaseStorage implements SynchronousBundleListener {
 				}
 				if (bundleDiscarded)
 					FrameworkProperties.setProperty(EclipseStarter.PROP_REFRESH_BUNDLES, "true"); //$NON-NLS-1$
-				return (BaseData[]) result.toArray(new BaseData[result.size()]);
+				return result.toArray(new BaseData[result.size()]);
 			} finally {
 				in.close();
 			}
 		} catch (IOException e) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Error reading framework metadata: " + e.getMessage()); //$NON-NLS-1$ 
 				Debug.printStackTrace(e);
 			}
@@ -432,8 +442,8 @@ public class BaseStorage implements SynchronousBundleListener {
 		return null;
 	}
 
-	private void saveAllData(boolean shutdown) {
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+	void saveAllData(boolean shutdown) {
+		if (Debug.DEBUG_GENERAL)
 			Debug.println("Saving framework data ..."); //$NON-NLS-1$
 		if (storageManagerClosed)
 			try {
@@ -499,7 +509,7 @@ public class BaseStorage implements SynchronousBundleListener {
 	private void savePermissionStorage() {
 		if (permissionStorage == null || isReadOnly() || !permissionStorage.isDirty())
 			return;
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+		if (Debug.DEBUG_GENERAL)
 			Debug.println("About to save permission data ..."); //$NON-NLS-1$
 		try {
 			ManagedOutputStream fmos = storageManager.getOutputStream(PERM_DATA_FILE);
@@ -552,7 +562,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		// the cache and the state match
 		if (stateManager == null || isReadOnly() || (timeStamp == stateManager.getSystemState().getTimeStamp() && !stateManager.saveNeeded()))
 			return;
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+		if (Debug.DEBUG_GENERAL)
 			Debug.println("Saving bundle data ..."); //$NON-NLS-1$
 		try {
 			ManagedOutputStream fmos = storageManager.getOutputStream(LocationManager.BUNDLE_DATA_FILE);
@@ -564,11 +574,11 @@ public class BaseStorage implements SynchronousBundleListener {
 				out.writeInt(initialBundleStartLevel);
 				out.writeLong(nextId);
 
-				StorageHook[] storageHooks = adaptor.getHookRegistry().getStorageHooks();
-				out.writeInt(storageHooks.length);
-				for (int i = 0; i < storageHooks.length; i++) {
-					out.writeUTF((String) storageHooks[i].getKey());
-					out.writeInt(storageHooks[i].getStorageVersion());
+				StorageHook[] hooks = adaptor.getHookRegistry().getStorageHooks();
+				out.writeInt(hooks.length);
+				for (int i = 0; i < hooks.length; i++) {
+					out.writeUTF((String) hooks[i].getKey());
+					out.writeInt(hooks[i].getStorageVersion());
 				}
 
 				Bundle[] bundles = context.getBundles();
@@ -601,13 +611,43 @@ public class BaseStorage implements SynchronousBundleListener {
 		}
 	}
 
+	private void cleanRemovalPendings(State systemState, BundleDescription[] removalPendings) {
+		if (removalPendings.length == 0)
+			return;
+		systemState.resolve(removalPendings);
+		for (int i = 0; i < removalPendings.length; i++) {
+			Object userObject = removalPendings[i].getUserObject();
+			if (userObject instanceof BundleLoaderProxy) {
+				BundleLoader.closeBundleLoader((BundleLoaderProxy) userObject);
+				try {
+					((BundleLoaderProxy) userObject).getBundleData().close();
+				} catch (IOException e) {
+					// ignore
+				}
+			} else if (userObject instanceof BundleData) {
+				try {
+					((BundleData) userObject).close();
+				} catch (IOException e) {
+					// ignore
+				}
+			}
+		}
+	}
+
 	private void saveStateData(boolean shutdown) {
+		State systemState = stateManager.getSystemState();
 		if (shutdown && "true".equals(FrameworkProperties.getProperty("osgi.forcedRestart"))) //$NON-NLS-1$ //$NON-NLS-2$
 			// increment the state timestamp if a forced restart happened.
-			stateManager.getSystemState().setTimeStamp(stateManager.getSystemState().getTimeStamp() + 1);
+			systemState.setTimeStamp(systemState.getTimeStamp() + 1);
+		BundleDescription[] removalPendings = systemState.getRemovalPending();
+		if (removalPendings.length > 0) {
+			if (!shutdown)
+				return; // never save if removal pending; unless we are shutting down
+			cleanRemovalPendings(systemState, removalPendings);
+		}
 		if (stateManager == null || isReadOnly() || !stateManager.saveNeeded())
 			return;
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+		if (Debug.DEBUG_GENERAL)
 			Debug.println("Saving resolver state data ..."); //$NON-NLS-1$
 		File stateTmpFile = null;
 		File lazyTmpFile = null;
@@ -633,7 +673,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		}
 	}
 
-	public PermissionStorage getPermissionStorage() throws IOException {
+	public PermissionStorage getPermissionStorage() {
 		if (permissionStorage == null)
 			permissionStorage = readPermissionData();
 		return permissionStorage;
@@ -648,7 +688,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		requestSave();
 	}
 
-	public void save(BaseData data) throws IOException {
+	public void save(BaseData data) {
 		if (data.isDirty()) {
 			timeStamp--; // Change the value of the timeStamp, as a marker that something changed.
 			requestSave();
@@ -669,7 +709,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		return new BundleUninstall(data, this);
 	}
 
-	protected Object getBundleContent(BaseData bundledata) throws IOException {
+	protected Object getBundleContent(BaseData bundledata) {
 		BaseStorageHook storageHook = (BaseStorageHook) bundledata.getStorageHook(BaseStorageHook.KEY);
 		if (storageHook == null)
 			throw new IllegalStateException();
@@ -684,7 +724,9 @@ public class BaseStorage implements SynchronousBundleListener {
 			// get the content of this bundle
 			content = getBundleContent(data);
 		}
-		BundleFile result = null;
+		BundleFile result = data.getBundleFile(content, base);
+		if (result != null)
+			return result;
 		// Ask factories before doing the default behavior
 		BundleFileFactoryHook[] factories = adaptor.getHookRegistry().getBundleFileFactoryHooks();
 		for (int i = 0; i < factories.length && result == null; i++)
@@ -693,10 +735,10 @@ public class BaseStorage implements SynchronousBundleListener {
 		// No factories configured or they declined to create the bundle file; do default
 		if (result == null && content instanceof File) {
 			File file = (File) content;
-			if (file.isDirectory())
+			if (isDirectory(data, base, file))
 				result = new DirBundleFile(file);
 			else
-				result = new ZipBundleFile(file, data, this.mruList);
+				result = new ZipBundleFile(file, data, getMRUList());
 		}
 
 		if (result == null && content instanceof String) {
@@ -715,9 +757,35 @@ public class BaseStorage implements SynchronousBundleListener {
 			if (wrapperBundle != null && wrapperBundle != result)
 				result = wrapped = new BundleFileWrapperChain(wrapperBundle, wrapped);
 		}
+		if (!base)
+			data.setBundleFile(content, result);
 		return result;
 	}
 
+	private synchronized MRUBundleFileList getMRUList() {
+		if (mruList == null)
+			mruList = new MRUBundleFileList();
+		return mruList;
+	}
+
+	private boolean isDirectory(BaseData data, boolean base, File file) {
+		if (!base)
+			// there is no other place to check this; just consult the file directly
+			return file.isDirectory();
+		boolean isDirectory = false;
+		// first check if the type bits have been set
+		int type = data.getType();
+		if ((type & (TYPE_DIRECTORYBUNDLE | TYPE_FILEBUNDLE)) == 0) {
+			// no type bits set; consult the file and save the result
+			isDirectory = file.isDirectory();
+			data.setType(type | (isDirectory ? TYPE_DIRECTORYBUNDLE : TYPE_FILEBUNDLE));
+		} else {
+			// type bits have been set check to see if this is a directory bundle.
+			isDirectory = (type & TYPE_DIRECTORYBUNDLE) != 0;
+		}
+		return isDirectory;
+	}
+
 	public synchronized StateManager getStateManager() {
 		if (stateManager != null)
 			return stateManager;
@@ -732,7 +800,7 @@ public class BaseStorage implements SynchronousBundleListener {
 			return;
 		boolean removedBundle = false;
 		for (int i = 0; i < bundles.length; i++) {
-			if (context.getBundle(bundles[i].getBundleId()) == null) {
+			if (adaptor.getBundle(bundles[i].getBundleId()) == null) {
 				state.removeBundle(bundles[i]);
 				removedBundle = true;
 			}
@@ -774,7 +842,7 @@ public class BaseStorage implements SynchronousBundleListener {
 			AbstractBundle toAdd = (AbstractBundle) installedBundles[i];
 			try {
 				// make sure we get the real manifest as if this is the first time.
-				Dictionary toAddManifest = loadManifest((BaseData) toAdd.getBundleData(), true);
+				Dictionary<String, String> toAddManifest = loadManifest((BaseData) toAdd.getBundleData(), true);
 				BundleDescription newDescription = factory.createBundleDescription(systemState, toAddManifest, toAdd.getLocation(), toAdd.getBundleId());
 				systemState.addBundle(newDescription);
 			} catch (BundleException be) {
@@ -794,7 +862,7 @@ public class BaseStorage implements SynchronousBundleListener {
 			for (int i = 0; i < storageFiles.length; i++)
 				storageFiles[i] = storageManager.lookup(fileNames[i], false);
 		} catch (IOException ex) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Error reading state file " + ex.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(ex);
 			}
@@ -818,7 +886,7 @@ public class BaseStorage implements SynchronousBundleListener {
 					storageFiles[i] = newFileManager.lookup(fileNames[i], false);
 				newFileManager.close();
 			} catch (IOException ex) {
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+				if (Debug.DEBUG_GENERAL) {
 					Debug.println("Error reading state file " + ex.getMessage()); //$NON-NLS-1$
 					Debug.printStackTrace(ex);
 				}
@@ -831,7 +899,7 @@ public class BaseStorage implements SynchronousBundleListener {
 						storageFiles[i] = storageManager.lookup(fileNames[i], true);
 				}
 			} catch (IOException ex) {
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+				if (Debug.DEBUG_GENERAL) {
 					Debug.println("Error reading state file " + ex.getMessage()); //$NON-NLS-1$
 					Debug.printStackTrace(ex);
 				}
@@ -840,7 +908,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		return storageFiles;
 	}
 
-	public void frameworkStart(BundleContext fwContext) throws BundleException {
+	public void frameworkStart(BundleContext fwContext) {
 		this.context = fwContext;
 		// System property can be set to enable state saver or not.
 		if (Boolean.valueOf(FrameworkProperties.getProperty(BaseStorage.PROP_ENABLE_STATE_SAVER, "true")).booleanValue()) //$NON-NLS-1$
@@ -848,7 +916,7 @@ public class BaseStorage implements SynchronousBundleListener {
 
 	}
 
-	public void frameworkStop(BundleContext fwContext) throws BundleException {
+	public void frameworkStop(BundleContext fwContext) {
 		if (stateSaver != null)
 			stateSaver.shutdown();
 		saveAllData(true);
@@ -856,7 +924,11 @@ public class BaseStorage implements SynchronousBundleListener {
 		storageManagerClosed = true;
 		if (extensionListener != null)
 			context.removeBundleListener(extensionListener);
-		mruList.shutdown();
+		MRUBundleFileList current = mruList;
+		if (current != null)
+			current.shutdown();
+		mruList = null;
+		stateManager = null;
 	}
 
 	public void frameworkStopping(BundleContext fwContext) {
@@ -876,7 +948,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		try {
 			storageStream = storageManager.getInputStream(fileName);
 		} catch (IOException ex) {
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+			if (Debug.DEBUG_GENERAL) {
 				Debug.println("Error reading framework metadata: " + ex.getMessage()); //$NON-NLS-1$
 				Debug.printStackTrace(ex);
 			}
@@ -938,7 +1010,7 @@ public class BaseStorage implements SynchronousBundleListener {
 	private void cleanOSGiCache() {
 		File osgiConfig = LocationManager.getOSGiConfigurationDir();
 		if (!AdaptorUtil.rm(osgiConfig))
-			adaptor.getFrameworkLog().log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, "The -clean (osgi.clean) option was not successful. Unable to clean the storage area: " + osgiConfig.getAbsolutePath(), 0, null, null)); //$NON-NLS-1$
+			adaptor.getFrameworkLog().log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.ERROR, 0, "The -clean (osgi.clean) option was not successful. Unable to clean the storage area: " + osgiConfig.getAbsolutePath(), 0, null, null)); //$NON-NLS-1$
 
 	}
 
@@ -967,7 +1039,7 @@ public class BaseStorage implements SynchronousBundleListener {
 	 * @throws BundleException if the extension bundle metadata is invalid
 	 */
 	private void validateExtension(BundleData bundleData) throws BundleException {
-		Dictionary extensionManifest = bundleData.getManifest();
+		Dictionary<String, String> extensionManifest = bundleData.getManifest();
 		if (extensionManifest.get(Constants.IMPORT_PACKAGE) != null)
 			throw new BundleException(NLS.bind(AdaptorMsg.ADAPTOR_EXTENSION_IMPORT_ERROR, bundleData.getLocation()), BundleException.MANIFEST_ERROR);
 		if (extensionManifest.get(Constants.REQUIRE_BUNDLE) != null)
@@ -994,7 +1066,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		addExtensionContent(bundleData, type, getExtClassLoader(), addExtURLMethod);
 	}
 
-	private void addExtensionContent(BaseData bundleData, byte type, ClassLoader addToLoader, Method addToMethod) throws BundleException {
+	private void addExtensionContent(BaseData bundleData, byte type, ClassLoader addToLoader, Method addToMethod) {
 		if ((type & (EXTENSION_UNINSTALLED | EXTENSION_UPDATED)) != 0)
 			// if uninstalled or updated then do nothing framework must be restarted.
 			return;
@@ -1092,7 +1164,7 @@ public class BaseStorage implements SynchronousBundleListener {
 				System.arraycopy(origPaths, 0, paths, 0, origPaths.length);
 				System.arraycopy(devPaths, 0, paths, origPaths.length, devPaths.length);
 			}
-			ArrayList results = new ArrayList(paths.length);
+			List<File> results = new ArrayList<File>(paths.length);
 			for (int i = 0; i < paths.length; i++) {
 				if (".".equals(paths[i])) //$NON-NLS-1$
 					results.add(bundleData.getBundleFile().getBaseFile());
@@ -1102,7 +1174,7 @@ public class BaseStorage implements SynchronousBundleListener {
 						results.add(result);
 				}
 			}
-			return (File[]) results.toArray(new File[results.size()]);
+			return results.toArray(new File[results.size()]);
 		} catch (BundleException e) {
 			adaptor.getEventPublisher().publishFrameworkEvent(FrameworkEvent.ERROR, bundleData.getBundle(), e);
 		}
@@ -1122,7 +1194,7 @@ public class BaseStorage implements SynchronousBundleListener {
 	 * @param type the type of modification
 	 * @throws BundleException
 	 */
-	public void updateState(BundleData bundleData, int type) throws BundleException {
+	public void updateState(BaseData bundleData, int type) throws BundleException {
 		if (stateManager == null) {
 			invalidState = true;
 			return;
@@ -1137,6 +1209,11 @@ public class BaseStorage implements SynchronousBundleListener {
 				if (type == BundleEvent.UPDATED)
 					oldDescription = systemState.getBundle(bundleData.getBundleID());
 				newDescription = stateManager.getFactory().createBundleDescription(systemState, bundleData.getManifest(), bundleData.getLocation(), bundleData.getBundleID());
+				// For the install case we need to set the bundle before adding to the state
+				// because the bundle is not available in the context yet.
+				// We go ahead and set it for the update case for simplicity; 
+				// but this is not strictly necessary
+				newDescription.setUserObject(bundleData);
 				if (oldDescription == null)
 					systemState.addBundle(newDescription);
 				else
@@ -1148,7 +1225,7 @@ public class BaseStorage implements SynchronousBundleListener {
 		}
 
 		if (newDescription != null)
-			validateNativeCodePaths(newDescription, (BaseData) bundleData);
+			validateNativeCodePaths(newDescription, bundleData);
 	}
 
 	private void validateNativeCodePaths(BundleDescription newDescription, BaseData data) {
@@ -1247,15 +1324,15 @@ public class BaseStorage implements SynchronousBundleListener {
 			}
 			try {
 				if (joinWith != null) {
-					if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+					if (Debug.DEBUG_GENERAL)
 						Debug.println("About to join saving thread"); //$NON-NLS-1$
 					// There should be no deadlock when 'shutdown' is true.
 					joinWith.join();
-					if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+					if (Debug.DEBUG_GENERAL)
 						Debug.println("Joined with saving thread"); //$NON-NLS-1$
 				}
 			} catch (InterruptedException ie) {
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL) {
+				if (Debug.DEBUG_GENERAL) {
 					Debug.println("Error shutdowning StateSaver: " + ie.getMessage()); //$NON-NLS-1$
 					Debug.printStackTrace(ie);
 				}
@@ -1267,8 +1344,11 @@ public class BaseStorage implements SynchronousBundleListener {
 			synchronized (systemState) {
 				if (shutdown)
 					return; // do not start another thread if we have already shutdown
-				if (delay_interval == 0) // all saves are atomic
+				if (delay_interval == 0) {
+					// all saves are atomic; never start a background thread
 					saveAllData(false);
+					return;
+				}
 				lastSaveTime = System.currentTimeMillis();
 				if (runningThread == null) {
 					shutdownHook = new Thread(new Runnable() {
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java
index 23d2e37..aa40512 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java
@@ -69,23 +69,27 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 		return STORAGE_VERSION;
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public StorageHook create(BaseData bundledata) throws BundleException {
 		BaseStorageHook storageHook = new BaseStorageHook(storage);
 		storageHook.bundleData = bundledata;
 		return storageHook;
 	}
 
-	public void initialize(Dictionary manifest) throws BundleException {
+	public void initialize(Dictionary<String, String> manifest) throws BundleException {
 		BaseStorageHook.loadManifest(bundleData, manifest);
 	}
 
-	static void loadManifest(BaseData target, Dictionary manifest) throws BundleException {
+	@SuppressWarnings("deprecation")
+	static void loadManifest(BaseData target, Dictionary<String, String> manifest) throws BundleException {
 		try {
-			target.setVersion(Version.parseVersion((String) manifest.get(Constants.BUNDLE_VERSION)));
+			target.setVersion(Version.parseVersion(manifest.get(Constants.BUNDLE_VERSION)));
 		} catch (IllegalArgumentException e) {
-			target.setVersion(new InvalidVersion((String) manifest.get(Constants.BUNDLE_VERSION)));
+			target.setVersion(new InvalidVersion(manifest.get(Constants.BUNDLE_VERSION)));
 		}
-		ManifestElement[] bsnHeader = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME));
+		ManifestElement[] bsnHeader = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, manifest.get(Constants.BUNDLE_SYMBOLICNAME));
 		int bundleType = 0;
 		if (bsnHeader != null) {
 			target.setSymbolicName(bsnHeader[0].getValue());
@@ -96,11 +100,11 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 				bundleType |= BundleData.TYPE_SINGLETON;
 		}
 		// check that the classpath is valid
-		String classpath = (String) manifest.get(Constants.BUNDLE_CLASSPATH);
+		String classpath = manifest.get(Constants.BUNDLE_CLASSPATH);
 		ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, classpath);
 		target.setClassPathString(classpath);
-		target.setActivator((String) manifest.get(Constants.BUNDLE_ACTIVATOR));
-		String host = (String) manifest.get(Constants.FRAGMENT_HOST);
+		target.setActivator(manifest.get(Constants.BUNDLE_ACTIVATOR));
+		String host = manifest.get(Constants.FRAGMENT_HOST);
 		if (host != null) {
 			bundleType |= BundleData.TYPE_FRAGMENT;
 			ManifestElement[] hostElement = ManifestElement.parseHeader(Constants.FRAGMENT_HOST, host);
@@ -114,7 +118,7 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 					bundleType |= BundleData.TYPE_EXTCLASSPATH_EXTENSION;
 			}
 		} else {
-			String composite = (String) manifest.get(COMPOSITE_HEADER);
+			String composite = manifest.get(COMPOSITE_HEADER);
 			if (composite != null) {
 				if (COMPOSITE_BUNDLE.equals(composite))
 					bundleType |= BundleData.TYPE_COMPOSITEBUNDLE;
@@ -123,8 +127,8 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 			}
 		}
 		target.setType(bundleType);
-		target.setExecutionEnvironment((String) manifest.get(Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT));
-		target.setDynamicImports((String) manifest.get(Constants.DYNAMICIMPORT_PACKAGE));
+		target.setExecutionEnvironment(manifest.get(Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT));
+		target.setDynamicImports(manifest.get(Constants.DYNAMICIMPORT_PACKAGE));
 	}
 
 	public StorageHook load(BaseData target, DataInputStream in) throws IOException {
@@ -230,19 +234,19 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 		this.nativePaths = installPaths;
 	}
 
-	public void validateNativePaths(String[] nativePaths) throws BundleException {
-		for (int i = 0; i < nativePaths.length; i++) {
-			if (nativePaths[i].startsWith(EXTERNAL_LIB_PREFIX)) {
-				String path = substituteVars(nativePaths[i].substring(EXTERNAL_LIB_PREFIX.length()));
+	public void validateNativePaths(String[] paths) throws BundleException {
+		for (int i = 0; i < paths.length; i++) {
+			if (paths[i].startsWith(EXTERNAL_LIB_PREFIX)) {
+				String path = substituteVars(paths[i].substring(EXTERNAL_LIB_PREFIX.length()));
 				File nativeFile = new File(path);
 				if (!nativeFile.exists())
 					throw new BundleException(NLS.bind(AdaptorMsg.BUNDLE_NATIVECODE_EXCEPTION, nativeFile.getAbsolutePath()), BundleException.NATIVECODE_ERROR);
 				continue; // continue to next path
 			}
 			// ensure the file exists in the bundle; it will get extracted later on demand
-			BundleEntry nativeEntry = bundleData.getBundleFile().getEntry(nativePaths[i]);
+			BundleEntry nativeEntry = bundleData.getBundleFile().getEntry(paths[i]);
 			if (nativeEntry == null)
-				throw new BundleException(NLS.bind(AdaptorMsg.BUNDLE_NATIVECODE_EXCEPTION, nativePaths[i]), BundleException.NATIVECODE_ERROR);
+				throw new BundleException(NLS.bind(AdaptorMsg.BUNDLE_NATIVECODE_EXCEPTION, paths[i]), BundleException.NATIVECODE_ERROR);
 		}
 	}
 
@@ -261,7 +265,7 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 		if (dataStore == null)
 			dataStore = new File(getBundleStore(), BaseStorage.DATA_DIR_NAME);
 		if (path != null && !dataStore.exists() && (storage.isReadOnly() || !dataStore.mkdirs()))
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+			if (Debug.DEBUG_GENERAL)
 				Debug.println("Unable to create bundle data directory: " + dataStore.getPath()); //$NON-NLS-1$
 		return path == null ? dataStore : new File(dataStore, path);
 	}
@@ -298,7 +302,7 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 	File createGenerationDir() {
 		File generationDir = getGenerationDir();
 		if (!generationDir.exists() && (storage.isReadOnly() || !generationDir.mkdirs()))
-			if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+			if (Debug.DEBUG_GENERAL)
 				Debug.println("Unable to create bundle generation directory: " + generationDir.getPath()); //$NON-NLS-1$
 		return generationDir;
 	}
@@ -327,7 +331,10 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 		// do nothing
 	}
 
-	public Dictionary getManifest(boolean firstLoad) throws BundleException {
+	/**
+	 * @throws BundleException  
+	 */
+	public Dictionary<String, String> getManifest(boolean firstLoad) throws BundleException {
 		// do nothing
 		return null;
 	}
@@ -346,10 +353,16 @@ public class BaseStorageHook implements StorageHook, AdaptorHook {
 		// do nothing
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStart(BundleContext context) throws BundleException {
 		// do nothing
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStop(BundleContext context) throws BundleException {
 		// do nothing
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleInstall.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleInstall.java
index 6b52f01..82a8d13 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleInstall.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleInstall.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,7 @@ import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.Dictionary;
-import org.eclipse.osgi.baseadaptor.*;
+import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.baseadaptor.hooks.StorageHook;
 import org.eclipse.osgi.framework.adaptor.BundleData;
 import org.eclipse.osgi.framework.adaptor.BundleOperation;
@@ -79,7 +79,7 @@ public class BundleInstall implements BundleOperation {
 						AdaptorUtil.readFile(in, outFile);
 					}
 				}
-				Dictionary manifest = storage.loadManifest(data, true);
+				Dictionary<String, String> manifest = storage.loadManifest(data, true);
 				for (int i = 0; i < instanceHooks.length; i++)
 					instanceHooks[i].initialize(manifest);
 			} finally {
@@ -91,7 +91,7 @@ public class BundleInstall implements BundleOperation {
 				}
 			}
 		} catch (IOException ioe) {
-			throw new BundleException(AdaptorMsg.BUNDLE_READ_EXCEPTION, ioe);
+			throw new BundleException(AdaptorMsg.BUNDLE_READ_EXCEPTION, BundleException.READ_ERROR, ioe);
 		}
 
 		return (data);
@@ -102,7 +102,7 @@ public class BundleInstall implements BundleOperation {
 			try {
 				data.close();
 			} catch (IOException e) {
-				if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+				if (Debug.DEBUG_GENERAL)
 					Debug.println("Unable to close " + data + ": " + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		}
@@ -120,12 +120,13 @@ public class BundleInstall implements BundleOperation {
 
 	public void commit(boolean postpone) throws BundleException {
 		storage.processExtension(data, BaseStorage.EXTENSION_INSTALLED);
+		storage.updateState(data, BundleEvent.INSTALLED);
 		try {
 			data.save();
 		} catch (IOException e) {
 			throw new BundleException(AdaptorMsg.ADAPTOR_STORAGE_EXCEPTION, e);
 		}
-		storage.updateState(data, BundleEvent.INSTALLED);
+
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUninstall.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUninstall.java
index 05d1fda..83e1351 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUninstall.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUninstall.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 
 package org.eclipse.osgi.internal.baseadaptor;
 
-import java.io.*;
+import java.io.IOException;
 import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.framework.adaptor.BundleData;
 import org.eclipse.osgi.framework.adaptor.BundleOperation;
@@ -54,6 +54,12 @@ public class BundleUninstall implements BundleOperation {
 		storage.processExtension(data, BaseStorage.EXTENSION_UNINSTALLED);
 		data.setLastModified(System.currentTimeMillis());
 		storage.updateState(data, BundleEvent.UNINSTALLED);
+		data.setDirty(true);
+		try {
+			data.save();
+		} catch (IOException e) {
+			throw new BundleException(AdaptorMsg.ADAPTOR_STORAGE_EXCEPTION, e);
+		}
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUpdate.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUpdate.java
index 49470a4..732f252 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUpdate.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BundleUpdate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,7 @@ import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.Dictionary;
-import org.eclipse.osgi.baseadaptor.*;
+import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.baseadaptor.hooks.StorageHook;
 import org.eclipse.osgi.framework.adaptor.BundleData;
 import org.eclipse.osgi.framework.adaptor.BundleOperation;
@@ -88,7 +88,7 @@ public class BundleUpdate implements BundleOperation {
 						AdaptorUtil.readFile(in, outFile);
 					}
 				}
-				Dictionary manifest = storage.loadManifest(newData, true);
+				Dictionary<String, String> manifest = storage.loadManifest(newData, true);
 				for (int i = 0; i < instanceHooks.length; i++)
 					instanceHooks[i].initialize(manifest);
 			} finally {
@@ -100,7 +100,7 @@ public class BundleUpdate implements BundleOperation {
 				}
 			}
 		} catch (IOException e) {
-			throw new BundleException(AdaptorMsg.BUNDLE_READ_EXCEPTION, e);
+			throw new BundleException(AdaptorMsg.BUNDLE_READ_EXCEPTION, BundleException.READ_ERROR, e);
 		}
 
 		return (newData);
@@ -117,13 +117,13 @@ public class BundleUpdate implements BundleOperation {
 	public void commit(boolean postpone) throws BundleException {
 		storage.processExtension(data, BaseStorage.EXTENSION_UNINSTALLED); // remove the old extension
 		storage.processExtension(newData, BaseStorage.EXTENSION_UPDATED); // update to the new one
+		newData.setLastModified(System.currentTimeMillis()); // save the last modified
+		storage.updateState(newData, BundleEvent.UPDATED);
 		try {
-			newData.setLastModified(System.currentTimeMillis());
 			newData.save();
 		} catch (IOException e) {
 			throw new BundleException(AdaptorMsg.ADAPTOR_STORAGE_EXCEPTION, e);
 		}
-		storage.updateState(newData, BundleEvent.UPDATED);
 		BaseStorageHook oldStorageHook = (BaseStorageHook) data.getStorageHook(BaseStorageHook.KEY);
 		try {
 			oldStorageHook.delete(postpone, BaseStorageHook.DEL_GENERATION);
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java
index 327b7bc..6550b68 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java
@@ -17,8 +17,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.security.*;
 import java.security.cert.Certificate;
-import java.util.Collections;
-import java.util.Enumeration;
+import java.util.*;
 import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.baseadaptor.bundlefile.*;
 import org.eclipse.osgi.baseadaptor.loader.*;
@@ -45,7 +44,8 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 	private final static String CLASS_LOADER_TYPE_PARALLEL = "parallel"; //$NON-NLS-1$
 	private static final boolean CLASS_CERTIFICATE;
 	private static final boolean PARALLEL_CAPABLE;
-	private static final Enumeration EMPTY_ENUMERATION = Collections.enumeration(Collections.EMPTY_LIST);
+	@SuppressWarnings("unchecked")
+	private static final Enumeration<URL> EMPTY_ENUMERATION = Collections.enumeration(Collections.EMPTY_LIST);
 
 	static {
 		CLASS_CERTIFICATE = Boolean.valueOf(FrameworkProperties.getProperty(CLASS_CERTIFICATE_SUPPORT, "true")).booleanValue(); //$NON-NLS-1$
@@ -57,9 +57,9 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 		boolean parallelCapable = false;
 		try {
 			if (typeParallel) {
-				Method parallelCapableMetod = ClassLoader.class.getDeclaredMethod("registerAsParallelCapable", null); //$NON-NLS-1$
+				Method parallelCapableMetod = ClassLoader.class.getDeclaredMethod("registerAsParallelCapable", (Class[]) null); //$NON-NLS-1$
 				parallelCapableMetod.setAccessible(true);
-				parallelCapable = ((Boolean) parallelCapableMetod.invoke(null, null)).booleanValue();
+				parallelCapable = ((Boolean) parallelCapableMetod.invoke(null, (Object[]) null)).booleanValue();
 			}
 		} catch (Throwable e) {
 			// must do everything to avoid failing in clinit
@@ -99,18 +99,18 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 	 * @return The Class object.
 	 * @throws ClassNotFoundException if the class is not found.
 	 */
-	protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
-		if (Debug.DEBUG && Debug.DEBUG_LOADER)
+	protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+		if (Debug.DEBUG_LOADER)
 			Debug.println("BundleClassLoader[" + delegate + "].loadClass(" + name + ")"); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
 		try {
 			// Just ask the delegate.  This could result in findLocalClass(name) being called.
-			Class clazz = delegate.findClass(name);
+			Class<?> clazz = delegate.findClass(name);
 			// resolve the class if asked to.
 			if (resolve)
 				resolveClass(clazz);
 			return (clazz);
 		} catch (Error e) {
-			if (Debug.DEBUG && Debug.DEBUG_LOADER) {
+			if (Debug.DEBUG_LOADER) {
 				Debug.println("BundleClassLoader[" + delegate + "].loadClass(" + name + ") failed."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				Debug.printStackTrace(e);
 			}
@@ -118,7 +118,7 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 		} catch (ClassNotFoundException e) {
 			// If the class is not found do not try to look for it locally.
 			// The delegate would have already done that for us.
-			if (Debug.DEBUG && Debug.DEBUG_LOADER) {
+			if (Debug.DEBUG_LOADER) {
 				Debug.println("BundleClassLoader[" + delegate + "].loadClass(" + name + ") failed."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				Debug.printStackTrace(e);
 			}
@@ -136,7 +136,7 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 	 * @return The URL of the resource or null if it does not exist.
 	 */
 	public URL getResource(String name) {
-		if (Debug.DEBUG && Debug.DEBUG_LOADER) {
+		if (Debug.DEBUG_LOADER) {
 			Debug.println("BundleClassLoader[" + delegate + "].getResource(" + name + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
@@ -144,7 +144,7 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 		if (url != null)
 			return (url);
 
-		if (Debug.DEBUG && Debug.DEBUG_LOADER) {
+		if (Debug.DEBUG_LOADER) {
 			Debug.println("BundleClassLoader[" + delegate + "].getResource(" + name + ") failed."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 
@@ -158,8 +158,8 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 	 * @return An Enumeration of all resources found or null if the resource.
 	 * @throws IOException 
 	 */
-	protected Enumeration findResources(String name) throws IOException {
-		Enumeration result = delegate.findResources(name);
+	protected Enumeration<URL> findResources(String name) throws IOException {
+		Enumeration<URL> result = delegate.findResources(name);
 		if (result == null)
 			return EMPTY_ENUMERATION;
 		return result;
@@ -167,9 +167,9 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 
 	/**
 	 * Finds a library for this bundle.  Simply calls 
-	 * delegate.findLibrary(libname) to find the library.
+	 * manager.findLibrary(libname) to find the library.
 	 * @param libname The library to find.
-	 * @return The URL of the resource or null if it does not exist.
+	 * @return The absolution path to the library or null if not found
 	 */
 	protected String findLibrary(String libname) {
 		// let the manager find the library for us
@@ -184,11 +184,11 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 		return new ClasspathEntry(bundlefile, createProtectionDomain(bundlefile, cpDomain));
 	}
 
-	public Class defineClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry) {
+	public Class<?> defineClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry) {
 		return defineClass(name, classbytes, 0, classbytes.length, classpathEntry.getDomain());
 	}
 
-	public Class publicFindLoaded(String classname) {
+	public Class<?> publicFindLoaded(String classname) {
 		return findLoadedClass(classname);
 	}
 
@@ -208,11 +208,11 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 		return manager.findLocalResource(resource);
 	}
 
-	public Enumeration findLocalResources(String resource) {
+	public Enumeration<URL> findLocalResources(String resource) {
 		return manager.findLocalResources(resource);
 	}
 
-	public Class findLocalClass(String classname) throws ClassNotFoundException {
+	public Class<?> findLocalClass(String classname) throws ClassNotFoundException {
 		return manager.findLocalClass(classname);
 	}
 
@@ -234,6 +234,7 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 	 * @param baseDomain The source domain.
 	 * @return a ProtectionDomain which uses specified BundleFile and the permissions of the baseDomain 
 	 */
+	@SuppressWarnings("deprecation")
 	public static ProtectionDomain createProtectionDomain(BundleFile bundlefile, ProtectionDomain baseDomain) {
 		// create a protection domain which knows about the codesource for this classpath entry (bug 89904)
 		try {
@@ -276,4 +277,16 @@ public class DefaultClassLoader extends ClassLoader implements ParallelClassLoad
 	public boolean isParallelCapable() {
 		return PARALLEL_CAPABLE;
 	}
+
+	public List<URL> findEntries(String path, String filePattern, int options) {
+		return manager.findEntries(path, filePattern, options);
+	}
+
+	public Collection<String> listResources(String path, String filePattern, int options) {
+		return delegate.listResources(path, filePattern, options);
+	}
+
+	public Collection<String> listLocalResources(String path, String filePattern, int options) {
+		return manager.listLocalResources(path, filePattern, options);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassLoadingHook.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassLoadingHook.java
index e008b5a..37da1e6 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassLoadingHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassLoadingHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,13 +33,13 @@ public class DevClassLoadingHook implements ClassLoadingHook, HookConfigurator,
 		return null;
 	}
 
-	public boolean addClassPathEntry(ArrayList cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain) {
+	public boolean addClassPathEntry(ArrayList<ClasspathEntry> cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain) {
 		// first check that we are in devmode for this sourcedata
 		String[] devClassPath = !DevClassPathHelper.inDevelopmentMode() ? null : DevClassPathHelper.getDevClassPath(sourcedata.getSymbolicName());
 		if (devClassPath == null || devClassPath.length == 0)
 			return false; // not in dev mode return
 		// check that dev classpath entries have not already been added; we mark this in the first entry below
-		if (cpEntries.size() > 0 && ((ClasspathEntry) cpEntries.get(0)).getUserObject(KEY) != null)
+		if (cpEntries.size() > 0 && cpEntries.get(0).getUserObject(KEY) != null)
 			return false; // this source has already had its dev classpath entries added.
 		boolean result = false;
 		for (int i = 0; i < devClassPath.length; i++) {
@@ -65,7 +65,7 @@ public class DevClassLoadingHook implements ClassLoadingHook, HookConfigurator,
 		// mark the first entry of the list.  
 		// This way we can quickly tell that dev classpath entries have been added to the list
 		if (result && cpEntries.size() > 0)
-			((ClasspathEntry) cpEntries.get(0)).addUserObject(this);
+			cpEntries.get(0).addUserObject(this);
 		return result;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassPathHelper.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassPathHelper.java
index de565ab..274c076 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassPathHelper.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DevClassPathHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,11 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.baseadaptor;
 
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.*;
+import java.util.Dictionary;
+import java.util.Properties;
 import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.util.ManifestElement;
 
@@ -23,30 +23,65 @@ import org.eclipse.osgi.util.ManifestElement;
  * @since 3.1
  */
 public final class DevClassPathHelper {
-	static private boolean inDevelopmentMode = false;
+	static final private String FILE_PROTOCOL = "file"; //$NON-NLS-1$
+	static final private boolean inDevelopmentMode;
+	static final private File devLocation;
 	static private String[] devDefaultClasspath;
-	static private Dictionary devProperties = null;
+	static private Dictionary<String, String> devProperties = null;
+	// timestamp for the dev.properties file
+	static private long lastModified = 0;
 
 	static {
-		// Check the osgi.dev property to see if dev classpath entries have been defined.
 		String osgiDev = FrameworkProperties.getProperty("osgi.dev"); //$NON-NLS-1$
+		File f = null;
+		boolean devMode = false;
 		if (osgiDev != null) {
 			try {
-				inDevelopmentMode = true;
+				devMode = true;
 				URL location = new URL(osgiDev);
-				devProperties = load(location);
-				if (devProperties != null)
-					devDefaultClasspath = getArrayFromList((String) devProperties.get("*")); //$NON-NLS-1$
+
+				if (FILE_PROTOCOL.equals(location.getProtocol())) {
+					f = new File(location.getFile());
+					lastModified = f.lastModified();
+				}
+
+				// Check the osgi.dev property to see if dev classpath entries have been defined.
+				try {
+					load(location.openStream());
+					devMode = true;
+				} catch (IOException e) {
+					// TODO consider logging
+				}
+
 			} catch (MalformedURLException e) {
 				devDefaultClasspath = getArrayFromList(osgiDev);
 			}
 		}
+		inDevelopmentMode = devMode;
+		devLocation = f;
+	}
+
+	/*
+	 * Updates the dev classpath if the file containing the entries have changed
+	 */
+	private static void updateDevProperties() {
+		if (devLocation == null)
+			return;
+		if (devLocation.lastModified() == lastModified)
+			return;
+
+		try {
+			load(new FileInputStream(devLocation));
+		} catch (FileNotFoundException e) {
+			return;
+		}
+		lastModified = devLocation.lastModified();
 	}
 
-	private static String[] getDevClassPath(String id, Dictionary properties, String[] defaultClasspath) {
+	private static String[] getDevClassPath(String id, Dictionary<String, String> properties, String[] defaultClasspath) {
 		String[] result = null;
 		if (id != null && properties != null) {
-			String entry = (String) properties.get(id);
+			String entry = properties.get(id);
 			if (entry != null)
 				result = getArrayFromList(entry);
 		}
@@ -62,10 +97,14 @@ public final class DevClassPathHelper {
 	 * the default develoment classpath properties should be used
 	 * @return a list of development classpath elements
 	 */
-	public static String[] getDevClassPath(String id, Dictionary properties) {
-		if (properties == null)
-			return getDevClassPath(id, devProperties, devDefaultClasspath);
-		return getDevClassPath(id, properties, getArrayFromList((String) properties.get("*"))); //$NON-NLS-1$
+	public static String[] getDevClassPath(String id, Dictionary<String, String> properties) {
+		if (properties == null) {
+			synchronized (DevClassPathHelper.class) {
+				updateDevProperties();
+				return getDevClassPath(id, devProperties, devDefaultClasspath);
+			}
+		}
+		return getDevClassPath(id, properties, getArrayFromList(properties.get("*"))); //$NON-NLS-1$
 	}
 
 	/**
@@ -96,22 +135,26 @@ public final class DevClassPathHelper {
 	}
 
 	/*
-	 * Load the given properties file
+	 * Load the given input stream into a dictionary
 	 */
-	private static Properties load(URL url) {
+	private static void load(InputStream input) {
 		Properties props = new Properties();
 		try {
-			InputStream is = null;
-			try {
-				is = url.openStream();
-				props.load(is);
-			} finally {
-				if (is != null)
-					is.close();
-			}
+			props.load(input);
 		} catch (IOException e) {
 			// TODO consider logging here
+		} finally {
+			if (input != null)
+				try {
+					input.close();
+				} catch (IOException e) {
+					// tried our best
+				}
 		}
-		return props;
+		@SuppressWarnings({"unchecked", "rawtypes"})
+		Dictionary<String, String> result = (Dictionary) props;
+		devProperties = result;
+		if (devProperties != null)
+			devDefaultClasspath = getArrayFromList(devProperties.get("*")); //$NON-NLS-1$
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/ExternalMessages.properties b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/ExternalMessages.properties
index d83e889..13f045f 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/ExternalMessages.properties
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/ExternalMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2010 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -17,10 +17,7 @@ ADAPTOR_STORAGE_INIT_FAILED_TITLE =Invalid Configuration Location
 ADAPTOR_URL_CREATE_EXCEPTION=\"{0}\" is an invalid URL
 ADAPTOR_DIRECTORY_CREATE_EXCEPTION=The directory \"{0}\" could not be created
 ADAPTOR_DIRECTORY_EXCEPTION=The file \"{0}\" is not a directory
-ADAPTOR_DIRECTORY_REMOVE_EXCEPTION=The directory \"{0}\" could not be removed
 ADAPTER_FILEEXIST_EXCEPTION=The file \"{0}\" does not exist
-ADAPTOR_ERROR_GETTING_MANIFEST=An error occurred trying to read the manifest in bundle {0}
-ADAPTOR_DATA_AREA_NOT_SET=Instance data location not set yet
 ADAPTOR_EXTENSION_NATIVECODE_ERROR=Extension bundle fragments cannot specify a Bundle-NativeCode header: {0}
 ADAPTOR_EXTENSION_REQUIRE_ERROR=Extension bundle fragments cannot specify a Require-Bundle header: {0}
 ADAPTOR_EXTENSION_IMPORT_ERROR=Extension bundle fragments cannot specify an Import-Package header: {0}
@@ -29,7 +26,6 @@ SYSTEMBUNDLE_MISSING_MANIFEST = Unable to find system bundle manifest file.
 SYSTEMBUNDLE_NOTRESOLVED = The System Bundle could not be resolved: {0}
 BUNDLE_READ_EXCEPTION=An error occurred trying to read the bundle
 BUNDLE_NATIVECODE_EXCEPTION=The Bundle-NativeCode file {0} could not be found
-BUNDLE_CLASSPATH_PROPERTIES_ERROR=An error occurred while reading the classpath properties file: {0}
 BUNDLE_CLASSPATH_ENTRY_NOT_FOUND_EXCEPTION=The bundle class path entry \"{0}\" could not be found for the bundle \"{1}\"
 MANIFEST_NOT_FOUND_EXCEPTION=The manifest file {0} could not be found in the bundle {1}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java
index c61c6c5..a927c69 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/StateManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,6 @@ package org.eclipse.osgi.internal.baseadaptor;
 import java.io.File;
 import java.io.IOException;
 import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
-import org.eclipse.osgi.internal.loader.BundleLoader;
-import org.eclipse.osgi.internal.loader.BundleLoaderProxy;
 import org.eclipse.osgi.internal.resolver.*;
 import org.eclipse.osgi.service.resolver.*;
 import org.osgi.framework.BundleContext;
@@ -99,57 +97,36 @@ public class StateManager implements PlatformAdmin, Runnable {
 
 	/**
 	 * Shutsdown the state manager.  If the timestamp of the system state has changed
-	 * @param stateFile
-	 * @param lazyFile
+	 * @param saveStateFile
+	 * @param saveLazyFile
 	 * @throws IOException
 	 */
-	public void shutdown(File stateFile, File lazyFile) throws IOException {
-		BundleDescription[] removalPendings = systemState.getRemovalPendings();
-		cleanRemovalPendings(removalPendings);
-		writeState(systemState, stateFile, lazyFile);
+	public void shutdown(File saveStateFile, File saveLazyFile) throws IOException {
+		writeState(systemState, saveStateFile, saveLazyFile);
 		stopDataManager();
 	}
 
-	private void cleanRemovalPendings(BundleDescription[] removalPendings) {
-		if (removalPendings.length == 0)
-			return;
-		systemState.resolve(removalPendings);
-		for (int i = 0; i < removalPendings.length; i++) {
-			Object userObject = removalPendings[i].getUserObject();
-			if (userObject instanceof BundleLoaderProxy)
-				BundleLoader.closeBundleLoader((BundleLoaderProxy) userObject);
-		}
-	}
-
 	/**
 	 * Update the given target files with the state data in memory.
-	 * @param stateFile
-	 * @param lazyFile
+	 * @param updateStateFile
+	 * @param updateLazyFile
 	 * @throws IOException
 	 */
-	public void update(File stateFile, File lazyFile) throws IOException {
-		BundleDescription[] removalPendings = systemState.getRemovalPendings();
-		StateImpl state = systemState;
-		if (removalPendings.length > 0) {
-			state = (StateImpl) state.getFactory().createState(systemState);
-			state.setResolver(createResolver(System.getSecurityManager() != null));
-			state.setPlatformProperties(FrameworkProperties.getProperties());
-			state.resolve(false);
-		}
-		writeState(state, stateFile, lazyFile);
+	public void update(File updateStateFile, File updateLazyFile) throws IOException {
+		writeState(systemState, updateStateFile, updateLazyFile);
 		// Need to use the timestamp of the original state here
 		lastTimeStamp = systemState.getTimeStamp();
 		// TODO consider updating the state files for lazy loading
 	}
 
-	private void readSystemState(File stateFile, File lazyFile, long expectedTimeStamp) {
+	private void internalReadSystemState() {
 		if (stateFile == null || !stateFile.isFile())
 			return;
 		if (DEBUG_READER)
 			readStartupTime = System.currentTimeMillis();
 		try {
 			boolean lazyLoad = !Boolean.valueOf(FrameworkProperties.getProperty(PROP_NO_LAZY_LOADING)).booleanValue();
-			systemState = factory.readSystemState(stateFile, lazyFile, lazyLoad, expectedTimeStamp);
+			systemState = factory.readSystemState(context, stateFile, lazyFile, lazyLoad, expectedTimeStamp);
 			// problems in the cache (corrupted/stale), don't create a state object
 			if (systemState == null || !initializeSystemState()) {
 				systemState = null;
@@ -192,13 +169,13 @@ public class StateManager implements PlatformAdmin, Runnable {
 		dataManagerThread = null;
 	}
 
-	private void writeState(StateImpl state, File stateFile, File lazyFile) throws IOException {
+	private void writeState(StateImpl state, File saveStateFile, File saveLazyFile) throws IOException {
 		if (state == null)
 			return;
 		if (cachedState && !saveNeeded())
 			return;
 		state.fullyLoad(); // make sure we are fully loaded before saving
-		factory.writeState(state, stateFile, lazyFile);
+		factory.writeState(state, saveStateFile, saveLazyFile);
 	}
 
 	private boolean initializeSystemState() {
@@ -214,7 +191,7 @@ public class StateManager implements PlatformAdmin, Runnable {
 	 */
 	public synchronized State createSystemState() {
 		if (systemState == null) {
-			systemState = factory.createSystemState();
+			systemState = factory.createSystemState(context);
 			initializeSystemState();
 		}
 		return systemState;
@@ -229,7 +206,7 @@ public class StateManager implements PlatformAdmin, Runnable {
 	 */
 	public synchronized State readSystemState() {
 		if (systemState == null)
-			readSystemState(stateFile, lazyFile, expectedTimeStamp);
+			internalReadSystemState();
 		return systemState;
 	}
 
@@ -280,6 +257,7 @@ public class StateManager implements PlatformAdmin, Runnable {
 	}
 
 	/**
+	 * @throws BundleException 
 	 * @see PlatformAdmin#commit(State)
 	 */
 	public synchronized void commit(State state) throws BundleException {
@@ -302,7 +280,7 @@ public class StateManager implements PlatformAdmin, Runnable {
 	}
 
 	private Resolver createResolver(boolean checkPermissions) {
-		return new org.eclipse.osgi.internal.module.ResolverImpl(context, checkPermissions);
+		return new org.eclipse.osgi.internal.module.ResolverImpl(checkPermissions);
 	}
 
 	/**
@@ -322,8 +300,8 @@ public class StateManager implements PlatformAdmin, Runnable {
 			}
 			if (systemState != null)
 				synchronized (systemState) {
-					if (timeStamp == systemState.getTimeStamp() && !systemState.dynamicCacheChanged())
-						systemState.unloadLazyData();
+					if (!systemState.unloadLazyData(timeStamp))
+						return;
 				}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/SystemBundleData.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/SystemBundleData.java
index 7148b0b..9604b59 100644
--- a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/SystemBundleData.java
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/SystemBundleData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,23 +45,21 @@ public class SystemBundleData extends BaseData {
 
 	private File getOsgiBase() {
 		String frameworkLocation = FrameworkProperties.getProperty(SystemBundleData.OSGI_FRAMEWORK);
-		if (frameworkLocation != null)
+		if (frameworkLocation != null && frameworkLocation.startsWith("file:")) //$NON-NLS-1$
 			// TODO assumes the location is a file URL
 			return new File(frameworkLocation.substring(5));
 		try {
 			URL url = getClass().getProtectionDomain().getCodeSource().getLocation();
 			// assumes file URL
-			return new File(url.getPath());
+			if ("file".equals(url.getProtocol())) //$NON-NLS-1$
+				return new File(url.getPath());
 		} catch (Throwable e) {
 			// do nothing
 		}
-		frameworkLocation = FrameworkProperties.getProperty("user.dir"); //$NON-NLS-1$
-		if (frameworkLocation != null)
-			return new File(frameworkLocation);
 		return null;
 	}
 
-	private Headers createManifest(File osgiBase) throws BundleException {
+	private Headers<String, String> createManifest(File osgiBase) throws BundleException {
 		InputStream in = null;
 
 		if (osgiBase != null && osgiBase.exists())
@@ -78,7 +76,7 @@ public class SystemBundleData extends BaseData {
 		// This allows an adaptor to package the SYSTEMBUNDLE.MF file in a jar.
 		if (in == null)
 			in = getManifestAsResource();
-		if (Debug.DEBUG && Debug.DEBUG_GENERAL)
+		if (Debug.DEBUG_GENERAL)
 			if (in == null)
 				Debug.println("Unable to find system bundle manifest " + Constants.OSGI_BUNDLE_MANIFEST); //$NON-NLS-1$
 
@@ -88,17 +86,26 @@ public class SystemBundleData extends BaseData {
 	}
 
 	private InputStream getManifestAsResource() {
+		URL url = getManifestURL();
+		try {
+			return url == null ? null : url.openStream();
+		} catch (IOException e) {
+			return null;
+		}
+	}
+
+	private URL getManifestURL() {
 		ClassLoader cl = getClass().getClassLoader();
 		try {
 			// get all manifests in your classloader delegation
-			Enumeration manifests = cl != null ? cl.getResources(Constants.OSGI_BUNDLE_MANIFEST) : ClassLoader.getSystemResources(Constants.OSGI_BUNDLE_MANIFEST);
+			Enumeration<URL> manifests = cl != null ? cl.getResources(Constants.OSGI_BUNDLE_MANIFEST) : ClassLoader.getSystemResources(Constants.OSGI_BUNDLE_MANIFEST);
 			while (manifests.hasMoreElements()) {
-				URL url = (URL) manifests.nextElement();
+				URL url = manifests.nextElement();
 				try {
 					// check each manifest until we find one with the Eclipse-SystemBundle: true header
-					Headers headers = Headers.parseManifest(url.openStream());
+					Headers<String, String> headers = Headers.parseManifest(url.openStream());
 					if ("true".equals(headers.get(Constants.ECLIPSE_SYSTEMBUNDLE))) //$NON-NLS-1$
-						return url.openStream();
+						return url;
 				} catch (BundleException e) {
 					// ignore and continue to next URL
 				}
@@ -123,10 +130,39 @@ public class SystemBundleData extends BaseData {
 				}
 
 				public BundleEntry getEntry(String path) {
+					if (Constants.OSGI_BUNDLE_MANIFEST.equals(path)) {
+						System.err.println("Getting system bundle manifest: " + path);
+						return new BundleEntry() {
+
+							public InputStream getInputStream() throws IOException {
+								return getManifestURL().openStream();
+							}
+
+							public long getSize() {
+								return 0;
+							}
+
+							public String getName() {
+								return Constants.OSGI_BUNDLE_MANIFEST;
+							}
+
+							public long getTime() {
+								return 0;
+							}
+
+							public URL getLocalURL() {
+								return getManifestURL();
+							}
+
+							public URL getFileURL() {
+								return null;
+							}
+						};
+					}
 					return null;
 				}
 
-				public Enumeration getEntryPaths(String path) {
+				public Enumeration<String> getEntryPaths(String path) {
 					return null;
 				}
 
@@ -161,6 +197,9 @@ public class SystemBundleData extends BaseData {
 		return null;
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void installNativeCode(String[] nativepaths) throws BundleException {
 		// do nothing
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/DynamicImportList.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/DynamicImportList.java
new file mode 100644
index 0000000..789beae
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/DynamicImportList.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.internal.baseadaptor.weaving;
+
+import java.util.*;
+import org.eclipse.osgi.internal.resolver.StateBuilder;
+import org.eclipse.osgi.service.resolver.ImportPackageSpecification;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.Constants;
+
+/**
+ * A list of DynamicImport-Package statements that are to be used for adding new 
+ * dynamic imports to a bundle class loader.
+ *
+ */
+public class DynamicImportList extends AbstractList<String> implements RandomAccess {
+	// the collection of valid DynamicImport-Package statments.
+	private final List<String> imports = new ArrayList<String>(0);
+	private final WovenClassImpl wovenClass;
+
+	public DynamicImportList(WovenClassImpl wovenClass) {
+		super();
+		this.wovenClass = wovenClass;
+	}
+
+	@Override
+	public String get(int index) {
+		return imports.get(index);
+	}
+
+	@Override
+	public int size() {
+		return imports.size();
+	}
+
+	@Override
+	public String set(int index, String element) {
+		wovenClass.checkPermission();
+		validateSyntax(element);
+		return imports.set(index, element);
+	}
+
+	@Override
+	public void add(int index, String element) {
+		wovenClass.checkPermission();
+		validateSyntax(element);
+		imports.add(index, element);
+	}
+
+	@Override
+	public String remove(int index) {
+		wovenClass.checkPermission();
+		return imports.remove(index);
+	}
+
+	private void validateSyntax(String imported) {
+		// validate the syntax of imports that are added.
+		ManifestElement[] importElements;
+		try {
+			importElements = ManifestElement.parseHeader(Constants.IMPORT_PACKAGE, imported);
+
+			// validate the syntax is correct
+			StateBuilder.checkImportExportSyntax(Constants.IMPORT_PACKAGE, importElements, false, false, false);
+			// validate we can create an import spec out of it.
+			List<ImportPackageSpecification> dynamicImportSpecs = new ArrayList<ImportPackageSpecification>(importElements.length);
+			for (ManifestElement dynamicImportElement : importElements)
+				StateBuilder.addImportPackages(dynamicImportElement, dynamicImportSpecs, 2, true);
+		} catch (Throwable t) {
+			IllegalArgumentException exception = new IllegalArgumentException();
+			exception.initCause(t);
+			throw exception;
+		}
+		return;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/WeavingHookConfigurator.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/WeavingHookConfigurator.java
new file mode 100644
index 0000000..78b8f44
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/WeavingHookConfigurator.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.internal.baseadaptor.weaving;
+
+import java.net.URL;
+import java.security.ProtectionDomain;
+import java.util.*;
+import org.eclipse.osgi.baseadaptor.*;
+import org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry;
+import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingHook;
+import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingStatsHook;
+import org.eclipse.osgi.baseadaptor.loader.*;
+import org.eclipse.osgi.framework.adaptor.BundleProtectionDomain;
+import org.eclipse.osgi.framework.adaptor.ClassLoaderDelegate;
+import org.eclipse.osgi.framework.internal.core.Framework;
+import org.eclipse.osgi.internal.loader.BundleLoader;
+import org.eclipse.osgi.internal.serviceregistry.ServiceRegistry;
+import org.osgi.framework.*;
+
+public class WeavingHookConfigurator implements HookConfigurator, ClassLoadingHook, ClassLoadingStatsHook {
+	private BaseAdaptor adaptor;
+	// holds the map of black listed hooks.  Use weak map to avoid pinning and simplify cleanup.
+	private final Map<ServiceRegistration<?>, Boolean> blackList = Collections.synchronizedMap(new WeakHashMap<ServiceRegistration<?>, Boolean>());
+	// holds the stack of WovenClass objects currently being used to define classes
+	private final ThreadLocal<List<WovenClassImpl>> wovenClassStack = new ThreadLocal<List<WovenClassImpl>>();
+
+	public void addHooks(HookRegistry hookRegistry) {
+		this.adaptor = hookRegistry.getAdaptor();
+		hookRegistry.addClassLoadingHook(this);
+		hookRegistry.addClassLoadingStatsHook(this);
+	}
+
+	private ServiceRegistry getRegistry() {
+		return ((Framework) adaptor.getEventPublisher()).getServiceRegistry();
+	}
+
+	public byte[] processClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
+		ServiceRegistry registry = getRegistry();
+		if (registry == null)
+			return null; // no registry somehow we are loading classes before the registry has been created
+		ClassLoaderDelegate delegate = manager.getBaseClassLoader().getDelegate();
+		BundleLoader loader;
+		if (delegate instanceof BundleLoader) {
+			loader = (BundleLoader) delegate;
+		} else {
+			Throwable e = new IllegalStateException("Could not obtain loader"); //$NON-NLS-1$
+			adaptor.getEventPublisher().publishFrameworkEvent(FrameworkEvent.ERROR, manager.getBaseData().getBundle(), e);
+			return null;
+		}
+		// create a woven class object and add it to the thread local stack
+		WovenClassImpl wovenClass = new WovenClassImpl(name, classbytes, classpathEntry.getDomain(), loader, registry, blackList);
+		List<WovenClassImpl> wovenClasses = wovenClassStack.get();
+		if (wovenClasses == null) {
+			wovenClasses = new ArrayList<WovenClassImpl>(6);
+			wovenClassStack.set(wovenClasses);
+		}
+		wovenClasses.add(wovenClass);
+		// call the weaving hooks
+		try {
+			return wovenClass.callHooks();
+		} catch (Throwable t) {
+			ServiceRegistration<?> errorHook = wovenClass.getErrorHook();
+			Bundle errorBundle = errorHook != null ? errorHook.getReference().getBundle() : manager.getBaseData().getBundle();
+			adaptor.getEventPublisher().publishFrameworkEvent(FrameworkEvent.ERROR, errorBundle, t);
+			// fail hard with a class loading error
+			ClassFormatError error = new ClassFormatError("Unexpected error from weaving hook."); //$NON-NLS-1$
+			error.initCause(t);
+			throw error;
+		} finally {
+			// ensure we always tell the woven class that we are done calling hooks.
+			wovenClass.setHooksComplete();
+		}
+	}
+
+	public boolean addClassPathEntry(ArrayList<ClasspathEntry> cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain) {
+		return false;
+	}
+
+	public String findLibrary(BaseData data, String libName) {
+		return null;
+	}
+
+	public ClassLoader getBundleClassLoaderParent() {
+		return null;
+	}
+
+	public BaseClassLoader createClassLoader(ClassLoader parent, ClassLoaderDelegate delegate, BundleProtectionDomain domain, BaseData data, String[] bundleclasspath) {
+		return null;
+	}
+
+	public void initializedClassLoader(BaseClassLoader baseClassLoader, BaseData data) {
+		// nothing
+	}
+
+	public void preFindLocalClass(String name, ClasspathManager manager) {
+		// nothing
+	}
+
+	public void postFindLocalClass(String name, Class<?> clazz, ClasspathManager manager) {
+		// nothing
+	}
+
+	public void preFindLocalResource(String name, ClasspathManager manager) {
+		// nothing
+	}
+
+	public void postFindLocalResource(String name, URL resource, ClasspathManager manager) {
+		// nothing
+	}
+
+	public void recordClassDefine(String name, Class<?> clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
+		// here we assume the stack contans a woven class with the same name as the class we are defining.
+		List<WovenClassImpl> wovenClasses = wovenClassStack.get();
+		if (wovenClasses == null || wovenClasses.size() == 0)
+			return;
+		WovenClassImpl wovenClass = wovenClasses.remove(wovenClasses.size() - 1);
+		// inform the woven class about the class that was defined.
+		wovenClass.setWeavingCompleted(clazz);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/WovenClassImpl.java b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/WovenClassImpl.java
new file mode 100644
index 0000000..12f2a4b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/weaving/WovenClassImpl.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.internal.baseadaptor.weaving;
+
+import java.security.*;
+import java.util.*;
+import org.eclipse.osgi.internal.loader.BundleLoader;
+import org.eclipse.osgi.internal.serviceregistry.HookContext;
+import org.eclipse.osgi.internal.serviceregistry.ServiceRegistry;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.*;
+import org.osgi.framework.hooks.weaving.*;
+import org.osgi.framework.wiring.BundleWiring;
+
+public final class WovenClassImpl implements WovenClass, HookContext {
+	private final static byte FLAG_HOOKCALLED = 0x01;
+	private final static byte FLAG_HOOKSCOMPLETE = 0x02;
+	private final static byte FLAG_WEAVINGCOMPLETE = 0x04;
+	private final static String weavingHookName = WeavingHook.class.getName();
+	private final String className;
+	private final List<String> dynamicImports;
+	private final ProtectionDomain domain;
+	private final BundleLoader loader;
+	final ServiceRegistry registry;
+	private final Map<ServiceRegistration<?>, Boolean> blackList;
+	private byte[] bytes;
+	private byte hookFlags = 0;
+	private Throwable error;
+	private ServiceRegistration<?> errorHook;
+	private Class<?> clazz;
+
+	public WovenClassImpl(String className, byte[] bytes, ProtectionDomain domain, BundleLoader loader, ServiceRegistry registry, Map<ServiceRegistration<?>, Boolean> blacklist) {
+		super();
+		this.className = className;
+		this.bytes = bytes;
+		this.dynamicImports = new DynamicImportList(this);
+		this.domain = domain;
+		this.loader = loader;
+		this.registry = registry;
+		this.blackList = blacklist;
+	}
+
+	public byte[] getBytes() {
+		if ((hookFlags & FLAG_HOOKSCOMPLETE) == 0) {
+			checkPermission();
+			return bytes; // return raw bytes until complete
+		}
+		// we have called all hooks; someone is calling outside of weave call
+		// need to be safe and copy the bytes.
+		byte[] current = bytes;
+		byte[] results = new byte[current.length];
+		System.arraycopy(bytes, 0, results, 0, current.length);
+		return results;
+	}
+
+	public void setBytes(byte[] newBytes) {
+		checkPermission();
+		if (newBytes == null)
+			throw new NullPointerException("newBytes cannot be null."); //$NON-NLS-1$
+		if ((hookFlags & FLAG_HOOKSCOMPLETE) != 0)
+			// someone is calling this outside of weave
+			throw new IllegalStateException("Weaving has completed already."); //$NON-NLS-1$
+		this.bytes = newBytes;
+	}
+
+	void checkPermission() {
+		SecurityManager sm = System.getSecurityManager();
+		if (sm != null)
+			sm.checkPermission(new AdminPermission(loader.getBundle(), AdminPermission.WEAVE));
+	}
+
+	public List<String> getDynamicImports() {
+		if ((hookFlags & FLAG_HOOKSCOMPLETE) == 0)
+			return dynamicImports;
+		// being called outside of weave; return unmodified list
+		return Collections.unmodifiableList(dynamicImports);
+	}
+
+	public boolean isWeavingComplete() {
+		return (hookFlags & FLAG_WEAVINGCOMPLETE) != 0;
+	}
+
+	void setHooksComplete() {
+		// create a copy of the bytes array that noone has a reference to
+		byte[] original = bytes;
+		bytes = new byte[bytes.length];
+		System.arraycopy(original, 0, bytes, 0, original.length);
+		hookFlags |= FLAG_HOOKSCOMPLETE;
+	}
+
+	void setWeavingCompleted(Class<?> clazz) {
+		// weaving has completed; save the class and mark complete
+		this.clazz = clazz;
+		hookFlags |= FLAG_WEAVINGCOMPLETE;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public ProtectionDomain getProtectionDomain() {
+		return domain;
+	}
+
+	public Class<?> getDefinedClass() {
+		return clazz;
+	}
+
+	public BundleWiring getBundleWiring() {
+		return loader.getLoaderProxy().getBundleDescription().getWiring();
+	}
+
+	public void call(final Object hook, ServiceRegistration<?> hookRegistration) throws Exception {
+		if (error != null)
+			return; // do not call any other hooks once an error has occurred.
+		if (hook instanceof WeavingHook) {
+			if (blackList.containsKey(hookRegistration))
+				return; // black listed hook
+			hookFlags |= FLAG_HOOKCALLED;
+			try {
+				((WeavingHook) hook).weave(this);
+			} catch (WeavingException e) {
+				error = e;
+				errorHook = hookRegistration;
+				// do not blacklist on weaving exceptions
+			} catch (Throwable t) {
+				error = t; // save the error to fail later
+				errorHook = hookRegistration;
+				// put the registration on the black list
+				blackList.put(hookRegistration, Boolean.TRUE);
+			}
+		}
+	}
+
+	public String getHookMethodName() {
+		return "weave"; //$NON-NLS-1$
+	}
+
+	public String getHookClassName() {
+		return weavingHookName;
+	}
+
+	byte[] callHooks() throws Throwable {
+		SecurityManager sm = System.getSecurityManager();
+		if (sm == null) {
+			registry.notifyHooksPrivileged(this);
+		} else {
+			try {
+				AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
+					public Object run() {
+						registry.notifyHooksPrivileged(WovenClassImpl.this);
+						return null;
+					}
+				});
+			} catch (PrivilegedActionException e) {
+				throw (RuntimeException) e.getException();
+			}
+		}
+		if ((hookFlags & FLAG_HOOKCALLED) == 0)
+			return null; // we never handed this object to a hook; nothing else to do
+
+		byte[] wovenBytes = bytes;
+		List<String> newImports = dynamicImports;
+
+		setHooksComplete();
+		if (error != null)
+			throw error;
+
+		if (newImports.size() > 0) {
+			// add any new dynamic imports
+			for (String newImport : newImports) {
+				try {
+					ManifestElement[] importElements = ManifestElement.parseHeader(Constants.IMPORT_PACKAGE, newImport);
+					loader.addDynamicImportPackage(importElements);
+				} catch (BundleException e) {
+					// should not have happened; checked at add.
+				}
+			}
+		}
+		return wovenBytes;
+	}
+
+	public String toString() {
+		return className;
+	}
+
+	public ServiceRegistration<?> getErrorHook() {
+		return errorHook;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseLog.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseLog.java
deleted file mode 100644
index 65e8f76..0000000
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseLog.java
+++ /dev/null
@@ -1,690 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.adaptor;
-
-import java.io.*;
-import java.lang.reflect.InvocationTargetException;
-import java.security.AccessController;
-import java.util.Calendar;
-import java.util.Date;
-import org.eclipse.core.runtime.internal.adaptor.EclipseEnvironmentInfo;
-import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
-import org.eclipse.osgi.framework.log.FrameworkLog;
-import org.eclipse.osgi.framework.log.FrameworkLogEntry;
-import org.eclipse.osgi.framework.util.SecureAction;
-import org.osgi.framework.*;
-
-/**
- * The FrameworkLog implementation for Eclipse.
- * <p>
- * Clients may extend this class.
- * </p>
- * @since 3.1
- */
-public class EclipseLog implements FrameworkLog {
-	private static final String PASSWORD = "-password"; //$NON-NLS-1$	
-	/** The session tag */
-	protected static final String SESSION = "!SESSION"; //$NON-NLS-1$
-	/** The entry tag */
-	protected static final String ENTRY = "!ENTRY"; //$NON-NLS-1$
-	/** The sub-entry tag */
-	protected static final String SUBENTRY = "!SUBENTRY"; //$NON-NLS-1$
-	/** The message tag */
-	protected static final String MESSAGE = "!MESSAGE"; //$NON-NLS-1$
-	/** The stacktrace tag */
-	protected static final String STACK = "!STACK"; //$NON-NLS-1$
-
-	/** The line separator used in the log output */
-	protected static final String LINE_SEPARATOR;
-	/** The tab character used in the log output */
-	protected static final String TAB_STRING = "\t"; //$NON-NLS-1$
-
-	//Constants for rotating log file
-	/** The default size a log file can grow before it is rotated */
-	public static final int DEFAULT_LOG_SIZE = 1000;
-	/** The default number of backup log files */
-	public static final int DEFAULT_LOG_FILES = 10;
-	/** The minimum size limit for log rotation */
-	public static final int LOG_SIZE_MIN = 10;
-
-	/** The system property used to specify the log level */
-	public static final String PROP_LOG_LEVEL = "eclipse.log.level"; //$NON-NLS-1$
-	/** The system property used to specify size a log file can grow before it is rotated */
-	public static final String PROP_LOG_SIZE_MAX = "eclipse.log.size.max"; //$NON-NLS-1$
-	/** The system property used to specify the maximim number of backup log files to use */
-	public static final String PROP_LOG_FILE_MAX = "eclipse.log.backup.max"; //$NON-NLS-1$
-	/** The extension used for log files */
-	public static final String LOG_EXT = ".log"; //$NON-NLS-1$
-	/** The extension markup to use for backup log files*/
-	public static final String BACKUP_MARK = ".bak_"; //$NON-NLS-1$
-
-	static {
-		String s = System.getProperty("line.separator"); //$NON-NLS-1$
-		LINE_SEPARATOR = s == null ? "\n" : s; //$NON-NLS-1$
-	}
-	private static final SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
-
-	/** Indicates if the console messages should be printed to the console (System.out) */
-	protected boolean consoleLog = false;
-	/** Indicates if the next log message is part of a new session */
-	protected boolean newSession = true;
-	/**
-	 * The File object to store messages.  This value may be null.
-	 */
-	protected File outFile;
-
-	/**
-	 * The Writer to log messages to.
-	 */
-	protected Writer writer;
-
-	int maxLogSize = DEFAULT_LOG_SIZE; // The value is in KB.
-	int maxLogFiles = DEFAULT_LOG_FILES;
-	int backupIdx = 0;
-
-	private int logLevel = FrameworkLogEntry.OK;
-
-	/**
-	 * Constructs an EclipseLog which uses the specified File to log messages to
-	 * @param outFile a file to log messages to
-	 */
-	public EclipseLog(File outFile) {
-		this.outFile = outFile;
-		this.writer = null;
-		readLogProperties();
-	}
-
-	/**
-	 * Constructs an EclipseLog which uses the specified Writer to log messages to
-	 * @param writer a writer to log messages to
-	 */
-	public EclipseLog(Writer writer) {
-		if (writer == null)
-			// log to System.err by default
-			this.writer = logForStream(System.err);
-		else
-			this.writer = writer;
-	}
-
-	/**
-	 * Constructs an EclipseLog which uses System.err to write log messages to
-	 *
-	 */
-	public EclipseLog() {
-		this((Writer) null);
-	}
-
-	private Throwable getRoot(Throwable t) {
-		Throwable root = null;
-		if (t instanceof BundleException)
-			root = ((BundleException) t).getNestedException();
-		if (t instanceof InvocationTargetException)
-			root = ((InvocationTargetException) t).getTargetException();
-		// skip inner InvocationTargetExceptions and BundleExceptions
-		if (root instanceof InvocationTargetException || root instanceof BundleException) {
-			Throwable deeplyNested = getRoot(root);
-			if (deeplyNested != null)
-				// if we have something more specific, use it, otherwise keep what we have
-				root = deeplyNested;
-		}
-		return root;
-	}
-
-	/**
-	 * Helper method for writing out argument arrays.
-	 * @param header the header
-	 * @param args the list of arguments
-	 */
-	protected void writeArgs(String header, String[] args) throws IOException {
-		if (args == null || args.length == 0)
-			return;
-		write(header);
-		for (int i = 0; i < args.length; i++) {
-			//mask out the password argument for security
-			if (i > 0 && PASSWORD.equals(args[i - 1]))
-				write(" (omitted)"); //$NON-NLS-1$
-			else
-				write(" " + args[i]); //$NON-NLS-1$
-		}
-		writeln();
-	}
-
-	/**
-	 * Returns the session timestamp.  This is the time the platform was started
-	 * @return the session timestamp
-	 */
-	protected String getSessionTimestamp() {
-		// Main should have set the session start-up timestamp so return that. 
-		// Return the "now" time if not available.
-		String ts = FrameworkProperties.getProperty("eclipse.startTime"); //$NON-NLS-1$
-		if (ts != null) {
-			try {
-				return getDate(new Date(Long.parseLong(ts)));
-			} catch (NumberFormatException e) {
-				// fall through and use the timestamp from right now
-			}
-		}
-		return getDate(new Date());
-	}
-
-	/**
-	 * Writes the session
-	 * @throws IOException if an error occurs writing to the log
-	 */
-	protected void writeSession() throws IOException {
-		write(SESSION);
-		writeSpace();
-		String date = getSessionTimestamp();
-		write(date);
-		writeSpace();
-		for (int i = SESSION.length() + date.length(); i < 78; i++) {
-			write("-"); //$NON-NLS-1$
-		}
-		writeln();
-		// Write out certain values found in System.getProperties()
-		try {
-			String key = "eclipse.buildId"; //$NON-NLS-1$
-			String value = FrameworkProperties.getProperty(key, "unknown"); //$NON-NLS-1$
-			writeln(key + "=" + value); //$NON-NLS-1$
-
-			key = "java.fullversion"; //$NON-NLS-1$
-			value = System.getProperty(key);
-			if (value == null) {
-				key = "java.version"; //$NON-NLS-1$
-				value = System.getProperty(key);
-				writeln(key + "=" + value); //$NON-NLS-1$
-				key = "java.vendor"; //$NON-NLS-1$
-				value = System.getProperty(key);
-				writeln(key + "=" + value); //$NON-NLS-1$
-			} else {
-				writeln(key + "=" + value); //$NON-NLS-1$
-			}
-		} catch (Exception e) {
-			// If we're not allowed to get the values of these properties
-			// then just skip over them.
-		}
-		// The Bootloader has some information that we might be interested in.
-		write("BootLoader constants: OS=" + EclipseEnvironmentInfo.getDefault().getOS()); //$NON-NLS-1$
-		write(", ARCH=" + EclipseEnvironmentInfo.getDefault().getOSArch()); //$NON-NLS-1$
-		write(", WS=" + EclipseEnvironmentInfo.getDefault().getWS()); //$NON-NLS-1$
-		writeln(", NL=" + EclipseEnvironmentInfo.getDefault().getNL()); //$NON-NLS-1$
-		// Add the command-line arguments used to invoke the platform 
-		// XXX: this includes runtime-private arguments - should we do that?
-		writeArgs("Framework arguments: ", EclipseEnvironmentInfo.getDefault().getNonFrameworkArgs()); //$NON-NLS-1$
-		writeArgs("Command-line arguments: ", EclipseEnvironmentInfo.getDefault().getCommandLineArgs()); //$NON-NLS-1$
-	}
-
-	public void close() {
-		try {
-			if (writer != null) {
-				Writer tmpWriter = writer;
-				writer = null;
-				tmpWriter.close();
-			}
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * If a File is used to log messages to then the File opened and a Writer is created
-	 * to log messages to.
-	 */
-	protected void openFile() {
-		if (writer == null) {
-			if (outFile != null) {
-				try {
-					writer = logForStream(secureAction.getFileOutputStream(outFile, true));
-				} catch (IOException e) {
-					writer = logForStream(System.err);
-				}
-			} else {
-				writer = logForStream(System.err);
-			}
-		}
-	}
-
-	/**
-	 * If a File is used to log messages to then the writer is closed.
-	 */
-	protected void closeFile() {
-		if (outFile != null) {
-			if (writer != null) {
-				try {
-					writer.close();
-				} catch (IOException e) {
-					// we cannot log here; just print the stacktrace.
-					e.printStackTrace();
-				}
-				writer = null;
-			}
-		}
-	}
-
-	public void log(FrameworkEvent frameworkEvent) {
-		Bundle b = frameworkEvent.getBundle();
-		Throwable t = frameworkEvent.getThrowable();
-		String entry = b.getSymbolicName() == null ? b.getLocation() : b.getSymbolicName();
-		int severity;
-		switch (frameworkEvent.getType()) {
-			case FrameworkEvent.INFO :
-				severity = FrameworkLogEntry.INFO;
-				break;
-			case FrameworkEvent.ERROR :
-				severity = FrameworkLogEntry.ERROR;
-				break;
-			case FrameworkEvent.WARNING :
-				severity = FrameworkLogEntry.WARNING;
-				break;
-			default :
-				severity = FrameworkLogEntry.OK;
-		}
-		FrameworkLogEntry logEntry = new FrameworkLogEntry(entry, severity, 0, "", 0, t, null); //$NON-NLS-1$
-		log(logEntry);
-	}
-
-	public synchronized void log(FrameworkLogEntry logEntry) {
-		if (logEntry == null)
-			return;
-		if (!isLoggable(logEntry))
-			return;
-		try {
-			checkLogFileSize();
-			openFile();
-			if (newSession) {
-				writeSession();
-				newSession = false;
-			}
-			writeLog(0, logEntry);
-			writer.flush();
-		} catch (Exception e) {
-			// any exceptions during logging should be caught 
-			System.err.println("An exception occurred while writing to the platform log:");//$NON-NLS-1$
-			e.printStackTrace(System.err);
-			System.err.println("Logging to the console instead.");//$NON-NLS-1$
-			//we failed to write, so dump log entry to console instead
-			try {
-				writer = logForStream(System.err);
-				writeLog(0, logEntry);
-				writer.flush();
-			} catch (Exception e2) {
-				System.err.println("An exception occurred while logging to the console:");//$NON-NLS-1$
-				e2.printStackTrace(System.err);
-			}
-		} finally {
-			closeFile();
-		}
-	}
-
-	public synchronized void setWriter(Writer newWriter, boolean append) {
-		setOutput(null, newWriter, append);
-	}
-
-	public synchronized void setFile(File newFile, boolean append) throws IOException {
-		if (newFile != null && !newFile.equals(this.outFile)) {
-			// If it's a new file, then reset.
-			readLogProperties();
-			backupIdx = 0;
-		}
-		setOutput(newFile, null, append);
-		FrameworkProperties.setProperty(EclipseStarter.PROP_LOGFILE, newFile == null ? "" : newFile.getAbsolutePath()); //$NON-NLS-1$
-	}
-
-	public synchronized File getFile() {
-		return outFile;
-	}
-
-	public void setConsoleLog(boolean consoleLog) {
-		this.consoleLog = consoleLog;
-	}
-
-	private void setOutput(File newOutFile, Writer newWriter, boolean append) {
-		if (newOutFile == null || !newOutFile.equals(this.outFile)) {
-			if (this.writer != null) {
-				try {
-					this.writer.close();
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
-				this.writer = null;
-			}
-			// Append old outFile to newWriter. We only attempt to do this
-			// if the current Writer is backed by a File and this is not
-			// a new session.
-			File oldOutFile = this.outFile;
-			this.outFile = newOutFile;
-			this.writer = newWriter;
-			boolean copyFailed = false;
-			if (append && oldOutFile != null && oldOutFile.isFile()) {
-				Reader fileIn = null;
-				try {
-					openFile();
-					fileIn = new InputStreamReader(secureAction.getFileInputStream(oldOutFile), "UTF-8"); //$NON-NLS-1$
-					copyReader(fileIn, this.writer);
-				} catch (IOException e) {
-					copyFailed = true;
-					e.printStackTrace();
-				} finally {
-					if (fileIn != null) {
-						try {
-							fileIn.close();
-						} catch (IOException e) {
-							e.printStackTrace();
-						}
-						// delete the old file if copying didn't fail
-						if (!copyFailed)
-							oldOutFile.delete();
-					}
-					closeFile();
-				}
-			}
-		}
-	}
-
-	private void copyReader(Reader reader, Writer aWriter) throws IOException {
-		char buffer[] = new char[1024];
-		int count;
-		while ((count = reader.read(buffer, 0, buffer.length)) > 0) {
-			aWriter.write(buffer, 0, count);
-		}
-	}
-
-	/**
-	 * Returns a date string using the correct format for the log.
-	 * @param date the Date to format
-	 * @return a date string.
-	 */
-	protected String getDate(Date date) {
-		Calendar c = Calendar.getInstance();
-		c.setTime(date);
-		StringBuffer sb = new StringBuffer();
-		appendPaddedInt(c.get(Calendar.YEAR), 4, sb).append('-');
-		appendPaddedInt(c.get(Calendar.MONTH) + 1, 2, sb).append('-');
-		appendPaddedInt(c.get(Calendar.DAY_OF_MONTH), 2, sb).append(' ');
-		appendPaddedInt(c.get(Calendar.HOUR_OF_DAY), 2, sb).append(':');
-		appendPaddedInt(c.get(Calendar.MINUTE), 2, sb).append(':');
-		appendPaddedInt(c.get(Calendar.SECOND), 2, sb).append('.');
-		appendPaddedInt(c.get(Calendar.MILLISECOND), 3, sb);
-		return sb.toString();
-	}
-
-	private StringBuffer appendPaddedInt(int value, int pad, StringBuffer buffer) {
-		pad = pad - 1;
-		if (pad == 0)
-			return buffer.append(Integer.toString(value));
-		int padding = (int) Math.pow(10, pad);
-		if (value >= padding)
-			return buffer.append(Integer.toString(value));
-		while (padding > value && padding > 1) {
-			buffer.append('0');
-			padding = padding / 10;
-		}
-		buffer.append(value);
-		return buffer;
-	}
-
-	/**
-	 * Returns a stacktrace string using the correct format for the log
-	 * @param t the Throwable to get the stacktrace for
-	 * @return a stacktrace string
-	 */
-	protected String getStackTrace(Throwable t) {
-		if (t == null)
-			return null;
-
-		StringWriter sw = new StringWriter();
-		PrintWriter pw = new PrintWriter(sw);
-
-		t.printStackTrace(pw);
-		// ensure the root exception is fully logged
-		Throwable root = getRoot(t);
-		if (root != null) {
-			pw.println("Root exception:"); //$NON-NLS-1$
-			root.printStackTrace(pw);
-		}
-		return sw.toString();
-	}
-
-	/**
-	 * Returns a Writer for the given OutputStream
-	 * @param output an OutputStream to use for the Writer
-	 * @return a Writer for the given OutputStream
-	 */
-	protected Writer logForStream(OutputStream output) {
-		try {
-			return new BufferedWriter(new OutputStreamWriter(output, "UTF-8")); //$NON-NLS-1$
-		} catch (UnsupportedEncodingException e) {
-			return new BufferedWriter(new OutputStreamWriter(output));
-		}
-	}
-
-	/**
-	 * Writes the log entry to the log using the specified depth.  A depth value of 0
-	 * idicates that the log entry is the root entry.  Any value greater than 0 indicates
-	 * a sub-entry.
-	 * @param depth the depth of th entry
-	 * @param entry the entry to log
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void writeLog(int depth, FrameworkLogEntry entry) throws IOException {
-		writeEntry(depth, entry);
-		writeMessage(entry);
-		writeStack(entry);
-
-		FrameworkLogEntry[] children = entry.getChildren();
-		if (children != null) {
-			for (int i = 0; i < children.length; i++) {
-				writeLog(depth + 1, children[i]);
-			}
-		}
-	}
-
-	/**
-	 * Writes the ENTRY or SUBENTRY header for an entry.  A depth value of 0
-	 * indicates that the log entry is the root entry.  Any value greater than 0 indicates
-	 * a sub-entry.
-	 * @param depth the depth of th entry
-	 * @param entry the entry to write the header for
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void writeEntry(int depth, FrameworkLogEntry entry) throws IOException {
-		if (depth == 0) {
-			writeln(); // write a blank line before all !ENTRY tags bug #64406
-			write(ENTRY);
-		} else {
-			write(SUBENTRY);
-			writeSpace();
-			write(Integer.toString(depth));
-		}
-		writeSpace();
-		write(entry.getEntry());
-		writeSpace();
-		write(Integer.toString(entry.getSeverity()));
-		writeSpace();
-		write(Integer.toString(entry.getBundleCode()));
-		writeSpace();
-		write(getDate(new Date()));
-		writeln();
-	}
-
-	/**
-	 * Writes the MESSAGE header to the log for the given entry.
-	 * @param entry the entry to write the message for
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void writeMessage(FrameworkLogEntry entry) throws IOException {
-		write(MESSAGE);
-		writeSpace();
-		writeln(entry.getMessage());
-	}
-
-	/**
-	 * Writes the STACK header to the log for the given entry.
-	 * @param entry the entry to write the stacktrace for
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void writeStack(FrameworkLogEntry entry) throws IOException {
-		Throwable t = entry.getThrowable();
-		if (t != null) {
-			String stack = getStackTrace(t);
-			write(STACK);
-			writeSpace();
-			write(Integer.toString(entry.getStackCode()));
-			writeln();
-			write(stack);
-		}
-	}
-
-	/**
-	 * Writes the given message to the log.
-	 * @param message the message
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void write(String message) throws IOException {
-		if (message != null) {
-			writer.write(message);
-			if (consoleLog)
-				System.out.print(message);
-		}
-	}
-
-	/**
-	 * Writes the given message to the log and a newline.
-	 * @param s the message
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void writeln(String s) throws IOException {
-		write(s);
-		writeln();
-	}
-
-	/**
-	 * Writes a newline log.
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void writeln() throws IOException {
-		write(LINE_SEPARATOR);
-	}
-
-	/**
-	 * Writes a space to the log.
-	 * @throws IOException if any error occurs writing to the log
-	 */
-	protected void writeSpace() throws IOException {
-		write(" "); //$NON-NLS-1$
-	}
-
-	/**
-	 * Checks the log file size.  If the log file size reaches the limit then the log 
-	 * is rotated
-	 * @return false if an error occured trying to rotate the log
-	 */
-	protected boolean checkLogFileSize() {
-		if (maxLogSize == 0)
-			return true; // no size limitation.
-
-		boolean isBackupOK = true;
-		if (outFile != null) {
-			if ((secureAction.length(outFile) >> 10) > maxLogSize) { // Use KB as file size unit.
-				String logFilename = outFile.getAbsolutePath();
-
-				// Delete old backup file that will be replaced.
-				String backupFilename = ""; //$NON-NLS-1$
-				if (logFilename.toLowerCase().endsWith(LOG_EXT)) {
-					backupFilename = logFilename.substring(0, logFilename.length() - LOG_EXT.length()) + BACKUP_MARK + backupIdx + LOG_EXT;
-				} else {
-					backupFilename = logFilename + BACKUP_MARK + backupIdx;
-				}
-				File backupFile = new File(backupFilename);
-				if (backupFile.exists()) {
-					if (!backupFile.delete()) {
-						System.err.println("Error when trying to delete old log file: " + backupFile.getName());//$NON-NLS-1$ 
-						if (backupFile.renameTo(new File(backupFile.getAbsolutePath() + System.currentTimeMillis()))) {
-							System.err.println("So we rename it to filename: " + backupFile.getName()); //$NON-NLS-1$
-						} else {
-							System.err.println("And we also cannot rename it!"); //$NON-NLS-1$
-							isBackupOK = false;
-						}
-					}
-				}
-
-				// Rename current log file to backup one.
-				boolean isRenameOK = outFile.renameTo(backupFile);
-				if (!isRenameOK) {
-					System.err.println("Error when trying to rename log file to backup one."); //$NON-NLS-1$
-					isBackupOK = false;
-				}
-				File newFile = new File(logFilename);
-				setOutput(newFile, null, false);
-
-				// Write a new SESSION header to new log file.
-				openFile();
-				try {
-					writeSession();
-					writeln();
-					writeln("This is a continuation of log file " + backupFile.getAbsolutePath());//$NON-NLS-1$
-					writeln("Created Time: " + getDate(new Date(System.currentTimeMillis()))); //$NON-NLS-1$
-					writer.flush();
-				} catch (IOException ioe) {
-					ioe.printStackTrace(System.err);
-				}
-				closeFile();
-				backupIdx = (++backupIdx) % maxLogFiles;
-			}
-		}
-		return isBackupOK;
-	}
-
-	/**
-	 * Reads the PROP_LOG_SIZE_MAX and PROP_LOG_FILE_MAX properties.
-	 */
-	protected void readLogProperties() {
-		String newMaxLogSize = secureAction.getProperty(PROP_LOG_SIZE_MAX);
-		if (newMaxLogSize != null) {
-			maxLogSize = Integer.parseInt(newMaxLogSize);
-			if (maxLogSize != 0 && maxLogSize < LOG_SIZE_MIN) {
-				// If the value is '0', then it means no size limitation.
-				// Also, make sure no inappropriate(too small) assigned value.
-				maxLogSize = LOG_SIZE_MIN;
-			}
-		}
-
-		String newMaxLogFiles = secureAction.getProperty(PROP_LOG_FILE_MAX);
-		if (newMaxLogFiles != null) {
-			maxLogFiles = Integer.parseInt(newMaxLogFiles);
-			if (maxLogFiles < 1) {
-				// Make sure no invalid assigned value. (at least >= 1)
-				maxLogFiles = DEFAULT_LOG_FILES;
-			}
-		}
-
-		String newLogLevel = secureAction.getProperty(PROP_LOG_LEVEL);
-		if (newLogLevel != null) {
-			if (newLogLevel.equals("ERROR")) //$NON-NLS-1$
-				logLevel = FrameworkLogEntry.ERROR;
-			else if (newLogLevel.equals("WARNING")) //$NON-NLS-1$
-				logLevel = FrameworkLogEntry.ERROR | FrameworkLogEntry.WARNING;
-			else if (newLogLevel.equals("INFO")) //$NON-NLS-1$
-				logLevel = FrameworkLogEntry.INFO | FrameworkLogEntry.ERROR | FrameworkLogEntry.WARNING | FrameworkLogEntry.CANCEL;
-			else
-				logLevel = FrameworkLogEntry.OK; // OK (0) means log everything
-		}
-	}
-
-	/**
-	 * Determines if the log entry should be logged based on log level.
-	 */
-	private boolean isLoggable(FrameworkLogEntry entry) {
-		if (logLevel == 0)
-			return true;
-		return (entry.getSeverity() & logLevel) != 0;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java
index 4a4a7e0..ec2dcc0 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,9 +59,9 @@ public class EclipseStarter {
 	public static boolean debug = false;
 	private static boolean running = false;
 	private static Framework framework = null;
-	private static ServiceRegistration defaultMonitorRegistration = null;
-	private static ServiceRegistration appLauncherRegistration = null;
-	private static ServiceRegistration splashStreamRegistration = null;
+	private static ServiceRegistration<?> defaultMonitorRegistration = null;
+	private static ServiceRegistration<?> appLauncherRegistration = null;
+	private static ServiceRegistration<?> splashStreamRegistration = null;
 
 	// command line arguments
 	private static final String CLEAN = "-clean"; //$NON-NLS-1$
@@ -129,9 +129,9 @@ public class EclipseStarter {
 
 	private static FrameworkLog log;
 	// directory of serch candidates keyed by directory abs path -> directory listing (bug 122024)
-	private static HashMap searchCandidates = new HashMap(4);
+	private static Map<String, String[]> searchCandidates = new HashMap<String, String[]>(4);
 	private static EclipseAppLauncher appLauncher;
-	private static List shutdownHandlers;
+	private static List<Runnable> shutdownHandlers;
 
 	private static ConsoleManager consoleMgr = null;
 
@@ -229,31 +229,6 @@ public class EclipseStarter {
 		return running;
 	}
 
-	protected static FrameworkLog createFrameworkLog() {
-		FrameworkLog frameworkLog;
-		String logFileProp = FrameworkProperties.getProperty(EclipseStarter.PROP_LOGFILE);
-		if (logFileProp != null) {
-			frameworkLog = new EclipseLog(new File(logFileProp));
-		} else {
-			Location location = LocationManager.getConfigurationLocation();
-			File configAreaDirectory = null;
-			if (location != null)
-				// TODO assumes the URL is a file: url
-				configAreaDirectory = new File(location.getURL().getFile());
-
-			if (configAreaDirectory != null) {
-				String logFileName = Long.toString(System.currentTimeMillis()) + ".log"; //$NON-NLS-1$
-				File logFile = new File(configAreaDirectory, logFileName);
-				FrameworkProperties.setProperty(EclipseStarter.PROP_LOGFILE, logFile.getAbsolutePath());
-				frameworkLog = new EclipseLog(logFile);
-			} else
-				frameworkLog = new EclipseLog();
-		}
-		if ("true".equals(FrameworkProperties.getProperty(EclipseStarter.PROP_CONSOLE_LOG))) //$NON-NLS-1$
-			frameworkLog.setConsoleLog(true);
-		return frameworkLog;
-	}
-
 	/**
 	 * Starts the platform and sets it up to run a single application. The application is either identified
 	 * in the given arguments (e.g., -application <app id>) or in the <code>eclipse.application</code>
@@ -419,7 +394,7 @@ public class EclipseStarter {
 	}
 
 	private static void ensureBundlesActive(Bundle[] bundles) {
-		ServiceTracker tracker = null;
+		ServiceTracker<StartLevel, StartLevel> tracker = null;
 		try {
 			for (int i = 0; i < bundles.length; i++) {
 				if (bundles[i].getState() != Bundle.ACTIVE) {
@@ -430,10 +405,10 @@ public class EclipseStarter {
 					}
 					// check that the startlevel allows the bundle to be active (111550)
 					if (tracker == null) {
-						tracker = new ServiceTracker(context, StartLevel.class.getName(), null);
+						tracker = new ServiceTracker<StartLevel, StartLevel>(context, StartLevel.class.getName(), null);
 						tracker.open();
 					}
-					StartLevel sl = (StartLevel) tracker.getService();
+					StartLevel sl = tracker.getService();
 					if (sl != null && (sl.getBundleStartLevel(bundles[i]) <= sl.getStartLevel())) {
 						log.log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.ERROR, 0, NLS.bind(EclipseAdaptorMsg.ECLIPSE_STARTUP_ERROR_BUNDLE_NOT_ACTIVE, bundles[i]), 0, null, null));
 					}
@@ -453,7 +428,7 @@ public class EclipseStarter {
 		// first lets look for missing leaf constraints (bug 114120)
 		VersionConstraint[] leafConstraints = stateHelper.getUnsatisfiedLeaves(state.getBundles());
 		// hash the missing leaf constraints by the declaring bundles
-		Map missing = new HashMap();
+		Map<BundleDescription, List<VersionConstraint>> missing = new HashMap<BundleDescription, List<VersionConstraint>>();
 		for (int i = 0; i < leafConstraints.length; i++) {
 			// only include non-optional and non-dynamic constraint leafs
 			if (leafConstraints[i] instanceof BundleSpecification && ((BundleSpecification) leafConstraints[i]).isOptional())
@@ -465,9 +440,9 @@ public class EclipseStarter {
 					continue;
 			}
 			BundleDescription bundle = leafConstraints[i].getBundle();
-			ArrayList constraints = (ArrayList) missing.get(bundle);
+			List<VersionConstraint> constraints = missing.get(bundle);
 			if (constraints == null) {
-				constraints = new ArrayList();
+				constraints = new ArrayList<VersionConstraint>();
 				missing.put(bundle, constraints);
 			}
 			constraints.add(leafConstraints[i]);
@@ -477,14 +452,14 @@ public class EclipseStarter {
 		if (missing.size() > 0) {
 			FrameworkLogEntry[] rootChildren = new FrameworkLogEntry[missing.size()];
 			int rootIndex = 0;
-			for (Iterator iter = missing.keySet().iterator(); iter.hasNext(); rootIndex++) {
-				BundleDescription description = (BundleDescription) iter.next();
+			for (Iterator<BundleDescription> iter = missing.keySet().iterator(); iter.hasNext(); rootIndex++) {
+				BundleDescription description = iter.next();
 				String symbolicName = description.getSymbolicName() == null ? FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME : description.getSymbolicName();
 				String generalMessage = NLS.bind(EclipseAdaptorMsg.ECLIPSE_STARTUP_ERROR_BUNDLE_NOT_RESOLVED, description.getLocation());
-				ArrayList constraints = (ArrayList) missing.get(description);
+				List<VersionConstraint> constraints = missing.get(description);
 				FrameworkLogEntry[] logChildren = new FrameworkLogEntry[constraints.size()];
 				for (int i = 0; i < logChildren.length; i++)
-					logChildren[i] = new FrameworkLogEntry(symbolicName, FrameworkLogEntry.WARNING, 0, MessageHelper.getResolutionFailureMessage((VersionConstraint) constraints.get(i)), 0, null, null);
+					logChildren[i] = new FrameworkLogEntry(symbolicName, FrameworkLogEntry.WARNING, 0, MessageHelper.getResolutionFailureMessage(constraints.get(i)), 0, null, null);
 				rootChildren[rootIndex] = new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.WARNING, 0, generalMessage, 0, null, logChildren);
 			}
 			logService.log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.WARNING, 0, EclipseAdaptorMsg.ECLIPSE_STARTUP_ROOTS_NOT_RESOLVED, 0, null, rootChildren));
@@ -492,7 +467,7 @@ public class EclipseStarter {
 
 		// There may be some bundles unresolved for other reasons, causing the system to be unresolved
 		// log all unresolved constraints now
-		ArrayList allChildren = new ArrayList();
+		List<FrameworkLogEntry> allChildren = new ArrayList<FrameworkLogEntry>();
 		for (int i = 0; i < bundles.length; i++)
 			if (bundles[i].getState() == Bundle.INSTALLED) {
 				String symbolicName = bundles[i].getSymbolicName() == null ? FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME : bundles[i].getSymbolicName();
@@ -520,7 +495,7 @@ public class EclipseStarter {
 				allChildren.add(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.WARNING, 0, generalMessage, 0, null, logChildren));
 			}
 		if (allChildren.size() > 0)
-			logService.log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.WARNING, 0, EclipseAdaptorMsg.ECLIPSE_STARTUP_ALL_NOT_RESOLVED, 0, null, (FrameworkLogEntry[]) allChildren.toArray(new FrameworkLogEntry[allChildren.size()])));
+			logService.log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.WARNING, 0, EclipseAdaptorMsg.ECLIPSE_STARTUP_ALL_NOT_RESOLVED, 0, null, allChildren.toArray(new FrameworkLogEntry[allChildren.size()])));
 	}
 
 	private static void publishSplashScreen(final Runnable endSplashHandler) {
@@ -531,7 +506,7 @@ public class EclipseStarter {
 			Method method = endSplashHandler.getClass().getMethod("getOutputStream", new Class[0]); //$NON-NLS-1$
 			Object outputStream = method.invoke(endSplashHandler, new Object[0]);
 			if (outputStream instanceof OutputStream) {
-				Dictionary osProperties = new Hashtable();
+				Dictionary<String, Object> osProperties = new Hashtable<String, Object>();
 				osProperties.put("name", "splashstream"); //$NON-NLS-1$//$NON-NLS-2$
 				splashStreamRegistration = context.registerService(OutputStream.class.getName(), outputStream, osProperties);
 			}
@@ -540,7 +515,7 @@ public class EclipseStarter {
 		}
 		// keep this splash handler as the default startup monitor
 		try {
-			Dictionary monitorProps = new Hashtable();
+			Dictionary<String, Object> monitorProps = new Hashtable<String, Object>();
 			monitorProps.put(Constants.SERVICE_RANKING, new Integer(Integer.MIN_VALUE));
 			defaultMonitorRegistration = context.registerService(StartupMonitor.class.getName(), new DefaultStartupMonitor(endSplashHandler), monitorProps);
 		} catch (IllegalStateException e) {
@@ -548,6 +523,7 @@ public class EclipseStarter {
 		}
 	}
 
+	@SuppressWarnings("deprecation")
 	private static URL searchForBundle(String name, String parent) throws MalformedURLException {
 		URL url = null;
 		File fileLocation = null;
@@ -626,23 +602,23 @@ public class EclipseStarter {
 		Bundle[] curInitBundles = getCurrentBundles(true);
 
 		// list of bundles to be refreshed
-		List toRefresh = new ArrayList(curInitBundles.length);
+		List<Bundle> toRefresh = new ArrayList<Bundle>(curInitBundles.length);
 		// uninstall any of the currently installed bundles that do not exist in the 
 		// initial bundle list from installEntries.
 		uninstallBundles(curInitBundles, initialBundles, toRefresh);
 
 		// install the initialBundles that are not already installed.
-		ArrayList startBundles = new ArrayList(installEntries.length);
-		ArrayList lazyActivationBundles = new ArrayList(installEntries.length);
+		List<Bundle> startBundles = new ArrayList<Bundle>(installEntries.length);
+		List<Bundle> lazyActivationBundles = new ArrayList<Bundle>(installEntries.length);
 		installBundles(initialBundles, curInitBundles, startBundles, lazyActivationBundles, toRefresh);
 
 		// If we installed/uninstalled something, force a refresh of all installed/uninstalled bundles
-		if (!toRefresh.isEmpty() && refreshPackages((Bundle[]) toRefresh.toArray(new Bundle[toRefresh.size()])))
+		if (!toRefresh.isEmpty() && refreshPackages(toRefresh.toArray(new Bundle[toRefresh.size()])))
 			return null; // cannot continue; refreshPackages shutdown the framework
 
 		// schedule all basic bundles to be started
-		Bundle[] startInitBundles = (Bundle[]) startBundles.toArray(new Bundle[startBundles.size()]);
-		Bundle[] lazyInitBundles = (Bundle[]) lazyActivationBundles.toArray(new Bundle[lazyActivationBundles.size()]);
+		Bundle[] startInitBundles = startBundles.toArray(new Bundle[startBundles.size()]);
+		Bundle[] lazyInitBundles = lazyActivationBundles.toArray(new Bundle[lazyActivationBundles.size()]);
 		startBundles(startInitBundles, lazyInitBundles);
 
 		if (debug)
@@ -652,7 +628,7 @@ public class EclipseStarter {
 
 	private static InitialBundle[] getInitialBundles(String[] installEntries) {
 		searchCandidates.clear();
-		ArrayList result = new ArrayList(installEntries.length);
+		List<InitialBundle> result = new ArrayList<InitialBundle>(installEntries.length);
 		int defaultStartLevel = Integer.parseInt(FrameworkProperties.getProperty(PROP_BUNDLES_STARTLEVEL, DEFAULT_BUNDLES_STARTLEVEL));
 		String syspath = getSysPath();
 		// should canonicalize the syspath.
@@ -698,12 +674,12 @@ public class EclipseStarter {
 				log.log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.ERROR, 0, e.getMessage(), 0, e, null));
 			}
 		}
-		return (InitialBundle[]) result.toArray(new InitialBundle[result.size()]);
+		return result.toArray(new InitialBundle[result.size()]);
 	}
 
 	// returns true if the refreshPackages operation caused the framework to shutdown
 	private static boolean refreshPackages(Bundle[] bundles) {
-		ServiceReference packageAdminRef = context.getServiceReference(PackageAdmin.class.getName());
+		ServiceReference<?> packageAdminRef = context.getServiceReference(PackageAdmin.class.getName());
 		PackageAdmin packageAdmin = null;
 		if (packageAdminRef != null)
 			packageAdmin = (PackageAdmin) context.getService(packageAdminRef);
@@ -727,7 +703,7 @@ public class EclipseStarter {
 		if (!isForcedRestart())
 			return;
 		// wait for the system bundle to stop
-		Bundle systemBundle = context.getBundle(0);
+		Bundle systemBundle = framework.getBundle(0);
 		int i = 0;
 		while (i < 5000 && (systemBundle.getState() & (Bundle.STARTING | Bundle.ACTIVE | Bundle.STOPPING)) != 0) {
 			i += 200;
@@ -746,9 +722,9 @@ public class EclipseStarter {
 	 */
 	private static FrameworkAdaptor createAdaptor() throws Exception {
 		String adaptorClassName = FrameworkProperties.getProperty(PROP_ADAPTOR, DEFAULT_ADAPTOR_CLASS);
-		Class adaptorClass = Class.forName(adaptorClassName);
-		Class[] constructorArgs = new Class[] {String[].class};
-		Constructor constructor = adaptorClass.getConstructor(constructorArgs);
+		Class<?> adaptorClass = Class.forName(adaptorClassName);
+		Class<?>[] constructorArgs = new Class[] {String[].class};
+		Constructor<?> constructor = adaptorClass.getConstructor(constructorArgs);
 		return (FrameworkAdaptor) constructor.newInstance(new Object[] {new String[0]});
 	}
 
@@ -993,7 +969,7 @@ public class EclipseStarter {
 
 	private static Bundle[] getCurrentBundles(boolean includeInitial) {
 		Bundle[] installed = context.getBundles();
-		ArrayList initial = new ArrayList();
+		List<Bundle> initial = new ArrayList<Bundle>();
 		for (int i = 0; i < installed.length; i++) {
 			Bundle bundle = installed[i];
 			if (bundle.getLocation().startsWith(INITIAL_LOCATION)) {
@@ -1002,7 +978,7 @@ public class EclipseStarter {
 			} else if (!includeInitial && bundle.getBundleId() != 0)
 				initial.add(bundle);
 		}
-		return (Bundle[]) initial.toArray(new Bundle[initial.size()]);
+		return initial.toArray(new Bundle[initial.size()]);
 	}
 
 	private static Bundle getBundleByLocation(String location, Bundle[] bundles) {
@@ -1014,7 +990,7 @@ public class EclipseStarter {
 		return null;
 	}
 
-	private static void uninstallBundles(Bundle[] curInitBundles, InitialBundle[] newInitBundles, List toRefresh) {
+	private static void uninstallBundles(Bundle[] curInitBundles, InitialBundle[] newInitBundles, List<Bundle> toRefresh) {
 		for (int i = 0; i < curInitBundles.length; i++) {
 			boolean found = false;
 			for (int j = 0; j < newInitBundles.length; j++) {
@@ -1034,8 +1010,8 @@ public class EclipseStarter {
 		}
 	}
 
-	private static void installBundles(InitialBundle[] initialBundles, Bundle[] curInitBundles, ArrayList startBundles, ArrayList lazyActivationBundles, List toRefresh) {
-		ServiceReference reference = context.getServiceReference(StartLevel.class.getName());
+	private static void installBundles(InitialBundle[] initialBundles, Bundle[] curInitBundles, List<Bundle> startBundles, List<Bundle> lazyActivationBundles, List<Bundle> toRefresh) {
+		ServiceReference<?> reference = context.getServiceReference(StartLevel.class.getName());
 		StartLevel startService = null;
 		if (reference != null)
 			startService = (StartLevel) context.getService(reference);
@@ -1083,15 +1059,16 @@ public class EclipseStarter {
 		}
 	}
 
+	@SuppressWarnings("deprecation")
 	private static boolean hasLazyActivationPolicy(Bundle target) {
 		// check the bundle manifest to see if it defines a lazy activation policy
-		Dictionary headers = target.getHeaders(""); //$NON-NLS-1$
+		Dictionary<String, String> headers = target.getHeaders(""); //$NON-NLS-1$
 		// first check to see if this is a fragment bundle
-		String fragmentHost = (String) headers.get(Constants.FRAGMENT_HOST);
+		String fragmentHost = headers.get(Constants.FRAGMENT_HOST);
 		if (fragmentHost != null)
 			return false; // do not activate fragment bundles
 		// look for the OSGi defined Bundle-ActivationPolicy header
-		String activationPolicy = (String) headers.get(Constants.BUNDLE_ACTIVATIONPOLICY);
+		String activationPolicy = headers.get(Constants.BUNDLE_ACTIVATIONPOLICY);
 		try {
 			if (activationPolicy != null) {
 				ManifestElement[] elements = ManifestElement.parseHeader(Constants.BUNDLE_ACTIVATIONPOLICY, activationPolicy);
@@ -1102,9 +1079,9 @@ public class EclipseStarter {
 				}
 			} else {
 				// check for Eclipse specific lazy start headers "Eclipse-LazyStart" and "Eclipse-AutoStart"
-				String eclipseLazyStart = (String) headers.get(Constants.ECLIPSE_LAZYSTART);
+				String eclipseLazyStart = headers.get(Constants.ECLIPSE_LAZYSTART);
 				if (eclipseLazyStart == null)
-					eclipseLazyStart = (String) headers.get(Constants.ECLIPSE_AUTOSTART);
+					eclipseLazyStart = headers.get(Constants.ECLIPSE_AUTOSTART);
 				ManifestElement[] elements = ManifestElement.parseHeader(Constants.ECLIPSE_LAZYSTART, eclipseLazyStart);
 				if (elements != null && elements.length > 0) {
 					// if the value is true then it is lazy activated
@@ -1214,16 +1191,16 @@ public class EclipseStarter {
 	}
 
 	private static void mergeProperties(Properties destination, Properties source) {
-		for (Enumeration e = source.keys(); e.hasMoreElements();) {
+		for (Enumeration<?> e = source.keys(); e.hasMoreElements();) {
 			String key = (String) e.nextElement();
 			String value = source.getProperty(key);
 			if (destination.getProperty(key) == null)
-				destination.put(key, value);
+				destination.setProperty(key, value);
 		}
 	}
 
 	private static void setStartLevel(final int value) {
-		ServiceReference reference = context.getServiceReference(StartLevel.class.getName());
+		ServiceReference<?> reference = context.getServiceReference(StartLevel.class.getName());
 		final StartLevel startLevel = reference != null ? (StartLevel) context.getService(reference) : null;
 		if (startLevel == null)
 			return;
@@ -1258,11 +1235,11 @@ public class EclipseStarter {
 	}
 
 	private static void updateSplash(Semaphore semaphore, StartupEventListener listener) {
-		ServiceTracker monitorTracker = new ServiceTracker(context, StartupMonitor.class.getName(), null);
+		ServiceTracker<StartupMonitor, StartupMonitor> monitorTracker = new ServiceTracker<StartupMonitor, StartupMonitor>(context, StartupMonitor.class.getName(), null);
 		monitorTracker.open();
 		try {
 			while (true) {
-				StartupMonitor monitor = (StartupMonitor) monitorTracker.getService();
+				StartupMonitor monitor = monitorTracker.getService();
 				if (monitor != null) {
 					try {
 						monitor.update();
@@ -1293,9 +1270,18 @@ public class EclipseStarter {
 	 * @param start the location to begin searching
 	 */
 	private static String searchFor(final String target, String start) {
-		String[] candidates = (String[]) searchCandidates.get(start);
+		String[] candidates = searchCandidates.get(start);
 		if (candidates == null) {
-			candidates = new File(start).list();
+			File startFile = new File(start);
+			// Pre-check if file exists, if not, and it contains escape characters,
+			// try decoding the path
+			if (!startFile.exists() && start.indexOf('%') >= 0) {
+				String decodePath = FrameworkProperties.decode(start);
+				File f = new File(decodePath);
+				if (f.exists())
+					startFile = f;
+			}
+			candidates = startFile.list();
 			if (candidates != null)
 				searchCandidates.put(start, candidates);
 		}
@@ -1424,15 +1410,14 @@ public class EclipseStarter {
 	 * @param initialProperties the initial properties to set for the platform.
 	 * @since 3.2
 	 */
-	public static void setInitialProperties(Map initialProperties) {
+	public static void setInitialProperties(Map<String, String> initialProperties) {
 		if (initialProperties == null || initialProperties.isEmpty())
 			return;
-		for (Iterator it = initialProperties.entrySet().iterator(); it.hasNext();) {
-			Map.Entry entry = (Map.Entry) it.next();
+		for (Map.Entry<String, String> entry : initialProperties.entrySet()) {
 			if (entry.getValue() != null)
-				FrameworkProperties.setProperty((String) entry.getKey(), (String) entry.getValue());
+				FrameworkProperties.setProperty(entry.getKey(), entry.getValue());
 			else
-				FrameworkProperties.clearProperty((String) entry.getKey());
+				FrameworkProperties.clearProperty(entry.getKey());
 		}
 	}
 
@@ -1475,7 +1460,7 @@ public class EclipseStarter {
 			throw new IllegalStateException(EclipseAdaptorMsg.ECLIPSE_STARTUP_ALREADY_RUNNING);
 
 		if (shutdownHandlers == null)
-			shutdownHandlers = new ArrayList();
+			shutdownHandlers = new ArrayList<Runnable>();
 
 		shutdownHandlers.add(handler);
 	}
@@ -1501,8 +1486,8 @@ public class EclipseStarter {
 			return;
 
 		final Bundle systemBundle = context.getBundle();
-		for (Iterator it = shutdownHandlers.iterator(); it.hasNext();) {
-			final Runnable handler = (Runnable) it.next();
+		for (Iterator<Runnable> it = shutdownHandlers.iterator(); it.hasNext();) {
+			final Runnable handler = it.next();
 			BundleListener listener = new BundleListener() {
 				public void bundleChanged(BundleEvent event) {
 					if (event.getBundle() == systemBundle && event.getType() == BundleEvent.STOPPED) {
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/LocationManager.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/LocationManager.java
index 354863e..63b5863 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/LocationManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/LocationManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.net.URL;
 import java.util.Properties;
 import org.eclipse.core.runtime.internal.adaptor.*;
 import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
+import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil;
 import org.eclipse.osgi.service.datalocation.Location;
@@ -103,6 +104,10 @@ public class LocationManager {
 	 * Initializes the Location objects for the LocationManager.
 	 */
 	public static void initializeLocations() {
+		// set the osgi storage area if it exists
+		String osgiStorage = FrameworkProperties.getProperty(Constants.FRAMEWORK_STORAGE);
+		if (osgiStorage != null)
+			FrameworkProperties.setProperty(PROP_CONFIG_AREA, osgiStorage);
 		// do install location initialization first since others may depend on it
 		// assumes that the property is already set
 		installLocation = buildLocation(PROP_INSTALL_AREA, null, "", true, false, null); //$NON-NLS-1$
@@ -177,6 +182,7 @@ public class LocationManager {
 		return launcherParent == null ? null : new File(launcherParent);
 	}
 
+	@SuppressWarnings("deprecation")
 	private static Location buildLocation(String property, URL defaultLocation, String userDefaultAppendage, boolean readOnlyDefault, boolean computeReadOnly, String dataAreaPrefix) {
 		String location = FrameworkProperties.clearProperty(property);
 		// the user/product may specify a non-default readOnly setting   
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/CachedManifest.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/CachedManifest.java
index 3d4fbd8..550c2e2 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/CachedManifest.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/CachedManifest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,17 +24,17 @@ import org.osgi.framework.Version;
 /**
  * Internal class.
  */
-public class CachedManifest extends Dictionary {
+public class CachedManifest extends Dictionary<String, String> {
 	static final String SERVICE_COMPONENT = "Service-Component"; //$NON-NLS-1$
 	static boolean DEBUG = false;
-	private Dictionary manifest = null;
+	private Dictionary<String, String> manifest = null;
 	private EclipseStorageHook storageHook;
 
 	public CachedManifest(EclipseStorageHook storageHook) {
 		this.storageHook = storageHook;
 	}
 
-	public Dictionary getManifest() {
+	public Dictionary<String, String> getManifest() {
 		if (manifest == null)
 			try {
 				if (DEBUG)
@@ -44,10 +44,9 @@ public class CachedManifest extends Dictionary {
 				final String message = NLS.bind(EclipseAdaptorMsg.ECLIPSE_CACHEDMANIFEST_UNEXPECTED_EXCEPTION, storageHook.getBaseData().getLocation());
 				FrameworkLogEntry entry = new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.ERROR, 0, message, 0, e, null);
 				storageHook.getAdaptor().getFrameworkLog().log(entry);
-				return null;
 			}
 		if (manifest == null) {
-			Headers empty = new Headers(0);
+			Headers<String, String> empty = new Headers<String, String>(0);
 			empty.setReadOnly();
 			manifest = empty;
 			return empty;
@@ -63,15 +62,16 @@ public class CachedManifest extends Dictionary {
 		return size() == 0;
 	}
 
-	public Enumeration elements() {
+	public Enumeration<String> elements() {
 		return getManifest().elements();
 	}
 
-	public Enumeration keys() {
+	public Enumeration<String> keys() {
 		return getManifest().keys();
 	}
 
-	public Object get(Object key) {
+	@SuppressWarnings("deprecation")
+	public String get(Object key) {
 		if (manifest != null)
 			return manifest.get(key);
 		String keyString = (String) key;
@@ -139,17 +139,17 @@ public class CachedManifest extends Dictionary {
 			return storageHook.getBundleManifestVersion() == 0 ? null : Integer.toString(storageHook.getBundleManifestVersion());
 		if (SERVICE_COMPONENT.equals(keyString))
 			return storageHook.getServiceComponent();
-		Dictionary result = getManifest();
+		Dictionary<String, String> result = getManifest();
 		if (DEBUG)
 			System.out.println("Manifest read because of header: " + key); //$NON-NLS-1$
 		return result == null ? null : result.get(key);
 	}
 
-	public Object remove(Object key) {
+	public String remove(Object key) {
 		return getManifest().remove(key);
 	}
 
-	public Object put(Object key, Object value) {
+	public String put(String key, String value) {
 		return getManifest().put(key, value);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/ContextFinder.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/ContextFinder.java
index ae2a38d..9ecc15b 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/ContextFinder.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/ContextFinder.java
@@ -17,20 +17,20 @@ import java.security.PrivilegedAction;
 import java.util.*;
 import org.eclipse.osgi.framework.adaptor.BundleClassLoader;
 
-public class ContextFinder extends ClassLoader implements PrivilegedAction {
+public class ContextFinder extends ClassLoader implements PrivilegedAction<List<ClassLoader>> {
 	static final class Finder extends SecurityManager {
-		public Class[] getClassContext() {
+		public Class<?>[] getClassContext() {
 			return super.getClassContext();
 		}
 	}
 
 	//This is used to detect cycle that could be caused while delegating the loading to other classloaders
 	//It keeps track on a thread basis of the set of requested classes and resources
-	private static ThreadLocal cycleDetector = new ThreadLocal();
+	private static ThreadLocal<Set<String>> cycleDetector = new ThreadLocal<Set<String>>();
 	static ClassLoader finderClassLoader;
 	static Finder contextFinder;
 	static {
-		AccessController.doPrivileged(new PrivilegedAction() {
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
 			public Object run() {
 				finderClassLoader = ContextFinder.class.getClassLoader();
 				contextFinder = new Finder();
@@ -39,6 +39,8 @@ public class ContextFinder extends ClassLoader implements PrivilegedAction {
 		});
 	}
 
+	private static Class<ContextFinder> THIS = ContextFinder.class;
+
 	private final ClassLoader parentContextClassLoader;
 
 	public ContextFinder(ClassLoader contextClassLoader) {
@@ -50,13 +52,13 @@ public class ContextFinder extends ClassLoader implements PrivilegedAction {
 	// ContextFinder classloader nor the boot classloader.  The last classloader
 	// in the list is either a bundle classloader or the framework's classloader
 	// We assume that the bootclassloader never uses the context classloader to find classes in itself.
-	ArrayList basicFindClassLoaders() {
-		Class[] stack = contextFinder.getClassContext();
-		ArrayList result = new ArrayList(1);
+	List<ClassLoader> basicFindClassLoaders() {
+		Class<?>[] stack = contextFinder.getClassContext();
+		List<ClassLoader> result = new ArrayList<ClassLoader>(1);
 		ClassLoader previousLoader = null;
 		for (int i = 1; i < stack.length; i++) {
 			ClassLoader tmp = stack[i].getClassLoader();
-			if (stack[i] != ContextFinder.class && tmp != null && tmp != this) {
+			if (stack[i] != THIS && tmp != null && tmp != this) {
 				if (checkClassLoader(tmp)) {
 					if (previousLoader != tmp) {
 						result.add(tmp);
@@ -83,25 +85,25 @@ public class ContextFinder extends ClassLoader implements PrivilegedAction {
 		return true;
 	}
 
-	private ArrayList findClassLoaders() {
+	private List<ClassLoader> findClassLoaders() {
 		if (System.getSecurityManager() == null)
 			return basicFindClassLoaders();
-		return (ArrayList) AccessController.doPrivileged(this);
+		return AccessController.doPrivileged(this);
 	}
 
-	public Object run() {
+	public List<ClassLoader> run() {
 		return basicFindClassLoaders();
 	}
 
 	//Return whether the request for loading "name" should proceed.
 	//False is returned when a cycle is being detected 
 	private boolean startLoading(String name) {
-		Set classesAndResources = (Set) cycleDetector.get();
+		Set<String> classesAndResources = cycleDetector.get();
 		if (classesAndResources != null && classesAndResources.contains(name))
 			return false;
 
 		if (classesAndResources == null) {
-			classesAndResources = new HashSet(3);
+			classesAndResources = new HashSet<String>(3);
 			cycleDetector.set(classesAndResources);
 		}
 		classesAndResources.add(name);
@@ -109,19 +111,19 @@ public class ContextFinder extends ClassLoader implements PrivilegedAction {
 	}
 
 	private void stopLoading(String name) {
-		((Set) cycleDetector.get()).remove(name);
+		cycleDetector.get().remove(name);
 	}
 
-	protected Class loadClass(String arg0, boolean arg1) throws ClassNotFoundException {
+	protected Class<?> loadClass(String arg0, boolean arg1) throws ClassNotFoundException {
 		//Shortcut cycle
 		if (startLoading(arg0) == false)
 			throw new ClassNotFoundException(arg0);
 
 		try {
-			ArrayList toConsult = findClassLoaders();
-			for (Iterator loaders = toConsult.iterator(); loaders.hasNext();)
+			List<ClassLoader> toConsult = findClassLoaders();
+			for (Iterator<ClassLoader> loaders = toConsult.iterator(); loaders.hasNext();)
 				try {
-					return ((ClassLoader) loaders.next()).loadClass(arg0);
+					return loaders.next().loadClass(arg0);
 				} catch (ClassNotFoundException e) {
 					// go to the next class loader
 				}
@@ -137,9 +139,9 @@ public class ContextFinder extends ClassLoader implements PrivilegedAction {
 		if (startLoading(arg0) == false)
 			return null;
 		try {
-			ArrayList toConsult = findClassLoaders();
-			for (Iterator loaders = toConsult.iterator(); loaders.hasNext();) {
-				URL result = ((ClassLoader) loaders.next()).getResource(arg0);
+			List<ClassLoader> toConsult = findClassLoaders();
+			for (Iterator<ClassLoader> loaders = toConsult.iterator(); loaders.hasNext();) {
+				URL result = loaders.next().getResource(arg0);
 				if (result != null)
 					return result;
 				// go to the next class loader
@@ -150,14 +152,17 @@ public class ContextFinder extends ClassLoader implements PrivilegedAction {
 		}
 	}
 
-	protected Enumeration findResources(String arg0) throws IOException {
+	protected Enumeration<URL> findResources(String arg0) throws IOException {
 		//Shortcut cycle
-		if (startLoading(arg0) == false)
-			return Collections.enumeration(Collections.EMPTY_LIST);
+		if (startLoading(arg0) == false) {
+			@SuppressWarnings("unchecked")
+			Enumeration<URL> result = Collections.enumeration(Collections.EMPTY_LIST);
+			return result;
+		}
 		try {
-			ArrayList toConsult = findClassLoaders();
-			for (Iterator loaders = toConsult.iterator(); loaders.hasNext();) {
-				Enumeration result = ((ClassLoader) loaders.next()).getResources(arg0);
+			List<ClassLoader> toConsult = findClassLoaders();
+			for (Iterator<ClassLoader> loaders = toConsult.iterator(); loaders.hasNext();) {
+				Enumeration<URL> result = loaders.next().getResources(arg0);
 				if (result != null && result.hasMoreElements())
 					return result;
 				// go to the next class loader
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java
index 51ecaec..9ac29d3 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java
@@ -32,7 +32,7 @@ public class DefaultStartupMonitor implements StartupMonitor {
 		this.splashHandler = splashHandler;
 
 		try {
-			updateMethod = splashHandler.getClass().getMethod("updateSplash", null); //$NON-NLS-1$
+			updateMethod = splashHandler.getClass().getMethod("updateSplash", (Class[]) null); //$NON-NLS-1$
 		} catch (SecurityException e) {
 			throw (IllegalStateException) new IllegalStateException(e.getMessage()).initCause(e);
 		} catch (NoSuchMethodException e) {
@@ -47,7 +47,7 @@ public class DefaultStartupMonitor implements StartupMonitor {
 	public void update() {
 		if (updateMethod != null) {
 			try {
-				updateMethod.invoke(splashHandler, null);
+				updateMethod.invoke(splashHandler, (Object[]) null);
 			} catch (Throwable e) {
 				// ignore, this is best effort
 			}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java
index cb29c6f..e5aef3d 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,12 +47,15 @@ public class EclipseAdaptorHook implements AdaptorHook, HookConfigurator {
 
 	private BaseAdaptor adaptor;
 	private boolean noXML = false;
-	private ArrayList registrations = new ArrayList(10);
+	private List<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>(10);
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStart(BundleContext context) throws BundleException {
 		registrations.clear();
 		registerEndorsedXMLParser(context);
-		Hashtable locationProperties = new Hashtable(1);
+		Dictionary<String, Object> locationProperties = new Hashtable<String, Object>(1);
 		Location location = LocationManager.getUserLocation();
 		if (location != null) {
 			locationProperties.put("type", LocationManager.PROP_USER_AREA); //$NON-NLS-1$
@@ -80,7 +83,7 @@ public class EclipseAdaptorHook implements AdaptorHook, HookConfigurator {
 			registrations.add(context.registerService(Location.class.getName(), location, locationProperties));
 		}
 
-		Dictionary urlProperties = new Hashtable();
+		Dictionary<String, Object> urlProperties = new Hashtable<String, Object>();
 		urlProperties.put("protocol", new String[] {"bundleentry", "bundleresource"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		registrations.add(context.registerService(URLConverter.class.getName(), new URLConverterImpl(), urlProperties));
 
@@ -102,21 +105,21 @@ public class EclipseAdaptorHook implements AdaptorHook, HookConfigurator {
 			registrations.add(bc.registerService(DOMFACTORYNAME, new ParsingService(false), null));
 		} catch (ClassNotFoundException e) {
 			noXML = true;
-			if (Debug.DEBUG && Debug.DEBUG_ENABLED) {
+			if (Debug.DEBUG_ENABLED) {
 				String message = EclipseAdaptorMsg.ECLIPSE_ADAPTOR_ERROR_XML_SERVICE;
 				adaptor.getFrameworkLog().log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.ERROR, 0, message, 0, e, null));
 			}
 		}
 	}
 
-	private static class ParsingService implements ServiceFactory {
+	private static class ParsingService implements ServiceFactory<Object> {
 		private final boolean isSax;
 
 		public ParsingService(boolean isSax) {
 			this.isSax = isSax;
 		}
 
-		public Object getService(Bundle bundle, ServiceRegistration registration) {
+		public Object getService(Bundle bundle, ServiceRegistration<Object> registration) {
 			BundleHost host = (bundle instanceof BundleHost) ? (BundleHost) bundle : null;
 			if (!SET_TCCL_XMLFACTORY || bundle == null)
 				return createService();
@@ -148,18 +151,21 @@ public class EclipseAdaptorHook implements AdaptorHook, HookConfigurator {
 			return DocumentBuilderFactory.newInstance();
 		}
 
-		public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
+		public void ungetService(Bundle bundle, ServiceRegistration<Object> registration, Object service) {
 			// Do nothing.
 		}
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStop(BundleContext context) throws BundleException {
 		printStats();
 		if (!noXML)
 			PluginParser.releaseXMLParsing();
 		// unregister services
-		for (Iterator iRegistrations = registrations.iterator(); iRegistrations.hasNext();)
-			((ServiceRegistration) iRegistrations.next()).unregister();
+		for (ServiceRegistration<?> registration : registrations)
+			registration.unregister();
 		registrations.clear();
 	}
 
@@ -186,6 +192,9 @@ public class EclipseAdaptorHook implements AdaptorHook, HookConfigurator {
 		// do nothing
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public URLConnection mapLocationToURLConnection(String location) throws IOException {
 		// do nothing
 		return null;
@@ -200,8 +209,8 @@ public class EclipseAdaptorHook implements AdaptorHook, HookConfigurator {
 		return null;
 	}
 
-	public void initialize(BaseAdaptor adaptor) {
-		this.adaptor = adaptor;
+	public void initialize(BaseAdaptor initAdaptor) {
+		this.adaptor = initAdaptor;
 		// EnvironmentInfo has to be initialized first to compute defaults for system context (see bug 88925)
 		EclipseEnvironmentInfo.getDefault();
 		setDebugOptions();
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java
index fd545a0..a4106fd 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,7 @@ public class EclipseAppLauncher implements ApplicationLauncher {
 	private void findRunnableService() {
 		// look for a ParameterizedRunnable registered as a service by runtimes (3.0, 3.1)
 		String appClass = ParameterizedRunnable.class.getName();
-		ServiceReference[] runRefs = null;
+		ServiceReference<?>[] runRefs = null;
 		try {
 			runRefs = context.getServiceReferences(ParameterizedRunnable.class.getName(), "(&(objectClass=" + appClass + ")(eclipse.application=*))"); //$NON-NLS-1$//$NON-NLS-2$
 		} catch (InvalidSyntaxException e) {
@@ -118,12 +118,12 @@ public class EclipseAppLauncher implements ApplicationLauncher {
 		}
 	}
 
-	public void launch(ParameterizedRunnable app, Object appContext) {
+	public void launch(ParameterizedRunnable app, Object applicationContext) {
 		waitForAppLock.acquire(-1); // clear out any pending apps notifications
 		if (!runningLock.acquire(-1)) // check to see if an application is currently running
 			throw new IllegalStateException("An application is aready running."); //$NON-NLS-1$
 		this.runnable = app;
-		this.appContext = appContext;
+		this.appContext = applicationContext;
 		waitForAppLock.release(); // notify the main thread to launch an application.
 		runningLock.release(); // release the running lock
 	}
@@ -146,7 +146,7 @@ public class EclipseAppLauncher implements ApplicationLauncher {
 	 * exists that can be used to relaunch the default application.
 	 */
 	public Object reStart(Object argument) throws Exception {
-		ServiceReference ref[] = null;
+		ServiceReference<?> ref[] = null;
 		ref = context.getServiceReferences("org.osgi.service.application.ApplicationDescriptor", "(eclipse.application.default=true)"); //$NON-NLS-1$//$NON-NLS-2$
 		if (ref != null && ref.length > 0) {
 			Object defaultApp = context.getService(ref[0]);
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseClassLoadingHook.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseClassLoadingHook.java
index 87c862d..c243078 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseClassLoadingHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseClassLoadingHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ package org.eclipse.core.runtime.internal.adaptor;
 import java.io.File;
 import java.security.ProtectionDomain;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 import org.eclipse.osgi.baseadaptor.*;
@@ -44,7 +45,7 @@ public class EclipseClassLoadingHook implements ClassLoadingHook, HookConfigurat
 	}
 
 	private static String[] buildLibraryVariants() {
-		ArrayList result = new ArrayList();
+		List<String> result = new ArrayList<String>();
 		EclipseEnvironmentInfo info = EclipseEnvironmentInfo.getDefault();
 		result.add("ws/" + info.getWS() + "/"); //$NON-NLS-1$ //$NON-NLS-2$
 		result.add("os/" + info.getOS() + "/" + info.getOSArch() + "/"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -57,7 +58,7 @@ public class EclipseClassLoadingHook implements ClassLoadingHook, HookConfigurat
 			nl = (i < 0) ? "" : nl.substring(0, i); //$NON-NLS-1$
 		}
 		result.add(""); //$NON-NLS-1$
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
 	public byte[] processClass(String name, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
@@ -127,7 +128,7 @@ public class EclipseClassLoadingHook implements ClassLoadingHook, HookConfigurat
 		return null;
 	}
 
-	public boolean addClassPathEntry(ArrayList cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain) {
+	public boolean addClassPathEntry(ArrayList<ClasspathEntry> cpEntries, String cp, ClasspathManager hostmanager, BaseData sourcedata, ProtectionDomain sourcedomain) {
 		String var = hasPrefix(cp);
 		if (var != null)
 			// find internal library using eclipse predefined vars
@@ -144,7 +145,7 @@ public class EclipseClassLoadingHook implements ClassLoadingHook, HookConfigurat
 		return false;
 	}
 
-	private boolean addInternalClassPath(String var, ArrayList cpEntries, String cp, ClasspathManager hostloader, BaseData sourcedata, ProtectionDomain sourcedomain) {
+	private boolean addInternalClassPath(String var, ArrayList<ClasspathEntry> cpEntries, String cp, ClasspathManager hostloader, BaseData sourcedata, ProtectionDomain sourcedomain) {
 		if (var.equals("ws")) //$NON-NLS-1$
 			return ClasspathManager.addClassPathEntry(cpEntries, "ws/" + EclipseEnvironmentInfo.getDefault().getWS() + cp.substring(4), hostloader, sourcedata, sourcedomain); //$NON-NLS-1$
 		if (var.equals("os")) //$NON-NLS-1$
@@ -170,7 +171,7 @@ public class EclipseClassLoadingHook implements ClassLoadingHook, HookConfigurat
 	}
 
 	private static String[] buildNLJarVariants(String nl) {
-		ArrayList result = new ArrayList();
+		List<String> result = new ArrayList<String>();
 		nl = nl.replace('_', '/');
 		while (nl.length() > 0) {
 			result.add("nl/" + nl + "/"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -178,10 +179,10 @@ public class EclipseClassLoadingHook implements ClassLoadingHook, HookConfigurat
 			nl = (i < 0) ? "" : nl.substring(0, i); //$NON-NLS-1$
 		}
 		result.add(""); //$NON-NLS-1$
-		return (String[]) result.toArray(new String[result.size()]);
+		return result.toArray(new String[result.size()]);
 	}
 
-	public void recordClassDefine(String name, Class clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
+	public void recordClassDefine(String name, Class<?> clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
 		// do nothing
 	}
 
@@ -232,12 +233,11 @@ public class EclipseClassLoadingHook implements ClassLoadingHook, HookConfigurat
 	}
 
 	public BaseClassLoader createClassLoader(ClassLoader parent, ClassLoaderDelegate delegate, BundleProtectionDomain domain, BaseData data, String[] bundleclasspath) {
-		// TODO Auto-generated method stub
+		// do nothing
 		return null;
 	}
 
 	public void initializedClassLoader(BaseClassLoader baseClassLoader, BaseData data) {
-		// TODO Auto-generated method stub
-
+		// do nothing
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseCommandProvider.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseCommandProvider.java
index 747af00..9647edf 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseCommandProvider.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseCommandProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.core.runtime.internal.adaptor;
 
+import java.util.*;
+import java.util.Map.Entry;
 import org.eclipse.osgi.framework.console.CommandInterpreter;
 import org.eclipse.osgi.framework.console.CommandProvider;
 import org.eclipse.osgi.service.resolver.*;
@@ -21,30 +23,70 @@ import org.osgi.framework.ServiceReference;
  * Internal class.
  */
 public class EclipseCommandProvider implements CommandProvider {
-
+	public static final String NEW_LINE = "\r\n"; //$NON-NLS-1$
+	public static final String TAB = "\t"; //$NON-NLS-1$
 	private static final String POLICY_CONSOLE = "org.eclipse.osgi.framework.console"; //$NON-NLS-1$
 	private PlatformAdmin platformAdmin;
 	private BundleContext context;
 
+	// holds the mapping between command name and command description
+	private Map<String, String> commandsHelp = null;
+
 	public EclipseCommandProvider(BundleContext context) {
 		this.context = context;
 	}
 
 	public String getHelp() {
+		return getHelp(null);
+	}
+
+	/* Returns either the help message for a particular command, 
+	 * or the help messages for all commands (if commandName is not specified)*/
+	private String getHelp(String commandName) {
 		StringBuffer help = new StringBuffer(512);
+
+		if (commandsHelp == null) {
+			initializeCommandsHelp();
+		}
+
+		if (commandName != null) {
+			if (commandsHelp.containsKey(commandName)) {
+				addCommand(commandName, commandsHelp.get(commandName), help);
+			}
+			return help.toString();
+		}
+
+		addHeader(EclipseAdaptorMsg.ECLIPSE_CONSOLE_COMMANDS_HEADER, help);
+		for (Entry<String, String> entry : commandsHelp.entrySet()) {
+			addCommand(entry.getKey(), entry.getValue(), help);
+		}
+
+		return help.toString();
+	}
+
+	private void initializeCommandsHelp() {
+		commandsHelp = new LinkedHashMap<String, String>();
+		commandsHelp.put("diag", EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_DIAG_COMMAND_DESCRIPTION); //$NON-NLS-1$
+		commandsHelp.put("enableBundle", EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_ENABLE_COMMAND_DESCRIPTION); //$NON-NLS-1$
+		commandsHelp.put("disableBundle", EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_DISABLE_COMMAND_DESCRIPTION); //$NON-NLS-1$
+		commandsHelp.put("disabledBundles", EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_LD_COMMAND_DESCRIPTION); //$NON-NLS-1$
+	}
+
+	/** Private helper method for getHelp.  Formats the help headers. */
+	private void addHeader(String header, StringBuffer help) {
 		help.append("---"); //$NON-NLS-1$
-		help.append(EclipseAdaptorMsg.ECLIPSE_CONSOLE_COMMANDS_HEADER);
+		help.append(header);
 		help.append("---"); //$NON-NLS-1$
-		help.append(EclipseAdaptorMsg.NEW_LINE);
-		help.append("\tdiag - " + EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_DIAG_COMMAND_DESCRIPTION);//$NON-NLS-1$
-		help.append(EclipseAdaptorMsg.NEW_LINE);
-		help.append("\tenableBundle - " + EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_ENABLE_COMMAND_DESCRIPTION);//$NON-NLS-1$
-		help.append(EclipseAdaptorMsg.NEW_LINE);
-		help.append("\tdisableBundle - " + EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_DISABLE_COMMAND_DESCRIPTION);//$NON-NLS-1$
-		help.append(EclipseAdaptorMsg.NEW_LINE);
-		help.append("\tdisabledBundles - " + EclipseAdaptorMsg.ECLIPSE_CONSOLE_HELP_LD_COMMAND_DESCRIPTION);//$NON-NLS-1$
-		help.append(EclipseAdaptorMsg.NEW_LINE);
-		return help.toString();
+		help.append(NEW_LINE);
+	}
+
+	/** Private helper method for getHelp.  Formats the command descriptions. */
+	private void addCommand(String command, String description, StringBuffer help) {
+		help.append(TAB);
+		help.append(command);
+		help.append(" - "); //$NON-NLS-1$
+		help.append(description);
+		help.append(NEW_LINE);
 	}
 
 	private BundleDescription getBundleDescriptionFromToken(State state, String token) {
@@ -61,7 +103,7 @@ public class EclipseCommandProvider implements CommandProvider {
 
 	private PlatformAdmin getPlatformAdmin(CommandInterpreter ci) {
 		if (platformAdmin == null) {
-			ServiceReference platformAdminRef = context.getServiceReference(PlatformAdmin.class.getName());
+			ServiceReference<?> platformAdminRef = context.getServiceReference(PlatformAdmin.class.getName());
 			if (platformAdminRef == null) {
 				ci.print("  "); //$NON-NLS-1$
 				ci.println(EclipseAdaptorMsg.ECLIPSE_CONSOLE_NO_CONSTRAINTS_NO_PLATFORM_ADMIN_MESSAGE);
@@ -73,7 +115,7 @@ public class EclipseCommandProvider implements CommandProvider {
 	}
 
 	private void ungetPlatformAdmin() {
-		ServiceReference platformAdminRef = context.getServiceReference(PlatformAdmin.class.getName());
+		ServiceReference<?> platformAdminRef = context.getServiceReference(PlatformAdmin.class.getName());
 		context.ungetService(platformAdminRef);
 	}
 
@@ -214,6 +256,21 @@ public class EclipseCommandProvider implements CommandProvider {
 		}
 	}
 
+	/**
+	 * Handles the help command
+	 * 
+	 * @param intp
+	 * @return description for a particular command or false if there is no command with the specified name
+	 */
+	public Object _help(CommandInterpreter intp) {
+		String commandName = intp.nextArgument();
+		if (commandName == null) {
+			return false;
+		}
+		String help = getHelp(commandName);
+		return help.length() > 0 ? help : false;
+	}
+
 	private String formatBundleName(BundleDescription b) {
 		String label = b.getSymbolicName();
 		if (label == null || label.length() == 0)
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseEnvironmentInfo.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseEnvironmentInfo.java
index 90a5371..0d091d7 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseEnvironmentInfo.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseEnvironmentInfo.java
@@ -186,21 +186,21 @@ public class EclipseEnvironmentInfo implements EnvironmentInfo {
 		EclipseEnvironmentInfo.frameworkArgs = frameworkArgs;
 	}
 
-	public static String guessWS(String os) {
+	public static String guessWS(String osName) {
 		// setup default values for known OSes if nothing was specified
-		if (os.equals(Constants.OS_WIN32))
+		if (osName.equals(Constants.OS_WIN32))
 			return Constants.WS_WIN32;
-		if (os.equals(Constants.OS_LINUX))
+		if (osName.equals(Constants.OS_LINUX))
 			return Constants.WS_GTK;
-		if (os.equals(Constants.OS_MACOSX))
+		if (osName.equals(Constants.OS_MACOSX))
 			return Constants.WS_COCOA;
-		if (os.equals(Constants.OS_HPUX))
+		if (osName.equals(Constants.OS_HPUX))
 			return Constants.WS_MOTIF;
-		if (os.equals(Constants.OS_AIX))
+		if (osName.equals(Constants.OS_AIX))
 			return Constants.WS_MOTIF;
-		if (os.equals(Constants.OS_SOLARIS))
+		if (osName.equals(Constants.OS_SOLARIS))
 			return Constants.WS_GTK;
-		if (os.equals(Constants.OS_QNX))
+		if (osName.equals(Constants.OS_QNX))
 			return Constants.WS_PHOTON;
 		return Constants.WS_UNKNOWN;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java
index c25c5f5..afad881 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,10 +28,16 @@ public class EclipseErrorHandler implements AdaptorHook, HookConfigurator {
 	private static final String PROP_EXITONERROR = "eclipse.exitOnError"; //$NON-NLS-1$
 	private BaseAdaptor adaptor;
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStart(BundleContext context) throws BundleException {
 		// do nothing
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStop(BundleContext context) throws BundleException {
 		// do nothing
 	}
@@ -44,6 +50,9 @@ public class EclipseErrorHandler implements AdaptorHook, HookConfigurator {
 		// do nothing
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public URLConnection mapLocationToURLConnection(String location) throws IOException {
 		// do nothing
 		return null;
@@ -98,7 +107,7 @@ public class EclipseErrorHandler implements AdaptorHook, HookConfigurator {
 		return null;
 	}
 
-	public void initialize(BaseAdaptor adaptor) {
-		this.adaptor = adaptor;
+	public void initialize(BaseAdaptor initAdaptor) {
+		this.adaptor = initAdaptor;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java
index d9a4df6..0c62e4d 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,11 +37,11 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 	private static final boolean throwErrorOnFailedStart = "true".equals(FrameworkProperties.getProperty("osgi.compatibility.errorOnFailedStart", "true")); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
 	private BaseAdaptor adaptor;
 	// holds the current activation trigger class and the ClasspathManagers that need to be activated
-	private ThreadLocal activationStack = new ThreadLocal();
+	private ThreadLocal<List<Object>> activationStack = new ThreadLocal<List<Object>>();
 	// used to store exceptions that occurred while activating a bundle
 	// keyed by ClasspathManager->Exception
 	// WeakHashMap is used to prevent pinning the ClasspathManager objects.
-	private final Map errors = Collections.synchronizedMap(new WeakHashMap());
+	private final Map<ClasspathManager, TerminatingClassNotFoundException> errors = Collections.synchronizedMap(new WeakHashMap<ClasspathManager, TerminatingClassNotFoundException>());
 
 	public void preFindLocalClass(String name, ClasspathManager manager) throws ClassNotFoundException {
 		AbstractBundle bundle = (AbstractBundle) manager.getBaseData().getBundle();
@@ -53,9 +53,9 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 		// The bundle is not active and does not require activation, just return the class
 		if (!shouldActivateFor(name, manager.getBaseData(), storageHook, manager))
 			return;
-		ArrayList stack = (ArrayList) activationStack.get();
+		List<Object> stack = activationStack.get();
 		if (stack == null) {
-			stack = new ArrayList(6);
+			stack = new ArrayList<Object>(6);
 			activationStack.set(stack);
 		}
 		// the first element in the stack is the name of the trigger class, 
@@ -76,8 +76,8 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 		stack.add(manager);
 	}
 
-	public void postFindLocalClass(String name, Class clazz, ClasspathManager manager) throws ClassNotFoundException {
-		ArrayList stack = (ArrayList) activationStack.get();
+	public void postFindLocalClass(String name, Class<?> clazz, ClasspathManager manager) throws ClassNotFoundException {
+		List<Object> stack = activationStack.get();
 		if (stack == null)
 			return;
 		int size = stack.size();
@@ -94,13 +94,14 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 		for (int i = managers.length - 1; i >= 0; i--) {
 			if (errors.get(managers[i]) != null) {
 				if (throwErrorOnFailedStart)
-					throw (TerminatingClassNotFoundException) errors.get(managers[i]);
+					throw errors.get(managers[i]);
 				continue;
 			}
 
 			// The bundle must be started.
 			// Note that another thread may already be starting this bundle;
-			// In this case we will timeout after 5 seconds and record the BundleException
+			// In this case we will timeout after a default of 5 seconds and record the BundleException
+			long startTime = System.currentTimeMillis();
 			try {
 				// do not persist the start of this bundle
 				managers[i].getBaseClassLoader().getDelegate().setLazyTrigger();
@@ -111,7 +112,7 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 					StatusException status = (StatusException) cause;
 					if ((status.getStatusCode() & StatusException.CODE_ERROR) == 0) {
 						if (status.getStatus() instanceof Thread) {
-							String message = NLS.bind(EclipseAdaptorMsg.ECLIPSE_CLASSLOADER_CONCURRENT_STARTUP, new Object[] {Thread.currentThread(), name, status.getStatus(), bundle, new Integer(5000)});
+							String message = NLS.bind(EclipseAdaptorMsg.ECLIPSE_CLASSLOADER_CONCURRENT_STARTUP, new Object[] {Thread.currentThread(), name, status.getStatus(), bundle, new Long(System.currentTimeMillis() - startTime)});
 							adaptor.getFrameworkLog().log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, FrameworkLogEntry.WARNING, 0, message, 0, e, null));
 						}
 						continue;
@@ -137,7 +138,7 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 		// do nothing
 	}
 
-	public void recordClassDefine(String name, Class clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
+	public void recordClassDefine(String name, Class<?> clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
 		// do nothing
 	}
 
@@ -149,7 +150,7 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 		// Don't activate non-starting bundles
 		if (bundledata.getBundle().getState() == Bundle.RESOLVED) {
 			if (throwErrorOnFailedStart) {
-				TerminatingClassNotFoundException error = (TerminatingClassNotFoundException) errors.get(manager);
+				TerminatingClassNotFoundException error = errors.get(manager);
 				if (error != null)
 					throw error;
 			}
@@ -199,16 +200,22 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 		return null;
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStart(BundleContext context) throws BundleException {
 		// nothing
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStop(BundleContext context) throws BundleException {
 		// nothing
 	}
 
 	public void frameworkStopping(BundleContext context) {
-		if (!Debug.DEBUG || !Debug.DEBUG_ENABLED)
+		if (!Debug.DEBUG_ENABLED)
 			return;
 
 		BundleDescription[] allBundles = adaptor.getState().getResolvedBundles();
@@ -226,6 +233,9 @@ public class EclipseLazyStarter implements ClassLoadingStatsHook, AdaptorHook, H
 		this.adaptor = baseAdaptor;
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public URLConnection mapLocationToURLConnection(String location) throws IOException {
 		// do nothing
 		return null;
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogFactory.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogFactory.java
new file mode 100644
index 0000000..416bbda
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogFactory.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.core.runtime.internal.adaptor;
+
+import java.io.*;
+import org.eclipse.equinox.log.Logger;
+import org.eclipse.equinox.log.internal.LogServiceManager;
+import org.eclipse.osgi.framework.log.FrameworkLog;
+import org.eclipse.osgi.framework.log.FrameworkLogEntry;
+import org.osgi.framework.*;
+import org.osgi.service.log.LogService;
+
+public class EclipseLogFactory implements ServiceFactory<FrameworkLog> {
+	final EclipseLogWriter defaultWriter;
+	final LogServiceManager logManager;
+
+	public EclipseLogFactory(EclipseLogWriter defaultWriter, LogServiceManager logManager) {
+		this.defaultWriter = defaultWriter;
+		this.logManager = logManager;
+	}
+
+	public FrameworkLog getService(final Bundle bundle, ServiceRegistration<FrameworkLog> registration) {
+		return createFrameworkLog(bundle, defaultWriter);
+	}
+
+	FrameworkLog createFrameworkLog(Bundle bundle, EclipseLogWriter eclipseWriter) {
+		final EclipseLogWriter logWriter = eclipseWriter == null ? defaultWriter : eclipseWriter;
+		final Logger logger = bundle == null ? logManager.getSystemBundleLog().getLogger(eclipseWriter.getLoggerName()) : logManager.getSystemBundleLog().getLogger(bundle, logWriter.getLoggerName());
+		return new FrameworkLog() {
+
+			public void setWriter(Writer newWriter, boolean append) {
+				logWriter.setWriter(newWriter, append);
+			}
+
+			public void setFile(File newFile, boolean append) throws IOException {
+				logWriter.setFile(newFile, append);
+			}
+
+			public void setConsoleLog(boolean consoleLog) {
+				logWriter.setConsoleLog(consoleLog);
+			}
+
+			public void log(FrameworkLogEntry logEntry) {
+				logger.log(logEntry, convertLevel(logEntry), logEntry.getMessage(), logEntry.getThrowable());
+			}
+
+			public void log(FrameworkEvent frameworkEvent) {
+				Bundle b = frameworkEvent.getBundle();
+				Throwable t = frameworkEvent.getThrowable();
+				String entry = b.getSymbolicName() == null ? b.getLocation() : b.getSymbolicName();
+				int severity;
+				switch (frameworkEvent.getType()) {
+					case FrameworkEvent.INFO :
+						severity = FrameworkLogEntry.INFO;
+						break;
+					case FrameworkEvent.ERROR :
+						severity = FrameworkLogEntry.ERROR;
+						break;
+					case FrameworkEvent.WARNING :
+						severity = FrameworkLogEntry.WARNING;
+						break;
+					default :
+						severity = FrameworkLogEntry.OK;
+				}
+				FrameworkLogEntry logEntry = new FrameworkLogEntry(entry, severity, 0, "", 0, t, null); //$NON-NLS-1$
+				log(logEntry);
+			}
+
+			public File getFile() {
+				return logWriter.getFile();
+			}
+
+			public void close() {
+				logWriter.close();
+			}
+		};
+	}
+
+	public void ungetService(Bundle bundle, ServiceRegistration<FrameworkLog> registration, FrameworkLog service) {
+		// nothing
+	}
+
+	static int convertLevel(FrameworkLogEntry logEntry) {
+		switch (logEntry.getSeverity()) {
+			case FrameworkLogEntry.ERROR :
+				return LogService.LOG_ERROR;
+			case FrameworkLogEntry.WARNING :
+				return LogService.LOG_WARNING;
+			case FrameworkLogEntry.INFO :
+				return LogService.LOG_INFO;
+			case FrameworkLogEntry.OK :
+				return LogService.LOG_DEBUG;
+			case FrameworkLogEntry.CANCEL :
+			default :
+				return 32; // unknown
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java
index fbe4dc7..f4555e6 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,9 @@ package org.eclipse.core.runtime.internal.adaptor;
 import java.io.*;
 import java.net.URLConnection;
 import java.util.*;
-import org.eclipse.core.runtime.adaptor.*;
+import org.eclipse.core.runtime.adaptor.EclipseStarter;
+import org.eclipse.core.runtime.adaptor.LocationManager;
+import org.eclipse.equinox.log.internal.LogServiceManager;
 import org.eclipse.osgi.baseadaptor.*;
 import org.eclipse.osgi.baseadaptor.hooks.AdaptorHook;
 import org.eclipse.osgi.framework.internal.core.Constants;
@@ -22,29 +24,82 @@ import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil;
 import org.eclipse.osgi.service.datalocation.Location;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
+import org.osgi.framework.*;
 
 public class EclipseLogHook implements HookConfigurator, AdaptorHook {
+	static final String EQUINOX_LOGGER_NAME = "org.eclipse.equinox.logger"; //$NON-NLS-1$
+	static final String PERF_LOGGER_NAME = "org.eclipse.performance.logger"; //$NON-NLS-1$
+	private static final String PROP_LOG_ENABLED = "eclipse.log.enabled"; //$NON-NLS-1$
+
 	// The eclipse log file extension */
 	private static final String LOG_EXT = ".log"; //$NON-NLS-1$
-	BaseAdaptor adaptor;
+	private final LogServiceManager logServiceManager;
+	private final EclipseLogFactory eclipseLogFactory;
+	private final EclipseLogWriter logWriter;
+	private final EclipseLogWriter perfWriter;
+
+	public EclipseLogHook() {
+		String logFileProp = FrameworkProperties.getProperty(EclipseStarter.PROP_LOGFILE);
+		boolean enabled = "true".equals(FrameworkProperties.getProperty(PROP_LOG_ENABLED, "true")); //$NON-NLS-1$ //$NON-NLS-2$
+		if (logFileProp != null) {
+			logWriter = new EclipseLogWriter(new File(logFileProp), EQUINOX_LOGGER_NAME, enabled);
+		} else {
+			Location location = LocationManager.getConfigurationLocation();
+			File configAreaDirectory = null;
+			if (location != null)
+				// TODO assumes the URL is a file: url
+				configAreaDirectory = new File(location.getURL().getFile());
+
+			if (configAreaDirectory != null) {
+				String logFileName = Long.toString(System.currentTimeMillis()) + EclipseLogHook.LOG_EXT;
+				File logFile = new File(configAreaDirectory, logFileName);
+				FrameworkProperties.setProperty(EclipseStarter.PROP_LOGFILE, logFile.getAbsolutePath());
+				logWriter = new EclipseLogWriter(logFile, EQUINOX_LOGGER_NAME, enabled);
+			} else
+				logWriter = new EclipseLogWriter((Writer) null, EQUINOX_LOGGER_NAME, enabled);
+		}
+
+		File logFile = logWriter.getFile();
+		if (logFile != null) {
+			File perfLogFile = new File(logFile.getParentFile(), "performance.log"); //$NON-NLS-1$
+			perfWriter = new EclipseLogWriter(perfLogFile, PERF_LOGGER_NAME, true);
+		} else {
+			perfWriter = new EclipseLogWriter((Writer) null, PERF_LOGGER_NAME, true);
+		}
+		if ("true".equals(FrameworkProperties.getProperty(EclipseStarter.PROP_CONSOLE_LOG))) //$NON-NLS-1$
+			logWriter.setConsoleLog(true);
+		logServiceManager = new LogServiceManager(logWriter, perfWriter);
+		eclipseLogFactory = new EclipseLogFactory(logWriter, logServiceManager);
+
+	}
+
+	private ServiceRegistration<?> frameworkLogReg;
+	private ServiceRegistration<?> perfLogReg;
 
 	public void addHooks(HookRegistry hookRegistry) {
 		hookRegistry.addAdaptorHook(this);
 	}
 
-	public void initialize(BaseAdaptor adaptor) {
-		this.adaptor = adaptor;
+	public void initialize(BaseAdaptor initAdaptor) {
+		// Nothing
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStart(BundleContext context) throws BundleException {
-		AdaptorUtil.register(FrameworkLog.class.getName(), adaptor.getFrameworkLog(), context);
-		registerPerformanceLog(context);
+		logServiceManager.start(context);
+		frameworkLogReg = AdaptorUtil.register(FrameworkLog.class.getName(), eclipseLogFactory, context);
+		perfLogReg = registerPerformanceLog(context);
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStop(BundleContext context) throws BundleException {
-		// TODO should unregister service registered a frameworkStart
+		frameworkLogReg.unregister();
+		perfLogReg.unregister();
+		logServiceManager.stop(context);
 	}
 
 	public void frameworkStopping(BundleContext context) {
@@ -56,65 +111,37 @@ public class EclipseLogHook implements HookConfigurator, AdaptorHook {
 		// do nothing
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public URLConnection mapLocationToURLConnection(String location) throws IOException {
 		// do nothing
 		return null;
 	}
 
 	public void handleRuntimeError(Throwable error) {
-		// TODO Auto-generated method stub
-
+		// do nothing
 	}
 
 	public FrameworkLog createFrameworkLog() {
-		FrameworkLog frameworkLog;
-		String logFileProp = FrameworkProperties.getProperty(EclipseStarter.PROP_LOGFILE);
-		if (logFileProp != null) {
-			frameworkLog = new EclipseLog(new File(logFileProp));
-		} else {
-			Location location = LocationManager.getConfigurationLocation();
-			File configAreaDirectory = null;
-			if (location != null)
-				// TODO assumes the URL is a file: url
-				configAreaDirectory = new File(location.getURL().getFile());
-
-			if (configAreaDirectory != null) {
-				String logFileName = Long.toString(System.currentTimeMillis()) + EclipseLogHook.LOG_EXT;
-				File logFile = new File(configAreaDirectory, logFileName);
-				FrameworkProperties.setProperty(EclipseStarter.PROP_LOGFILE, logFile.getAbsolutePath());
-				frameworkLog = new EclipseLog(logFile);
-			} else
-				frameworkLog = new EclipseLog();
-		}
-		if ("true".equals(FrameworkProperties.getProperty(EclipseStarter.PROP_CONSOLE_LOG))) //$NON-NLS-1$
-			frameworkLog.setConsoleLog(true);
-		return frameworkLog;
+		return eclipseLogFactory.createFrameworkLog(null, logWriter);
 	}
 
-	private void registerPerformanceLog(BundleContext context) {
-		Object service = createPerformanceLog();
+	private ServiceRegistration<?> registerPerformanceLog(BundleContext context) {
+		Object service = createPerformanceLog(context.getBundle());
 		String serviceName = FrameworkLog.class.getName();
-		Hashtable serviceProperties = new Hashtable(7);
-		Dictionary headers = context.getBundle().getHeaders();
+		Dictionary<String, Object> serviceProperties = new Hashtable<String, Object>(7);
+		Dictionary<String, String> headers = context.getBundle().getHeaders();
 
 		serviceProperties.put(Constants.SERVICE_VENDOR, headers.get(Constants.BUNDLE_VENDOR));
 		serviceProperties.put(Constants.SERVICE_RANKING, new Integer(Integer.MIN_VALUE));
 		serviceProperties.put(Constants.SERVICE_PID, context.getBundle().getBundleId() + '.' + service.getClass().getName());
 		serviceProperties.put(FrameworkLog.SERVICE_PERFORMANCE, Boolean.TRUE.toString());
 
-		context.registerService(serviceName, service, serviceProperties);
+		return context.registerService(serviceName, service, serviceProperties);
 	}
 
-	private FrameworkLog createPerformanceLog() {
-		String logFileProp = FrameworkProperties.getProperty(EclipseStarter.PROP_LOGFILE);
-		if (logFileProp != null) {
-			int lastSlash = logFileProp.lastIndexOf(File.separatorChar);
-			if (lastSlash > 0) {
-				String logFile = logFileProp.substring(0, lastSlash + 1) + "performance.log"; //$NON-NLS-1$
-				return new EclipseLog(new File(logFile));
-			}
-		}
-		//if all else fails, write to std err
-		return new EclipseLog(new PrintWriter(System.err));
+	private FrameworkLog createPerformanceLog(Bundle systemBundle) {
+		return eclipseLogFactory.createFrameworkLog(systemBundle, perfWriter);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogWriter.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogWriter.java
new file mode 100755
index 0000000..d0bb6ff
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogWriter.java
@@ -0,0 +1,719 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.runtime.internal.adaptor;
+
+import java.io.*;
+import java.lang.reflect.InvocationTargetException;
+import java.security.AccessController;
+import java.util.Calendar;
+import java.util.Date;
+import org.eclipse.core.runtime.adaptor.EclipseStarter;
+import org.eclipse.equinox.log.*;
+import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
+import org.eclipse.osgi.framework.log.FrameworkLogEntry;
+import org.eclipse.osgi.framework.util.SecureAction;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogService;
+
+public class EclipseLogWriter implements SynchronousLogListener, LogFilter {
+	private static final String PASSWORD = "-password"; //$NON-NLS-1$	
+	/** The session tag */
+	private static final String SESSION = "!SESSION"; //$NON-NLS-1$
+	/** The entry tag */
+	private static final String ENTRY = "!ENTRY"; //$NON-NLS-1$
+	/** The sub-entry tag */
+	private static final String SUBENTRY = "!SUBENTRY"; //$NON-NLS-1$
+	/** The message tag */
+	private static final String MESSAGE = "!MESSAGE"; //$NON-NLS-1$
+	/** The stacktrace tag */
+	private static final String STACK = "!STACK"; //$NON-NLS-1$
+
+	/** The line separator used in the log output */
+	private static final String LINE_SEPARATOR;
+	static {
+		String s = System.getProperty("line.separator"); //$NON-NLS-1$
+		LINE_SEPARATOR = s == null ? "\n" : s; //$NON-NLS-1$
+	}
+	//Constants for rotating log file
+	/** The default size a log file can grow before it is rotated */
+	private static final int DEFAULT_LOG_SIZE = 1000;
+	/** The default number of backup log files */
+	private static final int DEFAULT_LOG_FILES = 10;
+	/** The minimum size limit for log rotation */
+	private static final int LOG_SIZE_MIN = 10;
+
+	/** The system property used to specify the log level */
+	private static final String PROP_LOG_LEVEL = "eclipse.log.level"; //$NON-NLS-1$
+	/** The system property used to specify size a log file can grow before it is rotated */
+	private static final String PROP_LOG_SIZE_MAX = "eclipse.log.size.max"; //$NON-NLS-1$
+	/** The system property used to specify the maximim number of backup log files to use */
+	private static final String PROP_LOG_FILE_MAX = "eclipse.log.backup.max"; //$NON-NLS-1$
+	/** The extension used for log files */
+	private static final String LOG_EXT = ".log"; //$NON-NLS-1$
+	/** The extension markup to use for backup log files*/
+	private static final String BACKUP_MARK = ".bak_"; //$NON-NLS-1$
+
+	private static final SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
+
+	/** Indicates if the console messages should be printed to the console (System.out) */
+	private boolean consoleLog = false;
+	/** Indicates if the next log message is part of a new session */
+	private boolean newSession = true;
+	/**
+	 * The File object to store messages.  This value may be null.
+	 */
+	private File outFile;
+
+	/**
+	 * The Writer to log messages to.
+	 */
+	private Writer writer;
+
+	private final String loggerName;
+	private final boolean enabled;
+
+	int maxLogSize = DEFAULT_LOG_SIZE; // The value is in KB.
+	int maxLogFiles = DEFAULT_LOG_FILES;
+	int backupIdx = 0;
+
+	private int logLevel = FrameworkLogEntry.OK;
+
+	/**
+	 * Constructs an EclipseLog which uses the specified File to log messages to
+	 * @param outFile a file to log messages to
+	 */
+	public EclipseLogWriter(File outFile, String loggerName, boolean enabled) {
+		this.outFile = outFile;
+		this.writer = null;
+		this.loggerName = loggerName;
+		this.enabled = enabled;
+		readLogProperties();
+	}
+
+	/**
+	 * Constructs an EclipseLog which uses the specified Writer to log messages to
+	 * @param writer a writer to log messages to
+	 */
+	public EclipseLogWriter(Writer writer, String loggerName, boolean enabled) {
+		if (writer == null)
+			// log to System.err by default
+			this.writer = logForStream(System.err);
+		else
+			this.writer = writer;
+		this.loggerName = loggerName;
+		this.enabled = enabled;
+	}
+
+	private Throwable getRoot(Throwable t) {
+		Throwable root = null;
+		if (t instanceof BundleException)
+			root = ((BundleException) t).getNestedException();
+		if (t instanceof InvocationTargetException)
+			root = ((InvocationTargetException) t).getTargetException();
+		// skip inner InvocationTargetExceptions and BundleExceptions
+		if (root instanceof InvocationTargetException || root instanceof BundleException) {
+			Throwable deeplyNested = getRoot(root);
+			if (deeplyNested != null)
+				// if we have something more specific, use it, otherwise keep what we have
+				root = deeplyNested;
+		}
+		return root;
+	}
+
+	/**
+	 * Helper method for writing out argument arrays.
+	 * @param header the header
+	 * @param args the list of arguments
+	 */
+	private void writeArgs(String header, String[] args) throws IOException {
+		if (args == null || args.length == 0)
+			return;
+		write(header);
+		for (int i = 0; i < args.length; i++) {
+			//mask out the password argument for security
+			if (i > 0 && PASSWORD.equals(args[i - 1]))
+				write(" (omitted)"); //$NON-NLS-1$
+			else
+				write(" " + args[i]); //$NON-NLS-1$
+		}
+		writeln();
+	}
+
+	/**
+	 * Returns the session timestamp.  This is the time the platform was started
+	 * @return the session timestamp
+	 */
+	private String getSessionTimestamp() {
+		// Main should have set the session start-up timestamp so return that. 
+		// Return the "now" time if not available.
+		String ts = FrameworkProperties.getProperty("eclipse.startTime"); //$NON-NLS-1$
+		if (ts != null) {
+			try {
+				return getDate(new Date(Long.parseLong(ts)));
+			} catch (NumberFormatException e) {
+				// fall through and use the timestamp from right now
+			}
+		}
+		return getDate(new Date());
+	}
+
+	/**
+	 * Writes the session
+	 * @throws IOException if an error occurs writing to the log
+	 */
+	private void writeSession() throws IOException {
+		write(SESSION);
+		writeSpace();
+		String date = getSessionTimestamp();
+		write(date);
+		writeSpace();
+		for (int i = SESSION.length() + date.length(); i < 78; i++) {
+			write("-"); //$NON-NLS-1$
+		}
+		writeln();
+		// Write out certain values found in System.getProperties()
+		try {
+			String key = "eclipse.buildId"; //$NON-NLS-1$
+			String value = FrameworkProperties.getProperty(key, "unknown"); //$NON-NLS-1$
+			writeln(key + "=" + value); //$NON-NLS-1$
+
+			key = "java.fullversion"; //$NON-NLS-1$
+			value = System.getProperty(key);
+			if (value == null) {
+				key = "java.version"; //$NON-NLS-1$
+				value = System.getProperty(key);
+				writeln(key + "=" + value); //$NON-NLS-1$
+				key = "java.vendor"; //$NON-NLS-1$
+				value = System.getProperty(key);
+				writeln(key + "=" + value); //$NON-NLS-1$
+			} else {
+				writeln(key + "=" + value); //$NON-NLS-1$
+			}
+		} catch (Exception e) {
+			// If we're not allowed to get the values of these properties
+			// then just skip over them.
+		}
+		// The Bootloader has some information that we might be interested in.
+		write("BootLoader constants: OS=" + EclipseEnvironmentInfo.getDefault().getOS()); //$NON-NLS-1$
+		write(", ARCH=" + EclipseEnvironmentInfo.getDefault().getOSArch()); //$NON-NLS-1$
+		write(", WS=" + EclipseEnvironmentInfo.getDefault().getWS()); //$NON-NLS-1$
+		writeln(", NL=" + EclipseEnvironmentInfo.getDefault().getNL()); //$NON-NLS-1$
+		// Add the command-line arguments used to invoke the platform 
+		// XXX: this includes runtime-private arguments - should we do that?
+		writeArgs("Framework arguments: ", EclipseEnvironmentInfo.getDefault().getNonFrameworkArgs()); //$NON-NLS-1$
+		writeArgs("Command-line arguments: ", EclipseEnvironmentInfo.getDefault().getCommandLineArgs()); //$NON-NLS-1$
+	}
+
+	public void close() {
+		try {
+			if (writer != null) {
+				Writer tmpWriter = writer;
+				writer = null;
+				tmpWriter.close();
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * If a File is used to log messages to then the File opened and a Writer is created
+	 * to log messages to.
+	 */
+	private void openFile() {
+		if (writer == null) {
+			if (outFile != null) {
+				try {
+					writer = logForStream(secureAction.getFileOutputStream(outFile, true));
+				} catch (IOException e) {
+					writer = logForStream(System.err);
+				}
+			} else {
+				writer = logForStream(System.err);
+			}
+		}
+	}
+
+	/**
+	 * If a File is used to log messages to then the writer is closed.
+	 */
+	private void closeFile() {
+		if (outFile != null) {
+			if (writer != null) {
+				try {
+					writer.close();
+				} catch (IOException e) {
+					// we cannot log here; just print the stacktrace.
+					e.printStackTrace();
+				}
+				writer = null;
+			}
+		}
+	}
+
+	private synchronized void log(FrameworkLogEntry logEntry) {
+		if (logEntry == null)
+			return;
+		if (!isLoggable(logEntry.getSeverity()))
+			return;
+		try {
+			checkLogFileSize();
+			openFile();
+			if (newSession) {
+				writeSession();
+				newSession = false;
+			}
+			writeLog(0, logEntry);
+			writer.flush();
+		} catch (Exception e) {
+			// any exceptions during logging should be caught 
+			System.err.println("An exception occurred while writing to the platform log:");//$NON-NLS-1$
+			e.printStackTrace(System.err);
+			System.err.println("Logging to the console instead.");//$NON-NLS-1$
+			//we failed to write, so dump log entry to console instead
+			try {
+				writer = logForStream(System.err);
+				writeLog(0, logEntry);
+				writer.flush();
+			} catch (Exception e2) {
+				System.err.println("An exception occurred while logging to the console:");//$NON-NLS-1$
+				e2.printStackTrace(System.err);
+			}
+		} finally {
+			closeFile();
+		}
+	}
+
+	public synchronized void setWriter(Writer newWriter, boolean append) {
+		setOutput(null, newWriter, append);
+	}
+
+	/**
+	 * @throws IOException  
+	 */
+	public synchronized void setFile(File newFile, boolean append) throws IOException {
+		if (newFile != null && !newFile.equals(this.outFile)) {
+			// If it's a new file, then reset.
+			readLogProperties();
+			backupIdx = 0;
+		}
+		setOutput(newFile, null, append);
+		FrameworkProperties.setProperty(EclipseStarter.PROP_LOGFILE, newFile == null ? "" : newFile.getAbsolutePath()); //$NON-NLS-1$
+	}
+
+	public synchronized File getFile() {
+		return outFile;
+	}
+
+	public void setConsoleLog(boolean consoleLog) {
+		this.consoleLog = consoleLog;
+	}
+
+	private void setOutput(File newOutFile, Writer newWriter, boolean append) {
+		if (newOutFile == null || !newOutFile.equals(this.outFile)) {
+			if (this.writer != null) {
+				try {
+					this.writer.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				this.writer = null;
+			}
+			// Append old outFile to newWriter. We only attempt to do this
+			// if the current Writer is backed by a File and this is not
+			// a new session.
+			File oldOutFile = this.outFile;
+			this.outFile = newOutFile;
+			this.writer = newWriter;
+			boolean copyFailed = false;
+			if (append && oldOutFile != null && oldOutFile.isFile()) {
+				Reader fileIn = null;
+				try {
+					openFile();
+					fileIn = new InputStreamReader(secureAction.getFileInputStream(oldOutFile), "UTF-8"); //$NON-NLS-1$
+					copyReader(fileIn, this.writer);
+				} catch (IOException e) {
+					copyFailed = true;
+					e.printStackTrace();
+				} finally {
+					if (fileIn != null) {
+						try {
+							fileIn.close();
+						} catch (IOException e) {
+							e.printStackTrace();
+						}
+						// delete the old file if copying didn't fail
+						if (!copyFailed)
+							oldOutFile.delete();
+					}
+					closeFile();
+				}
+			}
+		}
+	}
+
+	private void copyReader(Reader reader, Writer aWriter) throws IOException {
+		char buffer[] = new char[1024];
+		int count;
+		while ((count = reader.read(buffer, 0, buffer.length)) > 0) {
+			aWriter.write(buffer, 0, count);
+		}
+	}
+
+	/**
+	 * Returns a date string using the correct format for the log.
+	 * @param date the Date to format
+	 * @return a date string.
+	 */
+	private String getDate(Date date) {
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		StringBuffer sb = new StringBuffer();
+		appendPaddedInt(c.get(Calendar.YEAR), 4, sb).append('-');
+		appendPaddedInt(c.get(Calendar.MONTH) + 1, 2, sb).append('-');
+		appendPaddedInt(c.get(Calendar.DAY_OF_MONTH), 2, sb).append(' ');
+		appendPaddedInt(c.get(Calendar.HOUR_OF_DAY), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.MINUTE), 2, sb).append(':');
+		appendPaddedInt(c.get(Calendar.SECOND), 2, sb).append('.');
+		appendPaddedInt(c.get(Calendar.MILLISECOND), 3, sb);
+		return sb.toString();
+	}
+
+	private StringBuffer appendPaddedInt(int value, int pad, StringBuffer buffer) {
+		pad = pad - 1;
+		if (pad == 0)
+			return buffer.append(Integer.toString(value));
+		int padding = (int) Math.pow(10, pad);
+		if (value >= padding)
+			return buffer.append(Integer.toString(value));
+		while (padding > value && padding > 1) {
+			buffer.append('0');
+			padding = padding / 10;
+		}
+		buffer.append(value);
+		return buffer;
+	}
+
+	/**
+	 * Returns a stacktrace string using the correct format for the log
+	 * @param t the Throwable to get the stacktrace for
+	 * @return a stacktrace string
+	 */
+	private String getStackTrace(Throwable t) {
+		if (t == null)
+			return null;
+
+		StringWriter sw = new StringWriter();
+		PrintWriter pw = new PrintWriter(sw);
+
+		t.printStackTrace(pw);
+		// ensure the root exception is fully logged
+		Throwable root = getRoot(t);
+		if (root != null) {
+			pw.println("Root exception:"); //$NON-NLS-1$
+			root.printStackTrace(pw);
+		}
+		return sw.toString();
+	}
+
+	/**
+	 * Returns a Writer for the given OutputStream
+	 * @param output an OutputStream to use for the Writer
+	 * @return a Writer for the given OutputStream
+	 */
+	private Writer logForStream(OutputStream output) {
+		try {
+			return new BufferedWriter(new OutputStreamWriter(output, "UTF-8")); //$NON-NLS-1$
+		} catch (UnsupportedEncodingException e) {
+			return new BufferedWriter(new OutputStreamWriter(output));
+		}
+	}
+
+	/**
+	 * Writes the log entry to the log using the specified depth.  A depth value of 0
+	 * indicates that the log entry is the root entry.  Any value greater than 0 indicates
+	 * a sub-entry.
+	 * @param depth the depth of th entry
+	 * @param entry the entry to log
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void writeLog(int depth, FrameworkLogEntry entry) throws IOException {
+		writeEntry(depth, entry);
+		writeMessage(entry);
+		writeStack(entry);
+
+		FrameworkLogEntry[] children = entry.getChildren();
+		if (children != null) {
+			for (int i = 0; i < children.length; i++) {
+				writeLog(depth + 1, children[i]);
+			}
+		}
+	}
+
+	/**
+	 * Writes the ENTRY or SUBENTRY header for an entry.  A depth value of 0
+	 * indicates that the log entry is the root entry.  Any value greater than 0 indicates
+	 * a sub-entry.
+	 * @param depth the depth of th entry
+	 * @param entry the entry to write the header for
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void writeEntry(int depth, FrameworkLogEntry entry) throws IOException {
+		if (depth == 0) {
+			writeln(); // write a blank line before all !ENTRY tags bug #64406
+			write(ENTRY);
+		} else {
+			write(SUBENTRY);
+			writeSpace();
+			write(Integer.toString(depth));
+		}
+		writeSpace();
+		write(entry.getEntry());
+		writeSpace();
+		write(Integer.toString(entry.getSeverity()));
+		writeSpace();
+		write(Integer.toString(entry.getBundleCode()));
+		writeSpace();
+		write(getDate(new Date()));
+		writeln();
+	}
+
+	/**
+	 * Writes the MESSAGE header to the log for the given entry.
+	 * @param entry the entry to write the message for
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void writeMessage(FrameworkLogEntry entry) throws IOException {
+		write(MESSAGE);
+		writeSpace();
+		writeln(entry.getMessage());
+	}
+
+	/**
+	 * Writes the STACK header to the log for the given entry.
+	 * @param entry the entry to write the stacktrace for
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void writeStack(FrameworkLogEntry entry) throws IOException {
+		Throwable t = entry.getThrowable();
+		if (t != null) {
+			String stack = getStackTrace(t);
+			write(STACK);
+			writeSpace();
+			write(Integer.toString(entry.getStackCode()));
+			writeln();
+			write(stack);
+		}
+	}
+
+	/**
+	 * Writes the given message to the log.
+	 * @param message the message
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void write(String message) throws IOException {
+		if (message != null) {
+			writer.write(message);
+			if (consoleLog)
+				System.out.print(message);
+		}
+	}
+
+	/**
+	 * Writes the given message to the log and a newline.
+	 * @param s the message
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void writeln(String s) throws IOException {
+		write(s);
+		writeln();
+	}
+
+	/**
+	 * Writes a newline log.
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void writeln() throws IOException {
+		write(LINE_SEPARATOR);
+	}
+
+	/**
+	 * Writes a space to the log.
+	 * @throws IOException if any error occurs writing to the log
+	 */
+	private void writeSpace() throws IOException {
+		write(" "); //$NON-NLS-1$
+	}
+
+	/**
+	 * Checks the log file size.  If the log file size reaches the limit then the log 
+	 * is rotated
+	 * @return false if an error occured trying to rotate the log
+	 */
+	private boolean checkLogFileSize() {
+		if (maxLogSize == 0)
+			return true; // no size limitation.
+
+		boolean isBackupOK = true;
+		if (outFile != null) {
+			if ((secureAction.length(outFile) >> 10) > maxLogSize) { // Use KB as file size unit.
+				String logFilename = outFile.getAbsolutePath();
+
+				// Delete old backup file that will be replaced.
+				String backupFilename = ""; //$NON-NLS-1$
+				if (logFilename.toLowerCase().endsWith(LOG_EXT)) {
+					backupFilename = logFilename.substring(0, logFilename.length() - LOG_EXT.length()) + BACKUP_MARK + backupIdx + LOG_EXT;
+				} else {
+					backupFilename = logFilename + BACKUP_MARK + backupIdx;
+				}
+				File backupFile = new File(backupFilename);
+				if (backupFile.exists()) {
+					if (!backupFile.delete()) {
+						System.err.println("Error when trying to delete old log file: " + backupFile.getName());//$NON-NLS-1$ 
+						if (backupFile.renameTo(new File(backupFile.getAbsolutePath() + System.currentTimeMillis()))) {
+							System.err.println("So we rename it to filename: " + backupFile.getName()); //$NON-NLS-1$
+						} else {
+							System.err.println("And we also cannot rename it!"); //$NON-NLS-1$
+							isBackupOK = false;
+						}
+					}
+				}
+
+				// Rename current log file to backup one.
+				boolean isRenameOK = outFile.renameTo(backupFile);
+				if (!isRenameOK) {
+					System.err.println("Error when trying to rename log file to backup one."); //$NON-NLS-1$
+					isBackupOK = false;
+				}
+				File newFile = new File(logFilename);
+				setOutput(newFile, null, false);
+
+				// Write a new SESSION header to new log file.
+				openFile();
+				try {
+					writeSession();
+					writeln();
+					writeln("This is a continuation of log file " + backupFile.getAbsolutePath());//$NON-NLS-1$
+					writeln("Created Time: " + getDate(new Date(System.currentTimeMillis()))); //$NON-NLS-1$
+					writer.flush();
+				} catch (IOException ioe) {
+					ioe.printStackTrace(System.err);
+				}
+				closeFile();
+				backupIdx = (++backupIdx) % maxLogFiles;
+			}
+		}
+		return isBackupOK;
+	}
+
+	/**
+	 * Reads the PROP_LOG_SIZE_MAX and PROP_LOG_FILE_MAX properties.
+	 */
+	private void readLogProperties() {
+		String newMaxLogSize = secureAction.getProperty(PROP_LOG_SIZE_MAX);
+		if (newMaxLogSize != null) {
+			maxLogSize = Integer.parseInt(newMaxLogSize);
+			if (maxLogSize != 0 && maxLogSize < LOG_SIZE_MIN) {
+				// If the value is '0', then it means no size limitation.
+				// Also, make sure no inappropriate(too small) assigned value.
+				maxLogSize = LOG_SIZE_MIN;
+			}
+		}
+
+		String newMaxLogFiles = secureAction.getProperty(PROP_LOG_FILE_MAX);
+		if (newMaxLogFiles != null) {
+			maxLogFiles = Integer.parseInt(newMaxLogFiles);
+			if (maxLogFiles < 1) {
+				// Make sure no invalid assigned value. (at least >= 1)
+				maxLogFiles = DEFAULT_LOG_FILES;
+			}
+		}
+
+		String newLogLevel = secureAction.getProperty(PROP_LOG_LEVEL);
+		if (newLogLevel != null) {
+			if (newLogLevel.equals("ERROR")) //$NON-NLS-1$
+				logLevel = FrameworkLogEntry.ERROR;
+			else if (newLogLevel.equals("WARNING")) //$NON-NLS-1$
+				logLevel = FrameworkLogEntry.ERROR | FrameworkLogEntry.WARNING;
+			else if (newLogLevel.equals("INFO")) //$NON-NLS-1$
+				logLevel = FrameworkLogEntry.INFO | FrameworkLogEntry.ERROR | FrameworkLogEntry.WARNING | FrameworkLogEntry.CANCEL;
+			else
+				logLevel = FrameworkLogEntry.OK; // OK (0) means log everything
+		}
+	}
+
+	/**
+	 * Determines if the log entry should be logged based on log level.
+	 */
+	private boolean isLoggable(int fwkEntrySeverity) {
+		if (logLevel == 0)
+			return true;
+		return (fwkEntrySeverity & logLevel) != 0;
+	}
+
+	public boolean isLoggable(Bundle bundle, String loggableName, int loggableLevel) {
+		if (!enabled)
+			return false;
+		if (loggerName.equals(loggableName))
+			return isLoggable(convertSeverity(loggableLevel));
+		if (EclipseLogHook.PERF_LOGGER_NAME.equals(loggableName))
+			// we don't want to do anything with performance logger unless
+			// this is the performance logger (check done above).
+			return false;
+		if (!EclipseLogHook.EQUINOX_LOGGER_NAME.equals(loggerName))
+			// only the equinox log writer should pay attention to other logs
+			return false;
+		// for now only log errors; probably need this to be configurable
+		return loggableLevel == LogService.LOG_ERROR;
+	}
+
+	public void logged(LogEntry entry) {
+		if (!(entry instanceof ExtendedLogEntry))
+			// TODO this should never happen
+			return;
+		ExtendedLogEntry extended = (ExtendedLogEntry) entry;
+		Object context = extended.getContext();
+		if (context instanceof FrameworkLogEntry) {
+			log((FrameworkLogEntry) context);
+			return;
+		}
+		// OK we are now in a case where someone logged a normal entry to the real LogService
+		log(new FrameworkLogEntry(getFwkEntryTag(entry), convertSeverity(entry.getLevel()), 0, entry.getMessage(), 0, entry.getException(), null));
+	}
+
+	private static String getFwkEntryTag(LogEntry entry) {
+		Bundle b = entry.getBundle();
+		if (b != null && b.getSymbolicName() != null)
+			return b.getSymbolicName();
+		return "unknown"; //$NON-NLS-1$
+	}
+
+	private static int convertSeverity(int entryLevel) {
+		switch (entryLevel) {
+			case LogService.LOG_ERROR :
+				return FrameworkLogEntry.ERROR;
+			case LogService.LOG_WARNING :
+				return FrameworkLogEntry.WARNING;
+			case LogService.LOG_INFO :
+				return FrameworkLogEntry.INFO;
+			case LogService.LOG_DEBUG :
+				return FrameworkLogEntry.OK;
+			default :
+				return 32; // unknown
+		}
+	}
+
+	public String getLoggerName() {
+		return loggerName;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseStorageHook.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseStorageHook.java
index 9a7de53..78aa333 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseStorageHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseStorageHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,34 +74,38 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		return STORAGE_VERION;
 	}
 
-	public StorageHook create(BaseData bundledata) throws BundleException {
+	/**
+	 * @throws BundleException  
+	 */
+	public StorageHook create(BaseData data) throws BundleException {
 		EclipseStorageHook storageHook = new EclipseStorageHook();
-		storageHook.bundledata = bundledata;
+		storageHook.bundledata = data;
 		return storageHook;
 	}
 
-	public void initialize(Dictionary manifest) throws BundleException {
-		String activationPolicy = (String) manifest.get(Constants.BUNDLE_ACTIVATIONPOLICY);
+	@SuppressWarnings("deprecation")
+	public void initialize(Dictionary<String, String> manifest) throws BundleException {
+		String activationPolicy = manifest.get(Constants.BUNDLE_ACTIVATIONPOLICY);
 		if (activationPolicy != null) {
 			parseActivationPolicy(this, activationPolicy);
 		} else {
-			String lazyStart = (String) manifest.get(Constants.ECLIPSE_LAZYSTART);
+			String lazyStart = manifest.get(Constants.ECLIPSE_LAZYSTART);
 			if (lazyStart == null)
-				lazyStart = (String) manifest.get(Constants.ECLIPSE_AUTOSTART);
+				lazyStart = manifest.get(Constants.ECLIPSE_AUTOSTART);
 			parseLazyStart(this, lazyStart);
 		}
 		try {
-			String versionString = (String) manifest.get(Constants.BUNDLE_MANIFESTVERSION);
+			String versionString = manifest.get(Constants.BUNDLE_MANIFESTVERSION);
 			bundleManfestVersion = versionString == null ? 0 : Integer.parseInt(versionString);
 		} catch (NumberFormatException nfe) {
 			bundleManfestVersion = 0;
 		}
-		pluginClass = (String) manifest.get(Constants.PLUGIN_CLASS);
-		buddyList = (String) manifest.get(Constants.BUDDY_LOADER);
-		registeredBuddyList = (String) manifest.get(Constants.REGISTERED_POLICY);
+		pluginClass = manifest.get(Constants.PLUGIN_CLASS);
+		buddyList = manifest.get(Constants.BUDDY_LOADER);
+		registeredBuddyList = manifest.get(Constants.REGISTERED_POLICY);
 		if (hasPackageInfo(bundledata.getEntry(Constants.OSGI_BUNDLE_MANIFEST)))
 			flags |= FLAG_HAS_PACKAGE_INFO;
-		String genFrom = (String) manifest.get(PluginConverterImpl.GENERATED_FROM);
+		String genFrom = manifest.get(PluginConverterImpl.GENERATED_FROM);
 		if (genFrom != null) {
 			ManifestElement generatedFrom = ManifestElement.parseHeader(PluginConverterImpl.GENERATED_FROM, genFrom)[0];
 			if (generatedFrom != null) {
@@ -114,7 +118,7 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 			if (COMPATIBILITY_LAZYSTART)
 				bundledata.setStatus(bundledata.getStatus() | Constants.BUNDLE_STARTED | Constants.BUNDLE_ACTIVATION_POLICY);
 		}
-		serviceComponent = (String) manifest.get(CachedManifest.SERVICE_COMPONENT);
+		serviceComponent = manifest.get(CachedManifest.SERVICE_COMPONENT);
 	}
 
 	public StorageHook load(BaseData target, DataInputStream in) throws IOException {
@@ -362,8 +366,8 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		return false;
 	}
 
-	private Headers checkManifestAndParent(String cacheLocation, String symbolicName, String version, byte inputType) throws BundleException {
-		Headers result = basicCheckManifest(cacheLocation, symbolicName, version, inputType);
+	private Headers<String, String> checkManifestAndParent(String cacheLocation, String symbolicName, String version, byte inputType) throws BundleException {
+		Headers<String, String> result = basicCheckManifest(cacheLocation, symbolicName, version, inputType);
 		if (result != null)
 			return result;
 		Location parentConfiguration = null;
@@ -372,7 +376,7 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		return result;
 	}
 
-	private Headers basicCheckManifest(String cacheLocation, String symbolicName, String version, byte inputType) throws BundleException {
+	private Headers<String, String> basicCheckManifest(String cacheLocation, String symbolicName, String version, byte inputType) throws BundleException {
 		File currentFile = new File(cacheLocation, symbolicName + '_' + version + ".MF"); //$NON-NLS-1$
 		if (PluginConverterImpl.upToDate(currentFile, bundledata.getBundleFile().getBaseFile(), inputType)) {
 			try {
@@ -384,16 +388,16 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		return null;
 	}
 
-	Dictionary createCachedManifest(boolean firstTime) throws BundleException {
+	Dictionary<String, String> createCachedManifest(boolean firstTime) throws BundleException {
 		return firstTime ? getGeneratedManifest() : new CachedManifest(this);
 	}
 
-	public Dictionary getGeneratedManifest() throws BundleException {
+	public Dictionary<String, String> getGeneratedManifest() throws BundleException {
 		if (System.getSecurityManager() == null)
 			return getGeneratedManifest0();
 		try {
-			return (Dictionary) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BundleException {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<Dictionary<String, String>>() {
+				public Dictionary<String, String> run() throws BundleException {
 					return getGeneratedManifest0();
 				}
 			});
@@ -402,34 +406,35 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		}
 	}
 
-	final Dictionary getGeneratedManifest0() throws BundleException {
-		Dictionary builtIn = AdaptorUtil.loadManifestFrom(bundledata);
+	final Dictionary<String, String> getGeneratedManifest0() throws BundleException {
+		Dictionary<String, String> builtIn = AdaptorUtil.loadManifestFrom(bundledata);
 		if (builtIn != null) {
 			// the bundle has a built-in manifest - we may not have to generate one
 			if (!isComplete(builtIn)) {
-				Dictionary generatedManifest = generateManifest(builtIn);
+				Dictionary<String, String> generatedManifest = generateManifest(builtIn);
 				if (generatedManifest != null)
 					return generatedManifest;
 			}
 			// the manifest is complete or we could not complete it - take it as it is
 			manifestType = PluginConverterImpl.MANIFEST_TYPE_BUNDLE;
-			if (bundledata.getBundleFile().getBaseFile().isFile()) {
+			File baseFile = bundledata.getBundleFile().getBaseFile();
+			if (baseFile != null && bundledata.getBundleFile().getBaseFile().isFile()) {
 				manifestTimeStamp = bundledata.getBundleFile().getBaseFile().lastModified();
 				manifestType |= PluginConverterImpl.MANIFEST_TYPE_JAR;
 			} else
 				manifestTimeStamp = bundledata.getBundleFile().getEntry(Constants.OSGI_BUNDLE_MANIFEST).getTime();
 			return builtIn;
 		}
-		Dictionary result = generateManifest(null);
+		Dictionary<String, String> result = generateManifest(null);
 		if (result == null)
 			throw new BundleException(NLS.bind(EclipseAdaptorMsg.ECLIPSE_DATA_MANIFEST_NOT_FOUND, bundledata.getLocation()));
 		return result;
 	}
 
-	private Dictionary generateManifest(Dictionary builtIn) throws BundleException {
+	private Dictionary<String, String> generateManifest(Dictionary<String, String> builtIn) throws BundleException {
 		String cacheLocation = FrameworkProperties.getProperty(LocationManager.PROP_MANIFEST_CACHE);
 		if (bundledata.getSymbolicName() != null) {
-			Headers existingHeaders = checkManifestAndParent(cacheLocation, bundledata.getSymbolicName(), bundledata.getVersion().toString(), manifestType);
+			Headers<String, String> existingHeaders = checkManifestAndParent(cacheLocation, bundledata.getSymbolicName(), bundledata.getVersion().toString(), manifestType);
 			if (existingHeaders != null)
 				return existingHeaders;
 		}
@@ -438,7 +443,7 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		if (converter == null)
 			converter = new PluginConverterImpl(bundledata.getAdaptor(), bundledata.getAdaptor().getContext());
 
-		Dictionary generatedManifest;
+		Dictionary<String, String> generatedManifest;
 		try {
 			generatedManifest = converter.convertManifest(bundledata.getBundleFile().getBaseFile(), true, null, true, null);
 		} catch (PluginConversionException pce) {
@@ -447,10 +452,10 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		}
 
 		//Now we know the symbolicId and the version of the bundle, we check to see if don't have a manifest for it already
-		Version version = Version.parseVersion((String) generatedManifest.get(Constants.BUNDLE_VERSION));
-		String symbolicName = ManifestElement.parseHeader(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME, (String) generatedManifest.get(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME))[0].getValue();
-		ManifestElement generatedFrom = ManifestElement.parseHeader(PluginConverterImpl.GENERATED_FROM, (String) generatedManifest.get(PluginConverterImpl.GENERATED_FROM))[0];
-		Headers existingHeaders = checkManifestAndParent(cacheLocation, symbolicName, version.toString(), Byte.parseByte(generatedFrom.getAttribute(PluginConverterImpl.MANIFEST_TYPE_ATTRIBUTE)));
+		Version version = Version.parseVersion(generatedManifest.get(Constants.BUNDLE_VERSION));
+		String symbolicName = ManifestElement.parseHeader(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME, generatedManifest.get(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME))[0].getValue();
+		ManifestElement generatedFrom = ManifestElement.parseHeader(PluginConverterImpl.GENERATED_FROM, generatedManifest.get(PluginConverterImpl.GENERATED_FROM))[0];
+		Headers<String, String> existingHeaders = checkManifestAndParent(cacheLocation, symbolicName, version.toString(), Byte.parseByte(generatedFrom.getAttribute(PluginConverterImpl.MANIFEST_TYPE_ATTRIBUTE)));
 		//We don't have a manifest.
 		manifestTimeStamp = Long.parseLong(generatedFrom.getValue());
 		manifestType = Byte.parseByte(generatedFrom.getAttribute(PluginConverterImpl.MANIFEST_TYPE_ATTRIBUTE));
@@ -459,9 +464,9 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 
 		//merge the original manifest with the generated one
 		if (builtIn != null) {
-			Enumeration keysEnum = builtIn.keys();
+			Enumeration<String> keysEnum = builtIn.keys();
 			while (keysEnum.hasMoreElements()) {
-				Object key = keysEnum.nextElement();
+				String key = keysEnum.nextElement();
 				generatedManifest.put(key, builtIn.get(key));
 			}
 		}
@@ -477,7 +482,7 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 
 	}
 
-	private boolean isComplete(Dictionary manifest) {
+	private boolean isComplete(Dictionary<String, String> manifest) {
 		// a manifest is complete if it has a Bundle-SymbolicName entry...
 		if (manifest.get(org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME) != null)
 			return true;
@@ -503,7 +508,7 @@ public final class EclipseStorageHook implements StorageHook, HookConfigurator {
 		return null;
 	}
 
-	public Dictionary getManifest(boolean firstLoad) throws BundleException {
+	public Dictionary<String, String> getManifest(boolean firstLoad) throws BundleException {
 		return createCachedManifest(firstLoad);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/IPluginInfo.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/IPluginInfo.java
index 0c37d82..9520f88 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/IPluginInfo.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/IPluginInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,11 +18,11 @@ import java.util.*;
  * <p>Internal class.</p>
  */
 public interface IPluginInfo {
-	public Map getLibraries();
+	public Map<String, List<String>> getLibraries();
 
 	public String[] getLibrariesName();
 
-	public ArrayList getRequires();
+	public ArrayList<PluginParser.Prerequisite> getRequires();
 
 	public String getMasterId();
 
@@ -38,7 +38,7 @@ public interface IPluginInfo {
 
 	public boolean isFragment();
 
-	public Set getPackageFilters();
+	public Set<String> getPackageFilters();
 
 	public String getPluginName();
 
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/MessageHelper.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/MessageHelper.java
index f09b4ef..fa5bcd2 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/MessageHelper.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/MessageHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginConverterImpl.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginConverterImpl.java
index 531766a..fe1447f 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginConverterImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginConverterImpl.java
@@ -54,15 +54,16 @@ public class PluginConverterImpl implements PluginConverter {
 	private IPluginInfo pluginInfo;
 	private File pluginManifestLocation;
 	private ZipFile pluginZip;
-	private Dictionary generatedManifest;
+	private Dictionary<String, String> generatedManifest;
 	private byte manifestType;
 	private Version target;
-	private Dictionary devProperties;
+	private Dictionary<String, String> devProperties;
 	static final Version TARGET31 = new Version(3, 1, 0);
 	static final Version TARGET32 = new Version(3, 2, 0);
 	private static final String MANIFEST_VERSION = "Manifest-Version"; //$NON-NLS-1$
 	private static final String PLUGIN_PROPERTIES_FILENAME = "plugin"; //$NON-NLS-1$
 	private static PluginConverterImpl instance;
+	@SuppressWarnings("deprecation")
 	private static final String[] ARCH_LIST = {org.eclipse.osgi.service.environment.Constants.ARCH_PA_RISC, org.eclipse.osgi.service.environment.Constants.ARCH_PPC, org.eclipse.osgi.service.environment.Constants.ARCH_SPARC, org.eclipse.osgi.service.environment.Constants.ARCH_X86, org.eclipse.osgi.service.environment.Constants.ARCH_AMD64, org.eclipse.osgi.service.environment.Constants.ARCH_IA64};
 	static public final String FRAGMENT_MANIFEST = "fragment.xml"; //$NON-NLS-1$
 	static public final String GENERATED_FROM = "Generated-from"; //$NON-NLS-1$
@@ -92,7 +93,7 @@ public class PluginConverterImpl implements PluginConverter {
 		pluginInfo = null;
 		pluginManifestLocation = null;
 		pluginZip = null;
-		generatedManifest = new Hashtable(10);
+		generatedManifest = new Hashtable<String, String>(10);
 		manifestType = MANIFEST_TYPE_UNKNOWN;
 		target = null;
 		devProperties = null;
@@ -126,14 +127,12 @@ public class PluginConverterImpl implements PluginConverter {
 			throw new PluginConversionException(validation);
 	}
 
-	private Set filterExport(Collection exportToFilter, Collection filter) {
+	private Set<String> filterExport(Set<String> exportToFilter, Collection<String> filter) {
 		if (filter == null || filter.contains("*")) //$NON-NLS-1$
-			return (Set) exportToFilter;
-		Set filteredExport = new HashSet(exportToFilter.size());
-		for (Iterator iter = exportToFilter.iterator(); iter.hasNext();) {
-			String anExport = (String) iter.next();
-			for (Iterator iter2 = filter.iterator(); iter2.hasNext();) {
-				String aFilter = (String) iter2.next();
+			return exportToFilter;
+		Set<String> filteredExport = new HashSet<String>(exportToFilter.size());
+		for (String anExport : exportToFilter) {
+			for (String aFilter : filter) {
 				int dotStar = aFilter.indexOf(".*"); //$NON-NLS-1$
 				if (dotStar != -1)
 					aFilter = aFilter.substring(0, dotStar);
@@ -146,9 +145,9 @@ public class PluginConverterImpl implements PluginConverter {
 		return filteredExport;
 	}
 
-	private ArrayList findOSJars(File pluginRoot, String path, boolean filter) {
+	private List<String> findOSJars(File pluginRoot, String path, boolean filter) {
 		path = path.substring(4);
-		ArrayList found = new ArrayList(0);
+		List<String> found = new ArrayList<String>(0);
 		for (int i = 0; i < OS_LIST.length; i++) {
 			//look for os/osname/path
 			String searchedPath = "os/" + OS_LIST[i] + "/" + path; //$NON-NLS-1$ //$NON-NLS-2$
@@ -210,9 +209,9 @@ public class PluginConverterImpl implements PluginConverter {
 		return null;
 	}
 
-	private ArrayList findWSJars(File pluginRoot, String path, boolean filter) {
+	private List<String> findWSJars(File pluginRoot, String path, boolean filter) {
 		path = path.substring(4);
-		ArrayList found = new ArrayList(0);
+		List<String> found = new ArrayList<String>(0);
 		for (int i = 0; i < WS_LIST.length; i++) {
 			String searchedPath = "ws/" + WS_LIST[i] + path; //$NON-NLS-1$
 			if (new File(pluginRoot, searchedPath).exists()) {
@@ -238,7 +237,8 @@ public class PluginConverterImpl implements PluginConverter {
 		}
 	}
 
-	public void writeManifest(File generationLocation, Dictionary manifestToWrite, boolean compatibilityManifest) throws PluginConversionException {
+	@SuppressWarnings("deprecation")
+	public void writeManifest(File generationLocation, Dictionary<String, String> manifestToWrite, boolean compatibilityManifest) throws PluginConversionException {
 		long start = System.currentTimeMillis();
 		try {
 			File parentFile = new File(generationLocation.getParent());
@@ -249,30 +249,30 @@ public class PluginConverterImpl implements PluginConverter {
 				throw new PluginConversionException(message);
 			}
 			// replaces any eventual existing file
-			manifestToWrite = new Hashtable((Map) manifestToWrite);
+			manifestToWrite = new Hashtable<String, String>((Hashtable) manifestToWrite);
 			// MANIFEST.MF files must be written using UTF-8
 			out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(generationLocation), UTF_8));
-			writeEntry(MANIFEST_VERSION, (String) manifestToWrite.remove(MANIFEST_VERSION));
-			writeEntry(GENERATED_FROM, (String) manifestToWrite.remove(GENERATED_FROM)); //Need to do this first uptoDate check expect the generated-from tag to be in the first line
+			writeEntry(MANIFEST_VERSION, manifestToWrite.remove(MANIFEST_VERSION));
+			writeEntry(GENERATED_FROM, manifestToWrite.remove(GENERATED_FROM)); //Need to do this first uptoDate check expect the generated-from tag to be in the first line
 			// always attempt to write the Bundle-ManifestVersion header if it exists (bug 109863)
-			writeEntry(Constants.BUNDLE_MANIFESTVERSION, (String) manifestToWrite.remove(Constants.BUNDLE_MANIFESTVERSION));
-			writeEntry(Constants.BUNDLE_NAME, (String) manifestToWrite.remove(Constants.BUNDLE_NAME));
-			writeEntry(Constants.BUNDLE_SYMBOLICNAME, (String) manifestToWrite.remove(Constants.BUNDLE_SYMBOLICNAME));
-			writeEntry(Constants.BUNDLE_VERSION, (String) manifestToWrite.remove(Constants.BUNDLE_VERSION));
-			writeEntry(Constants.BUNDLE_CLASSPATH, (String) manifestToWrite.remove(Constants.BUNDLE_CLASSPATH));
-			writeEntry(Constants.BUNDLE_ACTIVATOR, (String) manifestToWrite.remove(Constants.BUNDLE_ACTIVATOR));
-			writeEntry(Constants.BUNDLE_VENDOR, (String) manifestToWrite.remove(Constants.BUNDLE_VENDOR));
-			writeEntry(Constants.FRAGMENT_HOST, (String) manifestToWrite.remove(Constants.FRAGMENT_HOST));
-			writeEntry(Constants.BUNDLE_LOCALIZATION, (String) manifestToWrite.remove(Constants.BUNDLE_LOCALIZATION));
+			writeEntry(Constants.BUNDLE_MANIFESTVERSION, manifestToWrite.remove(Constants.BUNDLE_MANIFESTVERSION));
+			writeEntry(Constants.BUNDLE_NAME, manifestToWrite.remove(Constants.BUNDLE_NAME));
+			writeEntry(Constants.BUNDLE_SYMBOLICNAME, manifestToWrite.remove(Constants.BUNDLE_SYMBOLICNAME));
+			writeEntry(Constants.BUNDLE_VERSION, manifestToWrite.remove(Constants.BUNDLE_VERSION));
+			writeEntry(Constants.BUNDLE_CLASSPATH, manifestToWrite.remove(Constants.BUNDLE_CLASSPATH));
+			writeEntry(Constants.BUNDLE_ACTIVATOR, manifestToWrite.remove(Constants.BUNDLE_ACTIVATOR));
+			writeEntry(Constants.BUNDLE_VENDOR, manifestToWrite.remove(Constants.BUNDLE_VENDOR));
+			writeEntry(Constants.FRAGMENT_HOST, manifestToWrite.remove(Constants.FRAGMENT_HOST));
+			writeEntry(Constants.BUNDLE_LOCALIZATION, manifestToWrite.remove(Constants.BUNDLE_LOCALIZATION));
 			// always attempt to write the Export-Package header if it exists (bug 109863)
-			writeEntry(Constants.EXPORT_PACKAGE, (String) manifestToWrite.remove(Constants.EXPORT_PACKAGE));
+			writeEntry(Constants.EXPORT_PACKAGE, manifestToWrite.remove(Constants.EXPORT_PACKAGE));
 			// always attempt to write the Provide-Package header if it exists (bug 109863)
-			writeEntry(Constants.PROVIDE_PACKAGE, (String) manifestToWrite.remove(Constants.PROVIDE_PACKAGE));
-			writeEntry(Constants.REQUIRE_BUNDLE, (String) manifestToWrite.remove(Constants.REQUIRE_BUNDLE));
-			Enumeration keys = manifestToWrite.keys();
+			writeEntry(Constants.PROVIDE_PACKAGE, manifestToWrite.remove(Constants.PROVIDE_PACKAGE));
+			writeEntry(Constants.REQUIRE_BUNDLE, manifestToWrite.remove(Constants.REQUIRE_BUNDLE));
+			Enumeration<String> keys = manifestToWrite.keys();
 			while (keys.hasMoreElements()) {
-				String key = (String) keys.nextElement();
-				writeEntry(key, (String) manifestToWrite.get(key));
+				String key = keys.nextElement();
+				writeEntry(key, manifestToWrite.get(key));
 			}
 			out.flush();
 		} catch (IOException e) {
@@ -299,9 +299,9 @@ public class PluginConverterImpl implements PluginConverter {
 	}
 
 	private boolean requireRuntimeCompatibility() {
-		ArrayList requireList = pluginInfo.getRequires();
-		for (Iterator iter = requireList.iterator(); iter.hasNext();) {
-			if (((PluginParser.Prerequisite) iter.next()).getName().equalsIgnoreCase(PI_RUNTIME_COMPATIBILITY))
+		ArrayList<PluginParser.Prerequisite> requireList = pluginInfo.getRequires();
+		for (Iterator<PluginParser.Prerequisite> iter = requireList.iterator(); iter.hasNext();) {
+			if (iter.next().getName().equalsIgnoreCase(PI_RUNTIME_COMPATIBILITY))
 				return true;
 		}
 		return false;
@@ -367,20 +367,22 @@ public class PluginConverterImpl implements PluginConverter {
 		}
 	}
 
+	@SuppressWarnings("deprecation")
 	private void generateProvidePackage() {
-		Set exports = getExports();
+		Set<String> exports = getExports();
 		if (exports != null && exports.size() != 0) {
 			generatedManifest.put(TARGET31.compareTo(target) <= 0 ? Constants.EXPORT_PACKAGE : Constants.PROVIDE_PACKAGE, getStringFromCollection(exports, LIST_SEPARATOR));
 		}
 	}
 
+	@SuppressWarnings("deprecation")
 	private void generateRequireBundle() {
-		ArrayList requiredBundles = pluginInfo.getRequires();
+		ArrayList<PluginParser.Prerequisite> requiredBundles = pluginInfo.getRequires();
 		if (requiredBundles.size() == 0)
 			return;
 		StringBuffer bundleRequire = new StringBuffer();
-		for (Iterator iter = requiredBundles.iterator(); iter.hasNext();) {
-			PluginParser.Prerequisite element = (PluginParser.Prerequisite) iter.next();
+		for (Iterator<PluginParser.Prerequisite> iter = requiredBundles.iterator(); iter.hasNext();) {
+			PluginParser.Prerequisite element = iter.next();
 			StringBuffer modImport = new StringBuffer(element.getName());
 			String versionRange = getVersionRange(element.getVersion(), element.getMatch());
 			if (versionRange != null)
@@ -409,6 +411,7 @@ public class PluginConverterImpl implements PluginConverter {
 		generatedManifest.put(GENERATED_FROM, Long.toString(getTimeStamp(pluginManifestLocation, manifestType)) + ";" + MANIFEST_TYPE_ATTRIBUTE + "=" + manifestType); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
+	@SuppressWarnings("deprecation")
 	private void generateEclipseHeaders() {
 		if (pluginInfo.isFragment())
 			return;
@@ -418,8 +421,8 @@ public class PluginConverterImpl implements PluginConverter {
 			generatedManifest.put(TARGET32.compareTo(target) <= 0 ? Constants.ECLIPSE_LAZYSTART : Constants.ECLIPSE_AUTOSTART, "true"); //$NON-NLS-1$
 	}
 
-	private Set getExports() {
-		Map libs = pluginInfo.getLibraries();
+	private Set<String> getExports() {
+		Map<String, List<String>> libs = pluginInfo.getLibraries();
 		if (libs == null)
 			return null;
 
@@ -427,11 +430,11 @@ public class PluginConverterImpl implements PluginConverter {
 		if (devProperties != null || DevClassPathHelper.inDevelopmentMode()) {
 			String[] devClassPath = DevClassPathHelper.getDevClassPath(pluginInfo.getUniqueId(), devProperties);
 			// collect export clauses
-			List allExportClauses = new ArrayList(libs.size());
-			Set libEntries = libs.entrySet();
-			for (Iterator iter = libEntries.iterator(); iter.hasNext();) {
-				Map.Entry element = (Map.Entry) iter.next();
-				allExportClauses.addAll((List) element.getValue());
+			List<String> allExportClauses = new ArrayList<String>(libs.size());
+			Set<Map.Entry<String, List<String>>> libEntries = libs.entrySet();
+			for (Iterator<Map.Entry<String, List<String>>> iter = libEntries.iterator(); iter.hasNext();) {
+				Map.Entry<String, List<String>> element = iter.next();
+				allExportClauses.addAll(element.getValue());
 			}
 			if (devClassPath != null) {
 				// bug 88498
@@ -445,14 +448,14 @@ public class PluginConverterImpl implements PluginConverter {
 			}
 		}
 
-		Set result = new TreeSet();
-		Set libEntries = libs.entrySet();
-		for (Iterator iter = libEntries.iterator(); iter.hasNext();) {
-			Map.Entry element = (Map.Entry) iter.next();
-			List filter = (List) element.getValue();
+		Set<String> result = new TreeSet<String>();
+		Set<Map.Entry<String, List<String>>> libEntries = libs.entrySet();
+		for (Iterator<Map.Entry<String, List<String>>> iter = libEntries.iterator(); iter.hasNext();) {
+			Map.Entry<String, List<String>> element = iter.next();
+			List<String> filter = element.getValue();
 			if (filter.size() == 0) //If the library is not exported, then ignore it
 				continue;
-			String libEntryText = ((String) element.getKey()).trim();
+			String libEntryText = element.getKey().trim();
 			File libraryLocation;
 			if (libEntryText.equals(DOT))
 				libraryLocation = pluginManifestLocation;
@@ -461,17 +464,17 @@ public class PluginConverterImpl implements PluginConverter {
 				File libEntryAsPath = new File(libEntryText);
 				libraryLocation = libEntryAsPath.isAbsolute() ? libEntryAsPath : new File(pluginManifestLocation, libEntryText);
 			}
-			Set exports = null;
+			Set<String> exports = null;
 			if (libraryLocation.exists()) {
 				if (libraryLocation.isFile())
 					exports = filterExport(getExportsFromJAR(libraryLocation), filter); //TODO Need to handle $xx$ variables
 				else if (libraryLocation.isDirectory())
 					exports = filterExport(getExportsFromDir(libraryLocation), filter);
 			} else {
-				ArrayList expandedLibs = getLibrariesExpandingVariables((String) element.getKey(), false);
-				exports = new HashSet();
-				for (Iterator iterator = expandedLibs.iterator(); iterator.hasNext();) {
-					String libName = (String) iterator.next();
+				List<String> expandedLibs = getLibrariesExpandingVariables(element.getKey(), false);
+				exports = new HashSet<String>();
+				for (Iterator<String> iterator = expandedLibs.iterator(); iterator.hasNext();) {
+					String libName = iterator.next();
 					File libFile = new File(pluginManifestLocation, libName);
 					if (libFile.isFile()) {
 						exports.addAll(filterExport(getExportsFromJAR(libFile), filter));
@@ -484,14 +487,14 @@ public class PluginConverterImpl implements PluginConverter {
 		return result;
 	}
 
-	private Set getExportsFromDir(File location) {
+	private Set<String> getExportsFromDir(File location) {
 		return getExportsFromDir(location, ""); //$NON-NLS-1$
 	}
 
-	private Set getExportsFromDir(File location, String packageName) {
+	private Set<String> getExportsFromDir(File location, String packageName) {
 		String prefix = (packageName.length() > 0) ? (packageName + '.') : ""; //$NON-NLS-1$
 		String[] files = location.list();
-		Set exportedPaths = new HashSet();
+		Set<String> exportedPaths = new HashSet<String>();
 		boolean containsFile = false;
 		if (files != null)
 			for (int i = 0; i < files.length; i++) {
@@ -513,8 +516,8 @@ public class PluginConverterImpl implements PluginConverter {
 		return exportedPaths;
 	}
 
-	private Set getExportsFromJAR(File jarFile) {
-		Set names = new HashSet();
+	private Set<String> getExportsFromJAR(File jarFile) {
+		Set<String> names = new HashSet<String>();
 		ZipFile file = null;
 		try {
 			file = new ZipFile(jarFile);
@@ -524,8 +527,8 @@ public class PluginConverterImpl implements PluginConverter {
 			return names;
 		}
 		//Run through the entries
-		for (Enumeration entriesEnum = file.entries(); entriesEnum.hasMoreElements();) {
-			ZipEntry entry = (ZipEntry) entriesEnum.nextElement();
+		for (Enumeration<? extends ZipEntry> entriesEnum = file.entries(); entriesEnum.hasMoreElements();) {
+			ZipEntry entry = entriesEnum.nextElement();
 			String name = entry.getName();
 			if (!isValidPackageName(name))
 				continue;
@@ -548,10 +551,10 @@ public class PluginConverterImpl implements PluginConverter {
 		return names;
 	}
 
-	private ArrayList getLibrariesExpandingVariables(String libraryPath, boolean filter) {
+	private List<String> getLibrariesExpandingVariables(String libraryPath, boolean filter) {
 		String var = hasPrefix(libraryPath);
 		if (var == null) {
-			ArrayList returnValue = new ArrayList(1);
+			List<String> returnValue = new ArrayList<String>(1);
 			returnValue.add(libraryPath);
 			return returnValue;
 		}
@@ -561,7 +564,7 @@ public class PluginConverterImpl implements PluginConverter {
 		if (var.equals("os")) { //$NON-NLS-1$
 			return findOSJars(pluginManifestLocation, libraryPath, filter);
 		}
-		return new ArrayList(0);
+		return new ArrayList<String>(0);
 	}
 
 	//return a String representing the string found between the $s
@@ -688,10 +691,10 @@ public class PluginConverterImpl implements PluginConverter {
 		return result.toString();
 	}
 
-	private String getStringFromCollection(Collection collection, String separator) {
+	private String getStringFromCollection(Collection<String> collection, String separator) {
 		StringBuffer result = new StringBuffer();
 		boolean first = true;
-		for (Iterator i = collection.iterator(); i.hasNext();) {
+		for (Iterator<String> i = collection.iterator(); i.hasNext();) {
 			if (first)
 				first = false;
 			else
@@ -701,13 +704,13 @@ public class PluginConverterImpl implements PluginConverter {
 		return result.toString();
 	}
 
-	public synchronized Dictionary convertManifest(File pluginBaseLocation, boolean compatibility, String target, boolean analyseJars, Dictionary devProperties) throws PluginConversionException {
+	public synchronized Dictionary<String, String> convertManifest(File pluginBaseLocation, boolean compatibility, String targetVersion, boolean analyseJars, Dictionary<String, String> devProps) throws PluginConversionException {
 		long start = System.currentTimeMillis();
 		if (DEBUG)
 			System.out.println("Convert " + pluginBaseLocation); //$NON-NLS-1$
 		init();
-		this.target = target == null ? TARGET32 : new Version(target);
-		this.devProperties = devProperties;
+		this.target = targetVersion == null ? TARGET32 : new Version(targetVersion);
+		this.devProperties = devProps;
 		fillPluginInfo(pluginBaseLocation);
 		fillManifest(compatibility, analyseJars);
 		if (DEBUG)
@@ -715,8 +718,8 @@ public class PluginConverterImpl implements PluginConverter {
 		return generatedManifest;
 	}
 
-	public synchronized File convertManifest(File pluginBaseLocation, File bundleManifestLocation, boolean compatibilityManifest, String target, boolean analyseJars, Dictionary devProperties) throws PluginConversionException {
-		convertManifest(pluginBaseLocation, compatibilityManifest, target, analyseJars, devProperties);
+	public synchronized File convertManifest(File pluginBaseLocation, File bundleManifestLocation, boolean compatibilityManifest, String targetVersion, boolean analyseJars, Dictionary<String, String> devProps) throws PluginConversionException {
+		convertManifest(pluginBaseLocation, compatibilityManifest, targetVersion, analyseJars, devProps);
 		if (bundleManifestLocation == null) {
 			String cacheLocation = FrameworkProperties.getProperty(LocationManager.PROP_MANIFEST_CACHE);
 			bundleManifestLocation = new File(cacheLocation, pluginInfo.getUniqueId() + '_' + pluginInfo.getVersion() + ".MF"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginParser.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginParser.java
index 098a7aa..1448b28 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginParser.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,39 +26,39 @@ import org.xml.sax.helpers.DefaultHandler;
  * Internal class.
  */
 public class PluginParser extends DefaultHandler implements IModel {
-	private static ServiceTracker xmlTracker = null;
+	private static ServiceTracker<SAXParserFactory, SAXParserFactory> xmlTracker = null;
 
 	private PluginInfo manifestInfo = new PluginInfo();
 	private BundleContext context;
 	private FrameworkAdaptor adaptor;
-	private Version target; // The targeted platform for the given manifest
-	private static final Version TARGET21 = new Version(2, 1, 0);
+	Version target; // The targeted platform for the given manifest
+	static final Version TARGET21 = new Version(2, 1, 0);
 
 	public class PluginInfo implements IPluginInfo {
-		private String schemaVersion;
-		private String pluginId;
-		private String version;
-		private String vendor;
+		String schemaVersion;
+		String pluginId;
+		String version;
+		String vendor;
 
 		// an ordered list of library path names.
-		private ArrayList libraryPaths;
+		List<String> libraryPaths;
 		// TODO Should get rid of the libraries map and just have a
 		// list of library export statements instead.  Library paths must
 		// preserve order.
-		private Map libraries; //represent the libraries and their export statement
-		private ArrayList requires;
+		Map<String, List<String>> libraries; //represent the libraries and their export statement
+		ArrayList<PluginParser.Prerequisite> requires;
 		private boolean requiresExpanded = false; //indicates if the requires have been processed.
-		private boolean compatibilityFound = false; //set to true is the requirement list contain compatilibity 
-		private String pluginClass;
-		private String masterPluginId;
-		private String masterVersion;
-		private String masterMatch;
-		private Set filters;
-		private String pluginName;
-		private boolean singleton;
-		private boolean fragment;
+		boolean compatibilityFound = false; //set to true is the requirement list contain compatilibity 
+		String pluginClass;
+		String masterPluginId;
+		String masterVersion;
+		String masterMatch;
+		private Set<String> filters;
+		String pluginName;
+		boolean singleton;
+		boolean fragment;
 		private final static String TARGET21_STRING = "2.1"; //$NON-NLS-1$
-		private boolean hasExtensionExtensionPoints = false;
+		boolean hasExtensionExtensionPoints = false;
 
 		public boolean isFragment() {
 			return fragment;
@@ -68,23 +68,23 @@ public class PluginParser extends DefaultHandler implements IModel {
 			return "plugin-id: " + pluginId + "  version: " + version + " libraries: " + libraries + " class:" + pluginClass + " master: " + masterPluginId + " master-version: " + masterVersion + " requires: " + requires + " singleton: " + singleton; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
 		}
 
-		public Map getLibraries() {
+		public Map<String, List<String>> getLibraries() {
 			if (libraries == null)
-				return new HashMap(0);
+				return new HashMap<String, List<String>>(0);
 			return libraries;
 		}
 
-		public ArrayList getRequires() {
+		public ArrayList<Prerequisite> getRequires() {
 			if (!TARGET21.equals(target) && schemaVersion == null && !requiresExpanded) {
 				requiresExpanded = true;
 				if (requires == null) {
-					requires = new ArrayList(1);
+					requires = new ArrayList<Prerequisite>(1);
 					requires.add(new Prerequisite(PluginConverterImpl.PI_RUNTIME, TARGET21_STRING, false, false, IModel.PLUGIN_REQUIRES_MATCH_GREATER_OR_EQUAL));
 					requires.add(new Prerequisite(PluginConverterImpl.PI_RUNTIME_COMPATIBILITY, null, false, false, null));
 				} else {
 					//Add elements on the requirement list of ui and help.
 					for (int i = 0; i < requires.size(); i++) {
-						Prerequisite analyzed = (Prerequisite) requires.get(i);
+						Prerequisite analyzed = requires.get(i);
 						if ("org.eclipse.ui".equals(analyzed.getName())) { //$NON-NLS-1$					
 							requires.add(i + 1, new Prerequisite("org.eclipse.ui.workbench.texteditor", null, true, analyzed.isExported(), null)); //$NON-NLS-1$ 
 							requires.add(i + 1, new Prerequisite("org.eclipse.jface.text", null, true, analyzed.isExported(), null)); //$NON-NLS-1$ 
@@ -108,7 +108,7 @@ public class PluginParser extends DefaultHandler implements IModel {
 				}
 			}
 			if (requires == null)
-				return requires = new ArrayList(0);
+				return requires = new ArrayList<Prerequisite>(0);
 
 			return requires;
 		}
@@ -137,14 +137,14 @@ public class PluginParser extends DefaultHandler implements IModel {
 			return version;
 		}
 
-		public Set getPackageFilters() {
+		public Set<String> getPackageFilters() {
 			return filters;
 		}
 
 		public String[] getLibrariesName() {
 			if (libraryPaths == null)
 				return new String[0];
-			return (String[]) libraryPaths.toArray(new String[libraryPaths.size()]);
+			return libraryPaths.toArray(new String[libraryPaths.size()]);
 		}
 
 		public String getPluginName() {
@@ -187,10 +187,10 @@ public class PluginParser extends DefaultHandler implements IModel {
 	}
 
 	// Current State Information
-	Stack stateStack = new Stack();
+	Stack<Integer> stateStack = new Stack<Integer>();
 
 	// Current object stack (used to hold the current object we are populating in this plugin info
-	Stack objectStack = new Stack();
+	Stack<Object> objectStack = new Stack<Object>();
 	Locator locator = null;
 
 	// Valid States
@@ -231,10 +231,11 @@ public class PluginParser extends DefaultHandler implements IModel {
 	}
 
 	public void endDocument() {
+		// nothing
 	}
 
 	public void endElement(String uri, String elementName, String qName) {
-		switch (((Integer) stateStack.peek()).intValue()) {
+		switch (stateStack.peek().intValue()) {
 			case IGNORED_ELEMENT_STATE :
 				stateStack.pop();
 				break;
@@ -270,12 +271,13 @@ public class PluginParser extends DefaultHandler implements IModel {
 				if (elementName.equals(LIBRARY)) {
 					String curLibrary = (String) objectStack.pop();
 					if (!curLibrary.trim().equals("")) { //$NON-NLS-1$
-						Vector exportsVector = (Vector) objectStack.pop();
+						@SuppressWarnings("unchecked")
+						List<String> exports = (List<String>) objectStack.pop();
 						if (manifestInfo.libraries == null) {
-							manifestInfo.libraries = new HashMap(3);
-							manifestInfo.libraryPaths = new ArrayList(3);
+							manifestInfo.libraries = new HashMap<String, List<String>>(3);
+							manifestInfo.libraryPaths = new ArrayList<String>(3);
 						}
-						manifestInfo.libraries.put(curLibrary, exportsVector);
+						manifestInfo.libraries.put(curLibrary, exports);
 						manifestInfo.libraryPaths.add(curLibrary.replace('\\', '/'));
 					}
 					stateStack.pop();
@@ -345,7 +347,8 @@ public class PluginParser extends DefaultHandler implements IModel {
 			String maskValue = attributes.getValue("", LIBRARY_EXPORT_MASK); //$NON-NLS-1$
 			// pop off the library - already in currentLib
 			objectStack.pop();
-			Vector exportMask = (Vector) objectStack.peek();
+			@SuppressWarnings("unchecked")
+			List<String> exportMask = (List<String>) objectStack.peek();
 			// push library back on
 			objectStack.push(currentLib);
 			//Split the export upfront
@@ -354,7 +357,7 @@ public class PluginParser extends DefaultHandler implements IModel {
 				while (tok.hasMoreTokens()) {
 					String value = tok.nextToken();
 					if (!exportMask.contains(maskValue))
-						exportMask.addElement(value.trim());
+						exportMask.add(value.trim());
 				}
 			}
 			return;
@@ -384,7 +387,7 @@ public class PluginParser extends DefaultHandler implements IModel {
 		if (elementName.equals(PLUGIN_REQUIRES)) {
 			stateStack.push(new Integer(PLUGIN_REQUIRES_STATE));
 			// Push a new vector to hold all the prerequisites
-			objectStack.push(new Vector());
+			objectStack.push(new ArrayList<String>());
 			parseRequiresAttributes(attributes);
 			return;
 		}
@@ -474,10 +477,10 @@ public class PluginParser extends DefaultHandler implements IModel {
 
 	public static SAXParserFactory acquireXMLParsing(BundleContext context) {
 		if (xmlTracker == null) {
-			xmlTracker = new ServiceTracker(context, "javax.xml.parsers.SAXParserFactory", null); //$NON-NLS-1$
+			xmlTracker = new ServiceTracker<SAXParserFactory, SAXParserFactory>(context, "javax.xml.parsers.SAXParserFactory", null); //$NON-NLS-1$
 			xmlTracker.open();
 		}
-		SAXParserFactory result = (SAXParserFactory) xmlTracker.getService();
+		SAXParserFactory result = xmlTracker.getService();
 		if (result != null)
 			return result;
 		// backup to using jaxp to create a new instance
@@ -515,7 +518,7 @@ public class PluginParser extends DefaultHandler implements IModel {
 
 	public void parseLibraryAttributes(Attributes attributes) {
 		// Push a vector to hold the export mask
-		objectStack.push(new Vector());
+		objectStack.push(new ArrayList<String>());
 		String current = attributes.getValue("", LIBRARY_NAME); //$NON-NLS-1$ 
 		objectStack.push(current);
 	}
@@ -592,7 +595,7 @@ public class PluginParser extends DefaultHandler implements IModel {
 
 	public void parsePluginRequiresImport(Attributes attributes) {
 		if (manifestInfo.requires == null) {
-			manifestInfo.requires = new ArrayList();
+			manifestInfo.requires = new ArrayList<Prerequisite>();
 			// to avoid cycles
 			//			if (!manifestInfo.pluginId.equals(PluginConverterImpl.PI_RUNTIME))  //$NON-NLS-1$
 			//				manifestInfo.requires.add(new Prerequisite(PluginConverterImpl.PI_RUNTIME, null, false, false, null)); //$NON-NLS-1$
@@ -633,7 +636,7 @@ public class PluginParser extends DefaultHandler implements IModel {
 	}
 
 	public void startElement(String uri, String elementName, String qName, Attributes attributes) {
-		switch (((Integer) stateStack.peek()).intValue()) {
+		switch (stateStack.peek().intValue()) {
 			case INITIAL_STATE :
 				handleInitialState(elementName, attributes);
 				break;
@@ -678,13 +681,16 @@ public class PluginParser extends DefaultHandler implements IModel {
 		adaptor.getFrameworkLog().log(error);
 	}
 
-	public void processingInstruction(String target, String data) throws SAXException {
+	/**
+	 * @throws SAXException  
+	 */
+	public void processingInstruction(String instructionTarget, String data) throws SAXException {
 		// Since 3.0, a processing instruction of the form <?eclipse version="3.0"?> at
 		// the start of the manifest file is used to indicate the plug-in manifest
 		// schema version in effect. Pre-3.0 (i.e., 2.1) plug-in manifest files do not
 		// have one of these, and this is how we can distinguish the manifest of a
 		// pre-3.0 plug-in from a post-3.0 one (for compatibility tranformations).
-		if (target.equalsIgnoreCase("eclipse")) { //$NON-NLS-1$ 
+		if (instructionTarget.equalsIgnoreCase("eclipse")) { //$NON-NLS-1$ 
 			// just the presence of this processing instruction indicates that this
 			// plug-in is at least 3.0
 			manifestInfo.schemaVersion = "3.0"; //$NON-NLS-1$ 
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/BundleStats.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/BundleStats.java
index ba6c018..f021dfc 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/BundleStats.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/BundleStats.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.core.runtime.internal.stats;
 
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Contains information about activated bundles and acts as the main 
@@ -31,7 +32,7 @@ public class BundleStats {
 	private long traceEnd = -1;
 
 	//To keep bundle parentage
-	private ArrayList bundlesActivated = new ArrayList(3); // TODO create lazily
+	private List<BundleStats> bundlesActivated = new ArrayList<BundleStats>(3); // TODO create lazily
 	private BundleStats activatedBy = null;
 
 	public BundleStats(String name, long id) {
@@ -89,7 +90,7 @@ public class BundleStats {
 		return loader == null ? 0 : loader.getClassLoadTime();
 	}
 
-	public ArrayList getBundlesActivated() {
+	public List<BundleStats> getBundlesActivated() {
 		return bundlesActivated;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassStats.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassStats.java
index 60a9701..092dd15 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassStats.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassStats.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.core.runtime.internal.stats;
 
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Maintain statistics about a loaded class.
@@ -26,7 +27,7 @@ public class ClassStats {
 
 	// parentage of classes loaded
 	private ClassStats loadedBy = null; // a reference to the class that loaded this class
-	private ArrayList loaded = new ArrayList(2); // a reference to the classes that this class loaded
+	private List<ClassStats> loaded = new ArrayList<ClassStats>(2); // a reference to the classes that this class loaded
 
 	private boolean duringStartup; // indicate if the class was loaded during platform startup
 
@@ -89,7 +90,7 @@ public class ClassStats {
 		return loadedBy;
 	}
 
-	public ArrayList getLoadedClasses() {
+	public List<ClassStats> getLoadedClasses() {
 		return loaded;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassloaderStats.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassloaderStats.java
index 0e9f781..f34da3d 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassloaderStats.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ClassloaderStats.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,24 +20,23 @@ import java.util.*;
 public class ClassloaderStats {
 	private String id;
 	private long loadingTime; // time spent loading classes
-	private int failureCount = 0; // number of classes requested but that we fail to provide
 	/**
 	 * classes loaded by the plugin (key: class name, value: ClassStats) 
 	 */
-	private Map classes = Collections.synchronizedMap(new HashMap(20));
-	private ArrayList bundles = new ArrayList(2); // bundles loaded
+	private Map<String, ClassStats> classes = Collections.synchronizedMap(new HashMap<String, ClassStats>(20));
+	private List<ResourceBundleStats> bundles = new ArrayList<ResourceBundleStats>(2); // bundles loaded
 
 	private boolean keepTraces = false; // indicate whether or not the traces of classes loaded are kept
 
 	// filters to indicate which classes we want to keep the traces
-	private static ArrayList packageFilters = new ArrayList(4); // filters on a package basis 
-	private static Set pluginFilters = new HashSet(5); // filters on a plugin basis
+	private static List<String> packageFilters = new ArrayList<String>(4); // filters on a package basis 
+	private static Set<String> pluginFilters = new HashSet<String>(5); // filters on a plugin basis
 
-	private static Hashtable classStacks = new Hashtable(); // represents the classes that are currently being loaded
+	private static Hashtable<Thread, Stack<ClassStats>> classStacks = new Hashtable<Thread, Stack<ClassStats>>(); // represents the classes that are currently being loaded
 	/**
 	 * a dictionary of the classloaderStats (key: pluginId, value: ClassloaderStats) 
 	 */
-	private static Map loaders = Collections.synchronizedMap(new HashMap(20));
+	private static Map<String, ClassloaderStats> loaders = Collections.synchronizedMap(new HashMap<String, ClassloaderStats>(20));
 	public static File traceFile;
 
 	static {
@@ -95,7 +94,7 @@ public class ClassloaderStats {
 	// get and create if does not exist
 	private static ClassloaderStats findLoader(String id) {
 		synchronized (loaders) {
-			ClassloaderStats result = (ClassloaderStats) loaders.get(id);
+			ClassloaderStats result = loaders.get(id);
 			if (result == null) {
 				result = new ClassloaderStats(id);
 				loaders.put(id, result);
@@ -104,10 +103,10 @@ public class ClassloaderStats {
 		}
 	}
 
-	public static synchronized Stack getClassStack() {
-		Stack result = (Stack) classStacks.get(Thread.currentThread());
+	public static synchronized Stack<ClassStats> getClassStack() {
+		Stack<ClassStats> result = classStacks.get(Thread.currentThread());
 		if (result == null) {
-			result = new Stack();
+			result = new Stack<ClassStats>();
 			classStacks.put(Thread.currentThread(), result);
 		}
 		return result;
@@ -116,7 +115,7 @@ public class ClassloaderStats {
 	public static ClassloaderStats[] getLoaders() {
 		//the parameter to toArray is of size zero for thread safety, otherwise this
 		//could return an array with null entries if the map shrinks concurrently
-		return (ClassloaderStats[]) loaders.values().toArray(new ClassloaderStats[0]);
+		return loaders.values().toArray(new ClassloaderStats[0]);
 	}
 
 	public static void endLoadingClass(String id, String className, boolean success) {
@@ -128,7 +127,7 @@ public class ClassloaderStats {
 	}
 
 	public static ClassloaderStats getLoader(String id) {
-		return (ClassloaderStats) loaders.get(id);
+		return loaders.get(id);
 	}
 
 	public ClassloaderStats(String id) {
@@ -151,7 +150,7 @@ public class ClassloaderStats {
 		bundles.add(bundle);
 	}
 
-	public ArrayList getBundles() {
+	public List<ResourceBundleStats> getBundles() {
 		return bundles;
 	}
 
@@ -161,16 +160,14 @@ public class ClassloaderStats {
 
 	// internal method that return the existing classStats or creates one
 	private ClassStats findClass(String name) {
-		ClassStats result = (ClassStats) classes.get(name);
+		ClassStats result = classes.get(name);
 		return result == null ? new ClassStats(name, this) : result;
 	}
 
 	private synchronized void endLoadClass(String name, boolean success) {
-		ClassStats current = (ClassStats) getClassStack().pop();
-		if (!success) {
-			failureCount++;
+		ClassStats current = getClassStack().pop();
+		if (!success)
 			return;
-		}
 		if (current.getLoadOrder() >= 0)
 			return;
 
@@ -180,10 +177,10 @@ public class ClassloaderStats {
 		traceLoad(name, current);
 
 		// is there something on the load stack. if so, link them together...
-		Stack classStack = getClassStack();
+		Stack<ClassStats> classStack = getClassStack();
 		if (classStack.size() != 0) {
 			// get the time spent loading cli and subtract its load time from the class that requires loading
-			ClassStats previous = ((ClassStats) classStack.peek());
+			ClassStats previous = classStack.peek();
 			previous.addTimeLoadingOthers(current.getTimeLoading());
 			current.setLoadedBy(previous);
 			previous.loaded(current);
@@ -197,7 +194,7 @@ public class ClassloaderStats {
 		if (!keepTraces) {
 			boolean found = false;
 			for (int i = 0; !found && i < packageFilters.size(); i++)
-				if (name.startsWith((String) packageFilters.get(i)))
+				if (name.startsWith(packageFilters.get(i)))
 					found = true;
 			if (!found)
 				return;
@@ -211,9 +208,9 @@ public class ClassloaderStats {
 				output.println("Loading class: " + name); //$NON-NLS-1$
 				output.println("Class loading stack:"); //$NON-NLS-1$
 				output.println("\t" + name); //$NON-NLS-1$
-				Stack classStack = getClassStack();
+				Stack<ClassStats> classStack = getClassStack();
 				for (int i = classStack.size() - 1; i >= 0; i--)
-					output.println("\t" + ((ClassStats) classStack.get(i)).getClassName()); //$NON-NLS-1$
+					output.println("\t" + classStack.get(i).getClassName()); //$NON-NLS-1$
 				output.println("Stack trace:"); //$NON-NLS-1$
 				new Throwable().printStackTrace(output);
 			} finally {
@@ -236,7 +233,7 @@ public class ClassloaderStats {
 	public ClassStats[] getClasses() {
 		//the parameter to toArray is of size zero for thread safety, otherwise this
 		//could return an array with null entries if the map shrinks concurrently
-		return (ClassStats[]) classes.values().toArray(new ClassStats[0]);
+		return classes.values().toArray(new ClassStats[0]);
 	}
 
 	public String getId() {
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ResourceBundleStats.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ResourceBundleStats.java
index e338e50..2c072f9 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ResourceBundleStats.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/ResourceBundleStats.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,8 +53,8 @@ public class ResourceBundleStats {
 	 * Compute the size of bundle
 	 */
 	private void initialize(ResourceBundle bundle) {
-		for (Enumeration keys = bundle.getKeys(); keys.hasMoreElements();) {
-			String key = (String) keys.nextElement();
+		for (Enumeration<String> keys = bundle.getKeys(); keys.hasMoreElements();) {
+			String key = keys.nextElement();
 			keySize += sizeOf(key);
 			valueSize += sizeOf(bundle.getString(key));
 			keyCount++;
@@ -72,7 +72,7 @@ public class ResourceBundleStats {
 				stream = url.openStream();
 				fileSize = stream.available();
 				props.load(stream);
-				for (Iterator iter = props.keySet().iterator(); iter.hasNext();) {
+				for (Iterator<Object> iter = props.keySet().iterator(); iter.hasNext();) {
 					String key = (String) iter.next();
 					keySize += sizeOf(key);
 					valueSize += sizeOf(props.getProperty(key));
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/StatsManager.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/StatsManager.java
index 250ff9b..8356d80 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/StatsManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/stats/StatsManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,8 +29,8 @@ import org.osgi.framework.Bundle;
 public class StatsManager implements BundleWatcher, HookConfigurator, ClassLoadingStatsHook {
 	// This connect bundles and their info, and so allows to access the info without running through
 	// the bundle registry. This map only contains activated bundles. The key is the bundle Id
-	private Hashtable bundles = new Hashtable(20);
-	private Map activationStacks = new HashMap(5);
+	private Hashtable<Long, BundleStats> bundles = new Hashtable<Long, BundleStats>(20);
+	private Map<Thread, Stack<BundleStats>> activationStacks = new HashMap<Thread, Stack<BundleStats>>(5);
 	private static boolean booting = true; // the state of the platform. This value is changed by the InternalPlatform itself.
 
 	private static StatsManager defaultInstance;
@@ -123,15 +123,15 @@ public class StatsManager implements BundleWatcher, HookConfigurator, ClassLoadi
 		info.setActivationOrder(bundles.size());
 		info.setDuringStartup(booting);
 
-		Stack activationStack = (Stack) activationStacks.get(Thread.currentThread());
+		Stack<BundleStats> activationStack = activationStacks.get(Thread.currentThread());
 		if (activationStack == null) {
-			activationStack = new Stack();
+			activationStack = new Stack<BundleStats>();
 			activationStacks.put(Thread.currentThread(), activationStack);
 		}
 
 		// set the parentage of activation
 		if (activationStack.size() != 0) {
-			BundleStats activatedBy = (BundleStats) activationStack.peek();
+			BundleStats activatedBy = activationStack.peek();
 			activatedBy.activated(info);
 			info.setActivatedBy(activatedBy);
 		}
@@ -143,9 +143,9 @@ public class StatsManager implements BundleWatcher, HookConfigurator, ClassLoadi
 	}
 
 	public void endActivation(Bundle symbolicName) {
-		Stack activationStack = (Stack) activationStacks.get(Thread.currentThread());
+		Stack<BundleStats> activationStack = activationStacks.get(Thread.currentThread());
 		// should be called from a synchronized location to protect against concurrent updates
-		BundleStats info = (BundleStats) activationStack.pop();
+		BundleStats info = activationStack.pop();
 		info.endActivation();
 	}
 
@@ -156,13 +156,13 @@ public class StatsManager implements BundleWatcher, HookConfigurator, ClassLoadi
 				long startPosition = ClassloaderStats.traceFile.length();
 				output.println("Activating bundle: " + bundle.getSymbolicName()); //$NON-NLS-1$
 				output.println("Bundle activation stack:"); //$NON-NLS-1$
-				Stack activationStack = (Stack) activationStacks.get(Thread.currentThread());
+				Stack<BundleStats> activationStack = activationStacks.get(Thread.currentThread());
 				for (int i = activationStack.size() - 1; i >= 0; i--)
-					output.println("\t" + ((BundleStats) activationStack.get(i)).getSymbolicName()); //$NON-NLS-1$
+					output.println("\t" + activationStack.get(i).getSymbolicName()); //$NON-NLS-1$
 				output.println("Class loading stack:"); //$NON-NLS-1$
-				Stack classStack = ClassloaderStats.getClassStack();
+				Stack<ClassStats> classStack = ClassloaderStats.getClassStack();
 				for (int i = classStack.size() - 1; i >= 0; i--)
-					output.println("\t" + ((ClassStats) classStack.get(i)).getClassName()); //$NON-NLS-1$
+					output.println("\t" + classStack.get(i).getClassName()); //$NON-NLS-1$
 				output.println("Stack trace:"); //$NON-NLS-1$
 				new Throwable().printStackTrace(output);
 				info.setTraceStart(startPosition);
@@ -176,7 +176,7 @@ public class StatsManager implements BundleWatcher, HookConfigurator, ClassLoadi
 	}
 
 	public BundleStats findBundle(String symbolicName, long id) {
-		BundleStats result = (BundleStats) bundles.get(new Long(id));
+		BundleStats result = bundles.get(new Long(id));
 		try {
 			if (result == null) {
 				result = new BundleStats(symbolicName, id);
@@ -189,19 +189,22 @@ public class StatsManager implements BundleWatcher, HookConfigurator, ClassLoadi
 	}
 
 	public BundleStats[] getBundles() {
-		return (BundleStats[]) bundles.values().toArray(new BundleStats[bundles.size()]);
+		return bundles.values().toArray(new BundleStats[bundles.size()]);
 	}
 
 	public BundleStats getBundle(long id) {
-		return (BundleStats) bundles.get(new Long(id));
+		return bundles.get(new Long(id));
 	}
 
+	/**
+	 * @throws ClassNotFoundException  
+	 */
 	public void preFindLocalClass(String name, ClasspathManager manager) throws ClassNotFoundException {
 		if (StatsManager.MONITOR_CLASSES) //Support for performance analysis
 			ClassloaderStats.startLoadingClass(getClassloaderId(manager), name);
 	}
 
-	public void postFindLocalClass(String name, Class clazz, ClasspathManager manager) {
+	public void postFindLocalClass(String name, Class<?> clazz, ClasspathManager manager) {
 		if (StatsManager.MONITOR_CLASSES)
 			ClassloaderStats.endLoadingClass(getClassloaderId(manager), name, clazz != null);
 	}
@@ -217,7 +220,7 @@ public class StatsManager implements BundleWatcher, HookConfigurator, ClassLoadi
 		return;
 	}
 
-	public void recordClassDefine(String name, Class clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
+	public void recordClassDefine(String name, Class<?> clazz, byte[] classbytes, ClasspathEntry classpathEntry, BundleEntry entry, ClasspathManager manager) {
 		// do nothing
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/BasicReadWriteLock.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/BasicReadWriteLock.java
new file mode 100644
index 0000000..695c327
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/BasicReadWriteLock.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+public class BasicReadWriteLock {
+	private int currentReaders = 0;
+	private int writersWaiting = 0;
+	private boolean writing = false;
+
+	public synchronized void readLock() {
+		while (writing || writersWaiting != 0) {
+			try {
+				wait();
+			} catch (InterruptedException e) {
+				// reset interrupted state but keep waiting
+				Thread.currentThread().interrupt();
+			}
+		}
+		currentReaders++;
+	}
+
+	public synchronized void readUnlock() {
+		currentReaders--;
+		notifyAll();
+	}
+
+	public synchronized void writeLock() {
+		writersWaiting++;
+		while (writing || currentReaders != 0) {
+			try {
+				wait();
+			} catch (InterruptedException e) {
+				// reset interrupted state but keep waiting
+				Thread.currentThread().interrupt();
+			}
+		}
+		writersWaiting--;
+		writing = true;
+	}
+
+	public synchronized void writeUnlock() {
+		writing = false;
+		notifyAll();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/EventAdminAdapter.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/EventAdminAdapter.java
new file mode 100644
index 0000000..66a92b1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/EventAdminAdapter.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.util.*;
+import org.osgi.framework.*;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+public class EventAdminAdapter implements ServiceTrackerCustomizer<Object, Object> {
+	public static final String EVENT_TOPIC = "event.topics"; //$NON-NLS-1$
+	private static final String[] LOG_TOPICS_ARRAY = {"*", "org/*", "org/osgi/*", "org/osgi/service/*", "org/osgi/service/log/*", "org/osgi/service/log/LogEntry/*", "org/osgi/service/log/LogEntry/LOG_ERROR", "org/osgi/service/log/LogEntry/LOG_WARNING", "org/osgi/service/log/LogEntry/LOG_INFO", "org/osgi/service/log/LogEntry/LOG_DEBUG", "org/osgi/service/log/LogEntry/LOG_OTHER"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$//$NON-NLS-10$ //$NON-NLS-11$
+	private static final Object LOG_TOPIC_TOKEN = new Object();
+	private static Collection<String> logTopics = new HashSet<String>(Arrays.asList(LOG_TOPICS_ARRAY));
+	private static Collection<String> eventAdminObjectClass = Arrays.asList("org.osgi.service.event.EventAdmin"); //$NON-NLS-1$
+	private static Collection<String> eventHandlerObjectClass = Arrays.asList("org.osgi.service.event.EventHandler"); //$NON-NLS-1$
+
+	private ServiceTracker<Object, Object> eventAdminTracker;
+	private ServiceTracker<Object, Object> eventHandlerTracker;
+	private BundleContext context;
+	private ServiceReference<Object> eventAdmin;
+	private int logEventHandlers;
+	private ExtendedLogReaderServiceFactory logReaderServiceFactory;
+	private EventAdminLogListener logListener;
+
+	public EventAdminAdapter(BundleContext context, ExtendedLogReaderServiceFactory logReaderServiceFactory) {
+		this.context = context;
+		this.logReaderServiceFactory = logReaderServiceFactory;
+		eventAdminTracker = new ServiceTracker<Object, Object>(context, "org.osgi.service.event.EventAdmin", this);
+		eventHandlerTracker = new ServiceTracker<Object, Object>(context, "org.osgi.service.event.EventHandler", this);
+	}
+
+	public void start() {
+		eventAdminTracker.open();
+		eventHandlerTracker.open();
+	}
+
+	public void stop() {
+		eventAdminTracker.close();
+		eventHandlerTracker.close();
+	}
+
+	public Object addingService(ServiceReference<Object> reference) {
+		Object toTrack = null;
+		Object objectClass = reference.getProperty(Constants.OBJECTCLASS);
+		Object topics = reference.getProperty(EVENT_TOPIC);
+		if (checkServiceProp(objectClass, eventAdminObjectClass) && eventAdmin == null) {
+			toTrack = reference;
+			eventAdmin = reference;
+		} else if (checkServiceProp(objectClass, eventHandlerObjectClass) && checkServiceProp(topics, logTopics)) {
+			logEventHandlers++;
+			toTrack = LOG_TOPIC_TOKEN;
+		}
+
+		if (eventAdmin != null && logEventHandlers > 0 && logListener == null) {
+			try {
+				logListener = new EventAdminLogListener(context.getService(eventAdmin));
+			} catch (ClassNotFoundException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (NoSuchMethodException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			logReaderServiceFactory.addLogListener(logListener, ExtendedLogReaderServiceFactory.NULL_LOGGER_FILTER);
+		}
+
+		return toTrack;
+	}
+
+	public void modifiedService(ServiceReference<Object> reference, Object tracked) {
+		removedService(reference, tracked);
+		addingService(reference);
+	}
+
+	public void removedService(ServiceReference<Object> reference, Object tracked) {
+		if (tracked == eventAdmin) {
+			eventAdmin = null;
+			context.ungetService(reference);
+		} else if (LOG_TOPIC_TOKEN == tracked) {
+			logEventHandlers--;
+		}
+
+		if (logListener != null && (eventAdmin == null || logEventHandlers == 0)) {
+			logReaderServiceFactory.removeLogListener(logListener);
+			logListener = null;
+		}
+	}
+
+	private static boolean checkServiceProp(Object property, Collection<String> check) {
+		if (property instanceof String)
+			return check.contains(property);
+
+		if (property instanceof String[]) {
+			String[] topics = (String[]) property;
+			for (int i = 0; i < topics.length; i++) {
+				if (check.contains(topics[i]))
+					return true;
+			}
+		}
+
+		if (property instanceof Collection) {
+			for (Object prop : (Collection<?>) property)
+				if (check.contains(prop))
+					return true;
+		}
+		return false;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/EventAdminLogListener.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/EventAdminLogListener.java
new file mode 100644
index 0000000..02877e4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/EventAdminLogListener.java
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 IBM Corporation
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.lang.reflect.*;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import org.eclipse.equinox.log.SynchronousLogListener;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogService;
+
+public class EventAdminLogListener implements SynchronousLogListener {
+
+	// constants for Event topic substring
+	public static final String TOPIC = "org/osgi/service/log/LogEntry"; //$NON-NLS-1$
+	public static final char TOPIC_SEPARATOR = '/';
+	// constants for Event types
+	public static final String LOG_ERROR = "LOG_ERROR"; //$NON-NLS-1$
+	public static final String LOG_WARNING = "LOG_WARNING"; //$NON-NLS-1$
+	public static final String LOG_INFO = "LOG_INFO"; //$NON-NLS-1$
+	public static final String LOG_DEBUG = "LOG_DEBUG"; //$NON-NLS-1$
+	public static final String LOG_OTHER = "LOG_OTHER"; //$NON-NLS-1$
+	// constants for Event properties
+	public static final String TIMESTAMP = "timestamp"; //$NON-NLS-1$
+	public static final String MESSAGE = "message"; //$NON-NLS-1$
+	public static final String LOG_LEVEL = "log.level"; //$NON-NLS-1$
+	public static final String LOG_ENTRY = "log.entry"; //$NON-NLS-1$
+	public static final String SERVICE = "service"; //$NON-NLS-1$
+	public static final String SERVICE_ID = "service.id"; //$NON-NLS-1$
+	public static final String SERVICE_OBJECTCLASS = "service.objectClass"; //$NON-NLS-1$
+	public static final String SERVICE_PID = "service.pid"; //$NON-NLS-1$
+	public static final String BUNDLE = "bundle"; //$NON-NLS-1$
+	public static final String BUNDLE_ID = "bundle.id"; //$NON-NLS-1$
+	public static final String BUNDLE_SYMBOLICNAME = "bundle.symbolicName"; //$NON-NLS-1$
+	public static final String EVENT = "event"; //$NON-NLS-1$
+	public static final String EXCEPTION = "exception"; //$NON-NLS-1$
+	public static final String EXCEPTION_CLASS = "exception.class"; //$NON-NLS-1$
+	public static final String EXCEPTION_MESSAGE = "exception.message"; //$NON-NLS-1$
+
+	private final Object eventAdmin;
+	private final Method postEvent;
+	private final Constructor<?> event;
+
+	public EventAdminLogListener(Object eventAdmin) throws ClassNotFoundException, NoSuchMethodException {
+		this.eventAdmin = eventAdmin;
+		Class<?> eventAdminClass = eventAdmin.getClass();
+		ClassLoader cl = eventAdminClass.getClassLoader();
+		Class<?> eventClass = cl.loadClass("org.osgi.service.event.Event"); //$NON-NLS-1$
+
+		postEvent = eventAdminClass.getMethod("postEvent", eventClass); //$NON-NLS-1$
+		event = eventClass.getConstructor(String.class, Dictionary.class);
+	}
+
+	public void logged(LogEntry entry) {
+		try {
+			Object convertedEvent = convertEvent(entry);
+			postEvent.invoke(eventAdmin, convertedEvent);
+		} catch (InvocationTargetException e) {
+			Throwable t = e.getTargetException();
+			if ((t instanceof RuntimeException))
+				throw (RuntimeException) t;
+			if ((t instanceof Error))
+				throw (Error) t;
+			// unexpected
+			throw new RuntimeException(e);
+		} catch (IllegalAccessException e) {
+			// unexpected
+			throw new RuntimeException(e);
+		} catch (InstantiationException e) {
+			// unexpected
+			throw new RuntimeException(e);
+		}
+	}
+
+	private Object convertEvent(LogEntry entry) throws InstantiationException, IllegalAccessException, InvocationTargetException {
+		String topic = TOPIC;
+		int level = entry.getLevel();
+		switch (level) {
+			case LogService.LOG_ERROR :
+				topic += TOPIC_SEPARATOR + LOG_ERROR;
+				break;
+			case LogService.LOG_WARNING :
+				topic += TOPIC_SEPARATOR + LOG_WARNING;
+				break;
+			case LogService.LOG_INFO :
+				topic += TOPIC_SEPARATOR + LOG_INFO;
+				break;
+			case LogService.LOG_DEBUG :
+				topic += TOPIC_SEPARATOR + LOG_DEBUG;
+				break;
+			default : // other log levels are represented by LOG_OTHER
+				topic += TOPIC_SEPARATOR + LOG_OTHER;
+		}
+		Hashtable<String, Object> properties = new Hashtable<String, Object>();
+		Bundle bundle = entry.getBundle();
+		if (bundle == null) {
+			throw new RuntimeException("LogEntry.getBundle() returns null"); //$NON-NLS-1$
+		}
+		putBundleProperties(properties, bundle);
+		Throwable t = entry.getException();
+		if (t != null) {
+			putExceptionProperties(properties, t);
+		}
+		ServiceReference<?> ref = entry.getServiceReference();
+		if (ref != null) {
+			putServiceReferenceProperties(properties, ref);
+		}
+		properties.put(LOG_ENTRY, entry);
+		properties.put(LOG_LEVEL, new Integer(entry.getLevel()));
+		if (entry.getMessage() != null)
+			properties.put(MESSAGE, entry.getMessage());
+		properties.put(TIMESTAMP, new Long(entry.getTime()));
+		return event.newInstance(topic, properties);
+	}
+
+	public static void putServiceReferenceProperties(Hashtable<String, Object> properties, ServiceReference<?> ref) {
+		properties.put(SERVICE, ref);
+		properties.put(SERVICE_ID, ref.getProperty(org.osgi.framework.Constants.SERVICE_ID));
+		Object o = ref.getProperty(org.osgi.framework.Constants.SERVICE_PID);
+		if ((o != null) && (o instanceof String)) {
+			properties.put(SERVICE_PID, o);
+		}
+		Object o2 = ref.getProperty(org.osgi.framework.Constants.OBJECTCLASS);
+		if ((o2 != null) && (o2 instanceof String[])) {
+			properties.put(SERVICE_OBJECTCLASS, o2);
+		}
+	}
+
+	public static void putBundleProperties(Hashtable<String, Object> properties, Bundle bundle) {
+		properties.put(BUNDLE_ID, new Long(bundle.getBundleId()));
+		String symbolicName = bundle.getSymbolicName();
+		if (symbolicName != null) {
+			properties.put(BUNDLE_SYMBOLICNAME, symbolicName);
+		}
+		properties.put(BUNDLE, bundle);
+	}
+
+	public static void putExceptionProperties(Hashtable<String, Object> properties, Throwable t) {
+		properties.put(EXCEPTION, t);
+		properties.put(EXCEPTION_CLASS, t.getClass().getName());
+		String message = t.getMessage();
+		if (message != null) {
+			properties.put(EXCEPTION_MESSAGE, t.getMessage());
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java
new file mode 100644
index 0000000..76134e0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogEntryImpl.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+import org.eclipse.equinox.log.ExtendedLogEntry;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogEntry;
+
+public class ExtendedLogEntryImpl implements ExtendedLogEntry, LogEntry {
+
+	private static long nextSequenceNumber = 1L;
+	private static long nextThreadId = 1L;
+	private static final Map<Thread, Long> threadIds = createThreadIdMap();
+
+	private final String loggerName;
+	private final Bundle bundle;
+	private final int level;
+	private final String message;
+	private final Throwable throwable;
+	private final Object contextObject;
+	private final long time;
+	private final long threadId;
+	private final String threadName;
+	private final long sequenceNumber;
+
+	private static Map<Thread, Long> createThreadIdMap() {
+		try {
+			Thread.class.getMethod("getId", (Class[]) null); //$NON-NLS-1$
+		} catch (NoSuchMethodException e) {
+			return new WeakHashMap<Thread, Long>();
+		}
+		return null;
+	}
+
+	private static long getId(Thread thread) {
+		if (threadIds == null)
+			return thread.getId();
+
+		Long threadId = threadIds.get(thread);
+		if (threadId == null) {
+			threadId = new Long(nextThreadId++);
+			threadIds.put(thread, threadId);
+		}
+		return threadId.longValue();
+	}
+
+	public ExtendedLogEntryImpl(Bundle bundle, String loggerName, Object contextObject, int level, String message, Throwable throwable) {
+		this.time = System.currentTimeMillis();
+		this.loggerName = loggerName;
+		this.bundle = bundle;
+		this.level = level;
+		this.message = message;
+		this.throwable = throwable;
+		this.contextObject = contextObject;
+
+		Thread currentThread = Thread.currentThread();
+		this.threadName = currentThread.getName();
+
+		synchronized (ExtendedLogEntryImpl.class) {
+			this.threadId = getId(currentThread);
+			this.sequenceNumber = nextSequenceNumber++;
+		}
+	}
+
+	public String getLoggerName() {
+		return loggerName;
+	}
+
+	public long getSequenceNumber() {
+		return sequenceNumber;
+	}
+
+	public long getThreadId() {
+		return threadId;
+	}
+
+	public String getThreadName() {
+		return threadName;
+	}
+
+	public Bundle getBundle() {
+		return bundle;
+	}
+
+	public Throwable getException() {
+		return throwable;
+	}
+
+	public int getLevel() {
+		return level;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public ServiceReference getServiceReference() {
+		if (contextObject != null && contextObject instanceof ServiceReference)
+			return (ServiceReference) contextObject;
+
+		return null;
+	}
+
+	public long getTime() {
+		return time;
+	}
+
+	public Object getContext() {
+		return contextObject;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceFactory.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceFactory.java
new file mode 100644
index 0000000..cd2707f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceFactory.java
@@ -0,0 +1,225 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.io.PrintStream;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.*;
+import org.eclipse.equinox.log.LogFilter;
+import org.eclipse.equinox.log.SynchronousLogListener;
+import org.eclipse.osgi.internal.baseadaptor.ArrayMap;
+import org.osgi.framework.*;
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogListener;
+
+public class ExtendedLogReaderServiceFactory implements ServiceFactory<ExtendedLogReaderServiceImpl> {
+
+	static final class LogTask implements Runnable {
+		private final LogEntry logEntry;
+		private final LogListener listener;
+
+		LogTask(LogEntry logEntry, LogListener listener) {
+			this.logEntry = logEntry;
+			this.listener = listener;
+		}
+
+		public void run() {
+			safeLogged(listener, logEntry);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private static final Enumeration<?> EMPTY_ENUMERATION = Collections.enumeration(Collections.EMPTY_LIST);
+
+	static final LogFilter NULL_LOGGER_FILTER = new LogFilter() {
+		public boolean isLoggable(Bundle b, String loggerName, int logLevel) {
+			return true;
+		}
+	};
+
+	private static final LogFilter[] ALWAYS_LOG = new LogFilter[0];
+
+	private static PrintStream errorStream;
+
+	private ArrayMap<LogListener, Object[]> listeners = new ArrayMap<LogListener, Object[]>(5);
+	private LogFilter[] filters = null;
+
+	private BasicReadWriteLock listenersLock = new BasicReadWriteLock();
+
+	static boolean safeIsLoggable(LogFilter filter, Bundle bundle, String name, int level) {
+		try {
+			return filter.isLoggable(bundle, name, level);
+		} catch (RuntimeException e) {
+			// "listener.logged" calls user code and might throw an unchecked exception
+			// we catch the error here to gather information on where the problem occurred.
+			getErrorStream().println("LogFilter.isLoggable threw a non-fatal unchecked exception as follows:"); //$NON-NLS-1$
+			e.printStackTrace(getErrorStream());
+		} catch (LinkageError e) {
+			// Catch linkage errors as these are generally recoverable but let other Errors propagate (see bug 222001)
+			getErrorStream().println("LogFilter.isLoggable threw a non-fatal unchecked exception as follows:"); //$NON-NLS-1$
+			e.printStackTrace(getErrorStream());
+		}
+		return false;
+	}
+
+	private static synchronized PrintStream getErrorStream() {
+		if (errorStream == null)
+			return System.err;
+
+		return errorStream;
+	}
+
+	public static synchronized void setErrorStream(PrintStream ps) {
+		errorStream = ps;
+	}
+
+	static void safeLogged(LogListener listener, LogEntry logEntry) {
+		try {
+			listener.logged(logEntry);
+		} catch (RuntimeException e) {
+			// "listener.logged" calls user code and might throw an unchecked exception
+			// we catch the error here to gather information on where the problem occurred.
+			getErrorStream().println("LogListener.logged threw a non-fatal unchecked exception as follows:"); //$NON-NLS-1$
+			e.printStackTrace(getErrorStream());
+		} catch (LinkageError e) {
+			// Catch linkage errors as these are generally recoverable but let other Errors propagate (see bug 222001)
+			getErrorStream().println("LogListener.logged threw a non-fatal unchecked exception as follows:"); //$NON-NLS-1$
+			e.printStackTrace(getErrorStream());
+		}
+	}
+
+	public ExtendedLogReaderServiceImpl getService(Bundle bundle, ServiceRegistration<ExtendedLogReaderServiceImpl> registration) {
+		return new ExtendedLogReaderServiceImpl(this);
+	}
+
+	public void ungetService(Bundle bundle, ServiceRegistration<ExtendedLogReaderServiceImpl> registration, ExtendedLogReaderServiceImpl service) {
+		service.shutdown();
+	}
+
+	boolean isLoggable(final Bundle bundle, final String name, final int level) {
+		if (System.getSecurityManager() != null) {
+			return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+				public Boolean run() {
+					return isLoggablePrivileged(bundle, name, level);
+				}
+			});
+		}
+		return isLoggablePrivileged(bundle, name, level);
+	}
+
+	boolean isLoggablePrivileged(Bundle bundle, String name, int level) {
+		listenersLock.readLock();
+		try {
+			if (filters == null)
+				return false;
+
+			if (filters == ALWAYS_LOG)
+				return true;
+
+			int filtersLength = filters.length;
+			for (int i = 0; i < filtersLength; i++) {
+				LogFilter filter = filters[i];
+				if (safeIsLoggable(filter, bundle, name, level))
+					return true;
+			}
+		} finally {
+			listenersLock.readUnlock();
+		}
+		return false;
+	}
+
+	void log(final Bundle bundle, final String name, final Object context, final int level, final String message, final Throwable exception) {
+		if (System.getSecurityManager() != null) {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
+				public Object run() {
+					logPrivileged(bundle, name, context, level, message, exception);
+					return null;
+				}
+			});
+		} else {
+			logPrivileged(bundle, name, context, level, message, exception);
+		}
+	}
+
+	void logPrivileged(Bundle bundle, String name, Object context, int level, String message, Throwable exception) {
+		LogEntry logEntry = new ExtendedLogEntryImpl(bundle, name, context, level, message, exception);
+		listenersLock.readLock();
+		try {
+			int size = listeners.size();
+			for (int i = 0; i < size; i++) {
+				Object[] listenerObjects = listeners.getValue(i);
+				LogFilter filter = (LogFilter) listenerObjects[0];
+				if (safeIsLoggable(filter, bundle, name, level)) {
+					LogListener listener = listeners.getKey(i);
+					SerializedTaskQueue taskQueue = (SerializedTaskQueue) listenerObjects[1];
+					if (taskQueue != null) {
+						taskQueue.put(new LogTask(logEntry, listener));
+					} else {
+						// log synchronously
+						safeLogged(listener, logEntry);
+					}
+				}
+			}
+		} finally {
+			listenersLock.readUnlock();
+		}
+	}
+
+	void addLogListener(LogListener listener, LogFilter filter) {
+		listenersLock.writeLock();
+		try {
+			Object[] listenerObjects = listeners.get(listener);
+			if (listenerObjects == null) {
+				// Only create a task queue for non-SynchronousLogListeners
+				SerializedTaskQueue taskQueue = (listener instanceof SynchronousLogListener) ? null : new SerializedTaskQueue(listener.toString());
+				listenerObjects = new Object[] {filter, taskQueue};
+			} else if (filter != listenerObjects[0]) {
+				// update the filter
+				listenerObjects[0] = filter;
+			}
+			listeners.put(listener, listenerObjects);
+			recalculateFilters();
+		} finally {
+			listenersLock.writeUnlock();
+		}
+	}
+
+	private void recalculateFilters() {
+		List<LogFilter> filtersList = new ArrayList<LogFilter>();
+		int size = listeners.size();
+		for (int i = 0; i < size; i++) {
+			Object[] listenerObjects = listeners.getValue(i);
+			LogFilter filter = (LogFilter) listenerObjects[0];
+			if (filter == NULL_LOGGER_FILTER) {
+				filters = ALWAYS_LOG;
+				return;
+			}
+			filtersList.add(filter);
+		}
+
+		if (filtersList.isEmpty())
+			filters = null;
+
+		filters = filtersList.toArray(new LogFilter[filtersList.size()]);
+	}
+
+	void removeLogListener(LogListener listener) {
+		listenersLock.writeLock();
+		try {
+			listeners.remove(listener);
+			recalculateFilters();
+		} finally {
+			listenersLock.writeUnlock();
+		}
+	}
+
+	Enumeration<?> getLog() {
+		return EMPTY_ENUMERATION;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceImpl.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceImpl.java
new file mode 100644
index 0000000..d8567fa
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogReaderServiceImpl.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.util.*;
+import org.eclipse.equinox.log.ExtendedLogReaderService;
+import org.eclipse.equinox.log.LogFilter;
+import org.osgi.service.log.LogListener;
+
+public class ExtendedLogReaderServiceImpl implements ExtendedLogReaderService {
+
+	private final ExtendedLogReaderServiceFactory factory;
+	private Set<LogListener> listeners = new HashSet<LogListener>();
+
+	ExtendedLogReaderServiceImpl(ExtendedLogReaderServiceFactory factory) {
+		this.factory = factory;
+	}
+
+	public synchronized void addLogListener(LogListener listener, LogFilter filter) {
+		checkShutdown();
+		if (listener == null)
+			throw new IllegalArgumentException("LogListener must not be null"); //$NON-NLS-1$
+
+		if (filter == null)
+			throw new IllegalArgumentException("LogFilter must not be null"); //$NON-NLS-1$		
+
+		listeners.add(listener);
+		factory.addLogListener(listener, filter);
+	}
+
+	public void addLogListener(LogListener listener) {
+		addLogListener(listener, ExtendedLogReaderServiceFactory.NULL_LOGGER_FILTER);
+	}
+
+	@SuppressWarnings("rawtypes")
+	public Enumeration getLog() {
+		checkShutdown();
+		return factory.getLog();
+	}
+
+	public synchronized void removeLogListener(LogListener listener) {
+		checkShutdown();
+		if (listener == null)
+			throw new IllegalArgumentException("LogListener must not be null"); //$NON-NLS-1$
+
+		factory.removeLogListener(listener);
+		listeners.remove(listener);
+	}
+
+	private synchronized void checkShutdown() {
+		if (listeners == null)
+			throw new IllegalStateException("LogReaderService is shutdown."); //$NON-NLS-1$
+	}
+
+	synchronized void shutdown() {
+		for (LogListener listener : listeners) {
+			factory.removeLogListener(listener);
+		}
+		listeners = null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogServiceFactory.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogServiceFactory.java
new file mode 100644
index 0000000..0ae7ca2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogServiceFactory.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.security.Permission;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.equinox.log.ExtendedLogService;
+import org.eclipse.equinox.log.LogPermission;
+import org.osgi.framework.*;
+
+public class ExtendedLogServiceFactory implements ServiceFactory<ExtendedLogService>, BundleListener {
+
+	private final Permission logPermission = new LogPermission("*", LogPermission.LOG); //$NON-NLS-1$
+	private final ExtendedLogReaderServiceFactory logReaderServiceFactory;
+	private final Map<Bundle, ExtendedLogService> logServices = new HashMap<Bundle, ExtendedLogService>();
+
+	public ExtendedLogServiceFactory(ExtendedLogReaderServiceFactory logReaderServiceFactory) {
+		this.logReaderServiceFactory = logReaderServiceFactory;
+	}
+
+	public ExtendedLogServiceImpl getService(Bundle bundle, ServiceRegistration<ExtendedLogService> registration) {
+		return getLogService(bundle);
+	}
+
+	public void ungetService(Bundle bundle, ServiceRegistration<ExtendedLogService> registration, ExtendedLogService service) {
+		// do nothing
+		// Notice that we do not remove the the LogService impl for the bundle because other bundles
+		// still need to be able to get the cached loggers for a bundle.
+	}
+
+	public void bundleChanged(BundleEvent event) {
+		if (event.getType() == BundleEvent.UNINSTALLED)
+			removeLogService(event.getBundle());
+	}
+
+	synchronized ExtendedLogServiceImpl getLogService(Bundle bundle) {
+		ExtendedLogServiceImpl logService = (ExtendedLogServiceImpl) logServices.get(bundle);
+		if (logService == null) {
+			logService = new ExtendedLogServiceImpl(this, bundle);
+			if (bundle != null && bundle.getState() != Bundle.UNINSTALLED)
+				logServices.put(bundle, logService);
+		}
+		return logService;
+	}
+
+	synchronized void shutdown() {
+		logServices.clear();
+	}
+
+	synchronized void removeLogService(Bundle bundle) {
+		logServices.remove(bundle);
+	}
+
+	boolean isLoggable(Bundle bundle, String name, int level) {
+		return logReaderServiceFactory.isLoggable(bundle, name, level);
+	}
+
+	void log(Bundle bundle, String name, Object context, int level, String message, Throwable exception) {
+		logReaderServiceFactory.log(bundle, name, context, level, message, exception);
+	}
+
+	void checkLogPermission() throws SecurityException {
+		SecurityManager sm = System.getSecurityManager();
+		if (sm != null)
+			sm.checkPermission(logPermission);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogServiceImpl.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogServiceImpl.java
new file mode 100644
index 0000000..a2760e9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/ExtendedLogServiceImpl.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.util.HashMap;
+import org.eclipse.equinox.log.ExtendedLogService;
+import org.eclipse.equinox.log.Logger;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+
+public class ExtendedLogServiceImpl implements ExtendedLogService, LogService {
+
+	private final ExtendedLogServiceFactory factory;
+	private volatile Bundle bundle;
+	private final HashMap<String, Logger> loggerCache = new HashMap<String, Logger>();
+
+	public ExtendedLogServiceImpl(ExtendedLogServiceFactory factory, Bundle bundle) {
+		this.factory = factory;
+		this.bundle = bundle;
+	}
+
+	public void log(int level, String message) {
+		log(null, level, message, null);
+	}
+
+	public void log(int level, String message, Throwable exception) {
+		log(null, level, message, exception);
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void log(ServiceReference sr, int level, String message) {
+		log(sr, level, message, null);
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void log(ServiceReference sr, int level, String message, Throwable exception) {
+		getLogger(null).log(sr, level, message, exception);
+	}
+
+	public void log(Object context, int level, String message) {
+		log(context, level, message, null);
+	}
+
+	public void log(Object context, int level, String message, Throwable exception) {
+		getLogger(null).log(context, level, message, exception);
+	}
+
+	public synchronized Logger getLogger(String name) {
+		Logger logger = loggerCache.get(name);
+		if (logger == null) {
+			logger = new LoggerImpl(this, name);
+			loggerCache.put(name, logger);
+		}
+		return logger;
+	}
+
+	public Logger getLogger(Bundle logBundle, String name) {
+		if (logBundle == null || logBundle == bundle)
+			return getLogger(name);
+		// only check permission if getting another bundles log
+		factory.checkLogPermission();
+		ExtendedLogService bundleLogService = factory.getLogService(logBundle);
+		return bundleLogService.getLogger(name);
+	}
+
+	public String getName() {
+		return getLogger(null).getName();
+	}
+
+	public boolean isLoggable(int level) {
+		return getLogger(null).isLoggable(level);
+	}
+
+	// package private methods called from Logger
+	boolean isLoggable(String name, int level) {
+		return factory.isLoggable(bundle, name, level);
+	}
+
+	// package private methods called from Logger
+	void log(String name, Object context, int level, String message, Throwable exception) {
+		factory.log(bundle, name, context, level, message, exception);
+	}
+
+	void setBundle(Bundle bundle) {
+		this.bundle = bundle;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/LogServiceManager.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/LogServiceManager.java
new file mode 100644
index 0000000..e9fcc27
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/LogServiceManager.java
@@ -0,0 +1,316 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.cert.X509Certificate;
+import java.util.*;
+import org.eclipse.equinox.log.*;
+import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
+import org.osgi.framework.*;
+import org.osgi.service.log.*;
+
+public class LogServiceManager implements BundleListener, FrameworkListener, ServiceListener {
+
+	private static final String[] LOGSERVICE_CLASSES = {LogService.class.getName(), ExtendedLogService.class.getName()};
+	private static final String[] LOGREADERSERVICE_CLASSES = {LogReaderService.class.getName(), ExtendedLogReaderService.class.getName()};
+
+	private ServiceRegistration<?> logReaderServiceRegistration;
+	private ServiceRegistration<?> logServiceRegistration;
+	private final ExtendedLogReaderServiceFactory logReaderServiceFactory = new ExtendedLogReaderServiceFactory();
+	private final ExtendedLogServiceFactory logServiceFactory = new ExtendedLogServiceFactory(logReaderServiceFactory);
+	private final ExtendedLogServiceImpl systemBundleLog = logServiceFactory.getLogService(new MockSystemBundle());
+	private EventAdminAdapter eventAdminAdapter;
+
+	public LogServiceManager(LogListener... systemListeners) {
+		for (LogListener logListener : systemListeners) {
+			if (logListener instanceof LogFilter)
+				logReaderServiceFactory.addLogListener(logListener, (LogFilter) logListener);
+			else
+				logReaderServiceFactory.addLogListener(logListener, ExtendedLogReaderServiceFactory.NULL_LOGGER_FILTER);
+		}
+
+	}
+
+	public void start(BundleContext context) {
+		systemBundleLog.setBundle(context.getBundle());
+		context.addBundleListener(this);
+		context.addServiceListener(this);
+		context.addFrameworkListener(this);
+
+		context.addBundleListener(logServiceFactory);
+		logReaderServiceRegistration = context.registerService(LOGREADERSERVICE_CLASSES, logReaderServiceFactory, null);
+		logServiceRegistration = context.registerService(LOGSERVICE_CLASSES, logServiceFactory, null);
+
+		eventAdminAdapter = new EventAdminAdapter(context, logReaderServiceFactory);
+		eventAdminAdapter.start();
+	}
+
+	public void stop(BundleContext context) {
+		eventAdminAdapter.stop();
+		eventAdminAdapter = null;
+		logServiceRegistration.unregister();
+		logServiceRegistration = null;
+		logReaderServiceRegistration.unregister();
+		logReaderServiceRegistration = null;
+		logServiceFactory.shutdown();
+		context.removeFrameworkListener(this);
+		context.removeServiceListener(this);
+		context.removeBundleListener(this);
+	}
+
+	public ExtendedLogService getSystemBundleLog() {
+		return systemBundleLog;
+	}
+
+	/**
+	 * BundleListener.bundleChanged method.
+	 *
+	 */
+	public void bundleChanged(BundleEvent event) {
+		Bundle bundle = event.getBundle();
+		if (logReaderServiceFactory.isLoggable(bundle, null, LogService.LOG_INFO))
+			logReaderServiceFactory.log(bundle, null, null, LogService.LOG_INFO, getBundleEventTypeName(event.getType()), null);
+	}
+
+	/**
+	 * ServiceListener.serviceChanged method.
+	 *
+	 */
+	public void serviceChanged(ServiceEvent event) {
+		ServiceReference<?> reference = event.getServiceReference();
+		Bundle bundle = reference.getBundle();
+		int eventType = event.getType();
+		int logType = (eventType == ServiceEvent.MODIFIED) ? LogService.LOG_DEBUG : LogService.LOG_INFO;
+		if (logReaderServiceFactory.isLoggable(bundle, null, logType))
+			logReaderServiceFactory.log(bundle, null, reference, logType, getServiceEventTypeName(eventType), null);
+	}
+
+	/**
+	 * FrameworkListener.frameworkEvent method.
+	 *
+	 */
+	public void frameworkEvent(FrameworkEvent event) {
+		Bundle bundle = event.getBundle();
+		int eventType = event.getType();
+		int logType = (eventType == FrameworkEvent.ERROR) ? LogService.LOG_ERROR : LogService.LOG_INFO;
+		Throwable throwable = (eventType == FrameworkEvent.ERROR) ? event.getThrowable() : null;
+		if (logReaderServiceFactory.isLoggable(bundle, null, logType))
+			logReaderServiceFactory.log(bundle, null, null, logType, getFrameworkEventTypeName(eventType), throwable);
+	}
+
+	/**
+	 * Convert BundleEvent type to a string.
+	 *
+	 */
+	private static String getBundleEventTypeName(int type) {
+		switch (type) {
+			case BundleEvent.INSTALLED :
+				return ("BundleEvent INSTALLED"); //$NON-NLS-1$
+
+			case BundleEvent.RESOLVED :
+				return ("BundleEvent RESOLVED"); //$NON-NLS-1$
+
+			case BundleEvent.STARTED :
+				return ("BundleEvent STARTED"); //$NON-NLS-1$
+
+			case BundleEvent.STARTING :
+				return ("BundleEvent STARTING"); //$NON-NLS-1$
+
+			case BundleEvent.STOPPED :
+				return ("BundleEvent STOPPED"); //$NON-NLS-1$
+
+			case BundleEvent.STOPPING :
+				return ("BundleEvent STOPPING"); //$NON-NLS-1$
+
+			case BundleEvent.UNINSTALLED :
+				return ("BundleEvent UNINSTALLED"); //$NON-NLS-1$
+
+			case BundleEvent.UNRESOLVED :
+				return ("BundleEvent UNRESOLVED"); //$NON-NLS-1$
+
+			case BundleEvent.UPDATED :
+				return ("BundleEvent UPDATED"); //$NON-NLS-1$
+
+			default :
+				return ("BundleEvent " + Integer.toHexString(type)); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Convert ServiceEvent type to a string.
+	 *
+	 */
+	private static String getServiceEventTypeName(int type) {
+		switch (type) {
+			case ServiceEvent.REGISTERED :
+				return ("ServiceEvent REGISTERED"); //$NON-NLS-1$
+
+			case ServiceEvent.MODIFIED :
+				return ("ServiceEvent MODIFIED"); //$NON-NLS-1$
+
+			case ServiceEvent.UNREGISTERING :
+				return ("ServiceEvent UNREGISTERING"); //$NON-NLS-1$
+
+			default :
+				return ("ServiceEvent " + Integer.toHexString(type)); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Convert FrameworkEvent type to a string.
+	 *
+	 */
+	private static String getFrameworkEventTypeName(int type) {
+		switch (type) {
+			case FrameworkEvent.ERROR :
+				return ("FrameworkEvent ERROR"); //$NON-NLS-1$
+
+			case FrameworkEvent.INFO :
+				return ("FrameworkEvent INFO"); //$NON-NLS-1$
+
+			case FrameworkEvent.PACKAGES_REFRESHED :
+				return ("FrameworkEvent PACKAGES REFRESHED"); //$NON-NLS-1$
+
+			case FrameworkEvent.STARTED :
+				return ("FrameworkEvent STARTED"); //$NON-NLS-1$
+
+			case FrameworkEvent.STARTLEVEL_CHANGED :
+				return ("FrameworkEvent STARTLEVEL CHANGED"); //$NON-NLS-1$
+
+			case FrameworkEvent.WARNING :
+				return ("FrameworkEvent WARNING"); //$NON-NLS-1$
+
+			default :
+				return ("FrameworkEvent " + Integer.toHexString(type)); //$NON-NLS-1$
+		}
+	}
+
+	static class MockSystemBundle implements Bundle {
+
+		public int compareTo(Bundle o) {
+			long idcomp = getBundleId() - o.getBundleId();
+			return (idcomp < 0L) ? -1 : ((idcomp > 0L) ? 1 : 0);
+		}
+
+		public int getState() {
+			return Bundle.RESOLVED;
+		}
+
+		public void start(int options) {
+			// nothing
+		}
+
+		public void start() {
+			// nothing
+		}
+
+		public void stop(int options) {
+			// nothing
+		}
+
+		public void stop() {
+			// nothing
+		}
+
+		public void update(InputStream input) {
+			// nothing
+		}
+
+		public void update() {
+			// nothing
+		}
+
+		public void uninstall() {
+			// nothing
+		}
+
+		public Dictionary<String, String> getHeaders() {
+			return new Hashtable<String, String>();
+		}
+
+		public long getBundleId() {
+			return 0;
+		}
+
+		public String getLocation() {
+			return Constants.SYSTEM_BUNDLE_LOCATION;
+		}
+
+		public ServiceReference<?>[] getRegisteredServices() {
+			return null;
+		}
+
+		public ServiceReference<?>[] getServicesInUse() {
+			return null;
+		}
+
+		public boolean hasPermission(Object permission) {
+			return true;
+		}
+
+		public URL getResource(String name) {
+			return null;
+		}
+
+		public Dictionary<String, String> getHeaders(String locale) {
+			return null;
+		}
+
+		public String getSymbolicName() {
+			return FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME;
+		}
+
+		public Class<?> loadClass(String name) throws ClassNotFoundException {
+			throw new ClassNotFoundException();
+		}
+
+		public Enumeration<URL> getResources(String name) {
+			return null;
+		}
+
+		public Enumeration<String> getEntryPaths(String path) {
+			return null;
+		}
+
+		public URL getEntry(String path) {
+			return null;
+		}
+
+		public long getLastModified() {
+			return System.currentTimeMillis();
+		}
+
+		public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
+			return null;
+		}
+
+		public BundleContext getBundleContext() {
+			return null;
+		}
+
+		public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+			return new HashMap<X509Certificate, List<X509Certificate>>();
+		}
+
+		public Version getVersion() {
+			return new Version(0, 0, 0);
+		}
+
+		public <A> A adapt(Class<A> type) {
+			return null;
+		}
+
+		public File getDataFile(String filename) {
+			return null;
+		}
+
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/LoggerImpl.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/LoggerImpl.java
new file mode 100644
index 0000000..0a55592
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/LoggerImpl.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import org.eclipse.equinox.log.Logger;
+import org.osgi.framework.ServiceReference;
+
+public class LoggerImpl implements Logger {
+
+	private final ExtendedLogServiceImpl logServiceImpl;
+	private final String name;
+
+	public LoggerImpl(ExtendedLogServiceImpl logServiceImpl, String name) {
+		this.logServiceImpl = logServiceImpl;
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public boolean isLoggable(int level) {
+		return logServiceImpl.isLoggable(name, level);
+	}
+
+	public void log(int level, String message) {
+		log(null, level, message, null);
+	}
+
+	public void log(int level, String message, Throwable exception) {
+		log(null, level, message, exception);
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void log(ServiceReference sr, int level, String message) {
+		log(sr, level, message, null);
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void log(ServiceReference sr, int level, String message, Throwable exception) {
+		logServiceImpl.log(name, sr, level, message, exception);
+	}
+
+	public void log(Object context, int level, String message) {
+		log(context, level, message, null);
+	}
+
+	public void log(Object context, int level, String message, Throwable exception) {
+		logServiceImpl.log(name, context, level, message, exception);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/SerializedTaskQueue.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/SerializedTaskQueue.java
new file mode 100644
index 0000000..9c15ad4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/equinox/log/internal/SerializedTaskQueue.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 Cognos Incorporated, IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log.internal;
+
+import java.util.LinkedList;
+
+/**
+ * SerializedTaskQueue is a utility class that will allow asynchronous but serialized execution of tasks
+ */
+public class SerializedTaskQueue {
+
+	private static final int MAX_WAIT = 5000;
+	private final LinkedList<Runnable> tasks = new LinkedList<Runnable>();
+	private Thread thread;
+	private final String queueName;
+
+	public SerializedTaskQueue(String queueName) {
+		this.queueName = queueName;
+	}
+
+	public synchronized void put(Runnable newTask) {
+		tasks.add(newTask);
+		if (thread == null) {
+			thread = new Thread(queueName) {
+				public void run() {
+					Runnable task = nextTask(MAX_WAIT);
+					while (task != null) {
+						task.run();
+						task = nextTask(MAX_WAIT);
+					}
+				}
+			};
+			thread.start();
+		} else
+			notify();
+	}
+
+	synchronized Runnable nextTask(int maxWait) {
+		if (tasks.isEmpty()) {
+			try {
+				wait(maxWait);
+			} catch (InterruptedException e) {
+				// ignore -- we control the stack here and do not need to propagate it.
+			}
+
+			if (tasks.isEmpty()) {
+				thread = null;
+				return null;
+			}
+		}
+		return tasks.removeFirst();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java
index 3e21ac6..097d58f 100644
--- a/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java
+++ b/eclipse/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,7 @@ public interface PluginConverter {
 	 * 	generated (or already existed), <code>null</code> otherwise.
 	 * @throws PluginConversionException if an error occurs while converting the manifest
 	 */
-	public File convertManifest(File pluginBaseLocation, File bundleManifestLocation, boolean compatibilityManifest, String target, boolean analyseJars, Dictionary devProperties) throws PluginConversionException;
+	public File convertManifest(File pluginBaseLocation, File bundleManifestLocation, boolean compatibilityManifest, String target, boolean analyseJars, Dictionary<String, String> devProperties) throws PluginConversionException;
 
 	/**
 	 * Converts a plug-in/fragment manifest at the given source base location (a directory) and 
@@ -59,7 +59,7 @@ public interface PluginConverter {
 	 * 	generated, <code>null</code> otherwise
 	 * @throws PluginConversionException if an error occurs while converting the manifest
 	 */
-	public Dictionary convertManifest(File pluginBaseLocation, boolean compatibility, String target, boolean analyseJars, Dictionary devProperties) throws PluginConversionException;
+	public Dictionary<String, String> convertManifest(File pluginBaseLocation, boolean compatibility, String target, boolean analyseJars, Dictionary<String, String> devProperties) throws PluginConversionException;
 
 	/**
 	 * Construct a bundle manifest file from the given dictionary and write it out to the 
@@ -76,5 +76,5 @@ public interface PluginConverter {
 	 * 	running in backward compatibility mode
 	 * @throws PluginConversionException if an error occurs while writing the given manifest
 	 */
-	public void writeManifest(File generationLocation, Dictionary manifestToWrite, boolean compatibilityManifest) throws PluginConversionException;
+	public void writeManifest(File generationLocation, Dictionary<String, String> manifestToWrite, boolean compatibilityManifest) throws PluginConversionException;
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/hookconfigurators.properties b/eclipse/plugins/org.eclipse.osgi/hookconfigurators.properties
index ea475f3..db4cebc 100644
--- a/eclipse/plugins/org.eclipse.osgi/hookconfigurators.properties
+++ b/eclipse/plugins/org.eclipse.osgi/hookconfigurators.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,5 +19,6 @@ hook.configurators= \
  org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter,\
  org.eclipse.core.runtime.internal.stats.StatsManager,\
  org.eclipse.osgi.internal.signedcontent.SignedBundleHook,\
- org.eclipse.osgi.internal.composite.CompositeConfigurator
+ org.eclipse.osgi.internal.composite.CompositeConfigurator,\
+ org.eclipse.osgi.internal.baseadaptor.weaving.WeavingHookConfigurator
 builtin.hooks = true
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AdaptPermission.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AdaptPermission.java
new file mode 100644
index 0000000..f95c1fe
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AdaptPermission.java
@@ -0,0 +1,635 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.framework;
+
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.security.AccessController;
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A bundle's authority to adapt an object to a type.
+ * 
+ * <p>
+ * {@code AdaptPermission} has one action: {@code adapt}.
+ * 
+ * @ThreadSafe
+ * @version $Id: bc4c5d392d2534a7744f6fc00f4665502f82033c $
+ */
+public class AdaptPermission extends BasicPermission {
+
+	private static final long						serialVersionUID	= 1L;
+
+	/**
+	 * The action string {@code initiate}.
+	 */
+	public final static String						ADAPT				= "adapt";
+
+	private final static int						ACTION_ADAPT		= 0x00000001;
+	private final static int						ACTION_ALL			= ACTION_ADAPT;
+	final static int								ACTION_NONE			= 0;
+
+	/**
+	 * The actions mask.
+	 */
+	transient int									action_mask;
+
+	/**
+	 * The actions in canonical form.
+	 * 
+	 * @serial
+	 */
+	private volatile String							actions				= null;
+
+	/**
+	 * The bundle used by this AdaptPermission.
+	 */
+	transient final Bundle							bundle;
+
+	/**
+	 * This holds a Filter matching object used to evaluate the filter in
+	 * implies.
+	 */
+	transient Filter								filter;
+
+	/**
+	 * This map holds the properties of the permission, used to match a filter
+	 * in implies. This is not initialized until necessary, and then cached in
+	 * this object.
+	 */
+	private transient volatile Map<String, Object>	properties;
+
+	/**
+	 * Creates a new granted {@code AdaptPermission} object.
+	 * 
+	 * This constructor must only be used to create a permission that is going
+	 * to be checked.
+	 * <p>
+	 * Examples:
+	 * 
+	 * <pre>
+	 * (adaptClass=com.acme.*)
+	 * (&(signer=\*,o=ACME,c=US)(adaptClass=com.acme.*))
+	 * (signer=\*,o=ACME,c=US)
+	 * </pre>
+	 * 
+	 * <p>
+	 * When a signer key is used within the filter expression the signer value
+	 * must escape the special filter chars ('*', '(', ')').
+	 * <p>
+	 * The name is specified as a filter expression. The filter gives access to
+	 * the following attributes:
+	 * <ul>
+	 * <li>signer - A Distinguished Name chain used to sign the exporting
+	 * bundle. Wildcards in a DN are not matched according to the filter string
+	 * rules, but according to the rules defined for a DN chain.</li>
+	 * <li>location - The location of the exporting bundle.</li>
+	 * <li>id - The bundle ID of the exporting bundle.</li>
+	 * <li>name - The symbolic name of the exporting bundle.</li>
+	 * <li>adaptClass - The name of the type to which an object can be adapted.</li>
+	 * </ul>
+	 * Filter attribute names are processed in a case sensitive manner.
+	 * 
+	 * @param filter A filter expression. Filter attribute names are processed
+	 *        in a case sensitive manner. A special value of {@code "*"} can be
+	 *        used to match all adaptations.
+	 * @param actions {@code adapt}.
+	 * @throws IllegalArgumentException If the filter has an invalid syntax.
+	 */
+	public AdaptPermission(String filter, String actions) {
+		this(parseFilter(filter), parseActions(actions));
+	}
+
+	/**
+	 * Creates a new requested {@code AdaptPermission} object to be used by the
+	 * code that must perform {@code checkPermission}. {@code AdaptPermission}
+	 * objects created with this constructor cannot be added to an
+	 * {@code AdaptPermission} permission collection.
+	 * 
+	 * @param adaptClass The name of the type to which an object can be adapted.
+	 * @param adaptableBundle The bundle associated with the object being
+	 *        adapted.
+	 * @param actions {@code adapt}.
+	 */
+	public AdaptPermission(String adaptClass, Bundle adaptableBundle,
+			String actions) {
+		super(adaptClass);
+		setTransients(null, parseActions(actions));
+		this.bundle = adaptableBundle;
+		if (adaptClass == null) {
+			throw new NullPointerException("adaptClass must not be null");
+		}
+		if (adaptableBundle == null) {
+			throw new NullPointerException("adaptableBundle must not be null");
+		}
+	}
+
+	/**
+	 * Package private constructor used by AdaptPermissionCollection.
+	 * 
+	 * @param filter name filter
+	 * @param mask action mask
+	 */
+	AdaptPermission(Filter filter, int mask) {
+		super((filter == null) ? "*" : filter.toString());
+		setTransients(filter, mask);
+		this.bundle = null;
+	}
+
+	/**
+	 * Called by constructors and when deserialized.
+	 * 
+	 * @param filter Permission's filter or {@code null} for wildcard.
+	 * @param mask action mask
+	 */
+	private void setTransients(Filter filter, int mask) {
+		this.filter = filter;
+		if ((mask == ACTION_NONE) || ((mask & ACTION_ALL) != mask)) {
+			throw new IllegalArgumentException("invalid action string");
+		}
+		this.action_mask = mask;
+	}
+
+	/**
+	 * Parse action string into action mask.
+	 * 
+	 * @param actions Action string.
+	 * @return action mask.
+	 */
+	private static int parseActions(String actions) {
+		boolean seencomma = false;
+
+		int mask = ACTION_NONE;
+
+		if (actions == null) {
+			return mask;
+		}
+
+		char[] a = actions.toCharArray();
+
+		int i = a.length - 1;
+		if (i < 0)
+			return mask;
+
+		while (i != -1) {
+			char c;
+
+			// skip whitespace
+			while ((i != -1)
+					&& ((c = a[i]) == ' ' || c == '\r' || c == '\n'
+							|| c == '\f' || c == '\t'))
+				i--;
+
+			// check for the known strings
+			int matchlen;
+
+			if (i >= 4 && (a[i - 4] == 'a' || a[i - 4] == 'A')
+					&& (a[i - 3] == 'd' || a[i - 3] == 'D')
+					&& (a[i - 2] == 'a' || a[i - 2] == 'A')
+					&& (a[i - 1] == 'p' || a[i - 1] == 'P')
+					&& (a[i] == 't' || a[i] == 'T')) {
+				matchlen = 5;
+				mask |= ACTION_ADAPT;
+
+			}
+			else {
+				// parse error
+				throw new IllegalArgumentException("invalid actions: "
+						+ actions);
+			}
+
+			// make sure we didn't just match the tail of a word
+			// like "ackbarfadapt". Also, skip to the comma.
+			seencomma = false;
+			while (i >= matchlen && !seencomma) {
+				switch (a[i - matchlen]) {
+					case ',' :
+						seencomma = true;
+						/* FALLTHROUGH */
+					case ' ' :
+					case '\r' :
+					case '\n' :
+					case '\f' :
+					case '\t' :
+						break;
+					default :
+						throw new IllegalArgumentException(
+								"invalid permission: " + actions);
+				}
+				i--;
+			}
+
+			// point i at the location of the comma minus one (or -1).
+			i -= matchlen;
+		}
+
+		if (seencomma) {
+			throw new IllegalArgumentException("invalid actions: " + actions);
+		}
+
+		return mask;
+	}
+
+	/**
+	 * Parse filter string into a Filter object.
+	 * 
+	 * @param filterString The filter string to parse.
+	 * @return a Filter for this bundle.
+	 * @throws IllegalArgumentException If the filter syntax is invalid.
+	 */
+	private static Filter parseFilter(String filterString) {
+		filterString = filterString.trim();
+		if (filterString.equals("*")) {
+			return null;
+		}
+		try {
+			return FrameworkUtil.createFilter(filterString);
+		}
+		catch (InvalidSyntaxException e) {
+			IllegalArgumentException iae = new IllegalArgumentException(
+					"invalid filter");
+			iae.initCause(e);
+			throw iae;
+		}
+	}
+
+	/**
+	 * Determines if the specified permission is implied by this object.
+	 * 
+	 * <p>
+	 * This method checks that the filter of the target is implied by the adapt
+	 * class name of this object. The list of {@code AdaptPermission} actions
+	 * must either match or allow for the list of the target object to imply the
+	 * target {@code AdaptPermission} action.
+	 * <p>
+	 * 
+	 * @param p The requested permission.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
+	 */
+	public boolean implies(Permission p) {
+		if (!(p instanceof AdaptPermission)) {
+			return false;
+		}
+		AdaptPermission requested = (AdaptPermission) p;
+		if (bundle != null) {
+			return false;
+		}
+		// if requested permission has a filter, then it is an invalid argument
+		if (requested.filter != null) {
+			return false;
+		}
+		return implies0(requested, ACTION_NONE);
+	}
+
+	/**
+	 * Internal implies method. Used by the implies and the permission
+	 * collection implies methods.
+	 * 
+	 * @param requested The requested AdaptPermission which has already be
+	 *        validated as a proper argument. The requested AdaptPermission must
+	 *        not have a filter expression.
+	 * @param effective The effective actions with which to start.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
+	 */
+	boolean implies0(AdaptPermission requested, int effective) {
+		/* check actions first - much faster */
+		effective |= action_mask;
+		final int desired = requested.action_mask;
+		if ((effective & desired) != desired) {
+			return false;
+		}
+		/* Get filter */
+		Filter f = filter;
+		if (f == null) {
+			// it's "*"
+			return true;
+		}
+		return f.matches(requested.getProperties());
+	}
+
+	/**
+	 * Returns the canonical string representation of the
+	 * {@code AdaptPermission} actions.
+	 * 
+	 * <p>
+	 * Always returns present {@code AdaptPermission} actions in the following
+	 * order: {@code adapt}.
+	 * 
+	 * @return Canonical string representation of the {@code AdaptPermission}
+	 *         actions.
+	 */
+	public String getActions() {
+		String result = actions;
+		if (result == null) {
+			actions = result = ADAPT;
+		}
+		return result;
+	}
+
+	/**
+	 * Returns a new {@code PermissionCollection} object suitable for storing
+	 * {@code AdaptPermission} objects.
+	 * 
+	 * @return A new {@code PermissionCollection} object.
+	 */
+	public PermissionCollection newPermissionCollection() {
+		return new AdaptPermissionCollection();
+	}
+
+	/**
+	 * Determines the equality of two {@code AdaptPermission} objects.
+	 * 
+	 * This method checks that specified permission has the same name and
+	 * {@code AdaptPermission} actions as this {@code AdaptPermission} object.
+	 * 
+	 * @param obj The object to test for equality with this
+	 *        {@code AdaptPermission} object.
+	 * @return {@code true} if {@code obj} is a {@code AdaptPermission}, and has
+	 *         the same name and actions as this {@code AdaptPermission} object;
+	 *         {@code false} otherwise.
+	 */
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+
+		if (!(obj instanceof AdaptPermission)) {
+			return false;
+		}
+
+		AdaptPermission cp = (AdaptPermission) obj;
+
+		return (action_mask == cp.action_mask)
+				&& getName().equals(cp.getName())
+				&& ((bundle == cp.bundle) || ((bundle != null) && bundle
+						.equals(cp.bundle)));
+	}
+
+	/**
+	 * Returns the hash code value for this object.
+	 * 
+	 * @return A hash code value for this object.
+	 */
+	public int hashCode() {
+		int h = 31 * 17 + getName().hashCode();
+		h = 31 * h + getActions().hashCode();
+		if (bundle != null) {
+			h = 31 * h + bundle.hashCode();
+		}
+		return h;
+	}
+
+	/**
+	 * WriteObject is called to save the state of this permission object to a
+	 * stream. The actions are serialized, and the superclass takes care of the
+	 * name.
+	 */
+	private synchronized void writeObject(java.io.ObjectOutputStream s)
+			throws IOException {
+		if (bundle != null) {
+			throw new NotSerializableException("cannot serialize");
+		}
+		// Write out the actions. The superclass takes care of the name
+		// call getActions to make sure actions field is initialized
+		if (actions == null)
+			getActions();
+		s.defaultWriteObject();
+	}
+
+	/**
+	 * readObject is called to restore the state of this permission from a
+	 * stream.
+	 */
+	private synchronized void readObject(java.io.ObjectInputStream s)
+			throws IOException, ClassNotFoundException {
+		// Read in the action, then initialize the rest
+		s.defaultReadObject();
+		setTransients(parseFilter(getName()), parseActions(actions));
+	}
+
+	/**
+	 * Called by {@code <@link AdaptPermission#implies(Permission)>}. This
+	 * method is only called on a requested permission which cannot have a
+	 * filter set.
+	 * 
+	 * @return a map of properties for this permission.
+	 */
+	private Map<String, Object> getProperties() {
+		Map<String, Object> result = properties;
+		if (result != null) {
+			return result;
+		}
+		final Map<String, Object> map = new HashMap<String, Object>(5);
+		map.put("adaptClass", getName());
+		if (bundle != null) {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
+				public Object run() {
+					map.put("id", new Long(bundle.getBundleId()));
+					map.put("location", bundle.getLocation());
+					String name = bundle.getSymbolicName();
+					if (name != null) {
+						map.put("name", name);
+					}
+					SignerProperty signer = new SignerProperty(bundle);
+					if (signer.isBundleSigned()) {
+						map.put("signer", signer);
+					}
+					return null;
+				}
+			});
+		}
+		return properties = map;
+	}
+}
+
+/**
+ * Stores a set of {@code AdaptPermission} permissions.
+ * 
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.security.PermissionCollection
+ */
+
+final class AdaptPermissionCollection extends PermissionCollection {
+	static final long						serialVersionUID	= -3350758995234427603L;
+	/**
+	 * Collection of permissions.
+	 * 
+	 * @serial
+	 * @GuardedBy this
+	 */
+	private Map<String, AdaptPermission>	permissions;
+
+	/**
+	 * Boolean saying if "*" is in the collection.
+	 * 
+	 * @serial
+	 * @GuardedBy this
+	 */
+	private boolean							all_allowed;
+
+	/**
+	 * Create an empty AdaptPermissions object.
+	 */
+	public AdaptPermissionCollection() {
+		permissions = new HashMap<String, AdaptPermission>();
+		all_allowed = false;
+	}
+
+	/**
+	 * Adds a permission to this permission collection.
+	 * 
+	 * @param permission The {@code AdaptPermission} object to add.
+	 * @throws IllegalArgumentException If the specified permission is not a
+	 *         {@code AdaptPermission} instance or was constructed with a Bundle
+	 *         object.
+	 * @throws SecurityException If this {@code AdaptPermissionCollection}
+	 *         object has been marked read-only.
+	 */
+	public void add(final Permission permission) {
+		if (!(permission instanceof AdaptPermission)) {
+			throw new IllegalArgumentException("invalid permission: "
+					+ permission);
+		}
+		if (isReadOnly()) {
+			throw new SecurityException("attempt to add a Permission to a "
+					+ "readonly PermissionCollection");
+		}
+
+		final AdaptPermission ap = (AdaptPermission) permission;
+		if (ap.bundle != null) {
+			throw new IllegalArgumentException("cannot add to collection: "
+					+ ap);
+		}
+
+		final String name = ap.getName();
+		synchronized (this) {
+			Map<String, AdaptPermission> pc = permissions;
+			final AdaptPermission existing = pc.get(name);
+			if (existing != null) {
+				final int oldMask = existing.action_mask;
+				final int newMask = ap.action_mask;
+				if (oldMask != newMask) {
+					pc.put(name, new AdaptPermission(existing.filter, oldMask
+							| newMask));
+
+				}
+			}
+			else {
+				pc.put(name, ap);
+			}
+
+			if (!all_allowed) {
+				if (name.equals("*")) {
+					all_allowed = true;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Determines if the specified permissions implies the permissions expressed
+	 * in {@code permission}.
+	 * 
+	 * @param permission The Permission object to compare with this
+	 *        {@code AdaptPermission} object.
+	 * @return {@code true} if {@code permission} is a proper subset of a
+	 *         permission in the set; {@code false} otherwise.
+	 */
+	public boolean implies(final Permission permission) {
+		if (!(permission instanceof AdaptPermission)) {
+			return false;
+		}
+		final AdaptPermission requested = (AdaptPermission) permission;
+		/* if requested permission has a filter, then it is an invalid argument */
+		if (requested.filter != null) {
+			return false;
+		}
+
+		int effective = AdaptPermission.ACTION_NONE;
+
+		Collection<AdaptPermission> perms;
+		synchronized (this) {
+			Map<String, AdaptPermission> pc = permissions;
+			/* short circuit if the "*" Permission was added */
+			if (all_allowed) {
+				AdaptPermission ap = pc.get("*");
+				if (ap != null) {
+					effective |= ap.action_mask;
+					final int desired = requested.action_mask;
+					if ((effective & desired) == desired) {
+						return true;
+					}
+				}
+			}
+			perms = pc.values();
+		}
+		/* iterate one by one over filteredPermissions */
+		for (AdaptPermission perm : perms) {
+			if (perm.implies0(requested, effective)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns an enumeration of all {@code AdaptPermission} objects in the
+	 * container.
+	 * 
+	 * @return Enumeration of all {@code AdaptPermission} objects.
+	 */
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		return Collections.enumeration(all);
+	}
+
+	/* serialization logic */
+	private static final ObjectStreamField[]	serialPersistentFields	= {
+			new ObjectStreamField("permissions", HashMap.class),
+			new ObjectStreamField("all_allowed", Boolean.TYPE)			};
+
+	private synchronized void writeObject(ObjectOutputStream out)
+			throws IOException {
+		ObjectOutputStream.PutField pfields = out.putFields();
+		pfields.put("permissions", permissions);
+		pfields.put("all_allowed", all_allowed);
+		out.writeFields();
+	}
+
+	private synchronized void readObject(java.io.ObjectInputStream in)
+			throws IOException, ClassNotFoundException {
+		ObjectInputStream.GetField gfields = in.readFields();
+		permissions = (HashMap<String, AdaptPermission>) gfields.get(
+				"permissions", null);
+		all_allowed = gfields.get("all_allowed", false);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AdminPermission.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AdminPermission.java
index 1811791..fc7b1f4 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AdminPermission.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AdminPermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2011). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,13 +26,13 @@ import java.security.BasicPermission;
 import java.security.Permission;
 import java.security.PermissionCollection;
 import java.security.PrivilegedAction;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
-import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -45,7 +45,7 @@ import java.util.Map;
  *  class                Bundle.loadClass
  *  execute              Bundle.start
  *                       Bundle.stop
- *                       StartLevel.setBundleStartLevel
+ *                       BundleStartLevel.setStartLevel
  *  extensionLifecycle   BundleContext.installBundle for extension bundles
  *                       Bundle.update for extension bundles
  *                       Bundle.uninstall for extension bundles
@@ -56,23 +56,25 @@ import java.util.Map;
  *                       BundleContext.removeBundleListener for SynchronousBundleListener
  *  metadata             Bundle.getHeaders
  *                       Bundle.getLocation
- *  resolve              PackageAdmin.refreshPackages
- *                       PackageAdmin.resolveBundles
+ *  resolve              FrameworkWiring.refreshBundles
+ *                       FrameworkWiring.resolveBundles
  *  resource             Bundle.getResource
  *                       Bundle.getResources
  *                       Bundle.getEntry
  *                       Bundle.getEntryPaths
  *                       Bundle.findEntries
  *                       Bundle resource/entry URL creation
- *  startlevel           StartLevel.setStartLevel
- *                       StartLevel.setInitialBundleStartLevel 
+ *  startlevel           FrameworkStartLevel.setStartLevel
+ *                       FrameworkStartLevel.setInitialBundleStartLevel 
  *  context              Bundle.getBundleContext
+ *  weave                WovenClass.setBytes
+ *                       WovenClass.getDynamicImports for modification
  * </pre>
  * 
  * <p>
  * The special action "*" will represent all actions. The
- * <code>resolve</code> action is implied by the <code>class</code>,
- * <code>execute</code> and <code>resource</code> actions.
+ * {@code resolve} action is implied by the {@code class}, {@code execute} and
+ * {@code resource} actions.
  * <p>
  * The name of this permission is a filter expression. The filter gives access
  * to the following attributes:
@@ -87,79 +89,86 @@ import java.util.Map;
  * Filter attribute names are processed in a case sensitive manner.
  * 
  * @ThreadSafe
- * @version $Revision: 7743 $
+ * @version $Id: 43baf9a6d7ce5e6108507834e841e340fd91c513 $
  */
 
 public final class AdminPermission extends BasicPermission {
 	static final long						serialVersionUID			= 307051004521261705L;
 
 	/**
-	 * The action string <code>class</code>. The <code>class</code> action
-	 * implies the <code>resolve</code> action.
+	 * The action string {@code class}. The {@code class} action
+	 * implies the {@code resolve} action.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	CLASS						= "class";
 	/**
-	 * The action string <code>execute</code>. The <code>execute</code> action
-	 * implies the <code>resolve</code> action.
+	 * The action string {@code execute}. The {@code execute} action
+	 * implies the {@code resolve} action.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	EXECUTE						= "execute";
 	/**
-	 * The action string <code>extensionLifecycle</code>.
+	 * The action string {@code extensionLifecycle}.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	EXTENSIONLIFECYCLE			= "extensionLifecycle";
 	/**
-	 * The action string <code>lifecycle</code>.
+	 * The action string {@code lifecycle}.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	LIFECYCLE					= "lifecycle";
 	/**
-	 * The action string <code>listener</code>.
+	 * The action string {@code listener}.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	LISTENER					= "listener";
 	/**
-	 * The action string <code>metadata</code>.
+	 * The action string {@code metadata}.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	METADATA					= "metadata";
 	/**
-	 * The action string <code>resolve</code>. The <code>resolve</code> action
-	 * is implied by the <code>class</code>, <code>execute</code> and
-	 * <code>resource</code> actions.
+	 * The action string {@code resolve}. The {@code resolve} action
+	 * is implied by the {@code class}, {@code execute} and
+	 * {@code resource} actions.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	RESOLVE						= "resolve";
 	/**
-	 * The action string <code>resource</code>. The <code>resource</code> action
-	 * implies the <code>resolve</code> action.
+	 * The action string {@code resource}. The {@code resource} action
+	 * implies the {@code resolve} action.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	RESOURCE					= "resource";
 	/**
-	 * The action string <code>startlevel</code>.
+	 * The action string {@code startlevel}.
 	 * 
 	 * @since 1.3
 	 */
 	public final static String	STARTLEVEL					= "startlevel";
 
 	/**
-	 * The action string <code>context</code>.
+	 * The action string {@code context}.
 	 * 
 	 * @since 1.4
 	 */
 	public final static String	CONTEXT						= "context";
 
+	/**
+	 * The action string {@code weave}.
+	 * 
+	 * @since 1.6
+	 */
+	public final static String						WEAVE						= "weave";
+
 	private final static int	ACTION_CLASS				= 0x00000001;
 	private final static int	ACTION_EXECUTE				= 0x00000002;
 	private final static int	ACTION_LIFECYCLE			= 0x00000004;
@@ -170,6 +179,7 @@ public final class AdminPermission extends BasicPermission {
 	private final static int	ACTION_STARTLEVEL			= 0x00000100;
 	private final static int	ACTION_EXTENSIONLIFECYCLE	= 0x00000200;
 	private final static int	ACTION_CONTEXT				= 0x00000400;
+	private final static int						ACTION_WEAVE				= 0x00000800;
 	private final static int	ACTION_ALL					= ACTION_CLASS
 																	| ACTION_EXECUTE
 																	| ACTION_LIFECYCLE
@@ -179,7 +189,8 @@ public final class AdminPermission extends BasicPermission {
 																	| ACTION_RESOURCE
 																	| ACTION_STARTLEVEL
 																	| ACTION_EXTENSIONLIFECYCLE
-																	| ACTION_CONTEXT;
+																						| ACTION_CONTEXT
+																						| ACTION_WEAVE;
 	final static int						ACTION_NONE					= 0;
 
 	/**
@@ -203,23 +214,23 @@ public final class AdminPermission extends BasicPermission {
 	/**
 	 * The bundle governed by this AdminPermission - only used if filter == null
 	 */
-	transient final Bundle					bundle; 
+	transient final Bundle					bundle;
 
 	/**
-	 * This dictionary holds the properties of the permission, used to match a
-	 * filter in implies. This is not initialized until necessary, and then
-	 * cached in this object.
+	 * This map holds the properties of the permission, used to match a filter
+	 * in implies. This is not initialized until necessary, and then cached in
+	 * this object.
 	 */
-	private transient volatile Dictionary	properties;
+	private transient volatile Map<String, Object>	properties;
 
 	/**
 	 * ThreadLocal used to determine if we have recursively called
 	 * getProperties.
 	 */
-	private static final ThreadLocal		recurse						= new ThreadLocal();
+	private static final ThreadLocal<Bundle>	recurse						= new ThreadLocal<Bundle>();
 
 	/**
-	 * Creates a new <code>AdminPermission</code> object that matches all
+	 * Creates a new {@code AdminPermission} object that matches all
 	 * bundles and has all actions. Equivalent to AdminPermission("*","*");
 	 */
 	public AdminPermission() {
@@ -247,14 +258,13 @@ public final class AdminPermission extends BasicPermission {
 	 * Null arguments are equivalent to "*".
 	 * 
 	 * @param filter A filter expression that can use signer, location, id, and
-	 *        name keys. A value of "*" or <code>null</code> matches
-	 *        all bundle. Filter attribute names are processed in a case
-	 *        sensitive manner.
-	 * @param actions <code>class</code>, <code>execute</code>,
-	 *        <code>extensionLifecycle</code>, <code>lifecycle</code>,
-	 *        <code>listener</code>, <code>metadata</code>, <code>resolve</code>
-	 *        , <code>resource</code>, <code>startlevel</code> or
-	 *        <code>context</code>. A value of "*" or <code>null</code>
+	 *        name keys. A value of "*" or {@code null} matches all
+	 *        bundle. Filter attribute names are processed in a case sensitive
+	 *        manner.
+	 * @param actions {@code class}, {@code execute}, {@code extensionLifecycle}
+	 *        , {@code lifecycle}, {@code listener}, {@code metadata},
+	 *        {@code resolve} , {@code resource}, {@code startlevel},
+	 *        {@code context} or {@code weave}. A value of "*" or {@code null}
 	 *        indicates all actions.
 	 * @throws IllegalArgumentException If the filter has an invalid syntax.
 	 */
@@ -265,17 +275,16 @@ public final class AdminPermission extends BasicPermission {
 	}
 
 	/**
-	 * Creates a new requested <code>AdminPermission</code> object to be used by
-	 * the code that must perform <code>checkPermission</code>.
-	 * <code>AdminPermission</code> objects created with this constructor cannot
-	 * be added to an <code>AdminPermission</code> permission collection.
+	 * Creates a new requested {@code AdminPermission} object to be used by the
+	 * code that must perform {@code checkPermission}. {@code AdminPermission}
+	 * objects created with this constructor cannot be added to an
+	 * {@code AdminPermission} permission collection.
 	 * 
 	 * @param bundle A bundle.
-	 * @param actions <code>class</code>, <code>execute</code>,
-	 *        <code>extensionLifecycle</code>, <code>lifecycle</code>,
-	 *        <code>listener</code>, <code>metadata</code>, <code>resolve</code>
-	 *        , <code>resource</code>, <code>startlevel</code>,
-	 *        <code>context</code>. A value of "*" or <code>null</code>
+	 * @param actions {@code class}, {@code execute}, {@code extensionLifecycle}
+	 *        , {@code lifecycle}, {@code listener}, {@code metadata},
+	 *        {@code resolve} , {@code resource}, {@code startlevel},
+	 *        {@code context}, {@code weave}. A value of "*" or {@code null}
 	 *        indicates all actions.
 	 * @since 1.3
 	 */
@@ -304,7 +313,7 @@ public final class AdminPermission extends BasicPermission {
 	/**
 	 * Package private constructor used by AdminPermissionCollection.
 	 * 
-	 * @param filter name filter or <code>null</code> for wildcard.
+	 * @param filter name filter or {@code null} for wildcard.
 	 * @param mask action mask
 	 */
 	AdminPermission(Filter filter, int mask) {
@@ -316,7 +325,7 @@ public final class AdminPermission extends BasicPermission {
 	/**
 	 * Called by constructors and when deserialized.
 	 * 
-	 * @param filter Permission's filter or <code>null</code> for wildcard.
+	 * @param filter Permission's filter or {@code null} for wildcard.
 	 * @param mask action mask
 	 */
 	private void setTransients(Filter filter, int mask) {
@@ -341,11 +350,7 @@ public final class AdminPermission extends BasicPermission {
 		boolean seencomma = false;
 	
 		int mask = ACTION_NONE;
-	
-		if (actions == null) {
-			return mask;
-		}
-	
+
 		char[] a = actions.toCharArray();
 	
 		int i = a.length - 1;
@@ -507,19 +512,29 @@ public final class AdminPermission extends BasicPermission {
 	
 												}
 												else
-													if (i >= 0 &&
-	
-													(a[i] == '*')) {
-														matchlen = 1;
-														mask |= ACTION_ALL;
-	
-													}
-													else {
-														// parse error
-														throw new IllegalArgumentException(
-																"invalid permission: "
-																		+ actions); 
+													if (i >= 4
+															&& (a[i - 4] == 'w' || a[i - 4] == 'W')
+															&& (a[i - 3] == 'e' || a[i - 3] == 'E')
+															&& (a[i - 2] == 'a' || a[i - 2] == 'A')
+															&& (a[i - 1] == 'v' || a[i - 1] == 'V')
+															&& (a[i] == 'e' || a[i] == 'E')) {
+														matchlen = 5;
+														mask |= ACTION_WEAVE;
+
 													}
+													else
+														if (i >= 0
+																&& (a[i] == '*')) {
+															matchlen = 1;
+															mask |= ACTION_ALL;
+
+														}
+														else {
+															// parse error
+															throw new IllegalArgumentException(
+																	"invalid permission: "
+																			+ actions);
+														}
 	
 			// make sure we didn't just match the tail of a word
 			// like "ackbarfstartlevel". Also, skip to the comma.
@@ -559,7 +574,7 @@ public final class AdminPermission extends BasicPermission {
 	 * 
 	 * @param filterString The filter string to parse.
 	 * @return a Filter for this bundle. If the specified filterString is
-	 *         <code>null</code> or equals "*", then <code>null</code> is
+	 *         {@code null} or equals "*", then {@code null} is
 	 *         returned to indicate a wildcard.
 	 * @throws IllegalArgumentException If the filter syntax is invalid.
 	 */
@@ -589,7 +604,7 @@ public final class AdminPermission extends BasicPermission {
 	 * constructed with a bundle.
 	 * 
 	 * <p>
-	 * This method returns <code>true</code> if the specified permission is an
+	 * This method returns {@code true} if the specified permission is an
 	 * AdminPermission AND
 	 * <ul>
 	 * <li>this object's filter matches the specified permission's bundle ID,
@@ -601,13 +616,13 @@ public final class AdminPermission extends BasicPermission {
 	 * actions.
 	 * <p>
 	 * Special case: if the specified permission was constructed with "*"
-	 * filter, then this method returns <code>true</code> if this object's
+	 * filter, then this method returns {@code true} if this object's
 	 * filter is "*" and this object's actions include all of the specified
 	 * permission's actions
 	 * 
 	 * @param p The requested permission.
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean implies(Permission p) {
 		if (!(p instanceof AdminPermission)) {
@@ -632,8 +647,8 @@ public final class AdminPermission extends BasicPermission {
 	 *        validated as a proper argument. The requested AdminPermission must
 	 *        not have a filter expression.
 	 * @param effective The effective actions with which to start.
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	boolean implies0(AdminPermission requested, int effective) {
 		/* check actions first - much faster */
@@ -653,7 +668,8 @@ public final class AdminPermission extends BasicPermission {
 		if (requested.bundle == null) {
 			return false;
 		}
-		Dictionary requestedProperties = requested.getProperties();
+		Map<String, Object> requestedProperties = requested
+				.getProperties();
 		if (requestedProperties == null) {
 			/*
 			 * If the requested properties are null, then we have detected a
@@ -663,22 +679,21 @@ public final class AdminPermission extends BasicPermission {
 			 */
 			return true;
 		}
-		return f.matchCase(requestedProperties);
+		return f.matches(requestedProperties);
 	}
 
 	/**
 	 * Returns the canonical string representation of the
-	 * <code>AdminPermission</code> actions.
+	 * {@code AdminPermission} actions.
 	 * 
 	 * <p>
-	 * Always returns present <code>AdminPermission</code> actions in the
-	 * following order: <code>class</code>, <code>execute</code>,
-	 * <code>extensionLifecycle</code>, <code>lifecycle</code>,
-	 * <code>listener</code>, <code>metadata</code>, <code>resolve</code>,
-	 * <code>resource</code>, <code>startlevel</code>, <code>context</code>.
+	 * Always returns present {@code AdminPermission} actions in the following
+	 * order: {@code class}, {@code execute}, {@code extensionLifecycle},
+	 * {@code lifecycle}, {@code listener}, {@code metadata}, {@code resolve},
+	 * {@code resource}, {@code startlevel}, {@code context}, {@code weave}.
 	 * 
-	 * @return Canonical string representation of the
-	 *         <code>AdminPermission</code> actions.
+	 * @return Canonical string representation of the {@code AdminPermission}
+	 *         actions.
 	 */
 	public String getActions() {
 		String result = actions;
@@ -735,6 +750,11 @@ public final class AdminPermission extends BasicPermission {
 				sb.append(CONTEXT);
 				sb.append(',');
 			}
+
+			if ((mask & ACTION_WEAVE) == ACTION_WEAVE) {
+				sb.append(WEAVE);
+				sb.append(',');
+			}
 	
 			// remove trailing comma
 			if (sb.length() > 0) {
@@ -747,21 +767,21 @@ public final class AdminPermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object suitable for
-	 * storing <code>AdminPermission</code>s.
+	 * Returns a new {@code PermissionCollection} object suitable for
+	 * storing {@code AdminPermission}s.
 	 * 
-	 * @return A new <code>PermissionCollection</code> object.
+	 * @return A new {@code PermissionCollection} object.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new AdminPermissionCollection();
 	}
 
 	/**
-	 * Determines the equality of two <code>AdminPermission</code> objects.
+	 * Determines the equality of two {@code AdminPermission} objects.
 	 * 
 	 * @param obj The object being compared for equality with this object.
-	 * @return <code>true</code> if <code>obj</code> is equivalent to this
-	 *         <code>AdminPermission</code>; <code>false</code> otherwise.
+	 * @return {@code true} if {@code obj} is equivalent to this
+	 *         {@code AdminPermission}; {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
@@ -824,18 +844,18 @@ public final class AdminPermission extends BasicPermission {
 	}
 
 	/**
-	 * Called by <code>implies0</code> on an AdminPermission which was
-	 * constructed with a Bundle. This method loads a dictionary with the
-	 * filter-matchable properties of this bundle. The dictionary is cached so
-	 * this lookup only happens once.
+	 * Called by {@code implies0} on an AdminPermission which was constructed
+	 * with a Bundle. This method loads a map with the filter-matchable
+	 * properties of this bundle. The map is cached so this lookup only happens
+	 * once.
 	 * 
 	 * This method should only be called on an AdminPermission which was
 	 * constructed with a bundle
 	 * 
-	 * @return a dictionary of properties for this bundle
+	 * @return a map of properties for this bundle
 	 */
-	private Dictionary getProperties() {
-		Dictionary result = properties;
+	private Map<String, Object> getProperties() {
+		Map<String, Object> result = properties;
 		if (result != null) {
 			return result;
 		}
@@ -850,23 +870,24 @@ public final class AdminPermission extends BasicPermission {
 		}
 		recurse.set(bundle);
 		try {
-			final Dictionary dict = new Hashtable(4);
-			AccessController.doPrivileged(new PrivilegedAction() {
+			final Map<String, Object> map = new HashMap<String, Object>(
+					4);
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
-					dict.put("id", new Long(bundle.getBundleId()));
-					dict.put("location", bundle.getLocation());
+					map.put("id", new Long(bundle.getBundleId()));
+					map.put("location", bundle.getLocation());
 					String name = bundle.getSymbolicName();
 					if (name != null) {
-						dict.put("name", name);
+						map.put("name", name);
 					}
 					SignerProperty signer = new SignerProperty(bundle);
 					if (signer.isBundleSigned()) {
-						dict.put("signer", signer);
+						map.put("signer", signer);
 					}
 					return null;
 				}
 			});
-			return properties = dict;
+			return properties = map;
 		}
 		finally {
 			recurse.set(null);
@@ -875,7 +896,7 @@ public final class AdminPermission extends BasicPermission {
 }
 
 /**
- * Stores a collection of <code>AdminPermission</code>s.
+ * Stores a collection of {@code AdminPermission}s.
  */
 final class AdminPermissionCollection extends PermissionCollection {
 	private static final long	serialVersionUID	= 3906372644575328048L;
@@ -884,7 +905,7 @@ final class AdminPermissionCollection extends PermissionCollection {
 	 * 
 	 * @GuardedBy this
 	 */
-	private transient Map		permissions;
+	private transient Map<String, AdminPermission>	permissions;
 
 	/**
 	 * Boolean saying if "*" is in the collection.
@@ -899,17 +920,17 @@ final class AdminPermissionCollection extends PermissionCollection {
 	 * 
 	 */
 	public AdminPermissionCollection() {
-		permissions = new HashMap();
+		permissions = new HashMap<String, AdminPermission>();
 	}
 
 	/**
 	 * Adds a permission to this permission collection.
 	 * 
-	 * @param permission The <code>AdminPermission</code> object to add.
+	 * @param permission The {@code AdminPermission} object to add.
 	 * @throws IllegalArgumentException If the specified permission is not an
-	 *         <code>AdminPermission</code> instance or was constructed with a
+	 *         {@code AdminPermission} instance or was constructed with a
 	 *         Bundle object.
-	 * @throws SecurityException If this <code>AdminPermissionCollection</code>
+	 * @throws SecurityException If this {@code AdminPermissionCollection}
 	 *         object has been marked read-only.
 	 */
 	public void add(Permission permission) {
@@ -928,8 +949,8 @@ final class AdminPermissionCollection extends PermissionCollection {
 		}
 		final String name = ap.getName();
 		synchronized (this) {
-			Map pc = permissions;
-			AdminPermission existing = (AdminPermission) pc.get(name);
+			Map<String, AdminPermission> pc = permissions;
+			AdminPermission existing = pc.get(name);
 			if (existing != null) {
 				int oldMask = existing.action_mask;
 				int newMask = ap.action_mask;
@@ -952,13 +973,13 @@ final class AdminPermissionCollection extends PermissionCollection {
 
 	/**
 	 * Determines if the specified permissions implies the permissions expressed
-	 * in <code>permission</code>.
+	 * in {@code permission}.
 	 * 
 	 * @param permission The Permission object to compare with the
-	 *        <code>AdminPermission</code> objects in this collection.
-	 * @return <code>true</code> if <code>permission</code> is implied by an
-	 *         <code>AdminPermission</code> in this collection,
-	 *         <code>false</code> otherwise.
+	 *        {@code AdminPermission} objects in this collection.
+	 * @return {@code true} if {@code permission} is implied by an
+	 *         {@code AdminPermission} in this collection,
+	 *         {@code false} otherwise.
 	 */
 	public boolean implies(Permission permission) {
 		if (!(permission instanceof AdminPermission)) {
@@ -971,12 +992,12 @@ final class AdminPermissionCollection extends PermissionCollection {
 			return false;
 		}
 		int effective = AdminPermission.ACTION_NONE;
-		Collection perms;
+		Collection<AdminPermission> perms;
 		synchronized (this) {
-			Map pc = permissions;
+			Map<String, AdminPermission> pc = permissions;
 			// short circuit if the "*" Permission was added
 			if (all_allowed) {
-				AdminPermission ap = (AdminPermission) pc.get("*");
+				AdminPermission ap = pc.get("*");
 				if (ap != null) {
 					effective |= ap.action_mask;
 					final int desired = requested.action_mask;
@@ -989,8 +1010,8 @@ final class AdminPermissionCollection extends PermissionCollection {
 		}
 
 		// just iterate one by one
-		for (Iterator iter = perms.iterator(); iter.hasNext();) {
-			if (((AdminPermission) iter.next()).implies0(requested, effective)) {
+		for (AdminPermission perm : perms) {
+			if (perm.implies0(requested, effective)) {
 				return true;
 			}
 		}
@@ -998,13 +1019,14 @@ final class AdminPermissionCollection extends PermissionCollection {
 	}
 
 	/**
-	 * Returns an enumeration of all <code>AdminPermission</code> objects in the
+	 * Returns an enumeration of all {@code AdminPermission} objects in the
 	 * container.
 	 * 
-	 * @return Enumeration of all <code>AdminPermission</code> objects.
+	 * @return Enumeration of all {@code AdminPermission} objects.
 	 */
-	public synchronized Enumeration elements() {
-		return Collections.enumeration(permissions.values());
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		return Collections.enumeration(all);
 	}
 	
 	/* serialization logic */
@@ -1014,19 +1036,21 @@ final class AdminPermissionCollection extends PermissionCollection {
     
     private synchronized void writeObject(ObjectOutputStream out)
 			throws IOException {
-		Hashtable hashtable = new Hashtable(permissions);
+		Hashtable<String, AdminPermission> hashtable = new Hashtable<String, AdminPermission>(
+				permissions);
 		ObjectOutputStream.PutField pfields = out.putFields();
 		pfields.put("permissions", hashtable);
 		pfields.put("all_allowed", all_allowed);
 		out.writeFields();
 	}
     
-    private synchronized void readObject(java.io.ObjectInputStream in)
+	private synchronized void readObject(java.io.ObjectInputStream in)
 			throws IOException,
 			ClassNotFoundException {
 		ObjectInputStream.GetField gfields = in.readFields();
-		Hashtable hashtable = (Hashtable) gfields.get("permissions", null);
-		permissions = new HashMap(hashtable);
+		Hashtable<String, AdminPermission> hashtable = (Hashtable<String, AdminPermission>) gfields
+				.get("permissions", null);
+		permissions = new HashMap<String, AdminPermission>(hashtable);
 		all_allowed = gfields.get("all_allowed", false);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AllServiceListener.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AllServiceListener.java
index 688f51e..9874a4b 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AllServiceListener.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/AllServiceListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,35 +17,35 @@
 package org.osgi.framework;
 
 /**
- * A <code>ServiceEvent</code> listener that does not filter based upon
- * package wiring. <code>AllServiceListener</code> is a listener interface
+ * A {@code ServiceEvent} listener that does not filter based upon
+ * package wiring. {@code AllServiceListener} is a listener interface
  * that may be implemented by a bundle developer. When a
- * <code>ServiceEvent</code> is fired, it is synchronously delivered to an
- * <code>AllServiceListener</code>. The Framework may deliver
- * <code>ServiceEvent</code> objects to an <code>AllServiceListener</code>
+ * {@code ServiceEvent} is fired, it is synchronously delivered to an
+ * {@code AllServiceListener}. The Framework may deliver
+ * {@code ServiceEvent} objects to an {@code AllServiceListener}
  * out of order and may concurrently call and/or reenter an
- * <code>AllServiceListener</code>.
+ * {@code AllServiceListener}.
  * <p>
- * An <code>AllServiceListener</code> object is registered with the Framework
- * using the <code>BundleContext.addServiceListener</code> method.
- * <code>AllServiceListener</code> objects are called with a
- * <code>ServiceEvent</code> object when a service is registered, modified, or
+ * An {@code AllServiceListener} object is registered with the Framework
+ * using the {@code BundleContext.addServiceListener} method.
+ * {@code AllServiceListener} objects are called with a
+ * {@code ServiceEvent} object when a service is registered, modified, or
  * is in the process of unregistering.
  * 
  * <p>
- * <code>ServiceEvent</code> object delivery to
- * <code>AllServiceListener</code> objects is filtered by the filter specified
+ * {@code ServiceEvent} object delivery to
+ * {@code AllServiceListener} objects is filtered by the filter specified
  * when the listener was registered. If the Java Runtime Environment supports
- * permissions, then additional filtering is done. <code>ServiceEvent</code>
+ * permissions, then additional filtering is done. {@code ServiceEvent}
  * objects are only delivered to the listener if the bundle which defines the
- * listener object's class has the appropriate <code>ServicePermission</code>
+ * listener object's class has the appropriate {@code ServicePermission}
  * to get the service using at least one of the named classes under which the
  * service was registered.
  * 
  * <p>
- * Unlike normal <code>ServiceListener</code> objects,
- * <code>AllServiceListener</code> objects receive all
- * <code>ServiceEvent</code> objects regardless of whether the package source
+ * Unlike normal {@code ServiceListener} objects,
+ * {@code AllServiceListener} objects receive all
+ * {@code ServiceEvent} objects regardless of whether the package source
  * of the listening bundle is equal to the package source of the bundle that
  * registered the service. This means that the listener may not be able to cast
  * the service object to any of its corresponding service interfaces if the
@@ -55,7 +55,7 @@ package org.osgi.framework;
  * @see ServicePermission
  * @ThreadSafe
  * @since 1.3
- * @version $Revision: 5673 $
+ * @version $Id: 35cee8a49e89b7b222aa3f85e1af0b4a4b550ce6 $
  */
 
 public interface AllServiceListener extends ServiceListener {
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Bundle.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Bundle.java
index 692bc5e..8f4002c 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Bundle.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Bundle.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2011). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,23 +16,28 @@
 
 package org.osgi.framework;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.security.cert.X509Certificate;
 import java.util.Dictionary;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.Map;
 
+import org.osgi.framework.wiring.FrameworkWiring;
+
 /**
  * An installed bundle in the Framework.
  * 
  * <p>
- * A <code>Bundle</code> object is the access point to define the lifecycle of
- * an installed bundle. Each bundle installed in the OSGi environment must have
- * an associated <code>Bundle</code> object.
+ * A {@code Bundle} object is the access point to define the lifecycle of an
+ * installed bundle. Each bundle installed in the OSGi environment must have an
+ * associated {@code Bundle} object.
  * 
  * <p>
- * A bundle must have a unique identity, a <code>long</code>, chosen by the
+ * A bundle must have a unique identity, a {@code long}, chosen by the
  * Framework. This identity must not change during the lifecycle of a bundle,
  * even when the bundle is updated. Uninstalling and then reinstalling the
  * bundle must create a new unique identity.
@@ -53,54 +58,59 @@ import java.util.Map;
  * the valid states.
  * 
  * <p>
- * A bundle should only execute code when its state is one of
- * <code>STARTING</code>,<code>ACTIVE</code>, or <code>STOPPING</code>.
- * An <code>UNINSTALLED</code> bundle can not be set to another state; it is a
- * zombie and can only be reached because references are kept somewhere.
+ * A bundle should only have active threads of execution when its state is one
+ * of {@code STARTING},{@code ACTIVE}, or {@code STOPPING}. An {@code
+ * UNINSTALLED} bundle can not be set to another state; it is a zombie and can
+ * only be reached because references are kept somewhere.
+ * 
+ * <p>
+ * The Framework is the only entity that is allowed to create {@code Bundle}
+ * objects, and these objects are only valid within the Framework that created
+ * them.
  * 
  * <p>
- * The Framework is the only entity that is allowed to create
- * <code>Bundle</code> objects, and these objects are only valid within the
- * Framework that created them.
+ * Bundles have a natural ordering such that if two {@code Bundle}s have the
+ * same {@link #getBundleId() bundle id} they are equal. A {@code Bundle} is
+ * less than another {@code Bundle} if it has a lower {@link #getBundleId()
+ * bundle id} and is greater if it has a higher bundle id.
  * 
  * @ThreadSafe
- * @version $Revision: 6906 $
+ * @noimplement
+ * @version $Id: 239108e8d54ff493587b9cdfe1688bdefc5a714c $
  */
-public interface Bundle {
+public interface Bundle extends Comparable<Bundle> {
 	/**
 	 * The bundle is uninstalled and may not be used.
 	 * 
 	 * <p>
-	 * The <code>UNINSTALLED</code> state is only visible after a bundle is
+	 * The {@code UNINSTALLED} state is only visible after a bundle is
 	 * uninstalled; the bundle is in an unusable state but references to the
-	 * <code>Bundle</code> object may still be available and used for
-	 * introspection.
+	 * {@code Bundle} object may still be available and used for introspection.
 	 * <p>
-	 * The value of <code>UNINSTALLED</code> is 0x00000001.
+	 * The value of {@code UNINSTALLED} is 0x00000001.
 	 */
-	public static final int	UNINSTALLED				= 0x00000001;
+	int	UNINSTALLED				= 0x00000001;
 
 	/**
 	 * The bundle is installed but not yet resolved.
 	 * 
 	 * <p>
-	 * A bundle is in the <code>INSTALLED</code> state when it has been
-	 * installed in the Framework but is not or cannot be resolved.
+	 * A bundle is in the {@code INSTALLED} state when it has been installed in
+	 * the Framework but is not or cannot be resolved.
 	 * <p>
 	 * This state is visible if the bundle's code dependencies are not resolved.
-	 * The Framework may attempt to resolve an <code>INSTALLED</code> bundle's
-	 * code dependencies and move the bundle to the <code>RESOLVED</code>
-	 * state.
+	 * The Framework may attempt to resolve an {@code INSTALLED} bundle's code
+	 * dependencies and move the bundle to the {@code RESOLVED} state.
 	 * <p>
-	 * The value of <code>INSTALLED</code> is 0x00000002.
+	 * The value of {@code INSTALLED} is 0x00000002.
 	 */
-	public static final int	INSTALLED				= 0x00000002;
+	int	INSTALLED				= 0x00000002;
 
 	/**
 	 * The bundle is resolved and is able to be started.
 	 * 
 	 * <p>
-	 * A bundle is in the <code>RESOLVED</code> state when the Framework has
+	 * A bundle is in the {@code RESOLVED} state when the Framework has
 	 * successfully resolved the bundle's code dependencies. These dependencies
 	 * include:
 	 * <ul>
@@ -116,57 +126,56 @@ public interface Bundle {
 	 * </ul>
 	 * <p>
 	 * Note that the bundle is not active yet. A bundle must be put in the
-	 * <code>RESOLVED</code> state before it can be started. The Framework may
+	 * {@code RESOLVED} state before it can be started. The Framework may
 	 * attempt to resolve a bundle at any time.
 	 * <p>
-	 * The value of <code>RESOLVED</code> is 0x00000004.
+	 * The value of {@code RESOLVED} is 0x00000004.
 	 */
-	public static final int	RESOLVED				= 0x00000004;
+	int	RESOLVED				= 0x00000004;
 
 	/**
 	 * The bundle is in the process of starting.
 	 * 
 	 * <p>
-	 * A bundle is in the <code>STARTING</code> state when its
-	 * {@link #start(int) start} method is active. A bundle must be in this
-	 * state when the bundle's {@link BundleActivator#start} is called. If the
-	 * <code>BundleActivator.start</code> method completes without exception,
-	 * then the bundle has successfully started and must move to the
-	 * <code>ACTIVE</code> state.
+	 * A bundle is in the {@code STARTING} state when its {@link #start(int)
+	 * start} method is active. A bundle must be in this state when the bundle's
+	 * {@link BundleActivator#start} is called. If the {@code
+	 * BundleActivator.start} method completes without exception, then the
+	 * bundle has successfully started and must move to the {@code ACTIVE}
+	 * state.
 	 * <p>
-	 * If the bundle has a
-	 * {@link Constants#ACTIVATION_LAZY lazy activation policy}, then the
-	 * bundle may remain in this state for some time until the activation is
-	 * triggered.
+	 * If the bundle has a {@link Constants#ACTIVATION_LAZY lazy activation
+	 * policy}, then the bundle may remain in this state for some time until the
+	 * activation is triggered.
 	 * <p>
-	 * The value of <code>STARTING</code> is 0x00000008.
+	 * The value of {@code STARTING} is 0x00000008.
 	 */
-	public static final int	STARTING				= 0x00000008;
+	int	STARTING				= 0x00000008;
 
 	/**
 	 * The bundle is in the process of stopping.
 	 * 
 	 * <p>
-	 * A bundle is in the <code>STOPPING</code> state when its
-	 * {@link #stop(int) stop} method is active. A bundle must be in this state
-	 * when the bundle's {@link BundleActivator#stop} method is called. When the
-	 * <code>BundleActivator.stop</code> method completes the bundle is
-	 * stopped and must move to the <code>RESOLVED</code> state.
+	 * A bundle is in the {@code STOPPING} state when its {@link #stop(int)
+	 * stop} method is active. A bundle must be in this state when the bundle's
+	 * {@link BundleActivator#stop} method is called. When the {@code
+	 * BundleActivator.stop} method completes the bundle is stopped and must
+	 * move to the {@code RESOLVED} state.
 	 * <p>
-	 * The value of <code>STOPPING</code> is 0x00000010.
+	 * The value of {@code STOPPING} is 0x00000010.
 	 */
-	public static final int	STOPPING				= 0x00000010;
+	int	STOPPING				= 0x00000010;
 
 	/**
 	 * The bundle is now running.
 	 * 
 	 * <p>
-	 * A bundle is in the <code>ACTIVE</code> state when it has been
-	 * successfully started and activated.
+	 * A bundle is in the {@code ACTIVE} state when it has been successfully
+	 * started and activated.
 	 * <p>
-	 * The value of <code>ACTIVE</code> is 0x00000020.
+	 * The value of {@code ACTIVE} is 0x00000020.
 	 */
-	public static final int	ACTIVE					= 0x00000020;
+	int	ACTIVE					= 0x00000020;
 
 	/**
 	 * The bundle start operation is transient and the persistent autostart
@@ -181,12 +190,12 @@ public interface Bundle {
 	 * @since 1.4
 	 * @see #start(int)
 	 */
-	public static final int	START_TRANSIENT			= 0x00000001;
+	int	START_TRANSIENT			= 0x00000001;
 
 	/**
 	 * The bundle start operation must activate the bundle according to the
-	 * bundle's declared
-	 * {@link Constants#BUNDLE_ACTIVATIONPOLICY activation policy}.
+	 * bundle's declared {@link Constants#BUNDLE_ACTIVATIONPOLICY activation
+	 * policy}.
 	 * 
 	 * <p>
 	 * This bit may be set when calling {@link #start(int)} to notify the
@@ -197,7 +206,7 @@ public interface Bundle {
 	 * @see Constants#BUNDLE_ACTIVATIONPOLICY
 	 * @see #start(int)
 	 */
-	public static final int	START_ACTIVATION_POLICY	= 0x00000002;
+	int	START_ACTIVATION_POLICY	= 0x00000002;
 
 	/**
 	 * The bundle stop is transient and the persistent autostart setting of the
@@ -212,7 +221,7 @@ public interface Bundle {
 	 * @since 1.4
 	 * @see #stop(int)
 	 */
-	public static final int	STOP_TRANSIENT			= 0x00000001;
+	int	STOP_TRANSIENT			= 0x00000001;
 
 	/**
 	 * Request that all certificates used to sign the bundle be returned.
@@ -220,7 +229,7 @@ public interface Bundle {
 	 * @since 1.5
 	 * @see #getSignerCertificates(int)
 	 */
-	public final static int	SIGNERS_ALL				= 1;
+	int	SIGNERS_ALL				= 1;
 
 	/**
 	 * Request that only certificates used to sign the bundle that are trusted
@@ -229,7 +238,7 @@ public interface Bundle {
 	 * @since 1.5
 	 * @see #getSignerCertificates(int)
 	 */
-	public final static int	SIGNERS_TRUSTED			= 2;
+	int	SIGNERS_TRUSTED			= 2;
 
 	/**
 	 * Returns this bundle's current state.
@@ -237,24 +246,23 @@ public interface Bundle {
 	 * <p>
 	 * A bundle can be in only one state at any time.
 	 * 
-	 * @return An element of <code>UNINSTALLED</code>,<code>INSTALLED</code>,
-	 *         <code>RESOLVED</code>,<code>STARTING</code>,
-	 *         <code>STOPPING</code>,<code>ACTIVE</code>.
+	 * @return An element of {@code UNINSTALLED},{@code INSTALLED},
+	 *         {@code RESOLVED}, {@code STARTING}, {@code STOPPING},
+	 *         {@code ACTIVE}.
 	 */
-	public int getState();
+	int getState();
 
 	/**
 	 * Starts this bundle.
 	 * 
 	 * <p>
-	 * If this bundle's state is <code>UNINSTALLED</code> then an
-	 * <code>IllegalStateException</code> is thrown.
+	 * If this bundle's state is {@code UNINSTALLED} then an
+	 * {@code IllegalStateException} is thrown.
 	 * <p>
-	 * If the Framework implements the optional Start Level service and the
-	 * current start level is less than this bundle's start level:
+	 * If the current start level is less than this bundle's start level:
 	 * <ul>
 	 * <li>If the {@link #START_TRANSIENT} option is set, then a
-	 * <code>BundleException</code> is thrown indicating this bundle cannot be
+	 * {@code BundleException} is thrown indicating this bundle cannot be
 	 * started due to the Framework's current start level.
 	 * 
 	 * <li>Otherwise, the Framework must set this bundle's persistent autostart
@@ -271,11 +279,11 @@ public interface Bundle {
 	 * <li>If this bundle is in the process of being activated or deactivated
 	 * then this method must wait for activation or deactivation to complete
 	 * before continuing. If this does not occur in a reasonable time, a
-	 * <code>BundleException</code> is thrown to indicate this bundle was unable
-	 * to be started.
+	 * {@code BundleException} is thrown to indicate this bundle was unable to
+	 * be started.
 	 * 
-	 * <li>If this bundle's state is <code>ACTIVE</code> then this method
-	 * returns immediately.
+	 * <li>If this bundle's state is {@code ACTIVE} then this method returns
+	 * immediately.
 	 * 
 	 * <li>If the {@link #START_TRANSIENT} option is not set then set this
 	 * bundle's autostart setting to <em>Started with declared activation</em>
@@ -284,107 +292,111 @@ public interface Bundle {
 	 * restarted and this bundle's autostart setting is not <em>Stopped</em>,
 	 * this bundle must be automatically started.
 	 * 
-	 * <li>If this bundle's state is not <code>RESOLVED</code>, an attempt is
-	 * made to resolve this bundle. If the Framework cannot resolve this bundle,
-	 * a <code>BundleException</code> is thrown.
+	 * <li>If this bundle's state is not {@code RESOLVED}, an attempt is made to
+	 * resolve this bundle. If the Framework cannot resolve this bundle, a
+	 * {@code BundleException} is thrown.
 	 * 
 	 * <li>If the {@link #START_ACTIVATION_POLICY} option is set and this
 	 * bundle's declared activation policy is {@link Constants#ACTIVATION_LAZY
 	 * lazy} then:
 	 * <ul>
-	 * <li>If this bundle's state is <code>STARTING</code> then this method
-	 * returns immediately.
-	 * <li>This bundle's state is set to <code>STARTING</code>.
+	 * <li>If this bundle's state is {@code STARTING} then this method returns
+	 * immediately.
+	 * <li>This bundle's state is set to {@code STARTING}.
 	 * <li>A bundle event of type {@link BundleEvent#LAZY_ACTIVATION} is fired.
 	 * <li>This method returns immediately and the remaining steps will be
 	 * followed when this bundle's activation is later triggered.
 	 * </ul>
 	 * <i></i>
-	 * <li>This bundle's state is set to <code>STARTING</code>.
+	 * <li>This bundle's state is set to {@code STARTING}.
 	 * 
 	 * <li>A bundle event of type {@link BundleEvent#STARTING} is fired.
 	 * 
 	 * <li>The {@link BundleActivator#start} method of this bundle's
-	 * <code>BundleActivator</code>, if one is specified, is called. If the
-	 * <code>BundleActivator</code> is invalid or throws an exception then:
+	 * {@code BundleActivator}, if one is specified, is called. If the
+	 * {@code BundleActivator} is invalid or throws an exception then:
 	 * <ul>
-	 * <li>This bundle's state is set to <code>STOPPING</code>.
+	 * <li>This bundle's state is set to {@code STOPPING}.
 	 * <li>A bundle event of type {@link BundleEvent#STOPPING} is fired.
 	 * <li>Any services registered by this bundle must be unregistered.
 	 * <li>Any services used by this bundle must be released.
 	 * <li>Any listeners registered by this bundle must be removed.
-	 * <li>This bundle's state is set to <code>RESOLVED</code>.
+	 * <li>This bundle's state is set to {@code RESOLVED}.
 	 * <li>A bundle event of type {@link BundleEvent#STOPPED} is fired.
-	 * <li>A <code>BundleException</code> is then thrown.
+	 * <li>A {@code BundleException} is then thrown.
 	 * </ul>
 	 * <i></i>
-	 * <li>If this bundle's state is <code>UNINSTALLED</code>, because this
-	 * bundle was uninstalled while the <code>BundleActivator.start</code>
-	 * method was running, a <code>BundleException</code> is thrown.
+	 * <li>If this bundle's state is {@code UNINSTALLED}, because this bundle
+	 * was uninstalled while the {@code BundleActivator.start} method was
+	 * running, a {@code BundleException} is thrown.
 	 * 
-	 * <li>This bundle's state is set to <code>ACTIVE</code>.
+	 * <li>This bundle's state is set to {@code ACTIVE}.
 	 * 
 	 * <li>A bundle event of type {@link BundleEvent#STARTED} is fired.
 	 * </ol>
 	 * 
 	 * <b>Preconditions </b>
 	 * <ul>
-	 * <li><code>getState()</code> in &#x007B; <code>INSTALLED</code>,
-	 * <code>RESOLVED</code> &#x007D; or &#x007B; <code>INSTALLED</code>,
-	 * <code>RESOLVED</code>, <code>STARTING</code> &#x007D; if this bundle has
-	 * a lazy activation policy.
+	 * <li>{@code getState()} in &#x007B; {@code INSTALLED}, {@code RESOLVED}
+	 * &#x007D; or &#x007B; {@code INSTALLED}, {@code RESOLVED},
+	 * {@code STARTING} &#x007D; if this bundle has a lazy activation policy.
 	 * </ul>
 	 * <b>Postconditions, no exceptions thrown </b>
 	 * <ul>
 	 * <li>Bundle autostart setting is modified unless the
 	 * {@link #START_TRANSIENT} option was set.
-	 * <li><code>getState()</code> in &#x007B; <code>ACTIVE</code> &#x007D;
-	 * unless the lazy activation policy was used.
-	 * <li><code>BundleActivator.start()</code> has been called and did not
-	 * throw an exception unless the lazy activation policy was used.
+	 * <li>{@code getState()} in &#x007B; {@code ACTIVE} &#x007D; unless the
+	 * lazy activation policy was used.
+	 * <li>{@code BundleActivator.start()} has been called and did not throw an
+	 * exception unless the lazy activation policy was used.
 	 * </ul>
 	 * <b>Postconditions, when an exception is thrown </b>
 	 * <ul>
 	 * <li>Depending on when the exception occurred, bundle autostart setting is
 	 * modified unless the {@link #START_TRANSIENT} option was set.
-	 * <li><code>getState()</code> not in &#x007B; <code>STARTING</code>,
-	 * <code>ACTIVE</code> &#x007D;.
+	 * <li>{@code getState()} not in &#x007B; {@code STARTING}, {@code ACTIVE}
+	 * &#x007D;.
 	 * </ul>
 	 * 
 	 * @param options The options for starting this bundle. See
 	 *        {@link #START_TRANSIENT} and {@link #START_ACTIVATION_POLICY}. The
 	 *        Framework must ignore unrecognized options.
-	 * @throws BundleException If this bundle could not be started. This could
-	 *         be because a code dependency could not be resolved or the
-	 *         specified <code>BundleActivator</code> could not be loaded or
-	 *         threw an exception or this bundle is a fragment.
+	 * @throws BundleException If this bundle could not be started.
+	 *         BundleException types thrown by this method include:
+	 *         {@link BundleException#START_TRANSIENT_ERROR},
+	 *         {@link BundleException#NATIVECODE_ERROR},
+	 *         {@link BundleException#RESOLVE_ERROR},
+	 *         {@link BundleException#STATECHANGE_ERROR}, and
+	 *         {@link BundleException#ACTIVATOR_ERROR}.
 	 * @throws IllegalStateException If this bundle has been uninstalled or this
 	 *         bundle tries to change its own state.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
 	 * @since 1.4
 	 */
-	public void start(int options) throws BundleException;
+	void start(int options) throws BundleException;
 
 	/**
 	 * Starts this bundle with no options.
 	 * 
 	 * <p>
-	 * This method performs the same function as calling <code>start(0)</code>.
+	 * This method performs the same function as calling {@code start(0)}.
 	 * 
-	 * @throws BundleException If this bundle could not be started. This could
-	 *         be because a code dependency could not be resolved or the
-	 *         specified <code>BundleActivator</code> could not be loaded or
-	 *         threw an exception or this bundle is a fragment.
+	 * @throws BundleException If this bundle could not be started.
+	 *         BundleException types thrown by this method include:
+	 *         {@link BundleException#NATIVECODE_ERROR},
+	 *         {@link BundleException#RESOLVE_ERROR},
+	 *         {@link BundleException#STATECHANGE_ERROR}, and
+	 *         {@link BundleException#ACTIVATOR_ERROR}.
 	 * @throws IllegalStateException If this bundle has been uninstalled or this
 	 *         bundle tries to change its own state.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
 	 * @see #start(int)
 	 */
-	public void start() throws BundleException;
+	void start() throws BundleException;
 
 	/**
 	 * Stops this bundle.
@@ -392,58 +404,58 @@ public interface Bundle {
 	 * <p>
 	 * The following steps are required to stop a bundle:
 	 * <ol>
-	 * <li>If this bundle's state is <code>UNINSTALLED</code> then an
-	 * <code>IllegalStateException</code> is thrown.
+	 * <li>If this bundle's state is {@code UNINSTALLED} then an
+	 * {@code IllegalStateException} is thrown.
 	 * 
 	 * <li>If this bundle is in the process of being activated or deactivated
 	 * then this method must wait for activation or deactivation to complete
 	 * before continuing. If this does not occur in a reasonable time, a
-	 * <code>BundleException</code> is thrown to indicate this bundle was unable
-	 * to be stopped.
+	 * {@code BundleException} is thrown to indicate this bundle was unable to
+	 * be stopped.
 	 * <li>If the {@link #STOP_TRANSIENT} option is not set then then set this
 	 * bundle's persistent autostart setting to to <em>Stopped</em>. When the
 	 * Framework is restarted and this bundle's autostart setting is
 	 * <em>Stopped</em>, this bundle must not be automatically started.
 	 * 
-	 * <li>If this bundle's state is not <code>STARTING</code> or
-	 * <code>ACTIVE</code> then this method returns immediately.
+	 * <li>If this bundle's state is not {@code STARTING} or {@code ACTIVE} then
+	 * this method returns immediately.
 	 * 
-	 * <li>This bundle's state is set to <code>STOPPING</code>.
+	 * <li>This bundle's state is set to {@code STOPPING}.
 	 * 
 	 * <li>A bundle event of type {@link BundleEvent#STOPPING} is fired.
 	 * 
-	 * <li>If this bundle's state was <code>ACTIVE</code> prior to setting the
-	 * state to <code>STOPPING</code>, the {@link BundleActivator#stop} method
-	 * of this bundle's <code>BundleActivator</code>, if one is specified, is
-	 * called. If that method throws an exception, this method must continue to
-	 * stop this bundle and a <code>BundleException</code> must be thrown after
-	 * completion of the remaining steps.
+	 * <li>If this bundle's state was {@code ACTIVE} prior to setting the state
+	 * to {@code STOPPING}, the {@link BundleActivator#stop} method of this
+	 * bundle's {@code BundleActivator}, if one is specified, is called. If that
+	 * method throws an exception, this method must continue to stop this bundle
+	 * and a {@code BundleException} must be thrown after completion of the
+	 * remaining steps.
 	 * 
 	 * <li>Any services registered by this bundle must be unregistered.
 	 * <li>Any services used by this bundle must be released.
 	 * <li>Any listeners registered by this bundle must be removed.
 	 * 
-	 * <li>If this bundle's state is <code>UNINSTALLED</code>, because this
-	 * bundle was uninstalled while the <code>BundleActivator.stop</code> method
-	 * was running, a <code>BundleException</code> must be thrown.
+	 * <li>If this bundle's state is {@code UNINSTALLED}, because this bundle
+	 * was uninstalled while the {@code BundleActivator.stop} method was
+	 * running, a {@code BundleException} must be thrown.
 	 * 
-	 * <li>This bundle's state is set to <code>RESOLVED</code>.
+	 * <li>This bundle's state is set to {@code RESOLVED}.
 	 * 
 	 * <li>A bundle event of type {@link BundleEvent#STOPPED} is fired.
 	 * </ol>
 	 * 
 	 * <b>Preconditions </b>
 	 * <ul>
-	 * <li><code>getState()</code> in &#x007B; <code>ACTIVE</code> &#x007D;.
+	 * <li>{@code getState()} in &#x007B; {@code ACTIVE} &#x007D;.
 	 * </ul>
 	 * <b>Postconditions, no exceptions thrown </b>
 	 * <ul>
 	 * <li>Bundle autostart setting is modified unless the
 	 * {@link #STOP_TRANSIENT} option was set.
-	 * <li><code>getState()</code> not in &#x007B; <code>ACTIVE</code>,
-	 * <code>STOPPING</code> &#x007D;.
-	 * <li><code>BundleActivator.stop</code> has been called and did not throw
-	 * an exception.
+	 * <li>{@code getState()} not in &#x007B; {@code ACTIVE}, {@code STOPPING}
+	 * &#x007D;.
+	 * <li>{@code BundleActivator.stop} has been called and did not throw an
+	 * exception.
 	 * </ul>
 	 * <b>Postconditions, when an exception is thrown </b>
 	 * <ul>
@@ -451,143 +463,156 @@ public interface Bundle {
 	 * {@link #STOP_TRANSIENT} option was set.
 	 * </ul>
 	 * 
-	 * @param options The options for stoping this bundle. See
+	 * @param options The options for stopping this bundle. See
 	 *        {@link #STOP_TRANSIENT}. The Framework must ignore unrecognized
 	 *        options.
-	 * @throws BundleException If this bundle's <code>BundleActivator</code>
-	 *         threw an exception or this bundle is a fragment.
+	 * @throws BundleException BundleException types thrown by this method
+	 *         include: {@link BundleException#STATECHANGE_ERROR} and
+	 *         {@link BundleException#ACTIVATOR_ERROR}.
 	 * @throws IllegalStateException If this bundle has been uninstalled or this
 	 *         bundle tries to change its own state.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
 	 * @since 1.4
 	 */
-	public void stop(int options) throws BundleException;
+	void stop(int options) throws BundleException;
 
 	/**
 	 * Stops this bundle with no options.
 	 * 
 	 * <p>
-	 * This method performs the same function as calling <code>stop(0)</code>.
+	 * This method performs the same function as calling {@code stop(0)}.
 	 * 
-	 * @throws BundleException If this bundle's <code>BundleActivator</code>
-	 *         threw an exception or this bundle is a fragment.
+	 * @throws BundleException BundleException types thrown by this method
+	 *         include: {@link BundleException#STATECHANGE_ERROR} and
+	 *         {@link BundleException#ACTIVATOR_ERROR}.
 	 * @throws IllegalStateException If this bundle has been uninstalled or this
 	 *         bundle tries to change its own state.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
 	 * @see #start(int)
 	 */
-	public void stop() throws BundleException;
+	void stop() throws BundleException;
 
 	/**
-	 * Updates this bundle from an <code>InputStream</code>.
+	 * Updates this bundle from an {@code InputStream}.
 	 * 
 	 * <p>
-	 * If the specified <code>InputStream</code> is <code>null</code>, the
-	 * Framework must create the <code>InputStream</code> from which to read the
-	 * updated bundle by interpreting, in an implementation dependent manner,
-	 * this bundle's {@link Constants#BUNDLE_UPDATELOCATION
-	 * Bundle-UpdateLocation} Manifest header, if present, or this bundle's
-	 * original location.
+	 * If the specified {@code InputStream} is {@code null}, the Framework must
+	 * create the {@code InputStream} from which to read the updated bundle by
+	 * interpreting, in an implementation dependent manner, this bundle's
+	 * {@link Constants#BUNDLE_UPDATELOCATION Bundle-UpdateLocation} Manifest
+	 * header, if present, or this bundle's original location.
 	 * 
 	 * <p>
-	 * If this bundle's state is <code>ACTIVE</code>, it must be stopped before
-	 * the update and started after the update successfully completes.
+	 * If this bundle's state is {@code ACTIVE}, it must be stopped before the
+	 * update and started after the update successfully completes.
 	 * 
 	 * <p>
 	 * If this bundle has exported any packages that are imported by another
-	 * bundle, these packages must not be updated. Instead, the previous package
-	 * version must remain exported until the
-	 * <code>PackageAdmin.refreshPackages</code> method has been has been called
-	 * or the Framework is relaunched.
+	 * bundle, these packages must remain exported until the
+	 * {@link FrameworkWiring#refreshBundles(java.util.Collection, FrameworkListener...)
+	 * FrameworkWiring.refreshBundles} method has been has been called or the
+	 * Framework is relaunched.
 	 * 
 	 * <p>
 	 * The following steps are required to update a bundle:
 	 * <ol>
-	 * <li>If this bundle's state is <code>UNINSTALLED</code> then an
-	 * <code>IllegalStateException</code> is thrown.
+	 * <li>If this bundle's state is {@code UNINSTALLED} then an
+	 * {@code IllegalStateException} is thrown.
 	 * 
-	 * <li>If this bundle's state is <code>ACTIVE</code>, <code>STARTING</code>
-	 * or <code>STOPPING</code>, this bundle is stopped as described in the
-	 * <code>Bundle.stop</code> method. If <code>Bundle.stop</code> throws an
-	 * exception, the exception is rethrown terminating the update.
+	 * <li>If this bundle's state is {@code ACTIVE}, {@code STARTING} or
+	 * {@code STOPPING}, this bundle is stopped as described in the
+	 * {@code Bundle.stop} method. If {@code Bundle.stop} throws an exception,
+	 * the exception is rethrown terminating the update.
 	 * 
 	 * <li>The updated version of this bundle is read from the input stream and
 	 * installed. If the Framework is unable to install the updated version of
 	 * this bundle, the original version of this bundle must be restored and a
-	 * <code>BundleException</code> must be thrown after completion of the
-	 * remaining steps.
+	 * {@code BundleException} must be thrown after completion of the remaining
+	 * steps.
 	 * 
-	 * <li>This bundle's state is set to <code>INSTALLED</code>.
+	 * <li>This bundle's state is set to {@code INSTALLED}.
 	 * 
 	 * <li>If the updated version of this bundle was successfully installed, a
 	 * bundle event of type {@link BundleEvent#UPDATED} is fired.
 	 * 
-	 * <li>If this bundle's state was originally <code>ACTIVE</code>, the
-	 * updated bundle is started as described in the <code>Bundle.start</code>
-	 * method. If <code>Bundle.start</code> throws an exception, a Framework
-	 * event of type {@link FrameworkEvent#ERROR} is fired containing the
-	 * exception.
+	 * <li>If this bundle's state was originally {@code ACTIVE}, the updated
+	 * bundle is started as described in the {@code Bundle.start} method. If
+	 * {@code Bundle.start} throws an exception, a Framework event of type
+	 * {@link FrameworkEvent#ERROR} is fired containing the exception.
 	 * </ol>
 	 * 
 	 * <b>Preconditions </b>
 	 * <ul>
-	 * <li><code>getState()</code> not in &#x007B; <code>UNINSTALLED</code>
-	 * &#x007D;.
+	 * <li>{@code getState()} not in &#x007B; {@code UNINSTALLED} &#x007D;.
 	 * </ul>
 	 * <b>Postconditions, no exceptions thrown </b>
 	 * <ul>
-	 * <li><code>getState()</code> in &#x007B; <code>INSTALLED</code>,
-	 * <code>RESOLVED</code>, <code>ACTIVE</code> &#x007D;.
+	 * <li>{@code getState()} in &#x007B; {@code INSTALLED}, {@code RESOLVED},
+	 * {@code ACTIVE} &#x007D;.
 	 * <li>This bundle has been updated.
 	 * </ul>
 	 * <b>Postconditions, when an exception is thrown </b>
 	 * <ul>
-	 * <li><code>getState()</code> in &#x007B; <code>INSTALLED</code>,
-	 * <code>RESOLVED</code>, <code>ACTIVE</code> &#x007D;.
+	 * <li>{@code getState()} in &#x007B; {@code INSTALLED}, {@code RESOLVED},
+	 * {@code ACTIVE} &#x007D;.
 	 * <li>Original bundle is still used; no update occurred.
 	 * </ul>
 	 * 
-	 * @param input The <code>InputStream</code> from which to read the new
-	 *        bundle or <code>null</code> to indicate the Framework must create
-	 *        the input stream from this bundle's
-	 *        {@link Constants#BUNDLE_UPDATELOCATION Bundle-UpdateLocation}
-	 *        Manifest header, if present, or this bundle's original location.
-	 *        The input stream must always be closed when this method completes,
-	 *        even if an exception is thrown.
-	 * @throws BundleException If the input stream cannot be read or the update
-	 *         fails.
+	 * @param input The {@code InputStream} from which to read the new bundle or
+	 *        {@code null} to indicate the Framework must create the input
+	 *        stream from this bundle's {@link Constants#BUNDLE_UPDATELOCATION
+	 *        Bundle-UpdateLocation} Manifest header, if present, or this
+	 *        bundle's original location. The input stream must always be closed
+	 *        when this method completes, even if an exception is thrown.
+	 * @throws BundleException If this bundle could not be updated.
+	 *         BundleException types thrown by this method include:
+	 *         {@link BundleException#READ_ERROR},
+	 *         {@link BundleException#DUPLICATE_BUNDLE_ERROR},
+	 *         {@link BundleException#MANIFEST_ERROR},
+	 *         {@link BundleException#NATIVECODE_ERROR},
+	 *         {@link BundleException#RESOLVE_ERROR},
+	 *         {@link BundleException#STATECHANGE_ERROR}, and
+	 *         {@link BundleException#ACTIVATOR_ERROR}.
 	 * @throws IllegalStateException If this bundle has been uninstalled or this
 	 *         bundle tries to change its own state.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,LIFECYCLE]</code> for both the current
+	 *         {@code AdminPermission[this,LIFECYCLE]} for both the current
 	 *         bundle and the updated bundle, and the Java Runtime Environment
 	 *         supports permissions.
 	 * @see #stop()
 	 * @see #start()
 	 */
-	public void update(InputStream input) throws BundleException;
+	void update(InputStream input) throws BundleException;
 
 	/**
 	 * Updates this bundle.
 	 * 
 	 * <p>
 	 * This method performs the same function as calling
-	 * {@link #update(InputStream)} with a <code>null</code> InputStream.
-	 * 
-	 * @throws BundleException If the update fails.
+	 * {@link #update(InputStream)} with a {@code null} InputStream.
+	 * 
+	 * @throws BundleException If this bundle could not be updated.
+	 *         BundleException types thrown by this method include:
+	 *         {@link BundleException#READ_ERROR},
+	 *         {@link BundleException#DUPLICATE_BUNDLE_ERROR},
+	 *         {@link BundleException#MANIFEST_ERROR},
+	 *         {@link BundleException#NATIVECODE_ERROR},
+	 *         {@link BundleException#RESOLVE_ERROR},
+	 *         {@link BundleException#STATECHANGE_ERROR}, and
+	 *         {@link BundleException#ACTIVATOR_ERROR}.
 	 * @throws IllegalStateException If this bundle has been uninstalled or this
 	 *         bundle tries to change its own state.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,LIFECYCLE]</code> for both the current
+	 *         {@code AdminPermission[this,LIFECYCLE]} for both the current
 	 *         bundle and the updated bundle, and the Java Runtime Environment
 	 *         supports permissions.
 	 * @see #update(InputStream)
 	 */
-	public void update() throws BundleException;
+	void update() throws BundleException;
 
 	/**
 	 * Uninstalls this bundle.
@@ -595,28 +620,29 @@ public interface Bundle {
 	 * <p>
 	 * This method causes the Framework to notify other bundles that this bundle
 	 * is being uninstalled, and then puts this bundle into the
-	 * <code>UNINSTALLED</code> state. The Framework must remove any resources
+	 * {@code UNINSTALLED} state. The Framework must remove any resources
 	 * related to this bundle that it is able to remove.
 	 * 
 	 * <p>
 	 * If this bundle has exported any packages, the Framework must continue to
 	 * make these packages available to their importing bundles until the
-	 * <code>PackageAdmin.refreshPackages</code> method has been called or the
-	 * Framework is relaunched.
+	 * {@link FrameworkWiring#refreshBundles(java.util.Collection, FrameworkListener...)
+	 * FrameworkWiring.refreshBundles} method has been called or the Framework
+	 * is relaunched.
 	 * 
 	 * <p>
 	 * The following steps are required to uninstall a bundle:
 	 * <ol>
-	 * <li>If this bundle's state is <code>UNINSTALLED</code> then an
-	 * <code>IllegalStateException</code> is thrown.
+	 * <li>If this bundle's state is {@code UNINSTALLED} then an
+	 * {@code IllegalStateException} is thrown.
 	 * 
-	 * <li>If this bundle's state is <code>ACTIVE</code>, <code>STARTING</code>
-	 * or <code>STOPPING</code>, this bundle is stopped as described in the
-	 * <code>Bundle.stop</code> method. If <code>Bundle.stop</code> throws an
-	 * exception, a Framework event of type {@link FrameworkEvent#ERROR} is
-	 * fired containing the exception.
+	 * <li>If this bundle's state is {@code ACTIVE}, {@code STARTING} or
+	 * {@code STOPPING}, this bundle is stopped as described in the
+	 * {@code Bundle.stop} method. If {@code Bundle.stop} throws an exception, a
+	 * Framework event of type {@link FrameworkEvent#ERROR} is fired containing
+	 * the exception.
 	 * 
-	 * <li>This bundle's state is set to <code>UNINSTALLED</code>.
+	 * <li>This bundle's state is set to {@code UNINSTALLED}.
 	 * 
 	 * <li>A bundle event of type {@link BundleEvent#UNINSTALLED} is fired.
 	 * 
@@ -626,33 +652,32 @@ public interface Bundle {
 	 * 
 	 * <b>Preconditions </b>
 	 * <ul>
-	 * <li><code>getState()</code> not in &#x007B; <code>UNINSTALLED</code>
-	 * &#x007D;.
+	 * <li>{@code getState()} not in &#x007B; {@code UNINSTALLED} &#x007D;.
 	 * </ul>
 	 * <b>Postconditions, no exceptions thrown </b>
 	 * <ul>
-	 * <li><code>getState()</code> in &#x007B; <code>UNINSTALLED</code>
-	 * &#x007D;.
+	 * <li>{@code getState()} in &#x007B; {@code UNINSTALLED} &#x007D;.
 	 * <li>This bundle has been uninstalled.
 	 * </ul>
 	 * <b>Postconditions, when an exception is thrown </b>
 	 * <ul>
-	 * <li><code>getState()</code> not in &#x007B; <code>UNINSTALLED</code>
-	 * &#x007D;.
+	 * <li>{@code getState()} not in &#x007B; {@code UNINSTALLED} &#x007D;.
 	 * <li>This Bundle has not been uninstalled.
 	 * </ul>
 	 * 
 	 * @throws BundleException If the uninstall failed. This can occur if
 	 *         another thread is attempting to change this bundle's state and
-	 *         does not complete in a timely manner.
+	 *         does not complete in a timely manner. BundleException types
+	 *         thrown by this method include:
+	 *         {@link BundleException#STATECHANGE_ERROR}
 	 * @throws IllegalStateException If this bundle has been uninstalled or this
 	 *         bundle tries to change its own state.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,LIFECYCLE]</code>, and the Java
-	 *         Runtime Environment supports permissions.
+	 *         {@code AdminPermission[this,LIFECYCLE]}, and the Java Runtime
+	 *         Environment supports permissions.
 	 * @see #stop()
 	 */
-	public void uninstall() throws BundleException;
+	void uninstall() throws BundleException;
 
 	/**
 	 * Returns this bundle's Manifest headers and values. This method returns
@@ -661,7 +686,7 @@ public interface Bundle {
 	 * 
 	 * <p>
 	 * Manifest header names are case-insensitive. The methods of the returned
-	 * <code>Dictionary</code> object must operate on header names in a
+	 * {@code Dictionary} object must operate on header names in a
 	 * case-insensitive manner.
 	 * 
 	 * If a Manifest header value starts with "%", it must be
@@ -684,16 +709,16 @@ public interface Bundle {
 	 * 
 	 * <p>
 	 * This method must continue to return Manifest header information while
-	 * this bundle is in the <code>UNINSTALLED</code> state.
+	 * this bundle is in the {@code UNINSTALLED} state.
 	 * 
-	 * @return A <code>Dictionary</code> object containing this bundle's
-	 *         Manifest headers and values.
-	 * @throws SecurityException If the caller does not have the
-	 *         appropriate <code>AdminPermission[this,METADATA]</code>, and
-	 *         the Java Runtime Environment supports permissions.
+	 * @return An unmodifiable {@code Dictionary} object containing this
+	 *         bundle's Manifest headers and values.
+	 * @throws SecurityException If the caller does not have the appropriate
+	 *         {@code AdminPermission[this,METADATA]}, and the Java Runtime
+	 *         Environment supports permissions.
 	 * @see Constants#BUNDLE_LOCALIZATION
 	 */
-	public Dictionary/* <String,String> */getHeaders();
+	Dictionary<String, String> getHeaders();
 
 	/**
 	 * Returns this bundle's unique identifier. This bundle is assigned a unique
@@ -704,7 +729,7 @@ public interface Bundle {
 	 * A bundle's unique identifier has the following attributes:
 	 * <ul>
 	 * <li>Is unique and persistent.
-	 * <li>Is a <code>long</code>.
+	 * <li>Is a {@code long}.
 	 * <li>Its value is not reused for another bundle, even after a bundle is
 	 * uninstalled.
 	 * <li>Does not change while a bundle remains installed.
@@ -713,151 +738,142 @@ public interface Bundle {
 	 * 
 	 * <p>
 	 * This method must continue to return this bundle's unique identifier while
-	 * this bundle is in the <code>UNINSTALLED</code> state.
+	 * this bundle is in the {@code UNINSTALLED} state.
 	 * 
 	 * @return The unique identifier of this bundle.
 	 */
-	public long getBundleId();
+	long getBundleId();
 
 	/**
 	 * Returns this bundle's location identifier.
 	 * 
 	 * <p>
-	 * The location identifier is the location passed to
-	 * <code>BundleContext.installBundle</code> when a bundle is installed.
-	 * The location identifier does not change while this bundle remains
-	 * installed, even if this bundle is updated.
+	 * The location identifier is the location passed to {@code
+	 * BundleContext.installBundle} when a bundle is installed. The location
+	 * identifier does not change while this bundle remains installed, even if
+	 * this bundle is updated.
 	 * 
 	 * <p>
 	 * This method must continue to return this bundle's location identifier
-	 * while this bundle is in the <code>UNINSTALLED</code> state.
+	 * while this bundle is in the {@code UNINSTALLED} state.
 	 * 
 	 * @return The string representation of this bundle's location identifier.
-	 * @throws SecurityException If the caller does not have the
-	 *         appropriate <code>AdminPermission[this,METADATA]</code>, and
-	 *         the Java Runtime Environment supports permissions.
+	 * @throws SecurityException If the caller does not have the appropriate
+	 *         {@code AdminPermission[this,METADATA]}, and the Java Runtime
+	 *         Environment supports permissions.
 	 */
-	public String getLocation();
+	String getLocation();
 
 	/**
-	 * Returns this bundle's <code>ServiceReference</code> list for all
-	 * services it has registered or <code>null</code> if this bundle has no
-	 * registered services.
+	 * Returns this bundle's {@code ServiceReference} list for all services it
+	 * has registered or {@code null} if this bundle has no registered services.
 	 * 
 	 * <p>
-	 * If the Java runtime supports permissions, a <code>ServiceReference</code>
+	 * If the Java runtime supports permissions, a {@code ServiceReference}
 	 * object to a service is included in the returned list only if the caller
-	 * has the <code>ServicePermission</code> to get the service using at
-	 * least one of the named classes the service was registered under.
+	 * has the {@code ServicePermission} to get the service using at least one
+	 * of the named classes the service was registered under.
 	 * 
 	 * <p>
 	 * The list is valid at the time of the call to this method, however, as the
 	 * Framework is a very dynamic environment, services can be modified or
 	 * unregistered at anytime.
 	 * 
-	 * @return An array of <code>ServiceReference</code> objects or
-	 *         <code>null</code>.
-	 * @throws IllegalStateException If this bundle has been
-	 *         uninstalled.
+	 * @return An array of {@code ServiceReference} objects or {@code null}.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @see ServiceRegistration
 	 * @see ServiceReference
 	 * @see ServicePermission
 	 */
-	public ServiceReference[] getRegisteredServices();
+	ServiceReference< ? >[] getRegisteredServices();
 
 	/**
-	 * Returns this bundle's <code>ServiceReference</code> list for all
-	 * services it is using or returns <code>null</code> if this bundle is not
-	 * using any services. A bundle is considered to be using a service if its
-	 * use count for that service is greater than zero.
+	 * Returns this bundle's {@code ServiceReference} list for all services it
+	 * is using or returns {@code null} if this bundle is not using any
+	 * services. A bundle is considered to be using a service if its use count
+	 * for that service is greater than zero.
 	 * 
 	 * <p>
-	 * If the Java Runtime Environment supports permissions, a
-	 * <code>ServiceReference</code> object to a service is included in the
-	 * returned list only if the caller has the <code>ServicePermission</code>
-	 * to get the service using at least one of the named classes the service
-	 * was registered under.
+	 * If the Java Runtime Environment supports permissions, a {@code
+	 * ServiceReference} object to a service is included in the returned list
+	 * only if the caller has the {@code ServicePermission} to get the service
+	 * using at least one of the named classes the service was registered under.
 	 * <p>
 	 * The list is valid at the time of the call to this method, however, as the
 	 * Framework is a very dynamic environment, services can be modified or
 	 * unregistered at anytime.
 	 * 
-	 * @return An array of <code>ServiceReference</code> objects or
-	 *         <code>null</code>.
-	 * @throws IllegalStateException If this bundle has been
-	 *         uninstalled.
+	 * @return An array of {@code ServiceReference} objects or {@code null}.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @see ServiceReference
 	 * @see ServicePermission
 	 */
-	public ServiceReference[] getServicesInUse();
+	ServiceReference< ? >[] getServicesInUse();
 
 	/**
 	 * Determines if this bundle has the specified permissions.
 	 * 
 	 * <p>
 	 * If the Java Runtime Environment does not support permissions, this method
-	 * always returns <code>true</code>.
+	 * always returns {@code true}.
 	 * <p>
-	 * <code>permission</code> is of type <code>Object</code> to avoid
-	 * referencing the <code>java.security.Permission</code> class directly.
-	 * This is to allow the Framework to be implemented in Java environments
-	 * which do not support permissions.
+	 * {@code permission} is of type {@code Object} to avoid referencing the
+	 * {@code java.security.Permission} class directly. This is to allow the
+	 * Framework to be implemented in Java environments which do not support
+	 * permissions.
 	 * 
 	 * <p>
 	 * If the Java Runtime Environment does support permissions, this bundle and
 	 * all its resources including embedded JAR files, belong to the same
-	 * <code>java.security.ProtectionDomain</code>; that is, they must share
-	 * the same set of permissions.
+	 * {@code java.security.ProtectionDomain}; that is, they must share the same
+	 * set of permissions.
 	 * 
 	 * @param permission The permission to verify.
-	 * @return <code>true</code> if this bundle has the specified permission
-	 *         or the permissions possessed by this bundle imply the specified
-	 *         permission; <code>false</code> if this bundle does not have the
-	 *         specified permission or <code>permission</code> is not an
-	 *         <code>instanceof</code> <code>java.security.Permission</code>.
-	 * @throws IllegalStateException If this bundle has been
-	 *         uninstalled.
+	 * @return {@code true} if this bundle has the specified permission or the
+	 *         permissions possessed by this bundle imply the specified
+	 *         permission; {@code false} if this bundle does not have the
+	 *         specified permission or {@code permission} is not an {@code
+	 *         instanceof} {@code java.security.Permission}.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 */
-	public boolean hasPermission(Object permission);
+	boolean hasPermission(Object permission);
 
 	/**
 	 * Find the specified resource from this bundle's class loader.
 	 * 
 	 * This bundle's class loader is called to search for the specified
-	 * resource. If this bundle's state is <code>INSTALLED</code>, this method
-	 * must attempt to resolve this bundle before attempting to get the
-	 * specified resource. If this bundle cannot be resolved, then only this
-	 * bundle must be searched for the specified resource. Imported packages
-	 * cannot be searched when this bundle has not been resolved. If this bundle
-	 * is a fragment bundle then <code>null</code> is returned.
+	 * resource. If this bundle's state is {@code INSTALLED}, this method must
+	 * attempt to resolve this bundle before attempting to get the specified
+	 * resource. If this bundle cannot be resolved, then only this bundle must
+	 * be searched for the specified resource. Imported packages cannot be
+	 * searched when this bundle has not been resolved. If this bundle is a
+	 * fragment bundle then {@code null} is returned.
 	 * <p>
 	 * Note: Jar and zip files are not required to include directory entries.
 	 * URLs to directory entries will not be returned if the bundle contents do
 	 * not contain directory entries.
 	 * 
-	 * @param name The name of the resource. See
-	 *        <code>ClassLoader.getResource</code> for a description of the
-	 *        format of a resource name.
-	 * @return A URL to the named resource, or <code>null</code> if the resource
+	 * @param name The name of the resource. See {@code ClassLoader.getResource}
+	 *        for a description of the format of a resource name.
+	 * @return A URL to the named resource, or {@code null} if the resource
 	 *         could not be found or if this bundle is a fragment bundle or if
-	 *         the caller does not have the appropriate
-	 *         <code>AdminPermission[this,RESOURCE]</code>, and the Java Runtime
-	 *         Environment supports permissions.
+	 *         the caller does not have the appropriate {@code
+	 *         AdminPermission[this,RESOURCE]}, and the Java Runtime Environment
+	 *         supports permissions.
 	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @see #getEntry
 	 * @see #findEntries
 	 * @since 1.1
 	 */
-	public URL getResource(String name);
+	URL getResource(String name);
 
 	/**
 	 * Returns this bundle's Manifest headers and values localized to the
 	 * specified locale.
 	 * 
 	 * <p>
-	 * This method performs the same function as
-	 * <code>Bundle.getHeaders()</code> except the manifest header values are
-	 * localized to the specified locale.
+	 * This method performs the same function as {@code Bundle.getHeaders()}
+	 * except the manifest header values are localized to the specified locale.
 	 * 
 	 * <p>
 	 * If a Manifest header value starts with "%", it must be
@@ -875,128 +891,122 @@ public interface Bundle {
 	 *   bn
 	 * </pre>
 	 * 
-	 * Where <code>bn</code> is this bundle's localization basename,
-	 * <code>Ls</code>, <code>Cs</code> and <code>Vs</code> are the
-	 * specified locale (language, country, variant) and <code>Ld</code>,
-	 * <code>Cd</code> and <code>Vd</code> are the default locale (language,
-	 * country, variant).
-	 * 
-	 * If <code>null</code> is specified as the locale string, the header
-	 * values must be localized using the default locale. If the empty string
-	 * ("") is specified as the locale string, the header values must
-	 * not be localized and the raw (unlocalized) header values, including any
-	 * leading "%", must be returned. If no localization is found for
-	 * a header value, the header value without the leading "%" is
-	 * returned.
+	 * Where {@code bn} is this bundle's localization basename, {@code Ls},
+	 * {@code Cs} and {@code Vs} are the specified locale (language, country,
+	 * variant) and {@code Ld}, {@code Cd} and {@code Vd} are the default locale
+	 * (language, country, variant).
+	 * 
+	 * If {@code null} is specified as the locale string, the header values must
+	 * be localized using the default locale. If the empty string ("")
+	 * is specified as the locale string, the header values must not be
+	 * localized and the raw (unlocalized) header values, including any leading
+	 * "%", must be returned. If no localization is found for a header
+	 * value, the header value without the leading "%" is returned.
 	 * 
 	 * <p>
 	 * This method must continue to return Manifest header information while
-	 * this bundle is in the <code>UNINSTALLED</code> state, however the
-	 * header values must only be available in the raw and default locale
-	 * values.
+	 * this bundle is in the {@code UNINSTALLED} state, however the header
+	 * values must only be available in the raw and default locale values.
 	 * 
 	 * @param locale The locale name into which the header values are to be
-	 *        localized. If the specified locale is <code>null</code> then the
-	 *        locale returned by <code>java.util.Locale.getDefault</code> is
-	 *        used. If the specified locale is the empty string, this method
-	 *        will return the raw (unlocalized) manifest headers including any
-	 *        leading "%".
-	 * @return A <code>Dictionary</code> object containing this bundle's
-	 *         Manifest headers and values.
-	 * @throws SecurityException If the caller does not have the
-	 *         appropriate <code>AdminPermission[this,METADATA]</code>, and
-	 *         the Java Runtime Environment supports permissions.
+	 *        localized. If the specified locale is {@code null} then the locale
+	 *        returned by {@code java.util.Locale.getDefault} is used. If the
+	 *        specified locale is the empty string, this method will return the
+	 *        raw (unlocalized) manifest headers including any leading
+	 *        "%".
+	 * @return An unmodifiable {@code Dictionary} object containing this
+	 *         bundle's Manifest headers and values.
+	 * @throws SecurityException If the caller does not have the appropriate
+	 *         {@code AdminPermission[this,METADATA]}, and the Java Runtime
+	 *         Environment supports permissions.
 	 * @see #getHeaders()
 	 * @see Constants#BUNDLE_LOCALIZATION
 	 * @since 1.3
 	 */
-	public Dictionary/* <String,String> */getHeaders(String locale);
+	Dictionary<String, String> getHeaders(String locale);
 
 	/**
-	 * Returns the symbolic name of this bundle as specified by its
-	 * <code>Bundle-SymbolicName</code> manifest header. The bundle symbolic
-	 * name together with a version must identify a unique bundle. The bundle
-	 * symbolic name should be based on the reverse domain name naming
-	 * convention like that used for java packages.
+	 * Returns the symbolic name of this bundle as specified by its {@code
+	 * Bundle-SymbolicName} manifest header. The bundle symbolic name should be
+	 * based on the reverse domain name naming convention like that used for
+	 * java packages.
 	 * 
 	 * <p>
 	 * This method must continue to return this bundle's symbolic name while
-	 * this bundle is in the <code>UNINSTALLED</code> state.
+	 * this bundle is in the {@code UNINSTALLED} state.
 	 * 
-	 * @return The symbolic name of this bundle or <code>null</code> if this
-	 *         bundle does not have a symbolic name.
+	 * @return The symbolic name of this bundle or {@code null} if this bundle
+	 *         does not have a symbolic name.
 	 * @since 1.3
 	 */
-	public String getSymbolicName();
+	String getSymbolicName();
 
 	/**
 	 * Loads the specified class using this bundle's class loader.
 	 * 
 	 * <p>
-	 * If this bundle is a fragment bundle then this method must throw a
-	 * <code>ClassNotFoundException</code>.
+	 * If this bundle is a fragment bundle then this method must throw a {@code
+	 * ClassNotFoundException}.
 	 * 
 	 * <p>
-	 * If this bundle's state is <code>INSTALLED</code>, this method must
-	 * attempt to resolve this bundle before attempting to load the class.
+	 * If this bundle's state is {@code INSTALLED}, this method must attempt to
+	 * resolve this bundle before attempting to load the class.
 	 * 
 	 * <p>
 	 * If this bundle cannot be resolved, a Framework event of type
-	 * {@link FrameworkEvent#ERROR} is fired containing a
-	 * <code>BundleException</code> with details of the reason this bundle
-	 * could not be resolved. This method must then throw a
-	 * <code>ClassNotFoundException</code>.
+	 * {@link FrameworkEvent#ERROR} is fired containing a {@code
+	 * BundleException} with details of the reason this bundle could not be
+	 * resolved. This method must then throw a {@code ClassNotFoundException}.
 	 * 
 	 * <p>
-	 * If this bundle's state is <code>UNINSTALLED</code>, then an
-	 * <code>IllegalStateException</code> is thrown.
+	 * If this bundle's state is {@code UNINSTALLED}, then an {@code
+	 * IllegalStateException} is thrown.
 	 * 
 	 * @param name The name of the class to load.
 	 * @return The Class object for the requested class.
-	 * @throws ClassNotFoundException If no such class can be found or
-	 *         if this bundle is a fragment bundle or if the caller does not
-	 *         have the appropriate <code>AdminPermission[this,CLASS]</code>,
-	 *         and the Java Runtime Environment supports permissions.
-	 * @throws IllegalStateException If this bundle has been
-	 *         uninstalled.
+	 * @throws ClassNotFoundException If no such class can be found or if this
+	 *         bundle is a fragment bundle or if the caller does not have the
+	 *         appropriate {@code AdminPermission[this,CLASS]}, and the Java
+	 *         Runtime Environment supports permissions.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @since 1.3
 	 */
-	public Class loadClass(String name) throws ClassNotFoundException;
+	Class< ? > loadClass(String name) throws ClassNotFoundException;
 
 	/**
 	 * Find the specified resources from this bundle's class loader.
 	 * 
 	 * This bundle's class loader is called to search for the specified
-	 * resources. If this bundle's state is <code>INSTALLED</code>, this method
-	 * must attempt to resolve this bundle before attempting to get the
-	 * specified resources. If this bundle cannot be resolved, then only this
-	 * bundle must be searched for the specified resources. Imported packages
-	 * cannot be searched when a bundle has not been resolved. If this bundle is
-	 * a fragment bundle then <code>null</code> is returned.
+	 * resources. If this bundle's state is {@code INSTALLED}, this method must
+	 * attempt to resolve this bundle before attempting to get the specified
+	 * resources. If this bundle cannot be resolved, then only this bundle must
+	 * be searched for the specified resources. Imported packages cannot be
+	 * searched when a bundle has not been resolved. If this bundle is a
+	 * fragment bundle then {@code null} is returned.
 	 * <p>
 	 * Note: Jar and zip files are not required to include directory entries.
 	 * URLs to directory entries will not be returned if the bundle contents do
 	 * not contain directory entries.
 	 * 
-	 * @param name The name of the resource. See
-	 *        <code>ClassLoader.getResources</code> for a description of the
-	 *        format of a resource name.
-	 * @return An enumeration of URLs to the named resources, or
-	 *         <code>null</code> if the resource could not be found or if this
-	 *         bundle is a fragment bundle or if the caller does not have the
-	 *         appropriate <code>AdminPermission[this,RESOURCE]</code>, and the
-	 *         Java Runtime Environment supports permissions.
+	 * @param name The name of the resource. See {@code
+	 *        ClassLoader.getResources} for a description of the format of a
+	 *        resource name.
+	 * @return An enumeration of URLs to the named resources, or {@code null} if
+	 *         the resource could not be found or if this bundle is a fragment
+	 *         bundle or if the caller does not have the appropriate {@code
+	 *         AdminPermission[this,RESOURCE]}, and the Java Runtime Environment
+	 *         supports permissions.
 	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @throws IOException If there is an I/O error.
 	 * @since 1.3
 	 */
-	public Enumeration/* <URL> */getResources(String name) throws IOException;
+	Enumeration<URL> getResources(String name) throws IOException;
 
 	/**
-	 * Returns an Enumeration of all the paths (<code>String</code> objects)
-	 * to entries within this bundle whose longest sub-path matches the
-	 * specified path. This bundle's class loader is not used to search for
-	 * entries. Only the contents of this bundle are searched.
+	 * Returns an Enumeration of all the paths ({@code String} objects) to
+	 * entries within this bundle whose longest sub-path matches the specified
+	 * path. This bundle's class loader is not used to search for entries. Only
+	 * the contents of this bundle are searched.
 	 * <p>
 	 * The specified path is always relative to the root of this bundle and may
 	 * begin with a "/". A path value of "/" indicates the
@@ -1011,16 +1021,14 @@ public interface Bundle {
 	 * not contain directory entries.
 	 * 
 	 * @param path The path name for which to return entry paths.
-	 * @return An Enumeration of the entry paths (<code>String</code>
-	 *         objects) or <code>null</code> if no entry could be found or if
-	 *         the caller does not have the appropriate
-	 *         <code>AdminPermission[this,RESOURCE]</code> and the Java
-	 *         Runtime Environment supports permissions.
-	 * @throws IllegalStateException If this bundle has been
-	 *         uninstalled.
+	 * @return An Enumeration of the entry paths ({@code String} objects) or
+	 *         {@code null} if no entry could be found or if the caller does not
+	 *         have the appropriate {@code AdminPermission[this,RESOURCE]} and
+	 *         the Java Runtime Environment supports permissions.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @since 1.3
 	 */
-	public Enumeration/* <String> */getEntryPaths(String path);
+	Enumeration<String> getEntryPaths(String path);
 
 	/**
 	 * Returns a URL to the entry at the specified path in this bundle. This
@@ -1036,15 +1044,14 @@ public interface Bundle {
 	 * not contain directory entries.
 	 * 
 	 * @param path The path name of the entry.
-	 * @return A URL to the entry, or <code>null</code> if no entry could be
-	 *         found or if the caller does not have the appropriate
-	 *         <code>AdminPermission[this,RESOURCE]</code> and the Java
-	 *         Runtime Environment supports permissions.
-	 * @throws IllegalStateException If this bundle has been
-	 *         uninstalled.
+	 * @return A URL to the entry, or {@code null} if no entry could be found or
+	 *         if the caller does not have the appropriate {@code
+	 *         AdminPermission[this,RESOURCE]} and the Java Runtime Environment
+	 *         supports permissions.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @since 1.3
 	 */
-	public URL getEntry(String path);
+	URL getEntry(String path);
 
 	/**
 	 * Returns the time when this bundle was last modified. A bundle is
@@ -1057,21 +1064,21 @@ public interface Bundle {
 	 * @return The time when this bundle was last modified.
 	 * @since 1.3
 	 */
-	public long getLastModified();
+	long getLastModified();
 
 	/**
 	 * Returns entries in this bundle and its attached fragments. This bundle's
 	 * class loader is not used to search for entries. Only the contents of this
 	 * bundle and its attached fragments are searched for the specified entries.
 	 * 
-	 * If this bundle's state is <code>INSTALLED</code>, this method must
-	 * attempt to resolve this bundle before attempting to find entries.
+	 * If this bundle's state is {@code INSTALLED}, this method must attempt to
+	 * resolve this bundle before attempting to find entries.
 	 * 
 	 * <p>
 	 * This method is intended to be used to obtain configuration, setup,
 	 * localization and other information from this bundle. This method takes
 	 * into account that the "contents" of this bundle can be extended
-	 * with fragments. This "bundle space" is not a namespace with
+	 * with fragments. This "bundle space" is not a name space with
 	 * unique members; the same entry name can be present multiple times. This
 	 * method therefore returns an enumeration of URL objects. These URLs can
 	 * come from different JARs but have the same path name. This method can
@@ -1111,44 +1118,41 @@ public interface Bundle {
 	 *        using the wildcard character ("*"). If null is
 	 *        specified, this is equivalent to "*" and matches all
 	 *        files.
-	 * @param recurse If <code>true</code>, recurse into subdirectories.
-	 *        Otherwise only return entries from the specified path.
+	 * @param recurse If {@code true}, recurse into subdirectories. Otherwise
+	 *        only return entries from the specified path.
 	 * @return An enumeration of URL objects for each matching entry, or
-	 *         <code>null</code> if an entry could not be found or if the caller
-	 *         does not have the appropriate
-	 *         <code>AdminPermission[this,RESOURCE]</code>, and the Java Runtime
+	 *         {@code null} if no matching entry could not be found or if the
+	 *         caller does not have the appropriate
+	 *         {@code AdminPermission[this,RESOURCE]}, and the Java Runtime
 	 *         Environment supports permissions. The URLs are sorted such that
 	 *         entries from this bundle are returned first followed by the
-	 *         entries from attached fragments in ascending bundle id order. If
-	 *         this bundle is a fragment, then only matching entries in this
-	 *         fragment are returned.
+	 *         entries from attached fragments in attachment order. If this
+	 *         bundle is a fragment, then only matching entries in this fragment
+	 *         are returned.
 	 * @throws IllegalStateException If this bundle has been uninstalled.
 	 * @since 1.3
 	 */
-	public Enumeration/* <URL> */findEntries(String path, String filePattern,
+	Enumeration<URL> findEntries(String path, String filePattern,
 			boolean recurse);
 
 	/**
-	 * Returns this bundle's {@link BundleContext}. The returned
-	 * <code>BundleContext</code> can be used by the caller to act on behalf
-	 * of this bundle.
+	 * Returns this bundle's {@link BundleContext}. The returned {@code
+	 * BundleContext} can be used by the caller to act on behalf of this bundle.
 	 * 
 	 * <p>
 	 * If this bundle is not in the {@link #STARTING}, {@link #ACTIVE}, or
 	 * {@link #STOPPING} states or this bundle is a fragment bundle, then this
-	 * bundle has no valid <code>BundleContext</code>. This method will
-	 * return <code>null</code> if this bundle has no valid
-	 * <code>BundleContext</code>.
-	 * 
-	 * @return A <code>BundleContext</code> for this bundle or
-	 *         <code>null</code> if this bundle has no valid
-	 *         <code>BundleContext</code>.
-	 * @throws SecurityException If the caller does not have the
-	 *         appropriate <code>AdminPermission[this,CONTEXT]</code>, and
-	 *         the Java Runtime Environment supports permissions.
+	 * bundle has no valid {@code BundleContext}. This method will return
+	 * {@code null} if this bundle has no valid {@code BundleContext}.
+	 * 
+	 * @return A {@code BundleContext} for this bundle or {@code null} if this
+	 *         bundle has no valid {@code BundleContext}.
+	 * @throws SecurityException If the caller does not have the appropriate
+	 *         {@code AdminPermission[this,CONTEXT]}, and the Java Runtime
+	 *         Environment supports permissions.
 	 * @since 1.4
 	 */
-	public BundleContext getBundleContext();
+	BundleContext getBundleContext();
 
 	/**
 	 * Return the certificates for the signers of this bundle and the
@@ -1158,37 +1162,81 @@ public interface Bundle {
 	 *        on all signers of this bundle is returned. If
 	 *        {@link #SIGNERS_TRUSTED} is specified, then only information on
 	 *        the signers of this bundle trusted by the framework is returned.
-	 * @return The <code>X509Certificate</code>s for the signers of this bundle
-	 *         and the <code>X509Certificate</code> chains for those signers.
-	 *         The keys of the <code>Map</code> are the
-	 *         <code>X509Certificate</code>s of the signers of this bundle. The
-	 *         value for a key is a <code>List</code> containing the
-	 *         <code>X509Certificate</code> chain for the signer. The first item
-	 *         in the <code>List</code> is the signer's
-	 *         <code>X509Certificate</code> which is then followed by the rest
-	 *         of the <code>X509Certificate</code> chain. The returned
-	 *         <code>Map</code> will be empty if there are no signers. The
-	 *         returned <code>Map</code> is the property of the caller who is
-	 *         free to modify it.
-	 * @throws IllegalArgumentException If the specified
-	 *         <code>signersType</code> is not {@link #SIGNERS_ALL} or
-	 *         {@link #SIGNERS_TRUSTED}.
+	 * @return The {@code X509Certificate}s for the signers of this bundle and
+	 *         the {@code X509Certificate} chains for those signers. The keys of
+	 *         the {@code Map} are the {@code X509Certificate}s of the signers
+	 *         of this bundle. The value for a key is a {@code List} containing
+	 *         the {@code X509Certificate} chain for the signer. The first item
+	 *         in the {@code List} is the signer's {@code X509Certificate} which
+	 *         is then followed by the rest of the {@code X509Certificate}
+	 *         chain. The returned {@code Map} will be empty if there are no
+	 *         signers. The returned {@code Map} is the property of the caller
+	 *         who is free to modify it.
+	 * @throws IllegalArgumentException If the specified {@code signersType} is
+	 *         not {@link #SIGNERS_ALL} or {@link #SIGNERS_TRUSTED}.
 	 * @since 1.5
 	 */
-	public Map/* <X509Certificate, List<X509Certificate>> */getSignerCertificates(
+	Map<X509Certificate, List<X509Certificate>> getSignerCertificates(
 			int signersType);
-	
+
 	/**
-	 * Returns the version of this bundle as specified by its
-	 * <code>Bundle-Version</code> manifest header. If this bundle does not have a
-	 * specified version then {@link Version#emptyVersion} is returned.
+	 * Returns the version of this bundle as specified by its {@code
+	 * Bundle-Version} manifest header. If this bundle does not have a specified
+	 * version then {@link Version#emptyVersion} is returned.
 	 * 
 	 * <p>
-	 * This method must continue to return this bundle's version while
-	 * this bundle is in the <code>UNINSTALLED</code> state.
+	 * This method must continue to return this bundle's version while this
+	 * bundle is in the {@code UNINSTALLED} state.
 	 * 
 	 * @return The version of this bundle.
 	 * @since 1.5
 	 */
-	public Version getVersion();
+	Version getVersion();
+
+	/**
+	 * Adapt this bundle to the specified type.
+	 * 
+	 * <p>
+	 * Adapting this bundle to the specified type may require certain checks,
+	 * including security checks, to succeed. If a check does not succeed, then
+	 * this bundle cannot be adapted and {@code null} is returned.
+	 * 
+	 * @param <A> The type to which this bundle is to be adapted.
+	 * @param type Class object for the type to which this bundle is to be
+	 *        adapted.
+	 * @return The object, of the specified type, to which this bundle has been
+	 *         adapted or {@code null} if this bundle cannot be adapted to the
+	 *         specified type.
+	 * @throws SecurityException If the caller does not have the appropriate
+	 *         {@code AdaptPermission[type,this,ADAPT]}, and the Java Runtime
+	 *         Environment supports permissions.
+	 * @since 1.6
+	 */
+	<A> A adapt(Class<A> type);
+
+	/**
+	 * Creates a {@code File} object for a file in the persistent storage area
+	 * provided for this bundle by the Framework. This method will return
+	 * {@code null} if the platform does not have file system support or this
+	 * bundle is a fragment bundle.
+	 * 
+	 * <p>
+	 * A {@code File} object for the base directory of the persistent storage
+	 * area provided for this bundle by the Framework can be obtained by calling
+	 * this method with an empty string as {@code filename}.
+	 * 
+	 * <p>
+	 * If the Java Runtime Environment supports permissions, the Framework will
+	 * ensure that this bundle has the {@code java.io.FilePermission} with
+	 * actions {@code read},{@code write},{@code delete} for all files
+	 * (recursively) in the persistent storage area provided for this bundle.
+	 * 
+	 * @param filename A relative name to the file to be accessed.
+	 * @return A {@code File} object that represents the requested file or
+	 *         {@code null} if the platform does not have file system support or
+	 *         this bundle is a fragment bundle.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
+	 * @since 1.6
+	 */
+	File getDataFile(String filename);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleActivator.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleActivator.java
index 56660b1..aefb036 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleActivator.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleActivator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,33 +19,33 @@ package org.osgi.framework;
 /**
  * Customizes the starting and stopping of a bundle.
  * <p>
- * <code>BundleActivator</code> is an interface that may be implemented when a
+ * {@code BundleActivator} is an interface that may be implemented when a
  * bundle is started or stopped. The Framework can create instances of a
- * bundle's <code>BundleActivator</code> as required. If an instance's
- * <code>BundleActivator.start</code> method executes successfully, it is
- * guaranteed that the same instance's <code>BundleActivator.stop</code>
+ * bundle's {@code BundleActivator} as required. If an instance's
+ * {@code BundleActivator.start} method executes successfully, it is
+ * guaranteed that the same instance's {@code BundleActivator.stop}
  * method will be called when the bundle is to be stopped. The Framework must
- * not concurrently call a <code>BundleActivator</code> object.
+ * not concurrently call a {@code BundleActivator} object.
  * 
  * <p>
- * <code>BundleActivator</code> is specified through the
- * <code>Bundle-Activator</code> Manifest header. A bundle can only specify a
- * single <code>BundleActivator</code> in the Manifest file. Fragment bundles
- * must not have a <code>BundleActivator</code>. The form of the Manifest
+ * {@code BundleActivator} is specified through the
+ * {@code Bundle-Activator} Manifest header. A bundle can only specify a
+ * single {@code BundleActivator} in the Manifest file. Fragment bundles
+ * must not have a {@code BundleActivator}. The form of the Manifest
  * header is:
  * 
  * <p>
- * <code>Bundle-Activator: <i>class-name</i></code>
+ * {@code Bundle-Activator: <i>class-name</i>}
  * 
  * <p>
- * where <code><i>class-name</i></code> is a fully qualified Java classname.
+ * where {@code <i>class-name</i>} is a fully qualified Java classname.
  * <p>
- * The specified <code>BundleActivator</code> class must have a public
- * constructor that takes no parameters so that a <code>BundleActivator</code>
- * object can be created by <code>Class.newInstance()</code>.
+ * The specified {@code BundleActivator} class must have a public
+ * constructor that takes no parameters so that a {@code BundleActivator}
+ * object can be created by {@code Class.newInstance()}.
  * 
  * @NotThreadSafe
- * @version $Revision: 6361 $
+ * @version $Id: 1b73057bd270ab07f0a16430dba16e5132eea24f $
  */
 
 public interface BundleActivator {
@@ -69,7 +69,7 @@ public interface BundleActivator {
 	/**
 	 * Called when this bundle is stopped so the Framework can perform the
 	 * bundle-specific activities necessary to stop the bundle. In general, this
-	 * method should undo the work that the <code>BundleActivator.start</code>
+	 * method should undo the work that the {@code BundleActivator.start}
 	 * method started. There should be no active threads that were started by
 	 * this bundle when this bundle returns. A stopped bundle must not call any
 	 * Framework objects.
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleContext.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleContext.java
index 44b3801..c587d03 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleContext.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleContext.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.osgi.framework;
 
 import java.io.File;
 import java.io.InputStream;
+import java.util.Collection;
 import java.util.Dictionary;
 
 /**
@@ -26,100 +27,107 @@ import java.util.Dictionary;
  * Framework.
  * 
  * <p>
- * <code>BundleContext</code> methods allow a bundle to:
+ * {@code BundleContext} methods allow a bundle to:
  * <ul>
  * <li>Subscribe to events published by the Framework.
  * <li>Register service objects with the Framework service registry.
- * <li>Retrieve <code>ServiceReferences</code> from the Framework service
- * registry.
+ * <li>Retrieve {@code ServiceReferences} from the Framework service registry.
  * <li>Get and release service objects for a referenced service.
  * <li>Install new bundles in the Framework.
  * <li>Get the list of bundles installed in the Framework.
  * <li>Get the {@link Bundle} object for a bundle.
- * <li>Create <code>File</code> objects for files in a persistent storage
- * area provided for the bundle by the Framework.
+ * <li>Create {@code File} objects for files in a persistent storage area
+ * provided for the bundle by the Framework.
  * </ul>
  * 
  * <p>
- * A <code>BundleContext</code> object will be created and provided to the
- * bundle associated with this context when it is started using the
- * {@link BundleActivator#start} method. The same <code>BundleContext</code>
- * object will be passed to the bundle associated with this context when it is
- * stopped using the {@link BundleActivator#stop} method. A
- * <code>BundleContext</code> object is generally for the private use of its
+ * A {@code BundleContext} object will be created for a bundle when the bundle
+ * is started. The {@code Bundle} object associated with a {@code BundleContext}
+ * object is called the <em>context bundle</em>.
+ * 
+ * <p>
+ * The {@code BundleContext} object will be passed to the
+ * {@link BundleActivator#start} method during activation of the context bundle.
+ * The same {@code BundleContext} object will be passed to the
+ * {@link BundleActivator#stop} method when the context bundle is stopped. A
+ * {@code BundleContext} object is generally for the private use of its
  * associated bundle and is not meant to be shared with other bundles in the
  * OSGi environment.
  * 
  * <p>
- * The <code>Bundle</code> object associated with a <code>BundleContext</code>
- * object is called the <em>context bundle</em>.
+ * The {@code BundleContext} object is only valid during the execution of its
+ * context bundle; that is, during the period from when the context bundle is in
+ * the {@code STARTING}, {@code STOPPING}, and {@code ACTIVE} bundle states. If
+ * the {@code BundleContext} object is used subsequently, an
+ * {@code IllegalStateException} must be thrown. The {@code BundleContext}
+ * object must never be reused after its context bundle is stopped.
  * 
  * <p>
- * The <code>BundleContext</code> object is only valid during the execution of
- * its context bundle; that is, during the period from when the context bundle
- * is in the <code>STARTING</code>, <code>STOPPING</code>, and
- * <code>ACTIVE</code> bundle states. If the <code>BundleContext</code>
- * object is used subsequently, an <code>IllegalStateException</code> must be
- * thrown. The <code>BundleContext</code> object must never be reused after
- * its context bundle is stopped.
+ * Two {@code BundleContext} objects are equal if they both refer to the same
+ * execution context of a bundle. The Framework is the only entity that can
+ * create {@code BundleContext} objects and they are only valid within the
+ * Framework that created them.
  * 
  * <p>
- * The Framework is the only entity that can create <code>BundleContext</code>
- * objects and they are only valid within the Framework that created them.
+ * A {@link Bundle} can be {@link Bundle#adapt(Class) adapted} to its
+ * {@code BundleContext}. In order for this to succeed, the caller must have the
+ * appropriate {@code AdminPermission[bundle,CONTEXT]} if the Java Runtime
+ * Environment supports permissions.
  * 
  * @ThreadSafe
- * @version $Revision: 6781 $
+ * @noimplement
+ * @version $Id: 6d4b5967b9fe706b1dfbdd42b3d759028ed9826d $
  */
 
-public interface BundleContext {
+public interface BundleContext extends BundleReference {
+
 	/**
 	 * Returns the value of the specified property. If the key is not found in
 	 * the Framework properties, the system properties are then searched. The
-	 * method returns <code>null</code> if the property is not found.
+	 * method returns {@code null} if the property is not found.
 	 * 
 	 * <p>
 	 * All bundles must have permission to read properties whose names start
 	 * with "org.osgi.".
 	 * 
 	 * @param key The name of the requested property.
-	 * @return The value of the requested property, or <code>null</code> if the
+	 * @return The value of the requested property, or {@code null} if the
 	 *         property is undefined.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>PropertyPermission</code> to read the property, and the
-	 *         Java Runtime Environment supports permissions.
+	 *         {@code PropertyPermission} to read the property, and the Java
+	 *         Runtime Environment supports permissions.
 	 */
-	public String getProperty(String key);
+	String getProperty(String key);
 
 	/**
-	 * Returns the <code>Bundle</code> object associated with this
-	 * <code>BundleContext</code>. This bundle is called the context bundle.
+	 * Returns the {@code Bundle} object associated with this
+	 * {@code BundleContext}. This bundle is called the context bundle.
 	 * 
-	 * @return The <code>Bundle</code> object associated with this
-	 *         <code>BundleContext</code>.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @return The {@code Bundle} object associated with this
+	 *         {@code BundleContext}.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 */
-	public Bundle getBundle();
+	Bundle getBundle();
 
 	/**
-	 * Installs a bundle from the specified <code>InputStream</code> object.
+	 * Installs a bundle from the specified {@code InputStream} object.
 	 * 
 	 * <p>
-	 * If the specified <code>InputStream</code> is <code>null</code>, the
-	 * Framework must create the <code>InputStream</code> from which to read the
-	 * bundle by interpreting, in an implementation dependent manner, the
-	 * specified <code>location</code>.
+	 * If the specified {@code InputStream} is {@code null}, the Framework must
+	 * create the {@code InputStream} from which to read the bundle by
+	 * interpreting, in an implementation dependent manner, the specified
+	 * {@code location}.
 	 * 
 	 * <p>
-	 * The specified <code>location</code> identifier will be used as the
-	 * identity of the bundle. Every installed bundle is uniquely identified by
-	 * its location identifier which is typically in the form of a URL.
+	 * The specified {@code location} identifier will be used as the identity of
+	 * the bundle. Every installed bundle is uniquely identified by its location
+	 * identifier which is typically in the form of a URL.
 	 * 
 	 * <p>
 	 * The following steps are required to install a bundle:
 	 * <ol>
 	 * <li>If a bundle containing the same location identifier is already
-	 * installed, the <code>Bundle</code> object for that bundle is returned.
+	 * installed, the {@code Bundle} object for that bundle is returned.
 	 * 
 	 * <li>The bundle's content is read from the input stream. If this fails, a
 	 * {@link BundleException} is thrown.
@@ -127,71 +135,80 @@ public interface BundleContext {
 	 * <li>The bundle's associated resources are allocated. The associated
 	 * resources minimally consist of a unique identifier and a persistent
 	 * storage area if the platform has file system support. If this step fails,
-	 * a <code>BundleException</code> is thrown.
+	 * a {@code BundleException} is thrown.
 	 * 
-	 * <li>The bundle's state is set to <code>INSTALLED</code>.
+	 * <li>The bundle's state is set to {@code INSTALLED}.
 	 * 
 	 * <li>A bundle event of type {@link BundleEvent#INSTALLED} is fired.
 	 * 
-	 * <li>The <code>Bundle</code> object for the newly or previously installed
+	 * <li>The {@code Bundle} object for the newly or previously installed
 	 * bundle is returned.
 	 * </ol>
 	 * 
 	 * <b>Postconditions, no exceptions thrown </b>
 	 * <ul>
-	 * <li><code>getState()</code> in &#x007B; <code>INSTALLED</code>,
-	 * <code>RESOLVED</code> &#x007D;.
+	 * <li>{@code getState()} in &#x007B; {@code INSTALLED}, {@code RESOLVED}
+	 * &#x007D;.
 	 * <li>Bundle has a unique ID.
 	 * </ul>
 	 * <b>Postconditions, when an exception is thrown </b>
 	 * <ul>
-	 * <li>Bundle is not installed and no trace of the bundle exists.
+	 * <li>Bundle is not installed. If there was an existing bundle for the
+	 * specified location, then that bundle must still be in the state it was
+	 * prior to calling this method.</li>
 	 * </ul>
 	 * 
 	 * @param location The location identifier of the bundle to install.
-	 * @param input The <code>InputStream</code> object from which this bundle
-	 *        will be read or <code>null</code> to indicate the Framework must
-	 *        create the input stream from the specified location identifier.
-	 *        The input stream must always be closed when this method completes,
-	 *        even if an exception is thrown.
-	 * @return The <code>Bundle</code> object of the installed bundle.
-	 * @throws BundleException If the input stream cannot be read or the
-	 *         installation failed.
+	 * @param input The {@code InputStream} object from which this bundle will
+	 *        be read or {@code null} to indicate the Framework must create the
+	 *        input stream from the specified location identifier. The input
+	 *        stream must always be closed when this method completes, even if
+	 *        an exception is thrown.
+	 * @return The {@code Bundle} object of the installed bundle.
+	 * @throws BundleException If the installation failed. BundleException types
+	 *         thrown by this method include: {@link BundleException#READ_ERROR}
+	 *         , {@link BundleException#DUPLICATE_BUNDLE_ERROR},
+	 *         {@link BundleException#MANIFEST_ERROR}, and
+	 *         {@link BundleException#REJECTED_BY_HOOK}.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[installed bundle,LIFECYCLE]</code>, and the
-	 *         Java Runtime Environment supports permissions.
+	 *         {@code AdminPermission[installed bundle,LIFECYCLE]}, and the Java
+	 *         Runtime Environment supports permissions.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 */
-	public Bundle installBundle(String location, InputStream input)
+	Bundle installBundle(String location, InputStream input)
 			throws BundleException;
 
 	/**
-	 * Installs a bundle from the specified <code>location</code> identifier.
+	 * Installs a bundle from the specified {@code location} identifier.
 	 * 
 	 * <p>
 	 * This method performs the same function as calling
 	 * {@link #installBundle(String,InputStream)} with the specified
-	 * <code>location</code> identifier and a <code>null</code> InputStream.
+	 * {@code location} identifier and a {@code null} InputStream.
 	 * 
 	 * @param location The location identifier of the bundle to install.
-	 * @return The <code>Bundle</code> object of the installed bundle.
-	 * @throws BundleException If the installation failed.
+	 * @return The {@code Bundle} object of the installed bundle.
+	 * @throws BundleException If the installation failed. BundleException types
+	 *         thrown by this method include: {@link BundleException#READ_ERROR}
+	 *         , {@link BundleException#DUPLICATE_BUNDLE_ERROR},
+	 *         {@link BundleException#MANIFEST_ERROR}, and
+	 *         {@link BundleException#REJECTED_BY_HOOK}.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[installed bundle,LIFECYCLE]</code>, and the
-	 *         Java Runtime Environment supports permissions.
+	 *         {@code AdminPermission[installed bundle,LIFECYCLE]}, and the Java
+	 *         Runtime Environment supports permissions.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @see #installBundle(String, InputStream)
 	 */
-	public Bundle installBundle(String location) throws BundleException;
+	Bundle installBundle(String location) throws BundleException;
 
 	/**
 	 * Returns the bundle with the specified identifier.
 	 * 
 	 * @param id The identifier of the bundle to retrieve.
-	 * @return A <code>Bundle</code> object or <code>null</code> if the
-	 *         identifier does not match any installed bundle.
+	 * @return A {@code Bundle} object or {@code null} if the identifier does
+	 *         not match any installed bundle.
 	 */
-	public Bundle getBundle(long id);
+	Bundle getBundle(long id);
 
 	/**
 	 * Returns a list of all installed bundles.
@@ -201,179 +218,164 @@ public interface BundleContext {
 	 * Framework is a very dynamic environment, bundles can be installed or
 	 * uninstalled at anytime.
 	 * 
-	 * @return An array of <code>Bundle</code> objects, one object per
-	 *         installed bundle.
+	 * @return An array of {@code Bundle} objects, one object per installed
+	 *         bundle.
 	 */
-	public Bundle[] getBundles();
+	Bundle[] getBundles();
 
 	/**
-	 * Adds the specified <code>ServiceListener</code> object with the
-	 * specified <code>filter</code> to the context bundle's list of
-	 * listeners. See {@link Filter} for a description of the filter syntax.
-	 * <code>ServiceListener</code> objects are notified when a service has a
+	 * Adds the specified {@code ServiceListener} object with the specified
+	 * {@code filter} to the context bundle's list of listeners. See
+	 * {@link Filter} for a description of the filter syntax.
+	 * {@code ServiceListener} objects are notified when a service has a
 	 * lifecycle state change.
 	 * 
 	 * <p>
 	 * If the context bundle's list of listeners already contains a listener
-	 * <code>l</code> such that <code>(l==listener)</code>, then this
-	 * method replaces that listener's filter (which may be <code>null</code>)
-	 * with the specified one (which may be <code>null</code>).
+	 * {@code l} such that {@code (l==listener)}, then this method replaces that
+	 * listener's filter (which may be {@code null}) with the specified one
+	 * (which may be {@code null}).
 	 * 
 	 * <p>
 	 * The listener is called if the filter criteria is met. To filter based
 	 * upon the class of the service, the filter should reference the
-	 * {@link Constants#OBJECTCLASS} property. If <code>filter</code> is
-	 * <code>null</code>, all services are considered to match the filter.
+	 * {@link Constants#OBJECTCLASS} property. If {@code filter} is {@code null}
+	 * , all services are considered to match the filter.
 	 * 
 	 * <p>
-	 * When using a <code>filter</code>, it is possible that the
-	 * <code>ServiceEvent</code>s for the complete lifecycle of a service
-	 * will not be delivered to the listener. For example, if the
-	 * <code>filter</code> only matches when the property <code>x</code> has
-	 * the value <code>1</code>, the listener will not be called if the
-	 * service is registered with the property <code>x</code> not set to the
-	 * value <code>1</code>. Subsequently, when the service is modified
-	 * setting property <code>x</code> to the value <code>1</code>, the
-	 * filter will match and the listener will be called with a
-	 * <code>ServiceEvent</code> of type <code>MODIFIED</code>. Thus, the
-	 * listener will not be called with a <code>ServiceEvent</code> of type
-	 * <code>REGISTERED</code>.
+	 * When using a {@code filter}, it is possible that the {@code ServiceEvent}
+	 * s for the complete lifecycle of a service will not be delivered to the
+	 * listener. For example, if the {@code filter} only matches when the
+	 * property {@code x} has the value {@code 1}, the listener will not be
+	 * called if the service is registered with the property {@code x} not set
+	 * to the value {@code 1}. Subsequently, when the service is modified
+	 * setting property {@code x} to the value {@code 1}, the filter will match
+	 * and the listener will be called with a {@code ServiceEvent} of type
+	 * {@code MODIFIED}. Thus, the listener will not be called with a
+	 * {@code ServiceEvent} of type {@code REGISTERED}.
 	 * 
 	 * <p>
 	 * If the Java Runtime Environment supports permissions, the
-	 * <code>ServiceListener</code> object will be notified of a service event
-	 * only if the bundle that is registering it has the
-	 * <code>ServicePermission</code> to get the service using at least one of
-	 * the named classes the service was registered under.
+	 * {@code ServiceListener} object will be notified of a service event only
+	 * if the bundle that is registering it has the {@code ServicePermission} to
+	 * get the service using at least one of the named classes the service was
+	 * registered under.
 	 * 
-	 * @param listener The <code>ServiceListener</code> object to be added.
+	 * @param listener The {@code ServiceListener} object to be added.
 	 * @param filter The filter criteria.
-	 * @throws InvalidSyntaxException If <code>filter</code> contains an
-	 *         invalid filter string that cannot be parsed.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @throws InvalidSyntaxException If {@code filter} contains an invalid
+	 *         filter string that cannot be parsed.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @see ServiceEvent
 	 * @see ServiceListener
 	 * @see ServicePermission
 	 */
-	public void addServiceListener(ServiceListener listener, String filter)
+	void addServiceListener(ServiceListener listener, String filter)
 			throws InvalidSyntaxException;
 
 	/**
-	 * Adds the specified <code>ServiceListener</code> object to the context
-	 * bundle's list of listeners.
+	 * Adds the specified {@code ServiceListener} object to the context bundle's
+	 * list of listeners.
 	 * 
 	 * <p>
 	 * This method is the same as calling
-	 * <code>BundleContext.addServiceListener(ServiceListener listener,
-	 * String filter)</code>
-	 * with <code>filter</code> set to <code>null</code>.
+	 * {@code BundleContext.addServiceListener(ServiceListener listener,
+	 * String filter)} with {@code filter} set to {@code null}.
 	 * 
-	 * @param listener The <code>ServiceListener</code> object to be added.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @param listener The {@code ServiceListener} object to be added.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @see #addServiceListener(ServiceListener, String)
 	 */
-	public void addServiceListener(ServiceListener listener);
+	void addServiceListener(ServiceListener listener);
 
 	/**
-	 * Removes the specified <code>ServiceListener</code> object from the
-	 * context bundle's list of listeners.
+	 * Removes the specified {@code ServiceListener} object from the context
+	 * bundle's list of listeners.
 	 * 
 	 * <p>
-	 * If <code>listener</code> is not contained in this context bundle's list
-	 * of listeners, this method does nothing.
+	 * If {@code listener} is not contained in this context bundle's list of
+	 * listeners, this method does nothing.
 	 * 
-	 * @param listener The <code>ServiceListener</code> to be removed.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @param listener The {@code ServiceListener} to be removed.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 */
-	public void removeServiceListener(ServiceListener listener);
+	void removeServiceListener(ServiceListener listener);
 
 	/**
-	 * Adds the specified <code>BundleListener</code> object to the context
-	 * bundle's list of listeners if not already present. BundleListener objects
-	 * are notified when a bundle has a lifecycle state change.
+	 * Adds the specified {@code BundleListener} object to the context bundle's
+	 * list of listeners if not already present. BundleListener objects are
+	 * notified when a bundle has a lifecycle state change.
 	 * 
 	 * <p>
 	 * If the context bundle's list of listeners already contains a listener
-	 * <code>l</code> such that <code>(l==listener)</code>, this method
-	 * does nothing.
+	 * {@code l} such that {@code (l==listener)}, this method does nothing.
 	 * 
-	 * @param listener The <code>BundleListener</code> to be added.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @param listener The {@code BundleListener} to be added.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @throws SecurityException If listener is a
-	 *         <code>SynchronousBundleListener</code> and the caller does not
-	 *         have the appropriate
-	 *         <code>AdminPermission[context bundle,LISTENER]</code>, and the
-	 *         Java Runtime Environment supports permissions.
+	 *         {@code SynchronousBundleListener} and the caller does not have
+	 *         the appropriate {@code AdminPermission[context bundle,LISTENER]},
+	 *         and the Java Runtime Environment supports permissions.
 	 * @see BundleEvent
 	 * @see BundleListener
 	 */
-	public void addBundleListener(BundleListener listener);
+	void addBundleListener(BundleListener listener);
 
 	/**
-	 * Removes the specified <code>BundleListener</code> object from the
-	 * context bundle's list of listeners.
+	 * Removes the specified {@code BundleListener} object from the context
+	 * bundle's list of listeners.
 	 * 
 	 * <p>
-	 * If <code>listener</code> is not contained in the context bundle's list
-	 * of listeners, this method does nothing.
+	 * If {@code listener} is not contained in the context bundle's list of
+	 * listeners, this method does nothing.
 	 * 
-	 * @param listener The <code>BundleListener</code> object to be removed.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @param listener The {@code BundleListener} object to be removed.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @throws SecurityException If listener is a
-	 *         <code>SynchronousBundleListener</code> and the caller does not
-	 *         have the appropriate
-	 *         <code>AdminPermission[context bundle,LISTENER]</code>, and the
-	 *         Java Runtime Environment supports permissions.
+	 *         {@code SynchronousBundleListener} and the caller does not have
+	 *         the appropriate {@code AdminPermission[context bundle,LISTENER]},
+	 *         and the Java Runtime Environment supports permissions.
 	 */
-	public void removeBundleListener(BundleListener listener);
+	void removeBundleListener(BundleListener listener);
 
 	/**
-	 * Adds the specified <code>FrameworkListener</code> object to the context
+	 * Adds the specified {@code FrameworkListener} object to the context
 	 * bundle's list of listeners if not already present. FrameworkListeners are
 	 * notified of general Framework events.
 	 * 
 	 * <p>
 	 * If the context bundle's list of listeners already contains a listener
-	 * <code>l</code> such that <code>(l==listener)</code>, this method
-	 * does nothing.
+	 * {@code l} such that {@code (l==listener)}, this method does nothing.
 	 * 
-	 * @param listener The <code>FrameworkListener</code> object to be added.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @param listener The {@code FrameworkListener} object to be added.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @see FrameworkEvent
 	 * @see FrameworkListener
 	 */
-	public void addFrameworkListener(FrameworkListener listener);
+	void addFrameworkListener(FrameworkListener listener);
 
 	/**
-	 * Removes the specified <code>FrameworkListener</code> object from the
-	 * context bundle's list of listeners.
+	 * Removes the specified {@code FrameworkListener} object from the context
+	 * bundle's list of listeners.
 	 * 
 	 * <p>
-	 * If <code>listener</code> is not contained in the context bundle's list
-	 * of listeners, this method does nothing.
+	 * If {@code listener} is not contained in the context bundle's list of
+	 * listeners, this method does nothing.
 	 * 
-	 * @param listener The <code>FrameworkListener</code> object to be
-	 *        removed.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @param listener The {@code FrameworkListener} object to be removed.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 */
-	public void removeFrameworkListener(FrameworkListener listener);
+	void removeFrameworkListener(FrameworkListener listener);
 
 	/**
 	 * Registers the specified service object with the specified properties
 	 * under the specified class names into the Framework. A
-	 * <code>ServiceRegistration</code> object is returned. The
-	 * <code>ServiceRegistration</code> object is for the private use of the
-	 * bundle registering the service and should not be shared with other
-	 * bundles. The registering bundle is defined to be the context bundle.
-	 * Other bundles can locate the service by using either the
-	 * {@link #getServiceReferences} or {@link #getServiceReference} method.
+	 * {@code ServiceRegistration} object is returned. The
+	 * {@code ServiceRegistration} object is for the private use of the bundle
+	 * registering the service and should not be shared with other bundles. The
+	 * registering bundle is defined to be the context bundle. Other bundles can
+	 * locate the service by using either the {@link #getServiceReferences} or
+	 * {@link #getServiceReference} method.
 	 * 
 	 * <p>
 	 * A bundle can register a service object that implements the
@@ -383,59 +385,57 @@ public interface BundleContext {
 	 * <p>
 	 * The following steps are required to register a service:
 	 * <ol>
-	 * <li>If <code>service</code> is not a <code>ServiceFactory</code>, an
-	 * <code>IllegalArgumentException</code> is thrown if <code>service</code>
-	 * is not an <code>instanceof</code> all the specified class names.
+	 * <li>If {@code service} is not a {@code ServiceFactory}, an
+	 * {@code IllegalArgumentException} is thrown if {@code service} is not an
+	 * {@code instanceof} all the specified class names.
 	 * <li>The Framework adds the following service properties to the service
-	 * properties from the specified <code>Dictionary</code> (which may be
-	 * <code>null</code>): <br/>
+	 * properties from the specified {@code Dictionary} (which may be
+	 * {@code null}): <br/>
 	 * A property named {@link Constants#SERVICE_ID} identifying the
 	 * registration number of the service <br/>
 	 * A property named {@link Constants#OBJECTCLASS} containing all the
 	 * specified classes. <br/>
-	 * Properties with these names in the specified <code>Dictionary</code> will
-	 * be ignored.
+	 * Properties with these names in the specified {@code Dictionary} will be
+	 * ignored.
 	 * <li>The service is added to the Framework service registry and may now be
 	 * used by other bundles.
 	 * <li>A service event of type {@link ServiceEvent#REGISTERED} is fired.
-	 * <li>A <code>ServiceRegistration</code> object for this registration is
+	 * <li>A {@code ServiceRegistration} object for this registration is
 	 * returned.
 	 * </ol>
 	 * 
 	 * @param clazzes The class names under which the service can be located.
 	 *        The class names in this array will be stored in the service's
 	 *        properties under the key {@link Constants#OBJECTCLASS}.
-	 * @param service The service object or a <code>ServiceFactory</code>
-	 *        object.
+	 * @param service The service object or a {@code ServiceFactory} object.
 	 * @param properties The properties for this service. The keys in the
-	 *        properties object must all be <code>String</code> objects. See
+	 *        properties object must all be {@code String} objects. See
 	 *        {@link Constants} for a list of standard service property keys.
 	 *        Changes should not be made to this object after calling this
 	 *        method. To update the service's properties the
 	 *        {@link ServiceRegistration#setProperties} method must be called.
-	 *        The set of properties may be <code>null</code> if the service has
-	 *        no properties.
-	 * @return A <code>ServiceRegistration</code> object for use by the bundle
+	 *        The set of properties may be {@code null} if the service has no
+	 *        properties.
+	 * @return A {@code ServiceRegistration} object for use by the bundle
 	 *         registering the service to update the service's properties or to
 	 *         unregister the service.
 	 * @throws IllegalArgumentException If one of the following is true:
 	 *         <ul>
-	 *         <li><code>service</code> is <code>null</code>. <li><code>service
-	 *         </code> is not a <code>ServiceFactory</code> object and is not an
-	 *         instance of all the named classes in <code>clazzes</code>. <li>
-	 *         <code>properties</code> contains case variants of the same key
-	 *         name.
+	 *         <li>{@code service} is {@code null}. <li>{@code service} is not a
+	 *         {@code ServiceFactory} object and is not an instance of all the
+	 *         named classes in {@code clazzes}. <li> {@code properties}
+	 *         contains case variants of the same key name.
 	 *         </ul>
 	 * @throws SecurityException If the caller does not have the
-	 *         <code>ServicePermission</code> to register the service for all
-	 *         the named classes and the Java Runtime Environment supports
+	 *         {@code ServicePermission} to register the service for all the
+	 *         named classes and the Java Runtime Environment supports
 	 *         permissions.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @see ServiceRegistration
 	 * @see ServiceFactory
 	 */
-	public ServiceRegistration registerService(String[] clazzes,
-			Object service, Dictionary properties);
+	ServiceRegistration< ? > registerService(String[] clazzes, Object service,
+			Dictionary<String, ? > properties);
 
 	/**
 	 * Registers the specified service object with the specified properties
@@ -444,28 +444,53 @@ public interface BundleContext {
 	 * <p>
 	 * This method is otherwise identical to
 	 * {@link #registerService(String[], Object, Dictionary)} and is provided as
-	 * a convenience when <code>service</code> will only be registered under a
-	 * single class name. Note that even in this case the value of the service's
+	 * a convenience when {@code service} will only be registered under a single
+	 * class name. Note that even in this case the value of the service's
 	 * {@link Constants#OBJECTCLASS} property will be an array of string, rather
 	 * than just a single string.
 	 * 
 	 * @param clazz The class name under which the service can be located.
-	 * @param service The service object or a <code>ServiceFactory</code>
-	 *        object.
+	 * @param service The service object or a {@code ServiceFactory} object.
 	 * @param properties The properties for this service.
-	 * @return A <code>ServiceRegistration</code> object for use by the bundle
+	 * @return A {@code ServiceRegistration} object for use by the bundle
 	 *         registering the service to update the service's properties or to
 	 *         unregister the service.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @see #registerService(String[], Object, Dictionary)
 	 */
-	public ServiceRegistration registerService(String clazz, Object service,
-			Dictionary properties);
+	ServiceRegistration< ? > registerService(String clazz, Object service,
+			Dictionary<String, ? > properties);
 
 	/**
-	 * Returns an array of <code>ServiceReference</code> objects. The returned
-	 * array of <code>ServiceReference</code> objects contains services that
-	 * were registered under the specified class, match the specified filter
+	 * Registers the specified service object with the specified properties
+	 * under the specified class name with the Framework.
+	 * 
+	 * <p>
+	 * This method is otherwise identical to
+	 * {@link #registerService(String[], Object, Dictionary)} and is provided as
+	 * a convenience when {@code service} will only be registered under a single
+	 * class name. Note that even in this case the value of the service's
+	 * {@link Constants#OBJECTCLASS} property will be an array of string, rather
+	 * than just a single string.
+	 * 
+	 * @param <S> Type of Service.
+	 * @param clazz The class name under which the service can be located.
+	 * @param service The service object or a {@code ServiceFactory} object.
+	 * @param properties The properties for this service.
+	 * @return A {@code ServiceRegistration} object for use by the bundle
+	 *         registering the service to update the service's properties or to
+	 *         unregister the service.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
+	 * @see #registerService(String[], Object, Dictionary)
+	 * @since 1.6
+	 */
+	<S> ServiceRegistration<S> registerService(Class<S> clazz, S service,
+			Dictionary<String, ? > properties);
+
+	/**
+	 * Returns an array of {@code ServiceReference} objects. The returned array
+	 * of {@code ServiceReference} objects contains services that were
+	 * registered under the specified class, match the specified filter
 	 * expression, and the packages for the class names under which the services
 	 * were registered match the context bundle's packages as defined in
 	 * {@link ServiceReference#isAssignableTo(Bundle, String)}.
@@ -476,53 +501,51 @@ public interface BundleContext {
 	 * unregistered at any time.
 	 * 
 	 * <p>
-	 * The specified <code>filter</code> expression is used to select the
-	 * registered services whose service properties contain keys and values
-	 * which satisfy the filter expression. See {@link Filter} for a description
-	 * of the filter syntax. If the specified <code>filter</code> is
-	 * <code>null</code>, all registered services are considered to match the
-	 * filter. If the specified <code>filter</code> expression cannot be parsed,
-	 * an {@link InvalidSyntaxException} will be thrown with a human readable
+	 * The specified {@code filter} expression is used to select the registered
+	 * services whose service properties contain keys and values which satisfy
+	 * the filter expression. See {@link Filter} for a description of the filter
+	 * syntax. If the specified {@code filter} is {@code null}, all registered
+	 * services are considered to match the filter. If the specified
+	 * {@code filter} expression cannot be parsed, an
+	 * {@link InvalidSyntaxException} will be thrown with a human readable
 	 * message where the filter became unparsable.
 	 * 
 	 * <p>
-	 * The result is an array of <code>ServiceReference</code> objects for all
+	 * The result is an array of {@code ServiceReference} objects for all
 	 * services that meet all of the following conditions:
 	 * <ul>
-	 * <li>If the specified class name, <code>clazz</code>, is not
-	 * <code>null</code>, the service must have been registered with the
-	 * specified class name. The complete list of class names with which a
-	 * service was registered is available from the service's
-	 * {@link Constants#OBJECTCLASS objectClass} property.
-	 * <li>If the specified <code>filter</code> is not <code>null</code>, the
-	 * filter expression must match the service.
+	 * <li>If the specified class name, {@code clazz}, is not {@code null}, the
+	 * service must have been registered with the specified class name. The
+	 * complete list of class names with which a service was registered is
+	 * available from the service's {@link Constants#OBJECTCLASS objectClass}
+	 * property.
+	 * <li>If the specified {@code filter} is not {@code null}, the filter
+	 * expression must match the service.
 	 * <li>If the Java Runtime Environment supports permissions, the caller must
-	 * have <code>ServicePermission</code> with the <code>GET</code> action for
-	 * at least one of the class names under which the service was registered.
+	 * have {@code ServicePermission} with the {@code GET} action for at least
+	 * one of the class names under which the service was registered.
 	 * <li>For each class name with which the service was registered, calling
 	 * {@link ServiceReference#isAssignableTo(Bundle, String)} with the context
-	 * bundle and the class name on the service's <code>ServiceReference</code>
-	 * object must return <code>true</code>
+	 * bundle and the class name on the service's {@code ServiceReference}
+	 * object must return {@code true}
 	 * </ul>
 	 * 
 	 * @param clazz The class name with which the service was registered or
-	 *        <code>null</code> for all services.
-	 * @param filter The filter expression or <code>null</code> for all
-	 *        services.
-	 * @return An array of <code>ServiceReference</code> objects or
-	 *         <code>null</code> if no services are registered which satisfy the
-	 *         search.
-	 * @throws InvalidSyntaxException If the specified <code>filter</code>
-	 *         contains an invalid filter expression that cannot be parsed.
+	 *        {@code null} for all services.
+	 * @param filter The filter expression or {@code null} for all services.
+	 * @return An array of {@code ServiceReference} objects or {@code null} if
+	 *         no services are registered which satisfy the search.
+	 * @throws InvalidSyntaxException If the specified {@code filter} contains
+	 *         an invalid filter expression that cannot be parsed.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 */
-	public ServiceReference[] getServiceReferences(String clazz, String filter)
+	ServiceReference< ? >[] getServiceReferences(String clazz, String filter)
 			throws InvalidSyntaxException;
 
 	/**
-	 * Returns an array of <code>ServiceReference</code> objects. The returned
-	 * array of <code>ServiceReference</code> objects contains services that
-	 * were registered under the specified class and match the specified filter
+	 * Returns an array of {@code ServiceReference} objects. The returned array
+	 * of {@code ServiceReference} objects contains services that were
+	 * registered under the specified class and match the specified filter
 	 * expression.
 	 * 
 	 * <p>
@@ -531,61 +554,91 @@ public interface BundleContext {
 	 * unregistered at any time.
 	 * 
 	 * <p>
-	 * The specified <code>filter</code> expression is used to select the
-	 * registered services whose service properties contain keys and values
-	 * which satisfy the filter expression. See {@link Filter} for a description
-	 * of the filter syntax. If the specified <code>filter</code> is
-	 * <code>null</code>, all registered services are considered to match the
-	 * filter. If the specified <code>filter</code> expression cannot be parsed,
-	 * an {@link InvalidSyntaxException} will be thrown with a human readable
+	 * The specified {@code filter} expression is used to select the registered
+	 * services whose service properties contain keys and values which satisfy
+	 * the filter expression. See {@link Filter} for a description of the filter
+	 * syntax. If the specified {@code filter} is {@code null}, all registered
+	 * services are considered to match the filter. If the specified
+	 * {@code filter} expression cannot be parsed, an
+	 * {@link InvalidSyntaxException} will be thrown with a human readable
 	 * message where the filter became unparsable.
 	 * 
 	 * <p>
-	 * The result is an array of <code>ServiceReference</code> objects for all
+	 * The result is an array of {@code ServiceReference} objects for all
 	 * services that meet all of the following conditions:
 	 * <ul>
-	 * <li>If the specified class name, <code>clazz</code>, is not
-	 * <code>null</code>, the service must have been registered with the
-	 * specified class name. The complete list of class names with which a
-	 * service was registered is available from the service's
-	 * {@link Constants#OBJECTCLASS objectClass} property.
-	 * <li>If the specified <code>filter</code> is not <code>null</code>, the
-	 * filter expression must match the service.
+	 * <li>If the specified class name, {@code clazz}, is not {@code null}, the
+	 * service must have been registered with the specified class name. The
+	 * complete list of class names with which a service was registered is
+	 * available from the service's {@link Constants#OBJECTCLASS objectClass}
+	 * property.
+	 * <li>If the specified {@code filter} is not {@code null}, the filter
+	 * expression must match the service.
 	 * <li>If the Java Runtime Environment supports permissions, the caller must
-	 * have <code>ServicePermission</code> with the <code>GET</code> action for
-	 * at least one of the class names under which the service was registered.
+	 * have {@code ServicePermission} with the {@code GET} action for at least
+	 * one of the class names under which the service was registered.
 	 * </ul>
 	 * 
 	 * @param clazz The class name with which the service was registered or
-	 *        <code>null</code> for all services.
-	 * @param filter The filter expression or <code>null</code> for all
-	 *        services.
-	 * @return An array of <code>ServiceReference</code> objects or
-	 *         <code>null</code> if no services are registered which satisfy the
-	 *         search.
-	 * @throws InvalidSyntaxException If the specified <code>filter</code>
-	 *         contains an invalid filter expression that cannot be parsed.
+	 *        {@code null} for all services.
+	 * @param filter The filter expression or {@code null} for all services.
+	 * @return An array of {@code ServiceReference} objects or {@code null} if
+	 *         no services are registered which satisfy the search.
+	 * @throws InvalidSyntaxException If the specified {@code filter} contains
+	 *         an invalid filter expression that cannot be parsed.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @since 1.3
 	 */
-	public ServiceReference[] getAllServiceReferences(String clazz,
-			String filter) throws InvalidSyntaxException;
+	ServiceReference< ? >[] getAllServiceReferences(String clazz, String filter)
+			throws InvalidSyntaxException;
+
+	/**
+	 * Returns a {@code ServiceReference} object for a service that implements
+	 * and was registered under the specified class.
+	 * 
+	 * <p>
+	 * The returned {@code ServiceReference} object is valid at the time of the
+	 * call to this method. However as the Framework is a very dynamic
+	 * environment, services can be modified or unregistered at any time.
+	 * 
+	 * <p>
+	 * This method is the same as calling
+	 * {@link #getServiceReferences(String, String)} with a {@code null} filter
+	 * expression and then finding the reference with the highest priority. It
+	 * is provided as a convenience for when the caller is interested in any
+	 * service that implements the specified class.
+	 * <p>
+	 * If multiple such services exist, the service with the highest priority is
+	 * selected. This priority is defined as the service reference with the
+	 * highest ranking (as specified in its {@link Constants#SERVICE_RANKING}
+	 * property) is returned.
+	 * <p>
+	 * If there is a tie in ranking, the service with the lowest service ID (as
+	 * specified in its {@link Constants#SERVICE_ID} property); that is, the
+	 * service that was registered first is returned.
+	 * 
+	 * @param clazz The class name with which the service was registered.
+	 * @return A {@code ServiceReference} object, or {@code null} if no services
+	 *         are registered which implement the named class.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
+	 * @see #getServiceReferences(String, String)
+	 */
+	ServiceReference< ? > getServiceReference(String clazz);
 
 	/**
-	 * Returns a <code>ServiceReference</code> object for a service that
-	 * implements and was registered under the specified class.
+	 * Returns a {@code ServiceReference} object for a service that implements
+	 * and was registered under the specified class.
 	 * 
 	 * <p>
-	 * The returned <code>ServiceReference</code> object is valid at the time of
-	 * the call to this method. However as the Framework is a very dynamic
+	 * The returned {@code ServiceReference} object is valid at the time of the
+	 * call to this method. However as the Framework is a very dynamic
 	 * environment, services can be modified or unregistered at any time.
 	 * 
 	 * <p>
 	 * This method is the same as calling
-	 * {@link BundleContext#getServiceReferences(String, String)} with a
-	 * <code>null</code> filter expression. It is provided as a convenience for
-	 * when the caller is interested in any service that implements the
-	 * specified class.
+	 * {@link #getServiceReferences(Class, String)} with a {@code null} filter
+	 * expression. It is provided as a convenience for when the caller is
+	 * interested in any service that implements the specified class.
 	 * <p>
 	 * If multiple such services exist, the service with the highest ranking (as
 	 * specified in its {@link Constants#SERVICE_RANKING} property) is returned.
@@ -594,17 +647,76 @@ public interface BundleContext {
 	 * specified in its {@link Constants#SERVICE_ID} property); that is, the
 	 * service that was registered first is returned.
 	 * 
+	 * @param <S> Type of Service.
 	 * @param clazz The class name with which the service was registered.
-	 * @return A <code>ServiceReference</code> object, or <code>null</code> if
-	 *         no services are registered which implement the named class.
+	 * @return A {@code ServiceReference} object, or {@code null} if no services
+	 *         are registered which implement the named class.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
-	 * @see #getServiceReferences(String, String)
+	 * @see #getServiceReferences(Class, String)
+	 * @since 1.6
 	 */
-	public ServiceReference getServiceReference(String clazz);
+	<S> ServiceReference<S> getServiceReference(Class<S> clazz);
+
+	/**
+	 * Returns a collection of {@code ServiceReference} objects. The returned
+	 * collection of {@code ServiceReference} objects contains services that
+	 * were registered under the specified class, match the specified filter
+	 * expression, and the packages for the class names under which the services
+	 * were registered match the context bundle's packages as defined in
+	 * {@link ServiceReference#isAssignableTo(Bundle, String)}.
+	 * 
+	 * <p>
+	 * The collection is valid at the time of the call to this method. However
+	 * since the Framework is a very dynamic environment, services can be
+	 * modified or unregistered at any time.
+	 * 
+	 * <p>
+	 * The specified {@code filter} expression is used to select the registered
+	 * services whose service properties contain keys and values which satisfy
+	 * the filter expression. See {@link Filter} for a description of the filter
+	 * syntax. If the specified {@code filter} is {@code null}, all registered
+	 * services are considered to match the filter. If the specified
+	 * {@code filter} expression cannot be parsed, an
+	 * {@link InvalidSyntaxException} will be thrown with a human readable
+	 * message where the filter became unparsable.
+	 * 
+	 * <p>
+	 * The result is a collection of {@code ServiceReference} objects for all
+	 * services that meet all of the following conditions:
+	 * <ul>
+	 * <li>If the specified class name, {@code clazz}, is not {@code null}, the
+	 * service must have been registered with the specified class name. The
+	 * complete list of class names with which a service was registered is
+	 * available from the service's {@link Constants#OBJECTCLASS objectClass}
+	 * property.
+	 * <li>If the specified {@code filter} is not {@code null}, the filter
+	 * expression must match the service.
+	 * <li>If the Java Runtime Environment supports permissions, the caller must
+	 * have {@code ServicePermission} with the {@code GET} action for at least
+	 * one of the class names under which the service was registered.
+	 * <li>For each class name with which the service was registered, calling
+	 * {@link ServiceReference#isAssignableTo(Bundle, String)} with the context
+	 * bundle and the class name on the service's {@code ServiceReference}
+	 * object must return {@code true}
+	 * </ul>
+	 * 
+	 * @param <S> Type of Service
+	 * @param clazz The class name with which the service was registered. Must
+	 *        not be {@code null}.
+	 * @param filter The filter expression or {@code null} for all services.
+	 * @return A collection of {@code ServiceReference} objects. May be empty if
+	 *         no services are registered which satisfy the search.
+	 * @throws InvalidSyntaxException If the specified {@code filter} contains
+	 *         an invalid filter expression that cannot be parsed.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
+	 * @since 1.6
+	 */
+	<S> Collection<ServiceReference<S>> getServiceReferences(Class<S> clazz,
+			String filter) throws InvalidSyntaxException;
 
 	/**
 	 * Returns the service object referenced by the specified
-	 * <code>ServiceReference</code> object.
+	 * {@code ServiceReference} object.
 	 * <p>
 	 * A bundle's use of a service is tracked by the bundle's use count of that
 	 * service. Each time a service's service object is returned by
@@ -617,60 +729,59 @@ public interface BundleContext {
 	 * no longer use that service.
 	 * 
 	 * <p>
-	 * This method will always return <code>null</code> when the service
-	 * associated with this <code>reference</code> has been unregistered.
+	 * This method will always return {@code null} when the service associated
+	 * with this {@code reference} has been unregistered.
 	 * 
 	 * <p>
 	 * The following steps are required to get the service object:
 	 * <ol>
-	 * <li>If the service has been unregistered, <code>null</code> is returned.
-	 * <li>The context bundle's use count for this service is incremented by
-	 * one.
-	 * <li>If the context bundle's use count for the service is currently one
+	 * <li>If the service has been unregistered, {@code null} is returned.
+	 * <li>If the context bundle's use count for the service is currently zero
 	 * and the service was registered with an object implementing the
-	 * <code>ServiceFactory</code> interface, the
+	 * {@code ServiceFactory} interface, the
 	 * {@link ServiceFactory#getService(Bundle, ServiceRegistration)} method is
-	 * called to create a service object for the context bundle. This service
-	 * object is cached by the Framework. While the context bundle's use count
-	 * for the service is greater than zero, subsequent calls to get the
-	 * services's service object for the context bundle will return the cached
-	 * service object. <br>
-	 * If the service object returned by the <code>ServiceFactory</code> object
-	 * is not an <code>instanceof</code> all the classes named when the service
-	 * was registered or the <code>ServiceFactory</code> object throws an
-	 * exception, <code>null</code> is returned and a Framework event of type
-	 * {@link FrameworkEvent#ERROR} containing a {@link ServiceException}
-	 * describing the error is fired.
+	 * called to create a service object for the context bundle. If the service
+	 * object returned by the {@code ServiceFactory} object is {@code null}, not
+	 * an {@code instanceof} all the classes named when the service was
+	 * registered or the {@code ServiceFactory} object throws an exception or
+	 * will be recursively called for the context bundle, {@code null} is
+	 * returned and a Framework event of type {@link FrameworkEvent#ERROR}
+	 * containing a {@link ServiceException} describing the error is fired. <br>
+	 * This service object is cached by the Framework. While the context
+	 * bundle's use count for the service is greater than zero, subsequent calls
+	 * to get the services's service object for the context bundle will return
+	 * the cached service object.
+	 * <li>The context bundle's use count for this service is incremented by
+	 * one.
 	 * <li>The service object for the service is returned.
 	 * </ol>
 	 * 
+	 * @param <S> Type of Service.
 	 * @param reference A reference to the service.
 	 * @return A service object for the service associated with
-	 *         <code>reference</code> or <code>null</code> if the service is not
+	 *         {@code reference} or {@code null} if the service is not
 	 *         registered, the service object returned by a
-	 *         <code>ServiceFactory</code> does not implement the classes under
-	 *         which it was registered or the <code>ServiceFactory</code> threw
-	 *         an exception.
+	 *         {@code ServiceFactory} does not implement the classes under which
+	 *         it was registered or the {@code ServiceFactory} threw an
+	 *         exception.
 	 * @throws SecurityException If the caller does not have the
-	 *         <code>ServicePermission</code> to get the service using at least
-	 *         one of the named classes the service was registered under and the
+	 *         {@code ServicePermission} to get the service using at least one
+	 *         of the named classes the service was registered under and the
 	 *         Java Runtime Environment supports permissions.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @throws IllegalArgumentException If the specified
-	 *         <code>ServiceReference</code> was not created by the same
-	 *         framework instance as this <code>BundleContext</code>.
+	 *         {@code ServiceReference} was not created by the same framework
+	 *         instance as this {@code BundleContext}.
 	 * @see #ungetService(ServiceReference)
 	 * @see ServiceFactory
 	 */
-	public Object getService(ServiceReference reference);
+	<S> S getService(ServiceReference<S> reference);
 
 	/**
 	 * Releases the service object referenced by the specified
-	 * <code>ServiceReference</code> object. If the context bundle's use count
-	 * for the service is zero, this method returns <code>false</code>.
-	 * Otherwise, the context bundle's use count for the service is decremented
-	 * by one.
+	 * {@code ServiceReference} object. If the context bundle's use count for
+	 * the service is zero, this method returns {@code false}. Otherwise, the
+	 * context bundle's use count for the service is decremented by one.
 	 * 
 	 * <p>
 	 * The service's service object should no longer be used and all references
@@ -681,76 +792,81 @@ public interface BundleContext {
 	 * The following steps are required to unget the service object:
 	 * <ol>
 	 * <li>If the context bundle's use count for the service is zero or the
-	 * service has been unregistered, <code>false</code> is returned.
+	 * service has been unregistered, {@code false} is returned.
 	 * <li>The context bundle's use count for this service is decremented by
 	 * one.
 	 * <li>If the context bundle's use count for the service is currently zero
-	 * and the service was registered with a <code>ServiceFactory</code> object,
-	 * the
+	 * and the service was registered with a {@code ServiceFactory} object, the
 	 * {@link ServiceFactory#ungetService(Bundle, ServiceRegistration, Object)}
 	 * method is called to release the service object for the context bundle.
-	 * <li><code>true</code> is returned.
+	 * <li>{@code true} is returned.
 	 * </ol>
 	 * 
 	 * @param reference A reference to the service to be released.
-	 * @return <code>false</code> if the context bundle's use count for the
-	 *         service is zero or if the service has been unregistered;
-	 *         <code>true</code> otherwise.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @return {@code false} if the context bundle's use count for the service
+	 *         is zero or if the service has been unregistered; {@code true}
+	 *         otherwise.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @throws IllegalArgumentException If the specified
-	 *         <code>ServiceReference</code> was not created by the same
-	 *         framework instance as this <code>BundleContext</code>.
+	 *         {@code ServiceReference} was not created by the same framework
+	 *         instance as this {@code BundleContext}.
 	 * @see #getService
 	 * @see ServiceFactory
 	 */
-	public boolean ungetService(ServiceReference reference);
+	boolean ungetService(ServiceReference< ? > reference);
 
 	/**
-	 * Creates a <code>File</code> object for a file in the persistent storage
-	 * area provided for the bundle by the Framework. This method will return
-	 * <code>null</code> if the platform does not have file system support.
+	 * Creates a {@code File} object for a file in the persistent storage area
+	 * provided for the bundle by the Framework. This method will return
+	 * {@code null} if the platform does not have file system support.
 	 * 
 	 * <p>
-	 * A <code>File</code> object for the base directory of the persistent
-	 * storage area provided for the context bundle by the Framework can be
-	 * obtained by calling this method with an empty string as
-	 * <code>filename</code>.
+	 * A {@code File} object for the base directory of the persistent storage
+	 * area provided for the context bundle by the Framework can be obtained by
+	 * calling this method with an empty string as {@code filename}.
 	 * 
 	 * <p>
 	 * If the Java Runtime Environment supports permissions, the Framework will
-	 * ensure that the bundle has the <code>java.io.FilePermission</code> with
-	 * actions <code>read</code>,<code>write</code>,<code>delete</code>
-	 * for all files (recursively) in the persistent storage area provided for
-	 * the context bundle.
+	 * ensure that the bundle has the {@code java.io.FilePermission} with
+	 * actions {@code read},{@code write},{@code delete} for all files
+	 * (recursively) in the persistent storage area provided for the context
+	 * bundle.
 	 * 
 	 * @param filename A relative name to the file to be accessed.
-	 * @return A <code>File</code> object that represents the requested file
-	 *         or <code>null</code> if the platform does not have file system
-	 *         support.
-	 * @throws IllegalStateException If this BundleContext is no
-	 *         longer valid.
+	 * @return A {@code File} object that represents the requested file or
+	 *         {@code null} if the platform does not have file system support.
+	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 */
-	public File getDataFile(String filename);
+	File getDataFile(String filename);
 
 	/**
-	 * Creates a <code>Filter</code> object. This <code>Filter</code> object may
-	 * be used to match a <code>ServiceReference</code> object or a
-	 * <code>Dictionary</code> object.
+	 * Creates a {@code Filter} object. This {@code Filter} object may be used
+	 * to match a {@code ServiceReference} object or a {@code Dictionary}
+	 * object.
 	 * 
 	 * <p>
 	 * If the filter cannot be parsed, an {@link InvalidSyntaxException} will be
 	 * thrown with a human readable message where the filter became unparsable.
 	 * 
 	 * @param filter The filter string.
-	 * @return A <code>Filter</code> object encapsulating the filter string.
-	 * @throws InvalidSyntaxException If <code>filter</code> contains an invalid
+	 * @return A {@code Filter} object encapsulating the filter string.
+	 * @throws InvalidSyntaxException If {@code filter} contains an invalid
 	 *         filter string that cannot be parsed.
-	 * @throws NullPointerException If <code>filter</code> is null.
+	 * @throws NullPointerException If {@code filter} is null.
 	 * @throws IllegalStateException If this BundleContext is no longer valid.
 	 * @see "Framework specification for a description of the filter string syntax."
 	 * @see FrameworkUtil#createFilter(String)
 	 * @since 1.1
 	 */
-	public Filter createFilter(String filter) throws InvalidSyntaxException;
+	Filter createFilter(String filter) throws InvalidSyntaxException;
+
+	/**
+	 * Returns the bundle with the specified location.
+	 * 
+	 * @param location The location of the bundle to retrieve.
+	 * @return A {@code Bundle} object or {@code null} if the location does not
+	 *         match any installed bundle.
+	 * @since 1.6
+	 */
+	Bundle getBundle(String location);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleEvent.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleEvent.java
index 7a8fb8d..13c68be 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleEvent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,8 +21,8 @@ import java.util.EventObject;
 /**
  * An event from the Framework describing a bundle lifecycle change.
  * <p>
- * <code>BundleEvent</code> objects are delivered to
- * <code>SynchronousBundleListener</code>s and <code>BundleListener</code>s
+ * {@code BundleEvent} objects are delivered to
+ * {@code SynchronousBundleListener}s and {@code BundleListener}s
  * when a change occurs in a bundle's lifecycle. A type code is used to identify
  * the event type for future extendability.
  * 
@@ -32,7 +32,7 @@ import java.util.EventObject;
  * @Immutable
  * @see BundleListener
  * @see SynchronousBundleListener
- * @version $Revision: 6542 $
+ * @version $Id: ed3c40cd707bed45681cadce114a6cc5db27a844 $
  */
 
 public class BundleEvent extends EventObject {
@@ -113,7 +113,7 @@ public class BundleEvent extends EventObject {
 	 * {@link BundleActivator#start(BundleContext) BundleActivator start} method
 	 * is about to be called if the bundle has a bundle activator class. This
 	 * event is only delivered to {@link SynchronousBundleListener}s. It is not
-	 * delivered to <code>BundleListener</code>s.
+	 * delivered to {@code BundleListener}s.
 	 * 
 	 * @see Bundle#start()
 	 * @since 1.3
@@ -127,7 +127,7 @@ public class BundleEvent extends EventObject {
 	 * {@link BundleActivator#stop(BundleContext) BundleActivator stop} method
 	 * is about to be called if the bundle has a bundle activator class. This
 	 * event is only delivered to {@link SynchronousBundleListener}s. It is not
-	 * delivered to <code>BundleListener</code>s.
+	 * delivered to {@code BundleListener}s.
 	 * 
 	 * @see Bundle#stop()
 	 * @since 1.3
@@ -140,25 +140,55 @@ public class BundleEvent extends EventObject {
 	 * The bundle has a {@link Constants#ACTIVATION_LAZY lazy activation policy}
 	 * and is waiting to be activated. It is now in the
 	 * {@link Bundle#STARTING STARTING} state and has a valid
-	 * <code>BundleContext</code>. This event is only delivered to
+	 * {@code BundleContext}. This event is only delivered to
 	 * {@link SynchronousBundleListener}s. It is not delivered to
-	 * <code>BundleListener</code>s.
+	 * {@code BundleListener}s.
 	 * 
 	 * @since 1.4
 	 */
 	public final static int	LAZY_ACTIVATION		= 0x00000200;
 
 	/**
+	 * Bundle that was the origin of the event. For install event type, this is
+	 * the bundle whose context was used to install the bundle. Otherwise it is
+	 * the bundle itself.
+	 * 
+	 * @since 1.6
+	 */
+	private final Bundle	origin;
+
+	/**
 	 * Creates a bundle event of the specified type.
 	 * 
 	 * @param type The event type.
 	 * @param bundle The bundle which had a lifecycle change.
+	 * @param origin The bundle which is the origin of the event. For the event
+	 *        type {@link #INSTALLED}, this is the bundle whose context was used
+	 *        to install the bundle. Otherwise it is the bundle itself.
+	 * @since 1.6
 	 */
+	public BundleEvent(int type, Bundle bundle, Bundle origin) {
+		super(bundle);
+		if (origin == null) {
+			throw new IllegalArgumentException("null origin");
+		}
+		this.bundle = bundle;
+		this.type = type;
+		this.origin = origin;
+	}
 
+	/**
+	 * Creates a bundle event of the specified type.
+	 * 
+	 * @param type The event type.
+	 * @param bundle The bundle which had a lifecycle change. This bundle is
+	 *        used as the origin of the event.
+	 */
 	public BundleEvent(int type, Bundle bundle) {
 		super(bundle);
 		this.bundle = bundle;
 		this.type = type;
+		this.origin = bundle;
 	}
 
 	/**
@@ -188,8 +218,21 @@ public class BundleEvent extends EventObject {
 	 * 
 	 * @return The type of lifecycle event.
 	 */
-
 	public int getType() {
 		return type;
 	}
+
+	/**
+	 * Returns the bundle that was the origin of the event.
+	 * 
+	 * <p>
+	 * For the event type {@link #INSTALLED}, this is the bundle whose context
+	 * was used to install the bundle. Otherwise it is the bundle itself.
+	 * 
+	 * @return The bundle that was the origin of the event.
+	 * @since 1.6
+	 */
+	public Bundle getOrigin() {
+		return origin;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleException.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleException.java
index 500d147..9cae61a 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleException.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,9 +21,9 @@ package org.osgi.framework;
  * occurred.
  * 
  * <p>
- * A <code>BundleException</code> object is created by the Framework to denote
+ * A {@code BundleException} object is created by the Framework to denote
  * an exception condition in the lifecycle of a bundle.
- * <code>BundleException</code>s should not be created by bundle developers.
+ * {@code BundleException}s should not be created by bundle developers.
  * A type code is used to identify the exception type for future extendability.
  * 
  * <p>
@@ -32,7 +32,7 @@ package org.osgi.framework;
  * <p>
  * This exception conforms to the general purpose exception chaining mechanism.
  * 
- * @version $Revision: 6083 $
+ * @version $Id: 9e117ec9667b040f7752e342aa07d6c7d5bf0275 $
  */
 
 public class BundleException extends Exception {
@@ -45,13 +45,14 @@ public class BundleException extends Exception {
 	private final int		type;
 
 	/**
-	 * No exception type is unspecified.
+	 * No exception type is specified.
 	 * 
 	 * @since 1.5
 	 */
 	public static final int	UNSPECIFIED				= 0;
 	/**
-	 * The operation was unsupported.
+	 * The operation was unsupported. This type can be used anywhere a 
+	 * BundleException can be thrown.
 	 * 
 	 * @since 1.5
 	 */
@@ -102,8 +103,12 @@ public class BundleException extends Exception {
 	public static final int	NATIVECODE_ERROR		= 8;
 
 	/**
-	 * The install or update operation failed because another 
-	 * already installed bundle has the same symbolic name and version.
+	 * The install or update operation failed because another already installed
+	 * bundle has the same symbolic name and version. This exception type will
+	 * only occur if the framework is configured to only allow a single bundle
+	 * to be installed for a given symbolic name and version.
+	 * 
+	 * @see Constants#FRAMEWORK_BSNVERSION
 	 * @since 1.5
 	 */
 	public static final int	DUPLICATE_BUNDLE_ERROR	= 9;
@@ -117,7 +122,22 @@ public class BundleException extends Exception {
 	public static final int	START_TRANSIENT_ERROR	= 10;
 
 	/**
-	 * Creates a <code>BundleException</code> with the specified message and
+	 * The framework received an error while reading the input stream for a
+	 * bundle.
+	 * 
+	 * @since 1.6
+	 */
+	public static final int	READ_ERROR				= 11;
+
+	/**
+	 * A framework hook rejected the operation.
+	 * 
+	 * @since 1.6
+	 */
+	public static final int	REJECTED_BY_HOOK		= 12;
+
+	/**
+	 * Creates a {@code BundleException} with the specified message and
 	 * exception cause.
 	 * 
 	 * @param msg The associated message.
@@ -128,7 +148,7 @@ public class BundleException extends Exception {
 	}
 
 	/**
-	 * Creates a <code>BundleException</code> with the specified message.
+	 * Creates a {@code BundleException} with the specified message.
 	 * 
 	 * @param msg The message.
 	 */
@@ -137,7 +157,7 @@ public class BundleException extends Exception {
 	}
 
 	/**
-	 * Creates a <code>BundleException</code> with the specified message, type
+	 * Creates a {@code BundleException} with the specified message, type
 	 * and exception cause.
 	 * 
 	 * @param msg The associated message.
@@ -151,7 +171,7 @@ public class BundleException extends Exception {
 	}
 
 	/**
-	 * Creates a <code>BundleException</code> with the specified message and
+	 * Creates a {@code BundleException} with the specified message and
 	 * type.
 	 * 
 	 * @param msg The message.
@@ -164,29 +184,29 @@ public class BundleException extends Exception {
 	}
 
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * specified when this exception was created.
 	 * 
 	 * <p>
 	 * This method predates the general purpose exception chaining mechanism.
-	 * The <code>getCause()</code> method is now the preferred means of
+	 * The {@code getCause()} method is now the preferred means of
 	 * obtaining this information.
 	 * 
-	 * @return The result of calling <code>getCause()</code>.
+	 * @return The result of calling {@code getCause()}.
 	 */
 	public Throwable getNestedException() {
 		return getCause();
 	}
 
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * set.
 	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
+	 * @return The cause of this exception or {@code null} if no cause was
 	 *         set.
 	 * @since 1.3
 	 */
-    public Throwable getCause() {
+	public Throwable getCause() {
 		return super.getCause();
 	}
 
@@ -206,7 +226,7 @@ public class BundleException extends Exception {
 	}
 
 	/**
-	 * Returns the type for this exception or <code>UNSPECIFIED</code> if the
+	 * Returns the type for this exception or {@code UNSPECIFIED} if the
 	 * type was unspecified or unknown.
 	 * 
 	 * @return The type of this exception.
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleListener.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleListener.java
index 9dd7151..d9bb54c 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleListener.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,29 +19,29 @@ package org.osgi.framework;
 import java.util.EventListener;
 
 /**
- * A <code>BundleEvent</code> listener. <code>BundleListener</code> is a
+ * A {@code BundleEvent} listener. {@code BundleListener} is a
  * listener interface that may be implemented by a bundle developer. When a
- * <code>BundleEvent</code> is fired, it is asynchronously delivered to a
- * <code>BundleListener</code>. The Framework delivers
- * <code>BundleEvent</code> objects to a <code>BundleListener</code> in
- * order and must not concurrently call a <code>BundleListener</code>.
+ * {@code BundleEvent} is fired, it is asynchronously delivered to a
+ * {@code BundleListener}. The Framework delivers
+ * {@code BundleEvent} objects to a {@code BundleListener} in
+ * order and must not concurrently call a {@code BundleListener}.
  * <p>
- * A <code>BundleListener</code> object is registered with the Framework using
+ * A {@code BundleListener} object is registered with the Framework using
  * the {@link BundleContext#addBundleListener} method.
- * <code>BundleListener</code>s are called with a <code>BundleEvent</code>
+ * {@code BundleListener}s are called with a {@code BundleEvent}
  * object when a bundle has been installed, resolved, started, stopped, updated,
  * unresolved, or uninstalled.
  * 
  * @see BundleEvent
  * @NotThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: 77cdaebd3ac97c6798fc3043957abd1bd6d01ccb $
  */
 
 public interface BundleListener extends EventListener {
 	/**
 	 * Receives notification that a bundle has had a lifecycle change.
 	 * 
-	 * @param event The <code>BundleEvent</code>.
+	 * @param event The {@code BundleEvent}.
 	 */
 	public void bundleChanged(BundleEvent event);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundlePermission.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundlePermission.java
index 8677e69..e6f9356 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundlePermission.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundlePermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,10 +23,12 @@ import java.io.ObjectStreamField;
 import java.security.BasicPermission;
 import java.security.Permission;
 import java.security.PermissionCollection;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -50,13 +52,13 @@ import java.util.Map;
  * </pre>
  * 
  * <p>
- * <code>BundlePermission</code> has four actions: <code>provide</code>,
- * <code>require</code>,<code>host</code>, and <code>fragment</code>. The
- * <code>provide</code> action implies the <code>require</code> action.
+ * {@code BundlePermission} has four actions: {@code provide},
+ * {@code require},{@code host}, and {@code fragment}. The
+ * {@code provide} action implies the {@code require} action.
  * 
  * @since 1.3
  * @ThreadSafe
- * @version $Revision: 6860 $
+ * @version $Id: d30c9c987cc13007ed19d3a9fdd11b00739591c0 $
  */
 
 public final class BundlePermission extends BasicPermission {
@@ -64,24 +66,24 @@ public final class BundlePermission extends BasicPermission {
 	private static final long	serialVersionUID	= 3257846601685873716L;
 
 	/**
-	 * The action string <code>provide</code>. The <code>provide</code> action
-	 * implies the <code>require</code> action.
+	 * The action string {@code provide}. The {@code provide} action
+	 * implies the {@code require} action.
 	 */
 	public final static String	PROVIDE				= "provide";
 
 	/**
-	 * The action string <code>require</code>. The <code>require</code> action
-	 * is implied by the <code>provide</code> action.
+	 * The action string {@code require}. The {@code require} action
+	 * is implied by the {@code provide} action.
 	 */
 	public final static String	REQUIRE				= "require";
 
 	/**
-	 * The action string <code>host</code>.
+	 * The action string {@code host}.
 	 */
 	public final static String	HOST				= "host";
 
 	/**
-	 * The action string <code>fragment</code>.
+	 * The action string {@code fragment}.
 	 */
 	public final static String	FRAGMENT			= "fragment";
 
@@ -113,14 +115,14 @@ public final class BundlePermission extends BasicPermission {
 	 * Bundle Permissions are granted over all possible versions of a bundle.
 	 * 
 	 * A bundle that needs to provide a bundle must have the appropriate
-	 * <code>BundlePermission</code> for the symbolic name; a bundle that
-	 * requires a bundle must have the appropriate <code>BundlePermssion</code>
+	 * {@code BundlePermission} for the symbolic name; a bundle that
+	 * requires a bundle must have the appropriate {@code BundlePermssion}
 	 * for that symbolic name; a bundle that specifies a fragment host must have
-	 * the appropriate <code>BundlePermission</code> for that symbolic name.
+	 * the appropriate {@code BundlePermission} for that symbolic name.
 	 * 
 	 * @param symbolicName The bundle symbolic name.
-	 * @param actions <code>provide</code>,<code>require</code>,
-	 *        <code>host</code>,<code>fragment</code> (canonical order).
+	 * @param actions {@code provide},{@code require},
+	 *        {@code host},{@code fragment} (canonical order).
 	 */
 	public BundlePermission(String symbolicName, String actions) {
 		this(symbolicName, parseActions(actions));
@@ -278,9 +280,9 @@ public final class BundlePermission extends BasicPermission {
 	 * 
 	 * <p>
 	 * This method checks that the symbolic name of the target is implied by the
-	 * symbolic name of this object. The list of <code>BundlePermission</code>
+	 * symbolic name of this object. The list of {@code BundlePermission}
 	 * actions must either match or allow for the list of the target object to
-	 * imply the target <code>BundlePermission</code> action.
+	 * imply the target {@code BundlePermission} action.
 	 * <p>
 	 * The permission to provide a bundle implies the permission to require the
 	 * named symbolic name.
@@ -293,8 +295,8 @@ public final class BundlePermission extends BasicPermission {
 	 * </pre>
 	 * 
 	 * @param p The requested permission.
-	 * @return <code>true</code> if the specified <code>BundlePermission</code>
-	 *         action is implied by this object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified {@code BundlePermission}
+	 *         action is implied by this object; {@code false} otherwise.
 	 */
 	public boolean implies(Permission p) {
 		if (!(p instanceof BundlePermission)) {
@@ -310,15 +312,15 @@ public final class BundlePermission extends BasicPermission {
 
 	/**
 	 * Returns the canonical string representation of the
-	 * <code>BundlePermission</code> actions.
+	 * {@code BundlePermission} actions.
 	 * 
 	 * <p>
-	 * Always returns present <code>BundlePermission</code> actions in the
-	 * following order: <code>provide</code>, <code>require</code>,
-	 * <code>host</code>, <code>fragment</code>.
+	 * Always returns present {@code BundlePermission} actions in the
+	 * following order: {@code provide}, {@code require},
+	 * {@code host}, {@code fragment}.
 	 * 
-	 * @return Canonical string representation of the <code>BundlePermission
-	 *         </code> actions.
+	 * @return Canonical string representation of the {@code BundlePermission
+	 *         } actions.
 	 */
 	public String getActions() {
 		String result = actions;
@@ -357,28 +359,28 @@ public final class BundlePermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object suitable for
-	 * storing <code>BundlePermission</code> objects.
+	 * Returns a new {@code PermissionCollection} object suitable for
+	 * storing {@code BundlePermission} objects.
 	 * 
-	 * @return A new <code>PermissionCollection</code> object.
+	 * @return A new {@code PermissionCollection} object.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new BundlePermissionCollection();
 	}
 
 	/**
-	 * Determines the equality of two <code>BundlePermission</code> objects.
+	 * Determines the equality of two {@code BundlePermission} objects.
 	 * 
 	 * This method checks that specified bundle has the same bundle symbolic
-	 * name and <code>BundlePermission</code> actions as this
-	 * <code>BundlePermission</code> object.
+	 * name and {@code BundlePermission} actions as this
+	 * {@code BundlePermission} object.
 	 * 
 	 * @param obj The object to test for equality with this
-	 *        <code>BundlePermission</code> object.
-	 * @return <code>true</code> if <code>obj</code> is a
-	 *         <code>BundlePermission</code>, and has the same bundle symbolic
-	 *         name and actions as this <code>BundlePermission</code> object;
-	 *         <code>false</code> otherwise.
+	 *        {@code BundlePermission} object.
+	 * @return {@code true} if {@code obj} is a
+	 *         {@code BundlePermission}, and has the same bundle symbolic
+	 *         name and actions as this {@code BundlePermission} object;
+	 *         {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
@@ -408,7 +410,7 @@ public final class BundlePermission extends BasicPermission {
 
 	/**
 	 * WriteObject is called to save the state of the
-	 * <code>BundlePermission</code> object to a stream. The actions are
+	 * {@code BundlePermission} object to a stream. The actions are
 	 * serialized, and the superclass takes care of the name.
 	 */
 	private synchronized void writeObject(java.io.ObjectOutputStream s)
@@ -433,7 +435,7 @@ public final class BundlePermission extends BasicPermission {
 }
 
 /**
- * Stores a set of <code>BundlePermission</code> permissions.
+ * Stores a set of {@code BundlePermission} permissions.
  * 
  * @see java.security.Permission
  * @see java.security.Permissions
@@ -448,7 +450,7 @@ final class BundlePermissionCollection extends PermissionCollection {
 	 * 
 	 * @GuardedBy this
 	 */
-	private transient Map		permissions;
+	private transient Map<String, BundlePermission>	permissions;
 
 	/**
 	 * Boolean saying if "*" is in the collection.
@@ -463,17 +465,17 @@ final class BundlePermissionCollection extends PermissionCollection {
 	 * 
 	 */
 	public BundlePermissionCollection() {
-		permissions = new HashMap();
+		permissions = new HashMap<String, BundlePermission>();
 		all_allowed = false;
 	}
 
 	/**
 	 * Add a permission to this permission collection.
 	 * 
-	 * @param permission The <code>BundlePermission</code> object to add.
+	 * @param permission The {@code BundlePermission} object to add.
 	 * @throws IllegalArgumentException If the permission is not a
-	 *         <code>BundlePermission</code> instance.
-	 * @throws SecurityException If this <code>BundlePermissionCollection</code>
+	 *         {@code BundlePermission} instance.
+	 * @throws SecurityException If this {@code BundlePermissionCollection}
 	 *         object has been marked read-only.
 	 */
 	public void add(final Permission permission) {
@@ -488,8 +490,8 @@ final class BundlePermissionCollection extends PermissionCollection {
 		final BundlePermission bp = (BundlePermission) permission;
 		final String name = bp.getName();
 		synchronized (this) {
-			Map pc = permissions;
-			BundlePermission existing = (BundlePermission) pc.get(name);
+			Map<String, BundlePermission> pc = permissions;
+			BundlePermission existing = pc.get(name);
 			if (existing != null) {
 				final int oldMask = existing.getActionsMask();
 				final int newMask = bp.getActionsMask();
@@ -512,12 +514,12 @@ final class BundlePermissionCollection extends PermissionCollection {
 
 	/**
 	 * Determines if the specified permissions implies the permissions expressed
-	 * in <code>permission</code>.
+	 * in {@code permission}.
 	 * 
 	 * @param permission The Permission object to compare with this
-	 *        <code>BundlePermission</code> object.
-	 * @return <code>true</code> if <code>permission</code> is a proper subset
-	 *         of a permission in the set; <code>false</code> otherwise.
+	 *        {@code BundlePermission} object.
+	 * @return {@code true} if {@code permission} is a proper subset
+	 *         of a permission in the set; {@code false} otherwise.
 	 */
 	public boolean implies(final Permission permission) {
 		if (!(permission instanceof BundlePermission)) {
@@ -530,10 +532,10 @@ final class BundlePermissionCollection extends PermissionCollection {
 		BundlePermission bp;
 
 		synchronized (this) {
-			Map pc = permissions;
+			Map<String, BundlePermission> pc = permissions;
 			/* short circuit if the "*" Permission was added */
 			if (all_allowed) {
-				bp = (BundlePermission) pc.get("*");
+				bp = pc.get("*");
 				if (bp != null) {
 					effective |= bp.getActionsMask();
 					if ((effective & desired) == desired) {
@@ -541,7 +543,7 @@ final class BundlePermissionCollection extends PermissionCollection {
 					}
 				}
 			}
-			bp = (BundlePermission) pc.get(requestedName);
+			bp = pc.get(requestedName);
 			// strategy:
 			// Check for full match first. Then work our way up the
 			// name looking for matches on a.b.*
@@ -557,7 +559,7 @@ final class BundlePermissionCollection extends PermissionCollection {
 			int offset = requestedName.length() - 1;
 			while ((last = requestedName.lastIndexOf(".", offset)) != -1) {
 				requestedName = requestedName.substring(0, last + 1) + "*";
-				bp = (BundlePermission) pc.get(requestedName);
+				bp = pc.get(requestedName);
 				if (bp != null) {
 					effective |= bp.getActionsMask();
 					if ((effective & desired) == desired) {
@@ -573,13 +575,14 @@ final class BundlePermissionCollection extends PermissionCollection {
 	}
 
 	/**
-	 * Returns an enumeration of all <code>BundlePermission</code> objects in
+	 * Returns an enumeration of all {@code BundlePermission} objects in
 	 * the container.
 	 * 
-	 * @return Enumeration of all <code>BundlePermission</code> objects.
+	 * @return Enumeration of all {@code BundlePermission} objects.
 	 */
-	public synchronized Enumeration elements() {
-		return Collections.enumeration(permissions.values());
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		return Collections.enumeration(all);
 	}
 	
 	/* serialization logic */
@@ -589,7 +592,8 @@ final class BundlePermissionCollection extends PermissionCollection {
 
 	private synchronized void writeObject(ObjectOutputStream out)
 			throws IOException {
-		Hashtable hashtable = new Hashtable(permissions);
+		Hashtable<String, BundlePermission> hashtable = new Hashtable<String, BundlePermission>(
+				permissions);
 		ObjectOutputStream.PutField pfields = out.putFields();
 		pfields.put("permissions", hashtable);
 		pfields.put("all_allowed", all_allowed);
@@ -599,8 +603,9 @@ final class BundlePermissionCollection extends PermissionCollection {
 	private synchronized void readObject(java.io.ObjectInputStream in)
 			throws IOException, ClassNotFoundException {
 		ObjectInputStream.GetField gfields = in.readFields();
-		Hashtable hashtable = (Hashtable) gfields.get("permissions", null);
-		permissions = new HashMap(hashtable);
+		Hashtable<String, BundlePermission> hashtable = (Hashtable<String, BundlePermission>) gfields
+				.get("permissions", null);
+		permissions = new HashMap<String, BundlePermission>(hashtable);
 		all_allowed = gfields.get("all_allowed", false);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleReference.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleReference.java
index f9c4183..97340f7 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleReference.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/BundleReference.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,15 +21,16 @@ package org.osgi.framework;
  * 
  * @since 1.5
  * @ThreadSafe
- * @version $Revision: 6860 $
+ * @noimplement
+ * @version $Id: e61bd3e020264b04022a430fe09a85ee3aabf1a3 $
  */
 public interface BundleReference {
 	/**
-	 * Returns the <code>Bundle</code> object associated with this
-	 * <code>BundleReference</code>.
+	 * Returns the {@code Bundle} object associated with this
+	 * {@code BundleReference}.
 	 * 
-	 * @return The <code>Bundle</code> object associated with this
-	 *         <code>BundleReference</code>.
+	 * @return The {@code Bundle} object associated with this
+	 *         {@code BundleReference}.
 	 */
 	public Bundle getBundle();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/CapabilityPermission.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/CapabilityPermission.java
new file mode 100644
index 0000000..bcac790
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/CapabilityPermission.java
@@ -0,0 +1,807 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework;
+
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.security.AccessController;
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.PrivilegedAction;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A bundle's authority to provide or require a capability.
+ * <ul>
+ * <li>The {@code provide} action allows a bundle to provide a capability
+ * matching the specified filter.
+ * <li>The {@code require} action allows a bundle to require a capability
+ * matching the specified filter.
+ * </ul>
+ * 
+ * @ThreadSafe
+ * @version $Id: bab1ac06b46613f6cff39b291295d8b3e51d58ce $
+ * @since 1.6
+ */
+
+public final class CapabilityPermission extends BasicPermission {
+	static final long								serialVersionUID	= -7662148639076511574L;
+	/**
+	 * The action string {@code require}.
+	 */
+	public final static String						REQUIRE				= "require";
+	/**
+	 * The action string {@code provide}.
+	 */
+	public final static String						PROVIDE				= "provide";
+
+	private final static int						ACTION_REQUIRE		= 0x00000001;
+	private final static int						ACTION_PROVIDE		= 0x00000002;
+	private final static int						ACTION_ALL			= ACTION_REQUIRE
+																				| ACTION_PROVIDE;
+	final static int								ACTION_NONE			= 0;
+
+	/**
+	 * The actions mask.
+	 */
+	transient int									action_mask;
+
+	/**
+	 * The actions in canonical form.
+	 * 
+	 * @serial
+	 */
+	private volatile String							actions				= null;
+
+	/**
+	 * The attributes of the requested capability. Must be null if not
+	 * constructed with attributes.
+	 */
+	transient final Map<String, Object>				attributes;
+
+	/**
+	 * The bundle of the requested capability. Must be null if not constructed
+	 * with bundle.
+	 */
+	transient final Bundle							bundle;
+
+	/**
+	 * If this CapabilityPermission was constructed with a filter, this holds a
+	 * Filter matching object used to evaluate the filter in implies.
+	 */
+	transient Filter								filter;
+
+	/**
+	 * This map holds the properties of the permission, used to match a filter
+	 * in implies. This is not initialized until necessary, and then cached in
+	 * this object.
+	 */
+	private transient volatile Map<String, Object>	properties;
+
+	/**
+	 * Create a new CapabilityPermission.
+	 * 
+	 * <p>
+	 * The name is specified as a dot-separated string. Wildcards may be used.
+	 * 
+	 * <pre>
+	 * name ::= <namespace> | <namespace ending in ".*"> | *
+	 * </pre>
+	 * 
+	 * Examples:
+	 * 
+	 * <pre>
+	 * com.acme.capability.*
+	 * org.foo.capability
+	 * *
+	 * </pre>
+	 * 
+	 * For the {@code require} action, the name can also be a filter expression.
+	 * The filter gives access to the capability attributes as well as the
+	 * following attributes:
+	 * <ul>
+	 * <li>signer - A Distinguished Name chain used to sign the bundle providing
+	 * the capability. Wildcards in a DN are not matched according to the filter
+	 * string rules, but according to the rules defined for a DN chain.</li>
+	 * <li>location - The location of the bundle providing the capability.</li>
+	 * <li>id - The bundle ID of the bundle providing the capability.</li>
+	 * <li>name - The symbolic name of the bundle providing the capability.</li>
+	 * <li>capability.namespace - The name space of the required capability.</li>
+	 * </ul>
+	 * Since the above attribute names may conflict with attribute names of a
+	 * capability, you can prefix an attribute name with '@' in the filter
+	 * expression to match against the capability attributes and not one of the
+	 * above attributes. Filter attribute names are processed in a case
+	 * sensitive manner.
+	 * 
+	 * <p>
+	 * There are two possible actions: {@code require} and {@code provide}. The
+	 * {@code require} permission allows the owner of this permission to require
+	 * a capability matching the attributes. The {@code provide} permission
+	 * allows the bundle to provide a capability in the specified capability
+	 * name space.
+	 * 
+	 * @param name The capability name space or a filter over the attributes.
+	 * @param actions {@code require},{@code provide} (canonical order)
+	 * @throws IllegalArgumentException If the specified name is a filter
+	 *         expression and either the specified action is not {@code require}
+	 *         or the filter has an invalid syntax.
+	 */
+	public CapabilityPermission(String name, String actions) {
+		this(name, parseActions(actions));
+		if ((this.filter != null)
+				&& ((action_mask & ACTION_ALL) != ACTION_REQUIRE)) {
+			throw new IllegalArgumentException(
+					"invalid action string for filter expression");
+		}
+	}
+
+	/**
+	 * Creates a new requested {@code CapabilityPermission} object to be used by
+	 * code that must perform {@code checkPermission} for the {@code require}
+	 * action. {@code CapabilityPermission} objects created with this
+	 * constructor cannot be added to a {@code CapabilityPermission} permission
+	 * collection.
+	 * 
+	 * @param namespace The requested capability name space.
+	 * @param attributes The requested capability attributes.
+	 * @param providingBundle The bundle providing the requested capability.
+	 * @param actions The action {@code require}.
+	 * @throws IllegalArgumentException If the specified action is not
+	 *         {@code require} or attributes or providingBundle are {@code null}
+	 *         .
+	 */
+	public CapabilityPermission(String namespace, Map<String, ? > attributes,
+			Bundle providingBundle, String actions) {
+		super(namespace);
+		setTransients(namespace, parseActions(actions));
+		if (attributes == null) {
+			throw new IllegalArgumentException("attributes must not be null");
+		}
+		if (providingBundle == null) {
+			throw new IllegalArgumentException("bundle must not be null");
+		}
+		this.attributes = new HashMap<String, Object>(attributes);
+		this.bundle = providingBundle;
+		if ((action_mask & ACTION_ALL) != ACTION_REQUIRE) {
+			throw new IllegalArgumentException("invalid action string");
+		}
+	}
+
+	/**
+	 * Package private constructor used by CapabilityPermissionCollection.
+	 * 
+	 * @param name class name
+	 * @param mask action mask
+	 */
+	CapabilityPermission(String name, int mask) {
+		super(name);
+		setTransients(name, mask);
+		this.attributes = null;
+		this.bundle = null;
+	}
+
+	/**
+	 * Called by constructors and when deserialized.
+	 * 
+	 * @param mask action mask
+	 */
+	private void setTransients(String name, int mask) {
+		if ((mask == ACTION_NONE) || ((mask & ACTION_ALL) != mask)) {
+			throw new IllegalArgumentException("invalid action string");
+		}
+		action_mask = mask;
+		filter = parseFilter(name);
+	}
+
+	/**
+	 * Parse action string into action mask.
+	 * 
+	 * @param actions Action string.
+	 * @return action mask.
+	 */
+	private static int parseActions(String actions) {
+		boolean seencomma = false;
+
+		int mask = ACTION_NONE;
+
+		if (actions == null) {
+			return mask;
+		}
+
+		char[] a = actions.toCharArray();
+
+		int i = a.length - 1;
+		if (i < 0)
+			return mask;
+
+		while (i != -1) {
+			char c;
+
+			// skip whitespace
+			while ((i != -1)
+					&& ((c = a[i]) == ' ' || c == '\r' || c == '\n'
+							|| c == '\f' || c == '\t'))
+				i--;
+
+			// check for the known strings
+			int matchlen;
+
+			if (i >= 6 && (a[i - 6] == 'r' || a[i - 6] == 'R')
+					&& (a[i - 5] == 'e' || a[i - 5] == 'E')
+					&& (a[i - 4] == 'q' || a[i - 4] == 'Q')
+					&& (a[i - 3] == 'u' || a[i - 3] == 'U')
+					&& (a[i - 2] == 'i' || a[i - 2] == 'I')
+					&& (a[i - 1] == 'r' || a[i - 1] == 'R')
+					&& (a[i] == 'e' || a[i] == 'E')) {
+				matchlen = 7;
+				mask |= ACTION_REQUIRE;
+			}
+			else
+				if (i >= 6 && (a[i - 6] == 'p' || a[i - 6] == 'P')
+						&& (a[i - 5] == 'r' || a[i - 5] == 'R')
+						&& (a[i - 4] == 'o' || a[i - 4] == 'O')
+						&& (a[i - 3] == 'v' || a[i - 3] == 'V')
+						&& (a[i - 2] == 'i' || a[i - 2] == 'I')
+						&& (a[i - 1] == 'd' || a[i - 1] == 'D')
+						&& (a[i] == 'e' || a[i] == 'E')) {
+					matchlen = 7;
+					mask |= ACTION_PROVIDE;
+				}
+				else {
+					// parse error
+					throw new IllegalArgumentException("invalid permission: "
+							+ actions);
+				}
+
+			// make sure we didn't just match the tail of a word
+			// like "ackbarfprovide". Also, skip to the comma.
+			seencomma = false;
+			while (i >= matchlen && !seencomma) {
+				switch (a[i - matchlen]) {
+					case ',' :
+						seencomma = true;
+						/* FALLTHROUGH */
+					case ' ' :
+					case '\r' :
+					case '\n' :
+					case '\f' :
+					case '\t' :
+						break;
+					default :
+						throw new IllegalArgumentException(
+								"invalid permission: " + actions);
+				}
+				i--;
+			}
+
+			// point i at the location of the comma minus one (or -1).
+			i -= matchlen;
+		}
+
+		if (seencomma) {
+			throw new IllegalArgumentException("invalid permission: " + actions);
+		}
+
+		return mask;
+	}
+
+	/**
+	 * Parse filter string into a Filter object.
+	 * 
+	 * @param filterString The filter string to parse.
+	 * @return a Filter for this bundle. If the specified filterString is not a
+	 *         filter expression, then {@code null} is returned.
+	 * @throws IllegalArgumentException If the filter syntax is invalid.
+	 */
+	private static Filter parseFilter(String filterString) {
+		filterString = filterString.trim();
+		if (filterString.charAt(0) != '(') {
+			return null;
+		}
+
+		try {
+			return FrameworkUtil.createFilter(filterString);
+		}
+		catch (InvalidSyntaxException e) {
+			IllegalArgumentException iae = new IllegalArgumentException(
+					"invalid filter");
+			iae.initCause(e);
+			throw iae;
+		}
+	}
+
+	/**
+	 * Determines if a {@code CapabilityPermission} object "implies" the
+	 * specified permission.
+	 * 
+	 * @param p The target permission to check.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
+	 */
+	public boolean implies(Permission p) {
+		if (!(p instanceof CapabilityPermission)) {
+			return false;
+		}
+		CapabilityPermission requested = (CapabilityPermission) p;
+		if (bundle != null) {
+			return false;
+		}
+		// if requested permission has a filter, then it is an invalid argument
+		if (requested.filter != null) {
+			return false;
+		}
+		return implies0(requested, ACTION_NONE);
+	}
+
+	/**
+	 * Internal implies method. Used by the implies and the permission
+	 * collection implies methods.
+	 * 
+	 * @param requested The requested CapabilityPermission which has already be
+	 *        validated as a proper argument. The requested CapabilityPermission
+	 *        must not have a filter expression.
+	 * @param effective The effective actions with which to start.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
+	 */
+	boolean implies0(CapabilityPermission requested, int effective) {
+		/* check actions first - much faster */
+		effective |= action_mask;
+		final int desired = requested.action_mask;
+		if ((effective & desired) != desired) {
+			return false;
+		}
+		/* Get filter if any */
+		Filter f = filter;
+		if (f == null) {
+			return super.implies(requested);
+		}
+		return f.matches(requested.getProperties());
+	}
+
+	/**
+	 * Returns the canonical string representation of the actions. Always
+	 * returns present actions in the following order: {@code require},
+	 * {@code provide}.
+	 * 
+	 * @return The canonical string representation of the actions.
+	 */
+	public String getActions() {
+		String result = actions;
+		if (result == null) {
+			StringBuffer sb = new StringBuffer();
+			boolean comma = false;
+
+			int mask = action_mask;
+			if ((mask & ACTION_REQUIRE) == ACTION_REQUIRE) {
+				sb.append(REQUIRE);
+				comma = true;
+			}
+
+			if ((mask & ACTION_PROVIDE) == ACTION_PROVIDE) {
+				if (comma)
+					sb.append(',');
+				sb.append(PROVIDE);
+			}
+
+			actions = result = sb.toString();
+		}
+
+		return result;
+	}
+
+	/**
+	 * Returns a new {@code PermissionCollection} object for storing
+	 * {@code CapabilityPermission} objects.
+	 * 
+	 * @return A new {@code PermissionCollection} object suitable for storing
+	 *         {@code CapabilityPermission} objects.
+	 */
+	public PermissionCollection newPermissionCollection() {
+		return new CapabilityPermissionCollection();
+	}
+
+	/**
+	 * Determines the equality of two CapabilityPermission objects.
+	 * 
+	 * Checks that specified object has the same name and action as this
+	 * {@code CapabilityPermission}.
+	 * 
+	 * @param obj The object to test for equality.
+	 * @return true if obj is a {@code CapabilityPermission}, and has the same
+	 *         name and actions as this {@code CapabilityPermission} object;
+	 *         {@code false} otherwise.
+	 */
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+
+		if (!(obj instanceof CapabilityPermission)) {
+			return false;
+		}
+
+		CapabilityPermission cp = (CapabilityPermission) obj;
+
+		return (action_mask == cp.action_mask)
+				&& getName().equals(cp.getName())
+				&& ((attributes == cp.attributes) || ((attributes != null) && (attributes
+						.equals(cp.attributes))))
+				&& ((bundle == cp.bundle) || ((bundle != null) && bundle
+						.equals(cp.bundle)));
+	}
+
+	/**
+	 * Returns the hash code value for this object.
+	 * 
+	 * @return Hash code value for this object.
+	 */
+	public int hashCode() {
+		int h = 31 * 17 + getName().hashCode();
+		h = 31 * h + getActions().hashCode();
+		if (attributes != null) {
+			h = 31 * h + attributes.hashCode();
+		}
+		if (bundle != null) {
+			h = 31 * h + bundle.hashCode();
+		}
+		return h;
+	}
+
+	/**
+	 * WriteObject is called to save the state of this permission to a stream.
+	 * The actions are serialized, and the superclass takes care of the name.
+	 */
+	private synchronized void writeObject(java.io.ObjectOutputStream s)
+			throws IOException {
+		if (bundle != null) {
+			throw new NotSerializableException("cannot serialize");
+		}
+		// Write out the actions. The superclass takes care of the name
+		// call getActions to make sure actions field is initialized
+		if (actions == null)
+			getActions();
+		s.defaultWriteObject();
+	}
+
+	/**
+	 * readObject is called to restore the state of this permission from a
+	 * stream.
+	 */
+	private synchronized void readObject(java.io.ObjectInputStream s)
+			throws IOException, ClassNotFoundException {
+		// Read in the action, then initialize the rest
+		s.defaultReadObject();
+		setTransients(getName(), parseActions(actions));
+	}
+
+	/**
+	 * Called by {@code <@link CapabilityPermission#implies(Permission)>}. This
+	 * method is only called on a requested permission which cannot have a
+	 * filter set.
+	 * 
+	 * @return a map of properties for this permission.
+	 */
+	private Map<String, Object> getProperties() {
+		Map<String, Object> result = properties;
+		if (result != null) {
+			return result;
+		}
+		final Map<String, Object> props = new HashMap<String, Object>(5);
+		props.put("capability.namespace", getName());
+		if (bundle == null) {
+			return properties = props;
+		}
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
+			public Object run() {
+				props.put("id", new Long(bundle.getBundleId()));
+				props.put("location", bundle.getLocation());
+				String name = bundle.getSymbolicName();
+				if (name != null) {
+					props.put("name", name);
+				}
+				SignerProperty signer = new SignerProperty(bundle);
+				if (signer.isBundleSigned()) {
+					props.put("signer", signer);
+				}
+				return null;
+			}
+		});
+		return properties = new Properties(props, attributes);
+	}
+
+	static private final class Properties extends AbstractMap<String, Object> {
+		private final Map<String, Object>							properties;
+		private final Map<String, Object>							attributes;
+		private transient volatile Set<Map.Entry<String, Object>>	entries;
+
+		Properties(Map<String, Object> properties,
+				Map<String, Object> attributes) {
+			this.properties = properties;
+			this.attributes = attributes;
+			entries = null;
+		}
+
+		public Object get(Object k) {
+			if (!(k instanceof String)) {
+				return null;
+			}
+			String key = (String) k;
+			if (key.charAt(0) == '@') {
+				return attributes.get(key.substring(1));
+			}
+			Object value = properties.get(key);
+			if (value != null) { // fall back to service properties
+				return value;
+			}
+			return attributes.get(key);
+		}
+
+		public Set<Map.Entry<String, Object>> entrySet() {
+			if (entries != null) {
+				return entries;
+			}
+			Set<Map.Entry<String, Object>> all = new HashSet<Map.Entry<String, Object>>(
+					attributes.size() + properties.size());
+			all.addAll(attributes.entrySet());
+			all.addAll(properties.entrySet());
+			return entries = Collections.unmodifiableSet(all);
+		}
+	}
+}
+
+/**
+ * Stores a set of CapabilityPermission permissions.
+ * 
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.security.PermissionCollection
+ */
+final class CapabilityPermissionCollection extends PermissionCollection {
+	static final long							serialVersionUID	= -615322242639008920L;
+
+	/**
+	 * Table of permissions.
+	 * 
+	 * @serial
+	 * @GuardedBy this
+	 */
+	private Map<String, CapabilityPermission>	permissions;
+
+	/**
+	 * Boolean saying if "*" is in the collection.
+	 * 
+	 * @serial
+	 * @GuardedBy this
+	 */
+	private boolean								all_allowed;
+
+	/**
+	 * Table of permissions with filter expressions.
+	 * 
+	 * @serial
+	 * @GuardedBy this
+	 */
+	private Map<String, CapabilityPermission>	filterPermissions;
+
+	/**
+	 * Creates an empty CapabilityPermissionCollection object.
+	 */
+	public CapabilityPermissionCollection() {
+		permissions = new HashMap<String, CapabilityPermission>();
+		all_allowed = false;
+	}
+
+	/**
+	 * Adds a permission to this permission collection.
+	 * 
+	 * @param permission The Permission object to add.
+	 * @throws IllegalArgumentException If the specified permission is not a
+	 *         CapabilityPermission object.
+	 * @throws SecurityException If this {@code CapabilityPermissionCollection}
+	 *         object has been marked read-only.
+	 */
+	public void add(final Permission permission) {
+		if (!(permission instanceof CapabilityPermission)) {
+			throw new IllegalArgumentException("invalid permission: "
+					+ permission);
+		}
+		if (isReadOnly()) {
+			throw new SecurityException("attempt to add a Permission to a "
+					+ "readonly PermissionCollection");
+		}
+
+		final CapabilityPermission cp = (CapabilityPermission) permission;
+		if (cp.bundle != null) {
+			throw new IllegalArgumentException("cannot add to collection: "
+					+ cp);
+		}
+
+		final String name = cp.getName();
+		final Filter f = cp.filter;
+		synchronized (this) {
+			/* select the bucket for the permission */
+			Map<String, CapabilityPermission> pc;
+			if (f != null) {
+				pc = filterPermissions;
+				if (pc == null) {
+					filterPermissions = pc = new HashMap<String, CapabilityPermission>();
+				}
+			}
+			else {
+				pc = permissions;
+			}
+			final CapabilityPermission existing = pc.get(name);
+
+			if (existing != null) {
+				final int oldMask = existing.action_mask;
+				final int newMask = cp.action_mask;
+				if (oldMask != newMask) {
+					pc.put(name, new CapabilityPermission(name, oldMask
+							| newMask));
+				}
+			}
+			else {
+				pc.put(name, cp);
+			}
+
+			if (!all_allowed) {
+				if (name.equals("*")) {
+					all_allowed = true;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Determines if a set of permissions implies the permissions expressed in
+	 * {@code permission}.
+	 * 
+	 * @param permission The Permission object to compare.
+	 * @return {@code true} if {@code permission} is a proper subset of a
+	 *         permission in the set; {@code false} otherwise.
+	 */
+	public boolean implies(final Permission permission) {
+		if (!(permission instanceof CapabilityPermission)) {
+			return false;
+		}
+		final CapabilityPermission requested = (CapabilityPermission) permission;
+		/* if requested permission has a filter, then it is an invalid argument */
+		if (requested.filter != null) {
+			return false;
+		}
+
+		String requestedName = requested.getName();
+		final int desired = requested.action_mask;
+		int effective = CapabilityPermission.ACTION_NONE;
+
+		Collection<CapabilityPermission> perms;
+		synchronized (this) {
+			Map<String, CapabilityPermission> pc = permissions;
+			CapabilityPermission cp;
+			/* short circuit if the "*" Permission was added */
+			if (all_allowed) {
+				cp = pc.get("*");
+				if (cp != null) {
+					effective |= cp.action_mask;
+					if ((effective & desired) == desired) {
+						return true;
+					}
+				}
+			}
+
+			/*
+			 * strategy: Check for full match first. Then work our way up the
+			 * name looking for matches on a.b.*
+			 */
+			cp = pc.get(requestedName);
+			if (cp != null) {
+				/* we have a direct hit! */
+				effective |= cp.action_mask;
+				if ((effective & desired) == desired) {
+					return true;
+				}
+			}
+			/* work our way up the tree... */
+			int last;
+			int offset = requestedName.length() - 1;
+			while ((last = requestedName.lastIndexOf(".", offset)) != -1) {
+				requestedName = requestedName.substring(0, last + 1) + "*";
+				cp = pc.get(requestedName);
+				if (cp != null) {
+					effective |= cp.action_mask;
+					if ((effective & desired) == desired) {
+						return true;
+					}
+				}
+				offset = last - 1;
+			}
+			/*
+			 * we don't have to check for "*" as it was already checked before
+			 * we were called.
+			 */
+			pc = filterPermissions;
+			if (pc == null) {
+				return false;
+			}
+			perms = pc.values();
+		}
+		/* iterate one by one over filteredPermissions */
+		for (CapabilityPermission perm : perms) {
+			if (perm.implies0(requested, effective)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns an enumeration of all the {@code CapabilityPermission} objects in
+	 * the container.
+	 * 
+	 * @return Enumeration of all the CapabilityPermission objects.
+	 */
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		Map<String, CapabilityPermission> pc = filterPermissions;
+		if (pc != null) {
+			all.addAll(pc.values());
+		}
+		return Collections.enumeration(all);
+	}
+
+	/* serialization logic */
+	private static final ObjectStreamField[]	serialPersistentFields	= {
+			new ObjectStreamField("permissions", HashMap.class),
+			new ObjectStreamField("all_allowed", Boolean.TYPE),
+			new ObjectStreamField("filterPermissions", HashMap.class)	};
+
+	private synchronized void writeObject(ObjectOutputStream out)
+			throws IOException {
+		ObjectOutputStream.PutField pfields = out.putFields();
+		pfields.put("permissions", permissions);
+		pfields.put("all_allowed", all_allowed);
+		pfields.put("filterPermissions", filterPermissions);
+		out.writeFields();
+	}
+
+	private synchronized void readObject(java.io.ObjectInputStream in)
+			throws IOException, ClassNotFoundException {
+		ObjectInputStream.GetField gfields = in.readFields();
+		HashMap<String, CapabilityPermission> p = (HashMap<String, CapabilityPermission>) gfields
+				.get("permissions", null);
+		permissions = p;
+		all_allowed = gfields.get("all_allowed", false);
+		HashMap<String, CapabilityPermission> fp = (HashMap<String, CapabilityPermission>) gfields
+				.get("filterPermissions", null);
+		filterPermissions = fp;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Configurable.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Configurable.java
index b30910c..d82da9b 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Configurable.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Configurable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,20 +20,20 @@ package org.osgi.framework;
  * Supports a configuration object.
  * 
  * <p>
- * <code>Configurable</code> is an interface that should be used by a bundle
+ * {@code Configurable} is an interface that should be used by a bundle
  * developer in support of a configurable service. Bundles that need to
  * configure a service may test to determine if the service object is an
- * <code>instanceof Configurable</code>.
+ * {@code instanceof Configurable}.
  * 
  * @deprecated As of 1.2. Please use Configuration Admin service.
- * @version $Revision: 6361 $
+ * @version $Id: 29705c0c238aa456cda1b1a13458079bf1542771 $
  */
 public interface Configurable {
 	/**
 	 * Returns this service's configuration object.
 	 * 
 	 * <p>
-	 * Services implementing <code>Configurable</code> should take care when
+	 * Services implementing {@code Configurable} should take care when
 	 * returning a service configuration object since this object is probably
 	 * sensitive.
 	 * <p>
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Constants.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Constants.java
index 16a10d8..b71a12d 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Constants.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Constants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2011). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,16 +16,19 @@
 
 package org.osgi.framework;
 
+import org.osgi.framework.launch.Framework;
+
 /**
  * Defines standard names for the OSGi environment system properties, service
  * properties, and Manifest header attribute keys.
  * 
  * <p>
- * The values associated with these keys are of type
- * <code>String</code>, unless otherwise indicated.
+ * The values associated with these keys are of type {@code String}, unless
+ * otherwise indicated.
  * 
  * @since 1.1
- * @version $Revision: 6552 $
+ * @noimplement
+ * @version $Id: 517c954ed7d34d2ee762933466f69fa03db7cd37 $
  */
 
 public interface Constants {
@@ -33,7 +36,7 @@ public interface Constants {
 	 * Location identifier of the OSGi <i>system bundle </i>, which is defined
 	 * to be "System Bundle".
 	 */
-	public static final String	SYSTEM_BUNDLE_LOCATION					= "System Bundle";
+	String	SYSTEM_BUNDLE_LOCATION					= "System Bundle";
 
 	/**
 	 * Alias for the symbolic name of the OSGi <i>system bundle </i>. It is
@@ -41,50 +44,50 @@ public interface Constants {
 	 * 
 	 * @since 1.3
 	 */
-	public static final String	SYSTEM_BUNDLE_SYMBOLICNAME				= "system.bundle";
+	String	SYSTEM_BUNDLE_SYMBOLICNAME				= "system.bundle";
 
 	/**
 	 * Manifest header identifying the bundle's category.
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_CATEGORY							= "Bundle-Category";
+	String	BUNDLE_CATEGORY							= "Bundle-Category";
 
 	/**
 	 * Manifest header identifying a list of directories and embedded JAR files,
 	 * which are bundle resources used to extend the bundle's classpath.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_CLASSPATH						= "Bundle-ClassPath";
+	String	BUNDLE_CLASSPATH						= "Bundle-ClassPath";
 
 	/**
 	 * Manifest header identifying the bundle's copyright information.
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_COPYRIGHT						= "Bundle-Copyright";
+	String	BUNDLE_COPYRIGHT						= "Bundle-Copyright";
 
 	/**
 	 * Manifest header containing a brief description of the bundle's
 	 * functionality.
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_DESCRIPTION						= "Bundle-Description";
+	String	BUNDLE_DESCRIPTION						= "Bundle-Description";
 
 	/**
 	 * Manifest header identifying the bundle's name.
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_NAME								= "Bundle-Name";
+	String	BUNDLE_NAME								= "Bundle-Name";
 
 	/**
 	 * Manifest header identifying a number of hardware environments and the
@@ -92,20 +95,20 @@ public interface Constants {
 	 * these environments.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_NATIVECODE						= "Bundle-NativeCode";
+	String	BUNDLE_NATIVECODE						= "Bundle-NativeCode";
 
 	/**
 	 * Manifest header identifying the packages that the bundle offers to the
 	 * Framework for export.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	EXPORT_PACKAGE							= "Export-Package";
+	String	EXPORT_PACKAGE							= "Export-Package";
 
 	/**
 	 * Manifest header identifying the fully qualified class names of the
@@ -113,108 +116,108 @@ public interface Constants {
 	 * only).
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @deprecated As of 1.2.
 	 */
-	public static final String	EXPORT_SERVICE							= "Export-Service";
+	String	EXPORT_SERVICE							= "Export-Service";
 
 	/**
 	 * Manifest header identifying the packages on which the bundle depends.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	IMPORT_PACKAGE							= "Import-Package";
+	String	IMPORT_PACKAGE							= "Import-Package";
 
 	/**
 	 * Manifest header identifying the packages that the bundle may dynamically
 	 * import during execution.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @since 1.2
 	 */
-	public static final String	DYNAMICIMPORT_PACKAGE					= "DynamicImport-Package";
+	String	DYNAMICIMPORT_PACKAGE					= "DynamicImport-Package";
 
 	/**
 	 * Manifest header identifying the fully qualified class names of the
 	 * services that the bundle requires (used for informational purposes only).
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @deprecated As of 1.2.
 	 */
-	public static final String	IMPORT_SERVICE							= "Import-Service";
+	String	IMPORT_SERVICE							= "Import-Service";
 
 	/**
 	 * Manifest header identifying the bundle's vendor.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_VENDOR							= "Bundle-Vendor";
+	String	BUNDLE_VENDOR							= "Bundle-Vendor";
 
 	/**
 	 * Manifest header identifying the bundle's version.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_VERSION							= "Bundle-Version";
+	String	BUNDLE_VERSION							= "Bundle-Version";
 
 	/**
 	 * Manifest header identifying the bundle's documentation URL, from which
 	 * further information about the bundle may be obtained.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_DOCURL							= "Bundle-DocURL";
+	String	BUNDLE_DOCURL							= "Bundle-DocURL";
 
 	/**
 	 * Manifest header identifying the contact address where problems with the
 	 * bundle may be reported; for example, an email address.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_CONTACTADDRESS					= "Bundle-ContactAddress";
+	String	BUNDLE_CONTACTADDRESS					= "Bundle-ContactAddress";
 
 	/**
 	 * Manifest header attribute identifying the bundle's activator class.
 	 * 
 	 * <p>
 	 * If present, this header specifies the name of the bundle resource class
-	 * that implements the <code>BundleActivator</code> interface and whose
-	 * <code>start</code> and <code>stop</code> methods are called by the
-	 * Framework when the bundle is started and stopped, respectively.
+	 * that implements the {@code BundleActivator} interface and whose
+	 * {@code start} and {@code stop} methods are called by the Framework when
+	 * the bundle is started and stopped, respectively.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_ACTIVATOR						= "Bundle-Activator";
+	String	BUNDLE_ACTIVATOR						= "Bundle-Activator";
 
 	/**
 	 * Manifest header identifying the location from which a new bundle version
 	 * is obtained during a bundle update operation.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 */
-	public static final String	BUNDLE_UPDATELOCATION					= "Bundle-UpdateLocation";
+	String	BUNDLE_UPDATELOCATION					= "Bundle-UpdateLocation";
 
 	/**
 	 * Manifest header attribute identifying the version of a package specified
@@ -223,7 +226,7 @@ public interface Constants {
 	 * @deprecated As of 1.3. This has been replaced by
 	 *             {@link #VERSION_ATTRIBUTE}.
 	 */
-	public static final String	PACKAGE_SPECIFICATION_VERSION			= "specification-version";
+	String	PACKAGE_SPECIFICATION_VERSION			= "specification-version";
 
 	/**
 	 * Manifest header attribute identifying the processor required to run
@@ -239,7 +242,7 @@ public interface Constants {
 	 * 
 	 * @see #BUNDLE_NATIVECODE
 	 */
-	public static final String	BUNDLE_NATIVECODE_PROCESSOR				= "processor";
+	String	BUNDLE_NATIVECODE_PROCESSOR				= "processor";
 
 	/**
 	 * Manifest header attribute identifying the operating system required to
@@ -255,7 +258,7 @@ public interface Constants {
 	 * 
 	 * @see #BUNDLE_NATIVECODE
 	 */
-	public static final String	BUNDLE_NATIVECODE_OSNAME				= "osname";
+	String	BUNDLE_NATIVECODE_OSNAME				= "osname";
 
 	/**
 	 * Manifest header attribute identifying the operating system version
@@ -271,7 +274,7 @@ public interface Constants {
 	 * 
 	 * @see #BUNDLE_NATIVECODE
 	 */
-	public static final String	BUNDLE_NATIVECODE_OSVERSION				= "osversion";
+	String	BUNDLE_NATIVECODE_OSVERSION				= "osversion";
 
 	/**
 	 * Manifest header attribute identifying the language in which the native
@@ -287,7 +290,7 @@ public interface Constants {
 	 * 
 	 * @see #BUNDLE_NATIVECODE
 	 */
-	public static final String	BUNDLE_NATIVECODE_LANGUAGE				= "language";
+	String	BUNDLE_NATIVECODE_LANGUAGE				= "language";
 
 	/**
 	 * Manifest header identifying the required execution environment for the
@@ -296,27 +299,28 @@ public interface Constants {
 	 * environments it implements.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @since 1.2
+	 * @deprecated As of 1.6. Replaced by the {@code osgi.ee} capability.
 	 */
-	public static final String	BUNDLE_REQUIREDEXECUTIONENVIRONMENT		= "Bundle-RequiredExecutionEnvironment";
+	String	BUNDLE_REQUIREDEXECUTIONENVIRONMENT		= "Bundle-RequiredExecutionEnvironment";
 
 	/**
 	 * Manifest header identifying the bundle's symbolic name.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @since 1.3
 	 */
-	public final static String	BUNDLE_SYMBOLICNAME						= "Bundle-SymbolicName";
+	String	BUNDLE_SYMBOLICNAME						= "Bundle-SymbolicName";
 
 	/**
 	 * Manifest header directive identifying whether a bundle is a singleton.
-	 * The default value is <code>false</code>.
+	 * The default value is {@code false}.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Bundle-SymbolicName manifest header
@@ -326,14 +330,10 @@ public interface Constants {
 	 *     Bundle-SymbolicName: com.acme.module.test; singleton:=true
 	 * </pre>
 	 * 
-	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
-	 * 
 	 * @see #BUNDLE_SYMBOLICNAME
 	 * @since 1.3
 	 */
-	public final static String	SINGLETON_DIRECTIVE						= "singleton";
+	String	SINGLETON_DIRECTIVE						= "singleton";
 
 	/**
 	 * Manifest header directive identifying if and when a fragment may attach
@@ -354,7 +354,7 @@ public interface Constants {
 	 * @see #FRAGMENT_ATTACHMENT_NEVER
 	 * @since 1.3
 	 */
-	public final static String	FRAGMENT_ATTACHMENT_DIRECTIVE			= "fragment-attachment";
+	String	FRAGMENT_ATTACHMENT_DIRECTIVE			= "fragment-attachment";
 
 	/**
 	 * Manifest header directive value identifying a fragment attachment type of
@@ -373,7 +373,7 @@ public interface Constants {
 	 * @see #FRAGMENT_ATTACHMENT_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	FRAGMENT_ATTACHMENT_ALWAYS				= "always";
+	String	FRAGMENT_ATTACHMENT_ALWAYS				= "always";
 
 	/**
 	 * Manifest header directive value identifying a fragment attachment type of
@@ -392,7 +392,7 @@ public interface Constants {
 	 * @see #FRAGMENT_ATTACHMENT_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	FRAGMENT_ATTACHMENT_RESOLVETIME			= "resolve-time";
+	String	FRAGMENT_ATTACHMENT_RESOLVETIME			= "resolve-time";
 
 	/**
 	 * Manifest header directive value identifying a fragment attachment type of
@@ -410,46 +410,45 @@ public interface Constants {
 	 * @see #FRAGMENT_ATTACHMENT_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	FRAGMENT_ATTACHMENT_NEVER				= "never";
+	String	FRAGMENT_ATTACHMENT_NEVER				= "never";
 
 	/**
 	 * Manifest header identifying the base name of the bundle's localization
 	 * entries.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @see #BUNDLE_LOCALIZATION_DEFAULT_BASENAME
 	 * @since 1.3
 	 */
-	public final static String	BUNDLE_LOCALIZATION						= "Bundle-Localization";
+	String	BUNDLE_LOCALIZATION						= "Bundle-Localization";
 
 	/**
-	 * Default value for the <code>Bundle-Localization</code> manifest header.
+	 * Default value for the {@code Bundle-Localization} manifest header.
 	 * 
 	 * @see #BUNDLE_LOCALIZATION
 	 * @since 1.3
 	 */
-	public final static String	BUNDLE_LOCALIZATION_DEFAULT_BASENAME	= "OSGI-INF/l10n/bundle";
+	String	BUNDLE_LOCALIZATION_DEFAULT_BASENAME	= "OSGI-INF/l10n/bundle";
 
 	/**
 	 * Manifest header identifying the symbolic names of other bundles required
 	 * by the bundle.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @since 1.3
 	 */
-	public final static String	REQUIRE_BUNDLE							= "Require-Bundle";
+	String	REQUIRE_BUNDLE							= "Require-Bundle";
 
 	/**
 	 * Manifest header attribute identifying a range of versions for a bundle
-	 * specified in the <code>Require-Bundle</code> or
-	 * <code>Fragment-Host</code> manifest headers. The default value is
-	 * <code>0.0.0</code>.
+	 * specified in the {@code Require-Bundle} or {@code Fragment-Host} manifest
+	 * headers. The default value is {@code 0.0.0}.
 	 * 
 	 * <p>
 	 * The attribute value is encoded in the Require-Bundle manifest header
@@ -469,19 +468,19 @@ public interface Constants {
 	 * @see #REQUIRE_BUNDLE
 	 * @since 1.3
 	 */
-	public static final String	BUNDLE_VERSION_ATTRIBUTE				= "bundle-version";
+	String	BUNDLE_VERSION_ATTRIBUTE				= "bundle-version";
 
 	/**
 	 * Manifest header identifying the symbolic name of another bundle for which
 	 * that the bundle is a fragment.
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @since 1.3
 	 */
-	public final static String	FRAGMENT_HOST							= "Fragment-Host";
+	String	FRAGMENT_HOST							= "Fragment-Host";
 
 	/**
 	 * Manifest header attribute is used for selection by filtering based upon
@@ -497,7 +496,7 @@ public interface Constants {
 	 * @see #BUNDLE_NATIVECODE
 	 * @since 1.3
 	 */
-	public final static String	SELECTION_FILTER_ATTRIBUTE				= "selection-filter";
+	String	SELECTION_FILTER_ATTRIBUTE				= "selection-filter";
 
 	/**
 	 * Manifest header identifying the bundle manifest version. A bundle
@@ -509,12 +508,12 @@ public interface Constants {
 	 * specifically, by version 1.3 of the OSGi Core Specification is "2".
 	 * 
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @since 1.3
 	 */
-	public final static String	BUNDLE_MANIFESTVERSION					= "Bundle-ManifestVersion";
+	String	BUNDLE_MANIFESTVERSION					= "Bundle-ManifestVersion";
 
 	/**
 	 * Manifest header attribute identifying the version of a package specified
@@ -525,14 +524,14 @@ public interface Constants {
 	 * manifest header like:
 	 * 
 	 * <pre>
-	 *     Import-Package: org.osgi.framework; version="1.1"
+	 *     Export-Package: org.osgi.framework; version="1.1"
 	 * </pre>
 	 * 
 	 * @see #EXPORT_PACKAGE
 	 * @see #IMPORT_PACKAGE
 	 * @since 1.3
 	 */
-	public final static String	VERSION_ATTRIBUTE						= "version";
+	String	VERSION_ATTRIBUTE						= "version";
 
 	/**
 	 * Manifest header attribute identifying the symbolic name of a bundle that
@@ -549,88 +548,96 @@ public interface Constants {
 	 * @see #IMPORT_PACKAGE
 	 * @since 1.3
 	 */
-	public final static String	BUNDLE_SYMBOLICNAME_ATTRIBUTE			= "bundle-symbolic-name";
+	String	BUNDLE_SYMBOLICNAME_ATTRIBUTE			= "bundle-symbolic-name";
 
 	/**
 	 * Manifest header directive identifying the resolution type in the
-	 * Import-Package or Require-Bundle manifest header. The default value is
-	 * {@link #RESOLUTION_MANDATORY mandatory}.
+	 * Import-Package, Require-Bundle or Require-Capability manifest header. The
+	 * default value is {@link #RESOLUTION_MANDATORY mandatory}.
 	 * 
 	 * <p>
-	 * The directive value is encoded in the Import-Package or Require-Bundle
-	 * manifest header like:
+	 * The directive value is encoded in the Import-Package, Require-Bundle or
+	 * Require-Capability manifest header like:
 	 * 
 	 * <pre>
 	 *     Import-Package: org.osgi.framework; resolution:="optional"
 	 *     Require-Bundle: com.acme.module.test; resolution:="optional"
+	 *     Require-Capability: com.acme.capability; resolution:="optional"
 	 * </pre>
 	 * 
 	 * @see #IMPORT_PACKAGE
 	 * @see #REQUIRE_BUNDLE
+	 * @see #REQUIRE_CAPABILITY
 	 * @see #RESOLUTION_MANDATORY
 	 * @see #RESOLUTION_OPTIONAL
 	 * @since 1.3
 	 */
-	public final static String	RESOLUTION_DIRECTIVE					= "resolution";
+	String	RESOLUTION_DIRECTIVE					= "resolution";
 
 	/**
 	 * Manifest header directive value identifying a mandatory resolution type.
-	 * A mandatory resolution type indicates that the import package or require
-	 * bundle must be resolved when the bundle is resolved. If such an import or
-	 * require bundle cannot be resolved, the module fails to resolve.
+	 * A mandatory resolution type indicates that the import package, require
+	 * bundle or require capability must be resolved when the bundle is
+	 * resolved. If such an import, require bundle or require capability cannot
+	 * be resolved, the module fails to resolve.
 	 * 
 	 * <p>
-	 * The directive value is encoded in the Import-Package or Require-Bundle
-	 * manifest header like:
+	 * The directive value is encoded in the Import-Package, Require-Bundle or
+	 * Require-Capability manifest header like:
 	 * 
 	 * <pre>
-	 *     Import-Package: org.osgi.framework; resolution:="manditory"
-	 *     Require-Bundle: com.acme.module.test; resolution:="manditory"
+	 *     Import-Package: org.osgi.framework; resolution:="mandatory"
+	 *     Require-Bundle: com.acme.module.test; resolution:="mandatory"
+	 *     Require-Capability: com.acme.capability; resolution:="mandatory"
 	 * </pre>
 	 * 
 	 * @see #RESOLUTION_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	RESOLUTION_MANDATORY					= "mandatory";
+	String	RESOLUTION_MANDATORY					= "mandatory";
 
 	/**
 	 * Manifest header directive value identifying an optional resolution type.
-	 * An optional resolution type indicates that the import or require bundle
-	 * is optional and the bundle may be resolved without the import or require
-	 * bundle being resolved. If the import or require bundle is not resolved
-	 * when the bundle is resolved, the import or require bundle may not be
-	 * resolved before the bundle is refreshed.
+	 * An optional resolution type indicates that the import, require bundle or
+	 * require capability is optional and the bundle may be resolved without the
+	 * import, require bundle or require capability being resolved. If the
+	 * import, require bundle or require capability is not resolved when the
+	 * bundle is resolved, the import, require bundle or require capability may
+	 * not be resolved until the bundle is refreshed.
 	 * 
 	 * <p>
-	 * The directive value is encoded in the Import-Package or Require-Bundle
-	 * manifest header like:
+	 * The directive value is encoded in the Import-Package, Require-Bundle or
+	 * Require-Capability manifest header like:
 	 * 
 	 * <pre>
 	 *     Import-Package: org.osgi.framework; resolution:="optional"
 	 *     Require-Bundle: com.acme.module.test; resolution:="optional"
+	 *     Require-Capability: com.acme.capability; resolution:="optional"
 	 * </pre>
 	 * 
 	 * @see #RESOLUTION_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	RESOLUTION_OPTIONAL						= "optional";
+	String	RESOLUTION_OPTIONAL						= "optional";
 
 	/**
 	 * Manifest header directive identifying a list of packages that an exported
-	 * package uses.
+	 * package or provided capability uses.
 	 * 
 	 * <p>
-	 * The directive value is encoded in the Export-Package manifest header
-	 * like:
+	 * The directive value is encoded in the Export-Package or
+	 * Provide-Capability manifest header like:
 	 * 
 	 * <pre>
 	 *     Export-Package: org.osgi.util.tracker; uses:="org.osgi.framework"
+	 *     Provide-Capability: com.acme.capability; uses:="com.acme.service"
 	 * </pre>
 	 * 
 	 * @see #EXPORT_PACKAGE
+	 * @see #PROVIDE_CAPABILITY
 	 * @since 1.3
 	 */
-	public final static String	USES_DIRECTIVE							= "uses";
+	String	USES_DIRECTIVE							= "uses";
 
 	/**
 	 * Manifest header directive identifying a list of classes to include in the
@@ -660,7 +667,7 @@ public interface Constants {
 	 * @see #BUNDLE_ACTIVATIONPOLICY
 	 * @since 1.3
 	 */
-	public final static String	INCLUDE_DIRECTIVE						= "include";
+	String	INCLUDE_DIRECTIVE						= "include";
 
 	/**
 	 * Manifest header directive identifying a list of classes to exclude in the
@@ -689,7 +696,7 @@ public interface Constants {
 	 * @see #BUNDLE_ACTIVATIONPOLICY
 	 * @since 1.3
 	 */
-	public final static String	EXCLUDE_DIRECTIVE						= "exclude";
+	String	EXCLUDE_DIRECTIVE						= "exclude";
 
 	/**
 	 * Manifest header directive identifying names of matching attributes which
@@ -707,7 +714,7 @@ public interface Constants {
 	 * @see #EXPORT_PACKAGE
 	 * @since 1.3
 	 */
-	public final static String	MANDATORY_DIRECTIVE						= "mandatory";
+	String	MANDATORY_DIRECTIVE						= "mandatory";
 
 	/**
 	 * Manifest header directive identifying the visibility of a required bundle
@@ -727,7 +734,7 @@ public interface Constants {
 	 * @see #VISIBILITY_REEXPORT
 	 * @since 1.3
 	 */
-	public final static String	VISIBILITY_DIRECTIVE					= "visibility";
+	String	VISIBILITY_DIRECTIVE					= "visibility";
 
 	/**
 	 * Manifest header directive value identifying a private visibility type. A
@@ -746,7 +753,7 @@ public interface Constants {
 	 * @see #VISIBILITY_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	VISIBILITY_PRIVATE						= "private";
+	String	VISIBILITY_PRIVATE						= "private";
 
 	/**
 	 * Manifest header directive value identifying a reexport visibility type. A
@@ -766,7 +773,7 @@ public interface Constants {
 	 * @see #VISIBILITY_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	VISIBILITY_REEXPORT						= "reexport";
+	String	VISIBILITY_REEXPORT						= "reexport";
 
 	/**
 	 * Manifest header directive identifying the type of the extension fragment.
@@ -783,7 +790,7 @@ public interface Constants {
 	 * @see #EXTENSION_BOOTCLASSPATH
 	 * @since 1.3
 	 */
-	public final static String	EXTENSION_DIRECTIVE						= "extension";
+	String	EXTENSION_DIRECTIVE						= "extension";
 
 	/**
 	 * Manifest header directive value identifying the type of extension
@@ -800,7 +807,7 @@ public interface Constants {
 	 * @see #EXTENSION_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	EXTENSION_FRAMEWORK						= "framework";
+	String	EXTENSION_FRAMEWORK						= "framework";
 
 	/**
 	 * Manifest header directive value identifying the type of extension
@@ -817,20 +824,20 @@ public interface Constants {
 	 * @see #EXTENSION_DIRECTIVE
 	 * @since 1.3
 	 */
-	public final static String	EXTENSION_BOOTCLASSPATH					= "bootclasspath";
+	String	EXTENSION_BOOTCLASSPATH					= "bootclasspath";
 
 	/**
 	 * Manifest header identifying the bundle's activation policy.
 	 * <p>
-	 * The attribute value may be retrieved from the <code>Dictionary</code>
-	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
 	 * 
 	 * @since 1.4
 	 * @see #ACTIVATION_LAZY
 	 * @see #INCLUDE_DIRECTIVE
 	 * @see #EXCLUDE_DIRECTIVE
 	 */
-	public final static String	BUNDLE_ACTIVATIONPOLICY					= "Bundle-ActivationPolicy";
+	String	BUNDLE_ACTIVATIONPOLICY					= "Bundle-ActivationPolicy";
 
 	/**
 	 * Bundle activation policy declaring the bundle must be activated when the
@@ -854,16 +861,16 @@ public interface Constants {
 	 * @see Bundle#START_ACTIVATION_POLICY
 	 * @since 1.4
 	 */
-	public final static String	ACTIVATION_LAZY							= "lazy";
+	String	ACTIVATION_LAZY							= "lazy";
 
 	/**
 	 * Framework environment property identifying the Framework version.
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 */
-	public static final String	FRAMEWORK_VERSION						= "org.osgi.framework.version";
+	String	FRAMEWORK_VERSION						= "org.osgi.framework.version";
 
 	/**
 	 * Framework environment property identifying the Framework implementation
@@ -871,79 +878,79 @@ public interface Constants {
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 */
-	public static final String	FRAMEWORK_VENDOR						= "org.osgi.framework.vendor";
+	String	FRAMEWORK_VENDOR						= "org.osgi.framework.vendor";
 
 	/**
-	 * Framework environment property identifying the Framework implementation
+	 * Framework launching property identifying the Framework implementation
 	 * language (see ISO 639 for possible values).
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 */
-	public static final String	FRAMEWORK_LANGUAGE						= "org.osgi.framework.language";
+	String	FRAMEWORK_LANGUAGE						= "org.osgi.framework.language";
 
 	/**
-	 * Framework environment property identifying the Framework host-computer's
+	 * Framework launching property identifying the Framework host-computer's
 	 * operating system.
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 */
-	public static final String	FRAMEWORK_OS_NAME						= "org.osgi.framework.os.name";
+	String	FRAMEWORK_OS_NAME						= "org.osgi.framework.os.name";
 
 	/**
-	 * Framework environment property identifying the Framework host-computer's
+	 * Framework launching property identifying the Framework host-computer's
 	 * operating system version number.
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 */
-	public static final String	FRAMEWORK_OS_VERSION					= "org.osgi.framework.os.version";
+	String	FRAMEWORK_OS_VERSION					= "org.osgi.framework.os.version";
 
 	/**
-	 * Framework environment property identifying the Framework host-computer's
+	 * Framework launching property identifying the Framework host-computer's
 	 * processor name.
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 */
-	public static final String	FRAMEWORK_PROCESSOR						= "org.osgi.framework.processor";
+	String	FRAMEWORK_PROCESSOR						= "org.osgi.framework.processor";
 
 	/**
-	 * Framework environment property identifying execution environments
-	 * provided by the Framework.
+	 * Framework launching property identifying execution environments provided
+	 * by the Framework.
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @since 1.2
+	 * @deprecated As of 1.6. Replaced by the {@code osgi.ee} capability.
 	 */
-	public static final String	FRAMEWORK_EXECUTIONENVIRONMENT			= "org.osgi.framework.executionenvironment";
+	String	FRAMEWORK_EXECUTIONENVIRONMENT			= "org.osgi.framework.executionenvironment";
 
 	/**
-	 * Framework environment property identifying packages for which the
-	 * Framework must delegate class loading to the parent class loader of the
-	 * bundle.
+	 * Framework launching property identifying packages for which the Framework
+	 * must delegate class loading to the parent class loader of the bundle.
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @see #FRAMEWORK_BUNDLE_PARENT
 	 * @since 1.3
 	 */
-	public static final String	FRAMEWORK_BOOTDELEGATION				= "org.osgi.framework.bootdelegation";
+	String	FRAMEWORK_BOOTDELEGATION				= "org.osgi.framework.bootdelegation";
 
 	/**
-	 * Framework environment property identifying packages which the system
-	 * bundle must export.
+	 * Framework launching property identifying packages which the system bundle
+	 * must export.
 	 * 
 	 * <p>
 	 * If this property is not specified then the framework must calculate a
@@ -951,15 +958,15 @@ public interface Constants {
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @since 1.3
 	 */
-	public static final String	FRAMEWORK_SYSTEMPACKAGES				= "org.osgi.framework.system.packages";
+	String	FRAMEWORK_SYSTEMPACKAGES				= "org.osgi.framework.system.packages";
 
 	/**
-	 * Framework environment property identifying extra packages which the
-	 * system bundle must export from the current execution environment.
+	 * Framework launching property identifying extra packages which the system
+	 * bundle must export from the current execution environment.
 	 * 
 	 * <p>
 	 * This property is useful for configuring extra system packages in addition
@@ -967,84 +974,84 @@ public interface Constants {
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @see #FRAMEWORK_SYSTEMPACKAGES
 	 * @since 1.5
 	 */
-	public static final String	FRAMEWORK_SYSTEMPACKAGES_EXTRA			= "org.osgi.framework.system.packages.extra";
+	String	FRAMEWORK_SYSTEMPACKAGES_EXTRA			= "org.osgi.framework.system.packages.extra";
 
 	/**
 	 * Framework environment property identifying whether the Framework supports
 	 * framework extension bundles.
 	 * 
 	 * <p>
-	 * As of version 1.4, the value of this property must be <code>true</code>.
-	 * The Framework must support framework extension bundles.
+	 * As of version 1.4, the value of this property must be {@code true}. The
+	 * Framework must support framework extension bundles.
 	 * 
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @since 1.3
 	 */
-	public static final String	SUPPORTS_FRAMEWORK_EXTENSION			= "org.osgi.supports.framework.extension";
+	String	SUPPORTS_FRAMEWORK_EXTENSION			= "org.osgi.supports.framework.extension";
 
 	/**
 	 * Framework environment property identifying whether the Framework supports
 	 * bootclasspath extension bundles.
 	 * 
 	 * <p>
-	 * If the value of this property is <code>true</code>, then the Framework
+	 * If the value of this property is {@code true}, then the Framework
 	 * supports bootclasspath extension bundles. The default value is
-	 * <code>false</code>.
+	 * {@code false}.
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @since 1.3
 	 */
-	public static final String	SUPPORTS_BOOTCLASSPATH_EXTENSION		= "org.osgi.supports.bootclasspath.extension";
+	String	SUPPORTS_BOOTCLASSPATH_EXTENSION		= "org.osgi.supports.bootclasspath.extension";
 
 	/**
 	 * Framework environment property identifying whether the Framework supports
 	 * fragment bundles.
 	 * 
 	 * <p>
-	 * As of version 1.4, the value of this property must be <code>true</code>.
-	 * The Framework must support fragment bundles.
+	 * As of version 1.4, the value of this property must be {@code true}. The
+	 * Framework must support fragment bundles.
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @since 1.3
 	 */
-	public static final String	SUPPORTS_FRAMEWORK_FRAGMENT				= "org.osgi.supports.framework.fragment";
+	String	SUPPORTS_FRAMEWORK_FRAGMENT				= "org.osgi.supports.framework.fragment";
 
 	/**
 	 * Framework environment property identifying whether the Framework supports
 	 * the {@link #REQUIRE_BUNDLE Require-Bundle} manifest header.
 	 * 
 	 * <p>
-	 * As of version 1.4, the value of this property must be <code>true</code>.
-	 * The Framework must support the <code>Require-Bundle</code> manifest
-	 * header.
+	 * As of version 1.4, the value of this property must be {@code true}. The
+	 * Framework must support the {@code Require-Bundle} manifest header.
 	 * <p>
 	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
+	 * {@code BundleContext.getProperty} method.
 	 * 
 	 * @since 1.3
 	 */
-	public static final String	SUPPORTS_FRAMEWORK_REQUIREBUNDLE		= "org.osgi.supports.framework.requirebundle";
+	String	SUPPORTS_FRAMEWORK_REQUIREBUNDLE		= "org.osgi.supports.framework.requirebundle";
 
 	/**
-	 * Specifies the type of security manager the framework must use. If not
-	 * specified then the framework will not set the VM security manager.
+	 * Framework launching property specifying the type of security manager the
+	 * framework must use. If not specified then the framework will not set the
+	 * VM security manager.
 	 * 
 	 * @see #FRAMEWORK_SECURITY_OSGI
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_SECURITY						= "org.osgi.framework.security";
+	String	FRAMEWORK_SECURITY						= "org.osgi.framework.security";
 
 	/**
 	 * Specifies that a security manager that supports all security aspects of
@@ -1053,39 +1060,40 @@ public interface Constants {
 	 * 
 	 * <p>
 	 * If this value is specified and there is a security manager already
-	 * installed, then a <code>SecurityException</code> must be thrown when the
+	 * installed, then a {@code SecurityException} must be thrown when the
 	 * Framework is initialized.
 	 * 
 	 * @see #FRAMEWORK_SECURITY
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_SECURITY_OSGI					= "osgi";
+	String	FRAMEWORK_SECURITY_OSGI					= "osgi";
 
 	/**
-	 * Specified the persistent storage area used by the framework. The value of
-	 * this property must be a valid file path in the file system to a
-	 * directory. If the specified directory does not exist then the framework
-	 * will create the directory. If the specified path exists but is not a
-	 * directory or if the framework fails to create the storage directory, then
-	 * framework initialization must fail. The framework is free to use this
-	 * directory as it sees fit. This area can not be shared with anything else.
+	 * Framework launching property specifying the persistent storage area used
+	 * by the framework. The value of this property must be a valid file path in
+	 * the file system to a directory. If the specified directory does not exist
+	 * then the framework will create the directory. If the specified path
+	 * exists but is not a directory or if the framework fails to create the
+	 * storage directory, then framework initialization must fail. The framework
+	 * is free to use this directory as it sees fit. This area can not be shared
+	 * with anything else.
 	 * <p>
 	 * If this property is not set, the framework should use a reasonable
 	 * platform default for the persistent storage area.
 	 * 
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_STORAGE						= "org.osgi.framework.storage";
+	String	FRAMEWORK_STORAGE						= "org.osgi.framework.storage";
 
 	/**
-	 * Specifies if and when the persistent storage area for the framework
-	 * should be cleaned. If this property is not set, then the framework
-	 * storage area must not be cleaned.
+	 * Framework launching property specifying if and when the persistent
+	 * storage area for the framework should be cleaned. If this property is not
+	 * set, then the framework storage area must not be cleaned.
 	 * 
 	 * @see #FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_STORAGE_CLEAN					= "org.osgi.framework.storage.clean";
+	String	FRAMEWORK_STORAGE_CLEAN					= "org.osgi.framework.storage.clean";
 
 	/**
 	 * Specifies that the framework storage area must be cleaned before the
@@ -1095,29 +1103,29 @@ public interface Constants {
 	 * 
 	 * @since 1.5
 	 */
-	public final static String  FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT			= "onFirstInit";
+	String	FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT		= "onFirstInit";
 
 	/**
-	 * Specifies a comma separated list of additional library file extensions
-	 * that must be used when a bundle's class loader is searching for native
-	 * libraries. If this property is not set, then only the library name
-	 * returned by <code>System.mapLibraryName(String)</code> will be used to
-	 * search. This is needed for certain operating systems which allow more
-	 * than one extension for a library. For example, AIX allows library
-	 * extensions of <code>.a</code> and <code>.so</code>, but
-	 * <code>System.mapLibraryName(String)</code> will only return names with
-	 * the <code>.a</code> extension.
+	 * Framework launching property specifying a comma separated list of
+	 * additional library file extensions that must be used when a bundle's
+	 * class loader is searching for native libraries. If this property is not
+	 * set, then only the library name returned by
+	 * {@code System.mapLibraryName(String)} will be used to search. This is
+	 * needed for certain operating systems which allow more than one extension
+	 * for a library. For example, AIX allows library extensions of {@code .a}
+	 * and {@code .so}, but {@code System.mapLibraryName(String)} will only
+	 * return names with the {@code .a} extension.
 	 * 
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_LIBRARY_EXTENSIONS			= "org.osgi.framework.library.extensions";
+	String	FRAMEWORK_LIBRARY_EXTENSIONS			= "org.osgi.framework.library.extensions";
 
 	/**
-	 * Specifies an optional OS specific command to set file permissions on
-	 * extracted native code. On some operating systems, it is required that
-	 * native libraries be set to executable. This optional property allows you
-	 * to specify the command. For example, on a UNIX style OS, this property
-	 * could have the following value.
+	 * Framework launching property specifying an optional OS specific command
+	 * to set file permissions on extracted native code. On some operating
+	 * systems, it is required that native libraries be set to executable. This
+	 * optional property allows you to specify the command. For example, on a
+	 * UNIX style OS, this property could have the following value.
 	 * 
 	 * <pre>
 	 * chmod +rx ${abspath}
@@ -1128,16 +1136,24 @@ public interface Constants {
 	 * 
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_EXECPERMISSION				= "org.osgi.framework.command.execpermission";
+	String	FRAMEWORK_EXECPERMISSION				= "org.osgi.framework.command.execpermission";
 
 	/**
-	 * Specifies the trust repositories used by the framework. The value is a
-	 * <code>java.io.File.pathSeparator</code> separated list of valid file
-	 * paths to files that contain key stores of type <code>JKS</code>. The
-	 * framework will use the key stores as trust repositories to authenticate
-	 * certificates of trusted signers. The key stores are only used as
-	 * read-only trust repositories to access public keys. No passwords are
-	 * required to access the key stores' public keys.
+	 * Specified the substitution string for the absolute path of a file.
+	 * 
+	 * @see #FRAMEWORK_EXECPERMISSION
+	 * @since 1.6
+	 */
+	String	FRAMEWORK_COMMAND_ABSPATH				= "abspath";
+
+	/**
+	 * Framework launching property specifying the trust repositories used by
+	 * the framework. The value is a {@code java.io.File.pathSeparator}
+	 * separated list of valid file paths to files that contain key stores of
+	 * type {@code JKS}. The framework will use the key stores as trust
+	 * repositories to authenticate certificates of trusted signers. The key
+	 * stores are only used as read-only trust repositories to access public
+	 * keys. No passwords are required to access the key stores' public keys.
 	 * <p>
 	 * Note that framework implementations are allowed to use other trust
 	 * repositories in addition to the trust repositories specified by this
@@ -1146,27 +1162,29 @@ public interface Constants {
 	 * 
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_TRUST_REPOSITORIES			= "org.osgi.framework.trust.repositories";
+	String	FRAMEWORK_TRUST_REPOSITORIES			= "org.osgi.framework.trust.repositories";
 
 	/**
-	 * Specifies the current windowing system. The framework should provide a
-	 * reasonable default if this is not set.
+	 * Framework launching property specifying the current windowing system. The
+	 * framework should provide a reasonable default if this is not set.
 	 * 
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_WINDOWSYSTEM					= "org.osgi.framework.windowsystem";
+	String	FRAMEWORK_WINDOWSYSTEM					= "org.osgi.framework.windowsystem";
 
 	/**
-	 * Specifies the beginning start level of the framework.
+	 * Framework launching property specifying the beginning start level of the
+	 * framework.
 	 * 
-	 * @see "Core Specification, section 8.2.3."
+	 * @see "Core Specification, Starting the Framework."
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_BEGINNING_STARTLEVEL			= "org.osgi.framework.startlevel.beginning";
+	String	FRAMEWORK_BEGINNING_STARTLEVEL			= "org.osgi.framework.startlevel.beginning";
 
 	/**
-	 * Specifies the parent class loader type for all bundle class loaders.
-	 * Default value is {@link #FRAMEWORK_BUNDLE_PARENT_BOOT boot}.
+	 * Framework launching property specifying the parent class loader type for
+	 * all bundle class loaders. Default value is
+	 * {@link #FRAMEWORK_BUNDLE_PARENT_BOOT boot}.
 	 * 
 	 * @see #FRAMEWORK_BUNDLE_PARENT_BOOT
 	 * @see #FRAMEWORK_BUNDLE_PARENT_EXT
@@ -1174,7 +1192,7 @@ public interface Constants {
 	 * @see #FRAMEWORK_BUNDLE_PARENT_FRAMEWORK
 	 * @since 1.5
 	 */
-	public final static String FRAMEWORK_BUNDLE_PARENT 					= "org.osgi.framework.bundle.parent";
+	String	FRAMEWORK_BUNDLE_PARENT					= "org.osgi.framework.bundle.parent";
 
 	/**
 	 * Specifies to use of the boot class loader as the parent class loader for
@@ -1183,7 +1201,7 @@ public interface Constants {
 	 * @since 1.5
 	 * @see #FRAMEWORK_BUNDLE_PARENT
 	 */
-	public final static String	FRAMEWORK_BUNDLE_PARENT_BOOT			= "boot";
+	String	FRAMEWORK_BUNDLE_PARENT_BOOT			= "boot";
 
 	/**
 	 * Specifies to use the extension class loader as the parent class loader
@@ -1192,48 +1210,48 @@ public interface Constants {
 	 * @since 1.5
 	 * @see #FRAMEWORK_BUNDLE_PARENT
 	 */
-	public final static String	FRAMEWORK_BUNDLE_PARENT_EXT				= "ext";
+	String	FRAMEWORK_BUNDLE_PARENT_EXT				= "ext";
 
 	/**
 	 * Specifies to use the application class loader as the parent class loader
-	 * for all bundle class loaders.  Depending on how the framework is 
-	 * launched, this may refer to the same class loader as 
+	 * for all bundle class loaders. Depending on how the framework is launched,
+	 * this may refer to the same class loader as
 	 * {@link #FRAMEWORK_BUNDLE_PARENT_FRAMEWORK}.
 	 * 
 	 * @since 1.5
 	 * @see #FRAMEWORK_BUNDLE_PARENT
 	 */
-	public final static String	FRAMEWORK_BUNDLE_PARENT_APP				= "app";
+	String	FRAMEWORK_BUNDLE_PARENT_APP				= "app";
 
 	/**
 	 * Specifies to use the framework class loader as the parent class loader
 	 * for all bundle class loaders. The framework class loader is the class
-	 * loader used to load the framework implementation.  Depending on how the 
-	 * framework is launched, this may refer to the same class loader as 
+	 * loader used to load the framework implementation. Depending on how the
+	 * framework is launched, this may refer to the same class loader as
 	 * {@link #FRAMEWORK_BUNDLE_PARENT_APP}.
 	 * 
 	 * @since 1.5
 	 * @see #FRAMEWORK_BUNDLE_PARENT
 	 */
-	public final static String	FRAMEWORK_BUNDLE_PARENT_FRAMEWORK		= "framework";
+	String	FRAMEWORK_BUNDLE_PARENT_FRAMEWORK		= "framework";
 
 	/*
 	 * Service properties.
 	 */
-	
+
 	/**
 	 * Service property identifying all of the class names under which a service
 	 * was registered in the Framework. The value of this property must be of
-	 * type <code>String[]</code>.
+	 * type {@code String[]}.
 	 * 
 	 * <p>
 	 * This property is set by the Framework when a service is registered.
 	 */
-	public static final String	OBJECTCLASS								= "objectClass";
+	String	OBJECTCLASS								= "objectClass";
 
 	/**
 	 * Service property identifying a service's registration number. The value
-	 * of this property must be of type <code>Long</code>.
+	 * of this property must be of type {@code Long}.
 	 * 
 	 * <p>
 	 * The value of this property is assigned by the Framework when a service is
@@ -1241,72 +1259,426 @@ public interface Constants {
 	 * previously assigned values since the Framework was started. These values
 	 * are NOT persistent across restarts of the Framework.
 	 */
-	public static final String	SERVICE_ID								= "service.id";
+	String	SERVICE_ID								= "service.id";
 
 	/**
 	 * Service property identifying a service's persistent identifier.
 	 * 
 	 * <p>
-	 * This property may be supplied in the <code>properties</code>
-	 * <code>Dictionary</code> object passed to the
-	 * <code>BundleContext.registerService</code> method. The value of this
-	 * property must be of type <code>String</code>, <code>String[]</code>, or
-	 * <code>Collection</code> of <code>String</code>.
+	 * This property may be supplied in the {@code properties}
+	 * {@code Dictionary} object passed to the
+	 * {@code BundleContext.registerService} method. The value of this property
+	 * must be of type {@code String}, {@code String[]}, or {@code Collection}
+	 * of {@code String}.
 	 * 
 	 * <p>
 	 * A service's persistent identifier uniquely identifies the service and
 	 * persists across multiple Framework invocations.
 	 * 
 	 * <p>
-	 * By convention, every bundle has its own unique namespace, starting with
+	 * By convention, every bundle has its own unique name space, starting with
 	 * the bundle's identifier (see {@link Bundle#getBundleId}) and followed by
 	 * a dot (.). A bundle may use this as the prefix of the persistent
 	 * identifiers for the services it registers.
 	 */
-	public static final String	SERVICE_PID								= "service.pid";
+	String	SERVICE_PID								= "service.pid";
 
 	/**
 	 * Service property identifying a service's ranking number.
 	 * 
 	 * <p>
-	 * This property may be supplied in the <code>properties
-	 * Dictionary</code> object passed to the
-	 * <code>BundleContext.registerService</code> method. The value of this
-	 * property must be of type <code>Integer</code>.
+	 * This property may be supplied in the {@code properties
+	 * Dictionary} object passed to the {@code BundleContext.registerService}
+	 * method. The value of this property must be of type {@code Integer}.
 	 * 
 	 * <p>
 	 * The service ranking is used by the Framework to determine the <i>natural
-	 * order</i> of services, see {@link ServiceReference#compareTo(Object)},
-	 * and the <i>default</i> service to be returned from a call to the
+	 * order</i> of services, see {@link ServiceReference#compareTo}, and the
+	 * <i>default</i> service to be returned from a call to the
 	 * {@link BundleContext#getServiceReference} method.
 	 * 
 	 * <p>
 	 * The default ranking is zero (0). A service with a ranking of
-	 * <code>Integer.MAX_VALUE</code> is very likely to be returned as the
-	 * default service, whereas a service with a ranking of
-	 * <code>Integer.MIN_VALUE</code> is very unlikely to be returned.
+	 * {@code Integer.MAX_VALUE} is very likely to be returned as the default
+	 * service, whereas a service with a ranking of {@code Integer.MIN_VALUE} is
+	 * very unlikely to be returned.
 	 * 
 	 * <p>
-	 * If the supplied property value is not of type <code>Integer</code>, it is
+	 * If the supplied property value is not of type {@code Integer}, it is
 	 * deemed to have a ranking value of zero.
 	 */
-	public static final String	SERVICE_RANKING							= "service.ranking";
+	String	SERVICE_RANKING							= "service.ranking";
 
 	/**
 	 * Service property identifying a service's vendor.
 	 * 
 	 * <p>
-	 * This property may be supplied in the properties <code>Dictionary</code>
-	 * object passed to the <code>BundleContext.registerService</code> method.
+	 * This property may be supplied in the properties {@code Dictionary} object
+	 * passed to the {@code BundleContext.registerService} method.
 	 */
-	public static final String	SERVICE_VENDOR							= "service.vendor";
+	String	SERVICE_VENDOR							= "service.vendor";
 
 	/**
 	 * Service property identifying a service's description.
 	 * 
 	 * <p>
-	 * This property may be supplied in the properties <code>Dictionary</code>
-	 * object passed to the <code>BundleContext.registerService</code> method.
+	 * This property may be supplied in the properties {@code Dictionary} object
+	 * passed to the {@code BundleContext.registerService} method.
+	 */
+	String	SERVICE_DESCRIPTION						= "service.description";
+
+	/**
+	 * Framework environment property identifying the Framework's universally
+	 * unique identifier (UUID). A UUID represents a 128-bit value. A new UUID
+	 * is generated by the {@link Framework#init()} method each time a framework
+	 * is initialized. The value of this property must conform to the UUID
+	 * string representation specified in <a
+	 * href="http://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a>.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * {@code BundleContext.getProperty} method.
+	 * 
+	 * @since 1.6
+	 */
+	String	FRAMEWORK_UUID							= "org.osgi.framework.uuid";
+
+	/**
+	 * Service property identifying the configuration types supported by a
+	 * distribution provider. Registered by the distribution provider on one of
+	 * its services to indicate the supported configuration types.
+	 * 
+	 * <p>
+	 * The value of this property must be of type {@code String},
+	 * {@code String[]}, or {@code Collection} of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	REMOTE_CONFIGS_SUPPORTED				= "remote.configs.supported";
+
+	/**
+	 * Service property identifying the intents supported by a distribution
+	 * provider. Registered by the distribution provider on one of its services
+	 * to indicate the vocabulary of implemented intents.
+	 * 
+	 * <p>
+	 * The value of this property must be of type {@code String},
+	 * {@code String[]}, or {@code Collection} of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	REMOTE_INTENTS_SUPPORTED				= "remote.intents.supported";
+
+	/**
+	 * Service property identifying the configuration types that should be used
+	 * to export the service. Each configuration type represents the
+	 * configuration parameters for an endpoint. A distribution provider should
+	 * create an endpoint for each configuration type that it supports.
+	 * 
+	 * <p>
+	 * This property may be supplied in the {@code properties}
+	 * {@code Dictionary} object passed to the
+	 * {@code BundleContext.registerService} method. The value of this property
+	 * must be of type {@code String}, {@code String[]}, or {@code Collection}
+	 * of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	SERVICE_EXPORTED_CONFIGS				= "service.exported.configs";
+
+	/**
+	 * Service property identifying the intents that the distribution provider
+	 * must implement to distribute the service. Intents listed in this property
+	 * are reserved for intents that are critical for the code to function
+	 * correctly, for example, ordering of messages. These intents should not be
+	 * configurable.
+	 * 
+	 * <p>
+	 * This property may be supplied in the {@code properties}
+	 * {@code Dictionary} object passed to the
+	 * {@code BundleContext.registerService} method. The value of this property
+	 * must be of type {@code String}, {@code String[]}, or {@code Collection}
+	 * of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	SERVICE_EXPORTED_INTENTS				= "service.exported.intents";
+
+	/**
+	 * Service property identifying the extra intents that the distribution
+	 * provider must implement to distribute the service. This property is
+	 * merged with the {@code service.exported.intents} property before the
+	 * distribution provider interprets the listed intents; it has therefore the
+	 * same semantics but the property should be configurable so the
+	 * administrator can choose the intents based on the topology. Bundles
+	 * should therefore make this property configurable, for example through the
+	 * Configuration Admin service.
+	 * 
+	 * <p>
+	 * This property may be supplied in the {@code properties}
+	 * {@code Dictionary} object passed to the
+	 * {@code BundleContext.registerService} method. The value of this property
+	 * must be of type {@code String}, {@code String[]}, or {@code Collection}
+	 * of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	SERVICE_EXPORTED_INTENTS_EXTRA			= "service.exported.intents.extra";
+
+	/**
+	 * Service property marking the service for export. It defines the
+	 * interfaces under which this service can be exported. This list must be a
+	 * subset of the types under which the service was registered. The single
+	 * value of an asterisk ("*", \u002A) indicates all the
+	 * interface types under which the service was registered excluding the
+	 * non-interface types. It is strongly recommended to only export interface
+	 * types and not concrete classes due to the complexity of creating proxies
+	 * for some type of concrete classes.
+	 * 
+	 * <p>
+	 * This property may be supplied in the {@code properties}
+	 * {@code Dictionary} object passed to the
+	 * {@code BundleContext.registerService} method. The value of this property
+	 * must be of type {@code String}, {@code String[]}, or {@code Collection}
+	 * of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	SERVICE_EXPORTED_INTERFACES				= "service.exported.interfaces";
+
+	/**
+	 * Service property identifying the service as imported. This service
+	 * property must be set by a distribution provider to any value when it
+	 * registers the endpoint proxy as an imported service. A bundle can use
+	 * this property to filter out imported services.
+	 * 
+	 * <p>
+	 * The value of this property may be of any type.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	SERVICE_IMPORTED						= "service.imported";
+
+	/**
+	 * Service property identifying the configuration types used to import the
+	 * service. Any associated properties for this configuration types must be
+	 * properly mapped to the importing system. For example, a URL in these
+	 * properties must point to a valid resource when used in the importing
+	 * framework. If multiple configuration types are listed in this property,
+	 * then they must be synonyms for exactly the same remote endpoint that is
+	 * used to export this service.
+	 * 
+	 * <p>
+	 * The value of this property must be of type {@code String},
+	 * {@code String[]}, or {@code Collection} of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 * @see #SERVICE_EXPORTED_CONFIGS
+	 */
+	String	SERVICE_IMPORTED_CONFIGS				= "service.imported.configs";
+
+	/**
+	 * Service property identifying the intents that this service implement.
+	 * This property has a dual purpose:
+	 * <ul>
+	 * <li>A bundle can use this service property to notify the distribution
+	 * provider that these intents are already implemented by the exported
+	 * service object.</li>
+	 * <li>A distribution provider must use this property to convey the combined
+	 * intents of: the exporting service, the intents that the exporting
+	 * distribution provider adds, and the intents that the importing
+	 * distribution provider adds.</li>
+	 * </ul>
+	 * 
+	 * To export a service, a distribution provider must expand any qualified
+	 * intents. Both the exporting and importing distribution providers must
+	 * recognize all intents before a service can be distributed.
+	 * 
+	 * <p>
+	 * The value of this property must be of type {@code String},
+	 * {@code String[]}, or {@code Collection} of {@code String}.
+	 * 
+	 * @since 1.6
+	 * @see "Remote Services Specification"
+	 */
+	String	SERVICE_INTENTS							= "service.intents";
+
+	/**
+	 * Manifest header identifying the capabilities that the bundle offers to
+	 * provide to other bundles.
+	 * 
+	 * <p>
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
+	 * 
+	 * @since 1.6
+	 */
+	String	PROVIDE_CAPABILITY						= "Provide-Capability";
+
+	/**
+	 * Manifest header identifying the capabilities on which the bundle depends.
+	 * 
+	 * <p>
+	 * The header value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
+	 * 
+	 * @since 1.6
+	 */
+	String	REQUIRE_CAPABILITY						= "Require-Capability";
+
+	/**
+	 * Manifest header directive identifying the effective time of the provided
+	 * capability. The default value is {@link #EFFECTIVE_RESOLVE resolve}.
+	 * 
+	 * <p>
+	 * The directive value is encoded in the Provide-Capability manifest header
+	 * like:
+	 * 
+	 * <pre>
+	 *     Provide-Capability: com.acme.capability; effective:="resolve"
+	 * </pre>
+	 * 
+	 * @see #PROVIDE_CAPABILITY
+	 * @see #EFFECTIVE_RESOLVE
+	 * @see #EFFECTIVE_ACTIVE
+	 * @since 1.6
+	 */
+	String	EFFECTIVE_DIRECTIVE						= "effective";
+
+	/**
+	 * Manifest header directive value identifying a capability that is
+	 * effective at resolve time. Capabilities with an effective time of resolve
+	 * are the only capabilities which are processed by the resolver.
+	 * 
+	 * <p>
+	 * The directive value is encoded in the Provide-Capability manifest header
+	 * like:
+	 * 
+	 * <pre>
+	 *     Provide-Capability: com.acme.capability; effective:="resolve"
+	 * </pre>
+	 * 
+	 * @see #EFFECTIVE_DIRECTIVE
+	 * @since 1.6
+	 */
+	String	EFFECTIVE_RESOLVE						= "resolve";
+
+	/**
+	 * Manifest header directive value identifying a capability that is
+	 * effective at active time. Capabilities with an effective time of active
+	 * are ignored by the resolver.
+	 * 
+	 * <p>
+	 * The directive value is encoded in the Provide-Capability manifest header
+	 * like:
+	 * 
+	 * <pre>
+	 *     Provide-Capability: com.acme.capability; effective:="active"
+	 * </pre>
+	 * 
+	 * @see #EFFECTIVE_DIRECTIVE
+	 * @since 1.6
+	 */
+	String	EFFECTIVE_ACTIVE						= "active";
+
+	/**
+	 * Manifest header directive identifying the capability filter specified in
+	 * the Require-Capability manifest header.
+	 * 
+	 * <p>
+	 * The directive value is encoded in the Require-Capability manifest header
+	 * like:
+	 * 
+	 * <pre>
+	 *     Require-Capability: com.acme.capability; filter:="(someattr=somevalue)"
+	 * </pre>
+	 * 
+	 * @see #REQUIRE_CAPABILITY
+	 * @since 1.6
+	 */
+	String	FILTER_DIRECTIVE						= "filter";
+
+	/**
+	 * Framework launching property identifying capabilities which the system
+	 * bundle must provide.
+	 * 
+	 * <p>
+	 * If this property is not specified then the framework must calculate a
+	 * reasonable default value for the current execution environment.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * {@code BundleContext.getProperty} method.
+	 * 
+	 * @since 1.6
+	 */
+	String	FRAMEWORK_SYSTEMCAPABILITIES			= "org.osgi.framework.system.capabilities";
+
+	/**
+	 * Framework launching property identifying extra capabilities which the
+	 * system bundle must additionally provide.
+	 * 
+	 * <p>
+	 * This property is useful for configuring extra system capabilities in
+	 * addition to the system capabilities calculated by the framework.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * {@code BundleContext.getProperty} method.
+	 * 
+	 * @see #FRAMEWORK_SYSTEMCAPABILITIES
+	 * @since 1.6
+	 */
+	String	FRAMEWORK_SYSTEMCAPABILITIES_EXTRA		= "org.osgi.framework.system.capabilities.extra";
+
+	/**
+	 * Framework launching property specifying whether multiple bundles having
+	 * the same {@link #BUNDLE_SYMBOLICNAME symbolic name} and
+	 * {@link #BUNDLE_VERSION version} may be installed.
+	 * 
+	 * <p>
+	 * Default value is {@link #FRAMEWORK_BSNVERSION_SINGLE single} in this
+	 * release of the specification. This default may change to
+	 * {@link #FRAMEWORK_BSNVERSION_MULTIPLE multiple} in a future specification
+	 * release. Therefore, code must not assume the default behavior is
+	 * {@code single} and should interrogate the value of this property to
+	 * determine the behavior.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * {@code BundleContext.getProperty} method.
+	 * 
+	 * @see #FRAMEWORK_BSNVERSION_MULTIPLE
+	 * @see #FRAMEWORK_BSNVERSION_SINGLE
+	 * @since 1.6
+	 */
+	String	FRAMEWORK_BSNVERSION					= "org.osgi.framework.bsnversion";
+
+	/**
+	 * Specifies the framework will allow multiple bundles to be installed
+	 * having the same symbolic name and version.
+	 * 
+	 * @since 1.6
+	 * @see #FRAMEWORK_BSNVERSION
+	 */
+	String	FRAMEWORK_BSNVERSION_MULTIPLE			= "multiple";
+
+	/**
+	 * Specifies the framework will only allow a single bundle to be installed
+	 * for a given symbolic name and version. It will be an error to install a
+	 * bundle or update a bundle to have the same symbolic name and version as
+	 * another installed bundle.
+	 * 
+	 * @since 1.6
+	 * @see #FRAMEWORK_BSNVERSION
 	 */
-	public static final String	SERVICE_DESCRIPTION						= "service.description"; 
+	String	FRAMEWORK_BSNVERSION_SINGLE				= "single";
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Filter.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Filter.java
index 81c3e5b..a9bb6c3 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Filter.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Filter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,17 +16,16 @@
 package org.osgi.framework;
 
 import java.util.Dictionary;
+import java.util.Map;
 
 /**
- * An RFC 1960-based Filter.
+ * An <a href="http://www.ietf.org/rfc/rfc1960.txt">RFC 1960</a>-based Filter.
  * <p>
- * <code>Filter</code>s can be created by calling
- * {@link BundleContext#createFilter} or {@link FrameworkUtil#createFilter} with
- * a filter string.
+ * {@code Filter}s can be created by calling {@link BundleContext#createFilter}
+ * or {@link FrameworkUtil#createFilter} with a filter string.
  * <p>
- * A <code>Filter</code> can be used numerous times to determine if the match
- * argument matches the filter string that was used to create the
- * <code>Filter</code>.
+ * A {@code Filter} can be used numerous times to determine if the match
+ * argument matches the filter string that was used to create the {@code Filter}.
  * <p>
  * Some examples of LDAP filters are:
  * 
@@ -38,86 +37,100 @@ import java.util.Dictionary;
  * </pre>
  * 
  * @since 1.1
- * @see "Core Specification, section 5.5, for a description of the filter string syntax."
+ * @see "Core Specification, Filters, for a description of the filter string syntax."
  * @ThreadSafe
- * @version $Revision: 6860 $
+ * @noimplement
+ * @version $Id: 4d21267f4b85d1912d73f7e2c049cc968c4237f9 $
  */
 public interface Filter {
 	/**
 	 * Filter using a service's properties.
 	 * <p>
-	 * This <code>Filter</code> is executed using the keys and values of the
-	 * referenced service's properties. The keys are case insensitively matched
-	 * with this <code>Filter</code>.
+	 * This {@code Filter} is executed using the keys and values of the
+	 * referenced service's properties. The keys are looked up in a case
+	 * insensitive manner.
 	 * 
 	 * @param reference The reference to the service whose properties are used
 	 *        in the match.
-	 * @return <code>true</code> if the service's properties match this
-	 *         <code>Filter</code>; <code>false</code> otherwise.
+	 * @return {@code true} if the service's properties match this
+	 *         {@code Filter}; {@code false} otherwise.
 	 */
-	public boolean match(ServiceReference reference);
+	boolean match(ServiceReference< ? > reference);
 
 	/**
-	 * Filter using a <code>Dictionary</code>. This <code>Filter</code> is
-	 * executed using the specified <code>Dictionary</code>'s keys and values.
-	 * The keys are case insensitively matched with this <code>Filter</code>.
+	 * Filter using a {@code Dictionary} with case insensitive key lookup. This
+	 * {@code Filter} is executed using the specified {@code Dictionary}'s keys
+	 * and values. The keys are looked up in a case insensitive manner.
 	 * 
-	 * @param dictionary The <code>Dictionary</code> whose keys are used in the
-	 *        match.
-	 * @return <code>true</code> if the <code>Dictionary</code>'s keys and
-	 *         values match this filter; <code>false</code> otherwise.
-	 * @throws IllegalArgumentException If <code>dictionary</code> contains case
+	 * @param dictionary The {@code Dictionary} whose key/value pairs are used
+	 *        in the match.
+	 * @return {@code true} if the {@code Dictionary}'s values match this
+	 *         filter; {@code false} otherwise.
+	 * @throws IllegalArgumentException If {@code dictionary} contains case
 	 *         variants of the same key name.
 	 */
-	public boolean match(Dictionary dictionary);
+	boolean match(Dictionary<String, ? > dictionary);
 
 	/**
-	 * Returns this <code>Filter</code>'s filter string.
+	 * Returns this {@code Filter}'s filter string.
 	 * <p>
 	 * The filter string is normalized by removing whitespace which does not
 	 * affect the meaning of the filter.
 	 * 
-	 * @return This <code>Filter</code>'s filter string.
+	 * @return This {@code Filter}'s filter string.
 	 */
-	public String toString();
+	String toString();
 
 	/**
-	 * Compares this <code>Filter</code> to another <code>Filter</code>.
+	 * Compares this {@code Filter} to another {@code Filter}.
 	 * 
 	 * <p>
-	 * This method returns the result of calling
-	 * <code>this.toString().equals(obj.toString())</code>.
+	 * This implementation returns the result of calling
+	 * {@code this.toString().equals(obj.toString())}.
 	 * 
-	 * @param obj The object to compare against this <code>Filter</code>.
-	 * @return If the other object is a <code>Filter</code> object, then returns
+	 * @param obj The object to compare against this {@code Filter}.
+	 * @return If the other object is a {@code Filter} object, then returns
 	 *         the result of calling
-	 *         <code>this.toString().equals(obj.toString())</code>;
-	 *         <code>false</code> otherwise.
+	 *         {@code this.toString().equals(obj.toString())};
+	 *         {@code false} otherwise.
 	 */
-	public boolean equals(Object obj);
+	boolean equals(Object obj);
 
 	/**
-	 * Returns the hashCode for this <code>Filter</code>.
+	 * Returns the hashCode for this {@code Filter}.
 	 * 
 	 * <p>
-	 * This method returns the result of calling
-	 * <code>this.toString().hashCode()</code>.
+	 * This implementation returns the result of calling
+	 * {@code this.toString().hashCode()}.
 	 * 
-	 * @return The hashCode of this <code>Filter</code>.
+	 * @return The hashCode of this {@code Filter}.
 	 */
-	public int hashCode();
+	int hashCode();
 
 	/**
-	 * Filter with case sensitivity using a <code>Dictionary</code>. This
-	 * <code>Filter</code> is executed using the specified
-	 * <code>Dictionary</code>'s keys and values. The keys are case sensitively
-	 * matched with this <code>Filter</code>.
+	 * Filter using a {@code Dictionary}. This {@code Filter} is executed using
+	 * the specified {@code Dictionary}'s keys and values. The keys are looked
+	 * up in a normal manner respecting case.
 	 * 
-	 * @param dictionary The <code>Dictionary</code> whose keys are used in the
-	 *        match.
-	 * @return <code>true</code> if the <code>Dictionary</code>'s keys and
-	 *         values match this filter; <code>false</code> otherwise.
+	 * @param dictionary The {@code Dictionary} whose key/value pairs are used
+	 *        in the match.
+	 * @return {@code true} if the {@code Dictionary}'s values match this
+	 *         filter; {@code false} otherwise.
 	 * @since 1.3
 	 */
-	public boolean matchCase(Dictionary dictionary);
+	boolean matchCase(Dictionary<String, ? > dictionary);
+
+	/**
+	 * Filter using a {@code Map}. This {@code Filter} is executed using the
+	 * specified {@code Map}'s keys and values. The keys are looked up in a
+	 * normal manner respecting case.
+	 * 
+	 * @param map The {@code Map} whose key/value pairs are used in the match.
+	 *        Maps with {@code null} key or values are not supported. A
+	 *        {@code null} value is considered not present to the filter.
+	 * @return {@code true} if the {@code Map}'s values match this filter;
+	 *         {@code false} otherwise.
+	 * @since 1.6
+	 */
+	boolean matches(Map<String, ? > map);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkEvent.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkEvent.java
index 747b249..d309699 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkEvent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,12 +18,15 @@ package org.osgi.framework;
 
 import java.util.EventObject;
 
+import org.osgi.framework.startlevel.FrameworkStartLevel;
+import org.osgi.framework.wiring.FrameworkWiring;
+
 /**
  * A general event from the Framework.
  * 
  * <p>
- * <code>FrameworkEvent</code> objects are delivered to
- * <code>FrameworkListener</code>s when a general event occurs within the OSGi
+ * {@code FrameworkEvent} objects are delivered to
+ * {@code FrameworkListener}s when a general event occurs within the OSGi
  * environment. A type code is used to identify the event type for future
  * extendability.
  * 
@@ -32,7 +35,7 @@ import java.util.EventObject;
  * 
  * @Immutable
  * @see FrameworkListener
- * @version $Revision: 6542 $
+ * @version $Id: e05c6ffd542fa432835961882bf6b15b0620ffb6 $
  */
 
 public class FrameworkEvent extends EventObject {
@@ -61,7 +64,7 @@ public class FrameworkEvent extends EventObject {
 	 * has reached the initial start level. The source of this event is the
 	 * System Bundle.
 	 * 
-	 * @see "The Start Level Service"
+	 * @see "The Start Level Specification"
 	 */
 	public final static int	STARTED							= 0x00000001;
 
@@ -74,20 +77,21 @@ public class FrameworkEvent extends EventObject {
 	public final static int	ERROR							= 0x00000002;
 
 	/**
-	 * A PackageAdmin.refreshPackage operation has completed.
+	 * A FrameworkWiring.refreshBundles operation has completed.
 	 * 
 	 * <p>
-	 * This event is fired when the Framework has completed the refresh packages
-	 * operation initiated by a call to the PackageAdmin.refreshPackages method.
-	 * The source of this event is the System Bundle.
+	 * This event is fired when the Framework has completed the refresh bundles
+	 * operation initiated by a call to the FrameworkWiring.refreshBundles
+	 * method. The source of this event is the System Bundle.
 	 * 
 	 * @since 1.2
-	 * @see "<code>PackageAdmin.refreshPackages</code>"
+	 * @see FrameworkWiring#refreshBundles(java.util.Collection,
+	 *      FrameworkListener...)
 	 */
 	public final static int	PACKAGES_REFRESHED				= 0x00000004;
 
 	/**
-	 * A StartLevel.setStartLevel operation has completed.
+	 * A FrameworkStartLevel.setStartLevel operation has completed.
 	 * 
 	 * <p>
 	 * This event is fired when the Framework has completed changing the active
@@ -95,7 +99,7 @@ public class FrameworkEvent extends EventObject {
 	 * The source of this event is the System Bundle.
 	 * 
 	 * @since 1.2
-	 * @see "The Start Level Service"
+	 * @see FrameworkStartLevel#setStartLevel(int, FrameworkListener...)
 	 */
 	public final static int	STARTLEVEL_CHANGED				= 0x00000008;
 
@@ -170,7 +174,7 @@ public class FrameworkEvent extends EventObject {
 	 * Creates a Framework event.
 	 * 
 	 * @param type The event type.
-	 * @param source The event source object. This may not be <code>null</code>.
+	 * @param source The event source object. This may not be {@code null}.
 	 * @deprecated As of 1.2. This constructor is deprecated in favor of using
 	 *             the other constructor with the System Bundle as the event
 	 *             source.
@@ -188,7 +192,7 @@ public class FrameworkEvent extends EventObject {
 	 * @param type The event type.
 	 * @param bundle The event source.
 	 * @param throwable The related exception. This argument may be
-	 *        <code>null</code> if there is no related exception.
+	 *        {@code null} if there is no related exception.
 	 */
 	public FrameworkEvent(int type, Bundle bundle, Throwable throwable) {
 		super(bundle);
@@ -200,7 +204,7 @@ public class FrameworkEvent extends EventObject {
 	/**
 	 * Returns the exception related to this event.
 	 * 
-	 * @return The related exception or <code>null</code> if none.
+	 * @return The related exception or {@code null} if none.
 	 */
 	public Throwable getThrowable() {
 		return throwable;
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkListener.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkListener.java
index c96c490..5d73fb9 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkListener.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,31 +19,31 @@ package org.osgi.framework;
 import java.util.EventListener;
 
 /**
- * A <code>FrameworkEvent</code> listener. <code>FrameworkListener</code> is
+ * A {@code FrameworkEvent} listener. {@code FrameworkListener} is
  * a listener interface that may be implemented by a bundle developer. When a
- * <code>FrameworkEvent</code> is fired, it is asynchronously delivered to a
- * <code>FrameworkListener</code>. The Framework delivers
- * <code>FrameworkEvent</code> objects to a <code>FrameworkListener</code>
- * in order and must not concurrently call a <code>FrameworkListener</code>.
+ * {@code FrameworkEvent} is fired, it is asynchronously delivered to a
+ * {@code FrameworkListener}. The Framework delivers
+ * {@code FrameworkEvent} objects to a {@code FrameworkListener}
+ * in order and must not concurrently call a {@code FrameworkListener}.
  * 
  * <p>
- * A <code>FrameworkListener</code> object is registered with the Framework
+ * A {@code FrameworkListener} object is registered with the Framework
  * using the {@link BundleContext#addFrameworkListener} method.
- * <code>FrameworkListener</code> objects are called with a
- * <code>FrameworkEvent</code> objects when the Framework starts and when
+ * {@code FrameworkListener} objects are called with a
+ * {@code FrameworkEvent} objects when the Framework starts and when
  * asynchronous errors occur.
  * 
  * @see FrameworkEvent
  * @NotThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: a32e7599ea09d3510759d77e824cb8d9eff67f9d $
  */
 
 public interface FrameworkListener extends EventListener {
 
 	/**
-	 * Receives notification of a general <code>FrameworkEvent</code> object.
+	 * Receives notification of a general {@code FrameworkEvent} object.
 	 * 
-	 * @param event The <code>FrameworkEvent</code> object.
+	 * @param event The {@code FrameworkEvent} object.
 	 */
 	public void frameworkEvent(FrameworkEvent event);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkUtil.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkUtil.java
index 0b31ec8..0e89999 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkUtil.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/FrameworkUtil.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,12 +21,15 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import javax.security.auth.x500.X500Principal;
 
@@ -39,7 +42,7 @@ import javax.security.auth.x500.X500Principal;
  * 
  * @since 1.3
  * @ThreadSafe
- * @version $Revision: 8080 $
+ * @version $Id: a902bc156ea997ed244831c7fab0f290a08ac0c1 $
  */
 public class FrameworkUtil {
 	/**
@@ -50,9 +53,9 @@ public class FrameworkUtil {
 	}
 
 	/**
-	 * Creates a <code>Filter</code> object. This <code>Filter</code> object may
-	 * be used to match a <code>ServiceReference</code> object or a
-	 * <code>Dictionary</code> object.
+	 * Creates a {@code Filter} object. This {@code Filter} object may
+	 * be used to match a {@code ServiceReference} object or a
+	 * {@code Dictionary} object.
 	 * 
 	 * <p>
 	 * If the filter cannot be parsed, an {@link InvalidSyntaxException} will be
@@ -64,10 +67,10 @@ public class FrameworkUtil {
 	 * by {@link BundleContext#createFilter(String)}.
 	 * 
 	 * @param filter The filter string.
-	 * @return A <code>Filter</code> object encapsulating the filter string.
-	 * @throws InvalidSyntaxException If <code>filter</code> contains an invalid
+	 * @return A {@code Filter} object encapsulating the filter string.
+	 * @throws InvalidSyntaxException If {@code filter} contains an invalid
 	 *         filter string that cannot be parsed.
-	 * @throws NullPointerException If <code>filter</code> is null.
+	 * @throws NullPointerException If {@code filter} is null.
 	 * 
 	 * @see Filter
 	 */
@@ -102,8 +105,8 @@ public class FrameworkUtil {
 	 * wildcard can also replace the first list of RDNs of a DN. The first RDNs
 	 * are the least significant. Such lists of matched RDNs can be empty.
 	 * <p>
-	 * For example, a match pattern with a wildcard that matches all all DNs
-	 * that end with RDNs of o=ACME and c=US would look like this:
+	 * For example, a match pattern with a wildcard that matches all DNs that
+	 * end with RDNs of o=ACME and c=US would look like this:
 	 * 
 	 * <pre>
 	 * *, o=ACME, c=US
@@ -176,34 +179,36 @@ public class FrameworkUtil {
 	 * 
 	 * @param matchPattern The pattern against which to match the DN chain.
 	 * @param dnChain The DN chain to match against the specified pattern. Each
-	 *        element of the chain must be of type <code>String</code> and use
-	 *        the format defined in RFC 2253.
-	 * @return <code>true</code> If the pattern matches the DN chain; otherwise
-	 *         <code>false</code> is returned.
+	 *        element of the chain must be of type {@code String} and use the
+	 *        format defined in <a
+	 *        href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a>.
+	 * @return {@code true} If the pattern matches the DN chain; otherwise
+	 *         {@code false} is returned.
 	 * @throws IllegalArgumentException If the specified match pattern or DN
 	 *         chain is invalid.
 	 * @since 1.5
 	 */
 	public static boolean matchDistinguishedNameChain(String matchPattern,
-			List /* <String> */dnChain) {
+			List<String> dnChain) {
 		return DNChainMatching.match(matchPattern, dnChain);
 	}
 
 	/**
-	 * Return a <code>Bundle</code> for the specified bundle class. The returned
-	 * <code>Bundle</code> is the bundle associated with the bundle class loader
+	 * Return a {@code Bundle} for the specified bundle class. The returned
+	 * {@code Bundle} is the bundle associated with the bundle class loader
 	 * which defined the specified class.
 	 * 
 	 * @param classFromBundle A class defined by a bundle class loader.
-	 * @return A <code>Bundle</code> for the specified bundle class or
-	 *         <code>null</code> if the specified class was not defined by a
+	 * @return A {@code Bundle} for the specified bundle class or
+	 *         {@code null} if the specified class was not defined by a
 	 *         bundle class loader.
 	 * @since 1.5
 	 */
-	public static Bundle getBundle(final Class classFromBundle) {
+	public static Bundle getBundle(final Class< ? > classFromBundle) {
 		// We use doPriv since the caller may not have permission
 		// to call getClassLoader.
-		Object cl = AccessController.doPrivileged(new PrivilegedAction() {
+		Object cl = AccessController
+				.doPrivileged(new PrivilegedAction<Object>() {
 			public Object run() {
 				return classFromBundle.getClassLoader();
 			}
@@ -256,16 +261,16 @@ public class FrameworkUtil {
 	 *   <final> ::= NULL | <value>
 	 * </pre>
 	 * 
-	 * <code><attr></code> is a string representing an attribute, or key,
+	 * {@code <attr>} is a string representing an attribute, or key,
 	 * in the properties objects of the registered services. Attribute names are
 	 * not case sensitive; that is cn and CN both refer to the same attribute.
-	 * <code><value></code> is a string representing the value, or part of
+	 * {@code <value>} is a string representing the value, or part of
 	 * one, of a key in the properties objects of the registered services. If a
-	 * <code><value></code> must contain one of the characters '
-	 * <code>*</code>' or '<code>(</code>' or '<code>)</code>', these characters
-	 * should be escaped by preceding them with the backslash '<code>\</code>'
-	 * character. Note that although both the <code><substring></code> and
-	 * <code><present></code> productions can produce the <code>'attr=*'</code>
+	 * {@code <value>} must contain one of the characters '
+	 * {@code *}' or '{@code (}' or '{@code )}', these characters
+	 * should be escaped by preceding them with the backslash '{@code \}'
+	 * character. Note that although both the {@code <substring>} and
+	 * {@code <present>} productions can produce the {@code 'attr=*'}
 	 * construct, this construct is used only to denote a presence filter.
 	 * 
 	 * <p>
@@ -279,7 +284,7 @@ public class FrameworkUtil {
 	 * </pre>
 	 * 
 	 * <p>
-	 * The approximate match (<code>~=</code>) is implementation specific but
+	 * The approximate match ({@code ~=}) is implementation specific but
 	 * should at least ignore case and white space differences. Optional are
 	 * codes like soundex or other smart "closeness" comparisons.
 	 * 
@@ -331,33 +336,33 @@ public class FrameworkUtil {
 	 * d.put("cn", new String[] {"a", "b", "c"});
 	 * </pre>
 	 * 
-	 * d will match <code>(cn=a)</code> and also <code>(cn=b)</code>
+	 * d will match {@code (cn=a)} and also {@code (cn=b)}
 	 * 
 	 * <p>
 	 * A filter component that references a key having an unrecognizable data
-	 * type will evaluate to <code>false</code> .
+	 * type will evaluate to {@code false} .
 	 */
-	private static class FilterImpl implements Filter {
+	static private final class FilterImpl implements Filter {
 		/* filter operators */
-		private static final int			EQUAL		= 1;
-		private static final int			APPROX		= 2;
-		private static final int			GREATER		= 3;
-		private static final int			LESS		= 4;
-		private static final int			PRESENT		= 5;
-		private static final int			SUBSTRING	= 6;
-		private static final int			AND			= 7;
-		private static final int			OR			= 8;
-		private static final int			NOT			= 9;
+		private static final int	EQUAL		= 1;
+		private static final int	APPROX		= 2;
+		private static final int	GREATER		= 3;
+		private static final int	LESS		= 4;
+		private static final int	PRESENT		= 5;
+		private static final int	SUBSTRING	= 6;
+		private static final int	AND			= 7;
+		private static final int	OR			= 8;
+		private static final int	NOT			= 9;
 
 		/** filter operation */
-		private final int					op;
+		private final int			op;
 		/** filter attribute or null if operation AND, OR or NOT */
-		private final String				attr;
+		private final String		attr;
 		/** filter operands */
-		private final Object				value;
+		private final Object		value;
 
 		/* normalized filter string for Filter object */
-		private transient volatile String	filterString;
+		private transient String	filterString;
 
 		/**
 		 * Constructs a {@link FilterImpl} object. This filter object may be
@@ -369,7 +374,7 @@ public class FrameworkUtil {
 		 * unparsable.
 		 * 
 		 * @param filterString the filter string.
-		 * @exception InvalidSyntaxException If the filter parameter contains an
+		 * @throws InvalidSyntaxException If the filter parameter contains an
 		 *            invalid filter string that cannot be parsed.
 		 */
 		static FilterImpl newInstance(String filterString)
@@ -381,82 +386,182 @@ public class FrameworkUtil {
 			this.op = operation;
 			this.attr = attr;
 			this.value = value;
+			filterString = null;
 		}
 
 		/**
 		 * Filter using a service's properties.
 		 * <p>
-		 * This <code>Filter</code> is executed using the keys and values of the
-		 * referenced service's properties. The keys are case insensitively
-		 * matched with this <code>Filter</code>.
+		 * This {@code Filter} is executed using the keys and values of the
+		 * referenced service's properties. The keys are looked up in a case
+		 * insensitive manner.
 		 * 
 		 * @param reference The reference to the service whose properties are
 		 *        used in the match.
-		 * @return <code>true</code> if the service's properties match this
-		 *         <code>Filter</code>; <code>false</code> otherwise.
+		 * @return {@code true} if the service's properties match this
+		 *         {@code Filter}; {@code false} otherwise.
 		 */
-		public boolean match(ServiceReference reference) {
-			return match0(new ServiceReferenceDictionary(reference));
+		public boolean match(ServiceReference< ? > reference) {
+			return matches(new ServiceReferenceMap(reference));
 		}
 
 		/**
-		 * Filter using a <code>Dictionary</code>. This <code>Filter</code> is
-		 * executed using the specified <code>Dictionary</code>'s keys and
-		 * values. The keys are case insensitively matched with this
-		 * <code>Filter</code>.
+		 * Filter using a {@code Dictionary} with case insensitive key lookup.
+		 * This {@code Filter} is executed using the specified
+		 * {@code Dictionary}'s keys and values. The keys are looked up in a
+		 * case insensitive manner.
 		 * 
-		 * @param dictionary The <code>Dictionary</code> whose keys are used in
-		 *        the match.
-		 * @return <code>true</code> if the <code>Dictionary</code>'s keys and
-		 *         values match this filter; <code>false</code> otherwise.
-		 * @throws IllegalArgumentException If <code>dictionary</code> contains
-		 *         case variants of the same key name.
+		 * @param dictionary The {@code Dictionary} whose key/value pairs are
+		 *        used in the match.
+		 * @return {@code true} if the {@code Dictionary}'s values match this
+		 *         filter; {@code false} otherwise.
+		 * @throws IllegalArgumentException If {@code dictionary} contains case
+		 *         variants of the same key name.
 		 */
-		public boolean match(Dictionary dictionary) {
-			return match0(new CaseInsensitiveDictionary(dictionary));
+		public boolean match(Dictionary<String, ? > dictionary) {
+			return matches(new CaseInsensitiveMap(dictionary));
 		}
 
 		/**
-		 * Filter with case sensitivity using a <code>Dictionary</code>. This
-		 * <code>Filter</code> is executed using the specified
-		 * <code>Dictionary</code>'s keys and values. The keys are case
-		 * sensitively matched with this <code>Filter</code>.
+		 * Filter using a {@code Dictionary}. This {@code Filter} is executed
+		 * using the specified {@code Dictionary}'s keys and values. The keys
+		 * are looked up in a normal manner respecting case.
 		 * 
-		 * @param dictionary The <code>Dictionary</code> whose keys are used in
-		 *        the match.
-		 * @return <code>true</code> if the <code>Dictionary</code>'s keys and
-		 *         values match this filter; <code>false</code> otherwise.
+		 * @param dictionary The {@code Dictionary} whose key/value pairs are
+		 *        used in the match.
+		 * @return {@code true} if the {@code Dictionary}'s values match this
+		 *         filter; {@code false} otherwise.
 		 * @since 1.3
 		 */
-		public boolean matchCase(Dictionary dictionary) {
-			return match0(dictionary);
+		public boolean matchCase(Dictionary<String, ? > dictionary) {
+			switch (op) {
+				case AND : {
+					FilterImpl[] filters = (FilterImpl[]) value;
+					for (FilterImpl f : filters) {
+						if (!f.matchCase(dictionary)) {
+							return false;
+						}
+					}
+					return true;
+				}
+
+				case OR : {
+					FilterImpl[] filters = (FilterImpl[]) value;
+					for (FilterImpl f : filters) {
+						if (f.matchCase(dictionary)) {
+							return true;
+						}
+					}
+					return false;
+				}
+
+				case NOT : {
+					FilterImpl filter = (FilterImpl) value;
+					return !filter.matchCase(dictionary);
+				}
+
+				case SUBSTRING :
+				case EQUAL :
+				case GREATER :
+				case LESS :
+				case APPROX : {
+					Object prop = (dictionary == null) ? null : dictionary
+							.get(attr);
+					return compare(op, prop, value);
+				}
+
+				case PRESENT : {
+					Object prop = (dictionary == null) ? null : dictionary
+							.get(attr);
+					return prop != null;
+				}
+			}
+
+			return false;
 		}
 
 		/**
-		 * Returns this <code>Filter</code>'s filter string.
+		 * Filter using a {@code Map}. This {@code Filter} is executed using the
+		 * specified {@code Map}'s keys and values. The keys are looked up in a
+		 * normal manner respecting case.
+		 * 
+		 * @param map The {@code Map} whose key/value pairs are used in the
+		 *        match. Maps with {@code null} key or values are not supported.
+		 *        A {@code null} value is considered not present to the filter.
+		 * @return {@code true} if the {@code Map}'s values match this filter;
+		 *         {@code false} otherwise.
+		 * @since 1.6
+		 */
+		public boolean matches(Map<String, ? > map) {
+			switch (op) {
+				case AND : {
+					FilterImpl[] filters = (FilterImpl[]) value;
+					for (FilterImpl f : filters) {
+						if (!f.matches(map)) {
+							return false;
+						}
+					}
+					return true;
+				}
+		
+				case OR : {
+					FilterImpl[] filters = (FilterImpl[]) value;
+					for (FilterImpl f : filters) {
+						if (f.matches(map)) {
+							return true;
+						}
+					}
+					return false;
+				}
+		
+				case NOT : {
+					FilterImpl filter = (FilterImpl) value;
+					return !filter.matches(map);
+				}
+		
+				case SUBSTRING :
+				case EQUAL :
+				case GREATER :
+				case LESS :
+				case APPROX : {
+					Object prop = (map == null) ? null : map.get(attr);
+					return compare(op, prop, value);
+				}
+		
+				case PRESENT : {
+					Object prop = (map == null) ? null : map.get(attr);
+					return prop != null;
+				}
+			}
+		
+			return false;
+		}
+
+		/**
+		 * Returns this {@code Filter}'s filter string.
 		 * <p>
 		 * The filter string is normalized by removing whitespace which does not
 		 * affect the meaning of the filter.
 		 * 
-		 * @return This <code>Filter</code>'s filter string.
+		 * @return This {@code Filter}'s filter string.
 		 */
 		public String toString() {
 			String result = filterString;
 			if (result == null) {
-				filterString = result = normalize();
+				filterString = result = normalize().toString();
 			}
 			return result;
 		}
 
 		/**
-		 * Returns this <code>Filter</code>'s normalized filter string.
+		 * Returns this {@code Filter}'s normalized filter string.
 		 * <p>
 		 * The filter string is normalized by removing whitespace which does not
 		 * affect the meaning of the filter.
 		 * 
-		 * @return This <code>Filter</code>'s filter string.
+		 * @return This {@code Filter}'s filter string.
 		 */
-		private String normalize() {
+		private StringBuffer normalize() {
 			StringBuffer sb = new StringBuffer();
 			sb.append('(');
 
@@ -465,8 +570,8 @@ public class FrameworkUtil {
 					sb.append('&');
 
 					FilterImpl[] filters = (FilterImpl[]) value;
-					for (int i = 0, size = filters.length; i < size; i++) {
-						sb.append(filters[i].normalize());
+					for (FilterImpl f : filters) {
+						sb.append(f.normalize());
 					}
 
 					break;
@@ -476,8 +581,8 @@ public class FrameworkUtil {
 					sb.append('|');
 
 					FilterImpl[] filters = (FilterImpl[]) value;
-					for (int i = 0, size = filters.length; i < size; i++) {
-						sb.append(filters[i].normalize());
+					for (FilterImpl f : filters) {
+						sb.append(f.normalize());
 					}
 
 					break;
@@ -497,9 +602,7 @@ public class FrameworkUtil {
 
 					String[] substrings = (String[]) value;
 
-					for (int i = 0, size = substrings.length; i < size; i++) {
-						String substr = substrings[i];
-
+					for (String substr : substrings) {
 						if (substr == null) /* * */{
 							sb.append('*');
 						}
@@ -549,21 +652,21 @@ public class FrameworkUtil {
 
 			sb.append(')');
 
-			return sb.toString();
+			return sb;
 		}
 
 		/**
-		 * Compares this <code>Filter</code> to another <code>Filter</code>.
+		 * Compares this {@code Filter} to another {@code Filter}.
 		 * 
 		 * <p>
 		 * This implementation returns the result of calling
-		 * <code>this.toString().equals(obj.toString()</code>.
+		 * {@code this.toString().equals(obj.toString()}.
 		 * 
-		 * @param obj The object to compare against this <code>Filter</code>.
-		 * @return If the other object is a <code>Filter</code> object, then
+		 * @param obj The object to compare against this {@code Filter}.
+		 * @return If the other object is a {@code Filter} object, then
 		 *         returns the result of calling
-		 *         <code>this.toString().equals(obj.toString()</code>;
-		 *         <code>false</code> otherwise.
+		 *         {@code this.toString().equals(obj.toString()};
+		 *         {@code false} otherwise.
 		 */
 		public boolean equals(Object obj) {
 			if (obj == this) {
@@ -578,79 +681,19 @@ public class FrameworkUtil {
 		}
 
 		/**
-		 * Returns the hashCode for this <code>Filter</code>.
+		 * Returns the hashCode for this {@code Filter}.
 		 * 
 		 * <p>
 		 * This implementation returns the result of calling
-		 * <code>this.toString().hashCode()</code>.
+		 * {@code this.toString().hashCode()}.
 		 * 
-		 * @return The hashCode of this <code>Filter</code>.
+		 * @return The hashCode of this {@code Filter}.
 		 */
 		public int hashCode() {
 			return this.toString().hashCode();
 		}
 
 		/**
-		 * Internal match routine. Dictionary parameter must support
-		 * case-insensitive get.
-		 * 
-		 * @param properties A dictionary whose keys are used in the match.
-		 * @return If the Dictionary's keys match the filter, return
-		 *         <code>true</code>. Otherwise, return <code>false</code>.
-		 */
-		private boolean match0(Dictionary properties) {
-			switch (op) {
-				case AND : {
-					FilterImpl[] filters = (FilterImpl[]) value;
-					for (int i = 0, size = filters.length; i < size; i++) {
-						if (!filters[i].match0(properties)) {
-							return false;
-						}
-					}
-
-					return true;
-				}
-
-				case OR : {
-					FilterImpl[] filters = (FilterImpl[]) value;
-					for (int i = 0, size = filters.length; i < size; i++) {
-						if (filters[i].match0(properties)) {
-							return true;
-						}
-					}
-
-					return false;
-				}
-
-				case NOT : {
-					FilterImpl filter = (FilterImpl) value;
-
-					return !filter.match0(properties);
-				}
-
-				case SUBSTRING :
-				case EQUAL :
-				case GREATER :
-				case LESS :
-				case APPROX : {
-					Object prop = (properties == null) ? null : properties
-							.get(attr);
-
-					return compare(op, prop, value);
-				}
-
-				case PRESENT : {
-					Object prop = (properties == null) ? null : properties
-							.get(attr);
-
-					return prop != null;
-				}
-			}
-
-			return false;
-		}
-
-		/**
 		 * Encode the value string such that '(', '*', ')' and '\' are escaped.
 		 * 
 		 * @param value unencoded value string.
@@ -696,17 +739,17 @@ public class FrameworkUtil {
 				return compare_String(operation, (String) value1, value2);
 			}
 
-			Class clazz = value1.getClass();
+			Class< ? > clazz = value1.getClass();
 			if (clazz.isArray()) {
-				Class type = clazz.getComponentType();
+				Class< ? > type = clazz.getComponentType();
 				if (type.isPrimitive()) {
 					return compare_PrimitiveArray(operation, type, value1,
 							value2);
 				}
 				return compare_ObjectArray(operation, (Object[]) value1, value2);
 			}
-			if (value1 instanceof Collection) {
-				return compare_Collection(operation, (Collection) value1,
+			if (value1 instanceof Collection< ? >) {
+				return compare_Collection(operation, (Collection< ? >) value1,
 						value2);
 			}
 			if (value1 instanceof Integer) {
@@ -741,17 +784,17 @@ public class FrameworkUtil {
 				return compare_Boolean(operation, ((Boolean) value1)
 						.booleanValue(), value2);
 			}
-			if (value1 instanceof Comparable) {
-				return compare_Comparable(operation, (Comparable) value1,
-						value2);
+			if (value1 instanceof Comparable< ? >) {
+				Comparable<Object> comparable = (Comparable<Object>) value1;
+				return compare_Comparable(operation, comparable, value2);
 			}
-			return compare_Unknown(operation, value1, value2); // RFC 59
+			return compare_Unknown(operation, value1, value2);
 		}
 
 		private boolean compare_Collection(int operation,
-				Collection collection, Object value2) {
-			for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
-				if (compare(operation, iterator.next(), value2)) {
+				Collection< ? > collection, Object value2) {
+			for (Object value1 : collection) {
+				if (compare(operation, value1, value2)) {
 					return true;
 				}
 			}
@@ -760,20 +803,20 @@ public class FrameworkUtil {
 
 		private boolean compare_ObjectArray(int operation, Object[] array,
 				Object value2) {
-			for (int i = 0, size = array.length; i < size; i++) {
-				if (compare(operation, array[i], value2)) {
+			for (Object value1 : array) {
+				if (compare(operation, value1, value2)) {
 					return true;
 				}
 			}
 			return false;
 		}
 
-		private boolean compare_PrimitiveArray(int operation, Class type,
+		private boolean compare_PrimitiveArray(int operation, Class< ? > type,
 				Object primarray, Object value2) {
 			if (Integer.TYPE.isAssignableFrom(type)) {
 				int[] array = (int[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Integer(operation, array[i], value2)) {
+				for (int value1 : array) {
+					if (compare_Integer(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -781,8 +824,8 @@ public class FrameworkUtil {
 			}
 			if (Long.TYPE.isAssignableFrom(type)) {
 				long[] array = (long[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Long(operation, array[i], value2)) {
+				for (long value1 : array) {
+					if (compare_Long(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -790,8 +833,8 @@ public class FrameworkUtil {
 			}
 			if (Byte.TYPE.isAssignableFrom(type)) {
 				byte[] array = (byte[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Byte(operation, array[i], value2)) {
+				for (byte value1 : array) {
+					if (compare_Byte(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -799,8 +842,8 @@ public class FrameworkUtil {
 			}
 			if (Short.TYPE.isAssignableFrom(type)) {
 				short[] array = (short[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Short(operation, array[i], value2)) {
+				for (short value1 : array) {
+					if (compare_Short(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -808,8 +851,8 @@ public class FrameworkUtil {
 			}
 			if (Character.TYPE.isAssignableFrom(type)) {
 				char[] array = (char[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Character(operation, array[i], value2)) {
+				for (char value1 : array) {
+					if (compare_Character(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -817,8 +860,8 @@ public class FrameworkUtil {
 			}
 			if (Float.TYPE.isAssignableFrom(type)) {
 				float[] array = (float[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Float(operation, array[i], value2)) {
+				for (float value1 : array) {
+					if (compare_Float(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -826,8 +869,8 @@ public class FrameworkUtil {
 			}
 			if (Double.TYPE.isAssignableFrom(type)) {
 				double[] array = (double[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Double(operation, array[i], value2)) {
+				for (double value1 : array) {
+					if (compare_Double(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -835,8 +878,8 @@ public class FrameworkUtil {
 			}
 			if (Boolean.TYPE.isAssignableFrom(type)) {
 				boolean[] array = (boolean[]) primarray;
-				for (int i = 0, size = array.length; i < size; i++) {
-					if (compare_Boolean(operation, array[i], value2)) {
+				for (boolean value1 : array) {
+					if (compare_Boolean(operation, value1, value2)) {
 						return true;
 					}
 				}
@@ -1131,14 +1174,14 @@ public class FrameworkUtil {
 			return false;
 		}
 
-		private static final Class[]	constructorType	= new Class[] {String.class};
+		private static final Class< ? >[]	constructorType	= new Class[] {String.class};
 
-		private boolean compare_Comparable(int operation, Comparable value1,
-				Object value2) {
+		private boolean compare_Comparable(int operation,
+				Comparable<Object> value1, Object value2) {
 			if (operation == SUBSTRING) {
 				return false;
 			}
-			Constructor constructor;
+			Constructor< ? > constructor;
 			try {
 				constructor = value1.getClass().getConstructor(constructorType);
 			}
@@ -1162,18 +1205,24 @@ public class FrameworkUtil {
 				return false;
 			}
 
-			switch (operation) {
-				case APPROX :
-				case EQUAL : {
-					return value1.compareTo(value2) == 0;
-				}
-				case GREATER : {
-					return value1.compareTo(value2) >= 0;
-				}
-				case LESS : {
-					return value1.compareTo(value2) <= 0;
+			try {
+				switch (operation) {
+					case APPROX :
+					case EQUAL : {
+						return value1.compareTo(value2) == 0;
+					}
+					case GREATER : {
+						return value1.compareTo(value2) >= 0;
+					}
+					case LESS : {
+						return value1.compareTo(value2) <= 0;
+					}
 				}
 			}
+			catch (Exception e) {
+				// if the compareTo method throws an exception; return false
+				return false;
+			}
 			return false;
 		}
 
@@ -1182,7 +1231,7 @@ public class FrameworkUtil {
 			if (operation == SUBSTRING) {
 				return false;
 			}
-			Constructor constructor;
+			Constructor< ? > constructor;
 			try {
 				constructor = value1.getClass().getConstructor(constructorType);
 			}
@@ -1206,14 +1255,20 @@ public class FrameworkUtil {
 				return false;
 			}
 
-			switch (operation) {
-				case APPROX :
-				case EQUAL :
-				case GREATER :
-				case LESS : {
-					return value1.equals(value2);
+			try {
+				switch (operation) {
+					case APPROX :
+					case EQUAL :
+					case GREATER :
+					case LESS : {
+						return value1.equals(value2);
+					}
 				}
 			}
+			catch (Exception e) {
+				// if the equals method throws an exception; return false
+				return false;
+			}
 			return false;
 		}
 
@@ -1230,9 +1285,7 @@ public class FrameworkUtil {
 			boolean changed = false;
 			char[] output = input.toCharArray();
 			int cursor = 0;
-			for (int i = 0, length = output.length; i < length; i++) {
-				char c = output[i];
-
+			for (char c : output) {
 				if (Character.isWhitespace(c)) {
 					changed = true;
 					continue;
@@ -1250,7 +1303,7 @@ public class FrameworkUtil {
 		 * filter string and builds a tree of Filter objects rooted at the
 		 * parent.
 		 */
-		private static class Parser {
+		static private final class Parser {
 			private final String	filterstring;
 			private final char[]	filterChars;
 			private int				pos;
@@ -1268,7 +1321,7 @@ public class FrameworkUtil {
 				}
 				catch (ArrayIndexOutOfBoundsException e) {
 					throw new InvalidSyntaxException("Filter ended abruptly",
-							filterstring);
+							filterstring, e);
 				}
 
 				if (pos != filterChars.length) {
@@ -1337,7 +1390,7 @@ public class FrameworkUtil {
 					return parse_item();
 				}
 
-				List operands = new ArrayList(10);
+				List<FilterImpl> operands = new ArrayList<FilterImpl>(10);
 
 				while (filterChars[pos] == '(') {
 					FilterImpl child = parse_filter();
@@ -1357,7 +1410,7 @@ public class FrameworkUtil {
 					return parse_item();
 				}
 
-				List operands = new ArrayList(10);
+				List<FilterImpl> operands = new ArrayList<FilterImpl>(10);
 
 				while (filterChars[pos] == '(') {
 					FilterImpl child = parse_filter();
@@ -1510,7 +1563,7 @@ public class FrameworkUtil {
 			private Object parse_substring() throws InvalidSyntaxException {
 				StringBuffer sb = new StringBuffer(filterChars.length - pos);
 
-				List operands = new ArrayList(10);
+				List<String> operands = new ArrayList<String>(10);
 
 				parseloop: while (true) {
 					char c = filterChars[pos];
@@ -1583,49 +1636,50 @@ public class FrameworkUtil {
 	}
 
 	/**
-	 * This Dictionary is used for case-insensitive key lookup during filter
-	 * evaluation. This Dictionary implementation only supports the get
-	 * operation using a String key as no other operations are used by the
-	 * Filter implementation.
+	 * This Map is used for case-insensitive key lookup during filter
+	 * evaluation. This Map implementation only supports the get operation using
+	 * a String key as no other operations are used by the Filter
+	 * implementation.
 	 */
-	private static class CaseInsensitiveDictionary extends Dictionary {
-		private final Dictionary	dictionary;
+	static private final class CaseInsensitiveMap extends
+			AbstractMap<String, Object>
+			implements Map<String, Object> {
+		private final Dictionary<String, ? >	dictionary;
 		private final String[]		keys;
 
 		/**
-		 * Create a case insensitive dictionary from the specified dictionary.
+		 * Create a case insensitive map from the specified dictionary.
 		 * 
 		 * @param dictionary
-		 * @throws IllegalArgumentException If <code>dictionary</code> contains
-		 *         case variants of the same key name.
+		 * @throws IllegalArgumentException If {@code dictionary} contains case
+		 *         variants of the same key name.
 		 */
-		CaseInsensitiveDictionary(Dictionary dictionary) {
+		CaseInsensitiveMap(Dictionary<String, ? > dictionary) {
 			if (dictionary == null) {
 				this.dictionary = null;
 				this.keys = new String[0];
 				return;
 			}
 			this.dictionary = dictionary;
-			List keyList = new ArrayList(dictionary.size());
-			for (Enumeration e = dictionary.keys(); e.hasMoreElements();) {
+			List<String> keyList = new ArrayList<String>(dictionary.size());
+			for (Enumeration<?> e = dictionary.keys(); e.hasMoreElements();) {
 				Object k = e.nextElement();
 				if (k instanceof String) {
 					String key = (String) k;
-					for (Iterator i = keyList.iterator(); i.hasNext();) {
-						if (key.equalsIgnoreCase((String) i.next())) {
+					for (String i : keyList) {
+						if (key.equalsIgnoreCase(i)) {
 							throw new IllegalArgumentException();
 						}
 					}
 					keyList.add(key);
 				}
 			}
-			this.keys = (String[]) keyList.toArray(new String[keyList.size()]);
+			this.keys = keyList.toArray(new String[keyList.size()]);
 		}
 
 		public Object get(Object o) {
 			String k = (String) o;
-			for (int i = 0, length = keys.length; i < length; i++) {
-				String key = keys[i];
+			for (String key : keys) {
 				if (key.equalsIgnoreCase(k)) {
 					return dictionary.get(key);
 				}
@@ -1633,41 +1687,22 @@ public class FrameworkUtil {
 			return null;
 		}
 
-		public boolean isEmpty() {
-			throw new UnsupportedOperationException();
-		}
-
-		public Enumeration keys() {
-			throw new UnsupportedOperationException();
-		}
-
-		public Enumeration elements() {
-			throw new UnsupportedOperationException();
-		}
-
-		public Object put(Object key, Object value) {
-			throw new UnsupportedOperationException();
-		}
-
-		public Object remove(Object key) {
-			throw new UnsupportedOperationException();
-		}
-
-		public int size() {
+		public Set<java.util.Map.Entry<String, Object>> entrySet() {
 			throw new UnsupportedOperationException();
 		}
 	}
 
 	/**
-	 * This Dictionary is used for key lookup from a ServiceReference during
-	 * filter evaluation. This Dictionary implementation only supports the get
-	 * operation using a String key as no other operations are used by the
-	 * Filter implementation.
+	 * This Map is used for key lookup from a ServiceReference during filter
+	 * evaluation. This Map implementation only supports the get operation using
+	 * a String key as no other operations are used by the Filter
+	 * implementation.
 	 */
-	private static class ServiceReferenceDictionary extends Dictionary {
-		private final ServiceReference	reference;
+	static private final class ServiceReferenceMap extends
+			AbstractMap<String, Object> implements Map<String, Object> {
+		private final ServiceReference< ? >	reference;
 
-		ServiceReferenceDictionary(ServiceReference reference) {
+		ServiceReferenceMap(ServiceReference< ? > reference) {
 			this.reference = reference;
 		}
 
@@ -1678,32 +1713,13 @@ public class FrameworkUtil {
 			return reference.getProperty((String) key);
 		}
 
-		public boolean isEmpty() {
-			throw new UnsupportedOperationException();
-		}
-
-		public Enumeration keys() {
-			throw new UnsupportedOperationException();
-		}
-
-		public Enumeration elements() {
-			throw new UnsupportedOperationException();
-		}
-
-		public Object put(Object key, Object value) {
-			throw new UnsupportedOperationException();
-		}
-
-		public Object remove(Object key) {
-			throw new UnsupportedOperationException();
-		}
-
-		public int size() {
+		public Set<java.util.Map.Entry<String, Object>> entrySet() {
 			throw new UnsupportedOperationException();
 		}
 	}
 
-	private static class SetAccessibleAction implements PrivilegedAction {
+	static private final class SetAccessibleAction implements
+			PrivilegedAction<Object> {
 		private final AccessibleObject	accessible;
 
 		SetAccessibleAction(AccessibleObject accessible) {
@@ -1730,12 +1746,12 @@ public class FrameworkUtil {
 	 *   cn=ben+ou=research,o=ACME,c=us;ou=Super CA,c=CA
 	 * </pre>
 	 * 
-	 * is made up of two DNs: "<code>cn=ben+ou=research,o=ACME,c=us</code>
-	 * " and " <code>ou=Super CA,c=CA</code>
+	 * is made up of two DNs: "{@code cn=ben+ou=research,o=ACME,c=us}
+	 * " and " {@code ou=Super CA,c=CA}
 	 * ". The first DN is made of of three RDNs: "
-	 * <code>cn=ben+ou=research</code>" and "<code>o=ACME</code>" and "
-	 * <code>c=us</code>". The first RDN has two name value pairs: "
-	 * <code>cn=ben</code>" and "<code>ou=research</code>".
+	 * {@code cn=ben+ou=research}" and "{@code o=ACME}" and "
+	 * {@code c=us}". The first RDN has two name value pairs: "
+	 * {@code cn=ben}" and "{@code ou=research}".
 	 * <p>
 	 * A chain pattern makes use of wildcards ('*' or '-') to match against DNs,
 	 * and wildcards ('*') to match againts DN prefixes, and value. If a DN in a
@@ -1747,7 +1763,7 @@ public class FrameworkUtil {
 	 * removed). If a value of a name/value pair is a wildcard ("*"), the value
 	 * will match any value for that name.
 	 */
-	private static class DNChainMatching {
+	static private final class DNChainMatching {
 		private static final String	MINUS_WILDCARD	= "-";
 		private static final String	STAR_WILDCARD	= "*";
 
@@ -1758,7 +1774,7 @@ public class FrameworkUtil {
 		 * @param rdnPattern List of name value pattern pairs.
 		 * @return true if the list of name value pairs match the pattern.
 		 */
-		private static boolean rdnmatch(List rdn, List rdnPattern) {
+		private static boolean rdnmatch(List< ? > rdn, List< ? > rdnPattern) {
 			if (rdn.size() != rdnPattern.size()) {
 				return false;
 			}
@@ -1782,7 +1798,7 @@ public class FrameworkUtil {
 			return true;
 		}
 
-		private static boolean dnmatch(List dn, List dnPattern) {
+		private static boolean dnmatch(List< ? > dn, List< ? > dnPattern) {
 			int dnStart = 0;
 			int patStart = 0;
 			int patLen = dnPattern.size();
@@ -1809,7 +1825,8 @@ public class FrameworkUtil {
 				}
 			}
 			for (int i = 0; i < patLen; i++) {
-				if (!rdnmatch((List) dn.get(i + dnStart), (List) dnPattern
+				if (!rdnmatch((List< ? >) dn.get(i + dnStart),
+						(List< ? >) dnPattern
 						.get(i + patStart))) {
 					return false;
 				}
@@ -1830,12 +1847,12 @@ public class FrameworkUtil {
 		 * @return a list of DNs.
 		 * @throws IllegalArgumentException
 		 */
-		private static List parseDNchainPattern(String dnChain) {
+		private static List<Object> parseDNchainPattern(String dnChain) {
 			if (dnChain == null) {
 				throw new IllegalArgumentException(
 						"The DN chain must not be null.");
 			}
-			List parsed = new ArrayList();
+			List<Object> parsed = new ArrayList<Object>();
 			int startIndex = 0;
 			startIndex = skipSpaces(dnChain, startIndex);
 			while (startIndex < dnChain.length()) {
@@ -1863,22 +1880,15 @@ public class FrameworkUtil {
 				startIndex = endIndex + 1;
 				startIndex = skipSpaces(dnChain, startIndex);
 			}
-			return parseDNchain(parsed);
-		}
 
-		private static List parseDNchain(List chain) {
-			if (chain == null) {
-				throw new IllegalArgumentException("DN chain must not be null.");
-			}
-			chain = new ArrayList(chain);
 			// Now we parse is a list of strings, lets make List of rdn out
 			// of them
-			for (int i = 0; i < chain.size(); i++) {
-				String dn = (String) chain.get(i);
+			for (int i = 0; i < parsed.size(); i++) {
+				String dn = (String) parsed.get(i);
 				if (dn.equals(STAR_WILDCARD) || dn.equals(MINUS_WILDCARD)) {
 					continue;
 				}
-				List rdns = new ArrayList();
+				List<Object> rdns = new ArrayList<Object>();
 				if (dn.charAt(0) == '*') {
 					if (dn.charAt(1) != ',') {
 						throw new IllegalArgumentException(
@@ -1893,12 +1903,32 @@ public class FrameworkUtil {
 				}
 				// Now dn is a nice CANONICAL DN
 				parseDN(dn, rdns);
-				chain.set(i, rdns);
+				parsed.set(i, rdns);
+			}
+			if (parsed.size() == 0) {
+				throw new IllegalArgumentException("empty DN chain");
+			}
+			return parsed;
+		}
+
+		private static List<Object> parseDNchain(List<String> chain) {
+			if (chain == null) {
+				throw new IllegalArgumentException("DN chain must not be null.");
+			}
+			List<Object> result = new ArrayList<Object>(chain.size());
+			// Now we parse is a list of strings, lets make List of rdn out
+			// of them
+			for (String dn : chain) {
+				dn = new X500Principal(dn).getName(X500Principal.CANONICAL);
+				// Now dn is a nice CANONICAL DN
+				List<Object> rdns = new ArrayList<Object>();
+				parseDN(dn, rdns);
+				result.add(rdns);
 			}
-			if (chain.size() == 0) {
+			if (result.size() == 0) {
 				throw new IllegalArgumentException("empty DN chain");
 			}
-			return chain;
+			return result;
 		}
 
 		/**
@@ -1921,10 +1951,10 @@ public class FrameworkUtil {
 		 * @param rdn the list to fill in with RDNs extracted from the dn
 		 * @throws IllegalArgumentException if a formatting error is found.
 		 */
-		private static void parseDN(String dn, List rdn) {
+		private static void parseDN(String dn, List<Object> rdn) {
 			int startIndex = 0;
 			char c = '\0';
-			List nameValues = new ArrayList();
+			List<String> nameValues = new ArrayList<String>();
 			while (startIndex < dn.length()) {
 				int endIndex;
 				for (endIndex = startIndex; endIndex < dn.length(); endIndex++) {
@@ -1944,7 +1974,7 @@ public class FrameworkUtil {
 				if (c != '+') {
 					rdn.add(nameValues);
 					if (endIndex != dn.length()) {
-						nameValues = new ArrayList();
+						nameValues = new ArrayList<String>();
 					}
 					else {
 						nameValues = null;
@@ -1962,7 +1992,7 @@ public class FrameworkUtil {
 		 * This method will return an 'index' which points to a non-wildcard DN
 		 * or the end-of-list.
 		 */
-		private static int skipWildCards(List dnChainPattern,
+		private static int skipWildCards(List<Object> dnChainPattern,
 				int dnChainPatternIndex) {
 			int i;
 			for (i = dnChainPatternIndex; i < dnChainPattern.size(); i++) {
@@ -1976,7 +2006,7 @@ public class FrameworkUtil {
 					// otherwise continue skipping over wild cards
 				}
 				else {
-					if (dnPattern instanceof List) {
+					if (dnPattern instanceof List< ? >) {
 						// if its a list then we have our 'non-wildcard' DN
 						break;
 					}
@@ -1997,8 +2027,9 @@ public class FrameworkUtil {
 		 * where DNChain is of the format: "DN;DN;DN;" and DNChainPattern is of
 		 * the format: "DNPattern;*;DNPattern" (or combinations of this)
 		 */
-		private static boolean dnChainMatch(List dnChain, int dnChainIndex,
-				List dnChainPattern, int dnChainPatternIndex)
+		private static boolean dnChainMatch(List<Object> dnChain,
+				int dnChainIndex, List<Object> dnChainPattern,
+				int dnChainPatternIndex)
 				throws IllegalArgumentException {
 			if (dnChainIndex >= dnChain.size()) {
 				return false;
@@ -2052,12 +2083,12 @@ public class FrameworkUtil {
 				// failure
 			}
 			else {
-				if (dnPattern instanceof List) {
+				if (dnPattern instanceof List< ? >) {
 					// here we have to do a deeper check for each DN in the
 					// pattern until we hit a wild card
 					do {
-						if (!dnmatch((List) dnChain.get(dnChainIndex),
-								(List) dnPattern)) {
+						if (!dnmatch((List< ? >) dnChain.get(dnChainIndex),
+								(List< ? >) dnPattern)) {
 							return false;
 						}
 						// go to the next set of DN's in both chains
@@ -2099,7 +2130,7 @@ public class FrameworkUtil {
 									dnChainPattern, dnChainPatternIndex);
 						}
 						else {
-							if (!(dnPattern instanceof List)) {
+							if (!(dnPattern instanceof List< ? >)) {
 								throw new IllegalArgumentException(
 										"expected String or List in DN Pattern");
 							}
@@ -2152,9 +2183,9 @@ public class FrameworkUtil {
 		 * @return true if dnChain matches the pattern.
 		 * @throws IllegalArgumentException
 		 */
-		static boolean match(String pattern, List/* <String> */dnChain) {
-			List parsedDNChain;
-			List parsedDNPattern;
+		static boolean match(String pattern, List<String> dnChain) {
+			List<Object> parsedDNChain;
+			List<Object> parsedDNPattern;
 			try {
 				parsedDNChain = parseDNchain(dnChain);
 			}
@@ -2176,12 +2207,12 @@ public class FrameworkUtil {
 			return dnChainMatch(parsedDNChain, 0, parsedDNPattern, 0);
 		}
 
-		private static String toString(List dnChain) {
+		private static String toString(List< ? > dnChain) {
 			if (dnChain == null) {
 				return null;
 			}
 			StringBuffer sb = new StringBuffer();
-			for (Iterator iChain = dnChain.iterator(); iChain.hasNext();) {
+			for (Iterator< ? > iChain = dnChain.iterator(); iChain.hasNext();) {
 				sb.append(iChain.next());
 				if (iChain.hasNext()) {
 					sb.append("; ");
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/InvalidSyntaxException.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/InvalidSyntaxException.java
index f67fd43..46d6d20 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/InvalidSyntaxException.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/InvalidSyntaxException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,14 +21,14 @@ package org.osgi.framework;
  * syntax.
  * 
  * <p>
- * An <code>InvalidSyntaxException</code> object indicates that a filter
+ * An {@code InvalidSyntaxException} object indicates that a filter
  * string parameter has an invalid syntax and cannot be parsed. See
  * {@link Filter} for a description of the filter string syntax.
  * 
  * <p>
  * This exception conforms to the general purpose exception chaining mechanism.
  * 
- * @version $Revision: 6083 $
+ * @version $Id: adb84e3bc0b82b842e4da84542057fdf53e2ca6a $
  */
 
 public class InvalidSyntaxException extends Exception {
@@ -39,10 +39,10 @@ public class InvalidSyntaxException extends Exception {
 	private final String	filter;
 
 	/**
-	 * Creates an exception of type <code>InvalidSyntaxException</code>.
+	 * Creates an exception of type {@code InvalidSyntaxException}.
 	 * 
 	 * <p>
-	 * This method creates an <code>InvalidSyntaxException</code> object with
+	 * This method creates an {@code InvalidSyntaxException} object with
 	 * the specified message and the filter string which generated the
 	 * exception.
 	 * 
@@ -55,10 +55,10 @@ public class InvalidSyntaxException extends Exception {
 	}
 
 	/**
-	 * Creates an exception of type <code>InvalidSyntaxException</code>.
+	 * Creates an exception of type {@code InvalidSyntaxException}.
 	 * 
 	 * <p>
-	 * This method creates an <code>InvalidSyntaxException</code> object with
+	 * This method creates an {@code InvalidSyntaxException} object with
 	 * the specified message and the filter string which generated the
 	 * exception.
 	 * 
@@ -74,7 +74,7 @@ public class InvalidSyntaxException extends Exception {
 
 	/**
 	 * Returns the filter string that generated the
-	 * <code>InvalidSyntaxException</code> object.
+	 * {@code InvalidSyntaxException} object.
 	 * 
 	 * @return The invalid filter string.
 	 * @see BundleContext#getServiceReferences
@@ -85,10 +85,10 @@ public class InvalidSyntaxException extends Exception {
 	}
 
 	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
+	 * Returns the cause of this exception or {@code null} if no cause was
 	 * set.
 	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
+	 * @return The cause of this exception or {@code null} if no cause was
 	 *         set.
 	 * @since 1.3
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/PackagePermission.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/PackagePermission.java
index da2f540..b6697a5 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/PackagePermission.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/PackagePermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,11 +29,9 @@ import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -51,35 +49,35 @@ import java.util.Map;
  * </pre>
  * 
  * <p>
- * <code>PackagePermission</code> has three actions: <code>exportonly</code>,
- * <code>import</code> and <code>export</code>. The <code>export</code> action,
- * which is deprecated, implies the <code>import</code> action.
+ * {@code PackagePermission} has three actions: {@code exportonly},
+ * {@code import} and {@code export}. The {@code export} action,
+ * which is deprecated, implies the {@code import} action.
  * 
  * @ThreadSafe
- * @version $Revision: 7189 $
+ * @version $Id: a286af94405e583f8bedc2ff5d7c818198f8caaf $
  */
 
 public final class PackagePermission extends BasicPermission {
 	static final long						serialVersionUID	= -5107705877071099135L;
 
 	/**
-	 * The action string <code>export</code>. The <code>export</code> action
-	 * implies the <code>import</code> action.
+	 * The action string {@code export}. The {@code export} action
+	 * implies the {@code import} action.
 	 * 
-	 * @deprecated Since 1.5. Use <code>exportonly</code> instead.
+	 * @deprecated Since 1.5. Use {@code exportonly} instead.
 	 */
 	public final static String				EXPORT				= "export";
 
 	/**
-	 * The action string <code>exportonly</code>. The <code>exportonly</code>
-	 * action does not imply the <code>import</code> action.
+	 * The action string {@code exportonly}. The {@code exportonly}
+	 * action does not imply the {@code import} action.
 	 * 
 	 * @since 1.5
 	 */
 	public final static String				EXPORTONLY			= "exportonly";
 
 	/**
-	 * The action string <code>import</code>.
+	 * The action string {@code import}.
 	 */
 	public final static String				IMPORT				= "import";
 
@@ -113,14 +111,14 @@ public final class PackagePermission extends BasicPermission {
 	transient Filter						filter;
 
 	/**
-	 * This dictionary holds the properties of the permission, used to match a
-	 * filter in implies. This is not initialized until necessary, and then
-	 * cached in this object.
+	 * This map holds the properties of the permission, used to match a filter
+	 * in implies. This is not initialized until necessary, and then cached in
+	 * this object.
 	 */
-	private transient volatile Dictionary	properties;
+	private transient volatile Map<String, Object>	properties;
 
 	/**
-	 * Creates a new <code>PackagePermission</code> object.
+	 * Creates a new {@code PackagePermission} object.
 	 * 
 	 * <p>
 	 * The name is specified as a normal Java package name: a dot-separated
@@ -138,7 +136,7 @@ public final class PackagePermission extends BasicPermission {
 	 * *
 	 * </pre>
 	 * 
-	 * For the <code>import</code> action, the name can also be a filter
+	 * For the {@code import} action, the name can also be a filter
 	 * expression. The filter gives access to the following attributes:
 	 * <ul>
 	 * <li>signer - A Distinguished Name chain used to sign the exporting
@@ -155,19 +153,19 @@ public final class PackagePermission extends BasicPermission {
 	 * Package Permissions are granted over all possible versions of a package.
 	 * 
 	 * A bundle that needs to export a package must have the appropriate
-	 * <code>PackagePermission</code> for that package; similarly, a bundle that
+	 * {@code PackagePermission} for that package; similarly, a bundle that
 	 * needs to import a package must have the appropriate
-	 * <code>PackagePermssion</code> for that package.
+	 * {@code PackagePermssion} for that package.
 	 * <p>
 	 * Permission is granted for both classes and resources.
 	 * 
 	 * @param name Package name or filter expression. A filter expression can
-	 *        only be specified if the specified action is <code>import</code>.
-	 * @param actions <code>exportonly</code>,<code>import</code> (canonical
+	 *        only be specified if the specified action is {@code import}.
+	 * @param actions {@code exportonly},{@code import} (canonical
 	 *        order).
 	 * @throws IllegalArgumentException If the specified name is a filter
 	 *         expression and either the specified action is not
-	 *         <code>import</code> or the filter has an invalid syntax.
+	 *         {@code import} or the filter has an invalid syntax.
 	 */
 	public PackagePermission(String name, String actions) {
 		this(name, parseActions(actions));
@@ -179,17 +177,17 @@ public final class PackagePermission extends BasicPermission {
 	}
 
 	/**
-	 * Creates a new requested <code>PackagePermission</code> object to be used
-	 * by code that must perform <code>checkPermission</code> for the
-	 * <code>import</code> action. <code>PackagePermission</code> objects
+	 * Creates a new requested {@code PackagePermission} object to be used
+	 * by code that must perform {@code checkPermission} for the
+	 * {@code import} action. {@code PackagePermission} objects
 	 * created with this constructor cannot be added to a
-	 * <code>PackagePermission</code> permission collection.
+	 * {@code PackagePermission} permission collection.
 	 * 
 	 * @param name The name of the requested package to import.
 	 * @param exportingBundle The bundle exporting the requested package.
-	 * @param actions The action <code>import</code>.
+	 * @param actions The action {@code import}.
 	 * @throws IllegalArgumentException If the specified action is not
-	 *         <code>import</code> or the name is a filter expression.
+	 *         {@code import} or the name is a filter expression.
 	 * @since 1.5
 	 */
 	public PackagePermission(String name, Bundle exportingBundle, String actions) {
@@ -345,7 +343,7 @@ public final class PackagePermission extends BasicPermission {
 	 * 
 	 * @param filterString The filter string to parse.
 	 * @return a Filter for this bundle. If the specified filterString is not a
-	 *         filter expression, then <code>null</code> is returned.
+	 *         filter expression, then {@code null} is returned.
 	 * @throws IllegalArgumentException If the filter syntax is invalid.
 	 */
 	private static Filter parseFilter(String filterString) {
@@ -370,9 +368,9 @@ public final class PackagePermission extends BasicPermission {
 	 * 
 	 * <p>
 	 * This method checks that the package name of the target is implied by the
-	 * package name of this object. The list of <code>PackagePermission</code>
+	 * package name of this object. The list of {@code PackagePermission}
 	 * actions must either match or allow for the list of the target object to
-	 * imply the target <code>PackagePermission</code> action.
+	 * imply the target {@code PackagePermission} action.
 	 * <p>
 	 * The permission to export a package implies the permission to import the
 	 * named package.
@@ -385,8 +383,8 @@ public final class PackagePermission extends BasicPermission {
 	 * </pre>
 	 * 
 	 * @param p The requested permission.
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean implies(Permission p) {
 		if (!(p instanceof PackagePermission)) {
@@ -411,8 +409,8 @@ public final class PackagePermission extends BasicPermission {
 	 *        validated as a proper argument. The requested PackagePermission
 	 *        must not have a filter expression.
 	 * @param effective The effective actions with which to start.
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	boolean implies0(PackagePermission requested, int effective) {
 		/* check actions first - much faster */
@@ -426,19 +424,19 @@ public final class PackagePermission extends BasicPermission {
 		if (f == null) {
 			return super.implies(requested);
 		}
-		return f.matchCase(requested.getProperties());
+		return f.matches(requested.getProperties());
 	}
 
 	/**
 	 * Returns the canonical string representation of the
-	 * <code>PackagePermission</code> actions.
+	 * {@code PackagePermission} actions.
 	 * 
 	 * <p>
-	 * Always returns present <code>PackagePermission</code> actions in the
-	 * following order: <code>EXPORTONLY</code>,<code>IMPORT</code>.
+	 * Always returns present {@code PackagePermission} actions in the
+	 * following order: {@code EXPORTONLY},{@code IMPORT}.
 	 * 
 	 * @return Canonical string representation of the
-	 *         <code>PackagePermission</code> actions.
+	 *         {@code PackagePermission} actions.
 	 */
 	public String getActions() {
 		String result = actions;
@@ -464,28 +462,28 @@ public final class PackagePermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object suitable for
-	 * storing <code>PackagePermission</code> objects.
+	 * Returns a new {@code PermissionCollection} object suitable for
+	 * storing {@code PackagePermission} objects.
 	 * 
-	 * @return A new <code>PermissionCollection</code> object.
+	 * @return A new {@code PermissionCollection} object.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new PackagePermissionCollection();
 	}
 
 	/**
-	 * Determines the equality of two <code>PackagePermission</code> objects.
+	 * Determines the equality of two {@code PackagePermission} objects.
 	 * 
 	 * This method checks that specified package has the same package name and
-	 * <code>PackagePermission</code> actions as this
-	 * <code>PackagePermission</code> object.
+	 * {@code PackagePermission} actions as this
+	 * {@code PackagePermission} object.
 	 * 
 	 * @param obj The object to test for equality with this
-	 *        <code>PackagePermission</code> object.
-	 * @return <code>true</code> if <code>obj</code> is a
-	 *         <code>PackagePermission</code>, and has the same package name and
-	 *         actions as this <code>PackagePermission</code> object;
-	 *         <code>false</code> otherwise.
+	 *        {@code PackagePermission} object.
+	 * @return {@code true} if {@code obj} is a
+	 *         {@code PackagePermission}, and has the same package name and
+	 *         actions as this {@code PackagePermission} object;
+	 *         {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
@@ -547,42 +545,42 @@ public final class PackagePermission extends BasicPermission {
 	}
 
 	/**
-	 * Called by <code><@link PackagePermission#implies(Permission)></code>.
+	 * Called by {@code <@link PackagePermission#implies(Permission)>}. This
+	 * method is only called on a requested permission which cannot have a
+	 * filter set.
 	 * 
-	 * @return a dictionary of properties for this permission.
+	 * @return a map of properties for this permission.
 	 */
-	private Dictionary getProperties() {
-		Dictionary result = properties;
+	private Map<String, Object> getProperties() {
+		Map<String, Object> result = properties;
 		if (result != null) {
 			return result;
 		}
-		final Dictionary dict = new Hashtable(5);
-		if (filter == null) {
-			dict.put("package.name", getName());
-		}
+		final Map<String, Object> map = new HashMap<String, Object>(5);
+		map.put("package.name", getName());
 		if (bundle != null) {
-			AccessController.doPrivileged(new PrivilegedAction() {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
-					dict.put("id", new Long(bundle.getBundleId()));
-					dict.put("location", bundle.getLocation());
+					map.put("id", new Long(bundle.getBundleId()));
+					map.put("location", bundle.getLocation());
 					String name = bundle.getSymbolicName();
 					if (name != null) {
-						dict.put("name", name);
+						map.put("name", name);
 					}
 					SignerProperty signer = new SignerProperty(bundle);
 					if (signer.isBundleSigned()) {
-						dict.put("signer", signer);
+						map.put("signer", signer);
 					}
 					return null;
 				}
 			});
 		}
-		return properties = dict;
+		return properties = map;
 	}
 }
 
 /**
- * Stores a set of <code>PackagePermission</code> permissions.
+ * Stores a set of {@code PackagePermission} permissions.
  * 
  * @see java.security.Permission
  * @see java.security.Permissions
@@ -596,7 +594,7 @@ final class PackagePermissionCollection extends PermissionCollection {
 	 * 
 	 * @GuardedBy this
 	 */
-	private transient Map	permissions;
+	private transient Map<String, PackagePermission>	permissions;
 
 	/**
 	 * Boolean saying if "*" is in the collection.
@@ -612,25 +610,25 @@ final class PackagePermissionCollection extends PermissionCollection {
 	 * @serial
 	 * @GuardedBy this
 	 */
-	private Map				filterPermissions;
+	private Map<String, PackagePermission>				filterPermissions;
 
 	/**
 	 * Create an empty PackagePermissions object.
 	 */
 	public PackagePermissionCollection() {
-		permissions = new HashMap();
+		permissions = new HashMap<String, PackagePermission>();
 		all_allowed = false;
 	}
 
 	/**
 	 * Adds a permission to this permission collection.
 	 * 
-	 * @param permission The <code>PackagePermission</code> object to add.
+	 * @param permission The {@code PackagePermission} object to add.
 	 * @throws IllegalArgumentException If the specified permission is not a
-	 *         <code>PackagePermission</code> instance or was constructed with a
+	 *         {@code PackagePermission} instance or was constructed with a
 	 *         Bundle object.
 	 * @throws SecurityException If this
-	 *         <code>PackagePermissionCollection</code> object has been marked
+	 *         {@code PackagePermissionCollection} object has been marked
 	 *         read-only.
 	 */
 	public void add(final Permission permission) {
@@ -653,18 +651,18 @@ final class PackagePermissionCollection extends PermissionCollection {
 		final Filter f = pp.filter;
 		synchronized (this) {
 			/* select the bucket for the permission */
-			Map pc;
+			Map<String, PackagePermission> pc;
 			if (f != null) {
 				pc = filterPermissions;
 				if (pc == null) {
-					filterPermissions = pc = new HashMap();
+					filterPermissions = pc = new HashMap<String, PackagePermission>();
 				}
 			}
 			else {
 				pc = permissions;
 			}
 			
-			final PackagePermission existing = (PackagePermission) pc.get(name);
+			final PackagePermission existing = pc.get(name);
 			if (existing != null) {
 				final int oldMask = existing.action_mask;
 				final int newMask = pp.action_mask;
@@ -689,12 +687,12 @@ final class PackagePermissionCollection extends PermissionCollection {
 
 	/**
 	 * Determines if the specified permissions implies the permissions expressed
-	 * in <code>permission</code>.
+	 * in {@code permission}.
 	 * 
 	 * @param permission The Permission object to compare with this
-	 *        <code>PackagePermission</code> object.
-	 * @return <code>true</code> if <code>permission</code> is a proper subset
-	 *         of a permission in the set; <code>false</code> otherwise.
+	 *        {@code PackagePermission} object.
+	 * @return {@code true} if {@code permission} is a proper subset
+	 *         of a permission in the set; {@code false} otherwise.
 	 */
 	public boolean implies(final Permission permission) {
 		if (!(permission instanceof PackagePermission)) {
@@ -709,13 +707,13 @@ final class PackagePermissionCollection extends PermissionCollection {
 		final int desired = requested.action_mask;
 		int effective = PackagePermission.ACTION_NONE;
 
-		Collection perms;
+		Collection<PackagePermission> perms;
 		synchronized (this) {
-			Map pc = permissions;
+			Map<String, PackagePermission> pc = permissions;
 			PackagePermission pp;
 			/* short circuit if the "*" Permission was added */
 			if (all_allowed) {
-				pp = (PackagePermission) pc.get("*");
+				pp = pc.get("*");
 				if (pp != null) {
 					effective |= pp.action_mask;
 					if ((effective & desired) == desired) {
@@ -727,7 +725,7 @@ final class PackagePermissionCollection extends PermissionCollection {
 			 * strategy: Check for full match first. Then work our way up the
 			 * name looking for matches on a.b.*
 			 */
-			pp = (PackagePermission) pc.get(requestedName);
+			pp = pc.get(requestedName);
 			if (pp != null) {
 				/* we have a direct hit! */
 				effective |= pp.action_mask;
@@ -740,7 +738,7 @@ final class PackagePermissionCollection extends PermissionCollection {
 			int offset = requestedName.length() - 1;
 			while ((last = requestedName.lastIndexOf(".", offset)) != -1) {
 				requestedName = requestedName.substring(0, last + 1) + "*";
-				pp = (PackagePermission) pc.get(requestedName);
+				pp = pc.get(requestedName);
 				if (pp != null) {
 					effective |= pp.action_mask;
 					if ((effective & desired) == desired) {
@@ -760,9 +758,8 @@ final class PackagePermissionCollection extends PermissionCollection {
 			perms = pc.values();
 		}
 		/* iterate one by one over filteredPermissions */
-		for (Iterator iter = perms.iterator(); iter.hasNext();) {
-			if (((PackagePermission) iter.next())
-					.implies0(requested, effective)) {
+		for (PackagePermission perm : perms) {
+			if (perm.implies0(requested, effective)) {
 				return true;
 			}
 		}
@@ -770,14 +767,14 @@ final class PackagePermissionCollection extends PermissionCollection {
 	}
 
 	/**
-	 * Returns an enumeration of all <code>PackagePermission</code> objects in
+	 * Returns an enumeration of all {@code PackagePermission} objects in
 	 * the container.
 	 * 
-	 * @return Enumeration of all <code>PackagePermission</code> objects.
+	 * @return Enumeration of all {@code PackagePermission} objects.
 	 */
-	public synchronized Enumeration elements() {
-		List all = new ArrayList(permissions.values());
-		Map pc = filterPermissions;
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		Map<String, PackagePermission> pc = filterPermissions;
 		if (pc != null) {
 			all.addAll(pc.values());
 		}
@@ -792,7 +789,8 @@ final class PackagePermissionCollection extends PermissionCollection {
 
 	private synchronized void writeObject(ObjectOutputStream out)
 			throws IOException {
-		Hashtable hashtable = new Hashtable(permissions);
+		Hashtable<String, PackagePermission> hashtable = new Hashtable<String, PackagePermission>(
+				permissions);
 		ObjectOutputStream.PutField pfields = out.putFields();
 		pfields.put("permissions", hashtable);
 		pfields.put("all_allowed", all_allowed);
@@ -803,9 +801,12 @@ final class PackagePermissionCollection extends PermissionCollection {
 	private synchronized void readObject(java.io.ObjectInputStream in)
 			throws IOException, ClassNotFoundException {
 		ObjectInputStream.GetField gfields = in.readFields();
-		Hashtable hashtable = (Hashtable) gfields.get("permissions", null);
-		permissions = new HashMap(hashtable);
+		Hashtable<String, PackagePermission> hashtable = (Hashtable<String, PackagePermission>) gfields
+				.get("permissions", null);
+		permissions = new HashMap<String, PackagePermission>(hashtable);
 		all_allowed = gfields.get("all_allowed", false);
-		filterPermissions = (HashMap) gfields.get("filterPermissions", null);
+		HashMap<String, PackagePermission> fp = (HashMap<String, PackagePermission>) gfields
+				.get("filterPermissions", null);
+		filterPermissions = fp;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceEvent.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceEvent.java
index b7c9928..82ec899 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceEvent.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceEvent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,8 +22,8 @@ import java.util.EventObject;
 /**
  * An event from the Framework describing a service lifecycle change.
  * <p>
- * <code>ServiceEvent</code> objects are delivered to
- * <code>ServiceListener</code>s and <code>AllServiceListener</code>s when a
+ * {@code ServiceEvent} objects are delivered to
+ * {@code ServiceListener}s and {@code AllServiceListener}s when a
  * change occurs in this service's lifecycle. A type code is used to identify
  * the event type for future extendability.
  * 
@@ -33,7 +33,7 @@ import java.util.EventObject;
  * @Immutable
  * @see ServiceListener
  * @see AllServiceListener
- * @version $Revision: 6542 $
+ * @version $Id: 2b9458d90004411b6ca0cb4b361bc282b04c85eb $
  */
 
 public class ServiceEvent extends EventObject {
@@ -41,7 +41,7 @@ public class ServiceEvent extends EventObject {
 	/**
 	 * Reference to the service that had a change occur in its lifecycle.
 	 */
-	private final ServiceReference	reference;
+	private final ServiceReference< ? >	reference;
 
 	/**
 	 * Type of service lifecycle change.
@@ -75,7 +75,7 @@ public class ServiceEvent extends EventObject {
 	 * has completed unregistering.
 	 * 
 	 * <p>
-	 * If a bundle is using a service that is <code>UNREGISTERING</code>, the
+	 * If a bundle is using a service that is {@code UNREGISTERING}, the
 	 * bundle should release its use of the service when it receives this event.
 	 * If the bundle does not release its use of the service when it receives
 	 * this event, the Framework will automatically release the bundle's use of
@@ -92,7 +92,7 @@ public class ServiceEvent extends EventObject {
 	 * <p>
 	 * This event is synchronously delivered <strong>after</strong> the service
 	 * properties have been modified. This event is only delivered to listeners
-	 * which were added with a non-<code>null</code> filter where the filter
+	 * which were added with a non-{@code null} filter where the filter
 	 * matched the service properties prior to the modification but the filter
 	 * does not match the modified service properties.
 	 * 
@@ -105,10 +105,10 @@ public class ServiceEvent extends EventObject {
 	 * Creates a new service event object.
 	 * 
 	 * @param type The event type.
-	 * @param reference A <code>ServiceReference</code> object to the service
+	 * @param reference A {@code ServiceReference} object to the service
 	 * 	that had a lifecycle change.
 	 */
-	public ServiceEvent(int type, ServiceReference reference) {
+	public ServiceEvent(int type, ServiceReference< ? > reference) {
 		super(reference);
 		this.reference = reference;
 		this.type = type;
@@ -122,7 +122,7 @@ public class ServiceEvent extends EventObject {
 	 * 
 	 * @return Reference to the service that had a lifecycle change.
 	 */
-	public ServiceReference getServiceReference() {
+	public ServiceReference< ? > getServiceReference() {
 		return reference;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceException.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceException.java
index 4cf04a0..d8ed3bd 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceException.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2007, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2007, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,18 +20,18 @@ package org.osgi.framework;
  * A service exception used to indicate that a service problem occurred.
  * 
  * <p>
- * A <code>ServiceException</code> object is created by the Framework or
+ * A {@code ServiceException} object is created by the Framework or
  * service implementation to denote an exception condition in the service. A
  * type code is used to identify the exception type for future extendability.
  * Service implementations may also create subclasses of
- * <code>ServiceException</code>. When subclassing, the subclass should set
+ * {@code ServiceException}. When subclassing, the subclass should set
  * the type to {@link #SUBCLASSED} to indicate that
- * <code>ServiceException</code> has been subclassed.
+ * {@code ServiceException} has been subclassed.
  * 
  * <p>
  * This exception conforms to the general purpose exception chaining mechanism.
  * 
- * @version $Revision: 6518 $
+ * @version $Id: 453b6021eed4543f754e20696b9f8b33a7e121ee $
  * @since 1.5
  */
 
@@ -68,9 +68,16 @@ public class ServiceException extends RuntimeException {
 	 * An error occurred invoking a remote service.
 	 */
 	public static final int REMOTE 				= 5;
+	/**
+	 * The service factory resulted in a recursive call to itself for the
+	 * requesting bundle.
+	 * 
+	 * @since 1.6
+	 */
+	public static final int	FACTORY_RECURSION	= 6;
 
 	/**
-	 * Creates a <code>ServiceException</code> with the specified message and
+	 * Creates a {@code ServiceException} with the specified message and
 	 * exception cause.
 	 * 
 	 * @param msg The associated message.
@@ -81,7 +88,7 @@ public class ServiceException extends RuntimeException {
 	}
 
 	/**
-	 * Creates a <code>ServiceException</code> with the specified message.
+	 * Creates a {@code ServiceException} with the specified message.
 	 * 
 	 * @param msg The message.
 	 */
@@ -90,7 +97,7 @@ public class ServiceException extends RuntimeException {
 	}
 
 	/**
-	 * Creates a <code>ServiceException</code> with the specified message,
+	 * Creates a {@code ServiceException} with the specified message,
 	 * type and exception cause.
 	 * 
 	 * @param msg The associated message.
@@ -103,7 +110,7 @@ public class ServiceException extends RuntimeException {
 	}
 
 	/**
-	 * Creates a <code>ServiceException</code> with the specified message and
+	 * Creates a {@code ServiceException} with the specified message and
 	 * type.
 	 * 
 	 * @param msg The message.
@@ -115,7 +122,7 @@ public class ServiceException extends RuntimeException {
 	}
 
 	/**
-	 * Returns the type for this exception or <code>UNSPECIFIED</code> if the
+	 * Returns the type for this exception or {@code UNSPECIFIED} if the
 	 * type was unspecified or unknown.
 	 * 
 	 * @return The type of this exception.
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceFactory.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceFactory.java
index c8f6bf3..6383b22 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,65 +21,73 @@ package org.osgi.framework;
  * environment.
  * 
  * <p>
- * When registering a service, a <code>ServiceFactory</code> object can be
- * used instead of a service object, so that the bundle developer can gain
- * control of the specific service object granted to a bundle that is using the
- * service.
+ * When registering a service, a {@code ServiceFactory} object can be used
+ * instead of a service object, so that the bundle developer can gain control of
+ * the specific service object granted to a bundle that is using the service.
  * 
  * <p>
- * When this happens, the
- * <code>BundleContext.getService(ServiceReference)</code> method calls the
- * <code>ServiceFactory.getService</code> method to create a service object
- * specifically for the requesting bundle. The service object returned by the
- * <code>ServiceFactory</code> is cached by the Framework until the bundle
+ * When this happens, the {@code BundleContext.getService(ServiceReference)}
+ * method calls the {@code ServiceFactory.getService} method to create a service
+ * object specifically for the requesting bundle. The service object returned by
+ * the {@code ServiceFactory} is cached by the Framework until the bundle
  * releases its use of the service.
  * 
  * <p>
- * When the bundle's use count for the service equals zero (including the bundle
- * stopping or the service being unregistered), the
- * <code>ServiceFactory.ungetService</code> method is called.
+ * When the bundle's use count for the service is decremented to zero (including
+ * the bundle stopping or the service being unregistered), the
+ * {@code ServiceFactory.ungetService} method is called.
  * 
  * <p>
- * <code>ServiceFactory</code> objects are only used by the Framework and are
- * not made available to other bundles in the OSGi environment. The Framework
- * may concurrently call a <code>ServiceFactory</code>.
+ * {@code ServiceFactory} objects are only used by the Framework and are not
+ * made available to other bundles in the OSGi environment. The Framework may
+ * concurrently call a {@code ServiceFactory}.
  * 
+ * @param <S> Type of Service
  * @see BundleContext#getService
  * @ThreadSafe
- * @version $Revision: 5967 $
+ * @version $Id: 94cd1a0127aaad9beb484f557342a8fbd0be2322 $
  */
 
-public interface ServiceFactory {
+public interface ServiceFactory<S> {
 	/**
 	 * Creates a new service object.
 	 * 
 	 * <p>
 	 * The Framework invokes this method the first time the specified
-	 * <code>bundle</code> requests a service object using the
-	 * <code>BundleContext.getService(ServiceReference)</code> method. The
-	 * service factory can then return a specific service object for each
-	 * bundle.
+	 * {@code bundle} requests a service object using the
+	 * {@code BundleContext.getService(ServiceReference)} method. The service
+	 * factory can then return a specific service object for each bundle.
 	 * 
 	 * <p>
-	 * The Framework caches the value returned (unless it is <code>null</code>),
-	 * and will return the same service object on any future call to
-	 * <code>BundleContext.getService</code> for the same bundle. This means the
-	 * Framework must not allow this method to be concurrently called for the
-	 * same bundle.
+	 * The Framework must check that the returned service object is valid. If
+	 * the returned service object is {@code null} or is not an
+	 * {@code instanceof} all the classes named when the service was registered,
+	 * a framework event of type {@link FrameworkEvent#ERROR} is fired
+	 * containing a service exception of type
+	 * {@link ServiceException#FACTORY_ERROR} and {@code null} is returned to
+	 * the bundle. If this method throws an exception, a framework event of type
+	 * {@link FrameworkEvent#ERROR} is fired containing a service exception of
+	 * type {@link ServiceException#FACTORY_EXCEPTION} with the thrown exception
+	 * as the cause and {@code null} is returned to the bundle. If this method
+	 * is recursively called for the specified bundle, a framework event of type
+	 * {@link FrameworkEvent#ERROR} is fired containing a service exception of
+	 * type {@link ServiceException#FACTORY_RECURSION} and {@code null} is
+	 * returned to the bundle.
 	 * 
 	 * <p>
-	 * The Framework will check if the returned service object is an instance of
-	 * all the classes named when the service was registered. If not, then
-	 * <code>null</code> is returned to the bundle.
+	 * The Framework caches the valid service object and will return the same
+	 * service object on any future call to {@code BundleContext.getService} for
+	 * the specified bundle. This means the Framework must not allow this method
+	 * to be concurrently called for the specified bundle.
 	 * 
-	 * @param bundle The bundle using the service.
-	 * @param registration The <code>ServiceRegistration</code> object for the
-	 *        service.
+	 * @param bundle The bundle requesting the service.
+	 * @param registration The {@code ServiceRegistration} object for the
+	 *        requested service.
 	 * @return A service object that <strong>must</strong> be an instance of all
 	 *         the classes named when the service was registered.
 	 * @see BundleContext#getService
 	 */
-	public Object getService(Bundle bundle, ServiceRegistration registration);
+	public S getService(Bundle bundle, ServiceRegistration<S> registration);
 
 	/**
 	 * Releases a service object.
@@ -88,13 +96,20 @@ public interface ServiceFactory {
 	 * The Framework invokes this method when a service has been released by a
 	 * bundle. The service object may then be destroyed.
 	 * 
+	 * <p>
+	 * If this method throws an exception, a framework event of type
+	 * {@link FrameworkEvent#ERROR} is fired containing a service exception of
+	 * type {@link ServiceException#FACTORY_EXCEPTION} with the thrown exception
+	 * as the cause.
+	 * 
 	 * @param bundle The bundle releasing the service.
-	 * @param registration The <code>ServiceRegistration</code> object for the
-	 *        service.
+	 * @param registration The {@code ServiceRegistration} object for the
+	 *        service being released.
 	 * @param service The service object returned by a previous call to the
-	 *        <code>ServiceFactory.getService</code> method.
+	 *        {@link #getService(Bundle, ServiceRegistration) getService}
+	 *        method.
 	 * @see BundleContext#ungetService
 	 */
-	public void ungetService(Bundle bundle, ServiceRegistration registration,
-			Object service);
+	public void ungetService(Bundle bundle, ServiceRegistration<S> registration,
+			S service);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceListener.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceListener.java
index ec08560..dc6a159 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceListener.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,46 +19,46 @@ package org.osgi.framework;
 import java.util.EventListener;
 
 /**
- * A <code>ServiceEvent</code> listener. <code>ServiceListener</code> is a
+ * A {@code ServiceEvent} listener. {@code ServiceListener} is a
  * listener interface that may be implemented by a bundle developer. When a
- * <code>ServiceEvent</code> is fired, it is synchronously delivered to a
- * <code>ServiceListener</code>. The Framework may deliver
- * <code>ServiceEvent</code> objects to a <code>ServiceListener</code> out
+ * {@code ServiceEvent} is fired, it is synchronously delivered to a
+ * {@code ServiceListener}. The Framework may deliver
+ * {@code ServiceEvent} objects to a {@code ServiceListener} out
  * of order and may concurrently call and/or reenter a
- * <code>ServiceListener</code>.
+ * {@code ServiceListener}.
  * 
  * <p>
- * A <code>ServiceListener</code> object is registered with the Framework
- * using the <code>BundleContext.addServiceListener</code> method.
- * <code>ServiceListener</code> objects are called with a
- * <code>ServiceEvent</code> object when a service is registered, modified, or
+ * A {@code ServiceListener} object is registered with the Framework
+ * using the {@code BundleContext.addServiceListener} method.
+ * {@code ServiceListener} objects are called with a
+ * {@code ServiceEvent} object when a service is registered, modified, or
  * is in the process of unregistering.
  * 
  * <p>
- * <code>ServiceEvent</code> object delivery to <code>ServiceListener</code>
+ * {@code ServiceEvent} object delivery to {@code ServiceListener}
  * objects is filtered by the filter specified when the listener was registered.
  * If the Java Runtime Environment supports permissions, then additional
- * filtering is done. <code>ServiceEvent</code> objects are only delivered to
+ * filtering is done. {@code ServiceEvent} objects are only delivered to
  * the listener if the bundle which defines the listener object's class has the
- * appropriate <code>ServicePermission</code> to get the service using at
+ * appropriate {@code ServicePermission} to get the service using at
  * least one of the named classes under which the service was registered.
  * 
  * <p>
- * <code>ServiceEvent</code> object delivery to <code>ServiceListener</code>
+ * {@code ServiceEvent} object delivery to {@code ServiceListener}
  * objects is further filtered according to package sources as defined in
  * {@link ServiceReference#isAssignableTo(Bundle, String)}.
  * 
  * @see ServiceEvent
  * @see ServicePermission
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: d73f8e9b4babc8b53b5d1cbe7b17b732f54bb2a3 $
  */
 
 public interface ServiceListener extends EventListener {
 	/**
 	 * Receives notification that a service has had a lifecycle change.
 	 * 
-	 * @param event The <code>ServiceEvent</code> object.
+	 * @param event The {@code ServiceEvent} object.
 	 */
 	public void serviceChanged(ServiceEvent event);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServicePermission.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServicePermission.java
index d2f3c31..b7a9956 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServicePermission.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServicePermission.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,42 +26,43 @@ import java.security.BasicPermission;
 import java.security.Permission;
 import java.security.PermissionCollection;
 import java.security.PrivilegedAction;
+import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * A bundle's authority to register or get a service.
  * <ul>
- * <li>The <code>register</code> action allows a bundle to register a service on
+ * <li>The {@code register} action allows a bundle to register a service on
  * the specified names.
- * <li>The <code>get</code> action allows a bundle to detect a service and get
+ * <li>The {@code get} action allows a bundle to detect a service and get
  * it.
  * </ul>
  * Permission to get a service is required in order to detect events regarding
  * the service. Untrusted bundles should not be able to detect the presence of
  * certain services unless they have the appropriate
- * <code>ServicePermission</code> to get the specific service.
+ * {@code ServicePermission} to get the specific service.
  * 
  * @ThreadSafe
- * @version $Revision: 7189 $
+ * @version $Id: 1b6ee9543f4cbc16add8dc8c40dfa9a6dfee7aa2 $
  */
 
 public final class ServicePermission extends BasicPermission {
 	static final long			serialVersionUID	= -7662148639076511574L;
 	/**
-	 * The action string <code>get</code>.
+	 * The action string {@code get}.
 	 */
 	public final static String	GET					= "get";
 	/**
-	 * The action string <code>register</code>.
+	 * The action string {@code register}.
 	 */
 	public final static String	REGISTER			= "register";
 
@@ -87,7 +88,7 @@ public final class ServicePermission extends BasicPermission {
 	 * The service used by this ServicePermission. Must be null if not
 	 * constructed with a service.
 	 */
-	transient final ServiceReference		service;
+	transient final ServiceReference< ? >					service;
 
 	/**
 	 * The object classes for this ServicePermission. Must be null if not
@@ -102,11 +103,11 @@ public final class ServicePermission extends BasicPermission {
 	transient Filter						filter;
 
 	/**
-	 * This dictionary holds the properties of the permission, used to match a
-	 * filter in implies. This is not initialized until necessary, and then
-	 * cached in this object.
+	 * This map holds the properties of the permission, used to match a filter
+	 * in implies. This is not initialized until necessary, and then cached in
+	 * this object.
 	 */
-	private transient volatile Dictionary	properties;
+	private transient volatile Map<String, Object>	properties;
 
 	/**
 	 * True if constructed with a name and the name is "*" or ends with ".*".
@@ -138,7 +139,7 @@ public final class ServicePermission extends BasicPermission {
 	 * *
 	 * </pre>
 	 * 
-	 * For the <code>get</code> action, the name can also be a filter
+	 * For the {@code get} action, the name can also be a filter
 	 * expression. The filter gives access to the service properties as well as
 	 * the following attributes:
 	 * <ul>
@@ -158,17 +159,17 @@ public final class ServicePermission extends BasicPermission {
 	 * Service properties names are case insensitive.
 	 * 
 	 * <p>
-	 * There are two possible actions: <code>get</code> and
-	 * <code>register</code>. The <code>get</code> permission allows the owner
+	 * There are two possible actions: {@code get} and
+	 * {@code register}. The {@code get} permission allows the owner
 	 * of this permission to obtain a service with this name. The
-	 * <code>register</code> permission allows the bundle to register a service
+	 * {@code register} permission allows the bundle to register a service
 	 * under that name.
 	 * 
 	 * @param name The service class name
-	 * @param actions <code>get</code>,<code>register</code> (canonical order)
+	 * @param actions {@code get},{@code register} (canonical order)
 	 * @throws IllegalArgumentException If the specified name is a filter
 	 *         expression and either the specified action is not
-	 *         <code>get</code> or the filter has an invalid syntax.
+	 *         {@code get} or the filter has an invalid syntax.
 	 */
 	public ServicePermission(String name, String actions) {
 		this(name, parseActions(actions));
@@ -180,19 +181,19 @@ public final class ServicePermission extends BasicPermission {
 	}
 
 	/**
-	 * Creates a new requested <code>ServicePermission</code> object to be used
-	 * by code that must perform <code>checkPermission</code> for the
-	 * <code>get</code> action. <code>ServicePermission</code> objects created
-	 * with this constructor cannot be added to a <code>ServicePermission</code>
+	 * Creates a new requested {@code ServicePermission} object to be used
+	 * by code that must perform {@code checkPermission} for the
+	 * {@code get} action. {@code ServicePermission} objects created
+	 * with this constructor cannot be added to a {@code ServicePermission}
 	 * permission collection.
 	 * 
 	 * @param reference The requested service.
-	 * @param actions The action <code>get</code>.
+	 * @param actions The action {@code get}.
 	 * @throws IllegalArgumentException If the specified action is not
-	 *         <code>get</code> or reference is <code>null</code>.
+	 *         {@code get} or reference is {@code null}.
 	 * @since 1.5
 	 */
-	public ServicePermission(ServiceReference reference, String actions) {
+	public ServicePermission(ServiceReference< ? > reference, String actions) {
 		super(createName(reference));
 		setTransients(null, parseActions(actions));
 		this.service = reference;
@@ -209,7 +210,7 @@ public final class ServicePermission extends BasicPermission {
 	 * @param reference ServiceReference to use to create permission name.
 	 * @return permission name.
 	 */
-	private static String createName(ServiceReference reference) {
+	private static String createName(ServiceReference< ? > reference) {
 		if (reference == null) {
 			throw new IllegalArgumentException("reference must not be null");
 		}
@@ -351,7 +352,7 @@ public final class ServicePermission extends BasicPermission {
 	 * 
 	 * @param filterString The filter string to parse.
 	 * @return a Filter for this bundle. If the specified filterString is not a
-	 *         filter expression, then <code>null</code> is returned.
+	 *         filter expression, then {@code null} is returned.
 	 * @throws IllegalArgumentException If the filter syntax is invalid.
 	 */
 	private static Filter parseFilter(String filterString) {
@@ -372,12 +373,12 @@ public final class ServicePermission extends BasicPermission {
 	}
 
 	/**
-	 * Determines if a <code>ServicePermission</code> object "implies" the
+	 * Determines if a {@code ServicePermission} object "implies" the
 	 * specified permission.
 	 * 
 	 * @param p The target permission to check.
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean implies(Permission p) {
 		if (!(p instanceof ServicePermission)) {
@@ -402,8 +403,8 @@ public final class ServicePermission extends BasicPermission {
 	 *        validated as a proper argument. The requested ServicePermission
 	 *        must not have a filter expression.
 	 * @param effective The effective actions with which to start.
-	 * @return <code>true</code> if the specified permission is implied by this
-	 *         object; <code>false</code> otherwise.
+	 * @return {@code true} if the specified permission is implied by this
+	 *         object; {@code false} otherwise.
 	 */
 	boolean implies0(ServicePermission requested, int effective) {
 		/* check actions first - much faster */
@@ -419,7 +420,7 @@ public final class ServicePermission extends BasicPermission {
 		/* if we have a filter */
 		Filter f = filter;
 		if (f != null) {
-			return f.matchCase(requested.getProperties());
+			return f.matches(requested.getProperties());
 		}
 		/* if requested permission not created with ServiceReference */
 		String[] requestedNames = requested.objectClass;
@@ -450,8 +451,8 @@ public final class ServicePermission extends BasicPermission {
 
 	/**
 	 * Returns the canonical string representation of the actions. Always
-	 * returns present actions in the following order: <code>get</code>,
-	 * <code>register</code>.
+	 * returns present actions in the following order: {@code get},
+	 * {@code register}.
 	 * 
 	 * @return The canonical string representation of the actions.
 	 */
@@ -480,11 +481,11 @@ public final class ServicePermission extends BasicPermission {
 	}
 
 	/**
-	 * Returns a new <code>PermissionCollection</code> object for storing
-	 * <code>ServicePermission<code> objects.
-	 *
-	 * @return A new <code>PermissionCollection</code> object suitable for storing
-	 * <code>ServicePermission</code> objects.
+	 * Returns a new {@code PermissionCollection} object for storing
+	 * {@code ServicePermission} objects.
+	 * 
+	 * @return A new {@code PermissionCollection} object suitable for storing
+	 *         {@code ServicePermission} objects.
 	 */
 	public PermissionCollection newPermissionCollection() {
 		return new ServicePermissionCollection();
@@ -494,12 +495,12 @@ public final class ServicePermission extends BasicPermission {
 	 * Determines the equality of two ServicePermission objects.
 	 * 
 	 * Checks that specified object has the same class name and action as this
-	 * <code>ServicePermission</code>.
+	 * {@code ServicePermission}.
 	 * 
 	 * @param obj The object to test for equality.
-	 * @return true if obj is a <code>ServicePermission</code>, and has the same
-	 *         class name and actions as this <code>ServicePermission</code>
-	 *         object; <code>false</code> otherwise.
+	 * @return true if obj is a {@code ServicePermission}, and has the same
+	 *         class name and actions as this {@code ServicePermission}
+	 *         object; {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
@@ -558,27 +559,28 @@ public final class ServicePermission extends BasicPermission {
 		s.defaultReadObject();
 		setTransients(parseFilter(getName()), parseActions(actions));
 	}
+
 	/**
-	 * Called by <code><@link ServicePermission#implies(Permission)></code>.
+	 * Called by {@code <@link ServicePermission#implies(Permission)>}. This
+	 * method is only called on a requested permission which cannot have a
+	 * filter set.
 	 * 
-	 * @return a dictionary of properties for this permission.
+	 * @return a map of properties for this permission.
 	 */
-	private Dictionary getProperties() {
-		Dictionary result = properties;
+	private Map<String, Object> getProperties() {
+		Map<String, Object> result = properties;
 		if (result != null) {
 			return result;
 		}
 		if (service == null) {
-			result = new Hashtable(1);
-			if (filter == null) {
-				result.put(Constants.OBJECTCLASS, new String[] {getName()});
-			}
+			result = new HashMap<String, Object>(1);
+			result.put(Constants.OBJECTCLASS, new String[] {getName()});
 			return properties = result;
 		}
-		final Map props = new HashMap(4);
+		final Map<String, Object> props = new HashMap<String, Object>(4);
 		final Bundle bundle = service.getBundle();
 		if (bundle != null) {
-			AccessController.doPrivileged(new PrivilegedAction() {
+			AccessController.doPrivileged(new PrivilegedAction<Object>() {
 				public Object run() {
 					props.put("id", new Long(bundle.getBundleId()));
 					props.put("location", bundle.getLocation());
@@ -597,13 +599,15 @@ public final class ServicePermission extends BasicPermission {
 		return properties = new Properties(props, service);
 	}
 	
-	private static class Properties extends Dictionary {
-		private final Map				properties;
-		private final ServiceReference	service;
+	static private final class Properties extends AbstractMap<String, Object> {
+		private final Map<String, Object>	properties;
+		private final ServiceReference< ? >	service;
+		private transient volatile Set<Map.Entry<String, Object>>	entries;
 
-		Properties(Map properties, ServiceReference service) {
+		Properties(Map<String, Object> properties, ServiceReference< ? > service) {
 			this.properties = properties;
 			this.service = service;
+			entries = null;
 		}
 
 		public Object get(Object k) {
@@ -621,57 +625,64 @@ public final class ServicePermission extends BasicPermission {
 			return service.getProperty(key);
 		}
 
-		public int size() {
-			return properties.size() + service.getPropertyKeys().length;
-		}
-
-		public boolean isEmpty() {
-			// we can return false because this must never be empty
-			return false;
-		}
-
-		public Enumeration keys() {
-			Collection pk = properties.keySet();
-			String spk[] = service.getPropertyKeys();
-			List all = new ArrayList(pk.size() + spk.length);
-			all.addAll(pk);
-			add:
-			for (int i = 0, length = spk.length; i < length; i++) {
-				String key = spk[i];
-				for (Iterator iter = pk.iterator(); iter.hasNext();) {
-					if (key.equalsIgnoreCase((String) iter.next())) {
-						continue add;
-					}
-				}
-				all.add(key);
+		public Set<Map.Entry<String, Object>> entrySet() {
+			if (entries != null) {
+				return entries;
 			}
-			return Collections.enumeration(all);
-		}
-
-		public Enumeration elements() {
-			Collection pk = properties.keySet();
-			String spk[] = service.getPropertyKeys();
-			List all = new ArrayList(pk.size() + spk.length);
-			all.addAll(properties.values());
-			add:
-			for (int i = 0, length = spk.length; i < length; i++) {
-				String key = spk[i];
-				for (Iterator iter = pk.iterator(); iter.hasNext();) {
-					if (key.equalsIgnoreCase((String) iter.next())) {
+			Set<Map.Entry<String, Object>> all = new HashSet<Map.Entry<String, Object>>(
+					properties.entrySet());
+			add: for (String key : service.getPropertyKeys()) {
+				for (String k : properties.keySet()) {
+					if (key.equalsIgnoreCase(k)) {
 						continue add;
 					}
 				}
-				all.add(service.getProperty(key));
+				all.add(new Entry(key, service.getProperty(key)));
 			}
-			return Collections.enumeration(all);
-		}
-
-		public Object put(Object key, Object value) {
-			throw new UnsupportedOperationException();
+			return entries = Collections.unmodifiableSet(all);
 		}
+		
+		static private final class Entry implements Map.Entry<String, Object> {
+			private final String	k;
+			private final Object	v;
 
-		public Object remove(Object key) {
-			throw new UnsupportedOperationException();
+			Entry(String key, Object value) {
+				this.k = key;
+				this.v = value;
+			}
+			public String getKey() {
+				return k;
+			}
+			public Object getValue() {
+				return v;
+			}
+			public Object setValue(Object value) {
+				throw new UnsupportedOperationException();
+			}
+			public String toString() {
+				return k + "=" + v;
+			}
+			public int hashCode() {
+				return ((k == null) ? 0 : k.hashCode())
+						^ ((v == null) ? 0 : v.hashCode());
+			}
+			public boolean equals(Object obj) {
+				if (obj == this) {
+					return true;
+				}
+				if (!(obj instanceof Map.Entry)) {
+					return false;
+				}
+				Map.Entry< ? , ? > e = (Map.Entry< ? , ? >) obj;
+				final Object key = e.getKey();
+				if ((k == key) || ((k != null) && k.equals(key))) {
+					final Object value = e.getValue();
+					if ((v == value) || ((v != null) && v.equals(value))) {
+						return true;
+					}
+				}
+				return false;
+			}
 		}
 	}
 }
@@ -690,7 +701,7 @@ final class ServicePermissionCollection extends PermissionCollection {
 	 * 
 	 * @GuardedBy this
 	 */
-	private transient Map	permissions;
+	private transient Map<String, ServicePermission>	permissions;
 
 	/**
 	 * Boolean saying if "*" is in the collection.
@@ -706,13 +717,13 @@ final class ServicePermissionCollection extends PermissionCollection {
 	 * @serial
 	 * @GuardedBy this
 	 */
-	private Map				filterPermissions;
+	private Map<String, ServicePermission>				filterPermissions;
 
 	/**
 	 * Creates an empty ServicePermissions object.
 	 */
 	public ServicePermissionCollection() {
-		permissions = new HashMap();
+		permissions = new HashMap<String, ServicePermission>();
 		all_allowed = false;
 	}
 
@@ -723,7 +734,7 @@ final class ServicePermissionCollection extends PermissionCollection {
 	 * @throws IllegalArgumentException If the specified permission is not a
 	 *         ServicePermission object.
 	 * @throws SecurityException If this
-	 *         <code>ServicePermissionCollection</code> object has been marked
+	 *         {@code ServicePermissionCollection} object has been marked
 	 *         read-only.
 	 */
 	public void add(final Permission permission) {
@@ -746,17 +757,17 @@ final class ServicePermissionCollection extends PermissionCollection {
 		final Filter f = sp.filter;
 		synchronized (this) {
 			/* select the bucket for the permission */
-			Map pc;
+			Map<String, ServicePermission> pc;
 			if (f != null) {
 				pc = filterPermissions;
 				if (pc == null) {
-					filterPermissions = pc = new HashMap();
+					filterPermissions = pc = new HashMap<String, ServicePermission>();
 				}
 			}
 			else {
 				pc = permissions;
 			}
-			final ServicePermission existing = (ServicePermission) pc.get(name);
+			final ServicePermission existing = pc.get(name);
 			
 			if (existing != null) {
 				final int oldMask = existing.action_mask;
@@ -781,11 +792,11 @@ final class ServicePermissionCollection extends PermissionCollection {
 
 	/**
 	 * Determines if a set of permissions implies the permissions expressed in
-	 * <code>permission</code>.
+	 * {@code permission}.
 	 * 
 	 * @param permission The Permission object to compare.
-	 * @return <code>true</code> if <code>permission</code> is a proper
-	 *         subset of a permission in the set; <code>false</code>
+	 * @return {@code true} if {@code permission} is a proper
+	 *         subset of a permission in the set; {@code false}
 	 *         otherwise.
 	 */
 	public boolean implies(final Permission permission) {
@@ -799,12 +810,12 @@ final class ServicePermissionCollection extends PermissionCollection {
 		}
 
 		int effective = ServicePermission.ACTION_NONE;
-		Collection perms;
+		Collection<ServicePermission> perms;
 		synchronized (this) {
 			final int desired = requested.action_mask;
 			/* short circuit if the "*" Permission was added */
 			if (all_allowed) {
-				ServicePermission sp = (ServicePermission) permissions.get("*");
+				ServicePermission sp = permissions.get("*");
 				if (sp != null) {
 					effective |= sp.action_mask;
 					if ((effective & desired) == desired) {
@@ -829,7 +840,7 @@ final class ServicePermissionCollection extends PermissionCollection {
 					}
 				}
 			}
-			Map pc = filterPermissions;
+			Map<String, ServicePermission> pc = filterPermissions;
 			if (pc == null) {
 				return false;
 			}
@@ -837,9 +848,8 @@ final class ServicePermissionCollection extends PermissionCollection {
 		}
 		
 		/* iterate one by one over filteredPermissions */
-		for (Iterator iter = perms.iterator(); iter.hasNext();) {
-			if (((ServicePermission) iter.next())
-					.implies0(requested, effective)) {
+		for (ServicePermission perm : perms) {
+			if (perm.implies0(requested, effective)) {
 				return true;
 			}
 		}
@@ -857,8 +867,8 @@ final class ServicePermissionCollection extends PermissionCollection {
 	 */
 	private int effective(String requestedName, final int desired,
 			int effective) {
-		final Map pc = permissions;
-		ServicePermission sp = (ServicePermission) pc.get(requestedName);
+		final Map<String, ServicePermission> pc = permissions;
+		ServicePermission sp = pc.get(requestedName);
 		// strategy:
 		// Check for full match first. Then work our way up the
 		// name looking for matches on a.b.*
@@ -874,7 +884,7 @@ final class ServicePermissionCollection extends PermissionCollection {
 		int offset = requestedName.length() - 1;
 		while ((last = requestedName.lastIndexOf(".", offset)) != -1) {
 			requestedName = requestedName.substring(0, last + 1) + "*";
-			sp = (ServicePermission) pc.get(requestedName);
+			sp = pc.get(requestedName);
 			if (sp != null) {
 				effective |= sp.action_mask;
 				if ((effective & desired) == desired) {
@@ -891,14 +901,14 @@ final class ServicePermissionCollection extends PermissionCollection {
 	}
 	
 	/**
-	 * Returns an enumeration of all the <code>ServicePermission</code>
+	 * Returns an enumeration of all the {@code ServicePermission}
 	 * objects in the container.
 	 * 
 	 * @return Enumeration of all the ServicePermission objects.
 	 */
-	public synchronized Enumeration elements() {
-		List all = new ArrayList(permissions.values());
-		Map pc = filterPermissions;
+	public synchronized Enumeration<Permission> elements() {
+		List<Permission> all = new ArrayList<Permission>(permissions.values());
+		Map<String, ServicePermission> pc = filterPermissions;
 		if (pc != null) {
 			all.addAll(pc.values());
 		}
@@ -913,7 +923,8 @@ final class ServicePermissionCollection extends PermissionCollection {
 
 	private synchronized void writeObject(ObjectOutputStream out)
 			throws IOException {
-		Hashtable hashtable = new Hashtable(permissions);
+		Hashtable<String, ServicePermission> hashtable = new Hashtable<String, ServicePermission>(
+				permissions);
 		ObjectOutputStream.PutField pfields = out.putFields();
 		pfields.put("permissions", hashtable);
 		pfields.put("all_allowed", all_allowed);
@@ -924,9 +935,12 @@ final class ServicePermissionCollection extends PermissionCollection {
 	private synchronized void readObject(java.io.ObjectInputStream in)
 			throws IOException, ClassNotFoundException {
 		ObjectInputStream.GetField gfields = in.readFields();
-		Hashtable hashtable = (Hashtable) gfields.get("permissions", null);
-		permissions = new HashMap(hashtable);
+		Hashtable<String, ServicePermission> hashtable = (Hashtable<String, ServicePermission>) gfields
+				.get("permissions", null);
+		permissions = new HashMap<String, ServicePermission>(hashtable);
 		all_allowed = gfields.get("all_allowed", false);
-		filterPermissions = (HashMap) gfields.get("filterPermissions", null);
+		HashMap<String, ServicePermission> fp = (HashMap<String, ServicePermission>) gfields
+				.get("filterPermissions", null);
+		filterPermissions = fp;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceReference.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceReference.java
index a6dd9bd..ad38df7 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceReference.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceReference.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,38 +22,40 @@ import java.util.Dictionary;
  * A reference to a service.
  * 
  * <p>
- * The Framework returns <code>ServiceReference</code> objects from the
- * <code>BundleContext.getServiceReference</code> and
- * <code>BundleContext.getServiceReferences</code> methods.
+ * The Framework returns {@code ServiceReference} objects from the
+ * {@code BundleContext.getServiceReference} and
+ * {@code BundleContext.getServiceReferences} methods.
  * <p>
- * A <code>ServiceReference</code> object may be shared between bundles and
- * can be used to examine the properties of the service and to get the service
+ * A {@code ServiceReference} object may be shared between bundles and can
+ * be used to examine the properties of the service and to get the service
  * object.
  * <p>
  * Every service registered in the Framework has a unique
- * <code>ServiceRegistration</code> object and may have multiple, distinct
- * <code>ServiceReference</code> objects referring to it.
- * <code>ServiceReference</code> objects associated with a
- * <code>ServiceRegistration</code> object have the same <code>hashCode</code>
- * and are considered equal (more specifically, their <code>equals()</code>
- * method will return <code>true</code> when compared).
+ * {@code ServiceRegistration} object and may have multiple, distinct
+ * {@code ServiceReference} objects referring to it.
+ * {@code ServiceReference} objects associated with a
+ * {@code ServiceRegistration} object have the same {@code hashCode}
+ * and are considered equal (more specifically, their {@code equals()}
+ * method will return {@code true} when compared).
  * <p>
  * If the same service object is registered multiple times,
- * <code>ServiceReference</code> objects associated with different
- * <code>ServiceRegistration</code> objects are not equal.
+ * {@code ServiceReference} objects associated with different
+ * {@code ServiceRegistration} objects are not equal.
  * 
+ * @param <S> Type of Service.
  * @see BundleContext#getServiceReference
  * @see BundleContext#getServiceReferences
  * @see BundleContext#getService
  * @ThreadSafe
- * @version $Revision: 6374 $
+ * @noimplement
+ * @version $Id: 771b9b4d4f65dbe593154d02912edba51a085b0c $
  */
 
-public interface ServiceReference extends Comparable {
+public interface ServiceReference<S> extends Comparable<Object> {
 	/**
 	 * Returns the property value to which the specified property key is mapped
-	 * in the properties <code>Dictionary</code> object of the service
-	 * referenced by this <code>ServiceReference</code> object.
+	 * in the properties {@code Dictionary} object of the service
+	 * referenced by this {@code ServiceReference} object.
 	 * 
 	 * <p>
 	 * Property keys are case-insensitive.
@@ -61,30 +63,30 @@ public interface ServiceReference extends Comparable {
 	 * <p>
 	 * This method must continue to return property values after the service has
 	 * been unregistered. This is so references to unregistered services (for
-	 * example, <code>ServiceReference</code> objects stored in the log) can
+	 * example, {@code ServiceReference} objects stored in the log) can
 	 * still be interrogated.
 	 * 
 	 * @param key The property key.
-	 * @return The property value to which the key is mapped; <code>null</code>
+	 * @return The property value to which the key is mapped; {@code null}
 	 *         if there is no property named after the key.
 	 */
 	public Object getProperty(String key);
 
 	/**
-	 * Returns an array of the keys in the properties <code>Dictionary</code>
-	 * object of the service referenced by this <code>ServiceReference</code>
+	 * Returns an array of the keys in the properties {@code Dictionary}
+	 * object of the service referenced by this {@code ServiceReference}
 	 * object.
 	 * 
 	 * <p>
 	 * This method will continue to return the keys after the service has been
 	 * unregistered. This is so references to unregistered services (for
-	 * example, <code>ServiceReference</code> objects stored in the log) can
+	 * example, {@code ServiceReference} objects stored in the log) can
 	 * still be interrogated.
 	 * 
 	 * <p>
 	 * This method is <i>case-preserving </i>; this means that every key in the
 	 * returned array must have the same case as the corresponding key in the
-	 * properties <code>Dictionary</code> that was passed to the
+	 * properties {@code Dictionary} that was passed to the
 	 * {@link BundleContext#registerService(String[],Object,Dictionary)} or
 	 * {@link ServiceRegistration#setProperties} methods.
 	 * 
@@ -94,15 +96,15 @@ public interface ServiceReference extends Comparable {
 
 	/**
 	 * Returns the bundle that registered the service referenced by this
-	 * <code>ServiceReference</code> object.
+	 * {@code ServiceReference} object.
 	 * 
 	 * <p>
-	 * This method must return <code>null</code> when the service has been
+	 * This method must return {@code null} when the service has been
 	 * unregistered. This can be used to determine if the service has been
 	 * unregistered.
 	 * 
 	 * @return The bundle that registered the service referenced by this
-	 *         <code>ServiceReference</code> object; <code>null</code> if that
+	 *         {@code ServiceReference} object; {@code null} if that
 	 *         service has already been unregistered.
 	 * @see BundleContext#registerService(String[],Object,Dictionary)
 	 */
@@ -110,12 +112,12 @@ public interface ServiceReference extends Comparable {
 
 	/**
 	 * Returns the bundles that are using the service referenced by this
-	 * <code>ServiceReference</code> object. Specifically, this method returns
+	 * {@code ServiceReference} object. Specifically, this method returns
 	 * the bundles whose usage count for that service is greater than zero.
 	 * 
 	 * @return An array of bundles whose usage count for the service referenced
-	 *         by this <code>ServiceReference</code> object is greater than
-	 *         zero; <code>null</code> if no bundles are currently using that
+	 *         by this {@code ServiceReference} object is greater than
+	 *         zero; {@code null} if no bundles are currently using that
 	 *         service.
 	 * 
 	 * @since 1.1
@@ -124,60 +126,60 @@ public interface ServiceReference extends Comparable {
 
 	/**
 	 * Tests if the bundle that registered the service referenced by this
-	 * <code>ServiceReference</code> and the specified bundle use the same
+	 * {@code ServiceReference} and the specified bundle use the same
 	 * source for the package of the specified class name.
 	 * <p>
 	 * This method performs the following checks:
 	 * <ol>
 	 * <li>Get the package name from the specified class name.</li>
 	 * <li>For the bundle that registered the service referenced by this
-	 * <code>ServiceReference</code> (registrant bundle); find the source for
-	 * the package. If no source is found then return <code>true</code> if the
+	 * {@code ServiceReference} (registrant bundle); find the source for
+	 * the package. If no source is found then return {@code true} if the
 	 * registrant bundle is equal to the specified bundle; otherwise return
-	 * <code>false</code>.</li>
+	 * {@code false}.</li>
 	 * <li>If the package source of the registrant bundle is equal to the
-	 * package source of the specified bundle then return <code>true</code>;
-	 * otherwise return <code>false</code>.</li>
+	 * package source of the specified bundle then return {@code true};
+	 * otherwise return {@code false}.</li>
 	 * </ol>
 	 * 
-	 * @param bundle The <code>Bundle</code> object to check.
+	 * @param bundle The {@code Bundle} object to check.
 	 * @param className The class name to check.
-	 * @return <code>true</code> if the bundle which registered the service
-	 *         referenced by this <code>ServiceReference</code> and the
+	 * @return {@code true} if the bundle which registered the service
+	 *         referenced by this {@code ServiceReference} and the
 	 *         specified bundle use the same source for the package of the
-	 *         specified class name. Otherwise <code>false</code> is returned.
-	 * @throws IllegalArgumentException If the specified <code>Bundle</code> was
+	 *         specified class name. Otherwise {@code false} is returned.
+	 * @throws IllegalArgumentException If the specified {@code Bundle} was
 	 *         not created by the same framework instance as this
-	 *         <code>ServiceReference</code>.
+	 *         {@code ServiceReference}.
 	 * @since 1.3
 	 */
 	public boolean isAssignableTo(Bundle bundle, String className);
 
 	/**
-	 * Compares this <code>ServiceReference</code> with the specified
-	 * <code>ServiceReference</code> for order.
+	 * Compares this {@code ServiceReference} with the specified
+	 * {@code ServiceReference} for order.
 	 * 
 	 * <p>
-	 * If this <code>ServiceReference</code> and the specified
-	 * <code>ServiceReference</code> have the same {@link Constants#SERVICE_ID
-	 * service id} they are equal. This <code>ServiceReference</code> is less
-	 * than the specified <code>ServiceReference</code> if it has a lower
+	 * If this {@code ServiceReference} and the specified
+	 * {@code ServiceReference} have the same {@link Constants#SERVICE_ID
+	 * service id} they are equal. This {@code ServiceReference} is less
+	 * than the specified {@code ServiceReference} if it has a lower
 	 * {@link Constants#SERVICE_RANKING service ranking} and greater if it has a
-	 * higher service ranking. Otherwise, if this <code>ServiceReference</code>
-	 * and the specified <code>ServiceReference</code> have the same
+	 * higher service ranking. Otherwise, if this {@code ServiceReference}
+	 * and the specified {@code ServiceReference} have the same
 	 * {@link Constants#SERVICE_RANKING service ranking}, this
-	 * <code>ServiceReference</code> is less than the specified
-	 * <code>ServiceReference</code> if it has a higher
+	 * {@code ServiceReference} is less than the specified
+	 * {@code ServiceReference} if it has a higher
 	 * {@link Constants#SERVICE_ID service id} and greater if it has a lower
 	 * service id.
 	 * 
-	 * @param reference The <code>ServiceReference</code> to be compared.
+	 * @param reference The {@code ServiceReference} to be compared.
 	 * @return Returns a negative integer, zero, or a positive integer if this
-	 *         <code>ServiceReference</code> is less than, equal to, or greater
-	 *         than the specified <code>ServiceReference</code>.
+	 *         {@code ServiceReference} is less than, equal to, or greater
+	 *         than the specified {@code ServiceReference}.
 	 * @throws IllegalArgumentException If the specified
-	 *         <code>ServiceReference</code> was not created by the same
-	 *         framework instance as this <code>ServiceReference</code>.
+	 *         {@code ServiceReference} was not created by the same
+	 *         framework instance as this {@code ServiceReference}.
 	 * @since 1.4
 	 */
 	public int compareTo(Object reference);
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceRegistration.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceRegistration.java
index 9186cf7..e4cfc0e 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceRegistration.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/ServiceRegistration.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,33 +22,35 @@ import java.util.Dictionary;
  * A registered service.
  * 
  * <p>
- * The Framework returns a <code>ServiceRegistration</code> object when a
- * <code>BundleContext.registerService</code> method invocation is successful.
- * The <code>ServiceRegistration</code> object is for the private use of the
+ * The Framework returns a {@code ServiceRegistration} object when a
+ * {@code BundleContext.registerService} method invocation is successful.
+ * The {@code ServiceRegistration} object is for the private use of the
  * registering bundle and should not be shared with other bundles.
  * <p>
- * The <code>ServiceRegistration</code> object may be used to update the
+ * The {@code ServiceRegistration} object may be used to update the
  * properties of the service or to unregister the service.
  * 
+ * @param <S> Type of Service.
  * @see BundleContext#registerService(String[],Object,Dictionary)
  * @ThreadSafe
- * @version $Revision: 6361 $
+ * @noimplement
+ * @version $Id: dc742ff3749821529f9ae62e05d9bd5d8eca00d7 $
  */
 
-public interface ServiceRegistration {
+public interface ServiceRegistration<S> {
 	/**
-	 * Returns a <code>ServiceReference</code> object for a service being
+	 * Returns a {@code ServiceReference} object for a service being
 	 * registered.
 	 * <p>
-	 * The <code>ServiceReference</code> object may be shared with other
+	 * The {@code ServiceReference} object may be shared with other
 	 * bundles.
 	 * 
 	 * @throws IllegalStateException If this
-	 *         <code>ServiceRegistration</code> object has already been
+	 *         {@code ServiceRegistration} object has already been
 	 *         unregistered.
-	 * @return <code>ServiceReference</code> object.
+	 * @return {@code ServiceReference} object.
 	 */
-	public ServiceReference getReference();
+	public ServiceReference<S> getReference();
 
 	/**
 	 * Updates the properties associated with a service.
@@ -70,17 +72,17 @@ public interface ServiceRegistration {
 	 *        be made to this object after calling this method. To update the
 	 *        service's properties this method should be called again.
 	 * 
-	 * @throws IllegalStateException If this <code>ServiceRegistration</code>
+	 * @throws IllegalStateException If this {@code ServiceRegistration}
 	 *         object has already been unregistered.
-	 * @throws IllegalArgumentException If <code>properties</code> contains
+	 * @throws IllegalArgumentException If {@code properties} contains
 	 *         case variants of the same key name.
 	 */
-	public void setProperties(Dictionary properties);
+	public void setProperties(Dictionary<String, ? > properties);
 
 	/**
-	 * Unregisters a service. Remove a <code>ServiceRegistration</code> object
-	 * from the Framework service registry. All <code>ServiceReference</code>
-	 * objects associated with this <code>ServiceRegistration</code> object
+	 * Unregisters a service. Remove a {@code ServiceRegistration} object
+	 * from the Framework service registry. All {@code ServiceReference}
+	 * objects associated with this {@code ServiceRegistration} object
 	 * can no longer be used to interact with the service once unregistration is
 	 * complete.
 	 * 
@@ -92,18 +94,18 @@ public interface ServiceRegistration {
 	 * <li>A service event of type {@link ServiceEvent#UNREGISTERING} is fired
 	 * so that bundles using this service can release their use of the service.
 	 * Once delivery of the service event is complete, the
-	 * <code>ServiceReference</code> objects for the service may no longer be
+	 * {@code ServiceReference} objects for the service may no longer be
 	 * used to get a service object for the service.
 	 * <li>For each bundle whose use count for this service is greater than
 	 * zero: <br>
 	 * The bundle's use count for this service is set to zero. <br>
 	 * If the service was registered with a {@link ServiceFactory} object, the
-	 * <code>ServiceFactory.ungetService</code> method is called to release
+	 * {@code ServiceFactory.ungetService} method is called to release
 	 * the service object for the bundle.
 	 * </ol>
 	 * 
 	 * @throws IllegalStateException If this
-	 *         <code>ServiceRegistration</code> object has already been
+	 *         {@code ServiceRegistration} object has already been
 	 *         unregistered.
 	 * @see BundleContext#ungetService
 	 * @see ServiceFactory#ungetService
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SignerProperty.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SignerProperty.java
index 2ba0389..8b357c1 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SignerProperty.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SignerProperty.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@ package org.osgi.framework;
 
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -27,9 +26,9 @@ import java.util.Map;
  * during filter expression evaluation in the permission implies method.
  * 
  * @Immutable
- * @version $Revision: 6479 $
+ * @version $Id: 3589831a7594cf36e645a51ab9b9ae5ebfd80beb $
  */
-class SignerProperty {
+final class SignerProperty {
 	private final Bundle	bundle;
 	private final String	pattern;
 
@@ -71,19 +70,21 @@ class SignerProperty {
 		SignerProperty other = (SignerProperty) o;
 		Bundle matchBundle = bundle != null ? bundle : other.bundle;
 		String matchPattern = bundle != null ? other.pattern : pattern;
-		Map/* <X509Certificate, List<X509Certificate>> */signers = matchBundle
+		Map<X509Certificate, List<X509Certificate>> signers = matchBundle
 				.getSignerCertificates(Bundle.SIGNERS_TRUSTED);
-		for (Iterator iSigners = signers.values().iterator(); iSigners
-				.hasNext();) {
-			List/* <X509Certificate> */signerCerts = (List) iSigners.next();
-			List/* <String> */dnChain = new ArrayList(signerCerts.size());
-			for (Iterator iCerts = signerCerts.iterator(); iCerts.hasNext();) {
-				dnChain.add(((X509Certificate) iCerts.next()).getSubjectDN()
-						.getName());
+		for (List<X509Certificate> signerCerts : signers.values()) {
+			List<String> dnChain = new ArrayList<String>(signerCerts.size());
+			for (X509Certificate signerCert : signerCerts) {
+				dnChain.add(signerCert.getSubjectDN().getName());
 			}
-			if (FrameworkUtil
-					.matchDistinguishedNameChain(matchPattern, dnChain)) {
-				return true;
+			try {
+				if (FrameworkUtil.matchDistinguishedNameChain(matchPattern,
+						dnChain)) {
+					return true;
+				}
+			}
+			catch (IllegalArgumentException e) {
+				continue; // bad pattern
 			}
 		}
 		return false;
@@ -106,7 +107,7 @@ class SignerProperty {
 		if (bundle == null) {
 			return false;
 		}
-		Map/* <X509Certificate, List<X509Certificate>> */signers = bundle
+		Map<X509Certificate, List<X509Certificate>> signers = bundle
 				.getSignerCertificates(Bundle.SIGNERS_TRUSTED);
 		return !signers.isEmpty();
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SynchronousBundleListener.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SynchronousBundleListener.java
index 9104f04..227dc59 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SynchronousBundleListener.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/SynchronousBundleListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,35 +17,48 @@
 package org.osgi.framework;
 
 /**
- * A synchronous <code>BundleEvent</code> listener.
- * <code>SynchronousBundleListener</code> is a listener interface that may be
- * implemented by a bundle developer. When a <code>BundleEvent</code> is
- * fired, it is synchronously delivered to a
- * <code>SynchronousBundleListener</code>. The Framework may deliver
- * <code>BundleEvent</code> objects to a
- * <code>SynchronousBundleListener</code> out of order and may concurrently
- * call and/or reenter a <code>SynchronousBundleListener</code>.
+ * A synchronous {@code BundleEvent} listener.
+ * {@code SynchronousBundleListener} is a listener interface that may be
+ * implemented by a bundle developer. When a {@code BundleEvent} is fired,
+ * it is synchronously delivered to a {@code SynchronousBundleListener}.
+ * The Framework may deliver {@code BundleEvent} objects to a
+ * {@code SynchronousBundleListener} out of order and may concurrently call
+ * and/or reenter a {@code SynchronousBundleListener}.
+ * 
+ * <p>
+ * For {@code BundleEvent} types {@link BundleEvent#STARTED STARTED} and
+ * {@link BundleEvent#LAZY_ACTIVATION LAZY_ACTIVATION}, the Framework must not
+ * hold the referenced bundle's "state change" lock when the
+ * {@code BundleEvent} is delivered to a
+ * {@code SynchronousBundleListener}. For the other
+ * {@code BundleEvent} types, the Framework must hold the referenced
+ * bundle's "state change" lock when the {@code BundleEvent} is
+ * delivered to a {@code SynchronousBundleListener}. A
+ * {@code SynchronousBundleListener} cannot directly call life cycle
+ * methods on the referenced bundle when the Framework is holding the referenced
+ * bundle's "state change" lock.
+ * 
  * <p>
- * A <code>SynchronousBundleListener</code> object is registered with the
+ * A {@code SynchronousBundleListener} object is registered with the
  * Framework using the {@link BundleContext#addBundleListener} method.
- * <code>SynchronousBundleListener</code> objects are called with a
- * <code>BundleEvent</code> object when a bundle has been installed, resolved,
+ * {@code SynchronousBundleListener} objects are called with a
+ * {@code BundleEvent} object when a bundle has been installed, resolved,
  * starting, started, stopping, stopped, updated, unresolved, or uninstalled.
  * <p>
- * Unlike normal <code>BundleListener</code> objects,
- * <code>SynchronousBundleListener</code>s are synchronously called during
+ * Unlike normal {@code BundleListener} objects,
+ * {@code SynchronousBundleListener}s are synchronously called during
  * bundle lifecycle processing. The bundle lifecycle processing will not proceed
- * until all <code>SynchronousBundleListener</code>s have completed.
- * <code>SynchronousBundleListener</code> objects will be called prior to
- * <code>BundleListener</code> objects.
+ * until all {@code SynchronousBundleListener}s have completed.
+ * {@code SynchronousBundleListener} objects will be called prior to
+ * {@code BundleListener} objects.
  * <p>
- * <code>AdminPermission[bundle,LISTENER]</code> is required to add or remove
- * a <code>SynchronousBundleListener</code> object.
+ * {@code AdminPermission[bundle,LISTENER]} is required to add or remove a
+ * {@code SynchronousBundleListener} object.
  * 
  * @since 1.1
  * @see BundleEvent
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: b22484f48ebdcb2141da9bba9eb65f5c40e0f520 $
  */
 
 public interface SynchronousBundleListener extends BundleListener {
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Version.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Version.java
index 7317495..fd2484e 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Version.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/Version.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,24 +28,25 @@ import java.util.StringTokenizer;
  * <li>Major version. A non-negative integer.</li>
  * <li>Minor version. A non-negative integer.</li>
  * <li>Micro version. A non-negative integer.</li>
- * <li>Qualifier. A text string. See <code>Version(String)</code> for the
+ * <li>Qualifier. A text string. See {@code Version(String)} for the
  * format of the qualifier string.</li>
  * </ol>
  * 
  * <p>
- * <code>Version</code> objects are immutable.
+ * {@code Version} objects are immutable.
  * 
  * @since 1.3
  * @Immutable
- * @version $Revision: 6860 $
+ * @version $Id: a71e2e2d7685e65b5bbe375efdf97fda16eff0a5 $
  */
 
-public class Version implements Comparable {
+public class Version implements Comparable<Version> {
 	private final int			major;
 	private final int			minor;
 	private final int			micro;
 	private final String		qualifier;
-	private static final String	SEPARATOR		= ".";					//$NON-NLS-1$
+	private static final String	SEPARATOR		= ".";
+	private transient String	versionString;
 
 	/**
 	 * The empty version "0.0.0".
@@ -75,20 +76,21 @@ public class Version implements Comparable {
 	 * @param minor Minor component of the version identifier.
 	 * @param micro Micro component of the version identifier.
 	 * @param qualifier Qualifier component of the version identifier. If
-	 *        <code>null</code> is specified, then the qualifier will be set to
+	 *        {@code null} is specified, then the qualifier will be set to
 	 *        the empty string.
 	 * @throws IllegalArgumentException If the numerical components are negative
 	 *         or the qualifier string is invalid.
 	 */
 	public Version(int major, int minor, int micro, String qualifier) {
 		if (qualifier == null) {
-			qualifier = ""; //$NON-NLS-1$
+			qualifier = "";
 		}
 
 		this.major = major;
 		this.minor = minor;
 		this.micro = micro;
 		this.qualifier = qualifier;
+		versionString = null;
 		validate();
 	}
 
@@ -111,46 +113,51 @@ public class Version implements Comparable {
 	 * There must be no whitespace in version.
 	 * 
 	 * @param version String representation of the version identifier.
-	 * @throws IllegalArgumentException If <code>version</code> is improperly
+	 * @throws IllegalArgumentException If {@code version} is improperly
 	 *         formatted.
 	 */
 	public Version(String version) {
 		int maj = 0;
 		int min = 0;
 		int mic = 0;
-		String qual = ""; //$NON-NLS-1$
+		String qual = "";
 
 		try {
 			StringTokenizer st = new StringTokenizer(version, SEPARATOR, true);
 			maj = Integer.parseInt(st.nextToken());
 
-			if (st.hasMoreTokens()) {
+			if (st.hasMoreTokens()) { // minor
 				st.nextToken(); // consume delimiter
 				min = Integer.parseInt(st.nextToken());
 
-				if (st.hasMoreTokens()) {
+				if (st.hasMoreTokens()) { // micro
 					st.nextToken(); // consume delimiter
 					mic = Integer.parseInt(st.nextToken());
 
-					if (st.hasMoreTokens()) {
+					if (st.hasMoreTokens()) { // qualifier
 						st.nextToken(); // consume delimiter
-						qual = st.nextToken();
+						qual = st.nextToken(""); // remaining string
 
-						if (st.hasMoreTokens()) {
-							throw new IllegalArgumentException("invalid format"); //$NON-NLS-1$
+						if (st.hasMoreTokens()) { // fail safe
+							throw new IllegalArgumentException(
+									"invalid format: " + version);
 						}
 					}
 				}
 			}
 		}
 		catch (NoSuchElementException e) {
-			throw new IllegalArgumentException("invalid format"); //$NON-NLS-1$
+			IllegalArgumentException iae = new IllegalArgumentException(
+					"invalid format: " + version);
+			iae.initCause(e);
+			throw iae;
 		}
 
 		major = maj;
 		minor = min;
 		micro = mic;
 		qualifier = qual;
+		versionString = null;
 		validate();
 	}
 
@@ -162,13 +169,13 @@ public class Version implements Comparable {
 	 */
 	private void validate() {
 		if (major < 0) {
-			throw new IllegalArgumentException("negative major"); //$NON-NLS-1$
+			throw new IllegalArgumentException("negative major");
 		}
 		if (minor < 0) {
-			throw new IllegalArgumentException("negative minor"); //$NON-NLS-1$
+			throw new IllegalArgumentException("negative minor");
 		}
 		if (micro < 0) {
-			throw new IllegalArgumentException("negative micro"); //$NON-NLS-1$
+			throw new IllegalArgumentException("negative micro");
 		}
 		char[] chars = qualifier.toCharArray();
 		for (int i = 0, length = chars.length; i < length; i++) {
@@ -185,8 +192,8 @@ public class Version implements Comparable {
 			if ((ch == '_') || (ch == '-')) {
 				continue;
 			}
-			throw new IllegalArgumentException(
-					"invalid qualifier: " + qualifier); //$NON-NLS-1$
+			throw new IllegalArgumentException("invalid qualifier: "
+					+ qualifier);
 		}
 	}
 
@@ -194,15 +201,15 @@ public class Version implements Comparable {
 	 * Parses a version identifier from the specified string.
 	 * 
 	 * <p>
-	 * See <code>Version(String)</code> for the format of the version string.
+	 * See {@code Version(String)} for the format of the version string.
 	 * 
 	 * @param version String representation of the version identifier. Leading
 	 *        and trailing whitespace will be ignored.
-	 * @return A <code>Version</code> object representing the version
-	 *         identifier. If <code>version</code> is <code>null</code> or
-	 *         the empty string then <code>emptyVersion</code> will be
+	 * @return A {@code Version} object representing the version
+	 *         identifier. If {@code version} is {@code null} or
+	 *         the empty string then {@code emptyVersion} will be
 	 *         returned.
-	 * @throws IllegalArgumentException If <code>version</code> is improperly
+	 * @throws IllegalArgumentException If {@code version} is improperly
 	 *         formatted.
 	 */
 	public static Version parseVersion(String version) {
@@ -258,13 +265,16 @@ public class Version implements Comparable {
 	 * Returns the string representation of this version identifier.
 	 * 
 	 * <p>
-	 * The format of the version string will be <code>major.minor.micro</code>
+	 * The format of the version string will be {@code major.minor.micro}
 	 * if qualifier is the empty string or
-	 * <code>major.minor.micro.qualifier</code> otherwise.
+	 * {@code major.minor.micro.qualifier} otherwise.
 	 * 
 	 * @return The string representation of this version identifier.
 	 */
 	public String toString() {
+		if (versionString != null) {
+			return versionString;
+		}
 		int q = qualifier.length();
 		StringBuffer result = new StringBuffer(20 + q);
 		result.append(major);
@@ -276,7 +286,7 @@ public class Version implements Comparable {
 			result.append(SEPARATOR);
 			result.append(qualifier);
 		}
-		return result.toString();
+		return versionString = result.toString();
 	}
 
 	/**
@@ -290,17 +300,17 @@ public class Version implements Comparable {
 	}
 
 	/**
-	 * Compares this <code>Version</code> object to another object.
+	 * Compares this {@code Version} object to another object.
 	 * 
 	 * <p>
 	 * A version is considered to be <b>equal to </b> another version if the
 	 * major, minor and micro components are equal and the qualifier component
-	 * is equal (using <code>String.equals</code>).
+	 * is equal (using {@code String.equals}).
 	 * 
-	 * @param object The <code>Version</code> object to be compared.
-	 * @return <code>true</code> if <code>object</code> is a
-	 *         <code>Version</code> and is equal to this object;
-	 *         <code>false</code> otherwise.
+	 * @param object The {@code Version} object to be compared.
+	 * @return {@code true} if {@code object} is a
+	 *         {@code Version} and is equal to this object;
+	 *         {@code false} otherwise.
 	 */
 	public boolean equals(Object object) {
 		if (object == this) { // quicktest
@@ -317,7 +327,7 @@ public class Version implements Comparable {
 	}
 
 	/**
-	 * Compares this <code>Version</code> object to another object.
+	 * Compares this {@code Version} object to another {@code Version}.
 	 * 
 	 * <p>
 	 * A version is considered to be <b>less than </b> another version if its
@@ -327,27 +337,25 @@ public class Version implements Comparable {
 	 * and its micro component is less than the other version's micro component,
 	 * or the major, minor and micro components are equal and it's qualifier
 	 * component is less than the other version's qualifier component (using
-	 * <code>String.compareTo</code>).
+	 * {@code String.compareTo}).
 	 * 
 	 * <p>
 	 * A version is considered to be <b>equal to</b> another version if the
 	 * major, minor and micro components are equal and the qualifier component
-	 * is equal (using <code>String.compareTo</code>).
+	 * is equal (using {@code String.compareTo}).
 	 * 
-	 * @param object The <code>Version</code> object to be compared.
-	 * @return A negative integer, zero, or a positive integer if this object is
-	 *         less than, equal to, or greater than the specified
-	 *         <code>Version</code> object.
+	 * @param other The {@code Version} object to be compared.
+	 * @return A negative integer, zero, or a positive integer if this version
+	 *         is less than, equal to, or greater than the specified
+	 *         {@code Version} object.
 	 * @throws ClassCastException If the specified object is not a
-	 *         <code>Version</code>.
+	 *         {@code Version} object.
 	 */
-	public int compareTo(Object object) {
-		if (object == this) { // quicktest
+	public int compareTo(Version other) {
+		if (other == this) { // quicktest
 			return 0;
 		}
 
-		Version other = (Version) object;
-
 		int result = major - other.major;
 		if (result != 0) {
 			return result;
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/bundle/EventHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/bundle/EventHook.java
new file mode 100644
index 0000000..4b50ab3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/bundle/EventHook.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.hooks.bundle;
+
+import java.util.Collection;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+
+/** 
+ * OSGi Framework Bundle Event Hook Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called during framework lifecycle
+ * (install, start, stop, update, and uninstall bundle) operations.
+ * 
+ * @ThreadSafe
+ * @version $Id: 18ea1ec1f14f47410a43e99be4da3b2583149722 $
+ */
+public interface EventHook {
+
+	/**
+	 * Bundle event hook method.  This method is called prior to bundle event
+	 * delivery when a bundle is installed, resolved, started, stopped, unresolved, or
+	 * uninstalled.  This method can filter the bundles which receive the event.
+	 * <p>
+	 * This method must be called by the framework one and only one time for each bundle 
+	 * event generated, this included bundle events which are generated when there are no 
+	 * bundle listeners registered.  This method must be called on the same thread that is 
+	 * performing the action which generated the specified event.  The specified 
+	 * collection includes bundle contexts with synchronous and asynchronous bundle 
+	 * listeners registered with them.
+	 * 
+	 * @param event The bundle event to be delivered
+	 * @param contexts A collection of Bundle Contexts for bundles which have
+	 *        listeners to which the specified event will be delivered. The
+	 *        implementation of this method may remove bundle contexts from the
+	 *        collection to prevent the event from being delivered to the
+	 *        associated bundles. The collection supports all the optional
+	 *        {@code Collection} operations except {@code add} and
+	 *        {@code addAll}. Attempting to add to the collection will
+	 *        result in an {@code UnsupportedOperationException}. The
+	 *        collection is not synchronized.
+	 */
+	void event(BundleEvent event, Collection<BundleContext> contexts);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/bundle/FindHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/bundle/FindHook.java
new file mode 100644
index 0000000..53c57fe
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/bundle/FindHook.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) OSGi Alliance (2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.framework.hooks.bundle;
+
+import java.util.Collection;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+
+/**
+ * OSGi Framework Bundle Context Hook Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called during framework bundle find
+ * (get bundles) operations.
+ * 
+ * @ThreadSafe
+ * @version $Id: 64a98074fa8331b0cd21989f9c8583b99b2370cf $
+ */
+public interface FindHook {
+	/**
+	 * Find hook method. This method is called for the following:
+	 * <ul>
+	 * <li>Bundle find operations using {@link BundleContext#getBundle(long)}
+	 * and {@link BundleContext#getBundles()} methods. The find method can
+	 * filter the result of the find operation. Note that a find operation using
+	 * the {@link BundleContext#getBundle(String)} method does not cause the
+	 * find method to be called.</li>
+	 * <li>Bundle install operations when an existing bundle is already
+	 * installed at a given location. In this case, the find method is called to
+	 * determine if the context performing the install operation is able to find
+	 * the bundle. If the context cannot find the existing bundle then the
+	 * install operation must fail with a
+	 * {@link BundleException#REJECTED_BY_HOOK} exception.</li>
+	 * </ul>
+	 * 
+	 * @param context
+	 *            The bundle context of the bundle performing the find
+	 *            operation.
+	 * @param bundles
+	 *            A collection of Bundles to be returned as a result of the find
+	 *            operation. The implementation of this method may remove
+	 *            bundles from the collection to prevent the bundles from being
+	 *            returned to the bundle performing the find operation. The
+	 *            collection supports all the optional {@code Collection}
+	 *            operations except {@code add} and {@code addAll}. Attempting
+	 *            to add to the collection will result in an
+	 *            {@code UnsupportedOperationException}. The collection is not
+	 *            synchronized.
+	 */
+	void find(BundleContext context, Collection<Bundle> bundles);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/resolver/ResolverHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/resolver/ResolverHook.java
new file mode 100644
index 0000000..bbde7ff
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/resolver/ResolverHook.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.hooks.resolver;
+
+import java.util.Collection;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRequirement;
+import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.framework.wiring.FrameworkWiring;
+
+/**
+ * OSGi Framework Resolver Hook instances are obtained from the OSGi
+ * {@link ResolverHookFactory Framework Resolver Hook Factory} service.
+ * 
+ * <p>
+ * A Resolver Hook instance is called by the framework during a resolve process.
+ * A resolver hook may influence the outcome of a resolve process by removing
+ * entries from shrinkable collections that are passed to the hook during a
+ * resolve process. A shrinkable collection is a {@code Collection} that
+ * supports all remove operations. Any other attempts to modify a shrinkable
+ * collection will result in an {@code UnsupportedOperationException} being
+ * thrown.
+ * 
+ * <p>
+ * The following steps outline the way a framework uses the resolver hooks
+ * during a resolve process.
+ * <ol>
+ * <li>Collect a snapshot of registered resolver hook factories that will be
+ * called during the current resolve process. Any hook factories registered
+ * after the snapshot is taken must not be called during the current resolve
+ * process. A resolver hook factory contained in the snapshot may become
+ * unregistered during the resolve process. The framework should handle this and
+ * stop calling the resolver hook instance provided by the unregistered hook
+ * factory and the current resolve process must fail. If possible, an exception
+ * must be thrown to the caller of the API which triggered the resolve process.
+ * In cases where the the caller is not available a framework event of type
+ * error should be fired.</li>
+ * <li>For each registered hook factory call the
+ * {@link ResolverHookFactory#begin(Collection)} method to inform the hooks
+ * about a resolve process beginning and to obtain a Resolver Hook instance that
+ * will be used for the duration of the resolve process.</li>
+ * <li>Determine the collection of unresolved bundle revisions that may be
+ * considered for resolution during the current resolution process and place
+ * each of the bundle revisions in a shrinkable collection {@code R}. For each
+ * resolver hook call the {@link #filterResolvable(Collection)} method with the
+ * shrinkable collection {@code R}.</li>
+ * <li>The shrinkable collection {@code R} now contains all the unresolved
+ * bundle revisions that may end up as resolved at the end of the current
+ * resolve process. Any other bundle revisions that got removed from the
+ * shrinkable collection {@code R} must not end up as resolved at the end of the
+ * current resolve process.</li>
+ * <li>For each bundle revision {@code B} left in the shrinkable collection
+ * {@code R} that represents a singleton bundle do the following:<br/>
+ * Determine the collection of available capabilities that have a name space of
+ * {@link BundleRevision#BUNDLE_NAMESPACE osgi.wiring.bundle}, are singletons,
+ * and have the same symbolic name as the singleton bundle revision {@code B}
+ * and place each of the matching capabilities into a shrinkable collection
+ * {@code S}.
+ * 
+ * Remove the {@link BundleRevision#BUNDLE_NAMESPACE osgi.wiring.bundle}
+ * capability provided by bundle revision {@code B} from shrinkable collection
+ * {@code S}. A singleton bundle cannot collide with itself.
+ * 
+ * For each resolver hook call the
+ * {@link #filterSingletonCollisions(BundleCapability, Collection)} with the
+ * {@link BundleRevision#BUNDLE_NAMESPACE osgi.wiring.bundle} capability
+ * provided by bundle revision {@code B} and the shrinkable collection {@code S}
+ * 
+ * The shrinkable collection {@code S} now contains all singleton
+ * {@link BundleRevision#BUNDLE_NAMESPACE osgi.wiring.bundle} capabilities that
+ * can influence the ability of bundle revision {@code B} to resolve.</li>
+ * <li>During a resolve process a framework is free to attempt to resolve any or
+ * all bundles contained in shrinkable collection {@code R}. For each bundle
+ * revision {@code B} left in the shrinkable collection {@code R} which the
+ * framework attempts to resolve the following steps must be followed:
+ * <p/>
+ * For each requirement {@code T} specified by bundle revision {@code B}
+ * determine the collection of capabilities that satisfy (or match) the
+ * requirement and place each matching capability into a shrinkable collection
+ * {@code C}. A capability is considered to match a particular requirement if
+ * its attributes satisfy a specified requirement and the requirer bundle has
+ * permission to access the capability.
+ * 
+ * <p/>
+ * For each resolver hook call the
+ * {@link #filterMatches(BundleRequirement, Collection)} with the requirement
+ * {@code T} and the shrinkable collection {@code C}.
+ * 
+ * <p/>
+ * The shrinkable collection {@code C} now contains all the capabilities that
+ * may be used to satisfy the requirement {@code T}. Any other capabilities that
+ * got removed from the shrinkable collection {@code C} must not be used to
+ * satisfy requirement {@code T}.</li>
+ * <li>For each resolver hook call the {@link #end()} method to inform the hooks
+ * about a resolve process ending.</li>
+ * </ol>
+ * In all cases, the order in which the resolver hooks are called is the reverse
+ * compareTo ordering of their Service References. That is, the service with the
+ * highest ranking number must be called first. In cases where a shrinkable
+ * collection becomes empty the framework is required to call the remaining
+ * registered hooks.
+ * <p>
+ * Resolver hooks are low level. Implementations of the resolver hook must be
+ * careful not to create an unresolvable state which is very hard for a
+ * developer or a provisioner to diagnose. Resolver hooks also must not be
+ * allowed to start another synchronous resolve process (e.g. by calling
+ * {@link Bundle#start()} or {@link FrameworkWiring#resolveBundles(Collection)}
+ * ). The framework must detect this and throw an {@link IllegalStateException}.
+ * 
+ * @see ResolverHookFactory
+ * @NotThreadSafe
+ * @version $Id: ea23400257d780706250f8825ec886aaebb0e5d8 $
+ */
+public interface ResolverHook {
+	/**
+	 * Filter resolvable candidates hook method.  This method may be called
+	 * multiple times during a single resolve process.
+	 * This method can filter the collection of candidates by removing 
+	 * potential candidates.  Removing a candidate will prevent the candidate
+	 * from resolving during the current resolve process. 
+	 * 
+	 * @param candidates the collection of resolvable candidates available during
+	 * a resolve process. 
+	 */
+	void filterResolvable(Collection<BundleRevision> candidates);
+
+	/**
+	 * Filter singleton collisions hook method. This method is called during the
+	 * resolve process for the specified singleton. The specified singleton
+	 * represents a singleton capability and the specified collection represent
+	 * a collection of singleton capabilities which are considered collision
+	 * candidates. The singleton capability and the collection of collision
+	 * candidates must all use the same name space.
+	 * <p>
+	 * Currently only capabilities with the name space of
+	 * {@link BundleRevision#BUNDLE_NAMESPACE osgi.wiring.bundle} can be
+	 * singletons. In that case all the collision candidates have the name space
+	 * of {@link BundleRevision#BUNDLE_NAMESPACE osgi.wiring.bundle}, are
+	 * singletons, and have the same symbolic name as the specified singleton
+	 * capability.
+	 * <p>
+	 * In the future, capabilities in other name spaces may support the
+	 * singleton concept. Hook implementations should be prepared to receive
+	 * calls to this method for capabilities in name spaces other than
+	 * {@link BundleRevision#BUNDLE_NAMESPACE osgi.wiring.bundle}.
+	 * <p>
+	 * This method can filter the list of collision candidates by removing
+	 * potential collisions. Removing a collision candidate will allow the
+	 * specified singleton to resolve regardless of the resolution state of the
+	 * removed collision candidate.
+	 * 
+	 * @param singleton the singleton involved in a resolve process
+	 * @param collisionCandidates a collection of singleton collision candidates
+	 */
+	void filterSingletonCollisions(BundleCapability singleton, Collection<BundleCapability> collisionCandidates);
+
+	/**
+	 * Filter matches hook method. This method is called during the resolve process for the 
+	 * specified requirement.  The collection of candidates match the specified requirement.
+	 * This method can filter the collection of matching candidates by removing candidates from 
+	 * the collection.  Removing a candidate will prevent the resolve process from choosing the 
+	 * removed candidate to satisfy the requirement.
+	 * <p>
+	 * All of the candidates will have the same name space and will 
+	 * match the specified requirement.
+	 * <p>
+	 * If the Java Runtime Environment supports permissions then the collection of 
+	 * candidates will only contain candidates for which the requirer has permission to
+	 * access.
+	 * @param requirement the requirement to filter candidates for
+	 * @param candidates a collection of candidates that match the requirement
+	 */
+	void filterMatches(BundleRequirement requirement, Collection<BundleCapability> candidates);
+
+	/**
+	 * This method is called once at the end of the resolve process.
+	 * After the end method is called the resolve process has ended.
+	 * The framework must not hold onto this resolver hook instance
+	 * after end has been called.
+	 */
+	void end();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/resolver/ResolverHookFactory.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/resolver/ResolverHookFactory.java
new file mode 100644
index 0000000..cd07790
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/resolver/ResolverHookFactory.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) OSGi Alliance (2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.hooks.resolver;
+
+import java.util.Collection;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.framework.wiring.FrameworkWiring;
+
+/** 
+ * OSGi Framework Resolver Hook Factory Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called by the framework during 
+ * a bundle resolver process to obtain a {@link ResolverHook resolver hook}
+ * instance which will be used for the duration of a resolve process.
+ * 
+ * @ThreadSafe
+ * @see ResolverHook
+ * @version $Id: 08a6fba0f95499d08047282124b88256d33e1ce4 $
+ */
+public interface ResolverHookFactory {
+	/**
+	 * This method is called by the framework each time a resolve process begins
+	 * to obtain a {@link ResolverHook resolver hook} instance.  This resolver hook 
+	 * instance will be used for the duration of the resolve process.  At the end of 
+	 * the resolve process the method {@link ResolverHook#end()} must be called by 
+	 * the framework and the framework must not hold any references of the resolver 
+	 * hook instance.
+	 * <p>
+	 * The triggers represent the collection of bundles which triggered
+	 * the resolve process.  This collection may be empty if the triggers
+	 * cannot be determined by the framework.  In most cases the triggers 
+	 * can easily be determined.  Calling certain methods on 
+	 * {@link Bundle bundle} when a bundle is in the {@link Bundle#INSTALLED INSTALLED} 
+	 * state will cause the framework to begin a resolve process in order to resolve the 
+	 * bundle.  The following methods will start a resolve process in this case:
+	 * <ul>
+	 *   <li>{@link Bundle#start() start}</li>
+	 *   <li>{@link Bundle#loadClass(String) loadClass}</li>
+	 *   <li>{@link Bundle#findEntries(String, String, boolean) findEntries}</li>
+	 *   <li>{@link Bundle#getResource(String) getResource}</li>
+	 *   <li>{@link Bundle#getResources(String) getResources}</li>
+	 * </ul> 
+	 * In such cases the collection will contain the single bundle which the
+	 * framework is trying to resolve.  Other cases will cause multiple bundles to be
+	 * included in the trigger bundles collection.  When {@link FrameworkWiring#resolveBundles(Collection)
+	 * resolveBundles} is called the collection of triggers must include all the current bundle 
+	 * revisions for bundles passed to resolveBundles which are in the {@link Bundle#INSTALLED INSTALLED}
+	 * state.
+	 * <p>
+	 * When {@link FrameworkWiring#refreshBundles(Collection, org.osgi.framework.FrameworkListener...)}
+	 * is called the collection of triggers is determined with the following steps:
+	 * <ul>
+	 *   <li>If the collection of bundles passed is null then {@link FrameworkWiring#getRemovalPendingBundles()}
+	 *   is called to get the initial collection of bundles.</li>
+	 *   <li>The equivalent of calling {@link FrameworkWiring#getDependencyClosure(Collection)} is called with
+	 *   the initial collection of bundles to get the dependency closure collection of the bundles being refreshed.</li>
+	 *   <li>Remove any non-active bundles from the dependency closure collection.</li>
+	 *   <li>For each bundle remaining in the dependency closure collection get the current bundle revision
+	 *   and add it to the collection of triggers.</li> 
+	 * </ul>
+	 * <p>
+	 * As described above, a resolve process is typically initiated as a result of calling API that causes the 
+	 * framework to attempt to resolve one or more bundles.  
+	 * The framework is free to start a resolve process at any time for reasons other than calls to framework API.
+	 * For example, a resolve process may be used by the framework for diagnostic purposes and result in no
+	 * bundles actually becoming resolved at the end of the process.
+	 * Resolver hook implementations must be prepared for resolve processes that are initiated for other reasons
+	 * besides calls to framework API.
+	 * @param triggers an unmodifiable collection of bundles which triggered the resolve process.
+	 * This collection may be empty if the collection of trigger bundles cannot be
+	 * determined.
+	 * @return a resolver hook instance to be used for the duration of the resolve process.
+	 * A {@code null} value may be returned which indicates this resolver hook factory abstains from
+	 * the resolve process.
+	 */
+	ResolverHook begin(Collection<BundleRevision> triggers);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/EventHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/EventHook.java
index 1249493..fb2ab09 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/EventHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/EventHook.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.osgi.framework.hooks.service;
 
 import java.util.Collection;
 
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceEvent;
 
 /**
@@ -28,7 +29,8 @@ import org.osgi.framework.ServiceEvent;
  * (register, modify, and unregister service) operations.
  * 
  * @ThreadSafe
- * @version $Revision: 6967 $
+ * @deprecated As of 1.1. Replaced by {@link EventListenerHook}.
+ * @version $Id: 8fb8cfa2c8847f99fd84711e12f02a57bf06932e $
  */
 
 public interface EventHook {
@@ -38,17 +40,15 @@ public interface EventHook {
 	 * This method can filter the bundles which receive the event.
 	 * 
 	 * @param event The service event to be delivered.
-	 * @param contexts A <code>Collection</code> of Bundle Contexts for bundles
-	 *        which have listeners to which the specified event will be
-	 *        delivered. The implementation of this method may remove bundle
-	 *        contexts from the collection to prevent the event from being
-	 *        delivered to the associated bundles. The collection supports all
-	 *        the optional <code>Collection</code> operations except
-	 *        <code>add</code> and <code>addAll</code>. Attempting to add to the
-	 *        collection will result in an
-	 *        <code>UnsupportedOperationException</code>. The collection is not
-	 *        synchronized.
+	 * @param contexts A collection of Bundle Contexts for bundles which have
+	 *        listeners to which the specified event will be delivered. The
+	 *        implementation of this method may remove bundle contexts from the
+	 *        collection to prevent the event from being delivered to the
+	 *        associated bundles. The collection supports all the optional
+	 *        {@code Collection} operations except {@code add} and
+	 *        {@code addAll}. Attempting to add to the collection will
+	 *        result in an {@code UnsupportedOperationException}. The
+	 *        collection is not synchronized.
 	 */
-	void event(ServiceEvent event,
-			Collection/* <BundleContext> */contexts);
+	void event(ServiceEvent event, Collection<BundleContext> contexts);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/EventListenerHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/EventListenerHook.java
new file mode 100644
index 0000000..6f25291
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/EventListenerHook.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.hooks.service;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.hooks.service.ListenerHook.ListenerInfo;
+
+/**
+ * OSGi Framework Service Event Listener Hook Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called during framework service
+ * (register, modify, and unregister service) operations.
+ * 
+ * @ThreadSafe
+ * @since 1.1
+ * @version $Id: 61c6aa7e7d4c85b3e5a6a3a340155bcda0074505 $
+ */
+
+public interface EventListenerHook {
+	/**
+	 * Event listener hook method. This method is called prior to service event
+	 * delivery when a publishing bundle registers, modifies or unregisters a
+	 * service. This method can filter the listeners which receive the event.
+	 * 
+	 * @param event The service event to be delivered.
+	 * @param listeners A map of Bundle Contexts to a collection of Listener
+	 *        Infos for the bundle's listeners to which the specified event will
+	 *        be delivered. The implementation of this method may remove bundle
+	 *        contexts from the map and listener infos from the collection
+	 *        values to prevent the event from being delivered to the associated
+	 *        listeners. The map supports all the optional {@code Map}
+	 *        operations except {@code put} and {@code putAll}. Attempting to
+	 *        add to the map will result in an
+	 *        {@code UnsupportedOperationException}. The collection values in
+	 *        the map supports all the optional {@code Collection} operations
+	 *        except {@code add} and {@code addAll}. Attempting to add to a
+	 *        collection will result in an {@code UnsupportedOperationException}
+	 *        . The map and the collections are not synchronized.
+	 */
+	void event(ServiceEvent event,
+			Map<BundleContext, Collection<ListenerInfo>> listeners);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/FindHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/FindHook.java
index 0de1f0b..cb334c5 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/FindHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/FindHook.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@ package org.osgi.framework.hooks.service;
 import java.util.Collection;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 
 /**
  * OSGi Framework Service Find Hook Service.
@@ -28,7 +29,7 @@ import org.osgi.framework.BundleContext;
  * (get service references) operations.
  * 
  * @ThreadSafe
- * @version $Revision: 6967 $
+ * @version $Id: 4a939200fa6634a563379b057e11bd1b5d174b9d $
  */
 
 public interface FindHook {
@@ -39,25 +40,23 @@ public interface FindHook {
 	 * 
 	 * @param context The bundle context of the bundle performing the find
 	 *        operation.
-	 * @param name The class name of the services to find or <code>null</code>
+	 * @param name The class name of the services to find or {@code null}
 	 *        to find all services.
 	 * @param filter The filter criteria of the services to find or
-	 *        <code>null</code> for no filter criteria.
-	 * @param allServices <code>true</code> if the find operation is the result
+	 *        {@code null} for no filter criteria.
+	 * @param allServices {@code true} if the find operation is the result
 	 *        of a call to
 	 *        {@link BundleContext#getAllServiceReferences(String, String)}
-	 * @param references A <code>Collection</code> of Service References to be
-	 *        returned as a result of the find operation. The implementation of
-	 *        this method may remove service references from the collection to
-	 *        prevent the references from being returned to the bundle
-	 *        performing the find operation. The collection supports all the
-	 *        optional <code>Collection</code> operations except
-	 *        <code>add</code> and <code>addAll</code>. Attempting to add to the
-	 *        collection will result in an
-	 *        <code>UnsupportedOperationException</code>. The collection is not
-	 *        synchronized.
+	 * @param references A collection of Service References to be returned as a
+	 *        result of the find operation. The implementation of this method
+	 *        may remove service references from the collection to prevent the
+	 *        references from being returned to the bundle performing the find
+	 *        operation. The collection supports all the optional
+	 *        {@code Collection} operations except {@code add} and
+	 *        {@code addAll}. Attempting to add to the collection will
+	 *        result in an {@code UnsupportedOperationException}. The
+	 *        collection is not synchronized.
 	 */
 	void find(BundleContext context, String name, String filter,
-			boolean allServices,
-			Collection/* <ServiceReference> */references);
+			boolean allServices, Collection<ServiceReference< ? >> references);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/ListenerHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/ListenerHook.java
index 5934c0c..bdac7b5 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/ListenerHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/service/ListenerHook.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@ import org.osgi.framework.BundleContext;
  * addition and removal.
  * 
  * @ThreadSafe
- * @version $Revision: 6967 $
+ * @version $Id: c1687e95e568589cf3e6d927b7d372c9f88c5d16 $
  */
 
 public interface ListenerHook {
@@ -40,13 +40,13 @@ public interface ListenerHook {
 	 * method will be called to provide the current collection of service
 	 * listeners which had been added prior to the hook being registered.
 	 * 
-	 * @param listeners A <code>Collection</code> of {@link ListenerInfo}s for
-	 *        newly added service listeners which are now listening to service
-	 *        events. Attempting to add to or remove from the collection will
-	 *        result in an <code>UnsupportedOperationException</code>. The
-	 *        collection is not synchronized.
+	 * @param listeners A collection of {@link ListenerInfo}s for newly added
+	 *        service listeners which are now listening to service events.
+	 *        Attempting to add to or remove from the collection will result in
+	 *        an {@code UnsupportedOperationException}. The collection is
+	 *        not synchronized.
 	 */
-	void added(Collection/* <ListenerInfo> */listeners);
+	void added(Collection<ListenerInfo> listeners);
 
 	/**
 	 * Removed listeners hook method. This method is called to provide the hook
@@ -54,19 +54,20 @@ public interface ListenerHook {
 	 * method will be called as service listeners are removed while this hook is
 	 * registered.
 	 * 
-	 * @param listeners A <code>Collection</code> of {@link ListenerInfo}s for
-	 *        newly removed service listeners which are no longer listening to
-	 *        service events. Attempting to add to or remove from the collection
-	 *        will result in an <code>UnsupportedOperationException</code>. The
-	 *        collection is not synchronized.
+	 * @param listeners A collection of {@link ListenerInfo}s for newly removed
+	 *        service listeners which are no longer listening to service events.
+	 *        Attempting to add to or remove from the collection will result in
+	 *        an {@code UnsupportedOperationException}. The collection is
+	 *        not synchronized.
 	 */
-	void removed(Collection/* <ListenerInfo> */listeners);
+	void removed(Collection<ListenerInfo> listeners);
 
 	/**
 	 * Information about a Service Listener. This interface describes the bundle
 	 * which added the Service Listener and the filter with which it was added.
 	 * 
 	 * @ThreadSafe
+	 * @noimplement
 	 */
 	public interface ListenerInfo {
 		/**
@@ -80,17 +81,17 @@ public interface ListenerHook {
 		 * Return the filter string with which the listener was added.
 		 * 
 		 * @return The filter string with which the listener was added. This may
-		 *         be <code>null</code> if the listener was added without a
+		 *         be {@code null} if the listener was added without a
 		 *         filter.
 		 */
 		String getFilter();
 
 		/**
 		 * Return the state of the listener for this addition and removal life
-		 * cycle. Initially this method will return <code>false</code>
+		 * cycle. Initially this method will return {@code false}
 		 * indicating the listener has been added but has not been removed.
 		 * After the listener has been removed, this method must always return
-		 * <code>true</code>.
+		 * {@code true}.
 		 * 
 		 * <p>
 		 * There is an extremely rare case in which removed notification to
@@ -102,32 +103,32 @@ public interface ListenerHook {
 		 * service listener. This method can be used to detect this rare
 		 * occurrence.
 		 * 
-		 * @return <code>false</code> if the listener has not been been removed,
-		 *         <code>true</code> otherwise.
+		 * @return {@code false} if the listener has not been been removed,
+		 *         {@code true} otherwise.
 		 */
 		boolean isRemoved();
 
 		/**
-		 * Compares this <code>ListenerInfo</code> to another
-		 * <code>ListenerInfo</code>. Two <code>ListenerInfo</code>s are equals
+		 * Compares this {@code ListenerInfo} to another
+		 * {@code ListenerInfo}. Two {@code ListenerInfo}s are equals
 		 * if they refer to the same listener for a given addition and removal
 		 * life cycle. If the same listener is added again, it must have a
-		 * different <code>ListenerInfo</code> which is not equal to this
-		 * <code>ListenerInfo</code>.
+		 * different {@code ListenerInfo} which is not equal to this
+		 * {@code ListenerInfo}.
 		 * 
 		 * @param obj The object to compare against this
-		 *        <code>ListenerInfo</code>.
-		 * @return <code>true</code> if the other object is a
-		 *         <code>ListenerInfo</code> object and both objects refer to
+		 *        {@code ListenerInfo}.
+		 * @return {@code true} if the other object is a
+		 *         {@code ListenerInfo} object and both objects refer to
 		 *         the same listener for a given addition and removal life
 		 *         cycle.
 		 */
 		boolean equals(Object obj);
 
 		/**
-		 * Returns the hash code for this <code>ListenerInfo</code>.
+		 * Returns the hash code for this {@code ListenerInfo}.
 		 * 
-		 * @return The hash code of this <code>ListenerInfo</code>.
+		 * @return The hash code of this {@code ListenerInfo}.
 		 */
 		int hashCode();
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WeavingException.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WeavingException.java
new file mode 100644
index 0000000..8842797
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WeavingException.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.hooks.weaving;
+
+/**
+ * A weaving exception used to indicate that the class load should be failed but
+ * the weaving hook must not be blacklisted by the framework.
+ * 
+ * <p>
+ * This exception conforms to the general purpose exception chaining mechanism.
+ * 
+ * @version $Id: eb38b85f6ed66ec445fb2f0ee7143df021327a9a $
+ */
+
+public class WeavingException extends RuntimeException {
+	private static final long	serialVersionUID	= 1L;
+
+	/**
+	 * Creates a {@code WeavingException} with the specified message and
+	 * exception cause.
+	 * 
+	 * @param msg The associated message.
+	 * @param cause The cause of this exception.
+	 */
+	public WeavingException(String msg, Throwable cause) {
+		super(msg, cause);
+	}
+
+	/**
+	 * Creates a {@code WeavingException} with the specified message.
+	 * 
+	 * @param msg The message.
+	 */
+	public WeavingException(String msg) {
+		super(msg);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WeavingHook.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WeavingHook.java
new file mode 100644
index 0000000..be57658
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WeavingHook.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.hooks.weaving;
+
+/**
+ * OSGi Framework Weaving Hook Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called during framework class
+ * loading operations. Weaving hook services are called when a class is being
+ * loaded by the framework and have an opportunity to transform the class file
+ * bytes that represents the class being loaded. Weaving hooks may also ask the
+ * framework to wire in additional dynamic imports to the bundle.
+ * 
+ * <p>
+ * When a class is being loaded, the framework will create a {@link WovenClass}
+ * object for the class and pass it to each registered weaving hook service for
+ * possible modification. The first weaving hook called will see the original
+ * class file bytes. Subsequently called weaving hooks will see the class file
+ * bytes as modified by previously called weaving hooks.
+ * 
+ * @ThreadSafe
+ * @version $Id: d1985029024baba2db1c56aab1e06ee953fd6365 $
+ */
+
+public interface WeavingHook {
+	/**
+	 * Weaving hook method.
+	 * 
+	 * This method can modify the specified woven class object to weave the
+	 * class being defined.
+	 * 
+	 * <p>
+	 * If this method throws any exception, the framework must log the exception
+	 * and fail the class load in progress. This weaving hook service must be
+	 * blacklisted by the framework and must not be called again. The
+	 * blacklisting of this weaving hook service must expire when this weaving
+	 * hook service is unregistered. However, this method can throw a
+	 * {@link WeavingException} to deliberately fail the class load in progress
+	 * without being blacklisted by the framework.
+	 * 
+	 * @param wovenClass The {@link WovenClass} object that represents the data
+	 *        that will be used to define the class.
+	 * @throws WeavingException If this weaving hook wants to deliberately fail
+	 *         the class load in progress without being blacklisted by the
+	 *         framework
+	 */
+	public void weave(WovenClass wovenClass);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WovenClass.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WovenClass.java
new file mode 100644
index 0000000..34aa6d2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/hooks/weaving/WovenClass.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.hooks.weaving;
+
+import java.security.ProtectionDomain;
+import java.util.List;
+
+import org.osgi.framework.wiring.BundleWiring;
+
+/**
+ * A class being woven.
+ * 
+ * This object represents a class being woven and is passed to each
+ * {@link WeavingHook} for possible modification. It allows access to the most
+ * recently transformed class file bytes and to any additional packages that
+ * should be added to the bundle as dynamic imports.
+ * 
+ * <p>
+ * After weaving is {@link #isWeavingComplete() complete}, this object becomes
+ * effectively immutable.
+ * 
+ * @NotThreadSafe
+ * @noimplement
+ * @version $Id: c689a4c27dc39af1bf5f51338f1a8eaca1dddc1a $
+ */
+public interface WovenClass {
+
+	/**
+	 * Returns the class file bytes to be used to define the
+	 * {@link WovenClass#getClassName() named} class.
+	 * 
+	 * <p>
+	 * While weaving is not {@link #isWeavingComplete() complete}, this method
+	 * returns a reference to the class files byte array contained in this
+	 * object. After weaving is {@link #isWeavingComplete() complete}, this
+	 * object becomes effectively immutable and a copy of the class file byte
+	 * array is returned.
+	 * 
+	 * @return The bytes to be used to define the
+	 *         {@link WovenClass#getClassName() named} class.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code AdminPermission[bundle,WEAVE]} and the Java runtime
+	 *         environment supports permissions.
+	 */
+	public byte[] getBytes();
+
+	/**
+	 * Set the class file bytes to be used to define the
+	 * {@link WovenClass#getClassName() named} class. This method must not be
+	 * called outside invocations of the {@link WeavingHook#weave(WovenClass)
+	 * weave} method by the framework.
+	 * 
+	 * <p>
+	 * While weaving is not {@link #isWeavingComplete() complete}, this method
+	 * replaces the reference to the array contained in this object with the
+	 * specified array. After weaving is {@link #isWeavingComplete() complete},
+	 * this object becomes effectively immutable and this method will throw an
+	 * {@link IllegalStateException}.
+	 * 
+	 * @param newBytes The new classfile that will be used to define the
+	 *        {@link WovenClass#getClassName() named} class. The specified array
+	 *        is retained by this object and the caller must not modify the
+	 *        specified array.
+	 * @throws NullPointerException If newBytes is {@code null}.
+	 * @throws IllegalStateException If weaving is {@link #isWeavingComplete()
+	 *         complete}.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code AdminPermission[bundle,WEAVE]} and the Java runtime
+	 *         environment supports permissions.
+	 */
+	public void setBytes(byte[] newBytes);
+
+	/**
+	 * Returns the list of dynamic import package descriptions to add to the
+	 * {@link #getBundleWiring() bundle wiring} for this woven class. Changes
+	 * made to the returned list will be visible to later {@link WeavingHook
+	 * weaving hooks} called with this object. The returned list must not be
+	 * modified outside invocations of the {@link WeavingHook#weave(WovenClass)
+	 * weave} method by the framework.
+	 * 
+	 * <p>
+	 * After weaving is {@link #isWeavingComplete() complete}, this object
+	 * becomes effectively immutable and the returned list will be unmodifiable.
+	 * 
+	 * <p>
+	 * If the Java runtime environment supports permissions, the caller must
+	 * have {@code AdminPermission[bundle,WEAVE]} to modify the returned list.
+	 * 
+	 * @return A list containing zero or more dynamic import package
+	 *         descriptions to add to the bundle wiring for this woven class.
+	 *         This list must throw {@code IllegalArgumentException} if a
+	 *         malformed dynamic import package description is added.
+	 * @see "Core Specification, Dynamic Import Package, for the syntax of a dynamic import package description."
+	 */
+	public List<String> getDynamicImports();
+
+	/**
+	 * Returns whether weaving is complete in this woven class. Weaving is
+	 * complete after the last {@link WeavingHook weaving hook} is called and
+	 * the class is defined.
+	 * 
+	 * <p>
+	 * After weaving is complete, this object becomes effectively immutable.
+	 * 
+	 * @return {@code true} weaving is complete, {@code false} otherwise.
+	 */
+	public boolean isWeavingComplete();
+
+	/**
+	 * Returns the fully qualified name of the class being woven.
+	 * 
+	 * @return The fully qualified name of the class being woven.
+	 */
+	public String getClassName();
+
+	/**
+	 * Returns the protection domain to which the woven class will be assigned
+	 * when it is defined.
+	 * 
+	 * @return The protection domain to which the woven class will be assigned
+	 *         when it is defined, or {@code null} if no protection domain will
+	 *         be assigned.
+	 */
+	public ProtectionDomain getProtectionDomain();
+
+	/**
+	 * Returns the class associated with this woven class. When loading a class
+	 * for the first time this method will return {@code null} until weaving is
+	 * {@link #isWeavingComplete() complete}. Once weaving is complete, this
+	 * method will return the class object.
+	 * 
+	 * @return The class associated with this woven class, or {@code null} if
+	 *         weaving is not complete or the class definition failed.
+	 */
+	public Class< ? > getDefinedClass();
+
+	/**
+	 * Returns the bundle wiring whose class loader will define the woven class.
+	 * 
+	 * @return The bundle wiring whose class loader will define the woven class.
+	 */
+	public BundleWiring getBundleWiring();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/Framework.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/Framework.java
index f7618aa..672db44 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/Framework.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/Framework.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +17,8 @@
 package org.osgi.framework.launch;
 
 import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
 
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
@@ -32,7 +34,8 @@ import org.osgi.framework.FrameworkEvent;
  * instance.
  * 
  * @ThreadSafe
- * @version $Revision: 6542 $
+ * @noimplement
+ * @version $Id: 2be857d06f3605a04f701b59f11e127c0f8940dc $
  */
 public interface Framework extends Bundle {
 
@@ -40,14 +43,17 @@ public interface Framework extends Bundle {
 	 * Initialize this Framework. After calling this method, this Framework
 	 * must:
 	 * <ul>
+	 * <li>Have generated a new {@link Constants#FRAMEWORK_UUID framework UUID}.
+	 * </li>
 	 * <li>Be in the {@link #STARTING} state.</li>
 	 * <li>Have a valid Bundle Context.</li>
 	 * <li>Be at start level 0.</li>
 	 * <li>Have event handling enabled.</li>
 	 * <li>Have reified Bundle objects for all installed bundles.</li>
 	 * <li>Have registered any framework services. For example,
-	 * <code>PackageAdmin</code>, <code>ConditionalPermissionAdmin</code>,
-	 * <code>StartLevel</code>.</li>
+	 * {@code ConditionalPermissionAdmin}.</li>
+	 * <li>Be {@link #adapt(Class) adaptable} to the OSGi defined types to which
+	 * a system bundle can be adapted.</li>
 	 * </ul>
 	 * 
 	 * <p>
@@ -61,8 +67,8 @@ public interface Framework extends Bundle {
 	 * @throws BundleException If this Framework could not be initialized.
 	 * @throws SecurityException If the Java Runtime Environment supports
 	 *         permissions and the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code> or if there is a
-	 *         security manager already installed and the
+	 *         {@code AdminPermission[this,EXECUTE]} or if there is a security
+	 *         manager already installed and the
 	 *         {@link Constants#FRAMEWORK_SECURITY} configuration property is
 	 *         set.
 	 * 
@@ -70,8 +76,8 @@ public interface Framework extends Bundle {
 	void init() throws BundleException;
 
 	/**
-	 * Wait until this Framework has completely stopped. The <code>stop</code>
-	 * and <code>update</code> methods on a Framework performs an asynchronous
+	 * Wait until this Framework has completely stopped. The {@code stop}
+	 * and {@code update} methods on a Framework performs an asynchronous
 	 * stop of the Framework. This method can be used to wait until the
 	 * asynchronous stop of this Framework has completed. This method will only
 	 * wait if called when this Framework is in the {@link #STARTING},
@@ -84,7 +90,7 @@ public interface Framework extends Bundle {
 	 *        Framework has completely stopped. A value of zero will wait
 	 *        indefinitely.
 	 * @return A Framework Event indicating the reason this method returned. The
-	 *         following <code>FrameworkEvent</code> types may be returned by
+	 *         following {@code FrameworkEvent} types may be returned by
 	 *         this method.
 	 *         <ul>
 	 *         <li>{@link FrameworkEvent#STOPPED STOPPED} - This Framework has
@@ -98,7 +104,7 @@ public interface Framework extends Bundle {
 	 *         STOPPED_BOOTCLASSPATH_MODIFIED} - This Framework has been stopped
 	 *         and a bootclasspath extension bundle has been installed or
 	 *         updated. The VM must be restarted in order for the changed boot
-	 *         class path to take affect. </li>
+	 *         class path to take effect. </li>
 	 * 
 	 *         <li>{@link FrameworkEvent#ERROR ERROR} - The Framework
 	 *         encountered an error while shutting down or an error has occurred
@@ -127,12 +133,10 @@ public interface Framework extends Bundle {
 	 * <li>All installed bundles must be started in accordance with each
 	 * bundle's persistent <i>autostart setting</i>. This means some bundles
 	 * will not be started, some will be started with <i>eager activation</i>
-	 * and some will be started with their <i>declared activation</i> policy. If
-	 * this Framework implements the optional <i>Start Level Service
-	 * Specification</i>, then the start level of this Framework is moved to the
-	 * start level specified by the
-	 * {@link Constants#FRAMEWORK_BEGINNING_STARTLEVEL beginning start level}
-	 * framework property, as described in the <i>Start Level Service
+	 * and some will be started with their <i>declared activation</i> policy.
+	 * The start level of this Framework is moved to the start level specified
+	 * by the {@link Constants#FRAMEWORK_BEGINNING_STARTLEVEL beginning start
+	 * level} framework property, as described in the <i>Start Level
 	 * Specification</i>. If this framework property is not specified, then the
 	 * start level of this Framework is moved to start level one (1). Any
 	 * exceptions that occur during bundle starting must be wrapped in a
@@ -144,9 +148,9 @@ public interface Framework extends Bundle {
 	 * 
 	 * @throws BundleException If this Framework could not be started.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
-	 * @see "Start Level Service Specification"
+	 * @see "Start Level Specification"
 	 */
 	void start() throws BundleException;
 
@@ -160,7 +164,7 @@ public interface Framework extends Bundle {
 	 * @param options Ignored. There are no start options for the Framework.
 	 * @throws BundleException If this Framework could not be started.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
 	 * @see #start()
 	 */
@@ -175,12 +179,11 @@ public interface Framework extends Bundle {
 	 * <ol>
 	 * <li>This Framework's state is set to {@link #STOPPING}.</li>
 	 * <li>All installed bundles must be stopped without changing each bundle's
-	 * persistent <i>autostart setting</i>. If this Framework implements the
-	 * optional <i>Start Level Service Specification</i>, then the start level
-	 * of this Framework is moved to start level zero (0), as described in the
-	 * <i>Start Level Service Specification</i>. Any exceptions that occur
-	 * during bundle stopping must be wrapped in a {@link BundleException} and
-	 * then published as a framework event of type {@link FrameworkEvent#ERROR}</li>
+	 * persistent <i>autostart setting</i>. The start level of this Framework is
+	 * moved to start level zero (0), as described in the <i>Start Level
+	 * Specification</i>. Any exceptions that occur during bundle stopping must
+	 * be wrapped in a {@link BundleException} and then published as a framework
+	 * event of type {@link FrameworkEvent#ERROR}</li>
 	 * <li>Unregister all services registered by this Framework.</li>
 	 * <li>Event handling is disabled.</li>
 	 * <li>This Framework's state is set to {@link #RESOLVED}.</li>
@@ -196,9 +199,9 @@ public interface Framework extends Bundle {
 	 * @throws BundleException If stopping this Framework could not be
 	 *         initiated.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
-	 * @see "Start Level Service Specification"
+	 * @see "Start Level Specification"
 	 */
 	void stop() throws BundleException;
 
@@ -213,7 +216,7 @@ public interface Framework extends Bundle {
 	 * @throws BundleException If stopping this Framework could not be
 	 *         initiated.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,EXECUTE]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,EXECUTE]}, and the Java Runtime
 	 *         Environment supports permissions.
 	 * @see #stop()
 	 */
@@ -227,7 +230,7 @@ public interface Framework extends Bundle {
 	 * 
 	 * @throws BundleException This Framework cannot be uninstalled.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,LIFECYCLE]</code>, and the Java
+	 *         {@code AdminPermission[this,LIFECYCLE]}, and the Java
 	 *         Runtime Environment supports permissions.
 	 */
 	void uninstall() throws BundleException;
@@ -248,7 +251,7 @@ public interface Framework extends Bundle {
 	 * @throws BundleException If stopping and restarting this Framework could
 	 *         not be initiated.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,LIFECYCLE]</code>, and the Java
+	 *         {@code AdminPermission[this,LIFECYCLE]}, and the Java
 	 *         Runtime Environment supports permissions.
 	 */
 	void update() throws BundleException;
@@ -265,7 +268,7 @@ public interface Framework extends Bundle {
 	 * @throws BundleException If stopping and restarting this Framework could
 	 *         not be initiated.
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,LIFECYCLE]</code>, and the Java
+	 *         {@code AdminPermission[this,LIFECYCLE]}, and the Java
 	 *         Runtime Environment supports permissions.
 	 */
 	void update(InputStream in) throws BundleException;
@@ -281,12 +284,12 @@ public interface Framework extends Bundle {
 
 	/**
 	 * Returns the Framework location identifier. This Framework is assigned the
-	 * unique location "<code>System Bundle</code>" since this
+	 * unique location "{@code System Bundle}" since this
 	 * Framework is also a System Bundle.
 	 * 
-	 * @return The string "<code>System Bundle</code>".
+	 * @return The string "{@code System Bundle}".
 	 * @throws SecurityException If the caller does not have the appropriate
-	 *         <code>AdminPermission[this,METADATA]</code>, and the Java Runtime
+	 *         {@code AdminPermission[this,METADATA]}, and the Java Runtime
 	 *         Environment supports permissions.
 	 * @see Bundle#getLocation()
 	 * @see Constants#SYSTEM_BUNDLE_LOCATION
@@ -296,7 +299,7 @@ public interface Framework extends Bundle {
 	/**
 	 * Returns the symbolic name of this Framework. The symbolic name is unique
 	 * for the implementation of the framework. However, the symbolic name
-	 * "<code>system.bundle</code>" must be recognized as an alias to
+	 * "{@code system.bundle}" must be recognized as an alias to
 	 * the implementation-defined symbolic name since this Framework is also a
 	 * System Bundle.
 	 * 
@@ -305,4 +308,56 @@ public interface Framework extends Bundle {
 	 * @see Constants#SYSTEM_BUNDLE_SYMBOLICNAME
 	 */
 	String getSymbolicName();
+
+	/**
+	 * Returns {@code null} as a framework implementation does not have a
+	 * proper bundle from which to return entry paths.
+	 * 
+	 * @param path Ignored.
+	 * @return {@code null} as a framework implementation does not have a
+	 *         proper bundle from which to return entry paths.
+	 */
+	Enumeration<String> getEntryPaths(String path);
+
+	/**
+	 * Returns {@code null} as a framework implementation does not have a
+	 * proper bundle from which to return an entry.
+	 * 
+	 * @param path Ignored.
+	 * @return {@code null} as a framework implementation does not have a
+	 *         proper bundle from which to return an entry.
+	 */
+	URL getEntry(String path);
+
+	/**
+	 * Returns {@code null} as a framework implementation does not have a proper
+	 * bundle from which to return entries.
+	 * 
+	 * @param path Ignored.
+	 * @param filePattern Ignored.
+	 * @param recurse Ignored.
+	 * @return {@code null} as a framework implementation does not have a proper
+	 *         bundle from which to return entries.
+	 */
+	Enumeration<URL> findEntries(String path, String filePattern,
+			boolean recurse);
+
+	/**
+	 * Adapt this Framework to the specified type.
+	 * 
+	 * <p>
+	 * Adapting this Framework to the specified type may require certain checks,
+	 * including security checks, to succeed. If a check does not succeed, then
+	 * this Framework cannot be adapted and {@code null} is returned. If this
+	 * Framework is not {@link #init() initialized}, then {@code null} is
+	 * returned if the specified type is one of the OSGi defined types to which
+	 * a system bundle can be adapted.
+	 * 
+	 * @param <A> The type to which this Framework is to be adapted.
+	 * @param type Class object for the type to which this Framework is to be
+	 *        adapted.
+	 * @return The object, of the specified type, to which this Framework has
+	 *         been adapted or {@code null} if this Framework cannot be adapted
+	 */
+	<A> A adapt(Class<A> type);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/FrameworkFactory.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/FrameworkFactory.java
index bcb6da3..649ef4b 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/FrameworkFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/launch/FrameworkFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -41,11 +41,12 @@ import org.osgi.framework.Bundle;
  * the resource and then load and construct a FrameworkFactory object for the
  * framework implementation. The FrameworkFactory implementation class must have
  * a public, no-argument constructor. Java™ SE 6 introduced the
- * <code>ServiceLoader</code> class which can create a FrameworkFactory instance
+ * {@code ServiceLoader} class which can create a FrameworkFactory instance
  * from the resource.
  * 
  * @ThreadSafe
- * @version $Revision: 6888 $
+ * @noimplement
+ * @version $Id: c370e19dba77231f0dbf1601218ad97b20391ea0 $
  */
 public interface FrameworkFactory {
 
@@ -58,15 +59,15 @@ public interface FrameworkFactory {
 	 *        use some reasonable default configuration appropriate for the
 	 *        current VM. For example, the system packages for the current
 	 *        execution environment should be properly exported. The specified
-	 *        configuration argument may be <code>null</code>. The created
+	 *        configuration argument may be {@code null}. The created
 	 *        framework instance must copy any information needed from the
 	 *        specified configuration argument since the configuration argument
 	 *        can be changed after the framework instance has been created.
 	 * @return A new, configured {@link Framework} instance. The framework
 	 *         instance must be in the {@link Bundle#INSTALLED} state.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AllPermission</code>, and the Java Runtime Environment
+	 *         {@code AllPermission}, and the Java Runtime Environment
 	 *         supports permissions.
 	 */
-	Framework newFramework(Map configuration);
+	Framework newFramework(Map<String, String> configuration);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/startlevel/BundleStartLevel.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/startlevel/BundleStartLevel.java
new file mode 100644
index 0000000..d22d3ef
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/startlevel/BundleStartLevel.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.startlevel;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
+
+/**
+ * Query and modify the start level information for a bundle. The start level
+ * object for a bundle can be obtained by calling {@link Bundle#adapt(Class)
+ * bundle.adapt(BundleStartLevel.class)} on the bundle.
+ * 
+ * <p>
+ * The bundle associated with this BundleStartLevel object can be obtained by
+ * calling {@link BundleReference#getBundle()}.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 9a000be191fe3cb4ae82535a30940db0340d5356 $
+ */
+public interface BundleStartLevel extends BundleReference {
+	/**
+	 * Return the assigned start level value for the bundle.
+	 * 
+	 * @return The start level value of the bundle.
+	 * @see #setStartLevel(int)
+	 * @throws IllegalStateException If the bundle has been uninstalled.
+	 */
+	int getStartLevel();
+
+	/**
+	 * Assign a start level value to the bundle.
+	 * 
+	 * <p>
+	 * The bundle will be assigned the specified start level. The start level
+	 * value assigned to the bundle will be persistently recorded by the
+	 * Framework.
+	 * <p>
+	 * If the new start level for the bundle is lower than or equal to the
+	 * active start level of the Framework and the bundle's autostart setting
+	 * indicates this bundle must be started, the Framework will start the
+	 * bundle as described in the {@link Bundle#start(int)} method using the
+	 * {@link Bundle#START_TRANSIENT} option. The
+	 * {@link Bundle#START_ACTIVATION_POLICY} option must also be used if
+	 * {@link #isActivationPolicyUsed()} returns {@code true}. The actual
+	 * starting of the bundle must occur asynchronously.
+	 * <p>
+	 * If the new start level for the bundle is higher than the active start
+	 * level of the Framework, the Framework will stop the bundle as described
+	 * in the {@link Bundle#stop(int)} method using the
+	 * {@link Bundle#STOP_TRANSIENT} option. The actual stopping of the bundle
+	 * must occur asynchronously.
+	 * 
+	 * @param startlevel The new start level for the bundle.
+	 * @throws IllegalArgumentException If the specified start level is less
+	 *         than or equal to zero, or if the bundle is the system bundle.
+	 * @throws IllegalStateException If the bundle has been uninstalled.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code AdminPermission[bundle,EXECUTE]} and the Java runtime
+	 *         environment supports permissions.
+	 */
+	void setStartLevel(int startlevel);
+
+	/**
+	 * Returns whether the bundle's autostart setting indicates it must be
+	 * started.
+	 * <p>
+	 * The autostart setting of a bundle indicates whether the bundle is to be
+	 * started when its start level is reached.
+	 * 
+	 * @return {@code true} if the autostart setting of the bundle indicates it
+	 *         is to be started. {@code false} otherwise.
+	 * @throws IllegalStateException If this bundle has been uninstalled.
+	 * @see Bundle#START_TRANSIENT
+	 */
+	boolean isPersistentlyStarted();
+
+	/**
+	 * Returns whether the bundle's autostart setting indicates that the
+	 * activation policy declared in the bundle manifest must be used.
+	 * <p>
+	 * The autostart setting of a bundle indicates whether the bundle's declared
+	 * activation policy is to be used when the bundle is started.
+	 * 
+	 * @return {@code true} if the bundle's autostart setting indicates the
+	 *         activation policy declared in the manifest must be used.
+	 *         {@code false} if the bundle must be eagerly activated.
+	 * @throws IllegalStateException If the bundle has been uninstalled.
+	 * @see Bundle#START_ACTIVATION_POLICY
+	 */
+	boolean isActivationPolicyUsed();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/startlevel/FrameworkStartLevel.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/startlevel/FrameworkStartLevel.java
new file mode 100644
index 0000000..adb51ec
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/startlevel/FrameworkStartLevel.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.startlevel;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
+import org.osgi.framework.FrameworkListener;
+
+/**
+ * Query and modify the start level information for the framework. The start
+ * level object for the framework can be obtained by calling
+ * {@link Bundle#adapt(Class) bundle.adapt(FrameworkStartLevel.class)} on the
+ * system bundle. Only the system bundle can be adapted to a FrameworkStartLevel
+ * object.
+ * 
+ * <p>
+ * The system bundle associated with this FrameworkStartLevel object can be
+ * obtained by calling {@link BundleReference#getBundle()}.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 2bca22671674ba50b8c6801d5d1df8e291fe2a9d $
+ */
+public interface FrameworkStartLevel extends BundleReference {
+	/**
+	 * Return the active start level value of the Framework.
+	 * 
+	 * If the Framework is in the process of changing the start level this
+	 * method must return the active start level if this differs from the
+	 * requested start level.
+	 * 
+	 * @return The active start level value of the Framework.
+	 */
+	int getStartLevel();
+
+	/**
+	 * Modify the active start level of the Framework and notify when complete.
+	 * 
+	 * <p>
+	 * The Framework will move to the requested start level. This method will
+	 * return immediately to the caller and the start level change will occur
+	 * asynchronously on another thread. The specified {@code FrameworkListener}
+	 * s are notified, in the order specified, when the start level change is
+	 * complete. When the start level change completes normally, each specified
+	 * {@code FrameworkListener} will be called with a Framework event of type
+	 * {@code FrameworkEvent.STARTLEVEL_CHANGED}. If the start level change does
+	 * not complete normally, each specified {@code FrameworkListener} will be
+	 * called with a Framework event of type {@code FrameworkEvent.ERROR}.
+	 * 
+	 * <p>
+	 * If the specified start level is higher than the active start level, the
+	 * Framework will continue to increase the start level until the Framework
+	 * has reached the specified start level.
+	 * 
+	 * At each intermediate start level value on the way to and including the
+	 * target start level, the Framework must:
+	 * <ol>
+	 * <li>Change the active start level to the intermediate start level value.
+	 * <li>Start bundles at the intermediate start level whose autostart setting
+	 * indicate they must be started. They are started as described in the
+	 * {@link Bundle#start(int)} method using the {@link Bundle#START_TRANSIENT}
+	 * option. The {@link Bundle#START_ACTIVATION_POLICY} option must also be
+	 * used if {@link BundleStartLevel#isActivationPolicyUsed()} returns
+	 * {@code true} for the bundle.
+	 * </ol>
+	 * When this process completes after the specified start level is reached,
+	 * the Framework will fire a Framework event of type
+	 * {@code FrameworkEvent.STARTLEVEL_CHANGED} to announce it has moved to the
+	 * specified start level.
+	 * 
+	 * <p>
+	 * If the specified start level is lower than the active start level, the
+	 * Framework will continue to decrease the start level until the Framework
+	 * has reached the specified start level.
+	 * 
+	 * At each intermediate start level value on the way to and including the
+	 * specified start level, the framework must:
+	 * <ol>
+	 * <li>Stop bundles at the intermediate start level as described in the
+	 * {@link Bundle#stop(int)} method using the {@link Bundle#STOP_TRANSIENT}
+	 * option.
+	 * <li>Change the active start level to the intermediate start level value.
+	 * </ol>
+	 * When this process completes after the specified start level is reached,
+	 * the Framework will fire a Framework event of type
+	 * {@code FrameworkEvent.STARTLEVEL_CHANGED} to announce it has moved to the
+	 * specified start level.
+	 * 
+	 * <p>
+	 * If the specified start level is equal to the active start level, then no
+	 * bundles are started or stopped, however, the Framework must fire a
+	 * Framework event of type {@code FrameworkEvent.STARTLEVEL_CHANGED} to
+	 * announce it has finished moving to the specified start level. This event
+	 * may arrive before this method returns.
+	 * 
+	 * @param startlevel The requested start level for the Framework.
+	 * @param listeners Zero or more listeners to be notified when the start
+	 *        level change has been completed. The specified listeners do not
+	 *        need to be otherwise registered with the framework. If a specified
+	 *        listener is already registered with the framework, it will be
+	 *        notified twice.
+	 * @throws IllegalArgumentException If the specified start level is less
+	 *         than or equal to zero.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code AdminPermission[System Bundle,STARTLEVEL]} and the Java
+	 *         runtime environment supports permissions.
+	 */
+	void setStartLevel(int startlevel, FrameworkListener... listeners);
+
+	/**
+	 * Return the initial start level value that is assigned to a Bundle when it
+	 * is first installed.
+	 * 
+	 * @return The initial start level value for Bundles.
+	 * @see #setInitialBundleStartLevel
+	 */
+	int getInitialBundleStartLevel();
+
+	/**
+	 * Set the initial start level value that is assigned to a Bundle when it is
+	 * first installed.
+	 * 
+	 * <p>
+	 * The initial bundle start level will be set to the specified start level.
+	 * The initial bundle start level value will be persistently recorded by the
+	 * Framework.
+	 * 
+	 * <p>
+	 * When a Bundle is installed via {@code BundleContext.installBundle}, it is
+	 * assigned the initial bundle start level value.
+	 * 
+	 * <p>
+	 * The default initial bundle start level value is 1 unless this method has
+	 * been called to assign a different initial bundle start level value.
+	 * 
+	 * <p>
+	 * This method does not change the start level values of installed bundles.
+	 * 
+	 * @param startlevel The initial start level for newly installed bundles.
+	 * @throws IllegalArgumentException If the specified start level is less
+	 *         than or equal to zero.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code AdminPermission[System Bundle,STARTLEVEL]} and the Java
+	 *         runtime environment supports permissions.
+	 */
+	void setInitialBundleStartLevel(int startlevel);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleCapability.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleCapability.java
new file mode 100644
index 0000000..c49f0ac
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleCapability.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.wiring;
+
+import java.util.Map;
+
+/**
+ * A capability that has been declared from a {@link BundleRevision bundle
+ * revision}.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 0fde13c3228af1aa97872b37ccf0aa6e23123b11 $
+ */
+public interface BundleCapability {
+	/**
+	 * Returns the name space of this capability.
+	 * 
+	 * @return The name space of this capability.
+	 */
+	String getNamespace();
+
+	/**
+	 * Returns the directives of this capability.
+	 * 
+	 * @return An unmodifiable map of directive names to directive values for
+	 *         this capability, or an empty map if this capability has no
+	 *         directives.
+	 */
+	Map<String, String> getDirectives();
+
+	/**
+	 * Returns the attributes of this capability.
+	 * 
+	 * @return An unmodifiable map of attribute names to attribute values for
+	 *         this capability, or an empty map if this capability has no
+	 *         attributes.
+	 */
+	Map<String, Object> getAttributes();
+
+	/**
+	 * Returns the bundle revision declaring this capability.
+	 * 
+	 * @return The bundle revision declaring this capability.
+	 */
+	BundleRevision getRevision();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRequirement.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRequirement.java
new file mode 100644
index 0000000..bd637e6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRequirement.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.wiring;
+
+import java.util.Map;
+
+/**
+ * A requirement that has been declared from a {@link BundleRevision bundle
+ * revision}.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 659132c1fac7526240df377ead0e1bc8d4af2e77 $
+ */
+public interface BundleRequirement {
+	/**
+	 * Returns the name space of this requirement.
+	 * 
+	 * @return The name space of this requirement.
+	 */
+	String getNamespace();
+
+	/**
+	 * Returns the directives of this requirement.
+	 * 
+	 * @return An unmodifiable map of directive names to directive values for
+	 *         this requirement, or an empty map if this requirement has no
+	 *         directives.
+	 */
+	Map<String, String> getDirectives();
+
+	/**
+	 * Returns the attributes of this requirement.
+	 * 
+	 * @return An unmodifiable map of attribute names to attribute values for
+	 *         this requirement, or an empty map if this requirement has no
+	 *         attributes.
+	 */
+	Map<String, Object> getAttributes();
+
+	/**
+	 * Returns the bundle revision declaring this requirement.
+	 * 
+	 * @return The bundle revision declaring this requirement.
+	 */
+	BundleRevision getRevision();
+
+	/**
+	 * Returns whether the specified capability matches this requirement.
+	 * 
+	 * @param capability The capability to match to this requirement.
+	 * @return {@code true} if the specified capability has the same
+	 *         {@link #getNamespace() name space} as this requirement and the
+	 *         filter for this requirement matches the
+	 *         {@link BundleCapability#getAttributes() attributes of the
+	 *         specified capability}; {@code false} otherwise.
+	 */
+	boolean matches(BundleCapability capability);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRevision.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRevision.java
new file mode 100644
index 0000000..5924dc1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRevision.java
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.wiring;
+
+import java.util.List;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Version;
+
+/**
+ * Bundle Revision. When a bundle is installed and each time a bundle is
+ * updated, a new bundle revision of the bundle is created. Since a bundle
+ * update can change the entries in a bundle, different bundle wirings for the
+ * same bundle can be associated with different bundle revisions.
+ * 
+ * <p>
+ * For a bundle that has not been uninstalled, the most recent bundle revision
+ * is defined to be the current bundle revision. A bundle in the UNINSTALLED
+ * state does not have a current revision. The current bundle revision for a
+ * bundle can be obtained by calling {@link Bundle#adapt(Class) bundle.adapt}
+ * (BundleRevision.class). Since a bundle in the UNINSTALLED state does not have
+ * a current revision, adapting such a bundle returns {@code null}.
+ * 
+ * <p>
+ * The framework defines name spaces for {@link #PACKAGE_NAMESPACE package},
+ * {@link #BUNDLE_NAMESPACE bundle} and {@link #HOST_NAMESPACE host}
+ * capabilities and requirements. These name spaces are defined only to express
+ * wiring information by the framework. They must not be used in
+ * {@link Constants#PROVIDE_CAPABILITY Provide-Capability} and
+ * {@link Constants#REQUIRE_CAPABILITY Require-Capability} manifest headers.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 139b3046ebd46c48b03dda8d36f2f9d79e2e616d $
+ */
+public interface BundleRevision extends BundleReference {
+	/**
+	 * Returns the symbolic name for this bundle revision.
+	 * 
+	 * @return The symbolic name for this bundle revision.
+	 * @see Bundle#getSymbolicName()
+	 */
+	String getSymbolicName();
+
+	/**
+	 * Returns the version for this bundle revision.
+	 * 
+	 * @return The version for this bundle revision, or
+	 *         {@link Version#emptyVersion} if this bundle revision has no
+	 *         version information.
+	 * @see Bundle#getVersion()
+	 */
+	Version getVersion();
+
+	/**
+	 * Returns the capabilities declared by this bundle revision.
+	 * 
+	 * @param namespace The name space of the declared capabilities to return or
+	 *        {@code null} to return the declared capabilities from all name
+	 *        spaces.
+	 * @return A list containing a snapshot of the declared
+	 *         {@link BundleCapability}s, or an empty list if this bundle
+	 *         revision declares no capabilities in the specified name space.
+	 *         The list contains the declared capabilities in the order they are
+	 *         specified in the manifest.
+	 */
+	List<BundleCapability> getDeclaredCapabilities(String namespace);
+
+	/**
+	 * Returns the requirements declared by this bundle revision.
+	 * 
+	 * @param namespace The name space of the declared requirements to return or
+	 *        {@code null} to return the declared requirements from all name
+	 *        spaces.
+	 * @return A list containing a snapshot of the declared
+	 *         {@link BundleRequirement}s, or an empty list if this bundle
+	 *         revision declares no requirements in the specified name space.
+	 *         The list contains the declared requirements in the order they are
+	 *         specified in the manifest.
+	 */
+	List<BundleRequirement> getDeclaredRequirements(String namespace);
+
+	/**
+	 * Name space for package capabilities and requirements.
+	 * 
+	 * <p>
+	 * The name of the package is stored in the capability attribute of the same
+	 * name as this name space (osgi.wiring.package). The other
+	 * directives and attributes of the package, from the
+	 * {@link Constants#EXPORT_PACKAGE Export-Package} manifest header, can be
+	 * found in the cabability's {@link BundleCapability#getDirectives()
+	 * directives} and {@link BundleCapability#getAttributes() attributes}. The
+	 * {@link Constants#VERSION_ATTRIBUTE version} capability attribute must
+	 * contain the {@link Version} of the package if one is specified or
+	 * {@link Version#emptyVersion} if not specified. The
+	 * {@link Constants#BUNDLE_SYMBOLICNAME_ATTRIBUTE bundle-symbolic-name}
+	 * capability attribute must contain the
+	 * {@link BundleRevision#getSymbolicName() symbolic name} of the provider if
+	 * one is specified. The {@link Constants#BUNDLE_VERSION_ATTRIBUTE
+	 * bundle-version} capability attribute must contain the
+	 * {@link BundleRevision#getVersion() version} of the provider if one is
+	 * specified or {@link Version#emptyVersion} if not specified.
+	 * 
+	 * <p>
+	 * The package capabilities provided by the system bundle, that is the
+	 * bundle with id zero, must include the package specified by the
+	 * {@link Constants#FRAMEWORK_SYSTEMPACKAGES} and
+	 * {@link Constants#FRAMEWORK_SYSTEMPACKAGES_EXTRA} framework properties as
+	 * well as any other package exported by the framework implementation.
+	 * 
+	 * <p>
+	 * A bundle revision {@link BundleRevision#getDeclaredCapabilities(String)
+	 * declares} zero or more package capabilities (this is, exported packages)
+	 * and {@link BundleRevision#getDeclaredRequirements(String) declares} zero
+	 * or more package requirements.
+	 * <p>
+	 * A bundle wiring {@link BundleWiring#getCapabilities(String) provides}
+	 * zero or more resolved package capabilities (that is, exported packages)
+	 * and {@link BundleWiring#getRequiredWires(String) requires} zero or more
+	 * resolved package requirements (that is, imported packages). The number of
+	 * package wires required by a bundle wiring may change as the bundle wiring
+	 * may dynamically import additional packages.
+	 */
+	String	PACKAGE_NAMESPACE	= "osgi.wiring.package";
+
+	/**
+	 * Name space for bundle capabilities and requirements.
+	 * 
+	 * <p>
+	 * The bundle symbolic name of the bundle is stored in the capability
+	 * attribute of the same name as this name space (osgi.wiring.bundle).
+	 * The other directives and attributes of the bundle, from the
+	 * {@link Constants#BUNDLE_SYMBOLICNAME Bundle-SymbolicName} manifest
+	 * header, can be found in the cabability's
+	 * {@link BundleCapability#getDirectives() directives} and
+	 * {@link BundleCapability#getAttributes() attributes}. The
+	 * {@link Constants#BUNDLE_VERSION_ATTRIBUTE bundle-version} capability
+	 * attribute must contain the {@link Version} of the bundle from the
+	 * {@link Constants#BUNDLE_VERSION Bundle-Version} manifest header if one is
+	 * specified or {@link Version#emptyVersion} if not specified.
+	 * 
+	 * <p>
+	 * A non-fragment revision
+	 * {@link BundleRevision#getDeclaredCapabilities(String) declares} exactly
+	 * one<sup>†</sup> bundle capability (that is, the bundle can be
+	 * required by another bundle). A fragment revision must not declare a
+	 * bundle capability.
+	 * 
+	 * <p>
+	 * A bundle wiring for a non-fragment revision
+	 * {@link BundleWiring#getCapabilities(String) provides} exactly
+	 * one<sup>†</sup> bundle capability (that is, the bundle can be
+	 * required by another bundle) and
+	 * {@link BundleWiring#getRequiredWires(String) requires} zero or more
+	 * bundle capabilities (that is, requires other bundles).
+	 * 
+	 * <p>
+	 * † A bundle with no bundle symbolic name (that is, a bundle with
+	 * {@link Constants#BUNDLE_MANIFESTVERSION Bundle-ManifestVersion}
+	 * {@literal <} 2) must not provide a bundle capability.
+	 */
+	String	BUNDLE_NAMESPACE	= "osgi.wiring.bundle";
+
+	/**
+	 * Name space for host capabilities and requirements.
+	 * 
+	 * <p>
+	 * The bundle symbolic name of the bundle is stored in the capability
+	 * attribute of the same name as this name space (osgi.wiring.host).
+	 * The other directives and attributes of the bundle, from the
+	 * {@link Constants#BUNDLE_SYMBOLICNAME Bundle-SymbolicName} manifest
+	 * header, can be found in the cabability's
+	 * {@link BundleCapability#getDirectives() directives} and
+	 * {@link BundleCapability#getAttributes() attributes}. The
+	 * {@link Constants#BUNDLE_VERSION_ATTRIBUTE bundle-version} capability
+	 * attribute must contain the {@link Version} of the bundle from the
+	 * {@link Constants#BUNDLE_VERSION Bundle-Version} manifest header if one is
+	 * specified or {@link Version#emptyVersion} if not specified.
+	 * 
+	 * <p>
+	 * A non-fragment revision
+	 * {@link BundleRevision#getDeclaredCapabilities(String) declares} zero or
+	 * one<sup>†</sup> host capability if the bundle
+	 * {@link Constants#FRAGMENT_ATTACHMENT_DIRECTIVE allows fragments to be
+	 * attached}. A fragment revision must
+	 * {@link BundleRevision#getDeclaredRequirements(String) declare} exactly
+	 * one host requirement.
+	 * 
+	 * <p>
+	 * A bundle wiring for a non-fragment revision
+	 * {@link BundleWiring#getCapabilities(String) provides} zero or
+	 * one<sup>†</sup> host capability if the bundle
+	 * {@link Constants#FRAGMENT_ATTACHMENT_DIRECTIVE allows fragments to be
+	 * attached}. A bundle wiring for a fragment revision
+	 * {@link BundleWiring#getRequiredWires(String) requires} a host capability
+	 * for each host to which it is attached.
+	 * 
+	 * <p>
+	 * † A bundle with no bundle symbolic name (that is, a bundle with
+	 * {@link Constants#BUNDLE_MANIFESTVERSION Bundle-ManifestVersion}
+	 * {@literal <} 2) must not provide a host capability.
+	 */
+	String	HOST_NAMESPACE		= "osgi.wiring.host";
+
+	/**
+	 * Returns the special types of this bundle revision. The bundle revision
+	 * type values are:
+	 * <ul>
+	 * <li>{@link #TYPE_FRAGMENT}
+	 * </ul>
+	 * 
+	 * A bundle revision may be more than one type at a time. A type code is
+	 * used to identify the bundle revision type for future extendability.
+	 * 
+	 * <p>
+	 * If this bundle revision is not one or more of the defined types then 0 is
+	 * returned.
+	 * 
+	 * @return The special types of this bundle revision. The type values are
+	 *         ORed together.
+	 */
+	int getTypes();
+
+	/**
+	 * Bundle revision type indicating the bundle revision is a fragment.
+	 * 
+	 * @see #getTypes()
+	 */
+	int	TYPE_FRAGMENT	= 0x00000001;
+
+	/**
+	 * Returns the bundle wiring which is using this bundle revision.
+	 * 
+	 * @return The bundle wiring which is using this bundle revision or
+	 *         {@code null} if no bundle wiring is using this bundle revision.
+	 * @see BundleWiring#getRevision()
+	 */
+	BundleWiring getWiring();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRevisions.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRevisions.java
new file mode 100644
index 0000000..a619dbb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleRevisions.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) OSGi Alliance (2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.wiring;
+
+import java.util.List;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
+
+/**
+ * The {@link BundleRevision bundle revisions} of a bundle. When a bundle is
+ * installed and each time a bundle is updated, a new bundle revision of the
+ * bundle is created. For a bundle that has not been uninstalled, the most
+ * recent bundle revision is defined to be the current bundle revision. A bundle
+ * in the UNINSTALLED state does not have a current revision. An in use bundle
+ * revision is associated with an {@link BundleWiring#isInUse() in use}
+ * {@link BundleWiring}. The current bundle revision, if there is one, and all
+ * in use bundle revisions are returned.
+ * 
+ * <p>
+ * The bundle revisions for a bundle can be obtained by calling
+ * {@link Bundle#adapt(Class) bundle.adapt}({@link BundleRevisions}.class).
+ * {@link #getRevisions()} on the bundle.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 1d95ad10f0f08b100f8ee2485bdd34120032c7af $
+ */
+public interface BundleRevisions extends BundleReference {
+	/**
+	 * Return the bundle revisions for the {@link BundleReference#getBundle()
+	 * referenced} bundle.
+	 * 
+	 * <p>
+	 * The result is a list containing the current bundle revision, if there is
+	 * one, and all in use bundle revisions. The list may also contain
+	 * intermediate bundle revisions which are not in use.
+	 * 
+	 * <p>
+	 * The list is ordered in reverse chronological order such that the first
+	 * item is the most recent bundle revision and last item is the oldest
+	 * bundle revision.
+	 * 
+	 * <p>
+	 * Generally the list will have at least one bundle revision for the bundle:
+	 * the current bundle revision. However, for an uninstalled bundle with no
+	 * in use bundle revisions, the list may be empty.
+	 * 
+	 * @return A list containing a snapshot of the {@link BundleRevision}s for
+	 *         the referenced bundle.
+	 */
+	List<BundleRevision> getRevisions();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleWire.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleWire.java
new file mode 100644
index 0000000..1b19e4c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleWire.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) OSGi Alliance (2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.wiring;
+
+/**
+ * A wire connecting a {@link BundleCapability} to a {@link BundleRequirement}.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 4f936a84065762ec3267a44f86ae01b0150e44ce $
+ */
+public interface BundleWire {
+	/**
+	 * Returns the {@link BundleCapability} for this wire.
+	 * 
+	 * @return The {@link BundleCapability} for this wire.
+	 */
+	BundleCapability getCapability();
+
+	/**
+	 * Return the {@link BundleRequirement} for this wire.
+	 * 
+	 * @return The {@link BundleRequirement} for this wire.
+	 */
+	BundleRequirement getRequirement();
+
+	/**
+	 * Returns the bundle wiring {@link BundleWiring#getProvidedWires(String)
+	 * providing} the {@link #getCapability() capability}.
+	 * 
+	 * <p>
+	 * The bundle revision referenced by the returned bundle wiring may differ
+	 * from the bundle revision reference by the {@link #getCapability()
+	 * capability}.
+	 * 
+	 * @return The bundle wiring providing the capability. If the bundle wiring
+	 *         providing the capability is not {@link BundleWiring#isInUse() in
+	 *         use}, {@code null} will be returned.
+	 */
+	BundleWiring getProviderWiring();
+
+	/**
+	 * Returns the bundle wiring who
+	 * {@link BundleWiring#getRequiredWires(String) requires} the
+	 * {@link #getCapability() capability}.
+	 * 
+	 * <p>
+	 * The bundle revision referenced by the returned bundle wiring may differ
+	 * from the bundle revision reference by the {@link #getRequirement()
+	 * requirement}.
+	 * 
+	 * @return The bundle wiring whose requirement is wired to the capability.
+	 *         If the bundle wiring requiring the capability is not
+	 *         {@link BundleWiring#isInUse() in use}, {@code null} will be
+	 *         returned.
+	 */
+	BundleWiring getRequirerWiring();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleWiring.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleWiring.java
new file mode 100644
index 0000000..8d8956a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/BundleWiring.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2011). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.wiring;
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.List;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
+
+/**
+ * A wiring for a bundle. Each time a bundle is resolved, a new bundle wiring
+ * for the bundle is created. A bundle wiring is associated with a bundle
+ * revision and represents the dependencies with other bundle wirings.
+ * 
+ * <p>
+ * The bundle wiring for a bundle is the {@link #isCurrent() current} bundle
+ * wiring if it is the most recent bundle wiring for the current bundle
+ * revision. A bundle wiring is {@link #isInUse() in use} if it is the current
+ * bundle wiring or if some other in use bundle wiring is dependent upon it. For
+ * example, another bundle wiring is wired to a capability provided by the
+ * bundle wiring. An in use bundle wiring for a non-fragment bundle has a class
+ * loader. All bundles with non-current, in use bundle wirings are considered
+ * removal pending. Once a bundle wiring is no longer in use, it is considered
+ * stale and is discarded by the framework.
+ * 
+ * <p>
+ * The current bundle wiring for a bundle can be obtained by calling
+ * {@link Bundle#adapt(Class) bundle.adapt}(BundleWiring.class). A bundle in the
+ * INSTALLED or UNINSTALLED state does not have a current wiring, adapting such
+ * a bundle returns {@code null}.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 58b8ec3bb9649387d4ccba1070f034f217d06ea2 $
+ */
+public interface BundleWiring extends BundleReference {
+	/**
+	 * Returns {@code true} if this bundle wiring is the current bundle wiring.
+	 * The bundle wiring for a bundle is the current bundle wiring if it is the
+	 * most recent bundle wiring for the current bundle revision. All bundles
+	 * with non-current, in use bundle wirings are considered
+	 * {@link FrameworkWiring#getRemovalPendingBundles() removal pending}.
+	 * 
+	 * @return {@code true} if this bundle wiring is the current bundle wiring;
+	 *         {@code false} otherwise.
+	 */
+	boolean isCurrent();
+
+	/**
+	 * Returns {@code true} if this bundle wiring is in use. A bundle wiring is
+	 * in use if it is the {@link #isCurrent() current} wiring or if some other
+	 * in use bundle wiring is dependent upon it. Once a bundle wiring is no
+	 * longer in use, it is considered stale and is discarded by the framework.
+	 * 
+	 * @return {@code true} if this bundle wiring is in use; {@code false}
+	 *         otherwise.
+	 */
+	boolean isInUse();
+
+	/**
+	 * Returns the capabilities provided by this bundle wiring.
+	 * 
+	 * <p>
+	 * A capability may not be required by any bundle wiring and thus there may
+	 * be no {@link #getProvidedWires(String) wires} for the capability.
+	 * 
+	 * <p>
+	 * A bundle wiring for a non-fragment revision provides a subset of the
+	 * declared capabilities from the bundle revision and all attached fragment
+	 * revisions. Not all declared capabilities may be provided since some may
+	 * be discarded. For example, if a package is declared to be exported and
+	 * import, only one is selected and the other is discarded.
+	 * 
+	 * @param namespace The name space of the capabilities to return or
+	 *        {@code null} to return the capabilities from all name spaces.
+	 * @return A list containing a snapshot of the {@link BundleCapability}s, or
+	 *         an empty list if this bundle wiring provides no capabilities in
+	 *         the specified name space. If this bundle wiring is not
+	 *         {@link #isInUse() in use}, {@code null} will be returned. For a
+	 *         given name space, the list contains the wires in the order the
+	 *         capabilities were specified in the manifests of the
+	 *         {@link #getRevision() bundle revision} and the attached fragments
+	 *         of this bundle wiring. There is no ordering defined between
+	 *         capabilities in different name spaces.
+	 */
+	List<BundleCapability> getCapabilities(String namespace);
+
+	/**
+	 * Returns the requirements of this bundle wiring.
+	 * 
+	 * <p>
+	 * A bundle wiring for a non-fragment revision has a subset of the declared
+	 * requirements from the bundle revision and all attached fragment
+	 * revisions. Not all declared requirements may be present since some may be
+	 * discarded. For example, if a package is declared to be optionally
+	 * imported and is not actually imported, the requirement must be discarded.
+	 * 
+	 * @param namespace The name space of the requirements to return or
+	 *        {@code null} to return the requirements from all name spaces.
+	 * @return A list containing a snapshot of the {@link BundleRequirement}s,
+	 *         or an empty list if this bundle wiring uses no requirements in
+	 *         the specified name space. If this bundle wiring is not
+	 *         {@link #isInUse() in use}, {@code null} will be returned. For a
+	 *         given name space, the list contains the wires in the order the
+	 *         requirements were specified in the manifests of the
+	 *         {@link #getRevision() bundle revision} and the attached fragments
+	 *         of this bundle wiring. There is no ordering defined between
+	 *         requirements in different name spaces.
+	 */
+	List<BundleRequirement> getRequirements(String namespace);
+
+	/**
+	 * Returns the {@link BundleWire}s to the provided {@link BundleCapability
+	 * capabilities} of this bundle wiring.
+	 * 
+	 * @param namespace The name space of the capabilities for which to return
+	 *        wires or {@code null} to return the wires for the capabilities in
+	 *        all name spaces.
+	 * @return A list containing a snapshot of the {@link BundleWire}s for the
+	 *         {@link BundleCapability capabilities} of this bundle wiring, or
+	 *         an empty list if this bundle wiring has no capabilities in the
+	 *         specified name space. If this bundle wiring is not
+	 *         {@link #isInUse() in use}, {@code null} will be returned. For a
+	 *         given name space, the list contains the wires in the order the
+	 *         capabilities were specified in the manifests of the
+	 *         {@link #getRevision() bundle revision} and the attached fragments
+	 *         of this bundle wiring. There is no ordering defined between
+	 *         capabilities in different name spaces.
+	 */
+	List<BundleWire> getProvidedWires(String namespace);
+
+	/**
+	 * Returns the {@link BundleWire}s to the {@link BundleRequirement
+	 * requirements} in use by this bundle wiring.
+	 * 
+	 * <p>
+	 * This method may return different results if this bundle wiring adds wires
+	 * to more requirements. For example, dynamically importing a package will
+	 * establish a new wire to the dynamically imported package.
+	 * 
+	 * @param namespace The name space of the requirements for which to return
+	 *        wires or {@code null} to return the wires for the requirements in
+	 *        all name spaces.
+	 * @return A list containing a snapshot of the {@link BundleWire}s for the
+	 *         {@link BundleRequirement requirements} of this bundle wiring, or
+	 *         an empty list if this bundle wiring has no requirements in the
+	 *         specified name space. If this bundle wiring is not
+	 *         {@link #isInUse() in use}, {@code null} will be returned. For a
+	 *         given name space, the list contains the wires in the order the
+	 *         requirements were specified in the manifests of the
+	 *         {@link #getRevision() bundle revision} and the attached fragments
+	 *         of this bundle wiring. There is no ordering defined between
+	 *         requirements in different name spaces.
+	 */
+	List<BundleWire> getRequiredWires(String namespace);
+
+	/**
+	 * Returns the bundle revision for the bundle in this bundle wiring. Since a
+	 * bundle update can change the entries in a bundle, different bundle
+	 * wirings for the same bundle can have different bundle revisions.
+	 * 
+	 * <p>
+	 * The bundle object {@link BundleReference#getBundle() referenced} by the
+	 * returned {@code BundleRevision} may return different information than the
+	 * returned {@code BundleRevision} since the returned {@code BundleRevision}
+	 * may refer to an older revision of the bundle.
+	 * 
+	 * @return The bundle revision for this bundle wiring.
+	 * @see BundleRevision#getWiring()
+	 */
+	BundleRevision getRevision();
+
+	/**
+	 * Returns the class loader for this bundle wiring. Since a bundle refresh
+	 * creates a new bundle wiring for a bundle, different bundle wirings for
+	 * the same bundle will have different class loaders.
+	 * 
+	 * @return The class loader for this bundle wiring. If this bundle wiring is
+	 *         not {@link #isInUse() in use} or this bundle wiring is for a
+	 *         fragment revision, {@code null} will be returned.
+	 * @throws SecurityException If the caller does not have the appropriate
+	 *         {@code RuntimePermission("getClassLoader")}, and the Java Runtime
+	 *         Environment supports permissions.
+	 */
+	ClassLoader getClassLoader();
+
+	/**
+	 * Returns entries in this bundle wiring's {@link #getRevision() bundle
+	 * revision} and its attached fragment revisions. This bundle wiring's class
+	 * loader is not used to search for entries. Only the contents of this
+	 * bundle wiring's bundle revision and its attached fragment revisions are
+	 * searched for the specified entries.
+	 * 
+	 * <p>
+	 * This method takes into account that the "contents" of this
+	 * bundle wiring can have attached fragments. This "bundle space"
+	 * is not a name space with unique members; the same entry name can be
+	 * present multiple times. This method therefore returns a list of URL
+	 * objects. These URLs can come from different JARs but have the same path
+	 * name. This method can either return only entries in the specified path or
+	 * recurse into subdirectories returning entries in the directory tree
+	 * beginning at the specified path.
+	 * 
+	 * <p>
+	 * Note: Jar and zip files are not required to include directory entries.
+	 * URLs to directory entries will not be returned if the bundle contents do
+	 * not contain directory entries.
+	 * 
+	 * @param path The path name in which to look. The path is always relative
+	 *        to the root of this bundle wiring and may begin with
+	 *        "/". A path value of "/" indicates the root of
+	 *        this bundle wiring.
+	 * @param filePattern The file name pattern for selecting entries in the
+	 *        specified path. The pattern is only matched against the last
+	 *        element of the entry path. If the entry is a directory then the
+	 *        trailing "/" is not used for pattern matching. Substring
+	 *        matching is supported, as specified in the Filter specification,
+	 *        using the wildcard character ("*"). If {@code null} is
+	 *        specified, this is equivalent to "*" and matches all
+	 *        files.
+	 * @param options The options for listing resource names. See
+	 *        {@link #FINDENTRIES_RECURSE}. The method must ignore unrecognized
+	 *        options.
+	 * @return An unmodifiable list of URL objects for each matching entry, or
+	 *         an empty list if no matching entry could be found, if this bundle
+	 *         wiring is for a fragment revision or if the caller does not have
+	 *         the appropriate {@code AdminPermission[bundle,RESOURCE]} and the
+	 *         Java Runtime Environment supports permissions. The list is
+	 *         ordered such that entries from the {@link #getRevision() bundle
+	 *         revision} are returned first followed by the entries from
+	 *         attached fragment revisions in attachment order. If this bundle
+	 *         wiring is not {@link #isInUse() in use}, {@code null} must be
+	 *         returned.
+	 * @see Bundle#findEntries(String, String, boolean)
+	 */
+	List<URL> findEntries(String path, String filePattern, int options);
+
+	/**
+	 * The find entries operation must recurse into subdirectories.
+	 * 
+	 * <p>
+	 * This bit may be set when calling
+	 * {@link #findEntries(String, String, int)} to specify the result must
+	 * include the matching entries from the specified path and its
+	 * subdirectories. If this bit is not set, then the result must only include
+	 * matching entries from the specified path.
+	 * 
+	 * @see #findEntries(String, String, int)
+	 */
+	int	FINDENTRIES_RECURSE	= 0x00000001;
+
+	/**
+	 * Returns the names of resources visible to this bundle wiring's
+	 * {@link #getClassLoader() class loader}. The returned names can be used to
+	 * access the resources via this bundle wiring's class loader.
+	 * 
+	 * <ul>
+	 * <li>Only the resource names for resources in bundle wirings will be
+	 * returned. The names of resources visible to a bundle wiring's parent
+	 * class loader, such as the bootstrap class loader, must not be included in
+	 * the result.
+	 * <li>Only established wires will be examined for resources. This method
+	 * must not cause new wires for dynamic imports to be established.
+	 * </ul>
+	 * 
+	 * @param path The path name in which to look. The path is always relative
+	 *        to the root of this bundle wiring's class loader and may begin
+	 *        with "/". A path value of "/" indicates the
+	 *        root of this bundle wiring's class loader.
+	 * @param filePattern The file name pattern for selecting resource names in
+	 *        the specified path. The pattern is only matched against the last
+	 *        element of the resource path. If the resource is a directory then
+	 *        the trailing "/" is not used for pattern matching.
+	 *        Substring matching is supported, as specified in the Filter
+	 *        specification, using the wildcard character ("*"). If
+	 *        {@code null} is specified, this is equivalent to "*" and
+	 *        matches all files.
+	 * @param options The options for listing resource names. See
+	 *        {@link #LISTRESOURCES_LOCAL} and {@link #LISTRESOURCES_RECURSE}.
+	 *        This method must ignore unrecognized options.
+	 * @return An unmodifiable collection of resource names for each matching
+	 *         resource, or an empty collection if no matching resource could be
+	 *         found, if this bundle wiring is for a fragment revision or if the
+	 *         caller does not have the appropriate
+	 *         {@code AdminPermission[bundle,RESOURCE]} and the Java Runtime
+	 *         Environment supports permissions. The collection is unordered and
+	 *         must contain no duplicate resource names. If this bundle wiring
+	 *         is not {@link #isInUse() in use}, {@code null} must be returned.
+	 */
+	Collection<String> listResources(String path, String filePattern,
+			int options);
+
+	/**
+	 * The list resource names operation must recurse into subdirectories.
+	 * 
+	 * <p>
+	 * This bit may be set when calling
+	 * {@link #listResources(String, String, int)} to specify the result must
+	 * include the names of matching resources from the specified path and its
+	 * subdirectories. If this bit is not set, then the result must only include
+	 * names of matching resources from the specified path.
+	 * 
+	 * @see #listResources(String, String, int)
+	 */
+	int	LISTRESOURCES_RECURSE	= 0x00000001;
+
+	/**
+	 * The list resource names operation must limit the result to the names of
+	 * matching resources contained in this bundle wiring's
+	 * {@link #getRevision() bundle revision} and its attached fragment
+	 * revisions. The result must not include resource names for resources in
+	 * {@link BundleRevision#PACKAGE_NAMESPACE package} names which are
+	 * {@link #getRequiredWires(String) imported} by this wiring.
+	 * 
+	 * <p>
+	 * This bit may be set when calling
+	 * {@link #listResources(String, String, int)} to specify the result must
+	 * only include the names of matching resources contained in this bundle
+	 * wiring's bundle revision and its attached fragment revisions. If this bit
+	 * is not set, then the result must include the names of matching resources
+	 * reachable from this bundle wiring's class loader which may include the
+	 * names of matching resources contained in imported packages and required
+	 * bundles.
+	 * 
+	 * @see #listResources(String, String, int)
+	 */
+	int	LISTRESOURCES_LOCAL		= 0x00000002;
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/FrameworkWiring.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/FrameworkWiring.java
new file mode 100644
index 0000000..046a6c2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/framework/wiring/FrameworkWiring.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.framework.wiring;
+
+import java.util.Collection;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
+import org.osgi.framework.FrameworkListener;
+
+/**
+ * Query and modify wiring information for the framework. The framework wiring
+ * object for the framework can be obtained by calling
+ * {@link Bundle#adapt(Class) bundle.adapt(FrameworkWiring.class)} on the system
+ * bundle. Only the system bundle can be adapted to a FrameworkWiring object.
+ * 
+ * <p>
+ * The system bundle associated with this FrameworkWiring object can be obtained
+ * by calling {@link BundleReference#getBundle()}.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: f9f3f89b5b8d369453d645a52a482a385a2bd520 $
+ */
+public interface FrameworkWiring extends BundleReference {
+	/**
+	 * Refreshes the specified bundles. This forces the update (replacement) or
+	 * removal of packages exported by the specified bundles.
+	 * 
+	 * <p>
+	 * The technique by which the framework refreshes bundles may vary among
+	 * different framework implementations. A permissible implementation is to
+	 * stop and restart the framework.
+	 * 
+	 * <p>
+	 * This method returns to the caller immediately and then performs the
+	 * following steps on a separate thread:
+	 * 
+	 * <ol>
+	 * <li>Compute the {@link #getDependencyClosure(Collection) dependency
+	 * closure} of the specified bundles. If no bundles are specified, compute
+	 * the dependency closure of the {@link #getRemovalPendingBundles() removal
+	 * pending} bundles.
+	 * 
+	 * <li>Each bundle in the dependency closure that is in the {@code ACTIVE}
+	 * state will be stopped as described in the {@code Bundle.stop} method.
+	 * 
+	 * <li>Each bundle in the dependency closure that is in the {@code RESOLVED}
+	 * state is unresolved and thus moved to the {@code INSTALLED} state. The
+	 * effect of this step is that bundles in the dependency closure are no
+	 * longer {@code RESOLVED}.
+	 * 
+	 * <li>Each bundle in the dependency closure that is in the
+	 * {@code UNINSTALLED} state is removed from the dependency closure and is
+	 * now completely removed from the Framework.
+	 * 
+	 * <li>Each bundle in the dependency closure that was in the {@code ACTIVE}
+	 * state prior to Step 2 is started as described in the {@code Bundle.start}
+	 * method, causing all bundles required for the restart to be resolved. It
+	 * is possible that, as a result of the previous steps, packages that were
+	 * previously exported no longer are. Therefore, some bundles may be
+	 * unresolvable until bundles satisfying the dependencies have been
+	 * installed in the Framework.
+	 * </ol>
+	 * 
+	 * <p>
+	 * For any exceptions that are thrown during any of these steps, a framework
+	 * event of type {@code FrameworkEvent.ERROR} is fired containing the
+	 * exception. The source bundle for these events should be the specific
+	 * bundle to which the exception is related. If no specific bundle can be
+	 * associated with the exception then the System Bundle must be used as the
+	 * source bundle for the event. All framework events fired by this method
+	 * are also delivered to the specified {@code FrameworkListener}s in the
+	 * order they are specified.
+	 * 
+	 * <p>
+	 * When this process completes after the bundles are refreshed, the
+	 * Framework will fire a Framework event of type
+	 * {@code FrameworkEvent.PACKAGES_REFRESHED} to announce it has completed
+	 * the bundle refresh. The specified {@code FrameworkListener}s are notified
+	 * in the order specified. Each specified {@code FrameworkListener} will be
+	 * called with a Framework event of type
+	 * {@code FrameworkEvent.PACKAGES_REFRESHED}.
+	 * 
+	 * @param bundles The bundles to be refreshed, or {@code null} to refresh
+	 *        the {@link #getRemovalPendingBundles() removal pending} bundles.
+	 * @param listeners Zero or more listeners to be notified when the bundle
+	 *        refresh has been completed. The specified listeners do not need to
+	 *        be otherwise registered with the framework. If a specified
+	 *        listener is already registered with the framework, it will be
+	 *        notified twice.
+	 * @throws IllegalArgumentException If the specified {@code Bundle}s were
+	 *         not created by the same framework instance associated with this
+	 *         FrameworkWiring.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code AdminPermission[System Bundle,RESOLVE]} and the Java
+	 *         runtime environment supports permissions.
+	 */
+	void refreshBundles(Collection<Bundle> bundles,
+			FrameworkListener... listeners);
+
+	/**
+	 * Resolves the specified bundles. The Framework must attempt to resolve the
+	 * specified bundles that are unresolved. Additional bundles that are not
+	 * included in the specified bundles may be resolved as a result of calling
+	 * this method. A permissible implementation of this method is to attempt to
+	 * resolve all unresolved bundles installed in the framework.
+	 * 
+	 * <p>
+	 * If no bundles are specified, then the Framework will attempt to resolve
+	 * all unresolved bundles. This method must not cause any bundle to be
+	 * refreshed, stopped, or started. This method will not return until the
+	 * operation has completed.
+	 * 
+	 * @param bundles The bundles to resolve or {@code null} to resolve all
+	 *        unresolved bundles installed in the Framework.
+	 * @return {@code true} if all specified bundles are resolved; {@code false}
+	 *         otherwise.
+	 * @throws IllegalArgumentException If the specified {@code Bundle}s were
+	 *         not created by the same framework instance associated with this
+	 *         FrameworkWiring.
+	 * @throws SecurityException If the caller does not have
+	 *         {@code AdminPermission[System Bundle,RESOLVE]} and the Java
+	 *         runtime environment supports permissions.
+	 */
+	boolean resolveBundles(Collection<Bundle> bundles);
+
+	/**
+	 * Returns the bundles that have {@link BundleWiring#isCurrent()
+	 * non-current}, {@link BundleWiring#isInUse() in use} bundle wirings. This
+	 * is typically the bundles which have been updated or uninstalled since the
+	 * last call to {@link #refreshBundles(Collection, FrameworkListener...)}.
+	 * 
+	 * @return A collection containing a snapshot of the {@code Bundle}s which
+	 *         have non-current, in use {@code BundleWiring}s, or an empty
+	 *         collection if there are no such bundles.
+	 */
+	Collection<Bundle> getRemovalPendingBundles();
+
+	/**
+	 * Returns the dependency closure for the specified bundles.
+	 * 
+	 * <p>
+	 * A graph of bundles is computed starting with the specified bundles. The
+	 * graph is expanded by adding any bundle that is either wired to a package
+	 * that is currently exported by a bundle in the graph or requires a bundle
+	 * in the graph. The graph is fully constructed when there is no bundle
+	 * outside the graph that is wired to a bundle in the graph. The graph may
+	 * contain {@code UNINSTALLED} bundles that are
+	 * {@link #getRemovalPendingBundles() removal pending}.
+	 * 
+	 * @param bundles The initial bundles for which to generate the dependency
+	 *        closure.
+	 * @return A collection containing a snapshot of the dependency closure of
+	 *         the specified bundles, or an empty collection if there were no
+	 *         specified bundles.
+	 * @throws IllegalArgumentException If the specified {@code Bundle}s were
+	 *         not created by the same framework instance associated with this
+	 *         FrameworkWiring.
+	 */
+	Collection<Bundle> getDependencyClosure(Collection<Bundle> bundles);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleLocationCondition.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleLocationCondition.java
index 25c4ad9..d058bcb 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleLocationCondition.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleLocationCondition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.osgi.service.condpermadmin;
 
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Dictionary;
 import java.util.Hashtable;
 
 import org.osgi.framework.Bundle;
@@ -34,7 +35,7 @@ import org.osgi.framework.InvalidSyntaxException;
  * Pattern matching is done according to the filter string matching rules.
  * 
  * @ThreadSafe
- * @version $Revision: 5901 $
+ * @version $Id: 7b466c7103a708833c6ff1fa2a4c5cf21f757179 $
  */
 public class BundleLocationCondition {
 	private static final String	CONDITION_TYPE	= "org.osgi.service.condpermadmin.BundleLocationCondition";
@@ -68,8 +69,9 @@ public class BundleLocationCondition {
 		String[] args = info.getArgs();
 		if (args.length != 1 && args.length != 2)
 			throw new IllegalArgumentException("Illegal number of args: " + args.length);
-		String bundleLocation = (String) AccessController.doPrivileged(new PrivilegedAction() {
-					public Object run() {
+		String bundleLocation = AccessController
+				.doPrivileged(new PrivilegedAction<String>() {
+					public String run() {
 						return bundle.getLocation();
 					}
 				});
@@ -82,7 +84,7 @@ public class BundleLocationCondition {
 			// this should never happen, but just in case
 			throw new RuntimeException("Invalid filter: " + e.getFilter(), e);
 		}
-		Hashtable matchProps = new Hashtable(2);
+		Dictionary<String, String> matchProps = new Hashtable<String, String>(2);
 		matchProps.put("location", bundleLocation);
 		boolean negate = (args.length == 2) ? "!".equals(args[1]) : false;
 		return (negate ^ filter.match(matchProps)) ? Condition.TRUE
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleSignerCondition.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleSignerCondition.java
index 31b6481..5e4a689 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleSignerCondition.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/BundleSignerCondition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@ package org.osgi.service.condpermadmin;
 
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -50,7 +49,7 @@ import org.osgi.framework.FrameworkUtil;
  * RDNs).
  * 
  * @ThreadSafe
- * @version $Revision: 6860 $
+ * @version $Id: 6e10febd6a8cfc31973ece0af29c352ed972b105 $
  */
 public class BundleSignerCondition {
 	private static final String	CONDITION_TYPE	= "org.osgi.service.condpermadmin.BundleSignerCondition";
@@ -83,16 +82,13 @@ public class BundleSignerCondition {
 			throw new IllegalArgumentException("Illegal number of args: "
 					+ args.length);
 
-		Map/* <X509Certificate, List<X509Certificate>> */signers = bundle
+		Map<X509Certificate, List<X509Certificate>> signers = bundle
 				.getSignerCertificates(Bundle.SIGNERS_TRUSTED);
 		boolean match = false;
-		for (Iterator iSigners = signers.values().iterator(); iSigners
-				.hasNext();) {
-			List/* <X509Certificate> */signerCerts = (List) iSigners.next();
-			List/* <String> */dnChain = new ArrayList(signerCerts.size());
-			for (Iterator iCerts = signerCerts.iterator(); iCerts.hasNext();) {
-				dnChain.add(((X509Certificate) iCerts.next()).getSubjectDN()
-						.getName());
+		for (List<X509Certificate> signerCerts : signers.values()) {
+			List<String> dnChain = new ArrayList<String>(signerCerts.size());
+			for (X509Certificate signer : signerCerts) {
+				dnChain.add(signer.getSubjectDN().getName());
 			}
 			if (FrameworkUtil.matchDistinguishedNameChain(args[0], dnChain)) {
 				match = true;
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java
index 63c33b4..90f2778 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,7 +24,7 @@ import java.util.Dictionary;
  * Info can only be used if the associated Conditions are satisfied.
  * 
  * @ThreadSafe
- * @version $Revision: 6464 $
+ * @version $Id: 7e80cf578718db713c347568e7d3232010beac0a $
  */
 public interface Condition {
 	/**
@@ -41,7 +41,7 @@ public interface Condition {
 
 	/**
 	 * Returns whether the evaluation must be postponed until the end of the
-	 * permission check. If this method returns <code>false</code> (or this
+	 * permission check. If this method returns {@code false} (or this
 	 * Condition is immutable), then this Condition must be able to directly
 	 * answer the {@link #isSatisfied()} method. In other words, isSatisfied()
 	 * will return very quickly since no external sources, such as for example
@@ -49,8 +49,8 @@ public interface Condition {
 	 * This method must always return the same value whenever it is called so
 	 * that the Conditional Permission Admin can cache its result.
 	 * 
-	 * @return <code>true</code> to indicate the evaluation must be postponed.
-	 *         Otherwise, <code>false</code> if the evaluation can be performed
+	 * @return {@code true} to indicate the evaluation must be postponed.
+	 *         Otherwise, {@code false} if the evaluation can be performed
 	 *         immediately.
 	 */
 	boolean isPostponed();
@@ -63,28 +63,29 @@ public interface Condition {
 	 * {@link #isSatisfied(Condition[],Dictionary)} at the end of the permission
 	 * check.
 	 * 
-	 * @return <code>true</code> to indicate the Conditions is satisfied.
-	 *         Otherwise, <code>false</code> if the Condition is not satisfied.
+	 * @return {@code true} to indicate the Conditions is satisfied.
+	 *         Otherwise, {@code false} if the Condition is not satisfied.
 	 */
 	boolean isSatisfied();
 
 	/**
 	 * Returns whether the Condition is mutable. A Condition can go from mutable
-	 * (<code>true</code>) to immutable (<code>false</code>) over time but never
-	 * from immutable (<code>false</code>) to mutable (<code>true</code>).
+	 * ({@code true}) to immutable ({@code false}) over time but never
+	 * from immutable ({@code false}) to mutable ({@code true}).
 	 * 
-	 * @return <code>true</code> {@link #isSatisfied()} can change. Otherwise,
-	 *         <code>false</code> if the value returned by
+	 * @return {@code true} {@link #isSatisfied()} can change. Otherwise,
+	 *         {@code false} if the value returned by
 	 *         {@link #isSatisfied()} will not change for this condition.
 	 */
 	boolean isMutable();
 
 	/**
-	 * Returns whether a the set of Condition objects are satisfied. Although
-	 * this method is not static, it must be implemented as if it were static.
-	 * All of the passed Condition objects will be of the same type and will
-	 * correspond to the class type of the object on which this method is
-	 * invoked.This method must be called inside a permission check only.
+	 * Returns whether the specified set of Condition objects are satisfied.
+	 * Although this method is not static, it must be implemented as if it
+	 * were static. All of the passed Condition objects will be of the same
+	 * type and will correspond to the class type of the object on which this
+	 * method is invoked. This method must be called inside a permission check
+	 * only.
 	 * 
 	 * @param conditions The array of Condition objects, which must all be of
 	 *        the same class and mutable. The receiver must be one of those
@@ -95,11 +96,12 @@ public interface Condition {
 	 *        times. The SecurityManager treats this Dictionary as an opaque
 	 *        object and simply creates an empty dictionary and passes it to
 	 *        subsequent invocations if multiple invocations are needed.
-	 * @return <code>true</code> if all the Condition objects are satisfied.
-	 *         Otherwise, <code>false</code> if one of the Condition objects is
+	 * @return {@code true} if all the Condition objects are satisfied.
+	 *         Otherwise, {@code false} if one of the Condition objects is
 	 *         not satisfied.
 	 */
-	boolean isSatisfied(Condition conditions[], Dictionary context);
+	boolean isSatisfied(Condition conditions[],
+			Dictionary<Object, Object> context);
 }
 
 /**
@@ -127,7 +129,8 @@ final class BooleanCondition implements Condition {
 		return false;
 	}
 
-	public boolean isSatisfied(Condition[] conds, Dictionary context) {
+	public boolean isSatisfied(Condition[] conds,
+			Dictionary<Object, Object> context) {
 		for (int i = 0, length = conds.length; i < length; i++) {
 			if (!conds[i].isSatisfied())
 				return false;
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionInfo.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionInfo.java
index 6cb235c..055703a 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionInfo.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionInfo.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,66 +17,67 @@
 package org.osgi.service.condpermadmin;
 
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Condition representation used by the Conditional Permission Admin service.
  * 
  * <p>
  * This class encapsulates two pieces of information: a Condition <i>type</i>
- * (class name), which must implement <code>Condition</code>, and the
+ * (class name), which must implement {@code Condition}, and the
  * arguments passed to its constructor.
  * 
  * <p>
- * In order for a Condition represented by a <code>ConditionInfo</code> to be
+ * In order for a Condition represented by a {@code ConditionInfo} to be
  * instantiated and considered during a permission check, its Condition class
  * must be available from the system classpath.
  * 
  * <p>
  * The Condition class must either:
  * <ul>
- * <li>Declare a public static <code>getCondition</code> method that takes a
- * <code>Bundle</code> object and a <code>ConditionInfo</code> object as
+ * <li>Declare a public static {@code getCondition} method that takes a
+ * {@code Bundle} object and a {@code ConditionInfo} object as
  * arguments. That method must return an object that implements the
- * <code>Condition</code> interface.</li>
- * <li>Implement the <code>Condition</code> interface and define a public
- * constructor that takes a <code>Bundle</code> object and a
- * <code>ConditionInfo</code> object as arguments.
+ * {@code Condition} interface.</li>
+ * <li>Implement the {@code Condition} interface and define a public
+ * constructor that takes a {@code Bundle} object and a
+ * {@code ConditionInfo} object as arguments.
  * </ul>
  * 
  * @Immutable
- * @version $Revision: 6492 $
+ * @version $Id: dd1d84aa3175b2a2dfec879d04c93887f05161be $
  */
 public class ConditionInfo {
 	private final String	type;
 	private final String[]	args;
 
 	/**
-	 * Constructs a <code>ConditionInfo</code> from the specified type and args.
+	 * Constructs a {@code ConditionInfo} from the specified type and args.
 	 * 
 	 * @param type The fully qualified class name of the Condition represented
-	 *        by this <code>ConditionInfo</code>.
+	 *        by this {@code ConditionInfo}.
 	 * @param args The arguments for the Condition. These arguments are
 	 *        available to the newly created Condition by calling the
 	 *        {@link #getArgs()} method.
-	 * @throws NullPointerException If <code>type</code> is <code>null</code>.
+	 * @throws NullPointerException If {@code type} is {@code null}.
 	 */
 	public ConditionInfo(String type, String[] args) {
 		this.type = type;
-		this.args = (args != null) ? (String[]) args.clone() : new String[0];
+		this.args = (args != null) ? args.clone() : new String[0];
 		if (type == null) {
 			throw new NullPointerException("type is null");
 		}
 	}
 
 	/**
-	 * Constructs a <code>ConditionInfo</code> object from the specified encoded
-	 * <code>ConditionInfo</code> string. White space in the encoded
-	 * <code>ConditionInfo</code> string is ignored.
+	 * Constructs a {@code ConditionInfo} object from the specified encoded
+	 * {@code ConditionInfo} string. White space in the encoded
+	 * {@code ConditionInfo} string is ignored.
 	 * 
-	 * @param encodedCondition The encoded <code>ConditionInfo</code>.
+	 * @param encodedCondition The encoded {@code ConditionInfo}.
 	 * @see #getEncoded
 	 * @throws IllegalArgumentException If the specified
-	 *         <code>encodedCondition</code> is not properly formatted.
+	 *         {@code encodedCondition} is not properly formatted.
 	 */
 	public ConditionInfo(String encodedCondition) {
 		if (encodedCondition == null) {
@@ -123,7 +124,7 @@ public class ConditionInfo {
 			}
 
 			/* type may be followed by args which are quoted and encoded */
-			ArrayList argsList = new ArrayList();
+			List<String> argsList = new ArrayList<String>();
 			while (encoded[pos] == '"') {
 				pos++;
 				begin = pos;
@@ -143,8 +144,7 @@ public class ConditionInfo {
 					}
 				}
 			}
-			this.args = (String[]) argsList
-					.toArray(new String[argsList.size()]);
+			this.args = argsList.toArray(new String[argsList.size()]);
 
 			/* the final character must be ']' */
 			char c = encoded[pos];
@@ -162,8 +162,8 @@ public class ConditionInfo {
 	}
 
 	/**
-	 * Returns the string encoding of this <code>ConditionInfo</code> in a form
-	 * suitable for restoring this <code>ConditionInfo</code>.
+	 * Returns the string encoding of this {@code ConditionInfo} in a form
+	 * suitable for restoring this {@code ConditionInfo}.
 	 * 
 	 * <p>
 	 * The encoded format is:
@@ -173,16 +173,16 @@ public class ConditionInfo {
 	 * </pre>
 	 * 
 	 * where <i>argN</i> are strings that must be encoded for proper parsing.
-	 * Specifically, the <code>"</code>, <code>\</code>, carriage return,
-	 * and line feed characters must be escaped using <code>\"</code>,
-	 * <code>\\</code>, <code>\r</code>, and <code>\n</code>, respectively.
+	 * Specifically, the {@code "}, {@code \}, carriage return,
+	 * and line feed characters must be escaped using {@code \"},
+	 * {@code \\}, {@code \r}, and {@code \n}, respectively.
 	 * 
 	 * <p>
 	 * The encoded string contains no leading or trailing whitespace characters.
 	 * A single space character is used between type and "<i>arg0</i>"
 	 * and between the arguments.
 	 * 
-	 * @return The string encoding of this <code>ConditionInfo</code>.
+	 * @return The string encoding of this {@code ConditionInfo}.
 	 */
 	public final String getEncoded() {
 		StringBuffer output = new StringBuffer();
@@ -201,11 +201,11 @@ public class ConditionInfo {
 	}
 
 	/**
-	 * Returns the string representation of this <code>ConditionInfo</code>.
-	 * The string is created by calling the <code>getEncoded</code> method on
-	 * this <code>ConditionInfo</code>.
+	 * Returns the string representation of this {@code ConditionInfo}.
+	 * The string is created by calling the {@code getEncoded} method on
+	 * this {@code ConditionInfo}.
 	 * 
-	 * @return The string representation of this <code>ConditionInfo</code>.
+	 * @return The string representation of this {@code ConditionInfo}.
 	 */
 	public String toString() {
 		return getEncoded();
@@ -213,37 +213,37 @@ public class ConditionInfo {
 
 	/**
 	 * Returns the fully qualified class name of the condition represented by
-	 * this <code>ConditionInfo</code>.
+	 * this {@code ConditionInfo}.
 	 * 
 	 * @return The fully qualified class name of the condition represented by
-	 *         this <code>ConditionInfo</code>.
+	 *         this {@code ConditionInfo}.
 	 */
 	public final String getType() {
 		return type;
 	}
 
 	/**
-	 * Returns arguments of this <code>ConditionInfo</code>.
+	 * Returns arguments of this {@code ConditionInfo}.
 	 * 
-	 * @return The arguments of this <code>ConditionInfo</code>. An empty
-	 *         array is returned if the <code>ConditionInfo</code> has no
+	 * @return The arguments of this {@code ConditionInfo}. An empty
+	 *         array is returned if the {@code ConditionInfo} has no
 	 *         arguments.
 	 */
 	public final String[] getArgs() {
-		return (String[]) args.clone();
+		return args.clone();
 	}
 
 	/**
-	 * Determines the equality of two <code>ConditionInfo</code> objects.
+	 * Determines the equality of two {@code ConditionInfo} objects.
 	 * 
 	 * This method checks that specified object has the same type and args as
-	 * this <code>ConditionInfo</code> object.
+	 * this {@code ConditionInfo} object.
 	 * 
 	 * @param obj The object to test for equality with this
-	 *        <code>ConditionInfo</code> object.
-	 * @return <code>true</code> if <code>obj</code> is a
-	 *         <code>ConditionInfo</code>, and has the same type and args as
-	 *         this <code>ConditionInfo</code> object; <code>false</code>
+	 *        {@code ConditionInfo} object.
+	 * @return {@code true} if {@code obj} is a
+	 *         {@code ConditionInfo}, and has the same type and args as
+	 *         this {@code ConditionInfo} object; {@code false}
 	 *         otherwise.
 	 */
 	public boolean equals(Object obj) {
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java
index 2ea7d87..86cc3f3 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,8 @@ import org.osgi.service.permissionadmin.PermissionInfo;
  * the Conditional Permission Table.
  * 
  * @ThreadSafe
- * @version $Revision: 6782 $
+ * @noimplement
+ * @version $Id: 887450b65e453145d57197e2db75db0bb2918ef4 $
  */
 public interface ConditionalPermissionAdmin {
 	/**
@@ -45,17 +46,17 @@ public interface ConditionalPermissionAdmin {
 	 * this method can no longer be committed.
 	 * 
 	 * @param conditions The conditions that need to be satisfied to enable the
-	 *        specified permissions. This argument can be <code>null</code> or
+	 *        specified permissions. This argument can be {@code null} or
 	 *        an empty array indicating the specified permissions are not
 	 *        guarded by any conditions.
 	 * @param permissions The permissions that are enabled when the specified
 	 *        conditions, if any, are satisfied. This argument must not be
-	 *        <code>null</code> and must specify at least one permission.
+	 *        {@code null} and must specify at least one permission.
 	 * @return The ConditionalPermissionInfo for the specified Conditions and
 	 *         Permissions.
 	 * @throws IllegalArgumentException If no permissions are specified.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AllPermission</code>.
+	 *         {@code AllPermission}.
 	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
 	 *             instead.
 	 */
@@ -66,7 +67,7 @@ public interface ConditionalPermissionAdmin {
 	 * Set or create a Conditional Permission Info with a specified name in the
 	 * Conditional Permission Table.
 	 * <p>
-	 * If the specified name is <code>null</code>, a new Conditional Permission
+	 * If the specified name is {@code null}, a new Conditional Permission
 	 * Info must be created and will be given a unique, never reused name. If
 	 * there is currently no Conditional Permission Info with the specified
 	 * name, a new Conditional Permission Info must be created with the
@@ -81,19 +82,19 @@ public interface ConditionalPermissionAdmin {
 	 * this method can no longer be committed.
 	 * 
 	 * @param name The name of the Conditional Permission Info, or
-	 *        <code>null</code>.
+	 *        {@code null}.
 	 * @param conditions The conditions that need to be satisfied to enable the
-	 *        specified permissions. This argument can be <code>null</code> or
+	 *        specified permissions. This argument can be {@code null} or
 	 *        an empty array indicating the specified permissions are not
 	 *        guarded by any conditions.
 	 * @param permissions The permissions that are enabled when the specified
 	 *        conditions, if any, are satisfied. This argument must not be
-	 *        <code>null</code> and must specify at least one permission.
+	 *        {@code null} and must specify at least one permission.
 	 * @return The ConditionalPermissionInfo for the specified name, Conditions
 	 *         and Permissions.
 	 * @throws IllegalArgumentException If no permissions are specified.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AllPermission</code>.
+	 *         {@code AllPermission}.
 	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
 	 *             instead.
 	 */
@@ -117,14 +118,14 @@ public interface ConditionalPermissionAdmin {
 	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
 	 *             instead.
 	 */
-	Enumeration/* <ConditionalPermissionInfo> */getConditionalPermissionInfos();
+	Enumeration<ConditionalPermissionInfo> getConditionalPermissionInfos();
 
 	/**
 	 * Return the Conditional Permission Info with the specified name.
 	 * 
 	 * @param name The name of the Conditional Permission Info to be returned.
 	 * @return The Conditional Permission Info with the specified name or
-	 *         <code>null</code> if no Conditional Permission Info with the
+	 *         {@code null} if no Conditional Permission Info with the
 	 *         specified name exists in the Conditional Permission Table.
 	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
 	 *             instead.
@@ -145,11 +146,11 @@ public interface ConditionalPermissionAdmin {
 	 * <li>It has no headers</li>
 	 * <li>It has the empty version (0.0.0)</li>
 	 * <li>Its last modified time=0</li>
-	 * <li>Many methods will throw <code>IllegalStateException</code> because the state is UNINSTALLED</li>
-	 * <li>All other methods return a <code>null</code></li>
+	 * <li>Many methods will throw {@code IllegalStateException} because the state is UNINSTALLED</li>
+	 * <li>All other methods return a {@code null}</li>
 	 * </ul> 
 	 * @param signers The signers for which to return an Access Control Context.
-	 * @return An <code>AccessControlContext</code> that has the Permissions
+	 * @return An {@code AccessControlContext} that has the Permissions
 	 *         associated with the signer.
 	 */
 	AccessControlContext getAccessControlContext(String[] signers);
@@ -171,22 +172,22 @@ public interface ConditionalPermissionAdmin {
 	/**
 	 * Creates a new ConditionalPermissionInfo with the specified fields
 	 * suitable for insertion into a {@link ConditionalPermissionUpdate}. The
-	 * <code>delete</code> method on <code>ConditionalPermissionInfo</code>
+	 * {@code delete} method on {@code ConditionalPermissionInfo}
 	 * objects created with this method must throw
 	 * UnsupportedOperationException.
 	 * 
 	 * @param name The name of the created
-	 *        <code>ConditionalPermissionInfo</code> or <code>null</code> to
+	 *        {@code ConditionalPermissionInfo} or {@code null} to
 	 *        have a unique name generated when the returned
-	 *        <code>ConditionalPermissionInfo</code> is committed in an update
+	 *        {@code ConditionalPermissionInfo} is committed in an update
 	 *        to the Conditional Permission Table.
 	 * @param conditions The conditions that need to be satisfied to enable the
-	 *        specified permissions. This argument can be <code>null</code> or
+	 *        specified permissions. This argument can be {@code null} or
 	 *        an empty array indicating the specified permissions are not
 	 *        guarded by any conditions.
 	 * @param permissions The permissions that are enabled when the specified
 	 *        conditions, if any, are satisfied. This argument must not be
-	 *        <code>null</code> and must specify at least one permission.
+	 *        {@code null} and must specify at least one permission.
 	 * @param access Access decision. Must be one of the following values:
 	 *        <ul>
 	 *        <li>{@link ConditionalPermissionInfo#ALLOW allow}</li>
@@ -194,7 +195,7 @@ public interface ConditionalPermissionAdmin {
 	 *        </ul>
 	 *        The specified access decision value must be evaluated case
 	 *        insensitively.
-	 * @return A <code>ConditionalPermissionInfo</code> object suitable for
+	 * @return A {@code ConditionalPermissionInfo} object suitable for
 	 *         insertion into a {@link ConditionalPermissionUpdate}.
 	 * @throws IllegalArgumentException If no permissions are specified or if
 	 *         the specified access decision is not a valid value.
@@ -205,28 +206,28 @@ public interface ConditionalPermissionAdmin {
 			String access);
 
 	/**
-	 * Creates a new <code>ConditionalPermissionInfo</code> from the specified
-	 * encoded <code>ConditionalPermissionInfo</code> string suitable for
+	 * Creates a new {@code ConditionalPermissionInfo} from the specified
+	 * encoded {@code ConditionalPermissionInfo} string suitable for
 	 * insertion into a {@link ConditionalPermissionUpdate}. The
-	 * <code>delete</code> method on <code>ConditionalPermissionInfo</code>
+	 * {@code delete} method on {@code ConditionalPermissionInfo}
 	 * objects created with this method must throw
 	 * UnsupportedOperationException.
 	 * 
 	 * @param encodedConditionalPermissionInfo The encoded
-	 *        <code>ConditionalPermissionInfo</code>. White space in the encoded
-	 *        <code>ConditionalPermissionInfo</code> is ignored. The access
+	 *        {@code ConditionalPermissionInfo}. White space in the encoded
+	 *        {@code ConditionalPermissionInfo} is ignored. The access
 	 *        decision value in the encoded
-	 *        <code>ConditionalPermissionInfo</code> must be evaluated case
+	 *        {@code ConditionalPermissionInfo} must be evaluated case
 	 *        insensitively. If the encoded
-	 *        <code>ConditionalPermissionInfo</code> does not contain the
-	 *        optional name, <code>null</code> must be used for the name and a
+	 *        {@code ConditionalPermissionInfo} does not contain the
+	 *        optional name, {@code null} must be used for the name and a
 	 *        unique name will be generated when the returned
-	 *        <code>ConditionalPermissionInfo</code> is committed in an update
+	 *        {@code ConditionalPermissionInfo} is committed in an update
 	 *        to the Conditional Permission Table.
-	 * @return A <code>ConditionalPermissionInfo</code> object suitable for
+	 * @return A {@code ConditionalPermissionInfo} object suitable for
 	 *         insertion into a {@link ConditionalPermissionUpdate}.
 	 * @throws IllegalArgumentException If the specified
-	 *         <code>encodedConditionalPermissionInfo</code> is not properly
+	 *         {@code encodedConditionalPermissionInfo} is not properly
 	 *         formatted.
 	 * @see ConditionalPermissionInfo#getEncoded
 	 * @since 1.1
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java
index dbe09be..92e5aeb 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,7 +24,8 @@ import org.osgi.service.permissionadmin.PermissionInfo;
  * Permission Admin service.
  * 
  * @Immutable
- * @version $Revision: 6492 $
+ * @noimplement
+ * @version $Id: ca51e4dd6dfa350959bb2a2e420bdb2c996323e9 $
  */
 public interface ConditionalPermissionInfo {
 	/**
@@ -80,7 +81,7 @@ public interface ConditionalPermissionInfo {
 	 *         {@link ConditionalPermissionAdmin} methods deprecated in version
 	 *         1.1.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AllPermission</code>.
+	 *         {@code AllPermission}.
 	 * @deprecated Since 1.1. Use
 	 *             {@link ConditionalPermissionAdmin#newConditionalPermissionUpdate()}
 	 *             instead to manage the Conditional Permissions.
@@ -91,7 +92,7 @@ public interface ConditionalPermissionInfo {
 	 * Returns the name of this Conditional Permission Info.
 	 * 
 	 * @return The name of this Conditional Permission Info. This can be
-	 *         <code>null</code> if this Conditional Permission Info was created
+	 *         {@code null} if this Conditional Permission Info was created
 	 *         without a name.
 	 */
 	String getName();
@@ -111,9 +112,8 @@ public interface ConditionalPermissionInfo {
 	String getAccessDecision();
 
 	/**
-	 * Returns the string encoding of this
-	 * <code>ConditionalPermissionInfo</code> in a form suitable for restoring
-	 * this <code>ConditionalPermissionInfo</code>.
+	 * Returns the string encoding of this {@code ConditionalPermissionInfo} in
+	 * a form suitable for restoring this {@code ConditionalPermissionInfo}.
 	 * 
 	 * <p>
 	 * The encoded format is:
@@ -126,15 +126,15 @@ public interface ConditionalPermissionInfo {
 	 * more {@link ConditionInfo#getEncoded() encoded conditions},
 	 * <i>permissions</i> is one or more {@link PermissionInfo#getEncoded()
 	 * encoded permissions} and <i>name</i> is the name of the
-	 * <code>ConditionalPermissionInfo</code>.
+	 * {@code ConditionalPermissionInfo}.
 	 * 
 	 * <p>
 	 * <i>name</i> is optional. If <i>name</i> is present in the encoded string,
-	 * it must quoted, beginning and ending with <code>"</code>. The
-	 * <i>name</i> value must be encoded for proper parsing. Specifically, the
-	 * <code>"</code>, <code>\</code>, carriage return, and line feed
-	 * characters must be escaped using <code>\"</code>, <code>\\</code>,
-	 * <code>\r</code>, and <code>\n</code>, respectively.
+	 * it must quoted, beginning and ending with {@code "}. The <i>name</i>
+	 * value must be encoded for proper parsing. Specifically, the
+	 * {@code "}, {@code \}, carriage return, and line feed characters must
+	 * be escaped using {@code \"}, {@code \\}, {@code \r}, and {@code \n},
+	 * respectively.
 	 * 
 	 * <p>
 	 * The encoded string contains no leading or trailing whitespace characters.
@@ -143,38 +143,37 @@ public interface ConditionalPermissionInfo {
 	 * All encoded conditions and permissions are separated by a single space
 	 * character.
 	 * 
-	 * @return The string encoding of this
-	 *         <code>ConditionalPermissionInfo</code>.
+	 * @return The string encoding of this {@code ConditionalPermissionInfo}.
 	 * @since 1.1
 	 */
 	String getEncoded();
 
 	/**
 	 * Returns the string representation of this
-	 * <code>ConditionalPermissionInfo</code>. The string is created by calling
-	 * the <code>getEncoded</code> method on this
-	 * <code>ConditionalPermissionInfo</code>.
+	 * {@code ConditionalPermissionInfo}. The string is created by calling
+	 * the {@code getEncoded} method on this
+	 * {@code ConditionalPermissionInfo}.
 	 * 
 	 * @return The string representation of this
-	 *         <code>ConditionalPermissionInfo</code>.
+	 *         {@code ConditionalPermissionInfo}.
 	 * @since 1.1
 	 */
 	String toString();
 
 	/**
-	 * Determines the equality of two <code>ConditionalPermissionInfo</code>
+	 * Determines the equality of two {@code ConditionalPermissionInfo}
 	 * objects.
 	 * 
 	 * This method checks that specified object has the same access decision,
 	 * conditions, permissions and name as this
-	 * <code>ConditionalPermissionInfo</code> object.
+	 * {@code ConditionalPermissionInfo} object.
 	 * 
 	 * @param obj The object to test for equality with this
-	 *        <code>ConditionalPermissionInfo</code> object.
-	 * @return <code>true</code> if <code>obj</code> is a
-	 *         <code>ConditionalPermissionInfo</code>, and has the same access
+	 *        {@code ConditionalPermissionInfo} object.
+	 * @return {@code true} if {@code obj} is a
+	 *         {@code ConditionalPermissionInfo}, and has the same access
 	 *         decision, conditions, permissions and name as this
-	 *         <code>ConditionalPermissionInfo</code> object; <code>false</code>
+	 *         {@code ConditionalPermissionInfo} object; {@code false}
 	 *         otherwise.
 	 * @since 1.1
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java
index b116cf9..4ba86f3 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,7 +25,8 @@ import java.util.List;
  * commit will fail and this object should be discarded.
  * 
  * @ThreadSafe
- * @version $Revision: 6492 $
+ * @noimplement
+ * @version $Id: 3b16b47db71fa449d60d5acdcc9f7dddc7679a25 $
  * @since 1.1
  */
 public interface ConditionalPermissionUpdate {
@@ -43,14 +44,14 @@ public interface ConditionalPermissionUpdate {
 	 * The list returned by this method is ordered and the most significant
 	 * table entry is the first entry in the list.
 	 * 
-	 * @return A <code>List</code> of the {@link ConditionalPermissionInfo}s
+	 * @return A {@code List} of the {@link ConditionalPermissionInfo}s
 	 *         which represent the Conditional Permissions maintained by this
 	 *         update. Modifications to this list will not affect the
 	 *         Conditional Permission Table until successfully committed. The
 	 *         list may be empty if the Conditional Permission Table was empty
 	 *         when this update was created.
 	 */
-	List /* <ConditionalPermissionInfo> */getConditionalPermissionInfos();
+	List<ConditionalPermissionInfo> getConditionalPermissionInfos();
 
 	/**
 	 * Commit this update. If no changes have been made to the Conditional
@@ -60,25 +61,25 @@ public interface ConditionalPermissionUpdate {
 	 * object.
 	 * <p>
 	 * If any of the {@link ConditionalPermissionInfo}s in the update list has
-	 * <code>null</code> as a name it will be replaced with a new
+	 * {@code null} as a name it will be replaced with a new
 	 * {@link ConditionalPermissionInfo} object that has a generated name which
 	 * is unique within the list.
 	 * <p>
 	 * No two entries in this update's Conditional Permissions may have the same
 	 * name. Other consistency checks may also be performed. If this update's
 	 * Conditional Permissions are determined to be inconsistent in some way
-	 * then an <code>IllegalStateException</code> will be thrown.
+	 * then an {@code IllegalStateException} will be thrown.
 	 * <p>
-	 * This method returns <code>false</code> if the commit did not occur
+	 * This method returns {@code false} if the commit did not occur
 	 * because the Conditional Permission Table has been modified since the
 	 * creation of this update.
 	 * 
-	 * @return <code>true</code> if the commit was successful.
-	 *         <code>false</code> if the commit did not occur because the
+	 * @return {@code true} if the commit was successful.
+	 *         {@code false} if the commit did not occur because the
 	 *         Conditional Permission Table has been modified since the creation
 	 *         of this update.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AllPermission</code>.
+	 *         {@code AllPermission}.
 	 * @throws IllegalStateException If this update's Conditional Permissions
 	 *         are not valid or inconsistent. For example, this update has two
 	 *         Conditional Permissions in it with the same name.
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundle.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundle.java
index f50b7c8..f935f9b 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundle.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundle.java
@@ -17,7 +17,6 @@ package org.osgi.service.framework;
 
 import java.io.InputStream;
 import java.util.Map;
-
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.launch.Framework;
@@ -99,8 +98,10 @@ import org.osgi.framework.launch.Framework;
  * the child framework.
  * 
  * @see SurrogateBundle
- * @deprecated This is proposed API. As a result, this API may never be published 
- * or the final API may change substantially by the time of final publication. 
+ * @deprecated This API proposal was rejected by the OSGi Alliance and will 
+ * not be part of any OSGi specification.  Please transition to the 
+ * org.osgi.framework.hooks API to control resolution, bundle, and service 
+ * isolation. This API will be removed from Equinox in the 3.9 release
  * You are cautioned against relying upon this API.
  * @ThreadSafe
  * @version $Revision: 6860 $
@@ -137,8 +138,7 @@ public interface CompositeBundle extends Bundle {
 	 *             If the update fails.
 	 * @see CompositeBundleFactory#installCompositeBundle(Map, String, Map)
 	 */
-	void update(Map /* <String, String> */compositeManifest)
-			throws BundleException;
+	void update(Map /* <String, String> */compositeManifest) throws BundleException;
 
 	/**
 	 * This operation is not supported for composite bundles. A
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundleFactory.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundleFactory.java
index a2b58ec..67e9de7 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundleFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/CompositeBundleFactory.java
@@ -16,10 +16,7 @@
 package org.osgi.service.framework;
 
 import java.util.Map;
-
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
+import org.osgi.framework.*;
 import org.osgi.framework.launch.Framework;
 
 /**
@@ -28,8 +25,10 @@ import org.osgi.framework.launch.Framework;
  * If present, there will only be a single instance of this service registered
  * with the Framework.
  * 
- * @deprecated This is proposed API. As a result, this API may never be published 
- * or the final API may change substantially by the time of final publication. 
+ * @deprecated This API proposal was rejected by the OSGi Alliance and will 
+ * not be part of any OSGi specification.  Please transition to the 
+ * org.osgi.framework.hooks API to control resolution, bundle, and service 
+ * isolation. This API will be removed from Equinox in the 3.9 release 
  * You are cautioned against relying upon this API.
  * @ThreadSafe
  * @version $Revision: 6860 $
@@ -42,7 +41,7 @@ public interface CompositeBundleFactory {
 	 * to select services that will be registered into a child framework by its
 	 * associated surrogate bundle.
 	 */
-	public static final String	COMPOSITE_SERVICE_FILTER_IMPORT	= "CompositeServiceFilter-Import";
+	public static final String COMPOSITE_SERVICE_FILTER_IMPORT = "CompositeServiceFilter-Import";
 
 	/**
 	 * Manifest header (named "CompositeServiceFilter-Export")
@@ -50,7 +49,7 @@ public interface CompositeBundleFactory {
 	 * bundle to select services that will be registered into a parent framework
 	 * by its associated composite bundle.
 	 */
-	public static final String	COMPOSITE_SERVICE_FILTER_EXPORT	= "CompositeServiceFilter-Export";
+	public static final String COMPOSITE_SERVICE_FILTER_EXPORT = "CompositeServiceFilter-Export";
 
 	/**
 	 * Installs a <code>CompositeBundle</code>. The composite bundle has a new
@@ -149,8 +148,6 @@ public interface CompositeBundleFactory {
 	 * @see Framework
 	 * @see CompositeBundle
 	 */
-	CompositeBundle installCompositeBundle(
-			Map /* <String, String> */frameworkConfig, String location,
-			Map /* <String, String> */compositeManifest) throws BundleException;
+	CompositeBundle installCompositeBundle(Map /* <String, String> */frameworkConfig, String location, Map /* <String, String> */compositeManifest) throws BundleException;
 
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/SurrogateBundle.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/SurrogateBundle.java
index ca5a121..932654b 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/SurrogateBundle.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/framework/SurrogateBundle.java
@@ -16,10 +16,7 @@
 package org.osgi.service.framework;
 
 import java.io.InputStream;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
+import org.osgi.framework.*;
 
 /**
  * A surrogate bundle is installed in a child framework, and is the child-facing
@@ -40,8 +37,10 @@ import org.osgi.framework.BundleException;
  * </ul>
  * <p>
  * @see CompositeBundle
- * @deprecated This is proposed API. As a result, this API may never be published 
- * or the final API may change substantially by the time of final publication. 
+ * @deprecated This API proposal was rejected by the OSGi Alliance and will 
+ * not be part of any OSGi specification.  Please transition to the 
+ * org.osgi.framework.hooks API to control resolution, bundle, and service 
+ * isolation. This API will be removed from Equinox in the 3.9 release 
  * You are cautioned against relying upon this API.
  */
 public interface SurrogateBundle extends Bundle {
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogEntry.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogEntry.java
new file mode 100644
index 0000000..f14bdbc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogEntry.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Provides methods to access the information contained in an individual Log
+ * Service log entry.
+ * 
+ * <p>
+ * A {@code LogEntry} object may be acquired from the
+ * {@code LogReaderService.getLog} method or by registering a
+ * {@code LogListener} object.
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: e20fd66ff9e0264d77f7b7ea19212b305d1b3a40 $
+ * @see LogReaderService#getLog
+ * @see LogListener
+ */
+public interface LogEntry {
+	/**
+	 * Returns the bundle that created this {@code LogEntry} object.
+	 * 
+	 * @return The bundle that created this {@code LogEntry} object;
+	 *         {@code null} if no bundle is associated with this
+	 *         {@code LogEntry} object.
+	 */
+	public Bundle getBundle();
+
+	/**
+	 * Returns the {@code ServiceReference} object for the service associated
+	 * with this {@code LogEntry} object.
+	 * 
+	 * @return {@code ServiceReference} object for the service associated
+	 *         with this {@code LogEntry} object; {@code null} if no
+	 *         {@code ServiceReference} object was provided.
+	 */
+	public ServiceReference getServiceReference();
+
+	/**
+	 * Returns the severity level of this {@code LogEntry} object.
+	 * 
+	 * <p>
+	 * This is one of the severity levels defined by the {@code LogService}
+	 * interface.
+	 * 
+	 * @return Severity level of this {@code LogEntry} object.
+	 * 
+	 * @see LogService#LOG_ERROR
+	 * @see LogService#LOG_WARNING
+	 * @see LogService#LOG_INFO
+	 * @see LogService#LOG_DEBUG
+	 */
+	public int getLevel();
+
+	/**
+	 * Returns the human readable message associated with this {@code LogEntry}
+	 * object.
+	 * 
+	 * @return {@code String} containing the message associated with this
+	 *         {@code LogEntry} object.
+	 */
+	public String getMessage();
+
+	/**
+	 * Returns the exception object associated with this {@code LogEntry}
+	 * object.
+	 * 
+	 * <p>
+	 * In some implementations, the returned exception may not be the original
+	 * exception. To avoid references to a bundle defined exception class, thus
+	 * preventing an uninstalled bundle from being garbage collected, the Log
+	 * Service may return an exception object of an implementation defined
+	 * Throwable subclass. The returned object will attempt to provide as much
+	 * information as possible from the original exception object such as the
+	 * message and stack trace.
+	 * 
+	 * @return {@code Throwable} object of the exception associated with this
+	 *         {@code LogEntry};{@code null} if no exception is
+	 *         associated with this {@code LogEntry} object.
+	 */
+	public Throwable getException();
+
+	/**
+	 * Returns the value of {@code currentTimeMillis()} at the time this
+	 * {@code LogEntry} object was created.
+	 * 
+	 * @return The system time in milliseconds when this {@code LogEntry}
+	 *         object was created.
+	 * @see "System.currentTimeMillis()"
+	 */
+	public long getTime();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogListener.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogListener.java
new file mode 100644
index 0000000..4704a39
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogListener.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import java.util.EventListener;
+
+/**
+ * Subscribes to {@code LogEntry} objects from the {@code LogReaderService}.
+ * 
+ * <p>
+ * A {@code LogListener} object may be registered with the Log Reader Service
+ * using the {@code LogReaderService.addLogListener} method. After the
+ * listener is registered, the {@code logged} method will be called for each
+ * {@code LogEntry} object created. The {@code LogListener} object may be
+ * unregistered by calling the {@code LogReaderService.removeLogListener}
+ * method.
+ * 
+ * @ThreadSafe
+ * @version $Id: 9b1ea6645e00027d03684b74745f47a42fb9ad30 $
+ * @see LogReaderService
+ * @see LogEntry
+ * @see LogReaderService#addLogListener(LogListener)
+ * @see LogReaderService#removeLogListener(LogListener)
+ */
+public interface LogListener extends EventListener {
+	/**
+	 * Listener method called for each LogEntry object created.
+	 * 
+	 * <p>
+	 * As with all event listeners, this method should return to its caller as
+	 * soon as possible.
+	 * 
+	 * @param entry A {@code LogEntry} object containing log information.
+	 * @see LogEntry
+	 */
+	public void logged(LogEntry entry);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogReaderService.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogReaderService.java
new file mode 100644
index 0000000..d6b81f4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogReaderService.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import java.util.Enumeration;
+
+/**
+ * Provides methods to retrieve {@code LogEntry} objects from the log.
+ * <p>
+ * There are two ways to retrieve {@code LogEntry} objects:
+ * <ul>
+ * <li>The primary way to retrieve {@code LogEntry} objects is to register a
+ * {@code LogListener} object whose {@code LogListener.logged} method will
+ * be called for each entry added to the log.
+ * <li>To retrieve past {@code LogEntry} objects, the {@code getLog}
+ * method can be called which will return an {@code Enumeration} of all
+ * {@code LogEntry} objects in the log.
+ * 
+ * @ThreadSafe
+ * @version $Id: bb22587248982a76202b77d03550515b3205f935 $
+ * @see LogEntry
+ * @see LogListener
+ * @see LogListener#logged(LogEntry)
+ */
+public interface LogReaderService {
+	/**
+	 * Subscribes to {@code LogEntry} objects.
+	 * 
+	 * <p>
+	 * This method registers a {@code LogListener} object with the Log Reader
+	 * Service. The {@code LogListener.logged(LogEntry)} method will be
+	 * called for each {@code LogEntry} object placed into the log.
+	 * 
+	 * <p>
+	 * When a bundle which registers a {@code LogListener} object is stopped
+	 * or otherwise releases the Log Reader Service, the Log Reader Service must
+	 * remove all of the bundle's listeners.
+	 * 
+	 * <p>
+	 * If this Log Reader Service's list of listeners already contains a
+	 * listener {@code l} such that {@code (l==listener)}, this method
+	 * does nothing.
+	 * 
+	 * @param listener A {@code LogListener} object to register; the
+	 *        {@code LogListener} object is used to receive {@code LogEntry}
+	 *        objects.
+	 * @see LogListener
+	 * @see LogEntry
+	 * @see LogListener#logged(LogEntry)
+	 */
+	public void addLogListener(LogListener listener);
+
+	/**
+	 * Unsubscribes to {@code LogEntry} objects.
+	 * 
+	 * <p>
+	 * This method unregisters a {@code LogListener} object from the Log
+	 * Reader Service.
+	 * 
+	 * <p>
+	 * If {@code listener} is not contained in this Log Reader Service's list
+	 * of listeners, this method does nothing.
+	 * 
+	 * @param listener A {@code LogListener} object to unregister.
+	 * @see LogListener
+	 */
+	public void removeLogListener(LogListener listener);
+
+	/**
+	 * Returns an {@code Enumeration} of all {@code LogEntry} objects in
+	 * the log.
+	 * 
+	 * <p>
+	 * Each element of the enumeration is a {@code LogEntry} object, ordered
+	 * with the most recent entry first. Whether the enumeration is of all
+	 * {@code LogEntry} objects since the Log Service was started or some
+	 * recent past is implementation-specific. Also implementation-specific is
+	 * whether informational and debug {@code LogEntry} objects are included
+	 * in the enumeration.
+	 * @return An {@code Enumeration} of all {@code LogEntry} objects in
+	 * the log.
+	 */
+	public Enumeration getLog();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogService.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogService.java
new file mode 100644
index 0000000..6809ce9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/LogService.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.log;
+
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Provides methods for bundles to write messages to the log.
+ * 
+ * <p>
+ * {@code LogService} methods are provided to log messages; optionally with a
+ * {@code ServiceReference} object or an exception.
+ * 
+ * <p>
+ * Bundles must log messages in the OSGi environment with a severity level
+ * according to the following hierarchy:
+ * <ol>
+ * <li>{@link #LOG_ERROR}
+ * <li>{@link #LOG_WARNING}
+ * <li>{@link #LOG_INFO}
+ * <li>{@link #LOG_DEBUG}
+ * </ol>
+ * 
+ * @ThreadSafe
+ * @noimplement
+ * @version $Id: 3f44517702a7c759054adbd7bdcc561ace624af9 $
+ */
+public interface LogService {
+	/**
+	 * An error message (Value 1).
+	 * 
+	 * <p>
+	 * This log entry indicates the bundle or service may not be functional.
+	 */
+	public static final int	LOG_ERROR	= 1;
+	/**
+	 * A warning message (Value 2).
+	 * 
+	 * <p>
+	 * This log entry indicates a bundle or service is still functioning but may
+	 * experience problems in the future because of the warning condition.
+	 */
+	public static final int	LOG_WARNING	= 2;
+	/**
+	 * An informational message (Value 3).
+	 * 
+	 * <p>
+	 * This log entry may be the result of any change in the bundle or service
+	 * and does not indicate a problem.
+	 */
+	public static final int	LOG_INFO	= 3;
+	/**
+	 * A debugging message (Value 4).
+	 * 
+	 * <p>
+	 * This log entry is used for problem determination and may be irrelevant to
+	 * anyone but the bundle developer.
+	 */
+	public static final int	LOG_DEBUG	= 4;
+
+	/**
+	 * Logs a message.
+	 * 
+	 * <p>
+	 * The {@code ServiceReference} field and the {@code Throwable} field
+	 * of the {@code LogEntry} object will be set to {@code null}.
+	 * 
+	 * @param level The severity of the message. This should be one of the
+	 *        defined log levels but may be any integer that is interpreted in a
+	 *        user defined way.
+	 * @param message Human readable string describing the condition or
+	 *        {@code null}.
+	 * @see #LOG_ERROR
+	 * @see #LOG_WARNING
+	 * @see #LOG_INFO
+	 * @see #LOG_DEBUG
+	 */
+	public void log(int level, String message);
+
+	/**
+	 * Logs a message with an exception.
+	 * 
+	 * <p>
+	 * The {@code ServiceReference} field of the {@code LogEntry} object
+	 * will be set to {@code null}.
+	 * 
+	 * @param level The severity of the message. This should be one of the
+	 *        defined log levels but may be any integer that is interpreted in a
+	 *        user defined way.
+	 * @param message The human readable string describing the condition or
+	 *        {@code null}.
+	 * @param exception The exception that reflects the condition or
+	 *        {@code null}.
+	 * @see #LOG_ERROR
+	 * @see #LOG_WARNING
+	 * @see #LOG_INFO
+	 * @see #LOG_DEBUG
+	 */
+	public void log(int level, String message, Throwable exception);
+
+	/**
+	 * Logs a message associated with a specific {@code ServiceReference}
+	 * object.
+	 * 
+	 * <p>
+	 * The {@code Throwable} field of the {@code LogEntry} will be set to
+	 * {@code null}.
+	 * 
+	 * @param sr The {@code ServiceReference} object of the service that this
+	 *        message is associated with or {@code null}.
+	 * @param level The severity of the message. This should be one of the
+	 *        defined log levels but may be any integer that is interpreted in a
+	 *        user defined way.
+	 * @param message Human readable string describing the condition or
+	 *        {@code null}.
+	 * @see #LOG_ERROR
+	 * @see #LOG_WARNING
+	 * @see #LOG_INFO
+	 * @see #LOG_DEBUG
+	 */
+	public void log(ServiceReference sr, int level, String message);
+
+	/**
+	 * Logs a message with an exception associated and a
+	 * {@code ServiceReference} object.
+	 * 
+	 * @param sr The {@code ServiceReference} object of the service that this
+	 *        message is associated with.
+	 * @param level The severity of the message. This should be one of the
+	 *        defined log levels but may be any integer that is interpreted in a
+	 *        user defined way.
+	 * @param message Human readable string describing the condition or
+	 *        {@code null}.
+	 * @param exception The exception that reflects the condition or
+	 *        {@code null}.
+	 * @see #LOG_ERROR
+	 * @see #LOG_WARNING
+	 * @see #LOG_INFO
+	 * @see #LOG_DEBUG
+	 */
+	public void log(ServiceReference sr, int level, String message,
+			Throwable exception);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/package-info.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/package-info.java
new file mode 100644
index 0000000..a882111
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/package-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) OSGi Alliance (2010). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Log Service Package Version 1.3.
+ * 
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ * 
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.log; version="[1.3,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.log; version="[1.3,1.4)"}
+ * 
+ * @version $Id: 5c4120fc17628d242e1641557eacb9581b08c920 $
+ */
+
+package org.osgi.service.log;
diff --git a/eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/packageinfo b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/packageinfo
similarity index 100%
copy from eclipse/plugins/org.eclipse.osgi.services/src/org/osgi/service/log/packageinfo
copy to eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/log/packageinfo
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/ExportedPackage.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/ExportedPackage.java
index 67ba3e9..abe1515 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/ExportedPackage.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/ExportedPackage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,18 +31,21 @@ import org.osgi.framework.Version;
  * 
  * <p>
  * The information about an exported package provided by this object may change.
- * An <code>ExportedPackage</code> object becomes stale if the package it
+ * An {@code ExportedPackage} object becomes stale if the package it
  * references has been updated or removed as a result of calling
- * <code>PackageAdmin.refreshPackages()</code>.
+ * {@code PackageAdmin.refreshPackages()}.
  * 
- * If this object becomes stale, its <code>getName()</code> and
- * <code>getVersion()</code> methods continue to return their original values,
- * <code>isRemovalPending()</code> returns <code>true</code>, and
- * <code>getExportingBundle()</code> and <code>getImportingBundles()</code>
- * return <code>null</code>.
+ * If this object becomes stale, its {@code getName()} and
+ * {@code getVersion()} methods continue to return their original values,
+ * {@code isRemovalPending()} returns {@code true}, and
+ * {@code getExportingBundle()} and {@code getImportingBundles()}
+ * return {@code null}.
  * 
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @noimplement
+ * @deprecated The PackageAdmin service has been replaced by the
+ *             <code>org.osgi.framework.wiring</code> package.
+ * @version $Id: c56b99465e3f62a9808297a47de8cb7edb802119 $
  */
 public interface ExportedPackage {
 	/**
@@ -56,8 +59,8 @@ public interface ExportedPackage {
 	 * Returns the bundle exporting the package associated with this exported
 	 * package.
 	 * 
-	 * @return The exporting bundle, or <code>null</code> if this
-	 *         <code>ExportedPackage</code> object has become stale.
+	 * @return The exporting bundle, or {@code null} if this
+	 *         {@code ExportedPackage} object has become stale.
 	 */
 	public Bundle getExportingBundle();
 
@@ -71,8 +74,8 @@ public interface ExportedPackage {
 	 * in the returned array. See {@link RequiredBundle#getRequiringBundles()}.
 	 * 
 	 * @return The array of resolved bundles currently wired to this exported
-	 *         package, or <code>null</code> if this
-	 *         <code>ExportedPackage</code> object has become stale. The array
+	 *         package, or {@code null} if this
+	 *         {@code ExportedPackage} object has become stale. The array
 	 *         will be empty if no bundles are wired to this exported package.
 	 */
 	public Bundle[] getImportingBundles();
@@ -80,7 +83,7 @@ public interface ExportedPackage {
 	/**
 	 * Returns the version of this exported package.
 	 * 
-	 * @return The version of this exported package, or <code>null</code> if
+	 * @return The version of this exported package, or {@code null} if
 	 *         no version information is available.
 	 * @deprecated As of 1.2, replaced by {@link #getVersion}.
 	 */
@@ -97,14 +100,14 @@ public interface ExportedPackage {
 	public Version getVersion();
 
 	/**
-	 * Returns <code>true</code> if the package associated with this
-	 * <code>ExportedPackage</code> object has been exported by a bundle that
+	 * Returns {@code true} if the package associated with this
+	 * {@code ExportedPackage} object has been exported by a bundle that
 	 * has been updated or uninstalled.
 	 * 
-	 * @return <code>true</code> if the associated package is being exported
+	 * @return {@code true} if the associated package is being exported
 	 *         by a bundle that has been updated or uninstalled, or if this
-	 *         <code>ExportedPackage</code> object has become stale;
-	 *         <code>false</code> otherwise.
+	 *         {@code ExportedPackage} object has become stale;
+	 *         {@code false} otherwise.
 	 */
 	public boolean isRemovalPending();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/PackageAdmin.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/PackageAdmin.java
index c93cd28..2c57890 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/PackageAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/PackageAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,10 @@ import org.osgi.framework.Bundle;
  * with the Framework.
  * 
  * @ThreadSafe
- * @version $Revision: 6779 $
+ * @noimplement
+ * @version $Id: a268c3bdc986080fa16bdb2f56ba1d3800d030dd $
+ * @deprecated This service has been replaced by the
+ *             <code>org.osgi.framework.wiring</code> package.
  * @see org.osgi.service.packageadmin.ExportedPackage
  * @see org.osgi.service.packageadmin.RequiredBundle
  */
@@ -37,19 +40,19 @@ public interface PackageAdmin {
 	 * Gets the exported packages for the specified bundle.
 	 * 
 	 * @param bundle The bundle whose exported packages are to be returned, or
-	 *        <code>null</code> if all exported packages are to be returned. If
+	 *        {@code null} if all exported packages are to be returned. If
 	 *        the specified bundle is the system bundle (that is, the bundle
 	 *        with id zero), this method returns all the packages known to be
 	 *        exported by the system bundle. This will include the package
-	 *        specified by the <code>org.osgi.framework.system.packages</code>
+	 *        specified by the {@code org.osgi.framework.system.packages}
 	 *        system property as well as any other package exported by the
 	 *        framework implementation.
 	 * 
-	 * @return An array of exported packages, or <code>null</code> if the
+	 * @return An array of exported packages, or {@code null} if the
 	 *         specified bundle has no exported packages.
-	 * @throws IllegalArgumentException If the specified <code>Bundle</code> was
+	 * @throws IllegalArgumentException If the specified {@code Bundle} was
 	 *         not created by the same framework instance that registered this
-	 *         <code>PackageAdmin</code> service.
+	 *         {@code PackageAdmin} service.
 	 */
 	public ExportedPackage[] getExportedPackages(Bundle bundle);
 
@@ -58,7 +61,7 @@ public interface PackageAdmin {
 	 * 
 	 * @param name The name of the exported packages to be returned.
 	 * 
-	 * @return An array of the exported packages, or <code>null</code> if no
+	 * @return An array of the exported packages, or {@code null} if no
 	 *         exported packages with the specified name exists.
 	 * @since 1.2
 	 */
@@ -73,7 +76,7 @@ public interface PackageAdmin {
 	 * 
 	 * @param name The name of the exported package to be returned.
 	 * 
-	 * @return The exported package, or <code>null</code> if no exported
+	 * @return The exported package, or {@code null} if no exported
 	 *         package with the specified name exists.
 	 * @see #getExportedPackages(String)
 	 */
@@ -101,49 +104,49 @@ public interface PackageAdmin {
 	 * graph any bundle that is wired to a package that is currently exported by
 	 * a bundle in the graph. The graph is fully constructed when there is no
 	 * bundle outside the graph that is wired to a bundle in the graph. The
-	 * graph may contain <code>UNINSTALLED</code> bundles that are currently
+	 * graph may contain {@code UNINSTALLED} bundles that are currently
 	 * still exporting packages.
 	 * 
-	 * <li>Each bundle in the graph that is in the <code>ACTIVE</code> state
-	 * will be stopped as described in the <code>Bundle.stop</code> method.
+	 * <li>Each bundle in the graph that is in the {@code ACTIVE} state
+	 * will be stopped as described in the {@code Bundle.stop} method.
 	 * 
-	 * <li>Each bundle in the graph that is in the <code>RESOLVED</code> state
-	 * is unresolved and thus moved to the <code>INSTALLED</code> state. The
+	 * <li>Each bundle in the graph that is in the {@code RESOLVED} state
+	 * is unresolved and thus moved to the {@code INSTALLED} state. The
 	 * effect of this step is that bundles in the graph are no longer
-	 * <code>RESOLVED</code>.
+	 * {@code RESOLVED}.
 	 * 
-	 * <li>Each bundle in the graph that is in the <code>UNINSTALLED</code>
+	 * <li>Each bundle in the graph that is in the {@code UNINSTALLED}
 	 * state is removed from the graph and is now completely removed from the
 	 * Framework.
 	 * 
-	 * <li>Each bundle in the graph that was in the <code>ACTIVE</code> state
-	 * prior to Step 2 is started as described in the <code>Bundle.start</code>
+	 * <li>Each bundle in the graph that was in the {@code ACTIVE} state
+	 * prior to Step 2 is started as described in the {@code Bundle.start}
 	 * method, causing all bundles required for the restart to be resolved. It
 	 * is possible that, as a result of the previous steps, packages that were
 	 * previously exported no longer are. Therefore, some bundles may be
 	 * unresolvable until another bundle offering a compatible package for
 	 * export has been installed in the Framework.
 	 * <li>A framework event of type
-	 * <code>FrameworkEvent.PACKAGES_REFRESHED</code> is fired.
+	 * {@code FrameworkEvent.PACKAGES_REFRESHED} is fired.
 	 * </ol>
 	 * 
 	 * <p>
 	 * For any exceptions that are thrown during any of these steps, a
-	 * <code>FrameworkEvent</code> of type <code>ERROR</code> is fired
+	 * {@code FrameworkEvent} of type {@code ERROR} is fired
 	 * containing the exception. The source bundle for these events should be
 	 * the specific bundle to which the exception is related. If no specific
 	 * bundle can be associated with the exception then the System Bundle must
 	 * be used as the source bundle for the event.
 	 * 
 	 * @param bundles The bundles whose exported packages are to be updated or
-	 *        removed, or <code>null</code> for all bundles updated or
+	 *        removed, or {@code null} for all bundles updated or
 	 *        uninstalled since the last call to this method.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AdminPermission[System Bundle,RESOLVE]</code> and the Java
+	 *         {@code AdminPermission[System Bundle,RESOLVE]} and the Java
 	 *         runtime environment supports permissions.
-	 * @throws IllegalArgumentException If the specified <code>Bundle</code>s
+	 * @throws IllegalArgumentException If the specified {@code Bundle}s
 	 *         were not created by the same framework instance that registered
-	 *         this <code>PackageAdmin</code> service.
+	 *         this {@code PackageAdmin} service.
 	 */
 	public void refreshPackages(Bundle[] bundles);
 
@@ -155,20 +158,20 @@ public interface PackageAdmin {
 	 * resolve all unresolved bundles installed in the framework.
 	 * 
 	 * <p>
-	 * If <code>null</code> is specified then the Framework will attempt to
+	 * If {@code null} is specified then the Framework will attempt to
 	 * resolve all unresolved bundles. This method must not cause any bundle to
 	 * be refreshed, stopped, or started. This method will not return until the
 	 * operation has completed.
 	 * 
-	 * @param bundles The bundles to resolve or <code>null</code> to resolve all
+	 * @param bundles The bundles to resolve or {@code null} to resolve all
 	 *        unresolved bundles installed in the Framework.
-	 * @return <code>true</code> if all specified bundles are resolved;
+	 * @return {@code true} if all specified bundles are resolved;
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AdminPermission[System Bundle,RESOLVE]</code> and the Java
+	 *         {@code AdminPermission[System Bundle,RESOLVE]} and the Java
 	 *         runtime environment supports permissions.
-	 * @throws IllegalArgumentException If the specified <code>Bundle</code>s
+	 * @throws IllegalArgumentException If the specified {@code Bundle}s
 	 *         were not created by the same framework instance that registered
-	 *         this <code>PackageAdmin</code> service.
+	 *         this {@code PackageAdmin} service.
 	 * @since 1.2
 	 */
 	public boolean resolveBundles(Bundle[] bundles);
@@ -177,12 +180,12 @@ public interface PackageAdmin {
 	 * Returns an array of required bundles having the specified symbolic name.
 	 * 
 	 * <p>
-	 * If <code>null</code> is specified, then all required bundles will be
+	 * If {@code null} is specified, then all required bundles will be
 	 * returned.
 	 * 
-	 * @param symbolicName The bundle symbolic name or <code>null</code> for
+	 * @param symbolicName The bundle symbolic name or {@code null} for
 	 *        all required bundles.
-	 * @return An array of required bundles or <code>null</code> if no
+	 * @return An array of required bundles or {@code null} if no
 	 *         required bundles exist for the specified symbolic name.
 	 * @since 1.2
 	 */
@@ -191,7 +194,7 @@ public interface PackageAdmin {
 	/**
 	 * Returns the bundles with the specified symbolic name whose bundle version
 	 * is within the specified version range. If no bundles are installed that
-	 * have the specified symbolic name, then <code>null</code> is returned.
+	 * have the specified symbolic name, then {@code null} is returned.
 	 * If a version range is specified, then only the bundles that have the
 	 * specified symbolic name and whose bundle versions belong to the specified
 	 * version range are returned. The returned bundles are ordered by version
@@ -201,31 +204,31 @@ public interface PackageAdmin {
 	 * @see org.osgi.framework.Constants#BUNDLE_VERSION_ATTRIBUTE
 	 * @param symbolicName The symbolic name of the desired bundles.
 	 * @param versionRange The version range of the desired bundles, or
-	 *        <code>null</code> if all versions are desired.
+	 *        {@code null} if all versions are desired.
 	 * @return An array of bundles with the specified name belonging to the
 	 *         specified version range ordered in descending version order, or
-	 *         <code>null</code> if no bundles are found.
+	 *         {@code null} if no bundles are found.
 	 * @since 1.2
 	 */
 	public Bundle[] getBundles(String symbolicName, String versionRange);
 
 	/**
 	 * Returns an array of attached fragment bundles for the specified bundle.
-	 * If the specified bundle is a fragment then <code>null</code> is returned.
+	 * If the specified bundle is a fragment then {@code null} is returned.
 	 * If no fragments are attached to the specified bundle then
-	 * <code>null</code> is returned.
+	 * {@code null} is returned.
 	 * <p>
 	 * This method does not attempt to resolve the specified bundle. If the
-	 * specified bundle is not resolved then <code>null</code> is returned.
+	 * specified bundle is not resolved then {@code null} is returned.
 	 * 
 	 * @param bundle The bundle whose attached fragment bundles are to be
 	 *        returned.
-	 * @return An array of fragment bundles or <code>null</code> if the bundle
+	 * @return An array of fragment bundles or {@code null} if the bundle
 	 *         does not have any attached fragment bundles or the bundle is not
 	 *         resolved.
-	 * @throws IllegalArgumentException If the specified <code>Bundle</code> was
+	 * @throws IllegalArgumentException If the specified {@code Bundle} was
 	 *         not created by the same framework instance that registered this
-	 *         <code>PackageAdmin</code> service.
+	 *         {@code PackageAdmin} service.
 	 * @since 1.2
 	 */
 	public Bundle[] getFragments(Bundle bundle);
@@ -236,11 +239,11 @@ public interface PackageAdmin {
 	 * 
 	 * @param bundle The fragment bundle whose host bundles are to be returned.
 	 * @return An array containing the host bundles to which the specified
-	 *         fragment is attached or <code>null</code> if the specified bundle
+	 *         fragment is attached or {@code null} if the specified bundle
 	 *         is not a fragment or is not attached to any host bundles.
-	 * @throws IllegalArgumentException If the specified <code>Bundle</code> was
+	 * @throws IllegalArgumentException If the specified {@code Bundle} was
 	 *         not created by the same framework instance that registered this
-	 *         <code>PackageAdmin</code> service.
+	 *         {@code PackageAdmin} service.
 	 * @since 1.2
 	 */
 	public Bundle[] getHosts(Bundle bundle);
@@ -249,13 +252,13 @@ public interface PackageAdmin {
 	 * Returns the bundle from which the specified class is loaded. The class
 	 * loader of the returned bundle must have been used to load the specified
 	 * class. If the class was not loaded by a bundle class loader then
-	 * <code>null</code> is returned.
+	 * {@code null} is returned.
 	 * 
 	 * @param clazz The class object from which to locate the bundle.
 	 * @return The bundle from which the specified class is loaded or
-	 *         <code>null</code> if the class was not loaded by a bundle class
+	 *         {@code null} if the class was not loaded by a bundle class
 	 *         loader created by the same framework instance that registered
-	 *         this <code>PackageAdmin</code> service.
+	 *         this {@code PackageAdmin} service.
 	 * @since 1.2
 	 */
 	public Bundle getBundle(Class clazz);
@@ -264,7 +267,7 @@ public interface PackageAdmin {
 	 * Bundle type indicating the bundle is a fragment bundle.
 	 * 
 	 * <p>
-	 * The value of <code>BUNDLE_TYPE_FRAGMENT</code> is 0x00000001.
+	 * The value of {@code BUNDLE_TYPE_FRAGMENT} is 0x00000001.
 	 * 
 	 * @since 1.2
 	 */
@@ -286,9 +289,9 @@ public interface PackageAdmin {
 	 * 
 	 * @param bundle The bundle for which to return the special type.
 	 * @return The special type of the bundle.
-	 * @throws IllegalArgumentException If the specified <code>Bundle</code> was
+	 * @throws IllegalArgumentException If the specified {@code Bundle} was
 	 *         not created by the same framework instance that registered this
-	 *         <code>PackageAdmin</code> service.
+	 *         {@code PackageAdmin} service.
 	 * @since 1.2
 	 */
 	public int getBundleType(Bundle bundle);
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/RequiredBundle.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/RequiredBundle.java
index b15c5df..34c0b08 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/RequiredBundle.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/packageadmin/RequiredBundle.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,25 +25,28 @@ import org.osgi.framework.Version;
  * Objects implementing this interface are created by the Package Admin service.
  * 
  * <p>
- * The term <i>required bundle</i> refers to a resolved bundle that has a
- * bundle symbolic name and is not a fragment. That is, a bundle that may be
- * required by other bundles. This bundle may or may not be currently required
- * by other bundles.
+ * The term <i>required bundle</i> refers to a resolved bundle that has a bundle
+ * symbolic name and is not a fragment. That is, a bundle that may be required
+ * by other bundles. This bundle may or may not be currently required by other
+ * bundles.
  * 
  * <p>
  * The information about a required bundle provided by this object may change. A
- * <code>RequiredBundle</code> object becomes stale if an exported package of
+ * {@code RequiredBundle} object becomes stale if an exported package of
  * the bundle it references has been updated or removed as a result of calling
- * <code>PackageAdmin.refreshPackages()</code>).
+ * {@code PackageAdmin.refreshPackages()}).
  * 
- * If this object becomes stale, its <code>getSymbolicName()</code> and
- * <code>getVersion()</code> methods continue to return their original values,
- * <code>isRemovalPending()</code> returns true, and <code>getBundle()</code>
- * and <code>getRequiringBundles()</code> return <code>null</code>.
+ * If this object becomes stale, its {@code getSymbolicName()} and
+ * {@code getVersion()} methods continue to return their original values,
+ * {@code isRemovalPending()} returns true, and {@code getBundle()}
+ * and {@code getRequiringBundles()} return {@code null}.
  * 
  * @since 1.2
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @noimplement
+ * @deprecated The PackageAdmin service has been replaced by the
+ *             <code>org.osgi.framework.wiring</code> package.
+ * @version $Id: 1606b0422cae6769b7eedc2d565df61841da1e22 $
  */
 public interface RequiredBundle {
 	/**
@@ -56,8 +59,8 @@ public interface RequiredBundle {
 	/**
 	 * Returns the bundle associated with this required bundle.
 	 * 
-	 * @return The bundle, or <code>null</code> if this
-	 *         <code>RequiredBundle</code> object has become stale.
+	 * @return The bundle, or {@code null} if this
+	 *         {@code RequiredBundle} object has become stale.
 	 */
 	public Bundle getBundle();
 
@@ -70,7 +73,7 @@ public interface RequiredBundle {
 	 * included in the returned array.
 	 * 
 	 * @return An array of bundles currently requiring this required bundle, or
-	 *         <code>null</code> if this <code>RequiredBundle</code> object
+	 *         {@code null} if this {@code RequiredBundle} object
 	 *         has become stale. The array will be empty if no bundles require
 	 *         this required package.
 	 */
@@ -86,12 +89,12 @@ public interface RequiredBundle {
 	public Version getVersion();
 
 	/**
-	 * Returns <code>true</code> if the bundle associated with this
-	 * <code>RequiredBundle</code> object has been updated or uninstalled.
+	 * Returns {@code true} if the bundle associated with this
+	 * {@code RequiredBundle} object has been updated or uninstalled.
 	 * 
-	 * @return <code>true</code> if the required bundle has been updated or
-	 *         uninstalled, or if the <code>RequiredBundle</code> object has
-	 *         become stale; <code>false</code> otherwise.
+	 * @return {@code true} if the required bundle has been updated or
+	 *         uninstalled, or if the {@code RequiredBundle} object has
+	 *         become stale; {@code false} otherwise.
 	 */
 	public boolean isRemovalPending();
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionAdmin.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionAdmin.java
index d51a9d4..e7d1f80 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionAdmin.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,41 +22,42 @@ package org.osgi.service.permissionadmin;
  * in the OSGi environment.
  * <p>
  * Access to the Permission Admin service is protected by corresponding
- * <code>ServicePermission</code>. In addition <code>AdminPermission</code>
+ * {@code ServicePermission}. In addition {@code AdminPermission}
  * is required to actually set permissions.
  * 
  * <p>
  * Bundle permissions are managed using a permission table. A bundle's location
  * serves as the key into this permission table. The value of a table entry is
- * the set of permissions (of type <code>PermissionInfo</code>) granted to
+ * the set of permissions (of type {@code PermissionInfo}) granted to
  * the bundle named by the given location. A bundle may have an entry in the
  * permission table prior to being installed in the Framework.
  * 
  * <p>
- * The permissions specified in <code>setDefaultPermissions</code> are used as
+ * The permissions specified in {@code setDefaultPermissions} are used as
  * the default permissions which are granted to all bundles that do not have an
  * entry in the permission table.
  * 
  * <p>
  * Any changes to a bundle's permissions in the permission table will take
  * effect no later than when bundle's
- * <code>java.security.ProtectionDomain</code> is next involved in a
+ * {@code java.security.ProtectionDomain} is next involved in a
  * permission check, and will be made persistent.
  * 
  * <p>
  * Only permission classes on the system classpath or from an exported package
  * are considered during a permission check. Additionally, only permission
- * classes that are subclasses of <code>java.security.Permission</code> and
+ * classes that are subclasses of {@code java.security.Permission} and
  * define a 2-argument constructor that takes a <i>name </i> string and an
  * <i>actions </i> string can be used.
  * <p>
  * Permissions implicitly granted by the Framework (for example, a bundle's
  * permission to access its persistent storage area) cannot be changed, and are
- * not reflected in the permissions returned by <code>getPermissions</code>
- * and <code>getDefaultPermissions</code>.
+ * not reflected in the permissions returned by {@code getPermissions}
+ * and {@code getDefaultPermissions}.
  * 
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 91132d707097c085fdb3fb7241c9599335427082 $
  */
 public interface PermissionAdmin {
 	/**
@@ -66,7 +67,7 @@ public interface PermissionAdmin {
 	 *        returned.
 	 * 
 	 * @return The permissions assigned to the bundle with the specified
-	 *         location, or <code>null</code> if that bundle has not been
+	 *         location, or {@code null} if that bundle has not been
 	 *         assigned any permissions.
 	 */
 	PermissionInfo[] getPermissions(String location);
@@ -77,11 +78,11 @@ public interface PermissionAdmin {
 	 * 
 	 * @param location The location of the bundle that will be assigned the
 	 *        permissions.
-	 * @param permissions The permissions to be assigned, or <code>null</code>
+	 * @param permissions The permissions to be assigned, or {@code null}
 	 *        if the specified location is to be removed from the permission
 	 *        table.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AllPermission</code>.
+	 *         {@code AllPermission}.
 	 */
 	void setPermissions(String location, PermissionInfo[] permissions);
 
@@ -90,7 +91,7 @@ public interface PermissionAdmin {
 	 * is, bundle locations for which an entry exists in the permission table.
 	 * 
 	 * @return The locations of bundles that have been assigned any permissions,
-	 *         or <code>null</code> if the permission table is empty.
+	 *         or {@code null} if the permission table is empty.
 	 */
 	String[] getLocations();
 
@@ -101,7 +102,7 @@ public interface PermissionAdmin {
 	 * These are the permissions granted to any bundle that does not have
 	 * permissions assigned to its location.
 	 * 
-	 * @return The default permissions, or <code>null</code> if no default
+	 * @return The default permissions, or {@code null} if no default
 	 *         permissions are set.
 	 */
 	PermissionInfo[] getDefaultPermissions();
@@ -113,10 +114,10 @@ public interface PermissionAdmin {
 	 * These are the permissions granted to any bundle that does not have
 	 * permissions assigned to its location.
 	 * 
-	 * @param permissions The default permissions, or <code>null</code> if the
+	 * @param permissions The default permissions, or {@code null} if the
 	 *        default permissions are to be removed from the permission table.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AllPermission</code>.
+	 *         {@code AllPermission}.
 	 */
 	void setDefaultPermissions(PermissionInfo[] permissions);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionInfo.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionInfo.java
index e4bfae7..a0a9187 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionInfo.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/permissionadmin/PermissionInfo.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2001, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2001, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,19 +22,19 @@ package org.osgi.service.permissionadmin;
  * <p>
  * This class encapsulates three pieces of information: a Permission <i>type
  * </i> (class name), which must be a subclass of
- * <code>java.security.Permission</code>, and the <i>name</i> and <i>actions</i>
+ * {@code java.security.Permission}, and the <i>name</i> and <i>actions</i>
  * arguments passed to its constructor.
  * 
  * <p>
- * In order for a permission represented by a <code>PermissionInfo</code> to be
+ * In order for a permission represented by a {@code PermissionInfo} to be
  * instantiated and considered during a permission check, its Permission class
  * must be available from the system classpath or an exported package. This
  * means that the instantiation of a permission represented by a
- * <code>PermissionInfo</code> may be delayed until the package containing its
+ * {@code PermissionInfo} may be delayed until the package containing its
  * Permission class has been exported by a bundle.
  * 
  * @Immutable
- * @version $Revision: 6492 $
+ * @version $Id: b9516d07ada162fb8fc750f09e1e3a686189c46b $
  */
 public class PermissionInfo {
 	private final String	type;
@@ -42,26 +42,26 @@ public class PermissionInfo {
 	private final String	actions;
 
 	/**
-	 * Constructs a <code>PermissionInfo</code> from the specified type, name,
+	 * Constructs a {@code PermissionInfo} from the specified type, name,
 	 * and actions.
 	 * 
 	 * @param type The fully qualified class name of the permission represented
-	 *        by this <code>PermissionInfo</code>. The class must be a subclass
-	 *        of <code>java.security.Permission</code> and must define a
+	 *        by this {@code PermissionInfo}. The class must be a subclass
+	 *        of {@code java.security.Permission} and must define a
 	 *        2-argument constructor that takes a <i>name</i> string and an
 	 *        <i>actions</i> string.
 	 * 
 	 * @param name The permission name that will be passed as the first argument
-	 *        to the constructor of the <code>Permission</code> class identified
-	 *        by <code>type</code>.
+	 *        to the constructor of the {@code Permission} class identified
+	 *        by {@code type}.
 	 * 
 	 * @param actions The permission actions that will be passed as the second
-	 *        argument to the constructor of the <code>Permission</code> class
-	 *        identified by <code>type</code>.
+	 *        argument to the constructor of the {@code Permission} class
+	 *        identified by {@code type}.
 	 * 
-	 * @throws NullPointerException If <code>type</code> is <code>null</code>.
-	 * @throws IllegalArgumentException If <code>action</code> is not
-	 *         <code>null</code> and <code>name</code> is <code>null</code>.
+	 * @throws NullPointerException If {@code type} is {@code null}.
+	 * @throws IllegalArgumentException If {@code action} is not
+	 *         {@code null} and {@code name} is {@code null}.
 	 */
 	public PermissionInfo(String type, String name, String actions) {
 		this.type = type;
@@ -76,15 +76,15 @@ public class PermissionInfo {
 	}
 
 	/**
-	 * Constructs a <code>PermissionInfo</code> object from the specified
-	 * encoded <code>PermissionInfo</code> string. White space in the encoded
-	 * <code>PermissionInfo</code> string is ignored.
+	 * Constructs a {@code PermissionInfo} object from the specified
+	 * encoded {@code PermissionInfo} string. White space in the encoded
+	 * {@code PermissionInfo} string is ignored.
 	 * 
 	 * 
-	 * @param encodedPermission The encoded <code>PermissionInfo</code>.
+	 * @param encodedPermission The encoded {@code PermissionInfo}.
 	 * @see #getEncoded
 	 * @throws IllegalArgumentException If the specified
-	 *         <code>encodedPermission</code> is not properly formatted.
+	 *         {@code encodedPermission} is not properly formatted.
 	 */
 	public PermissionInfo(String encodedPermission) {
 		if (encodedPermission == null) {
@@ -197,8 +197,8 @@ public class PermissionInfo {
 	}
 
 	/**
-	 * Returns the string encoding of this <code>PermissionInfo</code> in a form
-	 * suitable for restoring this <code>PermissionInfo</code>.
+	 * Returns the string encoding of this {@code PermissionInfo} in a form
+	 * suitable for restoring this {@code PermissionInfo}.
 	 * 
 	 * <p>
 	 * The encoded format is:
@@ -220,10 +220,10 @@ public class PermissionInfo {
 	 * </pre>
 	 * 
 	 * where <i>name</i> and <i>actions</i> are strings that must be encoded for
-	 * proper parsing. Specifically, the <code>"</code>,<code>\</code>,
+	 * proper parsing. Specifically, the {@code "},{@code \},
 	 * carriage return, and line feed characters must be escaped using
-	 * <code>\"</code>, <code>\\</code>,<code>\r</code>, and
-	 * <code>\n</code>, respectively.
+	 * {@code \"}, {@code \\},{@code \r}, and
+	 * {@code \n}, respectively.
 	 * 
 	 * <p>
 	 * The encoded string contains no leading or trailing whitespace characters.
@@ -231,7 +231,7 @@ public class PermissionInfo {
 	 * "<i>name</i>" and between "<i>name</i>" and
 	 * "<i>actions</i>".
 	 * 
-	 * @return The string encoding of this <code>PermissionInfo</code>.
+	 * @return The string encoding of this {@code PermissionInfo}.
 	 */
 	public final String getEncoded() {
 		StringBuffer output = new StringBuffer(
@@ -255,11 +255,11 @@ public class PermissionInfo {
 	}
 
 	/**
-	 * Returns the string representation of this <code>PermissionInfo</code>.
-	 * The string is created by calling the <code>getEncoded</code> method on
-	 * this <code>PermissionInfo</code>.
+	 * Returns the string representation of this {@code PermissionInfo}.
+	 * The string is created by calling the {@code getEncoded} method on
+	 * this {@code PermissionInfo}.
 	 * 
-	 * @return The string representation of this <code>PermissionInfo</code>.
+	 * @return The string representation of this {@code PermissionInfo}.
 	 */
 	public String toString() {
 		return getEncoded();
@@ -267,10 +267,10 @@ public class PermissionInfo {
 
 	/**
 	 * Returns the fully qualified class name of the permission represented by
-	 * this <code>PermissionInfo</code>.
+	 * this {@code PermissionInfo}.
 	 * 
 	 * @return The fully qualified class name of the permission represented by
-	 *         this <code>PermissionInfo</code>.
+	 *         this {@code PermissionInfo}.
 	 */
 	public final String getType() {
 		return type;
@@ -278,10 +278,10 @@ public class PermissionInfo {
 
 	/**
 	 * Returns the name of the permission represented by this
-	 * <code>PermissionInfo</code>.
+	 * {@code PermissionInfo}.
 	 * 
 	 * @return The name of the permission represented by this
-	 *         <code>PermissionInfo</code>, or <code>null</code> if the
+	 *         {@code PermissionInfo}, or {@code null} if the
 	 *         permission does not have a name.
 	 */
 	public final String getName() {
@@ -290,10 +290,10 @@ public class PermissionInfo {
 
 	/**
 	 * Returns the actions of the permission represented by this
-	 * <code>PermissionInfo</code>.
+	 * {@code PermissionInfo}.
 	 * 
 	 * @return The actions of the permission represented by this
-	 *         <code>PermissionInfo</code>, or <code>null</code> if the
+	 *         {@code PermissionInfo}, or {@code null} if the
 	 *         permission does not have any actions associated with it.
 	 */
 	public final String getActions() {
@@ -301,17 +301,17 @@ public class PermissionInfo {
 	}
 
 	/**
-	 * Determines the equality of two <code>PermissionInfo</code> objects.
+	 * Determines the equality of two {@code PermissionInfo} objects.
 	 * 
 	 * This method checks that specified object has the same type, name and
-	 * actions as this <code>PermissionInfo</code> object.
+	 * actions as this {@code PermissionInfo} object.
 	 * 
 	 * @param obj The object to test for equality with this
-	 *        <code>PermissionInfo</code> object.
-	 * @return <code>true</code> if <code>obj</code> is a
-	 *         <code>PermissionInfo</code>, and has the same type, name and
-	 *         actions as this <code>PermissionInfo</code> object;
-	 *         <code>false</code> otherwise.
+	 *        {@code PermissionInfo} object.
+	 * @return {@code true} if {@code obj} is a
+	 *         {@code PermissionInfo}, and has the same type, name and
+	 *         actions as this {@code PermissionInfo} object;
+	 *         {@code false} otherwise.
 	 */
 	public boolean equals(Object obj) {
 		if (obj == this) {
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/startlevel/StartLevel.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/startlevel/StartLevel.java
index 8a69b03..5efb41c 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/startlevel/StartLevel.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/startlevel/StartLevel.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,7 +31,7 @@ import org.osgi.framework.Bundle;
  * higher start level than 1.
  * <p>
  * Access to the StartLevel service is protected by corresponding
- * <code>ServicePermission</code>. In addition <code>AdminPermission</code>
+ * {@code ServicePermission}. In addition {@code AdminPermission}
  * is required to actually modify start level information.
  * <p>
  * Start Level support in the Framework includes the ability to control the
@@ -48,17 +48,17 @@ import org.osgi.framework.Bundle;
  * When the Framework is launched, the Framework will enter start level one and
  * all bundles which are assigned to start level one and whose autostart setting
  * indicates the bundle should be started are started as described in the
- * <code>Bundle.start</code> method. The Framework will continue to increase
+ * {@code Bundle.start} method. The Framework will continue to increase
  * the start level, starting bundles at each start level, until the Framework
  * has reached a beginning start level. At this point the Framework has
  * completed starting bundles and will then fire a Framework event of type
- * <code>FrameworkEvent.STARTED</code> to announce it has completed its
+ * {@code FrameworkEvent.STARTED} to announce it has completed its
  * launch.
  * 
  * <p>
  * Within a start level, bundles may be started in an order defined by the
  * Framework implementation. This may be something like ascending
- * <code>Bundle.getBundleId</code> order or an order based upon dependencies
+ * {@code Bundle.getBundleId} order or an order based upon dependencies
  * between bundles. A similar but reversed order may be used when stopping
  * bundles within a start level.
  * 
@@ -67,7 +67,10 @@ import org.osgi.framework.Bundle;
  * start level of the framework.
  * 
  * @ThreadSafe
- * @version $Revision: 6747 $
+ * @noimplement
+ * @version $Id: bf1b71ed6c9f9d75785b26dccb34362017d93f4a $
+ * @deprecated This service has been replaced by the
+ *             <code>org.osgi.framework.startlevel</code> package.
  */
 public interface StartLevel {
 	/**
@@ -103,12 +106,12 @@ public interface StartLevel {
 	 * the {@link Bundle#start(int)} method using the
 	 * {@link Bundle#START_TRANSIENT} option. The
 	 * {@link Bundle#START_ACTIVATION_POLICY} option must also be used if
-	 * {@link #isBundleActivationPolicyUsed(Bundle)} returns <code>true</code>
+	 * {@link #isBundleActivationPolicyUsed(Bundle)} returns {@code true}
 	 * for the bundle.
 	 * </ol>
 	 * When this process completes after the specified start level is reached,
 	 * the Framework will fire a Framework event of type
-	 * <code>FrameworkEvent.STARTLEVEL_CHANGED</code> to announce it has moved
+	 * {@code FrameworkEvent.STARTLEVEL_CHANGED} to announce it has moved
 	 * to the specified start level.
 	 * 
 	 * <p>
@@ -126,13 +129,13 @@ public interface StartLevel {
 	 * </ol>
 	 * When this process completes after the specified start level is reached,
 	 * the Framework will fire a Framework event of type
-	 * <code>FrameworkEvent.STARTLEVEL_CHANGED</code> to announce it has moved
+	 * {@code FrameworkEvent.STARTLEVEL_CHANGED} to announce it has moved
 	 * to the specified start level.
 	 * 
 	 * <p>
 	 * If the specified start level is equal to the active start level, then no
 	 * bundles are started or stopped, however, the Framework must fire a
-	 * Framework event of type <code>FrameworkEvent.STARTLEVEL_CHANGED</code>
+	 * Framework event of type {@code FrameworkEvent.STARTLEVEL_CHANGED}
 	 * to announce it has finished moving to the specified start level. This
 	 * event may arrive before this method return.
 	 * 
@@ -140,7 +143,7 @@ public interface StartLevel {
 	 * @throws IllegalArgumentException If the specified start level is less
 	 *         than or equal to zero.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AdminPermission[System Bundle,STARTLEVEL]</code> and the
+	 *         {@code AdminPermission[System Bundle,STARTLEVEL]} and the
 	 *         Java runtime environment supports permissions.
 	 */
 	public void setStartLevel(int startlevel);
@@ -153,7 +156,7 @@ public interface StartLevel {
 	 * @throws java.lang.IllegalArgumentException If the specified bundle has
 	 *         been uninstalled or if the specified bundle was not created by
 	 *         the same framework instance that registered this
-	 *         <code>StartLevel</code> service.
+	 *         {@code StartLevel} service.
 	 */
 	public int getBundleStartLevel(Bundle bundle);
 
@@ -171,7 +174,7 @@ public interface StartLevel {
 	 * specified bundle as described in the {@link Bundle#start(int)} method
 	 * using the {@link Bundle#START_TRANSIENT} option. The
 	 * {@link Bundle#START_ACTIVATION_POLICY} option must also be used if
-	 * {@link #isBundleActivationPolicyUsed(Bundle)} returns <code>true</code>
+	 * {@link #isBundleActivationPolicyUsed(Bundle)} returns {@code true}
 	 * for the bundle. The actual starting of this bundle must occur
 	 * asynchronously.
 	 * <p>
@@ -187,9 +190,9 @@ public interface StartLevel {
 	 *         uninstalled, or if the specified start level is less than or
 	 *         equal to zero, or if the specified bundle is the system bundle,
 	 *         or if the specified bundle was not created by the same framework
-	 *         instance that registered this <code>StartLevel</code> service.
+	 *         instance that registered this {@code StartLevel} service.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AdminPermission[bundle,EXECUTE]</code> and the Java runtime
+	 *         {@code AdminPermission[bundle,EXECUTE]} and the Java runtime
 	 *         environment supports permissions.
 	 */
 	public void setBundleStartLevel(Bundle bundle, int startlevel);
@@ -213,7 +216,7 @@ public interface StartLevel {
 	 * Framework.
 	 * 
 	 * <p>
-	 * When a Bundle is installed via <code>BundleContext.installBundle</code>,
+	 * When a Bundle is installed via {@code BundleContext.installBundle},
 	 * it is assigned the initial bundle start level value.
 	 * 
 	 * <p>
@@ -227,7 +230,7 @@ public interface StartLevel {
 	 * @throws IllegalArgumentException If the specified start level is less
 	 *         than or equal to zero.
 	 * @throws SecurityException If the caller does not have
-	 *         <code>AdminPermission[System Bundle,STARTLEVEL]</code> and the
+	 *         {@code AdminPermission[System Bundle,STARTLEVEL]} and the
 	 *         Java runtime environment supports permissions.
 	 */
 	public void setInitialBundleStartLevel(int startlevel);
@@ -240,13 +243,13 @@ public interface StartLevel {
 	 * started when its start level is reached.
 	 * 
 	 * @param bundle The bundle whose autostart setting is to be examined.
-	 * @return <code>true</code> if the autostart setting of the bundle
-	 *         indicates the bundle is to be started. <code>false</code>
+	 * @return {@code true} if the autostart setting of the bundle
+	 *         indicates the bundle is to be started. {@code false}
 	 *         otherwise.
 	 * @throws java.lang.IllegalArgumentException If the specified bundle has
 	 *         been uninstalled or if the specified bundle was not created by
 	 *         the same framework instance that registered this
-	 *         <code>StartLevel</code> service.
+	 *         {@code StartLevel} service.
 	 * @see Bundle#START_TRANSIENT
 	 */
 	public boolean isBundlePersistentlyStarted(Bundle bundle);
@@ -259,13 +262,13 @@ public interface StartLevel {
 	 * activation policy is to be used when the bundle is started.
 	 * 
 	 * @param bundle The bundle whose autostart setting is to be examined.
-	 * @return <code>true</code> if the bundle's autostart setting indicates the
+	 * @return {@code true} if the bundle's autostart setting indicates the
 	 *         activation policy declared in the manifest must be used.
-	 *         <code>false</code> if the bundle must be eagerly activated.
+	 *         {@code false} if the bundle must be eagerly activated.
 	 * @throws java.lang.IllegalArgumentException If the specified bundle has
 	 *         been uninstalled or if the specified bundle was not created by
 	 *         the same framework instance that registered this
-	 *         <code>StartLevel</code> service.
+	 *         {@code StartLevel} service.
 	 * @since 1.1
 	 * @see Bundle#START_ACTIVATION_POLICY
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/AbstractURLStreamHandlerService.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/AbstractURLStreamHandlerService.java
index 1ad37a2..c20a051 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/AbstractURLStreamHandlerService.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/AbstractURLStreamHandlerService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,16 +19,16 @@ package org.osgi.service.url;
 import java.net.*;
 
 /**
- * Abstract implementation of the <code>URLStreamHandlerService</code>
+ * Abstract implementation of the {@code URLStreamHandlerService}
  * interface. All the methods simply invoke the corresponding methods on
- * <code>java.net.URLStreamHandler</code> except for <code>parseURL</code>
- * and <code>setURL</code>, which use the <code>URLStreamHandlerSetter</code>
+ * {@code java.net.URLStreamHandler} except for {@code parseURL}
+ * and {@code setURL}, which use the {@code URLStreamHandlerSetter}
  * parameter. Subclasses of this abstract class should not need to override the
- * <code>setURL</code> and <code>parseURL(URLStreamHandlerSetter,...)</code>
+ * {@code setURL} and {@code parseURL(URLStreamHandlerSetter,...)}
  * methods.
  * 
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: 465a0ed86f5d49b338ffc6a13bb68f60f04e54d6 $
  */
 public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 		implements URLStreamHandlerService {
@@ -39,18 +39,18 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 			throws java.io.IOException;
 
 	/**
-	 * The <code>URLStreamHandlerSetter</code> object passed to the parseURL
+	 * The {@code URLStreamHandlerSetter} object passed to the parseURL
 	 * method.
 	 */
 	protected volatile URLStreamHandlerSetter	realHandler;
 
 	/**
-	 * Parse a URL using the <code>URLStreamHandlerSetter</code> object. This
-	 * method sets the <code>realHandler</code> field with the specified
-	 * <code>URLStreamHandlerSetter</code> object and then calls
-	 * <code>parseURL(URL,String,int,int)</code>.
+	 * Parse a URL using the {@code URLStreamHandlerSetter} object. This
+	 * method sets the {@code realHandler} field with the specified
+	 * {@code URLStreamHandlerSetter} object and then calls
+	 * {@code parseURL(URL,String,int,int)}.
 	 * 
-	 * @param realHandler The object on which the <code>setURL</code> method
+	 * @param realHandler The object on which the {@code setURL} method
 	 *        must be invoked for the specified URL.
 	 * @see "java.net.URLStreamHandler.parseURL"
 	 */
@@ -61,7 +61,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 	}
 
 	/**
-	 * This method calls <code>super.toExternalForm</code>.
+	 * This method calls {@code super.toExternalForm}.
 	 * 
 	 * @see "java.net.URLStreamHandler.toExternalForm"
 	 */
@@ -70,7 +70,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 	}
 
 	/**
-	 * This method calls <code>super.equals(URL,URL)</code>.
+	 * This method calls {@code super.equals(URL,URL)}.
 	 * 
 	 * @see "java.net.URLStreamHandler.equals(URL,URL)"
 	 */
@@ -79,7 +79,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 	}
 
 	/**
-	 * This method calls <code>super.getDefaultPort</code>.
+	 * This method calls {@code super.getDefaultPort}.
 	 * 
 	 * @see "java.net.URLStreamHandler.getDefaultPort"
 	 */
@@ -88,7 +88,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 	}
 
 	/**
-	 * This method calls <code>super.getHostAddress</code>.
+	 * This method calls {@code super.getHostAddress}.
 	 * 
 	 * @see "java.net.URLStreamHandler.getHostAddress"
 	 */
@@ -97,7 +97,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 	}
 
 	/**
-	 * This method calls <code>super.hashCode(URL)</code>.
+	 * This method calls {@code super.hashCode(URL)}.
 	 * 
 	 * @see "java.net.URLStreamHandler.hashCode(URL)"
 	 */
@@ -106,7 +106,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 	}
 
 	/**
-	 * This method calls <code>super.hostsEqual</code>.
+	 * This method calls {@code super.hostsEqual}.
 	 * 
 	 * @see "java.net.URLStreamHandler.hostsEqual"
 	 */
@@ -115,7 +115,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 	}
 
 	/**
-	 * This method calls <code>super.sameFile</code>.
+	 * This method calls {@code super.sameFile}.
 	 * 
 	 * @see "java.net.URLStreamHandler.sameFile"
 	 */
@@ -125,7 +125,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 
 	/**
 	 * This method calls
-	 * <code>realHandler.setURL(URL,String,String,int,String,String)</code>.
+	 * {@code realHandler.setURL(URL,String,String,int,String,String)}.
 	 * 
 	 * @see "java.net.URLStreamHandler.setURL(URL,String,String,int,String,String)"
 	 * @deprecated This method is only for compatibility with handlers written
@@ -138,7 +138,7 @@ public abstract class AbstractURLStreamHandlerService extends URLStreamHandler
 
 	/**
 	 * This method calls
-	 * <code>realHandler.setURL(URL,String,String,int,String,String,String,String)</code>.
+	 * {@code realHandler.setURL(URL,String,String,int,String,String,String,String)}.
 	 * 
 	 * @see "java.net.URLStreamHandler.setURL(URL,String,String,int,String,String,String,String)"
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLConstants.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLConstants.java
index ae95305..fbf768b 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLConstants.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLConstants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,15 +18,16 @@ package org.osgi.service.url;
 
 /**
  * Defines standard names for property keys associated with
- * {@link URLStreamHandlerService} and <code>java.net.ContentHandler</code>
+ * {@link URLStreamHandlerService} and {@code java.net.ContentHandler}
  * services.
  * 
  * <p>
  * The values associated with these keys are of type
- * <code>java.lang.String[]</code> or <code>java.lang.String</code>, unless
+ * {@code java.lang.String[]} or {@code java.lang.String}, unless
  * otherwise indicated.
  * 
- * @version $Revision: 5673 $
+ * @noimplement
+ * @version $Id: 5ec8db316249f4b956fe083b986c11153d0fa8fe $
  */
 public interface URLConstants {
 	/**
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerService.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerService.java
index b1ff7d8..7cc5d6e 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerService.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,22 +20,22 @@ import java.net.*;
 
 /**
  * Service interface with public versions of the protected
- * <code>java.net.URLStreamHandler</code> methods.
+ * {@code java.net.URLStreamHandler} methods.
  * <p>
  * The important differences between this interface and the
- * <code>URLStreamHandler</code> class are that the <code>setURL</code>
- * method is absent and the <code>parseURL</code> method takes a
+ * {@code URLStreamHandler} class are that the {@code setURL}
+ * method is absent and the {@code parseURL} method takes a
  * {@link URLStreamHandlerSetter} object as the first argument. Classes
- * implementing this interface must call the <code>setURL</code> method on the
- * <code>URLStreamHandlerSetter</code> object received in the
- * <code>parseURL</code> method instead of
- * <code>URLStreamHandler.setURL</code> to avoid a
- * <code>SecurityException</code>.
+ * implementing this interface must call the {@code setURL} method on the
+ * {@code URLStreamHandlerSetter} object received in the
+ * {@code parseURL} method instead of
+ * {@code URLStreamHandler.setURL} to avoid a
+ * {@code SecurityException}.
  * 
  * @see AbstractURLStreamHandlerService
  * 
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: 4982ef5b407669975afe2856a9702246d2d9c2ba $
  */
 public interface URLStreamHandlerService {
 	/**
@@ -44,11 +44,11 @@ public interface URLStreamHandlerService {
 	public URLConnection openConnection(URL u) throws java.io.IOException;
 
 	/**
-	 * Parse a URL. This method is called by the <code>URLStreamHandler</code>
-	 * proxy, instead of <code>java.net.URLStreamHandler.parseURL</code>,
-	 * passing a <code>URLStreamHandlerSetter</code> object.
+	 * Parse a URL. This method is called by the {@code URLStreamHandler}
+	 * proxy, instead of {@code java.net.URLStreamHandler.parseURL},
+	 * passing a {@code URLStreamHandlerSetter} object.
 	 * 
-	 * @param realHandler The object on which <code>setURL</code> must be
+	 * @param realHandler The object on which {@code setURL} must be
 	 *        invoked for this URL.
 	 * @see "java.net.URLStreamHandler.parseURL"
 	 */
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerSetter.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerSetter.java
index 36bdce8..dd2e0c2 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerSetter.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/service/url/URLStreamHandlerSetter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2002, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,20 +19,20 @@ package org.osgi.service.url;
 import java.net.URL;
 
 /**
- * Interface used by <code>URLStreamHandlerService</code> objects to call the
- * <code>setURL</code> method on the proxy <code>URLStreamHandler</code>
+ * Interface used by {@code URLStreamHandlerService} objects to call the
+ * {@code setURL} method on the proxy {@code URLStreamHandler}
  * object.
  * 
  * <p>
  * Objects of this type are passed to the
  * {@link URLStreamHandlerService#parseURL} method. Invoking the
- * <code>setURL</code> method on the <code>URLStreamHandlerSetter</code>
- * object will invoke the <code>setURL</code> method on the proxy
- * <code>URLStreamHandler</code> object that is actually registered with
- * <code>java.net.URL</code> for the protocol.
+ * {@code setURL} method on the {@code URLStreamHandlerSetter}
+ * object will invoke the {@code setURL} method on the proxy
+ * {@code URLStreamHandler} object that is actually registered with
+ * {@code java.net.URL} for the protocol.
  * 
  * @ThreadSafe
- * @version $Revision: 5673 $
+ * @version $Id: f55d4c29678503c244f56dcb2b5621b3be11cc8d $
  */
 public interface URLStreamHandlerSetter {
 	/**
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/AbstractTracked.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/AbstractTracked.java
index 681148f..64a271a 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/AbstractTracked.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/AbstractTracked.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2007, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2007, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,11 +30,14 @@ import java.util.Map;
  * tracked items. This is not a public class. It is only for use by the
  * implementation of the Tracker class.
  * 
+ * @param <S> The tracked item. It is the key.
+ * @param <T> The value mapped to the tracked item.
+ * @param <R> The reason the tracked item is being tracked or untracked.
  * @ThreadSafe
- * @version $Revision: 5871 $
+ * @version $Id: 79452e6c28683021f2bcf11d3689ec75c6b5642f $
  * @since 1.4
  */
-abstract class AbstractTracked {
+abstract class AbstractTracked<S, T, R> {
 	/* set this to true to compile in debug messages */
 	static final boolean		DEBUG	= false;
 
@@ -43,7 +46,7 @@ abstract class AbstractTracked {
 	 * 
 	 * @GuardedBy this
 	 */
-	private final Map			tracked;
+	private final Map<S, T>		tracked;
 
 	/**
 	 * Modification count. This field is initialized to zero and incremented by
@@ -67,7 +70,7 @@ abstract class AbstractTracked {
 	 * 
 	 * @GuardedBy this
 	 */
-	private final List			adding;
+	private final List<S>		adding;
 
 	/**
 	 * true if the tracked object is closed.
@@ -94,16 +97,16 @@ abstract class AbstractTracked {
 	 * 
 	 * @GuardedBy this
 	 */
-	private final LinkedList	initial;
+	private final LinkedList<S>	initial;
 
 	/**
 	 * AbstractTracked constructor.
 	 */
 	AbstractTracked() {
-		tracked = new HashMap();
+		tracked = new HashMap<S, T>();
 		trackingCount = 0;
-		adding = new ArrayList(6);
-		initial = new LinkedList();
+		adding = new ArrayList<S>(6);
+		initial = new LinkedList<S>();
 		closed = false;
 	}
 
@@ -114,17 +117,15 @@ abstract class AbstractTracked {
 	 * This method must be called from Tracker's open method while synchronized
 	 * on this object in the same synchronized block as the add listener call.
 	 * 
-	 * @param list The initial list of items to be tracked. <code>null</code>
+	 * @param list The initial list of items to be tracked. {@code null}
 	 *        entries in the list are ignored.
 	 * @GuardedBy this
 	 */
-	void setInitial(Object[] list) {
+	void setInitial(S[] list) {
 		if (list == null) {
 			return;
 		}
-		int size = list.length;
-		for (int i = 0; i < size; i++) {
-			Object item = list[i];
+		for (S item : list) {
 			if (item == null) {
 				continue;
 			}
@@ -145,7 +146,7 @@ abstract class AbstractTracked {
 	 */
 	void trackInitial() {
 		while (true) {
-			Object item;
+			S item;
 			synchronized (this) {
 				if (closed || (initial.size() == 0)) {
 					/*
@@ -202,8 +203,8 @@ abstract class AbstractTracked {
 	 * @param item Item to be tracked.
 	 * @param related Action related object.
 	 */
-	void track(final Object item, final Object related) {
-		final Object object;
+	void track(final S item, final R related) {
+		final T object;
 		synchronized (this) {
 			if (closed) {
 				return;
@@ -250,11 +251,11 @@ abstract class AbstractTracked {
 	 * @param item Item to be tracked.
 	 * @param related Action related object.
 	 */
-	private void trackAdding(final Object item, final Object related) {
+	private void trackAdding(final S item, final R related) {
 		if (DEBUG) {
 			System.out.println("AbstractTracked.trackAdding: " + item); //$NON-NLS-1$
 		}
-		Object object = null;
+		T object = null;
 		boolean becameUntracked = false;
 		/* Call customizer outside of synchronized region */
 		try {
@@ -305,8 +306,8 @@ abstract class AbstractTracked {
 	 * @param item Item to be untracked.
 	 * @param related Action related object.
 	 */
-	void untrack(final Object item, final Object related) {
-		final Object object;
+	void untrack(final S item, final R related) {
+		final T object;
 		synchronized (this) {
 			if (initial.remove(item)) { /*
 										 * if this item is already in the list
@@ -367,6 +368,18 @@ abstract class AbstractTracked {
 	}
 
 	/**
+	 * Returns if the tracker is empty.
+	 * 
+	 * @return Whether the tracker is empty.
+	 * 
+	 * @GuardedBy this
+	 * @since 1.5
+	 */
+	boolean isEmpty() {
+		return tracked.isEmpty();
+	}
+
+	/**
 	 * Return the customized object for the specified item
 	 * 
 	 * @param item The item to lookup in the map
@@ -374,19 +387,19 @@ abstract class AbstractTracked {
 	 * 
 	 * @GuardedBy this
 	 */
-	Object getCustomizedObject(final Object item) {
+	T getCustomizedObject(final S item) {
 		return tracked.get(item);
 	}
 
 	/**
-	 * Return the list of tracked items.
+	 * Copy the tracked items into an array.
 	 * 
 	 * @param list An array to contain the tracked items.
 	 * @return The specified list if it is large enough to hold the tracked
 	 *         items or a new array large enough to hold the tracked items.
 	 * @GuardedBy this
 	 */
-	Object[] getTracked(final Object[] list) {
+	S[] copyKeys(final S[] list) {
 		return tracked.keySet().toArray(list);
 	}
 
@@ -401,7 +414,7 @@ abstract class AbstractTracked {
 	}
 
 	/**
-	 * Returns the tracking count for this <code>ServiceTracker</code> object.
+	 * Returns the tracking count for this {@code ServiceTracker} object.
 	 * 
 	 * The tracking count is initialized to 0 when this object is opened. Every
 	 * time an item is added, modified or removed from this object the tracking
@@ -415,15 +428,32 @@ abstract class AbstractTracked {
 	}
 
 	/**
+	 * Copy the tracked items and associated values into the specified map.
+	 * 
+	 * @param <M> Type of {@code Map} to hold the tracked items and
+	 *        associated values.
+	 * @param map The map into which to copy the tracked items and associated
+	 *        values. This map must not be a user provided map so that user code
+	 *        is not executed while synchronized on this.
+	 * @return The specified map.
+	 * @GuardedBy this
+	 * @since 1.5
+	 */
+	<M extends Map< ? super S, ? super T>> M copyEntries(final M map) {
+		map.putAll(tracked);
+		return map;
+	}
+
+	/**
 	 * Call the specific customizer adding method. This method must not be
 	 * called while synchronized on this object.
 	 * 
 	 * @param item Item to be tracked.
 	 * @param related Action related object.
-	 * @return Customized object for the tracked item or <code>null</code> if
+	 * @return Customized object for the tracked item or {@code null} if
 	 *         the item is not to be tracked.
 	 */
-	abstract Object customizerAdding(final Object item, final Object related);
+	abstract T customizerAdding(final S item, final R related);
 
 	/**
 	 * Call the specific customizer modified method. This method must not be
@@ -433,8 +463,8 @@ abstract class AbstractTracked {
 	 * @param related Action related object.
 	 * @param object Customized object for the tracked item.
 	 */
-	abstract void customizerModified(final Object item, final Object related,
-			final Object object);
+	abstract void customizerModified(final S item, final R related,
+			final T object);
 
 	/**
 	 * Call the specific customizer removed method. This method must not be
@@ -444,6 +474,6 @@ abstract class AbstractTracked {
 	 * @param related Action related object.
 	 * @param object Customized object for the tracked item.
 	 */
-	abstract void customizerRemoved(final Object item, final Object related,
-			final Object object);
+	abstract void customizerRemoved(final S item, final R related,
+			final T object);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTracker.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTracker.java
index 8791d98..4973503 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTracker.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTracker.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2007, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2007, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,55 +16,59 @@
 
 package org.osgi.util.tracker;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.SynchronousBundleListener;
 
 /**
- * The <code>BundleTracker</code> class simplifies tracking bundles much like
- * the <code>ServiceTracker</code> simplifies tracking services.
+ * The {@code BundleTracker} class simplifies tracking bundles much like
+ * the {@code ServiceTracker} simplifies tracking services.
  * <p>
- * A <code>BundleTracker</code> is constructed with state criteria and a
- * <code>BundleTrackerCustomizer</code> object. A <code>BundleTracker</code> can
- * use the <code>BundleTrackerCustomizer</code> to select which bundles are
+ * A {@code BundleTracker} is constructed with state criteria and a
+ * {@code BundleTrackerCustomizer} object. A {@code BundleTracker} can
+ * use the {@code BundleTrackerCustomizer} to select which bundles are
  * tracked and to create a customized object to be tracked with the bundle. The
- * <code>BundleTracker</code> can then be opened to begin tracking all bundles
+ * {@code BundleTracker} can then be opened to begin tracking all bundles
  * whose state matches the specified state criteria.
  * <p>
- * The <code>getBundles</code> method can be called to get the
- * <code>Bundle</code> objects of the bundles being tracked. The
- * <code>getObject</code> method can be called to get the customized object for
+ * The {@code getBundles} method can be called to get the
+ * {@code Bundle} objects of the bundles being tracked. The
+ * {@code getObject} method can be called to get the customized object for
  * a tracked bundle.
  * <p>
- * The <code>BundleTracker</code> class is thread-safe. It does not call a
- * <code>BundleTrackerCustomizer</code> while holding any locks.
- * <code>BundleTrackerCustomizer</code> implementations must also be
+ * The {@code BundleTracker} class is thread-safe. It does not call a
+ * {@code BundleTrackerCustomizer} while holding any locks.
+ * {@code BundleTrackerCustomizer} implementations must also be
  * thread-safe.
  * 
+ * @param <T> The type of the tracked object.
  * @ThreadSafe
- * @version $Revision: 5894 $
+ * @version $Id: ebfd73a4e19f025d6ad9029d99c17944ee8c420a $
  * @since 1.4
  */
-public class BundleTracker implements BundleTrackerCustomizer {
+public class BundleTracker<T> implements BundleTrackerCustomizer<T> {
 	/* set this to true to compile in debug messages */
-	static final boolean			DEBUG	= false;
+	static final boolean				DEBUG	= false;
 
 	/**
-	 * The Bundle Context used by this <code>BundleTracker</code>.
+	 * The Bundle Context used by this {@code BundleTracker}.
 	 */
-	protected final BundleContext	context;
+	protected final BundleContext		context;
 
 	/**
-	 * The <code>BundleTrackerCustomizer</code> object for this tracker.
+	 * The {@code BundleTrackerCustomizer} object for this tracker.
 	 */
-	final BundleTrackerCustomizer	customizer;
+	final BundleTrackerCustomizer<T>	customizer;
 
 	/**
-	 * Tracked bundles: <code>Bundle</code> object -> customized Object and
-	 * <code>BundleListener</code> object
+	 * Tracked bundles: {@code Bundle} object -> customized Object and
+	 * {@code BundleListener} object
 	 */
-	private volatile Tracked		tracked;
+	private volatile Tracked			tracked;
 
 	/**
 	 * Accessor method for the current Tracked object. This method is only
@@ -81,50 +85,50 @@ public class BundleTracker implements BundleTrackerCustomizer {
 	 * State mask for bundles being tracked. This field contains the ORed values
 	 * of the bundle states being tracked.
 	 */
-	final int						mask;
+	final int	mask;
 
 	/**
-	 * Create a <code>BundleTracker</code> for bundles whose state is present in
+	 * Create a {@code BundleTracker} for bundles whose state is present in
 	 * the specified state mask.
 	 * 
 	 * <p>
 	 * Bundles whose state is present on the specified state mask will be
-	 * tracked by this <code>BundleTracker</code>.
+	 * tracked by this {@code BundleTracker}.
 	 * 
-	 * @param context The <code>BundleContext</code> against which the tracking
+	 * @param context The {@code BundleContext} against which the tracking
 	 *        is done.
-	 * @param stateMask The bit mask of the <code>OR</code>ing of the bundle
+	 * @param stateMask The bit mask of the {@code OR}ing of the bundle
 	 *        states to be tracked.
 	 * @param customizer The customizer object to call when bundles are added,
-	 *        modified, or removed in this <code>BundleTracker</code>. If
-	 *        customizer is <code>null</code>, then this
-	 *        <code>BundleTracker</code> will be used as the
-	 *        <code>BundleTrackerCustomizer</code> and this
-	 *        <code>BundleTracker</code> will call the
-	 *        <code>BundleTrackerCustomizer</code> methods on itself.
+	 *        modified, or removed in this {@code BundleTracker}. If
+	 *        customizer is {@code null}, then this
+	 *        {@code BundleTracker} will be used as the
+	 *        {@code BundleTrackerCustomizer} and this
+	 *        {@code BundleTracker} will call the
+	 *        {@code BundleTrackerCustomizer} methods on itself.
 	 * @see Bundle#getState()
 	 */
 	public BundleTracker(BundleContext context, int stateMask,
-			BundleTrackerCustomizer customizer) {
+			BundleTrackerCustomizer<T> customizer) {
 		this.context = context;
 		this.mask = stateMask;
 		this.customizer = (customizer == null) ? this : customizer;
 	}
 
 	/**
-	 * Open this <code>BundleTracker</code> and begin tracking bundles.
+	 * Open this {@code BundleTracker} and begin tracking bundles.
 	 * 
 	 * <p>
 	 * Bundle which match the state criteria specified when this
-	 * <code>BundleTracker</code> was created are now tracked by this
-	 * <code>BundleTracker</code>.
+	 * {@code BundleTracker} was created are now tracked by this
+	 * {@code BundleTracker}.
 	 * 
-	 * @throws java.lang.IllegalStateException If the <code>BundleContext</code>
-	 *         with which this <code>BundleTracker</code> was created is no
+	 * @throws java.lang.IllegalStateException If the {@code BundleContext}
+	 *         with which this {@code BundleTracker} was created is no
 	 *         longer valid.
 	 * @throws java.lang.SecurityException If the caller and this class do not
 	 *         have the appropriate
-	 *         <code>AdminPermission[context bundle,LISTENER]</code>, and the
+	 *         {@code AdminPermission[context bundle,LISTENER]}, and the
 	 *         Java Runtime Environment supports permissions.
 	 */
 	public void open() {
@@ -150,7 +154,7 @@ public class BundleTracker implements BundleTrackerCustomizer {
 						}
 					}
 					/* set tracked with the initial bundles */
-					t.setInitial(bundles); 
+					t.setInitial(bundles);
 				}
 			}
 			tracked = t;
@@ -160,10 +164,10 @@ public class BundleTracker implements BundleTrackerCustomizer {
 	}
 
 	/**
-	 * Close this <code>BundleTracker</code>.
+	 * Close this {@code BundleTracker}.
 	 * 
 	 * <p>
-	 * This method should be called when this <code>BundleTracker</code> should
+	 * This method should be called when this {@code BundleTracker} should
 	 * end the tracking of bundles.
 	 * 
 	 * <p>
@@ -200,80 +204,81 @@ public class BundleTracker implements BundleTrackerCustomizer {
 
 	/**
 	 * Default implementation of the
-	 * <code>BundleTrackerCustomizer.addingBundle</code> method.
+	 * {@code BundleTrackerCustomizer.addingBundle} method.
 	 * 
 	 * <p>
-	 * This method is only called when this <code>BundleTracker</code> has been
-	 * constructed with a <code>null BundleTrackerCustomizer</code> argument.
+	 * This method is only called when this {@code BundleTracker} has been
+	 * constructed with a {@code null BundleTrackerCustomizer} argument.
 	 * 
 	 * <p>
-	 * This implementation simply returns the specified <code>Bundle</code>.
+	 * This implementation simply returns the specified {@code Bundle}.
 	 * 
 	 * <p>
 	 * This method can be overridden in a subclass to customize the object to be
 	 * tracked for the bundle being added.
 	 * 
-	 * @param bundle The <code>Bundle</code> being added to this
-	 *        <code>BundleTracker</code> object.
+	 * @param bundle The {@code Bundle} being added to this
+	 *        {@code BundleTracker} object.
 	 * @param event The bundle event which caused this customizer method to be
-	 *        called or <code>null</code> if there is no bundle event associated
+	 *        called or {@code null} if there is no bundle event associated
 	 *        with the call to this method.
 	 * @return The specified bundle.
 	 * @see BundleTrackerCustomizer#addingBundle(Bundle, BundleEvent)
 	 */
-	public Object addingBundle(Bundle bundle, BundleEvent event) {
-		return bundle;
+	public T addingBundle(Bundle bundle, BundleEvent event) {
+		T result = (T) bundle;
+		return result;
 	}
 
 	/**
 	 * Default implementation of the
-	 * <code>BundleTrackerCustomizer.modifiedBundle</code> method.
+	 * {@code BundleTrackerCustomizer.modifiedBundle} method.
 	 * 
 	 * <p>
-	 * This method is only called when this <code>BundleTracker</code> has been
-	 * constructed with a <code>null BundleTrackerCustomizer</code> argument.
+	 * This method is only called when this {@code BundleTracker} has been
+	 * constructed with a {@code null BundleTrackerCustomizer} argument.
 	 * 
 	 * <p>
 	 * This implementation does nothing.
 	 * 
-	 * @param bundle The <code>Bundle</code> whose state has been modified.
+	 * @param bundle The {@code Bundle} whose state has been modified.
 	 * @param event The bundle event which caused this customizer method to be
-	 *        called or <code>null</code> if there is no bundle event associated
+	 *        called or {@code null} if there is no bundle event associated
 	 *        with the call to this method.
 	 * @param object The customized object for the specified Bundle.
 	 * @see BundleTrackerCustomizer#modifiedBundle(Bundle, BundleEvent, Object)
 	 */
-	public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
+	public void modifiedBundle(Bundle bundle, BundleEvent event, T object) {
 		/* do nothing */
 	}
 
 	/**
 	 * Default implementation of the
-	 * <code>BundleTrackerCustomizer.removedBundle</code> method.
+	 * {@code BundleTrackerCustomizer.removedBundle} method.
 	 * 
 	 * <p>
-	 * This method is only called when this <code>BundleTracker</code> has been
-	 * constructed with a <code>null BundleTrackerCustomizer</code> argument.
+	 * This method is only called when this {@code BundleTracker} has been
+	 * constructed with a {@code null BundleTrackerCustomizer} argument.
 	 * 
 	 * <p>
 	 * This implementation does nothing.
 	 * 
-	 * @param bundle The <code>Bundle</code> being removed.
+	 * @param bundle The {@code Bundle} being removed.
 	 * @param event The bundle event which caused this customizer method to be
-	 *        called or <code>null</code> if there is no bundle event associated
+	 *        called or {@code null} if there is no bundle event associated
 	 *        with the call to this method.
 	 * @param object The customized object for the specified bundle.
 	 * @see BundleTrackerCustomizer#removedBundle(Bundle, BundleEvent, Object)
 	 */
-	public void removedBundle(Bundle bundle, BundleEvent event, Object object) {
+	public void removedBundle(Bundle bundle, BundleEvent event, T object) {
 		/* do nothing */
 	}
 
 	/**
-	 * Return an array of <code>Bundle</code>s for all bundles being tracked by
-	 * this <code>BundleTracker</code>.
+	 * Return an array of {@code Bundle}s for all bundles being tracked by
+	 * this {@code BundleTracker}.
 	 * 
-	 * @return An array of <code>Bundle</code>s or <code>null</code> if no
+	 * @return An array of {@code Bundle}s or {@code null} if no
 	 *         bundles are being tracked.
 	 */
 	public Bundle[] getBundles() {
@@ -286,20 +291,20 @@ public class BundleTracker implements BundleTrackerCustomizer {
 			if (length == 0) {
 				return null;
 			}
-			return (Bundle[]) t.getTracked(new Bundle[length]);
+			return t.copyKeys(new Bundle[length]);
 		}
 	}
 
 	/**
-	 * Returns the customized object for the specified <code>Bundle</code> if
-	 * the specified bundle is being tracked by this <code>BundleTracker</code>.
+	 * Returns the customized object for the specified {@code Bundle} if
+	 * the specified bundle is being tracked by this {@code BundleTracker}.
 	 * 
-	 * @param bundle The <code>Bundle</code> being tracked.
-	 * @return The customized object for the specified <code>Bundle</code> or
-	 *         <code>null</code> if the specified <code>Bundle</code> is not
+	 * @param bundle The {@code Bundle} being tracked.
+	 * @return The customized object for the specified {@code Bundle} or
+	 *         {@code null} if the specified {@code Bundle} is not
 	 *         being tracked.
 	 */
-	public Object getObject(Bundle bundle) {
+	public T getObject(Bundle bundle) {
 		final Tracked t = tracked();
 		if (t == null) { /* if BundleTracker is not open */
 			return null;
@@ -310,14 +315,14 @@ public class BundleTracker implements BundleTrackerCustomizer {
 	}
 
 	/**
-	 * Remove a bundle from this <code>BundleTracker</code>.
+	 * Remove a bundle from this {@code BundleTracker}.
 	 * 
-	 * The specified bundle will be removed from this <code>BundleTracker</code>
+	 * The specified bundle will be removed from this {@code BundleTracker}
 	 * . If the specified bundle was being tracked then the
-	 * <code>BundleTrackerCustomizer.removedBundle</code> method will be called
+	 * {@code BundleTrackerCustomizer.removedBundle} method will be called
 	 * for that bundle.
 	 * 
-	 * @param bundle The <code>Bundle</code> to be removed.
+	 * @param bundle The {@code Bundle} to be removed.
 	 */
 	public void remove(Bundle bundle) {
 		final Tracked t = tracked();
@@ -329,7 +334,7 @@ public class BundleTracker implements BundleTrackerCustomizer {
 
 	/**
 	 * Return the number of bundles being tracked by this
-	 * <code>BundleTracker</code>.
+	 * {@code BundleTracker}.
 	 * 
 	 * @return The number of bundles being tracked.
 	 */
@@ -344,23 +349,22 @@ public class BundleTracker implements BundleTrackerCustomizer {
 	}
 
 	/**
-	 * Returns the tracking count for this <code>BundleTracker</code>.
+	 * Returns the tracking count for this {@code BundleTracker}.
 	 * 
-	 * The tracking count is initialized to 0 when this
-	 * <code>BundleTracker</code> is opened. Every time a bundle is added,
-	 * modified or removed from this <code>BundleTracker</code> the tracking
-	 * count is incremented.
+	 * The tracking count is initialized to 0 when this {@code BundleTracker} is
+	 * opened. Every time a bundle is added, modified or removed from this
+	 * {@code BundleTracker} the tracking count is incremented.
 	 * 
 	 * <p>
-	 * The tracking count can be used to determine if this
-	 * <code>BundleTracker</code> has added, modified or removed a bundle by
-	 * comparing a tracking count value previously collected with the current
-	 * tracking count value. If the value has not changed, then no bundle has
-	 * been added, modified or removed from this <code>BundleTracker</code>
-	 * since the previous tracking count was collected.
+	 * The tracking count can be used to determine if this {@code BundleTracker}
+	 * has added, modified or removed a bundle by comparing a tracking count
+	 * value previously collected with the current tracking count value. If the
+	 * value has not changed, then no bundle has been added, modified or removed
+	 * from this {@code BundleTracker} since the previous tracking count was
+	 * collected.
 	 * 
-	 * @return The tracking count for this <code>BundleTracker</code> or -1 if
-	 *         this <code>BundleTracker</code> is not open.
+	 * @return The tracking count for this {@code BundleTracker} or -1 if this
+	 *         {@code BundleTracker} is not open.
 	 */
 	public int getTrackingCount() {
 		final Tracked t = tracked();
@@ -373,13 +377,53 @@ public class BundleTracker implements BundleTrackerCustomizer {
 	}
 
 	/**
+	 * Return a {@code Map} with the {@code Bundle}s and customized
+	 * objects for all bundles being tracked by this {@code BundleTracker}.
+	 * 
+	 * @return A {@code Map} with the {@code Bundle}s and customized
+	 *         objects for all services being tracked by this
+	 *         {@code BundleTracker}. If no bundles are being tracked, then
+	 *         the returned map is empty.
+	 * @since 1.5
+	 */
+	public Map<Bundle, T> getTracked() {
+		Map<Bundle, T> map = new HashMap<Bundle, T>();
+		final Tracked t = tracked();
+		if (t == null) { /* if BundleTracker is not open */
+			return map;
+		}
+		synchronized (t) {
+			return t.copyEntries(map);
+		}
+	}
+
+	/**
+	 * Return if this {@code BundleTracker} is empty.
+	 * 
+	 * @return {@code true} if this {@code BundleTracker} is not tracking any
+	 *         bundles.
+	 * @since 1.5
+	 */
+	public boolean isEmpty() {
+		final Tracked t = tracked();
+		if (t == null) { /* if BundleTracker is not open */
+			return true;
+		}
+		synchronized (t) {
+			return t.isEmpty();
+		}
+	}
+
+	/**
 	 * Inner class which subclasses AbstractTracked. This class is the
-	 * <code>SynchronousBundleListener</code> object for the tracker.
+	 * {@code SynchronousBundleListener} object for the tracker.
 	 * 
 	 * @ThreadSafe
 	 * @since 1.4
 	 */
-	class Tracked extends AbstractTracked implements SynchronousBundleListener {
+	private final class Tracked extends AbstractTracked<Bundle, T, BundleEvent>
+			implements
+			SynchronousBundleListener {
 		/**
 		 * Tracked constructor.
 		 */
@@ -388,11 +432,11 @@ public class BundleTracker implements BundleTrackerCustomizer {
 		}
 
 		/**
-		 * <code>BundleListener</code> method for the <code>BundleTracker</code>
+		 * {@code BundleListener} method for the {@code BundleTracker}
 		 * class. This method must NOT be synchronized to avoid deadlock
 		 * potential.
 		 * 
-		 * @param event <code>BundleEvent</code> object from the framework.
+		 * @param event {@code BundleEvent} object from the framework.
 		 */
 		public void bundleChanged(final BundleEvent event) {
 			/*
@@ -431,13 +475,11 @@ public class BundleTracker implements BundleTrackerCustomizer {
 		 * 
 		 * @param item Item to be tracked.
 		 * @param related Action related object.
-		 * @return Customized object for the tracked item or <code>null</code>
+		 * @return Customized object for the tracked item or {@code null}
 		 *         if the item is not to be tracked.
 		 */
-		Object customizerAdding(final Object item,
-				final Object related) {
-			return customizer
-					.addingBundle((Bundle) item, (BundleEvent) related);
+		T customizerAdding(final Bundle item, final BundleEvent related) {
+			return customizer.addingBundle(item, related);
 		}
 
 		/**
@@ -448,10 +490,9 @@ public class BundleTracker implements BundleTrackerCustomizer {
 		 * @param related Action related object.
 		 * @param object Customized object for the tracked item.
 		 */
-		void customizerModified(final Object item,
-				final Object related, final Object object) {
-			customizer.modifiedBundle((Bundle) item, (BundleEvent) related,
-					object);
+		void customizerModified(final Bundle item, final BundleEvent related,
+				final T object) {
+			customizer.modifiedBundle(item, related, object);
 		}
 
 		/**
@@ -462,10 +503,9 @@ public class BundleTracker implements BundleTrackerCustomizer {
 		 * @param related Action related object.
 		 * @param object Customized object for the tracked item.
 		 */
-		void customizerRemoved(final Object item,
-				final Object related, final Object object) {
-			customizer.removedBundle((Bundle) item, (BundleEvent) related,
-					object);
+		void customizerRemoved(final Bundle item, final BundleEvent related,
+				final T object) {
+			customizer.removedBundle(item, related, object);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTrackerCustomizer.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTrackerCustomizer.java
index 100c6b4..a7c9a23 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTrackerCustomizer.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/BundleTrackerCustomizer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2007, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2007, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,85 +20,86 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleEvent;
 
 /**
- * The <code>BundleTrackerCustomizer</code> interface allows a
- * <code>BundleTracker</code> to customize the <code>Bundle</code>s that are
- * tracked. A <code>BundleTrackerCustomizer</code> is called when a bundle is
- * being added to a <code>BundleTracker</code>. The
- * <code>BundleTrackerCustomizer</code> can then return an object for the
- * tracked bundle. A <code>BundleTrackerCustomizer</code> is also called when a
+ * The {@code BundleTrackerCustomizer} interface allows a
+ * {@code BundleTracker} to customize the {@code Bundle}s that are
+ * tracked. A {@code BundleTrackerCustomizer} is called when a bundle is
+ * being added to a {@code BundleTracker}. The
+ * {@code BundleTrackerCustomizer} can then return an object for the
+ * tracked bundle. A {@code BundleTrackerCustomizer} is also called when a
  * tracked bundle is modified or has been removed from a
- * <code>BundleTracker</code>.
+ * {@code BundleTracker}.
  * 
  * <p>
  * The methods in this interface may be called as the result of a
- * <code>BundleEvent</code> being received by a <code>BundleTracker</code>.
- * Since <code>BundleEvent</code>s are received synchronously by the
- * <code>BundleTracker</code>, it is highly recommended that implementations of
+ * {@code BundleEvent} being received by a {@code BundleTracker}.
+ * Since {@code BundleEvent}s are received synchronously by the
+ * {@code BundleTracker}, it is highly recommended that implementations of
  * these methods do not alter bundle states while being synchronized on any
  * object.
  * 
  * <p>
- * The <code>BundleTracker</code> class is thread-safe. It does not call a
- * <code>BundleTrackerCustomizer</code> while holding any locks.
- * <code>BundleTrackerCustomizer</code> implementations must also be
+ * The {@code BundleTracker} class is thread-safe. It does not call a
+ * {@code BundleTrackerCustomizer} while holding any locks.
+ * {@code BundleTrackerCustomizer} implementations must also be
  * thread-safe.
  * 
+ * @param <T> The type of the tracked object.
  * @ThreadSafe
- * @version $Revision: 5874 $
+ * @version $Id: 0e80f2555530b217faef57726a5938f0087a45c5 $
  * @since 1.4
  */
-public interface BundleTrackerCustomizer {
+public interface BundleTrackerCustomizer<T> {
 	/**
-	 * A bundle is being added to the <code>BundleTracker</code>.
+	 * A bundle is being added to the {@code BundleTracker}.
 	 * 
 	 * <p>
 	 * This method is called before a bundle which matched the search parameters
-	 * of the <code>BundleTracker</code> is added to the
-	 * <code>BundleTracker</code>. This method should return the object to be
-	 * tracked for the specified <code>Bundle</code>. The returned object is
-	 * stored in the <code>BundleTracker</code> and is available from the
+	 * of the {@code BundleTracker} is added to the
+	 * {@code BundleTracker}. This method should return the object to be
+	 * tracked for the specified {@code Bundle}. The returned object is
+	 * stored in the {@code BundleTracker} and is available from the
 	 * {@link BundleTracker#getObject(Bundle) getObject} method.
 	 * 
-	 * @param bundle The <code>Bundle</code> being added to the
-	 *        <code>BundleTracker</code>.
+	 * @param bundle The {@code Bundle} being added to the
+	 *        {@code BundleTracker}.
 	 * @param event The bundle event which caused this customizer method to be
-	 *        called or <code>null</code> if there is no bundle event associated
+	 *        called or {@code null} if there is no bundle event associated
 	 *        with the call to this method.
-	 * @return The object to be tracked for the specified <code>Bundle</code>
-	 *         object or <code>null</code> if the specified <code>Bundle</code>
+	 * @return The object to be tracked for the specified {@code Bundle}
+	 *         object or {@code null} if the specified {@code Bundle}
 	 *         object should not be tracked.
 	 */
-	public Object addingBundle(Bundle bundle, BundleEvent event);
+	public T addingBundle(Bundle bundle, BundleEvent event);
 
 	/**
-	 * A bundle tracked by the <code>BundleTracker</code> has been modified.
+	 * A bundle tracked by the {@code BundleTracker} has been modified.
 	 * 
 	 * <p>
 	 * This method is called when a bundle being tracked by the
-	 * <code>BundleTracker</code> has had its state modified.
+	 * {@code BundleTracker} has had its state modified.
 	 * 
-	 * @param bundle The <code>Bundle</code> whose state has been modified.
+	 * @param bundle The {@code Bundle} whose state has been modified.
 	 * @param event The bundle event which caused this customizer method to be
-	 *        called or <code>null</code> if there is no bundle event associated
+	 *        called or {@code null} if there is no bundle event associated
 	 *        with the call to this method.
 	 * @param object The tracked object for the specified bundle.
 	 */
 	public void modifiedBundle(Bundle bundle, BundleEvent event,
-			Object object);
+			T object);
 
 	/**
-	 * A bundle tracked by the <code>BundleTracker</code> has been removed.
+	 * A bundle tracked by the {@code BundleTracker} has been removed.
 	 * 
 	 * <p>
 	 * This method is called after a bundle is no longer being tracked by the
-	 * <code>BundleTracker</code>.
+	 * {@code BundleTracker}.
 	 * 
-	 * @param bundle The <code>Bundle</code> that has been removed.
+	 * @param bundle The {@code Bundle} that has been removed.
 	 * @param event The bundle event which caused this customizer method to be
-	 *        called or <code>null</code> if there is no bundle event associated
+	 *        called or {@code null} if there is no bundle event associated
 	 *        with the call to this method.
 	 * @param object The tracked object for the specified bundle.
 	 */
 	public void removedBundle(Bundle bundle, BundleEvent event,
-			Object object);
+			T object);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTracker.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTracker.java
index b4e373b..f5cd086 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTracker.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTracker.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,8 +16,10 @@
 
 package org.osgi.util.tracker;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
+import java.lang.reflect.Array;
+import java.util.Collections;
+import java.util.SortedMap;
+import java.util.TreeMap;
 
 import org.osgi.framework.AllServiceListener;
 import org.osgi.framework.BundleContext;
@@ -27,73 +29,74 @@ import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceEvent;
 import org.osgi.framework.ServiceListener;
 import org.osgi.framework.ServiceReference;
-import org.osgi.framework.Version;
 
 /**
- * The <code>ServiceTracker</code> class simplifies using services from the
+ * The {@code ServiceTracker} class simplifies using services from the
  * Framework's service registry.
  * <p>
- * A <code>ServiceTracker</code> object is constructed with search criteria and
- * a <code>ServiceTrackerCustomizer</code> object. A <code>ServiceTracker</code>
- * can use a <code>ServiceTrackerCustomizer</code> to customize the service
- * objects to be tracked. The <code>ServiceTracker</code> can then be opened to
+ * A {@code ServiceTracker} object is constructed with search criteria and
+ * a {@code ServiceTrackerCustomizer} object. A {@code ServiceTracker}
+ * can use a {@code ServiceTrackerCustomizer} to customize the service
+ * objects to be tracked. The {@code ServiceTracker} can then be opened to
  * begin tracking all services in the Framework's service registry that match
- * the specified search criteria. The <code>ServiceTracker</code> correctly
- * handles all of the details of listening to <code>ServiceEvent</code>s and
+ * the specified search criteria. The {@code ServiceTracker} correctly
+ * handles all of the details of listening to {@code ServiceEvent}s and
  * getting and ungetting services.
  * <p>
- * The <code>getServiceReferences</code> method can be called to get references
- * to the services being tracked. The <code>getService</code> and
- * <code>getServices</code> methods can be called to get the service objects for
+ * The {@code getServiceReferences} method can be called to get references
+ * to the services being tracked. The {@code getService} and
+ * {@code getServices} methods can be called to get the service objects for
  * the tracked service.
  * <p>
- * The <code>ServiceTracker</code> class is thread-safe. It does not call a
- * <code>ServiceTrackerCustomizer</code> while holding any locks.
- * <code>ServiceTrackerCustomizer</code> implementations must also be
+ * The {@code ServiceTracker} class is thread-safe. It does not call a
+ * {@code ServiceTrackerCustomizer} while holding any locks.
+ * {@code ServiceTrackerCustomizer} implementations must also be
  * thread-safe.
  * 
+ * @param <S> The type of the service being tracked.
+ * @param <T> The type of the tracked object.
  * @ThreadSafe
- * @version $Revision: 6386 $
+ * @version $Id: df62459c90f49d06e89ff8f20915a9eec401217e $
  */
-public class ServiceTracker implements ServiceTrackerCustomizer {
+public class ServiceTracker<S, T> implements ServiceTrackerCustomizer<S, T> {
 	/* set this to true to compile in debug messages */
-	static final boolean				DEBUG			= false;
+	static final boolean					DEBUG	= false;
 	/**
-	 * The Bundle Context used by this <code>ServiceTracker</code>.
+	 * The Bundle Context used by this {@code ServiceTracker}.
 	 */
-	protected final BundleContext		context;
+	protected final BundleContext			context;
 	/**
-	 * The Filter used by this <code>ServiceTracker</code> which specifies the
+	 * The Filter used by this {@code ServiceTracker} which specifies the
 	 * search criteria for the services to track.
 	 * 
 	 * @since 1.1
 	 */
-	protected final Filter				filter;
+	protected final Filter					filter;
 	/**
-	 * The <code>ServiceTrackerCustomizer</code> for this tracker.
+	 * The {@code ServiceTrackerCustomizer} for this tracker.
 	 */
-	final ServiceTrackerCustomizer		customizer;
+	final ServiceTrackerCustomizer<S, T>	customizer;
 	/**
 	 * Filter string for use when adding the ServiceListener. If this field is
 	 * set, then certain optimizations can be taken since we don't have a user
 	 * supplied filter.
 	 */
-	final String						listenerFilter;
+	final String							listenerFilter;
 	/**
 	 * Class name to be tracked. If this field is set, then we are tracking by
 	 * class name.
 	 */
-	private final String				trackClass;
+	private final String					trackClass;
 	/**
 	 * Reference to be tracked. If this field is set, then we are tracking a
 	 * single ServiceReference.
 	 */
-	private final ServiceReference		trackReference;
+	private final ServiceReference<S>		trackReference;
 	/**
-	 * Tracked services: <code>ServiceReference</code> -> customized Object and
-	 * <code>ServiceListener</code> object
+	 * Tracked services: {@code ServiceReference} -> customized Object and
+	 * {@code ServiceListener} object
 	 */
-	private volatile Tracked			tracked;
+	private volatile Tracked				tracked;
 
 	/**
 	 * Accessor method for the current Tracked object. This method is only
@@ -111,49 +114,43 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 * 
 	 * This field is volatile since it is accessed by multiple threads.
 	 */
-	private volatile ServiceReference	cachedReference;
+	private volatile ServiceReference<S>	cachedReference;
 	/**
 	 * Cached service object for getService.
 	 * 
 	 * This field is volatile since it is accessed by multiple threads.
 	 */
-	private volatile Object				cachedService;
+	private volatile T						cachedService;
 
 	/**
-	 * org.osgi.framework package version which introduced
-	 * {@link ServiceEvent#MODIFIED_ENDMATCH}
-	 */
-	private static final Version		endMatchVersion	= new Version(1, 5, 0);
-
-	/**
-	 * Create a <code>ServiceTracker</code> on the specified
-	 * <code>ServiceReference</code>.
+	 * Create a {@code ServiceTracker} on the specified
+	 * {@code ServiceReference}.
 	 * 
 	 * <p>
-	 * The service referenced by the specified <code>ServiceReference</code>
-	 * will be tracked by this <code>ServiceTracker</code>.
+	 * The service referenced by the specified {@code ServiceReference}
+	 * will be tracked by this {@code ServiceTracker}.
 	 * 
-	 * @param context The <code>BundleContext</code> against which the tracking
+	 * @param context The {@code BundleContext} against which the tracking
 	 *        is done.
-	 * @param reference The <code>ServiceReference</code> for the service to be
+	 * @param reference The {@code ServiceReference} for the service to be
 	 *        tracked.
 	 * @param customizer The customizer object to call when services are added,
-	 *        modified, or removed in this <code>ServiceTracker</code>. If
-	 *        customizer is <code>null</code>, then this
-	 *        <code>ServiceTracker</code> will be used as the
-	 *        <code>ServiceTrackerCustomizer</code> and this
-	 *        <code>ServiceTracker</code> will call the
-	 *        <code>ServiceTrackerCustomizer</code> methods on itself.
+	 *        modified, or removed in this {@code ServiceTracker}. If
+	 *        customizer is {@code null}, then this
+	 *        {@code ServiceTracker} will be used as the
+	 *        {@code ServiceTrackerCustomizer} and this
+	 *        {@code ServiceTracker} will call the
+	 *        {@code ServiceTrackerCustomizer} methods on itself.
 	 */
 	public ServiceTracker(final BundleContext context,
-			final ServiceReference reference,
-			final ServiceTrackerCustomizer customizer) {
+			final ServiceReference<S> reference,
+			final ServiceTrackerCustomizer<S, T> customizer) {
 		this.context = context;
 		this.trackReference = reference;
 		this.trackClass = null;
 		this.customizer = (customizer == null) ? this : customizer;
 		this.listenerFilter = "(" + Constants.SERVICE_ID + "="
-				+ reference.getProperty(Constants.SERVICE_ID).toString() + ")"; 
+				+ reference.getProperty(Constants.SERVICE_ID).toString() + ")";
 		try {
 			this.filter = context.createFilter(listenerFilter);
 		}
@@ -170,32 +167,32 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	}
 
 	/**
-	 * Create a <code>ServiceTracker</code> on the specified class name.
+	 * Create a {@code ServiceTracker} on the specified class name.
 	 * 
 	 * <p>
 	 * Services registered under the specified class name will be tracked by
-	 * this <code>ServiceTracker</code>.
+	 * this {@code ServiceTracker}.
 	 * 
-	 * @param context The <code>BundleContext</code> against which the tracking
+	 * @param context The {@code BundleContext} against which the tracking
 	 *        is done.
 	 * @param clazz The class name of the services to be tracked.
 	 * @param customizer The customizer object to call when services are added,
-	 *        modified, or removed in this <code>ServiceTracker</code>. If
-	 *        customizer is <code>null</code>, then this
-	 *        <code>ServiceTracker</code> will be used as the
-	 *        <code>ServiceTrackerCustomizer</code> and this
-	 *        <code>ServiceTracker</code> will call the
-	 *        <code>ServiceTrackerCustomizer</code> methods on itself.
+	 *        modified, or removed in this {@code ServiceTracker}. If
+	 *        customizer is {@code null}, then this
+	 *        {@code ServiceTracker} will be used as the
+	 *        {@code ServiceTrackerCustomizer} and this
+	 *        {@code ServiceTracker} will call the
+	 *        {@code ServiceTrackerCustomizer} methods on itself.
 	 */
 	public ServiceTracker(final BundleContext context, final String clazz,
-			final ServiceTrackerCustomizer customizer) {
+			final ServiceTrackerCustomizer<S, T> customizer) {
 		this.context = context;
 		this.trackReference = null;
 		this.trackClass = clazz;
 		this.customizer = (customizer == null) ? this : customizer;
 		// we call clazz.toString to verify clazz is non-null!
 		this.listenerFilter = "(" + Constants.OBJECTCLASS + "="
-				+ clazz.toString() + ")"; 
+				+ clazz.toString() + ")";
 		try {
 			this.filter = context.createFilter(listenerFilter);
 		}
@@ -212,42 +209,31 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	}
 
 	/**
-	 * Create a <code>ServiceTracker</code> on the specified <code>Filter</code>
+	 * Create a {@code ServiceTracker} on the specified {@code Filter}
 	 * object.
 	 * 
 	 * <p>
-	 * Services which match the specified <code>Filter</code> object will be
-	 * tracked by this <code>ServiceTracker</code>.
+	 * Services which match the specified {@code Filter} object will be
+	 * tracked by this {@code ServiceTracker}.
 	 * 
-	 * @param context The <code>BundleContext</code> against which the tracking
+	 * @param context The {@code BundleContext} against which the tracking
 	 *        is done.
-	 * @param filter The <code>Filter</code> to select the services to be
+	 * @param filter The {@code Filter} to select the services to be
 	 *        tracked.
 	 * @param customizer The customizer object to call when services are added,
-	 *        modified, or removed in this <code>ServiceTracker</code>. If
-	 *        customizer is null, then this <code>ServiceTracker</code> will be
-	 *        used as the <code>ServiceTrackerCustomizer</code> and this
-	 *        <code>ServiceTracker</code> will call the
-	 *        <code>ServiceTrackerCustomizer</code> methods on itself.
+	 *        modified, or removed in this {@code ServiceTracker}. If
+	 *        customizer is null, then this {@code ServiceTracker} will be
+	 *        used as the {@code ServiceTrackerCustomizer} and this
+	 *        {@code ServiceTracker} will call the
+	 *        {@code ServiceTrackerCustomizer} methods on itself.
 	 * @since 1.1
 	 */
 	public ServiceTracker(final BundleContext context, final Filter filter,
-			final ServiceTrackerCustomizer customizer) {
+			final ServiceTrackerCustomizer<S, T> customizer) {
 		this.context = context;
 		this.trackReference = null;
 		this.trackClass = null;
-		final Version frameworkVersion = (Version) AccessController
-				.doPrivileged(new PrivilegedAction() {
-					public Object run() {
-						String version = context
-								.getProperty(Constants.FRAMEWORK_VERSION);
-						return (version == null) ? Version.emptyVersion
-								: new Version(version);
-					}
-				});
-		final boolean endMatchSupported = (frameworkVersion
-				.compareTo(endMatchVersion) >= 0);
-		this.listenerFilter = endMatchSupported ? filter.toString() : null;
+		this.listenerFilter = filter.toString();
 		this.filter = filter;
 		this.customizer = (customizer == null) ? this : customizer;
 		if ((context == null) || (filter == null)) {
@@ -259,13 +245,37 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	}
 
 	/**
-	 * Open this <code>ServiceTracker</code> and begin tracking services.
+	 * Create a {@code ServiceTracker} on the specified class.
+	 * 
+	 * <p>
+	 * Services registered under the name of the specified class will be tracked
+	 * by this {@code ServiceTracker}.
+	 * 
+	 * @param context The {@code BundleContext} against which the tracking
+	 *        is done.
+	 * @param clazz The class of the services to be tracked.
+	 * @param customizer The customizer object to call when services are added,
+	 *        modified, or removed in this {@code ServiceTracker}. If
+	 *        customizer is {@code null}, then this
+	 *        {@code ServiceTracker} will be used as the
+	 *        {@code ServiceTrackerCustomizer} and this
+	 *        {@code ServiceTracker} will call the
+	 *        {@code ServiceTrackerCustomizer} methods on itself.
+	 * @since 1.5
+	 */
+	public ServiceTracker(final BundleContext context, final Class<S> clazz,
+			final ServiceTrackerCustomizer<S, T> customizer) {
+		this(context, clazz.getName(), customizer);
+	}
+
+	/**
+	 * Open this {@code ServiceTracker} and begin tracking services.
 	 * 
 	 * <p>
-	 * This implementation calls <code>open(false)</code>.
+	 * This implementation calls {@code open(false)}.
 	 * 
-	 * @throws java.lang.IllegalStateException If the <code>BundleContext</code>
-	 *         with which this <code>ServiceTracker</code> was created is no
+	 * @throws java.lang.IllegalStateException If the {@code BundleContext}
+	 *         with which this {@code ServiceTracker} was created is no
 	 *         longer valid.
 	 * @see #open(boolean)
 	 */
@@ -274,22 +284,22 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	}
 
 	/**
-	 * Open this <code>ServiceTracker</code> and begin tracking services.
+	 * Open this {@code ServiceTracker} and begin tracking services.
 	 * 
 	 * <p>
 	 * Services which match the search criteria specified when this
-	 * <code>ServiceTracker</code> was created are now tracked by this
-	 * <code>ServiceTracker</code>.
+	 * {@code ServiceTracker} was created are now tracked by this
+	 * {@code ServiceTracker}.
 	 * 
-	 * @param trackAllServices If <code>true</code>, then this
-	 *        <code>ServiceTracker</code> will track all matching services
-	 *        regardless of class loader accessibility. If <code>false</code>,
-	 *        then this <code>ServiceTracker</code> will only track matching
+	 * @param trackAllServices If {@code true}, then this
+	 *        {@code ServiceTracker} will track all matching services
+	 *        regardless of class loader accessibility. If {@code false},
+	 *        then this {@code ServiceTracker} will only track matching
 	 *        services which are class loader accessible to the bundle whose
-	 *        <code>BundleContext</code> is used by this
-	 *        <code>ServiceTracker</code>.
-	 * @throws java.lang.IllegalStateException If the <code>BundleContext</code>
-	 *         with which this <code>ServiceTracker</code> was created is no
+	 *        {@code BundleContext} is used by this
+	 *        {@code ServiceTracker}.
+	 * @throws java.lang.IllegalStateException If the {@code BundleContext}
+	 *         with which this {@code ServiceTracker} was created is no
 	 *         longer valid.
 	 * @since 1.3
 	 */
@@ -300,13 +310,13 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 				return;
 			}
 			if (DEBUG) {
-				System.out.println("ServiceTracker.open: " + filter); 
+				System.out.println("ServiceTracker.open: " + filter);
 			}
 			t = trackAllServices ? new AllTracked() : new Tracked();
 			synchronized (t) {
 				try {
 					context.addServiceListener(t, listenerFilter);
-					ServiceReference[] references = null;
+					ServiceReference<S>[] references = null;
 					if (trackClass != null) {
 						references = getInitialReferences(trackAllServices,
 								trackClass, null);
@@ -314,23 +324,22 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 					else {
 						if (trackReference != null) {
 							if (trackReference.getBundle() != null) {
-								references = new ServiceReference[] {trackReference};
+								ServiceReference<S>[] single = new ServiceReference[] {trackReference};
+								references = single;
 							}
 						}
 						else { /* user supplied filter */
 							references = getInitialReferences(trackAllServices,
-									null,
-									(listenerFilter != null) ? listenerFilter
-											: filter.toString());
+									null, listenerFilter);
 						}
 					}
 					/* set tracked with the initial references */
-					t.setInitial(references); 
+					t.setInitial(references);
 				}
 				catch (InvalidSyntaxException e) {
 					throw new RuntimeException(
 							"unexpected InvalidSyntaxException: "
-									+ e.getMessage(), e); 
+									+ e.getMessage(), e);
 				}
 			}
 			tracked = t;
@@ -340,33 +349,33 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	}
 
 	/**
-	 * Returns the list of initial <code>ServiceReference</code>s that will be
-	 * tracked by this <code>ServiceTracker</code>.
+	 * Returns the list of initial {@code ServiceReference}s that will be
+	 * tracked by this {@code ServiceTracker}.
 	 * 
-	 * @param trackAllServices If <code>true</code>, use
-	 *        <code>getAllServiceReferences</code>.
+	 * @param trackAllServices If {@code true}, use
+	 *        {@code getAllServiceReferences}.
 	 * @param className The class name with which the service was registered, or
-	 *        <code>null</code> for all services.
-	 * @param filterString The filter criteria or <code>null</code> for all
+	 *        {@code null} for all services.
+	 * @param filterString The filter criteria or {@code null} for all
 	 *        services.
-	 * @return The list of initial <code>ServiceReference</code>s.
+	 * @return The list of initial {@code ServiceReference}s.
 	 * @throws InvalidSyntaxException If the specified filterString has an
 	 *         invalid syntax.
 	 */
-	private ServiceReference[] getInitialReferences(boolean trackAllServices,
-			String className, String filterString)
+	private ServiceReference<S>[] getInitialReferences(
+			boolean trackAllServices, String className, String filterString)
 			throws InvalidSyntaxException {
-		if (trackAllServices) {
-			return context.getAllServiceReferences(className, filterString);
-		}
-		return context.getServiceReferences(className, filterString);
+		ServiceReference<S>[] result = (ServiceReference<S>[]) ((trackAllServices) ? context
+				.getAllServiceReferences(className, filterString)
+				: context.getServiceReferences(className, filterString));
+		return result;
 	}
 
 	/**
-	 * Close this <code>ServiceTracker</code>.
+	 * Close this {@code ServiceTracker}.
 	 * 
 	 * <p>
-	 * This method should be called when this <code>ServiceTracker</code> should
+	 * This method should be called when this {@code ServiceTracker} should
 	 * end the tracking of services.
 	 * 
 	 * <p>
@@ -375,14 +384,14 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 */
 	public void close() {
 		final Tracked outgoing;
-		final ServiceReference[] references;
+		final ServiceReference<S>[] references;
 		synchronized (this) {
 			outgoing = tracked;
 			if (outgoing == null) {
 				return;
 			}
 			if (DEBUG) {
-				System.out.println("ServiceTracker.close: " + filter); 
+				System.out.println("ServiceTracker.close: " + filter);
 			}
 			outgoing.close();
 			references = getServiceReferences();
@@ -405,26 +414,25 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 		}
 		if (DEBUG) {
 			if ((cachedReference == null) && (cachedService == null)) {
-				System.out
-						.println("ServiceTracker.close[cached cleared]: "
-						+ filter); 
+				System.out.println("ServiceTracker.close[cached cleared]: "
+						+ filter);
 			}
 		}
 	}
 
 	/**
 	 * Default implementation of the
-	 * <code>ServiceTrackerCustomizer.addingService</code> method.
+	 * {@code ServiceTrackerCustomizer.addingService} method.
 	 * 
 	 * <p>
-	 * This method is only called when this <code>ServiceTracker</code> has been
-	 * constructed with a <code>null ServiceTrackerCustomizer</code> argument.
+	 * This method is only called when this {@code ServiceTracker} has been
+	 * constructed with a {@code null ServiceTrackerCustomizer} argument.
 	 * 
 	 * <p>
-	 * This implementation returns the result of calling <code>getService</code>
-	 * on the <code>BundleContext</code> with which this
-	 * <code>ServiceTracker</code> was created passing the specified
-	 * <code>ServiceReference</code>.
+	 * This implementation returns the result of calling {@code getService}
+	 * on the {@code BundleContext} with which this
+	 * {@code ServiceTracker} was created passing the specified
+	 * {@code ServiceReference}.
 	 * <p>
 	 * This method can be overridden in a subclass to customize the service
 	 * object to be tracked for the service being added. In that case, take care
@@ -433,22 +441,23 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 * the service.
 	 * 
 	 * @param reference The reference to the service being added to this
-	 *        <code>ServiceTracker</code>.
+	 *        {@code ServiceTracker}.
 	 * @return The service object to be tracked for the service added to this
-	 *         <code>ServiceTracker</code>.
+	 *         {@code ServiceTracker}.
 	 * @see ServiceTrackerCustomizer#addingService(ServiceReference)
 	 */
-	public Object addingService(ServiceReference reference) {
-		return context.getService(reference);
+	public T addingService(ServiceReference<S> reference) {
+		T result = (T) context.getService(reference);
+		return result;
 	}
 
 	/**
 	 * Default implementation of the
-	 * <code>ServiceTrackerCustomizer.modifiedService</code> method.
+	 * {@code ServiceTrackerCustomizer.modifiedService} method.
 	 * 
 	 * <p>
-	 * This method is only called when this <code>ServiceTracker</code> has been
-	 * constructed with a <code>null ServiceTrackerCustomizer</code> argument.
+	 * This method is only called when this {@code ServiceTracker} has been
+	 * constructed with a {@code null ServiceTrackerCustomizer} argument.
 	 * 
 	 * <p>
 	 * This implementation does nothing.
@@ -457,22 +466,22 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 * @param service The service object for the modified service.
 	 * @see ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
 	 */
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<S> reference, T service) {
 		/* do nothing */
 	}
 
 	/**
 	 * Default implementation of the
-	 * <code>ServiceTrackerCustomizer.removedService</code> method.
+	 * {@code ServiceTrackerCustomizer.removedService} method.
 	 * 
 	 * <p>
-	 * This method is only called when this <code>ServiceTracker</code> has been
-	 * constructed with a <code>null ServiceTrackerCustomizer</code> argument.
+	 * This method is only called when this {@code ServiceTracker} has been
+	 * constructed with a {@code null ServiceTrackerCustomizer} argument.
 	 * 
 	 * <p>
-	 * This implementation calls <code>ungetService</code>, on the
-	 * <code>BundleContext</code> with which this <code>ServiceTracker</code>
-	 * was created, passing the specified <code>ServiceReference</code>.
+	 * This implementation calls {@code ungetService}, on the
+	 * {@code BundleContext} with which this {@code ServiceTracker}
+	 * was created, passing the specified {@code ServiceReference}.
 	 * <p>
 	 * This method can be overridden in a subclass. If the default
 	 * implementation of {@link #addingService(ServiceReference) addingService}
@@ -482,19 +491,19 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 * @param service The service object for the removed service.
 	 * @see ServiceTrackerCustomizer#removedService(ServiceReference, Object)
 	 */
-	public void removedService(ServiceReference reference, Object service) {
+	public void removedService(ServiceReference<S> reference, T service) {
 		context.ungetService(reference);
 	}
 
 	/**
 	 * Wait for at least one service to be tracked by this
-	 * <code>ServiceTracker</code>. This method will also return when this
-	 * <code>ServiceTracker</code> is closed.
+	 * {@code ServiceTracker}. This method will also return when this
+	 * {@code ServiceTracker} is closed.
 	 * 
 	 * <p>
-	 * It is strongly recommended that <code>waitForService</code> is not used
-	 * during the calling of the <code>BundleActivator</code> methods.
-	 * <code>BundleActivator</code> methods are expected to complete in a short
+	 * It is strongly recommended that {@code waitForService} is not used
+	 * during the calling of the {@code BundleActivator} methods.
+	 * {@code BundleActivator} methods are expected to complete in a short
 	 * period of time.
 	 * 
 	 * <p>
@@ -508,11 +517,11 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 *         current thread.
 	 * @throws IllegalArgumentException If the value of timeout is negative.
 	 */
-	public Object waitForService(long timeout) throws InterruptedException {
+	public T waitForService(long timeout) throws InterruptedException {
 		if (timeout < 0) {
-			throw new IllegalArgumentException("timeout value is negative"); 
+			throw new IllegalArgumentException("timeout value is negative");
 		}
-		Object object = getService(); 
+		T object = getService();
 		while (object == null) {
 			final Tracked t = tracked();
 			if (t == null) { /* if ServiceTracker is not open */
@@ -523,7 +532,7 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 					t.wait(timeout);
 				}
 			}
-			object = getService(); 
+			object = getService();
 			if (timeout > 0) {
 				return object;
 			}
@@ -532,13 +541,13 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	}
 
 	/**
-	 * Return an array of <code>ServiceReference</code>s for all services being
-	 * tracked by this <code>ServiceTracker</code>.
+	 * Return an array of {@code ServiceReference}s for all services being
+	 * tracked by this {@code ServiceTracker}.
 	 * 
-	 * @return Array of <code>ServiceReference</code>s or <code>null</code> if
+	 * @return Array of {@code ServiceReference}s or {@code null} if
 	 *         no services are being tracked.
 	 */
-	public ServiceReference[] getServiceReferences() {
+	public ServiceReference<S>[] getServiceReferences() {
 		final Tracked t = tracked();
 		if (t == null) { /* if ServiceTracker is not open */
 			return null;
@@ -548,45 +557,45 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 			if (length == 0) {
 				return null;
 			}
-			return (ServiceReference[]) t
-					.getTracked(new ServiceReference[length]);
+			ServiceReference<S>[] result = new ServiceReference[length];
+			return t.copyKeys(result);
 		}
 	}
 
 	/**
-	 * Returns a <code>ServiceReference</code> for one of the services being
-	 * tracked by this <code>ServiceTracker</code>.
+	 * Returns a {@code ServiceReference} for one of the services being
+	 * tracked by this {@code ServiceTracker}.
 	 * 
 	 * <p>
 	 * If multiple services are being tracked, the service with the highest
-	 * ranking (as specified in its <code>service.ranking</code> property) is
+	 * ranking (as specified in its {@code service.ranking} property) is
 	 * returned. If there is a tie in ranking, the service with the lowest
-	 * service ID (as specified in its <code>service.id</code> property); that
+	 * service ID (as specified in its {@code service.id} property); that
 	 * is, the service that was registered first is returned. This is the same
-	 * algorithm used by <code>BundleContext.getServiceReference</code>.
+	 * algorithm used by {@code BundleContext.getServiceReference}.
 	 * 
 	 * <p>
 	 * This implementation calls {@link #getServiceReferences()} to get the list
 	 * of references for the tracked services.
 	 * 
-	 * @return A <code>ServiceReference</code> or <code>null</code> if no
+	 * @return A {@code ServiceReference} or {@code null} if no
 	 *         services are being tracked.
 	 * @since 1.1
 	 */
-	public ServiceReference getServiceReference() {
-		ServiceReference reference = cachedReference;
+	public ServiceReference<S> getServiceReference() {
+		ServiceReference<S> reference = cachedReference;
 		if (reference != null) {
 			if (DEBUG) {
 				System.out
 						.println("ServiceTracker.getServiceReference[cached]: "
-								+ filter); 
+								+ filter);
 			}
 			return reference;
 		}
 		if (DEBUG) {
-			System.out.println("ServiceTracker.getServiceReference: " + filter); 
+			System.out.println("ServiceTracker.getServiceReference: " + filter);
 		}
-		ServiceReference[] references = getServiceReferences(); 
+		ServiceReference<S>[] references = getServiceReferences();
 		int length = (references == null) ? 0 : references.length;
 		if (length == 0) { /* if no service is being tracked */
 			return null;
@@ -634,15 +643,15 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 
 	/**
 	 * Returns the service object for the specified
-	 * <code>ServiceReference</code> if the specified referenced service is
-	 * being tracked by this <code>ServiceTracker</code>.
+	 * {@code ServiceReference} if the specified referenced service is
+	 * being tracked by this {@code ServiceTracker}.
 	 * 
 	 * @param reference The reference to the desired service.
-	 * @return A service object or <code>null</code> if the service referenced
-	 *         by the specified <code>ServiceReference</code> is not being
+	 * @return A service object or {@code null} if the service referenced
+	 *         by the specified {@code ServiceReference} is not being
 	 *         tracked.
 	 */
-	public Object getService(ServiceReference reference) {
+	public T getService(ServiceReference<S> reference) {
 		final Tracked t = tracked();
 		if (t == null) { /* if ServiceTracker is not open */
 			return null;
@@ -654,7 +663,7 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 
 	/**
 	 * Return an array of service objects for all services being tracked by this
-	 * <code>ServiceTracker</code>.
+	 * {@code ServiceTracker}.
 	 * 
 	 * <p>
 	 * This implementation calls {@link #getServiceReferences()} to get the list
@@ -662,7 +671,7 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 * {@link #getService(ServiceReference)} for each reference to get the
 	 * tracked service object.
 	 * 
-	 * @return An array of service objects or <code>null</code> if no services
+	 * @return An array of service objects or {@code null} if no services
 	 *         are being tracked.
 	 */
 	public Object[] getServices() {
@@ -671,14 +680,14 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 			return null;
 		}
 		synchronized (t) {
-			ServiceReference[] references = getServiceReferences(); 
+			ServiceReference<S>[] references = getServiceReferences();
 			int length = (references == null) ? 0 : references.length;
 			if (length == 0) {
 				return null;
 			}
 			Object[] objects = new Object[length];
 			for (int i = 0; i < length; i++) {
-				objects[i] = getService(references[i]); 
+				objects[i] = getService(references[i]);
 			}
 			return objects;
 		}
@@ -686,46 +695,45 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 
 	/**
 	 * Returns a service object for one of the services being tracked by this
-	 * <code>ServiceTracker</code>.
+	 * {@code ServiceTracker}.
 	 * 
 	 * <p>
 	 * If any services are being tracked, this implementation returns the result
-	 * of calling <code>getService(getServiceReference())</code>.
+	 * of calling {@code getService(getServiceReference())}.
 	 * 
-	 * @return A service object or <code>null</code> if no services are being
+	 * @return A service object or {@code null} if no services are being
 	 *         tracked.
 	 */
-	public Object getService() {
-		Object service = cachedService;
+	public T getService() {
+		T service = cachedService;
 		if (service != null) {
 			if (DEBUG) {
-				System.out
-						.println("ServiceTracker.getService[cached]: "
-						+ filter); 
+				System.out.println("ServiceTracker.getService[cached]: "
+						+ filter);
 			}
 			return service;
 		}
 		if (DEBUG) {
-			System.out.println("ServiceTracker.getService: " + filter); 
+			System.out.println("ServiceTracker.getService: " + filter);
 		}
-		ServiceReference reference = getServiceReference(); 
+		ServiceReference<S> reference = getServiceReference();
 		if (reference == null) {
 			return null;
 		}
-		return cachedService = getService(reference); 
+		return cachedService = getService(reference);
 	}
 
 	/**
-	 * Remove a service from this <code>ServiceTracker</code>.
+	 * Remove a service from this {@code ServiceTracker}.
 	 * 
 	 * The specified service will be removed from this
-	 * <code>ServiceTracker</code>. If the specified service was being tracked
-	 * then the <code>ServiceTrackerCustomizer.removedService</code> method will
+	 * {@code ServiceTracker}. If the specified service was being tracked
+	 * then the {@code ServiceTrackerCustomizer.removedService} method will
 	 * be called for that service.
 	 * 
 	 * @param reference The reference to the service to be removed.
 	 */
-	public void remove(ServiceReference reference) {
+	public void remove(ServiceReference<S> reference) {
 		final Tracked t = tracked();
 		if (t == null) { /* if ServiceTracker is not open */
 			return;
@@ -735,7 +743,7 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 
 	/**
 	 * Return the number of services being tracked by this
-	 * <code>ServiceTracker</code>.
+	 * {@code ServiceTracker}.
 	 * 
 	 * @return The number of services being tracked.
 	 */
@@ -750,24 +758,23 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	}
 
 	/**
-	 * Returns the tracking count for this <code>ServiceTracker</code>.
+	 * Returns the tracking count for this {@code ServiceTracker}.
 	 * 
-	 * The tracking count is initialized to 0 when this
-	 * <code>ServiceTracker</code> is opened. Every time a service is added,
-	 * modified or removed from this <code>ServiceTracker</code>, the tracking
-	 * count is incremented.
+	 * The tracking count is initialized to 0 when this {@code ServiceTracker}
+	 * is opened. Every time a service is added, modified or removed from this
+	 * {@code ServiceTracker}, the tracking count is incremented.
 	 * 
 	 * <p>
 	 * The tracking count can be used to determine if this
-	 * <code>ServiceTracker</code> has added, modified or removed a service by
+	 * {@code ServiceTracker} has added, modified or removed a service by
 	 * comparing a tracking count value previously collected with the current
 	 * tracking count value. If the value has not changed, then no service has
-	 * been added, modified or removed from this <code>ServiceTracker</code>
-	 * since the previous tracking count was collected.
+	 * been added, modified or removed from this {@code ServiceTracker} since
+	 * the previous tracking count was collected.
 	 * 
 	 * @since 1.2
-	 * @return The tracking count for this <code>ServiceTracker</code> or -1 if
-	 *         this <code>ServiceTracker</code> is not open.
+	 * @return The tracking count for this {@code ServiceTracker} or -1 if this
+	 *         {@code ServiceTracker} is not open.
 	 */
 	public int getTrackingCount() {
 		final Tracked t = tracked();
@@ -792,17 +799,113 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 		cachedReference = null; /* clear cached value */
 		cachedService = null; /* clear cached value */
 		if (DEBUG) {
-			System.out.println("ServiceTracker.modified: " + filter); 
+			System.out.println("ServiceTracker.modified: " + filter);
+		}
+	}
+
+	/**
+	 * Return a {@code SortedMap} of the {@code ServiceReference}s and
+	 * service objects for all services being tracked by this
+	 * {@code ServiceTracker}. The map is sorted in reverse natural order
+	 * of {@code ServiceReference}. That is, the first entry is the service
+	 * with the highest ranking and the lowest service id.
+	 * 
+	 * @return A {@code SortedMap} with the {@code ServiceReference}s
+	 *         and service objects for all services being tracked by this
+	 *         {@code ServiceTracker}. If no services are being tracked,
+	 *         then the returned map is empty.
+	 * @since 1.5
+	 */
+	public SortedMap<ServiceReference<S>, T> getTracked() {
+		SortedMap<ServiceReference<S>, T> map = new TreeMap<ServiceReference<S>, T>(
+				Collections.reverseOrder());
+		final Tracked t = tracked();
+		if (t == null) { /* if ServiceTracker is not open */
+			return map;
+		}
+		synchronized (t) {
+			return t.copyEntries(map);
+		}
+	}
+
+	/**
+	 * Return if this {@code ServiceTracker} is empty.
+	 * 
+	 * @return {@code true} if this {@code ServiceTracker} is not tracking any
+	 *         services.
+	 * @since 1.5
+	 */
+	public boolean isEmpty() {
+		final Tracked t = tracked();
+		if (t == null) { /* if ServiceTracker is not open */
+			return true;
+		}
+		synchronized (t) {
+			return t.isEmpty();
+		}
+	}
+
+	/**
+	 * Return an array of service objects for all services being tracked by this
+	 * {@code ServiceTracker}. The runtime type of the returned array is that of
+	 * the specified array.
+	 * 
+	 * <p>
+	 * This implementation calls {@link #getServiceReferences()} to get the list
+	 * of references for the tracked services and then calls
+	 * {@link #getService(ServiceReference)} for each reference to get the
+	 * tracked service object.
+	 * 
+	 * @param array An array into which the tracked service objects will be
+	 *        stored, if the array is large enough.
+	 * @return An array of service objects being tracked. If the specified array
+	 *         is large enough to hold the result, then the specified array is
+	 *         returned. If the specified array is longer then necessary to hold
+	 *         the result, the array element after the last service object is
+	 *         set to {@code null}. If the specified array is not large enough
+	 *         to hold the result, a new array is created and returned.
+	 * @since 1.5
+	 */
+	public T[] getServices(T[] array) {
+		final Tracked t = tracked();
+		if (t == null) { /* if ServiceTracker is not open */
+			if (array.length > 0) {
+				array[0] = null;
+			}
+			return array;
+		}
+		synchronized (t) {
+			ServiceReference<S>[] references = getServiceReferences();
+			int length = (references == null) ? 0 : references.length;
+			if (length == 0) {
+				if (array.length > 0) {
+					array[0] = null;
+				}
+				return array;
+			}
+			if (length > array.length) {
+				array = (T[]) Array.newInstance(array.getClass()
+						.getComponentType(), length);
+			}
+			for (int i = 0; i < length; i++) {
+				array[i] = getService(references[i]);
+			}
+			if (array.length > length) {
+				array[length] = null;
+			}
+			return array;
 		}
 	}
 
 	/**
 	 * Inner class which subclasses AbstractTracked. This class is the
-	 * <code>ServiceListener</code> object for the tracker.
+	 * {@code ServiceListener} object for the tracker.
 	 * 
 	 * @ThreadSafe
 	 */
-	class Tracked extends AbstractTracked implements ServiceListener {
+	private class Tracked extends
+			AbstractTracked<ServiceReference<S>, T, ServiceEvent>
+			implements ServiceListener {
 		/**
 		 * Tracked constructor.
 		 */
@@ -811,13 +914,13 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 		}
 
 		/**
-		 * <code>ServiceListener</code> method for the
-		 * <code>ServiceTracker</code> class. This method must NOT be
+		 * {@code ServiceListener} method for the
+		 * {@code ServiceTracker} class. This method must NOT be
 		 * synchronized to avoid deadlock potential.
 		 * 
-		 * @param event <code>ServiceEvent</code> object from the framework.
+		 * @param event {@code ServiceEvent} object from the framework.
 		 */
-		public void serviceChanged(final ServiceEvent event) {
+		final public void serviceChanged(final ServiceEvent event) {
 			/*
 			 * Check if we had a delayed call (which could happen when we
 			 * close).
@@ -825,40 +928,21 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 			if (closed) {
 				return;
 			}
-			final ServiceReference reference = event.getServiceReference();
+			final ServiceReference<S> reference = (ServiceReference<S>) event
+					.getServiceReference();
 			if (DEBUG) {
-				System.out
-						.println("ServiceTracker.Tracked.serviceChanged["
-						+ event.getType() + "]: " + reference);  
+				System.out.println("ServiceTracker.Tracked.serviceChanged["
+						+ event.getType() + "]: " + reference);
 			}
 
 			switch (event.getType()) {
 				case ServiceEvent.REGISTERED :
 				case ServiceEvent.MODIFIED :
-					if (listenerFilter != null) { // service listener added with
-						// filter
-						track(reference, event);
-						/*
-						 * If the customizer throws an unchecked exception, it
-						 * is safe to let it propagate
-						 */
-					}
-					else { // service listener added without filter
-						if (filter.match(reference)) {
-							track(reference, event);
-							/*
-							 * If the customizer throws an unchecked exception,
-							 * it is safe to let it propagate
-							 */
-						}
-						else {
-							untrack(reference, event);
-							/*
-							 * If the customizer throws an unchecked exception,
-							 * it is safe to let it propagate
-							 */
-						}
-					}
+					track(reference, event);
+					/*
+					 * If the customizer throws an unchecked exception, it is
+					 * safe to let it propagate
+					 */
 					break;
 				case ServiceEvent.MODIFIED_ENDMATCH :
 				case ServiceEvent.UNREGISTERING :
@@ -877,7 +961,7 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 		 * 
 		 * @GuardedBy this
 		 */
-		void modified() {
+		final void modified() {
 			super.modified(); /* increment the modification count */
 			ServiceTracker.this.modified();
 		}
@@ -888,12 +972,12 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 		 * 
 		 * @param item Item to be tracked.
 		 * @param related Action related object.
-		 * @return Customized object for the tracked item or <code>null</code>
+		 * @return Customized object for the tracked item or {@code null}
 		 *         if the item is not to be tracked.
 		 */
-		Object customizerAdding(final Object item,
-				final Object related) {
-			return customizer.addingService((ServiceReference) item);
+		final T customizerAdding(final ServiceReference<S> item,
+				final ServiceEvent related) {
+			return customizer.addingService(item);
 		}
 
 		/**
@@ -904,9 +988,9 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 		 * @param related Action related object.
 		 * @param object Customized object for the tracked item.
 		 */
-		void customizerModified(final Object item,
-				final Object related, final Object object) {
-			customizer.modifiedService((ServiceReference) item, object);
+		final void customizerModified(final ServiceReference<S> item,
+				final ServiceEvent related, final T object) {
+			customizer.modifiedService(item, object);
 		}
 
 		/**
@@ -917,9 +1001,9 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 		 * @param related Action related object.
 		 * @param object Customized object for the tracked item.
 		 */
-		void customizerRemoved(final Object item,
-				final Object related, final Object object) {
-			customizer.removedService((ServiceReference) item, object);
+		final void customizerRemoved(final ServiceReference<S> item,
+				final ServiceEvent related, final T object) {
+			customizer.removedService(item, object);
 		}
 	}
 
@@ -930,7 +1014,7 @@ public class ServiceTracker implements ServiceTrackerCustomizer {
 	 * @since 1.3
 	 * @ThreadSafe
 	 */
-	class AllTracked extends Tracked implements AllServiceListener {
+	private class AllTracked extends Tracked implements AllServiceListener {
 		/**
 		 * AllTracked constructor.
 		 */
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTrackerCustomizer.java b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTrackerCustomizer.java
index 5c270e3..b2caddc 100644
--- a/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTrackerCustomizer.java
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src/org/osgi/util/tracker/ServiceTrackerCustomizer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2010). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,76 +19,78 @@ package org.osgi.util.tracker;
 import org.osgi.framework.ServiceReference;
 
 /**
- * The <code>ServiceTrackerCustomizer</code> interface allows a
- * <code>ServiceTracker</code> to customize the service objects that are
- * tracked. A <code>ServiceTrackerCustomizer</code> is called when a service is
- * being added to a <code>ServiceTracker</code>. The
- * <code>ServiceTrackerCustomizer</code> can then return an object for the
- * tracked service. A <code>ServiceTrackerCustomizer</code> is also called when
+ * The {@code ServiceTrackerCustomizer} interface allows a
+ * {@code ServiceTracker} to customize the service objects that are
+ * tracked. A {@code ServiceTrackerCustomizer} is called when a service is
+ * being added to a {@code ServiceTracker}. The
+ * {@code ServiceTrackerCustomizer} can then return an object for the
+ * tracked service. A {@code ServiceTrackerCustomizer} is also called when
  * a tracked service is modified or has been removed from a
- * <code>ServiceTracker</code>.
+ * {@code ServiceTracker}.
  * 
  * <p>
  * The methods in this interface may be called as the result of a
- * <code>ServiceEvent</code> being received by a <code>ServiceTracker</code>.
- * Since <code>ServiceEvent</code>s are synchronously delivered by the
+ * {@code ServiceEvent} being received by a {@code ServiceTracker}.
+ * Since {@code ServiceEvent}s are synchronously delivered by the
  * Framework, it is highly recommended that implementations of these methods do
- * not register (<code>BundleContext.registerService</code>), modify (
- * <code>ServiceRegistration.setProperties</code>) or unregister (
- * <code>ServiceRegistration.unregister</code>) a service while being
+ * not register ({@code BundleContext.registerService}), modify (
+ * {@code ServiceRegistration.setProperties}) or unregister (
+ * {@code ServiceRegistration.unregister}) a service while being
  * synchronized on any object.
  * 
  * <p>
- * The <code>ServiceTracker</code> class is thread-safe. It does not call a
- * <code>ServiceTrackerCustomizer</code> while holding any locks.
- * <code>ServiceTrackerCustomizer</code> implementations must also be
+ * The {@code ServiceTracker} class is thread-safe. It does not call a
+ * {@code ServiceTrackerCustomizer} while holding any locks.
+ * {@code ServiceTrackerCustomizer} implementations must also be
  * thread-safe.
  * 
+ * @param <S> The type of the service being tracked.
+ * @param <T> The type of the tracked object.
  * @ThreadSafe
- * @version $Revision: 5874 $
+ * @version $Id: c654a963336cee74762b8f54c8cef8d5774f8b4d $
  */
-public interface ServiceTrackerCustomizer {
+public interface ServiceTrackerCustomizer<S, T> {
 	/**
-	 * A service is being added to the <code>ServiceTracker</code>.
+	 * A service is being added to the {@code ServiceTracker}.
 	 * 
 	 * <p>
 	 * This method is called before a service which matched the search
-	 * parameters of the <code>ServiceTracker</code> is added to the
-	 * <code>ServiceTracker</code>. This method should return the service object
-	 * to be tracked for the specified <code>ServiceReference</code>. The
-	 * returned service object is stored in the <code>ServiceTracker</code> and
-	 * is available from the <code>getService</code> and
-	 * <code>getServices</code> methods.
+	 * parameters of the {@code ServiceTracker} is added to the
+	 * {@code ServiceTracker}. This method should return the service object
+	 * to be tracked for the specified {@code ServiceReference}. The
+	 * returned service object is stored in the {@code ServiceTracker} and
+	 * is available from the {@code getService} and
+	 * {@code getServices} methods.
 	 * 
 	 * @param reference The reference to the service being added to the
-	 *        <code>ServiceTracker</code>.
+	 *        {@code ServiceTracker}.
 	 * @return The service object to be tracked for the specified referenced
-	 *         service or <code>null</code> if the specified referenced service
+	 *         service or {@code null} if the specified referenced service
 	 *         should not be tracked.
 	 */
-	public Object addingService(ServiceReference reference);
+	public T addingService(ServiceReference<S> reference);
 
 	/**
-	 * A service tracked by the <code>ServiceTracker</code> has been modified.
+	 * A service tracked by the {@code ServiceTracker} has been modified.
 	 * 
 	 * <p>
 	 * This method is called when a service being tracked by the
-	 * <code>ServiceTracker</code> has had it properties modified.
+	 * {@code ServiceTracker} has had it properties modified.
 	 * 
 	 * @param reference The reference to the service that has been modified.
 	 * @param service The service object for the specified referenced service.
 	 */
-	public void modifiedService(ServiceReference reference, Object service);
+	public void modifiedService(ServiceReference<S> reference, T service);
 
 	/**
-	 * A service tracked by the <code>ServiceTracker</code> has been removed.
+	 * A service tracked by the {@code ServiceTracker} has been removed.
 	 * 
 	 * <p>
 	 * This method is called after a service is no longer being tracked by the
-	 * <code>ServiceTracker</code>.
+	 * {@code ServiceTracker}.
 	 * 
 	 * @param reference The reference to the service that has been removed.
 	 * @param service The service object for the specified referenced service.
 	 */
-	public void removedService(ServiceReference reference, Object service);
+	public void removedService(ServiceReference<S> reference, T service);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/osgi/src2/empty.txt b/eclipse/plugins/org.eclipse.osgi/osgi/src2/empty.txt
new file mode 100644
index 0000000..ea743b1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/osgi/src2/empty.txt
@@ -0,0 +1 @@
+This source folder is only used for doing PDE build export.
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericCapability.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericCapability.java
index daaf76a..b376ede 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericCapability.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericCapability.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,26 +10,35 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.module;
 
-import org.eclipse.osgi.service.resolver.BaseDescription;
 import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.GenericDescription;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.Constants;
 
 public class GenericCapability extends VersionSupplier {
-	ResolverBundle resolverBundle;
+	final ResolverBundle resolverBundle;
+	final String[] uses;
 
-	GenericCapability(ResolverBundle resolverBundle, BaseDescription base) {
+	GenericCapability(ResolverBundle resolverBundle, GenericDescription base) {
 		super(base);
 		this.resolverBundle = resolverBundle;
+		String usesDirective = base.getDeclaredDirectives().get(Constants.USES_DIRECTIVE);
+		uses = ManifestElement.getArrayFromList(usesDirective);
 	}
 
-	public BundleDescription getBundle() {
+	public BundleDescription getBundleDescription() {
 		return getBaseDescription().getSupplier();
 	}
 
-	public boolean isFromFragment() {
-		return resolverBundle.isFragment();
+	GenericDescription getGenericDescription() {
+		return (GenericDescription) getBaseDescription();
 	}
 
 	public ResolverBundle getResolverBundle() {
 		return resolverBundle;
 	}
+
+	String[] getUsesDirective() {
+		return uses;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericConstraint.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericConstraint.java
index 285678b..7c3e916 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericConstraint.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GenericConstraint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,40 +10,49 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.module;
 
-import java.util.ArrayList;
-import org.eclipse.osgi.service.resolver.VersionConstraint;
+import org.eclipse.osgi.service.resolver.GenericSpecification;
 
 public class GenericConstraint extends ResolverConstraint {
-	private ArrayList matchingCapability;
 
-	GenericConstraint(ResolverBundle bundle, VersionConstraint constraint) {
+	private boolean supplierHasUses;
+
+	GenericConstraint(ResolverBundle bundle, GenericSpecification constraint) {
 		super(bundle, constraint);
 	}
 
 	boolean isOptional() {
-		return false;
+		return (((GenericSpecification) constraint).getResolution() & GenericSpecification.RESOLUTION_OPTIONAL) != 0;
+	}
+
+	boolean isMultiple() {
+		return !supplierHasUses && (((GenericSpecification) constraint).getResolution() & GenericSpecification.RESOLUTION_MULTIPLE) != 0;
+	}
+
+	public String getNameSpace() {
+		return ((GenericSpecification) getVersionConstraint()).getType();
 	}
 
-	boolean isSatisfiedBy(VersionSupplier vs) {
-		return !vs.getResolverBundle().isUninstalled() && getVersionConstraint().isSatisfiedBy(vs.getBaseDescription());
+	public VersionSupplier[] getMatchingCapabilities() {
+		if (isMultiple())
+			return getPossibleSuppliers();
+		VersionSupplier supplier = getSelectedSupplier();
+		return supplier == null ? null : new VersionSupplier[] {supplier};
 	}
 
-	public void setMatchingCapability(GenericCapability capability) {
-		if (capability == null) {
-			matchingCapability = null;
-			return;
-		}
-		if (matchingCapability == null)
-			matchingCapability = new ArrayList(1);
-		matchingCapability.add(capability);
+	@Override
+	void addPossibleSupplier(VersionSupplier supplier) {
+		// if there is a supplier with uses constraints then we no longer allow multiples
+		supplierHasUses |= ((GenericCapability) supplier).getUsesDirective() != null;
+		super.addPossibleSupplier(supplier);
 	}
 
-	public GenericCapability[] getMatchingCapabilities() {
-		return matchingCapability == null || matchingCapability.size() == 0 ? null : (GenericCapability[]) matchingCapability.toArray(new GenericCapability[matchingCapability.size()]);
+	@Override
+	void clearPossibleSuppliers() {
+		super.clearPossibleSuppliers();
+		supplierHasUses = false;
 	}
 
-	void removeMatchingCapability(GenericCapability capability) {
-		if (matchingCapability != null)
-			matchingCapability.remove(capability);
+	boolean supplierHasUses() {
+		return supplierHasUses;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GroupingChecker.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GroupingChecker.java
index 30c5963..ea39971 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GroupingChecker.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/GroupingChecker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2004, 2011 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -16,11 +16,11 @@ import org.eclipse.osgi.service.resolver.ExportPackageDescription;
  * The GroupingChecker checks the 'uses' directive on exported packages for consistency
  */
 public class GroupingChecker {
-	final PackageRoots nullPackageRoots = new PackageRoots(null, null);
+	final PackageRoots nullPackageRoots = new PackageRoots(null);
 	// a mapping of bundles to their package roots; keyed by
 	// ResolverBundle -> HashMap of packages; keyed by
-	// package name -> PackageRoots[]
-	private HashMap bundles = new HashMap();
+	// package name -> PackageRoots
+	private Map<ResolverBundle, Map<String, PackageRoots>> bundles = new HashMap<ResolverBundle, Map<String, PackageRoots>>();
 
 	/*
 	 * This method fully populates a bundles package roots for the purpose of resolving
@@ -28,22 +28,22 @@ public class GroupingChecker {
 	 * roots to do proper uses constraint verification on a dynamic import supplier.
 	 */
 	public void populateRoots(ResolverBundle bundle) {
-		bundles.remove(bundle);
+		if (bundles.containsKey(bundle))
+			// only do the full populate the first time (bug 337272)
+			return;
 		// process all requires
 		BundleConstraint[] requires = bundle.getRequires();
 		for (int j = 0; j < requires.length; j++) {
 			ResolverBundle selectedSupplier = (ResolverBundle) requires[j].getSelectedSupplier();
 			if (selectedSupplier != null)
-				isConsistentInternal(bundle, selectedSupplier, new ArrayList(1), true, null);
+				isConsistentInternal(bundle, selectedSupplier, new ArrayList<ResolverBundle>(1), true, null);
 		}
 		// process all imports
 		// must check resolved imports to get any dynamically resolved imports
-		ExportPackageDescription[] imports = bundle.getBundle().getResolvedImports();
-		for (int i = 0; i < imports.length; i++) {
-			ExportPackageDescription importPkg = imports[i];
-			Object[] exports = bundle.getResolver().getResolverExports().get(importPkg.getName());
-			for (int j = 0; j < exports.length; j++) {
-				ResolverExport export = (ResolverExport) exports[j];
+		ExportPackageDescription[] imports = bundle.getBundleDescription().getResolvedImports();
+		for (ExportPackageDescription importPkg : imports) {
+			List<ResolverExport> exports = bundle.getResolver().getResolverExports().get(importPkg.getName());
+			for (ResolverExport export : exports) {
 				if (export.getExportPackageDescription() == importPkg)
 					isConsistentInternal(bundle, export, true, null);
 			}
@@ -51,15 +51,27 @@ public class GroupingChecker {
 	}
 
 	/*
+	 * Re-populates the package roots or an importing bundle with the given export
+	 * This is done after wiring a package from a dynamic import (bug 337272)
+	 */
+	public void populateRoots(ResolverBundle importingBundle, ResolverExport export) {
+		Map<String, PackageRoots> packageRoots = bundles.get(importingBundle);
+		if (packageRoots != null)
+			packageRoots.remove(export.getName());
+		PackageRoots roots = getPackageRoots(export.getExporter(), export.getName(), null);
+		packageRoots.put(export.getName(), roots);
+	}
+
+	/*
 	 * Verifies the uses constraint consistency for the requiringBundle with the possible matching bundle.
 	 * If an inconsistency is found the export inconsistency is returned; otherwise null is returned
 	 */
 	public PackageRoots[][] isConsistent(ResolverBundle requiringBundle, ResolverBundle matchingBundle) {
-		ArrayList results = isConsistentInternal(requiringBundle, matchingBundle, new ArrayList(1), false, null);
-		return results == null ? null : (PackageRoots[][]) results.toArray(new PackageRoots[results.size()][]);
+		List<PackageRoots[]> results = isConsistentInternal(requiringBundle, matchingBundle, new ArrayList<ResolverBundle>(1), false, null);
+		return results == null ? null : results.toArray(new PackageRoots[results.size()][]);
 	}
 
-	private ArrayList isConsistentInternal(ResolverBundle requiringBundle, ResolverBundle matchingBundle, ArrayList visited, boolean dynamicImport, ArrayList results) {
+	private List<PackageRoots[]> isConsistentInternal(ResolverBundle requiringBundle, ResolverBundle matchingBundle, List<ResolverBundle> visited, boolean dynamicImport, List<PackageRoots[]> results) {
 		// needed to prevent endless cycles
 		if (visited.contains(matchingBundle))
 			return results;
@@ -88,8 +100,20 @@ public class GroupingChecker {
 	 * If an inconsistency is found the export returned; otherwise null is returned
 	 */
 	public PackageRoots[][] isConsistent(ResolverBundle importingBundle, ResolverExport matchingExport) {
-		ArrayList results = isConsistentInternal(importingBundle, matchingExport, false, null);
-		return results == null ? null : (PackageRoots[][]) results.toArray(new PackageRoots[results.size()][]);
+		List<PackageRoots[]> results = isConsistentInternal(importingBundle, matchingExport, false, null);
+		return results == null ? null : results.toArray(new PackageRoots[results.size()][]);
+	}
+
+	public PackageRoots[][] isConsistent(ResolverBundle requiringBundle, GenericCapability matchingCapability) {
+		String[] uses = matchingCapability.getUsesDirective();
+		if (uses == null)
+			return null;
+		ArrayList<PackageRoots[]> results = new ArrayList<PackageRoots[]>(0);
+		for (String usedPackage : uses) {
+			PackageRoots providingRoots = getPackageRoots(matchingCapability.getResolverBundle(), usedPackage, null);
+			providingRoots.addConflicts(requiringBundle, usedPackage, null, results);
+		}
+		return results.size() == 0 ? null : results.toArray(new PackageRoots[results.size()][]);
 	}
 
 	/*
@@ -99,11 +123,11 @@ public class GroupingChecker {
 	 * consistent with the possible matching dynamic export.
 	 */
 	public PackageRoots[][] isDynamicConsistent(ResolverBundle importingBundle, ResolverExport matchingExport) {
-		ArrayList results = isConsistentInternal(importingBundle, matchingExport, true, null);
-		return results == null ? null : (PackageRoots[][]) results.toArray(new PackageRoots[results.size()][]);
+		List<PackageRoots[]> results = isConsistentInternal(importingBundle, matchingExport, true, null);
+		return results == null ? null : results.toArray(new PackageRoots[results.size()][]);
 	}
 
-	private ArrayList isConsistentInternal(ResolverBundle importingBundle, ResolverExport matchingExport, boolean dyanamicImport, ArrayList results) {
+	private List<PackageRoots[]> isConsistentInternal(ResolverBundle importingBundle, ResolverExport matchingExport, boolean dyanamicImport, List<PackageRoots[]> results) {
 		PackageRoots exportingRoots = getPackageRoots(matchingExport.getExporter(), matchingExport.getName(), null);
 		// check that the exports uses packages are consistent with existing package roots
 		results = exportingRoots.isConsistentClassSpace(importingBundle, null, results);
@@ -111,48 +135,60 @@ public class GroupingChecker {
 			return results;
 		// for dynamic imports we must check that each existing root is consistent with the possible matching export
 		PackageRoots importingRoots = getPackageRoots(importingBundle, matchingExport.getName(), null);
-		HashMap importingPackages = (HashMap) bundles.get(importingBundle);
+		Map<String, PackageRoots> importingPackages = bundles.get(importingBundle);
 		if (importingPackages != null)
-			for (Iterator allImportingPackages = importingPackages.values().iterator(); allImportingPackages.hasNext();) {
-				PackageRoots roots = (PackageRoots) allImportingPackages.next();
+			for (Iterator<PackageRoots> allImportingPackages = importingPackages.values().iterator(); allImportingPackages.hasNext();) {
+				PackageRoots roots = allImportingPackages.next();
 				if (roots != importingRoots)
-					results = roots.isConsistentClassSpace(exportingRoots, null, results);
+					results = roots.isConsistentClassSpace(exportingRoots, matchingExport.getExporter(), null, results);
 			}
+		// We also must check any generic capabilities are consistent
+		GenericConstraint[] genericRequires = importingBundle.getGenericRequires();
+		for (GenericConstraint constraint : genericRequires) {
+			if (!constraint.supplierHasUses())
+				continue;
+			GenericCapability supplier = (GenericCapability) constraint.getSelectedSupplier();
+			String[] uses = supplier.getUsesDirective();
+			if (uses != null)
+				for (String usedPackage : uses) {
+					if (usedPackage.equals(matchingExport.getName())) {
+						results = exportingRoots.addConflicts(supplier.getResolverBundle(), usedPackage, null, results);
+					}
+				}
+		}
 		return results;
 	}
 
 	/*
 	 * returns package roots for a specific package name for a specific bundle
 	 */
-	PackageRoots getPackageRoots(ResolverBundle bundle, String packageName, ArrayList visited) {
-		HashMap packages = (HashMap) bundles.get(bundle);
+	PackageRoots getPackageRoots(ResolverBundle bundle, String packageName, List<ResolverBundle> visited) {
+		Map<String, PackageRoots> packages = bundles.get(bundle);
 		if (packages == null) {
-			packages = new HashMap(5);
+			packages = new HashMap<String, PackageRoots>(5);
 			bundles.put(bundle, packages);
 		}
-		PackageRoots packageRoots = (PackageRoots) packages.get(packageName);
+		PackageRoots packageRoots = packages.get(packageName);
 		if (packageRoots == null) {
-			packageRoots = createPackageRoots(bundle, packageName, visited == null ? new ArrayList(1) : visited);
+			packageRoots = createPackageRoots(bundle, packageName, visited == null ? new ArrayList<ResolverBundle>(1) : visited);
 			packages.put(packageName, packageRoots);
 		}
 		return packageRoots != null ? packageRoots : nullPackageRoots;
 	}
 
-	private PackageRoots createPackageRoots(ResolverBundle bundle, String packageName, ArrayList visited) {
+	private PackageRoots createPackageRoots(ResolverBundle bundle, String packageName, List<ResolverBundle> visited) {
 		if (visited.contains(bundle))
 			return null;
 		visited.add(bundle); // prevent endless cycles
 		// check imports
-		if (bundle.getBundle().isResolved()) {
+		if (bundle.getBundleDescription().isResolved()) {
 			// must check resolved imports to get any dynamically resolved imports 
-			ExportPackageDescription[] imports = bundle.getBundle().getResolvedImports();
-			for (int i = 0; i < imports.length; i++) {
-				ExportPackageDescription importPkg = imports[i];
-				if (importPkg.getExporter() == bundle.getBundle() || !importPkg.getName().equals(packageName))
+			ExportPackageDescription[] imports = bundle.getBundleDescription().getResolvedImports();
+			for (ExportPackageDescription importPkg : imports) {
+				if (importPkg.getExporter() == bundle.getBundleDescription() || !importPkg.getName().equals(packageName))
 					continue;
-				Object[] exports = bundle.getResolver().getResolverExports().get(packageName);
-				for (int j = 0; j < exports.length; j++) {
-					ResolverExport export = (ResolverExport) exports[j];
+				List<ResolverExport> exports = bundle.getResolver().getResolverExports().get(packageName);
+				for (ResolverExport export : exports) {
 					if (export.getExportPackageDescription() == importPkg)
 						return getPackageRoots(export.getExporter(), packageName, visited);
 				}
@@ -171,7 +207,7 @@ public class GroupingChecker {
 		}
 		// check if the bundle exports the package
 		ResolverExport[] exports = bundle.getExports(packageName);
-		ArrayList roots = new ArrayList(0);
+		List<PackageRoots> roots = new ArrayList<PackageRoots>(0);
 		// check roots from required bundles
 		BundleConstraint[] requires = bundle.getRequires();
 		for (int i = 0; i < requires.length; i++) {
@@ -200,7 +236,7 @@ public class GroupingChecker {
 			}
 		}
 		if (exports.length > 0 || roots.size() > 1) {
-			PackageRoots[] requiredRoots = (PackageRoots[]) roots.toArray(new PackageRoots[roots.size()]);
+			PackageRoots[] requiredRoots = roots.toArray(new PackageRoots[roots.size()]);
 			if (exports.length == 0) {
 				PackageRoots superSet = requiredRoots[0];
 				for (int i = 1; i < requiredRoots.length; i++) {
@@ -215,7 +251,7 @@ public class GroupingChecker {
 					return superSet;
 			}
 			// in this case we cannot share the package roots object; must create one specific for this bundle
-			PackageRoots result = new PackageRoots(packageName, bundle);
+			PackageRoots result = new PackageRoots(packageName);
 			// first merge all the roots from required bundles
 			for (int i = 0; i < requiredRoots.length; i++)
 				result.merge(requiredRoots[i]);
@@ -224,7 +260,7 @@ public class GroupingChecker {
 				result.addRoot(exports[i]);
 			return result;
 		}
-		return (PackageRoots) (roots.size() == 0 ? nullPackageRoots : roots.get(0));
+		return roots.size() == 0 ? nullPackageRoots : roots.get(0);
 	}
 
 	public void clear() {
@@ -237,12 +273,10 @@ public class GroupingChecker {
 
 	class PackageRoots {
 		private String name;
-		private ResolverBundle bundle;
 		private ResolverExport[] roots;
 
-		PackageRoots(String name, ResolverBundle bundle) {
+		PackageRoots(String name) {
 			this.name = name;
-			this.bundle = bundle;
 		}
 
 		public boolean hasRoots() {
@@ -286,11 +320,11 @@ public class GroupingChecker {
 				addRoot(packageRoots.roots[i]);
 		}
 
-		public ArrayList isConsistentClassSpace(ResolverBundle importingBundle, ArrayList visited, ArrayList results) {
+		public List<PackageRoots[]> isConsistentClassSpace(ResolverBundle importingBundle, List<PackageRoots> visited, List<PackageRoots[]> results) {
 			if (roots == null)
 				return results;
 			if (visited == null)
-				visited = new ArrayList(1);
+				visited = new ArrayList<PackageRoots>(1);
 			if (visited.contains(this))
 				return results;
 			visited.add(this);
@@ -310,7 +344,7 @@ public class GroupingChecker {
 					if (thisUsedRoots != nullPackageRoots && importingUsedRoots != nullPackageRoots)
 						if (!(subSet(thisUsedRoots.roots, importingUsedRoots.roots) || subSet(importingUsedRoots.roots, thisUsedRoots.roots))) {
 							if (results == null)
-								results = new ArrayList(1);
+								results = new ArrayList<PackageRoots[]>(1);
 							results.add(new PackageRoots[] {this, importingUsedRoots});
 						}
 					// need to check the usedRoots consistency for transitive closure
@@ -320,7 +354,7 @@ public class GroupingChecker {
 			return results;
 		}
 
-		public ArrayList isConsistentClassSpace(PackageRoots exportingRoots, ArrayList visited, ArrayList results) {
+		public List<PackageRoots[]> isConsistentClassSpace(PackageRoots exportingRoots, ResolverBundle exporter, List<PackageRoots> visited, List<PackageRoots[]> results) {
 			if (roots == null)
 				return results;
 			int size = roots.length;
@@ -330,7 +364,7 @@ public class GroupingChecker {
 				if (uses == null)
 					continue;
 				if (visited == null)
-					visited = new ArrayList(1);
+					visited = new ArrayList<PackageRoots>(1);
 				if (visited.contains(this))
 					return results;
 				visited.add(this);
@@ -338,22 +372,36 @@ public class GroupingChecker {
 					if (uses[j].equals(root.getName()) || !uses[j].equals(exportingRoots.name))
 						continue;
 					PackageRoots thisUsedRoots = getPackageRoots(root.getExporter(), uses[j], null);
-					PackageRoots exportingUsedRoots = getPackageRoots(exportingRoots.bundle, uses[j], null);
+					PackageRoots exportingUsedRoots = getPackageRoots(exporter, uses[j], null);
 					if (thisUsedRoots == exportingRoots)
 						return results;
 					if (thisUsedRoots != nullPackageRoots && exportingUsedRoots != nullPackageRoots)
 						if (!(subSet(thisUsedRoots.roots, exportingUsedRoots.roots) || subSet(exportingUsedRoots.roots, thisUsedRoots.roots))) {
 							if (results == null)
-								results = new ArrayList(1);
+								results = new ArrayList<PackageRoots[]>(1);
 							results.add(new PackageRoots[] {this, exportingUsedRoots});
 						}
 					// need to check the usedRoots consistency for transitive closure
-					results = thisUsedRoots.isConsistentClassSpace(exportingRoots, visited, results);
+					results = thisUsedRoots.isConsistentClassSpace(exportingRoots, exporter, visited, results);
 				}
 			}
 			return results;
 		}
 
+		List<PackageRoots[]> addConflicts(ResolverBundle bundle, String usedPackage, List<PackageRoots> visited, List<PackageRoots[]> results) {
+			PackageRoots bundleUsedRoots = getPackageRoots(bundle, usedPackage, null);
+			if (this == bundleUsedRoots)
+				return results;
+			if (this != nullPackageRoots && bundleUsedRoots != nullPackageRoots)
+				if (!(subSet(this.roots, bundleUsedRoots.roots) || subSet(bundleUsedRoots.roots, this.roots))) {
+					if (results == null)
+						results = new ArrayList<PackageRoots[]>(1);
+					results.add(new PackageRoots[] {this, bundleUsedRoots});
+				}
+			// need to check the usedRoots consistency for transitive closure
+			return this.isConsistentClassSpace(bundleUsedRoots, bundle, visited, results);
+		}
+
 		// TODO this is a behavioral change; before we only required 1 supplier to match; now roots must be subsets
 		private boolean subSet(ResolverExport[] superSet, ResolverExport[] subSet) {
 			for (int i = 0; i < subSet.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/MappedList.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/MappedList.java
index ade618a..a104a24 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/MappedList.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/MappedList.java
@@ -17,48 +17,45 @@ import java.util.*;
  * into the same array.  Extending classes may override the sort method to sort the individual
  * arrays in the MappedList.  By default the MappedList appends new values to the end of the array.
  */
-public class MappedList {
+public class MappedList<K, V> {
 	// the mapping with key -> Object[] mapping
-	protected HashMap internal = new HashMap();
+	protected final HashMap<K, List<V>> internal = new HashMap<K, List<V>>();
+	@SuppressWarnings("unchecked")
+	protected final List<V> empty = Collections.EMPTY_LIST;
 
-	public void put(Object key, Object value) {
-		Object existing = internal.get(key);
+	public void put(K key, V value) {
+		List<V> existing = internal.get(key);
 		if (existing == null) {
-			internal.put(key, value);
-		} else {
-			Object[] existingValues = existing.getClass().isArray() ? (Object[]) existing : new Object[] {existing};
-			// insert the new value
-			int index = insertionIndex(existingValues, value);
-			Object[] newValues = new Object[existingValues.length + 1];
-			System.arraycopy(existingValues, 0, newValues, 0, index);
-			newValues[index] = value;
-			System.arraycopy(existingValues, index, newValues, index + 1, existingValues.length - index);
-			internal.put(key, newValues); // overwrite the old values in the map
+			existing = new ArrayList<V>(1);
+			existing.add(value);
+			internal.put(key, existing);
+			return;
 		}
+		// insert the new value
+		int index = insertionIndex(existing, value);
+		existing.add(index, value);
 	}
 
-	protected int insertionIndex(Object[] existing, Object value) {
+	protected int insertionIndex(List<V> existing, V value) {
 		// a MappedList is by default not sorted so just insert at the end
 		// extending classes may override this method to provide an index that retains sorted order
-		return existing.length;
+		return existing.size();
 	}
 
 	// removes all values with the specified key
-	public Object[] remove(Object key) {
+	public List<V> remove(K key) {
 		return get(key, true);
 	}
 
 	// gets all values with the specified key
-	public Object[] get(Object key) {
+	public List<V> get(K key) {
 		return get(key, false);
 	}
 
 	// gets all values with the specified and optionally removes them
-	private Object[] get(Object key, boolean remove) {
-		Object result = remove ? internal.remove(key) : internal.get(key);
-		if (result != null && result.getClass().isArray())
-			return (Object[]) result;
-		return result == null ? new Object[0] : new Object[] {result};
+	private List<V> get(K key, boolean remove) {
+		List<V> result = remove ? internal.remove(key) : internal.get(key);
+		return result == null ? empty : result;
 	}
 
 	// returns the number of keyed lists
@@ -67,21 +64,14 @@ public class MappedList {
 	}
 
 	// returns all values of all keys
-	public Object[] getAllValues() {
+	public List<V> getAllValues() {
 		if (getSize() == 0)
-			return new Object[0];
-		ArrayList results = new ArrayList(getSize());
-		Iterator iter = internal.values().iterator();
-		while (iter.hasNext()) {
-			Object value = iter.next();
-			if (value.getClass().isArray()) {
-				Object[] values = (Object[]) iter.next();
-				for (int i = 0; i < values.length; i++)
-					results.add(values[i]);
-			} else
-				results.add(value);
-		}
-		return results.toArray();
+			return empty;
+		ArrayList<V> results = new ArrayList<V>(getSize());
+		Iterator<List<V>> iter = internal.values().iterator();
+		while (iter.hasNext())
+			results.addAll(iter.next());
+		return results;
 	}
 
 	// removes all keys from the map
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java
index 4ef1b41..824de81 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java
@@ -15,13 +15,11 @@ import org.eclipse.osgi.service.resolver.*;
 import org.osgi.framework.*;
 
 public class PermissionChecker {
-	private BundleContext context;
 	private boolean checkPermissions = false;
 	private ResolverImpl resolver;
 
-	public PermissionChecker(BundleContext context, boolean checkPermissions, ResolverImpl resolver) {
-		this.context = context;
-		this.checkPermissions = checkPermissions && context != null; // only can check permissions if context is not null
+	public PermissionChecker(boolean checkPermissions, ResolverImpl resolver) {
+		this.checkPermissions = checkPermissions;
 		this.resolver = resolver;
 	}
 
@@ -35,21 +33,25 @@ public class PermissionChecker {
 		// TODO could optimize out the producer permission check on export package
 		boolean success = false;
 		Permission producerPermission = null, consumerPermission = null;
-		Bundle producer = null, consumer = null;
+		Bundle consumer = null;
+		Bundle producer = bd.getSupplier().getBundle();
 		int errorType = 0;
 		if (vc instanceof ImportPackageSpecification) {
 			errorType = ResolverError.IMPORT_PACKAGE_PERMISSION;
-			producer = context.getBundle(((ExportPackageDescription) bd).getExporter().getBundleId());
 			producerPermission = new PackagePermission(bd.getName(), PackagePermission.EXPORTONLY);
 			consumerPermission = producer != null ? new PackagePermission(vc.getName(), producer, PackagePermission.IMPORT) : new PackagePermission(vc.getName(), PackagePermission.IMPORT);
-		} else {
+		} else if (vc instanceof BundleSpecification || vc instanceof HostSpecification) {
 			boolean requireBundle = vc instanceof BundleSpecification;
 			errorType = requireBundle ? ResolverError.REQUIRE_BUNDLE_PERMISSION : ResolverError.FRAGMENT_BUNDLE_PERMISSION;
 			producerPermission = new BundlePermission(bd.getName(), requireBundle ? BundlePermission.PROVIDE : BundlePermission.HOST);
 			consumerPermission = new BundlePermission(vc.getName(), requireBundle ? BundlePermission.REQUIRE : BundlePermission.FRAGMENT);
-			producer = context.getBundle(((BundleDescription) bd).getBundleId());
+		} else if (vc instanceof GenericSpecification) {
+			errorType = ResolverError.REQUIRE_CAPABILITY_PERMISSION;
+			GenericDescription gd = (GenericDescription) bd;
+			producerPermission = new CapabilityPermission(gd.getType(), CapabilityPermission.PROVIDE);
+			consumerPermission = new CapabilityPermission(gd.getType(), gd.getDeclaredAttributes(), producer, CapabilityPermission.REQUIRE);
 		}
-		consumer = context.getBundle(vc.getBundle().getBundleId());
+		consumer = vc.getBundle().getBundle();
 		if (producer != null && (producer.getState() & Bundle.UNINSTALLED) == 0) {
 			success = producer.hasPermission(producerPermission);
 			if (!success) {
@@ -61,6 +63,9 @@ public class PermissionChecker {
 					case ResolverError.FRAGMENT_BUNDLE_PERMISSION :
 						errorType = errorType == ResolverError.REQUIRE_BUNDLE_PERMISSION ? ResolverError.PROVIDE_BUNDLE_PERMISSION : ResolverError.HOST_BUNDLE_PERMISSION;
 						break;
+					case ResolverError.REQUIRE_CAPABILITY_PERMISSION :
+						errorType = ResolverError.PROVIDE_BUNDLE_PERMISSION;
+						break;
 				}
 				resolver.getState().addResolverError(vc.getBundle(), errorType, producerPermission.toString(), vc);
 			}
@@ -77,7 +82,15 @@ public class PermissionChecker {
 	boolean checkPackagePermission(ExportPackageDescription export) {
 		if (!checkPermissions)
 			return true;
-		Bundle bundle = context.getBundle(export.getExporter().getBundleId());
+		export.getSupplier().getBundle();
+		Bundle bundle = export.getSupplier().getBundle();
 		return bundle == null ? false : bundle.hasPermission(new PackagePermission(export.getName(), PackagePermission.EXPORTONLY));
 	}
+
+	boolean checkCapabilityPermission(GenericDescription capability) {
+		if (!checkPermissions)
+			return true;
+		Bundle bundle = capability.getSupplier().getBundle();
+		return bundle == null ? false : bundle.hasPermission(new CapabilityPermission(capability.getType(), CapabilityPermission.PROVIDE));
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
index d44e441..7eb0e08 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,38 +12,41 @@ package org.eclipse.osgi.internal.module;
 
 import java.util.*;
 import java.util.Map.Entry;
+import org.eclipse.osgi.internal.resolver.ExportPackageDescriptionImpl;
+import org.eclipse.osgi.internal.resolver.GenericDescriptionImpl;
 import org.eclipse.osgi.service.resolver.*;
 import org.osgi.framework.Constants;
 
 /*
  * A companion to BundleDescription from the state used while resolving.
  */
-public class ResolverBundle extends VersionSupplier implements Comparable {
+public class ResolverBundle extends VersionSupplier implements Comparable<ResolverBundle> {
 	public static final int UNRESOLVED = 0;
 	public static final int RESOLVING = 1;
 	public static final int RESOLVED = 2;
 
-	private Long bundleID;
+	private final Long bundleID;
 	private BundleConstraint host;
 	private ResolverImport[] imports;
 	private ResolverExport[] exports;
 	private BundleConstraint[] requires;
-	private GenericCapability[] capabilities;
+	private GenericCapability[] genericCapabilities;
 	private GenericConstraint[] genericReqiures;
 	// Fragment support
-	private ArrayList fragments;
-	private HashMap fragmentExports;
-	private HashMap fragmentImports;
-	private HashMap fragmentRequires;
-	private HashMap fragmentGenericRequires;
+	private ArrayList<ResolverBundle> fragments;
+	private HashMap<Long, List<ResolverExport>> fragmentExports;
+	private HashMap<Long, List<ResolverImport>> fragmentImports;
+	private HashMap<Long, List<BundleConstraint>> fragmentRequires;
+	private HashMap<Long, List<GenericCapability>> fragmentGenericCapabilities;
+	private HashMap<Long, List<GenericConstraint>> fragmentGenericRequires;
 	// Flag specifying whether this bundle is resolvable
 	private boolean resolvable = true;
 	// Internal resolver state for this bundle
 	private int state = UNRESOLVED;
 	private boolean uninstalled = false;
-	private ResolverImpl resolver;
+	private final ResolverImpl resolver;
 	private boolean newFragmentExports;
-	private ArrayList refs;
+	private boolean newFragmentCapabilities;
 
 	ResolverBundle(BundleDescription bundle, ResolverImpl resolver) {
 		super(bundle);
@@ -53,51 +56,51 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 	}
 
 	void initialize(boolean useSelectedExports) {
-		if (getBundle().isSingleton())
-			refs = new ArrayList();
-		// always add generic capabilities
-		GenericDescription[] actualCapabilities = getBundle().getGenericCapabilities();
-		capabilities = new GenericCapability[actualCapabilities.length];
-		for (int i = 0; i < capabilities.length; i++)
-			capabilities[i] = new GenericCapability(this, actualCapabilities[i]);
-		if (getBundle().getHost() != null) {
-			host = new BundleConstraint(this, getBundle().getHost());
+		if (getBundleDescription().getHost() != null) {
+			host = new BundleConstraint(this, getBundleDescription().getHost());
 			exports = new ResolverExport[0];
 			imports = new ResolverImport[0];
 			requires = new BundleConstraint[0];
 			genericReqiures = new GenericConstraint[0];
+			genericCapabilities = new GenericCapability[0];
 			return;
 		}
 
-		ImportPackageSpecification[] actualImports = getBundle().getImportPackages();
+		ImportPackageSpecification[] actualImports = getBundleDescription().getImportPackages();
 		// Reorder imports so that optionals are at the end so that we wire statics before optionals
-		ArrayList importList = new ArrayList(actualImports.length);
+		List<ResolverImport> importList = new ArrayList<ResolverImport>(actualImports.length);
 		for (int i = actualImports.length - 1; i >= 0; i--)
 			if (ImportPackageSpecification.RESOLUTION_OPTIONAL.equals(actualImports[i].getDirective(Constants.RESOLUTION_DIRECTIVE)))
 				importList.add(new ResolverImport(this, actualImports[i]));
 			else
 				importList.add(0, new ResolverImport(this, actualImports[i]));
-		imports = (ResolverImport[]) importList.toArray(new ResolverImport[importList.size()]);
+		imports = importList.toArray(new ResolverImport[importList.size()]);
 
-		ExportPackageDescription[] actualExports = useSelectedExports ? getBundle().getSelectedExports() : getBundle().getExportPackages();
+		ExportPackageDescription[] actualExports = useSelectedExports ? getBundleDescription().getSelectedExports() : getBundleDescription().getExportPackages();
 		exports = new ResolverExport[actualExports.length];
 		for (int i = 0; i < actualExports.length; i++)
 			exports[i] = new ResolverExport(this, actualExports[i]);
 
-		BundleSpecification[] actualRequires = getBundle().getRequiredBundles();
+		BundleSpecification[] actualRequires = getBundleDescription().getRequiredBundles();
 		requires = new BundleConstraint[actualRequires.length];
 		for (int i = 0; i < requires.length; i++)
 			requires[i] = new BundleConstraint(this, actualRequires[i]);
 
-		GenericSpecification[] actualGenericRequires = getBundle().getGenericRequires();
+		GenericSpecification[] actualGenericRequires = getBundleDescription().getGenericRequires();
 		genericReqiures = new GenericConstraint[actualGenericRequires.length];
 		for (int i = 0; i < genericReqiures.length; i++)
 			genericReqiures[i] = new GenericConstraint(this, actualGenericRequires[i]);
 
+		GenericDescription[] actualCapabilities = useSelectedExports ? getBundleDescription().getSelectedGenericCapabilities() : getBundleDescription().getGenericCapabilities();
+		genericCapabilities = new GenericCapability[actualCapabilities.length];
+		for (int i = 0; i < genericCapabilities.length; i++)
+			genericCapabilities[i] = new GenericCapability(this, actualCapabilities[i]);
+
 		fragments = null;
 		fragmentExports = null;
 		fragmentImports = null;
 		fragmentRequires = null;
+		fragmentGenericCapabilities = null;
 		fragmentGenericRequires = null;
 	}
 
@@ -107,13 +110,13 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 	}
 
 	ResolverExport[] getExports(String name) {
-		ArrayList results = new ArrayList(1); // rare to have more than one
+		List<ResolverExport> results = new ArrayList<ResolverExport>(1); // rare to have more than one
 		// it is faster to ask the VersionHashMap for this package name and then compare the exporter to this
-		Object[] resolverExports = resolver.getResolverExports().get(name);
-		for (int i = 0; i < resolverExports.length; i++)
-			if (((ResolverExport) resolverExports[i]).getExporter() == this)
-				results.add(resolverExports[i]);
-		return (ResolverExport[]) results.toArray(new ResolverExport[results.size()]);
+		List<ResolverExport> resolverExports = resolver.getResolverExports().get(name);
+		for (ResolverExport export : resolverExports)
+			if (export.getExporter() == this)
+				results.add(export);
+		return results.toArray(new ResolverExport[results.size()]);
 	}
 
 	void clearWires() {
@@ -130,7 +133,7 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 
 		GenericConstraint[] allGenericRequires = getGenericRequires();
 		for (int i = 0; i < allGenericRequires.length; i++)
-			allGenericRequires[i].setMatchingCapability(null);
+			allGenericRequires[i].clearPossibleSuppliers();
 
 		ResolverExport[] allExports = getExportPackages();
 		for (int i = 0; i < allExports.length; i++)
@@ -153,38 +156,30 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		this.state = state;
 	}
 
+	private <T> List<T> getAll(T[] hostEntries, Map<Long, List<T>> fragmentMap) {
+		List<T> result = new ArrayList<T>(hostEntries.length);
+		for (T entry : hostEntries)
+			result.add(entry);
+		for (ResolverBundle fragment : fragments) {
+			List<T> fragEntries = fragmentMap.get(fragment.bundleID);
+			if (fragEntries != null)
+				result.addAll(fragEntries);
+		}
+		return result;
+	}
+
 	ResolverImport[] getImportPackages() {
-		if (isFragment())
-			return new ResolverImport[0];
-		if (fragments == null || fragments.size() == 0)
+		if (isFragment() || fragments == null || fragments.size() == 0)
 			return imports;
-		ArrayList resultList = new ArrayList(imports.length);
-		for (int i = 0; i < imports.length; i++)
-			resultList.add(imports[i]);
-		for (Iterator iter = fragments.iterator(); iter.hasNext();) {
-			ResolverBundle fragment = (ResolverBundle) iter.next();
-			ArrayList fragImports = (ArrayList) fragmentImports.get(fragment.bundleID);
-			if (fragImports != null)
-				resultList.addAll(fragImports);
-		}
-		return (ResolverImport[]) resultList.toArray(new ResolverImport[resultList.size()]);
+		List<ResolverImport> result = getAll(imports, fragmentImports);
+		return result.toArray(new ResolverImport[result.size()]);
 	}
 
 	ResolverExport[] getExportPackages() {
-		if (isFragment())
-			return new ResolverExport[0];
-		if (fragments == null || fragments.size() == 0)
+		if (isFragment() || fragments == null || fragments.size() == 0)
 			return exports;
-		ArrayList resultList = new ArrayList(exports.length);
-		for (int i = 0; i < exports.length; i++)
-			resultList.add(exports[i]);
-		for (Iterator iter = fragments.iterator(); iter.hasNext();) {
-			ResolverBundle fragment = (ResolverBundle) iter.next();
-			ArrayList fragExports = (ArrayList) fragmentExports.get(fragment.bundleID);
-			if (fragExports != null)
-				resultList.addAll(fragExports);
-		}
-		return (ResolverExport[]) resultList.toArray(new ResolverExport[resultList.size()]);
+		List<ResolverExport> result = getAll(exports, fragmentExports);
+		return result.toArray(new ResolverExport[result.size()]);
 	}
 
 	ResolverExport[] getSelectedExports() {
@@ -219,39 +214,24 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 	}
 
 	GenericCapability[] getGenericCapabilities() {
-		return capabilities;
+		if (isFragment() || fragments == null || fragments.size() == 0)
+			return genericCapabilities;
+		List<GenericCapability> result = getAll(genericCapabilities, fragmentGenericCapabilities);
+		return result.toArray(new GenericCapability[result.size()]);
 	}
 
 	BundleConstraint[] getRequires() {
-		if (isFragment())
-			return new BundleConstraint[0];
-		if (fragments == null || fragments.size() == 0)
+		if (isFragment() || fragments == null || fragments.size() == 0)
 			return requires;
-		ArrayList resultList = new ArrayList(requires.length);
-		for (int i = 0; i < requires.length; i++)
-			resultList.add(requires[i]);
-		for (Iterator iter = fragments.iterator(); iter.hasNext();) {
-			ResolverBundle fragment = (ResolverBundle) iter.next();
-			ArrayList fragRequires = (ArrayList) fragmentRequires.get(fragment.bundleID);
-			if (fragRequires != null)
-				resultList.addAll(fragRequires);
-		}
-		return (BundleConstraint[]) resultList.toArray(new BundleConstraint[resultList.size()]);
+		List<BundleConstraint> result = getAll(requires, fragmentRequires);
+		return result.toArray(new BundleConstraint[result.size()]);
 	}
 
 	GenericConstraint[] getGenericRequires() {
 		if (isFragment() || fragments == null || fragments.size() == 0)
 			return genericReqiures;
-		ArrayList resultList = new ArrayList(genericReqiures.length);
-		for (int i = 0; i < genericReqiures.length; i++)
-			resultList.add(genericReqiures[i]);
-		for (Iterator iter = fragments.iterator(); iter.hasNext();) {
-			ResolverBundle fragment = (ResolverBundle) iter.next();
-			ArrayList fragGenericRegs = (ArrayList) fragmentGenericRequires.get(fragment.bundleID);
-			if (fragGenericRegs != null)
-				resultList.addAll(fragGenericRegs);
-		}
-		return (GenericConstraint[]) resultList.toArray(new GenericConstraint[resultList.size()]);
+		List<GenericConstraint> result = getAll(genericReqiures, fragmentGenericRequires);
+		return result.toArray(new GenericConstraint[result.size()]);
 	}
 
 	BundleConstraint getRequire(String name) {
@@ -262,7 +242,7 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		return null;
 	}
 
-	public BundleDescription getBundle() {
+	public BundleDescription getBundleDescription() {
 		return (BundleDescription) getBaseDescription();
 	}
 
@@ -281,20 +261,22 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 	}
 
 	public String toString() {
-		return "[" + getBundle() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+		return "[" + getBundleDescription() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	private void initFragments() {
 		if (fragments == null)
-			fragments = new ArrayList(1);
+			fragments = new ArrayList<ResolverBundle>(1);
 		if (fragmentExports == null)
-			fragmentExports = new HashMap(1);
+			fragmentExports = new HashMap<Long, List<ResolverExport>>(1);
 		if (fragmentImports == null)
-			fragmentImports = new HashMap(1);
+			fragmentImports = new HashMap<Long, List<ResolverImport>>(1);
 		if (fragmentRequires == null)
-			fragmentRequires = new HashMap(1);
+			fragmentRequires = new HashMap<Long, List<BundleConstraint>>(1);
+		if (fragmentGenericCapabilities == null)
+			fragmentGenericCapabilities = new HashMap<Long, List<GenericCapability>>(1);
 		if (fragmentGenericRequires == null)
-			fragmentGenericRequires = new HashMap(1);
+			fragmentGenericRequires = new HashMap<Long, List<GenericConstraint>>(1);
 	}
 
 	private boolean isImported(String packageName) {
@@ -310,41 +292,44 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		return getRequire(bundleName) != null;
 	}
 
-	ResolverExport[] attachFragment(ResolverBundle fragment, boolean dynamicAttach) {
+	void attachFragment(ResolverBundle fragment, boolean dynamicAttach) {
 		if (isFragment())
-			return new ResolverExport[0]; // cannot attach to fragments;
-		if (!getBundle().attachFragments() || (isResolved() && !getBundle().dynamicFragments()))
-			return new ResolverExport[0]; // host is restricting attachment
+			return; // cannot attach to fragments;
+		if (!getBundleDescription().attachFragments() || (isResolved() && !getBundleDescription().dynamicFragments()))
+			return; // host is restricting attachment
 		if (fragment.getHost().getNumPossibleSuppliers() > 0 && !((HostSpecification) fragment.getHost().getVersionConstraint()).isMultiHost())
-			return new ResolverExport[0]; // fragment is restricting attachment
+			return; // fragment is restricting attachment
 
-		ImportPackageSpecification[] newImports = fragment.getBundle().getImportPackages();
-		BundleSpecification[] newRequires = fragment.getBundle().getRequiredBundles();
-		ExportPackageDescription[] newExports = fragment.getBundle().getExportPackages();
-		GenericSpecification[] newGenericRequires = fragment.getBundle().getGenericRequires();
+		ImportPackageSpecification[] newImports = fragment.getBundleDescription().getImportPackages();
+		BundleSpecification[] newRequires = fragment.getBundleDescription().getRequiredBundles();
+		ExportPackageDescription[] newExports = fragment.getBundleDescription().getExportPackages();
+		GenericDescription[] newGenericCapabilities = fragment.getBundleDescription().getGenericCapabilities();
+		GenericSpecification[] newGenericRequires = fragment.getBundleDescription().getGenericRequires();
 
 		// if this is not during initialization then check if constraints conflict
-		if (dynamicAttach && constraintsConflict(fragment.getBundle(), newImports, newRequires, newGenericRequires))
-			return new ResolverExport[0]; // do not allow fragments with conflicting constraints
+		if (dynamicAttach && constraintsConflict(fragment.getBundleDescription(), newImports, newRequires, newGenericRequires))
+			return; // do not allow fragments with conflicting constraints
 		if (isResolved() && newExports.length > 0)
 			fragment.setNewFragmentExports(true);
+		if (isResolved() && newGenericCapabilities.length > 0)
+			fragment.setNewFragmentCapabilities(true);
 
 		initFragments();
 		// need to make sure there is not already another version of this fragment 
 		// already attached to this host
-		for (Iterator iFragments = fragments.iterator(); iFragments.hasNext();) {
-			ResolverBundle existingFragment = (ResolverBundle) iFragments.next();
+		for (Iterator<ResolverBundle> iFragments = fragments.iterator(); iFragments.hasNext();) {
+			ResolverBundle existingFragment = iFragments.next();
 			String bsn = existingFragment.getName();
 			if (bsn != null && bsn.equals(fragment.getName()))
-				return new ResolverExport[0];
+				return;
 		}
 		if (fragments.contains(fragment))
-			return new ResolverExport[0];
+			return;
 		fragments.add(fragment);
 		fragment.getHost().addPossibleSupplier(this);
 
 		if (newImports.length > 0) {
-			ArrayList hostImports = new ArrayList(newImports.length);
+			ArrayList<ResolverImport> hostImports = new ArrayList<ResolverImport>(newImports.length);
 			for (int i = 0; i < newImports.length; i++)
 				if (!isImported(newImports[i].getName()))
 					hostImports.add(new ResolverImport(this, newImports[i]));
@@ -352,7 +337,7 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		}
 
 		if (newRequires.length > 0) {
-			ArrayList hostRequires = new ArrayList(newRequires.length);
+			ArrayList<BundleConstraint> hostRequires = new ArrayList<BundleConstraint>(newRequires.length);
 			for (int i = 0; i < newRequires.length; i++)
 				if (!isRequired(newRequires[i].getName()))
 					hostRequires.add(new BundleConstraint(this, newRequires[i]));
@@ -360,15 +345,14 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		}
 
 		if (newGenericRequires.length > 0) {
-			ArrayList hostGenericRequires = new ArrayList(newGenericRequires.length);
+			ArrayList<GenericConstraint> hostGenericRequires = new ArrayList<GenericConstraint>(newGenericRequires.length);
 			for (int i = 0; i < newGenericRequires.length; i++)
 				hostGenericRequires.add(new GenericConstraint(this, newGenericRequires[i]));
 			fragmentGenericRequires.put(fragment.bundleID, hostGenericRequires);
 		}
 
-		ArrayList hostExports = new ArrayList(newExports.length);
+		ArrayList<ResolverExport> hostExports = new ArrayList<ResolverExport>(newExports.length);
 		if (newExports.length > 0 && dynamicAttach) {
-			StateObjectFactory factory = resolver.getState().getFactory();
 			for (int i = 0; i < newExports.length; i++) {
 				ResolverExport currentExports[] = getExports(newExports[i].getName());
 				boolean foundEquivalent = false;
@@ -377,13 +361,25 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 						foundEquivalent = true;
 				}
 				if (!foundEquivalent) {
-					ExportPackageDescription hostExport = factory.createExportPackageDescription(newExports[i].getName(), newExports[i].getVersion(), newExports[i].getDirectives(), newExports[i].getAttributes(), newExports[i].isRoot(), getBundle());
+					ExportPackageDescription hostExport = new ExportPackageDescriptionImpl(getBundleDescription(), newExports[i]);
 					hostExports.add(new ResolverExport(this, hostExport));
 				}
 			}
 			fragmentExports.put(fragment.bundleID, hostExports);
 		}
-		return (ResolverExport[]) hostExports.toArray(new ResolverExport[hostExports.size()]);
+
+		List<GenericCapability> hostCapabilities = new ArrayList<GenericCapability>(newGenericCapabilities.length);
+		if (newGenericCapabilities.length > 0 && dynamicAttach) {
+			for (GenericDescription capability : newGenericCapabilities) {
+				GenericDescription hostCapabililty = new GenericDescriptionImpl(getBundleDescription(), capability);
+				hostCapabilities.add(new GenericCapability(this, hostCapabililty));
+			}
+			fragmentGenericCapabilities.put(fragment.bundleID, hostCapabilities);
+		}
+		if (dynamicAttach) {
+			resolver.getResolverExports().put(hostExports.toArray(new ResolverExport[hostExports.size()]));
+			resolver.addGenerics(hostCapabilities.toArray(new GenericCapability[hostCapabilities.size()]));
+		}
 	}
 
 	private boolean equivalentExports(ResolverExport existingExport, ExportPackageDescription newDescription) {
@@ -399,15 +395,15 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		return true;
 	}
 
-	public static boolean equivalentMaps(Map existingDirectives, Map newDirectives, boolean exactMatch) {
+	public static boolean equivalentMaps(Map<String, Object> existingDirectives, Map<String, Object> newDirectives, boolean exactMatch) {
 		if (existingDirectives == null && newDirectives == null)
 			return true;
 		if (existingDirectives == null ? newDirectives != null : newDirectives == null)
 			return false;
 		if (exactMatch && existingDirectives.size() != newDirectives.size())
 			return false;
-		for (Iterator entries = existingDirectives.entrySet().iterator(); entries.hasNext();) {
-			Entry entry = (Entry) entries.next();
+		for (Iterator<Entry<String, Object>> entries = existingDirectives.entrySet().iterator(); entries.hasNext();) {
+			Entry<String, Object> entry = entries.next();
 			Object newValue = newDirectives.get(entry.getKey());
 			if (newValue == null || entry.getValue().getClass() != newValue.getClass())
 				return false;
@@ -437,7 +433,7 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		for (int i = 0; i < newRequires.length; i++) {
 			BundleConstraint hostRequire = getRequire(newRequires[i].getName());
 			ResolverBundle resolvedRequire = (ResolverBundle) (hostRequire == null ? null : hostRequire.getSelectedSupplier());
-			if ((resolvedRequire == null && isResolved()) || (resolvedRequire != null && !newRequires[i].isSatisfiedBy(resolvedRequire.getBundle()))) {
+			if ((resolvedRequire == null && isResolved()) || (resolvedRequire != null && !newRequires[i].isSatisfiedBy(resolvedRequire.getBundleDescription()))) {
 				result = true;
 				resolver.getState().addResolverError(fragment, ResolverError.FRAGMENT_CONFLICT, newRequires[i].toString(), newRequires[i]);
 			}
@@ -457,9 +453,17 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		return newFragmentExports;
 	}
 
-	ResolverExport[] detachFragment(ResolverBundle fragment, ResolverConstraint reason) {
+	private void setNewFragmentCapabilities(boolean newFragmentCapabilities) {
+		this.newFragmentCapabilities = newFragmentCapabilities;
+	}
+
+	boolean isNewFragmentCapabilities() {
+		return newFragmentCapabilities;
+	}
+
+	void detachFragment(ResolverBundle fragment, ResolverConstraint reason) {
 		if (isFragment())
-			return new ResolverExport[0];
+			return;
 		initFragments();
 
 		// must save off old imports and requires before we remove the fragment;
@@ -467,51 +471,54 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		ResolverImport[] oldImports = getImportPackages();
 		BundleConstraint[] oldRequires = getRequires();
 		if (!fragments.remove(fragment))
-			return new ResolverExport[0];
+			return;
 
 		fragment.setNewFragmentExports(false);
+		fragment.setNewFragmentCapabilities(false);
 		fragment.getHost().removePossibleSupplier(this);
 		fragmentImports.remove(fragment.bundleID);
 		fragmentRequires.remove(fragment.bundleID);
-		ArrayList removedExports = (ArrayList) fragmentExports.remove(fragment.bundleID);
+		List<ResolverExport> removedExports = fragmentExports.remove(fragment.bundleID);
 		fragmentGenericRequires.remove(fragment.bundleID);
+		List<GenericCapability> removedCapabilities = fragmentGenericCapabilities.remove(fragment.bundleID);
 		if (reason != null) {
 			// the fragment is being detached because one of its imports or requires cannot be resolved;
 			// we need to check the remaining fragment constraints to make sure they do not have
 			// the same unresolved constraint.
-			ResolverBundle[] remainingFrags = (ResolverBundle[]) fragments.toArray(new ResolverBundle[fragments.size()]);
-			for (int i = 0; i < remainingFrags.length; i++) {
-				ArrayList additionalImports = new ArrayList(0);
-				ArrayList additionalRequires = new ArrayList(0);
-				if (hasUnresolvedConstraint(reason, fragment, remainingFrags[i], oldImports, oldRequires, additionalImports, additionalRequires))
+			for (ResolverBundle remainingFrag : fragments) {
+				List<ResolverImport> additionalImports = new ArrayList<ResolverImport>(0);
+				List<BundleConstraint> additionalRequires = new ArrayList<BundleConstraint>(0);
+				if (hasUnresolvedConstraint(reason, fragment, remainingFrag, oldImports, oldRequires, additionalImports, additionalRequires))
 					continue;
 				// merge back the additional imports or requires which the detached fragment has in common with the remaining fragment
 				if (additionalImports.size() > 0) {
-					ArrayList remainingImports = (ArrayList) fragmentImports.get(remainingFrags[i].bundleID);
+					List<ResolverImport> remainingImports = fragmentImports.get(remainingFrag.bundleID);
 					if (remainingImports == null)
-						fragmentImports.put(remainingFrags[i].bundleID, additionalImports);
+						fragmentImports.put(remainingFrag.bundleID, additionalImports);
 					else
 						remainingImports.addAll(additionalImports);
 				}
 				if (additionalRequires.size() > 0) {
-					ArrayList remainingRequires = (ArrayList) fragmentRequires.get(remainingFrags[i].bundleID);
+					List<BundleConstraint> remainingRequires = fragmentRequires.get(remainingFrag.bundleID);
 					if (remainingRequires == null)
-						fragmentRequires.put(remainingFrags[i].bundleID, additionalRequires);
+						fragmentRequires.put(remainingFrag.bundleID, additionalRequires);
 					else
 						remainingRequires.addAll(additionalRequires);
 				}
 			}
 		}
-		ResolverExport[] results = removedExports == null ? new ResolverExport[0] : (ResolverExport[]) removedExports.toArray(new ResolverExport[removedExports.size()]);
+		ResolverExport[] results = removedExports == null ? new ResolverExport[0] : removedExports.toArray(new ResolverExport[removedExports.size()]);
 		for (int i = 0; i < results.length; i++)
 			// TODO this is a hack; need to figure out how to indicate that a fragment export is no longer attached
 			results[i].setSubstitute(results[i]);
-		return results;
+		resolver.getResolverExports().remove(results);
+		if (removedCapabilities != null)
+			resolver.removeGenerics(removedCapabilities.toArray(new GenericCapability[removedCapabilities.size()]));
 	}
 
-	private boolean hasUnresolvedConstraint(ResolverConstraint reason, ResolverBundle detachedFragment, ResolverBundle remainingFragment, ResolverImport[] oldImports, BundleConstraint[] oldRequires, ArrayList additionalImports, ArrayList additionalRequires) {
-		ImportPackageSpecification[] remainingFragImports = remainingFragment.getBundle().getImportPackages();
-		BundleSpecification[] remainingFragRequires = remainingFragment.getBundle().getRequiredBundles();
+	private boolean hasUnresolvedConstraint(ResolverConstraint reason, ResolverBundle detachedFragment, ResolverBundle remainingFragment, ResolverImport[] oldImports, BundleConstraint[] oldRequires, List<ResolverImport> additionalImports, List<BundleConstraint> additionalRequires) {
+		ImportPackageSpecification[] remainingFragImports = remainingFragment.getBundleDescription().getImportPackages();
+		BundleSpecification[] remainingFragRequires = remainingFragment.getBundleDescription().getRequiredBundles();
 		VersionConstraint[] constraints;
 		if (reason instanceof ResolverImport)
 			constraints = remainingFragImports;
@@ -519,11 +526,11 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 			constraints = remainingFragRequires;
 		for (int i = 0; i < constraints.length; i++)
 			if (reason.getName().equals(constraints[i].getName())) {
-				resolver.getResolverExports().remove(detachFragment(remainingFragment, null));
+				detachFragment(remainingFragment, null);
 				return true;
 			}
 		for (int i = 0; i < oldImports.length; i++) {
-			if (oldImports[i].getVersionConstraint().getBundle() != detachedFragment.getBundle())
+			if (oldImports[i].getVersionConstraint().getBundle() != detachedFragment.getBundleDescription())
 				continue; // the constraint is not from the detached fragment
 			for (int j = 0; j < remainingFragImports.length; j++) {
 				if (oldImports[i].getName().equals(remainingFragImports[j].getName())) {
@@ -535,7 +542,7 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 			}
 		}
 		for (int i = 0; i < oldRequires.length; i++) {
-			if (oldRequires[i].getVersionConstraint().getBundle() != detachedFragment.getBundle())
+			if (oldRequires[i].getVersionConstraint().getBundle() != detachedFragment.getBundleDescription())
 				continue; // the constraint is not from the detached fragment
 			for (int j = 0; j < remainingFragRequires.length; j++) {
 				if (oldRequires[i].getName().equals(remainingFragRequires[j].getName())) {
@@ -552,9 +559,10 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 	void detachAllFragments() {
 		if (fragments == null)
 			return;
-		ResolverBundle[] allFragments = (ResolverBundle[]) fragments.toArray(new ResolverBundle[fragments.size()]);
+		ResolverBundle[] allFragments = fragments.toArray(new ResolverBundle[fragments.size()]);
 		for (int i = 0; i < allFragments.length; i++)
 			detachFragment(allFragments[i], null);
+		fragments = null;
 	}
 
 	boolean isResolvable() {
@@ -577,22 +585,6 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 		return resolver;
 	}
 
-	void clearRefs() {
-		if (refs != null)
-			refs.clear();
-	}
-
-	void addRef(ResolverBundle ref) {
-		if (((BundleDescription) getBaseDescription()).isResolved())
-			return; // don't care when the bundle is already resolved
-		if (refs != null && !refs.contains(ref))
-			refs.add(ref);
-	}
-
-	int getRefs() {
-		return refs == null ? 0 : refs.size();
-	}
-
 	ResolverBundle[] getFragments() {
 		return fragments == null ? new ResolverBundle[0] : (ResolverBundle[]) fragments.toArray(new ResolverBundle[fragments.size()]);
 	}
@@ -604,9 +596,9 @@ public class ResolverBundle extends VersionSupplier implements Comparable {
 	 * If the other BSN is null then -1 is returned
 	 * otherwise String.compareTo is used
 	 */
-	public int compareTo(Object o) {
+	public int compareTo(ResolverBundle o) {
 		String bsn = getName();
-		String otherBsn = ((ResolverBundle) o).getName();
+		String otherBsn = o.getName();
 		if (bsn == null)
 			return otherBsn == null ? 0 : 1;
 		return otherBsn == null ? -1 : bsn.compareTo(otherBsn);
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverConstraint.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverConstraint.java
index 85acb74..759898a 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverConstraint.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverConstraint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2005, 2011 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -10,6 +10,7 @@ package org.eclipse.osgi.internal.module;
 
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.VersionConstraint;
+import org.osgi.framework.wiring.BundleRequirement;
 
 /*
  * A companion to VersionConstraint from the state used while resolving
@@ -17,12 +18,14 @@ import org.eclipse.osgi.service.resolver.VersionConstraint;
 public abstract class ResolverConstraint {
 	final protected ResolverBundle bundle;
 	protected VersionConstraint constraint;
+	private BundleRequirement requrement;
 	private VersionSupplier[] possibleSuppliers;
 	private int selectedSupplierIndex = 0;
 
 	ResolverConstraint(ResolverBundle bundle, VersionConstraint constraint) {
 		this.bundle = bundle;
 		this.constraint = constraint;
+		this.requrement = constraint.getRequirement();
 	}
 
 	// returns the Resolver bundle requiring the ResolverConstraint
@@ -32,7 +35,7 @@ public abstract class ResolverConstraint {
 
 	// returns the BundleDescription requiring the ResolverConstraint
 	BundleDescription getBundleDescription() {
-		return bundle.getBundle();
+		return bundle.getBundleDescription();
 	}
 
 	// returns whether this constraint is from an attached fragment
@@ -139,5 +142,10 @@ public abstract class ResolverConstraint {
 
 	void setVersionConstraint(VersionConstraint constraint) {
 		this.constraint = constraint;
+		this.requrement = constraint.getRequirement();
+	}
+
+	BundleRequirement getRequirement() {
+		return requrement;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverExport.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverExport.java
index 6e2a184..7aab84b 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverExport.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverExport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,7 @@ public class ResolverExport extends VersionSupplier {
 		return (ExportPackageDescription) base;
 	}
 
-	public BundleDescription getBundle() {
+	public BundleDescription getBundleDescription() {
 		return getExportPackageDescription().getExporter();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java
index 24b650a..98745d0 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2004, 2011 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -19,14 +19,18 @@ import org.eclipse.osgi.framework.debug.FrameworkDebugOptions;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.framework.internal.core.FilterImpl;
 import org.eclipse.osgi.framework.util.SecureAction;
+import org.eclipse.osgi.internal.baseadaptor.ArrayMap;
 import org.eclipse.osgi.internal.module.GroupingChecker.PackageRoots;
-import org.eclipse.osgi.internal.resolver.BundleDescriptionImpl;
-import org.eclipse.osgi.internal.resolver.ExportPackageDescriptionImpl;
+import org.eclipse.osgi.internal.resolver.*;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.ManifestElement;
-import org.osgi.framework.*;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.hooks.resolver.ResolverHook;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRevision;
 
-public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver {
+public class ResolverImpl implements Resolver {
 	// Debug fields
 	private static final String RESOLVER = FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME + "/resolver"; //$NON-NLS-1$
 	private static final String OPTION_DEBUG = RESOLVER + "/debug";//$NON-NLS-1$
@@ -46,37 +50,39 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	private static int MAX_MULTIPLE_SUPPLIERS_MERGE = 10;
 	private static int MAX_USES_TIME_BASE = 30000; // 30 seconds
 	private static int MAX_USES_TIME_LIMIT = 90000; // 90 seconds
-	static final SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	static final SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 
 	private String[][] CURRENT_EES;
+	private ResolverHook hook;
 
 	// The State associated with this resolver
 	private State state;
 	// Used to check permissions for import/export, provide/require, host/fragment
 	private final PermissionChecker permissionChecker;
 	// Set of bundles that are pending removal
-	private MappedList removalPending = new MappedList();
+	private MappedList<Long, BundleDescription> removalPending = new MappedList<Long, BundleDescription>();
 	// Indicates whether this resolver has been initialized
 	private boolean initialized = false;
 
 	// Repository for exports
-	private VersionHashMap resolverExports = null;
+	private VersionHashMap<ResolverExport> resolverExports = null;
 	// Repository for bundles
-	private VersionHashMap resolverBundles = null;
+	private VersionHashMap<ResolverBundle> resolverBundles = null;
 	// Repository for generics
-	private VersionHashMap resolverGenerics = null;
+	private Map<String, VersionHashMap<GenericCapability>> resolverGenerics = null;
 	// List of unresolved bundles
-	private HashSet unresolvedBundles = null;
+	private HashSet<ResolverBundle> unresolvedBundles = null;
 	// Keys are BundleDescriptions, values are ResolverBundles
-	private HashMap bundleMapping = null;
+	private HashMap<BundleDescription, ResolverBundle> bundleMapping = null;
 	private GroupingChecker groupingChecker;
-	private Comparator selectionPolicy;
+	private Comparator<BaseDescription> selectionPolicy;
 	private boolean developmentMode = false;
 	private boolean usesCalculationTimeout = false;
+	private long usesTimeout = -1;
 	private volatile CompositeResolveHelperRegistry compositeHelpers;
 
-	public ResolverImpl(BundleContext context, boolean checkPermissions) {
-		this.permissionChecker = new PermissionChecker(context, checkPermissions, this);
+	public ResolverImpl(boolean checkPermissions) {
+		this.permissionChecker = new PermissionChecker(checkPermissions, this);
 	}
 
 	PermissionChecker getPermissionChecker() {
@@ -85,28 +91,28 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 
 	// Initializes the resolver
 	private void initialize() {
-		resolverExports = new VersionHashMap(this);
-		resolverBundles = new VersionHashMap(this);
-		resolverGenerics = new VersionHashMap(this);
-		unresolvedBundles = new HashSet();
-		bundleMapping = new HashMap();
+		resolverExports = new VersionHashMap<ResolverExport>(this);
+		resolverBundles = new VersionHashMap<ResolverBundle>(this);
+		resolverGenerics = new HashMap<String, VersionHashMap<GenericCapability>>();
+		unresolvedBundles = new HashSet<ResolverBundle>();
+		bundleMapping = new HashMap<BundleDescription, ResolverBundle>();
 		BundleDescription[] bundles = state.getBundles();
 		groupingChecker = new GroupingChecker();
 
-		ArrayList fragmentBundles = new ArrayList();
+		ArrayList<ResolverBundle> fragmentBundles = new ArrayList<ResolverBundle>();
 		// Add each bundle to the resolver's internal state
 		for (int i = 0; i < bundles.length; i++)
 			initResolverBundle(bundles[i], fragmentBundles, false);
 		// Add each removal pending bundle to the resolver's internal state
-		Object[] removedBundles = removalPending.getAllValues();
-		for (int i = 0; i < removedBundles.length; i++)
-			initResolverBundle((BundleDescription) removedBundles[i], fragmentBundles, true);
+		List<BundleDescription> removedBundles = removalPending.getAllValues();
+		for (BundleDescription removed : removedBundles)
+			initResolverBundle(removed, fragmentBundles, true);
 		// Iterate over the resolved fragments and attach them to their hosts
-		for (Iterator iter = fragmentBundles.iterator(); iter.hasNext();) {
-			ResolverBundle fragment = (ResolverBundle) iter.next();
+		for (Iterator<ResolverBundle> iter = fragmentBundles.iterator(); iter.hasNext();) {
+			ResolverBundle fragment = iter.next();
 			BundleDescription[] hosts = ((HostSpecification) fragment.getHost().getVersionConstraint()).getHosts();
 			for (int i = 0; i < hosts.length; i++) {
-				ResolverBundle host = (ResolverBundle) bundleMapping.get(hosts[i]);
+				ResolverBundle host = bundleMapping.get(hosts[i]);
 				if (host != null)
 					// Do not add fragment exports here because they would have been added by the host above.
 					host.attachFragment(fragment, false);
@@ -117,13 +123,13 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		initialized = true;
 	}
 
-	private void initResolverBundle(BundleDescription bundleDesc, ArrayList fragmentBundles, boolean pending) {
+	private void initResolverBundle(BundleDescription bundleDesc, ArrayList<ResolverBundle> fragmentBundles, boolean pending) {
 		ResolverBundle bundle = new ResolverBundle(bundleDesc, this);
 		bundleMapping.put(bundleDesc, bundle);
 		if (!pending || bundleDesc.isResolved()) {
 			resolverExports.put(bundle.getExportPackages());
 			resolverBundles.put(bundle.getName(), bundle);
-			resolverGenerics.put(bundle.getGenericCapabilities());
+			addGenerics(bundle.getGenericCapabilities());
 		}
 		if (bundleDesc.isResolved()) {
 			bundle.setState(ResolverBundle.RESOLVED);
@@ -137,16 +143,15 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 
 	// Re-wire previously resolved bundles
 	private void rewireBundles() {
-		ArrayList visited = new ArrayList(bundleMapping.size());
-		for (Iterator iter = bundleMapping.values().iterator(); iter.hasNext();) {
-			ResolverBundle rb = (ResolverBundle) iter.next();
-			if (!rb.getBundle().isResolved() || rb.isFragment())
+		List<ResolverBundle> visited = new ArrayList<ResolverBundle>(bundleMapping.size());
+		for (ResolverBundle rb : bundleMapping.values()) {
+			if (!rb.getBundleDescription().isResolved() || rb.isFragment())
 				continue;
 			rewireBundle(rb, visited);
 		}
 	}
 
-	private void rewireBundle(ResolverBundle rb, ArrayList visited) {
+	private void rewireBundle(ResolverBundle rb, List<ResolverBundle> visited) {
 		if (visited.contains(rb))
 			return;
 		visited.add(rb);
@@ -166,29 +171,35 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			rewireGeneric(genericRequires[i], visited);
 	}
 
-	private void rewireGeneric(GenericConstraint constraint, ArrayList visited) {
-		if (constraint.getMatchingCapabilities() != null)
+	private void rewireGeneric(GenericConstraint constraint, List<ResolverBundle> visited) {
+		if (constraint.getSelectedSupplier() != null)
 			return;
 		GenericDescription[] suppliers = ((GenericSpecification) constraint.getVersionConstraint()).getSuppliers();
 		if (suppliers == null)
 			return;
-		Object[] matches = resolverGenerics.get(constraint.getName());
-		for (int i = 0; i < matches.length; i++) {
-			GenericCapability match = (GenericCapability) matches[i];
-			for (int j = 0; j < suppliers.length; j++)
-				if (match.getBaseDescription() == suppliers[j])
-					constraint.setMatchingCapability(match);
-		}
-		GenericCapability[] matchingCapabilities = constraint.getMatchingCapabilities();
+		VersionHashMap<GenericCapability> namespace = resolverGenerics.get(constraint.getNameSpace());
+		if (namespace == null) {
+			System.err.println("Could not find matching capability for " + constraint.getVersionConstraint()); //$NON-NLS-1$
+			// TODO log error!!
+			return;
+		}
+		String constraintName = constraint.getName();
+		List<GenericCapability> matches = constraintName == null ? namespace.get(constraintName) : namespace.getAllValues();
+		for (GenericCapability match : matches) {
+			for (GenericDescription supplier : suppliers)
+				if (match.getBaseDescription() == supplier)
+					constraint.addPossibleSupplier(match);
+		}
+		VersionSupplier[] matchingCapabilities = constraint.getPossibleSuppliers();
 		if (matchingCapabilities != null)
 			for (int i = 0; i < matchingCapabilities.length; i++)
 				rewireBundle(matchingCapabilities[i].getResolverBundle(), visited);
 	}
 
-	private void rewireRequire(BundleConstraint req, ArrayList visited) {
+	private void rewireRequire(BundleConstraint req, List<ResolverBundle> visited) {
 		if (req.getSelectedSupplier() != null)
 			return;
-		ResolverBundle matchingBundle = (ResolverBundle) bundleMapping.get(req.getVersionConstraint().getSupplier());
+		ResolverBundle matchingBundle = bundleMapping.get(req.getVersionConstraint().getSupplier());
 		req.addPossibleSupplier(matchingBundle);
 		if (matchingBundle == null && !req.isOptional()) {
 			System.err.println("Could not find matching bundle for " + req.getVersionConstraint()); //$NON-NLS-1$
@@ -199,16 +210,15 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		}
 	}
 
-	private void rewireImport(ResolverImport imp, ArrayList visited) {
+	private void rewireImport(ResolverImport imp, List<ResolverBundle> visited) {
 		if (imp.isDynamic() || imp.getSelectedSupplier() != null)
 			return;
 		// Re-wire 'imp'
 		ResolverExport matchingExport = null;
 		ExportPackageDescription importSupplier = (ExportPackageDescription) imp.getVersionConstraint().getSupplier();
 		ResolverBundle exporter = importSupplier == null ? null : (ResolverBundle) bundleMapping.get(importSupplier.getExporter());
-		Object[] matches = resolverExports.get(imp.getName());
-		for (int j = 0; j < matches.length; j++) {
-			ResolverExport export = (ResolverExport) matches[j];
+		List<ResolverExport> matches = resolverExports.get(imp.getName());
+		for (ResolverExport export : matches) {
 			if (export.getExporter() == exporter && importSupplier == export.getExportPackageDescription()) {
 				matchingExport = export;
 				break;
@@ -227,12 +237,16 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 
 	// Checks a bundle to make sure it is valid.  If this method returns false for
 	// a given bundle, then that bundle will not even be considered for resolution
-	private boolean isResolvable(BundleDescription bundle, Dictionary[] platformProperties, ArrayList rejectedSingletons) {
-		// check if this is a rejected singleton
-		if (rejectedSingletons.contains(bundle))
+	private boolean isResolvable(ResolverBundle bundle, Dictionary<Object, Object>[] platformProperties, Collection<ResolverBundle> hookDisabled) {
+		BundleDescription bundleDesc = bundle.getBundleDescription();
+
+		// check if the bundle is a hook disabled bundle
+		if (hookDisabled.contains(bundle)) {
+			state.addResolverError(bundleDesc, ResolverError.DISABLED_BUNDLE, "Resolver hook disabled bundle.", null); //$NON-NLS-1$
 			return false;
+		}
 		// check to see if the bundle is disabled
-		DisabledInfo[] disabledInfos = state.getDisabledInfos(bundle);
+		DisabledInfo[] disabledInfos = state.getDisabledInfos(bundleDesc);
 		if (disabledInfos.length > 0) {
 			StringBuffer message = new StringBuffer();
 			for (int i = 0; i < disabledInfos.length; i++) {
@@ -240,31 +254,19 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					message.append(' ');
 				message.append('\"').append(disabledInfos[i].getPolicyName()).append(':').append(disabledInfos[i].getMessage()).append('\"');
 			}
-			state.addResolverError(bundle, ResolverError.DISABLED_BUNDLE, message.toString(), null);
+			state.addResolverError(bundleDesc, ResolverError.DISABLED_BUNDLE, message.toString(), null);
 			return false; // fail because we are disable
 		}
-		// Check for singletons
-		if (bundle.isSingleton()) {
-			Object[] sameName = resolverBundles.get(bundle.getName());
-			if (sameName.length > 1) // Need to check if one is already resolved
-				for (int i = 0; i < sameName.length; i++) {
-					if (sameName[i] == bundle || !((ResolverBundle) sameName[i]).getBundle().isSingleton())
-						continue; // Ignore the bundle we are resolving and non-singletons
-					if (((ResolverBundle) sameName[i]).getBundle().isResolved()) {
-						rejectedSingletons.add(bundle);
-						return false; // Must fail since there is already a resolved bundle
-					}
-				}
-		}
+
 		// check the required execution environment
-		String[] ees = bundle.getExecutionEnvironments();
+		String[] ees = bundleDesc.getExecutionEnvironments();
 		boolean matchedEE = ees.length == 0;
 		if (!matchedEE)
 			for (int i = 0; i < ees.length && !matchedEE; i++)
 				for (int j = 0; j < CURRENT_EES.length && !matchedEE; j++)
 					for (int k = 0; k < CURRENT_EES[j].length && !matchedEE; k++)
 						if (CURRENT_EES[j][k].equals(ees[i])) {
-							((BundleDescriptionImpl) bundle).setEquinoxEE(j);
+							((BundleDescriptionImpl) bundleDesc).setEquinoxEE(j);
 							matchedEE = true;
 						}
 		if (!matchedEE) {
@@ -275,12 +277,12 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					bundleEE.append(","); //$NON-NLS-1$
 				bundleEE.append(ees[i]);
 			}
-			state.addResolverError(bundle, ResolverError.MISSING_EXECUTION_ENVIRONMENT, bundleEE.toString(), null);
+			state.addResolverError(bundleDesc, ResolverError.MISSING_EXECUTION_ENVIRONMENT, bundleEE.toString(), null);
 			return false;
 		}
 
 		// check the native code specification
-		NativeCodeSpecification nativeCode = bundle.getNativeCodeSpecification();
+		NativeCodeSpecification nativeCode = bundleDesc.getNativeCodeSpecification();
 		if (nativeCode != null) {
 			NativeCodeDescription[] nativeCodeSuppliers = nativeCode.getPossibleSuppliers();
 			NativeCodeDescription highestRanked = null;
@@ -289,12 +291,12 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					highestRanked = nativeCodeSuppliers[i];
 			if (highestRanked == null) {
 				if (!nativeCode.isOptional()) {
-					state.addResolverError(bundle, ResolverError.NO_NATIVECODE_MATCH, nativeCode.toString(), nativeCode);
+					state.addResolverError(bundleDesc, ResolverError.NO_NATIVECODE_MATCH, nativeCode.toString(), nativeCode);
 					return false;
 				}
 			} else {
 				if (highestRanked.hasInvalidNativePaths()) {
-					state.addResolverError(bundle, ResolverError.INVALID_NATIVECODE_PATHS, highestRanked.toString(), nativeCode);
+					state.addResolverError(bundleDesc, ResolverError.INVALID_NATIVECODE_PATHS, highestRanked.toString(), nativeCode);
 					return false;
 				}
 			}
@@ -302,58 +304,76 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		}
 
 		// check the platform filter
-		String platformFilter = bundle.getPlatformFilter();
+		String platformFilter = bundleDesc.getPlatformFilter();
 		if (platformFilter == null)
 			return true;
 		if (platformProperties == null)
 			return false;
 		try {
 			Filter filter = FilterImpl.newInstance(platformFilter);
-			for (int i = 0; i < platformProperties.length; i++)
+			for (int i = 0; i < platformProperties.length; i++) {
 				// using matchCase here in case of duplicate case invarient keys (bug 180817)
-				if (filter.matchCase(platformProperties[i]))
+				@SuppressWarnings("rawtypes")
+				Dictionary props = platformProperties[i];
+				if (filter.matchCase(props))
 					return true;
+			}
 		} catch (InvalidSyntaxException e) {
 			// return false below
 		}
-		state.addResolverError(bundle, ResolverError.PLATFORM_FILTER, platformFilter, null);
+		state.addResolverError(bundleDesc, ResolverError.PLATFORM_FILTER, platformFilter, null);
 		return false;
 	}
 
 	// Attach fragment to its host
-	private void attachFragment(ResolverBundle bundle, ArrayList rejectedSingletons, Collection processedFragments) {
+	private void attachFragment(ResolverBundle bundle, Collection<String> processedFragments) {
 		if (processedFragments.contains(bundle.getName()))
 			return;
 		processedFragments.add(bundle.getName());
 		// we want to attach multiple versions of the same fragment
 		// from highest version to lowest to give the higher versions first pick
 		// of the available host bundles.
-		Object[] fragments = resolverBundles.get(bundle.getName());
-		for (int i = 0; i < fragments.length; i++) {
-			ResolverBundle fragment = (ResolverBundle) fragments[i];
+		List<ResolverBundle> fragments = resolverBundles.get(bundle.getName());
+		for (ResolverBundle fragment : fragments) {
 			if (!fragment.isResolved())
-				attachFragment0(fragment, rejectedSingletons);
+				attachFragment0(fragment);
 		}
 	}
 
-	private void attachFragment0(ResolverBundle bundle, ArrayList rejectedSingletons) {
-		if (!bundle.isFragment() || !bundle.isResolvable() || rejectedSingletons.contains(bundle.getBundle()))
+	private void attachFragment0(ResolverBundle bundle) {
+		if (!bundle.isFragment() || !bundle.isResolvable())
 			return;
 		// no need to select singletons now; it will be done when we select the rest of the singleton bundles (bug 152042)
 		// find all available hosts to attach to.
 		boolean foundMatch = false;
 		BundleConstraint hostConstraint = bundle.getHost();
-		Object[] hosts = resolverBundles.get(hostConstraint.getVersionConstraint().getName());
-		for (int i = 0; i < hosts.length; i++)
-			if (((ResolverBundle) hosts[i]).isResolvable() && hostConstraint.isSatisfiedBy((ResolverBundle) hosts[i])) {
-				foundMatch = true;
-				resolverExports.put(((ResolverBundle) hosts[i]).attachFragment(bundle, true));
+		List<ResolverBundle> hosts = resolverBundles.get(hostConstraint.getVersionConstraint().getName());
+		List<ResolverBundle> candidates = new ArrayList<ResolverBundle>(hosts);
+		List<BundleCapability> hostCapabilities = new ArrayList<BundleCapability>(hosts.size());
+		// Must remove candidates that do not match before calling hooks.
+		for (Iterator<ResolverBundle> iCandidates = candidates.iterator(); iCandidates.hasNext();) {
+			ResolverBundle host = iCandidates.next();
+			if (!host.isResolvable() || !host.getBundleDescription().attachFragments() || !hostConstraint.isSatisfiedBy(host)) {
+				iCandidates.remove();
+			} else {
+				List<BundleCapability> h = host.getBundleDescription().getDeclaredCapabilities(BundleRevision.HOST_NAMESPACE);
+				// the bundle must have 1 host capability.
+				hostCapabilities.add(h.get(0));
 			}
+		}
+
+		if (hook != null)
+			hook.filterMatches(hostConstraint.getRequirement(), asCapabilities(new ArrayMap<BundleCapability, ResolverBundle>(hostCapabilities, candidates)));
+		// we are left with only candidates that satisfy the host constraint
+		for (ResolverBundle host : candidates) {
+			foundMatch = true;
+			host.attachFragment(bundle, true);
+		}
 		if (!foundMatch)
-			state.addResolverError(bundle.getBundle(), ResolverError.MISSING_FRAGMENT_HOST, bundle.getHost().getVersionConstraint().toString(), bundle.getHost().getVersionConstraint());
+			state.addResolverError(bundle.getBundleDescription(), ResolverError.MISSING_FRAGMENT_HOST, bundle.getHost().getVersionConstraint().toString(), bundle.getHost().getVersionConstraint());
 	}
 
-	public synchronized void resolve(BundleDescription[] reRefresh, Dictionary[] platformProperties) {
+	public synchronized void resolve(BundleDescription[] reRefresh, Dictionary<Object, Object>[] platformProperties) {
 		if (DEBUG)
 			ResolverImpl.log("*** BEGIN RESOLUTION ***"); //$NON-NLS-1$
 		if (state == null)
@@ -361,59 +381,71 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 
 		if (!initialized)
 			initialize();
-		// set developmentMode each resolution
-		developmentMode = platformProperties.length == 0 ? false : org.eclipse.osgi.framework.internal.core.Constants.DEVELOPMENT_MODE.equals(platformProperties[0].get(org.eclipse.osgi.framework.internal.core.Constants.OSGI_RESOLVER_MODE));
-		reRefresh = addDevConstraints(reRefresh);
-		// Unresolve all the supplied bundles and their dependents
-		if (reRefresh != null)
-			for (int i = 0; i < reRefresh.length; i++) {
-				ResolverBundle rb = (ResolverBundle) bundleMapping.get(reRefresh[i]);
-				if (rb != null)
-					unresolveBundle(rb, false);
+		hook = (state instanceof StateImpl) ? ((StateImpl) state).getResolverHook() : null;
+		try {
+			// set developmentMode each resolution
+			developmentMode = platformProperties.length == 0 ? false : org.eclipse.osgi.framework.internal.core.Constants.DEVELOPMENT_MODE.equals(platformProperties[0].get(org.eclipse.osgi.framework.internal.core.Constants.OSGI_RESOLVER_MODE));
+			// set uses timeout each resolution
+			try {
+				Object timeout = platformProperties.length == 0 ? null : platformProperties[0].get("osgi.usesTimeout"); //$NON-NLS-1$
+				usesTimeout = timeout == null ? -1 : Long.parseLong(timeout.toString());
+			} catch (NumberFormatException e) {
+				usesTimeout = -1;
 			}
-		// reorder exports and bundles after unresolving the bundles
-		resolverExports.reorder();
-		resolverBundles.reorder();
-		resolverGenerics.reorder();
-		// always get the latest EEs
-		getCurrentEEs(platformProperties);
-		// keep a list of rejected singltons
-		ArrayList rejectedSingletons = new ArrayList();
-		boolean resolveOptional = platformProperties.length == 0 ? false : "true".equals(platformProperties[0].get("osgi.resolveOptional")); //$NON-NLS-1$//$NON-NLS-2$
-		ResolverBundle[] currentlyResolved = null;
-		if (resolveOptional) {
-			BundleDescription[] resolvedBundles = state.getResolvedBundles();
-			currentlyResolved = new ResolverBundle[resolvedBundles.length];
-			for (int i = 0; i < resolvedBundles.length; i++)
-				currentlyResolved[i] = (ResolverBundle) bundleMapping.get(resolvedBundles[i]);
-		}
-		// attempt to resolve all unresolved bundles
-		ResolverBundle[] bundles = (ResolverBundle[]) unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
-		usesCalculationTimeout = false;
-		resolveBundles(bundles, platformProperties, rejectedSingletons);
-		if (selectSingletons(bundles, rejectedSingletons)) {
-			// a singleton was unresolved as a result of selecting a different version
-			// try to resolve unresolved bundles again; this will attempt to use the selected singleton
-			bundles = (ResolverBundle[]) unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
-			resolveBundles(bundles, platformProperties, rejectedSingletons);
-		}
-		for (Iterator rejected = rejectedSingletons.iterator(); rejected.hasNext();) {
-			BundleDescription reject = (BundleDescription) rejected.next();
-			// need to do a bit of work to figure out which bundle got selected
-			BundleDescription[] sameNames = state.getBundles(reject.getSymbolicName());
-			BundleDescription sameName = reject;
-			for (int i = 0; i < sameNames.length; i++) {
-				if (sameNames[i] != reject && sameNames[i].isSingleton() && !rejectedSingletons.contains(sameNames[i])) {
-					sameName = sameNames[i]; // we know this one got selected
-					break;
+			reRefresh = addDevConstraints(reRefresh);
+			// Unresolve all the supplied bundles and their dependents
+			if (reRefresh != null)
+				for (int i = 0; i < reRefresh.length; i++) {
+					ResolverBundle rb = bundleMapping.get(reRefresh[i]);
+					if (rb != null)
+						unresolveBundle(rb, false);
 				}
+			// reorder exports and bundles after unresolving the bundles
+			resolverExports.reorder();
+			resolverBundles.reorder();
+			reorderGenerics();
+			// always get the latest EEs
+			getCurrentEEs(platformProperties);
+			boolean resolveOptional = platformProperties.length == 0 ? false : "true".equals(platformProperties[0].get("osgi.resolveOptional")); //$NON-NLS-1$//$NON-NLS-2$
+			ResolverBundle[] currentlyResolved = null;
+			if (resolveOptional) {
+				BundleDescription[] resolvedBundles = state.getResolvedBundles();
+				currentlyResolved = new ResolverBundle[resolvedBundles.length];
+				for (int i = 0; i < resolvedBundles.length; i++)
+					currentlyResolved[i] = bundleMapping.get(resolvedBundles[i]);
 			}
-			state.addResolverError(reject, ResolverError.SINGLETON_SELECTION, sameName.toString(), null);
+			// attempt to resolve all unresolved bundles
+			@SuppressWarnings("unchecked")
+			Collection<ResolverBundle> hookDisabled = Collections.EMPTY_LIST;
+			if (hook != null) {
+				List<ResolverBundle> resolvableBundles = new ArrayList<ResolverBundle>(unresolvedBundles);
+				List<BundleRevision> resolvableRevisions = new ArrayList<BundleRevision>(resolvableBundles.size());
+				for (ResolverBundle bundle : resolvableBundles)
+					resolvableRevisions.add(bundle.getBundleDescription());
+				ArrayMap<BundleRevision, ResolverBundle> resolvable = new ArrayMap<BundleRevision, ResolverBundle>(resolvableRevisions, resolvableBundles);
+				int size = resolvableBundles.size();
+				hook.filterResolvable(resolvable);
+				if (resolvable.size() < size) {
+					hookDisabled = new ArrayList<ResolverBundle>(unresolvedBundles);
+					hookDisabled.removeAll(resolvableBundles);
+				}
+			}
+
+			ResolverBundle[] bundles = unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
+
+			usesCalculationTimeout = false;
+			resolveBundles(bundles, platformProperties, hookDisabled);
+			// reorder exports and bundles after resolving the bundles
+			resolverExports.reorder();
+			resolverBundles.reorder();
+			reorderGenerics();
+			if (resolveOptional)
+				resolveOptionalConstraints(currentlyResolved);
+			if (DEBUG)
+				ResolverImpl.log("*** END RESOLUTION ***"); //$NON-NLS-1$
+		} finally {
+			hook = null;
 		}
-		if (resolveOptional)
-			resolveOptionalConstraints(currentlyResolved);
-		if (DEBUG)
-			ResolverImpl.log("*** END RESOLUTION ***"); //$NON-NLS-1$
 	}
 
 	private BundleDescription[] addDevConstraints(BundleDescription[] reRefresh) {
@@ -421,8 +453,8 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			return reRefresh; // we don't care about this unless we are in development mode
 		// when in develoment mode we need to reRefresh hosts  of unresolved fragments that add new constraints 
 		// and reRefresh and unresolved bundles that have dependents
-		HashSet additionalRefresh = new HashSet();
-		ResolverBundle[] unresolved = (ResolverBundle[]) unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
+		Set<BundleDescription> additionalRefresh = new HashSet<BundleDescription>();
+		ResolverBundle[] unresolved = unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
 		for (int i = 0; i < unresolved.length; i++) {
 			addUnresolvedWithDependents(unresolved[i], additionalRefresh);
 			addHostsFromFragmentConstraints(unresolved[i], additionalRefresh);
@@ -433,29 +465,29 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		if (reRefresh != null)
 			for (int i = 0; i < reRefresh.length; i++)
 				additionalRefresh.add(reRefresh[i]);
-		return (BundleDescription[]) additionalRefresh.toArray(new BundleDescription[additionalRefresh.size()]);
+		return additionalRefresh.toArray(new BundleDescription[additionalRefresh.size()]);
 	}
 
-	private void addUnresolvedWithDependents(ResolverBundle unresolved, HashSet additionalRefresh) {
-		BundleDescription[] dependents = unresolved.getBundle().getDependents();
+	private void addUnresolvedWithDependents(ResolverBundle unresolved, Set<BundleDescription> additionalRefresh) {
+		BundleDescription[] dependents = unresolved.getBundleDescription().getDependents();
 		if (dependents.length > 0)
-			additionalRefresh.add(unresolved.getBundle());
+			additionalRefresh.add(unresolved.getBundleDescription());
 	}
 
-	private void addHostsFromFragmentConstraints(ResolverBundle unresolved, Set additionalRefresh) {
+	private void addHostsFromFragmentConstraints(ResolverBundle unresolved, Set<BundleDescription> additionalRefresh) {
 		if (!unresolved.isFragment())
 			return;
-		ImportPackageSpecification[] newImports = unresolved.getBundle().getImportPackages();
-		BundleSpecification[] newRequires = unresolved.getBundle().getRequiredBundles();
+		ImportPackageSpecification[] newImports = unresolved.getBundleDescription().getImportPackages();
+		BundleSpecification[] newRequires = unresolved.getBundleDescription().getRequiredBundles();
 		if (newImports.length == 0 && newRequires.length == 0)
 			return; // the fragment does not have its own constraints
 		BundleConstraint hostConstraint = unresolved.getHost();
-		Object[] hosts = resolverBundles.get(hostConstraint.getVersionConstraint().getName());
-		for (int j = 0; j < hosts.length; j++)
-			if (hostConstraint.isSatisfiedBy((ResolverBundle) hosts[j]) && ((ResolverBundle) hosts[j]).isResolved())
+		List<ResolverBundle> hosts = resolverBundles.get(hostConstraint.getVersionConstraint().getName());
+		for (ResolverBundle host : hosts)
+			if (hostConstraint.isSatisfiedBy(host) && host.isResolved())
 				// we found a host that is resolved;
 				// add it to the set of bundle to refresh so we can ensure this fragment is allowed to resolve
-				additionalRefresh.add(((ResolverBundle) hosts[j]).getBundle());
+				additionalRefresh.add(host.getBundleDescription());
 
 	}
 
@@ -469,7 +501,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	// TODO this does not do proper uses constraint verification.
 	private void resolveOptionalConstraints(ResolverBundle bundle) {
 		BundleConstraint[] requires = bundle.getRequires();
-		ArrayList cycle = new ArrayList();
+		List<ResolverBundle> cycle = new ArrayList<ResolverBundle>();
 		boolean resolvedOptional = false;
 		for (int i = 0; i < requires.length; i++)
 			if (requires[i].isOptional() && requires[i].getSelectedSupplier() == null) {
@@ -487,13 +519,13 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					resolvedOptional = true;
 			}
 		if (resolvedOptional) {
-			state.resolveBundle(bundle.getBundle(), false, null, null, null, null, null);
+			state.resolveBundle(bundle.getBundleDescription(), false, null, null, null, null, null, null, null, null);
 			stateResolveConstraints(bundle);
 			stateResolveBundle(bundle);
 		}
 	}
 
-	private void getCurrentEEs(Dictionary[] platformProperties) {
+	private void getCurrentEEs(Dictionary<Object, Object>[] platformProperties) {
 		CURRENT_EES = new String[platformProperties.length][];
 		for (int i = 0; i < platformProperties.length; i++) {
 			String eeSpecs = (String) platformProperties[i].get(Constants.FRAMEWORK_EXECUTIONENVIRONMENT);
@@ -501,34 +533,139 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		}
 	}
 
-	private void resolveBundles(ResolverBundle[] bundles, Dictionary[] platformProperties, ArrayList rejectedSingletons) {
+	private void resolveBundles(ResolverBundle[] bundles, Dictionary<Object, Object>[] platformProperties, Collection<ResolverBundle> hookDisabled) {
+
 		// First check that all the meta-data is valid for each unresolved bundle
 		// This will reset the resolvable flag for each bundle
-		for (int i = 0; i < bundles.length; i++) {
-			state.removeResolverErrors(bundles[i].getBundle());
+		for (ResolverBundle bundle : bundles) {
+			state.removeResolverErrors(bundle.getBundleDescription());
 			// if in development mode then make all bundles resolvable
 			// we still want to call isResolvable here to populate any possible ResolverErrors for the bundle
-			bundles[i].setResolvable(isResolvable(bundles[i].getBundle(), platformProperties, rejectedSingletons) || developmentMode);
-			bundles[i].clearRefs();
+			bundle.setResolvable(isResolvable(bundle, platformProperties, hookDisabled) || developmentMode);
 		}
-		resolveBundles0(bundles, platformProperties, rejectedSingletons);
+		selectSingletons(bundles);
+		resolveBundles0(bundles, platformProperties);
 		if (DEBUG_WIRING)
 			printWirings();
 		// set the resolved status of the bundles in the State
 		stateResolveBundles(bundles);
 	}
 
-	private void resolveBundles0(ResolverBundle[] bundles, Dictionary[] platformProperties, ArrayList rejectedSingletons) {
+	private void selectSingletons(ResolverBundle[] bundles) {
+		if (developmentMode)
+			return; // want all singletons to resolve in devmode
+		Map<String, Collection<ResolverBundle>> selectedSingletons = new HashMap<String, Collection<ResolverBundle>>(bundles.length);
+		for (ResolverBundle bundle : bundles) {
+			if (!bundle.getBundleDescription().isSingleton() || !bundle.isResolvable())
+				continue;
+			String bsn = bundle.getName();
+			Collection<ResolverBundle> selected = selectedSingletons.get(bsn);
+			if (selected != null)
+				continue; // already processed the bsn
+			selected = new ArrayList<ResolverBundle>(1);
+			selectedSingletons.put(bsn, selected);
+
+			List<ResolverBundle> sameBSN = resolverBundles.get(bsn);
+			if (sameBSN.size() < 2) {
+				selected.add(bundle);
+				continue;
+			}
+			// prime selected with resolved singleton bundles
+			for (ResolverBundle singleton : sameBSN) {
+				if (singleton.getBundleDescription().isSingleton() && singleton.getBundleDescription().isResolved())
+					selected.add(singleton);
+			}
+			// get the collision map for the BSN
+			Map<ResolverBundle, Collection<ResolverBundle>> collisionMap = getCollisionMap(sameBSN);
+			// process the collision map
+			for (ResolverBundle singleton : sameBSN) {
+				if (selected.contains(singleton))
+					continue; // no need to process resolved bundles
+				Collection<ResolverBundle> collisions = collisionMap.get(singleton);
+				if (collisions == null || !singleton.isResolvable())
+					continue; // not a singleton or not resolvable
+				Collection<ResolverBundle> pickOneToResolve = new ArrayList<ResolverBundle>();
+				for (ResolverBundle collision : collisions) {
+					if (selected.contains(collision)) {
+						// Must fail since there is already a selected bundle which is a collision of the singleton bundle
+						singleton.setResolvable(false);
+						state.addResolverError(singleton.getBundleDescription(), ResolverError.SINGLETON_SELECTION, collision.getBundleDescription().toString(), null);
+						break;
+					}
+					if (!pickOneToResolve.contains(collision))
+						pickOneToResolve.add(collision);
+				}
+				// need to make sure the bundle does not collide from the POV of another entry
+				for (Map.Entry<ResolverBundle, Collection<ResolverBundle>> collisionEntry : collisionMap.entrySet()) {
+					if (collisionEntry.getKey() != singleton && collisionEntry.getValue().contains(singleton)) {
+						if (selected.contains(collisionEntry.getKey())) {
+							// Must fail since there is already a selected bundle for which the singleton bundle is a collision
+							singleton.setResolvable(false);
+							state.addResolverError(singleton.getBundleDescription(), ResolverError.SINGLETON_SELECTION, collisionEntry.getKey().getBundleDescription().toString(), null);
+							break;
+						}
+						if (!pickOneToResolve.contains(collisionEntry.getKey()))
+							pickOneToResolve.add(collisionEntry.getKey());
+					}
+				}
+				if (singleton.isResolvable()) {
+					pickOneToResolve.add(singleton);
+					selected.add(pickOneToResolve(pickOneToResolve));
+				}
+			}
+		}
+	}
+
+	private ResolverBundle pickOneToResolve(Collection<ResolverBundle> pickOneToResolve) {
+		ResolverBundle selectedVersion = null;
+		for (ResolverBundle singleton : pickOneToResolve) {
+			if (selectedVersion == null)
+				selectedVersion = singleton;
+			boolean higherVersion = selectionPolicy != null ? selectionPolicy.compare(selectedVersion.getBundleDescription(), singleton.getBundleDescription()) > 0 : selectedVersion.getVersion().compareTo(singleton.getVersion()) < 0;
+			if (higherVersion)
+				selectedVersion = singleton;
+		}
+
+		for (ResolverBundle singleton : pickOneToResolve) {
+			if (singleton != selectedVersion) {
+				singleton.setResolvable(false);
+				state.addResolverError(singleton.getBundleDescription(), ResolverError.SINGLETON_SELECTION, selectedVersion.getBundleDescription().toString(), null);
+			}
+		}
+		return selectedVersion;
+	}
+
+	private Map<ResolverBundle, Collection<ResolverBundle>> getCollisionMap(List<ResolverBundle> sameBSN) {
+		Map<ResolverBundle, Collection<ResolverBundle>> result = new HashMap<ResolverBundle, Collection<ResolverBundle>>();
+		for (ResolverBundle singleton : sameBSN) {
+			if (!singleton.getBundleDescription().isSingleton() || !singleton.isResolvable())
+				continue; // ignore non-singleton and non-resolvable
+			List<ResolverBundle> collisionCandidates = new ArrayList<ResolverBundle>(sameBSN.size() - 1);
+			List<BundleCapability> capabilities = new ArrayList<BundleCapability>(sameBSN.size() - 1);
+			for (ResolverBundle collision : sameBSN) {
+				if (collision == singleton || !collision.getBundleDescription().isSingleton() || !collision.isResolvable())
+					continue; // Ignore the bundle we are checking and non-singletons and non-resolvable
+				collisionCandidates.add(collision);
+				capabilities.add(collision.getCapability());
+			}
+			if (hook != null)
+				hook.filterSingletonCollisions(singleton.getCapability(), asCapabilities(new ArrayMap<BundleCapability, ResolverBundle>(capabilities, collisionCandidates)));
+			result.put(singleton, collisionCandidates);
+		}
+		return result;
+	}
+
+	private void resolveBundles0(ResolverBundle[] bundles, Dictionary<Object, Object>[] platformProperties) {
 		if (developmentMode)
 			// need to sort bundles to keep consistent order for fragment attachment (bug 174930)
 			Arrays.sort(bundles);
 		// First attach all fragments to the matching hosts
-		Collection processedFragments = new HashSet(bundles.length);
+		Collection<String> processedFragments = new HashSet<String>(bundles.length);
 		for (int i = 0; i < bundles.length; i++)
-			attachFragment(bundles[i], rejectedSingletons, processedFragments);
+			attachFragment(bundles[i], processedFragments);
 
 		// Lists of cyclic dependencies recording during resolving
-		ArrayList cycle = new ArrayList(1); // start small
+		List<ResolverBundle> cycle = new ArrayList<ResolverBundle>(1); // start small
 		// Attempt to resolve all unresolved bundles
 		for (int i = 0; i < bundles.length; i++) {
 			if (DEBUG)
@@ -541,55 +678,53 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		}
 		// Resolve all fragments that are still attached to at least one host.
 		if (unresolvedBundles.size() > 0) {
-			ResolverBundle[] unresolved = (ResolverBundle[]) unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
+			ResolverBundle[] unresolved = unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
 			for (int i = 0; i < unresolved.length; i++)
 				resolveFragment(unresolved[i]);
 		}
-		checkUsesConstraints(bundles, platformProperties, rejectedSingletons);
-		checkComposites(bundles, platformProperties, rejectedSingletons);
+		checkUsesConstraints(bundles, platformProperties);
+		checkComposites(bundles, platformProperties);
 	}
 
-	private void checkComposites(ResolverBundle[] bundles, Dictionary[] platformProperties, ArrayList rejectedSingletons) {
+	private void checkComposites(ResolverBundle[] bundles, Dictionary<Object, Object>[] platformProperties) {
 		CompositeResolveHelperRegistry helpers = getCompositeHelpers();
 		if (helpers == null)
 			return;
-		Set exclude = null;
+		Set<ResolverBundle> exclude = null;
 		for (int i = 0; i < bundles.length; i++) {
-			CompositeResolveHelper helper = helpers.getCompositeResolveHelper(bundles[i].getBundle());
+			CompositeResolveHelper helper = helpers.getCompositeResolveHelper(bundles[i].getBundleDescription());
 			if (helper == null)
 				continue;
 			if (!bundles[i].isResolved())
 				continue;
-			if (!helper.giveExports(getExportsWiredTo(bundles[i]))) {
-				state.addResolverError(bundles[i].getBundle(), ResolverError.DISABLED_BUNDLE, null, null);
+			if (!helper.giveExports(getExportsWiredTo(bundles[i], null))) {
+				state.addResolverError(bundles[i].getBundleDescription(), ResolverError.DISABLED_BUNDLE, null, null);
 				bundles[i].setResolvable(false);
-				bundles[i].clearRefs();
 				// We pass false for keepFragmentsAttached because we need to redo the attachments (bug 272561)
 				setBundleUnresolved(bundles[i], false, false);
 				if (exclude == null)
-					exclude = new HashSet(1);
+					exclude = new HashSet<ResolverBundle>(1);
 				exclude.add(bundles[i]);
 			}
 		}
-		reResolveBundles(exclude, bundles, platformProperties, rejectedSingletons);
+		reResolveBundles(exclude, bundles, platformProperties);
 	}
 
-	private void checkUsesConstraints(ResolverBundle[] bundles, Dictionary[] platformProperties, ArrayList rejectedSingletons) {
-		ArrayList conflictingConstraints = findBestCombination(bundles, platformProperties);
+	private void checkUsesConstraints(ResolverBundle[] bundles, Dictionary<Object, Object>[] platformProperties) {
+		List<ResolverConstraint> conflictingConstraints = findBestCombination(bundles, platformProperties);
 		if (conflictingConstraints == null)
 			return;
-		Set conflictedBundles = null;
-		for (Iterator conflicts = conflictingConstraints.iterator(); conflicts.hasNext();) {
-			ResolverConstraint conflict = (ResolverConstraint) conflicts.next();
+		Set<ResolverBundle> conflictedBundles = null;
+		for (ResolverConstraint conflict : conflictingConstraints) {
 			if (conflict.isOptional()) {
 				conflict.clearPossibleSuppliers();
 				continue;
 			}
 			if (conflictedBundles == null)
-				conflictedBundles = new HashSet(conflictingConstraints.size());
+				conflictedBundles = new HashSet<ResolverBundle>(conflictingConstraints.size());
 			ResolverBundle conflictedBundle;
 			if (conflict.isFromFragment())
-				conflictedBundle = (ResolverBundle) bundleMapping.get(conflict.getVersionConstraint().getBundle());
+				conflictedBundle = bundleMapping.get(conflict.getVersionConstraint().getBundle());
 			else
 				conflictedBundle = conflict.getBundle();
 			if (conflictedBundle != null) {
@@ -597,20 +732,19 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					System.out.println("Found conflicting constraint: " + conflict + " in bundle " + conflictedBundle); //$NON-NLS-1$//$NON-NLS-2$
 				conflictedBundles.add(conflictedBundle);
 				int type = conflict instanceof ResolverImport ? ResolverError.IMPORT_PACKAGE_USES_CONFLICT : ResolverError.REQUIRE_BUNDLE_USES_CONFLICT;
-				state.addResolverError(conflictedBundle.getBundle(), type, conflict.getVersionConstraint().toString(), conflict.getVersionConstraint());
+				state.addResolverError(conflictedBundle.getBundleDescription(), type, conflict.getVersionConstraint().toString(), conflict.getVersionConstraint());
 				conflictedBundle.setResolvable(false);
-				conflictedBundle.clearRefs();
 				// We pass false for keepFragmentsAttached because we need to redo the attachments (bug 272561)
 				setBundleUnresolved(conflictedBundle, false, false);
 			}
 		}
-		reResolveBundles(conflictedBundles, bundles, platformProperties, rejectedSingletons);
+		reResolveBundles(conflictedBundles, bundles, platformProperties);
 	}
 
-	private void reResolveBundles(Set exclude, ResolverBundle[] bundles, Dictionary[] platformProperties, ArrayList rejectedSingletons) {
+	private void reResolveBundles(Set<ResolverBundle> exclude, ResolverBundle[] bundles, Dictionary<Object, Object>[] platformProperties) {
 		if (exclude == null || exclude.size() == 0)
 			return;
-		ArrayList remainingUnresolved = new ArrayList();
+		List<ResolverBundle> remainingUnresolved = new ArrayList<ResolverBundle>();
 		for (int i = 0; i < bundles.length; i++) {
 			if (!exclude.contains(bundles[i])) {
 				// We pass false for keepFragmentsAttached because we need to redo the attachments (bug 272561)
@@ -618,19 +752,19 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 				remainingUnresolved.add(bundles[i]);
 			}
 		}
-		resolveBundles0((ResolverBundle[]) remainingUnresolved.toArray(new ResolverBundle[remainingUnresolved.size()]), platformProperties, rejectedSingletons);
+		resolveBundles0(remainingUnresolved.toArray(new ResolverBundle[remainingUnresolved.size()]), platformProperties);
 	}
 
-	private ArrayList findBestCombination(ResolverBundle[] bundles, Dictionary[] platformProperties) {
+	private List<ResolverConstraint> findBestCombination(ResolverBundle[] bundles, Dictionary<Object, Object>[] platformProperties) {
 		Object usesMode = platformProperties.length == 0 ? null : platformProperties[0].get("osgi.resolver.usesMode"); //$NON-NLS-1$
 		if (usesMode == null)
 			usesMode = secureAction.getProperty("osgi.resolver.usesMode"); //$NON-NLS-1$
 		if ("ignore".equals(usesMode) || developmentMode) //$NON-NLS-1$
 			return null;
-		HashSet bundleConstraints = new HashSet();
-		HashSet packageConstraints = new HashSet();
+		Set<String> bundleConstraints = new HashSet<String>();
+		Set<String> packageConstraints = new HashSet<String>();
 		// first try out the initial selections
-		ArrayList initialConflicts = getConflicts(bundles, packageConstraints, bundleConstraints);
+		List<ResolverConstraint> initialConflicts = getConflicts(bundles, packageConstraints, bundleConstraints);
 		if (initialConflicts == null || "tryFirst".equals(usesMode) || usesCalculationTimeout) { //$NON-NLS-1$
 			groupingChecker.clear();
 			// the first combination have no conflicts or 
@@ -639,7 +773,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			return initialConflicts;
 		}
 		ResolverConstraint[][] multipleSuppliers = getMultipleSuppliers(bundles, packageConstraints, bundleConstraints);
-		ArrayList conflicts = null;
+		List<ResolverConstraint> conflicts = null;
 		int[] bestCombination = new int[multipleSuppliers.length];
 		conflicts = findBestCombination(bundles, multipleSuppliers, bestCombination, initialConflicts);
 		if (DEBUG_USES) {
@@ -662,12 +796,17 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		return combination;
 	}
 
-	private ArrayList findBestCombination(ResolverBundle[] bundles, ResolverConstraint[][] multipleSuppliers, int[] bestCombination, ArrayList bestConflicts) {
+	private List<ResolverConstraint> findBestCombination(ResolverBundle[] bundles, ResolverConstraint[][] multipleSuppliers, int[] bestCombination, List<ResolverConstraint> bestConflicts) {
 		// now iterate over every possible combination until either zero conflicts are found 
 		// or we have run out of combinations
 		// if all combinations are tried then return the combination with the lowest number of conflicts
 		long initialTime = System.currentTimeMillis();
-		long timeLimit = Math.min(MAX_USES_TIME_BASE + (bundles.length * 30), MAX_USES_TIME_LIMIT);
+		long timeLimit;
+		if (usesTimeout < 0)
+			timeLimit = Math.min(MAX_USES_TIME_BASE + (bundles.length * 30), MAX_USES_TIME_LIMIT);
+		else
+			timeLimit = usesTimeout == 0 ? Long.MAX_VALUE : usesTimeout;
+
 		int bestConflictCount = getConflictCount(bestConflicts);
 		ResolverBundle[] bestConflictBundles = getConflictedBundles(bestConflicts);
 		while (bestConflictCount != 0 && getNextCombination(multipleSuppliers)) {
@@ -682,7 +821,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			// first count the conflicts for the bundles with conflicts from the best combination
 			// this significantly reduces the time it takes to populate the GroupingChecker for cases where
 			// the combination is no better.
-			ArrayList conflicts = getConflicts(bestConflictBundles, null, null);
+			List<ResolverConstraint> conflicts = getConflicts(bestConflictBundles, null, null);
 			int conflictCount = getConflictCount(conflicts);
 			if (conflictCount >= bestConflictCount) {
 				if (DEBUG_USES)
@@ -722,16 +861,14 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		System.out.println(sb.toString());
 	}
 
-	private ResolverBundle[] getConflictedBundles(ArrayList bestConflicts) {
+	private ResolverBundle[] getConflictedBundles(List<ResolverConstraint> bestConflicts) {
 		if (bestConflicts == null)
 			return new ResolverBundle[0];
-		ArrayList conflictedBundles = new ArrayList(bestConflicts.size());
-		for (Iterator iConflicts = bestConflicts.iterator(); iConflicts.hasNext();) {
-			ResolverConstraint constraint = (ResolverConstraint) iConflicts.next();
+		List<ResolverBundle> conflictedBundles = new ArrayList<ResolverBundle>(bestConflicts.size());
+		for (ResolverConstraint constraint : bestConflicts)
 			if (!conflictedBundles.contains(constraint.getBundle()))
 				conflictedBundles.add(constraint.getBundle());
-		}
-		return (ResolverBundle[]) conflictedBundles.toArray(new ResolverBundle[conflictedBundles.size()]);
+		return conflictedBundles.toArray(new ResolverBundle[conflictedBundles.size()]);
 	}
 
 	private boolean getNextCombination(ResolverConstraint[][] multipleSuppliers) {
@@ -750,38 +887,34 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	}
 
 	// only count non-optional conflicts
-	private int getConflictCount(ArrayList conflicts) {
+	private int getConflictCount(List<ResolverConstraint> conflicts) {
 		if (conflicts == null || conflicts.size() == 0)
 			return 0;
 		int result = 0;
-		for (Iterator iConflicts = conflicts.iterator(); iConflicts.hasNext();)
-			if (!((ResolverConstraint) iConflicts.next()).isOptional())
+		for (ResolverConstraint constraint : conflicts)
+			if (!constraint.isOptional())
 				result += 1;
 		return result;
 	}
 
-	private ArrayList getConflicts(ResolverBundle[] bundles, HashSet packageConstraints, HashSet bundleConstraints) {
+	private List<ResolverConstraint> getConflicts(ResolverBundle[] bundles, Set<String> packageConstraints, Set<String> bundleConstraints) {
 		groupingChecker.clear();
-		ArrayList conflicts = null;
+		List<ResolverConstraint> conflicts = null;
 		for (int i = 0; i < bundles.length; i++)
 			conflicts = addConflicts(bundles[i], packageConstraints, bundleConstraints, conflicts);
 		return conflicts;
 	}
 
-	private ArrayList addConflicts(ResolverBundle bundle, HashSet packageConstraints, HashSet bundleConstraints, ArrayList conflicts) {
-		boolean foundConflict = false;
+	private List<ResolverConstraint> addConflicts(ResolverBundle bundle, Set<String> packageConstraints, Set<String> bundleConstraints, List<ResolverConstraint> conflicts) {
 		BundleConstraint[] requires = bundle.getRequires();
 		for (int i = 0; i < requires.length; i++) {
 			ResolverBundle selectedSupplier = (ResolverBundle) requires[i].getSelectedSupplier();
 			PackageRoots[][] conflict = selectedSupplier == null ? null : groupingChecker.isConsistent(bundle, selectedSupplier);
 			if (conflict != null) {
 				addConflictNames(conflict, packageConstraints, bundleConstraints);
-				if (!foundConflict) {
-					if (conflicts == null)
-						conflicts = new ArrayList(1);
-					conflicts.add(requires[i]);
-					foundConflict = !requires[i].isOptional(); // only record the conflicts upto the first non-optional
-				}
+				if (conflicts == null)
+					conflicts = new ArrayList<ResolverConstraint>(1);
+				conflicts.add(requires[i]);
 			}
 		}
 		ResolverImport[] imports = bundle.getImportPackages();
@@ -790,11 +923,24 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			PackageRoots[][] conflict = selectedSupplier == null ? null : groupingChecker.isConsistent(bundle, selectedSupplier);
 			if (conflict != null) {
 				addConflictNames(conflict, packageConstraints, bundleConstraints);
-				if (!foundConflict) {
+				if (conflicts == null)
+					conflicts = new ArrayList<ResolverConstraint>(1);
+				conflicts.add(imports[i]);
+			}
+		}
+
+		GenericConstraint[] genericRequires = bundle.getGenericRequires();
+		for (GenericConstraint capabilityRequirement : genericRequires) {
+			VersionSupplier[] suppliers = capabilityRequirement.getMatchingCapabilities();
+			if (suppliers == null)
+				continue;
+			for (VersionSupplier supplier : suppliers) {
+				PackageRoots[][] conflict = groupingChecker.isConsistent(bundle, (GenericCapability) supplier);
+				if (conflict != null) {
+					addConflictNames(conflict, packageConstraints, bundleConstraints);
 					if (conflicts == null)
-						conflicts = new ArrayList(1);
-					conflicts.add(imports[i]);
-					foundConflict = !imports[i].isOptional(); // only record the conflicts upto the first non-optional
+						conflicts = new ArrayList<ResolverConstraint>(1);
+					conflicts.add(capabilityRequirement);
 				}
 			}
 		}
@@ -802,7 +948,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	}
 
 	// records the conflict names we can use to scope down the list of multiple suppliers
-	private void addConflictNames(PackageRoots[][] conflict, HashSet packageConstraints, HashSet bundleConstraints) {
+	private void addConflictNames(PackageRoots[][] conflict, Set<String> packageConstraints, Set<String> bundleConstraints) {
 		if (packageConstraints == null || bundleConstraints == null)
 			return;
 		for (int i = 0; i < conflict.length; i++) {
@@ -827,61 +973,69 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 
 	// get a list of resolver constraints that have multiple suppliers
 	// a 2 demensional array is used each entry is a list of identical constraints that have identical suppliers.
-	private ResolverConstraint[][] getMultipleSuppliers(ResolverBundle[] bundles, HashSet packageConstraints, HashSet bundleConstraints) {
-		ArrayList multipleImportSupplierList = new ArrayList(1);
-		ArrayList multipleRequireSupplierList = new ArrayList(1);
-		for (int i = 0; i < bundles.length; i++) {
-			BundleConstraint[] requires = bundles[i].getRequires();
-			for (int j = 0; j < requires.length; j++)
-				if (requires[j].getNumPossibleSuppliers() > 1)
-					multipleRequireSupplierList.add(requires[j]);
-			ResolverImport[] imports = bundles[i].getImportPackages();
-			for (int j = 0; j < imports.length; j++) {
-				if (imports[j].getNumPossibleSuppliers() > 1) {
-					Integer eeProfile = (Integer) ((ResolverExport) imports[j].getSelectedSupplier()).getExportPackageDescription().getDirective(ExportPackageDescriptionImpl.EQUINOX_EE);
+	private ResolverConstraint[][] getMultipleSuppliers(ResolverBundle[] bundles, Set<String> packageConstraints, Set<String> bundleConstraints) {
+		List<ResolverImport> multipleImportSupplierList = new ArrayList<ResolverImport>(1);
+		List<BundleConstraint> multipleRequireSupplierList = new ArrayList<BundleConstraint>(1);
+		List<GenericConstraint> multipleGenericSupplierList = new ArrayList<GenericConstraint>(1);
+		for (ResolverBundle bundle : bundles) {
+			BundleConstraint[] requires = bundle.getRequires();
+			for (BundleConstraint require : requires)
+				if (require.getNumPossibleSuppliers() > 1)
+					multipleRequireSupplierList.add(require);
+			ResolverImport[] imports = bundle.getImportPackages();
+			for (ResolverImport importPkg : imports) {
+				if (importPkg.getNumPossibleSuppliers() > 1) {
+					Integer eeProfile = (Integer) ((ResolverExport) importPkg.getSelectedSupplier()).getExportPackageDescription().getDirective(ExportPackageDescriptionImpl.EQUINOX_EE);
 					if (eeProfile.intValue() < 0) {
 						// this is a normal package; always add it
-						multipleImportSupplierList.add(imports[j]);
+						multipleImportSupplierList.add(importPkg);
 					} else {
-						// this is a system bunde export
+						// this is a system bundle export
 						// If other exporters of this package also require the system bundle
 						// then this package does not need to be added to the mix
 						// this is an optimization for bundles like org.eclipse.xerces
 						// that export lots of packages also exported by the system bundle on J2SE 1.4
-						VersionSupplier[] suppliers = imports[j].getPossibleSuppliers();
+						VersionSupplier[] suppliers = importPkg.getPossibleSuppliers();
 						for (int suppliersIndex = 1; suppliersIndex < suppliers.length; suppliersIndex++) {
 							Integer ee = (Integer) ((ResolverExport) suppliers[suppliersIndex]).getExportPackageDescription().getDirective(ExportPackageDescriptionImpl.EQUINOX_EE);
 							if (ee.intValue() >= 0)
 								continue;
 							if (((ResolverExport) suppliers[suppliersIndex]).getExporter().getRequire(getSystemBundle()) == null)
 								if (((ResolverExport) suppliers[suppliersIndex]).getExporter().getRequire(Constants.SYSTEM_BUNDLE_SYMBOLICNAME) == null) {
-									multipleImportSupplierList.add(imports[j]);
+									multipleImportSupplierList.add(importPkg);
 									break;
 								}
 						}
 					}
 				}
 			}
+			GenericConstraint[] genericRequires = bundle.getGenericRequires();
+			for (GenericConstraint genericRequire : genericRequires)
+				if (genericRequire.getNumPossibleSuppliers() > 1 && genericRequire.supplierHasUses())
+					multipleGenericSupplierList.add(genericRequire);
 		}
-		ArrayList results = new ArrayList();
-		if (multipleImportSupplierList.size() + multipleRequireSupplierList.size() > MAX_MULTIPLE_SUPPLIERS_MERGE) {
+		List<ResolverConstraint[]> results = new ArrayList<ResolverConstraint[]>();
+		if (multipleImportSupplierList.size() + multipleRequireSupplierList.size() + multipleGenericSupplierList.size() > MAX_MULTIPLE_SUPPLIERS_MERGE) {
 			// we have hit a max on the multiple suppliers in the lists without merging.
 			// first merge the identical constraints that have identical suppliers
-			HashMap multipleImportSupplierMaps = new HashMap(1);
-			for (Iterator iMultipleImportSuppliers = multipleImportSupplierList.iterator(); iMultipleImportSuppliers.hasNext();)
-				addMutipleSupplierConstraint(multipleImportSupplierMaps, (ResolverConstraint) iMultipleImportSuppliers.next());
-			HashMap multipleRequireSupplierMaps = new HashMap(1);
-			for (Iterator iMultipleRequireSuppliers = multipleRequireSupplierList.iterator(); iMultipleRequireSuppliers.hasNext();)
-				addMutipleSupplierConstraint(multipleRequireSupplierMaps, (ResolverConstraint) iMultipleRequireSuppliers.next());
+			Map<String, List<List<ResolverConstraint>>> multipleImportSupplierMaps = new HashMap<String, List<List<ResolverConstraint>>>();
+			for (ResolverImport importPkg : multipleImportSupplierList)
+				addMutipleSupplierConstraint(multipleImportSupplierMaps, importPkg, importPkg.getName());
+			Map<String, List<List<ResolverConstraint>>> multipleRequireSupplierMaps = new HashMap<String, List<List<ResolverConstraint>>>();
+			for (BundleConstraint requireBundle : multipleRequireSupplierList)
+				addMutipleSupplierConstraint(multipleRequireSupplierMaps, requireBundle, requireBundle.getName());
+			Map<String, List<List<ResolverConstraint>>> multipleGenericSupplierMaps = new HashMap<String, List<List<ResolverConstraint>>>();
+			for (GenericConstraint genericRequire : multipleGenericSupplierList)
+				addMutipleSupplierConstraint(multipleGenericSupplierMaps, genericRequire, genericRequire.getNameSpace());
 			addMergedSuppliers(results, multipleImportSupplierMaps);
 			addMergedSuppliers(results, multipleRequireSupplierMaps);
+			addMergedSuppliers(results, multipleGenericSupplierMaps);
 			// check the results to see if we have reduced the number enough
 			if (results.size() > MAX_MULTIPLE_SUPPLIERS_MERGE && packageConstraints != null && bundleConstraints != null) {
 				// we still have too big of a list; filter out constraints that are not in conflict
-				Iterator iResults = results.iterator();
-				results = new ArrayList();
-				while (iResults.hasNext()) {
-					ResolverConstraint[] constraints = (ResolverConstraint[]) iResults.next();
+				List<ResolverConstraint[]> tooBig = results;
+				results = new ArrayList<ResolverConstraint[]>();
+				for (ResolverConstraint[] constraints : tooBig) {
 					ResolverConstraint constraint = constraints.length > 0 ? constraints[0] : null;
 					if (constraint instanceof ResolverImport) {
 						if (packageConstraints.contains(constraint.getName()))
@@ -894,45 +1048,45 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			}
 		} else {
 			// the size is acceptable; just copy the lists as-is
-			for (Iterator iMultipleImportSuppliers = multipleImportSupplierList.iterator(); iMultipleImportSuppliers.hasNext();)
-				results.add(new ResolverConstraint[] {(ResolverConstraint) iMultipleImportSuppliers.next()});
-			for (Iterator iMultipleRequireSuppliers = multipleRequireSupplierList.iterator(); iMultipleRequireSuppliers.hasNext();)
-				results.add(new ResolverConstraint[] {(ResolverConstraint) iMultipleRequireSuppliers.next()});
+			for (ResolverConstraint constraint : multipleImportSupplierList)
+				results.add(new ResolverConstraint[] {constraint});
+			for (ResolverConstraint constraint : multipleRequireSupplierList)
+				results.add(new ResolverConstraint[] {constraint});
+			for (ResolverConstraint constraint : multipleGenericSupplierList)
+				results.add(new ResolverConstraint[] {constraint});
+
 		}
-		return (ResolverConstraint[][]) results.toArray(new ResolverConstraint[results.size()][]);
+		return results.toArray(new ResolverConstraint[results.size()][]);
 	}
 
 	String getSystemBundle() {
-		Dictionary[] platformProperties = state.getPlatformProperties();
-		String systemBundle = (String) (platformProperties.length == 0 ? null : platformProperties[0].get(Constants.STATE_SYSTEM_BUNDLE));
+		Dictionary<?, ?>[] platformProperties = state.getPlatformProperties();
+		String systemBundle = platformProperties.length == 0 ? null : (String) platformProperties[0].get(Constants.STATE_SYSTEM_BUNDLE);
 		if (systemBundle == null)
 			systemBundle = Constants.getInternalSymbolicName();
 		return systemBundle;
 	}
 
-	private void addMergedSuppliers(ArrayList mergedSuppliers, HashMap constraints) {
-		for (Iterator iConstraints = constraints.values().iterator(); iConstraints.hasNext();) {
-			ArrayList mergedConstraintLists = (ArrayList) iConstraints.next();
-			for (Iterator mergedLists = mergedConstraintLists.iterator(); mergedLists.hasNext();) {
-				ArrayList constraintList = (ArrayList) mergedLists.next();
+	private void addMergedSuppliers(List<ResolverConstraint[]> mergedSuppliers, Map<String, List<List<ResolverConstraint>>> constraints) {
+		for (List<List<ResolverConstraint>> mergedConstraintLists : constraints.values()) {
+			for (List<ResolverConstraint> constraintList : mergedConstraintLists) {
 				mergedSuppliers.add(constraintList.toArray(new ResolverConstraint[constraintList.size()]));
 			}
 		}
 	}
 
-	private void addMutipleSupplierConstraint(HashMap constraints, ResolverConstraint constraint) {
-		ArrayList mergedConstraintLists = (ArrayList) constraints.get(constraint.getName());
+	private void addMutipleSupplierConstraint(Map<String, List<List<ResolverConstraint>>> constraints, ResolverConstraint constraint, String key) {
+		List<List<ResolverConstraint>> mergedConstraintLists = constraints.get(key);
 		if (mergedConstraintLists == null) {
-			mergedConstraintLists = new ArrayList(1);
-			ArrayList constraintList = new ArrayList(1);
+			mergedConstraintLists = new ArrayList<List<ResolverConstraint>>(0);
+			List<ResolverConstraint> constraintList = new ArrayList<ResolverConstraint>(1);
 			constraintList.add(constraint);
 			mergedConstraintLists.add(constraintList);
-			constraints.put(constraint.getName(), mergedConstraintLists);
+			constraints.put(key, mergedConstraintLists);
 			return;
 		}
-		for (Iterator mergedLists = mergedConstraintLists.iterator(); mergedLists.hasNext();) {
-			ArrayList constraintList = (ArrayList) mergedLists.next();
-			ResolverConstraint mergedConstraint = (ResolverConstraint) constraintList.get(0);
+		for (List<ResolverConstraint> constraintList : mergedConstraintLists) {
+			ResolverConstraint mergedConstraint = constraintList.get(0);
 			VersionSupplier[] suppliers1 = constraint.getPossibleSuppliers();
 			VersionSupplier[] suppliers2 = mergedConstraint.getPossibleSuppliers();
 			if (suppliers1.length != suppliers2.length)
@@ -943,17 +1097,17 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			constraintList.add(constraint);
 			return;
 		}
-		ArrayList constraintList = new ArrayList(1);
+		List<ResolverConstraint> constraintList = new ArrayList<ResolverConstraint>(1);
 		constraintList.add(constraint);
 		mergedConstraintLists.add(constraintList);
 	}
 
-	private void checkCycle(ArrayList cycle) {
+	private void checkCycle(List<ResolverBundle> cycle) {
 		int cycleSize = cycle.size();
 		if (cycleSize == 0)
 			return;
-		cycleLoop: for (Iterator iCycle = cycle.iterator(); iCycle.hasNext();) {
-			ResolverBundle cycleBundle = (ResolverBundle) iCycle.next();
+		cycleLoop: for (Iterator<ResolverBundle> iCycle = cycle.iterator(); iCycle.hasNext();) {
+			ResolverBundle cycleBundle = iCycle.next();
 			if (!cycleBundle.isResolvable()) {
 				iCycle.remove(); // remove this bundle from the list of bundles that need re-resolved
 				continue cycleLoop;
@@ -971,7 +1125,6 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 				}
 				if (!imports[j].isDynamic() && !imports[j].isOptional() && imports[j].getSelectedSupplier() == null) {
 					cycleBundle.setResolvable(false);
-					cycleBundle.clearRefs();
 					state.addResolverError(imports[j].getVersionConstraint().getBundle(), ResolverError.MISSING_IMPORT_PACKAGE, imports[j].getVersionConstraint().toString(), imports[j].getVersionConstraint());
 					iCycle.remove();
 					continue cycleLoop;
@@ -981,79 +1134,37 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		if (cycle.size() != cycleSize) {
 			//we removed an un-resolvable bundle; must re-resolve remaining cycle
 			for (int i = 0; i < cycle.size(); i++) {
-				ResolverBundle cycleBundle = (ResolverBundle) cycle.get(i);
+				ResolverBundle cycleBundle = cycle.get(i);
 				cycleBundle.clearWires();
-				cycleBundle.clearRefs();
 			}
-			ArrayList innerCycle = new ArrayList(cycle.size());
+			List<ResolverBundle> innerCycle = new ArrayList<ResolverBundle>(cycle.size());
 			for (int i = 0; i < cycle.size(); i++)
-				resolveBundle((ResolverBundle) cycle.get(i), innerCycle);
+				resolveBundle(cycle.get(i), innerCycle);
 			checkCycle(innerCycle);
 		} else {
 			for (int i = 0; i < cycle.size(); i++) {
 				if (DEBUG || DEBUG_CYCLES)
 					ResolverImpl.log("Pushing " + cycle.get(i) + " to RESOLVED"); //$NON-NLS-1$ //$NON-NLS-2$
-				setBundleResolved((ResolverBundle) cycle.get(i));
+				setBundleResolved(cycle.get(i));
 			}
 		}
 	}
 
-	private boolean selectSingletons(ResolverBundle[] bundles, ArrayList rejectedSingletons) {
-		if (developmentMode)
-			return false; // do no want to unresolve singletons in development mode
-		boolean result = false;
-		for (int i = 0; i < bundles.length; i++) {
-			BundleDescription bundleDesc = bundles[i].getBundle();
-			if (!bundleDesc.isSingleton() || !bundleDesc.isResolved() || rejectedSingletons.contains(bundleDesc))
-				continue;
-			Object[] sameName = resolverBundles.get(bundleDesc.getName());
-			if (sameName.length > 1) { // Need to make a selection based off of num dependents
-				for (int j = 0; j < sameName.length; j++) {
-					BundleDescription sameNameDesc = ((VersionSupplier) sameName[j]).getBundle();
-					ResolverBundle sameNameBundle = (ResolverBundle) sameName[j];
-					if (sameName[j] == bundles[i] || !sameNameDesc.isSingleton() || !sameNameDesc.isResolved() || rejectedSingletons.contains(sameNameDesc))
-						continue; // Ignore the bundle we are selecting, non-singletons, and non-resolved
-					result = true;
-					boolean rejectedPolicy = selectionPolicy != null ? selectionPolicy.compare(sameNameDesc, bundleDesc) < 0 : sameNameDesc.getVersion().compareTo(bundleDesc.getVersion()) > 0;
-					int sameNameRefs = sameNameBundle.getRefs();
-					int curRefs = bundles[i].getRefs();
-					// a bundle is always rejected if another bundle has more references to it;
-					// otherwise a bundle is rejected based on the selection policy (version) only if the number of references are equal
-					if ((sameNameRefs == curRefs && rejectedPolicy) || sameNameRefs > curRefs) {
-						// this bundle is not selected; add it to the rejected list
-						if (!rejectedSingletons.contains(bundles[i].getBundle()))
-							rejectedSingletons.add(bundles[i].getBundle());
-						break;
-					}
-					// we did not select the sameNameDesc; add the bundle to the rejected list
-					if (!rejectedSingletons.contains(sameNameDesc))
-						rejectedSingletons.add(sameNameDesc);
-				}
-			}
-		}
-		// clear the refs; we don't care about the refs after singlton selection
-		for (int i = 0; i < bundles.length; i++)
-			bundles[i].clearRefs();
-		// unresolve the rejected singletons
-		for (Iterator rejects = rejectedSingletons.iterator(); rejects.hasNext();)
-			unresolveBundle((ResolverBundle) bundleMapping.get(rejects.next()), false);
-		// reorder exports and bundles after unresolving the bundles
-		resolverExports.reorder();
-		resolverBundles.reorder();
-		resolverGenerics.reorder();
-		return result;
+	@SuppressWarnings("unchecked")
+	static Collection<BundleCapability> asCapabilities(Collection<? extends BundleCapability> capabilities) {
+		return (Collection<BundleCapability>) capabilities;
 	}
 
 	private void resolveFragment(ResolverBundle fragment) {
 		if (!fragment.isFragment())
 			return;
 		if (fragment.getHost().getNumPossibleSuppliers() > 0)
-			if (!developmentMode || state.getResolverErrors(fragment.getBundle()).length == 0)
+			if (!developmentMode || state.getResolverErrors(fragment.getBundleDescription()).length == 0)
 				setBundleResolved(fragment);
 	}
 
 	// This method will attempt to resolve the supplied bundle and any bundles that it is dependent on
-	private boolean resolveBundle(ResolverBundle bundle, ArrayList cycle) {
+	private boolean resolveBundle(ResolverBundle bundle, List<ResolverBundle> cycle) {
 		if (bundle.isFragment())
 			return false;
 		if (!bundle.isResolvable()) {
@@ -1091,7 +1202,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					state.addResolverError(genericRequires[i].getVersionConstraint().getBundle(), ResolverError.MISSING_GENERIC_CAPABILITY, genericRequires[i].getVersionConstraint().toString(), genericRequires[i].getVersionConstraint());
 					if (genericRequires[i].isFromFragment()) {
 						if (!developmentMode) // only detach fragments when not in devmode
-							resolverExports.remove(bundle.detachFragment((ResolverBundle) bundleMapping.get(genericRequires[i].getVersionConstraint().getBundle()), null));
+							bundle.detachFragment(bundleMapping.get(genericRequires[i].getVersionConstraint().getBundle()), null);
 						continue;
 					}
 					if (!developmentMode) {
@@ -1114,7 +1225,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					// If the require has failed to resolve and it is from a fragment, then remove the fragment from the host
 					if (requires[i].isFromFragment()) {
 						if (!developmentMode) // only detach fragments when not in devmode
-							resolverExports.remove(bundle.detachFragment((ResolverBundle) bundleMapping.get(requires[i].getVersionConstraint().getBundle()), requires[i]));
+							bundle.detachFragment(bundleMapping.get(requires[i].getVersionConstraint().getBundle()), requires[i]);
 						continue;
 					}
 					if (!developmentMode) {
@@ -1138,7 +1249,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 					state.addResolverError(imports[i].getVersionConstraint().getBundle(), ResolverError.MISSING_IMPORT_PACKAGE, imports[i].getVersionConstraint().toString(), imports[i].getVersionConstraint());
 					if (imports[i].isFromFragment()) {
 						if (!developmentMode) // only detach fragments when not in devmode
-							resolverExports.remove(bundle.detachFragment((ResolverBundle) bundleMapping.get(imports[i].getVersionConstraint().getBundle()), imports[i]));
+							bundle.detachFragment(bundleMapping.get(imports[i].getVersionConstraint().getBundle()), imports[i]);
 						continue;
 					}
 					if (!developmentMode) {
@@ -1154,7 +1265,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		checkFragmentConstraints(bundle);
 
 		// do some extra checking when in development mode to see if other resolver error occurred
-		if (developmentMode && !failed && state.getResolverErrors(bundle.getBundle()).length > 0)
+		if (developmentMode && !failed && state.getResolverErrors(bundle.getBundleDescription()).length > 0)
 			failed = true;
 
 		// Need to check that all mandatory imports are wired. If they are then
@@ -1180,75 +1291,79 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		// they have do not conflict with the constraints resolved to by the host
 		ResolverBundle[] fragments = bundle.getFragments();
 		for (int i = 0; i < fragments.length; i++) {
-			BundleDescription fragment = fragments[i].getBundle();
+			BundleDescription fragment = fragments[i].getBundleDescription();
 			if (bundle.constraintsConflict(fragment, fragment.getImportPackages(), fragment.getRequiredBundles(), fragment.getGenericRequires()) && !developmentMode)
 				// found some conflicts; detach the fragment
-				resolverExports.remove(bundle.detachFragment(fragments[i], null));
+				bundle.detachFragment(fragments[i], null);
 		}
 	}
 
-	private boolean resolveGenericReq(GenericConstraint constraint, ArrayList cycle) {
-		if (DEBUG_REQUIRES)
+	private boolean resolveGenericReq(GenericConstraint constraint, List<ResolverBundle> cycle) {
+		if (DEBUG_GENERICS)
 			ResolverImpl.log("Trying to resolve: " + constraint.getBundle() + ", " + constraint.getVersionConstraint()); //$NON-NLS-1$ //$NON-NLS-2$
-		GenericCapability[] matchingCapabilities = constraint.getMatchingCapabilities();
-		if (matchingCapabilities != null) {
-			// Check for unrecorded cyclic dependency
-			for (int i = 0; i < matchingCapabilities.length; i++)
-				if (matchingCapabilities[i].getResolverBundle().getState() == ResolverBundle.RESOLVING)
-					if (!cycle.contains(constraint.getBundle()))
-						cycle.add(constraint.getBundle());
-			if (DEBUG_REQUIRES)
+		VersionSupplier matchingCapability = constraint.getSelectedSupplier();
+		if (matchingCapability != null) {
+			if (!cycle.contains(constraint.getBundle())) {
+				cycle.add(constraint.getBundle());
+				if (DEBUG_CYCLES)
+					ResolverImpl.log("generic cycle: " + constraint.getBundle() + " -> " + constraint.getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			if (DEBUG_GENERICS)
 				ResolverImpl.log("  - already wired"); //$NON-NLS-1$
 			return true; // Already wired (due to grouping dependencies) so just return
 		}
-		Object[] capabilities = resolverGenerics.get(constraint.getVersionConstraint().getName());
+		VersionHashMap<GenericCapability> namespace = resolverGenerics.get(constraint.getNameSpace());
+		String name = constraint.getName();
+		List<GenericCapability> capabilities;
+		if (namespace == null)
+			capabilities = Collections.EMPTY_LIST;
+		else
+			capabilities = name == null || "*".equals(name) ? namespace.getAllValues() : namespace.get(name); //$NON-NLS-1$
+		List<GenericCapability> candidates = new ArrayList<GenericCapability>(capabilities);
+		List<BundleCapability> genCapabilities = new ArrayList<BundleCapability>(candidates.size());
+		// Must remove candidates that do not match before calling hooks.
+		for (Iterator<GenericCapability> iCandidates = candidates.iterator(); iCandidates.hasNext();) {
+			GenericCapability capability = iCandidates.next();
+			if (!constraint.isSatisfiedBy(capability)) {
+				iCandidates.remove();
+			} else {
+				genCapabilities.add(capability.getCapability());
+			}
+		}
+		if (hook != null)
+			hook.filterMatches(constraint.getRequirement(), asCapabilities(new ArrayMap<BundleCapability, GenericCapability>(genCapabilities, candidates)));
 		boolean result = false;
-		for (int i = 0; i < capabilities.length; i++) {
-			GenericCapability capability = (GenericCapability) capabilities[i];
+		// We are left with only capabilities that satisfy the constraint.
+		for (GenericCapability capability : candidates) {
 			if (DEBUG_GENERICS)
 				ResolverImpl.log("CHECKING GENERICS: " + capability.getBaseDescription()); //$NON-NLS-1$
-			// Check if capability matches
-			if (constraint.isSatisfiedBy(capability)) {
-				capability.getResolverBundle().addRef(constraint.getBundle());
-				if (result && (((GenericSpecification) constraint.getVersionConstraint()).getResolution() & GenericSpecification.RESOLUTION_MULTIPLE) == 0)
-					continue; // found a match already and this is not a multiple constraint
-				constraint.setMatchingCapability(capability); // Wire to the capability
-				if (constraint.getBundle() == capability.getResolverBundle()) {
-					result = true; // Wired to ourselves
-					continue;
-				}
-				VersionSupplier[] capabilityHosts = capability.isFromFragment() ? capability.getResolverBundle().getHost().getPossibleSuppliers() : new ResolverBundle[] {capability.getResolverBundle()};
-				boolean foundResolvedMatch = false;
-				for (int j = 0; capabilityHosts != null && j < capabilityHosts.length; j++) {
-					ResolverBundle capabilitySupplier = (ResolverBundle) capabilityHosts[j];
-					if (capabilitySupplier == constraint.getBundle()) {
-						// the capability is from a fragment attached to this host do not recursively resolve the host again
-						foundResolvedMatch = true;
-						continue;
-					}
-					// if in dev mode then allow a constraint to resolve to an unresolved bundle
-					if (capabilitySupplier.getState() == ResolverBundle.RESOLVED || (resolveBundle(capabilitySupplier, cycle) || developmentMode)) {
-						foundResolvedMatch |= !capability.isFromFragment() ? true : capability.getResolverBundle().getHost().getPossibleSuppliers() != null;
-						// Check cyclic dependencies
-						if (capabilitySupplier.getState() == ResolverBundle.RESOLVING)
-							if (!cycle.contains(capabilitySupplier))
-								cycle.add(capabilitySupplier);
-					}
-				}
-				if (!foundResolvedMatch) {
-					constraint.removeMatchingCapability(capability);
-					continue; // constraint hasn't resolved
-				}
-				if (DEBUG_GENERICS)
-					ResolverImpl.log("Found match: " + capability.getBaseDescription() + ". Wiring"); //$NON-NLS-1$ //$NON-NLS-2$
-				result = true;
+
+			// first add the possible supplier; this is done before resolving the supplier bundle to prevent endless cycle loops.
+			constraint.addPossibleSupplier(capability); // Wire to the capability
+			if (constraint.getBundle() == capability.getResolverBundle()) {
+				result = true; // Wired to ourselves
+				continue;
+			}
+			ResolverBundle supplier = capability.getResolverBundle();
+			// if in dev mode then allow a constraint to resolve to an unresolved bundle
+			if (supplier.getState() == ResolverBundle.RESOLVED || (resolveBundle(supplier, cycle) || developmentMode)) {
+				// Check cyclic dependencies
+				if (supplier.getState() == ResolverBundle.RESOLVING)
+					if (!cycle.contains(supplier))
+						cycle.add(supplier);
+			} else {
+				constraint.removePossibleSupplier(capability);
+				continue; // constraint hasn't resolved
 			}
+			if (DEBUG_GENERICS)
+				ResolverImpl.log("Found match: " + capability.getBaseDescription() + ". Wiring"); //$NON-NLS-1$ //$NON-NLS-2$
+			result = true;
 		}
-		return result ? true : (((GenericSpecification) constraint.getVersionConstraint()).getResolution() & GenericSpecification.RESOLUTION_OPTIONAL) != 0;
+		return result ? true : constraint.isOptional();
 	}
 
 	// Resolve the supplied import. Returns true if the import can be resolved, false otherwise
-	private boolean resolveRequire(BundleConstraint req, ArrayList cycle) {
+	private boolean resolveRequire(BundleConstraint req, List<ResolverBundle> cycle) {
 		if (DEBUG_REQUIRES)
 			ResolverImpl.log("Trying to resolve: " + req.getBundle() + ", " + req.getVersionConstraint()); //$NON-NLS-1$ //$NON-NLS-2$
 		if (req.getSelectedSupplier() != null) {
@@ -1262,39 +1377,50 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 				ResolverImpl.log("  - already wired"); //$NON-NLS-1$
 			return true; // Already wired (due to grouping dependencies) so just return
 		}
-		Object[] bundles = resolverBundles.get(req.getVersionConstraint().getName());
+		List<ResolverBundle> bundles = resolverBundles.get(req.getVersionConstraint().getName());
+		List<ResolverBundle> candidates = new ArrayList<ResolverBundle>(bundles);
+		List<BundleCapability> capabilities = new ArrayList<BundleCapability>(candidates.size());
+		// Must remove candidates that do not match before calling hooks.
+		for (Iterator<ResolverBundle> iCandidates = candidates.iterator(); iCandidates.hasNext();) {
+			ResolverBundle bundle = iCandidates.next();
+			if (!req.isSatisfiedBy(bundle)) {
+				iCandidates.remove();
+			} else {
+				capabilities.add(bundle.getCapability());
+			}
+		}
+		if (hook != null)
+			hook.filterMatches(req.getRequirement(), asCapabilities(new ArrayMap<BundleCapability, ResolverBundle>(capabilities, candidates)));
+		// We are left with only capabilities that satisfy the require bundle.
 		boolean result = false;
-		for (int i = 0; i < bundles.length; i++) {
-			ResolverBundle bundle = (ResolverBundle) bundles[i];
+		for (ResolverBundle bundle : candidates) {
 			if (DEBUG_REQUIRES)
-				ResolverImpl.log("CHECKING: " + bundle.getBundle()); //$NON-NLS-1$
-			// Check if export matches
-			if (req.isSatisfiedBy(bundle)) {
-				bundle.addRef(req.getBundle());
-				// first add the possible supplier; this is done before resolving the supplier bundle to prevent endless cycle loops.
-				req.addPossibleSupplier(bundle);
-				if (req.getBundle() != bundle) {
-					// if in dev mode then allow a constraint to resolve to an unresolved bundle
-					if (bundle.getState() != ResolverBundle.RESOLVED && !resolveBundle(bundle, cycle) && !developmentMode) {
-						req.removePossibleSupplier(bundle);
-						continue; // Bundle hasn't resolved
-					}
-				}
-				// Check cyclic dependencies
-				if (req.getBundle() != bundle) {
-					if (bundle.getState() == ResolverBundle.RESOLVING)
-						// If the bundle is RESOLVING, we have a cyclic dependency
-						if (!cycle.contains(req.getBundle())) {
-							cycle.add(req.getBundle());
-							if (DEBUG_CYCLES)
-								ResolverImpl.log("require-bundle cycle: " + req.getBundle() + " -> " + req.getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$
-						}
+				ResolverImpl.log("CHECKING: " + bundle.getBundleDescription()); //$NON-NLS-1$
+
+			// first add the possible supplier; this is done before resolving the supplier bundle to prevent endless cycle loops.
+			req.addPossibleSupplier(bundle);
+			if (req.getBundle() != bundle) {
+				// if in dev mode then allow a constraint to resolve to an unresolved bundle
+				if (bundle.getState() != ResolverBundle.RESOLVED && !resolveBundle(bundle, cycle) && !developmentMode) {
+					req.removePossibleSupplier(bundle);
+					continue; // Bundle hasn't resolved
 				}
-				if (DEBUG_REQUIRES)
-					ResolverImpl.log("Found match: " + bundle.getBundle() + ". Wiring"); //$NON-NLS-1$ //$NON-NLS-2$
-				result = true;
 			}
+			// Check cyclic dependencies
+			if (req.getBundle() != bundle) {
+				if (bundle.getState() == ResolverBundle.RESOLVING)
+					// If the bundle is RESOLVING, we have a cyclic dependency
+					if (!cycle.contains(req.getBundle())) {
+						cycle.add(req.getBundle());
+						if (DEBUG_CYCLES)
+							ResolverImpl.log("require-bundle cycle: " + req.getBundle() + " -> " + req.getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$
+					}
+			}
+			if (DEBUG_REQUIRES)
+				ResolverImpl.log("Found match: " + bundle.getBundleDescription() + ". Wiring"); //$NON-NLS-1$ //$NON-NLS-2$
+			result = true;
 		}
+
 		if (result || req.isOptional())
 			return true; // If the req is optional then just return true
 
@@ -1302,7 +1428,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	}
 
 	// Resolve the supplied import. Returns true if the import can be resolved, false otherwise
-	private boolean resolveImport(ResolverImport imp, ArrayList cycle) {
+	private boolean resolveImport(ResolverImport imp, List<ResolverBundle> cycle) {
 		if (DEBUG_IMPORTS)
 			ResolverImpl.log("Trying to resolve: " + imp.getBundle() + ", " + imp.getName()); //$NON-NLS-1$ //$NON-NLS-2$
 		if (imp.getSelectedSupplier() != null) {
@@ -1310,7 +1436,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			if (!cycle.contains(imp.getBundle())) {
 				cycle.add(imp.getBundle());
 				if (DEBUG_CYCLES)
-					ResolverImpl.log("import-package cycle: " + imp.getBundle() + " -> " + imp.getSelectedSupplier() + " from " + imp.getSelectedSupplier().getBundle()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					ResolverImpl.log("import-package cycle: " + imp.getBundle() + " -> " + imp.getSelectedSupplier() + " from " + imp.getSelectedSupplier().getBundleDescription()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 			if (DEBUG_IMPORTS)
 				ResolverImpl.log("  - already wired"); //$NON-NLS-1$
@@ -1318,53 +1444,63 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		}
 		boolean result = false;
 		ResolverExport[] substitutableExps = imp.getBundle().getExports(imp.getName());
-		Object[] exports = resolverExports.get(imp.getName());
-		for (int i = 0; i < exports.length; i++) {
-			ResolverExport export = (ResolverExport) exports[i];
+		List<ResolverExport> exports = resolverExports.get(imp.getName());
+		List<ResolverExport> candidates = new ArrayList<ResolverExport>(exports);
+		List<BundleCapability> capabilities = new ArrayList<BundleCapability>(candidates.size());
+		// Must remove candidates that do not match before calling hooks.
+		for (Iterator<ResolverExport> iCandidates = candidates.iterator(); iCandidates.hasNext();) {
+			ResolverExport export = iCandidates.next();
+			if (!imp.isSatisfiedBy(export)) {
+				iCandidates.remove();
+			} else {
+				capabilities.add(export.getCapability());
+			}
+		}
+		if (hook != null)
+			hook.filterMatches(imp.getRequirement(), asCapabilities(new ArrayMap<BundleCapability, ResolverExport>(capabilities, candidates)));
+		// We are left with only capabilities that satisfy the import.
+		for (ResolverExport export : candidates) {
 			if (DEBUG_IMPORTS)
-				ResolverImpl.log("CHECKING: " + export.getExporter().getBundle() + ", " + export.getName()); //$NON-NLS-1$ //$NON-NLS-2$
-			// Check if export matches
-			if (imp.isSatisfiedBy(export)) {
-				int originalState = export.getExporter().getState();
-				if (imp.isDynamic() && originalState != ResolverBundle.RESOLVED)
-					continue; // Must not attempt to resolve an exporter when dynamic
-				if (imp.getSelectedSupplier() != null && ((ResolverExport) imp.getSelectedSupplier()).getExporter() == imp.getBundle())
-					break; // We wired to ourselves; nobody else matters
-				export.getExporter().addRef(imp.getBundle());
-				// first add the possible supplier; this is done before resolving the supplier bundle to prevent endless cycle loops.
-				imp.addPossibleSupplier(export);
-				if (imp.getBundle() != export.getExporter()) {
-					for (int j = 0; j < substitutableExps.length; j++)
-						if (substitutableExps[j].getSubstitute() == null)
-							substitutableExps[j].setSubstitute(export); // Import wins, drop export
-					// if in dev mode then allow a constraint to resolve to an unresolved bundle
-					if ((originalState != ResolverBundle.RESOLVED && !resolveBundle(export.getExporter(), cycle) && !developmentMode) || export.getSubstitute() != null) {
-						// remove the possible supplier
-						imp.removePossibleSupplier(export);
-						// add back the exports of this package from the importer
-						if (imp.getSelectedSupplier() == null)
-							for (int j = 0; j < substitutableExps.length; j++)
-								if (substitutableExps[j].getSubstitute() == export)
-									substitutableExps[j].setSubstitute(null);
-						continue; // Bundle hasn't resolved || export has not been selected and is unavailable
-					}
-				} else if (export.getSubstitute() != null)
-					continue; // we already found a possible import that satisifies us; our export is dropped
-
-				// Record any cyclic dependencies
-				if (imp.getBundle() != export.getExporter())
-					if (export.getExporter().getState() == ResolverBundle.RESOLVING) {
-						// If the exporter is RESOLVING, we have a cyclic dependency
-						if (!cycle.contains(imp.getBundle())) {
-							cycle.add(imp.getBundle());
-							if (DEBUG_CYCLES)
-								ResolverImpl.log("import-package cycle: " + imp.getBundle() + " -> " + imp.getSelectedSupplier() + " from " + imp.getSelectedSupplier().getBundle()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-						}
+				ResolverImpl.log("CHECKING: " + export.getExporter().getBundleDescription() + ", " + export.getName()); //$NON-NLS-1$ //$NON-NLS-2$
+
+			int originalState = export.getExporter().getState();
+			if (imp.isDynamic() && originalState != ResolverBundle.RESOLVED)
+				continue; // Must not attempt to resolve an exporter when dynamic
+			if (imp.getSelectedSupplier() != null && ((ResolverExport) imp.getSelectedSupplier()).getExporter() == imp.getBundle())
+				break; // We wired to ourselves; nobody else matters
+			// first add the possible supplier; this is done before resolving the supplier bundle to prevent endless cycle loops.
+			imp.addPossibleSupplier(export);
+			if (imp.getBundle() != export.getExporter()) {
+				for (int j = 0; j < substitutableExps.length; j++)
+					if (substitutableExps[j].getSubstitute() == null)
+						substitutableExps[j].setSubstitute(export); // Import wins, drop export
+				// if in dev mode then allow a constraint to resolve to an unresolved bundle
+				if ((originalState != ResolverBundle.RESOLVED && !resolveBundle(export.getExporter(), cycle) && !developmentMode) || export.getSubstitute() != null) {
+					// remove the possible supplier
+					imp.removePossibleSupplier(export);
+					// add back the exports of this package from the importer
+					if (imp.getSelectedSupplier() == null)
+						for (int j = 0; j < substitutableExps.length; j++)
+							if (substitutableExps[j].getSubstitute() == export)
+								substitutableExps[j].setSubstitute(null);
+					continue; // Bundle hasn't resolved || export has not been selected and is unavailable
+				}
+			} else if (export.getSubstitute() != null)
+				continue; // we already found a possible import that satisifies us; our export is dropped
+
+			// Record any cyclic dependencies
+			if (imp.getBundle() != export.getExporter())
+				if (export.getExporter().getState() == ResolverBundle.RESOLVING) {
+					// If the exporter is RESOLVING, we have a cyclic dependency
+					if (!cycle.contains(imp.getBundle())) {
+						cycle.add(imp.getBundle());
+						if (DEBUG_CYCLES)
+							ResolverImpl.log("import-package cycle: " + imp.getBundle() + " -> " + imp.getSelectedSupplier() + " from " + imp.getSelectedSupplier().getBundleDescription()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 					}
-				if (DEBUG_IMPORTS)
-					ResolverImpl.log("Found match: " + export.getExporter() + ". Wiring " + imp.getBundle() + ":" + imp.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				result = true;
-			}
+				}
+			if (DEBUG_IMPORTS)
+				ResolverImpl.log("Found match: " + export.getExporter() + ". Wiring " + imp.getBundle() + ":" + imp.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			result = true;
 		}
 
 		if (result)
@@ -1386,13 +1522,13 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		if (removed || !keepFragsAttached) {
 			// Force the initialization of the bundle, its exports and its capabilities.  This is needed to force proper attachment of fragments.
 			resolverExports.remove(bundle.getExportPackages());
-			resolverGenerics.remove(bundle.getGenericCapabilities());
+			removeGenerics(bundle.getGenericCapabilities());
 			bundle.detachAllFragments();
 			bundle.initialize(false);
 			if (!removed) {
 				// add back the available exports/capabilities
 				resolverExports.put(bundle.getExportPackages());
-				resolverGenerics.put(bundle.getGenericCapabilities());
+				addGenerics(bundle.getGenericCapabilities());
 			}
 		}
 		// TODO unresolvedBundles should be a set; for now only need to do a contains check in devMode.
@@ -1420,7 +1556,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	// Resolves the bundles in the State
 	private void stateResolveBundles(ResolverBundle[] resolvedBundles) {
 		for (int i = 0; i < resolvedBundles.length; i++) {
-			if (!resolvedBundles[i].getBundle().isResolved())
+			if (!resolvedBundles[i].getBundleDescription().isResolved())
 				stateResolveBundle(resolvedBundles[i]);
 		}
 	}
@@ -1435,12 +1571,12 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		BundleConstraint[] requires = rb.getRequires();
 		for (int i = 0; i < requires.length; i++) {
 			ResolverBundle bundle = (ResolverBundle) requires[i].getSelectedSupplier();
-			BaseDescription supplier = bundle == null ? null : bundle.getBundle();
+			BaseDescription supplier = bundle == null ? null : bundle.getBundleDescription();
 			state.resolveConstraint(requires[i].getVersionConstraint(), supplier);
 		}
 		GenericConstraint[] genericRequires = rb.getGenericRequires();
 		for (int i = 0; i < genericRequires.length; i++) {
-			GenericCapability[] matchingCapabilities = genericRequires[i].getMatchingCapabilities();
+			VersionSupplier[] matchingCapabilities = genericRequires[i].getMatchingCapabilities();
 			if (matchingCapabilities == null)
 				state.resolveConstraint(genericRequires[i].getVersionConstraint(), null);
 			else
@@ -1451,18 +1587,18 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 
 	private void stateResolveFragConstraints(ResolverBundle rb) {
 		ResolverBundle host = (ResolverBundle) rb.getHost().getSelectedSupplier();
-		ImportPackageSpecification[] imports = rb.getBundle().getImportPackages();
+		ImportPackageSpecification[] imports = rb.getBundleDescription().getImportPackages();
 		for (int i = 0; i < imports.length; i++) {
 			ResolverImport hostImport = host == null ? null : host.getImport(imports[i].getName());
 			ResolverExport export = (ResolverExport) (hostImport == null ? null : hostImport.getSelectedSupplier());
 			BaseDescription supplier = export == null ? null : export.getExportPackageDescription();
 			state.resolveConstraint(imports[i], supplier);
 		}
-		BundleSpecification[] requires = rb.getBundle().getRequiredBundles();
+		BundleSpecification[] requires = rb.getBundleDescription().getRequiredBundles();
 		for (int i = 0; i < requires.length; i++) {
 			BundleConstraint hostRequire = host == null ? null : host.getRequire(requires[i].getName());
 			ResolverBundle bundle = (ResolverBundle) (hostRequire == null ? null : hostRequire.getSelectedSupplier());
-			BaseDescription supplier = bundle == null ? null : bundle.getBundle();
+			BaseDescription supplier = bundle == null ? null : bundle.getBundleDescription();
 			state.resolveConstraint(requires[i], supplier);
 		}
 	}
@@ -1475,65 +1611,136 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			stateResolveFragConstraints(rb);
 		else
 			stateResolveConstraints(rb);
+
+		// Build up the state wires
+		Map<String, List<StateWire>> stateWires = new HashMap<String, List<StateWire>>();
+
 		// Gather selected exports
 		ResolverExport[] exports = rb.getSelectedExports();
-		ArrayList selectedExports = new ArrayList(exports.length);
+		List<ExportPackageDescription> selectedExports = new ArrayList<ExportPackageDescription>(exports.length);
 		for (int i = 0; i < exports.length; i++) {
 			if (permissionChecker.checkPackagePermission(exports[i].getExportPackageDescription()))
 				selectedExports.add(exports[i].getExportPackageDescription());
 		}
-		ExportPackageDescription[] selectedExportsArray = (ExportPackageDescription[]) selectedExports.toArray(new ExportPackageDescription[selectedExports.size()]);
+		ExportPackageDescription[] selectedExportsArray = selectedExports.toArray(new ExportPackageDescription[selectedExports.size()]);
 
 		// Gather substitute exports
 		ResolverExport[] substituted = rb.getSubstitutedExports();
-		ArrayList substitutedExports = new ArrayList(substituted.length);
+		List<ExportPackageDescription> substitutedExports = new ArrayList<ExportPackageDescription>(substituted.length);
 		for (int i = 0; i < substituted.length; i++) {
 			substitutedExports.add(substituted[i].getExportPackageDescription());
 		}
-		ExportPackageDescription[] substitutedExportsArray = (ExportPackageDescription[]) substitutedExports.toArray(new ExportPackageDescription[substitutedExports.size()]);
+		ExportPackageDescription[] substitutedExportsArray = substitutedExports.toArray(new ExportPackageDescription[substitutedExports.size()]);
 
 		// Gather exports that have been wired to
-		ExportPackageDescription[] exportsWiredToArray = getExportsWiredTo(rb);
+		ExportPackageDescription[] exportsWiredToArray = getExportsWiredTo(rb, stateWires);
 
 		// Gather bundles that have been wired to
 		BundleConstraint[] requires = rb.getRequires();
-		ArrayList bundlesWiredTo = new ArrayList(requires.length);
+		List<BundleDescription> bundlesWiredTo = new ArrayList<BundleDescription>(requires.length);
+		List<StateWire> requireWires = new ArrayList<StateWire>(requires.length);
 		for (int i = 0; i < requires.length; i++)
-			if (requires[i].getSelectedSupplier() != null)
-				bundlesWiredTo.add(requires[i].getSelectedSupplier().getBaseDescription());
-		BundleDescription[] bundlesWiredToArray = (BundleDescription[]) bundlesWiredTo.toArray(new BundleDescription[bundlesWiredTo.size()]);
+			if (requires[i].getSelectedSupplier() != null) {
+				BundleDescription supplier = (BundleDescription) requires[i].getSelectedSupplier().getBaseDescription();
+				bundlesWiredTo.add(supplier);
+				StateWire requireWire = newStateWire(rb.getBundleDescription(), requires[i].getVersionConstraint(), supplier, supplier);
+				requireWires.add(requireWire);
+			}
+		BundleDescription[] bundlesWiredToArray = bundlesWiredTo.toArray(new BundleDescription[bundlesWiredTo.size()]);
+		if (!requireWires.isEmpty())
+			stateWires.put(BundleRevision.BUNDLE_NAMESPACE, requireWires);
+
+		GenericCapability[] capabilities = rb.getGenericCapabilities();
+		List<GenericDescription> selectedCapabilities = new ArrayList<GenericDescription>(capabilities.length);
+		for (GenericCapability capability : capabilities)
+			if (permissionChecker.checkCapabilityPermission(capability.getGenericDescription()))
+				selectedCapabilities.add(capability.getGenericDescription());
+		GenericDescription[] selectedCapabilitiesArray = selectedCapabilities.toArray(new GenericDescription[selectedCapabilities.size()]);
+
+		GenericConstraint[] genericRequires = rb.getGenericRequires();
+		List<GenericDescription> resolvedGenericRequires = new ArrayList<GenericDescription>(genericRequires.length);
+		for (GenericConstraint genericConstraint : genericRequires) {
+			VersionSupplier[] matching = genericConstraint.getMatchingCapabilities();
+			if (matching != null)
+				for (VersionSupplier capability : matching) {
+					GenericDescription supplier = ((GenericCapability) capability).getGenericDescription();
+					resolvedGenericRequires.add(supplier);
+					StateWire genericWire = newStateWire(rb.getBundleDescription(), genericConstraint.getVersionConstraint(), supplier.getSupplier(), supplier);
+					List<StateWire> genericWires = stateWires.get(genericConstraint.getNameSpace());
+					if (genericWires == null) {
+						genericWires = new ArrayList<StateWire>();
+						stateWires.put(genericConstraint.getNameSpace(), genericWires);
+					}
+					genericWires.add(genericWire);
+				}
+		}
+		GenericDescription[] capabilitiesWiredToArray = resolvedGenericRequires.toArray(new GenericDescription[resolvedGenericRequires.size()]);
 
 		BundleDescription[] hostBundles = null;
 		if (rb.isFragment()) {
 			VersionSupplier[] matchingBundles = rb.getHost().getPossibleSuppliers();
 			if (matchingBundles != null && matchingBundles.length > 0) {
 				hostBundles = new BundleDescription[matchingBundles.length];
+				List<StateWire> hostWires = new ArrayList<StateWire>(matchingBundles.length);
+				stateWires.put(BundleRevision.HOST_NAMESPACE, hostWires);
 				for (int i = 0; i < matchingBundles.length; i++) {
-					hostBundles[i] = matchingBundles[i].getBundle();
-					if (rb.isNewFragmentExports() && hostBundles[i].isResolved()) {
-						// update the host's set of selected exports
-						ResolverExport[] hostExports = ((ResolverBundle) matchingBundles[i]).getSelectedExports();
-						ExportPackageDescription[] hostExportsArray = new ExportPackageDescription[hostExports.length];
-						for (int j = 0; j < hostExports.length; j++)
-							hostExportsArray[j] = hostExports[j].getExportPackageDescription();
-						state.resolveBundle(hostBundles[i], true, null, hostExportsArray, hostBundles[i].getSubstitutedExports(), hostBundles[i].getResolvedRequires(), hostBundles[i].getResolvedImports());
+					hostBundles[i] = matchingBundles[i].getBundleDescription();
+					StateWire hostWire = newStateWire(rb.getBundleDescription(), rb.getHost().getVersionConstraint(), hostBundles[i], hostBundles[i]);
+					hostWires.add(hostWire);
+					if (hostBundles[i].isResolved()) {
+						ExportPackageDescription[] newSelectedExports = null;
+						GenericDescription[] newSelectedCapabilities = null;
+						if (rb.isNewFragmentExports()) {
+							// update the host's set of selected exports
+							ResolverExport[] hostExports = ((ResolverBundle) matchingBundles[i]).getSelectedExports();
+							newSelectedExports = new ExportPackageDescription[hostExports.length];
+							for (int j = 0; j < hostExports.length; j++)
+								newSelectedExports[j] = hostExports[j].getExportPackageDescription();
+						}
+						if (rb.isNewFragmentCapabilities()) {
+							// update the host's set of selected capabilities
+							GenericCapability[] hostCapabilities = ((ResolverBundle) matchingBundles[i]).getGenericCapabilities();
+							newSelectedCapabilities = new GenericDescription[hostCapabilities.length];
+							for (int j = 0; j < hostCapabilities.length; j++)
+								newSelectedCapabilities[j] = hostCapabilities[j].getGenericDescription();
+						}
+						if (newSelectedCapabilities != null || newSelectedExports != null) {
+							if (newSelectedCapabilities == null)
+								newSelectedCapabilities = hostBundles[i].getSelectedGenericCapabilities();
+							if (newSelectedExports == null)
+								newSelectedExports = hostBundles[i].getSelectedExports();
+							state.resolveBundle(hostBundles[i], true, null, newSelectedExports, hostBundles[i].getSubstitutedExports(), newSelectedCapabilities, hostBundles[i].getResolvedRequires(), hostBundles[i].getResolvedImports(), hostBundles[i].getResolvedGenericRequires(), ((BundleDescriptionImpl) hostBundles[i]).getWires());
+						}
 					}
 				}
 			}
 		}
 
 		// Resolve the bundle in the state
-		state.resolveBundle(rb.getBundle(), rb.isResolved(), hostBundles, selectedExportsArray, substitutedExportsArray, bundlesWiredToArray, exportsWiredToArray);
+		state.resolveBundle(rb.getBundleDescription(), rb.isResolved(), hostBundles, selectedExportsArray, substitutedExportsArray, selectedCapabilitiesArray, bundlesWiredToArray, exportsWiredToArray, capabilitiesWiredToArray, stateWires);
 	}
 
-	private static ExportPackageDescription[] getExportsWiredTo(ResolverBundle rb) {
+	private static ExportPackageDescription[] getExportsWiredTo(ResolverBundle rb, Map<String, List<StateWire>> stateWires) {
 		// Gather exports that have been wired to
 		ResolverImport[] imports = rb.getImportPackages();
-		ArrayList exportsWiredTo = new ArrayList(imports.length);
+		List<ExportPackageDescription> exportsWiredTo = new ArrayList<ExportPackageDescription>(imports.length);
+		List<StateWire> importWires = new ArrayList<StateWire>(imports.length);
 		for (int i = 0; i < imports.length; i++)
-			if (imports[i].getSelectedSupplier() != null)
-				exportsWiredTo.add(imports[i].getSelectedSupplier().getBaseDescription());
-		return (ExportPackageDescription[]) exportsWiredTo.toArray(new ExportPackageDescription[exportsWiredTo.size()]);
+			if (imports[i].getSelectedSupplier() != null) {
+				ExportPackageDescription supplier = (ExportPackageDescription) imports[i].getSelectedSupplier().getBaseDescription();
+				exportsWiredTo.add(supplier);
+				StateWire wire = newStateWire(rb.getBundleDescription(), imports[i].getVersionConstraint(), supplier.getExporter(), supplier);
+				importWires.add(wire);
+			}
+		if (stateWires != null && !importWires.isEmpty())
+			stateWires.put(BundleRevision.PACKAGE_NAMESPACE, importWires);
+		return exportsWiredTo.toArray(new ExportPackageDescription[exportsWiredTo.size()]);
+	}
+
+	private static StateWire newStateWire(BundleDescription requirementHost, VersionConstraint declaredRequirement, BundleDescription capabilityHost, BaseDescription declaredCapability) {
+		BaseDescription fragDeclared = ((BaseDescriptionImpl) declaredCapability).getFragmentDeclaration();
+		declaredCapability = fragDeclared != null ? fragDeclared : declaredCapability;
+		return new StateWire(requirementHost, declaredRequirement, capabilityHost, declaredCapability);
 	}
 
 	// Resolve dynamic import
@@ -1544,76 +1751,94 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		// Make sure the resolver is initialized
 		if (!initialized)
 			initialize();
-
-		ResolverBundle rb = (ResolverBundle) bundleMapping.get(importingBundle);
-		if (rb.getExport(requestedPackage) != null)
-			return null; // do not allow dynamic wires for packages which this bundle exports
-		ResolverImport[] resolverImports = rb.getImportPackages();
-		// Check through the ResolverImports of this bundle.
-		// If there is a matching one then pass it into resolveImport()
-		boolean found = false;
-		for (int j = 0; j < resolverImports.length; j++) {
-			// Make sure it is a dynamic import
-			if (!resolverImports[j].isDynamic())
-				continue;
-			String importName = resolverImports[j].getName();
-			// If the import uses a wildcard, then temporarily replace this with the requested package
-			if (importName.equals("*") || //$NON-NLS-1$
-					(importName.endsWith(".*") && requestedPackage.startsWith(importName.substring(0, importName.length() - 1)))) { //$NON-NLS-1$
-				resolverImports[j].setName(requestedPackage);
+		hook = (state instanceof StateImpl) ? ((StateImpl) state).getResolverHook() : null;
+		try {
+			ResolverBundle rb = bundleMapping.get(importingBundle);
+			if (rb.getExport(requestedPackage) != null)
+				return null; // do not allow dynamic wires for packages which this bundle exports
+			ResolverImport[] resolverImports = rb.getImportPackages();
+			// Check through the ResolverImports of this bundle.
+			// If there is a matching one then pass it into resolveImport()
+			for (int j = 0; j < resolverImports.length; j++) {
+				// Make sure it is a dynamic import
+				if (!resolverImports[j].isDynamic())
+					continue;
+				// Resolve the import
+				ExportPackageDescription supplier = resolveDynamicImport(resolverImports[j], requestedPackage);
+				if (supplier != null)
+					return supplier;
 			}
+			// look for packages added dynamically
+			ImportPackageSpecification[] addedDynamicImports = importingBundle.getAddedDynamicImportPackages();
+			for (ImportPackageSpecification addedDynamicImport : addedDynamicImports) {
+				ResolverImport newImport = new ResolverImport(rb, addedDynamicImport);
+				ExportPackageDescription supplier = resolveDynamicImport(newImport, requestedPackage);
+				if (supplier != null)
+					return supplier;
+			}
+
+			if (DEBUG || DEBUG_IMPORTS)
+				ResolverImpl.log("Failed to resolve dynamic import: " + requestedPackage); //$NON-NLS-1$
+			return null; // Couldn't resolve the import, so return null
+		} finally {
+			hook = null;
+		}
+	}
+
+	private void addStateWire(BundleDescription importingBundle, VersionConstraint requirement, BundleDescription capabilityHost, ExportPackageDescription capability) {
+		Map<String, List<StateWire>> wires = ((BundleDescriptionImpl) importingBundle).getWires();
+		List<StateWire> imports = wires.get(BundleRevision.PACKAGE_NAMESPACE);
+		if (imports == null) {
+			imports = new ArrayList<StateWire>();
+			wires.put(BundleRevision.PACKAGE_NAMESPACE, imports);
+		}
+		imports.add(newStateWire(importingBundle, requirement, capabilityHost, capability));
+	}
+
+	private ExportPackageDescription resolveDynamicImport(ResolverImport dynamicImport, String requestedPackage) {
+		String importName = dynamicImport.getName();
+		// If the import uses a wildcard, then temporarily replace this with the requested package
+		if (importName.equals("*") || //$NON-NLS-1$
+				(importName.endsWith(".*") && requestedPackage.startsWith(importName.substring(0, importName.length() - 1)))) { //$NON-NLS-1$
+			dynamicImport.setName(requestedPackage);
+		}
+		try {
 			// Resolve the import
-			if (requestedPackage.equals(resolverImports[j].getName())) {
-				found = true;
+			if (!requestedPackage.equals(dynamicImport.getName()))
+				return null;
+
+			if (resolveImport(dynamicImport, new ArrayList<ResolverBundle>())) {
 				// populate the grouping checker with current imports
-				groupingChecker.populateRoots(resolverImports[j].getBundle());
-				if (resolveImport(resolverImports[j], new ArrayList())) {
-					found = false;
-					while (!found && resolverImports[j].getSelectedSupplier() != null) {
-						if (groupingChecker.isDynamicConsistent(resolverImports[j].getBundle(), (ResolverExport) resolverImports[j].getSelectedSupplier()) != null)
-							resolverImports[j].selectNextSupplier(); // not consistent; try the next
-						else
-							found = true; // found a valid wire
-					}
-					resolverImports[j].setName(null);
-					if (!found) {
-						// not found or there was a conflict; reset the suppliers and return null
-						resolverImports[j].clearPossibleSuppliers();
-						return null;
+				groupingChecker.populateRoots(dynamicImport.getBundle());
+				while (dynamicImport.getSelectedSupplier() != null) {
+					if (groupingChecker.isDynamicConsistent(dynamicImport.getBundle(), (ResolverExport) dynamicImport.getSelectedSupplier()) != null) {
+						dynamicImport.selectNextSupplier(); // not consistent; try the next
+					} else {
+						// If the import resolved then return it's matching export
+						if (DEBUG_IMPORTS)
+							ResolverImpl.log("Resolved dynamic import: " + dynamicImport.getBundle() + ":" + dynamicImport.getName() + " -> " + ((ResolverExport) dynamicImport.getSelectedSupplier()).getExporter() + ":" + requestedPackage); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+						// now that we have an export to wire to; populate the roots for that package for the bundle
+						ResolverExport export = (ResolverExport) dynamicImport.getSelectedSupplier();
+						groupingChecker.populateRoots(dynamicImport.getBundle(), export);
+
+						ExportPackageDescription supplier = export.getExportPackageDescription();
+						if (supplier != null)
+							addStateWire(dynamicImport.getBundleDescription(), dynamicImport.getVersionConstraint(), supplier.getExporter(), supplier);
+						return supplier;
 					}
-					// If the import resolved then return it's matching export
-					if (DEBUG_IMPORTS)
-						ResolverImpl.log("Resolved dynamic import: " + rb + ":" + resolverImports[j].getName() + " -> " + ((ResolverExport) resolverImports[j].getSelectedSupplier()).getExporter() + ":" + requestedPackage); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-					ExportPackageDescription matchingExport = ((ResolverExport) resolverImports[j].getSelectedSupplier()).getExportPackageDescription();
-					// If it is a wildcard import then clear the wire, so other
-					// exported packages can be found for it
-					if (importName.endsWith("*")) //$NON-NLS-1$
-						resolverImports[j].clearPossibleSuppliers();
-					return matchingExport;
 				}
+				dynamicImport.clearPossibleSuppliers();
 			}
+		} finally {
+			// If it is a wildcard import then clear the wire, so other
+			// exported packages can be found for it
+			if (importName.endsWith("*")) //$NON-NLS-1$
+				dynamicImport.clearPossibleSuppliers();
 			// Reset the import package name
-			resolverImports[j].setName(null);
-		}
-		// this is to support adding dynamic imports on the fly.
-		if (!found) {
-			Map directives = new HashMap(1);
-			directives.put(Constants.RESOLUTION_DIRECTIVE, ImportPackageSpecification.RESOLUTION_DYNAMIC);
-			ImportPackageSpecification packageSpec = state.getFactory().createImportPackageSpecification(requestedPackage, null, null, null, directives, null, importingBundle);
-			ResolverImport newImport = new ResolverImport(rb, packageSpec);
-			if (resolveImport(newImport, new ArrayList())) {
-				while (newImport.getSelectedSupplier() != null) {
-					if (groupingChecker.isDynamicConsistent(rb, (ResolverExport) newImport.getSelectedSupplier()) != null)
-						newImport.selectNextSupplier();
-					else
-						break;
-				}
-				return ((ResolverExport) newImport.getSelectedSupplier()).getExportPackageDescription();
-			}
+			dynamicImport.setName(null);
 		}
-		if (DEBUG || DEBUG_IMPORTS)
-			ResolverImpl.log("Failed to resolve dynamic import: " + requestedPackage); //$NON-NLS-1$
-		return null; // Couldn't resolve the import, so return null
+		return null;
 	}
 
 	public void bundleAdded(BundleDescription bundle) {
@@ -1627,7 +1852,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		unresolvedBundles.add(rb);
 		resolverExports.put(rb.getExportPackages());
 		resolverBundles.put(rb.getName(), rb);
-		resolverGenerics.put(rb.getGenericCapabilities());
+		addGenerics(rb.getGenericCapabilities());
 	}
 
 	public void bundleRemoved(BundleDescription bundle, boolean pending) {
@@ -1643,7 +1868,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			removalPending.put(new Long(bundle.getBundleId()), bundle);
 		if (!initialized)
 			return;
-		ResolverBundle rb = (ResolverBundle) bundleMapping.get(bundle);
+		ResolverBundle rb = bundleMapping.get(bundle);
 		if (rb == null)
 			return;
 
@@ -1654,7 +1879,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		if (!pending || !bundle.isResolved()) {
 			resolverExports.remove(rb.getExportPackages());
 			resolverBundles.remove(rb);
-			resolverGenerics.remove(rb.getGenericCapabilities());
+			removeGenerics(rb.getGenericCapabilities());
 		}
 		unresolvedBundles.remove(rb);
 	}
@@ -1663,26 +1888,26 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		if (bundle == null)
 			return;
 		// check the removed list if unresolving then remove from the removed list
-		Object[] removedBundles = removalPending.remove(new Long(bundle.getBundle().getBundleId()));
-		for (int i = 0; i < removedBundles.length; i++) {
-			ResolverBundle re = (ResolverBundle) bundleMapping.get(removedBundles[i]);
+		List<BundleDescription> removedBundles = removalPending.remove(new Long(bundle.getBundleDescription().getBundleId()));
+		for (BundleDescription removedDesc : removedBundles) {
+			ResolverBundle re = bundleMapping.get(removedDesc);
 			unresolveBundle(re, true);
-			state.removeBundleComplete((BundleDescription) removedBundles[i]);
+			state.removeBundleComplete(removedDesc);
 			resolverExports.remove(re.getExportPackages());
 			resolverBundles.remove(re);
-			resolverGenerics.remove(re.getGenericCapabilities());
-			bundleMapping.remove(removedBundles[i]);
+			removeGenerics(re.getGenericCapabilities());
+			bundleMapping.remove(removedDesc);
 			groupingChecker.clear(re);
 			// the bundle is removed
-			if (removedBundles[i] == bundle.getBundle())
+			if (removedDesc == bundle.getBundleDescription())
 				removed = true;
 		}
 
-		if (!bundle.getBundle().isResolved() && !developmentMode)
+		if (!bundle.getBundleDescription().isResolved() && !developmentMode)
 			return;
 		CompositeResolveHelperRegistry currentLinks = compositeHelpers;
 		if (currentLinks != null) {
-			CompositeResolveHelper helper = currentLinks.getCompositeResolveHelper(bundle.getBundle());
+			CompositeResolveHelper helper = currentLinks.getCompositeResolveHelper(bundle.getBundleDescription());
 			if (helper != null)
 				helper.giveExports(null);
 		}
@@ -1690,11 +1915,11 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		// passing false for devmode because we need all fragments detached
 		setBundleUnresolved(bundle, removed, false);
 		// Get bundles dependent on 'bundle'
-		BundleDescription[] dependents = bundle.getBundle().getDependents();
-		state.resolveBundle(bundle.getBundle(), false, null, null, null, null, null);
+		BundleDescription[] dependents = bundle.getBundleDescription().getDependents();
+		state.resolveBundle(bundle.getBundleDescription(), false, null, null, null, null, null, null, null, null);
 		// Unresolve dependents of 'bundle'
 		for (int i = 0; i < dependents.length; i++)
-			unresolveBundle((ResolverBundle) bundleMapping.get(dependents[i]), false);
+			unresolveBundle(bundleMapping.get(dependents[i]), false);
 	}
 
 	public void bundleUpdated(BundleDescription newDescription, BundleDescription existingDescription, boolean pending) {
@@ -1708,9 +1933,9 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		resolverGenerics = null;
 		unresolvedBundles = null;
 		bundleMapping = null;
-		Object[] removed = removalPending.getAllValues();
-		for (int i = 0; i < removed.length; i++)
-			state.removeBundleComplete((BundleDescription) removed[i]);
+		List<BundleDescription> removed = removalPending.getAllValues();
+		for (BundleDescription removedDesc : removed)
+			state.removeBundleComplete(removedDesc);
 		removalPending.clear();
 		initialized = false;
 	}
@@ -1744,10 +1969,9 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	// LOGGING METHODS
 	private void printWirings() {
 		ResolverImpl.log("****** Result Wirings ******"); //$NON-NLS-1$
-		Object[] bundles = resolverBundles.getAllValues();
-		for (int j = 0; j < bundles.length; j++) {
-			ResolverBundle rb = (ResolverBundle) bundles[j];
-			if (rb.getBundle().isResolved()) {
+		List<ResolverBundle> bundles = resolverBundles.getAllValues();
+		for (ResolverBundle rb : bundles) {
+			if (rb.getBundleDescription().isResolved()) {
 				continue;
 			}
 			ResolverImpl.log("    * WIRING for " + rb); //$NON-NLS-1$
@@ -1758,9 +1982,9 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 			} else {
 				for (int i = 0; i < requireBundles.length; i++) {
 					if (requireBundles[i].getSelectedSupplier() == null) {
-						ResolverImpl.log("        (r) " + rb.getBundle() + " -> NULL!!!"); //$NON-NLS-1$ //$NON-NLS-2$
+						ResolverImpl.log("        (r) " + rb.getBundleDescription() + " -> NULL!!!"); //$NON-NLS-1$ //$NON-NLS-2$
 					} else {
-						ResolverImpl.log("        (r) " + rb.getBundle() + " -> " + requireBundles[i].getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$
+						ResolverImpl.log("        (r) " + rb.getBundleDescription() + " -> " + requireBundles[i].getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$
 					}
 				}
 			}
@@ -1770,7 +1994,7 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 				VersionSupplier[] hosts = hostSpec.getPossibleSuppliers();
 				if (hosts != null)
 					for (int i = 0; i < hosts.length; i++) {
-						ResolverImpl.log("        (h) " + rb.getBundle() + " -> " + hosts[i].getBundle()); //$NON-NLS-1$ //$NON-NLS-2$
+						ResolverImpl.log("        (h) " + rb.getBundleDescription() + " -> " + hosts[i].getBundleDescription()); //$NON-NLS-1$ //$NON-NLS-2$
 					}
 			}
 			// Imports
@@ -1798,15 +2022,15 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 		Debug.println(message);
 	}
 
-	VersionHashMap getResolverExports() {
+	VersionHashMap<ResolverExport> getResolverExports() {
 		return resolverExports;
 	}
 
-	public void setSelectionPolicy(Comparator selectionPolicy) {
+	public void setSelectionPolicy(Comparator<BaseDescription> selectionPolicy) {
 		this.selectionPolicy = selectionPolicy;
 	}
 
-	public Comparator getSelectionPolicy() {
+	public Comparator<BaseDescription> getSelectionPolicy() {
 		return selectionPolicy;
 	}
 
@@ -1817,4 +2041,29 @@ public class ResolverImpl implements org.eclipse.osgi.service.resolver.Resolver
 	CompositeResolveHelperRegistry getCompositeHelpers() {
 		return compositeHelpers;
 	}
+
+	private void reorderGenerics() {
+		for (VersionHashMap<GenericCapability> namespace : resolverGenerics.values())
+			namespace.reorder();
+	}
+
+	void removeGenerics(GenericCapability[] generics) {
+		for (GenericCapability capability : generics) {
+			VersionHashMap<GenericCapability> namespace = resolverGenerics.get(capability.getGenericDescription().getType());
+			if (namespace != null)
+				namespace.remove(capability);
+		}
+	}
+
+	void addGenerics(GenericCapability[] generics) {
+		for (GenericCapability capability : generics) {
+			String type = capability.getGenericDescription().getType();
+			VersionHashMap<GenericCapability> namespace = resolverGenerics.get(type);
+			if (namespace == null) {
+				namespace = new VersionHashMap<GenericCapability>(this);
+				resolverGenerics.put(type, namespace);
+			}
+			namespace.put(capability.getName(), capability);
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionHashMap.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionHashMap.java
index 05f18f3..b27b038 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionHashMap.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionHashMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,71 +13,62 @@ package org.eclipse.osgi.internal.module;
 
 import java.util.*;
 
-public class VersionHashMap extends MappedList implements Comparator {
+public class VersionHashMap<V extends VersionSupplier> extends MappedList<String, V> implements Comparator<V> {
 	private final ResolverImpl resolver;
 	private final boolean preferSystemPackages;
 
 	public VersionHashMap(ResolverImpl resolver) {
 		this.resolver = resolver;
-		preferSystemPackages = Boolean.valueOf(ResolverImpl.secureAction.getProperty("osgi.resolver.preferSystemPackages", "true")).booleanValue(); //$NON-NLS-1$//$NON-NLS-2$
+		Dictionary<?, ?>[] allProperties = resolver.getState().getPlatformProperties();
+		Object preferSystem = allProperties.length == 0 ? "true" : allProperties[0].get("osgi.resolver.preferSystemPackages"); //$NON-NLS-1$//$NON-NLS-2$
+		if (preferSystem == null)
+			preferSystem = "true"; //$NON-NLS-1$
+		preferSystemPackages = Boolean.valueOf(preferSystem.toString()).booleanValue();
 	}
 
 	// assumes existing array is sorted
 	// finds the index where to insert the new value
-	protected int insertionIndex(Object[] existing, Object value) {
-		int index = existing.length;
-		if (compare(existing[existing.length - 1], value) > 0) {
-			index = Arrays.binarySearch(existing, value, this);
+	protected int insertionIndex(List<V> existing, V value) {
+		int index = existing.size();
+		if (compare(existing.get(existing.size() - 1), value) > 0) {
+			index = Collections.binarySearch(existing, value, this);
+
 			if (index < 0)
 				index = -index - 1;
 		}
 		return index;
 	}
 
-	public void put(VersionSupplier[] versionSuppliers) {
+	public void put(V[] versionSuppliers) {
 		for (int i = 0; i < versionSuppliers.length; i++)
 			put(versionSuppliers[i].getName(), versionSuppliers[i]);
 	}
 
-	public boolean contains(VersionSupplier vs) {
+	public boolean contains(V vs) {
 		return contains(vs, false) != null;
 	}
 
-	private VersionSupplier contains(VersionSupplier vs, boolean remove) {
-		Object existing = internal.get(vs.getName());
+	private V contains(V vs, boolean remove) {
+		List<V> existing = internal.get(vs.getName());
 		if (existing == null)
 			return null;
-		if (existing == vs) {
-			if (remove)
-				internal.remove(vs.getName());
+		int index = existing.indexOf(vs);
+		if (index >= 0) {
+			if (remove) {
+				existing.remove(index);
+				if (existing.size() == 0)
+					internal.remove(vs.getName());
+			}
 			return vs;
 		}
-		if (!existing.getClass().isArray())
-			return null;
-		Object[] existingValues = (Object[]) existing;
-		for (int i = 0; i < existingValues.length; i++)
-			if (existingValues[i] == vs) {
-				if (remove) {
-					if (existingValues.length == 2) {
-						internal.put(vs.getName(), existingValues[i == 0 ? 1 : 0]);
-						return vs;
-					}
-					Object[] newExisting = new Object[existingValues.length - 1];
-					System.arraycopy(existingValues, 0, newExisting, 0, i);
-					if (i + 1 < existingValues.length)
-						System.arraycopy(existingValues, i + 1, newExisting, i, existingValues.length - i - 1);
-					internal.put(vs.getName(), newExisting);
-				}
-				return vs;
-			}
 		return null;
 	}
 
-	public Object remove(VersionSupplier toBeRemoved) {
+	public V remove(V toBeRemoved) {
 		return contains(toBeRemoved, true);
 	}
 
-	public void remove(VersionSupplier[] versionSuppliers) {
+	public void remove(V[] versionSuppliers) {
 		for (int i = 0; i < versionSuppliers.length; i++)
 			remove(versionSuppliers[i]);
 	}
@@ -85,11 +76,10 @@ public class VersionHashMap extends MappedList implements Comparator {
 	// Once we have resolved bundles, we need to make sure that version suppliers
 	// from the resolved bundles are ahead of those from unresolved bundles
 	void reorder() {
-		for (Iterator it = internal.values().iterator(); it.hasNext();) {
-			Object existing = it.next();
-			if (!existing.getClass().isArray())
-				continue;
-			Arrays.sort((Object[]) existing, this);
+		for (Iterator<List<V>> it = internal.values().iterator(); it.hasNext();) {
+			List<V> existing = it.next();
+			if (existing.size() > 1)
+				Collections.sort(existing, this);
 		}
 	}
 
@@ -98,26 +88,22 @@ public class VersionHashMap extends MappedList implements Comparator {
 	// First the resolution status of the supplying bundle.
 	// Second is the supplier version.
 	// Third is the bundle id of the supplying bundle.
-	public int compare(Object o1, Object o2) {
-		if (!(o1 instanceof VersionSupplier) || !(o2 instanceof VersionSupplier))
-			throw new IllegalArgumentException();
-		VersionSupplier vs1 = (VersionSupplier) o1;
-		VersionSupplier vs2 = (VersionSupplier) o2;
+	public int compare(V vs1, V vs2) {
 		// if the selection policy is set then use that
 		if (resolver.getSelectionPolicy() != null)
 			return resolver.getSelectionPolicy().compare(vs1.getBaseDescription(), vs2.getBaseDescription());
 		if (preferSystemPackages) {
 			String systemBundle = resolver.getSystemBundle();
-			if (systemBundle.equals(vs1.getBundle().getSymbolicName()) && !systemBundle.equals(vs2.getBundle().getSymbolicName()))
+			if (systemBundle.equals(vs1.getBundleDescription().getSymbolicName()) && !systemBundle.equals(vs2.getBundleDescription().getSymbolicName()))
 				return -1;
-			else if (!systemBundle.equals(vs1.getBundle().getSymbolicName()) && systemBundle.equals(vs2.getBundle().getSymbolicName()))
+			else if (!systemBundle.equals(vs1.getBundleDescription().getSymbolicName()) && systemBundle.equals(vs2.getBundleDescription().getSymbolicName()))
 				return 1;
 		}
-		if (vs1.getBundle().isResolved() != vs2.getBundle().isResolved())
-			return vs1.getBundle().isResolved() ? -1 : 1;
+		if (vs1.getBundleDescription().isResolved() != vs2.getBundleDescription().isResolved())
+			return vs1.getBundleDescription().isResolved() ? -1 : 1;
 		int versionCompare = -(vs1.getVersion().compareTo(vs2.getVersion()));
 		if (versionCompare != 0)
 			return versionCompare;
-		return vs1.getBundle().getBundleId() <= vs2.getBundle().getBundleId() ? -1 : 1;
+		return vs1.getBundleDescription().getBundleId() <= vs2.getBundleDescription().getBundleId() ? -1 : 1;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionSupplier.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionSupplier.java
index d4c8a2e..03c94b0 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionSupplier.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/VersionSupplier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,16 +13,19 @@ package org.eclipse.osgi.internal.module;
 import org.eclipse.osgi.service.resolver.BaseDescription;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.osgi.framework.Version;
+import org.osgi.framework.wiring.BundleCapability;
 
 /*
  * A companion to BaseDescription from the state used while resolving.
  */
 public abstract class VersionSupplier {
-	protected BaseDescription base;
+	final protected BaseDescription base;
+	final private BundleCapability capability;
 	private VersionSupplier substitute;
 
 	VersionSupplier(BaseDescription base) {
 		this.base = base;
+		this.capability = base.getCapability();
 	}
 
 	public Version getVersion() {
@@ -37,7 +40,7 @@ public abstract class VersionSupplier {
 		return base;
 	}
 
-	// returns true if this version supplier has been dropped and is no longer available as a wire
+	// returns the version supplier that has been substituted for this version supplier
 	VersionSupplier getSubstitute() {
 		return substitute;
 	}
@@ -51,7 +54,7 @@ public abstract class VersionSupplier {
 	/*
 	 * returns the BundleDescription which supplies this VersionSupplier
 	 */
-	abstract public BundleDescription getBundle();
+	abstract public BundleDescription getBundleDescription();
 
 	/*
 	 * returns the ResolverBundle which supplies this VersionSupplier 
@@ -61,4 +64,8 @@ public abstract class VersionSupplier {
 	public String toString() {
 		return base.toString();
 	}
+
+	BundleCapability getCapability() {
+		return capability;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java
index d817cd3..c158d32 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,10 +11,13 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
+import java.util.*;
 import org.eclipse.osgi.service.resolver.BaseDescription;
 import org.osgi.framework.Version;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRevision;
 
-abstract class BaseDescriptionImpl implements BaseDescription {
+public abstract class BaseDescriptionImpl implements BaseDescription {
 
 	protected final Object monitor = new Object();
 
@@ -42,4 +45,115 @@ abstract class BaseDescriptionImpl implements BaseDescription {
 		this.version = version;
 	}
 
+	static String toString(Map<String, Object> map, boolean directives) {
+		if (map.size() == 0)
+			return ""; //$NON-NLS-1$
+		String assignment = directives ? ":=" : "="; //$NON-NLS-1$//$NON-NLS-2$
+		Set<Map.Entry<String, Object>> set = map.entrySet();
+		StringBuffer sb = new StringBuffer();
+		for (Map.Entry<String, Object> entry : set) {
+			sb.append("; "); //$NON-NLS-1$
+			String key = entry.getKey();
+			Object value = entry.getValue();
+			if (value instanceof List) {
+				@SuppressWarnings("unchecked")
+				List<Object> list = (List<Object>) value;
+				if (list.size() == 0)
+					continue;
+				Object component = list.get(0);
+				String className = component.getClass().getName();
+				String type = className.substring(className.lastIndexOf('.') + 1);
+				sb.append(key).append(':').append("List<").append(type).append(">").append(assignment).append('"'); //$NON-NLS-1$ //$NON-NLS-2$
+				for (Object object : list)
+					sb.append(object).append(',');
+				sb.setLength(sb.length() - 1);
+				sb.append('"');
+			} else {
+				String type = ""; //$NON-NLS-1$
+				if (!(value instanceof String)) {
+					String className = value.getClass().getName();
+					type = ":" + className.substring(className.lastIndexOf('.') + 1); //$NON-NLS-1$
+				}
+				sb.append(key).append(type).append(assignment).append('"').append(value).append('"');
+			}
+		}
+		return sb.toString();
+	}
+
+	String getInternalNameSpace() {
+		return null;
+	}
+
+	public BaseDescription getFragmentDeclaration() {
+		return null;
+	}
+
+	public BundleCapability getCapability() {
+		return getCapability(null);
+	}
+
+	BundleCapability getCapability(String namespace) {
+		BaseDescriptionImpl fragmentDeclaration = (BaseDescriptionImpl) getFragmentDeclaration();
+		if (fragmentDeclaration != null)
+			return fragmentDeclaration.getCapability(namespace);
+		if (namespace == null)
+			namespace = getInternalNameSpace();
+		if (namespace == null)
+			return null;
+		return new BaseCapability(namespace);
+	}
+
+	class BaseCapability implements BundleCapability {
+		private final String namespace;
+
+		public BaseCapability(String namespace) {
+			super();
+			this.namespace = namespace;
+		}
+
+		public BundleRevision getRevision() {
+			return getSupplier();
+		}
+
+		public String getNamespace() {
+			return namespace;
+		}
+
+		public Map<String, String> getDirectives() {
+			return getDeclaredDirectives();
+		}
+
+		public Map<String, Object> getAttributes() {
+			Map<String, Object> attrs = getDeclaredAttributes();
+			String internalName = BaseDescriptionImpl.this.getInternalNameSpace();
+			if (namespace.equals(internalName))
+				return attrs;
+			// we are doing an alias, must remove internal Name and add alias
+			attrs = new HashMap<String, Object>(attrs);
+			Object nameValue = attrs.remove(internalName);
+			if (nameValue != null)
+				attrs.put(namespace, nameValue);
+			return Collections.unmodifiableMap(attrs);
+		}
+
+		public int hashCode() {
+			return System.identityHashCode(BaseDescriptionImpl.this);
+		}
+
+		protected BaseDescriptionImpl getBaseDescription() {
+			return BaseDescriptionImpl.this;
+		}
+
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (!(obj instanceof BaseCapability))
+				return false;
+			return (((BaseCapability) obj).getBaseDescription() == BaseDescriptionImpl.this) && namespace.equals(((BaseCapability) obj).getNamespace());
+		}
+
+		public String toString() {
+			return getNamespace() + BaseDescriptionImpl.toString(getAttributes(), false);
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java
index b957747..448e37d 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,8 +71,8 @@ final class BundleDeltaImpl implements BundleDelta {
 		return typeStr.toString();
 	}
 
-	public int compareTo(Object obj) {
-		long idcomp = getBundle().getBundleId() - ((BundleDelta) obj).getBundle().getBundleId();
+	public int compareTo(BundleDelta obj) {
+		long idcomp = getBundle().getBundleId() - obj.getBundle().getBundleId();
 		return (idcomp < 0L) ? -1 : ((idcomp > 0L) ? 1 : 0);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
index 26e6d15..ab7f899 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,16 @@
 package org.eclipse.osgi.internal.resolver;
 
 import java.io.IOException;
+import java.net.URL;
 import java.util.*;
+import org.eclipse.osgi.framework.adaptor.BundleClassLoader;
+import org.eclipse.osgi.framework.internal.core.BundleHost;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.framework.util.KeyedElement;
+import org.eclipse.osgi.internal.loader.BundleLoaderProxy;
 import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.*;
+import org.osgi.framework.wiring.*;
 
 public final class BundleDescriptionImpl extends BaseDescriptionImpl implements BundleDescription, KeyedElement {
 	static final String[] EMPTY_STRING = new String[0];
@@ -26,6 +32,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 	static final BundleDescription[] EMPTY_BUNDLEDESCS = new BundleDescription[0];
 	static final GenericSpecification[] EMPTY_GENERICSPECS = new GenericSpecification[0];
 	static final GenericDescription[] EMPTY_GENERICDESCS = new GenericDescription[0];
+	static final RuntimePermission GET_CLASSLOADER_PERM = new RuntimePermission("getClassLoader"); //$NON-NLS-1$
 
 	static final int RESOLVED = 0x01;
 	static final int SINGLETON = 0x02;
@@ -40,20 +47,23 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 	private volatile int stateBits = FULLY_LOADED | ATTACH_FRAGMENTS | DYNAMIC_FRAGMENTS;
 
 	private volatile long bundleId = -1;
-	private volatile HostSpecification host; //null if the bundle is not a fragment. volatile to allow unsynchronized checks for null
+	volatile HostSpecification host; //null if the bundle is not a fragment. volatile to allow unsynchronized checks for null
 	private volatile StateImpl containingState;
 
 	private volatile Object userObject;
 	private volatile int lazyDataOffset = -1;
 	private volatile int lazyDataSize = -1;
 
-	//TODO These could be arrays
-	private ArrayList dependencies;
-	private ArrayList dependents;
+	private List<BundleDescription> dependencies;
+	private List<BundleDescription> dependents;
+	private String[] mandatory;
+	private Map<String, Object> attributes;
 
 	private volatile LazyData lazyData;
 	private volatile int equinox_ee = -1;
 
+	private DescriptionWiring bundleWiring;
+
 	public BundleDescriptionImpl() {
 		// 
 	}
@@ -102,6 +112,15 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
+	public ImportPackageSpecification[] getAddedDynamicImportPackages() {
+		LazyData currentData = loadLazyData();
+		synchronized (this.monitor) {
+			if (currentData.addedDynamicImports == null)
+				return EMPTY_IMPORTS;
+			return currentData.addedDynamicImports.toArray(new ImportPackageSpecification[currentData.addedDynamicImports.size()]);
+		}
+	}
+
 	public BundleSpecification[] getRequiredBundles() {
 		LazyData currentData = loadLazyData();
 		synchronized (this.monitor) {
@@ -193,6 +212,15 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
+	public GenericDescription[] getSelectedGenericCapabilities() {
+		LazyData currentData = loadLazyData();
+		synchronized (this.monitor) {
+			if (currentData.selectedCapabilities == null)
+				return EMPTY_GENERICDESCS;
+			return currentData.selectedCapabilities;
+		}
+	}
+
 	public ExportPackageDescription[] getSubstitutedExports() {
 		LazyData currentData = loadLazyData();
 		synchronized (this.monitor) {
@@ -220,6 +248,32 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
+	public GenericDescription[] getResolvedGenericRequires() {
+		LazyData currentData = loadLazyData();
+		synchronized (this.monitor) {
+			if (currentData.resolvedCapabilities == null)
+				return EMPTY_GENERICDESCS;
+			return currentData.resolvedCapabilities;
+		}
+	}
+
+	public Map<String, List<StateWire>> getWires() {
+		LazyData currentData = loadLazyData();
+		synchronized (this.monitor) {
+			if (currentData.stateWires == null) {
+				currentData.stateWires = new HashMap<String, List<StateWire>>(0);
+			}
+			return currentData.stateWires;
+		}
+	}
+
+	Map<String, List<StateWire>> getWiresInternal() {
+		LazyData currentData = loadLazyData();
+		synchronized (this.monitor) {
+			return currentData.stateWires;
+		}
+	}
+
 	protected void setBundleId(long bundleId) {
 		this.bundleId = bundleId;
 	}
@@ -326,10 +380,16 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 
 	protected void setStateBit(int stateBit, boolean on) {
 		synchronized (this.monitor) {
-			if (on)
+			if (on) {
 				stateBits |= stateBit;
-			else
+			} else {
 				stateBits &= ~stateBit;
+				if (stateBit == RESOLVED) {
+					if (bundleWiring != null)
+						bundleWiring.invalidate();
+					bundleWiring = null;
+				}
+			}
 		}
 	}
 
@@ -378,6 +438,18 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
+	protected void setSelectedCapabilities(GenericDescription[] selectedCapabilities) {
+		synchronized (this.monitor) {
+			checkLazyData();
+			lazyData.selectedCapabilities = selectedCapabilities;
+			if (selectedCapabilities != null) {
+				for (GenericDescription capability : selectedCapabilities) {
+					((GenericDescriptionImpl) capability).setSupplier(this);
+				}
+			}
+		}
+	}
+
 	protected void setSubstitutedExports(ExportPackageDescription[] substitutedExports) {
 		synchronized (this.monitor) {
 			checkLazyData();
@@ -399,6 +471,27 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
+	protected void setResolvedCapabilities(GenericDescription[] resolvedCapabilities) {
+		synchronized (this.monitor) {
+			checkLazyData();
+			lazyData.resolvedCapabilities = resolvedCapabilities;
+		}
+	}
+
+	protected void setStateWires(Map<String, List<StateWire>> stateWires) {
+		synchronized (this.monitor) {
+			checkLazyData();
+			lazyData.stateWires = stateWires;
+		}
+	}
+
+	void clearAddedDynamicImportPackages() {
+		synchronized (this.monitor) {
+			checkLazyData();
+			lazyData.addedDynamicImports = null;
+		}
+	}
+
 	public String toString() {
 		if (getSymbolicName() == null)
 			return "[" + getBundleId() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -432,7 +525,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		synchronized (this.monitor) {
 			if (dependencies == null)
 				return;
-			Iterator iter = dependencies.iterator();
+			Iterator<BundleDescription> iter = dependencies.iterator();
 			while (iter.hasNext()) {
 				((BundleDescriptionImpl) iter.next()).removeDependent(this);
 			}
@@ -445,7 +538,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 			if (newDependencies == null)
 				return;
 			if (!checkDups && dependencies == null)
-				dependencies = new ArrayList(newDependencies.length);
+				dependencies = new ArrayList<BundleDescription>(newDependencies.length);
 			for (int i = 0; i < newDependencies.length; i++) {
 				addDependency((BaseDescriptionImpl) newDependencies[i], checkDups);
 			}
@@ -458,7 +551,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 			if (bundle == this)
 				return;
 			if (dependencies == null)
-				dependencies = new ArrayList(10);
+				dependencies = new ArrayList<BundleDescription>(10);
 			if (!checkDups || !dependencies.contains(bundle)) {
 				bundle.addDependent(this);
 				dependencies.add(bundle);
@@ -470,14 +563,14 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 	 * Gets all the bundle dependencies as a result of import-package or require-bundle.
 	 * Self and fragment bundles are removed.
 	 */
-	List getBundleDependencies() {
+	List<BundleDescription> getBundleDependencies() {
 		synchronized (this.monitor) {
 			if (dependencies == null)
-				return new ArrayList(0);
-			ArrayList required = new ArrayList(dependencies.size());
-			for (Iterator iter = dependencies.iterator(); iter.hasNext();) {
-				Object dep = iter.next();
-				if (dep != this && dep instanceof BundleDescription && ((BundleDescription) dep).getHost() == null)
+				return new ArrayList<BundleDescription>(0);
+			ArrayList<BundleDescription> required = new ArrayList<BundleDescription>(dependencies.size());
+			for (Iterator<BundleDescription> iter = dependencies.iterator(); iter.hasNext();) {
+				BundleDescription dep = iter.next();
+				if (dep != this && dep.getHost() == null)
 					required.add(dep);
 			}
 			return required;
@@ -495,7 +588,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 	protected void addDependent(BundleDescription dependent) {
 		synchronized (this.monitor) {
 			if (dependents == null)
-				dependents = new ArrayList(10);
+				dependents = new ArrayList<BundleDescription>(10);
 			// no need to check for duplicates here; this is only called in addDepenency which already checks for dups.
 			dependents.add(dependent);
 		}
@@ -513,7 +606,13 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		synchronized (this.monitor) {
 			if (dependents == null)
 				return EMPTY_BUNDLEDESCS;
-			return (BundleDescription[]) dependents.toArray(new BundleDescription[dependents.size()]);
+			return dependents.toArray(new BundleDescription[dependents.size()]);
+		}
+	}
+
+	boolean hasDependents() {
+		synchronized (this.monitor) {
+			return dependents == null ? false : dependents.size() > 0;
 		}
 	}
 
@@ -561,7 +660,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		if (reader == null)
 			throw new IllegalStateException("No valid reader for the bundle description"); //$NON-NLS-1$
 
-		synchronized (reader) {
+		synchronized (currentState.monitor) {
 			if (isFullyLoaded()) {
 				reader.setAccessedFlag(true); // set reader accessed flag
 				return this.lazyData;
@@ -593,12 +692,49 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		setLazyLoaded(false);
 	}
 
+	void addDynamicImportPackages(ImportPackageSpecification[] dynamicImport) {
+		LazyData currentData = loadLazyData();
+		synchronized (this.monitor) {
+			if (currentData.addedDynamicImports == null)
+				currentData.addedDynamicImports = new ArrayList<ImportPackageSpecification>();
+			for (ImportPackageSpecification addImport : dynamicImport) {
+				if (!ImportPackageSpecification.RESOLUTION_DYNAMIC.equals(addImport.getDirective(Constants.RESOLUTION_DIRECTIVE)))
+					throw new IllegalArgumentException("Import must be a dynamic import."); //$NON-NLS-1$
+			}
+			adding: for (ImportPackageSpecification addImport : dynamicImport) {
+				for (ImportPackageSpecification currentImport : currentData.addedDynamicImports) {
+					if (equalImports(addImport, currentImport))
+						continue adding;
+				}
+				((ImportPackageSpecificationImpl) addImport).setBundle(this);
+				currentData.addedDynamicImports.add(addImport);
+			}
+		}
+		setLazyLoaded(false);
+	}
+
+	private boolean equalImports(ImportPackageSpecification addImport, ImportPackageSpecification currentImport) {
+		if (!isEqual(addImport.getName(), currentImport.getName()))
+			return false;
+		if (!isEqual(addImport.getVersionRange(), currentImport.getVersionRange()))
+			return false;
+		if (!isEqual(addImport.getBundleSymbolicName(), currentImport.getBundleSymbolicName()))
+			return false;
+		if (!isEqual(addImport.getBundleVersionRange(), currentImport.getBundleVersionRange()))
+			return false;
+		return isEqual(addImport.getAttributes(), currentImport.getAttributes());
+	}
+
+	private boolean isEqual(Object o1, Object o2) {
+		return (o1 == null) ? o2 == null : o1.equals(o2);
+	}
+
 	void unload() {
 		StateImpl currentState = (StateImpl) getContainingState();
 		StateReader reader = currentState == null ? null : currentState.getReader();
 		if (reader == null)
 			throw new IllegalStateException("BundleDescription does not belong to a reader."); //$NON-NLS-1$
-		synchronized (reader) {
+		synchronized (currentState.monitor) {
 			if ((stateBits & LAZY_LOADED) == 0)
 				return;
 			if (!isFullyLoaded())
@@ -610,7 +746,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
-	void setDynamicStamps(HashMap dynamicStamps) {
+	void setDynamicStamps(Map<String, Long> dynamicStamps) {
 		synchronized (this.monitor) {
 			checkLazyData();
 			lazyData.dynamicStamps = dynamicStamps;
@@ -623,7 +759,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 			if (lazyData.dynamicStamps == null) {
 				if (timestamp == null)
 					return;
-				lazyData.dynamicStamps = new HashMap();
+				lazyData.dynamicStamps = new HashMap<String, Long>();
 			}
 			if (timestamp == null)
 				lazyData.dynamicStamps.remove(requestedPackage);
@@ -640,7 +776,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
-	HashMap getDynamicStamps() {
+	Map<String, Long> getDynamicStamps() {
 		LazyData currentData = loadLazyData();
 		synchronized (this.monitor) {
 			return currentData.dynamicStamps;
@@ -660,7 +796,7 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 			lazyData = new LazyData();
 	}
 
-	private final class LazyData {
+	final class LazyData {
 		String location;
 		String platformFilter;
 
@@ -672,11 +808,403 @@ public final class BundleDescriptionImpl extends BaseDescriptionImpl implements
 		NativeCodeSpecification nativeCode;
 
 		ExportPackageDescription[] selectedExports;
+		GenericDescription[] selectedCapabilities;
 		BundleDescription[] resolvedRequires;
 		ExportPackageDescription[] resolvedImports;
+		GenericDescription[] resolvedCapabilities;
 		ExportPackageDescription[] substitutedExports;
 		String[] executionEnvironments;
 
-		HashMap dynamicStamps;
+		Map<String, Long> dynamicStamps;
+		Map<String, List<StateWire>> stateWires;
+		// Note that this is not persisted in the state cache
+		List<ImportPackageSpecification> addedDynamicImports;
+	}
+
+	public Map<String, Object> getAttributes() {
+		synchronized (this.monitor) {
+			return attributes;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	void setAttributes(Map<String, ?> attributes) {
+		synchronized (this.monitor) {
+			this.attributes = (Map<String, Object>) attributes;
+		}
+	}
+
+	Object getDirective(String key) {
+		synchronized (this.monitor) {
+			if (Constants.MANDATORY_DIRECTIVE.equals(key))
+				return mandatory;
+			if (Constants.SINGLETON_DIRECTIVE.equals(key))
+				return isSingleton() ? Boolean.TRUE : Boolean.FALSE;
+			if (Constants.FRAGMENT_ATTACHMENT_DIRECTIVE.equals(key)) {
+				if (!attachFragments())
+					return Constants.FRAGMENT_ATTACHMENT_NEVER;
+				if (dynamicFragments())
+					return Constants.FRAGMENT_ATTACHMENT_ALWAYS;
+				return Constants.FRAGMENT_ATTACHMENT_RESOLVETIME;
+			}
+		}
+		return null;
+	}
+
+	void setDirective(String key, Object value) {
+		// only pay attention to mandatory directive for now; others are set with setState method
+		if (Constants.MANDATORY_DIRECTIVE.equals(key))
+			mandatory = (String[]) value;
+	}
+
+	public Map<String, String> getDeclaredDirectives() {
+		Map<String, String> result = new HashMap<String, String>(2);
+		if (!attachFragments()) {
+			result.put(Constants.FRAGMENT_ATTACHMENT_DIRECTIVE, Constants.FRAGMENT_ATTACHMENT_NEVER);
+		} else {
+			if (dynamicFragments())
+				result.put(Constants.FRAGMENT_ATTACHMENT_DIRECTIVE, Constants.FRAGMENT_ATTACHMENT_ALWAYS);
+			else
+				result.put(Constants.FRAGMENT_ATTACHMENT_DIRECTIVE, Constants.FRAGMENT_ATTACHMENT_RESOLVETIME);
+		}
+		if (isSingleton())
+			result.put(Constants.SINGLETON_DIRECTIVE, Boolean.TRUE.toString());
+		String[] mandatoryDirective = (String[]) getDirective(Constants.MANDATORY_DIRECTIVE);
+		if (mandatoryDirective != null)
+			result.put(Constants.MANDATORY_DIRECTIVE, ExportPackageDescriptionImpl.toString(mandatoryDirective));
+		return Collections.unmodifiableMap(result);
+	}
+
+	public Map<String, Object> getDeclaredAttributes() {
+		Map<String, Object> result = new HashMap<String, Object>(1);
+		synchronized (this.monitor) {
+			if (attributes != null)
+				result.putAll(attributes);
+		}
+		result.put(BundleRevision.BUNDLE_NAMESPACE, getName());
+		result.put(Constants.BUNDLE_VERSION_ATTRIBUTE, getVersion());
+		return Collections.unmodifiableMap(result);
+	}
+
+	public List<BundleRequirement> getDeclaredRequirements(String namespace) {
+		List<BundleRequirement> result = new ArrayList<BundleRequirement>();
+		if (namespace == null || BundleRevision.BUNDLE_NAMESPACE.equals(namespace)) {
+			BundleSpecification[] requires = getRequiredBundles();
+			for (BundleSpecification require : requires) {
+				result.add(require.getRequirement());
+			}
+		}
+		if (host != null && (namespace == null || BundleRevision.HOST_NAMESPACE.equals(namespace))) {
+			result.add(host.getRequirement());
+		}
+		if (namespace == null || BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) {
+			ImportPackageSpecification[] imports = getImportPackages();
+			for (ImportPackageSpecification importPkg : imports)
+				result.add(importPkg.getRequirement());
+		}
+		GenericSpecification[] genericSpecifications = getGenericRequires();
+		for (GenericSpecification requirement : genericSpecifications) {
+			if (namespace == null || namespace.equals(requirement.getType()))
+				result.add(requirement.getRequirement());
+		}
+		return Collections.unmodifiableList(result);
+	}
+
+	public List<BundleCapability> getDeclaredCapabilities(String namespace) {
+		List<BundleCapability> result = new ArrayList<BundleCapability>();
+		if (host == null) {
+			if (getSymbolicName() != null) {
+				if (namespace == null || BundleRevision.BUNDLE_NAMESPACE.equals(namespace)) {
+					result.add(BundleDescriptionImpl.this.getCapability());
+				}
+				if (attachFragments() && (namespace == null || BundleRevision.HOST_NAMESPACE.equals(namespace))) {
+					result.add(BundleDescriptionImpl.this.getCapability(BundleRevision.HOST_NAMESPACE));
+				}
+			}
+
+		} else {
+			// may need to have a osgi.wiring.fragment capability
+		}
+		if (namespace == null || BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) {
+			ExportPackageDescription[] exports = getExportPackages();
+			for (ExportPackageDescription exportPkg : exports)
+				result.add(exportPkg.getCapability());
+		}
+		GenericDescription[] genericCapabilities = getGenericCapabilities();
+		for (GenericDescription capabilitiy : genericCapabilities) {
+			if (namespace == null || namespace.equals(capabilitiy.getType()))
+				result.add(capabilitiy.getCapability());
+		}
+		return Collections.unmodifiableList(result);
+	}
+
+	public int getTypes() {
+		return getHost() != null ? BundleRevision.TYPE_FRAGMENT : 0;
+	}
+
+	public Bundle getBundle() {
+		Object ref = getUserObject();
+		if (ref instanceof BundleReference)
+			return ((BundleReference) ref).getBundle();
+		return null;
+	}
+
+	String getInternalNameSpace() {
+		return BundleRevision.BUNDLE_NAMESPACE;
+	}
+
+	public BundleWiring getWiring() {
+		synchronized (this.monitor) {
+			if (bundleWiring != null || !isResolved())
+				return bundleWiring;
+			return bundleWiring = new DescriptionWiring();
+		}
+	}
+
+	static class BundleWireImpl implements BundleWire {
+		private final BundleCapability capability;
+		private final BundleWiring provider;
+		private final BundleRequirement requirement;
+		private final BundleWiring requirer;
+
+		public BundleWireImpl(StateWire wire) {
+			VersionConstraint declaredRequirement = wire.getDeclaredRequirement();
+			if (declaredRequirement instanceof HostSpecification)
+				this.capability = ((BaseDescriptionImpl) wire.getDeclaredCapability()).getCapability(BundleRevision.HOST_NAMESPACE);
+			else
+				this.capability = wire.getDeclaredCapability().getCapability();
+			this.provider = wire.getCapabilityHost().getWiring();
+			this.requirement = declaredRequirement.getRequirement();
+			this.requirer = wire.getRequirementHost().getWiring();
+		}
+
+		public BundleCapability getCapability() {
+			return capability;
+		}
+
+		public BundleRequirement getRequirement() {
+			return requirement;
+		}
+
+		public BundleWiring getProviderWiring() {
+			return provider;
+		}
+
+		public BundleWiring getRequirerWiring() {
+			return requirer;
+		}
+
+		@Override
+		public int hashCode() {
+			int hashcode = 31 + capability.hashCode();
+			hashcode = hashcode * 31 + requirement.hashCode();
+			hashcode = hashcode * 31 + provider.hashCode();
+			hashcode = hashcode * 31 + requirer.hashCode();
+			return hashcode;
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			if (!(obj instanceof BundleWireImpl))
+				return false;
+			BundleWireImpl other = (BundleWireImpl) obj;
+			return capability.equals(other.getCapability()) && requirement.equals(other.getRequirement()) && provider.equals(other.getProviderWiring()) && requirer.equals(other.getRequirerWiring());
+		}
+
+		public String toString() {
+			return getRequirement() + " -> " + getCapability(); //$NON-NLS-1$
+		}
+	}
+
+	// Note that description wiring are identity equality based
+	class DescriptionWiring implements BundleWiring {
+		private volatile boolean valid = true;
+
+		public Bundle getBundle() {
+			return BundleDescriptionImpl.this.getBundle();
+		}
+
+		public boolean isInUse() {
+			return valid && (isCurrent() || BundleDescriptionImpl.this.hasDependents());
+		}
+
+		void invalidate() {
+			valid = false;
+		}
+
+		public boolean isCurrent() {
+			return valid && !BundleDescriptionImpl.this.isRemovalPending();
+		}
+
+		public List<BundleCapability> getCapabilities(String namespace) {
+			if (!isInUse())
+				return null;
+			@SuppressWarnings("unchecked")
+			List<BundleCapability> result = Collections.EMPTY_LIST;
+			if (host != null)
+				return result;
+			result = new ArrayList<BundleCapability>();
+			if (getSymbolicName() != null) {
+				if (namespace == null || BundleRevision.BUNDLE_NAMESPACE.equals(namespace)) {
+					result.add(BundleDescriptionImpl.this.getCapability());
+				}
+				if (attachFragments() && (namespace == null || BundleRevision.HOST_NAMESPACE.equals(namespace))) {
+					result.add(BundleDescriptionImpl.this.getCapability(BundleRevision.HOST_NAMESPACE));
+				}
+			}
+			if (namespace == null || BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) {
+				ExportPackageDescription[] exports = getSelectedExports();
+				for (ExportPackageDescription exportPkg : exports)
+					result.add(exportPkg.getCapability());
+			}
+			GenericDescription[] genericCapabilities = getSelectedGenericCapabilities();
+			for (GenericDescription capabilitiy : genericCapabilities) {
+				if (namespace == null || namespace.equals(capabilitiy.getType()))
+					result.add(capabilitiy.getCapability());
+			}
+			return result;
+		}
+
+		public List<BundleRequirement> getRequirements(String namespace) {
+			List<BundleWire> requiredWires = getRequiredWires(namespace);
+			if (requiredWires == null)
+				// happens if not in use
+				return null;
+			List<BundleRequirement> requirements = new ArrayList<BundleRequirement>(requiredWires.size());
+			for (BundleWire wire : requiredWires) {
+				if (!requirements.contains(wire.getRequirement()))
+					requirements.add(wire.getRequirement());
+			}
+			// get dynamic imports
+			if (namespace == null || BundleRevision.PACKAGE_NAMESPACE.equals(namespace)) {
+				if (hasDynamicImports()) {
+					ImportPackageSpecification[] imports = getImportPackages();
+					for (ImportPackageSpecification impPackage : imports) {
+						if (ImportPackageSpecification.RESOLUTION_DYNAMIC.equals(impPackage.getDirective(Constants.RESOLUTION_DIRECTIVE))) {
+							BundleRequirement req = impPackage.getRequirement();
+							if (!requirements.contains(req))
+								requirements.add(req);
+						}
+					}
+				}
+			}
+			return requirements;
+		}
+
+		public List<BundleWire> getProvidedWires(String namespace) {
+			if (!isInUse())
+				return null;
+			BundleDescription[] dependentBundles = getDependents();
+			List<BundleWire> unorderedResult = new ArrayList<BundleWire>();
+			for (BundleDescription dependent : dependentBundles) {
+				List<BundleWire> dependentWires = dependent.getWiring().getRequiredWires(namespace);
+				if (dependentWires != null)
+					for (BundleWire bundleWire : dependentWires) {
+						if (bundleWire.getProviderWiring() == this)
+							unorderedResult.add(bundleWire);
+					}
+			}
+			List<BundleWire> orderedResult = new ArrayList<BundleWire>(unorderedResult.size());
+			List<BundleCapability> capabilities = getCapabilities(namespace);
+			for (BundleCapability capability : capabilities) {
+				for (Iterator<BundleWire> wires = unorderedResult.iterator(); wires.hasNext();) {
+					BundleWire wire = wires.next();
+					if (wire.getCapability().equals(capability)) {
+						wires.remove();
+						orderedResult.add(wire);
+					}
+				}
+			}
+			return orderedResult;
+		}
+
+		public List<BundleWire> getRequiredWires(String namespace) {
+			if (!isInUse())
+				return null;
+			@SuppressWarnings("unchecked")
+			List<BundleWire> result = Collections.EMPTY_LIST;
+			Map<String, List<StateWire>> wireMap = getWires();
+			if (namespace == null) {
+				result = new ArrayList<BundleWire>();
+				for (List<StateWire> wires : wireMap.values()) {
+					for (StateWire wire : wires) {
+						result.add(new BundleWireImpl(wire));
+					}
+				}
+				return result;
+			}
+			List<StateWire> wires = wireMap.get(namespace);
+			if (wires == null)
+				return result;
+			result = new ArrayList<BundleWire>(wires.size());
+			for (StateWire wire : wires) {
+				result.add(new BundleWireImpl(wire));
+			}
+			return result;
+		}
+
+		public BundleRevision getRevision() {
+			return BundleDescriptionImpl.this;
+		}
+
+		public ClassLoader getClassLoader() {
+			SecurityManager sm = System.getSecurityManager();
+			if (sm != null)
+				sm.checkPermission(GET_CLASSLOADER_PERM);
+			if (!isInUse())
+				return null;
+			return (ClassLoader) getBundleClassLoader();
+		}
+
+		private BundleClassLoader getBundleClassLoader() {
+			Object o = BundleDescriptionImpl.this.getUserObject();
+			if (!(o instanceof BundleLoaderProxy)) {
+				if (o instanceof BundleReference)
+					o = ((BundleReference) o).getBundle();
+				if (o instanceof BundleHost)
+					o = ((BundleHost) o).getLoaderProxy();
+			}
+			if (o instanceof BundleLoaderProxy)
+				return ((BundleLoaderProxy) o).getBundleLoader().createClassLoader();
+			return null;
+		}
+
+		private boolean hasResourcePermission() {
+			SecurityManager sm = System.getSecurityManager();
+			if (sm != null) {
+				try {
+					sm.checkPermission(new AdminPermission(getBundle(), AdminPermission.RESOURCE));
+				} catch (SecurityException e) {
+					return false;
+				}
+			}
+			return true;
+		}
+
+		public List<URL> findEntries(String path, String filePattern, int options) {
+			if (!hasResourcePermission() || !isInUse())
+				return null;
+			@SuppressWarnings("unchecked")
+			List<URL> result = Collections.EMPTY_LIST;
+			BundleClassLoader bcl = getBundleClassLoader();
+			if (bcl != null)
+				result = bcl.findEntries(path, filePattern, options);
+			return Collections.unmodifiableList(result);
+		}
+
+		public Collection<String> listResources(String path, String filePattern, int options) {
+			if (!hasResourcePermission() || !isInUse())
+				return null;
+			@SuppressWarnings("unchecked")
+			Collection<String> result = Collections.EMPTY_LIST;
+			BundleClassLoader bcl = getBundleClassLoader();
+			if (bcl != null)
+				result = bcl.listResources(path, filePattern, options);
+			return Collections.unmodifiableCollection(result);
+		}
+
+		public String toString() {
+			return BundleDescriptionImpl.this.toString();
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java
index 667c235..71bdc2f 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,11 +11,15 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
+import java.util.*;
 import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleRevision;
 
 public class BundleSpecificationImpl extends VersionConstraintImpl implements BundleSpecification {
 	private boolean exported;
 	private boolean optional;
+	private Map<String, Object> attributes;
 
 	protected void setExported(boolean exported) {
 		synchronized (this.monitor) {
@@ -41,12 +45,46 @@ public class BundleSpecificationImpl extends VersionConstraintImpl implements Bu
 		}
 	}
 
+	Map<String, Object> getAttributes() {
+		synchronized (this.monitor) {
+			return attributes;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	void setAttributes(Map<String, ?> attributes) {
+		synchronized (this.monitor) {
+			this.attributes = (Map<String, Object>) attributes;
+		}
+	}
+
 	public boolean isSatisfiedBy(BaseDescription supplier) {
-		if (!(supplier instanceof BundleDescription))
+		if (!(supplier instanceof BundleDescriptionImpl))
 			return false;
-		BundleDescription candidate = (BundleDescription) supplier;
+		BundleDescriptionImpl candidate = (BundleDescriptionImpl) supplier;
 		if (candidate.getHost() != null)
 			return false;
+		Map<String, ?> requiredAttrs = getAttributes();
+		if (requiredAttrs != null) {
+			Map<String, ?> prividerAttrs = candidate.getAttributes();
+			if (prividerAttrs == null)
+				return false;
+			for (String key : requiredAttrs.keySet()) {
+				Object requiredValue = requiredAttrs.get(key);
+				Object prividedValue = prividerAttrs.get(key);
+				if (prividedValue == null || !requiredValue.equals(prividedValue))
+					return false;
+			}
+		}
+		String[] mandatory = (String[]) candidate.getDirective(Constants.MANDATORY_DIRECTIVE);
+		if (mandatory != null) {
+			for (String key : mandatory) {
+				if (Constants.BUNDLE_VERSION_ATTRIBUTE.equals(key))
+					continue; // has a default value of 0.0.0
+				if (requiredAttrs == null || requiredAttrs.get(key) == null)
+					return false;
+			}
+		}
 		if (getName() != null && getName().equals(candidate.getSymbolicName()) && (getVersionRange() == null || getVersionRange().isIncluded(candidate.getVersion())))
 			return true;
 		return false;
@@ -55,4 +93,43 @@ public class BundleSpecificationImpl extends VersionConstraintImpl implements Bu
 	public String toString() {
 		return "Require-Bundle: " + getName() + "; bundle-version=\"" + getVersionRange() + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
+
+	@Override
+	protected Map<String, String> getInternalDirectives() {
+		Map<String, String> result = new HashMap<String, String>(2);
+		synchronized (this.monitor) {
+			if (exported)
+				result.put(Constants.VISIBILITY_DIRECTIVE, Constants.VISIBILITY_REEXPORT);
+			if (optional)
+				result.put(Constants.RESOLUTION_DIRECTIVE, Constants.RESOLUTION_OPTIONAL);
+			result.put(Constants.FILTER_DIRECTIVE, createFilterDirective());
+			return result;
+		}
+	}
+
+	private String createFilterDirective() {
+		StringBuffer filter = new StringBuffer();
+		filter.append("(&"); //$NON-NLS-1$
+		synchronized (this.monitor) {
+			addFilterAttribute(filter, BundleRevision.BUNDLE_NAMESPACE, getName());
+			VersionRange range = getVersionRange();
+			if (range != null && range != VersionRange.emptyRange)
+				addFilterAttribute(filter, Constants.BUNDLE_VERSION_ATTRIBUTE, range);
+			if (attributes != null)
+				addFilterAttributes(filter, attributes);
+		}
+		filter.append(')');
+		return filter.toString();
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Map<String, Object> getInteralAttributes() {
+		return Collections.EMPTY_MAP;
+	}
+
+	@Override
+	protected String getInternalNameSpace() {
+		return BundleRevision.BUNDLE_NAMESPACE;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ComputeNodeOrder.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ComputeNodeOrder.java
index 6b979c2..ecc0680 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ComputeNodeOrder.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ComputeNodeOrder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -93,7 +93,7 @@ public class ComputeNodeOrder {
 			 * 
 			 * Element type: <code>Vertex</code>
 			 */
-			public List adjacent = new ArrayList(3);
+			public List<Vertex> adjacent = new ArrayList<Vertex>(3);
 
 			/**
 			 * Creates a new vertex with the given id.
@@ -110,14 +110,14 @@ public class ComputeNodeOrder {
 		 * 
 		 * Element type: <code>Vertex</code>
 		 */
-		private List vertexList = new ArrayList(100);
+		private List<Vertex> vertexList = new ArrayList<Vertex>(100);
 
 		/**
 		 * Map from id to vertex.
 		 * 
 		 * Key type: <code>Object</code>; value type: <code>Vertex</code>
 		 */
-		private Map vertexMap = new HashMap(100);
+		private Map<Object, Vertex> vertexMap = new HashMap<Object, Vertex>(100);
 
 		/**
 		 * DFS visit time. Non-negative.
@@ -201,8 +201,8 @@ public class ComputeNodeOrder {
 			if (initialized) {
 				throw new IllegalArgumentException();
 			}
-			Vertex fromVertex = (Vertex) vertexMap.get(fromId);
-			Vertex toVertex = (Vertex) vertexMap.get(toId);
+			Vertex fromVertex = vertexMap.get(fromId);
+			Vertex toVertex = vertexMap.get(toId);
 			// ignore edges when one of the vertices is unknown
 			if (fromVertex == null || toVertex == null)
 				return;
@@ -221,14 +221,14 @@ public class ComputeNodeOrder {
 		 * (element type: <code>Object</code>)
 		 * @exception IllegalArgumentException if the graph is not frozen
 		 */
-		public List idsByDFSFinishTime(boolean increasing) {
+		public List<Object> idsByDFSFinishTime(boolean increasing) {
 			if (!initialized) {
 				throw new IllegalArgumentException();
 			}
 			int len = vertexList.size();
 			Object[] r = new Object[len];
-			for (Iterator allV = vertexList.iterator(); allV.hasNext();) {
-				Vertex vertex = (Vertex) allV.next();
+			for (Iterator<Vertex> allV = vertexList.iterator(); allV.hasNext();) {
+				Vertex vertex = allV.next();
 				int f = vertex.finishTime;
 				// note that finish times start at 1, not 0
 				if (increasing) {
@@ -264,15 +264,15 @@ public class ComputeNodeOrder {
 		 * <code>Object[]</code>)
 		 * @exception IllegalArgumentException if the graph is not frozen
 		 */
-		public List nonTrivialComponents() {
+		public List<Object[]> nonTrivialComponents() {
 			if (!initialized) {
 				throw new IllegalArgumentException();
 			}
 			// find the roots of each component
 			// Map<Vertex,List<Object>> components
-			Map components = new HashMap();
-			for (Iterator it = vertexList.iterator(); it.hasNext();) {
-				Vertex vertex = (Vertex) it.next();
+			Map<Vertex, List<Object>> components = new HashMap<Vertex, List<Object>>();
+			for (Iterator<Vertex> it = vertexList.iterator(); it.hasNext();) {
+				Vertex vertex = it.next();
 				if (vertex.predecessor == null) {
 					// this vertex is the root of a component
 					// if component is non-trivial we will hit a child
@@ -282,18 +282,18 @@ public class ComputeNodeOrder {
 					while (root.predecessor != null) {
 						root = root.predecessor;
 					}
-					List component = (List) components.get(root);
+					List<Object> component = components.get(root);
 					if (component == null) {
-						component = new ArrayList(2);
+						component = new ArrayList<Object>(2);
 						component.add(root.id);
 						components.put(root, component);
 					}
 					component.add(vertex.id);
 				}
 			}
-			List result = new ArrayList(components.size());
-			for (Iterator it = components.values().iterator(); it.hasNext();) {
-				List component = (List) it.next();
+			List<Object[]> result = new ArrayList<Object[]>(components.size());
+			for (Iterator<List<Object>> it = components.values().iterator(); it.hasNext();) {
+				List<Object> component = it.next();
 				if (component.size() > 1) {
 					result.add(component.toArray());
 				}
@@ -369,10 +369,10 @@ public class ComputeNodeOrder {
 			// all vertex.predecessor initially null;
 			time = 0;
 			// for a stack, append to the end of an array-based list
-			List stack = new ArrayList(Math.max(1, vertexList.size()));
-			Iterator allAdjacent = null;
+			List<Object> stack = new ArrayList<Object>(Math.max(1, vertexList.size()));
+			Iterator<Vertex> allAdjacent = null;
 			Vertex vertex = null;
-			Iterator allV = vertexList.iterator();
+			Iterator<Vertex> allV = vertexList.iterator();
 			state = NEXT_VERTEX;
 			nextStateLoop: while (true) {
 				switch (state) {
@@ -382,16 +382,15 @@ public class ComputeNodeOrder {
 							// all done
 							break nextStateLoop;
 						}
-						Vertex nextVertex = (Vertex) allV.next();
+						Vertex nextVertex = allV.next();
 						if (nextVertex.color == Vertex.WHITE) {
 							stack.add(NEXT_VERTEX_OBJECT);
 							vertex = nextVertex;
 							state = START_DFS_VISIT;
 							continue nextStateLoop;
-						} else {
-							state = NEXT_VERTEX;
-							continue nextStateLoop;
 						}
+						state = NEXT_VERTEX;
+						continue nextStateLoop;
 					case START_DFS_VISIT :
 						// on entry, "vertex" contains the vertex to be visited
 						// top of stack is return code
@@ -404,7 +403,7 @@ public class ComputeNodeOrder {
 						// on entry, "allAdjacent" contains adjacent vertexes to
 						// be visited; "vertex" contains vertex being visited
 						if (allAdjacent.hasNext()) {
-							Vertex adjVertex = (Vertex) allAdjacent.next();
+							Vertex adjVertex = allAdjacent.next();
 							if (adjVertex.color == Vertex.WHITE) {
 								// explore edge from vertex to adjVertex
 								adjVertex.predecessor = vertex;
@@ -421,18 +420,19 @@ public class ComputeNodeOrder {
 							}
 							state = NEXT_ADJACENT;
 							continue nextStateLoop;
-						} else {
-							// done exploring vertex
-							vertex.color = Vertex.BLACK;
-							time++;
-							vertex.finishTime = time;
-							state = ((Integer) stack.remove(stack.size() - 1)).intValue();
-							continue nextStateLoop;
 						}
+						// done exploring vertex
+						vertex.color = Vertex.BLACK;
+						time++;
+						vertex.finishTime = time;
+						state = ((Integer) stack.remove(stack.size() - 1)).intValue();
+						continue nextStateLoop;
 					case AFTER_NEXTED_DFS_VISIT :
 						// on entry, stack contains "vertex" and "allAjacent"
 						vertex = (Vertex) stack.remove(stack.size() - 1);
-						allAdjacent = (Iterator) stack.remove(stack.size() - 1);
+						@SuppressWarnings("unchecked")
+						Iterator<Vertex> unchecked = (Iterator<Vertex>) stack.remove(stack.size() - 1);
+						allAdjacent = unchecked;
 						state = NEXT_ADJACENT;
 						continue nextStateLoop;
 				}
@@ -486,8 +486,8 @@ public class ComputeNodeOrder {
 		// interchange "to" and "from" to reverse edges from g1
 		final Digraph g2 = new Digraph();
 		// add vertexes
-		List resortedVertexes = g1.idsByDFSFinishTime(false);
-		for (Iterator it = resortedVertexes.iterator(); it.hasNext();)
+		List<Object> resortedVertexes = g1.idsByDFSFinishTime(false);
+		for (Iterator<Object> it = resortedVertexes.iterator(); it.hasNext();)
 			g2.addVertex(it.next());
 		// add edges
 		for (int i = 0; i < references.length; i++)
@@ -496,14 +496,14 @@ public class ComputeNodeOrder {
 
 		// Step 3: Return the vertexes in increasing order of depth-first finish
 		// time in g2
-		List sortedProjectList = g2.idsByDFSFinishTime(true);
+		List<Object> sortedProjectList = g2.idsByDFSFinishTime(true);
 		Object[] orderedNodes = new Object[sortedProjectList.size()];
 		sortedProjectList.toArray(orderedNodes);
 		Object[][] knots;
 		boolean hasCycles = g2.containsCycles();
 		if (hasCycles) {
-			List knotList = g2.nonTrivialComponents();
-			knots = (Object[][]) knotList.toArray(new Object[knotList.size()][]);
+			List<Object[]> knotList = g2.nonTrivialComponents();
+			knots = knotList.toArray(new Object[knotList.size()][]);
 		} else {
 			knots = new Object[0][];
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java
index 6d70e43..a764445 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,17 +12,17 @@
 
 package org.eclipse.osgi.internal.resolver;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.osgi.service.resolver.ExportPackageDescription;
+import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.Version;
+import org.osgi.framework.wiring.BundleRevision;
 
 public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements ExportPackageDescription {
 	public static final String EQUINOX_EE = "x-equinox-ee"; //$NON-NLS-1$
 	private static final Integer EQUINOX_EE_DEFAULT = new Integer(-1);
 	private String[] uses;
-	private Map attributes;
+	private Map<String, Object> attributes;
 	private volatile BundleDescription exporter;
 	private String exclude;
 	private String include;
@@ -30,11 +30,24 @@ public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements
 	private String[] mandatory;
 	private Boolean internal = Boolean.FALSE;
 	private int equinox_ee = -1;
-	private volatile int tableIndex;
+	private ExportPackageDescription fragmentDeclaration = null;
 
-	public Map getDirectives() {
+	public ExportPackageDescriptionImpl() {
+		super();
+	}
+
+	public ExportPackageDescriptionImpl(BundleDescription host, ExportPackageDescription fragmentDeclaration) {
+		setName(fragmentDeclaration.getName());
+		setVersion(fragmentDeclaration.getVersion());
+		setDirectives(fragmentDeclaration.getDirectives());
+		setAttributes(fragmentDeclaration.getAttributes());
+		setExporter(host);
+		this.fragmentDeclaration = fragmentDeclaration;
+	}
+
+	public Map<String, Object> getDirectives() {
 		synchronized (this.monitor) {
-			Map result = new HashMap(5);
+			Map<String, Object> result = new HashMap<String, Object>(7);
 			if (uses != null)
 				result.put(Constants.USES_DIRECTIVE, uses);
 			if (exclude != null)
@@ -51,6 +64,51 @@ public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
+	public Map<String, String> getDeclaredDirectives() {
+		Map<String, String> result = new HashMap<String, String>(6);
+		synchronized (this.monitor) {
+			if (uses != null)
+				result.put(Constants.USES_DIRECTIVE, toString(uses));
+			if (exclude != null)
+				result.put(Constants.EXCLUDE_DIRECTIVE, exclude);
+			if (include != null)
+				result.put(Constants.INCLUDE_DIRECTIVE, include);
+			if (mandatory != null)
+				result.put(Constants.MANDATORY_DIRECTIVE, toString(mandatory));
+			if (friends != null)
+				result.put(Constants.FRIENDS_DIRECTIVE, toString(friends));
+			if (internal != null)
+				result.put(Constants.INTERNAL_DIRECTIVE, internal.toString());
+			return Collections.unmodifiableMap(result);
+		}
+	}
+
+	public Map<String, Object> getDeclaredAttributes() {
+		Map<String, Object> result = new HashMap<String, Object>(2);
+		synchronized (this.monitor) {
+			if (attributes != null)
+				result.putAll(attributes);
+			result.put(BundleRevision.PACKAGE_NAMESPACE, getName());
+			result.put(Constants.VERSION_ATTRIBUTE, getVersion());
+			Version bundleVersion = getSupplier().getVersion();
+			if (bundleVersion != null)
+				result.put(Constants.BUNDLE_VERSION_ATTRIBUTE, bundleVersion);
+			String symbolicName = getSupplier().getSymbolicName();
+			if (symbolicName != null)
+				result.put(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE, symbolicName);
+			return Collections.unmodifiableMap(result);
+		}
+	}
+
+	static String toString(String[] list) {
+		StringBuffer buffer = new StringBuffer();
+		for (String string : list)
+			buffer.append(string).append(',');
+		if (buffer.length() > 0)
+			buffer.setLength(buffer.length() - 1);
+		return buffer.toString();
+	}
+
 	public Object getDirective(String key) {
 		synchronized (this.monitor) {
 			if (key.equals(Constants.USES_DIRECTIVE))
@@ -93,7 +151,7 @@ public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
-	public void setDirectives(Map directives) {
+	public void setDirectives(Map<String, ?> directives) {
 		synchronized (this.monitor) {
 			if (directives == null)
 				return;
@@ -107,7 +165,7 @@ public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements
 		}
 	}
 
-	public Map getAttributes() {
+	public Map<String, Object> getAttributes() {
 		synchronized (this.monitor) {
 			return attributes;
 		}
@@ -121,13 +179,17 @@ public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements
 		return exporter;
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public boolean isRoot() {
 		return true;
 	}
 
-	protected void setAttributes(Map attributes) {
+	@SuppressWarnings("unchecked")
+	protected void setAttributes(Map<String, ?> attributes) {
 		synchronized (this.monitor) {
-			this.attributes = attributes;
+			this.attributes = (Map<String, Object>) attributes;
 		}
 	}
 
@@ -135,15 +197,19 @@ public class ExportPackageDescriptionImpl extends BaseDescriptionImpl implements
 		this.exporter = exporter;
 	}
 
-	public String toString() {
-		return "Export-Package: " + getName() + "; version=\"" + getVersion() + "\""; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+	public BaseDescription getFragmentDeclaration() {
+		return fragmentDeclaration;
+	}
+
+	void setFragmentDeclaration(ExportPackageDescription fragmentDeclaration) {
+		this.fragmentDeclaration = fragmentDeclaration;
 	}
 
-	int getTableIndex() {
-		return tableIndex;
+	public String toString() {
+		return "Export-Package: " + getName() + "; version=\"" + getVersion() + "\""; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
 	}
 
-	void setTableIndex(int tableIndex) {
-		this.tableIndex = tableIndex;
+	String getInternalNameSpace() {
+		return BundleRevision.PACKAGE_NAMESPACE;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java
index 7a23502..9e438f0 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,17 +11,41 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
-import java.util.Dictionary;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.osgi.service.resolver.GenericDescription;
+import java.util.*;
+import org.eclipse.osgi.service.resolver.*;
 import org.osgi.framework.Constants;
+import org.osgi.framework.Version;
 
 public class GenericDescriptionImpl extends BaseDescriptionImpl implements GenericDescription {
-	private Dictionary attributes;
+	private Dictionary<String, Object> attributes;
 	private volatile BundleDescription supplier;
 	private volatile String type = GenericDescription.DEFAULT_TYPE;
+	private Map<String, String> directives;
+	private GenericDescription fragmentDeclaration;
 
-	public Dictionary getAttributes() {
+	public GenericDescriptionImpl() {
+		super();
+	}
+
+	public GenericDescriptionImpl(BundleDescription host, GenericDescription fragmentDeclaration) {
+		setType(fragmentDeclaration.getType());
+		Dictionary<String, Object> origAttrs = fragmentDeclaration.getAttributes();
+		if (origAttrs != null) {
+			Hashtable<String, Object> copyAttrs = new Hashtable<String, Object>();
+			for (Enumeration<String> keys = origAttrs.keys(); keys.hasMoreElements();) {
+				String key = keys.nextElement();
+				copyAttrs.put(key, origAttrs.get(key));
+			}
+			setAttributes(copyAttrs);
+		}
+		Map<String, String> origDirectives = fragmentDeclaration.getDeclaredDirectives();
+		Map<String, String> copyDirectives = new HashMap<String, String>(origDirectives);
+		setDirectives(copyDirectives);
+		setSupplier(host);
+		this.fragmentDeclaration = fragmentDeclaration;
+	}
+
+	public Dictionary<String, Object> getAttributes() {
 		synchronized (this.monitor) {
 			return attributes;
 		}
@@ -31,11 +55,15 @@ public class GenericDescriptionImpl extends BaseDescriptionImpl implements Gener
 		return supplier;
 	}
 
-	void setAttributes(Dictionary attributes) {
+	void setAttributes(Dictionary<String, Object> attributes) {
 		synchronized (this.monitor) {
 			this.attributes = attributes;
-			// always add/replace the version attribute with the actual Version object
-			attributes.put(Constants.VERSION_ATTRIBUTE, getVersion());
+		}
+	}
+
+	void setDirectives(Map<String, String> directives) {
+		synchronized (this.monitor) {
+			this.directives = directives;
 		}
 	}
 
@@ -45,12 +73,22 @@ public class GenericDescriptionImpl extends BaseDescriptionImpl implements Gener
 
 	public String toString() {
 		StringBuffer sb = new StringBuffer();
-		sb.append(StateBuilder.GENERIC_CAPABILITY).append(": ").append(getName()); //$NON-NLS-1$
-		if (getType() != GenericDescription.DEFAULT_TYPE)
-			sb.append(':').append(getType());
+		sb.append(Constants.PROVIDE_CAPABILITY).append(": ").append(getType()); //$NON-NLS-1$
+		Map<String, Object> attrs = getDeclaredAttributes();
+		sb.append(toString(attrs, false));
 		return sb.toString();
 	}
 
+	/**
+	 * @deprecated
+	 */
+	public String getName() {
+		synchronized (this.monitor) {
+			Object name = attributes != null ? attributes.get(getType()) : null;
+			return name instanceof String ? (String) name : null;
+		}
+	}
+
 	public String getType() {
 		return type;
 	}
@@ -61,4 +99,48 @@ public class GenericDescriptionImpl extends BaseDescriptionImpl implements Gener
 		else
 			this.type = type;
 	}
+
+	/**
+	 * @deprecated
+	 */
+	public Version getVersion() {
+		Object version = attributes != null ? attributes.get(Constants.VERSION_ATTRIBUTE) : null;
+		return version instanceof Version ? (Version) version : super.getVersion();
+	}
+
+	@SuppressWarnings("unchecked")
+	public Map<String, String> getDeclaredDirectives() {
+		synchronized (this.monitor) {
+			if (directives == null)
+				return Collections.EMPTY_MAP;
+			return Collections.unmodifiableMap(directives);
+		}
+	}
+
+	public Map<String, Object> getDeclaredAttributes() {
+		synchronized (this.monitor) {
+			Map<String, Object> result = new HashMap<String, Object>(5);
+			if (attributes != null)
+				for (Enumeration<String> keys = attributes.keys(); keys.hasMoreElements();) {
+					String key = keys.nextElement();
+					Object value = attributes.get(key);
+					if (value instanceof List)
+						value = Collections.unmodifiableList((List<Object>) value);
+					result.put(key, value);
+				}
+			return Collections.unmodifiableMap(result);
+		}
+	}
+
+	String getInternalNameSpace() {
+		return getType();
+	}
+
+	public BaseDescription getFragmentDeclaration() {
+		return fragmentDeclaration;
+	}
+
+	void setFragmentDeclaration(GenericDescription fragmentDeclaration) {
+		this.fragmentDeclaration = fragmentDeclaration;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java
index 6ba83c7..43aae96 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,10 +11,10 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
+import java.util.*;
 import org.eclipse.osgi.framework.internal.core.FilterImpl;
 import org.eclipse.osgi.service.resolver.*;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.*;
 
 public class GenericSpecificationImpl extends VersionConstraintImpl implements GenericSpecification {
 	private Filter matchingFilter;
@@ -28,31 +28,38 @@ public class GenericSpecificationImpl extends VersionConstraintImpl implements G
 		}
 	}
 
-	void setMatchingFilter(String matchingFilter) throws InvalidSyntaxException {
+	void setMatchingFilter(String matchingFilter, boolean matchName) throws InvalidSyntaxException {
 		synchronized (this.monitor) {
+			String name = getName();
+			if (matchName && name != null && !"*".equals(name)) { //$NON-NLS-1$
+				String nameFilter = "(" + getType() + "=" + getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				matchingFilter = matchingFilter == null ? nameFilter : "(&" + nameFilter + matchingFilter + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+			}
 			this.matchingFilter = matchingFilter == null ? null : FilterImpl.newInstance(matchingFilter);
 		}
 	}
 
+	void setMatchingFilter(Filter matchingFilter) {
+		synchronized (this.monitor) {
+			this.matchingFilter = matchingFilter;
+		}
+	}
+
 	public boolean isSatisfiedBy(BaseDescription supplier) {
 		if (!(supplier instanceof GenericDescription))
 			return false;
 		GenericDescription candidate = (GenericDescription) supplier;
-		if (getName() == null || !getName().equals(candidate.getName()))
-			return false;
-		if (getType() == null || !getType().equals(candidate.getType()))
+		if (!getType().equals(candidate.getType()))
 			return false;
-		// Note that versions are only matched by including them in the filter
+		// Note that names and versions are only matched by including them in the filter
 		return matchingFilter == null || matchingFilter.match(candidate.getAttributes());
 	}
 
 	public String toString() {
 		StringBuffer sb = new StringBuffer();
-		sb.append(StateBuilder.GENERIC_REQUIRE).append(": ").append(getName()); //$NON-NLS-1$
-		if (getType() != GenericDescription.DEFAULT_TYPE)
-			sb.append(':').append(getType());
+		sb.append(Constants.REQUIRE_CAPABILITY).append(": ").append(getType()); //$NON-NLS-1$
 		if (matchingFilter != null)
-			sb.append("; ").append(getMatchingFilter()); //$NON-NLS-1$
+			sb.append("; filter=\"").append(getMatchingFilter()).append('"'); //$NON-NLS-1$
 		return sb.toString();
 	}
 
@@ -121,4 +128,29 @@ public class GenericSpecificationImpl extends VersionConstraintImpl implements G
 			this.suppliers = suppliers;
 		}
 	}
+
+	@Override
+	protected Map<String, String> getInternalDirectives() {
+		Map<String, String> result = new HashMap<String, String>(2);
+		synchronized (this.monitor) {
+			if ((resolution & GenericSpecification.RESOLUTION_OPTIONAL) != 0)
+				result.put(Constants.RESOLUTION_DIRECTIVE, Constants.RESOLUTION_OPTIONAL);
+			if (matchingFilter != null) {
+				result.put(Constants.FILTER_DIRECTIVE, matchingFilter.toString());
+			}
+		}
+		return result;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Map<String, Object> getInteralAttributes() {
+		// TODO this needs to return all specified attributes from the Require-Capability header.
+		return Collections.EMPTY_MAP;
+	}
+
+	@Override
+	protected String getInternalNameSpace() {
+		return getType();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java
index a6e1965..08a9d0a 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,19 +12,57 @@
 
 package org.eclipse.osgi.internal.resolver;
 
+import java.util.*;
 import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleRevision;
 
 public class HostSpecificationImpl extends VersionConstraintImpl implements HostSpecification {
 
 	private BundleDescription[] hosts;
 	private boolean multihost = false;
+	private Map<String, Object> attributes;
+
+	Map<String, Object> getAttributes() {
+		synchronized (this.monitor) {
+			return attributes;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	void setAttributes(Map<String, ?> attributes) {
+		synchronized (this.monitor) {
+			this.attributes = (Map<String, Object>) attributes;
+		}
+	}
 
 	public boolean isSatisfiedBy(BaseDescription supplier) {
-		if (!(supplier instanceof BundleDescription))
+		if (!(supplier instanceof BundleDescriptionImpl))
 			return false;
-		BundleDescription candidate = (BundleDescription) supplier;
+		BundleDescriptionImpl candidate = (BundleDescriptionImpl) supplier;
 		if (candidate.getHost() != null)
 			return false;
+		Map<String, ?> requiredAttrs = getAttributes();
+		if (requiredAttrs != null) {
+			Map<String, ?> prividerAttrs = candidate.getAttributes();
+			if (prividerAttrs == null)
+				return false;
+			for (String key : requiredAttrs.keySet()) {
+				Object requiredValue = requiredAttrs.get(key);
+				Object prividedValue = prividerAttrs.get(key);
+				if (prividedValue == null || !requiredValue.equals(prividedValue))
+					return false;
+			}
+		}
+		String[] mandatory = (String[]) candidate.getDirective(Constants.MANDATORY_DIRECTIVE);
+		if (mandatory != null) {
+			for (String key : mandatory) {
+				if (Constants.BUNDLE_VERSION_ATTRIBUTE.equals(key))
+					continue; // has a default value of 0.0.0
+				if (requiredAttrs == null || requiredAttrs.get(key) == null)
+					return false;
+			}
+		}
 		if (getName() != null && getName().equals(candidate.getSymbolicName()) && (getVersionRange() == null || getVersionRange().isIncluded(candidate.getVersion())))
 			return true;
 		return false;
@@ -74,4 +112,41 @@ public class HostSpecificationImpl extends VersionConstraintImpl implements Host
 			this.multihost = multihost;
 		}
 	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Map<String, String> getInternalDirectives() {
+		// TODO this does not handle extension directive; but we do not support bootclasspath anyway
+		Map<String, String> result = new HashMap<String, String>(2);
+		synchronized (this.monitor) {
+			result.put(Constants.FILTER_DIRECTIVE, createFilterDirective());
+			return result;
+		}
+	}
+
+	private String createFilterDirective() {
+		StringBuffer filter = new StringBuffer();
+		filter.append("(&"); //$NON-NLS-1$
+		synchronized (this.monitor) {
+			addFilterAttribute(filter, BundleRevision.HOST_NAMESPACE, getName());
+			VersionRange range = getVersionRange();
+			if (range != null && range != VersionRange.emptyRange)
+				addFilterAttribute(filter, Constants.BUNDLE_VERSION_ATTRIBUTE, range);
+			if (attributes != null)
+				addFilterAttributes(filter, attributes);
+		}
+		filter.append(')');
+		return filter.toString();
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Map<String, Object> getInteralAttributes() {
+		return Collections.EMPTY_MAP;
+	}
+
+	@Override
+	protected String getInternalNameSpace() {
+		return BundleRevision.HOST_NAMESPACE;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
index 55092c8..ac21cbe 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,16 +15,17 @@ package org.eclipse.osgi.internal.resolver;
 import java.util.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.wiring.BundleRevision;
 
 public class ImportPackageSpecificationImpl extends VersionConstraintImpl implements ImportPackageSpecification {
 	private String resolution = ImportPackageSpecification.RESOLUTION_STATIC; // the default is static
 	private String symbolicName;
 	private VersionRange bundleVersionRange;
-	private Map attributes;
+	private Map<String, Object> attributes;
 
-	public Map getDirectives() {
+	public Map<String, Object> getDirectives() {
 		synchronized (this.monitor) {
-			Map result = new HashMap(5);
+			Map<String, Object> result = new HashMap<String, Object>(5);
 			if (resolution != null)
 				result.put(Constants.RESOLUTION_DIRECTIVE, resolution);
 			return result;
@@ -47,7 +48,7 @@ public class ImportPackageSpecificationImpl extends VersionConstraintImpl implem
 		}
 	}
 
-	public void setDirectives(Map directives) {
+	public void setDirectives(Map<String, ?> directives) {
 		synchronized (this.monitor) {
 			if (directives == null)
 				return;
@@ -73,7 +74,7 @@ public class ImportPackageSpecificationImpl extends VersionConstraintImpl implem
 		}
 	}
 
-	public Map getAttributes() {
+	public Map<String, Object> getAttributes() {
 		synchronized (this.monitor) {
 			return attributes;
 		}
@@ -120,13 +121,13 @@ public class ImportPackageSpecificationImpl extends VersionConstraintImpl implem
 		if (getVersionRange() != null && !getVersionRange().isIncluded(pkgDes.getVersion()))
 			return false;
 
-		Map importAttrs = getAttributes();
+		Map<String, ?> importAttrs = getAttributes();
 		if (importAttrs != null) {
-			Map exportAttrs = pkgDes.getAttributes();
+			Map<String, ?> exportAttrs = pkgDes.getAttributes();
 			if (exportAttrs == null)
 				return false;
-			for (Iterator i = importAttrs.keySet().iterator(); i.hasNext();) {
-				String importKey = (String) i.next();
+			for (Iterator<String> i = importAttrs.keySet().iterator(); i.hasNext();) {
+				String importKey = i.next();
 				Object importValue = importAttrs.get(importKey);
 				Object exportValue = exportAttrs.get(importKey);
 				if (exportValue == null || !importValue.equals(exportValue))
@@ -172,13 +173,52 @@ public class ImportPackageSpecificationImpl extends VersionConstraintImpl implem
 		}
 	}
 
-	protected void setAttributes(Map attributes) {
+	@SuppressWarnings("unchecked")
+	protected void setAttributes(Map<String, ?> attributes) {
 		synchronized (this.monitor) {
-			this.attributes = attributes;
+			this.attributes = (Map<String, Object>) attributes;
 		}
 	}
 
 	public String toString() {
 		return "Import-Package: " + getName() + "; version=\"" + getVersionRange() + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
+
+	@SuppressWarnings({"unchecked", "rawtypes"})
+	@Override
+	protected Map<String, String> getInternalDirectives() {
+		Map raw = getDirectives();
+		raw.put(Constants.FILTER_DIRECTIVE, createFilterDirective());
+		return raw;
+	}
+
+	private String createFilterDirective() {
+		StringBuffer filter = new StringBuffer();
+		filter.append("(&"); //$NON-NLS-1$
+		synchronized (this.monitor) {
+			addFilterAttribute(filter, BundleRevision.PACKAGE_NAMESPACE, getName(), false);
+			VersionRange range = getVersionRange();
+			if (range != null && range != VersionRange.emptyRange)
+				addFilterAttribute(filter, Constants.VERSION_ATTRIBUTE, range);
+			if (symbolicName != null)
+				addFilterAttribute(filter, Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE, symbolicName);
+			if (bundleVersionRange != null)
+				addFilterAttribute(filter, Constants.BUNDLE_VERSION_ATTRIBUTE, bundleVersionRange);
+			if (attributes != null)
+				addFilterAttributes(filter, attributes);
+		}
+		filter.append(')');
+		return filter.toString();
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Map<String, Object> getInteralAttributes() {
+		return Collections.EMPTY_MAP;
+	}
+
+	@Override
+	protected String getInternalNameSpace() {
+		return BundleRevision.PACKAGE_NAMESPACE;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java
index 7370ac9..8469f8e 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
-import java.util.Dictionary;
+import java.util.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
 import org.eclipse.osgi.framework.internal.core.FilterImpl;
 import org.eclipse.osgi.service.resolver.*;
@@ -77,20 +77,17 @@ public class NativeCodeDescriptionImpl extends BaseDescriptionImpl implements Na
 		return supplier;
 	}
 
-	public int compareTo(Object other) {
-		if (!(other instanceof NativeCodeDescription))
-			return 1;
+	public int compareTo(NativeCodeDescription otherDesc) {
 		State containingState = getSupplier().getContainingState();
 		if (containingState == null)
 			return 0;
-		Dictionary[] platformProps = containingState.getPlatformProperties();
+		Dictionary<Object, Object>[] platformProps = containingState.getPlatformProperties();
 		Version osversion;
 		try {
 			osversion = Version.parseVersion((String) platformProps[0].get(Constants.FRAMEWORK_OS_VERSION));
 		} catch (Exception e) {
 			osversion = Version.emptyVersion;
 		}
-		NativeCodeDescription otherDesc = (NativeCodeDescription) other;
 		VersionRange[] thisRanges = getOSVersions();
 		VersionRange[] otherRanges = otherDesc.getOSVersions();
 		Version thisHighest = getHighestVersionMatch(osversion, thisRanges);
@@ -209,4 +206,14 @@ public class NativeCodeDescriptionImpl extends BaseDescriptionImpl implements Na
 	void setSupplier(BundleDescription supplier) {
 		this.supplier = supplier;
 	}
+
+	@SuppressWarnings("unchecked")
+	public Map<String, String> getDeclaredDirectives() {
+		return Collections.EMPTY_MAP;
+	}
+
+	@SuppressWarnings("unchecked")
+	public Map<String, Object> getDeclaredAttributes() {
+		return Collections.EMPTY_MAP;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java
index b2401f8..ee15b9e 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,12 +56,14 @@ public class NativeCodeSpecificationImpl extends VersionConstraintImpl implement
 		State containingState = getBundle().getContainingState();
 		if (containingState == null)
 			return false;
-		Dictionary[] platformProps = containingState.getPlatformProperties();
+		Dictionary<Object, Object>[] platformProps = containingState.getPlatformProperties();
 		NativeCodeDescription nativeSupplier = (NativeCodeDescription) supplier;
 		Filter filter = nativeSupplier.getFilter();
 		boolean match = false;
 		for (int i = 0; i < platformProps.length && !match; i++) {
-			if (filter != null && !filter.matchCase(platformProps[i]))
+			@SuppressWarnings("rawtypes")
+			Dictionary props = platformProps[i];
+			if (filter != null && !filter.matchCase(props))
 				continue;
 			String[] osNames = nativeSupplier.getOSNames();
 			if (osNames.length == 0)
@@ -71,7 +73,7 @@ public class NativeCodeSpecificationImpl extends VersionConstraintImpl implement
 				Object aliasedPlatformOS = platformOS == null || !(platformOS instanceof String) ? platformOS : aliasMapper.aliasOSName((String) platformOS);
 				Object[] platformOSes;
 				if (aliasedPlatformOS instanceof Collection)
-					platformOSes = ((Collection) aliasedPlatformOS).toArray();
+					platformOSes = ((Collection<?>) aliasedPlatformOS).toArray();
 				else
 					platformOSes = aliasedPlatformOS == null ? new Object[0] : new Object[] {aliasedPlatformOS};
 				for (int j = 0; j < osNames.length && !match; j++) {
@@ -81,7 +83,7 @@ public class NativeCodeSpecificationImpl extends VersionConstraintImpl implement
 							if (platformOSes[k].equals(aliasedName))
 								match = true;
 						} else {
-							for (Iterator iAliases = ((Collection) aliasedName).iterator(); iAliases.hasNext() && !match;)
+							for (Iterator<?> iAliases = ((Collection<?>) aliasedName).iterator(); iAliases.hasNext() && !match;)
 								if (platformOSes[k].equals(iAliases.next()))
 									match = true;
 						}
@@ -154,4 +156,19 @@ public class NativeCodeSpecificationImpl extends VersionConstraintImpl implement
 
 		return sb.toString();
 	}
+
+	@SuppressWarnings("unchecked")
+	protected Map<String, String> getInternalDirectives() {
+		return Collections.EMPTY_MAP;
+	}
+
+	@SuppressWarnings("unchecked")
+	protected Map<String, Object> getInteralAttributes() {
+		return Collections.EMPTY_MAP;
+	}
+
+	@Override
+	protected String getInternalNameSpace() {
+		return null;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ReadOnlyState.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ReadOnlyState.java
index db8e7af..d0bc359 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ReadOnlyState.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ReadOnlyState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,11 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
-import java.util.Dictionary;
+import java.util.*;
 import org.eclipse.osgi.service.resolver.*;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Version;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
 
 public final class ReadOnlyState implements State {
 	private final State target;
@@ -100,6 +101,11 @@ public final class ReadOnlyState implements State {
 		throw new UnsupportedOperationException();
 	}
 
+	public StateDelta resolve(BundleDescription[] resolve, boolean discard) {
+		throw new UnsupportedOperationException();
+	}
+
+	@SuppressWarnings("deprecation")
 	public void setOverrides(Object value) {
 		throw new UnsupportedOperationException();
 	}
@@ -119,10 +125,17 @@ public final class ReadOnlyState implements State {
 		throw new UnsupportedOperationException();
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] host, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolveImports) {
 		throw new UnsupportedOperationException();
 	}
 
+	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, GenericDescription[] selectedCapabilities, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports, GenericDescription[] resolvedCapabilities, Map<String, List<StateWire>> resolvedRequirements) {
+		throw new UnsupportedOperationException();
+	}
+
 	public void removeBundleComplete(BundleDescription bundle) {
 		throw new UnsupportedOperationException();
 	}
@@ -135,14 +148,15 @@ public final class ReadOnlyState implements State {
 		throw new UnsupportedOperationException();
 	}
 
-	public boolean setPlatformProperties(Dictionary platformProperties) {
+	public boolean setPlatformProperties(Dictionary<?, ?> platformProperties) {
 		throw new UnsupportedOperationException();
 	}
 
-	public boolean setPlatformProperties(Dictionary platformProperties[]) {
+	public boolean setPlatformProperties(Dictionary<?, ?> platformProperties[]) {
 		throw new UnsupportedOperationException();
 	}
 
+	@SuppressWarnings("rawtypes")
 	public Dictionary[] getPlatformProperties() {
 		return target.getPlatformProperties();
 	}
@@ -203,4 +217,20 @@ public final class ReadOnlyState implements State {
 		throw new UnsupportedOperationException();
 	}
 
+	public BundleDescription[] getRemovalPending() {
+		throw new UnsupportedOperationException();
+	}
+
+	public Collection<BundleDescription> getDependencyClosure(Collection<BundleDescription> bundles) {
+		return target.getDependencyClosure(bundles);
+	}
+
+	public void addDynamicImportPackages(BundleDescription importingBundle, ImportPackageSpecification[] dynamicImports) {
+		throw new UnsupportedOperationException();
+	}
+
+	public void setResolverHookFactory(ResolverHookFactory hookFactory) {
+		// do nothing
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java
index a0e2318..e9131af 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,8 @@ public final class ResolverErrorImpl implements ResolverError {
 			case ResolverError.PROVIDE_BUNDLE_PERMISSION :
 			case ResolverError.FRAGMENT_BUNDLE_PERMISSION :
 			case ResolverError.HOST_BUNDLE_PERMISSION :
+			case ResolverError.REQUIRE_CAPABILITY_PERMISSION :
+			case ResolverError.PROVIDE_CAPABILITY_PERMISSION :
 				return NLS.bind(StateMsg.RES_ERROR_MISSING_PERMISSION, getData());
 			case ResolverError.MISSING_IMPORT_PACKAGE :
 			case ResolverError.MISSING_REQUIRE_BUNDLE :
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateBuilder.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateBuilder.java
index a4d3d18..60720ac 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateBuilder.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,8 +13,8 @@ package org.eclipse.osgi.internal.resolver;
 
 import java.lang.reflect.Constructor;
 import java.util.*;
+import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
-import org.eclipse.osgi.framework.internal.core.Msg;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
@@ -23,8 +23,9 @@ import org.osgi.framework.*;
 /**
  * This class builds bundle description objects from manifests
  */
-class StateBuilder {
-	static final String[] DEFINED_MATCHING_ATTRS = {Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE, Constants.BUNDLE_VERSION_ATTRIBUTE, Constants.PACKAGE_SPECIFICATION_VERSION, Constants.VERSION_ATTRIBUTE};
+public class StateBuilder {
+	static final String[] DEFINED_PACKAGE_MATCHING_ATTRS = {Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE, Constants.BUNDLE_VERSION_ATTRIBUTE, Constants.PACKAGE_SPECIFICATION_VERSION, Constants.VERSION_ATTRIBUTE};
+	static final String[] DEFINED_BSN_MATCHING_ATTRS = {Constants.BUNDLE_VERSION_ATTRIBUTE, Constants.OPTIONAL_ATTRIBUTE, Constants.REPROVIDE_ATTRIBUTE};
 	static final String[] DEFINED_OSGI_VALIDATE_HEADERS = {Constants.IMPORT_PACKAGE, Constants.DYNAMICIMPORT_PACKAGE, Constants.EXPORT_PACKAGE, Constants.FRAGMENT_HOST, Constants.BUNDLE_SYMBOLICNAME, Constants.REQUIRE_BUNDLE};
 	static final String GENERIC_REQUIRE = "Eclipse-GenericRequire"; //$NON-NLS-1$
 	static final String GENERIC_CAPABILITY = "Eclipse-GenericCapability"; //$NON-NLS-1$
@@ -35,13 +36,14 @@ class StateBuilder {
 	private static final String ATTR_TYPE_LONG = "long"; //$NON-NLS-1$
 	private static final String ATTR_TYPE_DOUBLE = "double"; //$NON-NLS-1$
 	private static final String ATTR_TYPE_SET = "set"; //$NON-NLS-1$
+	private static final String ATTR_TYPE_LIST = "List"; //$NON-NLS-1$
 	private static final String OPTIONAL_ATTR = "optional"; //$NON-NLS-1$
 	private static final String MULTIPLE_ATTR = "multiple"; //$NON-NLS-1$
 	private static final String TRUE = "true"; //$NON-NLS-1$
 
-	static BundleDescription createBundleDescription(StateImpl state, Dictionary manifest, String location) throws BundleException {
+	static BundleDescription createBundleDescription(StateImpl state, Dictionary<String, String> manifest, String location) throws BundleException {
 		BundleDescriptionImpl result = new BundleDescriptionImpl();
-		String manifestVersionHeader = (String) manifest.get(Constants.BUNDLE_MANIFESTVERSION);
+		String manifestVersionHeader = manifest.get(Constants.BUNDLE_MANIFESTVERSION);
 		boolean jreBundle = "true".equals(manifest.get(Constants.Eclipse_JREBUNDLE)); //$NON-NLS-1$
 		int manifestVersion = 1;
 		if (manifestVersionHeader != null)
@@ -50,16 +52,17 @@ class StateBuilder {
 			validateHeaders(manifest, jreBundle);
 
 		// retrieve the symbolic-name and the singleton status
-		String symbolicNameHeader = (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME);
+		String symbolicNameHeader = manifest.get(Constants.BUNDLE_SYMBOLICNAME);
 		if (symbolicNameHeader != null) {
 			ManifestElement[] symbolicNameElements = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, symbolicNameHeader);
 			if (symbolicNameElements.length > 0) {
-				result.setSymbolicName(symbolicNameElements[0].getValue());
-				String singleton = symbolicNameElements[0].getDirective(Constants.SINGLETON_DIRECTIVE);
+				ManifestElement bsnElement = symbolicNameElements[0];
+				result.setSymbolicName(bsnElement.getValue());
+				String singleton = bsnElement.getDirective(Constants.SINGLETON_DIRECTIVE);
 				if (singleton == null) // TODO this is for backward compatibility; need to check manifest version < 2 to allow this after everyone has converted to new syntax
-					singleton = symbolicNameElements[0].getAttribute(Constants.SINGLETON_DIRECTIVE);
+					singleton = bsnElement.getAttribute(Constants.SINGLETON_DIRECTIVE);
 				result.setStateBit(BundleDescriptionImpl.SINGLETON, "true".equals(singleton)); //$NON-NLS-1$
-				String fragmentAttachment = symbolicNameElements[0].getDirective(Constants.FRAGMENT_ATTACHMENT_DIRECTIVE);
+				String fragmentAttachment = bsnElement.getDirective(Constants.FRAGMENT_ATTACHMENT_DIRECTIVE);
 				if (fragmentAttachment != null) {
 					if (fragmentAttachment.equals(Constants.FRAGMENT_ATTACHMENT_RESOLVETIME)) {
 						result.setStateBit(BundleDescriptionImpl.ATTACH_FRAGMENTS, true);
@@ -69,10 +72,12 @@ class StateBuilder {
 						result.setStateBit(BundleDescriptionImpl.DYNAMIC_FRAGMENTS, false);
 					}
 				}
+				result.setDirective(Constants.MANDATORY_DIRECTIVE, ManifestElement.getArrayFromList(bsnElement.getDirective(Constants.MANDATORY_DIRECTIVE)));
+				result.setAttributes(getAttributes(bsnElement, DEFINED_BSN_MATCHING_ATTRS));
 			}
 		}
 		// retrieve other headers
-		String version = (String) manifest.get(Constants.BUNDLE_VERSION);
+		String version = manifest.get(Constants.BUNDLE_VERSION);
 		try {
 			result.setVersion((version != null) ? Version.parseVersion(version) : Version.emptyVersion);
 		} catch (IllegalArgumentException ex) {
@@ -84,38 +89,40 @@ class StateBuilder {
 			// must not fail for old R3 style bundles
 		}
 		result.setLocation(location);
-		result.setPlatformFilter((String) manifest.get(Constants.ECLIPSE_PLATFORMFILTER));
-		result.setExecutionEnvironments(ManifestElement.getArrayFromList((String) manifest.get(Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT)));
-		ManifestElement[] host = ManifestElement.parseHeader(Constants.FRAGMENT_HOST, (String) manifest.get(Constants.FRAGMENT_HOST));
+		result.setPlatformFilter(manifest.get(Constants.ECLIPSE_PLATFORMFILTER));
+		result.setExecutionEnvironments(ManifestElement.getArrayFromList(manifest.get(Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT)));
+		ManifestElement[] host = ManifestElement.parseHeader(Constants.FRAGMENT_HOST, manifest.get(Constants.FRAGMENT_HOST));
 		if (host != null)
 			result.setHost(createHostSpecification(host[0], state));
-		ManifestElement[] exports = ManifestElement.parseHeader(Constants.EXPORT_PACKAGE, (String) manifest.get(Constants.EXPORT_PACKAGE));
-		ManifestElement[] provides = ManifestElement.parseHeader(Constants.PROVIDE_PACKAGE, (String) manifest.get(Constants.PROVIDE_PACKAGE)); // TODO this is null for now until the framwork is updated to handle the new re-export semantics
+		ManifestElement[] exports = ManifestElement.parseHeader(Constants.EXPORT_PACKAGE, manifest.get(Constants.EXPORT_PACKAGE));
+		ManifestElement[] provides = ManifestElement.parseHeader(Constants.PROVIDE_PACKAGE, manifest.get(Constants.PROVIDE_PACKAGE));
 		boolean strict = state != null && state.inStrictMode();
-		ArrayList providedExports = new ArrayList(provides == null ? 0 : provides.length);
+		List<String> providedExports = new ArrayList<String>(provides == null ? 0 : provides.length);
 		result.setExportPackages(createExportPackages(exports, provides, providedExports, manifestVersion, strict));
-		ManifestElement[] imports = ManifestElement.parseHeader(Constants.IMPORT_PACKAGE, (String) manifest.get(Constants.IMPORT_PACKAGE));
-		ManifestElement[] dynamicImports = ManifestElement.parseHeader(Constants.DYNAMICIMPORT_PACKAGE, (String) manifest.get(Constants.DYNAMICIMPORT_PACKAGE));
+		ManifestElement[] imports = ManifestElement.parseHeader(Constants.IMPORT_PACKAGE, manifest.get(Constants.IMPORT_PACKAGE));
+		ManifestElement[] dynamicImports = ManifestElement.parseHeader(Constants.DYNAMICIMPORT_PACKAGE, manifest.get(Constants.DYNAMICIMPORT_PACKAGE));
 		result.setImportPackages(createImportPackages(result.getExportPackages(), providedExports, imports, dynamicImports, manifestVersion));
-		ManifestElement[] requires = ManifestElement.parseHeader(Constants.REQUIRE_BUNDLE, (String) manifest.get(Constants.REQUIRE_BUNDLE));
+		ManifestElement[] requires = ManifestElement.parseHeader(Constants.REQUIRE_BUNDLE, manifest.get(Constants.REQUIRE_BUNDLE));
 		result.setRequiredBundles(createRequiredBundles(requires));
 		String[][] genericAliases = getGenericAliases(state);
 		ManifestElement[] genericRequires = getGenericRequires(manifest, genericAliases);
-		result.setGenericRequires(createGenericRequires(genericRequires));
+		ManifestElement[] osgiRequires = ManifestElement.parseHeader(Constants.REQUIRE_CAPABILITY, manifest.get(Constants.REQUIRE_CAPABILITY));
+		result.setGenericRequires(createGenericRequires(genericRequires, osgiRequires));
 		ManifestElement[] genericCapabilities = getGenericCapabilities(manifest, genericAliases);
-		result.setGenericCapabilities(createGenericCapabilities(genericCapabilities));
-		ManifestElement[] nativeCode = ManifestElement.parseHeader(Constants.BUNDLE_NATIVECODE, (String) manifest.get(Constants.BUNDLE_NATIVECODE));
+		ManifestElement[] osgiCapabilities = ManifestElement.parseHeader(Constants.PROVIDE_CAPABILITY, manifest.get(Constants.PROVIDE_CAPABILITY));
+		result.setGenericCapabilities(createGenericCapabilities(genericCapabilities, osgiCapabilities));
+		ManifestElement[] nativeCode = ManifestElement.parseHeader(Constants.BUNDLE_NATIVECODE, manifest.get(Constants.BUNDLE_NATIVECODE));
 		result.setNativeCodeSpecification(createNativeCode(nativeCode));
 		return result;
 	}
 
-	private static ManifestElement[] getGenericRequires(Dictionary manifest, String[][] genericAliases) throws BundleException {
-		ManifestElement[] genericRequires = ManifestElement.parseHeader(GENERIC_REQUIRE, (String) manifest.get(GENERIC_REQUIRE));
-		ArrayList aliasList = null;
+	private static ManifestElement[] getGenericRequires(Dictionary<String, String> manifest, String[][] genericAliases) throws BundleException {
+		ManifestElement[] genericRequires = ManifestElement.parseHeader(GENERIC_REQUIRE, manifest.get(GENERIC_REQUIRE));
+		List<ManifestElement> aliasList = null;
 		if (genericAliases.length > 0) {
-			aliasList = new ArrayList(genericRequires == null ? 0 : genericRequires.length);
+			aliasList = new ArrayList<ManifestElement>(genericRequires == null ? 0 : genericRequires.length);
 			for (int i = 0; i < genericAliases.length; i++) {
-				ManifestElement[] aliasReqs = ManifestElement.parseHeader(genericAliases[i][1], (String) manifest.get(genericAliases[i][1]));
+				ManifestElement[] aliasReqs = ManifestElement.parseHeader(genericAliases[i][1], manifest.get(genericAliases[i][1]));
 				if (aliasReqs == null)
 					continue;
 				for (int j = 0; j < aliasReqs.length; j++) {
@@ -134,23 +141,23 @@ class StateBuilder {
 		if (genericRequires != null)
 			for (int i = 0; i < genericRequires.length; i++)
 				aliasList.add(genericRequires[i]);
-		return (ManifestElement[]) aliasList.toArray(new ManifestElement[aliasList.size()]);
+		return aliasList.toArray(new ManifestElement[aliasList.size()]);
 	}
 
-	private static ManifestElement[] getGenericCapabilities(Dictionary manifest, String[][] genericAliases) throws BundleException {
-		ManifestElement[] genericCapabilities = ManifestElement.parseHeader(GENERIC_CAPABILITY, (String) manifest.get(GENERIC_CAPABILITY));
-		ArrayList aliasList = null;
+	private static ManifestElement[] getGenericCapabilities(Dictionary<String, String> manifest, String[][] genericAliases) throws BundleException {
+		ManifestElement[] genericCapabilities = ManifestElement.parseHeader(GENERIC_CAPABILITY, manifest.get(GENERIC_CAPABILITY));
+		List<ManifestElement> aliasList = null;
 		if (genericAliases.length > 0) {
-			aliasList = new ArrayList(genericCapabilities == null ? 0 : genericCapabilities.length);
+			aliasList = new ArrayList<ManifestElement>(genericCapabilities == null ? 0 : genericCapabilities.length);
 			for (int i = 0; i < genericAliases.length; i++) {
-				ManifestElement[] aliasCapabilities = ManifestElement.parseHeader(genericAliases[i][0], (String) manifest.get(genericAliases[i][0]));
+				ManifestElement[] aliasCapabilities = ManifestElement.parseHeader(genericAliases[i][0], manifest.get(genericAliases[i][0]));
 				if (aliasCapabilities == null)
 					continue;
 				for (int j = 0; j < aliasCapabilities.length; j++) {
 					StringBuffer strBuf = new StringBuffer();
 					strBuf.append(aliasCapabilities[j].getValue()).append(':').append(genericAliases[i][2]);
-					for (Enumeration keys = aliasCapabilities[j].getKeys(); keys != null && keys.hasMoreElements();) {
-						String key = (String) keys.nextElement();
+					for (Enumeration<String> keys = aliasCapabilities[j].getKeys(); keys != null && keys.hasMoreElements();) {
+						String key = keys.nextElement();
 						strBuf.append("; ").append(key).append("=\"").append(aliasCapabilities[j].getAttribute(key)).append("\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 					}
 					ManifestElement[] withTypes = ManifestElement.parseHeader(genericAliases[i][0], strBuf.toString());
@@ -163,7 +170,7 @@ class StateBuilder {
 		if (genericCapabilities != null)
 			for (int i = 0; i < genericCapabilities.length; i++)
 				aliasList.add(genericCapabilities[i]);
-		return (ManifestElement[]) aliasList.toArray(new ManifestElement[aliasList.size()]);
+		return aliasList.toArray(new ManifestElement[aliasList.size()]);
 	}
 
 	private static String[][] getGenericAliases(StateImpl state) {
@@ -178,13 +185,13 @@ class StateBuilder {
 	}
 
 	private static String getPlatformProperty(StateImpl state, String key) {
-		Dictionary[] platformProps = state == null ? null : state.getPlatformProperties();
+		Dictionary<Object, Object>[] platformProps = state == null ? null : state.getPlatformProperties();
 		return platformProps == null || platformProps.length == 0 ? null : (String) platformProps[0].get(key);
 	}
 
-	private static void validateHeaders(Dictionary manifest, boolean jreBundle) throws BundleException {
+	private static void validateHeaders(Dictionary<String, String> manifest, boolean jreBundle) throws BundleException {
 		for (int i = 0; i < DEFINED_OSGI_VALIDATE_HEADERS.length; i++) {
-			String header = (String) manifest.get(DEFINED_OSGI_VALIDATE_HEADERS[i]);
+			String header = manifest.get(DEFINED_OSGI_VALIDATE_HEADERS[i]);
 			if (header != null) {
 				ManifestElement[] elements = ManifestElement.parseHeader(DEFINED_OSGI_VALIDATE_HEADERS[i], header);
 				checkForDuplicateDirectivesAttributes(DEFINED_OSGI_VALIDATE_HEADERS[i], elements);
@@ -217,16 +224,17 @@ class StateBuilder {
 		result.setVersionRange(getVersionRange(spec.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE)));
 		result.setExported(Constants.VISIBILITY_REEXPORT.equals(spec.getDirective(Constants.VISIBILITY_DIRECTIVE)) || "true".equals(spec.getAttribute(Constants.REPROVIDE_ATTRIBUTE))); //$NON-NLS-1$
 		result.setOptional(Constants.RESOLUTION_OPTIONAL.equals(spec.getDirective(Constants.RESOLUTION_DIRECTIVE)) || "true".equals(spec.getAttribute(Constants.OPTIONAL_ATTRIBUTE))); //$NON-NLS-1$
+		result.setAttributes(getAttributes(spec, DEFINED_BSN_MATCHING_ATTRS));
 		return result;
 	}
 
-	private static ImportPackageSpecification[] createImportPackages(ExportPackageDescription[] exported, ArrayList providedExports, ManifestElement[] imported, ManifestElement[] dynamicImported, int manifestVersion) throws BundleException {
-		ArrayList allImports = null;
+	private static ImportPackageSpecification[] createImportPackages(ExportPackageDescription[] exported, List<String> providedExports, ManifestElement[] imported, ManifestElement[] dynamicImported, int manifestVersion) {
+		List<ImportPackageSpecification> allImports = null;
 		if (manifestVersion < 2) {
 			// add implicit imports for each exported package if manifest verions is less than 2.
 			if (exported.length == 0 && imported == null && dynamicImported == null)
 				return null;
-			allImports = new ArrayList(exported.length + (imported == null ? 0 : imported.length));
+			allImports = new ArrayList<ImportPackageSpecification>(exported.length + (imported == null ? 0 : imported.length));
 			for (int i = 0; i < exported.length; i++) {
 				if (providedExports.contains(exported[i].getName()))
 					continue;
@@ -237,7 +245,7 @@ class StateBuilder {
 				allImports.add(result);
 			}
 		} else {
-			allImports = new ArrayList(imported == null ? 0 : imported.length);
+			allImports = new ArrayList<ImportPackageSpecification>(imported == null ? 0 : imported.length);
 		}
 
 		// add dynamics first so they will get overriden by static imports if
@@ -248,17 +256,17 @@ class StateBuilder {
 		if (imported != null)
 			for (int i = 0; i < imported.length; i++)
 				addImportPackages(imported[i], allImports, manifestVersion, false);
-		return (ImportPackageSpecification[]) allImports.toArray(new ImportPackageSpecification[allImports.size()]);
+		return allImports.toArray(new ImportPackageSpecification[allImports.size()]);
 	}
 
-	private static void addImportPackages(ManifestElement importPackage, ArrayList allImports, int manifestVersion, boolean dynamic) throws BundleException {
+	public static void addImportPackages(ManifestElement importPackage, List<ImportPackageSpecification> allImports, int manifestVersion, boolean dynamic) {
 		String[] importNames = importPackage.getValueComponents();
 		for (int i = 0; i < importNames.length; i++) {
 			// do not allow for multiple imports of same package of manifest version < 2
 			if (manifestVersion < 2) {
-				Iterator iter = allImports.iterator();
+				Iterator<ImportPackageSpecification> iter = allImports.iterator();
 				while (iter.hasNext())
-					if (importNames[i].equals(((ImportPackageSpecification) iter.next()).getName()))
+					if (importNames[i].equals(iter.next().getName()))
 						iter.remove();
 			}
 
@@ -271,9 +279,9 @@ class StateBuilder {
 			result.setVersionRange(getVersionRange(versionString));
 			result.setBundleSymbolicName(importPackage.getAttribute(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE));
 			result.setBundleVersionRange(getVersionRange(importPackage.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE)));
-			// only set the matching attributes if manfest version >= 2
+			// only set the matching attributes if manifest version >= 2
 			if (manifestVersion >= 2)
-				result.setAttributes(getAttributes(importPackage, DEFINED_MATCHING_ATTRS));
+				result.setAttributes(getAttributes(importPackage, DEFINED_PACKAGE_MATCHING_ATTRS));
 
 			if (dynamic)
 				result.setDirective(Constants.RESOLUTION_DIRECTIVE, ImportPackageSpecification.RESOLUTION_DYNAMIC);
@@ -291,20 +299,20 @@ class StateBuilder {
 		return result;
 	}
 
-	static ExportPackageDescription[] createExportPackages(ManifestElement[] exported, ManifestElement[] provides, ArrayList providedExports, int manifestVersion, boolean strict) throws BundleException {
+	static ExportPackageDescription[] createExportPackages(ManifestElement[] exported, ManifestElement[] provides, List<String> providedExports, int manifestVersion, boolean strict) {
 		int numExports = (exported == null ? 0 : exported.length) + (provides == null ? 0 : provides.length);
 		if (numExports == 0)
 			return null;
-		ArrayList allExports = new ArrayList(numExports);
+		List<ExportPackageDescription> allExports = new ArrayList<ExportPackageDescription>(numExports);
 		if (exported != null)
 			for (int i = 0; i < exported.length; i++)
 				addExportPackages(exported[i], allExports, manifestVersion, strict);
 		if (provides != null)
 			addProvidePackages(provides, allExports, providedExports);
-		return (ExportPackageDescription[]) allExports.toArray(new ExportPackageDescription[allExports.size()]);
+		return allExports.toArray(new ExportPackageDescription[allExports.size()]);
 	}
 
-	private static void addExportPackages(ManifestElement exportPackage, ArrayList allExports, int manifestVersion, boolean strict) throws BundleException {
+	private static void addExportPackages(ManifestElement exportPackage, List<ExportPackageDescription> allExports, int manifestVersion, boolean strict) {
 		String[] exportNames = exportPackage.getValueComponents();
 		for (int i = 0; i < exportNames.length; i++) {
 			// if we are in strict mode and the package is marked as internal, skip it.
@@ -323,13 +331,13 @@ class StateBuilder {
 			result.setDirective(Constants.FRIENDS_DIRECTIVE, ManifestElement.getArrayFromList(exportPackage.getDirective(Constants.FRIENDS_DIRECTIVE)));
 			result.setDirective(Constants.INTERNAL_DIRECTIVE, Boolean.valueOf(exportPackage.getDirective(Constants.INTERNAL_DIRECTIVE)));
 			result.setDirective(Constants.MANDATORY_DIRECTIVE, ManifestElement.getArrayFromList(exportPackage.getDirective(Constants.MANDATORY_DIRECTIVE)));
-			result.setAttributes(getAttributes(exportPackage, DEFINED_MATCHING_ATTRS));
+			result.setAttributes(getAttributes(exportPackage, DEFINED_PACKAGE_MATCHING_ATTRS));
 			allExports.add(result);
 		}
 	}
 
-	private static void addProvidePackages(ManifestElement[] provides, ArrayList allExports, ArrayList providedExports) throws BundleException {
-		ExportPackageDescription[] currentExports = (ExportPackageDescription[]) allExports.toArray(new ExportPackageDescription[allExports.size()]);
+	private static void addProvidePackages(ManifestElement[] provides, List<ExportPackageDescription> allExports, List<String> providedExports) {
+		ExportPackageDescription[] currentExports = allExports.toArray(new ExportPackageDescription[allExports.size()]);
 		for (int i = 0; i < provides.length; i++) {
 			boolean duplicate = false;
 			for (int j = 0; j < currentExports.length; j++)
@@ -346,60 +354,84 @@ class StateBuilder {
 		}
 	}
 
-	private static Map getAttributes(ManifestElement exportPackage, String[] definedAttrs) {
-		Enumeration keys = exportPackage.getKeys();
-		Map arbitraryAttrs = null;
+	private static Map<String, Object> getAttributes(ManifestElement element, String[] definedAttrs) {
+		Enumeration<String> keys = element.getKeys();
+		Map<String, Object> arbitraryAttrs = null;
 		if (keys == null)
 			return null;
 		while (keys.hasMoreElements()) {
 			boolean definedAttr = false;
-			String key = (String) keys.nextElement();
+			String key = keys.nextElement();
 			for (int i = 0; i < definedAttrs.length; i++) {
 				if (definedAttrs[i].equals(key)) {
 					definedAttr = true;
 					break;
 				}
 			}
-			String value = exportPackage.getAttribute(key);
+			String value = element.getAttribute(key);
 			int colonIndex = key.indexOf(':');
 			String type = ATTR_TYPE_STRING;
 			if (colonIndex > 0) {
-				type = key.substring(colonIndex + 1);
-				key = key.substring(0, colonIndex);
+				type = key.substring(colonIndex + 1).trim();
+				key = key.substring(0, colonIndex).trim();
 			}
 			if (!definedAttr) {
 				if (arbitraryAttrs == null)
-					arbitraryAttrs = new HashMap();
-				Object putValue = value;
-				if (ATTR_TYPE_STRING.equals(type))
-					putValue = value;
-				else if (ATTR_TYPE_DOUBLE.equals(type))
-					putValue = new Double(value);
-				else if (ATTR_TYPE_LONG.equals(type))
-					putValue = new Long(value);
-				else if (ATTR_TYPE_URI.equals(type))
-					try {
-						Class uriClazz = Class.forName("java.net.URI"); //$NON-NLS-1$
-						Constructor constructor = uriClazz.getConstructor(new Class[] {String.class});
-						putValue = constructor.newInstance(new Object[] {value});
-					} catch (ClassNotFoundException e) {
-						// oh well cannot support; just use string
-						putValue = value;
-					} catch (RuntimeException e) { // got some reflection exception
-						throw e;
-					} catch (Exception e) {
-						throw new RuntimeException(e.getMessage(), e);
-					}
-				else if (ATTR_TYPE_VERSION.equals(type))
-					putValue = new Version(value);
-				else if (ATTR_TYPE_SET.equals(type))
-					putValue = ManifestElement.getArrayFromList(value, ","); //$NON-NLS-1$
-				arbitraryAttrs.put(key, putValue);
+					arbitraryAttrs = new HashMap<String, Object>();
+				arbitraryAttrs.put(key, convertValue(type, value));
 			}
 		}
 		return arbitraryAttrs;
 	}
 
+	private static Object convertValue(String type, String value) {
+
+		if (ATTR_TYPE_STRING.equalsIgnoreCase(type))
+			return value;
+
+		String trimmed = value.trim();
+		if (ATTR_TYPE_DOUBLE.equalsIgnoreCase(type))
+			return new Double(trimmed);
+		else if (ATTR_TYPE_LONG.equalsIgnoreCase(type))
+			return new Long(trimmed);
+		else if (ATTR_TYPE_URI.equalsIgnoreCase(type))
+			try {
+				Class<?> uriClazz = Class.forName("java.net.URI"); //$NON-NLS-1$
+				Constructor<?> constructor = uriClazz.getConstructor(new Class[] {String.class});
+				return constructor.newInstance(new Object[] {trimmed});
+			} catch (ClassNotFoundException e) {
+				// oh well cannot support; just use string
+				return value;
+			} catch (RuntimeException e) { // got some reflection exception
+				throw e;
+			} catch (Exception e) {
+				throw new RuntimeException(e.getMessage(), e);
+			}
+		else if (ATTR_TYPE_VERSION.equalsIgnoreCase(type))
+			return new Version(trimmed);
+		else if (ATTR_TYPE_SET.equalsIgnoreCase(type))
+			return ManifestElement.getArrayFromList(trimmed, ","); //$NON-NLS-1$
+
+		// assume list type, anything else will throw an exception
+		Tokenizer listTokenizer = new Tokenizer(type);
+		String listType = listTokenizer.getToken("<"); //$NON-NLS-1$
+		if (!ATTR_TYPE_LIST.equalsIgnoreCase(listType))
+			throw new RuntimeException("Unsupported type: " + type); //$NON-NLS-1$
+		char c = listTokenizer.getChar();
+		String componentType = ATTR_TYPE_STRING;
+		if (c == '<') {
+			componentType = listTokenizer.getToken(">"); //$NON-NLS-1$
+			if (listTokenizer.getChar() != '>')
+				throw new RuntimeException("Invalid type, missing ending '>' : " + type); //$NON-NLS-1$
+		}
+		List<String> tokens = new Tokenizer(value).getEscapedTokens(","); //$NON-NLS-1$
+		List<Object> components = new ArrayList<Object>();
+		for (String component : tokens) {
+			components.add(convertValue(componentType, component));
+		}
+		return components;
+	}
+
 	private static HostSpecification createHostSpecification(ManifestElement spec, StateImpl state) {
 		if (spec == null)
 			return null;
@@ -410,15 +442,58 @@ class StateBuilder {
 		if (multiple == null)
 			multiple = getPlatformProperty(state, "osgi.support.multipleHosts"); //$NON-NLS-1$
 		result.setIsMultiHost("true".equals(multiple)); //$NON-NLS-1$
+		result.setAttributes(getAttributes(spec, DEFINED_BSN_MATCHING_ATTRS));
 		return result;
 	}
 
-	private static GenericSpecification[] createGenericRequires(ManifestElement[] genericRequires) throws BundleException {
-		if (genericRequires == null)
+	private static GenericSpecification[] createGenericRequires(ManifestElement[] equinoxRequires, ManifestElement[] osgiRequires) throws BundleException {
+		List<GenericSpecification> result = createEquinoxRequires(equinoxRequires);
+		result = createOSGiRequires(osgiRequires, result);
+		return result == null ? null : result.toArray(new GenericSpecification[result.size()]);
+	}
+
+	private static List<GenericSpecification> createOSGiRequires(ManifestElement[] osgiRequires, List<GenericSpecification> result) throws BundleException {
+		if (osgiRequires == null)
+			return result;
+		if (result == null)
+			result = new ArrayList<GenericSpecification>();
+		for (ManifestElement element : osgiRequires) {
+			String[] namespaces = element.getValueComponents();
+			types: for (String namespace : namespaces) {
+				String effective = element.getDirective(Constants.EFFECTIVE_DIRECTIVE);
+				if (effective != null && !Constants.EFFECTIVE_RESOLVE.equals(effective))
+					break types;
+
+				GenericSpecificationImpl spec = new GenericSpecificationImpl();
+				spec.setType(namespace);
+				String filterSpec = element.getDirective(Constants.FILTER_DIRECTIVE);
+				if (filterSpec != null) {
+					try {
+						FilterImpl filter = FilterImpl.newInstance(filterSpec);
+						spec.setMatchingFilter(filter);
+						String name = filter.getPrimaryKeyValue(namespace);
+						if (name != null)
+							spec.setName(name);
+					} catch (InvalidSyntaxException e) {
+						String message = NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, Constants.REQUIRE_CAPABILITY, element.toString());
+						throw new BundleException(message + " : filter", BundleException.MANIFEST_ERROR, e); //$NON-NLS-1$
+					}
+				}
+				String resolution = element.getDirective(Constants.RESOLUTION_DIRECTIVE);
+				if (Constants.RESOLUTION_OPTIONAL.equals(resolution))
+					spec.setResolution(GenericSpecification.RESOLUTION_OPTIONAL);
+				result.add(spec);
+			}
+		}
+		return result;
+	}
+
+	private static List<GenericSpecification> createEquinoxRequires(ManifestElement[] equinoxRequires) throws BundleException {
+		if (equinoxRequires == null)
 			return null;
-		ArrayList results = new ArrayList(genericRequires.length);
-		for (int i = 0; i < genericRequires.length; i++) {
-			String[] genericNames = genericRequires[i].getValueComponents();
+		ArrayList<GenericSpecification> results = new ArrayList<GenericSpecification>(equinoxRequires.length);
+		for (int i = 0; i < equinoxRequires.length; i++) {
+			String[] genericNames = equinoxRequires[i].getValueComponents();
 			for (int j = 0; j < genericNames.length; j++) {
 				GenericSpecificationImpl spec = new GenericSpecificationImpl();
 				int colonIdx = genericNames[j].indexOf(':');
@@ -428,13 +503,13 @@ class StateBuilder {
 				} else
 					spec.setName(genericNames[j]);
 				try {
-					spec.setMatchingFilter(genericRequires[i].getAttribute(Constants.SELECTION_FILTER_ATTRIBUTE));
+					spec.setMatchingFilter(equinoxRequires[i].getAttribute(Constants.SELECTION_FILTER_ATTRIBUTE), true);
 				} catch (InvalidSyntaxException e) {
-					String message = NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, GENERIC_REQUIRE, genericRequires[i].toString());
+					String message = NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, GENERIC_REQUIRE, equinoxRequires[i].toString());
 					throw new BundleException(message + " : " + Constants.SELECTION_FILTER_ATTRIBUTE, BundleException.MANIFEST_ERROR, e); //$NON-NLS-1$
 				}
-				String optional = genericRequires[i].getAttribute(OPTIONAL_ATTR);
-				String multiple = genericRequires[i].getAttribute(MULTIPLE_ATTR);
+				String optional = equinoxRequires[i].getAttribute(OPTIONAL_ATTR);
+				String multiple = equinoxRequires[i].getAttribute(MULTIPLE_ATTR);
 				int resolution = 0;
 				if (TRUE.equals(optional))
 					resolution |= GenericSpecification.RESOLUTION_OPTIONAL;
@@ -444,42 +519,71 @@ class StateBuilder {
 				results.add(spec);
 			}
 		}
-		return (GenericSpecification[]) results.toArray(new GenericSpecification[results.size()]);
+		return results;
+	}
+
+	private static GenericDescription[] createGenericCapabilities(ManifestElement[] equinoxCapabilities, ManifestElement[] osgiCapabilities) {
+		List<GenericDescription> result = createEquinoxCapabilities(equinoxCapabilities);
+		result = createOSGiCapabilities(osgiCapabilities, result);
+		return result == null ? null : result.toArray(new GenericDescription[result.size()]);
+	}
+
+	static List<GenericDescription> createOSGiCapabilities(ManifestElement[] osgiCapabilities, List<GenericDescription> result) {
+		if (osgiCapabilities == null)
+			return result;
+		if (result == null)
+			result = new ArrayList<GenericDescription>(osgiCapabilities.length);
+
+		for (ManifestElement element : osgiCapabilities) {
+			String[] namespaces = element.getValueComponents();
+			types: for (String namespace : namespaces) {
+				String effective = element.getDirective(Constants.EFFECTIVE_DIRECTIVE);
+				if (effective != null && !Constants.EFFECTIVE_RESOLVE.equals(effective))
+					break types; // ignore any namespace that is not effective at resolve time.
+				GenericDescriptionImpl desc = new GenericDescriptionImpl();
+				desc.setType(namespace);
+				Map<String, Object> mapAttrs = getAttributes(element, new String[0]);
+				Dictionary<String, Object> attrs = mapAttrs == null ? new Hashtable<String, Object>() : new Hashtable<String, Object>(mapAttrs);
+				desc.setAttributes(attrs);
+				Map<String, String> directives = new HashMap<String, String>();
+				Enumeration<String> keys = element.getDirectiveKeys();
+				if (keys != null)
+					for (keys = element.getDirectiveKeys(); keys.hasMoreElements();) {
+						String key = keys.nextElement();
+						directives.put(key, element.getDirective(key));
+					}
+				desc.setDirectives(directives);
+				result.add(desc);
+			}
+		}
+		return result;
 	}
 
-	private static GenericDescription[] createGenericCapabilities(ManifestElement[] genericCapabilities) {
-		if (genericCapabilities == null)
+	private static List<GenericDescription> createEquinoxCapabilities(ManifestElement[] equinoxCapabilities) {
+		if (equinoxCapabilities == null)
 			return null;
-		ArrayList results = new ArrayList(genericCapabilities.length);
-		for (int i = 0; i < genericCapabilities.length; i++) {
-			String[] genericNames = genericCapabilities[i].getValueComponents();
+		ArrayList<GenericDescription> results = new ArrayList<GenericDescription>(equinoxCapabilities.length);
+		for (int i = 0; i < equinoxCapabilities.length; i++) {
+			String[] genericNames = equinoxCapabilities[i].getValueComponents();
 			for (int j = 0; j < genericNames.length; j++) {
 				GenericDescriptionImpl desc = new GenericDescriptionImpl();
+				String name = genericNames[j];
 				int colonIdx = genericNames[j].indexOf(':');
 				if (colonIdx > 0) {
-					desc.setName(genericNames[j].substring(0, colonIdx));
+					name = genericNames[j].substring(0, colonIdx);
 					desc.setType(genericNames[j].substring(colonIdx + 1));
-				} else
-					desc.setName(genericNames[j]);
-				String versionString = genericCapabilities[i].getAttribute(Constants.VERSION_ATTRIBUTE);
-				if (versionString != null)
-					desc.setVersion(Version.parseVersion(versionString));
-				Map mapAttrs = getAttributes(genericCapabilities[i], new String[] {Constants.VERSION_ATTRIBUTE});
-				Object version = mapAttrs == null ? null : mapAttrs.remove(Constants.VERSION_ATTRIBUTE);
-				if (version instanceof Version) // this is just incase someone uses version:version as a key
-					desc.setVersion((Version) version);
-				Dictionary attrs = new Hashtable();
-				if (mapAttrs != null) {
-					for (Iterator keys = mapAttrs.keySet().iterator(); keys.hasNext();) {
-						Object key = keys.next();
-						attrs.put(key, mapAttrs.get(key));
-					}
 				}
+				Map<String, Object> mapAttrs = getAttributes(equinoxCapabilities[i], new String[] {Constants.VERSION_ATTRIBUTE});
+				Dictionary<String, Object> attrs = mapAttrs == null ? new Hashtable<String, Object>() : new Hashtable<String, Object>(mapAttrs);
+				attrs.put(desc.getType(), name);
+				String versionString = equinoxCapabilities[i].getAttribute(Constants.VERSION_ATTRIBUTE);
+				if (versionString != null)
+					attrs.put(Constants.VERSION_ATTRIBUTE, Version.parseVersion(versionString));
 				desc.setAttributes(attrs);
 				results.add(desc);
 			}
 		}
-		return (GenericDescription[]) results.toArray(new GenericDescription[results.size()]);
+		return results;
 	}
 
 	private static NativeCodeSpecification createNativeCode(ManifestElement[] nativeCode) throws BundleException {
@@ -532,11 +636,11 @@ class StateBuilder {
 		return new VersionRange(versionRange);
 	}
 
-	private static void checkImportExportSyntax(String headerKey, ManifestElement[] elements, boolean export, boolean dynamic, boolean jreBundle) throws BundleException {
+	public static void checkImportExportSyntax(String headerKey, ManifestElement[] elements, boolean export, boolean dynamic, boolean jreBundle) throws BundleException {
 		if (elements == null)
 			return;
 		int length = elements.length;
-		Set packages = new HashSet(length);
+		Set<String> packages = new HashSet<String>(length);
 		for (int i = 0; i < length; i++) {
 			// check for duplicate imports
 			String[] packageNames = elements[i].getValueComponents();
@@ -577,10 +681,10 @@ class StateBuilder {
 	private static void checkForDuplicateDirectivesAttributes(String headerKey, ManifestElement[] elements) throws BundleException {
 		// check for duplicate directives
 		for (int i = 0; i < elements.length; i++) {
-			Enumeration directiveKeys = elements[i].getDirectiveKeys();
+			Enumeration<String> directiveKeys = elements[i].getDirectiveKeys();
 			if (directiveKeys != null) {
 				while (directiveKeys.hasMoreElements()) {
-					String key = (String) directiveKeys.nextElement();
+					String key = directiveKeys.nextElement();
 					String[] directives = elements[i].getDirectives(key);
 					if (directives.length > 1) {
 						String message = NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, headerKey, elements[i].toString());
@@ -588,10 +692,10 @@ class StateBuilder {
 					}
 				}
 			}
-			Enumeration attrKeys = elements[i].getKeys();
+			Enumeration<String> attrKeys = elements[i].getKeys();
 			if (attrKeys != null) {
 				while (attrKeys.hasMoreElements()) {
-					String key = (String) attrKeys.nextElement();
+					String key = attrKeys.nextElement();
 					String[] attrs = elements[i].getAttributes(key);
 					if (attrs.length > 1) {
 						String message = NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, headerKey, elements[i].toString());
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateDeltaImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateDeltaImpl.java
index cf06fdd..966a022 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateDeltaImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateDeltaImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,8 @@ final class StateDeltaImpl implements StateDelta {
 
 	private final State state;
 
-	private final Map changes = new HashMap();
+	private final Map<BundleDescription, BundleDelta> changes = new HashMap<BundleDescription, BundleDelta>();
+	private ResolverHookException error;
 
 	public StateDeltaImpl(State state) {
 		this.state = state;
@@ -30,19 +31,19 @@ final class StateDeltaImpl implements StateDelta {
 
 	public BundleDelta[] getChanges() {
 		synchronized (this.changes) {
-			return (BundleDelta[]) changes.values().toArray(new BundleDelta[changes.size()]);
+			return changes.values().toArray(new BundleDelta[changes.size()]);
 		}
 	}
 
 	public BundleDelta[] getChanges(int mask, boolean exact) {
 		synchronized (this.changes) {
-			List result = new ArrayList();
-			for (Iterator changesIter = changes.values().iterator(); changesIter.hasNext();) {
-				BundleDelta change = (BundleDelta) changesIter.next();
+			List<BundleDelta> result = new ArrayList<BundleDelta>();
+			for (Iterator<BundleDelta> changesIter = changes.values().iterator(); changesIter.hasNext();) {
+				BundleDelta change = changesIter.next();
 				if (mask == change.getType() || (!exact && (change.getType() & mask) != 0))
 					result.add(change);
 			}
-			return (BundleDelta[]) result.toArray(new BundleDelta[result.size()]);
+			return result.toArray(new BundleDelta[result.size()]);
 		}
 	}
 
@@ -50,6 +51,14 @@ final class StateDeltaImpl implements StateDelta {
 		return state;
 	}
 
+	public ResolverHookException getResovlerHookException() {
+		return error;
+	}
+
+	void setResolverHookException(ResolverHookException error) {
+		this.error = error;
+	}
+
 	void recordBundleAdded(BundleDescriptionImpl added) {
 		synchronized (this.changes) {
 			BundleDeltaImpl change = (BundleDeltaImpl) changes.get(added);
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
index e4ee07b..df09e9a 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,12 @@ package org.eclipse.osgi.internal.resolver;
 
 import java.util.*;
 import org.eclipse.osgi.framework.internal.core.Constants;
+import org.eclipse.osgi.internal.baseadaptor.ArrayMap;
 import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.hooks.resolver.ResolverHook;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRevision;
 
 /**
  * An implementation for the StateHelper API. Access to this implementation is
@@ -30,16 +35,16 @@ public final class StateHelperImpl implements StateHelper {
 		if (bundles == null || bundles.length == 0)
 			return new BundleDescription[0];
 
-		Set reachable = new HashSet(bundles.length);
+		Set<BundleDescription> reachable = new HashSet<BundleDescription>(bundles.length);
 		for (int i = 0; i < bundles.length; i++) {
 			if (!bundles[i].isResolved())
 				continue;
 			addDependentBundles(bundles[i], reachable);
 		}
-		return (BundleDescription[]) reachable.toArray(new BundleDescription[reachable.size()]);
+		return reachable.toArray(new BundleDescription[reachable.size()]);
 	}
 
-	private void addDependentBundles(BundleDescription bundle, Set reachable) {
+	private void addDependentBundles(BundleDescription bundle, Set<BundleDescription> reachable) {
 		if (reachable.contains(bundle))
 			return;
 		reachable.add(bundle);
@@ -51,32 +56,32 @@ public final class StateHelperImpl implements StateHelper {
 	public BundleDescription[] getPrerequisites(BundleDescription[] bundles) {
 		if (bundles == null || bundles.length == 0)
 			return new BundleDescription[0];
-		Set reachable = new HashSet(bundles.length);
+		Set<BundleDescription> reachable = new HashSet<BundleDescription>(bundles.length);
 		for (int i = 0; i < bundles.length; i++)
 			addPrerequisites(bundles[i], reachable);
-		return (BundleDescription[]) reachable.toArray(new BundleDescription[reachable.size()]);
+		return reachable.toArray(new BundleDescription[reachable.size()]);
 	}
 
-	private void addPrerequisites(BundleDescription bundle, Set reachable) {
+	private void addPrerequisites(BundleDescription bundle, Set<BundleDescription> reachable) {
 		if (reachable.contains(bundle))
 			return;
 		reachable.add(bundle);
-		List depList = ((BundleDescriptionImpl) bundle).getBundleDependencies();
-		BundleDescription[] dependencies = (BundleDescription[]) depList.toArray(new BundleDescription[depList.size()]);
+		List<BundleDescription> depList = ((BundleDescriptionImpl) bundle).getBundleDependencies();
+		BundleDescription[] dependencies = depList.toArray(new BundleDescription[depList.size()]);
 		for (int i = 0; i < dependencies.length; i++)
 			addPrerequisites(dependencies[i], reachable);
 	}
 
-	private Map getExportedPackageMap(State state) {
-		Map result = new HashMap(11);
+	private Map<String, List<ExportPackageDescription>> getExportedPackageMap(State state) {
+		Map<String, List<ExportPackageDescription>> result = new HashMap<String, List<ExportPackageDescription>>();
 		BundleDescription[] bundles = state.getBundles();
 		for (int i = 0; i < bundles.length; i++) {
 			ExportPackageDescription[] packages = bundles[i].getExportPackages();
 			for (int j = 0; j < packages.length; j++) {
 				ExportPackageDescription description = packages[j];
-				Set exports = (Set) result.get(description.getName());
+				List<ExportPackageDescription> exports = result.get(description.getName());
 				if (exports == null) {
-					exports = new HashSet(1);
+					exports = new ArrayList<ExportPackageDescription>();
 					result.put(description.getName(), exports);
 				}
 				exports.add(description);
@@ -85,8 +90,8 @@ public final class StateHelperImpl implements StateHelper {
 		return result;
 	}
 
-	private Map getGenericsMap(State state, boolean resolved) {
-		Map result = new HashMap(11);
+	private Map<String, List<GenericDescription>> getGenericsMap(State state, boolean resolved) {
+		Map<String, List<GenericDescription>> result = new HashMap<String, List<GenericDescription>>();
 		BundleDescription[] bundles = state.getBundles();
 		for (int i = 0; i < bundles.length; i++) {
 			if (resolved && !bundles[i].isResolved())
@@ -94,56 +99,57 @@ public final class StateHelperImpl implements StateHelper {
 			GenericDescription[] generics = bundles[i].getGenericCapabilities();
 			for (int j = 0; j < generics.length; j++) {
 				GenericDescription description = generics[j];
-				Set genericSet = (Set) result.get(description.getName());
-				if (genericSet == null) {
-					genericSet = new HashSet(1);
-					result.put(description.getName(), genericSet);
+				List<GenericDescription> genericList = result.get(description.getName());
+				if (genericList == null) {
+					genericList = new ArrayList<GenericDescription>(1);
+					result.put(description.getName(), genericList);
 				}
-				genericSet.add(description);
+				genericList.add(description);
 			}
 		}
 		return result;
 	}
 
-	private VersionConstraint[] getUnsatisfiedLeaves(State state, BundleDescription[] bundles) {
-		Map packages = getExportedPackageMap(state);
-		Map generics = getGenericsMap(state, false);
-		HashSet result = new HashSet(11);
-		ArrayList bundleList = new ArrayList(bundles.length);
+	private VersionConstraint[] getUnsatisfiedLeaves(State state, BundleDescription[] bundles, ResolverHook hook) {
+		Map<String, List<ExportPackageDescription>> packages = getExportedPackageMap(state);
+		Map<String, List<GenericDescription>> generics = getGenericsMap(state, false);
+		Set<VersionConstraint> result = new HashSet<VersionConstraint>();
+		List<BundleDescription> bundleList = new ArrayList<BundleDescription>(bundles.length);
 		for (int i = 0; i < bundles.length; i++)
 			bundleList.add(bundles[i]);
 		for (int i = 0; i < bundleList.size(); i++) {
-			BundleDescription description = (BundleDescription) bundleList.get(i);
-			VersionConstraint[] constraints = getUnsatisfiedConstraints(description);
+			BundleDescription description = bundleList.get(i);
+			VersionConstraint[] constraints = getUnsatisfiedConstraints(description, hook);
 			for (int j = 0; j < constraints.length; j++) {
 				VersionConstraint constraint = constraints[j];
-				BaseDescription satisfied = null;
+				Collection<BaseDescription> satisfied = null;
 				if (constraint instanceof BundleSpecification || constraint instanceof HostSpecification) {
 					BundleDescription[] suppliers = state.getBundles(constraint.getName());
-					for (int k = 0; k < suppliers.length && satisfied == null; k++)
-						satisfied = constraint.isSatisfiedBy(suppliers[k]) ? suppliers[k] : null;
+					satisfied = getPossibleCandidates(constraint, suppliers, constraint instanceof HostSpecification ? BundleRevision.HOST_NAMESPACE : null, hook, false);
 				} else if (constraint instanceof ImportPackageSpecification) {
-					Set exports = (Set) packages.get(constraint.getName());
+					List<ExportPackageDescription> exports = packages.get(constraint.getName());
 					if (exports != null)
-						for (Iterator iter = exports.iterator(); iter.hasNext() && satisfied == null;) {
-							ExportPackageDescription exportDesc = (ExportPackageDescription) iter.next();
-							satisfied = constraint.isSatisfiedBy(exportDesc) ? exportDesc : null;
-						}
+						satisfied = getPossibleCandidates(constraint, exports.toArray(new BaseDescription[exports.size()]), null, hook, false);
 				} else if (constraint instanceof GenericSpecification) {
-					Set genericSet = (Set) generics.get(constraint.getName());
+					List<GenericDescription> genericSet = generics.get(constraint.getName());
 					if (genericSet != null)
-						for (Iterator iter = genericSet.iterator(); iter.hasNext() && satisfied == null;) {
-							GenericDescription genDesc = (GenericDescription) iter.next();
-							satisfied = constraint.isSatisfiedBy(genDesc) ? genDesc : null;
-						}
+						satisfied = getPossibleCandidates(constraint, genericSet.toArray(new BaseDescription[genericSet.size()]), null, hook, false);
 				}
-				if (satisfied == null)
+				if (satisfied == null || satisfied.isEmpty()) {
 					result.add(constraint);
-				else if (!satisfied.getSupplier().isResolved() && !bundleList.contains(satisfied.getSupplier()))
-					bundleList.add(satisfied.getSupplier());
+				} else {
+					for (BaseDescription baseDescription : satisfied) {
+						if (!baseDescription.getSupplier().isResolved() && !bundleList.contains(baseDescription.getSupplier())) {
+							bundleList.add(baseDescription.getSupplier());
+							// TODO only add the first supplier that is not resolved; 
+							// this is the previous behavior before the fix for bug 333071; should consider adding all unresolved
+							break;
+						}
+					}
+				}
 			}
 		}
-		return (VersionConstraint[]) result.toArray(new VersionConstraint[result.size()]);
+		return result.toArray(new VersionConstraint[result.size()]);
 
 	}
 
@@ -151,93 +157,152 @@ public final class StateHelperImpl implements StateHelper {
 		if (bundles.length == 0)
 			return new VersionConstraint[0];
 		State state = bundles[0].getContainingState();
-		return getUnsatisfiedLeaves(state, bundles);
+		ResolverHook hook = beginHook(state, Arrays.asList((BundleRevision[]) bundles));
+		try {
+			return getUnsatisfiedLeaves(state, bundles, hook);
+		} finally {
+			if (hook != null)
+				hook.end();
+		}
+	}
+
+	private ResolverHook beginHook(State state, Collection<BundleRevision> triggers) {
+		if (!(state instanceof StateImpl))
+			return null;
+		ResolverHookFactory hookFactory = ((StateImpl) state).getResolverHookFactory();
+		return hookFactory == null ? null : hookFactory.begin(triggers);
 	}
 
 	/**
 	 * @see StateHelper
 	 */
 	public VersionConstraint[] getUnsatisfiedConstraints(BundleDescription bundle) {
+		ResolverHook hook = beginHook(bundle.getContainingState(), Arrays.asList(new BundleRevision[] {bundle}));
+		try {
+			return getUnsatisfiedConstraints(bundle, hook);
+		} finally {
+			if (hook != null)
+				hook.end();
+		}
+	}
+
+	private VersionConstraint[] getUnsatisfiedConstraints(BundleDescription bundle, ResolverHook hook) {
 		State containingState = bundle.getContainingState();
 		if (containingState == null)
 			// it is a bug in the client to call this method when not attached to a state
-			throw new IllegalStateException("Does not belong to a state"); //$NON-NLS-1$		
-		List unsatisfied = new ArrayList();
+			throw new IllegalStateException("Does not belong to a state"); //$NON-NLS-1$
+		List<VersionConstraint> unsatisfied = new ArrayList<VersionConstraint>();
 		HostSpecification host = bundle.getHost();
 		if (host != null)
-			if (!host.isResolved() && !isResolvable(host))
+			if (!host.isResolved() && !isBundleConstraintResolvable(host, BundleRevision.HOST_NAMESPACE, hook))
 				unsatisfied.add(host);
 		BundleSpecification[] requiredBundles = bundle.getRequiredBundles();
 		for (int i = 0; i < requiredBundles.length; i++)
-			if (!requiredBundles[i].isResolved() && !isResolvable(requiredBundles[i]))
+			if (!requiredBundles[i].isResolved() && !isBundleConstraintResolvable(requiredBundles[i], null, hook))
 				unsatisfied.add(requiredBundles[i]);
 		ImportPackageSpecification[] packages = bundle.getImportPackages();
 		for (int i = 0; i < packages.length; i++)
-			if (!packages[i].isResolved() && !isResolvable(packages[i]))
+			if (!packages[i].isResolved() && !isResolvable(packages[i], hook)) {
+				if (bundle.isResolved()) {
+					// if the bundle is resolved the check if the import is option.
+					// Here we assume that an unresolved mandatory import must have been dropped
+					// in favor of an export from the same bundle (bug 338240)
+					if (!ImportPackageSpecification.RESOLUTION_OPTIONAL.equals(packages[i].getDirective(Constants.RESOLUTION_DIRECTIVE)))
+						continue;
+				}
 				unsatisfied.add(packages[i]);
+			}
 		GenericSpecification[] generics = bundle.getGenericRequires();
 		for (int i = 0; i < generics.length; i++)
-			if (!generics[i].isResolved() && !isResolvable(generics[i]))
+			if (!generics[i].isResolved() && !isResolvable(generics[i], hook))
 				unsatisfied.add(generics[i]);
 		NativeCodeSpecification nativeCode = bundle.getNativeCodeSpecification();
 		if (nativeCode != null && !nativeCode.isResolved())
 			unsatisfied.add(nativeCode);
-		return (VersionConstraint[]) unsatisfied.toArray(new VersionConstraint[unsatisfied.size()]);
+		return unsatisfied.toArray(new VersionConstraint[unsatisfied.size()]);
+	}
+
+	private ArrayMap<BundleCapability, BaseDescription> asArrayMap(List<BaseDescription> descriptions, String namespace) {
+		List<BundleCapability> capabilities = new ArrayList<BundleCapability>(descriptions.size());
+		for (BaseDescription description : descriptions)
+			capabilities.add(((BaseDescriptionImpl) description).getCapability(namespace));
+		return new ArrayMap<BundleCapability, BaseDescription>(capabilities, descriptions);
+	}
+
+	private List<BaseDescription> getPossibleCandidates(VersionConstraint constraint, BaseDescription[] descriptions, String namespace, ResolverHook hook, boolean resolved) {
+		List<BaseDescription> candidates = new ArrayList<BaseDescription>();
+		for (int i = 0; i < descriptions.length; i++)
+			if ((!resolved || descriptions[i].getSupplier().isResolved()) && constraint.isSatisfiedBy(descriptions[i]))
+				candidates.add(descriptions[i]);
+		if (hook != null)
+			hook.filterMatches(constraint.getRequirement(), asArrayMap(candidates, namespace));
+		return candidates;
 	}
 
 	/**
 	 * @see StateHelper
 	 */
 	public boolean isResolvable(ImportPackageSpecification constraint) {
+		ResolverHook hook = beginHook(constraint.getBundle().getContainingState(), Arrays.asList(new BundleRevision[] {constraint.getBundle()}));
+		try {
+			return isResolvable(constraint, hook);
+		} finally {
+			if (hook != null)
+				hook.end();
+		}
+	}
+
+	private boolean isResolvable(ImportPackageSpecification constraint, ResolverHook hook) {
 		ExportPackageDescription[] exports = constraint.getBundle().getContainingState().getExportedPackages();
-		for (int i = 0; i < exports.length; i++)
-			if (constraint.isSatisfiedBy(exports[i]))
-				return true;
-		return false;
+		return getPossibleCandidates(constraint, exports, null, hook, true).size() > 0;
 	}
 
-	private boolean isResolvable(GenericSpecification constraint) {
-		Map genericCapabilities = getGenericsMap(constraint.getBundle().getContainingState(), true);
-		Set genericSet = (Set) genericCapabilities.get(constraint.getName());
-		if (genericSet == null)
+	private boolean isResolvable(GenericSpecification constraint, ResolverHook hook) {
+		Map<String, List<GenericDescription>> genericCapabilities = getGenericsMap(constraint.getBundle().getContainingState(), true);
+		List<GenericDescription> genericList = genericCapabilities.get(constraint.getName());
+		if (genericList == null)
 			return false;
-		for (Iterator iter = genericSet.iterator(); iter.hasNext();)
-			if (constraint.isSatisfiedBy((GenericDescription) iter.next()))
-				return true;
-		return false;
+		return getPossibleCandidates(constraint, genericList.toArray(new BaseDescription[genericList.size()]), null, hook, true).size() > 0;
 	}
 
 	/**
 	 * @see StateHelper
 	 */
 	public boolean isResolvable(BundleSpecification specification) {
-		return isBundleConstraintResolvable(specification);
+		return isBundleConstraintResolvable(specification, null);
 	}
 
 	/**
 	 * @see StateHelper
 	 */
 	public boolean isResolvable(HostSpecification specification) {
-		return isBundleConstraintResolvable(specification);
+		return isBundleConstraintResolvable(specification, BundleRevision.HOST_NAMESPACE);
 	}
 
 	/*
 	 * Returns whether a bundle specification/host specification can be resolved.
 	 */
-	private boolean isBundleConstraintResolvable(VersionConstraint constraint) {
+	private boolean isBundleConstraintResolvable(VersionConstraint constraint, String namespace) {
+		ResolverHook hook = beginHook(constraint.getBundle().getContainingState(), Arrays.asList(new BundleRevision[] {constraint.getBundle()}));
+		try {
+			return isBundleConstraintResolvable(constraint, namespace, hook);
+		} finally {
+			if (hook != null)
+				hook.end();
+		}
+	}
+
+	private boolean isBundleConstraintResolvable(VersionConstraint constraint, String namespace, ResolverHook hook) {
 		BundleDescription[] availableBundles = constraint.getBundle().getContainingState().getBundles(constraint.getName());
-		for (int i = 0; i < availableBundles.length; i++)
-			if (availableBundles[i].isResolved() && constraint.isSatisfiedBy(availableBundles[i]))
-				return true;
-		return false;
+		return getPossibleCandidates(constraint, availableBundles, namespace, hook, true).size() > 0;
 	}
 
 	public Object[][] sortBundles(BundleDescription[] toSort) {
-		List references = new ArrayList(toSort.length);
+		List<Object[]> references = new ArrayList<Object[]>(toSort.length);
 		for (int i = 0; i < toSort.length; i++)
 			if (toSort[i].isResolved())
 				buildReferences(toSort[i], references);
-		Object[][] cycles = ComputeNodeOrder.computeNodeOrder(toSort, (Object[][]) references.toArray(new Object[references.size()][]));
+		Object[][] cycles = ComputeNodeOrder.computeNodeOrder(toSort, references.toArray(new Object[references.size()][]));
 		if (cycles.length == 0)
 			return cycles;
 		// fix up host/fragment orders (bug 184127)
@@ -271,7 +336,7 @@ public final class StateHelperImpl implements StateHelper {
 		}
 	}
 
-	private void buildReferences(BundleDescription description, List references) {
+	private void buildReferences(BundleDescription description, List<Object[]> references) {
 		HostSpecification host = description.getHost();
 		// it is a fragment
 		if (host != null) {
@@ -288,12 +353,12 @@ public final class StateHelperImpl implements StateHelper {
 		}
 	}
 
-	private void buildReferences(BundleDescription description, List dependencies, List references) {
-		for (Iterator iter = dependencies.iterator(); iter.hasNext();)
-			addReference(description, (BundleDescription) iter.next(), references);
+	private void buildReferences(BundleDescription description, List<BundleDescription> dependencies, List<Object[]> references) {
+		for (Iterator<BundleDescription> iter = dependencies.iterator(); iter.hasNext();)
+			addReference(description, iter.next(), references);
 	}
 
-	private void addReference(BundleDescription description, BundleDescription reference, List references) {
+	private void addReference(BundleDescription description, BundleDescription reference, List<Object[]> references) {
 		// build the reference from the description
 		if (description == reference || reference == null)
 			return;
@@ -318,9 +383,9 @@ public final class StateHelperImpl implements StateHelper {
 		if (state != null)
 			strict = state.inStrictMode();
 		BundleDescription host = (BundleDescription) (bundle.getHost() == null ? bundle : bundle.getHost().getSupplier());
-		ArrayList orderedPkgList = new ArrayList(); // list of all ExportPackageDescriptions that are visible (ArrayList is used to keep order)
-		Set pkgSet = new HashSet();
-		Set importList = new HashSet(); // list of package names which are directly imported
+		List<ExportPackageDescription> orderedPkgList = new ArrayList<ExportPackageDescription>(); // list of all ExportPackageDescriptions that are visible (ArrayList is used to keep order)
+		Set<ExportPackageDescription> pkgSet = new HashSet<ExportPackageDescription>();
+		Set<String> importList = new HashSet<String>(); // list of package names which are directly imported
 		// get the list of directly imported packages first.
 		ImportsHolder imports = new ImportsHolder(bundle, options);
 		for (int i = 0; i < imports.getSize(); i++) {
@@ -333,9 +398,9 @@ public final class StateHelperImpl implements StateHelper {
 			}
 			// get the sources of the required bundles of the exporter
 			BundleSpecification[] requires = pkgSupplier.getExporter().getRequiredBundles();
-			Set visited = new HashSet();
+			Set<BundleDescription> visited = new HashSet<BundleDescription>();
 			visited.add(bundle); // always add self to prevent recursing into self
-			Set importNames = new HashSet(1);
+			Set<String> importNames = new HashSet<String>(1);
 			importNames.add(imports.getName(i));
 			for (int j = 0; j < requires.length; j++) {
 				BundleDescription bundleSupplier = (BundleDescription) requires[j].getSupplier();
@@ -347,46 +412,46 @@ public final class StateHelperImpl implements StateHelper {
 		}
 		// now find all the packages that are visible from required bundles
 		RequiresHolder requires = new RequiresHolder(bundle, options);
-		Set visited = new HashSet(requires.getSize());
+		Set<BundleDescription> visited = new HashSet<BundleDescription>(requires.getSize());
 		visited.add(bundle); // always add self to prevent recursing into self
 		for (int i = 0; i < requires.getSize(); i++) {
 			BundleDescription bundleSupplier = requires.getSupplier(i);
 			if (bundleSupplier != null)
 				getPackages(bundleSupplier, bundle.getSymbolicName(), importList, orderedPkgList, pkgSet, visited, strict, null, options);
 		}
-		return (ExportPackageDescription[]) orderedPkgList.toArray(new ExportPackageDescription[orderedPkgList.size()]);
+		return orderedPkgList.toArray(new ExportPackageDescription[orderedPkgList.size()]);
 	}
 
-	private void getPackages(BundleDescription requiredBundle, String symbolicName, Set importList, ArrayList orderedPkgList, Set pkgSet, Set visited, boolean strict, Set pkgNames, int options) {
+	private void getPackages(BundleDescription requiredBundle, String symbolicName, Set<String> importList, List<ExportPackageDescription> orderedPkgList, Set<ExportPackageDescription> pkgSet, Set<BundleDescription> visited, boolean strict, Set<String> pkgNames, int options) {
 		if (visited.contains(requiredBundle))
 			return; // prevent duplicate entries and infinate loops incase of cycles
 		visited.add(requiredBundle);
 		// add all the exported packages from the required bundle; take x-friends into account.
 		ExportPackageDescription[] substitutedExports = requiredBundle.getSubstitutedExports();
 		ExportPackageDescription[] imports = requiredBundle.getResolvedImports();
-		Set substituteNames = null; // a temporary set used to scope packages we get from getPackages
+		Set<String> substituteNames = null; // a temporary set used to scope packages we get from getPackages
 		for (int i = 0; i < substitutedExports.length; i++) {
 			if ((pkgNames == null || pkgNames.contains(substitutedExports[i].getName()))) {
 				for (int j = 0; j < imports.length; j++) {
 					if (substitutedExports[i].getName().equals(imports[j].getName()) && !pkgSet.contains(imports[j])) {
 						if (substituteNames == null)
-							substituteNames = new HashSet(1);
+							substituteNames = new HashSet<String>(1);
 						else
 							substituteNames.clear();
 						// substituteNames is a set of one package containing the single substitute we are trying to get the source for
 						substituteNames.add(substitutedExports[i].getName());
-						getPackages(imports[j].getSupplier(), symbolicName, importList, orderedPkgList, pkgSet, new HashSet(0), strict, substituteNames, options);
+						getPackages(imports[j].getSupplier(), symbolicName, importList, orderedPkgList, pkgSet, new HashSet<BundleDescription>(0), strict, substituteNames, options);
 					}
 				}
 			}
 		}
-		importList = substitutedExports.length == 0 ? importList : new HashSet(importList);
+		importList = substitutedExports.length == 0 ? importList : new HashSet<String>(importList);
 		for (int i = 0; i < substitutedExports.length; i++)
 			// we add the package name to the import list to prevent required bundles from adding more sources
 			importList.add(substitutedExports[i].getName());
 
 		ExportPackageDescription[] exports = requiredBundle.getSelectedExports();
-		HashSet exportNames = new HashSet(exports.length); // set is used to improve performance of duplicate check.
+		HashSet<String> exportNames = new HashSet<String>(exports.length); // set is used to improve performance of duplicate check.
 		for (int i = 0; i < exports.length; i++)
 			if ((pkgNames == null || pkgNames.contains(exports[i].getName())) && !isSystemExport(exports[i], options) && isFriend(symbolicName, exports[i], strict) && !importList.contains(exports[i].getName()) && !pkgSet.contains(exports[i])) {
 				if (!exportNames.contains(exports[i].getName())) {
@@ -406,7 +471,7 @@ public final class StateHelperImpl implements StateHelper {
 				getPackages(requiredBundles.getSupplier(i), symbolicName, importList, orderedPkgList, pkgSet, visited, strict, pkgNames, options);
 			} else if (exportNames.size() > 0) {
 				// adding any exports from required bundles which we also export
-				Set tmpVisited = new HashSet();
+				Set<BundleDescription> tmpVisited = new HashSet<BundleDescription>();
 				getPackages(requiredBundles.getSupplier(i), symbolicName, importList, orderedPkgList, pkgSet, tmpVisited, strict, exportNames, options);
 			}
 		}
@@ -497,14 +562,14 @@ class RequiresHolder {
 	private final BundleSpecification[] requiredBundles;
 	private final BundleDescription[] resolvedRequires;
 	private final boolean isUsingResolved;
-	private final Map resolvedBundlesExported;
+	private final Map<BundleDescription, Boolean> resolvedBundlesExported;
 
 	// Depending on the options used, either requiredBundles or resolvedRequires is initialize, but not both.
 	RequiresHolder(BundleDescription bundle, int options) {
 		isUsingResolved = (options & StateHelper.VISIBLE_INCLUDE_ALL_HOST_WIRES) != 0;
 		if (isUsingResolved) {
 			requiredBundles = null;
-			resolvedBundlesExported = new HashMap();
+			resolvedBundlesExported = new HashMap<BundleDescription, Boolean>();
 			resolvedRequires = bundle.getResolvedRequires();
 			determineRequiresVisibility(bundle);
 		} else {
@@ -522,7 +587,7 @@ class RequiresHolder {
 
 	boolean isExported(int index) {
 		if (isUsingResolved)
-			return ((Boolean) resolvedBundlesExported.get(resolvedRequires[index])).booleanValue();
+			return resolvedBundlesExported.get(resolvedRequires[index]).booleanValue();
 		return requiredBundles[index].isExported();
 	}
 
@@ -538,7 +603,7 @@ class RequiresHolder {
 	 */
 	private void determineRequiresVisibility(BundleDescription bundle) {
 		BundleSpecification[] required = bundle.getRequiredBundles();
-		HashSet resolved = new HashSet();
+		Set<BundleDescription> resolved = new HashSet<BundleDescription>();
 
 		for (int i = 0; i < resolvedRequires.length; i++) {
 			resolved.add(resolvedRequires[i]);
@@ -547,7 +612,7 @@ class RequiresHolder {
 		// Get the visibility of all directly required bundles
 		for (int i = 0; i < required.length; i++) {
 			if (required[i].getSupplier() != null) {
-				resolvedBundlesExported.put(required[i].getSupplier(), new Boolean(required[i].isExported()));
+				resolvedBundlesExported.put((BundleDescription) required[i].getSupplier(), new Boolean(required[i].isExported()));
 				resolved.remove(required[i].getSupplier());
 			}
 		}
@@ -560,7 +625,7 @@ class RequiresHolder {
 				BundleSpecification[] fragmentRequiredBundles = fragments[i].getRequiredBundles();
 				for (int j = 0; j < fragmentRequiredBundles.length; j++) {
 					if (resolved.contains(fragmentRequiredBundles[j].getSupplier())) {
-						resolvedBundlesExported.put(fragmentRequiredBundles[j].getSupplier(), new Boolean(fragmentRequiredBundles[j].isExported()));
+						resolvedBundlesExported.put((BundleDescription) fragmentRequiredBundles[j].getSupplier(), new Boolean(fragmentRequiredBundles[j].isExported()));
 						resolved.remove(fragmentRequiredBundles[j].getSupplier());
 					}
 				}
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
index 327c258..231ec76 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,38 +24,45 @@ import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
 import org.osgi.framework.*;
+import org.osgi.framework.hooks.resolver.ResolverHook;
+import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+import org.osgi.framework.wiring.BundleRevision;
 
 public abstract class StateImpl implements State {
 	private static final String OSGI_OS = "osgi.os"; //$NON-NLS-1$
 	private static final String OSGI_WS = "osgi.ws"; //$NON-NLS-1$
 	private static final String OSGI_NL = "osgi.nl"; //$NON-NLS-1$
 	private static final String OSGI_ARCH = "osgi.arch"; //$NON-NLS-1$
-	public static final String[] PROPS = {OSGI_OS, OSGI_WS, OSGI_NL, OSGI_ARCH, Constants.FRAMEWORK_SYSTEMPACKAGES, Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, Constants.OSGI_RESOLVER_MODE, Constants.FRAMEWORK_EXECUTIONENVIRONMENT, "osgi.resolveOptional", "osgi.genericAliases", Constants.FRAMEWORK_OS_NAME, Constants.FRAMEWORK_OS_VERSION, Constants.FRAMEWORK_PROCESSOR, Constants.FRAMEWORK_LANGUAGE, Constants.STATE_SYSTEM_BUNDLE}; //$NON-NLS-1$ //$NON-NLS-2$
+	public static final String[] PROPS = {OSGI_OS, OSGI_WS, OSGI_NL, OSGI_ARCH, Constants.FRAMEWORK_SYSTEMPACKAGES, Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, Constants.OSGI_RESOLVER_MODE, Constants.FRAMEWORK_EXECUTIONENVIRONMENT, "osgi.resolveOptional", "osgi.genericAliases", Constants.FRAMEWORK_OS_NAME, Constants.FRAMEWORK_OS_VERSION, Constants.FRAMEWORK_PROCESSOR, Constants.FRAMEWORK_LANGUAGE, Constants.STATE_SYSTEM_BUNDLE, Constants.FRAMEWORK_SYSTEMCAPABILITIES, Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA}; //$NON-NLS-1$ //$NON-NLS-2$
 	private static final DisabledInfo[] EMPTY_DISABLEDINFOS = new DisabledInfo[0];
 
 	transient private Resolver resolver;
 	transient private StateDeltaImpl changes;
-	transient volatile private boolean resolving = false;
-	transient private HashSet removalPendings = new HashSet();
+	transient private boolean resolving = false;
+	transient private LinkedList<BundleDescription> removalPendings = new LinkedList<BundleDescription>();
 
-	private volatile boolean resolved = true;
-	private volatile long timeStamp = System.currentTimeMillis();
+	private boolean resolved = true;
+	private long timeStamp = System.currentTimeMillis();
 	private final KeyedHashSet bundleDescriptions = new KeyedHashSet(false);
-	private final HashMap resolverErrors = new HashMap();
+	private final Map<BundleDescription, List<ResolverError>> resolverErrors = new HashMap<BundleDescription, List<ResolverError>>();
 	private StateObjectFactory factory;
 	private final KeyedHashSet resolvedBundles = new KeyedHashSet();
-	private final HashMap disabledBundles = new HashMap();
-	private volatile boolean fullyLoaded = false;
+	private final Map<BundleDescription, List<DisabledInfo>> disabledBundles = new HashMap<BundleDescription, List<DisabledInfo>>();
+	private boolean fullyLoaded = false;
 	private boolean dynamicCacheChanged = false;
 	// only used for lazy loading of BundleDescriptions
 	private StateReader reader;
-	private Dictionary[] platformProperties = {new Hashtable(PROPS.length)}; // Dictionary here because of Filter API
+	@SuppressWarnings("unchecked")
+	private Dictionary<Object, Object>[] platformProperties = new Dictionary[] {new Hashtable<String, String>(PROPS.length)}; // Dictionary here because of Filter API
 	private long highestBundleId = -1;
-	private final HashSet platformPropertyKeys = new HashSet(PROPS.length);
+	private final Set<String> platformPropertyKeys = new HashSet<String>(PROPS.length);
+	private ResolverHookFactory hookFactory;
+	private ResolverHook hook;
+	private boolean developmentMode = false;
 
 	private static long cumulativeTime;
 
-	private final Object monitor = new Object();
+	final Object monitor = new Object();
 
 	// to prevent extra-package instantiation 
 	protected StateImpl() {
@@ -89,7 +96,7 @@ public abstract class StateImpl implements State {
 			resolved = false;
 			getDelta().recordBundleAdded((BundleDescriptionImpl) description);
 			if (getSystemBundle().equals(description.getSymbolicName()))
-				resetSystemExports();
+				resetAllSystemCapabilities();
 			if (resolver != null)
 				resolver.bundleAdded(description);
 			updateTimeStamp();
@@ -105,11 +112,11 @@ public abstract class StateImpl implements State {
 			if (!bundleDescriptions.remove(existing))
 				return false;
 			resolvedBundles.remove(existing);
-			ArrayList infos = (ArrayList) disabledBundles.remove(existing);
+			List<DisabledInfo> infos = disabledBundles.remove(existing);
 			if (infos != null) {
-				ArrayList newInfos = new ArrayList(infos.size());
-				for (Iterator iInfos = infos.iterator(); iInfos.hasNext();) {
-					DisabledInfo info = (DisabledInfo) iInfos.next();
+				List<DisabledInfo> newInfos = new ArrayList<DisabledInfo>(infos.size());
+				for (Iterator<DisabledInfo> iInfos = infos.iterator(); iInfos.hasNext();) {
+					DisabledInfo info = iInfos.next();
 					newInfos.add(new DisabledInfo(info.getPolicyName(), info.getMessage(), newDescription));
 				}
 				disabledBundles.put(newDescription, newInfos);
@@ -120,19 +127,19 @@ public abstract class StateImpl implements State {
 			resolved = false;
 			getDelta().recordBundleUpdated((BundleDescriptionImpl) newDescription);
 			if (getSystemBundle().equals(newDescription.getSymbolicName()))
-				resetSystemExports();
+				resetAllSystemCapabilities();
 			if (resolver != null) {
 				boolean pending = isInUse(existing);
 				resolver.bundleUpdated(newDescription, existing, pending);
 				if (pending) {
 					getDelta().recordBundleRemovalPending(existing);
-					removalPendings.add(existing);
+					addRemovalPending(existing);
 				} else {
 					// an existing bundle has been updated with no dependents it can safely be unresolved now
 					try {
 						resolving = true;
 						resolverErrors.remove(existing);
-						resolveBundle(existing, false, null, null, null, null, null);
+						resolveBundle(existing, false, null, null, null, null, null, null, null, null);
 					} finally {
 						resolving = false;
 					}
@@ -167,7 +174,7 @@ public abstract class StateImpl implements State {
 				resolver.bundleRemoved(toRemove, pending);
 				if (pending) {
 					getDelta().recordBundleRemovalPending((BundleDescriptionImpl) toRemove);
-					removalPendings.add(toRemove);
+					addRemovalPending(toRemove);
 				} else {
 					// a bundle has been removed with no dependents it can safely be unresolved now
 					try {
@@ -207,13 +214,13 @@ public abstract class StateImpl implements State {
 		synchronized (this.monitor) {
 			if (Constants.SYSTEM_BUNDLE_SYMBOLICNAME.equals(symbolicName))
 				symbolicName = getSystemBundle();
-			final List bundles = new ArrayList();
-			for (Iterator iter = bundleDescriptions.iterator(); iter.hasNext();) {
+			final List<BundleDescription> bundles = new ArrayList<BundleDescription>();
+			for (Iterator<KeyedElement> iter = bundleDescriptions.iterator(); iter.hasNext();) {
 				BundleDescription bundle = (BundleDescription) iter.next();
 				if (symbolicName.equals(bundle.getSymbolicName()))
 					bundles.add(bundle);
 			}
-			return (BundleDescription[]) bundles.toArray(new BundleDescription[bundles.size()]);
+			return bundles.toArray(new BundleDescription[bundles.size()]);
 		}
 	}
 
@@ -229,8 +236,8 @@ public abstract class StateImpl implements State {
 			if (result != null)
 				return result;
 			// need to look in removal pending bundles;
-			for (Iterator iter = removalPendings.iterator(); iter.hasNext();) {
-				BundleDescription removedBundle = (BundleDescription) iter.next();
+			for (Iterator<BundleDescription> iter = removalPendings.iterator(); iter.hasNext();) {
+				BundleDescription removedBundle = iter.next();
 				if (removedBundle.getBundleId() == id) // just return the first matching id
 					return removedBundle;
 			}
@@ -293,11 +300,21 @@ public abstract class StateImpl implements State {
 		((VersionConstraintImpl) constraint).setSupplier(supplier);
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports) {
 		resolveBundle(bundle, status, hosts, selectedExports, null, resolvedRequires, resolvedImports);
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports) {
+		resolveBundle(bundle, status, hosts, selectedExports, substitutedExports, null, resolvedRequires, resolvedImports, null, null);
+	}
+
+	public void resolveBundle(BundleDescription bundle, boolean status, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, GenericDescription[] selectedCapabilities, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports, GenericDescription[] resolvedCapabilities, Map<String, List<StateWire>> resolvedWires) {
 		synchronized (this.monitor) {
 			if (!resolving)
 				throw new IllegalStateException(); // TODO need error message here!
@@ -316,12 +333,12 @@ public abstract class StateImpl implements State {
 				resolvedBundles.remove(modifiable);
 				modifiable.removeDependencies();
 			}
-			// to support develoment mode we will resolveConstraints even if the resolve status == false
+			// to support development mode we will resolveConstraints even if the resolve status == false
 			// we only do this if the resolved constraints are not null
 			if (selectedExports == null || resolvedRequires == null || resolvedImports == null)
 				unresolveConstraints(modifiable);
 			else
-				resolveConstraints(modifiable, hosts, selectedExports, substitutedExports, resolvedRequires, resolvedImports);
+				resolveConstraints(modifiable, hosts, selectedExports, substitutedExports, selectedCapabilities, resolvedRequires, resolvedImports, resolvedCapabilities, resolvedWires);
 		}
 	}
 
@@ -334,7 +351,7 @@ public abstract class StateImpl implements State {
 		}
 	}
 
-	private void resolveConstraints(BundleDescriptionImpl bundle, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports) {
+	private void resolveConstraints(BundleDescriptionImpl bundle, BundleDescription[] hosts, ExportPackageDescription[] selectedExports, ExportPackageDescription[] substitutedExports, GenericDescription[] selectedCapabilities, BundleDescription[] resolvedRequires, ExportPackageDescription[] resolvedImports, GenericDescription[] resolvedCapabilities, Map<String, List<StateWire>> resolvedWires) {
 		HostSpecificationImpl hostSpec = (HostSpecificationImpl) bundle.getHost();
 		if (hostSpec != null) {
 			if (hosts != null) {
@@ -350,22 +367,14 @@ public abstract class StateImpl implements State {
 		bundle.setResolvedRequires(resolvedRequires);
 		bundle.setResolvedImports(resolvedImports);
 		bundle.setSubstitutedExports(substitutedExports);
+		bundle.setSelectedCapabilities(selectedCapabilities);
+		bundle.setResolvedCapabilities(resolvedCapabilities);
+		bundle.setStateWires(resolvedWires);
 
 		bundle.addDependencies(hosts, true);
 		bundle.addDependencies(resolvedRequires, true);
 		bundle.addDependencies(resolvedImports, true);
-		// add dependecies for generics
-		GenericSpecification[] genericRequires = bundle.getGenericRequires();
-		if (genericRequires.length > 0) {
-			ArrayList genericSuppliers = new ArrayList(genericRequires.length);
-			for (int i = 0; i < genericRequires.length; i++) {
-				GenericDescription[] suppliers = genericRequires[i].getSuppliers();
-				if (suppliers != null)
-					for (int j = 0; j < suppliers.length; j++)
-						genericSuppliers.add(suppliers[j]);
-			}
-			bundle.addDependencies((BaseDescription[]) genericSuppliers.toArray(new BaseDescription[genericSuppliers.size()]), true);
-		}
+		bundle.addDependencies(resolvedCapabilities, true);
 	}
 
 	private void checkHostForSubstitutedExports(BundleDescriptionImpl host, BundleDescriptionImpl fragment) {
@@ -373,25 +382,6 @@ public abstract class StateImpl implements State {
 		// there are issues here because the order in which fragments are resolved is not always the same ...
 	}
 
-	//	private void checkForSubstitutedExports(BundleDescriptionImpl bundle, ExportPackageDescription[] selectedExports) {
-	//		ExportPackageDescription[] existingSubstitutes = bundle.getSubstitutedExports();
-	//		ExportPackageDescription[] declaredExports = bundle.getExportPackages();
-	//		ArrayList substitutes = new ArrayList();
-	//		for (int i = 0; i < declaredExports.length; i++) {
-	//			boolean selected = false;
-	//			for (int j = 0; !selected && j < selectedExports.length; j++)
-	//				selected = declaredExports[i] == selectedExports[j];
-	//			if (!selected)
-	//				substitutes.add(declaredExports[i]);
-	//		}
-	//		if (substitutes.size() > 0) {
-	//			substitutes.ensureCapacity(substitutes.size() + existingSubstitutes.length);
-	//			for (int i = 0; i < existingSubstitutes.length; i++)
-	//				substitutes.add(0, existingSubstitutes[i]);
-	//			bundle.setSubstitutedExports((ExportPackageDescription[]) substitutes.toArray(new ExportPackageDescription[substitutes.size()]));
-	//		}
-	//	}
-
 	private void unresolveConstraints(BundleDescriptionImpl bundle) {
 		HostSpecificationImpl host = (HostSpecificationImpl) bundle.getHost();
 		if (host != null)
@@ -401,6 +391,10 @@ public abstract class StateImpl implements State {
 		bundle.setResolvedImports(null);
 		bundle.setResolvedRequires(null);
 		bundle.setSubstitutedExports(null);
+		bundle.setSelectedCapabilities(null);
+		bundle.setResolvedCapabilities(null);
+		bundle.setStateWires(null);
+		bundle.clearAddedDynamicImportPackages();
 
 		// remove the constraint suppliers
 		NativeCodeSpecificationImpl nativeCode = (NativeCodeSpecificationImpl) bundle.getNativeCodeSpecification();
@@ -420,13 +414,16 @@ public abstract class StateImpl implements State {
 		bundle.removeDependencies();
 	}
 
-	private StateDelta resolve(boolean incremental, BundleDescription[] reResolve) {
+	private StateDelta resolve(boolean incremental, BundleDescription[] reResolve, BundleDescription[] triggers) {
+		fullyLoad();
 		synchronized (this.monitor) {
+			if (resolver == null)
+				throw new IllegalStateException("no resolver set"); //$NON-NLS-1$
+			if (resolving == true)
+				throw new IllegalStateException("An attempt to start a nested resolve process has been detected."); //$NON-NLS-1$
+			ResolverHook currentHook = null;
 			try {
 				resolving = true;
-				if (resolver == null)
-					throw new IllegalStateException("no resolver set"); //$NON-NLS-1$
-				fullyLoad();
 				long start = 0;
 				if (StateManager.DEBUG_PLATFORM_ADMIN_RESOLVER)
 					start = System.currentTimeMillis();
@@ -435,30 +432,61 @@ public abstract class StateImpl implements State {
 					reResolve = getBundles();
 					// need to get any removal pendings before flushing
 					if (removalPendings.size() > 0) {
-						BundleDescription[] removed = getRemovalPendings();
+						BundleDescription[] removed = internalGetRemovalPending();
 						reResolve = mergeBundles(reResolve, removed);
 					}
 					flush(reResolve);
-				}
-				if (resolved && reResolve == null)
-					return new StateDeltaImpl(this);
-				if (removalPendings.size() > 0) {
-					BundleDescription[] removed = getRemovalPendings();
-					reResolve = mergeBundles(reResolve, removed);
+				} else {
+					if (resolved && reResolve == null)
+						return new StateDeltaImpl(this);
+					if (developmentMode) {
+						// in dev mode we need to aggressively flush removal pendings 
+						if (removalPendings.size() > 0) {
+							BundleDescription[] removed = internalGetRemovalPending();
+							reResolve = mergeBundles(reResolve, removed);
+						}
+					}
+					if (reResolve == null)
+						reResolve = internalGetRemovalPending();
+					if (triggers == null) {
+						Set<BundleDescription> triggerSet = new HashSet<BundleDescription>();
+						Collection<BundleDescription> closure = getDependencyClosure(Arrays.asList(reResolve));
+						for (BundleDescription toRefresh : closure) {
+							Bundle bundle = toRefresh.getBundle();
+							if (bundle != null && (bundle.getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED | Bundle.RESOLVED)) == 0)
+								triggerSet.add(toRefresh);
+						}
+						triggers = triggerSet.toArray(new BundleDescription[triggerSet.size()]);
+					}
 				}
 				// use the Headers class to handle ignoring case while matching keys (bug 180817)
-				Headers[] tmpPlatformProperties = new Headers[platformProperties.length];
+				@SuppressWarnings("unchecked")
+				Headers<Object, Object>[] tmpPlatformProperties = new Headers[platformProperties.length];
 				for (int i = 0; i < platformProperties.length; i++) {
-					tmpPlatformProperties[i] = new Headers(platformProperties[i].size());
-					for (Enumeration keys = platformProperties[i].keys(); keys.hasMoreElements();) {
+					tmpPlatformProperties[i] = new Headers<Object, Object>(platformProperties[i].size());
+					for (Enumeration<Object> keys = platformProperties[i].keys(); keys.hasMoreElements();) {
 						Object key = keys.nextElement();
 						tmpPlatformProperties[i].put(key, platformProperties[i].get(key));
 					}
 				}
-				resolver.resolve(reResolve, tmpPlatformProperties);
+
+				ResolverHookFactory currentFactory = hookFactory;
+				if (currentFactory != null) {
+					@SuppressWarnings("unchecked")
+					Collection<BundleRevision> triggerRevisions = Collections.unmodifiableCollection(triggers == null ? Collections.EMPTY_LIST : Arrays.asList((BundleRevision[]) triggers));
+					currentHook = begin(triggerRevisions);
+				}
+				ResolverHookException error = null;
+				try {
+					resolver.resolve(reResolve, tmpPlatformProperties);
+				} catch (ResolverHookException e) {
+					error = e;
+					resolverErrors.clear();
+				}
 				resolved = removalPendings.size() == 0;
 
-				StateDelta savedChanges = changes == null ? new StateDeltaImpl(this) : changes;
+				StateDeltaImpl savedChanges = changes == null ? new StateDeltaImpl(this) : changes;
+				savedChanges.setResolverHookException(error);
 				changes = new StateDeltaImpl(this);
 
 				if (StateManager.DEBUG_PLATFORM_ADMIN_RESOLVER) {
@@ -471,6 +499,8 @@ public abstract class StateImpl implements State {
 					updateTimeStamp();
 				return savedChanges;
 			} finally {
+				if (currentHook != null)
+					currentHook.end();
 				resolving = false;
 			}
 		}
@@ -482,7 +512,7 @@ public abstract class StateImpl implements State {
 		if (reResolve.length == 0)
 			return reResolve; // if reResolve length==0 then we want to prevent pending removal
 		// merge in all removal pending bundles that are not already in the list
-		ArrayList result = new ArrayList(reResolve.length + removed.length);
+		List<BundleDescription> result = new ArrayList<BundleDescription>(reResolve.length + removed.length);
 		for (int i = 0; i < reResolve.length; i++)
 			result.add(reResolve[i]);
 		for (int i = 0; i < removed.length; i++) {
@@ -496,7 +526,7 @@ public abstract class StateImpl implements State {
 			if (!found)
 				result.add(removed[i]);
 		}
-		return (BundleDescription[]) result.toArray(new BundleDescription[result.size()]);
+		return result.toArray(new BundleDescription[result.size()]);
 	}
 
 	private void flush(BundleDescription[] bundles) {
@@ -512,21 +542,60 @@ public abstract class StateImpl implements State {
 	}
 
 	public StateDelta resolve() {
-		return resolve(true, null);
+		return resolve(true, null, null);
 	}
 
 	public StateDelta resolve(boolean incremental) {
-		return resolve(incremental, null);
+		return resolve(incremental, null, null);
 	}
 
 	public StateDelta resolve(BundleDescription[] reResolve) {
-		return resolve(true, reResolve);
+		return resolve(true, reResolve, null);
+	}
+
+	public StateDelta resolve(BundleDescription[] resolve, boolean discard) {
+		BundleDescription[] reResolve = discard ? resolve : new BundleDescription[0];
+		BundleDescription[] triggers = discard ? null : resolve;
+		return resolve(true, reResolve, triggers);
 	}
 
+	@SuppressWarnings("deprecation")
 	public void setOverrides(Object value) {
 		throw new UnsupportedOperationException();
 	}
 
+	public void setResolverHookFactory(ResolverHookFactory hookFactory) {
+		synchronized (this.monitor) {
+			if (this.hookFactory != null)
+				throw new IllegalStateException("Resolver hook factory is already set."); //$NON-NLS-1$
+			this.hookFactory = hookFactory;
+		}
+	}
+
+	private ResolverHook begin(Collection<BundleRevision> triggers) {
+		ResolverHookFactory current;
+		synchronized (this.monitor) {
+			current = this.hookFactory;
+		}
+		ResolverHook newHook = current.begin(triggers);
+		synchronized (this.monitor) {
+			this.hook = newHook;
+		}
+		return newHook;
+	}
+
+	ResolverHookFactory getResolverHookFactory() {
+		synchronized (this.monitor) {
+			return this.hookFactory;
+		}
+	}
+
+	public ResolverHook getResolverHook() {
+		synchronized (this.monitor) {
+			return this.hook;
+		}
+	}
+
 	public BundleDescription[] getResolvedBundles() {
 		synchronized (this.monitor) {
 			return (BundleDescription[]) resolvedBundles.elements(new BundleDescription[resolvedBundles.size()]);
@@ -573,29 +642,31 @@ public abstract class StateImpl implements State {
 
 	public ExportPackageDescription[] getExportedPackages() {
 		fullyLoad();
-		final List allExportedPackages = new ArrayList();
-		for (Iterator iter = resolvedBundles.iterator(); iter.hasNext();) {
-			BundleDescription bundle = (BundleDescription) iter.next();
-			ExportPackageDescription[] bundlePackages = bundle.getSelectedExports();
-			if (bundlePackages == null)
-				continue;
-			for (int i = 0; i < bundlePackages.length; i++)
-				allExportedPackages.add(bundlePackages[i]);
-		}
-		for (Iterator iter = removalPendings.iterator(); iter.hasNext();) {
-			BundleDescription bundle = (BundleDescription) iter.next();
-			ExportPackageDescription[] bundlePackages = bundle.getSelectedExports();
-			if (bundlePackages == null)
-				continue;
-			for (int i = 0; i < bundlePackages.length; i++)
-				allExportedPackages.add(bundlePackages[i]);
+		synchronized (this.monitor) {
+			List<ExportPackageDescription> allExportedPackages = new ArrayList<ExportPackageDescription>();
+			for (Iterator<KeyedElement> iter = resolvedBundles.iterator(); iter.hasNext();) {
+				BundleDescription bundle = (BundleDescription) iter.next();
+				ExportPackageDescription[] bundlePackages = bundle.getSelectedExports();
+				if (bundlePackages == null)
+					continue;
+				for (int i = 0; i < bundlePackages.length; i++)
+					allExportedPackages.add(bundlePackages[i]);
+			}
+			for (Iterator<BundleDescription> iter = removalPendings.iterator(); iter.hasNext();) {
+				BundleDescription bundle = iter.next();
+				ExportPackageDescription[] bundlePackages = bundle.getSelectedExports();
+				if (bundlePackages == null)
+					continue;
+				for (int i = 0; i < bundlePackages.length; i++)
+					allExportedPackages.add(bundlePackages[i]);
+			}
+			return allExportedPackages.toArray(new ExportPackageDescription[allExportedPackages.size()]);
 		}
-		return (ExportPackageDescription[]) allExportedPackages.toArray(new ExportPackageDescription[allExportedPackages.size()]);
 	}
 
 	BundleDescription[] getFragments(final BundleDescription host) {
-		final List fragments = new ArrayList();
-		for (Iterator iter = bundleDescriptions.iterator(); iter.hasNext();) {
+		final List<BundleDescription> fragments = new ArrayList<BundleDescription>();
+		for (Iterator<KeyedElement> iter = bundleDescriptions.iterator(); iter.hasNext();) {
 			BundleDescription bundle = (BundleDescription) iter.next();
 			HostSpecification hostSpec = bundle.getHost();
 
@@ -609,7 +680,7 @@ public abstract class StateImpl implements State {
 						}
 			}
 		}
-		return (BundleDescription[]) fragments.toArray(new BundleDescription[fragments.size()]);
+		return fragments.toArray(new BundleDescription[fragments.size()]);
 	}
 
 	public void setTimeStamp(long newTimeStamp) {
@@ -636,7 +707,7 @@ public abstract class StateImpl implements State {
 
 	public BundleDescription getBundleByLocation(String location) {
 		synchronized (this.monitor) {
-			for (Iterator i = bundleDescriptions.iterator(); i.hasNext();) {
+			for (Iterator<KeyedElement> i = bundleDescriptions.iterator(); i.hasNext();) {
 				BundleDescription current = (BundleDescription) i.next();
 				if (location.equals(current.getLocation()))
 					return current;
@@ -667,24 +738,25 @@ public abstract class StateImpl implements State {
 		resolver.setState(this);
 	}
 
-	public boolean setPlatformProperties(Dictionary platformProperties) {
+	public boolean setPlatformProperties(Dictionary<?, ?> platformProperties) {
 		return setPlatformProperties(new Dictionary[] {platformProperties});
 	}
 
-	public boolean setPlatformProperties(Dictionary[] platformProperties) {
+	public boolean setPlatformProperties(Dictionary<?, ?>[] platformProperties) {
 		return setPlatformProperties(platformProperties, true);
 	}
 
-	synchronized boolean setPlatformProperties(Dictionary[] platformProperties, boolean resetSystemExports) {
+	synchronized boolean setPlatformProperties(Dictionary<?, ?>[] platformProperties, boolean resetSystemExports) {
 		if (platformProperties.length == 0)
 			throw new IllegalArgumentException();
 		// copy the properties for our use internally;
 		// only copy String and String[] values
-		Dictionary[] newPlatformProperties = new Dictionary[platformProperties.length];
+		@SuppressWarnings("unchecked")
+		Dictionary<Object, Object>[] newPlatformProperties = new Dictionary[platformProperties.length];
 		for (int i = 0; i < platformProperties.length; i++) {
-			newPlatformProperties[i] = new Hashtable(platformProperties[i].size());
+			newPlatformProperties[i] = new Hashtable<Object, Object>(platformProperties[i].size());
 			synchronized (platformProperties[i]) {
-				for (Enumeration keys = platformProperties[i].keys(); keys.hasMoreElements();) {
+				for (Enumeration<?> keys = platformProperties[i].keys(); keys.hasMoreElements();) {
 					Object key = keys.nextElement();
 					Object value = platformProperties[i].get(key);
 					newPlatformProperties[i].put(key, value);
@@ -706,9 +778,11 @@ public abstract class StateImpl implements State {
 		}
 		boolean result = false;
 		boolean performResetSystemExports = false;
+		boolean performResetSystemCapabilities = false;
 		if (this.platformProperties.length != newPlatformProperties.length) {
 			result = true;
 			performResetSystemExports = true;
+			performResetSystemCapabilities = true;
 		} else {
 			// we need to see if any of the existing filter prop keys have changed
 			String[] keys = getPlatformPropertyKeys();
@@ -718,6 +792,8 @@ public abstract class StateImpl implements State {
 					performResetSystemExports |= checkProp(this.platformProperties[i].get(Constants.FRAMEWORK_SYSTEMPACKAGES), newPlatformProperties[i].get(Constants.FRAMEWORK_SYSTEMPACKAGES));
 					performResetSystemExports |= checkProp(this.platformProperties[i].get(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA), newPlatformProperties[i].get(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA));
 					performResetSystemExports |= checkProp(this.platformProperties[i].get(Constants.SYSTEM_BUNDLE_SYMBOLICNAME), newPlatformProperties[i].get(Constants.SYSTEM_BUNDLE_SYMBOLICNAME));
+					performResetSystemCapabilities |= checkProp(this.platformProperties[i].get(Constants.FRAMEWORK_SYSTEMCAPABILITIES), newPlatformProperties[i].get(Constants.FRAMEWORK_SYSTEMCAPABILITIES));
+					performResetSystemCapabilities |= checkProp(this.platformProperties[i].get(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA), newPlatformProperties[i].get(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA));
 				}
 			}
 		}
@@ -725,24 +801,32 @@ public abstract class StateImpl implements State {
 		this.platformProperties = newPlatformProperties;
 		if (performResetSystemExports)
 			resetSystemExports();
+		if (performResetSystemCapabilities)
+			resetSystemCapabilities();
+		developmentMode = this.platformProperties.length == 0 ? false : org.eclipse.osgi.framework.internal.core.Constants.DEVELOPMENT_MODE.equals(this.platformProperties[0].get(org.eclipse.osgi.framework.internal.core.Constants.OSGI_RESOLVER_MODE));
 		return result;
 	}
 
+	private void resetAllSystemCapabilities() {
+		resetSystemExports();
+		resetSystemCapabilities();
+	}
+
 	private void resetSystemExports() {
 		BundleDescription[] systemBundles = getBundles(Constants.SYSTEM_BUNDLE_SYMBOLICNAME);
 		for (int idx = 0; idx < systemBundles.length; idx++) {
 			BundleDescriptionImpl systemBundle = (BundleDescriptionImpl) systemBundles[idx];
 			ExportPackageDescription[] exports = systemBundle.getExportPackages();
-			ArrayList newExports = new ArrayList(exports.length);
+			List<ExportPackageDescription> newExports = new ArrayList<ExportPackageDescription>(exports.length);
 			for (int i = 0; i < exports.length; i++)
 				if (((Integer) exports[i].getDirective(ExportPackageDescriptionImpl.EQUINOX_EE)).intValue() < 0)
 					newExports.add(exports[i]);
 			addSystemExports(newExports);
-			systemBundle.setExportPackages((ExportPackageDescription[]) newExports.toArray(new ExportPackageDescription[newExports.size()]));
+			systemBundle.setExportPackages(newExports.toArray(new ExportPackageDescription[newExports.size()]));
 		}
 	}
 
-	private void addSystemExports(ArrayList exports) {
+	private void addSystemExports(List<ExportPackageDescription> exports) {
 		for (int i = 0; i < platformProperties.length; i++)
 			try {
 				addSystemExports(exports, ManifestElement.parseHeader(Constants.EXPORT_PACKAGE, (String) platformProperties[i].get(Constants.FRAMEWORK_SYSTEMPACKAGES)), i);
@@ -752,7 +836,7 @@ public abstract class StateImpl implements State {
 			}
 	}
 
-	private void addSystemExports(ArrayList exports, ManifestElement[] elements, int index) throws BundleException {
+	private void addSystemExports(List<ExportPackageDescription> exports, ManifestElement[] elements, int index) {
 		if (elements == null)
 			return;
 		ExportPackageDescription[] systemExports = StateBuilder.createExportPackages(elements, null, null, 2, false);
@@ -763,6 +847,37 @@ public abstract class StateImpl implements State {
 		}
 	}
 
+	private void resetSystemCapabilities() {
+		BundleDescription[] systemBundles = getBundles(Constants.SYSTEM_BUNDLE_SYMBOLICNAME);
+		Long builtIn = new Long(1);
+		for (BundleDescription systemBundle : systemBundles) {
+			GenericDescription[] capabilities = systemBundle.getGenericCapabilities();
+			List<GenericDescription> newCapabilities = new ArrayList<GenericDescription>(capabilities.length);
+			for (GenericDescription capability : capabilities) {
+				if (builtIn.equals(capability.getDeclaredAttributes().get("equinox.builtin"))) //$NON-NLS-1$
+					newCapabilities.add(capability); // keep the built in ones.
+			}
+			// now add the externally defined ones
+			addSystemCapabilities(newCapabilities);
+			((BundleDescriptionImpl) systemBundle).setGenericCapabilities(newCapabilities.toArray(new GenericDescription[newCapabilities.size()]));
+		}
+	}
+
+	private void addSystemCapabilities(List<GenericDescription> capabilities) {
+		for (int i = 0; i < platformProperties.length; i++)
+			try {
+				addSystemCapabilities(capabilities, ManifestElement.parseHeader(Constants.PROVIDE_CAPABILITY, (String) platformProperties[i].get(Constants.FRAMEWORK_SYSTEMCAPABILITIES)));
+				addSystemCapabilities(capabilities, ManifestElement.parseHeader(Constants.PROVIDE_CAPABILITY, (String) platformProperties[i].get(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA)));
+			} catch (BundleException e) {
+				// TODO consider throwing this... 
+			}
+	}
+
+	private void addSystemCapabilities(List<GenericDescription> capabilities, ManifestElement[] elements) {
+		StateBuilder.createOSGiCapabilities(elements, capabilities);
+	}
+
+	@SuppressWarnings("rawtypes")
 	public Dictionary[] getPlatformProperties() {
 		return platformProperties;
 	}
@@ -788,7 +903,7 @@ public abstract class StateImpl implements State {
 		return !origObj.equals(newObj);
 	}
 
-	private boolean changedProps(Dictionary origProps, Dictionary newProps, String[] keys) {
+	private boolean changedProps(Dictionary<Object, Object> origProps, Dictionary<Object, Object> newProps, String[] keys) {
 		for (int i = 0; i < keys.length; i++) {
 			Object origProp = origProps.get(keys[i]);
 			Object newProp = newProps.get(keys[i]);
@@ -805,18 +920,54 @@ public abstract class StateImpl implements State {
 		return symbolicName != null ? symbolicName : Constants.getInternalSymbolicName();
 	}
 
+	public BundleDescription[] getRemovalPending() {
+		synchronized (this.monitor) {
+			return removalPendings.toArray(new BundleDescription[removalPendings.size()]);
+		}
+	}
+
+	private void addRemovalPending(BundleDescription removed) {
+		synchronized (this.monitor) {
+			if (!removalPendings.contains(removed))
+				removalPendings.addFirst(removed);
+		}
+	}
+
+	public Collection<BundleDescription> getDependencyClosure(Collection<BundleDescription> bundles) {
+		BundleDescription[] removals = getRemovalPending();
+		Set<BundleDescription> result = new HashSet<BundleDescription>();
+		for (BundleDescription bundle : bundles) {
+			addDependents(bundle, result, removals);
+		}
+		return result;
+	}
+
+	private static void addDependents(BundleDescription bundle, Set<BundleDescription> result, BundleDescription[] removals) {
+		if (result.contains(bundle))
+			return; // avoid cycles
+		result.add(bundle);
+		BundleDescription[] dependents = bundle.getDependents();
+		for (BundleDescription dependent : dependents)
+			addDependents(dependent, result, removals);
+		// check if this is a removal pending
+		for (BundleDescription removed : removals) {
+			if (removed.getBundleId() == bundle.getBundleId())
+				addDependents(removed, result, removals);
+		}
+	}
+
 	/**
 	 * Returns the latest versions BundleDescriptions which have old removal pending versions.
 	 * @return the BundleDescriptions that have removal pending versions.
 	 */
-	public BundleDescription[] getRemovalPendings() {
+	private BundleDescription[] internalGetRemovalPending() {
 		synchronized (this.monitor) {
-			Iterator removed = removalPendings.iterator();
+			Iterator<BundleDescription> removed = removalPendings.iterator();
 			BundleDescription[] result = new BundleDescription[removalPendings.size()];
 			int i = 0;
 			while (removed.hasNext())
 				// we return the latest version of the description if it is still contained in the state (bug 287636)
-				result[i++] = getBundle(((BundleDescription) removed.next()).getBundleId());
+				result[i++] = getBundle(removed.next().getBundleId());
 			return result;
 		}
 	}
@@ -829,8 +980,16 @@ public abstract class StateImpl implements State {
 			return null;
 		fullyLoad();
 		synchronized (this.monitor) {
+			ResolverHook currentHook = null;
 			try {
 				resolving = true;
+				ResolverHookFactory currentFactory = hookFactory;
+				if (currentFactory != null) {
+					Collection<BundleRevision> triggers = new ArrayList<BundleRevision>(1);
+					triggers.add(importingBundle);
+					triggers = Collections.unmodifiableCollection(triggers);
+					currentHook = begin(triggers);
+				}
 				// ask the resolver to resolve our dynamic import
 				ExportPackageDescriptionImpl result = (ExportPackageDescriptionImpl) resolver.resolveDynamicImport(importingBundle, requestedPackage);
 				if (result == null)
@@ -844,11 +1003,17 @@ public abstract class StateImpl implements State {
 				return result;
 			} finally {
 				resolving = false;
+				if (currentHook != null)
+					currentHook.end();
 			}
 		}
 
 	}
 
+	public void addDynamicImportPackages(BundleDescription importingBundle, ImportPackageSpecification[] dynamicImports) {
+		((BundleDescriptionImpl) importingBundle).addDynamicImportPackages(dynamicImports);
+	}
+
 	void setReader(StateReader reader) {
 		synchronized (this.monitor) {
 			this.reader = reader;
@@ -863,13 +1028,9 @@ public abstract class StateImpl implements State {
 
 	// not synchronized on this to prevent deadlock
 	public final void fullyLoad() {
-		// TODO add back if ee min 1.2 adds holdsLock method
-		//if (Thread.holdsLock(this.monitor)) {
-		//	throw new IllegalStateException("Should not call fullyLoad() holding monitor."); //$NON-NLS-1$
-		//}
-		if (reader == null)
-			return;
-		synchronized (reader) {
+		synchronized (this.monitor) {
+			if (reader == null)
+				return;
 			if (fullyLoaded == true)
 				return;
 			if (reader.isLazyLoaded())
@@ -879,24 +1040,28 @@ public abstract class StateImpl implements State {
 	}
 
 	// not synchronized on this to prevent deadlock
-	public final void unloadLazyData() {
+	public final boolean unloadLazyData(long checkStamp) {
 		// make sure no other thread is trying to unload or load
-		synchronized (reader) {
+		synchronized (this.monitor) {
+			if (checkStamp != getTimeStamp() || dynamicCacheChanged())
+				return false;
 			if (reader.getAccessedFlag()) {
 				reader.setAccessedFlag(false); // reset accessed flag
-				return;
+				return true;
 			}
 			fullyLoaded = false;
 			BundleDescription[] bundles = getBundles();
 			for (int i = 0; i < bundles.length; i++)
 				((BundleDescriptionImpl) bundles[i]).unload();
 			reader.flushLazyObjectCache();
+			resolver.flush();
+			return true;
 		}
 	}
 
 	public ExportPackageDescription[] getSystemPackages() {
 		synchronized (this.monitor) {
-			ArrayList result = new ArrayList();
+			List<ExportPackageDescription> result = new ArrayList<ExportPackageDescription>();
 			BundleDescription[] systemBundles = getBundles(Constants.SYSTEM_BUNDLE_SYMBOLICNAME);
 			if (systemBundles.length > 0) {
 				BundleDescriptionImpl systemBundle = (BundleDescriptionImpl) systemBundles[0];
@@ -905,7 +1070,7 @@ public abstract class StateImpl implements State {
 					if (((Integer) exports[i].getDirective(ExportPackageDescriptionImpl.EQUINOX_EE)).intValue() >= 0)
 						result.add(exports[i]);
 			}
-			return (ExportPackageDescription[]) result.toArray(new ExportPackageDescription[result.size()]);
+			return result.toArray(new ExportPackageDescription[result.size()]);
 		}
 	}
 
@@ -919,8 +1084,8 @@ public abstract class StateImpl implements State {
 		synchronized (this.monitor) {
 			if (bundle.isResolved())
 				return new ResolverError[0];
-			ArrayList result = (ArrayList) resolverErrors.get(bundle);
-			return result == null ? new ResolverError[0] : (ResolverError[]) result.toArray(new ResolverError[result.size()]);
+			List<ResolverError> result = resolverErrors.get(bundle);
+			return result == null ? new ResolverError[0] : result.toArray(new ResolverError[result.size()]);
 		}
 	}
 
@@ -928,9 +1093,9 @@ public abstract class StateImpl implements State {
 		synchronized (this.monitor) {
 			if (!resolving)
 				throw new IllegalStateException(); // TODO need error message here!
-			ArrayList errors = (ArrayList) resolverErrors.get(bundle);
+			List<ResolverError> errors = resolverErrors.get(bundle);
 			if (errors == null) {
-				errors = new ArrayList(1);
+				errors = new ArrayList<ResolverError>(1);
 				resolverErrors.put(bundle, errors);
 			}
 			errors.add(new ResolverErrorImpl((BundleDescriptionImpl) bundle, type, data, unsatisfied));
@@ -971,7 +1136,7 @@ public abstract class StateImpl implements State {
 
 	String[] getPlatformPropertyKeys() {
 		synchronized (platformPropertyKeys) {
-			return (String[]) platformPropertyKeys.toArray(new String[platformPropertyKeys.size()]);
+			return platformPropertyKeys.toArray(new String[platformPropertyKeys.size()]);
 		}
 	}
 
@@ -987,7 +1152,7 @@ public abstract class StateImpl implements State {
 
 	public BundleDescription[] getDisabledBundles() {
 		synchronized (this.monitor) {
-			return (BundleDescription[]) disabledBundles.keySet().toArray(new BundleDescription[0]);
+			return disabledBundles.keySet().toArray(new BundleDescription[0]);
 		}
 	}
 
@@ -995,15 +1160,15 @@ public abstract class StateImpl implements State {
 		synchronized (this.monitor) {
 			if (getBundle(disabledInfo.getBundle().getBundleId()) != disabledInfo.getBundle())
 				throw new IllegalArgumentException(NLS.bind(StateMsg.BUNDLE_NOT_IN_STATE, disabledInfo.getBundle()));
-			ArrayList currentInfos = (ArrayList) disabledBundles.get(disabledInfo.getBundle());
+			List<DisabledInfo> currentInfos = disabledBundles.get(disabledInfo.getBundle());
 			if (currentInfos == null) {
-				currentInfos = new ArrayList(1);
+				currentInfos = new ArrayList<DisabledInfo>(1);
 				currentInfos.add(disabledInfo);
 				disabledBundles.put(disabledInfo.getBundle(), currentInfos);
 			} else {
-				Iterator it = currentInfos.iterator();
+				Iterator<DisabledInfo> it = currentInfos.iterator();
 				while (it.hasNext()) {
-					DisabledInfo currentInfo = (DisabledInfo) it.next();
+					DisabledInfo currentInfo = it.next();
 					if (disabledInfo.getPolicyName().equals(currentInfo.getPolicyName())) {
 						currentInfos.remove(currentInfo);
 						break;
@@ -1017,7 +1182,7 @@ public abstract class StateImpl implements State {
 
 	public void removeDisabledInfo(DisabledInfo disabledInfo) {
 		synchronized (this.monitor) {
-			ArrayList currentInfos = (ArrayList) disabledBundles.get(disabledInfo.getBundle());
+			List<DisabledInfo> currentInfos = disabledBundles.get(disabledInfo.getBundle());
 			if ((currentInfos != null) && currentInfos.contains(disabledInfo)) {
 				currentInfos.remove(disabledInfo);
 				if (currentInfos.isEmpty()) {
@@ -1030,12 +1195,12 @@ public abstract class StateImpl implements State {
 
 	public DisabledInfo getDisabledInfo(BundleDescription bundle, String policyName) {
 		synchronized (this.monitor) {
-			ArrayList currentInfos = (ArrayList) disabledBundles.get(bundle);
+			List<DisabledInfo> currentInfos = disabledBundles.get(bundle);
 			if (currentInfos == null)
 				return null;
-			Iterator it = currentInfos.iterator();
+			Iterator<DisabledInfo> it = currentInfos.iterator();
 			while (it.hasNext()) {
-				DisabledInfo currentInfo = (DisabledInfo) it.next();
+				DisabledInfo currentInfo = it.next();
 				if (currentInfo.getPolicyName().equals(policyName)) {
 					return currentInfo;
 				}
@@ -1046,8 +1211,8 @@ public abstract class StateImpl implements State {
 
 	public DisabledInfo[] getDisabledInfos(BundleDescription bundle) {
 		synchronized (this.monitor) {
-			ArrayList currentInfos = (ArrayList) disabledBundles.get(bundle);
-			return currentInfos == null ? EMPTY_DISABLEDINFOS : (DisabledInfo[]) currentInfos.toArray(new DisabledInfo[currentInfos.size()]);
+			List<DisabledInfo> currentInfos = disabledBundles.get(bundle);
+			return currentInfos == null ? EMPTY_DISABLEDINFOS : currentInfos.toArray(new DisabledInfo[currentInfos.size()]);
 		}
 	}
 
@@ -1055,11 +1220,11 @@ public abstract class StateImpl implements State {
 	 * Used by StateWriter to get all the DisabledInfo objects to persist
 	 */
 	DisabledInfo[] getDisabledInfos() {
-		ArrayList results = new ArrayList();
+		List<DisabledInfo> results = new ArrayList<DisabledInfo>();
 		synchronized (this.monitor) {
-			for (Iterator allDisabledInfos = disabledBundles.values().iterator(); allDisabledInfos.hasNext();)
-				results.addAll((Collection) allDisabledInfos.next());
+			for (Iterator<List<DisabledInfo>> allDisabledInfos = disabledBundles.values().iterator(); allDisabledInfos.hasNext();)
+				results.addAll(allDisabledInfos.next());
 		}
-		return (DisabledInfo[]) results.toArray(new DisabledInfo[results.size()]);
+		return results.toArray(new DisabledInfo[results.size()]);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMessages.properties b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMessages.properties
index f978eb0..acf9ffa 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMessages.properties
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2008 IBM Corporation and others.
+# Copyright (c) 2004, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@
 BUNDLE_NOT_IN_STATE=The bundle is not in the state: {0}
 BUNDLE_IN_OTHER_STATE=The bundle belongs to another state: {0}
 BUNDLE_PENDING_REMOVE_STATE = The bundle is pending remove in another state: {0}
-COMMIT_INVALID_TIMESTAMP=Cannot commit: invalid timestamp
 
 HEADER_REQUIRED=The \"{0}\" header must be specified
 HEADER_PACKAGE_DUPLICATES=Cannot import a package more than once \"{0}\"
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMsg.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMsg.java
index c0b4f36..1aeb570 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMsg.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateMsg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,6 @@ public class StateMsg extends NLS {
 	public static String BUNDLE_IN_OTHER_STATE;
 	public static String BUNDLE_PENDING_REMOVE_STATE;
 
-	public static String COMMIT_INVALID_TIMESTAMP;
 	public static String HEADER_REQUIRED;
 	public static String HEADER_PACKAGE_DUPLICATES;
 	public static String HEADER_PACKAGE_JAVA;
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java
index 7d2dcb5..23426ab 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,11 +24,11 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 	/**
 	 * @deprecated
 	 */
-	public BundleDescription createBundleDescription(Dictionary manifest, String location, long id) throws BundleException {
+	public BundleDescription createBundleDescription(Dictionary<String, String> manifest, String location, long id) throws BundleException {
 		return createBundleDescription(null, manifest, location, id);
 	}
 
-	public BundleDescription createBundleDescription(State state, Dictionary manifest, String location, long id) throws BundleException {
+	public BundleDescription createBundleDescription(State state, Dictionary<String, String> manifest, String location, long id) throws BundleException {
 		BundleDescriptionImpl result = (BundleDescriptionImpl) StateBuilder.createBundleDescription((StateImpl) state, manifest, location);
 		result.setBundleId(id);
 		return result;
@@ -106,6 +106,9 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		bundle.setGenericCapabilities(createGenericCapabilities(original.getGenericCapabilities()));
 		bundle.setGenericRequires(createGenericRequires(original.getGenericRequires()));
 		bundle.setNativeCodeSpecification(createNativeCodeSpecification(original.getNativeCodeSpecification()));
+		bundle.setAttributes(original.getAttributes());
+		if (original instanceof BundleDescriptionImpl)
+			bundle.setDirective(Constants.MANDATORY_DIRECTIVE, ((BundleDescriptionImpl) original).getDirective(Constants.MANDATORY_DIRECTIVE));
 		return bundle;
 	}
 
@@ -141,9 +144,9 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		GenericDescription[] result = new GenericDescription[genericCapabilities.length];
 		for (int i = 0; i < genericCapabilities.length; i++) {
 			GenericDescriptionImpl cap = new GenericDescriptionImpl();
-			cap.setName(genericCapabilities[i].getName());
-			cap.setVersion(genericCapabilities[i].getVersion());
+			cap.setType(genericCapabilities[i].getType());
 			cap.setAttributes(genericCapabilities[i].getAttributes());
+			cap.setDirectives(genericCapabilities[i].getDeclaredDirectives());
 			result[i] = cap;
 		}
 		return result;
@@ -156,10 +159,12 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		for (int i = 0; i < genericRequires.length; i++) {
 			GenericSpecificationImpl req = new GenericSpecificationImpl();
 			req.setName(genericRequires[i].getName());
+			req.setType(genericRequires[i].getType());
+			req.setResolution(req.getResolution());
 			try {
-				req.setMatchingFilter(genericRequires[i].getMatchingFilter());
+				req.setMatchingFilter(genericRequires[i].getMatchingFilter(), true);
 			} catch (InvalidSyntaxException e) {
-				// do nothing; this filter should aready have been tested
+				// do nothing; this filter should already have been tested
 			}
 			result[i] = req;
 		}
@@ -181,6 +186,8 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		bundleSpec.setVersionRange(original.getVersionRange());
 		bundleSpec.setExported(original.isExported());
 		bundleSpec.setOptional(original.isOptional());
+		if (original instanceof BundleSpecificationImpl)
+			bundleSpec.setAttributes(((BundleSpecificationImpl) original).getAttributes());
 		return bundleSpec;
 	}
 
@@ -195,10 +202,12 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		HostSpecificationImpl hostSpec = new HostSpecificationImpl();
 		hostSpec.setName(original.getName());
 		hostSpec.setVersionRange(original.getVersionRange());
+		if (original instanceof HostSpecificationImpl)
+			hostSpec.setAttributes(((HostSpecificationImpl) original).getAttributes());
 		return hostSpec;
 	}
 
-	public ImportPackageSpecification createImportPackageSpecification(String packageName, VersionRange versionRange, String bundleSymbolicName, VersionRange bundleVersionRange, Map directives, Map attributes, BundleDescription importer) {
+	public ImportPackageSpecification createImportPackageSpecification(String packageName, VersionRange versionRange, String bundleSymbolicName, VersionRange bundleVersionRange, Map<String, ?> directives, Map<String, ?> attributes, BundleDescription importer) {
 		ImportPackageSpecificationImpl packageSpec = new ImportPackageSpecificationImpl();
 		packageSpec.setName(packageName);
 		packageSpec.setVersionRange(versionRange);
@@ -222,10 +231,10 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 	}
 
 	public ExportPackageDescription createExportPackageDescription(ExportPackageDescription original) {
-		return createExportPackageDescription(original.getName(), original.getVersion(), original.getDirectives(), original.getAttributes(), original.isRoot(), null);
+		return createExportPackageDescription(original.getName(), original.getVersion(), original.getDirectives(), original.getAttributes(), true, null);
 	}
 
-	public ExportPackageDescription createExportPackageDescription(String packageName, Version version, Map directives, Map attributes, boolean root, BundleDescription exporter) {
+	public ExportPackageDescription createExportPackageDescription(String packageName, Version version, Map<String, ?> directives, Map<String, ?> attributes, boolean root, BundleDescription exporter) {
 		ExportPackageDescriptionImpl exportPackage = new ExportPackageDescriptionImpl();
 		exportPackage.setName(packageName);
 		exportPackage.setVersion(version);
@@ -235,21 +244,34 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		return exportPackage;
 	}
 
-	public GenericDescription createGenericDescription(String name, String type, Version version, Map attributes) {
+	/**
+	 * @deprecated
+	 */
+	public GenericDescription createGenericDescription(String name, String type, Version version, Map<String, ?> attributes) {
+		return createGenericDescription(name, type, version, attributes, null, null);
+	}
+
+	public GenericDescription createGenericDescription(String type, Map<String, ?> attributes, Map<String, String> directives, BundleDescription supplier) {
+		return createGenericDescription(null, type, null, attributes, directives, supplier);
+	}
+
+	private GenericDescription createGenericDescription(String name, String type, Version version, Map<String, ?> attributes, Map<String, String> directives, BundleDescription supplier) {
 		GenericDescriptionImpl result = new GenericDescriptionImpl();
-		result.setName(name);
 		result.setType(type);
-		result.setVersion(version);
-		Object versionObj = attributes == null ? null : attributes.remove(Constants.VERSION_ATTRIBUTE);
-		if (versionObj instanceof Version) // this is just incase someone uses version:version as a key
-			result.setVersion((Version) versionObj);
-		Dictionary attrs = new Hashtable();
-		if (attributes != null)
-			for (Iterator keys = attributes.keySet().iterator(); keys.hasNext();) {
-				Object key = keys.next();
-				attrs.put(key, attributes.get(key));
-			}
+		Dictionary<String, Object> attrs = attributes == null ? new Hashtable<String, Object>() : new Hashtable<String, Object>(attributes);
+		if (version != null) {
+			Object versionObj = attrs.get(Constants.VERSION_ATTRIBUTE);
+			if (!(versionObj instanceof Version) && version != null)
+				attrs.put(Constants.VERSION_ATTRIBUTE, version);
+		}
+		if (name != null) {
+			Object nameObj = attrs.get(result.getType());
+			if (!(nameObj instanceof String))
+				attrs.put(result.getType(), name);
+		}
 		result.setAttributes(attrs);
+		result.setDirectives(directives);
+		result.setSupplier(supplier);
 		return result;
 	}
 
@@ -257,7 +279,7 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		GenericSpecificationImpl result = new GenericSpecificationImpl();
 		result.setName(name);
 		result.setType(type);
-		result.setMatchingFilter(matchingFilter);
+		result.setMatchingFilter(matchingFilter, true);
 		int resolution = 0;
 		if (optional)
 			resolution |= GenericSpecification.RESOLUTION_OPTIONAL;
@@ -287,8 +309,8 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		return result;
 	}
 
-	public SystemState createSystemState() {
-		SystemState state = new SystemState();
+	public SystemState createSystemState(BundleContext context) {
+		SystemState state = new SystemState(context);
 		state.setFactory(this);
 		return state;
 	}
@@ -303,7 +325,7 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 	public State createState(boolean createResolver) {
 		State result = internalCreateState();
 		if (createResolver)
-			result.setResolver(new ResolverImpl(null, false));
+			result.setResolver(new ResolverImpl(false));
 		return result;
 	}
 
@@ -329,9 +351,9 @@ public class StateObjectFactoryImpl implements StateObjectFactory {
 		return state;
 	}
 
-	public SystemState readSystemState(File stateFile, File lazyFile, boolean lazyLoad, long expectedTimeStamp) throws IOException {
+	public SystemState readSystemState(BundleContext context, File stateFile, File lazyFile, boolean lazyLoad, long expectedTimeStamp) throws IOException {
 		StateReader reader = new StateReader(stateFile, lazyFile, lazyLoad);
-		SystemState restoredState = new SystemState();
+		SystemState restoredState = new SystemState(context);
 		restoredState.setReader(reader);
 		restoredState.setFactory(this);
 		if (!reader.loadState(restoredState, expectedTimeStamp))
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java
index c279938..f26ce5f 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,8 +19,7 @@ import java.util.Map.Entry;
 import org.eclipse.osgi.framework.util.ObjectPool;
 import org.eclipse.osgi.framework.util.SecureAction;
 import org.eclipse.osgi.service.resolver.*;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.Version;
+import org.osgi.framework.*;
 
 /**
  * This class is internally threadsafe and supports client locking. Clients must <strong>not</strong> hold the monitor for
@@ -32,13 +31,13 @@ final class StateReader {
 	public static final String LAZY_FILE = ".lazy"; //$NON-NLS-1$
 	private static final int BUFFER_SIZE_LAZY = 4096;
 	private static final int BUFFER_SIZE_FULLYREAD = 16384;
-	private static final SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	private static final SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 
 	// objectTable will be a hashmap of objects. The objects will be things
 	// like BundleDescription, ExportPackageDescription, Version etc.. The integer
 	// index value will be used in the cache to allow cross-references in the
 	// cached state.
-	final Map objectTable = Collections.synchronizedMap(new HashMap());
+	final Map<Integer, Object> objectTable = Collections.synchronizedMap(new HashMap<Integer, Object>());
 
 	private volatile File stateFile;
 	private volatile File lazyFile;
@@ -47,7 +46,7 @@ final class StateReader {
 	private volatile int numBundles;
 	private volatile boolean accessedFlag = false;
 
-	public static final byte STATE_CACHE_VERSION = 30;
+	public static final byte STATE_CACHE_VERSION = 36;
 	public static final byte NULL = 0;
 	public static final byte OBJECT = 1;
 	public static final byte INDEX = 2;
@@ -76,7 +75,10 @@ final class StateReader {
 	}
 
 	private Object getFromObjectTable(int index) {
-		return objectTable.get(new Integer(index));
+		Object result = objectTable.get(new Integer(index));
+		if (result == null)
+			throw new IllegalStateException("Expected to find an object at table index: " + index); //$NON-NLS-1$
+		return result;
 	}
 
 	private boolean readState(StateImpl state, long expectedTimestamp) throws IOException {
@@ -97,9 +99,9 @@ final class StateReader {
 			String[] platformPropKeys = (String[]) readPlatformProp(in);
 			state.addPlatformPropertyKeys(platformPropKeys);
 			int numSets = in.readInt();
-			Dictionary[] platformProps = new Dictionary[numSets];
+			Dictionary<?, ?>[] platformProps = new Dictionary[numSets];
 			for (int i = 0; i < numSets; i++) {
-				Hashtable props = new Hashtable(platformPropKeys.length);
+				Hashtable<Object, Object> props = new Hashtable<Object, Object>(platformPropKeys.length);
 				int numProps = in.readInt();
 				for (int j = 0; j < numProps; j++) {
 					Object value = readPlatformProp(in);
@@ -157,9 +159,9 @@ final class StateReader {
 		String[] platformPropKeys = (String[]) readPlatformProp(in);
 		state.addPlatformPropertyKeys(platformPropKeys);
 		int numSets = in.readInt();
-		Dictionary[] platformProps = new Dictionary[numSets];
+		Dictionary<?, ?>[] platformProps = new Dictionary[numSets];
 		for (int i = 0; i < numSets; i++) {
-			Hashtable props = new Hashtable(platformPropKeys.length);
+			Hashtable<Object, Object> props = new Hashtable<Object, Object>(platformPropKeys.length);
 			int numProps = in.readInt();
 			for (int j = 0; j < numProps; j++) {
 				Object value = readPlatformProp(in);
@@ -220,6 +222,10 @@ final class StateReader {
 		result.setStateBit(BundleDescriptionImpl.HAS_DYNAMICIMPORT, in.readBoolean());
 		result.setStateBit(BundleDescriptionImpl.ATTACH_FRAGMENTS, in.readBoolean());
 		result.setStateBit(BundleDescriptionImpl.DYNAMIC_FRAGMENTS, in.readBoolean());
+		String[] mandatory = readList(in);
+		if (mandatory != null)
+			result.setDirective(Constants.MANDATORY_DIRECTIVE, mandatory);
+		result.setAttributes(readMap(in));
 		result.setHost(readHostSpec(in));
 
 		// set the bundle dependencies from imports and requires and hosts.
@@ -324,7 +330,7 @@ final class StateReader {
 
 		int dynamicPkgCnt = in.readInt();
 		if (dynamicPkgCnt > 0) {
-			HashMap dynamicStamps = new HashMap(dynamicPkgCnt);
+			HashMap<String, Long> dynamicStamps = new HashMap<String, Long>(dynamicPkgCnt);
 			for (int i = 0; i < dynamicPkgCnt; i++) {
 				String pkg = readString(in, false);
 				Long stamp = new Long(in.readLong());
@@ -349,8 +355,28 @@ final class StateReader {
 			result.setGenericRequires(reqs);
 		}
 
+		int selectedGenCapCnt = in.readInt();
+		if (selectedGenCapCnt > 0) {
+			GenericDescription[] capabilities = new GenericDescription[selectedGenCapCnt];
+			for (int i = 0; i < capabilities.length; i++)
+				capabilities[i] = readGenericDescription(in);
+			result.setSelectedCapabilities(capabilities);
+		}
+
+		int resolvedGenCapCnt = in.readInt();
+		if (resolvedGenCapCnt > 0) {
+			GenericDescription[] capabilities = new GenericDescription[resolvedGenCapCnt];
+			for (int i = 0; i < capabilities.length; i++)
+				capabilities[i] = readGenericDescription(in);
+			result.setResolvedCapabilities(capabilities);
+		}
+
 		result.setNativeCodeSpecification(readNativeCode(in));
 
+		@SuppressWarnings("rawtypes")
+		Map raw = readMap(in);
+		result.setStateWires(raw);
+
 		result.setFullyLoaded(true); // set fully loaded before setting the dependencies
 		// No need to add bundle dependencies for hosts, imports or requires;
 		// This is done by readBundleDescription
@@ -358,11 +384,19 @@ final class StateReader {
 	}
 
 	private BundleSpecificationImpl readBundleSpec(DataInputStream in) throws IOException {
+		byte tag = readTag(in);
+		if (tag == NULL)
+			return null;
+		if (tag == INDEX)
+			return (BundleSpecificationImpl) getFromObjectTable(in.readInt());
 		BundleSpecificationImpl result = new BundleSpecificationImpl();
+		int tableIndex = in.readInt();
+		addToObjectTable(result, tableIndex);
 		readVersionConstraint(result, in);
 		result.setSupplier(readBundleDescription(in));
 		result.setExported(in.readBoolean());
 		result.setOptional(in.readBoolean());
+		result.setAttributes(readMap(in));
 		return result;
 	}
 
@@ -375,11 +409,11 @@ final class StateReader {
 		ExportPackageDescriptionImpl exportPackageDesc = new ExportPackageDescriptionImpl();
 		int tableIndex = in.readInt();
 		addToObjectTable(exportPackageDesc, tableIndex);
-		exportPackageDesc.setTableIndex(tableIndex);
 		readBaseDescription(exportPackageDesc, in);
 		exportPackageDesc.setExporter(readBundleDescription(in));
 		exportPackageDesc.setAttributes(readMap(in));
 		exportPackageDesc.setDirectives(readMap(in));
+		exportPackageDesc.setFragmentDeclaration(readExportPackageDesc(in));
 		return exportPackageDesc;
 	}
 
@@ -387,11 +421,11 @@ final class StateReader {
 		return new DisabledInfo(readString(in, false), readString(in, false), readBundleDescription(in));
 	}
 
-	private Map readMap(DataInputStream in) throws IOException {
+	private Map<String, Object> readMap(DataInputStream in) throws IOException {
 		int count = in.readInt();
 		if (count == 0)
 			return null;
-		HashMap result = new HashMap(count);
+		HashMap<String, Object> result = new HashMap<String, Object>(count);
 		for (int i = 0; i < count; i++) {
 			String key = readString(in, false);
 			Object value = null;
@@ -413,8 +447,8 @@ final class StateReader {
 			else if (type == 7) {
 				value = readString(in, false);
 				try {
-					Class uriClazz = Class.forName("java.net.URI"); //$NON-NLS-1$
-					Constructor constructor = uriClazz.getConstructor(new Class[] {String.class});
+					Class<?> uriClazz = Class.forName("java.net.URI"); //$NON-NLS-1$
+					Constructor<?> constructor = uriClazz.getConstructor(new Class[] {String.class});
 					value = constructor.newInstance(new Object[] {value});
 				} catch (ClassNotFoundException e) {
 					// oh well cannot support; just use the string
@@ -423,12 +457,74 @@ final class StateReader {
 				} catch (Exception e) {
 					throw new RuntimeException(e.getMessage(), e);
 				}
+			} else if (type == 8) {
+				int listType = in.readByte();
+				int size = in.readInt();
+				List<Object> list = new ArrayList<Object>(size);
+				for (int j = 0; j < size; j++) {
+					switch (listType) {
+						case 0 :
+							list.add(readString(in, false));
+							break;
+						case 3 :
+							list.add(new Integer(in.readInt()));
+							break;
+						case 4 :
+							list.add(new Long(in.readLong()));
+							break;
+						case 5 :
+							list.add(new Double(in.readDouble()));
+							break;
+						case 6 :
+							list.add(readVersion(in));
+							break;
+						case 7 :
+							list.add(readStateWire(in));
+							break;
+						default :
+							throw new IOException("Invalid type: " + listType); //$NON-NLS-1$
+					}
+				}
+				value = list;
 			}
 			result.put(key, value);
 		}
 		return result;
 	}
 
+	private Object readStateWire(DataInputStream in) throws IOException {
+		VersionConstraint requirement;
+		BundleDescription requirementHost;
+		BaseDescription capability;
+		BundleDescription capabilityHost;
+
+		byte wireType = in.readByte();
+		switch (wireType) {
+			case 0 :
+				requirement = readImportPackageSpec(in);
+				capability = readExportPackageDesc(in);
+				break;
+			case 1 :
+				requirement = readBundleSpec(in);
+				capability = readBundleDescription(in);
+				break;
+			case 2 :
+				requirement = readHostSpec(in);
+				capability = readBundleDescription(in);
+				break;
+			case 3 :
+				requirement = readGenericSpecification(in);
+				capability = readGenericDescription(in);
+				break;
+			default :
+				throw new IOException("Invalid wire type: " + wireType); //$NON-NLS-1$
+		}
+
+		requirementHost = readBundleDescription(in);
+		capabilityHost = readBundleDescription(in);
+		return new StateWire(requirementHost, requirement, capabilityHost, capability);
+	}
+
 	private String[] readList(DataInputStream in) throws IOException {
 		int count = in.readInt();
 		if (count == 0)
@@ -445,7 +541,14 @@ final class StateReader {
 	}
 
 	private ImportPackageSpecificationImpl readImportPackageSpec(DataInputStream in) throws IOException {
+		byte tag = readTag(in);
+		if (tag == NULL)
+			return null;
+		if (tag == INDEX)
+			return (ImportPackageSpecificationImpl) getFromObjectTable(in.readInt());
 		ImportPackageSpecificationImpl result = new ImportPackageSpecificationImpl();
+		int tableIndex = in.readInt();
+		addToObjectTable(result, tableIndex);
 		readVersionConstraint(result, in);
 		result.setSupplier(readExportPackageDesc(in));
 		result.setBundleSymbolicName(readString(in, false));
@@ -459,7 +562,11 @@ final class StateReader {
 		byte tag = readTag(in);
 		if (tag == NULL)
 			return null;
+		if (tag == INDEX)
+			return (HostSpecificationImpl) getFromObjectTable(in.readInt());
 		HostSpecificationImpl result = new HostSpecificationImpl();
+		int tableIndex = in.readInt();
+		addToObjectTable(result, tableIndex);
 		readVersionConstraint(result, in);
 		int hostCount = in.readInt();
 		if (hostCount > 0) {
@@ -468,6 +575,7 @@ final class StateReader {
 				hosts[i] = readBundleDescription(in);
 			result.setHosts(hosts);
 		}
+		result.setAttributes(readMap(in));
 		return result;
 	}
 
@@ -483,20 +591,31 @@ final class StateReader {
 		readBaseDescription(result, in);
 		result.setSupplier(readBundleDescription(in));
 		result.setType(readString(in, false));
-		Map mapAttrs = readMap(in);
-		Dictionary attrs = new Hashtable();
+		Map<String, Object> mapAttrs = readMap(in);
+		Dictionary<String, Object> attrs = new Hashtable<String, Object>();
 		if (mapAttrs != null) {
-			for (Iterator keys = mapAttrs.keySet().iterator(); keys.hasNext();) {
-				Object key = keys.next();
+			for (Iterator<String> keys = mapAttrs.keySet().iterator(); keys.hasNext();) {
+				String key = keys.next();
 				attrs.put(key, mapAttrs.get(key));
 			}
 		}
 		result.setAttributes(attrs);
+		Map directives = readMap(in);
+		if (directives != null)
+			result.setDirectives(directives);
+		result.setFragmentDeclaration(readGenericDescription(in));
 		return result;
 	}
 
 	private GenericSpecification readGenericSpecification(DataInputStream in) throws IOException {
+		byte tag = readTag(in);
+		if (tag == NULL)
+			return null;
+		if (tag == INDEX)
+			return (GenericSpecification) getFromObjectTable(in.readInt());
 		GenericSpecificationImpl result = new GenericSpecificationImpl();
+		int tableIndex = in.readInt();
+		addToObjectTable(result, tableIndex);
 		readVersionConstraint(result, in);
 		result.setType(readString(in, false));
 		int num = in.readInt();
@@ -506,7 +625,7 @@ final class StateReader {
 		result.setSupplers(suppliers);
 		result.setResolution(in.readInt());
 		try {
-			result.setMatchingFilter(readString(in, false));
+			result.setMatchingFilter(readString(in, false), false);
 		} catch (InvalidSyntaxException e) {
 			// do nothing this filter was tested before
 		}
@@ -644,7 +763,7 @@ final class StateReader {
 		this.accessedFlag = accessedFlag;
 	}
 
-	synchronized void fullyLoad() {
+	void fullyLoad() {
 		setAccessedFlag(true);
 		DataInputStream in = null;
 		try {
@@ -663,13 +782,13 @@ final class StateReader {
 		}
 	}
 
-	synchronized void fullyLoad(BundleDescriptionImpl target) throws IOException {
+	void fullyLoad(BundleDescriptionImpl target) throws IOException {
 		setAccessedFlag(true);
 		DataInputStream in = null;
 		try {
 			in = openLazyFile();
 			// get the set of bundles that must be loaded according to dependencies
-			ArrayList toLoad = new ArrayList();
+			List<BundleDescriptionImpl> toLoad = new ArrayList<BundleDescriptionImpl>();
 			addDependencies(target, toLoad);
 			int skipBytes[] = getSkipBytes(toLoad);
 			// look for the lazy data of the toLoad list
@@ -681,14 +800,14 @@ final class StateReader {
 		}
 	}
 
-	private void addDependencies(BundleDescriptionImpl target, List toLoad) {
+	private void addDependencies(BundleDescriptionImpl target, List<BundleDescriptionImpl> toLoad) {
 		if (toLoad.contains(target) || target.isFullyLoaded())
 			return;
-		Iterator load = toLoad.iterator();
+		Iterator<BundleDescriptionImpl> load = toLoad.iterator();
 		int i = 0;
 		while (load.hasNext()) {
 			// insert the target into the list sorted by lazy data offsets
-			BundleDescriptionImpl bundle = (BundleDescriptionImpl) load.next();
+			BundleDescriptionImpl bundle = load.next();
 			if (target.getLazyDataOffset() < bundle.getLazyDataOffset())
 				break;
 			i++;
@@ -697,29 +816,30 @@ final class StateReader {
 			toLoad.add(target);
 		else
 			toLoad.add(i, target);
-		List deps = target.getBundleDependencies();
-		for (Iterator iter = deps.iterator(); iter.hasNext();)
+		List<BundleDescription> deps = target.getBundleDependencies();
+		for (Iterator<BundleDescription> iter = deps.iterator(); iter.hasNext();)
 			addDependencies((BundleDescriptionImpl) iter.next(), toLoad);
 	}
 
-	private int[] getSkipBytes(ArrayList toLoad) {
+	private int[] getSkipBytes(List<BundleDescriptionImpl> toLoad) {
 		int[] skipBytes = new int[toLoad.size()];
 		for (int i = 0; i < skipBytes.length; i++) {
-			BundleDescriptionImpl current = (BundleDescriptionImpl) toLoad.get(i);
+			BundleDescriptionImpl current = toLoad.get(i);
 			if (i == 0) {
 				skipBytes[i] = current.getLazyDataOffset();
 				continue;
 			}
-			BundleDescriptionImpl previous = (BundleDescriptionImpl) toLoad.get(i - 1);
+			BundleDescriptionImpl previous = toLoad.get(i - 1);
 			skipBytes[i] = current.getLazyDataOffset() - previous.getLazyDataOffset() - previous.getLazyDataSize();
 		}
 		return skipBytes;
 	}
 
 	void flushLazyObjectCache() {
-		for (Iterator entries = objectTable.entrySet().iterator(); entries.hasNext();) {
-			Map.Entry entry = (Entry) entries.next();
-			if (entry.getValue() instanceof ExportPackageDescription || entry.getValue() instanceof GenericDescription)
+		for (Iterator<Entry<Integer, Object>> entries = objectTable.entrySet().iterator(); entries.hasNext();) {
+			Map.Entry<Integer, Object> entry = entries.next();
+			Object value = entry.getValue();
+			if (value instanceof ExportPackageDescription || value instanceof GenericDescription || value instanceof ImportPackageSpecification || value instanceof BundleSpecification || value instanceof GenericSpecification)
 				entries.remove();
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateWriter.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateWriter.java
index b9c7bd8..6ecc596 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateWriter.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,12 +26,12 @@ class StateWriter {
 	// like BundleDescription, ExportPackageDescription, Version etc.. The integer
 	// index value will be used in the cache to allow cross-references in the
 	// cached state.
-	private final Map objectTable = new HashMap();
+	private final Map<Object, Integer> objectTable = new HashMap<Object, Integer>();
 
-	private final ArrayList forcedWrite = new ArrayList();
+	private final List<Object> forcedWrite = new ArrayList<Object>();
 
 	private int addToObjectTable(Object object) {
-		Integer cur = (Integer) objectTable.get(object);
+		Integer cur = objectTable.get(object);
 		if (cur != null)
 			return cur.intValue();
 		objectTable.put(object, new Integer(objectTable.size()));
@@ -67,10 +67,10 @@ class StateWriter {
 		// write the platform property keys
 		String[] platformPropKeys = state.getPlatformPropertyKeys();
 		writePlatformProp(platformPropKeys, out);
-		Dictionary[] propSet = state.getPlatformProperties();
+		Dictionary<Object, Object>[] propSet = state.getPlatformProperties();
 		out.writeInt(propSet.length);
 		for (int i = 0; i < propSet.length; i++) {
-			Dictionary props = propSet[i];
+			Dictionary<Object, Object> props = propSet[i];
 			out.writeInt(platformPropKeys.length);
 			for (int j = 0; j < platformPropKeys.length; j++)
 				writePlatformProp(props.get(platformPropKeys[j]), out);
@@ -94,73 +94,78 @@ class StateWriter {
 		DataOutputStream outState = null;
 		FileOutputStream fosLazy = null;
 		FileOutputStream fosState = null;
-		try {
-			BundleDescription[] bundles = state.getBundles();
-			StateHelperImpl.getInstance().sortBundles(bundles);
-			// need to prime the object table with all bundles
-			// this allows us to write only indexes to bundles in the lazy data
-			for (int i = 0; i < bundles.length; i++)
-				addToObjectTable(bundles[i]);
-			// first write the lazy data to get the offsets and sizes to the lazy data
-			fosLazy = new FileOutputStream(lazyFile);
-			outLazy = new DataOutputStream(new BufferedOutputStream(fosLazy));
-			for (int i = 0; i < bundles.length; i++)
-				writeBundleDescriptionLazyData(bundles[i], outLazy);
-			// now write the state data
-			fosState = new FileOutputStream(stateFile);
-			outState = new DataOutputStream(new BufferedOutputStream(fosState));
-			outState.write(StateReader.STATE_CACHE_VERSION);
-			if (writePrefix(state, outState))
-				return;
-			outState.writeLong(state.getTimeStamp());
-			// write the platform property keys
-			String[] platformPropKeys = state.getPlatformPropertyKeys();
-			writePlatformProp(platformPropKeys, outState);
-			// write the platform property values
-			Dictionary[] propSet = state.getPlatformProperties();
-			outState.writeInt(propSet.length);
-			for (int i = 0; i < propSet.length; i++) {
-				Dictionary props = propSet[i];
-				outState.writeInt(platformPropKeys.length);
-				for (int j = 0; j < platformPropKeys.length; j++)
-					writePlatformProp(props.get(platformPropKeys[j]), outState);
-			}
-			outState.writeInt(bundles.length);
-			for (int i = 0; i < bundles.length; i++)
-				// write out each bundle with the force flag set to make sure
-				// the data is written at least once in the non-lazy state data
-				writeBundleDescription(bundles[i], outState, true);
-			// write the DisabledInfos
-			DisabledInfo[] infos = state.getDisabledInfos();
-			outState.writeInt(infos.length);
-			for (int i = 0; i < infos.length; i++)
-				writeDisabledInfo(infos[i], outState);
-			outState.writeBoolean(state.isResolved());
-		} finally {
-			if (outLazy != null) {
-				try {
-					outLazy.flush();
-					fosLazy.getFD().sync();
-				} catch (IOException e) {
-					// do nothing, we tried
+		synchronized (state.monitor) {
+			try {
+				BundleDescription[] bundles = state.getBundles();
+				StateHelperImpl.getInstance().sortBundles(bundles);
+				// need to prime the object table with all bundles
+				// this allows us to write only indexes to bundles in the lazy data
+				for (int i = 0; i < bundles.length; i++) {
+					addToObjectTable(bundles[i]);
+					if (bundles[i].getHost() != null)
+						addToObjectTable(bundles[i].getHost());
 				}
-				try {
-					outLazy.close();
-				} catch (IOException e) {
-					// do nothing
+				// first write the lazy data to get the offsets and sizes to the lazy data
+				fosLazy = new FileOutputStream(lazyFile);
+				outLazy = new DataOutputStream(new BufferedOutputStream(fosLazy));
+				for (int i = 0; i < bundles.length; i++)
+					writeBundleDescriptionLazyData(bundles[i], outLazy);
+				// now write the state data
+				fosState = new FileOutputStream(stateFile);
+				outState = new DataOutputStream(new BufferedOutputStream(fosState));
+				outState.write(StateReader.STATE_CACHE_VERSION);
+				if (writePrefix(state, outState))
+					return;
+				outState.writeLong(state.getTimeStamp());
+				// write the platform property keys
+				String[] platformPropKeys = state.getPlatformPropertyKeys();
+				writePlatformProp(platformPropKeys, outState);
+				// write the platform property values
+				Dictionary<Object, Object>[] propSet = state.getPlatformProperties();
+				outState.writeInt(propSet.length);
+				for (int i = 0; i < propSet.length; i++) {
+					Dictionary<Object, Object> props = propSet[i];
+					outState.writeInt(platformPropKeys.length);
+					for (int j = 0; j < platformPropKeys.length; j++)
+						writePlatformProp(props.get(platformPropKeys[j]), outState);
 				}
-			}
-			if (outState != null) {
-				try {
-					outState.flush();
-					fosState.getFD().sync();
-				} catch (IOException e) {
-					// do nothing, we tried
+				outState.writeInt(bundles.length);
+				for (int i = 0; i < bundles.length; i++)
+					// write out each bundle with the force flag set to make sure
+					// the data is written at least once in the non-lazy state data
+					writeBundleDescription(bundles[i], outState, true);
+				// write the DisabledInfos
+				DisabledInfo[] infos = state.getDisabledInfos();
+				outState.writeInt(infos.length);
+				for (int i = 0; i < infos.length; i++)
+					writeDisabledInfo(infos[i], outState);
+				outState.writeBoolean(state.isResolved());
+			} finally {
+				if (outLazy != null) {
+					try {
+						outLazy.flush();
+						fosLazy.getFD().sync();
+					} catch (IOException e) {
+						// do nothing, we tried
+					}
+					try {
+						outLazy.close();
+					} catch (IOException e) {
+						// do nothing
+					}
 				}
-				try {
-					outState.close();
-				} catch (IOException e) {
-					// do nothing
+				if (outState != null) {
+					try {
+						outState.flush();
+						fosState.getFD().sync();
+					} catch (IOException e) {
+						// do nothing, we tried
+					}
+					try {
+						outState.close();
+					} catch (IOException e) {
+						// do nothing
+					}
 				}
 			}
 		}
@@ -210,12 +215,14 @@ class StateWriter {
 		out.writeBoolean(bundle.hasDynamicImports());
 		out.writeBoolean(bundle.attachFragments());
 		out.writeBoolean(bundle.dynamicFragments());
+		writeList(out, (String[]) ((BundleDescriptionImpl) bundle).getDirective(Constants.MANDATORY_DIRECTIVE));
+		writeMap(out, bundle.getAttributes());
 		writeHostSpec((HostSpecificationImpl) bundle.getHost(), out, force);
 
-		List dependencies = ((BundleDescriptionImpl) bundle).getBundleDependencies();
+		List<BundleDescription> dependencies = ((BundleDescriptionImpl) bundle).getBundleDependencies();
 		out.writeInt(dependencies.size());
-		for (Iterator iter = dependencies.iterator(); iter.hasNext();)
-			writeBundleDescription((BundleDescription) iter.next(), out, force);
+		for (Iterator<BundleDescription> iter = dependencies.iterator(); iter.hasNext();)
+			writeBundleDescription(iter.next(), out, force);
 		// the rest is lazy loaded data
 	}
 
@@ -284,15 +291,15 @@ class StateWriter {
 		for (int i = 0; i < ees.length; i++)
 			writeStringOrNull(ees[i], out);
 
-		HashMap dynamicStamps = ((BundleDescriptionImpl) bundle).getDynamicStamps();
+		Map<String, Long> dynamicStamps = ((BundleDescriptionImpl) bundle).getDynamicStamps();
 		if (dynamicStamps == null)
 			out.writeInt(0);
 		else {
 			out.writeInt(dynamicStamps.size());
-			for (Iterator pkgs = dynamicStamps.keySet().iterator(); pkgs.hasNext();) {
-				String pkg = (String) pkgs.next();
+			for (Iterator<String> pkgs = dynamicStamps.keySet().iterator(); pkgs.hasNext();) {
+				String pkg = pkgs.next();
 				writeStringOrNull(pkg, out);
-				out.writeLong(((Long) dynamicStamps.get(pkg)).longValue());
+				out.writeLong(dynamicStamps.get(pkg).longValue());
 			}
 		}
 
@@ -314,8 +321,27 @@ class StateWriter {
 				writeGenericSpecification(genericRequires[i], out);
 		}
 
+		GenericDescription[] selectedCapabilities = bundle.getSelectedGenericCapabilities();
+		if (selectedCapabilities == null)
+			out.writeInt(0);
+		else {
+			out.writeInt(selectedCapabilities.length);
+			for (int i = 0; i < selectedCapabilities.length; i++)
+				writeGenericDescription(selectedCapabilities[i], out);
+		}
+
+		GenericDescription[] resolvedCapabilities = bundle.getResolvedGenericRequires();
+		if (resolvedCapabilities == null)
+			out.writeInt(0);
+		else {
+			out.writeInt(resolvedCapabilities.length);
+			for (int i = 0; i < resolvedCapabilities.length; i++)
+				writeGenericDescription(resolvedCapabilities[i], out);
+		}
+
 		writeNativeCode(bundle.getNativeCodeSpecification(), out);
 
+		writeMap(out, ((BundleDescriptionImpl) bundle).getWiresInternal());
 		// save the size of the lazy data
 		((BundleDescriptionImpl) bundle).setLazyDataSize(out.size() - dataStart);
 	}
@@ -327,10 +353,13 @@ class StateWriter {
 	}
 
 	private void writeBundleSpec(BundleSpecificationImpl bundle, DataOutputStream out) throws IOException {
+		if (writePrefix(bundle, out))
+			return;
 		writeVersionConstraint(bundle, out);
 		writeBundleDescription((BundleDescription) bundle.getSupplier(), out, false);
 		out.writeBoolean(bundle.isExported());
 		out.writeBoolean(bundle.isOptional());
+		writeMap(out, bundle.getAttributes());
 	}
 
 	private void writeExportPackageDesc(ExportPackageDescriptionImpl exportPackageDesc, DataOutputStream out) throws IOException {
@@ -340,6 +369,7 @@ class StateWriter {
 		writeBundleDescription(exportPackageDesc.getExporter(), out, false);
 		writeMap(out, exportPackageDesc.getAttributes());
 		writeMap(out, exportPackageDesc.getDirectives());
+		writeExportPackageDesc((ExportPackageDescriptionImpl) exportPackageDesc.getFragmentDeclaration(), out);
 	}
 
 	private void writeGenericDescription(GenericDescription description, DataOutputStream out) throws IOException {
@@ -348,17 +378,21 @@ class StateWriter {
 		writeBaseDescription(description, out);
 		writeBundleDescription(description.getSupplier(), out, false);
 		writeStringOrNull(description.getType() == GenericDescription.DEFAULT_TYPE ? null : description.getType(), out);
-		Dictionary attrs = description.getAttributes();
-		Map mapAttrs = new HashMap(attrs.size());
-		for (Enumeration keys = attrs.keys(); keys.hasMoreElements();) {
-			Object key = keys.nextElement();
-			if (!Constants.VERSION_ATTRIBUTE.equals(key))
-				mapAttrs.put(key, attrs.get(key));
+		Dictionary<String, Object> attrs = description.getAttributes();
+		Map<String, Object> mapAttrs = new HashMap<String, Object>(attrs.size());
+		for (Enumeration<String> keys = attrs.keys(); keys.hasMoreElements();) {
+			String key = keys.nextElement();
+			mapAttrs.put(key, attrs.get(key));
 		}
 		writeMap(out, mapAttrs);
+		Map<String, String> directives = description.getDeclaredDirectives();
+		writeMap(out, directives);
+		writeGenericDescription((GenericDescription) ((BaseDescriptionImpl) description).getFragmentDeclaration(), out);
 	}
 
 	private void writeGenericSpecification(GenericSpecification specification, DataOutputStream out) throws IOException {
+		if (writePrefix(specification, out))
+			return;
 		writeVersionConstraint(specification, out);
 		writeStringOrNull(specification.getType() == GenericDescription.DEFAULT_TYPE ? null : specification.getType(), out);
 		GenericDescription[] suppliers = specification.getSuppliers();
@@ -418,14 +452,14 @@ class StateWriter {
 			writeStringOrNull(strings[i], out);
 	}
 
-	private void writeMap(DataOutputStream out, Map source) throws IOException {
+	private void writeMap(DataOutputStream out, Map<String, ?> source) throws IOException {
 		if (source == null) {
 			out.writeInt(0);
 		} else {
 			out.writeInt(source.size());
-			Iterator iter = source.keySet().iterator();
+			Iterator<String> iter = source.keySet().iterator();
 			while (iter.hasNext()) {
-				String key = (String) iter.next();
+				String key = iter.next();
 				Object value = source.get(key);
 				writeStringOrNull(key, out);
 				if (value instanceof String) {
@@ -452,11 +486,95 @@ class StateWriter {
 				} else if ("java.net.URI".equals(value.getClass().getName())) { //$NON-NLS-1$
 					out.writeByte(7);
 					writeStringOrNull(value.toString(), out);
+				} else if (value instanceof List) {
+					writeList(out, (List<?>) value);
 				}
 			}
 		}
 	}
 
+	private void writeList(DataOutputStream out, List<?> list) throws IOException {
+		byte type = getListType(list);
+		if (type == -2)
+			return; // don't understand the list type
+		out.writeByte(8);
+		out.writeByte(type);
+		out.writeInt(list.size());
+		for (Object value : list) {
+			switch (type) {
+				case 0 :
+					writeStringOrNull((String) value, out);
+					break;
+				case 3 :
+					out.writeInt(((Integer) value).intValue());
+					break;
+				case 4 :
+					out.writeLong(((Long) value).longValue());
+					break;
+				case 5 :
+					out.writeDouble(((Double) value).doubleValue());
+					break;
+				case 6 :
+					writeVersion((Version) value, out);
+					break;
+				case 7 :
+					writeStateWire((StateWire) value, out);
+				default :
+					break;
+			}
+		}
+	}
+
+	private void writeStateWire(StateWire wire, DataOutputStream out) throws IOException {
+		VersionConstraint requirement = wire.getDeclaredRequirement();
+		if (requirement instanceof ImportPackageSpecificationImpl) {
+			out.writeByte(0);
+			writeImportPackageSpec((ImportPackageSpecificationImpl) requirement, out);
+		} else if (requirement instanceof BundleSpecificationImpl) {
+			out.writeByte(1);
+			writeBundleSpec((BundleSpecificationImpl) requirement, out);
+		} else if (requirement instanceof HostSpecificationImpl) {
+			out.writeByte(2);
+			writeHostSpec((HostSpecificationImpl) requirement, out, false);
+		} else if (requirement instanceof GenericSpecificationImpl) {
+			out.writeByte(3);
+			writeGenericSpecification((GenericSpecificationImpl) requirement, out);
+		} else
+			throw new IllegalArgumentException("Unknown requiement type: " + requirement.getClass());
+
+		BaseDescription capability = wire.getDeclaredCapability();
+		if (capability instanceof BundleDescription)
+			writeBundleDescription((BundleDescription) capability, out, false);
+		else if (capability instanceof ExportPackageDescriptionImpl)
+			writeExportPackageDesc((ExportPackageDescriptionImpl) capability, out);
+		else if (capability instanceof GenericDescription)
+			writeGenericDescription((GenericDescription) capability, out);
+		else
+			throw new IllegalArgumentException("Unknown capability type: " + requirement.getClass());
+
+		writeBundleDescription(wire.getRequirementHost(), out, false);
+		writeBundleDescription(wire.getCapabilityHost(), out, false);
+	}
+
+	private byte getListType(List<?> list) {
+		if (list.size() == 0)
+			return -1;
+		Object type = list.get(0);
+		if (type instanceof String)
+			return 0;
+		if (type instanceof Integer)
+			return 3;
+		if (type instanceof Long)
+			return 4;
+		if (type instanceof Double)
+			return 5;
+		if (type instanceof Version)
+			return 6;
+		if (type instanceof StateWire)
+			return 7;
+		return -2;
+	}
+
 	private void writeList(DataOutputStream out, String[] list) throws IOException {
 		if (list == null) {
 			out.writeInt(0);
@@ -473,6 +591,8 @@ class StateWriter {
 	}
 
 	private void writeImportPackageSpec(ImportPackageSpecification importPackageSpec, DataOutputStream out) throws IOException {
+		if (writePrefix(importPackageSpec, out))
+			return;
 		writeVersionConstraint(importPackageSpec, out);
 		// TODO this is a hack until the state dynamic loading is cleaned up
 		// we should only write the supplier if we are resolved
@@ -488,11 +608,13 @@ class StateWriter {
 	}
 
 	private void writeHostSpec(HostSpecificationImpl host, DataOutputStream out, boolean force) throws IOException {
-		if (host == null) {
-			out.writeByte(StateReader.NULL);
+		if (host != null && force && !forcedWrite.contains(host)) {
+			int index = addToObjectTable(host);
+			out.writeByte(StateReader.OBJECT);
+			out.writeInt(index);
+			forcedWrite.add(host);
+		} else if (writePrefix(host, out))
 			return;
-		}
-		out.writeByte(StateReader.OBJECT);
 		writeVersionConstraint(host, out);
 		BundleDescription[] hosts = host.getHosts();
 		if (hosts == null) {
@@ -502,6 +624,7 @@ class StateWriter {
 		out.writeInt(hosts.length);
 		for (int i = 0; i < hosts.length; i++)
 			writeBundleDescription(hosts[i], out, force);
+		writeMap(out, host.getAttributes());
 	}
 
 	// called by writers for VersionConstraintImpl subclasses
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/SystemState.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/SystemState.java
index c7b7116..f73e694 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/SystemState.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/SystemState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,13 +11,34 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
-import org.eclipse.osgi.service.resolver.State;
-import org.eclipse.osgi.service.resolver.StateDelta;
+import org.eclipse.osgi.framework.internal.core.*;
+import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 
 // this class provides synchronous access to resolve and add/remove/update bundle for the framework
 public class SystemState extends StateImpl {
+	private final Framework framework;
 
+	public SystemState(BundleContext context) {
+		this.framework = context == null ? null : ((BundleContextImpl) context).getFramework();
+	}
+
+	@Override
+	boolean basicAddBundle(BundleDescription description) {
+		if (framework != null && description.getUserObject() == null) {
+			// We always set the user object to a BundleReference object;
+			// This allows the resolver to implement BundleRevisions for 
+			// the resolver hooks.
+			AbstractBundle bundle = framework.getBundle(description.getBundleId());
+			description.setUserObject(bundle != null ? bundle.getBundleData() : null);
+		}
+		return super.basicAddBundle(description);
+	}
+
+	/**
+	 * @throws BundleException  
+	 */
 	public StateDelta compare(State state) throws BundleException {
 		// we don't implement this (no big deal: the system state is private to the framework)
 		throw new UnsupportedOperationException();
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/UserState.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/UserState.java
index 69e6649..9059279 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/UserState.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/UserState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@ import org.osgi.framework.BundleException;
  */
 public class UserState extends StateImpl {
 	// TODO this is not an accurate way to record updates
-	private final Set updated = Collections.synchronizedSet(new HashSet());
+	private final Set<String> updated = Collections.synchronizedSet(new HashSet<String>());
 
 	public boolean removeBundle(BundleDescription description) {
 		if (description.getLocation() != null)
@@ -37,6 +37,9 @@ public class UserState extends StateImpl {
 		return true;
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public StateDelta compare(State baseState) throws BundleException {
 		BundleDescription[] current = this.getBundles();
 		StateDeltaImpl delta = new StateDeltaImpl(this);
diff --git a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
index 85807a9..c7949b7 100644
--- a/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,13 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.resolver;
 
+import java.util.Collections;
+import java.util.Map;
 import org.eclipse.osgi.framework.internal.core.Constants;
+import org.eclipse.osgi.internal.resolver.BaseDescriptionImpl.BaseCapability;
 import org.eclipse.osgi.service.resolver.*;
+import org.osgi.framework.Version;
+import org.osgi.framework.wiring.*;
 
 abstract class VersionConstraintImpl implements VersionConstraint {
 
@@ -60,7 +65,7 @@ abstract class VersionConstraintImpl implements VersionConstraint {
 		}
 	}
 
-	public boolean isSatisfiedBy(BaseDescription supplier) {
+	public boolean isSatisfiedBy(BaseDescription candidate) {
 		synchronized (this.monitor) {
 			return false;
 		}
@@ -89,4 +94,137 @@ abstract class VersionConstraintImpl implements VersionConstraint {
 			this.supplier = supplier;
 		}
 	}
+
+	protected abstract String getInternalNameSpace();
+
+	protected abstract Map<String, String> getInternalDirectives();
+
+	protected abstract Map<String, Object> getInteralAttributes();
+
+	public BundleRequirement getRequirement() {
+		String namespace = getInternalNameSpace();
+		if (namespace == null)
+			return null;
+		return new BundleRequirementImpl(namespace);
+	}
+
+	class BundleRequirementImpl implements BundleRequirement {
+		private final String namespace;
+
+		public BundleRequirementImpl(String namespace) {
+			this.namespace = namespace;
+		}
+
+		public String getNamespace() {
+			return namespace;
+		}
+
+		@SuppressWarnings("unchecked")
+		public Map<String, String> getDirectives() {
+			return Collections.unmodifiableMap(getInternalDirectives());
+		}
+
+		@SuppressWarnings("unchecked")
+		public Map<String, Object> getAttributes() {
+			return Collections.unmodifiableMap(getInteralAttributes());
+		}
+
+		public BundleRevision getRevision() {
+			return getBundle();
+		}
+
+		public boolean matches(BundleCapability capability) {
+			return isSatisfiedBy(((BaseCapability) capability).getBaseDescription());
+		}
+
+		public int hashCode() {
+			return System.identityHashCode(VersionConstraintImpl.this);
+		}
+
+		private VersionConstraintImpl getVersionConstraint() {
+			return VersionConstraintImpl.this;
+		}
+
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (!(obj instanceof BundleRequirementImpl))
+				return false;
+			return ((BundleRequirementImpl) obj).getVersionConstraint() == VersionConstraintImpl.this;
+		}
+
+		public String toString() {
+			return getNamespace() + BaseDescriptionImpl.toString(getAttributes(), false);
+		}
+	}
+
+	static StringBuffer addFilterAttributes(StringBuffer filter, Map<String, ?> attributes) {
+		for (Map.Entry<String, ?> entry : attributes.entrySet()) {
+			addFilterAttribute(filter, entry.getKey(), entry.getValue());
+		}
+		return filter;
+	}
+
+	static StringBuffer addFilterAttribute(StringBuffer filter, String attr, Object value) {
+		return addFilterAttribute(filter, attr, value, true);
+	}
+
+	static private final Version MAX_VERSION = new Version(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE);
+
+	// TODO this is coupled to the implementation detail of version range for open range check
+	// TODO we need to create a new method on VersionRange to get a filter string and likely should add a FilterBuilder.
+	static StringBuffer addFilterAttribute(StringBuffer filter, String attr, Object value, boolean escapeWildCard) {
+		if (value instanceof VersionRange) {
+			VersionRange range = (VersionRange) value;
+			if (range.getIncludeMinimum()) {
+				filter.append('(').append(attr).append(">=").append(escapeValue(range.getMinimum(), escapeWildCard)).append(')'); //$NON-NLS-1$
+			} else {
+				filter.append("(!(").append(attr).append("<=").append(escapeValue(range.getMinimum(), escapeWildCard)).append("))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			// only include the maximum check if this is not an open range
+			// this check is a bit hacky because we have no method on VersionRange to check if the range really is open
+			if (!(MAX_VERSION.equals(range.getMaximum()) && range.getIncludeMaximum())) {
+				if (range.getIncludeMaximum()) {
+					filter.append('(').append(attr).append("<=").append(escapeValue(range.getMaximum(), escapeWildCard)).append(')'); //$NON-NLS-1$
+				} else {
+					filter.append("(!(").append(attr).append(">=").append(escapeValue(range.getMaximum(), escapeWildCard)).append("))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				}
+			}
+		} else {
+			filter.append('(').append(attr).append('=').append(escapeValue(value, escapeWildCard)).append(')');
+		}
+		return filter;
+	}
+
+	private static String escapeValue(Object o, boolean escapeWildCard) {
+		String value = o.toString();
+		boolean escaped = false;
+		int inlen = value.length();
+		int outlen = inlen << 1; /* inlen * 2 */
+
+		char[] output = new char[outlen];
+		value.getChars(0, inlen, output, inlen);
+
+		int cursor = 0;
+		for (int i = inlen; i < outlen; i++) {
+			char c = output[i];
+			switch (c) {
+				case '*' :
+					if (!escapeWildCard)
+						break;
+				case '\\' :
+				case '(' :
+				case ')' :
+					output[cursor] = '\\';
+					cursor++;
+					escaped = true;
+					break;
+			}
+
+			output[cursor] = c;
+			cursor++;
+		}
+
+		return escaped ? new String(output, 0, cursor) : value;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java
index 4be1f7f..7cbb1ef 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.osgi.internal.provisional.service.security;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.eclipse.osgi.framework.eventmgr.*;
 import org.eclipse.osgi.signedcontent.SignedContent;
 import org.osgi.framework.BundleContext;
@@ -24,11 +26,11 @@ import org.osgi.util.tracker.ServiceTracker;
 public abstract class AuthorizationEngine {
 
 	private EventManager manager = new EventManager();
-	private EventDispatcher dispatcher = new AuthEventDispatcher();
-	private final ServiceTracker listenerTracker;
+	private EventDispatcher<AuthorizationListener, Object, AuthorizationEvent> dispatcher = new AuthEventDispatcher();
+	private final ServiceTracker<AuthorizationListener, AuthorizationListener> listenerTracker;
 
 	public AuthorizationEngine(BundleContext context) {
-		listenerTracker = new ServiceTracker(context, AuthorizationListener.class.getName(), null);
+		listenerTracker = new ServiceTracker<AuthorizationListener, AuthorizationListener>(context, AuthorizationListener.class.getName(), null);
 		listenerTracker.open();
 	}
 
@@ -50,9 +52,11 @@ public abstract class AuthorizationEngine {
 		Object[] services = listenerTracker.getServices();
 		if (services == null)
 			return;
-		CopyOnWriteIdentityMap listeners = new CopyOnWriteIdentityMap();
-		listeners.putAll(services);
-		ListenerQueue queue = new ListenerQueue(manager);
+		Map<AuthorizationListener, Object> listeners = new HashMap<AuthorizationListener, Object>();
+		for (Object service : services) {
+			listeners.put((AuthorizationListener) service, service);
+		}
+		ListenerQueue<AuthorizationListener, Object, AuthorizationEvent> queue = new ListenerQueue<AuthorizationListener, Object, AuthorizationEvent>(manager);
 		queue.queueListeners(listeners.entrySet(), dispatcher);
 		queue.dispatchEventSynchronous(0, event);
 	}
@@ -76,9 +80,9 @@ public abstract class AuthorizationEngine {
 	 */
 	abstract public int getStatus();
 
-	class AuthEventDispatcher implements EventDispatcher {
-		public void dispatchEvent(Object eventListener, Object listenerObject, int eventAction, Object eventObject) {
-			((AuthorizationListener) eventListener).authorizationEvent((AuthorizationEvent) eventObject);
+	class AuthEventDispatcher implements EventDispatcher<AuthorizationListener, Object, AuthorizationEvent> {
+		public void dispatchEvent(AuthorizationListener eventListener, Object listenerObject, int eventAction, AuthorizationEvent eventObject) {
+			eventListener.authorizationEvent(eventObject);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java
index 83fdd36..96b4bda 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java
@@ -14,8 +14,7 @@ import java.io.*;
 import java.security.*;
 import java.security.cert.*;
 import java.security.cert.Certificate;
-import java.util.ArrayList;
-import java.util.Enumeration;
+import java.util.*;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
 import org.eclipse.osgi.internal.signedcontent.SignedBundleHook;
 import org.eclipse.osgi.internal.signedcontent.SignedContentMessages;
@@ -156,8 +155,8 @@ public class KeyStoreTrustEngine extends TrustEngine {
 
 	private Certificate findAlternativeRoot(X509Certificate cert, KeyStore store) throws InvalidKeyException, KeyStoreException, NoSuchAlgorithmException, NoSuchProviderException, SignatureException, CertificateException {
 		synchronized (store) {
-			for (Enumeration e = store.aliases(); e.hasMoreElements();) {
-				Certificate nextCert = store.getCertificate((String) e.nextElement());
+			for (Enumeration<String> e = store.aliases(); e.hasMoreElements();) {
+				Certificate nextCert = store.getCertificate(e.nextElement());
 				if (nextCert instanceof X509Certificate && ((X509Certificate) nextCert).getSubjectDN().equals(cert.getIssuerDN())) {
 					cert.verify(nextCert.getPublicKey());
 					return nextCert;
@@ -258,12 +257,12 @@ public class KeyStoreTrustEngine extends TrustEngine {
 
 	public String[] getAliases() throws IOException, GeneralSecurityException {
 
-		ArrayList returnList = new ArrayList();
+		List<String> returnList = new ArrayList<String>();
 		try {
 			KeyStore store = getKeyStore();
 			synchronized (store) {
-				for (Enumeration aliases = store.aliases(); aliases.hasMoreElements();) {
-					String currentAlias = (String) aliases.nextElement();
+				for (Enumeration<String> aliases = store.aliases(); aliases.hasMoreElements();) {
+					String currentAlias = aliases.nextElement();
 					if (store.isCertificateEntry(currentAlias)) {
 						returnList.add(currentAlias);
 					}
@@ -272,7 +271,7 @@ public class KeyStoreTrustEngine extends TrustEngine {
 		} catch (KeyStoreException ke) {
 			throw (CertificateException) new CertificateException(ke.getMessage()).initCause(ke);
 		}
-		return (String[]) returnList.toArray(new String[] {});
+		return returnList.toArray(new String[] {});
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/LegacyVerifierFactory.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/LegacyVerifierFactory.java
index bbd7ac9..d0ecae6 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/LegacyVerifierFactory.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/LegacyVerifierFactory.java
@@ -12,8 +12,7 @@ import java.io.File;
 import java.io.IOException;
 import java.security.GeneralSecurityException;
 import java.security.cert.*;
-import java.util.ArrayList;
-import java.util.Date;
+import java.util.*;
 import org.eclipse.osgi.internal.provisional.verifier.*;
 import org.eclipse.osgi.signedcontent.*;
 import org.osgi.framework.Bundle;
@@ -77,7 +76,7 @@ public class LegacyVerifierFactory implements CertificateVerifierFactory {
 		}
 
 		public String[] verifyContent() {
-			ArrayList invalidContent = new ArrayList(0);
+			List<String> invalidContent = new ArrayList<String>(0);
 			SignedContentEntry[] entries = signedContent.getSignedEntries();
 			for (int i = 0; i < entries.length; i++) {
 				try {
@@ -88,7 +87,7 @@ public class LegacyVerifierFactory implements CertificateVerifierFactory {
 					invalidContent.add(entries[i].getName());
 				}
 			}
-			return (String[]) invalidContent.toArray(new String[invalidContent.size()]);
+			return invalidContent.toArray(new String[invalidContent.size()]);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java
index 9c92a62..29a82bf 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2006, 2010 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -15,7 +15,7 @@ import java.util.*;
 public class PKCS7DateParser {
 
 	static Date parseDate(PKCS7Processor pkcs7Processor, String signer, String file) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, SignatureException, NoSuchProviderException {
-		Map unsignedAttrs = pkcs7Processor.getUnsignedAttrs();
+		Map<int[], byte[]> unsignedAttrs = pkcs7Processor.getUnsignedAttrs();
 		if (unsignedAttrs != null) {
 			// get the timestamp construct
 			byte[] timeStampConstruct = retrieveTimeStampConstruct(unsignedAttrs);
@@ -31,13 +31,13 @@ public class PKCS7DateParser {
 		return null;
 	}
 
-	private static byte[] retrieveTimeStampConstruct(Map unsignedAttrs) {
-		Set objIDs = unsignedAttrs.keySet();
-		Iterator iter = objIDs.iterator();
+	private static byte[] retrieveTimeStampConstruct(Map<int[], byte[]> unsignedAttrs) {
+		Set<int[]> objIDs = unsignedAttrs.keySet();
+		Iterator<int[]> iter = objIDs.iterator();
 		while (iter.hasNext()) {
-			int[] objID = (int[]) iter.next();
+			int[] objID = iter.next();
 			if (Arrays.equals(SignedContentConstants.TIMESTAMP_OID, objID)) {
-				return (byte[]) unsignedAttrs.get(objID);
+				return unsignedAttrs.get(objID);
 			}
 		}
 		return null;
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java
index c42e675..1e7ddc9 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java
@@ -41,10 +41,10 @@ public class PKCS7Processor implements SignedContentConstants {
 	private Certificate[] tsaCertificates;
 
 	// key(object id) = value(structure)
-	private Map signedAttrs;
+	private Map<int[], byte[]> signedAttrs;
 
 	//	key(object id) = value(structure)
-	private Map unsignedAttrs;
+	private Map<int[], byte[]> unsignedAttrs;
 
 	// store the signature of a signerinfo
 	private byte signature[];
@@ -91,7 +91,7 @@ public class PKCS7Processor implements SignedContentConstants {
 		this.signer = signer;
 		this.file = file;
 		// First grab the certificates
-		List certs = null;
+		List<Certificate> certs = null;
 
 		BERProcessor bp = new BERProcessor(pkcs7, pkcs7Offset, pkcs7Length);
 
@@ -136,7 +136,7 @@ public class PKCS7Processor implements SignedContentConstants {
 		certs = constructCertPath(certs, signerCert);
 
 		// initialize the certificates
-		certificates = (Certificate[]) certs.toArray(new Certificate[certs.size()]);
+		certificates = certs.toArray(new Certificate[certs.size()]);
 		verifyCerts();
 		// if this pkcs7process is tsa asn.1 block, the signingTime should already be set
 		if (signingTime == null)
@@ -206,8 +206,8 @@ public class PKCS7Processor implements SignedContentConstants {
 		}
 	}
 
-	private List constructCertPath(List certs, Certificate targetCert) {
-		List certsList = new ArrayList();
+	private List<Certificate> constructCertPath(List<Certificate> certs, Certificate targetCert) {
+		List<Certificate> certsList = new ArrayList<Certificate>();
 		certsList.add(targetCert);
 
 		X509Certificate currentCert = (X509Certificate) targetCert;
@@ -224,7 +224,7 @@ public class PKCS7Processor implements SignedContentConstants {
 			}
 
 			currentCert = null;
-			Iterator itr = certs.iterator();
+			Iterator<Certificate> itr = certs.iterator();
 
 			while (itr.hasNext()) {
 				X509Certificate tempCert = (X509Certificate) itr.next();
@@ -261,7 +261,7 @@ public class PKCS7Processor implements SignedContentConstants {
 		}
 	}
 
-	private Certificate processSignerInfos(BERProcessor bp, List certs) throws CertificateException, NoSuchAlgorithmException, SignatureException {
+	private Certificate processSignerInfos(BERProcessor bp, List<Certificate> certs) throws CertificateException, NoSuchAlgorithmException, SignatureException {
 		// We assume there is only one SingerInfo element 
 
 		// PKCS7: SignerINFOS processing
@@ -286,7 +286,7 @@ public class PKCS7Processor implements SignedContentConstants {
 		// initilize the newSignerCert to the issuer cert of leaf cert
 		Certificate newSignerCert = null;
 
-		Iterator itr = certs.iterator();
+		Iterator<Certificate> itr = certs.iterator();
 		// PKCS7: compuare the issuers in the issuerAndSN BER equals to the issuers in Certs generated at the beginning of this method
 		// it seems like there is no neeed, cause both ways use the same set of bytes
 		while (itr.hasNext()) {
@@ -338,7 +338,7 @@ public class PKCS7Processor implements SignedContentConstants {
 		if (bp.classOfTag == BERProcessor.CONTEXTSPECIFIC_TAGCLASS && bp.tag == 1) {
 
 			// there are some unsignedAttrs are found!!
-			unsignedAttrs = new HashMap();
+			unsignedAttrs = new HashMap<int[], byte[]>();
 
 			// step into a set of unsigned attributes, I believe, when steps 
 			// into here, the 'poiter' is pointing to the first element
@@ -349,14 +349,14 @@ public class PKCS7Processor implements SignedContentConstants {
 				BERProcessor unsignedAttrBER = unsignedAttrsBERS.stepInto();
 
 				// check if it is timestamp attribute type
-				int objID[] = unsignedAttrBER.getObjId();
+				int[] objID = unsignedAttrBER.getObjId();
 				// if(Arrays.equals(TIMESTAMP_OID, objID)) {
 				// System.out.println("This is a timestamp type, to continue");
 				// }
 
 				// get the structure for the attribute type
 				unsignedAttrBER.stepOver();
-				byte structure[] = unsignedAttrBER.getBytes();
+				byte[] structure = unsignedAttrBER.getBytes();
 				unsignedAttrs.put(objID, structure);
 				unsignedAttrsBERS.stepOver();
 			} while (!unsignedAttrsBERS.endOfSequence());
@@ -367,7 +367,7 @@ public class PKCS7Processor implements SignedContentConstants {
 		if (bp.classOfTag == BERProcessor.CONTEXTSPECIFIC_TAGCLASS) {
 
 			// process the signed attributes
-			signedAttrs = new HashMap();
+			signedAttrs = new HashMap<int[], byte[]>();
 
 			BERProcessor signedAttrsBERS = bp.stepInto();
 			do {
@@ -405,7 +405,7 @@ public class PKCS7Processor implements SignedContentConstants {
 	 * 
 	 * @return  map if there is any signed attributes, null otherwise
 	 */
-	public Map getUnsignedAttrs() {
+	public Map<int[], byte[]> getUnsignedAttrs() {
 		return unsignedAttrs;
 	}
 
@@ -414,7 +414,7 @@ public class PKCS7Processor implements SignedContentConstants {
 	 * 
 	 * @return  map if there is any signed attributes, null otherwise
 	 */
-	public Map getSignedAttrs() {
+	public Map<int[], byte[]> getSignedAttrs() {
 		return signedAttrs;
 	}
 
@@ -426,8 +426,8 @@ public class PKCS7Processor implements SignedContentConstants {
 	 * @throws CertificateException
 	 * @throws SignatureException 
 	 */
-	private List processCertificates(BERProcessor bp) throws CertificateException, SignatureException {
-		List rtvList = new ArrayList(3);
+	private List<Certificate> processCertificates(BERProcessor bp) throws CertificateException, SignatureException {
+		List<Certificate> rtvList = new ArrayList<Certificate>(3);
 
 		// Step into the first certificate-element
 		BERProcessor certsBERS = bp.stepInto();
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java
index df54292..30f43f8 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -14,7 +14,6 @@ import java.security.*;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateException;
 import java.util.*;
-import java.util.Map.Entry;
 import org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry;
 import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
@@ -23,10 +22,10 @@ import org.eclipse.osgi.util.NLS;
 
 public class SignatureBlockProcessor implements SignedContentConstants {
 	private final SignedBundleFile signedBundle;
-	private ArrayList signerInfos = new ArrayList();
-	private HashMap contentMDResults = new HashMap();
+	private List<SignerInfo> signerInfos = new ArrayList<SignerInfo>();
+	private Map<String, Object> contentMDResults = new HashMap<String, Object>();
 	// map of tsa singers keyed by SignerInfo -> {tsa_SignerInfo, signingTime}
-	private HashMap tsaSignerInfos;
+	private Map<SignerInfo, Object[]> tsaSignerInfos;
 	private final int supportFlags;
 
 	public SignatureBlockProcessor(SignedBundleFile signedContent, int supportFlags) {
@@ -41,10 +40,10 @@ public class SignatureBlockProcessor implements SignedContentConstants {
 			return createUnsignedContent();
 
 		// read all the signature block file names into a list
-		Enumeration en = wrappedBundleFile.getEntryPaths(META_INF);
-		List signers = new ArrayList(2);
+		Enumeration<String> en = wrappedBundleFile.getEntryPaths(META_INF);
+		List<String> signers = new ArrayList<String>(2);
 		while (en.hasMoreElements()) {
-			String name = (String) en.nextElement();
+			String name = en.nextElement();
 			if ((name.endsWith(DOT_DSA) || name.endsWith(DOT_RSA)) && name.indexOf('/') == name.lastIndexOf('/'))
 				signers.add(name);
 		}
@@ -55,17 +54,18 @@ public class SignatureBlockProcessor implements SignedContentConstants {
 
 		byte manifestBytes[] = readIntoArray(be);
 		// process the signers
-		Iterator iSigners = signers.iterator();
-		for (int i = 0; iSigners.hasNext(); i++)
-			processSigner(wrappedBundleFile, manifestBytes, (String) iSigners.next());
+
+		for (Iterator<String> iSigners = signers.iterator(); iSigners.hasNext();)
+			processSigner(wrappedBundleFile, manifestBytes, iSigners.next());
 
 		// done processing now create a SingedContent to return
-		SignerInfo[] allSigners = (SignerInfo[]) signerInfos.toArray(new SignerInfo[signerInfos.size()]);
-		for (Iterator iResults = contentMDResults.entrySet().iterator(); iResults.hasNext();) {
-			Entry entry = (Entry) iResults.next();
-			ArrayList[] value = (ArrayList[]) entry.getValue();
-			SignerInfo[] entrySigners = (SignerInfo[]) value[0].toArray(new SignerInfo[value[0].size()]);
-			byte[][] entryResults = (byte[][]) value[1].toArray(new byte[value[1].size()][]);
+		SignerInfo[] allSigners = signerInfos.toArray(new SignerInfo[signerInfos.size()]);
+		for (Iterator<Map.Entry<String, Object>> iResults = contentMDResults.entrySet().iterator(); iResults.hasNext();) {
+			Map.Entry<String, Object> entry = iResults.next();
+			@SuppressWarnings("unchecked")
+			List<Object>[] value = (List<Object>[]) entry.getValue();
+			SignerInfo[] entrySigners = value[0].toArray(new SignerInfo[value[0].size()]);
+			byte[][] entryResults = value[1].toArray(new byte[value[1].size()][]);
 			entry.setValue(new Object[] {entrySigners, entryResults});
 		}
 		SignedContentImpl result = new SignedContentImpl(allSigners, (supportFlags & SignedBundleHook.VERIFY_RUNTIME) != 0 ? contentMDResults : null);
@@ -115,7 +115,7 @@ public class SignatureBlockProcessor implements SignedContentConstants {
 		if (tsaCerts != null && signingTime != null) {
 			SignerInfoImpl tsaSignerInfo = new SignerInfoImpl(tsaCerts, null, digAlg);
 			if (tsaSignerInfos == null)
-				tsaSignerInfos = new HashMap(2);
+				tsaSignerInfos = new HashMap<SignerInfo, Object[]>(2);
 			tsaSignerInfos.put(signerInfo, new Object[] {tsaSignerInfo, signingTime});
 		}
 	}
@@ -213,18 +213,21 @@ public class SignatureBlockProcessor implements SignedContentConstants {
 					//						throw new RuntimeException(
 					//								"Errors occurs when parsing the manifest file stream!"); //$NON-NLS-1$
 					//					}
-					ArrayList[] mdResult = (ArrayList[]) contentMDResults.get(entryName);
+					@SuppressWarnings("unchecked")
+					List<Object>[] mdResult = (List<Object>[]) contentMDResults.get(entryName);
 					if (mdResult == null) {
-						mdResult = new ArrayList[2];
-						mdResult[0] = new ArrayList();
-						mdResult[1] = new ArrayList();
+						@SuppressWarnings("unchecked")
+						List<Object>[] arrayLists = new ArrayList[2];
+						mdResult = arrayLists;
+						mdResult[0] = new ArrayList<Object>();
+						mdResult[1] = new ArrayList<Object>();
 						contentMDResults.put(entryName, mdResult);
 					}
 					mdResult[0].add(signerInfo);
 					mdResult[1].add(digestResult);
 				} // could get lines of digest entries in this MF file entry
 			} // could retrieve entry name
-			// increment the offset to the ending entry...
+				// increment the offset to the ending entry...
 			entryStartOffset = entryEndOffset;
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleFile.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleFile.java
index bd19bbe..a271261 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleFile.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,7 +122,7 @@ public class SignedBundleFile extends BundleFile implements SignedContentConstan
 		return new SignedBundleEntry(be);
 	}
 
-	public Enumeration getEntryPaths(String path) {
+	public Enumeration<String> getEntryPaths(String path) {
 		return wrappedBundleFile.getEntryPaths(path);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java
index 5b90453..58e417d 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java
@@ -57,7 +57,7 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 	//TODO: comes from configuration!;
 	private static String CACERTS_PATH = System.getProperty("java.home") + File.separatorChar + "lib" + File.separatorChar + "security" + File.separatorChar + "cacerts"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$//$NON-NLS-4$
 	private static String CACERTS_TYPE = "JKS"; //$NON-NLS-1$
-	private static ServiceTracker trustEngineTracker;
+	private static ServiceTracker<TrustEngine, TrustEngine> trustEngineTracker;
 	private static BaseAdaptor ADAPTOR;
 	private static String SIGNED_BUNDLE_SUPPORT = "osgi.support.signature.verify"; //$NON-NLS-1$
 	private static String SIGNED_CONTENT_SUPPORT = "osgi.signedcontent.support"; //$NON-NLS-1$
@@ -65,16 +65,19 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 	private static int supportSignedBundles;
 	private TrustEngineListener trustEngineListener;
 	private BundleInstallListener installListener;
-	private ServiceRegistration signedContentFactoryReg;
-	private ServiceRegistration systemTrustEngineReg;
-	private ServiceRegistration defaultAuthEngineReg;
-	private List osgiTrustEngineReg;
-	private ServiceRegistration legacyFactoryReg;
+	private ServiceRegistration<?> signedContentFactoryReg;
+	private ServiceRegistration<?> systemTrustEngineReg;
+	private ServiceRegistration<?> defaultAuthEngineReg;
+	private List<ServiceRegistration<?>> osgiTrustEngineReg;
+	private ServiceRegistration<?> legacyFactoryReg;
 
 	public void initialize(BaseAdaptor adaptor) {
 		SignedBundleHook.ADAPTOR = adaptor;
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStart(BundleContext context) throws BundleException {
 		// check if load time authority is enabled
 		if ((supportSignedBundles & VERIFY_AUTHORITY) != 0) {
@@ -82,14 +85,14 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 			installListener = new BundleInstallListener();
 			context.addBundleListener(installListener);
 			// register the default authorization engine
-			Hashtable properties = new Hashtable(7);
+			Dictionary<String, Object> properties = new Hashtable<String, Object>(7);
 			properties.put(Constants.SERVICE_RANKING, new Integer(Integer.MIN_VALUE));
 			properties.put(SignedContentConstants.AUTHORIZATION_ENGINE, SignedContentConstants.DEFAULT_AUTHORIZATION_ENGINE);
 			defaultAuthEngineReg = context.registerService(AuthorizationEngine.class.getName(), new DefaultAuthorizationEngine(context, ADAPTOR.getState()), properties);
 		}
 
 		// always register the trust engine
-		Hashtable trustEngineProps = new Hashtable(7);
+		Dictionary<String, Object> trustEngineProps = new Hashtable<String, Object>(7);
 		trustEngineProps.put(Constants.SERVICE_RANKING, new Integer(Integer.MIN_VALUE));
 		trustEngineProps.put(SignedContentConstants.TRUST_ENGINE, SignedContentConstants.DEFAULT_TRUST_ENGINE);
 		KeyStoreTrustEngine systemTrustEngine = new KeyStoreTrustEngine(CACERTS_PATH, CACERTS_TYPE, null, "System"); //$NON-NLS-1$
@@ -101,7 +104,7 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 				if ("file".equals(url.getProtocol())) { //$NON-NLS-1$
 					trustEngineProps.put(SignedContentConstants.TRUST_ENGINE, OSGI_KEYSTORE);
 					String path = url.getPath();
-					osgiTrustEngineReg = new ArrayList(1);
+					osgiTrustEngineReg = new ArrayList<ServiceRegistration<?>>(1);
 					osgiTrustEngineReg.add(context.registerService(TrustEngine.class.getName(), new KeyStoreTrustEngine(path, CACERTS_TYPE, null, OSGI_KEYSTORE), trustEngineProps));
 				}
 			} catch (MalformedURLException e) {
@@ -112,7 +115,7 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 			if (osgiTrustRepoPaths != null) {
 				trustEngineProps.put(SignedContentConstants.TRUST_ENGINE, Constants.FRAMEWORK_TRUST_REPOSITORIES);
 				StringTokenizer st = new StringTokenizer(osgiTrustRepoPaths, File.pathSeparator);
-				osgiTrustEngineReg = new ArrayList(1);
+				osgiTrustEngineReg = new ArrayList<ServiceRegistration<?>>(1);
 				while (st.hasMoreTokens()) {
 					String trustRepoPath = st.nextToken();
 					osgiTrustEngineReg.add(context.registerService(TrustEngine.class.getName(), new KeyStoreTrustEngine(trustRepoPath, CACERTS_TYPE, null, OSGI_KEYSTORE), trustEngineProps));
@@ -127,6 +130,9 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 		legacyFactoryReg = context.registerService(CertificateVerifierFactory.class.getName(), new LegacyVerifierFactory(this), null);
 	}
 
+	/**
+	 * @throws BundleException  
+	 */
 	public void frameworkStop(BundleContext context) throws BundleException {
 		if (legacyFactoryReg != null) {
 			legacyFactoryReg.unregister();
@@ -141,8 +147,8 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 			systemTrustEngineReg = null;
 		}
 		if (osgiTrustEngineReg != null) {
-			for (Iterator it = osgiTrustEngineReg.iterator(); it.hasNext();)
-				((ServiceRegistration) it.next()).unregister();
+			for (Iterator<ServiceRegistration<?>> it = osgiTrustEngineReg.iterator(); it.hasNext();)
+				it.next().unregister();
 			osgiTrustEngineReg = null;
 		}
 		if (defaultAuthEngineReg != null) {
@@ -171,6 +177,9 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 		// do nothing
 	}
 
+	/**
+	 * @throws IOException  
+	 */
 	public URLConnection mapLocationToURLConnection(String location) throws IOException {
 		return null;
 	}
@@ -271,8 +280,8 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 		if (System.getSecurityManager() == null)
 			return getSignedContent(((BaseData) data).getBundleFile().getBaseFile());
 		try {
-			return (SignedContent) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<SignedContent>() {
+				public SignedContent run() throws Exception {
 					return getSignedContent(((BaseData) data).getBundleFile().getBaseFile());
 				}
 			});
@@ -325,9 +334,9 @@ public class SignedBundleHook implements AdaptorHook, BundleFileWrapperFactoryHo
 					SignedBundleHook.log("Invalid trust engine filter", FrameworkLogEntry.WARNING, e); //$NON-NLS-1$
 				}
 			if (filter != null) {
-				trustEngineTracker = new ServiceTracker(context, filter, null);
+				trustEngineTracker = new ServiceTracker<TrustEngine, TrustEngine>(context, filter, null);
 			} else
-				trustEngineTracker = new ServiceTracker(context, TrustEngine.class.getName(), null);
+				trustEngineTracker = new ServiceTracker<TrustEngine, TrustEngine>(context, TrustEngine.class.getName(), null);
 			trustEngineTracker.open();
 		}
 		Object[] services = trustEngineTracker.getServices();
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java
index c1bfbd5..fdf572c 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,7 @@ public class SignedContentFile implements SignedContent {
 
 	private final SignedContentImpl signedContent;
 	// a cache of verification exceptions
-	private HashMap entryExceptions = null;
+	private Map<String, Throwable> entryExceptions = null;
 
 	public SignedContentFile(SignedContentImpl signedContent) {
 		try {
@@ -45,7 +45,7 @@ public class SignedContentFile implements SignedContent {
 		if (signedContent == null)
 			return null;
 		SignedContentEntry[] results = new SignedContentEntry[entries.length];
-		Map exceptions = getEntryExceptions(true);
+		Map<String, Throwable> exceptions = getEntryExceptions(true);
 		for (int i = 0; i < entries.length; i++) {
 			try {
 				entries[i].verify();
@@ -86,9 +86,9 @@ public class SignedContentFile implements SignedContent {
 		return signedContent.isSigned();
 	}
 
-	synchronized Map getEntryExceptions(boolean create) {
+	synchronized Map<String, Throwable> getEntryExceptions(boolean create) {
 		if (create && entryExceptions == null)
-			entryExceptions = new HashMap(5);
+			entryExceptions = new HashMap<String, Throwable>(5);
 		return entryExceptions;
 	}
 
@@ -113,7 +113,7 @@ public class SignedContentFile implements SignedContent {
 
 		public void verify() throws IOException, InvalidContentException {
 			// check the entry exceptions map for the entry name
-			Map exceptions = getEntryExceptions(false);
+			Map<String, Throwable> exceptions = getEntryExceptions(false);
 			Throwable t = exceptions == null ? null : (Throwable) exceptions.get(entry.getName());
 			if (t == null)
 				return;
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java
index 4753c68..af03ea8 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -12,7 +12,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.security.cert.*;
 import java.util.*;
-import java.util.Map.Entry;
 import org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry;
 import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile;
 import org.eclipse.osgi.signedcontent.*;
@@ -24,13 +23,13 @@ public class SignedContentImpl implements SignedContent {
 	volatile SignedBundleFile content; // TODO can this be more general?
 	// the content entry md results used for entry content verification
 	// keyed by entry path -> {SignerInfo[] infos, byte[][] results)}
-	private final HashMap contentMDResults;
+	private final Map<String, Object> contentMDResults;
 	private final SignerInfo[] signerInfos;
 	// map of tsa singers keyed by SignerInfo -> {tsa_SignerInfo, signingTime}
-	private HashMap tsaSignerInfos;
+	private Map<SignerInfo, Object[]> tsaSignerInfos;
 	volatile private boolean checkedValid = false;
 
-	public SignedContentImpl(SignerInfo[] signerInfos, HashMap contentMDResults) {
+	public SignedContentImpl(SignerInfo[] signerInfos, Map<String, Object> contentMDResults) {
 		this.signerInfos = signerInfos == null ? EMPTY_SIGNERINFO : signerInfos;
 		this.contentMDResults = contentMDResults;
 	}
@@ -38,14 +37,13 @@ public class SignedContentImpl implements SignedContent {
 	public SignedContentEntry[] getSignedEntries() {
 		if (contentMDResults == null)
 			return new SignedContentEntry[0];
-		ArrayList results = new ArrayList(contentMDResults.size());
-		for (Iterator iMDResults = contentMDResults.entrySet().iterator(); iMDResults.hasNext();) {
-			Entry entry = (Entry) iMDResults.next();
-			String entryName = (String) entry.getKey();
+		List<SignedContentEntry> results = new ArrayList<SignedContentEntry>(contentMDResults.size());
+		for (Map.Entry<String, Object> entry : contentMDResults.entrySet()) {
+			String entryName = entry.getKey();
 			Object[] mdResult = (Object[]) entry.getValue();
 			results.add(new SignedContentEntryImpl(entryName, (SignerInfo[]) mdResult[0]));
 		}
-		return (SignedContentEntry[]) results.toArray(new SignedContentEntry[results.size()]);
+		return results.toArray(new SignedContentEntry[results.size()]);
 	}
 
 	public SignedContentEntry getSignedEntry(String name) {
@@ -62,14 +60,14 @@ public class SignedContentImpl implements SignedContent {
 	public Date getSigningTime(SignerInfo signerInfo) {
 		if (tsaSignerInfos == null)
 			return null;
-		Object[] tsaInfo = (Object[]) tsaSignerInfos.get(signerInfo);
+		Object[] tsaInfo = tsaSignerInfos.get(signerInfo);
 		return tsaInfo == null ? null : (Date) tsaInfo[1];
 	}
 
 	public SignerInfo getTSASignerInfo(SignerInfo signerInfo) {
 		if (tsaSignerInfos == null)
 			return null;
-		Object[] tsaInfo = (Object[]) tsaSignerInfos.get(signerInfo);
+		Object[] tsaInfo = tsaSignerInfos.get(signerInfo);
 		return tsaInfo == null ? null : (SignerInfo) tsaInfo[0];
 	}
 
@@ -97,7 +95,7 @@ public class SignedContentImpl implements SignedContent {
 		this.content = content;
 	}
 
-	void setTSASignerInfos(HashMap tsaSignerInfos) {
+	void setTSASignerInfos(Map<SignerInfo, Object[]> tsaSignerInfos) {
 		this.tsaSignerInfos = tsaSignerInfos;
 	}
 
@@ -106,11 +104,11 @@ public class SignedContentImpl implements SignedContent {
 		if (!containsInfo(baseInfo))
 			throw new IllegalArgumentException("The baseInfo is not found"); //$NON-NLS-1$
 		if (tsaSignerInfos == null)
-			tsaSignerInfos = new HashMap(signerInfos.length);
+			tsaSignerInfos = new HashMap<SignerInfo, Object[]>(signerInfos.length);
 		tsaSignerInfos.put(baseInfo, new Object[] {tsaSignerInfo, signingTime});
 	}
 
-	HashMap getContentMDResults() {
+	Map<String, Object> getContentMDResults() {
 		return contentMDResults;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java
index e544e79..2fe55e5 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java
@@ -11,7 +11,6 @@ package org.eclipse.osgi.internal.signedcontent;
 import java.io.*;
 import java.security.cert.*;
 import java.util.*;
-import java.util.Map.Entry;
 import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.baseadaptor.hooks.StorageHook;
 import org.eclipse.osgi.framework.util.KeyedElement;
@@ -24,10 +23,10 @@ public class SignedStorageHook implements StorageHook {
 	public static final String KEY = SignedStorageHook.class.getName();
 	public static final int HASHCODE = KEY.hashCode();
 	private static final int STORAGE_VERSION = 3;
-	private static ArrayList savedSignerInfo = new ArrayList(5);
+	private static List<SignerInfo> savedSignerInfo = new ArrayList<SignerInfo>(5);
 	private static long firstIDSaved = -1;
 	private static long lastIDSaved = -1;
-	private static ArrayList loadedSignerInfo = new ArrayList(5);
+	private static List<SignerInfo> loadedSignerInfo = new ArrayList<SignerInfo>(5);
 	private static long lastIDLoaded;
 
 	private BaseData bundledata;
@@ -37,13 +36,19 @@ public class SignedStorageHook implements StorageHook {
 		return STORAGE_VERSION;
 	}
 
-	public StorageHook create(BaseData bundledata) throws BundleException {
+	/**
+	 * @throws BundleException  
+	 */
+	public StorageHook create(BaseData data) throws BundleException {
 		SignedStorageHook hook = new SignedStorageHook();
-		hook.bundledata = bundledata;
+		hook.bundledata = data;
 		return hook;
 	}
 
-	public void initialize(Dictionary manifest) throws BundleException {
+	/**
+	 * @throws BundleException  
+	 */
+	public void initialize(Dictionary<String, String> manifest) throws BundleException {
 		// do nothing
 	}
 
@@ -62,9 +67,9 @@ public class SignedStorageHook implements StorageHook {
 			signerInfos[i] = readSignerInfo(is);
 
 		int resultsSize = is.readInt();
-		HashMap contentMDResults = null;
+		Map<String, Object> contentMDResults = null;
 		if (resultsSize > 0) {
-			contentMDResults = new HashMap(resultsSize);
+			contentMDResults = new HashMap<String, Object>(resultsSize);
 			for (int i = 0; i < resultsSize; i++) {
 				String path = is.readUTF();
 				int numEntrySigners = is.readInt();
@@ -107,12 +112,11 @@ public class SignedStorageHook implements StorageHook {
 			saveSignerInfo(signerInfos[i], os);
 
 		// keyed by entry path -> {SignerInfo[] infos, byte[][] results)}
-		HashMap contentMDResults = signedContent.getContentMDResults();
+		Map<String, Object> contentMDResults = signedContent.getContentMDResults();
 		os.writeInt(contentMDResults == null ? -1 : contentMDResults.size());
 		if (contentMDResults != null)
-			for (Iterator iResults = contentMDResults.entrySet().iterator(); iResults.hasNext();) {
-				Entry entry = (Entry) iResults.next();
-				String path = (String) entry.getKey();
+			for (Map.Entry<String, Object> entry : contentMDResults.entrySet()) {
+				String path = entry.getKey();
 				os.writeUTF(path);
 				Object[] signerResults = (Object[]) entry.getValue();
 				SignerInfo[] entrySigners = (SignerInfo[]) signerResults[0];
@@ -165,7 +169,7 @@ public class SignedStorageHook implements StorageHook {
 	private SignerInfo readSignerInfo(DataInputStream is) throws IOException {
 		int index = is.readInt();
 		if (index >= 0)
-			return (SignerInfo) loadedSignerInfo.get(index);
+			return loadedSignerInfo.get(index);
 		int numCerts = is.readInt();
 		Certificate[] certs = new Certificate[numCerts];
 		for (int i = 0; i < numCerts; i++) {
@@ -202,7 +206,10 @@ public class SignedStorageHook implements StorageHook {
 		// do nothing
 	}
 
-	public Dictionary getManifest(boolean firstLoad) throws BundleException {
+	/**
+	 * @throws BundleException  
+	 */
+	public Dictionary<String, String> getManifest(boolean firstLoad) throws BundleException {
 		// do nothing
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java
index 629e447..e965a40 100644
--- a/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java
+++ b/eclipse/plugins/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2007, 2010 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -9,8 +9,7 @@
 package org.eclipse.osgi.internal.signedcontent;
 
 import java.security.cert.Certificate;
-import java.util.HashSet;
-import java.util.Iterator;
+import java.util.*;
 import org.eclipse.osgi.baseadaptor.BaseData;
 import org.eclipse.osgi.framework.internal.core.*;
 import org.eclipse.osgi.framework.log.FrameworkLogEntry;
@@ -25,7 +24,7 @@ public class TrustEngineListener {
 	// this is a singleton listener; see SignedBundleHook for initialization
 	private volatile static TrustEngineListener instance;
 	private final BundleContext context;
-	private final ServiceTracker authorizationTracker;
+	private final ServiceTracker<AuthorizationEngine, AuthorizationEngine> authorizationTracker;
 
 	TrustEngineListener(BundleContext context) {
 		this.context = context;
@@ -39,9 +38,9 @@ public class TrustEngineListener {
 				SignedBundleHook.log("Invalid authorization filter", FrameworkLogEntry.WARNING, e); //$NON-NLS-1$
 			}
 		if (filter != null)
-			authorizationTracker = new ServiceTracker(context, filter, null);
+			authorizationTracker = new ServiceTracker<AuthorizationEngine, AuthorizationEngine>(context, filter, null);
 		else
-			authorizationTracker = new ServiceTracker(context, AuthorizationEngine.class.getName(), null);
+			authorizationTracker = new ServiceTracker<AuthorizationEngine, AuthorizationEngine>(context, AuthorizationEngine.class.getName(), null);
 		authorizationTracker.open();
 		instance = this;
 	}
@@ -59,7 +58,7 @@ public class TrustEngineListener {
 		// find any SignedContent with SignerInfos that do not have an anchor;
 		// re-evaluate trust and check authorization for these SignedContents
 		Bundle[] bundles = context.getBundles();
-		HashSet unresolved = new HashSet();
+		Set<Bundle> unresolved = new HashSet<Bundle>();
 		for (int i = 0; i < bundles.length; i++) {
 			SignedContentImpl signedContent = getSignedContent(bundles[i]);
 			if (signedContent != null && signedContent.isSigned()) {
@@ -84,7 +83,7 @@ public class TrustEngineListener {
 		}
 		// try to resolve
 		if (unresolved.size() > 0)
-			resolveBundles((Bundle[]) unresolved.toArray(new Bundle[unresolved.size()]), false);
+			resolveBundles(unresolved.toArray(new Bundle[unresolved.size()]), false);
 	}
 
 	private void checkAuthorization(SignedContentImpl signedContent, Bundle bundle) {
@@ -94,11 +93,11 @@ public class TrustEngineListener {
 	}
 
 	AuthorizationEngine getAuthorizationEngine() {
-		return (AuthorizationEngine) authorizationTracker.getService();
+		return authorizationTracker.getService();
 	}
 
 	private void resolveBundles(Bundle[] bundles, boolean refresh) {
-		ServiceReference ref = context.getServiceReference(PackageAdmin.class.getName());
+		ServiceReference<?> ref = context.getServiceReference(PackageAdmin.class.getName());
 		if (ref == null)
 			return;
 		PackageAdmin pa = (PackageAdmin) context.getService(ref);
@@ -118,8 +117,8 @@ public class TrustEngineListener {
 		// find any signed content that has signerinfos with the supplied anchor
 		// re-evaluate trust and check authorization again.
 		Bundle[] bundles = context.getBundles();
-		HashSet usingAnchor = new HashSet();
-		HashSet untrustedSigners = new HashSet();
+		Set<Bundle> usingAnchor = new HashSet<Bundle>();
+		Set<SignerInfo> untrustedSigners = new HashSet<SignerInfo>();
 		for (int i = 0; i < bundles.length; i++) {
 			SignedContentImpl signedContent = getSignedContent(bundles[i]);
 			if (signedContent != null && signedContent.isSigned()) {
@@ -141,11 +140,11 @@ public class TrustEngineListener {
 			}
 		}
 		// remove trust anchors from untrusted signers
-		for (Iterator untrusted = untrustedSigners.iterator(); untrusted.hasNext();)
+		for (Iterator<SignerInfo> untrusted = untrustedSigners.iterator(); untrusted.hasNext();)
 			((SignerInfoImpl) untrusted.next()).setTrustAnchor(null);
 		// re-establish trust and check authorization
-		for (Iterator untrustedBundles = usingAnchor.iterator(); untrustedBundles.hasNext();) {
-			Bundle bundle = (Bundle) untrustedBundles.next();
+		for (Iterator<Bundle> untrustedBundles = usingAnchor.iterator(); untrustedBundles.hasNext();) {
+			Bundle bundle = untrustedBundles.next();
 			SignedContentImpl signedContent = getSignedContent(bundle);
 			// found an signer using the anchor for this bundle re-evaluate trust
 			SignedBundleFile.determineTrust(signedContent, SignedBundleHook.VERIFY_TRUST);
@@ -155,7 +154,7 @@ public class TrustEngineListener {
 		// TODO an optimization here would be to check for real DisabledInfo objects for each bundle
 		// try to refresh
 		if (usingAnchor.size() > 0)
-			resolveBundles((Bundle[]) usingAnchor.toArray(new Bundle[usingAnchor.size()]), true);
+			resolveBundles(usingAnchor.toArray(new Bundle[usingAnchor.size()]), true);
 	}
 
 	private SignedContentImpl getSignedContent(Bundle bundle) {
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/.classpath b/eclipse/plugins/org.eclipse.osgi/supplement/.classpath
index ce73933..64c5e31 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/.classpath
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.osgi/supplement/.settings/org.eclipse.jdt.core.prefs
index f31f250..96f55a7 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue Aug 21 11:27:47 CDT 2007
+#Thu Sep 02 15:43:37 CDT 2010
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -7,24 +7,24 @@ org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
 org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=jsr14
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=error
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
@@ -62,7 +62,6 @@ org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
@@ -72,7 +71,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=en
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -144,7 +143,6 @@ org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
 org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF
index 0a72e47..0f66899 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/META-INF/MANIFEST.MF
@@ -2,10 +2,12 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.supplement
-Bundle-Version: 1.3.1.qualifier
+Bundle-Version: 1.4.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.osgi.framework.log;version="1.0",
+Export-Package: org.eclipse.equinox.log;version="1.0",
+ org.eclipse.osgi.framework.eventmgr;version="1.2",
+ org.eclipse.osgi.framework.log;version="1.0",
  org.eclipse.osgi.service.datalocation;version="1.3",
  org.eclipse.osgi.service.debug;version="1.1",
  org.eclipse.osgi.service.environment;version="1.3",
@@ -19,11 +21,13 @@ Export-Package: org.eclipse.osgi.framework.log;version="1.0",
  org.eclipse.osgi.framework.internal.core;x-internal:=true,
  org.eclipse.osgi.framework.internal.reliablefile;x-internal:=true,
  org.eclipse.core.runtime.internal.adaptor;x-internal:=true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,
+ OSGi/Minimum-1.2
 Import-Package: org.osgi.framework,
+ org.osgi.service.log,
  org.osgi.util.tracker,
+ org.eclipse.equinox.log,
+ org.eclipse.osgi.framework.eventmgr,
  org.eclipse.osgi.framework.log,
  org.eclipse.osgi.service.datalocation,
  org.eclipse.osgi.service.debug,
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/build.properties b/eclipse/plugins/org.eclipse.osgi/supplement/build.properties
index ae34811..1f31e36 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/build.properties
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/build.properties
@@ -1,6 +1,6 @@
 
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -16,5 +16,10 @@ bin.includes = META-INF/,\
                plugin.properties,\
                about.html
 src.includes = about.html
-jre.compilation.profile = J2SE-1.4
 
+jre.compilation.profile = J2SE-1.5
+
+javacSource=1.5
+javacTarget=jsr14
+
+javacWarnings..=-deadCode,-raw,-unchecked
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java
index d73ef47..aa5d1f4 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/BasicLocation.java
@@ -22,6 +22,9 @@ import org.eclipse.osgi.util.NLS;
  */
 public class BasicLocation implements Location {
 	static class MockLocker implements Locker {
+		/**
+		 * @throws IOException  
+		 */
 		public boolean lock() throws IOException {
 			// locking always successful
 			return true;
@@ -119,6 +122,9 @@ public class BasicLocation implements Location {
 		return isReadOnly;
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public boolean setURL(URL value, boolean lock) throws IllegalStateException {
 		try {
 			return set(value, lock);
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties
index ecb3dba..c90bb88 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMessages.properties
@@ -1,6 +1,5 @@
-
 ###############################################################################
-# Copyright (c) 2004, 2009 IBM Corporation and others.
+# Copyright (c) 2004, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -31,8 +30,6 @@ ECLIPSE_STARTUP_NOT_RUNNING=Platform not running
 ECLIPSE_STARTUP_STARTUP_ERROR=Startup error
 ECLIPSE_STARTUP_APP_ERROR=Application error
 ECLIPSE_STARTUP_SHUTDOWN_ERROR=Shutdown error
-ECLIPSE_STARTUP_INVALID_PORT=Invalid console port: {0}
-ECLIPSE_STARTUP_FAILED_FIND=Failed to find/start: {0}
 ECLIPSE_STARTUP_FAILED_INSTALL=Error installing bundle: {0}
 ECLIPSE_STARTUP_FAILED_UNINSTALL=Error uninstalling bundle: {0}
 ECLIPSE_STARTUP_FAILED_START=Error starting bundle: {0}
@@ -59,7 +56,6 @@ ECLIPSE_CONSOLE_BUNDLE_DISABLED_MESSAGE=Bundle disabled at console
 ECLIPSE_CONSOLE_DISABLED_COUNT_MESSAGE={0} disabled bundle(s) in the system
 ECLIPSE_CONSOLE_DISABLED_BUNDLE_HEADER=Bundle   :\t{0} (id={1})
 ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON1=Reason(s):\t{0} (policy={1})
-ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON2=\t\t{0} (policy={1})
 
 #Bundle resolution messages
 ECLIPSE_MISSING_OPTIONAL_REQUIRED_BUNDLE=Missing optionally required bundle {0}.
@@ -85,15 +81,12 @@ parse_errorNameLineColumn=Error parsing manifest at \"{0}\" line \"{1}\" column
 ECLIPSE_CLASSLOADER_CANNOT_GET_HEADERS=Error loading bundle manifest for {0}. Using default auto-activation settings.
 ECLIPSE_CLASSLOADER_CONCURRENT_STARTUP=While loading class "{1}", thread "{0}" timed out waiting ({4}ms) for thread "{2}" to finish starting bundle "{3}". To avoid deadlock, thread "{0}" is proceeding but "{1}" may not be fully initialized.
 ECLIPSE_CLASSLOADER_ACTIVATION=An error occurred while automatically activating bundle {0} ({1}).
-ECLIPSE_CLASSLOADER_GENERATED_EXCEPTION=Generated exception.
-ECLIPSE_CLASSLOADER_ALREADY_STOPPED= The class \"{0}\" cannot be loaded because the system is shutting down and the plug-in \"{1}\" has already been stopped.
 
 #CachedManifest messages
 ECLIPSE_CACHEDMANIFEST_UNEXPECTED_EXCEPTION=Unexpected exception occurred loading manifest for bundle at the location: {0}.
 
 #BundleStopper messages
 ECLIPSE_BUNDLESTOPPER_CYCLES_FOUND=Info: cycle(s) found while stopping bundles: {0}.
-ECLIPSE_BUNDLESTOPPER_ERROR_STOPPING_BUNDLE=Error while stopping \"{0}\".
 
 #Location message
 ECLIPSE_CANNOT_CHANGE_LOCATION = Cannot change the location once it is set.
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java
index a89a25a..527f59a 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorMsg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,6 @@ public class EclipseAdaptorMsg extends NLS {
 	public static String ECLIPSE_MISSING_HOST;
 	public static String ECLIPSE_CANNOT_CHANGE_LOCATION;
 	public static String ECLIPSE_BUNDLESTOPPER_CYCLES_FOUND;
-	public static String ECLIPSE_BUNDLESTOPPER_ERROR_STOPPING_BUNDLE;
 	public static String ECLIPSE_CACHEDMANIFEST_UNEXPECTED_EXCEPTION;
 
 	public static String fileManager_cannotLock;
@@ -42,8 +41,6 @@ public class EclipseAdaptorMsg extends NLS {
 
 	public static String ECLIPSE_CLASSLOADER_CONCURRENT_STARTUP;
 	public static String ECLIPSE_CLASSLOADER_ACTIVATION;
-	public static String ECLIPSE_CLASSLOADER_ALREADY_STOPPED;
-	public static String ECLIPSE_CLASSLOADER_GENERATED_EXCEPTION;
 
 	public static String ECLIPSE_CONSOLE_COMMANDS_HEADER;
 	public static String ECLIPSE_CONSOLE_HELP_DIAG_COMMAND_DESCRIPTION;
@@ -60,7 +57,6 @@ public class EclipseAdaptorMsg extends NLS {
 	public static String ECLIPSE_CONSOLE_DISABLED_COUNT_MESSAGE;
 	public static String ECLIPSE_CONSOLE_DISABLED_BUNDLE_HEADER;
 	public static String ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON1;
-	public static String ECLIPSE_CONSOLE_DISABLED_BUNDLE_REASON2;
 
 	public static String ECLIPSE_STARTUP_ALREADY_RUNNING;
 	public static String ECLIPSE_STARTUP_STARTUP_ERROR;
@@ -73,8 +69,6 @@ public class EclipseAdaptorMsg extends NLS {
 	public static String ECLIPSE_STARTUP_ERROR_BUNDLE_NOT_ACTIVE;
 	public static String ECLIPSE_STARTUP_ERROR_BUNDLE_NOT_RESOLVED;
 	public static String ECLIPSE_STARTUP_BUNDLE_NOT_FOUND;
-	public static String ECLIPSE_STARTUP_INVALID_PORT;
-	public static String ECLIPSE_STARTUP_FAILED_FIND;
 	public static String ECLIPSE_STARTUP_FAILED_UNINSTALL;
 	public static String ECLIPSE_STARTUP_FAILED_INSTALL;
 	public static String ECLIPSE_STARTUP_FAILED_START;
@@ -105,8 +99,6 @@ public class EclipseAdaptorMsg extends NLS {
 
 	public static String ECLIPSE_PLUGIN_EXTRACTION_PROBLEM;
 
-	public static final String NEW_LINE = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-
 	static {
 		// initialize resource bundles
 		NLS.initializeMessages(BUNDLE_NAME, EclipseAdaptorMsg.class);
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java
index 3018e60..ed3e6c1 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/core/runtime/internal/adaptor/LocationHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ public class LocationHelper {
 	 * @param trailingSlash flag to indicate a trailing slash on the spec
 	 * @return a URL
 	 */
+	@SuppressWarnings("deprecation")
 	public static URL buildURL(String spec, boolean trailingSlash) {
 		if (spec == null)
 			return null;
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java
new file mode 100644
index 0000000..0167337
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogListener;
+
+/**
+ * Extends the OSGi Log Services <code>LogEntry</code> object to provide additional context information.
+ * Otherwise similarly accessible by registering a <code>LogListener</code> object.
+ * 
+ * @ThreadSafe
+ * @see LogListener
+ * @since 3.7
+ */
+public interface ExtendedLogEntry extends LogEntry {
+
+	/**
+	 * Returns the logger name associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>String</code> containing the logger name associated with this
+	 *         <code>LogEntry</code> object;<code>null</code> if no logger name is
+	 *         associated with this <code>LogEntry</code> object.
+	 */
+	String getLoggerName();
+
+	/**
+	 * Returns the context associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>Object</code> containing the context associated with this
+	 *         <code>LogEntry</code> object;<code>null</code> if no context is
+	 *         associated with this <code>LogEntry</code> object.
+	 */
+	Object getContext();
+
+	/**
+	 * Returns the thread id of the logging thread associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>long</code> containing the thread id associated with this
+	 *         <code>LogEntry</code> object.
+	 */
+	long getThreadId();
+
+	/**
+	 * Returns the thread name of the logging thread associated with this <code>LogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>String</code> containing the message associated with this
+	 *         <code>LogEntry</code> object.
+	 */
+	String getThreadName();
+
+	/**
+	 * Returns the log sequence number associated with this <code>LogEntry</code>
+	 * object. 
+	 * 
+	 * @return <code>long</code> containing the sequence number associated with this
+	 *         <code>LogEntry</code> object.
+	 */
+	long getSequenceNumber();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java
new file mode 100644
index 0000000..91a576b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.service.log.*;
+
+/**
+ * Extends the OSGi Log Service's LogReaderService to allow better control of log listeners.
+ * @ThreadSafe
+ * @see LogListener
+ * @since 3.7
+ */
+public interface ExtendedLogReaderService extends LogReaderService {
+	/**
+	 * Subscribes to <code>LogEntry</code> objects.
+	 * 
+	 * <p>
+	 * This method registers a <code>LogListener</code> object with the Log Reader
+	 * Service with a <code>LogFilter</code> to allow pre-filtering of interesting log entries.
+	 * The <code>LogListener.logged(LogEntry)</code> method will be
+	 * called for each <code>LogEntry</code> object placed into the log that matches the filter.
+	 * 
+	 * @param listener A <code>LogListener</code> object to register; the
+	 *        <code>LogListener</code> object is used to receive <code>LogEntry</code>
+	 *        objects.
+	 * @param filter A <code>LogFilter</code> object to register; the
+	 *        <code>LogFilter</code> object is used to filter <code>LogEntry</code>
+	 *        objects before sending them to the associated <code>LogListener</code>.
+	 * @see LogListener
+	 * @see LogFilter
+	 * @see LogEntry
+	 * @see LogReaderService#addLogListener(LogListener)
+	 */
+	public void addLogListener(LogListener listener, LogFilter filter);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogService.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogService.java
new file mode 100644
index 0000000..9b9b8f7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogService.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogService;
+
+/**
+ * Extends the OSGi <code>Log Service</code> to support the use of named loggers that provide
+ * some additional context when logging.
+ * @ThreadSafe
+ * @see Logger
+ * @since 3.7
+ */
+public interface ExtendedLogService extends LogService, Logger {
+
+	/**
+	 * Returns the <code>Logger<code> object associated with this logger name for the bundle that retrieved this log service.
+	 * If loggerName is null the default <code>Logger</code> for this bundle is returned. 
+	 * 
+	 * @param loggerName The logger name. 
+	 * @return <code>Logger</code> associated with the logger name.
+	 */
+	public Logger getLogger(String loggerName);
+
+	/**
+	 * Returns the logger associated with this logger name and bundle.
+	 * 
+	 * @param loggerName The logger name. 
+	 * @param bundle The bundles associated with this logger. If null the bundle that retrieved this log service is used.
+	 * @return <code>Logger</code> associated with the logger name.
+	* @throws SecurityException if the caller does not have <code>LogPermission[*,LOG]</code>.
+	*/
+	public Logger getLogger(Bundle bundle, String loggerName);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogFilter.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogFilter.java
new file mode 100644
index 0000000..868fe9e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogFilter.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.framework.Bundle;
+import org.osgi.service.log.LogEntry;
+
+/**
+ * A <code>LogFilter</code> is used to pre-filter log requests before sending events to a <code>LogListener</code>.
+ * @ThreadSafe
+ * @see ExtendedLogReaderService#addLogListener(org.osgi.service.log.LogListener, LogFilter)
+ * @since 3.7
+ */
+public interface LogFilter {
+
+	/**
+	 * @param bundle The logging bundle
+	 * @param loggerName The name of the <code>Logger<code>
+	 * @param logLevel The log level or severity
+	 * @see LogEntry
+	 * @see Logger
+	 * @see ExtendedLogReaderService#addLogListener(org.osgi.service.log.LogListener, LogFilter)
+	 */
+	boolean isLoggable(Bundle bundle, String loggerName, int logLevel);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermission.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermission.java
new file mode 100644
index 0000000..83716de
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermission.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+
+/**
+ * Indicates a bundle's authority to log on behalf of other bundles.
+ * 
+ * This permission has only a single action: LOG.
+ * 
+ * @ThreadSafe
+ * @since 3.7
+ */
+public class LogPermission extends Permission {
+	private static final long serialVersionUID = -441193976837153362L;
+	private static final String ALL = "*"; //$NON-NLS-1$
+
+	/**
+	 * The action string <code>log</code>.
+	 */
+	public static final String LOG = "log"; //$NON-NLS-1$
+
+	/**
+	 * Create a new LogPermission.
+	 * 
+	 * @param name Name must be "*".
+	 * @param actions <code>log</code> or "*".
+	 */
+	public LogPermission(String name, String actions) {
+		super(name);
+		if (!name.equals(ALL))
+			throw new IllegalArgumentException("name must be *"); //$NON-NLS-1$
+
+		actions = actions.trim();
+		if (!actions.equalsIgnoreCase(LOG) && !actions.equals(ALL))
+			throw new IllegalArgumentException("actions must be * or log"); //$NON-NLS-1$
+	}
+
+	public boolean equals(Object obj) {
+		return obj instanceof LogPermission;
+	}
+
+	public String getActions() {
+		return LOG;
+	}
+
+	public int hashCode() {
+		return LogPermission.class.hashCode();
+	}
+
+	public boolean implies(Permission permission) {
+		return permission instanceof LogPermission;
+	}
+
+	public PermissionCollection newPermissionCollection() {
+		return new LogPermissionCollection();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermissionCollection.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermissionCollection.java
new file mode 100644
index 0000000..ff47103
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermissionCollection.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+/**
+ * Stores a set of <code>LogPermission</code> permissions.
+ *
+ * @ThreadSafe
+ * @see java.security.Permission
+ * @see java.security.Permissions
+ * @see java.security.PermissionCollection
+ * @since 3.7
+ */
+public final class LogPermissionCollection extends PermissionCollection {
+	private static final long serialVersionUID = -1955409691185916778L;
+	LogPermission logPermission;
+
+	public void add(Permission permission) {
+		if (!(permission instanceof LogPermission))
+			throw new IllegalArgumentException("invalid permission: " + permission); //$NON-NLS-1$
+		if (isReadOnly())
+			throw new SecurityException("attempt to add a LogPermission to a readonly LogPermissionCollection"); //$NON-NLS-1$
+		if (permission != null)
+			logPermission = (LogPermission) permission;
+	}
+
+	public Enumeration<Permission> elements() {
+		return new Enumeration<Permission>() {
+			private boolean hasMore = (logPermission != null);
+
+			public boolean hasMoreElements() {
+				return hasMore;
+			}
+
+			public Permission nextElement() {
+				if (hasMore) {
+					hasMore = false;
+					return logPermission;
+				}
+				throw new NoSuchElementException();
+			}
+		};
+	}
+
+	public boolean implies(Permission permission) {
+		return logPermission != null && logPermission.implies(permission);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/Logger.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/Logger.java
new file mode 100644
index 0000000..049e5cc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/Logger.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+
+/**
+  * Provides named logger support for the OSGi LogService. Otherwise very similar to the <code>LogService</code>.
+  * @ThreadSafe
+  * @see LogService
+ * @since 3.7
+ */
+public interface Logger {
+	/**
+	 * @see LogService#log(int, String)
+	 */
+	public void log(int level, String message);
+
+	/**
+	 * @see LogService#log(int, String, Throwable)
+	 */
+	public void log(int level, String message, Throwable exception);
+
+	/**
+	 * @see LogService#log(ServiceReference, int, String)
+	 */
+	public void log(ServiceReference<?> sr, int level, String message);
+
+	/**
+	 * @see LogService#log(ServiceReference, int, String, Throwable)
+	 */
+	public void log(ServiceReference<?> sr, int level, String message, Throwable exception);
+
+	/**
+	 * Extends the <code>LogService</code>
+	 * Logs a message with a context object
+	 * 
+	 * @param context The context object this message is associated with.
+	 * @param level The log level or severity of the message.
+	 * @param message A human readable string to associate with log entry.
+	 * @see LogService#log(int, String)
+	 */
+	public void log(Object context, int level, String message);
+
+	/**
+	 * Logs a message with an exception associated and a
+	 * context object.
+	 * 
+	 * 
+	 * @param context The context object this message is associated with.
+	 * @param level The log level or severity of the message.
+	 * @param message A human readable string to associate with log entry.
+	 * @param exception The exception associated with this entry
+	 * @see LogService#log(int, String, Throwable)
+	 */
+	public void log(Object context, int level, String message, Throwable exception);
+
+	/**
+	 * Pre-checks if there are LogListeners who are listening for a matching log entry from this <code>Logger</code>. 
+	 * 
+	 * @param level The log level or severity of the message.
+	 * @return <code>boolean</code> True if there a LogListener listening that can handle a log entry for this log level; false otherwise. 
+	 * @see ExtendedLogReaderService#addLogListener(org.osgi.service.log.LogListener, LogFilter)
+	 * @see LogFilter
+	 */
+	public boolean isLoggable(int level);
+
+	/**
+	 * Returns the name associated with this <code>Logger</code>
+	 * object.
+	 * 
+	 * @return <code>String</code> containing the name associated with this
+	 *         <code>Logger</code> object;<code>null</code> if no name is
+	 *         associated.
+	 */
+	public String getName();
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/SynchronousLogListener.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/SynchronousLogListener.java
new file mode 100644
index 0000000..2cb99b7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/SynchronousLogListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ ******************************************************************************/
+package org.eclipse.equinox.log;
+
+import org.osgi.service.log.LogListener;
+
+/**
+ * Marker interface to denotes a log listener that should be called on the logging thread
+ * @see LogListener
+ * @since 3.7
+ */
+public interface SynchronousLogListener extends LogListener {
+	//
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/Debug.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/Debug.java
index 237d374..b9443df 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/Debug.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/Debug.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,11 +21,6 @@ import java.lang.reflect.*;
  */
 public class Debug {
 	/**
-	 * DEBUG flag.  If set to false then the debug statements will be optimized out during compilation.
-	 */
-	public static final boolean DEBUG = true;
-
-	/**
 	 * Indicates if tracing is enabled
 	 */
 	public static boolean DEBUG_ENABLED = false;
@@ -50,6 +45,11 @@ public class Debug {
 	 * Services debug flag.
 	 */
 	public static boolean DEBUG_SERVICES = false; // "debug.services"
+
+	/**
+	 * Hooks debug flag.
+	 */
+	public static boolean DEBUG_HOOKS = false; // "debug.hooks"
 	/**
 	 * Packages debug flag.
 	 */
@@ -115,6 +115,10 @@ public class Debug {
 	 */
 	public static final String OPTION_DEBUG_SERVICES = ECLIPSE_OSGI + "/debug/services"; //$NON-NLS-1$
 	/**
+	 * Services Debug option key.
+	 */
+	public static final String OPTION_DEBUG_HOOKS = ECLIPSE_OSGI + "/debug/hooks"; //$NON-NLS-1$
+	/**
 	 * Packages Debug option key.
 	 */
 	public static final String OPTION_DEBUG_PACKAGES = ECLIPSE_OSGI + "/debug/packages"; //$NON-NLS-1$
@@ -160,6 +164,7 @@ public class Debug {
 			DEBUG_LOADER = dbgOptions.getBooleanOption(OPTION_DEBUG_LOADER, false);
 			DEBUG_EVENTS = dbgOptions.getBooleanOption(OPTION_DEBUG_EVENTS, false);
 			DEBUG_SERVICES = dbgOptions.getBooleanOption(OPTION_DEBUG_SERVICES, false);
+			DEBUG_HOOKS = dbgOptions.getBooleanOption(OPTION_DEBUG_HOOKS, false);
 			DEBUG_PACKAGES = dbgOptions.getBooleanOption(OPTION_DEBUG_PACKAGES, false);
 			DEBUG_MANIFEST = dbgOptions.getBooleanOption(OPTION_DEBUG_MANIFEST, false);
 			DEBUG_FILTER = dbgOptions.getBooleanOption(OPTION_DEBUG_FILTER, false);
@@ -333,14 +338,14 @@ public class Debug {
 		Method[] methods = t.getClass().getMethods();
 
 		int size = methods.length;
-		Class throwable = Throwable.class;
+		Class<?> throwable = Throwable.class;
 
 		for (int i = 0; i < size; i++) {
 			Method method = methods[i];
 
 			if (Modifier.isPublic(method.getModifiers()) && method.getName().startsWith("get") && throwable.isAssignableFrom(method.getReturnType()) && (method.getParameterTypes().length == 0)) { //$NON-NLS-1$
 				try {
-					Throwable nested = (Throwable) method.invoke(t, null);
+					Throwable nested = (Throwable) method.invoke(t, (Object[]) null);
 
 					if ((nested != null) && (nested != t)) {
 						out.println("Nested Exception:"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java
index b1f89c9..de13dcd 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/EclipseDebugTrace.java
@@ -64,7 +64,7 @@ class EclipseDebugTrace implements DebugTrace {
 	/** The value written to the trace file if a null object is being traced */
 	private final static String NULL_VALUE = "<null>"; //$NON-NLS-1$
 	/**  */
-	private final static SecureAction secureAction = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	private final static SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction());
 	/** A lock object used to synchronize access to the trace file */
 	private final static Object writeLock = new Object();
 
@@ -117,7 +117,7 @@ class EclipseDebugTrace implements DebugTrace {
 	 * @param debugOptions Used to determine if the specified bundle symbolic name + option-path has tracing enabled
 	 * @param traceClass The class that the client is using to perform trace API calls
 	 */
-	EclipseDebugTrace(final String bundleSymbolicName, final FrameworkDebugOptions debugOptions, final Class traceClass) {
+	EclipseDebugTrace(final String bundleSymbolicName, final FrameworkDebugOptions debugOptions, final Class<?> traceClass) {
 
 		this.traceClass = traceClass != null ? traceClass.getName() : null;
 		this.debugOptions = debugOptions;
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java
index 445ad49..7c245f6 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/debug/FrameworkDebugOptions.java
@@ -14,7 +14,6 @@ import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.*;
-import java.util.Map.Entry;
 import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
 import org.eclipse.osgi.service.debug.*;
 import org.osgi.framework.*;
@@ -28,7 +27,7 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
  * 
  * @since 3.1
  */
-public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustomizer {
+public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustomizer<DebugOptionsListener, DebugOptionsListener> {
 
 	private static final String OSGI_DEBUG = "osgi.debug"; //$NON-NLS-1$
 	private static final String OSGI_DEBUG_VERBOSE = "osgi.debug.verbose"; //$NON-NLS-1$
@@ -44,13 +43,13 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 	/** The default name of the .options file if loading when the -debug command-line argument is used */
 	private static final String OPTIONS = ".options"; //$NON-NLS-1$
 	/** A cache of all of the bundles <code>DebugTrace</code> in the format <key,value> --> <bundle name, DebugTrace> */
-	protected final static Map debugTraceCache = new HashMap();
+	protected final static Map<String, DebugTrace> debugTraceCache = new HashMap<String, DebugTrace>();
 	/** The File object to store messages.  This value may be null. */
 	protected File outFile = null;
 	/** Is verbose debugging enabled?  Changing this value causes a new tracing session to start. */
 	protected boolean verboseDebug = true;
 	private volatile BundleContext context;
-	private volatile ServiceTracker listenerTracker;
+	private volatile ServiceTracker<DebugOptionsListener, DebugOptionsListener> listenerTracker;
 
 	/**
 	 * Internal constructor to create a <code>FrameworkDebugOptions</code> singleton object. 
@@ -96,15 +95,14 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 			e.printStackTrace(System.out);
 		}
 		// trim off all the blanks since properties files don't do that.
-		for (Iterator i = options.keySet().iterator(); i.hasNext();) {
-			Object key = i.next();
+		for (Object key : options.keySet()) {
 			options.put(key, ((String) options.get(key)).trim());
 		}
 	}
 
 	public void start(BundleContext bc) {
 		this.context = bc;
-		listenerTracker = new ServiceTracker(bc, DebugOptionsListener.class.getName(), this);
+		listenerTracker = new ServiceTracker<DebugOptionsListener, DebugOptionsListener>(bc, DebugOptionsListener.class.getName(), this);
 		listenerTracker.open();
 	}
 
@@ -126,6 +124,7 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		return FrameworkDebugOptions.singleton;
 	}
 
+	@SuppressWarnings("deprecation")
 	private static URL buildURL(String spec, boolean trailingSlash) {
 		if (spec == null)
 			return null;
@@ -194,13 +193,14 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		}
 	}
 
-	public Map getOptions() {
-		Properties snapShot = new Properties();
+	@SuppressWarnings({"unchecked", "rawtypes"})
+	public Map<String, String> getOptions() {
+		Map<String, String> snapShot = new HashMap<String, String>();
 		synchronized (lock) {
 			if (options != null)
-				snapShot.putAll(options);
+				snapShot.putAll((Map) options);
 			else if (disabledOptions != null)
-				snapShot.putAll(disabledOptions);
+				snapShot.putAll((Map) disabledOptions);
 		}
 		return snapShot;
 	}
@@ -215,10 +215,10 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		synchronized (lock) {
 			if (options != null) {
 				optionsArray = new String[options.size()];
-				final Iterator entrySetIterator = options.entrySet().iterator();
+				final Iterator<Map.Entry<Object, Object>> entrySetIterator = options.entrySet().iterator();
 				int i = 0;
 				while (entrySetIterator.hasNext()) {
-					Map.Entry entry = (Map.Entry) entrySetIterator.next();
+					Map.Entry<Object, Object> entry = entrySetIterator.next();
 					optionsArray[i] = ((String) entry.getKey()) + "=" + ((String) entry.getValue()); //$NON-NLS-1$
 					i++;
 				}
@@ -292,17 +292,18 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		return null;
 	}
 
-	public void setOptions(Map ops) {
+	@SuppressWarnings("cast")
+	public void setOptions(Map<String, String> ops) {
 		if (ops == null)
 			throw new IllegalArgumentException("The options must not be null."); //$NON-NLS-1$
 		Properties newOptions = new Properties();
-		for (Iterator entries = ops.entrySet().iterator(); entries.hasNext();) {
-			Entry entry = (Entry) entries.next();
+		for (Iterator<Map.Entry<String, String>> entries = ops.entrySet().iterator(); entries.hasNext();) {
+			Map.Entry<String, String> entry = entries.next();
 			if (!(entry.getKey() instanceof String) || !(entry.getValue() instanceof String))
 				throw new IllegalArgumentException("Option keys and values must be of type String: " + entry.getKey() + "=" + entry.getValue()); //$NON-NLS-1$ //$NON-NLS-2$
-			newOptions.put(entry.getKey(), ((String) entry.getValue()).trim());
+			newOptions.put(entry.getKey(), entry.getValue().trim());
 		}
-		Set fireChangesTo = null;
+		Set<String> fireChangesTo = null;
 
 		synchronized (lock) {
 			if (options == null) {
@@ -310,9 +311,9 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 				// no events to fire
 				return;
 			}
-			fireChangesTo = new HashSet();
+			fireChangesTo = new HashSet<String>();
 			// first check for removals
-			for (Iterator keys = options.keySet().iterator(); keys.hasNext();) {
+			for (Iterator<Object> keys = options.keySet().iterator(); keys.hasNext();) {
 				String key = (String) keys.next();
 				if (!newOptions.containsKey(key)) {
 					String symbolicName = getSymbolicName(key);
@@ -321,8 +322,8 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 				}
 			}
 			// now check for changes to existing values
-			for (Iterator newEntries = newOptions.entrySet().iterator(); newEntries.hasNext();) {
-				Entry entry = (Entry) newEntries.next();
+			for (Iterator<Map.Entry<Object, Object>> newEntries = newOptions.entrySet().iterator(); newEntries.hasNext();) {
+				Map.Entry<Object, Object> entry = newEntries.next();
 				String existingValue = (String) options.get(entry.getKey());
 				if (!entry.getValue().equals(existingValue)) {
 					String symbolicName = getSymbolicName((String) entry.getKey());
@@ -334,8 +335,8 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 			options = newOptions;
 		}
 		if (fireChangesTo != null)
-			for (Iterator iChanges = fireChangesTo.iterator(); iChanges.hasNext();)
-				optionsChanged((String) iChanges.next());
+			for (Iterator<String> iChanges = fireChangesTo.iterator(); iChanges.hasNext();)
+				optionsChanged(iChanges.next());
 	}
 
 	/*
@@ -404,11 +405,11 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 	 * (non-Javadoc)
 	 * @see org.eclipse.osgi.service.debug.DebugOptions#createTrace(java.lang.String, java.lang.Class)
 	 */
-	public final DebugTrace newDebugTrace(String bundleSymbolicName, Class traceEntryClass) {
+	public final DebugTrace newDebugTrace(String bundleSymbolicName, Class<?> traceEntryClass) {
 
 		DebugTrace debugTrace = null;
 		synchronized (FrameworkDebugOptions.debugTraceCache) {
-			debugTrace = (DebugTrace) FrameworkDebugOptions.debugTraceCache.get(bundleSymbolicName);
+			debugTrace = FrameworkDebugOptions.debugTraceCache.get(bundleSymbolicName);
 			if (debugTrace == null) {
 				debugTrace = new EclipseDebugTrace(bundleSymbolicName, FrameworkDebugOptions.singleton, traceEntryClass);
 				FrameworkDebugOptions.debugTraceCache.put(bundleSymbolicName, debugTrace);
@@ -469,7 +470,7 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 			return;
 		// do not use the service tracker because that is only used to call all listeners initially when they are registered
 		// here we only want the services with the specified name.
-		ServiceReference[] listenerRefs = null;
+		ServiceReference<?>[] listenerRefs = null;
 		try {
 			listenerRefs = bc.getServiceReferences(DebugOptionsListener.class.getName(), "(" + DebugOptions.LISTENER_SYMBOLICNAME + "=" + bundleSymbolicName + ")"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
 		} catch (InvalidSyntaxException e) {
@@ -491,17 +492,17 @@ public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustom
 		}
 	}
 
-	public Object addingService(ServiceReference reference) {
-		DebugOptionsListener listener = (DebugOptionsListener) context.getService(reference);
+	public DebugOptionsListener addingService(ServiceReference<DebugOptionsListener> reference) {
+		DebugOptionsListener listener = context.getService(reference);
 		listener.optionsChanged(this);
 		return listener;
 	}
 
-	public void modifiedService(ServiceReference reference, Object service) {
+	public void modifiedService(ServiceReference<DebugOptionsListener> reference, DebugOptionsListener service) {
 		// nothing
 	}
 
-	public void removedService(ServiceReference reference, Object service) {
+	public void removedService(ServiceReference<DebugOptionsListener> reference, DebugOptionsListener service) {
 		context.ungetService(reference);
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
new file mode 100644
index 0000000..9b575fc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
@@ -0,0 +1,652 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.util.*;
+
+/**
+ * A copy-on-write identity map. Write operations result in copying the underlying data so that
+ * simultaneous read operations are not affected.
+ * This allows for safe, unsynchronized traversal.
+ * 
+ * <p>
+ * Note: This class uses identity for key and value comparison, not equals.
+ * 
+ * @since 3.5
+ */
+public class CopyOnWriteIdentityMap<K, V> implements Map<K, V> {
+	/**
+	 * The empty array singleton instance.
+	 */
+	@SuppressWarnings("rawtypes")
+	private static final Entry[] emptyArray = new Entry[0];
+
+	/**
+	 * The array of entries. This field is volatile so it can be 
+	 * accessed from unsynchronized reader methods.
+	 */
+	private volatile Entry<K, V>[] entries;
+
+	/**
+	 * Creates an empty map.
+	 *
+	 */
+	public CopyOnWriteIdentityMap() {
+		entries = empty();
+	}
+
+	/**
+	 * Copy constructor.
+	 *
+	 * @param source The CopyOnWriteMap to copy.
+	 */
+	public CopyOnWriteIdentityMap(CopyOnWriteIdentityMap<? extends K, ? extends V> source) {
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] toCopy = (Entry<K, V>[]) source.entries();
+		this.entries = toCopy;
+	}
+
+	/* These methods modify the map and are synchronized. */
+
+	/**
+	 * Add a key, value pair to the map.
+	 * If the key object is already in the map, then its value is replaced with the new value.
+	 * Keys are compared using identity.
+	 *
+	 * @param key The key object to be added to the list.
+	 * @param value The value object to be associated with the key.
+	 * This may be null.
+	 * @return <code>null</code> if the specified key was newly added to the map.
+	 * Otherwise the previous value of the key.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public synchronized V put(K key, V value) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		int size = entries.length;
+		for (int i = 0; i < size; i++) {
+			if (entries[i].key == key) {
+				V v = entries[i].value;
+				if (v == value) {
+					return v;
+				}
+				@SuppressWarnings("unchecked")
+				Entry<K, V>[] newEntries = new Entry[size];
+				System.arraycopy(entries, 0, newEntries, 0, size);
+				newEntries[i] = new Entry<K, V>(key, value);
+				entries = newEntries;
+				return v;
+			}
+		}
+
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] newEntries = new Entry[size + 1];
+		if (size > 0) {
+			System.arraycopy(entries, 0, newEntries, 0, size);
+		}
+		newEntries[size] = new Entry<K, V>(key, value);
+		entries = newEntries;
+		return null;
+	}
+
+	/**
+	 * Add all the entries from the specified map to this map.
+	 * 
+	 * @param source The map whose entries are to be added to this map.
+	 */
+	public void putAll(Map<? extends K, ? extends V> source) {
+		int sourceSize = source.size();
+		if (sourceSize == 0) {
+			return;
+		}
+		if (source instanceof CopyOnWriteIdentityMap<?, ?>) {
+			putAll(((CopyOnWriteIdentityMap<? extends K, ? extends V>) source).entries());
+			return;
+		}
+
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] toCopy = new Entry[sourceSize];
+		Iterator<? extends Map.Entry<? extends K, ? extends V>> iter = source.entrySet().iterator();
+		for (int i = 0; i < sourceSize; i++) {
+			Map.Entry<? extends K, ? extends V> mapEntry = iter.next();
+			toCopy[i] = new Entry<K, V>(mapEntry.getKey(), mapEntry.getValue());
+		}
+		putAll(toCopy);
+	}
+
+	/**
+	 * Add all the keys from the specified array to this map with the value
+	 * <code>null</code>.
+	 * 
+	 * @param keys The array of keys to be added to this map.
+	 */
+	public <L extends K> void putAll(L[] keys) {
+		int sourceSize = keys.length;
+		if (sourceSize == 0) {
+			return;
+		}
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] toCopy = new Entry[sourceSize];
+		for (int i = 0; i < sourceSize; i++) {
+			toCopy[i] = new Entry<K, V>(keys[i], null);
+		}
+		putAll(toCopy);
+	}
+
+	/**
+	 * Add all the entries to this map.
+	 * 
+	 * @param toCopy Array of entries to add to this map.
+	 */
+	private synchronized void putAll(Entry<? extends K, ? extends V>[] toCopy) {
+		int sourceSize = toCopy.length;
+		int size = entries.length;
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] newEntries = new Entry[size + sourceSize];
+		System.arraycopy(entries, 0, newEntries, 0, size);
+		copy: for (int n = 0; n < sourceSize; n++) {
+			@SuppressWarnings("unchecked")
+			Entry<K, V> copy = (Entry<K, V>) toCopy[n];
+			for (int i = 0; i < size; i++) {
+				if (newEntries[i].key == copy.key) {
+					newEntries[i] = copy;
+					continue copy;
+				}
+			}
+			newEntries[size] = copy;
+			size++;
+		}
+		if (size == newEntries.length) {
+			entries = newEntries;
+			return;
+		}
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] e = new Entry[size];
+		System.arraycopy(newEntries, 0, e, 0, size);
+		entries = e;
+	}
+
+	/**
+	 * Remove a key from the map and returns the value associated with the key.
+	 * Key objects are compared using identity.
+	 *
+	 * @param key The key object to be removed from the map.
+	 * @return <code>null</code> if the key was not in the list. 
+	 * Otherwise, the value associated with the key.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public synchronized V remove(Object key) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		int size = entries.length;
+		for (int i = 0; i < size; i++) {
+			if (entries[i].key == key) {
+				V v = entries[i].value;
+				entries = removeEntry(entries, i);
+				return v;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Static method used to return an Entry array with the ith entry removed.
+	 */
+	static <K, V> Entry<K, V>[] removeEntry(final Entry<K, V>[] entries, final int i) {
+		int size = entries.length;
+		if (size == 1) {
+			return empty();
+		}
+		@SuppressWarnings("unchecked")
+		Entry<K, V>[] newEntries = new Entry[size - 1];
+		if (i > 0) {
+			System.arraycopy(entries, 0, newEntries, 0, i);
+		}
+		int next = size - 1 - i;
+		if (next > 0) {
+			System.arraycopy(entries, i + 1, newEntries, i, next);
+		}
+		return newEntries;
+	}
+
+	/**
+	 * Remove all entries from the map.
+	 * 
+	 */
+	public synchronized void clear() {
+		entries = empty();
+	}
+
+	/* These methods only read the map and are not synchronized. */
+
+	/**
+	 * Accessor for methods which only read the entries.
+	 * @return The array of entries. Callers to this method MUST NOT
+	 * modify the returned array.
+	 */
+	private Entry<K, V>[] entries() {
+		return entries;
+	}
+
+	/**
+	 * Return the static empty array generically type safe.
+	 * @return The empty array of entries.
+	 */
+	@SuppressWarnings("unchecked")
+	static <K, V> Entry<K, V>[] empty() {
+		return emptyArray;
+	}
+
+	/**
+	 * Is the map empty?
+	 * 
+	 * @return <code>true</code> if the list is empty.
+	 */
+	public boolean isEmpty() {
+		return size() == 0;
+	}
+
+	/**
+	 * Return the number of entries in the map.
+	 * 
+	 * @return The number of entries in the map.
+	 */
+	public int size() {
+		return entries().length;
+	}
+
+	/**
+	 * Return the value object for the specified key.
+	 * Keys are compared using identity.
+	 * 
+	 * @param key The key object.
+	 * @return The value object for the specified key.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public V get(Object key) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		Entry<K, V>[] e = entries();
+		for (int i = 0; i < e.length; i++) {
+			if (e[i].key == key) {
+				return e[i].value;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Check if the map contains the specified key.
+	 * Keys are compared using identity.
+	 * 
+	 * @param key The key object.
+	 * @return <code>true</code> if the specified key is in the map.
+	 * @throws IllegalArgumentException If key is null.
+	 */
+	public boolean containsKey(Object key) {
+		if (key == null) {
+			throw new IllegalArgumentException();
+		}
+
+		Entry<K, V>[] e = entries();
+		for (int i = 0; i < e.length; i++) {
+			if (e[i].key == key) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Check if the map contains the specified value.
+	 * Values are compared using identity.
+	 * 
+	 * @param value The value object.
+	 * @return <code>true</code> if the specified value is in the map.
+	 */
+	public boolean containsValue(Object value) {
+		Entry<K, V>[] e = entries();
+		for (int i = 0; i < e.length; i++) {
+			if (e[i].value == value) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns a snapshot of the entries in this map.
+	 * Changes to the returned set or this map will not affect each other.
+	 * 
+	 * @return A Set of Map.Entry for each entry in this map.
+	 * The entries returned by the set cannot be modified.
+	 */
+	public Set<Map.Entry<K, V>> entrySet() {
+		return new Snapshot<K, V>(entries()).entrySet();
+	}
+
+	/**
+	 * Returns a snapshot of the keys in this map.
+	 * Changes to the returned set or this map will not affect each other.
+	 * 
+	 * @return A Set of the key objects in this map
+	 */
+	public Set<K> keySet() {
+		return new Snapshot<K, V>(entries()).keySet();
+	}
+
+	/**
+	 * Returns a snapshot of the values in this map.
+	 * Changes to the returned set or this map will not affect each other.
+	 * 
+	 * @return A Collection of the value objects in this map.
+	 */
+	public Collection<V> values() {
+		return new Snapshot<K, V>(entries()).values();
+	}
+
+	/**
+	 * This class represents the entry in this identity map.
+	 * Entry is immutable.
+	 */
+	static private final class Entry<K, V> implements Map.Entry<K, V> {
+		/**
+		 * Key object.
+		 */
+		final K key;
+
+		/**
+		 * Value object.
+		 */
+		final V value;
+
+		/**
+		 * Constructor for map entry.
+		 * @param key Key object in entry. Used for uniqueness.
+		 * @param value Value object stored with key object.
+		 */
+		Entry(final K key, final V value) {
+			this.key = key;
+			this.value = value;
+		}
+
+		public K getKey() {
+			return key;
+		}
+
+		public V getValue() {
+			return value;
+		}
+
+		public V setValue(V value) {
+			throw new UnsupportedOperationException(); // entries cannot be modified.
+		}
+
+		public String toString() {
+			return key + "=" + value; //$NON-NLS-1$
+		}
+
+		public int hashCode() {
+			return System.identityHashCode(key) ^ System.identityHashCode(value);
+		}
+
+		public boolean equals(Object obj) {
+			if (obj == this) {
+				return true;
+			}
+
+			if (!(obj instanceof Map.Entry)) {
+				return false;
+			}
+
+			Map.Entry<?, ?> e = (Map.Entry<?, ?>) obj;
+			return (key == e.getKey()) && (value == e.getValue());
+		}
+	}
+
+	/**
+	 * A snapshot of the entries in the map. This snapshot used by
+	 * the map collection views. Changes made by the collection 
+	 * views only mutate the snapshot and not the map. The collection
+	 * views only allow removal not addition.
+	 */
+	static private final class Snapshot<K, V> {
+		volatile Entry<K, V>[] entries;
+
+		Snapshot(Entry<K, V>[] e) {
+			entries = e;
+		}
+
+		Entry<K, V>[] entries() {
+			return entries;
+		}
+
+		synchronized void removeEntry(int i) {
+			entries = CopyOnWriteIdentityMap.removeEntry(entries, i);
+		}
+
+		synchronized void clearEntries() {
+			entries = CopyOnWriteIdentityMap.empty();
+		}
+
+		Set<Map.Entry<K, V>> entrySet() {
+			return new EntrySet();
+		}
+
+		Set<K> keySet() {
+			return new KeySet();
+		}
+
+		Collection<V> values() {
+			return new ValueCollection();
+		}
+
+		/**
+		 * Entry set view over the snapshot.
+		 */
+		private final class EntrySet extends AbstractSet<Map.Entry<K, V>> {
+			EntrySet() {
+				super();
+			}
+
+			public Iterator<Map.Entry<K, V>> iterator() {
+				return new EntryIterator();
+			}
+
+			public int size() {
+				return entries().length;
+			}
+
+			public boolean remove(Object o) {
+				if (o == null) {
+					throw new IllegalArgumentException();
+				}
+
+				synchronized (Snapshot.this) {
+					int size = entries.length;
+					for (int i = 0; i < size; i++) {
+						if (entries[i].equals(o)) {
+							removeEntry(i);
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+
+			public void clear() {
+				clearEntries();
+			}
+		}
+
+		/** 
+		 * Entry set iterator over the snapshot.
+		 */
+		private final class EntryIterator extends SnapshotIterator<Map.Entry<K, V>> {
+			EntryIterator() {
+				super();
+			}
+
+			public Map.Entry<K, V> next() {
+				return nextEntry();
+			}
+		}
+
+		/**
+		 * Key set view over the snapshot.
+		 */
+		private final class KeySet extends AbstractSet<K> {
+			KeySet() {
+				super();
+			}
+
+			public Iterator<K> iterator() {
+				return new KeyIterator();
+			}
+
+			public int size() {
+				return entries().length;
+			}
+
+			public boolean remove(Object o) {
+				if (o == null) {
+					throw new IllegalArgumentException();
+				}
+
+				synchronized (Snapshot.this) {
+					int size = entries.length;
+					for (int i = 0; i < size; i++) {
+						if (entries[i].key == o) {
+							removeEntry(i);
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+
+			public void clear() {
+				clearEntries();
+			}
+		}
+
+		/** 
+		 * Key set iterator over the snapshot.
+		 */
+		private final class KeyIterator extends SnapshotIterator<K> {
+			KeyIterator() {
+				super();
+			}
+
+			public K next() {
+				return nextEntry().key;
+			}
+		}
+
+		/**
+		 * Value collection view over the snapshot.
+		 */
+		private final class ValueCollection extends AbstractCollection<V> {
+			ValueCollection() {
+				super();
+			}
+
+			public Iterator<V> iterator() {
+				return new ValueIterator();
+			}
+
+			public int size() {
+				return entries().length;
+			}
+
+			public boolean remove(Object o) {
+				if (o == null) {
+					throw new IllegalArgumentException();
+				}
+
+				synchronized (Snapshot.this) {
+					int size = entries.length;
+					for (int i = 0; i < size; i++) {
+						if (entries[i].value == o) {
+							removeEntry(i);
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+
+			public void clear() {
+				clearEntries();
+			}
+		}
+
+		/** 
+		 * Value collection iterator over the snapshot.
+		 */
+		private final class ValueIterator extends SnapshotIterator<V> {
+			ValueIterator() {
+				super();
+			}
+
+			public V next() {
+				return nextEntry().value;
+			}
+		}
+
+		/** 
+		 * Base iterator class handling removal and concurrent modifications.
+		 */
+		private abstract class SnapshotIterator<E> implements Iterator<E> {
+			private int length;
+			private int cursor;
+
+			SnapshotIterator() {
+				length = entries().length;
+				cursor = 0;
+			}
+
+			public final boolean hasNext() {
+				return cursor < length;
+			}
+
+			protected final Entry<K, V> nextEntry() {
+				Entry<K, V>[] e = entries();
+				if (length != e.length) {
+					throw new ConcurrentModificationException();
+				}
+				if (cursor == length) {
+					throw new NoSuchElementException();
+				}
+				return e[cursor++];
+			}
+
+			public final void remove() {
+				if (length != entries().length) {
+					throw new ConcurrentModificationException();
+				}
+				if (cursor == 0) {
+					throw new IllegalStateException();
+				}
+				cursor--;
+				removeEntry(cursor);
+				length = entries().length;
+			}
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
new file mode 100644
index 0000000..18327d4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+/**
+ * The EventDispatcher interface contains the method that is called by the
+ * Event Manager to complete the event delivery to the event listener.
+ * <p>
+ * Clients may implement this interface.
+ * </p>
+ * @since 3.1
+ */
+public interface EventDispatcher<K, V, E> {
+	/**
+	 * This method is called once for each listener.
+	 * This method must cast the event listener object to the appropriate listener
+	 * class for the event type and call the appropriate listener method.
+	 * 
+	 * <p>The method should properly log/handle any exceptions thrown by the called
+	 * listener. The EventManager will ignore any Throwable thrown by this method
+	 * in order to continue delivery of the event to the next listener.
+	 *
+	 * @param eventListener This is the key in the Map.Entry for the listener.
+	 * The implementation of this method must cast it to the appropriate listener
+	 * class for the event to be delivered and the appropriate listener method
+	 * must then be called.
+	 * @param listenerObject This is the value in the Map.Entry for the listener.
+	 * @param eventAction This value was passed to the ListenerQueue object via one of its
+	 * dispatchEvent* method calls. It can provide information (such
+	 * as which listener method to call) so that the EventDispatcher
+	 * can complete the delivery of the event to the listener.
+	 * @param eventObject This object was passed to the ListenerQueue object via one of its
+	 * dispatchEvent* method calls. This object was created by the event source and
+	 * is passed to this method. It should contain all the necessary information (such
+	 * as what event object to pass) so that this method
+	 * can complete the delivery of the event to the listener.
+	 * This is typically the actual event object.
+	 */
+	public void dispatchEvent(K eventListener, V listenerObject, int eventAction, E eventObject);
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java
new file mode 100644
index 0000000..431e4be
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This class manages a list of listeners. 
+ * 
+ * Listeners may be added or removed as necessary.
+ * 
+ * This class uses identity for comparison, not equals.
+ * 
+ * @since 3.1
+ * @deprecated As of 3.5. Replaced by CopyOnWriteIdentityMap.
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class EventListeners<K, V> {
+	private final CopyOnWriteIdentityMap<K, V> list = new CopyOnWriteIdentityMap<K, V>();
+
+	/**
+	 * Creates an empty listener list.
+	 *
+	 */
+	public EventListeners() {
+		super();
+	}
+
+	/**
+	 * Creates an empty listener list.
+	 *
+	 * @param capacity This argument is ignored.
+	 */
+	public EventListeners(int capacity) {
+		this();
+	}
+
+	/**
+	 * Add a listener to the list.
+	 * If a listener object is already in the list, then it is replaced.
+	 * This method calls the put method.
+	 *
+	 * @param listener This is the listener object to be added to the list.
+	 * @param listenerObject This is an optional listener-specific object.
+	 * This object will be passed to the EventDispatcher along with the listener
+	 * when the listener is to be called. This may be null
+	 * @throws IllegalArgumentException If listener is null.
+	 */
+	public void addListener(K listener, V listenerObject) {
+		list.put(listener, listenerObject);
+	}
+
+	/**
+	 * Remove a listener from the list.
+	 * This method calls the remove method.
+	 *
+	 * @param listener This is the listener object to be removed from the list.
+	 * @throws IllegalArgumentException If listener is null.
+	 */
+	public void removeListener(V listener) {
+		list.remove(listener);
+	}
+
+	/**
+	 * Remove all listeners from the list.
+	 * 
+	 * This method calls the clear method.
+	 */
+	public void removeAllListeners() {
+		list.clear();
+	}
+
+	/**
+	 * Get the entry Set from the internal CopyOnWriteIdentityMap.
+	 * @return The entry Set.
+	 */
+	Set<Map.Entry<K, V>> entrySet() {
+		return list.entrySet();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java
new file mode 100644
index 0000000..9e371ee
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java
@@ -0,0 +1,419 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This class is the central class for the Event Manager. Each
+ * program that wishes to use the Event Manager should construct
+ * an EventManager object and use that object to construct
+ * ListenerQueue for dispatching events. CopyOnWriteIdentityMap objects
+ * must be used to manage listener lists.
+ *
+ * <p>This example uses the fictitious SomeEvent class and shows how to use this package 
+ * to deliver a SomeEvent to a set of SomeEventListeners.  
+ * <pre>
+ *
+ * 	// Create an EventManager with a name for an asynchronous event dispatch thread
+ * 	EventManager eventManager = new EventManager("SomeEvent Async Event Dispatcher Thread");
+ * 	// Create a CopyOnWriteIdentityMap to hold the list of SomeEventListeners
+ *	Map eventListeners = new CopyOnWriteIdentityMap();
+ *
+ *	// Add a SomeEventListener to the listener list
+ *	eventListeners.put(someEventListener, null);
+ *
+ *	// Asynchronously deliver a SomeEvent to registered SomeEventListeners
+ *	// Create the listener queue for this event delivery
+ *	ListenerQueue listenerQueue = new ListenerQueue(eventManager);
+ *	// Add the listeners to the queue and associate them with the event dispatcher
+ *	listenerQueue.queueListeners(eventListeners.entrySet(), new EventDispatcher() {
+ *		public void dispatchEvent(Object eventListener, Object listenerObject, 
+ *                                    int eventAction, Object eventObject) {
+ * 			try {
+ *				(SomeEventListener)eventListener.someEventOccured((SomeEvent)eventObject);
+ * 			} catch (Throwable t) {
+ * 				// properly log/handle any Throwable thrown by the listener
+ * 			}
+ *		}
+ *	});
+ *	// Deliver the event to the listeners. 
+ *	listenerQueue.dispatchEventAsynchronous(0, new SomeEvent());
+ *		
+ *	// Remove the listener from the listener list
+ *	eventListeners.remove(someEventListener);
+ *
+ *	// Close EventManager to clean when done to terminate async event dispatch thread.
+ *	// Note that closing the event manager while asynchronously delivering events 
+ *	// may cause some events to not be delivered before the async event dispatch 
+ *	// thread terminates
+ *	eventManager.close();
+ * </pre>
+ * 
+ * <p>At first glance, this package may seem more complicated than necessary
+ * but it has support for some important features. The listener list supports
+ * companion objects for each listener object. This is used by the OSGi framework
+ * to create wrapper objects for a listener which are passed to the event dispatcher.
+ * The ListenerQueue class is used to build a snap shot of the listeners prior to beginning
+ * event dispatch. 
+ * 
+ * The OSGi framework uses a 2 level listener list for each listener type (4 types). 
+ * Level one is managed per framework instance and contains the list of BundleContexts which have 
+ * registered a listener. Level 2 is managed per BundleContext for the listeners in that 
+ * context. This allows all the listeners of a bundle to be easily and atomically removed from 
+ * the level one list. To use a "flat" list for all bundles would require the list to know which 
+ * bundle registered a listener object so that the list could be traversed when stopping a bundle 
+ * to remove all the bundle's listeners. 
+ * 
+ * When an event is fired, a snapshot list (ListenerQueue) must be made of the current listeners before delivery 
+ * is attempted. The snapshot list is necessary to allow the listener list to be modified while the 
+ * event is being delivered to the snapshot list. The memory cost of the snapshot list is
+ * low since the ListenerQueue object uses the copy-on-write semantics 
+ * of the CopyOnWriteIdentityMap. This guarantees the snapshot list is never modified once created.
+ * 
+ * The OSGi framework also uses a 2 level dispatch technique (EventDispatcher).
+ * Level one dispatch is used by the framework to add the level 2 listener list of each 
+ * BundleContext to the snapshot in preparation for delivery of the event.
+ * Level 2 dispatch is used as the final event deliverer and must cast the listener 
+ * and event objects to the proper type before calling the listener. Level 2 dispatch
+ * will cancel delivery of an event 
+ * to a bundle that has stopped between the time the snapshot was created and the
+ * attempt was made to deliver the event.
+ * 
+ * <p> The highly dynamic nature of the OSGi framework had necessitated these features for 
+ * proper and efficient event delivery.  
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class EventManager {
+	static final boolean DEBUG = false;
+
+	/**
+	 * EventThread for asynchronous dispatch of events.
+	 * Access to this field must be protected by a synchronized region.
+	 */
+	private EventThread<?, ?, ?> thread;
+
+	/** 
+	 * Once closed, an attempt to create a new EventThread will result in an 
+	 * IllegalStateException. 
+	 */
+	private boolean closed;
+
+	/**
+	 * Thread name used for asynchronous event delivery
+	 */
+	protected final String threadName;
+
+	/**
+	 * The thread group used for asynchronous event delivery
+	 */
+	protected final ThreadGroup threadGroup;
+
+	/**
+	 * EventManager constructor. An EventManager object is responsible for
+	 * the delivery of events to listeners via an EventDispatcher.
+	 *
+	 */
+	public EventManager() {
+		this(null, null);
+	}
+
+	/**
+	 * EventManager constructor. An EventManager object is responsible for
+	 * the delivery of events to listeners via an EventDispatcher.
+	 *
+	 * @param threadName The name to give the event thread associated with
+	 * this EventManager.  A <code>null</code> value is allowed.
+	 */
+	public EventManager(String threadName) {
+		this(threadName, null);
+	}
+
+	/**
+	 * EventManager constructor. An EventManager object is responsible for
+	 * the delivery of events to listeners via an EventDispatcher.
+	 *
+	 * @param threadName The name to give the event thread associated with
+	 * this EventManager.  A <code>null</code> value is allowed.
+	 * @param threadGroup The thread group to use for the asynchronous event
+	 * thread associated with this EventManager. A <code>null</code> value is allowed.
+	 * @since 3.4
+	 */
+	public EventManager(String threadName, ThreadGroup threadGroup) {
+		thread = null;
+		closed = false;
+		this.threadName = threadName;
+		this.threadGroup = threadGroup;
+	}
+
+	/**
+	 * This method can be called to release any resources associated with this
+	 * EventManager.
+	 * <p>
+	 * Closing this EventManager while it is asynchronously delivering events 
+	 * may cause some events to not be delivered before the async event dispatch 
+	 * thread terminates.
+	 */
+	public synchronized void close() {
+		if (closed) {
+			return;
+		}
+		if (thread != null) {
+			thread.close();
+			thread = null;
+		}
+		closed = true;
+	}
+
+	/**
+	 * Returns the EventThread to use for dispatching events asynchronously for
+	 * this EventManager.
+	 *
+	 * @return EventThread to use for dispatching events asynchronously for
+	 * this EventManager.
+	 */
+	synchronized <K, V, E> EventThread<K, V, E> getEventThread() {
+		if (closed) {
+			throw new IllegalStateException();
+		}
+		if (thread == null) {
+			/* if there is no thread, then create a new one */
+			thread = AccessController.doPrivileged(new PrivilegedAction<EventThread<K, V, E>>() {
+				public EventThread<K, V, E> run() {
+					EventThread<K, V, E> t = new EventThread<K, V, E>(threadGroup, threadName);
+					return t;
+				}
+			});
+			/* start the new thread */
+			thread.start();
+		}
+
+		@SuppressWarnings("unchecked")
+		EventThread<K, V, E> result = (EventThread<K, V, E>) thread;
+		return result;
+	}
+
+	/**
+	 * This method calls the EventDispatcher object to complete the dispatch of
+	 * the event. If there are more elements in the list, call dispatchEvent
+	 * on the next item on the list.
+	 * This method is package private.
+	 *
+	 * @param listeners A Set of entries from a CopyOnWriteIdentityMap map.
+	 * @param dispatcher Call back object which is called to complete the delivery of
+	 * the event.
+	 * @param eventAction This value was passed by the event source and
+	 * is passed to this method. This is passed on to the call back object.
+	 * @param eventObject This object was created by the event source and
+	 * is passed to this method. This is passed on to the call back object.
+	 */
+	static <K, V, E> void dispatchEvent(Set<Map.Entry<K, V>> listeners, EventDispatcher<K, V, E> dispatcher, int eventAction, E eventObject) {
+		for (Map.Entry<K, V> listener : listeners) { /* iterate over the list of listeners */
+			final K eventListener = listener.getKey();
+			final V listenerObject = listener.getValue();
+			try {
+				/* Call the EventDispatcher to complete the delivery of the event. */
+				dispatcher.dispatchEvent(eventListener, listenerObject, eventAction, eventObject);
+			} catch (Throwable t) {
+				/* Consume and ignore any exceptions thrown by the listener */
+				if (DEBUG) {
+					System.out.println("Exception in " + eventListener); //$NON-NLS-1$
+					t.printStackTrace();
+				}
+			}
+		}
+	}
+
+	/**
+	 * This package private class is used for asynchronously dispatching events.
+	 */
+
+	static class EventThread<K, V, E> extends Thread {
+		private static int nextThreadNumber;
+
+		/**
+		 * Queued is a nested top-level (non-member) class. This class
+		 * represents the items which are placed on the asynch dispatch queue.
+		 * This class is private.
+		 */
+		private static class Queued<K, V, E> {
+			/** listener list for this event */
+			final Set<Map.Entry<K, V>> listeners;
+			/** dispatcher of this event */
+			final EventDispatcher<K, V, E> dispatcher;
+			/** action for this event */
+			final int action;
+			/** object for this event */
+			final E object;
+			/** next item in event queue */
+			Queued<K, V, E> next;
+
+			/**
+			 * Constructor for event queue item
+			 *
+			 * @param l Listener list for this event
+			 * @param d Dispatcher for this event
+			 * @param a Action for this event
+			 * @param o Object for this event
+			 */
+			Queued(Set<Map.Entry<K, V>> l, EventDispatcher<K, V, E> d, int a, E o) {
+				listeners = l;
+				dispatcher = d;
+				action = a;
+				object = o;
+				next = null;
+			}
+		}
+
+		/** item at the head of the event queue */
+		private Queued<K, V, E> head;
+		/** item at the tail of the event queue */
+		private Queued<K, V, E> tail;
+		/** if false the thread must terminate */
+		private volatile boolean running;
+
+		/**
+		 * Constructor for the event thread. 
+		 * @param threadName Name of the EventThread 
+		 */
+		EventThread(ThreadGroup threadGroup, String threadName) {
+			super(threadGroup, threadName == null ? getNextName() : threadName);
+			running = true;
+			head = null;
+			tail = null;
+
+			setDaemon(true); /* Mark thread as daemon thread */
+		}
+
+		private static synchronized String getNextName() {
+			return "EventManagerThread-" + nextThreadNumber++; //$NON-NLS-1$
+		}
+
+		/**
+		 * Constructor for the event thread. 
+		 * @param threadName Name of the EventThread 
+		 */
+		EventThread(String threadName) {
+			this(null, threadName);
+		}
+
+		/**
+		 * Constructor for the event thread.
+		 */
+		EventThread() {
+			this(null, null);
+		}
+
+		/**
+		 * Stop thread.
+		 */
+		void close() {
+			running = false;
+			interrupt();
+		}
+
+		/**
+		 * This method pulls events from
+		 * the queue and dispatches them.
+		 */
+		public void run() {
+			try {
+				while (true) {
+					Queued<K, V, E> item = getNextEvent();
+					if (item == null) {
+						return;
+					}
+					EventManager.dispatchEvent(item.listeners, item.dispatcher, item.action, item.object);
+					// Bug 299589: since the call to getNextEvent() will eventually block for a long time, we need to make sure that the 'item'
+					// variable is cleared of the previous value before the call to getNextEvent(). See VM SPec 2.5.7 for why the compiler 
+					// will not automatically clear this variable for each loop iteration.
+					item = null;
+				}
+			} catch (RuntimeException e) {
+				if (EventManager.DEBUG) {
+					e.printStackTrace();
+				}
+				throw e;
+			} catch (Error e) {
+				if (EventManager.DEBUG) {
+					e.printStackTrace();
+				}
+				throw e;
+			}
+		}
+
+		/**
+		 * This methods takes the input parameters and creates a Queued
+		 * object and queues it.
+		 * The thread is notified.
+		 *
+		 * @param l Listener list for this event
+		 * @param d Dispatcher for this event
+		 * @param a Action for this event
+		 * @param o Object for this event
+		 */
+		synchronized void postEvent(Set<Map.Entry<K, V>> l, EventDispatcher<K, V, E> d, int a, E o) {
+			if (!isAlive()) { /* If the thread is not alive, throw an exception */
+				throw new IllegalStateException();
+			}
+
+			Queued<K, V, E> item = new Queued<K, V, E>(l, d, a, o);
+
+			if (head == null) /* if the queue was empty */
+			{
+				head = item;
+				tail = item;
+			} else /* else add to end of queue */
+			{
+				tail.next = item;
+				tail = item;
+			}
+
+			notify();
+		}
+
+		/**
+		 * This method is called by the thread to remove
+		 * items from the queue so that they can be dispatched to their listeners.
+		 * If the queue is empty, the thread waits.
+		 *
+		 * @return The Queued removed from the top of the queue or null
+		 * if the thread has been requested to stop.
+		 */
+		private synchronized Queued<K, V, E> getNextEvent() {
+			while (running && (head == null)) {
+				try {
+					wait();
+				} catch (InterruptedException e) {
+					// If interrupted, we will loop back up and check running
+				}
+			}
+
+			if (!running) { /* if we are stopping */
+				return null;
+			}
+
+			Queued<K, V, E> item = head;
+			head = item.next;
+			if (head == null) {
+				tail = null;
+			}
+
+			return item;
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
new file mode 100644
index 0000000..40fbf99
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osgi.framework.eventmgr;
+
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.osgi.framework.eventmgr.EventManager.EventThread;
+
+/**
+ * The ListenerQueue is used to snapshot the list of listeners at the time the event
+ * is fired. The snapshot list is then used to dispatch
+ * events to those listeners. A ListenerQueue object is associated with a
+ * specific EventManager object. ListenerQueue objects constructed with the same
+ * EventManager object will get in-order delivery of events when
+ * using asynchronous delivery. No delivery order is guaranteed for synchronous
+ * delivery to avoid any potential deadly embraces.
+ *
+ * <p>ListenerQueue objects are created as necessary to build a list of listeners
+ * that should receive a specific event or events. Once the list is created, the event
+ * can then be synchronously or asynchronously delivered to the list of
+ * listeners. After the event has been dispatched for delivery, the
+ * ListenerQueue object should be discarded as it is likely the list of listeners is stale.
+ * A new ListenerQueue object should be created when it is time to deliver 
+ * another event. The Sets used to build the list of listeners must not change after being 
+ * added to the list.
+ * @since 3.1
+ */
+public class ListenerQueue<K, V, E> {
+	/**
+	 * EventManager with which this queue is associated.
+	 */
+	protected final EventManager manager;
+	/**
+	 * A list of listener lists.
+	 */
+	private final Map<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>> queue;
+
+	/**
+	 * Once the listener queue has been used to dispatch an event, 
+	 * you cannot add modify the queue.
+	 * Access to this field must be protected by a synchronized region.
+	 */
+	private boolean readOnly;
+
+	/**
+	 * ListenerQueue constructor. This method creates an empty snapshot list.
+	 *
+	 * @param manager The EventManager this queue is associated with.
+	 * @throws IllegalArgumentException If manager is null.
+	 */
+	public ListenerQueue(EventManager manager) {
+		if (manager == null) {
+			throw new IllegalArgumentException();
+		}
+
+		this.manager = manager;
+		queue = new CopyOnWriteIdentityMap<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>>();
+		readOnly = false;
+	}
+
+	/**
+	 * Add a listener list to the snapshot list. This method can be called multiple times, prior to
+	 * calling one of the dispatchEvent methods, to build the set of listeners for the
+	 * delivery of a specific event. The current list of listeners in the specified EventListeners
+	 * object is added to the snapshot list.
+	 *
+	 * @param listeners An EventListeners object to add to the queue. The current listeners
+	 * in the EventListeners object will be called when an event is dispatched.
+	 * @param dispatcher An EventDispatcher object to use when dispatching an event
+	 * to the listeners on the specified EventListeners.
+	 * @throws IllegalStateException If called after one of the dispatch methods has been called.
+	 * @deprecated As of 3.5. Replaced by {@link #queueListeners(Set, EventDispatcher)}.
+	 */
+	public void queueListeners(EventListeners<K, V> listeners, EventDispatcher<K, V, E> dispatcher) {
+		queueListeners(listeners.entrySet(), dispatcher);
+	}
+
+	/**
+	 * Add a set of listeners to the snapshot list. This method can be called multiple times, prior to
+	 * calling one of the dispatchEvent methods, to build the list of listeners for the
+	 * delivery of a specific event. The specified listeners
+	 * are added to the snapshot list.
+	 *
+	 * @param listeners A Set of Map.Entries to add to the queue. This is typically the entrySet
+	 * from a CopyOnWriteIdentityMap object. This set must not change after being added to this
+	 * snapshot list.
+	 * @param dispatcher An EventDispatcher object to use when dispatching an event
+	 * to the specified listeners.
+	 * @throws IllegalStateException If called after one of the dispatch methods has been called.
+	 * @since 3.5
+	 */
+	public synchronized void queueListeners(Set<Map.Entry<K, V>> listeners, EventDispatcher<K, V, E> dispatcher) {
+		if (readOnly) {
+			throw new IllegalStateException();
+		}
+
+		if (!listeners.isEmpty()) {
+			queue.put(listeners, dispatcher); // enqueue the list and its dispatcher
+		}
+	}
+
+	/**
+	 * Asynchronously dispatch an event to the snapshot list. An event dispatch thread
+	 * maintained by the associated EventManager is used to deliver the events.
+	 * This method may return immediately to the caller.
+	 *
+	 * @param eventAction This value is passed to the EventDispatcher.
+	 * @param eventObject This object is passed to the EventDispatcher.
+	 */
+	public void dispatchEventAsynchronous(int eventAction, E eventObject) {
+		synchronized (this) {
+			readOnly = true;
+		}
+		EventThread<K, V, E> eventThread = manager.getEventThread();
+		synchronized (eventThread) { /* synchronize on the EventThread to ensure no interleaving of posting to the event thread */
+			for (Map.Entry<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>> entry : queue.entrySet()) { /* iterate over the list of listener lists */
+				eventThread.postEvent(entry.getKey(), entry.getValue(), eventAction, eventObject);
+			}
+		}
+	}
+
+	/**
+	 * Synchronously dispatch an event to the snapshot list. The event may
+	 * be dispatched on the current thread or an event dispatch thread
+	 * maintained by the associated EventManager.
+	 * This method will not return to the caller until the EventDispatcher
+	 * has been called (and has returned) for each listener on the queue.
+	 *
+	 * @param eventAction This value is passed to the EventDispatcher.
+	 * @param eventObject This object is passed to the EventDispatcher.
+	 */
+	public void dispatchEventSynchronous(int eventAction, E eventObject) {
+		synchronized (this) {
+			readOnly = true;
+		}
+		// We can't guarantee any delivery order for synchronous events.
+		// Attempts to do so result in deadly embraces.
+		for (Map.Entry<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>> entry : queue.entrySet()) { /* iterate over the list of listener lists */
+			EventManager.dispatchEvent(entry.getKey(), entry.getValue(), eventAction, eventObject);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/package.html b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/package.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/eventmgr/package.html
rename to eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/package.html
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties
index 1c73f44..4d1897a 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/ExternalMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2010 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,10 +10,6 @@
 ###############################################################################
 
 #External Messages for EN locale
-ECLIPSE_OSGI_NAME=Eclipse OSGi Framework
-ECLIPSE_OSGI_VERSION=3.6.0
-OSGI_VERSION=OSGi Service Platform Release 3
-ECLIPSE_COPYRIGHT=Copyright (c) 2003, 2004 IBM Corporation and others. \nAll rights reserved. This program and the accompanying materials \nare made available under the terms of the Eclipse Public License v1.0 \nwhich accompanies this distribution, and is available at \nhttp://www.eclipse.org/legal/epl-v10.html \nContributors: \n     IBM Corporation - initial API and implementation
 OSGI_SYSTEMBUNDLE_CREATE_EXCEPTION=Exception while creating System Bundle: {0}
 OSGI_SYSTEMBUNDLE_DESCRIPTION_ERROR=Unable to construct System Bundle description.
 OSGI_INTERNAL_ERROR=Internal Error in the OSGi framework. Please report this problem.
@@ -30,7 +26,6 @@ BUNDLE_UNRESOLVED_STATE_CONFLICT=The state indicates the bundle is resolved
 BUNDLE_UNRESOLVED_UNSATISFIED_CONSTRAINT_EXCEPTION=The bundle \"{0}\" could not be resolved. Reason: {1}
 BUNDLE_SYSTEMBUNDLE_UNINSTALL_EXCEPTION=The System Bundle cannot be uninstalled
 BUNDLE_READ_EXCEPTION=An error occurred trying to read the bundle
-BUNDLE_CLASSPATH_ENTRY_NOT_FOUND_EXCEPTION=The Bundle-ClassPath entry \"{0}\" was not found in the bundle: {1}
 BUNDLE_NO_CLASSPATH_MATCH=The Bundle-ClassPath does not have any matching entries
 BUNDLE_NOT_IN_FRAMEWORK=The bundle does not exist in the framework: {0}
 BUNDLE_LOADER_ATTACHMENT_ERROR=Cannot attach fragment bundle \"{0}\" to resolved host \"{1}\".  Try refreshing the host bundle.
@@ -38,7 +33,6 @@ BUNDLE_FRAGMENT_CNFE=A fragment bundle cannot load classes: {0}
 BUNDLE_FRAGMENT_START=A fragment bundle cannot be started: {0}
 BUNDLE_FRAGMENT_STOP=A fragment bundle cannot be stopped: {0}
 BUNDLE_TRANSIENT_START_ERROR=The bundle''s start level is not met.  Cannot transient start the bundle: {0}
-BUNDLE_FRAGMENT_IMPORT_CONFLICT=Fragment bundle \"{0}\" attempted to import additional package \"{1}\".  Try refreshing the host bundle \"{2}\".
 BUNDLE_EXTENSION_PERMISSION=Extension bundles must have AllPermission assigned.
 BUNDLE_CNFE_NOT_RESOLVED=Cannot load \"{0}"\ because the bundle \"{1}\" cannot be resolved.
 MANIFEST_INVALID_SPACE=The manifest line \"{0}\" has an invalid leading space '' '' character.
@@ -46,6 +40,7 @@ MANIFEST_INVALID_LINE_NOCOLON=The manifest line \"{0}\" is invalid; it has no co
 MANIFEST_INVALID_HEADER_EXCEPTION=Invalid manifest header {0}: \"{1}\"
 MANIFEST_IOEXCEPTION=An error occurred while reading the manifest file.
 SERVICE_FACTORY_EXCEPTION=Exception in {0}.{1}()
+SERVICE_FACTORY_RECURSION=Recursive ServiceFactory call in {0}.{1}()
 SERVICE_NOT_INSTANCEOF_CLASS_EXCEPTION=The service object is not an instance of the service class {0}
 SERVICE_FACTORY_NOT_INSTANCEOF_CLASS_EXCEPTION={0}.getService() returned a service object that is not an instance of the service class {1}
 SERVICE_OBJECT_NULL_EXCEPTION={0}.getService() returned a null service object
@@ -53,7 +48,6 @@ SERVICE_ARGUMENT_NULL_EXCEPTION=The service parameter is null
 SERVICE_ALREADY_UNREGISTERED_EXCEPTION=The service has been unregistered
 SERVICE_EMPTY_CLASS_LIST_EXCEPTION=The array of service names is empty
 HEADER_DUPLICATE_KEY_EXCEPTION=The key \"{0}\" already exists in another case variation
-FILTER_INVALID=The filter is invalid.
 FILTER_MISSING_LEFTPAREN=Missing ''('' at \"{0}\"
 FILTER_MISSING_RIGHTPAREN=Missing '')'' at \"{0}\"
 FILTER_TRAILING_CHARACTERS=Extraneous trailing characters at \"{0}\"
@@ -65,11 +59,6 @@ FILTER_INVALID_VALUE=Invalid value at \"{0}\"
 STARTLEVEL_EXCEPTION_INVALID_REQUESTED_STARTLEVEL=The requested start level of {0} is invalid.  The value must be a positive integer.
 STARTLEVEL_CANT_CHANGE_SYSTEMBUNDLE_STARTLEVEL=The System Bundle's start level can not be modified.
 
-LAUNCHER_ADAPTOR_ERROR=Unable to create FrameworkAdaptor.
-LAUNCHER_INVALID_PORT=Invalid console port: {0}
-LAUNCHER_COMPONENT_MISSING=Warning: The requested component ''{0}'' is not included in this runtime.
-LAUNCHER_COMPONENT_JAR=Add ''{0}'' to the classpath.
-
 CANNOT_SET_CONTEXTFINDER=The context finder has not been installed.
 
 URL_HANDLER_INCORRECT_TYPE=The service property "{0}" is not the correct type for the service "{1}" registered by the bundle "{2}"
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java
index cb2878b..7cf7336 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/FrameworkProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Cognos Incorporated, IBM Corporation and others.
+ * Copyright (c) 2006, 2010 Cognos Incorporated, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,7 +85,7 @@ public class FrameworkProperties {
 		return properties;
 	}
 
-	public static synchronized void setProperties(Map input) {
+	public static synchronized void setProperties(Map<String, String> input) {
 		if (input == null) {
 			// just use internal props;  note that this will reuse a previous set of properties if they were set
 			internalGetProperties("false"); //$NON-NLS-1$
@@ -93,8 +93,8 @@ public class FrameworkProperties {
 		}
 		properties = null;
 		Properties toSet = internalGetProperties("false"); //$NON-NLS-1$
-		for (Iterator keys = input.keySet().iterator(); keys.hasNext();) {
-			String key = (String) keys.next();
+		for (Iterator<String> keys = input.keySet().iterator(); keys.hasNext();) {
+			String key = keys.next();
 			Object value = input.get(key);
 			if (value instanceof String) {
 				toSet.setProperty(key, (String) value);
@@ -135,7 +135,7 @@ public class FrameworkProperties {
 	public static String decode(String urlString) {
 		//try to use Java 1.4 method if available
 		try {
-			Class clazz = URLDecoder.class;
+			Class<? extends URLDecoder> clazz = URLDecoder.class;
 			Method method = clazz.getDeclaredMethod("decode", new Class[] {String.class, String.class}); //$NON-NLS-1$
 			//first encode '+' characters, because URLDecoder incorrectly converts 
 			//them to spaces on certain class library implementations.
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java
index 88506cf..4ba784d 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Msg.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@ import org.eclipse.osgi.util.NLS;
 public class Msg extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.osgi.framework.internal.core.ExternalMessages"; //$NON-NLS-1$
 
-	public static String BUNDLE_CLASSPATH_ENTRY_NOT_FOUND_EXCEPTION;
 	public static String MANIFEST_INVALID_HEADER_EXCEPTION;
 	public static String BUNDLE_STATE_CHANGE_EXCEPTION;
 	public static String BUNDLE_UNINSTALLED_EXCEPTION;
@@ -41,9 +40,7 @@ public class Msg extends NLS {
 	public static String BUNDLE_CNFE_NOT_RESOLVED;
 	public static String BUNDLE_LOADER_ATTACHMENT_ERROR;
 
-	public static String BUNDLE_FRAGMENT_IMPORT_CONFLICT;
 	public static String BUNDLE_NO_CLASSPATH_MATCH;
-	public static String FILTER_INVALID;
 
 	public static String FILTER_TERMINATED_ABRUBTLY;
 	public static String FILTER_TRAILING_CHARACTERS;
@@ -58,11 +55,6 @@ public class Msg extends NLS {
 	public static String BUNDLE_INSTALL_RECURSION_EXCEPTION;
 	public static String BUNDLE_INSTALL_SAME_UNIQUEID;
 
-	public static String ECLIPSE_OSGI_NAME;
-	public static String ECLIPSE_OSGI_VERSION;
-	public static String OSGI_VERSION;
-	public static String ECLIPSE_COPYRIGHT;
-
 	public static String OSGI_INTERNAL_ERROR;
 	public static String BUNDLE_NOT_IN_FRAMEWORK;
 	public static String BUNDLE_REFRESH_FAILURE;
@@ -72,17 +64,13 @@ public class Msg extends NLS {
 
 	public static String SERVICE_FACTORY_EXCEPTION;
 	public static String SERVICE_OBJECT_NULL_EXCEPTION;
+	public static String SERVICE_FACTORY_RECURSION;
 
 	public static String STARTLEVEL_EXCEPTION_INVALID_REQUESTED_STARTLEVEL;
 	public static String STARTLEVEL_CANT_CHANGE_SYSTEMBUNDLE_STARTLEVEL;
 
 	public static String BUNDLE_SYSTEMBUNDLE_UNINSTALL_EXCEPTION;
 
-	public static String LAUNCHER_ADAPTOR_ERROR;
-	public static String LAUNCHER_COMPONENT_JAR;
-	public static String LAUNCHER_COMPONENT_MISSING;
-	public static String LAUNCHER_INVALID_PORT;
-
 	public static String HEADER_DUPLICATE_KEY_EXCEPTION;
 	public static String MANIFEST_INVALID_SPACE;
 	public static String MANIFEST_INVALID_LINE_NOCOLON;
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java
index ff4d101..2cbf602 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/core/Tokenizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,9 @@
 
 package org.eclipse.osgi.framework.internal.core;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Simple tokenizer class. Used to parse data.
  */
@@ -62,7 +65,41 @@ public class Tokenizer {
 		return (null);
 	}
 
-	public String getString(String terminals) {
+	public String getEscapedToken(String terminals) {
+		char[] val = value;
+		int cur = cursor;
+		if (cur >= max)
+			return null;
+		StringBuffer sb = new StringBuffer();
+		char c;
+		for (; cur < max; cur++) {
+			c = val[cur];
+			// this is an escaped char
+			if (c == '\\') {
+				cur++; // skip the escape char
+				if (cur == max)
+					break;
+				c = val[cur]; // include the escaped char
+			} else if (terminals.indexOf(c) != -1) {
+				break;
+			}
+			sb.append(c);
+		}
+
+		cursor = cur;
+		return sb.toString();
+	}
+
+	public List<String> getEscapedTokens(String terminals) {
+		List<String> result = new ArrayList<String>();
+		for (String token = getEscapedToken(terminals); token != null; token = getEscapedToken(terminals)) {
+			result.add(token);
+			getChar(); // consume terminal
+		}
+		return result;
+	}
+
+	public String getString(String terminals, String preserveEscapes) {
 		skipWhiteSpace();
 		char[] val = value;
 		int cur = cursor;
@@ -82,6 +119,8 @@ public class Tokenizer {
 						if (cur == max)
 							break;
 						c = val[cur]; // include the escaped char
+						if (preserveEscapes != null && preserveEscapes.indexOf(c) != -1)
+							sb.append('\\'); // must preserve escapes for c
 					} else if (c == '\"') {
 						break;
 					}
@@ -104,6 +143,10 @@ public class Tokenizer {
 		return (null);
 	}
 
+	public String getString(String terminals) {
+		return getString(terminals, null);
+	}
+
 	public char getChar() {
 		int cur = cursor;
 		if (cur < max) {
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
index 1f6ac61..1d6cba7 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -126,7 +126,7 @@ public class ReliableFile {
 	private File referenceFile;
 
 	/** List of checksum file objects: File => specific ReliableFile generation */
-	private static Hashtable cacheFiles = new Hashtable(20);
+	private static Hashtable<File, CacheInfo> cacheFiles = new Hashtable<File, CacheInfo>(20);
 
 	private File inputFile = null;
 	private File outputFile = null;
@@ -193,7 +193,7 @@ public class ReliableFile {
 			String[] files = parent.list();
 			if (files == null)
 				return null;
-			ArrayList list = new ArrayList(defaultMaxGenerations);
+			List<Integer> list = new ArrayList<Integer>(defaultMaxGenerations);
 			if (file.exists())
 				list.add(new Integer(0)); //base file exists
 			for (int i = 0; i < files.length; i++) {
@@ -263,7 +263,7 @@ public class ReliableFile {
 			InputStream is = null;
 			CacheInfo info;
 			synchronized (cacheFiles) {
-				info = (CacheInfo) cacheFiles.get(file);
+				info = cacheFiles.get(file);
 				long timeStamp = file.lastModified();
 				if (info == null || timeStamp != info.timeStamp) {
 					try {
@@ -354,7 +354,7 @@ public class ReliableFile {
 		}
 
 		try {
-			CacheInfo info = (CacheInfo) cacheFiles.get(inputFile);
+			CacheInfo info = cacheFiles.get(inputFile);
 			appendChecksum = info.checksum;
 			OutputStream os = new FileOutputStream(tmpFile);
 			if (info.filetype == FILETYPE_NOSIGNATURE) {
@@ -443,7 +443,7 @@ public class ReliableFile {
 			//  backup files.
 			for (int idx = 0, count = generationCount - rmCount; idx < count; idx++) {
 				File file = new File(parent, name + '.' + generations[idx]);
-				CacheInfo info = (CacheInfo) cacheFiles.get(file);
+				CacheInfo info = cacheFiles.get(file);
 				if (info != null) {
 					if (info.filetype == FILETYPE_CORRUPT)
 						rmCount--;
@@ -623,7 +623,7 @@ public class ReliableFile {
 		if (!directory.isDirectory())
 			throw new IOException("Not a valid directory"); //$NON-NLS-1$
 		String files[] = directory.list();
-		HashSet list = new HashSet(files.length / 2);
+		Set<String> list = new HashSet<String>(files.length / 2);
 		for (int idx = 0; idx < files.length; idx++) {
 			String file = files[idx];
 			int pos = file.lastIndexOf('.');
@@ -642,8 +642,8 @@ public class ReliableFile {
 		}
 		files = new String[list.size()];
 		int idx = 0;
-		for (Iterator iter = list.iterator(); iter.hasNext();) {
-			files[idx++] = (String) iter.next();
+		for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
+			files[idx++] = iter.next();
 		}
 		return files;
 	}
@@ -695,7 +695,7 @@ public class ReliableFile {
 	 */
 	int getSignatureSize() throws IOException {
 		if (inputFile != null) {
-			CacheInfo info = (CacheInfo) cacheFiles.get(inputFile);
+			CacheInfo info = cacheFiles.get(inputFile);
 			if (info != null) {
 				switch (info.filetype) {
 					case FILETYPE_VALID :
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
index a22466d..f177456 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -163,6 +163,7 @@ public class ReliableFileInputStream extends FilterInputStream {
 
 	/**
 	 * Override default available method.
+	 * @throws IOException 
 	 * @see FilterInputStream#available()
 	 */
 	public synchronized int available() throws IOException {
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
index 123894a..638d8ea 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,7 +68,7 @@ public interface FrameworkLog {
 	 * File.
 	 * @throws IOException if any problem occurs while constructing a
 	 * FileWriter from the newFile.  If this exception is thrown the 
-	 * FrameworkLog will not be effected and will continue to use the 
+	 * FrameworkLog will not be affected and will continue to use the 
 	 * current Writer to log messages.
 	 */
 	public void setFile(File newFile, boolean append) throws IOException;
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
index d64a422..5c4a77d 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,15 +55,16 @@ public class FrameworkLogEntry {
 	// It would be nice to rename some of these fields but we cannot change the getter method
 	// names without breaking clients.  Changing only the field names would be confusing.
 	//TODO "entry" has another meaning here - title, summary, tag are better names 
-	private String entry;
-	private String message;
+	private final String entry;
+	private final String message;
 	//TODO get rid of this
-	private int stackCode;
+	private final int stackCode;
 	//TODO: use "reason" or "cause" instead
-	private Throwable throwable;
-	private FrameworkLogEntry[] children;
-	private int severity = 0;
-	private int bundleCode = 0;
+	private final Throwable throwable;
+	private final FrameworkLogEntry[] children;
+	private final int severity;
+	private final int bundleCode;
+	private final Object context;
 
 	/**
 	 * Constructs a new FrameworkLogEntry
@@ -74,11 +75,7 @@ public class FrameworkLogEntry {
 	 * @param children the children
 	 */
 	public FrameworkLogEntry(String entry, String message, int stackCode, Throwable throwable, FrameworkLogEntry[] children) {
-		this.entry = entry;
-		this.message = message;
-		this.stackCode = stackCode;
-		this.throwable = throwable;
-		this.children = children;
+		this(null, entry, 0, 0, message, stackCode, throwable, children);
 	}
 
 	/**
@@ -93,6 +90,23 @@ public class FrameworkLogEntry {
 	 * @since 3.2
 	 */
 	public FrameworkLogEntry(String entry, int severity, int bundleCode, String message, int stackCode, Throwable throwable, FrameworkLogEntry[] children) {
+		this(null, entry, severity, bundleCode, message, stackCode, throwable, children);
+	}
+
+	/**
+	 * Constructs a new FrameworkLogEntry
+	 * @param context the context
+	 * @param entry the entry
+	 * @param severity the severity
+	 * @param bundleCode the bundle code
+	 * @param message the message
+	 * @param stackCode the stack code
+	 * @param throwable the throwable
+	 * @param children the children
+	 * @since 3.7
+	 */
+	public FrameworkLogEntry(Object context, String entry, int severity, int bundleCode, String message, int stackCode, Throwable throwable, FrameworkLogEntry[] children) {
+		this.context = context;
 		this.entry = entry;
 		this.message = message;
 		this.stackCode = stackCode;
@@ -171,4 +185,16 @@ public class FrameworkLogEntry {
 		return bundleCode;
 	}
 
+	/**
+	 * Returns the context associated with this <code>FrameworkLogEntry</code>
+	 * object.
+	 * 
+	 * @return <code>Object</code> containing the context associated with this
+	 *         <code>FrameworkLogEntry</code> object;<code>null</code> if no context is
+	 *         associated with this <code>FrameworkLogEntry</code> object.
+	 * @since 3.7
+	 */
+	public Object getContext() {
+		return context;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java
index 7a25fb5..2e654b1 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java
@@ -30,8 +30,8 @@ public class SecureAction {
 	private AccessControlContext controlContext;
 
 	// This ClassLoader is used in loadSystemClass if System.getClassLoader() returns null
-	static final ClassLoader bootClassLoader = (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-		public Object run() {
+	static final ClassLoader bootClassLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+		public ClassLoader run() {
 			return new ClassLoader(Object.class.getClassLoader()) { /* boot class loader */};
 		}
 	});
@@ -54,9 +54,9 @@ public class SecureAction {
 	 * </pre>
 	 * @return a privileged action object that can be used to construct a SecureAction object.
 	 */
-	public static PrivilegedAction createSecureAction() {
-		return new PrivilegedAction() {
-			public Object run() {
+	public static PrivilegedAction<SecureAction> createSecureAction() {
+		return new PrivilegedAction<SecureAction>() {
+			public SecureAction run() {
 				return new SecureAction();
 			}
 		};
@@ -71,8 +71,8 @@ public class SecureAction {
 	public String getProperty(final String property) {
 		if (System.getSecurityManager() == null)
 			return FrameworkProperties.getProperty(property);
-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<String>() {
+			public String run() {
 				return FrameworkProperties.getProperty(property);
 			}
 		}, controlContext);
@@ -89,8 +89,8 @@ public class SecureAction {
 	public String getProperty(final String property, final String def) {
 		if (System.getSecurityManager() == null)
 			return FrameworkProperties.getProperty(property, def);
-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<String>() {
+			public String run() {
 				return FrameworkProperties.getProperty(property, def);
 			}
 		}, controlContext);
@@ -104,8 +104,8 @@ public class SecureAction {
 	public Properties getProperties() {
 		if (System.getSecurityManager() == null)
 			return FrameworkProperties.getProperties();
-		return (Properties) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Properties>() {
+			public Properties run() {
 				return FrameworkProperties.getProperties();
 			}
 		}, controlContext);
@@ -122,8 +122,8 @@ public class SecureAction {
 		if (System.getSecurityManager() == null)
 			return new FileInputStream(file);
 		try {
-			return (FileInputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws FileNotFoundException {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<FileInputStream>() {
+				public FileInputStream run() throws FileNotFoundException {
 					return new FileInputStream(file);
 				}
 			}, controlContext);
@@ -146,8 +146,8 @@ public class SecureAction {
 		if (System.getSecurityManager() == null)
 			return new FileOutputStream(file.getAbsolutePath(), append);
 		try {
-			return (FileOutputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws FileNotFoundException {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<FileOutputStream>() {
+				public FileOutputStream run() throws FileNotFoundException {
 					return new FileOutputStream(file.getAbsolutePath(), append);
 				}
 			}, controlContext);
@@ -167,11 +167,34 @@ public class SecureAction {
 	public long length(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.length();
-		return ((Long) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Long>() {
+			public Long run() {
 				return new Long(file.length());
 			}
-		}, controlContext)).longValue();
+		}, controlContext).longValue();
+	}
+
+	/**
+	 * Returns the canonical path of a file.  Same as calling
+	 * file.getCanonicalPath().
+	 * @param file a file object
+	 * @return the canonical path of a file.
+	 * @throws IOException on error
+	 */
+	public String getCanonicalPath(final File file) throws IOException {
+		if (System.getSecurityManager() == null)
+			return file.getCanonicalPath();
+		try {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<String>() {
+				public String run() throws IOException {
+					return file.getCanonicalPath();
+				}
+			}, controlContext);
+		} catch (PrivilegedActionException e) {
+			if (e.getException() instanceof IOException)
+				throw (IOException) e.getException();
+			throw (RuntimeException) e.getException();
+		}
 	}
 
 	/**
@@ -183,11 +206,11 @@ public class SecureAction {
 	public boolean exists(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.exists();
-		return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+			public Boolean run() {
 				return file.exists() ? Boolean.TRUE : Boolean.FALSE;
 			}
-		}, controlContext)).booleanValue();
+		}, controlContext).booleanValue();
 	}
 
 	/**
@@ -199,11 +222,11 @@ public class SecureAction {
 	public boolean isDirectory(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.isDirectory();
-		return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+			public Boolean run() {
 				return file.isDirectory() ? Boolean.TRUE : Boolean.FALSE;
 			}
-		}, controlContext)).booleanValue();
+		}, controlContext).booleanValue();
 	}
 
 	/**
@@ -215,11 +238,11 @@ public class SecureAction {
 	public long lastModified(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.lastModified();
-		return ((Long) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Long>() {
+			public Long run() {
 				return new Long(file.lastModified());
 			}
-		}, controlContext)).longValue();
+		}, controlContext).longValue();
 	}
 
 	/**
@@ -231,8 +254,8 @@ public class SecureAction {
 	public String[] list(final File file) {
 		if (System.getSecurityManager() == null)
 			return file.list();
-		return (String[]) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<String[]>() {
+			public String[] run() {
 				return file.list();
 			}
 		}, controlContext);
@@ -250,8 +273,8 @@ public class SecureAction {
 			if (System.getSecurityManager() == null)
 				return new ZipFile(file);
 			try {
-				return (ZipFile) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-					public Object run() throws IOException {
+				return AccessController.doPrivileged(new PrivilegedExceptionAction<ZipFile>() {
+					public ZipFile run() throws IOException {
 						return new ZipFile(file);
 					}
 				}, controlContext);
@@ -286,8 +309,8 @@ public class SecureAction {
 		if (System.getSecurityManager() == null)
 			return new URL(protocol, host, port, file, handler);
 		try {
-			return (URL) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws MalformedURLException {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<URL>() {
+				public URL run() throws MalformedURLException {
 					return new URL(protocol, host, port, file, handler);
 				}
 			}, controlContext);
@@ -309,8 +332,8 @@ public class SecureAction {
 	public Thread createThread(final Runnable target, final String name, final ClassLoader contextLoader) {
 		if (System.getSecurityManager() == null)
 			return createThread0(target, name, contextLoader);
-		return (Thread) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<Thread>() {
+			public Thread run() {
 				return createThread0(target, name, contextLoader);
 			}
 		}, controlContext);
@@ -330,11 +353,11 @@ public class SecureAction {
 	 * @param context the BundleContext
 	 * @return a service object
 	 */
-	public Object getService(final ServiceReference reference, final BundleContext context) {
+	public <S> S getService(final ServiceReference<S> reference, final BundleContext context) {
 		if (System.getSecurityManager() == null)
 			return context.getService(reference);
-		return AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
+		return AccessController.doPrivileged(new PrivilegedAction<S>() {
+			public S run() {
 				return context.getService(reference);
 			}
 		}, controlContext);
@@ -347,12 +370,12 @@ public class SecureAction {
 	 * @return a Class
 	 * @throws ClassNotFoundException
 	 */
-	public Class forName(final String name) throws ClassNotFoundException {
+	public Class<?> forName(final String name) throws ClassNotFoundException {
 		if (System.getSecurityManager() == null)
 			return Class.forName(name);
 		try {
-			return (Class) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() {
+				public Class<?> run() throws Exception {
 					return Class.forName(name);
 				}
 			}, controlContext);
@@ -370,14 +393,14 @@ public class SecureAction {
 	 * @return a Class
 	 * @throws ClassNotFoundException
 	 */
-	public Class loadSystemClass(final String name) throws ClassNotFoundException {
+	public Class<?> loadSystemClass(final String name) throws ClassNotFoundException {
 		if (System.getSecurityManager() == null) {
 			ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
 			return (systemClassLoader != null) ? systemClassLoader.loadClass(name) : bootClassLoader.loadClass(name);
 		}
 		try {
-			return (Class) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
+			return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() {
+				public Class<?> run() throws Exception {
 					ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
 					return (systemClassLoader != null) ? systemClassLoader.loadClass(name) : bootClassLoader.loadClass(name);
 				}
@@ -393,12 +416,12 @@ public class SecureAction {
 	 * Opens a ServiceTracker. Same as calling tracker.open()
 	 * @param tracker the ServiceTracker to open.
 	 */
-	public void open(final ServiceTracker tracker) {
+	public void open(final ServiceTracker<?, ?> tracker) {
 		if (System.getSecurityManager() == null) {
 			tracker.open();
 			return;
 		}
-		AccessController.doPrivileged(new PrivilegedAction() {
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
 			public Object run() {
 				tracker.open();
 				return null;
@@ -418,7 +441,7 @@ public class SecureAction {
 			return;
 		}
 		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
+			AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
 				public Object run() throws BundleException {
 					bundle.start(options);
 					return null;
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
index 9e6b3bd..9f9bc25 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
@@ -108,7 +108,7 @@ public interface DebugOptions {
 	 * @return a snapshot of the current options.
 	 * @since 3.6
 	 */
-	public Map /*<String, String>*/getOptions();
+	public Map<String, String> getOptions();
 
 	/**
 	 * Sets the identified option to the identified value.  If debug is 
@@ -134,7 +134,7 @@ public interface DebugOptions {
 	 * @param options the new set of options
 	 * @since 3.6
 	 */
-	public abstract void setOptions(Map /*<String, String>*/options);
+	public abstract void setOptions(Map<String, String> options);
 
 	/**
 	 * Removes the identified option.  If debug is not enabled then
@@ -215,5 +215,5 @@ public interface DebugOptions {
 	 * @return A new or existing <code>DebugTrace</code> object for the specified plug-in ID
 	 * @since 3.5
 	 */
-	public abstract DebugTrace newDebugTrace(String bundleSymbolicName, Class traceEntryClass);
+	public abstract DebugTrace newDebugTrace(String bundleSymbolicName, Class<?> traceEntryClass);
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
index ceda998..3e11409 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,13 +25,14 @@ import org.osgi.framework.Bundle;
 public interface BundleLocalization {
 
 	/**
-	 * The getLocalization method gets a ResourceBundle object for the given
-	 * locale and bundle.
+	 * Returns a <code>ResourceBundle</code> object for the given bundle and locale.
 	 * @param bundle the bundle to get localization for
-	 * @param locale the name of the locale to get
+	 * @param locale the name of the locale to get, or <code>null</code> if
+	 * the default locale is to be used
 	 * 
-	 * @return A <code>ResourceBundle</code> object for the given bundle and locale.
-	 * 		If <code>null</code> is passed for the locale parameter, the default locale is used.
+	 * @return A <code>ResourceBundle</code> object for the given bundle and locale,
+	 * or <code>null</code> is returned if no ResourceBundle object can
+	 * be loaded.
 	 */
 	public ResourceBundle getLocalization(Bundle bundle, String locale);
 }
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
index 3ebfe71..baf06cd 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
@@ -86,7 +86,7 @@ import org.eclipse.osgi.framework.util.SecureAction;
 public final class StorageManager {
 	private static final int FILETYPE_STANDARD = 0;
 	private static final int FILETYPE_RELIABLEFILE = 1;
-	private static final SecureAction secure = (SecureAction) AccessController.doPrivileged(SecureAction.createSecureAction());
+	private static final SecureAction secure = AccessController.doPrivileged(SecureAction.createSecureAction());
 	private static final boolean tempCleanup = Boolean.valueOf(secure.getProperty("osgi.embedded.cleanTempFiles")).booleanValue(); //$NON-NLS-1$
 	private static final boolean openCleanup = Boolean.valueOf(secure.getProperty("osgi.embedded.cleanupOnOpen")).booleanValue(); //$NON-NLS-1$
 	private static final String MANAGER_FOLDER = ".manager"; //$NON-NLS-1$
@@ -320,7 +320,8 @@ public final class StorageManager {
 	public String[] getManagedFiles() {
 		if (!open)
 			return null;
-		Set set = table.keySet();
+		Set<Object> set = table.keySet();
+		@SuppressWarnings("cast")
 		String[] keys = (String[]) set.toArray(new String[set.size()]);
 		String[] result = new String[keys.length];
 		for (int i = 0; i < keys.length; i++)
@@ -494,7 +495,7 @@ public final class StorageManager {
 			}
 		}
 		tableStamp = stamp;
-		for (Enumeration e = diskTable.keys(); e.hasMoreElements();) {
+		for (Enumeration<Object> e = diskTable.keys(); e.hasMoreElements();) {
 			String file = (String) e.nextElement();
 			String value = diskTable.getProperty(file);
 			if (value != null) {
@@ -531,7 +532,7 @@ public final class StorageManager {
 		updateTable();
 
 		Properties props = new Properties();
-		for (Enumeration e = table.keys(); e.hasMoreElements();) {
+		for (Enumeration<Object> e = table.keys(); e.hasMoreElements();) {
 			String file = (String) e.nextElement();
 			Entry entry = (Entry) table.get(file);
 			String value;
@@ -610,9 +611,9 @@ public final class StorageManager {
 
 			//If we are here it is because we are the last instance running. After locking the table and getting its latest content, remove all the backup files and change the table
 			updateTable();
-			Collection managedFiles = table.entrySet();
-			for (Iterator iter = managedFiles.iterator(); iter.hasNext();) {
-				Map.Entry fileEntry = (Map.Entry) iter.next();
+			Collection<Map.Entry<Object, Object>> managedFiles = table.entrySet();
+			for (Iterator<Map.Entry<Object, Object>> iter = managedFiles.iterator(); iter.hasNext();) {
+				Map.Entry<Object, Object> fileEntry = iter.next();
 				String fileName = (String) fileEntry.getKey();
 				Entry info = (Entry) fileEntry.getValue();
 				if (info.getFileType() == FILETYPE_RELIABLEFILE) {
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java
index 17e0c48..f19cbd9 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java
@@ -86,28 +86,29 @@ public class ManifestElement {
 	/**
 	 * The value of the manifest element.
 	 */
-	protected String value;
+	private final String mainValue;
 
 	/**
 	 * The value components of the manifest element.
 	 */
-	protected String[] valueComponents;
+	private final String[] valueComponents;
 
 	/**
 	 * The table of attributes for the manifest element.
 	 */
-	protected Hashtable attributes;
+	private Hashtable<String, Object> attributes;
 
 	/**
 	 * The table of directives for the manifest element.
 	 */
-	protected Hashtable directives;
+	private Hashtable<String, Object> directives;
 
 	/**
 	 * Constructs an empty manifest element with no value or attributes.
 	 */
-	protected ManifestElement() {
-		super();
+	private ManifestElement(String value, String[] valueComponents) {
+		this.mainValue = value;
+		this.valueComponents = valueComponents;
 	}
 
 	/**
@@ -126,7 +127,7 @@ public class ManifestElement {
 	 * @return the value of the manifest element.
 	 */
 	public String getValue() {
-		return value;
+		return mainValue;
 	}
 
 	/**
@@ -191,7 +192,7 @@ public class ManifestElement {
 	 * 
 	 * @return the enumeration of attribute keys or null if none exist.
 	 */
-	public Enumeration getKeys() {
+	public Enumeration<String> getKeys() {
 		return getTableKeys(attributes);
 	}
 
@@ -201,7 +202,7 @@ public class ManifestElement {
 	 * @param key the key of the attribute
 	 * @param value the value of the attribute
 	 */
-	protected void addAttribute(String key, String value) {
+	private void addAttribute(String key, String value) {
 		attributes = addTableValue(attributes, key, value);
 	}
 
@@ -244,7 +245,7 @@ public class ManifestElement {
 	 * 
 	 * @return the enumeration of directive keys or <code>null</code>
 	 */
-	public Enumeration getDirectiveKeys() {
+	public Enumeration<String> getDirectiveKeys() {
 		return getTableKeys(directives);
 	}
 
@@ -254,14 +255,14 @@ public class ManifestElement {
 	 * @param key the key of the attribute
 	 * @param value the value of the attribute
 	 */
-	protected void addDirective(String key, String value) {
+	private void addDirective(String key, String value) {
 		directives = addTableValue(directives, key, value);
 	}
 
 	/*
 	 * Return the last value associated with the given key in the specified table.
 	 */
-	private String getTableValue(Hashtable table, String key) {
+	private String getTableValue(Hashtable<String, Object> table, String key) {
 		if (table == null)
 			return null;
 		Object result = table.get(key);
@@ -270,15 +271,16 @@ public class ManifestElement {
 		if (result instanceof String)
 			return (String) result;
 
-		ArrayList valueList = (ArrayList) result;
+		@SuppressWarnings("unchecked")
+		List<String> valueList = (List<String>) result;
 		//return the last value
-		return (String) valueList.get(valueList.size() - 1);
+		return valueList.get(valueList.size() - 1);
 	}
 
 	/*
 	 * Return the values associated with the given key in the specified table.
 	 */
-	private String[] getTableValues(Hashtable table, String key) {
+	private String[] getTableValues(Hashtable<String, Object> table, String key) {
 		if (table == null)
 			return null;
 		Object result = table.get(key);
@@ -286,14 +288,15 @@ public class ManifestElement {
 			return null;
 		if (result instanceof String)
 			return new String[] {(String) result};
-		ArrayList valueList = (ArrayList) result;
-		return (String[]) valueList.toArray(new String[valueList.size()]);
+		@SuppressWarnings("unchecked")
+		List<String> valueList = (List<String>) result;
+		return valueList.toArray(new String[valueList.size()]);
 	}
 
 	/*
 	 * Return an enumeration of table keys for the specified table. 
 	 */
-	private Enumeration getTableKeys(Hashtable table) {
+	private Enumeration<String> getTableKeys(Hashtable<String, Object> table) {
 		if (table == null)
 			return null;
 		return table.keys();
@@ -304,19 +307,20 @@ public class ManifestElement {
 	 * for this key, then create an array list from the current value (if necessary) and
 	 * append the new value to the end of the list.
 	 */
-	private Hashtable addTableValue(Hashtable table, String key, String value) {
+	@SuppressWarnings("unchecked")
+	private Hashtable<String, Object> addTableValue(Hashtable<String, Object> table, String key, String value) {
 		if (table == null) {
-			table = new Hashtable(7);
+			table = new Hashtable<String, Object>(7);
 		}
 		Object curValue = table.get(key);
 		if (curValue != null) {
-			ArrayList newList;
+			List<String> newList;
 			// create a list to contain multiple values
-			if (curValue instanceof ArrayList) {
-				newList = (ArrayList) curValue;
+			if (curValue instanceof List) {
+				newList = (List<String>) curValue;
 			} else {
-				newList = new ArrayList(5);
-				newList.add(curValue);
+				newList = new ArrayList<String>(5);
+				newList.add((String) curValue);
 			}
 			newList.add(value);
 			table.put(key, newList);
@@ -341,17 +345,17 @@ public class ManifestElement {
 	public static ManifestElement[] parseHeader(String header, String value) throws BundleException {
 		if (value == null)
 			return (null);
-		ArrayList headerElements = new ArrayList(10);
+		List<ManifestElement> headerElements = new ArrayList<ManifestElement>(10);
 		Tokenizer tokenizer = new Tokenizer(value);
 		parseloop: while (true) {
 			String next = tokenizer.getString(";,"); //$NON-NLS-1$
 			if (next == null)
 				throw new BundleException(NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, header, value), BundleException.MANIFEST_ERROR);
-			ArrayList headerValues = new ArrayList();
+			List<String> headerValues = new ArrayList<String>();
 			StringBuffer headerValue = new StringBuffer(next);
 			headerValues.add(next);
 
-			if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+			if (Debug.DEBUG_MANIFEST)
 				Debug.print("parseHeader: " + next); //$NON-NLS-1$
 			boolean directive = false;
 			char c = tokenizer.getChar();
@@ -375,14 +379,12 @@ public class ManifestElement {
 				if (c == ';' || c == ',' || c == '\0') /* more */{
 					headerValues.add(next);
 					headerValue.append(";").append(next); //$NON-NLS-1$
-					if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+					if (Debug.DEBUG_MANIFEST)
 						Debug.print(";" + next); //$NON-NLS-1$
 				}
 			}
 			// found the header value create a manifestElement for it.
-			ManifestElement manifestElement = new ManifestElement();
-			manifestElement.value = headerValue.toString();
-			manifestElement.valueComponents = (String[]) headerValues.toArray(new String[headerValues.size()]);
+			ManifestElement manifestElement = new ManifestElement(headerValue.toString(), headerValues.toArray(new String[headerValues.size()]));
 
 			// now add any attributes/directives for the manifestElement.
 			while (c == '=' || c == ':') {
@@ -397,11 +399,21 @@ public class ManifestElement {
 					} else
 						directive = true;
 				}
-				String val = tokenizer.getString(";,"); //$NON-NLS-1$
+				// determine if the attribute is the form attr:List<type>
+				String preserveEscapes = null;
+				if (!directive && next.indexOf("List") > 0) { //$NON-NLS-1$
+					Tokenizer listTokenizer = new Tokenizer(next);
+					String attrKey = listTokenizer.getToken(":"); //$NON-NLS-1$
+					if (attrKey != null && listTokenizer.getChar() == ':' && "List".equals(listTokenizer.getToken("<"))) { //$NON-NLS-1$//$NON-NLS-2$
+						// we assume we must preserve escapes for , and "
+						preserveEscapes = "\\,"; //$NON-NLS-1$
+					}
+				}
+				String val = tokenizer.getString(";,", preserveEscapes); //$NON-NLS-1$
 				if (val == null)
 					throw new BundleException(NLS.bind(Msg.MANIFEST_INVALID_HEADER_EXCEPTION, header, value), BundleException.MANIFEST_ERROR);
 
-				if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+				if (Debug.DEBUG_MANIFEST)
 					Debug.print(";" + next + "=" + val); //$NON-NLS-1$ //$NON-NLS-2$
 				try {
 					if (directive)
@@ -421,7 +433,7 @@ public class ManifestElement {
 				}
 			}
 			headerElements.add(manifestElement);
-			if (Debug.DEBUG && Debug.DEBUG_MANIFEST)
+			if (Debug.DEBUG_MANIFEST)
 				Debug.println(""); //$NON-NLS-1$
 			if (c == ',') /* another manifest element */
 				continue parseloop;
@@ -433,7 +445,7 @@ public class ManifestElement {
 		if (size == 0)
 			return (null);
 
-		ManifestElement[] result = (ManifestElement[]) headerElements.toArray(new ManifestElement[size]);
+		ManifestElement[] result = headerElements.toArray(new ManifestElement[size]);
 		return (result);
 	}
 
@@ -461,14 +473,14 @@ public class ManifestElement {
 	public static String[] getArrayFromList(String stringList, String separator) {
 		if (stringList == null || stringList.trim().length() == 0)
 			return new String[0];
-		ArrayList list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		StringTokenizer tokens = new StringTokenizer(stringList, separator);
 		while (tokens.hasMoreTokens()) {
 			String token = tokens.nextToken().trim();
 			if (token.length() != 0)
 				list.add(token);
 		}
-		return (String[]) list.toArray(new String[list.size()]);
+		return list.toArray(new String[list.size()]);
 	}
 
 	/**
@@ -486,9 +498,9 @@ public class ManifestElement {
 	 * @throws IOException if an error occurs while reading the manifest
 	 * @return the map with the header/value pairs from the bundle manifest
 	 */
-	public static Map parseBundleManifest(InputStream manifest, Map headers) throws IOException, BundleException {
+	public static Map<String, String> parseBundleManifest(InputStream manifest, Map<String, String> headers) throws IOException, BundleException {
 		if (headers == null)
-			headers = new HashMap();
+			headers = new HashMap<String, String>();
 		BufferedReader br;
 		try {
 			br = new BufferedReader(new InputStreamReader(manifest, "UTF8")); //$NON-NLS-1$
@@ -552,20 +564,20 @@ public class ManifestElement {
 	}
 
 	public String toString() {
-		Enumeration attrKeys = getKeys();
-		Enumeration directiveKeys = getDirectiveKeys();
+		Enumeration<String> attrKeys = getKeys();
+		Enumeration<String> directiveKeys = getDirectiveKeys();
 		if (attrKeys == null && directiveKeys == null)
-			return value;
-		StringBuffer result = new StringBuffer(value);
+			return mainValue;
+		StringBuffer result = new StringBuffer(mainValue);
 		if (attrKeys != null) {
 			while (attrKeys.hasMoreElements()) {
-				String key = (String) attrKeys.nextElement();
+				String key = attrKeys.nextElement();
 				addValues(false, key, getAttributes(key), result);
 			}
 		}
 		if (directiveKeys != null) {
 			while (directiveKeys.hasMoreElements()) {
-				String key = (String) directiveKeys.nextElement();
+				String key = directiveKeys.nextElement();
 				addValues(true, key, getDirectives(key), result);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java
index 058e4a1..c7776d2 100644
--- a/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java
+++ b/eclipse/plugins/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java
@@ -117,19 +117,32 @@ public abstract class NLS {
 	}
 
 	/**
-	 * Initialize the given class with the values from the specified message bundle.
+	 * Initialize the given class with the values from the message properties specified by the
+	 * base name.  The base name specifies a fully qualified base name to a message properties file,
+	 * including the package where the message properties file is located.  The class loader of the 
+	 * specified class will be used to load the message properties resources.
+	 * <p>
+	 * For example, if the locale is set to en_US and <code>org.eclipse.example.nls.messages</code>
+	 * is used as the base name then the following resources will be searched using the class
+	 * loader of the specified class:
+	 * <pre>
+	 *   org/eclipse/example/nls/messages_en_US.properties
+	 *   org/eclipse/example/nls/messages_en.properties
+	 *   org/eclipse/example/nls/messages.properties
+	 * </pre>
+	 * </p>
 	 * 
-	 * @param bundleName fully qualified path of the class name
+	 * @param baseName the base name of a fully qualified message properties file.
 	 * @param clazz the class where the constants will exist
 	 */
-	public static void initializeMessages(final String bundleName, final Class clazz) {
+	public static void initializeMessages(final String baseName, final Class<?> clazz) {
 		if (System.getSecurityManager() == null) {
-			load(bundleName, clazz);
+			load(baseName, clazz);
 			return;
 		}
-		AccessController.doPrivileged(new PrivilegedAction() {
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
 			public Object run() {
-				load(bundleName, clazz);
+				load(baseName, clazz);
 				return null;
 			}
 		});
@@ -231,7 +244,7 @@ public abstract class NLS {
 		if (nlSuffixes == null) {
 			//build list of suffixes for loading resource bundles
 			String nl = Locale.getDefault().toString();
-			ArrayList result = new ArrayList(4);
+			List<String> result = new ArrayList<String>(4);
 			int lastSeparator;
 			while (true) {
 				result.add('_' + nl + EXTENSION);
@@ -242,7 +255,7 @@ public abstract class NLS {
 			}
 			//add the empty suffix last (most general)
 			result.add(EXTENSION);
-			nlSuffixes = (String[]) result.toArray(new String[result.size()]);
+			nlSuffixes = result.toArray(new String[result.size()]);
 		}
 		root = root.replace('.', '/');
 		String[] variants = new String[nlSuffixes.length];
@@ -251,7 +264,7 @@ public abstract class NLS {
 		return variants;
 	}
 
-	private static void computeMissingMessages(String bundleName, Class clazz, Map fieldMap, Field[] fieldArray, boolean isAccessible) {
+	private static void computeMissingMessages(String bundleName, Class<?> clazz, Map<Object, Object> fieldMap, Field[] fieldArray, boolean isAccessible) {
 		// iterate over the fields in the class to make sure that there aren't any empty ones
 		final int MOD_EXPECTED = Modifier.PUBLIC | Modifier.STATIC;
 		final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
@@ -284,7 +297,7 @@ public abstract class NLS {
 	/*
 	 * Load the given resource bundle using the specified class loader.
 	 */
-	static void load(final String bundleName, Class clazz) {
+	static void load(final String bundleName, Class<?> clazz) {
 		long start = System.currentTimeMillis();
 		final Field[] fieldArray = clazz.getDeclaredFields();
 		ClassLoader loader = clazz.getClassLoader();
@@ -293,7 +306,7 @@ public abstract class NLS {
 
 		//build a map of field names to Field objects
 		final int len = fieldArray.length;
-		Map fields = new HashMap(len * 2);
+		Map<Object, Object> fields = new HashMap<Object, Object>(len * 2);
 		for (int i = 0; i < len; i++)
 			fields.put(fieldArray[i].getName(), fieldArray[i]);
 
@@ -374,10 +387,10 @@ public abstract class NLS {
 		private static final long serialVersionUID = 1L;
 
 		private final String bundleName;
-		private final Map fields;
+		private final Map<Object, Object> fields;
 		private final boolean isAccessible;
 
-		public MessagesProperties(Map fieldMap, String bundleName, boolean isAccessible) {
+		public MessagesProperties(Map<Object, Object> fieldMap, String bundleName, boolean isAccessible) {
 			super();
 			this.fields = fieldMap;
 			this.bundleName = bundleName;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10/META-INF/MANIFEST.MF
index 6b497eb..f3b7126 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation10/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.cdcfoundation10
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentcdcfoundation10
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11/META-INF/MANIFEST.MF
index d816336..2c6fcdb 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.cdcfoundation11/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.cdcfoundation11
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentcdcfoundation11
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se12/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se12/META-INF/MANIFEST.MF
index 845661b..6cd5afc 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se12/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se12/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se12
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentj2se12
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se13/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se13/META-INF/MANIFEST.MF
index fb94a9b..1758ad0 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se13/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se13/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se13
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentj2se13
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se14/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se14/META-INF/MANIFEST.MF
index 877141e..f667fbc 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se14/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se14/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se14
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentj2se14
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se15/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se15/META-INF/MANIFEST.MF
index c195340..9012701 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se15/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.j2se15/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se15
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentj2se15
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.javase16/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.javase16/META-INF/MANIFEST.MF
index 90bc313..cc7195b 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.javase16/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.javase16/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.javase16
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentjavase16
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.jre11/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.jre11/META-INF/MANIFEST.MF
index 48ae7dd..aee06f6 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.jre11/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.jre11/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.jre11
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentjre11
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10/META-INF/MANIFEST.MF
index dc15733..7fdfbbe 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum10/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.osgiminimum10
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentosgiminimum10
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11/META-INF/MANIFEST.MF
index 095ef72..be83b05 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum11/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.osgiminimum11
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentosgiminimum11
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF
index d05c067..bf4eaf8 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.osgiminimum12
-Bundle-Version: 1.0.3.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.201"
+Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Bundle-Localization: fragmentosgiminimum12
 Eclipse-BundleShape: dir
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..9efd017
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:44:07 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..993fd1c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,56 @@
+#Wed Jan 19 21:53:51 EST 2011
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.update_ibm_copyright_to_current_year=true
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF
index d77af7b..dfa1ece 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ui; singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Localization: plugin
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/icons/full/ovr16/warning_ovr.gif b/eclipse/plugins/org.eclipse.pde.api.tools.ui/icons/full/ovr16/warning_ovr.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.properties b/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.properties
index d9c3411..f9b3a3d 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@ ApiErrorsWarningsPage.name = API Errors/Warnings
 ApiErrorsWarningsPage.keywords = API errors warnings
 ApiFiltersPage.name = API Problem Filters
 ApiFiltersPage.keywords = API SPI profile settings search filter error problem
-ApiToolingSetup.name = API &Tooling Setup...
+ApiToolingSetup.name = API &Tools Setup...
 ApiToolingSetup.tooltip = Configure projects for API usage and compatibility checks
 ApiProblemFilters.name = Remove &API Problem Filters...
 ApiProblemFilters.tooltip = Remove API problem filters for this project
@@ -27,13 +27,15 @@ PdeTools.name = PDE To&ols
 MarkerCategory.name = API Problems
 ApiToolsJavadocProposals.name = API Tools Javadoc Proposals
 MarkerGroupingEntryLabel=API Usage and Compatibility
-ApiToolsProposalCategory.name = PDE API Tools Proposals
+ApiToolsProposalCategory.name = API Tools Proposals
 APICompare.name=API Baseline...
-Apitoolingview.name=API Tooling
-Apitoolingview.category.name=API Tooling
+Apitoolingview.name=API Tools
+Apitoolingview.category.name=API Tools
 FilterDeleteParticipant.name = API Problem Filter Delete Participant
 FilterRenameParticipant.name = API Problem Filter Rename Participant
 FilterMoveParticipant.name = API Problem Filter Move Participant
 CompareWithMenu.label=Compare With
 LaunchConfigurationType.name=API Use Report
-LaunchConfigurationTabGroup.name=Creates an API use scan report
\ No newline at end of file
+LaunchConfigurationTabGroup.name=Creates an API use scan report
+ApiUseScanPreferencePage.name=API Use Scans
+apiUseScanKeyword.label = API use scan external dependencies search build 
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.xml b/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.xml
index 4b39e46..00887e9 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/plugin.xml
@@ -53,6 +53,15 @@
                id="org.eclipse.pde.api.tools.ui.apitools.errorwarnings.prefpage.keywords">
          </keywordReference>
       </page>
+      <page
+            category="org.eclipse.pde.ui.MainPreferencePage"
+            class="org.eclipse.pde.api.tools.ui.internal.preferences.ApiUseScanPreferencePage"
+            id="org.eclipse.pde.api.tools.ui.apiusescan.prefpage"
+            name="%ApiUseScanPreferencePage.name">
+         <keywordReference
+               id="org.eclipse.pde.api.tools.ui.use.scan.pref.page.keyword">
+         </keywordReference>
+      </page>
    </extension>
    <extension
          point="org.eclipse.ui.popupMenus">
@@ -207,6 +216,10 @@
             id="org.eclipse.pde.api.tools.ui.apitools.prefpage"
             label="%ApiErrorsWarningsPage.keywords">
       </keyword>
+      <keyword
+            id="org.eclipse.pde.api.tools.ui.use.scan.pref.page.keyword"
+            label="%apiUseScanKeyword.label">
+      </keyword>
    </extension>
    <extension
          point="org.eclipse.ui.ide.markerSupport">
@@ -239,6 +252,9 @@
          <markerTypeReference
                id="org.eclipse.pde.api.tools.fatal_problem">
          </markerTypeReference>
+         <markerTypeReference
+               id="org.eclipse.pde.api.tools.marker.apiusescan">
+         </markerTypeReference>
       </markerTypeCategory>
    </extension>
     <extension
@@ -276,6 +292,10 @@
              defaultGroupingEntry="org.eclipse.pde.api.tools.jdt_category"
              markerType="org.eclipse.pde.api.tools.fatal_problem">
        </markerAttributeGrouping>
+       <markerAttributeGrouping
+             defaultGroupingEntry="org.eclipse.pde.api.tools.jdt_category"
+             markerType="org.eclipse.pde.api.tools.marker.apiusescan">
+       </markerAttributeGrouping>
     </extension>
    <extension
          point="org.eclipse.ui.ide.markerResolution">
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ActionFilterAdapterFactory.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ActionFilterAdapterFactory.java
index 6e0e123..4da8eb5 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ActionFilterAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ActionFilterAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,7 @@ import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.ui.IActionFilter;
 
 /**
- * PDE API Tools UI adapter factory
+ * API Tools UI adapter factory
  */
 class ActionFilterAdapterFactory implements IAdapterFactory {
 
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiUIPlugin.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiUIPlugin.java
index 322e85f..6767c0f 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiUIPlugin.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiUIPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,10 +38,9 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 
 /**
- * API tooling UI plug-in class.
+ * API Tools UI plug-in class.
  * 
  * @since 1.0.0
  */
@@ -76,6 +75,7 @@ public class ApiUIPlugin extends AbstractUIPlugin {
 	private final static String OVR = ICONS_PATH + "ovr16/"; //basic colors - size 7x8 //$NON-NLS-1$
 	/**
 	 * The id of the plugin
+	 * Value is "org.eclipse.pde.api.tools.ui"
 	 */
 	public static final String PLUGIN_ID = "org.eclipse.pde.api.tools.ui"; //$NON-NLS-1$
 	private final static String WIZBAN = ICONS_PATH + "wizban/"; //basic colors - size 16x16 //$NON-NLS-1$
@@ -101,7 +101,7 @@ public class ApiUIPlugin extends AbstractUIPlugin {
 	}
 	
 	/**
-	 * Returns the singleton API UI Tooling plug-in.
+	 * Returns the singleton API Tools UI plug-in.
 	 * 
 	 * @return plug-in
 	 */
@@ -229,11 +229,6 @@ public class ApiUIPlugin extends AbstractUIPlugin {
 		return new Status(IStatus.ERROR, getPluginIdentifier(), INTERNAL_ERROR, message, exception);
 	}
 	
-	/**
-	 * This bundle's OSGi context
-	 */
-	private BundleContext fBundleContext = null;
-	
 	private ISessionListener sessionListener = new ISessionListener() {
 		public void sessionAdded(ISession addedSession) {
 			getWorkbench().getDisplay().asyncExec(new Runnable() {
@@ -256,19 +251,6 @@ public class ApiUIPlugin extends AbstractUIPlugin {
 	}
 	
 	/**
-	 * Returns a service with the specified name or <code>null</code> if none.
-	 * 
-	 * @param serviceName name of service
-	 * @return service object or <code>null</code> if none
-	 */
-	public Object acquireService(String serviceName) {
-		ServiceReference reference = fBundleContext.getServiceReference(serviceName);
-		if (reference == null)
-			return null;
-		return fBundleContext.getService(reference);
-	}
-	
-	/**
 	 * Returns dialog settings with the given name, creating a new section
 	 * if one does not exist.
 	 * 
@@ -345,7 +327,6 @@ public class ApiUIPlugin extends AbstractUIPlugin {
 	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
 	 */
 	public void start(BundleContext context) throws Exception {
-		fBundleContext = context;
 		ApiPlugin.getDefault().getSessionManager().addSessionListener(this.sessionListener);
 		fActionFilterAdapterFactory= new ActionFilterAdapterFactory();
 		Platform.getAdapterManager().registerAdapters(fActionFilterAdapterFactory, IJavaElement.class);
@@ -362,7 +343,6 @@ public class ApiUIPlugin extends AbstractUIPlugin {
 			image.dispose();
 		}
 		fCompositeImages.clear();
-		fBundleContext = null;
 		ApiPlugin.getDefault().getSessionManager().removeSessionListener(this.sessionListener);
 		Platform.getAdapterManager().unregisterAdapters(fActionFilterAdapterFactory, IJavaElement.class);
 		super.stop(context);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsConstants.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsConstants.java
index 6d25377..b4792b9 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ public interface IApiToolsConstants {
 	 */
 	public static final String ID_API_TOOLS_UI_PLUGIN = "org.eclipse.pde.api.tools.ui"; //$NON-NLS-1$
 	/**
-	 * Id for the Api baselines preference page.
+	 * Id for the API baselines preference page.
 	 * <br>
 	 * Value is: <code>org.eclipse.pde.api.tools.ui.apiprofiles.prefpage</code>
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsHelpContextIds.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsHelpContextIds.java
index fd20819..11a1b16 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsHelpContextIds.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/IApiToolsHelpContextIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,10 +87,17 @@ public interface IApiToolsHelpContextIds {
 	 * Constant representing the help id for the {@link PatternSelectionPage}
 	 */
 	public static final String APITOOLS_PATTERN_SELECTION_WIZARD_PAGE = PREFIX + "apitools_pattern_selection_wizard_page"; //$NON-NLS-1$
-	
-	//LAUNCH CONFIGS
-	
+	/**
+	 * Constant representing the help id for the {@link ApiUseScanPreferencePage}}.
+	 */
+	public static final String APIUSESCANS_PREF_PAGE = PREFIX + "apiusescans_preference_page"; //$NON-NLS-1$
+	/**
+	 * Constant representing the help id for the Pattern tab on the use scan reporting tool config
+	 */
 	public static final String API_USE_PATTERN_TAB = PREFIX + "api_use_pattern_tab"; //$NON-NLS-1$
+	/**
+	 * Constant representing the help id for the Use Scan tab on the use scan reporting tool config
+	 */
 	public static final String API_USE_SCAN_TAB = PREFIX + "api_use_main_tab"; //$NON-NLS-1$
 	
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/StringMatcher.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/StringMatcher.java
deleted file mode 100644
index 2538b75..0000000
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/StringMatcher.java
+++ /dev/null
@@ -1,384 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.api.tools.ui.internal;
-
-import java.util.Vector;
-
-/**
- * A string pattern matcher. Supports '*' and '?' wildcards.
- */
-public class StringMatcher {
-	protected String fPattern;
-	protected int fLength; // pattern length
-	protected boolean fIgnoreWildCards;
-	protected boolean fIgnoreCase;
-	protected boolean fHasLeadingStar;
-	protected boolean fHasTrailingStar;
-	protected String fSegments[]; //the given pattern is split into * separated segments
-
-	/* boundary value beyond which we don't need to search in the text */
-	protected int fBound= 0;
-
-
-	protected static final char fSingleWildCard= '\u0000';
-
-	public static class Position {
-		int start; //inclusive
-		int end; //exclusive
-		public Position(int start, int end) {
-			this.start= start;
-			this.end= end;
-		}
-		public int getStart() {
-			return start;
-		}
-		public int getEnd() {
-			return end;
-		}
-	}
-	/**
-	 * StringMatcher constructor takes in a String object that is a simple
-	 * pattern. The pattern may contain '*' for 0 and many characters and
-	 * '?' for exactly one character.
-	 *
-	 * Literal '*' and '?' characters must be escaped in the pattern
-	 * e.g., "\*" means literal "*", etc.
-	 *
-	 * Escaping any other character (including the escape character itself),
-	 * just results in that character in the pattern.
-	 * e.g., "\a" means "a" and "\\" means "\"
-	 *
-	 * If invoking the StringMatcher with string literals in Java, don't forget
-	 * escape characters are represented by "\\".
-	 *
-	 * @param pattern the pattern to match text against
-	 * @param ignoreCase if true, case is ignored
-	 * @param ignoreWildCards if true, wild cards and their escape sequences are ignored
-	 * 		  (everything is taken literally).
-	 */
-	public StringMatcher(String pattern, boolean ignoreCase, boolean ignoreWildCards) {
-		if (pattern == null)
-			throw new IllegalArgumentException();
-		fIgnoreCase= ignoreCase;
-		fIgnoreWildCards= ignoreWildCards;
-		fPattern= pattern;
-		fLength= pattern.length();
-
-		if (fIgnoreWildCards) {
-			parseNoWildCards();
-		} else {
-			parseWildCards();
-		}
-	}
-	/**
-	 * Find the first occurrence of the pattern between <code>start</code)(inclusive)
-	 * and <code>end</code>(exclusive).
-	 * @param text the String object to search in
-	 * @param start the starting index of the search range, inclusive
-	 * @param end the ending index of the search range, exclusive
-	 * @return an <code>StringMatcher.Position</code> object that keeps the starting
-	 * (inclusive) and ending positions (exclusive) of the first occurrence of the
-	 * pattern in the specified range of the text; return null if not found or subtext
-	 * is empty (start==end). A pair of zeros is returned if pattern is empty string
-	 * Note that for pattern like "*abc*" with leading and trailing stars, position of "abc"
-	 * is returned. For a pattern like"*??*" in text "abcdf", (1,3) is returned
-	 */
-	public StringMatcher.Position find(String text, int start, int end) {
-		if (text == null)
-			throw new IllegalArgumentException();
-
-		int tlen= text.length();
-		if (start < 0)
-			start= 0;
-		if (end > tlen)
-			end= tlen;
-		if (end < 0 ||start >= end )
-			return null;
-		if (fLength == 0)
-			return new Position(start, start);
-		if (fIgnoreWildCards) {
-			int x= posIn(text, start, end);
-			if (x < 0)
-				return null;
-			return new Position(x, x+fLength);
-		}
-
-		int segCount= fSegments.length;
-		if (segCount == 0)//pattern contains only '*'(s)
-			return new Position (start, end);
-
-		int curPos= start;
-		int matchStart= -1;
-		int i;
-		for (i= 0; i < segCount && curPos < end; ++i) {
-			String current= fSegments[i];
-			int nextMatch= regExpPosIn(text, curPos, end, current);
-			if (nextMatch < 0 )
-				return null;
-			if(i == 0)
-				matchStart= nextMatch;
-			curPos= nextMatch + current.length();
-		}
-		if (i < segCount)
-			return null;
-		return new Position(matchStart, curPos);
-	}
-	/**
-	 * match the given <code>text</code> with the pattern
-	 * @return true if matched eitherwise false
-	 * @param text a String object
-	 */
-	public boolean match(String text) {
-		return match(text, 0, text.length());
-	}
-	/**
-	 * Given the starting (inclusive) and the ending (exclusive) positions in the
-	 * <code>text</code>, determine if the given substring matches with aPattern
-	 * @return true if the specified portion of the text matches the pattern
-	 * @param text a String object that contains the substring to match
-	 * @param start marks the starting position (inclusive) of the substring
-	 * @param end marks the ending index (exclusive) of the substring
-	 */
-	public boolean match(String text, int start, int end) {
-		if (null == text)
-			throw new IllegalArgumentException();
-
-		if (start > end)
-			return false;
-
-		if (fIgnoreWildCards)
-			return (end - start == fLength) && fPattern.regionMatches(fIgnoreCase, 0, text, start, fLength);
-		int segCount= fSegments.length;
-		if (segCount == 0 && (fHasLeadingStar || fHasTrailingStar))  // pattern contains only '*'(s)
-			return true;
-		if (start == end)
-			return fLength == 0;
-		if (fLength == 0)
-			return start == end;
-
-		int tlen= text.length();
-		if (start < 0)
-			start= 0;
-		if (end > tlen)
-			end= tlen;
-
-		int tCurPos= start;
-		int bound= end - fBound;
-		if ( bound < 0)
-			return false;
-		int i=0;
-		String current= fSegments[i];
-		int segLength= current.length();
-
-		/* process first segment */
-		if (!fHasLeadingStar){
-			if(!regExpRegionMatches(text, start, current, 0, segLength)) {
-				return false;
-			} else {
-				++i;
-				tCurPos= tCurPos + segLength;
-			}
-		}
-		if ((fSegments.length == 1) && (!fHasLeadingStar) && (!fHasTrailingStar)) {
-			// only one segment to match, no wildcards specified
-			return tCurPos == end;
-		}
-		/* process middle segments */
-		while (i < segCount) {
-			current= fSegments[i];
-			int currentMatch;
-			int k= current.indexOf(fSingleWildCard);
-			if (k < 0) {
-				currentMatch= textPosIn(text, tCurPos, end, current);
-				if (currentMatch < 0)
-					return false;
-			} else {
-				currentMatch= regExpPosIn(text, tCurPos, end, current);
-				if (currentMatch < 0)
-					return false;
-			}
-			tCurPos= currentMatch + current.length();
-			i++;
-		}
-
-		/* process final segment */
-		if (!fHasTrailingStar && tCurPos != end) {
-			int clen= current.length();
-			return regExpRegionMatches(text, end - clen, current, 0, clen);
-		}
-		return i == segCount ;
-	}
-
-	/**
-	 * This method parses the given pattern into segments seperated by wildcard '*' characters.
-	 * Since wildcards are not being used in this case, the pattern consists of a single segment.
-	 */
-	private void parseNoWildCards() {
-		fSegments= new String[1];
-		fSegments[0]= fPattern;
-		fBound= fLength;
-	}
-	/**
-	 * Parses the given pattern into segments seperated by wildcard '*' characters.
-	 */
-	private void parseWildCards() {
-		if(fPattern.startsWith("*"))//$NON-NLS-1$
-			fHasLeadingStar= true;
-		if(fPattern.endsWith("*")) {//$NON-NLS-1$
-			/* make sure it's not an escaped wildcard */
-			if (fLength > 1 && fPattern.charAt(fLength - 2) != '\\') {
-				fHasTrailingStar= true;
-			}
-		}
-
-		Vector temp= new Vector();
-
-		int pos= 0;
-		StringBuffer buf= new StringBuffer();
-		while (pos < fLength) {
-			char c= fPattern.charAt(pos++);
-			switch (c) {
-				case '\\':
-					if (pos >= fLength) {
-						buf.append(c);
-					} else {
-						char next= fPattern.charAt(pos++);
-						/* if it's an escape sequence */
-						if (next == '*' || next == '?' || next == '\\') {
-							buf.append(next);
-						} else {
-							/* not an escape sequence, just insert literally */
-							buf.append(c);
-							buf.append(next);
-						}
-					}
-				break;
-				case '*':
-					if (buf.length() > 0) {
-						/* new segment */
-						temp.addElement(buf.toString());
-						fBound += buf.length();
-						buf.setLength(0);
-					}
-				break;
-				case '?':
-					/* append special character representing single match wildcard */
-					buf.append(fSingleWildCard);
-				break;
-				default:
-					buf.append(c);
-			}
-		}
-
-		/* add last buffer to segment list */
-		if (buf.length() > 0) {
-			temp.addElement(buf.toString());
-			fBound += buf.length();
-		}
-
-		fSegments= new String[temp.size()];
-		temp.copyInto(fSegments);
-	}
-	/**
-	 * @param text a string which contains no wildcard
-	 * @param start the starting index in the text for search, inclusive
-	 * @param end the stopping point of search, exclusive
-	 * @return the starting index in the text of the pattern , or -1 if not found
-	 */
-	protected int posIn(String text, int start, int end) {//no wild card in pattern
-		int max= end - fLength;
-
-		if (!fIgnoreCase) {
-			int i= text.indexOf(fPattern, start);
-			if (i == -1 || i > max)
-				return -1;
-			return i;
-		}
-
-		for (int i= start; i <= max; ++i) {
-			if (text.regionMatches(true, i, fPattern, 0, fLength))
-				return i;
-		}
-
-		return -1;
-	}
-	/**
-	 * @param text a simple regular expression that may only contain '?'(s)
-	 * @param start the starting index in the text for search, inclusive
-	 * @param end the stopping point of search, exclusive
-	 * @param p a simple regular expression that may contains '?'
-	 * @return the starting index in the text of the pattern , or -1 if not found
-	 */
-	protected int regExpPosIn(String text, int start, int end, String p) {
-		int plen= p.length();
-
-		int max= end - plen;
-		for (int i= start; i <= max; ++i) {
-			if (regExpRegionMatches(text, i, p, 0, plen))
-				return i;
-		}
-		return -1;
-	}
-
-
-	protected boolean regExpRegionMatches(String text, int tStart, String p, int pStart, int plen) {
-		while (plen-- > 0) {
-			char tchar= text.charAt(tStart++);
-			char pchar= p.charAt(pStart++);
-
-			/* process wild cards */
-			if (!fIgnoreWildCards) {
-				/* skip single wild cards */
-				if (pchar == fSingleWildCard) {
-					continue;
-				}
-			}
-			if (pchar == tchar)
-				continue;
-			if (fIgnoreCase) {
-				if (Character.toUpperCase(tchar) == Character.toUpperCase(pchar))
-					continue;
-				// comparing after converting to upper case doesn't handle all cases;
-				// also compare after converting to lower case
-				if (Character.toLowerCase(tchar) == Character.toLowerCase(pchar))
-					continue;
-			}
-			return false;
-		}
-		return true;
-	}
-	/**
-	 * @param text the string to match
-	 * @param start the starting index in the text for search, inclusive
-	 * @param end the stopping point of search, exclusive
-	 * @param p a string that has no wildcard
-	 * @return the starting index in the text of the pattern , or -1 if not found
-	 */
-	protected int textPosIn(String text, int start, int end, String p) {
-
-		int plen= p.length();
-		int max= end - plen;
-
-		if (!fIgnoreCase) {
-			int i= text.indexOf(p, start);
-			if (i == -1 || i > max)
-				return -1;
-			return i;
-		}
-
-		for (int i= start; i <= max; ++i) {
-			if (text.regionMatches(true, i, p, 0, plen))
-				return i;
-		}
-
-		return -1;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ActionMessages.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ActionMessages.java
index e79ddd3..109b6df 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ActionMessages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ActionMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,8 @@ public class ActionMessages extends NLS {
 	public static String PropertyKindKey;
 	public static String PropertyNewModifiersKey;
 	public static String PropertyOldModifiersKey;
-	public static String PropertyRestrictionsKey;
+	public static String PropertyCurrentRestrictionsKey;
+	public static String PropertyPreviousRestrictionsKey;
 	public static String PropertyTypeNameKey;
 
 	public static String MessageCategory;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/DeltaSession.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/DeltaSession.java
index c932c32..7b49361 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/DeltaSession.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/DeltaSession.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,8 @@ public class DeltaSession implements ISession {
 		private static final Object ID_KIND = "IDelta.Kind"; //$NON-NLS-1$
 		private static final Object ID_NEW_MODIFIERS = "IDelta.NewModifiers"; //$NON-NLS-1$
 		private static final Object ID_OLD_MODIFIERS = "IDelta.OldModifiers"; //$NON-NLS-1$
-		private static final Object ID_RESTRICTIONS = "IDelta.Restrictions"; //$NON-NLS-1$
+		private static final Object ID_CURRENT_RESTRICTIONS = "IDelta.CurrentRestrictions"; //$NON-NLS-1$
+		private static final Object ID_PREVIOUS_RESTRICTIONS = "IDelta.PreviousRestrictions"; //$NON-NLS-1$
 		private static final Object ID_TYPENAME = "IDelta.TypeName"; //$NON-NLS-1$
 
 		// categories
@@ -70,7 +71,8 @@ public class DeltaSession implements ISession {
 		public static final String P_KIND = ActionMessages.PropertyKindKey;
 		public static final String P_NEW_MODIFIERS = ActionMessages.PropertyNewModifiersKey;
 		public static final String P_OLD_MODIFIERS = ActionMessages.PropertyOldModifiersKey;
-		public static final String P_RESTRICTIONS = ActionMessages.PropertyRestrictionsKey;
+		public static final String P_CURRENT_RESTRICTIONS = ActionMessages.PropertyCurrentRestrictionsKey;
+		public static final String P_PREVIOUS_RESTRICTIONS = ActionMessages.PropertyPreviousRestrictionsKey;
 		public static final String P_TYPENAME = ActionMessages.PropertyTypeNameKey;
 
 		private static List Descriptors;
@@ -102,7 +104,11 @@ public class DeltaSession implements ISession {
 			propertyDescriptor.setCategory(P_INFO_CATEGORY);
 			Descriptors.add(propertyDescriptor);
 
-			propertyDescriptor = new PropertyDescriptor(ID_RESTRICTIONS, P_RESTRICTIONS);
+			propertyDescriptor = new PropertyDescriptor(ID_CURRENT_RESTRICTIONS, P_CURRENT_RESTRICTIONS);
+			propertyDescriptor.setCategory(P_INFO_CATEGORY);
+			Descriptors.add(propertyDescriptor);
+
+			propertyDescriptor = new PropertyDescriptor(ID_PREVIOUS_RESTRICTIONS, P_PREVIOUS_RESTRICTIONS);
 			propertyDescriptor.setCategory(P_INFO_CATEGORY);
 			Descriptors.add(propertyDescriptor);
 
@@ -210,18 +216,25 @@ public class DeltaSession implements ISession {
 			}
 			if (ID_OLD_MODIFIERS.equals(propKey)) {
 				return getDisplayedModifiers(delta.getOldModifiers());
-				}
-			if (ID_RESTRICTIONS.equals(propKey)) {
-				int restrictions = delta.getRestrictions();
-				StringBuffer buffer = new StringBuffer(RestrictionModifiers.getRestrictionText(restrictions));
-				buffer.append(" (0x").append(Integer.toHexString(restrictions)).append(')'); //$NON-NLS-1$
-				return String.valueOf(buffer);
+			}
+			if (ID_CURRENT_RESTRICTIONS.equals(propKey)) {
+				int restrictions = delta.getCurrentRestrictions();
+				return getDisplayRestrictions(restrictions);
+			}
+			if (ID_PREVIOUS_RESTRICTIONS.equals(propKey)) {
+				int restrictions = delta.getPreviousRestrictions();
+				return getDisplayRestrictions(restrictions);
 			}
 			if (ID_TYPENAME.equals(propKey)) {
 				return delta.getTypeName();
 			}
 			return null;
 		}
+		private Object getDisplayRestrictions(int restrictions) {
+			StringBuffer buffer = new StringBuffer(RestrictionModifiers.getRestrictionText(restrictions));
+			buffer.append(" (0x").append(Integer.toHexString(restrictions)).append(')'); //$NON-NLS-1$
+			return String.valueOf(buffer);
+		}
 		public boolean isPropertySet(Object id) {
 			return false;
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ExportDialog.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ExportDialog.java
index dd7715a..a39b202 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ExportDialog.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/ExportDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -235,7 +235,9 @@ public class ExportDialog extends Dialog {
 					}
 				}
 				String newPath = dialog.open();
-				ExportDialog.this.getText().setText(newPath);
+				if (newPath != null) {
+					ExportDialog.this.getText().setText(newPath);
+				}
 			}
 		});
 		errorMessageText = new Text(comp, SWT.READ_ONLY | SWT.WRAP);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/actionmessages.properties b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/actionmessages.properties
index 11ae231..78c0492 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/actionmessages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/actions/actionmessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2009 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-ApiToolingSetupObjectContribution_0=Set up API tooling
+ApiToolingSetupObjectContribution_0=Set up API Tools
 SelectABaseline=&Baseline:
 SetAsDefault={0} (default)
 SelectFileName=Select a report location
@@ -47,7 +47,8 @@ PropertyKeyKey=key
 PropertyKindKey=kind
 PropertyNewModifiersKey=new modifiers
 PropertyOldModifiersKey=old modifiers
-PropertyRestrictionsKey=restrictions
+PropertyCurrentRestrictionsKey=current restrictions
+PropertyPreviousRestrictionsKey=previous restrictions
 PropertyTypeNameKey=type name
 
 MessageCategory=Message
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiBaselinesConfigurationBlock.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiBaselinesConfigurationBlock.java
index 65203d3..3adbe47 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiBaselinesConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiBaselinesConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,7 @@ import org.eclipse.ui.preferences.WorkingCopyManager;
 import org.osgi.service.prefs.BackingStoreException;
 
 /**
- * This block is used to add the Api tooling profile notification settings UI
+ * This block is used to add the API Tools profile notification settings UI
  * to a parent control
  * 
  * @since 1.0.0
@@ -269,8 +269,8 @@ public class ApiBaselinesConfigurationBlock {
 	 */
 	public ApiBaselinesConfigurationBlock(IWorkbenchPreferenceContainer container) {
 		fLookupOrder = new IScopeContext[] {
-			new InstanceScope(),
-			new DefaultScope()
+			InstanceScope.INSTANCE,
+			DefaultScope.INSTANCE
 		};
 		if(container == null) {
 			fManager = new WorkingCopyManager();
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java
index 83b9421..9b71e46 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,7 +75,7 @@ import com.ibm.icu.text.MessageFormat;
 
 
 /**
- * This block is used to add the Api tooling notification settings UI
+ * This block is used to add the API Tools notification settings UI
  * to a parent control
  * 
  * @since 1.0.0
@@ -409,16 +409,25 @@ public class ApiErrorsWarningsConfigurationBlock {
 
 	private static final Key KEY_REPORT_RESOLUTION_ERRORS_API_COMPONENT = 
 		getApiToolsKey(IApiProblemTypes.REPORT_RESOLUTION_ERRORS_API_COMPONENT);
+	
+	//External Dependencies' Keys
+	private static final Key KEY_API_USE_SCAN_TYPE_PROBLEM = 
+			getApiToolsKey(IApiProblemTypes.API_USE_SCAN_TYPE_SEVERITY);
+	private static final Key KEY_API_USE_SCAN_METHOD_PROBLEM = 
+			getApiToolsKey(IApiProblemTypes.API_USE_SCAN_METHOD_SEVERITY);
+	private static final Key KEY_API_USE_SCAN_FIELD_PROBLEM = 
+			getApiToolsKey(IApiProblemTypes.API_USE_SCAN_FIELD_SEVERITY);
 	/**
 	 * @since 1.1
 	 */
 	private static final Key KEY_AUTOMATICALLY_REMOVE_PROBLEM_FILTERS = 
 		getApiToolsKey(IApiProblemTypes.AUTOMATICALLY_REMOVE_UNUSED_PROBLEM_FILTERS);
 
-	private static final int API_SCANNING_USAGE_PAGE_ID = 0;
-	private static final int COMPATIBILITY_PAGE_ID = 1;
-	private static final int VERSION_MANAGEMENT_PAGE_ID = 2;
-	private static final int API_COMPONENT_RESOLUTION_PAGE_ID = 3;
+	public static final int API_SCANNING_USAGE_PAGE_ID = 0;
+	public static final int COMPATIBILITY_PAGE_ID = 1;
+	public static final int VERSION_MANAGEMENT_PAGE_ID = 2;
+	public static final int API_COMPONENT_RESOLUTION_PAGE_ID = 3;
+	public static final int API_USE_SCANS_PAGE_ID = 4;
 
 	static Key[] fgAllApiComponentResolutionKeys = {
 		KEY_REPORT_RESOLUTION_ERRORS_API_COMPONENT,
@@ -521,6 +530,12 @@ public class ApiErrorsWarningsConfigurationBlock {
 		KEY_INCOMPATIBLE_API_COMPONENT_VERSION
 	};
 
+	static Key[] fgAllExternalDependenciesKeys = {
+		KEY_API_USE_SCAN_TYPE_PROBLEM,
+		KEY_API_USE_SCAN_METHOD_PROBLEM,
+		KEY_API_USE_SCAN_FIELD_PROBLEM
+	};
+	
 	/**
 	 * An array of all of the keys for the page
 	 */
@@ -616,7 +631,10 @@ public class ApiErrorsWarningsConfigurationBlock {
 		KEY_INCOMPATIBLE_API_COMPONENT_VERSION_INCLUDE_INCLUDE_MAJOR_WITHOUT_BREAKING_CHANGE,
 		KEY_REPORT_API_BREAKAGE_WHEN_MAJOR_VERSION_INCREMENTED,
 		KEY_REPORT_RESOLUTION_ERRORS_API_COMPONENT,
-		KEY_AUTOMATICALLY_REMOVE_PROBLEM_FILTERS
+		KEY_AUTOMATICALLY_REMOVE_PROBLEM_FILTERS,
+		KEY_API_USE_SCAN_TYPE_PROBLEM,
+		KEY_API_USE_SCAN_METHOD_PROBLEM,
+		KEY_API_USE_SCAN_FIELD_PROBLEM
 	};
 
 	/**
@@ -739,6 +757,9 @@ public class ApiErrorsWarningsConfigurationBlock {
 				case API_COMPONENT_RESOLUTION_PAGE_ID :
 					setAllTo(this.newValue, fgAllApiComponentResolutionKeys);
 					break;
+				case API_USE_SCANS_PAGE_ID:
+					setAllTo(this.newValue, fgAllExternalDependenciesKeys);
+					break;
 			}
 		}
 	}
@@ -805,6 +826,11 @@ public class ApiErrorsWarningsConfigurationBlock {
 	private Composite fParent = null;
 	
 	/**
+	 * The tab folder for the various tabs
+	 */
+	private TabFolder fTabFolder = null;
+	
+	/**
 	 * Constructor
 	 * @param project
 	 */
@@ -813,14 +839,14 @@ public class ApiErrorsWarningsConfigurationBlock {
 		if(fProject != null) {
 			fLookupOrder = new IScopeContext[] {
 				new ProjectScope(fProject),
-				new InstanceScope(),
-				new DefaultScope()
+				InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE
 			};
 		}
 		else {
 			fLookupOrder = new IScopeContext[] {
-				new InstanceScope(),
-				new DefaultScope()
+				InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE
 			};
 		}
 		if(container == null) {
@@ -848,33 +874,38 @@ public class ApiErrorsWarningsConfigurationBlock {
 		fParent = parent;
 		SWTFactory.createVerticalSpacer(parent, 1);
 		fMainComp = SWTFactory.createComposite(parent, 1, 1, GridData.FILL_BOTH);
-		TabFolder folder = new TabFolder(fMainComp, SWT.NONE);
+		fTabFolder = new TabFolder(fMainComp, SWT.NONE);
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		gd.heightHint = 400;
-		folder.setLayoutData(gd);
+		fTabFolder.setLayoutData(gd);
 
 		// API scanning usage options
 		createPage(
 				API_SCANNING_USAGE_PAGE_ID,
-				folder,
+				fTabFolder,
 				PreferenceMessages.ApiToolingNotificationsBlock_0,
 				PreferenceMessages.ApiProblemSeveritiesConfigurationBlock_3);
 		// API compatibility options
 		createPage(
 				COMPATIBILITY_PAGE_ID,
-				folder,
+				fTabFolder,
 				PreferenceMessages.ApiToolingNotificationsBlock_1,
 				PreferenceMessages.ApiProblemSeveritiesConfigurationBlock_8); 
 		createPage(
 				VERSION_MANAGEMENT_PAGE_ID,
-				folder,
+				fTabFolder,
 				PreferenceMessages.ApiToolingNotificationsBlock_2,
 				PreferenceMessages.ApiProblemSeveritiesConfigurationBlock_9); 
 		createPage(
 				API_COMPONENT_RESOLUTION_PAGE_ID,
-				folder,
+				fTabFolder,
 				PreferenceMessages.ApiToolingNotificationsBlock_3,
-				PreferenceMessages.ApiProblemSeveritiesConfigurationBlock_10); 
+				PreferenceMessages.ApiProblemSeveritiesConfigurationBlock_10);
+		createPage(
+				API_USE_SCANS_PAGE_ID,
+				fTabFolder,
+				PreferenceMessages.ApiToolingNotificationsBlock_4,
+				PreferenceMessages.ApiProblemSeveritiesConfigurationBlock_11); 
 		restoreExpansionState();
 		validateSettings(null, null, null);
 		Dialog.applyDialogFont(fMainComp);
@@ -915,7 +946,7 @@ public class ApiErrorsWarningsConfigurationBlock {
 		//only look up the project and default scopes if the project
 		//already contains project-specific settings
 		if(hasProjectSpecificSettings(fProject)) {
-			currValue = key.getStoredValue(new IScopeContext[] {new ProjectScope(fProject), new DefaultScope()}, false, fManager);
+			currValue = key.getStoredValue(new IScopeContext[] {new ProjectScope(fProject), DefaultScope.INSTANCE}, false, fManager);
 		}
 		else {
 			currValue = key.getStoredValue(fLookupOrder, false, fManager);
@@ -927,15 +958,15 @@ public class ApiErrorsWarningsConfigurationBlock {
 
 	/**
 	 * Creates a tab page parented in the folder
-	 * @param kind
+	 * @param tabID
 	 * @param folder
 	 * @param name
 	 * @param description
 	 * @return
 	 */
-	private Composite createPage(int kind, TabFolder folder, String name, String description) {
+	private Composite createPage(int tabID, TabFolder folder, String name, String description) {
 		Composite page = SWTFactory.createComposite(folder, 1, 1, GridData.FILL_BOTH);
-		TabItem tab = new TabItem(folder, SWT.NONE);
+		TabItem tab = new TabItem(folder, SWT.NONE, tabID);
 		tab.setText(name);
 		tab.setControl(page);
 		
@@ -943,355 +974,391 @@ public class ApiErrorsWarningsConfigurationBlock {
 		SWTFactory.createWrapLabel(page, description, 1);
 		SWTFactory.createVerticalSpacer(page, 1);
 		
-		switch(kind) {
+		switch(tabID) {
 			case API_SCANNING_USAGE_PAGE_ID : {
-				ScrolledComposite scomp = new ScrolledComposite(page, SWT.H_SCROLL | SWT.V_SCROLL);
-				scomp.setExpandHorizontal(true);
-				scomp.setExpandVertical(true);
-				scomp.setLayout(new GridLayout(2, false));
-				scomp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-				scomp.addListener(SWT.Resize, new Listener() {
-					public void handleEvent(Event event) {
-						handleExpand(getScrollingParent(event.widget));
-					}
-				});
-				Composite sbody = SWTFactory.createComposite(scomp, 1, 1, GridData.FILL_BOTH);
-				scomp.setContent(sbody);
-				
-				Composite client = createExpansibleComposite(sbody, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_general);
-				initializeComboControls(client, 
-						new String[] {
-							PreferenceMessages.ApiErrorsWarningsConfigurationBlock_invalid_tag_use,
-							PreferenceMessages.ApiErrorsWarningsConfigurationBlock_invalid_reference_to_system_libraries,
-						},
-						new Key[] {
-							KEY_INVALID_JAVADOC_TAG,
-							KEY_INVALID_REFERENCE_IN_SYSTEM_LIBRARIES,
-						});
-				initializeInstalledMetatadata(client);
-				client = createExpansibleComposite(sbody, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_restrictions);
-				initializeComboControls(client,
-					new String[] {
-						PreferenceMessages.ApiProblemSeveritiesNoImplement,
-						PreferenceMessages.ApiProblemSeveritiesNoExtend,
-						PreferenceMessages.ApiProblemSeveritiesNoReference,
-						PreferenceMessages.ApiProblemSeveritiesNoInstanciate,
-						PreferenceMessages.ApiErrorsWarningsConfigurationBlock_override_tagged_method,
-					},
-					new Key[] {
-						KEY_NOIMPLEMENT,
-						KEY_NOEXTEND,
-						KEY_NOREFERENCE,
-						KEY_NOINSTANTIATE,
-						KEY_NOOVERRIDE,
-					}
-				);
-				client = createExpansibleComposite(sbody, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_leaks);
-				initializeComboControls(client,
-						new String[] {
-							PreferenceMessages.ApiErrorsWarningsConfigurationBlock_extend_non_api_class,
-							PreferenceMessages.ApiErrorsWarningsConfigurationBlock_implement_non_api,
-							PreferenceMessages.ApiErrorsWarningsConfigurationBlock_field_decl_non_api,
-							PreferenceMessages.ApiErrorsWarningsConfigurationBlock_return_type_non_api,
-							PreferenceMessages.ApiErrorsWarningsConfigurationBlock_parameter_non_api
-						},
-						new Key[] {
-							KEY_LEAK_EXTEND,
-							KEY_LEAK_IMPLEMENT,
-							KEY_LEAK_FIELD_DECL,
-							KEY_LEAK_METHOD_RETURN_TYPE,
-							KEY_LEAK_METHOD_PARAM
-						}
-					);
+				createApiScanningPage(page);
 				break;
 			}
 			case VERSION_MANAGEMENT_PAGE_ID : {
-				Composite vcomp = SWTFactory.createComposite(page, 2, 1, GridData.FILL_BOTH);
-				initializeComboControls(vcomp,
-					new String[] {
-						PreferenceMessages.VersionManagementReportMissingSinceTag,
-						PreferenceMessages.VersionManagementReportMalformedSinceTags,
-						PreferenceMessages.VersionManagementReportInvalidSinceTagVersion,
-						PreferenceMessages.VersionManagementReportInvalidApiComponentVersion,
-					},
-					new Key[] {
-						KEY_MISSING_SINCE_TAG,
-						KEY_MALFORMED_SINCE_TAG,
-						KEY_INVALID_SINCE_TAG_VERSION,
-						KEY_INCOMPATIBLE_API_COMPONENT_VERSION
-					}
-				);
-				addCheckBox(
-					vcomp,
-					PreferenceMessages.VersionManagementReportInvalidApiComponentVersionIncludeMinorWithoutApiChange,
-					KEY_INCOMPATIBLE_API_COMPONENT_VERSION_INCLUDE_INCLUDE_MINOR_WITHOUT_API_CHANGE,
-					CHECKBOX_VALUES,
-					2);
-				addCheckBox(
-					vcomp,
-					PreferenceMessages.VersionManagementReportInvalidApiComponentVersionIncludeMajorWithoutBreakingChange,
-					KEY_INCOMPATIBLE_API_COMPONENT_VERSION_INCLUDE_INCLUDE_MAJOR_WITHOUT_BREAKING_CHANGE,
-					CHECKBOX_VALUES,
-					2);
+				createVersionManagementPage(page);
 				break;
 			}
 			case API_COMPONENT_RESOLUTION_PAGE_ID : {
-				Composite vcomp = SWTFactory.createComposite(page, 2, 1, GridData.FILL_BOTH);
-				initializeComboControls(vcomp,
-					new String[] {
-						PreferenceMessages.ReportApiComponentResolutionFailure,
-						PreferenceMessages.ApiErrorsWarningsConfigurationBlock_unused_problem_filters,
-					},
-					new Key[] {
-						KEY_REPORT_RESOLUTION_ERRORS_API_COMPONENT,
-						KEY_UNUSED_PROBLEM_FILTERS
-					}
-				);
-				addCheckBox(vcomp, 
-						PreferenceMessages.ApiErrorsWarningsConfigurationBlock_automatically_remove_problem_filters, 
-						KEY_AUTOMATICALLY_REMOVE_PROBLEM_FILTERS, 
-						CHECKBOX_VALUES, 
-						0);
+				createApiComponentResolutionPage(page);
 				break;
 			}
 			case COMPATIBILITY_PAGE_ID : {
-				// compatibility
-				Composite vcomp = SWTFactory.createComposite(page, 2, 1, GridData.FILL_HORIZONTAL);
-				addCheckBox(
-					vcomp,
-					PreferenceMessages.CompatibilityReportApiBreakageWhenMajorVersionIncremented,
-					KEY_REPORT_API_BREAKAGE_WHEN_MAJOR_VERSION_INCREMENTED,
-					CHECKBOX_VALUES,
-					2);
-				ScrolledComposite scomp = new ScrolledComposite(page, SWT.H_SCROLL | SWT.V_SCROLL);
-				scomp.setExpandHorizontal(true);
-				scomp.setExpandVertical(true);
-				scomp.setLayout(new GridLayout(1, false));
-				scomp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-				scomp.addListener(SWT.Resize, new Listener() {
-					public void handleEvent(Event event) {
-						handleExpand(getScrollingParent(event.widget));
-					}
-				});
-				Composite sbody = SWTFactory.createComposite(scomp, 1, 1, GridData.FILL_BOTH);
-				scomp.setContent(sbody);
-				
-				Composite client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityAPIComponentElement);
-				initializeComboControls(
-						client,
-						new String[] {
-								PreferenceMessages.API_COMPONENT_REMOVED_API_TYPE,
-								PreferenceMessages.API_COMPONENT_REMOVED_TYPE,
-								PreferenceMessages.API_COMPONENT_REMOVED_REEXPORTED_API_TYPE,
-								PreferenceMessages.API_COMPONENT_REMOVED_REEXPORTED_TYPE,
-						},
-						new Key[] {
-								KEY_API_COMPONENT_REMOVED_API_TYPE,
-								KEY_API_COMPONENT_REMOVED_TYPE,
-								KEY_API_COMPONENT_REMOVED_REEXPORTED_API_TYPE,
-								KEY_API_COMPONENT_REMOVED_REEXPORTED_TYPE,
-						});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityClassElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.CLASS_ADDED_METHOD,
-						PreferenceMessages.CLASS_ADDED_RESTRICTIONS,
-						PreferenceMessages.CLASS_ADDED_TYPE_PARAMETER,
-						PreferenceMessages.CLASS_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
-						PreferenceMessages.CLASS_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
-						PreferenceMessages.CLASS_CHANGED_NON_FINAL_TO_FINAL,
-						PreferenceMessages.CLASS_CHANGED_TYPE_CONVERSION,
-						PreferenceMessages.CLASS_CHANGED_DECREASE_ACCESS,
-						PreferenceMessages.CLASS_REMOVED_FIELD,
-						PreferenceMessages.CLASS_REMOVED_METHOD,
-						PreferenceMessages.CLASS_REMOVED_CONSTRUCTOR,
-						PreferenceMessages.CLASS_REMOVED_SUPERCLASS,
-						PreferenceMessages.CLASS_REMOVED_TYPE_MEMBER,
-						PreferenceMessages.CLASS_REMOVED_TYPE_PARAMETER,
-					},
-					new Key[] {
-						KEY_CLASS_ADDED_METHOD,
-						KEY_CLASS_ADDED_RESTRICTIONS,
-						KEY_CLASS_ADDED_TYPE_PARAMETER,
-						KEY_CLASS_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
-						KEY_CLASS_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
-						KEY_CLASS_CHANGED_NON_FINAL_TO_FINAL,
-						KEY_CLASS_CHANGED_TYPE_CONVERSION,
-						KEY_CLASS_CHANGED_DECREASE_ACCESS,
-						KEY_CLASS_REMOVED_FIELD,
-						KEY_CLASS_REMOVED_METHOD,
-						KEY_CLASS_REMOVED_CONSTRUCTOR,
-						KEY_CLASS_REMOVED_SUPERCLASS,
-						KEY_CLASS_REMOVED_TYPE_MEMBER,
-						KEY_CLASS_REMOVED_TYPE_PARAMETER,
-					});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityInterfaceElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.INTERFACE_ADDED_FIELD,
-						PreferenceMessages.INTERFACE_ADDED_METHOD,
-						PreferenceMessages.INTERFACE_ADDED_RESTRICTIONS,
-						PreferenceMessages.INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS,
-						PreferenceMessages.INTERFACE_ADDED_TYPE_PARAMETER,
-						PreferenceMessages.INTERFACE_CHANGED_TYPE_CONVERSION,
-						PreferenceMessages.INTERFACE_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
-						PreferenceMessages.INTERFACE_REMOVED_TYPE_PARAMETER,
-						PreferenceMessages.INTERFACE_REMOVED_FIELD,
-						PreferenceMessages.INTERFACE_REMOVED_METHOD,
-						PreferenceMessages.INTERFACE_REMOVED_TYPE_MEMBER,
-					},
-					new Key[] {
-						KEY_INTERFACE_ADDED_FIELD,
-						KEY_INTERFACE_ADDED_METHOD,
-						KEY_INTERFACE_ADDED_RESTRICTIONS,
-						KEY_INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS,
-						KEY_INTERFACE_ADDED_TYPE_PARAMETER,
-						KEY_INTERFACE_CHANGED_TYPE_CONVERSION,
-						KEY_INTERFACE_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
-						KEY_INTERFACE_REMOVED_TYPE_PARAMETER,
-						KEY_INTERFACE_REMOVED_FIELD,
-						KEY_INTERFACE_REMOVED_METHOD,
-						KEY_INTERFACE_REMOVED_TYPE_MEMBER,
-					});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityEnumElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.ENUM_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
-						PreferenceMessages.ENUM_CHANGED_TYPE_CONVERSION,
-						PreferenceMessages.ENUM_REMOVED_FIELD,
-						PreferenceMessages.ENUM_REMOVED_ENUM_CONSTANT,
-						PreferenceMessages.ENUM_REMOVED_METHOD,
-						PreferenceMessages.ENUM_REMOVED_TYPE_MEMBER,
-					},
-					new Key[] {
-						KEY_ENUM_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
-						KEY_ENUM_CHANGED_TYPE_CONVERSION,
-						KEY_ENUM_REMOVED_FIELD,
-						KEY_ENUM_REMOVED_ENUM_CONSTANT,
-						KEY_ENUM_REMOVED_METHOD,
-						KEY_ENUM_REMOVED_TYPE_MEMBER,
-					});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityAnnotationElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.ANNOTATION_ADDED_METHOD_NO_DEFAULT_VALUE,
-						PreferenceMessages.ANNOTATION_CHANGED_TYPE_CONVERSION,
-						PreferenceMessages.ANNOTATION_REMOVED_FIELD,
-						PreferenceMessages.ANNOTATION_REMOVED_METHOD,
-						PreferenceMessages.ANNOTATION_REMOVED_TYPE_MEMBER,
-					},
-					new Key[] {
-						KEY_ANNOTATION_ADDED_METHOD_NO_DEFAULT_VALUE,
-						KEY_ANNOTATION_CHANGED_TYPE_CONVERSION,
-						KEY_ANNOTATION_REMOVED_FIELD,
-						KEY_ANNOTATION_REMOVED_METHOD,
-						KEY_ANNOTATION_REMOVED_TYPE_MEMBER,
-					});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityFieldElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.FIELD_ADDED_VALUE,
-						PreferenceMessages.FIELD_CHANGED_TYPE,
-						PreferenceMessages.FIELD_CHANGED_VALUE,
-						PreferenceMessages.FIELD_CHANGED_DECREASE_ACCESS,
-						PreferenceMessages.FIELD_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT,
-						PreferenceMessages.FIELD_CHANGED_NON_FINAL_TO_FINAL,
-						PreferenceMessages.FIELD_CHANGED_STATIC_TO_NON_STATIC,
-						PreferenceMessages.FIELD_CHANGED_NON_STATIC_TO_STATIC,
-						PreferenceMessages.FIELD_REMOVED_VALUE,
-						PreferenceMessages.FIELD_REMOVED_TYPE_ARGUMENT,
-					},
-					new Key[] {
-						KEY_FIELD_ADDED_VALUE,
-						KEY_FIELD_CHANGED_TYPE,
-						KEY_FIELD_CHANGED_VALUE,
-						KEY_FIELD_CHANGED_DECREASE_ACCESS,
-						KEY_FIELD_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT,
-						KEY_FIELD_CHANGED_NON_FINAL_TO_FINAL,
-						KEY_FIELD_CHANGED_STATIC_TO_NON_STATIC,
-						KEY_FIELD_CHANGED_NON_STATIC_TO_STATIC,
-						KEY_FIELD_REMOVED_VALUE,
-						KEY_FIELD_REMOVED_TYPE_ARGUMENT,
-					});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityMethodElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.METHOD_ADDED_RESTRICTIONS,
-						PreferenceMessages.METHOD_ADDED_TYPE_PARAMETER,
-						PreferenceMessages.METHOD_CHANGED_VARARGS_TO_ARRAY,
-						PreferenceMessages.METHOD_CHANGED_DECREASE_ACCESS,
-						PreferenceMessages.METHOD_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
-						PreferenceMessages.METHOD_CHANGED_NON_STATIC_TO_STATIC,
-						PreferenceMessages.METHOD_CHANGED_STATIC_TO_NON_STATIC,
-						PreferenceMessages.METHOD_CHANGED_NON_FINAL_TO_FINAL,
-						PreferenceMessages.METHOD_REMOVED_ANNOTATION_DEFAULT_VALUE,
-						PreferenceMessages.METHOD_REMOVED_TYPE_PARAMETER,
-					},
-					new Key[] {
-						KEY_METHOD_ADDED_RESTRICTIONS,
-						KEY_METHOD_ADDED_TYPE_PARAMETER,
-						KEY_METHOD_CHANGED_VARARGS_TO_ARRAY,
-						KEY_METHOD_CHANGED_DECREASE_ACCESS,
-						KEY_METHOD_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
-						KEY_METHOD_CHANGED_NON_STATIC_TO_STATIC,
-						KEY_METHOD_CHANGED_STATIC_TO_NON_STATIC,
-						KEY_METHOD_CHANGED_NON_FINAL_TO_FINAL,
-						KEY_METHOD_REMOVED_ANNOTATION_DEFAULT_VALUE,
-						KEY_METHOD_REMOVED_TYPE_PARAMETER,
-					});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityConstructorElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.CONSTRUCTOR_ADDED_TYPE_PARAMETER,
-						PreferenceMessages.CONSTRUCTOR_CHANGED_VARARGS_TO_ARRAY,
-						PreferenceMessages.CONSTRUCTOR_CHANGED_DECREASE_ACCESS,
-						PreferenceMessages.CONSTRUCTOR_REMOVED_TYPE_PARAMETER,
-					},
-					new Key[] {
-						KEY_CONSTRUCTOR_ADDED_TYPE_PARAMETER,
-						KEY_CONSTRUCTOR_CHANGED_VARARGS_TO_ARRAY,
-						KEY_CONSTRUCTOR_CHANGED_DECREASE_ACCESS,
-						KEY_CONSTRUCTOR_REMOVED_TYPE_PARAMETER,
-					});
-				client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityTypeParameterElement);
-				initializeComboControls(
-					client,
-					new String[] {
-						PreferenceMessages.TYPE_PARAMETER_ADDED_CLASS_BOUND,
-						PreferenceMessages.TYPE_PARAMETER_ADDED_INTERFACE_BOUND,
-						PreferenceMessages.TYPE_PARAMETER_CHANGED_CLASS_BOUND,
-						PreferenceMessages.TYPE_PARAMETER_CHANGED_INTERFACE_BOUND,
-						PreferenceMessages.TYPE_PARAMETER_REMOVED_CLASS_BOUND,
-						PreferenceMessages.TYPE_PARAMETER_REMOVED_INTERFACE_BOUND,
-					},
-					new Key[] {
-						KEY_TYPE_PARAMETER_ADDED_CLASS_BOUND,
-						KEY_TYPE_PARAMETER_ADDED_INTERFACE_BOUND,
-						KEY_TYPE_PARAMETER_CHANGED_CLASS_BOUND,
-						KEY_TYPE_PARAMETER_CHANGED_INTERFACE_BOUND,
-						KEY_TYPE_PARAMETER_REMOVED_CLASS_BOUND,
-						KEY_TYPE_PARAMETER_REMOVED_INTERFACE_BOUND,
-					});
+				createCompatibilityPage(page);
+				break;
+			}
+			case API_USE_SCANS_PAGE_ID: {
+				createAPIUseScanPage(page);
+				break;
 			}
 		}
 		SWTFactory.createVerticalSpacer(page, 1);
 		
 		Group bcomp = SWTFactory.createGroup(page, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_setAllto, 3, 2, GridData.FILL_HORIZONTAL);
 		Button button = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_error_button, null, SWT.RIGHT);
-		button.addSelectionListener(new SetAllSelectionAdapter(kind, ApiPlugin.VALUE_ERROR));
+		button.addSelectionListener(new SetAllSelectionAdapter(tabID, ApiPlugin.VALUE_ERROR));
 		button = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_warning_button, null, SWT.RIGHT);
-		button.addSelectionListener(new SetAllSelectionAdapter(kind, ApiPlugin.VALUE_WARNING));
+		button.addSelectionListener(new SetAllSelectionAdapter(tabID, ApiPlugin.VALUE_WARNING));
 		button = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_ignore_button, null, SWT.RIGHT);
-		button.addSelectionListener(new SetAllSelectionAdapter(kind, ApiPlugin.VALUE_IGNORE));
+		button.addSelectionListener(new SetAllSelectionAdapter(tabID, ApiPlugin.VALUE_IGNORE));
 		return page;
 	}
+	private void createAPIUseScanPage(Composite page) {
+		Composite vcomp = SWTFactory.createComposite(page, 2, 1, GridData.FILL_BOTH);
+		initializeComboControls(vcomp,
+			new String[] {
+				PreferenceMessages.ApiUseScanConfigurationBlock_unresolvedTypeProblem,
+				PreferenceMessages.ApiUseScanConfigurationBlock_unresolvedMethodProblem,
+				PreferenceMessages.ApiUseScanConfigurationBlock_unresolvedFieldProblem
+			},
+			new Key[] {
+				KEY_API_USE_SCAN_TYPE_PROBLEM,
+				KEY_API_USE_SCAN_METHOD_PROBLEM,
+				KEY_API_USE_SCAN_FIELD_PROBLEM
+			}
+		);	
+	}
+	
+	private void createCompatibilityPage(Composite page) {
+		// compatibility
+		Composite vcomp = SWTFactory.createComposite(page, 2, 1, GridData.FILL_HORIZONTAL);
+		addCheckBox(
+			vcomp,
+			PreferenceMessages.CompatibilityReportApiBreakageWhenMajorVersionIncremented,
+			KEY_REPORT_API_BREAKAGE_WHEN_MAJOR_VERSION_INCREMENTED,
+			CHECKBOX_VALUES,
+			2);
+		ScrolledComposite scomp = new ScrolledComposite(page, SWT.H_SCROLL | SWT.V_SCROLL);
+		scomp.setExpandHorizontal(true);
+		scomp.setExpandVertical(true);
+		scomp.setLayout(new GridLayout(1, false));
+		scomp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		scomp.addListener(SWT.Resize, new Listener() {
+			public void handleEvent(Event event) {
+				handleExpand(getScrollingParent(event.widget));
+			}
+		});
+		Composite sbody = SWTFactory.createComposite(scomp, 1, 1, GridData.FILL_BOTH);
+		scomp.setContent(sbody);
+		
+		Composite client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityAPIComponentElement);
+		initializeComboControls(
+				client,
+				new String[] {
+						PreferenceMessages.API_COMPONENT_REMOVED_API_TYPE,
+						PreferenceMessages.API_COMPONENT_REMOVED_TYPE,
+						PreferenceMessages.API_COMPONENT_REMOVED_REEXPORTED_API_TYPE,
+						PreferenceMessages.API_COMPONENT_REMOVED_REEXPORTED_TYPE,
+				},
+				new Key[] {
+						KEY_API_COMPONENT_REMOVED_API_TYPE,
+						KEY_API_COMPONENT_REMOVED_TYPE,
+						KEY_API_COMPONENT_REMOVED_REEXPORTED_API_TYPE,
+						KEY_API_COMPONENT_REMOVED_REEXPORTED_TYPE,
+				});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityClassElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.CLASS_ADDED_METHOD,
+				PreferenceMessages.CLASS_ADDED_RESTRICTIONS,
+				PreferenceMessages.CLASS_ADDED_TYPE_PARAMETER,
+				PreferenceMessages.CLASS_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
+				PreferenceMessages.CLASS_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
+				PreferenceMessages.CLASS_CHANGED_NON_FINAL_TO_FINAL,
+				PreferenceMessages.CLASS_CHANGED_TYPE_CONVERSION,
+				PreferenceMessages.CLASS_CHANGED_DECREASE_ACCESS,
+				PreferenceMessages.CLASS_REMOVED_FIELD,
+				PreferenceMessages.CLASS_REMOVED_METHOD,
+				PreferenceMessages.CLASS_REMOVED_CONSTRUCTOR,
+				PreferenceMessages.CLASS_REMOVED_SUPERCLASS,
+				PreferenceMessages.CLASS_REMOVED_TYPE_MEMBER,
+				PreferenceMessages.CLASS_REMOVED_TYPE_PARAMETER,
+			},
+			new Key[] {
+				KEY_CLASS_ADDED_METHOD,
+				KEY_CLASS_ADDED_RESTRICTIONS,
+				KEY_CLASS_ADDED_TYPE_PARAMETER,
+				KEY_CLASS_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
+				KEY_CLASS_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
+				KEY_CLASS_CHANGED_NON_FINAL_TO_FINAL,
+				KEY_CLASS_CHANGED_TYPE_CONVERSION,
+				KEY_CLASS_CHANGED_DECREASE_ACCESS,
+				KEY_CLASS_REMOVED_FIELD,
+				KEY_CLASS_REMOVED_METHOD,
+				KEY_CLASS_REMOVED_CONSTRUCTOR,
+				KEY_CLASS_REMOVED_SUPERCLASS,
+				KEY_CLASS_REMOVED_TYPE_MEMBER,
+				KEY_CLASS_REMOVED_TYPE_PARAMETER,
+			});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityInterfaceElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.INTERFACE_ADDED_FIELD,
+				PreferenceMessages.INTERFACE_ADDED_METHOD,
+				PreferenceMessages.INTERFACE_ADDED_RESTRICTIONS,
+				PreferenceMessages.INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS,
+				PreferenceMessages.INTERFACE_ADDED_TYPE_PARAMETER,
+				PreferenceMessages.INTERFACE_CHANGED_TYPE_CONVERSION,
+				PreferenceMessages.INTERFACE_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
+				PreferenceMessages.INTERFACE_REMOVED_TYPE_PARAMETER,
+				PreferenceMessages.INTERFACE_REMOVED_FIELD,
+				PreferenceMessages.INTERFACE_REMOVED_METHOD,
+				PreferenceMessages.INTERFACE_REMOVED_TYPE_MEMBER,
+			},
+			new Key[] {
+				KEY_INTERFACE_ADDED_FIELD,
+				KEY_INTERFACE_ADDED_METHOD,
+				KEY_INTERFACE_ADDED_RESTRICTIONS,
+				KEY_INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS,
+				KEY_INTERFACE_ADDED_TYPE_PARAMETER,
+				KEY_INTERFACE_CHANGED_TYPE_CONVERSION,
+				KEY_INTERFACE_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
+				KEY_INTERFACE_REMOVED_TYPE_PARAMETER,
+				KEY_INTERFACE_REMOVED_FIELD,
+				KEY_INTERFACE_REMOVED_METHOD,
+				KEY_INTERFACE_REMOVED_TYPE_MEMBER,
+			});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityEnumElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.ENUM_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
+				PreferenceMessages.ENUM_CHANGED_TYPE_CONVERSION,
+				PreferenceMessages.ENUM_REMOVED_FIELD,
+				PreferenceMessages.ENUM_REMOVED_ENUM_CONSTANT,
+				PreferenceMessages.ENUM_REMOVED_METHOD,
+				PreferenceMessages.ENUM_REMOVED_TYPE_MEMBER,
+			},
+			new Key[] {
+				KEY_ENUM_CHANGED_CONTRACTED_SUPERINTERFACES_SET,
+				KEY_ENUM_CHANGED_TYPE_CONVERSION,
+				KEY_ENUM_REMOVED_FIELD,
+				KEY_ENUM_REMOVED_ENUM_CONSTANT,
+				KEY_ENUM_REMOVED_METHOD,
+				KEY_ENUM_REMOVED_TYPE_MEMBER,
+			});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityAnnotationElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.ANNOTATION_ADDED_METHOD_NO_DEFAULT_VALUE,
+				PreferenceMessages.ANNOTATION_CHANGED_TYPE_CONVERSION,
+				PreferenceMessages.ANNOTATION_REMOVED_FIELD,
+				PreferenceMessages.ANNOTATION_REMOVED_METHOD,
+				PreferenceMessages.ANNOTATION_REMOVED_TYPE_MEMBER,
+			},
+			new Key[] {
+				KEY_ANNOTATION_ADDED_METHOD_NO_DEFAULT_VALUE,
+				KEY_ANNOTATION_CHANGED_TYPE_CONVERSION,
+				KEY_ANNOTATION_REMOVED_FIELD,
+				KEY_ANNOTATION_REMOVED_METHOD,
+				KEY_ANNOTATION_REMOVED_TYPE_MEMBER,
+			});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityFieldElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.FIELD_ADDED_VALUE,
+				PreferenceMessages.FIELD_CHANGED_TYPE,
+				PreferenceMessages.FIELD_CHANGED_VALUE,
+				PreferenceMessages.FIELD_CHANGED_DECREASE_ACCESS,
+				PreferenceMessages.FIELD_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT,
+				PreferenceMessages.FIELD_CHANGED_NON_FINAL_TO_FINAL,
+				PreferenceMessages.FIELD_CHANGED_STATIC_TO_NON_STATIC,
+				PreferenceMessages.FIELD_CHANGED_NON_STATIC_TO_STATIC,
+				PreferenceMessages.FIELD_REMOVED_VALUE,
+				PreferenceMessages.FIELD_REMOVED_TYPE_ARGUMENT,
+			},
+			new Key[] {
+				KEY_FIELD_ADDED_VALUE,
+				KEY_FIELD_CHANGED_TYPE,
+				KEY_FIELD_CHANGED_VALUE,
+				KEY_FIELD_CHANGED_DECREASE_ACCESS,
+				KEY_FIELD_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT,
+				KEY_FIELD_CHANGED_NON_FINAL_TO_FINAL,
+				KEY_FIELD_CHANGED_STATIC_TO_NON_STATIC,
+				KEY_FIELD_CHANGED_NON_STATIC_TO_STATIC,
+				KEY_FIELD_REMOVED_VALUE,
+				KEY_FIELD_REMOVED_TYPE_ARGUMENT,
+			});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityMethodElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.METHOD_ADDED_RESTRICTIONS,
+				PreferenceMessages.METHOD_ADDED_TYPE_PARAMETER,
+				PreferenceMessages.METHOD_CHANGED_VARARGS_TO_ARRAY,
+				PreferenceMessages.METHOD_CHANGED_DECREASE_ACCESS,
+				PreferenceMessages.METHOD_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
+				PreferenceMessages.METHOD_CHANGED_NON_STATIC_TO_STATIC,
+				PreferenceMessages.METHOD_CHANGED_STATIC_TO_NON_STATIC,
+				PreferenceMessages.METHOD_CHANGED_NON_FINAL_TO_FINAL,
+				PreferenceMessages.METHOD_REMOVED_ANNOTATION_DEFAULT_VALUE,
+				PreferenceMessages.METHOD_REMOVED_TYPE_PARAMETER,
+			},
+			new Key[] {
+				KEY_METHOD_ADDED_RESTRICTIONS,
+				KEY_METHOD_ADDED_TYPE_PARAMETER,
+				KEY_METHOD_CHANGED_VARARGS_TO_ARRAY,
+				KEY_METHOD_CHANGED_DECREASE_ACCESS,
+				KEY_METHOD_CHANGED_NON_ABSTRACT_TO_ABSTRACT,
+				KEY_METHOD_CHANGED_NON_STATIC_TO_STATIC,
+				KEY_METHOD_CHANGED_STATIC_TO_NON_STATIC,
+				KEY_METHOD_CHANGED_NON_FINAL_TO_FINAL,
+				KEY_METHOD_REMOVED_ANNOTATION_DEFAULT_VALUE,
+				KEY_METHOD_REMOVED_TYPE_PARAMETER,
+			});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityConstructorElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.CONSTRUCTOR_ADDED_TYPE_PARAMETER,
+				PreferenceMessages.CONSTRUCTOR_CHANGED_VARARGS_TO_ARRAY,
+				PreferenceMessages.CONSTRUCTOR_CHANGED_DECREASE_ACCESS,
+				PreferenceMessages.CONSTRUCTOR_REMOVED_TYPE_PARAMETER,
+			},
+			new Key[] {
+				KEY_CONSTRUCTOR_ADDED_TYPE_PARAMETER,
+				KEY_CONSTRUCTOR_CHANGED_VARARGS_TO_ARRAY,
+				KEY_CONSTRUCTOR_CHANGED_DECREASE_ACCESS,
+				KEY_CONSTRUCTOR_REMOVED_TYPE_PARAMETER,
+			});
+		client = createExpansibleComposite(sbody, PreferenceMessages.CompatibilityTypeParameterElement);
+		initializeComboControls(
+			client,
+			new String[] {
+				PreferenceMessages.TYPE_PARAMETER_ADDED_CLASS_BOUND,
+				PreferenceMessages.TYPE_PARAMETER_ADDED_INTERFACE_BOUND,
+				PreferenceMessages.TYPE_PARAMETER_CHANGED_CLASS_BOUND,
+				PreferenceMessages.TYPE_PARAMETER_CHANGED_INTERFACE_BOUND,
+				PreferenceMessages.TYPE_PARAMETER_REMOVED_CLASS_BOUND,
+				PreferenceMessages.TYPE_PARAMETER_REMOVED_INTERFACE_BOUND,
+			},
+			new Key[] {
+				KEY_TYPE_PARAMETER_ADDED_CLASS_BOUND,
+				KEY_TYPE_PARAMETER_ADDED_INTERFACE_BOUND,
+				KEY_TYPE_PARAMETER_CHANGED_CLASS_BOUND,
+				KEY_TYPE_PARAMETER_CHANGED_INTERFACE_BOUND,
+				KEY_TYPE_PARAMETER_REMOVED_CLASS_BOUND,
+				KEY_TYPE_PARAMETER_REMOVED_INTERFACE_BOUND,
+			});
+	}
+	
+	private void createApiComponentResolutionPage(Composite page) {
+		Composite vcomp = SWTFactory.createComposite(page, 2, 1, GridData.FILL_BOTH);
+		initializeComboControls(vcomp,
+			new String[] {
+				PreferenceMessages.ReportApiComponentResolutionFailure,
+				PreferenceMessages.ApiErrorsWarningsConfigurationBlock_unused_problem_filters,
+			},
+			new Key[] {
+				KEY_REPORT_RESOLUTION_ERRORS_API_COMPONENT,
+				KEY_UNUSED_PROBLEM_FILTERS
+			}
+		);
+		addCheckBox(vcomp, 
+				PreferenceMessages.ApiErrorsWarningsConfigurationBlock_automatically_remove_problem_filters, 
+				KEY_AUTOMATICALLY_REMOVE_PROBLEM_FILTERS, 
+				CHECKBOX_VALUES, 
+				0);
+	}
+	
+	private void createVersionManagementPage(Composite page) {
+		Composite vcomp = SWTFactory.createComposite(page, 2, 1, GridData.FILL_BOTH);
+		initializeComboControls(vcomp,
+			new String[] {
+				PreferenceMessages.VersionManagementReportMissingSinceTag,
+				PreferenceMessages.VersionManagementReportMalformedSinceTags,
+				PreferenceMessages.VersionManagementReportInvalidSinceTagVersion,
+				PreferenceMessages.VersionManagementReportInvalidApiComponentVersion,
+			},
+			new Key[] {
+				KEY_MISSING_SINCE_TAG,
+				KEY_MALFORMED_SINCE_TAG,
+				KEY_INVALID_SINCE_TAG_VERSION,
+				KEY_INCOMPATIBLE_API_COMPONENT_VERSION
+			}
+		);
+		addCheckBox(
+			vcomp,
+			PreferenceMessages.VersionManagementReportInvalidApiComponentVersionIncludeMinorWithoutApiChange,
+			KEY_INCOMPATIBLE_API_COMPONENT_VERSION_INCLUDE_INCLUDE_MINOR_WITHOUT_API_CHANGE,
+			CHECKBOX_VALUES,
+			2);
+		addCheckBox(
+			vcomp,
+			PreferenceMessages.VersionManagementReportInvalidApiComponentVersionIncludeMajorWithoutBreakingChange,
+			KEY_INCOMPATIBLE_API_COMPONENT_VERSION_INCLUDE_INCLUDE_MAJOR_WITHOUT_BREAKING_CHANGE,
+			CHECKBOX_VALUES,
+			2);
+	}
+	
+	private void createApiScanningPage(Composite page) {
+		ScrolledComposite scomp = new ScrolledComposite(page, SWT.H_SCROLL | SWT.V_SCROLL);
+		scomp.setExpandHorizontal(true);
+		scomp.setExpandVertical(true);
+		scomp.setLayout(new GridLayout(2, false));
+		scomp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		scomp.addListener(SWT.Resize, new Listener() {
+			public void handleEvent(Event event) {
+				handleExpand(getScrollingParent(event.widget));
+			}
+		});
+		Composite sbody = SWTFactory.createComposite(scomp, 1, 1, GridData.FILL_BOTH);
+		scomp.setContent(sbody);
+		
+		Composite client = createExpansibleComposite(sbody, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_general);
+		initializeComboControls(client, 
+				new String[] {
+					PreferenceMessages.ApiErrorsWarningsConfigurationBlock_invalid_tag_use,
+					PreferenceMessages.ApiErrorsWarningsConfigurationBlock_invalid_reference_to_system_libraries,
+				},
+				new Key[] {
+					KEY_INVALID_JAVADOC_TAG,
+					KEY_INVALID_REFERENCE_IN_SYSTEM_LIBRARIES,
+				});
+		initializeInstalledMetatadata(client);
+		client = createExpansibleComposite(sbody, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_restrictions);
+		initializeComboControls(client,
+			new String[] {
+				PreferenceMessages.ApiProblemSeveritiesNoImplement,
+				PreferenceMessages.ApiProblemSeveritiesNoExtend,
+				PreferenceMessages.ApiProblemSeveritiesNoReference,
+				PreferenceMessages.ApiProblemSeveritiesNoInstanciate,
+				PreferenceMessages.ApiErrorsWarningsConfigurationBlock_override_tagged_method,
+			},
+			new Key[] {
+				KEY_NOIMPLEMENT,
+				KEY_NOEXTEND,
+				KEY_NOREFERENCE,
+				KEY_NOINSTANTIATE,
+				KEY_NOOVERRIDE,
+			}
+		);
+		client = createExpansibleComposite(sbody, PreferenceMessages.ApiErrorsWarningsConfigurationBlock_leaks);
+		initializeComboControls(client,
+				new String[] {
+					PreferenceMessages.ApiErrorsWarningsConfigurationBlock_extend_non_api_class,
+					PreferenceMessages.ApiErrorsWarningsConfigurationBlock_implement_non_api,
+					PreferenceMessages.ApiErrorsWarningsConfigurationBlock_field_decl_non_api,
+					PreferenceMessages.ApiErrorsWarningsConfigurationBlock_return_type_non_api,
+					PreferenceMessages.ApiErrorsWarningsConfigurationBlock_parameter_non_api
+				},
+				new Key[] {
+					KEY_LEAK_EXTEND,
+					KEY_LEAK_IMPLEMENT,
+					KEY_LEAK_FIELD_DECL,
+					KEY_LEAK_METHOD_RETURN_TYPE,
+					KEY_LEAK_METHOD_PARAM
+				}
+			);
+	}
 	
 	/**
 	 * Initializes the group of EE meta-data that is installed
@@ -1686,4 +1753,15 @@ public class ApiErrorsWarningsConfigurationBlock {
 		}
 		return null;
 	}
+	
+	/**
+	 * If a valid tab ID is provided, select that tab in the tab folder.
+	 * 
+	 * @param tabID integer tab id, one of {@link ApiErrorsWarningsConfigurationBlock#API_USE_SCANS_PAGE_ID}, {@link ApiErrorsWarningsConfigurationBlock#COMPATIBILITY_PAGE_ID}, {@link ApiErrorsWarningsConfigurationBlock#VERSION_MANAGEMENT_PAGE_ID}, {@link ApiErrorsWarningsConfigurationBlock#API_COMPONENT_RESOLUTION_PAGE_ID} and {@link ApiErrorsWarningsConfigurationBlock#API_USE_SCANS_PAGE_ID} 
+	 */
+	public void selectTab(int tabID){
+		if (tabID >= 0 && tabID < fTabFolder.getItemCount()){
+			fTabFolder.setSelection(tabID);
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java
index 2fba6bd..34a37da 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.pde.api.tools.ui.internal.preferences;
 
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Map;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -22,6 +23,7 @@ import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
 import org.eclipse.pde.api.tools.ui.internal.IApiToolsConstants;
 import org.eclipse.pde.api.tools.ui.internal.IApiToolsHelpContextIds;
 import org.eclipse.pde.api.tools.ui.internal.SWTFactory;
@@ -44,7 +46,19 @@ import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
  */
 public class ApiErrorsWarningsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
 
+	public static final String ID = ApiUIPlugin.PLUGIN_ID + ".apitools.errorwarnings.prefpage"; //$NON-NLS-1$
+	/**
+	 * Id of a setting in the data map applied when the page is opened.  
+	 * Value must be a Boolean object.  If true, the customize project settings link will be hidden.
+	 */
 	public static final String NO_LINK= "PropertyAndPreferencePage.nolink"; //$NON-NLS-1$
+	/**
+	 * Id of a setting in the data map applied when the page is opened. 
+	 * Value must be an Integer object with a value match the id of a tab on the page
+	 * See constants {@link ApiErrorsWarningsConfigurationBlock#API_USE_SCANS_PAGE_ID}, {@link ApiErrorsWarningsConfigurationBlock#COMPATIBILITY_PAGE_ID}, {@link ApiErrorsWarningsConfigurationBlock#VERSION_MANAGEMENT_PAGE_ID}, {@link ApiErrorsWarningsConfigurationBlock#API_COMPONENT_RESOLUTION_PAGE_ID} and {@link ApiErrorsWarningsConfigurationBlock#API_USE_SCANS_PAGE_ID}
+	 * If an id is provided, the preference page will open with the specified tab visible
+	 */
+	public static final String INITIAL_TAB = "PropertyAndPreferencePage.initialTab"; //$NON-NLS-1$
 	
 	/**
 	 * The main configuration block for the page
@@ -52,7 +66,10 @@ public class ApiErrorsWarningsPreferencePage extends PreferencePage implements I
 	ApiErrorsWarningsConfigurationBlock block = null;
 	private Link link = null;
 	
-	private HashMap fPageData = null;
+	/**
+	 * Since {@link #applyData(Object)} can be called before createContents, store the data
+	 */
+	private Map fPageData = null;
 	
 	/**
 	 * Constructor
@@ -103,6 +120,10 @@ public class ApiErrorsWarningsPreferencePage extends PreferencePage implements I
 		});
 		block = new ApiErrorsWarningsConfigurationBlock(null, (IWorkbenchPreferenceContainer)getContainer());
 		block.createControl(comp);
+		
+		// Initialize with data map in case applyData was called before createContents
+		applyData(fPageData);
+		
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IApiToolsHelpContextIds.APITOOLS_ERROR_WARNING_PREF_PAGE);
 		return comp;
 	}
@@ -146,7 +167,7 @@ public class ApiErrorsWarningsPreferencePage extends PreferencePage implements I
 		super.performApply();
 	}
 	
-	/**
+	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
 	 */
 	protected void performDefaults() {
@@ -154,13 +175,25 @@ public class ApiErrorsWarningsPreferencePage extends PreferencePage implements I
 		super.performDefaults();
 	}
 	
-	/**
+	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
 	public void applyData(Object data) {
-		if(data instanceof HashMap) {
-			fPageData = (HashMap) data;
-			link.setVisible(!Boolean.TRUE.equals(fPageData.get(NO_LINK)));
+		if(data instanceof Map) {
+			fPageData = (Map)data;
+			if (link != null && fPageData.containsKey(NO_LINK)){
+				link.setVisible(!Boolean.TRUE.equals(fPageData.get(NO_LINK)));
+			}
+			if (block != null && fPageData.containsKey(INITIAL_TAB)){
+				Integer tabIndex = (Integer)fPageData.get(INITIAL_TAB);
+				if (tabIndex != null){
+					try {
+						block.selectTab(tabIndex.intValue());
+					} catch (NumberFormatException e){
+						// Page was called with bad data, just ignore
+					}
+				}
+			}
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiUseScanConfigurationBlock.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiUseScanConfigurationBlock.java
new file mode 100644
index 0000000..8ffbb5e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiUseScanConfigurationBlock.java
@@ -0,0 +1,442 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.ui.internal.preferences;
+
+import java.util.ArrayList;
+import java.util.IdentityHashMap;
+import java.util.List;
+
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
+import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
+import org.eclipse.pde.api.tools.ui.internal.SWTFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.preferences.IWorkingCopyManager;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * This block is used to add the API Use Scan problem severity settings UI to a
+ * parent control
+ */
+public class ApiUseScanConfigurationBlock {
+	/**
+	 * Provides data information for created controls
+	 */
+	protected static class ControlData {
+		Key key;
+		private String[] values;
+
+		/**
+		 * Constructor
+		 * 
+		 * @param key
+		 * @param values
+		 */
+		public ControlData(Key key, String[] values) {
+			this.key = key;
+			this.values = values;
+		}
+
+		public Key getKey() {
+			return key;
+		}
+
+		public String getValue(boolean selection) {
+			int index = selection ? 0 : 1;
+			return values[index];
+		}
+
+		public String getValue(int index) {
+			return values[index];
+		}
+
+		public int getSelection(String value) {
+			if (value != null) {
+				for (int i = 0; i < values.length; i++) {
+					if (value.equals(values[i])) {
+						return i;
+					}
+				}
+			}
+			return values.length - 1; // assume the last option is the least
+										// severe
+		}
+	}
+
+	/**
+	 * Provides management for changed/stored values for a given preference key
+	 */
+	protected static class Key {
+
+		private String qualifier;
+		private String key;
+
+		/**
+		 * Constructor
+		 * 
+		 * @param qualifier
+		 * @param key
+		 */
+		public Key(String qualifier, String key) {
+			this.qualifier = qualifier;
+			this.key = key;
+		}
+
+		/**
+		 * Returns the {@link IEclipsePreferences} node for the given context
+		 * and {@link IWorkingCopyManager}
+		 * 
+		 * @param context
+		 * @param manager
+		 * @return the {@link IEclipsePreferences} node or <code>null</code>
+		 */
+		private IEclipsePreferences getNode(IScopeContext context,
+				IWorkingCopyManager manager) {
+			IEclipsePreferences node = context.getNode(qualifier);
+			if (manager != null) {
+				return manager.getWorkingCopy(node);
+			}
+			return node;
+		}
+
+		/**
+		 * Returns the value stored in the {@link IEclipsePreferences} node from
+		 * the given context and working copy manager
+		 * 
+		 * @param context
+		 * @param manager
+		 * @return the value from the {@link IEclipsePreferences} node or
+		 *         <code>null</code>
+		 */
+		public String getStoredValue(IScopeContext context,
+				IWorkingCopyManager manager) {
+			IEclipsePreferences node = getNode(context, manager);
+			if (node != null) {
+				return node.get(key, null);
+			}
+			return null;
+		}
+
+		/**
+		 * Returns the stored value of this {@link IEclipsePreferences} node
+		 * using a given lookup order, and allowing the top scope to be ignored
+		 * 
+		 * @param lookupOrder
+		 * @param ignoreTopScope
+		 * @param manager
+		 * @return the value from the {@link IEclipsePreferences} node or
+		 *         <code>null</code>
+		 */
+		public String getStoredValue(IScopeContext[] lookupOrder,
+				boolean ignoreTopScope, IWorkingCopyManager manager) {
+			for (int i = ignoreTopScope ? 1 : 0; i < lookupOrder.length; i++) {
+				String value = getStoredValue(lookupOrder[i], manager);
+				if (value != null) {
+					return value;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * Sets the value of this key
+		 * 
+		 * @param context
+		 * @param value
+		 * @param manager
+		 */
+		public void setStoredValue(IScopeContext context, String value,
+				IWorkingCopyManager manager) {
+			IEclipsePreferences node = getNode(context, manager);
+			if (value != null) {
+				node.put(key, value);
+			} else {
+				node.remove(key);
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.lang.Object#toString()
+		 */
+		public String toString() {
+			return qualifier + '/' + key;
+		}
+	}
+
+	/**
+	 * Returns a new {@link Key} for the {@link ApiUIPlugin} preference store
+	 * 
+	 * @param key
+	 * @return the new {@link Key} for the {@link ApiUIPlugin} preference store
+	 */
+	protected final static Key getApiToolsKey(String key) {
+		return new Key(ApiPlugin.PLUGIN_ID, key);
+	}
+
+	private static final Key KEY_API_USE_SCAN_TYPE_PROBLEM = getApiToolsKey(IApiProblemTypes.API_USE_SCAN_TYPE_SEVERITY);
+	private static final Key KEY_API_USE_SCAN_METHOD_PROBLEM = getApiToolsKey(IApiProblemTypes.API_USE_SCAN_METHOD_SEVERITY);
+	private static final Key KEY_API_USE_SCAN_FIELD_PROBLEM = getApiToolsKey(IApiProblemTypes.API_USE_SCAN_FIELD_SEVERITY);
+
+	/**
+	 * An array of all of the keys for the page
+	 */
+	private static Key[] fgAllKeys = { KEY_API_USE_SCAN_TYPE_PROBLEM,
+			KEY_API_USE_SCAN_METHOD_PROBLEM, KEY_API_USE_SCAN_FIELD_PROBLEM };
+
+	/**
+	 * Constant representing the severity values presented in the combo boxes
+	 * for each option
+	 */
+	private static final String[] SEVERITIES_LABELS = {
+			PreferenceMessages.ApiErrorsWarningsConfigurationBlock_error,
+			PreferenceMessages.ApiErrorsWarningsConfigurationBlock_warning,
+			PreferenceMessages.ApiErrorsWarningsConfigurationBlock_ignore };
+
+	/**
+	 * Constant representing the severity values presented in the combo boxes
+	 * for each option
+	 */
+	private static final String[] SEVERITIES = { ApiPlugin.VALUE_ERROR,
+			ApiPlugin.VALUE_WARNING, ApiPlugin.VALUE_IGNORE, };
+
+	/**
+	 * Default selection listener for controls on the page
+	 */
+	private SelectionListener selectionlistener = new SelectionAdapter() {
+		public void widgetSelected(SelectionEvent e) {
+			if (e.widget instanceof Combo) {
+				Combo combo = (Combo) e.widget;
+				ControlData data = (ControlData) combo.getData();
+				data.key.setStoredValue(fLookupOrder[0], combo.getText(),
+						fManager);
+				ApiBaselinePreferencePage.rebuildcount = 0;
+			}
+		}
+	};
+
+	/**
+	 * Listing of all of the {@link Combo}s added to the block
+	 */
+	private Combo[] fCombo = null;
+
+	/**
+	 * The context of settings locations to search for values in
+	 */
+	IScopeContext[] fLookupOrder = null;
+
+	/**
+	 * the working copy manager to work with settings
+	 */
+	IWorkingCopyManager fManager = null;
+
+	/**
+	 * The main composite for the configuration block, used for
+	 * enabling/disabling the block
+	 */
+	private Composite fMainComp = null;
+
+	/**
+	 * Stored old fProject specific settings.
+	 */
+	// TODO will be used when we turn it into project specific settings
+	private IdentityHashMap fOldProjectSettings = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param project
+	 */
+	public ApiUseScanConfigurationBlock(IWorkingCopyManager manager) {
+		fLookupOrder = new IScopeContext[] { InstanceScope.INSTANCE,
+				DefaultScope.INSTANCE };
+		fManager = manager;
+		fOldProjectSettings = null;
+	}
+
+	/**
+	 * Creates the control in the parent control
+	 * 
+	 * @param parent
+	 *            the parent control
+	 */
+	public Control createControl(Composite parent) {
+		fMainComp = SWTFactory.createComposite(parent, 1, 1,
+				GridData.FILL_HORIZONTAL, 0, 0);
+		Group optionsProfileGroup = SWTFactory.createGroup(fMainComp,
+				PreferenceMessages.ApiUseScanConfigurationBlock_0, 2, 1,
+				GridData.FILL_BOTH);
+		fCombo = new Combo[3];
+		fCombo[0] = createComboControl(optionsProfileGroup,
+				PreferenceMessages.ApiUseScanConfigurationBlock_unresolvedTypeProblem,
+				KEY_API_USE_SCAN_TYPE_PROBLEM);
+		fCombo[1] = createComboControl(optionsProfileGroup,
+				PreferenceMessages.ApiUseScanConfigurationBlock_unresolvedMethodProblem,
+				KEY_API_USE_SCAN_METHOD_PROBLEM);
+		fCombo[2] = createComboControl(optionsProfileGroup,
+				PreferenceMessages.ApiUseScanConfigurationBlock_unresolvedFieldProblem,
+				KEY_API_USE_SCAN_FIELD_PROBLEM);
+		Dialog.applyDialogFont(fMainComp);
+		return fMainComp;
+	}
+
+	/**
+	 * Saves all of the changes on the page
+	 */
+	public void performOK() {
+		save();
+	}
+
+	/**
+	 * Directly applies all of the changes on the page
+	 */
+	public void performApply() {
+		save();
+	}
+
+	/**
+	 * Performs the save operation on the working copy manager
+	 */
+	private void save() {
+		try {
+			ArrayList changes = new ArrayList();
+			collectChanges(fLookupOrder[0], changes);
+			if (changes.size() > 0) {
+				fManager.applyChanges();
+			}
+
+		} catch (BackingStoreException bse) {
+			ApiPlugin.log(bse);
+		}
+	}
+
+	/**
+	 * Cancels all of the changes on the page
+	 */
+	public void performCancel() {
+	}
+
+	/**
+	 * Reverts all of the settings back to their defaults
+	 */
+	public void performDefaults() {
+		String defval = null;
+		for (int i = 0; i < fgAllKeys.length; i++) {
+			defval = fgAllKeys[i].getStoredValue(fLookupOrder, true, fManager);
+			fgAllKeys[i].setStoredValue(fLookupOrder[0], defval, fManager);
+		}
+		updateCombos();
+	}
+
+	/**
+	 * Updates all of the registered {@link Combo}s on the page. Registration
+	 * implies that the {@link Combo} control was added to the listing of
+	 * fCombos
+	 */
+	private void updateCombos() {
+		if (fCombo != null) {
+			for (int i = 0; i < fCombo.length; i++) {
+				ControlData data = (ControlData) fCombo[i].getData();
+				fCombo[i].select(data.getSelection(data.getKey()
+						.getStoredValue(fLookupOrder, false, fManager)));
+			}
+		}
+	}
+
+	/**
+	 * Disposes the controls from this page
+	 */
+	public void dispose() {
+		fMainComp.getParent().dispose();
+	}
+
+	/**
+	 * Creates a {@link Label} | {@link Combo} control. The combo is initialized
+	 * from the given {@link Key}
+	 * 
+	 * @param parent
+	 * @param label
+	 * @param key
+	 */
+	protected Combo createComboControl(Composite parent, String label, Key key) {
+		Label lbl = new Label(parent, SWT.NONE);
+		GridData gd = new GridData(GridData.BEGINNING, GridData.CENTER, true,
+				false);
+		lbl.setLayoutData(gd);
+		lbl.setText(label);
+		Combo combo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
+		gd = new GridData(GridData.END, GridData.CENTER, false, false);
+		combo.setLayoutData(gd);
+		ControlData data = new ControlData(key, SEVERITIES);
+		combo.setData(data);
+		combo.setItems(SEVERITIES_LABELS);
+		combo.addSelectionListener(selectionlistener);
+		combo.select(data.getSelection(key.getStoredValue(fLookupOrder, false,
+				fManager)));
+		return combo;
+	}
+
+	/**
+	 * Collects the keys that have changed on the page into the specified list
+	 * 
+	 * @param changes
+	 *            the {@link List} to collect changed keys into
+	 */
+	private void collectChanges(IScopeContext context, List changes) {
+		Key key = null;
+		String origval = null, newval = null;
+		boolean complete = fOldProjectSettings == null;
+		for (int i = 0; i < fgAllKeys.length; i++) {
+			key = fgAllKeys[i];
+			origval = key.getStoredValue(context, null);
+			newval = key.getStoredValue(context, fManager);
+			if (newval == null) {
+				if (origval != null) {
+					changes.add(key);
+				} else if (complete) {
+					key.setStoredValue(context,
+							key.getStoredValue(fLookupOrder, true, fManager),
+							fManager);
+					changes.add(key);
+				}
+			} else if (!newval.equals(origval)) {
+				changes.add(key);
+			}
+		}
+	}
+
+	public static Key[] getAllKeys() {
+		return fgAllKeys;
+	}
+
+	public void setEnabled(boolean enabled) {
+		fMainComp.setEnabled(enabled);
+		for (int i = 0; i < fCombo.length; i++) {
+			fCombo[i].setEnabled(enabled);
+		}
+
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiUseScanPreferencePage.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiUseScanPreferencePage.java
new file mode 100644
index 0000000..991a4e5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiUseScanPreferencePage.java
@@ -0,0 +1,489 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.ui.internal.preferences;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.search.UseScanManager;
+import org.eclipse.pde.api.tools.internal.util.Util;
+import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
+import org.eclipse.pde.api.tools.ui.internal.IApiToolsHelpContextIds;
+import org.eclipse.pde.api.tools.ui.internal.SWTFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.PreferenceLinkArea;
+import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
+import org.eclipse.ui.preferences.IWorkingCopyManager;
+import org.eclipse.ui.preferences.WorkingCopyManager;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * Preference page to allow users to add use scans.  The use scans are analyzed in the 
+ * API Tools builder to see if any methods found in the scan have been removed.
+ * 
+ * @since 3.7
+ */
+public class ApiUseScanPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+
+	public static final String ID = "org.eclipse.pde.api.tools.ui.apiusescan.prefpage"; //$NON-NLS-1$
+	
+	private IWorkingCopyManager fManager;
+	CheckboxTableViewer fTableViewer;
+	HashSet fLocationList = new HashSet();
+	Button remove = null;
+	Button editbutton = null;
+
+	/**
+	 * Column provider for the use scan table
+	 */
+	class TableColumnLabelProvider extends ColumnLabelProvider {
+		
+		Image archive = null;
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			if(archive != null) {
+				archive.dispose();
+			}
+			super.dispose();
+		}
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(Object element) {
+			File file = new File(element.toString());
+			if (file.isDirectory()) {
+				return PlatformUI.getWorkbench().getSharedImages().getImage(org.eclipse.ui.ISharedImages.IMG_OBJ_FOLDER);
+			}
+			if(archive == null) {
+				ImageDescriptor image = PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor(file.getName());
+				archive = image.createImage();
+			}
+			return archive;
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(IWorkbench workbench) {		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createContents(Composite parent) {
+		Composite comp = SWTFactory.createComposite(parent, 2, 1, GridData.FILL_HORIZONTAL, 0, 0);
+		
+		SWTFactory.createWrapLabel(comp, PreferenceMessages.ApiUseScanPreferencePage_0, 2, 250);
+		SWTFactory.createVerticalSpacer(comp, 1);
+		SWTFactory.createWrapLabel(comp, PreferenceMessages.ApiUseScanPreferencePage_2, 2);
+
+		Table table = new Table(comp, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER | SWT.CHECK | SWT.V_SCROLL);
+		table.setLayoutData(new GridData(GridData.FILL_BOTH));
+		GridData gd = (GridData) table.getLayoutData();
+		gd.widthHint = 250;
+		table.addKeyListener(new KeyAdapter() {
+			public void keyReleased(KeyEvent e) {
+				if (e.stateMask == SWT.NONE && e.keyCode == SWT.DEL) {
+					removeLocation();
+				}
+			}
+		});
+		fTableViewer = new CheckboxTableViewer(table);
+		fTableViewer.setLabelProvider(new TableColumnLabelProvider());
+		fTableViewer.setContentProvider(new ArrayContentProvider());
+
+		Composite bcomp = SWTFactory.createComposite(comp, 1, 1, GridData.FILL_VERTICAL | GridData.VERTICAL_ALIGN_BEGINNING, 0, 0);
+		Button button = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiUseScanPreferencePage_3, null);
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				select(true);
+			}
+		});
+		button = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiUseScanPreferencePage_10, null);
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				select(false);
+			}
+		});
+		
+		SWTFactory.createHorizontalSpacer(bcomp, 1);
+		
+		button = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiUseScanPreferencePage_4, null);
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				String loc = getDirectory(null);
+				if(loc != null) {
+					String exactLocation = UseScanManager.getExactScanLocation(loc);
+					if (exactLocation == null)
+						addLocation(loc);
+					else
+						addLocation(exactLocation);
+				}
+			}
+		});
+		button = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiUseScanPreferencePage_5, null);
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				String loc = getArchive(null);
+				if(loc != null) {
+					addLocation(loc);
+				}
+			}
+		});
+		
+		editbutton = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiUseScanPreferencePage_1, null);
+		editbutton.setEnabled(false);
+		editbutton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				edit();
+			}
+		});
+		remove = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiUseScanPreferencePage_6, null);
+		remove.setEnabled(false);
+		remove.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				removeLocation();
+			}
+		});
+		
+		fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				IStructuredSelection selection = (IStructuredSelection) fTableViewer.getSelection();
+				remove.setEnabled(!selection.isEmpty());
+				editbutton.setEnabled(selection.size() == 1);
+			}
+		});
+		fTableViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				edit();
+			}
+		});
+		
+		HashMap linkdata = new HashMap();
+		linkdata.put(ApiErrorsWarningsPreferencePage.INITIAL_TAB, new Integer(ApiErrorsWarningsConfigurationBlock.API_USE_SCANS_PAGE_ID));
+		PreferenceLinkArea apiErrorLinkArea = new PreferenceLinkArea(comp, SWT.NONE,
+				ApiErrorsWarningsPreferencePage.ID, PreferenceMessages.ApiUseScanPreferencePage_9,
+				(IWorkbenchPreferenceContainer) getContainer(), linkdata);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
+		data.widthHint = 250;
+		data.horizontalSpan = 2;
+		apiErrorLinkArea.getControl().setLayoutData(data);
+		
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IApiToolsHelpContextIds.APIUSESCANS_PREF_PAGE);
+		performInit();
+		validateScans();
+		Dialog.applyDialogFont(comp);
+		return comp;
+	}
+
+	/**
+	 * Selects (checks) all of the entries in the table
+	 * @param checked
+	 */
+	void select(boolean checked) {
+		fTableViewer.setAllChecked(checked);
+		fTableViewer.refresh();
+	}
+	
+	/**
+	 * Allows users to select a directory with a use scan in it
+	 * @param prevLocation
+	 * @return the new directory or <code>null</code> if the dialog was cancelled
+	 */
+	String getDirectory(String prevLocation) {
+		DirectoryDialog dialog = new DirectoryDialog(getShell());
+		dialog.setMessage(PreferenceMessages.ApiUseScanPreferencePage_7);
+		if (prevLocation != null) {
+			dialog.setFilterPath(prevLocation);
+		}
+		return dialog.open();
+	}
+	
+	/**
+	 * Allows the user to select an archive from the file system
+	 * 
+	 * @param file a starting file
+	 * @return the path to the new archive or <code>null</code> if cancelled
+	 */
+	String getArchive(File file) {
+		FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
+		dialog.setFilterNames(new String[] {PreferenceMessages.archives__zip});
+		dialog.setFilterExtensions(new String[] {"*.zip;*.jar"}); //$NON-NLS-1$
+		if (file != null) {
+			dialog.setFilterPath(file.getParent());
+			dialog.setFileName(file.getName());
+		}
+		return dialog.open();
+	}
+	
+	/**
+	 * Adds the given location to the table
+	 * @param location
+	 */
+	void addLocation(String location) {
+		fLocationList.add(location);
+		fTableViewer.refresh();
+		fTableViewer.setChecked(location, true);
+		fTableViewer.setSelection(new StructuredSelection(location));
+		//do the whole pass in case you have more than one invalid location
+		validateScans();
+	}
+
+	/**
+	 * Allows you to edit the location of the scan
+	 */
+	void edit() {
+		IStructuredSelection selection = (IStructuredSelection) fTableViewer.getSelection();
+		String location = selection.getFirstElement().toString();			
+		File file = new File(location);
+		String newloc = null;
+		if (file.isDirectory()) {
+			newloc = getDirectory(location);
+		} else {
+			newloc = getArchive(file);
+		}
+		if(newloc != null) {
+			fLocationList.remove(location);
+			addLocation(newloc);
+		}
+	}
+	
+	/**
+	 * Removes the selected locations
+	 */
+	void removeLocation() {
+		IStructuredSelection selection = (IStructuredSelection) fTableViewer.getSelection();
+		fLocationList.removeAll(selection.toList());
+		fTableViewer.refresh();
+		validateScans();
+	}
+
+	/**
+	 * Validates that the scan are all still valid
+	 */
+	private void validateScans() {
+		if (fLocationList.size() > 0) {
+			String loc = null;
+			for (Iterator iterator = fLocationList.iterator(); iterator.hasNext();) {
+				loc = (String) iterator.next();
+				if (!UseScanManager.isValidScanLocation(loc)) {
+					setErrorMessage(NLS.bind(PreferenceMessages.ApiUseScanPreferencePage_8, loc));
+					setValid(false);
+					return;
+				}
+			}
+		}
+		setValid(true);
+		setErrorMessage(null);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.PreferencePage#performOk()
+	 */
+	public boolean performOk() {
+		applyChanges();
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.PreferencePage#performApply()
+	 */
+	protected void performApply() {
+		applyChanges();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
+	 */
+	protected void performDefaults() {
+		fLocationList.clear();
+		fTableViewer.refresh();
+		super.performDefaults();
+	}
+	
+	/**
+	 * Initializes the page
+	 */
+	private void performInit() {
+		if (getContainer() == null) {
+			fManager = new WorkingCopyManager();
+		} else {
+			fManager = ((IWorkbenchPreferenceContainer) getContainer()).getWorkingCopyManager();
+		}
+
+		fLocationList.clear();
+
+		String location = getStoredValue(IApiCoreConstants.API_USE_SCAN_LOCATION, null);
+		
+		ArrayList checkedLocations = new ArrayList();
+		if (location != null && location.length() > 0) {
+			String[] locations = location.split(UseScanManager.ESCAPE_REGEX + UseScanManager.LOCATION_DELIM);
+			for (int i = 0; i < locations.length; i++) {
+				String values[] = locations[i].split(UseScanManager.ESCAPE_REGEX + UseScanManager.STATE_DELIM);
+				fLocationList.add(values[0]);
+				if (Boolean.valueOf(values[1]).booleanValue())
+					checkedLocations.add(values[0]);
+			}			
+			fLocationList.remove(""); //$NON-NLS-1$
+		}
+		fTableViewer.setInput(fLocationList);
+		fTableViewer.setCheckedElements(checkedLocations.toArray(new String[checkedLocations.size()]));
+		fTableViewer.refresh();
+		
+		setErrorMessage(null);
+	}
+
+	/**
+	 * Save changes to the preferences
+	 */
+	private void applyChanges() {
+		StringBuffer locations = new StringBuffer();
+		for (Iterator iterator = fLocationList.iterator(); iterator.hasNext();) {
+			Object location = iterator.next();
+			locations.append(location);
+			locations.append(UseScanManager.STATE_DELIM);
+			locations.append(fTableViewer.getChecked(location));
+			locations.append(UseScanManager.LOCATION_DELIM);
+		}
+		
+		if (hasLocationsChanges(locations.toString())) {
+			IProject[] projects = Util.getApiProjects();
+			// If there are API projects in the workspace, ask the user if they should be cleaned and built to run the new tooling
+			if (projects != null){
+				if(MessageDialog.openQuestion(getShell(), PreferenceMessages.ApiUseScanPreferencePage_11, PreferenceMessages.ApiUseScanPreferencePage_12)) {
+					Util.getBuildJob(projects).schedule();
+				}
+			}
+		}
+		
+		setStoredValue(IApiCoreConstants.API_USE_SCAN_LOCATION, locations.toString());
+			
+		try {
+			fManager.applyChanges();
+		} catch (BackingStoreException e) {
+			ApiUIPlugin.log(e);
+		}
+	}
+
+	/**
+	 * Detects changes to the use scan locations
+	 * @param newLocations
+	 * @return if there have been changes to the use scan entries
+	 */
+	private boolean hasLocationsChanges(String newLocations) {
+		String oldLocations = getStoredValue(IApiCoreConstants.API_USE_SCAN_LOCATION, null);
+		
+		if (oldLocations != null && oldLocations.equalsIgnoreCase(newLocations)) {
+			return false;
+		}
+		
+		ArrayList oldCheckedElements = new ArrayList();
+		if (oldLocations != null && oldLocations.length() > 0) {
+			String[] locations = oldLocations.split(UseScanManager.ESCAPE_REGEX + UseScanManager.LOCATION_DELIM);
+			for (int i = 0; i < locations.length; i++) {
+				String values[] = locations[i].split(UseScanManager.ESCAPE_REGEX + UseScanManager.STATE_DELIM);
+				if (Boolean.valueOf(values[1]).booleanValue()) {
+					oldCheckedElements.add(values[0]);
+				}
+			}			
+		}
+		Object[] newCheckedLocations = fTableViewer.getCheckedElements();
+		if (newCheckedLocations.length != oldCheckedElements.size()) {
+			return true;
+		}
+		for (int i = 0; i < newCheckedLocations.length; i++) {
+			if (!oldCheckedElements.contains(newCheckedLocations[i])) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Sets the value to the given preference key
+	 * @param key
+	 * @param value
+	 */
+	public void setStoredValue(String key, String value) {
+		IEclipsePreferences node = getNode();
+		if (value != null) {
+			node.put(key, value);
+		} else {
+			node.remove(key);
+		}
+	}
+
+	/**
+	 * Retrieves the value for the given preference key or the returns the given default if it is not defined
+	 * @param key
+	 * @param defaultValue
+	 * @return the stored value or the specified default 
+	 */
+	public String getStoredValue(String key, String defaultValue) {
+		IEclipsePreferences node = getNode();
+		if (node != null) {
+			return node.get(key, defaultValue);
+		}
+		return defaultValue;
+	}
+
+	/**
+	 * @return the root preference node for the API tools core plug-in
+	 */
+	private IEclipsePreferences getNode() {
+		IEclipsePreferences node = (InstanceScope.INSTANCE).getNode(ApiPlugin.PLUGIN_ID);
+		if (fManager != null) {
+			return fManager.getWorkingCopy(node);
+		}
+		return node;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java
index a8b28ba..1a987ed 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ public class PreferenceMessages extends NLS {
 	public static String ApiProblemSeveritiesConfigurationBlock_8;
 	public static String ApiProblemSeveritiesConfigurationBlock_9;
 	public static String ApiProblemSeveritiesConfigurationBlock_10;
+	public static String ApiProblemSeveritiesConfigurationBlock_11;
 	public static String ApiProfilesPreferencePage_0;
 	public static String ApiProfilesPreferencePage_1;
 	public static String ApiProfilesPreferencePage_2;
@@ -39,6 +40,7 @@ public class PreferenceMessages extends NLS {
 	public static String ApiToolingNotificationsBlock_1;
 	public static String ApiToolingNotificationsBlock_2;
 	public static String ApiToolingNotificationsBlock_3;
+	public static String ApiToolingNotificationsBlock_4;
 	public static String CompatibilityAPIComponentElement;
 	public static String CompatibilityAnnotationElement;
 	public static String CompatibilityInterfaceElement;
@@ -171,6 +173,24 @@ public class PreferenceMessages extends NLS {
 	public static String ApiProblemSeveritiesConfigurationBlock_checkable_ees_link_label;
 	public static String ApiProblemSeveritiesConfigurationBlock_checkable_ees_error_dialog_title;
 	public static String ApiProblemSeveritiesConfigurationBlock_checkable_ees_error_dialog_description;
+	public static String ApiUseScanConfigurationBlock_0;
+	public static String ApiUseScanConfigurationBlock_unresolvedTypeProblem;
+	public static String ApiUseScanConfigurationBlock_unresolvedMethodProblem;
+	public static String ApiUseScanConfigurationBlock_unresolvedFieldProblem;
+	public static String ApiUseScanPreferencePage_0;
+	public static String ApiUseScanPreferencePage_1;
+	public static String ApiUseScanPreferencePage_10;
+	public static String ApiUseScanPreferencePage_11;
+	public static String ApiUseScanPreferencePage_12;
+	public static String ApiUseScanPreferencePage_2;
+	public static String ApiUseScanPreferencePage_3;
+	public static String ApiUseScanPreferencePage_4;
+	public static String ApiUseScanPreferencePage_5;
+	public static String ApiUseScanPreferencePage_6;
+	public static String ApiUseScanPreferencePage_7;
+	public static String ApiUseScanPreferencePage_8;
+	public static String ApiUseScanPreferencePage_9;
+	public static String archives__zip;
 
 	static {
 		// initialize resource bundle
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties
index 0f3fbc9..842f13c 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/preferencemessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2010 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ ApiProblemSeveritiesConfigurationBlock_3=Select the severity level for the follo
 ApiProblemSeveritiesConfigurationBlock_8=Select the severity level for the following API compatibility options:
 ApiProblemSeveritiesConfigurationBlock_9=Select the severity level for the following version management options:
 ApiProblemSeveritiesConfigurationBlock_10=Select the severity level for the following API analysis options:
+ApiProblemSeveritiesConfigurationBlock_11=Select the severity level for the following API use scans options:
 ApiProblemSeveritiesNoImplement=Implementing an interface tagged '@noimplement':
 ApiProblemSeveritiesNoExtend=Extending a type tagged '@noextend':
 ApiProblemSeveritiesNoReference=Referencing a field or method tagged '@noreference':
@@ -33,6 +34,7 @@ ApiToolingNotificationsBlock_0=API &Use
 ApiToolingNotificationsBlock_1=A&PI Compatibility
 ApiToolingNotificationsBlock_2=&Version Management
 ApiToolingNotificationsBlock_3=A&nalysis Options
+ApiToolingNotificationsBlock_4=API Use &Scans
 CompatibilityAPIComponentElement=&Bundle
 CompatibilityAnnotationElement=Annotati&on
 CompatibilityInterfaceElement=In&terface
@@ -40,7 +42,7 @@ CompatibilityClassElement=&Class
 CompatibilityEnumElement=Enu&m
 CompatibilityFieldElement=&Field
 CompatibilityMethodElement=Met&hod
-CompatibilityConstructorElement=Con&structor
+CompatibilityConstructorElement=Constructor
 CompatibilityTypeParameterElement=T&ype Parameter
 ProjectSelectionDialog_title=Project Specific Configuration
 ProjectSelectionDialog_message=&Select the project to configure:
@@ -164,3 +166,21 @@ ApiErrorsWarningsConfigurationBlock_no_ees_installed=There are no execution desc
 ApiProblemSeveritiesConfigurationBlock_checkable_ees_link_label=Additional environment descriptions are available: <a>install them now</a>
 ApiProblemSeveritiesConfigurationBlock_checkable_ees_error_dialog_title=An error occurred
 ApiProblemSeveritiesConfigurationBlock_checkable_ees_error_dialog_description=The "Install New Software..." wizard could not be opened.\nCheck the .log file.
+ApiUseScanConfigurationBlock_0=Options
+ApiUseScanConfigurationBlock_unresolvedTypeProblem=Unresolved &type problem:
+ApiUseScanConfigurationBlock_unresolvedMethodProblem=Unresolved &method problem:
+ApiUseScanConfigurationBlock_unresolvedFieldProblem=Unresolved &field problem:
+ApiUseScanPreferencePage_0=Add, remove or edit API use scans. The references found in the use scans will be compared to projects in the workspace to ensure they still exist. 
+ApiUseScanPreferencePage_1=&Edit Location...
+ApiUseScanPreferencePage_10=Dese&lect All
+ApiUseScanPreferencePage_11=Locations changed
+ApiUseScanPreferencePage_12=Active API use scan locations have changed. A full build is required for the changes to take effect.\n\nDo a full build now?
+ApiUseScanPreferencePage_2=&Use scan locations:
+ApiUseScanPreferencePage_3=&Select All
+ApiUseScanPreferencePage_4=Add Dire&ctory...
+ApiUseScanPreferencePage_5=Add &Archive...
+ApiUseScanPreferencePage_6=&Remove
+ApiUseScanPreferencePage_7=Select the API use ucan report location
+ApiUseScanPreferencePage_8={0} is not a valid API use scan location.
+ApiUseScanPreferencePage_9=To change the severity of reported problems, see <a>'API Errors/Warnings'</a>.
+archives__zip=Archives (*.zip,*.jar)
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/properties/ApiErrorsWarningsPropertyPage.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/properties/ApiErrorsWarningsPropertyPage.java
index 80f93dc..9d335c1 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/properties/ApiErrorsWarningsPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/properties/ApiErrorsWarningsPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,7 +33,7 @@ import org.eclipse.ui.dialogs.PropertyPage;
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
 /**
- * Provides a property page for projects to allow project specific API tooling 
+ * Provides a property page for projects to allow project specific API Tools 
  * settings to be applied;
  *  
  * @since 1.0.0
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseLaunchDelegate.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseLaunchDelegate.java
index 34d5148..b372d04 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseLaunchDelegate.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseLaunchDelegate.java
@@ -52,6 +52,15 @@ public class ApiUseLaunchDelegate extends LaunchConfigurationDelegate {
 	public static final String JAR_PATTERNS_LIST = ApiUIPlugin.PLUGIN_ID + ".JAR_PATTERNS_LIST"; //$NON-NLS-1$
 	public static final String REPORT_PATTERNS_LIST = ApiUIPlugin.PLUGIN_ID + ".REPORT_PATTERNS_LIST"; //$NON-NLS-1$
 	public static final String REPORT_TO_PATTERNS_LIST = ApiUIPlugin.PLUGIN_ID + ".TO_PATTERNS_LIST"; //$NON-NLS-1$
+	
+	/**
+	 * Type of report to produce.  Integer value selected between possible values {@link #REPORT_KIND_CONSUMER} and
+	 * {@link #REPORT_KIND_PRODUCER}.
+	 */
+	public static final String REPORT_TYPE = ApiUIPlugin.PLUGIN_ID + ".REPORT_TYPE"; //$NON-NLS-1$
+	public static final int REPORT_KIND_PRODUCER = 1;
+	public static final int REPORT_KIND_CONSUMER = 2;
+	
 	/**
 	 * Scope of bundles to search - a regular expression to match against bundle symbolic names.
 	 * Unspecified indicates all bundles in the bundle source.
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUsePatternTab.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUsePatternTab.java
index b223a2b..83a8a5d 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUsePatternTab.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUsePatternTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,6 +50,7 @@ import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.PlatformUI;
@@ -230,6 +231,20 @@ public class ApiUsePatternTab extends AbstractLaunchConfigurationTab {
 		setControl(comp);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getShell()
+	 */
+	protected Shell getShell() {
+		return super.getShell();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#updateLaunchConfigurationDialog()
+	 */
+	protected void updateLaunchConfigurationDialog() {
+		super.updateLaunchConfigurationDialog();
+	}
+	
 	/**
 	 * Removes the selected elements from the table
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanJob.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanJob.java
index 11a8ef6..614e151 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanJob.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@ import org.eclipse.pde.api.tools.internal.provisional.search.ApiSearchEngine;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchReporter;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchRequestor;
 import org.eclipse.pde.api.tools.internal.search.ApiDescriptionModifier;
+import org.eclipse.pde.api.tools.internal.search.ConsumerReportConvertor;
 import org.eclipse.pde.api.tools.internal.search.SkippedComponent;
 import org.eclipse.pde.api.tools.internal.search.UseMetadata;
 import org.eclipse.pde.api.tools.internal.search.UseReportConverter;
@@ -49,8 +50,6 @@ import org.eclipse.pde.api.tools.internal.search.UseSearchRequestor;
 import org.eclipse.pde.api.tools.internal.search.XmlSearchReporter;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
-import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.core.target.provisional.IBundleContainer;
 import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
 import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
 import org.eclipse.pde.internal.core.target.provisional.ITargetHandle;
@@ -166,6 +165,7 @@ public class ApiUseScanJob extends Job {
 				finally {
 					reporter.reportNotSearched((IApiElement[]) ApiUseScanJob.this.notsearched.toArray(new IApiElement[ApiUseScanJob.this.notsearched.size()]));
 					reporter.reportMetadata(data);
+					reporter.reportCounts();
 					// Dispose the baseline if it's not managed (it's temporary)
 					ApiBaselineManager apiManager = ApiBaselineManager.getManager();
 					IApiBaseline[] baselines = apiManager.getApiBaselines();
@@ -187,7 +187,14 @@ public class ApiUseScanJob extends Job {
 			if(isSpecified(ApiUseLaunchDelegate.CREATE_HTML)) {
 				localmonitor.setTaskName(Messages.ApiUseScanJob_generating_html_reports);
 				String htmlPath = rootpath.append("html").toOSString(); //$NON-NLS-1$
+				
+				int reportType = ApiUseLaunchDelegate.REPORT_KIND_PRODUCER;
+				if (this.configuration.getAttribute(ApiUseLaunchDelegate.REPORT_TYPE, ApiUseLaunchDelegate.REPORT_KIND_PRODUCER) == ApiUseLaunchDelegate.REPORT_KIND_CONSUMER){
+					reportType = ApiUseLaunchDelegate.REPORT_KIND_CONSUMER;
+				}
+				
 				performReportCreation(
+						reportType,
 						isSpecified(ApiUseLaunchDelegate.CLEAN_HTML),
 						htmlPath,
 						xmlPath,
@@ -251,7 +258,7 @@ public class ApiUseScanJob extends Job {
 				if (!file.exists() || !file.isDirectory()) {
 					abort(MessageFormat.format(Messages.ApiUseScanJob_intall_dir_does_no_exist, new String[]{path}));
 				}
-				return createBaseline(new Path(file.getAbsolutePath()), monitor);
+				return createBaseline(path, monitor);
 			case ApiUseLaunchDelegate.KIND_TARGET_DEFINITION:
 				String memento = this.configuration.getAttribute(ApiUseLaunchDelegate.TARGET_HANDLE, (String)null);
 				if (memento == null) {
@@ -273,7 +280,7 @@ public class ApiUseScanJob extends Job {
 	 * @return service or <code>null</code>
 	 */
 	private ITargetPlatformService getTargetService() {
-		return (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
+		return (ITargetPlatformService) ApiPlugin.getDefault().acquireService(ITargetPlatformService.class.getName());
 	}
 	
 	/**
@@ -366,6 +373,7 @@ public class ApiUseScanJob extends Job {
 	
 	/**
 	 * Performs the report creation
+	 * @param reportType what report converter to use, either {@link ApiUseLaunchDelegate#REPORT_KIND_PRODUCER} or {@link ApiUseLaunchDelegate#REPORT_KIND_CONSUMER}
 	 * @param cleanh
 	 * @param hlocation
 	 * @param rlocation
@@ -373,7 +381,8 @@ public class ApiUseScanJob extends Job {
 	 * @param monitor
 	 * @throws OperationCanceledException
 	 */
-	void performReportCreation(boolean cleanh, 
+	void performReportCreation(int reportType, 
+			boolean cleanh, 
 			String hlocation, 
 			String rlocation, 
 			boolean openhtml,
@@ -385,7 +394,13 @@ public class ApiUseScanJob extends Job {
 			cleanReportLocation(hlocation, localmonitor.newChild(5));
 		}
 		try {
-			UseReportConverter converter = new UseReportConverter(hlocation, rlocation, topatterns, frompatterns);
+			UseReportConverter converter = null;
+			if (reportType == ApiUseLaunchDelegate.REPORT_KIND_CONSUMER){
+				converter = new ConsumerReportConvertor(hlocation, rlocation, topatterns, frompatterns);
+			} else {
+				converter = new UseReportConverter(hlocation, rlocation, topatterns, frompatterns);
+			}
+			
 			converter.convert(null, localmonitor.newChild(5));
 			if(openhtml) {
 				final File index = converter.getReportIndex();
@@ -485,39 +500,19 @@ public class ApiUseScanJob extends Job {
 	}	
 	
 	/**
-	 * Creates a baseline at an install location, as a plain directory (does not treat as an install).
+	 * Creates a baseline at an install location
 	 * 
 	 * @param path
 	 * @param monitor
 	 */
-	private IApiBaseline createBaseline(IPath path, IProgressMonitor monitor) throws CoreException {
+	private IApiBaseline createBaseline(String installLocation, IProgressMonitor monitor) throws CoreException {
 		SubMonitor localmonitor = SubMonitor.convert(monitor, Messages.ApiUseScanJob_scanning, 10);
-		ITargetPlatformService service = (ITargetPlatformService) ApiUIPlugin.getDefault().acquireService(ITargetPlatformService.class.getName());
-		IBundleContainer container = service.newDirectoryContainer(path.toOSString());
-		// treat as an installation, if that fails, try plug-ins directory
-		ITargetDefinition definition = service.newTarget();
-		container.resolve(definition, localmonitor.newChild(1));
-		Util.updateMonitor(localmonitor, 1);
-		IResolvedBundle[] bundles = container.getBundles();
-		List components = new ArrayList();
-		IApiBaseline profile = ApiModelFactory.newApiBaseline(this.configuration.getName());
-		Util.updateMonitor(localmonitor, 1);
-		if (bundles.length > 0) {
-			localmonitor.setWorkRemaining(bundles.length);
-			for (int i = 0; i < bundles.length; i++) {
-				Util.updateMonitor(localmonitor, 1);
-				if (bundles[i].getStatus().isOK() && !bundles[i].isSourceBundle()) {
-					IApiComponent component = ApiModelFactory.newApiComponent(profile, URIUtil.toFile(bundles[i].getBundleInfo().getLocation()).getAbsolutePath());
-					if (component != null) {
-						components.add(component);
-					}
-				}
-			}
-		} else {
-			abort(MessageFormat.format(Messages.ApiUseScanJob_no_bundles, new String[]{path.toOSString()}));
+		IApiBaseline baseline = ApiModelFactory.newApiBaseline(this.configuration.getName());
+		IApiComponent[] components = ApiModelFactory.addComponents(baseline, installLocation, localmonitor);
+		if (components.length == 0){
+			abort(MessageFormat.format(Messages.ApiUseScanJob_no_bundles, new String[]{installLocation}));
 		}
-		profile.addApiComponents((IApiComponent[]) components.toArray(new IApiComponent[components.size()]));
-		return profile;
+		return baseline;
 	}	
 	
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanTab.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanTab.java
index f46ebf2..efa87ad 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanTab.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/ApiUseScanTab.java
@@ -81,7 +81,7 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 	};
 	
 	boolean initializing = false;
-	Combo baseline, targetCombo;
+	Combo baseline, targetCombo, reportTypeCombo;
 	Button radioBaseline = null, 
 		   radioTarget = null, 
 		   radioInstall = null,
@@ -113,14 +113,14 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 		GridLayout layout = (GridLayout) comp.getLayout();
 		layout.makeColumnsEqualWidth = true;
 		
-		Group group = SWTFactory.createGroup(comp, Messages.ApiUseScanTab_analuze, 3, 3, GridData.FILL_HORIZONTAL);
-		this.radioBaseline = SWTFactory.createRadioButton(group, Messages.ApiUseScanTab_api_baseline);
+		Group reportGroup = SWTFactory.createGroup(comp, Messages.ApiUseScanTab_analuze, 3, 3, GridData.FILL_HORIZONTAL);
+		this.radioBaseline = SWTFactory.createRadioButton(reportGroup, Messages.ApiUseScanTab_api_baseline);
 		this.radioBaseline.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				updateTarget();
 			}
 		});
-		this.baseline = SWTFactory.createCombo(group, 
+		this.baseline = SWTFactory.createCombo(reportGroup, 
 				SWT.BORDER | SWT.FLAT | SWT.READ_ONLY, 
 				1, 
 				GridData.BEGINNING | GridData.FILL_HORIZONTAL, 
@@ -128,7 +128,7 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 		GridData gd = (GridData) this.baseline.getLayoutData();
 		gd.grabExcessHorizontalSpace = true;
 		this.baseline.addSelectionListener(selectionadapter);
-		this.baselinesButton = SWTFactory.createPushButton(group, Messages.ApiUseScanTab_baselines, null);
+		this.baselinesButton = SWTFactory.createPushButton(reportGroup, Messages.ApiUseScanTab_baselines, null);
 		this.baselinesButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				int bef = ApiUseScanTab.this.baseline.getSelectionIndex();
@@ -151,13 +151,13 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 			}
 		});
 		
-		this.radioTarget = SWTFactory.createRadioButton(group, Messages.ApiUseScanTab_target_definitions);
+		this.radioTarget = SWTFactory.createRadioButton(reportGroup, Messages.ApiUseScanTab_target_definitions);
 		this.radioTarget.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				updateTarget();
 			}
 		});
-		this.targetCombo = SWTFactory.createCombo(group, 
+		this.targetCombo = SWTFactory.createCombo(reportGroup, 
 				SWT.BORDER | SWT.FLAT | SWT.READ_ONLY, 
 				1, 
 				GridData.BEGINNING | GridData.FILL_HORIZONTAL, 
@@ -165,7 +165,7 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 		gd = (GridData) this.targetCombo.getLayoutData();
 		gd.grabExcessHorizontalSpace = true;
 		this.targetCombo.addSelectionListener(selectionadapter);
-		this.targetsButton = SWTFactory.createPushButton(group, Messages.ApiUseScanTab_targets, null);
+		this.targetsButton = SWTFactory.createPushButton(reportGroup, Messages.ApiUseScanTab_targets, null);
 		this.targetsButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				int index = ApiUseScanTab.this.targetCombo.getSelectionIndex();
@@ -187,23 +187,29 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 			}
 		});
 		
-		this.radioInstall = SWTFactory.createRadioButton(group, Messages.ApiUseScanTab_install_location);
+		this.radioInstall = SWTFactory.createRadioButton(reportGroup, Messages.ApiUseScanTab_install_location);
 		this.radioInstall.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				updateTarget();
 			}
 		});
-		this.installLocation = SWTFactory.createText(group, SWT.SINGLE | SWT.FLAT | SWT.BORDER, 1, GridData.FILL_HORIZONTAL);
+		this.installLocation = SWTFactory.createText(reportGroup, SWT.SINGLE | SWT.FLAT | SWT.BORDER, 1, GridData.FILL_HORIZONTAL);
 		gd = (GridData) this.installLocation.getLayoutData();
 		gd.grabExcessHorizontalSpace = true;
-		this.installButton = SWTFactory.createPushButton(group, Messages.ApiUseScanTab_browse, null);
+		this.installLocation.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				scheduleUpdate();
+			}
+		});
+		
+		this.installButton = SWTFactory.createPushButton(reportGroup, Messages.ApiUseScanTab_browse, null);
 		this.installButton.addSelectionListener(new SelectionAdapter(){
 			public void widgetSelected(SelectionEvent e) {
 				handleFolderBrowse(ApiUseScanTab.this.installLocation, Messages.ApiUseScanTab_select_install_location);
 				updateDialog();
 			}
 		});
-		this.radioReportOnly = SWTFactory.createRadioButton(group, Messages.ApiUseScanTab_generate_html_only);
+		this.radioReportOnly = SWTFactory.createRadioButton(reportGroup, Messages.ApiUseScanTab_generate_html_only);
 		gd = (GridData)this.radioReportOnly.getLayoutData();
 		gd.grabExcessHorizontalSpace = true;
 		gd.horizontalSpan = 2;
@@ -231,41 +237,47 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 		this.searchScope = SWTFactory.createText(searchInGroup, SWT.SINGLE | SWT.FLAT | SWT.BORDER, 1, GridData.FILL_HORIZONTAL);
 		this.searchScope.addModifyListener(modifyadapter);
 		
-		group = SWTFactory.createGroup(comp, Messages.ApiUseScanTab_reporting, 2, 2, GridData.FILL_HORIZONTAL);
-		SWTFactory.createLabel(group, Messages.ApiUseScanTab_report_location, 2);
-		this.reportlocation = SWTFactory.createText(group, SWT.SINGLE | SWT.FLAT | SWT.BORDER, 1, GridData.FILL_HORIZONTAL);
+		reportGroup = SWTFactory.createGroup(comp, Messages.ApiUseScanTab_reporting, 2, 2, GridData.FILL_HORIZONTAL);
+		
+		Composite reportTypeComp = SWTFactory.createComposite(reportGroup, 2, 2, GridData.BEGINNING, 0, 0);
+		SWTFactory.createLabel(reportTypeComp, Messages.ApiUseScanTab_reportType, 1);
+		reportTypeCombo = SWTFactory.createCombo(reportTypeComp, SWT.READ_ONLY, 1, GridData.FILL_BOTH, new String[] {Messages.ApiUseScanTab_referencedBundlesReport, Messages.ApiUseScanTab_referencingBundlesReport});
+		reportTypeCombo.addSelectionListener(selectionadapter);
+		
+		SWTFactory.createLabel(reportGroup, Messages.ApiUseScanTab_report_location, 2);
+		this.reportlocation = SWTFactory.createText(reportGroup, SWT.SINGLE | SWT.FLAT | SWT.BORDER, 1, GridData.FILL_HORIZONTAL);
 		this.reportlocation.addModifyListener(modifyadapter);
 		gd = (GridData) this.reportlocation.getLayoutData();
 		gd.grabExcessHorizontalSpace = true;
-		Button browse = SWTFactory.createPushButton(group, Messages.ApiUseScanTab_brows_e_, null);
+		Button browse = SWTFactory.createPushButton(reportGroup, Messages.ApiUseScanTab_brows_e_, null);
 		browse.addSelectionListener(new SelectionAdapter(){
 			public void widgetSelected(SelectionEvent e) {
-				handleFolderBrowse(ApiUseScanTab.this.reportlocation, "Select the location to write the report to"); //$NON-NLS-1$
+				handleFolderBrowse(ApiUseScanTab.this.reportlocation, Messages.ApiUseScanTab_SelectDirectory);
 			}
 		});
-		this.cleanreportlocation = SWTFactory.createCheckButton(group, Messages.ApiUseScanTab_clean_report_dir, null, false, 2);
+		this.cleanreportlocation = SWTFactory.createCheckButton(reportGroup, Messages.ApiUseScanTab_clean_report_dir, null, false, 2);
 		gd = (GridData) this.cleanreportlocation.getLayoutData();
 		this.cleanreportlocation.addSelectionListener(selectionadapter);
 		gd.horizontalIndent = 10;
 		
-		this.createhtml = SWTFactory.createCheckButton(group, Messages.ApiUseScanTab_create_html_report, null, false, 2);
+		this.createhtml = SWTFactory.createCheckButton(reportGroup, Messages.ApiUseScanTab_create_html_report, null, false, 2);
 		this.createhtml.addSelectionListener(new SelectionAdapter(){
 			public void widgetSelected(SelectionEvent e) {
 				updateReportOptions();
 				updateDialog();
 			}
 		});
-		this.cleanhtmllocation = SWTFactory.createCheckButton(group, Messages.ApiUseScanTab_clean_html_report_dir, null, false, 2);
+		this.cleanhtmllocation = SWTFactory.createCheckButton(reportGroup, Messages.ApiUseScanTab_clean_html_report_dir, null, false, 2);
 		gd = (GridData) this.cleanhtmllocation.getLayoutData();
 		gd.horizontalIndent = 10;
 		this.cleanhtmllocation.addSelectionListener(selectionadapter);
-		this.openreport = SWTFactory.createCheckButton(group, Messages.ApiUseScanTab_open_report, null, false, 2);
+		this.openreport = SWTFactory.createCheckButton(reportGroup, Messages.ApiUseScanTab_open_report, null, false, 2);
 		gd = (GridData) this.openreport.getLayoutData();
 		gd.horizontalIndent = 10;
 		this.openreport.setEnabled(false);
 		this.openreport.addSelectionListener(selectionadapter);
-		SWTFactory.createLabel(group, Messages.ApiUseScanTab_description, 1);
-		this.description = SWTFactory.createText(group, SWT.BORDER | SWT.V_SCROLL | SWT.WRAP, 2, GridData.FILL_HORIZONTAL);
+		SWTFactory.createLabel(reportGroup, Messages.ApiUseScanTab_description, 1);
+		this.description = SWTFactory.createText(reportGroup, SWT.BORDER | SWT.V_SCROLL | SWT.WRAP, 2, GridData.FILL_HORIZONTAL);
 		gd = (GridData) this.description.getLayoutData();
 		gd.heightHint = 40;
 		this.description.addModifyListener(modifyadapter);
@@ -283,10 +295,17 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 	/**
 	 * Avoid synthetic accessor
 	 */
+	void scheduleUpdate(){
+		scheduleUpdateJob();
+	}
+	
+	/**
+	 * Avoid synthetic accessor
+	 */
 	Shell getTabShell() {
 		return getShell();
 	}
-	
+
 	/**
 	 * The selected target has changed (radio selection). Update control enabled state and dialog.
 	 */
@@ -503,6 +522,14 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 			this.considerapi.setSelection(isSpecified(ApiUseLaunchDelegate.MOD_API_REFERENCES, configuration));
 			this.considerinternal.setSelection(isSpecified(ApiUseLaunchDelegate.MOD_INTERNAL_REFERENCES, configuration));
 			this.consideruse.setSelection(isSpecified(ApiUseLaunchDelegate.MOD_ILLEGAL_USE, configuration));
+			
+			int reportType = configuration.getAttribute(ApiUseLaunchDelegate.REPORT_TYPE, ApiUseLaunchDelegate.REPORT_KIND_PRODUCER);
+			if (reportType == ApiUseLaunchDelegate.REPORT_KIND_CONSUMER){
+				this.reportTypeCombo.select(1);
+			} else {
+				this.reportTypeCombo.select(0);
+			}
+			
 			this.reportlocation.setText(configuration.getAttribute(ApiUseLaunchDelegate.REPORT_PATH, IApiToolsConstants.EMPTY_STRING)); 
 			this.cleanreportlocation.setSelection(isSpecified(ApiUseLaunchDelegate.CLEAN_XML, configuration));
 			boolean enabled = isSpecified(ApiUseLaunchDelegate.CREATE_HTML, configuration);
@@ -627,6 +654,12 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 		configuration.setAttribute(ApiUseLaunchDelegate.SEARCH_SCOPE, this.searchScope.getText().trim());
 		configuration.setAttribute(ApiUseLaunchDelegate.TARGET_SCOPE, this.targetScope.getText().trim());
 		configuration.setAttribute(ApiUseLaunchDelegate.DESCRIPTION, this.description.getText().trim());
+		if (reportTypeCombo.getSelectionIndex() == 1){
+			configuration.setAttribute(ApiUseLaunchDelegate.REPORT_TYPE, ApiUseLaunchDelegate.REPORT_KIND_CONSUMER);
+		} else {
+			// TODO This will likely make the config dirty
+			configuration.setAttribute(ApiUseLaunchDelegate.REPORT_TYPE, ApiUseLaunchDelegate.REPORT_KIND_PRODUCER);
+		}
 	}
 	
 	/**
@@ -673,6 +706,7 @@ public class ApiUseScanTab extends AbstractLaunchConfigurationTab {
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 		int modifiers = ApiUseLaunchDelegate.MOD_INTERNAL_REFERENCES;
 		configuration.setAttribute(ApiUseLaunchDelegate.SEARCH_MODIFIERS, modifiers);
+		configuration.setAttribute(ApiUseLaunchDelegate.REPORT_TYPE, ApiUseLaunchDelegate.REPORT_KIND_PRODUCER);
 	}
 	
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/Messages.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/Messages.java
index 4fa9941..3ad99d1 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/Messages.java
@@ -68,13 +68,17 @@ public class Messages extends NLS {
 	public static String ApiUseScanTab_internal_references;
 	public static String ApiUseScanTab_must_search_something;
 	public static String ApiUseScanTab_open_report;
+	public static String ApiUseScanTab_referencedBundlesReport;
 	public static String ApiUseScanTab_references_to;
+	public static String ApiUseScanTab_referencingBundlesReport;
 	public static String ApiUseScanTab_regex_problem;
 	public static String ApiUseScanTab_report_location;
 	public static String ApiUseScanTab_reporting;
+	public static String ApiUseScanTab_reportType;
 	public static String ApiUseScanTab_search_for;
 	public static String ApiUseScanTab_search_in;
 	public static String ApiUseScanTab_select_install_location;
+	public static String ApiUseScanTab_SelectDirectory;
 	public static String ApiUseScanTab_target_definitions;
 	public static String ApiUseScanTab_targets;
 	public static String ArchivePatternPage_archive_name;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/messages.properties b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/messages.properties
index 9e83264..e6d02cd 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/use/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009, 2010 IBM Corporation and others.
+# Copyright (c) 2009, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@ ApiUsePatternTab_internal=internal
 ApiUsePatternTab_patterns=Specify name &patterns to be considered as API / internal or to filter nested JAR files from certain bundles:
 ApiUsePatternTab_patterns_title=Patterns
 ApiUsePatternTab_provide_regex=You must provide a regular expression.
-ApiUsePatternTab_remove=&Remove
+ApiUsePatternTab_remove=Re&move
 ApiUsePatternTab_report=report - from
 ApiUsePatternTab_report_to=report - to
 ApiUseScanJob_api_use_report=API Use Report: {0}
@@ -35,7 +35,7 @@ ApiUseScanJob_missing_xml_loc=Missing XML report location
 ApiUseScanJob_no_bundles=No bundles found in directory: {0}
 ApiUseScanJob_preparing_for_scan=Preparing for use scan
 ApiUseScanJob_reading_target=Reading target definition...
-ApiUseScanJob_scanning=Scanning directoy for bundles...
+ApiUseScanJob_scanning=Scanning directory for bundles...
 ApiUseScanJob_skipping_component=skipping component: {0}
 ApiUseScanJob_target_api_unspecified=Target for API search unspecified
 ApiUseScanJob_target_unspecified=Target definition unspecified
@@ -44,33 +44,37 @@ ApiUseScanTab_analuze=Analyze
 ApiUseScanTab_api_baseline=&API baseline:
 ApiUseScanTab_api_references=A&PI references
 ApiUseScanTab_api_use_report=API Use Report
-ApiUseScanTab_baselines=Baseli&nes...
-ApiUseScanTab_brows_e_=Brows&e...
+ApiUseScanTab_baselines=&Baselines...
+ApiUseScanTab_brows_e_=Browse&...
 ApiUseScanTab_browse=Bro&wse...
-ApiUseScanTab_bundles_matching=Bun&dles matching:
-ApiUseScanTab_clean_html_report_dir=Clean &HTML report location
-ApiUseScanTab_clean_report_dir=Clean report director&y before reporting new results
-ApiUseScanTab_create_html_report=Create HT&ML reports
-ApiUseScanTab_description=De&scription:
+ApiUseScanTab_bundles_matching=Bundles &matching:
+ApiUseScanTab_clean_html_report_dir=Clean HTML report &location
+ApiUseScanTab_clean_report_dir=Clean report directory before reporting new results
+ApiUseScanTab_create_html_report=Create &HTML reports
+ApiUseScanTab_description=&Description:
 ApiUseScanTab_enter_report_location=You must enter a report location
 ApiUseScanTab_generate_html_only=Generate HTML report for e&xisting use scan
-ApiUseScanTab_illegal_api_use=Illegal API &Use
+ApiUseScanTab_illegal_api_use=Illegal API &use
 ApiUseScanTab_install_location=D&irectory:
-ApiUseScanTab_internal_references=Internal referen&ces
+ApiUseScanTab_internal_references=Internal reference&s
 ApiUseScanTab_must_search_something=You must search for at least one of API, internal or illegal use references
-ApiUseScanTab_open_report=Open report when searc&h completes
+ApiUseScanTab_open_report=Open report &when search completes
+ApiUseScanTab_referencedBundlesReport=Referenced bundles report (Producers)
 ApiUseScanTab_references_to=Re&ferences to:
+ApiUseScanTab_referencingBundlesReport=Referencing bundles report (Consumers)
 #{0} in this case is the invalid regular expression the user entered
 ApiUseScanTab_regex_problem=The regular expression is not valid: {0}
-ApiUseScanTab_report_location=Report &Output Location:
+ApiUseScanTab_report_location=Report &output location:
 ApiUseScanTab_reporting=Reporting
+ApiUseScanTab_reportType=Report typ&e:
 ApiUseScanTab_search_for=Search For
 ApiUseScanTab_search_in=Search In
 ApiUseScanTab_select_install_location=Select the install location
+ApiUseScanTab_SelectDirectory=Select the location to write the report to
 ApiUseScanTab_target_definitions=&Target definition:
 ApiUseScanTab_targets=Tar&gets...
-ArchivePatternPage_archive_name=A&rchive Name:
-ArchivePatternPage_bundle_name=B&undle Name:
+ArchivePatternPage_archive_name=A&rchive name:
+ArchivePatternPage_bundle_name=B&undle name:
 ArchivePatternPage_create_nested_pattern=Create a nested archive exclusion pattern
 ArchivePatternPage_edit_acrhive_eclusion_pattern=Edit the nested archive exclusion pattern
 ArchivePatternPage_enter_a_pattern=You must enter an archive path
@@ -98,7 +102,7 @@ PatternWizard_use_scan_patterns=Use Scan Patterns
 ReportPatternPage_create_conversion_pattern=Create a report generation pattern
 ReportPatternPage_edit_conversion_pattern=Edit the report generation pattern
 ReportPatternPage_enter_conversion_pattern=You must enter a report conversion pattern
-ReportPatternPage_filter_from_pattern=Filter references &from this pattern
+ReportPatternPage_filter_from_pattern=Filter references fro&m this pattern
 ReportPatternPage_filter_to_pattern=Filter references &to this pattern
 ReportPatternPage_pattern=&Pattern:
 ReportPatternPage_report_conversion_pattern=Report Conversion Pattern
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/views/APIToolingView.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/views/APIToolingView.java
index a593011..99a243f 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/views/APIToolingView.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/views/APIToolingView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,7 +66,7 @@ import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.ui.views.properties.PropertySheetPage;
 
 /**
- * The class is used to show api tooling task results in a tree view.
+ * The class is used to show API Tools task results in a tree view.
  */
 
 public class APIToolingView extends ViewPart implements ISessionListener {
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiBaselineWizardPage.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiBaselineWizardPage.java
index 6f63e9a..d7f5c07 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiBaselineWizardPage.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiBaselineWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.api.tools.ui.internal.wizards;
 
-import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
@@ -18,7 +17,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
-import java.util.List;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -29,8 +27,6 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.core.runtime.URIUtil;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
 import org.eclipse.jface.dialogs.Dialog;
@@ -56,10 +52,6 @@ import org.eclipse.pde.api.tools.ui.internal.IApiToolsConstants;
 import org.eclipse.pde.api.tools.ui.internal.IApiToolsHelpContextIds;
 import org.eclipse.pde.api.tools.ui.internal.SWTFactory;
 import org.eclipse.pde.api.tools.ui.internal.preferences.ApiBaselinePreferencePage;
-import org.eclipse.pde.internal.core.target.provisional.IBundleContainer;
-import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
-import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
-import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -175,91 +167,18 @@ public class ApiBaselineWizardPage extends WizardPage {
 		 */
 		public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 			monitor.beginTask(WizardMessages.ApiProfileWizardPage_0, 10);
-			Path path = new Path(location);
-			File plugins = path.append("plugins").toFile(); //$NON-NLS-1$
-			ITargetPlatformService service = (ITargetPlatformService) ApiUIPlugin.getDefault().acquireService(ITargetPlatformService.class.getName());
-			IBundleContainer container = service.newProfileContainer(path.toOSString(), null);
-			// treat as an installation, if that fails, try plug-ins directory
-			ITargetDefinition definition = service.newTarget();
-			SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
-			container.resolve(definition, subMonitor);
-			subMonitor.done();
-			monitor.worked(1);
-			IResolvedBundle[] bundles = container.getBundles();
-			List components = new ArrayList();
 			try {
 				fProfile = ApiModelFactory.newApiBaseline(name, location);
-			} catch (CoreException e) {
-				throw new InvocationTargetException(e);
-			}
-			if (bundles.length > 0) {
-				// an installation
-				subMonitor = new SubProgressMonitor(monitor, 8);
-				subMonitor.beginTask(IApiToolsConstants.EMPTY_STRING, bundles.length); 
-				for (int i = 0; i < bundles.length; i++) {
-					try {
-						if (!bundles[i].isSourceBundle()) {
-							IApiComponent component = ApiModelFactory.newApiComponent(fProfile, URIUtil.toFile(bundles[i].getBundleInfo().getLocation()).getAbsolutePath());
-							if (component != null) {
-								components.add(component);
-							}
-						}
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e);
-					}
-					subMonitor.worked(1);
-				}
-				subMonitor.done();
-			} else {
-				// scan directory
-				if (!plugins.exists() || !plugins.isDirectory()) {
-					plugins = path.toFile();
-				}
-				File[] files = scanLocation(plugins);
-				monitor.worked(1);
-				subMonitor = new SubProgressMonitor(monitor, 7);
-				subMonitor.beginTask(IApiToolsConstants.EMPTY_STRING, files.length); 
-				for (int i = 0; i < files.length; i++) {
-					try {
-						IApiComponent component = ApiModelFactory.newApiComponent(fProfile, files[i].getPath());
-						if (component != null) {
-							components.add(component);
-						}
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e);
-					}
-					subMonitor.worked(1);
-				}
-				subMonitor.done();
-			}
-			try {
-				fProfile.addApiComponents((IApiComponent[]) components.toArray(new IApiComponent[components.size()]));
+				ApiModelFactory.addComponents(fProfile, location, monitor);
 				ApiBaselineWizardPage.this.contentchange = true;
 			} catch (CoreException e) {
 				ApiPlugin.log(e);
 			}
-			monitor.worked(1);
-			monitor.done();
-		}
-		
-		/**
-		 * Scan given directory for plug-ins
-		 * @param directory
-		 * @return Files of plug-ins/features
-		 */
-		private File[] scanLocation(File directory) {
-			if(!directory.exists() && !directory.isDirectory()) {
-				return new File[0];
+			finally {
+				monitor.done();
 			}
-			HashSet result = new HashSet();
-			File[] children = directory.listFiles();
-			if (children != null) {
-				for (int j = 0; j < children.length; j++) {
-					result.add(children[j]);
-				}
-			}
-			return (File[]) result.toArray(new File[result.size()]);
 		}
+		
 	}
 	
 	/**
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupRefactoring.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupRefactoring.java
index b1bd4d2..4b70b2f 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupRefactoring.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupRefactoring.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,7 +24,7 @@ import org.eclipse.ltk.core.refactoring.Refactoring;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 
 /**
- * A refactoring to change javadoc tags during API tooling setup
+ * A refactoring to change Javadoc tags during API Tools setup
  * 
  * @since 1.0.0
  */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupWizardPage.java b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupWizardPage.java
index 2d3a6b9..bc73d6a 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupWizardPage.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiToolingSetupWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.ui.util.StringMatcher;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -58,7 +59,6 @@ import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
 import org.eclipse.pde.api.tools.ui.internal.IApiToolsConstants;
 import org.eclipse.pde.api.tools.ui.internal.IApiToolsHelpContextIds;
 import org.eclipse.pde.api.tools.ui.internal.SWTFactory;
-import org.eclipse.pde.api.tools.ui.internal.StringMatcher;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyAdapter;
 import org.eclipse.swt.events.KeyEvent;
@@ -266,6 +266,7 @@ public class ApiToolingSetupWizardPage extends UserInputWizardPage {
 		});
 
 		checkcount = SWTFactory.createText(bcomp, SWT.FLAT | SWT.READ_ONLY, 1, GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL);
+		checkcount.setBackground(bcomp.getBackground());
 		
 		Object[] selected = getWorkbenchSelection();
 		if(selected.length > 0) {
@@ -303,7 +304,7 @@ public class ApiToolingSetupWizardPage extends UserInputWizardPage {
 	}
 	
 	/**
-	 * @return the complete listing of projects in the workspace that could have API tooling set-up
+	 * @return the complete listing of projects in the workspace that could have API Tools set-up
 	 * on them
 	 * @throws CoreException
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/wizardmessages.properties b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/wizardmessages.properties
index a3b4f23..fb462e0 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/wizardmessages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/wizardmessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2009 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -29,7 +29,7 @@ ApiProfileWizardPage_copy_profile_attribs=Copying baseline attributes...
 ApiProfileWizardPage_create_working_copy=Creating baseline working copy
 ApiProfileWizardPage_location_needs_reset=Press 'Reset' to scan the location for plug-ins/bundles
 ApiProfileWizardPage_profile_with_that_name_exists=A baseline with that name already exists
-ApiToolingSetupWizard_0=API Tooling Setup
+ApiToolingSetupWizard_0=API Tools Setup
 ApiToolingSetupWizardPage_0=Delete component.xml after &update is complete
 ApiToolingSetupWizardPage_1=No API baseline
 ApiToolingSetupWizardPage_2=The wizard has detected that there is no API baseline set in your workspace.
@@ -47,11 +47,11 @@ JavadocTagRefactoring_3=Javadoc Tag Refactoring
 ProjectUpdateChange_add_nature_and_builder=Add API nature and API analysis builder
 ProjectUpdateChange_adding_nature_and_builder=Adding API project nature and builder...
 ProjectUpdateChange_project_not_accessible=The project [{0}] is not accessible
-UpdateJavadocTagsWizard_0=API Tooling Setup
+UpdateJavadocTagsWizard_0=API Tools Setup
 UpdateJavadocTagsWizardPage_10=&Select All
 UpdateJavadocTagsWizardPage_11=D&eselect All
 UpdateJavadocTagsWizardPage_12=You must select at least one project to update.
-UpdateJavadocTagsWizardPage_4=API Tooling Setup
+UpdateJavadocTagsWizardPage_4=API Tools Setup
 UpdateJavadocTagsWizardPage_6=Select the Java projects to update.
 UpdateJavadocTagsWizardPage_7=Configure projects for API usage and compatibility checks.
 UpdateJavadocTagsWizardPage_8=&Projects:
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..9efd017
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:44:07 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..a90cb5c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,56 @@
+#Wed Jan 19 21:51:20 EST 2011
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.update_ibm_copyright_to_current_year=true
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
index 29484e4..bcbb52b 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.api.tools;singleton:=true
-Bundle-Version: 1.0.202.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.osgi;bundle-version="[3.4.0,4.0.0)",
@@ -16,7 +16,9 @@ Require-Bundle: org.eclipse.osgi;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.ant.core;bundle-version="[3.1.300,4.0.0)",
  org.objectweb.asm;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.team.core;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.core.filesystem;bundle-version="1.2.0"
+ org.eclipse.core.filesystem;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.equinox.frameworkadmin;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.core.variables;bundle-version="[3.2.0,4.0.0)"
 Export-Package: org.eclipse.pde.api.tools.internal;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.builder;x-friends:="org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.comparator;x-friends:="org.eclipse.pde.api.tools.ui",
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/R10100_buildnotes_api_tools.html b/eclipse/plugins/org.eclipse.pde.api.tools/R10100_buildnotes_api_tools.html
deleted file mode 100644
index ed39d9a..0000000
--- a/eclipse/plugins/org.eclipse.pde.api.tools/R10100_buildnotes_api_tools.html
+++ /dev/null
@@ -1,473 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>PDE API Tools Release Notes</title>
-</head>
-<body>
-<h1> Eclipse API Tools Build Notes </h1>
-
-<h2>Summary of API changes</h2>
-<p>None.</p>
-<!-- NEW -->
-<h2>May 21, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275026">Bug 275026</a>: many baseline is disposed exceptions in the test log for I20090504-2055<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276934">Bug 276934</a>: interface appears with class icon in API compare view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276944">Bug 276944</a>: PluginProjectApiComponent#createApiTypeContainers() should be synchronized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276935">Bug 276935</a>: API compare results should be sorted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276716">Bug 276716</a>: Comparing against an API Baseline results in a bunch of "Message not found"
-
-<h2>May 12, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275936">Bug 275936</a>: ApiType#getSimpleName() fails for local types with numbers for simple names
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275338">Bug 275338</a>: NPE getting Api component resolution errors
-
-<h2>May 11, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275341">Bug 275341</a>: Full build run after removing unused API problem filter
-
-<h2>May 8, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275384">Bug 275384</a>: NPE in comparison task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275349">Bug 275349</a>: Add help context and documentation for the export dialog from the api compare task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274515">Bug 274515</a>: 313 API tooling errors after using Replace With > Latest from HEAD<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274646">Bug 274646</a>: Progress reporting for API comparison only hits 10%
-
-<h2>May 5, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274994">Bug 274994</a>: Size of the Compare with baseline wizard too small on some platforms<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274049">Bug 274049</a>: Test failures where API component does not exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275005">Bug 275005</a>: many FileNotFoundExceptions in the console logs for I20090504-2055<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274563">Bug 274563</a>: Compare With API Baseline doesn't work for org.eclipse.core.resources<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275003">Bug 275003</a>: NPE during file filter store
-
-<h2>May 4, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273445">Bug 273445</a>: [doc] add documentation for new APITooling view
-
-<h2>April 30, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274530">Bug 274530</a>: Modify the api generation file ant task to support swt layout
-
-<h2>April 29, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274389">Bug 274389</a>: tag bundles changed since I20090429-0930 build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274165">Bug 274165</a>: Compare with baseline dialog needs button or link<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=274140">Bug 274140</a>: Fup of bug 270454, the api problem for referencing setAssociateListener is not reported on the right line
-
-<h2>April 28, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273943">Bug 273943</a>: Usage of pools inside api baseline xml files is causing problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266489">Bug 266489</a>: [api tooling] No error for missing @since tag for overloaded methods with param using generic
-
-<h2>April 26, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272155">Bug 272155</a>: cleaning project should not "remove" API description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273196">Bug 273196</a>: Inconsistent error message for anonymous type illegal class extension between binary and source cases<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273496">Bug 273496</a>: CCE while refactoring<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273123">Bug 273123</a>: Refine new API compare reports<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273124">Bug 273124</a>: Polish for the API view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=271684">Bug 271684</a>: Incremental build should only analyze structural and description changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=273217">Bug 273217</a>: Error in log after mistakenly modifying javadoc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272897">Bug 272897</a>: Problem Filter quickfix not creating .api_filters file with non-matching bundle/project name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258853">Bug 258853</a>: Provide a compare ant task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267875">Bug 267875</a>: changing API baseline name triggers re-build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272205">Bug 272205</a>: API baseline manager should not hold on to java.io.File handles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=272196">Bug 272196</a>: Edit Api baseline wizard not properly initialized<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=216329">Bug 216329</a>: [api tooling] Refactoring participants required for filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255659">Bug 255659</a>: Illegal usage should not be reported inside fragments of the host
-
-<h2>April 13, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270454">Bug 270454</a>: Unused api filter is reported twice against org.eclipse.ui.internal.navigator.extensions.StructuredViewerManager.StructuredViewerAccess.Listener<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264369">Bug 264369</a>: Inconsistent result in incremental build for org.eclipse.pde.api.tools.builder.tests.usage.UnusedApiProblemFilterTests.testUnusedFilter2I()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=271776">Bug 271776</a>: NPE inside AnalysisReportConversionTask  when there is no more non-API bundles in SDK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268988">Bug 268988</a>: Investigate removing the use of file handles in the API framework
-
-<h2>April 6, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=271110">Bug 271110</a>: "The minor version should be incremented" stays on MANIFEST.MF after removing all problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233883">Bug 233883</a>: [api tooling] Reports wrong error on correct @since 3.4 tag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270992">Bug 270992</a>: Unable to add EE descriptions from repository<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270857">Bug 270857</a>: unused import in manifest<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270823">Bug 270823</a>: API Freeze check missed a field removal
-
-<h2>March 30, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269882">Bug 269882</a>: API baseline org.eclipse.cdt.* plugins aren't picked up when adding Eclipse C/C++ IDE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270001">Bug 270001</a>: Baseline location modification doesn't always trigger a build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269881">Bug 269881</a>: API baseline errors when using cdt-master<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270000">Bug 270000</a>: Api tooling description for OSGi minimumn 1.2 must be updated<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=270016">Bug 270016</a>: Unresolved method error when method's parameter has an extra dimension
-
-<h2>March 25, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269530">Bug 269530</a>: Importing plug-in as source and setting up API tooling does not seem to work
-
-<h2>March 23, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269398">Bug 269398</a>: Add exclude bundles list for API freeze check<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268593">Bug 268593</a>: Add tests for search implementation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=269163">Bug 269163</a>: Entries in .api_filters must be sorted consistently<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226470">Bug 226470</a>: API Problem Filters should reference elements, not only problem IDs
-
-<h2>March 16, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267968">Bug 267968</a>: Javadoc tags incorrcetly not proposed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267626">Bug 267626</a>: Update incremental performance tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268517">Bug 268517</a>: Heads up: chkpii warnings with next version of chkpii (v11.03)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268186">Bug 268186</a>: Unexpected errors setting a baseline for swt
-
-<h2>March 11, 2009 - 3.5M6</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=237080">Bug 237080</a>: [api tooling] API freeze task should also check for API removals<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=268195">Bug 268195</a>: Update EE profiles from OSGi
-
-<h2>March 10, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267998">Bug 267998</a>: Incremental usage build does not work when restrictions are changed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267859">Bug 267859</a>: No quickfix available for usage problem in ant.core<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267978">Bug 267978</a>: Usage tests do not perform incremental builds
-
-<h2>March 9, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267545">Bug 267545</a>: Change a private method to protected final should not flag the addition of 'final' keyword
-
-<h2>March 6, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267394">Bug 267394</a>: java.lang.IllegalArgumentException setting up api containers for org.eclipse.net4j.doc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267393">Bug 267393</a>: Many unresolved method errors for CDO<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267437">Bug 267437</a>: ReferenceModifiers class should not exist<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233569">Bug 233569</a>: Close baseline profile after build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=267261">Bug 267261</a>: ApiUseReportConverter incorrectly reports progress<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266954">Bug 266954</a>: Missing @since tags are reported against the MANIFEST.MF file
-
-<h2>March 3, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266905">Bug 266905</a>: Api description not properly refreshed when a modifier is changed in a type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266855">Bug 266855</a>: Support the API use report conversion outside of the Ant tasks<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265527">Bug 265527</a>: Util methods duplicate code from JDT core<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266695">Bug 266695</a>: [registry] API errors flagged in registry
-
-<h2>March 2, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=266597">Bug 266597</a>: "New API Baseline" wizard opens with an error.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243276">Bug 243276</a>: Incorrect version warning for changed re-exported bundle<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265989">Bug 265989</a>: API problems don't go away when I update .api_filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265942">Bug 265942</a>: AIOOBE when deselecting all API Baselines<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=259403">Bug 259403</a>: API dependency reporting<br>
-
-<h2>February 23, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265661">Bug 265661</a>: test failures in N20090218-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=263246">Bug 263246</a>: Optimize .api_description generation on export<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232200">Bug 232200</a>: Baseline pref page shouldn't use checkboxes in list<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265667">Bug 265667</a>: Missing @since tag not reported for new protected members in org.eclipse.compare.rangedifferencer.RangeDifference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265642">Bug 265642</a>: NPE during Eclipse build inside the ant verification task<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264545">Bug 264545</a>: API usage report shows internal references from fragment bundles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=265684">Bug 265684</a>: NoSuchElementException in ReferenceExtractor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258101">Bug 258101</a>: Explore alternate methods to acquire enclosing method for local types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262377">Bug 262377</a>: Compatibility and Usage tests do not respect specified compiler compliance<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=259997">Bug 259997</a>: Restrictions changed errors appear on manifest rather than changed type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239493">Bug 239493</a>: [api tooling] API Baseline does not pick up stuff from dropins
-
-<h2>February 17, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264848">Bug 264848</a>: Missing @since tag no longer reported<br>
-
-<h2>February 13, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264842">Bug 264842</a>: Adding new API method results in errors in many projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264810">Bug 264810</a>: Compile warning in official build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264719">Bug 264719</a>: BadLocationException inside UnusedApiProblemFilterTests.testUnusedFilter3I<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=263011">Bug 263011</a>: Many exceptions from api tooling<br>
-
-<h2>February 9, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=264060">Bug 264060</a>: Doc of reportconversion ant task contains wrong attribute names<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262924">Bug 262924</a>: api.tools.ui should have a dependency on org.eclipse.equinox.p2.ui.sdk<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258797">Bug 258797</a>: "Invalid references in system libraries" is unclear
-
-<h2>February 3, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258141">Bug 258141</a>: Setup wizard behaves strangely<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256836">Bug 256836</a>: CoreException should not be logged when a superclass or a superinterface cannot be resolved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246347">Bug 246347</a>: Creating a usage problem filter doesn't remove it from Problems view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=263306">Bug 263306</a>: Installed metadata group no longer spans the preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262805">Bug 262805</a>: Rephrase labels for execution environment descriptions group
-
-<h2>January 28, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262776">Bug 262776</a>: The group for execution environment datas should be disabled
-
-<h2>January 27, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262616">Bug 262616</a>: 12 fonts leaked opening API Errors/Warnings preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=262391">Bug 262391</a>: Installing EE fragments should report progress
-
-<h2>January 25, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=261964">Bug 261964</a>: Change to p2 Query API (part II)
-
-<h2>January 19, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=261512">Bug 261512</a>: API Problem Filters property page: Icons not clear to the user<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=261176">Bug 261176</a>: Changing projected method on a @noextend gets an API error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260774">Bug 260774</a>: Unused api filters should not be reported when corresponding checks have not been run
-
-<h2>January 12, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260729">Bug 260729</a>: line number off by 1 for system library reference error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260070">Bug 260070</a>: False report of EE problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=260235">Bug 260235</a>: Newest I-build gives CoreException: Could not locate the source position
-
-<h2>January 5, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=259269">Bug 259269</a>: Unsupported tag tests should examine specific problem message arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258882">Bug 258882</a>: Api check should also check reexported API types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258950">Bug 258950</a>: CoreException in log when analyzing org.eclipse.osgi<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251617">Bug 251617</a>: incremental build performance test<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253978">Bug 253978</a>: Generic signatures should be used when creating API problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258808">Bug 258808</a>: NPE in SystemApiDetector.getDisplay()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244679">Bug 244679</a>: Add org.eclipse.team.core.fileTypes extension for .api_filters
-
-<h2>December 16, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258038">Bug 258038</a>: Tons of API tooling errors after importing binaries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255862">Bug 255862</a>: Export bundle should create the .api_description file
-
-<h2>December 9, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=258156">Bug 258156</a>: Quick fix to remove stale filter not available<br>
-
-<h2>December 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257973">Bug 257973</a>: NPE from BaseApiAnalyzer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257589">Bug 257589</a>: Remove dead code from delta tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256450">Bug 256450</a>: Builder could report unused API problem filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257424">Bug 257424</a>: Add multiple binary folders support for the ant task apitooling.apigeneration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255800">Bug 255800</a>: API ant tasks for builder integration<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257356">Bug 257356</a>: API Tooling Setup dialog should not show binary plug-ins<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256954">Bug 256954</a>: Add new quickfix for problem reporting an api component resolution error
-
-<h2>December 2, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257105">Bug 257105</a>: update doc for new API analysis options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=257113">Bug 257113</a>: Incorrect API leak warning given on a protected method of final that returns non-API class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246672">Bug 246672</a>: @extend violation not detected for local and anonymous subclasses<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256920">Bug 256920</a>: Should report @since tag errors for protected members inside a class tagged as @noextend<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256902">Bug 256902</a>: Cascading failures in build N20081127-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252386">Bug 252386</a>: Report error when missing bundle prevents from doing a complete verification<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256745">Bug 256745</a>: Avoid dead code problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252176">Bug 252176</a>: Cannot determine API breakage after incrementing major version<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256301">Bug 256301</a>: report member name for illegal type reference from system lib<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236904">Bug 236904</a>: NPE from API Analysis builder<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256178">Bug 256178</a>: package / classfile organization<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256157">Bug 256157</a>: Remove unused caching code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256030">Bug 256030</a>: incorrect line number for invalid type reference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255563">Bug 255563</a>: New warnings are reported against jdt/core<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256032">Bug 256032</a>: API tools should have external tool builder to build ant support jar<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255614">Bug 255614</a>: NPE while building my workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=256006">Bug 256006</a>: reduce manifest footprint<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255804">Bug 255804</a>: Wrong API problem (illegally implements interface via sub-interface)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253693">Bug 253693</a>: Validate references to system libraries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255830">Bug 255830</a>: RuntimeException(Throwable) is wrongly reported as fine for J2SE-1.3<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255667">Bug 255667</a>: Api Tools ant tasks should work with more than *.zip locations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255673">Bug 255673</a>: NPE running api verification task on Linux<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255646">Bug 255646</a>: Delta Processor is reporting method additions incorrectly in interfaces<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255587">Bug 255587</a>: Resolution issue with the ant task
-
-<h2>November 18, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255525">Bug 255525</a>: Wrong message is reported inside the ant task for illegally implementing an interface<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255353">Bug 255353</a>: Misleading error message on added field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255222">Bug 255222</a>: Invalid tags leak into API descriptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255100">Bug 255100</a>: API Tools should remove use of deprecated preferences code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251313">Bug 251313</a>: Failed assertion in API tooling build<br>
-
-<h2>November 11, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255269">Bug 255269</a>: Fragments should be able to see types from the host<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255215">Bug 255215</a>: When the SystemApiDetector should be enabled<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255069">Bug 255069</a>: CCE in SystemAPIDetector<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=255072">Bug 255072</a>: Closed stream after restart<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253945">Bug 253945</a>: Invalid API error reported against OSGi<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253946">Bug 253946</a>: API Tools should use the new PixelConverter class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253940">Bug 253940</a>: Cannot find illegal reference to generic method
-
-<h2>November 3, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252751">Bug 252751</a>: 313 tag tests mysteriously failed in I20081029-1823<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253023">Bug 253023</a>: Support for new OSGi/Minimum-1.2 Execution environment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253055">Bug 253055</a>: ClassCastExceptions from API scanning<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251710">Bug 251710</a>: Incremental build reports incorrect errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251838">Bug 251838</a>: Class marked with "super interfaces set reduced" without change in hierarchy<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=253242">Bug 253242</a>: The TagScanner should not process private members<br>
-
-<h2>October 28, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=252459">Bug 252459</a>: Transient failure in API filter tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247028">Bug 247028</a>: restricted constructors from public static inner types not flagged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251763">Bug 251763</a>: fix enclosing type resolution for nested types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251783">Bug 251783</a>: simplify search scopes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246114">Bug 246114</a>: Wrong problem removed using @noreference tag on inner constructors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245434">Bug 245434</a>: Performance test suite<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=249319">Bug 249319</a>: collapse IType and IReferenceType descriptors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=249484">Bug 249484</a>: consolidate element descriptors/structures used by delta compare & usage analysis<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251609">Bug 251609</a>: Infrastructure support for source or binary analysis<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251401">Bug 251401</a>: Improve API tooling test turnaround<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251679">Bug 251679</a>: Error for API addition gets wrongly reported<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=248122">Bug 248122</a>: Error entries in .log<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251513">Bug 251513</a>: @noreference tagged method reported as "no longer API" when baseline has no API description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251606">Bug 251606</a>: Remove compatibility checks for visible members in non-API supertypes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251502">Bug 251502</a>: Problem should say ADDED restriction instead of CHANGED<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244984">Bug 244984</a>: adding super interface to interface does not create errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247677">Bug 247677</a>: API leak issues should be filtered out on members tagged with @noreference<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251613">Bug 251613</a>: rename IClassFile and IClassFileContainer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250824">Bug 250824</a>: Remove stub generation code<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251854">Bug 251854</a>: speed up tag tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246139">Bug 246139</a>: leak problems removed for final fields with @noreference tag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247952">Bug 247952</a>: Adding "final" and "@nooverride" confuses API Tool<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247823">Bug 247823</a>: We should not load the profiles when opening the baseline preference page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=248138">Bug 248138</a>: API tools problems line numbers appear off by one<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251336">Bug 251336</a>: infrastructure: make search criteria more flexible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250408">Bug 250408</a>: API Tools content assist proposals not available with new "Java Proposals" category<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=250801">Bug 250801</a>: @nooverride tag should not be proposed for final classes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251466">Bug 251466</a>: IApiComponent should be an IApiElement<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=251830">Bug 251830</a>: Should not build when changes to .api_filters are detected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247343">Bug 247343</a>: Delta CHANGED/RESTRICTIONS should be modified to be ADDED/RESTRICTIONS<br>
-
-<h2>October 21, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227570">Bug 227570</a>: Extending non-API class is not always an API problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247545">Bug 247545</a>: Adding back deleted type does not remove API error (incremental)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247703">Bug 247703</a>: Removing internal superclass does not report error for removed methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243809">Bug 243809</a>: Incremental build problem with fix for bug 229697
-
-<h2>Sept 30, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247607">Bug 247607</a>: Make it easier to find filter removal UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226406">Bug 226406</a>: API Tooling Setup dialog improvements<br>
-
-<h2>Sept 23, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247685">Bug 247685</a>: @nooverride  should not be proposed for a static method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243766">Bug 243766</a>: Need to clean up api descriptions when projects are deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247505">Bug 247505</a>: remove export code from AbstractApiComponent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229815">Bug 229815</a>: removing the last filter should remove the parent<br>
-
-<h2>Sept 18 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247654">Bug 247654</a>: Adding @noextend and removing final modifier is not a pb if the class was a final class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247632">Bug 247632</a>: Invalid "constructor has been removed" warning on internal class
-
-<h2>Sept 15 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247349">Bug 247349</a>: API error reported when deleting non-API class (incremental)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242598">Bug 242598</a>: Should not allow @nooverride tag on final methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247291">Bug 247291</a>: Removing @noextend API restriction should not result in error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247329">Bug 247329</a>: Remove implementation of primitive types<br>
-
-<h2>Sept 14, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245699">Bug 245699</a>: API breakage reported if removing extends of internal class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247165">Bug 247165</a>: Must not warn for missing @since tag if extending method from Object<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246013">Bug 246013</a>: Removed type not detected in incremental build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244750">Bug 244750</a>: No problem detected when public class becomes package visible<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246953">Bug 246953</a>: Many errors due to wrong warning about changed restrictions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246932">Bug 246932</a>: Document fall-through cases in switch statements<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246767">Bug 246767</a>: Delta should be reported for changed restrictions on a field or a method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245282">Bug 245282</a>: implicit/explicit class bound of Object should not be considered in add/remove/change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244994">Bug 244994</a>: Redundant problems reported when removing "final" on constant<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218571">Bug 246401</a>: test suite required for incremental builder
-
-<h2>Sept 10, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246842">Bug 246842</a>: Tons of API tooling errors after importing binaries<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246743">Bug 246743</a>: removing type argument from field should be an error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244985">Bug 244985</a>: no problem when adding @noimplement restriction<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244620">Bug 244620</a>: Error for adding method to API class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246729">Bug 246729</a>: The preference for type parameter has been modified should be removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244867">Bug 244867</a>: Adding @noextend or @noinstantiate to an API class does not create problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246401">Bug 246401</a>: no error for malformed tag of form abc1.0<br>
-
-<h2>Sept 9, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244746">Bug 244746</a>: adding abstract to a @noinstantiate class creates problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245170">Bug 245170</a>: pushing a method up the class hierarchy should not be error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244993">Bug 244993</a>: @noreference should suppress some field compatibility problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244726">Bug 244726</a>: Changing class hierachy reports "reduced" hierarchy instead of "changed"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245415">Bug 245415</a>: Smoke test plan published on web site<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246124">Bug 246124</a>: Annotation/Enun should not support 'restrictions have been modified' option<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245166">Bug 245166</a>: @noreference should suppress some method compatibility problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245417">Bug 245417</a>: Typo in org.eclipse.pde.api.tools.builder.tests.compatibility.ClassCompatibilityHierarchyTests.WORKSPACE_CLASSES_PACKAGE_A path<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=246138">Bug 246138</a>: no error reported when enum super interface removed<br>
-
-<h2>Sept 3, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244864">Bug 244864</a>: reducing visibility of member types reported incorrectly as remove<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244995">Bug 244995</a>: Reducing visibility of protected body declarations in @noextend class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244941">Bug 244941</a>: [api tooling] No missing @since tag should be reported for a protected member in a final class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244884">Bug 244884</a>: no error when adding a member type to interface<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244673">Bug 244673</a>: Invalid API problems for method that changed from private to @noreference public<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245414">Bug 245414</a>: Coordinate compatibility options doc with latest prefs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242609">Bug 242609</a>: Binary Compatibility options for Annotations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=245150">Bug 245150</a>: Specializing field type should create problem<br>
-
-<h2>Aug 26, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242610">Bug 242610</a>: Simplify "converted to enum..." compatibility options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242618">Bug 242618</a>: Simplify type bound options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244679">Bug 244679</a>: Add org.eclipse.team.core.fileTypes extension for .api_filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244211">Bug 244211</a>: API problems not being created properly on inner interfaces<br>
-
-<h2>Aug 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244607">Bug 244607</a>: Test failures in nightly build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242612">Bug 242612</a>: Re-order compatibility options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=244302">Bug 244302</a>: API tooling creates wrong 'Missing @since tag' errors<br>
-
-<h2>Aug 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229697">Bug 229697</a>: [api tooling] Visible methods of a non-API types must be seen as API for API subclasses<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229688">Bug 229688</a>: [api tooling] Wrong deltas reported when code is refactored by pushing down some methods from the superclass
-
-<h2>Aug 5, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232404">Bug 232404</a>: API tools javadoc tags on enum or annotation types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242442">Bug 242442</a>: API baseline setting not persisted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242392">Bug 242392</a>: NPE trying to resolve method while tag scanning<br>
-
-<h2>July 29, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=242000">Bug 242000</a>: Should not allow @noreference tag on private fields<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=241989">Bug 241989</a>: @nooverride and @noreference tags should not be allowed on private methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=240852">Bug 240852</a>: JavaModelException renaming project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=241213">Bug 241213</a>: Wrong "type of the field ... has been changed" for protected field in @noextend class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236876">Bug 236876</a>: [api tooling] Should modify code to compile in 1.6 mode
-
-<h2>July 15, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=239807">Bug 239807</a>: About 'Add API Baseline Quickfix'<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235220">Bug 235220</a>: Some compatibility options can be removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=240146">Bug 240146</a>: Doc clarification - type member or member type<br>
-
-<h2>June 24, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235820">Bug 235820</a>: Remove use of ExportPackageDescription.isRoot()<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=235822">Bug 235822</a>: "Comparing 'project' to API baseline..." message could be better<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236687">Bug 236687</a>: NPE opening the errors / warnings property page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234023">Bug 234023</a>: Tag scanner does not respect source level<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236734">Bug 236734</a>: No baseline equals no scanning for analysis that doesn't require a baseline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=236942">Bug 236942</a>: Not all tag problems are reported<br>
-
-<p>
-    <a href="http://validator.w3.org/check?uri=referer"><img
-        src="http://www.w3.org/Icons/valid-html40"
-        alt="Valid HTML 4.0 Transitional" height="31" width="88"></a>
-  </p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/R10_buildnotes_api_tools.html b/eclipse/plugins/org.eclipse.pde.api.tools/R10_buildnotes_api_tools.html
deleted file mode 100644
index f8d85ff..0000000
--- a/eclipse/plugins/org.eclipse.pde.api.tools/R10_buildnotes_api_tools.html
+++ /dev/null
@@ -1,376 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>PDE API Tools Release Notes</title>
-</head>
-<body>
-<h1> Eclipse API Tools Build Notes </h1>
-
-<h2>Summary of API changes</h2>
-<p>None.</p>
-
-<h2>May 27, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234488">Bug 234488</a>: Deleting equals()/hashCode() results in API error<br>
-
-<h2>May 27, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234014">Bug 234014</a>: Externalized string has a typo<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233978">Bug 233978</a>: Grid data are never used for the combos<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233731">Bug 233731</a>: Project API descriptions retain all members<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=234015">Bug 234015</a>: Some compatibility options should be removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233996">Bug 233996</a>: binary compatible instance field addition should not be flagged as binary incompatible<br>
-
-<h2>May 26, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233731">Bug 233731</a>: Project API descriptions retain all members<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233616">Bug 233616</a>: API Verification Report: List of all non API bundles misleading<br>
-
-<h2>May 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233392">Bug 233392</a>: IOExceptions if baseline name is invalid file name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233426">Bug 233426</a>: Lots of new API errors after switching to I20080521-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233398">Bug 233398</a>: API Verification Report does not honor API Problem filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233473">Bug 233473</a>: Scan for unsupported tags creates duplicate problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233445">Bug 233445</a>: Reports wrong error on correct @since 3.4 tag<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233441">Bug 233441</a>: Importing binary project is broken in I20080521-2000<br>
-
-<h2>May 21, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232524">Bug 232524</a>: TVT34:TCT302: TVT FR - Sentence in English + layout<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233060">Bug 233060</a>: Quick fix message is awkward<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232787">Bug 232787</a>: [api tooling] NPE in API Analysis Builder on tm.discovery.model.edit project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232408">Bug 232408</a>: Message improvements on Compatibility problems tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232536">Bug 232536</a>: Eclipse build Ant task should allow removed bundles to be filtered out<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232570">Bug 232570</a>: API builder seems slower in I20080515-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233280">Bug 233280</a>: Unused NLS strings should be cleaned up<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233042">Bug 233042</a>: Type or members with increased access can return inconsistent delta<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233209">Bug 233209</a>: Naming of the column in the api verification report should be improved<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233283">Bug 233283</a>: search engine returns emtpy search results<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232958">Bug 232958</a>: The same API Problem is reported several in Problem View<br>
-
-<h2>May 20, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232514">Bug 232514</a>: @noreference changes should not be reported when the baseline doesn't have any api description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232538">Bug 232538</a>: Scanning 'project' message is not descriptive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232068">Bug 232068</a>: API Tools not finding @since tag when there is a comment in the javadoc after the tag.<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=233034">Bug 233034</a>: Error message missing arguments<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232601">Bug 232601</a>: SWT bundle is poorly handled by API tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232732">Bug 232732</a>: Preference page does not use dialog font<br>
-
-<h2>May 15, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232176">Bug 232176</a>: bundle version error disappears on incremental build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232217">Bug 232217</a>: Cannot add back a baseline with same name<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231955">Bug 231955</a>: API tooling wizard: adding baseline should select it<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231953">Bug 231953</a>: API tooling wizard: "Use Reset..." error in banner shouldn't be<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232249">Bug 232249</a>: "Tag '@noinstantiate' is unsupported on a class" should say "abstract class"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221923">Bug 221923</a>: [api tooling] Add @noreference support for delta creation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229462">Bug 229462</a>: Progress reaches 100% before done<br>
-
-<h2>May 14, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231957">Bug 231957</a>: API Baselines pref page - should be "Remove" (no ellipsis)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231889">Bug 231889</a>: Convert xml reports from Bundle verification ant task into html<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=232139">Bug 232139</a>: Create correct references for fields<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231866">Bug 231866</a>: Split bundle version management preference to distinguish minor and major version errors<br>
-
-<h2>May 13, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231688">Bug 231688</a>: Cannot filter error inside MANIFEST.MF<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231390">Bug 231390</a>: quickfix for bundle version replaces .qualifier with explicit build ID<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231860">Bug 231860</a>: Changing pde.core major version to 4.0.0.qualifier is not detected as an error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231652">Bug 231652</a>: NPE building a fragment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231412">Bug 231412</a>: Minor and major version change should be detected after API freeze<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226254">Bug 226254</a>: API tools use too much memory<br>
-
-<h2>May 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231409">Bug 231409</a>: Conversion of org.eclipse.update.core is causing weird results<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231170">Bug 231170</a>: No delta returned for adding or removing volatile modifiers from a field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231027">Bug 231027</a>: Changing non-final to final class should be a compatible change for @noextend class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231409">Bug 231409</a>: Conversion of org.eclipse.update.core is causing weird results<br>
-
-<h2>May 9, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230947">Bug 230947</a>: Similar problems are being dropped from analyzer<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229824">Bug 229824</a>: quickfix: Add @noreference tag for leaking parameters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230976">Bug 230976</a>: Filter quick-fix should use filter icon<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231184">Bug 231184</a>: Bundle verification ant task should report non-api bundles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230945">Bug 230945</a>: Removing api filters file doesn't trigger a rebuild<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231298">Bug 231298</a>: org.eclipse.ui complaint about API<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231382">Bug 231382</a>: Remove javadoc resolution should use the remove icon<br>
-
-<h2>May 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230020">Bug 230020</a>: Search engine doesn't support a system bundle component<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231028">Bug 231028</a>: adding method to @noimplement interface flagged as error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230965">Bug 230965</a>: detect unrequired change to plug-in minor version<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230362">Bug 230362</a>: [Metadata] update version of org.eclipse.ui.navigator<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230200">Bug 230200</a>: API Tools doc issues<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230993">Bug 230993</a>: Accurately catching constructor problems inside constructors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=231202">Bug 231202</a>: NPE creating @since tag problem<br>
-
-<h2>May 7, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230409">Bug 230409</a>: final @noreference method should not be flagged with an error when having API leaks problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230205">Bug 230205</a>: method with @noreference and @nooverride flagged as having "non-API parameter"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230199">Bug 230199</a>: Content assist for @no* tags should show boilerplate as additional info<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230081">Bug 230081</a>: IAE while using quick fix<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230209">Bug 230209</a>: [api tooling] "Illegally instantiates" should not be flagged when extending an @noinstantiate class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230271">Bug 230271</a>: Addition of an ant task to run the API tools verification during Eclipse build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230411">Bug 230411</a>: Api filter format could list the message arguments instead of concatenating them<br>
-
-<h2>May 5, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229971">Bug 229971</a>: Usage problem messages should be more descriptive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229834">Bug 229834</a>: ICompilationUnit.findPrimaryType called for no reason<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230281">Bug 230281</a>: Callers of org.eclipse.pde.api.tools.internal.util.Util.getInputStreamAsCharArray(InputStream, int, String) must close the input stream<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230252">Bug 230252</a>: 'Set all to:...' preference action does not set all<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229824">Bug 229824</a>: quickfix: Add @noreference tag for leaking parameters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=230021">Bug 230021</a>: Missing error message for api usage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228499">Bug 228499</a>: [api tooling] @since tags should not be limited to two fragments only<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229814">Bug 229814</a>: Incremental build performance improvement<br>
-
-<h2>3.4 M7 - May 2, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225181">Bug 225181</a>: Not possible to have two API problems with the same ids on the same resource<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227368">Bug 227368</a>: Make exact specification of @no* tags available in the SDK<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225176">Bug 225176</a>: Hookup context help for API tooling<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224983">Bug 224983</a>: After fixing breaking API changes, error about bundle version still there<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225133">Bug 225133</a>: Could not locate IMember for the constructor of a type member<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228263">Bug 228263</a>: Error message is confusing for removed types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228348">Bug 228348</a>: Undo 'Add missing @since tag' quick fix is not atomic<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229051">Bug 229051</a>: API breakage reported against private class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228726">Bug 228726</a>: Don't require bundles to be in "plugins" directory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228460">Bug 228460</a>: Analyzer should work in OSGi-less mode<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226951">Bug 226951</a>: Builder should use analyser, and create its own markers<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226398">Bug 226398</a>: Problem filter quickfix should be more descriptive<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225461">Bug 225461</a>: No rebuild is requested when the location of the baseline is modified<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228446">Bug 228446</a>: External class file folders break bundle API components<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228510">Bug 228510</a>: URL[] urls = PluginPathFinder.getPluginPaths(location); doesn't return the list of bundles at location anymore<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228424">Bug 228424</a>: 'restrictions have changed' errors abound<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228371">Bug 228371</a>: Occasional "Missing @since tag" error on internal class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228075">Bug 228075</a>: final keyword addition for a method should not be flagged as a breakage if the enclosing type is tagged with @noextend<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228925">Bug 228925</a>: error claims API type was removed, but it was internal<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228898">Bug 228898</a>: Timing issue on removing filters<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227332">Bug 227332</a>: Addition or removal of filter should trigger an incremental build of the applicable type<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227706">Bug 227706</a>: API parameter" breaks after rebuild<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229460">Bug 229460</a>: Not prompted to build after changing baseline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225961">Bug 225961</a>: Warn when tag not supported on member<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227803">Bug 227803</a>: Add messages for compatible deltas<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229420">Bug 229420</a>: Incremental build does not flag addition of invalid tags<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229311">Bug 229311</a>: Participate with the Java problem type marker grouping<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215074">Bug 215074</a>: time constant does not work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220373">Bug 220373</a>: [api tooling] check for new apis after a build freeze<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220374">Bug 220374</a>: [api tooling] Increment minor/major version error should have a detailed message<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222905">Bug 222905</a>: [api tooling] Deleted compile-time constant interface field not flagged as a problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225112">Bug 225112</a>: leaking types: don't warn when API is non referencable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228209">Bug 228209</a>: Overriden method defined in java.lang.Object should not be reported as a method addition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223845">Bug 223845</a>: Duplicate error for missing API baseline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224448">Bug 224448</a>: Removed constructor reported as breaking change for @noextend @noinstantiate class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223946">Bug 223946</a>: [api tooling] Removing all profiles doesn't trigger a rebuild<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224719">Bug 224719</a>: NPE during API usage scanning<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224972">Bug 224972</a>: API leak detection does not respect @noreference for public field<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225039">Bug 225039</a>: NumberFormatException after adding nature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225113">Bug 225113</a>: CCE during problem creation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225144">Bug 225144</a>: API tooling project property page: wording<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225141">Bug 225141</a>: wording in 'invalid @since tag' problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225135">Bug 225135</a>: Wording in the build progress monitor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225475">Bug 225475</a>: no need to build API description for non-API enabled source projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225529">Bug 225529</a>: what does @noextend mean on methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226979">Bug 226979</a>: Add version to the .api description file<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225989">Bug 225989</a>: API Analysis builder is not cancelable<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227762">Bug 227762</a>: remove @nooverride support for constructors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227740">Bug 227740</a>: Constructor with API parameter type should not be flagged for @noreference constructor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229626">Bug 229626</a>: changing unsupported API tag severity does not update problems<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224456">Bug 224456</a>: Bundle versioning scheme should be based on problem filtering and project preferences<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229750">Bug 229750</a>: Project specific errors/warnings doesn't work anymore<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225374">Bug 225374</a>: Report missing @since tags even if the corresponding member has a non-javadoc comment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226559">Bug 226559</a>: Ant task to generate .api_description file should not do anything for projects without the api tools nature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227147">Bug 227147</a>: Remove uneeded parameter for API usage scanning<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227370">Bug 227370</a>: builder progress messages don't appear<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225595">Bug 225595</a>: no need to persist methods/fields without restrictions in description<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226499">Bug 226499</a>: NPE in ApiProblemReporter.isProblemFiltered(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226403">Bug 226403</a>: AssertionFailedException: "null argument" thrown from Util.getBuildJob<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225473">Bug 225473</a>: removing API not recognizes as breaking change<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214620">Bug 214620</a>: [api tooling] comments from Eugene<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228311">Bug 228311</a>: exceptions from builder state<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229705">Bug 229705</a>: Filtered problems reappear sometimes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=228365">Bug 228365</a>: NPE in ApiFilterStore.resourceChanged<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227611">Bug 227611</a>: Execution Environment deltas should consider "compatible" EE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226400">Bug 226400</a>: Could not locate member when it is a constructor when the error is "Member visibility reduced"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226140">Bug 226140</a>: @nooverride and @noreference do not work for constructors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225622">Bug 225622</a>: Versions seem to be reversed in error message for major version update<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225433">Bug 225433</a>: Cannot ignore "the final keyword has been added"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225463">Bug 225463</a>: @since tags should be checked for breaking api compatibility error only if they are additions<br>
-
-<h2>April 22, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227129">Bug 227129</a>: API tag code assist proposals should only be available if project is under pde tooling control<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225521">Bug 225521</a>: code assist after prefix doesn't work<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227340">Bug 227340</a>: .api_filters could not be removed<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227361">Bug 227361</a>: 'Api Errors/Warnings > Configure Workspace Settings...' leaves wrong shell active<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227124">Bug 227124</a>: Failing tests in N20080414-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226917">Bug 226917</a>: Add @nooverride as a javadoc tag for javadoc generation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227381">Bug 227381</a>: @nooverride vs. @noextend for methods<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227815">Bug 227815</a>: NPE while debugging API tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227694">Bug 227694</a>: NPE, possibly related to missing @since tag error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=227612">Bug 227612</a>: Remove inheritDoc support<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226969">Bug 226969</a>: [api tooling] Missing @since tags are not flagged for newly added types<br>
-
-<h2>April 15, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217706">Bug 217706</a>: [api tools] project settings update for org.eclipse.pde.api.tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226745">Bug 226745</a>: Problem reporter cannot filter problems outside of the workspace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226004">Bug 226004</a>: Translation Clarification - string concatenation problems in org.eclipse.pde.api.tools<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225910">Bug 225910</a>: Compiler warnings in N20080404-2000<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225146">Bug 225146</a>: CCE when restoring an ApiDescription<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225142">Bug 225142</a>: NPE during ApiDescription.resolveAnnotations(...)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225108">Bug 225108</a>: @noreference: distinguish between method and constructor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223663">Bug 223663</a>: 293 compile warnings in org.eclipse.pde.api.tools.tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226128">Bug 226128</a>: More specific implementation of a super method should not be considered as an addition<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226472">Bug 226472</a>: 'API Problem Filters' properties page: Remove ellipsis from Remove...<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225163">Bug 225163</a>: IllegalArgumentException when @since tags has the wrong format<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224375">Bug 224375</a>: Confusing error message in "New API Profile" dialog<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224648">Bug 224648</a>: [api tooling] @since tag quickfix should use the version from the Manifest, and not what it thinks is right<br>
-
-<h2>April 8, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225886">Bug 225886</a>: NPE in API Analysis Builder after crash<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225164">Bug 225164</a>: Should not report @since tag errors for protected members inside a class tagged as @noextend<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225181">Bug 225181</a>: Not possible to have two API problems with the same ids on the same resource<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225141">Bug 225141</a>: wording in 'invalid @since tag' problem<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225144">Bug 225144</a>: API tooling project property page: wording<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225131">Bug 225131</a>: Wording in the API Tooling setup wizard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225133">Bug 225133</a>: Could not locate IMember for the constructor of a type member<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225113">Bug 225113</a>: CCE during problem creation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225833">Bug 225833</a>: component.xml file of non-api projects is being over-written<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226174">Bug 226174</a>: remove export from API component API
-
-<h2>April 1st, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=225131">Bug 225131</a>: Wording in the API Tooling setup wizard<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224969">Bug 224969</a>: Got "The super interfaces set has been reduced" but I didn't
-
-<h2>March 31, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224969">Bug 224969</a>: Got "The super interfaces set has been reduced" but I didn't<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224904">Bug 224904</a>: [AAP001] The source issue
-
-<h2>March 30, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224716">Bug 224716</a>: [api tooling] The IMember is not properly located when it is a constructor<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224713">Bug 224713</a>: [api tooling] The enclosing type should not be returned as a default member
-
-<h2>March 28, 2008 (3.4M6)</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224636">Bug 224636</a>: [api tooling] Change of interface method signature is not recognized as API breakage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224448">Bug 224448</a>: Removed constructor reported as breaking change for @noextend @noinstantiate class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222905">Bug 222905</a>: [api tooling] Deleted compile-time constant interface field not flagged as a problem
-
-<h2>March 27, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=224284">Bug 224284</a>: avoid "finding" types when building API description nodes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214620">Bug 214620</a>: [api tooling] comments from Eugene<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223674">Bug 223674</a>: NPE opening filter property page on pde.ui<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223673">Bug 223673</a>: Filters show outgoing change but did not modify them<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220902">Bug 220902</a>: Create Profile: forced to use highest execution environment<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220567">Bug 220567</a>: listen for changes to .api_filters<br>
-
-<h2>March 25, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220819">Bug 220819</a>: [api tooling] Improve changes in EE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223946">Bug 223946</a>: [api tooling] Removing all profiles doesn't trigger a rebuild<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223845">Bug 223845</a>: Duplicate error for missing API baseline<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220819">Bug 220819</a>: [api tooling] Improve changes in EE<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223439">Bug 223439</a>: Progress message during build<br>
-
-<h2>March 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=223093">Bug 223093</a>: failing tests in Build N20080317-2000<br>
-
-<h2>March 17, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222800">Bug 222800</a>: [api tooling] When fixing invalid @since tags, the quickfix should say "update" and not "add"<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222641">Bug 222641</a>: [api tooling] NPE when performing finish in the profile setup page<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221866">Bug 221866</a>: API profiles pref page polish<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222625">Bug 222625</a>: [api tooling] NPE trying to create the problem that corresponds to the missing default profile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222441">Bug 222441</a>: [api tooling] Add global switch to change binary compatibility options<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221819">Bug 221819</a>: Improve labels on Binary Incompatibility tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222508">Bug 222508</a>: problem reporter should not clean problems<br>
-
-<h2>March 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222277">Bug 222277</a>: [api tooling] VersionNumberingResolution and DefaultApiProfileResolution need their own icons<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221920">Bug 221920</a>: [api tooling] "Unable to resolve method signature" when adding @noreference in a method on the next build
-
-<h2>March 11, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221810">Bug 221810</a>: Wording and casing in wizards<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221817">Bug 221817</a>: Improve labels on Usage Restriction tab<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221813">Bug 221813</a>: Adding new profile blocks UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=222066">Bug 222066</a>: [api tooling] Failures in N20080310-0010<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221911">Bug 221911</a>: [api tooling] @reference null is inserted for some internal classes inside API packages<br>
-
-<h2>March 3, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220803">Bug 220803</a>: Should have error marker in manifest.mf for bundle version errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220636">Bug 220636</a>: creating a no-op change causes API builder to run for 20 seconds<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=221209">Bug 221209</a>: [api tooling] Setting a default api profile should only rebuild the projects that have the api tooling nature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220221">Bug 220221</a>: add version numbers to our external files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220730">Bug 220730</a>: No way to get rid of api tooling errors<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220828">Bug 220828</a>: [api tooling] Wrong @since version not detected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219535">Bug 219535</a>: [api tools] Missing @since tag version should be based on the right bundle version<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220798">Bug 220798</a>: [api tooling] Quickfix for missing @since tag should not add the tag twice<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220806">Bug 220806</a>: [api tooling] addition of a protected field inside a class that can be extended should not be flagged as an error<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220750">Bug 220750</a>: [api tooling] Addition of a type member inside an interface should not be a binary breakage<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220762">Bug 220762</a>: [api tooling] Should not report a binary breakage on a private method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219535">Bug 219535</a>: [api tools] Missing @since tag version should be based on the right bundle version<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220463">Bug 220463</a>: workspace profile loaded when it doesn't need to be<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220574">Bug 220574</a>: api filters file should be written immediately when changes are made<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220447">Bug 220447</a>: namespace problems with api profiles<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220621">Bug 220621</a>: polish progress messages for API builder<br>
-
-<h2>February 25, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220114">Bug 220114</a>: .api_filters not updated when it becomes empty<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=220017">Bug 220017</a>: IReference should keep unresolved and resolved target locations<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219870">Bug 219870</a>: only write filter file if the project has API nature<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218208">Bug 218208</a>: markers not cleaned up after replace<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219451">Bug 219451</a>: illegal implementor error disappears after clean/build<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219662">Bug 219662</a>: [api tooling]  generate a fake ee file for testing purpose<br>
-
-<h2>February 19, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=219514">Bug 219514</a>: more efficient scoped class file container<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218715">Bug 218715</a>: persist project API descriptions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=214382">Bug 214382</a>: [api tooling] tag scanner silently fails without class files<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218073">Bug 218073</a>: [api tooling] @since tag checker should handle inherited doc<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218585">Bug 218585</a>: [api tooling] Got "@noinstantiate null" while converting org.eclipse.update.configurator.IPlatformConfigurationFactory<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218976">Bug 218976</a>: [api tooling] No binary breakage should be reported for a protected field change in a final class<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218983">Bug 218983</a>: Save cycle causes out of sync resources<br>
-
-<h2>February 12, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213019">Bug 213019</a>: [api tooling] plug-in version number validation<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218712">Link</a>: in from CVS broke workspace profile<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218217">Bug 218217</a>: "Failed to open archive" adding/deleting projects<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=212014">Bug 212014</a>: [api tooling] extending @noextend method not detected<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=215089">Bug 215089</a>: [api tooling] @noreference not working on inherited interface method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=217171">Bug 217171</a>: [api tooling] Workspace profile needs to update after resource changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218697">Link</a>: in project API description and API component<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218166">Bug 218166</a>: NPE when compatibility error is on compilation unit<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218213">Bug 218213</a>: "Resource does not exist" deleting project<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=218220">Bug 218220</a>: NPE saving filters<br>
-
-<p>
-    <a href="http://validator.w3.org/check?uri=referer"><img
-        src="http://www.w3.org/Icons/valid-html40"
-        alt="Valid HTML 4.0 Transitional" height="31" width="88"></a>
-  </p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/build.properties b/eclipse/plugins/org.eclipse.pde.api.tools/build.properties
index cc76619..726deb9 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/build.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2009 IBM Corporation and others.
+# Copyright (c) 2007, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ output.. = bin/
 bin.includes = .,\
                report/,\
                plugin.properties,\
+               .options,\
                about.html,\
                META-INF/,\
                plugin.xml,\
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/buildnotes_api_tools.html b/eclipse/plugins/org.eclipse.pde.api.tools/buildnotes_api_tools.html
deleted file mode 100644
index 9ad574a..0000000
--- a/eclipse/plugins/org.eclipse.pde.api.tools/buildnotes_api_tools.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Eclipse 3.6 API Tools Build Notes</title>
-</head>
-<body>
-<h1>Eclipse 3.6 API Tools Build Notes</h1>
-
-<h2>Summary of API changes</h2>
-<p>None.</p>
-<!-- NEW -->
-<h2>October 27, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293157">Bug 293157</a>: OSGi/J2SE-1.5 profile is missing method AbstractTableModel.getValueAt(int, int)
-
-<h2>July 31, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=285122">Bug 285122</a>: NPE during build in MethodLeakDetector.matchesSourceApiRestrictions<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=285050">Bug 285050</a>: TVT35:TCT335: CHS: Duplicate Mnemonic Keys<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=284898">Bug 284898</a>: IllegalArgumentException visiting type instruction with a type name that is one char<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=282803">Bug 282803</a>: [Update] NPE in ReferenceExtractor.visitMethod(ReferenceExtractor.java:1164)
-
-<h2>July 28, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=275020">Bug 275020</a>: Reverting workspace only works for compatibility tests<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=283573">Bug 283573</a>: ReferenceExtractor is failing to lookup method signatures (caching problem)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=281206">Bug 281206</a>: Not able to export as html from API Tooling view<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=282803">Bug 282803</a>: NPE in ReferenceExtractor.visitMethod(ReferenceExtractor.java:1164)<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=282923">Bug 282923</a>: Unused strings in plugin.properties for api tools UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=282739">Bug 282739</a>: performance hit on workspace start to build problem detectors<br>
-
-<h2>July 6, 2009</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=282052">Bug 282052</a>: API search engine could continue searching when an error occurs<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=276114">Bug 276114</a>: API tools code has a lot of JDT warnings<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=280288">Bug 280288</a>: Default API use search requestor does too much work configuring backing scope<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=277925">Bug 277925</a>: Delta engine could report deprecation changes<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=279524">Bug 279524</a>: API compare for jar in PDE classpath container<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=279945">Bug 279945</a>: API tools wastes memory re-creating API types<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=279552">Bug 279552</a>: NPE running API use scan<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=279729">Bug 279729</a>: ZipException scanning bundle with other entries on bundle classpath<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=280286">Bug 280286</a>: Search engine should report results after a threshold 
-
-<p>
-    <a href="http://validator.w3.org/check?uri=referer"><img
-        src="http://www.w3.org/Icons/valid-html40"
-        alt="Valid HTML 4.0 Transitional" height="31" width="88"></a>
-  </p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/plugin.properties b/eclipse/plugins/org.eclipse.pde.api.tools/plugin.properties
index 8953214..17a80ef 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/plugin.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/plugin.properties
@@ -20,4 +20,5 @@ markerSinceTags.name = @since tag problem
 markerUnsupportedTags.name = Unsupported Tag Problem
 markerApiComponentResolution.name = Resolution Problem
 markerFatalProblem.name = Fatal Problem
-markerUnusedFilters.name = Unused API Problem Filter Problem
\ No newline at end of file
+markerUnusedFilters.name = Unused API Problem Filter Problem
+markerApiUseScan.name = API Use Scan Problem
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/plugin.xml b/eclipse/plugins/org.eclipse.pde.api.tools/plugin.xml
index 49c87d4..e0e893c 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/plugin.xml
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/plugin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?>
 <!--
-    Copyright (c) 2009, 2010 IBM Corporation and others.
+    Copyright (c) 2009, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
@@ -103,6 +103,17 @@
   <attribute name="kind"/>
   <attribute name="apiMarkerID"/>
  </extension>
+  <extension
+       id="org.eclipse.pde.api.tools.marker.apiusescan"
+       name="%markerApiUseScan.name"
+       point="org.eclipse.core.resources.markers">
+  <super type="org.eclipse.core.resources.problemmarker"/>
+  <super type="org.eclipse.core.resources.textmarker"/>
+  <persistent value="true"/>
+  <attribute name="version"/>
+  <attribute name="kind"/>
+  <attribute name="apiMarkerID"/>
+ </extension>
 	<!-- ================================================================== -->
 	<!-- Extension: API nature                                              -->
 	<!-- ================================================================== -->
@@ -219,10 +230,25 @@
           name="apitooling.apiuse">
     </antTask>
     <antTask
+          class="org.eclipse.pde.api.tools.internal.tasks.ApiConsumerUseReportConversionTask"
+          library="lib/apitooling-ant.jar"
+          name="apitooling.apiconsumer_reportconversion">
+    </antTask>
+    <antTask
           class="org.eclipse.pde.api.tools.internal.tasks.ApiUseReportConversionTask"
           library="lib/apitooling-ant.jar"
           name="apitooling.apiuse_reportconversion">
     </antTask>
+        <antTask
+          class="org.eclipse.pde.api.tools.internal.tasks.MissingRefProblemsTask"
+          library="lib/apitooling-ant.jar"
+          name="apitooling.apiusescanproblems">
+    </antTask>
+    <antTask
+          class="org.eclipse.pde.api.tools.internal.tasks.MissingRefProblemsReportConversionTask"
+          library="lib/apitooling-ant.jar"
+          name="apitooling.apiusescanproblem_reportconversion">
+    </antTask>
     <antTask
           class="org.eclipse.pde.api.tools.internal.tasks.ApiMigrationTask"
           library="lib/apitooling-ant.jar"
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.properties b/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.properties
index b4303ae..7818a9d 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.properties
@@ -1,6 +1,5 @@
 ###############################################################################
-# Copyright (c) 2009 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
+# Copyright (c) 2009, 2011. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
 # http://www.eclipse.org/legal/epl-v10.html
@@ -18,3 +17,6 @@ apimigration=org.eclipse.pde.api.tools.internal.tasks.ApiMigrationTask
 apimigration_reportconversion=org.eclipse.pde.api.tools.internal.tasks.ApiMigrationReportConversionTask
 apifile_generation=org.eclipse.pde.api.tools.internal.tasks.ApiFileGenerationTask
 comparetask=org.eclipse.pde.api.tools.internal.tasks.CompareTask
+apiconsumeruse_reportconversion=org.eclipse.pde.api.tools.internal.tasks.ApiConsumerUseReportConversionTask
+apiusescanproblems=org.eclipse.pde.api.tools.internal.tasks.MissingRefProblemsTask
+apiusescanproblem_reportconversion=org.eclipse.pde.api.tools.internal.tasks.MissingRefProblemsReportConversionTask
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.xml b/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.xml
index 6591397..0906151 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.xml
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/scripts/api-tasks.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-	Copyright (c) IBM Corporation and others 2009 This page is made available under license. For full details see the LEGAL in the documentation book 		that contains this page.
+	Copyright (c) IBM Corporation and others 2009, 2011 This page is made available under license. For full details see the LEGAL in the documentation book 		that contains this page.
 
 	All Platform Debug contexts, those for org.eclipse.debug.ui, are located in this file
 	All contexts are grouped by their relation, with all relations grouped alphabetically.
@@ -19,6 +19,9 @@
 	- 'apimigration_reportconversion' org.eclipse.pde.api.tools.internal.tasks.ApiMigrationReportConversionTask
 	- 'apifile_generation' from org.eclipse.pde.api.tools.internal.tasks.ApiFileGenerationTask
 	- 'comparetask' from org.eclipse.pde.api.tools.internal.tasks.CompareTask
+	- 'apiconsumeruse_reportconversion' org.eclipse.pde.api.tools.internal.tasks.ApiConsumerUseReportConversionTask
+	- 'apiusescanproblems' org.eclipse.pde.api.tools.internal.tasks.MissingRefProblemsTask
+	- 'apiusescanproblem_reportconversion' org.eclipse.pde.api.tools.internal.tasks.MissingRefProblemsReportConversionTask
 -->
 <project name="apitask" basedir="." default="run">
 
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/scripts/buildApiToolsAntSupportJar.xml b/eclipse/plugins/org.eclipse.pde.api.tools/scripts/buildApiToolsAntSupportJar.xml
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
index fb1eedf..9ee5292 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@ import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
 /**
- * This manager is used to maintain (persist, restore, access, update) Api baselines.
+ * This manager is used to maintain (persist, restore, access, update) API baselines.
  * This manager is lazy, in that caches are built and maintained when requests
  * are made for information, nothing is pre-loaded when the manager is initialized.
  * 
@@ -300,7 +300,7 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
 	 */
 	private String getDefaultProfilePref() {
 		IPreferencesService service = Platform.getPreferencesService();
-		return service.getString(ApiPlugin.PLUGIN_ID, DEFAULT_BASELINE, null, new IScopeContext[] {new InstanceScope()});
+		return service.getString(ApiPlugin.PLUGIN_ID, DEFAULT_BASELINE, null, new IScopeContext[] {InstanceScope.INSTANCE});
 	}
 	
 	/**
@@ -312,7 +312,7 @@ public final class ApiBaselineManager implements IApiBaselineManager, ISaveParti
 		if(savelocation == null) {
 			return;
 		}
-		IEclipsePreferences node = new InstanceScope().getNode(ApiPlugin.PLUGIN_ID);
+		IEclipsePreferences node = InstanceScope.INSTANCE.getNode(ApiPlugin.PLUGIN_ID);
 		if(defaultbaseline != null) {
 			node.put(DEFAULT_BASELINE, defaultbaseline);
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescription.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescription.java
index 5adde2b..ad8f277 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescription.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescription.java
@@ -605,7 +605,7 @@ public class ApiDescription implements IApiDescription {
 	 */
 	public String toString() {
 		StringBuffer buffer = new StringBuffer();
-		buffer.append("Api description for component: ").append(fOwningComponentId); //$NON-NLS-1$
+		buffer.append("API description for component: ").append(fOwningComponentId); //$NON-NLS-1$
 		return buffer.toString();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java
index d603c8b..9294207 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java
@@ -55,7 +55,7 @@ import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
 /**
- * Base implementation of a filter store for Api components
+ * Base implementation of a filter store for API components
  * 
  * @since 1.0.0
  */
@@ -133,7 +133,7 @@ public class ApiFilterStore implements IApiFilterStore, IResourceChangeListener
 					IProject project = fProject.getProject();
 					if(!project.isAccessible()) {
 						if(DEBUG) {
-							System.out.println("project ["+fProject.getElementName()+"] is not accessible, saving termainated"); //$NON-NLS-1$ //$NON-NLS-2$
+							System.out.println("project ["+fProject.getElementName()+"] is not accessible, saving terminated"); //$NON-NLS-1$ //$NON-NLS-2$
 						}
 						return Status.CANCEL_STATUS;
 					}
@@ -883,7 +883,7 @@ public class ApiFilterStore implements IApiFilterStore, IResourceChangeListener
 	 * @see java.lang.Object#toString()
 	 */
 	public String toString() {
-		return "Api filter store for component: "+fProject.getElementName(); //$NON-NLS-1$
+		return "API filter store for component: "+fProject.getElementName(); //$NON-NLS-1$
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiPluginPreferenceInitializer.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiPluginPreferenceInitializer.java
index ac9fc92..acaa49f 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiPluginPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiPluginPreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,7 +29,7 @@ public class ApiPluginPreferenceInitializer extends AbstractPreferenceInitialize
 	}
 
 	public void initializeDefaultPreferences() {
-		IEclipsePreferences node = new DefaultScope().getNode(ApiPlugin.PLUGIN_ID);
+		IEclipsePreferences node = DefaultScope.INSTANCE.getNode(ApiPlugin.PLUGIN_ID);
 		if(node == null) {
 			return;
 		}
@@ -64,11 +64,16 @@ public class ApiPluginPreferenceInitializer extends AbstractPreferenceInitialize
 		node.put(IApiProblemTypes.INCOMPATIBLE_API_COMPONENT_VERSION_INCLUDE_INCLUDE_MINOR_WITHOUT_API_CHANGE, ApiPlugin.VALUE_DISABLED);
 		node.put(IApiProblemTypes.INCOMPATIBLE_API_COMPONENT_VERSION_INCLUDE_INCLUDE_MAJOR_WITHOUT_BREAKING_CHANGE, ApiPlugin.VALUE_DISABLED);
 		
-		node.put(IApiProblemTypes.MISSING_DEFAULT_API_BASELINE, ApiPlugin.VALUE_WARNING);
+		node.put(IApiProblemTypes.MISSING_DEFAULT_API_BASELINE, ApiPlugin.VALUE_ERROR);
 
 		// api component resolution
 		node.put(IApiProblemTypes.REPORT_RESOLUTION_ERRORS_API_COMPONENT, ApiPlugin.VALUE_WARNING);
 		node.putBoolean(IApiProblemTypes.AUTOMATICALLY_REMOVE_UNUSED_PROBLEM_FILTERS, false);
+		
+		// api use scans
+		node.put(IApiProblemTypes.API_USE_SCAN_TYPE_SEVERITY, ApiPlugin.VALUE_ERROR);
+		node.put(IApiProblemTypes.API_USE_SCAN_METHOD_SEVERITY, ApiPlugin.VALUE_ERROR);
+		node.put(IApiProblemTypes.API_USE_SCAN_FIELD_SEVERITY, ApiPlugin.VALUE_ERROR);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java
index 75e3d2b..e5dda0b 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.pde.api.tools.internal;
 
 
+
 /**
  * Constants used by API tools core plugin
  * 
@@ -65,4 +66,14 @@ public interface IApiCoreConstants {
 	 */
 	public static final String ANT_BUILD_PROFILE_NAME = "ant_build_profile"; //$NON-NLS-1$
 
+	/**
+	 * Preference to store the API Use Scan report location
+	 */
+	public static final String API_USE_SCAN_LOCATION = "API_USE_SCAN_LOCATION"; //$NON-NLS-1$
+
+	/**
+	 * Constant representing <code>XML</code>
+	 */
+	public static final String XML = "xml"; //$NON-NLS-1$
+
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiXmlConstants.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiXmlConstants.java
index e4113cd..66af521 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiXmlConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiXmlConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@ package org.eclipse.pde.api.tools.internal;
 
 /**
  * Interface containing all of the constants used in XML documents
- * in API tooling 
+ * in API Tools 
  * 
  * @since 1.0.0
  */
@@ -415,4 +415,34 @@ public interface IApiXmlConstants {
 	 * resolved. Value is: <code>alternate</code>
 	 */
 	public static final String ATTR_ALTERNATE = "alternate"; //$NON-NLS-1$
+	/**
+	 * Constant representing the root element of a reference count xml file
+	 * Value is: <code>referenceCount</code>
+	 */
+	public static final String ELEMENT_REPORTED_COUNT = "reportedcount"; //$NON-NLS-1$
+	/**
+	 * XML attribute name for the total number of references or problems found
+	 * Value is: <code>total</code>
+	 */
+	public static final String ATTR_TOTAL = "total"; //$NON-NLS-1$
+	/**
+	 * XML attribute name for the total number of problems with severity 'warning' found
+	 * Value is: <code>warnings</code>
+	 */
+	public static final String ATTR_COUNT_WARNINGS = "warnings"; //$NON-NLS-1$
+	/**
+	 * XML attribute name for the total number of problems with severity 'error' found
+	 * Value is: <code>errors</code>
+	 */
+	public static final String ATTR_COUNT_ERRORS = "errors"; //$NON-NLS-1$
+	/**
+	 * XML attribute name for the total number of illegal references found
+	 * Value is: <code>illegal</code>
+	 */
+	public static final String ATTR_COUNT_ILLEGAL = "illegal"; //$NON-NLS-1$
+	/**
+	 * XML attribute name for the total number of internal references found
+	 * Value is: <code>internal</code>
+	 */
+	public static final String ATTR_COUNT_INTERNAL = "internal"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/NonApiProjectDescription.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/NonApiProjectDescription.java
index 25cd873..191763c 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/NonApiProjectDescription.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/NonApiProjectDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 
 /**
- * An API description for a project that does not have an API tooling nature.
+ * An API description for a project that does not have an API Tools nature.
  * Keeps track of package visibility.
  * 
  * @since 1.1
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/WorkspaceDeltaProcessor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/WorkspaceDeltaProcessor.java
index 1a5cd1a..3d26955 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/WorkspaceDeltaProcessor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/WorkspaceDeltaProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
 import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.ElementChangedEvent;
 import org.eclipse.jdt.core.IElementChangedListener;
@@ -24,6 +25,7 @@ import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.pde.api.tools.internal.builder.BuildState;
 import org.eclipse.pde.api.tools.internal.model.ApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
@@ -89,6 +91,9 @@ public class WorkspaceDeltaProcessor implements IElementChangedListener, IResour
 									}
 									bmanager.disposeWorkspaceBaseline();
 									dmanager.projectClasspathChanged(proj);
+									try {
+										BuildState.setLastBuiltState(proj.getProject(), null);
+									} catch (CoreException e) {}
 									dmanager.flushElementCache(delta.getElement());
 							}
 							else if((flags & IJavaElementDelta.F_CHILDREN) != 0) {
@@ -238,12 +243,15 @@ public class WorkspaceDeltaProcessor implements IElementChangedListener, IResour
 					IResourceDelta[] children = delta.getAffectedChildren(IResourceDelta.CHANGED);
 					for (int i = 0; i < children.length; i++) {
 						resource = children[i].getResource();
-						if (children[i].getResource().getType() == IResource.PROJECT && Util.isApiProject((IProject) resource)) {
-							if ((children[i].getFlags() & IResourceDelta.DESCRIPTION) != 0) {
-								IJavaProject jp = (IJavaProject) JavaCore.create(resource);
-								dmanager.clean(jp, true, true);
-								bmanager.disposeWorkspaceBaseline();
-								break;
+						if (children[i].getResource().getType() == IResource.PROJECT) {
+							IProject project = (IProject) resource;
+							if (Util.isApiProject(project) || Util.isJavaProject(project)) {
+								if ((children[i].getFlags() & IResourceDelta.DESCRIPTION) != 0) {
+									IJavaProject jp = (IJavaProject) JavaCore.create(resource);
+									dmanager.clean(jp, true, true);
+									bmanager.disposeWorkspaceBaseline();
+									break;
+								}
 							}
 						}
 					}
@@ -252,21 +260,24 @@ public class WorkspaceDeltaProcessor implements IElementChangedListener, IResour
 			}
 			case IResourceChangeEvent.PRE_CLOSE: 
 			case IResourceChangeEvent.PRE_DELETE:{
-				if(resource.getType() == IResource.PROJECT && Util.isApiProject((IProject) resource)) {
-					if(DEBUG) {
-						if(event.getType() == IResourceChangeEvent.PRE_CLOSE) {
-							System.out.println("processed PRE_CLOSE delta for project: ["+resource.getName()+"]"); //$NON-NLS-1$ //$NON-NLS-2$
-						}
-						else {
-							if(DEBUG) {
-								System.out.println("processed PRE_DELETE delta for project: ["+resource.getName()+"]"); //$NON-NLS-1$ //$NON-NLS-2$
+				if(resource.getType() == IResource.PROJECT) {
+					IProject project = (IProject) resource;
+					if (Util.isApiProject(project) || Util.isJavaProject(project)) {
+						if(DEBUG) {
+							if(event.getType() == IResourceChangeEvent.PRE_CLOSE) {
+								System.out.println("processed PRE_CLOSE delta for project: ["+resource.getName()+"]"); //$NON-NLS-1$ //$NON-NLS-2$
+							}
+							else {
+								if(DEBUG) {
+									System.out.println("processed PRE_DELETE delta for project: ["+resource.getName()+"]"); //$NON-NLS-1$ //$NON-NLS-2$
+								}
 							}
 						}
+						bmanager.disposeWorkspaceBaseline();
+						IJavaProject javaProject = (IJavaProject) JavaCore.create(resource);
+						dmanager.clean(javaProject, false, true);
+						dmanager.flushElementCache(javaProject);
 					}
-					bmanager.disposeWorkspaceBaseline();
-					IJavaProject project = (IJavaProject) JavaCore.create(resource);
-					dmanager.clean(project, false, true);
-					dmanager.flushElementCache(project);
 				}
 				break;
 			}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
index 5d33188..d6a417c 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
@@ -30,6 +30,7 @@ import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.Position;
 import org.eclipse.pde.api.tools.internal.model.ProjectComponent;
 import org.eclipse.pde.api.tools.internal.problems.ApiProblemFactory;
@@ -108,7 +109,8 @@ public abstract class AbstractProblemDetector implements IApiProblemDetector {
 			return null;
 		}		
 		try {
-			String lookupName = getTypeName(reference.getMember()).replace('$', '.');
+			IApiMember member = reference.getMember();
+			String lookupName = getTypeName(member).replace('$', '.');
 			IType type = javaProject.findType(lookupName, new NullProgressMonitor());
 			if (type == null) {
 				return null;
@@ -127,27 +129,65 @@ public abstract class AbstractProblemDetector implements IApiProblemDetector {
 			IJavaElement element = compilationUnit;
 			if (!Util.isManifest(resource.getProjectRelativePath()) && !type.isBinary()) {
 				IDocument document = Util.getDocument(compilationUnit);
-				// retrieve line number, char start and char end
 				if (lineNumber > 0) {
+					// reference line number are 1-based, but the api problem 
+					// line number are 0-based
+					// they will be converted to 1-based at marker creation time
 					lineNumber--;
 				}
-				// get the source range for the problem
-				try {
-					Position pos = getSourceRange(type, document, reference);
-					if (pos != null) {
-						charStart = pos.getOffset();
-						if (charStart != -1) {
-							charEnd = charStart + pos.getLength();
-							lineNumber = document.getLineOfOffset(charStart);
+				// retrieve line number, char start and char end
+				if ((reference.getReferenceKind() & 
+						(IReference.REF_OVERRIDE | IReference.REF_EXTENDS | IReference.REF_IMPLEMENTS
+						| IReference.REF_PARAMETER | IReference.REF_RETURNTYPE | IReference.REF_THROWS)) != 0) {
+					IApiType enclosingType = member.getEnclosingType();
+					if (lineNumber > 0 && enclosingType != null && enclosingType.isAnonymous()) {
+						String superclass = enclosingType.getSuperclassName();
+						String name = null;
+						if ("java.lang.Object".equals(superclass)) { //$NON-NLS-1$
+							// check the superinterfaces
+							String[] superinterfaces = enclosingType.getSuperInterfaceNames();
+							if (superinterfaces != null) {
+								String superinterface = superinterfaces[0];
+								name = superinterface.substring(superinterface.lastIndexOf('.') + 1);
+							} else {
+								// this is really an anonymous class of Object
+								name = superclass.substring(superclass.lastIndexOf('.') + 1);
+							}
+						} else if (superclass != null) {
+							name = superclass.substring(superclass.lastIndexOf('.') + 1);
+						}
+						if (name != null) {
+							try {
+								IRegion lineInformation = document.getLineInformation(lineNumber);
+								String lineContents = document.get(lineInformation.getOffset(), lineInformation.getLength());
+								charStart = lineInformation.getOffset() + lineContents.indexOf(name);
+								charEnd = charStart + name.length();
+							} catch (BadLocationException e) {
+								ApiPlugin.log(e);
+								return null;
+							}
 						}
 					}
-				} catch (CoreException e) {
-					ApiPlugin.log(e);
-					return null;
 				}
-				catch (BadLocationException e) {
-					ApiPlugin.log(e);
-					return null;
+				if (charStart == -1) {
+					// get the source range for the problem
+					try {
+						Position pos = getSourceRange(type, document, reference);
+						if (pos != null) {
+							charStart = pos.getOffset();
+							if (charStart != -1) {
+								charEnd = charStart + pos.getLength();
+								lineNumber = document.getLineOfOffset(charStart);
+							}
+						}
+					} catch (CoreException e) {
+						ApiPlugin.log(e);
+						return null;
+					}
+					catch (BadLocationException e) {
+						ApiPlugin.log(e);
+						return null;
+					}
 				}
 				if(charStart > -1) {
 					element = compilationUnit.getElementAt(charStart);
@@ -159,7 +199,7 @@ public abstract class AbstractProblemDetector implements IApiProblemDetector {
 					new String[] {IApiMarkerConstants.MARKER_ATTR_HANDLE_ID, IApiMarkerConstants.API_MARKER_ATTR_ID}, 
 					new Object[] {(element == null ? compilationUnit.getHandleIdentifier() : element.getHandleIdentifier()),
 								   new Integer(IApiMarkerConstants.API_USAGE_MARKER_ID)}, 
-					lineNumber, 
+					lineNumber, // 0-based
 					charStart, 
 					charEnd, 
 					getElementType(reference), 
@@ -544,6 +584,7 @@ public abstract class AbstractProblemDetector implements IApiProblemDetector {
 	protected Position getFieldNameRange(String typeName, String fieldName, IDocument document, IReference reference) throws BadLocationException, CoreException {
 		int linenumber = reference.getLineNumber();
 		if (linenumber > 0) {
+			// line number are 1-based for the reference, but 0-based for the document
 			linenumber--;
 		}
 		if (linenumber > 0) {
@@ -599,6 +640,7 @@ public abstract class AbstractProblemDetector implements IApiProblemDetector {
 	protected Position getMethodNameRange(boolean isContructor, String name, IDocument document, IReference reference) throws CoreException, BadLocationException {
 		int linenumber = reference.getLineNumber();
 		if (linenumber > 0) {
+			// line number are 1-based for the reference, but 0-based for the document
 			linenumber--;
 		}
 		String methodname = name;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
index 4774f6a..0125aca 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,13 +11,19 @@
 package org.eclipse.pde.api.tools.internal.builder;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.Date;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.jar.JarFile;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -34,6 +40,8 @@ import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.jdt.core.IClasspathAttribute;
 import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaModelMarker;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
@@ -43,6 +51,7 @@ import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.internal.core.JavaModelManager;
 import org.eclipse.jdt.internal.core.builder.State;
 import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.api.tools.internal.ApiDescriptionManager;
 import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
@@ -54,13 +63,17 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.util.Util;
+import org.eclipse.pde.core.build.IBuild;
+import org.eclipse.pde.core.build.IBuildEntry;
+import org.eclipse.pde.core.build.IBuildModel;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.osgi.framework.Constants;
 
 import com.ibm.icu.text.MessageFormat;
 
 /**
- * Builder for creating API tooling resource markers
+ * Builder for creating API Tools resource markers
  * @since 1.0.0
  */
 public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
@@ -76,9 +89,43 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 	static final IPath SETTINGS_PATH = new Path(".settings"); //$NON-NLS-1$
 	
 	/**
+	 * Project relative path to the build.properties file
+	 */
+	public static final IPath BUILD_PROPERTIES_PATH = new Path("build.properties"); //$NON-NLS-1$
+
+	/**
 	 * Project relative path to the manifest file.
 	 */
-	static final IPath MANIFEST_PATH = new Path(JarFile.MANIFEST_NAME);
+	public static final IPath MANIFEST_PATH = new Path(JarFile.MANIFEST_NAME);
+	
+	/**
+	 * {@link Comparator} to sort {@link ManifestElement}s
+	 * @since 1.0.3
+	 */
+	static final Comparator fgManifestElementComparator = new Comparator() {
+		public int compare(Object o1, Object o2) {
+			if(o1 instanceof ManifestElement && o2 instanceof ManifestElement) {
+				return ((ManifestElement)o1).getValue().compareTo(((ManifestElement)o2).getValue());
+			}
+			return 0;
+		}
+	};
+	
+	/**
+	 * Array of header names that we care about when a manifest delta is discovered
+	 * @since 1.0.3
+	 */
+	public static final HashSet IMPORTANT_HEADERS = new HashSet(7);
+	
+	static {
+		IMPORTANT_HEADERS.add(Constants.SYSTEM_BUNDLE_SYMBOLICNAME);
+		IMPORTANT_HEADERS.add(Constants.BUNDLE_VERSION);
+		IMPORTANT_HEADERS.add(Constants.REQUIRE_BUNDLE);
+		IMPORTANT_HEADERS.add(Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT);
+		IMPORTANT_HEADERS.add(Constants.EXPORT_PACKAGE);
+		IMPORTANT_HEADERS.add(Constants.IMPORT_PACKAGE);
+		IMPORTANT_HEADERS.add(Constants.BUNDLE_CLASSPATH);
+	}
 	
 	/**
 	 * Project relative path to the .api_filters file
@@ -91,10 +138,10 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 	static final IProject[] NO_PROJECTS = new IProject[0];
 
 	/**
-	 * Constant representing the name of the 'source' attribute on API tooling markers.
-	 * Value is <code>Api Tooling</code>
+	 * Constant representing the name of the 'source' attribute on API Tools markers.
+	 * Value is <code>API Tools</code>
 	 */
-	static final String SOURCE = "Api Tooling"; //$NON-NLS-1$
+	static final String SOURCE = "API Tools"; //$NON-NLS-1$
 	
 	/**
 	 * Method used for initializing tracing in the API tool builder
@@ -129,7 +176,7 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 	private BuildState buildstate = null;
 	
 	/**
-	 * Cleans up markers associated with API tooling on the given resource.
+	 * Cleans up markers associated with API Tools on the given resource.
 	 * 
 	 * @param resource
 	 */
@@ -138,10 +185,41 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 		cleanupUsageMarkers(resource);
 		cleanupCompatibilityMarkers(resource);
 		cleanupUnsupportedTagMarkers(resource);
+		cleanApiUseScanMarkers(resource);
 		cleanupFatalMarkers(resource);
 	}
 	
 	/**
+	 * Cleans up API use scan breakage related markers on the specified resource
+	 * @param resource
+	 */
+	void cleanApiUseScanMarkers(IResource resource) {
+		try {
+			if (resource != null && resource.isAccessible()) {
+				if (DEBUG) {
+					System.out.println("cleaning api use problems"); //$NON-NLS-1$
+				}
+				resource.deleteMarkers(IApiMarkerConstants.API_USESCAN_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE);
+
+				IProject project = resource.getProject();
+				IMarker[] markers = project.findMarkers(IApiMarkerConstants.API_USESCAN_PROBLEM_MARKER, false, IResource.DEPTH_ZERO);
+				for (int i = 0; i < markers.length; i++) {
+					String typeName = markers[i].getAttribute(IApiMarkerConstants.API_USESCAN_TYPE, null);
+					IJavaElement adaptor = (IJavaElement) resource.getAdapter(IJavaElement.class);					
+					if (adaptor != null && adaptor instanceof ICompilationUnit) {
+						IType typeroot = ((ICompilationUnit)adaptor).findPrimaryType();
+						if (typeroot != null && typeName != null && typeName.startsWith(typeroot.getFullyQualifiedName())) {
+							markers[i].delete();
+						}
+					}
+				}
+			}
+		} catch (CoreException e) {
+			ApiPlugin.log(e.getStatus());
+		}
+	}
+	
+	/**
 	 * Cleans up unsupported Javadoc tag markers on the specified resource
 	 * @param resource
 	 */
@@ -271,12 +349,11 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 							buildAll(baseline, wbaseline, localMonitor.newChild(1));
 						}
 						else {	
-							IResourceDelta manifest = null;
 							IResourceDelta filters = null;
-							boolean filterbuild = false;
+							boolean full = false;
 							for (int i = 0; i < deltas.length; i++) {
-								manifest = deltas[i].findMember(MANIFEST_PATH);
-								if(manifest != null) {
+								full = shouldFullBuild(deltas[i]);
+								if(full) {
 									break;
 								}
 								filters = deltas[i].findMember(FILTER_PATH);
@@ -284,20 +361,20 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 									switch(filters.getKind()) {
 										case IResourceDelta.ADDED:
 										case IResourceDelta.REMOVED: {
-											filterbuild = true;
+											full = true;
 											break;
 										}
 										case IResourceDelta.CHANGED: {
-											filterbuild = (filters.getFlags() & IResourceDelta.REPLACED) > 0;
+											full = (filters.getFlags() & (IResourceDelta.REPLACED | IResourceDelta.CONTENT)) > 0;
 											break;
 										}
 									}
-									if(filterbuild) {
+									if(full) {
 										break;
 									}
 								}
 							}
-							if (manifest != null || filterbuild) {
+							if (full) {
 								if (DEBUG) {
 									System.out.println("Performing full build since MANIFEST.MF or .api_filters was modified"); //$NON-NLS-1$
 		 						}
@@ -356,6 +433,27 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 						}
 					}
 					this.buildstate.setBuildPathCRC(BuildState.computeBuildPathCRC(this.currentproject));
+					IFile manifest = (IFile) currentproject.findMember(MANIFEST_PATH);
+					if(manifest != null && manifest.exists()) {
+						try {
+							this.buildstate.setManifestState(ManifestElement.parseBundleManifest(manifest.getContents(), null));
+						}
+						catch (Exception e) {
+							ApiPlugin.log(e);
+						}
+					}
+					IPluginModelBase base = PluginRegistry.findModel(currentproject);
+					if(base != null) {
+						try {
+							IBuildModel model = PluginRegistry.createBuildModel(base);
+							if(model != null) {
+								this.buildstate.setBuildPropertiesState(model);
+							}
+						}
+						catch(CoreException ce) {
+							ApiPlugin.log(ce);
+						}
+					}
 					BuildState.saveBuiltState(this.currentproject, this.buildstate);
 					this.buildstate = null;
 					Util.updateMonitor(monitor, 0);
@@ -379,6 +477,149 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 	}
 	
 	/**
+	 * Returns if the backing project should be fully built, based on the delta
+	 * 
+	 * @param delta the {@link IResourceDelta} to examine
+	 * @return <code>true</code> if the project should have a full build, <code>false</code> otherwise
+	 * @since 1.0.3
+	 */
+	boolean shouldFullBuild(IResourceDelta delta) {
+		switch(delta.getKind()) {
+			case IResourceDelta.CHANGED: {
+				IResourceDelta subdelta = delta.findMember(MANIFEST_PATH);
+				if(subdelta != null) {
+					IFile file = (IFile) subdelta.getResource();
+					return file.getProject().equals(currentproject) && compareManifest(file, buildstate);
+				}
+				subdelta = delta.findMember(BUILD_PROPERTIES_PATH);
+				if(subdelta != null) {
+					IFile file = (IFile) subdelta.getResource();
+					return file.getProject().equals(currentproject) && compareBuildProperties(buildstate);
+				}
+				break;
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * Compares the current <code>MANIFEST.MF</code> against the saved state. If the {@link BuildState} is <code>null</code>
+	 * or there is no saved state for the current project context a full build is assumed.
+	 * 
+	 * @param manifest the handle to the <code>MANIFEST.MF</code> file
+	 * @param state the current {@link BuildState} or <code>null</code>
+	 * @return <code>true</code> if there are changes that require a full build, <code>false</code> otherwise
+	 * @since 1.0.3
+	 */
+	boolean compareManifest(IFile manifest, BuildState state) {
+		if(state != null) {
+			try {
+				Map stateheaders = state.getManifestState();
+				if(stateheaders != null) {
+					Map headers = ManifestElement.parseBundleManifest(manifest.getContents(), null);
+					Entry entry = null;
+					for (Iterator i = stateheaders.entrySet().iterator(); i.hasNext();) {
+						entry = (Entry) i.next();
+						String key = (String) entry.getKey();
+						String value = (String) headers.get(key);
+						ManifestElement[] e1 = ManifestElement.parseHeader(key, value);
+						ManifestElement[] e2 = ManifestElement.parseHeader(key, (String) entry.getValue());
+						if(e1 != null && e2!= null && e1.length == e2.length) {
+							Arrays.sort(e1, fgManifestElementComparator);
+							Arrays.sort(e2, fgManifestElementComparator);
+							for (int j = 0; j < e1.length; j++) {
+								String[] v1 = e1[j].getValueComponents();
+								String[] v2 = e2[j].getValueComponents();
+								//compare value bits
+								if(v1.length == v2.length) {
+									Arrays.sort(v1);
+									Arrays.sort(v2);
+									for (int k = 0; k < v2.length; k++) {
+										if(!v1[k].equals(v2[k])) {
+											return true;
+										}
+									}
+								}
+								else {
+									return true;
+								}
+								//compare directives
+								Enumeration e = e1[j].getDirectiveKeys();
+								if(e != null) {
+									while (e.hasMoreElements()) {
+										String key2 = (String) e.nextElement();
+										if(!Util.equalsOrNull(e1[j].getDirective(key2), e2[j].getDirective(key2))) {
+											return true;
+										}
+									}
+								}
+								//compare attributes
+								e = e1[j].getKeys();
+								if(e != null) {
+									while (e.hasMoreElements()) {
+										String key2 = (String) e.nextElement();
+										if(!Util.equalsOrNull(e1[j].getAttribute(key2), e2[j].getAttribute(key2))) {
+											return true;
+										}
+									}
+								}
+							}
+						}
+						else {
+							return true;
+						}
+					}
+					return false;
+				}
+			}
+			catch(Exception e) {
+				ApiPlugin.log(e);
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	/**
+	 * Compares the current <code>build.properties</code> against the saved one. If the given {@link BuildState} is <code>null</code>
+	 * or there is no saved state for the current project context a full build is assumed.
+	 * 
+	 * @param state the current {@link BuildState} or <code>null</code> 
+	 * @return <code>true</code> if there are changes that require a full build, <code>false</code> otherwise
+	 * @since 1.0.3
+	 */
+	boolean compareBuildProperties(BuildState state) {
+		if(state != null) {
+			Map map = state.getBuildPropertiesState();
+			if(map != null) {
+				IPluginModelBase base = PluginRegistry.findModel(currentproject);
+				if(base != null) {
+					try {
+						IBuildModel model = PluginRegistry.createBuildModel(base);
+						if(model != null) {
+							IBuild ibuild = model.getBuild();
+							Entry entry;
+							for (Iterator i = map.entrySet().iterator(); i.hasNext();) {
+								entry = (Entry) i.next();
+								IBuildEntry be = ibuild.getEntry((String) entry.getKey());
+								if(be != null && !entry.getValue().equals(Util.deepToString(be.getTokens()))) {
+									return true;
+								}
+							}
+						}
+					}
+					catch(CoreException ce) {
+						ApiPlugin.log(ce);
+						return false;
+					}
+				}
+			}
+			return false;
+		}
+		return true;
+	}
+	
+	/**
 	 * Returns if the builder should abort the build of the given project.
 	 * The build decides to abort if one of the following are true:
 	 * <ul>
@@ -510,7 +751,7 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 				continue;
 			}
 			if(DEBUG) {
-				System.out.println("creating marker for: "+problems[i].toString()); //$NON-NLS-1$
+				System.out.println("creating marker for: " + problems[i].toString()); //$NON-NLS-1$
 			}
 			createMarkerForProblem(category, type, problems[i]);
 		}
@@ -549,6 +790,9 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 			case IApiProblem.CATEGORY_VERSION: {
 				return IApiMarkerConstants.VERSION_NUMBERING_PROBLEM_MARKER;
 			}
+			case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM : {
+				return IApiMarkerConstants.API_USESCAN_PROBLEM_MARKER;
+			}
 		}
 		return null;
 	}
@@ -567,12 +811,28 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 			return;
 		}
 		try {
+			if (category == IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM) {
+				IMarker[] markers = resource.findMarkers(type, true, IResource.DEPTH_ZERO);
+				for (int i = 0; i < markers.length; i++) {
+					String msg = markers[i].getAttribute(IMarker.MESSAGE, null);
+					if (msg == null || msg.equalsIgnoreCase(problem.getMessage())){
+						int markerSeverity = markers[i].getAttribute(IMarker.SEVERITY, 0);
+						int problemSeverity = ApiPlugin.getDefault().getSeverityLevel(ApiProblemFactory.getProblemSeverityId(problem), this.currentproject);
+						if (markerSeverity == problemSeverity) {
+							return; // Marker already exists
+						}
+					} else {
+						markers[i].delete(); // create the marker afresh
+					}
+				}
+			}			
 			IMarker marker = resource.createMarker(type);
 			int line = problem.getLineNumber();
 			switch(category) {
 				case IApiProblem.CATEGORY_VERSION :
 				case IApiProblem.CATEGORY_API_BASELINE :
-				case IApiProblem.CATEGORY_API_COMPONENT_RESOLUTION : {
+				case IApiProblem.CATEGORY_API_COMPONENT_RESOLUTION : 
+				case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM : {
 					break;
 				}
 				default : {
@@ -611,6 +871,9 @@ public class ApiAnalysisBuilder extends IncrementalProjectBuilder {
 			if(problem.getExtraMarkerAttributeIds().length > 0) {
 				marker.setAttributes(problem.getExtraMarkerAttributeIds(), problem.getExtraMarkerAttributeValues());
 			}
+			if (DEBUG) {
+				System.out.println("Created the marker: " + marker.getId() + " - " + marker.getAttributes().entrySet()); //$NON-NLS-1$ //$NON-NLS-2$
+			}
 		} catch (CoreException e) {
 			//ignore and continue
 			return;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
index c88ee9d..bca691f 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,8 @@ import java.io.PrintWriter;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -37,6 +39,8 @@ import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
@@ -79,10 +83,13 @@ import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IApiAnalyzer;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IBuildContext;
+import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
@@ -92,6 +99,8 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeRoot;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
+import org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor;
+import org.eclipse.pde.api.tools.internal.search.UseScanManager;
 import org.eclipse.pde.api.tools.internal.util.Signatures;
 import org.eclipse.pde.api.tools.internal.util.SinceTagVersion;
 import org.eclipse.pde.api.tools.internal.util.Util;
@@ -176,7 +185,7 @@ public class BaseApiAnalyzer implements IApiAnalyzer {
 			final IApiComponent component,
 			final IBuildContext context,
 			IProgressMonitor monitor) {
-		SubMonitor localMonitor = SubMonitor.convert(monitor, BuilderMessages.BaseApiAnalyzer_analyzing_api, 7);
+		SubMonitor localMonitor = SubMonitor.convert(monitor, BuilderMessages.BaseApiAnalyzer_analyzing_api, 8);
 		try {
 			fJavaProject = getJavaProject(component);
 			this.fFilterStore = filterStore;
@@ -269,6 +278,10 @@ public class BaseApiAnalyzer implements IApiAnalyzer {
 				checkUnusedProblemFilters(bcontext, component, localMonitor.newChild(1));
 			}
 			Util.updateMonitor(localMonitor);
+			
+			if (component instanceof ProjectComponent) {
+				checkExternalDependencies(component, bcontext, null, localMonitor.newChild(1));
+			}
 		} catch(CoreException e) {
 			ApiPlugin.log(e);
 		}
@@ -285,6 +298,200 @@ public class BaseApiAnalyzer implements IApiAnalyzer {
 	}
 
 	/**
+	 * Processes the API Use Scan report for the given API Component
+	 * 
+	 * @param apiComponent
+	 * @param bcontext
+	 * @param monitor
+	 * @throws CoreException
+	 */
+	public void checkExternalDependencies(IApiComponent apiComponent, IBuildContext bcontext, Properties properties, IProgressMonitor monitor) throws CoreException {
+		if (!isSeverityEnabled(properties)) {
+			return;
+		}
+		String[] apiUseTypes = getApiUseTypes(bcontext);
+		if (DEBUG) {
+			if(apiUseTypes.length < 1) {
+				System.out.println("Checking use scan dependencies for: "+apiComponent.getSymbolicName()+" ("+apiComponent.getVersion()+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			else {
+				System.out.println("Checking use scan dependencies for: " + Arrays.asList(apiUseTypes)); //$NON-NLS-1$
+			}
+		}
+		SubMonitor localmonitor = SubMonitor.convert(monitor, BuilderMessages.checking_external_dependencies, 10);
+		IReferenceDescriptor[] externalDependencies  = UseScanManager.getInstance().getExternalDependenciesFor(apiComponent, apiUseTypes, localmonitor.newChild(10));
+		try {
+			if (externalDependencies != null) {
+				localmonitor.setWorkRemaining(externalDependencies.length);
+				HashMap problems = new HashMap();
+				for (int i = 0; i < externalDependencies.length; i++) {		
+					Util.updateMonitor(localmonitor, 1);
+					Reference externalReference = null;
+					IApiTypeRoot type = null;
+					IMemberDescriptor referencedMember = externalDependencies[i].getReferencedMember();
+					IReferenceTypeDescriptor referenceMemberType = referencedMember.getEnclosingType();
+					if (referenceMemberType != null) {
+						type = apiComponent.findTypeRoot(referenceMemberType.getQualifiedName());
+					}
+					switch (referencedMember.getElementType()) {
+						case IElementDescriptor.TYPE :
+							referenceMemberType = (IReferenceTypeDescriptor) referencedMember;
+							type = apiComponent.findTypeRoot(referenceMemberType.getQualifiedName());
+							if (type != null) {
+								externalReference = Reference.typeReference(type.getStructure(), referenceMemberType.getQualifiedName(), externalDependencies[i].getReferenceKind());
+							}
+							break;
+						case IElementDescriptor.METHOD :
+							if (type != null) {
+								externalReference = Reference.methodReference(type.getStructure(), referenceMemberType.getQualifiedName(), referencedMember.getName(), ((IMethodDescriptor) referencedMember).getSignature(), externalDependencies[i].getReferenceKind());
+							}
+							break;
+						case IElementDescriptor.FIELD :
+							if (type != null) {
+								externalReference = Reference.fieldReference(type.getStructure(), referenceMemberType.getQualifiedName(), referencedMember.getName(), externalDependencies[i].getReferenceKind());
+							}
+							break;
+					}
+					if (type == null) {
+						createExternalDependenciesProblem(problems, externalDependencies[i], referenceMemberType.getQualifiedName(), referencedMember, externalDependencies[i].getReferencedMember().getElementType(), 0);
+					} else {
+						externalReference.resolve();
+						if (externalReference.getResolvedReference() == null) {
+							createExternalDependenciesProblem(problems, externalDependencies[i], referenceMemberType.getQualifiedName(), referencedMember, externalDependencies[i].getReferencedMember().getElementType(), 1);
+						}
+					}				
+				}
+				for (Iterator iterator = problems.values().iterator(); iterator.hasNext();) {
+					IApiProblem apiProblem = (IApiProblem) iterator.next();
+					addProblem(apiProblem);
+				}
+			}
+		}
+		finally {
+			localmonitor.done();
+		}
+	}
+
+	public boolean isSeverityEnabled(Properties properties) {
+		IEclipsePreferences node = InstanceScope.INSTANCE.getNode(ApiPlugin.PLUGIN_ID);
+		if (properties == null) {
+			if (!isIgnore(node.get(IApiProblemTypes.API_USE_SCAN_TYPE_SEVERITY, ApiPlugin.VALUE_IGNORE)))
+				return true;
+			if (!isIgnore(node.get(IApiProblemTypes.API_USE_SCAN_METHOD_SEVERITY, ApiPlugin.VALUE_IGNORE)))
+				return true;
+			if (isIgnore(node.get(IApiProblemTypes.API_USE_SCAN_FIELD_SEVERITY, ApiPlugin.VALUE_IGNORE)))
+				return true;
+			return false;
+		} else {
+			if (properties.isEmpty())
+				return true; // preferences parameter not provided
+			if (!isIgnore(properties.get(IApiProblemTypes.API_USE_SCAN_TYPE_SEVERITY))) 
+				return true;
+			if (!isIgnore(properties.get(IApiProblemTypes.API_USE_SCAN_METHOD_SEVERITY))) 
+				return true;
+			if (!isIgnore(properties.get(IApiProblemTypes.API_USE_SCAN_FIELD_SEVERITY))) 
+				return true;
+			return false;
+		}
+	}
+
+	private boolean isIgnore(Object value) {
+		if (value != null && (value.toString().equalsIgnoreCase(ApiPlugin.VALUE_ERROR) || value.toString().equalsIgnoreCase(ApiPlugin.VALUE_WARNING))) {
+			return false;
+		}
+		return true;
+	}
+	
+	/**
+	 * Creates an {@link IApiProblem} for the broken external dependency 
+	 * 
+	 * @param problems
+	 * @param dependency
+	 * @param referenceType
+	 * @param referencedMember
+	 * @param elementType
+	 * @param flag
+	 * @return
+	 */
+	protected IApiProblem createExternalDependenciesProblem(HashMap problems, IReferenceDescriptor dependency, String referenceTypeName, IMemberDescriptor referencedMember, int elementType, int flag) {	
+		String resource = referenceTypeName;
+		String primaryTypeName = referenceTypeName.replace('$', '.');		
+		int charStart = -1, charEnd = -1, lineNumber = -1; 
+		if (fJavaProject != null) {
+			try {
+				
+				IType type = fJavaProject.findType(primaryTypeName);
+				IResource res = Util.getResource(fJavaProject.getProject(), type);
+				if(res == null) {
+					return null;
+				}
+				if(!Util.isManifest(res.getProjectRelativePath())) {
+					resource = res.getProjectRelativePath().toString();
+				}
+				else {
+					resource = "."; //$NON-NLS-1$
+				}
+				if (type != null) {
+					ISourceRange range = type.getNameRange();
+					charStart = range.getOffset();
+					charEnd = charStart + range.getLength();
+					try {
+						IDocument document = Util.getDocument(type.getCompilationUnit());
+						lineNumber = document.getLineOfOffset(charStart);
+					} catch (BadLocationException e) {
+						// ignore
+					}			
+					catch (CoreException ce) {}
+				}
+			} catch (JavaModelException e) {}
+		}
+		String[] msgArgs = new String[] {referenceTypeName, referencedMember.getName(), dependency.getComponent().getId()};
+		int kind = 0;
+		switch (elementType) {
+			case IElementDescriptor.TYPE :
+				kind = IApiProblem.API_USE_SCAN_TYPE_PROBLEM;				
+				break;
+			case IElementDescriptor.METHOD :
+				kind = IApiProblem.API_USE_SCAN_METHOD_PROBLEM;
+				msgArgs[1] = BuilderMessages.BaseApiAnalyzer_Method + ' ' + msgArgs[1];
+				if ((dependency.getReferenceKind() & IReference.REF_CONSTRUCTORMETHOD) > 0) {
+					msgArgs[1] = BuilderMessages.BaseApiAnalyzer_Constructor + ' ' + msgArgs[1];
+				}
+				break;
+			case IElementDescriptor.FIELD :
+				kind = IApiProblem.API_USE_SCAN_FIELD_PROBLEM;
+				break;
+		}
+		
+		int dependencyNameIndex = 2;	// the comma separated list of dependent plugins 
+		int problemId = ApiProblemFactory.createProblemId(IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM, elementType, kind, flag);
+		String problemKey = referenceTypeName +  problemId;
+		IApiProblem similarProblem =  (IApiProblem) problems.get(problemKey);
+		if (similarProblem != null) {
+			String[] existingMsgArgs = similarProblem.getMessageArguments()[dependencyNameIndex].split(", "); //$NON-NLS-1$
+			if (!Arrays.asList(existingMsgArgs).contains(msgArgs[dependencyNameIndex])) {
+				msgArgs[dependencyNameIndex] = similarProblem.getMessageArguments()[dependencyNameIndex] + ',' + ' ' + msgArgs[dependencyNameIndex];
+			} else {
+				return similarProblem;
+			}
+		}
+		IApiProblem problem = ApiProblemFactory.newApiUseScanProblem(
+				resource, 
+				primaryTypeName, 
+				msgArgs, 
+				new String[] {IApiMarkerConstants.API_USESCAN_TYPE}, 
+				new String[] {primaryTypeName },
+				lineNumber,
+				charStart,
+				charEnd,
+				elementType, 
+				kind, 
+				flag);
+		problems.put(problemKey, problem);
+		return problem;		
+	}
+	
+	/**
 	 * Checks the compatibility of each type.
 	 * 
 	 * @param changedtypes type names, may have <code>null</code> entries
@@ -1065,6 +1272,7 @@ public class BaseApiAnalyzer implements IApiAnalyzer {
 										IDelta.REMOVED,
 										IDelta.TYPE,
 										restrictions,
+										RestrictionModifiers.NO_RESTRICTIONS,
 										type.getModifiers(),
 										0,
 										typeName,
@@ -1500,7 +1708,7 @@ public class BaseApiAnalyzer implements IApiAnalyzer {
 		int kind = delta.getKind();
 		int modifiers = delta.getNewModifiers();
 		if (DeltaProcessor.isCompatible(delta)) {
-			if (!RestrictionModifiers.isReferenceRestriction(delta.getRestrictions())) {
+			if (!RestrictionModifiers.isReferenceRestriction(delta.getCurrentRestrictions())) {
 				if (Util.isVisible(modifiers)) {
 					if (Flags.isProtected(modifiers)) {
 						String typeName = delta.getTypeName();
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java
index f65b4f5..400653e 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuildState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.zip.CRC32;
 
@@ -40,10 +41,13 @@ import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.api.tools.internal.comparator.Delta;
+import org.eclipse.pde.api.tools.internal.model.ProjectComponent;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.util.Util;
+import org.eclipse.pde.core.build.IBuildEntry;
+import org.eclipse.pde.core.build.IBuildModel;
 
 /**
  * The API tools build state
@@ -57,6 +61,16 @@ public class BuildState {
 	
 	private Map compatibleChanges;
 	private Map breakingChanges;
+	/**
+	 * Map of the last saved state of the manifest file
+	 * @since 1.0.3
+	 */
+	private Map manifestChanges;
+	/**
+	 * Map of the last saved state of the build.properties file
+	 * @since 1.0.3
+	 */
+	private Map buildPropChanges;
 	private String[] reexportedComponents;
 	private Set apiToolingDependentProjects;
 	private long buildpathCRC = -1L;
@@ -67,6 +81,8 @@ public class BuildState {
 	BuildState() {
 		this.compatibleChanges = new HashMap();
 		this.breakingChanges = new HashMap();
+		this.manifestChanges = new HashMap();
+		this.buildPropChanges = new HashMap();
 	}
 	
 	/**
@@ -92,27 +108,51 @@ public class BuildState {
 			// continue to read
 			BuildState state = new BuildState();
 			state.buildpathCRC = in.readLong();
-			int numberOfCompatibleDeltas = in.readInt();
+			int count = in.readInt();
 			// read all compatible deltas
-			for (int i = 0; i < numberOfCompatibleDeltas; i++) {
+			for (int i = 0; i < count; i++) {
 				state.addCompatibleChange(readDelta(in));
 			}
-			int numberOfBreakingDeltas = in.readInt();
+			count = in.readInt();
 			// read all breaking deltas
-			for (int i = 0; i < numberOfBreakingDeltas; i++) {
+			for (int i = 0; i < count; i++) {
 				state.addBreakingChange(readDelta(in));
 			}
-			int numberOfReexportedComponents = in.readInt();
-			// read all reexported component names
-			String[] components = new String[numberOfReexportedComponents];
-			for (int i = 0; i < numberOfReexportedComponents; i++) {
+			count = in.readInt();
+			// read all re-exported component names
+			String[] components = new String[count];
+			for (int i = 0; i < count; i++) {
 				components[i] = in.readUTF();
 			}
 			state.reexportedComponents = components;
-			int numberOfApiToolingDependents = in.readInt();
-			for (int i = 0; i < numberOfApiToolingDependents; i++) {
+			count = in.readInt();
+			for (int i = 0; i < count; i++) {
 				state.addApiToolingDependentProject(in.readUTF());
 			}
+			if(in.available() > 0) {
+				count = in.readInt();
+				if(count > 0) {
+					//read the saved headers
+					HashMap map = new HashMap(count);
+					for(int i = 0; i < count; i++) {
+						String key = in.readUTF();
+						String value = in.readUTF();
+						map.put(key, value);
+					}
+					state.setManifestState(map);
+				}
+				count = in.readInt();
+				if(count > 0) {
+					//read the saved headers
+					HashMap map = new HashMap(count);
+					for(int i = 0; i < count; i++) {
+						String key = in.readUTF();
+						String value = in.readUTF();
+						map.put(key, value);
+					}
+					state.setBuildPropertiesState(map);
+				}
+			}
 			return state;
 		}
 		return null;
@@ -154,6 +194,22 @@ public class BuildState {
 		for (Iterator iterator = apiToolingDependentsProjects.iterator(); iterator.hasNext(); ) {
 			out.writeUTF((String) iterator.next());
 		}
+		Map map = state.getManifestState();
+		out.writeInt(map.size());
+		Entry entry = null;
+		for (Iterator i = map.entrySet().iterator(); i.hasNext();) {
+			entry = (Entry) i.next();
+			out.writeUTF((String) entry.getKey());
+			out.writeUTF((String) entry.getValue());
+		}
+		map = state.getBuildPropertiesState();
+		out.writeInt(map.size());
+		entry = null;
+		for (Iterator i = map.entrySet().iterator(); i.hasNext();) {
+			entry = (Entry) i.next();
+			out.writeUTF((String) entry.getKey());
+			out.writeUTF((String) entry.getValue());
+		}
 	}
 	
 	/**
@@ -189,7 +245,9 @@ public class BuildState {
 		}
 		int oldModifiers = modifiers & Delta.MODIFIERS_MASK;
 		int newModifiers = modifiers >>> Delta.NEW_MODIFIERS_OFFSET;
-		return new Delta(componentID, elementType, kind, flags, restrictions, oldModifiers, newModifiers, typeName, key, datas);
+		int previousRestrictions = restrictions >>> Delta.PREVIOUS_RESTRICTIONS_OFFSET;
+		int currentRestrictions = restrictions & Delta.RESTRICTIONS_MASK;
+		return new Delta(componentID, elementType, kind, flags, currentRestrictions, previousRestrictions, oldModifiers, newModifiers, typeName, key, datas);
 	}
 	
 	/**
@@ -210,7 +268,7 @@ public class BuildState {
 		out.writeInt(delta.getElementType());
 		out.writeInt(delta.getKind());
 		out.writeInt(delta.getFlags());
-		out.writeInt(delta.getRestrictions());
+		out.writeInt(delta.getCurrentRestrictions());
 		int modifiers = (delta.getNewModifiers() << Delta.NEW_MODIFIERS_OFFSET) | delta.getOldModifiers();
 		out.writeInt(modifiers);
 		out.writeUTF(delta.getTypeName());
@@ -347,6 +405,100 @@ public class BuildState {
 	}
 	
 	/**
+	 * Allows the last built state of the manifest to be saved. This method will perform compaction of the manifest,
+	 * removing headers that we not need to care about.
+	 * 
+	 * @param state the last built state of the manifest
+	 * @since 1.0.3
+	 */
+	public void setManifestState(Map state) {
+		if(state != null) {
+			Map compact = new HashMap(7);
+			for (Iterator i = ApiAnalysisBuilder.IMPORTANT_HEADERS.iterator(); i.hasNext();) {
+				String key = (String) i.next();
+				Object val = state.get(key);
+				if(val != null) {
+					compact.put(key, val);
+				}
+			}
+			this.manifestChanges = compact;
+		}
+		else {
+			this.manifestChanges.clear();
+		}
+	}
+	
+	/**
+	 * Returns the last saved state of the manifest or an empty {@link Map}, never <code>null</code>
+	 * 
+	 * @return the last built state of the manifest or an empty {@link Map}, never <code>null</code>
+	 * @since 1.0.3
+	 */
+	public Map getManifestState() {
+		return this.manifestChanges;
+	}
+	
+	/**
+	 * Allows the last built state of the build.properties file to be saved. This method will only save 
+	 * entries that we care about, not an entire build.properties file snap-shot.
+	 * <br><br>
+	 * The retained entries are:
+	 * <ul>
+	 * <li>names that match: <code>custom</code></li>
+	 * <li>names that start with: {@link IBuildEntry#JAR_PREFIX}</li>
+	 * <li>names that start with: <code>extra.</code></li>
+	 * </ul>
+	 * 
+	 * @param model the {@link IBuildModel} to save
+	 * @since 1.0.3
+	 */
+	public void setBuildPropertiesState(IBuildModel model) {
+		if(model != null) {
+			IBuildEntry[] entries = model.getBuild().getBuildEntries();
+			String name = null;
+			for (int i = 0; i < entries.length; i++) {
+				name = entries[i].getName();
+				if(ProjectComponent.ENTRY_CUSTOM.equals(name)) {
+					this.buildPropChanges.put(ProjectComponent.ENTRY_CUSTOM, Util.deepToString(entries[i].getTokens()));
+				}
+				else if(name.startsWith(IBuildEntry.JAR_PREFIX)) {
+					this.buildPropChanges.put(name, Util.deepToString(entries[i].getTokens()));
+				}
+				else if(name.startsWith(ProjectComponent.EXTRA_PREFIX)) {
+					this.buildPropChanges.put(name, Util.deepToString(entries[i].getTokens()));
+				}
+			}
+		}
+		else {
+			this.buildPropChanges.clear();
+		}
+	}
+	
+	/**
+	 * Allows the map to be reset to the given map, passing in <code>null</code> clears the current mapping.
+	 * @param map the map to set
+	 * @since 1.0.3
+	 */
+	void setBuildPropertiesState(Map map) {
+		if(map != null) {
+			this.buildPropChanges = map;
+		}
+		else {
+			this.buildPropChanges.clear();
+		}
+	}
+	
+	/**
+	 * Returns the last built state of the build.properties file or an empty {@link Map}, never <code>null</code>
+	 * 
+	 * @return the last built state of the build.properties file or an empty {@link Map}, never <code>null</code>
+	 * @since 1.0.3
+	 */
+	public Map getBuildPropertiesState() {
+		return this.buildPropChanges;
+	}
+	
+	/**
 	 * Returns a CRC32 code of the project's build path or -1 if unknown.
 	 * 
 	 * @return CRC32 code of the project's build path or -1
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
index 28b6ec9..42a574e 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ public class BuilderMessages extends NLS {
 	public static String api_analysis_on_0;
 	public static String building_workspace_profile;
 	public static String checking_api_usage;
+	public static String checking_external_dependencies;
 
 	public static String AbstractTypeLeakDetector_vis_type_has_no_api_description;
 	public static String ApiAnalysisBuilder_builder_for_project;
@@ -29,6 +30,8 @@ public class BuilderMessages extends NLS {
 	public static String BaseApiAnalyzer_checking_compat;
 	public static String BaseApiAnalyzer_checking_since_tags;
 	public static String BaseApiAnalyzer_comparing_api_profiles;
+	public static String BaseApiAnalyzer_Constructor;
+	public static String BaseApiAnalyzer_Method;
 	public static String BaseApiAnalyzer_more_version_problems;
 	public static String BaseApiAnalyzer_processing_deltas;
 	public static String BaseApiAnalyzer_scanning_0;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/Reference.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/Reference.java
index 7d299cf..6aabcda 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/Reference.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/Reference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -333,7 +333,7 @@ public class Reference implements IReference {
 			case IReference.T_FIELD_REFERENCE:
 				return resolveField(type, getReferencedMemberName());
 			case IReference.T_METHOD_REFERENCE:
-				return resolveVirtualMethod0(sourceComponent, type, getReferencedMemberName(), getReferencedSignature());
+				return resolveMethod(sourceComponent, type, getReferencedMemberName(), getReferencedSignature());
 			}
 		}
 		return false;
@@ -401,7 +401,7 @@ public class Reference implements IReference {
 	}		
 
 	/**
-	 * Resolves a virtual method and returns whether the method lookup was successful.
+	 * Resolves a method and returns whether the method lookup was successful.
 	 * We need to resolve the actual type that implements the method - i.e. do the virtual
 	 * method lookup.
 	 * 
@@ -412,7 +412,7 @@ public class Reference implements IReference {
 	 * @returns whether the lookup succeeded
 	 * @throws CoreException if something goes terribly wrong
 	 */
-	private boolean resolveVirtualMethod0(IApiComponent sourceComponent, IApiType type, String methodName, String methodSignature) throws CoreException {
+	private boolean resolveMethod(IApiComponent sourceComponent, IApiType type, String methodName, String methodSignature) throws CoreException {
 		IApiMethod target = type.getMethod(methodName, methodSignature);
 		if (target != null) {
 			if (target.isSynthetic()) {
@@ -432,21 +432,34 @@ public class Reference implements IReference {
 								new IApiComponent[] { sourceComponent },
 								interfacesNames[i]);
 						IApiType superinterface = classFile.getStructure();
-						if (superinterface != null && resolveVirtualMethod0(sourceComponent, superinterface, methodName, methodSignature)) {
+						if (superinterface != null && resolveMethod(sourceComponent, superinterface, methodName, methodSignature)) {
 							return true;
 						}
 					}
 				}
 				break;
+			case IReference.REF_STATICMETHOD :
+				String superclassName = type.getSuperclassName();
+				if (superclassName != null) {
+					IApiTypeRoot classFile = Util.getClassFile(
+							new IApiComponent[] { sourceComponent },
+							superclassName);
+					IApiType superclass = classFile.getStructure();
+					boolean resolved = resolveMethod(sourceComponent, superclass, methodName, methodSignature);
+					if (resolved) {
+						return resolved;
+					}
+				}
+				break;
 			case IReference.REF_VIRTUALMETHOD :
 			case IReference.REF_SPECIALMETHOD :
-				String superclassName = type.getSuperclassName();
+				superclassName = type.getSuperclassName();
 				if (superclassName != null) {
 					IApiTypeRoot classFile = Util.getClassFile(
 							new IApiComponent[] { sourceComponent },
 							superclassName);
 					IApiType superclass = classFile.getStructure();
-					boolean resolved = resolveVirtualMethod0(sourceComponent, superclass, methodName, methodSignature);
+					boolean resolved = resolveMethod(sourceComponent, superclass, methodName, methodSignature);
 					if (resolved) {
 						return resolved;
 					}
@@ -459,7 +472,7 @@ public class Reference implements IReference {
 									new IApiComponent[] { sourceComponent },
 									interfacesNames[i]);
 							IApiType superinterface = classFile.getStructure();
-							if (superinterface != null && resolveVirtualMethod0(sourceComponent, superinterface, methodName, methodSignature)) {
+							if (superinterface != null && resolveMethod(sourceComponent, superinterface, methodName, methodSignature)) {
 								return true;
 							}
 						}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
index 626178f..c1ea71e 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
@@ -85,15 +85,15 @@ public class ReferenceAnalyzer {
 		public void visit(String packageName, IApiTypeRoot classFile) {
 			if (!fMonitor.isCanceled()) {
 				try {
-					//don't process inner/anonymous/local types, this is done in the extractor
-					if(classFile.getTypeName().indexOf('$') > -1) {
-						return;
-					}
 					IApiType type = classFile.getStructure();
 					if(type == null) {
 						//do nothing for bad class files
 						return;
 					}
+					//don't process inner/anonymous/local types, this is done in the extractor
+					if(type.isMemberType() || type.isLocal() || type.isAnonymous()) {
+						return;
+					}
 					List references = type.extractReferences(fAllReferenceKinds, null);
 					// keep potential matches
 					Iterator iterator = references.iterator();
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
index 78b78c2..cb5633d 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
@@ -488,9 +488,11 @@ public class ReferenceExtractor extends ClassAdapter {
 				case Opcodes.NEW: {
 					//we can omit the NEW case as it is caught by the constructor call
 					//handle it only for anonymous / local types
-					Reference ref = (Reference) fAnonymousTypes.get(processName(type.getInternalName()));
-					if(ref != null) {
-						this.linePositionTracker.addLocation(ref);
+					List refs = (List) fAnonymousTypes.get(processName(type.getInternalName()));
+					if(refs != null) {
+						for (Iterator iterator = refs.iterator(); iterator.hasNext(); ) {
+							this.linePositionTracker.addLocation((Reference) iterator.next());
+						}
 					}
 				}
 			}
@@ -1231,16 +1233,18 @@ public class ReferenceExtractor extends ClassAdapter {
 					//do nothing for a bad classfile
 					return;
 				}
-				Set refs = null;
+				Set refs = processInnerClass(type, fReferenceKinds);;
 				if(type.isAnonymous() || type.isLocal()) {
-					//visit the class files for the dependent anonymous and local inner types
-					refs = processInnerClass(type, IReference.REF_EXTENDS);
-					if(refs.iterator().hasNext()) {
-						fAnonymousTypes.put(pname, refs.iterator().next());
+					// visit the class files for the dependent anonymous and local inner types
+					// set a line number for all references with no line numbers
+					List allRefs = new ArrayList();
+					for (Iterator iterator = refs.iterator(); iterator.hasNext(); ) {
+						Reference reference = (Reference) iterator.next();
+						if (reference.getLineNumber() < 0) {
+							allRefs.add(reference);
+						}
 					}
-				}
-				else {
-					refs = processInnerClass(type, fReferenceKinds);
+					fAnonymousTypes.put(pname, allRefs);
 				}
 				if(refs != null && !refs.isEmpty()) {
 					this.collector.addAll(refs);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
index 532d617..bb0b3e9 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -248,6 +248,7 @@ public class SystemApiDetector extends AbstractProblemDetector {
 			case IReference.T_TYPE_REFERENCE : {
 				int linenumber = reference.getLineNumber();
 				if (linenumber > 0) {
+					// line number starts at 0 for the 
 					linenumber--;
 				}
 				if (linenumber > 0) {
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
index f486327..6d36c23 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2009 IBM Corporation and others.
+# Copyright (c) 2008, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ api_analysis_builder=API Analysis Builder
 api_analysis_on_0=Analyzing API
 building_workspace_profile=Building workspace API baseline
 checking_api_usage=Checking API use of ''{0}''
+checking_external_dependencies=Checking external dependencies
 AbstractTypeLeakDetector_vis_type_has_no_api_description=Visible type {0} has no API description
 ApiAnalysisBuilder_builder_for_project=Builder for project: [{0}]
 ApiAnalysisBuilder_finding_affected_source_files=Finding affected source in ''{0}''
@@ -22,6 +23,8 @@ BaseApiAnalyzer_analyzing_api=Analyzing API
 BaseApiAnalyzer_checking_compat=Checking API compatibility...
 BaseApiAnalyzer_checking_since_tags=Checking @since tags...
 BaseApiAnalyzer_comparing_api_profiles=Comparing ''{0}'' to API baseline ''{1}''...
+BaseApiAnalyzer_Constructor=constructor
+BaseApiAnalyzer_Method=method
 BaseApiAnalyzer_more_version_problems={0} more change(s)...
 BaseApiAnalyzer_processing_deltas=Processing API deltas...
 BaseApiAnalyzer_scanning_0=Scanning ''{0}'' for unsupported API Javadoc tags...
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
index 60cce86..e19272a 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
@@ -173,7 +173,10 @@ public class ClassFileComparator {
 		this.addDelta(new Delta(Util.getDeltaComponentVersionsId(this.component2), elementType, kind, flags, restrictions, oldModifiers, newModifiers, type.getName(), key, data));
 	}
 	private void addDelta(int elementType, int kind, int flags, int restrictions, int oldModifiers, int newModifiers, IApiType type, String key, String[] datas) {
-		this.addDelta(new Delta(Util.getDeltaComponentVersionsId(this.component2), elementType, kind, flags, restrictions, oldModifiers, newModifiers, type.getName(), key, datas));
+		this.addDelta(new Delta(Util.getDeltaComponentVersionsId(this.component2), elementType, kind, flags, restrictions, 0, oldModifiers, newModifiers, type.getName(), key, datas));
+	}
+	private void addDelta(int elementType, int kind, int flags, int currentRestrictions, int previousRestrictions, int oldModifiers, int newModifiers, IApiType type, String key, String[] datas) {
+		this.addDelta(new Delta(Util.getDeltaComponentVersionsId(this.component2), elementType, kind, flags, currentRestrictions, previousRestrictions, oldModifiers, newModifiers, type.getName(), key, datas));
 	}
 	/**
 	 * Checks if the super-class set has been change in any way compared to the baseline (grown or reduced or types changed)
@@ -334,6 +337,7 @@ public class ClassFileComparator {
 											IDelta.ADDED,
 											IDelta.SUPER_INTERFACE_WITH_METHODS,
 											this.currentDescriptorRestrictions,
+											this.initialDescriptorRestrictions,
 											this.type1.getModifiers(),
 											this.type2.getModifiers(),
 											this.type1,
@@ -432,6 +436,7 @@ public class ClassFileComparator {
 												IDelta.ADDED,
 												IDelta.SUPER_INTERFACE_WITH_METHODS,
 												this.currentDescriptorRestrictions,
+												this.initialDescriptorRestrictions,
 												this.type1.getModifiers(),
 												this.type2.getModifiers(),
 												this.type1,
@@ -542,6 +547,7 @@ public class ClassFileComparator {
 											IDelta.CHANGED,
 											IDelta.DECREASE_ACCESS,
 											restrictions | this.currentDescriptorRestrictions,
+											0,
 											typeMember.getModifiers(),
 											typeMember2.getModifiers(),
 											typeMember.getName(),
@@ -558,6 +564,7 @@ public class ClassFileComparator {
 											IDelta.CHANGED,
 											IDelta.TYPE_VISIBILITY,
 											restrictions | this.currentDescriptorRestrictions,
+											0,
 											typeMember.getModifiers(),
 											typeMember2.getModifiers(),
 											typeMember.getName(),
@@ -2369,12 +2376,13 @@ public class ClassFileComparator {
 			if (restrictions != referenceRestrictions) {
 				if (!Flags.isFinal(access2)) {
 					if (RestrictionModifiers.isOverrideRestriction(restrictions)
-							&& !RestrictionModifiers.isOverrideRestriction(referenceRestrictions)) {
+								&& !RestrictionModifiers.isOverrideRestriction(referenceRestrictions)) {
 							this.addDelta(
 									getElementType(method),
 									IDelta.ADDED,
 									IDelta.RESTRICTIONS,
 									restrictions,
+									referenceRestrictions,
 									access,
 									access2,
 									this.type1,
@@ -2964,6 +2972,7 @@ public class ClassFileComparator {
 					IDelta.ADDED,
 					IDelta.ENUM_CONSTANT,
 					this.currentDescriptorRestrictions,
+					this.initialDescriptorRestrictions,
 					0,
 					access,
 					this.type1,
@@ -2975,6 +2984,7 @@ public class ClassFileComparator {
 					IDelta.ADDED,
 					IDelta.FIELD,
 					this.currentDescriptorRestrictions,
+					this.initialDescriptorRestrictions,
 					0,
 					access,
 					this.type1,
@@ -3067,6 +3077,7 @@ public class ClassFileComparator {
 						IDelta.ADDED,
 						IDelta.CONSTRUCTOR,
 						restrictionsForMethodAddition,
+						this.initialDescriptorRestrictions,
 						0,
 						access,
 						this.type1,
@@ -3079,6 +3090,7 @@ public class ClassFileComparator {
 							IDelta.ADDED,
 							IDelta.METHOD_WITH_DEFAULT_VALUE,
 							restrictionsForMethodAddition,
+							this.initialDescriptorRestrictions,
 							0,
 							access,
 							this.type1,
@@ -3090,6 +3102,7 @@ public class ClassFileComparator {
 							IDelta.ADDED,
 							IDelta.METHOD_WITHOUT_DEFAULT_VALUE,
 							restrictionsForMethodAddition,
+							this.initialDescriptorRestrictions,
 							0,
 							access,
 							this.type1,
@@ -3190,6 +3203,7 @@ public class ClassFileComparator {
 							IDelta.ADDED,
 							found ? IDelta.METHOD_MOVED_DOWN : IDelta.METHOD,
 							restrictionsForMethodAddition,
+							this.initialDescriptorRestrictions,
 							0,
 							method.getModifiers(),
 							this.type1,
@@ -3201,6 +3215,7 @@ public class ClassFileComparator {
 							IDelta.ADDED,
 							found ? IDelta.OVERRIDEN_METHOD : IDelta.METHOD,
 							restrictionsForMethodAddition,
+							this.initialDescriptorRestrictions,
 							0,
 							method.getModifiers(),
 							this.type1,
@@ -3214,6 +3229,7 @@ public class ClassFileComparator {
 					IDelta.ADDED,
 					method.isConstructor() ? IDelta.CONSTRUCTOR : IDelta.METHOD,
 					restrictionsForMethodAddition,
+					this.initialDescriptorRestrictions,
 					0,
 					method.getModifiers(),
 					this.type1,
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Delta.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Delta.java
index 4163555..5de7a03 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Delta.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Delta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,9 @@ public class Delta implements IDelta {
 	public static final int MODIFIERS_MASK = 0xFFFF;
 	public static final int NEW_MODIFIERS_OFFSET = 16;
 
+	public static final int RESTRICTIONS_MASK = 0xFFFF;
+	public static final int PREVIOUS_RESTRICTIONS_OFFSET = 16;
+
 	/**
 	 * Writes the delta to the given {@link PrintWriter}
 	 * @param delta
@@ -105,17 +108,17 @@ public class Delta implements IDelta {
 	 * @param data
 	 */
 	public Delta(String componentID, int elementType, int kind, int flags, int restrictions, int oldModifiers, int newModifiers, String typeName, String key, String data) {
-		this(componentID, elementType, kind, flags, restrictions, oldModifiers, newModifiers, typeName, key, new String[] {data});
+		this(componentID, elementType, kind, flags, restrictions, 0, oldModifiers, newModifiers, typeName, key, new String[] {data});
 	}
 
-	public Delta(String componentID, int elementType, int kind, int flags, int restrictions, int oldModifiers, int newModifiers, String typeName, String key, String[] datas) {
+	public Delta(String componentID, int elementType, int kind, int flags, int restrictions, int previousRestrictions, int oldModifiers, int newModifiers, String typeName, String key, String[] datas) {
 		this.componentID = componentID;
 		this.elementType = elementType;
 		this.kind = kind;
 		this.flags = flags;
-		this.modifiers = (newModifiers & MODIFIERS_MASK) << 16 | (oldModifiers & MODIFIERS_MASK);
+		this.modifiers = (newModifiers & MODIFIERS_MASK) << NEW_MODIFIERS_OFFSET | (oldModifiers & MODIFIERS_MASK);
 		this.typeName = typeName == null ? Util.EMPTY_STRING : typeName;
-		this.restrictions = restrictions;
+		this.restrictions = (previousRestrictions & RESTRICTIONS_MASK) << PREVIOUS_RESTRICTIONS_OFFSET | (restrictions & RESTRICTIONS_MASK);
 		this.key = key;
 		this.datas = datas;
 	}
@@ -226,6 +229,12 @@ public class Delta implements IDelta {
 		return this.componentID;
 	}
 
+	public String getComponentId() {
+		if (this.componentID == null) return null;
+		int index = this.componentID.indexOf(Util.VERSION_SEPARATOR);
+		return this.componentID.substring(0, index);
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta#getArguments()
 	 */
@@ -298,12 +307,17 @@ public class Delta implements IDelta {
 		return this.modifiers & MODIFIERS_MASK;
 	}
 	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta#getRestrictions()
+	 * @see org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta#getCurrentRestrictions()
 	 */
-	public int getRestrictions() {
-		return this.restrictions;
+	public int getCurrentRestrictions() {
+		return (this.restrictions & RESTRICTIONS_MASK);
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta#getPreviousRestrictions()
+	 */
+	public int getPreviousRestrictions() {
+		return (this.restrictions >>> PREVIOUS_RESTRICTIONS_OFFSET);
 	}
-	
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta#getTypeName()
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/DeltaXmlVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/DeltaXmlVisitor.java
index e4ac74c..a9b915f 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/DeltaXmlVisitor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/DeltaXmlVisitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,7 +73,7 @@ public class DeltaXmlVisitor extends DeltaVisitor {
 		deltaElement.setAttribute(IApiXmlConstants.ATTR_NAME_COMPATIBLE, Boolean.toString(DeltaProcessor.isCompatible(delta)));
 		deltaElement.setAttribute(IApiXmlConstants.ATTR_NAME_OLD_MODIFIERS, Integer.toString(delta.getOldModifiers()));
 		deltaElement.setAttribute(IApiXmlConstants.ATTR_NAME_NEW_MODIFIERS, Integer.toString(delta.getNewModifiers()));
-		deltaElement.setAttribute(IApiXmlConstants.ATTR_RESTRICTIONS, Integer.toString(delta.getRestrictions()));
+		deltaElement.setAttribute(IApiXmlConstants.ATTR_RESTRICTIONS, Integer.toString(delta.getCurrentRestrictions()));
 		String apiComponentID = delta.getComponentVersionId();
 		if (apiComponentID != null) {
 			deltaElement.setAttribute(IApiXmlConstants.ATTR_NAME_COMPONENT_ID, apiComponentID);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Messages.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Messages.java
index a45d0a3..b21c33c 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -418,10 +418,10 @@ public class Messages extends NLS {
 							case IDelta.SYNCHRONIZED_TO_NON_SYNCHRONIZED :
 								return 74;
 							case IDelta.NON_FINAL_TO_FINAL :
-								if (RestrictionModifiers.isExtendRestriction(delta.getRestrictions())) {
+								if (RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions())) {
 									return 81;
 								}
-								if (RestrictionModifiers.isOverrideRestriction(delta.getRestrictions())) {
+								if (RestrictionModifiers.isOverrideRestriction(delta.getCurrentRestrictions())) {
 									return 82;
 								}
 								return 83;
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelFactory.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelFactory.java
index 3e4e801..5e0e593 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelFactory.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,17 +11,29 @@
 package org.eclipse.pde.api.tools.internal.model;
 
 import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.runtime.URIUtil;
 import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.internal.core.target.provisional.IBundleContainer;
+import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
 
 /**
  * Utility class for creating new {@link org.eclipse.pde.api.tools.internal.provisional.model.IApiElement}s
@@ -31,6 +43,21 @@ import org.eclipse.pde.core.plugin.IPluginModelBase;
  */
 public class ApiModelFactory {
 
+	private static final String CVS_FOLDER_NAME = "CVS"; //$NON-NLS-1$
+	public static final IApiComponent[] NO_COMPONENTS = new IApiComponent[0];
+	
+	/**
+	 * {@link FilenameFilter} for CVS files
+	 * @since 1.0.1
+	 */
+	static class CVSNameFilter implements FilenameFilter {
+		public boolean accept(File dir, String name) {
+			return !name.equalsIgnoreCase(CVS_FOLDER_NAME);
+		}
+	}
+	
+	private static CVSNameFilter fgCvsFilter = new CVSNameFilter();
+	
 	/**
 	 * Next available bundle id
 	 */
@@ -182,4 +209,75 @@ public class ApiModelFactory {
 	public static IApiBaseline newApiBaseline(String name, File eeDescription, String location) throws CoreException {
 		return new ApiBaseline(name, eeDescription, location);
 	}
-}
+	
+	/**
+	 * Collects API components for the bundles part of the specified installation and adds them to the baseline. The
+	 * components that were added to the baseline are returned.
+	 * 
+	 * @param baseline The baseline to add the components to
+	 * @param installLocation location of an installation that components are collected from
+	 * @param monitor progress monitor or <code>null</code>, the caller is responsible for calling {@link IProgressMonitor#done()} 
+	 * @return List of API components that were added to the baseline, possibly empty, never <code>null</code>
+	 * @throws CoreException If problems occur getting components or modifying the baseline
+	 */
+	public static IApiComponent[] addComponents(IApiBaseline baseline, String installLocation, IProgressMonitor monitor) throws CoreException {
+		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.configuring_baseline, 50);
+		IApiComponent[] result = null;
+		try {
+			// Acquire the service
+			ITargetPlatformService service = null;
+			ApiPlugin plugin = ApiPlugin.getDefault();
+			if (plugin != null){
+				service = (ITargetPlatformService) ApiPlugin.getDefault().acquireService(ITargetPlatformService.class.getName());
+				Util.updateMonitor(subMonitor, 1);
+				IBundleContainer container = service.newProfileContainer(installLocation, null);
+				ITargetDefinition definition = service.newTarget();
+				subMonitor.subTask(Messages.resolving_target_definition);
+				container.resolve(definition, subMonitor.newChild(30));
+				Util.updateMonitor(subMonitor, 1);
+				IResolvedBundle[] bundles = container.getBundles();
+				List components = new ArrayList();
+				if (bundles.length > 0) {
+					subMonitor.setWorkRemaining(bundles.length);
+					for (int i = 0; i < bundles.length; i++) {
+						Util.updateMonitor(subMonitor, 1);
+							if (!bundles[i].isSourceBundle()) {
+								IApiComponent component = ApiModelFactory.newApiComponent(baseline, URIUtil.toFile(bundles[i].getBundleInfo().getLocation()).getAbsolutePath());
+								if (component != null) {
+									subMonitor.subTask(NLS.bind(Messages.adding_component__0, component.getSymbolicName()));
+									components.add(component);
+								}
+							}
+					}
+				}
+				result = (IApiComponent[])components.toArray(new IApiComponent[components.size()]);
+			} else {
+				// The target platform service is unavailable (OSGi isn't running), add components by searching the plug-ins directory
+				File dir = new File(installLocation);
+				if(dir.exists()) {
+					File[] files = dir.listFiles(fgCvsFilter);
+					if(files == null) {
+						return NO_COMPONENTS;
+					}
+					List components = new ArrayList();
+					for (int i = 0; i < files.length; i++) {
+						File bundle = files[i];
+						IApiComponent component = ApiModelFactory.newApiComponent(baseline, bundle.getAbsolutePath());
+						if(component != null) {
+							components.add(component);
+						}
+					}
+					result = (IApiComponent[]) components.toArray(new IApiComponent[components.size()]);
+				}
+			}
+			if(result != null) {
+				baseline.addApiComponents(result);
+				return result;
+			}
+			return NO_COMPONENTS;
+		}
+		finally {
+			subMonitor.done();
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
index d23304b..4f628e1 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -327,7 +327,7 @@ public class BundleComponent extends Component {
 			version = ver != null ? new Version(ver) : null;
 		}
 		catch (NumberFormatException nfe) {
-			version = null;
+			// ignore
 		}
 		ManifestElement[] name = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, (String)manifest.get(Constants.BUNDLE_SYMBOLICNAME));
 		if(name.length < 1) {
@@ -1011,7 +1011,10 @@ public class BundleComponent extends Component {
 	 */
 	public synchronized String getVersion() {
 		init();
-		return fVersion.toString();
+		// remove the qualifier
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(fVersion.getMajor()).append('.').append(fVersion.getMinor()).append('.').append(fVersion.getMicro());
+		return String.valueOf(buffer);
 	}
 	
 	/**
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java
index ad43ffe..bd29b36 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java
@@ -21,6 +21,8 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeContainer;
+import org.eclipse.pde.api.tools.internal.search.IReferenceCollection;
+import org.eclipse.pde.api.tools.internal.search.UseScanReferences;
 
 /**
  * Common implementation of an API component as a composite class file container.
@@ -34,9 +36,14 @@ public abstract class Component extends AbstractApiTypeContainer implements IApi
 	private IApiDescription fApiDescription = null;
 		
 	/**
-	 * Api Filter store
+	 * API Filter store
 	 */
 	private IApiFilterStore fFilterStore = null;
+
+	/**
+	 * References in API use scan reports
+	 */
+	private IReferenceCollection fReferences;
 	
 	/**
 	 * Constructs an API component in the given {@link IApiBaseline}.
@@ -178,4 +185,15 @@ public abstract class Component extends AbstractApiTypeContainer implements IApi
 	 * @throws CoreException
 	 */
 	protected abstract IApiFilterStore createApiFilterStore() throws CoreException;	
+	
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent#getExternalDependencies()
+	 */
+	public IReferenceCollection getExternalDependencies() {
+		if (fReferences == null) {
+			fReferences = new UseScanReferences();
+		}
+		return fReferences;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.java
index d210926..094f8fd 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.java
@@ -14,6 +14,7 @@ import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.pde.api.tools.internal.model.Messages"; //$NON-NLS-1$
+	public static String adding_component__0;
 	public static String ApiType_0;
 	public static String ApiType_1;
 	public static String ApiType_2;
@@ -21,6 +22,8 @@ public class Messages extends NLS {
 	public static String ApiScope_0;
 	public static String BundleApiComponent_baseline_disposed;
 	public static String BundleComponent_failed_to_lookup_fragment;
+	public static String configuring_baseline;
+	public static String resolving_target_definition;
 	
 	static {
 		// initialize resource bundle
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.properties b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.properties
index 7a2fbcf..a4a9bd2 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Messages.properties
@@ -8,6 +8,7 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
+adding_component__0=\ adding component {0}
 ApiType_0=Unable to resolve super interface {0} for {1}
 ApiType_1=Unable to resolve superclass {0} for {1}
 ApiType_2=Unsupported operation - API component required for resolution
@@ -15,3 +16,5 @@ ApiType_3=Unable to resolve member type {0} for {1}
 ApiScope_0=Unable to visit this element type: {0}
 BundleApiComponent_baseline_disposed=Baseline ''{0}'' is disposed
 BundleComponent_failed_to_lookup_fragment=Failed to look up resolved fragment: {0}
+configuring_baseline=Configuring baseline
+resolving_target_definition=resolving target definition...
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectComponent.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectComponent.java
index abb4d75..42fa853 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectComponent.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -44,9 +43,9 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeContainer;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.core.build.IBuild;
 import org.eclipse.pde.core.build.IBuildEntry;
+import org.eclipse.pde.core.build.IBuildModel;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
-import org.eclipse.pde.internal.core.build.WorkspaceBuildModel;
 import org.osgi.framework.BundleException;
 
 /**
@@ -59,6 +58,18 @@ import org.osgi.framework.BundleException;
 public class ProjectComponent extends BundleComponent {
 	
 	/**
+	 * Constant used to describe the custom build.properties entry
+	 * @since 1.0.3
+	 */
+	public static final String ENTRY_CUSTOM = "custom"; //$NON-NLS-1$
+
+	/**
+	 * Constant used to describe build.properties that start with <code>extra.</code>
+	 * @since 1.0.3
+	 */
+	public static final String EXTRA_PREFIX = "extra."; //$NON-NLS-1$
+
+	/**
 	 * Constant used for controlling tracing in the plug-in workspace component
 	 */
 	private static boolean DEBUG = Util.DEBUG;
@@ -211,86 +222,66 @@ public class ProjectComponent extends BundleComponent {
 		fPathToOutputContainers = new HashMap(4);
 		fOutputLocationToContainer = new HashMap(4);
 		if (fProject.exists() && fProject.getProject().isOpen()) {
-			IFile prop = fProject.getProject().getFile("build.properties"); //$NON-NLS-1$
-			if (prop.exists()) {
-				WorkspaceBuildModel properties = new WorkspaceBuildModel(prop);
-				IBuild build = properties.getBuild();
-				IBuildEntry entry = build.getEntry("custom"); //$NON-NLS-1$
-				if (entry != null) {
-					String[] tokens = entry.getTokens();
-					if (tokens.length == 1 && tokens[0].equals("true")) { //$NON-NLS-1$
-						// hack : add the current output location for each classpath entries
-						IClasspathEntry[] classpathEntries = fProject.getRawClasspath();
-						List containers = new ArrayList();
-						for (int i = 0; i < classpathEntries.length; i++) {
-							IClasspathEntry classpathEntry = classpathEntries[i];
-							switch(classpathEntry.getEntryKind()) {
-								case IClasspathEntry.CPE_SOURCE :
-									String containerPath = classpathEntry.getPath().removeFirstSegments(1).toString();
-									IApiTypeContainer container = getApiTypeContainer(containerPath, this);
-									if (container != null && !containers.contains(container)) {
-										containers.add(container);
-									}
-									break;
-								case IClasspathEntry.CPE_VARIABLE :
-									classpathEntry = JavaCore.getResolvedClasspathEntry(classpathEntry);
-									//$FALL-THROUGH$
-								case IClasspathEntry.CPE_LIBRARY :
-									IPath path = classpathEntry.getPath();
-									if (Util.isArchive(path.lastSegment())) {
-										IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
-										if (resource != null) {
-											// jar inside the workspace
-											containers.add(new ArchiveApiTypeContainer(this, resource.getLocation().toOSString()));
-										} else {
-											// external jar
-											containers.add(new ArchiveApiTypeContainer(this, path.toOSString()));
+			IPluginModelBase model = PluginRegistry.findModel(fProject.getProject());
+			if (model != null) {
+				IBuildModel buildModel = PluginRegistry.createBuildModel(model);
+				if (buildModel != null) {
+					IBuild build = buildModel.getBuild();
+					IBuildEntry entry = build.getEntry(ENTRY_CUSTOM); 
+					if (entry != null) {
+						String[] tokens = entry.getTokens();
+						if (tokens.length == 1 && tokens[0].equals("true")) { //$NON-NLS-1$
+							// hack : add the current output location for each classpath entries
+							IClasspathEntry[] classpathEntries = fProject.getRawClasspath();
+							List containers = new ArrayList();
+							for (int i = 0; i < classpathEntries.length; i++) {
+								IClasspathEntry classpathEntry = classpathEntries[i];
+								switch(classpathEntry.getEntryKind()) {
+									case IClasspathEntry.CPE_SOURCE :
+										String containerPath = classpathEntry.getPath().removeFirstSegments(1).toString();
+										IApiTypeContainer container = getApiTypeContainer(containerPath, this);
+										if (container != null && !containers.contains(container)) {
+											containers.add(container);
+										}
+										break;
+									case IClasspathEntry.CPE_VARIABLE :
+										classpathEntry = JavaCore.getResolvedClasspathEntry(classpathEntry);
+										//$FALL-THROUGH$
+									case IClasspathEntry.CPE_LIBRARY :
+										IPath path = classpathEntry.getPath();
+										if (Util.isArchive(path.lastSegment())) {
+											IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
+											if (resource != null) {
+												// jar inside the workspace
+												containers.add(new ArchiveApiTypeContainer(this, resource.getLocation().toOSString()));
+											} else {
+												// external jar
+												containers.add(new ArchiveApiTypeContainer(this, path.toOSString()));
+											}
 										}
-									}
-									break;
+										break;
+								}
 							}
-						}
-						if (!containers.isEmpty()) {
-							IApiTypeContainer cfc = null;
-							if (containers.size() == 1) {
-								cfc = (IApiTypeContainer) containers.get(0);
-							} else {
-								cfc = new CompositeApiTypeContainer(this, containers);
+							if (!containers.isEmpty()) {
+								IApiTypeContainer cfc = null;
+								if (containers.size() == 1) {
+									cfc = (IApiTypeContainer) containers.get(0);
+								} else {
+									cfc = new CompositeApiTypeContainer(this, containers);
+								}
+								fPathToOutputContainers.put(".", cfc); //$NON-NLS-1$
 							}
-							fPathToOutputContainers.put(".", cfc); //$NON-NLS-1$
 						}
-					}
-				} else {
-					IBuildEntry[] entries = build.getBuildEntries();
-					int length = entries.length;
-					for (int i = 0; i < length; i++) {
-						IBuildEntry buildEntry = entries[i];
-						if (buildEntry.getName().startsWith(IBuildEntry.JAR_PREFIX)) {
-							String jar = buildEntry.getName().substring(IBuildEntry.JAR_PREFIX.length());
-							String[] tokens = buildEntry.getTokens();
-							if (tokens.length == 1) {
-								IApiTypeContainer container = getApiTypeContainer(tokens[0], this);
-								if (container != null) {
-									fPathToOutputContainers.put(jar, container);
-								}
-							} else {
-								List containers = new ArrayList();
-								for (int j = 0; j < tokens.length; j++) {
-									String currentToken = tokens[j];
-									IApiTypeContainer container = getApiTypeContainer(currentToken, this);
-									if (container != null && !containers.contains(container)) {
-										containers.add(container);
-									}
-								}
-								if (!containers.isEmpty()) {
-									IApiTypeContainer cfc = null;
-									if (containers.size() == 1) {
-										cfc = (IApiTypeContainer) containers.get(0);
-									} else {
-										cfc = new CompositeApiTypeContainer(this, containers);
-									}
-									fPathToOutputContainers.put(jar, cfc);
-								}
+					} else {
+						IBuildEntry[] entries = build.getBuildEntries();
+						int length = entries.length;
+						for (int i = 0; i < length; i++) {
+							IBuildEntry buildEntry = entries[i];
+							String name = buildEntry.getName();
+							if (name.startsWith(IBuildEntry.JAR_PREFIX)) {
+								retrieveContainers(name, IBuildEntry.JAR_PREFIX, buildEntry);
+							} else if (name.startsWith(EXTRA_PREFIX)) { 
+								retrieveContainers(name, EXTRA_PREFIX, buildEntry); 
 							}
 						}
 					}
@@ -300,7 +291,49 @@ public class ProjectComponent extends BundleComponent {
 		}
 		return Collections.EMPTY_LIST;
 	}
-	
+	private void retrieveContainers(String name, String prefix, IBuildEntry buildEntry) throws CoreException {
+		String jar = name.substring(prefix.length());
+		String[] tokens = buildEntry.getTokens();
+		if (tokens.length == 1) {
+			IApiTypeContainer container = getApiTypeContainer(tokens[0], this);
+			if (container != null) {
+				IApiTypeContainer existingContainer = (IApiTypeContainer) this.fPathToOutputContainers.get(jar);
+				if (existingContainer != null) {
+					// concat both containers
+					List allContainers = new ArrayList();
+					allContainers.add(existingContainer);
+					allContainers.add(container);
+					IApiTypeContainer apiTypeContainer = new CompositeApiTypeContainer(this, allContainers);
+					fPathToOutputContainers.put(jar, apiTypeContainer);
+				} else {
+					fPathToOutputContainers.put(jar, container);
+				}
+			}
+		} else {
+			List containers = new ArrayList();
+			for (int j = 0; j < tokens.length; j++) {
+				String currentToken = tokens[j];
+				IApiTypeContainer container = getApiTypeContainer(currentToken, this);
+				if (container != null && !containers.contains(container)) {
+					containers.add(container);
+				}
+			}
+			if (!containers.isEmpty()) {
+				IApiTypeContainer existingContainer = (IApiTypeContainer) this.fPathToOutputContainers.get(jar);
+				if (existingContainer != null) {
+					// concat both containers
+					containers.add(existingContainer);
+				}
+				IApiTypeContainer cfc = null;
+				if (containers.size() == 1) {
+					cfc = (IApiTypeContainer) containers.get(0);
+				} else {
+					cfc = new CompositeApiTypeContainer(this, containers);
+				}
+				fPathToOutputContainers.put(jar, cfc);
+			}
+		}
+	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.internal.BundleApiComponent#createClassFileContainer(java.lang.String)
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/natures/ApiToolProjectNature.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/natures/ApiToolProjectNature.java
index 1d6fbae..22089f9 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/natures/ApiToolProjectNature.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/natures/ApiToolProjectNature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,14 +22,14 @@ public class ApiToolProjectNature implements IProjectNature {
 	IProject project;
 
 	/**
-	 * Add the Api plugin builder in the project build spec
+	 * Add the API plugin builder in the project build spec
 	 */
 	public void configure() throws CoreException {
 		addToBuildSpec(ApiPlugin.BUILDER_ID);
 	}
 
 	/**
-	 * Remove the Api plugin builder from the project build spec
+	 * Remove the API plugin builder from the project build spec
 	 */
 	public void deconfigure() throws CoreException {
 		removeFromBuildSpec(ApiPlugin.BUILDER_ID);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblem.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblem.java
index 406f88a..1040ca7 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblem.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -304,7 +304,7 @@ public class ApiProblem implements IApiProblem {
 	 */
 	public String toString() {
 		StringBuffer buffer = new StringBuffer();
-		buffer.append("Api problem: "); //$NON-NLS-1$
+		buffer.append("API problem: "); //$NON-NLS-1$
 		buffer.append(fResourcePath != null ? fResourcePath : "no path").append("\n"); //$NON-NLS-1$//$NON-NLS-2$
 		buffer.append("\tseverity: "); //$NON-NLS-1$
 		buffer.append(Util.getSeverity(getSeverity())).append("\n"); //$NON-NLS-1$
@@ -318,7 +318,7 @@ public class ApiProblem implements IApiProblem {
 		buffer.append(ApiProblem.getProblemFlagsName(getCategory(), getFlags())).append("\n"); //$NON-NLS-1$
 		buffer.append("\tmessage id: "); //$NON-NLS-1$
 		buffer.append(getMessageid());
-		buffer.append("\n\tmessage:"); //$NON-NLS-1$
+		buffer.append("\n\tmessage: "); //$NON-NLS-1$
 		buffer.append(getMessage());
 		return buffer.toString();
 	}	
@@ -444,6 +444,20 @@ public class ApiProblem implements IApiProblem {
 	}
 
 	/**
+	 * Returns the string representation of the API Use Scan breakage problem kind
+	 * @param kind
+	 * @return
+	 */
+	public static String getApiUseScanProblemKindName(int kind) {
+		switch(kind) {
+			case IApiProblem.API_USE_SCAN_TYPE_PROBLEM: return "API_USE_SCAN_TYPE_PROBLEM"; //$NON-NLS-1$
+			case IApiProblem.API_USE_SCAN_METHOD_PROBLEM: return "API_USE_SCAN_METHOD_PROBLEM"; //$NON-NLS-1$
+			case IApiProblem.API_USE_SCAN_FIELD_PROBLEM: return "API_USE_SCAN_FIELD_PROBLEM"; //$NON-NLS-1$			
+		}
+		return Util.UNKNOWN_KIND;
+	}
+	
+	/**
 	 * Returns the string representation of the kind of an
 	 * {@link IApiProblem}, given its category
 	 * @param category
@@ -470,6 +484,9 @@ public class ApiProblem implements IApiProblem {
 			case IApiProblem.CATEGORY_API_COMPONENT_RESOLUTION: {
 				return ApiProblem.getApiComponentResolutionProblemKindName(kind);
 			}
+			case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM: {
+				return ApiProblem.getApiUseScanProblemKindName(kind);
+			}
 		}
 		return Util.UNKNOWN_KIND;
 	}
@@ -526,6 +543,15 @@ public class ApiProblem implements IApiProblem {
 					}
 				}
 			}
+			break;
+			case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM: {
+				switch(flags) {
+					case 0:
+						return "DELETED"; //$NON-NLS-1$
+					case 1:
+						return "UNRESOLVED"; //$NON-NLS-1$
+				}
+			}
 		}
 		return Util.UNKNOWN_FLAGS;
 	}
@@ -549,6 +575,8 @@ public class ApiProblem implements IApiProblem {
 			case IApiProblem.CATEGORY_API_COMPONENT_RESOLUTION: {
 				return ApiProblem.getDescriptorKind(kind);
 			}
+			case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM:
+				return Util.getApiElementType(kind);				
 		}
 		return Util.UNKNOWN_KIND;
 	}
@@ -572,6 +600,8 @@ public class ApiProblem implements IApiProblem {
 				return "API_BASELINE"; //$NON-NLS-1$
 			case IApiProblem.CATEGORY_API_COMPONENT_RESOLUTION :
 				return "API_COMPONENT_RESOLUTION"; //$NON-NLS-1$
+			case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM :
+				return "API USE SCAN PROBLEM"; //$NON-NLS-1$
 			default :
 				return "UNKNOWN_CATEGORY"; //$NON-NLS-1$
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java
index ec242c1..7b3f123 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java
@@ -215,6 +215,29 @@ public class ApiProblemFactory {
 	}
 	
 	/**
+	 * Creates a new API Use Scan breakage {@link IApiProblem}
+	 * 
+	 * @param resourcePath path of the resource associated with the problem
+	 * @param typeName the type name this problem was found in
+	 * @param messageargs listing of arguments to pass in to the localized message.
+	 * The arguments are passed into the string in the order they appear in the array.
+	 * @param argumentids the ids of arguments passed into the problem
+	 * @param arguments the arguments that correspond to the listing of ids
+	 * @param linenumber the number of the line the problem occurred on
+	 * @param charstart the start of a char selection range
+	 * @param charend the end of a char selection range
+	 * @param element the element kind
+	 * @param kind the kind
+	 * @param flags flags the reason for problem. <code>0</code> if the type could not be resolved. 
+	 * <code>1</code> if member could not be located in the type.
+	 * @return a new {@link IApiProblem} for API Use Scan breakage
+	 */
+	public static IApiProblem newApiUseScanProblem( String resourcePath, String typeName, String[] messageargs, String[] argumentids, Object[] arguments, int linenumber, int charstart, int charend, int element, int kind, int flags) {
+		int id = createProblemId(IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM, element, kind, flags);
+		return newApiProblem(resourcePath, typeName, messageargs, argumentids, arguments, linenumber, charstart, charend, id);
+	}
+	
+	/**
 	 * Returns the localized message for the given {@link IApiProblem}. Returns
 	 * <code>null</code> if no localized message cannot be created.
 	 * @param problemid the id of the problem to create a message for
@@ -596,6 +619,13 @@ public class ApiProblemFactory {
 				}
 				break;
 			}
+			case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM : {
+				switch(kind) {
+					case IApiProblem.API_USE_SCAN_TYPE_PROBLEM: return 136 + flags;
+					case IApiProblem.API_USE_SCAN_METHOD_PROBLEM: return 138 + flags;
+					case IApiProblem.API_USE_SCAN_FIELD_PROBLEM: return 140 + flags;
+				}
+			}
 		}
 		return 0;
 	}
@@ -667,6 +697,13 @@ public class ApiProblemFactory {
 			case IApiProblem.CATEGORY_COMPATIBILITY: {
 				return Util.getDeltaPrefererenceKey(problem.getElementKind(), problem.getKind(), problem.getFlags());
 			}
+			case IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM: {
+				switch(problem.getKind()) {
+					case IApiProblem.API_USE_SCAN_TYPE_PROBLEM : return IApiProblemTypes.API_USE_SCAN_TYPE_SEVERITY;
+					case IApiProblem.API_USE_SCAN_METHOD_PROBLEM : return IApiProblemTypes.API_USE_SCAN_METHOD_SEVERITY;
+					case IApiProblem.API_USE_SCAN_FIELD_PROBLEM : return IApiProblemTypes.API_USE_SCAN_FIELD_SEVERITY;
+				}
+			}
 		}
 		return null;
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties
index f57bff0..37e1489 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties
@@ -138,3 +138,11 @@ ENUM_ELEMENT_TYPE=an enum
 99 = API analysis aborted: {0} has unresolved constraints: {1}
 134 = The re-exported type {0} in {1} is no longer API
 135 = The re-exported type {0} has been removed from {1}
+
+#API Use Scan breakage error messages 
+136 = The type {1} has been deleted, but is called by {2}.
+137 = The type {1} can not be resolved, but is called by {2}.
+138 = Type {0} has been deleted. It contained {1}, but is called by {2}.
+139 = The {1} in type {0} has been deleted, but is called by {2}.
+140 = Type {0} has been deleted.  It contained field {1}, but is called by {2}.
+141 = The field {1} in type {0} has been deleted, but is called by {2}.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
index 37b9e69..d4197cf 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.pde.api.tools.internal.provisional;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
 
@@ -52,6 +53,7 @@ import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.TagScanner;
 import org.eclipse.pde.api.tools.internal.util.FileManager;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.prefs.BackingStoreException;
 
 /**
@@ -73,7 +75,7 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 	 */
 	public static final String PLUGIN_ID = "org.eclipse.pde.api.tools" ; //$NON-NLS-1$
 	/**
-	 * The API tooling nature id
+	 * The API Tools nature id
 	 * (value <code>"org.eclipse.pde.api.tools.apiAnalysisNature"</code>).
 	 */
 	public static final String NATURE_ID = PLUGIN_ID + ".apiAnalysisNature" ; //$NON-NLS-1$
@@ -138,7 +140,7 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 	 */
 	public static final String VALUE_ENABLED = "Enabled"; //$NON-NLS-1$
 	/**
-	 * The identifier for the Api builder
+	 * The identifier for the API builder
 	 * Value is: <code>"org.eclipse.pde.api.tools.apiAnalysisBuilder"</code>
 	 */
 	public static final String BUILDER_ID = PLUGIN_ID + ".apiAnalysisBuilder" ; //$NON-NLS-1$
@@ -157,6 +159,10 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 	 */
 	private static ISessionManager fgSessionManager = null;
 	/**
+	 * This bundle's OSGi context
+	 */
+	private BundleContext fBundleContext = null;
+	/**
 	 * Private debug options
 	 */
 	private static final String BUILDER_DEBUG = PLUGIN_ID + "/debug/builder" ; //$NON-NLS-1$
@@ -467,7 +473,7 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 			sp = (ISaveParticipant) iter.next();
 			sp.saving(context);
 		}
-		IEclipsePreferences node = new InstanceScope().getNode(PLUGIN_ID);
+		IEclipsePreferences node = InstanceScope.INSTANCE.getNode(PLUGIN_ID);
 		if(node != null) {
 			try {
 				node.flush();
@@ -485,6 +491,7 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 			super.start(context);
 		} finally {
 			ResourcesPlugin.getWorkspace().addSaveParticipant(PLUGIN_ID, this);
+			fBundleContext = context;
 			deltaProcessor = new WorkspaceDeltaProcessor();
 			JavaCore.addElementChangedListener(deltaProcessor, ElementChangedEvent.POST_CHANGE);
 			ResourcesPlugin.getWorkspace().addResourceChangeListener(deltaProcessor, IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_BUILD);
@@ -501,6 +508,7 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 			ApiBaselineManager.getManager().stop();
 			ResourcesPlugin.getWorkspace().removeSaveParticipant(PLUGIN_ID);
 			FileManager.getManager().deleteFiles();
+			fBundleContext = null;
 			if(deltaProcessor != null) {
 				JavaCore.removeElementChangedListener(deltaProcessor);
 				ResourcesPlugin.getWorkspace().removeResourceChangeListener(deltaProcessor);
@@ -524,11 +532,11 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 	public int getSeverityLevel(String prefkey, IProject project) {
 		IPreferencesService service = Platform.getPreferencesService();
 		IScopeContext[] context = null;
-		if(hasProjectSettings(project)) {
-			context = new IScopeContext[] {new ProjectScope(project), new DefaultScope()};
+		if(hasProjectSettings(prefkey, project)) {
+			context = new IScopeContext[] {new ProjectScope(project), DefaultScope.INSTANCE};
 		}
 		else {
-			context = new IScopeContext[] {new InstanceScope(), new DefaultScope()};
+			context = new IScopeContext[] {InstanceScope.INSTANCE, DefaultScope.INSTANCE};
 		}
 		String value = service.get(prefkey, null, getPreferences(context));
 		if(VALUE_ERROR.equals(value)) {
@@ -570,12 +578,17 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 	}
 	
 	/**
-	 * Returns if the given project has project-specific settings
+	 * Returns if the given project has project-specific settings.
+	 * 
+	 * @param preferenceKey preference key
 	 * @param project
 	 * @return true if the project has specific settings, false otherwise
 	 * @since 1.1
 	 */
-	boolean hasProjectSettings(IProject project) {
+	boolean hasProjectSettings(String preferenceKey, IProject project) {
+		if (Arrays.binarySearch(IApiProblemTypes.WORKSPACE_ONLY_PROBLEM_TYPES, preferenceKey) >= 0) {
+			return false;
+		}
 		if(project != null) {
 			ProjectScope scope = new ProjectScope(project);
 			IEclipsePreferences node = scope.getNode(PLUGIN_ID);
@@ -609,11 +622,11 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 	public boolean getEnableState(String prefkey, IProject project) {
 		IPreferencesService service = Platform.getPreferencesService();
 		IScopeContext[] context = null;
-		if(hasProjectSettings(project)) {
-			context = new IScopeContext[] {new ProjectScope(project), new DefaultScope()};
+		if(hasProjectSettings(prefkey, project)) {
+			context = new IScopeContext[] {new ProjectScope(project), DefaultScope.INSTANCE};
 		}
 		else {
-			context = new IScopeContext[] {new InstanceScope(), new DefaultScope()};
+			context = new IScopeContext[] {InstanceScope.INSTANCE, DefaultScope.INSTANCE};
 		}
 		String value = service.get(prefkey, null, getPreferences(context));
 		return VALUE_ENABLED.equals(value);
@@ -679,4 +692,17 @@ public class ApiPlugin extends Plugin implements ISaveParticipant {
 			}
 		}
 	}
+	
+	/**
+	 * Returns a service with the specified name or <code>null</code> if none.
+	 * 
+	 * @param serviceName name of service
+	 * @return service object or <code>null</code> if none
+	 */
+	public Object acquireService(String serviceName) {
+		ServiceReference reference = fBundleContext.getServiceReference(serviceName);
+		if (reference == null)
+			return null;
+		return fBundleContext.getService(reference);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiMarkerConstants.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiMarkerConstants.java
index bc588d7..12bcca1 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiMarkerConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiMarkerConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.pde.api.tools.internal.provisional;
 
 /**
- * Interface that defines all the constants used to create the Api tooling markers.
+ * Interface that defines all the constants used to create the API Tools markers.
  * 
  * This interface is not intended to be extended or implemented.
  *
@@ -21,12 +21,12 @@ package org.eclipse.pde.api.tools.internal.provisional;
 public interface IApiMarkerConstants {
 
 	/**
-	 * Constant representing the name of the 'problem' attribute on api tooling markers.
+	 * Constant representing the name of the 'problem' attribute on API Tools markers.
 	 * Value is: <code>problemid</code>
 	 */
 	public static final String MARKER_ATTR_PROBLEM_ID = "problemid"; //$NON-NLS-1$
 	/**
-	 * Constant representing the name of the 'kind' attribute on API tooling markers.
+	 * Constant representing the name of the 'kind' attribute on API Tools markers.
 	 * Value is: <code>kind</code>
 	 */
 	public static final String MARKER_ATTR_KIND = "kind"; //$NON-NLS-1$
@@ -42,13 +42,13 @@ public interface IApiMarkerConstants {
 	 */
 	public static final String MARKER_ATTR_FILTER_HANDLE_ID = "filterhandle"; //$NON-NLS-1$
 	/**
-	 * Constant representing the name of the @since tag version attribute on API tooling markers,
+	 * Constant representing the name of the @since tag version attribute on API Tools markers,
 	 * or the new value for the bundle version.
 	 * Value is: <code>version</code>
 	 */
 	public static final String MARKER_ATTR_VERSION = "version"; //$NON-NLS-1$
 	/**
-	 * Constant representing the name of the message arguments attribute on API tooling markers.
+	 * Constant representing the name of the message arguments attribute on API Tools markers.
 	 * Value is <code>messagearguments</code>
 	 */
 	public static final String MARKER_ATTR_MESSAGE_ARGUMENTS = "messagearguments"; //$NON-NLS-1$
@@ -100,7 +100,7 @@ public interface IApiMarkerConstants {
 	 */
 	public static final String UNSUPPORTED_TAG_PROBLEM_MARKER = ApiPlugin.PLUGIN_ID + ".unsupported_tags"; //$NON-NLS-1$
 	/**
-	 * Constant representing the name of the 'apiMarkerID' attribute on API tooling markers.
+	 * Constant representing the name of the 'apiMarkerID' attribute on API Tools markers.
 	 * Value is: <code>apiMarkerID</code>
 	 */
 	public static final String API_MARKER_ATTR_ID = "apiMarkerID"; //$NON-NLS-1$
@@ -135,12 +135,12 @@ public interface IApiMarkerConstants {
 	 */
 	public static final int UNSUPPORTED_TAG_MARKER_ID = 6;
 	/**
-	 * Constant representing the apiMarkerID value for duplicate javadoc tag markers
+	 * Constant representing the apiMarkerID value for duplicate JavaDoc tag markers
 	 * Value is: <code>7</code>
 	 */
 	public static final int DUPLICATE_TAG_MARKER_ID = 7;
 	/**
-	 * Constant representing the apiMarkerID value for api component resolution markers.
+	 * Constant representing the apiMarkerID value for API component resolution markers.
 	 * Value is: <code>8</code>
 	 */
 	public static final int API_COMPONENT_RESOLUTION_MARKER_ID = 8;
@@ -155,9 +155,20 @@ public interface IApiMarkerConstants {
 	 */
 	public static final String VERSION_NUMBERING_ATTR_DESCRIPTION = "description"; //$NON-NLS-1$
 	/**
-	 * Constant representing the type name of the 'problem' attribute on api tooling markers.
+	 * Constant representing the type name of the 'problem' attribute on API Tools markers.
 	 * Value is: <code>problemTypeName</code>
 	 */
 	public static final String MARKER_ATTR_PROBLEM_TYPE_NAME = "problemTypeName"; //$NON-NLS-1$
+	/**
+	 * Constant representing the id for the API Use Scan breakage problem marker.
+	 * Value is: <code>org.eclipse.pde.api.tools.marker.apiusescan</code>
+	 */
+	public static final String API_USESCAN_PROBLEM_MARKER = ApiPlugin.PLUGIN_ID + ".marker.apiusescan"; //$NON-NLS-1$
+	/**
+	 * Constant representing the id for the additional marker attribute for storing the type name
+	 * This will be used to delete the markers when a missing type becomes available 
+	 * Value is: <code>apiUseScanType</code>
+	 */
+	public static final String API_USESCAN_TYPE = "apiUseScanType"; //$NON-NLS-1$
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ISession.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ISession.java
index 5cc3059..8ef829d 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ISession.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ISession.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.pde.api.tools.internal.provisional;
 
 /**
- * Provide information about the API Tooling session.
+ * Provide information about the API Tools session.
  */
 public interface ISession {
 	
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
index 6c74a40..4778ffd 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,14 +54,14 @@ public class ApiComparator {
 	public static final IDelta NO_DELTA = new Delta();
 	
 	/**
-	 * Reports a delta for a API component version change
+	 * Returns a delta for a API component version change
+	 * 
 	 * @param apiComponent2
 	 * @param id
 	 * @param apiComponentVersion
 	 * @param apiComponentVersion2
-	 * @param globalDelta
 	 */
-	private static void checkBundleVersionChanges(IApiComponent apiComponent2, String id, String apiComponentVersion, String apiComponentVersion2, Delta globalDelta) {
+	static IDelta checkBundleVersionChanges(IApiComponent apiComponent2, String id, String apiComponentVersion, String apiComponentVersion2) {
 		Version version = null;
 		try {
 			version = new Version(apiComponentVersion);
@@ -77,13 +77,14 @@ public class ApiComparator {
 		if (version != null && version2 != null) {
 			// add check for bundle versions
 			if (version.getMajor() != version2.getMajor()) {
-				globalDelta.add(
+				return
 					new Delta(
 						Util.getDeltaComponentVersionsId(apiComponent2),
 						IDelta.API_COMPONENT_ELEMENT_TYPE,
 						IDelta.CHANGED,
 						IDelta.MAJOR_VERSION,
 						RestrictionModifiers.NO_RESTRICTIONS,
+						RestrictionModifiers.NO_RESTRICTIONS,
 						0,
 						0,
 						null,
@@ -92,15 +93,16 @@ public class ApiComparator {
 							id,
 							apiComponentVersion,
 							apiComponentVersion2
-						}));
+						});
 			} else if (version.getMinor() != version2.getMinor()) {
-				globalDelta.add(
+				return
 					new Delta(
 						Util.getDeltaComponentVersionsId(apiComponent2),
 						IDelta.API_COMPONENT_ELEMENT_TYPE,
 						IDelta.CHANGED,
 						IDelta.MINOR_VERSION,
 						RestrictionModifiers.NO_RESTRICTIONS,
+						RestrictionModifiers.NO_RESTRICTIONS,
 						0,
 						0,
 						null,
@@ -109,9 +111,10 @@ public class ApiComparator {
 							id,
 							apiComponentVersion,
 							apiComponentVersion2
-						}));
+						});
 			}
 		}
+		return null;
 	}
 
 	/**
@@ -163,7 +166,10 @@ public class ApiComparator {
 						apiComponentsIds.add(id);
 						String versionString = apiComponent.getVersion();
 						String versionString2 = apiComponent2.getVersion();
-						checkBundleVersionChanges(apiComponent2, id, versionString, versionString2, globalDelta);
+						IDelta bundleVersionChangesDelta = checkBundleVersionChanges(apiComponent2, id, versionString, versionString2);
+						if (bundleVersionChangesDelta != null) {
+							globalDelta.add(bundleVersionChangesDelta);
+						}
 						if (!versionString.equals(versionString2)
 								|| force) {
 							long time = System.currentTimeMillis();
@@ -348,6 +354,7 @@ public class ApiComparator {
 									IDelta.REMOVED,
 									IDelta.EXECUTION_ENVIRONMENT,
 									RestrictionModifiers.NO_RESTRICTIONS,
+									RestrictionModifiers.NO_RESTRICTIONS,
 									0,
 									0,
 									null,
@@ -365,6 +372,7 @@ public class ApiComparator {
 								IDelta.ADDED,
 								IDelta.EXECUTION_ENVIRONMENT,
 								RestrictionModifiers.NO_RESTRICTIONS,
+								RestrictionModifiers.NO_RESTRICTIONS,
 								0,
 								0,
 								null,
@@ -481,6 +489,7 @@ public class ApiComparator {
 							IDelta.ADDED,
 							reexporter == null ? IDelta.TYPE : IDelta.REEXPORTED_TYPE,
 							elementDescription2 != null ? elementDescription2.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+							RestrictionModifiers.NO_RESTRICTIONS,
 							0,
 							typeDescriptor2.getModifiers(),
 							typeName,
@@ -503,6 +512,7 @@ public class ApiComparator {
 							IDelta.REMOVED,
 							IDelta.API_TYPE,
 							elementDescription2 != null ? elementDescription2.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+							RestrictionModifiers.NO_RESTRICTIONS,
 							typeDescriptor.getModifiers(),
 							typeDescriptor2.getModifiers(),
 							typeName,
@@ -517,6 +527,7 @@ public class ApiComparator {
 						IDelta.ADDED,
 						IDelta.TYPE,
 						elementDescription2 != null ? elementDescription2.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+						RestrictionModifiers.NO_RESTRICTIONS,
 						typeDescriptor.getModifiers(),
 						typeDescriptor2.getModifiers(),
 						typeName,
@@ -537,6 +548,7 @@ public class ApiComparator {
 							IDelta.REMOVED,
 							IDelta.API_TYPE,
 							elementDescription2 != null ? elementDescription2.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+							RestrictionModifiers.NO_RESTRICTIONS,
 							typeDescriptor.getModifiers(),
 							typeDescriptor2.getModifiers(),
 							typeName,
@@ -837,6 +849,7 @@ public class ApiComparator {
 													IDelta.REMOVED,
 													IDelta.TYPE,
 													RestrictionModifiers.NO_RESTRICTIONS,
+													RestrictionModifiers.NO_RESTRICTIONS,
 													typeDescriptor.getModifiers(),
 													0,
 													typeName,
@@ -869,6 +882,7 @@ public class ApiComparator {
 													IDelta.REMOVED,
 													reexported ?  IDelta.REEXPORTED_API_TYPE : IDelta.API_TYPE,
 													elementDescription2 != null ? elementDescription2.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+													RestrictionModifiers.NO_RESTRICTIONS,
 													typeDescriptor.getModifiers(),
 													typeDescriptor2.getModifiers(),
 													typeName,
@@ -886,6 +900,7 @@ public class ApiComparator {
 														IDelta.CHANGED,
 														IDelta.TYPE_VISIBILITY,
 														elementDescription2 != null ? elementDescription2.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+														RestrictionModifiers.NO_RESTRICTIONS,
 														typeDescriptor.getModifiers(),
 														typeDescriptor2.getModifiers(),
 														typeName,
@@ -1000,6 +1015,7 @@ public class ApiComparator {
 																IDelta.REMOVED,
 																IDelta.REEXPORTED_TYPE,
 																RestrictionModifiers.NO_RESTRICTIONS,
+																RestrictionModifiers.NO_RESTRICTIONS,
 																typeDescriptor.getModifiers(),
 																0,
 																typeName,
@@ -1027,6 +1043,7 @@ public class ApiComparator {
 																IDelta.REMOVED,
 																IDelta.REEXPORTED_API_TYPE,
 																elementDescription2 != null ? elementDescription2.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+																RestrictionModifiers.NO_RESTRICTIONS,
 																typeDescriptor.getModifiers(),
 																typeDescriptor2.getModifiers(),
 																typeName,
@@ -1082,6 +1099,7 @@ public class ApiComparator {
 												IDelta.ADDED,
 												IDelta.TYPE,
 												elementDescription != null ? elementDescription.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+												RestrictionModifiers.NO_RESTRICTIONS,
 												0,
 												type.getModifiers(),
 												typeName,
@@ -1144,6 +1162,7 @@ public class ApiComparator {
 															IDelta.ADDED,
 															IDelta.REEXPORTED_TYPE,
 															elementDescription != null ? elementDescription.getRestrictions() : RestrictionModifiers.NO_RESTRICTIONS,
+															RestrictionModifiers.NO_RESTRICTIONS,
 															0,
 															typeDescriptor.getModifiers(),
 															typeName,
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java
index 71ac287..5017518 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/CompareApiScopeVisitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.pde.api.tools.internal.comparator.Delta;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.model.ApiScopeVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.model.ApiTypeContainerVisitor;
@@ -96,6 +97,7 @@ public class CompareApiScopeVisitor extends ApiScopeVisitor {
 				return false;
 			}
 			IApiComponent referenceComponent = this.referenceBaseline.getApiComponent(component.getSymbolicName());
+			// referenceComponent can be null if this is an added component
 			if (referenceComponent != null && referenceComponent.getErrors() != null) {
 				this.containsErrors = true;
 				return false;
@@ -104,18 +106,23 @@ public class CompareApiScopeVisitor extends ApiScopeVisitor {
 				return false;
 			}
 			Util.updateMonitor(this.monitor);
-			IDelta delta = ApiComparator.compare(referenceComponent, component, this.visibilityModifiers, null);
-			if (delta != null) {
-				delta.accept(new DeltaVisitor() {
-					public void endVisit(IDelta localDelta) {
-						if (localDelta.getChildren().length == 0) {
-							CompareApiScopeVisitor.this.deltas.add(localDelta);
-						}
-					}
-				});
-			} else {
-				this.containsErrors = true;
+			final Delta globalDelta = new Delta();
+			globalDelta.add(ApiComparator.compare(referenceComponent, component, this.visibilityModifiers, null));
+			if (referenceComponent != null) {
+				String versionString = referenceComponent.getVersion();
+				String versionString2 = component.getVersion();
+				IDelta bundleVersionChangesDelta = ApiComparator.checkBundleVersionChanges(component, referenceComponent.getSymbolicName(), versionString, versionString2);
+				if (bundleVersionChangesDelta != null) {
+					globalDelta.add(bundleVersionChangesDelta);
+				}
 			}
+			globalDelta.accept(new DeltaVisitor() {
+				public void endVisit(IDelta localDelta) {
+					if (localDelta.getChildren().length == 0) {
+						CompareApiScopeVisitor.this.deltas.add(localDelta);
+					}
+				}
+			});
 			return false;
 		} finally {
 			this.monitor.worked(1);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java
index 6ad1a44..d49a930 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,7 +173,7 @@ public class DeltaProcessor {
 	 * @return true if compatible, false otherwise
 	 */
 	private static boolean isMethodCompatible(IDelta delta) {
-		int restrictions = delta.getRestrictions();
+		int restrictions = delta.getCurrentRestrictions();
 		if (RestrictionModifiers.isReferenceRestriction(restrictions)) {
 			return true;
 		}
@@ -189,7 +189,10 @@ public class DeltaProcessor {
 				switch(delta.getFlags()) {
 					case IDelta.TYPE_PARAMETER :
 					case IDelta.RESTRICTIONS :
-						return !Util.isVisible(delta.getNewModifiers());
+						if (Util.isVisible(delta.getNewModifiers())) {
+							return RestrictionModifiers.isExtendRestriction(delta.getPreviousRestrictions());
+						}
+						return true;
 				}
 				break;
 			case IDelta.CHANGED :
@@ -219,7 +222,7 @@ public class DeltaProcessor {
 	 * @return true if compatible, false otherwise
 	 */
 	private static boolean isFieldCompatible(IDelta delta) {
-		int restrictions = delta.getRestrictions();
+		int restrictions = delta.getCurrentRestrictions();
 		if (RestrictionModifiers.isReferenceRestriction(restrictions)) {
 			return true;
 		}
@@ -230,7 +233,7 @@ public class DeltaProcessor {
 				switch(delta.getFlags()) {
 					case IDelta.VALUE :
 						if (Flags.isProtected(oldModifiers)) {
-							return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+							return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 						}
 						if (Flags.isPublic(oldModifiers)) {
 							return false;
@@ -249,7 +252,7 @@ public class DeltaProcessor {
 				switch(delta.getFlags()) {
 					case IDelta.TYPE :
 						if (Flags.isProtected(newModifiers)) {
-							return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+							return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 						}
 						return !Util.isVisible(newModifiers);
 					case IDelta.TYPE_ARGUMENT :
@@ -260,7 +263,7 @@ public class DeltaProcessor {
 					case IDelta.VALUE :
 					case IDelta.FINAL_TO_NON_FINAL_STATIC_CONSTANT :
 						if (Flags.isProtected(newModifiers)) {
-							return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+							return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 						}
 						if (Flags.isPublic(newModifiers)) {
 							return false;
@@ -268,7 +271,7 @@ public class DeltaProcessor {
 						// not visible
 						return true;
 					case IDelta.DECREASE_ACCESS :
-						return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+						return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 				}
 				break;
 			case IDelta.ADDED :
@@ -286,7 +289,7 @@ public class DeltaProcessor {
 	 * @return true if compatible, false otherwise
 	 */
 	private static boolean isConstructorCompatible(IDelta delta) {
-		int restrictions = delta.getRestrictions();
+		int restrictions = delta.getCurrentRestrictions();
 		if (RestrictionModifiers.isReferenceRestriction(restrictions)) {
 			return true;
 		}
@@ -380,7 +383,7 @@ public class DeltaProcessor {
 						if (Util.isVisible(newModifiers)) {
 							if (Flags.isAbstract(newModifiers)) {
 								// case where the implementation is provided and the class cannot be instantiated by the client
-								return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+								return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 							}
 						}
 						return true; 
@@ -400,15 +403,15 @@ public class DeltaProcessor {
 							return false;
 						}
 						if (Flags.isProtected(delta.getOldModifiers())) {
-							return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+							return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 						}
 						return true;
 					case IDelta.CONSTRUCTOR :
 					case IDelta.API_CONSTRUCTOR :
 						if (Util.isVisible(delta.getOldModifiers())) {
-							return RestrictionModifiers.isExtendRestriction(delta.getRestrictions())
+							return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions())
 									&& (Flags.isProtected(delta.getOldModifiers()) ||
-											RestrictionModifiers.isInstantiateRestriction(delta.getRestrictions()));
+											RestrictionModifiers.isInstantiateRestriction(delta.getCurrentRestrictions()));
 						}
 						return true;
 					case IDelta.TYPE_PARAMETER :
@@ -420,7 +423,7 @@ public class DeltaProcessor {
 				switch(delta.getFlags()) {
 					case IDelta.NON_ABSTRACT_TO_ABSTRACT :
 						if (Util.isVisible(delta.getNewModifiers())) {
-							return RestrictionModifiers.isInstantiateRestriction(delta.getRestrictions());
+							return RestrictionModifiers.isInstantiateRestriction(delta.getCurrentRestrictions());
 						}
 						return true;
 					case IDelta.TYPE_CONVERSION :
@@ -430,11 +433,11 @@ public class DeltaProcessor {
 						return !Util.isVisible(delta.getNewModifiers());
 					case IDelta.NON_FINAL_TO_FINAL:
 						if (Util.isVisible(delta.getNewModifiers())) {
-							return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+							return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 						}
 						return true; 
 					case IDelta.DECREASE_ACCESS :
-						return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+						return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 				}
 				break;
 		}
@@ -481,10 +484,10 @@ public class DeltaProcessor {
 			case IDelta.ADDED :
 				switch(delta.getFlags()) {
 					case IDelta.FIELD :
-						return RestrictionModifiers.isImplementRestriction(delta.getRestrictions());
 					case IDelta.METHOD :
 					case IDelta.SUPER_INTERFACE_WITH_METHODS :
-						return RestrictionModifiers.isImplementRestriction(delta.getRestrictions());
+						return RestrictionModifiers.isImplementRestriction(delta.getPreviousRestrictions())
+								|| RestrictionModifiers.isImplementRestriction(delta.getCurrentRestrictions());
 					case IDelta.TYPE_PARAMETER :
 						return false;
 					case IDelta.RESTRICTIONS :
@@ -508,7 +511,7 @@ public class DeltaProcessor {
 					case IDelta.TYPE_CONVERSION :
 						return false;
 					case IDelta.DECREASE_ACCESS :
-						return RestrictionModifiers.isExtendRestriction(delta.getRestrictions());
+						return RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions());
 				}
 				break;
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java
index f8e3094..f58678b 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -942,11 +942,18 @@ public interface IDelta {
 	public String[] getArguments();
 	
 	/**
-	 * Returns the delta's restrictions.
+	 * Returns the delta's current restrictions.
 	 * 
-	 * @return the delta's restrictions
+	 * @return the delta's current restrictions
 	 */
-	public int getRestrictions();
+	public int getCurrentRestrictions();
+
+	/**
+	 * Returns the delta's previous restrictions.
+	 * 
+	 * @return the delta's previous restrictions
+	 */
+	public int getPreviousRestrictions();
 
 	/**
 	 * Returns the delta's new modifiers. This corresponds to the new modifiers of the affected element.
@@ -972,4 +979,14 @@ public interface IDelta {
 	 * @return the component id in which the given delta is reported, or <code>null</code> if none
 	 */
 	public String getComponentVersionId();
+	
+
+	/**
+	 * Returns the component identifier without its version identifier in which the given delta is
+	 * reported, or <code>null</code>. Can be <code>null</code> if the delta is reported against an
+	 * API profile.
+	 * 
+	 * @return the component id in which the given delta is reported, or <code>null</code> if none
+	 */
+	public String getComponentId();
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
index 3a4b145..95d7fc5 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
@@ -16,6 +16,7 @@ import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
+import org.eclipse.pde.api.tools.internal.search.IReferenceCollection;
 
 /**
  * Describes the API of a software component. An API component
@@ -213,4 +214,10 @@ public interface IApiComponent extends IApiTypeContainer {
 	 * @return element descriptor
 	 */
 	public IElementDescriptor getHandle();
+	
+	/**
+	 * Returns all references to this component as registered by API use scans with the Use Scan Manager.
+	 * @return the collection of reference descriptors
+	 */
+	public IReferenceCollection getExternalDependencies();
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiElement.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiElement.java
index 9b3e36d..ec92011 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiElement.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,7 @@ package org.eclipse.pde.api.tools.internal.provisional.model;
 
 
 /**
- * Describes an element that can appear in the API tooling model.
+ * Describes an element that can appear in the API Tools model.
  * 
  * @since 1.0.0
  * 
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblem.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblem.java
index 1ac1fcb..0b04d71 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblem.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblem.java
@@ -54,6 +54,10 @@ public interface IApiProblem {
 	 */
 	public static final int CATEGORY_FATAL_PROBLEM = 0x70000000;
 	/**
+	 * Constant representing a API use scan breakage problem
+	 */
+	public static final int CATEGORY_API_USE_SCAN_PROBLEM = 0x80000000;
+	/**
 	 * Constant representing the offset of the message key portion of the id bit mask.
 	 */
 	public static final int OFFSET_MESSAGE = 0;
@@ -424,6 +428,33 @@ public interface IApiProblem {
 	 */
 	public static final int FATAL_JDT_BUILDPATH_PROBLEM = 1;
 	/**
+	 * Constant representing the value of a type {@link IApiProblem} kind.
+	 * <br>
+	 * Value is: <code>1</code>
+	 * 
+	 * @see #getKind()
+	 * @see #CATEGORY_API_USE_SCAN_PROBLEM
+	 */
+	public static final int API_USE_SCAN_TYPE_PROBLEM = 1;
+	/**
+	 * Constant representing the value of a method {@link IApiProblem} kind.
+	 * <br>
+	 * Value is: <code>2</code>
+	 * 
+	 * @see #getKind()
+	 * @see #CATEGORY_API_USE_SCAN_PROBLEM
+	 */
+	public static final int API_USE_SCAN_METHOD_PROBLEM = 2;
+	/**
+	 * Constant representing the value of a field {@link IApiProblem} kind.
+	 * <br>
+	 * Value is: <code>3</code>
+	 * 
+	 * @see #getKind()
+	 * @see #CATEGORY_API_USE_SCAN_PROBLEM
+	 */
+	public static final int API_USE_SCAN_FIELD_PROBLEM = 3;
+	/**
 	 * Returns the severity of the problem. See the severity constants defined in
 	 * {@link org.eclipse.pde.api.tools.internal.provisional.ApiPlugin} class.
 	 * 
@@ -505,10 +536,13 @@ public interface IApiProblem {
 	 * one of:
 	 * <ul>
 	 * <li>{@link #CATEGORY_COMPATIBILITY}</li>
-	 * <li>{@link #CATEGORY_SINCETAGS}</li>
 	 * <li>{@link #CATEGORY_USAGE}</li>
 	 * <li>{@link #CATEGORY_VERSION}</li>
+	 * <li>{@link #CATEGORY_SINCETAGS}</li>
 	 * <li>{@link #CATEGORY_API_BASELINE}</li>
+	 * <li>{@link #CATEGORY_API_COMPONENT_RESOLUTION}</li>
+	 * <li>{@link #CATEGORY_FATAL_PROBLEM}</li>
+	 * <li>{@link #CATEGORY_API_USE_SCAN_PROBLEM}</li>
 	 * </ul> 
 	 * @return the category for the problem
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java
index 17fc0d3..288bb1b 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@ import org.eclipse.pde.api.tools.internal.util.Util;
  * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IApiProblemTypes {
-
+	
 	// Compatibility problems
 	public static final String API_COMPONENT_REMOVED_TYPE =
 		Util.getDeltaPrefererenceKey(IDelta.API_COMPONENT_ELEMENT_TYPE, IDelta.REMOVED, IDelta.TYPE);
@@ -253,4 +253,21 @@ public interface IApiProblemTypes {
 	 * Key for the severity of an unused API problem filter.
 	 */
 	public static final String UNUSED_PROBLEM_FILTERS = "UNUSED_PROBLEM_FILTERS"; //$NON-NLS-1$
+	/**
+	 * Key for the severity of API Use Scan Type breakage problems.
+	 */
+	public static final String API_USE_SCAN_TYPE_SEVERITY = "API_USE_SCAN_TYPE_SEVERITY";	 //$NON-NLS-1$
+	/**
+	 * Key for the severity of API Use Scan Method breakage problems.
+	 */
+	public static final String API_USE_SCAN_METHOD_SEVERITY = "API_USE_SCAN_METHOD_SEVERITY"; //$NON-NLS-1$
+	/**
+	 * Key for the severity of API Use Scan Field breakage problems.
+	 */
+	public static final String API_USE_SCAN_FIELD_SEVERITY = "API_USE_SCAN_FIELD_SEVERITY"; //$NON-NLS-1$
+	
+	/**
+	 * Keys which are only defined in the workspace i.e. not project specific.
+	 */
+	public static final String[] WORKSPACE_ONLY_PROBLEM_TYPES= { MISSING_DEFAULT_API_BASELINE };
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java
index 047439e..43b7c33 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -213,6 +213,7 @@ public final class ApiSearchEngine {
 	 * Searches for all accepted {@link IReference}s from the given {@link IApiElement}
 	 * @param requestor
 	 * @param element
+	 * @param reporter search reporter to output xml results as references are found
 	 * @param monitor
 	 * @return the collection of accepted {@link IReference}s or an empty list, never <code>null</code>
 	 * @throws CoreException
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchReporter.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchReporter.java
index 38350e1..b206a98 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,4 +41,10 @@ public interface IApiSearchReporter {
 	 * @param data the data object to write out
 	 */
 	public void reportMetadata(IMetadata data);
+	
+	/**
+	 * Reports the current total count of references that have been reported by 
+	 * this reporter since its creation.
+	 */
+	public void reportCounts();
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/ConsumerReportConvertor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/ConsumerReportConvertor.java
new file mode 100644
index 0000000..e58b1cb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/ConsumerReportConvertor.java
@@ -0,0 +1,718 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.util.Signatures;
+
+/**
+ * Generates an HTML report from an XML use scan.  The generated report
+ * is 'consumer based'.  It lists the bundles that have references in them
+ * (rather than listing bundles that produce the types being referenced)
+ * 
+ * @since 1.0.300
+ */
+public class ConsumerReportConvertor extends UseReportConverter {
+	
+	/**
+	 * Use scan visitor that collects a list of the bundles (as {@link IComponentDescriptor}s)
+	 * that consume api references.
+	 */
+	class ListConsumersVisitor extends UseScanVisitor{
+		/**
+		 * Set of {@link IComponentDescriptor}s representing the consumers of references
+		 */
+		Set consumers = new HashSet();
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+		 */
+		public boolean visitComponent(IComponentDescriptor target) {
+			return true;
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitReferencingComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+		 */
+		public boolean visitReferencingComponent(IComponentDescriptor component) {
+			consumers.add(component);
+			return false;
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitMember(org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor)
+		 */
+		public boolean visitMember(IMemberDescriptor referencedMember) {
+			return false;
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitReference(org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor)
+		 */
+		public void visitReference(IReferenceDescriptor reference) {
+		}
+		
+	}
+	
+	/**
+	 * Use scan visitor that produces the report data for a single consumer bundle.  The visitor collects the
+	 * report data in a {@link Consumer}.
+	 *
+	 */
+	class ConsumerReportVisitor extends UseScanVisitor{
+		Consumer consumer;
+		Map producers = new HashMap();
+		private IComponentDescriptor consumerDescriptor;
+		private Producer currentProducer;
+		private Type2 currenttype = null;
+		private Member currentmember = null;
+		
+		/**
+		 * Cache for type descriptions, maps enclosing descriptors to Type objects
+		 */
+		HashMap keys = new HashMap();
+		
+		/**
+		 * Constructor
+		 * @param consumerDescriptor the bundle that we are collecting information on
+		 */
+		public ConsumerReportVisitor(IComponentDescriptor consumerDescriptor){
+			this.consumerDescriptor = consumerDescriptor;
+			consumer = new Consumer();
+			consumer.name = composeName(consumerDescriptor.getId(), consumerDescriptor.getVersion());
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#endVisitScan()
+		 */
+		public void endVisitScan() {
+			try {
+				long start = 0;
+				if(DEBUG) {
+					System.out.println("Writing consumer report for bundle: "+ consumer.name); //$NON-NLS-1$
+					start = System.currentTimeMillis();
+				}
+				if(consumer.counts.getTotalRefCount() > 0) {
+					writeConsumerReport(consumer, producers);
+					producers.clear();
+				}
+				if(DEBUG) {
+					System.out.println("Done in: "+(System.currentTimeMillis()-start)+ " ms"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			catch(Exception e) {
+				ApiPlugin.log(e);
+			}
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+		 */
+		public boolean visitComponent(IComponentDescriptor target) {
+			currentProducer = new Producer();
+			currentProducer.name = composeName(target.getId(), target.getVersion());
+			return true;
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#endVisitComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+		 */
+		public void endVisitComponent(IComponentDescriptor target) {
+			if(this.currentProducer.counts.getTotalRefCount() > 0) {
+				try {
+					if (!producers.containsKey(currentProducer.name)){
+						producers.put(currentProducer.name, currentProducer);
+					}
+					long start = 0;
+					if(DEBUG) {
+						System.out.println("Writing producer report for bundle: "+ currentProducer.name); //$NON-NLS-1$
+						start = System.currentTimeMillis();
+					}
+					if(consumer.counts.getTotalRefCount() > 0) {
+						writeProducerReport(consumer, currentProducer);
+					}
+					if(DEBUG) {
+						System.out.println("Done in: "+(System.currentTimeMillis()-start)+ " ms"); //$NON-NLS-1$ //$NON-NLS-2$
+					}
+				}
+				catch(Exception e) {
+					ApiPlugin.log(e);
+				}
+			}
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitReferencingComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+		 */
+		public boolean visitReferencingComponent(IComponentDescriptor component) {
+			return component.equals(consumerDescriptor);
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#endVisitReferencingComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+		 */
+		public void endVisitReferencingComponent(IComponentDescriptor component) {
+			//Do nothing, visitor only runs for one consumer at a time, html gets written and the end of the scan
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitMember(org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor)
+		 */
+		public boolean visitMember(IMemberDescriptor referencedMember) {
+			IReferenceTypeDescriptor desc = getEnclosingDescriptor(referencedMember);
+			if(desc == null) {
+				return false;
+			}
+			this.currenttype = (Type2) this.keys.get(desc);
+			if(this.currenttype == null) {
+				this.currenttype = new Type2(desc);
+				this.keys.put(desc, this.currenttype);
+			}
+			
+			currentProducer.types.put(desc, currenttype);
+			
+			this.currentmember = new Member(referencedMember);
+			this.currenttype.referencingMembers.put(referencedMember, currentmember);
+			
+			return true;
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#endVisitMember(org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor)
+		 */
+		public void endVisitMember(IMemberDescriptor referencedMember) {
+			if(this.currenttype.counts.getTotalRefCount() == 0) {
+				IReferenceTypeDescriptor desc = getEnclosingDescriptor(referencedMember);
+				if(desc != null) {
+					this.keys.remove(desc);
+					this.currentProducer.types.remove(this.currenttype);
+				}
+			}
+		}
+		
+		/* (non-Javadoc)
+		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitReference(org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor)
+		 */
+		public void visitReference(IReferenceDescriptor reference) {
+			IMemberDescriptor fromMember = reference.getMember();
+			if(!acceptReference(reference.getReferencedMember(), topatterns) || 
+					!acceptReference(fromMember, frompatterns)) {
+				return;
+			}
+			int lineNumber = reference.getLineNumber();
+			int refKind = reference.getReferenceKind();
+			int visibility = reference.getVisibility();
+			String refname = org.eclipse.pde.api.tools.internal.builder.Reference.getReferenceText(refKind);
+			ArrayList refs = (ArrayList) this.currentmember.children.get(refname);
+			if(refs == null) {
+				refs = new ArrayList();
+				this.currentmember.children.put(refname, refs);
+			}
+			refs.add(new Reference(fromMember, lineNumber, visibility, formatMessages(reference.getProblemMessages())));
+			switch(fromMember.getElementType()) {
+				case IElementDescriptor.TYPE: {
+					switch(visibility) {
+						case VisibilityModifiers.API: {
+							this.consumer.counts.total_api_type_count++;
+							this.currentProducer.counts.total_api_type_count++;
+							this.currentmember.counts.total_api_type_count++;
+							this.currenttype.counts.total_api_type_count++;
+							break;
+						}
+						case VisibilityModifiers.PRIVATE: {
+							this.consumer.counts.total_private_type_count++;
+							this.currentProducer.counts.total_private_type_count++;
+							this.currentmember.counts.total_private_type_count++;
+							this.currenttype.counts.total_private_type_count++;
+							break;
+						}
+						case VisibilityModifiers.PRIVATE_PERMISSIBLE: {
+							this.consumer.counts.total_permissable_type_count++;
+							this.currentProducer.counts.total_permissable_type_count++;
+							this.currentmember.counts.total_permissable_type_count++;
+							this.currenttype.counts.total_permissable_type_count++;
+							break;
+						}
+						case FRAGMENT_PERMISSIBLE: {
+							this.consumer.counts.total_fragment_permissible_type_count++;
+							this.currentProducer.counts.total_fragment_permissible_type_count++;
+							this.currentmember.counts.total_fragment_permissible_type_count++;
+							this.currenttype.counts.total_fragment_permissible_type_count++;
+							break;
+						}
+						case VisibilityModifiers.ILLEGAL_API: {
+							this.consumer.counts.total_illegal_type_count++;
+							this.currentProducer.counts.total_illegal_type_count++;
+							this.currentmember.counts.total_illegal_type_count++;
+							this.currenttype.counts.total_illegal_type_count++;
+							break;
+						}
+					}
+					break;
+				}
+				case IElementDescriptor.METHOD: {
+					switch(visibility) {
+						case VisibilityModifiers.API: {
+							this.consumer.counts.total_api_method_count++;
+							this.currentProducer.counts.total_api_method_count++;
+							this.currentmember.counts.total_api_method_count++;
+							this.currenttype.counts.total_api_method_count++;
+							break;
+						}
+						case VisibilityModifiers.PRIVATE: {
+							this.consumer.counts.total_private_method_count++;
+							this.currentProducer.counts.total_private_method_count++;
+							this.currentmember.counts.total_private_method_count++;
+							this.currenttype.counts.total_private_method_count++;
+							break;
+						}
+						case VisibilityModifiers.PRIVATE_PERMISSIBLE: {
+							this.consumer.counts.total_permissable_method_count++;
+							this.currentProducer.counts.total_permissable_method_count++;
+							this.currentmember.counts.total_permissable_method_count++;
+							this.currenttype.counts.total_permissable_method_count++;
+							break;
+						}
+						case FRAGMENT_PERMISSIBLE: {
+							this.consumer.counts.total_fragment_permissible_method_count++;
+							this.currentProducer.counts.total_fragment_permissible_method_count++;
+							this.currentmember.counts.total_fragment_permissible_method_count++;
+							this.currenttype.counts.total_fragment_permissible_method_count++;
+							break;
+						}
+						case VisibilityModifiers.ILLEGAL_API: {
+							this.consumer.counts.total_illegal_method_count++;
+							this.currentProducer.counts.total_illegal_method_count++;
+							this.currentmember.counts.total_illegal_method_count++;
+							this.currenttype.counts.total_illegal_method_count++;
+							break;
+						}
+					}
+					break;
+				}
+				case IElementDescriptor.FIELD: {
+					switch(visibility) {
+						case VisibilityModifiers.API: {
+							this.consumer.counts.total_api_field_count++;
+							this.currentProducer.counts.total_api_field_count++;
+							this.currentmember.counts.total_api_field_count++;
+							this.currenttype.counts.total_api_field_count++;
+							break;
+						}
+						case VisibilityModifiers.PRIVATE: {
+							this.consumer.counts.total_private_field_count++;
+							this.currentProducer.counts.total_private_field_count++;
+							this.currentmember.counts.total_private_field_count++;
+							this.currenttype.counts.total_private_field_count++;
+							break;
+						}
+						case VisibilityModifiers.PRIVATE_PERMISSIBLE: {
+							this.consumer.counts.total_permissable_field_count++;
+							this.currentProducer.counts.total_permissable_field_count++;
+							this.currentmember.counts.total_permissable_field_count++;
+							this.currenttype.counts.total_permissable_field_count++;
+							break;
+						}
+						case FRAGMENT_PERMISSIBLE: {
+							this.consumer.counts.total_fragment_permissible_field_count++;
+							this.currentProducer.counts.total_fragment_permissible_field_count++;
+							this.currentmember.counts.total_fragment_permissible_field_count++;
+							this.currenttype.counts.total_fragment_permissible_field_count++;
+							break;
+						}
+						case VisibilityModifiers.ILLEGAL_API: {
+							this.consumer.counts.total_illegal_field_count++;
+							this.currentProducer.counts.total_illegal_field_count++;
+							this.currentmember.counts.total_illegal_field_count++;
+							this.currenttype.counts.total_illegal_field_count++;
+							break;
+						}
+					}
+					break;
+				}
+			}
+		}
+		
+		/**
+		 * Returns if the reference should be reported or not
+		 * @param desc
+		 * @return true if the reference should be reported false otherwise
+		 */
+		private boolean acceptReference(IMemberDescriptor desc, Pattern[] patterns) {
+			if(patterns != null) {
+				for (int i = 0; i < patterns.length; i++) {
+					if(patterns[i].matcher(desc.getPackage().getName()).find()) {
+						return false;
+					}
+				}
+			}
+			return true;
+		}
+		
+		/**
+		 * Returns the enclosing {@link IReferenceTypeDescriptor} for the given member
+		 * descriptor
+		 * @param member
+		 * @return the enclosing {@link IReferenceTypeDescriptor} or <code>null</code>
+		 */
+		private IReferenceTypeDescriptor getEnclosingDescriptor(IMemberDescriptor member) {
+			switch(member.getElementType()) {
+			case IElementDescriptor.TYPE: {
+				return (IReferenceTypeDescriptor) member;
+			}
+			case IElementDescriptor.METHOD:
+			case IElementDescriptor.FIELD: {
+				return member.getEnclosingType();
+			}
+			}
+			return null;
+		}
+		
+
+		/**
+		 * Formats the arrays of messages
+		 * @param messages
+		 * @return the formatted messages or <code>null</code>
+		 */
+		private String formatMessages(String[] messages) {
+			if(messages != null) {
+				StringBuffer buffer = new StringBuffer();
+				for (int i = 0; i < messages.length; i++) {
+					buffer.append(messages[i]);
+					if(i < messages.length-1) {
+						buffer.append("\n"); //$NON-NLS-1$
+					}
+				}
+				return buffer.toString();
+			}
+			return null;
+		}
+	}
+	
+	class Consumer{
+		String name;
+		CountGroup counts = new CountGroup();
+	}
+	
+	class Producer {
+		String name;
+		Map types = new HashMap();
+		CountGroup counts = new CountGroup();
+	}
+	
+	class Type2 extends Type{
+		public Type2(IElementDescriptor desc) {
+			super(desc);
+		}
+		Map referencingMembers = new HashMap();
+	}
+	
+	/**
+	 * Constructor
+	 * @param htmlroot the folder root where the HTML reports should be written
+	 * @param xmlroot the folder root where the current API use scan output is located
+	 * @param topatterns array of regular expressions used to prune references to a given name pattern
+	 * @param frompatterns array of regular expressions used to prune references from a given name pattern
+	 */
+	public ConsumerReportConvertor(String htmlroot, String xmlroot, String[] topatterns, String[] frompatterns) {
+		super(htmlroot, xmlroot, topatterns, frompatterns);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#parse(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected List parse(IProgressMonitor monitor) throws Exception {
+		SubMonitor subMon = SubMonitor.convert(monitor, 20);
+		ListConsumersVisitor listVisitor = new ListConsumersVisitor();
+		UseScanParser parser = new UseScanParser();
+		parser.parse(getXmlLocation(), subMon.newChild(5), listVisitor);
+		List consumerReports = new ArrayList();
+		
+		IComponentDescriptor currentConsumer = null;
+		ConsumerReportVisitor visitor = null;
+		for (Iterator iterator = listVisitor.consumers.iterator(); iterator.hasNext();) {
+			currentConsumer = (IComponentDescriptor)iterator.next();
+			visitor = new ConsumerReportVisitor(currentConsumer);
+			parser.parse(getXmlLocation(), null, visitor);
+			if (visitor.consumer.counts.getTotalRefCount() > 0){
+				consumerReports.add(visitor.consumer);
+			}
+		}
+		return consumerReports;
+	}
+
+	protected String getConsumerTitle(String bundle) {
+		return NLS.bind(SearchMessages.ConsumerReportConvertor_ConsumerTitle, bundle);
+	}
+	
+	protected String getProducerTitle(String consumer, String producer) {
+		return NLS.bind(SearchMessages.ConsumerReportConvertor_ProducerTitle, consumer, producer);
+	}
+	
+	protected String getIndexTitle() {
+		return SearchMessages.ConsumerReportConvertor_IndexTitle;
+	}
+	
+	/**
+	 * Writes the main index file for the reports
+	 * @param scanResult a list of {@link Consumer} objects returns from the use scan parser
+	 * @param reportsRoot 
+	 */
+	void writeIndexPage(List scanResult) throws Exception {
+		Collections.sort(scanResult, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				return ((Consumer)o1).name.compareTo(((Consumer)o2).name);
+			}
+		});
+		
+		PrintWriter writer = null;
+		try {
+			File reportIndex = new File(getHtmlLocation(), "index.html"); //$NON-NLS-1$
+			if(!reportIndex.exists()) {
+				reportIndex.createNewFile();
+			}
+			setReportIndex(reportIndex);
+			
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(HTML_HEADER);
+			buffer.append(OPEN_HTML).append(OPEN_HEAD).append(CONTENT_TYPE_META);
+			writeMetadataHeaders(buffer);
+			buffer.append(OPEN_TITLE).append(getIndexTitle()).append(CLOSE_TITLE); 
+			buffer.append(CLOSE_HEAD); 
+			buffer.append(OPEN_BODY); 
+			buffer.append(OPEN_H3).append(getIndexTitle()).append(CLOSE_H3);
+			try {
+				getMetadata();
+				writeMetadataSummary(buffer);
+			}
+			catch(Exception e) {
+				//do nothing, failed meta-data should not prevent the index from being written
+			}
+			buffer.append(OPEN_H4).append(SearchMessages.UseReportConvertor_additional_infos_section).append(CLOSE_H4); 
+			if(hasMissing()) {
+				buffer.append(OPEN_P); 
+				buffer.append(NLS.bind(SearchMessages.UseReportConverter_missing_bundles_prevented_scan, 
+						new String[] {" <a href=\"./missing.html\">", "</a>"})); //$NON-NLS-1$ //$NON-NLS-2$
+				buffer.append(CLOSE_P); 
+			}
+			buffer.append(OPEN_P); 
+			buffer.append(NLS.bind(SearchMessages.UseReportConverter_bundles_that_were_not_searched, new String[] {"<a href=\"./not_searched.html\">", "</a></p>\n"}));  //$NON-NLS-1$//$NON-NLS-2$
+			String additional = getAdditionalIndexInfo(scanResult.size() > 0);
+			if(additional != null) {
+				buffer.append(additional);
+			}
+			if(scanResult.size() > 0) {
+				buffer.append(OPEN_P).append(SearchMessages.UseReportConverter_inlined_description).append(CLOSE_P);
+				buffer.append(getColourLegend());
+				buffer.append(getReferencesTableHeader(SearchMessages.ConsumerReportConvertor_ProducerListHeader, SearchMessages.UseReportConverter_bundle, true));
+				if(scanResult.size() > 0) {
+					Consumer consumer = null;
+					File refereehtml = null;
+					String link = null;
+					for(Iterator iter = scanResult.iterator(); iter.hasNext();) {
+						consumer = (Consumer) iter.next();
+						if(consumer != null) {
+							refereehtml = new File(getReportsRoot(), consumer.name+File.separator+"index.html"); //$NON-NLS-1$
+							link = extractLinkFrom(getReportsRoot(), refereehtml.getAbsolutePath());
+							buffer.append(getReferenceTableEntry(consumer.counts, link, consumer.name, true));
+						}
+					}
+					buffer.append(CLOSE_TABLE); 
+				}
+			}
+			else {
+				buffer.append(getNoReportsInformation()); 
+			}
+			buffer.append(W3C_FOOTER);
+			buffer.append(CLOSE_BODY).append(CLOSE_HTML);  
+			
+			//write the file
+			writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(reportIndex), IApiCoreConstants.UTF_8));
+			writer.print(buffer.toString());
+			writer.flush();
+		} catch (IOException e) {
+			throw new Exception(NLS.bind(SearchMessages.ioexception_writing_html_file, getReportIndex().getAbsolutePath()));
+		} finally {
+			if (writer != null) {
+				writer.close();
+			}
+		}
+	}
+	/**
+	 * Writes the html report for a specific consumer.  It lists all the producers (bundles that provide the api) that
+	 * the consumer bundle references.
+	 * 
+	 * @param consumer consumer to write the report for
+	 * @param producers a map of producer name to a {@link Producer} object
+	 * @throws Exception
+	 */
+	protected void writeConsumerReport(Consumer consumer, Map producers) throws Exception {
+		PrintWriter writer = null;
+		File originhtml = null;
+		try {
+			File htmlroot = new File(getHtmlLocation(), consumer.name);
+			if(!htmlroot.exists()) {
+				htmlroot.mkdirs();
+			}
+			originhtml = new File(htmlroot, "index.html"); //$NON-NLS-1$
+			if(!originhtml.exists()) {
+				originhtml.createNewFile();
+			}
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(HTML_HEADER);
+			buffer.append(OPEN_HTML).append(OPEN_HEAD).append(CONTENT_TYPE_META);
+			buffer.append(REF_STYLE);
+			buffer.append(REF_SCRIPT);
+			buffer.append(OPEN_TITLE).append(getConsumerTitle(consumer.name)).append(CLOSE_TITLE); 
+			buffer.append(CLOSE_HEAD); 
+			buffer.append(OPEN_BODY); 
+			buffer.append(OPEN_H3).append(getConsumerTitle(consumer.name)).append(CLOSE_H3);
+			
+			List producerNames = new ArrayList();
+			producerNames.addAll(producers.keySet());
+			Collections.sort(producerNames, compare);
+			
+			buffer.append(getReferencesTableHeader(SearchMessages.ConsumerReportConvertor_ConsumerListHeader, SearchMessages.UseReportConverter_bundle, true));
+			Producer producer = null;
+			File refereehtml = null;
+			String link = null;
+			for(Iterator iter = producerNames.iterator(); iter.hasNext();) {
+				producer = (Producer)producers.get(iter.next());
+				if(producer != null) {
+					refereehtml = new File(getReportsRoot(), producer.name+File.separator+"index.html"); //$NON-NLS-1$
+					link = extractLinkFrom(getReportsRoot(), refereehtml.getAbsolutePath());
+					buffer.append(getReferenceTableEntry(producer.counts, link, producer.name, true));
+				}
+			}
+			buffer.append(CLOSE_TABLE); 
+			buffer.append(BR);
+			
+			buffer.append(OPEN_P).append("<a href=\"../index.html\">").append(SearchMessages.UseReportConverter_back_to_bundle_index).append(CLOSE_A).append(CLOSE_P); //$NON-NLS-1$ 
+			buffer.append(W3C_FOOTER);
+			
+			writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(originhtml), IApiCoreConstants.UTF_8));;
+			writer.println(buffer.toString());
+			writer.flush();
+		}
+		catch(IOException ioe) {
+			throw new Exception(NLS.bind(SearchMessages.ioexception_writing_html_file, originhtml.getAbsolutePath()), ioe);
+		}
+		finally {
+			if (writer != null) {
+				writer.close();
+			}
+		}
+	}
+	
+	/**
+	 * Writes the html report for a given producer.  The page lists all the types that are referenced by the
+	 * parent consumer that are from the producer.
+	 * <p>
+	 * Called from {@link #writeConsumerReport(Consumer)}
+	 * </p>
+	 * @param producer producer to write the report for
+	 * @throws Exception
+	 */
+	protected void writeProducerReport(Consumer parentConsumer, Producer producer) throws Exception {
+		PrintWriter writer = null;
+		File originhtml = null;
+		try {
+			File htmlroot = new Path(getHtmlLocation()).append(parentConsumer.name).append(producer.name).toFile();
+			if(!htmlroot.exists()) {
+				htmlroot.mkdirs();
+			}
+			originhtml = new File(htmlroot, "index.html"); //$NON-NLS-1$
+			if(!originhtml.exists()) {
+				originhtml.createNewFile();
+			}
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(HTML_HEADER);
+			buffer.append(OPEN_HTML).append(OPEN_HEAD).append(CONTENT_TYPE_META);
+			buffer.append(REF_STYLE);
+			buffer.append(REF_SCRIPT);
+			buffer.append(OPEN_TITLE).append(getProducerTitle(parentConsumer.name, producer.name)).append(CLOSE_TITLE); 
+			buffer.append(CLOSE_HEAD); 
+			buffer.append(OPEN_BODY); 
+			buffer.append(OPEN_H3).append(getProducerTitle(parentConsumer.name, producer.name)).append(CLOSE_H3);
+			String additional = getAdditionalReferencedTypeInformation();
+			if(additional != null) {
+				buffer.append(additional);
+			}
+			buffer.append(getReferencesTableHeader(SearchMessages.ConsumerReportConvertor_TypeListHeader, SearchMessages.UseReportConverter_referenced_type, false));
+			
+			List producerTypes = new ArrayList();
+			producerTypes.addAll(producer.types.keySet());
+			Collections.sort(producerTypes, compare);
+			
+			CountGroup counts = null;
+			String link = null;
+			File typefile = null;
+			Type2 type = null;
+			for (Iterator iter = producerTypes.iterator(); iter.hasNext();) {
+				type = (Type2) producer.types.get(iter.next());
+				counts = type.counts;
+				
+				String fqname = Signatures.getQualifiedTypeSignature((IReferenceTypeDescriptor) type.desc);
+				typefile = new File(htmlroot, fqname+HTML_EXTENSION); 
+				if(!typefile.exists()) {
+					typefile.createNewFile();
+				}
+				link = extractLinkFrom(htmlroot, typefile.getAbsolutePath());
+				buffer.append(getReferenceTableEntry(counts, link, fqname, false));
+				writeTypePage(type.referencingMembers, type, typefile, fqname);
+			}
+			buffer.append(CLOSE_TABLE); 
+			buffer.append(BR);
+			
+			buffer.append(OPEN_P).append("<a href=\"../index.html\">").append(NLS.bind(SearchMessages.ConsumerReportConvertor_BackLinkToConsumer, parentConsumer.name)).append(CLOSE_A).append(CLOSE_P); //$NON-NLS-1$ 
+			buffer.append(W3C_FOOTER);
+			
+			writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(originhtml), IApiCoreConstants.UTF_8));;
+			writer.println(buffer.toString());
+			writer.flush();
+		}
+		catch(IOException ioe) {
+			throw new Exception(NLS.bind(SearchMessages.ioexception_writing_html_file, originhtml.getAbsolutePath()));
+		}
+		finally {
+			if (writer != null) {
+				writer.close();
+			}
+		}
+	}
+	
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/IReferenceCollection.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/IReferenceCollection.java
new file mode 100644
index 0000000..4c1c5c1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/IReferenceCollection.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+
+
+/**
+ * Describes a reference with element descriptors. Similar to an IReference but does not need
+ * to be connected to an actual baseline/API components.
+ */
+public interface IReferenceCollection {
+
+	/**
+	 * Adds the reference descriptor for a type to the collection
+	 * @param type type
+	 * @param referenceDescriptor reference descriptor to be added
+	 */
+	public void add(String type, IReferenceDescriptor referenceDescriptor);
+	
+	/**
+	 * Checks if a reference for a given type already exists in the collection
+	 * @param type
+	 * @return Returns <code>true</code> if the the collection has references for the given type,
+	 * <code>false</code> otherwise.
+	 */
+	public boolean hasReferencesTo(String type);
+		
+	/**
+	 * Returns the list of all the references made to this component in the API Use Scan report
+	 * @return the list of reference descriptors
+	 */
+	public IReferenceDescriptor[] getAllExternalDependencies();
+	
+	/**
+	 * Returns the list of all the references made to a particular member of this component 
+	 * in the API Use Scan report
+	 * @param types to which references have been made
+	 * @return the list of reference descriptors
+	 */
+	public IReferenceDescriptor[] getExternalDependenciesTo(String[] types);
+	
+	/**
+	 * Clears the collection
+	 */
+	public void clear();
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefMetadata.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefMetadata.java
new file mode 100644
index 0000000..9bbf064
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefMetadata.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.Calendar;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.provisional.search.IMetadata;
+import org.eclipse.pde.api.tools.internal.util.Util;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import com.ibm.icu.text.DateFormat;
+
+/**
+ * Implementation of {@link IMetadata} for API Use Scan problem report
+ */
+public class MissingRefMetadata implements IMetadata {
+
+	/**
+	 * XML tag name for Profile
+	 */
+	public static final String PROFILE = "profile"; //$NON-NLS-1$
+	/**
+	 * XML tag name for the date the scan was run
+	 */
+	public static final String RUNATDATE = "runatdate"; //$NON-NLS-1$
+	/**
+	 * XML tag name for the report location
+	 */
+	public static final String REPORTLOCATION = "reportlocation"; //$NON-NLS-1$
+	/**
+	 * XML tag name for api use scan list
+	 */
+	public static final String APIUUSESCANS = "apiusescans"; //$NON-NLS-1$
+	/**
+	 * XML tag name for the value
+	 */
+	public static final String VALUE = "value"; //$NON-NLS-1$
+	/**
+	 * Root tag for the metadata file
+	 */
+	public static final String METADATA = "metadata"; //$NON-NLS-1$
+
+	private String profile = null;
+	private String runatdate = null;
+	private String reportlocation = null;
+	private String apiusescans = null;
+
+	/**
+	 * Constructor
+	 */
+	public MissingRefMetadata() {
+		//create an empty metadata object
+	}
+
+	/**
+	 * Constructor
+	 * @param profile
+	 * @param runatdate
+	 * @param reportlocation
+	 * @param scopepattern
+	 * @param refpattern
+	 * @param apiusescans
+	 */
+	public MissingRefMetadata(String profile, String reportlocation, String apiusescans) {
+		this.profile = profile;
+		this.runatdate = DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
+		this.reportlocation = reportlocation;
+		this.apiusescans = apiusescans;
+	}
+
+	/**
+	 * Returns the use metadata from meta.xml
+	 * @return
+	 * @throws Exception
+	 */
+	public static MissingRefMetadata getMetadata(File xmlFile) throws Exception {
+		MissingRefMetadata metadata = new MissingRefMetadata();
+		try {
+			if (xmlFile.exists()) {
+				String xmlstr = Util.getFileContentAsString(xmlFile);
+				Element doc = Util.parseDocument(xmlstr.trim());
+				Element element = null;
+				String value = null, name = null;
+				NodeList nodes = doc.getElementsByTagName("*"); //$NON-NLS-1$
+				for (int i = 0; i < nodes.getLength(); i++) {
+					element = (Element) nodes.item(i);
+					value = element.getAttribute(MissingRefMetadata.VALUE);
+					name = element.getNodeName();
+
+					if (PROFILE.equals(name)) {
+						metadata.setProfile(value);
+						continue;
+					}
+					if (RUNATDATE.equals(name)) {
+						metadata.setRunAtDate(value);
+						continue;
+					}
+					if (REPORTLOCATION.equals(name)) {
+						metadata.setReportLocation(value);
+						continue;
+					}
+					if (APIUUSESCANS.equals(name)) {
+						metadata.setApiUseScans(value);
+						continue;
+					}
+				}
+			}
+		} catch (CoreException e) {
+			throw new Exception(NLS.bind(SearchMessages.MissingRefMetadata_CoreExceptionInParsing, xmlFile.getAbsolutePath()));
+		}
+		return metadata;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.provisional.search.IMetadata#serializeToFile(java.io.File)
+	 */
+	public void serializeToFile(File file) throws IOException, CoreException {
+		BufferedWriter writer = null;
+		try {
+			Document doc = Util.newDocument();
+			Element root = doc.createElement(MissingRefMetadata.METADATA);
+			doc.appendChild(root);
+
+			Element child = doc.createElement(MissingRefMetadata.PROFILE);
+			root.appendChild(child);
+			child.setAttribute(MissingRefMetadata.VALUE, profile);
+
+			child = doc.createElement(MissingRefMetadata.RUNATDATE);
+			root.appendChild(child);
+			child.setAttribute(MissingRefMetadata.VALUE, runatdate);
+
+			child = doc.createElement(MissingRefMetadata.REPORTLOCATION);
+			root.appendChild(child);
+			child.setAttribute(MissingRefMetadata.VALUE, reportlocation);
+
+			child = doc.createElement(MissingRefMetadata.APIUUSESCANS);
+			root.appendChild(child);
+			child.setAttribute(MissingRefMetadata.VALUE, apiusescans);
+
+			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), IApiCoreConstants.UTF_8));
+			writer.write(Util.serializeDocument(doc));
+			writer.flush();
+		} finally {
+			if (writer != null) {
+				writer.close();
+			}
+		}
+	}
+
+	/**
+	 * Allows the profile to be set. This method accepts <code>null</code>
+	 * @param profile the profile to set
+	 */
+	public void setProfile(String profile) {
+		this.profile = profile;
+	}
+
+	/**
+	 * Returns the profile set in this metadata or <code>null</code> if none.
+	 * @return the profile
+	 */
+	public String getProfile() {
+		return profile;
+	}
+
+	/**
+	 * Allows the run-at date to be set. This method accepts <code>null</code>
+	 * @param date the date to set
+	 */
+	public void setRunAtDate(String date) {
+		this.runatdate = date;
+	}
+
+	/**
+	 * Returns the run-at date set in this metadata or <code>null</code> if none.
+	 * @return the run-at date or <code>null</code>
+	 */
+	public String getRunAtDate() {
+		return this.runatdate;
+	}
+
+	/**
+	 * Returns the report location set in this metadata or <code>null</code> if none.
+	 * @return the report location or <code>null</code>
+	 */
+	public String getReportLocation() {
+		return this.reportlocation;
+	}
+
+	/**
+	 * Allows the report location to be set. This method accepts <code>null</code>.
+	 * @param location the new report location
+	 */
+	public void setReportLocation(String location) {
+		this.reportlocation = location;
+	}
+
+	/**
+	 * Returns the API Use Scans set in this metadata or <code>null</code> if none.
+	 * @return the apiusescans
+	 */
+	public String getApiUseScans() {
+		return apiusescans;
+	}
+
+	/**
+	 * Allows the API Use Scan to be set. This method accepts <code>null</code>
+	 * @param apiusescans the apiusescans to set
+	 */
+	public void setApiUseScans(String apiusescans) {
+		this.apiusescans = apiusescans;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefParser.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefParser.java
new file mode 100644
index 0000000..e99995a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefParser.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.SAXParser;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.IApiXmlConstants;
+import org.eclipse.pde.api.tools.internal.problems.ApiProblem;
+import org.eclipse.pde.api.tools.internal.provisional.Factory;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor;
+import org.eclipse.pde.api.tools.internal.search.MissingRefReportConverter.MissingRefVisitor;
+import org.eclipse.pde.api.tools.internal.util.Util;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+class MissingRefParser extends UseScanParser {
+
+	class MissingRefProblemHandler extends DefaultHandler {
+
+		List problems = new ArrayList();
+		private String typename;
+		private int linenumber;
+		private int charstart;
+		private int charend;
+		private int id;
+		private List messageargs = new ArrayList();
+		private Map extraargs = new HashMap();
+
+		public void startDocument() throws SAXException {
+
+		}
+
+		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+			if (IApiXmlConstants.ELEMENT_API_PROBLEM.equalsIgnoreCase(qName)) {
+				typename = attributes.getValue(IApiXmlConstants.ATTR_TYPE_NAME);
+				linenumber = Integer.parseInt(attributes.getValue(IApiXmlConstants.ATTR_LINE_NUMBER));
+				charstart = Integer.parseInt(attributes.getValue(IApiXmlConstants.ATTR_CHAR_START));
+				charend = Integer.parseInt(attributes.getValue(IApiXmlConstants.ATTR_CHAR_END));
+				id = Integer.parseInt(attributes.getValue(IApiXmlConstants.ATTR_ID));
+			} else if (IApiXmlConstants.ELEMENT_PROBLEM_MESSAGE_ARGUMENTS.equalsIgnoreCase(qName)) {
+				messageargs.clear();
+			} else if (IApiXmlConstants.ELEMENT_PROBLEM_MESSAGE_ARGUMENT.equalsIgnoreCase(qName)) {
+				messageargs.add(attributes.getValue(IApiXmlConstants.ATTR_VALUE));
+			} else if (IApiXmlConstants.ELEMENT_PROBLEM_EXTRA_ARGUMENTS.equalsIgnoreCase(qName)) {
+				extraargs.clear();
+			} else if (IApiXmlConstants.ELEMENT_PROBLEM_EXTRA_ARGUMENT.equalsIgnoreCase(qName)) {
+				extraargs.put(attributes.getValue(IApiXmlConstants.ATTR_ID), attributes.getValue(IApiXmlConstants.ATTR_VALUE));
+			}
+		}
+
+		public void endElement(String uri, String localName, String qName) throws SAXException {
+			if (IApiXmlConstants.ELEMENT_API_PROBLEM.equalsIgnoreCase(qName)) {
+				String[] argumentids = new String[extraargs.size()];
+				Object[] arguments = new Object[extraargs.size()];
+				int i = 0;
+				for (Iterator iterator = extraargs.keySet().iterator(); iterator.hasNext(); i++) {
+					argumentids[i] = (String) iterator.next();
+					arguments[i] = extraargs.get(argumentids[i]);
+				}
+				ApiProblem problem = new ApiProblem(null, typename, (String[]) messageargs.toArray(new String[messageargs.size()]), argumentids, arguments, linenumber, charstart, charend, id);
+				problems.add(problem);
+			}
+		}
+
+		public void endDocument() throws SAXException {
+		}
+
+		public List getProblems() {
+			return problems;
+		}
+	}
+
+	static final FileFilter filter = new FileFilter() {
+		public boolean accept(File pathname) {
+			return pathname.isFile() && pathname.getName().endsWith(".xml");  //$NON-NLS-1$
+		}
+	};
+	
+	/**
+	 * @param xmlLocation
+	 * @param visitor
+	 * @throws Exception
+	 */
+	public void parse(String xmlLocation, MissingRefVisitor visitor) throws Exception {
+		if (xmlLocation == null) {
+			throw new Exception(SearchMessages.missing_xml_files_location);
+		}
+		File reportsRoot = new File(xmlLocation);
+		if (!reportsRoot.exists() || !reportsRoot.isDirectory()) {
+			throw new Exception(NLS.bind(SearchMessages.invalid_directory_name, xmlLocation));
+		}
+		File[] components = getDirectories(reportsRoot);
+		components = sort(components);
+
+		visitor.visitScan();
+		SAXParser parser = getParser();
+		// Treat each top level directory as a producer component
+		for (int i = 0; i < components.length; i++) {
+			if (components[i].isDirectory()) {
+				String[] idv = getIdVersion(components[i].getName());
+				IComponentDescriptor targetComponent = Factory.componentDescriptor(idv[0], idv[1]);
+				if (visitor.visitComponent(targetComponent)) {
+					File[] xmlfiles = Util.getAllFiles(components[i], filter);
+					if (xmlfiles != null && xmlfiles.length > 0) {
+						xmlfiles = sort(xmlfiles); // sort to visit in determined order
+						for (int k = 0; k < xmlfiles.length; k++) {
+							try {
+								MissingRefProblemHandler handler = new MissingRefProblemHandler();
+								parser.parse(xmlfiles[k], handler);
+								List apiProblems = handler.getProblems();
+								visitor.addToCurrentReport(apiProblems);
+							} catch (SAXException e) {
+							} catch (IOException e) {
+							}
+						}
+					}
+					visitor.endVisitComponent();
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefReportConverter.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefReportConverter.java
new file mode 100644
index 0000000..4157bd0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/MissingRefReportConverter.java
@@ -0,0 +1,584 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.problems.ApiProblem;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
+import org.eclipse.pde.api.tools.internal.provisional.search.IMetadata;
+import org.osgi.framework.Version;
+
+public class MissingRefReportConverter extends UseReportConverter {
+
+	class MissingRefVisitor {
+		public List reports;
+
+		public void visitScan() {
+			reports = new ArrayList();
+		}
+
+		public boolean visitComponent(IComponentDescriptor targetComponent) {
+			currentreport = new Report();
+			currentreport.name = composeName(targetComponent.getId(), targetComponent.getVersion());
+			reports.add(currentreport);
+			return true;
+		}
+
+		/**
+		 * Builds the name for the component
+		 * @param id id of the component
+		 * @param version version of the component, can be <code>null</code>
+		 * @return string name
+		 */
+		protected String composeName(String id, String version) {
+			String versionName = version;
+			if (version == null) {
+				versionName = Version.emptyVersion.toString();
+			}
+			StringBuffer buffer = new StringBuffer(3 + id.length() + versionName.length());
+			buffer.append(id).append(" (").append(versionName).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+			return buffer.toString();
+		}
+
+		public void endVisitComponent() {
+			try {
+				writeIndexFileForComponent(currentreport);
+			} catch (Exception e) {
+				ApiPlugin.log(e);
+			}
+		}
+
+		private void writeIndexFileForComponent(Report report) throws Exception {
+			PrintWriter writer = null;
+			File originhtml = null;
+			try {
+				File htmlroot = new File(getHtmlLocation(), report.name);
+				if (!htmlroot.exists()) {
+					htmlroot.mkdirs();
+				}
+				originhtml = new File(htmlroot, "index.html"); //$NON-NLS-1$
+				if (!originhtml.exists()) {
+					originhtml.createNewFile();
+				}
+				StringBuffer buffer = new StringBuffer();
+				buffer.append(HTML_HEADER);
+				buffer.append(OPEN_HTML).append(OPEN_HEAD).append(CONTENT_TYPE_META);
+				buffer.append(REF_STYLE);
+				buffer.append(REF_SCRIPT);
+				buffer.append(OPEN_TITLE).append(getProblemTitle(report.name)).append(CLOSE_TITLE);
+				buffer.append(CLOSE_HEAD);
+				buffer.append(OPEN_BODY);
+				buffer.append(OPEN_H3).append(getProblemTitle(report.name)).append(CLOSE_H3);
+				buffer.append(getProblemSummary(report));
+
+				StringBuffer typeProblems = new StringBuffer();
+				StringBuffer methodProblems = new StringBuffer();
+				StringBuffer fieldProblems = new StringBuffer();
+				Entry entry = null;
+				Integer key = null;
+				TreeMap types = null;
+				for (Iterator iterator = report.apiProblems.entrySet().iterator(); iterator.hasNext();) {
+					entry = (Entry) iterator.next();
+					key = (Integer) entry.getKey();
+					types = (TreeMap) entry.getValue();
+					switch (key.intValue()) {
+						case IApiProblem.API_USE_SCAN_TYPE_PROBLEM :
+							typeProblems.append(getProblemTable(types));
+							break;
+						case IApiProblem.API_USE_SCAN_METHOD_PROBLEM :
+							methodProblems.append(getProblemTable(types));
+							break;
+						case IApiProblem.API_USE_SCAN_FIELD_PROBLEM :
+							fieldProblems.append(getProblemTable(types));
+					}
+				}
+				buffer.append(getProblemsTableHeader(SearchMessages.MissingRefReportConverter_ProblemDetails, SearchMessages.MissingRefReportConverter_ProblemTypes)); 
+				if (typeProblems.length() > 0) {
+					buffer.append(getProblemRow(typeProblems, SearchMessages.MissingRefReportConverter_Type));
+				}
+				if (methodProblems.length() > 0) {
+					buffer.append(getProblemRow(methodProblems, SearchMessages.MissingRefReportConverter_Method));
+				}
+				if (fieldProblems.length() > 0) {
+					buffer.append(getProblemRow(fieldProblems, SearchMessages.MissingRefReportConverter_Field)); 
+				}
+				buffer.append(CLOSE_TABLE);
+
+				buffer.append(OPEN_P).append("<a href=\"../index.html\">").append(SearchMessages.MissingRefReportConverter_BackToIndex).append(CLOSE_A).append(CLOSE_P); //$NON-NLS-1$ 
+				buffer.append(W3C_FOOTER);
+				buffer.append(CLOSE_BODY);
+
+				writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(originhtml), IApiCoreConstants.UTF_8));;
+				writer.println(buffer.toString());
+				writer.flush();
+			} catch (IOException ioe) {
+				throw new Exception(NLS.bind(SearchMessages.ioexception_writing_html_file, originhtml.getAbsolutePath()));
+			} finally {
+				if (writer != null) {
+					writer.close();
+				}
+
+			}
+		}
+
+		private StringBuffer getProblemRow(StringBuffer type, String header) {
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(OPEN_TR);
+			buffer.append("<td align=\"left\">\n"); //$NON-NLS-1$
+			buffer.append(OPEN_B);
+			buffer.append("<a href=\"javascript:void(0)\" class=\"typeslnk\" onclick=\"expand(this)\" title=\""); //$NON-NLS-1$
+			buffer.append(header).append("\">\n"); //$NON-NLS-1$
+			buffer.append("<span>[+] </span>").append(header).append("\n"); //$NON-NLS-1$//$NON-NLS-2$
+			buffer.append(CLOSE_A).append(CLOSE_B);
+			buffer.append("<div colspan=\"6\" class=\"types\">\n"); //$NON-NLS-1$
+			buffer.append(type).append("\n"); //$NON-NLS-1$
+			buffer.append(CLOSE_DIV);
+			buffer.append(CLOSE_TR);
+			return buffer;
+		}
+
+		private StringBuffer getProblemTable(TreeMap types) {
+			StringBuffer buffer = new StringBuffer();
+			buffer.append("<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"6\">\n"); //$NON-NLS-1$
+			Entry entry = null;
+			String tname = null;
+			ArrayList pbs = null;
+			for (Iterator i = types.entrySet().iterator(); i.hasNext();) {
+				entry = (Entry) i.next();
+				tname = (String) entry.getKey();
+				pbs = (ArrayList) entry.getValue();
+				buffer.append("<tr align=\"left\"> \n"); //$NON-NLS-1$
+				buffer.append("<td colspan=\"1\" bgcolor=\"#CCCCCC\">").append(OPEN_B).append(tname).append(CLOSE_B).append(CLOSE_TD); //$NON-NLS-1$
+				buffer.append(CLOSE_TR);
+				ApiProblem pb = null;
+				Collections.sort(pbs, compare);
+				for (Iterator i2 = pbs.iterator(); i2.hasNext();) {
+					pb = (ApiProblem) i2.next();
+					buffer.append(OPEN_TR);
+					buffer.append("<td align=\"left\" width=\"75%\">").append(pb.getMessage()).append(CLOSE_TD); //$NON-NLS-1$ 
+					buffer.append(CLOSE_TR);
+				}
+			}
+			buffer.append(CLOSE_TABLE);
+			return buffer;
+		}
+
+		private Object getProblemSummary(Report report) {
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(OPEN_H4).append(SearchMessages.MissingRefReportConverter_Summary).append(CLOSE_H4);
+			buffer.append(OPEN_P).append(NLS.bind(SearchMessages.MissingRefReportConverter_SummaryDesc, new String[] {report.name, Integer.toString(report.apiProblems.size())})).append(CLOSE_P);
+			return buffer.toString();
+		}
+
+		/**
+		 * Returns the HTML markup for the problems table header.
+		 * @param sectionname
+		 * @param type
+		 * @return the default references table header
+		 */
+		String getProblemsTableHeader(String sectionname, String type) {
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(OPEN_H4).append(sectionname).append(CLOSE_H4);
+			buffer.append(OPEN_P).append(SearchMessages.MissingRefReportConverter_ProblemTableHeader).append(CLOSE_P);
+			buffer.append("<div align=\"left\" class=\"main\">"); //$NON-NLS-1$
+			buffer.append("<table border=\"1\" width=\"80%\">\n"); //$NON-NLS-1$
+
+			buffer.append(OPEN_TR);
+			buffer.append("<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\">").append(OPEN_B).append(type).append("</b></td>\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
+			buffer.append(CLOSE_TR);
+
+			return buffer.toString();
+		}
+
+		/**
+		 * @param bundle
+		 * @return the page title 
+		 */
+		protected String getProblemTitle(String bundle) {
+			return NLS.bind(SearchMessages.MissingRefReportConverter_ProblemTitle, bundle);
+		}
+
+		public void addToCurrentReport(List apiProblems) {
+			currentreport.add(apiProblems);
+		}
+	};
+
+	private String xmlLocation = null;
+	private String htmlLocation = null;
+	private File reportsRoot = null;
+	private File htmlIndex = null;
+	Report currentreport = null;
+
+	static final Comparator compare = new Comparator() {
+		public int compare(Object o1, Object o2) {
+			if(o1 instanceof String && o2 instanceof String) {
+				return ((String)o1).compareTo((String)o2);
+			}
+			if(o1 instanceof ApiProblem && o2 instanceof ApiProblem) {
+				return ((ApiProblem)o1).getMessage().compareTo(((ApiProblem)o2).getMessage());
+			}
+			return 0;
+		}
+	};
+	
+	/**
+	 * Root item describing the use of one component
+	 */
+	static class Report {
+		String name = null;
+		TreeMap apiProblems = new TreeMap();
+		int typeProblems = 0;
+		int methodProblems = 0;
+		int fieldProblems = 0;
+
+		public void add(List apiProblems) {
+			ApiProblem pb = null;
+			ArrayList list = null;
+			TreeMap types = null;
+			for (Iterator i = apiProblems.iterator(); i.hasNext();) {
+				pb = (ApiProblem) i.next();
+				Integer key = new Integer(pb.getKind());
+				types = (TreeMap) this.apiProblems.get(key);
+				if(types == null) {
+					types = new TreeMap(compare);
+					this.apiProblems.put(key, types);
+				}
+				String tname = pb.getTypeName();
+				list = (ArrayList) types.get(tname);
+				if(list == null) {
+					list = new ArrayList();
+					types.put(tname, list);
+				}
+				list.add(pb);
+				switch (pb.getKind()) {
+					case 1 :
+						++typeProblems;
+						break;
+					case 2 :
+						++methodProblems;
+						break;
+					case 3 :
+						++fieldProblems;
+						break;
+				}
+			}
+		}
+
+		public int getTotal() {
+			return typeProblems + methodProblems + fieldProblems;
+		}
+	}
+
+	/**
+	 * Constructor
+	 * @param htmlroot the folder root where the HTML reports should be written
+	 * @param xmlroot the folder root where the current API use scan output is located
+	 */
+	public MissingRefReportConverter(String htmlroot, String xmlroot) {
+		super(htmlroot, xmlroot, null, null);
+		this.xmlLocation = xmlroot;
+		this.htmlLocation = htmlroot;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#convert(java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void convert(String xslt, IProgressMonitor monitor) throws Exception {
+		File htmlRoot = new File(this.htmlLocation);
+		if (!htmlRoot.exists()) {
+			if (!htmlRoot.mkdirs()) {
+				throw new Exception(NLS.bind(SearchMessages.could_not_create_file, this.htmlLocation));
+			}
+		} else {
+			htmlRoot.mkdirs();
+		}
+		File reportsRoot = getReportsRoot();
+		if (!reportsRoot.exists() || !reportsRoot.isDirectory()) {
+			throw new Exception(NLS.bind(SearchMessages.invalid_directory_name, this.xmlLocation));
+		}
+
+		long start = 0;
+		if (DEBUG) {
+			start = System.currentTimeMillis();
+		}
+		writeNotSearchedPage(htmlRoot);
+
+		if (DEBUG) {
+			System.out.println("done in: " + (System.currentTimeMillis() - start) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println("Parsing use scan..."); //$NON-NLS-1$
+			start = System.currentTimeMillis();
+		}
+		List result = parse();
+		if (DEBUG) {
+			System.out.println("done in: " + (System.currentTimeMillis() - start) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println("Sorting reports and writing index..."); //$NON-NLS-1$
+			start = System.currentTimeMillis();
+		}
+		writeIndexPage(result);
+	}
+	
+	/**
+	 * Writes the main index file for the reports
+	 * @param result a list of {@link Report} objects returns from the use scan parser
+	 */
+	void writeIndexPage(List result) throws Exception {
+		Collections.sort(result, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				return ((Report) o1).name.compareTo(((Report) o2).name);
+			}
+		});
+
+		PrintWriter writer = null;
+		try {
+			File reportIndex = new File(getHtmlLocation(), "index.html"); //$NON-NLS-1$
+			if (!reportIndex.exists()) {
+				reportIndex.createNewFile();
+			}
+//			setReportIndex(reportIndex);
+
+			StringBuffer buffer = new StringBuffer();
+			buffer.append(HTML_HEADER);
+			buffer.append(OPEN_HTML).append(OPEN_HEAD).append(CONTENT_TYPE_META);
+			writeMetadataHeaders(buffer);
+			buffer.append(OPEN_TITLE).append(getIndexTitle()).append(CLOSE_TITLE);
+			buffer.append(CLOSE_HEAD);
+			buffer.append(OPEN_BODY);
+			buffer.append(OPEN_H3).append(getIndexTitle()).append(CLOSE_H3);
+
+			writeMetadataSummary(buffer);
+
+			buffer.append(OPEN_H4).append(SearchMessages.MissingRefReportConverter_AddlBundleInfo).append(CLOSE_H4);
+//			if(hasMissing()) {
+//				buffer.append(OPEN_P); 
+//				buffer.append(NLS.bind(SearchMessages.UseReportConverter_missing_bundles_prevented_scan, 
+//						new String[] {" <a href=\"./missing.html\">", "</a>"})); //$NON-NLS-1$ //$NON-NLS-2$
+//				buffer.append(CLOSE_P); 
+//			}
+			buffer.append(OPEN_P);
+			buffer.append(NLS.bind(SearchMessages.MissingRefReportConverter_NotSearched, new String[] {"<a href=\"./not_searched.html\">", "</a></p>\n"}));  //$NON-NLS-1$//$NON-NLS-2$
+			if (result.size() > 0) {
+				buffer.append(getProblemSummaryTable());
+				if (result.size() > 0) {
+					Report report = null;
+					for (Iterator iter = result.iterator(); iter.hasNext();) {
+						report = (Report) iter.next();
+						if (report != null) {
+							File refereehtml = new File(getReportsRoot(), report.name + File.separator + "index.html"); //$NON-NLS-1$
+							String link = extractLinkFrom(getReportsRoot(), refereehtml.getAbsolutePath());
+							buffer.append(getReferenceTableEntry(report, link));
+						}
+					}
+					buffer.append(CLOSE_TABLE);
+				}
+			} else {
+				buffer.append(getNoReportsInformation()); 
+			}
+			buffer.append(W3C_FOOTER);
+			buffer.append(CLOSE_BODY).append(CLOSE_HTML);
+
+			//write the file
+			writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(reportIndex), IApiCoreConstants.UTF_8));
+			writer.print(buffer.toString());
+			writer.flush();
+		} catch (IOException e) {
+			throw new Exception(NLS.bind(SearchMessages.ioexception_writing_html_file, getReportIndex().getAbsolutePath()));
+		} finally {
+			if (writer != null) {
+				writer.close();
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#getNoReportsInformation()
+	 */
+	protected String getNoReportsInformation() {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(OPEN_P).append(BR).append(SearchMessages.no_use_scan_ref_problems).append(CLOSE_P); 
+		return buffer.toString();
+	}
+	
+	/**
+	 * Returns the HTML markup for one entry in the problem summary table.
+	 * @param report
+	 * @param link
+	 * @return a single reference table entry
+	 */
+	private Object getReferenceTableEntry(Report report, String link) {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(OPEN_TR);
+		buffer.append("<td><b><a href=\"").append(link).append("\">").append(getBundleOnlyName(report.name)).append("</a>").append(CLOSE_B).append(CLOSE_TD); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		buffer.append("\t<td align=\"left\">").append(getVersion(report.name)).append(CLOSE_TD); //$NON-NLS-1$
+		buffer.append("\t<td align=\"center\">").append(report.typeProblems).append(CLOSE_TD); //$NON-NLS-1$
+		buffer.append("\t<td align=\"center\">").append(report.methodProblems).append(CLOSE_TD); //$NON-NLS-1$ 
+		buffer.append("\t<td align=\"center\">").append(report.fieldProblems).append(CLOSE_TD); //$NON-NLS-1$ 
+		buffer.append("\t<td align=\"center\">").append(report.getTotal()).append(CLOSE_TD); //$NON-NLS-1$ 
+		buffer.append(CLOSE_TR);
+		return buffer.toString();
+	}
+
+	private StringBuffer getProblemSummaryTable() {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(OPEN_H4).append(SearchMessages.MissingRefReportConverter_ProblemSummaryTitle).append(CLOSE_H4);
+		buffer.append(OPEN_P).append(SearchMessages.MissingRefReportConverter_ProblemSummary).append(CLOSE_P);
+		buffer.append("<table border=\"1\" width=\"80%\">\n"); //$NON-NLS-1$
+		buffer.append(OPEN_TR);
+		buffer.append("\t<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\" width=\"25%\" title=\""); //$NON-NLS-1$ //$NON-NLS-2$
+		buffer.append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnBundleTooltip).append("\"\">");  //$NON-NLS-1$
+		buffer.append(OPEN_B).append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnBundle).append(CLOSE_B).append(CLOSE_TD);
+		//version header
+		buffer.append("\t<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\" align=\"center\" width=\"15%\" title=\""); //$NON-NLS-1$ //$NON-NLS-2$
+		buffer.append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnVersionTooltip).append("\"\">");  //$NON-NLS-1$
+		buffer.append(OPEN_B).append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnVersion).append(CLOSE_B).append(CLOSE_TD);
+		//Missing Types
+		buffer.append("\t<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\" align=\"center\" width=\"15%\" title=\""); //$NON-NLS-1$ //$NON-NLS-2$
+		buffer.append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnMissingTypesTooltip).append("\">");  //$NON-NLS-1$
+		buffer.append(OPEN_B).append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnMissingTypes).append(CLOSE_B).append(CLOSE_TD);
+		//Missing Methods
+		buffer.append("\t<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\" align=\"center\" width=\"15%\" title=\""); //$NON-NLS-1$ //$NON-NLS-2$
+		buffer.append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnMissingMethodsTooltip).append("\">");  //$NON-NLS-1$
+		buffer.append(OPEN_B).append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnMissingMethods).append(CLOSE_B).append(CLOSE_TD);
+		//Missing Fields
+		buffer.append("\t<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\" align=\"center\" width=\"15%\" title=\""); //$NON-NLS-1$ //$NON-NLS-2$
+		buffer.append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnMissingFieldsTooltip).append("\">");  //$NON-NLS-1$
+		buffer.append(OPEN_B).append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnMissingFields).append(CLOSE_B).append(CLOSE_TD);
+		//Total
+		buffer.append("\t<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\" align=\"center\" width=\"15%\" title=\""); //$NON-NLS-1$ //$NON-NLS-2$
+		buffer.append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnTotalTooltip).append("\">");  //$NON-NLS-1$
+		buffer.append(OPEN_B).append(SearchMessages.MissingRefReportConverter_ProblemTable_ColumnTotal).append(CLOSE_B).append(CLOSE_TD);
+		return buffer;
+	}
+
+	void writeMetadataSummary(StringBuffer buffer) throws Exception {
+		MissingRefMetadata metadata = (MissingRefMetadata) getMetadata();
+		buffer.append(OPEN_H4).append(SearchMessages.MissingRefReportConverter_MetadataTitle).append(CLOSE_H4);
+		buffer.append("<table border=\"0px\" title=\"").append(SearchMessages.MissingRefReportConverter_MetadataTableTitle).append("\"width=\"50%\">"); //$NON-NLS-1$ //$NON-NLS-2$ 
+
+		buffer.append(OPEN_TR);
+		buffer.append(openTD(14)).append(SearchMessages.MissingRefReportConverter_ReportDate).append(CLOSE_TD);
+		buffer.append(openTD(36)).append(metadata.getRunAtDate()).append(CLOSE_TD);
+		buffer.append(CLOSE_TR);
+
+		buffer.append(OPEN_TR);
+		buffer.append(openTD(14)).append(SearchMessages.MissingRefReportConverter_ProfileLocation).append(CLOSE_TD);
+		String value = metadata.getProfile();
+		buffer.append(openTD(36)).append((value != null ? value : SearchMessages.MissingRefReportConverter_NONE)).append(CLOSE_TD);
+		buffer.append(CLOSE_TR);
+
+		buffer.append(OPEN_TR);
+		buffer.append(openTD(14)).append(SearchMessages.MissingRefReportConverter_ReportLocation).append(CLOSE_TD);
+		value = metadata.getReportLocation();
+		buffer.append(openTD(36)).append((value != null ? value : SearchMessages.MissingRefReportConverter_NONE)).append(CLOSE_TD);
+		buffer.append(CLOSE_TR);
+
+		buffer.append(OPEN_TR);
+		buffer.append(openTD(14)).append(SearchMessages.MissingRefReportConverter_ApiUseScanLocations).append(CLOSE_TD);
+		value = metadata.getApiUseScans();
+		buffer.append(openTD(36)).append((value != null ? value : SearchMessages.MissingRefReportConverter_NONE)).append(CLOSE_TD);
+		buffer.append(CLOSE_TR);
+
+		buffer.append(CLOSE_TD);
+		buffer.append(CLOSE_TR);
+		buffer.append(CLOSE_TABLE);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#getMetadata()
+	 */
+	IMetadata getMetadata() throws Exception {
+		File xmlFile = new File(getReportsRoot(), "meta" + XML_EXTENSION); //$NON-NLS-1$
+		if (!xmlFile.exists()) {
+			//try looking in the default 'xml' directory as a raw report root
+			//might have been specified
+			xmlFile = new File(getReportsRoot() + File.separator + "xml", "meta" + XML_EXTENSION); //$NON-NLS-1$//$NON-NLS-2$
+		}
+		return MissingRefMetadata.getMetadata(xmlFile);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#getIndexTitle()
+	 */
+	protected String getIndexTitle() {
+		return SearchMessages.MissingRefReportConverter_ReportTitle;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#writeMetadataHeaders(java.lang.StringBuffer)
+	 */
+	protected void writeMetadataHeaders(StringBuffer buffer) {
+		buffer.append("<meta name=\"").append("description").append("\" content=\"").append(SearchMessages.MissingRefReportConverter_IndexMetaTag).append("\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
+	}
+
+	/**
+	 * Parse the xml directories and report.xml and generate html for them
+	 */
+	protected List parse() throws Exception {
+		MissingRefParser parser = new MissingRefParser();
+		MissingRefVisitor visitor = new MissingRefVisitor();
+		parser.parse(getXmlLocation(), visitor);
+		return visitor.reports;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#getHtmlLocation()
+	 */
+	protected String getHtmlLocation() {
+		return this.htmlLocation;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#getXmlLocation()
+	 */
+	protected String getXmlLocation() {
+		return this.xmlLocation;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#getReportsRoot()
+	 */
+	protected File getReportsRoot() {
+		if (this.reportsRoot == null) {
+			this.reportsRoot = new File(getXmlLocation());
+		}
+		return this.reportsRoot;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseReportConverter#getReportIndex()
+	 */
+	public File getReportIndex() {
+		//TODO remove if
+		if (htmlIndex == null) {
+			return new File(htmlLocation);
+		}
+		else {
+			return htmlIndex;
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/ReferenceLookupVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/ReferenceLookupVisitor.java
index 9a5d66a..c5d99df 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/ReferenceLookupVisitor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/ReferenceLookupVisitor.java
@@ -36,6 +36,7 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiMember;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeRoot;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -66,6 +67,9 @@ public class ReferenceLookupVisitor extends UseScanVisitor {
 	private String analysisScope = null; // the bundles to analyze references from (search scope)
 	private String targetScope = null; // the bundles to analyze references to (target scope)
 	
+	private FilteredElements excludedElements = null; //List of elements excluded from the scope
+	private FilteredElements includedElements = null; //List of elements explicitly limiting the scope
+	
 	/**
 	 * Creates a visitor to resolve references in the given baseline
 	 * 
@@ -84,9 +88,19 @@ public class ReferenceLookupVisitor extends UseScanVisitor {
 		unresolved = new ArrayList();
 		targetComponent = target;
 		skipped = false;
-		if (targetScope == null || target.getId().matches(targetScope)) {
+		String id = targetComponent.getId();
+		if (includedElements != null && !includedElements.isEmpty() &&
+				!(includedElements.containsExactMatch(id) || includedElements.containsPartialMatch(id))) {
+			skipped = true;
+			return false;
+		}
+		if (excludedElements != null && (excludedElements.containsExactMatch(id) || excludedElements.containsPartialMatch(id))) {
+			skipped = true;
+			return false;
+		}
+		if (targetScope == null || id.matches(targetScope)) {
 			// only analyze if it matches our scope
-			currComponent = baseline.getApiComponent(targetComponent.getId());
+			currComponent = baseline.getApiComponent(id);
 			return true;			
 		}
 		skipped = true;
@@ -196,7 +210,7 @@ public class ReferenceLookupVisitor extends UseScanVisitor {
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#endVisit(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
 	 */
-	public void endVisit(IComponentDescriptor target) {
+	public void endVisitComponent(IComponentDescriptor target) {
 		if (skipped) {
 			skippedComponents.add(target);
 		} else {
@@ -277,5 +291,20 @@ public class ReferenceLookupVisitor extends UseScanVisitor {
 	public void setTargetScope(String regex) {
 		targetScope = regex;
 	}
+	
+	/**
+	 * @param excludedElements the list of elements excluded from the scope
+	 */
+	public void setExcludedElements(FilteredElements excludedElements) {
+		this.excludedElements = excludedElements;
+	}
+	
+	/**
+	 * @param includedElements Sets the List of elements explicitly limiting the scope
+	 */
+	public void setIncludedElements(FilteredElements includedElements) {
+		this.includedElements = includedElements;
+	}
+		
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/SearchMessages.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/SearchMessages.java
index dccaa68..4b06421 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/SearchMessages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/SearchMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,11 +29,20 @@ public class SearchMessages extends NLS {
 	public static String ApiSearchEngine_searching_for_use_from;
 	public static String ApiSearchEngine_searching_project;
 	public static String ApiSearchEngine_searching_projects;
+	public static String ConsumerReportConvertor_BackLinkToConsumer;
+	public static String ConsumerReportConvertor_ConsumerListHeader;
+	public static String ConsumerReportConvertor_ConsumerTitle;
+	public static String ConsumerReportConvertor_IndexTitle;
+	public static String ConsumerReportConvertor_ProducerListHeader;
+	public static String ConsumerReportConvertor_ProducerTitle;
+	public static String ConsumerReportConvertor_TypeListHeader;
 	public static String ioexception_writing_html_file;
+	public static String collecting_external_dependencies;
 	public static String could_not_create_sax_parser;
 	public static String could_not_create_file;
 	public static String missing_xml_files_location;
 	public static String invalid_directory_name;
+	public static String load_external_dependencies;
 	public static String MigrationReportConvertor_bundle_migration_information;
 	public static String MigrationReportConvertor_bundles_have_references;
 	public static String MigrationReportConvertor_click_table_entry;
@@ -43,6 +52,43 @@ public class SearchMessages extends NLS {
 	public static String MigrationReportConvertor_table_shows_unresolved;
 	public static String MigrationReportConvertor_type_migration_information;
 	public static String MigrationReportConvertor_type_with_unresolved_refs;
+	public static String MissingRefMetadata_CoreExceptionInParsing;
+	public static String MissingRefReportConverter_AddlBundleInfo;
+	public static String MissingRefReportConverter_ApiUseScanLocations;
+	public static String MissingRefReportConverter_BackToIndex;
+	public static String MissingRefReportConverter_Field;
+	public static String MissingRefReportConverter_IndexMetaTag;
+	public static String MissingRefReportConverter_MetadataTableTitle;
+	public static String MissingRefReportConverter_MetadataTitle;
+	public static String MissingRefReportConverter_Method;
+	public static String MissingRefReportConverter_NONE;
+	public static String MissingRefReportConverter_NotSearched;
+	public static String MissingRefReportConverter_ProblemDetails;
+	public static String MissingRefReportConverter_ProblemSummary;
+	public static String MissingRefReportConverter_ProblemSummaryTitle;
+	public static String MissingRefReportConverter_ProblemTable_ColumnMissingFields;
+	public static String MissingRefReportConverter_ProblemTable_ColumnMissingFieldsTooltip;
+	public static String MissingRefReportConverter_ProblemTable_ColumnMissingMethods;
+	public static String MissingRefReportConverter_ProblemTable_ColumnMissingMethodsTooltip;
+	public static String MissingRefReportConverter_ProblemTable_ColumnMissingTypes;
+	public static String MissingRefReportConverter_ProblemTable_ColumnMissingTypesTooltip;
+	public static String MissingRefReportConverter_ProblemTable_ColumnBundle;
+	public static String MissingRefReportConverter_ProblemTable_ColumnBundleTooltip;
+	public static String MissingRefReportConverter_ProblemTable_ColumnTotal;
+	public static String MissingRefReportConverter_ProblemTable_ColumnTotalTooltip;
+	public static String MissingRefReportConverter_ProblemTable_ColumnVersion;
+	public static String MissingRefReportConverter_ProblemTable_ColumnVersionTooltip;
+	public static String MissingRefReportConverter_ProblemTableHeader;
+	public static String MissingRefReportConverter_ProblemTitle;
+	public static String MissingRefReportConverter_ProblemTypes;
+	public static String MissingRefReportConverter_ProfileLocation;
+	public static String MissingRefReportConverter_ReportDate;
+	public static String MissingRefReportConverter_ReportLocation;
+	public static String MissingRefReportConverter_ReportTitle;
+	public static String MissingRefReportConverter_Summary;
+	public static String MissingRefReportConverter_SummaryDesc;
+	public static String MissingRefReportConverter_Type;
+	public static String no_use_scan_ref_problems;
 	public static String ReferenceLookupVisitor_0;
 	public static String SkippedComponent_component_was_excluded;
 	public static String UseReportConverter_xslt_file_not_valid;
@@ -116,7 +162,6 @@ public class SearchMessages extends NLS {
 	public static String UseReportConverter_required_bundles;
 	public static String UseReportConverter_root_index_description;
 	public static String UseReportConverter_summary;
-	public static String UseReportConverter_terminology;
 	public static String UseReportConverter_to_filter_patterns;
 	public static String UseReportConverter_types_used_in;
 	public static String UseReportConverter_usage_details;
@@ -124,6 +169,8 @@ public class SearchMessages extends NLS {
 	public static String UseReportConverter_version;
 	public static String UseReportConverter_version_column_description;
 	public static String UseReportConvertor_additional_infos_section;
+	public static String UseScanManager_InvalidArchive;
+	public static String UseScanManager_InvalidDir;
 	public static String UseScanParser_analyzing_references;
 	public static String UseScanParser_parsing;
 	static {
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseReportConverter.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseReportConverter.java
index b62c594..fa9bbae 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseReportConverter.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseReportConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.StringTokenizer;
 import java.util.TreeMap;
@@ -58,6 +59,7 @@ import org.eclipse.pde.api.tools.internal.provisional.descriptors.IFieldDescript
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.search.IMetadata;
 import org.eclipse.pde.api.tools.internal.util.Signatures;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.osgi.framework.Version;
@@ -119,9 +121,9 @@ public class UseReportConverter extends HTMLConvertor {
 			case IElementDescriptor.FIELD: {
 				return member.getEnclosingType();
 			}
+			}
+			return null;
 		}
-		return null;
-	}
 		
 		/* (non-Javadoc)
 		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
@@ -136,7 +138,7 @@ public class UseReportConverter extends HTMLConvertor {
 		/* (non-Javadoc)
 		 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#endVisit(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
 		 */
-		public void endVisit(IComponentDescriptor target) {
+		public void endVisitComponent(IComponentDescriptor target) {
 			try {
 				long start = 0;
 				if(DEBUG) {
@@ -623,13 +625,12 @@ public class UseReportConverter extends HTMLConvertor {
 	 */
 	protected static boolean DEBUG = Util.DEBUG;
 	
-	private File htmlRoot = null;
-	private File reportsRoot = null;
 	private String xmlLocation = null;
 	private String htmlLocation = null;
+	private File reportsRoot = null;
 	private File htmlIndex = null;
-	SAXParser parser = null;
 	private boolean hasmissing = false;
+	SAXParser parser = null;
 	private UseMetadata metadata = null;
 	Pattern[] topatterns = null;
 	Pattern[] frompatterns = null;
@@ -680,34 +681,53 @@ public class UseReportConverter extends HTMLConvertor {
 		}
 	}
 	
+	protected String getHtmlLocation(){
+		return this.htmlLocation;
+	}
+	
+	protected String getXmlLocation(){
+		return this.xmlLocation;
+	}
+	
+	protected File getReportsRoot(){
+		if (this.reportsRoot == null){
+			this.reportsRoot = new File(getXmlLocation());
+		}
+		return this.reportsRoot;
+	}
+	
+	protected boolean hasMissing(){
+		return this.hasmissing;
+	}
+	
 	/**
 	 * Runs the converter on the given locations
 	 */
 	public void convert(String xslt, IProgressMonitor monitor) throws Exception {
-		if (this.htmlLocation == null) {
+		if (getHtmlLocation() == null) {
 			return;
 		}
 		SubMonitor localmonitor = SubMonitor.convert(monitor, SearchMessages.UseReportConverter_preparing_report_metadata, 11);
 		try {
 			localmonitor.setTaskName(SearchMessages.UseReportConverter_preparing_html_root);
 			Util.updateMonitor(localmonitor, 1);
-			this.htmlRoot = new File(this.htmlLocation);
-			if (!this.htmlRoot.exists()) {
-				if (!this.htmlRoot.mkdirs()) {
-					throw new Exception(NLS.bind(SearchMessages.could_not_create_file, this.htmlLocation));
+			File htmlRoot = new File(getHtmlLocation());
+			if (!htmlRoot.exists()) {
+				if (!htmlRoot.mkdirs()) {
+					throw new Exception(NLS.bind(SearchMessages.could_not_create_file, getHtmlLocation()));
 				}
 			}
 			else {
-				this.htmlRoot.mkdirs();
+				htmlRoot.mkdirs();
 			}
 			localmonitor.setTaskName(SearchMessages.UseReportConverter_preparing_xml_root);
 			Util.updateMonitor(localmonitor, 1);
-			if (this.xmlLocation == null) {
+			if (getXmlLocation() == null) {
 				throw new Exception(SearchMessages.missing_xml_files_location);
 			}
-			this.reportsRoot = new File(this.xmlLocation);
-			if (!this.reportsRoot.exists() || !this.reportsRoot.isDirectory()) {
-				throw new Exception(NLS.bind(SearchMessages.invalid_directory_name, this.xmlLocation));
+			File reportsRoot = getReportsRoot();
+			if (!reportsRoot.exists() || !reportsRoot.isDirectory()) {
+				throw new Exception(NLS.bind(SearchMessages.invalid_directory_name, getXmlLocation()));
 			}
 			
 			localmonitor.setTaskName(SearchMessages.UseReportConverter_preparing_xslt_file);
@@ -725,8 +745,8 @@ public class UseReportConverter extends HTMLConvertor {
 				start = System.currentTimeMillis();
 			}
 			localmonitor.setTaskName(SearchMessages.UseReportConverter_writing_not_searched);
-			writeMissingBundlesPage(this.htmlRoot);
-			writeNotSearchedPage(this.htmlRoot);
+			this.hasmissing = writeMissingBundlesPage(htmlRoot);
+			writeNotSearchedPage(htmlRoot);
 			Util.updateMonitor(localmonitor, 1);
 			if(DEBUG) {
 				System.out.println("done in: "+(System.currentTimeMillis()-start)+ " ms"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -734,9 +754,7 @@ public class UseReportConverter extends HTMLConvertor {
 				start = System.currentTimeMillis();
 			}
 			localmonitor.setTaskName(SearchMessages.UseReportConverter_parsing_use_scan);
-			UseScanParser parser = new UseScanParser();
-			Visitor convertor = new Visitor();
-			parser.parse(xmlLocation, localmonitor.newChild(5), convertor);
+			List result = parse(localmonitor.newChild(5));
 			Util.updateMonitor(localmonitor, 1);
 			if(DEBUG) {
 				System.out.println("done in: "+(System.currentTimeMillis()-start)+ " ms"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -744,17 +762,12 @@ public class UseReportConverter extends HTMLConvertor {
 				start = System.currentTimeMillis();
 			}
 			localmonitor.setTaskName(SearchMessages.UseReportConverter_writing_root_index);
-			Collections.sort(convertor.reports, new Comparator() {
-				public int compare(Object o1, Object o2) {
-					return ((Report)o1).name.compareTo(((Report)o2).name);
-				}
-			});
-			writeIndexPage(convertor.reports, this.htmlRoot);
+			writeIndexPage(result);
 			Util.updateMonitor(localmonitor, 1);
 			if(DEBUG) {
 				System.out.println("done in: "+(System.currentTimeMillis()-start)+ " ms"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
-			writeMetaPage(this.htmlRoot);
+			writeMetaPage(htmlRoot);
 		}
 		finally {
 			if(localmonitor != null) {
@@ -763,6 +776,13 @@ public class UseReportConverter extends HTMLConvertor {
 		}
 	}
 	
+	protected List parse(IProgressMonitor monitor) throws Exception{
+		UseScanParser parser = new UseScanParser();
+		Visitor convertor = new Visitor();
+		parser.parse(getXmlLocation(), monitor, convertor);
+		return convertor.reports;
+	}
+	
 	/**
 	 * Returns the handle to the default parser, caches the handle once it has been created
 	 * @return the handle to the default parser
@@ -787,13 +807,17 @@ public class UseReportConverter extends HTMLConvertor {
 	
 	/**
 	 * Builds the name for the component
-	 * @param id
-	 * @param version
-	 * @return
+	 * @param id id of the component
+	 * @param version version of the component, can be <code>null</code>
+	 * @return string name
 	 */
 	protected String composeName(String id, String version) {
-		StringBuffer buffer = new StringBuffer(3+id.length()+version.length());
-		buffer.append(id).append(" (").append(version).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
+		String versionName = version;
+		if (version == null){
+			versionName = Version.emptyVersion.toString();
+		}
+		StringBuffer buffer = new StringBuffer(3+id.length()+versionName.length());
+		buffer.append(id).append(" (").append(versionName).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
 		return buffer.toString();
 	}
 	
@@ -805,6 +829,10 @@ public class UseReportConverter extends HTMLConvertor {
 		return htmlIndex;
 	}
 	
+	protected void setReportIndex(File index){
+		htmlIndex = index;
+	}
+	
 	/**
 	 * Applies the given XSLT to the given XML to produce HTML in the given file
 	 * @param xsltfile
@@ -854,7 +882,7 @@ public class UseReportConverter extends HTMLConvertor {
 		File html = null;
 		for (int i = 0; i < xmlfiles.length; i++) {
 			try {
-				File htmlroot = new File(this.htmlLocation, getHTMLFileLocation(this.reportsRoot, xmlfiles[i]));
+				File htmlroot = new File(getHtmlLocation(), getHTMLFileLocation(xmlfiles[i]));
 				if(!htmlroot.exists()) {
 					htmlroot.mkdirs();
 				}
@@ -874,9 +902,10 @@ public class UseReportConverter extends HTMLConvertor {
 	 * @param xmlfile
 	 * @return
 	 */
-	protected String getHTMLFileLocation(File reportroot, File xmlfile) {
+	protected String getHTMLFileLocation(File xmlfile) {
+		File reportRoot = new File(getXmlLocation());
 		IPath xml = new Path(xmlfile.getPath());
-		IPath report = new Path(reportroot.getPath());
+		IPath report = new Path(reportRoot.getPath());
 		int segments = xml.matchingFirstSegments(report);
 		if(segments > 0) {
 			if(xml.getDevice() != null) {
@@ -898,8 +927,8 @@ public class UseReportConverter extends HTMLConvertor {
 		String fileName = xmlFile.getAbsolutePath();
 		int index = fileName.lastIndexOf('.');
 		StringBuffer buffer = new StringBuffer();
-		buffer.append(fileName.substring(this.reportsRoot.getAbsolutePath().length(), index)).append(HTML_EXTENSION); 
-		File htmlFile = new File(this.htmlLocation, String.valueOf(buffer));
+		buffer.append(fileName.substring(getReportsRoot().getAbsolutePath().length(), index)).append(HTML_EXTENSION); 
+		File htmlFile = new File(getHtmlLocation(), String.valueOf(buffer));
 		return htmlFile.getAbsolutePath();
 	}
 	
@@ -933,7 +962,7 @@ public class UseReportConverter extends HTMLConvertor {
 		File meta = null;
 		PrintWriter writer = null;
 		try {
-			File file = new File(this.reportsRoot, "meta.xml"); //$NON-NLS-1$
+			File file = new File(getReportsRoot(), "meta.xml"); //$NON-NLS-1$
 			if(!file.exists()) {
 				//do nothing if no meta.xml file
 				return;
@@ -971,8 +1000,10 @@ public class UseReportConverter extends HTMLConvertor {
 	/**
 	 * Writes out a summary of the missing required bundles
 	 * @param htmlroot
+	 * @return <code>true</code> if there was at least one missing bundle
 	 */
-	protected void writeMissingBundlesPage(final File htmlroot) throws Exception {
+	protected boolean writeMissingBundlesPage(final File htmlroot) throws Exception {
+		boolean hasMissing = false;
 		File missing = null;
 		PrintWriter writer = null;
 		try {
@@ -982,15 +1013,15 @@ public class UseReportConverter extends HTMLConvertor {
 				missing.createNewFile();
 			}
 			
-			File file = new File(this.reportsRoot, "not_searched.xml"); //$NON-NLS-1$
+			File file = new File(getReportsRoot(), "not_searched.xml"); //$NON-NLS-1$
 			if(!file.exists()) {
 				//try <root>/xml in case a raw reports root was specified
-				file = new File(this.reportsRoot+File.separator+"xml", "not_searched.xml"); //$NON-NLS-1$ //$NON-NLS-2$
+				file = new File(getReportsRoot()+File.separator+"xml", "not_searched.xml"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 			TreeSet sorted = new TreeSet(Util.componentsorter);
 			if (file.exists()) {
 				String[] missingBundles = getMissingBundles(file); 
-				this.hasmissing = missingBundles.length > 0;
+				hasMissing = missingBundles.length > 0;
 				for (int i = 0; i < missingBundles.length; i++) {
 					sorted.add(missingBundles[i]);
 				}
@@ -1033,6 +1064,7 @@ public class UseReportConverter extends HTMLConvertor {
 				writer.close();
 			}
 		}
+		return hasMissing;
 	}
 	
 	/**
@@ -1049,10 +1081,10 @@ public class UseReportConverter extends HTMLConvertor {
 			if(!originhtml.exists()) {
 				originhtml.createNewFile();
 			}
-			File xml = new File(this.reportsRoot, filename+XML_EXTENSION); 
+			File xml = new File(getReportsRoot(), filename+XML_EXTENSION); 
 			if(!xml.exists()) {
 				//try <root>/xml in case a raw report root is specified
-				xml = new File(this.reportsRoot+File.separator+"xml", filename+XML_EXTENSION); //$NON-NLS-1$
+				xml = new File(getReportsRoot()+File.separator+"xml", filename+XML_EXTENSION); //$NON-NLS-1$
 			}
 			InputStream defaultXsltInputStream = UseReportConverter.class.getResourceAsStream(getNotSearchedXSLPath()); 
 			Source xslt = null;
@@ -1095,7 +1127,7 @@ public class UseReportConverter extends HTMLConvertor {
 		PrintWriter writer = null;
 		File originhtml = null;
 		try {
-			File htmlroot = new File(this.htmlLocation, report.name);
+			File htmlroot = new File(getHtmlLocation(), report.name);
 			if(!htmlroot.exists()) {
 				htmlroot.mkdirs();
 			}
@@ -1111,13 +1143,13 @@ public class UseReportConverter extends HTMLConvertor {
 			buffer.append(OPEN_TITLE).append(getReferencedTypeTitle(report.name)).append(CLOSE_TITLE); 
 			buffer.append(CLOSE_HEAD); 
 			buffer.append(OPEN_BODY); 
-			buffer.append(OPEN_H3).append(getReferencedTypeHeader(report.name)).append(CLOSE_H3);
+			buffer.append(OPEN_H3).append(getReferencedTypeTitle(report.name)).append(CLOSE_H3);
 			buffer.append(OPEN_P).append(NLS.bind(SearchMessages.UseReportConverter_list_of_all_refing_bundles, new String[] {"<a href=\"#bundles\">", "</a>"})).append(CLOSE_P); //$NON-NLS-1$ //$NON-NLS-2$
 			String additional = getAdditionalReferencedTypeInformation();
 			if(additional != null) {
 				buffer.append(additional);
 			}
-			buffer.append(getReferencesTableHeader(SearchMessages.UseReportConverter_referenced_type, false));
+			buffer.append(getReferencesTableHeader(SearchMessages.UseReportConverter_references, SearchMessages.UseReportConverter_referenced_type, false));
 			CountGroup counts = null;
 			String link = null;
 			Entry entry = null;
@@ -1213,16 +1245,6 @@ public class UseReportConverter extends HTMLConvertor {
 	}
 	
 	/**
-	 * Returns the header title to use for the reference types page. This header
-	 * is the first header on the top of the page.
-	 * @param bundle
-	 * @return the header title for the referenced types page
-	 */
-	protected String getReferencedTypeHeader(String bundle) {
-		return NLS.bind(SearchMessages.UseReportConverter_types_used_in, bundle);
-	}
-	
-	/**
 	 * Writes the page that displays all of the members used in a type
 	 * @param map
 	 * @param type
@@ -1230,7 +1252,7 @@ public class UseReportConverter extends HTMLConvertor {
 	 * @param typename
 	 * @throws Exception
 	 */
-	void writeTypePage(TreeMap map, Type type, File typefile, String typename) throws Exception {
+	void writeTypePage(Map map, Type type, File typefile, String typename) throws Exception {
 		PrintWriter writer = null;
 		try {
 			StringBuffer buffer = new StringBuffer();
@@ -1241,7 +1263,7 @@ public class UseReportConverter extends HTMLConvertor {
 			buffer.append(OPEN_TITLE).append(getTypeTitle(typename)).append(CLOSE_TITLE); 
 			buffer.append(CLOSE_HEAD); 
 			buffer.append(OPEN_BODY); 
-			buffer.append(OPEN_H3).append(getTypeHeader(typename)).append(CLOSE_H3); 
+			buffer.append(OPEN_H3).append(getTypeTitle(typename)).append(CLOSE_H3); 
 			buffer.append(getTypeCountSummary(typename, type.counts, map.size()));
 			buffer.append(OPEN_H4).append(getTypeDetailsHeader()).append(CLOSE_H4); 
 			buffer.append(OPEN_P).append(getTypeDetails()).append(CLOSE_P); 
@@ -1316,15 +1338,6 @@ public class UseReportConverter extends HTMLConvertor {
 	}
 	
 	/**
-	 * Returns the header to use for the types page. This is the first header on the page
-	 * @param typename
-	 * @return the type page header
-	 */
-	protected String getTypeHeader(String typename) {
-		return NLS.bind(SearchMessages.UseReportConverter_usage_details, Signature.getSimpleName(typename));
-	}
-	
-	/**
 	 * Returns the nested table of references
 	 * @return the nested table of references as a string
 	 */
@@ -1435,24 +1448,25 @@ public class UseReportConverter extends HTMLConvertor {
 	}
 	
 	/**
-	 * Returns the main header for the index page, this header appears as the first header for the page
-	 * @return the index page header
-	 */
-	protected String getIndexHeader() {
-		return SearchMessages.UseReportConverter_bundle_usage_information;
-	}
-	
-	/**
 	 * Writes the main index file for the reports
-	 * @param reportsRoot
+	 * @param scanResult a list of {@link Report} objects returns from the use scan parser
+	 * @param reportsRoot 
 	 */
-	void writeIndexPage(List sortedreports, File reportsRoot) throws Exception {
+	void writeIndexPage(List scanResult) throws Exception {
+		Collections.sort(scanResult, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				return ((Report)o1).name.compareTo(((Report)o2).name);
+			}
+		});
+		
 		PrintWriter writer = null;
 		try {
-			htmlIndex = new File(this.htmlLocation, "index.html"); //$NON-NLS-1$
-			if(!htmlIndex.exists()) {
-				htmlIndex.createNewFile();
+			File reportIndex = new File(getHtmlLocation(), "index.html"); //$NON-NLS-1$
+			if(!reportIndex.exists()) {
+				reportIndex.createNewFile();
 			}
+			setReportIndex(reportIndex);
+			
 			StringBuffer buffer = new StringBuffer();
 			buffer.append(HTML_HEADER);
 			buffer.append(OPEN_HTML).append(OPEN_HEAD).append(CONTENT_TYPE_META);
@@ -1460,7 +1474,7 @@ public class UseReportConverter extends HTMLConvertor {
 			buffer.append(OPEN_TITLE).append(getIndexTitle()).append(CLOSE_TITLE); 
 			buffer.append(CLOSE_HEAD); 
 			buffer.append(OPEN_BODY); 
-			buffer.append(OPEN_H3).append(getIndexHeader()).append(CLOSE_H3);
+			buffer.append(OPEN_H3).append(getIndexTitle()).append(CLOSE_H3);
 			try {
 				getMetadata();
 				writeMetadataSummary(buffer);
@@ -1469,7 +1483,7 @@ public class UseReportConverter extends HTMLConvertor {
 				//do nothing, failed meta-data should not prevent the index from being written
 			}
 			buffer.append(OPEN_H4).append(SearchMessages.UseReportConvertor_additional_infos_section).append(CLOSE_H4); 
-			if(this.hasmissing) {
+			if(hasMissing()) {
 				buffer.append(OPEN_P); 
 				buffer.append(NLS.bind(SearchMessages.UseReportConverter_missing_bundles_prevented_scan, 
 						new String[] {" <a href=\"./missing.html\">", "</a>"})); //$NON-NLS-1$ //$NON-NLS-2$
@@ -1477,23 +1491,23 @@ public class UseReportConverter extends HTMLConvertor {
 			}
 			buffer.append(OPEN_P); 
 			buffer.append(NLS.bind(SearchMessages.UseReportConverter_bundles_that_were_not_searched, new String[] {"<a href=\"./not_searched.html\">", "</a></p>\n"}));  //$NON-NLS-1$//$NON-NLS-2$
-			String additional = getAdditionalIndexInfo(sortedreports.size() > 0);
+			String additional = getAdditionalIndexInfo(scanResult.size() > 0);
 			if(additional != null) {
 				buffer.append(additional);
 			}
-			if(sortedreports.size() > 0) {
+			if(scanResult.size() > 0) {
 				buffer.append(OPEN_P).append(SearchMessages.UseReportConverter_inlined_description).append(CLOSE_P);
 				buffer.append(getColourLegend());
-				buffer.append(getReferencesTableHeader(SearchMessages.UseReportConverter_bundle, true));
-				if(sortedreports.size() > 0) {
+				buffer.append(getReferencesTableHeader(SearchMessages.UseReportConverter_references, SearchMessages.UseReportConverter_bundle, true));
+				if(scanResult.size() > 0) {
 					Report report = null;
 					File refereehtml = null;
 					String link = null;
-					for(Iterator iter = sortedreports.iterator(); iter.hasNext();) {
+					for(Iterator iter = scanResult.iterator(); iter.hasNext();) {
 						report = (Report) iter.next();
 						if(report != null) {
-							refereehtml = new File(this.reportsRoot, report.name+File.separator+"index.html"); //$NON-NLS-1$
-							link = extractLinkFrom(this.reportsRoot, refereehtml.getAbsolutePath());
+							refereehtml = new File(getReportsRoot(), report.name+File.separator+"index.html"); //$NON-NLS-1$
+							link = extractLinkFrom(getReportsRoot(), refereehtml.getAbsolutePath());
 							buffer.append(getReferenceTableEntry(report.counts, link, report.name, true));
 						}
 					}
@@ -1507,11 +1521,11 @@ public class UseReportConverter extends HTMLConvertor {
 			buffer.append(CLOSE_BODY).append(CLOSE_HTML);  
 			
 			//write the file
-			writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(htmlIndex), IApiCoreConstants.UTF_8));
+			writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(reportIndex), IApiCoreConstants.UTF_8));
 			writer.print(buffer.toString());
 			writer.flush();
 		} catch (IOException e) {
-			throw new Exception(NLS.bind(SearchMessages.ioexception_writing_html_file, htmlIndex.getAbsolutePath()));
+			throw new Exception(NLS.bind(SearchMessages.ioexception_writing_html_file, getReportIndex().getAbsolutePath()));
 		} finally {
 			if (writer != null) {
 				writer.close();
@@ -1613,7 +1627,6 @@ public class UseReportConverter extends HTMLConvertor {
 			buffer.append(openTD(36)); 
 			String[] patterns = this.metadata.getApiPatterns();
 			if(patterns != null) {
-				buffer.append(this.metadata.getApiPatterns());
 				for (int i = 0; i < patterns.length; i++) {
 					buffer.append(patterns[i]).append(BR);
 				}
@@ -1690,15 +1703,15 @@ public class UseReportConverter extends HTMLConvertor {
 	 * @return
 	 * @throws Exception
 	 */
-	UseMetadata getMetadata() throws Exception {
+	IMetadata getMetadata() throws Exception {
 		if(this.metadata == null) {
 			File xml = null;
 			try {
-				xml = new File(this.reportsRoot, "meta"+XML_EXTENSION);  //$NON-NLS-1$
+				xml = new File(getReportsRoot(), "meta"+XML_EXTENSION);  //$NON-NLS-1$
 				if(!xml.exists()) {
 					//try looking in the default 'xml' directory as a raw report root
 					//might have been specified
-					xml = new File(this.reportsRoot+File.separator+"xml", "meta"+XML_EXTENSION);  //$NON-NLS-1$//$NON-NLS-2$
+					xml = new File(getReportsRoot()+File.separator+"xml", "meta"+XML_EXTENSION);  //$NON-NLS-1$//$NON-NLS-2$
 				}
 				if(xml.exists()) {
 					String xmlstr = Util.getFileContentAsString(xml);
@@ -1801,9 +1814,9 @@ public class UseReportConverter extends HTMLConvertor {
 	 * @param includeversion
 	 * @return the default references table header
 	 */
-	String getReferencesTableHeader(String columnname, boolean includeversion) {
+	String getReferencesTableHeader(String sectionname, String columnname, boolean includeversion) {
 		StringBuffer buffer = new StringBuffer();
-		buffer.append(OPEN_H4).append(SearchMessages.UseReportConverter_references).append(CLOSE_H4);
+		buffer.append(OPEN_H4).append(sectionname).append(CLOSE_H4);
 		buffer.append("<table border=\"1\" width=\"80%\">\n"); //$NON-NLS-1$
 		buffer.append(OPEN_TR); 
 		buffer.append("\t<td bgcolor=\"").append(REFERENCES_TABLE_HEADER_COLOUR).append("\" width=\"30%\">").append(OPEN_B).append(columnname).append(CLOSE_B).append(CLOSE_TD); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanManager.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanManager.java
new file mode 100644
index 0000000..666e52e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanManager.java
@@ -0,0 +1,395 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.jar.JarFile;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SubMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.core.variables.IStringVariableManager;
+import org.eclipse.core.variables.VariablesPlugin;
+import org.eclipse.jdt.internal.core.OverflowingLRUCache;
+import org.eclipse.jdt.internal.core.util.LRUCache;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
+import org.eclipse.pde.api.tools.internal.util.FileManager;
+import org.eclipse.pde.api.tools.internal.util.Util;
+
+public class UseScanManager {
+
+	private static UseScanCache fApiComponentCache;
+	private static UseScanManager fUseScanProcessor;
+	private static String tempLocation = "${workspace_loc}/.metadata/.plugins/" + ApiPlugin.PLUGIN_ID + "/ApiUseScans/"; //$NON-NLS-1$ //$NON-NLS-2$
+
+	public static final String STATE_DELIM = "*"; //$NON-NLS-1$
+	public static final String LOCATION_DELIM = "|"; //$NON-NLS-1$
+	public static final String ESCAPE_REGEX = "\\"; //$NON-NLS-1$
+	/**
+	 * Regular expression for finding use scan directories
+	 * <br><br>
+	 * Value is: <code>^.* \\(.*\\)$</code>
+	 */
+	public static final Pattern NAME_REGEX = Pattern.compile("^.* \\(.*\\)$"); //$NON-NLS-1$
+	/**
+	 * Number of entries to cache in the {@link UseScanCache}
+	 */
+	public static final int DEFAULT_CACHE_SIZE = 1000;
+	
+	/**
+	 * Cache to maintain the list of least recently used <code>UseScanReferences</code>
+	 */
+	private static class UseScanCache extends OverflowingLRUCache {
+
+		public UseScanCache(int size) {
+			super(size);
+		}
+
+		public UseScanCache(int size, int overflow) {
+			super(size, overflow);
+		}
+
+		protected boolean close(LRUCacheEntry entry) {
+			IReferenceCollection references = (IReferenceCollection) entry.value;
+			references.clear();
+			return true;
+		}
+
+		protected LRUCache newInstance(int size, int newOverflow) {
+			return new UseScanCache(size, newOverflow);
+		}
+
+	}
+
+	private String[] fLocations = null;
+
+	/**
+	 * {@link FileFilter} for finding use scan directories
+	 */
+	static FileFilter USESCAN_FILTER = new FileFilter() {
+		public boolean accept(File pathname) {
+			if(NAME_REGEX.matcher(pathname.getName()).matches()) {
+				throw new RuntimeException(pathname.getName());
+			}
+			return false;
+		}
+	};
+	
+	//Singleton
+	private UseScanManager() {
+	}
+
+	/**
+	 * Returns a handle to the singleton instance
+	 * 
+	 * @return the singleton {@link UseScanManager}
+	 */
+	public synchronized static UseScanManager getInstance() {
+		if (fUseScanProcessor == null) {
+			fUseScanProcessor = new UseScanManager();
+			fApiComponentCache = new UseScanCache(DEFAULT_CACHE_SIZE);
+		}
+		return fUseScanProcessor;
+	}
+
+	/**
+	 * Returns the references for a given <code>IApiComponent</code>. If it can not find them in cache, they will be fetched from the 
+	 * API Use Scans and stored.
+	 * @param apiComponent component whose references have to be fetched
+	 * @param refTypes reference types for which the references has to be computed in the  given <code>IApiComponent</code>. 
+	 * If <code>null</code> or empty, all references will be returned
+	 * @param monitor
+	 * @return the array of reference descriptors
+	 */
+	public IReferenceDescriptor[] getExternalDependenciesFor(IApiComponent apiComponent, String[] apiUseTypes, IProgressMonitor monitor) {
+		IReferenceCollection references = (IReferenceCollection) fApiComponentCache.get(apiComponent);
+		if (references == null) {
+			references = apiComponent.getExternalDependencies();
+		}
+		SubMonitor localmonitor = SubMonitor.convert(monitor, SearchMessages.collecting_external_dependencies, 10);
+		try {
+			ArrayList unavailableMembers = new ArrayList();
+			if (apiUseTypes != null && apiUseTypes.length > 0) {
+				for (int i = 0; i < apiUseTypes.length; i++) {
+					if (!references.hasReferencesTo(apiUseTypes[i])) {
+						unavailableMembers.add(apiUseTypes[i]);
+					}
+				}
+				if (unavailableMembers.size() > 0) {
+					fetch(apiComponent, (String[]) unavailableMembers.toArray(new String[unavailableMembers.size()]), references, monitor);
+				}
+				Util.updateMonitor(localmonitor, 1);
+				return references.getExternalDependenciesTo(apiUseTypes);
+			} else {
+				fetch(apiComponent, null, references, localmonitor.newChild(8)); // full build has been triggered so re-fetch
+				Util.updateMonitor(localmonitor, 1);
+				return references.getAllExternalDependencies();
+			}
+		}
+		finally {
+			localmonitor.done();
+		}
+	}
+
+	/**
+	 * fetches the references from the API Use Scan locations
+	 * @param apiComponent
+	 * @param member
+	 * @param references
+	 * @param monitor
+	 */
+	private void fetch(IApiComponent apiComponent, String[] types, IReferenceCollection references, IProgressMonitor monitor) {
+		UseScanParser parser = new UseScanParser();
+		UseScanReferenceVisitor visitor = new UseScanReferenceVisitor(apiComponent, types, references);
+		SubMonitor localmonitor = SubMonitor.convert(monitor, SearchMessages.load_external_dependencies, 10);
+		try {
+			String[] locations;
+			if (fLocations == null) {
+				locations = getReportLocations();
+			}
+			else {
+				locations = fLocations;
+			}
+			if (locations != null) {
+				IStringVariableManager stringManager = null;
+				localmonitor.setWorkRemaining(locations.length * 2);
+				for (int i = 0; i < locations.length; i++) {
+					Util.updateMonitor(localmonitor, 1);
+					File file = new File(locations[i]);
+					if (!file.exists()) {
+						continue;
+					}
+					if (file.isFile()) {
+						if (Util.isArchive(file.getName())) {
+							String destDirPath = tempLocation + file.getName() + '.' + file.getAbsolutePath().hashCode();
+							if (stringManager == null) {
+								stringManager = VariablesPlugin.getDefault().getStringVariableManager();
+							}
+							destDirPath = stringManager.performStringSubstitution(destDirPath);
+							locations[i] = destDirPath + '/' + file.lastModified();
+							File unzipDirLoc = new File(destDirPath);
+							if (unzipDirLoc.exists()) {
+								String[] childDirs = unzipDirLoc.list();
+								for (int j = 0; j < childDirs.length; j++) {
+									if (!childDirs[j].equals(String.valueOf(file.lastModified()))) {
+										FileManager.getManager().recordTempFileRoot(destDirPath + '/' + childDirs[j]);
+									}
+								}
+							} else {
+								Util.unzip(file.getPath(), locations[i]);
+							}							
+						} else {
+							continue;
+						}
+					}
+					try {
+						locations[i] = getExactScanLocation(locations[i]);
+						if (locations[i] == null) {
+							String message;
+							if (file.isDirectory()) {
+								message = NLS.bind(SearchMessages.UseScanManager_InvalidDir, file.getAbsolutePath());
+							} else {
+								message = NLS.bind(SearchMessages.UseScanManager_InvalidArchive, file.getAbsolutePath());
+							}
+							throw new Exception(message);
+						}
+						parser.parse(locations[i], localmonitor.newChild(2), visitor);
+						Util.updateMonitor(localmonitor);
+					} catch (Exception e) {
+						ApiPlugin.log(e); // log the exception and continue with next location
+					}
+				}
+				fApiComponentCache.remove(apiComponent); // remove current value so that it only doesn't gets purged if size limit is reached
+				fApiComponentCache.put(apiComponent, references);
+			}
+		} catch (Exception e) {
+			ApiPlugin.log(e);
+		}
+		finally {
+			localmonitor.done();
+		}
+	}
+
+	/**
+	 * Returns the scan 
+	 * @param location
+	 * @return
+	 */
+	public static String getExactScanLocation(String location) {
+		File file = new File(location);
+		if (isValidDirectory(file)) {
+			return location;
+		}
+		file = new File(location, IApiCoreConstants.XML);
+		if (isValidDirectory(file)) {
+			return file.getAbsolutePath();
+		}
+		return null;
+	}
+	
+	/**
+	 * Validate if the given {@link File} is a folder that contains a use scan.
+	 * <br><br> 
+	 * The {@link File} is considered valid iff:
+	 * <ul>
+	 * <li>it is a folder</li>
+	 * <li>the folder has child folder that matches the name pattern <code>^.* (.*)$</code></li>
+	 * <li>the previous child directory has its own child directory that matches the name pattern <code>^.* (.*)$</code></li>
+	 * </ul>
+	 * @param file
+	 * @return <code>true</code> is the sub folders match the patterns, <code>false</code> otherwise
+	 */
+	public static boolean isValidDirectory(File file) {
+		if(file.exists() && file.isDirectory()) {
+			try {
+				file.listFiles(USESCAN_FILTER);
+			}
+			catch(RuntimeException rte) {
+				File f = new File(file, rte.getMessage());
+				try {
+					if(f.exists() && f.isDirectory()) {
+						f.listFiles(USESCAN_FILTER);
+					}
+				}
+				catch(RuntimeException re) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Validate if the given {@link File} is an archive that contains a use scan.
+	 * <br><br> 
+	 * The {@link File} is considered valid iff:
+	 * <ul>
+	 * <li>it has an XML folder</li>
+	 * <li>the XML folder has child folder that matches the name pattern <code>{@link #NAME_REGEX}</code></li>
+	 * <li>the previous child directory has its own child directory that matches the name pattern <code>{@link #NAME_REGEX}</code></li>
+	 * </ul>
+	 * @param file
+	 * @return <code>true</code> is the sub folders match the patterns, <code>false</code> otherwise
+	 */
+	public static boolean isValidArchive(File file) {
+		String fname = file.getName().toLowerCase();
+		if(file.exists() && Util.isArchive(fname)) {
+			Enumeration entries = null;
+			if(fname.endsWith(Util.DOT_JAR)) {
+				try {
+					JarFile jfile = new JarFile(file);
+					entries = jfile.entries();
+				}
+				catch(IOException ioe) {
+					return false;
+				}
+			}
+			else if(fname.endsWith(Util.DOT_ZIP)) {
+				try {
+					ZipFile zfile = new ZipFile(file);
+					entries = zfile.entries();
+				} catch (IOException e) {
+					return false;
+				}
+			}
+			if(entries != null) {
+				while(entries.hasMoreElements()) {
+					ZipEntry o = (ZipEntry) entries.nextElement();
+					if(o.isDirectory()) {
+						IPath path = new Path(o.getName());
+						int count = path.segmentCount();
+						if(count > 2) {
+							return NAME_REGEX.matcher(path.segment(0)).matches() || NAME_REGEX.matcher(path.segment(1)).matches();
+						}
+					}
+				}
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * Returns if the scan if a valid API use scan
+	 * @param location
+	 * @return true if the scan is valid false otherwise
+	 */
+	public static boolean isValidScanLocation(String location) {
+		if (location != null && location.length() > 0) {
+			IPath path = new Path(location);		
+			File file = path.toFile();
+			return isValidDirectory(file) || isValidArchive(file);
+		}
+		return false;
+	}
+	
+	/**
+	 * Returns the report locations from the preferences
+	 * @return
+	 */
+	public String[] getReportLocations() {
+		IEclipsePreferences node = InstanceScope.INSTANCE.getNode(ApiPlugin.PLUGIN_ID);
+		String apiUseScanPaths = node.get(IApiCoreConstants.API_USE_SCAN_LOCATION, null);
+		if (apiUseScanPaths == null || apiUseScanPaths.length() == 0) {
+			return new String[0];
+		}
+		
+		String[] locations = apiUseScanPaths.split(ESCAPE_REGEX + LOCATION_DELIM);
+		ArrayList locationList = new ArrayList(locations.length);
+		for (int i = 0; i < locations.length; i++) {
+			String values[] = locations[i].split(ESCAPE_REGEX + STATE_DELIM);
+			if (Boolean.valueOf(values[1]).booleanValue())
+				locationList.add(values[0]);
+		}
+		return (String[]) locationList.toArray(new String[locationList.size()]);
+	}
+
+	/**
+	 * Sets the report locations to be used. Once set, these locations will be used instead of ones in the preference.
+	 * When set to <code>null</code>, the locations in preference will be used.
+	 * @param locations
+	 */
+	public void setReportLocations(String[] locations) {
+		fLocations = locations;
+	}
+
+	/**
+	 * Sets the cache size
+	 * @param size The total number of references that can be held in memory
+	 */
+	public void setCacheSize(int size) {
+		fApiComponentCache.setSpaceLimit(size);
+	}
+
+	/**
+	 * Purges all reference information
+	 */
+	public void clearCache() {
+		Enumeration elementss = fApiComponentCache.elements();
+		while (elementss.hasMoreElements()) {
+			IReferenceCollection reference = (IReferenceCollection) elementss.nextElement();
+			reference.clear();
+		}
+		fApiComponentCache.flush();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanParser.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanParser.java
index 3fa1c4e..d9644ea 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanParser.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,7 +78,7 @@ public class UseScanParser {
 			
 	}
 	
-	private String[] getIdVersion(String value) {
+	protected String[] getIdVersion(String value) {
 		int index = value.indexOf(' ');
 		if (index > 0) {
 			String id = value.substring(0, index);
@@ -106,12 +106,22 @@ public class UseScanParser {
 	 */
 	protected void processElement(String uri, String localName, String name, Attributes attributes, int type) throws SAXException {
 		if (IApiXmlConstants.REFERENCES.equals(name)) {
+			// Check that the current target component and referencing component match what is in the file
 			String target = attributes.getValue(IApiXmlConstants.ATTR_REFEREE);
-			String source = attributes.getValue(IApiXmlConstants.ATTR_ORIGIN);
 			String[] idv = getIdVersion(target);
-			enterTargetComponent(Factory.componentDescriptor(idv[0], idv[1]));
+			IComponentDescriptor targetComponent = Factory.componentDescriptor(idv[0], idv[1]);
+			if (!targetComponent.equals(this.targetComponent)){
+				System.out.println("WARNING: The referee in the xml file (" + targetComponent + ") does not match the directory name (" + this.targetComponent + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			
+			String source = attributes.getValue(IApiXmlConstants.ATTR_ORIGIN);
 			idv = getIdVersion(source);
-			enterReferencingComponent(Factory.componentDescriptor(idv[0], idv[1]));
+			IComponentDescriptor sourceComponent = Factory.componentDescriptor(idv[0], idv[1]);
+			if (!sourceComponent.equals(this.referencingComponent)){
+				System.out.println("WARNING: The origin in the xml file (" + sourceComponent + ") does not match the directory name (" + this.referencingComponent + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			
+			// Track the current reference visibility
 			String visString = attributes.getValue(IApiXmlConstants.ATTR_REFERENCE_VISIBILITY);
 			try {
 				int vis = Integer.parseInt(visString);
@@ -150,37 +160,43 @@ public class UseScanParser {
 			}
 		} else if (IApiXmlConstants.ATTR_REFERENCE.equals(name)) {
 			String qName = attributes.getValue(IApiXmlConstants.ATTR_TYPE);
-			String memberName = attributes.getValue(IApiXmlConstants.ATTR_MEMBER_NAME);
-			String signature = attributes.getValue(IApiXmlConstants.ATTR_SIGNATURE);
-			IMemberDescriptor origin = null;
-			if (signature != null) {
-				origin = Factory.methodDescriptor(qName, memberName, signature);
-			} else if (memberName != null) {
-				origin = Factory.fieldDescriptor(qName, memberName);
-			} else {
-				origin = Factory.typeDescriptor(qName);
-			}
-			String line = attributes.getValue(IApiXmlConstants.ATTR_LINE_NUMBER);
-			String flags = attributes.getValue(IApiXmlConstants.ATTR_FLAGS);
-			try {
-				int num = Integer.parseInt(line);
-				int flgs = 0;
-				if(flags != null) {
-					flgs = Integer.parseInt(flags);
+
+			if (qName != null){
+
+				String memberName = attributes.getValue(IApiXmlConstants.ATTR_MEMBER_NAME);
+				String signature = attributes.getValue(IApiXmlConstants.ATTR_SIGNATURE);
+				IMemberDescriptor origin = null;
+				if (signature != null) {
+					origin = Factory.methodDescriptor(qName, memberName, signature);
+				} else if (memberName != null) {
+					origin = Factory.fieldDescriptor(qName, memberName);
+				} else {
+					origin = Factory.typeDescriptor(qName);
 				}
-				setReference(Factory.referenceDescriptor(
-						referencingComponent, 
-						origin, 
-						num, 
-						targetComponent, 
-						targetMember, 
-						referenceKind, 
-						flgs, 
-						visibility, 
-						parseMessages(attributes)));
-			} catch (NumberFormatException e) {
-				// TODO:
-				System.out.println("Internal error: invalid line number: " + line); //$NON-NLS-1$
+				String line = attributes.getValue(IApiXmlConstants.ATTR_LINE_NUMBER);
+				String flags = attributes.getValue(IApiXmlConstants.ATTR_FLAGS);
+				try {
+					int num = Integer.parseInt(line);
+					int flgs = 0;
+					if(flags != null) {
+						flgs = Integer.parseInt(flags);
+					}
+					setReference(Factory.referenceDescriptor(
+							referencingComponent, 
+							origin, 
+							num, 
+							targetComponent, 
+							targetMember, 
+							referenceKind, 
+							flgs, 
+							visibility, 
+							parseMessages(attributes)));
+				} catch (NumberFormatException e) {
+					// TODO:
+					System.out.println("Internal error: invalid line number: " + line); //$NON-NLS-1$
+				}
+			} else {
+				System.out.println(NLS.bind("Element {0} is missing type attribute and will be skipped",targetMember.getName())); //$NON-NLS-1$
 			}
 		}
 	}
@@ -219,7 +235,7 @@ public class UseScanParser {
 			throw new Exception(NLS.bind(SearchMessages.invalid_directory_name, xmlLocation));
 		}
 		SubMonitor localmonitor = SubMonitor.convert(monitor, SearchMessages.UseScanParser_parsing, 8);
-		localmonitor.setTaskName(SearchMessages.UseReportConverter_collecting_dir_info);
+		localmonitor.subTask(SearchMessages.UseReportConverter_collecting_dir_info);
 		File[] referees = getDirectories(reportsRoot);
 		Util.updateMonitor(localmonitor, 1);
 		File[] origins = null;
@@ -228,33 +244,52 @@ public class UseScanParser {
 		visitor.visitScan();
 		try {
 			SAXParser parser = getParser();
+			// Treat each top level directory as a producer component
 			for (int i = 0; i < referees.length; i++) {
-				origins = getDirectories(referees[i]);
-				origins = sort(origins); // sort to visit in determined order
-				for (int j = 0; j < origins.length; j++) {
-					localmonitor.setTaskName(NLS.bind(SearchMessages.UseScanParser_analyzing_references, new String[] {origins[j].getName()}));
-					xmlfiles = Util.getAllFiles(origins[j], new FileFilter() {
-						public boolean accept(File pathname) {
-							return pathname.isDirectory() || pathname.getName().endsWith(".xml"); //$NON-NLS-1$
-						}
-					});
-					if (xmlfiles != null && xmlfiles.length > 0) {
-						xmlfiles = sort(xmlfiles); // sort to visit in determined order
-						for (int k = 0; k < xmlfiles.length; k++) {
-							try {
-								ReferenceHandler handler = new ReferenceHandler(getTypeFromFileName(xmlfiles[k]));
-								parser.parse(xmlfiles[k], handler);
-							} 
-							catch (SAXException e) {}
-							catch (IOException e) {}
+				if (referees[i].isDirectory()){
+					String[] idv = getIdVersion(referees[i].getName());
+					IComponentDescriptor targetComponent = Factory.componentDescriptor(idv[0], idv[1]);
+					enterTargetComponent(targetComponent);
+					if (visitReferencingComponent){
+
+						// If the visitor returned true, treat sub-directories as consumer components
+						origins = getDirectories(referees[i]);
+						origins = sort(origins); // sort to visit in determined order
+						for (int j = 0; j < origins.length; j++) {
+							if (origins[j].isDirectory()){
+								idv = getIdVersion(origins[j].getName());
+								IComponentDescriptor referencingComponent = Factory.componentDescriptor(idv[0], idv[1]);
+								enterReferencingComponent(referencingComponent);
+								if (visitMembers){
+
+									// If the visitor returned true, open all xml files in the directory and process them to find members
+									localmonitor.subTask(NLS.bind(SearchMessages.UseScanParser_analyzing_references, new String[] {origins[j].getName()}));
+									xmlfiles = Util.getAllFiles(origins[j], new FileFilter() {
+										public boolean accept(File pathname) {
+											return pathname.isDirectory() || pathname.getName().endsWith(".xml"); //$NON-NLS-1$
+										}
+									});
+									if (xmlfiles != null && xmlfiles.length > 0) {
+										xmlfiles = sort(xmlfiles); // sort to visit in determined order
+										for (int k = 0; k < xmlfiles.length; k++) {
+											try {
+												ReferenceHandler handler = new ReferenceHandler(getTypeFromFileName(xmlfiles[k]));
+												parser.parse(xmlfiles[k], handler);
+											} 
+											catch (SAXException e) {}
+											catch (IOException e) {}
+										}
+									}
+									endMember();
+								}
+								endReferencingComponent();
+							}
 						}
 					}
+					Util.updateMonitor(localmonitor, 1);
+					endComponent();
 				}
-				Util.updateMonitor(localmonitor, 1);
 			}
-			endMember();
-			endReferencingComponent();
-			endTargetComponent();
 		}
 		finally {
 			visitor.endVisitScan();
@@ -314,11 +349,11 @@ public class UseScanParser {
 	}
 	
 	/**
-	 * Returns all the child directories form the given directory
+	 * Returns all the child directories from the given directory
 	 * @param file
 	 * @return
 	 */
-	private File[] getDirectories(File file) {
+	File[] getDirectories(File file) {
 		File[] directories = file.listFiles(new FileFilter() {
 			public boolean accept(File pathname) {
 				return pathname.isDirectory() && !pathname.isHidden();
@@ -355,7 +390,7 @@ public class UseScanParser {
 			// end visit
 			endMember();
 			endReferencingComponent();
-			endTargetComponent();
+			endComponent();
 			
 			// start next
 			targetComponent = component;
@@ -411,21 +446,25 @@ public class UseScanParser {
 	
 	private void endMember() {
 		if (targetMember != null) {
-			visitor.endVisitMember(targetMember);
+			if (visitReferencingComponent && visitMembers) {
+				visitor.endVisitMember(targetMember);
+			}
 			targetMember = null;
 		}
 	}
 	
 	private void endReferencingComponent() {
 		if (referencingComponent != null) {
-			visitor.endVisitReferencingComponent(referencingComponent);
+			if (visitReferencingComponent){
+				visitor.endVisitReferencingComponent(referencingComponent);
+			}
 			referencingComponent = null;
 		}
 	}
 	
-	private void endTargetComponent() {
+	private void endComponent() {
 		if (targetComponent != null) {
-			visitor.endVisit(targetComponent);
+			visitor.endVisitComponent(targetComponent);
 			targetComponent = null;
 		}
 	}
@@ -436,7 +475,7 @@ public class UseScanParser {
 	 * @param files
 	 * @return sorted files
 	 */
-	private File[] sort(File[] files) {
+	File[] sort(File[] files) {
 		List sorted = new ArrayList(files.length + 2);
 		for (int i = 0; i < files.length; i++) {
 			sorted.add(files[i]);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanReferenceVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanReferenceVisitor.java
new file mode 100644
index 0000000..2b40ae8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanReferenceVisitor.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
+
+/**
+ * This class is used by <code>{@link UseScanParser}</code> to visit the API Use Scan reports
+ *
+ */
+public class UseScanReferenceVisitor extends UseScanVisitor {
+	private IApiComponent fLookupAPIComponent;
+	private List fLookupMemberTypes;
+	private String fCurrentReferencedMemberRootType;
+	private IComponentDescriptor fCurrentComponent;
+	private IComponentDescriptor fReferencingComponent;
+	private IReferenceCollection fReferences;
+	private IMemberDescriptor fCurrentReferencedMember;
+
+	public UseScanReferenceVisitor(IApiComponent component, String[] lookupTypes, IReferenceCollection references) {
+		fLookupAPIComponent = component;
+		if (lookupTypes == null || lookupTypes.length == 0) {
+			fLookupMemberTypes = null;
+		} else {
+			fLookupMemberTypes = Arrays.asList(lookupTypes);
+		}
+		fReferences = references;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+	 */
+	public boolean visitComponent(IComponentDescriptor target) {
+
+		if (fLookupAPIComponent == null || fLookupAPIComponent.getSymbolicName().equals(target.getId())) {
+			fCurrentComponent = target;
+			return true;
+		}
+		return false;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitMember(org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor)
+	 */
+	// Visit only for the specific types, if supplied.
+	public boolean visitMember(IMemberDescriptor referencedMember) {
+		boolean found = false;
+
+		String referencedMemberRootType;
+		if (referencedMember instanceof IReferenceTypeDescriptor) {
+			referencedMemberRootType = ((IReferenceTypeDescriptor)referencedMember).getQualifiedName();
+		} else {
+			referencedMemberRootType = referencedMember.getEnclosingType().getQualifiedName();
+		}
+		if (referencedMemberRootType.indexOf('$') > -1) {
+			referencedMemberRootType = referencedMemberRootType.substring(0, referencedMemberRootType.indexOf('$'));
+		}
+		found = fLookupMemberTypes == null || fLookupMemberTypes.contains(referencedMemberRootType);
+		fCurrentReferencedMemberRootType = referencedMemberRootType;
+		fCurrentReferencedMember = referencedMember;
+		
+		return found;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitReference(org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor)
+	 */
+	public void visitReference(IReferenceDescriptor reference) {
+		ReferenceDescriptor refDesc = new ReferenceDescriptor(fReferencingComponent, reference.getMember(), reference.getLineNumber(), fCurrentComponent, fCurrentReferencedMember, reference.getReferenceKind(), reference.getReferenceFlags(), reference.getVisibility(), null);
+		fReferences.add(fCurrentReferencedMemberRootType, refDesc);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.UseScanVisitor#visitReferencingComponent(org.eclipse.pde.api.tools.internal.provisional.descriptors.IComponentDescriptor)
+	 */
+	public boolean visitReferencingComponent(IComponentDescriptor component) {
+		fReferencingComponent = component;
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanReferences.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanReferences.java
new file mode 100644
index 0000000..aa5fb86
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanReferences.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.search;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jdt.internal.core.util.ILRUCacheable;
+
+/**
+ * This class is used by {@link org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent} for storing
+ * its references
+ */
+public class UseScanReferences implements ILRUCacheable, IReferenceCollection {
+
+	Map fReferencesMap;
+
+	public UseScanReferences() {
+		fReferencesMap = new HashMap();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.IReferenceCollection#add(java.lang.String, org.eclipse.pde.api.tools.internal.search.IReferenceDescriptor)
+	 */
+	public void add(String type, IReferenceDescriptor refDesc) {
+		List refDescList = (List) fReferencesMap.get(type);
+		if (refDescList == null) {
+			refDescList = new ArrayList();
+			fReferencesMap.put(type, refDescList);
+		}
+		if (!refDescList.contains(refDesc)) {
+			refDescList.add(refDesc);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.IReferenceCollection#hasReferencesTo(java.lang.String)
+	 */
+	public boolean hasReferencesTo(String type) {
+		List refDescList = (List) fReferencesMap.get(type);
+		if (refDescList == null || refDescList.size() == 0) {
+			return false;
+		}
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.IReferenceCollection#getExternalDependenciesTo(java.lang.String[])
+	 */
+	public IReferenceDescriptor[] getExternalDependenciesTo(String[] types) {
+		if (types == null || types.length == 0) {
+			return new IReferenceDescriptor[0];
+		}
+		
+		List referenceDescriptorList = new ArrayList();
+		for (int i = 0; i < types.length; i++) {
+			List refDescs = (List) fReferencesMap.get(types[i]);
+			if (refDescs == null || refDescs.size() == 0) {
+				continue;
+			}
+			referenceDescriptorList.addAll(refDescs);			
+		}
+
+		return (IReferenceDescriptor[]) referenceDescriptorList.toArray(new IReferenceDescriptor[referenceDescriptorList.size()]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.search.IReferenceCollection#getAllExternalDependencies()
+	 */
+	public IReferenceDescriptor[] getAllExternalDependencies() {
+		List allRefDescs = new ArrayList();
+		for (Iterator iterator = fReferencesMap.values().iterator(); iterator.hasNext();) {
+			List refDescList = (List) iterator.next();
+			allRefDescs.addAll(refDescList);
+		}
+		return (IReferenceDescriptor[]) allRefDescs.toArray(new IReferenceDescriptor[allRefDescs.size()]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.core.util.ILRUCacheable#getCacheFootprint()
+	 */
+	public int getCacheFootprint() {
+		return fReferencesMap.size();
+	}
+
+	public void clear() {
+		fReferencesMap.clear();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanVisitor.java
index 15cdd5f..fce628b 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanVisitor.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseScanVisitor.java
@@ -17,7 +17,7 @@ import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescrip
  * Used to visit an API use scan. This visitor visits each referenced component in 
  * a use scan, by each component that refers to it, by each reference.
  */
-public class UseScanVisitor {
+public abstract class UseScanVisitor {
 	
 	/**
 	 * Start visiting an API use scan
@@ -50,7 +50,7 @@ public class UseScanVisitor {
 	 * 
 	 * @param target the component that was visited
 	 */
-	public void endVisit(IComponentDescriptor target) {
+	public void endVisitComponent(IComponentDescriptor target) {
 	}
 	
 	/**
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlReferenceDescriptorWriter.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlReferenceDescriptorWriter.java
index 1125a87..bf14724 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlReferenceDescriptorWriter.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlReferenceDescriptorWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -120,7 +120,16 @@ public class XmlReferenceDescriptorWriter {
 	}
 	
 	/**
-	 * Collates the results into like reference kinds
+	 * Collates the results into like reference kinds.  If two references have the same reference, referencer, type,
+	 * visibility, and member, one will be removed (even if the line numbers differ).  Updates {@link #fReferenceMap}
+	 * with a map based tree structure as follows:
+	 * <pre>
+	 * Returned Map (Referenced Component ID -> rmap)
+	 * rmap (Referencing Component ID -> mmap)
+	 * mmap (Visibility -> vmap)
+	 * vmap (Reference Type -> tmap)
+	 * tmap (Referenced Member -> Reference Descriptor) 
+	 * </pre>
 	 * @param references
 	 */
 	private void collateResults(IReferenceDescriptor[] references) throws CoreException {
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlSearchReporter.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlSearchReporter.java
index 321b5fe..b5d5933 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlSearchReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/XmlSearchReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -29,6 +30,7 @@ import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
 import org.eclipse.pde.api.tools.internal.IApiXmlConstants;
 import org.eclipse.pde.api.tools.internal.builder.Reference;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
@@ -49,6 +51,9 @@ public class XmlSearchReporter implements IApiSearchReporter {
 	private String fLocation = null;
 	private DocumentBuilder parser = null;
 	private boolean debug = false; 
+	private int referenceCount = 0;
+	private int illegalCount = 0;
+	private int internalCount = 0;
 	
 	/**
 	 * Constructor
@@ -75,19 +80,39 @@ public class XmlSearchReporter implements IApiSearchReporter {
 	 * @see org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchReporter#reportResults(org.eclipse.pde.api.tools.internal.provisional.builder.IReference[])
 	 */
 	public void reportResults(IApiElement element, final IReference[] references) {
-		if(fLocation != null) {
-			XmlReferenceDescriptorWriter writer = new XmlReferenceDescriptorWriter(fLocation);
-			List descriptors = new ArrayList(references.length + 1);
-			for (int i = 0; i < references.length; i++) {
-				Reference reference = (Reference) references[i];
-				try {
-					descriptors.add(reference.getReferenceDescriptor());
-				} catch (CoreException e) {
-					ApiPlugin.log(e.getStatus());
+		if (references.length == 0){
+			// This reporter does not create xml for components with no references
+			return;
+		}
+		// Use a hashset for counting to remove any duplicate references that the writer would remove
+		HashSet writtenReferences = new HashSet();
+		XmlReferenceDescriptorWriter writer = new XmlReferenceDescriptorWriter(fLocation);
+		List descriptors = new ArrayList(references.length + 1);
+		for (int i = 0; i < references.length; i++) {
+			Reference reference = (Reference) references[i];
+			try {
+				IReferenceDescriptor descriptor = reference.getReferenceDescriptor();
+				descriptors.add(descriptor);
+				
+				// Update counters
+				if (!writtenReferences.contains(descriptor)){
+					referenceCount++;
+					if((references[i].getReferenceFlags() & IReference.F_ILLEGAL) > 0) {
+						illegalCount++;
+					}
+					// Though visibility is a bit flag, we want to match the xml output exactly, which separates into folders by visibility equality
+					if (descriptor.getVisibility() == VisibilityModifiers.PRIVATE){
+						internalCount++;
+					}
+					writtenReferences.add(descriptor);
 				}
+			
+			} catch (CoreException e) {
+				ApiPlugin.log(e.getStatus());
 			}
-			writer.writeReferences((IReferenceDescriptor[]) descriptors.toArray(new IReferenceDescriptor[descriptors.size()]));
 		}
+		
+		writer.writeReferences((IReferenceDescriptor[]) descriptors.toArray(new IReferenceDescriptor[descriptors.size()]));
 	}
 		
 	/**
@@ -182,4 +207,45 @@ public class XmlSearchReporter implements IApiSearchReporter {
 			ApiPlugin.log(ce);
 		}
 	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchReporter#reportCounts()
+	 */
+	public void reportCounts(){
+		BufferedWriter writer = null;
+		try {
+			if(this.debug) {
+				System.out.println("Writing file for counting total references..."); //$NON-NLS-1$
+			}
+			File rootfile = new File(fLocation);
+			if(!rootfile.exists()) {
+				rootfile.mkdirs();
+			}
+			File file = new File(rootfile, "counts.xml"); //$NON-NLS-1$
+			if(!file.exists()) {
+				file.createNewFile();
+			}
+			
+			Document doc = Util.newDocument();
+			Element root = doc.createElement(IApiXmlConstants.ELEMENT_REPORTED_COUNT);
+			doc.appendChild(root);
+			root.setAttribute(IApiXmlConstants.ATTR_TOTAL, Integer.toString(referenceCount));
+			root.setAttribute(IApiXmlConstants.ATTR_COUNT_ILLEGAL, Integer.toString(illegalCount));
+			root.setAttribute(IApiXmlConstants.ATTR_COUNT_INTERNAL, Integer.toString(internalCount));
+			
+			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), IApiCoreConstants.UTF_8));
+			writer.write(Util.serializeDocument(doc));
+			writer.flush();
+		}
+		catch(FileNotFoundException fnfe) {}
+		catch(IOException ioe) {}
+		catch(CoreException ce) {}
+		finally {
+			if(writer != null) {
+				try {
+					writer.close();
+				} catch (IOException e) {}
+			}
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/searchmessages.properties b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/searchmessages.properties
index 540818a..224fd95 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/searchmessages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/searchmessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2010 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -21,12 +21,21 @@ ApiSearchEngine_internal_and_illegal=internal and illegal
 ApiSearchEngine_searching_for_use_from=Searching for {0} use from {1}...
 ApiSearchEngine_searching_project=Searching project ''{0}'' for {1} use
 ApiSearchEngine_searching_projects=Searching projects for {0} use...
+ConsumerReportConvertor_BackLinkToConsumer=Back to usage by {0}
+ConsumerReportConvertor_ConsumerListHeader=Referenced bundles
+ConsumerReportConvertor_ConsumerTitle=References in {0}
+ConsumerReportConvertor_IndexTitle=Usage Report - Bundles Containing References
+ConsumerReportConvertor_ProducerListHeader=Bundles containing references
+ConsumerReportConvertor_ProducerTitle=Types referenced by {0} that are from bundle {1}
+ConsumerReportConvertor_TypeListHeader=Referenced Types
+collecting_external_dependencies=Collecting external dependencies
 could_not_create_sax_parser=Could not create a SAX parser
 could_not_create_file=Could not create file {0}
 missing_xml_files_location=The directory that contains xml reports must be specified
 invalid_directory_name=''{0}'' is not a valid directory name
 UseReportConverter_xslt_file_not_valid=The XSLT file location is not valid.
 ioexception_writing_html_file=An IOException occurred while writing html for: {0} 
+load_external_dependencies=Loading external dependencies
 MigrationReportConvertor_bundle_migration_information=Bundle Migration Information
 MigrationReportConvertor_bundles_have_references=The following bundles have references to them that could not be re-resolved in the given candidate.
 MigrationReportConvertor_click_table_entry=Click an entry in the table below to reveal the details of the un-resolved references made to that element.
@@ -36,6 +45,43 @@ MigrationReportConvertor_no_reported_migration_problems=No bundles have any repo
 MigrationReportConvertor_table_shows_unresolved=The following table shows the complete listing of types that have un-resolvable references to them.
 MigrationReportConvertor_type_migration_information={0} migration information
 MigrationReportConvertor_type_with_unresolved_refs=Types in {0} with un-resolved references
+MissingRefMetadata_CoreExceptionInParsing=CoreException parsing XML file: {0}
+MissingRefReportConverter_AddlBundleInfo=Additional Bundle Information
+MissingRefReportConverter_ApiUseScanLocations=API Use Scan locations
+MissingRefReportConverter_BackToIndex=Back to problem index
+MissingRefReportConverter_Field=Field
+MissingRefReportConverter_IndexMetaTag=The root index page for the entire API Use Scan Problem page
+MissingRefReportConverter_MetadataTableTitle=Report Parameter Table
+MissingRefReportConverter_MetadataTitle=Report Parameters
+MissingRefReportConverter_Method=Method
+MissingRefReportConverter_NONE=None
+MissingRefReportConverter_NotSearched=Bundles that were {0} not searched {1}
+MissingRefReportConverter_ProblemDetails=Problem Details
+MissingRefReportConverter_ProblemSummary=The table below displays the bundles and the problems reported for them. You can hover over a column header to see its description.
+MissingRefReportConverter_ProblemSummaryTitle=Problem Summary
+MissingRefReportConverter_ProblemTable_ColumnMissingFields=Missing Fields
+MissingRefReportConverter_ProblemTable_ColumnMissingFieldsTooltip=References to fields which are now missing from the profile
+MissingRefReportConverter_ProblemTable_ColumnMissingMethods=Missing Methods
+MissingRefReportConverter_ProblemTable_ColumnMissingMethodsTooltip=References to methods which are now missing from the profile
+MissingRefReportConverter_ProblemTable_ColumnMissingTypes=Missing Types
+MissingRefReportConverter_ProblemTable_ColumnMissingTypesTooltip=References to types which are now missing from the profile
+MissingRefReportConverter_ProblemTable_ColumnBundle=Bundle
+MissingRefReportConverter_ProblemTable_ColumnBundleTooltip=List of Bundles and the problems reported for them
+MissingRefReportConverter_ProblemTable_ColumnTotal=Total
+MissingRefReportConverter_ProblemTable_ColumnTotalTooltip=Total references which are now missing from the profile
+MissingRefReportConverter_ProblemTable_ColumnVersion=Version
+MissingRefReportConverter_ProblemTable_ColumnVersionTooltip=The version or version range of the  bundle
+MissingRefReportConverter_ProblemTableHeader=Click an entry in the table below to reveal the details of the problems related to that element.
+MissingRefReportConverter_ProblemTitle=Problems report for {0}
+MissingRefReportConverter_ProblemTypes=Problem Types
+MissingRefReportConverter_ProfileLocation=Profile location
+MissingRefReportConverter_ReportDate=Report date
+MissingRefReportConverter_ReportLocation=Report Location
+MissingRefReportConverter_ReportTitle=Missing API Use Scan References Report
+MissingRefReportConverter_Summary=Summary
+MissingRefReportConverter_SummaryDesc={1} problems were found for the bundle {0}.
+MissingRefReportConverter_Type=Type
+no_use_scan_ref_problems=No bundles have any use scan reference problems
 ReferenceLookupVisitor_0=A corresponding bundle does not exist in the migration candidate.
 
 SkippedComponent_component_was_excluded=This component was excluded from the search by the search parameters.
@@ -65,7 +111,7 @@ UseReportConverter_back_to_bundle_index=Back to bundle index
 UseReportConverter_back_to_not_searched=Back to not-searched bundle index
 UseReportConverter_baseline_loc=Baseline Location:
 UseReportConverter_bundle=Bundle
-UseReportConverter_bundle_usage_information=Bundle usage information
+UseReportConverter_bundle_usage_information=Usage Report - Referenced Bundles
 UseReportConverter_bundles_that_were_not_searched=Bundles that were {0}not searched{1}
 UseReportConverter_click_an_entry_to_see_details=Click an entry in the table below to reveal the details of the references made to that element. You can hover over an element to see its qualified signature information and hover over the visibility to see details.
 UseReportConverter_description=Description:
@@ -109,7 +155,6 @@ UseReportConverter_reported_missing_bundles=Required bundles that have been repo
 UseReportConverter_required_bundles=Required Bundles
 UseReportConverter_root_index_description=The root index page for the entire API use scan
 UseReportConverter_summary=Summary
-UseReportConverter_terminology=Terminology
 UseReportConverter_to_filter_patterns=To Filter Patterns:
 UseReportConverter_types_used_in=Types used in {0}
 UseReportConverter_usage_details={0} usage details
@@ -117,5 +162,7 @@ UseReportConverter_use_scan_info=Use Scan Information
 UseReportConverter_version=Version
 UseReportConverter_version_column_description=The version or version range of the bundle
 UseReportConvertor_additional_infos_section=Additional Bundle Information
-UseScanParser_analyzing_references=Creating HTML report for: {0}
+UseScanManager_InvalidArchive={0} is not a valid API Use Scan archive.
+UseScanManager_InvalidDir={0} is not a valid API Use Scan directory.
+UseScanParser_analyzing_references=Parsing references for: {0}
 UseScanParser_parsing=Parsing API use scan
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/ExcludedElements.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/ExcludedElements.java
deleted file mode 100644
index 9964f15..0000000
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/ExcludedElements.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.api.tools.internal.util;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-public class ExcludedElements {
-
-	private Set exactMatches;
-	private Set partialMatches;
-
-	public Set getExactMatches() {
-		if (this.exactMatches == null) {
-			return Collections.EMPTY_SET;
-		}
-		return this.exactMatches;
-	}
-
-	public Set getPartialMatches() {
-		if (this.partialMatches == null) {
-			return Collections.EMPTY_SET;
-		}
-		return this.partialMatches;
-	}
-
-	public boolean containsPartialMatch(String componentId) {
-		if (this.partialMatches == null) return false;
-		if (this.partialMatches.contains(componentId)) {
-			return true;
-		}
-		for (Iterator iterator = this.partialMatches.iterator(); iterator.hasNext(); ) {
-			String partialMatch = (String) iterator.next();
-			if (componentId.startsWith(partialMatch)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public boolean containsExactMatch(String key) {
-		if (this.exactMatches == null) return false;
-		return this.exactMatches.contains(key);
-	}
-
-	public void addPartialMatch(String componentid) {
-		if (this.partialMatches == null) {
-			this.partialMatches = new HashSet();
-		}
-		this.partialMatches.add(componentid);
-	}
-
-	public void addExactMatch(String match) {
-		if (this.exactMatches == null) {
-			this.exactMatches = new HashSet();
-		}
-		this.exactMatches.add(match);
-	}
-	
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		printSet(buffer, this.exactMatches, "exact matches"); //$NON-NLS-1$
-		printSet(buffer, this.partialMatches, "partial matches"); //$NON-NLS-1$
-		return String.valueOf(buffer);
-	}
-	
-	private void printSet(StringBuffer buffer, Set set, String title) {
-		final String lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
-		buffer
-			.append(title)
-			.append(lineSeparator)
-			.append("================================================================") //$NON-NLS-1$
-			.append(lineSeparator);
-		if (set != null) {
-			final int max = set.size();
-			String[] allEntries = new String[max];
-			set.toArray(allEntries);
-			Arrays.sort(allEntries);
-			for (int i = 0; i < max; i++) {
-				buffer.append(allEntries[i]).append(lineSeparator);
-			}
-			buffer.append(lineSeparator);
-		}
-		buffer
-			.append("================================================================") //$NON-NLS-1$
-			.append(lineSeparator);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/FilteredElements.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/FilteredElements.java
new file mode 100644
index 0000000..4ec53ec
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/FilteredElements.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.util;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+public class FilteredElements {
+
+	private Set exactMatches;
+	private Set partialMatches;
+
+	public Set getExactMatches() {
+		if (this.exactMatches == null) {
+			return Collections.EMPTY_SET;
+		}
+		return this.exactMatches;
+	}
+
+	public Set getPartialMatches() {
+		if (this.partialMatches == null) {
+			return Collections.EMPTY_SET;
+		}
+		return this.partialMatches;
+	}
+
+	public boolean containsPartialMatch(String componentId) {
+		if (this.partialMatches == null) return false;
+		if (this.partialMatches.contains(componentId)) {
+			return true;
+		}
+		for (Iterator iterator = this.partialMatches.iterator(); iterator.hasNext(); ) {
+			String partialMatch = (String) iterator.next();
+			if (componentId.startsWith(partialMatch)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public boolean containsExactMatch(String key) {
+		if (this.exactMatches == null) return false;
+		return this.exactMatches.contains(key);
+	}
+
+	public void addPartialMatch(String componentid) {
+		if (this.partialMatches == null) {
+			this.partialMatches = new HashSet();
+		}
+		this.partialMatches.add(componentid);
+	}
+
+	public void addExactMatch(String match) {
+		if (this.exactMatches == null) {
+			this.exactMatches = new HashSet();
+		}
+		this.exactMatches.add(match);
+	}
+	
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		printSet(buffer, this.exactMatches, "exact matches"); //$NON-NLS-1$
+		printSet(buffer, this.partialMatches, "partial matches"); //$NON-NLS-1$
+		return String.valueOf(buffer);
+	}
+	
+	private void printSet(StringBuffer buffer, Set set, String title) {
+		final String lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
+		buffer
+			.append(title)
+			.append(lineSeparator)
+			.append("================================================================") //$NON-NLS-1$
+			.append(lineSeparator);
+		if (set != null) {
+			final int max = set.size();
+			String[] allEntries = new String[max];
+			set.toArray(allEntries);
+			Arrays.sort(allEntries);
+			for (int i = 0; i < max; i++) {
+				buffer.append(allEntries[i]).append(lineSeparator);
+			}
+			buffer.append(lineSeparator);
+		}
+		buffer
+			.append("================================================================") //$NON-NLS-1$
+			.append(lineSeparator);
+	}
+	
+	public boolean isEmpty(){
+		return (exactMatches == null || exactMatches.isEmpty()) && (partialMatches == null || partialMatches.isEmpty());
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java
index 0f60647..6bb93de 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Field;
 import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CodingErrorAction;
@@ -132,6 +133,13 @@ import org.xml.sax.helpers.DefaultHandler;
  */
 public final class Util {
 
+	public static final String DOT_TGZ = ".tgz"; //$NON-NLS-1$
+	public static final String DOT_TAR_GZ = ".tar.gz"; //$NON-NLS-1$
+	public static final String DOT_JAR = ".jar"; //$NON-NLS-1$
+	public static final String DOT_ZIP = ".zip"; //$NON-NLS-1$
+
+	public static final char VERSION_SEPARATOR = '(';
+
 	/**
 	 * Class that runs a build in the workspace or the given project
 	 */
@@ -275,7 +283,7 @@ public final class Util {
 	 */
 	private static boolean DELETE_DEBUG = false;
 	/**
-	 * Maximum of time in ms to wait in deletion operation while running JDT/Core tests.
+	 * Maximum of time in milliseconds to wait in deletion operation while running JDT/Core tests.
 	 * Default is 10 seconds. This number cannot exceed 1 minute (i.e. 60000).
 	 * <br>
 	 * To avoid too many loops while waiting, the ten first ones are done waiting
@@ -838,7 +846,7 @@ public final class Util {
 	}
 
 	/**
-	 * Returns the details of the api delta as a string
+	 * Returns the details of the API delta as a string
 	 * @param delta
 	 * @return the details of the delta as a string
 	 */
@@ -946,7 +954,7 @@ public final class Util {
 	
 	/**
 	 * Returns the number of fragments for the given version value, -1 if the format is unknown.
-	 * The version is formed like: [optional plugin name] major.minor.micro.qualifier.
+	 * The version is formed like: [optional plug-in name] major.minor.micro.qualifier.
 	 * 
 	 * @param version the given version value
 	 * @return the number of fragments for the given version value or -1 if the format is unknown
@@ -1248,7 +1256,8 @@ public final class Util {
 	 * @return the given input stream's contents as a character array.
 	 * @throws IOException if a problem occurred reading the stream.
 	 */
-	public static char[] getInputStreamAsCharArray(InputStream stream, int length, String encoding) throws IOException {
+	public static char[] getInputStreamAsCharArray(InputStream stream, int
+			length, String encoding) throws IOException {
 		Charset charset = null;
 		try {
 			charset = Charset.forName(encoding);
@@ -1260,12 +1269,20 @@ public final class Util {
 			return null;
 		}
 		CharsetDecoder charsetDecoder = charset.newDecoder();
+
 		charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE);
 		byte[] contents = getInputStreamAsByteArray(stream, length);
 		ByteBuffer byteBuffer = ByteBuffer.allocate(contents.length);
 		byteBuffer.put(contents);
 		byteBuffer.flip();
-		return charsetDecoder.decode(byteBuffer).array();
+		CharBuffer charBuffer = charsetDecoder.decode(byteBuffer);
+		charBuffer.compact(); // ensure pay-load starting at 0
+		char[] array = charBuffer.array();
+		int lengthToBe = charBuffer.position();
+		if (array.length > lengthToBe) {
+			System.arraycopy(array, 0, (array = new char[lengthToBe]), 0, lengthToBe);
+		}
+		return array;
 	}
 	
 	/**
@@ -1304,7 +1321,7 @@ public final class Util {
 	}
 	/**
 	 * Returns if the given project is API enabled
-	 * @param project
+	 * @param project the given project
 	 * @return true if the project is API enabled, false otherwise
 	 */
 	public static boolean isApiProject(IProject project) {
@@ -1316,8 +1333,21 @@ public final class Util {
 	}
 	
 	/**
+	 * Returns if the given project is a java project
+	 * @param project the given project
+	 * @return <code>true</code> if the project is a java project, <code>false</code> otherwise
+	 */
+	public static boolean isJavaProject(IProject project) {
+		try {
+			return project.hasNature(JavaCore.NATURE_ID);
+		} catch (CoreException e) {
+			return false;
+		}
+	}
+	
+	/**
 	 * Returns if the given project is API enabled
-	 * @param project
+	 * @param project the given project
 	 * @return true if the project is API enabled, false otherwise
 	 */
 	public static boolean isApiProject(IJavaProject project) {
@@ -1326,7 +1356,7 @@ public final class Util {
 	
 	/**
 	 * Returns if the given {@link IApiComponent} is a valid {@link IApiComponent}
-	 * @param apiComponent
+	 * @param apiComponent the given component
 	 * @return true if the given {@link IApiComponent} is valid, false otherwise
 	 */
 	public static boolean isApiToolsComponent(IApiComponent apiComponent) {
@@ -1364,13 +1394,38 @@ public final class Util {
 	 * @return true if the file name is an archive name false otherwise
 	 */
 	public static boolean isArchive(String fileName) {
+		return isZipJarFile(fileName) || isTGZFile(fileName);
+	}
+	
+	/**
+	 * Returns if the given file name represents a 'standard' archive, where the name
+	 * has an extension of *.zip or *.jar
+	 * 
+	 * @param fileName
+	 * @return true if the given file name is that of a 'standard' archive, false otherwise
+	 */
+	public static boolean isZipJarFile(String fileName) {
+		String normalizedFileName = fileName.toLowerCase();
+		return normalizedFileName.endsWith(DOT_ZIP) 
+			|| normalizedFileName.endsWith(DOT_JAR); 
+	}
+	
+	/**
+	 * Returns if the given file name represents a G-zip file name, where the name 
+	 * has an extension of *.tar.gz or *.tgz
+	 * 
+	 * @param fileName
+	 * @return true if the given file name is that of a G-zip archive, false otherwise
+	 */
+	public static boolean isTGZFile(String fileName) {
 		String normalizedFileName = fileName.toLowerCase();
-		return normalizedFileName.endsWith(".zip") || normalizedFileName.endsWith(".jar"); //$NON-NLS-1$ //$NON-NLS-2$
+		return normalizedFileName.endsWith(DOT_TAR_GZ) 
+			|| normalizedFileName.endsWith(DOT_TGZ); 
 	}
 	
 	/**
 	 * Returns if the flags are for a class
-	 * @param accessFlags
+	 * @param accessFlags the given access flags
 	 * @return
 	 */
 	public static boolean isClass(int accessFlags) {
@@ -1803,7 +1858,7 @@ public final class Util {
 			if ("DRLVM".equals(vmName)) { //$NON-NLS-1$
 				FilenameFilter jarFilter = new FilenameFilter() {
 					public boolean accept(File dir, String name) {
-						return name.endsWith(".jar") & !name.endsWith("-src.jar");  //$NON-NLS-1$//$NON-NLS-2$
+						return name.endsWith(DOT_JAR) & !name.endsWith("-src.jar");  //$NON-NLS-1$
 					}
 				};
 				jarsNames = new File(jreDir + "/lib/boot/").list(jarFilter); //$NON-NLS-1$
@@ -1984,7 +2039,7 @@ public final class Util {
 		String version = component.getVersion();
 		// remove the qualifier part
 		if (version != null) {
-			buffer.append('(');
+			buffer.append(Util.VERSION_SEPARATOR);
 			try {
 				Version version2 = new Version(version);
 				buffer
@@ -2215,8 +2270,8 @@ public final class Util {
 	 * @param baseline
 	 * @return the list of bundles to be excluded
 	 */
-	public static ExcludedElements initializeRegexExcludeList(String location, IApiBaseline baseline, boolean debug) {
-		ExcludedElements excludedElements = new ExcludedElements();
+	public static FilteredElements initializeRegexFilterList(String location, IApiBaseline baseline, boolean debug) {
+		FilteredElements excludedElements = new FilteredElements();
 		if (location != null) {
 			File file = new File(location);
 			if (file.exists()) {
@@ -2240,6 +2295,7 @@ public final class Util {
 					String line = null;
 					try {
 						while ((line = reader.readLine()) != null) {
+							line = line.trim();
 							if (line.startsWith("#") || line.length() == 0) { //$NON-NLS-1$
 								continue; 
 							}
@@ -2271,7 +2327,7 @@ public final class Util {
 	 * @param list
 	 * @param components
 	 */
-	public static void collectRegexIds(String line, ExcludedElements excludedElements, IApiComponent[] components, boolean debug) throws Exception {
+	public static void collectRegexIds(String line, FilteredElements excludedElements, IApiComponent[] components, boolean debug) throws Exception {
 		if (line.startsWith(REGULAR_EXPRESSION_START)) {
 			String componentname = line;
 			// regular expression
@@ -2330,4 +2386,21 @@ public final class Util {
 		int access = typeDescriptor.getModifiers();
 		return VisibilityModifiers.isAPI(visibility) && (Flags.isPublic(access) || Flags.isProtected(access));
 	}
+	
+	/**
+	 * Simple method to walk an array and call <code>toString()</code> on each of the entries. Does not descend into sub-collections.
+	 * @param array the array
+	 * @return the comma-separated string representation of the the array
+	 * @since 1.0.3
+	 */
+	public static String deepToString(Object[] array) {
+		StringBuffer buffer = new StringBuffer();
+		for (int i = 0; i < array.length; i++) {
+			buffer.append(array[i].toString());
+			if(i < array.length-1) {
+				buffer.append(',');
+			}
+		}
+		return buffer.toString();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java
index 1a697b9..89ecc97 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationTask.java
index b27d492..00a9456 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationTask.java
@@ -26,7 +26,7 @@ import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
-import org.eclipse.pde.api.tools.internal.util.ExcludedElements;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 
 /**
  * Ant task to retrieve all deprecation changes (addition or removal) between two api baselines
@@ -37,6 +37,8 @@ public class APIDeprecationTask extends CommonUtilsTask {
 
 	private String eeFileLocation;
 	private String excludeListLocation;
+	private String includeListLocation;
+	private static final String REPORT_XML_FILE_NAME = "apiDeprecation.xml"; //$NON-NLS-1$
 
 	public void execute() throws BuildException {
 		if (this.referenceBaselineLocation == null
@@ -65,6 +67,11 @@ public class APIDeprecationTask extends CommonUtilsTask {
 			} else {
 				System.out.println("No exclude list location"); //$NON-NLS-1$
 			}
+			if (this.includeListLocation != null) {
+				System.out.println("include list location : " + this.includeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No include list location"); //$NON-NLS-1$
+			}
 		}
 		// unzip reference
 		long time = 0;
@@ -80,16 +87,25 @@ public class APIDeprecationTask extends CommonUtilsTask {
 		}
 		// run the comparison
 		// create baseline for the reference
-		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, getInstallDir(referenceInstallDir), this.eeFileLocation);
-		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, getInstallDir(baselineInstallDir), this.eeFileLocation);
+		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, referenceInstallDir.getAbsolutePath(), this.eeFileLocation);
+		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, baselineInstallDir.getAbsolutePath(), this.eeFileLocation);
 		
-		ExcludedElements excludedElements = CommonUtilsTask.initializeExcludedElement(this.excludeListLocation, currentBaseline, this.debug);
+		FilteredElements excludedElements = CommonUtilsTask.initializeFilteredElements(this.excludeListLocation, currentBaseline, this.debug);
 
 		if (this.debug) {
 			System.out.println("===================================================================================="); //$NON-NLS-1$
 			System.out.println("Excluded elements list:"); //$NON-NLS-1$
 			System.out.println(excludedElements);
 		}
+		
+		FilteredElements includedElements = CommonUtilsTask.initializeFilteredElements(this.includeListLocation, currentBaseline, this.debug);
+
+		if (this.debug) {
+			System.out.println("===================================================================================="); //$NON-NLS-1$
+			System.out.println("Included elements list:"); //$NON-NLS-1$
+			System.out.println(includedElements);
+		}
+		
 		IDelta delta = null;
 		if (this.debug) {
 			System.out.println("Creation of both baselines : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -99,7 +115,7 @@ public class APIDeprecationTask extends CommonUtilsTask {
 			delta = ApiComparator.compare(referenceBaseline, currentBaseline, VisibilityModifiers.API, true, null);
 		} finally {
 			if (this.debug) {
-				System.out.println("API freeze check : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
+				System.out.println("API deprecation check : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
 				time = System.currentTimeMillis();
 			}
 			referenceBaseline.dispose();
@@ -121,6 +137,9 @@ public class APIDeprecationTask extends CommonUtilsTask {
 			BufferedWriter writer = null;
 			File outputFile = new File(this.reportLocation);
 			if (outputFile.exists()) {
+				if (outputFile.isDirectory()){
+					 outputFile = new File(this.reportLocation, REPORT_XML_FILE_NAME);
+				}
 				// delete the file
 				// TODO we might want to customize it
 				outputFile.delete();
@@ -135,7 +154,7 @@ public class APIDeprecationTask extends CommonUtilsTask {
 			}
 			try {
 				writer = new BufferedWriter(new FileWriter(outputFile));
-				ExcludeListDeltaVisitor visitor = new ExcludeListDeltaVisitor(excludedElements, ExcludeListDeltaVisitor.CHECK_DEPRECATION);
+				FilterListDeltaVisitor visitor = new FilterListDeltaVisitor(excludedElements, includedElements, FilterListDeltaVisitor.CHECK_DEPRECATION);
 				delta.accept(visitor);
 				writer.write(visitor.getXML());
 				writer.flush();
@@ -188,7 +207,7 @@ public class APIDeprecationTask extends CommonUtilsTask {
 	/**
 	 * Set the exclude list location.
 	 * 
-	 * <p>The exclude list is used to know what bundles should excluded from the xml report
+	 * <p>The exclude list is used to know what bundles and members should excluded from the xml report
 	 * generated by the task execution. Lines starting with '#' are ignored from
 	 * the excluded element.</p>
 	 * <p>The format of the exclude file looks like this:</p>
@@ -205,6 +224,28 @@ public class APIDeprecationTask extends CommonUtilsTask {
 	public void setExcludeList(String excludeListLocation) {
 		this.excludeListLocation = excludeListLocation;
 	}
+	
+	/**
+	 * Set the include list location.
+	 * 
+	 * <p>The include list is used to know what bundles and members should included from the xml report
+	 * generated by the task execution. Lines starting with '#' are ignored from
+	 * the included element.</p>
+	 * <p>The format of the exclude file looks like this:</p>
+	 * <pre>
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#dispose()V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#getElements(Ljava/lang/Object;)[Ljava/lang/Object;
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#inputChanged(Lorg/eclipse/jface/viewers/Viewer;Ljava/lang/Object;Ljava/lang/Object;)V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#dispose()V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#getChildren(Ljava/lang/Object;)[Ljava/lang/Object;
+	 * ...
+	 * </pre>
+	 * @param includeListLocation the given location for the included list file
+	 */
+	public void setIncludeList(String includeListLocation) {
+		this.includeListLocation = includeListLocation;
+	}
+	
 	/**
 	 * Set the location of the current product or baseline that you want to compare against
 	 * the reference baseline.
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java
index 4e965a4..e1abcff 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ import org.xml.sax.helpers.DefaultHandler;
  */
 public class APIFreezeReportConversionTask extends Task {
 	static final class ConverterDefaultHandler extends DefaultHandler {
+		private static final String API_BASELINE_DELTAS = "Added and removed bundles"; //$NON-NLS-1$
 		private String[] arguments;
 		private List argumentsList;
 		private String componentID;
@@ -123,7 +124,13 @@ public class APIFreezeReportConversionTask extends Task {
 					printAttribute(attributes, IApiXmlConstants.ATTR_RESTRICTIONS);
 					printAttribute(attributes, IApiXmlConstants.ATTR_NAME_TYPE_NAME);
 				}
-				this.componentID = attributes.getValue(IApiXmlConstants.ATTR_NAME_COMPONENT_ID);
+				final String value = attributes.getValue(IApiXmlConstants.ATTR_NAME_COMPONENT_ID);
+				if (value == null) {
+					// removed or added bundles
+					this.componentID = API_BASELINE_DELTAS;
+				} else {
+					this.componentID = value;
+				}
 				this.flags = Integer.parseInt(attributes.getValue(IApiXmlConstants.ATTR_FLAGS));
 				this.elementType = Util.getDeltaElementTypeValue(attributes.getValue(IApiXmlConstants.ATTR_NAME_ELEMENT_TYPE));
 				this.typename = attributes.getValue(IApiXmlConstants.ATTR_NAME_TYPE_NAME);
@@ -263,6 +270,9 @@ public class APIFreezeReportConversionTask extends Task {
 								Messages.deltaReportTask_entry_minor_version,
 								this.arguments));
 						break;
+					case IDelta.API_BASELINE_ELEMENT_TYPE :
+						buffer.append(this.key);
+						break;
 				}
 			}
 			return CommonUtilsTask.convertToHtml(String.valueOf(buffer));
@@ -368,6 +378,51 @@ public class APIFreezeReportConversionTask extends Task {
 			System.out.println("xmlFileLocation : " + this.xmlFileLocation); //$NON-NLS-1$
 			System.out.println("htmlFileLocation : " + this.htmlFileLocation); //$NON-NLS-1$
 		}
+		File file = new File(this.xmlFileLocation);
+		if (!file.exists()) {
+			throw new BuildException(
+					NLS.bind(Messages.deltaReportTask_missingXmlFile, this.xmlFileLocation));
+		}
+		if (file.isDirectory()) {
+			throw new BuildException(
+					NLS.bind(Messages.deltaReportTask_xmlFileLocationMustBeAFile, this.xmlFileLocation));
+		}
+		File outputFile = null;
+		if (this.htmlFileLocation == null) {
+			int index = this.xmlFileLocation.lastIndexOf('.');
+			if (index == -1
+					|| !this.xmlFileLocation.substring(index).toLowerCase().equals(".xml")) { //$NON-NLS-1$
+				throw new BuildException(Messages.deltaReportTask_xmlFileLocationShouldHaveAnXMLExtension);
+			}
+			this.htmlFileLocation = extractNameFromXMLName(index);
+			if (this.debug) {
+				System.out.println("output name :" + this.htmlFileLocation); //$NON-NLS-1$
+			}
+			outputFile = new File(this.htmlFileLocation);
+		} else {
+			// check if the htmlFileLocation is a file and not a directory
+			int index = this.htmlFileLocation.lastIndexOf('.');
+			if (index == -1
+					|| !this.htmlFileLocation.substring(index).toLowerCase().equals(".html")) { //$NON-NLS-1$
+				throw new BuildException(Messages.deltaReportTask_htmlFileLocationShouldHaveAnHtmlExtension);
+			}
+			outputFile = new File(this.htmlFileLocation);
+			if (outputFile.exists()) {
+				// if the file already exist, we check that this is a file
+				if (outputFile.isDirectory()) {
+					throw new BuildException(
+							NLS.bind(Messages.deltaReportTask_hmlFileLocationMustBeAFile, outputFile.getAbsolutePath()));
+				}
+			} else {
+				File parentFile = outputFile.getParentFile();
+				if (!parentFile.exists()) {
+					if (!parentFile.mkdirs()) {
+						throw new BuildException(
+								NLS.bind(Messages.errorCreatingParentReportFile, parentFile.getAbsolutePath()));
+					}
+				}
+			}
+		}
 		SAXParserFactory factory = SAXParserFactory.newInstance();
 		SAXParser parser = null;
 		try {
@@ -380,14 +435,6 @@ public class APIFreezeReportConversionTask extends Task {
 		if (parser == null) {
 			throw new BuildException(Messages.deltaReportTask_couldNotCreateSAXParser);
 		}
-
-		File file = new File(this.xmlFileLocation);
-		if (this.htmlFileLocation == null) {
-			this.htmlFileLocation = extractNameFromXMLName();
-			if (this.debug) {
-				System.out.println("output name :" + this.htmlFileLocation); //$NON-NLS-1$
-			}
-		}
 		try {
 			ConverterDefaultHandler defaultHandler = new ConverterDefaultHandler(this.debug);
 			parser.parse(file, defaultHandler);
@@ -400,8 +447,7 @@ public class APIFreezeReportConversionTask extends Task {
 			// ignore
 		}
 	}
-	private String extractNameFromXMLName() {
-		int index = this.xmlFileLocation.lastIndexOf('.');
+	private String extractNameFromXMLName(int index) {
 		StringBuffer buffer = new StringBuffer();
 		buffer.append(this.xmlFileLocation.substring(0, index)).append(".html"); //$NON-NLS-1$
 		return String.valueOf(buffer);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java
index b114dfe..2da6591 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,14 +19,18 @@ import java.io.StringWriter;
 
 import org.apache.tools.ant.BuildException;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.osgi.service.resolver.ResolverError;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.api.tools.internal.model.StubApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
+import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiScope;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
-import org.eclipse.pde.api.tools.internal.util.ExcludedElements;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiScope;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 
 /**
  * Ant task to run the API freeze check during Eclipse build.
@@ -37,6 +41,7 @@ public class APIFreezeTask extends CommonUtilsTask {
 
 	private String eeFileLocation;
 	private String excludeListLocation;
+	private String includeListLocation;
 
 	public void execute() throws BuildException {
 		if (this.referenceBaselineLocation == null
@@ -65,6 +70,32 @@ public class APIFreezeTask extends CommonUtilsTask {
 			} else {
 				System.out.println("No exclude list location"); //$NON-NLS-1$
 			}
+			if (this.includeListLocation != null) {
+				System.out.println("include list location : " + this.includeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No include list location"); //$NON-NLS-1$
+			}
+		}
+		File outputFile = new File(this.reportLocation);
+		if (outputFile.exists()) {
+			if (outputFile.isDirectory()){
+				// the output file cannot be a directory
+				throw new BuildException(
+						NLS.bind(Messages.reportLocationHasToBeAFile, outputFile.getAbsolutePath()));
+			}
+		} else {
+			File outputDir = outputFile.getParentFile();
+			if (!outputDir.exists()) {
+				if (!outputDir.mkdirs()) {
+					throw new BuildException(
+						NLS.bind(Messages.errorCreatingParentReportFile, outputDir.getAbsolutePath()));
+				}
+			}
+		}
+		int index = this.reportLocation.lastIndexOf('.');
+		if (index == -1
+				|| !this.reportLocation.substring(index).toLowerCase().equals(".xml")) { //$NON-NLS-1$
+			throw new BuildException(Messages.deltaReportTask_xmlFileLocationShouldHaveAnXMLExtension);
 		}
 		// unzip reference
 		long time = 0;
@@ -80,23 +111,34 @@ public class APIFreezeTask extends CommonUtilsTask {
 		}
 		// run the comparison
 		// create baseline for the reference
-		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, getInstallDir(referenceInstallDir), this.eeFileLocation);
-		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, getInstallDir(baselineInstallDir), this.eeFileLocation);
+		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, referenceInstallDir.getAbsolutePath(), this.eeFileLocation);
+		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, baselineInstallDir.getAbsolutePath(), this.eeFileLocation);
 		
-		ExcludedElements excludedElements = CommonUtilsTask.initializeExcludedElement(this.excludeListLocation, currentBaseline, this.debug);
+		FilteredElements excludedElements = CommonUtilsTask.initializeFilteredElements(this.excludeListLocation, currentBaseline, this.debug);
 
 		if (this.debug) {
 			System.out.println("===================================================================================="); //$NON-NLS-1$
 			System.out.println("Excluded elements list:"); //$NON-NLS-1$
 			System.out.println(excludedElements);
 		}
+		
+		FilteredElements includedElements = CommonUtilsTask.initializeFilteredElements(this.includeListLocation, currentBaseline, this.debug);
+
+		if (this.debug) {
+			System.out.println("===================================================================================="); //$NON-NLS-1$
+			System.out.println("Included elements list:"); //$NON-NLS-1$
+			System.out.println(includedElements);
+		}
+		
 		IDelta delta = null;
 		if (this.debug) {
 			System.out.println("Creation of both baselines : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
 			time = System.currentTimeMillis();
 		}
 		try {
-			delta = ApiComparator.compare(referenceBaseline, currentBaseline, VisibilityModifiers.API, true, null);
+			delta = ApiComparator.compare(getScope(currentBaseline), referenceBaseline, VisibilityModifiers.API, true, null);
+		} catch (CoreException e) {
+			// ignore
 		} finally {
 			if (this.debug) {
 				System.out.println("API freeze check : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -119,23 +161,9 @@ public class APIFreezeTask extends CommonUtilsTask {
 		if (delta != ApiComparator.NO_DELTA) {
 			// dump the report in the appropriate folder
 			BufferedWriter writer = null;
-			File outputFile = new File(this.reportLocation);
-			if (outputFile.exists()) {
-				// delete the file
-				// TODO we might want to customize it
-				outputFile.delete();
-			} else {
-				File outputDir = outputFile.getParentFile();
-				if (!outputDir.exists()) {
-					if (!outputDir.mkdirs()) {
-						throw new BuildException(
-							NLS.bind(Messages.errorCreatingParentReportFile, outputDir.getAbsolutePath()));
-					}
-				}
-			}
 			try {
 				writer = new BufferedWriter(new FileWriter(outputFile));
-				ExcludeListDeltaVisitor visitor = new ExcludeListDeltaVisitor(excludedElements, ExcludeListDeltaVisitor.CHECK_OTHER);
+				FilterListDeltaVisitor visitor = new FilterListDeltaVisitor(excludedElements, includedElements, FilterListDeltaVisitor.CHECK_OTHER);
 				delta.accept(visitor);
 				writer.write(visitor.getXML());
 				writer.flush();
@@ -164,6 +192,29 @@ public class APIFreezeTask extends CommonUtilsTask {
 			}
 		}
 	}
+	private IApiScope getScope(IApiBaseline currentBaseline) {
+		IApiComponent[] apiComponents = currentBaseline.getApiComponents();
+		ApiScope scope = new ApiScope();
+		for (int i = 0, max = apiComponents.length; i < max; i++) {
+			IApiComponent apiComponent = apiComponents[i];
+			try {
+				ResolverError[] errors = apiComponent.getErrors();
+				if (errors != null) {
+					if (this.debug) {
+						System.out.println("Errors for component : " + apiComponent.getSymbolicName()); //$NON-NLS-1$
+						for (int j = 0, max2 = errors.length; j < max2; j++) {
+							System.out.println(errors[j]);
+						}
+					}
+					continue;
+				}
+				scope.addElement(apiComponent);
+			} catch (CoreException e) {
+				// ignore
+			}
+		}
+		return scope;
+	}
 	/**
 	 * Set the debug value.
 	 * <p>The possible values are: <code>true</code>, <code>false</code></p>
@@ -188,7 +239,7 @@ public class APIFreezeTask extends CommonUtilsTask {
 	/**
 	 * Set the exclude list location.
 	 * 
-	 * <p>The exclude list is used to know what bundles should excluded from the xml report
+	 * <p>The exclude list is used to know what bundles and members should excluded from the xml report
 	 * generated by the task execution. Lines starting with '#' are ignored from
 	 * the excluded element.</p>
 	 * <p>The format of the exclude file looks like this:</p>
@@ -205,6 +256,28 @@ public class APIFreezeTask extends CommonUtilsTask {
 	public void setExcludeList(String excludeListLocation) {
 		this.excludeListLocation = excludeListLocation;
 	}
+	
+	/**
+	 * Set the include list location.
+	 * 
+	 * <p>The include list is used to know what bundles and members should included from the xml report
+	 * generated by the task execution. Lines starting with '#' are ignored from
+	 * the included element.</p>
+	 * <p>The format of the include file looks like this:</p>
+	 * <pre>
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#dispose()V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#getElements(Ljava/lang/Object;)[Ljava/lang/Object;
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#inputChanged(Lorg/eclipse/jface/viewers/Viewer;Ljava/lang/Object;Ljava/lang/Object;)V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#dispose()V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#getChildren(Ljava/lang/Object;)[Ljava/lang/Object;
+	 * ...
+	 * </pre>
+	 * @param includeListLocation the given location for the included list file
+	 */
+	public void setIncludeList(String includeListLocation) {
+		this.includeListLocation = includeListLocation;
+	}
+	
 	/**
 	 * Set the location of the current product or baseline that you want to compare against
 	 * the reference baseline.
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsAnalysisTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsAnalysisTask.java
index 75d4dc4..ef4a5ab 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsAnalysisTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsAnalysisTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,7 +49,7 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
-import org.eclipse.pde.api.tools.internal.util.ExcludedElements;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
@@ -214,9 +214,11 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 			for(int i = 0; i < resources.getLength(); i++) {
 				Element element = (Element) resources.item(i);
 				String typeName = element.getAttribute(IApiXmlConstants.ATTR_TYPE);
-				if(typeName == null || typeName.length() == 0) {
-					continue;
+				if (typeName.length() == 0) {
+					// if there is no type attribute, an empty string is returned
+					typeName = null;
 				}
+				String path = element.getAttribute(IApiXmlConstants.ATTR_PATH);
 				NodeList filters = element.getElementsByTagName(IApiXmlConstants.ELEMENT_FILTER);
 				for(int j = 0; j < filters.getLength(); j++) {
 					element = (Element) filters.item(j);
@@ -237,7 +239,7 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 						Element messageArgument = (Element) arguments.item(k);
 						messageargs[k] = messageArgument.getAttribute(IApiXmlConstants.ATTR_VALUE);
 					}
-					newfilters.add(ApiProblemFactory.newApiProblem(null, typeName, messageargs, null, null, -1, -1, -1, id));
+					newfilters.add(ApiProblemFactory.newApiProblem(path, typeName, messageargs, null, null, -1, -1, -1, id));
 				}
 			}
 			internalAddFilters(componentID, (IApiProblem[]) newfilters.toArray(new IApiProblem[newfilters.size()]),
@@ -276,16 +278,38 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 		public boolean isFiltered(IApiProblem problem) {
 			if (this.fFilterMap == null || this.fFilterMap.isEmpty()) return false;
 			String typeName = problem.getTypeName();
+			if (typeName == null || typeName.length() == 0) {
+				typeName = GLOBAL;
+			}
 			Set filters = (Set) this.fFilterMap.get(typeName);
-			if (filters == null) return false;
+			if (filters == null) {
+				return false;
+			}
 			for (Iterator iterator = filters.iterator(); iterator.hasNext();) {
 				IApiProblemFilter filter = (IApiProblemFilter) iterator.next();
 				if (problem.getCategory() == IApiProblem.CATEGORY_USAGE) {
 					// write our own matching implementation
 					return matchUsageProblem(filter.getUnderlyingProblem(), problem);
-				} else if (filter.getUnderlyingProblem().equals(problem)) {
+				} else if (matchFilters(filter.getUnderlyingProblem(), problem)) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		private boolean matchFilters(IApiProblem filterProblem, IApiProblem problem) {
+			if (problem.getId() == filterProblem.getId() && argumentsEquals(problem.getMessageArguments(), filterProblem.getMessageArguments())) {
+				String typeName = problem.getTypeName();
+				String filteredProblemTypeName = filterProblem.getTypeName();
+				if (typeName == null) {
+					if (filteredProblemTypeName != null) {
+						return false;
+					}
 					return true;
+				} else if (filteredProblemTypeName == null) {
+					return false;
 				}
+				return typeName.equals(filteredProblemTypeName);
 			}
 			return false;
 		}
@@ -414,13 +438,31 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 			return String.valueOf(writer.getBuffer());
 		}
 	}
+	/**
+	 * Stores integer counts for types of problems reported
+	 */
+	private static class ProblemCounter{
+		int total, warnings, errors;
+		public ProblemCounter() {
+			total = warnings = errors = 0;
+		}
+		public void addProblem(int severity){
+			total++;
+			if (severity == ApiPlugin.SEVERITY_ERROR){
+				errors++;
+			} else if (severity == ApiPlugin.SEVERITY_WARNING){
+				warnings++;
+			}
+		}
+	}
 	public static final String BUNDLE_VERSION = "bundleVersion"; //$NON-NLS-1$
 	public static final String COMPATIBILITY = "compatibility"; //$NON-NLS-1$
 	
 	private static final Summary[] NO_SUMMARIES = new Summary[0];
 	public static final String USAGE = "usage"; //$NON-NLS-1$
 
-	private ExcludedElements excludedElements;
+	private FilteredElements excludedElements;
+	private FilteredElements includedElements;
 	private String filters;
 	private Properties properties;
 
@@ -454,6 +496,7 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 		return new Summary(componentID, apiProblems);
 	}
 	private void dumpReport(Summary[] summaries, List bundlesNames) {
+		ProblemCounter counter = new ProblemCounter();
 		for (int i = 0, max = summaries.length; i < max; i++) {
 			Summary summary = summaries[i];
 			String contents = null;
@@ -463,6 +506,11 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 						|| this.excludedElements.containsPartialMatch(componentID))) {
 				continue;
 			}
+			if (this.includedElements != null && !this.includedElements.isEmpty()
+					&& !(this.includedElements.containsExactMatch(componentID)
+						|| this.includedElements.containsPartialMatch(componentID))) {
+				continue;
+			}
 			try {
 				Document document = Util.newDocument();
 				Element report = document.createElement(IApiXmlConstants.ELEMENT_API_TOOL_REPORT);
@@ -473,19 +521,19 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 				Element category = document.createElement(IApiXmlConstants.ATTR_CATEGORY);
 				category.setAttribute(IApiXmlConstants.ATTR_KEY, Integer.toString(IApiProblem.CATEGORY_COMPATIBILITY));
 				category.setAttribute(IApiXmlConstants.ATTR_VALUE, COMPATIBILITY);
-				insertAPIProblems(category, document, summary.apiCompatibilityProblems);
+				insertAPIProblems(category, document, summary.apiCompatibilityProblems, counter);
 				report.appendChild(category);
 
 				category = document.createElement(IApiXmlConstants.ATTR_CATEGORY);
 				category.setAttribute(IApiXmlConstants.ATTR_KEY, Integer.toString(IApiProblem.CATEGORY_USAGE));
 				category.setAttribute(IApiXmlConstants.ATTR_VALUE, USAGE);
-				insertAPIProblems(category, document, summary.apiUsageProblems);
+				insertAPIProblems(category, document, summary.apiUsageProblems, counter);
 				report.appendChild(category);
 				
 				category = document.createElement(IApiXmlConstants.ATTR_CATEGORY);
 				category.setAttribute(IApiXmlConstants.ATTR_KEY, Integer.toString(IApiProblem.CATEGORY_VERSION));
 				category.setAttribute(IApiXmlConstants.ATTR_VALUE, BUNDLE_VERSION);
-				insertAPIProblems(category, document, summary.apiBundleVersionProblems);
+				insertAPIProblems(category, document, summary.apiBundleVersionProblems, counter);
 				report.appendChild(category);
 
 				contents = Util.serializeDocument(document);
@@ -508,7 +556,8 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 				
 				for (Iterator iterator = bundlesNames.iterator(); iterator.hasNext();) {
 					String bundleName = (String) iterator.next();
-					if (this.excludedElements == null || !this.excludedElements.containsPartialMatch(bundleName)) {
+					if (this.excludedElements == null || !this.excludedElements.containsPartialMatch(bundleName)
+							&& (this.includedElements == null || this.includedElements.isEmpty() || this.includedElements.containsPartialMatch(bundleName))) {
 						Element bundle = document.createElement(IApiXmlConstants.ELEMENT_BUNDLE);
 						bundle.setAttribute(IApiXmlConstants.ATTR_NAME, bundleName);
 						report.appendChild(bundle);
@@ -524,6 +573,24 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 				saveReport("allNonApiBundles", contents, "report.xml"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		}
+		// Write out problem count file
+		String contents = null;
+		try {
+			Document document = Util.newDocument();
+			Element root = document.createElement(IApiXmlConstants.ELEMENT_REPORTED_COUNT);
+			document.appendChild(root);
+			root.setAttribute(IApiXmlConstants.ATTR_TOTAL, Integer.toString(counter.total));
+			root.setAttribute(IApiXmlConstants.ATTR_COUNT_WARNINGS, Integer.toString(counter.warnings));
+			root.setAttribute(IApiXmlConstants.ATTR_COUNT_ERRORS, Integer.toString(counter.errors));
+			contents = Util.serializeDocument(document);
+		} catch (DOMException e) {
+			throw new BuildException(e);
+		} catch (CoreException e) {
+			throw new BuildException(e);
+		}
+		if (contents != null) {
+			saveReport(null, contents, "counts.xml"); //$NON-NLS-1$
+		}
 	}
 	private void dumpSummaries(Summary[] summaries) {
 		for (int i = 0, max = summaries.length; i < max; i++) {
@@ -570,6 +637,11 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 			} else {
 				System.out.println("No exclude list location"); //$NON-NLS-1$
 			}
+			if (this.includeListLocation != null) {
+				System.out.println("include list location : " + this.includeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No include list location"); //$NON-NLS-1$
+			}
 		}
 		// unzip reference
 		long time = 0;
@@ -585,17 +657,25 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 		}
 		// run the comparison
 		// create baseline for the reference
-		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, getInstallDir(referenceInstallDir), this.eeFileLocation);
-		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, getInstallDir(baselineInstallDir), this.eeFileLocation);
+		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, referenceInstallDir.getAbsolutePath(), this.eeFileLocation);
+		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, baselineInstallDir.getAbsolutePath(), this.eeFileLocation);
 		
 		if (this.excludeListLocation != null) {
-			this.excludedElements = CommonUtilsTask.initializeExcludedElement(this.excludeListLocation, currentBaseline, this.debug);
+			this.excludedElements = CommonUtilsTask.initializeFilteredElements(this.excludeListLocation, currentBaseline, this.debug);
 			if (this.debug) {
 				System.out.println("===================================================================================="); //$NON-NLS-1$
 				System.out.println("Excluded elements list:"); //$NON-NLS-1$
 				System.out.println(this.excludedElements);
 			}
 		}
+		if (this.includeListLocation != null) {
+			this.includedElements = CommonUtilsTask.initializeFilteredElements(this.includeListLocation, currentBaseline, this.debug);
+			if (this.debug) {
+				System.out.println("===================================================================================="); //$NON-NLS-1$
+				System.out.println("Included elements list:"); //$NON-NLS-1$
+				System.out.println(this.includedElements);
+			}
+		}
 		if (this.debug) {
 			System.out.println("Creation of both baselines : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
 			time = System.currentTimeMillis();
@@ -606,7 +686,6 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 		try {
 			IApiComponent[] apiComponents = currentBaseline.getApiComponents();
 			int length = apiComponents.length;
-			int apiToolsComponents = 0;
 			Set visitedApiComponentNames = new HashSet();
 			for (int i = 0; i < length; i++) {
 				IApiComponent apiComponent = apiComponents[i];
@@ -619,7 +698,6 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 					allNonApiBundles.add(name);
 					continue;
 				}
-				apiToolsComponents++;
 				allApiBundles.add(name);
 				BaseApiAnalyzer analyzer = new BaseApiAnalyzer();
 				try {
@@ -730,9 +808,10 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 	 *
 	 * @param document the given xml document
 	 * @param problems the given problem to dump into the document
+	 * @param counter a counter object to which the reported problems can be added
 	 * @return an element that contains all the api problem nodes or null if an error occured
 	 */
-	private void insertAPIProblems(Element root, Document document, List problems) throws CoreException {
+	private void insertAPIProblems(Element root, Document document, List problems, ProblemCounter counter) throws CoreException {
 		Element apiProblems = document.createElement(IApiXmlConstants.ELEMENT_API_PROBLEMS);
 		root.appendChild(apiProblems);
 		Element element = null;
@@ -746,6 +825,8 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 		});
 		for(Iterator iterator = problems.iterator(); iterator.hasNext(); ) {
 			IApiProblem problem = (IApiProblem) iterator.next();
+			int severity = getSeverity(problem);
+			counter.addProblem(severity);
 			element = document.createElement(IApiXmlConstants.ELEMENT_API_PROBLEM);
 			element.setAttribute(IApiXmlConstants.ATTR_TYPE_NAME, String.valueOf(problem.getTypeName()));
 			element.setAttribute(IApiXmlConstants.ATTR_ID, Integer.toString(problem.getId()));
@@ -753,7 +834,7 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 			element.setAttribute(IApiXmlConstants.ATTR_CHAR_START, Integer.toString(problem.getCharStart()));
 			element.setAttribute(IApiXmlConstants.ATTR_CHAR_END, Integer.toString(problem.getCharEnd()));
 			element.setAttribute(IApiXmlConstants.ATTR_ELEMENT_KIND, Integer.toString(problem.getElementKind()));
-			element.setAttribute(IApiXmlConstants.ATTR_SEVERITY, Integer.toString(getSeverity(problem)));
+			element.setAttribute(IApiXmlConstants.ATTR_SEVERITY, Integer.toString(severity));
 			element.setAttribute(IApiXmlConstants.ATTR_KIND, Integer.toString(problem.getKind()));
 			element.setAttribute(IApiXmlConstants.ATTR_FLAGS, Integer.toString(problem.getFlags()));
 			element.setAttribute(IApiXmlConstants.ATTR_MESSAGE, problem.getMessage());
@@ -784,6 +865,7 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 			apiProblems.appendChild(element);
 		}
 	}
+	
 	/**
 	 * By default, we return a warning severity.
 	 * @param problem the given problem
@@ -852,11 +934,40 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 	public void setExcludeList(String excludeListLocation) {
 		this.excludeListLocation = excludeListLocation;
 	}
+	
+	/**
+	 * Set the include list location.
+	 * 
+	 * <p>The include list is used to know what bundles should included from the xml report generated by the task
+	 * execution. Lines starting with '#' are ignored from the included elements.</p>
+	 * <p>The format of the include list file looks like this:</p>
+	 * <pre>
+	 * # DOC BUNDLES
+	 * org.eclipse.jdt.doc.isv
+	 * org.eclipse.jdt.doc.user
+	 * org.eclipse.pde.doc.user
+	 * org.eclipse.platform.doc.isv
+	 * org.eclipse.platform.doc.user
+	 * # NON-ECLIPSE BUNDLES
+	 * com.ibm.icu
+	 * com.jcraft.jsch
+	 * javax.servlet
+	 * javax.servlet.jsp
+	 * ...
+	 * </pre>
+	 * <p>The location is set using an absolute path.</p>
+	 *
+	 * @param includeListLocation the given location for the included list file
+	 */
+	public void setIncludeList(String includeListLocation) {
+		this.includeListLocation = includeListLocation;
+	}
+	
 	/**
 	 * Set the root directory of API filters to use during the analysis.
 	 * 
 	 * <p>The argument is the root directory of the .api_filters files that should be used to filter potential
-	 * problems created by the api tooling analysis. The root needs to contain the following structure:</p>
+	 * problems created by the API Tools analysis. The root needs to contain the following structure:</p>
 	 * <pre>
 	 * root
 	 *  |
@@ -957,7 +1068,7 @@ public class APIToolsAnalysisTask extends CommonUtilsTask {
 	 * to be reported. Each sub-folder contains a file called "report.xml". </p>
 	 * 
 	 * <p>A special folder called "allNonApiBundles" is also created in this folder that contains a xml file called
-	 * "report.xml". This file lists all the bundles that are not using the api tooling nature.</p>
+	 * "report.xml". This file lists all the bundles that are not using the API Tools nature.</p>
 	 * 
 	 * @param baselineLocation the given location for the reference baseline to analyze
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/AnalysisReportConversionTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/AnalysisReportConversionTask.java
index 53ee6e9..fa7d551 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/AnalysisReportConversionTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/AnalysisReportConversionTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,30 @@ public class AnalysisReportConversionTask extends Task {
 			this.message = message;
 			this.severity = severity;
 		}
+		public String getHtmlMessage() {
+			StringBuffer buffer = new StringBuffer();
+			char[] chars = this.message.toCharArray();
+			for (int i = 0, max = chars.length; i < max; i++) {
+				char character = chars[i];
+				switch(character) {
+					case '<':
+						buffer.append("<"); //$NON-NLS-1$
+						break;
+					case '>':
+						buffer.append(">"); //$NON-NLS-1$
+						break;
+					case '&':
+						buffer.append("&"); //$NON-NLS-1$
+						break;
+					case '"':
+						buffer.append("""); //$NON-NLS-1$
+						break;
+					default:
+						buffer.append(character);
+				}
+			}
+			return String.valueOf(buffer);
+		}
 		public String toString() {
 			StringBuffer buffer = new StringBuffer();
 			buffer.append("Problem : ").append(this.message).append(' ').append(this.severity); //$NON-NLS-1$
@@ -72,31 +96,39 @@ public class AnalysisReportConversionTask extends Task {
 				String name, Attributes attributes) throws SAXException {
 			if (IApiXmlConstants.ELEMENT_API_TOOL_REPORT.equals(name)) {
 				String componentID = attributes.getValue(IApiXmlConstants.ATTR_COMPONENT_ID);
-				if (debug) {
+				if (this.debug) {
 					System.out.println("component id : " + String.valueOf(componentID)); //$NON-NLS-1$
 				}
 				this.report = new Report(componentID);
 			} else if (IApiXmlConstants.ATTR_CATEGORY.equals(name)) {
 				this.category = attributes.getValue(IApiXmlConstants.ATTR_VALUE);
-				if (debug) {
+				if (this.debug) {
 					System.out.println("category : " + this.category); //$NON-NLS-1$
 				}
 			} else if (IApiXmlConstants.ELEMENT_API_PROBLEM.equals(name)) {
 				String message = attributes.getValue(IApiXmlConstants.ATTR_MESSAGE);
-				if (debug) {
+				if (this.debug) {
 					System.out.println("problem message : " + message); //$NON-NLS-1$
 				}
 				int severity = Integer.parseInt(attributes.getValue(IApiXmlConstants.ATTR_SEVERITY));
-				if (debug) {
+				if (this.debug) {
 					System.out.println("problem severity : " + severity); //$NON-NLS-1$
 				}
 				this.report.addProblem(this.category, new Problem(message, severity));
 			} else if (IApiXmlConstants.ELEMENT_BUNDLE.equals(name)) {
 				String bundleName = attributes.getValue(IApiXmlConstants.ATTR_NAME);
-				if (debug) {
+				if (this.debug) {
 					System.out.println("bundle name : " + bundleName); //$NON-NLS-1$
 				}
 				this.report.addNonApiBundles(bundleName);
+			} else if (this.debug) {
+				if (!IApiXmlConstants.ELEMENT_PROBLEM_MESSAGE_ARGUMENTS.equals(name)
+						&& !IApiXmlConstants.ELEMENT_PROBLEM_MESSAGE_ARGUMENT.equals(name)
+						&& !IApiXmlConstants.ELEMENT_API_PROBLEMS.equals(name)
+						&& !IApiXmlConstants.ELEMENT_PROBLEM_EXTRA_ARGUMENT.equals(name)
+						&& !IApiXmlConstants.ELEMENT_PROBLEM_EXTRA_ARGUMENTS.equals(name)) {
+					System.out.println("unknown element : " + String.valueOf(name)); //$NON-NLS-1$
+				}
 			}
 		}
 	}
@@ -180,7 +212,7 @@ public class AnalysisReportConversionTask extends Task {
 		}
 		
 		public String toString() {
-			return MessageFormat.format("{0} : compatibility {1}, api usage {2}, bundler version {3}, link {4}", //$NON-NLS-1$
+			return MessageFormat.format("{0} : compatibility {1}, api usage {2}, bundle version {3}, link {4}", //$NON-NLS-1$
 					new String[] {
 						this.componentID,
 						Integer.toString(this.compatibilityNumber),
@@ -312,18 +344,18 @@ public class AnalysisReportConversionTask extends Task {
 				if ((i % 2) == 0) {
 					switch(problem.severity) {
 						case ApiPlugin.SEVERITY_ERROR :
-							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_even_error, new String[] { problem.message }));
+							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_even_error, new String[] { problem.getHtmlMessage() }));
 							break;
 						case ApiPlugin.SEVERITY_WARNING :
-							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_even_warning, new String[] { problem.message }));
+							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_even_warning, new String[] { problem.getHtmlMessage() }));
 					}
 				} else { 
 					switch(problem.severity) {
 						case ApiPlugin.SEVERITY_ERROR :
-							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_odd_error, new String[] { problem.message }));
+							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_odd_error, new String[] { problem.getHtmlMessage() }));
 							break;
 						case ApiPlugin.SEVERITY_WARNING :
-							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_odd_warning, new String[] { problem.message }));
+							writer.println(MessageFormat.format(Messages.fullReportTask_problementry_odd_warning, new String[] { problem.getHtmlMessage() }));
 					}
 				}
 			}
@@ -429,6 +461,13 @@ public class AnalysisReportConversionTask extends Task {
 					ConverterDefaultHandler defaultHandler = new ConverterDefaultHandler(this.debug);
 					parser.parse(file, defaultHandler);
 					Report report = defaultHandler.getReport();
+					if (report == null) {
+						// ignore that file. It could be the counts.xml file.
+						if (this.debug) {
+							System.out.println("Skipped file : " + file.getAbsolutePath()); //$NON-NLS-1$
+						}
+						continue;
+					}
 					dumpReport(file, report);
 					if (report.isNonApiBundlesReport()) {
 						nonApiBundleSummary = new Summary(report);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiConsumerUseReportConversionTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiConsumerUseReportConversionTask.java
new file mode 100644
index 0000000..4695bf3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiConsumerUseReportConversionTask.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.tasks;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.search.ConsumerReportConvertor;
+import org.eclipse.pde.api.tools.internal.search.UseReportConverter;
+import org.eclipse.pde.api.tools.internal.util.Util;
+
+/**
+ * Task to convert a report generated from {@link ApiUseTask} to HTML.  References to API/internals are grouped
+ * by the bundle that used them (Consumers).
+ * 
+ * @since 1.0.300
+ * @see ApiUseTask
+ */
+public class ApiConsumerUseReportConversionTask extends CommonUtilsTask {
+
+	private String xmlReportsLocation = null;
+	private String htmlReportsLocation = null;
+	private String xsltFileLocation = null;
+	private String[] filterPatterns = null;
+	private String[] toPatterns = null;
+	
+	/**
+	 * Set the debug value.
+	 * <p>The possible values are: <code>true</code>, <code>false</code></p>
+	 * <p>Default is <code>false</code>.</p>
+	 *
+	 * @param debugValue the given debug value
+	 */
+	public void setDebug(String debugValue) {
+		this.debug = Boolean.toString(true).equals(debugValue); 
+	}
+	/**
+	 * Set the location where the html reports are generated.
+	 * 
+	 * <p>This is optional. If not set, the html files are created in the same folder as the
+	 * xml files.</p>
+	 * <p>The location is set using an absolute path.</p>
+	 * 
+	 * @param htmlFilesLocation the given the location where the html reports are generated
+	 */
+	public void setHtmlFiles(String htmlFilesLocation) {
+		this.htmlReportsLocation = htmlFilesLocation;
+	}
+	/**
+	 * Set the location where the xml reports are retrieved.
+	 * 
+	 * <p>The location is set using an absolute path.</p>
+	 *
+	 * @param xmlFilesLocation the given location to retrieve the xml reports
+	 */
+	public void setXmlFiles(String xmlFilesLocation) {
+		this.xmlReportsLocation = xmlFilesLocation;
+	}
+	
+	/**
+	 * Set the group of {@link String} patterns to use as heuristics to filter
+	 * references to names matching any of the given patterns during the report conversion
+	 * @param patterns
+	 */
+	public void setToFilterPatterns(String patterns) {
+		this.toPatterns = parsePatterns(patterns);
+	}
+	
+	/**
+	 * Set the group of {@link String} patterns to use as heuristics to filter
+	 * references from names matching any of the given patterns during the report conversion
+	 * @param patterns
+	 */
+	public void setFilterPatterns(String patterns) {
+		this.filterPatterns = parsePatterns(patterns);	
+	}
+	
+	/**
+	 * Sets the location of the XSLT file to use in the conversion of the XML
+	 * the HTML.
+	 * 
+	 * <p>This is optional. If none is specified, then a default one is used.</p>
+	 * 
+	 * <p>The location is an absolute path.</p>
+	 * 
+	 * @param xsltFileLocation
+	 */
+	public void setXSLTFile(String xsltFileLocation) {
+		this.xsltFileLocation = xsltFileLocation;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.apache.tools.ant.Task#execute()
+	 */
+	public void execute() throws BuildException {
+		if (this.debug) {
+			System.out.println("XML report location: " + this.xmlReportsLocation); //$NON-NLS-1$
+			System.out.println("HTML report location: " + this.htmlReportsLocation); //$NON-NLS-1$
+			if (this.xsltFileLocation == null) {
+				System.out.println("No XSLT file specified: using default"); //$NON-NLS-1$}
+			} else {
+				System.out.println("XSLT file location: " + this.xsltFileLocation); //$NON-NLS-1$}
+			}
+		}
+		try {
+			Util.delete(new File(this.htmlReportsLocation));
+			ConsumerReportConvertor converter = new ConsumerReportConvertor(this.htmlReportsLocation, this.xmlReportsLocation, this.toPatterns, this.filterPatterns);
+			UseReportConverter.setDebug(this.debug);
+			converter.convert(this.xsltFileLocation, null);
+			File index = converter.getReportIndex();
+			System.out.println(NLS.bind(
+					Messages.ApiUseReportConversionTask_conversion_complete,
+					index.getAbsolutePath()));
+		}
+		catch(Exception e) {
+			throw new BuildException(e);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGenerationTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGenerationTask.java
index 3fde81a..c45a8af 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGenerationTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGenerationTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -109,6 +109,7 @@ public class ApiFileGenerationTask extends Task {
 	String binaryLocations;
 	String manifests;
 	String sourceLocations;
+	boolean allowNonApiProject = false;
 	Set apiPackages = new HashSet(0);
 
 	/**
@@ -153,6 +154,18 @@ public class ApiFileGenerationTask extends Task {
 	public void setBinary(String binaryLocations) {
 		this.binaryLocations = binaryLocations;
 	}
+	
+	/**
+	 * Set if the task should scan the project even if it is not API tools enabled.
+	 * <p>The possible values are: <code>true</code> or <code>false</code></p>
+	 * <p>Default is: <code>false</code>.</p>
+	 * @since 1.2
+	 * @param allow
+	 */
+	public void setAllowNonApiProject(String allow) {
+		this.allowNonApiProject = Boolean.valueOf(allow).booleanValue();
+	}
+	
 	/**
 	 * Set the debug value.
 	 * <p>The possible values are: <code>true</code>, <code>false</code></p>
@@ -236,7 +249,8 @@ public class ApiFileGenerationTask extends Task {
 		// check if the project contains the api tools nature
 		File dotProjectFile = new File(root, ".project"); //$NON-NLS-1$
 		
-		if (!isAPIToolsNature(dotProjectFile)) {
+		if(!this.allowNonApiProject && !isAPIToolsNature(dotProjectFile)) {
+			System.err.println("The project does not have an API Tools nature so a api_description file will not be generated"); //$NON-NLS-1$
 			return;
 		}
 		// check if the .api_description file exists
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiMigrationTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiMigrationTask.java
index 98ee673..6b992f7 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiMigrationTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiMigrationTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.search.ReferenceLookupVisitor;
 import org.eclipse.pde.api.tools.internal.search.SkippedComponent;
 import org.eclipse.pde.api.tools.internal.search.UseScanParser;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -109,9 +110,9 @@ public final class ApiMigrationTask extends CommonUtilsTask {
 	 * to be reported. Each sub-folder contains a file called "report.xml". </p>
 	 * 
 	 * <p>A special folder called "allNonApiBundles" is also created in this folder that contains a xml file called
-	 * "report.xml". This file lists all the bundles that are not using the api tooling nature.</p>
+	 * "report.xml". This file lists all the bundles that are not using the API Tools nature.</p>
 	 * 
-	 * @param baselineLocation the given location for the reference baseline to analyze
+	 * @param reportlocation the given location for the reference baseline to analyze
 	 */
 	public void setReport(String reportlocation) {
 		this.reportLocation = reportlocation;
@@ -122,10 +123,7 @@ public final class ApiMigrationTask extends CommonUtilsTask {
 	 * migration candidate. This can be the root directory containing 'xml' and 'html' subdirectories
 	 * or the 'xml' directory itself.
 	 * 
-	 * <p>A special folder called "allNonApiBundles" is also created in this folder that contains a xml file called
-	 * "report.xml". This file lists all the bundles that are not using the api tooling nature.</p>
-	 * 
-	 * @param baselineLocation the given location for the reference baseline to analyze
+	 * @param scanLocation the location of an existing API use scan
 	 */
 	public void setUseScan(String scanLocation) {
 		this.scanLocation = scanLocation;
@@ -230,6 +228,23 @@ public final class ApiMigrationTask extends CommonUtilsTask {
 			ReferenceLookupVisitor lookup = new ReferenceLookupVisitor(baseline, this.reportLocation);
 			lookup.setAnalysisScope(scopepattern);
 			lookup.setTargetScope(referencepattern);
+			
+			FilteredElements excludedElements = CommonUtilsTask.initializeFilteredElements(this.excludeListLocation, baseline, this.debug);
+			if (this.debug) {
+				System.out.println("===================================================================================="); //$NON-NLS-1$
+				System.out.println("Excluded elements list:"); //$NON-NLS-1$
+				System.out.println(excludedElements);
+			}
+			lookup.setExcludedElements(excludedElements);
+
+			FilteredElements includedElements = CommonUtilsTask.initializeFilteredElements(this.includeListLocation, baseline, this.debug);
+			if (this.debug) {
+				System.out.println("===================================================================================="); //$NON-NLS-1$
+				System.out.println("Included elements list:"); //$NON-NLS-1$
+				System.out.println(includedElements);
+			}
+			lookup.setIncludedElements(includedElements);
+
 			UseScanParser parser = new UseScanParser();
 			parser.parse(file.getAbsolutePath(), new NullProgressMonitor(), lookup);
 		}
@@ -303,7 +318,7 @@ public final class ApiMigrationTask extends CommonUtilsTask {
 			time = System.currentTimeMillis();
 			System.out.println("Creating '"+name+"' baseline..."); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-		IApiBaseline baseline = createBaseline(name, getInstallDir(installdir), this.eeFileLocation);
+		IApiBaseline baseline = createBaseline(name, installdir.getAbsolutePath(), this.eeFileLocation);
 		if (this.debug) {
 			System.out.println("done in: " + (System.currentTimeMillis() - time) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
@@ -355,4 +370,60 @@ public final class ApiMigrationTask extends CommonUtilsTask {
 			System.out.println("-----------------------------------------------------------------------------------------------------"); //$NON-NLS-1$
 		}
 	}
+	
+	/**
+	 * Set the exclude list location.
+	 * 
+	 * <p>The exclude list is used to know what bundles should excluded from the xml report generated by the task
+	 * execution. Lines starting with '#' are ignored from the excluded elements.</p>
+	 * <p>The format of the exclude list file looks like this:</p>
+	 * <pre>
+	 * # DOC BUNDLES
+	 * org.eclipse.jdt.doc.isv
+	 * org.eclipse.jdt.doc.user
+	 * org.eclipse.pde.doc.user
+	 * org.eclipse.platform.doc.isv
+	 * org.eclipse.platform.doc.user
+	 * # NON-ECLIPSE BUNDLES
+	 * com.ibm.icu
+	 * com.jcraft.jsch
+	 * javax.servlet
+	 * javax.servlet.jsp
+	 * ...
+	 * </pre>
+	 * <p>The location is set using an absolute path.</p>
+	 *
+	 * @param excludeListLocation the given location for the excluded list file
+	 */
+	public void setExcludeList(String excludeListLocation) {
+		this.excludeListLocation = excludeListLocation;
+	}
+	
+	/**
+	 * Set the include list location.
+	 * 
+	 * <p>The include list is used to know what bundles should included from the xml report generated by the task
+	 * execution. Lines starting with '#' are ignored from the included elements.</p>
+	 * <p>The format of the include list file looks like this:</p>
+	 * <pre>
+	 * # DOC BUNDLES
+	 * org.eclipse.jdt.doc.isv
+	 * org.eclipse.jdt.doc.user
+	 * org.eclipse.pde.doc.user
+	 * org.eclipse.platform.doc.isv
+	 * org.eclipse.platform.doc.user
+	 * # NON-ECLIPSE BUNDLES
+	 * com.ibm.icu
+	 * com.jcraft.jsch
+	 * javax.servlet
+	 * javax.servlet.jsp
+	 * ...
+	 * </pre>
+	 * <p>The location is set using an absolute path.</p>
+	 *
+	 * @param includeListLocation the given location for the included list file
+	 */
+	public void setIncludeList(String includeListLocation) {
+		this.includeListLocation = includeListLocation;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseReportConversionTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseReportConversionTask.java
index 33f881e..af25ca1 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseReportConversionTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseReportConversionTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseTask.java
index f861e5b..b94c505 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiUseTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,6 +35,7 @@ import org.eclipse.pde.api.tools.internal.search.SkippedComponent;
 import org.eclipse.pde.api.tools.internal.search.UseMetadata;
 import org.eclipse.pde.api.tools.internal.search.UseSearchRequestor;
 import org.eclipse.pde.api.tools.internal.search.XmlSearchReporter;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 import com.ibm.icu.text.DateFormat;
@@ -97,6 +98,16 @@ public final class ApiUseTask extends CommonUtilsTask {
 	private String[] archivePatterns = null;
 	
 	/**
+	 * List of elements excluded from the scope
+	 */
+	private FilteredElements excludedElements = null;
+	
+	/**
+	 * List of elements explicitly limiting the scope
+	 */
+	private FilteredElements includedElements = null;
+	
+	/**
 	 * Set the location of the current product you want to search.
 	 * 
 	 * <p>It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to 
@@ -146,7 +157,7 @@ public final class ApiUseTask extends CommonUtilsTask {
 	 * to be reported. Each sub-folder contains a file called "report.xml". </p>
 	 * 
 	 * <p>A special folder called "allNonApiBundles" is also created in this folder that contains a xml file called
-	 * "report.xml". This file lists all the bundles that are not using the api tooling nature.</p>
+	 * "report.xml". This file lists all the bundles that are not using the API Tools nature.</p>
 	 * 
 	 * @param baselineLocation the given location for the reference baseline to analyze
 	 */
@@ -250,7 +261,7 @@ public final class ApiUseTask extends CommonUtilsTask {
 			throw new BuildException(String.valueOf(out.getBuffer()));
 		}
 		//stop if we don't want to see anything
-		if(!considerapi && !considerinternal) {
+		if(!considerapi && !considerinternal && !considerillegaluse) {
 			throw new BuildException(Messages.UseTask_no_scan_both_types_not_searched_for);
 		}
 	}
@@ -275,6 +286,7 @@ public final class ApiUseTask extends CommonUtilsTask {
 				getDescription());
 		IApiBaseline baseline = getBaseline(CURRENT_BASELINE_NAME, this.currentBaselineLocation);
 		IApiSearchReporter reporter = new XmlSearchReporter(this.reportLocation, this.debug);
+		
 		try {
 			Set ids = new HashSet();
 			TreeSet scope = new TreeSet(Util.componentsorter);
@@ -312,6 +324,7 @@ public final class ApiUseTask extends CommonUtilsTask {
 			}
 			reporter.reportNotSearched((IApiElement[]) this.notsearched.toArray(new IApiElement[this.notsearched.size()]));
 			reporter.reportMetadata(data);
+			reporter.reportCounts();
 		}
 	}
 	
@@ -348,24 +361,49 @@ public final class ApiUseTask extends CommonUtilsTask {
 	 * @throws CoreException
 	 */
 	private void getContext(IApiBaseline baseline, Set ids, Set scope) throws CoreException {
+
+		excludedElements = CommonUtilsTask.initializeFilteredElements(this.excludeListLocation, baseline, this.debug);
+		if (this.debug) {
+			System.out.println("===================================================================================="); //$NON-NLS-1$
+			System.out.println("Excluded elements list:"); //$NON-NLS-1$
+			System.out.println(excludedElements);
+		}
+
+		includedElements = CommonUtilsTask.initializeFilteredElements(this.includeListLocation, baseline, this.debug);
+		if (this.debug) {
+			System.out.println("===================================================================================="); //$NON-NLS-1$
+			System.out.println("Included elements list:"); //$NON-NLS-1$
+			System.out.println(includedElements);
+		}
+
 		IApiComponent[] components = baseline.getApiComponents();
 		this.notsearched = new TreeSet(Util.componentsorter);
-		Pattern pattern = null, pattern2 = null;
+		Pattern refPattern = null, scopePattern = null;
 		if(this.referencepattern != null) {
-			pattern = Pattern.compile(this.referencepattern);
+			refPattern = Pattern.compile(this.referencepattern);
 		}
 		if(this.scopepattern != null) {
-			pattern2 = Pattern.compile(this.scopepattern);
+			scopePattern = Pattern.compile(this.scopepattern);
 		}
 		for (int i = 0; i < components.length; i++) {
-			if(acceptComponent(components[i], pattern, true)) {
-				ids.add(components[i].getSymbolicName());
+			String symbolicName = components[i].getSymbolicName();
+			boolean skip = false;
+			if (!includedElements.isEmpty() && !(includedElements.containsExactMatch(symbolicName) || includedElements.containsPartialMatch(symbolicName))){
+				skip = true;
 			}
-			if(acceptComponent(components[i], pattern2, false)) {
-				scope.add(components[i]);
+			if (!skip && (excludedElements.containsExactMatch(symbolicName) || excludedElements.containsPartialMatch(symbolicName))) {
+				skip = true;
+			}
+			if (!skip){
+				if(acceptComponent(components[i], refPattern, true)) {
+					ids.add(symbolicName);
+				}
+				if(acceptComponent(components[i], scopePattern, false)) {
+					scope.add(components[i]);
+				}
 			}
 			else {
-				this.notsearched.add(new SkippedComponent(components[i].getSymbolicName(), components[i].getVersion(), components[i].getErrors()));
+				this.notsearched.add(new SkippedComponent(symbolicName, components[i].getVersion(), components[i].getErrors()));
 			}
 		}
 	}
@@ -413,7 +451,7 @@ public final class ApiUseTask extends CommonUtilsTask {
 			time = System.currentTimeMillis();
 			System.out.println("Creating '"+name+"' baseline..."); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-		IApiBaseline baseline = createBaseline(name, getInstallDir(installdir), this.eeFileLocation);
+		IApiBaseline baseline = createBaseline(name, installdir.getAbsolutePath(), this.eeFileLocation);
 		if (this.debug) {
 			System.out.println("done in: " + (System.currentTimeMillis() - time) + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
@@ -452,6 +490,16 @@ public final class ApiUseTask extends CommonUtilsTask {
 			System.out.println("Searching for API references : " + this.considerapi); //$NON-NLS-1$
 			System.out.println("Searching for internal references : " + this.considerinternal); //$NON-NLS-1$
 			System.out.println("Searching for illegal API use : "+ this.considerillegaluse); //$NON-NLS-1$
+			if (this.excludeListLocation != null) {
+				System.out.println("exclude list location : " + this.excludeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No exclude list location"); //$NON-NLS-1$
+			}
+			if (this.includeListLocation != null) {
+				System.out.println("include list location : " + this.includeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No include list location"); //$NON-NLS-1$
+			}
 			if(this.scopepattern == null) {
 				System.out.println("No scope pattern defined - searching all bundles"); //$NON-NLS-1$
 			}
@@ -467,4 +515,60 @@ public final class ApiUseTask extends CommonUtilsTask {
 			System.out.println("-----------------------------------------------------------------------------------------------------"); //$NON-NLS-1$
 		}
 	}
+	
+	/**
+	 * Set the exclude list location.
+	 * 
+	 * <p>The exclude list is used to know what bundles should excluded from the xml report generated by the task
+	 * execution. Lines starting with '#' are ignored from the excluded elements.</p>
+	 * <p>The format of the exclude list file looks like this:</p>
+	 * <pre>
+	 * # DOC BUNDLES
+	 * org.eclipse.jdt.doc.isv
+	 * org.eclipse.jdt.doc.user
+	 * org.eclipse.pde.doc.user
+	 * org.eclipse.platform.doc.isv
+	 * org.eclipse.platform.doc.user
+	 * # NON-ECLIPSE BUNDLES
+	 * com.ibm.icu
+	 * com.jcraft.jsch
+	 * javax.servlet
+	 * javax.servlet.jsp
+	 * ...
+	 * </pre>
+	 * <p>The location is set using an absolute path.</p>
+	 *
+	 * @param excludeListLocation the given location for the excluded list file
+	 */
+	public void setExcludeList(String excludeListLocation) {
+		this.excludeListLocation = excludeListLocation;
+	}
+	
+	/**
+	 * Set the include list location.
+	 * 
+	 * <p>The include list is used to know what bundles should included from the xml report generated by the task
+	 * execution. Lines starting with '#' are ignored from the included elements.</p>
+	 * <p>The format of the include list file looks like this:</p>
+	 * <pre>
+	 * # DOC BUNDLES
+	 * org.eclipse.jdt.doc.isv
+	 * org.eclipse.jdt.doc.user
+	 * org.eclipse.pde.doc.user
+	 * org.eclipse.platform.doc.isv
+	 * org.eclipse.platform.doc.user
+	 * # NON-ECLIPSE BUNDLES
+	 * com.ibm.icu
+	 * com.jcraft.jsch
+	 * javax.servlet
+	 * javax.servlet.jsp
+	 * ...
+	 * </pre>
+	 * <p>The location is set using an absolute path.</p>
+	 *
+	 * @param includeListLocation the given location for the included list file
+	 */
+	public void setIncludeList(String includeListLocation) {
+		this.includeListLocation = includeListLocation;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java
index 8754e92..846abdc 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,20 +25,18 @@ import org.eclipse.pde.api.tools.internal.model.ApiModelFactory;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
-import org.eclipse.pde.api.tools.internal.util.ExcludedElements;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 import org.eclipse.pde.api.tools.internal.util.TarException;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
- * Common code for api tooling ant task.
+ * Common code for API Tools Ant tasks.
  * 
  * @since 1.0.0
- * @noextend This class is not intended to be subclassed by clients.
+ * @noextend This class is not intended to be sub-classed by clients.
  */
 public abstract class CommonUtilsTask extends Task {
-	private static final String CVS_FOLDER_NAME = "CVS"; //$NON-NLS-1$
 	private static final String ECLIPSE_FOLDER_NAME = "eclipse"; //$NON-NLS-1$
-	private static final String PLUGINS_FOLDER_NAME = "plugins"; //$NON-NLS-1$
 
 	protected static final String CURRENT = "currentBaseline"; //$NON-NLS-1$
 	protected static final String CURRENT_BASELINE_NAME = "current_baseline"; //$NON-NLS-1$
@@ -50,17 +48,20 @@ public abstract class CommonUtilsTask extends Task {
 	protected String currentBaselineLocation;
 	protected String referenceBaselineLocation;
 	protected String excludeListLocation;
+	protected String includeListLocation;
 	
 	protected String reportLocation;
 	
 	/**
-	 * Creates a baseline with the given name and ee file location in the given directory
-	 * @param baselineName
-	 * @param dir
-	 * @param eeFileLocation
+	 * Creates a baseline with the given name and EE file location in the given directory.  The installLocation
+	 * will be searched for bundles to add as API components.
+	 * 
+	 * @param baselineName Name to use for the new baseline
+	 * @param installLocation Location of an installation or directory of bundles to add as API components
+	 * @param eeFileLocation execution environment location or <code>null</code> to have the EE determined from API components
 	 * @return a new {@link IApiBaseline}
 	 */
-	protected IApiBaseline createBaseline(String baselineName, File dir, String eeFileLocation) {
+	protected IApiBaseline createBaseline(String baselineName, String installLocation, String eeFileLocation) {
 		try {
 			IApiBaseline baseline = null;
 			if (ApiPlugin.isRunningInFramework()) {
@@ -70,26 +71,11 @@ public abstract class CommonUtilsTask extends Task {
 			} else {
 				baseline = ApiModelFactory.newApiBaseline(baselineName, Util.getEEDescriptionFile());
 			}
-			// create a component for each jar/directory in the folder
-			File[] files = dir.listFiles();
-			if(files == null) {
-				throw new BuildException(
-						NLS.bind(Messages.directoryIsEmpty,
-						dir.getAbsolutePath()));
-			}
-			List components = new ArrayList();
-			for (int i = 0; i < files.length; i++) {
-				File bundle = files[i];
-				if (!bundle.getName().equals(CVS_FOLDER_NAME)) {
-					// ignore CVS folder
-					IApiComponent component = ApiModelFactory.newApiComponent(baseline, bundle.getAbsolutePath());
-					if(component != null) {
-						components.add(component);
-					}
-				}
-			}
 			
-			baseline.addApiComponents((IApiComponent[]) components.toArray(new IApiComponent[components.size()]));
+			IApiComponent[] components = ApiModelFactory.addComponents(baseline, installLocation, null);
+			if (components.length == 0){			
+				throw new BuildException(NLS.bind(Messages.directoryIsEmpty, installLocation));
+			}
 			return baseline;
 		} catch (CoreException e) {
 			e.printStackTrace();
@@ -103,7 +89,7 @@ public abstract class CommonUtilsTask extends Task {
 	 * @param folder
 	 */
 	protected void deleteBaseline(String referenceLocation, File folder) {
-		if (isArchive(referenceLocation)) {
+		if (Util.isArchive(referenceLocation)) {
 			Util.delete(folder.getParentFile());
 		}
 	}
@@ -120,7 +106,7 @@ public abstract class CommonUtilsTask extends Task {
 		if (!locationFile.exists()) {
 			throw new BuildException(NLS.bind(Messages.fileDoesnotExist, location));
 		}
-		if (isArchive(location)) {
+		if (Util.isArchive(location)) {
 			File tempDir = new File(System.getProperty("java.io.tmpdir")); //$NON-NLS-1$
 			File installDir = new File(tempDir, installDirName);
 			if (installDir.exists()) {
@@ -139,9 +125,9 @@ public abstract class CommonUtilsTask extends Task {
 								installDir.getAbsolutePath()));
 			}
 			try {
-				if (isZipJarFile(location)) {
+				if (Util.isZipJarFile(location)) {
 					Util.unzip(location, installDir.getAbsolutePath());
-				} else if (isTGZFile(location)) {
+				} else if (Util.isTGZFile(location)) {
 					Util.guntar(location, installDir.getAbsolutePath());
 				}
 			} catch (IOException e) {
@@ -168,68 +154,22 @@ public abstract class CommonUtilsTask extends Task {
 	}
 	
 	/**
-	 * Returns a file handle for the plug-ins directory within the given file
-	 * @param dir
-	 * @return the plug-ins directory file handle within the given file
-	 */
-	protected File getInstallDir(File dir) {
-		return new File(dir, PLUGINS_FOLDER_NAME);
-	}
-	
-	/**
-	 * Returns if the given file name is the name of an archive file, 
-	 * where an archive file is described as *.zip, *.jar, *.tar.gz or *.tgz
-	 * 
-	 * @param fileName
-	 * @return true if the file name if that of an archive, false otherwise
-	 */
-	private boolean isArchive(String fileName) {
-		return isZipJarFile(fileName) || isTGZFile(fileName);
-	}
-	
-	/**
-	 * Returns if the given file name represents a G-zip file name, where the name 
-	 * has an extension of *.tar.gz or *.tgz
-	 * 
-	 * @param fileName
-	 * @return true if the given file name is that of a G-zip archive, false otherwise
-	 */
-	private boolean isTGZFile(String fileName) {
-		String normalizedFileName = fileName.toLowerCase();
-		return normalizedFileName.endsWith(".tar.gz") //$NON-NLS-1$
-			|| normalizedFileName.endsWith(".tgz"); //$NON-NLS-1$
-	}
-	
-	/**
-	 * Returns if the given file name represents a 'standard' archive, where the name
-	 * has an extension of *.zip or *.jar
-	 * 
-	 * @param fileName
-	 * @return true if the given file name is that of a 'standard' archive, false otherwise
-	 */
-	private boolean isZipJarFile(String fileName) {
-		String normalizedFileName = fileName.toLowerCase();
-		return normalizedFileName.endsWith(".zip") //$NON-NLS-1$
-			|| normalizedFileName.endsWith(".jar"); //$NON-NLS-1$
-	}
-	
-	/**
-	 * Initializes the exclude list from the given file location, and returns
-	 * a {@link Set} of project names that should be excluded.
+	 * Initializes the include/exclude list from the given file location, and returns
+	 * a {@link Set} of project names that should be include/excluded.
 	 * 
 	 * @param excludeListLocation
 	 * @return the set of project names to be excluded
 	 */
-	protected static ExcludedElements initializeExcludedElement(String excludeListLocation, IApiBaseline baseline, boolean debug) {
-		return Util.initializeRegexExcludeList(excludeListLocation, baseline, debug);
+	protected static FilteredElements initializeFilteredElements(String filterListLocation, IApiBaseline baseline, boolean debug) {
+		return Util.initializeRegexFilterList(filterListLocation, baseline, debug);
 	}
 
 	/**
-	 * Saves the report with the given name in the report location in a child directory with 
-	 * the componentID name
-	 * @param componentID
-	 * @param contents
-	 * @param reportname
+	 * Saves the report with the given name in the report location.  If a componentID is provided, a child
+	 * directory using that name will be created to put the report in.
+	 * @param componentID Name of the component to create a child directory for or <code>null<code> to put the report in the XML root
+	 * @param contents contents to output to the report
+	 * @param reportname name of the file to output to
 	 */
 	protected void saveReport(String componentID, String contents, String reportname) {
 		File dir = new File(this.reportLocation);
@@ -238,13 +178,16 @@ public abstract class CommonUtilsTask extends Task {
 				throw new BuildException(NLS.bind(Messages.errorCreatingReportDirectory, this.reportLocation));
 			}
 		}
-		File reportComponentIDDir = new File(dir, componentID);
-		if (!reportComponentIDDir.exists()) {
-			if (!reportComponentIDDir.mkdirs()) {
-				throw new BuildException(NLS.bind(Messages.errorCreatingReportDirectory, reportComponentIDDir));
+		// If the caller has provided a component id, create a child directory
+		if (componentID != null){
+			dir = new File(dir, componentID);
+			if (!dir.exists()) {
+				if (!dir.mkdirs()) {
+					throw new BuildException(NLS.bind(Messages.errorCreatingReportDirectory, dir));
+				}
 			}
 		}
-		File reportFile = new File(reportComponentIDDir, reportname);
+		File reportFile = new File(dir, reportname);
 		BufferedWriter writer = null;
 		try {
 			writer = new BufferedWriter(new FileWriter(reportFile));
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java
index 2c6132e..10f1a59 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java
@@ -31,7 +31,7 @@ import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiScope;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
-import org.eclipse.pde.api.tools.internal.util.ExcludedElements;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.api.tools.internal.util.UtilMessages;
 
@@ -47,6 +47,7 @@ public class CompareTask extends CommonUtilsTask {
 	private int visibilityModifiers = VisibilityModifiers.API;
 	private String componentsList;
 	private String excludeListLocation;
+	private String includeListLocation;
 
 	public void execute() throws BuildException {
 		if (this.referenceBaselineLocation == null
@@ -76,6 +77,11 @@ public class CompareTask extends CommonUtilsTask {
 			} else {
 				System.out.println("No exclude list location"); //$NON-NLS-1$
 			}
+			if (this.includeListLocation != null) {
+				System.out.println("include list location : " + this.includeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No include list location"); //$NON-NLS-1$
+			}
 		}
 		// create reference
 		File referenceInstallDir = extractSDK(REFERENCE, this.referenceBaselineLocation);
@@ -84,18 +90,26 @@ public class CompareTask extends CommonUtilsTask {
 
 		// run the comparison
 		// create baseline for the reference
-		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, getInstallDir(referenceInstallDir), this.eeFileLocation);
-		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, getInstallDir(baselineInstallDir), this.eeFileLocation);
+		IApiBaseline referenceBaseline = createBaseline(REFERENCE_BASELINE_NAME, referenceInstallDir.getAbsolutePath(), this.eeFileLocation);
+		IApiBaseline currentBaseline = createBaseline(CURRENT_BASELINE_NAME, baselineInstallDir.getAbsolutePath(), this.eeFileLocation);
 		
 		IDelta delta = null;
 		
-		ExcludedElements excludedElements = CommonUtilsTask.initializeExcludedElement(this.excludeListLocation, currentBaseline, this.debug);
+		FilteredElements excludedElements = CommonUtilsTask.initializeFilteredElements(this.excludeListLocation, currentBaseline, this.debug);
 		
 		if (this.debug) {
 			System.out.println("===================================================================================="); //$NON-NLS-1$
 			System.out.println("Excluded elements list:"); //$NON-NLS-1$
 			System.out.println(excludedElements);
 		}
+		
+		FilteredElements includedElements = CommonUtilsTask.initializeFilteredElements(this.includeListLocation, currentBaseline, this.debug);
+		
+		if (this.debug) {
+			System.out.println("===================================================================================="); //$NON-NLS-1$
+			System.out.println("Included elements list:"); //$NON-NLS-1$
+			System.out.println(includedElements);
+		}
 		ApiScope scope = new ApiScope();
 		if (this.componentsList != null) {
 			// needs to set up individual components
@@ -174,7 +188,7 @@ public class CompareTask extends CommonUtilsTask {
 			}
 			writer = new BufferedWriter(new FileWriter(outputFile));
 
-			ExcludeListDeltaVisitor visitor = new ExcludeListDeltaVisitor(excludedElements, ExcludeListDeltaVisitor.CHECK_ALL);
+			FilterListDeltaVisitor visitor = new FilterListDeltaVisitor(excludedElements, includedElements, FilterListDeltaVisitor.CHECK_ALL);
 			delta.accept(visitor);
 			writer.write(visitor.getXML());
 			writer.flush();
@@ -292,6 +306,8 @@ public class CompareTask extends CommonUtilsTask {
 	 * <p>The exclude list is used to know what bundles should excluded from the xml report
 	 * generated by the task execution. Lines starting with '#' are ignored from
 	 * the excluded element.</p>
+	 * 
+	 * <p>The exclude list can also contains regular expressions. In this case, the line must start with "R:".</p>
 	 * <p>The format of the exclude file looks like this:</p>
 	 * <pre># 229688
 	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#dispose()V
@@ -300,10 +316,37 @@ public class CompareTask extends CommonUtilsTask {
 	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#dispose()V
 	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#getChildren(Ljava/lang/Object;)[Ljava/lang/Object;
 	 * ...
+	 * org.eclipse.jdt.core
+	 * R:org\.eclipse\.pde\..*
 	 * </pre>
 	 * @param excludeListLocation the given location for the excluded list file
 	 */
 	public void setExcludeList(String excludeListLocation) {
 		this.excludeListLocation = excludeListLocation;
 	}
+	
+	/**
+	 * Set the include list location.
+	 * 
+	 * <p>The include list is used to know what bundles should included from the xml report
+	 * generated by the task execution. Lines starting with '#' are ignored from
+	 * the included element.</p>
+	 * 
+	 * <p>The include list can also contains regular expressions. In this case, the line must start with "R:".</p>
+	 * <p>The format of the include file looks like this:</p>
+	 * <pre>
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#dispose()V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#getElements(Ljava/lang/Object;)[Ljava/lang/Object;
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#inputChanged(Lorg/eclipse/jface/viewers/Viewer;Ljava/lang/Object;Ljava/lang/Object;)V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#dispose()V
+	 * org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider#getChildren(Ljava/lang/Object;)[Ljava/lang/Object;
+	 * ...
+	 * org.eclipse.jdt.core
+	 * R:org\.eclipse\.pde\..*
+	 * </pre>
+	 * @param includeListLocation the given location for the included list file
+	 */
+	public void setincludeList(String includeListLocation) {
+		this.includeListLocation = includeListLocation;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ExcludeListDeltaVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ExcludeListDeltaVisitor.java
deleted file mode 100644
index bbacbfc..0000000
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ExcludeListDeltaVisitor.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.api.tools.internal.tasks;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.pde.api.tools.internal.comparator.DeltaXmlVisitor;
-import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
-import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
-import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
-import org.eclipse.pde.api.tools.internal.util.ExcludedElements;
-import org.eclipse.pde.api.tools.internal.util.Util;
-
-/**
- * This class is used to exclude some deltas from the generated report.
- */
-public class ExcludeListDeltaVisitor extends DeltaXmlVisitor {
-	public static final int CHECK_DEPRECATION = 0x01;
-	public static final int CHECK_OTHER = 0x02;
-	public static final int CHECK_ALL = CHECK_DEPRECATION | CHECK_OTHER;
-
-	private ExcludedElements excludedElements;
-	private List nonExcludedElements;
-
-	private int flags;
-
-	public ExcludeListDeltaVisitor(ExcludedElements excludedElements, int flags) throws CoreException {
-		super();
-		this.excludedElements = excludedElements;
-		this.nonExcludedElements = new ArrayList();
-		this.flags = flags;
-	}
-	private boolean checkExclude(IDelta delta) {
-		return isExcluded(delta);
-	}
-	public String getPotentialExcludeList() {
-		if (this.nonExcludedElements == null) return Util.EMPTY_STRING;
-		Collections.sort(this.nonExcludedElements);
-		StringWriter stringWriter = new StringWriter();
-		PrintWriter writer = new PrintWriter(stringWriter);
-		for (Iterator iterator = this.nonExcludedElements.iterator(); iterator.hasNext(); ) {
-			writer.println(iterator.next());
-		}
-		writer.close();
-		return String.valueOf(stringWriter.getBuffer());
-	}
-	private boolean isExcluded(IDelta delta) {
-		String typeName = delta.getTypeName();
-		StringBuffer buffer = new StringBuffer();
-		String componentId = delta.getComponentVersionId();
-		if (componentId != null) {
-			if (this.excludedElements.containsPartialMatch(componentId)) {
-				return true;
-			}
-			buffer.append(componentId).append(':');
-		}
-		if (typeName != null) {
-			buffer.append(typeName);
-		}
-		int flags = delta.getFlags();
-		switch(flags) {
-			case IDelta.TYPE_MEMBER :
-				buffer.append('.').append(delta.getKey());
-				break;
-			case IDelta.API_METHOD :
-			case IDelta.API_CONSTRUCTOR :
-			case IDelta.API_ENUM_CONSTANT :
-			case IDelta.API_FIELD :
-			case IDelta.API_METHOD_WITH_DEFAULT_VALUE :
-			case IDelta.API_METHOD_WITHOUT_DEFAULT_VALUE :
-			case IDelta.METHOD :
-			case IDelta.CONSTRUCTOR :
-			case IDelta.ENUM_CONSTANT :
-			case IDelta.METHOD_WITH_DEFAULT_VALUE :
-			case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
-			case IDelta.FIELD :
-			case IDelta.REEXPORTED_API_TYPE :
-			case IDelta.REEXPORTED_TYPE :
-			case IDelta.DEPRECATION :
-				buffer.append('#').append(delta.getKey());
-				break;
-			case IDelta.MAJOR_VERSION :
-			case IDelta.MINOR_VERSION :
-				buffer
-					.append(Util.getDeltaFlagsName(flags))
-					.append('_')
-					.append(Util.getDeltaKindName(delta.getKind()));
-				break;
-		}
-		String excludeListKey = String.valueOf(buffer);
-		if (this.excludedElements.containsExactMatch(excludeListKey)) {
-			return true;
-		}
-		this.nonExcludedElements.add(excludeListKey);
-		return false;
-	}
-	protected void processLeafDelta(IDelta delta) {
-		if (DeltaProcessor.isCompatible(delta)) {
-			switch(delta.getKind()) {
-				case IDelta.ADDED :
-					int modifiers = delta.getNewModifiers();
-					if (Flags.isPublic(modifiers)) {
-						if ((this.flags & CHECK_DEPRECATION) != 0) {
-							switch(delta.getFlags()) {
-								case IDelta.DEPRECATION :
-									if (!checkExclude(delta)) {
-										super.processLeafDelta(delta);
-									}
-							}
-						}
-						if ((this.flags & CHECK_OTHER) != 0) {
-							switch(delta.getFlags()) {
-								case IDelta.TYPE_MEMBER :
-								case IDelta.METHOD :
-								case IDelta.CONSTRUCTOR :
-								case IDelta.ENUM_CONSTANT :
-								case IDelta.METHOD_WITH_DEFAULT_VALUE :
-								case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
-								case IDelta.FIELD :
-								case IDelta.TYPE :
-								case IDelta.API_TYPE :
-								case IDelta.API_METHOD :
-								case IDelta.API_FIELD :
-								case IDelta.API_CONSTRUCTOR :
-								case IDelta.API_ENUM_CONSTANT :
-								case IDelta.REEXPORTED_TYPE :
-									if (!checkExclude(delta)) {
-										super.processLeafDelta(delta);
-									}
-									break;
-							}
-						}
-					} else if (Flags.isProtected(modifiers) && !RestrictionModifiers.isExtendRestriction(delta.getRestrictions())) {
-						if ((this.flags & CHECK_DEPRECATION) != 0) {
-							switch(delta.getFlags()) {
-								case IDelta.DEPRECATION :
-									if (!checkExclude(delta)) {
-										super.processLeafDelta(delta);
-									}
-									break;
-							}
-						}
-						if ((this.flags & CHECK_OTHER) != 0) {
-							switch(delta.getFlags()) {
-								case IDelta.TYPE_MEMBER :
-								case IDelta.METHOD :
-								case IDelta.CONSTRUCTOR :
-								case IDelta.ENUM_CONSTANT :
-								case IDelta.FIELD :
-								case IDelta.TYPE :
-								case IDelta.API_TYPE :
-								case IDelta.API_METHOD :
-								case IDelta.API_FIELD :
-								case IDelta.API_CONSTRUCTOR :
-								case IDelta.API_ENUM_CONSTANT :
-								case IDelta.REEXPORTED_TYPE :
-									if (!checkExclude(delta)) {
-										super.processLeafDelta(delta);
-									}
-									break;
-							}
-						}
-					}
-					if (delta.getElementType() == IDelta.API_BASELINE_ELEMENT_TYPE) {
-						switch(delta.getKind()) {
-							case IDelta.ADDED :
-								if (delta.getFlags() == IDelta.API_COMPONENT) {
-									if (!checkExclude(delta)) {
-										super.processLeafDelta(delta);
-									}
-								}
-						}
-					}
-					break;
-				case IDelta.CHANGED :
-					if ((this.flags & CHECK_OTHER) != 0) {
-						switch(delta.getFlags()) {
-							case IDelta.MAJOR_VERSION :
-							case IDelta.MINOR_VERSION :
-								if (!checkExclude(delta)) {
-									super.processLeafDelta(delta);
-								}
-						}
-					}
-					break;
-				case IDelta.REMOVED :
-					if ((this.flags & CHECK_DEPRECATION) != 0) {
-						switch(delta.getFlags()) {
-							case IDelta.DEPRECATION :
-								if (!checkExclude(delta)) {
-									super.processLeafDelta(delta);
-								}
-						}
-					}
-			}
-		} else if ((this.flags & CHECK_OTHER) != 0) {
-			switch(delta.getKind()) {
-				case IDelta.ADDED :
-					switch(delta.getFlags()) {
-						case IDelta.TYPE_MEMBER :
-						case IDelta.METHOD :
-						case IDelta.CONSTRUCTOR :
-						case IDelta.ENUM_CONSTANT :
-						case IDelta.METHOD_WITH_DEFAULT_VALUE :
-						case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
-						case IDelta.FIELD :
-						case IDelta.TYPE :
-						case IDelta.API_TYPE :
-						case IDelta.API_METHOD :
-						case IDelta.API_FIELD :
-						case IDelta.API_CONSTRUCTOR :
-						case IDelta.API_ENUM_CONSTANT :
-						case IDelta.REEXPORTED_TYPE :
-							if (Util.isVisible(delta.getNewModifiers())) {
-								if (!checkExclude(delta)) {
-									super.processLeafDelta(delta);
-								}
-							}
-					}
-					break;
-				case IDelta.REMOVED :
-					switch(delta.getFlags()) {
-						case IDelta.TYPE_MEMBER :
-						case IDelta.METHOD :
-						case IDelta.CONSTRUCTOR :
-						case IDelta.ENUM_CONSTANT :
-						case IDelta.METHOD_WITH_DEFAULT_VALUE :
-						case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
-						case IDelta.FIELD :
-						case IDelta.TYPE :
-						case IDelta.API_TYPE :
-						case IDelta.API_METHOD :
-						case IDelta.API_FIELD :
-						case IDelta.API_CONSTRUCTOR :
-						case IDelta.API_ENUM_CONSTANT :
-						case IDelta.REEXPORTED_API_TYPE :
-						case IDelta.REEXPORTED_TYPE :
-							if (Util.isVisible(delta.getOldModifiers())) {
-								if (!checkExclude(delta)) {
-									super.processLeafDelta(delta);
-								}
-							}
-							break;
-						case IDelta.API_COMPONENT :
-							if (!checkExclude(delta)) {
-								super.processLeafDelta(delta);
-							}
-					}
-				break;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/FilterListDeltaVisitor.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/FilterListDeltaVisitor.java
new file mode 100644
index 0000000..f08eac0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/FilterListDeltaVisitor.java
@@ -0,0 +1,284 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.tasks;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.pde.api.tools.internal.comparator.DeltaXmlVisitor;
+import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
+import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
+import org.eclipse.pde.api.tools.internal.util.Util;
+
+/**
+ * This class is used to exclude some deltas from the generated report.
+ */
+public class FilterListDeltaVisitor extends DeltaXmlVisitor {
+	public static final int CHECK_DEPRECATION = 0x01;
+	public static final int CHECK_OTHER = 0x02;
+	public static final int CHECK_ALL = CHECK_DEPRECATION | CHECK_OTHER;
+
+	private FilteredElements excludedElements;
+	private FilteredElements includedElements;
+	private List nonExcludedElements;
+
+	private int flags;
+	
+	public FilterListDeltaVisitor(FilteredElements excludedElements,FilteredElements includedElements, int flags) throws CoreException {
+		super();
+		this.excludedElements = excludedElements;
+		this.includedElements = includedElements;
+		this.nonExcludedElements = new ArrayList();
+		this.flags = flags;
+	}
+	private boolean checkExclude(IDelta delta) {
+		return isExcluded(delta);
+	}
+	public String getPotentialExcludeList() {
+		if (this.nonExcludedElements == null) return Util.EMPTY_STRING;
+		Collections.sort(this.nonExcludedElements);
+		StringWriter stringWriter = new StringWriter();
+		PrintWriter writer = new PrintWriter(stringWriter);
+		for (Iterator iterator = this.nonExcludedElements.iterator(); iterator.hasNext(); ) {
+			writer.println(iterator.next());
+		}
+		writer.close();
+		return String.valueOf(stringWriter.getBuffer());
+	}
+	private boolean isExcluded(IDelta delta) {
+		String typeName = delta.getTypeName();
+		StringBuffer buffer = new StringBuffer();
+		String componentId = delta.getComponentId();
+		if (componentId != null) {
+			if (this.excludedElements.containsExactMatch(componentId)
+					|| this.excludedElements.containsPartialMatch(componentId)) {
+				return true;
+			}
+			if (!this.includedElements.isEmpty() && !(this.includedElements.containsExactMatch(componentId)
+					|| this.includedElements.containsPartialMatch(componentId))) {
+				return true;
+			}
+			buffer.append(componentId).append(':');
+		}
+		if (typeName != null) {
+			buffer.append(typeName);
+		}
+		int flags = delta.getFlags();
+		switch(flags) {
+			case IDelta.TYPE_MEMBER :
+				buffer.append('.').append(delta.getKey());
+				break;
+			case IDelta.API_METHOD :
+			case IDelta.API_CONSTRUCTOR :
+			case IDelta.API_ENUM_CONSTANT :
+			case IDelta.API_FIELD :
+			case IDelta.API_METHOD_WITH_DEFAULT_VALUE :
+			case IDelta.API_METHOD_WITHOUT_DEFAULT_VALUE :
+			case IDelta.METHOD :
+			case IDelta.CONSTRUCTOR :
+			case IDelta.ENUM_CONSTANT :
+			case IDelta.METHOD_WITH_DEFAULT_VALUE :
+			case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
+			case IDelta.FIELD :
+			case IDelta.REEXPORTED_API_TYPE :
+			case IDelta.REEXPORTED_TYPE :
+			case IDelta.DEPRECATION :
+				buffer.append('#').append(delta.getKey());
+				break;
+			case IDelta.MAJOR_VERSION :
+			case IDelta.MINOR_VERSION :
+				buffer
+					.append(Util.getDeltaFlagsName(flags))
+					.append('_')
+					.append(Util.getDeltaKindName(delta.getKind()));
+				break;
+			case IDelta.API_COMPONENT :
+				buffer.append(Util.getDeltaKindName(delta.getKind())).append('#').append(delta.getKey());
+		}
+
+		String listKey = String.valueOf(buffer);
+		if (this.excludedElements.containsExactMatch(listKey)) {
+			return true;
+		}
+		if (!this.includedElements.isEmpty() && !(this.includedElements.containsExactMatch(delta.getKey())
+				|| this.includedElements.containsPartialMatch(delta.getKey()))) {
+			return true;
+		}
+		this.nonExcludedElements.add(listKey);
+		
+		return false;
+	}
+	protected void processLeafDelta(IDelta delta) {
+		if (DeltaProcessor.isCompatible(delta)) {
+			switch(delta.getKind()) {
+				case IDelta.ADDED :
+					int modifiers = delta.getNewModifiers();
+					if (Flags.isPublic(modifiers)) {
+						if ((this.flags & CHECK_DEPRECATION) != 0) {
+							switch(delta.getFlags()) {
+								case IDelta.DEPRECATION :
+									if (!checkExclude(delta)) {
+										super.processLeafDelta(delta);
+									}
+							}
+						}
+						if ((this.flags & CHECK_OTHER) != 0) {
+							switch(delta.getFlags()) {
+								case IDelta.TYPE_MEMBER :
+								case IDelta.METHOD :
+								case IDelta.CONSTRUCTOR :
+								case IDelta.ENUM_CONSTANT :
+								case IDelta.METHOD_WITH_DEFAULT_VALUE :
+								case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
+								case IDelta.FIELD :
+								case IDelta.TYPE :
+								case IDelta.API_TYPE :
+								case IDelta.API_METHOD :
+								case IDelta.API_FIELD :
+								case IDelta.API_CONSTRUCTOR :
+								case IDelta.API_ENUM_CONSTANT :
+								case IDelta.REEXPORTED_TYPE :
+									if (!checkExclude(delta)) {
+										super.processLeafDelta(delta);
+									}
+									break;
+							}
+						}
+					} else if (Flags.isProtected(modifiers) && !RestrictionModifiers.isExtendRestriction(delta.getCurrentRestrictions())) {
+						if ((this.flags & CHECK_DEPRECATION) != 0) {
+							switch(delta.getFlags()) {
+								case IDelta.DEPRECATION :
+									if (!checkExclude(delta)) {
+										super.processLeafDelta(delta);
+									}
+									break;
+							}
+						}
+						if ((this.flags & CHECK_OTHER) != 0) {
+							switch(delta.getFlags()) {
+								case IDelta.TYPE_MEMBER :
+								case IDelta.METHOD :
+								case IDelta.CONSTRUCTOR :
+								case IDelta.ENUM_CONSTANT :
+								case IDelta.FIELD :
+								case IDelta.TYPE :
+								case IDelta.API_TYPE :
+								case IDelta.API_METHOD :
+								case IDelta.API_FIELD :
+								case IDelta.API_CONSTRUCTOR :
+								case IDelta.API_ENUM_CONSTANT :
+								case IDelta.REEXPORTED_TYPE :
+									if (!checkExclude(delta)) {
+										super.processLeafDelta(delta);
+									}
+									break;
+							}
+						}
+					}
+					if (delta.getElementType() == IDelta.API_BASELINE_ELEMENT_TYPE
+							&& ((this.flags & CHECK_OTHER) != 0)) {
+						switch(delta.getKind()) {
+							case IDelta.ADDED :
+								if (delta.getFlags() == IDelta.API_COMPONENT) {
+									if (!checkExclude(delta)) {
+										super.processLeafDelta(delta);
+									}
+								}
+						}
+					}
+					break;
+				case IDelta.CHANGED :
+					if ((this.flags & CHECK_OTHER) != 0) {
+						switch(delta.getFlags()) {
+							case IDelta.MAJOR_VERSION :
+							case IDelta.MINOR_VERSION :
+								if (!checkExclude(delta)) {
+									super.processLeafDelta(delta);
+								}
+						}
+					}
+					break;
+				case IDelta.REMOVED :
+					if ((this.flags & CHECK_DEPRECATION) != 0) {
+						switch(delta.getFlags()) {
+							case IDelta.DEPRECATION :
+								if (!checkExclude(delta)) {
+									super.processLeafDelta(delta);
+								}
+						}
+					}
+			}
+		} else if ((this.flags & CHECK_OTHER) != 0) {
+			switch(delta.getKind()) {
+				case IDelta.ADDED :
+					switch(delta.getFlags()) {
+						case IDelta.TYPE_MEMBER :
+						case IDelta.METHOD :
+						case IDelta.CONSTRUCTOR :
+						case IDelta.ENUM_CONSTANT :
+						case IDelta.METHOD_WITH_DEFAULT_VALUE :
+						case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
+						case IDelta.FIELD :
+						case IDelta.TYPE :
+						case IDelta.API_TYPE :
+						case IDelta.API_METHOD :
+						case IDelta.API_FIELD :
+						case IDelta.API_CONSTRUCTOR :
+						case IDelta.API_ENUM_CONSTANT :
+						case IDelta.REEXPORTED_TYPE :
+							if (Util.isVisible(delta.getNewModifiers())) {
+								if (!checkExclude(delta)) {
+									super.processLeafDelta(delta);
+								}
+							}
+					}
+					break;
+				case IDelta.REMOVED :
+					switch(delta.getFlags()) {
+						case IDelta.TYPE_MEMBER :
+						case IDelta.METHOD :
+						case IDelta.CONSTRUCTOR :
+						case IDelta.ENUM_CONSTANT :
+						case IDelta.METHOD_WITH_DEFAULT_VALUE :
+						case IDelta.METHOD_WITHOUT_DEFAULT_VALUE :
+						case IDelta.FIELD :
+						case IDelta.TYPE :
+						case IDelta.API_TYPE :
+						case IDelta.API_METHOD :
+						case IDelta.API_FIELD :
+						case IDelta.API_CONSTRUCTOR :
+						case IDelta.API_ENUM_CONSTANT :
+						case IDelta.REEXPORTED_API_TYPE :
+						case IDelta.REEXPORTED_TYPE :
+							if (Util.isVisible(delta.getOldModifiers())) {
+								if (!checkExclude(delta)) {
+									super.processLeafDelta(delta);
+								}
+							}
+							break;
+						case IDelta.API_COMPONENT :
+							if (!checkExclude(delta)) {
+								super.processLeafDelta(delta);
+							}
+					}
+				break;
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/Messages.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/Messages.java
index 36e4f47..9e0026e 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,11 @@ public class Messages extends NLS {
 	public static String deltaReportTask_entry_minor_version;
 	public static String deltaReportTask_missingXmlFileLocation;
 	public static String deltaReportTask_couldNotCreateSAXParser;
+	public static String deltaReportTask_xmlFileLocationShouldHaveAnXMLExtension;
+	public static String deltaReportTask_htmlFileLocationShouldHaveAnHtmlExtension;
+	public static String deltaReportTask_missingXmlFile;
+	public static String deltaReportTask_xmlFileLocationMustBeAFile;
+	public static String deltaReportTask_hmlFileLocationMustBeAFile;
 
 	public static String fullReportTask_bundlesheader;
 	public static String fullReportTask_bundlesentry_even;
@@ -73,6 +78,7 @@ public class Messages extends NLS {
 	public static String couldNotCreate;
 	public static String couldNotUnzip;
 	public static String couldNotUntar;
+	public static String reportLocationHasToBeAFile;
 
 	public static String api_generation_printArguments;
 	public static String api_generation_projectLocationNotADirectory;
@@ -102,6 +108,14 @@ public class Messages extends NLS {
 	public static String deprecationReportTask_header;
 	public static String deprecationReportTask_missingXmlFileLocation;
 
+	public static String MissingRefProblemsTask_invalidApiUseScanLocation;
+
+	public static String MissingRefProblemsTask_missingArguments;
+
+	public static String no_html_location;
+
+	public static String no_xml_location;
+
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/MissingRefProblemsReportConversionTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/MissingRefProblemsReportConversionTask.java
new file mode 100644
index 0000000..7c5c6d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/MissingRefProblemsReportConversionTask.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.tasks;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.search.MissingRefReportConverter;
+import org.eclipse.pde.api.tools.internal.search.UseReportConverter;
+import org.eclipse.pde.api.tools.internal.util.Util;
+
+/**
+ * Default task for converting the XML output from the apitooling.apiuse ants to HTML
+ * 
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class MissingRefProblemsReportConversionTask extends CommonUtilsTask {
+
+	private String xmlReportsLocation = null;
+	private String htmlReportsLocation = null;
+
+	/**
+	 * Set the debug value.
+	 * <p>The possible values are: <code>true</code>, <code>false</code></p>
+	 * <p>Default is <code>false</code>.</p>
+	 *
+	 * @param debugValue the given debug value
+	 */
+	public void setDebug(String debugValue) {
+		this.debug = Boolean.toString(true).equals(debugValue);
+	}
+
+	/**
+	 * Set the location where the html reports are generated.
+	 * 
+	 * <p>This is optional. If not set, the html files are created in the same folder as the
+	 * xml files.</p>
+	 * <p>The location is set using an absolute path.</p>
+	 * 
+	 * @param htmlFilesLocation the given the location where the html reports are generated
+	 */
+	public void setHtmlFiles(String htmlFilesLocation) {
+		this.htmlReportsLocation = htmlFilesLocation;
+	}
+
+	/**
+	 * Set the location where the xml reports are retrieved.
+	 * 
+	 * <p>The location is set using an absolute path.</p>
+	 *
+	 * @param xmlFilesLocation the given location to retrieve the xml reports
+	 */
+	public void setXmlFiles(String xmlFilesLocation) {
+		this.xmlReportsLocation = xmlFilesLocation;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.apache.tools.ant.Task#execute()
+	 */
+	public void execute() throws BuildException {
+		if(this.xmlReportsLocation == null) {
+			throw new BuildException(Messages.no_xml_location);
+		}
+		if(this.htmlReportsLocation == null) {
+			throw new BuildException(Messages.no_html_location);
+		}
+		if (this.debug) {
+			System.out.println("XML report location: " + this.xmlReportsLocation); //$NON-NLS-1$
+			System.out.println("HTML report location: " + this.htmlReportsLocation); //$NON-NLS-1$
+		}
+		try {
+			Util.delete(new File(this.htmlReportsLocation));
+			MissingRefReportConverter converter = new MissingRefReportConverter(this.htmlReportsLocation, this.xmlReportsLocation);
+			UseReportConverter.setDebug(this.debug);
+			converter.convert(null, new NullProgressMonitor());
+			File index = converter.getReportIndex();
+			System.out.println(NLS.bind(Messages.ApiUseReportConversionTask_conversion_complete, index.getAbsolutePath()));
+		} catch (Exception e) {
+			throw new BuildException(e);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/MissingRefProblemsTask.java b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/MissingRefProblemsTask.java
new file mode 100644
index 0000000..4187050
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/MissingRefProblemsTask.java
@@ -0,0 +1,641 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.tasks;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.tools.ant.BuildException;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.osgi.service.resolver.ResolverError;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.IApiXmlConstants;
+import org.eclipse.pde.api.tools.internal.builder.BaseApiAnalyzer;
+import org.eclipse.pde.api.tools.internal.builder.BuildContext;
+import org.eclipse.pde.api.tools.internal.model.StubApiComponent;
+import org.eclipse.pde.api.tools.internal.problems.ApiProblem;
+import org.eclipse.pde.api.tools.internal.problems.ApiProblemFactory;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
+import org.eclipse.pde.api.tools.internal.search.MissingRefMetadata;
+import org.eclipse.pde.api.tools.internal.search.SkippedComponent;
+import org.eclipse.pde.api.tools.internal.search.UseScanManager;
+import org.eclipse.pde.api.tools.internal.util.FilteredElements;
+import org.eclipse.pde.api.tools.internal.util.Util;
+import org.osgi.framework.Version;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Ant task to headlessly run the API Analysis builder and generate a report of
+ * missing references in the API Use Scans
+ */
+public class MissingRefProblemsTask extends CommonUtilsTask {
+
+	private FilteredElements excludedElements;
+	private FilteredElements includedElements;
+	private String apiUseScans;
+	private String[] usescans;
+	private Properties properties = new Properties();
+	TreeSet notsearched = new TreeSet(Util.componentsorter);
+
+	public static final String COMPATIBILITY = "compatibility"; //$NON-NLS-1$
+	private static final Summary[] NO_SUMMARIES = new Summary[0];
+
+	private static class Summary {
+		String fComponentID;
+		List fApiProblems;
+
+		public Summary(String componentID, IApiProblem[] apiProblems) {
+			fComponentID = componentID;
+			fApiProblems = Arrays.asList(apiProblems);
+		}
+	}
+
+	/**
+	 * Run the api use scan problems task
+	 * 
+	 * @throws BuildException
+	 *             exception is thrown if anything goes wrong during the
+	 *             verification
+	 */
+	public void execute() throws BuildException {
+		if (super.currentBaselineLocation == null || super.reportLocation == null || this.apiUseScans == null) {
+			StringBuffer error = new StringBuffer(NLS.bind(Messages.MissingRefProblemsTask_missingArguments, new String[] {super.currentBaselineLocation, super.reportLocation,}));
+			throw new BuildException(error.toString());
+		}
+		//scrub the directory each time
+		File loc = new File(this.reportLocation);
+		if(loc.exists()) {
+			Util.delete(loc);
+		}
+		if (usescans != null && usescans.length > 0) {
+			for (int i = 0; i < usescans.length; i++) {
+				File file = new File(usescans[i].trim());
+				if (!file.exists()) {
+					StringBuffer error = new StringBuffer(Messages.MissingRefProblemsTask_invalidApiUseScanLocation);
+					error.append(usescans[i]);
+					throw new BuildException(error.toString());
+				}
+			}
+		}
+
+		if (super.debug) {
+			System.out.println("profile to compare : " + super.currentBaselineLocation); //$NON-NLS-1$
+			System.out.println("report location : " + super.reportLocation); //$NON-NLS-1$
+
+			if (super.excludeListLocation != null) {
+				System.out.println("exclude list location : " + super.excludeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No exclude list location"); //$NON-NLS-1$
+			}
+			if (super.includeListLocation != null) {
+				System.out.println("include list location : " + super.includeListLocation); //$NON-NLS-1$
+			} else {
+				System.out.println("No include list location"); //$NON-NLS-1$
+			}
+		}
+		// unzip profile
+		long time = 0;
+		if (super.debug) {
+			time = System.currentTimeMillis();
+		}
+
+		File baselineInstallDir = extractSDK(CURRENT, super.currentBaselineLocation);
+		if (super.debug) {
+			System.out.println("Preparation of profile installation : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
+			time = System.currentTimeMillis();
+		}
+
+		// create baseline = profile
+		IApiBaseline profile = createBaseline(CURRENT_BASELINE_NAME, baselineInstallDir.getAbsolutePath(), null);
+		if (super.debug) {
+			System.out.println("Creation of baseline : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
+			time = System.currentTimeMillis();
+		}
+		if (this.excludeListLocation != null) {
+			this.excludedElements = CommonUtilsTask.initializeFilteredElements(this.excludeListLocation, profile, super.debug);
+		}
+		if (this.includeListLocation != null) {
+			this.includedElements = CommonUtilsTask.initializeFilteredElements(this.includeListLocation, profile, super.debug);
+		}
+		UseScanManager.getInstance().setReportLocations(usescans);
+		if (super.debug) {
+			System.out.println("===================================================================================="); //$NON-NLS-1$
+			System.out.println("API Use Scan locations:"); //$NON-NLS-1$
+			for (int i = 0; i < usescans.length; i++) {
+				System.out.println("Location " + (i+1) + " : " + usescans[i]); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		}
+
+		Map allProblems = new HashMap();
+		try {
+			IApiComponent[] apiComponents = profile.getApiComponents();
+			int length = apiComponents.length;
+			Set visitedApiComponentNames = new HashSet();
+			for (int i = 0; i < length; i++) {
+				IApiComponent apiComponent = apiComponents[i];
+				String name = apiComponent.getSymbolicName();
+				String version = apiComponent.getVersion();
+				if(!acceptComponent(apiComponent)) {
+					continue;
+				}
+				visitedApiComponentNames.add(name);
+				BaseApiAnalyzer analyzer = new BaseApiAnalyzer();
+				try {
+					BaseApiAnalyzer.setDebug(super.debug);
+					if (this.properties.isEmpty()) {
+						addDefaultProperties();
+					}
+					analyzer.checkExternalDependencies(apiComponent, new BuildContext(), this.properties, new NullProgressMonitor());
+					IApiProblem[] problems = analyzer.getProblems();
+					if (problems.length != 0) {
+						allProblems.put(name +" ("+new Version(version).toString()+")", problems); //$NON-NLS-1$ //$NON-NLS-2$
+					}
+				} catch (RuntimeException e) {
+					ApiPlugin.log(e);
+					throw e;
+				} catch (CoreException e) {
+					ApiPlugin.log(e);
+				} finally {
+					analyzer.dispose();
+				}
+			}
+		} finally {
+			if (super.debug) {
+				System.out.println("Use scan reference check completed in: " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
+				time = System.currentTimeMillis();
+			}
+			profile.dispose();
+			StubApiComponent.disposeAllCaches();
+			deleteBaseline(super.currentBaselineLocation, baselineInstallDir);
+			writeMetaData(new File(this.reportLocation, "meta.xml")); //$NON-NLS-1$
+		}
+		Summary[] summaries = createAllSummaries(allProblems);
+
+		try {
+			dumpReport(summaries);
+			reportNotSearched(notsearched);
+		} catch (RuntimeException e) {
+			ApiPlugin.log(e);
+			throw e;
+		}
+	}
+
+	/**
+	 * If the component should be scanned or not. If not than it is added to the 'not searched' listing
+	 * 
+	 * @param component
+	 * @return <code>true</code> if the component should be scanned, <code>false</code> otherwise
+	 */
+	boolean acceptComponent(IApiComponent component) {
+		String name = component.getSymbolicName();
+		String version = component.getVersion();
+		try {
+			ResolverError[] errors = component.getErrors(); 
+			if ((errors != null && errors.length > 0) || component.isSystemComponent() || !Util.isApiToolsComponent(component)) {
+				notsearched.add(new SkippedComponent(name, version, errors));
+				return false;
+			}
+			if (this.excludedElements != null && (this.excludedElements.containsExactMatch(name) || this.excludedElements.containsPartialMatch(name))) {
+				notsearched.add(new SkippedComponent(name, version, errors));
+				return false;
+			}
+			if (this.includedElements != null && !this.includedElements.isEmpty() && !(this.includedElements.containsExactMatch(name) || this.includedElements.containsPartialMatch(name))) {
+				notsearched.add(new SkippedComponent(name, version, errors));
+				return false;
+			}
+		}
+		catch(CoreException ce) {
+			notsearched.add(new SkippedComponent(name, version, null));
+			return false;
+		}
+		return true;
+	}
+	
+	private void addDefaultProperties() {
+		this.properties.put(IApiProblemTypes.API_USE_SCAN_TYPE_SEVERITY, ApiPlugin.VALUE_ERROR);
+		this.properties.put(IApiProblemTypes.API_USE_SCAN_METHOD_SEVERITY, ApiPlugin.VALUE_ERROR);
+		this.properties.put(IApiProblemTypes.API_USE_SCAN_FIELD_SEVERITY, ApiPlugin.VALUE_ERROR);
+	}
+
+	private void writeMetaData(File file) {
+		try {
+			if (!file.exists()) {
+				file.getParentFile().mkdirs();
+				if (!file.createNewFile())
+					return; // could not create meta.xml
+			}
+			if (super.debug) {
+				System.out.println("Writing metadata to " + file.getAbsolutePath()); //$NON-NLS-1$ 
+			}
+
+			MissingRefMetadata metadata = new MissingRefMetadata(super.currentBaselineLocation, super.reportLocation, this.apiUseScans);
+			metadata.serializeToFile(file);
+		} catch (UnsupportedEncodingException e) {
+			ApiPlugin.log(e);
+		} catch (FileNotFoundException e) {
+			ApiPlugin.log(e);
+		} catch (IOException e) {
+			ApiPlugin.log(e);
+		} catch (CoreException e) {
+			ApiPlugin.log(e);
+		}
+	}
+
+	private Summary[] createAllSummaries(Map allProblems) {
+		Set entrySet = allProblems.entrySet();
+		int size = entrySet.size();
+		if (size == 0) {
+			return NO_SUMMARIES;
+		}
+		List allEntries = new ArrayList();
+		allEntries.addAll(entrySet);
+		Collections.sort(allEntries, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				Map.Entry entry1 = (Map.Entry) o1;
+				Map.Entry entry2 = (Map.Entry) o2;
+				return ((String) entry1.getKey()).compareTo((String) entry2.getKey());
+			}
+		});
+		Summary[] summaries = new Summary[size];
+		int i = 0;
+		for (Iterator iterator = allEntries.iterator(); iterator.hasNext();) {
+			Map.Entry entry = (Map.Entry) iterator.next();
+			summaries[i++] = new Summary((String) entry.getKey(), (IApiProblem[]) entry.getValue());
+		}
+		return summaries;
+	}
+
+	private void dumpReport(Summary[] summaries) {
+		for (int i = 0, max = summaries.length; i < max; i++) {
+			Summary summary = summaries[i];
+			String contents = null;
+			String componentID = summary.fComponentID;
+
+			try {
+				Document document = Util.newDocument();
+				Element report = document.createElement(IApiXmlConstants.ELEMENT_API_TOOL_REPORT);
+				report.setAttribute(IApiXmlConstants.ATTR_VERSION, IApiXmlConstants.API_REPORT_CURRENT_VERSION);
+				report.setAttribute(IApiXmlConstants.ATTR_COMPONENT_ID, componentID);
+				document.appendChild(report);
+
+				Element category = document.createElement(IApiXmlConstants.ATTR_CATEGORY);
+				category.setAttribute(IApiXmlConstants.ATTR_KEY, Integer.toString(IApiProblem.CATEGORY_API_USE_SCAN_PROBLEM));
+				category.setAttribute(IApiXmlConstants.ATTR_VALUE, COMPATIBILITY);
+				insertAPIProblems(category, document, summary.fApiProblems);
+				report.appendChild(category);
+
+				contents = Util.serializeDocument(document);
+			} catch (DOMException e) {
+				throw new BuildException(e);
+			} catch (CoreException e) {
+				throw new BuildException(e);
+			}
+			if (contents != null) {
+				saveReport(componentID, contents, "report.xml"); //$NON-NLS-1$
+			}
+		}
+
+	}
+
+	public void reportNotSearched(Set notSearchedList) {
+		if (notSearchedList.isEmpty()) {
+			return;
+		}
+		BufferedWriter writer = null;
+		try {
+			if (this.debug) {
+				System.out.println("Writing file for projects that were not searched..."); //$NON-NLS-1$
+			}
+			File rootfile = new File(reportLocation);
+			if (!rootfile.exists()) {
+				rootfile.mkdirs();
+			}
+			File file = new File(rootfile, "not_searched.xml"); //$NON-NLS-1$
+			if (!file.exists()) {
+				file.createNewFile();
+			}
+			Document doc = Util.newDocument();
+			Element root = doc.createElement(IApiXmlConstants.ELEMENT_COMPONENTS);
+			root.setAttribute("ShowMissing", "false"); //$NON-NLS-1$ //$NON-NLS-2$
+			doc.appendChild(root);
+			Element comp = null;
+			for (Iterator iterator = notSearchedList.iterator(); iterator.hasNext();) {
+				SkippedComponent component = (SkippedComponent) iterator.next();
+				comp = doc.createElement(IApiXmlConstants.ELEMENT_COMPONENT);
+				comp.setAttribute(IApiXmlConstants.ATTR_ID, component.getComponentId());
+				comp.setAttribute(IApiXmlConstants.ATTR_VERSION, component.getVersion());
+				comp.setAttribute(IApiXmlConstants.SKIPPED_DETAILS, component.getErrorDetails());
+				root.appendChild(comp);
+			}
+			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), IApiCoreConstants.UTF_8));
+			writer.write(Util.serializeDocument(doc));
+			writer.flush();
+		} catch (FileNotFoundException fnfe) {
+		} catch (IOException ioe) {
+		} catch (CoreException ce) {
+		} finally {
+			if (writer != null) {
+				try {
+					writer.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	private void insertAPIProblems(Element root, Document document, List problems) throws CoreException {
+		Element apiProblems = document.createElement(IApiXmlConstants.ELEMENT_API_PROBLEMS);
+		root.appendChild(apiProblems);
+		Element element = null;
+		// sort the problem by type name
+		Collections.sort(problems, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				IApiProblem p1 = (IApiProblem) o1;
+				IApiProblem p2 = (IApiProblem) o2;
+				return p1.getTypeName().compareTo(p2.getTypeName());
+			}
+		});
+		for (Iterator iterator = problems.iterator(); iterator.hasNext();) {
+			IApiProblem problem = (IApiProblem) iterator.next();
+			element = document.createElement(IApiXmlConstants.ELEMENT_API_PROBLEM);
+			element.setAttribute(IApiXmlConstants.ATTR_TYPE_NAME, String.valueOf(problem.getTypeName()));
+			element.setAttribute(IApiXmlConstants.ATTR_ID, Integer.toString(problem.getId()));
+			element.setAttribute(IApiXmlConstants.ATTR_LINE_NUMBER, Integer.toString(problem.getLineNumber()));
+			element.setAttribute(IApiXmlConstants.ATTR_CHAR_START, Integer.toString(problem.getCharStart()));
+			element.setAttribute(IApiXmlConstants.ATTR_CHAR_END, Integer.toString(problem.getCharEnd()));
+			element.setAttribute(IApiXmlConstants.ATTR_ELEMENT_KIND, Integer.toString(problem.getElementKind()));
+			element.setAttribute(IApiXmlConstants.ATTR_NAME_ELEMENT_TYPE, ApiProblem.getProblemElementKind(problem.getCategory(), problem.getElementKind()));
+			element.setAttribute(IApiXmlConstants.ATTR_CATEGORY, ApiProblem.getProblemCategory(problem.getCategory()));
+			element.setAttribute(IApiXmlConstants.ATTR_SEVERITY, this.properties.getProperty(ApiProblemFactory.getProblemSeverityId(problem)));
+			element.setAttribute(IApiXmlConstants.ATTR_KIND, Integer.toString(problem.getKind()));
+			element.setAttribute(IApiXmlConstants.ATTR_FLAGS, Integer.toString(problem.getFlags()));
+			element.setAttribute(IApiXmlConstants.ATTR_MESSAGE, problem.getMessage());
+			String[] extraMarkerAttributeIds = problem.getExtraMarkerAttributeIds();
+			if (extraMarkerAttributeIds != null && extraMarkerAttributeIds.length != 0) {
+				int length = extraMarkerAttributeIds.length;
+				Object[] extraMarkerAttributeValues = problem.getExtraMarkerAttributeValues();
+				Element extraArgumentsElement = document.createElement(IApiXmlConstants.ELEMENT_PROBLEM_EXTRA_ARGUMENTS);
+				for (int j = 0; j < length; j++) {
+					Element extraArgumentElement = document.createElement(IApiXmlConstants.ELEMENT_PROBLEM_EXTRA_ARGUMENT);
+					extraArgumentElement.setAttribute(IApiXmlConstants.ATTR_ID, extraMarkerAttributeIds[j]);
+					extraArgumentElement.setAttribute(IApiXmlConstants.ATTR_VALUE, String.valueOf(extraMarkerAttributeValues[j]));
+					extraArgumentsElement.appendChild(extraArgumentElement);
+				}
+				element.appendChild(extraArgumentsElement);
+			}
+			String[] messageArguments = problem.getMessageArguments();
+			if (messageArguments != null && messageArguments.length != 0) {
+				int length = messageArguments.length;
+				Element messageArgumentsElement = document.createElement(IApiXmlConstants.ELEMENT_PROBLEM_MESSAGE_ARGUMENTS);
+				for (int j = 0; j < length; j++) {
+					Element messageArgumentElement = document.createElement(IApiXmlConstants.ELEMENT_PROBLEM_MESSAGE_ARGUMENT);
+					messageArgumentElement.setAttribute(IApiXmlConstants.ATTR_VALUE, String.valueOf(messageArguments[j]));
+					messageArgumentsElement.appendChild(messageArgumentElement);
+				}
+				element.appendChild(messageArgumentsElement);
+			}
+			apiProblems.appendChild(element);
+		}
+	}
+
+	/**
+	 * Set the debug value.
+	 * <p>
+	 * The possible values are: <code>true</code>, <code>false</code>
+	 * </p>
+	 * <p>
+	 * Default is <code>false</code>.
+	 * </p>
+	 * 
+	 * @param debugValue
+	 *            the given debug value
+	 */
+	public void setDebug(boolean debugValue) {
+		super.debug = debugValue;
+	}
+
+	/**
+	 * Set the exclude list location.
+	 * 
+	 * <p>
+	 * The exclude list is used to know what bundles should excluded from the
+	 * xml report generated by the task execution. Lines starting with '#' are
+	 * ignored from the excluded elements.
+	 * </p>
+	 * <p>
+	 * The format of the exclude list file looks like this:
+	 * </p>
+	 * 
+	 * <pre>
+	 * # DOC BUNDLES
+	 * org.eclipse.jdt.doc.isv
+	 * org.eclipse.jdt.doc.user
+	 * org.eclipse.pde.doc.user
+	 * org.eclipse.platform.doc.isv
+	 * org.eclipse.platform.doc.user
+	 * # NON-ECLIPSE BUNDLES
+	 * com.ibm.icu
+	 * com.jcraft.jsch
+	 * javax.servlet
+	 * javax.servlet.jsp
+	 * ...
+	 * </pre>
+	 * <p>
+	 * The location is set using an absolute path.
+	 * </p>
+	 * 
+	 * @param excludeListLocation
+	 *            the given location for the excluded list file
+	 */
+	public void setExcludeList(String excludeListLocation) {
+		this.excludeListLocation = excludeListLocation;
+	}
+
+	/**
+	 * Set the include list location.
+	 * 
+	 * <p>
+	 * The include list is used to know what bundles should included from the
+	 * xml report generated by the task execution. Lines starting with '#' are
+	 * ignored from the included elements.
+	 * </p>
+	 * <p>
+	 * The format of the include list file looks like this:
+	 * </p>
+	 * 
+	 * <pre>
+	 * # DOC BUNDLES
+	 * org.eclipse.jdt.doc.isv
+	 * org.eclipse.jdt.doc.user
+	 * org.eclipse.pde.doc.user
+	 * org.eclipse.platform.doc.isv
+	 * org.eclipse.platform.doc.user
+	 * # NON-ECLIPSE BUNDLES
+	 * com.ibm.icu
+	 * com.jcraft.jsch
+	 * javax.servlet
+	 * javax.servlet.jsp
+	 * ...
+	 * </pre>
+	 * <p>
+	 * The location is set using an absolute path.
+	 * </p>
+	 * 
+	 * @param includeListLocation
+	 *            the given location for the included list file
+	 */
+	public void setIncludeList(String includeListLocation) {
+		this.includeListLocation = includeListLocation;
+	}
+
+	/**
+	 * Set the preferences for the task.
+	 * 
+	 * <p>
+	 * The preferences are used to configure problem severities. Problem
+	 * severities have three possible values: Ignore, Warning, or Error. The set
+	 * of problems detected is defined by corresponding problem preference keys
+	 * in API tools.
+	 * </p>
+	 * <p>
+	 * If the given location doesn't exist, the preferences won't be set.
+	 * </p>
+	 * <p>
+	 * Lines starting with '#' are ignored. The format of the preferences file
+	 * looks like this:
+	 * </p>
+	 * 
+	 * <pre>
+	 * #Thu Jan 11 17:03:09 IST 2011
+	 * API_USE_SCAN_TYPE_SEVERITY=Error
+	 * API_USE_SCAN_METHOD_SEVERITY=Ignore
+	 * API_USE_SCAN_FIELD_SEVERITY=Ignore
+	 * </pre>
+	 * <p>
+	 * The keys can be found in
+	 * {@link org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes}
+	 * .
+	 * </p>
+	 * <p>
+	 * The location is set using an absolute path.
+	 * </p>
+	 * 
+	 * @param preferencesLocation
+	 *            the location of the preference file
+	 */
+	public void setPreferences(String preferencesLocation) {
+		File preferencesFile = new File(preferencesLocation);
+		if (!preferencesFile.exists()) {
+			return;
+		}
+		BufferedInputStream inputStream = null;
+		try {
+			inputStream = new BufferedInputStream(new FileInputStream(preferencesFile));
+			Properties temp = new Properties();
+			temp.load(inputStream);
+			this.properties = temp;
+		} catch (IOException e) {
+			// ignore
+		} finally {
+			if (inputStream != null) {
+				try {
+					inputStream.close();
+				} catch (IOException e) {
+					// ignore
+				}
+			}
+		}
+	}
+
+	/**
+	 * Set the location of the current product or baseline that you want to
+	 * compare against the reference baseline.
+	 * 
+	 * <p>
+	 * It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that
+	 * corresponds to the Eclipse installation folder. This is the directory is
+	 * which you can find the Eclipse executable.
+	 * </p>
+	 * 
+	 * @param baselineLocation
+	 *            the given location for the baseline to analyze
+	 */
+	public void setProfile(String baselineLocation) {
+		this.currentBaselineLocation = baselineLocation;
+	}
+
+	/**
+	 * Comma-separated list of the locations of the API Use Scans that you want
+	 * to check against the reference baseline.
+	 * 
+	 * <p>
+	 * It can be a .zip file or a directory that corresponds to the API Use Scan report. 
+	 * This is the directory is which you can find the XML folder.
+	 * </p>
+	 * 
+	 * @param baselineLocation
+	 *            the given location for the baseline to analyze
+	 */
+	public void setAPIUseScans(String apiUseScans) {
+		this.apiUseScans = apiUseScans;
+		this.usescans = apiUseScans.split(","); //$NON-NLS-1$		
+	}
+
+	/**
+	 * Set the output location where the reports will be generated.
+	 * 
+	 * <p>
+	 * Once the task is completed, reports are available in this directory using
+	 * a structure similar to the filter root. A sub-folder is created for each
+	 * component that has problems to be reported. Each sub-folder contains a
+	 * file called "report.xml".
+	 * </p>
+	 * 
+	 * <p>
+	 * A special folder called "allNonApiBundles" is also created in this folder
+	 * that contains a xml file called "report.xml". This file lists all the
+	 * bundles that are not using the api tooling nature.
+	 * </p>
+	 * 
+	 * @param baselineLocation
+	 *            the given location for the reference baseline to analyze
+	 */
+	public void setReport(String reportLocation) {
+		this.reportLocation = reportLocation;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/messages.properties b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/messages.properties
index 572adfd..a914895 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2010 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -33,15 +33,19 @@ errorInComparison=An error occurred during the comparison
 illegalElementInScope=An error occurred during the comparison because of the scope elements is invalid.\n{0}
 errorCreatingParentReportFile=An error occurred creating the folder {0} for the report file
 errorCreatingReportDirectory=Could not create report directory : {0}
-directoryIsEmpty=The directory {0} is empty
+directoryIsEmpty=The installation at {0} does not contain any bundles
 fileDoesnotExist=File does not exist : {0}
 couldNotDelete=Could not delete : {0}
 couldNotCreate=Could not create : {0}
 couldNotUnzip=Could not unzip {0} into {1}
 couldNotUntar=Could not untar {0} into {1}
+reportLocationHasToBeAFile={0} must be a file and not a directory
 deltaReportTask_entry_major_version=The major version has been changed (from {1} to {2})
 deltaReportTask_entry_minor_version=The minor version has been changed (from {1} to {2})
 deltaReportTask_missingXmlFileLocation=Missing the xml file location argument
+deltaReportTask_missingXmlFile=The xml report file {0} does not exist
+deltaReportTask_xmlFileLocationMustBeAFile=The xml report file {0} must be a file and not a directory
+deltaReportTask_hmlFileLocationMustBeAFile=The html report file {0} must be a file and not a directory
 deltaReportTask_couldNotCreateSAXParser=Could not create a sax parser
 missing_xml_files_location=The directory that contains xml reports must be specified
 invalid_directory_name=''{0}'' is not a valid directory name
@@ -142,10 +146,10 @@ fullReportTask_indexheader=<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti
 <html>\n\
 <head>\n\
 \  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">\n\
-\  <title>API Tooling Verification Reports</title>\n\
+\  <title>API Tools Verification Reports</title>\n\
 </head>\n\
 <body>\n\
-<h1>API Tooling Verification Reports</h1>\n\
+<h1>API Tools Verification Reports</h1>\n\
 {0}\n\
 <table width="80%" border="1">\n\
 \  <tr>\n\
@@ -182,7 +186,7 @@ fullReportTask_indexsummary_odd=\  <tr>\n\
 \    <td align="center" bgcolor="#FFFFCC">{2}</td>\n\
 \    <td align="center" bgcolor="#FFFFCC">{3}</td>\n\
 \  </tr>\n
-UseTask_no_scan_both_types_not_searched_for=Build stopping - neither API nor internal references are being searched for
+UseTask_no_scan_both_types_not_searched_for=Build stopping - neither API, internal nor illegal references are being searched for
 AddedElement=ADDED
 RemovedElement=REMOVED
 ChangedElement=CHANGED
@@ -206,4 +210,13 @@ deprecationReportTask_footer=<p>\n\
 \  </p>\n\
 </body>\n\
 </html>\n
-deprecationReportTask_missingXmlFileLocation=Missing the xml file location argument
\ No newline at end of file
+deprecationReportTask_missingXmlFileLocation=Missing the xml file location argument
+deltaReportTask_xmlFileLocationShouldHaveAnXMLExtension=The report location must be an xml file location
+deltaReportTask_htmlFileLocationShouldHaveAnHtmlExtension=The report location must be an html file location
+MissingRefProblemsTask_invalidApiUseScanLocation=Invalid API Use Scan location: 
+MissingRefProblemsTask_missingArguments=Missing arguments:\n\
+profile location : {0}\n\
+api use scan locations : {1}\n\
+report location : {2}
+no_html_location=You must specify an HTML report output location
+no_xml_location=You must specify an XML report location to convert
diff --git a/eclipse/plugins/org.eclipse.pde.api.tools/xslt/notsearched.xsl b/eclipse/plugins/org.eclipse.pde.api.tools/xslt/notsearched.xsl
index 87992b0..1a6c00f 100644
--- a/eclipse/plugins/org.eclipse.pde.api.tools/xslt/notsearched.xsl
+++ b/eclipse/plugins/org.eclipse.pde.api.tools/xslt/notsearched.xsl
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 <!--
-	Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.
+	Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.
 	
 	All Platform Debug contexts, those for org.eclipse.debug.ui, are located in this file
 	All contexts are grouped by their relation, with all relations grouped alphabetically.
@@ -56,9 +56,12 @@
 		</h3>
 			<xsl:choose>
 				<xsl:when test="count(components/component) > 0">
+				<xsl:variable name="ShowMissing" select="components/@ShowMissing" />
+				<xsl:if test="$ShowMissing != 'false'">
 				<p>
 					A summary of the missing required bundles is <a href="missing.html">available here</a>.
 				</p>
+				</xsl:if>
 				<p>
 					Click an entry in the table below to reveal the details of why it was not searched.
 				</p>
diff --git a/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF
index 68afb38..05e7cd8 100644
--- a/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.build/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.build;singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: pdebuild.jar
 Bundle-Activator: org.eclipse.pde.internal.build.BuildActivator
 Bundle-Vendor: %providerName
@@ -14,17 +14,18 @@ Export-Package: org.eclipse.pde.build,
  org.eclipse.pde.internal.build.fetch;x-internal:=true,
  org.eclipse.pde.internal.build.packager;x-friends:="org.eclipse.pde.core",
  org.eclipse.pde.internal.build.properties;x-internal:=true,
+ org.eclipse.pde.internal.build.publisher.compatibility;x-internal:=true,
  org.eclipse.pde.internal.build.site;x-friends:="org.eclipse.pde.core,org.eclipse.pde.ui",
- org.eclipse.pde.internal.build.site.compatibility;x-internal:=true,
- org.eclipse.pde.internal.swt.tools;x-internal:=true
+ org.eclipse.pde.internal.build.site.compatibility;x-internal:=true
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ant.core;bundle-version="[3.1.100,4.0.0)",
  org.eclipse.core.runtime.compatibility;bundle-version="[3.1.100,4.0.0)";resolution:=optional,
  org.eclipse.osgi;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.equinox.p2.jarprocessor;bundle-version="[1.0.1,2.0.0)",
- org.eclipse.equinox.p2.publisher;bundle-version="1.1.0";resolution:=optional,
+ org.eclipse.equinox.p2.publisher;bundle-version="1.1.0",
  org.eclipse.equinox.p2.repository.tools;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
- org.eclipse.equinox.p2.director.app;bundle-version="1.0.200"
+ org.eclipse.equinox.p2.director.app;bundle-version="1.0.200",
+ org.eclipse.equinox.p2.publisher.eclipse;bundle-version="1.0.0"
 Import-Package: com.ibm.icu.util,
  org.eclipse.equinox.frameworkadmin;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.internal.p2.core.helpers,
@@ -43,4 +44,5 @@ Import-Package: com.ibm.icu.util,
  org.eclipse.equinox.p2.repository.metadata;version="[2.0.0,3.0.0)",
  org.eclipse.equinox.simpleconfigurator.manipulator;version="[2.0.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
+Eclipse-BundleShape: dir
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.pde.build/buildnotes_pde-build.html b/eclipse/plugins/org.eclipse.pde.build/buildnotes_pde-build.html
deleted file mode 100644
index 15ce087..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/buildnotes_pde-build.html
+++ /dev/null
@@ -1,484 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.7 [en] (WinNT; I) [Netscape]">
-   <title>Eclipse Platform Release Notes Core</title>
-</head>
-<body>
-<h1> Eclipse Platform Build Notes<br>
-  PDE Build Support</h1>
-Eclipse SDK Build 3.1 RC4 candidate 
-<h2>What's new in this drop</h2>
-<h3>API changes</h3>
-<ul>
-  <li>None.</li>
-</ul>
-<h3>Other highlights</h3>
-<ul>
-  <li>None.</li>
-</ul>
-<h3>Resolved Bugs</h3>
-<a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=PDE&component=Build&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2004-06-24&chfieldto=2005-06-24&chfieldvalue=&cmdtype=doit&order=Reuse%2Bsame%2Bsort%2Bas%2Blast%2Btime&field0-0-0=noop&type0-0-0=noop&value0-0-0=">Click 
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED since 
-the last integration build. 
-<p> 
-<hr WIDTH="100%">
-<h1></h1>
-<h1>Eclipse Platform Build Notes<br>
-  PDE Build Support</h1>
-Eclipse SDK Build 3.0 RC4 candidate 
-<h2>What's new in this drop</h2>
-<h3>API changes</h3>
-<ul>
-  <li>None.</li>
-</ul>
-<h3>Other highlights</h3>
-<ul>
-  <li>None.</li>
-</ul>
-<h3>Resolved Bugs</h3>
-<a href="https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&short_desc=&product=PDE&component=Build&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&changedin=&chfield=bug_status&chfieldfrom=2004-05-20&chfieldto=2004-06-24&chfieldvalue=&cmdtype=doit&namedcmd=5votes&newqueryname=&order=Reuse%2Bsame%2Bsort%2Bas%2Blast%2Btime&field0-0-0=noop&type0-0-0=noop&value0-0-0=">Click 
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED since 
-the last integration build. 
-<p> 
-<hr WIDTH="100%">
-<h1></h1>
-<h1>Eclipse Platform Build Notes<br>
-  PDE Build Support</h1>
-Eclipse SDK Build 3.0 RC2 candidate 
-<h2>What's new in this drop</h2>
-<h3>API changes</h3>
-<ul>
-<li>None.</li>
-</ul>
-
-<h3>Other highlights</h3>
-
-<ul>
-<li>None.</li>
-</ul>
-
-<h3>Resolved Bugs</h3>
-<a href="https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&short_desc=&product=PDE&component=Build&target_milestone=3.0+RC2&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&namedcmd=Equinox&newqueryname=&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20040413
-<h2>What's new in this drop</h2>
-<h3>API changes</h3>
-<ul>
-<li>None.</li>
-</ul>
-
-<h3>Other highlights</h3>
-
-<ul>
-<li>None.</li>
-</ul>
-
-<h3>Resolved Bugs</h3>
-<a href="https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&short_desc=&product=PDE&component=Build&target_milestone=3.0+M9&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&namedcmd=Equinox&newqueryname=&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020531
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F29&chfieldto=2002%2F05%2F31&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020529
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F21&chfieldto=2002%2F05%2F29&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020521
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F17&chfieldto=2002%2F05%2F21&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020517
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F05%2F14&chfieldto=2002%2F05%2F17&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020514
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-Remove Ant type eclipse.stripMapper.</li>
-
-<li>
-Removed JDTCompiler adapter. A new adapter is provided by the JDT Core
-plug-in (org.eclipse.jdt.core.JDTCompilerAdapter).</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F04%2F11&chfieldto=2002%2F05%2F14&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020430
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-Removed Ant tasks: initTemplate, pluginLocation.</li>
-
-<li>
-Renamed Ant tasks:</li>
-
-<ul>
-<li>
-fetch to eclipse.fetch</li>
-
-<li>
-buildscript to eclipse.buildScript</li>
-
-<li>
-buildManifest to eclipse.buildManifest</li>
-</ul>
-
-<li>
-Renamed Ant types:</li>
-
-<ul>
-<li>
-stripMapper to eclipse.stripMapper</li>
-</ul>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F04%2F09&chfieldto=2002%2F04%2F11&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=Active&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020411
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F04%2F09&chfieldto=2002%2F04%2F11&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=Active&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Build Support</h1>
-Eclipse SDK Build 20020409
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-Renamed plugin <tt>org.eclipse.pde.core</tt> to <tt>org.eclipse.pde.build</tt>.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F03%2F26&chfieldto=2002%2F04%2F09&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=Active&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Core</h1>
-Eclipse SDK Build 20020326
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F03%2F21&chfieldto=2002%2F03%2F26&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Core</h1>
-Eclipse SDK Build 20020321
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2002%2F03%2F11&chfieldto=2002%2F03%2F21&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Core</h1>
-Eclipse SDK Build 20020312
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-There has been lots of changes in PDE Core. It is likelly that custom build
-scripts will be broken with the new implementation.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2001%2F12%2F10&chfieldto=2002%2F03%2F11&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.
-<p>
-<hr WIDTH="100%">
-<h1>
-Eclipse Platform Build Notes<br>
-PDE Core</h1>
-Eclipse SDK Build 20011211
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Other highlights</h3>
-
-<ul>
-<li>
-None.</li>
-</ul>
-
-<h3>
-Resolved Bugs</h3>
-
-<ul>
-<li>
-<a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfield=bug_status&chfieldfrom=2001%2F11%2F27&chfieldto=2001%2F12%2F10&chfieldvalue=&product=PDE&version=2.0&component=Core&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&namedcmd=Active&newqueryname=&order=Bug+Number">Click
-here</a> to see PRs which have been marked as RESOLVED, VERIFIED or CLOSED
-since the last integration build.</li>
-</ul>
-
-<hr WIDTH="100%">
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.pde.build/feature/build.properties b/eclipse/plugins/org.eclipse.pde.build/feature/build.properties
index b2b39be..4b31d69 100644
--- a/eclipse/plugins/org.eclipse.pde.build/feature/build.properties
+++ b/eclipse/plugins/org.eclipse.pde.build/feature/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2003 IBM Corporation and others.
+# Copyright (c) 2004, 2005 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.build/feature/rootfiles/cpl-v10.html b/eclipse/plugins/org.eclipse.pde.build/feature/rootfiles/cpl-v10.html
deleted file mode 100644
index 36aa208..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/feature/rootfiles/cpl-v10.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-<HEAD>
-<TITLE>Common Public License - v 1.0</TITLE>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" VLINK="#800000">
-
-
-<P ALIGN="CENTER"><B>Common Public License - v 1.0</B>
-<P><B></B><FONT SIZE="3"></FONT>
-<P><FONT SIZE="3"></FONT><FONT SIZE="2">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT").  ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>1.  DEFINITIONS</B></FONT>
-<P><FONT SIZE="2">"Contribution" means:</FONT>
-
-<UL><FONT SIZE="2">a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and<BR CLEAR="LEFT">
-b) in the case of each subsequent Contributor:</FONT></UL>
-
-
-<UL><FONT SIZE="2">i)	 	changes to the Program, and</FONT></UL>
-
-
-<UL><FONT SIZE="2">ii)		additions to the Program;</FONT></UL>
-
-
-<UL><FONT SIZE="2">where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.  </FONT><FONT SIZE="2">A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf.  </FONT><FONT SIZE="2">Contributions do not include additions to the Program which:  (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.  </FONT></UL>
-
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Contributor" means any person or entity that distributes the Program.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.  </FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">"Program" means the Contributions distributed in accordance with this Agreement.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.</FONT>
-<P><FONT SIZE="2"><B></B></FONT>
-<P><FONT SIZE="2"><B>2.  GRANT OF RIGHTS</B></FONT>
-
-<UL><FONT SIZE="2"></FONT><FONT SIZE="2">a)	</FONT><FONT SIZE="2">Subject to the terms of this Agreement, each Contributor hereby grants</FONT><FONT SIZE="2"> Recipient a non-exclusive, worldwide, royalty-free copyright license to</FONT><FONT SIZE="2" COLOR="#FF0000"> </FONT><FONT SIZE="2">reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.</FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT><FONT SIZE="2">b) 	Subject to the terms of this Agreement, each Contributor hereby grants </FONT><FONT SIZE="2">Recipient a non-exclusive, worldwide,</FONT><FONT SIZE="2" COLOR="#008000"> </FONT><FONT SIZE="2">royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form.  This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents.  The patent license shall not apply to any other combinations which include the Contribution.  No hardware per se is licensed hereunder.   </FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2">c)	Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity.  Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise.  As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any.  For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.</FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2">d)	Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. </FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-<P><FONT SIZE="2"><B>3.  REQUIREMENTS</B></FONT>
-<P><FONT SIZE="2"><B></B>A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:</FONT>
-
-<UL><FONT SIZE="2">a)	it complies with the terms and conditions of this Agreement; and</FONT></UL>
-
-
-<UL><FONT SIZE="2">b)	its license agreement:</FONT></UL>
-
-
-<UL><FONT SIZE="2">i)	effectively disclaims</FONT><FONT SIZE="2"> on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; </FONT></UL>
-
-
-<UL><FONT SIZE="2">ii) 	effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; </FONT></UL>
-
-
-<UL><FONT SIZE="2">iii)</FONT><FONT SIZE="2">	states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and</FONT></UL>
-
-
-<UL><FONT SIZE="2">iv)	states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.</FONT><FONT SIZE="2" COLOR="#0000FF"> </FONT><FONT SIZE="2" COLOR="#FF0000"></FONT></UL>
-
-
-<UL><FONT SIZE="2" COLOR="#FF0000"></FONT><FONT SIZE="2"></FONT></UL>
-
-<P><FONT SIZE="2">When the Program is made available in source code form:</FONT>
-
-<UL><FONT SIZE="2">a)	it must be made available under this Agreement; and </FONT></UL>
-
-
-<UL><FONT SIZE="2">b)	a copy of this Agreement must be included with each copy of the Program.  </FONT></UL>
-
-<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT>
-<P><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT><FONT SIZE="2">Contributors may not remove or alter any copyright notices contained within the Program.  </FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.  </FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>4.  COMMERCIAL DISTRIBUTION</B></FONT>
-<P><FONT SIZE="2">Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like.  While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors.   Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering.  The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement.  In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations.  The Indemnified Contributor may participate in any such claim at its own expense.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">For example, a Contributor might include the Program in a commercial product offering, Product X.  That Contributor is then a Commercial Contributor.  If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.  Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"></FONT>
-<P><FONT SIZE="2" COLOR="#0000FF"></FONT><FONT SIZE="2"><B>5.  NO WARRANTY</B></FONT>
-<P><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is</FONT><FONT SIZE="2"> solely responsible for determining the appropriateness of using and distributing </FONT><FONT SIZE="2">the Program</FONT><FONT SIZE="2"> and assumes all risks associated with its exercise of rights under this Agreement</FONT><FONT SIZE="2">, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, </FONT><FONT SIZE="2">programs or equipment, and unavailability or interruption of operations</FONT><FONT SIZE="2">.  </FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"><B>6.  DISCLAIMER OF LIABILITY</B></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES </FONT><FONT SIZE="2">(INCLUDING WITHOUT LIMITATION LOST PROFITS),</FONT><FONT SIZE="2"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>7.  GENERAL</B></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed.  In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. </FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance.  If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable.  However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.  </FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted  and may only be modified in the following manner. The Agreement Steward reserves the right to </FONT><FONT SIZE="2">publish new versions (including revisions) of this Agreement from time to </FONT><FONT SIZE="2">time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward.   IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity.  </FONT><FONT SIZE="2">Each new version of the Agreement will be given a distinguishing version number.  The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new </FONT><FONT SIZE="2">version.  </FONT><FONT SIZE="2">Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, </FONT><FONT SIZE="2">by implication, estoppel or otherwise</FONT><FONT SIZE="2">.</FONT><FONT SIZE="2">  All rights in the Program not expressly granted under this Agreement are reserved.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose.  Each party waives its rights to a jury trial in any resulting litigation.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-
-</BODY>
-
-</HTML>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.build/plugin.xml b/eclipse/plugins/org.eclipse.pde.build/plugin.xml
index dfff868..8258c3f 100644
--- a/eclipse/plugins/org.eclipse.pde.build/plugin.xml
+++ b/eclipse/plugins/org.eclipse.pde.build/plugin.xml
@@ -67,6 +67,11 @@
       </antTask>
       <antTask
             library="lib/pdebuild-ant.jar"
+            name="eclipse.licenseReplacer"
+            class="org.eclipse.pde.internal.build.tasks.LicenseReplaceTask">
+      </antTask>
+      <antTask
+            library="lib/pdebuild-ant.jar"
             name="eclipse.jnlpGenerator"
             class="org.eclipse.pde.internal.build.tasks.JNLPGeneratorTask">
       </antTask>
diff --git a/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml b/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml
index 351a026..0021191 100644
--- a/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml
+++ b/eclipse/plugins/org.eclipse.pde.build/scripts/genericTargets.xml
@@ -104,6 +104,10 @@
 		parallelThreadsPerProcessor="${parallelThreadsPerProcessor}"
 		customEESources="${customEESources}"
 		contextRepository="${transformedRepoLocation},${p2.context.repos}"
+		sourceBundleMode="${sourceBundleMode}"
+		sourceBundleTemplateFeature="${sourceBundleTemplateFeature}"
+		sourceBundleFeatureId="${sourceBundleFeatureId}"
+		sourceBundleFeatureVersion="${sourceBundleFeatureVersion}"
 	/>
 </target>
 
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java
index c0c3d85..954812c 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AbstractScriptGenerator.java
@@ -20,13 +20,13 @@ import org.eclipse.equinox.p2.core.IAgentLocation;
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.engine.IProfileRegistry;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.State;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.ant.AntScript;
 import org.eclipse.pde.internal.build.builder.BuildDirector;
 import org.eclipse.pde.internal.build.site.*;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.eclipse.pde.internal.build.site.compatibility.SiteManager;
 import org.osgi.framework.Version;
 
@@ -198,6 +198,14 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
 	}
 
 	public static Properties readProperties(String location, String fileName, int errorLevel) throws CoreException {
+		if (location == null) {
+			if (errorLevel != IStatus.INFO && errorLevel != IStatus.OK) {
+				String message = NLS.bind(Messages.exception_missingFile, fileName);
+				BundleHelper.getDefault().getLog().log(new Status(errorLevel, PI_PDEBUILD, EXCEPTION_READING_FILE, message, null));
+			}
+			return MissingProperties.getInstance();
+		}
+
 		Properties result = new Properties();
 		File file = new File(location, fileName);
 		try {
@@ -780,7 +788,7 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
 		}
 	}
 
-	protected void generateProductReplaceTask(ProductFile product, String productFilePath) {
+	protected void generateProductReplaceTask(ProductFile product, String productFilePath, AssemblyInformation assemblyInfo) {
 		if (product == null)
 			return;
 
@@ -798,7 +806,7 @@ public abstract class AbstractScriptGenerator implements IXMLConstants, IPDEBuil
 		}
 
 		List productEntries = product.getProductEntries();
-		String mappings = Utils.getEntryVersionMappings((FeatureEntry[]) productEntries.toArray(new FeatureEntry[productEntries.size()]), site);
+		String mappings = Utils.getEntryVersionMappings((FeatureEntry[]) productEntries.toArray(new FeatureEntry[productEntries.size()]), site, assemblyInfo);
 
 		script.println("<eclipse.idReplacer productFilePath=\"" + AntScript.getEscaped(productFilePath) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
 		script.println("                    selfVersion=\"" + version + "\" "); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleConfigScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleConfigScriptGenerator.java
index 61e8776..8fea08d 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleConfigScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleConfigScriptGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -632,20 +632,19 @@ public class AssembleConfigScriptGenerator extends AbstractScriptGenerator {
 			printCustomGatherCall(ModelBuildScriptGenerator.getNormalizedName(plugin), Utils.makeRelative(new Path(placeToGather), new Path(workingDirectory)).toOSString(), PROPERTY_DESTINATION_TEMP_FOLDER, Utils.getPropertyFormat(PROPERTY_ECLIPSE_PLUGINS), null);
 		}
 
-		Set featureSet = BuildDirector.p2Gathering ? new HashSet() : null;
+		Set featureSet = new HashSet();
 		for (int i = 0; i < features.length; i++) {
 			BuildTimeFeature feature = features[i];
 			String placeToGather = feature.getRootLocation();
 			String featureFullName = feature.getId() + "_" + feature.getVersion(); //$NON-NLS-1$
 			printCustomGatherCall(featureFullName, Utils.makeRelative(new Path(placeToGather), new Path(workingDirectory)).toOSString(), PROPERTY_FEATURE_BASE, Utils.getPropertyFormat(PROPERTY_ECLIPSE_BASE), '/' + DEFAULT_FEATURE_LOCATION);
-			if (BuildDirector.p2Gathering)
-				featureSet.add(feature);
+			featureSet.add(feature);
 		}
 
 		//This will generate gather.bin.parts call to features that provides files for the root
 		for (Iterator iter = rootFileProviders.iterator(); iter.hasNext();) {
 			BuildTimeFeature feature = (BuildTimeFeature) iter.next();
-			if (BuildDirector.p2Gathering && featureSet.contains(feature))
+			if (featureSet.contains(feature))
 				continue;
 			String placeToGather = feature.getRootLocation();
 			String featureFullName = feature.getId() + "_" + feature.getVersion(); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleScriptGenerator.java
index 9098bc0..489c201 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssembleScriptGenerator.java
@@ -198,7 +198,7 @@ public class AssembleScriptGenerator extends AbstractScriptGenerator {
 			script.printCopyFileTask(productPath, newProduct, true);
 			if (p2Inf.exists())
 				script.printCopyTask(p2Inf.getAbsolutePath(), getProductDir(), null, false, true);
-			generateProductReplaceTask(product, newProduct);
+			generateProductReplaceTask(product, newProduct, assemblageInformation);
 			script.printTargetEnd();
 			script.println();
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssemblyInformation.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssemblyInformation.java
index ff3b380..bc3f621 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssemblyInformation.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/AssemblyInformation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -67,6 +67,16 @@ public class AssemblyInformation implements IPDEBuildConstants {
 		return ((AssemblyLevelConfigInfo) assembleInformation.get(config)).getPlugins();
 	}
 
+	public Set getAllPlugins() {
+		Collection pluginsByConfig = assembleInformation.values();
+		Set result = new LinkedHashSet();
+		for (Iterator iter = pluginsByConfig.iterator(); iter.hasNext();) {
+			Collection allPlugins = ((AssemblyLevelConfigInfo) iter.next()).getPlugins();
+			result.addAll(allPlugins);
+		}
+		return result;
+	}
+
 	public Collection getBinaryPlugins(Config config) {
 		Collection allPlugins = getPlugins(config);
 		Set result = new LinkedHashSet(allPlugins.size());
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java
index 50f9029..88aa26d 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,12 +14,13 @@ package org.eclipse.pde.internal.build;
 import java.io.*;
 import java.util.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.builder.*;
 import org.eclipse.pde.internal.build.packager.PackageScriptGenerator;
 import org.eclipse.pde.internal.build.site.*;
-import org.eclipse.pde.internal.build.site.compatibility.Feature;
 import org.osgi.framework.Version;
 
 public class BuildScriptGenerator extends AbstractScriptGenerator {
@@ -82,6 +83,20 @@ public class BuildScriptGenerator extends AbstractScriptGenerator {
 	private boolean flatten = false;
 	private boolean sourceReferences = false;
 
+	// what kind of source bundles to auto output.  See #generateSourceBundles()
+	private String sourceBundleMode = null;
+
+	// the default id is a generic feature name as uber source features have no inherent 
+	// semantics or scope.
+	private String sourceBundleTemplateFeature = "org.eclipse.pde.build.uber.feature"; //$NON-NLS-1$
+	private String sourceBundleFeatureId = null; //default is sourceBundleTemplateFeature + ".source"
+
+	// the default version is simply time-based as uber source features have no inherent 
+	// semantics or scope.
+	// XXX need a better way to version this feature.  Ideally the feature would not even 
+	// be persisted in the p2 metadata so this would not matter.
+	private String sourceBundleFeatureVersion = "1.0.0." + System.currentTimeMillis(); //$NON-NLS-1$
+
 	private static final String PROPERTY_ARCHIVESFORMAT = "archivesFormat"; //$NON-NLS-1$
 
 	/**
@@ -149,7 +164,7 @@ public class BuildScriptGenerator extends AbstractScriptGenerator {
 				String[] modelInfo = getNameAndVersion((String) iterator.next());
 				generator.setBuildSiteFactory(siteFactory);
 				generator.setModelId(modelInfo[0], modelInfo[1]);
-
+				generator.setFeatureGenerator(new BuildDirector());
 				generator.setPluginPath(pluginPath);
 				generator.setDevEntries(devEntries);
 				generator.setCompiledElements(generator.getCompiledElements());
@@ -166,7 +181,7 @@ public class BuildScriptGenerator extends AbstractScriptGenerator {
 					//Filtering is not required here, since we are only generating the build for a plugin or a fragment
 					generator.setBuildSiteFactory(siteFactory);
 					generator.setModel(bundlesToBuild[i]);
-
+					generator.setFeatureGenerator(new BuildDirector());
 					generator.setPluginPath(pluginPath);
 					generator.setDevEntries(devEntries);
 					generator.setCompiledElements(generator.getCompiledElements());
@@ -238,6 +253,9 @@ public class BuildScriptGenerator extends AbstractScriptGenerator {
 					generator.generate(feature);
 				}
 
+				if (sourceBundleMode != null)
+					generateSourceBundles(generator);
+
 				if (features.size() != 1)
 					featureInfo = new String[] {"all"}; //$NON-NLS-1$
 
@@ -260,6 +278,42 @@ public class BuildScriptGenerator extends AbstractScriptGenerator {
 		}
 	}
 
+	/**
+	 * Generate source bundles for this build.  The exact set of source bundles generated depends on 
+	 * the source output mode ((see {@link #setSourceBundleMode(String)}), the set of features
+	 * and bundles being built and the pre-existence of related source bundles. 
+	 * 
+	 * This step may result in the creation of an "uber source feature" that captures
+	 * a list of the generated source bundles.  
+	 * 
+	 * @param generator the build director to use when generating the source bundles
+	 */
+	private void generateSourceBundles(BuildDirector generator) throws CoreException {
+		Set allBundles = "all".equalsIgnoreCase(sourceBundleMode) ? generator.getAssemblyData().getAllPlugins() : generator.getAssemblyData().getAllCompiledPlugins(); //$NON-NLS-1$
+
+		BuildTimeFeature feature = getSite(false).findFeature(sourceBundleTemplateFeature, null, false);
+		if (feature == null)
+			feature = new BuildTimeFeature(sourceBundleTemplateFeature, sourceBundleFeatureVersion);
+
+		if (sourceBundleFeatureId == null)
+			sourceBundleFeatureId = sourceBundleTemplateFeature + ".source"; //$NON-NLS-1$
+
+		for (Iterator iterator = allBundles.iterator(); iterator.hasNext();) {
+			BundleDescription bundle = (BundleDescription) iterator.next();
+			if (!Utils.isSourceBundle(bundle))
+				feature.addEntry(new FeatureEntry(bundle.getSymbolicName(), bundle.getVersion().toString(), true));
+		}
+
+		SourceGenerator sourceGenerator = new SourceGenerator();
+		sourceGenerator.setExtraEntries(new String[] {}); //TODO set extra entries to include more, or exclude something
+		sourceGenerator.setDirector(generator);
+		sourceGenerator.setIndividual(true);
+		sourceGenerator.generateSourceFeature(feature, sourceBundleFeatureId);
+
+		BuildTimeFeature sourceFeature = getSite(false).findFeature(sourceBundleFeatureId, feature.getVersion(), true);
+		generator.generate(sourceFeature);
+	}
+
 	protected void generateVersionsLists(AssemblyInformation assemblageInformation) throws CoreException {
 		if (assemblageInformation == null)
 			return;
@@ -466,6 +520,38 @@ public class BuildScriptGenerator extends AbstractScriptGenerator {
 	}
 
 	/**
+	 * Whether or not to automatically output source bundles corresponding to the bundles involved in 
+	 * the build.  If set to null, no special source bundle generation is done.  If set to "built", only the
+	 * source bundles corresponding to bundles actually compiled are output.  If set to "all" then all 
+	 * available source related to bundles in the build are output.
+	 * 
+	 * @param value the source bundle output mode.
+	 */
+	public void setSourceBundleMode(String value) {
+		sourceBundleMode = value;
+	}
+
+	/**
+	 * Sets the id to use for the uber source feature if needed.  See {@link #setSourceBundleMode(String)}
+	 * @param value the id of the generated source feature
+	 */
+	public void setSourceBundleFeatureId(String value) {
+		sourceBundleFeatureId = value;
+	}
+
+	public void setSourceBundleTemplateFeature(String value) {
+		sourceBundleTemplateFeature = value;
+	}
+
+	/**
+	 * Sets the version to use for the uber source feature if needed.  See {@link #setSourceBundleMode(String)}
+	 * @param value the version of the generated source feature
+	 */
+	public void setSourceBundleFeatureVersion(String value) {
+		sourceBundleFeatureVersion = value;
+	}
+
+	/**
 	 * @param value The reportResolutionErrors to set.
 	 */
 	public void setReportResolutionErrors(boolean value) {
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BundleHelper.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BundleHelper.java
index fe1d4d1..7fdf963 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BundleHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BundleHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,6 @@ import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.p2.core.*;
 import org.eclipse.osgi.service.resolver.*;
-import org.eclipse.osgi.util.ManifestElement;
 import org.osgi.framework.*;
 
 public class BundleHelper {
@@ -180,20 +179,10 @@ public class BundleHelper {
 	}
 
 	public static String[] getClasspath(Dictionary manifest) {
-		String fullClasspath = (String) manifest.get(Constants.BUNDLE_CLASSPATH);
-		String[] result = new String[0];
-		try {
-			if (fullClasspath != null) {
-				ManifestElement[] classpathEntries;
-				classpathEntries = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, fullClasspath);
-				result = new String[classpathEntries.length];
-				for (int i = 0; i < classpathEntries.length; i++) {
-					result[i] = classpathEntries[i].getValue();
-				}
-			}
-		} catch (BundleException e) {
-			//Ignore
-		}
-		return result;
+		return org.eclipse.pde.internal.publishing.Utils.getBundleClasspath(manifest);
+	}
+
+	public static String getManifestHeader(Dictionary manifest, String header) {
+		return org.eclipse.pde.internal.publishing.Utils.getBundleManifestHeader(manifest, header);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java
index 8a409f4..a8b11bb 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,12 +13,12 @@ package org.eclipse.pde.internal.build;
 import java.io.*;
 import java.util.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.ResolverError;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.build.Constants;
 import org.eclipse.pde.internal.build.site.*;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.Filter;
 import org.osgi.framework.Version;
 
@@ -41,14 +41,16 @@ public class FeatureGenerator extends AbstractScriptGenerator {
 		public boolean equals(Object obj) {
 			if (obj instanceof Entry) {
 				Entry objEntry = (Entry) obj;
-				return id.equals(((Entry) obj).id) && version.equals(objEntry.version);
+				if (!(id.equals(((Entry) obj).id) && version.equals(objEntry.version)))
+					return false;
+				return getAttributes().equals(objEntry.getAttributes());
 			}
 
 			return id.equals(obj);
 		}
 
 		public int hashCode() {
-			return id.hashCode() + version.hashCode();
+			return id.hashCode() + version.hashCode() + getAttributes().hashCode();
 		}
 
 		public Map getAttributes() {
@@ -196,9 +198,11 @@ public class FeatureGenerator extends AbstractScriptGenerator {
 		String nestedVersion = null;
 		String productKey = null;
 		if (product != null) {
-			nestedId = product.getProductId() + ".root.feature"; //$NON-NLS-1$
+			nestedId = product.getId() + ".root.feature"; //$NON-NLS-1$
 			nestedVersion = product.getVersion();
-			productKey = PRODUCT_PREFIX + product.getProductId();
+			productKey = PRODUCT_PREFIX + product.getId();
+			if (!buildProperties.containsKey(PROPERTY_GENERATED_FEATURE_LABEL) && product.getProductName() != null)
+				buildProperties.put(PROPERTY_GENERATED_FEATURE_LABEL, product.getProductName() + " Root Files"); //$NON-NLS-1$
 		} else {
 			nestedId = nestedInclusions;
 			nestedVersion = version != null ? version : "1.0.0.qualifier"; //$NON-NLS-1$
@@ -217,8 +221,13 @@ public class FeatureGenerator extends AbstractScriptGenerator {
 		generator.setBuildSiteFactory(siteFactory);
 		generator.setFeatureId(nestedId);
 		generator.setVersion(nestedVersion);
+		generator.setPluginPath(pluginPath);
 		generator.generate();
 
+		//get the siteFactory back from the nested generator so we don't need to recreate it
+		if (siteFactory == null)
+			siteFactory = generator.siteFactory;
+
 		if (productKey != null) {
 			buildProperties = new Properties();
 			extraRequires = (extraRequires == null) ? "" : extraRequires + ","; //$NON-NLS-1$ //$NON-NLS-2$
@@ -342,6 +351,8 @@ public class FeatureGenerator extends AbstractScriptGenerator {
 		if (verify && includeLaunchers)
 			addLauncher(state, plugins, fragments, features);
 
+		String featureName = buildProperties != null ? (String) buildProperties.get(PROPERTY_GENERATED_FEATURE_LABEL) : null;
+
 		//Create feature.xml
 		File file = new File(directory, Constants.FEATURE_FILENAME_DESCRIPTOR);
 		OutputStream output = new BufferedOutputStream(new FileOutputStream(file));
@@ -358,6 +369,8 @@ public class FeatureGenerator extends AbstractScriptGenerator {
 
 			parameters.put(ID, feature);
 			parameters.put(VERSION, version != null ? version : "1.0.0"); //$NON-NLS-1$ 
+			if (featureName != null)
+				parameters.put(LABEL, featureName);
 			writer.startTag(FEATURE, parameters, true);
 
 			boolean fragment = false;
@@ -458,7 +471,10 @@ public class FeatureGenerator extends AbstractScriptGenerator {
 				String featureVersion = entry.getVersion();
 				if (verify) {
 					//this will throw an exception if the feature is not found.
-					getSite(false).findFeature(name, featureVersion, true);
+					boolean exception = true;
+					if (buildProperties != null && buildProperties.containsKey("generate.feature@" + name)) //$NON-NLS-1$
+						exception = false;
+					getSite(false).findFeature(name, featureVersion, exception);
 				}
 				parameters.clear();
 				parameters.put(ID, name);
@@ -472,6 +488,7 @@ public class FeatureGenerator extends AbstractScriptGenerator {
 		}
 
 		createBuildProperties(directory);
+		getSite(false).addFeatureReferenceModel(directory);
 	}
 
 	protected void createBuildProperties(File directory) {
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureWriter.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureWriter.java
index 090572e..7b02cc0 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureWriter.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FeatureWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,11 +15,11 @@ import java.io.OutputStream;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.*;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.site.BuildTimeFeature;
 import org.eclipse.pde.internal.build.site.BuildTimeSite;
-import org.eclipse.pde.internal.build.site.compatibility.*;
 
 public class FeatureWriter extends XMLWriter implements IPDEBuildConstants {
 	protected Feature feature;
@@ -52,6 +52,10 @@ public class FeatureWriter extends XMLWriter implements IPDEBuildConstants {
 		parameters.put(ID, feature.getId());
 		parameters.put(VERSION, feature.getVersion());
 		parameters.put("label", feature.getLabel()); //$NON-NLS-1$
+		if (feature.getLicenseFeature() != null) {
+			parameters.put("license-feature", feature.getLicenseFeature()); //$NON-NLS-1$
+			parameters.put("license-feature-version", feature.getLicenseFeatureVersion()); //$NON-NLS-1$
+		}
 		parameters.put("provider-name", feature.getProviderName()); //$NON-NLS-1$
 		parameters.put("image", feature.getImage()); //$NON-NLS-1$
 		parameters.put("os", feature.getOS()); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchScriptGenerator.java
index adef92f..3f314ec 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchScriptGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import java.io.*;
 import java.util.*;
 import org.eclipse.ant.core.AntRunner;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.build.Constants;
 import org.eclipse.pde.build.IFetchFactory;
@@ -21,7 +22,6 @@ import org.eclipse.pde.internal.build.ant.AntScript;
 import org.eclipse.pde.internal.build.ant.IScriptRunner;
 import org.eclipse.pde.internal.build.fetch.CVSFetchTaskFactory;
 import org.eclipse.pde.internal.build.site.*;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.Version;
 
 /**
@@ -31,6 +31,7 @@ import org.osgi.framework.Version;
 public class FetchScriptGenerator extends AbstractScriptGenerator {
 	private static final Object SAVE_LOCK = new Object();
 	private static final String FETCH_TASK_FACTORY = "internal.factory"; //$NON-NLS-1$
+	private static final String FETCH_TASK_FACTORY_ID = "internal.factory.id"; //$NON-NLS-1$
 	private static final String MATCHED_VERSION = "internal.matchedVersion"; //$NON-NLS-1$
 
 	// flag saying if we want to recursively generate the scripts	
@@ -41,6 +42,8 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 	protected String directoryLocation;
 	protected SortedMap directory;
 
+	protected String fetchCache;
+
 	// The location of the CVS password file.
 	protected String cvsPassFileLocation;
 
@@ -176,6 +179,7 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 			FetchScriptGenerator generator = new FetchScriptGenerator("feature@" + featureId + ',' + referencedFeatures[i].getVersion()); //$NON-NLS-1$
 			generator.setDirectoryLocation(directoryLocation);
 			generator.setFetchChildren(fetchChildren);
+			generator.setFetchCache(fetchCache);
 			generator.setCvsPassFileLocation(cvsPassFileLocation);
 			generator.setRecursiveGeneration(recursiveGeneration);
 			generator.setFetchTag(fetchTags);
@@ -307,6 +311,7 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 
 		// store builder
 		entryInfos.put(FETCH_TASK_FACTORY, fetchTaskFactory);
+		entryInfos.put(FETCH_TASK_FACTORY_ID, repoIdentifier);
 
 		// keep track of the version of the element as found in the map file
 		entryInfos.put(MATCHED_VERSION, match[1]);
@@ -413,8 +418,9 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 		FeatureEntry[] allChildren = feature.getRawPluginEntries();
 		FeatureEntry[] compiledChildren = feature.getPluginEntries();
 
+		String elementId;
 		for (int i = 0; i < allChildren.length; i++) {
-			String elementId = allChildren[i].getId();
+			elementId = allChildren[i].getId();
 			Version versionId = new Version(allChildren[i].getVersion());
 			// We are not fetching the elements that are said to be generated, but we are fetching some elements that can be associated
 			if (featureProperties.containsKey(GENERATION_SOURCE_PLUGIN_PREFIX + elementId)) {
@@ -434,6 +440,16 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 			if (generated == false)
 				generateFetchEntry(IFetchFactory.ELEMENT_TYPE_BUNDLE + '@' + elementId, versionId, !Utils.isIn(compiledChildren, allChildren[i]));
 		}
+
+		elementId = feature.getLicenseFeature();
+		if (elementId == null || elementId.length() == 0) {
+			return;
+		}
+
+		String version = feature.getLicenseFeatureVersion();
+		if (version == null)
+			version = IPDEBuildConstants.GENERIC_VERSION_NUMBER;
+		generateFetchEntry(IFetchFactory.ELEMENT_TYPE_FEATURE + '@' + elementId, new Version(version), false);
 	}
 
 	/**
@@ -478,10 +494,16 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 				retrieve.printTargetDeclaration(TARGET_MAIN, null, null, null, null);
 
 				String[] files = new String[] {Constants.FEATURE_FILENAME_DESCRIPTOR, PROPERTIES_FILE};
-				IFetchFactory factory = (IFetchFactory) elementInfos.get(FETCH_TASK_FACTORY);
+				String factoryId = (String) elementInfos.get(FETCH_TASK_FACTORY_ID);
+				IFetchFactory factory = fetchTaskFactories.newFactory(factoryId);
+				if (factory == null) {
+					String message = NLS.bind(Messages.error_noCorrespondingFactory, elementName, factoryId);
+					throw new CoreException(new Status(IStatus.ERROR, PI_PDEBUILD, EXCEPTION_ENTRY_MISSING, message, null));
+				}
 				factory.generateRetrieveFilesCall(elementInfos, destination, files, retrieve);
 
 				retrieve.printTargetEnd();
+				factory.addTargets(retrieve);
 				retrieve.printProjectEnd();
 			} finally {
 				retrieve.close();
@@ -496,6 +518,9 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 		try {
 			Map retrieveProp = new HashMap();
 			retrieveProp.put("fetch.failonerror", "true"); //$NON-NLS-1$//$NON-NLS-2$
+			retrieveProp.put("buildDirectory", getWorkingDirectory()); //$NON-NLS-1$
+			if (fetchCache != null)
+				retrieveProp.put(IBuildPropertiesConstants.PROPERTY_FETCH_CACHE, fetchCache);
 			if (scriptRunner != null) {
 				scriptRunner.runScript(target, TARGET_MAIN, retrieveProp);
 			} else {
@@ -799,4 +824,8 @@ public class FetchScriptGenerator extends AbstractScriptGenerator {
 	private void setDirectoryFile(Properties dir) {
 		directoryFile = dir;
 	}
+
+	public void setFetchCache(String cache) {
+		fetchCache = cache;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchTaskFactoriesRegistry.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchTaskFactoriesRegistry.java
index 2bdf05b..39a2ef5 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchTaskFactoriesRegistry.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/FetchTaskFactoriesRegistry.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004, 2006 Eclipse Foundation and others.
+ * Copyright (c) 2004, 2010 Eclipse Foundation and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,40 +16,58 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.pde.build.IFetchFactory;
 
 /**
- * A registry for acessing fetch task factories.
+ * A registry for accessing fetch task factories.
  * @since 3.2
  */
 public class FetchTaskFactoriesRegistry implements IPDEBuildConstants {
 
 	// Map of registered factories. key: factoryId, value: configuration element or corresponding instance
-	private Map factories;
-	
+	private final Map factories;
+	private final Map cache;
+
 	public FetchTaskFactoriesRegistry() {
 		factories = new HashMap();
+		cache = new HashMap();
 		initializeRegistry();
 	}
 
 	/**
 	 * Returns the factory instance with the specified id.
 	 * <p>
-	 * The instance is not cached. Each time this method is called, a new
-	 * instance is created.
+	 * The instance is cached, subsequent calls with the same id will 
+	 * return the same factory instance.
 	 * </p>
-	 * 
 	 * @param id
 	 * @return the factory instance (maybe <code>null</code>)
 	 */
 	public IFetchFactory getFactory(String id) {
-		Object result = factories.get(id);
-		if (result instanceof IFetchFactory)
+		Object result = cache.get(id);
+		if (result != null)
 			return (IFetchFactory) result;
-		
+
+		IFetchFactory toCache = newFactory(id);
+		if (toCache != null) {
+			cache.put(id, toCache);
+			return toCache;
+		}
+		return null;
+	}
+
+	/**
+	 * Creates a new factory instance with the specified id
+	 *  <p>
+	 * The instance is not cached. Each time this method is called, a new
+	 * instance is created.
+	 * </p>
+	 * @param id
+	 * @return the factory instance (maybe <code>null</code>)
+	 */
+	public IFetchFactory newFactory(String id) {
 		IConfigurationElement extension = (IConfigurationElement) factories.get(id);
 		if (null != extension) {
 			try {
-				IFetchFactory toCache = (IFetchFactory) extension.createExecutableExtension(ATTR_CLASS);
-				factories.put(id, toCache);
-				return toCache;
+				IFetchFactory factory = (IFetchFactory) extension.createExecutableExtension(ATTR_CLASS);
+				return factory;
 			} catch (CoreException e) {
 				BundleHelper.getDefault().getLog().log(e.getStatus());
 			}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IBuildPropertiesConstants.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IBuildPropertiesConstants.java
index c111e14..3032127 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IBuildPropertiesConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IBuildPropertiesConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,10 @@
  *
  * Contributors:
  *     IBM - Initial API and implementation
+ *     Compuware Corporation - Sebastien Angers <sebastien.angers at compuware.com> 
+ *     		- Enabled additional mirror slicingOptions in Headless PDE Build
+ *     		- Enabled 'raw' attribute for mirror step in Headless PDE Build
+ *     		- https://bugs.eclipse.org/338878
  *******************************************************************************/
 package org.eclipse.pde.internal.build;
 
@@ -81,10 +85,6 @@ public interface IBuildPropertiesConstants {
 	public static final String PROPERTY_SIGNIFICANT_VERSION_DIGITS = "significantVersionDigits"; //$NON-NLS-1$
 	public static final String PROPERTY_GENERATED_VERSION_LENGTH = "generatedVersionLength"; //$NON-NLS-1$
 
-	public static final String PROPERTY_RESOLVER_MODE = "osgi.resolverMode"; //$NON-NLS-1$
-	public static final String PROPERTY_RESOLVE_OPTIONAL = "osgi.resolveOptional"; //$NON-NLS-1$
-	public static final String VALUE_DEVELOPMENT = "development"; //$NON-NLS-1$
-
 	public static final String RESOLVER_DEV_MODE = "resolution.devMode"; //$NON-NLS-1$
 	public static final String PROPERTY_INDIVIDUAL_SOURCE = "individualSourceBundles"; //$NON-NLS-1$
 	public static final String PROPERTY_ALLOW_BINARY_CYCLES = "allowBinaryCycles"; //$NON-NLS-1$
@@ -108,6 +108,15 @@ public interface IBuildPropertiesConstants {
 	public static final String PROPERTY_P2_METADATA_REPO_NAME = "p2.metadata.repo.name"; //$NON-NLS-1$
 	public static final String PROPERTY_P2_ARTIFACT_REPO_NAME = "p2.artifact.repo.name"; //$NON-NLS-1$
 	public static final String PROPERTY_P2_GATHERING = "p2.gathering"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_RAW = "p2.mirror.raw"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_FILTER = "p2.mirror.slicing.filter"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_FOLLOW_ONLY_FILTERED_REQS = "p2.mirror.slicing.followOnlyFilteredRequirements"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_FOLLOW_STRICT = "p2.mirror.slicing.followStrict"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_INCLUDE_FEATURES = "p2.mirror.slicing.includeFeatures"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_INCLUDE_NON_GREEDY = "p2.mirror.slicing.includeNonGreedy"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_INCLUDE_OPTIONAL = "p2.mirror.slicing.includeOptional"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_LATEST_VERSION_ONLY = "p2.mirror.slicing.latestVersionOnly"; //$NON-NLS-1$
+	public static final String PROPERTY_P2_MIRROR_SLICING_PLATFORM_FILTER = "p2.mirror.slicing.platformFilter"; //$NON-NLS-1$
 	public static final String PROPERTY_SKIP_MIRRORING = "skipMirroring"; //$NON-NLS-1$
 	public static final String PROPERTY_SKIP_DIRECTOR = "skipDirector"; //$NON-NLS-1$
 
@@ -144,4 +153,6 @@ public interface IBuildPropertiesConstants {
 	public static final String PROPERTY_PACKAGER_AS_NORMALIZER = "packagerAsNormalizer"; //$NON-NLS-1$
 
 	public static final String PROPERTY_GENERATE_ECLIPSEPRODUCT = "generateEclipseProduct"; //$NON-NLS-1$
+	public static final String PROPERTY_GENERATED_FEATURE_LABEL = "generatedFeatureLabel"; //$NON-NLS-1$
+	public static final String PROPERTY_FETCH_CACHE = "fetchCacheLocation"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java
index 17a6ed9..6ec9a35 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IPDEBuildConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.build;
 
+import org.eclipse.pde.internal.publishing.Constants;
+
 /**
  * Generic constants for this plug-in classes.
  */
@@ -21,6 +23,7 @@ public interface IPDEBuildConstants {
 	public static final String FEATURE = "feature"; //$NON-NLS-1$
 	public static final String VERSION = "version"; //$NON-NLS-1$
 	public static final String ID = "id"; //$NON-NLS-1$
+	public static final String LABEL = "label"; //$NON-NLS-1$
 
 	/** PDE Core plug-in id */
 	public static final String PI_BOOT = "org.eclipse.core.boot"; //$NON-NLS-1$
@@ -100,7 +103,7 @@ public interface IPDEBuildConstants {
 	public final static int EXCEPTION_CLASSPATH_CYCLE = 14;
 	public final static int EXCEPTION_STATE_PROBLEM = 15;
 	public final static int EXCEPTION_GENERIC = 16;
-	public final static int EXCEPTION_FEATURE_PARSE = 17;
+	public final static int EXCEPTION_FEATURE_PARSE = Constants.EXCEPTION_FEATURE_PARSE;
 	public final static int WARNING_MISSING_SOURCE = 20;
 	public final static int WARNING_ELEMENT_NOT_FETCHED = 21;
 	public final static int EXCEPTION_CONFIG_FORMAT = 22;
@@ -126,13 +129,13 @@ public interface IPDEBuildConstants {
 	public final static String PATCH_FRAGMENT = "Eclipse-PatchFragment"; //$NON-NLS-1$
 	public final static String ECLIPSE_SOURCE_BUNDLE = "Eclipse-SourceBundle"; //$NON-NLS-1$
 	public final static String ECLIPSE_PLATFORM_FILTER = "Eclipse-PlatformFilter"; //$NON-NLS-1$
-	public final static String ECLIPSE_BUNDLE_SHAPE = "Eclipse-BundleShape"; //$NON-NLS-1$
+	public final static String ECLIPSE_BUNDLE_SHAPE = Constants.ECLIPSE_BUNDLE_SHAPE;
 	public final static String ECLIPSE_SOURCE_REF = "Eclipse-SourceReferences"; //$NON-NLS-1$
 	public final static String PDE_SOURCE_REF = "${PDE_SOURCE_REF}"; //$NON-NLS-1$
 
 	//Some Bundle IDs we care about
 	public final static String BUNDLE_OSGI = "org.eclipse.osgi"; //$NON-NLS-1$
-	public static final String BUNDLE_EQUINOX_LAUNCHER = "org.eclipse.equinox.launcher"; //$NON-NLS-1$
+	public static final String BUNDLE_EQUINOX_LAUNCHER = Constants.BUNDLE_EQUINOX_LAUNCHER;
 	public static final String BUNDLE_EQUINOX_COMMON = "org.eclipse.equinox.common"; //$NON-NLS-1$
 	public static final String BUNDLE_CORE_RUNTIME = "org.eclipse.core.runtime"; //$NON-NLS-1$
 	public static final String BUNDLE_UPDATE_CONFIGURATOR = "org.eclipse.update.configurator"; //$NON-NLS-1$
@@ -154,4 +157,10 @@ public interface IPDEBuildConstants {
 	public final static String PDE_CORE_PREFS = ".settings/org.eclipse.pde.core.prefs"; //$NON-NLS-1$
 	public final static String JDT_CORE_PREFS = ".settings/org.eclipse.jdt.core.prefs"; //$NON-NLS-1$
 	public final static String BUNDLE_ROOT_PATH = "BUNDLE_ROOT_PATH"; //$NON-NLS-1$
+
+	public static final String PROPERTY_RESOLVER_MODE = "osgi.resolverMode"; //$NON-NLS-1$
+	public static final String PROPERTY_RESOLVE_OPTIONAL = "osgi.resolveOptional"; //$NON-NLS-1$
+	public static final String VALUE_DEVELOPMENT = "development"; //$NON-NLS-1$
+
+	public static final String LICENSE_DEFAULT_EXCLUDES = ",.project,build.properties,feature.xml,feature.properties,feature_*.properties"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IXMLConstants.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IXMLConstants.java
index 27af8e1..be8f170 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IXMLConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/IXMLConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -50,6 +50,7 @@ public interface IXMLConstants {
 	public static final String TARGET_ASSEMBLE_ARCHIVE_CONDITION = "assemble.archive.condition"; //$NON-NLS-1$
 	public static final String TARGET_CLEANUP_ASSEMBLY = "cleanup.assembly"; //$NON-NLS-1$
 	public static final String TARGET_COPY_SRC_INCLUDES = "copy.src.includes"; //$NON-NLS-1$
+	public static final String TARGET_NESTED_JARS = ".nestedJars"; //$NON-NLS-1$
 	public static final String TARGET_INIT = "init"; //$NON-NLS-1$
 	public static final String TARGET_MAIN = "main"; //$NON-NLS-1$
 	public static final String TARGET_GZIP_RESULTS = "gzipResults"; //$NON-NLS-1$
@@ -171,6 +172,7 @@ public interface IXMLConstants {
 	public static final String PROPERTY_BINARY_FOLDERS = "binary.folders"; //$NON-NLS-1$
 	public static final String PROPERTY_LAUNCHER_JAR = "equinoxLauncherJar"; //$NON-NLS-1$
 	public static final String PROPERTY_EXTRA_MANIFESTS = "extraManifests"; //$NON-NLS-1$
+	public static final String PROPERTY_ALLOW_NON_API_PROJECT = "allowNonApiProject"; //$NON-NLS-1$
 
 	//Jar processor properties
 	public static final String PROPERTY_SIGN_ALIAS = "sign.alias"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Messages.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Messages.java
index 99513f5..2ebc010 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@ public class Messages extends NLS {
 	public static String error_noCorrespondingFactory;
 	public static String error_retrieveFailed;
 	public static String error_invalidURLInMapFileEntry;
+	public static String error_licenseRootWithoutLicenseRef;
 
 	// exception
 	public static String exception_missingElement;
@@ -94,9 +95,6 @@ public class Messages extends NLS {
 	public static String unsatisfied_host;
 	public static String unsatisfied_nativeSpec;
 
-	public static String feature_parse_invalidIdOrVersion;
-	public static String feature_parse_emptyRequires;
-
 	public static String fetching_p2Repo;
 	public static String includedFromFeature;
 
@@ -104,4 +102,4 @@ public class Messages extends NLS {
 		// load message values from bundle file
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
-}
\ No newline at end of file
+}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/P2ConfigScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/P2ConfigScriptGenerator.java
index b205aa4..f331492 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/P2ConfigScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/P2ConfigScriptGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,10 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Compuware Corporation - Sebastien Angers <sebastien.angers at compuware.com> 
+ *     		- Enabled additional mirror slicingOptions in Headless PDE Build
+ *     		- Enabled 'raw' attribute for mirror step in Headless PDE Build
+ *     		- https://bugs.eclipse.org/338878
  *******************************************************************************/
 
 package org.eclipse.pde.internal.build;
@@ -94,6 +98,16 @@ public class P2ConfigScriptGenerator extends AssembleConfigScriptGenerator {
 		if (productQualifier != null)
 			script.printProperty(PROPERTY_P2_PRODUCT_QUALIFIER, productQualifier);
 
+		script.printProperty(PROPERTY_P2_MIRROR_RAW, FALSE);
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_FILTER, ""); //$NON-NLS-1$
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_FOLLOW_ONLY_FILTERED_REQS, FALSE);
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_FOLLOW_STRICT, FALSE);
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_INCLUDE_FEATURES, TRUE);
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_INCLUDE_NON_GREEDY, FALSE);
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_INCLUDE_OPTIONAL, havePDEUIState() ? FALSE : TRUE);
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_LATEST_VERSION_ONLY, FALSE);
+		script.printProperty(PROPERTY_P2_MIRROR_SLICING_PLATFORM_FILTER, ""); //$NON-NLS-1$
+
 		script.println();
 		generateCustomGatherMacro();
 	}
@@ -204,7 +218,7 @@ public class P2ConfigScriptGenerator extends AssembleConfigScriptGenerator {
 			script.printAttribute("value", Utils.getPropertyFormat(PROPERTY_P2_FLAVOR), true); //$NON-NLS-1$
 			script.println("/>"); //$NON-NLS-1$
 			generateCopyConfigs(product, productDir);
-			generateProductReplaceTask(product, newProduct);
+			generateProductReplaceTask(product, newProduct, assemblyInformation);
 
 			script.printTab();
 			script.print("<p2.publish.product"); //$NON-NLS-1$
@@ -297,10 +311,22 @@ public class P2ConfigScriptGenerator extends AssembleConfigScriptGenerator {
 		if (product == null && (binaryFeatures == null || binaryFeatures.size() == 0))
 			return;
 
-		script.printStartTag("p2.mirror"); //$NON-NLS-1$
+		Map args = new HashMap();
+		// note that if the raw attribute (p2.mirror.raw) has not been set in the build.properties, then the default was set in #generatePrologue()
+		args.put("raw", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_RAW)); //$NON-NLS-1$
+		script.printStartTag("p2.mirror", args); //$NON-NLS-1$
+
 		script.printTab();
+		// note that if a slicingOption has not been set in the build.properties, then the default was set in #generatePrologue()
 		script.print("\t<slicingOptions"); //$NON-NLS-1$
-		script.printAttribute("includeNonGreedy", FALSE, true); //$NON-NLS-1$
+		script.printAttribute("includeNonGreedy", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_INCLUDE_NON_GREEDY), true); //$NON-NLS-1$
+		script.printAttribute("filter", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_FILTER), true); //$NON-NLS-1$
+		script.printAttribute("followOnlyFilteredRequirements", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_FOLLOW_ONLY_FILTERED_REQS), true); //$NON-NLS-1$
+		script.printAttribute("followStrict", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_FOLLOW_STRICT), true); //$NON-NLS-1$
+		script.printAttribute("includeFeatures", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_INCLUDE_FEATURES), true); //$NON-NLS-1$
+		script.printAttribute("includeOptional", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_INCLUDE_OPTIONAL), true); //$NON-NLS-1$
+		script.printAttribute("latestVersionOnly", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_LATEST_VERSION_ONLY), true); //$NON-NLS-1$
+		script.printAttribute("platformFilter", Utils.getPropertyFormat(PROPERTY_P2_MIRROR_SLICING_PLATFORM_FILTER), true); //$NON-NLS-1$			
 		script.println("/>"); //$NON-NLS-1$
 
 		script.printTab();
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductFile.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductFile.java
index c9a34da..2b80ebd 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductFile.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,8 +16,8 @@ import java.util.*;
 import javax.xml.parsers.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.xml.sax.*;
 import org.xml.sax.helpers.DefaultHandler;
 
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductGenerator.java
index e415127..c56110e 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ProductGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,11 +14,12 @@ import java.io.*;
 import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
+import org.eclipse.equinox.internal.p2.publisher.QuotedTokenizer;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.equinox.simpleconfigurator.manipulator.SimpleConfiguratorManipulator;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.VersionRange;
 import org.eclipse.pde.internal.build.site.*;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.Filter;
 import org.osgi.framework.Version;
 
@@ -460,6 +461,8 @@ public class ProductGenerator extends AbstractScriptGenerator {
 	}
 
 	private void printAllBundles(StringBuffer buffer, Config config, byte style) {
+		String newline = "win32".equals(config.getOs()) ? "\r\n" : "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
 		buffer.append("osgi.bundles="); //$NON-NLS-1$
 
 		//When the plugins are all listed.
@@ -486,7 +489,7 @@ public class ProductGenerator extends AbstractScriptGenerator {
 				if (first)
 					first = false;
 				else
-					buffer.append(',');
+					buffer.append(",\\" + newline + "  "); //$NON-NLS-1$ //$NON-NLS-2$
 				if (infos.size() > 0) {
 					if (infos.containsKey(id))
 						printBundleInfo(buffer, (BundleInfo) infos.get(id));
@@ -677,31 +680,25 @@ public class ProductGenerator extends AbstractScriptGenerator {
 		try {
 			writer = new PrintWriter(new FileWriter(new File(dir, launcher + ".ini"))); //$NON-NLS-1$
 			if (programArgs != null && programArgs.length() > 0) {
-				StringReader reader = new StringReader(programArgs);
-				StreamTokenizer tokenizer = new StreamTokenizer(reader);
-				tokenizer.resetSyntax();
-				tokenizer.whitespaceChars(0, 0x20);
-				tokenizer.wordChars(0x21, 0xFF);
-				tokenizer.quoteChar('"');
-				tokenizer.quoteChar('\'');
-				while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
-					writer.print(tokenizer.sval);
-					writer.print(lineDelimiter);
+				QuotedTokenizer tokenizer = new QuotedTokenizer(programArgs);
+				while (tokenizer.hasMoreTokens()) {
+					String token = tokenizer.nextToken().trim();
+					if (!token.equals("")) { //$NON-NLS-1$
+						writer.print(token);
+						writer.print(lineDelimiter);
+					}
 				}
 			}
 			if (vmArgs != null && vmArgs.length() > 0) {
 				writer.print("-vmargs"); //$NON-NLS-1$
 				writer.print(lineDelimiter);
-				StringReader reader = new StringReader(vmArgs);
-				StreamTokenizer tokenizer = new StreamTokenizer(reader);
-				tokenizer.resetSyntax();
-				tokenizer.whitespaceChars(0, 0x20);
-				tokenizer.wordChars(0x21, 0xFF);
-				tokenizer.quoteChar('"');
-				tokenizer.quoteChar('\'');
-				while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
-					writer.print(tokenizer.sval);
-					writer.print(lineDelimiter);
+				QuotedTokenizer tokenizer = new QuotedTokenizer(vmArgs);
+				while (tokenizer.hasMoreTokens()) {
+					String token = tokenizer.nextToken().trim();
+					if (!token.equals("")) { //$NON-NLS-1$
+						writer.print(token);
+						writer.print(lineDelimiter);
+					}
 				}
 			}
 		} catch (IOException e) {
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ShapeAdvisor.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ShapeAdvisor.java
index abbf55a..29f77f4 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ShapeAdvisor.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ShapeAdvisor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,9 +14,9 @@ package org.eclipse.pde.internal.build;
 import java.util.*;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.pde.internal.build.site.BuildTimeFeature;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 
 public class ShapeAdvisor implements IPDEBuildConstants {
 	public static final String UPDATEJAR = "updateJar"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/SourceFeatureWriter.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/SourceFeatureWriter.java
index aad473d..ba12c16 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/SourceFeatureWriter.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/SourceFeatureWriter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,9 +14,9 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.pde.internal.build.site.BuildTimeSite;
-import org.eclipse.pde.internal.build.site.compatibility.Feature;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 
 public class SourceFeatureWriter extends FeatureWriter {
 
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java
index fa79f4c..ed1bf91 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/Utils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.net.URL;
 import java.util.*;
 import java.util.zip.ZipFile;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.VersionRange;
 import org.eclipse.osgi.util.ManifestElement;
@@ -23,7 +24,6 @@ import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.ant.AntScript;
 import org.eclipse.pde.internal.build.site.BuildTimeFeature;
 import org.eclipse.pde.internal.build.site.BuildTimeSite;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Version;
 
@@ -398,34 +398,8 @@ public final class Utils implements IPDEBuildConstants, IBuildPropertiesConstant
 		copy(source, destination);
 	}
 
-	/**
-	 * Transfers all available bytes from the given input stream to the given output stream. 
-	 * Regardless of failure, this method closes both streams.
-	 * @throws IOException 
-	 */
-	static public void copy(File source, File destination) throws IOException {
-		InputStream in = null;
-		OutputStream out = null;
-		try {
-			in = new BufferedInputStream(new FileInputStream(source));
-			out = new BufferedOutputStream(new FileOutputStream(destination));
-			final byte[] buffer = new byte[8192];
-			while (true) {
-				int bytesRead = -1;
-				bytesRead = in.read(buffer);
-				if (bytesRead == -1)
-					break;
-				out.write(buffer, 0, bytesRead);
-			}
-		} finally {
-			try {
-				if (in != null)
-					in.close();
-			} finally {
-				if (out != null)
-					out.close();
-			}
-		}
+	public static void copy(File source, File destination) throws IOException {
+		org.eclipse.pde.internal.publishing.Utils.copy(source, destination);
 	}
 
 	public static void writeBuffer(StringBuffer buffer, File outputFile) throws IOException {
@@ -1015,31 +989,7 @@ public final class Utils implements IPDEBuildConstants, IBuildPropertiesConstant
 	}
 
 	public static boolean guessUnpack(BundleDescription bundle, String[] classpath) {
-		if (bundle == null)
-			return true;
-
-		Dictionary properties = (Dictionary) bundle.getUserObject();
-		String shape = null;
-		if (properties != null && (shape = (String) properties.get(ECLIPSE_BUNDLE_SHAPE)) != null) {
-			return shape.equals("dir"); //$NON-NLS-1$
-		}
-
-		// launcher fragments are a special case, they have no bundle-classpath and they must
-		//be unpacked
-		if (bundle.getHost() != null && bundle.getName().startsWith(BUNDLE_EQUINOX_LAUNCHER))
-			return true;
-
-		if (new File(bundle.getLocation()).isFile())
-			return false;
-
-		if (classpath.length == 0)
-			return false;
-
-		for (int i = 0; i < classpath.length; i++) {
-			if (classpath[i].equals(".")) //$NON-NLS-1$
-				return false;
-		}
-		return true;
+		return org.eclipse.pde.internal.publishing.Utils.guessUnpack(bundle, classpath);
 	}
 
 	public static Version extract3Segments(String s) {
@@ -1054,6 +1004,10 @@ public final class Utils implements IPDEBuildConstants, IBuildPropertiesConstant
 	}
 
 	public static String getEntryVersionMappings(FeatureEntry[] entries, BuildTimeSite site) {
+		return getEntryVersionMappings(entries, site, null);
+	}
+
+	public static String getEntryVersionMappings(FeatureEntry[] entries, BuildTimeSite site, AssemblyInformation assembly) {
 		if (entries == null || site == null)
 			return null;
 
@@ -1070,7 +1024,11 @@ public final class Utils implements IPDEBuildConstants, IBuildPropertiesConstant
 
 			try {
 				if (entries[i].isPlugin()) {
-					BundleDescription model = site.getRegistry().getResolvedBundle(id, versionRequested);
+					BundleDescription model = null;
+					if (assembly != null)
+						model = assembly.getPlugin(entries[i].getId(), versionRequested);
+					if (model == null)
+						model = site.getRegistry().getResolvedBundle(id, versionRequested);
 					if (model != null)
 						newVersion = model.getVersion().toString();
 				} else {
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/AntScript.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/AntScript.java
index 04cdc3c..cfe170d 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/AntScript.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/AntScript.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -378,6 +378,28 @@ public class AntScript implements IAntScript {
 		}
 	}
 
+	public void printUnzipTask(String zipFile, String destDir, boolean overWrite, String includePatterns, String excludePatterns) {
+		printTab();
+		output.print("<unzip"); //$NON-NLS-1$
+		printAttribute("src", zipFile, true); //$NON-NLS-1$
+		printAttribute("dest", destDir, true); //$NON-NLS-1$
+		printAttribute("overwrite", Boolean.toString(overWrite), true); //$NON-NLS-1$
+		if (includePatterns == null && excludePatterns == null) {
+			output.println("/>"); //$NON-NLS-1$
+		} else {
+			output.println(">"); //$NON-NLS-1$
+			indent++;
+			printTab();
+			output.print("<patternset"); //$NON-NLS-1$
+			printAttribute("includes", includePatterns, false); //$NON-NLS-1$
+			printAttribute("excludes", excludePatterns, false); //$NON-NLS-1$
+			output.println("/>"); //$NON-NLS-1$
+			indent--;
+			printTab();
+			output.println("</unzip>"); //$NON-NLS-1$
+		}
+	}
+
 	public void printTarTask(String zipfile, String basedir, boolean filesOnly, boolean update, FileSet[] fileSets) {
 		printTab();
 		output.print("<tar"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/ZipFileSet.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/ZipFileSet.java
index 9177405..9b9d225 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/ZipFileSet.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/ant/ZipFileSet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2005 IBM Corporation and others.
+ *  Copyright (c) 2004, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,12 +10,14 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.build.ant;
 
+import org.eclipse.core.runtime.Path;
+
 public class ZipFileSet extends FileSet {
 
 	String prefix;
 	boolean file;
 	String permission;
-	
+
 	/**
 	 * @param dir
 	 * @param defaultexcludes
@@ -32,7 +34,7 @@ public class ZipFileSet extends FileSet {
 		this.file = file;
 		this.permission = permission;
 	}
-	
+
 	protected void print(AntScript script) {
 		script.printTab();
 		script.print("<zipfileset"); //$NON-NLS-1$
@@ -46,16 +48,26 @@ public class ZipFileSet extends FileSet {
 		script.printAttribute("excludes", excludes, false); //$NON-NLS-1$
 		script.printAttribute("excludesfile", excludesfile, false); //$NON-NLS-1$
 		script.printAttribute("casesensitive", casesensitive, false); //$NON-NLS-1$
-		if (file)
+		if (prefixHasWildcards()) {
+			String pre = new Path(prefix).removeLastSegments(1).toString();
+			script.printAttribute("prefix", pre, false); //$NON-NLS-1$
+		} else if (file) {
 			script.printAttribute("fullpath", prefix, false); //$NON-NLS-1$
-		else
+		} else {
 			script.printAttribute("prefix", prefix, false); //$NON-NLS-1$
-		
+		}
+
 		if (file)
 			script.printAttribute("filemode", permission, false); //$NON-NLS-1$
-		else 
+		else
 			script.printAttribute("dirmode", permission, false); //$NON-NLS-1$
-		
+
 		script.println("/>"); //$NON-NLS-1$
 	}
+
+	private boolean prefixHasWildcards() {
+		if (prefix == null)
+			return false;
+		return (prefix.indexOf('*') != -1 || prefix.indexOf('?') != -1);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java
index a865894..89f8fb3 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.*;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.equinox.p2.publisher.eclipse.IPlatformEntry;
 import org.eclipse.pde.internal.build.*;
-import org.eclipse.pde.internal.build.site.compatibility.IPlatformEntry;
 
 /**
  * Instance of this class and subclasses are created on a plugin / feature basis. 
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/BuildDirector.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/BuildDirector.java
index 12b728e..de3cb3a 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/BuildDirector.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/BuildDirector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,14 +10,16 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.build.builder;
 
+import java.io.File;
 import java.util.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.*;
+import org.eclipse.pde.internal.build.builder.ClasspathComputer3_0.ClasspathElement;
 import org.eclipse.pde.internal.build.site.BuildTimeFeature;
-import org.eclipse.pde.internal.build.site.compatibility.Feature;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.Version;
 
 /**
@@ -78,6 +80,30 @@ public class BuildDirector extends AbstractBuildScriptGenerator {
 		this.assemblyData = assemblageInformation;
 	}
 
+	private final Map extractedLocations = new HashMap();
+
+	public String getExtractedRoot(ClasspathElement element) {
+		if (element.getSubPath() == null)
+			return element.getPath();
+
+		String absolute = element.getAbsolutePath();
+		if (extractedLocations.containsKey(absolute)) {
+			return (String) extractedLocations.get(absolute);
+		}
+
+		//Use the jar name, append a suffix if that name is already taken
+		String name = new File(absolute).getName();
+		if (name.endsWith(".jar")) //$NON-NLS-1$
+			name = name.substring(0, name.length() - 4);
+		String destination = name;
+		while (extractedLocations.containsValue(destination)) {
+			destination = name + '_' + Integer.toHexString(destination.hashCode());
+		}
+
+		extractedLocations.put(absolute, destination);
+		return destination;
+	}
+
 	/**
 	 * Returns a list of BundleDescription objects representing the elements delivered by the feature. 
 	 *  
@@ -86,6 +112,7 @@ public class BuildDirector extends AbstractBuildScriptGenerator {
 	 */
 	protected Set computeElements(BuildTimeFeature feature) throws CoreException {
 		Set computedElements = new LinkedHashSet(5);
+		Properties featureProperties = getBuildProperties(feature);
 		FeatureEntry[] pluginList = feature.getPluginEntries();
 		for (int i = 0; i < pluginList.length; i++) {
 			FeatureEntry entry = pluginList[i];
@@ -95,7 +122,6 @@ public class BuildDirector extends AbstractBuildScriptGenerator {
 
 			String versionRequested = entry.getVersion();
 			model = getSite(false).getRegistry().getResolvedBundle(entry.getId(), versionRequested);
-			Properties featureProperties = getBuildProperties(feature);
 			//we prefer a newly generated source plugin over a preexisting binary one. 
 			if ((model == null || Utils.isBinary(model)) && featureProperties.containsKey(GENERATION_SOURCE_PLUGIN_PREFIX + entry.getId())) {
 				boolean individual = useIndividualSource(featureProperties);
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java
index 353af8a..d5a0a36 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ClasspathComputer3_0.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,16 +17,17 @@ import java.net.URL;
 import java.util.*;
 import org.eclipse.core.internal.boot.PlatformURLHandler;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.*;
 import org.eclipse.pde.internal.build.site.PDEState;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.Filter;
 
 public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConstants, IXMLConstants, IBuildPropertiesConstants {
-	public static class ClasspathElement {
+	public class ClasspathElement {
 		private final String path;
+		private final String subPath;
 		private String accessRules;
 
 		/**
@@ -35,8 +36,11 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 		 * @param accessRules
 		 * @throws NullPointerException if path is null
 		 */
-		public ClasspathElement(String path, String accessRules) {
+		protected ClasspathElement(String path, String subPath, String accessRules) {
+			if (path == null)
+				throw new NullPointerException();
 			this.path = path;
+			this.subPath = subPath;
 			this.accessRules = accessRules;
 		}
 
@@ -48,10 +52,32 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 			return path;
 		}
 
+		public String getSubPath() {
+			return subPath;
+		}
+
 		public String getAccessRules() {
 			return accessRules;
 		}
 
+		public String getAbsolutePath() {
+			File f = new File(path);
+			if (f.isAbsolute()) {
+				try {
+					return f.getCanonicalPath();
+				} catch (IOException e) {
+					return path;
+				}
+			}
+
+			f = new File(modelLocation, path);
+			try {
+				return f.getCanonicalPath();
+			} catch (IOException e) {
+				return f.getPath();
+			}
+		}
+
 		public void addRules(String newRule) {
 			if (accessRules.equals("") || accessRules.equals(newRule)) //$NON-NLS-1$
 				return;
@@ -70,19 +96,27 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 		public boolean equals(Object obj) {
 			if (obj instanceof ClasspathElement) {
 				ClasspathElement element = (ClasspathElement) obj;
-				return (path != null && path.equals(element.getPath()));
+				if (!path.equals(element.getPath()))
+					return false;
+				if (subPath != null && subPath.equals(element.getSubPath()))
+					return false;
+				return true;
 			}
 			return false;
 		}
 
 		public int hashCode() {
-			return path.hashCode();
+			int result = path.hashCode();
+			return 13 * result + ((subPath == null) ? 0 : subPath.hashCode());
 		}
 
-		public static String normalize(String path) {
-			//always use '/' as a path separator to help with comparing paths in equals
-			return path.replaceAll("\\\\", "/"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
+	}
+
+	private static String normalize(String path) {
+		if (path == null)
+			return null;
+		//always use '/' as a path separator to help with comparing paths in equals
+		return path.replaceAll("\\\\", "/"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	private static final String EXCLUDE_ALL_RULE = "?**/*"; //$NON-NLS-1$
@@ -92,6 +126,7 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 	private Map pathElements = null;
 	private boolean allowBinaryCycles = false;
 	private Set requiredIds = null;
+	protected String modelLocation = null;
 
 	public ClasspathComputer3_0(ModelBuildScriptGenerator modelGenerator) {
 		this.generator = modelGenerator;
@@ -109,7 +144,7 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 	public List getClasspath(BundleDescription model, ModelBuildScriptGenerator.CompiledEntry jar) throws CoreException {
 		List classpath = new ArrayList(20);
 		List pluginChain = new ArrayList(10); //The list of plugins added to detect cycle
-		String location = generator.getLocation(model);
+		modelLocation = generator.getLocation(model);
 		Set addedPlugins = new HashSet(10); //The set of all the plugins already added to the classpath (this allows for optimization)
 		pathElements = new HashMap();
 		visiblePackages = getVisiblePackages(model);
@@ -117,10 +152,10 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 		allowBinaryCycles = AbstractScriptGenerator.getPropertyAsBoolean(IBuildPropertiesConstants.PROPERTY_ALLOW_BINARY_CYCLES);
 
 		//PREREQUISITE
-		addPrerequisites(model, classpath, location, pluginChain, addedPlugins);
+		addPrerequisites(model, classpath, modelLocation, pluginChain, addedPlugins);
 
 		//SELF
-		addSelf(model, jar, classpath, location, pluginChain, addedPlugins);
+		addSelf(model, jar, classpath, modelLocation, pluginChain, addedPlugins);
 
 		recordRequiredIds(model);
 
@@ -327,14 +362,16 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 		}
 
 		String path = null;
-		if ("jar".equalsIgnoreCase(basePath.getFileExtension())) { //$NON-NLS-1$
+		String subPath = null;
+		Path libraryPath = new Path(libraryName);
+		if (libraryPath.isAbsolute()) {
+			path = libraryPath.toOSString();
+		} else if ("jar".equalsIgnoreCase(basePath.getFileExtension())) { //$NON-NLS-1$
+			if ("jar".equalsIgnoreCase(libraryPath.getFileExtension())) //$NON-NLS-1$
+				subPath = libraryPath.toOSString();
 			path = basePath.toOSString();
 		} else {
-			Path libraryPath = new Path(libraryName);
-			if (libraryPath.isAbsolute())
-				path = libraryPath.toOSString();
-			else
-				path = basePath.append(libraryPath).toOSString();
+			path = basePath.append(libraryPath).toOSString();
 		}
 		path = ModelBuildScriptGenerator.replaceVariables(path, pluginKey == null ? false : generator.getCompiledElements().contains(pluginKey));
 		String secondaryPath = null;
@@ -345,21 +382,24 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 
 		}
 
-		addClasspathElementWithRule(classpath, path, rules);
+		addClasspathElementWithRule(classpath, path, subPath, rules);
 		if (secondaryPath != null) {
-			addClasspathElementWithRule(classpath, secondaryPath, rules);
+			addClasspathElementWithRule(classpath, secondaryPath, null, rules);
 		}
 	}
 
-	private void addClasspathElementWithRule(List classpath, String path, String rules) {
-		String normalizedPath = ClasspathElement.normalize(path);
-		ClasspathElement existing = (ClasspathElement) pathElements.get(normalizedPath);
+	private void addClasspathElementWithRule(List classpath, String path, String subPath, String rules) {
+		path = normalize(path);
+		subPath = normalize(subPath);
+
+		String elementsKey = subPath != null ? path + '/' + subPath : path;
+		ClasspathElement existing = (ClasspathElement) pathElements.get(elementsKey);
 		if (existing != null) {
 			existing.addRules(rules);
 		} else {
-			ClasspathElement element = new ClasspathElement(normalizedPath, rules);
+			ClasspathElement element = new ClasspathElement(path, subPath, rules);
 			classpath.add(element);
-			pathElements.put(normalizedPath, element);
+			pathElements.put(elementsKey, element);
 		}
 	}
 
@@ -424,9 +464,9 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 			for (int i = 0; i < extra.length; i++) {
 				//Potential pb: if the path refers to something that is being compiled (which is supposetly not the case, but who knows...)
 				//the user will get $basexx instead of $ws 
-				String toAdd = computeExtraPath(extra[i], classpath, location);
-				if (toAdd != null)
-					addPathAndCheck(null, new Path(toAdd), "", modelProperties, classpath); //$NON-NLS-1$
+				String[] toAdd = computeExtraPath(extra[i], classpath, location);
+				if (toAdd != null && toAdd.length == 2)
+					addPathAndCheck(null, new Path(toAdd[0]), toAdd[1], modelProperties, classpath);
 			}
 		}
 
@@ -435,9 +475,9 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 		for (int i = 0; i < jarSpecificExtraClasspath.length; i++) {
 			//Potential pb: if the path refers to something that is being compiled (which is supposetly not the case, but who knows...)
 			//the user will get $basexx instead of $ws 
-			String toAdd = computeExtraPath(jarSpecificExtraClasspath[i], classpath, location);
-			if (toAdd != null)
-				addPathAndCheck(null, new Path(toAdd), "", modelProperties, classpath); //$NON-NLS-1$
+			String[] toAdd = computeExtraPath(jarSpecificExtraClasspath[i], classpath, location);
+			if (toAdd != null && toAdd.length == 2)
+				addPathAndCheck(null, new Path(toAdd[0]), toAdd[1], modelProperties, classpath);
 		}
 	}
 
@@ -448,14 +488,14 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 	 * @return String the relative path 
 	 * @throws CoreException
 	 */
-	private String computeExtraPath(String url, List classpath, String location) throws CoreException {
+	private String[] computeExtraPath(String url, List classpath, String location) throws CoreException {
 		String relativePath = null;
 
 		String[] urlfragments = Utils.getArrayFromString(url, "/"); //$NON-NLS-1$
 
 		// A valid platform url for a plugin has a leat 3 segments.
 		if (urlfragments.length > 2 && urlfragments[0].equals(PlatformURLHandler.PROTOCOL + PlatformURLHandler.PROTOCOL_SEPARATOR)) {
-			String modelLocation = null;
+			String bundleLocation = null;
 			BundleDescription bundle = null;
 			if (urlfragments[1].equalsIgnoreCase(PLUGIN) || urlfragments[1].equalsIgnoreCase(FRAGMENT)) {
 				bundle = generator.getSite(false).getRegistry().getResolvedBundle(urlfragments[2]);
@@ -472,12 +512,13 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 					return null;
 				}
 
-				modelLocation = generator.getLocation(bundle);
-				if (modelLocation != null) {
-					for (int i = 3; i < urlfragments.length; i++) {
-						modelLocation += '/' + urlfragments[i];
+				bundleLocation = generator.getLocation(bundle);
+				if (bundleLocation != null) {
+					String entry = urlfragments[3];
+					for (int i = 4; i < urlfragments.length; i++) {
+						entry += '/' + urlfragments[i];
 					}
-					return Utils.makeRelative(new Path(modelLocation), new Path(location)).toOSString();
+					return new String[] {Utils.makeRelative(new Path(bundleLocation), new Path(location)).toOSString(), entry};
 				}
 			} else if (urlfragments[1].equalsIgnoreCase("resource")) { //$NON-NLS-1$
 				String message = NLS.bind(Messages.exception_url, generator.getModel().getSymbolicName() + '/' + generator.getPropertiesFileName() + ": " + url); //$NON-NLS-1$
@@ -500,7 +541,7 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 			//		String message = Policy.bind("exception.url", PROPERTIES_FILE + "::"+url); //$NON-NLS-1$  //$NON-NLS-2$
 			//		throw new CoreException(new Status(IStatus.ERROR,PI_PDEBUILD, IPDEBuildConstants.EXCEPTION_MALFORMED_URL, message,e));
 		}
-		return relativePath;
+		return new String[] {relativePath, ""}; //$NON-NLS-1$
 	}
 
 	//Add the prerequisite of a given plugin (target)
@@ -589,23 +630,27 @@ public class ClasspathComputer3_0 implements IClasspathComputer, IPDEBuildConsta
 		//The plugin for which we are generating the classpath and target are not platform independent
 		Dictionary properties = new Hashtable(3);
 		if (os != null) {
-			properties.put(OSGI_OS, os);
+			Object value = os.indexOf(',') > -1 ? (Object) Utils.getArrayFromString(os, ",") : os; //$NON-NLS-1$
+			properties.put(OSGI_OS, value);
 		} else {
 			properties.put(OSGI_OS, CatchAllValue.singleton);
 		}
-		if (ws != null)
-			properties.put(OSGI_WS, ws);
-		else
+		if (ws != null) {
+			Object value = ws.indexOf(',') > -1 ? (Object) Utils.getArrayFromString(ws, ",") : ws; //$NON-NLS-1$
+			properties.put(OSGI_WS, value);
+		} else
 			properties.put(OSGI_WS, CatchAllValue.singleton);
 
-		if (arch != null)
-			properties.put(OSGI_ARCH, arch);
-		else
+		if (arch != null) {
+			Object value = arch.indexOf(',') > -1 ? (Object) Utils.getArrayFromString(arch, ",") : arch; //$NON-NLS-1$
+			properties.put(OSGI_ARCH, value);
+		} else
 			properties.put(OSGI_ARCH, CatchAllValue.singleton);
 
-		if (nl != null)
-			properties.put(OSGI_NL, nl);
-		else
+		if (nl != null) {
+			Object value = nl.indexOf(',') > -1 ? (Object) Utils.getArrayFromString(nl, ",") : nl; //$NON-NLS-1$
+			properties.put(OSGI_NL, value);
+		} else
 			properties.put(OSGI_NL, CatchAllValue.singleton);
 
 		return filter.match(properties);
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/FeatureBuildScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/FeatureBuildScriptGenerator.java
index 3b40dfe..672ad76 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/FeatureBuildScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/FeatureBuildScriptGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.build.Constants;
@@ -23,7 +24,6 @@ import org.eclipse.pde.internal.build.*;
 import org.eclipse.pde.internal.build.ant.AntScript;
 import org.eclipse.pde.internal.build.ant.FileSet;
 import org.eclipse.pde.internal.build.site.BuildTimeFeature;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 
 public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 
@@ -46,6 +46,7 @@ public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 	private String customCallbacksBuildpath = null;
 	private String customCallbacksFailOnError = null;
 	private String customCallbacksInheritAll = null;
+	private BuildTimeFeature licenseFeature;
 
 	public FeatureBuildScriptGenerator(BuildTimeFeature feature) {
 		this.feature = feature;
@@ -318,7 +319,9 @@ public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 
 		FileSet fileSet = new FileSet(Utils.getPropertyFormat(PROPERTY_BASEDIR), null, include, null, exclude, null, null);
 		script.printCopyTask(null, featureTemp, new FileSet[] {fileSet}, true, true);
+
 		generateIdReplacerCall(featureTemp);
+		generateLicenseReplacerCall(featureTemp, customFeatureCallbacks != null);
 
 		if (customFeatureCallbacks != null) {
 			script.printSubantTask(Utils.getPropertyFormat(PROPERTY_CUSTOM_BUILD_CALLBACKS), PROPERTY_POST + TARGET_GATHER_BIN_PARTS, customCallbacksBuildpath, customCallbacksFailOnError, customCallbacksInheritAll, callbackParams, null);
@@ -332,6 +335,11 @@ public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 		else
 			script.println("   buildResultFolder=\"" + featureTemp + "\""); //$NON-NLS-1$ //$NON-NLS-2$
 		script.println("   baseDirectory=\"${basedir}\""); //$NON-NLS-1$
+		if (getLicenseFeature() != null) {
+			IPath licenseLocation = Utils.makeRelative(new Path(getLicenseFeatureRootLocation()), new Path(featureRootLocation));
+			String licensePath = licenseLocation.isAbsolute() ? licenseLocation.toString() : "${basedir}/" + licenseLocation.toString(); //$NON-NLS-1$
+			script.println("   licenseDirectory=\"" + licensePath + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		script.println("/>"); //$NON-NLS-1$
 
 		script.printTargetEnd();
@@ -371,6 +379,7 @@ public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 
 			// Generate the parameters for the Id Replacer.
 			generateIdReplacerCall(root);
+			generateLicenseReplacerCall(root, true);
 		}
 		generateRootFilesAndPermissionsCalls();
 		if (customFeatureCallbacks != null) {
@@ -387,6 +396,50 @@ public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 		script.println("<eclipse.idReplacer featureFilePath=\"" + AntScript.getEscaped(root) + '/' + Constants.FEATURE_FILENAME_DESCRIPTOR + "\"  selfVersion=\"" + feature.getVersion() + "\" featureIds=\"" + featureVersionInfo + "\" pluginIds=\"" + pluginVersionInfo + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 	}
 
+	private String getLicenseFeatureRootLocation() throws CoreException {
+		if (getLicenseFeature() != null) {
+			return getLicenseFeature().getRootLocation();
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+	private BuildTimeFeature getLicenseFeature() throws CoreException {
+		if (licenseFeature == null) {
+			String licenseFeatureName = feature.getLicenseFeature();
+			if (licenseFeatureName == null || licenseFeatureName.length() == 0) {
+				return null;
+			}
+			licenseFeature = getSite(false).findFeature(licenseFeatureName, feature.getLicenseFeatureVersion(), true);
+		}
+		return licenseFeature;
+	}
+
+	private void generateLicenseReplacerCall(String featureRoot, boolean printCopy) throws CoreException {
+		if (getLicenseFeature() == null) {
+			return;
+		}
+
+		IPath licenseLocation = Utils.makeRelative(new Path(getLicenseFeatureRootLocation()), new Path(featureRootLocation));
+		String licensePath = licenseLocation.isAbsolute() ? licenseLocation.toString() : "${basedir}/" + licenseLocation.toString(); //$NON-NLS-1$
+
+		if (printCopy) {
+			String include, exclude;
+			if (getLicenseFeature().isBinary()) {
+				include = "**"; //$NON-NLS-1$
+				exclude = "META-INF/"; //$NON-NLS-1$
+			} else {
+				include = (String) getBuildProperties(getLicenseFeatureRootLocation()).get(PROPERTY_BIN_INCLUDES);
+				exclude = (String) getBuildProperties(getLicenseFeatureRootLocation()).get(PROPERTY_BIN_EXCLUDES);
+			}
+			exclude = (exclude != null ? exclude + "," : "") + IPDEBuildConstants.LICENSE_DEFAULT_EXCLUDES; //$NON-NLS-1$//$NON-NLS-2$
+
+			FileSet fileSet = new FileSet(licensePath, null, include, null, exclude, null, null);
+			script.printCopyTask(null, featureRoot, new FileSet[] {fileSet}, true, true);
+		}
+
+		script.println("<eclipse.licenseReplacer featureFilePath=\"" + AntScript.getEscaped(featureRoot) + "\" licenseFilePath=\"" + AntScript.getEscaped(licensePath) + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	}
+
 	/**
 	 *  
 	 */
@@ -470,6 +523,12 @@ public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 				if (file.startsWith("absolute:")) { //$NON-NLS-1$
 					file = file.substring(9);
 					fromDir = ""; //$NON-NLS-1$
+				} else if (file.startsWith("license:")) { //$NON-NLS-1$
+					if (getLicenseFeature() == null) {
+						throw new CoreException(new Status(IStatus.ERROR, PI_PDEBUILD, EXCEPTION_PLUGIN_MISSING, NLS.bind(Messages.error_licenseRootWithoutLicenseRef, featureRootLocation), null));
+					}
+					file = file.substring(8);
+					fromDir = getLicenseFeatureRootLocation();
 				}
 				if (file.startsWith("file:")) { //$NON-NLS-1$
 					IPath target = new Path(file.substring(5));
@@ -696,6 +755,18 @@ public class FeatureBuildScriptGenerator extends AbstractScriptGenerator {
 	}
 
 	/**
+	 * Return a properties object constructed from the build.properties file
+	 * for the given feature. If no file exists, then an empty properties
+	 * object is returned.
+	 * 
+	 * @return Properties the feature's build.properties
+	 * @throws CoreException
+	 */
+	protected Properties getBuildProperties(String featureLocation) throws CoreException {
+		return readProperties(featureLocation, PROPERTIES_FILE, director.isIgnoreMissingPropertiesFile() ? IStatus.OK : IStatus.WARNING);
+	}
+
+	/**
 	 * Add the <code>children</code> target to the given Ant script.
 	 * Delegates some target call to all-template only if the property
 	 * includeChildren is set.
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
index 71fd74a..422d84e 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/ModelBuildScriptGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
@@ -13,6 +13,7 @@ import java.io.*;
 import java.util.*;
 import java.util.jar.JarFile;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
@@ -21,7 +22,6 @@ import org.eclipse.pde.internal.build.*;
 import org.eclipse.pde.internal.build.ant.*;
 import org.eclipse.pde.internal.build.builder.ClasspathComputer3_0.ClasspathElement;
 import org.eclipse.pde.internal.build.site.ProfileManager;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Version;
 
@@ -569,6 +569,7 @@ public class ModelBuildScriptGenerator extends AbstractBuildScriptGenerator {
 		script.printAttribute("binary", Utils.getPropertyFormat(PROPERTY_BINARY_FOLDERS), true); //$NON-NLS-1$
 		script.printAttribute("target", Utils.getPropertyFormat(PROPERTY_TARGET_FOLDER), true); //$NON-NLS-1$
 		script.printAttribute("extramanifests", Utils.getPropertyFormat(PROPERTY_EXTRA_MANIFESTS), true); //$NON-NLS-1$
+		script.printAttribute("allownonapiproject", Utils.getPropertyFormat(PROPERTY_ALLOW_NON_API_PROJECT), false); //$NON-NLS-1$
 		script.println("/>"); //$NON-NLS-1$
 		script.printTargetEnd();
 	}
@@ -576,20 +577,37 @@ public class ModelBuildScriptGenerator extends AbstractBuildScriptGenerator {
 	private void generateAPIToolsCall(String[] binaries, boolean dotIncluded, String target) throws CoreException {
 		Set classpathEntries = new HashSet(Arrays.asList(getClasspathEntries(model)));
 		StringBuffer binaryFolders = new StringBuffer();
-		for (int i = 0; i < binaries.length; i++) {
-			if (binaries[i] != null) {
-				if (i > 0)
+		if (workspaceOutputFolders != null && workspaceOutputFolders.size() > 0) {
+			for (Iterator iterator = workspaceOutputFolders.keySet().iterator(); iterator.hasNext();) {
+				String key = (String) iterator.next();
+				Set paths = (Set) workspaceOutputFolders.get(key);
+				for (Iterator iterator2 = paths.iterator(); iterator2.hasNext();) {
+					IPath path = (IPath) iterator2.next();
+					if (binaryFolders.length() > 0)
+						binaryFolders.append(File.pathSeparator);
+					binaryFolders.append(Utils.getPropertyFormat(PROPERTY_BASEDIR) + '/' + path.toString());
+				}
+				if (key.equals(DOT))
+					classpathEntries.remove(EXPANDED_DOT);
+				else
+					classpathEntries.remove(key);
+			}
+		} else {
+			for (int i = 0; i < binaries.length; i++) {
+				if (binaries[i] != null) {
+					if (i > 0)
+						binaryFolders.append(File.pathSeparator);
+					binaryFolders.append(target + '/' + binaries[i]);
+					classpathEntries.remove(binaries[i]);
+				}
+			}
+			if (dotIncluded) {
+				if (binaryFolders.length() > 0)
 					binaryFolders.append(File.pathSeparator);
-				binaryFolders.append(target + '/' + binaries[i]);
-				classpathEntries.remove(binaries[i]);
+				binaryFolders.append(Utils.getPropertyFormat(PROPERTY_BUILD_RESULT_FOLDER) + '/' + EXPANDED_DOT);
+				classpathEntries.remove(EXPANDED_DOT);
 			}
 		}
-		if (dotIncluded) {
-			if (binaryFolders.length() > 0)
-				binaryFolders.append(File.pathSeparator);
-			binaryFolders.append(Utils.getPropertyFormat(PROPERTY_BUILD_RESULT_FOLDER) + '/' + EXPANDED_DOT);
-			classpathEntries.remove(EXPANDED_DOT);
-		}
 		for (Iterator iterator = classpathEntries.iterator(); iterator.hasNext();) {
 			String entry = (String) iterator.next();
 			if (entry.equals(EXPANDED_DOT) || new File(model.getLocation(), entry).exists()) {
@@ -1415,8 +1433,13 @@ public class ModelBuildScriptGenerator extends AbstractBuildScriptGenerator {
 					if (classpath.size() > 0 && classpath.get(0) instanceof ClasspathElement) {
 						for (Iterator iterator = classpath.iterator(); iterator.hasNext();) {
 							ClasspathElement element = (ClasspathElement) iterator.next();
-							if (element.getPath() != null && element.getPath().length() > 0 && element.getAccessRules().length() > 0) {
-								String path = element.getPath();
+							if (element.getPath() != null && element.getAccessRules().length() > 0) {
+								String path = null;
+								if (element.getSubPath() == null)
+									path = element.getPath();
+								else
+									path = featureGenerator.getExtractedRoot(element) + '/' + element.getSubPath();
+
 								if (path.startsWith(Utils.getPropertyFormat(PROPERTY_BUILD_RESULT_FOLDER))) {
 									//remove leading ${build.result.folder}/
 									path = path.substring(Utils.getPropertyFormat(PROPERTY_BUILD_RESULT_FOLDER).length() + 1);
@@ -1442,6 +1465,39 @@ public class ModelBuildScriptGenerator extends AbstractBuildScriptGenerator {
 	}
 
 	/**
+	 * Add a target to extract any nested jars we need to compile against
+	 * @param classpath
+	 * @param entry
+	 * @return a new classpath list containing the extracted locations
+	 */
+	private List generateExtractNestedJars(List classpath, CompiledEntry entry) {
+		script.printTargetDeclaration(entry.getName(false) + TARGET_NESTED_JARS, null, null, null, null);
+
+		if (classpath == null || classpath.size() == 0 || !(classpath.get(0) instanceof ClasspathElement)) {
+			script.printTargetEnd();
+			return classpath;
+		}
+
+		List extracted = new ArrayList(classpath.size());
+		for (Iterator iterator = classpath.iterator(); iterator.hasNext();) {
+			ClasspathElement element = (ClasspathElement) iterator.next();
+
+			if (element.getSubPath() == null)
+				extracted.add(element);
+			else {
+				String destPath = featureGenerator.getExtractedRoot(element);
+				String destDir = Utils.getPropertyFormat(PROPERTY_BUILD_DIRECTORY) + '/' + "nestedJars" + '/' + destPath.toString(); //$NON-NLS-1$
+				script.printMkdirTask(destDir);
+				script.printUnzipTask(element.getPath(), destDir, false, element.getSubPath(), null);
+				extracted.add(destDir + '/' + element.getSubPath());
+			}
+		}
+		script.printTargetEnd();
+
+		return extracted;
+	}
+
+	/**
 	 * Add the "jar" target to the given Ant script using the given classpath and
 	 * jar as parameters.
 	 * 
@@ -1451,11 +1507,16 @@ public class ModelBuildScriptGenerator extends AbstractBuildScriptGenerator {
 	private void generateCompilationTarget(List classpath, CompiledEntry entry) {
 		script.println();
 		String name = entry.getName(false);
-		script.printTargetDeclaration(name, TARGET_INIT, null, entry.getName(true), NLS.bind(Messages.build_plugin_jar, model.getSymbolicName() + ' ' + name));
+
+		//extract nested jars and update the classpath with the new locations
+		List extractedPath = generateExtractNestedJars(classpath, entry);
+
+		String depends = TARGET_INIT + "," + name + TARGET_NESTED_JARS; //$NON-NLS-1$
+		script.printTargetDeclaration(name, depends, null, entry.getName(true), NLS.bind(Messages.build_plugin_jar, model.getSymbolicName() + ' ' + name));
 		String destdir = (entry.getType() == CompiledEntry.FOLDER) ? getJARLocation(entry.getName(true)) : getTempJARFolderLocation(entry.getName(true));
 		script.printDeleteTask(destdir, null, null);
 		script.printMkdirTask(destdir);
-		script.printPathStructure("path", name + PROPERTY_CLASSPATH, classpath); //$NON-NLS-1$
+		script.printPathStructure("path", name + PROPERTY_CLASSPATH, extractedPath); //$NON-NLS-1$
 
 		String[] sources = entry.getSource();
 		Map params = null, references = null;
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/SourceGenerator.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/SourceGenerator.java
index 3694a90..0987fc7 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/SourceGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/SourceGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,13 +17,13 @@ import java.util.*;
 import java.util.jar.*;
 import java.util.jar.Attributes.Name;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.*;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.build.Constants;
 import org.eclipse.pde.internal.build.*;
 import org.eclipse.pde.internal.build.builder.ModelBuildScriptGenerator.CompiledEntry;
 import org.eclipse.pde.internal.build.site.*;
-import org.eclipse.pde.internal.build.site.compatibility.*;
 import org.osgi.framework.Version;
 
 public class SourceGenerator implements IPDEBuildConstants, IBuildPropertiesConstants {
@@ -265,6 +265,8 @@ public class SourceGenerator implements IPDEBuildConstants, IBuildPropertiesCons
 		result.setCopyrightURL(featureExample.getCopyrightURL());
 		result.setLicense(featureExample.getLicense());
 		result.setLicenseURL(featureExample.getLicenseURL());
+		result.setLicenseFeature(featureExample.getLicenseFeature());
+		result.setLicenseFeatureVersion(featureExample.getLicenseFeatureVersion());
 		result.setUpdateSiteLabel(featureExample.getUpdateSiteLabel());
 		result.setUpdateSiteURL(featureExample.getUpdateSiteURL());
 
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/fetch/COPYFetchTasksFactory.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/fetch/COPYFetchTasksFactory.java
index 8a06e33..5d3866c 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/fetch/COPYFetchTasksFactory.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/fetch/COPYFetchTasksFactory.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004, 2006 Eclipse Foundation and others.
+ * Copyright (c) 2004, 2007 Eclipse Foundation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/messages.properties b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/messages.properties
index bcf2158..eb5768b 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2010 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -36,6 +36,7 @@ error_missingSourceFolder = In plugin {0}, the value for property {1} is not set
 error_noCorrespondingFactory = The element {0} cannot be fetched because the necessary factory ({1}) is not available.
 error_retrieveFailed = Could not retrieve feature.xml or build.properties for feature {0}.
 error_invalidURLInMapFileEntry = Invalid URL in map file entry: {0}
+error_licenseRootWithoutLicenseRef= Feature in {0} uses ''license:'' root keyword but does not reference a license feature
 
 ### exception
 exception_missingElement = Unable to find element: {0}.
@@ -77,10 +78,6 @@ build_compilerSetting = Compiler settings.
 invalid_archivesFormat = Invalid value for \"archivesFormat\" property: {0}.
 error_loading_platform_properties = Unable to load platform properties file: {0}.
 
-### feature parsing
-feature_parse_invalidIdOrVersion= Invalid ID \"{0}\" or version \"{1}\" encountered.
-feature_parse_emptyRequires = Error parsing feature: \"require\" must include at least one \"import\" element.
-
 ### assemble.xml
 assemble_jarUp = Create a jar from the given location.
 sign_Jar = Sign a jar.
@@ -93,4 +90,4 @@ unsatisfied_host = Host plug-in {0} has not been found.
 unsatisfied_nativeSpec = Unsatisfied native code filter: {0}. 
 
 fetching_p2Repo=Fetching IUs from {0} to {1}.
-includedFromFeature=Processing inclusion from feature {0}: {1}
\ No newline at end of file
+includedFromFeature=Processing inclusion from feature {0}: {1}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/ElementCollector.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/ElementCollector.java
index 25188ae..d16bea6 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/ElementCollector.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/packager/ElementCollector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,22 +13,22 @@ package org.eclipse.pde.internal.build.packager;
 import java.util.Iterator;
 import java.util.List;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.pde.internal.build.AssemblyInformation;
 import org.eclipse.pde.internal.build.Config;
 import org.eclipse.pde.internal.build.builder.BuildDirector;
 import org.eclipse.pde.internal.build.site.BuildTimeFeature;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 
 public class ElementCollector extends BuildDirector {
 	public ElementCollector(AssemblyInformation assemblageInformation) {
 		super(assemblageInformation);
-	} 
+	}
 
 	protected void generateIncludedFeatureBuildFile(BuildTimeFeature feature) throws CoreException {
 		FeatureEntry[] referencedFeatures = feature.getIncludedFeatureReferences();
 		for (int i = 0; i < referencedFeatures.length; i++) {
 			String featureId = referencedFeatures[i].getId();
-			
+
 			BuildTimeFeature nestedFeature = getSite(false).findFeature(featureId, null, true);
 
 			try {
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/BuildPublisherApplication.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/BuildPublisherApplication.java
deleted file mode 100644
index f139ada..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/BuildPublisherApplication.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.pde.internal.build.publisher;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.equinox.p2.publisher.AbstractPublisherApplication;
-import org.eclipse.equinox.p2.publisher.IPublisherAction;
-
-public class BuildPublisherApplication extends AbstractPublisherApplication {
-	private List actions;
-
-	public void addAction(IPublisherAction action) {
-		if (actions == null)
-			actions = new ArrayList(1);
-		actions.add(action);
-	}
-
-	protected IPublisherAction[] createActions() {
-		if (actions == null)
-			return new IPublisherAction[0];
-		return (IPublisherAction[]) actions.toArray(new IPublisherAction[actions.size()]);
-	}
-
-	public void setAppend(boolean value) {
-		super.append = value;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/FeatureRootAdvice.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/FeatureRootAdvice.java
deleted file mode 100644
index 7a89675..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/FeatureRootAdvice.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.pde.internal.build.publisher;
-
-import java.util.*;
-import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
-import org.eclipse.equinox.internal.p2.publisher.FileSetDescriptor;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.publisher.AbstractAdvice;
-import org.eclipse.equinox.p2.publisher.actions.IFeatureRootAdvice;
-import org.eclipse.pde.internal.build.Config;
-
-public class FeatureRootAdvice extends AbstractAdvice implements IFeatureRootAdvice {
-	private static final int IDX_COMPUTER = 0;
-	private static final int IDX_DESCRIPTOR = 1;
-
-	// String config -> Object[] { GatheringComputer, Map: permission -> Set, String }
-	private final Map advice = new HashMap();
-	private String featureId;
-	private Version featureVersion;
-
-	public boolean isApplicable(String configSpec, boolean includeDefault, String id, Version version) {
-		if (featureId != null && !featureId.equals(id))
-			return false;
-		if (featureVersion != null && !featureVersion.equals(version))
-			return false;
-
-		if (configSpec != null && !advice.containsKey(configSpec))
-			return false;
-
-		return true;
-	}
-
-	/**
-	 * Return the configs for which we have advice
-	 * @return String[]
-	 */
-	public String[] getConfigs() {
-		return (String[]) advice.keySet().toArray(new String[advice.size()]);
-	}
-
-	/**
-	 * Return the GatheringComputer containing the set of rootfiles to include for the given config
-	 * Returns null if we have no advice for the given config.
-	 * @param config
-	 * @return GatheringComputer
-	 */
-	public IPathComputer getRootFileComputer(String config) {
-		if (advice.containsKey(config))
-			return (GatheringComputer) ((Object[]) advice.get(config))[IDX_COMPUTER];
-		return null;
-	}
-
-	public void addRootfiles(String config, GatheringComputer computer) {
-		Object[] configAdvice = getConfigAdvice(config);
-
-		if (configAdvice[IDX_COMPUTER] == null)
-			configAdvice[IDX_COMPUTER] = computer;
-		else {
-			GatheringComputer existing = (GatheringComputer) configAdvice[IDX_COMPUTER];
-			existing.addAll(computer);
-		}
-		FileSetDescriptor descriptor = getDescriptor(config);
-		descriptor.addFiles(computer.getFiles());
-	}
-
-	public void addPermissions(String config, String permissions, String[] files) {
-		FileSetDescriptor descriptor = getDescriptor(config);
-		for (int i = 0; i < files.length; i++) {
-			descriptor.addPermissions(new String[] {permissions, files[i]});
-		}
-	}
-
-	public void addLinks(String config, String links) {
-		FileSetDescriptor descriptor = getDescriptor(config);
-		descriptor.setLinks(links);
-	}
-
-	private Object[] getConfigAdvice(String config) {
-		Object[] configAdvice = (Object[]) advice.get(config);
-		if (configAdvice == null) {
-			configAdvice = new Object[3];
-			advice.put(config, configAdvice);
-		}
-		return configAdvice;
-	}
-
-	public FileSetDescriptor getDescriptor(String config) {
-		Object[] configAdvice = getConfigAdvice(config);
-		FileSetDescriptor descriptor = null;
-
-		if (configAdvice[IDX_DESCRIPTOR] != null)
-			descriptor = (FileSetDescriptor) configAdvice[IDX_DESCRIPTOR];
-		else {
-			String key = "root"; //$NON-NLS-1$
-			if (!config.equals(Config.ANY) && config.length() > 0)
-				key += "." + config; //$NON-NLS-1$
-			descriptor = new FileSetDescriptor(key, config.equals(Config.ANY) ? null : config);
-			configAdvice[IDX_DESCRIPTOR] = descriptor;
-		}
-		return descriptor;
-	}
-
-	public void setFeatureId(String featureId) {
-		this.featureId = featureId;
-	}
-
-	public void setFeatureVersion(Version featureVersion) {
-		this.featureVersion = featureVersion;
-	}
-
-	public String[] getConfigurations() {
-		Set keys = advice.keySet();
-		return (String[]) keys.toArray(new String[keys.size()]);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatherBundleAction.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatherBundleAction.java
deleted file mode 100644
index f56bd55..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatherBundleAction.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.pde.internal.build.publisher;
-
-import java.io.File;
-import java.util.Dictionary;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.equinox.p2.publisher.IPublisherInfo;
-import org.eclipse.equinox.p2.publisher.IPublisherResult;
-import org.eclipse.equinox.p2.publisher.eclipse.*;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.pde.internal.build.BundleHelper;
-import org.eclipse.pde.internal.build.Utils;
-
-public class GatherBundleAction extends BundlesAction {
-	private GatheringComputer computer = null;
-	private String unpack = null;
-	private File manifestRoot = null;
-	private File bundleLocation = null;
-
-	/**
-	 * @param location
-	 */
-	public GatherBundleAction(File location, File manifestRoot) {
-		super(new File[] {location});
-		this.manifestRoot = manifestRoot;
-		this.bundleLocation = location;
-	}
-
-	public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
-		return super.perform(publisherInfo, results, monitor);
-	}
-
-	protected void publishArtifact(IArtifactDescriptor descriptor, File base, File[] inclusions, IPublisherInfo publisherInfo) {
-		//ignore passed in inclusions, publish according to our computer
-		publishArtifact(descriptor, computer.getFiles(), null, publisherInfo, computer);
-	}
-
-	protected BundleDescription[] getBundleDescriptions(File[] bundleLocations, IProgressMonitor monitor) {
-		Dictionary manifest = basicLoadManifest(manifestRoot);
-		if (manifest == null)
-			return null;
-
-		BundleDescription bundle = createBundleDescription(manifest, bundleLocation);
-		createShapeAdvice(bundle);
-		return new BundleDescription[] {bundle};
-	}
-
-	protected void createShapeAdvice(BundleDescription bundle) {
-		Dictionary manifest = (Dictionary) bundle.getUserObject();
-		String shape = (String) manifest.get(BUNDLE_SHAPE);
-		if (shape == null) {
-			if (unpack != null) {
-				shape = Boolean.valueOf(unpack).booleanValue() ? IBundleShapeAdvice.DIR : IBundleShapeAdvice.JAR;
-			} else {
-				shape = Utils.guessUnpack(bundle, BundleHelper.getClasspath(manifest)) ? IBundleShapeAdvice.DIR : IBundleShapeAdvice.JAR;
-			}
-		}
-		BundleShapeAdvice advice = new BundleShapeAdvice(bundle.getSymbolicName(), PublisherHelper.fromOSGiVersion(bundle.getVersion()), shape);
-		info.addAdvice(advice);
-	}
-
-	public void setComputer(GatheringComputer computer) {
-		this.computer = computer;
-	}
-
-	public void setUnpack(String unpack) {
-		this.unpack = unpack;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatherFeatureAction.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatherFeatureAction.java
deleted file mode 100644
index 08a3ae0..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatherFeatureAction.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.build.publisher;
-
-import java.io.File;
-import java.util.Collection;
-import org.eclipse.equinox.internal.p2.publisher.eclipse.FeatureParser;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.publisher.IPublisherInfo;
-import org.eclipse.equinox.p2.publisher.eclipse.Feature;
-import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
-import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
-import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
-
-public class GatherFeatureAction extends FeaturesAction {
-	private GatheringComputer computer;
-	private String groupId = null;
-	private FeatureRootAdvice rootAdvice;
-	private final File featureRoot;
-
-	public GatherFeatureAction(File location, File featureRoot) {
-		super(new File[] {location});
-		this.featureRoot = featureRoot;
-	}
-
-	public void setComputer(GatheringComputer computer) {
-		this.computer = computer;
-	}
-
-	public void setGroupId(String groupId) {
-		this.groupId = groupId;
-	}
-
-	protected Feature[] getFeatures(File[] locations) {
-		Feature feature = new FeatureParser().parse(featureRoot);
-		if (feature != null) {
-			feature.setLocation(locations[0].getAbsolutePath());
-			rootAdvice.setFeatureId(feature.getId());
-			rootAdvice.setFeatureVersion(Version.parseVersion(feature.getVersion()));
-			return new Feature[] {feature};
-		}
-		return new Feature[0];
-	}
-
-	//	protected ArrayList generateRootFileIUs(Feature feature, IPublisherResult result, IPublisherInfo publisherInfo) {
-	//		ArrayList ius = new ArrayList();
-	//
-	//		Collection collection = publisherInfo.getAdvice(null, false, null, null, FeatureRootAdvice.class);
-	//		if (collection.size() == 0)
-	//			return ius;
-	//
-	//		FeatureRootAdvice advice = (FeatureRootAdvice) collection.iterator().next();
-	//		String[] configs = advice.getConfigs();
-	//		for (int i = 0; i < configs.length; i++) {
-	//			String config = configs[i];
-	//
-	//			GatheringComputer rootComputer = advice.getRootFileComputer(config);
-	//
-	//			if (rootComputer != null) {
-	//				FileSetDescriptor descriptor = advice.getDescriptor(config);
-	//				IInstallableUnit iu = (IInstallableUnit) createFeatureRootFileIU(feature.getId(), feature.getVersion(), null, descriptor)[0];
-	//
-	//				File[] files = rootComputer.getFiles();
-	//				IArtifactKey artifactKey = iu.getArtifacts()[0];
-	//				ArtifactDescriptor artifactDescriptor = new ArtifactDescriptor(artifactKey);
-	//				publishArtifact(artifactDescriptor, files, null, publisherInfo, rootComputer);
-	//
-	//				result.addIU(iu, IPublisherResult.NON_ROOT);
-	//				ius.add(iu);
-	//			}
-	//		}
-	//		return ius;
-	//	}
-
-	protected String getGroupId(String featureId) {
-		if (groupId != null)
-			return groupId;
-		return super.getGroupId(featureId);
-	}
-
-	protected IInstallableUnit generateFeatureJarIU(Feature feature, IPublisherInfo publisherInfo) {
-		if (computer == null)
-			return null;
-		return createFeatureJarIU(feature, publisherInfo);
-	}
-
-	protected void publishFeatureArtifacts(Feature feature, IInstallableUnit featureIU, IPublisherInfo publisherInfo) {
-		if (computer == null)
-			return;
-
-		// add all the artifacts associated with the feature
-		Collection artifacts = featureIU.getArtifacts();
-		if (artifacts.size() > 1) {
-			//boo!
-		}
-
-		ArtifactDescriptor ad = (ArtifactDescriptor) PublisherHelper.createArtifactDescriptor(publisherInfo.getArtifactRepository(), (IArtifactKey) artifacts.iterator().next(), null);
-		processArtifactPropertiesAdvice(featureIU, ad, publisherInfo);
-		ad.setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP);
-
-		publishArtifact(ad, computer.getFiles(), null, publisherInfo, computer);
-	}
-
-	public void setRootAdvice(FeatureRootAdvice rootAdvice) {
-		this.rootAdvice = rootAdvice;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatheringComputer.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatheringComputer.java
deleted file mode 100644
index ede4a2d..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/publisher/GatheringComputer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others. All rights reserved. This
- * program and the accompanying materials are made available under the terms of
- * the Eclipse Public License v1.0 which accompanies this distribution, and is
- * available at http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors: IBM Corporation - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.pde.internal.build.publisher;
-
-import java.io.File;
-import java.util.LinkedHashMap;
-import java.util.Set;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.equinox.internal.p2.core.helpers.FileUtils.IPathComputer;
-
-public class GatheringComputer implements IPathComputer {
-	private static final String PROVIDED_PATH = ":PROVIDED:"; //$NON-NLS-1$
-	private final LinkedHashMap filesMap = new LinkedHashMap();
-
-	public IPath computePath(File source) {
-		String prefix = (String) filesMap.get(source);
-
-		IPath result = null;
-		if (prefix.startsWith(PROVIDED_PATH)) {
-			// the desired path is provided in the map
-			result = new Path(prefix.substring(10));
-		} else {
-			//else the map contains a prefix which must be stripped from the path
-			result = new Path(source.getAbsolutePath());
-			IPath rootPath = new Path(prefix);
-			result = result.removeFirstSegments(rootPath.matchingFirstSegments(result));
-		}
-		return result.setDevice(null);
-	}
-
-	public void reset() {
-		// nothing
-
-	}
-
-	public void addAll(GatheringComputer computer) {
-		filesMap.putAll(computer.filesMap);
-	}
-
-	public void addFiles(String prefix, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			filesMap.put(new File(prefix, files[i]), prefix);
-		}
-	}
-
-	public void addFile(String prefix, String file) {
-		filesMap.put(new File(prefix, file), prefix);
-	}
-
-	public void addFile(String computedPath, File file) {
-		filesMap.put(file, PROVIDED_PATH + computedPath);
-	}
-
-	public File[] getFiles() {
-		Set keys = filesMap.keySet();
-		return (File[]) keys.toArray(new File[keys.size()]);
-	}
-
-	public int size() {
-		return filesMap.size();
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeature.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeature.java
index dc84495..7c8f027 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeature.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,10 +14,12 @@ import java.io.File;
 import java.net.*;
 import java.util.ArrayList;
 import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.pde.build.Constants;
 import org.eclipse.pde.internal.build.IPDEBuildConstants;
 import org.eclipse.pde.internal.build.Utils;
-import org.eclipse.pde.internal.build.site.compatibility.*;
+import org.eclipse.pde.internal.build.site.compatibility.SiteManager;
 
 public class BuildTimeFeature extends Feature {
 	/**
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeatureParser.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeatureParser.java
index 481e4ae..7032b6a 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeatureParser.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeFeatureParser.java
@@ -1,28 +1,35 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2007, 2011 IBM Corporation and others. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  * 
- * Contributors: IBM Corporation - initial API and implementation
+ * Contributors:
+ *    IBM Corporation - initial API and implementation
+ *    SAP AG - consolidation of publishers for PDE formats
  ******************************************************************************/
 
 package org.eclipse.pde.internal.build.site;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
-import org.eclipse.pde.internal.build.site.compatibility.Feature;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureParser;
+import org.eclipse.equinox.internal.p2.publisher.eclipse.FeatureManifestParser;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
 import org.xml.sax.SAXException;
 
+public class BuildTimeFeatureParser extends FeatureManifestParser {
 
-public class BuildTimeFeatureParser extends FeatureParser {
-	
 	protected Feature createFeature(String id, String version) {
 		return new BuildTimeFeature(id, version);
 	}
 
 	public Feature parse(URL featureURL) throws SAXException, IOException {
-		return super.parse(featureURL);
+		InputStream in = featureURL.openStream();
+		try {
+			return super.parse(in, featureURL);
+		} finally {
+			in.close();
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java
index 5af68c2..7c0ffdc 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/BuildTimeSite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,10 +15,12 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.*;
-import org.eclipse.pde.internal.build.site.compatibility.*;
+import org.eclipse.pde.internal.build.site.compatibility.FeatureReference;
 import org.osgi.framework.Filter;
 import org.osgi.framework.Version;
 
@@ -91,8 +93,8 @@ public class BuildTimeSite /*extends Site*/implements IPDEBuildConstants, IXMLCo
 
 	private Dictionary getUIPlatformProperties() {
 		Dictionary result = new Hashtable();
-		result.put(IBuildPropertiesConstants.PROPERTY_RESOLVE_OPTIONAL, IBuildPropertiesConstants.TRUE);
-		result.put(IBuildPropertiesConstants.PROPERTY_RESOLVER_MODE, IBuildPropertiesConstants.VALUE_DEVELOPMENT);
+		result.put(IPDEBuildConstants.PROPERTY_RESOLVE_OPTIONAL, IBuildPropertiesConstants.TRUE);
+		result.put(IPDEBuildConstants.PROPERTY_RESOLVER_MODE, IPDEBuildConstants.VALUE_DEVELOPMENT);
 		return result;
 	}
 
@@ -224,7 +226,7 @@ public class BuildTimeSite /*extends Site*/implements IPDEBuildConstants, IXMLCo
 	static public boolean isConfigError(BundleDescription bundle, ResolverError[] errors, List configs) {
 		Dictionary environment = new Hashtable(3);
 		Filter bundleFilter = BundleHelper.getDefault().getFilter(bundle);
-		if (hasPlatformFilterError(errors) != null) {
+		if (bundleFilter != null && hasPlatformFilterError(errors) != null) {
 			for (Iterator iter = configs.iterator(); iter.hasNext();) {
 				Config aConfig = (Config) iter.next();
 				environment.put("osgi.os", aConfig.getOs()); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java
index 9fbb943..9aa825d 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/PDEState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2010 IBM Corporation and others.
+ *  Copyright (c) 2004, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -101,7 +101,7 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 			if (addBundleDescription(descriptor) == true && addedBundle != null)
 				addedBundle.add(descriptor);
 		} catch (BundleException e) {
-			IStatus status = new Status(IStatus.WARNING, IPDEBuildConstants.PI_PDEBUILD, EXCEPTION_STATE_PROBLEM, NLS.bind(Messages.exception_stateAddition, enhancedManifest.get(Constants.BUNDLE_NAME)), e);
+			IStatus status = new Status(IStatus.WARNING, IPDEBuildConstants.PI_PDEBUILD, EXCEPTION_STATE_PROBLEM, NLS.bind(Messages.exception_stateAddition, BundleHelper.getManifestHeader(enhancedManifest, Constants.BUNDLE_NAME)), e);
 			BundleHelper.getDefault().getLog().log(status);
 			return false;
 		}
@@ -146,7 +146,7 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 		}
 
 		for (int i = 0; i < entries.length; i++) {
-			String entry = (String) manifest.get(entries[i]);
+			String entry = BundleHelper.getManifestHeader(manifest, entries[i]);
 			if (entry != null) {
 				properties.put(entries[i], entry);
 			}
@@ -177,11 +177,11 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 	}
 
 	private String fillPatchData(Dictionary manifest) {
-		if (manifest.get(EXTENSIBLE_API) != null) {
+		if (BundleHelper.getManifestHeader(manifest, EXTENSIBLE_API) != null) {
 			return EXTENSIBLE_API + ": true"; //$NON-NLS-1$
 		}
 
-		if (manifest.get(PATCH_FRAGMENT) != null) {
+		if (BundleHelper.getManifestHeader(manifest, PATCH_FRAGMENT) != null) {
 			return PATCH_FRAGMENT + ": true"; //$NON-NLS-1$
 		}
 		return null;
@@ -248,12 +248,12 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 		String newVersion = null;
 		String oldVersion = null;
 		try {
-			String symbolicName = (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME);
+			String symbolicName = BundleHelper.getManifestHeader(manifest, Constants.BUNDLE_SYMBOLICNAME);
 			if (symbolicName == null)
 				return null;
 
 			symbolicName = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, symbolicName)[0].getValue();
-			oldVersion = (String) manifest.get(Constants.BUNDLE_VERSION);
+			oldVersion = BundleHelper.getManifestHeader(manifest, Constants.BUNDLE_VERSION);
 			newVersion = QualifierReplacer.replaceQualifierInVersion(oldVersion, symbolicName, (String) manifest.get(PROPERTY_QUALIFIER), repositoryVersions);
 		} catch (BundleException e) {
 			//ignore
@@ -269,7 +269,7 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 	 * @throws BundleException
 	 */
 	private void hasQualifier(File bundleLocation, Dictionary manifest) throws BundleException {
-		ManifestElement[] versionInfo = ManifestElement.parseHeader(Constants.BUNDLE_VERSION, (String) manifest.get(Constants.BUNDLE_VERSION));
+		ManifestElement[] versionInfo = ManifestElement.parseHeader(Constants.BUNDLE_VERSION, BundleHelper.getManifestHeader(manifest, Constants.BUNDLE_VERSION));
 		if (versionInfo != null) {
 			if (versionInfo[0].getValue().endsWith(PROPERTY_QUALIFIER)) {
 				manifest.put(PROPERTY_QUALIFIER, getQualifierPropery(bundleLocation.getAbsolutePath()));
@@ -335,7 +335,7 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 	}
 
 	private boolean enforceSymbolicName(File bundleLocation, Dictionary initialManifest) {
-		if (initialManifest.get(Constants.BUNDLE_SYMBOLICNAME) != null)
+		if (BundleHelper.getManifestHeader(initialManifest, Constants.BUNDLE_SYMBOLICNAME) != null)
 			return true;
 
 		Dictionary generatedManifest = convertPluginManifest(bundleLocation, false);
@@ -346,18 +346,24 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 		Enumeration enumeration = generatedManifest.keys();
 		while (enumeration.hasMoreElements()) {
 			Object key = enumeration.nextElement();
-			if (initialManifest.get(key) == null)
+			if (BundleHelper.getManifestHeader(initialManifest, (String) key) == null)
 				initialManifest.put(key, generatedManifest.get(key));
 		}
 		return true;
 	}
 
 	private void enforceClasspath(Dictionary manifest) {
-		String classpath = (String) manifest.get(Constants.BUNDLE_CLASSPATH);
+		String classpath = BundleHelper.getManifestHeader(manifest, Constants.BUNDLE_CLASSPATH);
 		if (classpath == null)
 			manifest.put(Constants.BUNDLE_CLASSPATH, "."); //$NON-NLS-1$
 	}
 
+	private void enforceVersion(Dictionary manifest) {
+		String version = BundleHelper.getManifestHeader(manifest, Constants.BUNDLE_VERSION);
+		if (version == null)
+			manifest.put(Constants.BUNDLE_VERSION, "0.0.0"); //$NON-NLS-1$
+	}
+
 	private Dictionary loadManifest(File bundleLocation) {
 		Dictionary manifest = basicLoadManifest(bundleLocation);
 		if (manifest == null)
@@ -366,6 +372,7 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 		// require a Bundle-SymbolicName
 		if (!enforceSymbolicName(bundleLocation, manifest))
 			return null;
+		enforceVersion(manifest);
 		enforceClasspath(manifest);
 		return manifest;
 	}
@@ -412,11 +419,10 @@ public class PDEState implements IPDEBuildConstants, IBuildPropertiesConstants {
 		String systemPackages = null;
 		String ee = null;
 
-		int i = 0;
-		for (Iterator iter = configs.iterator(); iter.hasNext(); i++) {
+		for (Iterator iter = configs.iterator(); iter.hasNext();) {
 			Config aConfig = (Config) iter.next();
 			prop = new Hashtable();
-			if (AbstractScriptGenerator.getPropertyAsBoolean(IBuildPropertiesConstants.RESOLVER_DEV_MODE))
+			if (AbstractScriptGenerator.getPropertyAsBoolean(RESOLVER_DEV_MODE))
 				prop.put(PROPERTY_RESOLVER_MODE, VALUE_DEVELOPMENT);
 			String os = aConfig.getOs();
 			String ws = aConfig.getWs();
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/ReachablePlugin.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/ReachablePlugin.java
index 632989d..a05f43b 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/ReachablePlugin.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/ReachablePlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,9 +10,9 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.build.site;
 
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.service.resolver.VersionRange;
 import org.eclipse.pde.internal.build.Utils;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 import org.osgi.framework.Version;
 
 /**
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/Feature.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/Feature.java
deleted file mode 100644
index e204d35..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/Feature.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.build.site.compatibility;
-
-import java.util.ArrayList;
-
-/**
- * 
- * Feature information
- */
-public class Feature implements IPlatformEntry {
-
-	private final String id;
-	private String version;
-	private String label;
-	private String image;
-	private String brandingPlugin;
-
-	private URLEntry description;
-	private URLEntry license;
-	private URLEntry copyright;
-
-	private String installHandler;
-	private String installHandlerURL;
-	private String installHandlerLibrary;
-
-	private URLEntry updateSite;
-	private ArrayList discoverySites;
-
-	private ArrayList entries;
-	private String name;
-	private String providerName;
-	private String os;
-	private String ws;
-	private String arch;
-	private String nl;
-
-	public Feature(String id, String version) {
-		if (id == null)
-			throw new IllegalArgumentException();
-		this.id = id;
-		this.version = version;
-	}
-
-	public void addEntry(FeatureEntry plugin) {
-		if (plugin == null)
-			return;
-		if (entries == null)
-			entries = new ArrayList();
-		entries.add(plugin);
-	}
-
-	public FeatureEntry[] getEntries() {
-		if (entries == null)
-			return new FeatureEntry[0];
-		return (FeatureEntry[]) entries.toArray(new FeatureEntry[entries.size()]);
-	}
-
-	public boolean removeEntry(FeatureEntry entry) {
-		if (entry == null || entries == null)
-			return false;
-		return entries.remove(entry);
-	}
-
-	public void setLabel(String label) {
-		this.label = label;
-	}
-
-	public String getLabel() {
-		return label;
-	}
-
-	public void setImage(String image) {
-		this.image = image;
-	}
-
-	public String getImage() {
-		return image;
-	}
-
-	public void setDescription(String description) {
-		if (this.description == null)
-			this.description = new URLEntry();
-		this.description.setAnnotation(description);
-	}
-
-	public String getDescription() {
-		if (description != null)
-			return description.getAnnotation();
-		return null;
-	}
-
-	public String getDescriptionURL() {
-		if (description != null)
-			return description.getURL();
-		return null;
-	}
-
-	public void setDescriptionURL(String descriptionURL) {
-		if (this.description == null)
-			this.description = new URLEntry();
-		this.description.setURL(descriptionURL);
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public String getProviderName() {
-		return providerName;
-	}
-
-	public void setProviderName(String value) {
-		providerName = value;
-	}
-
-	public String getVersion() {
-		return version;
-	}
-
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public void setLicenseURL(String licenseURL) {
-		if (this.license == null)
-			this.license = new URLEntry();
-		this.license.setURL(licenseURL);
-	}
-
-	public String getLicenseURL() {
-		if (license != null)
-			return license.getURL();
-		return null;
-	}
-
-	public void setLicense(String license) {
-		if (this.license == null)
-			this.license = new URLEntry();
-		this.license.setAnnotation(license);
-	}
-
-	public String getLicense() {
-		if (license != null)
-			return license.getAnnotation();
-		return null;
-	}
-
-	public void setCopyright(String copyright) {
-		if (this.copyright == null)
-			this.copyright = new URLEntry();
-		this.copyright.setAnnotation(copyright);
-	}
-
-	public void setCopyrightURL(String copyrightURL) {
-		if (this.copyright == null)
-			this.copyright = new URLEntry();
-		this.copyright.setURL(copyrightURL);
-	}
-
-	public String getCopyright() {
-		if (copyright != null)
-			return copyright.getAnnotation();
-		return null;
-	}
-
-	public String getCopyrightURL() {
-		if (copyright != null)
-			return copyright.getURL();
-		return null;
-	}
-
-	public void setInstallHandler(String installHandler) {
-		this.installHandler = installHandler;
-	}
-
-	public void setInstallHandlerLibrary(String installHandlerLibrary) {
-		this.installHandlerLibrary = installHandlerLibrary;
-	}
-
-	public void setInstallHandlerURL(String installHandlerURL) {
-		this.installHandlerURL = installHandlerURL;
-	}
-
-	public String getInstallHandler() {
-		return installHandler;
-	}
-
-	public String getInstallHandlerLibrary() {
-		return installHandlerLibrary;
-	}
-
-	public String getInstallHandlerURL() {
-		return installHandlerURL;
-	}
-
-	public void setUpdateSiteLabel(String updateSiteLabel) {
-		if (this.updateSite == null)
-			this.updateSite = new URLEntry();
-		this.updateSite.setAnnotation(updateSiteLabel);
-	}
-
-	public void setUpdateSiteURL(String updateSiteURL) {
-		if (this.updateSite == null)
-			this.updateSite = new URLEntry();
-		this.updateSite.setURL(updateSiteURL);
-	}
-
-	public String getUpdateSiteLabel() {
-		if (updateSite != null)
-			return updateSite.getAnnotation();
-		return null;
-	}
-
-	public String getUpdateSiteURL() {
-		if (updateSite != null)
-			return updateSite.getURL();
-		return null;
-	}
-
-	public void addDiscoverySite(String discoveryLabel, String url) {
-		if (discoveryLabel == null && url == null)
-			return;
-
-		if (this.discoverySites == null)
-			this.discoverySites = new ArrayList();
-
-		URLEntry entry = new URLEntry(url, discoveryLabel);
-		this.discoverySites.add(entry);
-	}
-
-	public URLEntry[] getDiscoverySites() {
-		if (discoverySites == null)
-			return new URLEntry[0];
-		return (URLEntry[]) discoverySites.toArray(new URLEntry[discoverySites.size()]);
-	}
-
-	public void setEnvironment(String os, String ws, String arch, String nl) {
-		this.os = os;
-		this.ws = ws;
-		this.arch = arch;
-		this.nl = nl;
-	}
-
-	public String getOS() {
-		return os;
-	}
-
-	public String getWS() {
-		return ws;
-	}
-
-	public String getArch() {
-		return arch;
-	}
-
-	public String getNL() {
-		return nl;
-	}
-
-	public void setURL(String value) {
-		// nothing for now
-	}
-
-	public void setBrandingPlugin(String brandingPlugin) {
-		this.brandingPlugin = brandingPlugin;
-	}
-
-	public String getBrandingPlugin() {
-		return brandingPlugin;
-	}
-
-	/**
-	 * For debugging purposes only.
-	 */
-	public String toString() {
-		return "Feature " + id + " version: " + version; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureEntry.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureEntry.java
deleted file mode 100644
index e28ddbe..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureEntry.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.build.site.compatibility;
-
-/**
- */
-public class FeatureEntry implements IPlatformEntry {
-	private final String id;
-	private final String version;
-	private String url;
-	private String os;
-	private String ws;
-	private String arch;
-	private String nl;
-	private String match;
-	private final boolean isPlugin;
-	private boolean isFragment = false;
-	private boolean isRequires = false;
-	private Boolean unpack = null;
-	private boolean optional = false;
-
-	/**
-	 * Temporary field to add provisioning filters to features
-	 */
-	private String filter;
-
-	public static FeatureEntry createRequires(String id, String version, String match, String filter, boolean isPlugin) {
-		FeatureEntry result = new FeatureEntry(id, version, isPlugin);
-		result.match = match;
-		result.isRequires = true;
-		if (filter != null)
-			result.setFilter(filter);
-		return result;
-	}
-
-	public FeatureEntry(String id, String version, boolean isPlugin) {
-		this.id = id;
-		this.version = version;
-		this.isPlugin = isPlugin;
-	}
-
-	public String getURL() {
-		return url;
-	}
-
-	public void setURL(String value) {
-		url = value;
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public String getVersion() {
-		return version;
-	}
-
-	public boolean isPlugin() {
-		return isPlugin;
-	}
-
-	public boolean isRequires() {
-		return isRequires;
-	}
-
-	public boolean isFragment() {
-		return isFragment;
-	}
-
-	public String toString() {
-		StringBuffer result = new StringBuffer();
-
-		result.append(isPlugin ? "Plugin: " : "Feature: "); //$NON-NLS-1$ //$NON-NLS-2$
-		result.append(id != null ? id.toString() : ""); //$NON-NLS-1$
-		result.append(version != null ? " " + version.toString() : ""); //$NON-NLS-1$ //$NON-NLS-2$
-		return result.toString();
-	}
-
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((id == null) ? 0 : id.hashCode());
-		result = prime * result + ((version == null) ? 0 : version.hashCode());
-		return result;
-	}
-
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		final FeatureEntry other = (FeatureEntry) obj;
-		if (id == null) {
-			if (other.id != null)
-				return false;
-		} else if (!id.equals(other.id))
-			return false;
-		if (version == null) {
-			if (other.version != null)
-				return false;
-		} else if (!version.equals(other.version))
-			return false;
-		return true;
-	}
-
-	public void setEnvironment(String os, String ws, String arch, String nl) {
-		this.os = os;
-		this.ws = ws;
-		this.arch = arch;
-		this.nl = nl;
-	}
-
-	public void setFragment(boolean value) {
-		isFragment = value;
-	}
-
-	public void setUnpack(boolean value) {
-		unpack = Boolean.valueOf(value);
-	}
-
-	public boolean isUnpack() {
-		return (unpack == null || unpack.booleanValue());
-	}
-
-	public boolean unpackSet() {
-		return unpack != null;
-	}
-
-	public void setOptional(boolean value) {
-		optional = value;
-	}
-
-	/**
-	 * Temporary method to add provisioning filters to features
-	 */
-	public void setFilter(String filter) {
-		this.filter = filter;
-
-	}
-
-	/**
-	 * Temporary method to add provisioning filters to features
-	 */
-	public String getFilter() {
-		return filter;
-	}
-
-	public String getMatch() {
-		return match;
-	}
-
-	public boolean isOptional() {
-		return optional;
-	}
-
-	public String getOS() {
-		return os;
-	}
-
-	public String getWS() {
-		return ws;
-	}
-
-	public String getArch() {
-		return arch;
-	}
-
-	public String getNL() {
-		return nl;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureParser.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureParser.java
deleted file mode 100644
index 4d6ea32..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureParser.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.build.site.compatibility;
-
-import java.io.*;
-import java.net.URL;
-import javax.xml.parsers.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.pde.internal.build.IPDEBuildConstants;
-import org.eclipse.pde.internal.build.Messages;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Default feature parser.
- * Parses the feature manifest file as defined by the platform.
- * 
- * @since 3.0
- */
-public class FeatureParser extends DefaultHandler implements IPDEBuildConstants {
-
-	private SAXParser parser;
-	private Feature result;
-	private URL url;
-	private StringBuffer characters = null;
-	private MultiStatus status = null;
-	private boolean hasImports = false;
-
-	private final static SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-
-	public FeatureParser() {
-		super();
-		try {
-			parserFactory.setNamespaceAware(true);
-			this.parser = parserFactory.newSAXParser();
-		} catch (ParserConfigurationException e) {
-			System.out.println(e);
-		} catch (SAXException e) {
-			System.out.println(e);
-		}
-	}
-
-	/**
-	 * Parses the specified url and constructs a feature
-	 */
-	public Feature parse(URL featureURL) throws SAXException, IOException {
-		result = null;
-		InputStream in = null;
-		try {
-			url = featureURL;
-			in = featureURL.openStream();
-			parser.parse(new InputSource(in), this);
-		} finally {
-			if (in != null)
-				in.close();
-		}
-		return result;
-	}
-
-	public MultiStatus getStatus() {
-		return status;
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) {
-		//		Utils.debug("Start Element: uri:" + uri + " local Name:" + localName + " qName:" + qName); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		if (PLUGIN.equals(localName)) {
-			processPlugin(attributes);
-		} else if ("description".equals(localName)) { //$NON-NLS-1$
-			processDescription(attributes);
-		} else if ("license".equals(localName)) { //$NON-NLS-1$
-			processLicense(attributes);
-		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
-			processCopyright(attributes);
-		} else if (FEATURE.equals(localName)) {
-			processFeature(attributes);
-		} else if ("import".equals(localName)) { //$NON-NLS-1$
-			processImport(attributes);
-		} else if ("includes".equals(localName)) { //$NON-NLS-1$
-			processIncludes(attributes);
-		} else if ("install-handler".equals(localName)) { //$NON-NLS-1$
-			processInstallHandler(attributes);
-		} else if ("update".equals(localName)) { //$NON-NLS-1$
-			processUpdateSite(attributes);
-		} else if ("discovery".equals(localName)) { //$NON-NLS-1$
-			processDiscoverySite(attributes);
-		}
-	}
-
-	private void processImport(Attributes attributes) {
-		String id = attributes.getValue(FEATURE);
-		FeatureEntry entry = null;
-		if (id != null) {
-			entry = FeatureEntry.createRequires(id, attributes.getValue(VERSION), attributes.getValue("match"), attributes.getValue("filter"), false); //$NON-NLS-1$ //$NON-NLS-2$
-		} else {
-			id = attributes.getValue(PLUGIN);
-			entry = FeatureEntry.createRequires(id, attributes.getValue(VERSION), attributes.getValue("match"), attributes.getValue("filter"), true); //$NON-NLS-1$ //$NON-NLS-2$ 
-		}
-		hasImports = true;
-		result.addEntry(entry);
-	}
-
-	private void processIncludes(Attributes attributes) {
-		FeatureEntry entry = new FeatureEntry(attributes.getValue(ID), attributes.getValue(VERSION), false);
-		String flag = attributes.getValue("unpack"); //$NON-NLS-1$
-		if (flag != null)
-			entry.setUnpack(Boolean.valueOf(flag).booleanValue());
-		flag = attributes.getValue("optional"); //$NON-NLS-1$
-		if (flag != null)
-			entry.setOptional(Boolean.valueOf(flag).booleanValue());
-		setEnvironment(attributes, entry);
-		result.addEntry(entry);
-	}
-
-	private void processInstallHandler(Attributes attributes) {
-		result.setInstallHandler(attributes.getValue("handler")); //$NON-NLS-1$
-		result.setInstallHandlerLibrary(attributes.getValue("library")); //$NON-NLS-1$
-		result.setInstallHandlerURL(attributes.getValue("url")); //$NON-NLS-1$
-	}
-
-	private void processUpdateSite(Attributes attributes) {
-		result.setUpdateSiteLabel(attributes.getValue("label")); //$NON-NLS-1$
-		result.setUpdateSiteURL(attributes.getValue("url")); //$NON-NLS-1$
-	}
-
-	private void processDiscoverySite(Attributes attributes) {
-		result.addDiscoverySite(attributes.getValue("label"), attributes.getValue("url")); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	private void setEnvironment(Attributes attributes, FeatureEntry entry) {
-		String os = attributes.getValue("os"); //$NON-NLS-1$
-		String ws = attributes.getValue("ws"); //$NON-NLS-1$
-		String nl = attributes.getValue("nl"); //$NON-NLS-1$
-		String arch = attributes.getValue("arch"); //$NON-NLS-1$
-		entry.setEnvironment(os, ws, arch, nl);
-	}
-
-	protected Feature createFeature(String id, String version) {
-		return new Feature(id, version);
-	}
-
-	protected void processFeature(Attributes attributes) {
-		String id = attributes.getValue(ID);
-		String ver = attributes.getValue(VERSION);
-
-		if (id == null || id.trim().equals("") //$NON-NLS-1$
-				|| ver == null || ver.trim().equals("")) { //$NON-NLS-1$
-			error(NLS.bind(Messages.feature_parse_invalidIdOrVersion, (new String[] {id, ver})));
-		} else {
-			result = createFeature(id, ver);
-
-			String os = attributes.getValue("os"); //$NON-NLS-1$
-			String ws = attributes.getValue("ws"); //$NON-NLS-1$
-			String nl = attributes.getValue("nl"); //$NON-NLS-1$
-			String arch = attributes.getValue("arch"); //$NON-NLS-1$
-			result.setEnvironment(os, ws, arch, nl);
-
-			//TODO rootURLs
-			if ("file".equals(url.getProtocol())) { //$NON-NLS-1$
-				File f = new File(url.getFile().replace('/', File.separatorChar));
-				result.setURL("features" + "/" + f.getParentFile().getName() + "/");// + f.getName()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			} else {
-				// externalized URLs might be in relative form, ensure they are absolute				
-				//				feature.setURL(Utils.makeAbsolute(Utils.getInstallURL(), url).toExternalForm());
-			}
-
-			result.setProviderName(attributes.getValue("provider-name")); //$NON-NLS-1$
-			result.setLabel(attributes.getValue("label")); //$NON-NLS-1$
-			result.setImage(attributes.getValue("image")); //$NON-NLS-1$
-			result.setBrandingPlugin(attributes.getValue(PLUGIN));
-			//			Utils.debug("End process DefaultFeature tag: id:" +id + " ver:" +ver + " url:" + feature.getURL()); 	 //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	private void processPlugin(Attributes attributes) {
-		String id = attributes.getValue(ID);
-		String version = attributes.getValue(VERSION);
-
-		if (id == null || id.trim().equals("") || version == null || version.trim().equals("")) { //$NON-NLS-1$ //$NON-NLS-2$
-			error(NLS.bind(Messages.feature_parse_invalidIdOrVersion, (new String[] {id, version})));
-		} else {
-			FeatureEntry plugin = new FeatureEntry(id, version, true);
-			setEnvironment(attributes, plugin);
-			String unpack = attributes.getValue("unpack"); //$NON-NLS-1$
-			if (unpack != null)
-				plugin.setUnpack(Boolean.valueOf(unpack).booleanValue());
-			String fragment = attributes.getValue(FRAGMENT);
-			if (fragment != null)
-				plugin.setFragment(Boolean.valueOf(fragment).booleanValue());
-			String filter = attributes.getValue("filter"); //$NON-NLS-1$
-			if (filter != null)
-				plugin.setFilter(filter);
-			result.addEntry(plugin);
-
-			//			Utils.debug("End process DefaultFeature tag: id:" + id + " ver:" + ver + " url:" + feature.getURL()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	private void processLicense(Attributes attributes) {
-		result.setLicenseURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processCopyright(Attributes attributes) {
-		result.setCopyrightURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	private void processDescription(Attributes attributes) {
-		result.setDescriptionURL(attributes.getValue("url")); //$NON-NLS-1$
-		characters = new StringBuffer();
-	}
-
-	public void characters(char[] ch, int start, int length) {
-		if (characters == null)
-			return;
-		characters.append(ch, start, length);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		if ("requires".equals(localName) && !hasImports) { //$NON-NLS-1$
-			error(Messages.feature_parse_emptyRequires);
-		}
-		if (characters == null)
-			return;
-		if ("description".equals(localName)) { //$NON-NLS-1$
-			result.setDescription(characters.toString().trim());
-		} else if ("license".equals(localName)) { //$NON-NLS-1$
-			result.setLicense(characters.toString().trim());
-		} else if ("copyright".equals(localName)) { //$NON-NLS-1$
-			result.setCopyright(characters.toString().trim());
-		}
-		characters = null;
-	}
-
-	private void error(String message) {
-		if (status == null) {
-			String msg = NLS.bind(Messages.exception_featureParse, url.toExternalForm());
-			status = new MultiStatus(PI_PDEBUILD, EXCEPTION_FEATURE_PARSE, msg, null);
-		}
-		status.add(new Status(IStatus.ERROR, PI_PDEBUILD, EXCEPTION_FEATURE_PARSE, message, null));
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureReference.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureReference.java
index d072a4d..c0dcf23 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureReference.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/FeatureReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2007 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.pde.internal.build.site.compatibility;
 import java.net.MalformedURLException;
 import java.net.URL;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.equinox.p2.publisher.eclipse.Feature;
 import org.eclipse.pde.internal.build.site.BuildTimeFeatureFactory;
 import org.eclipse.pde.internal.build.site.BuildTimeSite;
 
@@ -33,7 +34,7 @@ public class FeatureReference {
 	public Feature getFeature() throws CoreException {
 		if (feature != null)
 			return feature;
-		
+
 		if (site != null)
 			feature = site.createFeature(getURL());
 		else {
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/IPlatformEntry.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/IPlatformEntry.java
deleted file mode 100644
index af54b83..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/IPlatformEntry.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.pde.internal.build.site.compatibility;
-
-public interface IPlatformEntry {
-	public String getOS();
-
-	public String getWS();
-
-	public String getArch();
-
-	public String getNL();
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/SiteManager.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/SiteManager.java
index 8ed1771..9897179 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/SiteManager.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/SiteManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2007, 2011 IBM Corporation and others. All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -11,6 +11,7 @@ package org.eclipse.pde.internal.build.site.compatibility;
 
 import java.util.StringTokenizer;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.p2.publisher.eclipse.IPlatformEntry;
 
 public class SiteManager {
 	private static String os;
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/URLEntry.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/URLEntry.java
deleted file mode 100644
index 02dd721..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/site/compatibility/URLEntry.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2007, 2008 IBM Corporation and others.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- *      IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.pde.internal.build.site.compatibility;
-
-public class URLEntry {
-	private String annotation;
-	private String url;
-
-	public URLEntry() {
-		this.annotation = ""; //$NON-NLS-1$
-		this.url = ""; //$NON-NLS-1$
-	}
-
-	public URLEntry(String url, String annotation) {
-		this.url = url;
-		this.annotation = annotation;
-	}
-
-	public void setAnnotation(String annotation) {
-		this.annotation = annotation;
-	}
-
-	public String getAnnotation() {
-		return annotation;
-	}
-
-	public void setURL(String url) {
-		this.url = url;
-	}
-
-	public String getURL() {
-		return url;
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/swt/tools/IconExe.java b/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/swt/tools/IconExe.java
deleted file mode 100644
index 3b4671c..0000000
--- a/eclipse/plugins/org.eclipse.pde.build/src/org/eclipse/pde/internal/swt/tools/IconExe.java
+++ /dev/null
@@ -1,3339 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.swt.tools;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Customize the icon of a Windows exe
- * 
- * WARNING! This class is not part of SWT API. It is NOT API. It is an internal
- * tool that may be changed or removed at anytime.
- * 
- * Based on MSDN "An In-Depth Look into the Win32 Portable Executable File Format".
- * 
- * Win x64 support (Bug #238001) based on MSDN "x64 Primer: Everything You Need To 
- * Know To Start Programming 64-Bit Windows Systems".
- */
-public class IconExe {
-	
-	 /**
-	 * Replace the Desktop icons provided in the Windows executable program
-	 * with matching icons provided by the user.
-	 *
- 	 * Takes 2 arguments
-	 * argument 0: the Windows executable e.g c:/eclipse/eclipse.exe
-	 * argument 1: The .ico file to write to the given executable e.g. c:/myApp.ico
-	 *
-	 * Note 1. Write access to the executable program is required. As a result, that
-	 * program must not be currently running or edited elsewhere.
-	 * 
-     * Note 2. The Eclipse 3.4 launcher requires an .ico file with the following 7 images (in any order).
-     * 1. 48x48, 32 bit (RGB / Alpha Channel)
-     * 2. 32x32, 32 bit (RGB / Alpha Channel)
-     * 3. 16x16, 32 bit (RGB / Alpha Channel)
-     * 4. 48x48, 8 bit (256 colors)
-     * 5. 32x32, 8 bit (256 colors)
-     * 6. 24x24, 8 bit (256 colors)
-     * 7. 16x16, 8 bit (256 colors)	 
-     * A user icon matching exactly the width/height/depth of an executable icon will be written
-	 * to the executable and will replace that executable icon. If an executable icon
-	 * does not match a user icon, it is silently left as is.
-	 * 
-	 * Note 3. This function modifies the content of the executable program and may cause
-	 * its corruption.
-	 */
-	public static void main(String[] args) throws Exception {
-		if (args.length < 2) {
-			System.err.println("Usage: IconExe <windows executable> <ico file>"); //$NON-NLS-1$
-			return;
-		}
-		ImageLoader loader = new ImageLoader();
-
-		List images = new ArrayList();
-		for (int i = 1; i < args.length; i++) {
-			try {
-				//An ICO should contain 7 images, a BMP will contain 1
-				ImageData[] current = loader.load(args[i]);
-				for (int j = 0; j < current.length; j++) {
-					images.add(current[j]);
-				}
-			} catch (RuntimeException e) {
-				//ignore so that we process the other images
-			}
-		}
-		ImageData[] data = new ImageData[images.size()];
-		data = (ImageData[]) images.toArray(data);
-		
-		int nMissing = unloadIcons(args[0], data);
-		if (nMissing != 0)
-			System.err.println("Error - " + nMissing + " icon(s) not replaced in " + args[0] + " using " + args[1]); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	}
-	
-	/* Implementation */
-
-	/** 
-	 * Retrieve the Desktop icons provided in the Windows executable program.
-	 * These icons are typically shown in various places of the Windows desktop.
-	 * 
-     * Note. The Eclipse 3.4 launcher returns the following 7 images (in any order).
-     * 1. 48x48, 32 bit (RGB / Alpha Channel)
-     * 2. 32x32, 32 bit (RGB / Alpha Channel)
-     * 3. 16x16, 32 bit (RGB / Alpha Channel)
-     * 4. 48x48, 8 bit (256 colors)
-     * 5. 32x32, 8 bit (256 colors)
-     * 6. 24x24, 8 bit (256 colors)
-     * 7. 16x16, 8 bit (256 colors)
-	 * 
-	 * @param program the Windows executable e.g c:/eclipse/eclipse.exe
-	 */	
-	static ImageData[] loadIcons(String program) throws FileNotFoundException, IOException {
-		RandomAccessFile raf = new RandomAccessFile(program, "r"); //$NON-NLS-1$
-		IconExe iconExe = new IconExe();
-		IconResInfo[] iconInfo = iconExe.getIcons(raf);
-		ImageData[] data = new ImageData[iconInfo.length];
-		for (int i = 0; i < data.length; i++) data[i] = iconInfo[i].data;
-		raf.close();
-		return data;
-	}
-	
-	/** 
-	 * Replace the Desktop icons provided in the Windows executable program
-	 * with icons provided by the user.
-	 * 
-	 * Note 1. Write access to the executable program is required. As a result, that
-	 * program must not be currently running or edited elsewhere.
-	 * 
-	 * Note 2. Use loadIcons to determine which set of icons (width, height, depth)
-	 * is required to replace the icons in the executable program. A user icon
-	 * matching exactly the width/height/depth of an executable icon will be written
-	 * to the executable and will replace that executable icon. If an executable icon
-	 * does not match a user icon, it is left as is. Verify the return value matches
-	 * the number of icons to write. Finally, use loadIcons after this operation
-	 * to verify the icons have changed as expected.
-	 * 
-	 * Note 3. The Eclipse 3.4 launcher requires the following 7 images (in any order).
-	 * 1. 48x48, 32 bit (RGB / Alpha Channel)
-	 * 2. 32x32, 32 bit (RGB / Alpha Channel)
-	 * 3. 16x16, 32 bit (RGB / Alpha Channel)
-     * 4. 48x48, 8 bit (256 colors)
-	 * 5. 32x32, 8 bit (256 colors)
-     * 6. 24x24, 8 bit (256 colors)
-     * 7. 16x16, 8 bit (256 colors)
-	 * 
-	 * Note 4. This function modifies the content of the executable program and may cause
-	 * its corruption. 
-	 * 
-	 * @param program the Windows executable e.g c:/eclipse/eclipse.exe
-	 * @param icons to write to the given executable
-	 * @return the number of icons from the original program that were not successfully replaced (0 if success)
-	 */	
-	static int unloadIcons(String program, ImageData[] icons) throws FileNotFoundException, IOException {
-		RandomAccessFile raf = new RandomAccessFile(program, "rw"); //$NON-NLS-1$
-		IconExe iconExe = new IconExe();
-		IconResInfo[] iconInfo = iconExe.getIcons(raf);
-		// Display an error if  no icons found in target executable.
-		if (iconInfo.length == 0) {
-		    System.err.println("Warning - no icons detected in \"" + program + "\"."); //$NON-NLS-1$ //$NON-NLS-2$
-		    raf.close();
-		    return 0;
-		}
-		int cnt = 0;
-		for (int i = 0; i < iconInfo.length; i++) {
-			for (int j = 0; j < icons.length; j++) {
-				if (icons[j] == null)
-					continue;
-				if (iconInfo[i].data.width == icons[j].width && iconInfo[i].data.height == icons[j].height && iconInfo[i].data.depth == icons[j].depth) {
-					raf.seek(iconInfo[i].offset);
-					unloadIcon(raf, icons[j]);
-					cnt++;
-					break;
-				}
-			}
-		}
-		raf.close();
-		return iconInfo.length - cnt;
-	}
-	
-	public static final String VERSION = "20050124"; //$NON-NLS-1$
-	
-	static final boolean DEBUG = false;
-	public static class IconResInfo {
-		ImageData data;
-		int offset;
-		int size;
-	}
-	
-	IconResInfo[] iconInfo = null;
-	int iconCnt;
-	
-	IconResInfo[] getIcons(RandomAccessFile raf) throws IOException {
-		iconInfo = new IconResInfo[4];
-		iconCnt = 0;
-		IMAGE_DOS_HEADER imageDosHeader = new IMAGE_DOS_HEADER();
-		read(raf, imageDosHeader);
-		if (imageDosHeader.e_magic != IMAGE_DOS_SIGNATURE) return new IconResInfo[0];
-		int imageNtHeadersOffset = imageDosHeader.e_lfanew;
-		raf.seek(imageNtHeadersOffset);
-		IMAGE_NT_HEADERS imageNtHeaders = new IMAGE_NT_HEADERS();
-		read(raf, imageNtHeaders);
-		if (imageNtHeaders.Signature != IMAGE_NT_SIGNATURE) return new IconResInfo[0];
-		// DumpResources
-		int resourcesRVA = imageNtHeaders.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress;
-		if (resourcesRVA == 0) return new IconResInfo[0];
-		if (DEBUG) System.out.println("* Resources (RVA= "+resourcesRVA+")"); //$NON-NLS-1$ //$NON-NLS-2$
-		IMAGE_SECTION_HEADER imageSectionHeader = new IMAGE_SECTION_HEADER();
-		int firstSectionOffset = imageNtHeadersOffset + IMAGE_NT_HEADERS.FIELD_OFFSET_OptionalHeader + imageNtHeaders.FileHeader.SizeOfOptionalHeader;
-		raf.seek(firstSectionOffset);
-		boolean found = false;
-		for (int i = 0; i < imageNtHeaders.FileHeader.NumberOfSections; i++) {
-			read(raf, imageSectionHeader);
-			if (resourcesRVA >= imageSectionHeader.VirtualAddress && resourcesRVA < imageSectionHeader.VirtualAddress + imageSectionHeader.Misc_VirtualSize) {
-				// could check the imageSectionHeader name is .rsrc
-				found = true;
-				break;
-			}
-		}
-		if (!found) return new IconResInfo[0];
-		int delta = imageSectionHeader.VirtualAddress - imageSectionHeader.PointerToRawData;
-		int imageResourceDirectoryOffset = resourcesRVA - delta;
-		dumpResourceDirectory(raf, imageResourceDirectoryOffset, imageResourceDirectoryOffset, delta, 0, 0, false);
-		if (iconCnt < iconInfo.length) {
-			IconResInfo[] newArray = new IconResInfo[iconCnt];
-			System.arraycopy(iconInfo, 0, newArray, 0, iconCnt);
-			iconInfo = newArray;
-		}
-		return iconInfo;
-	}
-
-void dumpResourceDirectory(RandomAccessFile raf, int imageResourceDirectoryOffset, int resourceBase, int delta, int type, int level, boolean rt_icon_root) throws IOException {
-	if (DEBUG) System.out.println("** LEVEL "+level); //$NON-NLS-1$
-
-	IMAGE_RESOURCE_DIRECTORY imageResourceDirectory = new IMAGE_RESOURCE_DIRECTORY();
-	raf.seek(imageResourceDirectoryOffset);
-	read(raf, imageResourceDirectory);
-
-	if (DEBUG) {
-		String sType = ""+type; //$NON-NLS-1$
-		// level 1 resources are resource types
-		if (level == 1) {
-			System.out.println("___________________________"); //$NON-NLS-1$
-			if (type == RT_ICON) sType = "RT_ICON"; //$NON-NLS-1$
-			if (type == RT_GROUP_ICON) sType = "RT_GROUP_ICON"; //$NON-NLS-1$
-		}
-		System.out.println("Resource Directory ["+sType+"]"+" (Named "+imageResourceDirectory.NumberOfNamedEntries+", ID "+imageResourceDirectory.NumberOfIdEntries+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-	}
-
-	IMAGE_RESOURCE_DIRECTORY_ENTRY[] imageResourceDirectoryEntries = new IMAGE_RESOURCE_DIRECTORY_ENTRY[imageResourceDirectory.NumberOfIdEntries];
-	for (int i = 0; i < imageResourceDirectoryEntries.length; i++) {
-		imageResourceDirectoryEntries[i] = new IMAGE_RESOURCE_DIRECTORY_ENTRY();
-		read(raf, imageResourceDirectoryEntries[i]);
-	}
-	for (int i = 0; i < imageResourceDirectoryEntries.length; i++) {
-		if (imageResourceDirectoryEntries[i].DataIsDirectory) {
-			dumpResourceDirectory(raf, imageResourceDirectoryEntries[i].OffsetToDirectory + resourceBase, resourceBase, delta, imageResourceDirectoryEntries[i].Id, level + 1, rt_icon_root ? true : type == RT_ICON);
-		} else {
-			// Resource found
-			/// pResDirEntry->Name
-			IMAGE_RESOURCE_DIRECTORY_ENTRY irde = imageResourceDirectoryEntries[i];
-			IMAGE_RESOURCE_DATA_ENTRY data = new IMAGE_RESOURCE_DATA_ENTRY();
-			raf.seek(imageResourceDirectoryEntries[i].OffsetToData + resourceBase);
-			read(raf, data);
-			if (DEBUG) System.out.println("Resource Id "+irde.Id+" Data Offset RVA "+data.OffsetToData+", Size "+data.Size); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			if (rt_icon_root) {
-				if (DEBUG) System.out.println("iconcnt "+iconCnt+" |"+iconInfo.length); //$NON-NLS-1$ //$NON-NLS-2$
-				iconInfo[iconCnt] = new IconResInfo();
-				iconInfo[iconCnt].data = parseIcon(raf, data.OffsetToData - delta, data.Size);
-				iconInfo[iconCnt].offset = data.OffsetToData - delta;
-				iconInfo[iconCnt].size = data.Size;	
-				iconCnt++;
-				if (iconCnt == iconInfo.length) {
-					IconResInfo[] newArray = new IconResInfo[iconInfo.length + 4];
-					System.arraycopy(iconInfo, 0, newArray, 0, iconInfo.length);
-					iconInfo = newArray;
-				}
-			}
-		}
- 	}
-}
-
-static ImageData parseIcon(RandomAccessFile raf, int offset, int size) throws IOException {
-	raf.seek(offset);
-	BITMAPINFO bitmapInfo = new BITMAPINFO();
-	read(raf, bitmapInfo);
-	bitmapInfo.bmiHeader.biHeight /= 2;
-	int width = bitmapInfo.bmiHeader.biWidth;
-	int height = bitmapInfo.bmiHeader.biHeight;
-	int depth = bitmapInfo.bmiHeader.biBitCount;
-
-	PaletteData palette = loadPalette(bitmapInfo.bmiHeader, raf);
-	byte[] shapeData = loadData(bitmapInfo.bmiHeader, raf);
-	bitmapInfo.bmiHeader.biBitCount = 1;
-	byte[] maskData = loadData(bitmapInfo.bmiHeader, raf);
-	maskData = convertPad(maskData, width, height, 1, 4, 2);
-	bitInvertData(maskData, 0, maskData.length);
-	return ImageData.internal_new(
-		width,
-		height,
-		depth,
-		palette,
-		4,
-		shapeData,
-		2,
-		maskData,
-		null,
-		-1,
-		-1,
-		SWT.IMAGE_ICO,
-		0,
-		0,
-		0,
-		0);
-}
-
-static byte[] bitInvertData(byte[] data, int startIndex, int endIndex) {
-	// Destructively bit invert data in the given byte array.
-	for (int i = startIndex; i < endIndex; i++) {
-		data[i] = (byte)(255 - data[i - startIndex]);
-	}
-	return data;
-}
-
-static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
-	if (pad == newPad) return data;
-	int stride = (width * depth + 7) / 8;
-	int bpl = (stride + (pad - 1)) / pad * pad;
-	int newBpl = (stride + (newPad - 1)) / newPad * newPad;
-	byte[] newData = new byte[height * newBpl];
-	int srcIndex = 0, destIndex = 0;
-	for (int y = 0; y < height; y++) {
-		System.arraycopy(data, srcIndex, newData, destIndex, newBpl);
-		srcIndex += bpl;
-		destIndex += newBpl;
-	}
-	return newData;
-}
-static PaletteData loadPalette(BITMAPINFOHEADER bih, RandomAccessFile raf) throws IOException {
-	int depth = bih.biBitCount;
-	if (depth <= 8) {
-		int numColors = bih.biClrUsed;
-		if (numColors == 0) {
-			numColors = 1 << depth;
-		} else {
-			if (numColors > 256)
-				numColors = 256;
-		}
-		byte[] buf = new byte[numColors * 4];
-		raf.read(buf);
-		return paletteFromBytes(buf, numColors);
-	}
-	if (depth == 16) return new PaletteData(0x7C00, 0x3E0, 0x1F);
-	if (depth == 24) return new PaletteData(0xFF, 0xFF00, 0xFF0000);
-	return new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
-}
-static PaletteData paletteFromBytes(byte[] bytes, int numColors) {
-	int bytesOffset = 0;
-	RGB[] colors = new RGB[numColors];
-	for (int i = 0; i < numColors; i++) {
-		colors[i] = new RGB(bytes[bytesOffset + 2] & 0xFF,
-			bytes[bytesOffset + 1] & 0xFF,
-			bytes[bytesOffset] & 0xFF);
-		bytesOffset += 4;
-	}
-	return new PaletteData(colors);
-}
-static byte[] loadData(BITMAPINFOHEADER bih, RandomAccessFile raf) throws IOException {
-	int stride = (bih.biWidth * bih.biBitCount + 7) / 8;
-	stride = (stride + 3) / 4 * 4; // Round up to 4 byte multiple
-	byte[] data = loadData(bih, raf, stride);
-	flipScanLines(data, stride, bih.biHeight);
-	return data;
-}
-static void flipScanLines(byte[] data, int stride, int height) {
-	int i1 = 0;
-	int i2 = (height - 1) * stride;
-	for (int i = 0; i < height / 2; i++) {
-		for (int index = 0; index < stride; index++) {
-			byte b = data[index + i1];
-			data[index + i1] = data[index + i2];
-			data[index + i2] = b;
-		}
-		i1 += stride;
-		i2 -= stride;
-	}
-}
-static byte[] loadData(BITMAPINFOHEADER bih, RandomAccessFile raf, int stride) throws IOException {
-	int dataSize = bih.biHeight * stride;
-	byte[] data = new byte[dataSize];
-	int cmp = bih.biCompression;
-	if (cmp == 0) { // BMP_NO_COMPRESSION
-		raf.read(data);
-	} else {
-		if (DEBUG) System.out.println("ICO cannot be compressed?"); //$NON-NLS-1$
-	}
-	return data;
-}
-
-static void unloadIcon(RandomAccessFile raf, ImageData icon) throws IOException {
-	int sizeImage = (((icon.width * icon.depth + 31) / 32 * 4) +
-		((icon.width + 31) / 32 * 4)) * icon.height;
-	write4(raf, BMPHeaderFixedSize);
-	write4(raf, icon.width);
-	write4(raf, icon.height * 2);
-	writeU2(raf, 1);
-	writeU2(raf, icon.depth);
-	write4(raf, 0);
-	write4(raf, sizeImage);
-	write4(raf, 0);
-	write4(raf, 0);
-	write4(raf, icon.palette.colors != null ? icon.palette.colors.length : 0);
-	write4(raf, 0);
-	
-	byte[] rgbs = paletteToBytes(icon.palette);
-	raf.write(rgbs);
-	unloadShapeData(raf, icon);
-	unloadMaskData(raf, icon);
-}
-static byte[] paletteToBytes(PaletteData pal) {
-	int n = pal.colors == null ? 0 : (pal.colors.length < 256 ? pal.colors.length : 256);
-	byte[] bytes = new byte[n * 4];
-	int offset = 0;
-	for (int i = 0; i < n; i++) {
-		RGB col = pal.colors[i];
-		bytes[offset] = (byte)col.blue;
-		bytes[offset + 1] = (byte)col.green;
-		bytes[offset + 2] = (byte)col.red;
-		offset += 4;
-	}
-	return bytes;
-}
-static void unloadMaskData(RandomAccessFile raf, ImageData icon) {
-	ImageData mask = icon.getTransparencyMask();
-	int bpl = (icon.width + 7) / 8;
-	int pad = mask.scanlinePad;
-	int srcBpl = (bpl + pad - 1) / pad * pad;
-	int destBpl = (bpl + 3) / 4 * 4;
-	byte[] buf = new byte[destBpl];
-	int offset = (icon.height - 1) * srcBpl;
-	byte[] data = mask.data;
-	try {
-		for (int i = 0; i < icon.height; i++) {
-			System.arraycopy(data, offset, buf, 0, bpl);
-			bitInvertData(buf, 0, bpl);
-			raf.write(buf, 0, destBpl);
-			offset -= srcBpl;
-		}
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-}
-static void unloadShapeData(RandomAccessFile raf, ImageData icon) {
-	int bpl = (icon.width * icon.depth + 7) / 8;
-	int pad = icon.scanlinePad;
-	int srcBpl = (bpl + pad - 1) / pad * pad;
-	int destBpl = (bpl + 3) / 4 * 4;
-	byte[] buf = new byte[destBpl];
-	int offset = (icon.height - 1) * srcBpl;
-	byte[] data = icon.data;
-	try {
-		for (int i = 0; i < icon.height; i++) {
-			System.arraycopy(data, offset, buf, 0, bpl);
-			raf.write(buf, 0, destBpl);
-			offset -= srcBpl;
-		}
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-}
-static boolean readIconGroup(RandomAccessFile raf, int offset, int size) throws IOException {
-	raf.seek(offset);
-	NEWHEADER newHeader = new NEWHEADER();
-	read(raf, newHeader);
-	if (newHeader.ResType != RES_ICON) return false;
-	RESDIR[] resDir = new RESDIR[newHeader.ResCount];
-	for (int i = 0; i < newHeader.ResCount; i++) {
-		resDir[i] = new RESDIR();
-		read(raf, resDir[i]);
-	}
-	return true;
-}
-
-static void copyFile(String src, String dst) throws FileNotFoundException, IOException {
-	File srcFile = new File(src);
-	File dstFile = new File(dst);
-	InputStream in = new BufferedInputStream(new FileInputStream(srcFile));
-	OutputStream out = new BufferedOutputStream(new FileOutputStream(dstFile));
-	int c;
-	while ((c = in.read()) != -1) out.write(c); 
-	in.close();
-	out.close();
-}
-
-/* IO utilities to parse Windows executable */
-static final int IMAGE_DOS_SIGNATURE = 0x5a4d;
-static final int IMAGE_NT_SIGNATURE = 0x00004550;
-static final int IMAGE_DIRECTORY_ENTRY_RESOURCE = 2;
-static final int RES_ICON = 1;
-static final int RT_ICON = 3;
-static final int RT_GROUP_ICON = 14;
-static final int BMPHeaderFixedSize = 40;
-static final int IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b;
-static final int IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b;
-	
-public static class IMAGE_DOS_HEADER {
-	int e_magic; // WORD
-	int e_cblp; // WORD
-	int e_cp; // WORD
-	int e_crlc; // WORD
-	int e_cparhdr; // WORD
-	int e_minalloc; // WORD
-	int e_maxalloc; // WORD
-	int e_ss; // WORD
-	int e_sp; // WORD
-	int e_csum; // WORD
-	int e_ip; // WORD
-	int e_cs; // WORD
-	int e_lfarlc; // WORD
-	int e_ovno; // WORD
-	int[] e_res = new int[4]; // WORD[4]
-	int e_oemid; // WORD
-	int e_oeminfo; // WORD
-	int[] e_res2 = new int[10]; // WORD[10]
-	int e_lfanew; // LONG
-}
-
-public static class IMAGE_FILE_HEADER {
-	int Machine; // WORD
-	int NumberOfSections; // WORD
-	int TimeDateStamp; // DWORD
-	int PointerToSymbolTable; // DWORD
-	int NumberOfSymbols; // DWORD
-	int SizeOfOptionalHeader; // WORD
-	int Characteristics; // WORD
-}
-
-public static class IMAGE_DATA_DIRECTORY {
-	int VirtualAddress; // DWORD
-	int Size; // DWORD
-}
-
-public static class IMAGE_OPTIONAL_HEADER {
-    // Allocate enough storage for the 64 bit version of the header.
-    int Magic; // WORD
-    int MajorLinkerVersion; // BYTE
-    int MinorLinkerVersion; // BYTE
-    int SizeOfCode; // DWORD
-    int SizeOfInitializedData; // DWORD
-    int SizeOfUninitializedData; // DWORD
-    int AddressOfEntryPoint; // DWORD
-    int BaseOfCode; // DWORD
-    int BaseOfData; // DWORD
-    long ImageBase; // ULONGLONG
-    int SectionAlignment; // DWORD
-    int FileAlignment; // DWORD
-    int MajorOperatingSystemVersion; // WORD
-    int MinorOperatingSystemVersion; // WORD
-    int MajorImageVersion; // WORD
-    int MinorImageVersion; // WORD
-    int MajorSubsystemVersion; // WORD
-    int MinorSubsystemVersion; // WORD
-    int Win32VersionValue; // DWORD
-    int SizeOfImage; // DWORD
-    int SizeOfHeaders; // DWORD
-    int CheckSum; // DWORD
-    int Subsystem; // WORD
-    int DllCharacteristics; // WORD
-    long SizeOfStackReserve; // ULONGLONG
-    long SizeOfStackCommit; // ULONGLONG
-    long SizeOfHeapReserve; // ULONGLONG
-    long SizeOfHeapCommit; // ULONGLONG
-    int LoaderFlags; // DWORD
-    int NumberOfRvaAndSizes; // DWORD
-    IMAGE_DATA_DIRECTORY[] DataDirectory = new IMAGE_DATA_DIRECTORY[16];
-}
-
-public static class IMAGE_NT_HEADERS {
-	int Signature; // DWORD
-	IMAGE_FILE_HEADER FileHeader = new IMAGE_FILE_HEADER();
-	IMAGE_OPTIONAL_HEADER OptionalHeader = new IMAGE_OPTIONAL_HEADER();
-	final static int FIELD_OFFSET_OptionalHeader = 24;  
-}
-	
-public static class IMAGE_SECTION_HEADER {
-	int[] Name = new int[8]; // BYTE[8]
-	int Misc_VirtualSize; // DWORD (union Misc { DWORD PhysicalAddress; DWORD VirtualSize }
-	int VirtualAddress; // DWORD
-	int SizeOfRawData; // DWORD
-	int PointerToRawData; // DWORD
-	int PointerToRelocations; // DWORD
-	int PointerToLinenumbers; // DWORD
-	int NumberOfRelocations; // WORD
-	int NumberOfLinenumbers; // WORD
-	int Characteristics; // DWORD
-}
-
-public static class IMAGE_RESOURCE_DIRECTORY {
-	int Characteristics; // DWORD
-	int TimeDateStamp; // DWORD
-	int MajorVersion; // WORD
-	int MinorVersion; // WORD
-	int NumberOfNamedEntries; // WORD - used
-	int NumberOfIdEntries; // WORD - used
-	final static int SIZEOF = 16;
-}
-
-public static class IMAGE_RESOURCE_DIRECTORY_ENTRY {
-	// union
-	int NameOffset; // DWORD 31 bits
-	boolean NameIsString; // DWORD 1 bit
-	int Name; // DWORD
-	int Id; // WORD
-	// union
-	int OffsetToData; // DWORD
-	int OffsetToDirectory; // DWORD 31 bits
-	boolean DataIsDirectory; // DWORD 1 bit
-}
-
-public static class IMAGE_RESOURCE_DATA_ENTRY {
-	int OffsetToData; // DWORD
-	int Size; // DWORD
-	int CodePage; // DWORD
-	int Reserved; // DWORD
-}
-
-public static class NEWHEADER {
-	int Reserved; // WORD
-	int ResType; // WORD
-	int ResCount; // WORD
-}
-
-public static class ICONRESDIR {
-	int Width; // BYTE
-	int Height; // BYTE
-	int ColorCount; // BYTE
-	int reserved; // BYTE
-}
-
-public static class CURSORDIR {
-	int Width; // WORD
-	int Height; // WORD
-}
-
-public static class RESDIR {
-	// union
-	ICONRESDIR Icon = new ICONRESDIR();
-	CURSORDIR Cursor = new CURSORDIR();
-	int Planes; // WORD
-	int BitCount; // WORD
-	int BytesInRes; // DWORD
-	int IconCursorId; // WORD
-}
-
-public static class BITMAPINFOHEADER {
-	int biSize; // DWORD
-	int biWidth; // LONG
-	int biHeight; // LONG
-	int biPlanes; // WORD
-	int biBitCount; // WORD
-	int biCompression; // DWORD
-	int biSizeImage; // DWORD
-	int biXPelsPerMeter; // LONG
-	int biYPelsPerMeter; // LONG
-	int biClrUsed; // DWORD
-	int biClrImportant; // DWORD
-}
-
-static class RGBQUAD {
-	int rgBlue; // BYTE
-	int rgbGreen; // BYTE
-	int rgbRed; // BYTE
-	int rgbReserved; // BYTE
-}
-static class BITMAPINFO {
-	BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();
-	RGBQUAD[] bmiColors = null;
-}
-static void read(RandomAccessFile raf, BITMAPINFOHEADER bih) throws IOException {
-	bih.biSize = read4(raf);
-	bih.biWidth = read4(raf);
-	bih.biHeight = read4(raf);
-	bih.biPlanes = readU2(raf);
-	bih.biBitCount = readU2(raf);
-	bih.biCompression = read4(raf);
-	bih.biSizeImage = read4(raf);
-	bih.biXPelsPerMeter = read4(raf);
-	bih.biYPelsPerMeter = read4(raf);
-	bih.biClrUsed = read4(raf);
-	bih.biClrImportant = read4(raf);
-}
-static void read(RandomAccessFile raf, BITMAPINFO bi) throws IOException {
-	read(raf, bi.bmiHeader);
-}
-/* Little Endian helpers */
-static int readU2(RandomAccessFile raf) throws IOException {
-	int b0 = raf.readByte() & 0xFF;
-	int b1 = raf.readByte() & 0xFF;
-	return (b1 << 8 | b0);
-}
-static int read4(RandomAccessFile raf) throws IOException {
-	int b0 = raf.readByte() & 0xFF;
-	int b1 = raf.readByte() & 0xFF;
-	int b2 = raf.readByte() & 0xFF;
-	int b3 = raf.readByte() & 0xFF;
-	return b3 << 24 | b2 << 16 | b1 << 8 | b0;
-}
-static long read8(RandomAccessFile raf) throws IOException {
-    int b0 = raf.readByte() & 0xFF;
-    int b1 = raf.readByte() & 0xFF;
-    int b2 = raf.readByte() & 0xFF;
-    int b3 = raf.readByte() & 0xFF;
-    int b4 = raf.readByte() & 0xFF;
-    int b5 = raf.readByte() & 0xFF;
-    int b6 = raf.readByte() & 0xFF;
-    int b7 = raf.readByte() & 0xFF;
-    return b7 << 56 | b6 << 48 | b5 << 40 | b4 << 32 | b3 << 24 | b2 << 16 | b1 << 8 | b0;
-}
-static void write4(RandomAccessFile raf, int value) throws IOException {
-	raf.write(value & 0xFF);
-	raf.write((value >> 8) & 0xFF);
-	raf.write((value >> 16) & 0xFF);
-	raf.write((value >> 24) & 0xFF);
-}
-static void writeU2(RandomAccessFile raf, int value) throws IOException {
-	raf.write(value & 0xFF);
-	raf.write((value >> 8) & 0xFF);
-}
-static void read(RandomAccessFile raf, IMAGE_DOS_HEADER idh) throws IOException {
-	idh.e_magic = readU2(raf);
-	idh.e_cblp = readU2(raf);
-	idh.e_cp = readU2(raf);
-	idh.e_crlc = readU2(raf);
-	idh.e_cparhdr = readU2(raf);
-	idh.e_minalloc = readU2(raf);
-	idh.e_maxalloc = readU2(raf);
-	idh.e_ss = readU2(raf);
-	idh.e_sp = readU2(raf);
-	idh.e_csum = readU2(raf);
-	idh.e_ip = readU2(raf);
-	idh.e_cs = readU2(raf);
-	idh.e_lfarlc = readU2(raf);
-	idh.e_ovno = readU2(raf);
-	for (int i = 0; i < idh.e_res.length; i++) idh.e_res[i] = readU2(raf);
-	idh.e_oemid = readU2(raf);
-	idh.e_oeminfo = readU2(raf);
-	for (int i = 0; i < idh.e_res2.length; i++) idh.e_res2[i] = readU2(raf);
-	idh.e_lfanew = read4(raf);
-}
-static void read(RandomAccessFile raf, IMAGE_FILE_HEADER ifh) throws IOException {
-	ifh.Machine = readU2(raf);
-	ifh.NumberOfSections = readU2(raf);
-	ifh.TimeDateStamp = read4(raf);
-	ifh.PointerToSymbolTable = read4(raf);
-	ifh.NumberOfSymbols = read4(raf);
-	ifh.SizeOfOptionalHeader = readU2(raf);
-	ifh.Characteristics  = readU2(raf);
-}
-static void read(RandomAccessFile raf, IMAGE_DATA_DIRECTORY idd) throws IOException {
-	idd.VirtualAddress = read4(raf);
-	idd.Size = read4(raf);
-}
-static void read(RandomAccessFile raf, IMAGE_OPTIONAL_HEADER ioh) throws IOException {
-	ioh.Magic = readU2(raf);
-	
-	// Assume file is 32bit executable unless x64 magic is present
-	boolean is32 = !(ioh.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC);
-	
-	ioh.MajorLinkerVersion = raf.read();
-	ioh.MinorLinkerVersion = raf.read();
-	ioh.SizeOfCode = read4(raf);
-	ioh.SizeOfInitializedData = read4(raf);
-	ioh.SizeOfUninitializedData = read4(raf);
-	ioh.AddressOfEntryPoint = read4(raf);
-	ioh.BaseOfCode = read4(raf);
-	
-	if (is32)
-	{
-	    ioh.BaseOfData = read4(raf);
-	    ioh.ImageBase = read4(raf);
-	}
-	else
-	{
-	    // BaseOfData deleted in the 64 bit version PE32+
-	    ioh.ImageBase = read8(raf);
-	}
-	
-	ioh.SectionAlignment = read4(raf);
-	ioh.FileAlignment = read4(raf);
-	ioh.MajorOperatingSystemVersion = readU2(raf);
-	ioh.MinorOperatingSystemVersion = readU2(raf);
-	ioh.MajorImageVersion = readU2(raf);
-	ioh.MinorImageVersion = readU2(raf);
-	ioh.MajorSubsystemVersion = readU2(raf);
-	ioh.MinorSubsystemVersion = readU2(raf);
-	ioh.Win32VersionValue = read4(raf);
-	ioh.SizeOfImage = read4(raf);
-	ioh.SizeOfHeaders = read4(raf);
-	ioh.CheckSum = read4(raf);
-	ioh.Subsystem = readU2(raf);
-	ioh.DllCharacteristics = readU2(raf);
-	
-	if (is32)
-	{
-    	ioh.SizeOfStackReserve = read4(raf);
-    	ioh.SizeOfStackCommit = read4(raf);
-    	ioh.SizeOfHeapReserve = read4(raf);
-    	ioh.SizeOfHeapCommit = read4(raf);
-	}
-	else 
-	{
-        ioh.SizeOfStackReserve = read8(raf);
-        ioh.SizeOfStackCommit = read8(raf);
-        ioh.SizeOfHeapReserve = read8(raf);
-        ioh.SizeOfHeapCommit = read8(raf);	    
-	}
-
-	ioh.LoaderFlags = read4(raf);
-	ioh.NumberOfRvaAndSizes = read4(raf);
-	for (int i = 0 ; i < ioh.DataDirectory.length; i++) {
-		ioh.DataDirectory[i] = new IMAGE_DATA_DIRECTORY();
-		read(raf, ioh.DataDirectory[i]);
-	}
-}
-static void read(RandomAccessFile raf, IMAGE_NT_HEADERS inh) throws IOException {
-	inh.Signature = read4(raf);
-	read(raf, inh.FileHeader);
-	read(raf, inh.OptionalHeader);
-}
-static void read(RandomAccessFile raf, IMAGE_SECTION_HEADER ish) throws IOException {
-	for (int i = 0 ; i < ish.Name.length; i++) ish.Name[i] = raf.read();
-	ish.Misc_VirtualSize = read4(raf);
-	ish.VirtualAddress = read4(raf);
-	ish.SizeOfRawData = read4(raf);
-	ish.PointerToRawData = read4(raf);
-	ish.PointerToRelocations = read4(raf);
-	ish.PointerToLinenumbers = read4(raf);
-	ish.NumberOfRelocations = readU2(raf);
-	ish.NumberOfLinenumbers = readU2(raf);
-	ish.Characteristics = read4(raf);
-}
-static void read(RandomAccessFile raf, IMAGE_RESOURCE_DIRECTORY ird) throws IOException {
-	ird.Characteristics = read4(raf);
-	ird.TimeDateStamp = read4(raf);
-	ird.MajorVersion = readU2(raf);
-	ird.MinorVersion = readU2(raf);
-	ird.NumberOfNamedEntries = readU2(raf);
-	ird.NumberOfIdEntries = readU2(raf);
-}
-static void read(RandomAccessFile raf, IMAGE_RESOURCE_DIRECTORY_ENTRY irde) throws IOException {
-	irde.Name = read4(raf);
-	irde.OffsetToData = read4(raf);
-	// construct other union members
-	irde.NameOffset = irde.Name & ~ (1 << 31);
-	irde.NameIsString = (irde.Name & (1 << 31)) != 0;
-	irde.Id = irde.Name & 0xFFFF;
-	irde.OffsetToDirectory = irde.OffsetToData & ~ (1 << 31);
-	irde.DataIsDirectory = (irde.OffsetToData & (1 << 31)) != 0;
-}
-static void read(RandomAccessFile raf, IMAGE_RESOURCE_DATA_ENTRY irde) throws IOException {
-	irde.OffsetToData = read4(raf);
-	irde.Size = read4(raf);
-	irde.CodePage = read4(raf);
-	irde.Reserved = read4(raf);
-}
-static void read(RandomAccessFile raf, NEWHEADER nh) throws IOException {
-	nh.Reserved = readU2(raf);
-	nh.ResType = readU2(raf);
-	nh.ResCount = readU2(raf);
-}
-static void read(RandomAccessFile raf, ICONRESDIR i) throws IOException {
-	i.Width = raf.read();
-	i.Height = raf.read();
-	i.ColorCount = raf.read();
-	i.reserved = raf.read();
-}
-static void read(RandomAccessFile raf, CURSORDIR c) throws IOException {
-	c.Width = readU2(raf);
-	c.Height = readU2(raf);
-}
-static void read(RandomAccessFile raf, RESDIR rs) throws IOException {
-	long start = raf.getFilePointer();
-	read(raf, rs.Icon);
-	raf.seek(start);
-	read(raf, rs.Cursor);
-	rs.Planes = readU2(raf);
-	rs.BitCount = readU2(raf);
-	rs.BytesInRes = read4(raf);
-	rs.IconCursorId = readU2(raf);
-}
-
-/* ImageData and Image Decoder inlining to avoid dependency on SWT 
- * The following section can be entirely removed if SWT can be used.
- */
-
-static class RGB {
-	
-	/**
-	 * the red component of the RGB
-	 */
-	public int red;
-	
-	/**
-	 * the green component of the RGB
-	 */
-	public int green;
-	
-	/**
-	 * the blue component of the RGB
-	 */
-	public int blue;
-	
-	static final long serialVersionUID = 3258415023461249074L;
-	
-/**
- * Constructs an instance of this class with the given
- * red, green and blue values.
- *
- * @param red the red component of the new instance
- * @param green the green component of the new instance
- * @param blue the blue component of the new instance
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue argument is not between 0 and 255</li>
- * </ul>
- */
-public RGB(int red, int green, int blue) {
-	if ((red > 255) || (red < 0) ||
-		(green > 255) || (green < 0) ||
-		(blue > 255) || (blue < 0))
-			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	this.red = red;
-	this.green = green;
-	this.blue = blue;
-}
-
-/**
- * Compares the argument to the receiver, and returns true
- * if they represent the <em>same</em> object using a class
- * specific comparison.
- *
- * @param object the object to compare with this object
- * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
- *
- * @see #hashCode()
- */
-public boolean equals (Object object) {
-	if (object == this) return true;
-	if (!(object instanceof RGB)) return false;
-	RGB rgb = (RGB)object;
-	return (rgb.red == this.red) && (rgb.green == this.green) && (rgb.blue == this.blue);
-}
-
-/**
- * Returns an integer hash code for the receiver. Any two 
- * objects which return <code>true</code> when passed to 
- * <code>equals</code> must return the same value for this
- * method.
- *
- * @return the receiver's hash
- *
- * @see #equals(Object)
- */
-public int hashCode () {
-	return (blue << 16) | (green << 8) | red;
-}
-
-/**
- * Returns a string containing a concise, human-readable
- * description of the receiver.
- *
- * @return a string representation of the <code>RGB</code>
- */
-public String toString () {
-	return "RGB {" + red + ", " + green + ", " + blue + "}"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
-
-//$NON-NLS-4$
-}
-
-}
-static class PaletteData {
-	
-	/**
-	 * true if the receiver is a direct palette, 
-	 * and false otherwise
-	 */
-	public boolean isDirect;
-	
-	/**
-	 * the RGB values for an indexed palette, where the
-	 * indices of the array correspond to pixel values
-	 */
-	public RGB[] colors;
-	
-	/**
-	 * the red mask for a direct palette
-	 */
-	public int redMask;
-	
-	/**
-	 * the green mask for a direct palette
-	 */
-	public int greenMask;
-	
-	/**
-	 * the blue mask for a direct palette
-	 */
-	public int blueMask;
-	
-	/**
-	 * the red shift for a direct palette
-	 */
-	public int redShift;
-	
-	/**
-	 * the green shift for a direct palette
-	 */
-	public int greenShift;
-	
-	/**
-	 * the blue shift for a direct palette
-	 */
-	public int blueShift;
-
-/**
- * Constructs a new indexed palette given an array of RGB values.
- *
- * @param colors the array of <code>RGB</code>s for the palette
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
- * </ul>
- */
-public PaletteData(RGB[] colors) {
-	if (colors == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	this.colors = colors;
-	this.isDirect = false;
-}
-
-/**
- * Constructs a new direct palette given the red, green and blue masks.
- *
- * @param redMask the red mask
- * @param greenMask the green mask
- * @param blueMask the blue mask
- */
-public PaletteData(int redMask, int greenMask, int blueMask) {
-	this.redMask = redMask;
-	this.greenMask = greenMask;
-	this.blueMask = blueMask;
-	this.isDirect = true;
-	this.redShift = shiftForMask(redMask);
-	this.greenShift = shiftForMask(greenMask);
-	this.blueShift = shiftForMask(blueMask);
-}
-
-/**
- * Returns the pixel value corresponding to the given <code>RBG</code>.
- *
- * @param rgb the RGB to get the pixel value for
- * @return the pixel value for the given RGB
- * 
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
- *    <li>ERROR_INVALID_ARGUMENT - if the RGB is not found in the palette</li>
- * </ul>
- */
-public int getPixel(RGB rgb) {
-	if (rgb == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	if (isDirect) {
-		int pixel = 0;
-		pixel |= (redShift < 0 ? rgb.red << -redShift : rgb.red >>> redShift) & redMask;
-		pixel |= (greenShift < 0 ? rgb.green << -greenShift : rgb.green >>> greenShift) & greenMask;
-		pixel |= (blueShift < 0 ? rgb.blue << -blueShift : rgb.blue >>> blueShift) & blueMask;
-		return pixel;
-	} 
-
-	for (int i = 0; i < colors.length; i++) {
-		if (colors[i].equals(rgb)) return i;
-	}
-	/* The RGB did not exist in the palette */
-	SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	return 0;
-}
-
-/**
- * Returns an <code>RGB</code> corresponding to the given pixel value.
- *
- * @param pixel the pixel to get the RGB value for
- * @return the RGB value for the given pixel
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
- *    <li>ERROR_INVALID_ARGUMENT - if the pixel does not exist in the palette</li>
- * </ul>
- */
-public RGB getRGB(int pixel) {
-	if (isDirect) {
-		int r = pixel & redMask;
-		r = (redShift < 0) ? r >>> -redShift : r << redShift;
-		int g = pixel & greenMask;
-		g = (greenShift < 0) ? g >>> -greenShift : g << greenShift;
-		int b = pixel & blueMask;
-		b = (blueShift < 0) ? b >>> -blueShift : b << blueShift;
-		return new RGB(r, g, b);
-	}
-	if (pixel < 0 || pixel >= colors.length) {
-		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	}
-	return colors[pixel];
-}
-
-/**
- * Returns all the RGB values in the receiver if it is an
- * indexed palette, or null if it is a direct palette.
- *
- * @return the <code>RGB</code>s for the receiver or null
- */
-public RGB[] getRGBs() {
-	return colors;
-}
-
-/**
- * Computes the shift value for a given mask.
- *
- * @param mask the mask to compute the shift for
- * @return the shift amount
- *
- * @see IconExe.PaletteData
- */
-int shiftForMask(int mask) {
-	for (int i = 31; i >= 0; i--) { 
-		if (((mask >> i) & 0x1) != 0) return 7 - i;
-	}
-	return 32;
-}
-
-}
-static class ImageLoader {
-	
-	/**
-	 * the array of ImageData objects in this ImageLoader.
-	 * This array is read in when the load method is called,
-	 * and it is written out when the save method is called
-	 */
-	public ImageData[] data;
-	
-	/**
-	 * the width of the logical screen on which the images
-	 * reside, in pixels (this corresponds to the GIF89a
-	 * Logical Screen Width value)
-	 */
-	public int logicalScreenWidth;
-
-	/**
-	 * the height of the logical screen on which the images
-	 * reside, in pixels (this corresponds to the GIF89a
-	 * Logical Screen Height value)
-	 */
-	public int logicalScreenHeight;
-
-	/**
-	 * the background pixel for the logical screen (this 
-	 * corresponds to the GIF89a Background Color Index value).
-	 * The default is -1 which means 'unspecified background'
-	 * 
-	 */
-	public int backgroundPixel;
-
-	/**
-	 * the number of times to repeat the display of a sequence
-	 * of animated images (this corresponds to the commonly-used
-	 * GIF application extension for "NETSCAPE 2.0 01")
-	 */
-	public int repeatCount;
-		
-	/*
-	 * the set of ImageLoader event listeners, created on demand
-	 */
-	Vector imageLoaderListeners;
-
-/**
- * Construct a new empty ImageLoader.
- */
-public ImageLoader() {
-	reset();
-}
-
-/**
- * Resets the fields of the ImageLoader, except for the
- * <code>imageLoaderListeners</code> field.
- */
-void reset() {
-	data = null;
-	logicalScreenWidth = 0;
-	logicalScreenHeight = 0;
-	backgroundPixel = -1;
-	repeatCount = 1;
-}
-
-/**
- * Loads an array of <code>ImageData</code> objects from the
- * specified input stream. Throws an error if either an error
- * occurs while loading the images, or if the images are not
- * of a supported type. Returns the loaded image data array.
- *
- * @param stream the input stream to load the images from
- * @return an array of <code>ImageData</code> objects loaded from the specified input stream
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the stream is null</li>
- * </ul>
- * @exception RuntimeException <ul>
- *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
- *    <li>ERROR_IO - if an input/output error occurs while reading data</li>
- *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
- * </ul>
- */
-public ImageData[] load(InputStream stream) {
-	if (stream == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	reset();
-	data = FileFormat.load(stream, this);
-	return data;
-}
-
-/**
- * Loads an array of <code>ImageData</code> objects from the
- * file with the specified name. Throws an error if either
- * an error occurs while loading the images, or if the images are
- * not of a supported type. Returns the loaded image data array.
- *
- * @param filename the name of the file to load the images from
- * @return an array of <code>ImageData</code> objects loaded from the specified file
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
- * </ul>
- * @exception RuntimeException <ul>
- *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
- *    <li>ERROR_IO - if an IO error occurs while reading data</li>
- *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
- * </ul>
- */
-public ImageData[] load(String filename) {
-	if (filename == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	InputStream stream = null;
-	try {
-		stream = new BufferedInputStream(new FileInputStream(filename));
-		return load(stream);
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	} finally {
-		try {
-			if (stream != null) stream.close();
-		} catch (IOException e) {
-			// Ignore error
-		}
-	}
-	return null;
-}
-}
-static class ImageData {
-	
-	/**
-	 * The width of the image, in pixels.
-	 */
-	public int width;
-
-	/**
-	 * The height of the image, in pixels.
-	 */
-	public int height;
-
-	/**
-	 * The color depth of the image, in bits per pixel.
-	 * <p>
-	 * Note that a depth of 8 or less does not necessarily
-	 * mean that the image is palette indexed, or
-	 * conversely that a depth greater than 8 means that
-	 * the image is direct color.  Check the associated
-	 * PaletteData's isDirect field for such determinations.
-	 */
-	public int depth;
-
-	/**
-	 * The scanline padding.
-	 * <p>
-	 * If one scanline of the image is not a multiple of
-	 * this number, it will be padded with zeros until it is.
-	 * </p>
-	 */
-	public int scanlinePad;
-
-	/**
-	 * The number of bytes per scanline.
-	 * <p>
-	 * This is a multiple of the scanline padding.
-	 * </p>
-	 */
-	public int bytesPerLine;
-
-	/**
-	 * The pixel data of the image.
-	 * <p>
-	 * Note that for 16 bit depth images the pixel data is stored
-	 * in least significant byte order; however, for 24bit and
-	 * 32bit depth images the pixel data is stored in most
-	 * significant byte order.
-	 * </p>
-	 */
-	public byte[] data;
-
-	/**
-	 * The color table for the image.
-	 */
-	public PaletteData palette;
-
-	/**
-	 * The transparent pixel.
-	 * <p>
-	 * Pixels with this value are transparent.
-	 * </p><p>
-	 * The default is -1 which means 'no transparent pixel'.
-	 * </p>
-	 */
-	public int transparentPixel;
-
-	/**
-	 * An icon-specific field containing the data from the icon mask.
-	 * <p>
-	 * This is a 1 bit bitmap stored with the most significant
-	 * bit first.  The number of bytes per scanline is
-	 * '((width + 7) / 8 + (maskPad - 1)) / maskPad * maskPad'.
-	 * </p><p>
-	 * The default is null which means 'no transparency mask'.
-	 * </p>
-	 */
-	public byte[] maskData;
-
-	/**
-	 * An icon-specific field containing the scanline pad of the mask.
-	 * <p>
-	 * If one scanline of the transparency mask is not a
-	 * multiple of this number, it will be padded with zeros until
-	 * it is.
-	 * </p>
-	 */
-	public int maskPad;
-	
-	/**
-	 * The alpha data of the image.
-	 * <p>
-	 * Every pixel can have an <em>alpha blending</em> value that
-	 * varies from 0, meaning fully transparent, to 255 meaning
-	 * fully opaque.  The number of bytes per scanline is
-	 * 'width'.
-	 * </p>
-	 */
-	public byte[] alphaData;
-	
-	/**
-	 * The global alpha value to be used for every pixel.
-	 * <p>
-	 * If this value is set, the <code>alphaData</code> field
-	 * is ignored and when the image is rendered each pixel
-	 * will be blended with the background an amount
-	 * proportional to this value.
-	 * </p><p>
-	 * The default is -1 which means 'no global alpha value'
-	 * </p>
-	 */
-	public int alpha;
-
-	/**
-	 * The type of file from which the image was read.
-	 * 
-	 * It is expressed as one of the following values:
-	 * <dl>
-	 * <dt><code>IMAGE_BMP</code></dt>
-	 * <dd>Windows BMP file format, no compression</dd>
-	 * <dt><code>IMAGE_BMP_RLE</code></dt>
-	 * <dd>Windows BMP file format, RLE compression if appropriate</dd>
-	 * <dt><code>IMAGE_GIF</code></dt>
-	 * <dd>GIF file format</dd>
-	 * <dt><code>IMAGE_ICO</code></dt>
-	 * <dd>Windows ICO file format</dd>
-	 * <dt><code>IMAGE_JPEG</code></dt>
-	 * <dd>JPEG file format</dd>
-	 * <dt><code>IMAGE_PNG</code></dt>
-	 * <dd>PNG file format</dd>
-	 * </dl>
-	 */
-	public int type;
-
-	/**
-	 * The x coordinate of the top left corner of the image
-	 * within the logical screen (this field corresponds to
-	 * the GIF89a Image Left Position value).
-	 */
-	public int x;
-
-	/**
-	 * The y coordinate of the top left corner of the image
-	 * within the logical screen (this field corresponds to
-	 * the GIF89a Image Top Position value).
-	 */
-	public int y;
-
-	/**
-	 * A description of how to dispose of the current image
-	 * before displaying the next.
-	 * 
-	 * It is expressed as one of the following values:
-	 * <dl>
-	 * <dt><code>DM_UNSPECIFIED</code></dt>
-	 * <dd>disposal method not specified</dd>
-	 * <dt><code>DM_FILL_NONE</code></dt>
-	 * <dd>do nothing - leave the image in place</dd>
-	 * <dt><code>DM_FILL_BACKGROUND</code></dt>
-	 * <dd>fill with the background color</dd>
-	 * <dt><code>DM_FILL_PREVIOUS</code></dt>
-	 * <dd>restore the previous picture</dd>
-	 * </dl>
-	 * (this field corresponds to the GIF89a Disposal Method value)
-	 */
-	public int disposalMethod;
-
-	/**
-	 * The time to delay before displaying the next image
-	 * in an animation (this field corresponds to the GIF89a
-	 * Delay Time value).
-	 */
-	public int delayTime;
-
-	/**
-	 * Arbitrary channel width data to 8-bit conversion table.
-	 */
-	static final byte[][] ANY_TO_EIGHT = new byte[9][];
-	static {
-		for (int b = 0; b < 9; ++b) {
-			byte[] data = ANY_TO_EIGHT[b] = new byte[1 << b];
-			if (b == 0) continue;
-			int inc = 0;
-			for (int bit = 0x10000; (bit >>= b) != 0;) inc |= bit;
-			for (int v = 0, p = 0; v < 0x10000; v+= inc) data[p++] = (byte)(v >> 8);
-		}
-	}
-	static final byte[] ONE_TO_ONE_MAPPING = ANY_TO_EIGHT[8];
-
-	/**
-	 * Scaled 8x8 Bayer dither matrix.
-	 */
-	static final int[][] DITHER_MATRIX = {
-		{ 0xfc0000, 0x7c0000, 0xdc0000, 0x5c0000, 0xf40000, 0x740000, 0xd40000, 0x540000 },
-		{ 0x3c0000, 0xbc0000, 0x1c0000, 0x9c0000, 0x340000, 0xb40000, 0x140000, 0x940000 },
-		{ 0xcc0000, 0x4c0000, 0xec0000, 0x6c0000, 0xc40000, 0x440000, 0xe40000, 0x640000 },
-		{ 0x0c0000, 0x8c0000, 0x2c0000, 0xac0000, 0x040000, 0x840000, 0x240000, 0xa40000 },
-		{ 0xf00000, 0x700000, 0xd00000, 0x500000, 0xf80000, 0x780000, 0xd80000, 0x580000 },
-		{ 0x300000, 0xb00000, 0x100000, 0x900000, 0x380000, 0xb80000, 0x180000, 0x980000 },
-		{ 0xc00000, 0x400000, 0xe00000, 0x600000, 0xc80000, 0x480000, 0xe80000, 0x680000 },
-		{ 0x000000, 0x800000, 0x200000, 0xa00000, 0x080000, 0x880000, 0x280000, 0xa80000 }
-	};
-
-/**
- * Constructs a new, empty ImageData with the given width, height,
- * depth and palette. The data will be initialized to an (all zero)
- * array of the appropriate size.
- *
- * @param width the width of the image
- * @param height the height of the image
- * @param depth the depth of the image
- * @param palette the palette of the image (must not be null)
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_INVALID_ARGUMENT - if the width or height is negative, or if the depth is not
- *        	one of 1, 2, 4, 8, 16, 24 or 32</li>
- *    <li>ERROR_NULL_ARGUMENT - if the palette is null</li>
- * </ul>
- */
-public ImageData(int width, int height, int depth, PaletteData palette) {
-	this(width, height, depth, palette,
-		4, null, 0, null,
-		null, -1, -1, SWT.IMAGE_UNDEFINED,
-		0, 0, 0, 0);
-}
-
-/**
- * Constructs a new, empty ImageData with the given width, height,
- * depth, palette, scanlinePad and data.
- *
- * @param width the width of the image
- * @param height the height of the image
- * @param depth the depth of the image
- * @param palette the palette of the image
- * @param scanlinePad the padding of each line, in bytes
- * @param data the data of the image
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_INVALID_ARGUMENT - if the width or height is negative, or if the depth is not
- *        	one of 1, 2, 4, 8, 16, 24 or 32</li>
- *    <li>ERROR_NULL_ARGUMENT - if the palette or data is null</li>
- *    <li>ERROR_CANNOT_BE_ZERO - if the scanlinePad is zero</li>
- * </ul>
- */
-public ImageData(int width, int height, int depth, PaletteData palette, int scanlinePad, byte[] data) {
-	this(width, height, depth, palette,
-		scanlinePad, checkData(data), 0, null,
-		null, -1, -1, SWT.IMAGE_UNDEFINED,
-		0, 0, 0, 0);
-}
-
-/**
- * Constructs an <code>ImageData</code> loaded from a file with the
- * specified name. Throws an error if an error occurs loading the
- * image, or if the image has an unsupported type.
- * <p>
- * This constructor is provided for convenience when loading a single
- * image only. If the file contains multiple images, only the first
- * one will be loaded. To load multiple images, use 
- * <code>ImageLoader.load()</code>.
- * </p>
- *
- * @param filename the name of the file to load the image from (must not be null)
- *
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
- * </ul>
- * @exception RuntimeException <ul>
- *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data</li>
- *    <li>ERROR_IO if an IO error occurs while reading data</li>
- *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
- * </ul>
- */
-public ImageData(String filename) {
-	ImageData[] data = new ImageLoader().load(filename);
-	if (data.length < 1) SWT.error(SWT.ERROR_INVALID_IMAGE);
-	ImageData i = data[0];
-	setAllFields(
-		i.width,
-		i.height,
-		i.depth,
-		i.scanlinePad,
-		i.bytesPerLine,
-		i.data,
-		i.palette,
-		i.transparentPixel,
-		i.maskData,
-		i.maskPad,
-		i.alphaData,
-		i.alpha,
-		i.type,
-		i.x,
-		i.y,
-		i.disposalMethod,
-		i.delayTime);
-}
-
-/**
- * Prevents uninitialized instances from being created outside the package.
- */
-ImageData() {
-	//empty constructor
-}
-
-/**
- * Constructs an image data by giving values for all non-computable fields.
- * <p>
- * This method is for internal use, and is not described further.
- * </p>
- */
-ImageData(
-	int width, int height, int depth, PaletteData palette,
-	int scanlinePad, byte[] data, int maskPad, byte[] maskData,
-	byte[] alphaData, int alpha, int transparentPixel, int type,
-	int x, int y, int disposalMethod, int delayTime)
-{
-
-	if (palette == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	if (!(depth == 1 || depth == 2 || depth == 4 || depth == 8
-		|| depth == 16 || depth == 24 || depth == 32)) {
-		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	}
-	if (width <= 0 || height <= 0) {
-		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	}
-	if (scanlinePad == 0) SWT.error (SWT.ERROR_CANNOT_BE_ZERO);
-
-	int bytesPerLine = (((width * depth + 7) / 8) + (scanlinePad - 1))
-		/ scanlinePad * scanlinePad;
-	setAllFields(
-		width,
-		height,
-		depth,
-		scanlinePad,
-		bytesPerLine,
-		data != null ? data : new byte[bytesPerLine * height],
-		palette,
-		transparentPixel,
-		maskData,
-		maskPad,
-		alphaData,
-		alpha,
-		type,
-		x,
-		y,
-		disposalMethod,
-		delayTime);
-}
-
-/**
- * Initializes all fields in the receiver. This method must be called
- * by all public constructors to ensure that all fields are initialized
- * for a new ImageData object. If a new field is added to the class,
- * then it must be added to this method.
- * <p>
- * This method is for internal use, and is not described further.
- * </p>
- */
-void setAllFields(int width, int height, int depth, int scanlinePad,
-	int bytesPerLine, byte[] data, PaletteData palette, int transparentPixel,
-	byte[] maskData, int maskPad, byte[] alphaData, int alpha,
-	int type, int x, int y, int disposalMethod, int delayTime) {
-
-	this.width = width;
-	this.height = height;
-	this.depth = depth;
-	this.scanlinePad = scanlinePad;
-	this.bytesPerLine = bytesPerLine;
-	this.data = data;
-	this.palette = palette;
-	this.transparentPixel = transparentPixel;
-	this.maskData = maskData;
-	this.maskPad = maskPad;
-	this.alphaData = alphaData;
-	this.alpha = alpha;
-	this.type = type;
-	this.x = x;
-	this.y = y;
-	this.disposalMethod = disposalMethod;
-	this.delayTime = delayTime;
-}
-
-/**	 
- * Invokes internal SWT functionality to create a new instance of
- * this class.
- * <p>
- * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
- * API for <code>ImageData</code>. It is marked public only so that it
- * can be shared within the packages provided by SWT. It is subject
- * to change without notice, and should never be called from
- * application code.
- * </p>
- * <p>
- * This method is for internal use, and is not described further.
- * </p>
- */
-public static ImageData internal_new(
-	int width, int height, int depth, PaletteData palette,
-	int scanlinePad, byte[] data, int maskPad, byte[] maskData,
-	byte[] alphaData, int alpha, int transparentPixel, int type,
-	int x, int y, int disposalMethod, int delayTime)
-{
-	return new ImageData(
-		width, height, depth, palette, scanlinePad, data, maskPad, maskData,
-		alphaData, alpha, transparentPixel, type, x, y, disposalMethod, delayTime);
-}
-
-ImageData colorMaskImage(int pixel) {
-	ImageData mask = new ImageData(width, height, 1, bwPalette(),
-		2, null, 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED,
-		0, 0, 0, 0);
-	int[] row = new int[width];
-	for (int y = 0; y < height; y++) {
-		getPixels(0, y, width, row, 0);
-		for (int i = 0; i < width; i++) {
-			if (pixel != -1 && row[i] == pixel) {
-				row[i] = 0;
-			} else {
-				row[i] = 1;
-			}
-		}
-		mask.setPixels(0, y, width, row, 0);
-	}
-	return mask;
-}
-
-static byte[] checkData(byte [] data) {
-	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	return data;
-}
-
-/**
- * Returns <code>getWidth</code> pixel values starting at offset
- * <code>x</code> in scanline <code>y</code> in the receiver's
- * data starting at <code>startIndex</code>.
- *
- * @param x the x position of the first pixel to get
- * @param y the y position of the first pixel to get
- * @param getWidth the width of the data to get
- * @param pixels the buffer in which to put the pixels
- * @param startIndex the offset into the byte array to begin storing pixels
- *
- * @exception IndexOutOfBoundsException if getWidth is too large
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
- *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
- *    <li>ERROR_INVALID_ARGUMENT - if getWidth is negative</li>
- * </ul>
- * @exception RuntimeException <ul>
- *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth is not one of 1, 2, 4 or 8
- *        (For higher depths, use the int[] version of this method.)</li>
- * </ul>
- */
-public void getPixels(int x, int y, int getWidth, byte[] pixels, int startIndex) {
-	if (pixels == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	if (getWidth < 0 || x >= width || y >= height || x < 0 || y < 0) SWT.error
-
-(SWT.ERROR_INVALID_ARGUMENT);
-	if (getWidth == 0) return;
-	int index;
-	int theByte;
-	int mask = 0;
-	int n = getWidth;
-	int i = startIndex;
-	int srcX = x, srcY = y;
-	if (depth == 1) {
-		index = (y * bytesPerLine) + (x >> 3);
-		theByte = data[index] & 0xFF;
-		while (n > 0) {
-			mask = 1 << (7 - (srcX & 0x7));
-			if ((theByte & mask) == 0) {
-				pixels[i] = 0;
-			} else {
-				pixels[i] = 1;
-			}
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				if (n > 0) theByte = data[index] & 0xFF;
-				srcX = 0;
-			} else {
-				if (mask == 1) {
-					index++;
-					if (n > 0) theByte = data[index] & 0xFF;
-				}
-			}
-		}
-		return;
-	}
-	if (depth == 2) {
-		index = (y * bytesPerLine) + (x >> 2);
-		theByte = data[index] & 0xFF;
-		int offset;
-		while (n > 0) {
-			offset = 3 - (srcX % 4);
-			mask = 3 << (offset * 2);
-			pixels[i] = (byte)((theByte & mask) >> (offset * 2));
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				if (n > 0) theByte = data[index] & 0xFF;
-				srcX = 0;
-			} else {
-				if (offset == 0) {
-					index++;
-					theByte = data[index] & 0xFF;
-				}
-			}
-		}
-		return;
-	}
-	if (depth == 4) {
-		index = (y * bytesPerLine) + (x >> 1);
-		if ((x & 0x1) == 1) {
-			theByte = data[index] & 0xFF;
-			pixels[i] = (byte)(theByte & 0x0F);
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index++;
-			}
-		}
-		while (n > 1) {
-			theByte = data[index] & 0xFF;
-			pixels[i] = (byte)(theByte >> 4);
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				pixels[i] = (byte)(theByte & 0x0F);
-				i++;
-				n--;
-				srcX++;
-				if (srcX >= width) {
-					srcY++;
-					index = srcY * bytesPerLine;
-					srcX = 0;
-				} else {
-					index++;
-				}
-			}
-		}
-		if (n > 0) {
-			theByte = data[index] & 0xFF;
-			pixels[i] = (byte)(theByte >> 4);
-		}
-		return;
-	}
-	if (depth == 8) {
-		index = (y * bytesPerLine) + x;
-		for (int j = 0; j < getWidth; j++) {
-			pixels[i] = data[index];
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index++;
-			}
-		}
-		return;
-	}
-	SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-}
-
-/**
- * Returns <code>getWidth</code> pixel values starting at offset
- * <code>x</code> in scanline <code>y</code> in the receiver's
- * data starting at <code>startIndex</code>.
- *
- * @param x the x position of the first pixel to get
- * @param y the y position of the first pixel to get
- * @param getWidth the width of the data to get
- * @param pixels the buffer in which to put the pixels
- * @param startIndex the offset into the buffer to begin storing pixels
- *
- * @exception IndexOutOfBoundsException if getWidth is too large
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
- *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
- *    <li>ERROR_INVALID_ARGUMENT - if getWidth is negative</li>
- * </ul>
- * @exception RuntimeException <ul>
- *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth is not one of 1, 2, 4, 8, 16, 24 or 32</li>
- * </ul>
- */
-public void getPixels(int x, int y, int getWidth, int[] pixels, int startIndex) {
-	if (pixels == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	if (getWidth < 0 || x >= width || y >= height || x < 0 || y < 0) SWT.error
-
-(SWT.ERROR_INVALID_ARGUMENT);
-	if (getWidth == 0) return;
-	int index;
-	int theByte;
-	int mask;
-	int n = getWidth;
-	int i = startIndex;
-	int srcX = x, srcY = y;
-	if (depth == 1) {
-		index = (y * bytesPerLine) + (x >> 3);
-		theByte = data[index] & 0xFF;
-		while (n > 0) {
-			mask = 1 << (7 - (srcX & 0x7));
-			if ((theByte & mask) == 0) {
-				pixels[i] = 0;
-			} else {
-				pixels[i] = 1;
-			}
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				if (n > 0) theByte = data[index] & 0xFF;
-				srcX = 0;
-			} else {
-				if (mask == 1) {
-					index++;
-					if (n > 0) theByte = data[index] & 0xFF;
-				}
-			}
-		}
-		return;
-	}		
-	if (depth == 2) {
-		index = (y * bytesPerLine) + (x >> 2);
-		theByte = data[index] & 0xFF;
-		int offset;
-		while (n > 0) {
-			offset = 3 - (srcX % 4);
-			mask = 3 << (offset * 2);
-			pixels[i] = (byte)((theByte & mask) >> (offset * 2));
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				if (n > 0) theByte = data[index] & 0xFF;
-				srcX = 0;
-			} else {
-				if (offset == 0) {
-					index++;
-					theByte = data[index] & 0xFF;
-				}
-			}
-		}
-		return;
-	}
-	if (depth == 4) {
-		index = (y * bytesPerLine) + (x >> 1);
-		if ((x & 0x1) == 1) {
-			theByte = data[index] & 0xFF;
-			pixels[i] = theByte & 0x0F;
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index++;
-			}
-		}
-		while (n > 1) {
-			theByte = data[index] & 0xFF;
-			pixels[i] = theByte >> 4;
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				pixels[i] = theByte & 0x0F;
-				i++;
-				n--;
-				srcX++;
-				if (srcX >= width) {
-					srcY++;
-					index = srcY * bytesPerLine;
-					srcX = 0;
-				} else {
-					index++;
-				}
-			}
-		}
-		if (n > 0) {
-			theByte = data[index] & 0xFF;
-			pixels[i] = theByte >> 4;
-		}
-		return;
-	}
-	if (depth == 8) {
-		index = (y * bytesPerLine) + x;
-		for (int j = 0; j < getWidth; j++) {
-			pixels[i] = data[index] & 0xFF;
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index++;
-			}
-		}
-		return;
-	}
-	if (depth == 16) {
-		index = (y * bytesPerLine) + (x * 2);
-		for (int j = 0; j < getWidth; j++) {
-			pixels[i] = ((data[index+1] & 0xFF) << 8) + (data[index] & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index += 2;
-			}
-		}
-		return;
-	}
-	if (depth == 24) {
-		index = (y * bytesPerLine) + (x * 3);
-		for (int j = 0; j < getWidth; j++) {
-			pixels[i] = ((data[index] & 0xFF) << 16) | ((data[index+1] & 0xFF) << 8)
-				| (data[index+2] & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index += 3;
-			}
-		}
-		return;
-	}
-	if (depth == 32) {
-		index = (y * bytesPerLine) + (x * 4);
-		i = startIndex;
-		for (int j = 0; j < getWidth; j++) {
-			pixels[i] = ((data[index] & 0xFF) << 24) | ((data[index+1] & 0xFF) << 16)
-				| ((data[index+2] & 0xFF) << 8) | (data[index+3] & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index += 4;
-			}
-		}
-		return;
-	}
-	SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-}
-
-/**
- * Returns an array of <code>RGB</code>s which comprise the
- * indexed color table of the receiver, or null if the receiver
- * has a direct color model.
- *
- * @return the RGB values for the image or null if direct color
- *
- * @see IconExe.PaletteData#getRGBs()
- */
-public RGB[] getRGBs() {
-	return palette.getRGBs();
-}
-
-/**
- * Returns an <code>ImageData</code> which specifies the
- * transparency mask information for the receiver, or null if the
- * receiver has no transparency and is not an icon.
- *
- * @return the transparency mask or null if none exists
- */
-public ImageData getTransparencyMask() {
-	if (getTransparencyType() == SWT.TRANSPARENCY_MASK) {
-		return new ImageData(width, height, 1, bwPalette(), maskPad, maskData);
-	}
-	return colorMaskImage(transparentPixel);
-}
-
-/**
- * Returns the image transparency type.
- *
- * @return the receiver's transparency type
- */
-public int getTransparencyType() {
-	if (maskData != null) return SWT.TRANSPARENCY_MASK;
-	if (transparentPixel != -1) return SWT.TRANSPARENCY_PIXEL;
-	if (alphaData != null) return SWT.TRANSPARENCY_ALPHA;
-	return SWT.TRANSPARENCY_NONE;
-}
-
-/**
- * Returns the byte order of the receiver.
- * 
- * @return MSB_FIRST or LSB_FIRST
- */
-int getByteOrder() {
-	return depth != 16 ? MSB_FIRST : LSB_FIRST;
-}
-
-/**
- * Sets the pixel values starting at offset <code>x</code> in
- * scanline <code>y</code> in the receiver's data to the
- * values from the array <code>pixels</code> starting at
- * <code>startIndex</code>.
- *
- * @param x the x position of the pixel to set
- * @param y the y position of the pixel to set
- * @param putWidth the width of the pixels to set
- * @param pixels the pixels to set
- * @param startIndex the index at which to begin setting
- *
- * @exception IndexOutOfBoundsException if putWidth is too large
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
- *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
- *    <li>ERROR_INVALID_ARGUMENT - if putWidth is negative</li>
- * </ul>
- * @exception RuntimeException <ul>
- *    <li>ERROR_UNSUPPORTED_DEPTH if the depth is not one of 1, 2, 4, 8
- *        (For higher depths, use the int[] version of this method.)</li>
- * </ul>
- */
-public void setPixels(int x, int y, int putWidth, byte[] pixels, int startIndex) {
-	if (pixels == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	if (putWidth < 0 || x >= width || y >= height || x < 0 || y < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	if (putWidth == 0) return;
-	int index;
-	int theByte;
-	int mask;
-	int n = putWidth;
-	int i = startIndex;
-	int srcX = x, srcY = y;
-	if (depth == 1) {
-		index = (y * bytesPerLine) + (x >> 3);
-		while (n > 0) {
-			mask = 1 << (7 - (srcX & 0x7));
-			if ((pixels[i] & 0x1) == 1) {
-				data[index] = (byte)((data[index] & 0xFF) | mask);
-			} else {
-				data[index] = (byte)((data[index] & 0xFF) & (mask ^ -1));
-			}
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				if (mask == 1) {
-					index++;
-				}
-			}
-		}
-		return;
-	}
-	if (depth == 2) {
-		byte [] masks = { (byte)0xFC, (byte)0xF3, (byte)0xCF, (byte)0x3F };
-		index = (y * bytesPerLine) + (x >> 2);
-		int offset = 3 - (x % 4);
-		while (n > 0) {
-			theByte = pixels[i] & 0x3;
-			data[index] = (byte)((data[index] & masks[offset]) | (theByte << (offset * 2)));
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				offset = 0;
-				srcX = 0;
-			} else {
-				if (offset == 0) {
-					index++;
-					offset = 3;
-				} else {
-					offset--;
-				}
-			}
-		}
-		return;
-	}
-	if (depth == 4) {
-		index = (y * bytesPerLine) + (x >> 1);
-		boolean high = (x & 0x1) == 0;
-		while (n > 0) {
-			theByte = pixels[i] & 0x0F;
-			if (high) {
-				data[index] = (byte)((data[index] & 0x0F) | (theByte << 4));
-			} else {
-				data[index] = (byte)((data[index] & 0xF0) | theByte);
-			}
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				high = true;
-				srcX = 0;
-			} else {
-				if (!high) index++;
-				high = !high;
-			}
-		}
-		return;
-	}
-	if (depth == 8) {
-		index = (y * bytesPerLine) + x;
-		for (int j = 0; j < putWidth; j++) {
-			data[index] = (byte)(pixels[i] & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index++;
-			}
-		}
-		return;
-	}
-	SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-}
-
-/**
- * Sets the pixel values starting at offset <code>x</code> in
- * scanline <code>y</code> in the receiver's data to the
- * values from the array <code>pixels</code> starting at
- * <code>startIndex</code>.
- *
- * @param x the x position of the pixel to set
- * @param y the y position of the pixel to set
- * @param putWidth the width of the pixels to set
- * @param pixels the pixels to set
- * @param startIndex the index at which to begin setting
- *
- * @exception IndexOutOfBoundsException if putWidth is too large
- * @exception IllegalArgumentException <ul>
- *    <li>ERROR_NULL_ARGUMENT - if pixels is null</li>
- *    <li>ERROR_INVALID_ARGUMENT - if x or y is out of bounds</li>
- *    <li>ERROR_INVALID_ARGUMENT - if putWidth is negative</li>
- * </ul>
- * @exception RuntimeException <ul>
- *    <li>ERROR_UNSUPPORTED_DEPTH if the depth is not one of 1, 2, 4, 8, 16, 24 or 32</li>
- * </ul>
- */
-public void setPixels(int x, int y, int putWidth, int[] pixels, int startIndex) {
-	if (pixels == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	if (putWidth < 0 || x >= width || y >= height || x < 0 || y < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	if (putWidth == 0) return;
-	int index;
-	int theByte;
-	int mask;
-	int n = putWidth;
-	int i = startIndex;
-	int pixel;
-	int srcX = x, srcY = y;
-	if (depth == 1) {
-		index = (y * bytesPerLine) + (x >> 3);
-		while (n > 0) {
-			mask = 1 << (7 - (srcX & 0x7));
-			if ((pixels[i] & 0x1) == 1) {
-				data[index] = (byte)((data[index] & 0xFF) | mask);
-			} else {
-				data[index] = (byte)((data[index] & 0xFF) & (mask ^ -1));
-			}
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				if (mask == 1) {
-					index++;
-				}
-			}
-		}
-		return;
-	}
-	if (depth == 2) {
-		byte [] masks = { (byte)0xFC, (byte)0xF3, (byte)0xCF, (byte)0x3F };
-		index = (y * bytesPerLine) + (x >> 2);
-		int offset = 3 - (x % 4);
-		while (n > 0) {
-			theByte = pixels[i] & 0x3;
-			data[index] = (byte)((data[index] & masks[offset]) | (theByte << (offset * 2)));
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				offset = 3;
-				srcX = 0;
-			} else {
-				if (offset == 0) {
-					index++;
-					offset = 3;
-				} else {
-					offset--;
-				}
-			}
-		}
-		return;
-	}
-	if (depth == 4) {
-		index = (y * bytesPerLine) + (x >> 1);
-		boolean high = (x & 0x1) == 0;
-		while (n > 0) {
-			theByte = pixels[i] & 0x0F;
-			if (high) {
-				data[index] = (byte)((data[index] & 0x0F) | (theByte << 4));
-			} else {
-				data[index] = (byte)((data[index] & 0xF0) | theByte);
-			}
-			i++;
-			n--;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				high = true;
-				srcX = 0;
-			} else {
-				if (!high) index++;
-				high = !high;
-			}
-		}
-		return;
-	}
-	if (depth == 8) {
-		index = (y * bytesPerLine) + x;
-		for (int j = 0; j < putWidth; j++) {
-			data[index] = (byte)(pixels[i] & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index++;
-			}
-		}
-		return;
-
-	}
-	if (depth == 16) {
-		index = (y * bytesPerLine) + (x * 2);
-		for (int j = 0; j < putWidth; j++) {
-			pixel = pixels[i];
-			data[index] = (byte)(pixel & 0xFF);
-			data[index + 1] = (byte)((pixel >> 8) & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index += 2;
-			}
-		}
-		return;
-	}
-	if (depth == 24) {
-		index = (y * bytesPerLine) + (x * 3);
-		for (int j = 0; j < putWidth; j++) {
-			pixel = pixels[i];
-			data[index] = (byte)((pixel >> 16) & 0xFF);
-			data[index + 1] = (byte)((pixel >> 8) & 0xFF);
-			data[index + 2] = (byte)(pixel & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index += 3;
-			}
-		}
-		return;
-	}
-	if (depth == 32) {
-		index = (y * bytesPerLine) + (x * 4);
-		for (int j = 0; j < putWidth; j++) {
-			pixel = pixels[i];
-			data[index] = (byte)((pixel >> 24) & 0xFF);
-			data[index + 1] = (byte)((pixel >> 16) & 0xFF);
-			data[index + 2] = (byte)((pixel >> 8) & 0xFF);
-			data[index + 3] = (byte)(pixel & 0xFF);
-			i++;
-			srcX++;
-			if (srcX >= width) {
-				srcY++;
-				index = srcY * bytesPerLine;
-				srcX = 0;
-			} else {
-				index += 4;
-			}
-		}
-		return;
-	}
-	SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-}
-
-/**
- * Returns a palette with 2 colors: black & white.
- */
-static PaletteData bwPalette() {
-	return new PaletteData(new RGB[] {new RGB(0, 0, 0), new RGB(255, 255, 255)});
-}
-
-/**
- * Gets the offset of the most significant bit for
- * the given mask.
- */
-static int getMSBOffset(int mask) {
-	for (int i = 31; i >= 0; i--) {
-		if (((mask >> i) & 0x1) != 0) return i + 1;
-	}
-	return 0;
-}
-
-/**
- * Finds the closest match.
- */
-static int closestMatch(int depth, byte red, byte green, byte blue, int redMask, int greenMask, int blueMask, byte[] reds, byte[] greens, byte[] blues) {
-	if (depth > 8) {
-		int rshift = 32 - getMSBOffset(redMask);
-		int gshift = 32 - getMSBOffset(greenMask);
-		int bshift = 32 - getMSBOffset(blueMask);
-		return (((red << 24) >>> rshift) & redMask) |
-			(((green << 24) >>> gshift) & greenMask) |
-			(((blue << 24) >>> bshift) & blueMask);
-	}
-	int r, g, b;
-	int minDistance = 0x7fffffff;
-	int nearestPixel = 0;
-	int n = reds.length;
-	for (int j = 0; j < n; j++) {
-		r = (reds[j] & 0xFF) - (red & 0xFF);
-		g = (greens[j] & 0xFF) - (green & 0xFF);
-		b = (blues[j] & 0xFF) - (blue & 0xFF);
-		int distance = r*r + g*g + b*b;
-		if (distance < minDistance) {
-			nearestPixel = j;
-			if (distance == 0) break;
-			minDistance = distance;
-		}
-	}
-	return nearestPixel;
-}
-
-static final ImageData convertMask(ImageData mask) {
-	if (mask.depth == 1) return mask;
-	PaletteData palette = new PaletteData(new RGB[] {new RGB(0, 0, 0), new RGB(255,255,255)});
-	ImageData newMask = new ImageData(mask.width, mask.height, 1, palette);
-	/* Find index of black in mask palette */
-	int blackIndex = 0;
-	RGB[] rgbs = mask.getRGBs();
-	if (rgbs != null) {
-		while (blackIndex < rgbs.length) {
-			if (rgbs[blackIndex].equals(palette.colors[0])) break;
-			blackIndex++;
-		}
-	}
-	int[] pixels = new int[mask.width];
-	for (int y = 0; y < mask.height; y++) {
-		mask.getPixels(0, y, mask.width, pixels, 0);
-		for (int i = 0; i < pixels.length; i++) {
-			if (pixels[i] == blackIndex) {
-				pixels[i] = 0;
-			} else {
-				pixels[i] = 1;
-			}
-		}
-		newMask.setPixels(0, y, mask.width, pixels, 0);
-	}
-	return newMask;
-}
-
-static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
-	if (pad == newPad) return data;
-	int stride = (width * depth + 7) / 8;
-	int bpl = (stride + (pad - 1)) / pad * pad;	
-	int newBpl = (stride + (newPad - 1)) / newPad * newPad;
-	byte[] newData = new byte[height * newBpl];
-	int srcIndex = 0, destIndex = 0;
-	for (int y = 0; y < height; y++) {
-		System.arraycopy(data, srcIndex, newData, destIndex, stride);
-		srcIndex += bpl;
-		destIndex += newBpl;
-	}
-	return newData;
-}
-
-/**
- * Blit operation bits to be OR'ed together to specify the desired operation.
- */
-static final int
-	BLIT_SRC = 1,     // copy source directly, else applies logic operations
-	BLIT_ALPHA = 2,   // enable alpha blending
-	BLIT_DITHER = 4;  // enable dithering in low color modes
-
-/**
- * Alpha mode, values 0 - 255 specify global alpha level
- */
-static final int
-	ALPHA_OPAQUE = 255,           // Fully opaque (ignores any alpha data)
-	ALPHA_TRANSPARENT = 0,        // Fully transparent (ignores any alpha data)
-	ALPHA_CHANNEL_SEPARATE = -1,  // Use alpha channel from separate alphaData
-	ALPHA_CHANNEL_SOURCE = -2,    // Use alpha channel embedded in sourceData
-	ALPHA_MASK_UNPACKED = -3,     // Use transparency mask formed by bytes in alphaData (non-zero is opaque)
-	ALPHA_MASK_PACKED = -4,       // Use transparency mask formed by packed bits in alphaData
-	ALPHA_MASK_INDEX = -5,        // Consider source palette indices transparent if in alphaData array
-	ALPHA_MASK_RGB = -6;          // Consider source RGBs transparent if in RGB888 format alphaData array
-
-/**
- * Byte and bit order constants.
- */
-static final int LSB_FIRST = 0;
-static final int MSB_FIRST = 1;
-
-/**
- * Data types (internal)
- */
-/*
-private static final int
-	// direct / true color formats with arbitrary masks & shifts
-	TYPE_GENERIC_8 = 0,
-	TYPE_GENERIC_16_MSB = 1,
-	TYPE_GENERIC_16_LSB = 2,
-	TYPE_GENERIC_24 = 3,
-	TYPE_GENERIC_32_MSB = 4,
-	TYPE_GENERIC_32_LSB = 5,
-	// palette indexed color formats
-	TYPE_INDEX_8 = 6,
-	TYPE_INDEX_4 = 7,
-	TYPE_INDEX_2 = 8,
-	TYPE_INDEX_1_MSB = 9,
-	TYPE_INDEX_1_LSB = 10;
-*/
-/**
- * Computes the required channel shift from a mask.
- */
-static int getChannelShift(int mask) {
-	if (mask == 0) return 0;
-	int i;
-	for (i = 0; ((mask & 1) == 0) && (i < 32); ++i) {
-		mask >>>= 1;
-	}
-	return i;
-}
-
-/**
- * Computes the required channel width (depth) from a mask.
- */
-static int getChannelWidth(int mask, int shift) {
-	if (mask == 0) return 0;
-	int i;
-	mask >>>= shift;
-	for (i = shift; ((mask & 1) != 0) && (i < 32); ++i) {
-		mask >>>= 1;
-	}
-	return i - shift;
-}
-
-/**
- * Extracts a field from packed RGB data given a mask for that field.
- */
-static byte getChannelField(int data, int mask) {
-	final int shift = getChannelShift(mask);
-	return ANY_TO_EIGHT[getChannelWidth(mask, shift)][(data & mask) >>> shift];
-}
-
-/* 
- * Fill in dithered gradated values for a color channel
- */
-static final void buildDitheredGradientChannel(int from, int to, int steps,
-	int bandWidth, int bandHeight, boolean vertical,
-	byte[] bitmapData, int dp, int bytesPerLine, int bits) {
-	final int mask = 0xff00 >>> bits;
-	int val = from << 16;
-	final int inc = ((to << 16) - val) / steps + 1;
-	if (vertical) {
-		for (int dy = 0; dy < bandHeight; ++dy, dp += bytesPerLine) {
-			for (int dx = 0, dptr = dp; dx < bandWidth; ++dx, dptr += 4) {
-				final int thresh = DITHER_MATRIX[dy & 7][dx] >>> bits;
-				int temp = val + thresh;
-				if (temp > 0xffffff) bitmapData[dptr] = -1;
-				else bitmapData[dptr] = (byte)((temp >>> 16) & mask);
-			}
-			val += inc;
-		}
-	} else {
-		for (int dx = 0; dx < bandWidth; ++dx, dp += 4) {
-			for (int dy = 0, dptr = dp; dy < bandHeight; ++dy, dptr += bytesPerLine) {
-				final int thresh = DITHER_MATRIX[dy][dx & 7] >>> bits;
-				int temp = val + thresh;
-				if (temp > 0xffffff) bitmapData[dptr] = -1;
-				else bitmapData[dptr] = (byte)((temp >>> 16) & mask);
-			}
-			val += inc;
-		}
-	}
-}
-}
-
-static class LEDataInputStream extends InputStream {
-	int position;
-	InputStream in;
-
-	/**
-	 * The byte array containing the bytes to read.
-	 */
-	protected byte[] buf;
-	
-	/**
-	 * The current position within the byte array <code>buf</code>. A value
-	 * equal to buf.length indicates no bytes available.  A value of
-	 * 0 indicates the buffer is full.
-	 */
-	protected int pos;
-	
-
-	public LEDataInputStream(InputStream input) {
-		this(input, 512);
-	}
-	
-	public LEDataInputStream(InputStream input, int bufferSize) {
-		this.in = input;
-		if (bufferSize > 0) {
-			buf = new byte[bufferSize];
-			pos = bufferSize;
-		} 
-		else throw new IllegalArgumentException();
-	}
-	
-	public void close() throws IOException {
-		buf = null;
-		if (in != null) {
-			in.close();
-			in = null;
-		}
-	}
-	
-	/**
-	 * Answer how many bytes were read.
-	 */
-	public int getPosition() {
-		return position;
-	}
-	
-	/**
-	 * Answers how many bytes are available for reading without blocking
-	 */
-	public int available() throws IOException {
-		if (buf == null) throw new IOException();
-		return (buf.length - pos) + in.available();
-	}
-	
-	/**
-	 * Answer the next byte of the input stream.
-	 */
-	public int read() throws IOException {
-		if (buf == null) throw new IOException();
-		position++;
-		if (pos < buf.length) return (buf[pos++] & 0xFF);
-		return in.read();
-	}
-	
-	/**
-	 * Don't imitate the JDK behaviour of reading a random number
-	 * of bytes when you can actually read them all.
-	 */
-	public int read(byte b[], int off, int len) throws IOException {
-		int result;
-		int left = len;
-		result = readData(b, off, len);
-		while (true) {
-			if (result == -1) return -1;
-			position += result;
-			if (result == left) return len;
-			left -= result;
-			off += result;
-			result = readData(b, off, left);
-		}
-	}
-	
-	/**
- 	 * Reads at most <code>length</code> bytes from this LEDataInputStream and 
- 	 * stores them in byte array <code>buffer</code> starting at <code>offset</code>.
- 	 * <p>
- 	 * Answer the number of bytes actually read or -1 if no bytes were read and 
- 	 * end of stream was encountered.  This implementation reads bytes from 
- 	 * the pushback buffer first, then the target stream if more bytes are required
- 	 * to satisfy <code>count</code>.
-	 * </p>
-	 * @param buffer the byte array in which to store the read bytes.
-	 * @param offset the offset in <code>buffer</code> to store the read bytes.
-	 * @param length the maximum number of bytes to store in <code>buffer</code>.
-	 *
-	 * @return int the number of bytes actually read or -1 if end of stream.
-	 *
-	 * @exception java.io.IOException if an IOException occurs.
-	 */
-	private int readData(byte[] buffer, int offset, int length) throws IOException {
-		if (buf == null) throw new IOException();
-		if (offset < 0 || offset > buffer.length ||
-  		 	length < 0 || (length > buffer.length - offset)) {
-	 		throw new ArrayIndexOutOfBoundsException();
-		 	}
-				
-		int cacheCopied = 0;
-		int newOffset = offset;
-	
-		// Are there pushback bytes available?
-		int available = buf.length - pos;
-		if (available > 0) {
-			cacheCopied = (available >= length) ? length : available;
-			System.arraycopy(buf, pos, buffer, newOffset, cacheCopied);
-			newOffset += cacheCopied;
-			pos += cacheCopied;
-		}
-	
-		// Have we copied enough?
-		if (cacheCopied == length) return length;
-
-		int inCopied = in.read(buffer, newOffset, length - cacheCopied);
-
-		if (inCopied > 0) return inCopied + cacheCopied;
-		if (cacheCopied == 0) return inCopied;
-		return cacheCopied;
-	}
-	
-	/**
-	 * Answer an integer comprised of the next
-	 * four bytes of the input stream.
-	 */
-	public int readInt() throws IOException {
-		byte[] buf = new byte[4];
-		read(buf);
-		return ((((((buf[3] & 0xFF) << 8) | 
-			(buf[2] & 0xFF)) << 8) | 
-			(buf[1] & 0xFF)) << 8) | 
-			(buf[0] & 0xFF);
-	}
-	
-	/**
-	 * Answer a short comprised of the next
-	 * two bytes of the input stream.
-	 */
-	public short readShort() throws IOException {
-		byte[] buf = new byte[2];
-		read(buf);
-		return (short)(((buf[1] & 0xFF) << 8) | (buf[0] & 0xFF));
-	}
-	
-	/**
-	 * Push back the entire content of the given buffer <code>b</code>.
-	 * <p>
-	 * The bytes are pushed so that they would be read back b[0], b[1], etc. 
-	 * If the push back buffer cannot handle the bytes copied from <code>b</code>, 
-	 * an IOException will be thrown and no byte will be pushed back.
-	 * </p>
-	 * 
-	 * @param b the byte array containing bytes to push back into the stream
-	 *
-	 * @exception 	java.io.IOException if the pushback buffer is too small
-	 */
-	public void unread(byte[] b) throws IOException {
-		int length = b.length;
-		if (length > pos) throw new IOException();
-		position -= length;
-		pos -= length;
-		System.arraycopy(b, 0, buf, pos, length);
-	}
-}
-public static abstract class FileFormat {	
-	LEDataInputStream inputStream;
-	ImageLoader loader;
-	int compression;
-
-byte[] bitInvertData(byte[] data, int startIndex, int endIndex) {
-	// Destructively bit invert data in the given byte array.
-	for (int i = startIndex; i < endIndex; i++) {
-		data[i] = (byte)(255 - data[i - startIndex]);
-	}
-	return data;
-}
-
-/**
- * Return whether or not the specified input stream
- * represents a supported file format.
- */
-abstract boolean isFileFormat(LEDataInputStream stream);
-
-abstract ImageData[] loadFromByteStream();
-
-public ImageData[] loadFromStream(LEDataInputStream stream) {
-	try {
-		inputStream = stream;
-		return loadFromByteStream();
-	} catch (Exception e) {
-		SWT.error(SWT.ERROR_IO, e);
-		return null;
-	}
-}
-
-public static ImageData[] load(InputStream is, ImageLoader loader) {
-	LEDataInputStream stream = new LEDataInputStream(is);
-	boolean isSupported = false;	
-	FileFormat fileFormat = new WinICOFileFormat();
-	if (fileFormat.isFileFormat(stream)) isSupported = true;
-	else {
-		fileFormat = new WinBMPFileFormat();
-		if (fileFormat.isFileFormat(stream)) isSupported = true;
-	}
-	if (!isSupported) SWT.error(SWT.ERROR_UNSUPPORTED_FORMAT);
-	fileFormat.loader = loader;
-	return fileFormat.loadFromStream(stream);
-}
-}
-static class WinBMPFileFormat extends FileFormat {
-	static final int BMPFileHeaderSize = 14;
-	static final int BMPHeaderFixedSize = 40;
-	int importantColors;
-
-void decompressData(byte[] src, byte[] dest, int stride, int cmp) {
-	if (cmp == 1) { // BMP_RLE8_COMPRESSION
-		if (decompressRLE8Data(src, src.length, stride, dest, dest.length) <= 0)
-			SWT.error(SWT.ERROR_INVALID_IMAGE);
-		return;
-	}
-	if (cmp == 2) { // BMP_RLE4_COMPRESSION
-		if (decompressRLE4Data(src, src.length, stride, dest, dest.length) <= 0)
-			SWT.error(SWT.ERROR_INVALID_IMAGE);
-		return;
-	}
-	SWT.error(SWT.ERROR_INVALID_IMAGE);
-}
-int decompressRLE4Data(byte[] src, int numBytes, int stride, byte[] dest, int destSize) {
-	int sp = 0;
-	int se = numBytes;
-	int dp = 0;
-	int de = destSize;
-	int x = 0, y = 0;
-	while (sp < se) {
-		int len = src[sp] & 0xFF;
-		sp++;
-		if (len == 0) {
-			len = src[sp] & 0xFF;
-			sp++;
-			switch (len) {
-				case 0: /* end of line */
-					y++;
-					x = 0;
-					dp = y * stride;
-					if (dp >= de)
-						return -1;
-					break;
-				case 1: /* end of bitmap */
-					return 1;
-				case 2: /* delta */
-					x += src[sp] & 0xFF;
-					sp++;
-					y += src[sp] & 0xFF;
-					sp++;
-					dp = y * stride + x / 2;
-					if (dp >= de)
-						return -1;
-					break;
-				default: /* absolute mode run */
-					if ((len & 1) != 0) /* odd run lengths not currently supported */
-						return -1;
-					x += len;
-					len = len / 2;
-					if (len > (se - sp))
-						return -1;
-					if (len > (de - dp))
-						return -1;
-					for (int i = 0; i < len; i++) {
-						dest[dp] = src[sp];
-						dp++;
-						sp++;
-					}
-					if ((sp & 1) != 0)
-						sp++; /* word align sp? */
-					break;
-			}
-		} else {
-			if ((len & 1) != 0)
-				return -1;
-			x += len;
-			len = len / 2;
-			byte theByte = src[sp];
-			sp++;
-			if (len > (de - dp))
-				return -1;
-			for (int i = 0; i < len; i++) {
-				dest[dp] = theByte;
-				dp++;
-			}
-		}
-	}
-	return 1;
-}
-int decompressRLE8Data(byte[] src, int numBytes, int stride, byte[] dest, int destSize) {
-	int sp = 0;
-	int se = numBytes;
-	int dp = 0;
-	int de = destSize;
-	int x = 0, y = 0;
-	while (sp < se) {
-		int len = src[sp] & 0xFF;
-		sp++;
-		if (len == 0) {
-			len = src[sp] & 0xFF;
-			sp++;
-			switch (len) {
-				case 0: /* end of line */
-					y++;
-					x = 0;
-					dp = y * stride;
-					if (dp >= de)
-						return -1;
-					break;
-				case 1: /* end of bitmap */
-					return 1;
-				case 2: /* delta */
-					x += src[sp] & 0xFF;
-					sp++;
-					y += src[sp] & 0xFF;
-					sp++;
-					dp = y * stride + x;
-					if (dp >= de)
-						return -1;
-					break;
-				default: /* absolute mode run */
-					if (len > (se - sp))
-						return -1;
-					if (len > (de - dp))
-						return -1;
-					for (int i = 0; i < len; i++) {
-						dest[dp] = src[sp];
-						dp++;
-						sp++;
-					}
-					if ((sp & 1) != 0)
-						sp++; /* word align sp? */
-					x += len;
-					break;
-			}
-		} else {
-			byte theByte = src[sp];
-			sp++;
-			if (len > (de - dp))
-				return -1;
-			for (int i = 0; i < len; i++) {
-				dest[dp] = theByte;
-				dp++;
-			}
-			x += len;
-		}
-	}
-	return 1;
-}
-boolean isFileFormat(LEDataInputStream stream) {
-	try {
-		byte[] header = new byte[18];
-		stream.read(header);
-		stream.unread(header);
-		int infoHeaderSize = (header[14] & 0xFF) | ((header[15] & 0xFF) << 8) | ((header[16] & 0xFF) << 16) | ((header[17] & 0xFF) << 24);
-		return header[0] == 0x42 && header[1] == 0x4D && infoHeaderSize >= BMPHeaderFixedSize;
-	} catch (Exception e) {
-		return false;
-	}
-}
-byte[] loadData(byte[] infoHeader) {
-	int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-	int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-	int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-	int stride = (width * bitCount + 7) / 8;
-	stride = (stride + 3) / 4 * 4; // Round up to 4 byte multiple
-	byte[] data = loadData(infoHeader, stride);
-	flipScanLines(data, stride, height);
-	return data;
-}
-byte[] loadData(byte[] infoHeader, int stride) {
-	int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-	int dataSize = height * stride;
-	byte[] data = new byte[dataSize];
-	int cmp = (infoHeader[16] & 0xFF) | ((infoHeader[17] & 0xFF) << 8) | ((infoHeader[18] & 0xFF) << 16) | ((infoHeader[19] & 0xFF) << 24);
-	if (cmp == 0) { // BMP_NO_COMPRESSION
-		try {
-			if (inputStream.read(data) != dataSize)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-		} catch (IOException e) {
-			SWT.error(SWT.ERROR_IO, e);
-		}
-	} else {
-		int compressedSize = (infoHeader[20] & 0xFF) | ((infoHeader[21] & 0xFF) << 8) | ((infoHeader[22] & 0xFF) << 16) | ((infoHeader[23] & 0xFF) << 24);
-		byte[] compressed = new byte[compressedSize];
-		try {
-			if (inputStream.read(compressed) != compressedSize)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-		} catch (IOException e) {
-			SWT.error(SWT.ERROR_IO, e);
-		}
-		decompressData(compressed, data, stride, cmp);
-	}
-	return data;
-}
-int[] loadFileHeader() {
-	int[] header = new int[5];
-	try {
-		header[0] = inputStream.readShort();
-		header[1] = inputStream.readInt();
-		header[2] = inputStream.readShort();
-		header[3] = inputStream.readShort();
-		header[4] = inputStream.readInt();
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-	if (header[0] != 0x4D42)
-		SWT.error(SWT.ERROR_INVALID_IMAGE);
-	return header;
-}
-ImageData[] loadFromByteStream() {
-	int[] fileHeader = loadFileHeader();
-	byte[] infoHeader = new byte[BMPHeaderFixedSize];
-	try {
-		inputStream.read(infoHeader);
-	} catch (Exception e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-	int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-	int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-	int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-	PaletteData palette = loadPalette(infoHeader);
-	if (inputStream.getPosition() < fileHeader[4]) {
-		// Seek to the specified offset
-		try {
-			inputStream.skip(fileHeader[4] - inputStream.getPosition());
-		} catch (IOException e) {
-			SWT.error(SWT.ERROR_IO, e);
-		}
-	}
-	byte[] data = loadData(infoHeader);
-	this.compression = (infoHeader[16] & 0xFF) | ((infoHeader[17] & 0xFF) << 8) | ((infoHeader[18] & 0xFF) << 16) | ((infoHeader[19] & 0xFF) << 24);
-	this.importantColors = (infoHeader[36] & 0xFF) | ((infoHeader[37] & 0xFF) << 8) | ((infoHeader[38] & 0xFF) << 16) | ((infoHeader[39] & 0xFF) << 24);
-//	int xPelsPerMeter = (infoHeader[24] & 0xFF) | ((infoHeader[25] & 0xFF) << 8) | ((infoHeader[26] & 0xFF) << 16) | ((infoHeader[27] & 0xFF) << 24);
-//	int yPelsPerMeter = (infoHeader[28] & 0xFF) | ((infoHeader[29] & 0xFF) << 8) | ((infoHeader[30] & 0xFF) << 16) | ((infoHeader[31] & 0xFF) << 24);
-	int type = (this.compression == 1 /*BMP_RLE8_COMPRESSION*/) || (this.compression == 2 /*BMP_RLE4_COMPRESSION*/) ? SWT.IMAGE_BMP_RLE : SWT.IMAGE_BMP;
-	return new ImageData[] {
-		ImageData.internal_new(
-			width,
-			height,
-			bitCount,
-			palette,
-			4,
-			data,
-			0,
-			null,
-			null,
-			-1,
-			-1,
-			type,
-			0,
-			0,
-			0,
-			0)
-	};
-}
-PaletteData loadPalette(byte[] infoHeader) {
-	int depth = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-	if (depth <= 8) {
-		int numColors = (infoHeader[32] & 0xFF) | ((infoHeader[33] & 0xFF) << 8) | ((infoHeader[34] & 0xFF) << 16) | ((infoHeader[35] & 0xFF) << 24);
-		if (numColors == 0) {
-			numColors = 1 << depth;
-		} else {
-			if (numColors > 256)
-				numColors = 256;
-		}
-		byte[] buf = new byte[numColors * 4];
-		try {
-			if (inputStream.read(buf) != buf.length)
-				SWT.error(SWT.ERROR_INVALID_IMAGE);
-		} catch (IOException e) {
-			SWT.error(SWT.ERROR_IO, e);
-		}
-		return paletteFromBytes(buf, numColors);
-	}
-	if (depth == 16) return new PaletteData(0x7C00, 0x3E0, 0x1F);
-	if (depth == 24) return new PaletteData(0xFF, 0xFF00, 0xFF0000);
-	return new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
-}
-PaletteData paletteFromBytes(byte[] bytes, int numColors) {
-	int bytesOffset = 0;
-	RGB[] colors = new RGB[numColors];
-	for (int i = 0; i < numColors; i++) {
-		colors[i] = new RGB(bytes[bytesOffset + 2] & 0xFF,
-			bytes[bytesOffset + 1] & 0xFF,
-			bytes[bytesOffset] & 0xFF);
-		bytesOffset += 4;
-	}
-	return new PaletteData(colors);
-}
-/**
- * Answer a byte array containing the BMP representation of
- * the given device independent palette.
- */
-static byte[] paletteToBytes(PaletteData pal) {
-	int n = pal.colors == null ? 0 : (pal.colors.length < 256 ? pal.colors.length : 256);
-	byte[] bytes = new byte[n * 4];
-	int offset = 0;
-	for (int i = 0; i < n; i++) {
-		RGB col = pal.colors[i];
-		bytes[offset] = (byte)col.blue;
-		bytes[offset + 1] = (byte)col.green;
-		bytes[offset + 2] = (byte)col.red;
-		offset += 4;
-	}
-	return bytes;
-}
-
-void flipScanLines(byte[] data, int stride, int height) {
-	int i1 = 0;
-	int i2 = (height - 1) * stride;
-	for (int i = 0; i < height / 2; i++) {
-		for (int index = 0; index < stride; index++) {
-			byte b = data[index + i1];
-			data[index + i1] = data[index + i2];
-			data[index + i2] = b;
-		}
-		i1 += stride;
-		i2 -= stride;
-	}
-}
-
-}
-
-static class WinICOFileFormat extends FileFormat {
-	
-static final byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
-	if (pad == newPad) return data;
-	int stride = (width * depth + 7) / 8;
-	int bpl = (stride + (pad - 1)) / pad * pad;
-	int newBpl = (stride + (newPad - 1)) / newPad * newPad;
-	byte[] newData = new byte[height * newBpl];
-	int srcIndex = 0, destIndex = 0;
-	for (int y = 0; y < height; y++) {
-		System.arraycopy(data, srcIndex, newData, destIndex, newBpl);
-		srcIndex += bpl;
-		destIndex += newBpl;
-	}
-	return newData;
-}
-/**
- * Answer the size in bytes of the file representation of the given
- * icon
- */
-int iconSize(ImageData i) {
-	int shapeDataStride = (i.width * i.depth + 31) / 32 * 4;
-	int maskDataStride = (i.width + 31) / 32 * 4;
-	int dataSize = (shapeDataStride + maskDataStride) * i.height;
-	int paletteSize = i.palette.colors != null ? i.palette.colors.length * 4 : 0;
-	return WinBMPFileFormat.BMPHeaderFixedSize + paletteSize + dataSize;
-}
-boolean isFileFormat(LEDataInputStream stream) {
-	try {
-		byte[] header = new byte[4];
-		stream.read(header);
-		stream.unread(header);
-		return header[0] == 0 && header[1] == 0 && header[2] == 1 && header[3] == 0;
-	} catch (Exception e) {
-		return false;
-	}
-}
-boolean isValidIcon(ImageData i) {
-	switch (i.depth) {
-		case 1:
-		case 4:
-		case 8:
-			if (i.palette.isDirect) return false;
-			int size = i.palette.colors.length;
-			return size == 2 || size == 16 || size == 32 || size == 256;
-		case 24:
-		case 32:
-			return i.palette.isDirect;
-	}
-	return false;
-}
-int loadFileHeader(LEDataInputStream byteStream) {
-	int[] fileHeader = new int[3];
-	try {
-		fileHeader[0] = byteStream.readShort();
-		fileHeader[1] = byteStream.readShort();
-		fileHeader[2] = byteStream.readShort();
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-	if ((fileHeader[0] != 0) || (fileHeader[1] != 1))
-		SWT.error(SWT.ERROR_INVALID_IMAGE);
-	int numIcons = fileHeader[2];
-	if (numIcons <= 0)
-		SWT.error(SWT.ERROR_INVALID_IMAGE);
-	return numIcons;
-}
-int loadFileHeader(LEDataInputStream byteStream, boolean hasHeader) {
-	int[] fileHeader = new int[3];
-	try {
-		if (hasHeader) {
-			fileHeader[0] = byteStream.readShort();
-			fileHeader[1] = byteStream.readShort();
-		} else {
-			fileHeader[0] = 0;
-			fileHeader[1] = 1;
-		}
-		fileHeader[2] = byteStream.readShort();
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-	if ((fileHeader[0] != 0) || (fileHeader[1] != 1))
-		SWT.error(SWT.ERROR_INVALID_IMAGE);
-	int numIcons = fileHeader[2];
-	if (numIcons <= 0)
-		SWT.error(SWT.ERROR_INVALID_IMAGE);
-	return numIcons;
-}
-ImageData[] loadFromByteStream() {
-	int numIcons = loadFileHeader(inputStream);
-	int[][] headers = loadIconHeaders(numIcons);
-	ImageData[] icons = new ImageData[headers.length];
-	for (int i = 0; i < icons.length; i++) {
-		icons[i] = loadIcon(headers[i]);
-	}
-	return icons;
-}
-/**
- * Load one icon from the byte stream.
- */
-ImageData loadIcon(int[] iconHeader) {
-	byte[] infoHeader = loadInfoHeader(iconHeader);
-	WinBMPFileFormat bmpFormat = new WinBMPFileFormat();
-	bmpFormat.inputStream = inputStream;
-	PaletteData palette = bmpFormat.loadPalette(infoHeader);
-	byte[] shapeData = bmpFormat.loadData(infoHeader);
-	int width = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-	int height = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-	int depth = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-	infoHeader[14] = 1;
-	infoHeader[15] = 0;
-	byte[] maskData = bmpFormat.loadData(infoHeader);
-	maskData = convertPad(maskData, width, height, 1, 4, 2);
-	bitInvertData(maskData, 0, maskData.length);
-	return ImageData.internal_new(
-		width,
-		height,
-		depth,
-		palette,
-		4,
-		shapeData,
-		2,
-		maskData,
-		null,
-		-1,
-		-1,
-		SWT.IMAGE_ICO,
-		0,
-		0,
-		0,
-		0);
-}
-int[][] loadIconHeaders(int numIcons) {
-	int[][] headers = new int[numIcons][7];
-	try {
-		for (int i = 0; i < numIcons; i++) {
-			headers[i][0] = inputStream.read();
-			headers[i][1] = inputStream.read();
-			headers[i][2] = inputStream.readShort();
-			headers[i][3] = inputStream.readShort();
-			headers[i][4] = inputStream.readShort();
-			headers[i][5] = inputStream.readInt();
-			headers[i][6] = inputStream.readInt();
-		}
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-	return headers;
-}
-byte[] loadInfoHeader(int[] iconHeader) {
-	int width = iconHeader[0];
-	int height = iconHeader[1];
-	int numColors = iconHeader[2]; // the number of colors is in the low byte, but the high byte must be 0
-	if (numColors == 0) numColors = 256; // this is specified: '00' represents '256' (0x100) colors
-	if ((numColors != 2) && (numColors != 8) && (numColors != 16) &&
-		(numColors != 32) && (numColors != 256))
-		SWT.error(SWT.ERROR_INVALID_IMAGE);
-	if (inputStream.getPosition() < iconHeader[6]) {
-		// Seek to the specified offset
-		try {
-			inputStream.skip(iconHeader[6] - inputStream.getPosition());
-		} catch (IOException e) {
-			SWT.error(SWT.ERROR_IO, e);
-			return null;
-		}
-	}
-	byte[] infoHeader = new byte[WinBMPFileFormat.BMPHeaderFixedSize];
-	try {
-		inputStream.read(infoHeader);
-	} catch (IOException e) {
-		SWT.error(SWT.ERROR_IO, e);
-	}
-	if (((infoHeader[12] & 0xFF) | ((infoHeader[13] & 0xFF) << 8)) != 1)
-		SWT.error(SWT.ERROR_INVALID_IMAGE);
-	int infoWidth = (infoHeader[4] & 0xFF) | ((infoHeader[5] & 0xFF) << 8) | ((infoHeader[6] & 0xFF) << 16) | ((infoHeader[7] & 0xFF) << 24);
-	int infoHeight = (infoHeader[8] & 0xFF) | ((infoHeader[9] & 0xFF) << 8) | ((infoHeader[10] & 0xFF) << 16) | ((infoHeader[11] & 0xFF) << 24);
-	int bitCount = (infoHeader[14] & 0xFF) | ((infoHeader[15] & 0xFF) << 8);
-	if (height == infoHeight && bitCount == 1) height /= 2;
-	if (!((width == infoWidth) && (height * 2 == infoHeight) &&
-		(bitCount == 1 || bitCount == 4 || bitCount == 8 || bitCount == 24 || bitCount == 32)))
-			SWT.error(SWT.ERROR_INVALID_IMAGE);
-	infoHeader[8] = (byte)(height & 0xFF);
-	infoHeader[9] = (byte)((height >> 8) & 0xFF);
-	infoHeader[10] = (byte)((height >> 16) & 0xFF);
-	infoHeader[11] = (byte)((height >> 24) & 0xFF);
-	return infoHeader;
-}
-}
-static class SWT {
-	public static final int IMAGE_ICO = 3;
-	public static final int ERROR_IO = 39;
-	public static final int ERROR_INVALID_IMAGE = 40;
-	public static final int ERROR_NULL_ARGUMENT = 4;
-	public static final int ERROR_INVALID_ARGUMENT = 5;
-	public static final int ERROR_CANNOT_BE_ZERO = 7;
-	public static final int IMAGE_UNDEFINED = -1;
-	public static final int ERROR_UNSUPPORTED_DEPTH = 38;
-	public static final int TRANSPARENCY_MASK = 1 << 1;
-	public static final int ERROR_UNSUPPORTED_FORMAT = 42;
-	public static final int TRANSPARENCY_ALPHA = 1 << 0;
-	public static final int TRANSPARENCY_NONE = 0x0;
-	public static final int TRANSPARENCY_PIXEL = 1 << 2;
-	public static final int IMAGE_BMP = 0;
-	public static final int IMAGE_BMP_RLE = 1;
-	
-	public static void error(int code) {
-		throw new RuntimeException("Error "+code); //$NON-NLS-1$
-	}
-	public static void error(int code, Throwable t) {
-		throw new RuntimeException(t);
-	}
-}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/AbstractPublisherTask.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/AbstractPublisherTask.java
index 03a5fee..1da36b3 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/AbstractPublisherTask.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/AbstractPublisherTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -135,6 +135,7 @@ public abstract class AbstractPublisherTask extends Task {
 		application.setMetadataLocation(metadataLocation);
 		application.setArtifactLocation(artifactLocation);
 		application.setAppend(append);
+		application.setCompress(compress);
 
 		URI[] metadata = (URI[]) contextMetadataRepositories.toArray(new URI[contextMetadataRepositories.size()]);
 		URI[] artifacts = (URI[]) contextArtifactRepositories.toArray(new URI[contextArtifactRepositories.size()]);
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/GatherFeatureTask.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/GatherFeatureTask.java
index 1f78117..cbf1204 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/GatherFeatureTask.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/publisher/GatherFeatureTask.java
@@ -17,14 +17,18 @@ import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.PatternSet.NameEntry;
 import org.apache.tools.ant.types.selectors.FilenameSelector;
 import org.apache.tools.ant.types.selectors.OrSelector;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.equinox.p2.publisher.PublisherInfo;
-import org.eclipse.pde.internal.build.IBuildPropertiesConstants;
-import org.eclipse.pde.internal.build.Utils;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.build.*;
 import org.eclipse.pde.internal.build.builder.ModelBuildScriptGenerator;
+import org.eclipse.pde.internal.build.tasks.TaskMessages;
 
 public class GatherFeatureTask extends AbstractPublisherTask {
 	private String buildResultFolder = null;
 	private String targetFolder = null;
+	private String licenseDirectory = null;
 
 	public void execute() throws BuildException {
 		GatheringComputer computer = createFeatureComputer();
@@ -85,10 +89,38 @@ public class GatherFeatureTask extends AbstractPublisherTask {
 
 		GatheringComputer computer = new GatheringComputer();
 
+		if (licenseDirectory != null) {
+			try {
+				// Default includes and excludes for binary license features
+				String licenseInclude = "**"; //$NON-NLS-1$
+				String licenseExclude = "META-INF/"; //$NON-NLS-1$
+
+				// Read build.properties from license feature for source features
+				if (new File(licenseDirectory, IPDEBuildConstants.PROPERTIES_FILE).exists()) {
+					Properties licenseProperties = AbstractScriptGenerator.readProperties(licenseDirectory, IPDEBuildConstants.PROPERTIES_FILE, IStatus.WARNING);
+					licenseInclude = (String) licenseProperties.get(IBuildPropertiesConstants.PROPERTY_BIN_INCLUDES);
+					licenseExclude = (String) licenseProperties.get(IBuildPropertiesConstants.PROPERTY_BIN_EXCLUDES);
+				}
+				licenseExclude = (licenseExclude != null ? licenseExclude + "," : "") + IPDEBuildConstants.LICENSE_DEFAULT_EXCLUDES; //$NON-NLS-1$//$NON-NLS-2$
+
+				FileSet licenseFiles = createFileSet(licenseDirectory, licenseInclude, licenseExclude);
+				computer.addFiles(licenseDirectory, licenseFiles.getDirectoryScanner().getIncludedFiles());
+			} catch (CoreException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+
+		FileSet fileSet = createFileSet(buildResultFolder, include, exclude);
+		computer.addFiles(buildResultFolder, fileSet.getDirectoryScanner().getIncludedFiles());
+		return computer;
+	}
+
+	private FileSet createFileSet(String folder, String includes, String excludes) {
 		FileSet fileSet = new FileSet();
 		fileSet.setProject(getProject());
-		fileSet.setDir(new File(buildResultFolder));
-		String[] splitIncludes = Utils.getArrayFromString(include);
+		fileSet.setDir(new File(folder));
+		String[] splitIncludes = Utils.getArrayFromString(includes);
 		for (int i = 0; i < splitIncludes.length; i++) {
 			String entry = splitIncludes[i];
 			if (entry.equals(ModelBuildScriptGenerator.DOT))
@@ -98,13 +130,12 @@ public class GatherFeatureTask extends AbstractPublisherTask {
 			fileInclude.setName(entry);
 		}
 
-		String[] splitExcludes = Utils.getArrayFromString(exclude);
+		String[] splitExcludes = Utils.getArrayFromString(excludes);
 		for (int i = 0; i < splitExcludes.length; i++) {
 			NameEntry fileExclude = fileSet.createExclude();
-			fileExclude.setName(splitIncludes[i]);
+			fileExclude.setName(splitExcludes[i]);
 		}
-		computer.addFiles(buildResultFolder, fileSet.getDirectoryScanner().getIncludedFiles());
-		return computer;
+		return fileSet;
 	}
 
 	private String reorderConfig(String config) {
@@ -145,6 +176,12 @@ public class GatherFeatureTask extends AbstractPublisherTask {
 						if (file.startsWith("absolute:")) { //$NON-NLS-1$
 							file = file.substring(9);
 							fromDir = null;
+						} else if (file.startsWith("license:")) { //$NON-NLS-1$
+							if (licenseDirectory == null) {
+								throw new BuildException(NLS.bind(TaskMessages.error_licenseRootWithoutLicenseRef, baseDirectory));
+							}
+							file = file.substring(8);
+							fromDir = licenseDirectory;
 						}
 						if (file.startsWith("file:")) { //$NON-NLS-1$
 							File temp = fromDir != null ? new File(fromDir, file.substring(5)) : new File(file.substring(5));
@@ -233,4 +270,9 @@ public class GatherFeatureTask extends AbstractPublisherTask {
 		if (targetFolder != null && targetFolder.length() > 0 && !targetFolder.startsWith(ANT_PREFIX))
 			this.targetFolder = targetFolder;
 	}
+
+	public void setLicenseDirectory(String licenseDirectory) {
+		if (licenseDirectory != null && licenseDirectory.length() > 0 && !licenseDirectory.startsWith(ANT_PREFIX))
+			this.licenseDirectory = licenseDirectory;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildManifestTask.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildManifestTask.java
index 72907d3..2f280f7 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildManifestTask.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildManifestTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2007 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -15,11 +15,11 @@ import java.util.*;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.build.*;
 import org.eclipse.pde.internal.build.site.BuildTimeFeature;
 import org.eclipse.pde.internal.build.site.BuildTimeFeatureFactory;
-import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
 
 /**
  * Used to create a build manifest file describing what plug-ins and versions
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java
index 4ac8159..9b18b1d 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -338,4 +338,24 @@ public class BuildScriptGeneratorTask extends Task {
 		if (uris.size() > 0)
 			generator.setContextMetadataRepositories((URI[]) uris.toArray(new URI[uris.size()]));
 	}
+
+	public void setSourceBundleFeatureId(String value) {
+		if (value != null && !value.startsWith("${")) //$NON-NLS-1$
+			generator.setSourceBundleFeatureId(value);
+	}
+
+	public void setSourceBundleTemplateFeature(String value) {
+		if (value != null && !value.startsWith("${")) //$NON-NLS-1$
+			generator.setSourceBundleTemplateFeature(value);
+	}
+
+	public void setSourceBundleFeatureVersion(String value) {
+		if (value != null && !value.startsWith("${")) //$NON-NLS-1$
+			generator.setSourceBundleFeatureVersion(value);
+	}
+
+	public void setSourceBundleMode(String value) {
+		if (value != null && !value.startsWith("${")) //$NON-NLS-1$
+			generator.setSourceBundleMode(value);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/FetchTask.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/FetchTask.java
index 5aea4d4..fc2979e 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/FetchTask.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/FetchTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -99,6 +99,10 @@ public class FetchTask extends Task {
 	public void execute() throws BuildException {
 		try {
 			BundleHelper.getDefault().setLog(this);
+
+			String fetchCache = getProject().getProperty(IBuildPropertiesConstants.PROPERTY_FETCH_CACHE);
+			if (fetchCache != null && !fetchCache.startsWith("${")) //$NON-NLS-1$
+				generator.setFetchCache(fetchCache);
 			generator.setScriptRunner(new AntScriptRunner(this));
 			generator.generate();
 			BundleHelper.getDefault().setLog(null);
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/LicenseReplaceTask.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/LicenseReplaceTask.java
new file mode 100644
index 0000000..4b77751
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/LicenseReplaceTask.java
@@ -0,0 +1,366 @@
+/*******************************************************************************
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.build.tasks;
+
+import java.io.*;
+import java.util.Enumeration;
+import java.util.Properties;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.PatternSet.NameEntry;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.build.Constants;
+
+/** 
+ * Internal task.
+ * This task aims at replacing the generic ids used into a feature.xml by another value, and also replace the feature version number if necessary.  
+ * @since 3.0
+ */
+public class LicenseReplaceTask extends Task {
+	// Path of the file where we are replacing the values
+	private String filePath;
+
+	// Path to license text
+	private String licensePath;
+
+	private class Feature {
+		private static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
+		private static final String FEATURE_START_TAG = "<feature";//$NON-NLS-1$
+		private static final String LICENSE_START_TAG = "<license"; //$NON-NLS-1$;
+		private static final String LICENSE_END_TAG = "</license>"; //$NON-NLS-1$;
+		private static final String URL_ATTR = "url";//$NON-NLS-1$
+		private static final String DOUBLE_QUOTE = "\""; //$NON-NLS-1$
+		private static final String COMMENT_START_TAG = "<!--"; //$NON-NLS-1$
+		private static final String COMMENT_END_TAG = "-->"; //$NON-NLS-1$
+
+		private final String featureFilePath;
+		private String urlText;
+		private String license;
+		private StringBuffer buffer;
+		private int startLicenseText = -1;
+		private int endLicenseText = -1;
+		private int startURLText = -1;
+		private int endURLText = -1;
+		private int startURLWord = -1;
+		private int endURLWord = -1;
+		private int insertionPoint = -1;
+		private boolean contentChanged;
+
+		public String getUrl() {
+			if (contentChanged) {
+				throw new IllegalStateException(TaskMessages.error_noCallAfterReplace);
+			}
+			return urlText;
+		}
+
+		public String getLicenseText() {
+			if (contentChanged) {
+				throw new IllegalStateException(TaskMessages.error_noCallAfterReplace);
+			}
+			return license;
+		}
+
+		public void replace(String licenseURL, String licenseText) {
+			if (contentChanged) {
+				throw new IllegalStateException(TaskMessages.error_noCallAfterReplace);
+			}
+
+			if (startLicenseText > 0 && endLicenseText > startLicenseText) {
+				// Replace license text
+				buffer.replace(startLicenseText, endLicenseText, licenseText);
+				contentChanged = true;
+			} else if (insertionPoint > -1) {
+				//insert new license after <feature>
+				StringBuffer newLicense = new StringBuffer();
+				newLicense.append('\n');
+				newLicense.append(LICENSE_START_TAG + " " + URL_ATTR + "="); //$NON-NLS-1$//$NON-NLS-2$
+				if (licenseURL != null)
+					newLicense.append(licenseURL);
+				newLicense.append(" >"); //$NON-NLS-1$
+				newLicense.append(licenseText);
+				newLicense.append(LICENSE_END_TAG);
+
+				buffer.insert(insertionPoint, newLicense.toString());
+				contentChanged = true;
+				return;
+			} else {
+				return;
+			}
+
+			if (startURLText == endURLText) {
+				// Replace empty payload URL
+				if (licenseURL == null) {
+					// with empty license URL
+					// No-op
+				} else {
+					// with non-empty license URL
+					buffer.replace(startURLText, endURLText + 1, " url=" + licenseURL + ">"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			} else {
+				// Replace non-empty payload URL
+				if (licenseURL == null) {
+					// with empty license URL
+					buffer.replace(startURLWord, endURLText + 1, ""); //$NON-NLS-1$
+				} else {
+					// with non-empty license URL
+					buffer.replace(startURLText, endURLText + 1, licenseURL);
+				}
+			}
+
+			int start = buffer.indexOf("license-feature="); //$NON-NLS-1$
+			if (start != -1) {
+				int end = buffer.indexOf("\"", start); //$NON-NLS-1$
+				if (end < buffer.length()) {
+					end = buffer.indexOf("\"", end + 1); //$NON-NLS-1$
+					if (end != -1) {
+						buffer.replace(start, end + 1, ""); //$NON-NLS-1$
+					}
+				}
+			}
+
+			start = buffer.indexOf("license-feature-version="); //$NON-NLS-1$
+			if (start != -1) {
+				int end = buffer.indexOf("\"", start); //$NON-NLS-1$
+				if (end < buffer.length()) {
+					end = buffer.indexOf("\"", end + 1); //$NON-NLS-1$
+					if (end != -1) {
+						buffer.replace(start, end + 1, ""); //$NON-NLS-1$
+					}
+				}
+			}
+		}
+
+		public void write() {
+			if (!contentChanged)
+				return;
+
+			try {
+				OutputStreamWriter w = new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(featureFilePath)), UTF_8);
+				w.write(buffer.toString());
+				w.close();
+			} catch (FileNotFoundException e) {
+				// ignore
+			} catch (IOException e) {
+				throw new BuildException(e);
+			}
+		}
+
+		Feature(String featureFilePath) {
+			super();
+			this.featureFilePath = featureFilePath + '/' + Constants.FEATURE_FILENAME_DESCRIPTOR;
+			parse();
+		}
+
+		private void parse() {
+			buffer = null;
+			try {
+				buffer = readFile(new File(featureFilePath));
+			} catch (IOException e) {
+				throw new BuildException(e);
+			}
+
+			int startFeature = scanNoComment(buffer, 0, FEATURE_START_TAG, true);
+			if (startFeature == -1)
+				return;
+
+			int endFeature = scan(buffer, startFeature, ">"); //$NON-NLS-1$
+			insertionPoint = endFeature + 1;
+
+			int startLicense = scanNoComment(buffer, 0, LICENSE_START_TAG, false);
+			if (startLicense == -1)
+				return;
+
+			int endLicense = scan(buffer, startLicense, ">"); //$NON-NLS-1$
+
+			boolean urlFound = false;
+			while (!urlFound) {
+				startURLWord = scan(buffer, startLicense, URL_ATTR);
+				if (startURLWord == -1 || startURLWord > endLicense) {
+					startURLText = startLicense + LICENSE_START_TAG.length();
+					endURLText = startURLText;
+				} else {
+
+					if (!Character.isWhitespace(buffer.charAt(startURLWord - 1))) {
+						startLicense = startURLWord + URL_ATTR.length();
+						continue;
+					}
+
+					//Verify that the word url found is the actual attribute
+					endURLWord = startURLWord + URL_ATTR.length();
+					while (Character.isWhitespace(buffer.charAt(endURLWord)) && endURLWord < endLicense) {
+						endURLWord++;
+					}
+					if (endURLWord > endLicense) { //id has not been found
+						System.err.println("Could not find the tag 'id' in the license header, file: " + featureFilePath); //$NON-NLS-1$
+						return;
+					}
+
+					if (buffer.charAt(endURLWord) != '=') {
+						startLicense = endURLWord;
+						continue;
+					}
+					startURLText = scan(buffer, startURLWord + 1, DOUBLE_QUOTE);
+					endURLText = scan(buffer, startURLText + 1, DOUBLE_QUOTE);
+					urlText = (buffer.substring(startURLText, endURLText + 1));
+				}
+				urlFound = true;
+			}
+			startLicenseText = scan(buffer, endURLText, ">") + 1; //$NON-NLS-1$
+			endLicenseText = scan(buffer, startLicenseText, LICENSE_END_TAG, true) - 1;
+			license = buffer.substring(startLicenseText, endLicenseText);
+		}
+
+		private StringBuffer readFile(File targetName) throws IOException {
+			InputStreamReader reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(targetName)), UTF_8);
+			StringBuffer result = new StringBuffer();
+			char[] buf = new char[4096];
+			int count;
+			try {
+				count = reader.read(buf, 0, buf.length);
+				while (count != -1) {
+					result.append(buf, 0, count);
+					count = reader.read(buf, 0, buf.length);
+				}
+			} finally {
+				try {
+					reader.close();
+				} catch (IOException e) {
+					// ignore exceptions here
+				}
+			}
+			return result;
+		}
+
+		private int scan(StringBuffer buf, int start, String targetName) {
+			return scan(buf, start, new String[] {targetName}, false);
+		}
+
+		private int scan(StringBuffer buf, int start, String targetName, boolean wholeWord) {
+			return scan(buf, start, new String[] {targetName}, wholeWord);
+		}
+
+		private int scan(StringBuffer buf, int start, String[] targets, boolean wholeWord) {
+			for (int i = start; i < buf.length(); i++) {
+				for (int j = 0; j < targets.length; j++) {
+					if (i < buf.length() - targets[j].length()) {
+						String candidate = targets[j];
+						String match = buf.substring(i, i + candidate.length());
+						if (candidate.equalsIgnoreCase(match)) {
+							if (!wholeWord || Character.isWhitespace(buf.charAt(i + candidate.length())))
+								return i;
+						}
+					}
+				}
+			}
+			return -1;
+		}
+
+		private int scanNoComment(StringBuffer bug, int start, String target, boolean wholeWord) {
+			int startComment = scan(buffer, start, COMMENT_START_TAG);
+			int endComment = startComment > -1 ? scan(buffer, startComment, COMMENT_END_TAG) : -1;
+			int startTarget = scan(buffer, start, target, wholeWord);
+
+			while (startComment != -1 && startTarget > startComment && startTarget < endComment) {
+				startTarget = scan(buffer, endComment, target, wholeWord);
+				startComment = scan(buffer, endComment, COMMENT_START_TAG);
+				endComment = startComment > -1 ? scan(buffer, startComment, COMMENT_END_TAG) : -1;
+			}
+			return startTarget;
+		}
+	}
+
+	/**
+	 * The directory containing the feature 
+	 * @param path
+	 */
+	public void setFeatureFilePath(String path) {
+		filePath = path;
+	}
+
+	/**
+	 * The directory containing the license feature
+	 * @param path
+	 */
+	public void setLicenseFilePath(String path) {
+		licensePath = path;
+	}
+
+	public void execute() {
+		Feature payloadFeature = new Feature(filePath);
+		Feature licenseFeature = new Feature(licensePath);
+
+		// Replace license information in target feature.xml
+		payloadFeature.replace(licenseFeature.getUrl(), licenseFeature.getLicenseText());
+		payloadFeature.write();
+
+		// Append license feature_*.properties files to target feature_*.properties files
+		FileSet fileSet = new FileSet();
+		fileSet.setProject(getProject());
+		fileSet.setDir(new File(licensePath));
+		NameEntry fileInclude = fileSet.createInclude();
+		fileInclude.setName("feature*.properties"); //$NON-NLS-1$
+
+		String[] propertyFiles = fileSet.getDirectoryScanner().getIncludedFiles();
+
+		for (int i = 0; i < propertyFiles.length; i++) {
+			String propertyFile = propertyFiles[i];
+
+			File featurePropertyFile = new File(filePath, propertyFile);
+			File licensePropertyFile = new File(licensePath, propertyFile);
+			FileInputStream fis = null;
+			if (featurePropertyFile.exists()) {
+				try {
+					fis = new FileInputStream(licensePropertyFile);
+					Properties licenseProperties = new Properties();
+					licenseProperties.load(fis);
+					fis.close();
+
+					fis = new FileInputStream(featurePropertyFile);
+					Properties featureProperties = new Properties();
+					featureProperties.load(fis);
+					fis.close();
+
+					Enumeration licenseKeys = licenseProperties.keys();
+					while (licenseKeys.hasMoreElements()) {
+						String licenseKey = (String) licenseKeys.nextElement();
+						if (featureProperties.containsKey(licenseKey)) {
+							throw new BuildException(NLS.bind(TaskMessages.error_conflictingProperties, new String[] {licenseKey, licensePropertyFile.getAbsolutePath(), featurePropertyFile.getAbsolutePath()}));
+						}
+					}
+				} catch (FileNotFoundException e) {
+					// DO Nothing
+				} catch (IOException e) {
+					throw new BuildException(e);
+				}
+			}
+
+			// Now append (or create) necessary feature_*.properties files
+
+			try {
+				FileWriter featurePropertyWriter = new FileWriter(featurePropertyFile, true);
+				FileReader licensePropertyReader = new FileReader(licensePropertyFile);
+
+				char[] buffer = new char[1024];
+				int bytesRead = licensePropertyReader.read(buffer);
+				while (bytesRead > -1) {
+					featurePropertyWriter.write(buffer, 0, bytesRead);
+					bytesRead = licensePropertyReader.read(buffer);
+				}
+
+				featurePropertyWriter.close();
+				licensePropertyReader.close();
+			} catch (IOException e) {
+				throw new BuildException(e);
+			}
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/TaskMessages.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/TaskMessages.java
index 55716cb..83c3064 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/TaskMessages.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/TaskMessages.java
@@ -36,6 +36,9 @@ public class TaskMessages extends NLS {
 	public static String error_artifactRepoNotURI;
 	public static String error_metadataRepoNotURI;
 	public static String error_locationNotURI;
+	public static String error_noCallAfterReplace;
+	public static String error_licenseRootWithoutLicenseRef;
+	public static String error_conflictingProperties;
 
 	static {
 		// load message values from bundle file
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/Version.java b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/Version.java
index 6c403da..dc5c1f2 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/Version.java
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/Version.java
@@ -1,5 +1,4 @@
 /*
- * $Header: /cvsroot/eclipse/pde/build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/Version.java,v 1.2 2008/08/20 15:16:18 aniefer Exp $
  * 
  * Copyright (c) OSGi Alliance (2004, 2006). All Rights Reserved.
  * 
@@ -37,7 +36,7 @@ import java.util.StringTokenizer;
  * <p>
  * <code>Version</code> objects are immutable.
  * 
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
  * @since 1.3
  */
 
diff --git a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/messages.properties b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/messages.properties
index 158b9a7..9de4630 100644
--- a/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/messages.properties
@@ -30,4 +30,8 @@ error_callingGenerator = An error occurred when calling generator.
 
 error_artifactRepoNotURI= The specified artifact repository location ({0}) is not a valid URI.
 error_metadataRepoNotURI= The specified metadata repository location ({0}) is not a valid URI.
-error_locationNotURI= The specified location ({0}) is not a valid URI.
\ No newline at end of file
+error_locationNotURI= The specified location ({0}) is not a valid URI.
+
+error_noCallAfterReplace= Internal error.  Must not invoke method after replace() is called.
+error_licenseRootWithoutLicenseRef= Feature in {0} uses ''license:'' root keyword but does not reference a license feature
+error_conflictingProperties= Property {0} in {1} conflicts with property in {2}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/build.properties b/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/build.properties
index 45a1813..432b6e0 100644
--- a/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/build.properties
+++ b/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2009 IBM Corporation and others.
+# Copyright (c) 2003, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -7,6 +7,10 @@
 #
 # Contributors:
 #     IBM Corporation - initial API and implementation
+#     Compuware Corporation - Sebastien Angers <sebastien.angers at compuware.com> 
+#     	- Enabled additional mirror slicingOptions in Headless PDE Build
+#     	- Enabled 'raw' attribute for mirror step in Headless PDE Build
+#     	- https://bugs.eclipse.org/338878
 ###############################################################################
 #####################
 # Parameters describing how and where to execute the build.
@@ -117,6 +121,40 @@ tarargs=
 #Control the creation of a file containing the version included in each configuration - on by default 
 #generateVersionsLists=false
 
+############ REPO MIRROR OPTIONS CONTROL ############
+# Default values for the slicingOptions and raw attribute of the p2.mirror Ant target used to generate the p2 repo (buildRepo)
+# Note that the default values used by PDE/Build are different from the default values for p2.mirror's slicingOptions and raw attribute
+# See http://help.eclipse.org/topic//org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm for the details
+# of each setting.
+#p2.mirror.slicing.filter=
+#p2.mirror.slicing.followOnlyFilteredRequirements=false
+#p2.mirror.slicing.followStrict=false
+#p2.mirror.slicing.includeFeatures=true
+#p2.mirror.slicing.includeNonGreedy=false
+#p2.mirror.slicing.includeOptional=true
+#p2.mirror.slicing.platformFilter=
+#p2.mirror.slicing.latestVersionOnly=false
+
+#p2.mirror.raw=false
+
+############## SOURCE BUNDLE CONTROL ################
+# Set this property to have source bundles created and output into build repository.
+# This does NOT put them in the build output (e.g., product) itself.
+# Valid values are: not set, built, all.
+# 		built = only source for bundles that are actually built/compiled in this run are output
+#		all = all available source is collected and output
+#sourceBundleMode=all
+
+# When outputting autogenerated source bundles a feature is created to contain all the automatic
+# source bundles.  Typically this feature is not needed and can be ignored. As such, it is given a default
+# name and version.  These properties can be used to override the defaults.
+#  sourceBundleTemplateFeature - can specify an existing feature which will be augmented to form the generated source feature
+#  sourceBundleFeatureId - will be the id of generated source feature which contains all the generated source bundles, default value
+#                          is sourceBundleTemplateFeature + ".source" if sourceBundleTemplateFeature is specified
+#sourceBundleTemplateFeature=
+#sourceBundleFeatureId=
+#sourceBundleFeatureVersion=
+
 ############## BUILD NAMING CONTROL ################
 # The directory into which the build elements are fetched and where
 # the build takes place.
diff --git a/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customAssembly.xml b/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customAssembly.xml
index b7dd814..7abef5d 100644
--- a/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customAssembly.xml
+++ b/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customAssembly.xml
@@ -1,4 +1,4 @@
-<project name="Build specific targets and properties" default="noDefault">
+<project name="customAssembly.template" default="noDefault">
 
 	<!-- =====================================================================
 	    
diff --git a/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customTargets.xml b/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customTargets.xml
index e0b6bc5..a8fba83 100644
--- a/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customTargets.xml
+++ b/eclipse/plugins/org.eclipse.pde.build/templates/headless-build/customTargets.xml
@@ -1,4 +1,4 @@
-<project name="Build specific targets and properties" default="noDefault">
+<project name="customTargets.template" default="noDefault">
 
 	<!-- ===================================================================== -->
 	<!-- Run a given ${target} on all elements being built -->
diff --git a/eclipse/plugins/org.eclipse.pde.build/templates/packager/packager.properties b/eclipse/plugins/org.eclipse.pde.build/templates/packager/packager.properties
index 84aa87e..293c593 100644
--- a/eclipse/plugins/org.eclipse.pde.build/templates/packager/packager.properties
+++ b/eclipse/plugins/org.eclipse.pde.build/templates/packager/packager.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2006, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 
 #The directory used as a base for the all process
 baseDirectory = <folder>
diff --git a/eclipse/plugins/org.eclipse.pde.build/templates/packager/packaging.properties b/eclipse/plugins/org.eclipse.pde.build/templates/packager/packaging.properties
index 98ffbb2..be53c51 100644
--- a/eclipse/plugins/org.eclipse.pde.build/templates/packager/packaging.properties
+++ b/eclipse/plugins/org.eclipse.pde.build/templates/packager/packaging.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c)  2006 IBM Corporation and others.
+# Copyright (c) 2006, 2007 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.core/.options b/eclipse/plugins/org.eclipse.pde.core/.options
index c676c4e..9acdbfb 100644
--- a/eclipse/plugins/org.eclipse.pde.core/.options
+++ b/eclipse/plugins/org.eclipse.pde.core/.options
@@ -2,4 +2,5 @@
 org.eclipse.pde.core/debug=true
 org.eclipse.pde.core/cache=false
 org.eclipse.pde.core/classpath=false
-org.eclipse.pde.core/validation=false
\ No newline at end of file
+org.eclipse.pde.core/validation=false
+org.eclipse.pde.core/target/profile=false
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.pde.core/.settings/org.eclipse.jdt.launching.prefs
index bde23db..9efd017 100644
--- a/eclipse/plugins/org.eclipse.pde.core/.settings/org.eclipse.jdt.launching.prefs
+++ b/eclipse/plugins/org.eclipse.pde.core/.settings/org.eclipse.jdt.launching.prefs
@@ -1,3 +1,3 @@
-#Mon Oct 13 14:37:28 CDT 2008
+#Wed Feb 02 16:44:07 CET 2011
 eclipse.preferences.version=1
-org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF
index 589d6da..3016f00 100644
--- a/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.pde.core; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.pde.internal.core.PDECore
 Bundle-Vendor: %provider-name
 Bundle-Localization: plugin
@@ -11,7 +11,12 @@ Export-Package:
  org.eclipse.pde.core.build,
  org.eclipse.pde.core.plugin,
  org.eclipse.pde.core.project,
- org.eclipse.pde.internal.core;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.runtime,org.eclipse.pde.launching",
+ org.eclipse.pde.internal.core;
+  x-friends:="org.eclipse.pde.ui,
+   org.eclipse.pde.runtime,
+   org.eclipse.pde.launching,
+   org.eclipse.pde.api.tools.ui,
+   org.eclipse.pde.api.tools",
  org.eclipse.pde.internal.core.build;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.builders;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.launching",
  org.eclipse.pde.internal.core.bundle;x-friends:="org.eclipse.pde.ui",
@@ -19,10 +24,8 @@ Export-Package:
  org.eclipse.pde.internal.core.converter;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.exports;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.feature;x-friends:="org.eclipse.pde.ui",
- org.eclipse.pde.internal.core.ibundle;x-friends:="org.eclipse.pde.ui",
+ org.eclipse.pde.internal.core.ibundle;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.internal.core.ifeature;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.launching",
- org.eclipse.pde.internal.core.importing;x-friends:="org.eclipse.pde.ui",
- org.eclipse.pde.internal.core.importing.provisional;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.iproduct;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.ischema;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.isite;x-friends:="org.eclipse.pde.ui",
@@ -33,8 +36,12 @@ Export-Package:
  org.eclipse.pde.internal.core.schema;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.search;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.site;x-friends:="org.eclipse.pde.ui",
- org.eclipse.pde.internal.core.target;x-friends:="org.eclipse.pde.ui",
- org.eclipse.pde.internal.core.target.provisional;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.api.tools.ui,org.eclipse.pde.launching",
+ org.eclipse.pde.internal.core.target;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.api.tools",
+ org.eclipse.pde.internal.core.target.provisional;
+  x-friends:="org.eclipse.pde.ui,
+   org.eclipse.pde.api.tools.ui,
+   org.eclipse.pde.launching,
+   org.eclipse.pde.api.tools",
  org.eclipse.pde.internal.core.text;
   x-friends:="org.eclipse.pde.ui,
    org.eclipse.pde.ds.core,
@@ -42,7 +49,7 @@ Export-Package:
    org.eclipse.pde.ds.ui,
    org.eclipse.pde.ua.ui",
  org.eclipse.pde.internal.core.text.build;x-friends:="org.eclipse.pde.ui",
- org.eclipse.pde.internal.core.text.bundle;x-friends:="org.eclipse.pde.ui",
+ org.eclipse.pde.internal.core.text.bundle;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.internal.core.text.plugin;x-friends:="org.eclipse.pde.ui",
  org.eclipse.pde.internal.core.util;x-friends:="org.eclipse.pde.ui,org.eclipse.pde.ua.ui,org.eclipse.pde.launching",
  org.eclipse.pde.internal.core.variables;x-internal:=true
diff --git a/eclipse/plugins/org.eclipse.pde.core/META-INF/eclipse.inf b/eclipse/plugins/org.eclipse.pde.core/META-INF/eclipse.inf
new file mode 100644
index 0000000..0d4f4da
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.core/META-INF/eclipse.inf
@@ -0,0 +1 @@
+jarprocessor.exclude.children=true
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.core/plugin.properties b/eclipse/plugins/org.eclipse.pde.core/plugin.properties
index bd102fd..9c38996 100644
--- a/eclipse/plugins/org.eclipse.pde.core/plugin.properties
+++ b/eclipse/plugins/org.eclipse.pde.core/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,9 +18,6 @@ provider-name = Eclipse.org
 expoint.source.name = Code Source Locations
 expoint.javadoc.name = Javadoc Locations
 expoint.target.name = Target Profiles
-expoint.bundleImporters.name = Bundle Importers
-
-bundleImporter.cvs = CVS Bundle Importer
 
 target.name.0 = Base RCP (with Source)
 target.name.1 = Base RCP (Binary Only)
diff --git a/eclipse/plugins/org.eclipse.pde.core/plugin.xml b/eclipse/plugins/org.eclipse.pde.core/plugin.xml
index 9819d4b..d68941c 100644
--- a/eclipse/plugins/org.eclipse.pde.core/plugin.xml
+++ b/eclipse/plugins/org.eclipse.pde.core/plugin.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?><!--
-     Copyright (c) 2005, 2010 IBM Corporation and others.
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -15,8 +15,6 @@
      <extension-point id="source" name="%expoint.source.name" schema="schema/source.exsd"/>
      <extension-point id="javadoc" name="%expoint.javadoc.name" schema="schema/javadoc.exsd"/>
      <extension-point id="targets" name="%expoint.target.name" schema="schema/targets.exsd"/>
-     <extension-point id="bundleImporters" name="%expoint.bundleImporters.name" schema="schema/bundleImporters.exsd"/>
-
    <extension
          point="org.eclipse.jdt.core.classpathVariableInitializer">
       <classpathVariableInitializer
@@ -353,13 +351,4 @@
       <factory class="org.eclipse.pde.internal.core.content.DefaultDocumentFactory"
                contentTypeId="org.eclipse.pde.schema"/>
     </extension>
-   <extension
-         point="org.eclipse.pde.core.bundleImporters">
-      <importer
-            class="org.eclipse.pde.internal.core.importing.CvsBundleImporterDelegate"
-            name="%bundleImporter.cvs"
-            id="org.eclipse.pde.core.cvs.importer">
-      </importer>
-   </extension>
-   
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.pde.core/schema/bundleImporters.exsd b/eclipse/plugins/org.eclipse.pde.core/schema/bundleImporters.exsd
deleted file mode 100644
index 8b5e9c3..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/schema/bundleImporters.exsd
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.pde.core" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.pde.core" id="bundleImporters" name="Bundle Importers"/>
-      </appInfo>
-      <documentation>
-         <strong>EXPERIMENTAL</strong>. This extension point has been added as part of a work in progress. There is no guarantee that this API will work or that it will remain the same in future releases. Please do not use this API without consulting with the PDE team.
-<p>
-A bundle importer is capable of creating a project in the workspace based on a bundle manifest. For example, the CVS bundle importer leverages the 'Eclipse-SourceReferences' header to import projects from CVS.
-</p>
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appInfo>
-            <meta.element internal="true" />
-         </appInfo>
-      </annotation>
-      <complexType>
-         <sequence minOccurs="1" maxOccurs="unbounded">
-            <element ref="importer"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="importer">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  Fully qualified name of a Java class providing an implementation of <code>org.eclipse.pde.internal.core.importing.provisional.IBundleImporterDelegate</code> for this handler.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.pde.internal.core.importing.provisional.IBundleImporterDelegate"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  Unique identifier for this project factory extension.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="description" type="string">
-            <annotation>
-               <documentation>
-                  A short description of this importer suitable for display to the end user.
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The name of this bundle importer, suitable for display to an end user.
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         3.6
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         The following is an example of a bundle importer extension.
-
-<p>
-<pre>
- <extension point="org.eclipse.pde.core.bundleImporters">
-  <importer
-   id="com.example.ExampleIdentifier"
-   class="com.example.ExampleBundleImporter">
-  </importer>
- </extension>
-</pre>
-</p>
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiinfo"/>
-      </appInfo>
-      <documentation>
-         Value of a importer's <b>class</b> attribute must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.pde.internal.core.importing.provisional.IBundleImporterDelegate</b>.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         PDE provides a bundle importer extension capable of importing projects from CVS referenced by 'Eclipse-SourceReferences' headers.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2010 IBM Corporation and others.
-<br>
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which 
-accompanies this distribution, and is available at 
-<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IPluginModelBase.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IPluginModelBase.java
index 1ec8a9a..3211573 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IPluginModelBase.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IPluginModelBase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,8 +51,12 @@ public interface IPluginModelBase extends ISharedExtensionsModel, IModelChangePr
 	/**
 	 * Returns an associated build.properties model
 	 * that works in conjunction with this model.
-	 *
-	 * @return the matching plugin.jars model
+	 * <p>
+	 * This method always returns <code>null</code>
+	 * </p>
+	 * @return <code>null</code>
+	 * @deprecated This method has always returned <code>null</code>. 
+	 *   Since 3.7, use {@link PluginRegistry#createBuildModel(IPluginModelBase)} instead.
 	 */
 	IBuildModel getBuildModel();
 
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java
index d8bdd98..a9c7fbd 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java
@@ -12,10 +12,15 @@ package org.eclipse.pde.core.plugin;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.pde.core.build.IBuildModel;
 import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.build.WorkspaceBuildModel;
+import org.eclipse.pde.internal.core.project.PDEProject;
 import org.eclipse.pde.internal.core.util.VersionUtil;
 import org.osgi.framework.Version;
 
@@ -388,4 +393,28 @@ public class PluginRegistry {
 		}
 		return (IPluginModelBase[]) results.toArray(new IPluginModelBase[results.size()]);
 	}
+
+	/**
+	 * Creates and returns a model associated with the <code>build.properties</code> of a bundle
+	 * in the workspace or <code>null</code> if none.
+	 * 
+	 * @param model plug-in model base
+	 * @return a build model initialized from the plug-in's <code>build.properties</code> or
+	 *  <code>null</code> if none. Returns <code>null</code> for external plug-in models (i.e.
+	 *  models that are not based on workspace projects).
+	 *  @exception CoreException if unable to create a build model
+	 * @since 3.7
+	 */
+	public static IBuildModel createBuildModel(IPluginModelBase model) throws CoreException {
+		IProject project = model.getUnderlyingResource().getProject();
+		if (project != null) {
+			IFile buildFile = PDEProject.getBuildProperties(project);
+			if (buildFile.exists()) {
+				IBuildModel buildModel = new WorkspaceBuildModel(buildFile);
+				buildModel.load();
+				return buildModel;
+			}
+		}
+		return null;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java
index a83c0b2..319d623 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectDescription.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,11 @@ public interface IBundleProjectDescription {
 	 * Identifies bundles developed for Eclipse 3.6, value is <code>"3.6"</code>.
 	 */
 	public static final String VERSION_3_6 = ICoreConstants.TARGET36;
-
+	/**
+	 * Identifies bundles developed for Eclipse 3.7, value is <code>"3.7"</code>.
+	 * @since 3.7
+	 */
+	public static final String VERSION_3_7 = ICoreConstants.TARGET37;
 	/**
 	 * Constant for the PDE Plug-in project nature, value is <code>"org.eclipse.pde.PluginNature"</code>.
 	 */
@@ -295,15 +299,27 @@ public interface IBundleProjectDescription {
 	 * is specified, no Bundle-Classpath header will be produced.
 	 * 
 	 * @param entries Bundle-Classpath header entries or <code>null</code>
+	 * @deprecated use {@link #setBundleClasspath(IBundleClasspathEntry[])}
 	 */
 	public void setBundleClassath(IBundleClasspathEntry[] entries);
 
 	/**
+	 * Sets the entries for the Bundle-Classpath header of the described bundle,
+	 * or <code>null</code> if unspecified. Specifies the relationship between
+	 * source and/or binary folders with bundle classpath entries. When <code>null</code>
+	 * is specified, no Bundle-Classpath header will be produced.
+	 * 
+	 * @param entries Bundle-Classpath header entries or <code>null</code>
+	 * @since 3.7
+	 */
+	public void setBundleClasspath(IBundleClasspathEntry[] entries);
+
+	/**
 	 * Returns the entries on the Bundle-Classpath header of the described bundle,
 	 * or <code>null</code> if unspecified.
 	 * 
 	 * @return bundle class path entries or <code>null</code> if unspecified
-	 * @see #setBundleClassath(IBundleClasspathEntry[])
+	 * @see #setBundleClasspath(IBundleClasspathEntry[])
 	 */
 	public IBundleClasspathEntry[] getBundleClasspath();
 
@@ -325,7 +341,7 @@ public interface IBundleProjectDescription {
 
 	/**
 	 * Sets the version of Eclipse the described bundle is to targeted for.
-	 * This effects the values generated for Equinox specific headers.
+	 * This affects the values generated for Equinox specific headers.
 	 * Has no effect when {@link #isEquinox()} is <code>false</code>.
 	 * When {@link #isEquinox()} is <code>true</code>, and a target version
 	 * is unspecified, the newest available target version of Eclipse is
@@ -372,7 +388,7 @@ public interface IBundleProjectDescription {
 
 	/**
 	 * Returns whether the described bundle is targeted for the Equinox OSGi framework.
-	 * Effects the Equinox lazy-start header generated in the manifest.
+	 * Affects the Equinox lazy-start header generated in the manifest.
 	 * 
 	 * @return whether the described bundle is targeted for the Equinox OSGi framework
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleManifestSourceLocationManager.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleManifestSourceLocationManager.java
index 16bdccf..74185dc 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleManifestSourceLocationManager.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleManifestSourceLocationManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2009 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -213,7 +213,8 @@ public class BundleManifestSourceLocationManager {
 									try {
 										version = new Version(versionEntry);
 									} catch (IllegalArgumentException e) {
-										PDECore.log(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, PDECoreMessages.SourceLocationManager_problemProcessingBundleManifestSourceHeader, e));
+										PDECore.log(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(PDECoreMessages.SourceLocationManager_problemProcessingBundleManifestSourceHeader, new Object[] {currentPlugin.getName(), versionEntry, path.toString()}), e));
+
 									}
 									fPluginToSourceBundle.put(new SourceLocationKey(binaryPluginName, version), externalModels[i]);
 								} else {
@@ -226,5 +227,4 @@ public class BundleManifestSourceLocationManager {
 			}
 		}
 	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleValidationOperation.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleValidationOperation.java
index 3607161..d0c5fcd 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleValidationOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/BundleValidationOperation.java
@@ -51,18 +51,23 @@ public class BundleValidationOperation implements IWorkspaceRunnable {
 	}
 
 	public Map getResolverErrors() {
+		Set alreadyDuplicated = new HashSet();
 		Map map = new HashMap();
 		BundleDescription[] bundles = fState.getBundles();
 		for (int i = 0; i < bundles.length; i++) {
 			BundleDescription desc = bundles[i];
 			if (!desc.isResolved()) {
 				map.put(desc, fState.getResolverErrors(desc));
-			} else if (desc.isSingleton()) {
+			} else if (desc.isSingleton() && !alreadyDuplicated.contains(desc.getSymbolicName())) {
 				BundleDescription[] dups = fState.getBundles(desc.getSymbolicName());
 				if (dups.length > 1) {
 					// more than 1 singleton present
-					IStatus errorStatus = new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(PDECoreMessages.BundleValidationOperation_multiple_singletons, new String[] {Integer.toString(dups.length), desc.getSymbolicName()}));
-					map.put(desc, new Object[] {errorStatus});
+					alreadyDuplicated.add(desc.getSymbolicName());
+					MultiStatus status = new MultiStatus(PDECore.PLUGIN_ID, 0, NLS.bind(PDECoreMessages.BundleValidationOperation_multiple_singletons, new String[] {Integer.toString(dups.length), desc.getSymbolicName()}), null);
+					for (int j = 0; j < dups.length; j++) {
+						status.add(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, dups[j].getLocation()));
+					}
+					map.put(desc, new Object[] {status});
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java
index 0658ee7..613fee4 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -251,7 +251,8 @@ public class ClasspathHelper {
 			if (project.hasNature(JavaCore.NATURE_ID)) {
 				Map classpathMap = getClasspathMap(project, checkExcluded, !base.getId().equals(PDECore.getDefault().getModelManager().getSystemBundleId()), false);
 				IFile file = PDEProject.getBuildProperties(project);
-				boolean searchBuild = file.exists();
+				IPath filePath = file.getLocation();
+				boolean searchBuild = filePath != null && filePath.toFile().exists();
 				if (searchBuild) {
 					WorkspaceBuildModel bModel = new WorkspaceBuildModel(file);
 					IBuild build = bModel.getBuild();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathUtilCore.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathUtilCore.java
index e26908d..d1348ce 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathUtilCore.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathUtilCore.java
@@ -12,7 +12,7 @@ package org.eclipse.pde.internal.core;
 
 import java.io.File;
 import java.util.ArrayList;
-import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.*;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.JavaCore;
@@ -20,13 +20,11 @@ import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.pde.core.build.IBuild;
 import org.eclipse.pde.core.build.IBuildModel;
 import org.eclipse.pde.core.plugin.*;
-import org.eclipse.pde.internal.core.build.WorkspaceBuildModel;
 import org.eclipse.pde.internal.core.bundle.BundleFragment;
 import org.eclipse.pde.internal.core.bundle.BundlePlugin;
 import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
 import org.eclipse.pde.internal.core.plugin.*;
 import org.eclipse.pde.internal.core.plugin.Plugin;
-import org.eclipse.pde.internal.core.project.PDEProject;
 
 public class ClasspathUtilCore {
 
@@ -193,15 +191,7 @@ public class ClasspathUtilCore {
 	}
 
 	public static IBuild getBuild(IPluginModelBase model) throws CoreException {
-		IBuildModel buildModel = model.getBuildModel();
-		if (buildModel == null) {
-			IProject project = model.getUnderlyingResource().getProject();
-			IFile buildFile = PDEProject.getBuildProperties(project);
-			if (buildFile.exists()) {
-				buildModel = new WorkspaceBuildModel(buildFile);
-				buildModel.load();
-			}
-		}
+		IBuildModel buildModel = PluginRegistry.createBuildModel(model);
 		return (buildModel != null) ? buildModel.getBuild() : null;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java
index 40e5c4a..b678e18 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ExternalModelManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,18 +10,25 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.core;
 
-import java.io.File;
+import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.*;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.pde.core.plugin.IPluginLibrary;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.internal.core.target.AbstractTargetHandle;
+import org.eclipse.pde.internal.core.target.P2TargetUtils;
 import org.eclipse.pde.internal.core.target.provisional.NameVersionDescriptor;
+import org.eclipse.pde.internal.core.util.CoreUtility;
 
 public class ExternalModelManager extends AbstractModelManager {
 
 	private IPluginModelBase[] fModels = new IPluginModelBase[0];
+	private ExternalLibraryCache fLibCache = new ExternalLibraryCache();
 
 	protected IPluginModelBase[] getAllModels() {
 		return fModels;
@@ -63,10 +70,12 @@ public class ExternalModelManager extends AbstractModelManager {
 				}
 			}
 		}
+		fLibCache.cleanExtractedLibraries(fModels);
 	}
 
 	public void setModels(IPluginModelBase[] models) {
 		fModels = models;
+		fLibCache.cleanExtractedLibraries(fModels);
 	}
 
 	/**
@@ -81,7 +90,7 @@ public class ExternalModelManager extends AbstractModelManager {
 		boolean addPool = false;
 		String baseLocation = pref.getString(ICoreConstants.PLATFORM_PATH);
 		URL[] base = null;
-		if (AbstractTargetHandle.BUNDLE_POOL.isPrefixOf(new Path(baseLocation))) {
+		if (P2TargetUtils.BUNDLE_POOL.isPrefixOf(new Path(baseLocation))) {
 			// if the base platform path is part of the bundle pool, use the bundle pool
 			// preference info to restore bundles selectively
 			addPool = true;
@@ -99,7 +108,7 @@ public class ExternalModelManager extends AbstractModelManager {
 		List extraLocations = new ArrayList(tokenizer.countTokens());
 		while (tokenizer.hasMoreTokens()) {
 			String location = tokenizer.nextToken();
-			if (AbstractTargetHandle.BUNDLE_POOL.isPrefixOf(new Path(location))) {
+			if (P2TargetUtils.BUNDLE_POOL.isPrefixOf(new Path(location))) {
 				addPool = true;
 			} else {
 				File dir = new File(location, "plugins"); //$NON-NLS-1$
@@ -123,7 +132,7 @@ public class ExternalModelManager extends AbstractModelManager {
 					while (tokenizer.hasMoreTokens()) {
 						String fileName = tokenizer.nextToken();
 						try {
-							urls.add(AbstractTargetHandle.BUNDLE_POOL.append("plugins").append(fileName).toFile().toURL()); //$NON-NLS-1$
+							urls.add(P2TargetUtils.BUNDLE_POOL.append("plugins").append(fileName).toFile().toURL()); //$NON-NLS-1$
 						} catch (MalformedURLException e) {
 							PDECore.log(e);
 						}
@@ -137,6 +146,27 @@ public class ExternalModelManager extends AbstractModelManager {
 		return result;
 	}
 
+	/**
+	 * Returns all libraries extracted from an external jarred plug-in.  Will return an empty
+	 * array if the plug-in is not jarred or if no jarred libraries exist inside it.
+	 * <p>
+	 * Previously cached libraries will be returned.  Any libraries not found in the cache will
+	 * extracted from the plug-in and placed in PDE's metadata location.
+	 * </p>
+	 * @param model model to get the libraries for
+	 * @return all extracted libraries or an empty array
+	 */
+	public File[] getExtractedLibraries(IPluginModelBase model) {
+		return fLibCache.getExtractedLibraries(model);
+	}
+
+	/**
+	 * Appends one {@link URL} to another
+	 * 
+	 * @param base first URL
+	 * @param additional second URL
+	 * @return a URL with the additional URL appended to the base
+	 */
 	private URL[] append(URL[] base, URL[] additional) {
 		if (additional.length == 0) {
 			return base;
@@ -146,4 +176,163 @@ public class ExternalModelManager extends AbstractModelManager {
 		System.arraycopy(additional, 0, result, base.length, additional.length);
 		return result;
 	}
+
+}
+
+/**
+ * When an external model is added to the classpath its libraries as defined by the bundle-classpath
+ * header also need to be added to the classpath for the JDT compiler.  This is handled by the 
+ * {@link PDEClasspathContainer}.  However, because the classpath does not support nested jars, we
+ * must extract any libraries from within a jarred bundle.  This class manages the set of libraries
+ * that we have extracted and deletes them when the list of external models changes.
+ * 
+ * @see PDEClasspathContainer#addExternalPlugin(IPluginModelBase, org.eclipse.pde.internal.core.PDEClasspathContainer.Rule[], ArrayList)
+ * @since 3.7
+ */
+class ExternalLibraryCache {
+
+	/**
+	 * Location inside the PDE metadata area where extracted libraries will be stored.
+	 * Extracted libraries will be stored under a directory named from the plug-in it
+	 * was extracted from.
+	 * <p>
+	 * [workspace]/.metadata/.plugins/org.eclipse.pde.core/.external_libraries/[plugin_name]_[plugin_version]/[library_name].jar
+	 * </p> 
+	 */
+	private static final String LIB_CACHE_DIR = ".external_libraries"; //$NON-NLS-1$
+
+	/**
+	 * Returns all libraries extracted from an external jarred plug-in.  Will return an empty
+	 * array if the plug-in is not jarred or if no jarred libraries exist inside it.
+	 * <p>
+	 * Previously cached libraries will be returned.  Any libraries not found in the cache will
+	 * extracted from the plug-in and placed in PDE's metadata location.
+	 * </p>
+	 * @param model model to get the libraries for
+	 * @return all extracted libraries or an empty array
+	 */
+	public File[] getExtractedLibraries(IPluginModelBase model) {
+		File fJarFile = new File(model.getInstallLocation());
+		if (!fJarFile.isFile())
+			return new File[0];
+
+		BundleDescription desc = model.getBundleDescription();
+		IPluginLibrary[] libs = model.getPluginBase().getLibraries();
+
+		File fCacheDir = new File(getLibraryCacheDir(), getBundleLibsCacheDirName(desc));
+
+		List files = new ArrayList();
+
+		for (int i = 0; i < libs.length; i++) {
+			String libName = libs[i].getName();
+			if (!".".equals(libName)) { //$NON-NLS-1$
+				libName = ClasspathUtilCore.expandLibraryName(libName);
+				File fDestFile = new File(fCacheDir, libName);
+				// assume that an existing file is always valid
+				if (!fDestFile.isFile()) {
+					try {
+						File extractedLib = extractJar(fJarFile, libName, fDestFile);
+						if (extractedLib != null) {
+							files.add(extractedLib);
+						}
+					} catch (IOException ie) {
+						// do not add file, but log error
+						PDECore.logException(ie, "Could not extract library from jarred bundle " + desc.getSymbolicName()); //$NON-NLS-1$
+					}
+				} else
+					files.add(fDestFile);
+			}
+		}
+
+		return (File[]) files.toArray(new File[0]);
+	}
+
+	/**
+	 * Deletes all the cached JARs of libraries which are currently not contained 
+	 * or enabled in the target platform. Will ignore any errors when trying to
+	 * delete a directory.
+	 * 
+	 * @param targetModels The current contents of the target platform.
+	 */
+	public void cleanExtractedLibraries(IPluginModelBase[] targetModels) {
+		File fCacheDir = getLibraryCacheDir();
+		if (!fCacheDir.isDirectory())
+			return;
+
+		// build a list with all potential directory names for quick check
+		Set bundleKeys = new HashSet();
+
+		for (int i = 0; i < targetModels.length; i++) {
+			if (targetModels[i].isEnabled()) {
+				BundleDescription desc = targetModels[i].getBundleDescription();
+				bundleKeys.add(getBundleLibsCacheDirName(desc));
+			}
+		}
+
+		File[] fDirs = fCacheDir.listFiles();
+		for (int i = 0; i < fDirs.length; i++) {
+			if (fDirs[i].isDirectory() && !bundleKeys.contains(fDirs[i].getName()))
+				CoreUtility.deleteContent(fDirs[i]);
+		}
+
+		// Delete the cache folder if it is empty
+		fCacheDir.delete();
+	}
+
+	/**
+	 * @return The directory in the PDE Core's state location where wrapped JARs
+	 * from external bundles are stored.
+	 */
+	private File getLibraryCacheDir() {
+		IPath path = PDECore.getDefault().getStateLocation();
+		return new File(path.toFile(), LIB_CACHE_DIR);
+	}
+
+	/**
+	 * Returns the name of the library cache directory for the given bundle.
+	 * 
+	 * @param desc Bundle descriptor. 
+	 * 
+	 * @return <code>[bundle ID]_[bundle version]</code>
+	 */
+	private String getBundleLibsCacheDirName(BundleDescription desc) {
+		return desc.getSymbolicName() + "_" + desc.getVersion(); //$NON-NLS-1$
+	}
+
+	/**
+	 * Extracts a library from a jarred plug-in to the specified directory.
+	 * 
+	 * @param fJarFile jar file to extract from
+	 * @param libName name of the library to extract
+	 * @param fTargetFile file location to extract the library to
+	 * @return the file where the jar is extracted if successful, <code>null</code> otherwise.
+	 * @throws IOException
+	 */
+	private File extractJar(File fJarFile, String libName, File fTargetFile) throws IOException {
+		JarFile f = new JarFile(fJarFile);
+		InputStream in = null;
+		try {
+			ZipEntry libEntry = f.getEntry(libName);
+			if (libEntry == null) {
+				return null;
+			}
+			fTargetFile.getParentFile().mkdirs();
+			in = f.getInputStream(libEntry);
+			if (in == null)
+				throw new IOException();
+
+			CoreUtility.readFile(in, fTargetFile);
+			return fTargetFile;
+		} finally {
+			try {
+				f.close();
+			} catch (Exception e) {
+			}
+			try {
+				in.close();
+			} catch (Exception e) {
+			}
+		}
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java
index 09c4379..f30e8af 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,6 +110,7 @@ public interface ICoreConstants {
 	public final static String TARGET34 = "3.4"; //$NON-NLS-1$
 	public final static String TARGET35 = "3.5"; //$NON-NLS-1$
 	public final static String TARGET36 = "3.6"; //$NON-NLS-1$
+	public final static String TARGET37 = "3.7"; //$NON-NLS-1$
 
 	public final static String EQUINOX = "Equinox"; //$NON-NLS-1$
 
@@ -230,4 +231,10 @@ public interface ICoreConstants {
 	 * Explicit setting when the user chooses no target for the workspace.
 	 */
 	public static final String NO_TARGET = "NO_TARGET"; //$NON-NLS-1$
+
+	/**
+	 * Constant representing the value for UTF-8 encoding.
+	 * Value is: <code>UTF-8</code>
+	 */
+	public static final String UTF_8 = "UTF-8"; //$NON-NLS-1$ 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
index 46925f8..3a9b5a4 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
@@ -26,8 +26,7 @@ import org.eclipse.equinox.p2.metadata.VersionRange;
 import org.eclipse.equinox.p2.planner.ProfileInclusionRules;
 import org.eclipse.equinox.simpleconfigurator.manipulator.SimpleConfiguratorManipulator;
 import org.eclipse.osgi.service.resolver.*;
-import org.eclipse.pde.core.plugin.IPluginBase;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.internal.build.BundleHelper;
 import org.eclipse.pde.internal.core.plugin.PluginBase;
 import org.osgi.framework.Constants;
@@ -376,8 +375,13 @@ public class P2Utils {
 
 		// Create the profile
 		IProfile profile = null;
-		Properties props = new Properties();
+		Map props = new HashMap();
 //		props.setProperty(IProfile.PROP_INSTALL_FOLDER, registryArea.getAbsolutePath());
+		props.put(IProfile.PROP_INSTALL_FEATURES, Boolean.TRUE.toString());
+		// Set up environment and nationalization properties so OS specific fragments are installed
+		props.put(IProfile.PROP_ENVIRONMENTS, generateEnvironmentProperties());
+		props.put(IProfile.PROP_NL, TargetPlatform.getNL());
+
 		profile = registry.addProfile(profileID, props);
 
 		// Create metadata for the bundles
@@ -406,6 +410,24 @@ public class P2Utils {
 	}
 
 	/**
+	 * Generates the environment properties string for the self hosting p2 profile by looking up the current target platform properties.
+	 *
+	 * @return environment properties string
+	 */
+	private static String generateEnvironmentProperties() {
+		StringBuffer env = new StringBuffer();
+		env.append("osgi.ws="); //$NON-NLS-1$
+		env.append(TargetPlatform.getWS());
+		env.append(","); //$NON-NLS-1$
+		env.append("osgi.os="); //$NON-NLS-1$
+		env.append(TargetPlatform.getOS());
+		env.append(","); //$NON-NLS-1$
+		env.append("osgi.arch="); //$NON-NLS-1$
+		env.append(TargetPlatform.getOSArch());
+		return env.toString();
+	}
+
+	/**
 	 * Creates an installable unit from a bundle description
 	 * 
 	 * @param bd bundle description to create metadata for
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEAuxiliaryState.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEAuxiliaryState.java
index 2d15ff5..470afd7 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEAuxiliaryState.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEAuxiliaryState.java
@@ -265,6 +265,17 @@ public class PDEAuxiliaryState {
 	}
 
 	/**
+	 * Returns whether the auxiliary state exists in the given directory.
+	 * 
+	 * @param dir parent directory
+	 * @return whether the state file exist
+	 */
+	protected boolean exists(File dir) {
+		File file = new File(dir, CACHE_EXTENSION);
+		return file.exists() && file.isFile();
+	}
+
+	/**
 	 * Writes out auxiliary information from the given models to an xml file
 	 * in the given destination directory.
 	 * @param models models to collect information from
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEClasspathContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEClasspathContainer.java
index b6c10d8..1e3251d 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEClasspathContainer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEClasspathContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -67,6 +67,13 @@ public class PDEClasspathContainer {
 			if (srcPath == null)
 				srcPath = new Path(model.getInstallLocation());
 			addLibraryEntry(new Path(model.getInstallLocation()), srcPath, rules, getClasspathAttributes(model), entries);
+
+			// If the jarred plugin contains any jarred libraries they must be extracted as the compiler can't handle nested jar files
+			File[] extractedLibraries = PDECore.getDefault().getModelManager().getExternalModelManager().getExtractedLibraries(model);
+			for (int i = 0; i < extractedLibraries.length; i++) {
+				Path path = new Path(extractedLibraries[i].getAbsolutePath());
+				addLibraryEntry(path, path, rules, getClasspathAttributes(model), entries);
+			}
 		} else {
 			IPluginLibrary[] libraries = model.getPluginBase().getLibraries();
 			for (int i = 0; i < libraries.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
index c8c2ea9..2cf46d5 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
@@ -23,6 +23,7 @@ import org.eclipse.pde.internal.core.builders.FeatureRebuilder;
 import org.eclipse.pde.internal.core.builders.PluginRebuilder;
 import org.eclipse.pde.internal.core.project.BundleProjectService;
 import org.eclipse.pde.internal.core.schema.SchemaRegistry;
+import org.eclipse.pde.internal.core.target.P2TargetUtils;
 import org.eclipse.pde.internal.core.target.TargetPlatformService;
 import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
 import org.eclipse.update.configurator.ConfiguratorUtils;
@@ -119,7 +120,6 @@ public class PDECore extends Plugin {
 		log(status);
 	}
 
-	private PluginModelManager fModelManager;
 	private FeatureModelManager fFeatureModelManager;
 
 	private TargetDefinitionManager fTargetProfileManager;
@@ -177,22 +177,16 @@ public class PDECore extends Plugin {
 	}
 
 	public PluginModelManager getModelManager() {
-		if (fModelManager == null) {
-			fModelManager = new PluginModelManager();
-			// when initializing plug-in models, create the extension registry so it can track relevant (ModelChange) events.
-			if (fExtensionRegistry == null)
-				getExtensionsRegistry();
-		}
-		return fModelManager;
+		return PluginModelManager.getInstance();
 	}
 
-	public TargetDefinitionManager getTargetProfileManager() {
+	public synchronized TargetDefinitionManager getTargetProfileManager() {
 		if (fTargetProfileManager == null)
 			fTargetProfileManager = new TargetDefinitionManager();
 		return fTargetProfileManager;
 	}
 
-	public FeatureModelManager getFeatureModelManager() {
+	public synchronized FeatureModelManager getFeatureModelManager() {
 		if (fFeatureModelManager == null)
 			fFeatureModelManager = new FeatureModelManager();
 		return fFeatureModelManager;
@@ -202,38 +196,38 @@ public class PDECore extends Plugin {
 		return fJavaElementChangeListener;
 	}
 
-	public SchemaRegistry getSchemaRegistry() {
+	public synchronized SchemaRegistry getSchemaRegistry() {
 		if (fSchemaRegistry == null)
 			fSchemaRegistry = new SchemaRegistry();
 		return fSchemaRegistry;
 	}
 
-	public PDEExtensionRegistry getExtensionsRegistry() {
+	public synchronized PDEExtensionRegistry getExtensionsRegistry() {
 		if (fExtensionRegistry == null) {
 			fExtensionRegistry = new PDEExtensionRegistry();
 		}
 		return fExtensionRegistry;
 	}
 
-	public SourceLocationManager getSourceLocationManager() {
+	public synchronized SourceLocationManager getSourceLocationManager() {
 		if (fSourceLocationManager == null)
 			fSourceLocationManager = new SourceLocationManager();
 		return fSourceLocationManager;
 	}
 
-	public JavadocLocationManager getJavadocLocationManager() {
+	public synchronized JavadocLocationManager getJavadocLocationManager() {
 		if (fJavadocLocationManager == null)
 			fJavadocLocationManager = new JavadocLocationManager();
 		return fJavadocLocationManager;
 	}
 
-	public TracingOptionsManager getTracingOptionsManager() {
+	public synchronized TracingOptionsManager getTracingOptionsManager() {
 		if (fTracingOptionsManager == null)
 			fTracingOptionsManager = new TracingOptionsManager();
 		return fTracingOptionsManager;
 	}
 
-	public SearchablePluginsManager getSearchablePluginsManager() {
+	public synchronized SearchablePluginsManager getSearchablePluginsManager() {
 		if (fSearchablePluginsManager == null) {
 			fSearchablePluginsManager = new SearchablePluginsManager();
 		}
@@ -241,7 +235,7 @@ public class PDECore extends Plugin {
 	}
 
 	public boolean areModelsInitialized() {
-		return fModelManager != null && fModelManager.isInitialized();
+		return getModelManager().isInitialized();
 	}
 
 	public void start(BundleContext context) throws Exception {
@@ -261,13 +255,11 @@ public class PDECore extends Plugin {
 		// use save participant to clean orphaned profiles.
 		ResourcesPlugin.getWorkspace().addSaveParticipant(PLUGIN_ID, new ISaveParticipant() {
 			public void saving(ISaveContext saveContext) throws CoreException {
-				ITargetPlatformService tps = (ITargetPlatformService) acquireService(ITargetPlatformService.class.getName());
-				if (tps instanceof TargetPlatformService) {
-					((TargetPlatformService) tps).cleanOrphanedTargetDefinitionProfiles();
-				}
+				P2TargetUtils.cleanOrphanedTargetDefinitionProfiles();
 				if (fSearchablePluginsManager != null) {
 					fSearchablePluginsManager.saving(saveContext);
 				}
+				PluginModelManager.saveInstance();
 			}
 
 			public void rollback(ISaveContext saveContext) {
@@ -326,10 +318,9 @@ public class PDECore extends Plugin {
 			fExtensionRegistry.stop();
 			fExtensionRegistry = null;
 		}
-		if (fModelManager != null) {
-			fModelManager.shutdown();
-			fModelManager = null;
-		}
+
+		PluginModelManager.shutdownInstance();
+
 		if (fTargetPlatformService != null) {
 			fTargetPlatformService.unregister();
 			fTargetPlatformService = null;
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEPreferencesManager.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEPreferencesManager.java
index 7f2a2ff..4200485 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEPreferencesManager.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEPreferencesManager.java
@@ -15,7 +15,7 @@ import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChang
 import org.osgi.service.prefs.BackingStoreException;
 
 /**
- * Provides old {@link Preferences} like interface to preferences but uses {@link IEclipsePreferences} instead
+ * Provides old {@link org.eclipse.core.runtime.Preferences} like interface to preferences but uses {@link IEclipsePreferences} instead
  *
  */
 public final class PDEPreferencesManager {
@@ -40,7 +40,7 @@ public final class PDEPreferencesManager {
 	 * given listener argument must not be <code>null</code>.
 	 * 
 	 * @param listener the preference change listener to register
-	 * @see #removePreferenceChangeListener(IPreferenceChangeListener)
+	 * @see #removePreferenceChangeListener(IEclipsePreferences.IPreferenceChangeListener)
 	 * @see IEclipsePreferences.IPreferenceChangeListener
 	 */
 	public void addPreferenceChangeListener(IPreferenceChangeListener listener) {
@@ -64,6 +64,7 @@ public final class PDEPreferencesManager {
 	 *         <code>null</code> if the associated value does not exist in either scope or cannot
 	 *         be interpreted as a <code>boolean</code>.
 	 * @see #setValue(String, boolean)
+	 * @see #setValueOrRemove(String, boolean)
 	 * @see #setDefault(String, boolean)
 	 */
 	public boolean getBoolean(String key) {
@@ -150,6 +151,7 @@ public final class PDEPreferencesManager {
 	 *         <code>0</code> if the associated value does not exist in either scope or cannot
 	 *         be interpreted as an <code>int</code>.
 	 * @see #setValue(String, int)
+	 * @see #setValueOrRemove(String, int)
 	 * @see #setDefault(String, int)
 	 */
 	public int getInt(String key) {
@@ -169,6 +171,7 @@ public final class PDEPreferencesManager {
 	 * @return the value associated with <code>key</code>, or
 	 *         <code>null</code> if the associated value does not exist in either scope.
 	 * @see #setValue(String, String)
+	 * @see #setValueOrRemove(String, String)
 	 * @see #setDefault(String, String)
 	 */
 	public String getString(String key) {
@@ -181,7 +184,7 @@ public final class PDEPreferencesManager {
 	 * effect. The given listener argument must not be <code>null</code>.
 	 * 
 	 * @param listener the preference change listener to remove
-	 * @see #addPreferenceChangeListener(IPreferenceChangeListener)
+	 * @see #addPreferenceChangeListener(IEclipsePreferences.IPreferenceChangeListener)
 	 * @see IEclipsePreferences.IPreferenceChangeListener
 	 */
 	public void removePreferenceChangeListener(IPreferenceChangeListener listener) {
@@ -254,7 +257,7 @@ public final class PDEPreferencesManager {
 	 * 
 	 * @param key <code>key</code> with which the <code>boolean</code> value is to be associated.
 	 * @param value <code>value</code> to be associated with <code>key</code>.
-	 * @see #getBoolean(String,boolean)
+	 * @see #getBoolean(String)
 	 * @see #getDefaultBoolean(String)
 	 * @see #setToDefault(String)
 	 */
@@ -289,4 +292,77 @@ public final class PDEPreferencesManager {
 	public void setValue(String key, String value) {
 		fInstanceScopePrefs.put(key, value);
 	}
+
+	/**
+	 * Associates the specified <code>boolean</code> value with the specified key in the instance scope
+	 * or removes the preference if the value is equal to the value in the default scope.
+	 * <p>
+	 * This method is intended for use in conjunction with the {@link #getBoolean(String)} method.
+	 * 
+	 * @param key <code>key</code> with which the <code>boolean</code> value is to be associated
+	 * @param value <code>value</code> to be associated with <code>key</code>
+	 * @see #getBoolean(String)
+	 * @see #getDefaultBoolean(String)
+	 * @see #setToDefault(String)
+	 */
+	public void setValueOrRemove(String key, boolean value) {
+		if (value == getDefaultBoolean(key)) {
+			fInstanceScopePrefs.remove(key);
+		} else {
+			fInstanceScopePrefs.putBoolean(key, value);
+		}
+	}
+
+	/**
+	 * Associates the specified <code>int</code> value with the specified key in the instance scope
+	 * or removes the preference if the value is equal to the value in the default scope.
+	 * <p>
+	 * This method is intended for use in conjunction with the {@link #getInt(String)} method.
+	 * 
+	 * @param key <code>key</code> with which the <code>int</code> value is to be associated
+	 * @param value <code>value</code> to be associated with <code>key</code>
+	 * @see #getInt(String)
+	 * @see #getDefaultInt(String)
+	 * @see #setToDefault(String)
+	 */
+	public void setValueOrRemove(String key, int value) {
+		if (value == getDefaultInt(key)) {
+			fInstanceScopePrefs.remove(key);
+		} else {
+			fInstanceScopePrefs.putInt(key, value);
+		}
+	}
+
+	/**
+	 * Associates the specified <code>String</code> value with the specified key in the instance scope
+	 * or removes the preference if the value is equal to the value in the default scope.
+	 * <p>
+	 * This method is intended for use in conjunction with the {@link #getString(String)} method.
+	 * 
+	 * @param key <code>key</code> with which the <code>String</code> value is to be associated
+	 * @param value <code>value</code> to be associated with <code>key</code>
+	 * @see #getString(String)
+	 * @see #getDefaultString(String)
+	 * @see #setToDefault(String)
+	 */
+	public void setValueOrRemove(String key, String value) {
+		if (value.equals(getDefaultString(key))) {
+			fInstanceScopePrefs.remove(key);
+		} else {
+			fInstanceScopePrefs.put(key, value);
+		}
+	}
+
+	/**
+	 * Forces any changes in the contents of the instance node and its descendants to
+	 * the persistent store.
+	 * 
+	 * @throws BackingStoreException if this operation cannot be completed due
+	 *         to a failure in the backing store, or inability to communicate
+	 *         with it.
+	 * @see org.osgi.service.prefs.Preferences#flush()
+	 */
+	public void flush() throws BackingStoreException {
+		fInstanceScopePrefs.flush();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDERegistryStrategy.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDERegistryStrategy.java
index 3be4ac8..5da9b35 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDERegistryStrategy.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDERegistryStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,7 @@ import java.io.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import javax.xml.parsers.SAXParserFactory;
-import org.eclipse.core.runtime.IContributor;
-import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.spi.*;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.HostSpecification;
@@ -127,6 +126,13 @@ public class PDERegistryStrategy extends RegistryStrategy {
 		connectListeners();
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#log(org.eclipse.core.runtime.IStatus)
+	 */
+	public void log(IStatus status) {
+		// Because we are at development time, we create markers for registry problems and therefore do not log anything (bug 330648)
+	}
+
 	protected void connectListeners() {
 		// Listen for model changes to register new bundles and unregister removed bundles
 		PluginModelManager manager = PDECore.getDefault().getModelManager();
@@ -235,6 +241,9 @@ public class PDERegistryStrategy extends RegistryStrategy {
 
 	private File getFile(IPluginModelBase base) {
 		String loc = base.getInstallLocation();
+		if (loc == null) {
+			return null;
+		}
 		File file = new File(loc);
 		if (!file.exists())
 			return null;
@@ -291,6 +300,9 @@ public class PDERegistryStrategy extends RegistryStrategy {
 		long timeStamp = 0;
 		for (int i = 0; i < bases.length; i++) {
 			String loc = bases[i].getInstallLocation();
+			if (loc == null)
+				continue;
+
 			File location = new File(loc);
 			if (location.exists()) {
 				if (location.isFile()) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java
index dfdb544..87f3307 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java
@@ -117,15 +117,20 @@ public class PDEState extends MinimalState {
 
 	private void readTargetState(URL[] urls, IProgressMonitor monitor) {
 		fTargetTimestamp = computeTimestamp(urls);
+		if (DEBUG) {
+			System.out.println("Timestamp of " + urls.length + " target URLS: " + fTargetTimestamp); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		File dir = new File(DIR, Long.toString(fTargetTimestamp) + ".target"); //$NON-NLS-1$
 		if ((fState = readStateCache(dir)) == null || !fAuxiliaryState.readPluginInfoCache(dir)) {
+			if (DEBUG) {
+				System.out.println("Creating new state, persisted state did not exist"); //$NON-NLS-1$
+			}
 			createNewTargetState(true, urls, monitor);
-			if (!dir.exists())
-				dir.mkdirs();
-			fAuxiliaryState.savePluginInfo(dir);
 			resolveState(false);
-			saveState(dir);
 		} else {
+			if (DEBUG) {
+				System.out.println("Restored previously persisted state"); //$NON-NLS-1$
+			}
 			// get the system bundle from the State
 			if (fState.getPlatformProperties() != null && fState.getPlatformProperties().length > 0) {
 				String systemBundle = (String) fState.getPlatformProperties()[0].get(ICoreConstants.OSGI_SYSTEM_BUNDLE);
@@ -262,8 +267,18 @@ public class PDEState extends MinimalState {
 	}
 
 	private long computeTimestamp(URL[] urls, long timestamp) {
+		List sorted = new ArrayList(urls.length);
 		for (int i = 0; i < urls.length; i++) {
-			File file = new File(urls[i].getFile());
+			sorted.add(urls[i]);
+		}
+		Collections.sort(sorted, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				return ((URL) o1).toExternalForm().compareTo(((URL) o2).toExternalForm());
+			}
+		});
+		URL[] sortedURLs = (URL[]) sorted.toArray(new URL[sorted.size()]);
+		for (int i = 0; i < sortedURLs.length; i++) {
+			File file = new File(sortedURLs[i].getFile());
 			if (file.exists()) {
 				if (file.isFile()) {
 					timestamp ^= file.lastModified();
@@ -278,7 +293,7 @@ public class PDEState extends MinimalState {
 					if (manifest.exists())
 						timestamp ^= manifest.lastModified();
 				}
-				timestamp ^= file.getAbsolutePath().hashCode();
+				timestamp ^= file.getAbsolutePath().toLowerCase().hashCode();
 			}
 		}
 		return timestamp;
@@ -347,12 +362,59 @@ public class PDEState extends MinimalState {
 		return (IPluginModelBase[]) fWorkspaceModels.toArray(new IPluginModelBase[fWorkspaceModels.size()]);
 	}
 
-	public void shutdown() {
+	/**
+	 * Saves state associated with the external PDE target. 
+	 */
+	public void saveExternalState() {
+		IPluginModelBase[] models = PluginRegistry.getExternalModels();
+		URL[] urls = new URL[models.length];
+		for (int i = 0; i < urls.length; i++) {
+			try {
+				urls[i] = new File(models[i].getInstallLocation()).toURL();
+			} catch (MalformedURLException e) {
+				if (DEBUG) {
+					System.out.println("FAILED to save external state due to MalformedURLException"); //$NON-NLS-1$
+				}
+				return;
+			}
+		}
+		fTargetTimestamp = computeTimestamp(urls);
+		File dir = new File(DIR, Long.toString(fTargetTimestamp) + ".target"); //$NON-NLS-1$
+
+		boolean osgiStateExists = dir.exists() && dir.isDirectory();
+		boolean auxStateExists = fAuxiliaryState.exists(dir);
+		if (!osgiStateExists || !auxStateExists) {
+			if (!dir.exists())
+				dir.mkdirs();
+			if (DEBUG) {
+				System.out.println("Saving external state of " + urls.length + " bundles to: " + dir.getAbsolutePath()); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			State state = stateObjectFactory.createState(false);
+			for (int i = 0; i < models.length; i++) {
+				BundleDescription desc = models[i].getBundleDescription();
+				if (desc != null)
+					state.addBundle(state.getFactory().createBundleDescription(desc));
+			}
+			fAuxiliaryState.savePluginInfo(dir);
+			saveState(state, dir);
+		} else if (DEBUG) {
+			System.out.println("External state unchanged, save skipped."); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Save state associated with workspace models and deletes persisted
+	 * files associated with other time stamps.
+	 */
+	public void saveWorkspaceState() {
 		IPluginModelBase[] models = PluginRegistry.getWorkspaceModels();
 		long timestamp = 0;
 		if (!"true".equals(System.getProperty("pde.nocache")) && shouldSaveState(models)) { //$NON-NLS-1$ //$NON-NLS-2$
 			timestamp = computeTimestamp(models);
 			File dir = new File(DIR, Long.toString(timestamp) + ".workspace"); //$NON-NLS-1$
+			if (DEBUG) {
+				System.out.println("Saving workspace state to: " + dir.getAbsolutePath()); //$NON-NLS-1$
+			}
 			State state = stateObjectFactory.createState(false);
 			for (int i = 0; i < models.length; i++) {
 				BundleDescription desc = models[i].getBundleDescription();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java
index 3dd9c22..dca5231 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java
@@ -28,6 +28,8 @@ import org.eclipse.pde.internal.core.target.provisional.*;
 
 public class PluginModelManager implements IModelProviderListener {
 
+	private static PluginModelManager fModelManager;
+
 	/**
 	 * Job to update class path containers asynchronously. Avoids blocking the UI thread
 	 * while saving the manifest editor.
@@ -155,7 +157,7 @@ public class PluginModelManager implements IModelProviderListener {
 	 * Initialize the workspace and external (target) model manager
 	 * and add listeners to each one
 	 */
-	public PluginModelManager() {
+	private PluginModelManager() {
 		fWorkspaceManager = new WorkspacePluginModelManager();
 		fExternalManager = new ExternalModelManager();
 		fExternalManager.addModelProviderListener(this);
@@ -163,6 +165,35 @@ public class PluginModelManager implements IModelProviderListener {
 	}
 
 	/**
+	 * Provides the instance of {@link PluginModelManager}. If one doesn't exists already than a new one is created and 
+	 * the workspace and external (target) model manager are initialized with listeners added to each one
+	 */
+	public static synchronized PluginModelManager getInstance() {
+		if (fModelManager == null) {
+			fModelManager = new PluginModelManager();
+		}
+		return fModelManager;
+	}
+
+	/**
+	 * Saves the state of the instance of {@link PluginModelManager} if it exists.
+	 */
+	public static synchronized void saveInstance() {
+		if (fModelManager != null) {
+			fModelManager.save();
+		}
+	}
+
+	/**
+	 * Shuts down the instance of {@link PluginModelManager} if it exists.
+	 */
+	public static synchronized void shutdownInstance() {
+		if (fModelManager != null) {
+			fModelManager.shutdown();
+		}
+	}
+
+	/**
 	 * React to changes in plug-ins in the workspace and/or target
 	 */
 	public void modelsChanged(IModelProviderEvent e) {
@@ -1057,17 +1088,26 @@ public class PluginModelManager implements IModelProviderListener {
 	/**
 	 * Perform cleanup upon shutting down
 	 */
-	public void shutdown() {
+	protected void shutdown() {
 		fWorkspaceManager.shutdown();
 		fExternalManager.shutdown();
-		if (fState != null)
-			fState.shutdown();
+
 		if (fListeners != null)
 			fListeners.clear();
 		if (fStateListeners != null)
 			fStateListeners.clear();
 	}
 
+	/**
+	 * Called as part of save participant. Save's PDE model state.
+	 */
+	protected void save() {
+		if (fState != null) {
+			fState.saveExternalState();
+			fState.saveWorkspaceState();
+		}
+	}
+
 	public void addExtensionDeltaListener(IExtensionDeltaListener listener) {
 		fWorkspaceManager.addExtensionDeltaListener(listener);
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java
index f269c3f..3a8bd60 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -438,18 +438,20 @@ public class RequiredPluginsClasspathContainer extends PDEClasspathContainer imp
 	}
 
 	private void addExtraLibrary(IPath path, IPluginModelBase model, ArrayList entries) {
-		IPath srcPath = null;
-		if (model != null) {
-			IPath shortPath = path.removeFirstSegments(path.matchingFirstSegments(new Path(model.getInstallLocation())));
-			srcPath = ClasspathUtilCore.getSourceAnnotation(model, shortPath.toString());
-		} else {
-			String filename = ClasspathUtilCore.getSourceZipName(path.lastSegment());
-			IPath candidate = path.removeLastSegments(1).append(filename);
-			if (PDECore.getWorkspace().getRoot().getFile(candidate).exists())
-				srcPath = candidate;
+		if (path.segmentCount() > 1) {
+			IPath srcPath = null;
+			if (model != null) {
+				IPath shortPath = path.removeFirstSegments(path.matchingFirstSegments(new Path(model.getInstallLocation())));
+				srcPath = ClasspathUtilCore.getSourceAnnotation(model, shortPath.toString());
+			} else {
+				String filename = ClasspathUtilCore.getSourceZipName(path.lastSegment());
+				IPath candidate = path.removeLastSegments(1).append(filename);
+				if (PDECore.getWorkspace().getRoot().getFile(candidate).exists())
+					srcPath = candidate;
+			}
+			IClasspathEntry clsEntry = JavaCore.newLibraryEntry(path, srcPath, null);
+			if (!entries.contains(clsEntry))
+				entries.add(clsEntry);
 		}
-		IClasspathEntry clsEntry = JavaCore.newLibraryEntry(path, srcPath, null);
-		if (!entries.contains(clsEntry))
-			entries.add(clsEntry);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsInitializer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsInitializer.java
index 20ae573..ec1321f 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsInitializer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,12 +11,8 @@
 package org.eclipse.pde.internal.core;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.jdt.core.ClasspathContainerInitializer;
-import org.eclipse.jdt.core.IClasspathContainer;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.core.runtime.*;
+import org.eclipse.jdt.core.*;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
 
@@ -50,4 +46,29 @@ public class RequiredPluginsInitializer extends ClasspathContainerInitializer {
 	public String getDescription(IPath containerPath, IJavaProject project) {
 		return PDECoreMessages.RequiredPluginsClasspathContainer_description;
 	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#getSourceAttachmentStatus(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public IStatus getSourceAttachmentStatus(IPath containerPath, IJavaProject project) {
+		// Allow custom source attachments for PDE classpath containers (Bug 338182)
+		return Status.OK_STATUS;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#canUpdateClasspathContainer(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
+	 */
+	public boolean canUpdateClasspathContainer(IPath containerPath, IJavaProject project) {
+		// The only supported update is to modify the source attachment
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#requestClasspathContainerUpdate(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathContainer)
+	 */
+	public void requestClasspathContainerUpdate(IPath containerPath, IJavaProject project, IClasspathContainer containerSuggestion) throws CoreException {
+		// The only supported update is to modify the source attachment
+		JavaCore.setClasspathContainer(containerPath, new IJavaProject[] {project}, new IClasspathContainer[] {containerSuggestion}, null);
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
index 480e646..4903a30 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -309,7 +309,7 @@ public class TargetPlatformHelper {
 	public static String getTargetVersionString() {
 		IPluginModelBase model = PluginRegistry.findModel(IPDEBuildConstants.BUNDLE_OSGI);
 		if (model == null)
-			return ICoreConstants.TARGET36;
+			return ICoreConstants.TARGET37;
 
 		String version = model.getPluginBase().getVersion();
 		if (VersionUtil.validateVersion(version).getSeverity() == IStatus.OK) {
@@ -328,8 +328,10 @@ public class TargetPlatformHelper {
 				return ICoreConstants.TARGET34;
 			if (major == 3 && minor == 5)
 				return ICoreConstants.TARGET35;
+			if (major == 3 && minor == 6)
+				return ICoreConstants.TARGET36;
 		}
-		return ICoreConstants.TARGET36;
+		return ICoreConstants.TARGET37;
 	}
 
 	public static double getHostVersion() {
@@ -337,7 +339,7 @@ public class TargetPlatformHelper {
 		Bundle bundle = context.getBundle(0);
 		String version = (String) bundle.getHeaders().get(Constants.BUNDLE_VERSION);
 		if (version == null)
-			return Double.parseDouble(ICoreConstants.TARGET36);
+			return Double.parseDouble(ICoreConstants.TARGET37);
 
 		if (VersionUtil.validateVersion(version).getSeverity() == IStatus.OK) {
 			Version vid = new Version(version);
@@ -355,8 +357,10 @@ public class TargetPlatformHelper {
 				return Double.parseDouble(ICoreConstants.TARGET34);
 			if (major == 3 && minor == 5)
 				return Double.parseDouble(ICoreConstants.TARGET35);
+			if (major == 3 && minor == 6)
+				return Double.parseDouble(ICoreConstants.TARGET36);
 		}
-		return Double.parseDouble(ICoreConstants.TARGET36);
+		return Double.parseDouble(ICoreConstants.TARGET37);
 	}
 
 	public static double getTargetVersion() {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/WorkspacePluginModelManager.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/WorkspacePluginModelManager.java
index 8a2110a..234bcaf 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/WorkspacePluginModelManager.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/WorkspacePluginModelManager.java
@@ -109,20 +109,19 @@ public class WorkspacePluginModelManager extends WorkspaceModelManager {
 		String filename = file.getName();
 		if (file.equals(PDEProject.getOptionsFile(project))) {
 			PDECore.getDefault().getTracingOptionsManager().reset();
-		} else if (filename.endsWith(".properties")) { //$NON-NLS-1$
+		} else if (file.equals(PDEProject.getBuildProperties(project))) {
 			// change in build.properties should trigger a Classpath Update
 			// we therefore fire a notification
 			//TODO this is inefficient.  we could do better.
-			if (file.equals(PDEProject.getBuildProperties(project))) {
-				Object model = getModel(file.getProject());
-				if (model != null)
-					addChange(model, IModelProviderEvent.MODELS_CHANGED);
-			} else {
-				// reset bundle resource if localization file has changed.
-				if (file.equals(PDEProject.getLocalizationFile(file.getProject()))) {
-					IPluginModelBase model = getPluginModel(file.getProject());
-					((AbstractNLModel) model).resetNLResourceHelper();
-				}
+			Object model = getModel(project);
+			if (model != null) {
+				addChange(model, IModelProviderEvent.MODELS_CHANGED);
+			}
+		} else if (file.equals(PDEProject.getLocalizationFile(project))) {
+			// reset bundle resource if localization file has changed.
+			IPluginModelBase model = getPluginModel(project);
+			if (model != null) {
+				((AbstractNLModel) model).resetNLResourceHelper();
 			}
 		} else if (filename.endsWith(".exsd")) { //$NON-NLS-1$
 			handleEclipseSchemaDelta(file, delta);
@@ -195,7 +194,7 @@ public class WorkspacePluginModelManager extends WorkspaceModelManager {
 	private void recreateSchemaPreviewFileContents(File schemaPreviewFile, ISchema schema) throws IOException {
 		SchemaTransformer transformer = new SchemaTransformer();
 		OutputStream os = new FileOutputStream(schemaPreviewFile);
-		PrintWriter printWriter = new PrintWriter(os, true);
+		PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(os, ICoreConstants.UTF_8), true);
 		transformer.transform(schema, printWriter);
 		os.flush();
 		os.close();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BuildErrorReporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BuildErrorReporter.java
index 0e31467..c8e7ef8 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BuildErrorReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BuildErrorReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,8 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 		String fCategory;
 		int fFixId;
 		int fSeverity;
+		HashMap attributes;
+		int fExtraBuntryEntryIndex;
 
 		BuildProblem(String name, String token, String message, int fixId, int severity, String category) {
 			fEntryName = name;
@@ -71,6 +73,7 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 			fFixId = fixId;
 			fSeverity = severity;
 			fCategory = category;
+			fExtraBuntryEntryIndex = 0;
 		}
 
 		public boolean equals(Object obj) {
@@ -85,6 +88,24 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 				return false;
 			return true;
 		}
+
+		public void addExtraBuildEntryTokenAttribute(String entry, String value) {
+			addAttribute(PDEMarkerFactory.BK_BUILD_ENTRY + '.' + fExtraBuntryEntryIndex, entry);
+			addAttribute(PDEMarkerFactory.BK_BUILD_TOKEN + '.' + fExtraBuntryEntryIndex, value);
+			fExtraBuntryEntryIndex++;
+		}
+
+		public void addAttribute(String attributeName, String value) {
+			if (attributes == null)
+				attributes = new HashMap(1);
+			attributes.put(attributeName, value);
+		}
+
+		public void addAttributes(HashMap attributes) {
+			if (attributes == null)
+				attributes = new HashMap(1);
+			attributes.putAll(attributes);
+		}
 	}
 
 	class WildcardFilenameFilter implements FilenameFilter {
@@ -227,7 +248,7 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 			if (jp.exists()) {
 				IClasspathEntry[] cpes = jp.getRawClasspath();
 				validateMissingLibraries(sourceEntryKeys, cpes);
-				validateSourceEntries(sourceEntries, cpes);
+				validateSourceEntries(sourceEntries, srcExcludes, cpes);
 				SourceEntryErrorReporter srcEntryErrReporter = new SourceEntryErrorReporter(fFile, build);
 				srcEntryErrReporter.initialize(sourceEntries, outputEntries, cpes, fProject);
 				srcEntryErrReporter.validate();
@@ -317,8 +338,8 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 				//PDE Build uses top most entry to build the plug-in
 				String execEnv = execEnvs[0];
 
-				String projectSourceCompatibility = project.getOption(JavaCore.COMPILER_SOURCE, false);
-				String projectClassCompatibility = project.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, false);
+				String projectSourceCompatibility = project.getOption(JavaCore.COMPILER_SOURCE, true);
+				String projectClassCompatibility = project.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true);
 				if (projectComplianceLevel.equals(findMatchingEE(projectSourceCompatibility, projectClassCompatibility, false)) && execEnv.equals(findMatchingEE(projectSourceCompatibility, projectClassCompatibility, true))) {
 					return; //The project compliance settings matches the BREE
 				}
@@ -506,25 +527,25 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 	private String findMatchingEE(String srcCompatibility, String clsCompatibility, boolean ee) {
 		String executionEnv = null;
 		String complaince = null;
-		if (srcCompatibility.equals(JavaCore.VERSION_1_1) && clsCompatibility.equals(JavaCore.VERSION_1_1)) {
+		if (JavaCore.VERSION_1_1.equals(srcCompatibility) && JavaCore.VERSION_1_1.equals(clsCompatibility)) {
 			executionEnv = JRE_1_1;
 			complaince = JavaCore.VERSION_1_1;
-		} else if (srcCompatibility.equals(JavaCore.VERSION_1_2) && clsCompatibility.equals(JavaCore.VERSION_1_1)) {
+		} else if (JavaCore.VERSION_1_2.equals(srcCompatibility) && JavaCore.VERSION_1_1.equals(clsCompatibility)) {
 			executionEnv = J2SE_1_2;
 			complaince = JavaCore.VERSION_1_2;
-		} else if (srcCompatibility.equals(JavaCore.VERSION_1_3) && clsCompatibility.equals(JavaCore.VERSION_1_1)) {
+		} else if (JavaCore.VERSION_1_3.equals(srcCompatibility) && JavaCore.VERSION_1_1.equals(clsCompatibility)) {
 			executionEnv = J2SE_1_3;
 			complaince = JavaCore.VERSION_1_3;
-		} else if (srcCompatibility.equals(JavaCore.VERSION_1_3) && clsCompatibility.equals(JavaCore.VERSION_1_2)) {
+		} else if (JavaCore.VERSION_1_3.equals(srcCompatibility) && JavaCore.VERSION_1_2.equals(clsCompatibility)) {
 			executionEnv = J2SE_1_4;
 			complaince = JavaCore.VERSION_1_4;
-		} else if (srcCompatibility.equals(JavaCore.VERSION_1_5) && clsCompatibility.equals(JavaCore.VERSION_1_5)) {
+		} else if (JavaCore.VERSION_1_5.equals(srcCompatibility) && JavaCore.VERSION_1_5.equals(clsCompatibility)) {
 			executionEnv = J2SE_1_5;
 			complaince = JavaCore.VERSION_1_5;
-		} else if (srcCompatibility.equals(JavaCore.VERSION_1_6) && clsCompatibility.equals(JavaCore.VERSION_1_6)) {
+		} else if (JavaCore.VERSION_1_6.equals(srcCompatibility) && JavaCore.VERSION_1_6.equals(clsCompatibility)) {
 			executionEnv = JavaSE_1_6;
 			complaince = JavaCore.VERSION_1_6;
-		} else if (srcCompatibility.equals(JavaCore.VERSION_1_7) && clsCompatibility.equals(JavaCore.VERSION_1_7)) {
+		} else if (JavaCore.VERSION_1_7.equals(srcCompatibility) && JavaCore.VERSION_1_7.equals(clsCompatibility)) {
 			executionEnv = JavaSE_1_7;
 			complaince = JavaCore.VERSION_1_7;
 		}
@@ -600,7 +621,7 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 		String[] tokens = binIncludes.getTokens();
 		boolean exists = false;
 		for (int i = 0; i < tokens.length; i++) {
-			if (tokens[i].startsWith(key)) {
+			if (key.startsWith(tokens[i])) {
 				exists = true;
 				break;
 			}
@@ -799,10 +820,14 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 		return false;
 	}
 
-	private void validateSourceEntries(ArrayList sourceEntries, IClasspathEntry[] cpes) {
+	private void validateSourceEntries(ArrayList sourceEntries, IBuildEntry srcExcludes, IClasspathEntry[] cpes) {
 		if (sourceEntries == null || sourceEntries.size() == 0)
 			return;
 		String[] unlisted = PDEBuilderHelper.getUnlistedClasspaths(sourceEntries, fProject, cpes);
+		List excludeList = new ArrayList(0);
+		if (srcExcludes != null && srcExcludes.getTokens().length > 0) {
+			excludeList = Arrays.asList(srcExcludes.getTokens());
+		}
 		String name = ((IBuildEntry) sourceEntries.get(0)).getName();
 		String message = PDECoreMessages.BuildErrorReporter_classpathEntryMissing1;
 		if (sourceEntries.size() > 1) {
@@ -810,9 +835,10 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 			message = PDECoreMessages.BuildErrorReporter_classpathEntryMissing;
 		}
 		for (int i = 0; i < unlisted.length; i++) {
-			if (unlisted[i] == null)
-				break;
-			prepareError(name, unlisted[i], NLS.bind(message, unlisted[i], name), PDEMarkerFactory.B_ADDITION, fSrcLibSeverity, PDEMarkerFactory.CAT_OTHER);
+			if (unlisted[i] == null || excludeList.contains(unlisted[i]))
+				continue;
+			BuildProblem error = prepareError(name, unlisted[i], NLS.bind(message, unlisted[i], name), PDEMarkerFactory.B_ADDITION, fSrcLibSeverity, PDEMarkerFactory.CAT_OTHER);
+			error.addExtraBuildEntryTokenAttribute(PROPERTY_SRC_EXCLUDES, unlisted[i]);
 		}
 	}
 
@@ -1033,8 +1059,18 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 				// issue with a particular entry
 				lineNum = getLineNumber(buildEntry, bp.fEntryToken);
 
-			if (lineNum > 0)
-				report(bp.fMessage, lineNum, bp.fFixId, bp.fEntryName, bp.fEntryToken, bp.fSeverity, bp.fCategory);
+			if (lineNum > 0) {
+				IMarker marker = report(bp.fMessage, lineNum, bp.fFixId, bp.fEntryName, bp.fEntryToken, bp.fSeverity, bp.fCategory);
+				if (marker != null && bp.attributes != null) {
+					for (Iterator iterator = bp.attributes.keySet().iterator(); iterator.hasNext();) {
+						String attribute = (String) iterator.next();
+						try {
+							marker.setAttribute(attribute, bp.attributes.get(attribute));
+						} catch (CoreException e) {
+						}
+					}
+				}
+			}
 		}
 	}
 
@@ -1094,29 +1130,46 @@ public class BuildErrorReporter extends ErrorReporter implements IBuildPropertie
 		return 0;
 	}
 
-	protected void prepareError(String name, String token, String message, int fixId, String category) {
-		prepareError(name, token, message, fixId, fBuildSeverity, category);
+	protected BuildProblem prepareError(String name, String token, String message, int fixId, String category) {
+		return prepareError(name, token, message, fixId, fBuildSeverity, category);
 	}
 
-	protected void prepareError(String name, String token, String message, int fixId, int severity, String category) {
+	protected BuildProblem prepareError(String name, String token, String message, int fixId, int severity, String category) {
 		BuildProblem bp = new BuildProblem(name, token, message, fixId, severity, category);
 		for (int i = 0; i < fProblemList.size(); i++) {
 			BuildProblem listed = (BuildProblem) fProblemList.get(i);
-			if (listed.equals(bp))
-				return;
+			if (listed.equals(bp)) {
+				if (bp.attributes != null) {
+					listed.addAttributes(bp.attributes);
+				}
+				return listed;
+			}
 		}
 		fProblemList.add(bp);
+		return bp;
 	}
 
-	private void report(String message, int line, int problemID, String buildEntry, String buildToken, int severity, String category) {
+	/**
+	 * Creates a new marker with the given attributes.  May return <code>null</code> if no marker should be created because of severity level.
+	 * @param message
+	 * @param line
+	 * @param problemID
+	 * @param buildEntry
+	 * @param buildToken
+	 * @param severity
+	 * @param category
+	 * @return a new marker or <code>null</code>
+	 */
+	private IMarker report(String message, int line, int problemID, String buildEntry, String buildToken, int severity, String category) {
 		IMarker marker = report(message, line, severity, problemID, category);
-		if (marker == null)
-			return;
-		try {
-			marker.setAttribute(PDEMarkerFactory.BK_BUILD_ENTRY, buildEntry);
-			marker.setAttribute(PDEMarkerFactory.BK_BUILD_TOKEN, buildToken);
-		} catch (CoreException e) {
+		if (marker != null) {
+			try {
+				marker.setAttribute(PDEMarkerFactory.BK_BUILD_ENTRY, buildEntry);
+				marker.setAttribute(PDEMarkerFactory.BK_BUILD_TOKEN, buildToken);
+			} catch (CoreException e) {
+			}
 		}
+		return marker;
 	}
 
 	public boolean isCustomBuild() {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java
index 4e1f9b4..9ecf7d8 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -323,15 +323,50 @@ public class BundleErrorReporter extends JarManifestErrorReporter {
 		String[] bundleEnvs = desc.getExecutionEnvironments();
 		if (bundleEnvs == null || bundleEnvs.length == 0) {
 			// No EE specified
+			IJavaProject javaProject = JavaCore.create(fProject);
+
+			// See if the project has an EE classpath entry
+			if (javaProject.exists()) {
+				try {
+					IClasspathEntry[] entries = javaProject.getRawClasspath();
+
+					for (int i = 0; i < entries.length; i++) {
+						if (entries[i].getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
+							IPath currentPath = entries[i].getPath();
+							if (JavaRuntime.newDefaultJREContainerPath().matchingFirstSegments(currentPath) > 0) {
+								String eeId = JavaRuntime.getExecutionEnvironmentId(currentPath);
+								if (eeId != null) {
+									IMarker marker = report(PDECoreMessages.BundleErrorReporter_noExecutionEnvironmentSet, 1, sev, PDEMarkerFactory.M_EXECUTION_ENVIRONMENT_NOT_SET, PDEMarkerFactory.CAT_EE);
+									addMarkerAttribute(marker, "ee_id", eeId); //$NON-NLS-1$
+									return;
+								}
+							}
+						}
+					}
+				} catch (JavaModelException e) {
+					PDECore.log(e);
+				}
+			}
+
+			// If no EE classpath entry, get a matching EE for the project JRE (or the default JRE)
 			IExecutionEnvironment[] systemEnvs = JavaRuntime.getExecutionEnvironmentsManager().getExecutionEnvironments();
-			IVMInstall defaultVM = JavaRuntime.getDefaultVMInstall();
+			IVMInstall vm = JavaRuntime.getDefaultVMInstall();
+			if (javaProject.exists()) {
+				try {
+					vm = JavaRuntime.getVMInstall(javaProject);
+				} catch (CoreException e) {
+					PDECore.log(e);
+				}
+			}
 
-			for (int i = 0; i < systemEnvs.length; i++) {
-				// Get strictly compatible EE for the default VM
-				if (systemEnvs[i].isStrictlyCompatible(defaultVM)) {
-					IMarker marker = report(PDECoreMessages.BundleErrorReporter_noExecutionEnvironmentSet, 1, sev, PDEMarkerFactory.M_EXECUTION_ENVIRONMENT_NOT_SET, PDEMarkerFactory.CAT_EE);
-					addMarkerAttribute(marker, "ee_id", systemEnvs[i].getId()); //$NON-NLS-1$
-					break;
+			if (vm != null) {
+				for (int i = 0; i < systemEnvs.length; i++) {
+					// Get strictly compatible EE for the default VM
+					if (systemEnvs[i].isStrictlyCompatible(vm)) {
+						IMarker marker = report(PDECoreMessages.BundleErrorReporter_noExecutionEnvironmentSet, 1, sev, PDEMarkerFactory.M_EXECUTION_ENVIRONMENT_NOT_SET, PDEMarkerFactory.CAT_EE);
+						addMarkerAttribute(marker, "ee_id", systemEnvs[i].getId()); //$NON-NLS-1$
+						break;
+					}
 				}
 			}
 			return;
@@ -357,7 +392,7 @@ public class BundleErrorReporter extends JarManifestErrorReporter {
 					IPath validPath = JavaRuntime.newJREContainerPath(env);
 					if (!validPath.equals(currentPath)) {
 						// Check if the user is using a perfect match JRE
-						IVMInstall vm = JavaRuntime.getVMInstall(validPath);
+						IVMInstall vm = JavaRuntime.getVMInstall(currentPath);
 						if (vm == null || !env.isStrictlyCompatible(vm)) {
 							report(NLS.bind(PDECoreMessages.BundleErrorReporter_reqExecEnv_conflict, bundleEnvs[0]), getLine(header, bundleEnvs[0]), sev, PDEMarkerFactory.M_MISMATCHED_EXEC_ENV, PDEMarkerFactory.CAT_EE);
 						}
@@ -477,6 +512,11 @@ public class BundleErrorReporter extends JarManifestErrorReporter {
 		}
 
 		BundleSpecification[] specs = desc.getRequiredBundles();
+		if (specs.length != required.length) {
+			// If the bundle description has stale data in it, don't compare it to the header data, see bug 308741
+			specs = null;
+		}
+
 		for (int i = 0; i < required.length; i++) {
 			checkCanceled(monitor);
 
@@ -492,7 +532,8 @@ public class BundleErrorReporter extends JarManifestErrorReporter {
 			boolean optional = isOptional(required[i]);
 			int severity = getRequireBundleSeverity(required[i], optional);
 
-			if (specs[i].getSupplier() == null) {
+			// It is possible for the bundle description to not match the headers
+			if (specs != null && specs[i].getSupplier() == null) {
 				if (desc.getContainingState().getBundle(specs[i].getName(), null) == null) {
 					IMarker marker = report(NLS.bind(PDECoreMessages.BundleErrorReporter_NotExistPDE, bundleID), getPackageLine(header, required[i]), severity, PDEMarkerFactory.M_REQ_BUNDLE_NOT_AVAILABLE, PDEMarkerFactory.CAT_FATAL);
 					try {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ErrorReporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ErrorReporter.java
index 65d8695..1261c0b 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ErrorReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ErrorReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,14 +11,8 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.core.builders;
 
-import org.eclipse.core.filebuffers.FileBuffers;
-import org.eclipse.core.filebuffers.ITextFileBuffer;
-import org.eclipse.core.filebuffers.ITextFileBufferManager;
-import org.eclipse.core.filebuffers.LocationKind;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
+import org.eclipse.core.filebuffers.*;
+import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.text.IDocument;
@@ -98,6 +92,16 @@ public abstract class ErrorReporter {
 		}
 	}
 
+	/**
+	 * Return a new marker with the provided attributes.  May return <code>null</code> if no marker should be created because of severity settings.
+	 * 
+	 * @param message
+	 * @param line
+	 * @param severity
+	 * @param problemID
+	 * @param category
+	 * @return a new marker or <code>null</code>
+	 */
 	public IMarker report(String message, int line, int severity, int problemID, String category) {
 		if (severity == CompilerFlags.ERROR)
 			return addMarker(message, line, IMarker.SEVERITY_ERROR, problemID, category);
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java
index 5882eb1..e691b52 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java
@@ -30,7 +30,7 @@ public class FeatureErrorReporter extends ManifestErrorReporter {
 
 	static String[] attrNames = {"id", "version", "label", "provider-name", "image", "os", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
 			"ws", "arch", "nl", "colocation-affinity", "primary", "exclusive", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
-			"plugin", "application"}; //$NON-NLS-1$ //$NON-NLS-2$
+			"plugin", "application", "license-feature", "license-feature-version"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 
 	private IProgressMonitor fMonitor;
 
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestConsistencyChecker.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestConsistencyChecker.java
index 0daef1e..c21e79d 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestConsistencyChecker.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestConsistencyChecker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -199,9 +199,9 @@ public class ManifestConsistencyChecker extends IncrementalProjectBuilder {
 			fClassFileVisitor.reset();
 			delta.accept(fClassFileVisitor);
 			if (fClassFileVisitor.hasChanged()) {
-				type |= MANIFEST | EXTENSIONS;
+				type |= MANIFEST | EXTENSIONS | BUILD;
 				if (DEBUG) {
-					System.out.println("Class files changed due to dependency changes: Project [" + getProject().getName() + "] - rebuild manifest files"); //$NON-NLS-1$ //$NON-NLS-2$
+					System.out.println("Class files changed due to dependency changes: Project [" + getProject().getName() + "] - rebuild manifest and properties files"); //$NON-NLS-1$ //$NON-NLS-2$
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestErrorReporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestErrorReporter.java
index 45e7c9d..56b29b9 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestErrorReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ManifestErrorReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,18 +13,13 @@ package org.eclipse.pde.internal.core.builders;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
-
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.core.PDECoreMessages;
 import org.eclipse.pde.internal.core.util.IdUtil;
 import org.eclipse.pde.internal.core.util.VersionUtil;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Text;
+import org.w3c.dom.*;
 
 public class ManifestErrorReporter extends XMLErrorReporter {
 
@@ -126,7 +121,7 @@ public class ManifestErrorReporter extends XMLErrorReporter {
 	 * @return false if failed
 	 */
 	protected boolean validatePluginID(Element element, Attr attr) {
-		if (!IdUtil.isValidCompositeID(attr.getValue())) {
+		if (!IdUtil.isValidCompositeID3_0(attr.getValue())) {
 			String message = NLS.bind(PDECoreMessages.Builders_Manifest_compositeID, attr.getValue(), attr.getName());
 			report(message, getLine(element, attr.getName()), CompilerFlags.WARNING, PDEMarkerFactory.CAT_OTHER);
 			return false;
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java
index b362f86..eef160d 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2009 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
 package org.eclipse.pde.internal.core.builders;
 
 import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.*;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -276,9 +277,9 @@ public class SchemaErrorReporter extends XMLErrorReporter {
 				try {
 					if (includedSchema == null)
 						continue;
-					String includedSchemaUrl = includedSchema.getURL().toString();
-					String computedUrl = IncludedSchemaDescriptor.computeURL(fSchema.getSchemaDescriptor(), schemaLocation).toString();
-					if (includedSchemaUrl != null && includedSchemaUrl.equals(computedUrl)) {
+					URL includedSchemaUrl = includedSchema.getURL();
+					URL computedUrl = IncludedSchemaDescriptor.computeURL(fSchema.getSchemaDescriptor(), schemaLocation);
+					if (includedSchemaUrl != null && computedUrl != null && includedSchemaUrl.equals(computedUrl)) {
 						if (!includedSchema.isValid())
 							report(NLS.bind(PDECoreMessages.Builders_Schema_includeNotValid, schemaLocation), getLine(element), CompilerFlags.ERROR, PDEMarkerFactory.CAT_OTHER);
 					}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java
index 3c9c7b0..903c49f 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,7 +84,7 @@ public class SchemaTransformer {
 
 	private void printHeader() {
 		fWriter.print("<HEAD>"); //$NON-NLS-1$
-		fWriter.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">"); //$NON-NLS-1$
+		fWriter.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"); //$NON-NLS-1$
 		fWriter.println("<title>" + fSchema.getName() + "</title>"); //$NON-NLS-1$ //$NON-NLS-2$
 		printStyles();
 		fWriter.println("</HEAD>"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SourceEntryErrorReporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SourceEntryErrorReporter.java
index e779e1a..ad5fcfc 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SourceEntryErrorReporter.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SourceEntryErrorReporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -421,14 +421,16 @@ public class SourceEntryErrorReporter extends BuildErrorReporter {
 					}
 				} else {
 					if (outputFolderLibs.size() == 0) {
-						//class folder does not have an output.<library> entry
+						//class folder does not have an output.<library> entry, only continue if we have a plugin model for the project
 						IPluginModelBase model = PluginRegistry.findModel(fProject);
-						IPluginLibrary[] libs = model.getPluginBase().getLibraries();
-						String message = NLS.bind(PDECoreMessages.SourceEntryErrorReporter_MissingOutputLibForClassFolder, outputPath.toString());
-						if (libs.length > 0) {
-							prepareError(PROPERTY_OUTPUT_PREFIX, null, message, PDEMarkerFactory.NO_RESOLUTION, fOututLibSeverity, PDEMarkerFactory.CAT_OTHER);
-						} else {
-							prepareError(DEF_OUTPUT_ENTRY, outputPath.toString(), message, PDEMarkerFactory.B_ADDITION, fOututLibSeverity, PDEMarkerFactory.CAT_OTHER);
+						if (model != null) {
+							IPluginLibrary[] libs = model.getPluginBase().getLibraries();
+							String message = NLS.bind(PDECoreMessages.SourceEntryErrorReporter_MissingOutputLibForClassFolder, outputPath.toString());
+							if (libs.length > 0) {
+								prepareError(PROPERTY_OUTPUT_PREFIX, null, message, PDEMarkerFactory.NO_RESOLUTION, fOututLibSeverity, PDEMarkerFactory.CAT_OTHER);
+							} else {
+								prepareError(DEF_OUTPUT_ENTRY, outputPath.toString(), message, PDEMarkerFactory.B_ADDITION, fOututLibSeverity, PDEMarkerFactory.CAT_OTHER);
+							}
 						}
 
 					}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleFragment.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleFragment.java
index 9f62766..1a647ed 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleFragment.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2008 IBM Corporation and others.
+ *  Copyright (c) 2003, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,9 +14,7 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.osgi.service.resolver.VersionRange;
 import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.pde.internal.core.ICoreConstants;
-import org.eclipse.pde.internal.core.ibundle.IBundle;
-import org.eclipse.pde.internal.core.ibundle.IBundleFragment;
-import org.eclipse.pde.internal.core.ibundle.IManifestHeader;
+import org.eclipse.pde.internal.core.ibundle.*;
 import org.eclipse.pde.internal.core.plugin.PluginBase;
 import org.eclipse.pde.internal.core.text.bundle.FragmentHostHeader;
 import org.osgi.framework.BundleException;
@@ -41,6 +39,7 @@ public class BundleFragment extends BundlePluginBase implements IBundleFragment
 				return versionRange.getMinimum() != null ? versionRange.getMinimum().toString() : version;
 			}
 		} catch (NumberFormatException e) {
+		} catch (IllegalArgumentException e) {
 		}
 		return version;
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
index 76dc85d..0251265 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1017,6 +1017,7 @@ public class FeatureExportOperation extends Job {
 							Element plugin = doc.createElement("plugin"); //$NON-NLS-1$
 							plugin.setAttribute("id", bundle.getSymbolicName()); //$NON-NLS-1$
 							plugin.setAttribute("version", bundle.getVersion().toString()); //$NON-NLS-1$ 
+							plugin.setAttribute("unpack", "false"); //$NON-NLS-1$ //$NON-NLS-2$ 
 							root.appendChild(plugin);
 							BundleDescription[] fragments = bundle.getFragments();
 							for (int i = 0; i < configurations.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
index 197ad01..d83fdb9 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,8 @@ public class Feature extends VersionableObject implements IFeature {
 	private String fPlugin;
 	private boolean fValid;
 	private String fCopyright;
+	private String fLicenseFeatureID;
+	private String fLicenseFeatureVersion;
 
 	public void addPlugins(IFeaturePlugin[] newPlugins) throws CoreException {
 		ensureModelEditable();
@@ -110,6 +112,28 @@ public class Feature extends VersionableObject implements IFeature {
 		return fProviderName;
 	}
 
+	public void setLicenseFeatureID(String featureID) {
+		fLicenseFeatureID = featureID;
+	}
+
+	public String getLicenseFeatureID() {
+		if (fLicenseFeatureID == null) {
+			fLicenseFeatureID = ""; //$NON-NLS-1$
+		}
+		return fLicenseFeatureID;
+	}
+
+	public void setLicenseFeatureVersion(String version) {
+		fLicenseFeatureVersion = version;
+	}
+
+	public String getLicenseFeatureVersion() {
+		if (fLicenseFeatureVersion == null) {
+			fLicenseFeatureVersion = ""; //$NON-NLS-1$
+		}
+		return fLicenseFeatureVersion;
+	}
+
 	public String getPlugin() {
 		return fPlugin;
 	}
@@ -127,8 +151,14 @@ public class Feature extends VersionableObject implements IFeature {
 		return fHandler;
 	}
 
-	public IFeatureInfo getFeatureInfo(int index) {
-		return fInfos[index];
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.ifeature.IFeature#getFeatureInfo(int)
+	 */
+	public IFeatureInfo getFeatureInfo(int infoType) {
+		if (infoType < 0 || infoType > (fInfos.length - 1)) {
+			return null;
+		}
+		return fInfos[infoType];
 	}
 
 	public boolean isPrimary() {
@@ -142,6 +172,8 @@ public class Feature extends VersionableObject implements IFeature {
 	protected void parse(Node node) {
 		super.parse(node);
 		fProviderName = getNodeAttribute(node, "provider-name"); //$NON-NLS-1$
+		fLicenseFeatureID = getNodeAttribute(node, "license-feature"); //$NON-NLS-1$
+		fLicenseFeatureVersion = getNodeAttribute(node, "license-feature-version"); //$NON-NLS-1$
 		fPlugin = getNodeAttribute(node, "plugin"); //$NON-NLS-1$
 		fOs = getNodeAttribute(node, "os"); //$NON-NLS-1$
 		fWs = getNodeAttribute(node, "ws"); //$NON-NLS-1$
@@ -677,6 +709,14 @@ public class Feature extends VersionableObject implements IFeature {
 			writer.println();
 			writer.print(indenta + "primary=\"true\""); //$NON-NLS-1$
 		}
+		if (getLicenseFeatureID().length() > 0) {
+			writer.println();
+			writer.print(indenta + "license-feature=\"" + getLicenseFeatureID() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		if (getLicenseFeatureVersion().length() > 0) {
+			writer.println();
+			writer.print(indenta + "license-feature-version=\"" + getLicenseFeatureVersion() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
 		if (isExclusive()) {
 			writer.println();
 			writer.print(indenta + "exclusive=\"true\""); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java
index ceb63b9..c691a7b 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,7 +61,7 @@ public interface IFeature extends IFeatureObject, IVersionable, IEnvironment {
 	public static final int INFO_COPYRIGHT = 1;
 	public static final int INFO_LICENSE = 2;
 
-	public static final String[] INFO_TAGS = {"description", "copyright", "license"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	static final String[] INFO_TAGS = {"description", "copyright", "license"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
 	/**
 	 * Adds a plug-in reference to this feature.
@@ -166,7 +166,14 @@ public interface IFeature extends IFeatureObject, IVersionable, IEnvironment {
 
 	public void setInstallHandler(IFeatureInstallHandler handler) throws CoreException;
 
-	public IFeatureInfo getFeatureInfo(int index);
+	/**
+	 * Return the feature info for the given info type or <code>null</code> if
+	 * the expected information does not exist.
+	 * 
+	 * @param infoType One of {@link IFeature#INFO_LICENSE}, {@link IFeature#INFO_COPYRIGHT} or {@link IFeature#INFO_DESCRIPTION}
+	 * @return the requested feature info or <code>null</code>
+	 */
+	public IFeatureInfo getFeatureInfo(int infoType);
 
 	public void setFeatureInfo(IFeatureInfo info, int index) throws CoreException;
 
@@ -225,6 +232,14 @@ public interface IFeature extends IFeatureObject, IVersionable, IEnvironment {
 
 	boolean isPrimary();
 
+	public String getLicenseFeatureID();
+
+	public void setLicenseFeatureID(String licenseFeatureID);
+
+	public String getLicenseFeatureVersion();
+
+	public void setLicenseFeatureVersion(String version);
+
 	public void setPrimary(boolean value) throws CoreException;
 
 	boolean isExclusive();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureInfo.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureInfo.java
index 58ae3d1..f3f6c71 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureInfo.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,9 @@ public interface IFeatureInfo extends IFeatureObject {
 
 	String P_DESC = "p_desc"; //$NON-NLS-1$
 
+	/**
+	 * @return the url for the feature, possibly <code>null</code>
+	 */
 	public String getURL();
 
 	public String getDescription();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/BundleImporterExtension.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/BundleImporterExtension.java
deleted file mode 100644
index e8f852b..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/BundleImporterExtension.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.core.importing;
-
-import java.util.Map;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.*;
-import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
-import org.eclipse.pde.internal.core.importing.provisional.IBundleImporterDelegate;
-
-/**
- * A bundle importer extension.
- * 
- * @since 3.6
- */
-public class BundleImporterExtension implements IBundleImporter {
-
-	private IBundleImporterDelegate delegate;
-	private IConfigurationElement element;
-
-	/**
-	 * Constructs a bundle importer extension on the given element.
-	 * 
-	 * @param element contribution
-	 */
-	public BundleImporterExtension(IConfigurationElement element) {
-		this.element = element;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.project.IBundleImporterDelegate#validateImport(java.util.Map[])
-	 */
-	public BundleImportDescription[] validateImport(Map[] manifests) {
-		try {
-			return getDelegate().validateImport(manifests);
-		} catch (CoreException e) {
-			PDECore.log(e);
-			return null;
-		}
-	}
-
-	/**
-	 * Returns underlying delegate.
-	 * 
-	 * @return delegate
-	 * @exception CoreException if unable to instantiate delegate
-	 */
-	private synchronized IBundleImporterDelegate getDelegate() throws CoreException {
-		if (delegate == null) {
-			delegate = (IBundleImporterDelegate) element.createExecutableExtension("class"); //$NON-NLS-1$
-		}
-		return delegate;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.importing.IBundleImporterDelegate#performImport(org.eclipse.pde.core.importing.BundleImportDescription[], org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public IProject[] performImport(BundleImportDescription[] descriptions, IProgressMonitor monitor) throws CoreException {
-		return getDelegate().performImport(descriptions, monitor);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.project.IBundleImporter#getId()
-	 */
-	public String getId() {
-		return element.getAttribute("id"); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.project.IBundleImporter#getDescription()
-	 */
-	public String getDescription() {
-		return element.getAttribute("description"); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.project.IBundleImporter#getName()
-	 */
-	public String getName() {
-		return element.getAttribute("name"); //$NON-NLS-1$
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/CvsBundleImportDescription.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/CvsBundleImportDescription.java
deleted file mode 100644
index b8290dd..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/CvsBundleImportDescription.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.core.importing;
-
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
-
-import java.util.Map;
-
-/**
- * Describes a bundle to be imported by CVS.
- * @since 3.6
- */
-public class CvsBundleImportDescription extends BundleImportDescription {
-
-	String tag;
-	String server;
-	String path;
-	String module;
-	String protocol;
-
-	/**
-	 * @param project
-	 * @param manifest
-	 */
-	public CvsBundleImportDescription(String project, Map manifest, String protocol, String server, String path, String module, String tag) {
-		super(project, manifest);
-		this.protocol = protocol;
-		this.server = server;
-		this.path = path;
-		this.module = module;
-		this.tag = tag;
-	}
-
-	public void setTag(String tag) {
-		this.tag = tag;
-	}
-
-	public String getTag() {
-		return tag;
-	}
-
-	public String getServer() {
-		return server;
-	}
-
-	public String getPath() {
-		return path;
-	}
-
-	public String getModule() {
-		return module;
-	}
-
-	public String getProtocol() {
-		return protocol;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/CvsBundleImporterDelegate.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/CvsBundleImporterDelegate.java
deleted file mode 100644
index 04419b5..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/CvsBundleImporterDelegate.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.core.importing;
-
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
-import org.eclipse.pde.internal.core.importing.provisional.IBundleImporterDelegate;
-
-import java.util.*;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.util.ManifestElement;
-import org.eclipse.pde.internal.core.ICoreConstants;
-import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.team.core.*;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-
-/**
- * Handles SCM CVS headers of the following form. Tag and project name can be specified
- * as extra attributes. When a tag is unspecified, the HEAD tag is used. When a project
- * name is unspecified, it is generated by the module name.
- * <pre>
- * scm:cvs<delimiter><method><delimiter>path_to_repository<delimiter>module_name[;tag=version][;project=name]
- * scm:psf<delimiter><method><delimiter>path_to_repository<delimiter>module_name[;tag=version][;project=name]
- * </pre>
- * @since 3.6
- */
-/**
- *
- */
-public class CvsBundleImporterDelegate implements IBundleImporterDelegate {
-
-	private static Set SUPPORTED_VALUES;
-
-	private static final String SCM = "scm:"; //$NON-NLS-1$
-	private static final String CVS = "cvs"; //$NON-NLS-1$
-//	private static final String PSF = "psf"; //$NON-NLS-1$
-	private static final String COLON = ":"; //$NON-NLS-1$
-	private static final String PIPE = "|"; //$NON-NLS-1$
-
-	private static final String ATTR_TAG = "tag"; //$NON-NLS-1$
-	private static final String ATTR_PROJECT = "project"; //$NON-NLS-1$
-
-	private static RepositoryProviderType CVS_PROVIDER_TYPE = RepositoryProviderType.getProviderType("org.eclipse.team.cvs.core.cvsnature"); //$NON-NLS-1$
-
-	static {
-		SUPPORTED_VALUES = new HashSet();
-		SUPPORTED_VALUES.add(SCM + CVS + COLON);
-		SUPPORTED_VALUES.add(SCM + CVS + PIPE);
-//		SUPPORTED_VALUES.add(SCM + PSF + COLON);
-//		SUPPORTED_VALUES.add(SCM + PSF + PIPE);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.project.IBundleImporterDelegate#validateImport(java.util.Map[])
-	 */
-	public BundleImportDescription[] validateImport(Map[] manifests) {
-		BundleImportDescription[] results = new BundleImportDescription[manifests.length];
-		if (CVS_PROVIDER_TYPE != null) {
-			for (int i = 0; i < manifests.length; i++) {
-				Map manifest = manifests[i];
-				String value = (String) manifest.get(ICoreConstants.ECLIPSE_SOURCE_REFERENCES);
-				if (value != null && value.length() > 8) {
-					String prefix = value.substring(0, 8);
-					if (SUPPORTED_VALUES.contains(prefix)) {
-						try {
-							ManifestElement[] elements = ManifestElement.parseHeader(ICoreConstants.ECLIPSE_SOURCE_REFERENCES, value);
-							for (int j = 0; j < elements.length; j++) {
-								ManifestElement element = elements[j];
-								String url = element.getValue();
-								String tag = element.getAttribute(ATTR_TAG);
-								String project = element.getAttribute(ATTR_PROJECT);
-								if (project == null) {
-									String bsn = (String) manifests[i].get(Constants.BUNDLE_SYMBOLICNAME);
-									if (bsn != null) {
-										ManifestElement[] bsnElement = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, bsn);
-										project = bsnElement[0].getValue();
-									}
-								}
-								results[i] = createImportDescription(url, manifest, tag, project);
-							}
-						} catch (BundleException e) {
-							PDECore.log(e);
-						}
-					}
-				}
-			}
-		}
-		return results;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.importing.IBundleImporterDelegate#performImport(org.eclipse.pde.core.importing.BundleImportDescription[], org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public IProject[] performImport(BundleImportDescription[] descriptions, IProgressMonitor monitor) throws CoreException {
-		List references = new ArrayList();
-		// collect and validate all header values
-		for (int i = 0; i < descriptions.length; i++) {
-			references.add(createPSF((CvsBundleImportDescription) descriptions[i]));
-		}
-		// create projects
-		if (!references.isEmpty()) {
-			SubMonitor subMonitor = SubMonitor.convert(monitor, references.size());
-			ProjectSetCapability psfCapability = CVS_PROVIDER_TYPE.getProjectSetCapability();
-			if (psfCapability != null) {
-				// TODO: specify shell
-				psfCapability.addToWorkspace((String[]) references.toArray(new String[references.size()]), new ProjectSetSerializationContext(), subMonitor);
-			} else {
-				//TODO: error
-			}
-			subMonitor.done();
-		}
-		return null;
-	}
-
-	/**
-	 * Constructs a CVS project set import description from an SCMURL.
-	 * 
-	 * @param url
-	 * @param manifest bundle manifest
-	 * @param tag attribute value or <code>null</code>
-	 * @param project suggested project name or <code>null</code>
-	 * @return corresponding CVS project set reference
-	 */
-	private BundleImportDescription createImportDescription(String url, Map manifest, String tag, String project) {
-		// format is 1.0,protocol:host:cvs folder,project name [, tag]
-		String suffix = url.substring(8);
-		String sep = url.substring(7, 8);
-		String[] pieces = suffix.split(sep);
-		String protocol = pieces[0];
-		// the last piece is the module name
-		String module = pieces[pieces.length - 1];
-		// path is the second last piece
-		String path = pieces[pieces.length - 2];
-		// there might be a user:password:server:port
-		int index = pieces.length - 3; // start looking at the third last piece and work backwards
-		// if it's a port number, keep moving back
-		String server = null;
-		try {
-			Integer.parseInt(pieces[index]);
-			index--;
-			server = pieces[index];
-		} catch (NumberFormatException e) {
-			server = pieces[index];
-		}
-		// trim any user/password
-		index = server.indexOf('@');
-		if (index >= 0) {
-			server = server.substring(index + 1);
-		}
-		if (project == null) {
-			// use module name as default
-			int slash = pieces[3].lastIndexOf('/');
-			if (slash >= 0) {
-				project = pieces[3].substring(slash + 1);
-			} else {
-				project = pieces[3];
-			}
-		}
-		return new CvsBundleImportDescription(project, manifest, protocol, server, path, module, tag);
-	}
-
-	/**
-	 * Constructs a CVS project set import description from an SCMURL.
-	 * 
-	 * @param url
-	 * @param tag attribute value or <code>null</code>
-	 * @param project suggested project name or <code>null</code>
-	 * @return corresponding CVS project set reference
-	 */
-	private String createPSF(CvsBundleImportDescription description) {
-		// format is 1.0,protocol:host:cvs folder,project name [, tag]
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("1.0,:"); //$NON-NLS-1$
-		buffer.append(description.protocol); // protocol
-		buffer.append(COLON);
-		buffer.append(description.server);
-		buffer.append(COLON);
-		buffer.append(description.path);
-		buffer.append(',');
-		buffer.append(description.module);
-		buffer.append(',');
-		buffer.append(description.getProject());
-		String tag = description.tag;
-		if (tag != null) {
-			buffer.append(',');
-			buffer.append(tag);
-		}
-		return buffer.toString();
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/IBundleImporter.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/IBundleImporter.java
deleted file mode 100644
index 430c143..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/IBundleImporter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.core.importing;
-
-import org.eclipse.pde.internal.core.importing.provisional.IBundleImporterDelegate;
-
-/**
- * A bundle importer represents an instance of a bundle importer extension.
- * Clients contributing a bundle importer extension contribute an implementation
- * of {@link IBundleImporterDelegate} rather than this interface.
- * <p>
- * Clients contributing a bundle importer extension are intended to implement
- * {@link IBundleImporterDelegate}.
- * </p>
- * @since 3.6
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- */
-public interface IBundleImporter extends IBundleImporterDelegate {
-
-	/**
-	 * Returns this impoter's unique identifier.
-	 * 
-	 * @return identifier
-	 */
-	public String getId();
-
-	/**
-	 * Returns a short description of this importer, or <code>null</code> if unspecified.
-	 * 
-	 * @return description or <code>null</code>
-	 */
-	public String getDescription();
-
-	/**
-	 * Returns a human readable name for this importer.
-	 * 
-	 * @return name
-	 */
-	public String getName();
-}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/BundleImportDescription.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/BundleImportDescription.java
deleted file mode 100644
index 20c34e8..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/BundleImportDescription.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.core.importing.provisional;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Describes how a bundle import will be executed. A bundle importer delegate
- * creates bundle import descriptions when it validates bundle manifests for
- * importing. When asked to import bundles, it is passed back the instances
- * of bundle import descriptions is created. However, the target project
- * may have been modified and properties may have been modified.
- * <p>
- * Clients may instantiate this class. Clients may subclass this class to
- * implement model specific behavior and include model specific data in import
- * descriptions.
- * </p> 
- * <p>
- * <strong>EXPERIMENTAL</strong>. This class has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the PDE team.
- * </p>
- * @since 3.6
- */
-public class BundleImportDescription {
-
-	private String project;
-	private Map manifest;
-	private Map properties;
-
-	/**
-	 * Constructs a bundle import description with given project and manifest.
-	 * 
-	 * @param project the project the bundle should be imported into which may
-	 *  or may not exist
-	 * @param manifest bundle manifest headers and values
-	 */
-	public BundleImportDescription(String project, Map manifest) {
-		this.project = project;
-		this.manifest = manifest;
-	}
-
-	/**
-	 * Sets or removes a client property.
-	 * 
-	 * @param key property key
-	 * @param value property value or <code>null</code> to remove the property
-	 */
-	public synchronized void setProperty(String key, Object value) {
-		if (properties == null) {
-			properties = new HashMap();
-		}
-		if (value == null) {
-			properties.remove(key);
-		} else {
-			properties.put(key, value);
-		}
-
-	}
-
-	/**
-	 * Returns the specified client property, or <code>null</code> if none.
-	 * 
-	 * @param key property key
-	 * @return property value or <code>null</code>
-	 */
-	public synchronized Object getProperty(String key) {
-		if (properties == null) {
-			return null;
-		}
-		return properties.get(key);
-	}
-
-	/**
-	 * Returns the project name the bundle will be imported into. The project
-	 * may or may not exist before the import. However, when the import operation
-	 * beings, the project will not exist.
-	 * 
-	 * @return target project
-	 */
-	public synchronized String getProject() {
-		return project;
-	}
-
-	/**
-	 * Returns the manifest of the bundle to be imported.
-	 * 
-	 * @return bundle manifest keys and values
-	 */
-	public Map getManifest() {
-		return manifest;
-	}
-
-	/**
-	 * Sets the project name that is the target of the import operation.
-	 * 
-	 * @param project target project
-	 */
-	public synchronized void setProject(String project) {
-		this.project = project;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/IBundleImporterDelegate.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/IBundleImporterDelegate.java
deleted file mode 100644
index a98a93b..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/IBundleImporterDelegate.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.core.importing.provisional;
-
-import java.util.Map;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * A bundle importer delegate is contributed by a bundle importer extension and is capable
- * of importing projects into the workspace from a repository based on bundle manifest entries.
- * <p>
- * Following is an example extension:
- * <pre>
- * <extension point="org.eclipse.pde.core.bundleImporters">
- *  <importer
- *   id="com.example.ExampleIdentifier"
- *   class="com.example.ExampleBundleImporterDelegate">
- *  </importer>
- * </extension>
- * </pre>
- * </p>
- * <p>
- * Clients contributing bundle importer extensions are intended to implement this interface.
- * </p>
- * <p>
- * <strong>EXPERIMENTAL</strong>. This interface has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the PDE team.
- * </p>
- * @since 3.6
- * @noextend This interface is not intended to be extended by clients.
- */
-public interface IBundleImporterDelegate {
-
-	/**
-	 * Returns an array of objects describing how each given bundle (manifest headers and values)
-	 * can be imported into a workspace project. A <code>null</code> entry in the returned array
-	 * indicates the corresponding bundle cannot be imported by this delegate.
-	 * 
-	 * @param manifests array of maps containing manifest headers and values of the associated bundles
-	 * @return array of bundle import descriptions that may contain <code>null</code> entries
-	 */
-	public BundleImportDescription[] validateImport(Map[] manifests);
-
-	/**
-	 * Imports bundles into the workspace creating a project for each import description.
-	 * Reports progress to the given monitor, if not <code>null</code>.
-	 * 
-	 * @param descriptions description of bundles to import
-	 * @param monitor progress monitor or <code>null</code>
-	 * @return collection of projects created in the workspace or <code>null</code> if none
-	 * @throws CoreException if unable to import projects
-	 */
-	public IProject[] performImport(BundleImportDescription[] descriptions, IProgressMonitor monitor) throws CoreException;
-}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/package.html b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/package.html
deleted file mode 100644
index befab8d..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/importing/provisional/package.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Application programming interfaces for importing projects into the workspace.
-<h2>
-Package Specification</h2>
-<p>
-Provides support for importing projects into the workspace from a repository. 
-</p>
-<p>
-A bundle manifest may contain information identifying source code for the bundle
-or a project in a repository associated with the bundle. Clients may contribute
-implementations of <code>org.eclipse.pde.core.importing.IBundleImporterDelegate</code>
-to the <code>org.eclipse.pde.core.bundleImporters</code> extension point to participate
-in the import of bundles into workspace projects based on bundle manifests.
-</p>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IConfigurationProperty.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IConfigurationProperty.java
new file mode 100755
index 0000000..6cf3a4c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IConfigurationProperty.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 EclipseSource Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     EclipseSource Corporation - initial API and implementation
+ *     IBM Corporation - continuing enhancements
+ *******************************************************************************/
+package org.eclipse.pde.internal.core.iproduct;
+
+/**
+ * Properties that are added to the config.ini.  Properties consist of a string name and
+ * string value.
+ * 
+ * @see IProduct
+ * 
+ * @since 3.7
+ */
+public interface IConfigurationProperty extends IProductObject {
+	public static final String P_NAME = "name"; //$NON-NLS-1$
+	public static final String P_VALUE = "value"; //$NON-NLS-1$
+
+	/**
+	 * @return The name of this property
+	 */
+	String getName();
+
+	/**
+	 * Sets the name of this property
+	 * 
+	 * @param name new name for the property
+	 */
+	void setName(String name);
+
+	/**
+	 * @return The current value for this property
+	 */
+	String getValue();
+
+	/**
+	 * Sets the value of this property
+	 * 
+	 * @param value new value for the property
+	 */
+	void setValue(String value);
+
+}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProduct.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProduct.java
index 7aeea14..8d34d4b 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProduct.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProduct.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,12 +63,30 @@ public interface IProduct extends IProductObject {
 
 	void addPluginConfigurations(IPluginConfiguration[] configurations);
 
+	/**
+	 * Adds the given properties to the list of properties known to this
+	 * product.  Only properties that do not exist in the product configuration
+	 * will be added.
+	 * 
+	 * @param properties properties to add
+	 */
+	void addConfigurationProperties(IConfigurationProperty[] properties);
+
 	void removePlugins(IProductPlugin[] plugins);
 
 	void removeFeatures(IProductFeature[] feature);
 
 	void removePluginConfigurations(IPluginConfiguration[] configurations);
 
+	/**
+	 * Removes the given properties from the list of properties known to this
+	 * product.  If the properties are not in the product's properties, this
+	 * method has no effect.
+	 * 
+	 * @param properties properties to remove
+	 */
+	void removeConfigurationProperties(IConfigurationProperty[] properties);
+
 	IPluginConfiguration findPluginConfiguration(String id);
 
 	IProductPlugin[] getPlugins();
@@ -77,6 +95,11 @@ public interface IProduct extends IProductObject {
 
 	IPluginConfiguration[] getPluginConfigurations();
 
+	/**
+	 * @return The list of properties set in the product configuration
+	 */
+	IConfigurationProperty[] getConfigurationProperties();
+
 	void setId(String id);
 
 	void setProductId(String id);
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java
index f88346a..603d7a6 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,8 @@ public interface IProductModelFactory {
 
 	IPluginConfiguration createPluginConfiguration();
 
+	IConfigurationProperty createConfigurationProperty();
+
 	IProductFeature createFeature();
 
 	IConfigurationFileInfo createConfigFileInfo();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IPropertyConfiguration.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IPropertyConfiguration.java
deleted file mode 100644
index c2b835a..0000000
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IPropertyConfiguration.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 EclipseSource Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     EclipseSource Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.core.iproduct;
-
-/**
- * A simple name and value property  
- */
-public interface IPropertyConfiguration extends IProductObject {
-	public static final String P_NAME = "name"; //$NON-NLS-1$
-	public static final String P_VALUE = "value"; //$NON-NLS-1$
-
-	String getName();
-
-	void setName(String name);
-
-	String getValue();
-
-	void setValue(String value);
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties
index dabeb93..8a5a50c 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/pderesources.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -261,7 +261,7 @@ SourceEntryErrorReporter_MissingLibrary=The library ''{0}'' has not been specifi
 SourceEntryErrorReporter_MissingOutputEntry=Source folder ''{0}'' does not have the output folder in corresponding output entry ''{1}''.  
 SourceEntryErrorReporter_MissingOutputLibForClassFolder=The class folder ''{0}'' is not associated to any output library entry.
 
-SourceLocationManager_problemProcessingBundleManifestSourceHeader=Problem processing bundle manifest source header
+SourceLocationManager_problemProcessingBundleManifestSourceHeader=Problem processing bundle manifest source header in plug-in {0} version {1} found at {2}
 UpdateSiteBuilder_0=Cleaning {0}
 
 VMHelper_noJreForExecEnv=No installed JREs satisfy this Execution Environment: "{0}". Launch aborted.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/PluginExtensionPoint.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/PluginExtensionPoint.java
index df7418b..7a274c3 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/PluginExtensionPoint.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/PluginExtensionPoint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -8,123 +8,123 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.pde.internal.core.plugin;
-
-import java.io.PrintWriter;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.pde.core.plugin.*;
-import org.w3c.dom.Node;
-
-public class PluginExtensionPoint extends IdentifiablePluginObject implements IPluginExtensionPoint {
-
-	private static final long serialVersionUID = 1L;
-
-	private IExtensionPoint fPoint = null;
-
-	protected String fSchema;
-
-	public PluginExtensionPoint() {
-	}
-
-	public PluginExtensionPoint(IExtensionPoint point) {
-		fPoint = point;
-	}
-
-	public boolean isValid() {
-		return getId() != null && getName() != null;
-	}
-
-	public String getFullId() {
-		if (fPoint != null)
-			return fPoint.getUniqueIdentifier();
-		String pointId = getId();
-		IPluginModelBase modelBase = getPluginModel();
-		IPluginBase pluginBase = modelBase.getPluginBase();
-		String schemaVersion = pluginBase.getSchemaVersion();
-		if (schemaVersion != null && Double.parseDouble(schemaVersion) >= 3.2) {
-			if (pointId.indexOf('.') > 0)
-				return pointId;
-		}
-
-		if (pluginBase instanceof IFragment)
-			return ((IFragment) pluginBase).getPluginId() + '.' + pointId;
-		return pluginBase.getId() + '.' + pointId;
-	}
-
-	public String getSchema() {
-		if (fSchema == null && fPoint != null)
-			fSchema = fPoint.getSchemaReference();
-		return fSchema;
-	}
-
-	void load(Node node) {
-		this.fID = getNodeAttribute(node, "id"); //$NON-NLS-1$
-		fName = getNodeAttribute(node, "name"); //$NON-NLS-1$
-		fSchema = getNodeAttribute(node, "schema"); //$NON-NLS-1$
-		fStartLine = Integer.parseInt(getNodeAttribute(node, "line")); //$NON-NLS-1$
-	}
-
-	public boolean equals(Object obj) {
-		if (obj == this)
-			return true;
-		if (obj instanceof IPluginExtensionPoint) {
-			IPluginExtensionPoint target = (IPluginExtensionPoint) obj;
-			// Objects from the same model must be
-			// binary equal
-			if (target.getModel().equals(getModel()))
-				return false;
-			if (stringEqualWithNull(target.getId(), getId()) && stringEqualWithNull(target.getName(), getName()) && stringEqualWithNull(target.getSchema(), getSchema()))
-				return true;
-		}
-		return false;
-	}
-
-	public void setSchema(String newSchema) throws CoreException {
-		ensureModelEditable();
-		String oldValue = fSchema;
-		fSchema = newSchema;
-		firePropertyChanged(P_SCHEMA, oldValue, fSchema);
-	}
-
-	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_SCHEMA)) {
-			setSchema(newValue != null ? newValue.toString() : null);
-			return;
-		}
-		super.restoreProperty(name, oldValue, newValue);
-	}
-
-	public void write(String indent, PrintWriter writer) {
-		writer.print(indent);
-		writer.print("<extension-point"); //$NON-NLS-1$
-		if (getId() != null)
-			writer.print(" id=\"" + getWritableString(getId()) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
-		if (getName() != null)
-			writer.print(" name=\"" + getWritableString(getName()) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
-		if (getSchema() != null)
-			writer.print(" schema=\"" + getSchema() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
-		writer.println("/>"); //$NON-NLS-1$
-	}
-
-	public String getName() {
-		if (fName == null)
-			fName = fPoint.getLabel();
-		return fName;
-	}
-
-	public String getId() {
-		if (fID == null) {
-			fID = fPoint.getUniqueIdentifier();
-			if (fID != null) {
-				String pluginId = getPluginBase().getId();
-				if (fID.startsWith(pluginId)) {
-					String sub = fID.substring(pluginId.length());
-					if (sub.lastIndexOf('.') == 0)
-						fID = sub.substring(1);
-				}
-			}
-		}
-		return fID;
-	}
-}
+package org.eclipse.pde.internal.core.plugin;
+
+import java.io.PrintWriter;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.pde.core.plugin.*;
+import org.w3c.dom.Node;
+
+public class PluginExtensionPoint extends IdentifiablePluginObject implements IPluginExtensionPoint {
+
+	private static final long serialVersionUID = 1L;
+
+	private IExtensionPoint fPoint = null;
+
+	protected String fSchema;
+
+	public PluginExtensionPoint() {
+	}
+
+	public PluginExtensionPoint(IExtensionPoint point) {
+		fPoint = point;
+	}
+
+	public boolean isValid() {
+		return getId() != null && getName() != null;
+	}
+
+	public String getFullId() {
+		if (fPoint != null)
+			return fPoint.getUniqueIdentifier();
+		String pointId = getId();
+		IPluginModelBase modelBase = getPluginModel();
+		IPluginBase pluginBase = modelBase.getPluginBase();
+		String schemaVersion = pluginBase.getSchemaVersion();
+		if (schemaVersion != null && Double.parseDouble(schemaVersion) >= 3.2) {
+			if (pointId.indexOf('.') > 0)
+				return pointId;
+		}
+
+		if (pluginBase instanceof IFragment)
+			return ((IFragment) pluginBase).getPluginId() + '.' + pointId;
+		return pluginBase.getId() + '.' + pointId;
+	}
+
+	public String getSchema() {
+		if (fSchema == null && fPoint != null)
+			fSchema = fPoint.getSchemaReference();
+		return fSchema;
+	}
+
+	void load(Node node) {
+		this.fID = getNodeAttribute(node, "id"); //$NON-NLS-1$
+		fName = getNodeAttribute(node, "name"); //$NON-NLS-1$
+		fSchema = getNodeAttribute(node, "schema"); //$NON-NLS-1$
+		fStartLine = Integer.parseInt(getNodeAttribute(node, "line")); //$NON-NLS-1$
+	}
+
+	public boolean equals(Object obj) {
+		if (obj == this)
+			return true;
+		if (obj instanceof IPluginExtensionPoint) {
+			IPluginExtensionPoint target = (IPluginExtensionPoint) obj;
+			// Objects from the same model must be
+			// binary equal
+			if (target.getModel().equals(getModel()))
+				return false;
+			if (stringEqualWithNull(target.getFullId(), getId()) && stringEqualWithNull(target.getName(), getName()) && stringEqualWithNull(target.getSchema(), getSchema()))
+				return true;
+		}
+		return false;
+	}
+
+	public void setSchema(String newSchema) throws CoreException {
+		ensureModelEditable();
+		String oldValue = fSchema;
+		fSchema = newSchema;
+		firePropertyChanged(P_SCHEMA, oldValue, fSchema);
+	}
+
+	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
+		if (name.equals(P_SCHEMA)) {
+			setSchema(newValue != null ? newValue.toString() : null);
+			return;
+		}
+		super.restoreProperty(name, oldValue, newValue);
+	}
+
+	public void write(String indent, PrintWriter writer) {
+		writer.print(indent);
+		writer.print("<extension-point"); //$NON-NLS-1$
+		if (getId() != null)
+			writer.print(" id=\"" + getWritableString(getId()) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		if (getName() != null)
+			writer.print(" name=\"" + getWritableString(getName()) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		if (getSchema() != null)
+			writer.print(" schema=\"" + getSchema() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.println("/>"); //$NON-NLS-1$
+	}
+
+	public String getName() {
+		if (fName == null)
+			fName = fPoint.getLabel();
+		return fName;
+	}
+
+	public String getId() {
+		if (fID == null) {
+			fID = fPoint.getUniqueIdentifier();
+			if (fID != null) {
+				String pluginId = getPluginBase().getId();
+				if (fID.startsWith(pluginId)) {
+					String sub = fID.substring(pluginId.length());
+					if (sub.lastIndexOf('.') == 0)
+						fID = sub.substring(1);
+				}
+			}
+		}
+		return fID;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/WorkspacePluginModelBase.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/WorkspacePluginModelBase.java
index a08711b..c68781d 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/WorkspacePluginModelBase.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/WorkspacePluginModelBase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,8 +36,6 @@ public abstract class WorkspacePluginModelBase extends AbstractPluginModelBase i
 
 	private boolean fEditable = true;
 
-	private IBuildModel fBuildModel;
-
 	protected NLResourceHelper createNLResourceHelper() {
 		return new NLResourceHelper("plugin", PDEManager.getNLLookupLocations(this)); //$NON-NLS-1$
 	}
@@ -62,7 +60,7 @@ public abstract class WorkspacePluginModelBase extends AbstractPluginModelBase i
 	}
 
 	public IBuildModel getBuildModel() {
-		return fBuildModel;
+		return null;
 	}
 
 	public String getContents() {
@@ -170,10 +168,6 @@ public abstract class WorkspacePluginModelBase extends AbstractPluginModelBase i
 		fDirty = false;
 	}
 
-	public void setBuildModel(IBuildModel buildModel) {
-		fBuildModel = buildModel;
-	}
-
 	public void setDirty(boolean dirty) {
 		fDirty = dirty;
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ConfigurationProperty.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ConfigurationProperty.java
new file mode 100644
index 0000000..4a20237
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ConfigurationProperty.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 EclipseSource Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     EclipseSource Corporation - initial API and implementation
+ *     IBM Corporation - additional enhancements
+ *******************************************************************************/
+package org.eclipse.pde.internal.core.product;
+
+import java.io.PrintWriter;
+import org.eclipse.pde.internal.core.iproduct.IConfigurationProperty;
+import org.eclipse.pde.internal.core.iproduct.IProductModel;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+public class ConfigurationProperty extends ProductObject implements IConfigurationProperty {
+
+	private static final long serialVersionUID = -3549668957352554826L;
+	private String fName;
+	private String fValue;
+
+	/**
+	 * Only for parsing usage
+	 * @param model
+	 */
+	ConfigurationProperty(IProductModel model) {
+		super(model);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.iproduct.IProductObject#parse(org.w3c.dom.Node)
+	 */
+	public void parse(Node node) {
+		if (node.getNodeType() == Node.ELEMENT_NODE) {
+			Element element = (Element) node;
+			fName = element.getAttribute("name"); //$NON-NLS-1$
+			fValue = element.getAttribute("value"); //$NON-NLS-1$
+		}
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.IWritable#write(java.lang.String, java.io.PrintWriter)
+	 */
+	public void write(String indent, PrintWriter writer) {
+		writer.print(indent + "<property name=\"" + fName + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.print(" value=\"" + fValue + "\""); //$NON-NLS-1$//$NON-NLS-2$
+		writer.println(" />"); //$NON-NLS-1$
+	}
+
+	public String getName() {
+		return fName;
+	}
+
+	public String getValue() {
+		return fValue;
+	}
+
+	public void setName(String name) {
+		String oldValue = fName;
+		fName = name;
+		if (isEditable() && !fName.equals(oldValue)) {
+			firePropertyChanged(P_NAME, oldValue, fName);
+		}
+	}
+
+	public void setValue(String value) {
+		String oldValue = fValue;
+		fValue = value;
+		if (isEditable() && !fValue.equals(oldValue)) {
+			firePropertyChanged(P_VALUE, oldValue, fValue);
+		}
+	}
+
+	public String toString() {
+		return fName + " : " + fValue; //$NON-NLS-1$
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java
index ef71093..83e6407 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ public class Product extends ProductObject implements IProduct {
 
 	private TreeMap fPlugins = new TreeMap();
 	private TreeMap fPluginConfigurations = new TreeMap();
+	private TreeMap fConfigurationProperties = new TreeMap();
 	private List fFeatures = new ArrayList();
 	private IConfigurationFileInfo fConfigIniInfo;
 	private IJREInfo fJVMInfo;
@@ -235,13 +236,18 @@ public class Product extends ProductObject implements IProduct {
 
 		writer.println();
 
-		if (fPluginConfigurations.size() > 0) {
+		if (fConfigurationProperties.size() > 0 || fPluginConfigurations.size() > 0) {
 			writer.println(indent + "   <configurations>"); //$NON-NLS-1$  
 			iter = fPluginConfigurations.values().iterator();
 			while (iter.hasNext()) {
 				IPluginConfiguration configuration = (IPluginConfiguration) iter.next();
 				configuration.write(indent + "      ", writer); //$NON-NLS-1$
 			}
+			iter = fConfigurationProperties.values().iterator();
+			while (iter.hasNext()) {
+				IConfigurationProperty property = (IConfigurationProperty) iter.next();
+				property.write(indent + "      ", writer); //$NON-NLS-1$
+			}
 			writer.println(indent + "   </configurations>"); //$NON-NLS-1$
 		}
 
@@ -269,6 +275,7 @@ public class Product extends ProductObject implements IProduct {
 		fAboutInfo = null;
 		fPlugins.clear();
 		fPluginConfigurations.clear();
+		fConfigurationProperties.clear();
 		fFeatures.clear();
 		fConfigIniInfo = null;
 		fWindowImages = null;
@@ -308,7 +315,7 @@ public class Product extends ProductObject implements IProduct {
 					} else if (name.equals("features")) { //$NON-NLS-1$
 						parseFeatures(child.getChildNodes());
 					} else if (name.equals("configurations")) { //$NON-NLS-1$
-						parsePluginConfigurations(child.getChildNodes());
+						parseConfigations(child.getChildNodes());
 					} else if (name.equals("configIni")) { //$NON-NLS-1$
 						fConfigIniInfo = factory.createConfigFileInfo();
 						fConfigIniInfo.parse(child);
@@ -352,7 +359,7 @@ public class Product extends ProductObject implements IProduct {
 		}
 	}
 
-	private void parsePluginConfigurations(NodeList children) {
+	private void parseConfigations(NodeList children) {
 		for (int i = 0; i < children.getLength(); i++) {
 			Node child = children.item(i);
 			if (child.getNodeType() == Node.ELEMENT_NODE) {
@@ -361,6 +368,11 @@ public class Product extends ProductObject implements IProduct {
 					configuration.parse(child);
 					fPluginConfigurations.put(configuration.getId(), configuration);
 				}
+				if (child.getNodeName().equals("property")) { //$NON-NLS-1$
+					IConfigurationProperty property = getModel().getFactory().createConfigurationProperty();
+					property.parse(child);
+					fConfigurationProperties.put(property.getName(), property);
+				}
 			}
 		}
 	}
@@ -423,6 +435,27 @@ public class Product extends ProductObject implements IProduct {
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.iproduct.IProduct#addConfigurationProperties(org.eclipse.pde.internal.core.iproduct.IConfigurationProperty[])
+	 */
+	public void addConfigurationProperties(IConfigurationProperty[] properties) {
+		boolean modified = false;
+		for (int i = 0; i < properties.length; i++) {
+			if (properties[i] == null)
+				continue;
+			String name = properties[i].getName();
+			if (name == null || fConfigurationProperties.containsKey(name)) {
+				continue;
+			}
+
+			properties[i].setModel(getModel());
+			fConfigurationProperties.put(name, properties[i]);
+			modified = true;
+		}
+		if (modified && isEditable())
+			fireStructureChanged(properties, IModelChangedEvent.INSERT);
+	}
+
+	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.iproduct.IProduct#removePlugins(org.eclipse.pde.internal.core.iproduct.IProductPlugin[])
 	 */
 	public void removePlugins(IProductPlugin[] plugins) {
@@ -461,6 +494,20 @@ public class Product extends ProductObject implements IProduct {
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.iproduct.IProduct#removeConfigurationProperties(org.eclipse.pde.internal.core.iproduct.IConfigurationProperty[])
+	 */
+	public void removeConfigurationProperties(IConfigurationProperty[] properties) {
+		boolean modified = false;
+		for (int i = 0; i < properties.length; i++) {
+			if (fConfigurationProperties.remove(properties[i].getName()) != null) {
+				modified = true;
+			}
+		}
+		if (isEditable() && modified)
+			fireStructureChanged(properties, IModelChangedEvent.REMOVE);
+	}
+
+	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.iproduct.IProduct#getPlugins()
 	 */
 	public IProductPlugin[] getPlugins() {
@@ -475,6 +522,13 @@ public class Product extends ProductObject implements IProduct {
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.iproduct.IProduct#getConfigurationProperties()
+	 */
+	public IConfigurationProperty[] getConfigurationProperties() {
+		return (IConfigurationProperty[]) fConfigurationProperties.values().toArray(new IConfigurationProperty[fConfigurationProperties.size()]);
+	}
+
+	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.iproduct.IProduct#getConfigurationFileInfo()
 	 */
 	public IConfigurationFileInfo getConfigurationFileInfo() {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ProductModelFactory.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ProductModelFactory.java
index 15337a0..961d9c8 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ProductModelFactory.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ProductModelFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Code 9 Corporation - ongoing enhancements
+ *     EclipseSource Corporation - ongoing enhancements
  *******************************************************************************/
 package org.eclipse.pde.internal.core.product;
 
@@ -50,6 +50,13 @@ public class ProductModelFactory implements IProductModelFactory {
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.iproduct.IProductModelFactory#createPropertyConfiguration()
+	 */
+	public IConfigurationProperty createConfigurationProperty() {
+		return new ConfigurationProperty(fModel);
+	}
+
+	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.iproduct.IProductModelFactory#createConfigFileInfo()
 	 */
 	public IConfigurationFileInfo createConfigFileInfo() {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectDescription.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectDescription.java
index eeb64f9..105cdf4 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectDescription.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectDescription.java
@@ -229,7 +229,7 @@ public class BundleProjectDescription implements IBundleProjectDescription {
 				// default bundle classpath of '.'
 				classpath = getClasspathEntries(project, build, "."); //$NON-NLS-1$
 			}
-			setBundleClassath(classpath);
+			setBundleClasspath(classpath);
 			elements = parseHeader(headers, Constants.BUNDLE_SYMBOLICNAME);
 			if (elements != null && elements.length > 0) {
 				setSymbolicName(elements[0].getValue());
@@ -736,6 +736,13 @@ public class BundleProjectDescription implements IBundleProjectDescription {
 	 * @see org.eclipse.pde.core.project.IBundleProjectDescription#setBundleClassath(org.eclipse.pde.core.project.IBundleClasspathSpecification[])
 	 */
 	public void setBundleClassath(IBundleClasspathEntry[] entries) {
+		setBundleClasspath(entries);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.project.IBundleProjectDescription#setBundleClasspath(org.eclipse.pde.core.project.IBundleClasspathEntry[])
+	 */
+	public void setBundleClasspath(IBundleClasspathEntry[] entries) {
 		fBundleClasspath = entries;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java
index 2441a66..fa8860d 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,13 +23,12 @@ import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.project.*;
-import org.eclipse.pde.internal.core.ICoreConstants;
 import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.core.importing.BundleImporterExtension;
-import org.eclipse.pde.internal.core.importing.IBundleImporter;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
 import org.eclipse.pde.internal.core.target.Messages;
 import org.eclipse.pde.internal.core.target.provisional.IResolvedBundle;
+import org.eclipse.team.core.ScmUrlImportDescription;
+import org.eclipse.team.core.Team;
+import org.eclipse.team.core.importing.provisional.IBundleImporter;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Version;
 
@@ -53,8 +52,6 @@ public final class BundleProjectService implements IBundleProjectService {
 
 	private static IBundleProjectService fgDefault;
 
-	private List fProjectFactories;
-
 	/**
 	 * Returns the bundle project service.
 	 * 
@@ -183,22 +180,6 @@ public final class BundleProjectService implements IBundleProjectService {
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.project.IBundleProjectService#getBundleImporters()
-	 */
-	public synchronized IBundleImporter[] getBundleImporters() {
-		if (fProjectFactories == null) {
-			fProjectFactories = new ArrayList();
-			IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(ICoreConstants.EXTENSION_POINT_BUNDLE_IMPORTERS);
-			if (point != null) {
-				IConfigurationElement[] infos = point.getConfigurationElements();
-				for (int i = 0; i < infos.length; i++) {
-					fProjectFactories.add(new BundleImporterExtension(infos[i]));
-				}
-			}
-		}
-		return (IBundleImporter[]) fProjectFactories.toArray(new IBundleImporter[fProjectFactories.size()]);
-	}
 
 	/**
 	 * Creates and returns a map of bundle import descriptions for the given bundles.
@@ -228,21 +209,21 @@ public final class BundleProjectService implements IBundleProjectService {
 		if (!manifests.isEmpty()) {
 			Map[] marray = (Map[]) manifests.toArray(new Map[manifests.size()]);
 			Map result = new HashMap();
-			IBundleImporter[] importers = getBundleImporters();
+			IBundleImporter[] importers = Team.getBundleImporters();
 			for (int i = 0; i < importers.length; i++) {
 				IBundleImporter importer = importers[i];
-				BundleImportDescription[] descriptions = importer.validateImport(marray);
-				List valid = new ArrayList();
+				ScmUrlImportDescription[] descriptions = importer.validateImport(marray);
+				List descriptioonList = new ArrayList();
 				for (int j = 0; j < descriptions.length; j++) {
-					BundleImportDescription description = descriptions[j];
+					ScmUrlImportDescription description = descriptions[j];
 					if (description != null) {
-						valid.add(description);
+						descriptioonList.add(description);
 						description.setProperty(BUNDLE_IMPORTER, importer);
 						description.setProperty(PLUGIN, plugins.get(j));
 					}
 				}
-				if (!valid.isEmpty()) {
-					result.put(importer, valid.toArray(new BundleImportDescription[valid.size()]));
+				if (!descriptioonList.isEmpty()) {
+					result.put(importer, descriptioonList.toArray(new ScmUrlImportDescription[descriptioonList.size()]));
 				}
 			}
 			return result;
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractBundleContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractBundleContainer.java
old mode 100644
new mode 100755
index 212c1a2..605bbd9
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractBundleContainer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractBundleContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,12 +41,12 @@ public abstract class AbstractBundleContainer implements IBundleContainer {
 	/**
 	 * Resolved bundles or <code>null</code> if unresolved
 	 */
-	private IResolvedBundle[] fBundles;
+	protected IResolvedBundle[] fBundles;
 
 	/**
 	 * List of features contained in this bundle container or <code>null</code> if unresolved
 	 */
-	private IFeatureModel[] fFeatures;
+	protected IFeatureModel[] fFeatures;
 
 	/**
 	 * Status generated when this container was resolved, possibly <code>null</code>
@@ -163,7 +163,8 @@ public abstract class AbstractBundleContainer implements IBundleContainer {
 	protected abstract IResolvedBundle[] resolveBundles(ITargetDefinition definition, IProgressMonitor monitor) throws CoreException;
 
 	/**
-	 * Collects all of the features in this container
+	 * Collects all of the features in this container.  May return an empty array if {@link #resolveBundles(ITargetDefinition, IProgressMonitor)}
+	 * has not been called previously.
 	 * <p>
 	 * Subclasses must implement this method.
 	 * </p><p>
@@ -519,23 +520,27 @@ public abstract class AbstractBundleContainer implements IBundleContainer {
 				FrameworkAdmin fwAdmin = (FrameworkAdmin) PDECore.getDefault().acquireService(FrameworkAdmin.class.getName());
 				if (fwAdmin == null) {
 					Bundle fwAdminBundle = Platform.getBundle(FWK_ADMIN_EQ);
-					fwAdminBundle.start();
-					fwAdmin = (FrameworkAdmin) PDECore.getDefault().acquireService(FrameworkAdmin.class.getName());
+					if (fwAdminBundle != null){
+						fwAdminBundle.start();
+						fwAdmin = (FrameworkAdmin) PDECore.getDefault().acquireService(FrameworkAdmin.class.getName());
+					}
+				}
+				if (fwAdmin != null) {
+					Manipulator manipulator = fwAdmin.getManipulator();
+					ConfigData configData = new ConfigData(null, null, null, null);
+
+					String home = getLocation(true);
+					manipulator.getLauncherData().setLauncher(new File(home, "eclipse")); //$NON-NLS-1$
+					File installDirectory = new File(home);
+					if (Platform.getOS().equals(Platform.OS_MACOSX))
+						installDirectory = new File(installDirectory, "Eclipse.app/Contents/MacOS"); //$NON-NLS-1$
+					manipulator.getLauncherData().setLauncherConfigLocation(new File(installDirectory, "eclipse.ini")); //$NON-NLS-1$
+					manipulator.getLauncherData().setHome(new File(home));
+
+					manipulator.setConfigData(configData);
+					manipulator.load();
+					fVMArgs = manipulator.getLauncherData().getJvmArgs();
 				}
-				Manipulator manipulator = fwAdmin.getManipulator();
-				ConfigData configData = new ConfigData(null, null, null, null);
-
-				String home = getLocation(true);
-				manipulator.getLauncherData().setLauncher(new File(home, "eclipse")); //$NON-NLS-1$
-				File installDirectory = new File(home);
-				if (Platform.getOS().equals(Platform.OS_MACOSX))
-					installDirectory = new File(installDirectory, "Eclipse.app/Contents/MacOS"); //$NON-NLS-1$
-				manipulator.getLauncherData().setLauncherConfigLocation(new File(installDirectory, "eclipse.ini")); //$NON-NLS-1$
-				manipulator.getLauncherData().setHome(new File(home));
-
-				manipulator.setConfigData(configData);
-				manipulator.load();
-				fVMArgs = manipulator.getLauncherData().getJvmArgs();
 			} catch (BundleException e) {
 				PDECore.log(e);
 			} catch (CoreException e) {
@@ -550,4 +555,14 @@ public abstract class AbstractBundleContainer implements IBundleContainer {
 		}
 		return fVMArgs;
 	}
+
+	/**
+	 * Associate this bundle container with the given target.  This allows for the container and 
+	 * the target to share configuration information etc.  
+	 * 
+	 * @param target the target to which this container is being added.
+	 */
+	protected void associateWithTarget(ITargetDefinition target) {
+		// Do nothing by default
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractTargetHandle.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractTargetHandle.java
old mode 100644
new mode 100755
index cf9d79b..7de0a91
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractTargetHandle.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/AbstractTargetHandle.java
@@ -7,17 +7,12 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     EclipseSource Inc. - initial API and implementation
  *******************************************************************************/
 package org.eclipse.pde.internal.core.target;
 
-import java.io.File;
 import java.io.InputStream;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.equinox.p2.engine.IProfileRegistry;
-import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
 import org.eclipse.pde.internal.core.target.provisional.ITargetHandle;
 
@@ -28,41 +23,6 @@ import org.eclipse.pde.internal.core.target.provisional.ITargetHandle;
  */
 public abstract class AbstractTargetHandle implements ITargetHandle {
 
-	/**
-	 * Path to the local directory where the local bundle pool is stored for p2 profile
-	 * based targets.
-	 */
-	public static final IPath BUNDLE_POOL = PDECore.getDefault().getStateLocation().append(".bundle_pool"); //$NON-NLS-1$
-
-	/**
-	 * Path to the local directory where install folders are created for p2 profile
-	 * based targets.
-	 */
-	static final IPath INSTALL_FOLDERS = PDECore.getDefault().getStateLocation().append(".install_folders"); //$NON-NLS-1$	
-
-	/**
-	 * Prefix for all profiles ID's associated with target definitions
-	 */
-	static final String PROFILE_ID_PREFIX = "TARGET_DEFINITION:"; //$NON-NLS-1$
-
-	/**
-	 * Installable unit property to mark IU's that have been installed in a profile by
-	 * a bundle container (rather than as a secondary/required IU).
-	 */
-	static final String PROP_INSTALLED_IU = PDECore.PLUGIN_ID + ".installed_iu"; //$NON-NLS-1$
-
-	/**
-	 * Profile property that keeps track of provisioning mode for the target
-	 * (slice versus plan).
-	 */
-	static final String PROP_PROVISION_MODE = PDECore.PLUGIN_ID + ".provision_mode"; //$NON-NLS-1$
-
-	/**
-	 * Profile property that keeps track of provisioning mode for the target
-	 * (all environments/true versus false).
-	 */
-	static final String PROP_ALL_ENVIRONMENTS = PDECore.PLUGIN_ID + ".all_environments"; //$NON-NLS-1$	
-
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetHandle#getTargetDefinition()
 	 */
@@ -96,69 +56,4 @@ public abstract class AbstractTargetHandle implements ITargetHandle {
 	 * @throws CoreException on failure
 	 */
 	abstract void save(ITargetDefinition definition) throws CoreException;
-
-	/**
-	 * Returns the profile identifier for this target handle. There is one profile
-	 * per target definition.
-	 * 
-	 * @return profile identifier
-	 * @throws CoreException in unable to generate identifier
-	 */
-	String getProfileId() throws CoreException {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(PROFILE_ID_PREFIX);
-		buffer.append(getMemento());
-		return buffer.toString();
-	}
-
-	/**
-	 * Deletes the profile associated with this target handle, if any. Returns
-	 * <code>true</code> if a profile existed and was deleted, otherwise <code>false</code>.
-	 * 
-	 * @throws CoreException if unable to delete the profile
-	 */
-	void deleteProfile() throws CoreException {
-		IProfileRegistry registry = getProfileRegistry();
-		if (registry != null) {
-			IProfile profile = registry.getProfile(getProfileId());
-			if (profile != null) {
-				String location = profile.getProperty(IProfile.PROP_INSTALL_FOLDER);
-				registry.removeProfile(getProfileId());
-				if (location != null && location.length() > 0) {
-					File folder = new File(location);
-					if (folder.exists()) {
-						delete(folder);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Recursively deletes folder and files.
-	 * 
-	 * @param folder
-	 */
-	private void delete(File folder) {
-		File[] files = folder.listFiles();
-		for (int i = 0; i < files.length; i++) {
-			File file = files[i];
-			if (file.isDirectory()) {
-				delete(file);
-			}
-			file.delete();
-		}
-		folder.delete();
-	}
-
-	/**
-	 * Returns the profile registry or <code>null</code>
-	 * 
-	 * @return profile registry or <code>null</code>
-	 */
-	static IProfileRegistry getProfileRegistry() {
-		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		return (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
-	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/DirectoryBundleContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/DirectoryBundleContainer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/FeatureBundleContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/FeatureBundleContainer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
index 7ea3bb4..7c02e5c 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Sonatype, Inc. - ongoing development
+ *     EclipseSource, Inc. - ongoing development
  *******************************************************************************/
 package org.eclipse.pde.internal.core.target;
 
@@ -16,18 +17,10 @@ import java.net.URI;
 import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.internal.p2.director.PermissiveSlicer;
-import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.engine.*;
+import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.planner.IPlanner;
 import org.eclipse.equinox.p2.query.*;
-import org.eclipse.equinox.p2.repository.IRepositoryManager;
-import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
 import org.eclipse.equinox.p2.repository.artifact.IFileArtifactRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
 import org.eclipse.equinox.p2.touchpoint.eclipse.query.OSGiBundleQuery;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.core.PDECore;
@@ -52,6 +45,26 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	private static final String FEATURE_ID_SUFFIX = ".feature.group"; //$NON-NLS-1$
 
 	/**
+	 * Whether this container must have all required IUs of the selected IUs available and included
+	 * in the target to resolve successfully.  If this option is true, the planner will be used to resolve
+	 * otherwise the slicer is used.  The planner can describe any missing requirements as errors.
+	 */
+	public static final int INCLUDE_REQUIRED = 1 << 0;
+
+	/**
+	 * Whether this container should download and include environment (platform) specific units for all
+	 * available platforms (vs only the current target definition's environment settings).  Only supported 
+	 * by the slicer so {@link fIncludeAllRequired} must be turned off for this setting to be used.
+	 */
+	public static final int INCLUDE_ALL_ENVIRONMENTS = 1 << 1;
+
+	/**
+	 * Whether this container should download and include source bundles for the selected units if the associated
+	 * source is available in the repository.
+	 */
+	public static final int INCLUDE_SOURCE = 1 << 2;
+
+	/**
 	 * IU identifiers.
 	 */
 	private String[] fIds;
@@ -68,45 +81,38 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	private IInstallableUnit[] fUnits;
 
 	/**
-	 * Cached id/version pairs listing the features that were downloaded to the bundle pool during resolution.  <code>null</code> if not resolved.
-	 */
-	private NameVersionDescriptor[] fFeatures;
-
-	/**
 	 * Repositories to consider, or <code>null</code> if default.
 	 */
 	private URI[] fRepos;
 
 	/**
-	 * Whether this container must have all required IUs of the selected IUs available and included
-	 * in the target to resolve successfully.  If this option is true, the planner will be used to resolve
-	 * otherwise the slicer is used.  The planner can describe any missing requirements as errors.
-	 * <p>
-	 * <code>true</code> by default
-	 * </p>
+	 * A set of bitmask flags that indicate how this container gets elements from its
+	 * associated p2 repository.
 	 */
-	private boolean fIncludeAllRequired = true;
+	private int fFlags;
 
 	/**
-	 * Whether this container should download and include environment (platform) specific units for all
-	 * available platforms (vs only the current target definition's environment settings).  Only supported 
-	 * by the slicer so {@link fIncludeAllRequired} must be turned off for this setting to be used.
-	 * <p>
-	 * <code>false</code> by default
-	 * </p>
+	 *  The p2 synchronizer to use in managing this container.
 	 */
-	private boolean fIncludeMultipleEnvironments = false;
+	private P2TargetUtils fSynchronizer;
+
+	private static final boolean DEBUG_PROFILE;
+
+	static {
+		DEBUG_PROFILE = PDECore.getDefault().isDebugging() && "true".equals(Platform.getDebugOption("org.eclipse.pde.core/target/profile")); //$NON-NLS-1$ //$NON-NLS-2$
+	}
 
 	/**
 	 * Constructs a installable unit bundle container for the specified units.
 	 * 
 	 * @param ids IU identifiers
 	 * @param versions IU versions
-	 * @param repositories metadata repositories used to search for IU's or <code>null</code> if
-	 *   default set
+	 * @param repositories metadata repositories used to search for IU's or <code>null</code> for default set
+	 * @param resolutionFlags bitmask of flags to control IU resolution, possible flags are {@link IUBundleContainer#INCLUDE_ALL_ENVIRONMENTS}, {@link IUBundleContainer#INCLUDE_REQUIRED}, {@link IUBundleContainer#INCLUDE_SOURCE}
 	 */
-	IUBundleContainer(String[] ids, String[] versions, URI[] repositories) {
+	IUBundleContainer(String[] ids, String[] versions, URI[] repositories, int resolutionFlags) {
 		fIds = ids;
+		fFlags = resolutionFlags;
 		fVersions = new Version[versions.length];
 		for (int i = 0; i < versions.length; i++) {
 			fVersions[i] = Version.create(versions[i]);
@@ -123,12 +129,12 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	 * Constructs a installable unit bundle container for the specified units.
 	 * 
 	 * @param units IU's
-	 * @param repositories metadata repositories used to search for IU's or <code>null</code> if
-	 *   default set
+	 * @param repositories metadata repositories used to search for IU's or <code>null</code> for default set
+	 * @param resolutionFlags bitmask of flags to control IU resolution, possible flags are {@link IUBundleContainer#INCLUDE_ALL_ENVIRONMENTS}, {@link IUBundleContainer#INCLUDE_REQUIRED}, {@link IUBundleContainer#INCLUDE_SOURCE}
 	 */
-	IUBundleContainer(IInstallableUnit[] units, URI[] repositories) {
-		fUnits = units;
+	IUBundleContainer(IInstallableUnit[] units, URI[] repositories, int resolutionFlags) {
 		fIds = new String[units.length];
+		fFlags = resolutionFlags;
 		fVersions = new Version[units.length];
 		for (int i = 0; i < units.length; i++) {
 			fIds[i] = units[i].getId();
@@ -145,7 +151,7 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	 * @see org.eclipse.pde.internal.core.target.impl.AbstractBundleContainer#getLocation(boolean)
 	 */
 	public String getLocation(boolean resolve) throws CoreException {
-		return AbstractTargetHandle.BUNDLE_POOL.toOSString();
+		return P2TargetUtils.BUNDLE_POOL.toOSString();
 	}
 
 	/* (non-Javadoc)
@@ -159,542 +165,236 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	 * @see org.eclipse.pde.internal.core.target.AbstractBundleContainer#resolveFeatures(org.eclipse.pde.internal.core.target.provisional.ITargetDefinition, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	protected IFeatureModel[] resolveFeatures(ITargetDefinition definition, IProgressMonitor monitor) throws CoreException {
-		if (fFeatures == null || fFeatures.length == 0 || !(definition instanceof TargetDefinition)) {
-			return new IFeatureModel[0];
-		}
+		fSynchronizer.synchronize(definition, monitor);
+		return fFeatures;
+	}
 
-		// Note: By creating a map of the container features, we are limiting the user to only one version of a feature in this container
+	/**
+	 * Update this container's cache of feature objects based on the given profile.
+	 * NOTE: this method expects the synchronizer to be synchronized and is called
+	 * as a result of a synchronization operation.
+	 */
+	IFeatureModel[] cacheFeatures(ITargetDefinition target) throws CoreException {
+		// Ideally we would compute the list of features specific to this container but that 
+		// would require running the slicer again to follow the dependencies from this 
+		// container's roots.  Instead, here we find all features in the shared profile.  This means
+		// that all IU containers will return the same thing for getFeatures.  In practice this is 
+		// ok because we remove duplicates in TargetDefinition#getAllFeatures.
 
-		// Get all the features in the bundle pool
-		IFeatureModel[] allFeatures = ((TargetDefinition) definition).getFeatureModels(getLocation(false), monitor);
+		Set features = new HashSet();
+		IQueryResult queryResult = fSynchronizer.getProfile().query(QueryUtil.createIUAnyQuery(), null);
+		if (queryResult.isEmpty()) {
+			return new IFeatureModel[0];
+		}
 
-		// Create a map of the container features for quick lookups
-		HashMap containerFeatures = new HashMap();
-		for (int i = 0; i < fFeatures.length; i++) {
-			containerFeatures.put(fFeatures[i].getId(), fFeatures[i]);
+		for (Iterator i = queryResult.iterator(); i.hasNext();) {
+			IInstallableUnit unit = (IInstallableUnit) i.next();
+			String id = unit.getId();
+			// if the IU naming convention says it is a feature, then add it. 
+			// This is less than optimal but there is no clear way of identifying an IU as a feature.
+			if (id.endsWith(FEATURE_ID_SUFFIX)) {
+				id = id.substring(0, id.length() - FEATURE_ID_SUFFIX.length());
+				String version = unit.getVersion().toString();
+				features.add(new NameVersionDescriptor(id, version, NameVersionDescriptor.TYPE_FEATURE));
+			}
 		}
+		if (features.isEmpty()) {
+			return new IFeatureModel[0];
+		}
+
+		// Now get feature models for all known features
+		IFeatureModel[] allFeatures = ((TargetDefinition) target).getFeatureModels(getLocation(false), new NullProgressMonitor());
 
-		List includedFeatures = new ArrayList();
+		// Build a final set of the models for the features in the profile.
+		List result = new ArrayList();
 		for (int i = 0; i < allFeatures.length; i++) {
-			NameVersionDescriptor candidate = (NameVersionDescriptor) containerFeatures.get(allFeatures[i].getFeature().getId());
-			if (candidate != null) {
-				if (candidate.getVersion().equals(allFeatures[i].getFeature().getVersion())) {
-					includedFeatures.add(allFeatures[i]);
-				}
+			NameVersionDescriptor candidate = new NameVersionDescriptor(allFeatures[i].getFeature().getId(), allFeatures[i].getFeature().getVersion(), NameVersionDescriptor.TYPE_FEATURE);
+			if (features.contains(candidate)) {
+				result.add(allFeatures[i]);
 			}
 		}
-		return (IFeatureModel[]) includedFeatures.toArray(new IFeatureModel[includedFeatures.size()]);
+		fFeatures = (IFeatureModel[]) result.toArray(new IFeatureModel[result.size()]);
+		return fFeatures;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.target.impl.AbstractBundleContainer#resolveBundles(org.eclipse.pde.internal.core.target.provisional.ITargetDefinition, org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	protected IResolvedBundle[] resolveBundles(ITargetDefinition definition, IProgressMonitor monitor) throws CoreException {
-		fFeatures = null; // Resolving may change the included features
-		if (fIncludeAllRequired) {
-			return resolveWithPlanner(definition, monitor);
-		}
-		return resolveWithSlicer(definition, monitor);
+		fSynchronizer.synchronize(definition, monitor);
+		return fBundles;
 	}
 
 	/**
-	 * Used to resolve the contents of this container if the user is including all required software.  The p2 planner is used
-	 * to determine the complete set of IUs required to run the selected software.  If all requirements are met, the bundles
-	 * are downloaded from the repository into the bundle pool and added to the target definition.
-	 * 
-	 * @param definition definition being resolved
-	 * @param monitor for reporting progress
-	 * @return set of bundles included in this container
-	 * @throws CoreException if there is a problem with the requirements or there is a problem downloading
+	 * Update this container's cache of top level IUs based on the given profile.
+	 * NOTE: this method expects the synchronizer to be synchronized and is called
+	 * as a result of a synchronization operation.
 	 */
-	private IResolvedBundle[] resolveWithPlanner(ITargetDefinition definition, IProgressMonitor monitor) throws CoreException {
-		SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 10);
-		subMonitor.beginTask(Messages.IUBundleContainer_0, 210);
-
-		// retrieve profile
-		IProfile profile = ((TargetDefinition) definition).getProfile();
-		subMonitor.worked(10);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// resolve IUs
-		IInstallableUnit[] units = getInstallableUnits(profile);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// create the provisioning plan
-		ProfileChangeRequest request = new ProfileChangeRequest(profile);
-		request.addAll(Arrays.asList(units));
-		for (int i = 0; i < units.length; i++) {
-			IInstallableUnit unit = units[i];
-			request.setInstallableUnitProfileProperty(unit, AbstractTargetHandle.PROP_INSTALLED_IU, Boolean.toString(true));
-		}
-		IPlanner planner = getPlanner();
-		URI[] repositories = resolveRepositories();
-		ProvisioningContext context = new ProvisioningContext(getAgent());
-		context.setMetadataRepositories(repositories);
-		context.setArtifactRepositories(repositories);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		IProvisioningPlan plan = planner.getProvisioningPlan(request, context, new SubProgressMonitor(subMonitor, 10));
-		IStatus status = plan.getStatus();
-		if (!status.isOK()) {
-			throw new CoreException(status);
-		}
-		IProvisioningPlan installerPlan = plan.getInstallerPlan();
-		if (installerPlan != null) {
-			// this plan requires an update to the installer first, log the fact and attempt
-			// to continue, we don't want to update the running SDK while provisioning a target
-			PDECore.log(new Status(IStatus.INFO, PDECore.PLUGIN_ID, Messages.IUBundleContainer_6));
+	IInstallableUnit[] cacheIUs(ITargetDefinition target) throws CoreException {
+		IProfile profile = fSynchronizer.getProfile();
+		ArrayList result = new ArrayList();
+		for (int i = 0; i < fIds.length; i++) {
+			IQuery query = QueryUtil.createIUQuery(fIds[i], fVersions[i]);
+			IQueryResult queryResult = profile.query(query, null);
+			if (queryResult.isEmpty())
+				throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.IUBundleContainer_1, fIds[i])));
+			result.add(queryResult.iterator().next());
 		}
-		subMonitor.worked(10);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// execute the provisioning plan
-		IPhaseSet phases = PhaseSetFactory.createDefaultPhaseSetExcluding(new String[] {PhaseSetFactory.PHASE_CHECK_TRUST, PhaseSetFactory.PHASE_CONFIGURE, PhaseSetFactory.PHASE_UNCONFIGURE, PhaseSetFactory.PHASE_UNINSTALL});
-		IEngine engine = getEngine();
-		plan.setProfileProperty(AbstractTargetHandle.PROP_PROVISION_MODE, TargetDefinitionPersistenceHelper.MODE_PLANNER);
-		plan.setProfileProperty(AbstractTargetHandle.PROP_ALL_ENVIRONMENTS, Boolean.toString(false));
-		IStatus result = engine.perform(plan, phases, new SubProgressMonitor(subMonitor, 140));
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-		if (!result.isOK()) {
-			throw new CoreException(result);
-		}
-
-		// slice IUs and all prerequisites
-		PermissiveSlicer slicer = new PermissiveSlicer(profile, new Properties(), true, false, true, false, false);
-		IQueryable slice = slicer.slice(units, new SubProgressMonitor(subMonitor, 10));
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// query for bundles
-		OSGiBundleQuery query = new OSGiBundleQuery();
-		IQueryResult queryResult = slice.query(query, new SubProgressMonitor(subMonitor, 10));
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// Cache the feature list
-		queryForFeatures(slice);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		Map bundles = new LinkedHashMap();
-		IFileArtifactRepository repo = getBundlePool(profile);
-		for (Iterator iterator = queryResult.iterator(); iterator.hasNext();) {
-			IInstallableUnit unit = (IInstallableUnit) iterator.next();
-			Collection/*<IArtifactKey*/artifacts = unit.getArtifacts();
-			for (Iterator iterator2 = artifacts.iterator(); iterator2.hasNext();) {
-				File file = repo.getArtifactFile((IArtifactKey) iterator2.next());
-				if (file == null) {
-					// TODO: missing bundle
-				} else {
-					IResolvedBundle bundle = generateBundle(file);
-					if (bundle != null) {
-						bundles.put(bundle.getBundleInfo(), bundle);
-					}
-				}
-			}
-		}
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// remove all bundles from previous IU containers (so we don't get duplicates from multi-locations
-		IBundleContainer[] containers = definition.getBundleContainers();
-		for (int i = 0; i < containers.length; i++) {
-			IBundleContainer container = containers[i];
-			if (container == this) {
-				break;
-			}
-			if (container instanceof IUBundleContainer) {
-				IUBundleContainer bc = (IUBundleContainer) container;
-				IResolvedBundle[] included = bc.getBundles();
-				if (included != null) {
-					for (int j = 0; j < included.length; j++) {
-						bundles.remove(included[j].getBundleInfo());
-					}
-				}
-			}
-		}
-		subMonitor.worked(10);
-		subMonitor.done();
-		return (ResolvedBundle[]) bundles.values().toArray(new ResolvedBundle[bundles.size()]);
+		fUnits = (IInstallableUnit[]) result.toArray(new IInstallableUnit[result.size()]);
+		return fUnits;
 	}
 
 	/**
-	 * Used to resolve the contents of this container when the user has chosen to manage the dependencies in the target
-	 * themselves.  The selected IUs and any required software that can be found will be retrieved from the repositories 
-	 * and added to the target.  Any missing required software will be ignored.
-	 * 
-	 * @param definition definition being resolved
-	 * @param monitor for reporting progress
-	 * @return set of resolved bundles included in this container
-	 * @throws CoreException if there is a problem interacting with the repositories
+	 * Update this container's cache of bundle objects based on the given profile.
+	 * NOTE: this method expects the synchronizer to be synchronized and is called
+	 * as a result of a synchronization operation.
 	 */
-	private IResolvedBundle[] resolveWithSlicer(ITargetDefinition definition, IProgressMonitor monitor) throws CoreException {
-		SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 10);
-		subMonitor.beginTask(Messages.IUBundleContainer_0, 200);
-
-		// retrieve profile
-		IProfile profile = ((TargetDefinition) definition).getProfile();
-		subMonitor.worked(10);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// resolve IUs
-		IInstallableUnit[] units = getInstallableUnits(profile);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		URI[] repositories = resolveRepositories();
-		int repoCount = repositories.length;
-		if (repoCount == 0) {
-			return new IResolvedBundle[0];
-		}
-
-		IProgressMonitor loadMonitor = new SubProgressMonitor(subMonitor, 10);
-		loadMonitor.beginTask(null, repoCount * 10);
-		List metadataRepos = new ArrayList(repoCount);
-		MultiStatus repoStatus = new MultiStatus(PDECore.PLUGIN_ID, 0, Messages.IUBundleContainer_ProblemsLoadingRepositories, null);
-		IMetadataRepositoryManager manager = getRepoManager();
-		for (int i = 0; i < repoCount; ++i) {
-			try {
-				IMetadataRepository repo = manager.loadRepository(repositories[i], new SubProgressMonitor(loadMonitor, 10));
-				metadataRepos.add(repo);
-			} catch (ProvisionException e) {
-				repoStatus.add(e.getStatus());
-			}
-		}
-		loadMonitor.done();
-
-		IQueryable allMetadata;
-		if (metadataRepos.size() == 0) {
-			throw new CoreException(repoStatus);
-		} else if (metadataRepos.size() == 1) {
-			allMetadata = (IQueryable) metadataRepos.get(0);
-		} else {
-			allMetadata = QueryUtil.compoundQueryable(metadataRepos);
-		}
-
-		// slice IUs and all prerequisites
-		PermissiveSlicer slicer = null;
-		if (getIncludeAllEnvironments()) {
-			slicer = new PermissiveSlicer(allMetadata, new Properties(), true, false, true, true, false);
-		} else {
-			Properties props = new Properties();
-			props.setProperty("osgi.os", definition.getOS() != null ? definition.getOS() : Platform.getOS()); //$NON-NLS-1$
-			props.setProperty("osgi.ws", definition.getWS() != null ? definition.getWS() : Platform.getWS()); //$NON-NLS-1$
-			props.setProperty("osgi.arch", definition.getArch() != null ? definition.getArch() : Platform.getOSArch()); //$NON-NLS-1$
-			props.setProperty("osgi.nl", definition.getNL() != null ? definition.getNL() : Platform.getNL()); //$NON-NLS-1$
-			props.setProperty(IProfile.PROP_INSTALL_FEATURES, Boolean.TRUE.toString());
-			slicer = new PermissiveSlicer(allMetadata, props, true, false, false, true, false);
-		}
-		IQueryable slice = slicer.slice(units, new SubProgressMonitor(subMonitor, 10));
-		if (slice == null) {
-			// The PermissiveSlicer may return null if an error occurs
-			return new IResolvedBundle[0];
-		}
-		IQueryResult queryResult = slice.query(QueryUtil.createIUAnyQuery(), new SubProgressMonitor(subMonitor, 10));
-
-		if (subMonitor.isCanceled() || queryResult.isEmpty()) {
-			return new IResolvedBundle[0];
-		}
-
-		IEngine engine = getEngine();
-		ProvisioningContext context = new ProvisioningContext(getAgent());
-		context.setMetadataRepositories(repositories);
-		context.setArtifactRepositories(repositories);
-		IProvisioningPlan plan = engine.createPlan(profile, context);
-
-		Set querySet = queryResult.toUnmodifiableSet();
-		Iterator itor = querySet.iterator();
-		while (itor.hasNext()) {
-			plan.addInstallableUnit((IInstallableUnit) itor.next());
-		}
-		for (int i = 0; i < units.length; i++) {
-			IInstallableUnit unit = units[i];
-			plan.setInstallableUnitProfileProperty(unit, AbstractTargetHandle.PROP_INSTALLED_IU, Boolean.toString(true));
-		}
-		plan.setProfileProperty(AbstractTargetHandle.PROP_PROVISION_MODE, TargetDefinitionPersistenceHelper.MODE_SLICER);
-		plan.setProfileProperty(AbstractTargetHandle.PROP_ALL_ENVIRONMENTS, Boolean.toString(getIncludeAllEnvironments()));
-
-		// execute the provisioning plan
-		IPhaseSet phases = PhaseSetFactory.createDefaultPhaseSetExcluding(new String[] {PhaseSetFactory.PHASE_CHECK_TRUST, PhaseSetFactory.PHASE_CONFIGURE, PhaseSetFactory.PHASE_UNCONFIGURE, PhaseSetFactory.PHASE_UNINSTALL});
-		IStatus result = engine.perform(plan, phases, new SubProgressMonitor(subMonitor, 140));
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-		if (!result.isOK()) {
-			throw new CoreException(result);
-		}
-
-		// slice IUs and all prerequisites
-		slicer = new PermissiveSlicer(profile, new Properties(), true, false, true, false, false);
-		slice = slicer.slice(units, new SubProgressMonitor(subMonitor, 10));
+	IResolvedBundle[] cacheBundles(ITargetDefinition target) throws CoreException {
+		// slice the profile to find the bundles attributed to this container.
+		// Look only for strict dependencies if we are using the slicer.
+		// We can always consider all platforms since the profile wouldn't contain it if it was not interesting
+		boolean onlyStrict = !fSynchronizer.getIncludeAllRequired();
+		IProfile metadata = fSynchronizer.getProfile();
+		PermissiveSlicer slicer = new PermissiveSlicer(metadata, new HashMap(), true, false, true, onlyStrict, false);
+		IQueryable slice = slicer.slice(fUnits, new NullProgressMonitor());
 
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
+		if (slicer.getStatus().getSeverity() == IStatus.ERROR) {
+			// If the slicer has an error, report it instead of returning an empty set
+			throw new CoreException(slicer.getStatus());
 		}
 
 		// query for bundles
-		queryResult = slice.query(new OSGiBundleQuery(), new SubProgressMonitor(subMonitor, 10));
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// Cache the feature list
-		queryForFeatures(slice);
-
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		Map bundles = new LinkedHashMap();
-		IFileArtifactRepository repo = getBundlePool(profile);
-		Iterator iterator = queryResult.iterator();
-		while (iterator.hasNext()) {
-			IInstallableUnit unit = (IInstallableUnit) iterator.next();
-			Collection/*<IArtifactKey>*/artifacts = unit.getArtifacts();
-			for (Iterator iterator2 = artifacts.iterator(); iterator2.hasNext();) {
-				File file = repo.getArtifactFile((IArtifactKey) iterator2.next());
-				if (file == null) {
-					// TODO: missing bundle
-				} else {
-					IResolvedBundle bundle = generateBundle(file);
-					if (bundle != null) {
-						bundles.put(bundle.getBundleInfo(), bundle);
-					}
-				}
+		IFileArtifactRepository artifacts = null;
+		try {
+			artifacts = P2TargetUtils.getBundlePool();
+		} catch (CoreException e) {
+			if (DEBUG_PROFILE) {
+				System.out.println("Bundle pool repository could not be loaded"); //$NON-NLS-1$
 			}
+			return fBundles = null;
 		}
 
-		if (subMonitor.isCanceled()) {
-			return new IResolvedBundle[0];
-		}
-
-		// remove all bundles from previous IU containers (so we don't get duplicates from multi-locations
-		IBundleContainer[] containers = definition.getBundleContainers();
-		for (int i = 0; i < containers.length; i++) {
-			IBundleContainer container = containers[i];
-			if (container == this) {
-				break;
+		Map bundles = generateResolvedBundles(slice, metadata, artifacts);
+		if (bundles.isEmpty()) {
+			if (DEBUG_PROFILE) {
+				System.out.println("Profile does not contain any bundles or artifacts were missing"); //$NON-NLS-1$
 			}
-			if (container instanceof IUBundleContainer) {
-				IUBundleContainer bc = (IUBundleContainer) container;
-				IResolvedBundle[] included = bc.getBundles();
-				if (included != null) {
-					for (int j = 0; j < included.length; j++) {
-						bundles.remove(included[j].getBundleInfo());
-					}
-				}
+			if (slicer.getStatus().getSeverity() == IStatus.WARNING) {
+				// If the slicer has warnings, they probably caused there to be no bundles available
+				throw new CoreException(slicer.getStatus());
 			}
+
+			return fBundles = null;
 		}
-		subMonitor.worked(10);
-		subMonitor.done();
-		return (ResolvedBundle[]) bundles.values().toArray(new ResolvedBundle[bundles.size()]);
+
+		fBundles = (ResolvedBundle[]) bundles.values().toArray(new ResolvedBundle[bundles.size()]);
+		return fBundles;
 	}
 
-	/**
-	 * Queries the given given queryable and finds all feature group IUs.  The feature id/versions of the features
-	 * are cached in {@link #fFeatures}.
-	 * 
-	 * @param queryable profile/slicer/etc. to query for features
-	 */
-	private void queryForFeatures(IQueryable queryable) {
-		// Query for features, cache the result for calls to resolveFeatures()
-		// Get any IU with the group property, this will return any feature groups
-		IQuery featureQuery = QueryUtil.createMatchQuery("properties[$0] == $1", new Object[] {MetadataFactory.InstallableUnitDescription.PROP_TYPE_GROUP, Boolean.TRUE.toString()}); //$NON-NLS-1$
-		IQueryResult featureResult = queryable.query(featureQuery, null);
-		List features = new ArrayList();
-		for (Iterator iterator = featureResult.iterator(); iterator.hasNext();) {
-			IInstallableUnit unit = (IInstallableUnit) iterator.next();
-			String id = unit.getId();
-			if (id.endsWith(FEATURE_ID_SUFFIX)) {
-				id = id.substring(0, id.length() - FEATURE_ID_SUFFIX.length());
-			}
-			String version = unit.getVersion().toString();
-			features.add(new NameVersionDescriptor(id, version, NameVersionDescriptor.TYPE_FEATURE));
-		}
-		fFeatures = (NameVersionDescriptor[]) features.toArray(new NameVersionDescriptor[features.size()]);
+	/*
+	 * Respond to the notification that the synchronizer associated with this container has changed
+	 * This is a callback method used by the synchronizer.
+	 * It should NOT be called any other time.
+	 */
+	void synchronizerChanged(ITargetDefinition target) throws CoreException {
+		// cache the IUs first as they are used to slice the profile for the other caches.
+		cacheIUs(target);
+		cacheBundles(target);
+		cacheFeatures(target);
 	}
 
 	/**
-	 * Returns the IU's this container references. Checks in the profile first to avoid
-	 * going out to repositories.
+	 * Update the root IUs to the latest available in the repos associated with this container.
 	 * 
-	 * @param profile profile to check first
-	 * @return IU's
+	 * @param toUpdate the set of IU ids in this container to consider updating.  If empty
+	 * then update everything
+	 * @return a bitmasked int indicating how/if this container changed.  See DIRTY and UPDATED. 
 	 * @exception CoreException if unable to retrieve IU's
 	 */
-	public synchronized IInstallableUnit[] getInstallableUnits(IProfile profile) throws CoreException {
-		if (fUnits == null) {
-			fUnits = new IInstallableUnit[fIds.length];
-			for (int i = 0; i < fIds.length; i++) {
-				IQuery query = QueryUtil.createIUQuery(fIds[i], fVersions[i]);
-				IQueryResult queryResult = profile.query(query, null);
-				if (queryResult.isEmpty()) {
-					// try repositories
-					URI[] repositories = resolveRepositories();
-					for (int j = 0; j < repositories.length; j++) {
-						try {
-							IMetadataRepository repository = getRepository(repositories[j]);
-							queryResult = repository.query(query, null);
-							if (!queryResult.isEmpty()) {
-								break;
-							}
-						} catch (ProvisionException e) {
-							// Ignore and move on to the next site
-						}
-					}
+	public synchronized int update(Set toUpdate, IProgressMonitor monitor) throws CoreException {
+		SubMonitor progress = SubMonitor.convert(monitor, 100);
+		IQueryable source = P2TargetUtils.getQueryableMetadata(fRepos, progress.newChild(30));
+		int dirty = 0;
+		int updated = 0;
+		SubMonitor loopProgress = progress.newChild(70).setWorkRemaining(fIds.length);
+		for (int i = 0; i < fIds.length; i++) {
+			if (!toUpdate.isEmpty() && !toUpdate.contains(fIds[i]))
+				continue;
+			IQuery query = QueryUtil.createLatestQuery(QueryUtil.createIUQuery(fIds[i]));
+			IQueryResult queryResult = source.query(query, loopProgress.newChild(1));
+			Iterator it = queryResult.iterator();
+			// bail if the feature is no longer available.
+			if (!it.hasNext())
+				throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.IUBundleContainer_1, fIds[i])));
+			IInstallableUnit iu = (IInstallableUnit) it.next();
+			// if the version is different from the spec (up or down), record the change.
+			if (!iu.getVersion().equals(fVersions[i])) {
+				updated = UpdateTargetJob.UPDATED;
+				// if the spec was not specific (e.g., 0.0.0) the target def itself has changed.
+				if (!fVersions[i].equals(Version.emptyVersion)) {
+					fVersions[i] = iu.getVersion();
+					dirty = UpdateTargetJob.DIRTY;
 				}
-				if (queryResult.isEmpty()) {
-					// not found
-					fUnits = null;
-					throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.IUBundleContainer_1, fIds[i])));
-				}
-				fUnits[i] = (IInstallableUnit) queryResult.iterator().next();
 			}
 		}
-		return fUnits;
-	}
-
-	/**
-	 * Returns the metadata repository with the given URI.
-	 * 
-	 * @param uri location
-	 * @return repository
-	 * @throws CoreException
-	 */
-	private IMetadataRepository getRepository(URI uri) throws CoreException {
-		IMetadataRepositoryManager manager = getRepoManager();
-		IMetadataRepository repo = manager.loadRepository(uri, null);
-		return repo;
+		if (updated == UpdateTargetJob.UPDATED) {
+			// Things have changed so mark the container as unresolved
+			clearResolutionStatus();
+		}
+		return dirty | updated;
 	}
 
-	/**
-	 * Returns the metadata repository manager.
-	 * 
-	 * @return metadata repository manager
-	 * @throws CoreException if none
-	 */
-	private IMetadataRepositoryManager getRepoManager() throws CoreException {
-		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		if (agent == null)
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_7));
-		IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
-		if (manager == null) {
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_2));
-		}
-		return manager;
+	protected void clearResolutionStatus() {
+		super.clearResolutionStatus();
+		fSynchronizer.markDirty();
 	}
 
 	/**
-	 * Returns the local bundle pool (repository) where bundles are stored for the
-	 * given profile.
-	 * 
-	 * @param profile profile bundles are stored
-	 * @return local file artifact repository
+	 * Collects all available installable units from the given source that represent OSGI
+	 * bundles.  A IResolvedBundle is created for each and a map containing all results
+	 * mapping BundleInfo to IResolvedBundle is returned.
+	 * <p>
+	 * If there is an artifact missing for a unit it will be ignored (not added to the returned map).
+	 * If this container is setup to automatically include source, an corresponding source bundles
+	 * found in the given profile will also be added as resolved bundles. 
+	 * </p>
+	 * @param source the bundle units to be converted
+	 * @param metadata the metadata backing the conversion
+	 * @param artifacts the underlying artifact repo against which the bundles are validated
+	 * @return map of BundleInfo to IResolvedBundle
 	 * @throws CoreException
 	 */
-	private IFileArtifactRepository getBundlePool(IProfile profile) throws CoreException {
-		String path = profile.getProperty(IProfile.PROP_CACHE);
-		if (path != null) {
-			URI uri = new File(path).toURI();
-			IArtifactRepositoryManager manager = getArtifactRepositoryManager();
-			try {
-				return (IFileArtifactRepository) manager.loadRepository(uri, null);
-			} catch (ProvisionException e) {
-				//the repository doesn't exist, so fall through and create a new one
+	private Map generateResolvedBundles(IQueryable source, IQueryable metadata, IFileArtifactRepository artifacts) throws CoreException {
+		OSGiBundleQuery query = new OSGiBundleQuery();
+		IQueryResult queryResult = source.query(query, null);
+		Map bundles = new LinkedHashMap();
+		for (Iterator i = queryResult.iterator(); i.hasNext();) {
+			IInstallableUnit unit = (IInstallableUnit) i.next();
+			generateBundle(unit, artifacts, bundles);
+			if (getIncludeSource()) {
+				// bit of a hack using the bundle naming convention for finding source bundles
+				// but this matches what we do when adding source to the profile so...
+				IQuery sourceQuery = QueryUtil.createIUQuery(unit.getId() + ".source", unit.getVersion()); //$NON-NLS-1$
+				IQueryResult result = metadata.query(sourceQuery, null);
+				if (!result.isEmpty()) {
+					generateBundle((IInstallableUnit) result.iterator().next(), artifacts, bundles);
+				}
 			}
 		}
-		return null;
-	}
-
-	/**
-	 * Returns the provisioning engine service.
-	 * 
-	 * @return provisioning engine
-	 * @throws CoreException if none
-	 */
-	private IArtifactRepositoryManager getArtifactRepositoryManager() throws CoreException {
-		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		if (agent == null)
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_7));
-		IArtifactRepositoryManager manager = (IArtifactRepositoryManager) agent.getService(IArtifactRepositoryManager.class.getName());
-		if (manager == null) {
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_3));
-		}
-		return manager;
-	}
-
-	/**
-	 * Returns the provisioning engine service.
-	 * 
-	 * @return provisioning engine
-	 * @throws CoreException if none
-	 */
-	private IEngine getEngine() throws CoreException {
-		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		if (agent == null)
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_7));
-		IEngine engine = (IEngine) agent.getService(IEngine.class.getName());
-		if (engine == null) {
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_4));
-		}
-		return engine;
+		return bundles;
 	}
 
-	/**
-	 * Returns the provisioning planner.
-	 * 
-	 * @return provisioning planner
-	 * @throws CoreException if none
-	 */
-	private IPlanner getPlanner() throws CoreException {
-		IPlanner planner = (IPlanner) getAgent().getService(IPlanner.class.getName());
-		if (planner == null) {
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_5));
+	private void generateBundle(IInstallableUnit unit, IFileArtifactRepository repo, Map bundles) throws CoreException {
+		Collection artifacts = unit.getArtifacts();
+		for (Iterator iterator2 = artifacts.iterator(); iterator2.hasNext();) {
+			File file = repo.getArtifactFile((IArtifactKey) iterator2.next());
+			if (file != null) {
+				IResolvedBundle bundle = generateBundle(file);
+				if (bundle != null) {
+					bundles.put(bundle.getBundleInfo(), bundle);
+				}
+			}
 		}
-		return planner;
-	}
-
-	/**
-	 * Returns the provisioning agent.
-	 * 
-	 * @return provisioning agent
-	 * @throws CoreException if none
-	 */
-	private IProvisioningAgent getAgent() throws CoreException {
-		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		if (agent == null)
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_7));
-		return agent;
 	}
 
 	/* (non-Javadoc)
@@ -703,12 +403,11 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	public boolean isContentEqual(AbstractBundleContainer container) {
 		if (container instanceof IUBundleContainer) {
 			IUBundleContainer iuContainer = (IUBundleContainer) container;
-			if (iuContainer.getIncludeAllRequired() == getIncludeAllRequired()) {
-				// include all targets only matters if include all required is turned off
-				if (getIncludeAllRequired() || iuContainer.getIncludeAllEnvironments() == getIncludeAllEnvironments()) {
-					return isEqualOrNull(fIds, iuContainer.fIds) && isEqualOrNull(fVersions, iuContainer.fVersions) && isEqualOrNull(fRepos, iuContainer.fRepos);
-				}
-			}
+			boolean result = true;
+			result &= iuContainer.getIncludeAllRequired() == getIncludeAllRequired();
+			result &= iuContainer.getIncludeAllEnvironments() == getIncludeAllEnvironments();
+			result &= iuContainer.getIncludeSource() == getIncludeSource();
+			return result && isEqualOrNull(fIds, iuContainer.fIds) && isEqualOrNull(fVersions, iuContainer.fVersions) && isEqualOrNull(fRepos, iuContainer.fRepos);
 		}
 		return false;
 	}
@@ -749,47 +448,24 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	}
 
 	/**
-	 * Returns the repositories to consider when resolving IU's (will return default set of
-	 * repositories if current repository settings are <code>null</code>).
+	 * Removes an installable unit from this container.  The container will no longer be resolved.
 	 *  
-	 * @return URI's of repositories to use when resolving bundles
-	 * @exception CoreException
+	 * @param unit unit to remove from the list of root IUs
 	 */
-	private URI[] resolveRepositories() throws CoreException {
-		if (fRepos == null) {
-			IMetadataRepositoryManager manager = getRepoManager();
-			return manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
-		}
-		return fRepos;
-	}
-
-	/**
-	 * Sets whether all required units must be available to resolve this container.  When <code>true</code>
-	 * the resolve operation will use the planner to determine the complete set of IUs required to
-	 * make the selected IUs runnable.  If any dependencies are missing, the resolve operation will return an
-	 * error explaining what problems exist.  When <code>false</code> the resolve operation will use the slicer
-	 * to determine what units to include.  Any required units that are not available in the repositories will
-	 * be ignored.
-	 * <p>
-	 * Since there is only one profile per target and the planner and slicer resolve methods are incompatible
-	 * it is highly recommended that the parent target be passed to this method so all other IUBundleContainers
-	 * in the target can be updated with the new setting. 
-	 * </p>
-	 * @param include whether all required units must be available to resolve this container
-	 * @param definition parent target, used to update other IUBundleContainers with this setting, can be <code>null</code>
-	 */
-	public void setIncludeAllRequired(boolean include, ITargetDefinition definition) {
-		fIncludeAllRequired = include;
-		if (definition != null) {
-			IBundleContainer[] containers = definition.getBundleContainers();
-			if (containers != null) {
-				for (int i = 0; i < containers.length; i++) {
-					if (containers[i] instanceof IUBundleContainer && containers[i] != this) {
-						((IUBundleContainer) containers[i]).setIncludeAllRequired(include, null);
-					}
-				}
+	public synchronized void removeInstallableUnit(IInstallableUnit unit) {
+		List newIds = new ArrayList(fIds.length);
+		List newVersions = new ArrayList(fIds.length);
+		for (int i = 0; i < fIds.length; i++) {
+			if (!fIds[i].equals(unit.getId()) || !fVersions[i].equals(unit.getVersion())) {
+				newIds.add(fIds[i]);
+				newVersions.add(fVersions[i]);
 			}
 		}
+		fIds = (String[]) newIds.toArray(new String[newIds.size()]);
+		fVersions = (Version[]) newVersions.toArray(new Version[newVersions.size()]);
+
+		// Need to mark the container as unresolved
+		clearResolutionStatus();
 	}
 
 	/**
@@ -803,35 +479,10 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	 * @return whether all required units must be available to resolve this container
 	 */
 	public boolean getIncludeAllRequired() {
-		return fIncludeAllRequired;
-	}
-
-	/**
-	 * Sets whether all environment (platform) specific installable units should
-	 * be included in this container when it is resolved.  This feature is not supported
-	 * by the planner so will only have an effect if the include all required setting
-	 * is turned off ({@link #getIncludeAllRequired()}).
-	 * <p>
-	 * There is only one profile per target and this setting can only be set for the
-	 * entire target definition.  It is highly recommended that the parent target be passed
-	 * to this method so all other IUBundleContainers in the target can be updated with the 
-	 * new setting. 
-	 * </p>
-	 * @param include whether environment specific units should be included
-	 * @param definition parent target, used to update other IUBundleContainers with this setting, can be <code>null</code>
-	 */
-	public void setIncludeAllEnvironments(boolean include, ITargetDefinition definition) {
-		fIncludeMultipleEnvironments = include;
-		if (definition != null) {
-			IBundleContainer[] containers = definition.getBundleContainers();
-			if (containers != null) {
-				for (int i = 0; i < containers.length; i++) {
-					if (containers[i] instanceof IUBundleContainer && containers[i] != this) {
-						((IUBundleContainer) containers[i]).setIncludeAllEnvironments(include, null);
-					}
-				}
-			}
-		}
+		// if this container has not been associated with a container, return its own value
+		if (fSynchronizer == null)
+			return (fFlags & INCLUDE_REQUIRED) == INCLUDE_REQUIRED;
+		return fSynchronizer.getIncludeAllRequired();
 	}
 
 	/**
@@ -843,30 +494,35 @@ public class IUBundleContainer extends AbstractBundleContainer {
 	 * @return whether environment specific units should be included
 	 */
 	public boolean getIncludeAllEnvironments() {
-		return fIncludeMultipleEnvironments;
+		// if this container has not been associated with a container, return its own value
+		if (fSynchronizer == null)
+			return (fFlags & INCLUDE_ALL_ENVIRONMENTS) == INCLUDE_ALL_ENVIRONMENTS;
+		return fSynchronizer.getIncludeAllEnvironments();
 	}
 
 	/**
-	 * Removes an installable unit from this container.  The container will no longer be resolved.
-	 *  
-	 * @param unit unit to remove from the list of root IUs
+	 * Returns whether or not source bundles corresponding to selected binary bundles 
+	 * are automatically included in the target.
+	 * 
+	 * @return whether or not source is included automatically
 	 */
-	public void removeInstallableUnit(IInstallableUnit unit) {
-		List newUnits = new ArrayList(fUnits.length);
-		for (int i = 0; i < fUnits.length; i++) {
-			if (!fUnits[i].equals(unit)) {
-				newUnits.add(fUnits[i]);
-			}
-		}
-		fUnits = (IInstallableUnit[]) newUnits.toArray(new IInstallableUnit[newUnits.size()]);
-		fIds = new String[fUnits.length];
-		fVersions = new Version[fUnits.length];
-		for (int i = 0; i < fUnits.length; i++) {
-			fIds[i] = fUnits[i].getId();
-			fVersions[i] = fUnits[i].getVersion();
-		}
-		// Need to mark the container as unresolved
-		clearResolutionStatus();
+	public boolean getIncludeSource() {
+		// if this container has not been associated with a container, return its own value
+		if (fSynchronizer == null)
+			return (fFlags & INCLUDE_SOURCE) == INCLUDE_SOURCE;
+		return fSynchronizer.getIncludeSource();
+	}
+
+	/**
+	 * Returns the installable units defined by this container
+	 * 
+	 * @return the discovered IUs
+	 * @exception CoreException if unable to retrieve IU's
+	 */
+	public IInstallableUnit[] getInstallableUnits() throws CoreException {
+		if (fUnits == null)
+			return new IInstallableUnit[0];
+		return fUnits;
 	}
 
 	/**
@@ -887,4 +543,38 @@ public class IUBundleContainer extends AbstractBundleContainer {
 		return fVersions;
 	}
 
+	/**
+	 * Return the synchronizer for this container.  If there isn't one and a target definition is 
+	 * supplied, then get/create the one used by the target and the other containers.
+	 */
+	P2TargetUtils getSynchronizer(ITargetDefinition definition) {
+		if (fSynchronizer != null) {
+			return fSynchronizer;
+		}
+		if (definition == null)
+			return null;
+		return fSynchronizer = P2TargetUtils.getSynchronizer(definition);
+	}
+
+	/**
+	 * Callback method used by the synchronizer to associate containers with 
+	 * synchronizers.
+	 */
+	void setSynchronizer(P2TargetUtils value) {
+		fSynchronizer = value;
+	}
+
+	/**
+	 * Associate this container with the given target.  The include settings for this container
+	 * override the settings for all other IU containers in the target.  Last one wins.
+	 */
+	protected void associateWithTarget(ITargetDefinition target) {
+		super.associateWithTarget(target);
+		fSynchronizer = getSynchronizer(target);
+		// The synchronizer is being made dirty because this IU container is being associated with it
+		fSynchronizer.markDirty();
+		fSynchronizer.setIncludeAllRequired((fFlags & INCLUDE_REQUIRED) == INCLUDE_REQUIRED);
+		fSynchronizer.setIncludeAllEnvironments((fFlags & INCLUDE_ALL_ENVIRONMENTS) == INCLUDE_ALL_ENVIRONMENTS);
+		fSynchronizer.setIncludeSource((fFlags & INCLUDE_SOURCE) == INCLUDE_SOURCE);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/LocalTargetHandle.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/LocalTargetHandle.java
old mode 100644
new mode 100755
index 49b6e12..3aa8811
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/LocalTargetHandle.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/LocalTargetHandle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,7 +173,7 @@ public class LocalTargetHandle extends AbstractTargetHandle {
 				throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.LocalTargetHandle_3, file.getName())));
 			}
 		}
-		deleteProfile();
+		P2TargetUtils.deleteProfile(this);
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java
old mode 100644
new mode 100755
index 0d03252..2850964
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java
@@ -33,13 +33,20 @@ public class Messages extends NLS {
 	public static String FeatureBundleContainer_5;
 	public static String IUBundleContainer_0;
 	public static String IUBundleContainer_1;
+	public static String IUBundleContainer_10;
+	public static String IUBundleContainer_11;
 	public static String IUBundleContainer_2;
 	public static String IUBundleContainer_3;
 	public static String IUBundleContainer_4;
 	public static String IUBundleContainer_5;
 	public static String IUBundleContainer_6;
 	public static String IUBundleContainer_7;
+	public static String IUBundleContainer_8;
+	public static String IUBundleContainer_9;
+	public static String IUBundleContainer_LoadingFromProfileJob;
+	public static String IUBundleContainer_NoBundlePool;
 	public static String IUBundleContainer_ProblemsLoadingRepositories;
+	public static String IUBundleContainer_ProvisioningSourceBundles;
 	public static String LoadTargetDefinitionJob_0;
 	public static String LoadTargetDefinitionJob_1;
 	public static String LoadTargetOperation_argsTaskName;
@@ -55,6 +62,7 @@ public class Messages extends NLS {
 	public static String LocalTargetHandle_3;
 	public static String LocalTargetHandle_4;
 	public static String LocalTargetHandle_5;
+	public static String P2TargetUtils_ProvisioningSourceTask;
 	public static String ProfileBundleContainer_0;
 	public static String ProfileBundleContainer_1;
 	public static String ProfileBundleContainer_2;
@@ -74,6 +82,9 @@ public class Messages extends NLS {
 	public static String TargetPlatformService_4;
 	public static String TargetPlatformService_5;
 	public static String TargetPlatformService_7;
+	public static String UpdateTargetJob_UpdateJobName;
+	public static String UpdateTargetJob_UpdatingContainer;
+	public static String UpdateTargetJob_UpdatingTarget;
 	public static String WorkspaceFileTargetHandle_0;
 	static {
 		// initialize resource bundle
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties
old mode 100644
new mode 100755
index f067ee5..efa08e1
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties
@@ -25,13 +25,20 @@ FeatureBundleContainer_4=Unable to acquire target platform service
 FeatureBundleContainer_5=Plug-ins directory does not exist for feature {0}
 IUBundleContainer_0=Provisioning target
 IUBundleContainer_1=Unable to locate installable unit {0}
+IUBundleContainer_10=Provisioning Agent Location service not found
+IUBundleContainer_11=Global Provisioning Agent service not found
 IUBundleContainer_2=Metadata repository service not found
 IUBundleContainer_3=Artifact respository service not found
 IUBundleContainer_4=Provisioning engine not found
 IUBundleContainer_5=Provisioning planner not found
-IUBundleContainer_6=Target provisioning skipped install plan.
+IUBundleContainer_6=Target provisioning skipped install plan
 IUBundleContainer_7=Provisioning agent not found
+IUBundleContainer_8=Profile Registry service not found
+IUBundleContainer_9=Garbage Collector service not found
+IUBundleContainer_LoadingFromProfileJob=Loading target information from profile
+IUBundleContainer_NoBundlePool=No location for downloaded bundles could be found.
 IUBundleContainer_ProblemsLoadingRepositories=Problems loading repositories
+IUBundleContainer_ProvisioningSourceBundles=Provisioning source bundles
 LoadTargetDefinitionJob_0=Load Target Platform
 LoadTargetDefinitionJob_1=Unable to resolve plug-ins in target definition
 LoadTargetOperation_argsTaskName=Setting arguments
@@ -47,6 +54,7 @@ LocalTargetHandle_2=Unable to generate memento for target platform
 LocalTargetHandle_3=Failed to delete target definition: {0}
 LocalTargetHandle_4=Error saving target definition {0}
 LocalTargetHandle_5=Error creating target file
+P2TargetUtils_ProvisioningSourceTask=Provisioning source bundles
 ProfileBundleContainer_0=Installation directory does not exist: {0}
 ProfileBundleContainer_1=Unable resolve configuration area in {0}
 ProfileBundleContainer_2=Configuration directory does not exist: {0}
@@ -66,4 +74,7 @@ TargetPlatformService_3=Error reading target extension file: {0}
 TargetPlatformService_4=Target extension file does not exist: {0}
 TargetPlatformService_5=Restored Target
 TargetPlatformService_7=Running Platform
+UpdateTargetJob_UpdateJobName=Update Target Definition Job
+UpdateTargetJob_UpdatingContainer=Updating: {0}
+UpdateTargetJob_UpdatingTarget=Updating Target
 WorkspaceFileTargetHandle_0=Unable to generate memento for target platform
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
new file mode 100644
index 0000000..fee7035
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
@@ -0,0 +1,1393 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 EclipseSource Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     EclipseSource Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.core.target;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.equinox.internal.p2.director.PermissiveSlicer;
+import org.eclipse.equinox.internal.p2.engine.*;
+import org.eclipse.equinox.internal.p2.engine.phases.*;
+import org.eclipse.equinox.internal.p2.garbagecollector.GarbageCollector;
+import org.eclipse.equinox.p2.core.*;
+import org.eclipse.equinox.p2.engine.*;
+import org.eclipse.equinox.p2.engine.query.IUProfilePropertyQuery;
+import org.eclipse.equinox.p2.engine.spi.ProvisioningAction;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
+import org.eclipse.equinox.p2.query.*;
+import org.eclipse.equinox.p2.repository.*;
+import org.eclipse.equinox.p2.repository.artifact.*;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.target.provisional.*;
+import org.osgi.framework.*;
+
+public class P2TargetUtils {
+
+	private static final String SOURCE_IU_ID = "org.eclipse.pde.core.target.source.bundles"; //$NON-NLS-1$
+
+	/**
+	 * URI to the local directory where the p2 agent keeps its information.
+	 */
+	public static URI AGENT_LOCATION;
+	static {
+		try {
+			AGENT_LOCATION = URIUtil.fromString("file:" + PDECore.getDefault().getStateLocation().append(".p2")); //$NON-NLS-1$//$NON-NLS-2$
+		} catch (Exception e) {
+			// should never happen
+		}
+	}
+
+	/**
+	 * Path to the local directory where the local bundle pool is stored for p2 profile
+	 * based targets.
+	 */
+	public static final IPath BUNDLE_POOL = PDECore.getDefault().getStateLocation().append(".bundle_pool"); //$NON-NLS-1$
+
+	/**
+	 * Path to the local directory where install folders are created for p2 profile
+	 * based targets.
+	 */
+	static final IPath INSTALL_FOLDERS = PDECore.getDefault().getStateLocation().append(".install_folders"); //$NON-NLS-1$	
+
+	/**
+	 * Prefix for all profiles ID's associated with target definitions
+	 */
+	static final String PROFILE_ID_PREFIX = "TARGET_DEFINITION:"; //$NON-NLS-1$
+
+	/**
+	 * Installable unit property to mark IU's that have been installed in a profile by
+	 * a bundle container (rather than as a secondary/required IU).
+	 */
+	static final String PROP_INSTALLED_IU = PDECore.PLUGIN_ID + ".installed_iu"; //$NON-NLS-1$
+
+	/**
+	 * Profile property that keeps track of provisioning mode for the target
+	 * (slice versus plan).
+	 */
+	static final String PROP_PROVISION_MODE = PDECore.PLUGIN_ID + ".provision_mode"; //$NON-NLS-1$
+
+	/**
+	 * Profile property that keeps track of provisioning mode for the target
+	 * (all environments/true versus false).
+	 */
+	static final String PROP_ALL_ENVIRONMENTS = PDECore.PLUGIN_ID + ".all_environments"; //$NON-NLS-1$	
+
+	/**
+	 * Profile property that keeps track of the target sequence number
+	 */
+	static final String PROP_SEQUENCE_NUMBER = PDECore.PLUGIN_ID + ".sequence"; //$NON-NLS-1$	
+
+	/**
+	 * Profile property that tracks whether or not source to be auto-included
+	 */
+	static final String PROP_AUTO_INCLUDE_SOURCE = PDECore.PLUGIN_ID + ".autoIncludeSource"; //$NON-NLS-1$	
+
+	/**
+	 * Table mapping target location to synchronizer (P2TargetUtils) instance.
+	 */
+	private static Map synchronizers = new HashMap();
+
+	/** 
+	 * The profile to be synchronized
+	 */
+	private IProfile fProfile;
+
+	/**
+	 * Whether this container must have all required IUs of the selected IUs available and included
+	 * in the target to resolve successfully.  If this option is true, the planner will be used to resolve
+	 * otherwise the slicer is used.  The planner can describe any missing requirements as errors.
+	 * <p>
+	 * <code>true</code> by default
+	 * </p>
+	 */
+	private boolean fIncludeAllRequired = true;
+
+	/**
+	 * Whether this container should download and include environment (platform) specific units for all
+	 * available platforms (vs only the current target definition's environment settings).  Only supported 
+	 * by the slicer so {@link fIncludeAllRequired} must be turned off for this setting to be used.
+	 * <p>
+	 * <code>false</code> by default
+	 * </p>
+	 */
+	private boolean fIncludeMultipleEnvironments = false;
+
+	/**
+	 * Whether this container should download and include source bundles for the selected units if the associated
+	 * source is available in the repository.
+	 * <p>
+	 * <code>false</code>by default
+	 */
+	private boolean fIncludeSource = false;
+
+	/**
+	 * Whether or not this synchronizer is dirty by means other than target tweaks etc.
+	 */
+	private boolean fDirty = false;
+
+	public P2TargetUtils(ITargetDefinition target) {
+		try {
+			synchronizers.put(target.getHandle().getMemento(), this);
+		} catch (CoreException e) {
+			// This should never happen
+		}
+	}
+
+	/**
+	 * Deletes any profiles associated with target definitions that no longer exist
+	 * and returns a list of profile identifiers that were deleted.
+	 */
+	public static List cleanOrphanedTargetDefinitionProfiles() throws CoreException {
+		List list = new ArrayList();
+		IProfileRegistry registry = getProfileRegistry();
+		ITargetPlatformService tps = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
+		if (registry != null && tps != null) {
+			IProfile[] profiles = registry.getProfiles();
+			for (int i = 0; i < profiles.length; i++) {
+				IProfile profile = profiles[i];
+				String id = profile.getProfileId();
+				if (id.startsWith(PROFILE_ID_PREFIX)) {
+					String memento = id.substring(PROFILE_ID_PREFIX.length());
+					ITargetHandle handle = tps.getTarget(memento);
+					if (!handle.exists()) {
+						deleteProfile(handle);
+						list.add(id);
+					}
+				}
+			}
+		}
+		return list;
+	}
+
+	/**
+	 * Recursively deletes folder and files.
+	 * 
+	 * @param folder
+	 */
+	private static void delete(File folder) {
+		File[] files = folder.listFiles();
+		for (int i = 0; i < files.length; i++) {
+			File file = files[i];
+			if (file.isDirectory()) {
+				delete(file);
+			}
+			file.delete();
+		}
+		folder.delete();
+	}
+
+	/**
+	 * Deletes the profile associated with this target handle, if any. Returns
+	 * <code>true</code> if a profile existed and was deleted, otherwise <code>false</code>.
+	 * 
+	 * @throws CoreException if unable to delete the profile
+	 */
+	public static void deleteProfile(ITargetHandle handle) throws CoreException {
+		IProfileRegistry registry = getProfileRegistry();
+		if (registry != null) {
+			IProfile profile = registry.getProfile(getProfileId(handle));
+			if (profile != null) {
+				String location = profile.getProperty(IProfile.PROP_INSTALL_FOLDER);
+				registry.removeProfile(getProfileId(handle));
+				if (location != null && location.length() > 0) {
+					File folder = new File(location);
+					if (folder.exists()) {
+						delete(folder);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Performs garbage collection based on remaining profiles. Should be called to avoid
+	 * having PDE's bundle pool area grow unbounded.
+	 */
+	public static void garbageCollect() {
+		try {
+			IProfile[] profiles = getProfileRegistry().getProfiles();
+			for (int i = 0; i < profiles.length; i++) {
+				if (profiles[i].getProfileId().startsWith(PROFILE_ID_PREFIX)) {
+					getGarbageCollector().runGC(profiles[i]);
+				}
+			}
+		} catch (CoreException e) {
+			// XXX likely should log something here.
+			return;
+		}
+	}
+
+	/**
+	 * Generates the environment properties string for this target definition's p2 profile.
+	 * 
+	 * @return environment properties
+	 */
+	private String generateEnvironmentProperties(ITargetDefinition target) {
+		// TODO: are there constants for these keys?
+		StringBuffer env = new StringBuffer();
+		String ws = target.getWS();
+		if (ws == null) {
+			ws = Platform.getWS();
+		}
+		env.append("osgi.ws="); //$NON-NLS-1$
+		env.append(ws);
+		env.append(","); //$NON-NLS-1$
+		String os = target.getOS();
+		if (os == null) {
+			os = Platform.getOS();
+		}
+		env.append("osgi.os="); //$NON-NLS-1$
+		env.append(os);
+		env.append(","); //$NON-NLS-1$
+		String arch = target.getArch();
+		if (arch == null) {
+			arch = Platform.getOSArch();
+		}
+		env.append("osgi.arch="); //$NON-NLS-1$
+		env.append(arch);
+		return env.toString();
+	}
+
+	/**
+	 * Generates the NL property for this target definition's p2 profile.
+	 * 
+	 * @return NL profile property
+	 */
+	private String generateNLProperty(ITargetDefinition target) {
+		String nl = target.getNL();
+		if (nl == null) {
+			nl = Platform.getNL();
+		}
+		return nl;
+	}
+
+	public static IProvisioningAgent getAgent() throws CoreException {
+		//Is there already an agent for this location?
+		String filter = "(locationURI=" + String.valueOf(AGENT_LOCATION) + ")"; //$NON-NLS-1$//$NON-NLS-2$
+		ServiceReference[] serviceReferences = null;
+		BundleContext context = PDECore.getDefault().getBundleContext();
+		try {
+			serviceReferences = context.getServiceReferences(IProvisioningAgent.SERVICE_NAME, filter);
+			if (serviceReferences != null) {
+				return (IProvisioningAgent) context.getService(serviceReferences[0]);
+			}
+		} catch (InvalidSyntaxException e) {
+			// ignore
+		} finally {
+			if (serviceReferences != null)
+				context.ungetService(serviceReferences[0]);
+		}
+
+		IProvisioningAgentProvider provider = (IProvisioningAgentProvider) PDECore.getDefault().acquireService(IProvisioningAgentProvider.SERVICE_NAME);
+		try {
+			IProvisioningAgent agent = provider.createAgent(AGENT_LOCATION);
+			// turn off the garbage collector for the PDE agent.  GC is managed on a coarser grain
+			GarbageCollector garbageCollector = (GarbageCollector) agent.getService(GarbageCollector.class.getName());
+			if (garbageCollector != null) {
+				garbageCollector.stop();
+			}
+			return agent;
+		} catch (ProvisionException e) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_7, e));
+		}
+	}
+
+	/**
+	 * Returns the global p2 provisioning agent.  This is useful when looking to inherit or use
+	 * some settings from the global p2 world.
+	 * 
+	 * @return the global p2 provisioning agent
+	 * @throws CoreException
+	 */
+	public static IProvisioningAgent getGlobalAgent() throws CoreException {
+		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
+		if (agent == null)
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_11));
+		return agent;
+	}
+
+	/**
+	 * Returns the provisioning agent location service.
+	 * 
+	 * @return provisioning agent location service
+	 * @throws CoreException if none
+	 */
+	public static IAgentLocation getAgentLocation() throws CoreException {
+		IAgentLocation result = (IAgentLocation) getAgent().getService(IAgentLocation.SERVICE_NAME);
+		if (result == null)
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_10));
+		return result;
+	}
+
+	/**
+	 * Returns the provisioning engine service.
+	 * 
+	 * @return provisioning engine
+	 * @throws CoreException if none
+	 */
+	public static IArtifactRepositoryManager getArtifactRepositoryManager() throws CoreException {
+		IArtifactRepositoryManager manager = (IArtifactRepositoryManager) getAgent().getService(IArtifactRepositoryManager.class.getName());
+		if (manager == null) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_3));
+		}
+		return manager;
+	}
+
+	/**
+	 * Returns the local bundle pool (repository) where bundles are stored
+	 * 
+	 * @return local file artifact repository
+	 * @throws CoreException
+	 */
+	public static IFileArtifactRepository getBundlePool() throws CoreException {
+		URI uri = BUNDLE_POOL.toFile().toURI();
+		IArtifactRepositoryManager manager = getArtifactRepositoryManager();
+		try {
+			if (manager.contains(uri))
+				return (IFileArtifactRepository) manager.loadRepository(uri, null);
+		} catch (CoreException e) {
+			// could not load or there wasn't one, fall through to create 
+		}
+		String repoName = "PDE Target Bundle Pool"; //$NON-NLS-1$
+		IArtifactRepository result = manager.createRepository(uri, repoName, IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, null);
+		return (IFileArtifactRepository) result;
+	}
+
+	/**
+	 * Returns the provisioning engine service.
+	 * 
+	 * @return provisioning engine
+	 * @throws CoreException if none
+	 */
+	public static IEngine getEngine() throws CoreException {
+		IEngine engine = (IEngine) getAgent().getService(IEngine.class.getName());
+		if (engine == null) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_4));
+		}
+		return engine;
+	}
+
+	/**
+	 * Returns the p2 garbage collector
+	 * 
+	 * @return p2 garbage collector
+	 * @throws CoreException if none
+	 */
+	public static GarbageCollector getGarbageCollector() throws CoreException {
+		GarbageCollector engine = (GarbageCollector) getAgent().getService(GarbageCollector.class.getName());
+		if (engine == null) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_9));
+		}
+		return engine;
+	}
+
+	/**
+	 * Returns the provisioning planner.
+	 * 
+	 * @return provisioning planner
+	 * @throws CoreException if none
+	 */
+	public static IPlanner getPlanner() throws CoreException {
+		IPlanner planner = (IPlanner) getAgent().getService(IPlanner.class.getName());
+		if (planner == null) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_5));
+		}
+		return planner;
+	}
+
+	/**
+	 * Returns the preferences service.
+	 * 
+	 * @return preferences service or null if none
+	 */
+	public static IPreferencesService getPreferences() {
+		return (IPreferencesService) PDECore.getDefault().acquireService(IPreferencesService.class.getName());
+	}
+
+	/**
+	 * Returns whether the contents of the profile matches the expected contents of the target definition
+	 * 
+	 * @return whether or not the profile and target definitions match
+	 * @throws CoreException in unable to retrieve profile
+	 */
+	private boolean checkProfile(ITargetDefinition target) throws CoreException {
+		// make sure we have a profile to validate
+		if (fProfile == null) {
+			return false;
+		}
+
+		if (fDirty)
+			return false;
+		// check that the target and profiles are in sync. If they are then life is good.
+		// If they are not equal, there is still a chance that everything is ok.
+		String profileNumber = fProfile.getProperty(PROP_SEQUENCE_NUMBER);
+		if (Integer.toString(((TargetDefinition) target).getSequenceNumber()).equals(profileNumber)) {
+			return true;
+		}
+
+		// check if all environments setting is the same
+		boolean all = false;
+		String value = fProfile.getProperty(PROP_ALL_ENVIRONMENTS);
+		if (value != null) {
+			all = Boolean.valueOf(value).booleanValue();
+			if (!Boolean.toString(getIncludeAllEnvironments()).equals(value)) {
+				return false;
+			}
+		}
+
+		// ensure environment & NL settings are still the same (else we need a new profile)
+		String property = null;
+		if (!all) {
+			property = generateEnvironmentProperties(target);
+			value = fProfile.getProperty(IProfile.PROP_ENVIRONMENTS);
+			if (!property.equals(value)) {
+				return false;
+			}
+		}
+		property = generateNLProperty(target);
+		value = fProfile.getProperty(IProfile.PROP_NL);
+		if (!property.equals(value)) {
+			return false;
+		}
+
+		// check provisioning mode: slice versus plan
+		if (!getProvisionMode(target).equals(fProfile.getProperty(PROP_PROVISION_MODE))) {
+			return false;
+		}
+
+		// check that the include source flag matches what the profile represents
+		if (getIncludeSource() != Boolean.valueOf(fProfile.getProperty(PROP_AUTO_INCLUDE_SOURCE)).booleanValue()) {
+			return false;
+		}
+
+		// check top level IU's. If any have been removed from the containers that are
+		// still in the profile, we need to recreate (rather than uninstall)
+		IUProfilePropertyQuery propertyQuery = new IUProfilePropertyQuery(PROP_INSTALLED_IU, Boolean.toString(true));
+		IQueryResult queryResult = fProfile.query(propertyQuery, null);
+		Iterator iterator = queryResult.iterator();
+		Set installedIUs = new HashSet();
+		while (iterator.hasNext()) {
+			IInstallableUnit unit = (IInstallableUnit) iterator.next();
+			installedIUs.add(new NameVersionDescriptor(unit.getId(), unit.getVersion().toString()));
+		}
+		IBundleContainer[] containers = target.getBundleContainers();
+		if (containers == null) {
+			return installedIUs.isEmpty();
+		}
+		for (int i = 0; i < containers.length; i++) {
+			if (containers[i] instanceof IUBundleContainer) {
+				IUBundleContainer bc = (IUBundleContainer) containers[i];
+				String[] ids = bc.getIds();
+				Version[] versions = bc.getVersions();
+				for (int j = 0; j < versions.length; j++) {
+					// if there is something in a container but not in the profile, recreate
+					if (!installedIUs.remove(new NameVersionDescriptor(ids[j], versions[j].toString()))) {
+						return false;
+					}
+				}
+			}
+		}
+		if (!installedIUs.isEmpty()) {
+			return false;
+		}
+
+		// Phew! seems like the profile checks out.  
+		return true;
+	}
+
+	/**
+	 * Sets whether all required units must be available to resolve this container.  When <code>true</code>
+	 * the resolve operation will use the planner to determine the complete set of IUs required to
+	 * make the selected IUs runnable.  If any dependencies are missing, the resolve operation will return an
+	 * error explaining what problems exist.  When <code>false</code> the resolve operation will use the slicer
+	 * to determine what units to include.  Any required units that are not available in the repositories will
+	 * be ignored.
+	 * <p>
+	 * Since there is only one profile per target and the planner and slicer resolve methods are incompatible.
+	 * </p>
+	 * @param value whether all required units must be available to resolve this container
+	 */
+	public void setIncludeAllRequired(boolean value) {
+		fIncludeAllRequired = value;
+	}
+
+	/**
+	 * Returns whether all required units must be available to resolve this container.  When <code>true</code>
+	 * the resolve operation will use the planner to determine the complete set of IUs required to
+	 * make the selected IUs runnable.  If any dependencies are missing, the resolve operation will return an
+	 * error explaining what problems exist.  When <code>false</code> the resolve operation will use the slicer
+	 * to determine what units to include.  Any required units that are not available in the repositories will
+	 * be ignored.
+	 *  
+	 * @return whether all required units must be available to resolve this container
+	 */
+	public boolean getIncludeAllRequired() {
+		return fIncludeAllRequired;
+	}
+
+	/**
+	 * Sets whether all environment (platform) specific installable units should
+	 * be included in this container when it is resolved.  This feature is not supported
+	 * by the planner so will only have an effect if the include all required setting
+	 * is turned off ({@link #getIncludeAllRequired()}).
+	 * <p>
+	 * There is only one profile per target and this setting can only be set for the
+	 * entire target definition.  
+	 * </p>
+	 * @param value whether environment specific units should be included
+	 */
+	public void setIncludeAllEnvironments(boolean value) {
+		fIncludeMultipleEnvironments = value;
+	}
+
+	/**
+	 * Returns whether all environment (platform) specific installable units should
+	 * be included in this container when it is resolved.  This feature is not supported
+	 * by the planner so will only have an effect if the include all required setting
+	 * is turned off ({@link #getIncludeAllRequired()}).
+	 * 
+	 * @return whether environment specific units should be included
+	 */
+	public boolean getIncludeAllEnvironments() {
+		return fIncludeMultipleEnvironments;
+	}
+
+	/**
+	 * Set whether or not the source bundles corresponding to any binary bundles should
+	 * be automatically included in the target.
+	 * 
+	 * @param value whether or not to include source
+	 */
+	public void setIncludeSource(boolean value) {
+		fIncludeSource = value;
+	}
+
+	/**
+	 * Returns whether or not source bundles corresponding to selected binary bundles 
+	 * are automatically included in the target.
+	 * 
+	 * @return whether or not source is included automatically
+	 */
+	public boolean getIncludeSource() {
+		return fIncludeSource;
+	}
+
+	/**
+	 * Return whether or not the given target has a matching profile that is in sync
+	 * @param target the target to check
+	 * @return whether or not the target has been resolved at the p2 level
+	 */
+	public static boolean isResolved(ITargetDefinition target) {
+		P2TargetUtils synchronizer = getSynchronizer(target);
+		if (synchronizer == null)
+			return false;
+		try {
+			return synchronizer.checkProfile(target);
+		} catch (CoreException e) {
+			return false;
+		}
+	}
+
+	/**
+	 * Get the synchronizer to use for the given target.  If there is already one on a
+	 * container in the target, use that one.  Otherwise, create a new one.  Either way, 
+	 * ensure that all other IU containers in the target are using the same synchronizer.
+	 * <p>
+	 * The synchronizer is an instance of {@link P2TargetUtils} that has access to the 
+	 * profile and other p2 bits for the target.
+	 * </p>
+	 * 
+	 * @param target the target for which we are getting the synchronizer
+	 * @return the discovered or created synchronizer
+	 */
+	static synchronized P2TargetUtils getSynchronizer(ITargetDefinition target) {
+		try {
+			String memento = target.getHandle().getMemento();
+			P2TargetUtils result = (P2TargetUtils) synchronizers.get(memento);
+			if (result != null)
+				return result;
+
+			result = new P2TargetUtils(target);
+			synchronizers.put(memento, result);
+			return result;
+		} catch (CoreException e) {
+			// Should never happen
+			throw new IllegalStateException(e.toString());
+		}
+	}
+
+	/**
+	 * Return the set of IUs in all IU containers associated with this synchronizer.
+	 * This is a helper method so we don't have to expose the profile itself.
+	 * 
+	 * @param target the target definition to query
+	 * @param monitor the progress monitor to use
+	 * @return the set of associated IUs
+	 * @throws CoreException if there is a problem discovering the IUs
+	 */
+	public static IQueryResult getIUs(ITargetDefinition target, IProgressMonitor monitor) throws CoreException {
+		P2TargetUtils synchronizer = getSynchronizer(target);
+		if (synchronizer == null)
+			return null;
+		synchronizer.synchronize(target, monitor);
+		return synchronizer.getProfile().query(QueryUtil.createIUAnyQuery(), null);
+	}
+
+	/**
+	 * Synchronize the profile and the target definition managed by this synchronizer.  On return the profile will 
+	 * be resolved and correctly match the given target.  The IUBundleContainers associated with 
+	 * the target will be notified of any changes in the underlying p2 profile and given an 
+	 * opportunity to update themselves accordingly.
+	 * 
+	 * NOTE: this is a potentially *very* heavyweight operation.
+	 * 
+	 * NOTE: this method is synchronized as it is effectively a "test and set" caching method. Two
+	 * threads getting the profile at the same time should not execute concurrently or the profiles
+	 * will get out of sync.
+	 * 
+	 * @throws CoreException if there was a problem synchronizing
+	 */
+	public synchronized void synchronize(ITargetDefinition target, IProgressMonitor monitor) throws CoreException {
+		SubMonitor progress = SubMonitor.convert(monitor, 100);
+
+		// Happiness if we have a profile and it checks out or if we can load one and it checks out.
+		if (fProfile == null)
+			fProfile = getProfileRegistry().getProfile(getProfileId(target));
+		if (fProfile != null && checkProfile(target)) {
+			// always push the changes to the target because there can be many target objects
+			// for the same synchronizer (doh!)
+			notify(target, progress.newChild(25));
+			return;
+		}
+
+		// Either no profile was found or it was stale.  Delete the current profile and recreate.  
+		// This keeps the internal agent data clean and does not cost us much.
+		deleteProfile(target.getHandle());
+		createProfile(target);
+
+		if (progress.isCanceled())
+			return;
+		progress.setWorkRemaining(75);
+
+		// Now resolve the profile and refresh the relate IU containers
+		if (getIncludeAllRequired())
+			resolveWithPlanner(target, progress.newChild(60));
+		else
+			resolveWithSlicer(target, progress.newChild(60));
+
+		// If we are updating a profile then delete the old snapshot on success.
+		notify(target, progress.newChild(15));
+		fDirty = false;
+	}
+
+	private void createProfile(ITargetDefinition target) throws CoreException, ProvisionException {
+		// create a new profile
+		IProfileRegistry registry = getProfileRegistry();
+		if (registry == null) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.AbstractTargetHandle_0));
+		}
+		Map properties = new HashMap();
+		properties.put(IProfile.PROP_INSTALL_FOLDER, INSTALL_FOLDERS.append(Long.toString(LocalTargetHandle.nextTimeStamp())).toOSString());
+		properties.put(IProfile.PROP_CACHE, BUNDLE_POOL.toOSString());
+		properties.put(IProfile.PROP_INSTALL_FEATURES, Boolean.TRUE.toString());
+		properties.put(IProfile.PROP_ENVIRONMENTS, generateEnvironmentProperties(target));
+		properties.put(IProfile.PROP_NL, generateNLProperty(target));
+		properties.put(PROP_SEQUENCE_NUMBER, Integer.toString(((TargetDefinition) target).getSequenceNumber()));
+		properties.put(PROP_PROVISION_MODE, getProvisionMode(target));
+		properties.put(PROP_ALL_ENVIRONMENTS, Boolean.toString(getIncludeAllEnvironments()));
+		properties.put(PROP_AUTO_INCLUDE_SOURCE, Boolean.toString(getIncludeSource()));
+		fProfile = registry.addProfile(getProfileId(target), properties);
+	}
+
+	/**
+	 * Signal the relevant bundle containers that the given profile has changed.
+	 */
+	private void notify(ITargetDefinition target, IProgressMonitor monitor) throws CoreException {
+		// flush the target caches first since some of them are used in rebuilding
+		// the container caches (e.g., featureModels)
+		((TargetDefinition) target).flushCaches(P2TargetUtils.BUNDLE_POOL.toOSString());
+		// Now proactively recompute all the related container caches.
+		IBundleContainer[] containers = target.getBundleContainers();
+		if (containers != null) {
+			for (int i = 0; i < containers.length; i++) {
+				IBundleContainer container = containers[i];
+				if (container instanceof IUBundleContainer) {
+					((IUBundleContainer) container).synchronizerChanged(target);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Returns the profile identifier for this target handle. There is one profile
+	 * per target definition.
+	 * 
+	 * @return profile identifier
+	 * @throws CoreException in unable to generate identifier
+	 */
+	private static String getProfileId(ITargetHandle handle) throws CoreException {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(PROFILE_ID_PREFIX);
+		buffer.append(handle.getMemento());
+		return buffer.toString();
+	}
+
+	/**
+	 * Returns the profile identifier for this target handle. There is one profile
+	 * per target definition.
+	 * 
+	 * @return definition the target to lookup
+	 * @throws CoreException in unable to generate identifier
+	 */
+	public static String getProfileId(ITargetDefinition definition) {
+		try {
+			return getProfileId(definition.getHandle());
+		} catch (CoreException e) {
+			// gotta make sure that this never happens.  all we're doing here is computing a string.
+			return null;
+		}
+	}
+
+	/**
+	 * Returns the profile registry or <code>null</code>
+	 * 
+	 * @return profile registry or <code>null</code>
+	 * @throws CoreException 
+	 */
+	public static IProfileRegistry getProfileRegistry() throws CoreException {
+		IProfileRegistry result = (IProfileRegistry) getAgent().getService(IProfileRegistry.SERVICE_NAME);
+		if (result == null) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_8));
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the mode used to provision this target - slice versus plan or <code>null</code> if
+	 * this target has no software sites.
+	 * 
+	 * @return provisioning mode or <code>null</code>
+	 */
+	private String getProvisionMode(ITargetDefinition target) {
+		return getIncludeAllRequired() ? TargetDefinitionPersistenceHelper.MODE_PLANNER : TargetDefinitionPersistenceHelper.MODE_SLICER;
+	}
+
+	/**
+	 * Returns the metadata repository manager.
+	 * 
+	 * @return metadata repository manager
+	 * @throws CoreException if none
+	 */
+	public static IMetadataRepositoryManager getRepoManager() throws CoreException {
+		IMetadataRepositoryManager manager = (IMetadataRepositoryManager) getAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
+		if (manager == null) {
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_2));
+		}
+		return manager;
+	}
+
+	/**
+	 * Return a queryable on the metadata defined in the given repo locations
+	 * 
+	 * @param repos the repos to lookup
+	 * @param monitor the progress monitor
+	 * @return the set of metadata repositories found
+	 * @throws CoreException if there is a problem getting the repositories
+	 */
+	static IQueryable getQueryableMetadata(URI[] repos, IProgressMonitor monitor) throws CoreException {
+		IMetadataRepositoryManager manager = getRepoManager();
+		if (repos == null) {
+			repos = manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
+		}
+
+		IProgressMonitor loadMonitor = new SubProgressMonitor(monitor, 10);
+		int repoCount = repos.length;
+		loadMonitor.beginTask(null, repoCount * 10);
+		List result = new ArrayList(repoCount);
+		MultiStatus repoStatus = new MultiStatus(PDECore.PLUGIN_ID, 0, Messages.IUBundleContainer_ProblemsLoadingRepositories, null);
+		for (int i = 0; i < repoCount; ++i) {
+			try {
+				result.add(manager.loadRepository(repos[i], new SubProgressMonitor(loadMonitor, 10)));
+			} catch (ProvisionException e) {
+				repoStatus.add(e.getStatus());
+			}
+		}
+		loadMonitor.done();
+
+		if (result.size() != repos.length) {
+			throw new CoreException(repoStatus);
+		}
+		if (result.size() == 1) {
+			return (IQueryable) result.get(0);
+		}
+		return QueryUtil.compoundQueryable(result);
+	}
+
+	/**
+	 * Used to resolve the contents of this container if the user is including all required software.  The p2 planner is used
+	 * to determine the complete set of IUs required to run the selected software.  If all requirements are met, the bundles
+	 * are downloaded from the repository into the bundle pool and added to the target definition.
+	 * 
+	 * @param monitor for reporting progress
+	 * @throws CoreException if there is a problem with the requirements or there is a problem downloading
+	 */
+	private void resolveWithPlanner(ITargetDefinition target, IProgressMonitor monitor) throws CoreException {
+		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.IUBundleContainer_0, 200);
+
+		// Get the root IUs for every relevant container in the target definition
+		IInstallableUnit[] units = getRootIUs(target);
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+
+		// create the provisioning plan
+		IPlanner planner = getPlanner();
+		IProfileChangeRequest request = planner.createChangeRequest(fProfile);
+		// first remove everything that was explicitly installed.  Then add it back.  This has the net effect of 
+		// removing everything that is no longer needed.
+		computeRemovals(fProfile, request, getIncludeSource());
+		request.addAll(Arrays.asList(units));
+		for (int i = 0; i < units.length; i++) {
+			IInstallableUnit unit = units[i];
+			request.setInstallableUnitProfileProperty(unit, PROP_INSTALLED_IU, Boolean.toString(true));
+		}
+
+		ProvisioningContext context = new ProvisioningContext(getAgent());
+		context.setMetadataRepositories(getMetadataRepositories(target));
+		context.setArtifactRepositories(getArtifactRepositories(target));
+
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+
+		IProvisioningPlan plan = planner.getProvisioningPlan(request, context, subMonitor.newChild(20));
+		IStatus status = plan.getStatus();
+		if (!status.isOK()) {
+			throw new CoreException(status);
+		}
+		setPlanProperties(plan, target, TargetDefinitionPersistenceHelper.MODE_PLANNER);
+		IProvisioningPlan installerPlan = plan.getInstallerPlan();
+		if (installerPlan != null) {
+			// this plan requires an update to the installer first, log the fact and attempt
+			// to continue, we don't want to update the running SDK while provisioning a target
+			PDECore.log(new Status(IStatus.INFO, PDECore.PLUGIN_ID, Messages.IUBundleContainer_6));
+		}
+		subMonitor.worked(10);
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+
+		// execute the provisioning plan
+		IPhaseSet phases = createPhaseSet();
+		IEngine engine = getEngine();
+		IStatus result = engine.perform(plan, phases, subMonitor.newChild(100));
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+		if (!result.isOK()) {
+			throw new CoreException(result);
+		}
+
+		// Now that we have a plan with all the binary and explicit bundles, do a second pass and add 
+		// in all the source.
+		try {
+			planInSourceBundles(fProfile, context, subMonitor.newChild(60));
+		} catch (CoreException e) {
+			// XXX Review required: is adding in the source critical or optional?
+			// We failed adding in the source so remove the intermediate profile and rethrow
+			getProfileRegistry().removeProfile(fProfile.getProfileId(), fProfile.getTimestamp());
+			throw e;
+		}
+	}
+
+	private void setPlanProperties(IProvisioningPlan plan, ITargetDefinition definition, String mode) {
+		plan.setProfileProperty(PROP_PROVISION_MODE, mode);
+		plan.setProfileProperty(PROP_ALL_ENVIRONMENTS, Boolean.toString(getIncludeAllEnvironments()));
+		plan.setProfileProperty(PROP_AUTO_INCLUDE_SOURCE, Boolean.toString(getIncludeSource()));
+		plan.setProfileProperty(PROP_SEQUENCE_NUMBER, Integer.toString(((TargetDefinition) definition).getSequenceNumber()));
+	}
+
+	private IPhaseSet createPhaseSet() {
+		ArrayList phases = new ArrayList(4);
+		phases.add(new Collect(100));
+		phases.add(new Property(1));
+		phases.add(new Uninstall(50, true));
+		phases.add(new Install(50));
+		phases.add(new CollectNativesPhase(100));
+		return new PhaseSet((Phase[]) phases.toArray(new Phase[phases.size()]));
+	}
+
+	/** 
+	 * Update the given change request to remove anything that was explicitly installed
+	 * including the internal source IU.  
+	 */
+	private void computeRemovals(IProfile profile, IProfileChangeRequest request, boolean includeSource) {
+		// if include source is off then ensure that the source IU is removed.
+		if (!includeSource) {
+			IInstallableUnit sourceIU = getCurrentSourceIU(profile);
+			if (sourceIU != null)
+				request.remove(sourceIU);
+		}
+		// remove everything that is marked as roots.  The plan will have the new roots added in anyway.
+		IQuery query = new IUProfilePropertyQuery(PROP_INSTALLED_IU, Boolean.toString(true));
+		IQueryResult installedIUs = profile.query(query, null);
+		request.removeAll(installedIUs.toSet());
+	}
+
+	// run a second pass of the planner to add in the source bundles for everything that's
+	// in the current profile.
+	private void planInSourceBundles(IProfile fProfile, ProvisioningContext context, IProgressMonitor monitor) throws CoreException {
+		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.P2TargetUtils_ProvisioningSourceTask, 100);
+
+		// create an IU that optionally and greedily requires the related source bundles.
+		// Completely replace any source IU that may already be in place
+		IInstallableUnit currentSourceIU = getCurrentSourceIU(fProfile);
+
+		// determine the new version number.  start at 1
+		Version sourceVersion = Version.createOSGi(1, 0, 0);
+		if (currentSourceIU != null) {
+			Integer major = (Integer) currentSourceIU.getVersion().getSegment(0);
+			sourceVersion = Version.createOSGi(major.intValue() + 1, 0, 0);
+		}
+		IInstallableUnit sourceIU = createSourceIU(fProfile, sourceVersion);
+
+		// call the planner again to add in the new source IU and all available source bundles
+		IPlanner planner = getPlanner();
+		IProfileChangeRequest request = planner.createChangeRequest(fProfile);
+		if (currentSourceIU != null)
+			request.remove(currentSourceIU);
+		request.add(sourceIU);
+		IProvisioningPlan plan = planner.getProvisioningPlan(request, context, subMonitor.newChild(25));
+		IStatus status = plan.getStatus();
+		if (!status.isOK()) {
+			throw new CoreException(status);
+		}
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+
+		// execute the provisioning plan
+		long oldTimestamp = fProfile.getTimestamp();
+		IPhaseSet phases = PhaseSetFactory.createDefaultPhaseSetExcluding(new String[] {PhaseSetFactory.PHASE_CHECK_TRUST, PhaseSetFactory.PHASE_CONFIGURE, PhaseSetFactory.PHASE_UNCONFIGURE, PhaseSetFactory.PHASE_UNINSTALL});
+		IEngine engine = getEngine();
+		plan.setProfileProperty(PROP_PROVISION_MODE, TargetDefinitionPersistenceHelper.MODE_PLANNER);
+		plan.setProfileProperty(PROP_ALL_ENVIRONMENTS, Boolean.toString(false));
+		IStatus result = engine.perform(plan, phases, subMonitor.newChild(75));
+
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+		if (!result.isOK()) {
+			throw new CoreException(result);
+		}
+
+		// remove the old (intermediate) profile version now we have a new one with source.
+		getProfileRegistry().removeProfile(fProfile.getProfileId(), oldTimestamp);
+	}
+
+	// Create and return an IU that has optional and greedy requirements on all source bundles
+	// related to bundle IUs in the given queryable. 
+	private IInstallableUnit createSourceIU(IQueryable queryable, Version iuVersion) {
+		// compute the set of source bundles we could possibly need for the bundles in the profile
+		IRequirement bundleRequirement = MetadataFactory.createRequirement("org.eclipse.equinox.p2.eclipse.type", "bundle", null, null, false, false, false); //$NON-NLS-1$ //$NON-NLS-2$
+		IQueryResult profileIUs = queryable.query(QueryUtil.createIUAnyQuery(), null);
+		ArrayList requirements = new ArrayList();
+		for (Iterator i = profileIUs.iterator(); i.hasNext();) {
+			IInstallableUnit profileIU = (IInstallableUnit) i.next();
+			if (profileIU.satisfies(bundleRequirement)) {
+				String id = profileIU.getId() + ".source"; //$NON-NLS-1$
+				Version version = profileIU.getVersion();
+				VersionRange range = new VersionRange(version, true, version, true);
+				IRequirement sourceRequirement = MetadataFactory.createRequirement("osgi.bundle", id, range, null, true, false, true); //$NON-NLS-1$
+				requirements.add(sourceRequirement);
+			}
+		}
+
+		InstallableUnitDescription sourceDescription = new MetadataFactory.InstallableUnitDescription();
+		sourceDescription.setSingleton(true);
+		sourceDescription.setId(SOURCE_IU_ID);
+		sourceDescription.setVersion(iuVersion);
+		sourceDescription.addRequirements(requirements);
+		IProvidedCapability capability = MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, SOURCE_IU_ID, iuVersion);
+		sourceDescription.setCapabilities(new IProvidedCapability[] {capability});
+		return MetadataFactory.createInstallableUnit(sourceDescription);
+	}
+
+	// Lookup and return (if any) the source IU in the given queryable.
+	private IInstallableUnit getCurrentSourceIU(IQueryable queryable) {
+		IQuery query = QueryUtil.createIUQuery(SOURCE_IU_ID);
+		IQueryResult list = queryable.query(query, null);
+		IInstallableUnit currentSourceIU = null;
+		if (!list.isEmpty())
+			currentSourceIU = (IInstallableUnit) list.iterator().next();
+		return currentSourceIU;
+	}
+
+	/**
+	 * Used to resolve the contents of this container when the user has chosen to manage the dependencies in the target
+	 * themselves.  The selected IUs and any required software that can be found will be retrieved from the repositories 
+	 * and added to the target.  Any missing required software will be ignored.
+	 * 
+	 * @param monitor for reporting progress
+	 * @throws CoreException if there is a problem interacting with the repositories
+	 */
+	private void resolveWithSlicer(ITargetDefinition target, IProgressMonitor monitor) throws CoreException {
+		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.IUBundleContainer_0, 100);
+
+		// resolve IUs
+		IInstallableUnit[] units = getRootIUs(target);
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+
+		URI[] repositories = getMetadataRepositories(target);
+		int repoCount = repositories.length;
+		if (repoCount == 0) {
+			return;
+		}
+		IQueryable allMetadata = getQueryableMetadata(repositories, subMonitor.newChild(10));
+
+		// do an initial slice to add everything the user requested
+		IQueryResult queryResult = slice(units, allMetadata, target, subMonitor.newChild(10));
+		if (subMonitor.isCanceled() || queryResult == null || queryResult.isEmpty()) {
+			return;
+		}
+
+		// If we are including source then create a source IU to bring in the relevant source
+		// bundles and run the slicer again.
+		if (getIncludeSource()) {
+			// Build an IU that represents all the source bundles and slice again to add them in if available
+			IInstallableUnit sourceIU = createSourceIU(queryResult, Version.createOSGi(1, 0, 0));
+			IInstallableUnit[] units2 = new IInstallableUnit[units.length + 1];
+			System.arraycopy(units, 0, units2, 0, units.length);
+			units2[units.length] = sourceIU;
+
+			queryResult = slice(units2, allMetadata, target, subMonitor.newChild(10));
+			if (subMonitor.isCanceled() || queryResult == null || queryResult.isEmpty()) {
+				return;
+			}
+		}
+
+		IEngine engine = getEngine();
+		ProvisioningContext context = new ProvisioningContext(getAgent());
+		context.setMetadataRepositories(repositories);
+		context.setArtifactRepositories(getArtifactRepositories(target));
+		IProvisioningPlan plan = engine.createPlan(fProfile, context);
+		setPlanProperties(plan, target, TargetDefinitionPersistenceHelper.MODE_SLICER);
+
+		Set newSet = queryResult.toSet();
+		Iterator itor = newSet.iterator();
+		while (itor.hasNext()) {
+			plan.addInstallableUnit((IInstallableUnit) itor.next());
+		}
+		for (int i = 0; i < units.length; i++) {
+			IInstallableUnit unit = units[i];
+			plan.setInstallableUnitProfileProperty(unit, PROP_INSTALLED_IU, Boolean.toString(true));
+		}
+
+		// remove all units that are in the current profile but not in the new slice
+		Set toRemove = fProfile.query(QueryUtil.ALL_UNITS, null).toSet();
+		toRemove.removeAll(newSet);
+		for (Iterator i = toRemove.iterator(); i.hasNext();) {
+			plan.removeInstallableUnit((IInstallableUnit) i.next());
+		}
+
+		if (subMonitor.isCanceled()) {
+			return;
+		}
+		subMonitor.worked(10);
+
+		// execute the provisioning plan
+		IPhaseSet phases = createPhaseSet();
+		IStatus result = engine.perform(plan, phases, subMonitor.newChild(60));
+		if (!result.isOK()) {
+			throw new CoreException(result);
+		}
+	}
+
+	private IQueryResult slice(IInstallableUnit[] units, IQueryable allMetadata, ITargetDefinition definition, IProgressMonitor monitor) throws CoreException {
+		SubMonitor subMonitor = SubMonitor.convert(monitor, 100);
+		// slice IUs and all prerequisites
+		PermissiveSlicer slicer = null;
+		if (getIncludeAllEnvironments()) {
+			slicer = new PermissiveSlicer(allMetadata, new HashMap(), true, false, true, true, false);
+		} else {
+			Map props = new HashMap();
+			props.put("osgi.os", definition.getOS() != null ? definition.getOS() : Platform.getOS()); //$NON-NLS-1$
+			props.put("osgi.ws", definition.getWS() != null ? definition.getWS() : Platform.getWS()); //$NON-NLS-1$
+			props.put("osgi.arch", definition.getArch() != null ? definition.getArch() : Platform.getOSArch()); //$NON-NLS-1$
+			props.put("osgi.nl", definition.getNL() != null ? definition.getNL() : Platform.getNL()); //$NON-NLS-1$
+			props.put(IProfile.PROP_INSTALL_FEATURES, Boolean.TRUE.toString());
+			slicer = new PermissiveSlicer(allMetadata, props, true, false, false, true, false);
+		}
+		IQueryable slice = slicer.slice(units, subMonitor.newChild(50));
+		if (!slicer.getStatus().isOK()) {
+			throw new CoreException(slicer.getStatus());
+		}
+		IQueryResult queryResult = null;
+		if (slice != null)
+			queryResult = slice.query(QueryUtil.createIUAnyQuery(), subMonitor.newChild(50));
+		return queryResult;
+	}
+
+	/**
+	 * Returns the artifact repositories to consider when getting artifacts.  Returns a default set of
+	 * repositories if current repository settings are <code>null</code>).
+	 *  
+	 * @return URI's of repositories to use when getting artifacts
+	 * @exception CoreException
+	 */
+	private URI[] getArtifactRepositories(ITargetDefinition target) throws CoreException {
+		Set result = new HashSet();
+		IBundleContainer[] containers = target.getBundleContainers();
+		IArtifactRepositoryManager manager = getArtifactRepositoryManager();
+		for (int i = 0; i < containers.length; i++) {
+			IBundleContainer container = containers[i];
+			if (container instanceof IUBundleContainer) {
+				URI[] repos = ((IUBundleContainer) container).getRepositories();
+				if (repos == null) {
+					repos = manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
+				}
+				result.addAll(Arrays.asList(repos));
+			}
+		}
+		if (useAdditionalLocalArtifacts()) {
+			// get all the artifact repos we know in the manager currently
+			result.addAll(Arrays.asList(manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL)));
+
+			// Add in the IDE profile bundle pool and all known workspaces
+			findProfileRepos(result);
+			findWorkspaceRepos(result);
+		}
+		return (URI[]) result.toArray(new URI[result.size()]);
+	}
+
+	/**
+	 * return whether or not to use local artifact repositories when provisioning the target
+	 */
+	private boolean useAdditionalLocalArtifacts() {
+		// XXX consider using a preference here or another strategy if users are able to spec 
+		// what local repos are to be considered.
+		return true;
+	}
+
+	/** 
+	 * Add the artifact repos from the PDE target bundle pools from all known repos.  For example, the list 
+	 * of "recent workspaces" maintained by the IDE is a good source.
+	 * 
+	 * @param additionalRepos the set to which additional repos are added.
+	 */
+	private void findWorkspaceRepos(Set additionalRepos) {
+		IPreferencesService prefs = getPreferences();
+		if (prefs == null)
+			return;
+		String recent = prefs.getString("org.eclipse.ui.ide", "RECENT_WORKSPACES", null, null); //$NON-NLS-1$ //$NON-NLS-2$
+		if (recent == null)
+			return;
+		String[] recents = recent.split("\n"); //$NON-NLS-1$
+		for (int i = 0; i < recents.length; i++) {
+			String bundlePool = recents[i] + "/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool"; //$NON-NLS-1$
+			if (new File(bundlePool).exists()) {
+				URI uri;
+				try {
+					uri = new URI("file", bundlePool, null); //$NON-NLS-1$
+					additionalRepos.add(uri);
+				} catch (URISyntaxException e) {
+					// should never happen
+				}
+			}
+		}
+	}
+
+	/** 
+	 * Look through the current p2 profile (_SELF_) and add the artifact repos that make up its
+	 * bundle pool, dropins location, ...  This helps in the cases that you are targeting stuff that 
+	 * makes up your current IDE.
+	 * 
+	 * @param additionalRepos the set to which additional repos are added.
+	 */
+	private void findProfileRepos(Set additionalRepos) {
+		try {
+			// NOTE: be sure to use the global p2 agent here as we are looking for SELF.
+			IProfileRegistry profileRegistry = (IProfileRegistry) getGlobalAgent().getService(IProfileRegistry.SERVICE_NAME);
+			if (profileRegistry == null)
+				return;
+			IProfile self = profileRegistry.getProfile(IProfileRegistry.SELF);
+			if (self == null)
+				return;
+
+			IAgentLocation location = (IAgentLocation) getGlobalAgent().getService(IAgentLocation.SERVICE_NAME);
+			URI dataArea = location.getDataArea("org.eclipse.equinox.p2.engine"); //$NON-NLS-1$
+			dataArea = URIUtil.append(dataArea, "profileRegistry/" + self.getProfileId() + ".profile"); //$NON-NLS-1$//$NON-NLS-2$
+			ProfileMetadataRepository profileRepo = new ProfileMetadataRepository(getGlobalAgent(), dataArea, null);
+			Collection repos = profileRepo.getReferences();
+			for (Iterator i = repos.iterator(); i.hasNext();) {
+				Object element = i.next();
+				if (element instanceof IRepositoryReference) {
+					IRepositoryReference reference = (IRepositoryReference) element;
+					if (reference.getType() == IRepository.TYPE_ARTIFACT && reference.getLocation() != null)
+						additionalRepos.add(reference.getLocation());
+				}
+			}
+		} catch (CoreException e) {
+			// if there is a problem, move on.  Could log something here 
+			return;
+		}
+	}
+
+	/**
+	 * Returns the IU's for the given target related to the given containers
+	 * 
+	 * @param containers the bundle containers to filter with
+	 * @return the discovered IUs
+	 * @exception CoreException if unable to retrieve IU's
+	 */
+	private IInstallableUnit[] getRootIUs(ITargetDefinition definition) throws CoreException {
+		HashSet result = new HashSet();
+		IBundleContainer[] containers = definition.getBundleContainers();
+		for (int i = 0; i < containers.length; i++) {
+			IBundleContainer container = containers[i];
+			if (container instanceof IUBundleContainer) {
+				IUBundleContainer iuContainer = (IUBundleContainer) container;
+				IQueryable repos = getQueryableMetadata(iuContainer.getRepositories(), new NullProgressMonitor());
+				String[] ids = iuContainer.getIds();
+				Version[] versions = iuContainer.getVersions();
+				for (int j = 0; j < ids.length; j++) {
+					IQuery query = QueryUtil.createIUQuery(ids[j], versions[j]);
+					IQueryResult queryResult = repos.query(query, null);
+					if (queryResult.isEmpty())
+						throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.IUBundleContainer_1, ids[j])));
+					result.add(queryResult.iterator().next());
+				}
+			}
+		}
+		return (IInstallableUnit[]) result.toArray(new IInstallableUnit[result.size()]);
+	}
+
+	/**
+	 * Returns the repositories to consider when resolving IU's (will return default set of
+	 * repositories if current repository settings are <code>null</code>).
+	 *  
+	 * @return URI's of repositories to use when resolving bundles
+	 * @exception CoreException
+	 */
+	private URI[] getMetadataRepositories(ITargetDefinition target) throws CoreException {
+		Set result = new HashSet();
+		IBundleContainer[] containers = target.getBundleContainers();
+		IMetadataRepositoryManager manager = getRepoManager();
+		for (int i = 0; i < containers.length; i++) {
+			IBundleContainer container = containers[i];
+			if (container instanceof IUBundleContainer) {
+				URI[] repos = ((IUBundleContainer) container).getRepositories();
+				if (repos == null) {
+					repos = manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
+				}
+				result.addAll(Arrays.asList(repos));
+			}
+		}
+		return (URI[]) result.toArray(new URI[result.size()]);
+	}
+
+	private static final String NATIVE_ARTIFACTS = "nativeArtifacts"; //$NON-NLS-1$
+	private static final String NATIVE_TYPE = "org.eclipse.equinox.p2.native"; //$NON-NLS-1$
+	private static final String PARM_OPERAND = "operand"; //$NON-NLS-1$
+
+	protected static class CollectNativesAction extends ProvisioningAction {
+		public IStatus execute(Map parameters) {
+			InstallableUnitOperand operand = (InstallableUnitOperand) parameters.get(PARM_OPERAND);
+			IInstallableUnit installableUnit = operand.second();
+			if (installableUnit == null)
+				return Status.OK_STATUS;
+
+			IArtifactRepositoryManager manager;
+			try {
+				Collection toDownload = installableUnit.getArtifacts();
+				if (toDownload == null)
+					return Status.OK_STATUS;
+
+				List artifactRequests = (List) parameters.get(NATIVE_ARTIFACTS);
+				IArtifactRepository destinationArtifactRepository = getBundlePool();
+				manager = getArtifactRepositoryManager();
+				for (Iterator i = toDownload.iterator(); i.hasNext();) {
+					IArtifactKey keyToDownload = (IArtifactKey) i.next();
+					IArtifactRequest request = manager.createMirrorRequest(keyToDownload, destinationArtifactRepository, null, null);
+					artifactRequests.add(request);
+				}
+			} catch (CoreException e) {
+				return e.getStatus();
+			}
+			return Status.OK_STATUS;
+		}
+
+		public IStatus undo(Map parameters) {
+			// nothing to do for now
+			return Status.OK_STATUS;
+		}
+	}
+
+	protected static class CollectNativesPhase extends InstallableUnitPhase {
+		public CollectNativesPhase(int weight) {
+			super(NATIVE_ARTIFACTS, weight);
+		}
+
+		protected List getActions(InstallableUnitOperand operand) {
+			IInstallableUnit unit = operand.second();
+			if (unit != null && unit.getTouchpointType().getId().equals(NATIVE_TYPE)) {
+				return Collections.singletonList(new CollectNativesAction());
+			}
+			return null;
+		}
+
+		protected IStatus initializePhase(IProgressMonitor monitor, IProfile profile, Map parameters) {
+			parameters.put(NATIVE_ARTIFACTS, new ArrayList());
+			parameters.put(PARM_PROFILE, profile);
+			return null;
+		}
+
+		protected IStatus completePhase(IProgressMonitor monitor, IProfile profile, Map parameters) {
+			List artifactRequests = (List) parameters.get(NATIVE_ARTIFACTS);
+			ProvisioningContext context = (ProvisioningContext) parameters.get(PARM_CONTEXT);
+			IProvisioningAgent agent = (IProvisioningAgent) parameters.get(PARM_AGENT);
+			DownloadManager dm = new DownloadManager(context, agent);
+			for (Iterator i = artifactRequests.iterator(); i.hasNext();) {
+				dm.add((IArtifactRequest) i.next());
+			}
+			return dm.start(monitor);
+		}
+	}
+
+	/**
+	 * @return the profile associated with this synchronizer
+	 */
+	IProfile getProfile() {
+		return fProfile;
+	}
+
+//	/**
+//	 * @return the target definition associated with this synchronizer
+//	 */
+//	ITargetDefinition getTargetDefinition() {
+//		return fTarget;
+//	}
+
+	void markDirty() {
+		fDirty = true;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ResolvedBundle.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ResolvedBundle.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
old mode 100644
new mode 100755
index db304fe..63f53b9
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,12 +19,7 @@ import org.eclipse.core.variables.IStringVariableManager;
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.equinox.p2.engine.IProfileRegistry;
-import org.eclipse.equinox.p2.engine.query.IUProfilePropertyQuery;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.query.IQueryResult;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.core.plugin.TargetPlatform;
 import org.eclipse.pde.internal.core.ExternalFeatureModelManager;
@@ -80,6 +75,8 @@ public class TargetDefinition implements ITargetDefinition {
 	private IFeatureModel[] fFeatureModels;
 	private IResolvedBundle[] fOtherBundles;
 
+	private int fSequenceNumber = -1;
+
 	/**
 	 * Constructs a target definition based on the given handle. 
 	 */
@@ -147,6 +144,7 @@ public class TargetDefinition implements ITargetDefinition {
 	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetDefinition#setArch(java.lang.String)
 	 */
 	public void setArch(String arch) {
+		incrementSequenceNumber();
 		fArch = arch;
 	}
 
@@ -154,6 +152,7 @@ public class TargetDefinition implements ITargetDefinition {
 	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetDefinition#setNL(java.lang.String)
 	 */
 	public void setNL(String nl) {
+		incrementSequenceNumber();
 		fNL = nl;
 	}
 
@@ -168,6 +167,7 @@ public class TargetDefinition implements ITargetDefinition {
 	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetDefinition#setOS(java.lang.String)
 	 */
 	public void setOS(String os) {
+		incrementSequenceNumber();
 		fOS = os;
 	}
 
@@ -195,6 +195,7 @@ public class TargetDefinition implements ITargetDefinition {
 	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetDefinition#setWS(java.lang.String)
 	 */
 	public void setWS(String ws) {
+		incrementSequenceNumber();
 		fWS = ws;
 	}
 
@@ -202,6 +203,7 @@ public class TargetDefinition implements ITargetDefinition {
 	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetDefinition#setBundleContainers(org.eclipse.pde.internal.core.target.provisional.IBundleContainer[])
 	 */
 	public void setBundleContainers(IBundleContainer[] containers) {
+		incrementSequenceNumber();
 		// Clear the feature model cache as it is based on the bundle container locations
 		fFeatureModels = null;
 		fOtherBundles = null;
@@ -215,6 +217,30 @@ public class TargetDefinition implements ITargetDefinition {
 		if (containers == null) {
 			fIncluded = null;
 			fOptional = null;
+		} else {
+			for (int i = 0; i < containers.length; i++) {
+				((AbstractBundleContainer) containers[i]).associateWithTarget(this);
+			}
+		}
+	}
+
+	/**
+	 * Clears the any models that are cached for the given container location.
+	 * 
+	 * @param location location to clear cache for or <code>null</code> to clear all cached models
+	 */
+	public void flushCaches(String location) {
+		// Clear the feature model cache as it is based on the bundle container locations
+		fFeatureModels = null;
+		fOtherBundles = null;
+		if (location == null) {
+			fFeaturesInLocation.clear();
+		} else {
+			fFeaturesInLocation.remove(location);
+		}
+		if (fContainers == null) {
+			fIncluded = null;
+			fOptional = null;
 		}
 	}
 
@@ -365,9 +391,11 @@ public class TargetDefinition implements ITargetDefinition {
 				for (int i = 0; i < containers.length; i++) {
 					IBundleContainer container = containers[i];
 					IResolvedBundle[] bundles = container.getBundles();
-					for (int j = 0; j < bundles.length; j++) {
-						IResolvedBundle rb = bundles[j];
-						all.add(rb);
+					if (bundles != null) {
+						for (int j = 0; j < bundles.length; j++) {
+							IResolvedBundle rb = bundles[j];
+							all.add(rb);
+						}
 					}
 				}
 
@@ -626,6 +654,7 @@ public class TargetDefinition implements ITargetDefinition {
 			fProgramArgs = null;
 			fVMArgs = null;
 			fWS = null;
+			fSequenceNumber = 0;
 			TargetDefinitionPersistenceHelper.initFromXML(this, stream);
 		} catch (ParserConfigurationException e) {
 			abort(Messages.TargetDefinition_0, e);
@@ -840,153 +869,6 @@ public class TargetDefinition implements ITargetDefinition {
 	}
 
 	/**
-	 * Returns whether software site containers are configured to provision for all environments
-	 * versus a single environment.
-	 * 
-	 * @return whether all environments will be provisioned
-	 */
-	private boolean isAllEnvironments() {
-		IBundleContainer[] containers = getBundleContainers();
-		if (containers != null) {
-			for (int i = 0; i < containers.length; i++) {
-				if (containers[i] instanceof IUBundleContainer) {
-					IUBundleContainer iu = (IUBundleContainer) containers[i];
-					if (iu.getIncludeAllEnvironments()) {
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Returns the mode used to provision this target - slice versus plan or <code>null</code> if
-	 * this target has no software sites.
-	 * 
-	 * @return provisioning mode or <code>null</code>
-	 */
-	private String getProvisionMode() {
-		IBundleContainer[] containers = getBundleContainers();
-		if (containers != null) {
-			for (int i = 0; i < containers.length; i++) {
-				if (containers[i] instanceof IUBundleContainer) {
-					IUBundleContainer iu = (IUBundleContainer) containers[i];
-					if (iu.getIncludeAllRequired()) {
-						return TargetDefinitionPersistenceHelper.MODE_PLANNER;
-					}
-					return TargetDefinitionPersistenceHelper.MODE_SLICER;
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the profile for the this target handle, creating one if required.
-	 * 
-	 * @return profile
-	 * @throws CoreException in unable to retrieve profile
-	 */
-	public IProfile getProfile() throws CoreException {
-		IProfileRegistry registry = AbstractTargetHandle.getProfileRegistry();
-		if (registry == null) {
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.AbstractTargetHandle_0));
-		}
-		AbstractTargetHandle handle = ((AbstractTargetHandle) getHandle());
-		String id = handle.getProfileId();
-		IProfile profile = registry.getProfile(id);
-		if (profile != null) {
-			boolean recreate = false;
-			// check if all environments setting is the same
-			boolean all = false;
-			String value = profile.getProperty(AbstractTargetHandle.PROP_ALL_ENVIRONMENTS);
-			if (value != null) {
-				all = Boolean.valueOf(value).booleanValue();
-				if (!Boolean.toString(isAllEnvironments()).equals(value)) {
-					recreate = true;
-				}
-			}
-			// ensure environment & NL settings are still the same (else we need a new profile)
-			String property = null;
-			if (!recreate && !all) {
-				property = generateEnvironmentProperties();
-				value = profile.getProperty(IProfile.PROP_ENVIRONMENTS);
-				if (!property.equals(value)) {
-					recreate = true;
-				}
-			}
-			// check provisioning mode: slice versus plan
-			String mode = getProvisionMode();
-			if (mode != null) {
-				value = profile.getProperty(AbstractTargetHandle.PROP_PROVISION_MODE);
-				if (!mode.equals(value)) {
-					recreate = true;
-				}
-			}
-
-			if (!recreate) {
-				property = generateNLProperty();
-				value = profile.getProperty(IProfile.PROP_NL);
-				if (!property.equals(value)) {
-					recreate = true;
-				}
-			}
-			if (!recreate) {
-				// check top level IU's. If any have been removed from the containers that are
-				// still in the profile, we need to recreate (rather than uninstall)
-				IUProfilePropertyQuery propertyQuery = new IUProfilePropertyQuery(AbstractTargetHandle.PROP_INSTALLED_IU, Boolean.toString(true));
-				IQueryResult queryResult = profile.query(propertyQuery, null);
-				Iterator iterator = queryResult.iterator();
-				if (iterator.hasNext()) {
-					Set installedIUs = new HashSet();
-					while (iterator.hasNext()) {
-						IInstallableUnit unit = (IInstallableUnit) iterator.next();
-						installedIUs.add(new NameVersionDescriptor(unit.getId(), unit.getVersion().toString()));
-					}
-					IBundleContainer[] containers = getBundleContainers();
-					if (containers != null) {
-						for (int i = 0; i < containers.length; i++) {
-							if (containers[i] instanceof IUBundleContainer) {
-								IUBundleContainer bc = (IUBundleContainer) containers[i];
-								String[] ids = bc.getIds();
-								Version[] versions = bc.getVersions();
-								for (int j = 0; j < versions.length; j++) {
-									installedIUs.remove(new NameVersionDescriptor(ids[j], versions[j].toString()));
-								}
-							}
-						}
-					}
-					if (!installedIUs.isEmpty()) {
-						recreate = true;
-					}
-				}
-			}
-			if (recreate) {
-				handle.deleteProfile();
-				profile = null;
-			}
-		}
-		if (profile == null) {
-			// create profile
-			Map properties = new HashMap();
-			properties.put(IProfile.PROP_INSTALL_FOLDER, AbstractTargetHandle.INSTALL_FOLDERS.append(Long.toString(LocalTargetHandle.nextTimeStamp())).toOSString());
-			properties.put(IProfile.PROP_CACHE, AbstractTargetHandle.BUNDLE_POOL.toOSString());
-			properties.put(IProfile.PROP_INSTALL_FEATURES, Boolean.TRUE.toString());
-			// set up environment & NL properly so OS specific fragments are down loaded/installed
-			properties.put(IProfile.PROP_ENVIRONMENTS, generateEnvironmentProperties());
-			properties.put(IProfile.PROP_NL, generateNLProperty());
-			String mode = getProvisionMode();
-			if (mode != null) {
-				properties.put(AbstractTargetHandle.PROP_PROVISION_MODE, mode);
-				properties.put(AbstractTargetHandle.PROP_ALL_ENVIRONMENTS, Boolean.toString(isAllEnvironments()));
-			}
-			profile = registry.addProfile(id, properties);
-		}
-		return profile;
-	}
-
-	/**
 	 * Returns a set of feature models that exist in the provided location.  If
 	 * the locationPath is <code>null</code> the default target platform location
 	 * will be used.  The locationPath string may container string variables which
@@ -1037,18 +919,22 @@ public class TargetDefinition implements ITargetDefinition {
 
 		IBundleContainer[] containers = getBundleContainers();
 
-		ArrayList features = new ArrayList();
-		// secondary containers are considered additional
+		// collect up all features from all containers and remove duplicates.
+		Map result = new HashMap();
 		if (containers != null && containers.length > 0) {
 			for (int i = 0; i < containers.length; i++) {
 				IFeatureModel[] currentFeatures = containers[i].getFeatures();
 				if (currentFeatures != null && currentFeatures.length > 0) {
-					features.addAll(Arrays.asList(currentFeatures));
+					for (int j = 0; j < currentFeatures.length; j++) {
+						IFeatureModel feature = currentFeatures[j];
+						NameVersionDescriptor key = new NameVersionDescriptor(feature.getFeature().getId(), feature.getFeature().getVersion());
+						result.put(key, feature);
+					}
 				}
 			}
 		}
 
-		fFeatureModels = (IFeatureModel[]) features.toArray(new IFeatureModel[features.size()]);
+		fFeatureModels = (IFeatureModel[]) result.values().toArray(new IFeatureModel[result.size()]);
 		return fFeatureModels;
 	}
 
@@ -1144,55 +1030,46 @@ public class TargetDefinition implements ITargetDefinition {
 		return result;
 	}
 
+	/**
+	 * @return the current UI style one of {@link #MODE_FEATURE} or {@link #MODE_PLUGIN}
+	 */
 	public int getUIMode() {
 		return fUIMode;
 	}
 
+	/**
+	 * @param mode new UI style to use, one of {@link #MODE_FEATURE} or {@link #MODE_PLUGIN}
+	 */
 	public void setUIMode(int mode) {
 		fUIMode = mode;
 	}
 
 	/**
-	 * Generates the environment properties string for this target definition's p2 profile.
+	 * Returns the current sequence number of this target.  Sequence numbers change
+	 * whenever something in the target that affects the set of features and bundles that 
+	 * would be resolved.
 	 * 
-	 * @return environment properties
+	 * @return the current sequence number
 	 */
-	private String generateEnvironmentProperties() {
-		// TODO: are there constants for these keys?
-		StringBuffer env = new StringBuffer();
-		String ws = getWS();
-		if (ws == null) {
-			ws = Platform.getWS();
-		}
-		env.append("osgi.ws="); //$NON-NLS-1$
-		env.append(ws);
-		env.append(","); //$NON-NLS-1$
-		String os = getOS();
-		if (os == null) {
-			os = Platform.getOS();
-		}
-		env.append("osgi.os="); //$NON-NLS-1$
-		env.append(os);
-		env.append(","); //$NON-NLS-1$
-		String arch = getArch();
-		if (arch == null) {
-			arch = Platform.getOSArch();
-		}
-		env.append("osgi.arch="); //$NON-NLS-1$
-		env.append(arch);
-		return env.toString();
+	public int getSequenceNumber() {
+		return fSequenceNumber;
 	}
 
 	/**
-	 * Generates the NL property for this target definition's p2 profile.
-	 * 
-	 * @return NL profile property
+	 * Increases the current sequence number.
+	 * @see TargetDefinition#getSequenceNumber()
+	 * @return the current sequence number after it has been increased
 	 */
-	private String generateNLProperty() {
-		String nl = getNL();
-		if (nl == null) {
-			nl = Platform.getNL();
-		}
-		return nl;
+	public int incrementSequenceNumber() {
+		return ++fSequenceNumber;
+	}
+
+	/**
+	 * Convenience method to set the sequence number to a specific 
+	 * value. Used when loading a target from a persisted file.
+	 * @param value value to set the sequence number to
+	 */
+	void setSequenceNumber(int value) {
+		fSequenceNumber = value;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinitionPersistenceHelper.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinitionPersistenceHelper.java
old mode 100644
new mode 100755
index 7270784..e5b936d
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinitionPersistenceHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinitionPersistenceHelper.java
@@ -68,9 +68,11 @@ public class TargetDefinitionPersistenceHelper {
 	public static final String MODE_SLICER = "slicer"; //$NON-NLS-1$
 	public static final String MODE_PLANNER = "planner"; //$NON-NLS-1$
 	static final String ATTR_INCLUDE_ALL_PLATFORMS = "includeAllPlatforms"; //$NON-NLS-1$
+	static final String ATTR_INCLUDE_SOURCE = "includeSource"; //$NON-NLS-1$
 	static final String ATTR_OPTIONAL = "optional"; //$NON-NLS-1$
 	static final String ATTR_VERSION = "version"; //$NON-NLS-1$
 	static final String ATTR_CONFIGURATION = "configuration"; //$NON-NLS-1$
+	static final String ATTR_SEQUENCE_NUMBER = "sequenceNumber"; //$NON-NLS-1$
 	static final String CONTENT = "content"; //$NON-NLS-1$
 	static final String ATTR_USE_ALL = "useAllPlugins"; //$NON-NLS-1$
 	static final String PLUGINS = "plugins"; //$NON-NLS-1$
@@ -106,6 +108,8 @@ public class TargetDefinitionPersistenceHelper {
 			rootElement.setAttribute(ATTR_INCLUDE_MODE, FEATURE);
 		}
 
+		rootElement.setAttribute(ATTR_SEQUENCE_NUMBER, Integer.toString(((TargetDefinition) definition).getSequenceNumber()));
+
 		IBundleContainer[] containers = definition.getBundleContainers();
 		if (containers != null && containers.length > 0) {
 			Element containersElement = doc.createElement(LOCATIONS);
@@ -300,6 +304,7 @@ public class TargetDefinitionPersistenceHelper {
 			IUBundleContainer iubc = (IUBundleContainer) container;
 			containerElement.setAttribute(ATTR_INCLUDE_MODE, iubc.getIncludeAllRequired() ? MODE_PLANNER : MODE_SLICER);
 			containerElement.setAttribute(ATTR_INCLUDE_ALL_PLATFORMS, Boolean.toString(iubc.getIncludeAllEnvironments()));
+			containerElement.setAttribute(ATTR_INCLUDE_SOURCE, Boolean.toString(iubc.getIncludeSource()));
 			String[] ids = iubc.getIds();
 			Version[] versions = iubc.getVersions();
 			for (int i = 0; i < ids.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java
index b2b5c37..fb07312 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java
@@ -224,18 +224,14 @@ public class TargetPersistence35Helper {
 			String[] iuIDs = (String[]) ids.toArray(new String[ids.size()]);
 			String[] iuVer = (String[]) versions.toArray(new String[versions.size()]);
 			URI[] uris = (URI[]) repos.toArray(new URI[repos.size()]);
-			container = new IUBundleContainer(iuIDs, iuVer, uris);
+			int flags = IUBundleContainer.INCLUDE_REQUIRED;
 			if (includeMode != null && includeMode.trim().length() > 0) {
-				if (includeMode.equals(TargetDefinitionPersistenceHelper.MODE_PLANNER)) {
-					((IUBundleContainer) container).setIncludeAllRequired(true, null);
-				} else if (includeMode.equals(TargetDefinitionPersistenceHelper.MODE_SLICER)) {
-					((IUBundleContainer) container).setIncludeAllRequired(false, null);
+				if (includeMode.equals(TargetDefinitionPersistenceHelper.MODE_SLICER)) {
+					flags = 0;
 				}
 			}
-			if (includeAllPlatforms != null && includeAllPlatforms.trim().length() > 0) {
-				((IUBundleContainer) container).setIncludeAllEnvironments(Boolean.valueOf(includeAllPlatforms).booleanValue(), null);
-			}
-
+			flags |= Boolean.valueOf(includeAllPlatforms).booleanValue() ? IUBundleContainer.INCLUDE_ALL_ENVIRONMENTS : 0;
+			container = new IUBundleContainer(iuIDs, iuVer, uris, flags);
 		}
 
 		NodeList list = location.getChildNodes();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence36Helper.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence36Helper.java
index ea249cb..711c428 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence36Helper.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence36Helper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,19 @@ import org.w3c.dom.*;
  */
 public class TargetPersistence36Helper {
 
+	/* Example of Software location in Target XML
+
+	<?xml version="1.0" encoding="UTF-8"?><?pde version="3.6"?><target name="SoftwareSiteTarget" sequenceNumber="6">
+	<locations>
+	<location includeAllPlatforms="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
+	<unit id="org.eclipse.egit.feature.group" version="0.11.3"/>
+	<unit id="org.eclipse.jgit.feature.group" version="0.11.3"/>
+	<repository location="http://download.eclipse.org/releases/indigo"/>
+	</location>
+	</locations>
+	</target>
+	
+	*/
 	public static void initFromDoc(ITargetDefinition definition, Element root) throws CoreException {
 		String name = root.getAttribute(TargetDefinitionPersistenceHelper.ATTR_NAME);
 		if (name.length() > 0) {
@@ -148,6 +161,14 @@ public class TargetPersistence36Helper {
 				}
 			}
 		}
+
+		// Set the sequence number at the very end
+		String sequenceNumber = root.getAttribute(TargetDefinitionPersistenceHelper.ATTR_SEQUENCE_NUMBER);
+		try {
+			((TargetDefinition) definition).setSequenceNumber(Integer.parseInt(sequenceNumber));
+		} catch (NumberFormatException e) {
+			((TargetDefinition) definition).setSequenceNumber(0);
+		}
 	}
 
 	/**
@@ -181,6 +202,7 @@ public class TargetPersistence36Helper {
 		} else if (IUBundleContainer.TYPE.equals(type)) {
 			String includeMode = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_INCLUDE_MODE);
 			String includeAllPlatforms = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_INCLUDE_ALL_PLATFORMS);
+			String includeSource = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_INCLUDE_SOURCE);
 			NodeList list = location.getChildNodes();
 			List ids = new ArrayList();
 			List versions = new ArrayList();
@@ -214,18 +236,16 @@ public class TargetPersistence36Helper {
 			String[] iuIDs = (String[]) ids.toArray(new String[ids.size()]);
 			String[] iuVer = (String[]) versions.toArray(new String[versions.size()]);
 			URI[] uris = (URI[]) repos.toArray(new URI[repos.size()]);
-			container = new IUBundleContainer(iuIDs, iuVer, uris);
+
+			int flags = IUBundleContainer.INCLUDE_REQUIRED;
 			if (includeMode != null && includeMode.trim().length() > 0) {
-				if (includeMode.equals(TargetDefinitionPersistenceHelper.MODE_PLANNER)) {
-					((IUBundleContainer) container).setIncludeAllRequired(true, null);
-				} else if (includeMode.equals(TargetDefinitionPersistenceHelper.MODE_SLICER)) {
-					((IUBundleContainer) container).setIncludeAllRequired(false, null);
+				if (includeMode.equals(TargetDefinitionPersistenceHelper.MODE_SLICER)) {
+					flags = 0;
 				}
 			}
-			if (includeAllPlatforms != null && includeAllPlatforms.trim().length() > 0) {
-				((IUBundleContainer) container).setIncludeAllEnvironments(Boolean.valueOf(includeAllPlatforms).booleanValue(), null);
-			}
-
+			flags |= Boolean.valueOf(includeAllPlatforms).booleanValue() ? IUBundleContainer.INCLUDE_ALL_ENVIRONMENTS : 0;
+			flags |= Boolean.valueOf(includeSource).booleanValue() ? IUBundleContainer.INCLUDE_SOURCE : 0;
+			container = new IUBundleContainer(iuIDs, iuVer, uris, flags);
 		}
 		return container;
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPlatformService.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPlatformService.java
old mode 100644
new mode 100755
index dc0bb39..cae7bfd
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPlatformService.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPlatformService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,10 +16,6 @@ import java.util.*;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
-import org.eclipse.equinox.internal.p2.garbagecollector.GarbageCollector;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.equinox.p2.engine.IProfileRegistry;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.util.NLS;
@@ -73,6 +69,12 @@ public class TargetPlatformService implements ITargetPlatformService {
 	private TargetPlatformService() {
 	}
 
+	/**
+	 * The target service should be obtained by requesting the {@link ITargetPlatformService} from OSGi. This
+	 * method should only be used internally be PDE.
+	 * 
+	 * @return The singleton implementation of this service
+	 */
 	public synchronized static ITargetPlatformService getDefault() {
 		if (fgDefault == null) {
 			fgDefault = new TargetPlatformService();
@@ -595,68 +597,16 @@ public class TargetPlatformService implements ITargetPlatformService {
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService#newIUContainer(org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit[], java.net.URI[])
+	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService#newIUContainer(org.eclipse.equinox.p2.metadata.IInstallableUnit[], java.net.URI[], int)
 	 */
-	public IBundleContainer newIUContainer(IInstallableUnit[] units, URI[] repositories) {
-		return new IUBundleContainer(units, repositories);
-	}
-
-	/**
-	 * Deletes any profiles associated with target definitions that no longer exist
-	 * and returns a list of profile identifiers that were deleted.
-	 */
-	public List cleanOrphanedTargetDefinitionProfiles() throws CoreException {
-		List list = new ArrayList();
-		IProfileRegistry registry = AbstractTargetHandle.getProfileRegistry();
-		if (registry != null) {
-			IProfile[] profiles = registry.getProfiles();
-			for (int i = 0; i < profiles.length; i++) {
-				IProfile profile = profiles[i];
-				String id = profile.getProfileId();
-				if (id.startsWith(AbstractTargetHandle.PROFILE_ID_PREFIX)) {
-					String memento = id.substring(AbstractTargetHandle.PROFILE_ID_PREFIX.length());
-					AbstractTargetHandle target = (AbstractTargetHandle) getTarget(memento);
-					if (!target.exists()) {
-						target.deleteProfile();
-						list.add(id);
-					}
-				}
-			}
-		}
-		return list;
-	}
-
-	/**
-	 * Performs garbage collection based on remaining profiles. Should be called to avoid
-	 * having PDE's bundle pool area grow unbounded.
-	 */
-	public void garbageCollect() {
-		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		if (agent != null) {
-			IProfileRegistry registry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
-			if (registry != null) {
-				IProfile[] profiles = registry.getProfiles();
-				if (profiles.length > 0) {
-					IProfile profile = null;
-					for (int i = 0; i < profiles.length; i++) {
-						if (profiles[i].getProfileId().startsWith(AbstractTargetHandle.PROFILE_ID_PREFIX)) {
-							profile = profiles[i];
-							break;
-						}
-					}
-					if (profile != null) {
-						GarbageCollector gc = (GarbageCollector) agent.getService(GarbageCollector.SERVICE_NAME);
-						gc.runGC(profile);
-					}
-				}
-			}
-		}
+	public IBundleContainer newIUContainer(IInstallableUnit[] units, URI[] repositories, int resolutionFlags) {
+		return new IUBundleContainer(units, repositories, resolutionFlags);
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService#newIUContainer(java.lang.String[], java.lang.String[], java.net.URI[])
+	 * @see org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService#newIUContainer(java.lang.String[], java.lang.String[], java.net.URI[], int)
 	 */
-	public IBundleContainer newIUContainer(String[] unitIds, String[] versions, URI[] repositories) {
-		return new IUBundleContainer(unitIds, versions, repositories);
+	public IBundleContainer newIUContainer(String[] unitIds, String[] versions, URI[] repositories, int resolutionFlags) {
+		return new IUBundleContainer(unitIds, versions, repositories, resolutionFlags);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/UpdateTargetJob.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/UpdateTargetJob.java
new file mode 100644
index 0000000..5236d7d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/UpdateTargetJob.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 EclipseSource Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    EclipseSource Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.core.target;
+
+import java.util.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.core.target.provisional.IBundleContainer;
+
+/**
+ * Job that will update a set of installable units from a set of bundle containers.  Containers that 
+ * support updating (currently only {@link IUBundleContainer}) will check to see if any updates are 
+ * available and if so, update to the newest version. 
+ */
+public class UpdateTargetJob extends Job {
+	/**
+	 * Bitmask constant indicating that the effective set of bundles and features indicated by this
+	 * container has changed. Typically as the result of an update() operation.
+	 */
+	public static final int UPDATED = 1 << 1;
+
+	/**
+	 * Bitmask constant indicating that the actual definition of this
+	 * container has changed. Typically as the result of an update() operation.
+	 * This indicates that the target definition containing an updated container
+	 * should be saved.
+	 */
+	public static final int DIRTY = 1 << 2;
+
+	private static final String JOB_FAMILY_ID = "UpdateTargetJob"; //$NON-NLS-1$
+
+	private Map toUpdate;
+	private int result = 0;
+
+	/**
+	 * Schedules a new update job that will update a set of installable units from a set of containers.  Any
+	 * previously running update jobs will be cancelled.  If a listener is provided it will be added to
+	 * the scheduled job.
+	 * 
+	 * @param toUpdate maps {@link IBundleContainer}s that to the {@link Set} of {@link IInstallableUnit}s 
+	 * that should be updated.  If the container maps to an empty set, all IUs from the container will be updated.
+	 * @param listener job change listener that will be added to the created job, can be <code>null</code>
+	 */
+	public static void update(Map toUpdate, IJobChangeListener listener) {
+		Job.getJobManager().cancel(JOB_FAMILY_ID);
+		Job job = new UpdateTargetJob(toUpdate);
+		job.setUser(true);
+		if (listener != null) {
+			job.addJobChangeListener(listener);
+		}
+		job.schedule();
+	}
+
+	/**
+	 * @see UpdateTargetJob#update(Map, IJobChangeListener)
+	 */
+	private UpdateTargetJob(Map toUpdate) {
+		super(Messages.UpdateTargetJob_UpdateJobName);
+		this.toUpdate = toUpdate;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected IStatus run(IProgressMonitor monitor) {
+		SubMonitor progress = SubMonitor.convert(monitor, Messages.UpdateTargetJob_UpdatingTarget, toUpdate.size());
+		result = 0;
+		try {
+			for (Iterator i = toUpdate.entrySet().iterator(); i.hasNext();) {
+				try {
+					Map.Entry entry = (Map.Entry) i.next();
+					IBundleContainer container = (IBundleContainer) entry.getKey();
+					monitor.subTask(NLS.bind(Messages.UpdateTargetJob_UpdatingContainer, ((AbstractBundleContainer) container).getLocation(false)));
+					if (container instanceof IUBundleContainer)
+						result |= ((IUBundleContainer) container).update((Set) entry.getValue(), progress.newChild(1));
+				} catch (CoreException e1) {
+					return e1.getStatus();
+				} finally {
+					monitor.worked(1);
+				}
+			}
+		} finally {
+			monitor.done();
+		}
+		return Status.OK_STATUS;
+	}
+
+	/**
+	 * @return whether the update job ran and resulted in the definition of a container changing and the target definition file needs to be saved 
+	 * @see #isUpdated()
+	 */
+	public boolean isDirty() {
+		return (result & DIRTY) != 0;
+	}
+
+	/**
+	 * @return whether the update job ran and resulted in the bundles or features in a container changed
+	 * @see UpdateTargetJob#isDirty()
+	 */
+	public boolean isUpdated() {
+		return (result & UPDATED) != 0;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/WorkspaceFileTargetHandle.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/WorkspaceFileTargetHandle.java
old mode 100644
new mode 100755
index d3d4ca5..d2bbb7f
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/WorkspaceFileTargetHandle.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/WorkspaceFileTargetHandle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -107,7 +107,7 @@ public class WorkspaceFileTargetHandle extends AbstractTargetHandle {
 		if (fFile.exists()) {
 			fFile.delete(false, null);
 		}
-		deleteProfile();
+		P2TargetUtils.deleteProfile(this);
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/ITargetPlatformService.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/ITargetPlatformService.java
index c9a2d43..62f7513 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/ITargetPlatformService.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/ITargetPlatformService.java
@@ -10,16 +10,17 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.core.target.provisional;
 
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-
 import java.net.URI;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.pde.internal.core.target.IUBundleContainer;
 
 /**
  * A service to manage target platform definitions available to the workspace.
  * 
  * @since 3.5
+ * @noimplement This interface is not intended to be implemented by clients. 
  */
 public interface ITargetPlatformService {
 
@@ -139,9 +140,10 @@ public interface ITargetPlatformService {
 	 * @param units installable units
 	 * @param repositories URI's describing repository locations or <code>null</code> to use
 	 * 	default repositories
+	 * @param resolutionFlags bitmask of flags to control IU resolution, possible flags are {@link IUBundleContainer#INCLUDE_ALL_ENVIRONMENTS}, {@link IUBundleContainer#INCLUDE_REQUIRED}, {@link IUBundleContainer#INCLUDE_SOURCE}
 	 * @return bundle container
 	 */
-	public IBundleContainer newIUContainer(IInstallableUnit[] units, URI[] repositories);
+	public IBundleContainer newIUContainer(IInstallableUnit[] units, URI[] repositories, int resolutionFlags);
 
 	/**
 	 * Creates and returns a bundle container that contains all bundles contained in
@@ -152,9 +154,10 @@ public interface ITargetPlatformService {
 	 * @param versions version identifiers
 	 * @param repositories URI's describing repository locations or <code>null</code> to use
 	 * 	default repositories
+	 * @param resolutionFlags bitmask of flags to control IU resolution, possible flags are {@link IUBundleContainer#INCLUDE_ALL_ENVIRONMENTS}, {@link IUBundleContainer#INCLUDE_REQUIRED}, {@link IUBundleContainer#INCLUDE_SOURCE}
 	 * @return bundle container
 	 */
-	public IBundleContainer newIUContainer(String[] unitIds, String[] versions, URI[] repositories);
+	public IBundleContainer newIUContainer(String[] unitIds, String[] versions, URI[] repositories, int resolutionFlags);
 
 	/**
 	 * Creates and returns a bundle container that contains all bundles referenced by
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java
index 495a189..d43455a 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/LoadTargetDefinitionJob.java
@@ -377,7 +377,7 @@ public class LoadTargetDefinitionJob extends WorkspaceJob {
 					BundleInfo bundleInfo = resolved[i].getBundleInfo();
 					NameVersionDescriptor desc = new NameVersionDescriptor(bundleInfo.getSymbolicName(), bundleInfo.getVersion());
 					File file = new File(bundleInfo.getLocation());
-					boolean inPool = AbstractTargetHandle.BUNDLE_POOL.isPrefixOf(new Path(file.getAbsolutePath()));
+					boolean inPool = P2TargetUtils.BUNDLE_POOL.isPrefixOf(new Path(file.getAbsolutePath()));
 					considerPool = considerPool || inPool;
 					if (!duplicates.contains(desc)) {
 						if (inPool) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/NameVersionDescriptor.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/NameVersionDescriptor.java
index 7020126..fe02def 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/NameVersionDescriptor.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/provisional/NameVersionDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ public class NameVersionDescriptor {
 
 	public static final String TYPE_PLUGIN = "plugin"; //$NON-NLS-1$
 	public static final String TYPE_FEATURE = "feature"; //$NON-NLS-1$
+	public static final String TYPE_PACKAGE = "package"; //$NON-NLS-1$
 
 	private String fId;
 	private String fVersion;
@@ -105,10 +106,16 @@ public class NameVersionDescriptor {
 	public String toString() {
 		StringBuffer buf = new StringBuffer();
 		buf.append(fId);
-		buf.append('_');
-		buf.append(fVersion);
-		buf.append('_');
+		if (fVersion != null) {
+			buf.append(' ');
+			buf.append('(');
+			buf.append(fVersion);
+			buf.append(')');
+		}
+		buf.append(' ');
+		buf.append('[');
 		buf.append(fType);
+		buf.append(']');
 		return buf.toString();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/CoreUtility.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/CoreUtility.java
index a3a1598..7f3c33c 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/CoreUtility.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/CoreUtility.java
@@ -208,10 +208,8 @@ public class CoreUtility {
 			is = new FileInputStream(source);
 			os = new FileOutputStream(target);
 			byte[] buf = new byte[1024];
-			long currentLen = 0;
 			int len = is.read(buf);
 			while (len != -1) {
-				currentLen += len;
 				os.write(buf, 0, len);
 				len = is.read(buf);
 			}
diff --git a/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/VMUtil.java b/eclipse/plugins/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/VMUtil.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/BaseExportTask.java b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/BaseExportTask.java
index 8c8ead2..7b1fc92 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/BaseExportTask.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/BaseExportTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,8 @@ public abstract class BaseExportTask extends Task {
 	protected boolean fUseJarFormat;
 	protected boolean fExportSource;
 	protected String fQualifier;
+	protected boolean fAllowBinaryCycles;
+	protected boolean fUseWorkspaceCompiledClasses;
 
 	public BaseExportTask() {
 	}
@@ -57,11 +59,11 @@ public abstract class BaseExportTask extends Task {
 	}
 
 	public void setUseJARFormat(String useJarFormat) {
-		fUseJarFormat = "true".equals(useJarFormat); //$NON-NLS-1$
+		fUseJarFormat = new Boolean(useJarFormat).booleanValue();
 	}
 
 	public void setExportSource(String doExportSource) {
-		fExportSource = "true".equals(doExportSource); //$NON-NLS-1$
+		fExportSource = new Boolean(doExportSource).booleanValue();
 	}
 
 	public void setDestination(String destination) {
@@ -76,6 +78,14 @@ public abstract class BaseExportTask extends Task {
 		fQualifier = qualifier;
 	}
 
+	public void setAllowBinaryCycles(String allowBinaryCycles) {
+		fAllowBinaryCycles = new Boolean(allowBinaryCycles).booleanValue();
+	}
+
+	public void setUseWorkspaceCompiledClasses(String useWorkspaceCompiledClasses) {
+		fUseWorkspaceCompiledClasses = new Boolean(useWorkspaceCompiledClasses).booleanValue();
+	}
+
 	public boolean isAntRunner() {
 		String args[] = Platform.getCommandLineArgs();
 		for (int i = 0; i < args.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java
index ef36cd3..a0f7309 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java
@@ -81,7 +81,7 @@ public class ConvertSchemaToHTML extends Task {
 				if (id.indexOf('.') == -1)
 					id = pluginID + "." + id; //$NON-NLS-1$
 				File file = new File(directory, id.replace('.', '_') + ".html"); //$NON-NLS-1$
-				out = new PrintWriter(new FileWriter(file), true);
+				out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), ICoreConstants.UTF_8), true);
 				fTransformer.transform(schema, out, cssURL, SchemaTransformer.BUILD);
 			} catch (Exception e) {
 				if (e.getMessage() != null)
diff --git a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/FeatureExportTask.java b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/FeatureExportTask.java
index 4b063c6..7d390cb 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/FeatureExportTask.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/FeatureExportTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,8 @@ public class FeatureExportTask extends BaseExportTask {
 		info.zipFileName = fZipFilename;
 		info.items = fFeatures;
 		info.qualifier = fQualifier;
+		info.allowBinaryCycles = fAllowBinaryCycles;
+		info.useWorkspaceCompiledClasses = fUseWorkspaceCompiledClasses;
 		// if destination is relative, then make it absolute
 		if (!new File(fDestination).isAbsolute()) {
 			File home = new File(getLocation().getFileName()).getParentFile();
diff --git a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/PluginExportTask.java b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/PluginExportTask.java
index 9117e30..dc753df 100644
--- a/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/PluginExportTask.java
+++ b/eclipse/plugins/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/PluginExportTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,8 @@ public class PluginExportTask extends BaseExportTask {
 		info.zipFileName = fZipFilename;
 		info.items = fPlugins;
 		info.qualifier = fQualifier;
+		info.allowBinaryCycles = fAllowBinaryCycles;
+		info.useWorkspaceCompiledClasses = fUseWorkspaceCompiledClasses;
 		// if destination is relative, then make it absolute
 		if (!new File(fDestination).isAbsolute()) {
 			File home = new File(getLocation().getFileName()).getParentFile();
diff --git a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java
index 6b1f1d2..ce9e590 100644
--- a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java
+++ b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/AbstractEditingModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ public abstract class AbstractEditingModel extends PlatformObject implements IEd
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.pde.core.IModel#isValid()
+	 * @see org.eclipse.pde.core.IBaseModel#isValid()
 	 */
 	public boolean isValid() {
 		return isLoaded();
diff --git a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ImportPackageObject.java b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ImportPackageObject.java
index e416c68..e81192c 100644
--- a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ImportPackageObject.java
+++ b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ImportPackageObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -84,4 +84,12 @@ public class ImportPackageObject extends PackageObject {
 		writer.write(write());
 	}
 
+	public void restoreProperty(String propertyName, Object oldValue, Object newValue) {
+		if (Constants.RESOLUTION_DIRECTIVE.equalsIgnoreCase(propertyName)) {
+			setOptional(new Boolean(newValue.toString()).booleanValue());
+		} else if (fVersionAttribute != null && fVersionAttribute.equalsIgnoreCase(propertyName)) {
+			setVersion(newValue.toString());
+		}
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/PackageObject.java b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/PackageObject.java
index cff2a23..f427baa 100644
--- a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/PackageObject.java
+++ b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/PackageObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@ public class PackageObject extends PDEManifestElement {
 
 	private static final long serialVersionUID = 1L;
 
-	private transient String fVersionAttribute;
+	protected transient String fVersionAttribute;
 
 	public PackageObject(ManifestHeader header, ManifestElement element, String versionAttribute) {
 		super(header, element);
diff --git a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentHandler.java b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentHandler.java
index 5fd4a8c..929816e 100644
--- a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentHandler.java
+++ b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginDocumentHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2008 IBM Corporation and others.
+ *  Copyright (c) 2003, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -43,7 +43,7 @@ public class PluginDocumentHandler extends DocumentHandler {
 	 * @see org.xml.sax.helpers.DefaultHandler#endDocument()
 	 */
 	public void endDocument() throws SAXException {
-		IPluginBase pluginBase = fModel.getPluginBase();
+		IPluginBase pluginBase = fModel.getPluginBase(false);
 		try {
 			if (pluginBase != null)
 				pluginBase.setSchemaVersion(fSchemaVersion);
@@ -83,7 +83,7 @@ public class PluginDocumentHandler extends DocumentHandler {
 	protected IDocumentElementNode getDocumentNode(String name, IDocumentElementNode parent) {
 		IDocumentElementNode node = null;
 		if (parent == null) {
-			node = (IDocumentElementNode) getModel().getPluginBase();
+			node = (IDocumentElementNode) getModel().getPluginBase(false);
 			if (node != null) {
 				node.setOffset(-1);
 				node.setLength(-1);
diff --git a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginModelBase.java b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginModelBase.java
index 4194b21..66d3163 100644
--- a/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginModelBase.java
+++ b/eclipse/plugins/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/PluginModelBase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,34 +12,31 @@ package org.eclipse.pde.internal.core.text.plugin;
 
 import java.net.MalformedURLException;
 import java.net.URL;
-
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.*;
 import org.eclipse.pde.core.IModel;
 import org.eclipse.pde.core.IWritable;
 import org.eclipse.pde.core.build.IBuildModel;
-import org.eclipse.pde.core.plugin.IExtensions;
-import org.eclipse.pde.core.plugin.IExtensionsModelFactory;
-import org.eclipse.pde.core.plugin.IPluginBase;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.core.plugin.IPluginModelFactory;
+import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.internal.core.NLResourceHelper;
 import org.eclipse.pde.internal.core.PDEManager;
 import org.eclipse.pde.internal.core.text.IDocumentElementNode;
 import org.eclipse.pde.internal.core.text.XMLEditingModel;
 import org.xml.sax.helpers.DefaultHandler;
 
-public abstract class PluginModelBase extends XMLEditingModel implements IPluginModelBase {
+public abstract class PluginModelBase extends XMLEditingModel implements IPluginModelBase, IDocumentListener {
 
 	private PluginBaseNode fPluginBase;
 	private boolean fIsEnabled;
 	private PluginDocumentHandler fHandler;
 	private IPluginModelFactory fFactory;
 	private String fLocalization;
+	private boolean fHasTriedToCreateModel;
 
 	public PluginModelBase(IDocument document, boolean isReconciling) {
 		super(document, isReconciling);
 		fFactory = new PluginDocumentNodeFactory(this);
+		document.addDocumentListener(this);
 	}
 
 	/* (non-Javadoc)
@@ -88,11 +85,13 @@ public abstract class PluginModelBase extends XMLEditingModel implements IPlugin
 	 * @see org.eclipse.pde.core.plugin.IPluginModelBase#getPluginBase(boolean)
 	 */
 	public IPluginBase getPluginBase(boolean createIfMissing) {
-		if (!fLoaded && createIfMissing) {
-			createPluginBase();
+		if (!fLoaded && !fHasTriedToCreateModel && createIfMissing) {
 			try {
+				createPluginBase();
 				load();
 			} catch (CoreException e) {
+			} finally {
+				fHasTriedToCreateModel = true;
 			}
 		}
 		return fPluginBase;
@@ -169,4 +168,29 @@ public abstract class PluginModelBase extends XMLEditingModel implements IPlugin
 	public void setLocalization(String localization) {
 		fLocalization = localization;
 	}
+
+	/*
+	 * @see org.eclipse.pde.internal.core.text.AbstractEditingModel#dispose()
+	 * @since 3.6
+	 */
+	public void dispose() {
+		getDocument().removeDocumentListener(this);
+		super.dispose();
+	}
+
+	/*
+	 * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent)
+	 * @since 3.6
+	 */
+	public void documentChanged(DocumentEvent event) {
+		fHasTriedToCreateModel = false;
+	}
+
+	/*
+	 * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)
+	 * @since 3.6
+	 */
+	public void documentAboutToBeChanged(DocumentEvent event) {
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF
index 802a62b..cabef6b 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.doc.user; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/about.html b/eclipse/plugins/org.eclipse.pde.doc.user/about.html
index 89f7b1a..d00cddd 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/about.html
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/about.html
@@ -1,8 +1,8 @@
 <!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" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2001, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2001, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>About</title>
 </head>
@@ -26,4 +26,4 @@ indicated below, the terms and conditions of the EPL still apply to any source c
 and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/about.properties b/eclipse/plugins/org.eclipse.pde.doc.user/about.properties
index 976770f..a3c84ee 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/about.properties
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Plug-in Development Environment User Guide\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright IBM Corp. and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright IBM Corp. and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/pde
 
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/apache_style.css b/eclipse/plugins/org.eclipse.pde.doc.user/apache_style.css
index ecd9d3d..da4400a 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/apache_style.css
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/apache_style.css
@@ -64,3 +64,7 @@ pre {
    background: #837A67; 
 }
 
+div.c4 {text-align: left;}
+pre.c3 {margin-left: 40px}
+span.c2 {color: #0000FF}
+span.c1 {color: #008000}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/api_contexts.xml b/eclipse/plugins/org.eclipse.pde.doc.user/api_contexts.xml
index 79054c0..db8e164 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/api_contexts.xml
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/api_contexts.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-     Copyright (c) 2005, 2008 IBM Corporation and others.
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -15,14 +15,14 @@
       <description>This page allows you to manage API baselines and set the problem severity for a missing baseline. An API baseline is used when analyzing APIs for compatibility with a previous release. The checked baseline is used when analyzing workspace plug-ins.</description>
       <topic href="reference/api-tooling/preferences/ref-baselines.htm" label="API Baseline Preferences"/>
       <topic href="tasks/api_tooling_baseline.htm" label="Adding API Baselines"/>
-      <topic href="reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm" label="Add API Baseline Quickfix"/>
+      <topic href="reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm" label="Add API Baseline Quick Fix"/>
       <topic href="reference/api-tooling/wizards/ref-api-baseline-wizard.htm" label="API Baseline Wizard"/>
    </context>
-   <context id="api_tooling_setup_wizard_page" title="API Tooling Setup">
+   <context id="api_tooling_setup_wizard_page" title="API Tools Setup">
       <description>This wizard is used to configure plug-in projects for API analysis.</description>
-      <topic href="reference/api-tooling/wizards/ref-api-setup-wizard.htm" label="API Tooling Setup Wizard"/>
-      <topic href="tasks/api_tooling_setup.htm" label="Setting Up API Tooling"/>
-      <topic href="reference/api-tooling/actions/ref-apitooling-setup-action.htm" label="API Tooling Setup Command"/>
+      <topic href="reference/api-tooling/wizards/ref-api-setup-wizard.htm" label="API Tools Setup Wizard"/>
+      <topic href="tasks/api_tooling_setup.htm" label="Setting Up API Tools"/>
+      <topic href="reference/api-tooling/actions/ref-apitooling-setup-action.htm" label="API Tools Setup Command"/>
       <topic href="reference/api-tooling/api_javadoc_tags.htm" label="Defining API Restrictions"/>
    </context>
    <context id="apitools_error_warning_preference_page" title="API Errors/Warnings">
@@ -43,24 +43,31 @@
       <topic href="tasks/api_tooling_options.htm" label="Changing API Options"/>
    </context>
    <context id="apitools_filters_property_page" title="API Problem Filters">
-      <description>This page displays API problems for a project that have been filtered from the workspace. The filters are created with quickfixes, and can be removed from this page.</description>
+      <description>This page displays API problems for a project that have been filtered from the workspace. The filters are created with quick fixes, and can be removed from this page.</description>
       <topic href="reference/api-tooling/propertypages/ref-filters-prop.htm" label="API Problem Filters Property Page"/>
       <topic href="tasks/api_tooling_create_filters.htm" label="Adding API Problem Filters"/>
       <topic href="tasks/api_tooling_remove_filters.htm" label="Removing API Problem Filters"/>
-      <topic href="reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm" label="API Problem Filter Quickfix"/>
+      <topic href="reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm" label="API Problem Filter Quick Fix"/>
    </context>
    <context id="apiprofiles_wizard_page" title="API Baseline">
       <description>This wizard is used to create or edit an API baseline. You must assign a name and location to each baseline. The location is a file system directory containing the baseline's plug-ins.</description>
       <topic href="reference/api-tooling/wizards/ref-api-baseline-wizard.htm" label="API Baseline Wizard"/>
       <topic href="reference/api-tooling/preferences/ref-baselines.htm" label="API Baseline Preferences"/>
       <topic href="tasks/api_tooling_baseline.htm" label="Adding API Baselines"/>
-      <topic href="reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm" label="Missing API Baseline Quickfix"/>
+      <topic href="reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm" label="Missing API Baseline Quick Fix"/>
    </context>
-   <context id="api_tooling_setup_action" title="API Tooling Setup">
-      <description>This action is used to open the API Tooling Setup wizard. The wizard allows you to configure API analysis for plug-in projects.</description>
-      <topic href="reference/api-tooling/actions/ref-apitooling-setup-action.htm" label="API Tooling Setup Command"/>
-      <topic href="reference/api-tooling/wizards/ref-api-setup-wizard.htm" label="API Tooling Setup Wizard"/>
-      <topic href="tasks/api_tooling_setup.htm" label="Setting Up API Tooling"/>
+   <context id="apiusescans_preference_page" title="API Use Scans">
+      <description>This page allows you to manage a list of API use scans generated by the Ant task or the API use report tool.  API use scans contain a list of references between bundles.  The API analysis builder will check each of the enabled use scans to ensure all known references still exist in your workspace projects.</description>
+      <topic href="reference/api-tooling/preferences/ref-usescans.htm" label="API Use Scans Preferences"/>
+      <topic href="reference/api-tooling/preferences/ref-errorswarnings.htm" label="API Error and Warning Preferences"/>
+      <topic href="reference/api-tooling/ant-tasks/apiuse-ant-task.htm" label="API Use Ant Task"/>
+      <topic href="reference/api-tooling/wizards/ref-api-use-dialog.htm" label="API Use Reports"/>
+   </context>
+   <context id="api_tooling_setup_action" title="API Tools Setup">
+      <description>This action is used to open the API Tools Setup wizard. The wizard allows you to configure API analysis for plug-in projects.</description>
+      <topic href="reference/api-tooling/actions/ref-apitooling-setup-action.htm" label="API Tools Setup Command"/>
+      <topic href="reference/api-tooling/wizards/ref-api-setup-wizard.htm" label="API Tools Setup Wizard"/>
+      <topic href="tasks/api_tooling_setup.htm" label="Setting Up API Tools"/>
    </context>
    <context id="api_compare_wizard_page" title="API Compare">
       <description>This wizard is used to compare a selected set of projects/source folders/package fragments/units against a selected API baseline.</description>
@@ -71,14 +78,14 @@
    </context>
    <context id="api_tooling_view">
       <description>This view is used to see the result of a comparison between a selected set of projects/source folders/package fragments/units and a selected API baseline.</description>
-      <topic href="reference/api-tooling/views/ref-api-tooling-view.htm" label="API Tooling View"/>
+      <topic href="reference/api-tooling/views/ref-api-tooling-view.htm" label="API Tools View"/>
       <topic href="tasks/api_tooling_baseline.htm" label="Adding API Baselines"/>
       <topic href="reference/api-tooling/wizards/ref-api-baseline-wizard.htm" label="API Baseline Wizard"/>
       <topic href="reference/api-tooling/wizards/ref-api-compare-wizard.htm" label="API Compare Wizard"/>
    </context>
    <context id="api_compare_export_dialog">
       <description>This dialog is used to export the result of an API comparison. Specify an ".xml" extension to generate an XML file, or an ".html" extension to generate an HTML report.</description>
-      <topic href="reference/api-tooling/views/ref-api-tooling-view.htm" label="API Tooling View"/>
+      <topic href="reference/api-tooling/views/ref-api-tooling-view.htm" label="API Tools View"/>
       <topic href="tasks/api_tooling_baseline.htm" label="Adding API Baselines"/>
       <topic href="reference/api-tooling/wizards/ref-api-baseline-wizard.htm" label="API Baseline Wizard"/>
       <topic href="reference/api-tooling/wizards/ref-api-compare-wizard.htm" label="API Compare Wizard"/>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/build.properties b/eclipse/plugins/org.eclipse.pde.doc.user/build.properties
index 4520d9e..db20199 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/build.properties
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2010 IBM Corporation and others.
+#  Copyright (c) 2000, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -35,4 +35,5 @@ bin.includes = META-INF/,\
                toc.xml,\
                topics_Reference.xml,\
                topics_Tasks.xml,\
+               topics_WhatsNew.xml,\
                whatsNew/
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/concepts/target.htm b/eclipse/plugins/org.eclipse.pde.doc.user/concepts/target.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/contexts_PDE.xml b/eclipse/plugins/org.eclipse.pde.doc.user/contexts_PDE.xml
index d06422f..43bdb9e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/contexts_PDE.xml
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/contexts_PDE.xml
@@ -67,6 +67,7 @@
     </context>
     <context id="target_export_wizard">
         <description>Use this wizard to export the contents of the current target platform to a directory.  All plug-ins included in the target platform will be copied to the destination directory.</description>
+        <topic href="guide/tools/export_wizards/export_target.htm" label="Target Export"/>
     </context>
     
 <!-- Dialogs -->
@@ -515,29 +516,31 @@ You can select any item to open it in an editor.</description>
    <!-- one to one mapping -->
    <context id="main_preference_page" >
       <description>This page allows you to set Plug-in Development Environment general settings.</description>
-      <topic label="Preferences" href="guide/tools/preference_pages/preferences.htm"/>
 
       <topic label="General Plug-in Development Preferences" href="guide/tools/preference_pages/plug_in_development.htm"/>
+      <topic label="PDE Preferences" href="guide/tools/preference_pages/preferences.htm"/>
    </context>
 
    <!-- Compilers -->
 
    <!-- one to one mapping -->
    <context id="compilers_preference_page" >
-      <description>This page allows you to specify the behavior of the various manifest compilers.</description>
+      <description>This page allows you to specify the severity of reported errors and warnings in the manifest, plugin.xml and build.properties files.</description>
 	  <topic label="Compilers Preferences" href="guide/tools/preference_pages/compilers.htm"/>
 
       <topic label="Plug-in Compiler Preferences" href="guide/tools/preference_pages/plugin_compiler.htm"/>
       <topic label="Extension Point Schema Compiler Preferences" href="guide/tools/preference_pages/schema_compiler.htm"/>
-      <topic label="Feature and Update Site Compiler Preferences" href="guide/tools/preference_pages/feature_compiler.htm"/>	  
+      <topic label="Feature and Update Site Compiler Preferences" href="guide/tools/preference_pages/feature_compiler.htm"/>
+      <topic href="guide/tools/preference_pages/preferences.htm" label="PDE Preferences"/>	  
    </context>
 
    <!-- Editors -->
 
    <!-- one to one mapping -->
    <context id="editor_preference_page" >
-      <description>This page allows you to configure behavior and presentation of PDE multi-page editors.</description>
-      <topic label="Editors Preferences" href="guide/tools/preference_pages/editors.htm"/>	 
+      <description>This page allows you to configure the behavior and presentation of PDE editors.</description>
+      <topic label="Editors Preferences" href="guide/tools/preference_pages/editors.htm"/>
+      <topic href="guide/tools/preference_pages/preferences.htm" label="PDE Preferences"/>	 
    </context>
 
    <!-- OSGi Frameworks -->
@@ -545,7 +548,8 @@ You can select any item to open it in an editor.</description>
    <!-- one to one mapping -->
    <context id="osgi_preference_page" >
       <description>This page allows you to manage the OSGi Framework settings.</description>
-      <topic label="OSGi Frameworks Preferences" href="guide/tools/preference_pages/osgi_frameworks.htm"/>	 
+      <topic label="OSGi Frameworks Preferences" href="guide/tools/preference_pages/osgi_frameworks.htm"/>
+      <topic href="guide/tools/preference_pages/preferences.htm" label="PDE Preferences"/>	 
    </context>
 	
 
@@ -553,7 +557,7 @@ You can select any item to open it in an editor.</description>
 
    <!-- one to one mapping -->
    <context id="target_platform_preference_page" >
-      <description>The Target Platform preference page allows you to manage a set of target definitions and select one as the active target platform. A target definition consists of a set of plug-ins and environment settings. The active target platform is used to build and launch your workspace plug-ins.</description>
+      <description>This page allows you to manage a set of target definitions and select one as the active target platform. A target definition consists of a set of plug-ins and environment settings. The active target platform is used to build and launch your workspace plug-ins.</description>
       <topic href="guide/tools/preference_pages/target_platform.htm" label="Target Platform Preferences"/>
       <topic href="concepts/target.htm" label="Target Platform"/>
       <topic href="guide/tools/target_shared/new_target_wizard.htm" label="New Target Wizard"/>
@@ -573,6 +577,7 @@ You can select any item to open it in an editor.</description>
 
     <context id="selfhosting_property_page">
       <description>This page allows you to exclude certain class folders from the project's classpath.</description>
+      <topic href="guide/tools/preference_pages/runtime_classpath_properties.htm" label="Runtime Classpath"/>
    </context>
 
    <context id="compilers_property_page">
@@ -750,6 +755,13 @@ You can select any item to open it in an editor.</description>
 		<topic label="Table of Contents" href="guide/tools/file_wizards/new_toc.htm"/>
 	</context>
 
+	<!-- New Context Help -->
+	
+	<context id="new_context_help_page">
+		<description>This page allows you to create a new Context Help file.</description>
+		<topic label="Context Help" href="guide/tools/file_wizards/new_ctx_help.htm"/>
+	</context>
+	
 <!-- END:  New File Creation Wizard pages -->
 	
 	<context id="converted_projects">
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/export_wizards/export_wizard_select.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/export_wizards/export_wizard_select.png
index 72ddaf1..6dc0c48 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/export_wizards/export_wizard_select.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/export_wizards/export_wizard_select.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/export_wizards/target.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/export_wizards/target.png
new file mode 100644
index 0000000..ac9e2c5
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/export_wizards/target.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/plugin_editor/extension_points.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/plugin_editor/extension_points.png
index d463995..0ac5fd0 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/plugin_editor/extension_points.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/plugin_editor/extension_points.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_features.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_features.png
index a971239..32c4c85 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_features.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_features.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_plugin.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_plugin.png
index 34d6662..7866026 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_plugin.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_plugin.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_schemas.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_schemas.png
index 5a66f1f..ec0f840 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_schemas.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/compilers_schemas.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/outline.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/outline.png
index 56d03ba..d7bb0b6 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/outline.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/outline.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/plugin_development.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/plugin_development.png
index 200b22c..b2bfdc2 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/plugin_development.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/plugin_development.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/target_preferences.png b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/target_preferences.png
index e74f314..934719e 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/target_preferences.png and b/eclipse/plugins/org.eclipse.pde.doc.user/guide/images/preferences/target_preferences.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/intro/pde_overview.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/intro/pde_overview.htm
index 2beeb1b..c24fa46 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/intro/pde_overview.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/intro/pde_overview.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" type="text/css">
@@ -22,7 +22,7 @@ development.</p>
 <p>PDE is broken into three main components:</p>
 <ul>
 <li><a href="#ui">UI</a> - A rich set of models, tools and editors to develop plug-ins and OSGi bundles</li>
-<li><a href="#api">API Tooling</a> - Tooling to assist API documentation and maintenance</li>
+<li><a href="#api">API Tools</a> - Tooling to assist API documentation and maintenance</li>
 <li><a href="#build">Build</a> - Ant based tools and scripts to automate build processes</li>
 </ul>
 
@@ -57,9 +57,9 @@ features, update sites, RCP products and OSGi bundles.</p>
 </ul>
 
 <a name="api"></a>
-<h2>PDE API Tooling</h2>
+<h2>API Tools</h2>
 
-<p>PDE API Tooling assists in the documentation and maintenance of APIs provided by plug-ins and OSGi bundles.</p>
+<p>API Tools assists in the documentation and maintenance of APIs provided by plug-ins and OSGi bundles.</p>
 
 <p>Some of the features include:</p>
 <ul>
@@ -74,7 +74,7 @@ features, update sites, RCP products and OSGi bundles.</p>
 
 <p>To get started, see the tasks:</p>
 <ul>
-<li><a href="../../tasks/api_tooling_setup.htm">Setting up API Tooling</a></li>
+<li><a href="../../tasks/api_tooling_setup.htm">Setting up API Tools</a></li>
 <li><a href="../../tasks/api_tooling_baseline.htm">Setting up a baseline</a></li>
 <li><a href="../../tasks/api_tooling_options.htm">Changing options</a></li>
 <li><a href="../../tasks/api_tooling_create_filters.htm">Creating filters</a></li>
@@ -98,7 +98,5 @@ features, update sites, RCP products and OSGi bundles.</p>
 <li><a href="../../reference/pde_feature_generating_build.htm">Feature and Plug-in build properties</a></li>
 </ul>
 
-<p></p>
-
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/category_editor/definition_page.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/category_editor/definition_page.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/ctx_help_editor/ctx_help_editor.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/ctx_help_editor/ctx_help_editor.htm
index 612b83c..04d3dcc 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/ctx_help_editor/ctx_help_editor.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/ctx_help_editor/ctx_help_editor.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 	<head>
-	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 		<title>Context Help Editor</title>
 		<link rel="STYLESHEET" href="../../../../book.css" type="text/css">
@@ -40,7 +40,7 @@ The <strong>Source</strong> page of the editor provides a textual view of the xm
 <h3>Adding new help contexts</h3>
 
 <p>
-<img src="../../../images/ctx_help_editor/help_context_filled.png" alt="Help context editor with filled fields" border=0 height=278 width=705>
+<img src="../../../images/ctx_help_editor/help_context_filled.png" alt="Help context editor with filled fields" border="0" height="278" width="705">
 </p>
 <p>
 To add a new context, click the <strong>Add Context</strong> button.  This will add a new context entry to the xml and it will be displayed in the tree on the <strong>Definition</strong> page.  The new context will be selected, opening a detail section in the right column of the editor.  In this detail section you can provide more detailed information about the context including:
@@ -57,7 +57,7 @@ To add a new context, click the <strong>Add Context</strong> button.  This will
 Adding a context to the file will provide dynamic help with a basic description to display to the user.  Typically you will want to provide additional links to related topics in the help system.  To do this you must add topics and commands to the xml file.
 
 <p>
-<img src="../../../images/ctx_help_editor/help_context_topic_details.png" alt="Help context editor with filled detail fields" border=0 height=273 width=702>
+<img src="../../../images/ctx_help_editor/help_context_topic_details.png" alt="Help context editor with filled detail fields" border="0" height="273" width="702">
 </p>
 <p>
 By clicking on the <strong>Add Topic</strong> button, you will add a new topic entry to the xml under one of the help contexts.  A topic will appear to the user as a link.  Once a new topic is created, you can select it to open the <strong>Topic Details</strong> section on the right column of the <strong>Definition</strong> page.  In the detail section you can change the label that will be displayed to the user and the location of the file that will be linked.  In most cases, the linked file will be an html page in the help system.  You can use the <strong>Browse...</strong> button to search for a file to link.
@@ -67,7 +67,7 @@ By clicking on the <strong>Add Topic</strong> button, you will add a new topic e
 In addition to topics, you may also want to add a command.  A command has the same appearance to the user as a topic.  However, when the link is activated, a code command is executed instead of a file being opened.  Commands can be used to open preference pages and execute other actions.
 </p>
 <p>
-<img src="../../../images/ctx_help_editor/help_context_command.png" alt="Help context editor add command" border=0 height=277 width=710>
+<img src="../../../images/ctx_help_editor/help_context_command.png" alt="Help context editor add command" border="0" height="277" width="710">
 </p>
 <p>
 Clicking the <strong>Add Command</strong> button to add a new command.  You can edit the details of commands in the same way that you edit topics.
@@ -79,7 +79,7 @@ Clicking the <strong>Add Command</strong> button to add a new command.  You can
 There are three additional buttons on the <strong>Definition</strong> page, which enable manipulating with the items order on the context list or with deleting the items. 
 </p>
 <p>
-<img src="../../../images/ctx_help_editor/help_context_second_topic.png" alt="Help context with manipulating buttons" border=0 height=265 width=708>
+<img src="../../../images/ctx_help_editor/help_context_second_topic.png" alt="Help context with manipulating buttons" border="0" height="265" width="708">
 </p>
 <p>
 These buttons are:
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/feature_editor/included_features.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/feature_editor/included_features.htm
index 9ca766a..0fdce94 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/feature_editor/included_features.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/feature_editor/included_features.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Included Features</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
@@ -23,6 +23,5 @@
 <p>An included feature may be marked as <strong>optional</strong> using the <strong>The feature is optional</strong> option. Users may not choose to install optional features.  However, if users do choose to install optional features, they may safely disable them later on.  Please note that a missing optional feature is not treated as an error.</p>
 <p>An included feature can be updated by patches. By default, <em>Update Manager</em> searches for updates to an included feature at <strong>the update site for the parent feature</strong>; but, this setting can be overridden. </p>
 <p>If an included feature contains platform-specific code or resources, then environment   conditions should be specified and associated with that feature.</p>
-<p></p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/access_rules.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/access_rules.htm
index e9cf55a..5543b8c 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/access_rules.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/access_rules.htm
@@ -1,126 +1,285 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2005, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link href="../../../../book.css" rel="stylesheet" type="text/css">
-<title>Access Rules</title>
-<script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-
-</head>
-
-<body>
-<h1>Access Rules</h1>
-<p>The Eclipse 3.1 runtime gives the plug-in developer the option
-  to control plug-in code visibility to downstream plug-ins on a per-package basis. </p>
-<p>A package may be classified as one of the following:</p>
-<ol>
-  <li>Accessible</li>
-  <li>Forbidden</li>
-  <li>Internal</li>
-  <li>Internal with friends</li>
-</ol>
-<p>PDE translates these runtime visibility rules into compiler access 
-  restriction rules at compile time. As a result, a violation of a visibility 
-  rule is flagged by the compiler as a warning or an error - depending on the severity 
-  of that violation. </p>
-<p>With this type of support at compile time, one is 
-  never caught by surprise by runtime class loading errors and is always 
-  aware of internal type references.</p>
-<h2>Accessible Packages</h2>
-<p>Accessible packages are visible to downstream plug-ins unconditionally.   
-  While API packages must clearly fall in this category, it is completely up to 
-  the developer to decide what other packages exported by the plug-in ought to 
-  be given this level of visibility.</p>
-<p>In order to declare a package as accessible, you must list it in 
-the <b>Exported Packages</b> section on the <b>Runtime</b> of the plug-in 
-manifest editor and leave the default visibility setting as-is.</p>
-<p><img src="../../../images/access_restrictions/visible.png" alt="Accessible Packages" ></p>
-<p align="center"> </p>
-<h2>Forbidden Packages</h2>
-<p>You can hide a package from downstream plug-ins at all times by 
-  <b>excluding</b> it from the list in the <b> Exported Packages</b> section on 
-  the <b>Runtime</b> page of the plug-in manifest editor.</p>
-<p>References to types from a <em>forbidden</em> package result in class loading 
-  errors at runtime.</p>
-<p>To avoid such unpleasant situations:</p>
-<ol>
-  <li>The compiler will flag references to forbidden packages with an error.</li>
-  <li>Types from forbidden packages are NOT available 
-    as proposals in the content assist.</li>
-</ol>
-<p><em>Notes:</em></p>
-<ol>
-  <li> All plug-ins in the Eclipse SDK enumerate all their packages in the <strong>Exported 
-    Packages</strong> section; therefore, none of the packages in the SDK have forbidden 
-    access.</li>
-  <li> The severity level for forbidden references is set on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open problem severities preference page">
-<strong>Java > Compiler > Errors/Warnings > Deprecated and restricted API</strong></a> preference 
-    page.
-    <p> It is strongly recommended that the severity of a forbidden reference 
-      is kept at error.</p>
-  </li>
-</ol>
-<p><img src="../../../images/access_restrictions/forbidden.png" alt="Forbidden preferences"  border="0"></p>
-<h2>Internal Packages</h2>
-<p>Internal packages are packages that are not intended for use by 
-  downstream plug-ins. <em><strong>These packages are visible to downstream plug-ins 
-  by</strong> <strong>default</strong></em>. </p>
-<p>Internal packages are hidden from downstream plug-ins only when 
-  Eclipse is launched in <em><strong>strict</strong></em> mode (i.e. when you 
-  launch with the <em>-Dosgi.resolverMode=strict</em> VM argument).</p>
-<p>Internal packages must be listed in the <b>Exported Packages</b> 
-  section on the <b>Runtime</b> page of the plug-in manifest editor with the <i> 
-  <b>hidden</b></i> option selected.</p>
-<p> <img src="../../../images/access_restrictions/hidden.png" alt="discouraged access" ></p>
-<p>Two measures are taken to discourage downstream plug-ins from 
-  referencing internal packages:</p>
-<ul>
-  <li>The compiler flags references to internal packages with a <em>warning</em>.</li>
-</ul>
-<p><img src="../../../images/access_restrictions/compiler.png" alt="discouraged access" ></p>
-<ul>
-  <li>Types from discouraged packages are available as content assist proposals; but, with a lower priority.</li>
-</ul>
-<p><img src="../../../images/access_restrictions/content_assist.png" alt="discouraged content assist" ></p>
-<p>The severity level for discouraged references can be set on the
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open the problem severities preference page">
-<strong>Java > Compiler > Errors/Warnings > Deprecated and restricted API</strong></a> 
-preference page.</p>
-<p> <img src="../../../images/access_restrictions/discouraged.png" alt="Discouraged preferences"  border="0"></p>
-<h2>Internal packages with friends</h2>
-<p>It is important for a plug-in to be able to grant full access 
-  to its internal packages to designated "friend" plug-ins. For instance, 
-  the PDE code is split across multiple plug-ins, and the <em>org.eclipse.pde.ui</em> 
-  plug-in should have full access to <em>org.eclipse.pde.core</em>'s internal 
-  packages.</p>
-<p>In the example below, the the <em>org.eclipse.pde.ui</em> friend plug-in has full access to the <em>org.eclipse.pde.internal.core.bundle</em> 
-  package from the <em>org.eclipse.pde.core </em>plug-in.</p>
-<p><img src="../../../images/access_restrictions/friend.png" alt="Friends" ></p>
-<p>The friends are free to reference any type from the <em>org.eclipse.pde.internal.core.bundle</em> 
-  package with the compiler's blessing. </p>
-<p>On the other hand, if any other plug-in references a type from 
-  the <em>org.eclipse.pde.internal.core.bundle</em> package, the compiler flags 
-  the reference as a discouraged reference as described in the previous section.</p>
-<h2>How to enable access restrictions</h2>
-<p>To take advantage of the PDE access restriction support, the only 
-  requirement is that the plug-ins in question contain an OSGi bundle <em>MANIFEST.MF</em>. 
-  PDE will take care of the rest including the management of the plug-in classpath.</p>
-<p>If the plug-in does not contain a <em>MANIFEST.MF</em> file, that file 
-  can be created as follows:</p>
-<ol>
-  <li>Open the <em>plugin.xml</em> in the plug-in manifest editor.</li>
-  <li>In the <strong>Plug-in Content</strong> section of the <strong>Overview</strong> 
-    page, click on the '<strong>create an OSGi bundle manifest</strong>' link.</li>
-</ol>
-  <p><img src="../../../images/access_restrictions/convert.PNG" alt="convert to manifest.mf" ></p>
-  <h2>Inspecting access rules</h2>
-  <p>You can inspect the access restriction rules imposed on each 
-    classpath entry by PDE on the <strong>Java Build Path</strong> property page 
-    of your plug-in project. </p>
-  <p><img src="../../../images/access_restrictions/properties.png" alt="Java Build Path Properties" ></p>
-</body>
-</html>
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2005, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link href="../../../../book.css" rel="stylesheet" type=
+    "text/css" />
+    <title>
+      Access Rules
+    </title>
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+
+</script>
+    <style type="text/css">
+/*<![CDATA[*/
+    p.c1 {text-align: center}
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h1>
+      Access Rules
+    </h1>
+    <p>
+      The Eclipse 3.1 runtime gives the plug-in developer the
+      option to control plug-in code visibility to downstream
+      plug-ins on a per-package basis.
+    </p>
+
+    <p>
+      A package may be classified as one of the following:
+    </p>
+    <ol>
+      <li>Accessible
+      </li>
+      <li>Forbidden
+      </li>
+      <li>Internal
+      </li>
+      <li>Internal with friends
+      </li>
+
+    </ol>
+    <p>
+      PDE translates these runtime visibility rules into compiler
+      access restriction rules at compile time. As a result, a
+      violation of a visibility rule is flagged by the compiler as
+      a warning or an error - depending on the severity of that
+      violation.
+    </p>
+    <p>
+      With this type of support at compile time, one is never
+      caught by surprise by runtime class loading errors and is
+      always aware of internal type references.
+    </p>
+    <h2>
+      Accessible Packages
+    </h2>
+
+    <p>
+      Accessible packages are visible to downstream plug-ins
+      unconditionally.   While API packages must clearly
+      fall in this category, it is completely up to the developer
+      to decide what other packages exported by the plug-in ought
+      to be given this level of visibility.
+    </p>
+    <p>
+      In order to declare a package as accessible, you must list it
+      in the <b>Exported Packages</b> section on the <b>Runtime</b>
+      of the plug-in manifest editor and leave the default
+      visibility setting as-is.
+    </p>
+
+    <p>
+      <img src="../../../images/access_restrictions/visible.png"
+      alt="Accessible Packages" />
+    </p>
+    <p class="c1">
+       
+    </p>
+    <h2>
+      Forbidden Packages
+    </h2>
+
+    <p>
+      You can hide a package from downstream plug-ins at all times
+      by <b>excluding</b> it from the list in the <b>Exported
+      Packages</b> section on the <b>Runtime</b> page of the
+      plug-in manifest editor.
+    </p>
+    <p>
+      References to types from a <em>forbidden</em> package result
+      in class loading errors at runtime.
+    </p>
+
+    <p>
+      To avoid such unpleasant situations:
+    </p>
+    <ol>
+      <li>The compiler will flag references to forbidden packages
+      with an error.
+      </li>
+      <li>Types from forbidden packages are NOT available as
+      proposals in the content assist.
+      </li>
+    </ol>
+    <p>
+
+      <em>Notes:</em>
+    </p>
+    <ol>
+      <li>All plug-ins in the Eclipse SDK enumerate all their
+      packages in the <strong>Exported Packages</strong> section;
+      therefore, none of the packages in the SDK have forbidden
+      access.
+      </li>
+      <li>The severity level for forbidden references is set on the
+      <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+        alt="Open problem severities preference page" />
+
+        <strong>Java > Compiler > Errors/Warnings >
+        Deprecated and restricted API</strong></a> preference page.
+        <p>
+          It is strongly recommended that the severity of a
+          forbidden reference is kept at error.
+        </p>
+      </li>
+
+    </ol>
+    <p>
+      <img src="../../../images/access_restrictions/forbidden.png"
+      alt="Forbidden preferences" border="0" />
+    </p>
+    <h2>
+      Internal Packages
+    </h2>
+    <p>
+      Internal packages are packages that are not intended for use
+      by downstream plug-ins. <em><strong>These packages are
+      visible to downstream plug-ins by</strong>
+
+      <strong>default</strong></em>.
+    </p>
+    <p>
+      Internal packages are hidden from downstream plug-ins only
+      when Eclipse is launched in <em><strong>strict</strong></em>
+      mode (i.e. when you launch with the
+      <em>-Dosgi.resolverMode=strict</em> VM argument).
+    </p>
+    <p>
+
+      Internal packages must be listed in the <b>Exported
+      Packages</b> section on the <b>Runtime</b> page of the
+      plug-in manifest editor with the <i><b>hidden</b></i> option
+      selected.
+    </p>
+    <p>
+      <img src="../../../images/access_restrictions/hidden.png"
+      alt="discouraged access" />
+    </p>
+
+    <p>
+      Two measures are taken to discourage downstream plug-ins from
+      referencing internal packages:
+    </p>
+    <ul>
+      <li>The compiler flags references to internal packages with a
+      <em>warning</em>.
+      </li>
+    </ul>
+    <p>
+      <img src="../../../images/access_restrictions/compiler.png"
+      alt="discouraged access" />
+
+    </p>
+    <ul>
+      <li>Types from discouraged packages are available as content
+      assist proposals; but, with a lower priority.
+      </li>
+    </ul>
+    <p>
+      <img src=
+      "../../../images/access_restrictions/content_assist.png" alt=
+      "discouraged content assist" />
+    </p>
+    <p>
+
+      The severity level for discouraged references can be set on
+      the <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.ProblemSeveritiesPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+      alt="Open the problem severities preference page" />
+      <strong>Java > Compiler > Errors/Warnings >
+      Deprecated and restricted API</strong></a> preference page.
+    </p>
+
+    <p>
+      <img src=
+      "../../../images/access_restrictions/discouraged.png" alt=
+      "Discouraged preferences" border="0" />
+    </p>
+    <h2>
+      Internal packages with friends
+    </h2>
+    <p>
+      It is important for a plug-in to be able to grant full access
+      to its internal packages to designated "friend" plug-ins. For
+      instance, the PDE code is split across multiple plug-ins, and
+      the <em>org.eclipse.pde.ui</em> plug-in should have full
+      access to <em>org.eclipse.pde.core</em>'s internal packages.
+    </p>
+
+    <p>
+      In the example below, the the <em>org.eclipse.pde.ui</em>
+      friend plug-in has full access to the
+      <em>org.eclipse.pde.internal.core.bundle</em> package from
+      the <em>org.eclipse.pde.core</em> plug-in.
+    </p>
+    <p>
+
+      <img src="../../../images/access_restrictions/friend.png"
+      alt="Friends" />
+    </p>
+    <p>
+      The friends are free to reference any type from the
+      <em>org.eclipse.pde.internal.core.bundle</em> package with
+      the compiler's blessing.
+    </p>
+    <p>
+      On the other hand, if any other plug-in references a type
+      from the <em>org.eclipse.pde.internal.core.bundle</em>
+
+      package, the compiler flags the reference as a discouraged
+      reference as described in the previous section.
+    </p>
+    <h2>
+      How to enable access restrictions
+    </h2>
+    <p>
+      To take advantage of the PDE access restriction support, the
+      only requirement is that the plug-ins in question contain an
+      OSGi bundle <em>MANIFEST.MF</em>. PDE will take care of the
+      rest including the management of the plug-in classpath.
+    </p>
+    <p>
+
+      If the plug-in does not contain a <em>MANIFEST.MF</em> file,
+      that file can be created as follows:
+    </p>
+    <ol>
+      <li>Open the <em>plugin.xml</em> in the plug-in manifest
+      editor.
+      </li>
+      <li>In the <strong>Plug-in Content</strong> section of the
+      <strong>Overview</strong> page, click on the '<strong>create
+      an OSGi bundle manifest</strong>' link.
+      </li>
+
+    </ol>
+    <p>
+      <img src="../../../images/access_restrictions/convert.PNG"
+      alt="convert to manifest.mf" />
+    </p>
+    <h2>
+      Inspecting access rules
+    </h2>
+    <p>
+      You can inspect the access restriction rules imposed on each
+      classpath entry by PDE on the <strong>Java Build
+      Path</strong> property page of your plug-in project.
+    </p>
+
+    <p>
+      <img src="../../../images/access_restrictions/properties.png"
+      alt="Java Build Path Properties" />
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/automated_management.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/automated_management.htm
deleted file mode 100644
index 3959544..0000000
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/automated_management.htm
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Automated Management of Dependencies</title>
-<script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-</head>
-
-<body>
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/testing.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/testing.htm
deleted file mode 100644
index 28073cb..0000000
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/manifest_editor/testing.htm
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Testing</title>
-<script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<link href="../../../../book.css" rel="stylesheet" type="text/css">
-</head>
-
-<body>
-<h1>Testing</h1>
-
-
-</body>
-
-</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/product_editor/dependencies.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/product_editor/dependencies.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/product_editor/licensing.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/product_editor/licensing.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_definition.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_definition.htm
index e31d60f..1e15134 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_definition.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_definition.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 	<head>
-	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 		<title>Schema Definition Page</title>
 		<link rel="STYLESHEET" href="../../../../book.css" type="text/css">
@@ -160,7 +160,7 @@
 
 		<p>
 			Example: The <strong>extension</strong> <em>element</em> specifies that a sequence 
-			of one or more <strong>shortcut</strong> <em>elements</em> are allowed as it's legal children.
+			of one or more <strong>shortcut</strong> <em>elements</em> are allowed as its legal children.
 			An <em>element reference</em> is used to represent the <strong>shortcut</strong> <em>element</em>.
 			A <strong>Sequence</strong> <em>compositor</em> is used to represent a sequence of <em>elements</em>.
 		</p>
@@ -171,7 +171,7 @@
 
 		<p>
 			Example:  The <strong>shortcut</strong> <em>element</em> specifies that either a
-			<strong>description</strong> or <strong>category</strong> element is allowed as it's legal
+			<strong>description</strong> or <strong>category</strong> element is allowed as its legal
 			child.
 			<em>Element references</em> are used to represent the <strong>description</strong> 
 			and <strong>category</strong> <em>elements</em>.
@@ -212,7 +212,7 @@
 			to define the entry point to the edited schema's grammar.
 			Any extension 
 			defined in the <strong>Plug-in Manifest Editor</strong> must use an
-			<strong>extension</strong> parent element to specify it's XML 
+			<strong>extension</strong> parent element to specify its XML 
 			related mark-up.
 		</p>
 
@@ -270,7 +270,7 @@
 
 		<p>
 			To specify that an element has no children and allows text to be
-			specified within it's start and end XML tags (character content), 
+			specified within its start and end XML tags (character content), 
 			simply leave the element's structure as is by 
 			not adding attributes, compositors and element references to it (element content).
 			Note:  An element cannot specify mixed content
@@ -368,7 +368,7 @@
 		<p>
 			If an extension element is marked as deprecated, edit the 
 			<strong>Replacement</strong> field to specify the non-deprecated
-			extension point the user should use in it's place to achieve
+			extension point the user should use in its place to achieve
 			the same functionality.
 		</p>
 
@@ -414,7 +414,7 @@
 			within the <strong>Translatable</strong> field to indicate whether the element's
 			character content is translatable or not.  This field is only applicable for
 			elements that have no specified children (element content) or attributes and 
-			allow text to be specified within it's start and end XML tags (character content).
+			allow text to be specified within its start and end XML tags (character content).
 			If an element's character content is marked as translatable, then PDE tools 
 			can be used on contributed extension XML mark-up to externalize the content 
 			into a properties file for multi-language support.
@@ -488,7 +488,7 @@
 			to appear in the contributed extension XML mark-up.  This field's value is used
 			by PDE to validate multiplicity constraints within the 
 			<strong>Plug-in Manifest Editor</strong>.
-			If <em>Element A</em> requires exactly one <em>Element B</em> or <em>Element C</em> as it's child and it uses
+			If <em>Element A</em> requires exactly one <em>Element B</em> or <em>Element C</em> as its child and it uses
 			a <strong>Choice</strong> compositor specifying 2 minimum occurrences, then any 
 			2 instances of <em>Element B</em> in combination with <em>Element C</em> must be defined in the contributed
 			extension XML mark-up in order to be valid.
@@ -500,7 +500,7 @@
 			to appear in the contributed extension XML mark-up.  This field's value is used
 			by PDE to validate multiplicity constraints within the 
 			<strong>Plug-in Manifest Editor</strong>.
-			If <em>Element A</em> requires exactly one <em>Element B</em> or <em>Element C</em> as it's child and it uses
+			If <em>Element A</em> requires exactly one <em>Element B</em> or <em>Element C</em> as its child and it uses
 			a <strong>Choice</strong> compositor specifying 2 maximum occurrences, then no more than 
 			2 instances of <em>Element B</em> in combination with <em>Element C</em> can be defined in the contributed
 			extension XML mark-up to remain valid.
@@ -667,27 +667,27 @@
 
 		<p>
 			Select a value from the <strong>Use</strong> field to indicate whether the 
-			attribute must be specified on it's defining element within contributed 
+			attribute must be specified on its defining element within contributed 
 			extension XML mark-up.
 			The following selections are available:
 		</p>
 
 		<ul>
 			<li>
-				<strong>optional</strong> - The attribute may be optionally specified on it's defining element.
+				<strong>optional</strong> - The attribute may be optionally specified on its defining element.
 			</li>
 			<li>
-				<strong>required</strong> - The attribute must be specified on it's defining element.
+				<strong>required</strong> - The attribute must be specified on its defining element.
 			</li>
 			<li>
-				<strong>default</strong> - The attribute may be optionally specified on it's defining element.
-				If the attribute is not specified, then it's value will assume the defined default value.
+				<strong>default</strong> - The attribute may be optionally specified on its defining element.
+				If the attribute is not specified, then its value will assume the defined default value.
 			</li>			
 		</ul>
 
 		<p>
 			Edit the <strong>Default Value</strong> field to specify the default value 
-			to use for an attribute when it is not specified on it's defining element within contributed 
+			to use for an attribute when it is not specified on its defining element within contributed 
 			extension XML mark-up.  This field is only applicable when 
 			the <strong>default</strong> value from the <strong>Use</strong> field is selected.
 		</p>
@@ -728,7 +728,7 @@
 		<p>
 			Use the <strong>Restrictions</strong> field to view 
 			a list of string values the attribute is restricted to using
-			as it's own value.  If the field contains no values, then there
+			as its own value.  If the field contains no values, then there
 			are no restrictions on the attribute value.
 			This field is only applicable when
 			the <strong>string</strong> value from the <strong>Type</strong> field is selected.			
@@ -763,7 +763,7 @@
 			field to open the <strong>New Restriction</strong> dialog in order to add a 
 			new restriction to the attribute value.  Once the dialog is completed, the 
 			new restriction is added to the list of string values the 
-			attribute is restricted to using as it's own value.
+			attribute is restricted to using as its own value.
 			This action is only available when
 			the <strong>string</strong> value from the <strong>Type</strong> field is selected.	
 		</p>
@@ -772,7 +772,7 @@
 			Select a string value within the <strong>Restrictions</strong>
 			field and click the <strong>Remove</strong> button 
 			to remove a restriction from the list of string values the 
-			attribute is restricted to using as it's own value.
+			attribute is restricted to using as its own value.
 			This action is only available when
 			the <strong>string</strong> value from the <strong>Type</strong> field is selected.	
 		</p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_overview.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_overview.htm
index 8d9aca9..39bea98 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_overview.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/schema_editor/page_schema_overview.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 	<head>
-	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 		<title>Schema Overview Page</title>
 		<link rel="STYLESHEET" href="../../../../book.css" type="text/css">
@@ -42,7 +42,7 @@
 		<p>
 			This section uniquely identifies the edited extension point schema. 
 			The format of an extension point schema ID is the same as the
-			fully qualified ID of it's corresponding extension point:  
+			fully qualified ID of its corresponding extension point:  
 			<em><plugin-id>.<point-id></em>
 		</p>
 
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/site_editor/archives.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/site_editor/archives.htm
index e0621cf..1d8dab3 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/site_editor/archives.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/site_editor/archives.htm
@@ -18,6 +18,28 @@
 <h2>Site Mirrors</h2>
 <p>An update site may point to the URL of a file listing update site mirror definitions. This URL can be absolute or relative to   this site.</p>
 <p><img src="../../../images/site_editor/archives_mirrors.png" alt="Mirrors"></p>
+<h3>
+Mirrors File</h3>
+<p>The <tt>updates</tt> mirror file (the one specified in the <b>Site Mirrors</b> section above)
+contains a list of mirror locations. Its format is defined by the following dtd:
+</p>
+<p><tt><?xml encoding="ISO-8859-1"?></tt></p>
+<p><tt><!ELEMENT mirrors (mirror*))></tt></p>
+<p><tt><!ELEMENT mirror EMPTY></tt></p>
+<p><tt><!ATTLIST mirror</tt>
+<br><tt>    url          
+CDATA #REQUIRED</tt> <tt>     </tt>
+<br><tt>    label         CDATA #REQUIRED</tt>
+<br><tt>></tt></p>
+<ul>
+<li><mirrors> - defines the available update site mirrors</li>
+<li><mirror> - defines a mirror site
+<ul>
+<li>url - the URL of the mirror site</li>
+<li>label - displayable label. Intended to be translated.</li>
+</ul>
+</li>
+</ul>
 
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/content_page.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/content_page.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/definition_page.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/definition_page.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/environment_page.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/environment_page.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/target_editor.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/editors/target_editor/target_editor.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_features.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_features.htm
index 3335ce2..9456d1c 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_features.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_features.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Feature Export</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
@@ -57,7 +57,6 @@
 <p><img src="../../images/export_wizards/webstart_features.png" alt="Java Web Start" > .</p>
 <p>The <strong>Site URL</strong> and <strong>JRE version</strong> fields are both required.</p>
 
-<br>
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
 <a href="export_wizards.htm">Export Wizards</a><br>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_plugins.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_plugins.htm
index 66e2f30..b33ba47 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_plugins.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_plugins.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Plug-in Export</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
@@ -35,7 +35,6 @@
 <p>The <strong>Package plug-ins as individual JAR archives</strong> option packages each plug-in as a JAR. This option is recommended for plug-ins whose code is stored at the root (i.e. plug-ins that have no <em>MANIFEST.MF</em> <strong>Bundle-ClassPath</strong> header or the header is of the form <strong>Bundle-ClassPath: .</strong>). Nested JARs are strongly discouraged as they hinder performance; since, the runtime will have to extract these JARs at runtime. Therefore, if the plug-in's code is packaged in a JAR, it is recommended to keep the deployed plug-in as a flat directory.</p>
 
 <p>The <strong>Qualifier replacement</strong> option enables you to substitute a value for the qualifier element in a plug-in's version.  The plug-ins version must be in the following format: <<em>major</em>>.<<em>minor</em>>.<<em>micro</em>>.qualifier.  For example: 3.3.0.qualifier. Normally, the qualifier represents a build date or identifier.</p>
-<p>The <strong>Save as Ant script</strong> option lets you save the settings of the export operation so that it can be re-executed at a later time without having to go through the wizard again. Like the export operation, the Ant task runs as an asynchronous job; therefore, it may not be suitable to incorporate it as a part of a larger Ant script. </p>
 
 <p>The <strong>Save as Ant script</strong> option lets you save the settings of the export operation so that it can be re-executed at a later time without having to go through the wizard again. Like the export operation, the Ant task runs as an asynchronous job; therefore, it may not be suitable to incorporate it as a part of a larger Ant script. </p>
 
@@ -49,7 +48,6 @@
 <p>To sign the JARs, <em><strong>you must be running Eclipse with a full JDK, rather than just a JRE. </strong></em></p>
 <p>The <strong>Keystore location</strong>, <strong>Keypass</strong>, <strong>Alias</strong> and <strong>Password</strong> fields are all required  for the signing operation.</p>
 
-<br>
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
 <a href="export_wizards.htm">Export Wizards</a><br>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_product.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_product.htm
index 86b136e..372d005 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_product.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_product.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Product Export</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
@@ -41,5 +41,10 @@
 <p><img src="../../images/export_wizards/cross_platform.PNG" alt="Cross Platform Export" > </p>
 <p>In a single operation, PDE generates a product for each selected platform and places it in a directory whose name is of the form <em><os>_<ws>_<arch></em>.  The <em>os</em> variable represents the selected operating system.  The <em>ws</em> variable represents the selected windowing system.  And, the <em>arch</em> variable represents the selected processor architecture.</p>
 
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p>
+<a href="export_wizards.htm">Export Wizards</a>
+</p>
+
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_target.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_target.htm
new file mode 100755
index 0000000..25d098d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_target.htm
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Target Export</title>
+<script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<link href="../../book.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<h1>Target Export</h1>
+<p>PDE provides the <strong>Export Target Definition</strong> wizard to export the contents of your current target platform to a directory.  All plug-ins and features in your target
+will be copied to destination.  The wizard is available in the <a href="../editors/target_editor/target_editor.htm">Target Definition</a> editor or by selecting 
+<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export(exportWizardId=org.eclipse.pde.target.wizard)")'>
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open the target export wizard">
+<strong>File > Export... > Plug-in Development > Target definition</strong>
+</a>. </p>
+
+<img src="../../images/export_wizards/target.png" alt="Export target wizard" >
+
+<p>This wizard will export the current active target definition.  The active target is set on the <a href="../preference_pages/target_platform.htm">Target Platform</a> preference page.</p>
+
+<p>A directory must be chosen as a destination.  The directory will be created if it does not exist.  Select <strong>Clear destination directory before exporting</strong> to
+have the contents of the destination directory deleted before exporting the current target.</p>
+
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p>
+<a href="export_wizards.htm">Export Wizards</a><br>
+<a href="../preference_pages/target_platform.htm">Target Platform Preference Page</a><br>
+<a href="../editors/target_editor/target_editor.htm">Target Definition Editor</a>
+</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_wizards.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_wizards.htm
index d971ee0..0c7d583 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_wizards.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_wizards.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Export Wizards</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
@@ -21,6 +21,7 @@
   <li><a href="export_plugins.htm">Plug-in Export</a></li>
   <li><a href="export_features.htm">Feature Export</a></li>
   <li><a href="export_product.htm">Product Export</a></li>
+  <li><a href="export_target.htm">Target Export</a></li>
 </ul>
 <p><img src="../../../images/ngrelt.png" alt="Related tasks" border="0"></p>
 <p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_category.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_category.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_ctx_help.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_ctx_help.htm
index 9f4040f..0747bf7 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_ctx_help.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_ctx_help.htm
@@ -1,50 +1,68 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<title>New Context Help Wizard</title>
-<link href="../../book.css" rel="stylesheet" type="text/css">
-</head>
-	<body>
-		<h1>New Context Help Wizard</h1>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+</script>
+    <title>
+      New Context Help Wizard
+    </title>
+    <link href="../../book.css" rel="stylesheet" type="text/css" />
+  </head>
 
-		<h2>About Context Help</h2>
-		
-		<p>
-			Context-sensitive help is a mechanism that enables linking a user interface part with a specific help topic. When the user activates the associated user interface part, the help page is displayed in the dynamic help area. 
-			Users of Eclipse products can view installed products' contributions to help by clicking <strong>Help > Help Contents</strong>.   
-		</p>
-		
-		<h2>About This Wizard</h2>
-		
-		<p>
-			This wizard allows you to create a new context help.
-			Upon completion of this wizard, a new context help will be created with basic
-			content and opened in the <strong>Context Help Editor</strong>.
-		</p>
+  <body>
+    <h1>
+      New Context Help Wizard
+    </h1>
+    <h2>
+      About Context Help
+    </h2>
+    <p>
+      Context-sensitive help is a mechanism that enables linking a
+      user interface part with a specific help topic. When the user
+      activates the associated user interface part, the help page
+      is displayed in the dynamic help area. Users of Eclipse
+      products can view installed products' contributions to help
+      by clicking <strong>Help > Help Contents</strong>.
+    </p>
 
-		<p>
-			To start this wizard, click 
-			<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.pde.ua.ui.NewContextHelpWizard)")'>
-    			<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-				<strong>File > New > Other... > User Assistance > Context Help</strong>
-			</a>.	
-		</p>
+    <h2>
+      About This Wizard
+    </h2>
+    <p>
+      This wizard allows you to create a new context help. Upon
+      completion of this wizard, a new context help will be created
+      with basic content and opened in the <strong>Context Help
+      Editor</strong>.
+    </p>
+    <p>
+      To start this wizard, click <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.pde.ua.ui.NewContextHelpWizard)")'>
 
-		<p>
-			<img src="../../images/new_wizards/new_ctx_hlp_wizard.png" alt="New Context Help Wizard">
-		</p>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+      alt="New context help wizard page" /> <strong>File > New > Other... >
+      User Assistance > Context Help</strong></a> .
+    </p>
+    <p>
 
-		<h2>Relevant Links</h2>
+      <img src="../../images/new_wizards/new_ctx_hlp_wizard.png"
+      alt="New Context Help Wizard" />
+    </p>
+    <h2>
+      Relevant Links
+    </h2>
+    <ul>
+      <li>
+        <a href=
+        "../editors/ctx_help_editor/ctx_help_editor.htm">Context
+        Help Editor</a>
+      </li>
 
-		<ul>
-			<li>
-				<a href="../editors/ctx_help_editor/ctx_help_editor.htm">Context Help Editor</a>
-			</li>
-		</ul>
-		
-	</body>
+    </ul>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_toc.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_toc.htm
index 41ca8f1..89dd4cb 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_toc.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/file_wizards/new_toc.htm
@@ -1,51 +1,67 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<title>New Table of Contents Wizard</title>
-<link href="../../book.css" rel="stylesheet" type="text/css">
-</head>
-	<body>
-		<h1>New Table of Contents Wizard</h1>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <script language="JavaScript" type="text/javascript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+</script>
+    <title>
+      New Table of Contents Wizard
+    </title>
+    <link href="../../book.css" rel="stylesheet" type="text/css" />
+  </head>
 
-		<h2>About Tables of Contents</h2>
-		
-		<p>
-			Tables of contents allow you to organize your Eclipse product's contribution to on-line help.
-			A well-organized table of contents allows users to easily locate necessary documentation while working with an Eclipse product. 
-			Users of Eclipse products can view installed products' contributions to help by clicking <strong>Help > Help Contents</strong>.   
-		</p>
-		
-		<h2>About This Wizard</h2>
-		
-		<p>
-			This wizard allows you to create a new table of contents.
-			Upon completion of this wizard, a new table of contents will be created with basic
-			content and opened in the <strong>Table of Contents Editor</strong>.
-		</p>
+  <body>
+    <h1>
+      New Table of Contents Wizard
+    </h1>
+    <h2>
+      About Tables of Contents
+    </h2>
+    <p>
+      Tables of contents allow you to organize your Eclipse
+      product's contribution to on-line help. A well-organized
+      table of contents allows users to easily locate necessary
+      documentation while working with an Eclipse product. Users of
+      Eclipse products can view installed products' contributions
+      to help by clicking <strong>Help > Help Contents</strong>.
+    </p>
 
-		<p>
-			To start this wizard, click 
-			<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.pde.ui.NewTOCWizard)")'>
-    			<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-				<strong>File > New > Other... > User Assistance > Table of Contents</strong>
-			</a>.	
-		</p>
+    <h2>
+      About This Wizard
+    </h2>
+    <p>
+      This wizard allows you to create a new table of contents.
+      Upon completion of this wizard, a new table of contents will
+      be created with basic content and opened in the <strong>Table
+      of Contents Editor</strong>.
+    </p>
+    <p>
+      To start this wizard, click <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.pde.ui.NewTOCWizard)")'>
 
-		<p>
-			<img src="../../images/new_wizards/new_toc_wizard.png" alt="New Table of Contents Wizard">
-		</p>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+      alt="New TOC wizard page" /> <strong>File > New > Other... >
+      User Assistance > Table of Contents</strong></a> .
+    </p>
+    <p>
 
-		<h2>Relevant Links</h2>
+      <img src="../../images/new_wizards/new_toc_wizard.png" alt=
+      "New Table of Contents Wizard" />
+    </p>
+    <h2>
+      Relevant Links
+    </h2>
+    <ul>
+      <li>
+        <a href="../editors/toc_editor/editor.htm">Table of
+        Contents Editor</a>
+      </li>
 
-		<ul>
-			<li>
-				<a href="../editors/toc_editor/editor.htm">Table of Contents Editor</a>
-			</li>
-		</ul>
-		
-	</body>
+    </ul>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/arguments.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/arguments.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/eclipse_application_launcher.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/eclipse_application_launcher.htm
index 1047b6b..cb7b2fc 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/eclipse_application_launcher.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/eclipse_application_launcher.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Eclipse Application Launcher</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -15,7 +15,7 @@
 <h2>Launching via a Shortcut</h2>
 <p>A quick way to test a plug-in is by launching a separate application via <strong>Eclipse Application</strong> launch shortcuts that are available as: </p>
 <ul>
-  <li> hot links in the <a href="../editors/manifest_editor/testing.htm">Testing</a> section of the plug-in manifest editor's <strong>Overview</strong> page</li>
+  <li> hot links in the <strong>Testing</strong> section of the plug-in manifest editor's <strong>Overview</strong> page</li>
   <li>actions in the <strong>Run As > </strong>and <strong>Debug As ></strong> context menus of plug-in projects </li>
 </ul>
 <p>Launch shortcuts are context-sensitive. If the selected resource is a plug-in project or plug-in manifest editor that declares an application (an <em>org.eclipse.core.runtime.applications</em> extension) or a product (an <em>org.eclipse.core.runtime.products</em> extension), then PDE launches that application or product. The set of plug-ins PDE launches with is a minimal set made up of the selected plug-in and all its pre-requisites only. If the selected plug-in contains both a product extension and an application extension, the product extension takes precedence. </p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/junit_test.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/junit_test.htm
index 9900fe4..33c061a 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/junit_test.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/junit_test.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Test Tab</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -11,7 +11,7 @@
 <body>
 <h1>Test Tab</h1>
 <p>The <strong>Test Tab</strong> specifies the tests to run and the level of JUnit test runner to use. </p>
-<h1><img src="../../images/launchers/launcher_junit_test.png" alt="JUnit Plug-in Test" ></h1>
+<img src="../../images/launchers/launcher_junit_test.png" alt="JUnit Plug-in Test" >
 
 <h2>Tests to Run</h2>
 <p>The <em>JUnit Plug-in Test</em> launcher allows you to run single tests or collections of tests <em>en masse</em>. </p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/plugins.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/launchers/plugins.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/compilers.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/compilers.htm
index 1c6a19d..78827f7 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/compilers.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/compilers.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Compilers Preferences</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -19,5 +19,9 @@
   <li><a href="feature_compiler.htm">Feature and Update Site Compiler Preferences  </a></li>
 </ul>
 
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><a href="preferences.htm">PDE Preferences</a>
+  </p>
+
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/editors.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/editors.htm
index f974b11..a077c0f 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/editors.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/editors.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Editors Preferences</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -29,5 +29,10 @@
 <p>To customize the font and color for each element, select the element in the left viewer and make changes using the buttons located on the right. The Preview pane automatically updates to reflect the changes you make.</p>
 <p>The <em>MANIFEST.MF</em> source page of the plug-in editor is controlled by this preference. </p>
 <p><img src="../../images/preferences/editors_manifest.png" alt="MANIFEST.MF Syntax Highlighting" >  </p>
+
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><a href="preferences.htm">PDE Preferences</a>
+  </p>
+
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/feature_compiler.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/feature_compiler.htm
index 6470d31..28463cf 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/feature_compiler.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/feature_compiler.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Feature and Update Site Compiler Preferences</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -13,5 +13,11 @@
 <p>Syntactic errors in <em>feature.xml</em> and <em>site.xml</em> files are flagged as errors by the PDE manifest compiler.</p>
 <p>Semantic problems such as references to a non-existent plug-in  or feature are flagged with a <em>Warning</em> by default. The severity level of this problem can be raised to <em>Error</em> or lowered to <em>Ignore</em>. </p>
 <h1><img src="../../images/preferences/compilers_features.png" alt="Features Compiler Options" > </h1>
+
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><a href="compilers.htm">PDE Compiler Preferences</a><br>
+<a href="preferences.htm">PDE Preferences</a>
+  </p>
+
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/osgi_frameworks.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/osgi_frameworks.htm
index 1b06cfd..5b74c04 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/osgi_frameworks.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/osgi_frameworks.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>OSGi Frameworks Preferences</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -40,5 +40,9 @@
  click the <strong>Set as Default</strong> button.
 </p>
 
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><a href="preferences.htm">PDE Preferences</a>
+  </p>
+
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plug_in_development.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plug_in_development.htm
index 7059a21..ed7e402 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plug_in_development.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plug_in_development.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
 <title>General Plug-in Development Preferences</title>
@@ -10,30 +10,38 @@
 </head>
 <body>
 <h1>General Plug-in Development Preferences</h1>
-<p>The  Plug-in Development preference page provides global settings that control:</p>
-<ul>
-  <li>The presentation of plug-in and feature labels in all PDE views, editors and dialogs </li>
-  <li>The Automated Management of Dependencies workflow </li>
-</ul>
-
 <p><img src="../../images/preferences/plugin_development.png" alt="Main Preference Page" ></p>
 
-<h2>Presentation Labels</h2>
-<p>By default, whenever a plug-in or a feature is presented in the UI (i.e. in the outline view, Plug-ins view, editors, etc.), the label shows the plug-in or feature ID followed by the plug-in or feature version. </p>
-<p>The <strong>Presentation Label</strong> preference is a global setting that allows you to show an alternate label for plug-ins and features composed of the (translated) name of the plug-in or feature followed by the plug-in or feature version.</p>
+<h2>General Settings</h2>
+<p><strong>Prompt before overwriting build.xml files while exporting</strong> - 
+When selected, a dialog will be opened before deleting your build.xml files when an export operation starts.
+</p>
+
+<p><strong>Update stale manifest files prior to launching</strong> - 
+This option only affects manifest files using automated management of dependencies.  Prior to launching, the manifest files will be updated with any necessary dependency changes.  This option is off by default as it decreases launch performance.
+</p>
 
-<h2>Automated Management of Dependencies</h2>
-<p>With automated management of dependencies it is the user's responsibility to explicitly invoke the function that analyzes the plug-in code and generates the correct dependencies for the plug-in <em>MANIFEST.MF</em> file. Neglecting to update the manifests may result in class loading errors when testing the plug-in. </p>
-<p>The <strong>Update stale manifest files prior to launching</strong> preference will have PDE check all the manifest files in your workspace and make necessary updates to the manifests prior to launching.  This option is off by default as it decreases launch performance.</p>
+<p><strong>Prompt before deleting a target definition file</strong> - 
+When selected, a dialog will be opened before deleting a target definition file when a target definition is removed from the <a href="target_platform.htm">Target Platform</a> preference page.
+</p>
+
+<p><strong>Include all plug-ins from target in Java search</strong> - 
+When selected, all the plug-ins from the active target platform will be added to the Java search scope.  Adding plug-ins to the java search scope will allow the plug-in contents to show up when doing Java searches and using the Open Type Dialog.  When this option is on, if any plug-in is removed from Java search, the preference will be turned off.
+</p>  
+
+<h2>Plug-in presentation</h2>
+<p>By default, whenever a plug-in or a feature is presented in the UI (i.e. in the outline view, Plug-ins view, editors, etc.), the label shows the plug-in or feature ID followed by the plug-in or feature version. </p>
+<p>The <strong>Plug-in presentation</strong> preference is a global setting that allows you to show an alternate label for plug-ins and features composed of the (translated) name of the plug-in or feature followed by the plug-in or feature version. Source plug-in are filtered from views by default.  Selecting <strong>Show source plug-ins</strong> will make them visible in the UI.</p>
+  
+<h2>Workspace location for new Eclipse Application launch configurations</h2>
+<p>When a new Eclipse Application launch configuration is created a workspace location is chosen for you.  This preference allows a different default setting to be chosen.  Selecting <strong>Use as workspace location</strong> will make whatever is written the default location.  If <strong>Append launch configuration name to this location</strong> is selected the launch configuration name will be appended to the location.</p>
 
-<h2>Exporting</h2>
-<p>Export Wizard creates a build.xml file when a plug-in is being exported. If the <strong>Prompt before overwriting build.xml files when exporting</strong> preference is selected, the user is prompted for confirmation before overwriting this file. This preference is used to preserve any custom changes made by the user.</p>  
+<h2>Workspace location for new JUnit Plug-in Test launch configurations</h2>
+<p>When a new JUnit Plug-in Test launch configuration is created a workspace location is chosen for you.  This preference allows a different default setting to be chosen.  Selecting <strong>Use as workspace location</strong> will make whatever is written the default location.  If <strong>Append launch configuration name to this location</strong> is selected the launch configuration name will be appended to the location.</p>
 
-<h2>Source</h2>
-<p>When <strong>Show source plug-ins</strong> preference is selected, the source plug-ins too are displayed on Plug-ins tab of Eclipse Application launch configuration and on plug-ins import wizard.</p>
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><a href="preferences.htm">PDE Preferences</a>
+  </p>
 
-<h2>Target Definitions</h2>
-<p>If <strong>Prompt before deleting a target definition file</strong> is selected, you will be prompted before a target definition file is deleted when <strong>Remove</strong> is pressed on the <a href="target_platform.htm">Target Platform</a> preference page.</p>
-<p>If <strong>Include all plug-ins from target in Java search</strong> is selected, all the plug-ins from the active target platform will be added to the Java search scope.  Adding plug-ins to the java search scope will allow the plug-in contents to show up when doing Java searches and using the Open Type Dialog.  When this option is on, if any plug-in is removed from Java search, the preference will be turned off.</p>  
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plugin_compiler.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plugin_compiler.htm
index 7bfd3c8..27b6009 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plugin_compiler.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/plugin_compiler.htm
@@ -1,34 +1,116 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Plug-in Compiler Preferences</title>
-<link href="../../book.css" rel="stylesheet" type="text/css">
-<script type="text/javascript" language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-</head>
-
-<body>
-<h1>Plug-in Compiler Preferences</h1>
-<p>Syntactic errors in <em>plugin.xml</em>, <em>fragment.xml</em> and <em>MANIFEST.MF</em> are all flagged as errors by the plug-in manifest compiler. As for semantic problems in the plug-in manifests, the severity for each problem category can be set to <em>Error</em>, <em>Warning</em> or <em>Ignore</em>. </p>
-
-<h2>Workspace vs. Project Settings </h2>
-<p>The plug-in compiler preferences are set at a workspace level on the 
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.pde.ui.CompilersPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open the compilers preference page">
-<strong>Window > Preferences... > Plug-in Development > Compilers</strong></a>
-preference page and take effect on all plug-in projects in the workspace. </p>
-<p>It is also possible to override the workspace-scope settings by having compiler settings at the plug-in project level. To do so, select <strong>Properties</strong> from the context menu of a plug-in project. In the <strong>Properties</strong> dialog, project-level manifest compiler settings can be customized on the <strong>Plug-in Development > Plug-in Manifest Compiler</strong> preference page.</p>
-<h2>Semantic Problems </h2>
-<p>PDE validates <em>plugin.xml</em>, <em>fragment.xml</em>, <em>MANIFEST.MF</em> and <em>build.properties</em> files to flag a variety of potential problems that may prevent the plug-in from running properly. </p>
-<p>Note that some problems such as a missing plug-in ID, plug-in version, or plug-in name render a plug-in invalid. Therefore, these problems are flagged with a non-negotiable error marker and are not available for configuration on this preference page. </p>
-<p><img src="../../images/preferences/compilers_plugin.png" alt="Plug-in Compiler Options" ></p>
-<p>The following is a brief explanation for some of the non-obvious potential problems that are flagged by PDE: </p>
-<ul>
-  <li><div class="style3">Unresolved Dependencies:</div> An unresolved dependency is a dependency on a plug-in (in the <strong>Require-Bundle</strong> <em>MANIFEST.MF</em> header) or on a package (in the <strong>Import-Package</strong> <em>MANIFEST.MF</em> header) where the plug-in or package in question does not exist.</li>
-  <li><div class="style3">Incompatible Environment:</div> A plug-in or fragment has an incompatible environment if it has an <strong>Eclipse-PlatformFilter</strong> <em>MANIFEST.MF</em> header whose value is not compatible with the current Target Environment settings as they appear on the <strong>Plug-in Development > Target Platform > Environment</strong> preference page.</li>
-  <li><div class="style3">Unresolved Extension Points:</div> An unresolved extension point is an extension point that does not exist or whose contributing plug-in is unchecked on the <strong>Plug-in Development > Target Platform</strong> preference page. Extensions contributing to such an extension point are flagged. </li>
-</ul>
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>
+      Plug-in Compiler Preferences
+    </title>
+    <link href="../../book.css" rel="stylesheet" type="text/css" />
+    <script type="text/javascript" language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js">
+</script>
+  </head>
+
+  <body>
+    <h1>
+      Plug-in Compiler Preferences
+    </h1>
+    <p>
+      Syntactic errors in <em>plugin.xml</em>, <em>fragment.xml</em> and
+      <em>MANIFEST.MF</em> are all flagged as errors by the plug-in manifest
+      compiler. As for semantic problems in the plug-in manifests, the severity
+      for each problem category can be set to <em>Error</em>, <em>Warning</em>
+
+      or <em>Ignore</em>.
+    </p>
+    <h2>
+      Workspace vs. Project Settings
+    </h2>
+    <p>
+      The plug-in compiler preferences are set at a workspace level on the
+      <a class="command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.pde.ui.CompilersPreferencePage)")'>
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "Open the compilers preference page" /> <strong>Window >
+
+      Preferences... > Plug-in Development > Compilers</strong></a>
+      preference page and take effect on all plug-in projects in the workspace.
+    </p>
+    <p>
+      It is also possible to override the workspace-scope settings by having
+      compiler settings at the plug-in project level. To do so, select
+      <strong>Properties</strong> from the context menu of a plug-in project.
+      In the <strong>Properties</strong> dialog, project-level manifest
+      compiler settings can be customized on the <strong>Plug-in Development
+      > Plug-in Manifest Compiler</strong> preference page.
+    </p>
+
+    <h2>
+      Semantic Problems
+    </h2>
+    <p>
+      PDE validates <em>plugin.xml</em>, <em>fragment.xml</em>,
+      <em>MANIFEST.MF</em> and <em>build.properties</em> files to flag a
+      variety of potential problems that may prevent the plug-in from running
+      properly.
+    </p>
+
+    <p>
+      Note that some problems such as a missing plug-in ID, plug-in version, or
+      plug-in name render a plug-in invalid. Therefore, these problems are
+      flagged with a non-negotiable error marker and are not available for
+      configuration on this preference page.
+    </p>
+    <p>
+      <img src="../../images/preferences/compilers_plugin.png" alt=
+      "Plug-in Compiler Options" />
+    </p>
+    <p>
+      The following is a brief explanation for some of the non-obvious
+      potential problems that are flagged by PDE:
+    </p>
+    <ul>
+
+      <li>
+        <div class="style3">
+          Unresolved Dependencies:
+        </div>An unresolved dependency is a dependency on a plug-in (in the
+        <strong>Require-Bundle</strong> <em>MANIFEST.MF</em> header) or on a
+        package (in the <strong>Import-Package</strong> <em>MANIFEST.MF</em>
+        header) where the plug-in or package in question does not exist.
+      </li>
+
+      <li>
+        <div class="style3">
+          Incompatible Environment:
+        </div>A plug-in or fragment has an incompatible environment if it has
+        an <strong>Eclipse-PlatformFilter</strong> <em>MANIFEST.MF</em> header
+        whose value is not compatible with the current Target Environment
+        settings as they appear on the <strong>Plug-in Development > Target
+        Platform > Environment</strong> preference page.
+      </li>
+
+      <li>
+        <div class="style3">
+          Unresolved Extension Points:
+        </div>An unresolved extension point is an extension point that does not
+        exist or whose contributing plug-in is unchecked on the <strong>Plug-in
+        Development > Target Platform</strong> preference page. Extensions
+        contributing to such an extension point are flagged.
+      </li>
+    </ul>
+    <p>
+
+      <img src="../../../images/ngrelr.png" alt="Related reference" border=
+      "0" />
+    </p>
+    <p>
+      <a href="compilers.htm">PDE Compiler Preferences</a><br />
+      <a href="preferences.htm">PDE Preferences</a>
+    </p>
+  </body>
 </html>
+
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/preferences.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/preferences.htm
index 177fed2..9d7c7d0 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/preferences.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/preferences.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>PDE Preferences</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -22,6 +22,7 @@
   <li><a href="plug_in_development.htm">General Plug-in Development Preferences</a></li>
   <li><a href="../../../reference/api-tooling/preferences/ref-baselines.htm">API Baselines</a></li>
   <li><a href="../../../reference/api-tooling/preferences/ref-errorswarnings.htm">API Errors/Warnings</a></li>
+  <li><a href="../../../reference/api-tooling/preferences/ref-usescans.htm">API Use Scans</a></li>
   <li><a href="compilers.htm">Compiler Preferences</a></li>
   <li><a href="editors.htm">Editors Preferences</a></li>
   <li><a href="osgi_frameworks.htm">OSGi Frameworks Preferences</a></li>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/runtime_classpath_properties.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/runtime_classpath_properties.htm
new file mode 100755
index 0000000..ff71723
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/runtime_classpath_properties.htm
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Runtime Classpath</title>
+<link href="../../book.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<h1>Runtime Classpath</h1>
+<p>When <a href="../launchers/eclipse_application_launcher.htm">launching</a> a runtime workbench, PDE must create the classpath for 
+your plug-ins.  By default, all of your project's output folders will be placed on the classpath.  This page allows you to
+remove the output folders from the classpath.</p>
+
+<p>The selected folders will be added to the classpath.  Deselect the folders you do not want included.</p>
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/schema_compiler.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/schema_compiler.htm
index beddc9d..cc10228 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/schema_compiler.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/preference_pages/schema_compiler.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Extension Point Schema Compiler Preferences</title>
 <link href="../../book.css" rel="stylesheet" type="text/css">
@@ -20,7 +20,10 @@
 <h2>Unmatched Tags Preference </h2>
 <p>The documentation portions of extension point schemas allow HTML tags. Missing closing tags for those HTML tags that require it may result in badly formatted HTML documentation. The PDE builder validates the documentation sections of extension schemas and flag unmatched tags with a <em>Warning</em> by default. The severity level of this problem can be raised to <em>Error</em> or lowered to <em>Ignore</em>.</p>
 
-<p></p>
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><a href="compilers.htm">PDE Compiler Preferences</a><br>
+<a href="preferences.htm">PDE Preferences</a>
+  </p>
 
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_arguments_tab.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_arguments_tab.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_content_tab.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_content_tab.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_environment_tab.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_environment_tab.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_implicit_tab.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_implicit_tab.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_locations_tab.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_locations_tab.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/edit_target_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/implicit_plugin_selection_dialog.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/implicit_plugin_selection_dialog.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/import_arguments_dialog.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/import_arguments_dialog.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_add_features_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_add_features_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_add_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_add_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_directory_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_directory_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_feature_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_feature_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_installation_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_installation_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_site_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_edit_site_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_preview.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/location_preview.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/move_target_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/move_target_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/new_target_wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/target_shared/new_target_wizard.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugin_registry.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugin_registry.htm
index 496466a..52bd9b8 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugin_registry.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugin_registry.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Plug-in Registry</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
@@ -11,7 +11,7 @@
 
 <body>
 <h1>Plug-in Registry</h1>
-<p>The <strong>Plug-in Registry</strong> view shows the state of all plug-ins in the running instance of Eclipse. The<strong> </strong>view is available under <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.pde.runtime.RegistryBrowser)")'>
+<p>The <strong>Plug-in Registry</strong> view shows the state of all plug-ins in the running instance of Eclipse. The view is available under <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.pde.runtime.RegistryBrowser)")'>
 <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open the Registry Browser">
 <strong>Window > Show View > Other... > Plug-in Development > Plug-in Registry</strong>
 </a>. </p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugins.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugins.htm
index df64d2c..0d8479c 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugins.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/plugins.htm
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Plug-ins</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
@@ -11,7 +11,7 @@
 
 <body>
 <h1>Plug-ins  </h1>
-<p>The <strong>Plug-ins View</strong> shows a unified view of all the plug-ins you are developing in the workspace and the plug-ins that make up your target platform. The view <strong></strong> is available under <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.pde.ui.PluginsView)")'>
+<p>The <strong>Plug-ins View</strong> shows a unified view of all the plug-ins you are developing in the workspace and the plug-ins that make up your target platform. The view is available under <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.pde.ui.PluginsView)")'>
 <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open the Plug-ins view">
 <strong>Window > Show View > Other... > Plug-in Development > Plug-ins</strong>
 </a>. </p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/target_platform_state.htm b/eclipse/plugins/org.eclipse.pde.doc.user/guide/tools/views/target_platform_state.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/notices.html b/eclipse/plugins/org.eclipse.pde.doc.user/notices.html
index 8008473..8a292b6 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/notices.html
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/notices.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="STYLESHEET" href="book.css" type="text/css">
@@ -13,7 +13,7 @@
 <h3>
 <a name="Notices"></a>Notices</h3>
 <p>
-The material in this guide is Copyright (c) IBM Corporation and others 2000, 2010.
+The material in this guide is Copyright (c) IBM Corporation and others 2000, 2011.
 </p>
 <p>
 <a href="about.html">Terms and conditions regarding the use of this guide.</a>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt b/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt
index 9ab78d0..c525611 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/pdeOptions.txt
@@ -52,14 +52,15 @@
 ;../org.eclipse.ui.workbench/@dot
 ;../org.eclipse.ui.workbench.texteditor/@dot
 ;../org.eclipse.update.configurator/@dot
+;../org.eclipse.equinox.p2.publisher.eclipse/pdepublishing.jar
 -breakiterator
 -use
 -splitIndex
 
 -windowtitle "Eclipse PDE API Specification"
 -doctitle "Eclipse PDE API Specification"
--header "<b>Eclipse PDE</b><br>Release 3.6"
--bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.</p></font>'
+-header "<b>Eclipse PDE</b><br>Release 3.7"
+-bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.</p></font>'
 -link http://download.oracle.com/javase/1.4.2/docs/api
 -linkoffline ./../../../org.eclipse.platform.doc.isv/reference/api ../org.eclipse.platform.doc.isv/reference/api
 -linkoffline ./../../../org.eclipse.jdt.doc.isv/reference/api ../org.eclipse.jdt.doc.isv/reference/api
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/plugin.properties b/eclipse/plugins/org.eclipse.pde.doc.user/plugin.properties
index 2e3a3d6..45ea149 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/plugin.properties
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2000, 2007 IBM Corporation and others.
+#  Copyright (c) 2000, 2009 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/plugin.xml b/eclipse/plugins/org.eclipse.pde.doc.user/plugin.xml
index 0227310..7d5c63f 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/plugin.xml
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/plugin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
 <!--
-     Copyright (c) 2005, 2008 IBM Corporation and others.
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -33,7 +33,10 @@
        <toc file="topics_Reference.xml" />
        <toc
              file="topics_Tasks.xml">
-       </toc>   
+       </toc>
+      <toc
+            file="topics_WhatsNew.xml">
+      </toc>
    </extension>  
 <!-- ============================================================================= -->
 <!-- Define help context                                                           -->
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/actions/ref-pdetools.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/actions/ref-pdetools.htm
index e197946..72baa89 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/actions/ref-pdetools.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/actions/ref-pdetools.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../book.css" type="text/css">
@@ -23,7 +23,7 @@
 <p><img src="../images/pde-tools-flyout.PNG" alt="PDE Tools Fly-Out menu"></p>
 <p><img src="../../images/ngrelr.png" alt="Related Reference"></p>
 <p>
-<a href="../api-tooling/actions/ref-apitooling-setup-action.htm">API Tooling Setup</a>
+<a href="../api-tooling/actions/ref-apitooling-setup-action.htm">API Tools Setup</a>
 </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/actions/ref-apitooling-setup-action.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/actions/ref-apitooling-setup-action.htm
index af6bc7a..a148a1b 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/actions/ref-apitooling-setup-action.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/actions/ref-apitooling-setup-action.htm
@@ -2,20 +2,20 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../../book.css" type="text/css">
-  <title>API Tooling Setup</title>
+  <title>API Tools Setup</title>
 </head>
 <body>
-<h1>API Tooling Setup</h1>
-<p>Select the <strong>API Tooling Setup</strong> command [ <img src="PLUGINS_ROOT/org.eclipse.pde.api.tools.ui/icons/full/obj16/category_menu.gif" alt="API Tooling Setup"> ] to start the API Setup wizard.</p>
+<h1>API Tools Setup</h1>
+<p>Select the <strong>API Tools Setup</strong> command [ <img src="PLUGINS_ROOT/org.eclipse.pde.api.tools.ui/icons/full/obj16/category_menu.gif" alt="API Tools Setup"> ] to start the API Setup wizard.</p>
 <br>
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
-<a href="../wizards/ref-api-setup-wizard.htm">API Tooling Setup Wizard</a><br>
+<a href="../wizards/ref-api-setup-wizard.htm">API Tools Setup Wizard</a><br>
 <a href="../../actions/ref-pdetools.htm">PDE Tools Context Menu</a>
 </p>
 </body>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-ant-task.htm
index 889276d..5c73c1e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-ant-task.htm
@@ -1,10 +1,10 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<meta http-equiv="Content-Style-Type" content="text/css"/>
+<link rel="stylesheet" href="../../../apache_style.css" type="text/css"/>
 <title>API Tools Analysis Ant Task</title>
 <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
@@ -26,6 +26,7 @@ classpath.</p>
 	report=<font color="#008000">"..."</font>
 	filters=<font color="#008000">"..."</font>
 	excludelist=<font color="#008000">"..."</font>
+	includelist=<font color="#008000">"..."</font>
 	preferences=<font color="#008000">"..."</font>
 	debug=<font color="#008000">"..."</font>
 	eefile=<font color="#008000">"..."</font>
@@ -42,42 +43,43 @@ classpath.</p>
 <tr>
 <td valign="top">baseline</td>
 <td valign="top">This attribute specifies the location of the reference baseline.
-<br><br>It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
+<br/><br/>It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
 directory is which you can find the Eclipse executable.
-<br><br>The location is specified using an absolute path.
+<br/><br/>The location is specified using an absolute path.
 </td>
 <td align="center" valign="top">Yes</td>
 </tr>
 <tr>
 <td valign="top">profile</td>
 <td valign="top">This attribute specifies the location of the current product or profile that you want to compare against the reference baseline.
-<br><br>
+<br/><br/>
 It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
 directory is which you can find the Eclipse executable.
-<br><br>The location is specified using an absolute path.
+<br/><br/>The location is specified using an absolute path.
 </td>
 <td align="center" valign="top">Yes</td>
 </tr>
 <tr>
 <td valign="top">report</td>
 <td valign="top">Set the output location where the reports will be generated.
-<br><br>
+<br/><br/>
 Once the task is completed, reports are available in this directory using a structure similar to the filter root. A sub-folder is created
 for each component that has problems to be reported. Each sub-folder contains a file called "report.xml".
-<br><br>A special folder called "allNonApiBundles" is also created in this folder which also contains a file called "report.xml".
-This file lists all the bundles that are not using the API Tooling nature.
-<br><br>The location is specified using an absolute path. 
+<br/><br/>A special folder called "allNonApiBundles" is also created in this folder which also contains a file called "report.xml".
+This file lists all the bundles that are not using the API Tools nature.
+<br/><br/>There is also a "counts.xml" file created in the report directory that contains a summary of the problems found.
+<br/><br/>The location is specified using an absolute path. 
 </td>
 <td align="center" valign="top">Yes</td>
 </tr>
 <tr>
 <td valign="top">filters</td>
 <td valign="top">Set the root directory of API filters to use during the analysis.
-<br><br>
+<br/><br/>
 The argument is the root directory of the .api_filters files that should be used to filter potential problems created by 
-the api tooling analysis.
-<br>The root is specified using an absolute path. 
-<br>The root needs to contain the following structure:
+the API Tools analysis.
+<br/>The root is specified using an absolute path. 
+<br/>The root needs to contain the following structure:
 <pre>
  root
   |
@@ -91,10 +93,18 @@ the api tooling analysis.
 <tr>
 <td valign="top">excludelist</td>
 <td valign="top">Set the exclude list location. 
-<br><br>The exclude list is used to know what bundles should excluded from the xml report generated by the task execution.
-The lines that start with '#' are ignored from the excluded elements.
-<br>The location is specified using an absolute path.
-<br>The format of the exclude list file looks like this:
+<br/><br/>The exclude list location specifies a text file listing bundles to be excluded from the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example exclude list:
 <pre>
  # DOC BUNDLES
  org.eclipse.jdt.doc.isv
@@ -105,8 +115,37 @@ The lines that start with '#' are ignored from the excluded elements.
  # NON-ECLIPSE BUNDLES
  com.ibm.icu
  com.jcraft.jsch
- javax.servlet
- javax.servlet.jsp
+ R:javax\..*
+ ...
+</pre>
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">includelist</td>
+<td valign="top">Set the include list location. 
+<br/><br/>The include list location specifies a text file listing bundles to be included in the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example include list:
+<pre>
+ # DOC BUNDLES
+ org.eclipse.jdt.doc.isv
+ org.eclipse.jdt.doc.user
+ org.eclipse.pde.doc.user
+ R:org.eclipse.platform.doc.*
+ # NON-ECLIPSE BUNDLES
+ com.ibm.icu
+ com.jcraft.jsch
+ R:javax\..*
  ...
 </pre>
 </td>
@@ -115,10 +154,10 @@ The lines that start with '#' are ignored from the excluded elements.
 <tr>
 <td valign="top">preferences</td>
 <td valign="top">Set the preferences for the task. 
-<br><br>
+<br/><br/>
 The preferences are used to configure problem severities. Problem severities have three possible values: Ignore, Warning, or Error. The set of problems detected is defined by corresponding problem preference keys in API tools.
-<br>The location is specified using an absolute path. If the given location doesn't exist, the preferences won't be set.
-<br>
+<br/>The location is specified using an absolute path. If the given location doesn't exist, the preferences won't be set.
+<br/>
 Lines starting with '#' are ignored. The format of the preferences file looks like this:
 <pre>
  #Thu Nov 20 17:35:06 EST 2008
@@ -142,17 +181,17 @@ The keys can be found in org.eclipse.pde.api.tools.internal.provisional.problems
 <tr>
 <td valign="top">debug</td>
 <td valign="top">Set the debug value.
-<br><br>The possible values are: <code>true</code>, <code>false</code>
-<br>Default is <code>false</code>.
+<br/><br/>The possible values are: <code>true</code>, <code>false</code>
+<br/>Default is <code>false</code>.
 </td>
 <td align="center" valign="top">No</td>
 </tr>
 <tr>
 <td valign="top">eefile</td>
 <td valign="top">Set the execution environment file to use. 
-<br><br>By default, an execution environment file corresponding to a JavaSE-1.6 execution environment is used.
-<br><br>The format of the file is described in this <a href="http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions" target="blank">wiki page</a>.
-<br><br>The file is specified using an absolute path.
+<br/><br/>By default, an execution environment file corresponding to a JavaSE-1.6 execution environment is used.
+<br/><br/>The format of the file is described in this <a href="http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions" target="blank">wiki page</a>.
+<br/><br/>The file is specified using an absolute path.
 </td>
 <td align="center" valign="top">No</td>
 </tr>
@@ -177,15 +216,15 @@ It will use the exclude list and the <code>.api_filter</code> files located in <
 <p>Problem severities will be generated as specified by <code>D:\tests_api\org.eclipse.pde.api.tools.prefs</code>.</p>
 <p>Since debug is enabled, some debug tracing will show up in the Ant console.</p>
 
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"/></p>
 <p><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-<br><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
+<br/><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
+<br/><a href="apiuse-ant-task.htm">API Use Ant Task</a>
+<br/><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
+<br/><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
+<br/><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
+<br/><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
+<br/><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
 </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-reportconversion-ant-task.htm
index 693942c..0854939 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-reportconversion-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/analysis-reportconversion-ant-task.htm
@@ -1,85 +1,170 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Tools Analysis Report Conversion Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Tools Analysis Report Conversion Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task converts  XML reports created by the <code>apitooling.analysis</code> Ant task into HTML files.
-</p>
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.analysis_reportconversion</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<div style="text-align: left;">
-<pre style="margin-left: 40px">
-<b><font color="#0000ff"><apitooling.analysis_reportconversion
-	xmlfiles=<font color="#008000">"..."</font>
-	htmlfiles=<font color="#008000">"..."</font>
-	debug=<font color="#008000">"..."</font>
-/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Tools Analysis Report Conversion Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Tools Analysis Report Conversion Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task converts XML reports created by the
+      <code>apitooling.analysis</code> Ant task into HTML files.
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.analysis_reportconversion</code>. To be
+      used, the jar file <code>apitooling-ant.jar</code> has to be
+      on the Ant classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class="c2"><apitooling.analysis_reportconversion
+	xmlfiles=<span class="c1">"..."</span>
+	htmlfiles=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+/></span></b>
 </pre>
-</div>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-<td valign="top">xmlfiles</td>
-<td valign="top">Set the location where the xml reports are retrieved.
-<br><br>The location is set using an absolute path.
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">htmlfiles</td>
-<td valign="top">Set the location where the html reports are generated.
-<br><br>If not set, the html files are created in the same folder as the xml files.
-<br><br>The location is set using an absolute path.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-<tr>
-<td valign="top">debug</td>
-<td valign="top">Set the debug value.
-<br><br>The possible values are: <code>true</code>, <code>false</code>
-<br>Default is <code>false</code>.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-</table>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+
+        <td align="center" valign="top">
+          <b>Required</b>
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          xmlfiles
+        </td>
+        <td valign="top">
+
+          Set the location where the xml reports are
+          retrieved.<br />
+          <br />
+          The location is set using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
 
-<h3>Examples</h3>
+        <td valign="top">
+          htmlfiles
+        </td>
+        <td valign="top">
+          Set the location where the html reports are
+          generated.<br />
+          <br />
+          If not set, the html files are created in the same folder
+          as the xml files.<br />
+          <br />
 
-<pre>
-	<b><font color="#0000ff"><apitooling.analysis_reportconversion
-		xmlfiles=<font color="#008000">"D:\reports\xml"</font>
-		htmlfiles=<font color="#008000">"D:\reports\html"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+          The location is set using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          debug
+        </td>
+
+        <td valign="top">
+          Set the debug value.<br />
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+          Default is <code>false</code>.
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+    <pre>
+ <b><span class="c2"><apitooling.analysis_reportconversion
+  xmlfiles=<span class="c1">"D:\reports\xml"</span>
+
+  htmlfiles=<span class="c1">"D:\reports\html"</span>
+  debug=<span class="c1">"true"</span>
+ /></span></b>
 </pre>
-<p>This will create an <code>index.html</code> inside the folder <code>D:\reports\html</code>. A report for each
-bundle will be created inside a sub-folder of <code>D:\reports\html</code>. Each sub-folder will contain a 
-<code>report.html</code>.</p>
-<p>Since debug is enabled, some debug tracing will show up in the Ant console.</p>
+    <p>
+      This will create an <code>index.html</code> inside the folder
+      <code>D:\reports\html</code>. A report for each bundle will
+      be created inside a sub-folder of
+      <code>D:\reports\html</code>. Each sub-folder will contain a
+      <code>report.html</code>.
+    </p>
+
+    <p>
+      Since debug is enabled, some debug tracing will show up in
+      the Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="apifreeze-reportconversion-ant-task.htm">API Freeze
+      Report Conversion Ant Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a>
 
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="analysis-ant-task.htm">Analysis Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a></p>
-</body>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiconsumeruse-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiconsumeruse-reportconversion-ant-task.htm
new file mode 100755
index 0000000..947cc91
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiconsumeruse-reportconversion-ant-task.htm
@@ -0,0 +1,234 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Consumer Use Report Conversion Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Consumer Use Report Conversion Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task converts the XML report created by the
+      <code>apitooling.apiuse</code> Ant task into HTML files. The
+      HTML report organizes references by the bundle that consumes
+      the reference (i.e. contains the code that references the
+      api/type).
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.apiconsumeruse_reportconversion</code>. To
+      be used, the jar file <code>apitooling-ant.jar</code> has to
+      be on the Ant classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+ <b><span class="c2"><apitooling.apiconsumeruse_reportconversion
+	xmlfiles=<span class="c1">"..."</span>
+	htmlfiles=<span class="c1">"..."</span>
+	xsltfile=<span class="c1">"..."</span>
+	filterpatterns=<span class="c1">"..."</span>
+	tofilterpatterns=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+ /></span></b>
+</pre>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+        <td align="center" valign="top">
+          <b>Required</b>
+
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          xmlfiles
+        </td>
+        <td valign="top">
+          This attribute specifies the location of the xml files to
+          convert.<br />
+          <br />
+
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          htmlfiles
+        </td>
+
+        <td valign="top">
+          This attribute specifies the location of the html files
+          to generate.<br />
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+
+      <tr>
+        <td valign="top">
+          xsltfile
+        </td>
+        <td valign="top">
+          This attribute specifies the location of an XSLT file to
+          be used to generate the reference details pages in a
+          desired ordering.<br />
+          <br />
+          A default XSLT file is available in the
+          <code>apitooling-ant.jar</code> JAR file.<br />
+
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          filterpatterns
+        </td>
+
+        <td valign="top">
+          This attribute specifies a comma separated listing of
+          regular expression patterns used to prune references
+          <em>from</em> matching name patterns from the final
+          report.<br />
+          <br />
+          The pattern must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          tofilterpatterns
+        </td>
+        <td valign="top">
+          This attribute specifies a comma separated listing of
+          regular expression patterns used to prune references
+          <em>to</em> matching name patterns from the final
+          report.<br />
+
+          <br />
+          The pattern must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+
+    <pre>
+ <b><span class="c2"><apitooling.apiuse_reportconversion
+  xmlfiles=<span class="c1">"/eclipse/apiuse-both/XML"</span>
+  htmlfiles=<span class="c1">"/eclipse/apiuse-both/HTML"</span>
+  xsltfile=<span class="c1">"/eclipse/references.xsl"</span>
+  debug=<span class="c1">"true"</span>
+
+ /></span></b>
+</pre>
+    <p>
+      This will run the task creating <code>*.html</code> files
+      inside the folder <code>/eclipse/apiuse-both/HTML</code>
+      corresponding to the folder structure of the XML file
+      location
+    </p>
+    <p>
+
+      If debug is enabled, some debug tracing will show up in the
+      Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a><br />
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a>
+
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-ant-task.htm
index 0f429f7..a9f6ec8 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-ant-task.htm
@@ -1,10 +1,10 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<meta http-equiv="Content-Style-Type" content="text/css"/>
+<link rel="stylesheet" href="../../../apache_style.css" type="text/css"/>
 <title>API Tools API Freeze Ant Task</title>
 <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
@@ -24,6 +24,7 @@ classpath.</p>
 	profile=<font color="#008000">"..."</font>
 	report=<font color="#008000">"..."</font>
 	excludelist=<font color="#008000">"..."</font>
+	includelist=<font color="#008000">"..."</font>
 	debug=<font color="#008000">"..."</font>
 	eefile=<font color="#008000">"..."</font>
 /></font></b>
@@ -39,42 +40,89 @@ classpath.</p>
 <tr>
 <td valign="top">baseline</td>
 <td valign="top">This attribute specifies the location of the reference baseline.
-<br><br>It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
+<br/><br/>It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
 directory is which you can find the Eclipse executable.
-<br><br>The location is specified using an absolute path.
+<br/><br/>The location is specified using an absolute path.
 </td>
 <td align="center" valign="top">Yes</td>
 </tr>
 <tr>
 <td valign="top">profile</td>
 <td valign="top">This attribute specifies the location of the current product or profile that you want to compare against the reference baseline.
-<br><br>
+<br/><br/>
 It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
 directory is which you can find the Eclipse executable.
-<br><br>The location is specified using an absolute path.
+<br/><br/>The location is specified using an absolute path.
 </td>
 <td align="center" valign="top">Yes</td>
 </tr>
 <tr>
 <td valign="top">report</td>
 <td valign="top">Set the name of the report file to be generated.
-<br><br>It should be specified using an absolute path.
+<br/><br/>It should be specified using an absolute path.
+<br/>This must be a file location, not a directory.
 </td>
 <td align="center" valign="top">Yes</td>
 </tr>
 <tr>
 <td valign="top">excludelist</td>
 <td valign="top">Set the exclude list location.
-<br><br>
-The exclude list is used to know what bundles should excluded from the xml report
-generated by the task execution.
-<br>The location is specified using an absolute path.
-<br>Lines starting with '#' are ignored from the excluded element.
-<br>The format of the exclude file looks like this:
-<pre># 207144
+<br/><br/>The exclude list location specifies a text file listing bundles to be excluded from the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. In addition, this task supports listing members in the include
+and exclude lists. The include list seeds the set of bundles and members to be analyzed (when omitted,
+all bundles and members are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a specific member name</li>
+<li>a regular expression to match against bundle or member names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example exclude list:
+<pre>
+# ECLIPSE MEMBERS
+org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#getElements(Ljava/lang/Object;)[Ljava/lang/Object;
+# ECLIPSE BUNDLES
+org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_DEC_FIELD_ERROR
+org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_DEC_FIELD_WARNING
+org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_ELCL_COLLAPSEALL
+# NON-ECLIPSE BUNDLES
+com.ibm.icu
+R:javax\..*
+...
+</pre>
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">includelist</td>
+<td valign="top">Set the include list location.
+<br/><br/>The include list location specifies a text file listing bundles to be included in the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. In addition, this task supports listing members in the include
+and exclude lists. The include list seeds the set of bundles and members to be analyzed (when omitted,
+all bundles and members are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a specific member name</li>
+<li>a regular expression to match against bundle or member names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example include list:
+<pre>
+# ECLIPSE MEMBERS
+org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#getElements(Ljava/lang/Object;)[Ljava/lang/Object;
+# ECLIPSE BUNDLES
 org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_DEC_FIELD_ERROR
 org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_DEC_FIELD_WARNING
 org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_ELCL_COLLAPSEALL
+# NON-ECLIPSE BUNDLES
+com.ibm.icu
+R:javax\..*
 ...
 </pre>
 </td>
@@ -83,17 +131,17 @@ org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_ELCL_COLLAPSEALL
 <tr>
 <td valign="top">debug</td>
 <td valign="top">Set the debug value.
-<br><br>The possible values are: <code>true</code>, <code>false</code>
-<br>Default is <code>false</code>.
+<br/><br/>The possible values are: <code>true</code>, <code>false</code>
+<br/>Default is <code>false</code>.
 </td>
 <td align="center" valign="top">No</td>
 </tr>
 <tr>
 <td valign="top">eefile</td>
 <td valign="top">Set the execution environment file to use. 
-<br><br>By default, an execution environment file corresponding to a JavaSE-1.6 execution environment is used.
-<br><br>The format of the file is described in this <a href="http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions" target="blank">wiki page</a>.
-<br><br>The file is specified using an absolute path.
+<br/><br/>By default, an execution environment file corresponding to a JavaSE-1.6 execution environment is used.
+<br/><br/>The format of the file is described in this <a href="http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions" target="blank">wiki page</a>.
+<br/><br/>The file is specified using an absolute path.
 </td>
 <td align="center" valign="top">No</td>
 </tr>
@@ -114,14 +162,14 @@ org.eclipse.ui.workbench_3.4.0:org.eclipse.ui.ISharedImages#IMG_ELCL_COLLAPSEALL
 It will use the exclude list <code>D:\exclude_list_external.txt</code> to reduce the number of problems to report.</p>
 <p>Since debug is enabled, some debug tracing will show up in the Ant console.</p>
 
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"/></p>
 <p><a href="analysis-ant-task.htm">Analysis Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-<br><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a></p>
+<br/><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
+<br/><a href="apiuse-ant-task.htm">API Use Ant Task</a>
+<br/><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
+<br/><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
+<br/><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
+<br/><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
+<br/><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a></p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-reportconversion-ant-task.htm
index 7eec00b..b3bc526 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-reportconversion-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apifreeze-reportconversion-ant-task.htm
@@ -1,83 +1,169 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Tools API Freeze Report Conversion Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Tools API Freeze Report Conversion Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task converts the XML report created by the <code>apitooling.apifreeze</code> Ant task into an HTML file.</p>
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.apifreeze_reportconversion</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<div style="text-align: left;">
-<pre style="margin-left: 40px">
-<b><font color="#0000ff"><apitooling.apifreeze_reportconversion
-	xmlfile=<font color="#008000">"..."</font>
-	htmlfile=<font color="#008000">"..."</font>
-	debug=<font color="#008000">"..."</font>
-/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Tools API Freeze Report Conversion Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Tools API Freeze Report Conversion Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task converts the XML report created by the
+      <code>apitooling.apifreeze</code> Ant task into an HTML file.
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.apifreeze_reportconversion</code>. To be
+      used, the jar file <code>apitooling-ant.jar</code> has to be
+      on the Ant classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class="c2"><apitooling.apifreeze_reportconversion
+	xmlfile=<span class="c1">"..."</span>
+	htmlfile=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+/></span></b>
 </pre>
-</div>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-<td valign="top">xmlfile</td>
-<td valign="top">This attribute specifies the location of the xml file to convert.
-<br><br>The location is specified using an absolute path.
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">htmlfile</td>
-<td valign="top">This attribute specifies the location of the html file to generate.
-<br><br>If not set, the html file name is retrieved from the xml file name by replacing ".xml" in ".html".
-<br><br>The location is specified using an absolute path.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-<tr>
-<td valign="top">debug</td>
-<td valign="top">Set the debug value.
-<br><br>The possible values are: <code>true</code>, <code>false</code>
-<br>Default is <code>false</code>.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-</table>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+
+        <td align="center" valign="top">
+          <b>Required</b>
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          xmlfile
+        </td>
+        <td valign="top">
+
+          This attribute specifies the location of the xml file to
+          convert.<br />
+          <br />
+          The location is specified using an absolute path.<br />
+          This must be a file location, not a directory.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
 
-<h3>Examples</h3>
+      <tr>
+        <td valign="top">
+          htmlfile
+        </td>
+        <td valign="top">
+          This attribute specifies the location of the html file to
+          generate.<br />
+          <br />
+          If not set, the html file name is retrieved from the xml
+          file name by replacing ".xml" in ".html".<br />
 
-<pre>
-	<b><font color="#0000ff"><apitooling.apifreeze_reportconversion
-		xmlfile==<font color="#008000">"D:\report\report.xml"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+          <br />
+          The location is specified using an absolute path.<br />
+          This must be a file location, not a directory.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+
+    <pre>
+ <b><span class="c2"><apitooling.apifreeze_reportconversion
+  xmlfile==<span class="c1">"D:\report\report.xml"</span>
+  debug=<span class="c1">"true"</span>
+ /></span></b>
 </pre>
-<p>This will run the task creating <code>report.html</code> inside the folder <code>D:\report</code> as the
-htmlfile attribute is not set.</p>
-<p>Since debug is enabled, some debug tracing will show up in the Ant console.</p>
+    <p>
+      This will run the task creating <code>report.html</code>
+
+      inside the folder <code>D:\report</code> as the htmlfile
+      attribute is not set.
+    </p>
+    <p>
+      Since debug is enabled, some debug tracing will show up in
+      the Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+
+    <p>
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="apifreeze-ant-task.htm">AAPI Freeze Ant
+      Task</a><br />
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a><br />
 
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="analysis-ant-task.htm">Analysis Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="apifreeze-ant-task.htm">AAPI Freeze Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
-</p>
-</body>
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-ant-task.htm
old mode 100644
new mode 100755
index ae30ef4..a85d1ce
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-ant-task.htm
@@ -1,146 +1,354 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Use Migration Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Use Migration Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task takes a given API use scan and tries to re-resolve it within a 
-given candidate product release and reports any unresolved references.</p>
-
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.apimigration</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<pre>
-	<b><font color="#0000ff"><apitooling.apimigration
-		candidate=<font color="#008000">"..."</font>
-		usescan=<font color="#008000">"..."</font>
-		scopepattern=<font color="#008000">"..."</font>
-		referencepattern=<font color="#008000">"..."</font>
-		report=<font color="#008000">"..."</font>
-		debug=<font color="#008000">"..."</font>
-	/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Use Migration Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Use Migration Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task takes a given API use scan and tries to re-resolve
+      it within a given candidate product release and reports any
+      unresolved references.
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+    <p>
+
+      The name of the Ant task is:
+      <code>apitooling.apimigration</code>. To be used, the jar
+      file <code>apitooling-ant.jar</code> has to be on the Ant
+      classpath.
+    </p>
+    <pre class="c3">
+ <b><span class="c2"><apitooling.apimigration
+	candidate=<span class="c1">"..."</span>
+	usescan=<span class="c1">"..."</span>
+	scopepattern=<span class="c1">"..."</span>
+	referencepattern=<span class="c1">"..."</span>
+	excludelist=<span class="c1">"..."</span>
+	includelist=<span class="c1">"..."</span>
+	report=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+ /></span></b>
+</pre>
+    <h3>
+      Parameters
+    </h3>
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+
+        <td valign="top">
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+        <td align="center" valign="top">
+          <b>Required</b>
+
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          candidate
+        </td>
+        <td valign="top">
+          This attribute specifies the product you want to use as
+          the migration candidate.
+          <p>
+            It can be a .zip, .jar, .tgz, .tar.gz file, or a
+            directory that corresponds to the Eclipse installation
+            folder. This is the directory is which you can find the
+            Eclipse executable.
+          </p>
+
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          usescan
+        </td>
+        <td valign="top">
+
+          This attribute specifies the product use scan you want to
+          compare to the migration candidate.<br />
+          <br />
+          The usescan is specified using an absolute path to the
+          root of the use scan.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+
+        <td valign="top">
+          scopepattern
+        </td>
+        <td valign="top">
+          This attribute specifies the regular expression pattern
+          used to build the scope of elements to search for
+          references from in the product location.<br />
+          <br />
+          The pattern must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          referencepattern
+        </td>
+        <td valign="top">
+          Set the regular expression pattern used to build the
+          scope of elements to search for references to in the
+          product location.<br />
+
+          <br />
+          The pattern must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+
+        <td valign="top">
+          excludelist
+        </td>
+        <td valign="top">
+          Set the exclude list location.<br />
+          <br />
+          The exclude list location specifies a text file listing
+          bundles to be excluded from the analysis. By default all
+          bundles in the profile are analyzed. The include and
+          exclude list attributes can be used to selectively
+          include and exclude bundles. The include list seeds the
+          set of bundles to be analyzed (when omitted, all bundles
+          are included), and the exclude list is then applied. Each
+          line of the file specifies one of:
+          <ul>
+            <li>a specific bundle name
+            </li>
+
+            <li>a regular expression to match against bundle names
+            (lines being with "R:")
+            </li>
+            <li>a comment (lines being with '#')
+            </li>
+          </ul><br />
+          The location is specified using an absolute path.<br />
+          Following is an example exclude list:
+          <pre>
+# EXCLUDED BUNDLES
+R:org\.eclipse\..*\.doc\..*
+...
 </pre>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-	<td valign="top">candidate</td>
-	<td valign="top">This attribute specifies the product you want to use as the migration candidate. 
-	 	<p>
-	 		It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to 
-	 		the Eclipse installation folder. This is the directory is which you can find the 
-			Eclipse executable.
-	 	</p>
-	</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">usescan</td>
-	<td valign="top">This attribute specifies the product use scan you want to compare to the migration candidate. 
-		<br><br>
-		The usescan is specified using an absolute path to the root of the use scan.
-	</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">scopepattern</td>
-	<td valign="top">
-		This attribute specifies the regular expression pattern used to build the scope of elements to search for 
-	 	references from in the product location.
-	 	<br><br>
-	 	The pattern must be a well-formatted regular expression as
-	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">referencepattern</td>
-	<td valign="top">
-		Set the regular expression pattern used to build the scope of elements to search for 
-	 	references to in the product location.
-	 	<br><br>
-	 	The pattern must be a well-formatted regular expression as
-	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
-	 	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">report</td>
-	<td valign="top">Set the output location where the reports will be generated.
-		<br><br>
-		Once the task is completed, reports are available in this directory using a hierarchical structure. A sub-folder is created
-		for each component that has another bundle that references it. Each sub-folder contains a file called "[bundlename].xml". Within
-		this folder is another sub-folder (named "[referencing bundle name].xml") for each bundle that references the bundle of the containing folder. 
-		Inside the referencing bundle folder is one of three sub-folders (API, PRIVATE or OTHER) which contain type, method or field references of that kind.
-		<br><br>
-		Two other special files are written into the report directory, which are "not_searched.xml" and "no_apidescription.xml" and they contain
-		information about bundles from the baseline that were not search for usage information and those that did not have an .api_description files in them, respectively.
-		<br><br>
-		The location is specified using an absolute path.
-		<br><br>
-		For example:
-<pre>
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          includelist
+        </td>
+        <td valign="top">
+          Set the include list location.<br />
+
+          <br />
+          The include list location specifies a text file listing
+          bundles to be included in the analysis. By default all
+          bundles in the profile are analyzed. The include and
+          exclude list attributes can be used to selectively
+          include and exclude bundles. The include list seeds the
+          set of bundles to be analyzed (when omitted, all bundles
+          are included), and the exclude list is then applied. Each
+          line of the file specifies one of:
+          <ul>
+            <li>a specific bundle name
+            </li>
+            <li>a regular expression to match against bundle names
+            (lines being with "R:")
+            </li>
+            <li>a comment (lines being with '#')
+            </li>
+          </ul><br />
+          The location is specified using an absolute path.<br />
+
+          Following is an example include list:
+          <pre>
+# INCLUDED BUNDLES
+R:org\.eclipse\..*
+...
+</pre>
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+
+          report
+        </td>
+        <td valign="top">
+          Set the output location where the reports will be
+          generated.<br />
+          <br />
+          Once the task is completed, reports are available in this
+          directory using a hierarchical structure. A sub-folder is
+          created for each component that has another bundle that
+          references it. Each sub-folder contains a file called
+          "[bundlename].xml". Within this folder is another
+          sub-folder (named "[referencing bundle name].xml") for
+          each bundle that references the bundle of the containing
+          folder. Inside the referencing bundle folder is one of
+          three sub-folders (API, PRIVATE or OTHER) which contain
+          type, method or field references of that kind.<br />
+          <br />
+          Two other special files are written into the report
+          directory, which are "not_searched.xml" and
+          "no_apidescription.xml" and they contain information
+          about bundles from the baseline that were not search for
+          usage information and those that did not have an
+          .api_description files in them, respectively.<br />
+
+          <br />
+          The location is specified using an absolute path.<br />
+          <br />
+          For example:
+          <pre>
   root
    |
    +-- "not_searched.xml"
    +-- "no_apidescription.xml"
    +-- bundle name with usage
-   		|
-   		+--referencing bundle name
-   			|
-   			+-- [API or PRIVATE or OTHER]
-   				|
-   				+--[type_ or method_ or field_]references.xml
+     |
+     +--referencing bundle name
+      |
+      +-- [API or PRIVATE or OTHER]
+       |
+       +--[type_ or method_ or field_]references.xml
 </pre>
-		</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">debug</td>
-	<td valign="top">Set the debug value.
-		<br><br>The possible values are: <code>true</code>, <code>false</code>
-		<br>Default is <code>false</code>.</td>
-	<td align="center" valign="top">No</td>
-</tr>
-</table>
-
-<h3>Examples</h3>
-<pre>
-	<b><font color="#0000ff"><apitooling.apimigration
-		candidate=<font color="#008000">"/eclipse/sdk3.5"</font>
-		usescan=<font color="#008000">"/eclipse/scans/sdk3.4"</font>
-		scopepattern=<font color="#008000">".*"</font>
-		referencepattern=<font color="#008000">"org\.eclipse.*"</font>
-		report=<font color="#008000">"/eclipse/apimigration/xml"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+        </td>
+        <td align="center" valign="top">
+
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+    <pre>
+ <b><span class="c2"><apitooling.apimigration
+  candidate=<span class="c1">"/eclipse/sdk3.5"</span>
+  usescan=<span class="c1">"/eclipse/scans/sdk3.4"</span>
+
+  scopepattern=<span class="c1">".*"</span>
+  referencepattern=<span class="c1">"org\.eclipse.*"</span>
+  excludelist=<span class=
+"c1">"D:\exclude_list_external.txt"</span>
+  report=<span class="c1">"/eclipse/apimigration/xml"</span>
+  debug=<span class="c1">"true"</span>
+
+ /></span></b>
 </pre>
-<p>This will run the task creating <code>*.xml</code> files inside the folder <code>/eclipse/apimigration/xml</code>.
-The task will re-resolve all references in the <code>usescan</code> location - defined by the regular expression <code>.*</code> - against 
-the candidate product whose identifier begins with org.eclipse (defined by the <code>org\.eclipse.*</code> regular expression).</p>
-<p>If debug is enabled, some debug tracing will show up in the Ant console.</p>
-
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-<br><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
-<br><a href="apimigration-reportconversion-ant-task.htm">API Use Migration Report Conversion Ant Task</a>
-</p>
-</body>
+    <p>
+      This will run the task creating <code>*.xml</code> files
+      inside the folder <code>/eclipse/apimigration/xml</code>. The
+      task will re-resolve all references in the
+      <code>usescan</code> location - defined by the regular
+      expression <code>.*</code> - against the candidate product
+      whose identifier begins with org.eclipse (defined by the
+      <code>org\.eclipse.*</code> regular expression). It will use
+      the exclude list file located in
+      <code>D:\exclude_list_external.txt</code> to reduce the
+      number of problems to report.
+    </p>
+
+    <p>
+      If debug is enabled, some debug tracing will show up in the
+      Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a><br />
+      <a href="apifreeze-reportconversion-ant-task.htm">API Freeze
+      Report Conversion Ant Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a><br />
+      <a href="apimigration-reportconversion-ant-task.htm">API Use
+      Migration Report Conversion Ant Task</a>
+
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-reportconversion-ant-task.htm
old mode 100644
new mode 100755
index 1cecb31..e612ffa
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-reportconversion-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apimigration-reportconversion-ant-task.htm
@@ -1,122 +1,235 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Use Migration Report Conversion Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Use Migration Report Conversion Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task converts the XML report created by the <code>apitooling.apimigration</code> Ant task into HTML files.</p>
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.apimigration_reportconversion</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<div style="text-align: left;">
-<pre>
-	<b><font color="#0000ff"><apitooling.apimigration_reportconversion
-		xmlfiles=<font color="#008000">"..."</font>
-		htmlfiles=<font color="#008000">"..."</font>
-		xsltfile=<font color="#008000">"..."</font>
-		filterpatterns=<font color="#008000">"..."</font>
-		tofilterpatterns=<font color="#008000">"..."</font>
-		debug=<font color="#008000">"..."</font>
-	/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Use Migration Report Conversion Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Use Migration Report Conversion Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task converts the XML report created by the
+      <code>apitooling.apimigration</code> Ant task into HTML
+      files.
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.apimigration_reportconversion</code>. To be
+      used, the jar file <code>apitooling-ant.jar</code> has to be
+      on the Ant classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class="c2"><apitooling.apimigration_reportconversion
+	xmlfiles=<span class="c1">"..."</span>
+	htmlfiles=<span class="c1">"..."</span>
+	xsltfile=<span class="c1">"..."</span>
+	filterpatterns=<span class="c1">"..."</span>
+	tofilterpatterns=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+ /></span></b>
 </pre>
-</div>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-	<td valign="top">xmlfiles</td>
-	<td valign="top">This attribute specifies the location of the xml files to convert.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">htmlfiles</td>
-	<td valign="top">This attribute specifies the location of the html files to generate.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">xsltfile</td>
-	<td valign="top">This attribute specifies the location of an XSLT file to be used to generate the reference details pages in a desired ordering.
-	<br><br>
-	A default XSLT file is available in the <code>apitooling-ant.jar</code> JAR file.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">filterpatterns</td>
-	<td valign="top">
-		This attribute specifies a comma separated listing of regular expression patterns used to prune 
-		references <em>from</em> matching name patterns from the final report.
-	 	<br><br>
-	 	The patterns must be a well-formatted regular expression as
-	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">tofilterpatterns</td>
-	<td valign="top">
-		This attribute specifies a comma separated listing of regular expression patterns used to prune 
-		references <em>to</em> matching name patterns from the final report.
-	 	<br><br>
-	 	The pattern must be a well-formatted regular expression as
-	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">debug</td>
-	<td valign="top">Set the debug value.
-	<br><br>The possible values are: <code>true</code>, <code>false</code>
-	<br>Default is <code>false</code>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-	<b><font color="#0000ff"><apitooling.apimigration_reportconversion
-		xmlfiles=<font color="#008000">"/eclipse/apimigration-both/XML"</font>
-		htmlfiles=<font color="#008000">"/eclipse/apimigration-both/HTML"</font>
-		xsltfile=<font color="#008000">"/eclipse/references.xsl"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+        <td align="center" valign="top">
+          <b>Required</b>
+
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          xmlfiles
+        </td>
+        <td valign="top">
+          This attribute specifies the location of the xml files to
+          convert.<br />
+          <br />
+
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          htmlfiles
+        </td>
+
+        <td valign="top">
+          This attribute specifies the location of the html files
+          to generate.<br />
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+
+      <tr>
+        <td valign="top">
+          xsltfile
+        </td>
+        <td valign="top">
+          This attribute specifies the location of an XSLT file to
+          be used to generate the reference details pages in a
+          desired ordering.<br />
+          <br />
+          A default XSLT file is available in the
+          <code>apitooling-ant.jar</code> JAR file.<br />
+
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          filterpatterns
+        </td>
+
+        <td valign="top">
+          This attribute specifies a comma separated listing of
+          regular expression patterns used to prune references
+          <em>from</em> matching name patterns from the final
+          report.<br />
+          <br />
+          The patterns must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          tofilterpatterns
+        </td>
+        <td valign="top">
+          This attribute specifies a comma separated listing of
+          regular expression patterns used to prune references
+          <em>to</em> matching name patterns from the final
+          report.<br />
+
+          <br />
+          The pattern must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+
+    <pre>
+ <b><span class="c2"><apitooling.apimigration_reportconversion
+  xmlfiles=<span class="c1">"/eclipse/apimigration-both/XML"</span>
+  htmlfiles=<span class=
+"c1">"/eclipse/apimigration-both/HTML"</span>
+  xsltfile=<span class="c1">"/eclipse/references.xsl"</span>
+  debug=<span class="c1">"true"</span>
+
+ /></span></b>
 </pre>
-<p>This will run the task creating <code>*.html</code> files inside the folder <code>/eclipse/apimigration-both/HTML</code> corresponding 
-to the folder structure of the XML file location</p>
-<p>If debug is enabled, some debug tracing will show up in the Ant console.</p>
-
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="analysis-ant-task.htm">Analysis Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
-<br><a href="apimigration-ant-task.htm">API Use Migration Ant Task</a>
-<br><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-</p>
-</body>
+    <p>
+      This will run the task creating <code>*.html</code> files
+      inside the folder
+      <code>/eclipse/apimigration-both/HTML</code> corresponding to
+      the folder structure of the XML file location
+    </p>
+    <p>
+
+      If debug is enabled, some debug tracing will show up in the
+      Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a><br />
+      <a href="apimigration-ant-task.htm">API Use Migration Ant
+      Task</a><br />
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-ant-task.htm
index a1eef2b..353358e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-ant-task.htm
@@ -1,61 +1,67 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<meta http-equiv="Content-Style-Type" content="text/css"/>
+<link rel="stylesheet" href="../../../apache_style.css" type="text/css"/>
 <title>API Use Ant Task</title>
 <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 <h1> API Use Ant Task </h1>
 <h2>Purpose</h2>
-<p>This task runs a complete search of a given baseline to determine a producer-centric report of API usage.</p>
-<p>The analysis does not include  bundles that are not API Tools enabled.</p>
+<p>This task runs a complete search of a given baseline to create a report of API usage.</p>
+<p>The analysis does not include bundles that are not API Tools enabled.</p>
 
 <h2>Usage</h2>
 <h3>Description</h3>
 <p>The name of the Ant task is: <code>apitooling.apiuse</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
 classpath.</p>
-<pre>
-	<b><font color="#0000ff"><apitooling.apiuse
-		location=<font color="#008000">"..."</font>
-		scopepattern=<font color="#008000">"..."</font>
-		referencepattern=<font color="#008000">"..."</font>
-		report=<font color="#008000">"..."</font>
-		considerinternal=<font color="#008000">"..."</font>
-		considerapi=<font color="#008000">"..."</font>
-		considerillegaluse=<font color="#008000">"..."</font>
-		apipatterns=<font color="#008000">"..."</font>
-		internalpatterns=<font color="#008000">"..."</font>
-		archivepatterns=<font color="#008000">"..."</font>
-		debug=<font color="#008000">"..."</font>
-	/></font></b>
+<pre class="c3">
+<b><font color="#0000ff"><apitooling.apiuse
+	location=<font color="#008000">"..."</font>
+	scopepattern=<font color="#008000">"..."</font>
+	referencepattern=<font color="#008000">"..."</font>
+	report=<font color="#008000">"..."</font>
+	considerinternal=<font color="#008000">"..."</font>
+	considerapi=<font color="#008000">"..."</font>
+	considerillegaluse=<font color="#008000">"..."</font>
+	apipatterns=<font color="#008000">"..."</font>
+	internalpatterns=<font color="#008000">"..."</font>
+	archivepatterns=<font color="#008000">"..."</font>
+	excludelist=<font color="#008000">"..."</font>
+	includelist=<font color="#008000">"..."</font>	
+	debug=<font color="#008000">"..."</font>
+/></font></b>
 </pre>
 <h3>Parameters</h3>
 <table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
+<tr>
+  <td valign="top"><b>Attribute</b></td>
+  <td valign="top"><b>Description</b></td>
+  <td align="center" valign="top"><b>Required</b></td>
+</tr>
 <tr>
 	<td valign="top">location</td>
 	<td valign="top">
 		This attribute specifies the location of the current product you want to search for API usage.
-		<br><br>
-		It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to a collection of bundles.
-		<br><br>
+		<br/><br/>
+		It can be a .zip, .jar, .tgz, .tar.gz file, or a directory containing a product or a collection of bundles.
+		<br/><br/>
 		The location is specified using an absolute path.</td>
 	<td align="center" valign="top">Yes</td>
 </tr>
 <tr>
 	<td valign="top">scopepattern</td>
 	<td valign="top">
-		This attribute specifies the regular expression pattern used to build the scope of elements to search for 
-	 	references from in the product location.
-	 	<br><br>
+		This attribute specifies a regular expression pattern used to select what bundles in the location will be searched.
+		
+		<br/><br/>
+		For example, the following would only scan for API usage in Eclipse bundles:
+		<pre>org.eclipse.*</pre>
+		
 	 	The pattern must be a well-formatted regular expression as
 	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
 	</td>
@@ -64,9 +70,12 @@ classpath.</p>
 <tr>
 	<td valign="top">referencepattern</td>
 	<td valign="top">
-		Set the regular expression pattern used to build the scope of elements to search for 
-	 	references to in the product location.
-	 	<br><br>
+		This attribute specifies a regular expression pattern used to filter the search results.  Only API usage that references
+		a bundle matching the filter will be reported.
+		<br/><br/>
+		For example, the following would only report usage that references code in JDT:
+		<pre>org.eclipse.jdt.*</pre> 
+		
 	 	The pattern must be a well-formatted regular expression as
 	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
 	 	</td>
@@ -75,23 +84,25 @@ classpath.</p>
 <tr>
 	<td valign="top">report</td>
 	<td valign="top">Set the output location where the reports will be generated.
-		<br><br>
+		<br/><br/>
 		Once the task is completed, reports are available in this directory using a hierarchical structure. A sub-folder is created
 		for each component that has another bundle that references it. Each sub-folder contains a file called "[bundlename].xml". Within
 		this folder is another sub-folder (named "[referencing bundle name].xml") for each bundle that references the bundle of the containing folder. 
 		Inside the referencing bundle folder is one of three sub-folders (API, PRIVATE or OTHER) which contain type, method or field references of that kind.
-		<br><br>
-		Two other special files are written into the report directory, which are "not_searched.xml" and "no_apidescription.xml" and they contain
-		information about bundles from the baseline that were not search for usage information and those that did not have an .api_description files in them, respectively.
-		<br><br>
+		<br/><br/>
+		Three other special files are written into the report directory, which are "counts.xml", "not_searched.xml" and "no_apidescription.xml" and they contain
+		information about the number of references found, bundles from the baseline that were not search for usage information and those that did not have an 
+		.api_description files in them, respectively.
+		<br/><br/>
 		The location is specified using an absolute path.
-		<br><br>
+		<br/><br/>
 		For example:
 <pre>
   root
    |
    +-- "not_searched.xml"
    +-- "no_apidescription.xml"
+   +-- "counts.xml"
    +-- bundle name with usage
    		|
    		+--referencing bundle name
@@ -106,46 +117,114 @@ classpath.</p>
 <tr>
 	<td valign="top">considerinternal</td>
 	<td valign="top">If internal references should be considered during the search.
-		<br><br>Default is <code>false</code>.</td>
+		<br/><br/>Default is <code>false</code>.</td>
 	<td align="center" valign="top">No</td>
 </tr>
 <tr>
 	<td valign="top">considerapi</td>
 	<td valign="top">If API references should be considered during the search.
-		<br><br>Default is <code>false</code>.</td>
+		<br/><br/>Default is <code>false</code>.</td>
 	<td align="center" valign="top">No</td>
 </tr>
 <tr>
 	<td valign="top">considerillegaluse</td>
 	<td valign="top">If illegal API use references should be considered during the search.
-		<br><br>Default is <code>false</code>.</td>
+		<br/><br/>Default is <code>false</code>.</td>
 	<td align="center" valign="top">No</td>
 </tr>
 <tr>
 	<td valign="top">apipatterns</td>
 	<td valign="top">A comma separated list of package name patterns (regular expressions) to consider as API packages.
-		<br><br>By default API descriptions are used in the scanned bundles, but this can be used to
+		<br/><br/>By default API descriptions are used in the scanned bundles, but this can be used to
 		override or add API packages.</td>
 	<td align="center" valign="top">No</td>
 </tr>
 <tr>
 	<td valign="top">internalpatterns</td>
 	<td valign="top">A comma separated list of package name patterns (regular expressions) to consider as private packages.
-		<br><br>By default API descriptions are used in the scanned bundles, but this can be used to
+		<br/><br/>By default API descriptions are used in the scanned bundles, but this can be used to
 		override or add private packages.</td>
 	<td align="center" valign="top">No</td>
 </tr>
 <tr>
 	<td valign="top">archivepatterns</td>
 	<td valign="top">A comma separated list of archive identifiers to ignore during the scan.
-		<br><br>An archive identifier is of the form: <code>[bundle id]:[path to archive]</code>.</td>
+		<br/><br/>An archive identifier is of the form: <code>[bundle id]:[path to archive]</code>.</td>
+	<td align="center" valign="top">No</td>
+</tr>
+<tr>
+	<td valign="top">excludelist</td>
+	<td valign="top">
+		Set the exclude list location. 
+<br/><br/>The exclude list location specifies a text file listing bundles to be excluded from the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example exclude list:
+<pre>
+# EXCLUDED BUNDLES
+R:org\.eclipse\..*\.doc\..*
+...
+</pre></td>
 	<td align="center" valign="top">No</td>
 </tr>
 <tr>
+	<td valign="top">includelist</td>
+	<td valign="top">
+		Set the include list location. 
+<br/><br/>The include list location specifies a text file listing bundles to be included in the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example include list:
+<pre>
+# INCLUDED BUNDLES
+R:org\.eclipse\..*
+...
+</pre>
+</td>
+	<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">filters</td>
+<td valign="top">Set the root directory of API filters to use during the use scan.
+<br/><br/>
+The argument is the root directory of the .api_filters files that should be used to filter references.
+<br/><br/>
+The .api_filters files specify specific problems to ignore during api analysis.  During the use scan, the problem filters
+will be converted to a list of references that will be filtered from the use scan results.
+<br/>
+<br/>The root is specified using an absolute path. 
+<br/>The root needs to contain the following structure:
+<pre>
+ root
+  |
+  +-- component name (i.e. org.eclipse.jface)
+         |
+         +--- .api_filters
+</pre>
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
 	<td valign="top">debug</td>
 	<td valign="top">Set the debug value.
-		<br><br>The possible values are: <code>true</code>, <code>false</code>
-		<br>Default is <code>false</code>.</td>
+		<br/><br/>The possible values are: <code>true</code>, <code>false</code>
+		<br/>Default is <code>false</code>.</td>
 	<td align="center" valign="top">No</td>
 </tr>
 </table>
@@ -161,23 +240,25 @@ classpath.</p>
 		considerapi=<font color="#008000">"true"</font>
 		considerillegaluse=<font color="#008000">"true"</font>
 		archivepatterns=<font color="#008000">"org.eclipse.test.bundle:/libs/contributed.jar"</font>
+		excludelist=<font color="#008000">"D:\exclude_list_external.txt"</font>
 		debug=<font color="#008000">"true"</font>
 	/></font></b>
 </pre>
 <p>This will run the task creating <code>*.xml</code> files inside the folder <code>/eclipse/apiuse-both/XML</code>.
 The task will search all bundles in the product location - defined by the regular expression <code>.*</code> - searching 
-for all references to any bundles whose identifier begins with org.eclipse (defined by the <code>org\.eclipse.*</code> regular expression).</p>
+for all references to any bundles whose identifier begins with org.eclipse (defined by the <code>org\.eclipse.*</code> regular expression).
+It will use the exclude list file located in <code>D:\exclude_list_external.txt</code> to reduce the number of problems to report.</p>
 <p>While scanning, any class files found in the /libs/contributed.jar archive inside org.eclipse.test.bundle will be ignored.</p>
 <p>If debug is enabled, some debug tracing will show up in the Ant console.</p>
 
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"/></p>
 <p><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-<br><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
+<br/><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
+<br/><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
+<br/><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
+<br/><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
+<br/><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
+<br/><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
 </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-reportconversion-ant-task.htm
index af71bd7..dbe77bf 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-reportconversion-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiuse-reportconversion-ant-task.htm
@@ -1,120 +1,234 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Use Report Conversion Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Use Report Conversion Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task converts the XML report created by the <code>apitooling.apiuse</code> Ant task into HTML files.</p>
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.apiuse_reportconversion</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<div style="text-align: left;">
-<pre>
-	<b><font color="#0000ff"><apitooling.apiuse_reportconversion
-		xmlfiles=<font color="#008000">"..."</font>
-		htmlfiles=<font color="#008000">"..."</font>
-		xsltfile=<font color="#008000">"..."</font>
-		filterpatterns=<font color="#008000">"..."</font>
-		tofilterpatterns=<font color="#008000">"..."</font>
-		debug=<font color="#008000">"..."</font>
-	/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Use Report Conversion Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Use Report Conversion Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task converts the XML report created by the
+      <code>apitooling.apiuse</code> Ant task into HTML files. The
+      HTML report will organize the references by the bundle that
+      produced them (i.e. the bundle that contains the api/type
+      being referenced).
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.apiuse_reportconversion</code>. To be used,
+      the jar file <code>apitooling-ant.jar</code> has to be on the
+      Ant classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class="c2"><apitooling.apiuse_reportconversion
+	xmlfiles=<span class="c1">"..."</span>
+	htmlfiles=<span class="c1">"..."</span>
+	xsltfile=<span class="c1">"..."</span>
+	filterpatterns=<span class="c1">"..."</span>
+	tofilterpatterns=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+ /></span></b>
 </pre>
-</div>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-	<td valign="top">xmlfiles</td>
-	<td valign="top">This attribute specifies the location of the xml files to convert.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">htmlfiles</td>
-	<td valign="top">This attribute specifies the location of the html files to generate.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">xsltfile</td>
-	<td valign="top">This attribute specifies the location of an XSLT file to be used to generate the reference details pages in a desired ordering.
-	<br><br>
-	A default XSLT file is available in the <code>apitooling-ant.jar</code> JAR file.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">filterpatterns</td>
-	<td valign="top">
-		This attribute specifies a comma separated listing of regular expression patterns used to prune 
-		references <em>from</em> matching name patterns from the final report.
-	 	<br><br>
-	 	The pattern must be a well-formatted regular expression as
-	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">tofilterpatterns</td>
-	<td valign="top">
-		This attribute specifies a comma separated listing of regular expression patterns used to prune 
-		references <em>to</em> matching name patterns from the final report.
-	 	<br><br>
-	 	The pattern must be a well-formatted regular expression as
-	 	defined <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">here</a>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">debug</td>
-	<td valign="top">Set the debug value.
-	<br><br>The possible values are: <code>true</code>, <code>false</code>
-	<br>Default is <code>false</code>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-	<b><font color="#0000ff"><apitooling.apiuse_reportconversion
-		xmlfiles=<font color="#008000">"/eclipse/apiuse-both/XML"</font>
-		htmlfiles=<font color="#008000">"/eclipse/apiuse-both/HTML"</font>
-		xsltfile=<font color="#008000">"/eclipse/references.xsl"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+        <td align="center" valign="top">
+          <b>Required</b>
+
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          xmlfiles
+        </td>
+        <td valign="top">
+          This attribute specifies the location of the xml files to
+          convert.<br />
+          <br />
+
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          htmlfiles
+        </td>
+
+        <td valign="top">
+          This attribute specifies the location of the html files
+          to generate.<br />
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+
+      <tr>
+        <td valign="top">
+          xsltfile
+        </td>
+        <td valign="top">
+          This attribute specifies the location of an XSLT file to
+          be used to generate the reference details pages in a
+          desired ordering.<br />
+          <br />
+          A default XSLT file is available in the
+          <code>apitooling-ant.jar</code> JAR file.<br />
+
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          filterpatterns
+        </td>
+
+        <td valign="top">
+          This attribute specifies a comma separated listing of
+          regular expression patterns used to prune references
+          <em>from</em> matching name patterns from the final
+          report.<br />
+          <br />
+          The pattern must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          tofilterpatterns
+        </td>
+        <td valign="top">
+          This attribute specifies a comma separated listing of
+          regular expression patterns used to prune references
+          <em>to</em> matching name patterns from the final
+          report.<br />
+
+          <br />
+          The pattern must be a well-formatted regular expression
+          as defined <a href=
+          "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">
+          here</a>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+
+    <pre>
+ <b><span class="c2"><apitooling.apiuse_reportconversion
+  xmlfiles=<span class="c1">"/eclipse/apiuse-both/XML"</span>
+  htmlfiles=<span class="c1">"/eclipse/apiuse-both/HTML"</span>
+  xsltfile=<span class="c1">"/eclipse/references.xsl"</span>
+  debug=<span class="c1">"true"</span>
+
+ /></span></b>
 </pre>
-<p>This will run the task creating <code>*.html</code> files inside the folder <code>/eclipse/apiuse-both/HTML</code> corresponding 
-to the folder structure of the XML file location</p>
-<p>If debug is enabled, some debug tracing will show up in the Ant console.</p>
-
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="analysis-ant-task.htm">Analysis Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-</p>
-</body>
+    <p>
+      This will run the task creating <code>*.html</code> files
+      inside the folder <code>/eclipse/apiuse-both/HTML</code>
+      corresponding to the folder structure of the XML file
+      location
+    </p>
+    <p>
+
+      If debug is enabled, some debug tracing will show up in the
+      Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="apiconsumeruse-reportconversion-ant-task.htm">API
+      Consumer Use Report Conversion Ant Task</a><br />
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a>
+
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiusescan-problems-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiusescan-problems-ant-task.htm
new file mode 100644
index 0000000..5a5f6e1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiusescan-problems-ant-task.htm
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<meta http-equiv="Content-Style-Type" content="text/css"/>
+<link rel="stylesheet" href="../../../apache_style.css" type="text/css"/>
+<title>API Tools Analysis Ant Task</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+</head>
+<body>
+<h1>API Use Scan Problems Ant Task</h1>
+<h2>Purpose</h2>
+<p>This task resolves the API Use Scans in a profile relative to a baseline. It reports the references to the types, methods and fields which are now missing from the profile. </p>
+<h2>Usage</h2>
+<h3>Description</h3>
+<p>The name of the Ant task is: <code>apitooling.apiusescanproblems</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
+classpath.</p>
+<div style="text-align: left;">
+<pre style="margin-left: 40px">
+<b><font color="#0000ff"><apitooling.apiusescanproblems
+	profile=<font color="#008000">"..."</font>
+	report=<font color="#008000">"..."</font>
+	apiusescans=<font color="#008000">"..."</font>
+	excludelist=<font color="#008000">"..."</font>
+	includelist=<font color="#008000">"..."</font>
+	preferences=<font color="#008000">"..."</font>
+	debug=<font color="#008000">"..."</font>
+/></font></b>
+</pre>
+</div>
+<h3>Parameters</h3>
+<table border="1" cellpadding="2" cellspacing="0">
+  <tr>
+    <td valign="top"><b>Attribute</b></td>
+    <td valign="top"><b>Description</b></td>
+    <td align="center" valign="top"><b>Required</b></td>
+  </tr>
+<tr>
+<td valign="top">profile</td>
+<td valign="top">This attribute specifies the location of the current product or profile that you want to resolved the API Use Scans against.
+<br/><br/>
+It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
+directory is which you can find the Eclipse executable.
+<br/><br/>The location is specified using an absolute path.
+</td>
+<td align="center" valign="top">Yes</td>
+</tr>
+<tr>
+<td valign="top">report</td>
+<td valign="top">Set the output location where the reports will be generated.
+<br/><br/>
+Once the task is completed, reports are available in this directory. A sub-folder is created
+for each component that has problems to be reported. Each sub-folder contains a file called "report.xml".
+<br/><br/>The location is specified using an absolute path. 
+</td>
+<td align="center" valign="top">Yes</td>
+</tr>
+<tr>
+<td valign="top">apiusescans</td>
+<td valign="top">This attribute specifies the comma-separated list of the locations of the API Use Scans that you want to check against the profile.
+<br/><br/>
+It can be a .zip file or a directory that corresponds to the API Use Scan report. This is the directory is which you can find the XML folder in the Use Scan.
+</td>
+<td align="center" valign="top">Yes</td>
+</tr>
+<tr>
+<td valign="top">excludelist</td>
+<td valign="top">Set the exclude list location. 
+<br/><br/>The exclude list location specifies a text file listing bundles to be excluded from the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example exclude list:
+<pre>
+ # DOC BUNDLES
+ org.eclipse.jdt.doc.isv
+ org.eclipse.jdt.doc.user
+ org.eclipse.pde.doc.user
+ org.eclipse.platform.doc.isv
+ org.eclipse.platform.doc.user
+ # NON-ECLIPSE BUNDLES
+ com.ibm.icu
+ com.jcraft.jsch
+ R:javax\..*
+ ...
+</pre>
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">includelist</td>
+<td valign="top">Set the include list location. 
+<br/><br/>The include list location specifies a text file listing bundles to be included in the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example include list:
+<pre>
+ # DOC BUNDLES
+ org.eclipse.jdt.doc.isv
+ org.eclipse.jdt.doc.user
+ org.eclipse.pde.doc.user
+ R:org.eclipse.platform.doc.*
+ # NON-ECLIPSE BUNDLES
+ com.ibm.icu
+ com.jcraft.jsch
+ R:javax\..*
+ ...
+</pre>
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">preferences</td>
+<td valign="top">Set the preferences for the task. 
+<br/><br/>
+The preferences are used to configure problem severities. Problem severities have three possible values: Ignore, Warning, or Error. The set of problems detected is defined by corresponding problem preference keys in API tools.
+<br/>The location is specified using an absolute path. If the given location doesn't exist, the preferences won't be set.
+<br/>
+Lines starting with '#' are ignored. The format of the preferences file looks like this:
+<pre>
+ #Thu Nov 20 17:35:06 EST 2008
+ API_USE_SCAN_TYPE_SEVERITY=Error
+ API_USE_SCAN_METHOD_SEVERITY=Error
+ API_USE_SCAN_FIELD_SEVERITY=Error
+</pre>
+The keys can be found in org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes.
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">debug</td>
+<td valign="top">Set the debug value.
+<br/><br/>The possible values are: <code>true</code>, <code>false</code>
+<br/>Default is <code>false</code>.
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+</table>
+
+<h3>Examples</h3>
+
+<pre>
+	<b><font color="#0000ff"><apitooling.apiusescanproblems
+		profile=<font color="#008000">"D:\eclipse\3.7\eclipse"</font>
+		report=<font color="#008000">"D:\reports\xml"</font>
+		apiusescans=<font color="#008000">"D:\APIUseScan\ProductOne,D:\APIUseScan\ProductTwo"</font>
+		excludelist=<font color="#008000">"D:\exclude_list_external.txt"</font>
+		preferences=<font color="#008000">"D:\tests_api\org.eclipse.pde.api.tools.prefs"</font>
+		debug=<font color="#008000">"true"</font>
+	/></font></b>
+</pre>
+<p>This will run the task creating <code>report.xml</code> files inside the folder <code>D:\reports\xml</code>. The types, methods and fields from the use scans
+will be resolved in the profile at <code>D:\eclipse\3.7\eclipse</code> and the missing ones will be reported.
+It will use the exclude list from the file <code>D:\exclude_list_external.txt</code> to reduce the number of bundles for which problems to report.</p>
+<p>Problem severities will be generated as specified by <code>D:\tests_api\org.eclipse.pde.api.tools.prefs</code>.</p>
+<p>Since debug is enabled, some debug tracing will show up in the Ant console.</p>
+
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"/></p>
+<p><a href="analysis-ant-task.htm">API Analysis Ant Task</a>
+<br/><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
+<br/><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
+<br/><a href="apiuse-ant-task.htm">API Use Ant Task</a>
+<br/><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
+<br/><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
+<br/><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
+<br/><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
+<br/><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
+</p>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiusescan-problems-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiusescan-problems-reportconversion-ant-task.htm
new file mode 100644
index 0000000..1d2a7c6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/apiusescan-problems-reportconversion-ant-task.htm
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Tools Analysis Report Conversion Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Use Scan Problems Report Conversion Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task converts XML reports created by the
+      <code>apitooling.apiusescanproblems</code> Ant task into HTML
+      files.
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.apiusescanproblem_reportconversion</code>.
+      To be used, the jar file <code>apitooling-ant.jar</code> has
+      to be on the Ant classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class=
+"c2"><apitooling.apiusescanproblem_reportconversion
+	xmlfiles=<span class="c1">"..."</span>
+	htmlfiles=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+/></span></b>
+</pre>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+
+        <td align="center" valign="top">
+          <b>Required</b>
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          xmlfiles
+        </td>
+        <td valign="top">
+
+          Set the location where the xml reports are
+          retrieved.<br />
+          <br />
+          The location is set using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+
+        <td valign="top">
+          htmlfiles
+        </td>
+        <td valign="top">
+          Set the location where the html reports are
+          generated.<br />
+          <br />
+          If not set, the html files are created in the same folder
+          as the xml files.<br />
+          <br />
+
+          The location is set using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          debug
+        </td>
+
+        <td valign="top">
+          Set the debug value.<br />
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+          Default is <code>false</code>.
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+    <pre>
+ <b><span class="c2"><apitooling.analysis_reportconversion
+  xmlfiles=<span class="c1">"D:\reports\xml"</span>
+
+  htmlfiles=<span class="c1">"D:\reports\html"</span>
+  debug=<span class="c1">"true"</span>
+ /></span></b>
+</pre>
+    <p>
+      This will create an <code>index.html</code> inside the folder
+      <code>D:\reports\html</code>. A report for each bundle will
+      be created inside a sub-folder of
+      <code>D:\reports\html</code>. Each sub-folder will contain a
+      <code>report.html</code>.
+    </p>
+
+    <p>
+      Since debug is enabled, some debug tracing will show up in
+      the Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="apiusescan-problems-ant-task.htm">API Use Scan
+      Problems Ant Task</a><br />
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="apifreeze-reportconversion-ant-task.htm">API Freeze
+      Report Conversion Ant Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a>
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/compare-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/compare-ant-task.htm
new file mode 100644
index 0000000..fd9b2fa
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/compare-ant-task.htm
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<meta http-equiv="Content-Style-Type" content="text/css"/>
+<link rel="stylesheet" href="../../../apache_style.css" type="text/css"/>
+<title>API Tools API Deprecation Ant Task</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+</head>
+<body>
+<h1> Compare Ant Task </h1>
+<h2>Purpose</h2>
+<p>This task runs a complete comparison of an API profile relative to a baseline. </p>
+
+<h2>Usage</h2>
+<h3>Description</h3>
+<p>The name of the Ant task is: <code>apitooling.compare</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
+classpath.</p>
+<div style="text-align: left;">
+<pre style="margin-left: 40px">
+<b><font color="#0000ff"><apitooling.compare
+	baseline=<font color="#008000">"..."</font>
+	profile=<font color="#008000">"..."</font>
+	report=<font color="#008000">"..."</font>
+	excludelist=<font color="#008000">"..."</font>
+	includelist=<font color="#008000">"..."</font>
+	components=<font color="#008000">"..."</font>
+	visibility=<font color="#008000">"..."</font>
+	debug=<font color="#008000">"..."</font>
+/></font></b>
+</pre>
+</div>
+<h3>Parameters</h3>
+<table border="1" cellpadding="2" cellspacing="0">
+  <tr>
+    <td valign="top"><b>Attribute</b></td>
+    <td valign="top"><b>Description</b></td>
+    <td align="center" valign="top"><b>Required</b></td>
+  </tr>
+<tr>
+<td valign="top">baseline</td>
+<td valign="top">This attribute specifies the location of the reference baseline.
+<br/><br/>It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
+directory is which you can find the Eclipse executable.
+<br/><br/>The location is specified using an absolute path.
+</td>
+<td align="center" valign="top">Yes</td>
+</tr>
+<tr>
+<td valign="top">profile</td>
+<td valign="top">This attribute specifies the location of the current product or profile that you want to compare against the reference baseline.
+<br/><br/>
+It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
+directory is which you can find the Eclipse executable.
+<br/><br/>The location is specified using an absolute path.
+</td>
+<td align="center" valign="top">Yes</td>
+</tr>
+<tr>
+<td valign="top">report</td>
+<td valign="top">Set the output location where the report will be generated.
+<br/><br/>
+Once the task is completed, the report called "compare.xml" is available in this directory.
+<br/><br/>The location is specified using an absolute path. 
+</td>
+<td align="center" valign="top">Yes</td>
+</tr>
+<tr>
+<td valign="top">excludelist</td>
+<td valign="top">Set the exclude list location. 
+<br/><br/>The exclude list location specifies a text file listing bundles to be excluded from the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example exclude list:
+<pre>
+ # DOC BUNDLES
+ org.eclipse.jdt.doc.isv
+ org.eclipse.jdt.doc.user
+ org.eclipse.pde.doc.user
+ org.eclipse.platform.doc.isv
+ org.eclipse.platform.doc.user
+ # NON-ECLIPSE BUNDLES
+ com.ibm.icu
+ com.jcraft.jsch
+ javax.servlet
+ javax.servlet.jsp
+ # Exclude all pde bundles
+ R:org\.eclipse\.pde\..*
+ ...
+</pre>
+The exclude list can contain regular expressions if the line starts with "R:".
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">includelist</td>
+<td valign="top">Set the include list location. 
+<br/><br/>The include list location specifies a text file listing bundles to be included in the analysis.
+By default all bundles in the profile are analyzed. The include and exclude list attributes can be used to 
+selectively include and exclude bundles. The include list seeds the set of bundles to be analyzed (when omitted,
+all bundles are included), and the exclude list is then applied.
+Each line of the file specifies one of:
+<ul>
+<li>a specific bundle name</li>
+<li>a regular expression to match against bundle names (lines being with "R:")</li>
+<li>a comment (lines being with '#')</li>
+</ul>
+<br/>The location is specified using an absolute path.
+<br/>Following is an example include list:
+<pre>
+ # DOC BUNDLES
+ org.eclipse.jdt.doc.isv
+ org.eclipse.jdt.doc.user
+ org.eclipse.pde.doc.user
+ org.eclipse.platform.doc.isv
+ org.eclipse.platform.doc.user
+ # NON-ECLIPSE BUNDLES
+ com.ibm.icu
+ com.jcraft.jsch
+ javax.servlet
+ javax.servlet.jsp
+ # Exclude all pde bundles
+ R:org\.eclipse\.pde\..*
+ ...
+</pre>
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">debug</td>
+<td valign="top">Set the debug value.
+<br/><br/>The possible values are: <code>true</code>, <code>false</code>
+<br/>Default is <code>false</code>.
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">components</td>
+<td valign="top">Set the components' list location. 
+<br/><br/>The components' list contains all the components' names that must be compared.
+If omitted, all components from the given baseline are compared.
+<br/>The location is specified using an absolute path.
+<br/>The format of the components' list file looks like this:
+<pre>
+ # DOC BUNDLES
+ org.eclipse.jdt.doc.isv
+ org.eclipse.jdt.doc.user
+ org.eclipse.pde.doc.user
+ org.eclipse.platform.doc.isv
+ org.eclipse.platform.doc.user
+ # Include all pde bundles
+ R:org\.eclipse\.pde\..*
+ ...
+</pre>
+The components' list can contain regular expressions if the line starts with "R:".
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+<tr>
+<td valign="top">visibility</td>
+<td valign="top">Set the visibility value.
+<br/><br/>The possible values are: <code>API</code>, <code>ALL</code>
+<br/>Default is <code>API</code>.
+</td>
+<td align="center" valign="top">No</td>
+</tr>
+</table>
+
+<h3>Examples</h3>
+
+<pre>
+	<b><font color="#0000ff"><apitooling.compare
+		baseline=<font color="#008000">"D:\eclipse\3.4.1\eclipse"</font>
+		profile=<font color="#008000">"D:\eclipse-SDK-I20081118-0800-linux-gtk.tar.gz"</font>
+		report=<font color="#008000">"D:\reports\xml"</font>
+		excludelist=<font color="#008000">"D:\exclude_list_external.txt"</font>
+		debug=<font color="#008000">"true"</font>
+	/></font></b>
+</pre>
+<p>This will run the task creating <code>compare.xml</code> files inside the folder <code>D:\reports\xml</code>.
+It will use the exclude list to reduce the number of problems to report.</p>
+<p>Since debug is enabled, some debug tracing will show up in the Ant console.</p>
+
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"/></p>
+<p><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
+<br/><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
+<br/><a href="apiuse-ant-task.htm">API Use Ant Task</a>
+<br/><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
+<br/><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
+<br/><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
+<br/><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
+</p>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-ant-task.htm
old mode 100644
new mode 100755
index 3dd92d3..e43f184
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-ant-task.htm
@@ -1,80 +1,245 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Tools API Deprecation Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Deprecation Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task runs a complete API analysis of an API profile relative to a baseline - looking only for members (classes, fields, methods) that have been deprecated / un-deprecated. The profile is the current state of a product under development. The profile is compared to an API baseline for deprecation changes (usually the previous release of a product). </p>
-
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.apideprecation</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<div style="text-align: left;">
-<pre style="margin-left: 40px">
-<b><font color="#0000ff"><apitooling.apideprecation
-	baseline=<font color="#008000">"..."</font>
-	profile=<font color="#008000">"..."</font>
-	report=<font color="#008000">"..."</font>
-	excludelist=<font color="#008000">"..."</font>
-	debug=<font color="#008000">"..."</font>
-	eefile=<font color="#008000">"..."</font>
-/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Tools API Deprecation Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Deprecation Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task runs a complete API analysis of an API profile
+      relative to a baseline - looking only for members (classes,
+      fields, methods) that have been deprecated / un-deprecated.
+      The profile is the current state of a product under
+      development. The profile is compared to an API baseline for
+      deprecation changes (usually the previous release of a
+      product).
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+    <p>
+
+      The name of the Ant task is:
+      <code>apitooling.apideprecation</code>. To be used, the jar
+      file <code>apitooling-ant.jar</code> has to be on the Ant
+      classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class="c2"><apitooling.apideprecation
+	baseline=<span class="c1">"..."</span>
+	profile=<span class="c1">"..."</span>
+	report=<span class="c1">"..."</span>
+	excludelist=<span class="c1">"..."</span>
+	includelist=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+	eefile=<span class="c1">"..."</span>
+/></span></b>
 </pre>
-</div>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-<td valign="top">baseline</td>
-<td valign="top">This attribute specifies the location of the reference baseline.
-<br><br>It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
-directory is which you can find the Eclipse executable.
-<br><br>The location is specified using an absolute path.
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">profile</td>
-<td valign="top">This attribute specifies the location of the current product or profile that you want to compare against the reference baseline.
-<br><br>
-It can be a .zip, .jar, .tgz, .tar.gz file, or a directory that corresponds to the Eclipse installation folder. This is the 
-directory is which you can find the Eclipse executable.
-<br><br>The location is specified using an absolute path.
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">report</td>
-<td valign="top">Set the output location where the reports will be generated.
-<br><br>
-Once the task is completed, reports are available in this directory using a structure similar to the filter root. A sub-folder is created
-for each component that has problems to be reported. Each sub-folder contains a file called "report.xml".
-<br><br>A special folder called "allNonApiBundles" is also created in this folder which also contains a file called "report.xml".
-This file lists all the bundles that are not using the API Tooling nature.
-<br><br>The location is specified using an absolute path. 
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">excludelist</td>
-<td valign="top">Set the exclude list location. 
-<br><br>The exclude list is used to know what bundles should excluded from the xml report generated by the task execution.
-The lines that start with '#' are ignored from the excluded elements.
-<br>The location is specified using an absolute path.
-<br>The format of the exclude list file looks like this:
-<pre>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+          <b>Attribute</b>
+
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+        <td align="center" valign="top">
+          <b>Required</b>
+        </td>
+      </tr>
+
+      <tr>
+        <td valign="top">
+          baseline
+        </td>
+        <td valign="top">
+          This attribute specifies the location of the reference
+          baseline.<br />
+          <br />
+          It can be a .zip, .jar, .tgz, .tar.gz file, or a
+          directory that corresponds to the Eclipse installation
+          folder. This is the directory is which you can find the
+          Eclipse executable.<br />
+
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          profile
+        </td>
+
+        <td valign="top">
+          This attribute specifies the location of the current
+          product or profile that you want to compare against the
+          reference baseline.<br />
+          <br />
+          It can be a .zip, .jar, .tgz, .tar.gz file, or a
+          directory that corresponds to the Eclipse installation
+          folder. This is the directory is which you can find the
+          Eclipse executable.<br />
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          report
+        </td>
+        <td valign="top">
+          Set the output location where the reports will be
+          generated.<br />
+
+          <br />
+          Once the task is completed, reports are available in this
+          directory using a structure similar to the filter root. A
+          sub-folder is created for each component that has
+          problems to be reported. Each sub-folder contains a file
+          called "report.xml".<br />
+          <br />
+          A special folder called "allNonApiBundles" is also
+          created in this folder which also contains a file called
+          "report.xml". This file lists all the bundles that are
+          not using the API Tools nature.<br />
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          excludelist
+        </td>
+        <td valign="top">
+          Set the exclude list location.<br />
+
+          <br />
+          The exclude list location specifies a text file listing
+          bundles to be excluded from the analysis. By default all
+          bundles in the profile are analyzed. The include and
+          exclude list attributes can be used to selectively
+          include and exclude bundles. In addition, this task
+          supports listing members in the include and exclude
+          lists. The include list seeds the set of bundles and
+          members to be analyzed (when omitted, all bundles and
+          members are included), and the exclude list is then
+          applied. Each line of the file specifies one of:
+          <ul>
+            <li>a specific bundle name
+            </li>
+            <li>a specific member name
+            </li>
+            <li>a regular expression to match against bundle or
+            member names (lines being with "R:")
+            </li>
+            <li>a comment (lines being with '#')
+            </li>
+
+          </ul><br />
+          The location is specified using an absolute path.<br />
+          Following is an example exclude list:
+          <pre>
+ # ECLIPSE MEMBERS
+ org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#getElements(Ljava/lang/Object;)[Ljava/lang/Object;
+ # DOC BUNDLES
+ org.eclipse.jdt.doc.isv
+ org.eclipse.jdt.doc.user
+ org.eclipse.pde.doc.user
+ org.eclipse.platform.doc.isv
+ org.eclipse.platform.doc.user
+ # NON-ECLIPSE BUNDLES
+ com.ibm.icu
+ com.jcraft.jsch
+ javax.servlet
+ javax.servlet.jsp
+ ...
+</pre>The exclude list can contain regular expressions if the line
+starts with "R:".
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+
+      </tr>
+      <tr>
+        <td></td>
+      </tr>
+      <tr>
+        <td valign="top">
+          includelist
+        </td>
+        <td valign="top">
+
+          Set the include list location.<br />
+          <br />
+          The include list location specifies a text file listing
+          bundles to be included in the analysis. By default all
+          bundles in the profile are analyzed. The include and
+          exclude list attributes can be used to selectively
+          include and exclude bundles. In addition, this task
+          supports listing members in the include and exclude
+          lists. The include list seeds the set of bundles and
+          members to be analyzed (when omitted, all bundles and
+          members are included), and the exclude list is then
+          applied. Each line of the file specifies one of:
+          <ul>
+            <li>a specific bundle name
+            </li>
+            <li>a specific member name
+            </li>
+            <li>a regular expression to match against bundle or
+            member names (lines being with "R:")
+            </li>
+
+            <li>a comment (lines being with '#')
+            </li>
+          </ul><br />
+          The location is specified using an absolute path.<br />
+          Following is an example include list:
+          <pre>
+ # ECLIPSE MEMBERS
+ org.eclipse.jface.databinding_1.2.0:org.eclipse.jface.databinding.viewers.ObservableListContentProvider#getElements(Ljava/lang/Object;)[Ljava/lang/Object;
  # DOC BUNDLES
  org.eclipse.jdt.doc.isv
  org.eclipse.jdt.doc.user
@@ -88,51 +253,97 @@ The lines that start with '#' are ignored from the excluded elements.
  javax.servlet.jsp
  ...
 </pre>
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-<tr>
-<td valign="top">debug</td>
-<td valign="top">Set the debug value.
-<br><br>The possible values are: <code>true</code>, <code>false</code>
-<br>Default is <code>false</code>.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-<tr>
-<td valign="top">eefile</td>
-<td valign="top">Set the execution environment file to use. 
-<br><br>By default, an execution environment file corresponding to a JavaSE-1.6 execution environment is used.
-<br><br>The format of the file is described in this <a href="http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions" target="blank">wiki page</a>.
-<br><br>The file is specified using an absolute path.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-	<b><font color="#0000ff"><apitooling.apideprecation
-		baseline=<font color="#008000">"D:\eclipse\3.4.1\eclipse"</font>
-		profile=<font color="#008000">"D:\eclipse-SDK-I20081118-0800-linux-gtk.tar.gz"</font>
-		report=<font color="#008000">"D:\reports\xml"</font>
-		excludelist=<font color="#008000">"D:\exclude_list_external.txt"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+        </td>
+        <td align="center" valign="top">
+
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+
+      </tr>
+      <tr>
+        <td valign="top">
+          eefile
+        </td>
+        <td valign="top">
+          Set the execution environment file to use.<br />
+          <br />
+          By default, an execution environment file corresponding
+          to a JavaSE-1.6 execution environment is used.<br />
+
+          <br />
+          The format of the file is described in this <a href=
+          "http://wiki.eclipse.org/index.php/Execution_Environment_Descriptions"
+          target="blank">wiki page</a>.<br />
+          <br />
+          The file is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+    <pre>
+ <b><span class="c2"><apitooling.apideprecation
+  baseline=<span class="c1">"D:\eclipse\3.4.1\eclipse"</span>
+  profile=<span class=
+"c1">"D:\eclipse-SDK-I20081118-0800-linux-gtk.tar.gz"</span>
+
+  report=<span class="c1">"D:\reports\xml"</span>
+  excludelist=<span class=
+"c1">"D:\exclude_list_external.txt"</span>
+  debug=<span class="c1">"true"</span>
+ /></span></b>
 </pre>
-<p>This will run the task creating <code>report.xml</code> files inside the folder <code>D:\reports\xml</code>.
-It will use the exclude list to reduce the number of problems to report.</p>
-<p>Since debug is enabled, some debug tracing will show up in the Ant console.</p>
-
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-<br><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-</p>
-</body>
+    <p>
+
+      This will run the task creating <code>report.xml</code> files
+      inside the folder <code>D:\reports\xml</code>. It will use
+      the exclude list to reduce the number of problems to report.
+    </p>
+    <p>
+      Since debug is enabled, some debug tracing will show up in
+      the Ant console.
+    </p>
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+
+    </p>
+    <p>
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a><br />
+      <a href="apifreeze-reportconversion-ant-task.htm">API Freeze
+      Report Conversion Ant Task</a><br />
+
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm
old mode 100644
new mode 100755
index 14a416e..86120e7
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/deprecation-reportconversion-ant-task.htm
@@ -1,83 +1,163 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Deprecation Report Conversion Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Deprecation Report Conversion Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task converts the XML report created by the <code>apitooling.apideprecation</code> Ant task into HTML files.</p>
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.apideprecation_reportconversion</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<div style="text-align: left;">
-<pre>
-	<b><font color="#0000ff"><apitooling.apideprecation_reportconversion
-		xmlfile=<font color="#008000">"..."</font>
-		htmlfile=<font color="#008000">"..."</font>
-		debug=<font color="#008000">"..."</font>
-	/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Deprecation Report Conversion Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Deprecation Report Conversion Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task converts the XML report created by the
+      <code>apitooling.apideprecation</code> Ant task into HTML
+      files.
+    </p>
+    <h2>
+      Usage
+    </h2>
+    <h3>
+      Description
+    </h3>
+
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.apideprecation_reportconversion</code>. To
+      be used, the jar file <code>apitooling-ant.jar</code> has to
+      be on the Ant classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class="c2"><apitooling.apideprecation_reportconversion
+	xmlfile=<span class="c1">"..."</span>
+	htmlfile=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+/></span></b>
 </pre>
-</div>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-	<td valign="top">xmlfile</td>
-	<td valign="top">This attribute specifies the location of the xml file to convert.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">htmlfile</td>
-	<td valign="top">This attribute specifies the location of the html file to generate.
-	<br>
-	If omitted, the html file name will be the given xml file name where the extension is replaced with html.
-	<br><br>
-	The location is specified using an absolute path.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-	<td valign="top">debug</td>
-	<td valign="top">Set the debug value.
-	<br><br>The possible values are: <code>true</code>, <code>false</code>
-	<br>Default is <code>false</code>.
-	</td>
-	<td align="center" valign="top">No</td>
-</tr>
-</table>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+        <td valign="top">
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+
+        <td align="center" valign="top">
+          <b>Required</b>
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          xmlfile
+        </td>
+        <td valign="top">
 
-<h3>Examples</h3>
+          This attribute specifies the location of the xml file to
+          convert.<br />
+          <br />
+          The location is specified using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
 
-<pre>
-	<b><font color="#0000ff"><apitooling.apideprecation_reportconversion
-		xmlfile=<font color="#008000">"/eclipse/deprecation/deprecation.xml"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+        <td valign="top">
+          htmlfile
+        </td>
+        <td valign="top">
+          This attribute specifies the location of the html file to
+          generate.<br />
+          If omitted, the html file name will be the given xml file
+          name where the extension is replaced with html.<br />
+          <br />
+          The location is specified using an absolute path.
+        </td>
+
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+
+      </tr>
+    </table>
+    <h3>
+      Examples
+    </h3>
+    <pre>
+ <b><span class="c2"><apitooling.apideprecation_reportconversion
+  xmlfile=<span class=
+"c1">"/eclipse/deprecation/deprecation.xml"</span>
+  debug=<span class="c1">"true"</span>
+
+ /></span></b>
 </pre>
-<p>This will run the task creating the <code>deprecation.html</code> file inside the folder <code>/eclipse/deprecation</code>.</p>
-<p>If debug is enabled, some debug tracing will show up in the Ant console.</p>
+    <p>
+      This will run the task creating the
+      <code>deprecation.html</code> file inside the folder
+      <code>/eclipse/deprecation</code>.
+    </p>
+    <p>
+      If debug is enabled, some debug tracing will show up in the
+      Ant console.
+    </p>
+
+    <p>
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+      <a href="filegeneration-ant-task.htm">File Generation Ant
+      Task</a><br />
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
 
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="analysis-ant-task.htm">Analysis Ant Task</a>
-<br><a href="filegeneration-ant-task.htm">File Generation Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-</p>
-</body>
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a>
+    </p>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/filegeneration-ant-task.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/filegeneration-ant-task.htm
index d8744c0..82913f4 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/filegeneration-ant-task.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/ant-tasks/filegeneration-ant-task.htm
@@ -1,127 +1,279 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="stylesheet" href="../../../apache_style.css" type="text/css">
-<title>API Tools File Generation Ant Task</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-</head>
-<body>
-<h1> API Tools File Generation Ant Task </h1>
-<h2>Purpose</h2>
-<p>This task runs to generate all files required by Api Tooling inside a binary bundle. This task is run
-during the Eclipse builds or during the bundle export for all projects
-that have an Api Tooling nature.
-</p>
-<p>Right now, only the file called <code>.api_description</code> is created.</p>
-<h2>Usage</h2>
-<h3>Description</h3>
-<p>The name of the Ant task is: <code>apitooling.apigeneration</code>. To be used, the jar file <code>apitooling-ant.jar</code> has to be on the Ant
-classpath.</p>
-<div style="text-align: left;">
-<pre style="margin-left: 40px">
-<b><font color="#0000ff"><apitooling.apigeneration
-	projectname=<font color="#008000">"..."</font>
-	project=<font color="#008000">"..."</font>
-	binary=<font color="#008000">"..."</font>
-	target=<font color="#008000">"..."</font>
-	debug=<font color="#008000">"..."</font>
-/></font></b>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="stylesheet" href="../../../apache_style.css" type=
+    "text/css" />
+    <title>
+      API Tools File Generation Ant Task
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type=
+    "text/javascript">
+
+</script>
+  </head>
+  <body>
+    <h1>
+      API Tools File Generation Ant Task
+    </h1>
+    <h2>
+      Purpose
+    </h2>
+
+    <p>
+      This task runs to generate all files required by API Tools
+      inside a binary bundle. This task is run during the Eclipse
+      builds or during the bundle export for all projects that have
+      an API Tools nature.
+    </p>
+    <p>
+      Right now, only the file called <code>.api_description</code>
+      is created.
+    </p>
+    <h2>
+      Usage
+    </h2>
+
+    <h3>
+      Description
+    </h3>
+    <p>
+      The name of the Ant task is:
+      <code>apitooling.apigeneration</code>. To be used, the jar
+      file <code>apitooling-ant.jar</code> has to be on the Ant
+      classpath.
+    </p>
+    <div class="c4">
+      <pre class="c3">
+<b><span class="c2"><apitooling.apigeneration
+	projectname=<span class="c1">"..."</span>
+	project=<span class="c1">"..."</span>
+	binary=<span class="c1">"..."</span>
+	target=<span class="c1">"..."</span>
+	debug=<span class="c1">"..."</span>
+/></span></b>
 </pre>
-</div>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-<tr>
-<td valign="top">projectname</td>
-<td valign="top">Set the project name
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">project</td>
-<td valign="top">Set the project location.
-<br><br>This is the folder that contains all the source files for the given project.
-<br><br>The location is set using an absolute path.
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">binary</td>
-<td valign="top">Set the binary locations.
-<br><br>This is a list of folders or jar files that contain all the .class files for the given project.
-They are separated by the platform path separator. Each entry must exist.
-<br><br>They should be specified using absolute paths.
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-<td valign="top">target</td>
-<td valign="top">Set the target location.
-<br><br>This is the folder in which the generated files are generated.
-<br><br>The location is set using an absolute path.
-</td>
-<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">debug</td>
-	<td valign="top">Set the debug value.
-		<br><br>The possible values are: <code>true</code>, <code>false</code>
-		<br>Default is <code>false</code>.</td>
-	<td align="center" valign="top">No</td>
-</tr>
-<tr>
-<td valign="top">extraManifests</td>
-<td valign="top">Set the extra manifest files' locations.
-<br><br>This is a list of extra MANIFEST.MF files' locations that can be set to provide more api
- packages to scan. They are separated by the platform path separator. Each entry must exist.
-<br><br>If the path is not absolute, it will be resolved relative to the current working directory.
-<br><br>Jar files can be specified instead of MANIFEST.MF file. If a jar file is specified, its MANIFEST.MF file
-will be read if it exists.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-<tr>
-<td valign="top">extraSourceLocations</td>
-<td valign="top">Set the extra source locations.
-<br><br>This is a list of locations for source files that will be scanned.
-They are separated by the platform path separator. Each entry must exist.
-<br><br>They should be specified using absolute paths.
-</td>
-<td align="center" valign="top">No</td>
-</tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-	<b><font color="#0000ff"><apitooling.apigeneration
-		projectname=<font color="#008000">"org.eclipse.jdt.core_3.5.0.v_927"</font>
-		project=<font color="#008000">"d:\eclipse\org.eclipse.jdt.core"</font>
-		binary=<font color="#008000">"d:\eclipse\org.eclipse.jdt.core\bin;d:\eclipse\org.eclipse.jdt.core\antbin"</font>
-		target=<font color="#008000">"d:\plugins\org.eclipse.jdt.core"</font>
-		debug=<font color="#008000">"true"</font>
-	/></font></b>
+    </div>
+    <h3>
+      Parameters
+    </h3>
+    <table border="1" cellpadding="2" cellspacing="0">
+      <tr>
+
+        <td valign="top">
+          <b>Attribute</b>
+        </td>
+        <td valign="top">
+          <b>Description</b>
+        </td>
+        <td align="center" valign="top">
+          <b>Required</b>
+
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          projectname
+        </td>
+        <td valign="top">
+          Set the project name
+        </td>
+        <td align="center" valign="top">
+
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          project
+        </td>
+        <td valign="top">
+          Set the project location.<br />
+
+          <br />
+          This is the folder that contains all the source files for
+          the given project.<br />
+          <br />
+          The location is set using an absolute path.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+
+      <tr>
+        <td valign="top">
+          binary
+        </td>
+        <td valign="top">
+          Set the binary locations.<br />
+          <br />
+          This is a list of folders or jar files that contain all
+          the .class files for the given project. They are
+          separated by the platform path separator. Each entry must
+          exist.<br />
+
+          <br />
+          They should be specified using absolute paths.
+        </td>
+        <td align="center" valign="top">
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          target
+        </td>
+
+        <td valign="top">
+          Set the target location.<br />
+          <br />
+          This is the folder in which the generated files are
+          generated.<br />
+          <br />
+          The location is set using an absolute path.
+        </td>
+        <td align="center" valign="top">
+
+          Yes
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          debug
+        </td>
+        <td valign="top">
+          Set the debug value.<br />
+
+          <br />
+          The possible values are: <code>true</code>,
+          <code>false</code><br />
+          Default is <code>false</code>.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+
+      </tr>
+      <tr>
+        <td valign="top">
+          extraManifests
+        </td>
+        <td valign="top">
+          Set the extra manifest files' locations.<br />
+          <br />
+          This is a list of extra MANIFEST.MF files' locations that
+          can be set to provide more api packages to scan. They are
+          separated by the platform path separator. Each entry must
+          exist.<br />
+
+          <br />
+          If the path is not absolute, it will be resolved relative
+          to the current working directory.<br />
+          <br />
+          Jar files can be specified instead of MANIFEST.MF file.
+          If a jar file is specified, its MANIFEST.MF file will be
+          read if it exists.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+
+      <tr>
+        <td valign="top">
+          extraSourceLocations
+        </td>
+        <td valign="top">
+          Set the extra source locations.<br />
+          <br />
+          This is a list of locations for source files that will be
+          scanned. They are separated by the platform path
+          separator. Each entry must exist.<br />
+
+          <br />
+          They should be specified using absolute paths.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+      <tr>
+        <td valign="top">
+          allowNonapiproject
+        </td>
+
+        <td valign="top">
+          Allow the task to run on non-API Tools enabled
+          projects.<br />
+          <br />
+          If this task is run on a project that does not have an
+          API Tools nature, no api_description file will be
+          generated as it is assumed that the project does not
+          support API Tools. In some cases there is a need to
+          generate the description file on projects without the
+          nature. Setting this parameter to true will cause the
+          task to not check for a nature.
+        </td>
+        <td align="center" valign="top">
+          No
+        </td>
+      </tr>
+
+    </table>
+    <h3>
+      Examples
+    </h3>
+    <pre>
+ <b><span class="c2"><apitooling.apigeneration
+  projectname=<span class=
+"c1">"org.eclipse.jdt.core_3.5.0.v_927"</span>
+  project=<span class="c1">"d:\eclipse\org.eclipse.jdt.core"</span>
+
+  binary=<span class=
+"c1">"d:\eclipse\org.eclipse.jdt.core\bin;d:\eclipse\org.eclipse.jdt.core\antbin"</span>
+  target=<span class="c1">"d:\plugins\org.eclipse.jdt.core"</span>
+  debug=<span class="c1">"true"</span>
+ /></span></b>
 </pre>
-<p>This will create a file called <code>.api_description</code> inside the folder <code>d:\plugins\org.eclipse.jdt.core</code> based
-on the source contained in <code>d:\eclipse\org.eclipse.jdt.core</code> and the .class files contained in
-<code>d:\eclipse\org.eclipse.jdt.core\bin</code>.</p>
-
-<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="analysis-ant-task.htm">Analysis Ant Task</a>
-<br><a href="apifreeze-ant-task.htm">API Freeze Ant Task</a>
-<br><a href="apiuse-ant-task.htm">API Use Ant Task</a>
-<br><a href="analysis-reportconversion-ant-task.htm">Analysis Report Conversion Ant Task</a>
-<br><a href="apifreeze-reportconversion-ant-task.htm">API Freeze Report Conversion Ant Task</a>
-<br><a href="deprecation-ant-task.htm">API Deprecation Ant Task</a>
-<br><a href="deprecation-reportconversion-ant-task.htm">API Deprecation Report Conversion Ant Task</a>
-<br><a href="apiuse-reportconversion-ant-task.htm">API Use Report Conversion Ant Task</a>
-</p>
-</body>
+    <p>
+
+      This will create a file called <code>.api_description</code>
+      inside the folder
+      <code>d:\plugins\org.eclipse.jdt.core</code> based on the
+      source contained in
+      <code>d:\eclipse\org.eclipse.jdt.core</code> and the .class
+      files contained in
+      <code>d:\eclipse\org.eclipse.jdt.core\bin</code>.
+    </p>
+    <p>
+
+      <img src="../../../images/ngrelr.png" alt="Related reference"
+      border="0" />
+    </p>
+    <p>
+      <a href="analysis-ant-task.htm">Analysis Ant Task</a><br />
+      <a href="apifreeze-ant-task.htm">API Freeze Ant
+      Task</a><br />
+      <a href="apiuse-ant-task.htm">API Use Ant Task</a><br />
+      <a href="analysis-reportconversion-ant-task.htm">Analysis
+      Report Conversion Ant Task</a><br />
+
+      <a href="apifreeze-reportconversion-ant-task.htm">API Freeze
+      Report Conversion Ant Task</a><br />
+      <a href="deprecation-ant-task.htm">API Deprecation Ant
+      Task</a><br />
+      <a href="deprecation-reportconversion-ant-task.htm">API
+      Deprecation Report Conversion Ant Task</a><br />
+      <a href="apiuse-reportconversion-ant-task.htm">API Use Report
+      Conversion Ant Task</a>
+    </p>
+  </body>
 </html>
+
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_javadoc_tags.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_javadoc_tags.htm
index 4f6f00d..a013976 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_javadoc_tags.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_javadoc_tags.htm
@@ -2,16 +2,16 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../book.css" type="text/css">
-  <title>API Tooling Javadoc Tags</title>
+  <title>API Tools Javadoc Tags</title>
 </head>
 <body style="background-color: rgb(255, 255, 255);">
 <h1>Defining API Restrictions </h1>
-<p>API tooling provides Javadoc tags to explicitly document and restrict the use of API. The following tables summarizes the Javadoc tags supported by each  member and the semantics of each tag.</p>
+<p>API Tools provides Javadoc tags to explicitly document and restrict the use of API. The following tables summarizes the Javadoc tags supported by each  member and the semantics of each tag.</p>
 <p>A <em>client</em> refers to a plug-in or bundle that requires the bundle where the associated API is defined. Restrictions are not applied in the same bundle where API is defined. For example, a bundle that defines an interface as @noimplement is also allowed to provide an implementation of that interface.</p>
 <h4>Supported Restriction Tags </h4>
 <table width="100%" border="1" cellspacing="0" cellpadding="2">
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_since_tags.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_since_tags.htm
index b8f9923..a7907bb 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_since_tags.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/api_since_tags.htm
@@ -10,7 +10,7 @@
 </head>
 <body>
 <h1> Javadoc @since Tag Management</h1>
-<p>API tooling provides support for management of <code>@since</code> Javadoc tags on new elements that have been added to API (types, methods, fields, etc). 
+<p>API Tools provides support for management of <code>@since</code> Javadoc tags on new elements that have been added to API (types, methods, fields, etc). 
 New API elements could be a new type added to an API package, a new type added to an API type, a new method added to an API type or a new field added to an API type.
 Method addition is a special case, where a method addition could be adding a method to a type, overriding a parent class method, implementing a parent interface method 
 or changing an existing methods' signature.
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_analysis.png b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_analysis.png
index b08c305..f4e4923 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_analysis.png and b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_analysis.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_compatibility.png b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_compatibility.png
index eea48b3..377a518 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_compatibility.png and b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_compatibility.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_usage.png b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_usage.png
index f7c151c..bae33e3 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_usage.png and b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_usage.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_usescans.png b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_usescans.png
new file mode 100644
index 0000000..a90c695
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_usescans.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_version.png b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_version.png
index c83f90e..9c39354 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_version.png and b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/api_options_version.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/use-ui.png b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/use-ui.png
index bae4da5..bea370b 100644
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/use-ui.png and b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/use-ui.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/usescans-pref-page.png b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/usescans-pref-page.png
new file mode 100644
index 0000000..ed8b500
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/images/usescans-pref-page.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-baselines.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-baselines.htm
index fb421dc..094ef9d 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-baselines.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-baselines.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" type="text/css">
@@ -43,7 +43,7 @@
     <tr>
       <td colspan="1" valign="top" align="left">Missing API baseline</td>
       <td colspan="1" valign="top" align="left">This preference is used to notify you when the API builder is going to run and you do not have a default API baseline set.</td>
-      <td colspan="1" valign="top" align="left">Warning</td>
+      <td colspan="1" valign="top" align="left">Error</td>
     </tr>
   </tbody>
 </table>
@@ -51,8 +51,11 @@
 <p><img src="../../../images/ngrelt.png" alt="Related tasks"></p>
 <p> <a href="../../../tasks/api_tooling_baseline.htm">Setting up an API  baseline</a> </p>
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
-<p><a href="ref-errorswarnings.htm">API Errors and Warnings Preferences</a><br>
-  <a href="../quickfixes/ref-api-missing-baseline-qf.htm">Missing API Baseline Quickfix</a><br>
-  <a href="../wizards/ref-api-baseline-wizard.htm">API Baseline Wizard</a></p>
+<p><a href="../../../guide/tools/preference_pages/preferences.htm">PDE Preferences</a><br>
+  <a href="ref-errorswarnings.htm">API Errors and Warnings Preferences</a><br>
+  <a href="../quickfixes/ref-api-missing-baseline-qf.htm">Missing API Baseline Quick Fix</a><br>
+  <a href="../wizards/ref-api-baseline-wizard.htm">API Baseline Wizard</a><br>
+  <a href="ref-usescans.htm">API Use Scans Preferences</a>
+  </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-errorswarnings.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-errorswarnings.htm
index ae21aff..cb91fe9 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-errorswarnings.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-errorswarnings.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="stylesheet" href="../../../book.css" type="text/css">
@@ -129,8 +129,6 @@
 	<p>
 	<img src="../images/api_options_compatibility.png" alt="API Compatibility option preference page">
 	</p>
-	<p>
-	</p>
 	<table border="1" cellspacing="0" cellpadding= "5" width="100%">
 		  <thead>
 			<tr>
@@ -671,11 +669,44 @@
 			</tr>
 		  </tbody>
 		</table>
+	<h2><a name="usescans" id="usescans"></a>API Use Scans Options</h2>
+	<p>
+	<img src="../images/api_options_usescans.png" alt="API use scans options preference page">
+	</p>
+	<table border="1" cellspacing="0" cellpadding= "5" width="100%">
+		  <thead>
+			<tr>
+			  <th rowspan="1" colspan="1" width="30%"> <p> Option </p></th>
+			  <th rowspan="1" colspan="1"> <p> Description </p></th>
+			  <th rowspan="1" colspan="1" align="center" width="5%"> <p> Default </p></th>
+			</tr>
+		  </thead>
+		  <tbody>
+			<tr>
+			  <td rowspan="1" colspan="1" valign="top" align="left"><p>Unresolved type problem  </p></td>
+			  <td rowspan="1" colspan="1" valign="top" align="left"><p>When enabled the API analysis builder will report any API types that have been removed that are included in any use scan listed on the <strong>API Use Scans</strong> prefrence page.</p></td>
+			  <td rowspan="1" colspan="1" valign="top" align="center"><p>Error</p></td>
+			</tr>
+			<tr>
+			  <td rowspan="1" colspan="1" valign="top" align="left"><p>Unresolved method problem</p></td>
+			  <td rowspan="1" colspan="1" valign="top" align="left"><p>When enabled the API analysis builder will report any methods that have been removed that are included in any use scan listed on the <strong>API Use Scans</strong> prefrence page.</p></td>
+			  <td rowspan="1" colspan="1" valign="top" align="center"><p>Error</p></td>
+			</tr>
+			<tr>
+			  <td rowspan="1" colspan="1" valign="top" align="left"><p>Unresolved field problem</p></td>
+			  <td rowspan="1" colspan="1" valign="top" align="left"><p>When enabled the API analysis builder will report any fields that have been removed that are included in any use scan listed on the <strong>API Use Scans</strong> prefrence page.</p></td>
+			  <td rowspan="1" colspan="1" valign="top" align="center"><p>Error</p></td>
+			</tr>
+		  </tbody>
+		</table>		
+		
 <br>
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
+<a href="../../../guide/tools/preference_pages/preferences.htm">PDE Preferences</a><br>
 <a href="../propertypages/ref-errorswarnings-prop.htm">API Errors and Warnings Property Page</a><br>
-<a href="ref-baselines.htm">API Baselines Preferences</a>
+<a href="ref-baselines.htm">API Baselines Preferences</a><br>
+<a href="ref-usescans.htm">API Use Scans Preferences</a>
 </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-usescans.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-usescans.htm
new file mode 100644
index 0000000..4a12b5c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/preferences/ref-usescans.htm
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="stylesheet" href="../../../book.css" type="text/css">
+<title>API Use Scans Preferences</title>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
+</head>
+<body>
+<h1> API Use Scans Preferences </h1>
+<p> The following preferences can be set using the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.pde.api.tools.ui.apiusescan.prefpage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the API Use Scans preference page"> <b>Plug-in Development > API Use Scans</b></a> preference page. </p>
+<p>An API Use Scan is a list of references using the <a href="../ant-tasks/apiuse-ant-task.htm">ant task</a> or the <a href="../wizards/ref-api-use-dialog.htm">report tool</a>.  The API Analysis builder checks that all references listed in the provided use scans still exist in your workspace projects.  Any missing types, methods or fields will be reported as problems in the workspace based on your Error/Warning preference settings.</p>
+<p>
+	<img src="../images/usescans-pref-page.png" alt="API use scans preference page">
+</p>
+<br>
+<table border="1" cellspacing="0" cellpadding= "5" width="100%">
+  <thead>
+    <tr>
+      <th rowspan="1" colspan="1" width="30%"> <p> Option </p></th>
+      <th rowspan="1" colspan="1"> <p> Description </p></th>
+    </tr>
+  </thead>
+  <tbody>
+  	<tr>
+      <td rowspan="1" colspan="1" valign="top" align="left">Select All</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Selects all use scan locations in the list.  The API analysis builder will check all locations.</td>
+    </tr>
+    <tr>
+      <td rowspan="1" colspan="1" valign="top" align="left">Deselect All</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Deselects all use scan locations in the list.  The API analysis builder will not check any locations.</td>
+    </tr>
+    <tr>
+      <td rowspan="1" colspan="1" valign="top" align="left">Add Directory...</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Adds a new use scan stored in a directory.</td>
+    </tr>
+     <tr>
+      <td rowspan="1" colspan="1" valign="top" align="left">Add Archive...</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Adds a new use scan stored in an archive file.</td>
+    </tr>
+     <tr>
+      <td rowspan="1" colspan="1" valign="top" align="left">Edit Location...</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Allows you to change the location of a use scan directory or archive.</td>
+    </tr>
+     <tr>
+      <td rowspan="1" colspan="1" valign="top" align="left">Remove</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Removes the selected use scans from the list.</td>
+    </tr>
+  </tbody>
+</table>
+<br>
+<p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
+<p>
+<a href="../../../guide/tools/preference_pages/preferences.htm">PDE Preferences</a><br>
+<a href="../ant-tasks/apiuse-ant-task.htm">API Use Scan Ant Task</a><br>
+<a href="../wizards/ref-api-use-dialog.htm">API Use Scan Report Tool</a><br>
+<a href="ref-errorswarnings.htm">API Errors and Warnings Preferences</a><br>
+<a href="ref-baselines.htm">API Baselines Preferences</a>
+</p>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/propertypages/ref-filters-prop.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/propertypages/ref-filters-prop.htm
index 00c9d49..3c46279 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/propertypages/ref-filters-prop.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/propertypages/ref-filters-prop.htm
@@ -15,7 +15,7 @@
 	 Once a problem filter has been created, it can be viewed or removed using the API Problem Filters property page. </p>
 	<p>To locate this property page:</p>
 		<ol>
-			<li>Open the context menu for any API tooling enabled project and select <strong>Properties</strong>.</li>
+			<li>Open the context menu for any API Tools enabled project and select <strong>Properties</strong>.</li>
 			<li>Navigate to <strong>Plug-in Development > API Problem Filters</strong>.</li>
 		</ol>
 <img src="../images/api-problem-filter-prop.png" alt="API Problem Filters property page">
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm
index 5b86b31..2fc085e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm
@@ -2,16 +2,16 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../../book.css" type="text/css">
-  <title>Add API Problem Filter Quickfix</title>
+  <title>Add API Problem Filter Quick Fix</title>
 </head>
 <body>
-<h1>Add API Problem Filter Quickfix</h1>
-<p>This quickfix can be used to quickly create an API problem filter for a known or expected API problem that cannot be easily corrected.</p>
+<h1>Add API Problem Filter Quick Fix</h1>
+<p>This quick fix can be used to quickly create an API problem filter for a known or expected API problem that cannot be easily corrected.</p>
 <p>This quick fix is available in one of two places:</p>
 <ol>
   <li><a href="#problems"><strong>The Problems view</strong></a>.</li>
@@ -20,19 +20,19 @@
 </ol>
 <h3><a name="problems" id="problems"></a>The Problems view</h3>
 <ul>
-  <li>Open the <b>Problem</b> view.</li>
-  <li>Select an API Tooling problem.
+  <li>Open the <b>Problems</b> view.</li>
+  <li>Select an API Tools problem.
   <p><img src="../images/filter-qf.png" alt="API problem selected in problems view"></p>
   </li>
-  <li>Use <b>Ctrl + 1</b> to trigger the quickfix from the problem view (or use the context menu as shown above).
-  <p><img src="../images/filter-dialog-qf.png" alt="Filter API problem quickfix dialog"></p>
+  <li>Use <b>Ctrl + 1</b> to trigger the quick fix from the Problems view (or use the context menu as shown above).
+  <p><img src="../images/filter-dialog-qf.png" alt="Filter API problem quick fix dialog"></p>
   </li>
 </ul>
 <h3><a name="editing" id="editing"></a>Editing the resource</h3>
 <ul>
   <li>Open the resource the API problem exists in.</li>
   <li>Use <b>Ctrl + 1</b> on the corresponding problem.
-  	<p><img src="../images/version-editor-qf.png" alt="Filter quickfix in an editor"></p>
+  	<p><img src="../images/version-editor-qf.png" alt="Filter quick fix in an editor"></p>
   </li>
 </ul>
 <br>
@@ -46,10 +46,10 @@
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
 <a href="../propertypages/ref-filters-prop.htm">API Problem Filters Property Page</a><br>
-<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quickfix</a><br>
-<a href="ref-api-version-qf.htm">Version Numbering Quickfix</a><br>
-<a href="ref-api-sincetag-qf.htm">Since Tag Quickfix</a><br>
-<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quickfix</a>
+<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quick Fix</a><br>
+<a href="ref-api-version-qf.htm">Version Numbering Quick Fix</a><br>
+<a href="ref-api-sincetag-qf.htm">Since Tag Quick Fix</a><br>
+<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quick Fix</a>
 </p>
 
 </body>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm
index fc95e1a..14d84b3 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm
@@ -2,29 +2,29 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../../book.css" type="text/css">
   <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
-  <title>Missing API Baseline Quickfix</title>
+  <title>Missing API Baseline Quick Fix</title>
 </head>
 <body>
-<h1>Missing API Baseline Quickfix</h1>
-<p>This quickfix can be used to quickly help resolve missing API baseline problems.</p>
-<p>This quickfix is available in the Problems view.</p>
+<h1>Missing API Baseline Quick Fix</h1>
+<p>This quick fix can be used to quickly help resolve missing API baseline problems.</p>
+<p>This quick fix is available in the Problems view.</p>
 <h3>The Problems view</h3>
 <ul>
-  <li>Open the <b>Problem</b> view.</li>
+  <li>Open the <b>Problems</b> view.</li>
   <li>Select the missing API baseline problem.
     <p><img src="../images/baseline-qf.png" alt="Missing API baseline problem"></p>
   </li>
-  <li>Use <b>Ctrl + 1</b> to trigger the quickfix from the problem view (or use the context menu as shown above).
-  <p><img src="../images/baseline-qf-dialog.png" alt="Missing API baseline quickfix dialog"></p>
+  <li>Use <b>Ctrl + 1</b> to trigger the quick fix from the Problems view (or use the context menu as shown above).
+  <p><img src="../images/baseline-qf-dialog.png" alt="Missing API baseline quick fix dialog"></p>
   </li>
 </ul>
-<p>Completing the quickfix will open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.pde.api.tools.ui.apiprofiles.prefpage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the API Baselines preference page"> <b>Plug-in Development > API Baselines</b></a> preference page, allowing you to create a new baseline using the <a href="../wizards/ref-api-baseline-wizard.htm"><strong>API baseline wizard</strong></a>.</p>
+<p>Completing the quick fix will open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.pde.api.tools.ui.apiprofiles.prefpage)")'> <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the API Baselines preference page"> <b>Plug-in Development > API Baselines</b></a> preference page, allowing you to create a new baseline using the <a href="../wizards/ref-api-baseline-wizard.htm"><strong>API baseline wizard</strong></a>.</p>
 <br>
 <p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" ></p>
 <p> 
@@ -33,10 +33,10 @@
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
 <a href="../preferences/ref-baselines.htm">API Baselines Preferences</a><br>
-<a href="ref-api-api-filter-qf.htm">Add API Problem Filter Quickfix</a><br>
-<a href="ref-api-version-qf.htm">Version Numbering Quickfix</a><br>
-<a href="ref-api-sincetag-qf.htm">Since Tag Quickfix</a><br>
-<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quickfix</a>
+<a href="ref-api-api-filter-qf.htm">Add API Problem Filter Quick Fix</a><br>
+<a href="ref-api-version-qf.htm">Version Numbering Quick Fix</a><br>
+<a href="ref-api-sincetag-qf.htm">Since Tag Quick Fix</a><br>
+<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quick Fix</a>
 </p>
 
 </body>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-remove-api-filter-qf.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-remove-api-filter-qf.htm
index ba80834..d1f9d6f 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-remove-api-filter-qf.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-remove-api-filter-qf.htm
@@ -2,16 +2,16 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../../book.css" type="text/css">
-  <title>Remove API Problem Filter Quickfix</title>
+  <title>Remove API Problem Filter Quick Fix</title>
 </head>
 <body>
-<h1>Remove API Problem Filter Quickfix</h1>
-<p>This quickfix can be used to quickly remove an API problem filter for an unsupported API problem filter problem.</p>
+<h1>Remove API Problem Filter Quick Fix</h1>
+<p>This quick fix can be used to quickly remove an API problem filter for an unsupported API problem filter problem.</p>
 <p>This quick fix is available in one of two places:</p>
 <ol>
   <li><a href="#problems"><strong>The Problems view</strong></a>.</li>
@@ -20,19 +20,19 @@
 </ol>
 <h3><a name="problems" id="problems"></a>The Problems view</h3>
 <ul>
-  <li>Open the <b>Problem</b> view.</li>
-  <li>Select an API Tooling problem.
+  <li>Open the <b>Problems</b> view.</li>
+  <li>Select an API Tools problem.
   <p><img src="../images/remove-filter-qf.png" alt="API problem selected in problems view"></p>
   </li>
-  <li>Use <b>Ctrl + 1</b> to trigger the quickfix from the problem view (or use the context menu as shown above).
-  <p><img src="../images/remove-filter-dialog-qf.png" alt="Remove unused filter API problem quickfix dialog"></p>
+  <li>Use <b>Ctrl + 1</b> to trigger the quick fix from the Problems view (or use the context menu as shown above).
+  <p><img src="../images/remove-filter-dialog-qf.png" alt="Remove unused filter API problem quick fix dialog"></p>
   </li>
 </ul>
 <h3><a name="editing" id="editing"></a>Editing the resource</h3>
 <ul>
   <li>Open the resource the API problem exists in.</li>
   <li>Use <b>Ctrl + 1</b> on the corresponding problem.
-  	<p><img src="../images/remove-filter-editor-qf.png" alt="Filter quickfix in an editor"></p>
+  	<p><img src="../images/remove-filter-editor-qf.png" alt="Filter quick fix in an editor"></p>
   </li>
 </ul>
 <br>
@@ -46,9 +46,9 @@
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
 <a href="../propertypages/ref-filters-prop.htm">API Problem Filters Property Page</a><br>
-<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quickfix</a><br>
-<a href="ref-api-version-qf.htm">Version Numbering Quickfix</a><br>
-<a href="ref-api-sincetag-qf.htm">Since Tag Quickfix</a>
+<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quick Fix</a><br>
+<a href="ref-api-version-qf.htm">Version Numbering Quick Fix</a><br>
+<a href="ref-api-sincetag-qf.htm">Since Tag Quick Fix</a>
 </p>
 
 </body>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-sincetag-qf.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-sincetag-qf.htm
index 7cdc51c..edc2135 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-sincetag-qf.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-sincetag-qf.htm
@@ -2,16 +2,16 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../../book.css" type="text/css">
-  <title>Since Tag Quickfix</title>
+  <title>Since Tag Quick Fix</title>
 </head>
 <body>
-<h1>Since Tag Quickfix</h1>
-<p>This quickfix can be used to quickly add since tags or help correct problems with existing since tags.</p>
+<h1>Since Tag Quick Fix</h1>
+<p>This quick fix can be used to quickly add since tags or help correct problems with existing since tags.</p>
 <p>This quick fix is available in one of two places:</p>
 <ol>
   <li><a href="#problems"><strong>The Problems view</strong></a>.</li>
@@ -20,19 +20,19 @@
 </ol>
 <h3><a name="problems" id="problems"></a>The Problems view</h3>
 <ul>
-  <li>Open the <b>Problem</b> view.</li>
+  <li>Open the <b>Problems</b> view.</li>
   <li>Select a since tag problem.
-  <p><img src="../images/sincetag-qf.png" alt="Since tag problem quickfix"></p>
+  <p><img src="../images/sincetag-qf.png" alt="Since tag problem quick fix"></p>
   </li>
-  <li>Use <b>Ctrl + 1</b> to trigger the quickfix from the problem view (or use the context menu as shown above).
-  <p><img src="../images/sincetag-dialog-qf.png" alt="Since tag quickfix dialog"></p>
+  <li>Use <b>Ctrl + 1</b> to trigger the quick fix from the Problems view (or use the context menu as shown above).
+  <p><img src="../images/sincetag-dialog-qf.png" alt="Since tag quick fix dialog"></p>
   </li>
 </ul>
 <h3><a name="editing" id="editing"></a>Editing the resource</h3>
 <ul>
   <li>Open the resource the API problem exists in.</li>
   <li>Use <b>Ctrl + 1</b> on the corresponding problem.
-  	<p><img src="../images/sincetag-editor-qf.png" alt="Since tag problem editor quickfix"></p>
+  	<p><img src="../images/sincetag-editor-qf.png" alt="Since tag problem editor quick fix"></p>
   </li>
 </ul>
 <br>
@@ -40,10 +40,10 @@
 <br>
 <p><img src="../../../images/ngrelr.png" alt="Related reference"></p>
 <p>
-<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quickfix</a><br>
-<a href="ref-api-api-filter-qf.htm">Add API Problem Filter Quickfix</a><br>
-<a href="ref-api-version-qf.htm">Version Numbering Quickfix</a><br>
-<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quickfix</a>
+<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quick Fix</a><br>
+<a href="ref-api-api-filter-qf.htm">Add API Problem Filter Quick Fix</a><br>
+<a href="ref-api-version-qf.htm">Version Numbering Quick Fix</a><br>
+<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quick Fix</a>
 </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-version-qf.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-version-qf.htm
index 93cbc33..267a4ed 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-version-qf.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/quickfixes/ref-api-version-qf.htm
@@ -2,17 +2,17 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../../book.css" type="text/css">
-  <title>Version Numbering Quickfix</title>
+  <title>Version Numbering Quick Fix</title>
 </head>
 <body>
-<h1>Version Numbering Quickfix</h1>
-<p>This quickfix is used to quickly and easily correct version numbering problems for your plug-in.</p>
-<p>This quickfix is available in one of two places:</p>
+<h1>Version Numbering Quick Fix</h1>
+<p>This quick fix is used to quickly and easily correct version numbering problems for your plug-in.</p>
+<p>This quick fix is available in one of two places:</p>
 
 <ol>
   <li><a href="#problems"><strong>The Problems view</strong></a>.</li>
@@ -21,12 +21,12 @@
 </ol>
 <h3><a name="problems" id="problems"></a>The Problems view</h3>
 <ul>
-  <li>Open the <b>Problem</b> view.</li>
+  <li>Open the <b>Problems</b> view.</li>
   <li>Select a version numbering problem.
  	 <p><img src="../images/version-qf.png" alt="Version numbering problem in the problems view"></p>
   </li>
-  <li>Use <b>Ctrl + 1</b> to trigger the quickfix from the problem view (or use the context menu as shown above).
-  	<p><img src="../images/version-dialog-qf.png" alt="Version numbering quickfix dialog"></p>
+  <li>Use <b>Ctrl + 1</b> to trigger the quick fix from the Problems view (or use the context menu as shown above).
+  	<p><img src="../images/version-dialog-qf.png" alt="Version numbering quick fix dialog"></p>
   </li>
 </ul>
 
@@ -35,16 +35,16 @@
   <li>Open the <b>manifest editor</b> on the manifest with the version problems.</li>
   <li>Navigate to the MANIFEST.MF tab.</li>
   <li>Use <b>Ctrl + 1</b> on the corresponding version problem.
-  	<p><img src="../images/version-editor-qf.png" alt="Version problem editor quickfix"></p>
+  	<p><img src="../images/version-editor-qf.png" alt="Version problem editor quick fix"></p>
   </li>
 </ul>
 <br>
 <p><img src="../../../images/ngrelr.png" alt="Related reference"></p>
 <p>
-<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quickfix</a><br>
-<a href="ref-api-api-filter-qf.htm">Add API Problem Filter Quickfix</a><br>
-<a href="ref-api-sincetag-qf.htm">Since Tag Quickfix</a><br>
-<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quickfix</a>
+<a href="ref-api-missing-baseline-qf.htm">Missing API Baseline Quick Fix</a><br>
+<a href="ref-api-api-filter-qf.htm">Add API Problem Filter Quick Fix</a><br>
+<a href="ref-api-sincetag-qf.htm">Since Tag Quick Fix</a><br>
+<a href="ref-api-remove-api-filter-qf.htm">Remove Unused Problem Filter Quick Fix</a>
 </p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/views/ref-api-tooling-view.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/views/ref-api-tooling-view.htm
index 4bcf9a3..af1ee50 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/views/ref-api-tooling-view.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/views/ref-api-tooling-view.htm
@@ -2,21 +2,21 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Api Tooling View</title>
+<title>API Tools View</title>
 <script language="JavaScript" type="text/javascript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
 <link href="../../../book.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
-<h1>Api Tooling View</h1>
-<p>The <strong>Api Tooling</strong> view shows all deltas found between a set of selected elements (project, source folders,
-package fragments, or compilation units) and a reference baseline. The<strong>API Tooling </strong>view is available under <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.pde.api.tools.ui.views.apitooling.views.apitoolingview)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open API Tooling View">
-<strong>Window > Show View > Other... > API Tooling > API Tooling</strong>
+<h1>API Tools View</h1>
+<p>The <strong>API Tools</strong> view shows all deltas found between a set of selected elements (project, source folders,
+package fragments, or compilation units) and a reference baseline. The<strong>API Tools </strong>view is available under <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.pde.api.tools.ui.views.apitooling.views.apitoolingview)")'>
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Open API Tools View">
+<strong>Window > Show View > Other... > API Tools > API Tools</strong>
 </a>. </p>
-<p><img src="../images/api_tooling.png" alt="API Tooling" ></p>
+<p><img src="../images/api_tooling.png" alt="API Tools" ></p>
 
 <h2>Delta details</h2>
 <p>The view itself is showing only the delta's localized message with an overlay image that tells whether the corresponding delta
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-compare-wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-compare-wizard.htm
index 660943f..c5e94d6 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-compare-wizard.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-compare-wizard.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -13,7 +13,7 @@
 <body>
 <h1>API Compare Wizard</h1>
 <p>The API compare wizard can be used to compare a selected set of selected elements (projects, source folders, package fragments, or compilation units) to a selected API baseline and show those
-results in the <b><a href="../views/ref-api-tooling-view.htm">API Tooling View</a></b></p>
+results in the <b><a href="../views/ref-api-tooling-view.htm">API Tools View</a></b></p>
 <br>
 <table border="1" cellspacing="0" cellpadding= "5" width="100%">
   <thead>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-setup-wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-setup-wizard.htm
index 8f2bccb..d149a64 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-setup-wizard.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-setup-wizard.htm
@@ -2,21 +2,21 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../../../book.css" type="text/css">
-  <title>API Tooling Setup Wizard</title>
+  <title>API Tools Setup Wizard</title>
 </head>
 <body>
-<h1>API Tooling Setup Wizard</h1>
-<p>Before any plug-in project can make use of API Tooling it must first be set up to use the tooling, which can be done using the API Tooling setup wizard.</p> 
+<h1>API Tools Setup Wizard</h1>
+<p>Before any plug-in project can make use of API Tools it must first be set up to use the tooling, which can be done using the API Tools setup wizard.</p> 
 <p>
 To activate the wizard use the following steps:</p>
 <ol>
 <li>Open the context menu on a plug-in project and select <strong><a href="../../actions/ref-pdetools.htm">PDE Tools</a></strong></li>
-<li>On the resulting fly-out menu select <strong><a href="../actions/ref-apitooling-setup-action.htm">API Tooling Setup...</a></strong></li>
+<li>On the resulting fly-out menu select <strong><a href="../actions/ref-apitooling-setup-action.htm">API Tools Setup...</a></strong></li>
 </ol>
 <table border="1" cellspacing="0" cellpadding= "5" width="100%">
   <thead>
@@ -34,7 +34,7 @@ To activate the wizard use the following steps:</p>
     </tr>
     <tr>
       <td rowspan="1" colspan="1" valign="top" align="left">Projects</td>
-      <td rowspan="1" colspan="1" valign="top" align="left">This list contains all of the projects in the current workspace that can be set up to use API Tooling. To be available to be converted a project must be a Java plug-in project.</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">This list contains all of the projects in the current workspace that can be set up to use API Tools. To be available to be converted a project must be a Java plug-in project.</td>
       <td rowspan="1" colspan="1" valign="top" align="left"> </td>
     </tr>
     <tr>
@@ -49,7 +49,7 @@ To activate the wizard use the following steps:</p>
     </tr>
     <tr>
       <td colspan="1" valign="top" align="left">Delete component.xml after update is complete</td>
-      <td colspan="1" valign="top" align="left"><p>This option will remove the component.xml file from your plug-in project when the setup is complete. A component.xml file was used prior to API Tooling to describe the API of your plug-in.</p>
+      <td colspan="1" valign="top" align="left"><p>This option will remove the component.xml file from your plug-in project when the setup is complete. A component.xml file was used prior to API Tools to describe the API of your plug-in.</p>
       <p>If a component.xml file is found it will be used by the setup wizard to add <a href="../api_javadoc_tags.htm"><strong>API restrictions</strong></a> (Javadoc tags) to the corresponding source files in your plug-in. All proposed changes can be viewed on the preview page for the wizard.</p></td>
       <td colspan="1" valign="top" align="center">On</td>
     </tr>
@@ -59,22 +59,22 @@ To activate the wizard use the following steps:</p>
 The first page of the wizard allows you to select projects and set additional options.
 </p>
 <p>
-<img src="../images/api-setup-wizard.png" alt="API Tooling setup wizard page 1">
+<img src="../images/api-setup-wizard.png" alt="API Tools setup wizard page 1">
 </p>
 <p>
 On the preview page you can see all of the changes that will be made to the project and any source files.
 </p>
 <p>
-<img src="../images/api-setup-wizard-preview.png" alt="API Tooling setup preview page">
+<img src="../images/api-setup-wizard-preview.png" alt="API Tools setup preview page">
 </p>
 <br>
 <p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
 <p> 
-<a href="../../../tasks/api_tooling_setup.htm">Setting up API Tooling</a>
+<a href="../../../tasks/api_tooling_setup.htm">Setting up API Tools</a>
 </p>
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
-<a href="../actions/ref-apitooling-setup-action.htm">API Tooling Setup Action</a><br>
+<a href="../actions/ref-apitooling-setup-action.htm">API Tools Setup Action</a><br>
 <a href="../../actions/ref-pdetools.htm">PDE Tools Menu</a>
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-use-dialog.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-use-dialog.htm
index 4709267..46d342e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-use-dialog.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-api-use-dialog.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -39,103 +39,115 @@ To create a new use scan configuration simply double-click the <em>API Use Repor
       <td rowspan="1" colspan="1" valign="top" align="center">API Baseline</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > API Baseline</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > API Baseline</td>
       <td rowspan="1" colspan="1" valign="top" align="left">You can choose any API baseline from the combo box to analyze</td>
       <td rowspan="1" colspan="1" valign="top" align="center">Default baseline or empty</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Baselines...</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Baselines...</td>
       <td rowspan="1" colspan="1" valign="top" align="left"> Allows access to the  <b><a href="../preferences/ref-baselines.htm">API Baselines</a></b> preference page to configure the baseline to analyze.</td>
       <td rowspan="1" colspan="1" valign="top" align="center"> </td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Target Definition</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Target Definition</td>
       <td rowspan="1" colspan="1" valign="top" align="left">You can choose any target definition from the combo box to analyze</td>
       <td rowspan="1" colspan="1" valign="top" align="center">The active target definition or empty</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Targets</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Targets</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows access to the <b><a href="../../../guide/tools/preference_pages/target_platform.htm">Target Platform</a></b> preference page to configure the target definition to analyze.</td>
       <td rowspan="1" colspan="1" valign="top" align="center"> </td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Directory</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Directory</td>
       <td rowspan="1" colspan="1" valign="top" align="left">You can enter the absolute path to a directory containing the bundles.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">empty</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Browse...</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Browse...</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to browse for a folder of bundles to analyze.</td>
       <td rowspan="1" colspan="1" valign="top" align="center"> </td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Generate HTML report for existing use scan</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Analyze > Generate HTML report for existing use scan</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to create a report for an existing scan and not have to perform the analysis again.</td>
       <td rowspan="1" colspan="1" valign="top" align="center"> </td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Search for > References to</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Search for > References to</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to specify the name (or matching RegEx) of the bundle that you want to see references to. 
       Consider the following example: <code>org\.eclipse.*</code>. In this example we are saying that we want to see all references to any bundle that starts with the name <code>org.eclipse.</code>.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">empty</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Search for > API references</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Search for > API references</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to scan for API references.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">unchecked</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Search for > Internal references</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Search for > Internal references</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to scan for internal references.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">checked</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Search for > Illegal API Use</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Search for > Illegal API Use</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to scan for illegal API usage i.e. usage of restricted API members.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">unchecked</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Search in > Bundles matching</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Search in > Bundles matching</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to specify the name (or matching RegEx) of the bundle(s) that you want to scan for references from i.e. a search scope. 
       Consider the following example: <code>.*</code>. In this example we are saying that we want to search in all bundles whose name matches any character sequence. 
       The same effect can be achieved leaving the field blank.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">empty</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Report Output Location</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Report Type</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Allows you to choose between two html report formats.  If <em>Referenced bundles report (Producers)</em> is selected the report
+      will list all of the bundles containing the types that are being referenced in the searched bundles.  If <em>Referencing bundles report (Consumers)</em> is selected the report will
+      be organized to show all of the bundles in the search scope that contain references.
+      <p>
+      When switching report types, check that the <em>References to</em> and <em>Bundles matching</em> regular expressions have the correct values.  When using a wildcard expression such as .* in one
+      setting, switching to another report type often requires the wilcard being moved to the other setting to get the most useful report.
+      </p> 
+      </td>
+      <td rowspan="1" colspan="1" valign="top" align="center">Referenced bundles report (Producers)</td>
+    </tr>
+    <tr>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Report Output Location</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to specify the absolute path where any generated reports should be placed.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">empty</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Browse...</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Browse...</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to select the location to output any reports.</td>
       <td rowspan="1" colspan="1" valign="top" align="center"> </td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Clean report directory before reporting new results</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Clean report directory before reporting new results</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to clear out an existing XML report location prior to the scan reporting any results. 
       It should be noted that this option will completely remove the specified report directory if it exists, with all child directories being recursively removed as well.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">unchecked</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Create HTML reports</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Create HTML reports</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Converts all of the XML output into formatted HTML and place it in <code><report location>\html</code></td>
       <td rowspan="1" colspan="1" valign="top" align="center">unchecked</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Clean HTML report location</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Clean HTML report location</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to clear out an existing HTML location prior to creating new reports. 
       It should be noted that this option will completely remove the specified HTML directory if it exists, with all child directories being recursively removed as well.
       This option only enables if you select the <b>Create HTML Reports</b> option mentioned above.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">unchecked</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Open report when search completes</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Open report when search completes</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Opens the HTML report when the analysis is complete. This option only enables if you select the <b>Create HTML Reports</b> option mentioned above.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">unchecked</td>
     </tr>
     <tr>
-      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Description</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Reporting > Description</td>
       <td rowspan="1" colspan="1" valign="top" align="left">Allows you to enter a human-readable description for the report.</td>
       <td rowspan="1" colspan="1" valign="top" align="center">empty</td>
     </tr>
@@ -144,14 +156,13 @@ To create a new use scan configuration simply double-click the <em>API Use Repor
 
 <h3>Patterns Tab</h3>
 <p>The <b>Patterns</b> tab allows you to create a variety of Regular Expression patterns to control the use analysis. 
-There are currently three supported kinds of patterns: 
+There are currently three supported kinds of patterns:</p> 
 	<ol>
 		<li>Archive Pattern - Allows you to specify nested archives that should be ignored during analysis.</li>
 		<li>Package Pattern - Allows you to specify packages that should be API or internal without having to update your bundle manifest.</li>
 		<li>Report Conversion Pattern - Allows you to create a package name regular expression to filter references taht are reported. All reported referece are filtered
 		using their fully qualified package name.</li>
 	</ol>
-</p>
 
 <p><img src="../images/use-ui-patterns.png" alt="Patterns tab" border="0"></p><br>
 
@@ -177,7 +188,7 @@ There are currently three supported kinds of patterns:
     </tr>
     <tr>
       <td rowspan="1" colspan="1" valign="top" align="left">Remove</td>
-      <td rowspan="1" colspan="1" valign="top" align="left">Allows you to remove the selected pattern(s). You can remove more than one pattern at a time.versio</td>
+      <td rowspan="1" colspan="1" valign="top" align="left">Allows you to remove the selected pattern(s). You can remove more than one pattern at a time.</td>
       <td rowspan="1" colspan="1" valign="top" align="center"> </td>
     </tr>
   </tbody>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-apiuse-patterns-wizard.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-apiuse-patterns-wizard.htm
old mode 100644
new mode 100755
index 9b48e5e..64e3348
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-apiuse-patterns-wizard.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/api-tooling/wizards/ref-apiuse-patterns-wizard.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -153,11 +153,11 @@ exclusion patterns used to prune the references that are reported.
 
 <p> <img border="0" src="../../../images/ngrelt.png" alt="Related tasks" > </p>
 <p> 
-<a href="../../../tasks/api_tooling_setup.htm">Setting up API Tooling</a>
+<a href="../../../tasks/api_tooling_setup.htm">Setting up API Tools</a>
 </p>
 <p><img src="../../../images/ngrelr.png" alt="Related reference" border="0"></p>
 <p>
-<a href="../actions/ref-apitooling-setup-action.htm">API Tooling Setup Action</a><br>
+<a href="../actions/ref-apitooling-setup-action.htm">API Tools Setup Action</a><br>
 <a href="../../actions/ref-pdetools.htm">PDE Tools Menu</a><br>
 <a href="ref-api-use-dialog.htm">API Use Reports</a>
 </p>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/extension-points/index.html b/eclipse/plugins/org.eclipse.pde.doc.user/reference/extension-points/index.html
index 14cd53e..eb51187 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/extension-points/index.html
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/extension-points/index.html
@@ -12,11 +12,9 @@
   PDE infrastructure: </p>
 <ul>
   <li><a href="org_eclipse_pde_build_fetchFactories.html">org.eclipse.pde.build.fetchFactories</a></li>
-  <li><a href="org_eclipse_pde_core_bundleImporters.html">org.eclipse.pde.core.bundleImporters</a></li>
   <li><a href="org_eclipse_pde_core_javadoc.html">org.eclipse.pde.core.javadoc</a></li>
   <li><a href="org_eclipse_pde_core_source.html">org.eclipse.pde.core.source</a></li>
   <li><a href="org_eclipse_pde_core_targets.html">org.eclipse.pde.core.targets</a></li>
-  <li><a href="org_eclipse_pde_ui_bundleImportPages.html">org.eclipse.pde.ui.bundleImportPages</a></li>
   <li><a href="org_eclipse_pde_ui_launchShortcuts.html">org.eclipse.pde.ui.launchShortcuts</a></li>
   <li><a href="org_eclipse_pde_ui_newExtension.html">org.eclipse.pde.ui.newExtension</a></li>
   <li><a href="org_eclipse_pde_ui_osgiFrameworks.html">org.eclipse.pde.ui.osgiFrameworks</a></li>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/misc/api-usage-rules.html b/eclipse/plugins/org.eclipse.pde.doc.user/reference/misc/api-usage-rules.html
index 29cbccc..5c280ff 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/misc/api-usage-rules.html
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/misc/api-usage-rules.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -15,7 +15,7 @@
 <h1>
 Eclipse platform<br>
 API rules of engagement</h1>
-<i><font size=-1>Version 0.15 - Last revised 12:00 May 30, 2001</font></i>
+<i>Version 0.15 - Last revised 12:00 May 30, 2001</i>
 <p>Here are the rules of engagement for clients of the Eclipse platform
 API (and other components).</p>
 <h2>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/reference/pde_feature_generating_build.htm b/eclipse/plugins/org.eclipse.pde.doc.user/reference/pde_feature_generating_build.htm
index e6830c8..34d3911 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/reference/pde_feature_generating_build.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/reference/pde_feature_generating_build.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -127,8 +127,7 @@ Java Code</a> from the JDT Plug-in Developer Guide).</li>
 <li><span style="font-weight: bold;">javacErrors.<library></span>
 - set the error options to pass to the compiler.  (See the -err option in <a
  href="../../org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm">Compiling
-Java Code</a> from the JDT Plug-in Developer Guide).<br>
-    <span style="font-weight: bold;"></span></li>
+Java Code</a> from the JDT Plug-in Developer Guide).</li>
   <li><span style="font-weight: bold;">javacDefaultEncoding.<library></span>
 - sets default encoding to use when compiling the given library.</li>
   <li><span style="font-weight: bold;">javacCustomEncodings.<library></span>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_baseline.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_baseline.htm
index f887d8a..d61b38f 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_baseline.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_baseline.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
@@ -10,7 +10,7 @@
 </head>
 <body>
 <h1>Setting up an API baseline</h1>
-<p>Once your plug-in is converted to use API tooling, you need to set up a baseline in order to get the
+<p>Once your plug-in is converted to use API Tools, you need to set up a baseline in order to get the
 compatibility analysis performed for your plug-in.</p>
 <p>To create an API baseline do the following:</p>
 <ol>
@@ -32,7 +32,7 @@ compatibility analysis performed for your plug-in.</p>
 <p>
 <a href="../reference/api-tooling/preferences/ref-baselines.htm">API Baselines Preferences</a><br>
 <a href="../reference/api-tooling/wizards/ref-api-baseline-wizard.htm">API Baseline Wizard</a><br>
-<a href="../reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm">Missing API Baseline Quickfix</a>
+<a href="../reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm">Missing API Baseline Quick Fix</a>
 </p>
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_compare_to_baseline.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_compare_to_baseline.htm
index 60467e0..e9c0a59 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_compare_to_baseline.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_compare_to_baseline.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
@@ -10,7 +10,7 @@
 </head>
 <body>
 <h1>Comparing to an API baseline</h1>
-<p>Any API tooling enabled project in your workspace can be compared to any one of the API baselines set up in your workspace. In addition to
+<p>Any API Tools enabled project in your workspace can be compared to any one of the API baselines set up in your workspace. In addition to
 selecting projects to compare to a baseline you can also select (or multi-select) any of the following within an API tools enabled project:
 </p> 
 <ul>
@@ -26,7 +26,7 @@ works only for Java elements.</p>
 <ol>
 <li>Select the elements to compare using the criteria mentioned above.</li>
 <li>Select the API baseline to compare to in the <b><a href="../reference/api-tooling/wizards/ref-api-compare-wizard.htm">Compare Wizard</a></b></li>
-<li>Click <b>Finish</b> and you are all set. Any results from the compare will be shown in the <b><a href="../reference/api-tooling/views/ref-api-tooling-view.htm">API Tooling</a></b> view.</li>
+<li>Click <b>Finish</b> and you are all set. Any results from the compare will be shown in the <b><a href="../reference/api-tooling/views/ref-api-tooling-view.htm">API Tools</a></b> view.</li>
 </ol>
 <br>
 <p><img border="0" src="../images/ngrelt.png" alt="Related tasks"></p>
@@ -36,7 +36,7 @@ works only for Java elements.</p>
 <p>
 <a href="../reference/api-tooling/preferences/ref-baselines.htm">API Baselines Preferences</a><br>
 <a href="../reference/api-tooling/wizards/ref-api-baseline-wizard.htm">API Baseline Wizard</a><br>
-<a href="../reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm">Missing API Baseline Quickfix</a>
+<a href="../reference/api-tooling/quickfixes/ref-api-missing-baseline-qf.htm">Missing API Baseline Quick Fix</a>
 </p>
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_create_filters.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_create_filters.htm
index 7d90934..d4eb1fb 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_create_filters.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_create_filters.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
@@ -10,20 +10,20 @@
 </head>
 <body>
 <h1>Creating API Problem Filters</h1>
-<p>Filters can be used to remove <em>known</em> or <em>expected</em> API problems that cannot be readily corrected. Problem filters can be created easily using the <strong><a href="../reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm">Create API Problem Filter</a></strong> quickfix. </p>
-<p>Using the quickfix let's see how we can add a new filter.</p>
+<p>Filters can be used to remove <em>known</em> or <em>expected</em> API problems that cannot be readily corrected. Problem filters can be created easily using the <strong><a href="../reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm">Create API Problem Filter</a></strong> quick fix. </p>
+<p>Using the quick fix let's see how we can add a new filter.</p>
 <h3>The Problems view</h3>
 <ul>
-<li>Open the <b>Problem</b> view.</li>
-<li>Select an API Tooling problem.</li>
-<li>Use <b>Ctrl + 1</b> to trigger the quickfix from the problem view.</li>
+<li>Open the <b>Problems</b> view.</li>
+<li>Select an API Tools problem.</li>
+<li>Use <b>Ctrl + 1</b> to trigger the quick fix from the Problems view.</li>
 <li>Select Finish to create the new filter.</li>
 </ul>
 <h3>Editing the resource</h3>
 <ul>
  <li>Open the resource the API problem exists in.</li>
  <li>Use <b>Ctrl + 1</b> on the corresponding problem.</li>
- <li>One of the quickfix proposals will be the creation of a problem filter for the corresponding problem.</li>
+ <li>One of the quick fix proposals will be the creation of a problem filter for the corresponding problem.</li>
  <li>Select it and the problem filter is added for you.</li>
 </ul>
 <p>Once the problem filter has been created the corresponding resource is rebuilt and the problem is removed from the Problems view and any open editors.</p>
@@ -31,7 +31,7 @@
 <p><img src="../images/ngrelr.png" alt="Related reference"></p>
 <p>
 <a href="../reference/api-tooling/propertypages/ref-filters-prop.htm">API Problem Filters Property Page</a><br>
-<a href="../reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm">Add API Problem Filter Quickfix</a>
+<a href="../reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm">Add API Problem Filter Quick Fix</a>
 </p>
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_options.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_options.htm
index 8624ca5..3586f00 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_options.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_options.htm
@@ -1,15 +1,15 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
-<title>Changing API Tooling options</title>
+<title>Changing API Tools options</title>
 <script type="text/javaScript" language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
 </head>
 <body>
-<h1>Changing API Tooling options</h1>
+<h1>Changing API Tools options</h1>
 <p>The options can be changed per project or per workspace.</p>
 <ol>
 <li>First you need to open the preference page. Do one of the following according to the desired scope:
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_remove_filters.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_remove_filters.htm
index bdb7879..7444492 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_remove_filters.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_remove_filters.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
@@ -29,8 +29,8 @@
 <p><img src="../images/ngrelr.png" alt="Related reference"></p>
 <p>
 <a href="../reference/api-tooling/propertypages/ref-filters-prop.htm">API Problem Filters Property Page</a><br>
-<a href="../reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm">Add API Problem Filter Quickfix</a><br>
-<a href="../reference/api-tooling/quickfixes/ref-api-remove-api-filter-qf.htm">Remove Unused API Problem Filter Quickfix</a>
+<a href="../reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm">Add API Problem Filter Quick Fix</a><br>
+<a href="../reference/api-tooling/quickfixes/ref-api-remove-api-filter-qf.htm">Remove Unused API Problem Filter Quick Fix</a>
 </p>
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_setup.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_setup.htm
index 287304e..4f5f96b 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_setup.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/api_tooling_setup.htm
@@ -1,24 +1,24 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
-<title>Setting up API Tooling</title>
+<title>Setting up API Tools</title>
 <script type="text/javaScript" language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
 </head>
 <body>
-<h1>Setting up API Tooling</h1>
+<h1>Setting up API Tools</h1>
 <h2>Configure existing plug-ins</h2>
 <p>This section explains how to enable your existing plug-ins for API analysis.</p>
 <ol>
 <li>Select the project you want to convert.</li>
-<li>Right-click and select <b><a href="../reference/actions/ref-pdetools.htm">PDE Tools</a> > <a href="../reference/api-tooling/actions/ref-apitooling-setup-action.htm">API Tooling Setup...</a></b></li>
-<li>Once the <a href="../reference/api-tooling/wizards/ref-api-setup-wizard.htm"><strong>API Tooling Setup</strong></a> wizard is open, check that the project is selected.</li>
+<li>Right-click and select <b><a href="../reference/actions/ref-pdetools.htm">PDE Tools</a> > <a href="../reference/api-tooling/actions/ref-apitooling-setup-action.htm">API Tools Setup...</a></b></li>
+<li>Once the <a href="../reference/api-tooling/wizards/ref-api-setup-wizard.htm"><strong>API Tools Setup</strong></a> wizard is open, check that the project is selected.</li>
 <li>If your project contains a file <code>component.xml</code>, you can uncheck the checkbox to preserve it after conversion.</li>
 <li>Click <b>Next</b> if you want to preview the changes, or <b>Finish</b> otherwise.</li>
-<li>Your plug-in is now converted to use API tooling.</li>
+<li>Your plug-in is now converted to use API Tools.</li>
 </ol>
 
 <h2>Configure a new plug-in</h2>
@@ -40,9 +40,9 @@
 	</p>
 	<p><img src="../images/ngrelr.png"  alt="Related reference" border="0"></p>
 	<p>
-		<a href="../reference/api-tooling/wizards/ref-api-setup-wizard.htm">API Tooling Setup Wizard</a><br>
+		<a href="../reference/api-tooling/wizards/ref-api-setup-wizard.htm">API Tools Setup Wizard</a><br>
 		<a href="../reference/actions/ref-pdetools.htm">PDE Tools Menu</a><br>
-		<a href="../reference/api-tooling/actions/ref-apitooling-setup-action.htm">API Tooling Setup Command</a><br>
+		<a href="../reference/api-tooling/actions/ref-apitooling-setup-action.htm">API Tools Setup Command</a><br>
 		<a href="../reference/api-tooling/api_javadoc_tags.htm">Defining API Restrictions</a>
 	</p>
 </body>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_compilation_env.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_compilation_env.htm
index f0adf6a..650798f 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_compilation_env.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_compilation_env.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
@@ -198,8 +198,7 @@ environment on this list that is available in your build configuration
 (see above section) will be used to compile your bundle.<br>
 <br>
 Example:<br>
-<pre style="margin-left: 40px;"><buildDirectory>/plugins/bundleA/<br>	META-INF/manifest.mf: Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0, J2SE-1.3<br>	build.properties:     jre.compilation.profile=J2SE-1.4<br><br><span
- style="font-weight: bold;"></span><buildConfiguration>/<br>	build.properties:  J2SE-1.3=C:/Java1.3/jre/lib/rt.jar;C:/Java1.3/jre/lib/i18n.jar<br>			   J2SE-1.4=C:/Java1.4/jre/lib/rt.jar;C:/Java1.4/jre/lib/jsse.jar<br></pre>
+<pre style="margin-left: 40px;"><buildDirectory>/plugins/bundleA/<br>	META-INF/manifest.mf: Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0, J2SE-1.3<br>	build.properties:     jre.compilation.profile=J2SE-1.4<br><br><buildConfiguration>/<br>	build.properties:  J2SE-1.3=C:/Java1.3/jre/lib/rt.jar;C:/Java1.3/jre/lib/i18n.jar<br>			   J2SE-1.4=C:/Java1.4/jre/lib/rt.jar;C:/Java1.4/jre/lib/jsse.jar<br></pre>
 <p style="margin-left: 40px;">In the above setup, the list of
 environments considered (in order) is: J2SE-1.4, 
 CDC-1.0/Foundation-1.0, J2SE-1.3.  The bundle can run on
@@ -214,7 +213,7 @@ used to compile the bundle.  In that case, the source and target
 levels would be 1.3 and 1.1.<br>
 </p>
 <h2>Explicitly Setting Compilation values</h2>
-If, for some reason, using the enviroments as outlined above does not
+If, for some reason, using the environments as outlined above does not
 result in the desired setup, then it is possible for a bundle to
 explicitly list the settings it requires.  For example, if you
 have a bundle that uses J2SE-1.4 with asserts, then the source and
@@ -222,7 +221,7 @@ target levels would need to be 1.4, instead of the default 1.3 and 1.2.<br>
 <br>
 To explicitly set the java source and target levels, the bundle should
 set the properties <tt style="font-weight: bold;">javacSource</tt> and
-<tt style="font-weight: bold;">javacTarget</tt> in it's
+<tt style="font-weight: bold;">javacTarget</tt> in its
 build.properties
 file.  These properties will override the values derived from the
 environment settings.<br>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_compiler_options.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_compiler_options.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_custom_callbacks.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_custom_callbacks.htm
index 49f6427..3172ac2 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_custom_callbacks.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_custom_callbacks.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -53,8 +53,7 @@ called before and after all the compilation targets are called. 
 Both the pre and post targets are provided with the property <tt>build.result.folder</tt>
 which is the folder to which the
 results of the
-build will be copied.<br>
-    <span style="font-weight: bold;"></span></li>
+build will be copied.</li>
   <li><span style="font-weight: bold;">Compilation Targets</span>: 
 The build.xml defines a compilation target for each jar being built (eg
 @dot for the bundle itself, or library.jar).  Each compilation
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_feature_generating_antcommandline.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_feature_generating_antcommandline.htm
index 4124f1b..44dd8b4 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_feature_generating_antcommandline.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_feature_generating_antcommandline.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -230,8 +230,7 @@ false. Note that the site.xml is not generated nor updated;</td>
         </tr>
 
         <tr>
-          <td style="vertical-align: top;"><span
- style="font-style: italic;"></span> <span style="font-style: italic;">groupConfiguration</span>
+          <td style="vertical-align: top;"><span style="font-style: italic;">groupConfiguration</span>
 : <br>
           </td>
           <td style="vertical-align: top;">optional, whether or not to
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_buildtasks.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_buildtasks.htm
index d35c933..4c0a4f9 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_buildtasks.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_buildtasks.htm
@@ -1,126 +1,507 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-  <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-  <meta http-equiv="Content-Style-Type" content="text/css">
-  <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-  <title>PDE Build Extensions to the p2 Publisher</title>
-</head>
-<body>
-<h1>PDE Build Extensions to the p2 Publisher</h1>
-<p>PDE Build contributes several ant tasks that extend the <a href="../../org.eclipse.platform.doc.isv/guide/p2_publisher.html">p2 publisher</a>.  These tasks allow PDE Build to publish metadata and artifacts directly into a p2 repository.</p>
-<p>The generated build scripts use these tasks in the context of a full build where things like compiling class files and replacing versions are done.  However, some of the 
-tasks may be usefull in special cases to publish metadata directly without running a full build. </p>
-
-<table cellspacing="1" cellpadding="2">
-	<tr><td><b><h3>eclipse.publish.featuresAndBundles</h3></b></td></tr>
-	<tr><td><p>This task is very similar to the <tt>p2.publish.featuresAndBundles</tt> task contributed by the p2 publisher. 
-	This task will publish metadata for pre-existing binary features and plug-ins which are not being built from source.  The task will also publish categories based on a provided site.xml or category.xml file.
-	</p></td></tr>
-	<tr><td><p>This task supports the following attributes:</p>
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt>metadataRepository</tt></td><td>A URI specifying the metadata repository to publish to.</td></tr>
-			<tr><td><tt>artifactRepository</tt></td><td>A URI specifying the artifact repository to publish to.</td></tr>
-			<tr><td><tt>repository</tt></td><td>Sets both metadataRepository and artifactRepository.</td></tr>
-			<tr><td><tt>site</tt></td><td>A URL to a site.xml specifying category information.</td></tr>
-			<tr><td><tt>category</tt></td><td>A URL to a category.xml specifyiny category information.</td></tr>
-			<tr><td><tt>siteQualifier</tt></td><td>A qualifier used to ensure resulting category IUs have unique names.</td></tr>
-			<tr><td><tt><features></tt></td><td>A nested fileset element specifying the locations of binary features to publish.</td></tr>
-			<tr><td><tt><bundles></tt></td><td>A nested fileset element specifying the locations of binary plug-ins to publish.</td></tr>
-		</table>
-	</td></tr>
-</table>
-Example:
-<div  style="border:1px inset">
-<pre>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1"
+    type="text/css" />
+    <title>
+      PDE Build Extensions to the p2 Publisher
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    div.c2 {border:1px inset}
+    h3.c1 {font-weight: bold}
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1>
+      PDE Build Extensions to the p2 Publisher
+    </h1>
+    <p>
+      PDE Build contributes several ant tasks that extend the
+      <a href=
+      "../../org.eclipse.platform.doc.isv/guide/p2_publisher.html">p2
+      publisher</a>. These tasks allow PDE Build to publish
+      metadata and artifacts directly into a p2 repository.
+    </p>
+    <p>
+
+      The generated build scripts use these tasks in the context of
+      a full build where things like compiling class files and
+      replacing versions are done. However, some of the tasks may
+      be usefull in special cases to publish metadata directly
+      without running a full build.
+    </p>
+    <table cellspacing="1" cellpadding="2">
+      <tr>
+        <td>
+          <h3 class="c1">
+            eclipse.publish.featuresAndBundles
+          </h3>
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          <p>
+            This task is very similar to the
+            <tt>p2.publish.featuresAndBundles</tt> task contributed
+            by the p2 publisher. This task will publish metadata
+            for pre-existing binary features and plug-ins which are
+            not being built from source. The task will also publish
+            categories based on a provided site.xml or category.xml
+            file.
+          </p>
+        </td>
+      </tr>
+      <tr>
+
+        <td>
+          <p>
+            This task supports the following attributes:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width=
+          "95%" align="center">
+            <tr>
+              <td>
+                <tt>metadataRepository</tt>
+              </td>
+
+              <td>
+                A URI specifying the metadata repository to publish
+                to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>artifactRepository</tt>
+              </td>
+              <td>
+
+                A URI specifying the artifact repository to publish
+                to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>repository</tt>
+              </td>
+              <td>
+                Sets both metadataRepository and
+                artifactRepository.
+              </td>
+
+            </tr>
+            <tr>
+              <td>
+                <tt>site</tt>
+              </td>
+              <td>
+                A URL to a site.xml specifying category
+                information.
+              </td>
+            </tr>
+
+            <tr>
+              <td>
+                <tt>category</tt>
+              </td>
+              <td>
+                A URL to a category.xml specifyiny category
+                information.
+              </td>
+            </tr>
+            <tr>
+
+              <td>
+                <tt>siteQualifier</tt>
+              </td>
+              <td>
+                A qualifier used to ensure resulting category IUs
+                have unique names.
+              </td>
+            </tr>
+            <tr>
+              <td>
+
+                <tt><features></tt>
+              </td>
+              <td>
+                A nested fileset element specifying the locations
+                of binary features to publish.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><bundles></tt>
+
+              </td>
+              <td>
+                A nested fileset element specifying the locations
+                of binary plug-ins to publish.
+              </td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+    </table>Example:
+    <div class="c2">
+
+      <pre>
  <eclipse.publish.featuresAndBundles repository="file:C:/build/repository" category="file:C:/build/category.xml" >
-     <features dir="C:\eclipse\features\" includes="org.eclipse.cvs_1.1.100.v20090514-7E79FEc9BJ99r9XGQ3CICF"	/>
-     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.cvs_1.0.300.v20090520.jar"	/>
-     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.core_3.3.200.I20090430-0408.jar"	/>
-     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.ssh_3.2.100.I20090508-2000.jar"	/>
-     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.ssh2_3.2.200.I20090508-2000.jar"	/>
-     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.ui_3.3.200.I20090521-1750.jar"	/>
+     <features dir="C:\eclipse\features\" includes="org.eclipse.cvs_1.1.100.v20090514-7E79FEc9BJ99r9XGQ3CICF" />
+     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.cvs_1.0.300.v20090520.jar" />
+     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.core_3.3.200.I20090430-0408.jar" />
+     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.ssh_3.2.100.I20090508-2000.jar" />
+
+     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.ssh2_3.2.200.I20090508-2000.jar" />
+     <bundles dir="C:\eclipse\plugins" includes="org.eclipse.team.cvs.ui_3.3.200.I20090521-1750.jar" />
  </eclipse.publish.featuresAndBundles>
 </pre>
-</div>
-<br>
-<table cellspacing="1" cellpadding="2">
-	<tr><td><b><h3>eclipse.gatherBundle</h3></b></td></tr>
-	<tr><td><p>Publish a plug-in directly from source.  Once the .class files for a bundle are compiled, this task will gather up all the files that make up the binary result and publish them as a p2 artifact with metadata.  
-	This task is used in the <tt>publish.bin.parts</tt> task in the plug-in's generated build.xml, this task replaces the <tt>gather.bin.parts</tt> task when you are building with the p2 publisher.</p>
-	</td></tr>
-	<tr><td><p>This task supports the following attributes:</p>
-	<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-		<tr><td><tt>metadataRepository</tt></td><td>A URI to the metadata repository to publish to.</td></tr>
-		<tr><td><tt>artifactRepository</tt></td><td>A URI to the artifact repository to publish to.</td></tr>
-		<tr><td><tt>buildResultFolder</tt></td><td>Folder containing built .class files, the Manifest and potentially .api_description files.</td></tr>
-		<tr><td><tt>targetFolder</tt></td><td>Content when running with customBuildCallbacks.</td></tr>
-		<tr><td><tt>baseDirectory</tt></td><td>Project location to gather content from when not using customBuildCallbacks</td></tr>
-		<tr><td><tt>unpack</tt></td><td>Whether or not the plug-in should be unpacked into folder form when installed.</td></tr>
-		<tr><td><tt>gatheredSource</tt></td><td>For source bundles, the location of the gather source.</td></tr>
-		<tr><td><tt><outputFolder></tt></td><td>Nested elements specifying alternate locations to get .class files from, used when reusing .class files from the workspace.  
-													  This is an ant FileSet with an additional "<tt>library</tt>" attribute specifying which library the class files belong to</td></tr>
-	</table>
-	</td></tr>
-</table>
-Example:
-<div style="border:1px inset">
-<pre>
+    </div><br />
+    <table cellspacing="1" cellpadding="2">
+      <tr>
+        <td>
+
+          <h3 class="c1">
+            eclipse.gatherBundle
+          </h3>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Publish a plug-in directly from source. Once the .class
+            files for a bundle are compiled, this task will gather
+            up all the files that make up the binary result and
+            publish them as a p2 artifact with metadata. This task
+            is used in the <tt>publish.bin.parts</tt> task in the
+            plug-in's generated build.xml, this task replaces the
+            <tt>gather.bin.parts</tt> task when you are building
+            with the p2 publisher.
+          </p>
+
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            This task supports the following attributes:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width=
+          "95%" align="center">
+            <tr>
+
+              <td>
+                <tt>metadataRepository</tt>
+              </td>
+              <td>
+                A URI to the metadata repository to publish to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+
+                <tt>artifactRepository</tt>
+              </td>
+              <td>
+                A URI to the artifact repository to publish to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>buildResultFolder</tt>
+
+              </td>
+              <td>
+                Folder containing built .class files, the Manifest
+                and potentially .api_description files.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>targetFolder</tt>
+              </td>
+
+              <td>
+                Content when running with customBuildCallbacks.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>baseDirectory</tt>
+              </td>
+              <td>
+
+                Project location to gather content from when not
+                using customBuildCallbacks
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>unpack</tt>
+              </td>
+              <td>
+                Whether or not the plug-in should be unpacked into
+                folder form when installed.
+              </td>
+
+            </tr>
+            <tr>
+              <td>
+                <tt>gatheredSource</tt>
+              </td>
+              <td>
+                For source bundles, the location of the gather
+                source.
+              </td>
+            </tr>
+
+            <tr>
+              <td>
+                <tt><outputFolder></tt>
+              </td>
+              <td>
+                Nested elements specifying alternate locations to
+                get .class files from, used when reusing .class
+                files from the workspace. This is an ant FileSet
+                with an additional "<tt>library</tt>" attribute
+                specifying which library the class files belong to
+              </td>
+            </tr>
+
+          </table>
+        </td>
+      </tr>
+    </table>Example:
+    <div class="c2">
+      <pre>
  <eclipse.gatherBundle metadataRepository="file:/build/repo" artifactRepository="file:/build/repo"
                        buildResultFolder="${basedir}" baseDirectory="${basedir}" unpack="true" >
      <outputFolder library="lib/pdebuild-ant.jar" dir="${basedir}" includes="bin_ant/**" />
+
      <outputFolder library="pdebuild.jar" dir="${basedir}" includes="bin/**" />
  </eclipse.gatherBundle>
 </pre>
-</div>
-<br>			
-<table cellspacing="1" cellpadding="2">
-	<tr><td><b><h3>eclipse.gatherFeature</h3></b></td></tr>
-	<tr><td><p>Publish a feature directly from source.  This task will gather up all the files that make up the feature jar and publish them as a p2 artifact with metadata.  
-	This task will also publish artifacts containing any <a href="pde_rootfiles.htm">root files</a> that are contributed by this feature.
-	If the feature does not specify a <tt>bin.includes</tt> property, then the feature jar will not be generated, but there will still be root file artifacts and feature group metadata.
-	</p>
-	</td></tr>
-	<tr><td><p>This task supports the following attributes:</p>
-	<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-		<tr><td><tt>metadataRepository</tt></td><td>A URI to the metadata repository to publish to.</td></tr>
-		<tr><td><tt>artifactRepository</tt></td><td>A URI to the artifact repository to publish to.</td></tr>
-		<tr><td><tt>buildResultFolder</tt></td><td>Folder containing a modified feature.xml with versions replaced.</td></tr>
-		<tr><td><tt>targetFolder</tt></td><td>Content when running with customBuildCallbacks.</td></tr>
-		<tr><td><tt>baseDirectory</tt></td><td>The feature project location</td></tr>
-	</table>
-	</td></tr>
-</table>
-Example:
-<div style="border:1px inset">
-<pre> <eclipse.gatherFeature
+    </div><br />
+    <table cellspacing="1" cellpadding="2">
+      <tr>
+        <td>
+          <h3 class="c1">
+
+            eclipse.gatherFeature
+          </h3>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Publish a feature directly from source. This task will
+            gather up all the files that make up the feature jar
+            and publish them as a p2 artifact with metadata. This
+            task will also publish artifacts containing any
+            <a href="pde_rootfiles.htm">root files</a> that are
+            contributed by this feature. If the feature does not
+            specify a <tt>bin.includes</tt> property, then the
+            feature jar will not be generated, but there will still
+            be root file artifacts and feature group metadata.
+          </p>
+
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            This task supports the following attributes:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width=
+          "95%" align="center">
+            <tr>
+
+              <td>
+                <tt>metadataRepository</tt>
+              </td>
+              <td>
+                A URI to the metadata repository to publish to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+
+                <tt>artifactRepository</tt>
+              </td>
+              <td>
+                A URI to the artifact repository to publish to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>buildResultFolder</tt>
+
+              </td>
+              <td>
+                Folder containing a modified feature.xml with
+                versions replaced.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>targetFolder</tt>
+              </td>
+
+              <td>
+                Content when running with customBuildCallbacks.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>baseDirectory</tt>
+              </td>
+              <td>
+
+                The feature project location
+              </td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+    </table>Example:
+    <div class="c2">
+      <pre>
+ <eclipse.gatherFeature
      metadataRepository="file:/build/repo"
      artifactRepository="file:/build/repo"
      buildResultFolder="${basedir}"
      baseDirectory="${basedir}"
  />
+
 </pre>
-</div>
-<br>			
-<table cellspacing="1" cellpadding="2">
-	<tr><td><b><a name="brand_p2_artifacts"><h3>eclipse.brand.p2.artifacts</h3></a></b></td></tr>
-	<tr><td><p>Brand launcher artifacts for a product and republish them with a new name for inclusion in the given product.</p></td></tr>
-	<tr><td><p>This task supports the following attributes:</p>
-	<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-		<tr><td><tt>metadataRepository</tt></td><td>A URI to the metadata repository to publish to.</td></tr>
-		<tr><td><tt>artifactRepository</tt></td><td>A URI to the artifact repository to publish to.</td></tr>
-		<tr><td><tt>config</tt></td><td>The configuration for which the launchers will be used. (eg "gtk.linux.x86")</td></tr>
-		<tr><td><tt>iconsList</tt></td><td>Locations to find the icons to brand the executable with.</td></tr>
-		<tr><td><tt>tempDirectory</tt></td><td>The location of a temporary directory that can be be used.</td></tr>
-		<tr><td><tt>productId</tt></td><td>The id of the product we are publishing for.</td></tr>
-		<tr><td><tt>productVersion</tt></td><td>The version of the product we are publishing for.</td></tr>
-		<tr><td><tt>launcherName</tt></td><td>The name to give the new launcher.</td></tr>
-		<tr><td><tt>launcherProvider</tt></td><td>The name of the IU which is providing the original launcher artifacts.  By default this is "org.eclipse.equinox.executable",  
-		the task will be looking for artifacts named <tt><launcherProvider>_root.<config></tt></td></tr>
-	</table>
-	</td></tr>
-</table>			
-</body>
-</html>
\ No newline at end of file
+    </div><br />
+    <table cellspacing="1" cellpadding="2">
+      <tr>
+        <td>
+          <h3 class="c1">
+            <a name="brand_p2_artifacts" id=
+            "brand_p2_artifacts">eclipse.brand.p2.artifacts</a>
+          </h3>
+        </td>
+
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Brand launcher artifacts for a product and republish
+            them with a new name for inclusion in the given
+            product.
+          </p>
+        </td>
+      </tr>
+      <tr>
+
+        <td>
+          <p>
+            This task supports the following attributes:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width=
+          "95%" align="center">
+            <tr>
+              <td>
+                <tt>metadataRepository</tt>
+              </td>
+
+              <td>
+                A URI to the metadata repository to publish to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>artifactRepository</tt>
+              </td>
+              <td>
+
+                A URI to the artifact repository to publish to.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>config</tt>
+              </td>
+              <td>
+                The configuration for which the launchers will be
+                used. (eg "gtk.linux.x86")
+              </td>
+
+            </tr>
+            <tr>
+              <td>
+                <tt>iconsList</tt>
+              </td>
+              <td>
+                Locations to find the icons to brand the executable
+                with.
+              </td>
+            </tr>
+
+            <tr>
+              <td>
+                <tt>tempDirectory</tt>
+              </td>
+              <td>
+                The location of a temporary directory that can be
+                be used.
+              </td>
+            </tr>
+            <tr>
+
+              <td>
+                <tt>productId</tt>
+              </td>
+              <td>
+                The id of the product we are publishing for.
+              </td>
+            </tr>
+            <tr>
+              <td>
+
+                <tt>productVersion</tt>
+              </td>
+              <td>
+                The version of the product we are publishing for.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>launcherName</tt>
+
+              </td>
+              <td>
+                The name to give the new launcher.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>launcherProvider</tt>
+              </td>
+
+              <td>
+                The name of the IU which is providing the original
+                launcher artifacts. By default this is
+                "org.eclipse.equinox.executable", the task will be
+                looking for artifacts named
+                <tt><launcherProvider>_root.<config></tt>
+              </td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+
+    </table>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_featurebuilds.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_featurebuilds.htm
index 4b947ee..8b44bd0 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_featurebuilds.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_featurebuilds.htm
@@ -19,15 +19,15 @@
 	<tr><td><tt><b>p2.gathering</b></tt></td><td>Set to <tt><b>true</b></tt> to turn on p2 publisher based builds.</td></tr>
 	<tr><td><tt>p2.build.repo</tt></td><td>A URI to the local build time p2 repository, default is <tt>file:${buildDirectory}/buildRepo</tt>.  Results will be mirrored from here to the final archive location.</td></tr>
 	<tr><td><tt>groupConfigurations</tt></td><td><tt>p2.gathering=true</tt> has the implicit effect of setting <tt>groupConfigurations=true</tt>.  To control the <a href="pde_controlling_output.htm">output format</a> of the archive use the <tt>group.group.group</tt> configuration.</td></tr>
-	<tr><td><tt>generate.p2.metadata</tt></td><td>This is property for the old <a href="pde_p2_integration.htm">metadata generator integration</a>.  It has no affect when <tt>p2.gathering=true</tt>.</td></tr>
+	<tr><td><tt>generate.p2.metadata</tt></td><td>This is property for the old <a href="pde_p2_integration.htm">metadata generator integration</a>.  It has no effect when <tt>p2.gathering=true</tt>.</td></tr>
 	<tr><td><tt>p2.metadata.repo<br>p2.artifact.repo</tt></td>
-		<td>These properties were associated with <tt>generate.p2.metadata</tt> and have no affect on feature builds when <tt>p2.gathering=true</tt> because the default behaviour in this case is to create a p2 repository.  (However, these properties do affect <a href="pde_p2_productbuilds.htm">product builds</a>).</td>
+		<td>These properties were associated with <tt>generate.p2.metadata</tt> and have no effect on feature builds when <tt>p2.gathering=true</tt> because the default behaviour in this case is to create a p2 repository.  (However, these properties do affect <a href="pde_p2_productbuilds.htm">product builds</a>).</td>
 	</tr>
 	<tr><td><tt>p2.metadata.repo.name<br>p2.artifact.repo.name</tt></td><td>Optional, these properties will be used to name the final feature repository.</td></tr>
 	<tr><td><tt>p2.compress</tt></td><td>Set to <tt>true</tt> to compress the final feature repository xml into a jar.</td></tr>
-	<tr><td><tt>p2.flavor</tt></td><td>No affect for feature builds, but does affect <a href="pde_p2_productbuilds.htm">product builds</a>.</td></tr>
-	<tr><td><tt>p2.publish.artifacts</tt></td><td>No affect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
-	<tr><td><tt>p2.root.name<br>p2.root.version</tt></td><td>No affect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
+	<tr><td><tt>p2.flavor</tt></td><td>No effect for feature builds, but does affect <a href="pde_p2_productbuilds.htm">product builds</a>.</td></tr>
+	<tr><td><tt>p2.publish.artifacts</tt></td><td>No effect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
+	<tr><td><tt>p2.root.name<br>p2.root.version</tt></td><td>No effect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
 	<tr><td><tt>p2.context.repos</tt></td><td>Define context repositories.  See <a href="pde_p2_reusingmetadata.htm">reusing metadata</a>.</td></tr>
 	<tr><td><tt>repoBaseLocation</tt></td><td>A folder containing repositories to transform using <tt><a href="../../org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm#p2_repo2runnable"><p2.repo2runnable></a></tt>.  See also <a href="pde_p2_reusingmetadata.htm">reusing metadata</a>.</td></tr>
 	<tr><td><tt>transformedRepoLocation</tt></td><td>The folder containing the output of <tt><a href="../../org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm#p2_repo2runnable"><p2.repo2runnable></a></tt>.  See also <a href="pde_p2_reusingmetadata.htm">reusing metadata</a>.</td></tr>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_integration.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_integration.htm
index defca39..75b974e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_integration.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_integration.htm
@@ -10,14 +10,16 @@
 </head>
 <body>
 <h1>PDE Build Integration with p2</h1>
-<p>See the <a href="../../org.eclipse.platform.doc.isv/guide/p2_metadata_generator.html">Generating p2 metadata</a> page in the Platform Plugin-in Developer Guide for details on p2 metadata generation.  Generating metadata by itself it not sufficient to create a p2-enabled product.  To do this you must perform an actual p2 install from the generated metadata.  See the <a href="../../org.eclipse.platform.doc.isv/guide/p2_director.html">p2 director</a> documentation for details on how to perform this install from a headless script.</p>
+<p>This page describes a deprecated old way of integrating with p2.  See the "<a href="pde_p2_builds.htm">Building p2 Repositories and Products</a>" page for the recommended methods to build with p2.
+The properties described below work using a backward compability layer and do not support any new features that may be added to the <a href="../../org.eclipse.platform.doc.isv/guide/p2_publisher.html">p2 publisher</a>.</p>
+<p>See the <a href="../../org.eclipse.platform.doc.isv/guide/p2_publisher.html">Generating p2 metadata</a> page in the Platform Plugin-in Developer Guide for details on p2 metadata generation.  Generating metadata by itself it not sufficient to create a p2-enabled product.  To do this you must perform an actual p2 install from the generated metadata.  See the <a href="../../org.eclipse.platform.doc.isv/guide/p2_director.html">p2 director</a> documentation for details on how to perform this install from a headless script.</p>
 <p>It is possible to generate p2 metadata with manual calls to the p2 metadata generator in any of PDE/Build's custom tasks (see <a href="pde_customization.htm">Customizing a Headless Build</a>).
 However, PDE/Build does provide integration with p2 via the following properties:</p>
 
 	<table border="5" cellspacing="0" cellpadding="1">
 		<tr>
 			<td><pre>generate.p2.metadata</pre></td>
-			<td>Set to true to turn on p2 metadata generation.  The ant scripts are based on the existence of this property and not the value.  To turn off metadata generation, the property must be removed and not just set to false.<br>
+			<td>(DEPRECATED, use <a href="pde_p2_builds.htm">p2.gathering</a> instead) Set to true to turn on p2 metadata generation.  The ant scripts are based on the existence of this property and not the value.  To turn off metadata generation, the property must be removed and not just set to false.<br>
 			In the build scripts, calls to p2 targets are generated when the p2 bundle <tt>org.eclipse.equinox.p2.metadata.generator</tt> and its dependencies are present in the Eclipse that is running the build.
 			These p2 targets are conditional on the <tt>generate.p2.metadata</tt> property.
 			</td>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_productbuilds.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_productbuilds.htm
index 1107236..699fa6b 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_productbuilds.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_p2_productbuilds.htm
@@ -17,7 +17,7 @@
 <table border="5" cellspacing="0" cellpadding="2">
 	<tr><td><tt><b>p2.gathering</b></tt></td><td>Set to <tt><b>true</b></tt> to turn on p2 publisher based builds.</td></tr>
 	<tr><td><tt>p2.build.repo</tt></td><td>A URI to the local build time p2 repository, default is <tt>file:${buildDirectory}/buildRepo</tt>.  Results will be mirrored from here to the final archive location.</td></tr>
-	<tr><td><tt>generate.p2.metadata</tt></td><td>This is property for the old <a href="pde_p2_integration.htm">metadata generator integration</a>.  It has no affect when <tt>p2.gathering=true</tt>.</td></tr>
+	<tr><td><tt>generate.p2.metadata</tt></td><td>This is property for the old <a href="pde_p2_integration.htm">metadata generator integration</a>.  It has no effect when <tt>p2.gathering=true</tt>.</td></tr>
 	<tr><td><tt>p2.metadata.repo<br>p2.artifact.repo</tt></td>
 		<td>These properties are be URIs.  By default for product builds, the final archives are the installed products and metadata and artifacts are left in the <tt>${p2.build.repo}</tt>.  If <tt>p2.metadata.repo</tt> and <tt>p2.artifact.repo</tt> are defined, then 
 		the artifacts and metadata for the product will be mirrored from the build repository.</td>
@@ -26,8 +26,8 @@
 	<tr><td><tt>p2.compress</tt></td><td>Set to <tt>true</tt> to compress the final repository xml into a jar.</td></tr>
 	<tr><td><tt>p2.flavor</tt></td><td>The flavor of the product, used as a qualifier on the configuration metadata for the product.  See <a href="#product_flavors">below</a>.</td></tr>
 	<tr><td><tt>p2.product.qualifier</tt></td><td>The qualifier to use when replacing "1.0.0.<i>qualifier</i>" in a product's version.  If not set, the qualifier will be based on <tt>forceContextQualifier</tt> or the timestamp.</td></tr>
-	<tr><td><tt>p2.publish.artifacts</tt></td><td>No affect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
-	<tr><td><tt>p2.root.name<br>p2.root.version</tt></td><td>No affect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
+	<tr><td><tt>p2.publish.artifacts</tt></td><td>No effect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
+	<tr><td><tt>p2.root.name<br>p2.root.version</tt></td><td>No effect when <tt>p2.gathering=true</tt> (Old property)</td></tr>
 	<tr><td><tt>p2.context.repos</tt></td><td>Define context repositories.  See <a href="pde_p2_reusingmetadata.htm">reusing metadata</a>.</td></tr>
 	<tr><td><tt>repoBaseLocation</tt></td><td>A folder containing repositories to transform using <tt><a href="../../org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm#p2_repo2runnable"><p2.repo2runnable></a></tt>.  See also <a href="pde_p2_reusingmetadata.htm">reusing metadata</a>.</td></tr>
 	<tr><td><tt>transformedRepoLocation</tt></td><td>The folder containing the output of <tt><a href="../../org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm#p2_repo2runnable"><p2.repo2runnable></a></tt>.  See also <a href="pde_p2_reusingmetadata.htm">reusing metadata</a>.</td></tr>	
@@ -39,6 +39,21 @@
 	<tr><td><tt>p2.director.log</tt></td><td>Location of a log file to log the results of the director call.</td></tr>
 	<tr><td><tt>p2.director.profile</tt></td><td>The name to use for the p2 profile created by the director.  Generally it is a good idea to name this something related to your product. Default is "profile".</td></tr>
 	<tr><td><tt>p2.director.extraArgs</tt></td><td>Extra arguments to pass to the directory.  Default is "<tt>-profileProperties org.eclipse.update.install.features=true</tt>".</td></tr>
+	<tr><td>Mirroring Properties</td><td>When building products or features, PDE/Build mirrors dependencies from <a href="pde_p2_reusingmetadata.htm">context repositories</a> to be included in the build.  
+		These properties control what dependencies are included in this operation.  See the <a href="../../org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm#p2_mirror">p2.mirror ant task</a> for details.
+	<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
+		<tr><td><tt>p2.mirror.raw</tt></td><td>Default value: false.  Set to true to reuse artifact descriptors from the source repositories.</td></tr>
+		<tr><td><tt>p2.mirror.slicing.filter</tt></td><td>Default is no filter. Set additional filter properties IUs must satisfy in order to be included. </td></tr>
+		<tr><td><tt>p2.mirror.slicing.followOnlyFilteredRequirements</tt></td><td>Default is false.  Set to true to invert the filters and only include IUs that don't match.</td></tr>
+		<tr><td><tt>p2.mirror.slicing.followStrict</tt></td><td>Default is false.  Set to true to only include dependencies whose versions are exactly specified.</td></tr>
+		<tr><td><tt>p2.mirror.slicing.includeFeatures</tt></td><td>Default is true.  Whether or not to include features.</td></tr>
+		<tr><td><tt>p2.mirror.slicing.includeNonGreedy</tt></td><td>Default is false.  Whether or not to include non-greedy dependencies.</td></tr>
+		<tr><td><tt>p2.mirror.slicing.includeOptional</tt></td><td>Default is true, whether or not to include optional dependencies.</td></tr>
+		<tr><td><tt>p2.mirror.slicing.latestVersionOnly</tt></td><td>Default is false, whether or not to only include the latest version of a dependency when the requirement is a range and multiple versions are available.</td></tr>
+		<tr><td><tt>p2.mirror.slicing.platformFilter</tt></td><td>Default is no filter, An "os,ws,arch" triplet to set as the platform against which IU LDAP filters will be matched. IUs not matching the filter will not be mirrored.</td></tr>
+	</table>
+	</td>
+	</tr>
 </table>
 
 
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_packager.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_packager.htm
index a207449..8e28ec6 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_packager.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_packager.htm
@@ -1,316 +1,449 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-  <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-  <meta http-equiv="Content-Type"
- content="text/html; charset=ISO-8859-1">
-  <meta http-equiv="Content-Style-Type" content="text/css">
-  <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
-  <title>Repackaging Eclipse Components</title>
-</head>
-<body>
-<h1>Packaging Eclipse Components<br>
-</h1>
-<p>Eclipse components are delivered as archive files. Each archive
-contains a collection of features and plug-ins. Typically the archives
-contain all the functions that a particular component has to offer. It
-is
-often the case that consumers either need more than one component
-and/or only need parts of some components. Without assistance,
-consumers would have to manually fetch the archives containing the
-superset
-of the functionality they need and then manually extract the required
-features and plug-ins. This can be a laborious and error prone process.</p>
-<p>Fortunately, PDE contains a batch oriented mechanism, the <em>packager</em>,
-which can help. In short, the packager takes as input a list of
-archives containing features and a list of interesting features. It
-then fetches
-the zips, extracts the features (and their plug-ins) and repackages
-them into an output zip.</p>
-<h2>Quick Start<br>
-</h2>
-<p>Below is a set of basic steps to get started with the
-packager.  It is suggested that you build *nix packages on a *nix
-machine to ensure that file permissions are preserved.<br>
-</p>
-<ol>
-  <li>Create a packaging configuration directory and copy the template
-files (packager.properties, packaging.properties, and
-customTargets.xml) from org.eclipse.pde.build/templates/packager here.</li>
-  <li>Edit the copied packager.properties files and set the following
-properties:
-  <ul>
-    <li><span style="font-weight: bold;">baseDirectory </span>: the
-directory in which the actual packaging work will take place.
-    <br>
-    </li>
-    <li><span style="font-weight: bold;">featureList </span>: a comma
-separated list of feature ids that you wish to include in your archive.<br>
-    </li>
-    <li><span style="font-weight: bold;">componentFilter </span>: 
-A comma separated list of components in which your features can be
-found.  Specifying this will avoid unnecessary downloads. 
-Use * if you don't know the components.  (See the componentName in
-the <a href="pde_packager.htm#Packager_Map_File_Format">Packager Map
-File Format</a>
-below).<br>
-      <span style="font-weight: bold;"></span></li>
-    <li><span style="font-weight: bold;">contentFilter</span> : A comma
-separated list of content types you are interested in.  Common
-content types are <tt>runtime</tt> or <tt>sdk</tt>.  This is
-used to optimize the
-downloading of the archives.   Leave this blank to not filter
-on content type.  (See the contentDescription in the <a
- href="#Packager_Map_File_Format">Packager Map File Format</a>
-below).</li>
-    <li><span style="font-weight: bold;">config </span>:  The
-configurations to package. This is an "&" separated list of comma
-separated triples of operating system,
-windowing system and architecture (eg <tt>win32,win32,x86 &
-linux,gtk,ppc</tt>)</li>
-  </ul>
-  </li>
-  <li>Get packager map files.  The following properties control
-downloading the map files:<br>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content=
+    "text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../guide/book.css" type=
+    "text/css" />
+    <title>
+      Repackaging Eclipse Components
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    table.c4 {width: 90%; text-align: left; margin-left: 40px;}
+    td.c3 {vertical-align: top;}
+    div.c2 {text-align: center;}
+    span.c1 {font-weight: bold;}
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1>
+      Packaging Eclipse Components<br />
+    </h1>
+    <p>
+      Eclipse components are delivered as archive files. Each
+      archive contains a collection of features and plug-ins.
+      Typically the archives contain all the functions that a
+      particular component has to offer. It is often the case that
+      consumers either need more than one component and/or only
+      need parts of some components. Without assistance, consumers
+      would have to manually fetch the archives containing the
+      superset of the functionality they need and then manually
+      extract the required features and plug-ins. This can be a
+      laborious and error prone process.
+    </p>
+    <p>
+
+      Fortunately, PDE contains a batch oriented mechanism, the
+      <em>packager</em>, which can help. In short, the packager
+      takes as input a list of archives containing features and a
+      list of interesting features. It then fetches the zips,
+      extracts the features (and their plug-ins) and repackages
+      them into an output zip.
+    </p>
+    <h2>
+      Quick Start<br />
+    </h2>
+    <p>
+      Below is a set of basic steps to get started with the
+      packager.  It is suggested that you build *nix packages
+      on a *nix machine to ensure that file permissions are
+      preserved.<br />
+
+    </p>
+    <ol>
+      <li>Create a packaging configuration directory and copy the
+      template files (packager.properties, packaging.properties,
+      and customTargets.xml) from
+      org.eclipse.pde.build/templates/packager here.
+      </li>
+      <li>Edit the copied packager.properties files and set the
+      following properties:
+        <ul>
+          <li>
+            <span class="c1">baseDirectory</span> : the directory
+            in which the actual packaging work will take place.
+               <br />
+
+          </li>
+          <li>
+            <span class="c1">featureList</span> : a comma separated
+            list of feature ids that you wish to include in your
+            archive.<br />
+          </li>
+          <li>
+            <span class="c1">componentFilter</span> :  A comma
+            separated list of components in which your features can
+            be found.  Specifying this will avoid unnecessary
+            downloads.  Use * if you don't know the
+            components.  (See the componentName in the
+            <a href="pde_packager.htm#Packager_Map_File_Format">Packager
+            Map File Format</a> below).<br />
+
+          </li>
+          <li>
+            <span class="c1">contentFilter</span> : A comma
+            separated list of content types you are interested
+            in.  Common content types are <tt>runtime</tt> or
+            <tt>sdk</tt>.  This is used to optimize the
+            downloading of the archives.   Leave this
+            blank to not filter on content type.  (See the
+            contentDescription in the <a href=
+            "#Packager_Map_File_Format">Packager Map File
+            Format</a> below).
+          </li>
+
+          <li>
+            <span class="c1">config</span> :  The
+            configurations to package. This is an "&" separated
+            list of comma separated triples of operating system,
+            windowing system and architecture (eg
+            <tt>win32,win32,x86 & linux,gtk,ppc</tt>)
+          </li>
+        </ul>
+      </li>
+
+      <li>Get packager map files.  The following properties
+      control downloading the map files:<br />
+        <ul>
+          <li>
+            <span class="c1">localMaps</span> : Set this property
+            if you have map files locally, put the map files in
+            <tt>${downloadDirectory}</tt> (by default this is
+            <tt>${baseDirectory}/toPackage</tt>).  Comment out
+            this property to automatically download the map file.
+          </li>
+
+          <li>
+            <span class="c1">packagerMapURL</span> : The URL from
+            which to download the map file.
+          </li>
+        </ul>The packager script will concatenate all *.map files
+        found in <tt>${downloadDirectory}</tt>. To download more
+        than one map file, or to fetch them from CVS edit the
+        customTargets.xml file and change the getMapFiles target.
+      </li>
+      <li>Run the packager using the following command:
+        <pre>
+java -jar <eclipse install>/plugins/org.eclipse.equinox.launcher_<version>.jar -application org.eclipse.ant.core.antRunner <br />    -buildfile <<eclipse install>/plugins/org.eclipse.pde.build_<version>/scripts/package.xml> <br />    -DpackagingInfo=<path to your packaging configuration directory><br />
+
+</pre>
+      </li>
+    </ol>
+    <h2>
+      <a name="Packager_Map_File_Format" id=
+      "Packager_Map_File_Format"></a>Packager Map File Format
+    </h2>The packager map files are used to describe the various
+    archives, their content and where they can be downloaded
+    from.  They are similar to the map files used in the build
+    process to fetch bundles from repositories.  The format of
+    a packager map file entry is as follows:<br />
+    <div class="c2">
+
+      <tt>archiveName = <span class="c1">url</span> | [<span class=
+      "c1">configList</span>] | [<span class="c1">directory</span>]
+      | <span class="c1">contentDescription</span> | <span class=
+      "c1">componentName</span></tt><br />
+    </div>
     <ul>
-      <li><span style="font-weight: bold;">localMaps</span> : Set this
-property if you have map files locally,
-put
-the map files in <tt>${downloadDirectory}</tt> (by default this is <tt>${baseDirectory}/toPackage</tt>). 
-Comment out this property to automatically download the map file.</li>
-      <li><span style="font-weight: bold;">packagerMapURL</span> : The
-URL from which to download the map file.</li>
-    </ul>
-The packager script will concatenate all *.map files found in <tt>${downloadDirectory}</tt>.
-To download more than one map file, or to fetch them from CVS edit the
-customTargets.xml file and change the getMapFiles target. </li>
-  <li>Run the packager using the following command:
-  <pre>java -jar <eclipse install>/plugins/org.eclipse.equinox.launcher_<version>.jar -application org.eclipse.ant.core.antRunner <br>    -buildfile <<eclipse install>/plugins/org.eclipse.pde.build_<version>/scripts/package.xml> <br>    -DpackagingInfo=<path to your packaging configuration directory><br></pre>
-  </li>
-</ol>
-<h2><a name="Packager_Map_File_Format"></a>Packager Map File Format</h2>
-The packager map files are used to describe the various archives, their
-content and where they can be downloaded from.  They are similar
-to the map files used in the build process to fetch bundles from
-repositories.  The format of a packager map file entry is as
-follows:<br>
-<div style="text-align: center;"><tt>archiveName
-= <span style="font-weight: bold;">url</span> | [<span
- style="font-weight: bold;">configList</span>] |
-[<span style="font-weight: bold;">directory</span>] | <span
- style="font-weight: bold;">contentDescription</span> | <span
- style="font-weight: bold;">componentName</span></tt><br>
-</div>
-<ul>
-  <li><span style="font-weight: bold;">archiveName </span>: This is
-the name of the archive<br>
-    <span style="font-weight: bold;"></span></li>
-  <li><span style="font-weight: bold;">url</span> : This is the url
-where the archive can be found.  The concatenation of url and
-archiveName should point to the archive to download.</li>
-  <li><span style="font-weight: bold;">configList</span> : This is an
-"&" separated list of configs that this archive contains. 
-(eg: <tt>win32,win32,x86 & linux,gtk,x86</tt>).  If no
-value is given the archive is considered to be platform independent.</li>
-  <li><span style="font-weight: bold;">directory</span> : The directory
-where the content of the archive should be extracted relative to a
-standard eclipse installation.  When no value is specified it
-means that the archive contains an eclipse installation directory at
-its
-root.<br>
-    <span style="font-weight: bold;"></span></li>
-  <li><span style="font-weight: bold;">contentDescription</span> : The
-content flags indicating the type of content in this archive. 
-Normally this is something like <tt>runtime</tt>, <tt>sdk</tt>, <tt>source</tt>,
-    <tt>doc</tt>, etc.</li>
-  <li><span style="font-weight: bold;">componentName</span> : The
-canonical name of the component this archive is for.  For example
-eclipse, jdt, cdt, gef, emf, etc.<br>
-  </li>
-</ul>
-<br>
-Note that configList and directory are optional, it is important that
-the appropriate number "|" separators are still used.<br>
-Examples:<br>
-<pre>eclipse-SDK-3.1-win32.zip=http://download.eclipse.org/downloads/drops/R-3.1-200506271435/ | win32,win32,x86 | | sdk | eclipse<br>eclipse-PDE-3.1.zip=http://download.eclipse.org/downloads/drops/R-3.1-200506271435/ | | | runtime | pde<br></pre>
-<h2>Packager Configuration Properties</h2>
-The following properties can be set in the packager configuration
-packager.properties file:<br>
-<table style="width: 90%; text-align: left; margin-left: 40px;"
- border="1" cellpadding="2" cellspacing="0">
-  <tbody>
-    <tr>
-      <td style="vertical-align: top;">baseDirectory<br>
-      </td>
-      <td style="vertical-align: top;">The directory in which all the
-packaging will take place<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">workingDirectory<br>
-      </td>
-      <td style="vertical-align: top;">The directory in which the
-scripts will be generated.  The value in the template is <tt>${baseDirectory}/workingPlace</tt><br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">downloadDirectory<br>
-      </td>
-      <td style="vertical-align: top;">The folder to which the archives
-will be downloaded.  The value in the template is <tt>${baseDirectory}/toPackage</tt><br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">tempDirectory<br>
-      </td>
-      <td style="vertical-align: top;">The folder that the archives
-will be extracted to.  The value in the template is <tt>${baseDirectory}/temp</tt><br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">featurePaths<br>
-      </td>
-      <td style="vertical-align: top;">The name of the root of the
-archives downloaded.  The value in the template is <tt>eclipse</tt>.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">featureList<br>
-      </td>
-      <td style="vertical-align: top;">A comma separated list of
-feature ids that you wish to repackage.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">componentFilter<br>
-      </td>
-      <td style="vertical-align: top;">A comma separated list of the
-components from which the features in featureList can be found. 
-This filters the available archives and allows the packager to optimize
-the set of files downloaded.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">contentFilter<br>
-      </td>
-      <td style="vertical-align: top;">A comma separated list of
-content types to fetch.  This filters the set of available
-archives and allows the packager to optimize the set of files
-downloaded.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">config<br>
-      </td>
-      <td style="vertical-align: top;">An "&" separated list of
-configs (comma separated triples of operating system, windowing system,
-architecture) to repackage.  (eg: <tt>win32, win32, x86 &
-linux, gtk, x86</tt>) </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">archivesFormat<br>
-      </td>
-      <td style="vertical-align: top;">The formats of the
-archives.  An "&" separated list of config - format. 
-(eg: <tt>win32, win32, x86 - antZip & linux, gtk, ppc - tar</tt>). 
-If
-no archive format is specified for a given config, the default format
-is antZip.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">zipargs<br>
-      </td>
-      <td style="vertical-align: top;">Extra arguments to be passed to
-zip<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">unzipargs<br>
-      </td>
-      <td style="vertical-align: top;">Extra arguments to be passed to
-unzip<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">archivePrefix<br>
-      </td>
-      <td style="vertical-align: top;">The prefix of the resulting
-archive(s)<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">collectingFolder<br>
-      </td>
-      <td style="vertical-align: top;">The name of the root folder of
-the resulting archive.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">buildId<br>
-      </td>
-      <td style="vertical-align: top;">Controls the build id in the
-default name of the archive.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">buildType<br>
-      </td>
-      <td style="vertical-align: top;">Type of the build, used in
-naming the build output.  Typically one of I, N, M, S, ...<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">buildLabel<br>
-      </td>
-      <td style="vertical-align: top;">Label for the build.  The
-template value is <tt>${buildType}.${buildId}</tt><br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">archiveNamePrefix<br>
-      </td>
-      <td style="vertical-align: top;">Control the name of the
-resulting archive.  The default value of this is <tt>${buildId}</tt><br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">packagingProperties<br>
-      </td>
-      <td style="vertical-align: top;">A relative path to the file
-containing the properties packaging root files..  By default
-this points to packaging.properties.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">deltaPack<br>
-      </td>
-      <td style="vertical-align: top;">Whether or not to generate a
-delta pack.  This will exclude platform independent pieces and
-will group all configs into one archive.<br>
-      </td>
-    </tr>
-    <tr>
-      <td style="vertical-align: top;">unzipOrder<br>
-      </td>
-      <td style="vertical-align: top;">a comma separated list of archive name prefixes setting
-      the order in which archives should be extracted.<br>
-      </td>
-    </tr>    
-  </tbody>
-</table>
-<br>
-<h2>Packaging Root Files</h2>
-In the packager configuration packager.properties file, the property
-packagingProperties points to a property file which specifies the root
-files that need to be packaged.  By default this is the file
-packaging.properties.<br>
-<br>
-This property file should contain the properties specifying the
-required root files.  See the <a
- href="../reference/pde_feature_generating_build.htm#Feature_specific_properties">Feature
-specific properties</a> page for details on the root properties.<br>
-<br>
-</body>
-</html>
+
+      <li>
+        <span class="c1">archiveName</span> : This is the name of
+        the archive<br />
+      </li>
+      <li>
+        <span class="c1">url</span> : This is the url where the
+        archive can be found.  The concatenation of url and
+        archiveName should point to the archive to download.
+      </li>
+
+      <li>
+        <span class="c1">configList</span> : This is an "&"
+        separated list of configs that this archive contains. 
+        (eg: <tt>win32,win32,x86 & linux,gtk,x86</tt>). 
+        If no value is given the archive is considered to be
+        platform independent.
+      </li>
+
+      <li>
+        <span class="c1">directory</span> : The directory where the
+        content of the archive should be extracted relative to a
+        standard eclipse installation.  When no value is
+        specified it means that the archive contains an eclipse
+        installation directory at its root.<br />
+      </li>
+      <li>
+        <span class="c1">contentDescription</span> : The content
+        flags indicating the type of content in this archive. 
+
+        Normally this is something like <tt>runtime</tt>,
+        <tt>sdk</tt>, <tt>source</tt>, <tt>doc</tt>, etc.
+      </li>
+      <li>
+        <span class="c1">componentName</span> : The canonical name
+        of the component this archive is for.  For example
+        eclipse, jdt, cdt, gef, emf, etc.<br />
+
+      </li>
+    </ul><br />
+    Note that configList and directory are optional, it is
+    important that the appropriate number "|" separators are still
+    used.<br />
+    Examples:<br />
+    <pre>
+eclipse-SDK-3.1-win32.zip=http://download.eclipse.org/downloads/drops/R-3.1-200506271435/ | win32,win32,x86 | | sdk | eclipse<br />eclipse-PDE-3.1.zip=http://download.eclipse.org/downloads/drops/R-3.1-200506271435/ | | | runtime | pde<br />
+</pre>
+    <h2>
+
+      Packager Configuration Properties
+    </h2>The following properties can be set in the packager
+    configuration packager.properties file:<br />
+    <table class="c4" border="1" cellpadding="2" cellspacing="0">
+      <tbody>
+        <tr>
+          <td class="c3">
+            baseDirectory<br />
+          </td>
+
+          <td class="c3">
+            The directory in which all the packaging will take
+            place<br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            workingDirectory<br />
+          </td>
+
+          <td class="c3">
+            The directory in which the scripts will be
+            generated.  The value in the template is
+            <tt>${baseDirectory}/workingPlace</tt><br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            downloadDirectory<br />
+
+          </td>
+          <td class="c3">
+            The folder to which the archives will be
+            downloaded.  The value in the template is
+            <tt>${baseDirectory}/toPackage</tt><br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+
+            tempDirectory<br />
+          </td>
+          <td class="c3">
+            The folder that the archives will be extracted
+            to.  The value in the template is
+            <tt>${baseDirectory}/temp</tt><br />
+          </td>
+        </tr>
+
+        <tr>
+          <td class="c3">
+            featurePaths<br />
+          </td>
+          <td class="c3">
+            The name of the root of the archives downloaded. 
+            The value in the template is <tt>eclipse</tt>.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            featureList<br />
+          </td>
+          <td class="c3">
+            A comma separated list of feature ids that you wish to
+            repackage.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            componentFilter<br />
+          </td>
+          <td class="c3">
+            A comma separated list of the components from which the
+            features in featureList can be found.  This
+            filters the available archives and allows the packager
+            to optimize the set of files downloaded.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            contentFilter<br />
+          </td>
+          <td class="c3">
+            A comma separated list of content types to fetch. 
+
+            This filters the set of available archives and allows
+            the packager to optimize the set of files
+            downloaded.<br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            config<br />
+          </td>
+          <td class="c3">
+
+            An "&" separated list of configs (comma separated
+            triples of operating system, windowing system,
+            architecture) to repackage.  (eg: <tt>win32,
+            win32, x86 & linux, gtk, x86</tt>)
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            archivesFormat<br />
+
+          </td>
+          <td class="c3">
+            The formats of the archives.  An "&" separated
+            list of config - format.  (eg: <tt>win32, win32,
+            x86 - antZip & linux, gtk, ppc - tar</tt>). 
+            If no archive format is specified for a given config,
+            the default format is antZip.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            zipargs<br />
+          </td>
+          <td class="c3">
+            Extra arguments to be passed to zip<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            unzipargs<br />
+          </td>
+          <td class="c3">
+            Extra arguments to be passed to unzip<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            archivePrefix<br />
+          </td>
+          <td class="c3">
+            The prefix of the resulting archive(s)<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            collectingFolder<br />
+          </td>
+          <td class="c3">
+            The name of the root folder of the resulting
+            archive.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            buildId<br />
+          </td>
+          <td class="c3">
+            Controls the build id in the default name of the
+            archive.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            buildType<br />
+          </td>
+          <td class="c3">
+            Type of the build, used in naming the build
+            output.  Typically one of I, N, M, S, ...<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            buildLabel<br />
+          </td>
+          <td class="c3">
+            Label for the build.  The template value is
+            <tt>${buildType}.${buildId}</tt><br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            archiveNamePrefix<br />
+          </td>
+          <td class="c3">
+            Control the name of the resulting archive.  The
+            default value of this is <tt>${buildId}</tt><br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            packagingProperties<br />
+          </td>
+          <td class="c3">
+            A relative path to the file containing the properties
+            packaging root files..  By default this points to
+            packaging.properties.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            deltaPack<br />
+          </td>
+          <td class="c3">
+            Whether or not to generate a delta pack.  This
+            will exclude platform independent pieces and will group
+            all configs into one archive.<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c3">
+            unzipOrder<br />
+          </td>
+          <td class="c3">
+            a comma separated list of archive name prefixes setting
+            the order in which archives should be extracted.<br />
+
+          </td>
+        </tr>
+      </tbody>
+    </table><br />
+    <h2>
+      Packaging Root Files
+    </h2>In the packager configuration packager.properties file,
+    the property packagingProperties points to a property file
+    which specifies the root files that need to be packaged. 
+    By default this is the file packaging.properties.<br />
+
+    <br />
+    This property file should contain the properties specifying the
+    required root files.  See the <a href=
+    "../reference/pde_feature_generating_build.htm#Feature_specific_properties">
+    Feature specific properties</a> page for details on the root
+    properties.<br />
+    <br />
+  </body>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_product_build.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_product_build.htm
index c2bfbcd..2621d46 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_product_build.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_product_build.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
@@ -88,10 +88,8 @@ org.eclipse.ant.core.antRunner -buildfile
 <<eclipseInstall>/plugins/org.eclipse.pde.build_<version>/scripts/productBuild/productBuild.xml>
 -Dbuilder=<path to the build configuration folder></code><br>
 </div>
-<code></code></div>
 </div>
-<ul>
-</ul>
+</div>
 <h2>Advanced scenarios</h2>
 <p>Behind the scenes this setup will generate a feature containing the
 plug-ins or features specified in your product configuration file. 
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_version_qualifiers.htm b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_version_qualifiers.htm
index 505c7c5..4370160 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_version_qualifiers.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/tasks/pde_version_qualifiers.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2006, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../guide/book.css" type="text/css">
@@ -90,7 +90,6 @@ The properties in these files have the form:<br>
 If more than one versions of a plug-in or feature exists, then
 <tt><bundleSymbolicName>=<version></tt> refers to the plug-in or
 feature with the highest version.
-<p></p>
 Example:<br>
 <pre>    org.eclipse.pde.build = 3.3.0.v20070524<br>    org.eclipse.pde.build_3.3.0=3.3.0.v20070524<br>    org.eclipse.pde.build_3.2.1=3.2.1.r321_v20060823</pre>
 </body></html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/toc.xml b/eclipse/plugins/org.eclipse.pde.doc.user/toc.xml
index ae0929d..ea2dd07 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/toc.xml
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/toc.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
 <!--
-     Copyright (c) 2005, 2009 IBM Corporation and others.
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -35,19 +35,20 @@
 	
 	<!-- Tasks -->
 	<topic label="Tasks">
- 		<link toc="topics_Tasks.xml"/>
+		<link toc="topics_Tasks.xml"/>
 	</topic>
 	
 	<!-- Reference -->
 	<topic label="Reference">
-		<link toc="topics_Reference.xml" />
+		<link toc="topics_Reference.xml"/>
 	</topic>
 	
 	<!-- Tips and Tricks -->
 	<topic label="Tips and Tricks" href="tips/pde_tips.htm"/>
 	
-	<!-- What's New -->
-	<topic label="What's New" href="whatsNew/pde_whatsnew.htm"/>
+	<!-- What's New -->	<topic label="What's new" href="whatsNew/pde_whatsnew.htm">
+		<link toc="topics_WhatsNew.xml"/>
+	</topic>
 	
 	<!-- Legal Notices -->
 	<topic label="Legal" href="notices.html"/>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/topics_Reference.xml b/eclipse/plugins/org.eclipse.pde.doc.user/topics_Reference.xml
index 149f81a..dcafe46 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/topics_Reference.xml
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/topics_Reference.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
 <!--
-     Copyright (c) 2005, 2010 IBM Corporation and others.
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -30,7 +30,9 @@
       </topic>
       <topic href="reference/api-tooling/ant-tasks/apiuse-ant-task.htm" label="API Use Ant Task">
       </topic>
-      <topic href="reference/api-tooling/ant-tasks/apiuse-reportconversion-ant-task.htm" label="API Use Report Conversion Task">
+      <topic href="reference/api-tooling/ant-tasks/apiuse-reportconversion-ant-task.htm" label="API Use Report Conversion Task (Producer)">
+      </topic>
+      <topic href="reference/api-tooling/ant-tasks/apiconsumeruse-reportconversion-ant-task.htm" label="API Use Report Conversion Task (Consumer)">
       </topic>
       <topic href="reference/api-tooling/ant-tasks/apimigration-ant-task.htm" label="API Use Migration Ant Task">
       </topic>
@@ -38,6 +40,12 @@
       </topic>
       <topic href="reference/api-tooling/ant-tasks/filegeneration-ant-task.htm" label="File Generation Ant Task">
       </topic>
+      <topic href="reference/api-tooling/ant-tasks/compare-ant-task.htm" label="Compare Ant Task">
+      </topic>
+      <topic href="reference/api-tooling/ant-tasks/apiusescan-problems-ant-task.htm" label="API Use Scan Problems Ant Task">
+      </topic>
+      <topic href="reference/api-tooling/ant-tasks/apiusescan-problems-reportconversion-ant-task.htm" label="API Use Scan Problems Report Conversion Ant Task">
+      </topic>
    </topic>
    <topic label="Build Configuration">
 		<topic label="Builder Configuration properties" href="reference/pde_builder_config.htm" />
@@ -157,25 +165,27 @@
 	</topic>
 </topic>
  <topic label="Menus and Actions">
-    <topic href="reference/api-tooling/actions/ref-apitooling-setup-action.htm" label="API Tooling Setup">
+    <topic href="reference/api-tooling/actions/ref-apitooling-setup-action.htm" label="API Tools Setup">
     </topic>
     <topic href="reference/api-tooling/actions/ref-compare-action.htm" label="Compare with API baseline">
     </topic>
  </topic>
  <topic href="guide/tools/preference_pages/preferences.htm" label="Preferences">
-	<topic label="Compilers Preferences" href="guide/tools/preference_pages/compilers.htm">
+    <topic label="Plug-in Development" href="guide/tools/preference_pages/plug_in_development.htm"/>
+    <topic href="reference/api-tooling/preferences/ref-baselines.htm" label="API Baselines">
+    </topic>
+    <topic href="reference/api-tooling/preferences/ref-errorswarnings.htm" label="API Errors and Warnings">
+    </topic>
+	<topic label="Compilers" href="guide/tools/preference_pages/compilers.htm">
 		<topic label="Plug-in Compiler Preferences" href="guide/tools/preference_pages/plugin_compiler.htm"/>
 		<topic label="Extension Point Schema Compiler Preferences" href="guide/tools/preference_pages/schema_compiler.htm"/>
 		<topic label="Feature and Update Site Compiler Preferences" href="guide/tools/preference_pages/feature_compiler.htm"/>
 	</topic>
-	<topic label="Editors Preferences" href="guide/tools/preference_pages/editors.htm"/>
-	<topic label="OSGi Frameworks Preferences" href="guide/tools/preference_pages/osgi_frameworks.htm"/>
-	<topic label="Target Platform Preferences" href="guide/tools/preference_pages/target_platform.htm">
+	<topic label="Editors" href="guide/tools/preference_pages/editors.htm"/>
+	<topic label="OSGi Frameworks" href="guide/tools/preference_pages/osgi_frameworks.htm"/>
+	<topic label="Target Platform" href="guide/tools/preference_pages/target_platform.htm">
 	</topic>
-    <topic href="reference/api-tooling/preferences/ref-errorswarnings.htm" label="API Errors and Warnings">
-    </topic>
-    <topic label="General Plug-in Development Preferences" href="guide/tools/preference_pages/plug_in_development.htm"/>
-    <topic href="reference/api-tooling/preferences/ref-baselines.htm" label="API Baselines">
+    <topic href="reference/api-tooling/preferences/ref-usescans.htm" label="API Use Scans">
     </topic>
  </topic>
  <topic label="Property Pages">
@@ -183,6 +193,10 @@
     </topic>
     <topic href="reference/api-tooling/propertypages/ref-filters-prop.htm" label="API Problem Filters">
     </topic>
+    <topic href="guide/tools/preference_pages/runtime_classpath_properties.htm" label="Runtime Classpath">
+    </topic>
+    <topic href="guide/tools/preference_pages/compilers.htm" label="Plug-in Manifest Compiler">
+    </topic>
  </topic>
  <topic label="Quickfixes">
     <topic href="reference/api-tooling/quickfixes/ref-api-api-filter-qf.htm" label="Create API Problem Filter">
@@ -239,6 +253,8 @@
 		<topic label="Plug-in Export" href="guide/tools/export_wizards/export_plugins.htm"/>
 		<topic label="Feature Export" href="guide/tools/export_wizards/export_features.htm"/>
 		<topic label="Product Export" href="guide/tools/export_wizards/export_product.htm"/>
+  <topic href="guide/tools/export_wizards/export_target.htm" label="Target Export">
+  </topic>
 	</topic>
 	<topic label="Task Wizards" href="guide/tools/pde_actions/task_wizards.htm">
 		<topic label="Converting Java Projects to Plug-in Projects" href="guide/tools/pde_actions/convert_projects.htm" />
@@ -246,8 +262,8 @@
 		<topic label="Organizing Manifest Files" href="guide/tools/pde_actions/organize_manifests.htm" />
 		<topic label="Updating Classpaths" href="guide/tools/pde_actions/update_classpaths.htm" />
 	</topic>
-    <topic label="API Tooling">
-	    <topic href="reference/api-tooling/wizards/ref-api-setup-wizard.htm" label="API Tooling Setup Wizard">
+    <topic label="API Tools">
+	    <topic href="reference/api-tooling/wizards/ref-api-setup-wizard.htm" label="API Tools Setup Wizard">
 	    </topic>
 	    <topic href="reference/api-tooling/wizards/ref-api-baseline-wizard.htm" label="API Baseline Wizard">
 	    </topic>
@@ -304,16 +320,12 @@
 	<topic label="Extension Points Reference" href="reference/extension-points/index.html">
     <topic href="reference/extension-points/org_eclipse_pde_build_fetchFactories.html" label="org.eclipse.pde.build.fetchFactories">
     </topic>
-    <topic href="reference/extension-points/org_eclipse_pde_core_bundleImporters.html" label="org.eclipse.pde.core.bundleImporters">
-    </topic>
     <topic href="reference/extension-points/org_eclipse_pde_core_javadoc.html" label="org.eclipse.pde.core.javadoc">
     </topic>
     <topic href="reference/extension-points/org_eclipse_pde_core_source.html" label="org.eclipse.pde.core.source">
     </topic>
     <topic href="reference/extension-points/org_eclipse_pde_core_targets.html" label="org.eclipse.pde.core.targets">
     </topic>
-    <topic href="reference/extension-points/org_eclipse_pde_ui_bundleImportPages.html" label="org.eclipse.pde.ui.bundleImportPages">
-    </topic>
     <topic href="reference/extension-points/org_eclipse_pde_ui_launchShortcuts.html" label="org.eclipse.pde.ui.launchShortcuts">
     </topic>
     <topic href="reference/extension-points/org_eclipse_pde_ui_newExtension.html" label="org.eclipse.pde.ui.newExtension">
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/topics_Tasks.xml b/eclipse/plugins/org.eclipse.pde.doc.user/topics_Tasks.xml
index 6a5f724..2e1926e 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/topics_Tasks.xml
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/topics_Tasks.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
 <!--
-     Copyright (c) 2005, 2010 IBM Corporation and others.
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -70,8 +70,8 @@
      <topic href="tasks/pde_p2_configuringproducts.htm" label="Configuring Products">
      </topic>
   </topic>
-   <topic label="PDE API Tooling">
-      <topic href="tasks/api_tooling_setup.htm" label="Setting up API Tooling">
+   <topic label="API Tools">
+      <topic href="tasks/api_tooling_setup.htm" label="Setting up API Tools">
       </topic>
       <topic href="tasks/api_tooling_baseline.htm" label="Setting up a baseline">
       </topic>
@@ -79,7 +79,7 @@
       </topic>
       <topic href="tasks/api_tooling_remove_filters.htm" label="Remove filters">
       </topic>
-      <topic href="tasks/api_tooling_options.htm" label="Changing API Tooling options">
+      <topic href="tasks/api_tooling_options.htm" label="Changing API Tools options">
       </topic>
       <topic href="tasks/api_tooling_compare_to_baseline.htm" label="Comparing to an API baseline">
       </topic>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/topics_WhatsNew.xml b/eclipse/plugins/org.eclipse.pde.doc.user/topics_WhatsNew.xml
new file mode 100644
index 0000000..0039d44
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/topics_WhatsNew.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<!--
+     Copyright (c) 2011 IBM Corporation and others.
+     All rights reserved. This program and the accompanying materials
+     are made available under the terms of the Eclipse Public License v1.0
+     which accompanies this distribution, and is available at
+     http://www.eclipse.org/legal/epl-v10.html
+    
+     Contributors:
+         IBM Corporation - initial API and implementation
+ -->
+
+<!-- ================================ -->
+<!-- Define topics for the What's New -->
+<!-- ================================ -->
+<toc label="What's new">
+	<topic label="Views and Editors" href="whatsNew/pde_whatsnew.htm#ViewsAndEditors"/>
+	<topic label="Launching" href="whatsNew/pde_whatsnew.htm#Launching"/>
+	<topic label="Import" href="whatsNew/pde_whatsnew.htm#Import"/>
+	<topic label="Target Platform" href="whatsNew/pde_whatsnew.htm#TargetPlatform"/>
+	<topic label="API Tools" href="whatsNew/pde_whatsnew.htm#APITools"/>
+</toc>
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/add-plugins.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/add-plugins.png
deleted file mode 100644
index 76ac21e..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/add-plugins.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/add-to-target.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/add-to-target.png
deleted file mode 100644
index 86cb2f0..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/add-to-target.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-deprecation.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-deprecation.png
deleted file mode 100644
index 6625a04..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-deprecation.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-errors-warning-api-use-scan.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-errors-warning-api-use-scan.png
new file mode 100644
index 0000000..68e2d3f
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-errors-warning-api-use-scan.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-filters.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-filters.png
deleted file mode 100644
index c5ae3a8..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-filters.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-scan.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-scan.png
deleted file mode 100644
index 1775c34..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-scan.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-use-scan-preference-page.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-use-scan-preference-page.png
new file mode 100644
index 0000000..9239b4d
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/api-use-scan-preference-page.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/application.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/application.png
new file mode 100644
index 0000000..b5d6216
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/application.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/archive-wizard.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/archive-wizard.png
deleted file mode 100644
index d18a4d2..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/archive-wizard.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/archive.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/archive.png
deleted file mode 100644
index 5f9aaf8..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/archive.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/avail.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/avail.png
deleted file mode 100644
index 5b2deb1..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/avail.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/build-severities.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/build-severities.png
deleted file mode 100644
index c2b74e5..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/build-severities.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/buildproperties.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/buildproperties.png
deleted file mode 100644
index a45daef..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/buildproperties.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/console-menu.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/console-menu.png
deleted file mode 100644
index f5867d5..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/console-menu.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/consolelog.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/consolelog.png
deleted file mode 100644
index f907b6a..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/consolelog.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/consumer_configuration.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/consumer_configuration.png
new file mode 100644
index 0000000..40fef3e
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/consumer_configuration.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/default-workspace-preference.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/default-workspace-preference.png
new file mode 100644
index 0000000..bd8b605
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/default-workspace-preference.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/description.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/description.png
deleted file mode 100644
index 4d1b5d3..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/description.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/edit-default-workspace.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/edit-default-workspace.png
new file mode 100644
index 0000000..3e17860
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/edit-default-workspace.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/export-target.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/export-target.png
deleted file mode 100644
index 17b9104..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/export-target.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/feature-launch.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/feature-launch.png
deleted file mode 100644
index bc3f812..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/feature-launch.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/from-repo.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/from-repo.png
deleted file mode 100644
index 07b2159..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/from-repo.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/head-version.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/head-version.png
deleted file mode 100644
index 8fe8e05..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/head-version.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/hover-quick-fix.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/hover-quick-fix.png
deleted file mode 100644
index e61b32e..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/hover-quick-fix.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/pattern-wizard.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/pattern-wizard.png
deleted file mode 100644
index 10e56ed..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/pattern-wizard.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/patterns.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/patterns.png
deleted file mode 100644
index 4f68ad4..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/patterns.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/product-properties.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/product-properties.png
new file mode 100644
index 0000000..f6ecba5
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/product-properties.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/scandetails.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/scandetails.png
deleted file mode 100644
index 656a8a0..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/scandetails.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/shared-license.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/shared-license.png
new file mode 100644
index 0000000..d625bbd
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/shared-license.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/soft-install.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/soft-install.png
deleted file mode 100644
index bb0536a..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/soft-install.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/spell-check.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/spell-check.png
deleted file mode 100644
index c1d0348..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/spell-check.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/src-builds.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/src-builds.png
deleted file mode 100644
index 53579cf..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/src-builds.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/synch-settings.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/synch-settings.png
deleted file mode 100644
index 2fdf972..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/synch-settings.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/synch-warnings.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/synch-warnings.png
deleted file mode 100644
index 1bab2e3..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/synch-warnings.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-features.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-features.png
deleted file mode 100644
index 685e52d..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-features.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-resolution.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-resolution.png
new file mode 100644
index 0000000..deaf011
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-resolution.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-search.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-search.png
deleted file mode 100644
index dcae43a..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target-search.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target_source.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target_source.png
new file mode 100644
index 0000000..90cdcba
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target_source.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target_update.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target_update.png
new file mode 100644
index 0000000..60bd39b
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/target_update.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/teamcvs.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/teamcvs.png
new file mode 100644
index 0000000..6074a94
Binary files /dev/null and b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/teamcvs.png differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/xml-errors.png b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/xml-errors.png
deleted file mode 100644
index f0ce0c1..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/images/xml-errors.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm
index 9ea6117..f513641 100644
--- a/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm
+++ b/eclipse/plugins/org.eclipse.pde.doc.user/whatsNew/pde_whatsnew.htm
@@ -1,560 +1,445 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-<meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
-<meta http-equiv="Content-Language" content="en-us"/>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>PDE - What's New in 3.6</title>
-<link rel="stylesheet" href="../book.css" type="text/css"/>
-<style type="text/css">
-td {
-	border-top: solid thin black;
-}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Language" content="en-us" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <style type="text/css">
+/*<![CDATA[*/
+    table.news td {border-top: solid thin black;}
+    table.news tr {vertical-align: top;}
+    table.news tr td.section {font-size: 20px; font-weight: bold;}
+    table.news tr td.title {vertical-align: top; width: 30%; font-weight: bold;}
+    table.news tr td.content {vertical-align: top; width: 70%;}
+    /*]]>*/
+    </style>
+    <title>
+      PDE - What's New in 3.7
+    </title>
 
-img[alt] {
-	background-color: #ffdddd;
-}
+  </head>
+  <body>
+    <h2>
+      What's New in 3.7 (PDE)
+    </h2>
+    <p>
+      Here are descriptions of some of the more interesting or significant
+      changes made to the Plug-in Development Environment (PDE) for the 3.7
+      release of Eclipse, grouped into:
+    </p>
+    <ul>
+      <li>
 
-tr {
-	vertical-align: top;
-}
-</style>
-</head>
-<body>
-<h2>What's New in 3.6 (PDE)</h2>
-<p>Here are descriptions of some of the more interesting or
-significant changes made to the Plug-in Development Environment (PDE)
-for the 3.6 release of Eclipse, grouped into:</p>
-<ul>
-	<li><a href="#ViewsAndEditors">Views and Editors</a></li>
-	<li><a href="#Launching">Launching</a></li>
-	<li><a href="#TargetPlatform">Target Platform </a></li>
-	<li><a href="#Export">Import and Export</a></li>
-	<li><a href="#APITooling">API Tooling</a></li>
-	<li><a href="#Build">Build</a></li>
-</ul>
-<!-- ****************** START OF N&N TABLE ****************** -->
-<table cellpadding="10" cellspacing="0" width="600">
-	<tr>
-		<td colspan="2">
-		<h2><a name="ViewsAndEditors">Views and Editors </a></h2>
-		</td>
-	</tr>
-	
-	<tr id="osgiconsole">
-		<td align="left" valign="top" width="30%"><b>OSGi console </b></td>
-		<td valign="top" width="70%">An OSGi console is now available to
-		interact with the running framework. Use the <b>Open Console</b> drop
-		down action in the <b>Console View</b> to open a <b>Host OSGi Console</b>.
-		<p><img alt="Open an OSGi console to interact with the running framework" title="Open Host OSGi Console"
-			src="images/console-menu.png" /><br />
-		<br />
-		</p>
-		<p>You can then enter OSGi commands into the console to interact
-		directly with the framework running the IDE.</p>
-		</td>
-	</tr>
+        <a href="#ViewsAndEditors">Views and Editors</a>
+      </li>
+      <li>
+        <a href="#Launching">Launching</a>
+      </li>
+      <li>
+        <a href="#Import">Import</a>
 
-	<tr id="pde-xml-errors">
-		<td width="30%" valign="top" align="left"><b>XML error
-		reporting in context help and table of contents editors</b></td>
-		<td width="70%" valign="top">The context help editor and table of
-		contents editor now report XML errors.
-		<p><img src="images/xml-errors.png" alt="TOC Editor" /></p>
-		</td>
-	</tr>
+      </li>
+      <li>
+        <a href="#TargetPlatform">Target Platform</a>
+      </li>
+      <li>
+        <a href="#APITools">API Tools</a>
+      </li>
+    </ul><!-- ****************** START OF N&N TABLE ****************** -->
 
-	<tr id="toc.spell.check">
-		<td width="30%" valign="top" align="left"><b>Spell checking 
-		in context help and table of contents editors</b></td>
-		<td width="70%" valign="top">
-		<p>Spell checking is now available in the <strong>Table
-		of Contents</strong> (TOC) and <strong> Context Help</strong> editors.</p>
-		<p><img src="images/spell-check.png"
-			alt="Incorrectly spelled works are underlined in red" /></p>
-		</td>
-	</tr>
+    <table class="news" border="0" cellpadding="10" cellspacing="0" width=
+    "600">
+      <!-- ******************* Views/Editors ******************** -->
+      <tr>
+        <td id="ViewsAndEditors" class="section" colspan="2">
+          <h2>
+            Views and editors
+          </h2>
+        </td>
+      </tr>
 
-	<tr id="buildseverities">
-		<td align="left" valign="top" width="30%"><b>Configurable
-		problem severities for build.properties </b></td>
-		<td valign="top" width="70%">Severities for problems in
-		build.properties can now be configured individually via the <b>Preferences
-		> Plug-in Development > Compilers</b> preference page. Problem
-		severities can also be configured at the project level via a project's
-		<b>Properties > Plug-in Development > Plug-in Manifest
-		Compiler</b> property page.
-		<p><img alt="Severity Settings" title="Severity Settings"
-			src="images/build-severities.png" /><br />
-		<br />
-		</p>
-		</td>
-	</tr>
-	
-	<tr id="searchrepos">
-		<td align="left" valign="top" width="30%"><b>Search
-		repositories quickfix</b></td>
-		<td valign="top" width="70%">A new quickfix allows you to
-		conveniently search a set of repositories for a missing imported
-		package and have a bundle supplying the package added to your target
-		platform.
-		<p><img alt="Search Repositories Quickfix"
-			title="Search Repositories Quickfix" src="images/hover-quick-fix.png" /><br />
-		<br />
-		</p>
-		</td>
-	</tr>
-	
-	<tr id="pdecreateapi">
-		<td align="left" valign="top" width="30%"><b>API for plug-in
-		project creation</b></td>
-		<td valign="top" width="70%">An API is now available to create
-		and modify plug-in (bundle) projects. The API provides a description
-		of a project's bundle related attributes and allows them to be
-		modified declaratively. For example, a bundle's activator, required
-		bundles, package exports and imports can be queried and defined. As
-		well, the root of bundle (i.e. the folder containing <code>META-INF/MANIFEST.MF</code>)
-		can be placed anywhere inside a project (rather than just the root
-		project folder). The new API is available in the <code>org.eclipse.pde.core.project</code>
-		package of the <code>org.eclipse.pde.core</code> bundle.</td>
-	</tr>
+      <tr id="productproperties">
+        <td align="left" valign="top" width="30%">
+          <b>Properties in product editor</b>
+        </td>
+        <td valign="top" width="70%">
+          The product editor now has support to view, add and edit
+          configuration properties. The properties will be added to config.ini
+          files generated using the product configuration.
+          <p>
+            <img alt="Product Properties" title="Properties in Product Editor"
+            src="images/product-properties.png" /><br />
+            <br />
 
-	<tr>
-		<td colspan="2">
-		<h2><a name="Launching">Launching</a></h2>
-		</td>
-	</tr>
+          </p>
+        </td>
+      </tr>
+      <tr id="shared-license">
+        <td class="title">
+          Share licenses between features
+        </td>
+        <td class="content">
+          Many Eclipse features use the same license. For example, all features
+          in the Eclipse SDK use the Eclipse Foundation Software User
+          Agreement. Using the new shared license facility allows multiple
+          features to reference license text and files from a single location.
+          This makes updating licenses across multiple features easier and less
+          error prone.
+          <p>
 
-	<tr id="featurelaunch">
-		<td align="left" valign="top" width="30%"><b>Feature based
-		launch </b></td>
-		<td valign="top" width="70%">You can now manage the set of
-		plug-ins launched in Eclipse Applications, JUnit
-		Plug-in Tests, and OSGi Framework launch configurations
-		by selecting a set of features.
-		<p><img alt="Feature Based Launching"
-			title="Feature Based Launching" src="images/feature-launch.png" />
-		</p>
-		<p>
-		Features from both the workspace and the target can be 
-		included.  Individual plug-ins can be added to the launch
-		to include plug-ins that are not part of a feature.  PDE
-		will launch all the selected plug-ins as well as all required
-		plug-ins.
-		</p>
-		<p><img alt="Add individual plug-ins to a feature based launch"
-			title="Add Individual Plug-ins" src="images/add-plugins.png" />
-		</p>
-		<p>Features in the workspace are used over external features,
-		however, this can be configured by un-checking '<b>Use features
-		from workspace if available</b>'. Bundles in the workspace are used over
-		external bundles in the target platform. However, this can be
-		configured by modifying the configuration's default bundle resolution
-		policy, or can be configured per feature using the cell editors in the
-		'<b>Plug-in Location</b>' column.</p>
-		</td>
-	</tr>
+            To make use of the shared license facility, simply open your
+            feature.xml file in the feature editor. Select the
+            <b>Information</b> Tab and then the <b>License Agreement</b>
+            section. Selecting the <b>Shared license</b> radio button will
+            allow you to specify the feature and version that contains your
+            license text and optional license files.
+          </p><img src="images/shared-license.png" alt=
+          "Feature Editor With Shared License" />
+          <p>
+            When your feature is built it's license text will be taken from the
+            feature.xml of the referenced feature. As well, all files contained
+            in the referenced feature's Binary Build list (bin.includes) will
+            be included in your feature. If your feature already had license
+            files, you can remove them.
+          </p>
 
-	<tr id="headless-pde">
-		<td width="30%" valign="top" align="left"><b>Headless
-		launching support</b></td>
-		<td width="70%" valign="top">Launching support for Eclipse
-		Applications, JUnit Plug-in Tests, and OSGi Frameworks is provided by
-		a new headless plug-in (<code>org.eclipse.pde.launching</code>). This
-		allows applications without a user interface to leverage the launch
-		support programmatically.</td>
-	</tr>
+        </td>
+      </tr>
+      <tr id="buildmodel">
+        <td align="left" valign="top" width="30%">
+          <b>PDE build model API</b>
+        </td>
+        <td valign="top" width="70%">
+          Calling getBuildModel() on IPluginModelBase objects will now return a
+          handle to PDE's build model for that plug-in. The IBuildModel API can
+          be used to view and edit the contents of a build.properties file.
+        </td>
 
-	<tr>
-		<td width="30%" valign="top" align="left"><a name="consolelog"
-			id="consolelog"></a><b>Console log</b></td>
-		<td width="70%" valign="top">By <a
-			href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284704">popular
-		demand</a>, <code>-consoleLog</code> is added to new launch configuration
-		program arguments by default.
-		<p><img src="images/consolelog.png"
-			alt="Default program arguments" /></p>
-		</td>
-	</tr>
+      </tr><!-- ******************** Launching ********************** -->
+      <tr>
+        <td id="Launching" class="section" colspan="2">
+          <h2>
+            Launching
+          </h2>
+        </td>
+      </tr>
+      <tr id="pde-default-workspace-locations">
 
-	<tr id="generate-profile">
-		<td width="30%" valign="top" align="left"><b>Support software
-		installation while running and debugging</b></td>
-		<td width="70%" valign="top">Launched Eclipse Applications can
-		now support software installation operations. When the new option is
-		checked (on the <b>Configuration</b> tab of Eclipse Applications), a
-		p2 profile is generated when running or debugging. The profile
-		initially contains all bundles in the target and can be modified by
-		software installation operations. The profile is regenerated on each
-		subsequent run or debug session, but is maintained across restart
-		operations.
-		<p><img src="images/soft-install.png"
-			alt="Configuration tab of Eclipse Application" /></p>
-		</td>
-	</tr>
+        <td class="title">
+          Default workspace locations
+        </td>
+        <td class="content">
+          If you want to run multiple JUnit Plug-in Tests or Eclipse
+          Application launch configurations in parallel, you need to make sure
+          the launch configurations use separate workspaces.
+          <p>
+            <img src="images/edit-default-workspace.png" alt=
+            "Configure defaults link" />
+          </p>
+          <p>
+            On the <b>Plug-in Development</b> preference page, you can choose
+            the default workspace location for new launch configurations. If
+            you select "Append launch configuration name to this location", you
+            will get separate workspaces for different launch configurations.
+          </p>
 
-	<tr>
-		<td colspan="2">
-		<h2><a name="Export">Import and Export </a></h2>
-		</td>
-	</tr>
+          <p>
+            <img src="images/default-workspace-preference.png" alt=
+            "Plug-in Development preference page" />
+          </p>
+        </td>
+      </tr>
+      <tr id="pde-applicationsandui">
+        <td class="title">
+          Applications do not require UI to launch
+        </td>
 
-	<tr id="importcvs">
-		<td align="left" valign="top" width="30%"><b>Import from CVS
-		</b></td>
-		<td valign="top" width="70%">The <b>Plug-in Import</b> wizard
-		allows you to import projects from CVS corresponding to bundles in the
-		target platform. This feature is available for bundles that define the
-		<b>Eclipse-SourceReferences</b> header. On the first page of the
-		import wizard select the <b>Import As > Projects from a repository</b>
-		option.
-		<p><img alt="Import from a repository"
-			title="Import From Repository" src="images/from-repo.png" />
-		</p>
-		<p>The second page allows you to choose from all bundles with
-		source repository information. Select the bundles you want to import
-		and press <b>Next</b>.</p>
-		<p><img alt="Select bundles to import"
-			title="Select Bundles to Import" src="images/avail.png" />
-		</p>
-		<p>The last page of the wizard allows you to import the specific
-		versions of the bundles used in the target platform or from HEAD.
-		Pressing <b>Finish</b> will import the projects into your workspace.</p>
-		<p><img alt="Select Version" title="Select Version"
-			src="images/head-version.png" />
-		</p>
-		<p>You can also import projects from the <b>Plug-ins</b> view. Use the <b>Import As > Project from a Repository...</b> action
-		to import plug-ins from CVS. 
-		</p>
-		<p><img alt="Import plug-in projects from CVS" title="Import plug-in projects from CVS"
-			src="../guide/images/tasks/import-from-plugins-view.png" />
-		</p>
-		</td>
-	</tr>
+        <td class="content">
+          When launching an <b>Eclipse Application</b> or <b>JUnit Plug-in
+          Test</b> you can now select an application to run. Previously, the
+          application framework required UI plug-ins to run, forcing launch
+          configurations to add additional dependencies. In 3.7, applications
+          that run headless (without UI) will not require UI plug-ins to be
+          available.
+          <p>
+            <img src="images/application.png" alt=
+            "Select application on launch" />
+          </p>
+        </td>
 
-	<tr id="exporttarget">
-		<td align="left" valign="top" width="30%"><b>Export target
-		content </b></td>
-		<td valign="top" width="70%">It's now possible to export the
-		contents of your current target platform into a destination directory
-		via the export active target definition wizard. In the list of export
-		wizards (<b>File -> Export...</b>), you'll find the wizard available
-		under <b>Plug-in Development -> Target definition</b>.
-		<p><img alt="Export Active Target Wizard"
-			title="Export Active Target Wizard" src="images/export-target.png" /><br />
-		<br />
-		</p>
-		<p>Note: This will copy all features and plug-ins that are part of
-		your currently set target platform to the destination directory.</p>
-		</td>
-	</tr>
-	
-	<tr>
-		<td colspan="2">
-		<h2><a name="TargetPlatform">Target Platform</a></h2>
-		</td>
-	</tr>
+      </tr>
+      <tr id="PDE-sourceattach">
+        <td class="title">
+          Editable source attachments
+        </td>
+        <td class="content">
+          By default, the source attachment for Plug-in Dependencies is a
+          source bundle in the target platform. You can now change the source
+          attachment during development.
+          <p>
+            While developing or debugging, if a class file is opened that has
+            no attached source available, you can now set a custom source
+            location. Class file editors provide a button to do this, but the
+            source attachment can be modified at any time by right clicking on
+            it and selecting <b>Properties</b>. Changes are not persisted
+            between workspace restarts.
+          </p>
 
-	<tr id="featuretarget">
-		<td align="left" valign="top" width="30%"><b>Feature based
-		target </b></td>
-		<td valign="top" width="70%">You can now manage the set of
-		bundles in a target platform by selecting a set of features.
-		Additionally, you can select from bundles that are not contained in
-		any feature. On a target definition's <b>Content</b> tab select the <b>Manage
-		using Features</b> radio button. This provides coarse grained management
-		of bundles in a target. When a feature is selected, all bundles in
-		that feature are added to the target.
-		<p><img alt="Target Based Features" title="Target Based Features"
-			src="images/target-features.png" /><br />
-		<br />
-		</p>
-		</td>
-	</tr>
+        </td>
+      </tr><!-- ******************* Import/Export ******************** -->
+      <tr>
+        <td id="Import" class="section" colspan="2">
+          <h2>
+            Import
+          </h2>
+        </td>
+      </tr>
 
-	<tr id="pdetargetdialog">
-		<td align="left" valign="top" width="30%"><b>Add to target
-		platform dialog</b></td>
-		<td valign="top" width="70%">The <b>Add Artifact to Target
-		Platform</b> dialog (Ctrl+Shift+Alt+A) allows you to quickly search a set
-		of repositories for dependencies (bundle, feature or package) to add
-		to your current target platform.
-		<p><img alt="Add Artifact to Target Platform Dialog"
-			title="Add Artifact to Target Platform Dialog"
-			src="images/add-to-target.png" /><br />
-		<br />
-		</p>
-		</td>
-	</tr>
-	
-	<tr id="synch-java-search">
-		<td width="30%" valign="top" align="left"><b>Synchronize Java
-		search with target platform</b></td>
-		<td width="70%" valign="top">You can automatically synchronize
-		Java search operations with the target platform via the <b>Preferences
-		> Plug-in Development</b> preference page.
-		<p><img src="images/target-search.png"
-			alt="Preferences > Plug-in Development" /></p>
-		<p>Java search operations are scoped to workspace projects and
-		their dependencies. Developers don't typically have the entire target
-		platform in their workspace and thus Java search operations don't
-		locate references from many upstream plug-ins. You can manually add
-		plug-ins to the Java search path using the <b>Add All Plug-ins to
-		Java Search</b> action in the Plug-ins view. However, the new preference
-		automatically keeps the search path in synch with the target platform.</p>
-		<p>Under the covers a project named <i>External Plug-in
-		Libraries</i> is created with all external plug-ins in the target platform
-		on its build path.</p>
-		</td>
-	</tr>
+      <tr id="pde-teamimportapi">
+        <td class="title">
+          Import from repository uses Eclipse CVS support
+        </td>
+        <td class="content">
+          When using the <b>Import Plug-ins and Fragments Wizard</b> there is
+          an option to import projects from a repository. This option searches
+          for a custom header in the plug-in manifest to find a repository to
+          check out source from. This feature now uses API from Eclipse CVS to
+          perform the import. The import now uses several CVS features
+          including finding alternative repository locations and password
+          storage.
+          <p>
+            <img src="images/teamcvs.png" alt="Import plugin from CVS" />
 
-	<tr>
-		<td colspan="2">
-		<h2><a name="APITooling">API Tooling </a></h2>
-		</td>
-	</tr>
+          </p>
+        </td>
+      </tr><!-- ***************** Target Platform ******************* -->
+      <tr>
+        <td id="TargetPlatform" class="section" colspan="2">
+          <h2>
+            Target Platform
+          </h2>
+        </td>
 
-	<tr id="pde-api-deprecation">
-		<td width="30%" valign="top" align="left"><b>Compare with
-		baseline now reports deprecations</b></td>
-		<td width="70%" valign="top">When performing <b>Compare With
-		> API Baseline...</b>, deprecation changes are now reported. This
-		allows you to quickly identify what has been deprecated between two
-		releases of a project.
-		<p><img src="images/api-deprecation.png" alt="TOC Editor" /></p>
-		</td>
-	</tr>
+      </tr>
+      <tr id="targetresolution">
+        <td align="left" valign="top" width="30%">
+          <b>p2 Target definition performance</b>
+        </td>
+        <td valign="top" width="70%">
+          Target definitions that use a p2 repository as a location will see
+          improved performance in 3.7. Previously, each time a p2 target
+          definition was opened, the remote repository was accessed to
+          determine if all required plug-ins were available. Now, this
+          information is stored locally in a p2 profile.
+          <p>
+            If the target definition is modified or a required plug-in cannot
+            be found, the target will do a full resolve operation, accessing
+            the remote repository and downloading any missing plug-ins.
+          </p>
 
-	<tr id="api.use.scans">
-		<td width="30%" valign="top" align="left"><b>API use reports
-		</b></td>
-		<td width="70%" valign="top">
-		<p>You can generate reports describing what API and internals are
-		being used by other bundles. API use reports have been integrated as
-		an external tool (<strong>Run > External Tools >
-		External Tool Configurations...</strong>). For example, the following report
-		settings are used to generate a report revealing which internal
-		components of the debug platform are being consumed by JDT.</p>
-		<p><img src="images/api-scan.png" alt="API use report settings" />
-		</p>
-		<p>A report is run against a set of bundles which can be specified
-		as an API baseline, a target definition or a directory of bundles. You
-		can search for API and/or internal references and you can limit the
-		report to specific bundles by using regular expressions. You must
-		specify an output location (directory) for the report and whether to
-		generate HTML.</p>
-		<p>Package exports in bundle manifests are used to determine
-		package visibility. Any package exports with an <em>x-internal</em> or
-		<em>x-friends</em> modifier will be considered internal. All other
-		packages are considered API. The <strong>Patterns</strong> tab can be
-		used to augment package visibility information by specifying regular
-		expressions to identify packages, and whether those packages should be
-		considered API or internal. For example, since TPTP specifies all
-		packages as API, the following patterns could be used to identify its
-		internal packages.</p>
-		<p><img src="images/patterns.png"
-			alt="Specify package visibility using the patterns tab" /></p>
-		</td>
-	</tr>
+          <p>
+            <img alt="Target Resolution" title="p2 Target Definition" src=
+            "images/target-resolution.png" /><br />
+            <br />
+          </p>
+        </td>
+      </tr>
+      <tr id="offlinetargets">
+        <td align="left" valign="top" width="30%">
+          <b>Offline p2 target definitions</b>
 
-	<tr id="apireports">
-		<td align="left" valign="top" width="30%"><b>Customize API
-		use scan reports </b></td>
-		<td valign="top" width="70%">A new wizard helps you customize API
-		use reports. From the <b>Patterns</b> tab of an <b>API Use Report</b>
-		launch configuration (available via External Tools), press the <b>Add</b>
-		button to open the wizard and create custom pattern filters.
-		<p><img alt="API Pattern Wizard" title="API Pattern Wizard"
-			src="images/api-filters.png" />
-		</p>
-		<p>An <b>Archive Pattern</b> allows specific jars within bundles
-		to be omitted from the scan. A <b>Package Pattern</b> allows you to
-		specify which packages should be considered API or non-API (override
-		visibility definitions in bundle manifests). A <b>Report
-		Conversion Pattern</b> allows specific references to be filtered from the
-		final report. You can filter references from or to locations based on
-		regular expressions.</p>
-		</td>
-	</tr>
+        </td>
+        <td valign="top" width="70%">
+          As an added benefit to performance improvements of p2 based target
+          definitions, the target editor is much more functional with an
+          intermittent network connection. Once a target definition has
+          connected to the remote repository and downloaded all required
+          plug-ins, a network connection is no longer required to open the
+          editor, set the definition as the target platform, and in some cases
+          even modify the target.
+        </td>
+      </tr>
+      <tr id="TargetUpdate">
+        <td class="title">
+          Update target definitions
+        </td>
+        <td class="content">
 
-	<tr id="build-properties">
-		<td width="30%" valign="top" align="left"><b>Enhanced
-		build.properties validation</b></td>
-		<td width="70%" valign="top">Redundant entries in source builds
-		are now flagged with a warning by default.
-		<p><img src="images/src-builds.png" alt="Source folder validation" /></p>
-		</td>
-	</tr>
+          Target definitions that contain p2 repository locations can be
+          updated to use the most recent version available. To update a target,
+          press <b>Update</b> on the locations tab of the target definition
+          editor. If a specific location or software item is selected, only
+          that item will be updated, otherwise all locations will be updated.
+          If a newer version cannot be found in the repository, your target
+          will not be changed. <img src="images/target_update.png" alt=
+          "Update button for target definitions" />
+        </td>
+      </tr>
+      <tr id="TargetLocal">
+        <td class="title">
+          Targets use local repositories
+        </td>
 
-	<tr>
-		<td width="30%" valign="top" align="left"><a
-			name="usescanpatterntab" id="usescanpatterntab"></a><b>API use
-		report filters</b></td>
-		<td width="70%" valign="top">You can now add filter patterns to
-		API use reports to constrain what references are reported. This
-		feature is available in UI and in API tooling Ant tasks. When you
-		press <b>Add</b> on the <b>Patterns</b> tab a wizard allows you to
-		craft a variety of patterns. An archive pattern is used to skip
-		specific jars. A package pattern is used to define a package as API or
-		internal (to override a bundle manifest). A report conversion pattern
-		is used to skip specific references during report creation (by
-		specifying a regular expression of reference origins to skip).
-		<p><img src="images/pattern-wizard.png"
-			alt="Create new patterns using the convenient wizard" /></p>
-		<p>For example, to use an archive pattern to filter references
-		from specific archives within bundles, select <b>Archive Pattern</b>
-		and press <b>Next</b>. The wizard allows you to easily craft an
-		archive pattern.</p>
-		<p><img src="images/archive-wizard.png"
-			alt="Create a new archive pattern using the convenient wizard" /></p>
-		<p>When you press <b>Finish</b> the pattern appears in the <b>Patterns</b>
-		table.</p>
-		<p><img src="images/archive.png" alt="Archive pattern" /></p>
-		</td>
-	</tr>
+        <td class="content">
+          When a target definition that contains a p2 repository location
+          resolves, plug-ins must be downloaded to a local cache. However, many
+          of the required plug-ins may already be available locally. Target
+          definitions will now try to copy local plug-ins from the running
+          Eclipse instance or known workspaces instead of downloading them
+          remotely.
+        </td>
+      </tr>
+      <tr id="TargetMultiple">
+        <td class="title">
+          Software sites collaborate
+        </td>
+        <td class="content">
+          Previously, Software Site locations in target definitions considered
+          only one repository when looking for dependencies. Now, the
+          repositories from all Software Site locations in the current target
+          definition are used when resolving dependencies.
+        </td>
 
-	<tr>
-		<td width="30%" valign="top" align="left"><a name="meta-data"
-			id="meta-data"></a><b>API use report details</b></td>
-		<td width="70%" valign="top">You can now provide comments to
-		accompany an API use report, which will show up in the reports as
-		additional information along with the scan parameters for reference.
-		This feature is available in the UI and in API tooling Ant tasks.
-		<p><img src="images/description.png" alt="Scan description" /></p>
-		<p>The resulting report could look like the following.</p>
-		<p><img src="images/scandetails.png"
-			alt="Sample use scan details report header." /></p>
-		</td>
-	</tr>
+      </tr>
+      <tr id="TargetSource">
+        <td class="title">
+          Source for target definitions
+        </td>
+        <td class="content">
+          When you create a target definition containing a Software Site
+          location, there is now an option to automatically find and download
+          source for the software items you have selected from the set of
+          repositories known to the target definition. <img src=
+          "images/target_source.png" alt=
+          "Include source option for target definitions" />
+        </td>
+      </tr>
 
-	<tr>
-		<td colspan="2">
-		<h2><a name="Build">Build </a></h2>
-		</td>
-	</tr>
+      <tr id="TargetExport">
+        <td class="title">
+          Target definition export improvements
+        </td>
+        <td class="content">
+          Target Definition exporting has been enhanced to create proper p2
+          metadata and artifact repositories in the destination (for Software
+          Site content), to honor content (de)selection and to allow non-active
+          target definitions to be exported.
+        </td>
+      </tr><!-- ******************** API Tools ********************** -->
+      <tr>
+        <td id="APITools" class="section" colspan="2">
 
-	<tr id="error-options">
-		<td width="30%" valign="top" align="left"><b>Enhanced
-		compiler error options for PDE build</b></td>
-		<td width="70%" valign="top">PDE/Build can now take advantage of
-		new support from the JDT compiler to specify that certain warnings
-		should instead be reported as errors.
-		<p>Set the property <tt>javacErrors.<library></tt> in your
-		build.properties. Similar to the <tt>javacWarnings.<library></tt>
-		property, specify the <a
-			href="../../org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm">warnings</a>
-		that should be reported as errors:</p>
-		<pre>
-    	javacErrors.. = forbidden,discouraged,
-    	javacErrors.library.jar = deprecation,nullDereference
-    	</pre></td>
-	</tr>
+          <h2>
+            API Tools
+          </h2>
+        </td>
+      </tr>
+      <tr id="includelists">
+        <td align="left" valign="top" width="30%">
+          <b>Include lists in Ant tasks</b>
+        </td>
 
-	<tr>
-		<td width="30%" valign="top" align="left"><a
-			name="buildproperties" id="buildproperties"></a><b>Synchronize
-		project settings with PDE build</b></td>
-		<td width="70%" valign="top">To ensure PDE will export and build
-		your project with the same settings as in the workspace there are new
-		checks to synchronize project specific compiler and build path
-		settings with <code>build.properties</code>. The following validations
-		are performed and quick fixes are provided for any problems.
-		<ul>
-			<li>Compiler compliance, source and target levels match <code>jre.compliance.profile</code>,
-			<code>javacSource</code>, and <code>javacTarget</code> properties
-			(only required when compiler settings do not match default settings
-			for a bundle's required execution environment).</li>
-			<li>Folders in <code>source.<library></code> exist, are
-			source folders on the Java build path, and are not duplicated.</li>
-			<li>Folders in <code>output.<library></code> exist, are
-			output folders or class file folders on the Java build path, and are
-			not duplicated.</li>
-			<li>Each <code>output.<library></code> entry contains all
-			output locations of its corresponding source folders on the Java
-			build path.</li>
-			<li>Source folders targeted to different libraries do not share
-			the same output location.</li>
-			<li>Source folders are not included in <code>src.includes</code>
-			entries (they are included by default).</li>
-			<li>Additionally, a check can be performed to ensure an <code>output.<library></code>
-			exists for each <code>source.<library></code> entry. By
-			default, this problem is ignored but can be turned on via <b>Preferences
-			> Plug-in Development > Compilers</b> (or project specific <b>Properties
-			> Plug-in Development > Plug-in Manifest Compiler</b>). This option
-			is useful when using the PDE option to export existing class files
-			from the workspace.</li>
-		</ul>
-		<p><img src="images/buildproperties.png"
-			alt="Build.properties validation" /></p>
-		</td>
-	</tr>
+        <td valign="top" width="70%">
+          API Tooling Ant tasks that support exclude lists now also support
+          include lists. The include list seeds the set of bundles and members
+          to be analyzed (when omitted, all bundles and members are included),
+          and the exclude list is then applied. Include lists have the same
+          structure as the exclude lists, allowing specific bundles/members,
+          regular expressions and comments to be added.
+        </td>
+      </tr>
+      <tr id="consumerreport">
+        <td align="left" valign="top" width="30%">
+          <b>Consumer use report</b>
+        </td>
+        <td valign="top" width="70%">
 
-	<tr id="pdebuildsynch">
-		<td align="left" valign="top" width="30%"><b>Synchronize
-		project settings with PDE build</b></td>
-		<td valign="top" width="70%">It's easier to synchronize your
-		project specific compiler settings and file encoding settings with PDE
-		build. Two new options appear in the <b>Build</b> section of the <b>Preferences
-		> Plug-in Development > Compilers </b> preference page. By default the new
-		options are set to <b>Ignore</b>.
-		<p><img alt="Build validation settings"
-			title="Build Validation Settings" src="images/synch-settings.png" />
-		</p>
-		<p>When set to <b>Warning</b> or <b>Error</b> problem markers will
-		appear when your project settings are not reflected in <code>build.properties</code>.
-		Quick fixes are available to help you synchronize the settings.</p>
-		<p><img alt="Warnings" title="Build Validation Warnings"
-			src="images/synch-warnings.png" />
-		</p>
-		<p>A new <code>javacProjectSettings</code> property is supported
-		in <code>build.properties</code>. The value can be a project relative
-		path to a preference settings file of compiler options supported by
-		the JDT compiler, or it can simply by <code>true</code> to indicate
-		the default preference file should be used (<code>.settings/org.eclipse.jdt.core.prefs</code>).
-		</p>
-		</td>
-	</tr>
-	
-	<tr id="bundleCompilerArgs">
-		<td align="left" valign="top" width="30%"><b>Plug-in specific
-		compiler arguments</b></td>
-		<td valign="top" width="70%">A bundle can now specify custom
-		compiler arguments to be used in export or releng builds by setting <b><tt>compilerArgs</tt></b>
-		in its build.properties file..
-		<p>These arguments will be specified in addition to whatever
-		general compiler arguments are specified by the releng setup.</p>
-		</td>
-	</tr>
-	
-	<tr id="customCompilerAdapter">
-		<td align="left" valign="top" width="30%"><b>Custom compiler
-		adapters</b></td>
-		<td valign="top" width="70%">A bundle can now specify a custom
-		ant compiler adapter to be used during export or releng builds. This
-		allows for compiling non-java sources such as AspectJ or Groovy
-		provided a suitable adapter is available.
-		<p>Set <b><tt>compilerAdapter</tt></b> in the bundle's
-		build.properties file. As well, set <b><tt>sourceFileExtensions</tt></b>
-		to a list of file extensions which should be treated as source and
-		automatically copied to generated source bundles.</p>
-		</td>
-	</tr>
+          The API Consumer Use Report Conversion task is a new Ant task that
+          generates an HTML report from the XML result of a use scan. The
+          information is organized in a different format than the standard
+          report converter produces. The references are organized by consumer
+          bundle, the bundle which contains the code that references the
+          API/type. The standard report organizes references by the bundle that
+          produced the API/type.
+        </td>
+      </tr>
+      <tr id="UseScans">
+        <td class="title">
+          API use scan builder
+        </td>
+        <td class="content">
+          The API Analysis builder now supports scanning of API use scan
+          reports. Any API use scans added to the <b>API Use Scans</b>
 
-	<tr id="pdeerrors">
-		<td align="left" valign="top" width="30%"><b>Improved error
-		reporting from PDE build</b></td>
-		<td valign="top" width="70%">A new <code>prereqErrors.log</code>
-		file is generated by PDE build. The file helps locate bundles lowest
-		on the stack with compilation errors. An entry is added for each
-		bundle with build errors describing any prerequisite bundles that
-		contained compile errors. Entries are added in the order bundles are
-		compiled. For example:
-		<p><code> org.eclipse.debug.ui_3.6.0.201004141459: the
-		following prerequisites contain compile errors<br />
-		    org.eclipse.debug.core_3.6.0.201004141459 </code></p>
-		</td>
-	</tr>
-</table>
-</body>
+          preference page will be compared to the current workspace. If any
+          type, method or field references found in the scan have been removed,
+          the builder will report an <b>API Use Scan Problem</b>.
+          <p>
+            Reports can be added to the page as directories or archives. Only
+            the checked reports are considered by the builder.
+          </p><img src="images/api-use-scan-preference-page.png" alt=
+          "API Use Scans preference page" />
+          <p>
+            The <b>API Errors/Warnings</b> preference page has a new <b>API Use
+            Scans</b> tab. You can set the severity levels of the reported
+            problems. By default all the problem type severities are set to
+            <b>Ignore</b>. The builder will not check any use scans if all
+            severities are set to <b>Ignore</b>.
+          </p><img src="images/api-errors-warning-api-use-scan.png" alt=
+          "API Use Scans severities" />
+
+        </td>
+      </tr>
+      <tr id="ConsumerBasedLaunch">
+        <td class="title">
+          Consumer reports in launch configuration
+        </td>
+        <td class="content">
+          The API use scan launch configuration, available under external tools
+          launches, now can create a consumer based report. The consumer based
+          report organizes the use scan references by the plug-in that
+          references the field, method or type (the normal report organizes by
+          the bundle the created the field, method or type). The ant task that
+          creates the consumer report is still available for releng builds.
+          <img src="images/consumer_configuration.png" alt=
+          "Consumer Report option in the use scan launch configuration" />
+        </td>
+
+      </tr>
+      <tr id="pde-usescantask">
+        <td class="title">
+          Ant task to report missing use scan references
+        </td>
+        <td class="content">
+          A new Ant task is available from API Tools that will compare a
+          profile against a list of use scans and report any missing
+          references. A HTML converter task is also available to provide a
+          formatted report. The task will report the same missing references in
+          the IDE when the <b>API Use Scan</b> preference page is used.
+          Documentation for the task is available in the <b>Reference</b>
+
+          section of the <b>Plug-in Development Environment Guide</b>.
+        </td>
+      </tr>
+      <tr id="PDE-scancounts">
+        <td class="title">
+          Summaries for API Tools Ant tasks
+        </td>
+        <td class="content">
+          For the API analysis tools that use Ant tasks, you now get a simple
+          index file with summary counts of the kinds of problems found by the
+          tasks.
+          <p>
+
+            These summaries are located in the root of the output directory for
+            each scan in a file named <code>counts.xml</code>
+          </p>
+        </td>
+      </tr>
+    </table>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/icons/wizban/defcon_wiz.png b/eclipse/plugins/org.eclipse.pde.ds.ui/icons/wizban/defcon_wiz.png
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/Messages.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/Messages.java
index 588295a..f4f7de2 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2011 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,10 @@ public class Messages extends NLS {
 	public static String DSFileWizardPage_component_name;
 	public static String DSFileWizardPage_implementation_class;
 	public static String DSFileWizardPage_browse;
+	public static String DSFileWizardPage_ComponentNeedsClass;
+	public static String DSFileWizardPage_ComponentNeedsFileName;
+	public static String DSFileWizardPage_ComponentNeedsName;
+	public static String DSFileWizardPage_ExampleComponentName;
 	public static String DSFileWizardPage_selectType;
 	public static String DSFileWizardPage_not_OSGI_folder;
 	
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSLabelProvider.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSLabelProvider.java
index 83ae4b1..0ae48ea 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2009 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourcePage.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourcePage.java
index 2ae5fa9..308ce62 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourcePage.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourcePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2011 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ds.ui.editor;
 
-import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.pde.internal.core.text.IDocumentAttributeNode;
 import org.eclipse.pde.internal.core.text.IDocumentElementNode;
 import org.eclipse.pde.internal.core.text.IDocumentRange;
@@ -28,6 +24,12 @@ import org.eclipse.pde.internal.ui.editor.XMLSourcePage;
 import org.eclipse.pde.internal.ui.editor.text.ChangeAwareSourceViewerConfiguration;
 import org.eclipse.pde.internal.ui.editor.text.IColorManager;
 
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ViewerComparator;
+
+import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
+
 public class DSSourcePage extends XMLSourcePage {
 
 
@@ -138,7 +140,7 @@ public class DSSourcePage extends XMLSourcePage {
 	 * @see org.eclipse.ui.part.EditorPart#setPartName(java.lang.String)
 	 */
 	protected void setPartName(String partName) {
-		super.setPartName(Messages.DSSourcePage_partName); //$NON-NLS-1$
+		super.setPartName(Messages.DSSourcePage_partName);
 	}
 
 
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourceViewerConfiguration.java
index 2ff04e8..830e768 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2009 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditPropertyDialog.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditPropertyDialog.java
index 3a97f2b..e7c2854 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditPropertyDialog.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditPropertyDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2009 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditProvideDialog.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditProvideDialog.java
index ec7c05a..00a5b33 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditProvideDialog.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/dialogs/DSEditProvideDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2009 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSComponentSection.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSComponentSection.java
index 0d1c734..f95bf64 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSComponentSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSComponentSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2011 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,15 +14,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ds.ui.editor.sections;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.pde.core.IModelChangedEvent;
 import org.eclipse.pde.internal.ds.core.IDSComponent;
 import org.eclipse.pde.internal.ds.core.IDSImplementation;
@@ -37,17 +28,33 @@ import org.eclipse.pde.internal.ds.ui.wizards.DSNewClassCreationWizard;
 import org.eclipse.pde.internal.ui.editor.PDEFormPage;
 import org.eclipse.pde.internal.ui.editor.PDESection;
 import org.eclipse.pde.internal.ui.util.PDEJavaHelperUI;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.core.resources.IProject;
+
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.events.HyperlinkEvent;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
 
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+
+import org.eclipse.jdt.ui.IJavaElementSearchConstants;
+import org.eclipse.jdt.ui.JavaUI;
+
 public class DSComponentSection extends PDESection {
 
 	private IDSComponent fComponent;
@@ -143,13 +150,17 @@ public class DSComponentSection extends PDESection {
 		}
 
 		if (fNameEntry != null) {
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					updateUIFields();
-				}
-			});
+			Display display= fNameEntry.getText().getDisplay();
+			if (display.getThread() == Thread.currentThread())
+				updateUIFields();
+			else
+				display.asyncExec(new Runnable() {
+					public void run() {
+						if (!fNameEntry.getText().isDisposed())
+							updateUIFields();
+					}
+				});
 		}
-
 	}
 
 	public void updateUIFields() {
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSOptionsSection.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSOptionsSection.java
index c8c9094..9b2de9f 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSOptionsSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSOptionsSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2011 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ds.ui.editor.sections;
 
-import org.eclipse.jface.layout.GridDataFactory;
 import org.eclipse.pde.core.IModelChangedEvent;
 import org.eclipse.pde.internal.ds.core.IDSComponent;
 import org.eclipse.pde.internal.ds.core.IDSConstants;
@@ -24,6 +23,7 @@ import org.eclipse.pde.internal.ds.ui.parts.ComboPart;
 import org.eclipse.pde.internal.ds.ui.parts.FormEntry;
 import org.eclipse.pde.internal.ui.editor.PDEFormPage;
 import org.eclipse.pde.internal.ui.editor.PDESection;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -35,6 +35,9 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.jface.layout.GridDataFactory;
+
 import org.eclipse.ui.forms.IFormColors;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
@@ -146,11 +149,16 @@ IFormColors.TITLE));
 			markStale();
 		}
 
-		Display.getDefault().syncExec(new Runnable() {
-			public void run() {
-				updateUIFields();
-			}
-		});
+		Display display= fEnabledButton.getDisplay();
+		if (display.getThread() == Thread.currentThread())
+			updateUIFields();
+		else
+			display.asyncExec(new Runnable() {
+				public void run() {
+					if (!fEnabledButton.isDisposed())
+						updateUIFields();
+				}
+			});
 	}
 
 	public void updateUIFields() {
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSPropertiesSection.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSPropertiesSection.java
index 7078b7e..520d8c7 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSPropertiesSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/sections/DSPropertiesSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2011 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,21 +14,6 @@ package org.eclipse.pde.internal.ds.ui.editor.sections;
 
 import java.util.Iterator;
 
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.core.IModelChangedEvent;
 import org.eclipse.pde.internal.core.text.IDocumentElementNode;
@@ -50,11 +35,30 @@ import org.eclipse.pde.internal.ui.editor.context.InputContextManager;
 import org.eclipse.pde.internal.ui.elements.DefaultTableProvider;
 import org.eclipse.pde.internal.ui.parts.EditableTablePart;
 import org.eclipse.pde.internal.ui.parts.TablePart;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Table;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.window.Window;
+
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
 import org.eclipse.ui.dialogs.ISelectionStatusValidator;
@@ -451,9 +455,10 @@ public class DSPropertiesSection extends TableSection {
 			fPropertiesTable.refresh();
 			updateButtons();
 		}
-		Display.getDefault().asyncExec(new Runnable() {
+		fPropertiesTable.getTable().getDisplay().asyncExec(new Runnable() {
 			public void run() {
-				updateTitle();
+				if (!fPropertiesTable.getTable().isDisposed())
+					updateTitle();
 			}
 		});
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/messages.properties b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/messages.properties
index 4bd8e8a..2d3912f 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2008, 2009 IBM Corporation and others.
+# Copyright (c) 2008, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -40,6 +40,10 @@ DSFileWizardPage_group=Component Definition Information
 DSFileWizardPage_component_name=N&ame: 
 DSFileWizardPage_implementation_class=C&lass:
 DSFileWizardPage_browse=Bro&wse...
+DSFileWizardPage_ComponentNeedsClass=The component definition must have a valid class name
+DSFileWizardPage_ComponentNeedsFileName=File Name can not be empty
+DSFileWizardPage_ComponentNeedsName=The component definition must have a name
+DSFileWizardPage_ExampleComponentName=Component Definition
 DSFileWizardPage_selectType= Select Type
 DSFileWizardPage_not_OSGI_folder=By convention, component files should be located in OSGI-INF/ folder
 
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSCreationOperation.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSCreationOperation.java
index 94394de..5aa529d 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSCreationOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSCreationOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2011 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,15 +16,6 @@ package org.eclipse.pde.internal.ds.ui.wizards;
 import java.lang.reflect.InvocationTargetException;
 import java.util.StringTokenizer;
 
-import org.eclipse.core.resources.ICommand;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.pde.core.IBaseModel;
 import org.eclipse.pde.core.build.IBuildEntry;
 import org.eclipse.pde.core.build.IBuildModel;
@@ -45,7 +36,21 @@ import org.eclipse.pde.internal.ds.ui.IConstants;
 import org.eclipse.pde.internal.ds.ui.Messages;
 import org.eclipse.pde.internal.ui.util.ModelModification;
 import org.eclipse.pde.internal.ui.util.PDEModelUtility;
+
 import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
+
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -159,7 +164,7 @@ public class DSCreationOperation extends WorkspaceModifyOperation {
 
 	private boolean containsValue(String header, String value) {
 		value = value.trim();
-		StringTokenizer st = new StringTokenizer(header, ",");
+		StringTokenizer st= new StringTokenizer(header, ","); //$NON-NLS-1$
 		while (st.hasMoreElements()) {
 			String token = st.nextToken();
 			if (value.equals(token.trim())) {
diff --git a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSFileWizardPage.java b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSFileWizardPage.java
index 4afc1e3..8307b2d 100644
--- a/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSFileWizardPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/wizards/DSFileWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2011 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -109,6 +109,9 @@ public class DSFileWizardPage extends WizardNewFileCreationPage {
 			if (project != null)
 				setComponentNameText(project);
 		}
+		if (fDSComponentNameText.getText().trim().length() == 0) {
+			fDSComponentNameText.setText(Messages.DSFileWizardPage_ExampleComponentName);
+		}
 	}
 
 	private IProject getProject(Object element) {
@@ -237,7 +240,7 @@ public class DSFileWizardPage extends WizardNewFileCreationPage {
 		classTextGridData.horizontalSpan = 1;
 		classTextGridData.horizontalIndent = 3;
 		fDSImplementationClassText.setLayoutData(classTextGridData);
-		fDSImplementationClassText.setText(""); //$NON-NLS-1$
+		fDSImplementationClassText.setText("Component"); //$NON-NLS-1$
 		fDSImplementationClassText.addModifyListener(new ModifyListener() {
 			public void modifyText(ModifyEvent e) {
 				setPageComplete(isPageComplete());
@@ -291,14 +294,6 @@ public class DSFileWizardPage extends WizardNewFileCreationPage {
 		return fDSImplementationClassText.getText();
 	}
 
-	private boolean checkPageComplete() {
-		if (fDSComponentNameText == null || fDSImplementationClassText == null) {
-			return false;
-		}
-		return fDSComponentNameText.getText().length() > 0
-				&& fDSImplementationClassText.getText().length() > 0;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -318,23 +313,43 @@ public class DSFileWizardPage extends WizardNewFileCreationPage {
 		Dialog.applyDialogFont(fGroup);
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
+	 */
 	public boolean isPageComplete() {
-		return checkPageComplete() && validatePage();
+		return validatePage();
 	}
 
 	public void saveSettings(IDialogSettings settings) {
 		settings.put(S_COMPONENT_NAME, getFileName());
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.dialogs.WizardNewFileCreationPage#validatePage()
+	 */
 	protected boolean validatePage() {
-		if (fDSImplementationClassText != null) {
-			IStatus status = ResourcesPlugin.getWorkspace().validateName(
-					fDSImplementationClassText.getText(), IResource.FILE);
-			if (!status.isOK()) {
-				setErrorMessage(status.getMessage());
-				return false;
-			}
+		if (fDSComponentNameText == null || fDSImplementationClassText == null) {
+			return false;
+		}
+		
+		if (getFileName() == null || getFileName().length() == 0) {
+			setErrorMessage(Messages.DSFileWizardPage_ComponentNeedsFileName);
+			return false;
+		}
+
+		if (fDSComponentNameText.getText().trim().length() == 0) {
+			setErrorMessage(Messages.DSFileWizardPage_ComponentNeedsName);
+			return false;
+		}
+		
+		IStatus status = ResourcesPlugin.getWorkspace().validateName(fDSImplementationClassText.getText().trim(),IResource.FILE);
+		if (!status.isOK()) {
+			setErrorMessage(Messages.DSFileWizardPage_ComponentNeedsClass);
+			return false;
 		}
+		
 		return super.validatePage();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.junit.runtime/plugin.xml b/eclipse/plugins/org.eclipse.pde.junit.runtime/plugin.xml
index 02be040..95dbad4 100644
--- a/eclipse/plugins/org.eclipse.pde.junit.runtime/plugin.xml
+++ b/eclipse/plugins/org.eclipse.pde.junit.runtime/plugin.xml
@@ -59,6 +59,7 @@
          id="nonuithreadtestapplication"
          point="org.eclipse.core.runtime.applications">
       <application
+            cardinality="1"
             visible="false">
          <run
                class="org.eclipse.pde.internal.junit.runtime.NonUIThreadTestApplication">
diff --git a/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/NonUIThreadTestApplication.java b/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/NonUIThreadTestApplication.java
index 1d7f861..840b5bf 100644
--- a/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/NonUIThreadTestApplication.java
+++ b/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/NonUIThreadTestApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 EclipseSource Corporation and others.
+ * Copyright (c) 2009, 2011 EclipseSource Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,18 +10,124 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.junit.runtime;
 
-import org.eclipse.core.runtime.Platform;
+import junit.framework.Assert;
+import org.eclipse.core.runtime.*;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
 
 /**
  * A Workbench that runs a test suite specified in the
  * command line arguments.
  */
-public class NonUIThreadTestApplication extends UITestApplication {
+public class NonUIThreadTestApplication implements IApplication {
 
-	public void runTests() {
-		fTestableObject.testingStarting();
-		RemotePluginTestRunner.main(Platform.getCommandLineArgs());
-		fTestableObject.testingFinished();
+	private static final String DEFAULT_HEADLESSAPP = "org.eclipse.pde.junit.runtime.coretestapplication"; //$NON-NLS-1$
+
+	protected IApplication fApplication;
+	protected Object fTestHarness;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+	 */
+	public Object start(IApplicationContext context) throws Exception {
+		String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS);
+
+		String appId = getApplicationToRun(args);
+		Object app = getApplication(appId);
+
+		Assert.assertNotNull(app);
+
+		if (!DEFAULT_HEADLESSAPP.equals(appId)) {
+			// this means we are running a different application, which potentially can be UI application;
+			// non-ui thread test app can also mean we are running UI tests but outside the UI thread;
+			// this is a pattern used by SWT bot and worked before; we continue to support this
+			// (see bug 340906 for details)
+			installPlatformUITestHarness();
+		}
+
+		return runApp(app, context, args);
+	}
+
+	protected Object runApp(Object app, IApplicationContext context, String[] args) throws Exception {
+		if (app instanceof IApplication) {
+			fApplication = (IApplication) app;
+			return fApplication.start(context);
+		}
+		return ((IPlatformRunnable) app).run(args);
+	}
+
+	private void installPlatformUITestHarness() throws Exception {
+		// the non-UI thread test application also supports launching headless applications;
+		// this may mean that no UI bundle will be available; thus, in order to not
+		// introduce any dependency on UI code we use reflection but don't fail when Platform UI
+		// is not available
+		try {
+			Class platformUIClass = Class.forName("org.eclipse.ui.PlatformUI", true, getClass().getClassLoader()); //$NON-NLS-1$
+			Object testableObject = platformUIClass.getMethod("getTestableObject", null).invoke(null, null); //$NON-NLS-1$
+			fTestHarness = new PlatformUITestHarness(testableObject, true);
+		} catch (ClassNotFoundException e) {
+			// PlatformUI is not available
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.equinox.app.IApplication#stop()
+	 */
+	public void stop() {
+		if (fApplication != null)
+			fApplication.stop();
+		if (fTestHarness != null)
+			fTestHarness = null;
+	}
+
+	/*
+	 * return the application to run, or null if not even the default application
+	 * is found.
+	 */
+	private Object getApplication(String appId) throws CoreException {
+		// Find the name of the application as specified by the PDE JUnit launcher.
+		// If no application is specified, the 3.0 default workbench application
+		// is returned.
+		IExtension extension = Platform.getExtensionRegistry().getExtension(Platform.PI_RUNTIME, Platform.PT_APPLICATIONS, appId);
+
+		Assert.assertNotNull(extension);
+
+		// If the extension does not have the correct grammar, return null.
+		// Otherwise, return the application object.
+		IConfigurationElement[] elements = extension.getConfigurationElements();
+		if (elements.length > 0) {
+			IConfigurationElement[] runs = elements[0].getChildren("run"); //$NON-NLS-1$
+			if (runs.length > 0) {
+				Object runnable = runs[0].createExecutableExtension("class"); //$NON-NLS-1$
+				if (runnable instanceof IPlatformRunnable || runnable instanceof IApplication)
+					return runnable;
+			}
+		}
+		return null;
+	}
+
+	/*
+	 * The -testApplication argument specifies the application to be run.
+	 * If the PDE JUnit launcher did not set this argument, then return
+	 * the name of the default application.
+	 * In 3.0, the default is the "org.eclipse.ui.ide.worbench" application.
+	 *
+	 * see bug 228044
+	 *
+	 */
+	private String getApplicationToRun(String[] args) {
+		for (int i = 0; i < args.length; i++) {
+			if (args[i].equals("-testApplication") && i < args.length - 1) //$NON-NLS-1$
+				return args[i + 1];
+		}
+		IProduct product = Platform.getProduct();
+		if (product != null)
+			return product.getApplication();
+		return getDefaultApplicationId();
+	}
+
+	protected String getDefaultApplicationId() {
+		return DEFAULT_HEADLESSAPP;
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/PlatformUITestHarness.java b/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/PlatformUITestHarness.java
new file mode 100644
index 0000000..a99aed1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/PlatformUITestHarness.java
@@ -0,0 +1,77 @@
+/**
+ * Copyright (c) 2011 Gunnar Wagenknecht and others.
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Gunnar Wagenknecht - initial API and implementation
+ */
+package org.eclipse.pde.internal.junit.runtime;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.ui.testing.ITestHarness;
+import org.eclipse.ui.testing.TestableObject;
+
+/**
+ * The {@link ITestHarness} implementation used to execute Platform UI tests.
+ */
+public class PlatformUITestHarness implements ITestHarness {
+
+	private TestableObject fTestableObject;
+	private final boolean fRunTestsInSeparateThread;
+
+	/**
+	 * Creates a new instance.
+	 * @param testableObject the testable object
+	 */
+	public PlatformUITestHarness(Object testableObject, boolean runTestsInSeparateThread) {
+		this.fRunTestsInSeparateThread = runTestsInSeparateThread;
+		fTestableObject = (TestableObject) testableObject;
+		fTestableObject.setTestHarness(this);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.testing.ITestHarness#runTests()
+	 */
+	public void runTests() {
+		try {
+			// signal starting
+			fTestableObject.testingStarting();
+
+			// the test runner runnable
+			Runnable testsRunner = new Runnable() {
+				public void run() {
+					RemotePluginTestRunner.main(Platform.getCommandLineArgs());
+				}
+			};
+
+			if (fRunTestsInSeparateThread) {
+				// wrap into separate thread and run from there
+				final Thread testRunnerThread = new Thread(testsRunner, "Plug-in Tests Runner"); //$NON-NLS-1$
+				fTestableObject.runTest(new Runnable() {
+					public void run() {
+						testRunnerThread.start();
+					}
+				});
+
+				// wait for tests to finish
+				// note, this has do be done outside #runTest method to not lock the UI
+				try {
+					testRunnerThread.join();
+				} catch (InterruptedException e) {
+					Thread.currentThread().interrupt();
+				}
+			} else {
+				// run directly
+				fTestableObject.runTest(testsRunner);
+			}
+		} finally {
+			// signal shutdown
+			fTestableObject.testingFinished();
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/UITestApplication.java b/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/UITestApplication.java
index 68eddfe..5a787e8 100644
--- a/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/UITestApplication.java
+++ b/eclipse/plugins/org.eclipse.pde.junit.runtime/src/org/eclipse/pde/internal/junit/runtime/UITestApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,114 +11,33 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.junit.runtime;
 
-import junit.framework.Assert;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.app.IApplication;
 import org.eclipse.equinox.app.IApplicationContext;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.testing.ITestHarness;
-import org.eclipse.ui.testing.TestableObject;
 
 /**
  * A Workbench that runs a test suite specified in the
  * command line arguments.
  */
-public class UITestApplication implements IApplication, ITestHarness {
+public class UITestApplication extends NonUIThreadTestApplication {
 
 	private static final String DEFAULT_APP_3_0 = "org.eclipse.ui.ide.workbench"; //$NON-NLS-1$
 
-	protected TestableObject fTestableObject;
-	protected IApplication fApplication;
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
-	 */
-	public Object start(IApplicationContext context) throws Exception {
-		String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS);
-		Object app = getApplication(args);
-
-		Assert.assertNotNull(app);
-
-		fTestableObject = PlatformUI.getTestableObject();
-		fTestableObject.setTestHarness(this);
-		if (app instanceof IApplication) {
-			fApplication = (IApplication) app;
-			return fApplication.start(context);
-		}
-		return ((IPlatformRunnable) app).run(args);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.equinox.app.IApplication#stop()
-	 */
-	public void stop() {
-		if (fApplication != null)
-			fApplication.stop();
-	}
-
-	/*
-	 * return the application to run, or null if not even the default application
-	 * is found.
-	 */
-	private Object getApplication(String[] args) throws CoreException {
-		// Find the name of the application as specified by the PDE JUnit launcher.
-		// If no application is specified, the 3.0 default workbench application
-		// is returned.
-		IExtension extension = Platform.getExtensionRegistry().getExtension(Platform.PI_RUNTIME, Platform.PT_APPLICATIONS, getApplicationToRun(args));
-
-		Assert.assertNotNull(extension);
-
-		// If the extension does not have the correct grammar, return null.
-		// Otherwise, return the application object.
-		IConfigurationElement[] elements = extension.getConfigurationElements();
-		if (elements.length > 0) {
-			IConfigurationElement[] runs = elements[0].getChildren("run"); //$NON-NLS-1$
-			if (runs.length > 0) {
-				Object runnable = runs[0].createExecutableExtension("class"); //$NON-NLS-1$
-				if (runnable instanceof IPlatformRunnable || runnable instanceof IApplication)
-					return runnable;
-			}
-		}
-		return null;
-	}
-
-	/*
-	 * The -testApplication argument specifies the application to be run.
-	 * If the PDE JUnit launcher did not set this argument, then return
-	 * the name of the default application.
-	 * In 3.0, the default is the "org.eclipse.ui.ide.worbench" application.
-	 * 
-	 * see bug 228044
-	 * 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.junit.runtime.NonUIThreadTestApplication#getDefaultApplicationId()
 	 */
-	private String getApplicationToRun(String[] args) {
-		for (int i = 0; i < args.length; i++) {
-			if (args[i].equals("-testApplication") && i < args.length - 1) //$NON-NLS-1$
-				return args[i + 1];
-		}
-		IProduct product = Platform.getProduct();
-		if (product != null)
-			return product.getApplication();
+	protected String getDefaultApplicationId() {
+		// In 3.0, the default is the "org.eclipse.ui.ide.worbench" application.
 		return DEFAULT_APP_3_0;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.testing.ITestHarness#runTests()
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.junit.runtime.NonUIThreadTestApplication#runApp(java.lang.Object, org.eclipse.equinox.app.IApplicationContext, java.lang.String[])
 	 */
-	public void runTests() {
-		try {
-			fTestableObject.testingStarting();
-			fTestableObject.runTest(new Runnable() {
-				public void run() {
-					RemotePluginTestRunner.main(Platform.getCommandLineArgs());
-				}
-			});
-		} finally {
-			fTestableObject.testingFinished();
-		}
-	}
+	protected Object runApp(Object app, IApplicationContext context, String[] args) throws Exception {
+		// create UI test harness
+		fTestHarness = new PlatformUITestHarness(PlatformUI.getTestableObject(), false);
 
+		// continue application launch
+		return super.runApp(app, context, args);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/ILaunchingPreferenceConstants.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/ILaunchingPreferenceConstants.java
index c630c58..e637ff3 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/ILaunchingPreferenceConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/ILaunchingPreferenceConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 EclipseSource Corporation and others.
+ * Copyright (c) 2009, 2010 EclipseSource Corporation, IBM Corporation, and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,10 @@ public interface ILaunchingPreferenceConstants {
 
 	// Main preference page
 	public static final String PROP_AUTO_MANAGE = "Preferences.MainPage.automanageDependencies"; //$NON-NLS-1$
+	public static final String PROP_RUNTIME_WORKSPACE_LOCATION = "Preferences.MainPage.runtimeWorkspaceLocation"; //$NON-NLS-1$
+	public static final String PROP_RUNTIME_WORKSPACE_LOCATION_IS_CONTAINER = "Preferences.MainPage.runtimeWorkspaceLocationIsContainer"; //$NON-NLS-1$
+	public static final String PROP_JUNIT_WORKSPACE_LOCATION = "Preferences.MainPage.junitWorkspaceLocation"; //$NON-NLS-1$
+	public static final String PROP_JUNIT_WORKSPACE_LOCATION_IS_CONTAINER = "Preferences.MainPage.junitWorkspaceLocationIsContainer"; //$NON-NLS-1$
 
 	// OSGi Frameworks
 	public static final String DEFAULT_OSGI_FRAMEOWRK = "Preference.default.osgi.framework"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PreferenceInitializer.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PreferenceInitializer.java
index ca4108b..14d6d02 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 eXXcellent solutions gmbh and others.
+ * Copyright (c) 2009, 2010 eXXcellent solutions gmbh, IBM Corporation, and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,10 +10,8 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.launching;
 
-
-import org.eclipse.pde.internal.launching.launcher.OSGiFrameworkManager;
-
 import org.eclipse.core.runtime.preferences.*;
+import org.eclipse.pde.internal.launching.launcher.OSGiFrameworkManager;
 import org.osgi.service.prefs.BackingStoreException;
 
 public class PreferenceInitializer extends AbstractPreferenceInitializer {
@@ -24,6 +22,10 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
 	public void initializeDefaultPreferences() {
 		IEclipsePreferences prefs = new DefaultScope().getNode(IPDEConstants.PLUGIN_ID);
 		prefs.put(ILaunchingPreferenceConstants.DEFAULT_OSGI_FRAMEOWRK, OSGiFrameworkManager.DEFAULT_FRAMEWORK);
+		prefs.put(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION, "${workspace_loc}/../runtime-"); //$NON-NLS-1$
+		prefs.putBoolean(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION_IS_CONTAINER, true);
+		prefs.put(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION, "${workspace_loc}/../junit-workspace"); //$NON-NLS-1$
+		prefs.putBoolean(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION_IS_CONTAINER, false);
 
 		// copy over instance scope prefs from UI plugin
 		IEclipsePreferences oldInstancePrefs = new InstanceScope().getNode(IPDEConstants.UI_PLUGIN_ID);
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/BundleLauncherHelper.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/BundleLauncherHelper.java
index 4e1b924..2ba5b6c 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/BundleLauncherHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/BundleLauncherHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,9 @@ public class BundleLauncherHelper {
 	 * simple configurator and update configurator, we change the start level as they 
 	 * shouldn't be started together.
 	 */
-	public static final String DEFAULT_UPDATE_CONFIGURATOR_START_LEVEL = "3:true"; //$NON-NLS-1$
+	public static final String DEFAULT_UPDATE_CONFIGURATOR_START_LEVEL_TEXT = "3"; //$NON-NLS-1$
+	public static final String DEFAULT_UPDATE_CONFIGURATOR_AUTO_START_TEXT = "true"; //$NON-NLS-1$
+	public static final String DEFAULT_UPDATE_CONFIGURATOR_START_LEVEL = DEFAULT_UPDATE_CONFIGURATOR_START_LEVEL_TEXT + ":" + DEFAULT_UPDATE_CONFIGURATOR_AUTO_START_TEXT; //$NON-NLS-1$
 
 	public static final char VERSION_SEPARATOR = '*';
 
@@ -358,6 +360,54 @@ public class BundleLauncherHelper {
 		return map;
 	}
 
+	public static String resolveSystemRunLevelText(IPluginModelBase model) {
+		BundleDescription description = model.getBundleDescription();
+		String modelName = description.getSymbolicName();
+
+		if (IPDEBuildConstants.BUNDLE_DS.equals(modelName)) {
+			return "1"; //$NON-NLS-1$ 
+		} else if (IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR.equals(modelName)) {
+			return "1"; //$NON-NLS-1$
+		} else if (IPDEBuildConstants.BUNDLE_EQUINOX_COMMON.equals(modelName)) {
+			return "2"; //$NON-NLS-1$
+		} else if (IPDEBuildConstants.BUNDLE_OSGI.equals(modelName)) {
+			return "-1"; //$NON-NLS-1$
+		} else if (IPDEBuildConstants.BUNDLE_UPDATE_CONFIGURATOR.equals(modelName)) {
+			return DEFAULT_UPDATE_CONFIGURATOR_START_LEVEL_TEXT;
+		} else if (IPDEBuildConstants.BUNDLE_CORE_RUNTIME.equals(modelName)) {
+			if (TargetPlatformHelper.getTargetVersion() > 3.1) {
+				return "default"; //$NON-NLS-1$
+			}
+			return "2"; //$NON-NLS-1$
+		} else {
+			return null;
+		}
+	}
+
+	public static String resolveSystemAutoText(IPluginModelBase model) {
+		BundleDescription description = model.getBundleDescription();
+		String modelName = description.getSymbolicName();
+
+		if (IPDEBuildConstants.BUNDLE_DS.equals(modelName)) {
+			return "true"; //$NON-NLS-1$ 
+		} else if (IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR.equals(modelName)) {
+			return "true"; //$NON-NLS-1$
+		} else if (IPDEBuildConstants.BUNDLE_EQUINOX_COMMON.equals(modelName)) {
+			return "true"; //$NON-NLS-1$
+		} else if (IPDEBuildConstants.BUNDLE_OSGI.equals(modelName)) {
+			return "true"; //$NON-NLS-1$
+		} else if (IPDEBuildConstants.BUNDLE_UPDATE_CONFIGURATOR.equals(modelName)) {
+			return DEFAULT_UPDATE_CONFIGURATOR_AUTO_START_TEXT;
+		} else if (IPDEBuildConstants.BUNDLE_CORE_RUNTIME.equals(modelName)) {
+			if (TargetPlatformHelper.getTargetVersion() > 3.1) {
+				return "true"; //$NON-NLS-1$
+			}
+			return "true"; //$NON-NLS-1$
+		} else {
+			return null;
+		}
+	}
+
 	/**
 	 * Adds the given bundle and start information to the map.  This will override anything set
 	 * for system bundles, and set their start level to the appropriate level
@@ -369,23 +419,10 @@ public class BundleLauncherHelper {
 		BundleDescription desc = bundle.getBundleDescription();
 		boolean defaultsl = (sl == null || sl.equals("default:default")); //$NON-NLS-1$
 		if (desc != null && defaultsl) {
-			String modelName = desc.getSymbolicName();
-			if (IPDEBuildConstants.BUNDLE_DS.equals(modelName)) {
-				map.put(bundle, "1:true"); //$NON-NLS-1$ 
-			} else if (IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR.equals(modelName)) {
-				map.put(bundle, "1:true"); //$NON-NLS-1$
-			} else if (IPDEBuildConstants.BUNDLE_EQUINOX_COMMON.equals(modelName)) {
-				map.put(bundle, "2:true"); //$NON-NLS-1$
-			} else if (IPDEBuildConstants.BUNDLE_OSGI.equals(modelName)) {
-				map.put(bundle, "-1:true"); //$NON-NLS-1$
-			} else if (IPDEBuildConstants.BUNDLE_UPDATE_CONFIGURATOR.equals(modelName)) {
-				map.put(bundle, DEFAULT_UPDATE_CONFIGURATOR_START_LEVEL);
-			} else if (IPDEBuildConstants.BUNDLE_CORE_RUNTIME.equals(modelName)) {
-				if (TargetPlatformHelper.getTargetVersion() > 3.1) {
-					map.put(bundle, "default:true"); //$NON-NLS-1$
-				} else {
-					map.put(bundle, "2:true"); //$NON-NLS-1$
-				}
+			String runLevelText = resolveSystemRunLevelText(bundle);
+			String autoText = resolveSystemAutoText(bundle);
+			if (runLevelText != null && autoText != null) {
+				map.put(bundle, runLevelText + ":" + autoText); //$NON-NLS-1$
 			} else {
 				map.put(bundle, sl);
 			}
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchArgumentsHelper.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchArgumentsHelper.java
index 59a9fa3..0ced270 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchArgumentsHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchArgumentsHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,8 @@ import org.eclipse.pde.internal.build.IPDEBuildConstants;
 import org.eclipse.pde.internal.core.*;
 import org.eclipse.pde.internal.core.target.provisional.ITargetHandle;
 import org.eclipse.pde.internal.core.target.provisional.ITargetPlatformService;
+import org.eclipse.pde.internal.launching.ILaunchingPreferenceConstants;
+import org.eclipse.pde.internal.launching.PDELaunchingPlugin;
 import org.eclipse.pde.launching.IPDELauncherConstants;
 import org.osgi.framework.Bundle;
 
@@ -318,11 +320,21 @@ public class LaunchArgumentsHelper {
 	}
 
 	public static String getDefaultWorkspaceLocation(String uniqueName) {
-		return "${workspace_loc}/../runtime-" + uniqueName.replaceAll("\\s", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return getDefaultWorkspaceLocation(uniqueName, false);
 	}
 
-	public static String getDefaultJUnitWorkspaceLocation() {
-		return "${workspace_loc}/../junit-workspace"; //$NON-NLS-1$
+	public static String getDefaultWorkspaceLocation(String uniqueName, boolean isJUnit) {
+		PDEPreferencesManager launchingStore = PDELaunchingPlugin.getDefault().getPreferenceManager();
+		String location = launchingStore.getString(isJUnit ? ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION : ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION);
+		if (launchingStore.getBoolean(isJUnit ? ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION_IS_CONTAINER : ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION_IS_CONTAINER)) {
+			return location + uniqueName.replaceAll("\\s", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return location;
+	}
+
+	public static boolean getDefaultJUnitWorkspaceIsContainer() {
+		PDEPreferencesManager launchingStore = PDELaunchingPlugin.getDefault().getPreferenceManager();
+		return launchingStore.getBoolean(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION_IS_CONTAINER);
 	}
 
 	public static String getDefaultJUnitConfigurationLocation() {
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java
index e90518b..98875d9 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,6 +87,19 @@ public class LaunchConfigurationHelper {
 		return mgr.performStringSubstitution(text);
 	}
 
+	/**
+	 * Writes out the config.ini and other configuration files based on the bundles being launched.  This includes
+	 * writing out bundles.info if the simple configurator is being used or platform.xml if update configurator
+	 * is being used. 
+	 * 
+	 * @param configuration launch configuration
+	 * @param productID id of the product being launched, may be <code>null</code>
+	 * @param bundles map of bundle id to plug-in model, these are the bundles being launched
+	 * @param bundlesWithStartLevels map of plug-in model to a string containing start level information
+	 * @param configurationDirectory config directory where the created files will be placed
+	 * @return a properties object containing the properties written out to config.ini 
+	 * @throws CoreException
+	 */
 	public static Properties createConfigIniFile(ILaunchConfiguration configuration, String productID, Map bundles, Map bundlesWithStartLevels, File configurationDirectory) throws CoreException {
 		Properties properties = null;
 		// if we are to generate a config.ini, start with the values in the target platform's config.ini - bug 141918
@@ -126,7 +139,7 @@ public class LaunchConfigurationHelper {
 		properties.put("osgi.bundles.defaultStartLevel", Integer.toString(start)); //$NON-NLS-1$
 		boolean autostart = configuration.getAttribute(IPDELauncherConstants.DEFAULT_AUTO_START, false);
 
-		// Special processing for launching with p2
+		// Special processing for launching with p2 (simple configurator)
 		if (osgiBundles != null && osgiBundles.indexOf(IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR) != -1 && bundles.containsKey(IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR)) {
 
 			// If update configurator is set to its default start level, override it as simple/update configurators should not be autostarted together
@@ -172,6 +185,11 @@ public class LaunchConfigurationHelper {
 				}
 				properties.setProperty("eclipse.p2.profile", profileID); //$NON-NLS-1$
 			}
+		} else {
+			// Special processing for update manager (update configurator)
+			String brandingId = LaunchConfigurationHelper.getContributingPlugin(productID);
+			// Create a platform.xml
+			TargetPlatform.createPlatformConfiguration(configurationDirectory, (IPluginModelBase[]) bundles.values().toArray(new IPluginModelBase[bundles.size()]), brandingId != null ? (IPluginModelBase) bundles.get(brandingId) : null);
 		}
 
 		setBundleLocations(bundles, properties, autostart);
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchListener.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchListener.java
index bf5c49d..52bd670 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchListener.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.core.runtime.*;
 import org.eclipse.debug.core.*;
 import org.eclipse.debug.core.model.IProcess;
 import org.eclipse.pde.internal.launching.*;
+import org.eclipse.pde.launching.IPDELauncherConstants;
 
 public class LaunchListener implements ILaunchListener, IDebugEventSetListener {
 	private ArrayList managedLaunches;
@@ -130,15 +131,16 @@ public class LaunchListener implements ILaunchListener, IDebugEventSetListener {
 				return;
 			}
 			// launch failed because the associated workspace is in use
-			// FIXME: I failed to come up with a constellation that produces this error.
-			// I suppose this no longer happens with PDE 3.6 since this error condition is detected earlier 
 			if (returnValue == 15) {
-				Status status = new Status(IStatus.ERROR, IPDEConstants.PLUGIN_ID, returnValue, PDEMessages.Launcher_error_code15, null);
+				Status status = new Status(IStatus.ERROR, IPDEConstants.PLUGIN_ID, LauncherUtils.WORKSPACE_LOCKED, null, null);
 				IStatusHandler statusHandler = DebugPlugin.getDefault().getStatusHandler(status);
 				if (statusHandler == null)
 					PDELaunchingPlugin.log(status);
-				else
-					statusHandler.handleStatus(status, launch);
+				else {
+					ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
+					String workspace = launchConfiguration.getAttribute(IPDELauncherConstants.LOCATION, ""); //$NON-NLS-1$
+					statusHandler.handleStatus(status, new Object[] {workspace, launchConfiguration, launch.getLaunchMode()});
+				}
 				return;
 			}
 			// launch failed for reasons printed to the log.
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LauncherUtils.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LauncherUtils.java
index 43c03b7..fef167e 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LauncherUtils.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LauncherUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,10 +37,16 @@ public class LauncherUtils {
 	public static final int DELETE_WORKSPACE = 2002;
 	public static final int GENERATE_CONFIG_INI = 2003;
 	public static final int ORGANIZE_MANIFESTS = 2004;
+	public static final int SELECT_WORKSPACE_FIELD = 2005;
 
 	private static final String TIMESTAMP = "timestamp"; //$NON-NLS-1$
 	private static final String FILE_NAME = "dep-timestamp.properties"; //$NON-NLS-1$
 	private static Properties fLastRun;
+	/**
+	 * Stores the last known launch mode so status handlers can open the correct launch configuration dialog
+	 * @see LauncherUtils#setLastLaunchMode(String)
+	 */
+	private static String fLastLaunchMode;
 
 	public static boolean clearWorkspace(ILaunchConfiguration configuration, String workspace, IProgressMonitor monitor) throws CoreException {
 
@@ -82,7 +88,7 @@ public class LauncherUtils {
 			Status status = new Status(IStatus.ERROR, IPDEConstants.PLUGIN_ID, WORKSPACE_LOCKED, null, null);
 			IStatusHandler statusHandler = DebugPlugin.getDefault().getStatusHandler(status);
 			if (statusHandler != null)
-				statusHandler.handleStatus(status, workspace);
+				statusHandler.handleStatus(status, new Object[] {workspace, configuration, fLastLaunchMode});
 			monitor.done();
 			return false;
 		}
@@ -344,4 +350,13 @@ public class LauncherUtils {
 		return new Status(IStatus.ERROR, PDELaunchingPlugin.getPluginId(), IStatus.OK, message, null);
 	}
 
+	/**
+	 * Updates the stores launch mode.  This should be called on any PDE Eclipse launch.  The launch mode
+	 * is passed to the status handler so it can open the correct launch configuration dialog
+	 * 
+	 * @param launchMode last known launch mode, see {@link ILaunch#getLaunchMode()}
+	 */
+	public static void setLastLaunchMode(String launchMode) {
+		fLastLaunchMode = launchMode;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
index a196a30..3847c7c 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
@@ -294,6 +294,7 @@ public abstract class AbstractPDELaunchConfiguration extends LaunchConfiguration
 		if (autoValidate)
 			validatePluginDependencies(configuration, new SubProgressMonitor(monitor, 1));
 		validateProjectDependencies(configuration, new SubProgressMonitor(monitor, 1));
+		LauncherUtils.setLastLaunchMode(launch.getLaunchMode());
 		clear(configuration, new SubProgressMonitor(monitor, 1));
 		launch.setAttribute(IPDELauncherConstants.CONFIG_LOCATION, getConfigDir(configuration).toString());
 		synchronizeManifests(configuration, new SubProgressMonitor(monitor, 1));
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java
index b41f2f6..9abc8e2 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,8 +104,6 @@ public class EclipseApplicationLaunchConfiguration extends AbstractPDELaunchConf
 			String productID = LaunchConfigurationHelper.getProductID(configuration);
 			Properties prop = LaunchConfigurationHelper.createConfigIniFile(configuration, productID, fAllBundles, fModels, getConfigDir(configuration));
 			showSplash = prop.containsKey("osgi.splashPath") || prop.containsKey("splashLocation"); //$NON-NLS-1$ //$NON-NLS-2$
-			String brandingId = LaunchConfigurationHelper.getContributingPlugin(productID);
-			TargetPlatform.createPlatformConfiguration(getConfigDir(configuration), (IPluginModelBase[]) fAllBundles.values().toArray(new IPluginModelBase[fAllBundles.size()]), brandingId != null ? (IPluginModelBase) fAllBundles.get(brandingId) : null);
 			TargetPlatformHelper.checkPluginPropertiesConsistency(fAllBundles, getConfigDir(configuration));
 			programArgs.add("-configuration"); //$NON-NLS-1$
 			programArgs.add("file:" + new Path(getConfigDir(configuration).getPath()).addTrailingSeparator().toString()); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/IPDELauncherConstants.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/IPDELauncherConstants.java
index 9da82f5..4fed17d 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/IPDELauncherConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/IPDELauncherConstants.java
@@ -183,6 +183,9 @@ public interface IPDELauncherConstants {
 	/**
 	 * Launch configuration attribute key. The value is the id of the last plug-in 
 	 * that was selected on the Tracing tab.
+	 * 
+	 * @deprecated This option is no longer supported in the launch config.  A recent selection is stored
+	 * in dialog settings.
 	 */
 	String TRACING_SELECTED_PLUGIN = "selectedPlugin"; //$NON-NLS-1$
 
diff --git a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
index 68b5d18..9be0cb7 100644
--- a/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
+++ b/eclipse/plugins/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -139,8 +139,6 @@ public class JUnitLaunchConfigurationDelegate extends org.eclipse.jdt.junit.laun
 		// Create the platform configuration for the runtime workbench
 		String productID = LaunchConfigurationHelper.getProductID(configuration);
 		LaunchConfigurationHelper.createConfigIniFile(configuration, productID, fAllBundles, fModels, getConfigurationDirectory(configuration));
-		String brandingId = LaunchConfigurationHelper.getContributingPlugin(productID);
-		TargetPlatform.createPlatformConfiguration(getConfigurationDirectory(configuration), (IPluginModelBase[]) fAllBundles.values().toArray(new IPluginModelBase[fAllBundles.size()]), brandingId != null ? (IPluginModelBase) fAllBundles.get(brandingId) : null);
 		TargetPlatformHelper.checkPluginPropertiesConsistency(fAllBundles, getConfigurationDirectory(configuration));
 
 		programArgs.add("-configuration"); //$NON-NLS-1$
@@ -419,6 +417,7 @@ public class JUnitLaunchConfigurationDelegate extends org.eclipse.jdt.junit.laun
 		if (autoValidate)
 			validatePluginDependencies(configuration, new SubProgressMonitor(monitor, 1));
 		validateProjectDependencies(configuration, new SubProgressMonitor(monitor, 1));
+		LauncherUtils.setLastLaunchMode(launch.getLaunchMode());
 		clear(configuration, new SubProgressMonitor(monitor, 1));
 		launch.setAttribute(IPDELauncherConstants.CONFIG_LOCATION, getConfigurationDirectory(configuration).toString());
 		synchronizeManifests(configuration, new SubProgressMonitor(monitor, 1));
@@ -428,7 +427,7 @@ public class JUnitLaunchConfigurationDelegate extends org.eclipse.jdt.junit.laun
 		// if we are using JUnit4, we need to include the junit4 specific bundles
 		ITestKind testKind = JUnitLaunchConfigurationConstants.getTestRunnerKind(configuration);
 		if (TestKindRegistry.JUNIT4_TEST_KIND_ID.equals(testKind.getId()))
-			return new String[] {"org.junit", "org.eclipse.jdt.junit.runtime", "org.eclipse.pde.junit.runtime", "org.junit4", "org.eclipse.jdt.junit4.runtime"}; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+			return new String[] {"org.junit", "org.eclipse.jdt.junit.runtime", "org.eclipse.pde.junit.runtime", "org.eclipse.jdt.junit4.runtime"}; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		return new String[] {"org.junit", "org.eclipse.jdt.junit.runtime", "org.eclipse.pde.junit.runtime"}; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.runtime/icons/obj16/frgmt_obj.gif b/eclipse/plugins/org.eclipse.pde.runtime/icons/obj16/frgmt_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.runtime/icons/obj16/plugins_obj.gif b/eclipse/plugins/org.eclipse.pde.runtime/icons/obj16/plugins_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java
index eb2078d..d03bedf 100644
--- a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java
+++ b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -230,7 +230,7 @@ public class LocalRegistryBackend implements IRegistryEventListener, BundleListe
 	}
 
 	private static Long getBundleId(String name) {
-		BundleDescription descr = PDERuntimePlugin.getDefault().getPlatformAdmin().getState().getBundle(name, null);
+		BundleDescription descr = PDERuntimePlugin.getDefault().getPlatformAdmin().getState(false).getBundle(name, null);
 		return descr == null ? null : new Long(descr.getBundleId());
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ModelObject.java b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ModelObject.java
index 22c0ad2..53337f7 100644
--- a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ModelObject.java
+++ b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ModelObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,9 @@ package org.eclipse.pde.internal.runtime.registry.model;
 
 public abstract class ModelObject {
 
+	/**
+	 * The registry model, possibly <code>null</code>
+	 */
 	protected RegistryModel model;
 
 	public void setModel(RegistryModel model) {
diff --git a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceName.java b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceName.java
index 4214af3..8f7fc44 100644
--- a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceName.java
+++ b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceName.java
@@ -1,69 +1,72 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Wolfgang Schell <ws at jetztgrad.net> - bug 260055
- *******************************************************************************/
-package org.eclipse.pde.internal.runtime.registry.model;
-
-import java.util.Arrays;
-
-public class ServiceName extends ModelObject implements Comparable {
-
-	private String[] classes;
-
-	public ServiceName(String[] classes) {
-		this.classes = classes;
-	}
-
-	public String[] getClasses() {
-		return classes;
-	}
-
-	public ModelObject[] getChildren() {
-		return model.getServices(classes);
-	}
-
-	private static int hashCode(Object[] array) {
-		int prime = 31;
-		if (array == null)
-			return 0;
-		int result = 1;
-		for (int index = 0; index < array.length; index++) {
-			result = prime * result + (array[index] == null ? 0 : array[index].hashCode());
-		}
-		return result;
-	}
-
-	public int hashCode() {
-		final int prime = 31;
-		return prime * ServiceName.hashCode(classes);
-	}
-
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (getClass() != obj.getClass())
-			return false;
-		ServiceName other = (ServiceName) obj;
-		return Arrays.equals(classes, other.classes);
-	}
-
-	public int compareTo(Object obj) {
-		if (obj instanceof ServiceName) {
-			// compare first class
-			ServiceName other = (ServiceName) obj;
-			String myClass = classes[0];
-			String otherClass = other.getClasses()[0];
-
-			return myClass.compareTo(otherClass);
-		}
-		return 0;
-
-	}
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Wolfgang Schell <ws at jetztgrad.net> - bug 260055
+ *******************************************************************************/
+package org.eclipse.pde.internal.runtime.registry.model;
+
+import java.util.Arrays;
+
+public class ServiceName extends ModelObject implements Comparable {
+
+	private String[] classes;
+
+	public ServiceName(String[] classes) {
+		this.classes = classes;
+	}
+
+	public String[] getClasses() {
+		return classes;
+	}
+
+	public ModelObject[] getChildren() {
+		if (model == null) {
+			return new ModelObject[0];
+		}
+		return model.getServices(classes);
+	}
+
+	private static int hashCode(Object[] array) {
+		int prime = 31;
+		if (array == null)
+			return 0;
+		int result = 1;
+		for (int index = 0; index < array.length; index++) {
+			result = prime * result + (array[index] == null ? 0 : array[index].hashCode());
+		}
+		return result;
+	}
+
+	public int hashCode() {
+		final int prime = 31;
+		return prime * ServiceName.hashCode(classes);
+	}
+
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (getClass() != obj.getClass())
+			return false;
+		ServiceName other = (ServiceName) obj;
+		return Arrays.equals(classes, other.classes);
+	}
+
+	public int compareTo(Object obj) {
+		if (obj instanceof ServiceName) {
+			// compare first class
+			ServiceName other = (ServiceName) obj;
+			String myClass = classes[0];
+			String otherClass = other.getClasses()[0];
+
+			return myClass.compareTo(otherClass);
+		}
+		return 0;
+
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceRegistration.java b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceRegistration.java
index ef2c1dc..be329ec 100644
--- a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceRegistration.java
+++ b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/ServiceRegistration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -68,8 +68,9 @@ public class ServiceRegistration extends ModelObject implements Comparable {
 	}
 
 	public Bundle[] getUsingBundles() {
-		if (usingBundles.length == 0)
+		if (usingBundles.length == 0 || model == null) {
 			return new Bundle[0];
+		}
 
 		Set bundles = new HashSet();
 		for (int i = 0; i < usingBundles.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/spy/dialogs/MenuSpyDialog.java b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/spy/dialogs/MenuSpyDialog.java
index 870252c..87e7c79 100644
--- a/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/spy/dialogs/MenuSpyDialog.java
+++ b/eclipse/plugins/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/spy/dialogs/MenuSpyDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 EclipseSource Corporation and others.
+ * Copyright (c) 2009, 2010 EclipseSource Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.core/.settings/org.eclipse.core.resources.prefs b/eclipse/plugins/org.eclipse.pde.ua.core/.settings/org.eclipse.core.resources.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.core/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.pde.ua.core/.settings/org.eclipse.pde.core.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.core/build.properties b/eclipse/plugins/org.eclipse.pde.ua.core/build.properties
index 1dde0d2..3e28be9 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.core/build.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.core/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.pde.ua.core/plugin.properties b/eclipse/plugins/org.eclipse.pde.ua.core/plugin.properties
index 93853ec..2786fd9 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.core/plugin.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.core/plugin.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 #Properties file for org.eclipse.pde.ua.core
 pluginName = PDE UA Core
 providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/ISimpleCSConstants.java b/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/ISimpleCSConstants.java
index f7a2a16..b17400c 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/ISimpleCSConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/ISimpleCSConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/text/SimpleCSIntro.java b/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/text/SimpleCSIntro.java
index 564977f..22e90d9 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/text/SimpleCSIntro.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/simple/text/SimpleCSIntro.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/.settings/org.eclipse.core.resources.prefs b/eclipse/plugins/org.eclipse.pde.ua.ui/.settings/org.eclipse.core.resources.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.eclipse.pde.ua.ui/.settings/org.eclipse.pde.core.prefs
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/build.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/build.properties
index 6c551f6..e785243 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/build.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/build.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/etool16/new_cheatsheet_wiz.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/etool16/new_cheatsheet_wiz.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_composite_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_composite_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_conclusion_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_conclusion_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_intro_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_intro_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_item_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_item_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_simple_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_simple_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_subitem_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_subitem_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_taskgroup_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_taskgroup_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_unsupported_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/cheatsheet_unsupported_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_anchor_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_anchor_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_leaftopic_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_leaftopic_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_link_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_link_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_topic_obj.gif b/eclipse/plugins/org.eclipse.pde.ua.ui/icons/obj16/toc_topic_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/plugin.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/plugin.properties
index 796a5ea..9884f0b 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/plugin.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 #Properties file for org.eclipse.pde.ua.ui
 pluginName = PDE UA UI
 providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/CSAbstractDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/CSAbstractDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/CSAbstractSubDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/CSAbstractSubDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/ICSDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/ICSDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/ICSMaster.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/ICSMaster.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSBlock.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSBlock.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSContentProvider.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSContentProvider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSEditor.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSEditor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSEditorContributor.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSEditorContributor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSFileValidator.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSFileValidator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSFormOutlinePage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSFormOutlinePage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSGroupValidator.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSGroupValidator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSInputContext.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSInputContext.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSInputContextManager.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSInputContextManager.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSMasterTreeSection.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSMasterTreeSection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSPage.java
old mode 100644
new mode 100755
index c56b986..1428619
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/CompCSPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSAbstractAddAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSAbstractAddAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSAddGroupAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSAddGroupAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSAddTaskAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSAddTaskAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSRemoveTaskObjectAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/CompCSRemoveTaskObjectAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/messages.properties
index 5de341f..d1296da 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/actions/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 CompCSAddGroupAction_group=Group
 CompCSAddTaskAction_task=Task
 CompCSRemoveTaskObjectAction_delete=&Delete
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSConclusionTextListener.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSConclusionTextListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSEnclosingTextDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSEnclosingTextDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSIntroductionTextListener.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSIntroductionTextListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSTaskDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSTaskDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSTaskGroupDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSTaskGroupDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/messages.properties
index 1eda4b4..8ad3db5 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 CompCSDetails_name=Name*:
 CompCSDetails_sectionDescription=Specify the display name of this cheat sheet:
 CompCSDetails_sectionTitle=Definition
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/messages.properties
index d5245e5..29b0003 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 CompCSFileValidator_0=The selected file is not a simple cheat sheet
 CompCSMasterTreeSection_addGroup=Add Group
 CompCSMasterTreeSection_addTask=Add Task
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/messages.properties
index 9cf28a0..24c7b0a 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/messages.properties
@@ -1 +1,11 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 CSAbstractEditor_register=Register this cheat sheet
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/ISimpleCSCommandKeyListener.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/ISimpleCSCommandKeyListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/NewCommandKeyEvent.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/NewCommandKeyEvent.java
old mode 100644
new mode 100755
index f96d6e7..e97d092
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/NewCommandKeyEvent.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/NewCommandKeyEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSBlock.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSBlock.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSCommandManager.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSCommandManager.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSContentProvider.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSContentProvider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSDefinitionPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSDefinitionPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSEditor.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSEditor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSEditorContributor.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSEditorContributor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSFormOutlinePage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSFormOutlinePage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSInputContext.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSInputContext.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSInputContextManager.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSInputContextManager.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSMasterTreeSection.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSMasterTreeSection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSSourcePage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/SimpleCSSourcePage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSAddStepAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSAddStepAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSAddSubStepAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSAddSubStepAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSPreviewAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSPreviewAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSRemoveRunObjectAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSRemoveRunObjectAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSRemoveStepAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSRemoveStepAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSRemoveSubStepAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/SimpleCSRemoveSubStepAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/messages.properties
index f899a71..75c5c7a 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/actions/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 SimpleCSAddStepAction_actionDescription=Body
 SimpleCSAddStepAction_actionLabel=Item
 SimpleCSAddStepAction_actionText=&Step
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSCommandComboPart.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSCommandComboPart.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSCommandDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSCommandDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSHelpDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSHelpDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSIntroDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSIntroDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSItemDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSItemDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSSubItemDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/SimpleCSSubItemDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/messages.properties
index 2aea7f7..c10fe42 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/details/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 SimpleCSCommandDetails_attrCommand=Command:
 SimpleCSCommandDetails_attrOptional=This command is optional
 SimpleCSCommandDetails_attrParameters=Parameters:
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/messages.properties
index 8129af0..a1452a8 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/simple/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 SimpleCSDefinitionPage_errorMessage=An error was encountered while parsing the cheat sheet XML file.
 SimpleCSDefinitionPage_loadFailure=Cheat Sheet Load Failure
 SimpleCSDefinitionPage_title=Definition
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/details/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/details/messages.properties
index e25f694..e9d98ba 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/details/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/details/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 CtxHelpCommandDetails_commandDesc=Specify the command to invoke:
 CtxHelpCommandDetails_commandText=Command:
 CtxHelpCommandDetails_labelDesc=Specify the display label for this command:
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/messages.properties
index 6dfe0e5..99d9466 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/ctxhelp/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 CtxHelpEditor_text=Register this context help file
 CtxHelpPage_errMsg=An error occurred while parsing the context help xml file.
 CtxHelpPage_errTitle=Failed to load context help contents
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocBlock.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocBlock.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocContentProvider.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocContentProvider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocDragAdapter.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocDragAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocDropAdapter.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocDropAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocEditor.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocEditor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocEditorContributor.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocEditorContributor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFileValidator.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFileValidator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFoldingStructureProvider.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFoldingStructureProvider.java
old mode 100644
new mode 100755
index 5a8e379..f9f16be
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFoldingStructureProvider.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFoldingStructureProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFormOutlinePage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocFormOutlinePage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocHTMLTitleUtil.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocHTMLTitleUtil.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocHyperlinkDetector.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocHyperlinkDetector.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocInputContext.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocInputContext.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocInputContextManager.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocInputContextManager.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocSourcePage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocSourcePage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocTreeSection.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/TocTreeSection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddAnchorAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddAnchorAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddLinkAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddLinkAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddObjectAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddObjectAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddTopicAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocAddTopicAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocRemoveObjectAction.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/TocRemoveObjectAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/messages.properties
index b57630f..3b69c2e 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/actions/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 TocAddAnchorAction_anchor=Anchor
 TocAddLinkAction_link=Link
 TocAddTopicAction_topic=Topic
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocAbstractDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocAbstractDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocAnchorDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocAnchorDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocLinkDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocLinkDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocTopicDetails.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/TocTopicDetails.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/messages.properties
index 124ba5c..9378d81 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/details/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 TocAnchorDetails_idDesc=Specify an anchor ID to provide a point where other tables of contents can embed their contents:
 TocAnchorDetails_idText=Anchor ID:*
 TocAnchorDetails_title=Anchor Details
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/messages.properties
index b19527d..bd1c9ce 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/toc/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 TocEditor_link=Register this table of contents
 TocFileValidator_errorMessage1=The selected file is not a table of contents
 TocFileValidator_errorMessage2=Tables of contents cannot be nested within themselves
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/BaseCSCreationOperation.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/BaseCSCreationOperation.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSCategoryTrackerUtil.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSCategoryTrackerUtil.java
old mode 100644
new mode 100755
index 5d5d316..d00e20d
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSCategoryTrackerUtil.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSCategoryTrackerUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSFileWizardPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSFileWizardPage.java
old mode 100644
new mode 100755
index 940f537..cbe5354
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSFileWizardPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CSFileWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CompCSCreationOperation.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/CompCSCreationOperation.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/IRegisterCSData.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/IRegisterCSData.java
old mode 100644
new mode 100755
index f92db23..10b760e
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/IRegisterCSData.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/IRegisterCSData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/NewCSFileWizard.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/NewCSFileWizard.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/NewCategoryNameDialog.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/NewCategoryNameDialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/NewSimpleCSFileWizard.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/NewSimpleCSFileWizard.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCSOperation.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCSOperation.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCSWizard.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCSWizard.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCSWizardPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCSWizardPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCompCSWizardPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterCompCSWizardPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterSimpleCSWizardPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/RegisterSimpleCSWizardPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/SimpleCSCreationOperation.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/SimpleCSCreationOperation.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/SimpleCSFileWizardPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/SimpleCSFileWizardPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/messages.properties
index 02a7b6a..d670100 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/cheatsheet/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 BaseCSCreationOperation_task=Creating cheat sheet ...
 CompCSCreationOperation_conclusion=Conclusion
 CompCSCreationOperation_group=Group
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/NewCtxHelpWizardPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/NewCtxHelpWizardPage.java
index 72f4226..fc4f87f 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/NewCtxHelpWizardPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/NewCtxHelpWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,14 @@
 package org.eclipse.pde.internal.ua.ui.wizards.ctxhelp;
 
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.pde.internal.ui.IHelpContextIds;
 import org.eclipse.pde.internal.ui.wizards.PDEWizardNewFileCreationPage;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.PlatformUI;
 
 /**
  * Wizard page to create a new context help xml file.
+ * 
  * @since 3.4
  * @see NewCtxHelpWizard
  */
@@ -38,8 +41,8 @@ public class NewCtxHelpWizardPage extends PDEWizardNewFileCreationPage {
 
 	public void createControl(Composite parent) {
 		super.createControl(parent);
-		// TODO Add help context
-//		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.TOC_PAGE);
+
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.NEW_CTX_HLP_PAGE);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/messages.properties
index 677d18c..f541b32 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/ctxhelp/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 NewCtxHelpOperation_context=Context
 NewCtxHelpOperation_topic=Topic
 NewCtxHelpWizard_title=New Context Help
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/IRegisterTOCData.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/IRegisterTOCData.java
index 0a97ace..b3098e0 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/IRegisterTOCData.java
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/IRegisterTOCData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/NewTocFileWizard.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/NewTocFileWizard.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/TocOperation.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/TocOperation.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/TocWizardPage.java b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/TocWizardPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/messages.properties b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/messages.properties
index 1210496..f9a1cc8 100644
--- a/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/wizards/toc/messages.properties
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
 NewTocFileWizard_title=New table of contents
 RegisterTocOperation_errorMessage1=Operation aborted because manifest file is read-only
 RegisterTocOperation_errorMessage2=Operation aborted because manifest file is read-only
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF
index bdd7396..d8533d5 100644
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.pde.ui.templates;singleton:=true
-Bundle-Version: 3.4.200.qualifier
+Bundle-Version: 3.4.400.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Export-Package: org.eclipse.pde.internal.ui.templates;x-internal:=true,
@@ -11,7 +11,8 @@ Export-Package: org.eclipse.pde.internal.ui.templates;x-internal:=true,
  org.eclipse.pde.internal.ui.templates.rcp;x-internal:=true
 Require-Bundle: org.eclipse.ui;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.3.0,4.0.0)",
- org.eclipse.pde.ui;bundle-version="[3.3.0,4.0.0)"
+ org.eclipse.pde.ui;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.6.0,4.0.0)"
 Bundle-Localization: plugin
 Eclipse-LazyStart: true
 Bundle-Activator: org.eclipse.pde.internal.ui.templates.Activator
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/osgi/HelloServiceComponentTemplate.java b/eclipse/plugins/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/osgi/HelloServiceComponentTemplate.java
index 300a9ed..fce17ca 100644
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/osgi/HelloServiceComponentTemplate.java
+++ b/eclipse/plugins/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/osgi/HelloServiceComponentTemplate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2009 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/Dictionary.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/Dictionary.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/DictionaryImpl.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/DictionaryImpl.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/DictionaryService.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/DictionaryService.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/DictionaryServiceImpl.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiService/java/DictionaryServiceImpl.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/$activator$.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/$activator$.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/Dictionary.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/Dictionary.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/DictionaryImpl.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/DictionaryImpl.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/DictionaryService.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/DictionaryService.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/DictionaryServiceImpl.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/helloOSGiServiceComponent/java/DictionaryServiceImpl.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/mail.ico b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/mail.ico
deleted file mode 100644
index b000061..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/mail.ico and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample.gif b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample.gif
deleted file mode 100644
index 34fb3c9..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample.icns b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample.icns
deleted file mode 100644
index 1e92ccc..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample.icns and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample2.gif b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample2.gif
deleted file mode 100644
index 252d7eb..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample2.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample3.gif b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample3.gif
deleted file mode 100644
index b949ac9..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/icons/sample3.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/product_lg.gif b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/product_lg.gif
deleted file mode 100644
index bd95e28..0000000
Binary files a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/bin/product_lg.gif and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/$applicationClass$.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/$applicationClass$.java
deleted file mode 100644
index d926eaa..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/$applicationClass$.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package $packageName$;
-
-import org.eclipse.core.runtime.IPlatformRunnable;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * This class controls all aspects of the application's execution
- */
-public class $applicationClass$ implements IPlatformRunnable {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IPlatformRunnable#run(java.lang.Object)
-	 */
-	public Object run(Object args) throws Exception {
-		Display display = PlatformUI.createDisplay();
-		try {
-			int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
-			if (returnCode == PlatformUI.RETURN_RESTART) {
-				return IPlatformRunnable.EXIT_RESTART;
-			}
-			return IPlatformRunnable.EXIT_OK;
-		} finally {
-			display.dispose();
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/ApplicationWorkbenchAdvisor.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/ApplicationWorkbenchAdvisor.java
deleted file mode 100644
index ca80cd0..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/ApplicationWorkbenchAdvisor.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package $packageName$;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.ICoolBarManager;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.action.ToolBarContributionItem;
-import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
-import org.eclipse.ui.application.IActionBarConfigurer;
-import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
-import org.eclipse.ui.application.WorkbenchAdvisor;
-
-/**
- * This workbench advisor creates the window advisor, and specifies
- * the perspective id for the initial window.
- */
-public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
-	
-	private static final String PERSPECTIVE_ID = "$pluginId$.perspective";
-
-    private IWorkbenchAction exitAction;
-    private IWorkbenchAction aboutAction;
-    private IWorkbenchAction newWindowAction;
-    private OpenViewAction openViewAction;
-    private Action messagePopupAction;
-
-	public String getInitialWindowPerspectiveId() {
-		return PERSPECTIVE_ID;
-	} 
-	
-	public void fillActionBars(IWorkbenchWindow window, IActionBarConfigurer configurer, int flags) {
-		if ((flags & FILL_PROXY) != 0) {
-			// Filling in fake action bars, for example when showing the customize perspective dialog.
-			// At this point, we don't have to create new actions, and instead simply add them to the
-			// provided actions bars.
-			if ((flags & FILL_MENU_BAR) != 0) {
-				fillMenuBar(configurer.getMenuManager());
-			}
-			if ((flags & FILL_COOL_BAR) != 0) {
-				fillCoolBar(configurer.getCoolBarManager());
-			}
-		} else {
-			makeActions(window, configurer);
-			fillMenuBar(configurer.getMenuManager());
-			fillCoolBar(configurer.getCoolBarManager());
-		}
-	}
-	
-	private void fillMenuBar(IMenuManager menuBar) {
-        MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
-        MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP);
-        
-        menuBar.add(fileMenu);
-        // Add a group marker indicating where action set menus will appear.
-        menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
-        menuBar.add(helpMenu);
-        
-        // File
-        fileMenu.add(newWindowAction);
-        fileMenu.add(new Separator());
-        fileMenu.add(messagePopupAction);
-        fileMenu.add(openViewAction);
-        fileMenu.add(new Separator());
-        fileMenu.add(exitAction);
-        
-        // Help
-        helpMenu.add(aboutAction);		
-	}
-	
-    private void fillCoolBar(ICoolBarManager coolBar) {
-        IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
-        coolBar.add(new ToolBarContributionItem(toolbar, "main"));   
-        toolbar.add(openViewAction);
-        toolbar.add(messagePopupAction);
-    }
-
-	
-	private void makeActions(IWorkbenchWindow window, IActionBarConfigurer configurer) {
-        exitAction = ActionFactory.QUIT.create(window);
-        configurer.registerGlobalAction(exitAction);
-        
-        aboutAction = ActionFactory.ABOUT.create(window);
-        configurer.registerGlobalAction(aboutAction);
-        
-        newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
-        configurer.registerGlobalAction(newWindowAction);
-        
-        openViewAction = new OpenViewAction(window, "Open Another Message View", View.ID);
-        configurer.registerGlobalAction(openViewAction);
-        
-        messagePopupAction = new MessagePopupAction("Open Message", window);
-        configurer.registerGlobalAction(messagePopupAction);
-		
-	}
-	
-	public void preWindowOpen(IWorkbenchWindowConfigurer configurer) {
-		configurer.setInitialSize(new Point(600, 400));
-		configurer.setShowCoolBar(true);
-		configurer.setShowStatusLine(false);
-	}
-	
-	public void postWindowClose(IWorkbenchWindowConfigurer configurer) {
-		aboutAction.dispose();
-		exitAction.dispose();
-		newWindowAction.dispose();
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/ICommandIds.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/ICommandIds.java
deleted file mode 100644
index dd6d40e..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/ICommandIds.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package $packageName$;
-
-/**
- * Interface defining the application's command IDs.
- * Key bindings can be defined for specific commands.
- * To associate an action with a command, use IAction.setActionDefinitionId(commandId).
- *
- * @see org.eclipse.jface.action.IAction#setActionDefinitionId(String)
- */
-public interface ICommandIds {
-
-    public static final String CMD_OPEN = "$pluginId$.open";
-    public static final String CMD_OPEN_MESSAGE = "$pluginId$.openMessage";
-    
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/MessagePopupAction.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/MessagePopupAction.java
deleted file mode 100644
index 8976bb4..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/MessagePopupAction.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package $packageName$;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.ui.IWorkbenchWindow;
-
-
-public class MessagePopupAction extends Action {
-
-    private final IWorkbenchWindow window;
-
-    MessagePopupAction(String text, IWorkbenchWindow window) {
-        super(text);
-        this.window = window;
-        // The id is used to refer to the action in a menu or toolbar
-        setId(ICommandIds.CMD_OPEN_MESSAGE);
-        // Associate the action with a pre-defined command, to allow key bindings.
-        setActionDefinitionId(ICommandIds.CMD_OPEN_MESSAGE);
-        setImageDescriptor($pluginClass$.getImageDescriptor("/icons/sample3.gif"));
-    }
-
-    public void run() {
-        MessageDialog.openInformation(window.getShell(), "Open", "Open Message Dialog!");
-    }
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/NavigationView.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/NavigationView.java
deleted file mode 100644
index aaae601..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/NavigationView.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package $packageName$;
-
-import java.util.ArrayList;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.ViewPart;
-
-public class NavigationView extends ViewPart {
-	public static final String ID = "$pluginId$.navigationView";
-	private TreeViewer viewer;
-	 
-	class TreeObject {
-		private String name;
-		private TreeParent parent;
-		
-		public TreeObject(String name) {
-			this.name = name;
-		}
-		public String getName() {
-			return name;
-		}
-		public void setParent(TreeParent parent) {
-			this.parent = parent;
-		}
-		public TreeParent getParent() {
-			return parent;
-		}
-		public String toString() {
-			return getName();
-		}
-	}
-	
-	class TreeParent extends TreeObject {
-		private ArrayList children;
-		public TreeParent(String name) {
-			super(name);
-			children = new ArrayList();
-		}
-		public void addChild(TreeObject child) {
-			children.add(child);
-			child.setParent(this);
-		}
-		public void removeChild(TreeObject child) {
-			children.remove(child);
-			child.setParent(null);
-		}
-		public TreeObject[] getChildren() {
-			return (TreeObject[]) children.toArray(new TreeObject[children.size()]);
-		}
-		public boolean hasChildren() {
-			return children.size()>0;
-		}
-	}
-
-	class ViewContentProvider implements IStructuredContentProvider, 
-										   ITreeContentProvider {
-
-        public void inputChanged(Viewer v, Object oldInput, Object newInput) {
-		}
-        
-		public void dispose() {
-		}
-        
-		public Object[] getElements(Object parent) {
-			return getChildren(parent);
-		}
-        
-		public Object getParent(Object child) {
-			if (child instanceof TreeObject) {
-				return ((TreeObject)child).getParent();
-			}
-			return null;
-		}
-        
-		public Object[] getChildren(Object parent) {
-			if (parent instanceof TreeParent) {
-				return ((TreeParent)parent).getChildren();
-			}
-			return new Object[0];
-		}
-
-        public boolean hasChildren(Object parent) {
-			if (parent instanceof TreeParent)
-				return ((TreeParent)parent).hasChildren();
-			return false;
-		}
-	}
-	
-	class ViewLabelProvider extends LabelProvider {
-
-		public String getText(Object obj) {
-			return obj.toString();
-		}
-		public Image getImage(Object obj) {
-			String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
-			if (obj instanceof TreeParent)
-			   imageKey = ISharedImages.IMG_OBJ_FOLDER;
-			return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
-		}
-	}
-
-    /**
-     * We will set up a dummy model to initialize tree heararchy. In real
-     * code, you will connect to a real model and expose its hierarchy.
-     */
-    private TreeObject createDummyModel() {
-        TreeObject to1 = new TreeObject("Inbox");
-        TreeObject to2 = new TreeObject("Drafts");
-        TreeObject to3 = new TreeObject("Sent");
-        TreeParent p1 = new TreeParent("me at this.com");
-        p1.addChild(to1);
-        p1.addChild(to2);
-        p1.addChild(to3);
-
-        TreeObject to4 = new TreeObject("Inbox");
-        TreeParent p2 = new TreeParent("other at aol.com");
-        p2.addChild(to4);
-
-        TreeParent root = new TreeParent("");
-        root.addChild(p1);
-        root.addChild(p2);
-        return root;
-    }
-
-	/**
-     * This is a callback that will allow us to create the viewer and initialize
-     * it.
-     */
-	public void createPartControl(Composite parent) {
-		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
-		viewer.setContentProvider(new ViewContentProvider());
-		viewer.setLabelProvider(new ViewLabelProvider());
-		viewer.setInput(createDummyModel());
-	}
-
-	/**
-	 * Passing the focus request to the viewer's control.
-	 */
-	public void setFocus() {
-		viewer.getControl().setFocus();
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/OpenViewAction.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/OpenViewAction.java
deleted file mode 100644
index 7ea8882..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/OpenViewAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package $packageName$;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-
-
-public class OpenViewAction extends Action {
-	
-	private final IWorkbenchWindow window;
-	private int instanceNum = 0;
-	private final String viewId;
-	
-	public OpenViewAction(IWorkbenchWindow window, String label, String viewId) {
-		this.window = window;
-		this.viewId = viewId;
-        setText(label);
-        // The id is used to refer to the action in a menu or toolbar
-		setId(ICommandIds.CMD_OPEN);
-        // Associate the action with a pre-defined command, to allow key bindings.
-		setActionDefinitionId(ICommandIds.CMD_OPEN);
-		setImageDescriptor($pluginClass$.getImageDescriptor("/icons/sample2.gif"));
-	}
-	
-	public void run() {
-		if(window != null) {	
-			try {
-				window.getActivePage().showView(viewId, Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);
-			} catch (PartInitException e) {
-				MessageDialog.openError(window.getShell(), "Error", "Error opening view:" + e.getMessage());
-			}
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/Perspective.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/Perspective.java
deleted file mode 100644
index 86a9dd9..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/Perspective.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package $packageName$;
-
-import org.eclipse.ui.IFolderLayout;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-public class Perspective implements IPerspectiveFactory {
-
-	public void createInitialLayout(IPageLayout layout) {
-		String editorArea = layout.getEditorArea();
-		layout.setEditorAreaVisible(false);
-		
-		layout.addStandaloneView(NavigationView.ID,  false, IPageLayout.LEFT, 0.25f, editorArea);
-		IFolderLayout folder = layout.createFolder("messages", IPageLayout.TOP, 0.5f, editorArea);
-		folder.addPlaceholder(View.ID + ":*");
-		folder.addView(View.ID);
-		
-		layout.getViewLayout(NavigationView.ID).setCloseable(false);
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/View.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/View.java
deleted file mode 100644
index 2843b23..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/mail/java/View.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package $packageName$;
-
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.part.ViewPart;
-
-public class View extends ViewPart {
-
-	public static final String ID = "$pluginId$.view";
-	
-	private Font boldFont;
-
-	public void createPartControl(Composite parent) {
-		Composite top = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		top.setLayout(layout);
-		// top banner
-		Composite banner = new Composite(top, SWT.NONE);
-		banner.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL, GridData.VERTICAL_ALIGN_BEGINNING, true, false));
-		layout = new GridLayout();
-		layout.marginHeight = 5;
-		layout.marginWidth = 10;
-		layout.numColumns = 2;
-		banner.setLayout(layout);
-		// setup bold font
-		Font defaultFont = JFaceResources.getDefaultFont();
-		FontData[] data = defaultFont.getFontData();
-		for (int i = 0; i < data.length; i++) {
-			data[i].setStyle(SWT.BOLD);
-		}
-		boldFont = new Font(top.getDisplay(), data);
-		Label l = new Label(banner, SWT.WRAP);
-		l.setText("Subject:");
-		l.setFont(boldFont);
-		l = new Label(banner, SWT.WRAP);
-		l.setText("This is a message about the cool Eclipse RCP!");
-		
-		l = new Label(banner, SWT.WRAP);
-		l.setText("From:");
-		l.setFont(boldFont);
-		final Label link = new Label(banner, SWT.WRAP);
-		link.setText("nicole at mail.org");
-		link.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
-		
-		l = new Label(banner, SWT.WRAP);
-		l.setText("Date:");
-		l.setFont(boldFont);
-		l = new Label(banner, SWT.WRAP);
-		l.setText("10:34 am");
-		// message contents
-		Text text = new Text(top, SWT.MULTI | SWT.WRAP);
-		text.setText("This RCP Application was generated from the PDE Plug-in Project wizard. This sample shows how to:\n"+
-						"- add a top-level menu and toolbar with actions\n"+
-						"- add keybindings to actions\n" +
-						"- create views that can't be closed and\n"+
-						"  multiple instances of the same view\n"+
-						"- perspectives with placeholders for new views\n"+
-						"- use the default about dialog\n"+
-						"- create a product definition\n");
-		text.setLayoutData(new GridData(GridData.FILL_BOTH));
-	}
-
-	public void setFocus() {
-	}
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/perspective/java/$perspectiveClassName$.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/perspective/java/$perspectiveClassName$.java
index 22d4a04..d011138 100644
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/perspective/java/$perspectiveClassName$.java
+++ b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.0/perspective/java/$perspectiveClassName$.java
@@ -1,13 +1,3 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
 package $packageName$;
 
 import org.eclipse.ui.IFolderLayout;
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.1/mail/java/View.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.1/mail/java/View.java
index 224edbc..9b87452 100644
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.1/mail/java/View.java
+++ b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.1/mail/java/View.java
@@ -17,6 +17,11 @@ import org.eclipse.ui.part.ViewPart;
 public class View extends ViewPart {
 
 	public static final String ID = "$pluginId$.view";
+
+	/**
+	 * The text control that's displaying the content of the email message.
+	 */
+	private Text messageText;
 	
 	public void createPartControl(Composite parent) {
 		Composite top = new Composite(parent, SWT.NONE);
@@ -60,8 +65,8 @@ public class View extends ViewPart {
 		l = new Label(banner, SWT.WRAP);
 		l.setText("10:34 am");
 		// message contents
-		Text text = new Text(top, SWT.MULTI | SWT.WRAP);
-		text.setText("This RCP Application was generated from the PDE Plug-in Project wizard. This sample shows how to:\n"+
+		messageText = new Text(top, SWT.MULTI | SWT.WRAP);
+		messageText.setText("This RCP Application was generated from the PDE Plug-in Project wizard. This sample shows how to:\n"+
 						"- add a top-level menu and toolbar with actions\n"+
 						"- add keybindings to actions\n" +
 						"- create views that can't be closed and\n"+
@@ -69,9 +74,10 @@ public class View extends ViewPart {
 						"- perspectives with placeholders for new views\n"+
 						"- use the default about dialog\n"+
 						"- create a product definition\n");
-		text.setLayoutData(new GridData(GridData.FILL_BOTH));
+		messageText.setLayoutData(new GridData(GridData.FILL_BOTH));
 	}
 
 	public void setFocus() {
+		messageText.setFocus();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.3/mail/java/View.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.3/mail/java/View.java
index 224edbc..9b87452 100644
--- a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.3/mail/java/View.java
+++ b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.3/mail/java/View.java
@@ -17,6 +17,11 @@ import org.eclipse.ui.part.ViewPart;
 public class View extends ViewPart {
 
 	public static final String ID = "$pluginId$.view";
+
+	/**
+	 * The text control that's displaying the content of the email message.
+	 */
+	private Text messageText;
 	
 	public void createPartControl(Composite parent) {
 		Composite top = new Composite(parent, SWT.NONE);
@@ -60,8 +65,8 @@ public class View extends ViewPart {
 		l = new Label(banner, SWT.WRAP);
 		l.setText("10:34 am");
 		// message contents
-		Text text = new Text(top, SWT.MULTI | SWT.WRAP);
-		text.setText("This RCP Application was generated from the PDE Plug-in Project wizard. This sample shows how to:\n"+
+		messageText = new Text(top, SWT.MULTI | SWT.WRAP);
+		messageText.setText("This RCP Application was generated from the PDE Plug-in Project wizard. This sample shows how to:\n"+
 						"- add a top-level menu and toolbar with actions\n"+
 						"- add keybindings to actions\n" +
 						"- create views that can't be closed and\n"+
@@ -69,9 +74,10 @@ public class View extends ViewPart {
 						"- perspectives with placeholders for new views\n"+
 						"- use the default about dialog\n"+
 						"- create a product definition\n");
-		text.setLayoutData(new GridData(GridData.FILL_BOTH));
+		messageText.setLayoutData(new GridData(GridData.FILL_BOTH));
 	}
 
 	public void setFocus() {
+		messageText.setFocus();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.5/OSGiEventAdmin/OSGI-INF/component.xml b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.5/OSGiEventAdmin/OSGI-INF/component.xml
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.5/OSGiEventAdmin/build.properties b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.5/OSGiEventAdmin/build.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.5/OSGiEventAdmin/java/ServiceComponent.java b/eclipse/plugins/org.eclipse.pde.ui.templates/templates_3.5/OSGiEventAdmin/java/ServiceComponent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs
index 0834a9d..00c74a0 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Wed Jan 09 12:08:04 CST 2008
+#Wed May 11 10:13:44 CEST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -27,7 +27,7 @@ org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
diff --git a/eclipse/plugins/org.eclipse.pde.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.pde.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..83e5a8a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:42:20 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF
index 851fab4..ba704a3 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.pde.ui; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.6.100.qualifier
 Bundle-Activator: org.eclipse.pde.internal.ui.PDEPlugin
 Bundle-Vendor: %provider-name
 Bundle-Localization: plugin
@@ -44,7 +44,7 @@ Export-Package:
  org.eclipse.pde.internal.ui.search.dialogs;x-internal:=true,
  org.eclipse.pde.internal.ui.shared;x-internal:=true,
  org.eclipse.pde.internal.ui.shared.target;x-internal:=true,
- org.eclipse.pde.internal.ui.util;x-internal:=true,
+ org.eclipse.pde.internal.ui.util;x-friends:="org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.internal.ui.views.dependencies;x-internal:=true,
  org.eclipse.pde.internal.ui.views.plugins;x-internal:=true,
  org.eclipse.pde.internal.ui.views.target;x-internal:=true,
@@ -68,7 +68,7 @@ Require-Bundle:
  org.eclipse.core.runtime;bundle-version="[3.1.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui.views;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jface.text;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.ui.workbench.texteditor;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.editors;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
@@ -77,7 +77,7 @@ Require-Bundle:
  org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.pde.build;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.search;bundle-version="[3.1.0,4.0.0)",
+ org.eclipse.search;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.team.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
@@ -107,7 +107,9 @@ Require-Bundle:
  org.eclipse.equinox.frameworkadmin.equinox;bundle-version="[1.0.100,2.0.0)",
  org.eclipse.pde.launching;bundle-version="[3.6.0,4.0.0)";visibility:=reexport,
  org.eclipse.ui.console;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.equinox.simpleconfigurator;bundle-version="[1.0.200,2.0.0)"
+ org.eclipse.equinox.simpleconfigurator;bundle-version="[1.0.200,2.0.0)",
+ org.eclipse.equinox.p2.repository.tools;bundle-version="[2.0.100,3.0.0)",
+ org.eclipse.team.ui;bundle-version="[3.6.100,4.0.0)"
 Eclipse-LazyStart: true
 Import-Package: com.ibm.icu.text,
  org.eclipse.jdt.debug.core
diff --git a/eclipse/plugins/org.eclipse.pde.ui/plugin.properties b/eclipse/plugins/org.eclipse.pde.ui/plugin.properties
index de1f4cc..70f38c4 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.pde.ui/plugin.properties
@@ -37,7 +37,7 @@ preferences.compilers.name = Compilers
 preferences.editor.name = Editors
 
 preferenceKeywords.PDE=Plug-in plugin Development PDE
-preferenceKeywords.MainPreferencePage=java search target source dependencies
+preferenceKeywords.MainPreferencePage=java search target source dependencies JUnit
 preferenceKeywords.TargetPlatformPreferencePage=external target definition plug-in fragment
 preferenceKeywords.EditorPreferencePage=editor colors source page folding
 preferenceKeywords.CompilersPreferencePage=error warning ignore marker schema
diff --git a/eclipse/plugins/org.eclipse.pde.ui/plugin.xml b/eclipse/plugins/org.eclipse.pde.ui/plugin.xml
index c19e698..e3c2e18 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.pde.ui/plugin.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?><!--
-     Copyright (c) 2005, 2010 IBM Corporation and others.
+<?eclipse version="3.0"?>
+<!--
+     Copyright (c) 2005, 2011 IBM Corporation and others.
      All rights reserved. This program and the accompanying materials
      are made available under the terms of the Eclipse Public License v1.0
      which accompanies this distribution, and is available at
@@ -20,7 +21,6 @@
    <extension-point id="samples" name="%expoint.samples.name" schema="schema/samples.exsd"/>
    <extension-point id="targetProvisioners" name="%extension-point.name.0" schema="schema/targetProvisioners.exsd"/>
    <extension-point id="launchShortcuts" name="%extension-point.name.1" schema="schema/launchShortcuts.exsd"/>
-   <extension-point id="bundleImportPages" name="%expoint.bundleImportPages.name" schema="schema/bundleImportPages.exsd"/>
 
 <!-- Extensions -->
    <extension
@@ -2070,16 +2070,14 @@
             id="org.eclipse.pde.launching.ORGANIZE_MANIFESTS"
             plugin="org.eclipse.pde.launching">
       </statusHandler>
+      <statusHandler
+            class="org.eclipse.pde.internal.ui.launcher.LauncherUtilsStatusHandler"
+            code="2005"
+            id="org.eclipse.pde.launching.SELECT_WORKSPACE_FIELD"
+            plugin="org.eclipse.pde.launching">
+      </statusHandler>
    </extension>
  <extension
-       point="org.eclipse.pde.ui.bundleImportPages">
-    <page
-          bundleImporter="org.eclipse.pde.core.cvs.importer"
-          class="org.eclipse.pde.internal.ui.wizards.imports.CVSBundleImportPage"
-          id="org.eclipse.pde.ui.cvs.import.page">
-    </page>
- </extension>
- <extension
          point="org.eclipse.ui.console.consoleFactories">
       <consoleFactory
             class="org.eclipse.pde.internal.ui.util.OSGiConsoleFactory"
diff --git a/eclipse/plugins/org.eclipse.pde.ui/schema/bundleImportPages.exsd b/eclipse/plugins/org.eclipse.pde.ui/schema/bundleImportPages.exsd
deleted file mode 100644
index 574dc4a..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui/schema/bundleImportPages.exsd
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.pde.ui" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.pde.ui" id="bundleImportPages" name="Bundle Import Pages"/>
-      </appInfo>
-      <documentation>
-         <strong>EXPERIMENTAL</strong>. This extension point has been added as part of a work in progress. There is no guarantee that this API will work or that it will remain the same in future releases. Please do not use this API without consulting with the PDE team.
-<p>
-A bundle import page provides an optional wizard page used to configure settings for bundles to be imported by a <code>org.eclipse.pde.core.bundleImporters</code> extension.
-</p>
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appInfo>
-            <meta.element internal="true" />
-         </appInfo>
-      </annotation>
-      <complexType>
-         <sequence>
-            <element ref="page" minOccurs="1" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="page">
-      <complexType>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  unique identifier for this bundle import page
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  Fully qualified name of a Java class providing an implementation of <code>org.eclipse.pde.internal.ui.provisional.IBundeImportWizardPage</code>.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.pde.internal.ui.provisional.IBundeImportWizardPage"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="bundleImporter" type="string" use="required">
-            <annotation>
-               <documentation>
-                  Identifier of the <code>org.eclipse.pde.core.bundleImporters</code> extension that this page provides a user interface for.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="identifier" basedOn="org.eclipse.pde.core.bundleImporters/importer/@id"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         3.6
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         The following is an example of a bundle import wizard page extension.
-
-<p>
-<pre>
- <extension point="org.eclipse.pde.core.bundleImporters">
-  <importer
-   id="com.example.ExampleIdentifier"
-   class="com.example.ExampleBundleImportWizardpage"
-   bundleImporter="com.example.bundleImporter">
-  </importer>
- </extension>
-</pre>
-</p>
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiinfo"/>
-      </appInfo>
-      <documentation>
-         Value of a page's <b>class</b> attribute must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.pde.internal.ui.provisional.IBundeImportWizardPage</b>.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         PDE provides a wizard page for editing properties of bundles that can be imported by the CVS bundle importer. The page allows users to import specific bundle versions or from HEAD.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2010 IBM Corporation and others.
-<br>
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which 
-accompanies this distribution, and is available at 
-<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IHelpContextIds.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IHelpContextIds.java
index 525a91e..6bb1b21 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IHelpContextIds.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IHelpContextIds.java
@@ -136,6 +136,7 @@ public interface IHelpContextIds {
 	public static final String LOCATION_ADD_SITE_WIZARD = PREFIX + "location_add_site_wizard"; //$NON-NLS-1$
 	public static final String LOCATION_EDIT_SITE_WIZARD = PREFIX + "location_edit_site_wizard"; //$NON-NLS-1$
 	public static final String TOC_PAGE = PREFIX + "toc_page"; //$NON-NLS-1$
+	public static final String NEW_CTX_HLP_PAGE = PREFIX + "new_context_help_page"; //$NON-NLS-1$
 
 	public static final String XHTML_CONVERSION_PAGE = PREFIX + "xhtml_conversion_page"; //$NON-NLS-1$
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IPDEUIConstants.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IPDEUIConstants.java
index d4fbf95..e97dd8a 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IPDEUIConstants.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/IPDEUIConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,10 +49,4 @@ public interface IPDEUIConstants extends IPDEConstants {
 	 * TODO, move to IPDELauncherConstants in 3.4
 	 */
 	String GENERATED_CONFIG = "pde.generated.config"; //$NON-NLS-1$
-
-	/**
-	 * Extension point identifier for <code>org.eclipse.pde.ui.bundleImportPages</code>.
-	 */
-	public static final String EXTENSION_POINT_BUNDLE_IMPORT_PAGES = PLUGIN_ID + ".bundleImportPages"; //$NON-NLS-1$
-
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPerspective.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPerspective.java
index 6ecfd6b..01cbfe4 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPerspective.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPerspective.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,10 @@ public class PDEPerspective implements IPerspectiveFactory {
 		bottom.addView(IPageLayout.ID_PROBLEM_VIEW);
 
 		factory.addView(IPageLayout.ID_OUTLINE, IPageLayout.RIGHT, 0.75f, factory.getEditorArea());
+
+		factory.addNewWizardShortcut("org.eclipse.pde.ui.NewProjectWizard"); //$NON-NLS-1$
+		factory.addNewWizardShortcut("org.eclipse.pde.ui.NewFeatureProjectWizard"); //$NON-NLS-1$
+
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java
index f4a624e..e347734 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.*;
 import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.pde.internal.core.PDEPreferencesManager;
 import org.eclipse.pde.internal.ui.launcher.PDELogFileProvider;
@@ -70,6 +71,9 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants {
 		return getDefault().getBundle().getEntry("/"); //$NON-NLS-1$
 	}
 
+	/**
+	 * @return The active workbench page or <code>null</code> if the workbench is shutting down
+	 */
 	public static IWorkbenchPage getActivePage() {
 		return getDefault().internalGetActivePage();
 	}
@@ -82,6 +86,14 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants {
 		return null;
 	}
 
+	/**
+	 * Returns the currently active window for the workbench (if any). Returns
+	 * <code>null</code> if there is no active workbench window. Returns
+	 * <code>null</code> if called from a non-UI thread.
+	 * 
+	 * @return the active workbench window, or <code>null</code> if there is
+	 *         no active workbench window or if called from a non-UI thread
+	 */
 	public static IWorkbenchWindow getActiveWorkbenchWindow() {
 		return getDefault().getWorkbench().getActiveWorkbenchWindow();
 	}
@@ -104,8 +116,12 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants {
 		return ResourcesPlugin.getWorkspace();
 	}
 
+	/**
+	 * @return The active workbench page or <code>null</code> if the workbench is shutting down
+	 */
 	private IWorkbenchPage internalGetActivePage() {
-		return getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		IWorkbenchWindow workbenchWin = getWorkbench().getActiveWorkbenchWindow();
+		return workbenchWin != null ? workbenchWin.getActivePage() : null;
 	}
 
 	public static void log(IStatus status) {
@@ -215,4 +231,19 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants {
 		return fTextFileDocumentProvider;
 	}
 
+	/**
+	 * Returns a section in the PDE UI plug-in's dialog settings. If the section doesn't exist yet, it is created.
+	 *
+	 * @param name the name of the section
+	 * @return the section of the given name
+	 * @since 3.6.100
+	 */
+	public IDialogSettings getDialogSettingsSection(String name) {
+		IDialogSettings dialogSettings = getDialogSettings();
+		IDialogSettings section = dialogSettings.getSection(name);
+		if (section == null) {
+			section = dialogSettings.addNewSection(name);
+		}
+		return section;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java
index 3cbc56f..88c9ab2 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -207,6 +207,7 @@ public class PDEPluginImages {
 	public static final ImageDescriptor DESC_EXPORT_PLUGIN_TOOL = create(PATH_TOOL, "exp_deployplug.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_EXPORT_PRODUCT_TOOL = create(PATH_TOOL, "exp_product.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_EXPORT_FEATURE_TOOL = create(PATH_TOOL, "exp_deployfeat.gif"); //$NON-NLS-1$
+	public static final ImageDescriptor DESC_EXPORT_TARGET_TOOL = create(PATH_TOOL, "export_target.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_BUILD_TOOL = create(PATH_TOOL, "build_exec.gif"); //$NON-NLS-1$
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
index ef1ae8f..46b0f19 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,8 @@ public class PDEUIMessages extends NLS {
 
 	public static String ContentSection_1;
 
+	public static String DefaultJUnitWorkspaceBlock_name;
+
 	public static String DefinitionPage_0;
 
 	public static String DefinitionPage_1;
@@ -223,6 +225,8 @@ public class PDEUIMessages extends NLS {
 
 	public static String LauncherUtils_clearLogFile;
 
+	public static String LauncherUtils_edit;
+
 	public static String LauncherUtils_generateConfigIni;
 
 	public static String OrganizeManifestsWizardPage_calculateUses;
@@ -413,10 +417,31 @@ public class PDEUIMessages extends NLS {
 
 	public static String MainPreferencePage_addToJavaSearch;
 	public static String MainPreferencePage_exportingGroup;
-	public static String MainPreferencePage_sourceGroup;
-	public static String MainPreferencePage_group2;
+	public static String MainPreferencePage_junitWorkspace_asContainer;
+
+	public static String MainPreferencePage_junitWorkspace_asLocation;
+
+	public static String MainPreferencePage_junitWorkspace_fileSystem;
+
+	public static String MainPreferencePage_junitWorkspace_variables;
+
+	public static String MainPreferencePage_junitWorkspace_workspace;
+
+	public static String MainPreferencePage_junitWorkspaceGroup;
+
 	public static String MainPreferencePage_promptBeforeOverwrite;
 	public static String MainPreferencePage_promtBeforeRemove;
+	public static String MainPreferencePage_runtimeWorkspace_asContainer;
+
+	public static String MainPreferencePage_runtimeWorkspace_asLocation;
+
+	public static String MainPreferencePage_runtimeWorkspace_fileSystem;
+
+	public static String MainPreferencePage_runtimeWorkspace_variables;
+
+	public static String MainPreferencePage_runtimeWorkspace_workspace;
+
+	public static String MainPreferencePage_runtimeWorkspaceGroup;
 	public static String MainPreferencePage_showSourceBundles;
 	public static String MainPreferencePage_updateStale;
 	public static String MainPreferencePage_targetDefinitionsGroup;
@@ -562,6 +587,8 @@ public class PDEUIMessages extends NLS {
 	// Reusable Parts ################################
 	public static String WizardCheckboxTablePart_selectAll;
 	public static String WizardCheckboxTablePart_deselectAll;
+	public static String WizardCheckboxTablePart_select;
+	public static String WizardCheckboxTablePart_deselect;
 	public static String WizardCheckboxTablePart_counter;
 
 	// Outline #################################
@@ -679,6 +706,12 @@ public class PDEUIMessages extends NLS {
 	public static String FeatureEditor_info_copyright;
 	public static String FeatureEditor_info_discoveryUrls;
 
+	public static String FeatureEditor_licenseFeatureSection_browse;
+	public static String FeatureEditor_licenseFeatureSection_sharedButton;
+	public static String FeatureEditor_licenseFeatureSection_featureID;
+	public static String FeatureEditor_licenseFeatureSection_featureVersion;
+	public static String FeatureEditor_licenseFeatureSection_localButton;
+
 	public static String FeatureEditor_PluginSection_pluginTitle;
 	public static String FeatureEditor_PluginSection_pluginDesc;
 	public static String FeatureEditor_PluginSection_new;
@@ -869,6 +902,8 @@ public class PDEUIMessages extends NLS {
 	public static String WorkspaceDataBlock_askClear;
 	public static String WorkspaceDataBlock_clearLog;
 	public static String WorkspaceDataBlock_clearWorkspace;
+
+	public static String WorkspaceDataBlock_configureDefaults;
 	public static String BasicLauncherTab_javaExec;
 
 	public static String BasicLauncherTab_unbound;
@@ -1209,6 +1244,8 @@ public class PDEUIMessages extends NLS {
 	public static String BaseExtensionPoint_sections_copyright;
 	public static String BaseExportWizard_confirmReplace_title;
 	public static String BaseExtensionPoint_generating;
+	public static String GeneralInfoSection_IdWarning;
+
 	public static String GeneralInfoSection_version;
 	public static String GeneralInfoSection_provider;
 	public static String GeneralInfoSection_pluginId;
@@ -1715,6 +1752,10 @@ public class PDEUIMessages extends NLS {
 	public static String ExportTargetError_ChooseDestination;
 	public static String ExportTargetError_validPath;
 
+	public static String ExportTargetJob_ConfiguringDestination;
+
+	public static String ExportTargetJob_ExportingTargetContents;
+
 	public static String CategoryDetails_title;
 	public static String CategoryDetails_sectionDescription;
 	public static String CategoryDetails_name;
@@ -2330,6 +2371,12 @@ public class PDEUIMessages extends NLS {
 
 	public static String PluginImportOperation_Set_up_classpaths;
 
+	public static String PluginImportOperation_WarningDialogJob;
+
+	public static String PluginImportOperation_WarningDialogMessageSingular;
+
+	public static String PluginImportOperation_WarningDialogMessagePlural;
+
 	public static String PluginImportWizard_runningConfigDesc;
 
 	public static String PluginImportWizard_runningConfigsDesc;
@@ -2755,6 +2802,14 @@ public class PDEUIMessages extends NLS {
 
 	public static String TargetEditor_2;
 
+	public static String TargetEditor_3;
+
+	public static String TargetEditor_4;
+
+	public static String TargetEditor_5;
+
+	public static String TargetEditor_6;
+
 	public static String FeatureImportWizardPage_reloadLocation;
 
 	public static String FeatureImportWizardPage_importHasInvalid;
@@ -2876,6 +2931,7 @@ public class PDEUIMessages extends NLS {
 	public static String XMLContentAssistProcessor_schemaLocation;
 
 	public static String PDEJavaHelper_msgContentAssistAvailable;
+	public static String PDEJavaHelper_msgContentAssistAvailableWithKeyBinding;
 
 	public static String AddExportPackageResolution_Label;
 	public static String AddBundleClassPathResolution_add;
@@ -2906,6 +2962,19 @@ public class PDEUIMessages extends NLS {
 	public static String ProjectSelectionDialog_message;
 	public static String ProjectSelectionDialog_settingsTitle;
 
+	public static String PropertiesSection_Add;
+	public static String PropertiesSection_Edit;
+	public static String PropertiesSection_ErrorPropertyExists;
+	public static String PropertiesSection_ErrorPropertyNoName;
+	public static String PropertiesSection_Name;
+	public static String PropertiesSection_NameColumn;
+	public static String PropertiesSection_PropertiesSectionDescription;
+	public static String PropertiesSection_PropertiesSectionTitle;
+	public static String PropertiesSection_PropertyDialogTitle;
+	public static String PropertiesSection_Remove;
+	public static String PropertiesSection_Value;
+	public static String PropertiesSection_ValueColumn;
+
 	public static String PDECompilersConfigurationBlock_error;
 	public static String PDECompilersConfigurationBlock_warning;
 	public static String PDECompilersConfigurationBlock_ignore;
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/compare/PluginContentMergeViewer.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/compare/PluginContentMergeViewer.java
index 89dfbf5..c4fca5e 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/compare/PluginContentMergeViewer.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/compare/PluginContentMergeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2009 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,9 +10,10 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.compare;
 
+import java.util.ArrayList;
+import java.util.Iterator;
 import org.eclipse.compare.CompareConfiguration;
 import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
-import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.text.IDocumentPartitioner;
 import org.eclipse.jface.text.TextViewer;
@@ -32,6 +33,7 @@ import org.eclipse.swt.widgets.Composite;
 public class PluginContentMergeViewer extends TextMergeViewer {
 
 	private IColorManager fColorManager;
+	private ArrayList fPropertyChangedListeners;
 
 	public PluginContentMergeViewer(Composite parent, CompareConfiguration config) {
 		super(parent, config);
@@ -47,8 +49,7 @@ public class PluginContentMergeViewer extends TextMergeViewer {
 					configuration.dispose();
 				}
 			});
-			IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
-			store.addPropertyChangeListener(new IPropertyChangeListener() {
+			IPropertyChangeListener propertyChangedListener = new IPropertyChangeListener() {
 				public void propertyChange(PropertyChangeEvent event) {
 					// the configuration will test if the properties affect the presentation also,
 					// but checking it here allows us to prevent the viewer from being invalidated
@@ -58,7 +59,12 @@ public class PluginContentMergeViewer extends TextMergeViewer {
 						textViewer.invalidateTextPresentation();
 					}
 				}
-			});
+			};
+			PDEPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(propertyChangedListener);
+
+			if (fPropertyChangedListeners == null)
+				fPropertyChangedListeners = new ArrayList(3);
+			fPropertyChangedListeners.add(propertyChangedListener);
 			((SourceViewer) textViewer).configure(configuration);
 			Font font = JFaceResources.getFont(PluginContentMergeViewer.class.getName());
 			if (font != null)
@@ -82,5 +88,11 @@ public class PluginContentMergeViewer extends TextMergeViewer {
 		super.handleDispose(event);
 		if (fColorManager != null)
 			fColorManager.dispose();
+		if (fPropertyChangedListeners != null) {
+			Iterator iter = fPropertyChangedListeners.iterator();
+			while (iter.hasNext())
+				PDEPlugin.getDefault().getPreferenceStore().removePropertyChangeListener((IPropertyChangeListener) iter.next());
+			fPropertyChangedListeners = null;
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBuildEntryResolution.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBuildEntryResolution.java
index d2f26c2..4a919d0 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBuildEntryResolution.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBuildEntryResolution.java
@@ -22,6 +22,12 @@ public class AddBuildEntryResolution extends BuildEntryMarkerResolution {
 		super(type, marker);
 	}
 
+	public AddBuildEntryResolution(int type, IMarker marker, String entry, String value) {
+		super(type, marker);
+		fEntry = entry;
+		fToken = value;
+	}
+
 	public String getLabel() {
 		return NLS.bind(PDEUIMessages.AddBuildEntryResolution_add, fToken, fEntry);
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
index 82d88ca..dc37301 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
@@ -112,6 +112,18 @@ public class ResolutionGenerator implements IMarkerResolutionGenerator2 {
 	private IMarkerResolution[] getBuildEntryAdditionResolutions(IMarker marker, String multiFixDescription) {
 		ArrayList resolutions = new ArrayList(2);
 		resolutions.add(new AddBuildEntryResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker));
+		for (int i = 0;; i++) {
+			try {
+				String entry = (String) marker.getAttribute(PDEMarkerFactory.BK_BUILD_ENTRY + '.' + i);
+				if (entry == null)
+					break;
+				String value = (String) marker.getAttribute(PDEMarkerFactory.BK_BUILD_TOKEN + '.' + i);
+				resolutions.add(new AddBuildEntryResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker, entry, value));
+
+			} catch (CoreException e) {
+				break;
+			}
+		}
 		try {
 			String markerCategory = (String) marker.getAttribute(PDEMarkerFactory.CAT_ID);
 			int problemID = marker.getAttribute("id", PDEMarkerFactory.NO_RESOLUTION); //$NON-NLS-1$
@@ -124,6 +136,7 @@ public class ResolutionGenerator implements IMarkerResolutionGenerator2 {
 			}
 		} catch (CoreException e) {
 		}
+
 		return (IMarkerResolution[]) resolutions.toArray(new IMarkerResolution[resolutions.size()]);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java
index b3b70a5..94fb2f2 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java
@@ -15,8 +15,8 @@ import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
 import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jdt.ui.text.java.ClasspathFixProcessor.ClasspathFixProposal;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.ltk.core.refactoring.Change;
@@ -26,6 +26,8 @@ import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.core.IBaseModel;
 import org.eclipse.pde.core.plugin.IPluginImport;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.internal.core.ICoreConstants;
+import org.eclipse.pde.internal.core.bundle.BundlePluginBase;
 import org.eclipse.pde.internal.core.ibundle.*;
 import org.eclipse.pde.internal.core.project.PDEProject;
 import org.eclipse.pde.internal.core.text.bundle.*;
@@ -221,10 +223,13 @@ public class JavaResolutionFactory {
 						bundle.setHeader(Constants.IMPORT_PACKAGE, pkgId);
 					} else if (header instanceof ImportPackageHeader) {
 						ImportPackageHeader ipHeader = (ImportPackageHeader) header;
+						int manifestVersion = BundlePluginBase.getBundleManifestVersion(bundle);
+						String versionAttr = (manifestVersion < 2) ? ICoreConstants.PACKAGE_SPECIFICATION_VERSION : Constants.VERSION_ATTRIBUTE;
+						ImportPackageObject impObject = new ImportPackageObject((ManifestHeader) header, (ExportPackageDescription) getChangeObject(), versionAttr);
 						if (!isUndo()) {
-							ipHeader.addPackage(pkgId);
+							ipHeader.addPackage(impObject);
 						} else {
-							ipHeader.removePackage(pkgId);
+							ipHeader.removePackage(impObject);
 						}
 					}
 				}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/QuickFixProcessor.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/QuickFixProcessor.java
index 6cf7048..6cd111d 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/QuickFixProcessor.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/QuickFixProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -154,19 +154,30 @@ public class QuickFixProcessor implements IQuickFixProcessor {
 		ASTNode selectedNode = problemLocation.getCoveringNode(cu);
 		if (selectedNode != null) {
 			ASTNode node = getParent(selectedNode);
-			// Find import declaration which is the problem
-			if (node instanceof ImportDeclaration) {
+			String className = null;
+			String packageName = null;
+			if (node == null) {
+				if (selectedNode instanceof SimpleName) {
+					ITypeBinding typeBinding = ((SimpleName) selectedNode).resolveTypeBinding();
+					className = typeBinding.getBinaryName();
+					packageName = typeBinding.getPackage().getName();
+				}
+			} else if (node instanceof ImportDeclaration) {
+				// Find import declaration which is the problem
+				className = ((ImportDeclaration) node).getName().getFullyQualifiedName();
+
+				// always add the search repositories proposal
+				int lastPeriod = className.lastIndexOf('.'); // if there is no period assume we are importing a single name package
+				packageName = className.substring(0, lastPeriod >= 0 ? lastPeriod : className.length());
+				result.add(JavaResolutionFactory.createSearchRepositoriesProposal(packageName));
+			}
+
+			if (className != null && packageName != null) {
 				IProject project = cu.getJavaElement().getJavaProject().getProject();
 				// only try to find proposals on Plug-in Projects
 				if (!WorkspaceModelManager.isPluginProject(project))
 					return;
 
-				String className = ((ImportDeclaration) node).getName().getFullyQualifiedName();
-
-				// always add the search repositories proposal
-				String packageName = className.substring(0, className.lastIndexOf('.'));
-				result.add(JavaResolutionFactory.createSearchRepositoriesProposal(packageName));
-
 				// create a collector that will create IJavaCompletionProposals and load them into 'result'
 				AbstractClassResolutionCollector collector = createCollector(result);
 				IRunnableWithProgress findOperation = new FindClassResolutionsOperation(project, className, collector);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/dialogs/FeatureSelectionDialog.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/dialogs/FeatureSelectionDialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/dialogs/FolderSelectionDialog.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/dialogs/FolderSelectionDialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/dialogs/PluginSelectionDialog.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/dialogs/PluginSelectionDialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ILauncherFormPageHelper.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ILauncherFormPageHelper.java
index 05d6256..252af80 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ILauncherFormPageHelper.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ILauncherFormPageHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2008 IBM Corporation and others.
+ *  Copyright (c) 2007, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@ package org.eclipse.pde.internal.ui.editor;
 
 /**
  * This is an interface used only by subclasses of PDELauncherFormPage.
- * It's purpose is to allow code reuse between direct subclasses of
+ * Its purpose is to allow code reuse between direct subclasses of
  * PDELauncherFormPage and subclasses of LaunchShortcutOverviewPage.
  */
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/PDEFormTextEditorContributor.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/PDEFormTextEditorContributor.java
index e3361dd..b26de7f 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/PDEFormTextEditorContributor.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/PDEFormTextEditorContributor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,10 +39,8 @@ public class PDEFormTextEditorContributor extends PDEFormEditorContributor {
 				editMenu.add(new Separator(IContextMenuConstants.GROUP_OPEN));
 				editMenu.add(new Separator(IContextMenuConstants.GROUP_GENERATE));
 				editMenu.add(new Separator(IContextMenuConstants.GROUP_ADDITIONS));
-				if (fCorrectionAssist != null)
-					editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fCorrectionAssist);
 				if (fContentAssist != null)
-					editMenu.appendToGroup(IContextMenuConstants.GROUP_GENERATE, fContentAssist);
+					editMenu.prependToGroup(ITextEditorActionConstants.GROUP_ASSIST, fContentAssist);
 			}
 		}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/StructuredViewerSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/StructuredViewerSection.java
index 0169826..b4d6cba 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/StructuredViewerSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/StructuredViewerSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -61,6 +61,7 @@ public abstract class StructuredViewerSection extends PDESection implements IPDE
 		Control control = fViewerPart.getControl();
 		Menu menu = popupMenuManager.createContextMenu(control);
 		control.setMenu(menu);
+		registerPopupMenu(popupMenuManager);
 		// Initialize drag and drop
 		if (isDragAndDropEnabled()) {
 			initializeDragAndDrop();
@@ -70,6 +71,15 @@ public abstract class StructuredViewerSection extends PDESection implements IPDE
 		}
 	}
 
+	/**
+	 * If the context menu for this section should be registered, do it here
+	 * with the appropriate id etc.  By default do nothing.
+	 * @param popupMenuManager the menu manager to be registered
+	 */
+	protected void registerPopupMenu(MenuManager popupMenuManager) {
+		// do nothing by default
+	}
+
 	protected Composite createClientContainer(Composite parent, int span, FormToolkit toolkit) {
 		Composite container = toolkit.createComposite(parent);
 		container.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, span));
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/actions/OpenSchemaAction.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/actions/OpenSchemaAction.java
index 68beb9e..6e5250f 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/actions/OpenSchemaAction.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/actions/OpenSchemaAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2006, 2008 IBM Corporation and others.
+ *  Copyright (c) 2006, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,8 +12,8 @@
 package org.eclipse.pde.internal.ui.editor.actions;
 
 import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.io.UnsupportedEncodingException;
+import java.net.*;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jface.action.Action;
@@ -187,11 +187,20 @@ public class OpenSchemaAction extends Action {
 		// Get the raw URL, determine if it is stored in a JAR, and handle 
 		// accordingly
 		String rawURL = schemaURL.toString();
-		if (rawURL.startsWith("jar")) { //$NON-NLS-1$
-			// Call to getPath removes the 'jar:' qualifier
-			openSchemaJar(schemaURL.getPath());
+		String path = null;
+		try {
+			path = URLDecoder.decode(schemaURL.getPath(), "UTF-8"); //$NON-NLS-1$
+		} catch (UnsupportedEncodingException e) {
+		}
+		if (path != null) {
+			if (rawURL.startsWith("jar")) { //$NON-NLS-1$
+				// Call to getPath removes the 'jar:' qualifier
+				openSchemaJar(path);
+			} else {
+				openSchemaFile(path);
+			}
 		} else {
-			openSchemaFile(schemaURL.getPath());
+			displayErrorDialog();
 		}
 
 	}
@@ -216,7 +225,8 @@ public class OpenSchemaAction extends Action {
 			}
 		} catch (MalformedURLException e) {
 		}
-		SchemaEditor.openSchema(new File(path));
+		if (!SchemaEditor.openSchema(new File(path)))
+			displayErrorDialog();
 	}
 
 	/**
@@ -248,7 +258,8 @@ public class OpenSchemaAction extends Action {
 			schemaEntryName = schemaEntryName.substring(1);
 		}
 		// Open the schema in a new editor
-		SchemaEditor.openSchema(new File(jarFileName), schemaEntryName);
+		if (!SchemaEditor.openSchema(new File(jarFileName), schemaEntryName))
+			displayErrorDialog();
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java
index 703eddc..84e0a39 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.*;
 import org.eclipse.jface.text.presentation.IPresentationReconciler;
 import org.eclipse.jface.text.presentation.PresentationReconciler;
-import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
 import org.eclipse.jface.text.rules.*;
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -36,8 +35,6 @@ public class BuildSourceViewerConfiguration extends ChangeAwareSourceViewerConfi
 	private BasePDEScanner fCommentScanner;
 	private BasePDEScanner fPropertyValueScanner;
 
-	private PDEQuickAssistAssistant fQuickAssistant;
-
 	private abstract class AbstractJavaScanner extends BasePDEScanner {
 
 		public void adaptToPreferenceChange(PropertyChangeEvent event) {
@@ -220,18 +217,4 @@ public class BuildSourceViewerConfiguration extends ChangeAwareSourceViewerConfi
 		String property = event.getProperty();
 		return property.equals(PreferenceConstants.PROPERTIES_FILE_COLORING_VALUE) || property.equals(PreferenceConstants.PROPERTIES_FILE_COLORING_ARGUMENT) || property.equals(PreferenceConstants.PROPERTIES_FILE_COLORING_ASSIGNMENT) || property.equals(PreferenceConstants.PROPERTIES_FILE_COLORING_KEY) || property.equals(PreferenceConstants.PROPERTIES_FILE_COLORING_COMMENT);
 	}
-
-	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
-		if (sourceViewer.isEditable()) {
-			if (fQuickAssistant == null)
-				fQuickAssistant = new PDEQuickAssistAssistant();
-			return fQuickAssistant;
-		}
-		return null;
-	}
-
-	public void dispose() {
-		if (fQuickAssistant != null)
-			fQuickAssistant.dispose();
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java
index f992c1d..9b5db49 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,10 +25,8 @@ import org.eclipse.jface.text.contentassist.*;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.ExportPackageDescription;
 import org.eclipse.osgi.util.ManifestElement;
-import org.eclipse.pde.core.IBaseModel;
 import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.internal.core.ICoreConstants;
-import org.eclipse.pde.internal.core.ibundle.IBundleModel;
 import org.eclipse.pde.internal.core.util.HeaderMap;
 import org.eclipse.pde.internal.core.util.PDEJavaHelper;
 import org.eclipse.pde.internal.ui.PDEPluginImages;
@@ -182,10 +180,6 @@ public class ManifestContentAssistProcessor extends TypePackageCompletionProcess
 
 	protected ICompletionProposal[] computeHeader(String currentValue, int startOffset, int offset) {
 		ArrayList completions = new ArrayList();
-		IBaseModel model = fSourcePage.getInputContext().getModel();
-		int length = fHeader.length;
-		if (model instanceof IBundleModel && !((IBundleModel) model).isFragmentModel())
-			--length;
 		for (int i = 0; i < fHeader.length; i++) {
 			if (fHeader[i].regionMatches(true, 0, currentValue, 0, currentValue.length()) && fHeaders.get(fHeader[i]) == null) {
 				TypeCompletionProposal proposal = new TypeCompletionProposal(fHeader[i] + ": ", getImage(F_TYPE_HEADER), //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/context/XMLInputContext.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/context/XMLInputContext.java
index 3502927..631086c 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/context/XMLInputContext.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/context/XMLInputContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -216,6 +216,7 @@ public abstract class XMLInputContext extends UTF8InputContext {
 		int offset = attr.getValueOffset();
 		Object newValue = event.getNewValue();
 		Object changedObject = attr;
+		TextEdit oldOp = (TextEdit) fOperationTable.get(changedObject);
 		TextEdit op = null;
 		if (offset > -1) {
 			// Attribute exists, replace the old value with the new value
@@ -223,7 +224,13 @@ public abstract class XMLInputContext extends UTF8InputContext {
 				int length = attr.getValueOffset() + attr.getValueLength() + 1 - attr.getNameOffset();
 				op = getAttributeDeleteEditOperation(attr.getNameOffset(), length);
 			} else {
-				int oldLength = ((String) event.getOldValue()).length();
+				int oldLength;
+				if (oldOp instanceof ReplaceEdit)
+					oldLength = oldOp.getLength();
+				else if (oldOp instanceof DeleteEdit)
+					oldLength = oldOp.getOffset() + oldOp.getLength() - offset - 1;
+				else
+					oldLength = getWritableAttributeNodeValue(((String) event.getOldValue())).length();
 				op = new ReplaceEdit(offset, oldLength, getWritableAttributeNodeValue(event.getNewValue().toString()));
 			}
 		}
@@ -242,7 +249,6 @@ public abstract class XMLInputContext extends UTF8InputContext {
 				return;
 			}
 		}
-		TextEdit oldOp = (TextEdit) fOperationTable.get(changedObject);
 		if (oldOp != null)
 			ops.remove(oldOp);
 		ops.add(op);
@@ -490,19 +496,11 @@ public abstract class XMLInputContext extends UTF8InputContext {
 		}
 	}
 
-	/**
-	 * @param source
-	 * @return
-	 */
 	protected String getWritableAttributeNodeValue(String source) {
 		// TODO: MP: TEO: LOW: Shouldn't it be getWritableAttributeString ?
 		return PDEXMLHelper.getWritableString(source);
 	}
 
-	/**
-	 * @param source
-	 * @return
-	 */
 	protected String getWritableTextNodeString(IDocumentTextNode textNode) {
 		return textNode.write();
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/InfoSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/InfoSection.java
index 7fc3bfc..6fcf90c 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/InfoSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/InfoSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -63,6 +63,8 @@ public class InfoSection extends PDESection {
 
 	private Control fUrlsPage;
 
+	private Control fLicensePage;
+
 	public InfoSection(PDEFormPage page, Composite parent, IColorManager colorManager) {
 		super(page, parent, Section.DESCRIPTION | ExpandableComposite.NO_TITLE, false);
 		String description = PDEUIMessages.FeatureEditor_InfoSection_desc;
@@ -114,6 +116,7 @@ public class InfoSection extends PDESection {
 		fNotebook.setLayout(fNotebookLayout);
 
 		fInfoPage = createInfoPage(toolkit, fNotebook);
+		fLicensePage = createLicensePage(toolkit, fNotebook);
 		fUrlsPage = createUrlsPage(toolkit, fNotebook);
 		fNotebookLayout.topControl = fInfoPage;
 
@@ -126,6 +129,23 @@ public class InfoSection extends PDESection {
 		}
 	}
 
+	private Control createLicensePage(FormToolkit toolkit, Composite parent) {
+		Composite page = toolkit.createComposite(parent);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginWidth = 2;
+		layout.marginHeight = 0;
+		layout.verticalSpacing = 8;
+		layout.marginTop = 0;
+		page.setLayout(layout);
+
+		LicenseFeatureSection licenseSection = new LicenseFeatureSection(getPage(), page, fSourceConfiguration);
+		licenseSection.getSection().setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		getManagedForm().addPart(licenseSection);
+		return page;
+	}
+
 	/**
 	 * @param toolkit
 	 * @param parent
@@ -138,6 +158,7 @@ public class InfoSection extends PDESection {
 		layout.marginHeight = 5;
 		layout.verticalSpacing = 8;
 		page.setLayout(layout);
+
 		GridData gd;
 		Label label = toolkit.createLabel(page, PDEUIMessages.FeatureEditor_InfoSection_url);
 		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
@@ -249,7 +270,7 @@ public class InfoSection extends PDESection {
 	}
 
 	private void handleApply() {
-		if (0 <= fElementIndex && fElementIndex < 3 && fElement != null) {
+		if (0 <= fElementIndex && fElementIndex < 2 && fElement != null) {
 			handleApply((IFeatureInfo) fElement, fTabFolder.getSelectionIndex());
 		} else {
 			handleApply(null, fTabFolder.getSelectionIndex());
@@ -257,7 +278,7 @@ public class InfoSection extends PDESection {
 	}
 
 	private void handleApply(IFeatureInfo info, int index) {
-		if (index >= 3)
+		if (index >= 2)
 			return;
 		String urlName = fUrlText.getText();
 		String text = fDocument.get();
@@ -285,6 +306,7 @@ public class InfoSection extends PDESection {
 			targetInfo.setURL(url);
 			targetInfo.setDescription(text);
 		} catch (CoreException e) {
+			// TODO: This should probably at least be logged
 		}
 	}
 
@@ -382,11 +404,21 @@ public class InfoSection extends PDESection {
 			IFeatureInfo info = feature.getFeatureInfo(index);
 			updateEditorInput(info, true);
 		}
+
+		// TODO: Why is this code in both updateEditorInput and updateTabSelection?
 		Control oldPage = fNotebookLayout.topControl;
-		if (index < 3)
-			fNotebookLayout.topControl = fInfoPage;
-		else
-			fNotebookLayout.topControl = fUrlsPage;
+		switch (index) {
+			case 0 :
+			case 1 :
+				fNotebookLayout.topControl = fInfoPage;
+				break;
+			case 2 :
+				fNotebookLayout.topControl = fLicensePage;
+				break;
+			case 3 :
+				fNotebookLayout.topControl = fUrlsPage;
+				break;
+		}
 		if (oldPage != fNotebookLayout.topControl)
 			fNotebook.layout();
 	}
@@ -429,10 +461,17 @@ public class InfoSection extends PDESection {
 		fElementIndex = fTabFolder.getSelectionIndex();
 
 		Control oldPage = fNotebookLayout.topControl;
-		if (input instanceof IFeatureURLElement || input instanceof NamedElement) {
-			fNotebookLayout.topControl = fUrlsPage;
-		} else {
-			fNotebookLayout.topControl = fInfoPage;
+		switch (fElementIndex) {
+			case 0 :
+			case 1 :
+				fNotebookLayout.topControl = fInfoPage;
+				break;
+			case 2 :
+				fNotebookLayout.topControl = fLicensePage;
+				break;
+			case 3 :
+				fNotebookLayout.topControl = fUrlsPage;
+				break;
 		}
 		if (oldPage != fNotebookLayout.topControl)
 			fNotebook.layout();
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/LicenseFeatureSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/LicenseFeatureSection.java
new file mode 100644
index 0000000..22651df
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/LicenseFeatureSection.java
@@ -0,0 +1,323 @@
+/*******************************************************************************
+ *  Copyright (c) 2010, 2011 IBM Corporation and others.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.ui.editor.feature;
+
+import java.util.ArrayList;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.jface.window.Window;
+import org.eclipse.pde.core.IEditable;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.ifeature.*;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.ui.dialogs.FeatureSelectionDialog;
+import org.eclipse.pde.internal.ui.editor.*;
+import org.eclipse.pde.internal.ui.editor.context.XMLDocumentSetupParticpant;
+import org.eclipse.pde.internal.ui.editor.text.XMLConfiguration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.widgets.*;
+
+/**
+ * Provides the UI for the License Agreement section of the Information page in the Feature Editor.
+ * There are two radio buttons which allow the user to choose between setting a license in text
+ * or to point at a feature which specifies the licensing.
+ * 
+ * @since 3.7
+ * @see InfoSection
+ * @see FeatureEditor
+ */
+public class LicenseFeatureSection extends PDESection {
+
+	private Text fLicenseFeatureIDText;
+	private Button fLicenseButton;
+	private Text fLicenseFeatureVersionText;
+	private Text fUrlText;
+	private SourceViewer fSourceViewer;
+	private SourceViewerConfiguration fSourceConfiguration;
+	private IDocument fDocument;
+	private boolean fIgnoreChange;
+	private Button fSharedLicenseButton;
+	private Button fLocalLicenseButton;
+
+	public LicenseFeatureSection(PDEFormPage page, Composite parent, XMLConfiguration fSourceConfiguration) {
+		super(page, parent, ExpandableComposite.NO_TITLE, false);
+		this.fSourceConfiguration = fSourceConfiguration;
+		fDocument = new Document();
+		new XMLDocumentSetupParticpant().setup(fDocument);
+		createClient(getSection(), page.getManagedForm().getToolkit());
+	}
+
+	/**
+	 * Creates the UI in the given section using the provided toolkit
+	 * @param toolkit
+	 * @param parent
+	 */
+	public void createClient(Section section, FormToolkit toolkit) {
+		Composite page = toolkit.createComposite(section);
+		final StackLayout stackLayout = new StackLayout();
+
+		GridLayout layout = FormLayoutFactory.createClearGridLayout(false, 2);
+		layout.horizontalSpacing = 8;
+		page.setLayout(layout);
+		fSharedLicenseButton = toolkit.createButton(page, PDEUIMessages.FeatureEditor_licenseFeatureSection_sharedButton, SWT.RADIO);
+		fLocalLicenseButton = toolkit.createButton(page, PDEUIMessages.FeatureEditor_licenseFeatureSection_localButton, SWT.RADIO);
+
+		GridData gd = new GridData();
+		gd.horizontalIndent = 5;
+		fLocalLicenseButton.setLayoutData(gd);
+
+		final Composite sectionsComposite = toolkit.createComposite(page);
+		gd = new GridData(GridData.FILL_BOTH);
+		gd.horizontalSpan = 2;
+		sectionsComposite.setLayoutData(gd);
+		sectionsComposite.setLayout(stackLayout);
+
+		// Shared Section
+
+		final Composite licenseFeatureComposite = toolkit.createComposite(sectionsComposite);
+		gd = new GridData(GridData.FILL_BOTH);
+		gd.horizontalSpan = 2;
+		licenseFeatureComposite.setLayoutData(gd);
+
+		layout = new GridLayout();
+		layout.numColumns = 3;
+		layout.marginWidth = 2;
+		layout.marginHeight = 5;
+		layout.verticalSpacing = 8;
+		licenseFeatureComposite.setLayout(layout);
+
+		Label label = toolkit.createLabel(licenseFeatureComposite, PDEUIMessages.FeatureEditor_licenseFeatureSection_featureID);
+		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+
+		fLicenseFeatureIDText = toolkit.createText(licenseFeatureComposite, null, SWT.SINGLE);
+		fLicenseFeatureIDText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				infoModified();
+			}
+		});
+
+		fLicenseFeatureIDText.setEditable(true);
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		fLicenseFeatureIDText.setLayoutData(gd);
+
+		fLicenseButton = toolkit.createButton(licenseFeatureComposite, PDEUIMessages.FeatureEditor_licenseFeatureSection_browse, SWT.PUSH);
+		fLicenseButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				handleSelect();
+			}
+		});
+
+		label = toolkit.createLabel(licenseFeatureComposite, PDEUIMessages.FeatureEditor_licenseFeatureSection_featureVersion);
+		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+
+		fLicenseFeatureVersionText = toolkit.createText(licenseFeatureComposite, null, SWT.SINGLE);
+		fLicenseFeatureVersionText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				infoModified();
+			}
+		});
+
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		gd.horizontalSpan = 2;
+		fLicenseFeatureVersionText.setLayoutData(gd);
+
+		// Local Section
+
+		final Composite localLicenseComposite = toolkit.createComposite(sectionsComposite);
+		gd = new GridData(GridData.FILL_BOTH);
+		gd.horizontalSpan = 2;
+		localLicenseComposite.setLayoutData(gd);
+
+		layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginWidth = 2;
+		layout.marginHeight = 5;
+		layout.verticalSpacing = 8;
+		localLicenseComposite.setLayout(layout);
+
+		label = toolkit.createLabel(localLicenseComposite, PDEUIMessages.FeatureEditor_InfoSection_url);
+		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+
+		fUrlText = toolkit.createText(localLicenseComposite, null, SWT.SINGLE);
+		fUrlText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				infoModified();
+			}
+		});
+		gd = new GridData(GridData.FILL_HORIZONTAL);
+		fUrlText.setLayoutData(gd);
+
+		label = toolkit.createLabel(localLicenseComposite, PDEUIMessages.FeatureEditor_InfoSection_text);
+		label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+		gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
+		label.setLayoutData(gd);
+
+		int styles = SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL;
+		fSourceViewer = new SourceViewer(localLicenseComposite, null, styles);
+		fSourceViewer.configure(fSourceConfiguration);
+		fSourceViewer.setDocument(fDocument);
+		StyledText styledText = fSourceViewer.getTextWidget();
+		styledText.setFont(JFaceResources.getTextFont());
+		styledText.setMenu(getPage().getPDEEditor().getContextMenu());
+		styledText.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
+
+		if (SWT.getPlatform().equals("motif") == false) { //$NON-NLS-1$
+			toolkit.paintBordersFor(localLicenseComposite);
+		}
+
+		gd = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
+		gd.widthHint = 50;
+		gd.heightHint = 50;
+		styledText.setLayoutData(gd);
+
+		fSharedLicenseButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if (((Button) e.widget).getSelection()) {
+					stackLayout.topControl = licenseFeatureComposite;
+					sectionsComposite.layout();
+				}
+			}
+		});
+		fLocalLicenseButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if (((Button) e.widget).getSelection()) {
+					stackLayout.topControl = localLicenseComposite;
+					sectionsComposite.layout();
+				}
+			}
+		});
+
+		section.setClient(page);
+
+		IFeatureModel model = (IFeatureModel) getPage().getModel();
+		IFeature feature = model.getFeature();
+		if (feature.getLicenseFeatureID() == null || feature.getLicenseFeatureID().length() == 0) {
+			fLocalLicenseButton.setSelection(true);
+			fSharedLicenseButton.setSelection(false);
+			stackLayout.topControl = localLicenseComposite;
+		} else {
+			fLocalLicenseButton.setSelection(false);
+			fSharedLicenseButton.setSelection(true);
+			stackLayout.topControl = licenseFeatureComposite;
+		}
+
+		toolkit.paintBordersFor(licenseFeatureComposite);
+
+	}
+
+	private void handleSelect() {
+		BusyIndicator.showWhile(fLicenseFeatureIDText.getDisplay(), new Runnable() {
+			public void run() {
+				IFeatureModel[] allModels = PDECore.getDefault().getFeatureModelManager().getModels();
+				ArrayList newModels = new ArrayList();
+				for (int i = 0; i < allModels.length; i++) {
+					if (canAdd(allModels[i]))
+						newModels.add(allModels[i]);
+				}
+				IFeatureModel[] candidateModels = (IFeatureModel[]) newModels.toArray(new IFeatureModel[newModels.size()]);
+				FeatureSelectionDialog dialog = new FeatureSelectionDialog(fLicenseFeatureIDText.getShell(), candidateModels, false);
+				if (dialog.open() == Window.OK) {
+					Object[] models = dialog.getResult();
+					doSelect((IFeatureModel) models[0]);
+				}
+			}
+
+			private void doSelect(IFeatureModel licenseFeatureModel) {
+				IFeature licenseFeature = licenseFeatureModel.getFeature();
+				fLicenseFeatureIDText.setText(licenseFeature.getId());
+				fLicenseFeatureVersionText.setText(licenseFeature.getVersion());
+			}
+
+			private boolean canAdd(IFeatureModel candidate) {
+				IFeatureModel model = (IFeatureModel) getPage().getModel();
+				IFeature feature = model.getFeature();
+				String id = feature.getId();
+				String candidateID = candidate.getFeature().getId();
+				return !candidateID.equals(id) && !candidateID.equals(fLicenseFeatureIDText.getText());
+			}
+		});
+	}
+
+	private void infoModified() {
+		IFeatureModel featureModel = (IFeatureModel) getPage().getModel();
+
+		if (fLicenseFeatureIDText.getText().length() == 0 && fLicenseFeatureVersionText.getText().length() > 0) {
+			fIgnoreChange = true;
+			fLicenseFeatureVersionText.setText(""); //$NON-NLS-1$
+			fIgnoreChange = false;
+		}
+		if (!fIgnoreChange && featureModel instanceof IEditable) {
+			((IEditable) featureModel).setDirty(true);
+			markDirty();
+		}
+	}
+
+	public void refresh() {
+		fIgnoreChange = true;
+		IFeatureModel model = (IFeatureModel) getPage().getModel();
+		IFeature feature = model.getFeature();
+		fLicenseFeatureIDText.setText(feature.getLicenseFeatureID());
+		fLicenseFeatureVersionText.setText(feature.getLicenseFeatureVersion());
+		IFeatureInfo info = feature.getFeatureInfo(IFeature.INFO_LICENSE);
+		String url = null;
+		String description = null;
+		if (info != null) {
+			url = info.getURL();
+			description = info.getDescription();
+		}
+		fUrlText.setText(url != null ? url : ""); //$NON-NLS-1$
+		fDocument.set(description != null ? description : ""); //$NON-NLS-1$
+		super.refresh();
+		fIgnoreChange = false;
+	}
+
+	public void commit(boolean onSave) {
+		IFeatureModel featureModel = (IFeatureModel) getPage().getModel();
+		IFeature feature = featureModel.getFeature();
+
+		if (fSharedLicenseButton.getSelection()) {
+			feature.setLicenseFeatureID(fLicenseFeatureIDText.getText());
+			feature.setLicenseFeatureVersion(fLicenseFeatureVersionText.getText());
+		} else {
+			feature.setLicenseFeatureID(""); //$NON-NLS-1$
+			feature.setLicenseFeatureVersion(""); //$NON-NLS-1$
+			fIgnoreChange = true;
+			fLicenseFeatureIDText.setText(""); //$NON-NLS-1$
+			fLicenseFeatureVersionText.setText(""); //$NON-NLS-1$
+			fIgnoreChange = false;
+		}
+
+		String url = fUrlText.getText();
+		String description = fDocument.get();
+
+		try {
+			IFeatureInfo targetInfo = feature.getFeatureInfo(2);
+			if (targetInfo == null) {
+				targetInfo = featureModel.getFactory().createInfo(2);
+				feature.setFeatureInfo(targetInfo, 2);
+			}
+			targetInfo.setURL(url);
+			targetInfo.setDescription(description);
+		} catch (CoreException e) {
+		}
+		super.commit(onSave);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java
index 766576d..facfc03 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,10 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.editor.feature;
 
-import org.eclipse.pde.internal.ui.dialogs.PluginSelectionDialog;
-
-import org.eclipse.pde.internal.ui.dialogs.FeatureSelectionDialog;
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import org.eclipse.core.runtime.CoreException;
@@ -27,11 +23,13 @@ import org.eclipse.pde.internal.core.feature.FeatureImport;
 import org.eclipse.pde.internal.core.ifeature.*;
 import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.ui.dialogs.FeatureSelectionDialog;
+import org.eclipse.pde.internal.ui.dialogs.PluginSelectionDialog;
 import org.eclipse.pde.internal.ui.editor.*;
 import org.eclipse.pde.internal.ui.editor.actions.SortAction;
 import org.eclipse.pde.internal.ui.elements.DefaultContentProvider;
 import org.eclipse.pde.internal.ui.parts.TablePart;
-import org.eclipse.pde.internal.ui.wizards.*;
+import org.eclipse.pde.internal.ui.wizards.ListUtil;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.dnd.Clipboard;
@@ -40,6 +38,8 @@ import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.graphics.Cursor;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
@@ -349,6 +349,12 @@ public class RequiresSection extends TableSection implements IPluginModelListene
 			manager.add(new Separator());
 		}
 		getPage().getPDEEditor().getContributor().contextMenuAboutToShow(manager);
+		manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+	}
+
+	protected void registerPopupMenu(MenuManager popupMenuManager) {
+		IEditorSite site = (IEditorSite) getPage().getSite();
+		site.registerContextMenu(site.getId() + ".plugins", popupMenuManager, fViewerPart.getViewer(), false); //$NON-NLS-1$
 	}
 
 	protected void selectionChanged(IStructuredSelection selection) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointDetails.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointDetails.java
index 030a942..afebe60 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointDetails.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointDetails.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -8,365 +8,397 @@
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.pde.internal.ui.editor.plugin;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.pde.core.IBaseModel;
-import org.eclipse.pde.core.IModelChangedEvent;
-import org.eclipse.pde.core.plugin.*;
-import org.eclipse.pde.internal.ui.*;
-import org.eclipse.pde.internal.ui.editor.*;
-import org.eclipse.pde.internal.ui.editor.actions.OpenSchemaAction;
-import org.eclipse.pde.internal.ui.parts.FormEntry;
-import org.eclipse.pde.internal.ui.search.FindReferencesAction;
-import org.eclipse.pde.internal.ui.search.ShowDescriptionAction;
-import org.eclipse.pde.internal.ui.util.SWTUtil;
-import org.eclipse.pde.internal.ui.wizards.extension.NewSchemaFileWizard;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.*;
-import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
-import org.eclipse.ui.dialogs.ISelectionStatusValidator;
-import org.eclipse.ui.forms.IFormPart;
-import org.eclipse.ui.forms.events.HyperlinkAdapter;
-import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.widgets.*;
-import org.eclipse.ui.model.WorkbenchContentProvider;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.views.navigator.ResourceComparator;
-
-public class ExtensionPointDetails extends PDEDetails {
-	private IPluginExtensionPoint fInput;
-	private FormEntry fIdEntry;
-	private FormEntry fNameEntry;
-	private FormEntry fSchemaEntry;
-	private FormText fRichText;
-	private String fRichTextData;
-
-	private static final String SCHEMA_RTEXT_DATA = PDEUIMessages.ExtensionPointDetails_schemaLinks;
-	private static final String NO_SCHEMA_RTEXT_DATA = PDEUIMessages.ExtensionPointDetails_noSchemaLinks;
-
-	public ExtensionPointDetails() {
-	}
-
-	public String getContextId() {
-		return PluginInputContext.CONTEXT_ID;
-	}
-
-	public void fireSaveNeeded() {
-		markDirty();
-		getPage().getPDEEditor().fireSaveNeeded(getContextId(), false);
-	}
-
-	public PDEFormPage getPage() {
-		return (PDEFormPage) getManagedForm().getContainer();
-	}
-
-	public boolean isEditable() {
-		return getPage().getPDEEditor().getAggregateModel().isEditable();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.forms.IDetailsPage#createContents(org.eclipse.swt.widgets.Composite)
-	 */
-	public void createContents(Composite parent) {
-		parent.setLayout(FormLayoutFactory.createDetailsGridLayout(false, 1));
-		FormToolkit toolkit = getManagedForm().getToolkit();
-		Section section = toolkit.createSection(parent, Section.DESCRIPTION | ExpandableComposite.TITLE_BAR);
-		section.clientVerticalSpacing = FormLayoutFactory.SECTION_HEADER_VERTICAL_SPACING;
-		section.setText(PDEUIMessages.ExtensionPointDetails_title);
-		section.setDescription(PDEUIMessages.ExtensionPointDetails_desc);
-		section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));
-		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
-
-		Composite client = toolkit.createComposite(section);
-		client.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 3));
-		client.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
-		fIdEntry = new FormEntry(client, toolkit, PDEUIMessages.ExtensionPointDetails_id, null, false);
-		fIdEntry.setFormEntryListener(new FormEntryAdapter(this) {
-			public void textValueChanged(FormEntry entry) {
-				if (fInput != null) {
-					try {
-						fInput.setId(fIdEntry.getValue());
-					} catch (CoreException e) {
-						PDEPlugin.logException(e);
-					}
-				}
-			}
-		});
-		fNameEntry = new FormEntry(client, toolkit, PDEUIMessages.ExtensionPointDetails_name, null, false);
-		fNameEntry.setFormEntryListener(new FormEntryAdapter(this) {
-			public void textValueChanged(FormEntry entry) {
-				if (fInput != null)
-					try {
-						fInput.setName(fNameEntry.getValue());
-					} catch (CoreException e) {
-						PDEPlugin.logException(e);
-					}
-			}
-		});
-		boolean editable = getPage().getModel().isEditable();
-		fSchemaEntry = new FormEntry(client, toolkit, PDEUIMessages.ExtensionPointDetails_schema, PDEUIMessages.ExtensionPointDetails_browse, editable); // 
-		fSchemaEntry.setFormEntryListener(new FormEntryAdapter(this) {
-			public void textValueChanged(FormEntry entry) {
-				if (fInput != null) {
-					try {
-						fInput.setSchema(fSchemaEntry.getValue());
-					} catch (CoreException e) {
-						PDEPlugin.logException(e);
-					}
-					updateRichText();
-				}
-			}
-
-			public void linkActivated(HyperlinkEvent e) {
-				IProject project = getPage().getPDEEditor().getCommonProject();
-				if (fSchemaEntry.getValue() == null || fSchemaEntry.getValue().length() == 0) {
-					generateSchema();
-					return;
-				}
-				IFile file = project.getFile(fSchemaEntry.getValue());
-				if (file.exists())
-					openSchemaFile(file);
-				else
-					generateSchema();
-			}
-
-			public void browseButtonSelected(FormEntry entry) {
-				final IProject project = getPage().getPDEEditor().getCommonProject();
-				ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(PDEPlugin.getActiveWorkbenchShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider());
-				dialog.setTitle(PDEUIMessages.ManifestEditor_ExtensionPointDetails_schemaLocation_title);
-				dialog.setMessage(PDEUIMessages.ManifestEditor_ExtensionPointDetails_schemaLocation_desc);
-				dialog.setDoubleClickSelects(false);
-				dialog.setAllowMultiple(false);
-				dialog.addFilter(new ViewerFilter() {
-					public boolean select(Viewer viewer, Object parent, Object element) {
-						if (element instanceof IFile) {
-							String ext = ((IFile) element).getFullPath().getFileExtension();
-							return "exsd".equals(ext) || "mxsd".equals(ext); //$NON-NLS-1$ //$NON-NLS-2$
-						} else if (element instanceof IContainer) { // i.e. IProject, IFolder
-							try {
-								IResource[] resources = ((IContainer) element).members();
-								for (int i = 0; i < resources.length; i++) {
-									if (select(viewer, parent, resources[i]))
-										return true;
-								}
-							} catch (CoreException e) {
-								PDEPlugin.logException(e);
-							}
-						}
-						return false;
-					}
-				});
-				dialog.setValidator(new ISelectionStatusValidator() {
-					public IStatus validate(Object[] selection) {
-						IPluginModelBase model = (IPluginModelBase) getPage().getPDEEditor().getAggregateModel();
-						String pluginName = model.getPluginBase().getId();
-
-						if (selection == null || selection.length != 1 || !(selection[0] instanceof IFile))
-							return new Status(IStatus.ERROR, pluginName, IStatus.ERROR, PDEUIMessages.ManifestEditor_ExtensionPointDetails_validate_errorStatus, null);
-						IFile file = (IFile) selection[0];
-						String ext = file.getFullPath().getFileExtension();
-						if ("exsd".equals(ext) || "mxsd".equals(ext)) //$NON-NLS-1$ //$NON-NLS-2$
-							return new Status(IStatus.OK, pluginName, IStatus.OK, "", null); //$NON-NLS-1$
-						return new Status(IStatus.ERROR, pluginName, IStatus.ERROR, PDEUIMessages.ManifestEditor_ExtensionPointDetails_validate_errorStatus, null);
-					}
-				});
-				dialog.setDoubleClickSelects(true);
-				dialog.setStatusLineAboveButtons(true);
-				dialog.setInput(project);
-				dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
-				String filePath = fSchemaEntry.getValue();
-				if (filePath != null && filePath.length() != 0 && project.exists(new Path(filePath)))
-					dialog.setInitialSelection(project.getFile(new Path(filePath)));
-				else
-					dialog.setInitialSelection(null);
-				dialog.create();
-				PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), IHelpContextIds.BROWSE_EXTENSION_POINTS_SCHEMAS);
-				if (dialog.open() == Window.OK) {
-					Object[] elements = dialog.getResult();
-					if (elements.length > 0) {
-						IResource elem = (IResource) elements[0];
-						fSchemaEntry.setValue(elem.getProjectRelativePath().toString());
-					}
-				}
-			}
-		});
-		createSpacer(toolkit, client, 2);
-
-		Composite container = toolkit.createComposite(parent, SWT.NONE);
-		container.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 1));
-		container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
-
-		fRichText = toolkit.createFormText(container, true);
-		fRichText.setImage("open", PDEPlugin.getDefault().getLabelProvider().get( //$NON-NLS-1$
-				PDEPluginImages.DESC_SCHEMA_OBJ));
-		fRichText.setImage("desc", PDEPlugin.getDefault().getLabelProvider().get( //$NON-NLS-1$
-				PDEPluginImages.DESC_DOC_SECTION_OBJ));
-		fRichText.setImage("search", PDEPlugin.getDefault().getLabelProvider().get( //$NON-NLS-1$
-				PDEPluginImages.DESC_PSEARCH_OBJ));
-		fRichText.addHyperlinkListener(new HyperlinkAdapter() {
-			public void linkActivated(HyperlinkEvent e) {
-				IBaseModel model = getPage().getPDEEditor().getAggregateModel();
-				String pointID = null;
-				IPluginBase base = ((IPluginModelBase) model).getPluginBase();
-				String pluginID = base.getId();
-				String schemaVersion = base.getSchemaVersion();
-				if (schemaVersion != null && Double.parseDouble(schemaVersion) >= 3.2) {
-					if (fInput.getId().indexOf('.') != -1)
-						pointID = fInput.getId();
-				}
-				if (pointID == null)
-					pointID = pluginID + "." + fInput.getId(); //$NON-NLS-1$
-				if (e.getHref().equals("search")) { //$NON-NLS-1$
-					new FindReferencesAction(fInput, pluginID).run();
-				} else if (e.getHref().equals("open")) { //$NON-NLS-1$
-					OpenSchemaAction action = new OpenSchemaAction();
-					action.setInput(pointID);
-					action.setEnabled(true);
-					action.run();
-				} else {
-					new ShowDescriptionAction(pointID).run();
-				}
-			}
-		});
-
-		fIdEntry.setEditable(isEditable());
-		fNameEntry.setEditable(isEditable());
-		fSchemaEntry.setEditable(isEditable());
-		toolkit.paintBordersFor(client);
-		section.setClient(client);
-		IPluginModelBase model = (IPluginModelBase) getPage().getModel();
-		model.addModelChangedListener(this);
-		markDetailsPart(section);
-	}
-
-	public void dispose() {
-		IPluginModelBase model = (IPluginModelBase) getPage().getModel();
-		if (model != null)
-			model.removeModelChangedListener(this);
-		super.dispose();
-	}
-
-	public void modelChanged(IModelChangedEvent e) {
-		if (e.getChangeType() == IModelChangedEvent.CHANGE) {
-			Object obj = e.getChangedObjects()[0];
-			if (obj.equals(fInput))
-				refresh();
-		}
-	}
-
-	private void update() {
-		fIdEntry.setValue(fInput != null && fInput.getId() != null ? fInput.getId() : "", //$NON-NLS-1$
-				true);
-		fNameEntry.setValue(fInput != null && fInput.getName() != null ? fInput.getName() : "", true); //$NON-NLS-1$
-		fSchemaEntry.setValue(fInput != null && fInput.getSchema() != null ? fInput.getSchema() : "", true); //$NON-NLS-1$
-		updateRichText();
-	}
-
-	public void cancelEdit() {
-		fIdEntry.cancelEdit();
-		fNameEntry.cancelEdit();
-		fSchemaEntry.cancelEdit();
-		updateRichText();
-		super.cancelEdit();
-	}
-
-	private void updateRichText() {
-		boolean hasSchema = fSchemaEntry.getValue().length() > 0;
-		if (hasSchema && fRichTextData == SCHEMA_RTEXT_DATA)
-			return;
-		if (!hasSchema && fRichTextData == NO_SCHEMA_RTEXT_DATA)
-			return;
-		fRichTextData = hasSchema ? SCHEMA_RTEXT_DATA : NO_SCHEMA_RTEXT_DATA;
-		fRichText.setText(fRichTextData, true, false);
-		getManagedForm().getForm().reflow(true);
-	}
-
-	private void openSchemaFile(final IFile file) {
-		final IWorkbenchWindow ww = PDEPlugin.getActiveWorkbenchWindow();
-
-		Display d = ww.getShell().getDisplay();
-		d.asyncExec(new Runnable() {
-			public void run() {
-				try {
-					String editorId = IPDEUIConstants.SCHEMA_EDITOR_ID;
-					ww.getActivePage().openEditor(new FileEditorInput(file), editorId);
-				} catch (PartInitException e) {
-					PDEPlugin.logException(e);
-				}
-			}
-		});
-	}
-
-	private void generateSchema() {
-		final IProject project = getPage().getPDEEditor().getCommonProject();
-		BusyIndicator.showWhile(getPage().getPartControl().getDisplay(), new Runnable() {
-			public void run() {
-				NewSchemaFileWizard wizard = new NewSchemaFileWizard(project, fInput, true);
-				WizardDialog dialog = new WizardDialog(PDEPlugin.getActiveWorkbenchShell(), wizard);
-				dialog.create();
-				SWTUtil.setDialogSize(dialog, 400, 450);
-				if (dialog.open() == Window.OK)
-					update();
-			}
-		});
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.forms.IDetailsPage#inputChanged(org.eclipse.jface.viewers.IStructuredSelection)
-	 */
-	public void selectionChanged(IFormPart masterPart, ISelection selection) {
-		IStructuredSelection ssel = (IStructuredSelection) selection;
-		if (ssel.size() == 1) {
-			fInput = (IPluginExtensionPoint) ssel.getFirstElement();
-		} else
-			fInput = null;
-		update();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.forms.IDetailsPage#commit()
-	 */
-	public void commit(boolean onSave) {
-		fIdEntry.commit();
-		fNameEntry.commit();
-		fSchemaEntry.commit();
-		super.commit(onSave);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.forms.IDetailsPage#setFocus()
-	 */
-	public void setFocus() {
-		fIdEntry.getText().setFocus();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.forms.IDetailsPage#refresh()
-	 */
-	public void refresh() {
-		update();
-		super.refresh();
-	}
-
-}
+package org.eclipse.pde.internal.ui.editor.plugin;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.pde.core.IBaseModel;
+import org.eclipse.pde.core.IModelChangedEvent;
+import org.eclipse.pde.core.plugin.*;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.schema.Schema;
+import org.eclipse.pde.internal.core.schema.SchemaDescriptor;
+import org.eclipse.pde.internal.ui.*;
+import org.eclipse.pde.internal.ui.editor.*;
+import org.eclipse.pde.internal.ui.editor.actions.OpenSchemaAction;
+import org.eclipse.pde.internal.ui.parts.FormEntry;
+import org.eclipse.pde.internal.ui.search.FindReferencesAction;
+import org.eclipse.pde.internal.ui.search.ShowDescriptionAction;
+import org.eclipse.pde.internal.ui.util.SWTUtil;
+import org.eclipse.pde.internal.ui.wizards.extension.NewSchemaFileWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.*;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.eclipse.ui.dialogs.ISelectionStatusValidator;
+import org.eclipse.ui.forms.IFormPart;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.*;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.views.navigator.ResourceComparator;
+
+public class ExtensionPointDetails extends PDEDetails {
+	private IPluginExtensionPoint fInput;
+	private FormEntry fIdEntry;
+	private FormEntry fNameEntry;
+	private FormEntry fSchemaEntry;
+	private FormText fRichText;
+	private String fRichTextData;
+
+	private static final String SCHEMA_RTEXT_DATA = PDEUIMessages.ExtensionPointDetails_schemaLinks;
+	private static final String NO_SCHEMA_RTEXT_DATA = PDEUIMessages.ExtensionPointDetails_noSchemaLinks;
+
+	public ExtensionPointDetails() {
+	}
+
+	public String getContextId() {
+		return PluginInputContext.CONTEXT_ID;
+	}
+
+	public void fireSaveNeeded() {
+		markDirty();
+		getPage().getPDEEditor().fireSaveNeeded(getContextId(), false);
+	}
+
+	public PDEFormPage getPage() {
+		return (PDEFormPage) getManagedForm().getContainer();
+	}
+
+	public boolean isEditable() {
+		return getPage().getPDEEditor().getAggregateModel().isEditable();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.forms.IDetailsPage#createContents(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createContents(Composite parent) {
+		parent.setLayout(FormLayoutFactory.createDetailsGridLayout(false, 1));
+		FormToolkit toolkit = getManagedForm().getToolkit();
+		Section section = toolkit.createSection(parent, Section.DESCRIPTION | ExpandableComposite.TITLE_BAR);
+		section.clientVerticalSpacing = FormLayoutFactory.SECTION_HEADER_VERTICAL_SPACING;
+		section.setText(PDEUIMessages.ExtensionPointDetails_title);
+		section.setDescription(PDEUIMessages.ExtensionPointDetails_desc);
+		section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));
+		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		Composite client = toolkit.createComposite(section);
+		client.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 3));
+		client.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+		fIdEntry = new FormEntry(client, toolkit, PDEUIMessages.ExtensionPointDetails_id, null, false);
+		fIdEntry.setFormEntryListener(new FormEntryAdapter(this) {
+			public void textValueChanged(FormEntry entry) {
+				if (fInput != null) {
+					try {
+						fInput.setId(fIdEntry.getValue());
+					} catch (CoreException e) {
+						PDEPlugin.logException(e);
+					}
+				}
+			}
+		});
+		fNameEntry = new FormEntry(client, toolkit, PDEUIMessages.ExtensionPointDetails_name, null, false);
+		fNameEntry.setFormEntryListener(new FormEntryAdapter(this) {
+			public void textValueChanged(FormEntry entry) {
+				if (fInput != null)
+					try {
+						fInput.setName(fNameEntry.getValue());
+					} catch (CoreException e) {
+						PDEPlugin.logException(e);
+					}
+			}
+		});
+		boolean editable = getPage().getModel().isEditable();
+		fSchemaEntry = new FormEntry(client, toolkit, PDEUIMessages.ExtensionPointDetails_schema, PDEUIMessages.ExtensionPointDetails_browse, editable); // 
+		fSchemaEntry.setFormEntryListener(new FormEntryAdapter(this) {
+			public void textValueChanged(FormEntry entry) {
+				if (fInput != null) {
+					try {
+						fInput.setSchema(fSchemaEntry.getValue());
+					} catch (CoreException e) {
+						PDEPlugin.logException(e);
+					}
+					updateRichText();
+				}
+			}
+
+			public void linkActivated(HyperlinkEvent e) {
+				IProject project = getPage().getPDEEditor().getCommonProject();
+				if (fSchemaEntry.getValue() == null || fSchemaEntry.getValue().length() == 0) {
+					generateSchema();
+					return;
+				}
+				IFile file = project.getFile(fSchemaEntry.getValue());
+				if (file.exists())
+					openSchemaFile(file);
+				else
+					generateSchema();
+			}
+
+			public void browseButtonSelected(FormEntry entry) {
+				final IProject project = getPage().getPDEEditor().getCommonProject();
+				ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(PDEPlugin.getActiveWorkbenchShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider());
+				dialog.setTitle(PDEUIMessages.ManifestEditor_ExtensionPointDetails_schemaLocation_title);
+				dialog.setMessage(PDEUIMessages.ManifestEditor_ExtensionPointDetails_schemaLocation_desc);
+				dialog.setDoubleClickSelects(false);
+				dialog.setAllowMultiple(false);
+				dialog.addFilter(new ViewerFilter() {
+					public boolean select(Viewer viewer, Object parent, Object element) {
+						if (element instanceof IFile) {
+							String ext = ((IFile) element).getFullPath().getFileExtension();
+							return "exsd".equals(ext) || "mxsd".equals(ext); //$NON-NLS-1$ //$NON-NLS-2$
+						} else if (element instanceof IContainer) { // i.e. IProject, IFolder
+							try {
+								IResource[] resources = ((IContainer) element).members();
+								for (int i = 0; i < resources.length; i++) {
+									if (select(viewer, parent, resources[i]))
+										return true;
+								}
+							} catch (CoreException e) {
+								PDEPlugin.logException(e);
+							}
+						}
+						return false;
+					}
+				});
+				dialog.setValidator(new ISelectionStatusValidator() {
+					public IStatus validate(Object[] selection) {
+						IPluginModelBase model = (IPluginModelBase) getPage().getPDEEditor().getAggregateModel();
+						String pluginName = model.getPluginBase().getId();
+
+						if (selection == null || selection.length != 1 || !(selection[0] instanceof IFile))
+							return new Status(IStatus.ERROR, pluginName, IStatus.ERROR, PDEUIMessages.ManifestEditor_ExtensionPointDetails_validate_errorStatus, null);
+						IFile file = (IFile) selection[0];
+						String ext = file.getFullPath().getFileExtension();
+						if ("exsd".equals(ext) || "mxsd".equals(ext)) //$NON-NLS-1$ //$NON-NLS-2$
+							return new Status(IStatus.OK, pluginName, IStatus.OK, "", null); //$NON-NLS-1$
+						return new Status(IStatus.ERROR, pluginName, IStatus.ERROR, PDEUIMessages.ManifestEditor_ExtensionPointDetails_validate_errorStatus, null);
+					}
+				});
+				dialog.setDoubleClickSelects(true);
+				dialog.setStatusLineAboveButtons(true);
+				dialog.setInput(project);
+				dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
+				String filePath = fSchemaEntry.getValue();
+				if (filePath != null && filePath.length() != 0 && project.exists(new Path(filePath)))
+					dialog.setInitialSelection(project.getFile(new Path(filePath)));
+				else
+					dialog.setInitialSelection(null);
+				dialog.create();
+				PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(), IHelpContextIds.BROWSE_EXTENSION_POINTS_SCHEMAS);
+				if (dialog.open() == Window.OK) {
+					Object[] elements = dialog.getResult();
+					if (elements.length > 0) {
+						IResource elem = (IResource) elements[0];
+						fSchemaEntry.setValue(elem.getProjectRelativePath().toString());
+					}
+				}
+			}
+		});
+		createSpacer(toolkit, client, 2);
+
+		Composite container = toolkit.createComposite(parent, SWT.NONE);
+		container.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 1));
+		container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		fRichText = toolkit.createFormText(container, true);
+		fRichText.setImage("open", PDEPlugin.getDefault().getLabelProvider().get( //$NON-NLS-1$
+				PDEPluginImages.DESC_SCHEMA_OBJ));
+		fRichText.setImage("desc", PDEPlugin.getDefault().getLabelProvider().get( //$NON-NLS-1$
+				PDEPluginImages.DESC_DOC_SECTION_OBJ));
+		fRichText.setImage("search", PDEPlugin.getDefault().getLabelProvider().get( //$NON-NLS-1$
+				PDEPluginImages.DESC_PSEARCH_OBJ));
+		fRichText.addHyperlinkListener(new HyperlinkAdapter() {
+			public void linkActivated(HyperlinkEvent e) {
+				IBaseModel model = getPage().getPDEEditor().getAggregateModel();
+				String pointID = null;
+				IPluginBase base = ((IPluginModelBase) model).getPluginBase();
+				String pluginID = base.getId();
+				String schemaVersion = base.getSchemaVersion();
+				if (schemaVersion != null && Double.parseDouble(schemaVersion) >= 3.2) {
+					if (fInput.getId().indexOf('.') != -1)
+						pointID = fInput.getId();
+				}
+				if (pointID == null)
+					pointID = pluginID + "." + fInput.getId(); //$NON-NLS-1$
+				IPluginExtensionPoint extPoint = PDECore.getDefault().getExtensionsRegistry().findExtensionPoint(pointID);
+				if (e.getHref().equals("search")) { //$NON-NLS-1$
+					new FindReferencesAction(fInput, pluginID).run();
+				} else if (e.getHref().equals("open")) { //$NON-NLS-1$					
+					if (extPoint == null) {
+						IProject project = getPage().getPDEEditor().getCommonProject();
+						IFile file = project.getFile(fSchemaEntry.getValue());
+						if (file.exists())
+							openSchemaFile(file);
+						else
+							generateSchema();
+						return;
+					}
+					OpenSchemaAction action = new OpenSchemaAction();
+					action.setInput(pointID);
+					action.setEnabled(true);
+					action.run();
+				} else {
+					if (extPoint == null) {
+						IProject project = getPage().getPDEEditor().getCommonProject();
+						IFile file = project.getFile(fSchemaEntry.getValue());
+						URL url;
+						try {
+							url = file.getLocationURI().toURL();
+						} catch (MalformedURLException e1) {
+							return;
+						}
+						SchemaDescriptor schemaDesc = new SchemaDescriptor(pointID, url);
+						Schema schema = new Schema(schemaDesc, url, false);
+						schema.setPluginId(pluginID);
+						schema.setPointId(fInput.getId());
+						schema.setName(fNameEntry.getValue());
+						new ShowDescriptionAction(schema).run();
+						return;
+					}
+					new ShowDescriptionAction(pointID).run();
+				}
+			}
+		});
+
+		fIdEntry.setEditable(isEditable());
+		fNameEntry.setEditable(isEditable());
+		fSchemaEntry.setEditable(isEditable());
+		toolkit.paintBordersFor(client);
+		section.setClient(client);
+		IPluginModelBase model = (IPluginModelBase) getPage().getModel();
+		model.addModelChangedListener(this);
+		markDetailsPart(section);
+	}
+
+	public void dispose() {
+		IPluginModelBase model = (IPluginModelBase) getPage().getModel();
+		if (model != null)
+			model.removeModelChangedListener(this);
+		super.dispose();
+	}
+
+	public void modelChanged(IModelChangedEvent e) {
+		if (e.getChangeType() == IModelChangedEvent.CHANGE) {
+			Object obj = e.getChangedObjects()[0];
+			if (obj.equals(fInput))
+				refresh();
+		}
+	}
+
+	private void update() {
+		fIdEntry.setValue(fInput != null && fInput.getId() != null ? fInput.getId() : "", //$NON-NLS-1$
+				true);
+		fNameEntry.setValue(fInput != null && fInput.getName() != null ? fInput.getName() : "", true); //$NON-NLS-1$
+		fSchemaEntry.setValue(fInput != null && fInput.getSchema() != null ? fInput.getSchema() : "", true); //$NON-NLS-1$
+		updateRichText();
+	}
+
+	public void cancelEdit() {
+		fIdEntry.cancelEdit();
+		fNameEntry.cancelEdit();
+		fSchemaEntry.cancelEdit();
+		updateRichText();
+		super.cancelEdit();
+	}
+
+	private void updateRichText() {
+		boolean hasSchema = fSchemaEntry.getValue().length() > 0;
+		if (hasSchema && fRichTextData == SCHEMA_RTEXT_DATA)
+			return;
+		if (!hasSchema && fRichTextData == NO_SCHEMA_RTEXT_DATA)
+			return;
+		fRichTextData = hasSchema ? SCHEMA_RTEXT_DATA : NO_SCHEMA_RTEXT_DATA;
+		fRichText.setText(fRichTextData, true, false);
+		getManagedForm().getForm().reflow(true);
+	}
+
+	private void openSchemaFile(final IFile file) {
+		final IWorkbenchWindow ww = PDEPlugin.getActiveWorkbenchWindow();
+
+		Display d = ww.getShell().getDisplay();
+		d.asyncExec(new Runnable() {
+			public void run() {
+				try {
+					String editorId = IPDEUIConstants.SCHEMA_EDITOR_ID;
+					ww.getActivePage().openEditor(new FileEditorInput(file), editorId);
+				} catch (PartInitException e) {
+					PDEPlugin.logException(e);
+				}
+			}
+		});
+	}
+
+	private void generateSchema() {
+		final IProject project = getPage().getPDEEditor().getCommonProject();
+		BusyIndicator.showWhile(getPage().getPartControl().getDisplay(), new Runnable() {
+			public void run() {
+				NewSchemaFileWizard wizard = new NewSchemaFileWizard(project, fInput, true);
+				WizardDialog dialog = new WizardDialog(PDEPlugin.getActiveWorkbenchShell(), wizard);
+				dialog.create();
+				SWTUtil.setDialogSize(dialog, 400, 450);
+				if (dialog.open() == Window.OK)
+					update();
+			}
+		});
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.forms.IDetailsPage#inputChanged(org.eclipse.jface.viewers.IStructuredSelection)
+	 */
+	public void selectionChanged(IFormPart masterPart, ISelection selection) {
+		IStructuredSelection ssel = (IStructuredSelection) selection;
+		if (ssel.size() == 1) {
+			fInput = (IPluginExtensionPoint) ssel.getFirstElement();
+		} else
+			fInput = null;
+		update();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.forms.IDetailsPage#commit()
+	 */
+	public void commit(boolean onSave) {
+		fIdEntry.commit();
+		fNameEntry.commit();
+		fSchemaEntry.commit();
+		super.commit(onSave);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.forms.IDetailsPage#setFocus()
+	 */
+	public void setFocus() {
+		fIdEntry.getText().setFocus();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.forms.IDetailsPage#refresh()
+	 */
+	public void refresh() {
+		update();
+		super.refresh();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointsSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointsSection.java
index c16fa49..104cb60 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointsSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionPointsSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,7 +59,7 @@ public class ExtensionPointsSection extends TableSection {
 	}
 
 	public ExtensionPointsSection(PDEFormPage page, Composite parent) {
-		super(page, parent, ExpandableComposite.TITLE_BAR | Section.DESCRIPTION, new String[] {PDEUIMessages.ManifestEditor_DetailExtensionPointSection_new});
+		super(page, parent, ExpandableComposite.TITLE_BAR | Section.DESCRIPTION, new String[] {PDEUIMessages.ManifestEditor_DetailExtensionPointSection_new, PDEUIMessages.Actions_delete_label});
 		getSection().setText(PDEUIMessages.ManifestEditor_DetailExtensionPointSection_title);
 		getSection().setDescription(PDEUIMessages.ExtensionPointsSection_sectionDescAllExtensionPoints);
 		fHandleDefaultButton = false;
@@ -207,6 +207,8 @@ public class ExtensionPointsSection extends TableSection {
 	protected void buttonSelected(int index) {
 		if (index == 0)
 			handleNew();
+		else if (index == 1)
+			handleDelete();
 	}
 
 	protected void handleDoubleClick(IStructuredSelection selection) {
@@ -238,11 +240,13 @@ public class ExtensionPointsSection extends TableSection {
 					newSelection = new StructuredSelection(points[index]);
 				try {
 					String schema = ep.getSchema();
-					IProject project = ep.getModel().getUnderlyingResource().getProject();
-					IFile schemaFile = project.getFile(schema);
-					if (schemaFile.exists())
-						if (MessageDialog.openQuestion(getSection().getShell(), PDEUIMessages.ExtensionPointsSection_title, NLS.bind(PDEUIMessages.ExtensionPointsSection_message1, schemaFile.getProjectRelativePath().toString())))
-							schemaFile.delete(true, true, new NullProgressMonitor());
+					if (schema != null && schema.length() > 0) {
+						IProject project = ep.getModel().getUnderlyingResource().getProject();
+						IFile schemaFile = project.getFile(schema);
+						if (schemaFile != null && schemaFile.exists())
+							if (MessageDialog.openQuestion(getSection().getShell(), PDEUIMessages.ExtensionPointsSection_title, NLS.bind(PDEUIMessages.ExtensionPointsSection_message1, schemaFile.getProjectRelativePath().toString())))
+								schemaFile.delete(true, true, new NullProgressMonitor());
+					}
 					plugin.remove(ep);
 					if (newSelection != null)
 						pointTable.setSelection(newSelection);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java
index e1a8417..0c94ab7 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2010 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ import org.eclipse.pde.internal.core.*;
 import org.eclipse.pde.internal.core.bundle.BundlePluginBase;
 import org.eclipse.pde.internal.core.ibundle.*;
 import org.eclipse.pde.internal.core.project.PDEProject;
+import org.eclipse.pde.internal.core.target.provisional.NameVersionDescriptor;
 import org.eclipse.pde.internal.core.text.bundle.*;
 import org.eclipse.pde.internal.core.util.PDEJavaHelper;
 import org.eclipse.pde.internal.ui.*;
@@ -425,6 +426,7 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 		if (dialog.open() == Window.OK) {
 			Object[] selected = dialog.getResult();
 			if (fHeader != null) {
+				Set names = new HashSet(); // set of String names, do not allow the same package to be added twice
 				for (int i = 0; i < selected.length; i++) {
 					ImportPackageObject impObject = null;
 					if (selected[i] instanceof ImportItemWrapper)
@@ -440,7 +442,7 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 						ExportPackageObject epo = (ExportPackageObject) selected[i];
 						impObject = new ImportPackageObject(fHeader, epo.getName(), epo.getVersion(), getVersionAttribute());
 					}
-					if (impObject != null)
+					if (impObject != null && names.add(impObject.getName()))
 						fHeader.addPackage(impObject);
 				}
 			} else {
@@ -476,10 +478,15 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 		ArrayList elements = new ArrayList();
 		ArrayList conditional = new ArrayList();
 		IPluginModelBase[] models = PluginRegistry.getActiveModels();
-		Set names = new HashSet();
+		Set nameVersions = new HashSet(); // Set of NameVersionDescriptors, used to remove duplicate entries
 
 		for (int i = 0; i < models.length; i++) {
 			BundleDescription desc = models[i].getBundleDescription();
+
+			// If the current model is a fragment, it can export packages only if its parent has hasExtensibleAPI set
+			if (isFragmentThatCannotExportPackages(models[i]))
+				continue;
+
 			String id = desc == null ? null : desc.getSymbolicName();
 			if (id == null || forbidden.contains(id))
 				continue;
@@ -487,9 +494,10 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 			ExportPackageDescription[] exported = desc.getExportPackages();
 			for (int j = 0; j < exported.length; j++) {
 				String name = exported[j].getName();
+				NameVersionDescriptor nameVersion = new NameVersionDescriptor(exported[j].getName(), exported[j].getVersion().toString(), NameVersionDescriptor.TYPE_PACKAGE);
 				if (("java".equals(name) || name.startsWith("java.")) && !allowJava) //$NON-NLS-1$ //$NON-NLS-2$
 					continue;
-				if (names.add(name) && (fHeader == null || !fHeader.hasPackage(name)))
+				if (nameVersions.add(nameVersion) && (fHeader == null || !fHeader.hasPackage(name)))
 					elements.add(new ImportItemWrapper(exported[j]));
 			}
 			IPluginModelBase model = (IPluginModelBase) getPage().getPDEEditor().getAggregateModel();
@@ -501,7 +509,9 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 						ExportPackageObject[] pkgs = header.getPackages();
 						for (int j = 0; j < pkgs.length; j++) {
 							String name = pkgs[j].getName();
-							if (names.add(name) && (fHeader == null || !fHeader.hasPackage(name)))
+							String version = pkgs[j].getVersion();
+							NameVersionDescriptor nameVersion = new NameVersionDescriptor(name, version, NameVersionDescriptor.TYPE_PACKAGE);
+							if (nameVersions.add(nameVersion) && (fHeader == null || !fHeader.hasPackage(name)))
 								elements.add(new ImportItemWrapper(pkgs[j]));
 						}
 					}
@@ -516,6 +526,11 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 				IProject project = resource != null ? resource.getProject() : null;
 				if (project == null || !project.hasNature(JavaCore.NATURE_ID) || WorkspaceModelManager.isBinaryProject(project) || !PDEProject.getManifest(project).exists())
 					continue;
+
+				// If the current model is a fragment, it can export packages only if its parent has hasExtensibleAPI set
+				if (isFragmentThatCannotExportPackages(models[i]))
+					continue;
+
 				IJavaProject jp = JavaCore.create(project);
 				IPackageFragmentRoot[] roots = jp.getPackageFragmentRoots();
 				for (int j = 0; j < roots.length; j++) {
@@ -524,9 +539,10 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 						for (int k = 0; k < children.length; k++) {
 							IPackageFragment f = (IPackageFragment) children[k];
 							String name = f.getElementName();
+							NameVersionDescriptor nameVersion = new NameVersionDescriptor(name, null, NameVersionDescriptor.TYPE_PACKAGE);
 							if (name.equals("")) //$NON-NLS-1$
 								name = "."; //$NON-NLS-1$
-							if ((f.hasChildren() || f.getNonJavaResources().length > 0) && names.add(name))
+							if (nameVersions.add(nameVersion) && (f.hasChildren() || f.getNonJavaResources().length > 0))
 								conditional.add(new ImportItemWrapper(f));
 						}
 					}
@@ -538,6 +554,39 @@ public class ImportPackageSection extends TableSection implements IModelChangedL
 		dialog.setConditionalElements(conditional.toArray());
 	}
 
+	/**
+	 * Returns whether the provided plug-in model is a fragment that cannot export
+	 * its packages to other bundles (<code>hasExtensibleAPI</code> is not set).  Will
+	 * return false if the model does not represent a fragment.
+	 * 
+	 * @param fragment the model to test 
+	 * @return <code>true</code> if the model is a fragment that cannot export packages
+	 */
+	private boolean isFragmentThatCannotExportPackages(IPluginModelBase fragment) {
+		if (!fragment.isFragmentModel()) {
+			// Not a fragment
+			return false;
+		}
+		BundleDescription bundleDescription = fragment.getBundleDescription();
+		if (bundleDescription == null) {
+			// Classic plugin, do not change the behavior
+			return false;
+		}
+		HostSpecification hostSpec = bundleDescription.getHost();
+		if (hostSpec == null) {
+			// Not a fragment
+			return false;
+		}
+		BundleDescription[] hosts = hostSpec.getHosts();
+		// At least one of fragment hosts has to have extensible API
+		for (int i = 0; i < hosts.length; i++) {
+			if (ClasspathUtilCore.hasExtensibleAPI(PluginRegistry.findModel(hosts[i])))
+				return false;
+		}
+		// Fragment that cannot export
+		return true;
+	}
+
 	public void modelChanged(IModelChangedEvent event) {
 		if (event.getChangeType() == IModelChangedEvent.WORLD_CHANGED) {
 			fHeader = null;
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java
index a027aca..0b5855a 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java
@@ -66,6 +66,10 @@ public class ManifestEditor extends PDELauncherFormEditor implements IShowEditor
 		return openPluginEditor(PluginRegistry.findModel(id));
 	}
 
+	public static IEditorPart openPluginEditor(BundleDescription bd) {
+		return openPluginEditor(PluginRegistry.findModel(bd));
+	}
+
 	public static IEditorPart openPluginEditor(IPluginModelBase model) {
 		if (model == null) {
 			Display.getDefault().beep();
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditorContributor.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditorContributor.java
index 5cdf4de..17442d5 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditorContributor.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditorContributor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2008 IBM Corporation and others.
+ *  Copyright (c) 2003, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestSourcePage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestSourcePage.java
index a47efc5..a77b02d 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestSourcePage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestSourcePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -203,7 +203,10 @@ public class ManifestSourcePage extends XMLSourcePage {
 	}
 
 	public IDocumentRange getRangeElement(int offset, boolean searchChildren) {
-		IPluginBase base = ((IPluginModelBase) getInputContext().getModel()).getPluginBase();
+		IPluginBase base = ((IPluginModelBase) getInputContext().getModel()).getPluginBase(false);
+		if (base == null)
+			return null;
+
 		IDocumentRange node = findNode(base.getLibraries(), offset, searchChildren);
 		if (node == null)
 			node = findNode(base.getImports(), offset, searchChildren);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java
index 797efce..ea931e2 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -17,12 +17,17 @@ import org.eclipse.pde.core.build.*;
 import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.internal.core.build.BuildObject;
 import org.eclipse.pde.internal.core.build.IBuildObject;
+import org.eclipse.pde.internal.core.bundle.BundleObject;
+import org.eclipse.pde.internal.core.ibundle.IBundleModel;
+import org.eclipse.pde.internal.core.ibundle.IManifestHeader;
 import org.eclipse.pde.internal.core.plugin.*;
 import org.eclipse.pde.internal.core.plugin.PluginAttribute;
+import org.eclipse.pde.internal.core.text.bundle.*;
 import org.eclipse.pde.internal.core.text.plugin.*;
 import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.editor.ModelUndoManager;
 import org.eclipse.pde.internal.ui.editor.PDEFormEditor;
+import org.osgi.framework.Constants;
 
 public class PluginUndoManager extends ModelUndoManager {
 
@@ -79,10 +84,14 @@ public class PluginUndoManager extends ModelUndoManager {
 	private void executeAdd(IModelChangeProvider model, Object[] elements) {
 		IPluginBase pluginBase = null;
 		IBuild build = null;
-		if (model instanceof IPluginModelBase)
+		IBundleModel bundleModel = null;
+		if (model instanceof IPluginModelBase) {
 			pluginBase = ((IPluginModelBase) model).getPluginBase();
-		if (model instanceof IBuildModel)
+		} else if (model instanceof IBuildModel) {
 			build = ((IBuildModel) model).getBuild();
+		} else if (model instanceof IBundleModel) {
+			bundleModel = (IBundleModel) model;
+		}
 
 		try {
 			for (int i = 0; i < elements.length; i++) {
@@ -107,6 +116,13 @@ public class PluginUndoManager extends ModelUndoManager {
 				} else if (element instanceof IBuildEntry) {
 					IBuildEntry e = (IBuildEntry) element;
 					build.add(e);
+				} else if (element instanceof BundleObject) {
+					if (element instanceof ImportPackageObject) {
+						IManifestHeader header = bundleModel.getBundle().getManifestHeader(Constants.IMPORT_PACKAGE);
+						if (header != null && header instanceof ImportPackageHeader) {
+							((ImportPackageHeader) header).addPackage((PackageObject) element);
+						}
+					}
 				}
 			}
 		} catch (CoreException e) {
@@ -117,10 +133,14 @@ public class PluginUndoManager extends ModelUndoManager {
 	private void executeRemove(IModelChangeProvider model, Object[] elements) {
 		IPluginBase pluginBase = null;
 		IBuild build = null;
-		if (model instanceof IPluginModelBase)
+		IBundleModel bundleModel = null;
+		if (model instanceof IPluginModelBase) {
 			pluginBase = ((IPluginModelBase) model).getPluginBase();
-		if (model instanceof IBuildModel)
+		} else if (model instanceof IBuildModel) {
 			build = ((IBuildModel) model).getBuild();
+		} else if (model instanceof IBundleModel) {
+			bundleModel = (IBundleModel) model;
+		}
 
 		try {
 			for (int i = 0; i < elements.length; i++) {
@@ -145,6 +165,13 @@ public class PluginUndoManager extends ModelUndoManager {
 				} else if (element instanceof IBuildEntry) {
 					IBuildEntry e = (IBuildEntry) element;
 					build.remove(e);
+				} else if (element instanceof BundleObject) {
+					if (element instanceof ImportPackageObject) {
+						IManifestHeader header = bundleModel.getBundle().getManifestHeader(Constants.IMPORT_PACKAGE);
+						if (header != null && header instanceof ImportPackageHeader) {
+							((ImportPackageHeader) header).removePackage((PackageObject) element);
+						}
+					}
 				}
 			}
 		} catch (CoreException e) {
@@ -186,6 +213,11 @@ public class PluginUndoManager extends ModelUndoManager {
 			PluginObjectNode node = (PluginObjectNode) element;
 			String newString = newValue != null ? newValue.toString() : null;
 			node.setXMLAttribute(propertyName, newString);
+		} else if (element instanceof BundleObject) {
+			if (element instanceof ImportPackageObject) {
+				ImportPackageObject ipObj = (ImportPackageObject) element;
+				ipObj.restoreProperty(propertyName, oldValue, newValue);
+			}
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/RequiresSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/RequiresSection.java
index 9e1900f..e0efed5 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/RequiresSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/RequiresSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.editor.plugin;
 
-import org.eclipse.pde.internal.ui.dialogs.PluginSelectionDialog;
-
 import java.io.*;
 import java.util.*;
 import org.eclipse.core.runtime.CoreException;
@@ -30,6 +28,7 @@ import org.eclipse.pde.internal.core.text.plugin.PluginBaseNode;
 import org.eclipse.pde.internal.core.text.plugin.PluginDocumentNodeFactory;
 import org.eclipse.pde.internal.core.util.VersionUtil;
 import org.eclipse.pde.internal.ui.*;
+import org.eclipse.pde.internal.ui.dialogs.PluginSelectionDialog;
 import org.eclipse.pde.internal.ui.editor.FormLayoutFactory;
 import org.eclipse.pde.internal.ui.editor.TableSection;
 import org.eclipse.pde.internal.ui.editor.actions.SortAction;
@@ -44,7 +43,7 @@ import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.graphics.Cursor;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.*;
 import org.eclipse.ui.actions.ActionContext;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.forms.widgets.FormToolkit;
@@ -336,6 +335,12 @@ public class RequiresSection extends TableSection implements IModelChangedListen
 			manager.add(new Separator());
 			manager.add(fPropertiesAction);
 		}
+		manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+	}
+
+	protected void registerPopupMenu(MenuManager popupMenuManager) {
+		IEditorSite site = (IEditorSite) getPage().getSite();
+		site.registerContextMenu(site.getId() + ".requires", popupMenuManager, fViewerPart.getViewer(), false); //$NON-NLS-1$
 	}
 
 	private void handleOpen(ISelection sel) {
@@ -354,19 +359,21 @@ public class RequiresSection extends TableSection implements IModelChangedListen
 
 	private void handleRemove() {
 		IStructuredSelection ssel = (IStructuredSelection) fImportViewer.getSelection();
-		IPluginModelBase model = (IPluginModelBase) getPage().getModel();
-		IPluginBase pluginBase = model.getPluginBase();
-		IPluginImport[] imports = new IPluginImport[ssel.size()];
-		int i = 0;
-		for (Iterator iter = ssel.iterator(); iter.hasNext(); i++)
-			imports[i] = ((ImportObject) iter.next()).getImport();
+		if (!ssel.isEmpty()) {
+			IPluginModelBase model = (IPluginModelBase) getPage().getModel();
+			IPluginBase pluginBase = model.getPluginBase();
+			IPluginImport[] imports = new IPluginImport[ssel.size()];
+			int i = 0;
+			for (Iterator iter = ssel.iterator(); iter.hasNext(); i++)
+				imports[i] = ((ImportObject) iter.next()).getImport();
 
-		try {
-			removeImports(pluginBase, imports);
-		} catch (CoreException e) {
-			PDEPlugin.logException(e);
+			try {
+				removeImports(pluginBase, imports);
+			} catch (CoreException e) {
+				PDEPlugin.logException(e);
+			}
+			updateButtons();
 		}
-		updateButtons();
 	}
 
 	private void removeImports(IPluginBase base, IPluginImport[] imports) throws CoreException {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/rows/ClassAttributeRow.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/rows/ClassAttributeRow.java
index 0b1583e..1e81815 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/rows/ClassAttributeRow.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/rows/ClassAttributeRow.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,6 +92,9 @@ public class ClassAttributeRow extends ButtonAttributeRow {
 		if (index > 0)
 			// if the schema specifies a class and interface, then show only types that extend the class (currently can't search on both).
 			superName = superName.substring(0, index);
+		else if (index == 0)
+			// if only an interfaces was given (":MyInterface") use this
+			superName = superName.substring(1);
 		String filter = text.getText();
 		if (filter.length() == 0 && superName != null)
 			filter = "**"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationPage.java
index 57b92fe..697b18d 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ConfigurationPage.java
@@ -1,12 +1,13 @@
 /*******************************************************************************
- * Copyright (c) 2008 Code 9 Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *     Code 9 Corporation - initial API and implementation
+ *     IBM Corporation - initial API and implementation
+ *     Code 9 Corporation - additional enhancements
  *     Bartosz Michalik (bartosz.michalik at gmail.com)
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.editor.product;
@@ -22,7 +23,12 @@ import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 
 /**
- * @author Bartosz Michalik
+ * Configuration page of the product editor
+ * 
+ * @see ProductEditor
+ * @see ConfigurationSection
+ * @see PluginConfigurationSection
+ * @see PropertiesSection
  */
 public class ConfigurationPage extends PDEFormPage {
 	public static final String PLUGIN_ID = "plugin-configuration"; //$NON-NLS-1$
@@ -51,8 +57,10 @@ public class ConfigurationPage extends PDEFormPage {
 	private void fillBody(IManagedForm managedForm, FormToolkit toolkit) {
 		Composite body = managedForm.getForm().getBody();
 		body.setLayout(FormLayoutFactory.createFormGridLayout(false, 2));
-		if (TargetPlatformHelper.getTargetVersion() > 3.4)
-			managedForm.addPart(new PluginConfigurationSection(this, body));
 		managedForm.addPart(new ConfigurationSection(this, body));
+		if (TargetPlatformHelper.getTargetVersion() > 3.4) {
+			managedForm.addPart(new PluginConfigurationSection(this, body));
+		}
+		managedForm.addPart(new PropertiesSection(this, body));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/GeneralInfoSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/GeneralInfoSection.java
index abc30ea..bedf51d 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/GeneralInfoSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/GeneralInfoSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 EclipseSource Corporation and others.
+ * Copyright (c) 2009, 2011 EclipseSource Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.editor.product;
 
+import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.pde.core.IModelChangedEvent;
 import org.eclipse.pde.internal.core.iproduct.IProduct;
 import org.eclipse.pde.internal.core.iproduct.IProductModel;
@@ -24,6 +25,7 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.forms.IMessageManager;
 import org.eclipse.ui.forms.widgets.*;
 
 public class GeneralInfoSection extends PDESection {
@@ -94,6 +96,7 @@ public class GeneralInfoSection extends PDESection {
 		fIdEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) {
 			public void textValueChanged(FormEntry entry) {
 				getProduct().setId(entry.getValue().trim());
+				validateProductId();
 			}
 		});
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
@@ -101,6 +104,17 @@ public class GeneralInfoSection extends PDESection {
 		gd.horizontalSpan = 2;
 		fIdEntry.getText().setLayoutData(gd);
 		fIdEntry.setEditable(isEditable());
+		validateProductId();
+	}
+
+	private void validateProductId() {
+		String pluginId = getProduct().getDefiningPluginId();
+		IMessageManager messageManager = getManagedForm().getForm().getMessageManager();
+		if (pluginId != null && pluginId.equals(getProduct().getId())) {
+			messageManager.addMessage(PDEUIMessages.GeneralInfoSection_IdWarning, PDEUIMessages.GeneralInfoSection_IdWarning, null, IMessageProvider.WARNING);
+		} else {
+			messageManager.removeMessage(PDEUIMessages.GeneralInfoSection_IdWarning);
+		}
 	}
 
 	private void createVersionEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginConfigurationSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginConfigurationSection.java
index 6d7d66f..b89d23e 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginConfigurationSection.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginConfigurationSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 Code 9 Corporation and others.
+ * Copyright (c) 2008, 2010 Code 9 Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -130,7 +130,7 @@ public class PluginConfigurationSection extends TableSection {
 		sectionData.horizontalSpan = 2;
 		section.setLayoutData(sectionData);
 		Composite container = createClientContainer(section, 3, toolkit);
-		createViewerPartControl(container, SWT.SINGLE, 3, toolkit);
+		createViewerPartControl(container, SWT.SINGLE | SWT.FULL_SELECTION, 3, toolkit);
 		fConfigurationsTable = getTablePart().getTableViewer();
 
 		final Table table = fConfigurationsTable.getTable();
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PropertiesSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PropertiesSection.java
new file mode 100644
index 0000000..4d44cb8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PropertiesSection.java
@@ -0,0 +1,375 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implemntation
+ *******************************************************************************/
+package org.eclipse.pde.internal.ui.editor.product;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.StatusDialog;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.core.IModelChangedEvent;
+import org.eclipse.pde.internal.core.iproduct.*;
+import org.eclipse.pde.internal.ui.*;
+import org.eclipse.pde.internal.ui.editor.PDEFormPage;
+import org.eclipse.pde.internal.ui.editor.TableSection;
+import org.eclipse.pde.internal.ui.parts.TablePart;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * Displays a list of product properties set in the product configuration.  The properties
+ * can be added, edited and removed.
+ * 
+ * @see IConfigurationProperty
+ * @see ConfigurationPage
+ * @see ProductEditor
+ * 
+ * @since 3.7
+ */
+public class PropertiesSection extends TableSection {
+
+	private class ContentProvider implements IStructuredContentProvider {
+
+		ContentProvider() {
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(Object inputElement) {
+			if (inputElement instanceof IProduct) {
+				return ((IProduct) inputElement).getConfigurationProperties();
+			}
+			return new Object[0];
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+	}
+
+	private class LabelProvider extends PDELabelProvider {
+		public Image getColumnImage(Object obj, int index) {
+			if (index == 0)
+				return get(PDEPluginImages.DESC_PROPERTIES);
+			return null;
+		}
+
+		public String getColumnText(Object obj, int index) {
+			IConfigurationProperty configuration = (IConfigurationProperty) obj;
+			switch (index) {
+				case 0 :
+					return configuration.getName();
+					//return super.getColumnText(PluginRegistry.findModel(configuration.getId()), index);
+				case 1 :
+					return configuration.getValue();
+			}
+			return null;
+		}
+
+	}
+
+	private class PropertyDialog extends StatusDialog {
+		private Text fName;
+		private Text fValue;
+		private IConfigurationProperty fEdit;
+		private Set fExistingNames;
+
+		public PropertyDialog(Shell shell, IConfigurationProperty property, Set existingNames) {
+			super(shell);
+			fEdit = property;
+			fExistingNames = existingNames;
+			setTitle(PDEUIMessages.PropertiesSection_PropertyDialogTitle);
+		}
+
+		protected Control createDialogArea(Composite parent) {
+			Composite comp = (Composite) super.createDialogArea(parent);
+			((GridLayout) comp.getLayout()).numColumns = 2;
+			SWTFactory.createLabel(comp, PDEUIMessages.PropertiesSection_Name, 1);
+			fName = SWTFactory.createSingleText(comp, 1);
+			fName.addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					validate();
+				}
+			});
+			SWTFactory.createLabel(comp, PDEUIMessages.PropertiesSection_Value, 1);
+			fValue = SWTFactory.createSingleText(comp, 1);
+			fValue.addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					validate();
+				}
+			});
+
+			if (fEdit != null) {
+				if (fEdit.getName() != null) {
+					fName.setText(fEdit.getName());
+				}
+				if (fEdit.getValue() != null) {
+					fValue.setText(fEdit.getValue());
+				}
+			}
+
+			// Disable ok button on startup
+			updateStatus(new Status(IStatus.ERROR, IPDEUIConstants.PLUGIN_ID, "")); //$NON-NLS-1$
+
+			return comp;
+		}
+
+		protected void validate() {
+			String name = fName.getText().trim();
+			if (name.length() == 0) {
+				updateStatus(new Status(IStatus.ERROR, IPDEUIConstants.PLUGIN_ID, PDEUIMessages.PropertiesSection_ErrorPropertyNoName));
+			} else if (fExistingNames.contains(name)) {
+				updateStatus(new Status(IStatus.ERROR, IPDEUIConstants.PLUGIN_ID, NLS.bind(PDEUIMessages.PropertiesSection_ErrorPropertyExists, name)));
+			} else {
+				updateStatus(Status.OK_STATUS);
+			}
+		}
+
+		protected void okPressed() {
+			if (fEdit != null) {
+				// Product properties are stored in a map that isn't updated on edit, remove the property and add a new one
+				getProduct().removeConfigurationProperties(new IConfigurationProperty[] {fEdit});
+			}
+
+			IProductModelFactory factory = getModel().getFactory();
+			fEdit = factory.createConfigurationProperty();
+			fEdit.setName(fName.getText().trim());
+			fEdit.setValue(fValue.getText().trim());
+			getProduct().addConfigurationProperties(new IConfigurationProperty[] {fEdit});
+			super.okPressed();
+		}
+
+		protected Control createHelpControl(Composite parent) {
+			return parent;
+		}
+
+		/**
+		 * @return a configuration property containing the values set in the dialog or <code>null</code>
+		 */
+		public IConfigurationProperty getResult() {
+			return fEdit;
+		}
+
+	}
+
+	class ValueCellModifier implements ICellModifier {
+		public boolean canModify(Object element, String property) {
+			return element instanceof IConfigurationProperty;
+		}
+
+		public Object getValue(Object element, String property) {
+			return ((IConfigurationProperty) element).getValue();
+		}
+
+		public void modify(Object item, String property, Object value) {
+			Object data = ((TableItem) item).getData();
+			if (data instanceof IConfigurationProperty) {
+				String newValue = ((String) value).trim();
+				((IConfigurationProperty) data).setValue(newValue);
+				fPropertiesTable.refresh(data);
+			}
+		}
+	}
+
+	private TableViewer fPropertiesTable;
+
+	public PropertiesSection(PDEFormPage page, Composite parent) {
+		super(page, parent, Section.DESCRIPTION, getButtonLabels());
+	}
+
+	private static String[] getButtonLabels() {
+		String[] labels = new String[3];
+		labels[0] = PDEUIMessages.PropertiesSection_Add;
+		labels[1] = PDEUIMessages.PropertiesSection_Edit;
+		labels[2] = PDEUIMessages.PropertiesSection_Remove;
+		return labels;
+	}
+
+	protected void buttonSelected(int index) {
+		switch (index) {
+			case 0 :
+				handleAdd();
+				break;
+			case 1 :
+				handleEdit();
+				break;
+			case 2 :
+				handleRemove();
+				break;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.ui.editor.PDESection#createClient(org.eclipse.ui.forms.widgets.Section, org.eclipse.ui.forms.widgets.FormToolkit)
+	 */
+	protected void createClient(Section section, FormToolkit toolkit) {
+		section.setText(PDEUIMessages.PropertiesSection_PropertiesSectionTitle);
+		section.setDescription(PDEUIMessages.PropertiesSection_PropertiesSectionDescription);
+		GridData sectionData = new GridData(SWT.FILL, SWT.FILL, true, true);
+		sectionData.horizontalSpan = 2;
+		section.setLayoutData(sectionData);
+		Composite container = createClientContainer(section, 3, toolkit);
+		createViewerPartControl(container, SWT.MULTI | SWT.FULL_SELECTION, 3, toolkit);
+		fPropertiesTable = getTablePart().getTableViewer();
+		fPropertiesTable.setSorter(new ViewerSorter());
+		fPropertiesTable.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				handleEdit();
+			}
+		});
+		fPropertiesTable.getTable().addKeyListener(new KeyAdapter() {
+			public void keyReleased(KeyEvent e) {
+				if (e.keyCode == SWT.DEL) {
+					handleRemove();
+				}
+			}
+		});
+
+		final Table table = fPropertiesTable.getTable();
+
+		final TableColumn nameColumn = new TableColumn(table, SWT.LEFT);
+		nameColumn.setText(PDEUIMessages.PropertiesSection_NameColumn);
+		nameColumn.setWidth(200);
+
+		final TableColumn valueColumn = new TableColumn(table, SWT.LEFT);
+		valueColumn.setText(PDEUIMessages.PropertiesSection_ValueColumn);
+		valueColumn.setWidth(300);
+
+		TextCellEditor cellEditor = new TextCellEditor(table);
+		cellEditor.getControl().pack();
+		fPropertiesTable.setCellEditors(new CellEditor[] {null, cellEditor});
+		fPropertiesTable.setColumnProperties(new String[] {"0", "1"}); // You must enter column properties to have cell editors  //$NON-NLS-1$//$NON-NLS-2$
+		fPropertiesTable.setCellModifier(new ValueCellModifier());
+
+		table.setHeaderVisible(true);
+		toolkit.paintBordersFor(container);
+		fPropertiesTable.setLabelProvider(new LabelProvider());
+		fPropertiesTable.setContentProvider(new ContentProvider());
+		fPropertiesTable.setInput(getProduct());
+
+		section.setClient(container);
+		getModel().addModelChangedListener(this);
+		getTablePart().setButtonEnabled(0, isEditable());
+		updateButtons();
+	}
+
+	private void handleAdd() {
+		PropertyDialog dialog = new PropertyDialog(PDEPlugin.getActiveWorkbenchShell(), null, getExistingNames());
+		if (dialog.open() == Window.OK) {
+			IConfigurationProperty result = dialog.getResult();
+			if (result != null) {
+				fPropertiesTable.refresh();
+				fPropertiesTable.setSelection(new StructuredSelection(result));
+				updateButtons();
+			}
+		}
+	}
+
+	private void handleEdit() {
+		IStructuredSelection ssel = (IStructuredSelection) fPropertiesTable.getSelection();
+		if (ssel.size() > 0 && ssel.getFirstElement() instanceof IConfigurationProperty) {
+			IConfigurationProperty propertyToEdit = (IConfigurationProperty) ssel.getFirstElement();
+			Set existing = getExistingNames();
+			existing.remove(propertyToEdit.getName());
+			PropertyDialog dialog = new PropertyDialog(PDEPlugin.getActiveWorkbenchShell(), propertyToEdit, existing);
+			if (dialog.open() == Window.OK) {
+				IConfigurationProperty result = dialog.getResult();
+				if (result != null) {
+					fPropertiesTable.refresh();
+					fPropertiesTable.setSelection(new StructuredSelection(result));
+					updateButtons();
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return A list of property names currently in use by the product, possibly empty
+	 */
+	private Set getExistingNames() {
+		Set result = new HashSet();
+		IConfigurationProperty[] properties = getProduct().getConfigurationProperties();
+		for (int i = 0; i < properties.length; i++) {
+			result.add(properties[i].getName());
+		}
+		return result;
+	}
+
+	private void handleRemove() {
+		IStructuredSelection ssel = (IStructuredSelection) fPropertiesTable.getSelection();
+		if (ssel.size() > 0) {
+			Object[] objects = ssel.toArray();
+			IConfigurationProperty[] properties = new IConfigurationProperty[objects.length];
+			System.arraycopy(objects, 0, properties, 0, objects.length);
+			getProduct().removeConfigurationProperties(properties);
+			fPropertiesTable.refresh(false);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.ui.editor.TableSection#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
+	 */
+	protected void selectionChanged(IStructuredSelection selection) {
+		updateButtons();
+	}
+
+	/**
+	 * @return the product object that is currently being edited
+	 */
+	private IProduct getProduct() {
+		return getModel().getProduct();
+	}
+
+	/**
+	 * @return the product model currently being edited
+	 */
+	private IProductModel getModel() {
+		return (IProductModel) getPage().getPDEEditor().getAggregateModel();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.IPluginModelListener#modelsChanged(org.eclipse.pde.internal.core.PluginModelDelta)
+	 */
+	public void modelChanged(IModelChangedEvent e) {
+		// No need to call super, handling world changed event here
+		fPropertiesTable.setInput(getProduct());
+		fPropertiesTable.refresh();
+		updateButtons();
+	}
+
+	private void updateButtons() {
+		TablePart tablePart = getTablePart();
+		ISelection selection = getViewerSelection();
+		tablePart.setButtonEnabled(0, isEditable());
+		tablePart.setButtonEnabled(1, isEditable() && !selection.isEmpty());
+		tablePart.setButtonEnabled(2, isEditable() && !selection.isEmpty());
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/SchemaInputContext.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/SchemaInputContext.java
index fbc205c..e053d94 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/SchemaInputContext.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/schema/SchemaInputContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.pde.internal.ui.editor.schema;
 
 import java.io.*;
+import java.net.URI;
 import java.util.ArrayList;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IStorage;
@@ -73,6 +74,14 @@ public class SchemaInputContext extends XMLInputContext {
 
 	private IBaseModel createExternalModel(FileStoreEditorInput input) {
 		File file = (File) input.getAdapter(File.class);
+		if (file == null) {
+			URI uri = input.getURI();
+			if (uri != null)
+				file = new File(uri);
+			else
+				return null;
+		}
+
 		SchemaDescriptor sd = new SchemaDescriptor(file);
 
 		ISchema schema = sd.getSchema(false);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/ArgumentsSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/ArgumentsSection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/DefinitionPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/DefinitionPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/EnvironmentPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/EnvironmentPage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/EnvironmentSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/EnvironmentSection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/ImplicitDependenciesSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/ImplicitDependenciesSection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/InformationSection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/InformationSection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/JRESection.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/JRESection.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java
index 9bfea7d..801a936 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.editor.targetdefinition;
 
+import java.io.File;
 import java.util.*;
 import java.util.List;
 import org.eclipse.core.resources.*;
@@ -18,12 +19,16 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ControlContribution;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.core.target.WorkspaceFileTargetHandle;
 import org.eclipse.pde.internal.core.target.provisional.*;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.pde.internal.ui.shared.target.*;
+import org.eclipse.pde.internal.ui.wizards.exports.TargetDefinitionExportWizard;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.widgets.*;
@@ -47,9 +52,8 @@ import org.eclipse.ui.progress.UIJob;
  */
 public class TargetEditor extends FormEditor {
 
-	private ITargetDefinition fTarget;
 	private List fManagedFormPages = new ArrayList(2);
-	private FileInputListener fInputListener;
+	private InputHandler fInputHandler = new InputHandler();
 	private TargetChangedListener fTargetChangedListener;
 	private boolean fDirty;
 
@@ -66,7 +70,6 @@ public class TargetEditor extends FormEditor {
 	protected void addPages() {
 		try {
 			setActiveEditor(this);
-			setPartName(getEditorInput().getName());
 			addPage(new DefinitionPage(this));
 			addPage(new ContentPage(this));
 			addPage(new EnvironmentPage(this));
@@ -80,32 +83,28 @@ public class TargetEditor extends FormEditor {
 	 */
 	public void doSave(IProgressMonitor monitor) {
 		commitPages(true);
-		fDirty = false;
-		ITargetDefinition target = getTarget();
-		if (target != null) {
-			ITargetPlatformService service = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
-			if (service != null) {
-				try {
-					service.saveTargetDefinition(target);
-				} catch (CoreException e) {
-					PDEPlugin.log(e);
-				}
-			}
+		try {
+			fInputHandler.saveTargetDefinition();
+		} catch (CoreException e) {
+			PDEPlugin.log(e);
+			showError(PDEUIMessages.TargetEditor_3, e);
 		}
-		editorDirtyStateChanged();
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
 	 */
 	public void doSaveAs() {
+		commitPages(true);
 		ITargetDefinition target = getTarget();
-		WorkspaceFileTargetHandle currentTargetHandle = (WorkspaceFileTargetHandle) target.getHandle();
 
 		SaveAsDialog dialog = new SaveAsDialog(getSite().getShell());
 		dialog.create();
 		dialog.setMessage(PDEUIMessages.TargetEditor_0, IMessageProvider.NONE);
-		dialog.setOriginalFile(currentTargetHandle.getTargetFile());
+		if (target.getHandle() instanceof WorkspaceFileTargetHandle) {
+			WorkspaceFileTargetHandle currentTargetHandle = (WorkspaceFileTargetHandle) target.getHandle();
+			dialog.setOriginalFile(currentTargetHandle.getTargetFile());
+		}
 		dialog.open();
 
 		IPath path = dialog.getResult();
@@ -114,29 +113,24 @@ public class TargetEditor extends FormEditor {
 			return;
 		}
 		if (!"target".equalsIgnoreCase(path.getFileExtension())) { //$NON-NLS-1$
-			path.addFileExtension("target"); //$NON-NLS-1$
+			path = path.addFileExtension("target"); //$NON-NLS-1$
 		}
 
 		IWorkspace workspace = ResourcesPlugin.getWorkspace();
 		IFile file = workspace.getRoot().getFile(path);
 
 		if (target != null) {
-			try {
-				WorkspaceFileTargetHandle newFleTarget = new WorkspaceFileTargetHandle(file);
-				newFleTarget.save(target);
-			} catch (CoreException e) {
-				PDEPlugin.log(e);
+			if (workspace.validateEdit(new IFile[] {file}, getSite().getShell()).isOK()) {
+				try {
+					WorkspaceFileTargetHandle newFileTarget = new WorkspaceFileTargetHandle(file);
+					newFileTarget.save(target);
+					setInput(new FileEditorInput(file));
+				} catch (CoreException e) {
+					PDEPlugin.log(e);
+					showError(PDEUIMessages.TargetEditor_3, e);
+				}
 			}
 		}
-
-		PDEPlugin.getWorkspace().removeResourceChangeListener(fInputListener);
-		fInputListener = new FileInputListener(file);
-		PDEPlugin.getWorkspace().addResourceChangeListener(fInputListener);
-		setInput(new FileEditorInput(file));
-		setPartName(getEditorInput().getName());
-		commitPages(true);
-		fDirty = false;
-		editorDirtyStateChanged();
 	}
 
 	/* (non-Javadoc)
@@ -148,6 +142,7 @@ public class TargetEditor extends FormEditor {
 
 	protected void setDirty(boolean dirty) {
 		fDirty = fDirty || dirty;
+		editorDirtyStateChanged();
 	}
 
 	/* (non-Javadoc)
@@ -157,36 +152,23 @@ public class TargetEditor extends FormEditor {
 		return fDirty || super.isDirty();
 	}
 
-	/* (non-Javadoc)
+	/*
 	 * @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
+	 * @since 3.7
 	 */
 	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+		if (!(input instanceof IFileEditorInput) && !(input instanceof IURIEditorInput))
+			throw new PartInitException(NLS.bind(PDEUIMessages.TargetEditor_6, input.getClass().getName()));
 		super.init(site, input);
-		IFile file = null;
-		boolean validFile = true;
-		if (input instanceof IFileEditorInput) {
-			file = ((IFileEditorInput) input).getFile();
-			validFile = file.getLocation().toFile().exists();
-		} else if (input instanceof IURIEditorInput) {
-			String part = ((IURIEditorInput) input).getURI().getSchemeSpecificPart();
-			Path path = new Path(part);
-			file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
-			validFile = path.toFile().exists();
-		}
-
-		//If the file is not available or invalid, close the target editor
-		if (file == null || !validFile) {
-			Display display = getSite().getShell().getDisplay();
-			display.asyncExec(new Runnable() {
-				public void run() {
-					getSite().getPage().closeEditor(TargetEditor.this, false);
-				}
-			});
-		}
+	}
 
-		fInputListener = new FileInputListener(file);
-		PDEPlugin.getWorkspace().addResourceChangeListener(fInputListener);
-		getTargetChangedListener().contentsChanged(getTarget(), null, true, false);
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.part.EditorPart#setInput(org.eclipse.ui.IEditorInput)
+	 */
+	protected void setInput(IEditorInput input) {
+		super.setInput(input);
+		setPartName(getEditorInput().getName());
+		fInputHandler.setInput(input);
 	}
 
 	/* (non-Javadoc)
@@ -198,10 +180,7 @@ public class TargetEditor extends FormEditor {
 		getTargetChangedListener().setContentTree(null);
 		getTargetChangedListener().setLocationTree(null);
 
-		if (fInputListener != null) {
-			PDEPlugin.getWorkspace().removeResourceChangeListener(fInputListener);
-			fInputListener = null;
-		}
+		fInputHandler.dispose();
 		super.dispose();
 	}
 
@@ -210,30 +189,7 @@ public class TargetEditor extends FormEditor {
 	 * @return target model
 	 */
 	public ITargetDefinition getTarget() {
-		if (fTarget == null) {
-			ITargetPlatformService service = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
-			if (service != null) {
-				IEditorInput input = getEditorInput();
-				if (input instanceof IFileEditorInput) {
-					ITargetHandle fileHandle = service.getTarget(((IFileEditorInput) input).getFile());
-					try {
-						fTarget = fileHandle.getTargetDefinition();
-					} catch (CoreException e) {
-						PDEPlugin.log(e);
-					}
-				} else if (input instanceof IURIEditorInput) {
-					try {
-						ITargetHandle externalTarget = service.getTarget(((IURIEditorInput) input).getURI());
-						fTarget = externalTarget.getTargetDefinition();
-					} catch (CoreException e) {
-					}
-				}
-				if (fTarget == null) {
-					fTarget = service.newTarget();
-				}
-			}
-		}
-		return fTarget;
+		return fInputHandler.getTarget();
 	}
 
 	/**
@@ -250,7 +206,7 @@ public class TargetEditor extends FormEditor {
 	 * Handles the revert action
 	 */
 	public void doRevert() {
-		fTarget = null;
+		fInputHandler.reset();
 		for (Iterator iterator = fManagedFormPages.iterator(); iterator.hasNext();) {
 			IFormPart[] parts = ((IManagedForm) iterator.next()).getParts();
 			for (int i = 0; i < parts.length; i++) {
@@ -286,6 +242,7 @@ public class TargetEditor extends FormEditor {
 				return hyperlink;
 			}
 		};
+
 		final String helpContextID = contextID;
 		Action help = new Action("help") { //$NON-NLS-1$
 			public void run() {
@@ -298,9 +255,23 @@ public class TargetEditor extends FormEditor {
 		};
 		help.setToolTipText(PDEUIMessages.PDEFormPage_help);
 		help.setImageDescriptor(PDEPluginImages.DESC_HELP);
+
+		Action export = new Action("export") { //$NON-NLS-1$
+			public void run() {
+				TargetDefinitionExportWizard wizard = new TargetDefinitionExportWizard(getTarget());
+				wizard.setWindowTitle(PDEUIMessages.ExportActiveTargetDefinition);
+				WizardDialog dialog = new WizardDialog(getSite().getShell(), wizard);
+				dialog.open();
+			}
+		};
+		export.setToolTipText("Export"); //$NON-NLS-1$
+		export.setImageDescriptor(PDEPluginImages.DESC_EXPORT_TARGET_TOOL);
+
 		form.getToolBarManager().add(setAsTarget);
+		form.getToolBarManager().add(export);
 		form.getToolBarManager().add(help);
 		form.updateToolBar();
+
 	}
 
 	/**
@@ -313,43 +284,134 @@ public class TargetEditor extends FormEditor {
 	}
 
 	/**
-	 * Resource change listener for the file input to this editor in case it is deleted. 
+	 * Opens an error dialog using the editor's shell.
+	 * @param message error message to display
+	 * @param exception exception to display in details section
 	 */
-	class FileInputListener implements IResourceChangeListener, IResourceDeltaVisitor {
-		IFile fInput;
+	public void showError(final String message, final CoreException exception) {
+		Display display = getSite().getShell().getDisplay();
+		display.asyncExec(new Runnable() {
+			public void run() {
+				ErrorDialog.openError(getSite().getShell(), PDEUIMessages.TargetEditor_4, message, exception.getStatus());
+			}
+		});
+	}
 
-		public FileInputListener(IFile input) {
+	/**
+	 * The InputHandler serves as a bridge between the input file and the TargetDefinition model.
+	 */
+	private class InputHandler implements IResourceChangeListener {
+		private IEditorInput fInput;
+		private ITargetDefinition fTarget;
+		private IFile fTargetFileInWorkspace;
+		private boolean fSaving = false;
+
+		public void dispose() {
+			PDEPlugin.getWorkspace().removeResourceChangeListener(this);
+		}
+
+		public void reset() {
+			setInput(fInput);
+		}
+
+		public void setInput(IEditorInput input) {
 			fInput = input;
+			fTargetFileInWorkspace = null;
+			fTarget = null;
+			File targetFile = null;
+			if (input instanceof IFileEditorInput) {
+				fTargetFileInWorkspace = ((IFileEditorInput) input).getFile();
+				targetFile = fTargetFileInWorkspace.getLocation().toFile();
+			} else if (input instanceof IURIEditorInput) {
+				String part = ((IURIEditorInput) input).getURI().getSchemeSpecificPart();
+				Path path = new Path(part);
+				fTargetFileInWorkspace = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+				targetFile = path.toFile();
+			}
+
+			//If the file is not available or invalid, close the target editor
+			if (fTargetFileInWorkspace == null || targetFile == null || !targetFile.exists()) {
+				TargetEditor.this.close(false);
+			}
+			PDEPlugin.getWorkspace().addResourceChangeListener(this);
 		}
 
-		public void resourceChanged(IResourceChangeEvent event) {
-			if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
-				IResourceDelta delta = event.getDelta();
+		/**
+		 * @return the target definition that is the input to the editor
+		 */
+		public ITargetDefinition getTarget() {
+			if (fTarget == null) {
 				try {
-					delta.accept(this);
+					loadTargetDefinition();
+					TargetEditor.this.fDirty = false;
+					TargetEditor.this.editorDirtyStateChanged();
 				} catch (CoreException e) {
-					PDEPlugin.logException(e);
+					TargetEditor.this.showError(PDEUIMessages.TargetEditor_5, e);
+					TargetEditor.this.close(false);
 				}
 			}
+			return fTarget;
 		}
 
-		public boolean visit(IResourceDelta delta) throws CoreException {
-			IResource resource = delta.getResource();
-			if (resource instanceof IFile) {
-				IFile file = (IFile) resource;
-				if (file.equals(fInput)) {
-					if (delta.getKind() == IResourceDelta.REMOVED || delta.getKind() == IResourceDelta.REPLACED) {
-						Display display = getSite().getShell().getDisplay();
-						display.asyncExec(new Runnable() {
-							public void run() {
-								getSite().getPage().closeEditor(TargetEditor.this, false);
-							}
-						});
+		private ITargetDefinition loadTargetDefinition() throws CoreException {
+			ITargetPlatformService service = getTargetPlatformService();
+			try {
+				if (fInput instanceof IFileEditorInput) {
+					ITargetHandle fileHandle = service.getTarget(((IFileEditorInput) fInput).getFile());
+					fTarget = fileHandle.getTargetDefinition();
+				} else if (fInput instanceof IURIEditorInput) {
+					ITargetHandle externalTarget = service.getTarget(((IURIEditorInput) fInput).getURI());
+					fTarget = externalTarget.getTargetDefinition();
+				}
+			} catch (CoreException e) {
+				fTarget = service.newTarget();
+				throw e;
+			}
+			TargetEditor.this.getTargetChangedListener().contentsChanged(fTarget, this, true, false);
+			return fTarget;
+		}
+
+		public void saveTargetDefinition() throws CoreException {
+			ITargetPlatformService service = getTargetPlatformService();
+			fSaving = true;
+			try {
+				service.saveTargetDefinition(fTarget);
+				TargetEditor.this.fDirty = false;
+				TargetEditor.this.editorDirtyStateChanged();
+			} finally {
+				fSaving = false;
+			}
+		}
+
+		private ITargetPlatformService getTargetPlatformService() throws CoreException {
+			ITargetPlatformService service = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
+			if (service == null) {
+				throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, "ITargetPlatformService not available")); //$NON-NLS-1$
+			}
+			return service;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
+		 */
+		public void resourceChanged(IResourceChangeEvent event) {
+			if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
+				IResourceDelta delta = event.getDelta().findMember(fTargetFileInWorkspace.getFullPath());
+				if (delta != null) {
+					if (delta.getKind() == IResourceDelta.REMOVED) {
+						TargetEditor.this.close(false);
+					} else if (delta.getKind() == IResourceDelta.CHANGED || delta.getKind() == IResourceDelta.REPLACED) {
+						if (!fSaving) {
+							Display display = getSite().getShell().getDisplay();
+							display.asyncExec(new Runnable() {
+								public void run() {
+									TargetEditor.this.doRevert();
+								}
+							});
+						}
 					}
-					return false;
 				}
 			}
-			return true;
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditorContributor.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditorContributor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ChangeAwareSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ChangeAwareSourceViewerConfiguration.java
index 7a48c8b..b19e320 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ChangeAwareSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ChangeAwareSourceViewerConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.*;
 import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
 import org.eclipse.jface.text.information.*;
+import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
 import org.eclipse.jface.text.reconciler.*;
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -37,6 +38,7 @@ public abstract class ChangeAwareSourceViewerConfiguration extends TextSourceVie
 	protected AbstractReconciler fReconciler;
 	private InformationPresenter fInfoPresenter;
 	private InformationPresenter fOutlinePresenter;
+	private PDEQuickAssistAssistant fQuickAssistant;
 
 	/**
 	 * @param page
@@ -163,12 +165,26 @@ public abstract class ChangeAwareSourceViewerConfiguration extends TextSourceVie
 		return allDetectors;
 	}
 
+	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
+		if (sourceViewer.isEditable()) {
+			if (fQuickAssistant == null) {
+				fQuickAssistant = new PDEQuickAssistAssistant();
+				fQuickAssistant.setRestoreCompletionProposalSize(PDEPlugin.getDefault().getDialogSettingsSection("quick_assist_proposal_size")); //$NON-NLS-1$
+			}
+			return fQuickAssistant;
+		}
+		return null;
+	}
+
 	public abstract boolean affectsTextPresentation(PropertyChangeEvent event);
 
 	public abstract boolean affectsColorPresentation(PropertyChangeEvent event);
 
 	public abstract void adaptToPreferenceChange(PropertyChangeEvent event);
 
-	public abstract void dispose();
+	public void dispose() {
+		if (fQuickAssistant != null)
+			fQuickAssistant.dispose();
+	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ManifestConfiguration.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ManifestConfiguration.java
index c8394e9..7af69ba 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ManifestConfiguration.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ManifestConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@ import org.eclipse.jface.text.contentassist.ContentAssistant;
 import org.eclipse.jface.text.contentassist.IContentAssistant;
 import org.eclipse.jface.text.presentation.IPresentationReconciler;
 import org.eclipse.jface.text.presentation.PresentationReconciler;
-import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
 import org.eclipse.jface.text.rules.*;
 import org.eclipse.jface.text.source.IAnnotationHover;
 import org.eclipse.jface.text.source.ISourceViewer;
@@ -31,7 +30,6 @@ public class ManifestConfiguration extends ChangeAwareSourceViewerConfiguration
 	private IAnnotationHover fAnnotationHover;
 	private BasePDEScanner fPropertyKeyScanner;
 	private BasePDEScanner fPropertyValueScanner;
-	private PDEQuickAssistAssistant fQuickAssistant;
 	private ContentAssistant fContentAssistant;
 	private ManifestContentAssistProcessor fContentAssistantProcessor;
 	private ManifestTextHover fTextHover;
@@ -226,18 +224,8 @@ public class ManifestConfiguration extends ChangeAwareSourceViewerConfiguration
 		fPropertyValueScanner.adaptToPreferenceChange(event);
 	}
 
-	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
-		if (sourceViewer.isEditable()) {
-			if (fQuickAssistant == null)
-				fQuickAssistant = new PDEQuickAssistAssistant();
-			return fQuickAssistant;
-		}
-		return null;
-	}
-
 	public void dispose() {
-		if (fQuickAssistant != null)
-			fQuickAssistant.dispose();
+		super.dispose();
 		if (fContentAssistant != null)
 			fContentAssistantProcessor.dispose();
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/PDEQuickAssistAssistant.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/PDEQuickAssistAssistant.java
index 4fd843b..665adf4 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/PDEQuickAssistAssistant.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/PDEQuickAssistAssistant.java
@@ -199,7 +199,18 @@ public class PDEQuickAssistAssistant extends QuickAssistAssistant {
 
 			int offset = invocationContext.getOffset();
 			Iterator it = amodel.getAnnotationIterator();
-			ArrayList list = new ArrayList();
+			TreeSet proposalSet = new TreeSet(new Comparator() {
+
+				public int compare(Object o1, Object o2) {
+					if (o1 instanceof ICompletionProposal && o2 instanceof ICompletionProposal) {
+						ICompletionProposal proposal1 = (ICompletionProposal) o1;
+						ICompletionProposal proposal2 = (ICompletionProposal) o2;
+						return proposal1.getDisplayString().compareToIgnoreCase(proposal2.getDisplayString());
+					}
+					return 0;
+				}
+
+			});
 			while (it.hasNext()) {
 				Object key = it.next();
 				if (!(key instanceof SimpleMarkerAnnotation)) {
@@ -208,7 +219,7 @@ public class PDEQuickAssistAssistant extends QuickAssistAssistant {
 						if (amodel.getPosition(annotation).overlapsWith(offset, 1)) {
 							ICompletionProposal[] proposals = annotation.getSpellingProblem().getProposals();
 							for (int index = 0; index < proposals.length; index++) {
-								list.add(proposals[index]);
+								proposalSet.add(proposals[index]);
 							}
 						}
 					}
@@ -231,8 +242,8 @@ public class PDEQuickAssistAssistant extends QuickAssistAssistant {
 						if (offset >= start && offset <= end) {
 							for (int i = 0; i < mapping.length; i++) {
 								PDECompletionProposal proposal = new PDECompletionProposal(mapping[i], pos, marker);
-								if (!list.contains(proposal)) {
-									list.add(proposal);
+								if (!proposalSet.contains(proposal)) {
+									proposalSet.add(proposal);
 								}
 							}
 						}
@@ -241,7 +252,8 @@ public class PDEQuickAssistAssistant extends QuickAssistAssistant {
 
 				}
 			}
-			return (ICompletionProposal[]) list.toArray(new ICompletionProposal[list.size()]);
+
+			return (ICompletionProposal[]) proposalSet.toArray(new ICompletionProposal[proposalSet.size()]);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/XMLConfiguration.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/XMLConfiguration.java
index 5548467..544ffe0 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/XMLConfiguration.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/XMLConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2009 IBM Corporation and others.
+ *  Copyright (c) 2003, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@ package org.eclipse.pde.internal.ui.editor.text;
 import org.eclipse.jface.text.*;
 import org.eclipse.jface.text.presentation.IPresentationReconciler;
 import org.eclipse.jface.text.presentation.PresentationReconciler;
-import org.eclipse.jface.text.quickassist.IQuickAssistAssistant;
 import org.eclipse.jface.text.reconciler.IReconciler;
 import org.eclipse.jface.text.reconciler.Reconciler;
 import org.eclipse.jface.text.source.IAnnotationHover;
@@ -40,7 +39,6 @@ public class XMLConfiguration extends ChangeAwareSourceViewerConfiguration {
 
 	private TextAttribute fXMLCommentAttr;
 	private MultilineDamagerRepairer fDamagerRepairer;
-	private PDEQuickAssistAssistant fQuickAssistant;
 
 	public XMLConfiguration(IColorManager colorManager) {
 		this(colorManager, null);
@@ -153,20 +151,6 @@ public class XMLConfiguration extends ChangeAwareSourceViewerConfiguration {
 		return property.equals(IPDEColorConstants.P_DEFAULT) || property.equals(IPDEColorConstants.P_PROC_INSTR) || property.equals(IPDEColorConstants.P_STRING) || property.equals(IPDEColorConstants.P_EXTERNALIZED_STRING) || property.equals(IPDEColorConstants.P_TAG) || property.equals(IPDEColorConstants.P_XML_COMMENT);
 	}
 
-	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
-		if (sourceViewer.isEditable()) {
-			if (fQuickAssistant == null)
-				fQuickAssistant = new PDEQuickAssistAssistant();
-			return fQuickAssistant;
-		}
-		return null;
-	}
-
-	public void dispose() {
-		if (fQuickAssistant != null)
-			fQuickAssistant.dispose();
-	}
-
 	protected int getInfoImplementationType() {
 		return SourceInformationProvider.F_XML_IMP;
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
index 0597297..43ac38e 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
 package org.eclipse.pde.internal.ui.launcher;
 
 import java.util.*;
+import java.util.List;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.*;
@@ -93,6 +94,45 @@ public abstract class AbstractPluginBlock {
 
 	private PluginStatusDialog fDialog;
 
+	class PluginModelNameBuffer {
+		private List nameList;
+
+		PluginModelNameBuffer() {
+			super();
+			nameList = new ArrayList();
+		}
+
+		void add(IPluginModelBase model) {
+			nameList.add(getPluginName(model));
+		}
+
+		private String getPluginName(IPluginModelBase model) {
+			String startLevel = null;
+			String autoStart = null;
+			if (fPluginTreeViewer.getChecked(model)) {
+				startLevel = levelColumnCache.get(model) != null ? levelColumnCache.get(model).toString() : null;
+				autoStart = autoColumnCache.get(model) != null ? autoColumnCache.get(model).toString() : null;
+			}
+			return BundleLauncherHelper.writeBundleEntry(model, startLevel, autoStart);
+		}
+
+		public String toString() {
+			Collections.sort(nameList);
+			StringBuffer result = new StringBuffer();
+			for (Iterator iterator = nameList.iterator(); iterator.hasNext();) {
+				String name = (String) iterator.next();
+				if (result.length() > 0)
+					result.append(',');
+				result.append(name);
+			}
+
+			if (result.length() == 0)
+				return null;
+
+			return result.toString();
+		}
+	}
+
 	/**
 	 * Label provider for the tree.
 	 */
@@ -103,15 +143,16 @@ public abstract class AbstractPluginBlock {
 		}
 
 		public String getColumnText(Object obj, int index) {
+			boolean isChecked = fPluginTreeViewer.getChecked(obj);
 			switch (index) {
 				case 0 :
 					return super.getColumnText(obj, index);
 				case 1 :
-					if (levelColumnCache != null && levelColumnCache.containsKey(obj))
+					if (isChecked && levelColumnCache != null && levelColumnCache.containsKey(obj))
 						return (String) levelColumnCache.get(obj);
 					return ""; //$NON-NLS-1$
 				case 2 :
-					if (autoColumnCache != null && autoColumnCache.containsKey(obj))
+					if (isChecked && autoColumnCache != null && autoColumnCache.containsKey(obj))
 						return (String) autoColumnCache.get(obj);
 					return ""; //$NON-NLS-1$
 				default :
@@ -596,35 +637,34 @@ public abstract class AbstractPluginBlock {
 	protected void resetText(IPluginModelBase model) {
 		String levelText = ""; //$NON-NLS-1$
 		String autoText = ""; //$NON-NLS-1$
-		String systemBundleId = PDECore.getDefault().getModelManager().getSystemBundleId();
-		boolean isSystemBundle = systemBundleId.equals(model.getPluginBase().getId());
-		if (model.isFragmentModel()) {
-			autoText = "false"; //$NON-NLS-1$
-		} else if (IPDEBuildConstants.BUNDLE_CORE_RUNTIME.equals(model.getPluginBase().getId()) || "org.eclipse.equinox.ds".equals(model.getPluginBase().getId())) { //$NON-NLS-1$
-			autoText = "true"; //$NON-NLS-1$
-		}
+
 		Widget widget = fPluginTreeViewer.testFindItem(model);
 		if (fPluginTreeViewer.getChecked(model)) {
-			if (levelColumnCache.containsKey(model) && !isSystemBundle) {
-				levelText = (String) levelColumnCache.get(model);
-				levelText = levelText.length() > 0 ? levelText : "default"; //$NON-NLS-1$
-			}
-			if (autoColumnCache.containsKey(model) && !isSystemBundle) {
-				autoText = (String) autoColumnCache.get(model);
-				autoText = autoText.length() > 0 ? autoText : "default"; //$NON-NLS-1$
-			}
-		}
-		if (levelText != null) {
+			levelText = (String) levelColumnCache.get(model);
+			levelText = levelText == null || levelText.length() == 0 ? "default" : levelText; //$NON-NLS-1$
+			autoText = (String) autoColumnCache.get(model);
+			autoText = autoText == null || autoText.length() == 0 ? "default" : autoText; //$NON-NLS-1$
+
+			// Replace run levels and auto start values for certain important system bundles
+			String systemValue = BundleLauncherHelper.resolveSystemRunLevelText(model);
+			levelText = systemValue != null ? systemValue : levelText;
+
+			systemValue = BundleLauncherHelper.resolveSystemAutoText(model);
+			autoText = systemValue != null ? systemValue : autoText;
+
+			// Recache the values in case they changed.  I believe the code to only recache
+			// if they actually changed takes more time than just setting the value.
 			levelColumnCache.put(model, levelText);
-			if (widget instanceof TreeItem) {
-				((TreeItem) widget).setText(1, levelText);
-			}
-		}
-		if (autoText != null) {
 			autoColumnCache.put(model, autoText);
-			if (widget instanceof TreeItem) {
-				((TreeItem) widget).setText(2, autoText);
-			}
+		}
+
+		// Set values in UI (although I'm not sure why we don't use the label provider here)
+		if (widget instanceof TreeItem) {
+			((TreeItem) widget).setText(1, levelText);
+		}
+
+		if (widget instanceof TreeItem) {
+			((TreeItem) widget).setText(2, autoText);
 		}
 	}
 
@@ -952,6 +992,15 @@ public abstract class AbstractPluginBlock {
 		}
 	}
 
+	protected void setVisible(boolean visible) {
+		if (!visible) {
+			if (fDialog != null) {
+				fDialog.close();
+				fDialog = null;
+			}
+		}
+	}
+
 	protected abstract LaunchValidationOperation createValidationOperation();
 
 	/**
@@ -980,20 +1029,6 @@ public abstract class AbstractPluginBlock {
 		}
 	}
 
-	protected void appendToBuffer(StringBuffer buffer, IPluginModelBase model) {
-		if (buffer.length() > 0)
-			buffer.append(","); //$NON-NLS-1$ 
-
-		String startLevel = null;
-		String autoStart = null;
-		if (fPluginTreeViewer.getChecked(model)) {
-			startLevel = levelColumnCache.get(model) != null ? levelColumnCache.get(model).toString() : null;
-			autoStart = autoColumnCache.get(model) != null ? autoColumnCache.get(model).toString() : null;
-		}
-		String value = BundleLauncherHelper.writeBundleEntry(model, startLevel, autoStart);
-		buffer.append(value);
-	}
-
 	protected void resetGroup(NamedElement group) {
 		Widget widget = fPluginTreeViewer.testFindItem(group);
 		if (widget instanceof TreeItem) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BaseBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BaseBlock.java
index 57a7cab..6ca4e14 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BaseBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BaseBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,13 +55,14 @@ public abstract class BaseBlock {
 				handleBrowseWorkspace();
 			} else if (source == fVariablesButton) {
 				handleInsertVariable();
-			} else {
+			} else if (fTab != null) {
 				fTab.updateLaunchConfigurationDialog();
 			}
 		}
 
 		public void modifyText(ModifyEvent e) {
-			fTab.scheduleUpdateJob();
+			if (fTab != null)
+				fTab.scheduleUpdateJob();
 		}
 	}
 
@@ -117,7 +118,7 @@ public abstract class BaseBlock {
 	}
 
 	protected void handleBrowseFileSystem() {
-		DirectoryDialog dialog = new DirectoryDialog(fTab.getControl().getShell());
+		DirectoryDialog dialog = new DirectoryDialog(fLocationText.getShell());
 		dialog.setFilterPath(getLocation());
 		dialog.setText(PDEUIMessages.BaseBlock_dirSelection);
 		dialog.setMessage(PDEUIMessages.BaseBlock_dirChoose);
@@ -127,7 +128,7 @@ public abstract class BaseBlock {
 	}
 
 	protected void handleBrowseWorkspace() {
-		ContainerSelectionDialog dialog = new ContainerSelectionDialog(fTab.getControl().getShell(), getContainer(), true, PDEUIMessages.BaseBlock_relative);
+		ContainerSelectionDialog dialog = new ContainerSelectionDialog(fLocationText.getShell(), getContainer(), true, PDEUIMessages.BaseBlock_relative);
 		if (dialog.open() == Window.OK) {
 			Object[] result = dialog.getResult();
 			if (result.length == 0)
@@ -167,7 +168,7 @@ public abstract class BaseBlock {
 	}
 
 	private void handleInsertVariable() {
-		StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(fTab.getControl().getShell());
+		StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(fLocationText.getShell());
 		if (dialog.open() == Window.OK)
 			fLocationText.insert(dialog.getVariableExpression());
 	}
@@ -193,7 +194,8 @@ public abstract class BaseBlock {
 		fFileSystemButton.setEnabled(enabled);
 		fWorkspaceButton.setEnabled(enabled);
 		fVariablesButton.setEnabled(enabled);
-		fTab.updateLaunchConfigurationDialog();
+		if (fTab != null)
+			fTab.updateLaunchConfigurationDialog();
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java
index c683147..378e7b8 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java
@@ -110,8 +110,8 @@ public class BlockAdapter {
 
 	public void setActiveBlock(int index) {
 		try {
-			fActiveIndex = index;
 			if (index == FEATURES_BLOCK) {
+				fPluginBlock.setVisible(false);
 				if (fFeatureBlockComposite == null) {
 					fFeatureBlockComposite = SWTFactory.createComposite(fParent, 7, 1, GridData.FILL_BOTH, 0, 0);
 					fFeatureBlock.createControl(fFeatureBlockComposite, 6, 10);
@@ -120,23 +120,28 @@ public class BlockAdapter {
 					}
 				}
 				fLayout.topControl = fFeatureBlockComposite;
-				return;
-			} else if (fPluginBlockComposite == null) {
-				fPluginBlockComposite = SWTFactory.createComposite(fParent, fSpan, 1, GridData.FILL_BOTH, 0, 0);
-				fPluginBlock.createControl(fPluginBlockComposite, fSpan, fIndent);
-				if (fLaunchConfig != null) {
-					if (fPluginBlock instanceof PluginBlock) {
-						fPluginBlock.initializeFrom(fLaunchConfig, fActiveIndex == PLUGINS_BLOCK);
-					} else if (fPluginBlock instanceof OSGiBundleBlock) {
-						((OSGiBundleBlock) fPluginBlock).initializeFrom(fLaunchConfig);
+			} else {
+				fFeatureBlock.setVisible(false);
+				if (fActiveIndex != index) {
+					fPluginBlock.setVisible(false);
+				}
+				if (fPluginBlockComposite == null) {
+					fPluginBlockComposite = SWTFactory.createComposite(fParent, fSpan, 1, GridData.FILL_BOTH, 0, 0);
+					fPluginBlock.createControl(fPluginBlockComposite, fSpan, fIndent);
+					if (fLaunchConfig != null) {
+						if (fPluginBlock instanceof PluginBlock) {
+							fPluginBlock.initializeFrom(fLaunchConfig, index == PLUGINS_BLOCK);
+						} else if (fPluginBlock instanceof OSGiBundleBlock) {
+							((OSGiBundleBlock) fPluginBlock).initializeFrom(fLaunchConfig);
+						}
 					}
 				}
+				fLayout.topControl = fPluginBlockComposite;
 			}
-			fLayout.topControl = fPluginBlockComposite;
+			fActiveIndex = index;
 		} catch (CoreException ex) {
 			PDEPlugin.log(ex);
 		}
 
 	}
-
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/ConfigurationAreaBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/ConfigurationAreaBlock.java
index 68ceafe..df3eca7 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/ConfigurationAreaBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/ConfigurationAreaBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,12 +10,12 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.launcher;
 
-import org.eclipse.pde.launching.IPDELauncherConstants;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.pde.internal.launching.launcher.LaunchArgumentsHelper;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.launching.IPDELauncherConstants;
 import org.eclipse.pde.ui.launcher.AbstractLauncherTab;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -29,7 +29,7 @@ public class ConfigurationAreaBlock extends BaseBlock {
 	private Button fUseDefaultLocationButton;
 	private Button fClearConfig;
 	private String fLastEnteredConfigArea;
-	private String fConfigName;
+	private String fLastKnownConfigName;
 	private static String DEFAULT_DIR = "${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/"; //$NON-NLS-1$
 
 	public ConfigurationAreaBlock(AbstractLauncherTab tab) {
@@ -51,7 +51,7 @@ public class ConfigurationAreaBlock extends BaseBlock {
 			public void widgetSelected(SelectionEvent e) {
 				boolean useDefaultArea = fUseDefaultLocationButton.getSelection();
 				if (useDefaultArea)
-					fLocationText.setText(DEFAULT_DIR + fConfigName);
+					fLocationText.setText(DEFAULT_DIR + fLastKnownConfigName);
 				else
 					fLocationText.setText(fLastEnteredConfigArea);
 				enableBrowseSection(!useDefaultArea);
@@ -80,7 +80,7 @@ public class ConfigurationAreaBlock extends BaseBlock {
 	}
 
 	public void initializeFrom(ILaunchConfiguration configuration) throws CoreException {
-		fConfigName = configuration.getName();
+		fLastKnownConfigName = configuration.getName();
 		boolean useDefaultArea = configuration.getAttribute(IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, true);
 		fUseDefaultLocationButton.setSelection(useDefaultArea);
 		enableBrowseSection(!useDefaultArea);
@@ -92,22 +92,40 @@ public class ConfigurationAreaBlock extends BaseBlock {
 		fLastEnteredConfigArea = configuration.getAttribute(IPDELauncherConstants.CONFIG_LOCATION, ""); //$NON-NLS-1$
 
 		if (useDefaultArea)
-			fLocationText.setText(DEFAULT_DIR + fConfigName);
+			fLocationText.setText(DEFAULT_DIR + fLastKnownConfigName);
 		else
 			fLocationText.setText(fLastEnteredConfigArea);
 	}
 
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
 		configuration.setAttribute(IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, fUseDefaultLocationButton.getSelection());
-		fLastEnteredConfigArea = getLocation();
+
+		if (!fLastKnownConfigName.equals(configuration.getName())) {
+			fLastKnownConfigName = configuration.getName();
+			if (fUseDefaultLocationButton.getSelection()) {
+				fLastEnteredConfigArea = DEFAULT_DIR + fLastKnownConfigName;
+				fLocationText.setText(fLastEnteredConfigArea);
+			} else {
+				fLastEnteredConfigArea = getLocation();
+			}
+		}
+
 		configuration.setAttribute(IPDELauncherConstants.CONFIG_LOCATION, fLastEnteredConfigArea);
 		configuration.setAttribute(IPDELauncherConstants.CONFIG_CLEAR_AREA, fClearConfig.getSelection());
 	}
 
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration, boolean isJUnit) {
-		configuration.setAttribute(IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, !isJUnit);
 		configuration.setAttribute(IPDELauncherConstants.CONFIG_CLEAR_AREA, isJUnit);
-		String location = DEFAULT_DIR + (isJUnit ? "pde-junit" : configuration.getName()); //$NON-NLS-1$
+
+		boolean useDefaultArea = !isJUnit || LaunchArgumentsHelper.getDefaultJUnitWorkspaceIsContainer();
+		configuration.setAttribute(IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, useDefaultArea);
+
+		String location;
+		if (isJUnit && !useDefaultArea) {
+			location = LaunchArgumentsHelper.getDefaultJUnitConfigurationLocation();
+		} else {
+			location = DEFAULT_DIR + configuration.getName();
+		}
 		configuration.setAttribute(IPDELauncherConstants.CONFIG_LOCATION, location);
 	}
 
@@ -124,5 +142,4 @@ public class ConfigurationAreaBlock extends BaseBlock {
 			return null;
 		return super.validate();
 	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
index 9b8809d..adec99a 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
@@ -185,8 +185,6 @@ public class FeatureBlock {
 
 	class ButtonSelectionListener extends SelectionAdapter {
 
-		private PluginStatusDialog fDialog;
-
 		public void widgetSelected(SelectionEvent e) {
 			Object source = e.getSource();
 			if (source == fValidateButton) {
@@ -769,6 +767,7 @@ public class FeatureBlock {
 
 	private ViewerFilter fSelectedOnlyFilter;
 	private boolean fIsDisposed = false;
+	private PluginStatusDialog fDialog;
 
 	/**
 	 * Maps feature ID to the FeatureLaunchModel that represents the feature in the tree
@@ -1108,6 +1107,15 @@ public class FeatureBlock {
 		}
 	}
 
+	public void setVisible(boolean visible) {
+		if (!visible) {
+			if (fDialog != null) {
+				fDialog.close();
+				fDialog = null;
+			}
+		}
+	}
+
 	/**
 	 * Sets input to the tree, including location selection and checked features
 	 * 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
index b1ce648..43d1a0c 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
@@ -134,22 +134,29 @@ public class LaunchAction extends Action {
 		StringBuffer buffer = new StringBuffer(LaunchArgumentsHelper.getInitialProgramArguments());
 		IArgumentsInfo info = fProduct.getLauncherArguments();
 		String userArgs = (info != null) ? CoreUtility.normalize(info.getCompleteProgramArguments(os)) : ""; //$NON-NLS-1$
-		if (userArgs.length() > 0) {
-			buffer.append(" "); //$NON-NLS-1$
-			buffer.append(userArgs);
-		}
-		return buffer.toString();
+		return concatArgs(buffer, userArgs);
 	}
 
 	private String getVMArguments(String os) {
 		StringBuffer buffer = new StringBuffer(LaunchArgumentsHelper.getInitialVMArguments());
 		IArgumentsInfo info = fProduct.getLauncherArguments();
 		String userArgs = (info != null) ? CoreUtility.normalize(info.getCompleteVMArguments(os)) : ""; //$NON-NLS-1$
-		if (userArgs.length() > 0) {
-			buffer.append(" "); //$NON-NLS-1$
-			buffer.append(userArgs);
+		return concatArgs(buffer, userArgs);
+	}
+
+	private String concatArgs(StringBuffer initialArgs, String userArgs) {
+		List initialArgsList = Arrays.asList(DebugPlugin.parseArguments(initialArgs.toString()));
+		if (userArgs != null && userArgs.length() > 0) {
+			List userArgsList = Arrays.asList(DebugPlugin.parseArguments(userArgs));
+			for (Iterator iterator = userArgsList.iterator(); iterator.hasNext();) {
+				Object userArg = iterator.next();
+				if (!initialArgsList.contains(userArg)) {
+					initialArgs.append(' ');
+					initialArgs.append(userArg);
+				}
+			}
 		}
-		return buffer.toString();
+		return initialArgs.toString();
 	}
 
 	private String getJREContainer(String os) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchTerminationStatusHandler.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchTerminationStatusHandler.java
index 8ae137b..256ef7e 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchTerminationStatusHandler.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchTerminationStatusHandler.java
@@ -1,87 +1,90 @@
-/*******************************************************************************
- * Copyright (c) 2009 eXXcellent solutions gmbh, EclipseSource Corporation
- * and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Achim Demelt, eXXcellent solutions gmbh - initial API and implementation
- *     EclipseSource - initial API and implementation, ongoing enhancements
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.launcher;
-
-import java.io.File;
-import org.eclipse.core.filesystem.EFS;
-import org.eclipse.core.filesystem.IFileStore;
-import org.eclipse.core.runtime.*;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.IStatusHandler;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.pde.internal.launching.PDEMessages;
-import org.eclipse.pde.internal.launching.launcher.LaunchListener;
-import org.eclipse.pde.internal.ui.PDEPlugin;
-import org.eclipse.pde.internal.ui.PDEUIMessages;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.*;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.internal.views.log.LogView;
-
-public class LaunchTerminationStatusHandler implements IStatusHandler {
-	// different ways to open the error log
-	public static final int OPEN_IN_ERROR_LOG_VIEW = 0;
-	public static final int OPEN_IN_SYSTEM_EDITOR = 1;
-
-	public Object handleStatus(IStatus status, Object source) throws CoreException {
-		if (status.getCode() == 13)
-			handleOtherReasonsFoundInLog((ILaunch) source);
-		else if (status.getCode() == 15)
-			handleWorkspaceInUse();
-		return null;
-	}
-
-	private void handleWorkspaceInUse() {
-		Display.getDefault().asyncExec(new Runnable() {
-			public void run() {
-				MessageDialog.openError(PDEPlugin.getActiveWorkbenchShell(), PDEUIMessages.Launcher_error_title, PDEMessages.Launcher_error_code15);
-			}
-		});
-	}
-
-	private void handleOtherReasonsFoundInLog(final ILaunch launch) {
-		Display.getDefault().asyncExec(new Runnable() {
-			public void run() {
-				try {
-					File log = LaunchListener.getMostRecentLogFile(launch.getLaunchConfiguration());
-					if (log != null && log.exists()) {
-						MessageDialog dialog = new MessageDialog(PDEPlugin.getActiveWorkbenchShell(), PDEUIMessages.Launcher_error_title, null, // accept the default window icon
-								PDEUIMessages.Launcher_error_code13, MessageDialog.ERROR, new String[] {PDEUIMessages.Launcher_error_displayInLogView, PDEUIMessages.Launcher_error_displayInSystemEditor, IDialogConstants.NO_LABEL}, OPEN_IN_ERROR_LOG_VIEW);
-						int dialog_value = dialog.open();
-						if (dialog_value == OPEN_IN_ERROR_LOG_VIEW) {
-							LogView errlog = (LogView) PDEPlugin.getActivePage().showView("org.eclipse.pde.runtime.LogView"); //$NON-NLS-1$
-							errlog.handleImportPath(log.getAbsolutePath());
-							errlog.sortByDateDescending();
-						} else if (dialog_value == OPEN_IN_SYSTEM_EDITOR) {
-							openInEditor(log);
-						}
-					}
-				} catch (CoreException e) {
-				}
-			}
-		});
-	}
-
-	private void openInEditor(File log) {
-		IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(log.getAbsolutePath()));
-		if (!fileStore.fetchInfo().isDirectory() && fileStore.fetchInfo().exists()) {
-			IWorkbenchWindow ww = PDEPlugin.getActiveWorkbenchWindow();
-			IWorkbenchPage page = ww.getActivePage();
-			try {
-				IDE.openEditorOnFileStore(page, fileStore);
-			} catch (PartInitException e) {
-			}
-		}
-	}
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 eXXcellent solutions gmbh, EclipseSource Corporation
+ * and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Achim Demelt, eXXcellent solutions gmbh - initial API and implementation
+ *     EclipseSource - initial API and implementation, ongoing enhancements
+ *******************************************************************************/
+package org.eclipse.pde.internal.ui.launcher;
+
+import java.io.File;
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.runtime.*;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.IStatusHandler;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.pde.internal.launching.PDEMessages;
+import org.eclipse.pde.internal.launching.launcher.LaunchListener;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.*;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.views.log.LogView;
+
+public class LaunchTerminationStatusHandler implements IStatusHandler {
+	// different ways to open the error log
+	public static final int OPEN_IN_ERROR_LOG_VIEW = 0;
+	public static final int OPEN_IN_SYSTEM_EDITOR = 1;
+
+	public Object handleStatus(IStatus status, Object source) throws CoreException {
+		if (status.getCode() == 13)
+			handleOtherReasonsFoundInLog((ILaunch) source);
+		else if (status.getCode() == 15)
+			handleWorkspaceInUse();
+		return null;
+	}
+
+	private void handleWorkspaceInUse() {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				MessageDialog.openError(PDEPlugin.getActiveWorkbenchShell(), PDEUIMessages.Launcher_error_title, PDEMessages.Launcher_error_code15);
+			}
+		});
+	}
+
+	private void handleOtherReasonsFoundInLog(final ILaunch launch) {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				try {
+					File log = LaunchListener.getMostRecentLogFile(launch.getLaunchConfiguration());
+					if (log != null && log.exists()) {
+						MessageDialog dialog = new MessageDialog(PDEPlugin.getActiveWorkbenchShell(), PDEUIMessages.Launcher_error_title, null, // accept the default window icon
+								PDEUIMessages.Launcher_error_code13, MessageDialog.ERROR, new String[] {PDEUIMessages.Launcher_error_displayInLogView, PDEUIMessages.Launcher_error_displayInSystemEditor, IDialogConstants.NO_LABEL}, OPEN_IN_ERROR_LOG_VIEW);
+						int dialog_value = dialog.open();
+						if (dialog_value == OPEN_IN_ERROR_LOG_VIEW) {
+							IWorkbenchPage page = PDEPlugin.getActivePage();
+							if (page != null) {
+								LogView errlog = (LogView) page.showView("org.eclipse.pde.runtime.LogView"); //$NON-NLS-1$
+								errlog.handleImportPath(log.getAbsolutePath());
+								errlog.sortByDateDescending();
+							}
+						} else if (dialog_value == OPEN_IN_SYSTEM_EDITOR) {
+							openInEditor(log);
+						}
+					}
+				} catch (CoreException e) {
+				}
+			}
+		});
+	}
+
+	private void openInEditor(File log) {
+		IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(log.getAbsolutePath()));
+		if (!fileStore.fetchInfo().isDirectory() && fileStore.fetchInfo().exists()) {
+			IWorkbenchWindow ww = PDEPlugin.getActiveWorkbenchWindow();
+			IWorkbenchPage page = ww.getActivePage();
+			try {
+				IDE.openEditorOnFileStore(page, fileStore);
+			} catch (PartInitException e) {
+			}
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LauncherUtilsStatusHandler.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LauncherUtilsStatusHandler.java
index d87ed3e..b18ad61 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LauncherUtilsStatusHandler.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LauncherUtilsStatusHandler.java
@@ -1,6 +1,6 @@
 /*******************************************************************************
- * Copyright (c) 2009 eXXcellent solutions gmbh, EclipseSource Corporation
- * and others.
+ * Copyright (c) 2009, 2011 eXXcellent solutions gmbh, EclipseSource Corporation,
+ * IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,22 +9,30 @@
  * Contributors:
  *     Achim Demelt, eXXcellent solutions gmbh - initial API and implementation
  *     EclipseSource - initial API and implementation, ongoing enhancements
+ *     IBM Corporation - ongoing enhancements
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.launcher;
 
 import java.util.*;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
+import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.IStatusHandler;
+import org.eclipse.debug.ui.*;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.ltk.core.refactoring.Change;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.pde.internal.launching.PDELaunchingPlugin;
 import org.eclipse.pde.internal.launching.PDEMessages;
 import org.eclipse.pde.internal.launching.launcher.LauncherUtils;
 import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
 import org.eclipse.pde.internal.ui.wizards.tools.OrganizeManifestsProcessor;
+import org.eclipse.pde.launching.IPDELauncherConstants;
+import org.eclipse.pde.ui.launcher.MainTab;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -32,21 +40,47 @@ import org.eclipse.ui.IWorkbenchWindow;
 public class LauncherUtilsStatusHandler implements IStatusHandler {
 
 	public Object handleStatus(IStatus status, Object source) throws CoreException {
-		if (status.getCode() == LauncherUtils.WORKSPACE_LOCKED)
-			handleWorkspaceLocked((String) source);
-		else if (status.getCode() == LauncherUtils.CLEAR_LOG)
-			return clearLog();
-		else if (status.getCode() == LauncherUtils.DELETE_WORKSPACE)
-			return deleteWorkspace((String) source);
-		else if (status.getCode() == LauncherUtils.GENERATE_CONFIG_INI)
-			return generateConfigIni();
-		else if (status.getCode() == LauncherUtils.ORGANIZE_MANIFESTS) {
-			Object[] args = (Object[]) source;
-			organizeManifests((ArrayList) args[0], (IProgressMonitor) args[1], (Properties) args[2]);
+		int code = status.getCode();
+		switch (code) {
+			case LauncherUtils.WORKSPACE_LOCKED :
+				Object[] args = (Object[]) source;
+				handleWorkspaceLocked((String) args[0], (ILaunchConfiguration) args[1], (String) args[2]);
+				break;
+
+			case LauncherUtils.CLEAR_LOG :
+				return clearLog();
+
+			case LauncherUtils.DELETE_WORKSPACE :
+				return deleteWorkspace((String) source);
+
+			case LauncherUtils.GENERATE_CONFIG_INI :
+				return generateConfigIni();
+
+			case LauncherUtils.ORGANIZE_MANIFESTS :
+				Object[] args2 = (Object[]) source;
+				organizeManifests((ArrayList) args2[0], (IProgressMonitor) args2[1], (Properties) args2[2]);
+				break;
+
+			case LauncherUtils.SELECT_WORKSPACE_FIELD :
+				ILaunchConfigurationDialog dialog = (ILaunchConfigurationDialog) source;
+				selectWorkspaceField(dialog);
+				break;
 		}
 		return null;
 	}
 
+	private void selectWorkspaceField(ILaunchConfigurationDialog dialog) {
+		ILaunchConfigurationTab[] tabs = dialog.getTabs();
+		for (int i = 0; i < tabs.length; i++) {
+			ILaunchConfigurationTab tab = tabs[i];
+			if (tab instanceof MainTab) {
+				MainTab mainTab = (MainTab) tab;
+				dialog.setActiveTab(mainTab);
+				mainTab.applyData(IPDELauncherConstants.LOCATION);
+			}
+		}
+	}
+
 	private Boolean generateConfigIni() {
 		String message = PDEUIMessages.LauncherUtils_generateConfigIni;
 		return Boolean.valueOf(generateDialog(message).intValue() == 0);
@@ -60,8 +94,9 @@ public class LauncherUtilsStatusHandler implements IStatusHandler {
 		return generateDialog(PDEUIMessages.LauncherUtils_clearLogFile);
 	}
 
-	private void handleWorkspaceLocked(String workspace) {
-		generateErrorDialog(PDEUIMessages.LauncherUtils_workspaceLocked, NLS.bind(PDEMessages.LauncherUtils_cannotLaunchApplication, workspace));
+	private void handleWorkspaceLocked(String workspace, ILaunchConfiguration launchConfig, String mode) {
+		String message = NLS.bind(PDEMessages.LauncherUtils_cannotLaunchApplication, workspace);
+		generateErrorDialog(PDEUIMessages.LauncherUtils_workspaceLocked, message, launchConfig, mode);
 	}
 
 	private void organizeManifests(final ArrayList projects, final IProgressMonitor monitor, final Properties lastRun) {
@@ -136,11 +171,19 @@ public class LauncherUtilsStatusHandler implements IStatusHandler {
 		return new Integer(result[0]);
 	}
 
-	private static void generateErrorDialog(final String title, final String message) {
+	private static void generateErrorDialog(final String title, final String message, final ILaunchConfiguration launchConfig, final String mode) {
 		getDisplay().syncExec(new Runnable() {
 			public void run() {
-				MessageDialog dialog = new MessageDialog(getActiveShell(), title, null, message, MessageDialog.ERROR, new String[] {IDialogConstants.OK_LABEL}, 0);
-				dialog.open();
+				Shell parentShell = getActiveShell();
+				MessageDialog dialog = new MessageDialog(parentShell, title, null, message, MessageDialog.ERROR, new String[] {PDEUIMessages.LauncherUtils_edit, IDialogConstants.OK_LABEL}, 1);
+				int res = dialog.open();
+				if (res == 0) {
+					IStructuredSelection selection = new StructuredSelection(launchConfig);
+					ILaunchGroup group = DebugUITools.getLaunchGroup(launchConfig, mode);
+					String groupIdentifier = group == null ? IDebugUIConstants.ID_RUN_LAUNCH_GROUP : group.getIdentifier();
+					IStatus status = new Status(IStatus.OK, PDELaunchingPlugin.getPluginId(), LauncherUtils.SELECT_WORKSPACE_FIELD, "", null); //$NON-NLS-1$
+					DebugUITools.openLaunchConfigurationDialogOnGroup(parentShell, selection, groupIdentifier, status);
+				}
 			}
 		});
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
index 0e9d120..5ebbfd4 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,15 +11,13 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.launcher;
 
-import org.eclipse.pde.launching.IPDELauncherConstants;
-
-import org.eclipse.pde.internal.launching.launcher.*;
-
 import java.util.*;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.internal.launching.launcher.*;
+import org.eclipse.pde.launching.IPDELauncherConstants;
 import org.eclipse.pde.ui.launcher.BundlesTab;
 
 public class OSGiBundleBlock extends AbstractPluginBlock {
@@ -32,31 +30,34 @@ public class OSGiBundleBlock extends AbstractPluginBlock {
 
 	protected void savePluginState(ILaunchConfigurationWorkingCopy config) {
 		Object[] selected = fPluginTreeViewer.getCheckedElements();
-		StringBuffer wBuffer = new StringBuffer();
-		StringBuffer tBuffer = new StringBuffer();
+
+		PluginModelNameBuffer wBuffer = new PluginModelNameBuffer();
+		PluginModelNameBuffer tBuffer = new PluginModelNameBuffer();
+
 		for (int i = 0; i < selected.length; i++) {
 			if (selected[i] instanceof IPluginModelBase) {
 				IPluginModelBase model = (IPluginModelBase) selected[i];
 				if (model.getUnderlyingResource() == null) {
-					appendToBuffer(tBuffer, model);
+					tBuffer.add(model);
 				} else {
-					appendToBuffer(wBuffer, model);
+					wBuffer.add(model);
 				}
 			}
 		}
-		config.setAttribute(IPDELauncherConstants.WORKSPACE_BUNDLES, wBuffer.length() == 0 ? (String) null : wBuffer.toString());
-		config.setAttribute(IPDELauncherConstants.TARGET_BUNDLES, tBuffer.length() == 0 ? (String) null : tBuffer.toString());
 
-		StringBuffer buffer = new StringBuffer();
+		config.setAttribute(IPDELauncherConstants.WORKSPACE_BUNDLES, wBuffer.toString());
+		config.setAttribute(IPDELauncherConstants.TARGET_BUNDLES, tBuffer.toString());
+
+		PluginModelNameBuffer buffer = new PluginModelNameBuffer();
 		if (fAddWorkspaceButton.getSelection()) {
 			IPluginModelBase[] workspaceModels = getWorkspaceModels();
 			for (int i = 0; i < workspaceModels.length; i++) {
 				if (!fPluginTreeViewer.getChecked(workspaceModels[i])) {
-					appendToBuffer(buffer, workspaceModels[i]);
+					buffer.add(workspaceModels[i]);
 				}
 			}
 		}
-		config.setAttribute(IPDELauncherConstants.DESELECTED_WORKSPACE_PLUGINS, buffer.length() > 0 ? buffer.toString() : (String) null);
+		config.setAttribute(IPDELauncherConstants.DESELECTED_WORKSPACE_PLUGINS, buffer.toString());
 	}
 
 	public void initializeFrom(ILaunchConfiguration configuration) throws CoreException {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
index 65682b0..8af4d61 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -143,8 +143,8 @@ public class PluginBlock extends AbstractPluginBlock {
 	protected void savePluginState(ILaunchConfigurationWorkingCopy config) {
 		// If the table is populated, store what is checked.  If we are lazy loading and need to init, store the default checkstate
 		if (isEnabled() || fInitDefaultCheckState) {
-			StringBuffer wBuffer = new StringBuffer();
-			StringBuffer tBuffer = new StringBuffer();
+			PluginModelNameBuffer wBuffer = new PluginModelNameBuffer();
+			PluginModelNameBuffer tBuffer = new PluginModelNameBuffer();
 
 			// If this is the first time the table is enabled, default the checkstate to all workspace plug-ins
 			if (fInitDefaultCheckState) {
@@ -162,9 +162,9 @@ public class PluginBlock extends AbstractPluginBlock {
 					IPluginModelBase model = externalModels[i];
 					boolean masked = checkedWorkspace.contains(model.getPluginBase().getId());
 					if (masked) {
-						appendToBuffer(wBuffer, model);
+						wBuffer.add(model);
 					} else if (model.isEnabled()) {
-						appendToBuffer(tBuffer, model);
+						tBuffer.add(model);
 					}
 				}
 				fInitDefaultCheckState = false;
@@ -175,27 +175,27 @@ public class PluginBlock extends AbstractPluginBlock {
 					if (selected[i] instanceof IPluginModelBase) {
 						IPluginModelBase model = (IPluginModelBase) selected[i];
 						if (model.getUnderlyingResource() == null) {
-							appendToBuffer(tBuffer, model);
+							tBuffer.add(model);
 						} else {
-							appendToBuffer(wBuffer, model);
+							wBuffer.add(model);
 						}
 					}
 				}
 
 			}
-			config.setAttribute(IPDELauncherConstants.SELECTED_WORKSPACE_PLUGINS, wBuffer.length() == 0 ? (String) null : wBuffer.toString());
-			config.setAttribute(IPDELauncherConstants.SELECTED_TARGET_PLUGINS, tBuffer.length() == 0 ? (String) null : tBuffer.toString());
+			config.setAttribute(IPDELauncherConstants.SELECTED_WORKSPACE_PLUGINS, wBuffer.toString());
+			config.setAttribute(IPDELauncherConstants.SELECTED_TARGET_PLUGINS, tBuffer.toString());
 
-			StringBuffer buffer = new StringBuffer();
+			PluginModelNameBuffer buffer = new PluginModelNameBuffer();
 			if (fAddWorkspaceButton.getSelection()) {
 				IPluginModelBase[] workspaceModels = getWorkspaceModels();
 				for (int i = 0; i < workspaceModels.length; i++) {
 					if (!fPluginTreeViewer.getChecked(workspaceModels[i])) {
-						appendToBuffer(buffer, workspaceModels[i]);
+						buffer.add(workspaceModels[i]);
 					}
 				}
 			}
-			config.setAttribute(IPDELauncherConstants.DESELECTED_WORKSPACE_PLUGINS, buffer.length() > 0 ? buffer.toString() : (String) null);
+			config.setAttribute(IPDELauncherConstants.DESELECTED_WORKSPACE_PLUGINS, buffer.toString());
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginStatusDialog.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginStatusDialog.java
index cbec5f4..36178ea 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginStatusDialog.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginStatusDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2009 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.pde.internal.ui.launcher;
 
 import java.util.Map;
+import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.jface.dialogs.*;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.viewers.*;
@@ -32,7 +33,13 @@ public class PluginStatusDialog extends TrayDialog {
 	class ContentProvider extends DefaultContentProvider implements ITreeContentProvider {
 
 		public Object[] getChildren(Object parentElement) {
-			return (Object[]) fInput.get(parentElement);
+			if (fInput.containsKey(parentElement)) {
+				return (Object[]) fInput.get(parentElement);
+			}
+			if (parentElement instanceof MultiStatus) {
+				return ((MultiStatus) parentElement).getChildren();
+			}
+			return new Object[0];
 		}
 
 		public Object getParent(Object element) {
@@ -40,7 +47,13 @@ public class PluginStatusDialog extends TrayDialog {
 		}
 
 		public boolean hasChildren(Object element) {
-			return fInput.containsKey(element) && element instanceof BundleDescription;
+			if (fInput.containsKey(element) && element instanceof BundleDescription) {
+				return true;
+			}
+			if (element instanceof MultiStatus) {
+				return ((MultiStatus) element).getChildren().length > 0;
+			}
+			return false;
 		}
 
 		public Object[] getElements(Object inputElement) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/TracingBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/TracingBlock.java
index ccde3bd..7c2fd18 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/TracingBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/TracingBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,12 +12,11 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.launcher;
 
-import org.eclipse.pde.launching.IPDELauncherConstants;
-
 import java.util.*;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
@@ -27,6 +26,7 @@ import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
 import org.eclipse.pde.internal.ui.util.SWTUtil;
 import org.eclipse.pde.internal.ui.wizards.ListUtil;
+import org.eclipse.pde.launching.IPDELauncherConstants;
 import org.eclipse.pde.ui.launcher.AbstractLauncherTab;
 import org.eclipse.pde.ui.launcher.TracingTab;
 import org.eclipse.swt.SWT;
@@ -51,6 +51,12 @@ public class TracingBlock {
 	private FormToolkit fToolkit;
 	private ScrolledPageBook fPageBook;
 
+	/**
+	 * The last selected item in the list is stored in the dialog settings.
+	 */
+	private static final String TRACING_SETTINGS = "TracingTab"; //$NON-NLS-1$
+	private static final String SETTINGS_SELECTED_PLUGIN = "selectedPlugin"; //$NON-NLS-1$
+
 	public TracingBlock(TracingTab tab) {
 		fTab = tab;
 	}
@@ -102,6 +108,7 @@ public class TracingBlock {
 				CheckboxTableViewer tableViewer = (CheckboxTableViewer) e.getSource();
 				boolean selected = tableViewer.getChecked(getSelectedModel());
 				pluginSelected(getSelectedModel(), selected);
+				storeSelectedModel();
 			}
 		});
 		fPluginViewer.addCheckStateListener(new ICheckStateListener() {
@@ -219,7 +226,7 @@ public class TracingBlock {
 					}
 				}
 				fPluginViewer.setCheckedElements(list.toArray());
-				IPluginModelBase model = getLastSelectedPlugin(config);
+				IPluginModelBase model = getLastSelectedPlugin();
 				if (model != null) {
 					fPluginViewer.setSelection(new StructuredSelection(model), true);
 					pluginSelected(model, list.contains(model));
@@ -236,9 +243,6 @@ public class TracingBlock {
 		boolean tracingEnabled = fTracingCheck.getSelection();
 		config.setAttribute(IPDELauncherConstants.TRACING, tracingEnabled);
 		if (tracingEnabled) {
-			IPluginModelBase model = getSelectedModel();
-			String id = (model == null) ? null : model.getPluginBase().getId();
-			config.setAttribute(IPDELauncherConstants.TRACING_SELECTED_PLUGIN, id);
 			boolean changes = false;
 			for (Enumeration elements = fPropertySources.elements(); elements.hasMoreElements();) {
 				TracingPropertySource source = (TracingPropertySource) elements.nextElement();
@@ -249,9 +253,8 @@ public class TracingBlock {
 			}
 			if (changes)
 				config.setAttribute(IPDELauncherConstants.TRACING_OPTIONS, fMasterOptions);
-		} else {
-			config.setAttribute(IPDELauncherConstants.TRACING_SELECTED_PLUGIN, (String) null);
 		}
+
 		Object[] checked = fPluginViewer.getCheckedElements();
 		if (checked.length == 0) {
 			config.setAttribute(IPDELauncherConstants.TRACING_CHECKED, IPDELauncherConstants.TRACING_NONE);
@@ -323,9 +326,35 @@ public class TracingBlock {
 		return fTraceableModels;
 	}
 
-	private IPluginModelBase getLastSelectedPlugin(ILaunchConfiguration config) throws CoreException {
-		String pluginID = config.getAttribute(IPDELauncherConstants.TRACING_SELECTED_PLUGIN, (String) null);
-		return pluginID == null ? null : PluginRegistry.findModel(pluginID);
+	/**
+	 * Returns the last selected plug-in as stored in dialog settings or <code>null</code> if no
+	 * previous selection is found.
+	 * 
+	 * @return model for the last selected plug-in or <code>null</code>
+	 */
+	private IPluginModelBase getLastSelectedPlugin() {
+		IDialogSettings settings = PDEPlugin.getDefault().getDialogSettings().getSection(TRACING_SETTINGS);
+		if (settings != null) {
+			String id = settings.get(SETTINGS_SELECTED_PLUGIN);
+			if (id != null && id.trim().length() > 0) {
+				return PluginRegistry.findModel(id);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Stores the currently selected model in the dialog settings for later retrieval using
+	 * {@link #getLastSelectedPlugin()}.  If no model is selected, the settings are cleared.
+	 */
+	private void storeSelectedModel() {
+		IDialogSettings settings = PDEPlugin.getDefault().getDialogSettings().getSection(TRACING_SETTINGS);
+		if (settings == null) {
+			settings = PDEPlugin.getDefault().getDialogSettings().addNewSection(TRACING_SETTINGS);
+		}
+		IPluginModelBase model = getSelectedModel();
+		String id = (model == null) ? null : model.getPluginBase().getId();
+		settings.put(SETTINGS_SELECTED_PLUGIN, id);
 	}
 
 	private TracingPropertySource getPropertySource(IPluginModelBase model) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkspaceDataBlock.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkspaceDataBlock.java
index fd85003..a43b5f5 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkspaceDataBlock.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkspaceDataBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,14 +10,14 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.launcher;
 
-import org.eclipse.pde.launching.IPDELauncherConstants;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.pde.internal.launching.IPDEConstants;
 import org.eclipse.pde.internal.launching.launcher.LaunchArgumentsHelper;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.ui.preferences.MainPreferencePage;
+import org.eclipse.pde.launching.IPDELauncherConstants;
 import org.eclipse.pde.ui.launcher.AbstractLauncherTab;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -25,14 +25,31 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.dialogs.PreferencesUtil;
 
 public class WorkspaceDataBlock extends BaseBlock {
 
+	/**
+	 * Transient launch configuration attribute key that tells whether the launch configuration has been newly created but
+	 * <em>not duplicated</em>.
+	 * 
+	 * @since 3.7
+	 */
+	private static final String ATTR_IS_NEWLY_CREATED = "isNewlyCreated"; //$NON-NLS-1$
+
 	private Button fClearWorkspaceCheck;
 	private Button fAskClearCheck;
 	private Button fClearWorkspaceRadio;
 	private Button fClearWorkspaceLogRadio;
 
+	private String fLastKnownName;
+	private String fLastKnownLocation;
+
+	/**
+	 * Tells whether the current launch configuration was newly created (excluding duplication).
+	 */
+	private boolean fIsCreatedLaunchConfiguration;
+
 	public WorkspaceDataBlock(AbstractLauncherTab tab) {
 		super(tab);
 	}
@@ -86,23 +103,56 @@ public class WorkspaceDataBlock extends BaseBlock {
 
 		createButtons(buttons, new String[] {PDEUIMessages.BaseBlock_workspace, PDEUIMessages.BaseBlock_filesystem, PDEUIMessages.BaseBlock_variables});
 
-		fAskClearCheck = new Button(group, SWT.CHECK);
-		fAskClearCheck.setText(PDEUIMessages.WorkspaceDataBlock_askClear);
-		gd = new GridData();
+		Composite buttons2 = new Composite(group, SWT.NONE);
+		layout = new GridLayout(2, false);
+		layout.marginHeight = layout.marginWidth = 0;
+		buttons2.setLayout(layout);
+		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
-		fAskClearCheck.setLayoutData(gd);
+		buttons2.setLayoutData(gd);
+
+		fAskClearCheck = new Button(buttons2, SWT.CHECK);
+		fAskClearCheck.setText(PDEUIMessages.WorkspaceDataBlock_askClear);
 		fAskClearCheck.addSelectionListener(fListener);
+
+		final Link configureDefaults = new Link(buttons2, SWT.NONE);
+		configureDefaults.setLayoutData(new GridData(SWT.END, SWT.FILL, true, false));
+		configureDefaults.setText("<A>" + PDEUIMessages.WorkspaceDataBlock_configureDefaults + "</A>"); //$NON-NLS-1$//$NON-NLS-2$
+		configureDefaults.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				PreferencesUtil.createPreferenceDialogOn(configureDefaults.getShell(), MainPreferencePage.ID, new String[] {MainPreferencePage.ID}, null).open();
+			}
+		});
 	}
 
-	public void performApply(ILaunchConfigurationWorkingCopy config) {
-		config.setAttribute(IPDELauncherConstants.LOCATION, getLocation());
+	public void performApply(ILaunchConfigurationWorkingCopy config, boolean isJUnit) {
+		/*
+		 * Update the workspace location when the configuration name changed and ...
+		 * - the workspace location has not been changed manually
+		 * - the launch configuration is new but not created as duplicate
+		 */
+		String currentLocation = getLocation();
+		String currentName = config.getName();
+		if (fLastKnownName != null && !fLastKnownName.equals(currentName)) {
+			if (currentLocation.equals(fLastKnownLocation)) {
+				if (fIsCreatedLaunchConfiguration) {
+					currentLocation = LaunchArgumentsHelper.getDefaultWorkspaceLocation(currentName, isJUnit);
+					fLocationText.setText(currentLocation);
+					fLastKnownName = currentName;
+					fLastKnownLocation = currentLocation;
+				}
+			}
+		}
+		config.setAttribute(IPDELauncherConstants.LOCATION, currentLocation);
 		config.setAttribute(IPDELauncherConstants.DOCLEAR, fClearWorkspaceCheck.getSelection());
 		config.setAttribute(IPDELauncherConstants.ASKCLEAR, fAskClearCheck.getSelection());
 		config.setAttribute(IPDEConstants.DOCLEARLOG, fClearWorkspaceLogRadio.getSelection());
 	}
 
-	public void initializeFrom(ILaunchConfiguration configuration) throws CoreException {
-		fLocationText.setText(configuration.getAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultWorkspaceLocation(configuration.getName())));
+	public void initializeFrom(ILaunchConfiguration configuration, boolean isJUnit) throws CoreException {
+		fLastKnownName = configuration.getName();
+		fLastKnownLocation = configuration.getAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultWorkspaceLocation(fLastKnownName, isJUnit));
+		fLocationText.setText(fLastKnownLocation);
 		fClearWorkspaceCheck.setSelection(configuration.getAttribute(IPDELauncherConstants.DOCLEAR, false));
 		fAskClearCheck.setSelection(configuration.getAttribute(IPDELauncherConstants.ASKCLEAR, true));
 		fAskClearCheck.setEnabled(fClearWorkspaceCheck.getSelection());
@@ -110,17 +160,21 @@ public class WorkspaceDataBlock extends BaseBlock {
 		fClearWorkspaceLogRadio.setSelection(configuration.getAttribute(IPDEConstants.DOCLEARLOG, false));
 		fClearWorkspaceRadio.setEnabled(fClearWorkspaceCheck.getSelection());
 		fClearWorkspaceRadio.setSelection(!configuration.getAttribute(IPDEConstants.DOCLEARLOG, false));
+
+		if (configuration instanceof ILaunchConfigurationWorkingCopy)
+			fIsCreatedLaunchConfiguration = ((ILaunchConfigurationWorkingCopy) configuration).removeAttribute(ATTR_IS_NEWLY_CREATED) != null;
+		else
+			fIsCreatedLaunchConfiguration = configuration.getAttribute(ATTR_IS_NEWLY_CREATED, false);
 	}
 
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration, boolean isJUnit) {
-		if (isJUnit) {
-			configuration.setAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultJUnitWorkspaceLocation());
-		} else {
-			configuration.setAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultWorkspaceLocation(configuration.getName()));
-		}
+		fLastKnownName = configuration.getName();
+		fLastKnownLocation = LaunchArgumentsHelper.getDefaultWorkspaceLocation(fLastKnownName, isJUnit);
+		configuration.setAttribute(IPDELauncherConstants.LOCATION, fLastKnownLocation);
 		configuration.setAttribute(IPDELauncherConstants.DOCLEAR, isJUnit);
 		configuration.setAttribute(IPDELauncherConstants.ASKCLEAR, !isJUnit);
 		configuration.setAttribute(IPDEConstants.DOCLEARLOG, false);
+		configuration.setAttribute(ATTR_IS_NEWLY_CREATED, true);
 	}
 
 	protected String getName() {
@@ -148,4 +202,9 @@ public class WorkspaceDataBlock extends BaseBlock {
 		return null;
 	}
 
+	public void selectWorkspaceLocation() {
+		fLocationText.setFocus();
+		fLocationText.selectAll();
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/InternationalizeWizard.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/InternationalizeWizard.java
index 8b69637..956db7b 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/InternationalizeWizard.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/InternationalizeWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,10 +15,10 @@ import java.util.*;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.TrayDialog;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.*;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.internal.core.plugin.ExternalPluginModel;
 import org.eclipse.pde.internal.ui.*;
@@ -63,7 +63,6 @@ public class InternationalizeWizard extends Wizard implements IImportWizard {
 		setDefaultPageImageDescriptor(PDEPluginImages.DESC_XHTML_CONVERT_WIZ);
 		setWindowTitle(PDEUIMessages.InternationalizeWizard_title);
 		this.action = action;
-		setHelpAvailable(false);
 	}
 
 	/**
@@ -200,7 +199,10 @@ public class InternationalizeWizard extends Wizard implements IImportWizard {
 		return super.performCancel();
 	}
 
-	public boolean isHelpAvailable() {
-		return false;
+	public void setContainer(IWizardContainer wizardContainer) {
+		super.setContainer(wizardContainer);
+		if (getContainer() instanceof TrayDialog)
+			((TrayDialog) getContainer()).setHelpAvailable(false);
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ModelChangeTable.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ModelChangeTable.java
index 23af619..97857f2 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ModelChangeTable.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ModelChangeTable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@ import org.eclipse.pde.core.plugin.IPluginModelBase;
 public class ModelChangeTable {
 
 	private Hashtable fChangeTable = new Hashtable();
-	private int fTotalModelChanges = 0;
 	private ArrayList fPreSelected = new ArrayList();
 
 	public void addToChangeTable(IPluginModelBase model, IFile file, Object change, boolean selected) {
@@ -29,7 +28,6 @@ public class ModelChangeTable {
 		else {
 			modelChange = new ModelChange(model, selected);
 			fChangeTable.put(model, modelChange);
-			fTotalModelChanges += 1;
 			if (selected)
 				fPreSelected.add(modelChange);
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/SharedPartWithButtons.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/SharedPartWithButtons.java
index 790ea07..8a2ce07 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/SharedPartWithButtons.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/SharedPartWithButtons.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,6 +11,9 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.parts;
 
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.layout.PixelConverter;
+import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
@@ -113,6 +116,13 @@ public abstract class SharedPartWithButtons extends SharedPart {
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
 		button.setLayoutData(gd);
 		button.setData(new Integer(index));
+
+		// Set the default button size
+		button.setFont(JFaceResources.getDialogFont());
+		PixelConverter converter = new PixelConverter(button);
+		int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
+		gd.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
+
 		return button;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/WizardCheckboxTablePart.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/WizardCheckboxTablePart.java
index 3b00749..6d2c7ff 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/WizardCheckboxTablePart.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/WizardCheckboxTablePart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2010 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -24,6 +24,8 @@ import org.eclipse.ui.forms.widgets.FormToolkit;
 public class WizardCheckboxTablePart extends CheckboxTablePart {
 	private int selectAllIndex = -1;
 	private int deselectAllIndex = -1;
+	private int selectIndex = -1;
+	private int deselectIndex = -1;
 	private String tableName;
 	private int counter;
 	private Label counterLabel;
@@ -38,9 +40,11 @@ public class WizardCheckboxTablePart extends CheckboxTablePart {
 	}
 
 	public WizardCheckboxTablePart(String mainLabel) {
-		this(mainLabel, new String[] {PDEUIMessages.WizardCheckboxTablePart_selectAll, PDEUIMessages.WizardCheckboxTablePart_deselectAll});
+		this(mainLabel, new String[] {PDEUIMessages.WizardCheckboxTablePart_selectAll, PDEUIMessages.WizardCheckboxTablePart_deselectAll, PDEUIMessages.WizardCheckboxTablePart_select, PDEUIMessages.WizardCheckboxTablePart_deselect});
 		setSelectAllIndex(0);
 		setDeselectAllIndex(1);
+		setSelectIndex(2);
+		setDeselectIndex(3);
 	}
 
 	public void setSelectAllIndex(int index) {
@@ -51,6 +55,14 @@ public class WizardCheckboxTablePart extends CheckboxTablePart {
 		this.deselectAllIndex = index;
 	}
 
+	public void setSelectIndex(int index) {
+		this.selectIndex = index;
+	}
+
+	public void setDeselectIndex(int index) {
+		this.deselectIndex = index;
+	}
+
 	protected void buttonSelected(Button button, int index) {
 		if (index == selectAllIndex) {
 			handleSelectAll(true);
@@ -58,6 +70,12 @@ public class WizardCheckboxTablePart extends CheckboxTablePart {
 		if (index == deselectAllIndex) {
 			handleSelectAll(false);
 		}
+		if (index == selectIndex) {
+			handleSelect(true);
+		}
+		if (index == deselectIndex) {
+			handleSelect(false);
+		}
 	}
 
 	public Object[] getSelection() {
@@ -84,6 +102,19 @@ public class WizardCheckboxTablePart extends CheckboxTablePart {
 		updateCounter(0);
 	}
 
+	public void createControl(Composite parent, int span, boolean multiselect) {
+		if (multiselect) {
+			createControl(parent, SWT.MULTI, span, null);
+		} else {
+			createControl(parent, SWT.NULL, span, null);
+		}
+		counterLabel = new Label(parent, SWT.NULL);
+		GridData gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL);
+		gd.horizontalSpan = span;
+		counterLabel.setLayoutData(gd);
+		updateCounter(0);
+	}
+
 	protected Button createButton(Composite parent, String label, int index, FormToolkit toolkit) {
 		Button button = super.createButton(parent, label, index, toolkit);
 		SWTUtil.setButtonDimensionHint(button);
@@ -111,6 +142,10 @@ public class WizardCheckboxTablePart extends CheckboxTablePart {
 		updateCounterLabel();
 	}
 
+	public void updateCount(int amount) {
+		updateCounter(amount);
+	}
+
 	protected void updateCounterLabel() {
 		String number = "" + getSelectionCount(); //$NON-NLS-1$
 		String totalNumber = "" + getTotalCount(); //$NON-NLS-1$
@@ -143,6 +178,18 @@ public class WizardCheckboxTablePart extends CheckboxTablePart {
 		updateCounter(selected);
 	}
 
+	protected void handleSelect(boolean select) {
+		CheckboxTableViewer viewer = getTableViewer();
+		if (viewer.getTable().getSelection().length > 0) {
+			TableItem[] selected = viewer.getTable().getSelection();
+			for (int i = 0; i < selected.length; i++) {
+				TableItem item = selected[i];
+				item.setChecked(select);
+			}
+			updateCounter(viewer.getCheckedElements().length);
+		}
+	}
+
 	protected void elementChecked(Object element, boolean checked) {
 		int count = getSelectionCount();
 		updateCounter(checked ? count + 1 : count - 1);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
index a30ed64..601cfb7 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -46,6 +46,8 @@ MissingResourcePage_unableToOpen=Unable to open editor
 ###### Reusable Parts ################################
 WizardCheckboxTablePart_selectAll = &Select All
 WizardCheckboxTablePart_deselectAll = D&eselect All
+WizardCheckboxTablePart_select = Se&lect
+WizardCheckboxTablePart_deselect = &Deselect
 WizardCheckboxTablePart_counter = {0} of {1} selected.
 
 ###### Editors #######################################
@@ -204,6 +206,12 @@ FeatureEditor_info_license = License Agreement
 FeatureEditor_info_copyright = Copyright Notice
 FeatureEditor_info_discoveryUrls = Sites to Visit
 
+FeatureEditor_licenseFeatureSection_browse = Browse...
+FeatureEditor_licenseFeatureSection_sharedButton = Shared license
+FeatureEditor_licenseFeatureSection_featureID = License Feature ID:
+FeatureEditor_licenseFeatureSection_featureVersion = License Feature Version:
+FeatureEditor_licenseFeatureSection_localButton = Local license
+
 FeatureEditor_PluginSection_pluginTitle = Plug-ins and Fragments
 FeatureEditor_PluginSection_pluginDesc = Select plug-ins and fragments that should be packaged in this feature.
 FeatureEditor_PluginSection_new = Add...
@@ -343,15 +351,25 @@ ManifestSyntaxColorTab_values=Values
 ManifestStructureCreator_name=Manifest Structure Compare
 ManifestStructureCreator_errorMessage=An error occurred while creating the input structure.
 
-MainPreferencePage_addToJavaSearch=Include &all plug-ins from target in Java search
+MainPreferencePage_addToJavaSearch=Include all plug-ins from target in &Java search
 MainPreferencePage_exportingGroup=Exporting
-MainPreferencePage_sourceGroup=Source
-MainPreferencePage_group2=Automated Management of Dependencies
+MainPreferencePage_junitWorkspace_asContainer=Append launch configuration &name to this location
+MainPreferencePage_junitWorkspace_asLocation=Us&e as workspace location
+MainPreferencePage_junitWorkspace_fileSystem=File S&ystem...
+MainPreferencePage_junitWorkspace_variables=Va&riables...
+MainPreferencePage_junitWorkspace_workspace=W&orkspace...
+MainPreferencePage_junitWorkspaceGroup=Workspace location for new JUnit Plug-in Test launch configurations
 MainPreferencePage_promptBeforeOverwrite=Prompt &before overwriting build.xml files when exporting
 MainPreferencePage_promtBeforeRemove=Prompt before deleting a &target definition file
+MainPreferencePage_runtimeWorkspace_asContainer=Append launch &configuration name to this location
+MainPreferencePage_runtimeWorkspace_asLocation=Use as wor&kspace location
+MainPreferencePage_runtimeWorkspace_fileSystem=&File System...
+MainPreferencePage_runtimeWorkspace_variables=&Variables...
+MainPreferencePage_runtimeWorkspace_workspace=&Workspace...
+MainPreferencePage_runtimeWorkspaceGroup=Workspace location for new Eclipse Application launch configurations
 MainPreferencePage_showSourceBundles=Show &source plug-ins
 MainPreferencePage_updateStale=&Update stale manifest files prior to launching
-MainPreferencePage_targetDefinitionsGroup=Target Definitions
+MainPreferencePage_targetDefinitionsGroup=Target definitions
 
 ManifestEditorContributor_externStringsActionName=Externalize Strings...
 
@@ -473,6 +491,7 @@ WorkspaceDataBlock_name=workspace location
 WorkspaceDataBlock_askClear = Ask &for confirmation before clearing
 WorkspaceDataBlock_clearLog=log o&nly
 WorkspaceDataBlock_clearWorkspace=&workspace
+WorkspaceDataBlock_configureDefaults=Configure defaults...
 BaseBlock_workspace=&Workspace...
 BaseBlock_filesystem=File System...
 BaseBlock_dirSelection=Directory Selection
@@ -551,7 +570,7 @@ ConfigurationTab_configAreaGroup=Configuration Area
 ConfigurationTab_useDefaultLoc=&Use default location
 ConfigurationTab_configLog=&Location:
 ConfigurationSection_title=Configuration File
-ConfigurationSection_desc=A product can be configured by setting properties in a config.ini file.  These properties are read by the runtime upon startup and customization can vary per platform.
+ConfigurationSection_desc=A product can be configured by setting properties in a config.ini file.  Select whether an existing config.ini file should be used or one generated.
 ConfigurationSection_file=File:
 ConfigurationSection_existing=Use an existing config.ini file
 ConfigurationTab_configLocMessage=Select a configuration location:
@@ -563,8 +582,8 @@ ConfigurationSection_default=Generate a default config.ini file
 ConfigurationSection_browse=Browse...
 ConfigurationAreaBlock_name=configuration area location
 ConfigurationPageMock_pageTitle=Configuration
-ConfigurationPageMock_sectionTitle=Plug-ins
-ConfigurationPageMock_sectionDesc=Specify plug-ins and their associated start levels.
+ConfigurationPageMock_sectionTitle=Start Levels
+ConfigurationPageMock_sectionDesc=Specify custom start levels for plug-ins.
 PluginConfigurationSection_tablePluginTitle=Plug-in
 ConfigurationSection_message=Select a config.ini file:
 ConfigurationTemplateBlock_name=template file location
@@ -580,6 +599,7 @@ LauncherSection_desc=Customize the executable that is used to launch the product
 LauncherSection_ico=Use a single ICO file containing the 6 images:
 LauncherUtils_workspaceLocked=Workspace Cannot Be Locked
 LauncherUtils_clearLogFile=Do you really want to clear the log file?
+LauncherUtils_edit=&Edit...
 LauncherUtils_title=Launcher
 LauncherPage_title=Launching
 LauncherSection_file=File:
@@ -610,11 +630,11 @@ OpenLogDialog_cannotDisplay=Log file cannot be displayed.
 OpenSchemaAction_msgUnknown=Unknown
 
 ###### Preferences ####################################
-Preferences_MainPage_Description = Set general plug-in development preferences.
+Preferences_MainPage_Description = General settings for plug-in development:
 
-Preferences_MainPage_showObjects = Show plug-in objects in editors and dialogs using:
-Preferences_MainPage_useIds = &Identifiers
-Preferences_MainPage_useFullNames = &Presentation names
+Preferences_MainPage_showObjects = Plug-in presentation:
+Preferences_MainPage_useIds = Show &identifiers
+Preferences_MainPage_useFullNames = Show &presentation names
 
 ExternalizeStringsWizard_title=Externalize Strings
 ExternalizeResolution_attrib=Externalize the {0} attribute
@@ -878,7 +898,7 @@ VersionSyncWizard_usePluginsAtBuild = Synchronize versions on build (recommended
 VersionSyncWizard_synchronizing = Synchronizing versions...
 
 JavaAttributeWizard_wtitle = New Java Class
-JavaArgumentsTab_vmArgsGroup=V&M arguments
+JavaArgumentsTab_vmArgsGroup=VM argumen&ts
 JavaArgumentsTab_vmVariables=Variables&...
 JavaArgumentsTab_description=The values below are used to initialize program and VM arguments on new PDE launch configurations.
 
@@ -895,7 +915,7 @@ ExtensionPointDetails_schemaLinks=<form>\
 <p><img href="open"/> <a href="open">Open extension point schema</a></p>\
 <p><img href="search"/> <a href="search">Find references</a></p>\
 </form>
-ExtensionPointsSection_message1=Would you also like to delete the corresponding schema file: {0}?\n\nThis operation cannot be undone.
+ExtensionPointsSection_message1=Extension Point has been deleted. Delete the corresponding schema file {0}?\n\nThis operation cannot be undone.
 ExtensionPointsSection_rename_label=&Rename...
 ExtensionPointsSection_sectionDescAllExtensionPoints=Edit extension points defined by this plug-in in the following section.
 ExtensionElementBodyTextDetails_sectionDescElementGeneral=Specify the body text content for the selected element.
@@ -947,6 +967,7 @@ BaseFeatureSpecPage_browse=Bro&wse...
 BaseExtensionPoint_sections_copyright=
 BaseExportWizard_confirmReplace_title=Confirm Replace
 BaseExtensionPoint_generating = Generating schema file...
+GeneralInfoSection_IdWarning=The product ID should not match the defining plug-in's ID. This product will not export correctly.
 GeneralInfoSection_version=Version:
 GeneralInfoSection_provider=Provider:
 GeneralInfoSection_pluginId=Host Plug-in:
@@ -1059,6 +1080,9 @@ PluginImportOperation_could_not_delete_project=Import operation could not delete
 PluginImportOperation_Importing_plugin=Importing {0}
 PluginImportOperation_OverwritePluginProjects=Delete Plug-in Projects
 PluginImportOperation_Set_up_classpaths=Setting up the classpaths:
+PluginImportOperation_WarningDialogJob=Plug-in projects could not be imported.
+PluginImportOperation_WarningDialogMessageSingular=The following project could not be imported. Check that it does not already exist in the workspace in a closed or read-only state.
+PluginImportOperation_WarningDialogMessagePlural=The following projects could not be imported. Check that they do not already exist in the workspace in a closed or read-only state.
 PluginImportWizard_runningConfigDesc=An application is currently running. Some of the selected plug-ins may not be imported if they are locked by it. Do you want to continue?
 PluginImportWizard_runningConfigsDesc=Multiple applications are currently running. Some of the selected plug-ins may not be imported if they are locked by them. Do you want to continue?
 PluginImportWizard_runningConfigsTitle=Running Applications
@@ -1082,8 +1106,8 @@ ImportWizard_FirstPage_binary = Bin&ary projects
 ImportWizard_FirstPage_binaryLinks = Binar&y projects with linked content
 ImportWizard_FirstPage_source = Pro&jects with source folders
 ImportWizard_FirstPage_importFrom = Import From
-ImportWizard_FirstPage_target = T&he active target platform (as specified in the Preferences)
-ImportWizard_FirstPage_goToTarget = &Target Definitions...
+ImportWizard_FirstPage_target = T&he active target platform
+ImportWizard_FirstPage_goToTarget = <a>Open the &Target Platform preference page...</a>
 ImportWizard_FirstPage_otherFolder = &Directory:
 ImportWizard_FirstPage_browse = B&rowse...
 ImportWizard_SecondPage_addFragments = Include fra&gments when computing required plug-ins
@@ -1104,16 +1128,16 @@ ImportWizard_DetailedPage_title = Selection
 ImportWizard_DetailedPage_desc = Select plug-ins and fragments to import.
 ImportWizard_DetailedPage_availableList = &Plug-ins and Fragments Found:
 ImportWizard_DetailedPage_importList = P&lug-ins and Fragments to Import:
-ImportWizard_DetailedPage_add = &Add -->
-ImportWizard_DetailedPage_addAll = A&dd All -->
-ImportWizard_DetailedPage_remove = <-- &Remove
-ImportWizard_DetailedPage_removeAll = <-- Re&move All
-ImportWizard_DetailedPage_swap = <-- &Swap -->
-ImportWizard_DetailedPage_existing = Exis&ting Plug-ins -->
+ImportWizard_DetailedPage_add = &Add ->
+ImportWizard_DetailedPage_addAll = A&dd All ->
+ImportWizard_DetailedPage_remove = <- &Remove
+ImportWizard_DetailedPage_removeAll = <- Re&move All
+ImportWizard_DetailedPage_swap = <- &Swap ->
+ImportWizard_DetailedPage_existing = Exis&ting Plug-ins ->
 ImplicitDependenciesSection_0=No resolved plug-ins could be found in this target definition.
 ImplicitDependenicesSection_Remove=Remove
-ImportWizard_DetailedPage_existingUnshared = Existing &Unshared -->
-ImportWizard_DetailedPage_addRequired = Re&quired Plug-ins -->
+ImportWizard_DetailedPage_existingUnshared = Existing &Unshared ->
+ImportWizard_DetailedPage_addRequired = Re&quired Plug-ins ->
 ImplicitDependenicesSection_RemoveAll=Remove All
 ImportWizard_DetailedPage_count = {0} out of {1} selected
 ImportWizard_DetailedPage_filter = Filter Available Plug-ins and Fragments
@@ -1121,7 +1145,7 @@ ImportWizard_DetailedPage_filterDesc=Show latest version of plug-ins only
 ImportWizard_DetailedPage_search = &ID (* = any string, ? = any character):
 
 ImportWizard_operation_multiProblem = Problems detected while importing plug-ins
-ImportWizard_operation_importingSource== Importing source...
+ImportWizard_operation_importingSource = Importing source...
 FeatureImportWizard_FirstPage_title = Import Features
 FeatureImportWizard_FirstPage_desc = Create projects from features in the file system.
 FeatureImportWizard_FirstPage_runtimeLocation = &Choose from features in the target platform
@@ -1209,7 +1233,10 @@ EditorUtilities_pathNotValidImage=The specified path does not point to a valid i
 EditorUtilities_imageTooLargeInfo=Images larger than {0} will overlap or hide text
 EditorPreferencePage_text=Text
 EditorPreferencePage_proc=Processing instructions
-EditorPreferencePage_link=See <A>'Text Editors'</A> for the general text editor preferences.
+
+# DO NOT TRANSLATE "org.eclipse.ui.preferencePages.GeneralTextEditor" and "org.eclipse.ui.preferencePages.ColorsAndFonts"
+EditorPreferencePage_link=See <a href=\"org.eclipse.ui.preferencePages.GeneralTextEditor\">'Text Editors'</a> for general text editor preferences and <a href=\"org.eclipse.ui.preferencePages.ColorsAndFonts\">'Colors and Fonts'</a> to configure the font.
+
 EditorPreferencePage_string=Constant strings
 EditorUtilities_noImageData=The specified file contains no image data
 EditorPreferencePage_tag=Tags
@@ -1246,6 +1273,7 @@ SearchAction_references = Find Re&ferences
 SearchAction_Declaration = Find Declaratio&n
 ShowDescriptionAction_label = Sho&w Description
 ShowDescriptionAction_title=Extension Point Description
+DefaultJUnitWorkspaceBlock_name=JUnit workspace location
 DefinitionPage_0=Definition
 DefinitionPage_1=Target Definition
 DependencyExtent_singular = dependency
@@ -1445,7 +1473,7 @@ CompilersPreferencePage_title=Plug-in Compiler
 
 CompilersPropertyPage_useworkspacesettings_change = <a>&Configure Workspace Settings...</a>
 ControlValidationUtility_errorMsgPluginUnresolved=The specified plug-in is unresolved
-CompilersPropertyPage_useprojectsettings_label = Use pr&oject settings
+CompilersPropertyPage_useprojectsettings_label = E&nable project specific settings
 
 compilers_p_unresolved_import= U&nresolved dependencies:
 compilers_p_unresolved_ex_points= Un&resolved extension points:
@@ -1569,7 +1597,7 @@ ExportTargetDefinition_task = Exporting current target definition...
 ExportTargetDeleteOldData = Deleting old data...
 ExportTargetExportFeatures = Exporting features...
 ExportTargetExportPlugins = Exporting plugins...
-ExportActiveTargetDefinition = Export Active Target Definition
+ExportActiveTargetDefinition = Exporting Target Definition
 ExportActiveTargetDefinition_message = Please choose a destination directory to export all target content
 ExportTargetCurrentTarget = Active &Target: 
 ExportTargetChooseFolder = &Destination:
@@ -1579,6 +1607,8 @@ ExportTargetSpecifyDestination = Specify the destination directory for the curre
 ExportTargetClearDestination = &Clear destination directory before exporting
 ExportTargetError_ChooseDestination = Please choose a destination directory
 ExportTargetError_validPath = Destination directory must be a valid path
+ExportTargetJob_ConfiguringDestination=Configuring destination
+ExportTargetJob_ExportingTargetContents=Exporting target contents
 
 
 CategoryDetails_title = Category Properties
@@ -1773,10 +1803,14 @@ TargetDefinitionContentPage_8=Enter a name for this target definition
 TargetDefinitionContentPage_LocationDescription=The following list of locations will be used to collect plug-ins for this target definition.
 TargetDefinitionEnvironmentPage_3=En&vironment
 TargetDefinitionEnvironmentPage_4=Ar&guments
-TargetDefinitionEnvironmentPage_5=Implicit &Dependencies
+TargetDefinitionEnvironmentPage_5=I&mplicit Dependencies
 TargetEditor_0=Save target to another location.
 TargetEditor_1=Resolving Target Definition
 TargetEditor_2=Refreshing Tree Content
+TargetEditor_3=Unable to perform save
+TargetEditor_4=Target Editor
+TargetEditor_5=Unable to load target definition model. Target Editor will be closed.
+TargetEditor_6=The editor input ''{0}'' is not supported.
 TargetCreationPage_0=Initialize the target definition with:
 TargetCreationPage_1=Nothing: Start &with an empty target definition
 TargetCreationPage_2=&Default: Default target for the running platform
@@ -2245,7 +2279,8 @@ InputContext_errorMessageFileDoesNotExist=Underlying file does not exist: {0}
 InputContext_errorMessageLocationNotSet=New location not set
 OpenSchemaAction_titleExtensionPointSchema=Extension Point Schema
 
-PDEJavaHelper_msgContentAssistAvailable=Content Assist Available (Ctrl+space)
+PDEJavaHelper_msgContentAssistAvailable=Content Assist Available
+PDEJavaHelper_msgContentAssistAvailableWithKeyBinding=Content Assist Available ({0})
 QuickOutlinePopupDialog_infoTextPressEscToExit=Press 'Esc' to exit the dialog.
 
 CalculateUsesOperation_calculatingDirective=Calculating uses directive for package: {0}
@@ -2338,6 +2373,18 @@ VersionDialog_title=Specify Version
 Product_FeatureSection_properties=Properties...
 ProfileBlock_0=Software Installation
 ProfileBlock_1=Support software installation in the launched application
+PropertiesSection_Add=Add...
+PropertiesSection_Edit=Edit...
+PropertiesSection_ErrorPropertyExists=The property {0} already exists
+PropertiesSection_ErrorPropertyNoName=A property needs a name
+PropertiesSection_Name=Name:
+PropertiesSection_NameColumn=Name
+PropertiesSection_PropertiesSectionDescription=Specify configuration properties that will be added to generated config.ini files
+PropertiesSection_PropertiesSectionTitle=Properties
+PropertiesSection_PropertyDialogTitle=Property
+PropertiesSection_Remove=Remove
+PropertiesSection_Value=Value:
+PropertiesSection_ValueColumn=Value
 
 PDEJUnitLaunchConfigurationTab_Run_Tests_In_UI_Thread=Run in &UI thread
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java
index 053dae2..ccb6351 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/CompilersPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.preferences;
 
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.*;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -39,7 +38,10 @@ public class CompilersPreferencePage extends PreferencePage implements IWorkbenc
 	private PDECompilersConfigurationBlock fBlock = null;
 	private Link link = null;
 
-	private HashMap fPageData = null;
+	/**
+	 * Since {@link #applyData(Object)} can be called before createContents, store the data
+	 */
+	private Map fPageData = null;
 
 	/**
 	 *  
@@ -91,6 +93,10 @@ public class CompilersPreferencePage extends PreferencePage implements IWorkbenc
 		});
 		fBlock = new PDECompilersConfigurationBlock(null, (IWorkbenchPreferenceContainer) getContainer());
 		fBlock.createControl(comp);
+
+		// Initialize with data map in case applyData was called before createContents
+		applyData(fPageData);
+
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(comp, IHelpContextIds.COMPILERS_PREFERENCE_PAGE);
 		return comp;
 	}
@@ -147,9 +153,11 @@ public class CompilersPreferencePage extends PreferencePage implements IWorkbenc
 	 * @see org.eclipse.jface.preference.PreferencePage#applyData(java.lang.Object)
 	 */
 	public void applyData(Object data) {
-		if (data instanceof HashMap) {
-			fPageData = (HashMap) data;
-			link.setVisible(!Boolean.TRUE.equals(fPageData.get(NO_LINK)));
+		if (data instanceof Map) {
+			fPageData = (Map) data;
+			if (link != null && fPageData.containsKey(NO_LINK)) {
+				link.setVisible(!Boolean.TRUE.equals(((Map) data).get(NO_LINK)));
+			}
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java
index 8cb7f53..2e52e64 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,11 +59,13 @@ public class EditorPreferencePage extends PreferencePage implements IWorkbenchPr
 
 	protected Control createContents(Composite parent) {
 		final Link link = new Link(parent, SWT.NONE);
-		final String target = "org.eclipse.ui.preferencePages.GeneralTextEditor"; //$NON-NLS-1$
 		link.setText(PDEUIMessages.EditorPreferencePage_link);
 		link.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				PreferencesUtil.createPreferenceDialogOn(link.getShell(), target, null, null);
+				if ("org.eclipse.ui.preferencePages.GeneralTextEditor".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(link.getShell(), e.text, null, null);
+				else if ("org.eclipse.ui.preferencePages.ColorsAndFonts".equals(e.text)) //$NON-NLS-1$
+					PreferencesUtil.createPreferenceDialogOn(link.getShell(), e.text, null, "selectFont:org.eclipse.jface.textfont"); //$NON-NLS-1$
 			}
 		});
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java
index 10d910a..181856b 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,6 @@
 package org.eclipse.pde.internal.ui.preferences;
 
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.preferences.*;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialogWithToggle;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -20,8 +19,10 @@ import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.pde.internal.core.PDEPreferencesManager;
 import org.eclipse.pde.internal.core.target.TargetPlatformService;
 import org.eclipse.pde.internal.core.target.provisional.ITargetHandle;
-import org.eclipse.pde.internal.launching.*;
+import org.eclipse.pde.internal.launching.ILaunchingPreferenceConstants;
+import org.eclipse.pde.internal.launching.PDELaunchingPlugin;
 import org.eclipse.pde.internal.ui.*;
+import org.eclipse.pde.internal.ui.launcher.BaseBlock;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -31,7 +32,86 @@ import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.*;
 import org.osgi.service.prefs.BackingStoreException;
 
+/**
+ * This is the top level preference page for PDE.  It contains a random assortment of preferences that don't belong to other pages.
+ *
+ */
 public class MainPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+
+	private final class DefaultRuntimeWorkspaceBlock extends BaseBlock {
+
+		DefaultRuntimeWorkspaceBlock() {
+			super(null);
+		}
+
+		public void createControl(Composite parent) {
+			Group group = SWTFactory.createGroup(parent, PDEUIMessages.MainPreferencePage_runtimeWorkspaceGroup, 2, 1, GridData.FILL_HORIZONTAL);
+			Composite radios = SWTFactory.createComposite(group, 2, 2, GridData.FILL_HORIZONTAL, 0, 0);
+
+			fRuntimeWorkspaceLocationRadio = new Button(radios, SWT.RADIO);
+			fRuntimeWorkspaceLocationRadio.setText(PDEUIMessages.MainPreferencePage_runtimeWorkspace_asLocation);
+			fRuntimeWorkspaceLocationRadio.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+			fRuntimeWorkspaceLocationRadio.setSelection(true);
+
+			fRuntimeWorkspacesContainerRadio = new Button(radios, SWT.RADIO);
+			fRuntimeWorkspacesContainerRadio.setText(PDEUIMessages.MainPreferencePage_runtimeWorkspace_asContainer);
+			fRuntimeWorkspacesContainerRadio.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+			createText(group, PDEUIMessages.WorkspaceDataBlock_location, 0);
+			((GridData) fLocationText.getLayoutData()).widthHint = 200;
+			fRuntimeWorkspaceLocation = fLocationText;
+
+			Composite buttons = SWTFactory.createComposite(group, 3, 2, GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL, 0, 0);
+			createButtons(buttons, new String[] {PDEUIMessages.MainPreferencePage_runtimeWorkspace_workspace, PDEUIMessages.MainPreferencePage_runtimeWorkspace_fileSystem, PDEUIMessages.MainPreferencePage_runtimeWorkspace_variables});
+		}
+
+		protected String getName() {
+			return PDEUIMessages.WorkspaceDataBlock_name;
+		}
+
+		protected boolean isFile() {
+			return false;
+		}
+	}
+
+	private final class DefaultJUnitWorkspaceBlock extends BaseBlock {
+
+		DefaultJUnitWorkspaceBlock() {
+			super(null);
+		}
+
+		public void createControl(Composite parent) {
+			Group group = SWTFactory.createGroup(parent, PDEUIMessages.MainPreferencePage_junitWorkspaceGroup, 2, 1, GridData.FILL_HORIZONTAL);
+			Composite radios = SWTFactory.createComposite(group, 2, 2, GridData.FILL_HORIZONTAL, 0, 0);
+
+			fJUnitWorkspaceLocationRadio = new Button(radios, SWT.RADIO);
+			fJUnitWorkspaceLocationRadio.setText(PDEUIMessages.MainPreferencePage_junitWorkspace_asLocation);
+			fJUnitWorkspaceLocationRadio.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+			fJUnitWorkspaceLocationRadio.setSelection(true);
+
+			fJUnitWorkspacesContainerRadio = new Button(radios, SWT.RADIO);
+			fJUnitWorkspacesContainerRadio.setText(PDEUIMessages.MainPreferencePage_junitWorkspace_asContainer);
+			fJUnitWorkspacesContainerRadio.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+			createText(group, PDEUIMessages.WorkspaceDataBlock_location, 0);
+			((GridData) fLocationText.getLayoutData()).widthHint = 200;
+			fJUnitWorkspaceLocation = fLocationText;
+
+			Composite buttons = SWTFactory.createComposite(group, 3, 2, GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL, 0, 0);
+			createButtons(buttons, new String[] {PDEUIMessages.MainPreferencePage_junitWorkspace_workspace, PDEUIMessages.MainPreferencePage_junitWorkspace_fileSystem, PDEUIMessages.MainPreferencePage_junitWorkspace_variables});
+		}
+
+		protected String getName() {
+			return PDEUIMessages.DefaultJUnitWorkspaceBlock_name;
+		}
+
+		protected boolean isFile() {
+			return false;
+		}
+	}
+
+	public static final String ID = "org.eclipse.pde.ui.MainPreferencePage"; //$NON-NLS-1$
+
 	private Button fUseID;
 	private Button fUseName;
 	private Button fAutoManage;
@@ -40,55 +120,41 @@ public class MainPreferencePage extends PreferencePage implements IWorkbenchPref
 	private Button fPromptOnRemove;
 	private Button fAddToJavaSearch;
 
+	private Text fRuntimeWorkspaceLocation;
+	private Button fRuntimeWorkspaceLocationRadio;
+	private Button fRuntimeWorkspacesContainerRadio;
+
+	private Text fJUnitWorkspaceLocation;
+	private Button fJUnitWorkspaceLocationRadio;
+	private Button fJUnitWorkspacesContainerRadio;
+
 	public MainPreferencePage() {
 		setPreferenceStore(PDEPlugin.getDefault().getPreferenceStore());
 		setDescription(PDEUIMessages.Preferences_MainPage_Description);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+	 */
 	protected Control createContents(Composite parent) {
 		IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
 		PDEPreferencesManager launchingStore = PDELaunchingPlugin.getDefault().getPreferenceManager();
 
-		Composite composite = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.verticalSpacing = 15;
-		composite.setLayout(layout);
-
-		Group group = SWTFactory.createGroup(composite, PDEUIMessages.Preferences_MainPage_showObjects, 1, 1, GridData.FILL_HORIZONTAL);
-
-		fUseID = new Button(group, SWT.RADIO);
-		fUseID.setText(PDEUIMessages.Preferences_MainPage_useIds);
-
-		fUseName = new Button(group, SWT.RADIO);
-		fUseName.setText(PDEUIMessages.Preferences_MainPage_useFullNames);
-
-		if (store.getString(IPreferenceConstants.PROP_SHOW_OBJECTS).equals(IPreferenceConstants.VALUE_USE_IDS)) {
-			fUseID.setSelection(true);
-		} else {
-			fUseName.setSelection(true);
-		}
-
-		group = SWTFactory.createGroup(composite, PDEUIMessages.MainPreferencePage_group2, 1, 1, GridData.FILL_HORIZONTAL);
+		Composite composite = SWTFactory.createComposite(parent, 1, 1, GridData.FILL_BOTH, 0, 0);
+		((GridLayout) composite.getLayout()).verticalSpacing = 15;
+		((GridLayout) composite.getLayout()).marginTop = 15;
 
-		fAutoManage = new Button(group, SWT.CHECK);
-		fAutoManage.setText(PDEUIMessages.MainPreferencePage_updateStale);
-		fAutoManage.setSelection(launchingStore.getBoolean(ILaunchingPreferenceConstants.PROP_AUTO_MANAGE));
-
-		group = SWTFactory.createGroup(composite, PDEUIMessages.MainPreferencePage_exportingGroup, 1, 1, GridData.FILL_HORIZONTAL);
+		Composite optionComp = SWTFactory.createComposite(composite, 1, 1, GridData.FILL_HORIZONTAL, 0, 0);
 
-		fOverwriteBuildFiles = new Button(group, SWT.CHECK);
+		fOverwriteBuildFiles = new Button(optionComp, SWT.CHECK);
 		fOverwriteBuildFiles.setText(PDEUIMessages.MainPreferencePage_promptBeforeOverwrite);
 		fOverwriteBuildFiles.setSelection(!MessageDialogWithToggle.ALWAYS.equals(store.getString(IPreferenceConstants.OVERWRITE_BUILD_FILES_ON_EXPORT)));
 
-		group = SWTFactory.createGroup(composite, PDEUIMessages.MainPreferencePage_sourceGroup, 1, 1, GridData.FILL_HORIZONTAL);
-
-		fShowSourceBundles = new Button(group, SWT.CHECK);
-		fShowSourceBundles.setText(PDEUIMessages.MainPreferencePage_showSourceBundles);
-		fShowSourceBundles.setSelection(store.getBoolean(IPreferenceConstants.PROP_SHOW_SOURCE_BUNDLES));
-
-		group = SWTFactory.createGroup(composite, PDEUIMessages.MainPreferencePage_targetDefinitionsGroup, 1, 1, GridData.FILL_HORIZONTAL);
+		fAutoManage = new Button(optionComp, SWT.CHECK);
+		fAutoManage.setText(PDEUIMessages.MainPreferencePage_updateStale);
+		fAutoManage.setSelection(launchingStore.getBoolean(ILaunchingPreferenceConstants.PROP_AUTO_MANAGE));
 
-		fPromptOnRemove = new Button(group, SWT.CHECK);
+		fPromptOnRemove = new Button(optionComp, SWT.CHECK);
 		fPromptOnRemove.setText(PDEUIMessages.MainPreferencePage_promtBeforeRemove);
 		fPromptOnRemove.setSelection(!MessageDialogWithToggle.ALWAYS.equals(store.getString(IPreferenceConstants.PROP_PROMPT_REMOVE_TARGET)));
 		fPromptOnRemove.addSelectionListener(new SelectionAdapter() {
@@ -100,14 +166,42 @@ public class MainPreferencePage extends PreferencePage implements IWorkbenchPref
 
 		});
 
-		fAddToJavaSearch = new Button(group, SWT.CHECK);
+		fAddToJavaSearch = new Button(optionComp, SWT.CHECK);
 		fAddToJavaSearch.setText(PDEUIMessages.MainPreferencePage_addToJavaSearch);
 		fAddToJavaSearch.setSelection(store.getBoolean(IPreferenceConstants.ADD_TO_JAVA_SEARCH));
+
+		Group group = SWTFactory.createGroup(composite, PDEUIMessages.Preferences_MainPage_showObjects, 2, 1, GridData.FILL_HORIZONTAL);
+		fUseID = new Button(group, SWT.RADIO);
+		fUseID.setText(PDEUIMessages.Preferences_MainPage_useIds);
+
+		fUseName = new Button(group, SWT.RADIO);
+		fUseName.setText(PDEUIMessages.Preferences_MainPage_useFullNames);
+
+		fShowSourceBundles = SWTFactory.createCheckButton(group, PDEUIMessages.MainPreferencePage_showSourceBundles, null, store.getBoolean(IPreferenceConstants.PROP_SHOW_SOURCE_BUNDLES), 2);
+
+		if (store.getString(IPreferenceConstants.PROP_SHOW_OBJECTS).equals(IPreferenceConstants.VALUE_USE_IDS)) {
+			fUseID.setSelection(true);
+		} else {
+			fUseName.setSelection(true);
+		}
+
+		new DefaultRuntimeWorkspaceBlock().createControl(composite);
+		fRuntimeWorkspaceLocation.setText(launchingStore.getString(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION));
+		boolean runtimeLocationIsContainer = launchingStore.getBoolean(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION_IS_CONTAINER);
+		fRuntimeWorkspaceLocationRadio.setSelection(!runtimeLocationIsContainer);
+		fRuntimeWorkspacesContainerRadio.setSelection(runtimeLocationIsContainer);
+
+		new DefaultJUnitWorkspaceBlock().createControl(composite);
+		fJUnitWorkspaceLocation.setText(launchingStore.getString(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION));
+		boolean jUnitLocationIsContainer = launchingStore.getBoolean(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION_IS_CONTAINER);
+		fJUnitWorkspaceLocationRadio.setSelection(!jUnitLocationIsContainer);
+		fJUnitWorkspacesContainerRadio.setSelection(jUnitLocationIsContainer);
+
 		return composite;
 	}
 
-	public void createControl(Composite parent) {
-		super.createControl(parent);
+	public void createControl(Composite composite) {
+		super.createControl(composite);
 		Dialog.applyDialogFont(getControl());
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.MAIN_PREFERENCE_PAGE);
 	}
@@ -141,16 +235,14 @@ public class MainPreferencePage extends PreferencePage implements IWorkbenchPref
 
 		PDEPlugin.getDefault().getPreferenceManager().savePluginPreferences();
 
-		// write AUTO_MANAGE setting to pde.launching instance scope 
-		IEclipsePreferences instancePrefs = new InstanceScope().getNode(IPDEConstants.PLUGIN_ID);
-		IEclipsePreferences defaultPrefs = new DefaultScope().getNode(IPDEConstants.PLUGIN_ID);
-		if (defaultPrefs.getBoolean(ILaunchingPreferenceConstants.PROP_AUTO_MANAGE, false) == fAutoManage.getSelection()) {
-			instancePrefs.remove(ILaunchingPreferenceConstants.PROP_AUTO_MANAGE);
-		} else {
-			instancePrefs.putBoolean(ILaunchingPreferenceConstants.PROP_AUTO_MANAGE, fAutoManage.getSelection());
-		}
+		PDEPreferencesManager launchingStore = PDELaunchingPlugin.getDefault().getPreferenceManager();
+		launchingStore.setValueOrRemove(ILaunchingPreferenceConstants.PROP_AUTO_MANAGE, fAutoManage.getSelection());
+		launchingStore.setValueOrRemove(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION, fRuntimeWorkspaceLocation.getText());
+		launchingStore.setValueOrRemove(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION_IS_CONTAINER, fRuntimeWorkspacesContainerRadio.getSelection());
+		launchingStore.setValueOrRemove(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION, fJUnitWorkspaceLocation.getText());
+		launchingStore.setValueOrRemove(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION_IS_CONTAINER, fJUnitWorkspacesContainerRadio.getSelection());
 		try {
-			instancePrefs.flush();
+			launchingStore.flush();
 		} catch (BackingStoreException e) {
 			PDEPlugin.log(e);
 		}
@@ -173,6 +265,17 @@ public class MainPreferencePage extends PreferencePage implements IWorkbenchPref
 		fPromptOnRemove.setSelection(true);
 
 		fAddToJavaSearch.setSelection(store.getDefaultBoolean(IPreferenceConstants.ADD_TO_JAVA_SEARCH));
+
+		PDEPreferencesManager launchingStore = PDELaunchingPlugin.getDefault().getPreferenceManager();
+		boolean runtimeLocationIsContainer = launchingStore.getDefaultBoolean(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION_IS_CONTAINER);
+		fRuntimeWorkspaceLocationRadio.setSelection(!runtimeLocationIsContainer);
+		fRuntimeWorkspacesContainerRadio.setSelection(runtimeLocationIsContainer);
+		fRuntimeWorkspaceLocation.setText(launchingStore.getDefaultString(ILaunchingPreferenceConstants.PROP_RUNTIME_WORKSPACE_LOCATION));
+
+		boolean jUnitLocationIsContainer = launchingStore.getDefaultBoolean(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION_IS_CONTAINER);
+		fJUnitWorkspaceLocationRadio.setSelection(!jUnitLocationIsContainer);
+		fJUnitWorkspacesContainerRadio.setSelection(jUnitLocationIsContainer);
+		fJUnitWorkspaceLocation.setText(launchingStore.getDefaultString(ILaunchingPreferenceConstants.PROP_JUNIT_WORKSPACE_LOCATION));
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java
index cb4cc97..f1ef0d5 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     EclipseSource Corporation - initial API and implementation
+ *     IBM Corporation - ongoing enhancements
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.preferences;
 
@@ -233,7 +234,7 @@ public class TargetPlatformPreferencePage extends PreferencePage implements IWor
 
 		fTableViewer = CheckboxTableViewer.newCheckList(tableComposite, SWT.MULTI | SWT.BORDER);
 		GridData gd = new GridData(GridData.FILL_BOTH);
-		gd.heightHint = 300;
+		gd.heightHint = 250;
 		fTableViewer.getControl().setLayoutData(gd);
 		fTableViewer.setLabelProvider(new TargetLabelProvider());
 		fTableViewer.setContentProvider(ArrayContentProvider.getInstance());
@@ -820,17 +821,20 @@ public class TargetPlatformPreferencePage extends PreferencePage implements IWor
 		updateButtons();
 		// start job to do GC
 		if (gc) {
-			final TargetPlatformService finalService = (TargetPlatformService) service;
-			Job job = new Job(PDEUIMessages.TargetPlatformPreferencePage2_26) {
-				protected IStatus run(IProgressMonitor monitor) {
-					monitor.beginTask(PDEUIMessages.TargetPlatformPreferencePage2_27, IProgressMonitor.UNKNOWN);
-					finalService.garbageCollect();
-					monitor.done();
-					return Status.OK_STATUS;
-				}
-			};
-			job.schedule();
+			runGC();
 		}
 		return super.performOk();
 	}
+
+	private void runGC() {
+		Job job = new Job(PDEUIMessages.TargetPlatformPreferencePage2_26) {
+			protected IStatus run(IProgressMonitor monitor) {
+				monitor.beginTask(PDEUIMessages.TargetPlatformPreferencePage2_27, IProgressMonitor.UNKNOWN);
+				P2TargetUtils.garbageCollect();
+				monitor.done();
+				return Status.OK_STATUS;
+			}
+		};
+		job.schedule();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/provisional/IBundeImportWizardPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/provisional/IBundeImportWizardPage.java
deleted file mode 100644
index 568b76d..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/provisional/IBundeImportWizardPage.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.provisional;
-
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
-
-/**
- * A wizard page contributed by a <code>org.eclipse.pde.ui.bundleImportPages</code>
- * extension.
- * <p>
- * <strong>EXPERIMENTAL</strong>. This interface has been added as
- * part of a work in progress. There is no guarantee that this API will
- * work or that it will remain the same. Please do not use this API without
- * consulting with the PDE team.
- * </p>
- * @since 3.6
- */
-public interface IBundeImportWizardPage extends IWizardPage {
-	/**
-	 * Called when the import wizard is closed by selecting 
-	 * the finish button.
-	 * Implementers may store the page result (new/changed bundle
-	 * import descriptions in getSelection) here.
-	 * 
-	 * @return if the operation was successful. The wizard will only close
-	 * when <code>true</code> is returned.
-	 */
-	public boolean finish();
-
-	/**
-	 * Returns the bundle import descriptions edited or created on the page 
-	 * after the wizard has closed.
-	 * Returns bundle import descriptions initially set using 
-	 * <code>setSelection</code>if the wizard has not been 
-	 * closed yet.
-	 * 
-	 * @return the bundle import descriptions edited or created on the page.
-	 */
-	public BundleImportDescription[] getSelection();
-
-	/**
-	 * Sets the bundle import descriptions to be edited on the page.
-	 * The passed descriptions can be edited and should be 
-	 * returned in getSelection().
-	 * 
-	 * @param descriptions the bundle import descriptions edited on the page.
-	 */
-	public void setSelection(BundleImportDescription[] descriptions);
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/PluginSearchPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/PluginSearchPage.java
index 270a388..39f1b1f 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/PluginSearchPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/PluginSearchPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.pde.internal.ui.search;
 
 import java.util.*;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.dialogs.Dialog;
@@ -27,8 +28,7 @@ import org.eclipse.swt.events.*;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.IWorkingSet;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.*;
 
 public class PluginSearchPage extends DialogPage implements ISearchPage {
 
@@ -183,6 +183,8 @@ public class PluginSearchPage extends DialogPage implements ISearchPage {
 					if (item instanceof IResource)
 						result.add(((IResource) item).getProject());
 				}
+			} else if (container.getActiveEditorInput() != null) {
+				result.add(container.getActiveEditorInput().getAdapter(IFile.class));
 			}
 		} else if (scope == ISearchPageContainer.WORKING_SET_SCOPE) {
 			IWorkingSet[] workingSets = container.getSelectedWorkingSets();
@@ -308,6 +310,10 @@ public class PluginSearchPage extends DialogPage implements ISearchPage {
 			}
 			patternCombo.setFocus();
 		}
+
+		IEditorInput editorInput = container.getActiveEditorInput();
+		container.setActiveEditorCanProvideScopeSelection(editorInput != null && editorInput.getAdapter(IFile.class) != null);
+
 		super.setVisible(visible);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/ShowDescriptionAction.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/ShowDescriptionAction.java
index 4ab1c16..c9045c2 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/ShowDescriptionAction.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/ShowDescriptionAction.java
@@ -11,6 +11,8 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.search;
 
+import org.eclipse.pde.internal.core.ICoreConstants;
+
 import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -119,7 +121,7 @@ public class ShowDescriptionAction extends Action {
 
 			SchemaTransformer transformer = new SchemaTransformer();
 			OutputStream os = new FileOutputStream(fPreviewFile);
-			PrintWriter printWriter = new PrintWriter(os, true);
+			PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(os, ICoreConstants.UTF_8), true);
 			transformer.transform(fSchema, printWriter);
 			os.flush();
 			os.close();
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/FilteredIUSelectionDialog.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/FilteredIUSelectionDialog.java
index 26e7954..31e5ce6 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/FilteredIUSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/FilteredIUSelectionDialog.java
@@ -13,7 +13,6 @@ package org.eclipse.pde.internal.ui.search.dialogs;
 import java.util.Comparator;
 import java.util.Iterator;
 import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.equinox.p2.metadata.IProvidedCapability;
 import org.eclipse.equinox.p2.query.IQuery;
@@ -24,6 +23,7 @@ import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.core.target.Messages;
+import org.eclipse.pde.internal.core.target.P2TargetUtils;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -67,6 +67,13 @@ public class FilteredIUSelectionDialog extends FilteredItemsSelectionDialog {
 				styledString.append("(", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
 				styledString.append(iuPackage.getVersion().toString(), StyledString.QUALIFIER_STYLER);
 				styledString.append(")", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
+				IInstallableUnit iu = iuPackage.getIU();
+				styledString.append(" from ", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
+				styledString.append(iu.getId(), StyledString.QUALIFIER_STYLER);
+				styledString.append(' ');
+				styledString.append("(", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
+				styledString.append(iu.getVersion().toString(), StyledString.QUALIFIER_STYLER);
+				styledString.append(")", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
 			} else if (element instanceof IInstallableUnit) {
 				IInstallableUnit iu = (IInstallableUnit) element;
 				String name = iu.getProperty(IInstallableUnit.PROP_NAME, null);
@@ -190,10 +197,9 @@ public class FilteredIUSelectionDialog extends FilteredItemsSelectionDialog {
 	 */
 	protected void fillContentProvider(AbstractContentProvider contentProvider, ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException {
 		// TODO clean up this code a bit...
-		IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		if (agent == null)
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_7));
-		IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
+		IMetadataRepositoryManager manager = P2TargetUtils.getRepoManager();
+		if (manager == null)
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, Messages.IUBundleContainer_2));
 
 		//URI[] knownRepositories = metadataManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
 		IQuery pipedQuery;
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java
index 701cdf8..ac9476c 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dialogs/TargetRepositorySearchHandler.java
@@ -78,10 +78,9 @@ public class TargetRepositorySearchHandler extends AbstractHandler implements IH
 		ITargetPlatformService service = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
 		ITargetHandle currentTarget = service.getWorkspaceTargetHandle();
 		ITargetDefinition definition = currentTarget.getTargetDefinition();
-		IUBundleContainer container = (IUBundleContainer) service.newIUContainer(units, repositories);
 		// Force the target into slicer mode as all requirements may not be available
-		container.setIncludeAllRequired(false, definition);
-		container.setIncludeAllEnvironments(true, definition);
+		int flags = IUBundleContainer.INCLUDE_ALL_ENVIRONMENTS | IUBundleContainer.INCLUDE_SOURCE;
+		IUBundleContainer container = (IUBundleContainer) service.newIUContainer(units, repositories, flags);
 		IBundleContainer[] oldContainers = definition.getBundleContainers();
 		if (oldContainers == null) {
 			definition.setBundleContainers(new IBundleContainer[] {container});
@@ -91,8 +90,7 @@ public class TargetRepositorySearchHandler extends AbstractHandler implements IH
 			newContainers[newContainers.length - 1] = container;
 			definition.setBundleContainers(newContainers);
 			service.saveTargetDefinition(definition);
-			LoadTargetDefinitionJob job = new LoadTargetDefinitionJob(definition);
-			job.schedule();
+			LoadTargetDefinitionJob.load(definition);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/CachedCheckboxTreeViewer.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/CachedCheckboxTreeViewer.java
index 7d70d24..91691b6 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/CachedCheckboxTreeViewer.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/CachedCheckboxTreeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
 public class CachedCheckboxTreeViewer extends ContainerCheckedTreeViewer {
 
 	private Set checkState = new HashSet();
+	private static final Object[] NO_ELEMENTS = new Object[0];
 
 	/**
 	 * Constructor for ContainerCheckedTreeViewer.
@@ -64,10 +65,12 @@ public class CachedCheckboxTreeViewer extends ContainerCheckedTreeViewer {
 					for (int i = 0; i < children.length; i++) {
 						updateCheckState(children[i], state);
 					}
-				} else {
+				} else if (!checkState.contains(element)) {
+					// Check if already added to avoid concurrent modification exceptions
 					checkState.add(element);
 				}
-			} else {
+			} else if (!checkState.contains(element)) {
+				// Check if already added to avoid concurrent modification exceptions
 				checkState.add(element);
 			}
 		} else if (checkState != null) {
@@ -101,14 +104,17 @@ public class CachedCheckboxTreeViewer extends ContainerCheckedTreeViewer {
 
 		getTree().setRedraw(false);
 		// Call the super class so we don't mess up the cache
-		super.setCheckedElements(new Object[0]);
-		setGrayedElements(new Object[0]);
+		super.setCheckedElements(NO_ELEMENTS);
+		setGrayedElements(NO_ELEMENTS);
+		// The elements must be expanded to modify their check state
+		if (!checkState.isEmpty()) {
+			expandAll();
+		}
 		// Now we are only going to set the check state of the leaf nodes
 		// and rely on our container checked code to update the parents properly.
 		Iterator iter = checkState.iterator();
 		Object element = null;
-		if (iter.hasNext())
-			expandAll();
+
 		while (iter.hasNext()) {
 			element = iter.next();
 			// Call the super class as there is no need to update the check state
@@ -125,7 +131,7 @@ public class CachedCheckboxTreeViewer extends ContainerCheckedTreeViewer {
 	 */
 	public Object[] getCheckedLeafElements() {
 		if (checkState == null) {
-			return new Object[0];
+			return NO_ELEMENTS;
 		}
 		return checkState.toArray(new Object[checkState.size()]);
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddBundleContainerSelectionPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddBundleContainerSelectionPage.java
index 7fafa47..ca62b9b 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddBundleContainerSelectionPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddBundleContainerSelectionPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.shared.target;
 
-import org.eclipse.equinox.p2.engine.IProfile;
-
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
@@ -20,7 +18,6 @@ import org.eclipse.jface.dialogs.*;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.jface.wizard.*;
 import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.core.target.TargetDefinition;
 import org.eclipse.pde.internal.core.target.provisional.*;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.pde.internal.ui.wizards.WizardElement;
@@ -101,6 +98,7 @@ public class AddBundleContainerSelectionPage extends WizardSelectionPage {
 		// limit the width of the sash form to avoid the wizard opening very wide.
 		gd.widthHint = 300;
 		sashForm.setLayoutData(gd);
+		sashForm.setFont(comp.getFont());
 
 		TableViewer wizardSelectionViewer = new TableViewer(sashForm, SWT.BORDER);
 		wizardSelectionViewer.setContentProvider(new ArrayContentProvider());
@@ -138,6 +136,7 @@ public class AddBundleContainerSelectionPage extends WizardSelectionPage {
 			}
 		});
 		wizardSelectionViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
+		wizardSelectionViewer.getTable().setFont(sashForm.getFont());
 
 		fDescription = SWTFactory.createText(sashForm, SWT.READ_ONLY | SWT.BORDER | SWT.MULTI | SWT.WRAP, 1);
 
@@ -292,14 +291,7 @@ public class AddBundleContainerSelectionPage extends WizardSelectionPage {
 							settings = PDEPlugin.getDefault().getDialogSettings().addNewSection(SETTINGS_SECTION);
 						}
 						setDialogSettings(settings);
-						// TODO Use proper API to get the profile
-						IProfile profile = null;
-						try {
-							profile = ((TargetDefinition) fTarget).getProfile();
-						} catch (CoreException e) {
-							PDEPlugin.log(e);
-						}
-						addPage(new EditIUContainerPage(fTarget, profile));
+						addPage(new EditIUContainerPage(fTarget));
 					}
 
 					public boolean performFinish() {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddFeatureContainersPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddFeatureContainersPage.java
index 80bb121..c5008fc 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddFeatureContainersPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/AddFeatureContainersPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,6 +88,7 @@ public class AddFeatureContainersPage extends EditDirectoryContainerPage {
 		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
 		data.heightHint = 300;
 		fFeatureTable.getControl().setLayoutData(data);
+		fFeatureTable.getControl().setFont(tableComp.getFont());
 
 		fFeatureTable.addCheckStateListener(new ICheckStateListener() {
 			public void checkStateChanged(CheckStateChangedEvent event) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditBundleContainerWizard.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditBundleContainerWizard.java
index 6c70a6c..5a68d55 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditBundleContainerWizard.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditBundleContainerWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.shared.target;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.pde.internal.core.target.*;
@@ -50,12 +49,7 @@ public class EditBundleContainerWizard extends Wizard {
 		} else if (fContainer instanceof FeatureBundleContainer) {
 			fPage = new EditFeatureContainerPage(fContainer);
 		} else if (fContainer instanceof IUBundleContainer) {
-			try {
-				// TODO Use proper API to get the profile if available
-				fPage = new EditIUContainerPage((IUBundleContainer) fContainer, fTarget, ((TargetDefinition) fTarget).getProfile());
-			} catch (CoreException e) {
-				PDEPlugin.log(e);
-			}
+			fPage = new EditIUContainerPage((IUBundleContainer) fContainer, fTarget);
 		}
 		if (fPage != null) {
 			addPage(fPage);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditIUContainerPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditIUContainerPage.java
index 947e48b..9388cd0 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditIUContainerPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditIUContainerPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,8 +18,8 @@ import org.eclipse.equinox.internal.p2.ui.ProvUI;
 import org.eclipse.equinox.internal.p2.ui.actions.PropertyDialogAction;
 import org.eclipse.equinox.internal.p2.ui.dialogs.*;
 import org.eclipse.equinox.internal.p2.ui.query.IUViewQueryContext;
-import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.operations.ProvisioningSession;
 import org.eclipse.equinox.p2.ui.Policy;
 import org.eclipse.equinox.p2.ui.ProvisioningUI;
 import org.eclipse.jface.action.IAction;
@@ -30,6 +30,7 @@ import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.core.target.IUBundleContainer;
+import org.eclipse.pde.internal.core.target.P2TargetUtils;
 import org.eclipse.pde.internal.core.target.provisional.*;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.swt.SWT;
@@ -68,11 +69,6 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 	private IUBundleContainer fEditContainer;
 
 	/**
-	 * Profile from the target
-	 */
-	private IProfile fProfile;
-
-	/**
 	 * Used to provide special attributes/filtering to the available iu group 
 	 */
 	private IUViewQueryContext fQueryContext;
@@ -91,24 +87,27 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 	private Button fShowOldVersionsButton;
 	private Button fIncludeRequiredButton;
 	private Button fAllPlatformsButton;
+	private Button fIncludeSourceButton;
 	private Text fDetailsText;
 	private ProvisioningUI profileUI;
 
 	/**
 	 * Constructor for creating a new container
-	 * @param profile profile from the parent target, used to setup the p2 UI
+	 * @param definition the target definition we are editing
 	 */
-	protected EditIUContainerPage(ITargetDefinition definition, IProfile profile) {
+	protected EditIUContainerPage(ITargetDefinition definition) {
 		super("AddP2Container"); //$NON-NLS-1$
 		setTitle(Messages.EditIUContainerPage_5);
 		setMessage(Messages.EditIUContainerPage_6);
 		fTarget = definition;
-		fProfile = profile;
-		ProvisioningUI selfProvisioningUI = ProvisioningUI.getDefaultUI();
-		// TODO we use the service session from the self profile.  In the future we may want
-		// to set up our own services for the profile (separate repo managers, etc).
-		// We use our own new policy so we don't bash the SDK's settings.
-		profileUI = new ProvisioningUI(selfProvisioningUI.getSession(), profile.getProfileId(), new Policy());
+		ProvisioningSession session;
+		try {
+			session = new ProvisioningSession(P2TargetUtils.getAgent());
+		} catch (CoreException e) {
+			PDEPlugin.log(e);
+			session = ProvisioningUI.getDefaultUI().getSession();
+		}
+		profileUI = new ProvisioningUI(session, P2TargetUtils.getProfileId(definition), new Policy());
 	}
 
 	/**
@@ -116,8 +115,8 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 	 * @param container the container to edit
 	 * @param profile profile from the parent target, used to setup the p2 UI
 	 */
-	protected EditIUContainerPage(IUBundleContainer container, ITargetDefinition definition, IProfile profile) {
-		this(definition, profile);
+	protected EditIUContainerPage(IUBundleContainer container, ITargetDefinition definition) {
+		this(definition);
 		setTitle(Messages.EditIUContainerPage_7);
 		setMessage(Messages.EditIUContainerPage_6);
 		fEditContainer = container;
@@ -131,9 +130,10 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 		if (service == null) {
 			PDEPlugin.log(new Status(IStatus.ERROR, PDEPlugin.getPluginId(), Messages.EditIUContainerPage_9));
 		}
-		IUBundleContainer container = (IUBundleContainer) service.newIUContainer(fAvailableIUGroup.getCheckedLeafIUs(), fRepoLocation != null ? new URI[] {fRepoLocation} : null);
-		container.setIncludeAllRequired(fIncludeRequiredButton.getSelection(), fTarget);
-		container.setIncludeAllEnvironments(fAllPlatformsButton.getSelection(), fTarget);
+		int flags = fIncludeRequiredButton.getSelection() ? IUBundleContainer.INCLUDE_REQUIRED : 0;
+		flags |= fAllPlatformsButton.getSelection() ? IUBundleContainer.INCLUDE_ALL_ENVIRONMENTS : 0;
+		flags |= fIncludeSourceButton.getSelection() ? IUBundleContainer.INCLUDE_SOURCE : 0;
+		IUBundleContainer container = (IUBundleContainer) service.newIUContainer(fAvailableIUGroup.getCheckedLeafIUs(), fRepoLocation != null ? new URI[] {fRepoLocation} : null, flags);
 		return container;
 	}
 
@@ -296,32 +296,38 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 			}
 		});
 		((GridData) fAllPlatformsButton.getLayoutData()).horizontalIndent = 10;
+		fIncludeSourceButton = SWTFactory.createCheckButton(slicerGroup, Messages.EditIUContainerPage_16, null, true, 1);
+		fIncludeSourceButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				warnIfGlobalSettingChanged();
+			}
+		});
 	}
 
 	private void warnIfGlobalSettingChanged() {
-		boolean warn = false;
-		if (fTarget != null) {
-			IBundleContainer[] containers = fTarget.getBundleContainers();
-			if (containers != null) {
-				for (int i = 0; i < containers.length; i++) {
-					if (containers[i] instanceof IUBundleContainer && containers[i] != fEditContainer) {
-						IUBundleContainer container = (IUBundleContainer) containers[i];
-						if (container.getIncludeAllRequired() != fIncludeRequiredButton.getSelection()) {
-							warn = true;
-							break;
-						}
-						if (!fIncludeRequiredButton.getSelection() && container.getIncludeAllEnvironments() != fAllPlatformsButton.getSelection()) {
-							warn = true;
-							break;
-						}
-					}
+		boolean noChange = true;
+		IUBundleContainer iuContainer = null;
+		IBundleContainer[] containers = fTarget.getBundleContainers();
+		if (containers != null) {
+			// Look for a IUBundleContainer to compare against.
+			for (int i = 0; i < containers.length; i++) {
+				if (containers[i] instanceof IUBundleContainer && containers[i] != fEditContainer) {
+					iuContainer = (IUBundleContainer) containers[i];
+					break;
 				}
 			}
+			// If there is another IU container then compare against it.  No need to check them all
+			// as they will all be set the same within one target.
+			if (iuContainer != null) {
+				noChange &= fIncludeRequiredButton.getSelection() == iuContainer.getIncludeAllRequired();
+				noChange &= fAllPlatformsButton.getSelection() == iuContainer.getIncludeAllEnvironments();
+				noChange &= fIncludeSourceButton.getSelection() == iuContainer.getIncludeSource();
+			}
 		}
-		if (warn) {
-			setMessage(Messages.EditIUContainerPage_4, IStatus.WARNING);
-		} else {
+		if (noChange) {
 			setMessage(Messages.EditIUContainerPage_6);
+		} else {
+			setMessage(Messages.EditIUContainerPage_4, IStatus.WARNING);
 		}
 	}
 
@@ -329,8 +335,8 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 	 * Creates a default query context to setup the available IU Group
 	 */
 	private void createQueryContext() {
-		fQueryContext = ProvUI.getQueryContext(ProvisioningUI.getDefaultUI().getPolicy());
-		fQueryContext.setInstalledProfileId(fProfile.getProfileId());
+		fQueryContext = ProvUI.getQueryContext(profileUI.getPolicy());
+		fQueryContext.setInstalledProfileId(P2TargetUtils.getProfileId(fTarget));
 		fQueryContext.showAlreadyInstalled();
 	}
 
@@ -454,6 +460,7 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 		if (fEditContainer != null) {
 			fIncludeRequiredButton.setSelection(fEditContainer.getIncludeAllRequired());
 			fAllPlatformsButton.setSelection(fEditContainer.getIncludeAllEnvironments());
+			fIncludeSourceButton.setSelection(fEditContainer.getIncludeSource());
 		} else {
 			// If we are creating a new container, but there is an existing iu container we should use it's settings (otherwise we overwrite them)
 			IBundleContainer[] knownContainers = fTarget.getBundleContainers();
@@ -494,7 +501,7 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 				// Only able to check items if we don't have categories
 				fQueryContext.setViewType(IUViewQueryContext.AVAILABLE_VIEW_FLAT);
 				fAvailableIUGroup.updateAvailableViewState();
-				fAvailableIUGroup.setChecked(fEditContainer.getInstallableUnits(fProfile));
+				fAvailableIUGroup.setChecked(fEditContainer.getInstallableUnits());
 				// Make sure view is back in proper state
 				updateViewContext();
 				IInstallableUnit[] units = fAvailableIUGroup.getCheckedLeafIUs();
@@ -506,7 +513,7 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 						fSelectionCount.setText(NLS.bind(Messages.EditIUContainerPage_itemsSelected, Integer.toString(units.length)));
 					}
 				} else {
-					fSelectionCount.setText(NLS.bind(Messages.EditIUContainerPage_itemsSelected, Integer.toString(0))); //$NON-NLS-1$
+					fSelectionCount.setText(NLS.bind(Messages.EditIUContainerPage_itemsSelected, Integer.toString(0)));
 				}
 				fAvailableIUGroup.getCheckboxTreeViewer().collapseAll();
 
@@ -515,5 +522,4 @@ public class EditIUContainerPage extends WizardPage implements IEditBundleContai
 			}
 		}
 	}
-
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditProfileContainerPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditProfileContainerPage.java
index 46204af..fb7b2ee 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditProfileContainerPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/EditProfileContainerPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,6 +101,7 @@ public class EditProfileContainerPage extends EditDirectoryContainerPage {
 		GridData gd = new GridData();
 		gd.horizontalSpan = 2;
 		fUseDefaultConfig.setLayoutData(gd);
+		fUseDefaultConfig.setFont(parent.getFont());
 		fUseDefaultConfig.setText(Messages.AddProfileContainerPage_2);
 		fUseDefaultConfig.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/Messages.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/Messages.java
index 993f511..d0c432f 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/Messages.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2010 IBM Corporation and others.
+ *  Copyright (c) 2005, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -62,6 +62,7 @@ public class Messages extends NLS {
 	public static String BundleContainerTable_14;
 	public static String BundleContainerTable_15;
 	public static String BundleContainerTable_2;
+	public static String BundleContainerTable_3;
 	public static String BundleContainerTable_8;
 	public static String BundleContainerTable_9;
 	public static String EditBundleContainerWizard_0;
@@ -82,6 +83,7 @@ public class Messages extends NLS {
 	public static String EditIUContainerPage_13;
 	public static String EditIUContainerPage_14;
 	public static String EditIUContainerPage_15;
+	public static String EditIUContainerPage_16;
 	public static String EditIUContainerPage_2;
 	public static String EditIUContainerPage_3;
 	public static String EditIUContainerPage_4;
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetContentsGroup.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetContentsGroup.java
index 9b0c449..9d31771 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetContentsGroup.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetContentsGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -183,6 +183,7 @@ public class TargetContentsGroup {
 		layout.marginWidth = layout.marginHeight = 0;
 		comp.setLayout(layout);
 		comp.setLayoutData(new GridData(GridData.FILL_BOTH));
+		comp.setFont(parent.getFont());
 
 		createTree(comp, toolkit);
 		createButtons(comp, toolkit);
@@ -225,9 +226,11 @@ public class TargetContentsGroup {
 		FilteredCheckboxTree tree = new FilteredCheckboxTree(parent, toolkit);
 		tree.setLayoutData(new GridData(GridData.FILL_BOTH));
 		tree.getPatternFilter().setIncludeLeadingWildcard(true);
+		tree.getFilterControl().setFont(parent.getFont());
 
 		fTree = tree.getCheckboxTreeViewer();
 		((GridData) fTree.getControl().getLayoutData()).heightHint = 300;
+		fTree.getControl().setFont(parent.getFont());
 		fTree.setUseHashlookup(true);
 		fTree.setContentProvider(new TreeContentProvider());
 		fTree.setLabelProvider(new StyledBundleLabelProvider(true, false));
@@ -909,6 +912,9 @@ public class TargetContentsGroup {
 				total += ((TargetDefinition) fTargetDefinition).getOtherBundles().length;
 			}
 		}
+		if (fMissing != null) {
+			total += fMissing.size();
+		}
 
 		fSelectAllButton.setEnabled(fTargetDefinition != null && fTree.getCheckedLeafCount() != total);
 		fDeselectAllButton.setEnabled(fTargetDefinition != null && fTree.getCheckedLeafCount() != 0);
@@ -973,7 +979,13 @@ public class TargetContentsGroup {
 			// Checked features and plugins
 			result.addAll(((TargetDefinition) fTargetDefinition).getFeaturesAndBundles());
 		} else {
-			result.addAll(Arrays.asList(fTargetDefinition.getBundles()));
+			// Bundles with errors are already included from fMissing, do not add twice
+			IResolvedBundle[] bundles = fTargetDefinition.getBundles();
+			for (int i = 0; i < bundles.length; i++) {
+				if (bundles[i].getStatus().isOK()) {
+					result.add(bundles[i]);
+				}
+			}
 		}
 		fTree.setCheckedElements(result.toArray());
 	}
@@ -1019,10 +1031,10 @@ public class TargetContentsGroup {
 		if (parent == null) {
 			result = fAllBundles.toArray();
 		} else if (fFeaureModeButton.getSelection() && parent == OTHER_CATEGORY) {
-			return ((TargetDefinition) fTargetDefinition).getOtherBundles();
+			result = ((TargetDefinition) fTargetDefinition).getOtherBundles();
 		} else if (fGrouping == GROUP_BY_CONTAINER && parent instanceof IBundleContainer) {
 			IBundleContainer container = (IBundleContainer) parent;
-			return container.getBundles();
+			result = container.getBundles();
 		} else if (fGrouping == GROUP_BY_FILE_LOC && parent instanceof IPath) {
 			List bundles = (List) getFileBundleMapping().get(parent);
 			if (bundles != null && bundles.size() > 0) {
@@ -1069,6 +1081,7 @@ public class TargetContentsGroup {
 		if (fFeaureModeButton.getSelection()) {
 			// Create a list of checked bundle infos
 			List included = new ArrayList();
+			int missingCount = 0;
 			Object[] checked = fTree.getCheckedLeafElements();
 			for (int i = 0; i < checked.length; i++) {
 				if (checked[i] instanceof IFeatureModel) {
@@ -1078,17 +1091,19 @@ public class TargetContentsGroup {
 					// Missing features are included as IResolvedBundles, save them as features instead
 					if (((IResolvedBundle) checked[i]).getStatus().getCode() == IResolvedBundle.STATUS_PLUGIN_DOES_NOT_EXIST) {
 						included.add(new NameVersionDescriptor(((IResolvedBundle) checked[i]).getBundleInfo().getSymbolicName(), null, NameVersionDescriptor.TYPE_PLUGIN));
+						missingCount++;
 					} else if (((IResolvedBundle) checked[i]).getStatus().getCode() == IResolvedBundle.STATUS_FEATURE_DOES_NOT_EXIST) {
 						included.add(new NameVersionDescriptor(((IResolvedBundle) checked[i]).getBundleInfo().getSymbolicName(), null, NameVersionDescriptor.TYPE_FEATURE));
+						missingCount++;
 					} else {
 						included.add(new NameVersionDescriptor(((IResolvedBundle) checked[i]).getBundleInfo().getSymbolicName(), null));
 					}
 				}
 			}
 
-			if (included == null || included.size() == 0) {
+			if (included.size() == 0) {
 				fTargetDefinition.setIncluded(new NameVersionDescriptor[0]);
-			} else if (included.size() == fTargetDefinition.getAllFeatures().length + ((TargetDefinition) fTargetDefinition).getOtherBundles().length) {
+			} else if (included.size() == 0 || included.size() - missingCount == fTargetDefinition.getAllFeatures().length + ((TargetDefinition) fTargetDefinition).getOtherBundles().length) {
 				fTargetDefinition.setIncluded(null);
 			} else {
 				fTargetDefinition.setIncluded((NameVersionDescriptor[]) included.toArray(new NameVersionDescriptor[included.size()]));
@@ -1123,9 +1138,9 @@ public class TargetContentsGroup {
 				}
 			}
 
-			if (included == null || included.size() == 0) {
+			if (included.size() == 0) {
 				fTargetDefinition.setIncluded(new NameVersionDescriptor[0]);
-			} else if (included.size() == fAllBundles.size()) {
+			} else if (included.size() == fAllBundles.size() + fMissing.size()) {
 				fTargetDefinition.setIncluded(null);
 			} else {
 				fTargetDefinition.setIncluded((NameVersionDescriptor[]) included.toArray(new NameVersionDescriptor[included.size()]));
@@ -1188,10 +1203,17 @@ public class TargetContentsGroup {
 				} else if (fGrouping == GROUP_BY_CONTAINER) {
 					result.addAll(Arrays.asList(fTargetDefinition.getBundleContainers()));
 				} else if (fGrouping == GROUP_BY_NONE) {
-					result.addAll(Arrays.asList(fTargetDefinition.getAllBundles()));
+					// Missing bundles are already handled by adding to fMissing, avoid adding twice
+					IResolvedBundle[] allBundles = fTargetDefinition.getAllBundles();
+					for (int i = 0; i < allBundles.length; i++) {
+						if (allBundles[i].getStatus().isOK()) {
+							result.add(allBundles[i]);
+						}
+					}
 				} else {
 					result.addAll(Arrays.asList(getFileBundleMapping().keySet().toArray()));
 				}
+
 				return result.toArray();
 			}
 			return new Object[] {inputElement};
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetLocationsGroup.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetLocationsGroup.java
index 4772ac4..c3176fb 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetLocationsGroup.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/TargetLocationsGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,13 +13,13 @@ package org.eclipse.pde.internal.ui.shared.target;
 import java.util.*;
 import java.util.List;
 import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.p2.engine.IProfile;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.equinox.p2.metadata.IInstallableUnit;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.pde.internal.core.target.IUBundleContainer;
-import org.eclipse.pde.internal.core.target.TargetDefinition;
+import org.eclipse.pde.internal.core.target.*;
 import org.eclipse.pde.internal.core.target.provisional.*;
 import org.eclipse.pde.internal.ui.SWTFactory;
 import org.eclipse.pde.internal.ui.editor.FormLayoutFactory;
@@ -48,6 +48,7 @@ public class TargetLocationsGroup {
 	private Button fAddButton;
 	private Button fEditButton;
 	private Button fRemoveButton;
+	private Button fUpdateButton;
 	private Button fShowContentButton;
 
 	private ITargetDefinition fTarget;
@@ -130,6 +131,7 @@ public class TargetLocationsGroup {
 		fAddButton = toolkit.createButton(buttonComp, Messages.BundleContainerTable_0, SWT.PUSH);
 		fEditButton = toolkit.createButton(buttonComp, Messages.BundleContainerTable_1, SWT.PUSH);
 		fRemoveButton = toolkit.createButton(buttonComp, Messages.BundleContainerTable_2, SWT.PUSH);
+		fUpdateButton = toolkit.createButton(buttonComp, Messages.BundleContainerTable_3, SWT.PUSH);
 
 		fShowContentButton = toolkit.createButton(comp, Messages.TargetLocationsGroup_1, SWT.CHECK);
 
@@ -147,6 +149,7 @@ public class TargetLocationsGroup {
 		Composite comp = SWTFactory.createComposite(parent, 2, 1, GridData.FILL_BOTH, 0, 0);
 
 		Tree atree = new Tree(comp, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.MULTI);
+		atree.setFont(comp.getFont());
 		atree.setLayout(new GridLayout());
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		gd.widthHint = 200;
@@ -169,6 +172,7 @@ public class TargetLocationsGroup {
 		fAddButton = SWTFactory.createPushButton(buttonComp, Messages.BundleContainerTable_0, null);
 		fEditButton = SWTFactory.createPushButton(buttonComp, Messages.BundleContainerTable_1, null);
 		fRemoveButton = SWTFactory.createPushButton(buttonComp, Messages.BundleContainerTable_2, null);
+		fUpdateButton = SWTFactory.createPushButton(buttonComp, Messages.BundleContainerTable_3, null);
 
 		fShowContentButton = SWTFactory.createCheckButton(comp, Messages.TargetLocationsGroup_1, null, false, 2);
 
@@ -241,6 +245,15 @@ public class TargetLocationsGroup {
 		fRemoveButton.setEnabled(false);
 		SWTFactory.setButtonDimensionHint(fRemoveButton);
 
+		fUpdateButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				handleUpdate();
+			}
+		});
+		fUpdateButton.setLayoutData(new GridData());
+		fUpdateButton.setEnabled(false);
+		SWTFactory.setButtonDimensionHint(fUpdateButton);
+
 		fShowContentButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				fTreeViewer.refresh();
@@ -369,24 +382,77 @@ public class TargetLocationsGroup {
 		}
 	}
 
+	private void handleUpdate() {
+		// go over the selection and make a map from container to set of ius to update.
+		// if the set is empty then the whole container is to be updated.
+		IStructuredSelection selection = (IStructuredSelection) fTreeViewer.getSelection();
+		Map toUpdate = new HashMap();
+		for (Iterator iterator = selection.iterator(); iterator.hasNext();) {
+			Object currentSelection = iterator.next();
+			if (currentSelection instanceof IBundleContainer)
+				toUpdate.put(currentSelection, new HashSet(0));
+			else if (currentSelection instanceof IUWrapper) {
+				IUWrapper wrapper = (IUWrapper) currentSelection;
+				Set iuSet = (Set) toUpdate.get(wrapper.getParent());
+				if (iuSet == null) {
+					iuSet = new HashSet();
+					iuSet.add(wrapper.getIU().getId());
+					toUpdate.put(wrapper.getParent(), iuSet);
+				} else if (!iuSet.isEmpty())
+					iuSet.add(wrapper.getIU().getId());
+			}
+		}
+		if (toUpdate.isEmpty())
+			return;
+
+		JobChangeAdapter listener = new JobChangeAdapter() {
+			public void done(final IJobChangeEvent event) {
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						// XXX what if everything is disposed by the time we get back?
+						UpdateTargetJob job = (UpdateTargetJob) event.getJob();
+						contentsChanged(job.isUpdated());
+						fTreeViewer.refresh(true);
+						try {
+							ITargetHandle currentTarget = TargetPlatformService.getDefault().getWorkspaceTargetHandle();
+							if (job.isUpdated() && fTarget.getHandle().equals(currentTarget))
+								LoadTargetDefinitionJob.load(fTarget);
+						} catch (CoreException e) {
+							// do nothing if we could not see the current target.
+						}
+						updateButtons();
+					}
+				});
+			}
+		};
+		UpdateTargetJob.update(toUpdate, listener);
+	}
+
 	private void updateButtons() {
 		IStructuredSelection selection = (IStructuredSelection) fTreeViewer.getSelection();
 		fEditButton.setEnabled(!selection.isEmpty() && (selection.getFirstElement() instanceof IBundleContainer || selection.getFirstElement() instanceof IUWrapper));
 		// If any container is selected, allow the remove (the remove ignores non-container entries)
 		boolean removeAllowed = false;
+		boolean updateAllowed = false;
 		Iterator iter = selection.iterator();
 		while (iter.hasNext()) {
+			if (removeAllowed && updateAllowed) {
+				break;
+			}
 			Object current = iter.next();
+			if (current instanceof IUBundleContainer) {
+				updateAllowed = true;
+			}
 			if (current instanceof IBundleContainer) {
 				removeAllowed = true;
-				break;
 			}
 			if (current instanceof IUWrapper) {
 				removeAllowed = true;
-				break;
+				updateAllowed = true;
 			}
 		}
 		fRemoveButton.setEnabled(removeAllowed);
+		fUpdateButton.setEnabled(updateAllowed);
 	}
 
 	/**
@@ -425,10 +491,13 @@ public class TargetLocationsGroup {
 						}
 					} else if (parentElement instanceof IUBundleContainer) {
 						// Show the IUs as children
-						// TODO See if we can get the profile using API
 						try {
-							IProfile profile = ((TargetDefinition) fTarget).getProfile();
-							IInstallableUnit[] units = ((IUBundleContainer) parentElement).getInstallableUnits(profile);
+							// if this is a bundle container then we must be sure that all bundle containers are
+							// happy since they all share the same profile.
+							if (!P2TargetUtils.isResolved(fTarget)) {
+								return new Object[0];
+							}
+							IInstallableUnit[] units = ((IUBundleContainer) parentElement).getInstallableUnits();
 							// Wrap the units so that they remember their parent container
 							List wrappedUnits = new ArrayList(units.length);
 							for (int i = 0; i < units.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/messages.properties b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/messages.properties
index c439645..ec3532e 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/messages.properties
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/shared/target/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-#  Copyright (c) 2005, 2010 IBM Corporation and others.
+#  Copyright (c) 2005, 2011 IBM Corporation and others.
 #  All rights reserved. This program and the accompanying materials
 #  are made available under the terms of the Eclipse Public License v1.0
 #  which accompanies this distribution, and is available at
@@ -53,6 +53,7 @@ ArgumentsFromContainerSelectionDialog_5=No arguments could be found in the insta
 BundleContainerTable_0=&Add...
 BundleContainerTable_1=&Edit...
 BundleContainerTable_2=&Remove
+BundleContainerTable_3=&Update
 
 BundleContainerTable_8=Unspecified Site
 # Styled label section describing number of plug-ins in the location
@@ -60,7 +61,7 @@ BundleContainerTable_8=Unspecified Site
 BundleContainerTable_10={0} plug-ins available
 
 BundleContainerTable_14=&Plug-ins
-BundleContainerTable_15=So&urce bundles
+BundleContainerTable_15=Source &bundles
 BundleContainerTable_9=Show:
 EditBundleContainerWizard_0=Edit Content
 EditDirectoryContainerPage_0=Edit Directory
@@ -80,6 +81,7 @@ EditIUContainerPage_12=Details
 EditIUContainerPage_13=&Properties...
 EditIUContainerPage_14=&Group by Category
 EditIUContainerPage_15=Show only the latest &version
+EditIUContainerPage_16=Include source if available
 EditIUContainerPage_2=By default, all required software is added to the target based on its environment settings. Turning this option off allows software to be added with missing requirements and multiple environments.  This setting applies to the entire target definition. 
 EditIUContainerPage_3=Include required software
 EditIUContainerPage_4=Changing the included software settings will affect all sites in your target definition
@@ -99,8 +101,8 @@ FeatureImportWizard_DetailedPage_problemsLoading=Problems encountered while load
 FeatureImportWizardPage_importHasInvalid=Import location {0} contains invalid feature.
 IncludedBundlesTree_0=&Select
 IncludedBundlesTree_1=&Deselect
-IncludedBundlesTree_2=Sele&ct All
-IncludedBundlesTree_3=Dese&lect All
+IncludedBundlesTree_2=Select &All
+IncludedBundlesTree_3=Deselec&t All
 PreviewContainerPage_0=< Operation Cancelled >
 PreviewContainerPage_1=Preview Contents
 PreviewContainerPage_2=The plug-ins found in the container are visible below
@@ -116,9 +118,9 @@ TargetContentsGroup_5=Calculating dependencies...
 TargetContentsGroup_8=Unknown
 TargetContentsGroup_9={0} of {1} selected
 TargetContentsGroup_collapseAll=&Collapse All
-TargetContentsGroup_FeatureMode=Features
+TargetContentsGroup_FeatureMode=F&eatures
 TargetContentsGroup_ManageUsing=Manage using:
 TargetContentsGroup_OtherPluginsParent=Other Plug-ins
-TargetContentsGroup_PluginMode=Plug-ins
+TargetContentsGroup_PluginMode=Pl&ug-ins
 TargetContentsGroup_resolveCancelled=Resolve Cancelled
 TargetLocationsGroup_1=&Show location content
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/PDEJavaHelperUI.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/PDEJavaHelperUI.java
index 1c94e8e..1d7c8d3 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/PDEJavaHelperUI.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/PDEJavaHelperUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,11 +21,13 @@ import org.eclipse.jdt.core.*;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
 import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.bindings.TriggerSequence;
 import org.eclipse.jface.fieldassist.*;
 import org.eclipse.jface.internal.text.html.HTMLPrinter;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.pde.internal.core.util.PDEJavaHelper;
 import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
@@ -40,6 +42,8 @@ import org.eclipse.ui.*;
 import org.eclipse.ui.dialogs.SelectionDialog;
 import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;
 import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.keys.IBindingService;
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
 
 public class PDEJavaHelperUI {
 
@@ -222,7 +226,16 @@ public class PDEJavaHelperUI {
 		// No margin
 		controlDecoration.setMarginWidth(0);
 		// Custom hover tip text
-		controlDecoration.setDescriptionText(PDEUIMessages.PDEJavaHelper_msgContentAssistAvailable);
+		String description = null;
+		IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
+		TriggerSequence[] activeBindings = bindingService.getActiveBindingsFor(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
+		if (activeBindings.length == 0)
+			description = PDEUIMessages.PDEJavaHelper_msgContentAssistAvailable;
+		else
+			description = NLS.bind(PDEUIMessages.PDEJavaHelper_msgContentAssistAvailableWithKeyBinding, activeBindings[0].format());
+
+		controlDecoration.setDescriptionText(description);
+
 		// Custom hover properties
 		controlDecoration.setShowHover(true);
 		controlDecoration.setShowOnlyOnFocus(true);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesView.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesView.java
index 848d7f5..9a4a9d1 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesView.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -233,8 +233,8 @@ public class DependenciesView extends PageBookView implements IPreferenceConstan
 		manager.appendToGroup("presentation", fShowTree); //$NON-NLS-1$
 		manager.appendToGroup("presentation", fShowList); //$NON-NLS-1$
 		manager.add(new Separator("history")); //$NON-NLS-1$
-		manager.add(fShowLoops);
-		manager.add(fHistoryDropDownAction);
+		manager.appendToGroup("history", fShowLoops); //$NON-NLS-1$
+		manager.appendToGroup("history", fHistoryDropDownAction); //$NON-NLS-1$
 	}
 
 	/*
@@ -289,7 +289,6 @@ public class DependenciesView extends PageBookView implements IPreferenceConstan
 	 * @see org.eclipse.ui.part.PageBookView#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
 	public void createPartControl(Composite parent) {
-		super.createPartControl(parent);
 		fShowCallees = new ShowCalleesAction();
 		fShowCallees.setChecked(!fPreferences.getBoolean(DEPS_VIEW_SHOW_CALLERS));
 		fShowCallers = new ShowCallersAction();
@@ -309,6 +308,9 @@ public class DependenciesView extends PageBookView implements IPreferenceConstan
 		IActionBars actionBars = getViewSite().getActionBars();
 		contributeToActionBars(actionBars);
 
+		// Create the actions before calling super so that actions added by the pages get added at the end
+		super.createPartControl(parent);
+
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.DEPENDENCIES_VIEW);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesViewPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesViewPage.java
index a14ef57..9886aa9 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesViewPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/dependencies/DependenciesViewPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -234,7 +234,7 @@ public abstract class DependenciesViewPage extends Page {
 			desc = ((ExportPackageDescription) export).getExporter();
 		}
 		if (desc != null)
-			ManifestEditor.openPluginEditor(desc.getSymbolicName());
+			ManifestEditor.openPluginEditor(desc);
 	}
 
 	private void handleFocusOn() {
@@ -452,7 +452,6 @@ public abstract class DependenciesViewPage extends Page {
 	private void contributeToActionBars(IActionBars actionBars) {
 		IToolBarManager manager = actionBars.getToolBarManager();
 		manager.add(fFocusOnAction);
-		manager.add(new Separator());
 		contributeToDropDownMenu(actionBars.getMenuManager());
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java
index 0ce6420..b2ea95a 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,14 +18,14 @@ import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.pde.core.plugin.*;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
-import org.eclipse.pde.internal.core.importing.provisional.IBundleImporterDelegate;
 import org.eclipse.pde.internal.core.project.BundleProjectService;
 import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
 import org.eclipse.pde.internal.ui.wizards.imports.*;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.team.core.ScmUrlImportDescription;
+import org.eclipse.team.core.importing.provisional.IBundleImporter;
 import org.eclipse.ui.actions.ActionContext;
 import org.eclipse.ui.actions.ActionGroup;
 
@@ -102,11 +102,11 @@ public class ImportActionGroup extends ActionGroup {
 	}
 
 	/**
-	 * Return a map of {@link IBundleImporterDelegate} > Array of {@link BundleImportDescription} to be imported.
+	 * Return a map of {@link IBundleImporter} > Array of {@link ScmUrlImportDescription} to be imported.
 	 * 
 	 * @param shell shell to open message dialogs on, if required
 	 * @param models candidate models
-	 * @return  map of importer delegates to import descriptions
+	 * @return  map of importer to import descriptions
 	 */
 	private Map getImportDescriptions(Shell shell, IPluginModelBase[] models) {
 		BundleProjectService service = (BundleProjectService) BundleProjectService.getDefault();
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/target/StateViewPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/target/StateViewPage.java
old mode 100644
new mode 100755
index d7cea55..71097e4
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/target/StateViewPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/target/StateViewPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -312,7 +312,7 @@ public class StateViewPage extends Page implements IStateDeltaListener, IPluginM
 		if (selection.size() == 1) {
 			BundleDescription desc = getBundleDescription(selection.getFirstElement());
 			if (desc != null)
-				ManifestEditor.openPluginEditor(desc.getSymbolicName());
+				ManifestEditor.openPluginEditor(desc);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportActiveTargetJob.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportActiveTargetJob.java
deleted file mode 100644
index 1d47228..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportActiveTargetJob.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 EclipseSource Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Chris Aniszczyk <caniszczyk at gmail.com> - initial API and implementation
- *     Ian Bull <irbull at eclipsesource.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.wizards.exports;
-
-import java.net.URI;
-import org.eclipse.core.filesystem.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.core.plugin.PluginRegistry;
-import org.eclipse.pde.internal.core.FeatureModelManager;
-import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.core.feature.ExternalFeatureModel;
-import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
-import org.eclipse.pde.internal.core.target.TargetDefinition;
-import org.eclipse.pde.internal.core.target.TargetPlatformService;
-import org.eclipse.pde.internal.ui.PDEPlugin;
-import org.eclipse.pde.internal.ui.PDEUIMessages;
-
-/**
- * This job exports the bundles and features that make up your target. 
- */
-public class ExportActiveTargetJob extends Job {
-
-	private URI fDestination;
-	private boolean fclearDestinationDirectory = false;
-
-	public ExportActiveTargetJob(URI destination, boolean clearDestinationDirectory) {
-		super("Export Current Target Definition Job"); //$NON-NLS-1$
-		fDestination = destination;
-		fclearDestinationDirectory = clearDestinationDirectory;
-	}
-
-	protected IStatus run(IProgressMonitor monitor) {
-
-		IFileSystem fileSystem = EFS.getLocalFileSystem();
-		if (!fileSystem.canWrite()) {
-			return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Destination directory not writable."); //$NON-NLS-1$ 
-		}
-		IFileStore destination = fileSystem.getStore(fDestination);
-
-		FeatureModelManager featureManager = PDECore.getDefault().getFeatureModelManager();
-		IFeatureModel[] featureModels = featureManager.getModels();
-		IPluginModelBase[] pluginModels = PluginRegistry.getExternalModels();
-
-		IFileStore featureDir = destination.getChild("features"); //$NON-NLS-1$
-		IFileStore pluginDir = destination.getChild("plugins"); //$NON-NLS-1$
-		IFileStore metadataXML = destination.getChild("content.xml"); //$NON-NLS-1$
-		IFileStore metadataJAR = destination.getChild("content.jar"); //$NON-NLS-1$
-
-		int totalWork = featureModels.length + pluginModels.length;
-
-		try {
-			monitor.beginTask(PDEUIMessages.ExportTargetDefinition_task, totalWork);
-			if (fclearDestinationDirectory) {
-				monitor.subTask(PDEUIMessages.ExportTargetDeleteOldData); //Deleting old data...
-			}
-			IProvisioningAgent agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-			ExportTargetMetadata component = null;
-
-			if (agent != null) {
-				component = new ExportTargetMetadata(agent);
-			}
-			try {
-				if (fclearDestinationDirectory) {
-					if (component != null) {
-						// If p2 is available, clear the existing repositories
-						component.clearExporedRepository(fDestination);
-					}
-					if (featureDir.fetchInfo().exists()) {
-						featureDir.delete(EFS.NONE, new NullProgressMonitor());
-					}
-					if (pluginDir.fetchInfo().exists()) {
-						pluginDir.delete(EFS.NONE, new NullProgressMonitor());
-					}
-					if (metadataJAR.fetchInfo().exists()) {
-						metadataJAR.delete(EFS.NONE, new NullProgressMonitor());
-					}
-					if (metadataXML.fetchInfo().exists()) {
-						metadataXML.delete(EFS.NONE, new NullProgressMonitor());
-					}
-				}
-
-				if (!featureDir.fetchInfo().exists()) {
-					featureDir.mkdir(EFS.NONE, new NullProgressMonitor());
-				}
-				if (!pluginDir.fetchInfo().exists()) {
-					pluginDir.mkdir(EFS.NONE, new NullProgressMonitor());
-				}
-			} catch (CoreException e1) {
-				return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to create destination directory.", e1); //$NON-NLS-1$
-			}
-
-			monitor.subTask(PDEUIMessages.ExportTargetExportFeatures);
-			for (int i = 0; i < featureModels.length; i++) {
-				IFeatureModel model = featureModels[i];
-				if (model.isEnabled() && model instanceof ExternalFeatureModel) {
-					copy(model.getInstallLocation(), featureDir, fileSystem, monitor);
-				}
-			}
-
-			monitor.subTask(PDEUIMessages.ExportTargetExportPlugins);
-			for (int i = 0; i < pluginModels.length; i++) {
-				IPluginModelBase model = pluginModels[i];
-				//if (model.isEnabled()) {
-				copy(model.getInstallLocation(), pluginDir, fileSystem, monitor);
-				//}
-			}
-
-			try {
-				if (component != null) {
-					// If p2 is available, export the metadata
-					TargetDefinition definition = ((TargetDefinition) TargetPlatformService.getDefault().getWorkspaceTargetHandle().getTargetDefinition());
-					IProfile profile = definition.getProfile();
-					IStatus status = component.exportMetadata(profile, fDestination, definition.getName());
-					if (status.isOK()) {
-						return status;
-					}
-					return Status.OK_STATUS;
-				}
-			} catch (CoreException e) {
-				return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to export the target", e); //$NON-NLS-1$ 
-			}
-		} catch (CoreException e) {
-			return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to export the target", e); //$NON-NLS-1$ 
-		}
-
-		finally {
-			monitor.done();
-		}
-		return Status.OK_STATUS;
-	}
-
-	private IStatus copy(String src, IFileStore destinationParent, IFileSystem fileSystem, IProgressMonitor monitor) throws CoreException {
-		Path srcPath = new Path(src);
-		IFileStore source = fileSystem.getStore(srcPath);
-		String elementName = srcPath.segment(srcPath.segmentCount() - 1);
-		IFileStore destinationDirectory = destinationParent.getChild(elementName);
-		if (destinationDirectory.fetchInfo().exists()) {
-			monitor.worked(1);
-			return Status.OK_STATUS;
-		}
-		if (source.fetchInfo().isDirectory()) {
-			destinationDirectory.mkdir(EFS.NONE, new NullProgressMonitor());
-		}
-		source.copy(destinationDirectory, EFS.OVERWRITE, new SubProgressMonitor(monitor, 1));
-		return Status.OK_STATUS;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetJob.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetJob.java
new file mode 100644
index 0000000..95677a2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetJob.java
@@ -0,0 +1,235 @@
+/*******************************************************************************
+ * Copyright (c) 2010 EclipseSource Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     EclipseSource Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.ui.wizards.exports;
+
+import java.net.URI;
+import java.util.*;
+import org.eclipse.core.filesystem.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.equinox.p2.internal.repository.tools.Repo2Runnable;
+import org.eclipse.equinox.p2.internal.repository.tools.RepositoryDescriptor;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.IProvidedCapability;
+import org.eclipse.equinox.p2.query.IQueryResult;
+import org.eclipse.pde.internal.core.feature.ExternalFeatureModel;
+import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
+import org.eclipse.pde.internal.core.target.IUBundleContainer;
+import org.eclipse.pde.internal.core.target.P2TargetUtils;
+import org.eclipse.pde.internal.core.target.provisional.*;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+
+/**
+ * This job exports the bundles and features that make up your target. 
+ */
+public class ExportTargetJob extends Job {
+
+	private URI fDestination;
+	private boolean fclearDestinationDirectory = true;
+	private IFileStore featureDir;
+	private IFileStore pluginDir;
+	private IFileSystem fileSystem;
+	private Map filter;
+	private ITargetDefinition fTarget;
+
+	public ExportTargetJob(ITargetDefinition target, URI destination, boolean clearDestinationDirectory) {
+		super("Export Current Target Definition Job"); //$NON-NLS-1$
+		fTarget = target;
+		fDestination = destination;
+		fclearDestinationDirectory = clearDestinationDirectory;
+	}
+
+	protected IStatus run(IProgressMonitor monitor) {
+		try {
+			constructFilter(fTarget);
+			IBundleContainer[] containers = fTarget.getBundleContainers();
+			int totalWork = containers.length;
+			monitor.beginTask(PDEUIMessages.ExportTargetDefinition_task, totalWork);
+
+			monitor.subTask(PDEUIMessages.ExportTargetJob_ConfiguringDestination);
+			setupDestination(monitor);
+
+			monitor.subTask(PDEUIMessages.ExportTargetJob_ExportingTargetContents);
+			for (int i = 0; i < containers.length; i++) {
+				IBundleContainer container = containers[i];
+				container.resolve(fTarget, monitor);
+				if (!(container instanceof IUBundleContainer))
+					exportContainer(container, fTarget, featureDir, pluginDir, fileSystem, monitor);
+			}
+			exportProfile(fTarget, fDestination, monitor);
+		} catch (CoreException e) {
+			return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to export the target", e); //$NON-NLS-1$ 
+		} finally {
+			monitor.done();
+		}
+		return Status.OK_STATUS;
+	}
+
+	private void constructFilter(ITargetDefinition target) {
+		NameVersionDescriptor[] included = target.getIncluded();
+		if (included == null)
+			return;
+		filter = new HashMap();
+		for (int i = 0; i < included.length; i++) {
+			NameVersionDescriptor inclusion = included[i];
+			NameVersionDescriptor[] versions = (NameVersionDescriptor[]) filter.get(inclusion.getId());
+			if (versions == null)
+				filter.put(inclusion.getId(), new NameVersionDescriptor[] {inclusion});
+			else {
+				NameVersionDescriptor[] versions2 = new NameVersionDescriptor[versions.length + 1];
+				System.arraycopy(versions, 0, versions2, 0, versions.length);
+				versions2[versions.length] = inclusion;
+				filter.put(inclusion.getId(), versions2);
+			}
+		}
+	}
+
+	private void setupDestination(IProgressMonitor monitor) throws CoreException {
+		fileSystem = EFS.getLocalFileSystem();
+		if (!fileSystem.canWrite()) {
+			throw new CoreException(new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Destination directory not writable.")); //$NON-NLS-1$ 
+		}
+		IFileStore destination = fileSystem.getStore(fDestination);
+		featureDir = destination.getChild("features"); //$NON-NLS-1$
+		pluginDir = destination.getChild("plugins"); //$NON-NLS-1$
+		if (fclearDestinationDirectory) {
+			monitor.subTask(PDEUIMessages.ExportTargetDeleteOldData); //Deleting old data...
+			featureDir.delete(EFS.NONE, null);
+			pluginDir.delete(EFS.NONE, null);
+		}
+		featureDir.mkdir(EFS.NONE, null);
+		pluginDir.mkdir(EFS.NONE, null);
+	}
+
+	private boolean shouldExport(NameVersionDescriptor descriptor) {
+		// currently PDE does not selectively include/exclude features
+		if (filter == null || descriptor.getType().equals(NameVersionDescriptor.TYPE_FEATURE))
+			return true;
+		NameVersionDescriptor[] versions = (NameVersionDescriptor[]) filter.get(descriptor.getId());
+		if (versions == null)
+			return false;
+		for (int i = 0; i < versions.length; i++) {
+			String version = versions[i].getVersion();
+			if ((version == null || version.equals(descriptor.getVersion())) && descriptor.getType().equals(versions[i].getType()))
+				return true;
+		}
+		return false;
+	}
+
+	private boolean shouldExport(IFeatureModel feature) {
+		if (filter == null)
+			return true;
+		if (!feature.isEnabled() || !(feature instanceof ExternalFeatureModel))
+			return false;
+		NameVersionDescriptor descriptor = new NameVersionDescriptor(feature.getFeature().getId(), feature.getFeature().getVersion(), NameVersionDescriptor.TYPE_FEATURE);
+		return shouldExport(descriptor);
+	}
+
+	private boolean shouldExport(IResolvedBundle bundle) {
+		if (filter == null)
+			return true;
+		NameVersionDescriptor descriptor = new NameVersionDescriptor(bundle.getBundleInfo().getSymbolicName(), bundle.getBundleInfo().getVersion(), NameVersionDescriptor.TYPE_PLUGIN);
+		return shouldExport(descriptor);
+	}
+
+	private boolean shouldExport(IInstallableUnit iu) {
+		if (filter == null)
+			return true;
+		NameVersionDescriptor descriptor = null;
+		String feature = getCapability(iu, "org.eclipse.update.feature"); //$NON-NLS-1$
+		if (feature != null) {
+			descriptor = new NameVersionDescriptor(feature, iu.getVersion().toString(), NameVersionDescriptor.TYPE_FEATURE);
+		} else if (iu.getId().endsWith(".feature.group")) { //$NON-NLS-1$
+			descriptor = new NameVersionDescriptor(iu.getId(), iu.getVersion().toString(), NameVersionDescriptor.TYPE_FEATURE);
+		} else if ("bundle".equalsIgnoreCase(getCapability(iu, "org.eclipse.equinox.p2.eclipse.type"))) { //$NON-NLS-1$ //$NON-NLS-2$
+			descriptor = new NameVersionDescriptor(iu.getId(), iu.getVersion().toString(), NameVersionDescriptor.TYPE_PLUGIN);
+		} else if ("source".equalsIgnoreCase(getCapability(iu, "org.eclipse.equinox.p2.eclipse.type"))) { //$NON-NLS-1$ //$NON-NLS-2$
+			descriptor = new NameVersionDescriptor(iu.getId(), iu.getVersion().toString(), NameVersionDescriptor.TYPE_PLUGIN);
+		}
+		// default to true unless we know otherwise. This ensures that random metadata bits
+		// are moved over to the target as they might be needed in a future provisioning operation.
+		// We could move only unknown IUs that do NOT have artifacts... Have to think about that.
+		return descriptor == null ? true : shouldExport(descriptor);
+	}
+
+	private String getCapability(IInstallableUnit iu, String namespace) {
+		for (Iterator i = iu.getProvidedCapabilities().iterator(); i.hasNext();) {
+			IProvidedCapability capability = (IProvidedCapability) i.next();
+			if (capability.getNamespace().equals(namespace))
+				return capability.getName();
+		}
+		return null;
+	}
+
+	private void exportContainer(IBundleContainer container, ITargetDefinition target, IFileStore featureDir, IFileStore pluginDir, IFileSystem fileSystem, IProgressMonitor monitor) throws CoreException {
+		IFeatureModel[] features = container.getFeatures();
+		if (features != null) {
+			monitor.subTask(PDEUIMessages.ExportTargetExportFeatures);
+			for (int i = 0; i < features.length; i++) {
+				if (shouldExport(features[i]))
+					copy(features[i].getInstallLocation(), featureDir, fileSystem, monitor);
+			}
+		}
+
+		IResolvedBundle[] bundles = container.getBundles();
+		if (bundles != null) {
+			monitor.subTask(PDEUIMessages.ExportTargetExportPlugins);
+			for (int i = 0; i < bundles.length; i++) {
+				if (shouldExport(bundles[i]))
+					copy(bundles[i].getBundleInfo().getLocation().getPath(), pluginDir, fileSystem, monitor);
+			}
+		}
+	}
+
+	private IStatus copy(String src, IFileStore destinationParent, IFileSystem fileSystem, IProgressMonitor monitor) throws CoreException {
+		Path srcPath = new Path(src);
+		IFileStore source = fileSystem.getStore(srcPath);
+		String elementName = srcPath.segment(srcPath.segmentCount() - 1);
+		IFileStore destination = destinationParent.getChild(elementName);
+		if (destination.fetchInfo().exists()) {
+			monitor.worked(1);
+			return Status.OK_STATUS;
+		}
+		if (source.fetchInfo().isDirectory()) {
+			destination.mkdir(EFS.NONE, new NullProgressMonitor());
+		}
+		source.copy(destination, EFS.OVERWRITE, new SubProgressMonitor(monitor, 1));
+		return Status.OK_STATUS;
+	}
+
+	private RepositoryDescriptor createRepoDescriptor(URI location, String name, String kind) {
+		RepositoryDescriptor result = new RepositoryDescriptor();
+		result.setLocation(location);
+		result.setKind(kind);
+		result.setName(name);
+		if (fclearDestinationDirectory)
+			result.setAppend(false);
+		return result;
+	}
+
+	private void exportProfile(ITargetDefinition target, URI destination, IProgressMonitor monitor) throws CoreException {
+		Repo2Runnable exporter = new Repo2Runnable();
+		exporter.addDestination(createRepoDescriptor(destination, P2TargetUtils.getProfileId(target), RepositoryDescriptor.KIND_METADATA));
+		exporter.addDestination(createRepoDescriptor(destination, P2TargetUtils.getProfileId(target), RepositoryDescriptor.KIND_ARTIFACT));
+		exporter.addSource(createRepoDescriptor(P2TargetUtils.getBundlePool().getLocation(), null, RepositoryDescriptor.KIND_ARTIFACT));
+
+		IQueryResult ius = P2TargetUtils.getIUs(target, monitor);
+		ArrayList toExport = new ArrayList();
+		for (Iterator i = ius.iterator(); i.hasNext();) {
+			IInstallableUnit iu = (IInstallableUnit) i.next();
+			if (shouldExport(iu))
+				toExport.add(iu);
+		}
+		exporter.setSourceIUs(toExport);
+		exporter.run(monitor);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetMetadata.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetMetadata.java
deleted file mode 100644
index 8211dc6..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/ExportTargetMetadata.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 EclipseSource Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Ian Bull <irbull at eclipsesource.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.wizards.exports;
-
-import java.net.URI;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.equinox.p2.query.IQueryResult;
-import org.eclipse.equinox.p2.query.QueryUtil;
-import org.eclipse.equinox.p2.repository.IRepositoryManager;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
-import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.ui.PDEPlugin;
-
-public class ExportTargetMetadata {
-
-	IProvisioningAgent agent = null;
-	public static ExportTargetMetadata instance = null;
-
-	public ExportTargetMetadata(IProvisioningAgent agent) {
-		this.agent = agent;
-	}
-
-	public synchronized void clearExporedRepository(URI destination) {
-		agent = (IProvisioningAgent) PDECore.getDefault().acquireService(IProvisioningAgent.SERVICE_NAME);
-		if (agent == null)
-			return;
-		if (((IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME)).contains(destination))
-			((IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME)).removeRepository(destination);
-	}
-
-	public synchronized IStatus exportMetadata(IProfile profile, URI destination, String targetName) {
-		if (agent == null)
-			return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to mirror the metadata."); //$NON-NLS-1$
-		boolean removeRepoAfterLoad = false;
-		try {
-			IMetadataRepository repository = null;
-
-			try {
-				//TODO: There appears to be a small (5 byte) difference from when I do the load vs. the create
-				//      The create gives the repo a version 1, while the load gives it 1.0.0
-				//      this might be worth looking into
-				removeRepoAfterLoad = !((IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME)).contains(destination);
-				repository = ((IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME)).loadRepository(destination, IRepositoryManager.REPOSITORY_HINT_MODIFIABLE, new NullProgressMonitor());
-			} catch (ProvisionException e) {
-				// The repository cannot be loaded
-			}
-			if (repository == null) {
-				repository = ((IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME)).createRepository(destination, targetName, IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY, null);
-			}
-
-			if (repository != null) {
-				mirrorMetadata(profile, repository);
-			} else {
-				return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to mirror the metadata."); //$NON-NLS-1$
-			}
-
-		} catch (ProvisionException e) {
-			return new Status(IStatus.ERROR, PDEPlugin.getPluginId(), "Failed to mirror the metadata.", e); //$NON-NLS-1$
-		} finally {
-			if (removeRepoAfterLoad) {
-				((IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME)).removeRepository(destination);
-			}
-		}
-
-		return Status.OK_STATUS;
-	}
-
-	private void mirrorMetadata(IProfile profile, IMetadataRepository repository) {
-		IQueryResult results = profile.query(QueryUtil.createIUAnyQuery(), new NullProgressMonitor());
-		repository.addInstallableUnits(results.toUnmodifiableSet());
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java
index 0cd6f7b..3d6dd77 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizard.java
@@ -12,42 +12,87 @@
 package org.eclipse.pde.internal.ui.wizards.exports;
 
 import java.io.File;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.pde.internal.ui.PDEPluginImages;
-import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.eclipse.pde.internal.core.target.TargetPlatformService;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
+import org.eclipse.pde.internal.ui.*;
 import org.eclipse.ui.IExportWizard;
 import org.eclipse.ui.IWorkbench;
 
+/**
+ * Wizard to export a target definition to a directory on the file system
+ * 
+ * @see ExportTargetJob
+ */
 public class TargetDefinitionExportWizard extends Wizard implements IExportWizard {
 
 	private TargetDefinitionExportWizardPage fPage = null;
+	private ITargetDefinition fTarget;
 
+	/**
+	 * Section in the dialog settings for this wizard and the wizards created with selection
+	 * Shared with the EditBundleContainerWizard
+	 */
+	static final String SETTINGS_SECTION = "exportTargetDefinitionWizard"; //$NON-NLS-1$
+
+	/**
+	 * Default constructor is required for the class to be instantiated through plugin extensions
+	 */
 	public TargetDefinitionExportWizard() {
+		this(null);
+	}
+
+	public TargetDefinitionExportWizard(ITargetDefinition target) {
+		fTarget = target;
+		if (fTarget == null)
+			try {
+				fTarget = TargetPlatformService.getDefault().getWorkspaceTargetHandle().getTargetDefinition();
+			} catch (CoreException e) {
+				// TODO log something?
+				return;
+			}
 		setNeedsProgressMonitor(true);
 		setWindowTitle(PDEUIMessages.ExportActiveTargetDefinition);
 		setDefaultPageImageDescriptor(PDEPluginImages.DESC_TARGET_WIZ);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.wizard.Wizard#addPages()
+	 */
 	public void addPages() {
-		fPage = new TargetDefinitionExportWizardPage();
+		IDialogSettings settings = PDEPlugin.getDefault().getDialogSettings().getSection(SETTINGS_SECTION);
+		if (settings == null) {
+			settings = PDEPlugin.getDefault().getDialogSettings().addNewSection(SETTINGS_SECTION);
+		}
+		setDialogSettings(settings);
+
+		fPage = new TargetDefinitionExportWizardPage(fTarget);
 		addPage(fPage);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.wizard.Wizard#performFinish()
+	 */
 	public boolean performFinish() {
+		fPage.storeSettings();
 		String destDir = fPage.getDestinationDirectory();
 		boolean clearDestDir = fPage.isClearDestinationDirectory();
 		File file = new File(destDir);
 
-		Job job = new ExportActiveTargetJob(file.toURI(), clearDestDir);
+		Job job = new ExportTargetJob(fTarget, file.toURI(), clearDestDir);
 		job.schedule(200);
 
 		return true;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+	 */
 	public void init(IWorkbench workbench, IStructuredSelection selection) {
-		// do nothing atm
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizardPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizardPage.java
index cf6be7c..deed24c 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizardPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/exports/TargetDefinitionExportWizardPage.java
@@ -13,13 +13,10 @@ package org.eclipse.pde.internal.ui.wizards.exports;
 
 import java.io.File;
 import java.io.IOException;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.pde.internal.core.target.TargetDefinition;
-import org.eclipse.pde.internal.core.target.TargetPlatformService;
+import org.eclipse.pde.internal.core.target.provisional.ITargetDefinition;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.*;
@@ -34,9 +31,31 @@ public class TargetDefinitionExportWizardPage extends WizardPage {
 	private Button fBrowseButton = null;
 	private Combo fDestinationCombo = null;
 	private Button fClearDestinationButton = null;
+	private ITargetDefinition fTarget = null;
 
-	protected TargetDefinitionExportWizardPage() {
+	/**
+	 * Dialog settings key for the most recent location
+	 */
+	private static final String SETTINGS_LOCATION_1 = "location1"; //$NON-NLS-1$
+
+	/**
+	 * Dialog settings key for the second most recent location
+	 */
+	private static final String SETTINGS_LOCATION_2 = "location2"; //$NON-NLS-1$
+
+	/**
+	 * Dialog settings key for the third most recent location 
+	 */
+	private static final String SETTINGS_LOCATION_3 = "location3"; //$NON-NLS-1$
+
+	/**
+	 * Dialog settings key for whether the clear the destination directory
+	 */
+	private static final String SETTINGS_CLEAR = "clear"; //$NON-NLS-1$
+
+	protected TargetDefinitionExportWizardPage(ITargetDefinition target) {
 		super(PAGE_ID);
+		fTarget = target;
 		setPageComplete(false);
 		setTitle(PDEUIMessages.ExportActiveTargetDefinition);
 		setMessage(PDEUIMessages.ExportActiveTargetDefinition_message);
@@ -57,14 +76,7 @@ public class TargetDefinitionExportWizardPage extends WizardPage {
 		parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		new Label(parent, SWT.NONE).setText(PDEUIMessages.ExportTargetCurrentTarget);
 		Label l = new Label(parent, SWT.NONE);
-
-		try {
-			// TODO this is a bit dirty
-			TargetDefinition definition = ((TargetDefinition) TargetPlatformService.getDefault().getWorkspaceTargetHandle().getTargetDefinition());
-			l.setText(definition.getName());
-		} catch (CoreException e) {
-			// TODO log something?
-		}
+		l.setText(fTarget.getName());
 
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
@@ -102,6 +114,8 @@ public class TargetDefinitionExportWizardPage extends WizardPage {
 		gd.horizontalSpan = 2;
 		gd.horizontalIndent = 15;
 		fClearDestinationButton.setLayoutData(gd);
+
+		initSettings();
 	}
 
 	public String getDestinationDirectory() {
@@ -120,34 +134,65 @@ public class TargetDefinitionExportWizardPage extends WizardPage {
 		setMessage(null);
 
 		if (fDestinationCombo.getText().equals("")) { //$NON-NLS-1$
-			setMessage(PDEUIMessages.ExportTargetError_ChooseDestination, IStatus.ERROR);
+			setErrorMessage(PDEUIMessages.ExportTargetError_ChooseDestination);
 			return false;
 		} else if (!isValidLocation(fDestinationCombo.getText().trim())) {
-			setMessage(PDEUIMessages.ExportTargetError_validPath, IStatus.ERROR);
+			setErrorMessage(PDEUIMessages.ExportTargetError_validPath);
 			return false;
 		}
+		setErrorMessage(null);
 
 		return true;
 	}
 
-	protected void initializeCombo(IDialogSettings settings, String key, Combo combo) {
-		for (int i = 0; i < 6; i++) {
-			String curr = settings.get(key + String.valueOf(i));
-			if (curr != null && combo.indexOf(curr) == -1) {
-				combo.add(curr);
+	public void storeSettings() {
+		IDialogSettings settings = getDialogSettings();
+		if (settings != null) {
+			settings.put(SETTINGS_CLEAR, fClearDestinationButton.getSelection());
+
+			String newLocation = fDestinationCombo.getText().trim();
+			if (newLocation.charAt(newLocation.length() - 1) == File.separatorChar) {
+				newLocation = newLocation.substring(0, newLocation.length() - 1);
 			}
+			String[] items = fDestinationCombo.getItems();
+			for (int i = 0; i < items.length; i++) {
+				if (items[i].equals(newLocation)) {
+					// Already have this location stored
+					return;
+				}
+			}
+			String location = settings.get(SETTINGS_LOCATION_2);
+			if (location != null) {
+				settings.put(SETTINGS_LOCATION_3, location);
+			}
+			location = settings.get(SETTINGS_LOCATION_1);
+			if (location != null) {
+				settings.put(SETTINGS_LOCATION_2, location);
+			}
+			settings.put(SETTINGS_LOCATION_1, newLocation);
 		}
-		if (combo.getItemCount() > 0)
-			combo.setText(combo.getItem(0));
 	}
 
-	protected void saveCombo(IDialogSettings settings, String key, Combo combo) {
-		if (combo.getText().trim().length() > 0) {
-			settings.put(key + String.valueOf(0), combo.getText().trim());
-			String[] items = combo.getItems();
-			int nEntries = Math.min(items.length, 5);
-			for (int i = 0; i < nEntries; i++) {
-				settings.put(key + String.valueOf(i + 1), items[i].trim());
+	private void initSettings() {
+		IDialogSettings settings = getDialogSettings();
+		if (settings != null) {
+			fClearDestinationButton.setSelection(settings.getBoolean(SETTINGS_CLEAR));
+
+			String location = settings.get(SETTINGS_LOCATION_1);
+			if (location != null) {
+				fDestinationCombo.add(location);
+			}
+			location = settings.get(SETTINGS_LOCATION_2);
+			if (location != null) {
+				fDestinationCombo.add(location);
+			}
+			location = settings.get(SETTINGS_LOCATION_3);
+			if (location != null) {
+				fDestinationCombo.add(location);
+			}
+
+			if (fDestinationCombo.getItemCount() > 0) {
+				fDestinationCombo.setText(fDestinationCombo.getItem(0));
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/feature/PluginListPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/feature/PluginListPage.java
index 9892677..c6d7aaa 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/feature/PluginListPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/feature/PluginListPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.wizards.feature;
 
-import org.eclipse.pde.launching.IPDELauncherConstants;
-
 import com.ibm.icu.text.Collator;
 import java.util.TreeSet;
 import org.eclipse.core.runtime.CoreException;
@@ -19,13 +17,13 @@ import org.eclipse.debug.core.*;
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.*;
 import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.pde.internal.ui.elements.DefaultContentProvider;
 import org.eclipse.pde.internal.ui.wizards.ListUtil;
+import org.eclipse.pde.launching.IPDELauncherConstants;
 import org.eclipse.pde.ui.launcher.EclipseLaunchShortcut;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -44,7 +42,7 @@ public class PluginListPage extends BasePluginListPage {
 
 	private Combo fLaunchConfigsCombo;
 	private Button fInitLaunchConfigButton;
-
+	private CheckboxTableViewer pluginViewer;
 	private static final String S_INIT_LAUNCH = "initLaunch"; //$NON-NLS-1$
 
 	public PluginListPage() {
@@ -71,13 +69,11 @@ public class PluginListPage extends BasePluginListPage {
 			fInitLaunchConfigButton.setText(PDEUIMessages.PluginListPage_initializeFromLaunch);
 			fInitLaunchConfigButton.setSelection(initLaunch);
 			fInitLaunchConfigButton.addSelectionListener(new SelectionAdapter() {
-
 				public void widgetSelected(SelectionEvent e) {
 					boolean initLaunchConfigs = fInitLaunchConfigButton.getSelection();
 					fLaunchConfigsCombo.setEnabled(initLaunchConfigs);
 					tablePart.setEnabled(!initLaunchConfigs);
 				}
-
 			});
 
 			fLaunchConfigsCombo = new Combo(container, SWT.READ_ONLY);
@@ -96,8 +92,8 @@ public class PluginListPage extends BasePluginListPage {
 			initPluginsButton.setSelection(!initLaunch);
 		}
 
-		tablePart.createControl(container, 3);
-		CheckboxTableViewer pluginViewer = tablePart.getTableViewer();
+		tablePart.createControl(container, 3, true);
+		pluginViewer = tablePart.getTableViewer();
 		pluginViewer.setContentProvider(new PluginContentProvider());
 		pluginViewer.setLabelProvider(PDEPlugin.getDefault().getLabelProvider());
 		pluginViewer.setComparator(ListUtil.PLUGIN_COMPARATOR);
@@ -114,6 +110,17 @@ public class PluginListPage extends BasePluginListPage {
 		setControl(container);
 		Dialog.applyDialogFont(container);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(container, IHelpContextIds.NEW_FEATURE_REFERENCED_PLUGINS);
+		pluginViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				TableItem firstTI = pluginViewer.getTable().getSelection()[0];
+				if (firstTI.getChecked()) {
+					firstTI.setChecked(false);
+				} else {
+					firstTI.setChecked(true);
+				}
+				tablePart.updateCount(pluginViewer.getCheckedElements().length);
+			}
+		});
 	}
 
 	public IPluginBase[] getSelectedPlugins() {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java
index 959b217..502fe20 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/BaseImportWizardSecondPage.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.wizards.imports;
 
-import org.eclipse.pde.internal.ui.PDEUIMessages;
-
 import java.util.ArrayList;
 import java.util.Set;
 import org.eclipse.jface.dialogs.IDialogSettings;
@@ -259,6 +257,12 @@ public abstract class BaseImportWizardSecondPage extends WizardPage implements I
 	/**
 	 * Adds a warning if importing from a repository and not all bundles are available in
 	 * a repository.
+	 * <p>
+	 * The detail page no longer needs this as its available list is filtered, but on the express page
+	 * we may end up with plug-ins from the workspace that require plug-ins without repo info.  In that
+	 * case the bundles will still be added to the right column but won't be available on the next page
+	 * (CVS page).
+	 * </p>
 	 */
 	protected void checkRepositoryAvailability() {
 		PluginImportWizardFirstPage page = (PluginImportWizardFirstPage) getPreviousPage();
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/CVSBundleImportPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/CVSBundleImportPage.java
deleted file mode 100644
index 62353be..0000000
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/CVSBundleImportPage.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.wizards.imports;
-
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.pde.internal.core.importing.CvsBundleImportDescription;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
-import org.eclipse.pde.internal.ui.*;
-import org.eclipse.pde.internal.ui.provisional.IBundeImportWizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-
-/**
- * Allows specific versions versus HEAD to be imported into the workspace.
- */
-public class CVSBundleImportPage extends WizardPage implements IBundeImportWizardPage {
-
-	private BundleImportDescription[] descriptions;
-	private Button useHead;
-	private TableViewer bundlesViewer;
-	private Label counterLabel;
-
-	private static final String CVS_PAGE_USE_HEAD = "org.eclipse.pde.ui.cvs.import.page.head"; //$NON-NLS-1$
-
-	class CvsLabelProvider extends StyledCellLabelProvider implements ILabelProvider {
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
-		 */
-		public Image getImage(Object element) {
-			return PlatformUI.getWorkbench().getSharedImages().getImage(IDE.SharedImages.IMG_OBJ_PROJECT);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
-		 */
-		public String getText(Object element) {
-			return getStyledText(element).getString();
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
-		 */
-		public void update(ViewerCell cell) {
-			StyledString string = getStyledText(cell.getElement());
-			cell.setText(string.getString());
-			cell.setStyleRanges(string.getStyleRanges());
-			cell.setImage(getImage(cell.getElement()));
-			super.update(cell);
-		}
-
-		private StyledString getStyledText(Object element) {
-			StyledString styledString = new StyledString();
-			if (element instanceof CvsBundleImportDescription) {
-				CvsBundleImportDescription description = (CvsBundleImportDescription) element;
-				String project = description.getProject();
-				String version = description.getTag();
-				String host = description.getServer();
-				styledString.append(project);
-				if (version != null && !useHead.getSelection()) {
-					styledString.append(' ');
-					styledString.append(version, StyledString.DECORATIONS_STYLER);
-				}
-				styledString.append(' ');
-				styledString.append('[', StyledString.DECORATIONS_STYLER);
-				styledString.append(host, StyledString.DECORATIONS_STYLER);
-				styledString.append(']', StyledString.DECORATIONS_STYLER);
-				return styledString;
-			}
-			styledString.append(element.toString());
-			return styledString;
-		}
-	}
-
-	/**
-	 * Constructs the page.
-	 */
-	public CVSBundleImportPage() {
-		super("cvs", PDEUIMessages.CVSBundleImportPage_0, null); //$NON-NLS-1$
-		setDescription(PDEUIMessages.CVSBundleImportPage_1);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
-	 */
-	public void createControl(Composite parent) {
-		Composite comp = SWTFactory.createComposite(parent, 1, 1, GridData.FILL_BOTH);
-		Composite group = SWTFactory.createComposite(comp, 1, 1, GridData.FILL_HORIZONTAL);
-
-		Button versions = SWTFactory.createRadioButton(group, PDEUIMessages.CVSBundleImportPage_3);
-		useHead = SWTFactory.createRadioButton(group, PDEUIMessages.CVSBundleImportPage_2);
-		SelectionListener listener = new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				bundlesViewer.refresh(true);
-			}
-		};
-		versions.addSelectionListener(listener);
-		useHead.addSelectionListener(listener);
-
-		Table table = new Table(comp, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
-		GridData gd = new GridData(GridData.FILL_BOTH);
-		gd.heightHint = 200;
-		gd.widthHint = 225;
-		table.setLayoutData(gd);
-
-		bundlesViewer = new TableViewer(table);
-		bundlesViewer.setLabelProvider(new CvsLabelProvider());
-		bundlesViewer.setContentProvider(new ArrayContentProvider());
-		bundlesViewer.setComparator(new ViewerComparator());
-		counterLabel = new Label(comp, SWT.NONE);
-		counterLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		setControl(comp);
-		setPageComplete(true);
-
-		// initialize versions versus HEAD
-		IDialogSettings settings = getWizard().getDialogSettings();
-		boolean head = false;
-		boolean found = false;
-		if (settings != null) {
-			String string = settings.get(CVS_PAGE_USE_HEAD);
-			if (string != null) {
-				found = true;
-				head = settings.getBoolean(CVS_PAGE_USE_HEAD);
-			}
-		}
-
-		if (!found) {
-			for (int i = 0; i < descriptions.length; i++) {
-				CvsBundleImportDescription description = (CvsBundleImportDescription) descriptions[i];
-				if (description.getTag() != null) {
-					head = false;
-					break;
-				}
-			}
-		}
-		useHead.setSelection(head);
-		versions.setSelection(!head);
-
-		if (descriptions != null) {
-			bundlesViewer.setInput(descriptions);
-			updateCount();
-		}
-
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.PLUGIN_IMPORT_CVS_PAGE);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
-	 */
-	public void setVisible(boolean visible) {
-		super.setVisible(visible);
-		setPageComplete(true);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.ui.IBundeImportWizardPage#finish()
-	 */
-	public boolean finish() {
-		boolean head = false;
-		if (getControl() != null) {
-			head = useHead.getSelection();
-			// store settings
-			IDialogSettings settings = getWizard().getDialogSettings();
-			if (settings != null) {
-				settings.put(CVS_PAGE_USE_HEAD, head);
-			}
-		} else {
-			// use whatever was used last time
-			IDialogSettings settings = getWizard().getDialogSettings();
-			if (settings != null) {
-				head = settings.getBoolean(CVS_PAGE_USE_HEAD);
-			}
-		}
-
-		if (head) {
-			// modify tags on bundle import descriptions
-			for (int i = 0; i < descriptions.length; i++) {
-				CvsBundleImportDescription description = (CvsBundleImportDescription) descriptions[i];
-				description.setTag(null);
-			}
-		}
-		return true;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.ui.IBundeImportWizardPage#getSelection()
-	 */
-	public BundleImportDescription[] getSelection() {
-		return descriptions;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.ui.IBundeImportWizardPage#setSelection(org.eclipse.pde.core.importing.BundleImportDescription[])
-	 */
-	public void setSelection(BundleImportDescription[] descriptions) {
-		this.descriptions = descriptions;
-		// fill viewer
-		if (bundlesViewer != null) {
-			bundlesViewer.setInput(descriptions);
-			updateCount();
-		}
-	}
-
-	/**
-	 * Updates the count of bundles that will be imported
-	 */
-	private void updateCount() {
-		counterLabel.setText(NLS.bind(PDEUIMessages.ImportWizard_expressPage_total, new Integer(descriptions.length)));
-		counterLabel.getParent().layout();
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
index b8c244c..ea11d71 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,12 +14,15 @@ import java.io.File;
 import java.io.IOException;
 import java.util.*;
 import java.util.Map.Entry;
+import java.util.List;
 import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jdt.core.*;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.util.ManifestElement;
@@ -31,15 +34,17 @@ import org.eclipse.pde.internal.core.*;
 import org.eclipse.pde.internal.core.build.WorkspaceBuildModel;
 import org.eclipse.pde.internal.core.bundle.WorkspaceBundleModel;
 import org.eclipse.pde.internal.core.ibundle.IBundle;
-import org.eclipse.pde.internal.core.importing.IBundleImporter;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
 import org.eclipse.pde.internal.core.natures.PDE;
 import org.eclipse.pde.internal.core.project.PDEProject;
 import org.eclipse.pde.internal.core.util.CoreUtility;
 import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.core.TeamException;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.team.core.*;
+import org.eclipse.team.core.importing.provisional.IBundleImporter;
 import org.eclipse.ui.*;
 import org.eclipse.ui.progress.UIJob;
 import org.eclipse.ui.wizards.datatransfer.*;
@@ -117,6 +122,63 @@ public class PluginImportOperation extends WorkspaceJob {
 		fAlternateSource = alternate;
 	}
 
+	/**
+	 * This custom message box class is used for warning the user about the projects that did not get imported.
+	 * see bug 337730
+	 * 
+	 * This class should get removed when Bug 346078 is fixed.
+	 *
+	 */
+	private class NotImportedProjectsWarningDialog extends MessageDialog {
+
+		/**
+		 * The list of the projects that did not get imported.
+		 */
+		private List fNamesOfNotImportedProjects;
+
+		/**
+		 * Creates a warning message dialog. The message area will contain the scrollable
+		 * text box that will show the list of the projects supplied.
+		 * 
+		 * @param warningMessage
+		 * 				the warning message to be shown on the dialog.
+		 * @param namesOfNotImportedProjects
+		 * 				the list of the project names that did not get imported.
+		 */
+		public NotImportedProjectsWarningDialog(String warningMessage, List namesOfNotImportedProjects) {
+			super(PlatformUI.getWorkbench().getModalDialogShellProvider().getShell(), PDEUIMessages.ImportWizard_title, null, warningMessage, MessageDialog.WARNING, new String[] {IDialogConstants.OK_LABEL}, 0);
+			fNamesOfNotImportedProjects = namesOfNotImportedProjects;
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.dialogs.MessageDialog#createCustomArea(org.eclipse.swt.widgets.Composite)
+		 */
+		protected Control createCustomArea(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			GridLayout layout = new GridLayout();
+			layout.numColumns = 1;
+			composite.setLayout(layout);
+
+			composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+			Text projectText = new Text(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY | SWT.BORDER);
+			projectText.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+			GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.widthHint = convertWidthInCharsToPixels(60);
+			gd.heightHint = convertHeightInCharsToPixels(10);
+			projectText.setLayoutData(gd);
+
+			StringBuffer projectListBuffer = new StringBuffer();
+			for (Iterator iterator = fNamesOfNotImportedProjects.iterator(); iterator.hasNext();) {
+				String project = (String) iterator.next();
+				projectListBuffer.append(project).append('\n');
+			}
+			projectText.setText(projectListBuffer.toString());
+			return composite;
+
+		}
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.resources.WorkspaceJob#runInWorkspace(org.eclipse.core.runtime.IProgressMonitor)
 	 */
@@ -126,19 +188,49 @@ public class PluginImportOperation extends WorkspaceJob {
 			monitor.beginTask("", fModels.length + 5); //$NON-NLS-1$
 			MultiStatus multiStatus = new MultiStatus(PDEPlugin.getPluginId(), IStatus.OK, PDEUIMessages.ImportWizard_operation_multiProblem, null);
 
-			deleteConflictingProjects(new SubProgressMonitor(monitor, 2));
+			deleteConflictingProjects(multiStatus, new SubProgressMonitor(monitor, 2));
 			if (monitor.isCanceled()) {
 				return Status.CANCEL_STATUS;
 			}
-			// TODO: more than one importer
 
 			if (fImportType == IMPORT_FROM_REPOSITORY) {
+				final List namesOfNotImportedProjects = new ArrayList();
 				Iterator iterator = fImportDescriptions.entrySet().iterator();
 				while (iterator.hasNext()) {
 					Entry entry = (Entry) iterator.next();
 					IBundleImporter importer = (IBundleImporter) entry.getKey();
-					BundleImportDescription[] descriptions = (BundleImportDescription[]) entry.getValue();
-					importer.performImport(descriptions, new SubProgressMonitor(monitor, descriptions.length));
+					ScmUrlImportDescription[] descriptions = (ScmUrlImportDescription[]) entry.getValue();
+					IProject[] importedProjects = importer.performImport(descriptions, new SubProgressMonitor(monitor, descriptions.length));
+					if (importedProjects.length == descriptions.length)
+						continue;
+
+					ArrayList namesOfImportedProjects = new ArrayList(importedProjects.length);
+					for (int i = 0; i < importedProjects.length; i++) {
+						namesOfImportedProjects.add(importedProjects[i].getName());
+					}
+					for (int i = 0; i < descriptions.length; i++) {
+						String projectName = descriptions[i].getProject();
+						if (!namesOfImportedProjects.contains(projectName)) {
+							namesOfNotImportedProjects.add(projectName);
+						}
+					}
+				}
+				if (namesOfNotImportedProjects.size() > 0) {
+					UIJob job = new UIJob(PDEUIMessages.PluginImportOperation_WarningDialogJob) {
+
+						public IStatus runInUIThread(IProgressMonitor monitor) {
+							String dialogMessage = namesOfNotImportedProjects.size() == 1 ? PDEUIMessages.PluginImportOperation_WarningDialogMessageSingular : PDEUIMessages.PluginImportOperation_WarningDialogMessagePlural;
+							NotImportedProjectsWarningDialog dialog = new NotImportedProjectsWarningDialog(dialogMessage, namesOfNotImportedProjects);
+							dialog.open();
+							return Status.OK_STATUS;
+						}
+					};
+
+					try {
+						job.schedule();
+						job.join();
+					} catch (InterruptedException e1) {
+					}
 				}
 			} else {
 				for (int i = 0; i < fModels.length; i++) {
@@ -173,13 +265,14 @@ public class PluginImportOperation extends WorkspaceJob {
 	}
 
 	/**
-	 * If there are existing projects in the workspace with the same sybmolic name, open a dialog
+	 * If there are existing projects in the workspace with the same symbolic name, open a dialog
 	 * asking the user if they would like to delete those projects.  The projects are deleted before
 	 * the import continues so the individual imports can do a simple search for an allowed plug-in name.
 	 * 
-	 * @param monitor progress monitor, must not be null
+	 * @param status the multi-status used to report problems
+	 * @param monitor progress monitor, must not be <code>null</code>
 	 */
-	private void deleteConflictingProjects(IProgressMonitor monitor) throws CoreException {
+	private void deleteConflictingProjects(MultiStatus status, IProgressMonitor monitor) {
 		monitor.beginTask("", 5); //$NON-NLS-1$
 		try {
 			IPluginModelBase[] workspacePlugins = PluginRegistry.getWorkspaceModels();
@@ -267,12 +360,16 @@ public class PluginImportOperation extends WorkspaceJob {
 					IPluginModelBase plugin = (IPluginModelBase) overwriteProjectList.get(i);
 					monitor.setTaskName(NLS.bind(PDEUIMessages.PluginImportOperation_Importing_plugin, plugin.getPluginBase().getId()));
 					IProject project = plugin.getUnderlyingResource().getProject();
-					if (RepositoryProvider.isShared(project))
-						RepositoryProvider.unmap(project);
-					if (!safeDeleteCheck(project, monitor)) {
-						throw new CoreException(new Status(IStatus.ERROR, PDEPlugin.getPluginId(), NLS.bind(PDEUIMessages.PluginImportOperation_could_not_delete_project, project.getName())));
+					try {
+						if (RepositoryProvider.isShared(project))
+							RepositoryProvider.unmap(project);
+						if (!safeDeleteCheck(project, monitor)) {
+							status.add(new Status(IStatus.ERROR, PDEPlugin.getPluginId(), NLS.bind(PDEUIMessages.PluginImportOperation_could_not_delete_project, project.getName())));
+						}
+						project.delete(true, true, monitor);
+					} catch (CoreException ex) {
+						status.add(new Status(IStatus.ERROR, PDEPlugin.getPluginId(), IStatus.OK, NLS.bind(PDEUIMessages.PluginImportOperation_could_not_delete_project, project.getName()), ex));
 					}
-					project.delete(true, true, monitor);
 				}
 				monitor.worked(2);
 			} else {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizard.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizard.java
index 90269aa..ed12437 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizard.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -22,9 +22,9 @@ import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.internal.core.SourceLocationManager;
 import org.eclipse.pde.internal.launching.launcher.BundleLauncherHelper;
 import org.eclipse.pde.internal.ui.*;
-import org.eclipse.pde.internal.ui.provisional.IBundeImportWizardPage;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.team.ui.IScmUrlImportWizardPage;
 import org.eclipse.ui.IImportWizard;
 import org.eclipse.ui.IWorkbench;
 
@@ -107,6 +107,7 @@ public class PluginImportWizard extends Wizard implements IImportWizard, IPageCh
 			return false;
 		}
 		doImportOperation(page1.getImportType(), models, page2.forceAutoBuild(), launchedConfiguration > 0, page1.getAlternateSourceLocations(), page1.getImportDescriptions());
+
 		return true;
 	}
 
@@ -212,7 +213,7 @@ public class PluginImportWizard extends Wizard implements IImportWizard, IPageCh
 	 * @see org.eclipse.jface.dialogs.IPageChangingListener#handlePageChanging(org.eclipse.jface.dialogs.PageChangingEvent)
 	 */
 	public void handlePageChanging(PageChangingEvent event) {
-		if (event.getCurrentPage() instanceof BaseImportWizardSecondPage && event.getTargetPage() instanceof IBundeImportWizardPage) {
+		if (event.getCurrentPage() instanceof BaseImportWizardSecondPage && event.getTargetPage() instanceof IScmUrlImportWizardPage) {
 			IPluginModelBase[] models = getModelsToImport();
 			page1.configureBundleImportPages(models);
 		}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java
index 4cc9029..c9b1aee 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardDetailedPage.java
@@ -443,7 +443,6 @@ public class PluginImportWizardDetailedPage extends BaseImportWizardSecondPage {
 		updateButtonEnablement(doAddEnablement, doRemoveEnablement);
 		setPageComplete(fImportListViewer.getTable().getItemCount() > 0);
 		setMessage(PDEUIMessages.ImportWizard_DetailedPage_desc);
-		checkRepositoryAvailability();
 	}
 
 	private void updateCount() {
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java
index 1268559..78255fb 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardExpressPage.java
@@ -11,7 +11,8 @@
 package org.eclipse.pde.internal.ui.wizards.imports;
 
 import java.util.ArrayList;
-import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IJavaProject;
@@ -23,8 +24,6 @@ import org.eclipse.pde.core.build.IBuildModel;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
 import org.eclipse.pde.internal.core.WorkspaceModelManager;
-import org.eclipse.pde.internal.core.build.WorkspaceBuildModel;
-import org.eclipse.pde.internal.core.project.PDEProject;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.pde.internal.ui.elements.DefaultContentProvider;
 import org.eclipse.pde.internal.ui.parts.WizardCheckboxTablePart;
@@ -240,14 +239,7 @@ public class PluginImportWizardExpressPage extends BaseImportWizardSecondPage {
 
 	private void addExtraPrerequisites(IPluginModelBase model, ArrayList result) {
 		try {
-			IBuildModel buildModel = model.getBuildModel();
-			if (buildModel == null) {
-				IFile buildFile = PDEProject.getBuildProperties(model.getUnderlyingResource().getProject());
-				if (buildFile.exists()) {
-					buildModel = new WorkspaceBuildModel(buildFile);
-					buildModel.load();
-				}
-			}
+			IBuildModel buildModel = PluginRegistry.createBuildModel(model);
 			if (buildModel == null)
 				return;
 
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardFirstPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardFirstPage.java
index 8ac3df9..00b281e 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardFirstPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/PluginImportWizardFirstPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,19 +26,21 @@ import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.*;
 import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.internal.core.*;
-import org.eclipse.pde.internal.core.importing.IBundleImporter;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
 import org.eclipse.pde.internal.core.project.BundleProjectService;
 import org.eclipse.pde.internal.core.target.provisional.*;
 import org.eclipse.pde.internal.ui.*;
 import org.eclipse.pde.internal.ui.preferences.TargetPlatformPreferenceNode;
-import org.eclipse.pde.internal.ui.provisional.IBundeImportWizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
+import org.eclipse.team.core.ScmUrlImportDescription;
+import org.eclipse.team.core.Team;
+import org.eclipse.team.core.importing.provisional.IBundleImporter;
+import org.eclipse.team.ui.IScmUrlImportWizardPage;
+import org.eclipse.team.ui.TeamUI;
 import org.eclipse.ui.PlatformUI;
 import org.osgi.framework.Version;
 
@@ -62,7 +64,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 	private Combo targetDefinitionCombo;
 	private List targetDefinitions;
 	private Combo importDirectory;
-	private Button openTargetPrefsButton;
+	private Link openTargetPrefsLink;
 
 	private Button importButton;
 	private Button scanButton;
@@ -270,7 +272,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 	private void createImportFromGroup(Composite parent) {
 		Group composite = SWTFactory.createGroup(parent, PDEUIMessages.ImportWizard_FirstPage_importFrom, 3, 1, GridData.FILL_HORIZONTAL);
 
-		importActiveTargetButton = SWTFactory.createRadioButton(composite, PDEUIMessages.ImportWizard_FirstPage_target, 3);
+		importActiveTargetButton = SWTFactory.createRadioButton(composite, PDEUIMessages.ImportWizard_FirstPage_target, 1);
 		importActiveTargetButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				updateSourceGroup(getImportOrigin());
@@ -278,22 +280,11 @@ public class PluginImportWizardFirstPage extends WizardPage {
 			}
 		});
 
-		importTargetDefinitionButton = SWTFactory.createRadioButton(composite, PDEUIMessages.PluginImportWizardFirstPage_0, 1);
-		importTargetDefinitionButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				updateSourceGroup(getImportOrigin());
-				validateDropLocation();
-			}
-		});
-		targetDefinitionCombo = SWTFactory.createCombo(composite, SWT.DROP_DOWN | SWT.READ_ONLY, 1, GridData.FILL_HORIZONTAL, null);
-		targetDefinitionCombo.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				validateDropLocation();
-			}
-		});
-
-		openTargetPrefsButton = SWTFactory.createPushButton(composite, PDEUIMessages.ImportWizard_FirstPage_goToTarget, null);
-		openTargetPrefsButton.addSelectionListener(new SelectionAdapter() {
+		Composite linkComp = SWTFactory.createComposite(composite, 1, 2, GridData.FILL_HORIZONTAL, 0, 0);
+		openTargetPrefsLink = new Link(linkComp, SWT.NONE);
+		openTargetPrefsLink.setText(PDEUIMessages.ImportWizard_FirstPage_goToTarget);
+		openTargetPrefsLink.setLayoutData(new GridData(SWT.END, SWT.BEGINNING, true, false));
+		openTargetPrefsLink.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				ITargetDefinition selected = getTargetDefinition();
 				ITargetHandle handle = null;
@@ -325,6 +316,20 @@ public class PluginImportWizardFirstPage extends WizardPage {
 			}
 		});
 
+		importTargetDefinitionButton = SWTFactory.createRadioButton(composite, PDEUIMessages.PluginImportWizardFirstPage_0, 1);
+		importTargetDefinitionButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateSourceGroup(getImportOrigin());
+				validateDropLocation();
+			}
+		});
+		targetDefinitionCombo = SWTFactory.createCombo(composite, SWT.DROP_DOWN | SWT.READ_ONLY, 2, GridData.FILL_HORIZONTAL, null);
+		targetDefinitionCombo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				validateDropLocation();
+			}
+		});
+
 		importDirectoryButton = SWTFactory.createRadioButton(composite, PDEUIMessages.ImportWizard_FirstPage_otherFolder, 1);
 		importDirectoryButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
@@ -575,12 +580,12 @@ public class PluginImportWizardFirstPage extends WizardPage {
 				}
 				IResolvedBundle[] bundles = target.getBundles();
 				Map sourceMap = new HashMap();
-				URL[] all = new URL[bundles.length];
+				List/*<URL>*/all = new ArrayList();
 				for (int i = 0; i < bundles.length; i++) {
 					IResolvedBundle bundle = bundles[i];
 					try {
 						if (bundle.getStatus().isOK()) {
-							all[i] = new File(bundle.getBundleInfo().getLocation()).toURL();
+							all.add(new File(bundle.getBundleInfo().getLocation()).toURL());
 							if (bundle.isSourceBundle()) {
 								sourceMap.put(new SourceLocationKey(bundle.getBundleInfo().getSymbolicName(), new Version(bundle.getBundleInfo().getVersion())), bundle);
 							}
@@ -592,7 +597,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 					}
 				}
 				pm = new SubProgressMonitor(monitor, 50);
-				state = new PDEState(all, false, pm);
+				state = new PDEState((URL[]) all.toArray(new URL[0]), false, pm);
 				models = state.getTargetModels();
 				List sourceModels = new ArrayList();
 				List sourceBundles = new ArrayList();
@@ -636,7 +641,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 				while (iterator.hasNext()) {
 					if (!monitor.isCanceled()) {
 						Entry entry = (Entry) iterator.next();
-						BundleImportDescription[] descriptions = (BundleImportDescription[]) entry.getValue();
+						ScmUrlImportDescription[] descriptions = (ScmUrlImportDescription[]) entry.getValue();
 						for (int i = 0; i < descriptions.length; i++) {
 							repositoryModels.add(descriptions[i].getProperty(BundleProjectService.PLUGIN));
 						}
@@ -649,9 +654,10 @@ public class PluginImportWizardFirstPage extends WizardPage {
 				while (iterator.hasNext()) {
 					Entry entry = (Entry) iterator.next();
 					IBundleImporter importer = (IBundleImporter) entry.getKey();
-					IBundeImportWizardPage page = (IBundeImportWizardPage) importIdToWizardPage.get(importer.getId());
+					ScmUrlImportDescription[] descriptions = (ScmUrlImportDescription[]) entry.getValue();
+					IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) importIdToWizardPage.get(importer.getId());
 					if (page == null) {
-						page = getPage(importer.getId());
+						page = TeamUI.getPages(descriptions)[0];
 						if (page != null) {
 							importIdToWizardPage.put(importer.getId(), page);
 							((Wizard) getWizard()).addPage(page);
@@ -659,7 +665,6 @@ public class PluginImportWizardFirstPage extends WizardPage {
 					}
 					if (page != null) {
 						nextPages.add(page);
-//						page.setSelection((BundleImportDescription[]) entry.getValue());
 					}
 				}
 			}
@@ -679,7 +684,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 	boolean arePagesComplete() {
 		Iterator iterator = nextPages.iterator();
 		while (iterator.hasNext()) {
-			IBundeImportWizardPage page = (IBundeImportWizardPage) iterator.next();
+			IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) iterator.next();
 			if (!page.isPageComplete()) {
 				return false;
 			}
@@ -695,7 +700,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 	boolean finishPages() {
 		Iterator iterator = nextPages.iterator();
 		while (iterator.hasNext()) {
-			IBundeImportWizardPage page = (IBundeImportWizardPage) iterator.next();
+			IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) iterator.next();
 			if (!page.finish()) {
 				return false;
 			}
@@ -711,11 +716,11 @@ public class PluginImportWizardFirstPage extends WizardPage {
 	Map getImportDescriptions() {
 		Map map = new HashMap();
 		if (getImportType() == PluginImportOperation.IMPORT_FROM_REPOSITORY) {
-			IBundleImporter[] importers = ((BundleProjectService) BundleProjectService.getDefault()).getBundleImporters();
+			IBundleImporter[] importers = Team.getBundleImporters();
 			for (int i = 0; i < importers.length; i++) {
 				IBundleImporter importer = importers[i];
 				if (importerToInstructions.containsKey(importer)) {
-					IBundeImportWizardPage page = (IBundeImportWizardPage) importIdToWizardPage.get(importer.getId());
+					IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) importIdToWizardPage.get(importer.getId());
 					if (page != null && nextPages.contains(page)) {
 						map.put(importer, page.getSelection());
 					}
@@ -735,7 +740,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 		if (nextPages.isEmpty()) {
 			return null;
 		}
-		if (page instanceof IBundeImportWizardPage) {
+		if (page instanceof IScmUrlImportWizardPage) {
 			int index = nextPages.indexOf(page);
 			if (index >= 0 && index < (nextPages.size() - 2)) {
 				return (IWizardPage) nextPages.get(index + 1);
@@ -754,7 +759,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 	 * @return previous page or <code>null</code>
 	 */
 	IWizardPage getPreviousPage(IWizardPage page) {
-		if (page instanceof IBundeImportWizardPage) {
+		if (page instanceof IScmUrlImportWizardPage) {
 			int index = nextPages.indexOf(page);
 			if (index > 0) {
 				return (IWizardPage) nextPages.get(index - 1);
@@ -764,32 +769,6 @@ public class PluginImportWizardFirstPage extends WizardPage {
 	}
 
 	/**
-	 * Creates and returns a wizard page associated with the given bundle importer extension identifier
-	 * or <code>null</code> of none.
-	 * 
-	 * @param importerId org.eclipse.pde.core.bundleImporters extension identifier
-	 * @return associated bundle import wizard page or <code>null</code>
-	 */
-	private IBundeImportWizardPage getPage(String importerId) {
-		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(IPDEUIConstants.EXTENSION_POINT_BUNDLE_IMPORT_PAGES);
-		if (point != null) {
-			IConfigurationElement[] infos = point.getConfigurationElements();
-			for (int i = 0; i < infos.length; i++) {
-				IConfigurationElement element = infos[i];
-				String id = element.getAttribute("bundleImporter"); //$NON-NLS-1$
-				if (id != null && importerId.equals(id)) {
-					try {
-						return (IBundeImportWizardPage) element.createExecutableExtension("class"); //$NON-NLS-1$
-					} catch (CoreException e) {
-						PDEPlugin.log(e);
-					}
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
 	 * @return the complete set of {@link IPluginModelBase}s for the given drop location
 	 */
 	public IPluginModelBase[] getModels() {
@@ -879,7 +858,7 @@ public class PluginImportWizardFirstPage extends WizardPage {
 		while (iterator.hasNext()) {
 			Entry entry = (Entry) iterator.next();
 			IBundleImporter importer = (IBundleImporter) entry.getKey();
-			BundleImportDescription[] descriptions = (BundleImportDescription[]) entry.getValue();
+			ScmUrlImportDescription[] descriptions = (ScmUrlImportDescription[]) entry.getValue();
 			for (int i = 0; i < descriptions.length; i++) {
 				IPluginModelBase model = (IPluginModelBase) descriptions[i].getProperty(BundleProjectService.PLUGIN);
 				if (modelsSet.contains(model)) {
@@ -897,8 +876,8 @@ public class PluginImportWizardFirstPage extends WizardPage {
 			Entry entry = (Entry) iterator.next();
 			IBundleImporter importer = (IBundleImporter) entry.getKey();
 			List list = (List) entry.getValue();
-			BundleImportDescription[] descriptions = (BundleImportDescription[]) list.toArray(new BundleImportDescription[list.size()]);
-			IBundeImportWizardPage page = (IBundeImportWizardPage) importIdToWizardPage.get(importer.getId());
+			ScmUrlImportDescription[] descriptions = (ScmUrlImportDescription[]) list.toArray(new ScmUrlImportDescription[list.size()]);
+			IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) importIdToWizardPage.get(importer.getId());
 			if (page != null) {
 				page.setSelection(descriptions);
 			}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/RepositoryImportWizard.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/RepositoryImportWizard.java
index 97c2535..b4870e5 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/RepositoryImportWizard.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/imports/RepositoryImportWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,16 +12,17 @@ package org.eclipse.pde.internal.ui.wizards.imports;
 
 import java.util.*;
 import java.util.Map.Entry;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.wizard.IWizardPage;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.internal.core.importing.IBundleImporter;
-import org.eclipse.pde.internal.core.importing.provisional.BundleImportDescription;
 import org.eclipse.pde.internal.core.project.BundleProjectService;
 import org.eclipse.pde.internal.ui.*;
-import org.eclipse.pde.internal.ui.provisional.IBundeImportWizardPage;
+import org.eclipse.team.core.ScmUrlImportDescription;
+import org.eclipse.team.core.importing.provisional.IBundleImporter;
+import org.eclipse.team.ui.IScmUrlImportWizardPage;
+import org.eclipse.team.ui.TeamUI;
 
 /**
  * Wizard to import plug-ins from a repository.
@@ -63,43 +64,20 @@ public class RepositoryImportWizard extends Wizard {
 		while (iterator.hasNext()) {
 			Entry entry = (Entry) iterator.next();
 			IBundleImporter importer = (IBundleImporter) entry.getKey();
-			BundleImportDescription[] descriptions = (BundleImportDescription[]) entry.getValue();
-			IBundeImportWizardPage page = (IBundeImportWizardPage) fIdToPages.get(importer.getId());
+			ScmUrlImportDescription[] descriptions = (ScmUrlImportDescription[]) entry.getValue();
+			IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) fIdToPages.get(importer.getId());
 			if (page == null) {
-				page = getImportPage(importer.getId());
+				try {
+					page = TeamUI.getPages(descriptions)[0];
+				} catch (CoreException e) {
+					PDEPlugin.log(e);
+				}
 				if (page != null) {
 					fIdToPages.put(importer.getId(), page);
 					addPage(page);
-					page.setSelection(descriptions);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Creates and returns a wizard page associated with the given bundle importer extension identifier
-	 * or <code>null</code> of none.
-	 * 
-	 * @param importerId org.eclipse.pde.core.bundleImporters extension identifier
-	 * @return associated bundle import wizard page or <code>null</code>
-	 */
-	private IBundeImportWizardPage getImportPage(String importerId) {
-		IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(IPDEUIConstants.EXTENSION_POINT_BUNDLE_IMPORT_PAGES);
-		if (point != null) {
-			IConfigurationElement[] infos = point.getConfigurationElements();
-			for (int i = 0; i < infos.length; i++) {
-				IConfigurationElement element = infos[i];
-				String id = element.getAttribute("bundleImporter"); //$NON-NLS-1$
-				if (id != null && importerId.equals(id)) {
-					try {
-						return (IBundeImportWizardPage) element.createExecutableExtension("class"); //$NON-NLS-1$
-					} catch (CoreException e) {
-						PDEPlugin.log(e);
-					}
 				}
 			}
 		}
-		return null;
 	}
 
 	private IDialogSettings getSettingsSection(IDialogSettings master) {
@@ -115,23 +93,22 @@ public class RepositoryImportWizard extends Wizard {
 	 */
 	public boolean performFinish() {
 		// collect the bundle descriptions from each page and import
-		Map importMap = new HashMap();
 		List plugins = new ArrayList();
 		IWizardPage[] pages = getPages();
+		Map importMap = new HashMap();
 		for (int i = 0; i < pages.length; i++) {
-			IBundeImportWizardPage page = (IBundeImportWizardPage) pages[i];
+			IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) pages[i];
 			if (page.finish()) {
-				BundleImportDescription[] descriptions = page.getSelection();
+				ScmUrlImportDescription[] descriptions = page.getSelection();
 				if (descriptions != null && descriptions.length > 0) {
 					for (int j = 0; j < descriptions.length; j++) {
-						BundleImportDescription description = descriptions[j];
 						if (j == 0) {
-							Object importer = description.getProperty(BundleProjectService.BUNDLE_IMPORTER);
+							Object importer = descriptions[j].getProperty(BundleProjectService.BUNDLE_IMPORTER);
 							if (importer != null) {
 								importMap.put(importer, descriptions);
 							}
 						}
-						Object plugin = description.getProperty(BundleProjectService.PLUGIN);
+						Object plugin = descriptions[j].getProperty(BundleProjectService.PLUGIN);
 						if (plugin != null) {
 							plugins.add(plugin);
 						}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java
index 66e8e4c..a42bc13 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewLibraryPluginCreationPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -133,7 +133,7 @@ public class NewLibraryPluginCreationPage extends WizardNewProjectCreationPage {
 		});
 
 		fTargetCombo = new Combo(group, SWT.READ_ONLY | SWT.SINGLE);
-		fTargetCombo.setItems(new String[] {ICoreConstants.TARGET36, ICoreConstants.TARGET35, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31, ICoreConstants.TARGET30});
+		fTargetCombo.setItems(new String[] {ICoreConstants.TARGET37, ICoreConstants.TARGET36, ICoreConstants.TARGET35, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31, ICoreConstants.TARGET30});
 		fTargetCombo.setText(TargetPlatformHelper.getTargetVersionString());
 
 		fOSGIButton = createButton(group, SWT.RADIO, 1, 30);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationOperation.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationOperation.java
index 6eb38b5..d0f51aa 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationOperation.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -281,7 +281,7 @@ public class NewProjectCreationOperation extends WorkspaceModifyOperation {
 				generateTopLevelPluginClass(project, new SubProgressMonitor(monitor, 1));
 			}
 
-			// add API tooling nature if requested
+			// add API Tools nature if requested
 			if (data.doEnableAPITooling()) {
 				addApiAnalysisNature();
 			}
@@ -438,14 +438,20 @@ public class NewProjectCreationOperation extends WorkspaceModifyOperation {
 		return fResult;
 	}
 
+	/**
+	 * Attempts to select the given file in the active workbench part and open the file
+	 * in its default editor.  Uses asyncExec to join with the UI thread.
+	 * 
+	 * @param file file to open the editor on
+	 */
 	private void openFile(final IFile file) {
-		final IWorkbenchWindow ww = PDEPlugin.getActiveWorkbenchWindow();
-		final IWorkbenchPage page = ww.getActivePage();
-		if (page == null)
-			return;
-		final IWorkbenchPart focusPart = page.getActivePart();
-		ww.getShell().getDisplay().asyncExec(new Runnable() {
+		PDEPlugin.getDefault().getWorkbench().getDisplay().asyncExec(new Runnable() {
 			public void run() {
+				final IWorkbenchWindow ww = PDEPlugin.getActiveWorkbenchWindow();
+				final IWorkbenchPage page = ww.getActivePage();
+				if (page == null)
+					return;
+				IWorkbenchPart focusPart = page.getActivePart();
 				if (focusPart instanceof ISetSelectionTarget) {
 					ISelection selection = new StructuredSelection(file);
 					((ISetSelectionTarget) focusPart).selectReveal(selection);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java
index 8b57f8d..1820a5d 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/NewProjectCreationPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -131,7 +131,7 @@ public class NewProjectCreationPage extends WizardNewProjectCreationPage {
 		});
 
 		fEclipseCombo = new Combo(group, SWT.READ_ONLY | SWT.SINGLE);
-		fEclipseCombo.setItems(new String[] {ICoreConstants.TARGET36, ICoreConstants.TARGET35, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31});
+		fEclipseCombo.setItems(new String[] {ICoreConstants.TARGET37, ICoreConstants.TARGET36, ICoreConstants.TARGET35, ICoreConstants.TARGET34, ICoreConstants.TARGET33, ICoreConstants.TARGET32, ICoreConstants.TARGET31});
 		boolean comboInitialized = false;
 		if (settings != null && !osgiProject) {
 			String text = settings.get(S_TARGET_NAME);
@@ -143,7 +143,7 @@ public class NewProjectCreationPage extends WizardNewProjectCreationPage {
 			if (PDECore.getDefault().areModelsInitialized())
 				fEclipseCombo.setText(TargetPlatformHelper.getTargetVersionString());
 			else
-				fEclipseCombo.setText(ICoreConstants.TARGET36);
+				fEclipseCombo.setText(ICoreConstants.TARGET37);
 		}
 
 		fOSGIButton = createButton(group, SWT.RADIO, 1, 30);
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginContentPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginContentPage.java
index f3da36a..0b94aaa 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginContentPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginContentPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -321,7 +321,7 @@ public class PluginContentPage extends ContentPage {
 			fEELabel.setEnabled(allowEESelection);
 			fEEChoice.setEnabled(allowEESelection);
 			fExeEnvButton.setEnabled(allowEESelection);
-			// API tooling only works for osgi bundles with java natures
+			// API Tools only works for osgi bundles with java natures
 			fApiAnalysisButton.setEnabled(allowEESelection);
 
 			fRCPGroup.setVisible(!fData.isSimple() && !isPureOSGi());
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginFieldData.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginFieldData.java
index e53b4fd..20daf5b 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginFieldData.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/plugin/PluginFieldData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,15 +74,15 @@ public class PluginFieldData extends AbstractFieldData implements IPluginFieldDa
 	}
 
 	/**
-	 * @return whether API Tooling should be enabled in the plugin when created
+	 * @return whether API Tools should be enabled in the plugin when created
 	 */
 	public boolean doEnableAPITooling() {
 		return fSetupAPITooling;
 	}
 
 	/**
-	 * Set whether API Tooling should be enabled in the plugin when created
-	 * @param enable whether to enable API tooling
+	 * Set whether API Tools should be enabled in the plugin when created
+	 * @param enable whether to enable API Tools
 	 */
 	public void setEnableAPITooling(boolean enable) {
 		fSetupAPITooling = enable;
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/target/TargetDefinitionContentPage.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/target/TargetDefinitionContentPage.java
index 751a49f..f81c883 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/target/TargetDefinitionContentPage.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/wizards/target/TargetDefinitionContentPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -152,6 +152,7 @@ public class TargetDefinitionContentPage extends TargetDefinitionPage {
 
 		TabFolder tabs = new TabFolder(comp, SWT.NONE);
 		tabs.setLayoutData(new GridData(GridData.FILL_BOTH));
+		tabs.setFont(comp.getFont());
 
 		fLocationTab = new TabItem(tabs, SWT.NONE);
 		fLocationTab.setText(PDEUIMessages.LocationSection_0);
@@ -538,6 +539,7 @@ public class TargetDefinitionContentPage extends TargetDefinitionPage {
 		vmGroup.setLayout(new GridLayout(1, false));
 		vmGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		vmGroup.setText(PDEUIMessages.JavaArgumentsTab_vmArgsGroup);
+		vmGroup.setFont(container.getFont());
 
 		fVMArgs = SWTFactory.createText(vmGroup, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL, 1, 200, 60, GridData.FILL_BOTH);
 		fVMArgs.addModifyListener(new ModifyListener() {
@@ -608,6 +610,7 @@ public class TargetDefinitionContentPage extends TargetDefinitionPage {
 		GridLayout layout = new GridLayout(2, false);
 		container.setLayout(layout);
 		container.setLayoutData(new GridData(GridData.FILL_BOTH));
+		container.setFont(parent.getFont());
 
 		createImpLabel(container);
 		createImpTable(container);
@@ -618,6 +621,7 @@ public class TargetDefinitionContentPage extends TargetDefinitionPage {
 	private void createImpLabel(Composite container) {
 		Label label = new Label(container, SWT.NONE);
 		label.setText(PDEUIMessages.TargetImplicitPluginsTab_desc);
+		label.setFont(container.getFont());
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		label.setLayoutData(gd);
@@ -628,6 +632,7 @@ public class TargetDefinitionContentPage extends TargetDefinitionPage {
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		gd.heightHint = 250;
 		fElementViewer.getControl().setLayoutData(gd);
+		fElementViewer.getControl().setFont(container.getFont());
 		fElementViewer.setContentProvider(new DefaultTableProvider() {
 			public Object[] getElements(Object inputElement) {
 				ITargetDefinition target = getTargetDefinition();
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitWorkbenchLaunchShortcut.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitWorkbenchLaunchShortcut.java
index 7cec14f..6a71a90 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitWorkbenchLaunchShortcut.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitWorkbenchLaunchShortcut.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,9 +10,6 @@
  *******************************************************************************/
 package org.eclipse.pde.ui.launcher;
 
-import org.eclipse.pde.launching.IPDELauncherConstants;
-import org.eclipse.pde.launching.PDESourcePathProvider;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.jdt.core.IJavaElement;
@@ -23,6 +20,9 @@ import org.eclipse.pde.internal.core.TargetPlatformHelper;
 import org.eclipse.pde.internal.launching.IPDEConstants;
 import org.eclipse.pde.internal.launching.launcher.LaunchArgumentsHelper;
 import org.eclipse.pde.internal.launching.launcher.LauncherUtils;
+import org.eclipse.pde.launching.IPDELauncherConstants;
+import org.eclipse.pde.launching.PDESourcePathProvider;
+
 
 /**
  * A launch shortcut capable of launching a Plug-in JUnit test.
@@ -45,11 +45,13 @@ public class JUnitWorkbenchLaunchShortcut extends JUnitLaunchShortcut {
 	 */
 	protected ILaunchConfigurationWorkingCopy createLaunchConfiguration(IJavaElement element) throws CoreException {
 		ILaunchConfigurationWorkingCopy configuration = super.createLaunchConfiguration(element);
+		String configName = configuration.getName();
+
 		if (TargetPlatformHelper.usesNewApplicationModel())
 			configuration.setAttribute(IPDEConstants.LAUNCHER_PDE_VERSION, "3.3"); //$NON-NLS-1$ 
 		else if (TargetPlatformHelper.getTargetVersion() >= 3.2)
 			configuration.setAttribute(IPDEConstants.LAUNCHER_PDE_VERSION, "3.2a"); //$NON-NLS-1$
-		configuration.setAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultJUnitWorkspaceLocation());
+		configuration.setAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultWorkspaceLocation(configName, true));
 		configuration.setAttribute(IPDELauncherConstants.DOCLEAR, true);
 		configuration.setAttribute(IPDELauncherConstants.ASKCLEAR, false);
 		configuration.setAttribute(IPDEConstants.APPEND_ARGS_EXPLICITLY, true);
@@ -80,8 +82,11 @@ public class JUnitWorkbenchLaunchShortcut extends JUnitLaunchShortcut {
 
 		// configuration attributes
 		configuration.setAttribute(IPDELauncherConstants.CONFIG_GENERATE_DEFAULT, true);
-		configuration.setAttribute(IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, false);
-		configuration.setAttribute(IPDELauncherConstants.CONFIG_LOCATION, LaunchArgumentsHelper.getDefaultJUnitConfigurationLocation());
+		boolean useDefaultArea = LaunchArgumentsHelper.getDefaultJUnitWorkspaceIsContainer();
+		configuration.setAttribute(IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, useDefaultArea);
+		if (!useDefaultArea) {
+			configuration.setAttribute(IPDELauncherConstants.CONFIG_LOCATION, LaunchArgumentsHelper.getDefaultJUnitConfigurationLocation());
+		}
 		configuration.setAttribute(IPDELauncherConstants.CONFIG_CLEAR_AREA, true);
 
 		// tracing option
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/MainTab.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/MainTab.java
index 494b1c7..5ace672 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/MainTab.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/MainTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,13 +106,26 @@ public class MainTab extends AbstractLauncherTab implements IPDELauncherConstant
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.LAUNCHER_BASIC);
 	}
 
+	/**
+	 * Applies the given data to this page.
+	 * 
+	 * @param data the data to apply
+	 * @since 3.7
+	 * 
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public void applyData(Object data) {
+		if (data == LOCATION)
+			fDataBlock.selectWorkspaceLocation();
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
 	 */
 	public void initializeFrom(ILaunchConfiguration config) {
 		try {
-			fDataBlock.initializeFrom(config);
+			fDataBlock.initializeFrom(config, false);
 			fProgramBlock.initializeFrom(config);
 			fJreBlock.initializeFrom(config);
 		} catch (CoreException e) {
@@ -136,7 +149,7 @@ public class MainTab extends AbstractLauncherTab implements IPDELauncherConstant
 	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
 	 */
 	public void performApply(ILaunchConfigurationWorkingCopy config) {
-		fDataBlock.performApply(config);
+		fDataBlock.performApply(config, false);
 		fProgramBlock.performApply(config);
 		fJreBlock.performApply(config);
 	}
diff --git a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginJUnitMainTab.java b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginJUnitMainTab.java
index 7834e70..c04dcdf 100644
--- a/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginJUnitMainTab.java
+++ b/eclipse/plugins/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginJUnitMainTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,12 @@
  *******************************************************************************/
 package org.eclipse.pde.ui.launcher;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.pde.internal.ui.launcher.JUnitProgramBlock;
+import org.eclipse.pde.launching.IPDELauncherConstants;
 
 /**
  * A launch configuration tab that displays and edits the main launching arguments
@@ -34,6 +38,21 @@ public class PluginJUnitMainTab extends MainTab {
 
 	/*
 	 * (non-Javadoc)
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
+	 */
+	public void initializeFrom(ILaunchConfiguration config) {
+		try {
+			fDataBlock.initializeFrom(config, true);
+			fProgramBlock.initializeFrom(config);
+			fJreBlock.initializeFrom(config);
+		} catch (CoreException e) {
+			PDEPlugin.logException(e);
+		} finally {
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
 	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
 	 */
 	public void setDefaults(ILaunchConfigurationWorkingCopy config) {
@@ -42,6 +61,16 @@ public class PluginJUnitMainTab extends MainTab {
 		fJreBlock.setDefaults(config);
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
+	 */
+	public void performApply(ILaunchConfigurationWorkingCopy config) {
+		fDataBlock.performApply(config, true);
+		fProgramBlock.performApply(config);
+		fJreBlock.performApply(config);
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getId()
 	 */
diff --git a/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF
index cb84fd3..acd33b3 100644
--- a/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.pde/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.6.100.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.pde/about.properties b/eclipse/plugins/org.eclipse.pde/about.properties
index 6b13031..2635c59 100644
--- a/eclipse/plugins/org.eclipse.pde/about.properties
+++ b/eclipse/plugins/org.eclipse.pde/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Plug-in Development Environment\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/pde
 
diff --git a/eclipse/plugins/org.eclipse.pde/cheatsheets/setup-apitools-existing-projects.xml b/eclipse/plugins/org.eclipse.pde/cheatsheets/setup-apitools-existing-projects.xml
index 78ceb7a..992072b 100644
--- a/eclipse/plugins/org.eclipse.pde/cheatsheets/setup-apitools-existing-projects.xml
+++ b/eclipse/plugins/org.eclipse.pde/cheatsheets/setup-apitools-existing-projects.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,10 +10,10 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/-->
 <cheatsheet
-      title="Setting up API Tooling for existing plug-in projects">
+      title="Setting up API Tools for existing plug-in projects">
    <intro href="/org.eclipse.platform.doc.user/reference/ref-cheatsheets.htm">
       <description>
-         This cheat sheet will help in setting up API Tooling for existing plug-in projects.
+         This cheat sheet will help in setting up API Tools for existing plug-in projects.
       </description>
    </intro>
    <item
@@ -25,24 +25,24 @@
    </item>
    <item
          href="/org.eclipse.pde.doc.user/reference/api-tooling/actions/ref-apitooling-setup-action.htm"
-         title="Setting up API Tooling">
+         title="Setting up API Tools">
       <description>
       </description>
       <subitem
-            label="Select any project in package explorer and invoke the "API Tooling Setup" wizard from "PDE Tools" in the right-click context menu.">
+            label="Select any project in package explorer and invoke the "API Tools Setup" wizard from "PDE Tools" in the right-click context menu.">
       </subitem>
       <subitem
-            label="Select all the projects for which API Tooling is to be enabled. Click "Finish".">
+            label="Select all the projects for which API Tools is to be enabled. Click "Finish".">
       </subitem>
       <subitem
             label="When prompted for setting up an API Baseline, select "Yes".">
       </subitem>
       <subitem
-            label="You are now presented with the "API Baseline" preference page. Click "Add Baseline" to create a default baseline. Provide a name and location, where the location contains an older version of the bundle(s) you are enabling API Tooling for. Click "Reset". Click "Finish". This will trigger a full build.">
+            label="You are now presented with the "API Baseline" preference page. Click "Add Baseline" to create a default baseline. Provide a name and location, where the location contains an older version of the bundle(s) you are enabling API Tools for. Click "Reset". Click "Finish". This will trigger a full build.">
       </subitem>
    </item>
    <item
-         title="Testing API Tooling">
+         title="Testing API Tools">
       <description>
          This is optional and is there just to make sure everything is in place properly.
          
@@ -62,7 +62,7 @@
             label="Let the default baseline "1.0" be selected and click "Finish".">
       </subitem>
       <subitem
-            label="The "API Tooling" view will open displaying the newly added method.">
+            label="The "API Tools" view will open displaying the newly added method.">
       </subitem>
    </item>
 </cheatsheet>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF
index 5998cf3..cf0e001 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.platform.doc.isv; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.help;bundle-version="[3.2.0,4.0.0)"
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/about.html b/eclipse/plugins/org.eclipse.platform.doc.isv/about.html
index 7501377..a253227 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/about.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/about.html
@@ -1,6 +1,6 @@
 <!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"  xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml"  xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>About</title>
@@ -25,4 +25,4 @@ indicated below, the terms and conditions of the EPL still apply to any source c
 and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/build.properties b/eclipse/plugins/org.eclipse.platform.doc.isv/build.properties
index 4ffe955..04a7f75 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/build.properties
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ bin.includes = META-INF/,\
                topics_Questions.xml,\
                topics_Reference.xml,\
                topics_Samples.xml,\
+               topics_WhatsNew.xml,\
                workbench.png,\
                whatsNew/,\
                index*/
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf.htm
index 38bc7ad..6ac76b2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf.htm
@@ -3,7 +3,7 @@
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) Oakland Software and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Oakland Software and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -170,8 +170,6 @@ which is defined using core expressions in the extension point.
 Enablement expressions are commonly defined by sensing the class of an
 object.</p>
 
-<p></p>
-
 <p>A priority may be associated with a content extension which helps
 to determine the order of invocation of the NCEs. It's possible that
 more than one content extension may be enabled for a given object and
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_config.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_config.htm
index d1faecd..5ea7141 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_config.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_config.htm
@@ -3,7 +3,7 @@
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) Oakland Software and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Oakland Software and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -20,7 +20,7 @@
 some level of detail is omitted for clarity and conciseness. For the
 complete details see the extension point documentation or the <a
 	href="cnf_operation.htm">Operational Topics</a>
-section.
+section.</p>
 <ul>
 	<li><b><a
 		href="../reference/extension-points/org_eclipse_ui_navigator_viewer.html">org.eclipse.ui.navigator.viewer</a></b></li>
@@ -29,7 +29,7 @@ section.
 	<li><b><a
 		href="../reference/extension-points/org_eclipse_ui_navigator_linkHelper.html">org.eclipse.ui.navigator.linkHelper</a></b></li>
 </ul>
-</p>
+
 
 <h2>Viewer Configuration</h2>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_operation.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_operation.htm
index dba5b57..1fcfd4d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_operation.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_operation.htm
@@ -1,9 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
+<HTML lang="en">
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) Oakland Software and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Oakland Software and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps.htm
index 550b6a2..969f087 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps.htm
@@ -1,9 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
+<HTML  lang="en">
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) Oakland Software and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Oakland Software and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -20,13 +20,13 @@
 in various scenarios. Some of the sets of below have a plugin in the UI examples
 that shows the end result.
 </p>
-<p>
+
 <ul>
 <li><a href="cnf_steps_general.htm">Creation of a Common Navigator View</a></li>
 <li><a href="cnf_steps_content.htm">Content and Action Binding</a></li>
 <li><a href="cnf_steps_rn_migration.htm">Migrating from the ResourceNavigator</a></li>
 </ul>
-</p>
+
 
 
 </BODY>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_content.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_content.htm
index cab7c10..3accd34 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_content.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_content.htm
@@ -1,9 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
+<HTML lang="en">
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) Simon Zambrovski and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Simon Zambrovski and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -168,7 +168,7 @@ actions on resources defined in the <code>org.eclipse.ui.navigator.resources</co
           <includes>
        	     <actionExtension pattern="org.eclipse.ui.navigator.resources.*" />		       	      
           </includes>
-       </viewerContentBinding>
+       </viewerActionBinding>
    </extension>
    </pre></li>
 </ol>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_general.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_general.htm
index 37e7301..842b2c9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_general.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_general.htm
@@ -1,8 +1,8 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
+<HTML lang="en">
 <HEAD>
 <meta name="copyright"
-	content="Copyright (c) Simon Zambrovski and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Simon Zambrovski and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_rn_migration.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_rn_migration.htm
index 95d6d6c..7b5ad9f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_rn_migration.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_steps_rn_migration.htm
@@ -1,9 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
+<HTML lang="en">
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) Oakland Software and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Oakland Software and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -51,7 +51,7 @@ instead of CommonNavigator.
 Configure the ResourcePatternFilter using the 
 <b><a href="../reference/extension-points/org_eclipse_ui_navigator_navigatorContent.html">org.eclipse.ui.navigator.navigatorContent/commonFilter</a></b>
 extension.  Then you can access the instance of the filter using the following code (where <code>yourViewer</code> is the instance
-of the CommonViewer and <code>yourFilterId</code> is the string of the Id of your common filter configured above):
+of the CommonViewer and <code>yourFilterId</code> is the string of the Id of your common filter configured above):</p>
 <pre>
 INavigatorContentService contentService = yourViewer.getNavigatorContentService();
 INavigatorFilterService filterService = contentService.getFilterService();
@@ -61,7 +61,7 @@ for (int i = i; i < fds.length; i++) {
 		return filterService.getViewerFilter(filterDescriptor);
 }
 </pre>
-</p>
+
 </li>
 
 <li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_troubleshooting.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_troubleshooting.htm
index 7fca77e..c81d486 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_troubleshooting.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/cnf_troubleshooting.htm
@@ -1,9 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
+<HTML lang="en">
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) Oakland Software and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) Oakland Software and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example.htm
index 52d6d0b..8e1d038 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example.htm
@@ -2,13 +2,12 @@
 <html lang="en">
 <head>
 <meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1"
 	type="text/css">
-<script language="JavaScript"
-	src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Creating a custom filtered item selection dialog</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example_advanced.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example_advanced.htm
index 54e1d69..923bcfc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example_advanced.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_FilteredItemsSelectionDialog_example_advanced.htm
@@ -2,13 +2,12 @@
 <html lang="en">
 <head>
 <meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1"
 	type="text/css">
-<script language="JavaScript"
-	src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Advanced use of the filtered item selection dialog</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_exportWizards.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_exportWizards.htm
index 6b90def..7cb5648 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_exportWizards.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_exportWizards.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 org.eclipse.ui.exportWizards
 </TITLE>
@@ -23,7 +23,7 @@ org.eclipse.ui.exportWizards</H3>
 You can add a wizard to the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>File > Export</b></a>
   
 menu option in the workbench using the
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_extensions.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_extensions.htm
index 0259712..9cd9c78 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_extensions.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_extensions.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Workbench wizard extension points</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -27,7 +27,7 @@ selection dialogs to display all the wizards that have been contributed for that
 The
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>import wizard</b></a>
 
 dialog is shown below.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_importWizards.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_importWizards.htm
index 20af9cc..a746213 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_importWizards.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_importWizards.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>org.eclipse.ui.importWizards</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -22,7 +22,7 @@ org.eclipse.ui.importWizards</H3>
 You can add a wizard to the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>File > Import</b></a>
 
 menu option in the workbench using the
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_newWizards.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_newWizards.htm
index 4469d3e..2bbf89f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_newWizards.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/dialogs_wizards_newWizards.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 org.eclipse.ui.newWizards
 </TITLE>
@@ -23,7 +23,7 @@ org.eclipse.ui.newWizards</H3>
 You can add a wizard to the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>File > New</b></a>
 
 menu options in the workbench using the
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_actions.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_actions.htm
index 4825ae5..2aadab1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_actions.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_actions.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -85,8 +85,7 @@ public void setActiveEditor(IEditorPart part) {<br>	super.setActiveEditor(part);
 <h3>Editor context menus</h3>
 
 The editor context menus are created and managed in the <a href="../reference/api/org/eclipse/ui/texteditor/AbstractTextEditor.html"><b>AbstractTextEditor</b></a>
- and <a href="../reference/api/org/eclipse/ui/editors/text/TextEditor.html"><b>TextEditor</b></a><b>
- </b>framework.
+ and <a href="../reference/api/org/eclipse/ui/editors/text/TextEditor.html"><b>TextEditor</b></a> framework.
 <p>The method <b>createActions</b> is used to register actions with the editor.  
   This includes actions appropriate for the editor context menus or any actions 
   contributed in extension definitions.  In the Java example editor, only 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_annotations.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_annotations.htm
index 991c307..1e86f2e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_annotations.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_annotations.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Source viewers and annotations
 </TITLE>
@@ -61,7 +61,7 @@ specifics of how different annotations are shown in the rulers and text can be
 controlled by the user in the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Annotations)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Editors > Text Editors > Annotations</b></a>
 
 preferences.</p>
@@ -75,7 +75,7 @@ editors to show text ranges and line-based annotations adjacent to their text li
   This model is set into the <b><a href="../reference/api/org/eclipse/jface/text/source/SourceViewer.html">SourceViewer</a></b> 
   when the source viewer is initialized by the editor.  The following snippet 
   from <a href="../reference/api/org/eclipse/ui/texteditor/AbstractTextEditor.html"><b>AbstractTextEditor</b></a> 
-  <b> </b>shows how the document and the annotation model are associated with 
+  shows how the document and the annotation model are associated with 
   the viewer.</p>
 
 <pre>private void initializeSourceViewer(IEditorInput input) {
@@ -169,7 +169,7 @@ for more detail about presenting markers in the overview ruler. </p>
 <p>In addition to showing annotations in the rulers, a source viewer can show
 annotations as colored squiggly marks in the text.  </p>
 <p><img src="images/javaeditorsquiggly.png" alt="Squiggly mark in Java Editor" border="0"></p>
-<p>We'll look again at the creation of the source viewer in <a href="../reference/api/org/eclipse/ui/editors/text/TextEditor.html"><b>TextEditor</b></a>.</p>
+<p>We'll look again at the creation of the source viewer in <a href="../reference/api/org/eclipse/ui/texteditor/AbstractDecoratedTextEditor.html"><b>AbstractDecoratedTextEditor</b></a>.</p>
 
 <pre>protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
 		
@@ -192,7 +192,7 @@ available so that the <b><a href="../reference/api/org/eclipse/jface/text/source
 and its supporting <a href="../reference/api/org/eclipse/ui/texteditor/SourceViewerDecorationSupport.html"><b>SourceViewerDecorationSupport</b></a>
 are configured correctly.</p>
 <h4>Configuring a SourceViewerDecorationSupport</h4>
-<p>Let's look at the configuration used by <a href="../reference/api/org/eclipse/ui/editors/text/TextEditor.html"><b>TextEditor</b></a>
+<p>Let's look at the configuration used by <a href="../reference/api/org/eclipse/ui/texteditor/AbstractDecoratedTextEditor.html"><b>AbstractDecoratedTextEditor</b></a>
 for the decoration support.</p>
 
 <pre>protected void configureSourceViewerDecorationSupport() {
@@ -210,8 +210,7 @@ for the decoration support.</p>
   all of the annotations shown in the user preferences.  This includes annotations 
   contributed by any plug-in and is not limited to the workbench-supplied annotations.  
   If you do not wish to show all available annotations in your editor, you should 
-  override this method and set up the <a href="../reference/api/org/eclipse/ui/texteditor/SourceViewerDecorationSupport.html"><b>SourceViewerDecorationSupport</b></a><b> 
-  </b>with only those types you want to show.</p>
+  override this method and set up the <a href="../reference/api/org/eclipse/ui/texteditor/SourceViewerDecorationSupport.html"><b>SourceViewerDecorationSupport</b></a> with only those types you want to show.</p>
 
 
 </BODY>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_utilities.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_utilities.htm
index ce55822..578b735 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_utilities.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/editors_utilities.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Other text editor responsibilities
 </TITLE>
@@ -42,13 +42,13 @@ plug-in.  </p>
 The editors plug-in preferences can be manipulated in the 
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Editors</b></a>
 
 and
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.GeneralTextEditor)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Editors > Text Editors</b></a>
 
 preference pages.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_create.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_create.htm
index f39100a..4ae4020 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_create.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_create.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Creating the plug-in project
 </TITLE>
@@ -34,7 +34,7 @@ manifest files (explained in a moment) and a class to hold our view.
 <ol>
   <li>Open the <b>New Project...</b> wizard
   
-  (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>File > New > Project...</b></a>)
   
     and choose <b>Plug-in Project </b>from the <b>Plug-in Development</b> category
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_run.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_run.htm
index 1e36ffe..b4df647 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_run.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/firstplugin_run.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Running the plug-in
 </TITLE>
@@ -23,7 +23,7 @@ Running the plug-in</H2>
   If not, then select your new project and choose 
   
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.ui.project.buildProject)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Project > Build Project</b></a>.
   
   The class should compile without error.</p>
@@ -41,7 +41,7 @@ For simplicity, we'll run the new plug-in from within the Eclipse workbench. </p
 <p>To launch a runtime workbench, choose
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.debug.ui.commands.OpenRunConfigurations")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Run > Run...</b></a>.
 
   This dialog will show you all the different kinds of ways you can launch a program. 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/prbfil.png b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/prbfil.png
new file mode 100644
index 0000000..1ec881c
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/prbfil.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/prob.png b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/prob.png
new file mode 100644
index 0000000..aceb3e1
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/prob.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/problemsview_groups.png b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/problemsview_groups.png
index ae03059..cb5f419 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/problemsview_groups.png and b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/problemsview_groups.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/quickfix.png b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/quickfix.png
index c6563ca..805b444 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/quickfix.png and b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/quickfix.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/readmeviewcommand.png b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/images/readmeviewcommand.png
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/java_web_start.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/java_web_start.htm
index b0979d7..df4f108 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/java_web_start.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/java_web_start.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Deploying eclipse based application with Java Web Start
 </TITLE>
@@ -47,7 +47,7 @@ with is running on a Java SDK instead of a JRE. If this constraint is not satisf
 <li> Select the wrapper feature and do
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export(exportWizardId=org.eclipse.pde.ui.featureExportWizard)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>File > Export > Plug-in Development > Deployable Features</b></a>.
 
 In the wizard, select the wrapper feature, 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/jface_resources.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/jface_resources.htm
index ffca695..7f6fbdb 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/jface_resources.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/jface_resources.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -137,7 +137,7 @@ can be useful to isolate the decision making regarding image creation in a separ
 <H3> ResourceManager</H3>
 <P > The <a href="../reference/api/org/eclipse/jface/resource/ResourceManager.html"><b> 
   ResourceManager</b></a> class is used to keep a mapping of ImageDescriptors 
-  to Images so that an Image can be reused be referring to it via it's descriptor.When 
+  to Images so that an Image can be reused by referring to it via its descriptor.When 
   an image is requested by descriptor from the registry, the registry will return 
   the image if it has been created, or create one from the descriptor. This allows 
   clients of the registry to share images. </P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_actions_touchpoints.html b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_actions_touchpoints.html
index 8395e44..81a0e4b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_actions_touchpoints.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_actions_touchpoints.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 <meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1"
@@ -68,8 +68,7 @@ A valid call of this action using FQN might be something like:
 <p><b>Action Fully Qualified Name:</b></p>
 <pre>org.eclipse.equinox.p2.touchpoint.natives.<i>action_name</i> 
 </pre>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>action</b></td>
@@ -97,10 +96,9 @@ A valid call of this action using FQN might be something like:
 		<td style="font-weight: bold;">unzip</td>
 		<td>source, target</td>
 		<td>unzips the <i>source</i> into the <i>target</i> directory.
-		The <i>source</i> can be the special <code>@artifact</code> source
-		path, which denotes the download cache location for the first artifact
-		key in the IU. <i>Comments in code indicates that the use of <code>@artifact</code>
-		may be deprecated.</i></td>
+		The <i>source</i> can be the special value <code>@artifact</code>,
+		which denotes the download cache location for the first artifact
+		key in the installable unit.</td>
 	</tr>
 	<tr valign="top">
 		<td style="font-weight: bold;">mkdir</td>
@@ -126,16 +124,14 @@ A valid call of this action using FQN might be something like:
 		parameter is a boolean in string form (i.e. "true"/"false") and
 		indicates if an existing link with the same name should be removed
 		before the new link is created.
-		<div style="border: 2px solid #8E87EB; padding: 6px;">This
-		action executes the system command <i>ln -s</i>, and is not available
-		on platforms that do not have this (i.e. Windows)</div>
+		<p><em>This action is not available on platforms that do not have this command(i.e. Windows)</em></p>
 		</td>
 	</tr>
 	<tr valign="top">
 		<td style="font-weight: bold;">chmod</td>
 		<td>targetDir, targetFile,
 		permissions, options</td>
-		<td>Changes permission on a file using the system chmod command.
+		<td>Changes permission on a file using the system <code>chmod</code> command.
 		The <i>targetDir</i> parameter is either a path, or the special <code>@artifact</code>
 		which is a reference to the directory where the first artifact
 		included in the installable unit is located. The parameter <i>targetFile</i>
@@ -144,9 +140,7 @@ A valid call of this action using FQN might be something like:
 		additional options like "-R" for recursive operation. If multiple
 		parameters are needed separate them with a space (like on the command
 		line).
-		<div style="border: 2px solid #8E87EB; padding: 6px;">This
-		action executes the system command <i>chmod</i>, and is not available
-		on platforms that do not have this (i.e. Windows)</div>
+		<p><em>This is not available on platforms that do not have this command (i.e. Windows)</em></p>
 		</td>
 	</tr>
 	<tr valign="top">
@@ -186,8 +180,7 @@ A valid call of this action using FQN might be something like:
 <p><b>Action Fully Qualified Name:</b></p>
 <pre>org.eclipse.equinox.p2.touchpoint.eclipse.<i>action_name</i> 
 </pre>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>instruction</b></td>
@@ -263,7 +256,7 @@ A valid call of this action using FQN might be something like:
 		</td>
 		<td>programArg</td>
 		<td>Adds the string specified in the parameter <i>programArg</i>
-		as an argument to the program. If the parameters is the special value
+		as an argument to the program. If the parameter is the special value
 		<code>@artifact</code>, the location of the artifact referenced by the
 		first artifact key in the IU is used as the parameter value.</td>
 	</tr>
@@ -272,7 +265,7 @@ A valid call of this action using FQN might be something like:
 		</td>
 		<td>programArg</td>
 		<td>Removes the program argument specified in the string <i>programArg</i>
-		- if the parameters is the special value <code>@artifact</code>, the
+		- if the parameter is the special value <code>@artifact</code>, the
 		location of the artifact referenced by the first artifact key in the
 		IU is used as the parameter value.</td>
 	</tr>
@@ -288,14 +281,14 @@ A valid call of this action using FQN might be something like:
 		</td>
 		<td>started</td>
 		<td>Marks the bundle referenced by the first artifact key in the
-		IU as started / not started, as controlled by the boolean parameter <i>started</i>
-		(in string form i.e. "true"/"false").</td>
+		installable unit as started or not started, as controlled by the boolean parameter <i>started</i>.
+		A parameter value of "true" will mark the bundle as started and "false" will mark the bundle as not started).</td>
 	</tr>
 	<tr valign="top">
 		<td style="font-weight: bold;">setFrameworkDependentProperty
 		</td>
 		<td>propName, propValue</td>
-		<td>Sets the framework dependant property named <i>propName</i>
+		<td>Sets the framework dependent property named <i>propName</i>
 		to the value specified in <i>propValue</i>. Framework dependent
 		properties are properties specific to the Equinox implementation of
 		the OSGi framework.</td>
@@ -304,12 +297,33 @@ A valid call of this action using FQN might be something like:
 		<td style="font-weight: bold;">setFrameworkIndependentProperty
 		</td>
 		<td>propName, propValue</td>
-		<td>Sets the framework independant property named <i>propName</i>
+		<td>Sets the framework independent property named <i>propName</i>
 		to the value specified in <i>propValue</i>. Framework independent
 		properties do not specifically target Eclipse and are generally
 		applicable to other OSGi frameworks.</td>
 	</tr>
 	<tr valign="top">
+		<td style="font-weight: bold;">addProgramProperty
+		</td>
+		<td>propName, propValue</td>
+		<td>Adds the given value specified in <i>propValue</i> to the program
+		property named <i>propName</i>. The program property value is treated
+		as a comma-separated list and the given value is added to that list. Program
+		properties are used by the executable program to among other things locate
+		the jars needed to start Eclipse.</td>
+	</tr>
+	<tr valign="top">
+		<td style="font-weight: bold;">removeProgramProperty
+		</td>
+		<td>propName, propValue</td>
+		<td>Remove the given value specified in <i>propValue</i> from the program
+		property named <i>propName</i>. The program property value is treated as 
+		a comma-separated list and the given value is removed from that list. If there
+		are no more elements in the list, then the property itself is removed. Program
+		properties are used by the executable program to among other things locate 
+		the jars needed to start Eclipse.</td>
+	</tr>
+	<tr valign="top">
 		<td style="font-weight: bold;">setProgramProperty
 		</td>
 		<td>propName, propValue</td>
@@ -319,20 +333,27 @@ A valid call of this action using FQN might be something like:
 		start Eclipse.</td>
 	</tr>
 	<tr valign="top">
-		<td style="font-weight: bold;">addJVMArg
+		<td style="font-weight: bold;">addJvmArg
 		</td>
 		<td>jvmArg</td>
 		<td>Adds the string specified in the parameter <i>jvmArg</i> to
 		the arguments passed to the JVM.</td>
 	</tr>
 	<tr valign="top">
-		<td style="font-weight: bold;">removeJVMArg
+		<td style="font-weight: bold;">removeJvmArg
 		</td>
 		<td>jvmArg</td>
 		<td>Removes the string specified in the parameter <i>jvmArg</i>
 		from the arguments passed to the JVM.</td>
 	</tr>
 	<tr valign="top">
+		<td style="font-weight: bold;">setJvm</td>
+		<td>jvm</td>
+		<td>Sets the JVM to be the path specified in the parameter <i>jvm</i>.
+		If a value of <i>null</i> is specified then the current JVM path value
+		is removed.</td>
+	</tr>
+	<tr valign="top">
 		<td style="font-weight: bold;">checkTrust
 		</td>
 		<td>-</td>
@@ -422,8 +443,7 @@ consist of the following statement:</p>
 phases and touchpoints. Many of these are mostly useful to the
 implementor of new actions and touchpoint types.</p>
 <h3>Variables Available in all phases</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -460,8 +480,7 @@ implementor of new actions and touchpoint types.</p>
 <h3>Variables Available in all installable unit phases</h3>
 <p><i>e.g. collect, unconfigure, uninstall, install, configure,
 ...</i></p>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -480,8 +499,7 @@ implementor of new actions and touchpoint types.</p>
 	</tr>
 </table>
 <h3>Collect Phase Variables</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -495,8 +513,7 @@ implementor of new actions and touchpoint types.</p>
 	</tr>
 </table>
 <h3>Unconfigure Phase Variables</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -513,8 +530,7 @@ implementor of new actions and touchpoint types.</p>
 	</tr>
 </table>
 <h3>Uninstall Phase Variables</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -531,8 +547,7 @@ implementor of new actions and touchpoint types.</p>
 	</tr>
 </table>
 <h3>Install Phase Variables</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -549,8 +564,7 @@ implementor of new actions and touchpoint types.</p>
 	</tr>
 </table>
 <h3>Configure Phase Variables</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -567,8 +581,7 @@ implementor of new actions and touchpoint types.</p>
 	</tr>
 </table>
 <h3>Eclipse Touchpoint Variables</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
@@ -582,8 +595,7 @@ implementor of new actions and touchpoint types.</p>
 	</tr>
 </table>
 <h3>Native Touchpoint Variables</h3>
-<table border="1px solid #CCC" cellpadding="5px"
-	style="border: 1px solid #CCC; border-collapse: collapse;">
+<table border="1" cellpadding="5" style="border: 1px solid #CCC; border-collapse: collapse;">
 
 	<tr valign="top" style="background-color: #eeeeee; color: #444444;">
 		<td><b>variable</b></td>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_category_generation.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_category_generation.htm
index aebe4d0..d1b9601 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_category_generation.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_category_generation.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -16,7 +16,7 @@ By default, the p2 Install Software Dialog groups all the installable units by c
 categorized, it will not be displayed in the user interface. 
 </p>
 
-<img src="images/no_category.png">
+<img src="images/no_category.png" alt="Picture showing the 'Install Software' dialog without categorized items">
 
 <p>
 There are currently two supported methods for categorizing content.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_director.html b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_director.html
index cd68bb8..c86c731 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_director.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_director.html
@@ -3,7 +3,7 @@
 <head>
 
 <meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2008, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
@@ -32,7 +32,7 @@ outside of the target product being provisioned.
 	<li><b>Target product:</b> the installation targeted by the
 	provisioning operation.</li>
 	<li><b>Builder:</b> an eclipse based application containing the
-	director application bundle and its depents.</li>
+	director application bundle and its dependents.</li>
 </ul>
 <br>
 
@@ -82,6 +82,7 @@ the builder, you want to install CDT into an existing SDK located into
    -application org.eclipse.equinox.p2.director
    -repository http://download.eclipse.org/releases/helios/
    -installIU org.eclipse.cdt.feature.group
+   -tag AddCDT
    -destination d:/eclipse/
    -profile SDKProfile</code>
 </pre>
@@ -106,6 +107,7 @@ a director application located in "d:\builder".</p>
    -application org.eclipse.equinox.p2.director
    -repository http://download.eclipse.org/eclipse/updates/3.6
    -installIU org.eclipse.sdk.ide
+   -tag InitialState
    -destination d:/eclipse/
    -profile SDKProfile
    -profileProperties org.eclipse.update.install.features=true
@@ -134,11 +136,13 @@ artifact repository URLs where the software artifacts can be found.</li>
 If you are looking to install a feature, the identifier of
 the feature has to be suffixed with ".feature.group".</li>
 <li><b>-uninstallIU</b>: a comma separated list of IUs to uninstall. Each entry in the list is in the form <id> [ '/' <version> ].</li>
-<li><b>-revert</b>: Revert the installation to a previous state [ the number representing the previous state of the profile  as found in p2/org.eclipse.equinox.p2.engine/<profileId>/ ].</li>
+<li><b>-revert</b>: Revert the installation to a previous state. The previous state can either be a tag (see -tag / -listtags) or a previous profile state [ the number representing the previous state of the profile  as found in p2/org.eclipse.equinox.p2.engine/<profileId>/ ].</li>
 <li><b>-purgeHistory</b>: Remove the history of the profile registry.</li>
 <li><b>-destination</b>: the path of a folder in which the targeted
 product is located.</li>
-<li><b>-list</b>: lists all IU's found in the given repositories in a property like format. IUs can optionally be listed. Each entry in the list is in the form <id> [ '/' <version> ].</li>
+<li><b>-list</b>: lists all IU's found in the given repositories in a property like format. The optional arguments can be an comma separated list of entries where each entry is in the form <id> [ '/' <version> ], or a p2 QL query prefixed with Q:, or Q:group as shortcut for groups.</li>
+<li><b>-listTags</b>: list all the tags found for the given profile.</li>
+<li><b>-listInstalledRoots</b>: list all the roots IUs found in the given profile. Each entry is the list in the form id / version</li>
 <li><b>-profile</b>: the profile id containing the
 description of the targeted product. This ID is is defined by the 
 <tt>eclipse.p2.profile</tt> property contained in the config.ini of the targeted
@@ -164,6 +168,7 @@ from the installation can be moved. This property only makes sense when
 the destination and bundle pool are in the same location. This value is only taken
 into account when the profile is created.</li>
 <li><b>-shared</b>: use a shared location for the install. The path defaults to ${user.home}/.p2.</li>
+<li><b>-tag</b>: a label. This allows to tag the profile state resulting from the operation being executed. </li>
 <li><b>-verifyOnly</b>: only verify that the actions can be performed. Don't actually install or remove anything.</li>
 </ul>
 While doing these operations, you can disable the automatic mirror selection mechanism by setting the VM argument eclipse.p2.mirrors to false.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_metadata.html b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_metadata.html
index 469ab68..641d50a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_metadata.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_metadata.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -22,13 +22,13 @@ and feature manifests, and an extra step is simply required to <em>publish</em>
 data into a format suitable for consumption by p2. In other cases, a plug-in or
 application developer may need to author or customize the p2 metadata for their
 software. The following sections describe in more detail how to author and publish
-p2 metadata for your application or plug-in.
+p2 metadata for your application or plug-in.</p>
 <ul>
 <li><a href="p2_publisher.html">Publishing metadata</a></li>
 <li><a href="p2_customizing_metadata.html">Customizing metadata</a></li>
 <li><a href="p2_publishingtasks.htm">Ant Tasks for publishing metadata</a></li>
 </ul>
-</p>
+
 
 
 </body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_metadata_generator.html b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_metadata_generator.html
deleted file mode 100644
index cdfad80..0000000
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_metadata_generator.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-  <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-  <meta http-equiv="Content-Type"
- content="text/html; charset=ISO-8859-1">
-  <meta http-equiv="Content-Style-Type" content="text/css">
-  <link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-  <title>Generating p2 metadata</title>
-</head>
-<body>
-<h1>Generating p2 metadata</h1>
-<p>
-<b>As of Eclipse 3.5 the metadata generator is deprecated.  The <a href="p2_publisher.html">publisher</a> should be used instead.</b>
-</p>
-
-<p>
-With the "classic" Update Manager, all metadata for features and bundles is self-contained in the features and 
-bundles themselves. In p2 the metadata contains more information and is stored 
-separately in what are called Installable Units (IUs) and Configuration Units (CUs).
-</p>
-
-<p>
-In order to be backwards-compatible, p2 is able to install things from old-style update sites and extension locations
-by generating metadata for these things on-the-fly, but this of course is not the optimal situation. Ideally plug-in
-developers should create p2 metadata when they produce their bundles, features, and products. 
-</p>
-
-<p>
-This document describes how to generate p2 metadata for your software.
-</p>
-
-<h2>The Metadata Generator Application</h2>
-<p>
-Since Eclipse 3.4, p2 ships with a metadata generator application that plug-in developers can run. The generator application is contained in the
-bundle <code>org.eclipse.equinox.p2.metadata.generator</code>. This bundle is part of the Eclipse SDK, 
-and is also available in the p2 Admin UI. The generator can be invoked using the generic Eclipse launcher format as follows:
-</p>
-
-<p>
-<code>eclipse -application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator <generatorArgs></code>
-</p>
-
-<p>
-The generator application has three primary modes of operation:
-</p>
-<ol>
-	<li>Generating metadata for a folder containing bundles and features (<code>-source</code> argument)</li>
-	<li>Generating metadata for a traditional Eclipse update site (<code>-updateSite</code> argument)</li>
-	<li>Generating metadata for an existing Eclipse application that does not contain p2 metadata (<code>-config</code> argument)</li>
-</ol>
-
-<p>
-Note that you can also generate metadata for your features, bundles, and products through the PDE
-UI and in headless PDE builds. See the <a href="../../org.eclipse.pde.doc.user/guide/tools/export_wizards/export_wizards.htm">Export Wizards</a> section in the Plug-in Development Environment Guide as well as <a href="../../org.eclipse.pde.doc.user/tasks/pde_p2_integration.htm">PDE Build integration with p2</a> for details.
-</p>
-
-<p>
-Once you run the generator, you will see the generated artifact repository index file in <code>artifacts.xml</code> and 
-the generated metadata repository index file in the <code>content.xml</code> (or <code>artifacts.jar</code> and
-<code>content.jar</code> if you used the -compress option). There is nothing forcing you to have the metadata and
-artifact repositories co-located, but you can do this if you wish to.
-</p>
-
-<h3>1. Bundles and Features</h3>
-<p>
-If you have a directory with bundles and features and you want to create p2 metadata for them, you can use the p2
-metadata generator. Here is an example of using the generator in this scenerio. In this case the features and bundles
-are located under the <code>D:/myData/</code> directory and the artifact and metadata repositories are co-located
-and produced to <code>D:/repository/</code>. In this case the bundles and features are copied (published) to the
-artifact repository folder (<code>D:/repository/</code>). This repository folder can be published to a server without
-any further modification.
-</p>
-
-<pre>
-eclipse
-   -application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator
-   -source D:/myData/
-   -metadataRepository file:D:/repository/
-   -metadataRepositoryName "My Update Site"
-   -artifactRepository file:D:/repository/
-   -artifactRepositoryName "My Artifacts"
-   -publishArtifacts
-   -publishArtifactRepository
-   -compress
-   -noDefaultIUs
-   -vmargs -Xmx256m
-</pre>
-
-<h3>2. Update Manager Site</h3>
-<p>
-If you have an update manager site (site index file along with features and plug-ins) and you would like to generate
-p2 metadata, you can use the metadata generator application. The following example shows how to generate metadata 
-from an pre-existing update site located in <code>D:\ganymedeM5</code>. The output files from the operation will
-also be placed in the <code>D:\ganymedeM5</code> folder so clients will be able to point to the same location,
-regardless of which UI they are using.
-</p>
-<pre>
-eclipse
-   -application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator
-   -updateSite D:/ganymedeM5/
-   -site file:D:/ganymedeM5/site.xml
-   -metadataRepository file:D:/ganymedeM5/
-   -metadataRepositoryName "Ganymede Update Site"
-   -artifactRepository file:D:/ganymedeM5/
-   -artifactRepositoryName "Ganymede Artifacts"
-   -compress
-   -reusePack200Files
-   -noDefaultIUs
-   -vmargs -Xmx256m
-</pre>
-
-<h3>3. Existing Non-p2 Eclipse Application</h3>
-<p>
-If you have an existing Eclipse application with plug-ins, features, root files and a configuration, then you can 
-use the <code>-config</code> mode to run the generator.
-</p>
-<pre>
-eclipse
-   -application org.eclipse.equinox.p2.metadata.generator.EclipseGenerator
-   -config D:/application/
-   -metadataRepository file:D:/repository/
-   -metadataRepositoryName "My Update Site"
-   -artifactRepository file:D:/repository/
-   -artifactRepositoryName "My Artifacts"
-   -publishArtifacts
-   -publishArtifactRepository
-   -root my.application
-   -rootVersion 1.0.0
-   -compress
-   -noDefaultIUs
-   -vmargs -Xmx256m
-</pre>
-
-<h2>Input Arguments</h2>
-
-<p>You can invoke the p2 metadata generator in one of these modes:</p>
-<dl>
-<dt><code>-source <path></code></dt>
-	<dd>the path to a folder containing <code>plugins</code> and <code>features</code> folders</dd>
-<dt><code>-updateSite <path></code></dt>
-	<dd>the path to a traditional update site</dd>
-<dt><code>-config <path></code></dt>
-	<dd>the path of an Eclipse application that is not p2-enabled</dd>
-</dl>
-<p>Here are other command-line options:</p>	 
-<dl>
-<dt><code>-exe <path></code></dt>
-	<dd>the location of the application launcher executable</dd>
-<dt><code>-launcherConfig <path></code></dt>
-	<dd>the path of the launcher configuration file (e.g. <code>eclipse.ini</code>)</dd>
-<dt><code>-features <path></code></dt>
-	<dd>the location of the features folder</dd>
-<dt><code>-bundles <path></code></dt>
-	<dd>the location of bundles folder</dd> 
-<dt><code>-base <path></code></dt>
-	<dd>a base location containing a <code>plugins</code> and <code>features</code> directory</dd> 
-<dt><code>-p2.os <os></code></dt>
-	<dd>the target operating system for the application</dd> 
-<dt><code>-site <path></code></dt>
-	<dd>the URL of a <code>site.xml</code> file used to generate categories</dd> 
-</dl>    
-<h2>Output Arguments</h2>
-<p>And some more command-line arguments related to the output:</p>
-<dl>
-<dt><code>-metadataRepository <url></code></dt>
-	<dd>the URL to a writable metadata repository that will contain the produced metadata</dd> 
-<dt><code>-metadataRepositoryName <name></code></dt>
-	<dd>a user-friendly name for the metadata repository</dd> 
-<dt><code>-artifactRepository <url></code></dt>
-	<dd>the URL to a writable artifact repository that will contain the produced artifacts</dd>
-<dt><code>-artifactRepositoryName <name></code></dt>
-	<dd>a user-friendly name for the artifact repository</dd> 
-<dt><code>-publishArtifacts</code></dt>
-	<dd>flag indicating that the artifacts should be published (copied) to the repository. When this flag is not set, the actual bytes 
-	underlying the artifact will not be copied, but the repository index will be created. When this option is not 
-	specified, it is recommended to set the artifactRepository to be in the same location as the source (<code>-source</code>).</dd>
-<dt><code>-publishArtifactRepository</code></dt>
-	<dd>flag indicating to write out the artifact repository index file</dd> 
-<dt><code>-append</code></dt>
-	<dd>flag indicating that repositories will be appended to as opposed to over-written</dd> 
-<dt><code>-root <name></code></dt>
-	<dd>When you run the generator application, it will create a <b>root IU</b> which will contain everything that has
-	been generated during this run. This argument is used for setting the name of the root IU.</dd> 
-<dt><code>-rootVersion <version></code></dt>
-	<dd>The version of the root installable unit</dd> 
-<dt><code>-inplace</code></dt>
-	<dd>causes the metadata and artifact repositories to be written into the source location</dd> 
-<dt><code>-noDefaultIUs</code></dt>
-	<dd>flag to indicate the default configuration units should not be created</dd> 
-<dt><code>-compress</code></dt>
-	<dd>cause the repositories to store their index files in compressed form</dd> 
-<dt><code>-reusePack200Files</code></dt>
-	<dd>Specifying -reusePack200 does not require you to have pack200 files on the server, nor does it cause pack200 
-	files to be created. When this option is specified, the generator looks for pack.gz files and if available it creates an 
-	entry for them in the artifact repository index.</dd>
-</dl>	 
-
-<h2>Generator Ant Task</h2>
-<p>
-The metadata generator is also available as an Ant task. It is called <code>p2.generator</code> and it is available in the 
-<code>org.eclipse.equinox.p2.metadata.generator</code> bundle. The arguments passed to the task are the same as
-listed above.
-</p>
-
-<h2>Updated Documentation</h2>
-<p>
-Up-to-date information on the p2 metadata generator application can be found on the 
-<a href="http://wiki.eclipse.org/Equinox_p2_Metadata_Generator">Eclipse p2 wiki</a>.
-</p>   
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm
index 7da94a1..d6b06c3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_overview.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -22,7 +22,7 @@ or manage any aspect of your application, from the physical plug-ins and native
 code, to the configuration of the installed software - file permissions, command line arguments, etc. 
 Installation with p2 does not consist simply in adding or removing files in the 
 file system, but more generally the sequence of events that must occur to lay
-down and configure a system that is ready to run. Core aspects of p2 include:
+down and configure a system that is ready to run. Core aspects of p2 include:</p>
 <ul>
 <li>Automatic resolution of dependencies between software components. With p2,
 you state the root set of items you want installed or uninstalled, and p2 computes
@@ -40,15 +40,15 @@ end users to examine and manage the application.</li>
 <li>A suite of command line tools and Ant tasks, to allow developers and release
 engineers to build and configure p2-enabled applications.</li>
 </ul>
-</p>
+
 <p>
 The following documentation sections describe how to use p2 to build and deliver
-your own Eclipse-based applications and extensions.
+your own Eclipse-based applications and extensions.</p>
 <ul>
 <li><a href="p2_metadata.html">Metadata management</a></li>
 <li><a href="p2_director.html">Installation management</a></li>
 <li><a href="p2_repositorytasks.htm">Repository management</a></li>
 </ul>
-</p>
+
 </BODY>
 </HTML>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_publisher.html b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_publisher.html
index 53b1dc1..a44275b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_publisher.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_publisher.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
   <meta name="copyright"
- content="Copyright (c) EclipseSource and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+ content="Copyright (c) EclipseSource and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
@@ -30,8 +30,7 @@ can be used to generate metadata.  The remainder of this document explains how t
 The <em>publisher</em> is the means by which deployable entities get added to repositories. For example, 
 the publisher can be used to create an IU from an OSGi Bundle or Eclipse Feature.  The publisher consists
 of an extensible set of publishing actions, applications and Ant tasks that allow users to generate 
-p2 repositories from a number of different sources.  The publisher replaces the 
-<a href="p2_metadata_generator.html">Metadata Generator</a>.
+p2 repositories from a number of different sources.
 </p>
 
 <p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm
index 82de8e2..5e05d27 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_repositorytasks.htm
@@ -1,281 +1,1015 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
-<head>
-  <meta name="copyright"
- content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-  <meta http-equiv="Content-Style-Type" content="text/css">
-  <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-  <title>Ant tasks for managing repositories</title>
-</head>
-<body>
-<h1>Ant tasks for managing repositories</h1>
-<table cellspacing="1" cellpadding="2" width="95%" align="center">
-	<tr><td><a name="source_repositories"><b>Specifying source repositories</b></a></td></tr>
-	<tr><td><p>Several p2 tasks accept "source" repositories.  Source repositories can be specified in several different ways:</p>
-	<ul>
-	<li>A <b><tt>source</tt></b> attribute directly on the ant task.  The value is a URL to a location that contains both a metadata and artifact repository.  For example:
-	<div align="center"><tt><p2.mirror source="http://download.eclipse.org/releases/helios" .... /></tt></div>
-	</li>
-	<li>A <b><tt><source></tt></b> element nested in the ant task.  This element is an ant fileset, with additional <i>location</i> and <i>kind</i> attributes.
-	<ul>
-		<li><i>location</i> : A URL specifying the location of a repository.  If this attribute is set, all fileset based attributes are ignored.</li>
-		<li><i>kind</i>: Either "<tt>metadata</tt>" or "<tt>artifact</tt>".  If not set, the repository is both metadata and artifacts.</li>
-	</ul> 
-	If no <i>location</i> attribute is set, all directories matched by the fileset are added as repositories and all *.zip files are treated as zipped repositories 
-	(accessed using a jar: URL). For example:
-<pre><source kind="metatata" dir="/build/input" includes="*.zip" />
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Ant tasks for managing repositories
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    h3.c2 {font-weight: bold}
+    div.c1 {text-align: center}
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1>
+      Ant tasks for managing repositories
+    </h1>
+    <table cellspacing="1" cellpadding="2" width="95%" align="center">
+      <tr>
+        <td>
+          <a name="source_repositories" id="source_repositories"><b>Specifying
+          source repositories</b></a>
+
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Several p2 tasks accept "source" repositories. Source repositories
+            can be specified in several different ways:
+          </p>
+          <ul>
+            <li>A <b><tt>source</tt></b> attribute directly on the ant task.
+            The value is a URL to a location that contains both a metadata and
+            artifact repository. For example:
+              <div class="c1">
+
+                <tt><p2.mirror
+                source="http://download.eclipse.org/releases/helios" ....
+                /></tt>
+              </div>
+            </li>
+            <li>A <b><tt><source></tt></b> element nested in the ant
+            task. This element is an ant fileset, with additional
+            <i>location</i> and <i>kind</i> attributes.
+              <ul>
+
+                <li>
+                  <i>location</i> : A URL specifying the location of a
+                  repository. If this attribute is set, all fileset based
+                  attributes are ignored.
+                </li>
+                <li>
+                  <i>kind</i>: Either "<tt>metadata</tt>" or
+                  "<tt>artifact</tt>". If not set, the repository is both
+                  metadata and artifacts.
+                </li>
+
+              </ul>If no <i>location</i> attribute is set, all directories
+              matched by the fileset are added as repositories and all *.zip
+              files are treated as zipped repositories (accessed using a jar:
+              URL). For example:
+              <pre>
+<source kind="metatata" dir="/build/input" includes="*.zip" />
 <source location="http://download.eclipse.org/releases/helios" />
 </pre>
-	</li>
-	<li>A <b><tt><source></tt></b> element containing a list of repositories.  Each nested element is again a fileset with an additional <i>kind</i> attribute.  For example:
-<pre><source>
+            </li>
+            <li>A <b><tt><source></tt></b> element containing a list of
+            repositories. Each nested element is again a fileset with an
+            additional <i>kind</i> attribute. For example:
+              <pre>
+
+<source>
    <repository location="http://download.eclipse.org/releases/helios" />
    <repository kind="metadata" file="/build/repos/cdt-master-6.0.0-I200903161435.zip" />
    <repository kind="artifact" dir="/build/repos" includes="*repo" />
 </source>
 </pre>
-	</li>
-	</ul></td></tr>
-	<tr><td><a name="destination_repositories"><b>Specifying destination repositories</b></a></td></tr>
-	<tr><td><p>Several p2 tasks accept "destination" repositories.  Destination repositories can be specified in several different ways:</p>
-	<ul>
-	<li>A <b><tt>destination</tt></b> attribute directly on the ant task.  The value is a URL to a location for both a metadata and artifact repository.</li>
-	<li>A <b><tt><repository></tt></b> element nested in the ant task.  (<b><tt><destination></tt></b> may also be used.) 
-	  This element supports the following attributes:
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt>location</tt></td><td>A URL to the location of the repository</td></tr>
-			<tr><td><tt>kind</tt></td><td>Either "<tt>metadata</tt>" or "<tt>artifact</tt>".  Default is both if not specified.</td></tr>
-			<tr><td><tt>name</tt></td><td>A name to give the repository if the repository does not already exist.</td></tr>
-			<tr><td><tt>append</tt></td><td>Append to a repository that is already there.  (Default is "true")</td></tr>
-			<tr><td><tt>compressed</tt></td><td>Whether to compress the content/artifact xml into a jar (Default is "true")</td></tr>
-			<tr><td><tt>format</tt></td><td>A URL to another repository from which to copy the repository name and other properties.</td></tr>
-		</table>
-	</li>
-	</ul></td></tr>
-	<tr><td><a name="installable_units"><b>Specifying Installable Units</b></a></td></tr>
-	<tr><td>Some p2 tasks allow specifying installable units to work with.  This is done with nested <tt><iu></tt> elements which support the following attributes:
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt>id</tt></td><td>The id of the IU to match.</td></tr>
-			<tr><td><tt>version</tt></td><td>The version of the IU to match.  If not specified, the highest versioned IU is returned.  (requires <i>id</i> to be set)</td></tr>
-			<tr><td><tt>query</tt></td><td>Matches all IUs satisfying the query.  Currently only "property" queries are supported. 
-			  The format of the query attribute is intended to be "xpath-like". Eg:
-			<div align="center"><tt><iu query="property[@name='org.eclipse.equinox.p2.type.category']" /></tt></div>
-			<div align="center"><tt><iu query="property[@name='my.property.name' @value='specialValue']" /></tt></div>			
-			</td></tr>
-		</table>
-	</td></tr>
-</table>
-<h2>Ant Tasks</h2>
-<br>
-<table cellspacing="1" cellpadding="2" width="95%" align="center">
-	<tr><td><b><a name="p2_mirror"><h3>p2.mirror</h3></a></b></td></tr>
-	<tr><td><p>This task mirrors artifacts and metadata from the given source repositories to the destination.  
-	  This task will traverse the source repository and recursively include all IUs that match the requirements of IUs being mirrored (this is called <em>slicing</em> the repository).</p>
-	  </td>
-	</tr>
-	<tr><td><p>This task supports the following attributes and elements:</p>
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt>source</tt></td><td>Source repositories, as outlined <a href="#source_repositories">above</a></td></tr>
-			<tr><td><tt>destination</tt></td><td>Destination repositories, as outlined <a href="#destination_repositories">above</a></td></tr>
-			<tr><td><tt><iu></tt></td><td>Nested IU elements, as outlined <a href="#installable_units">above</a>.  
-			  The installable units to mirror.  If none are specified, all IUs contained in the source repositories are mirrored.</td></tr>
-			<tr><td><tt>log</tt></td><td>A file to use for logging the results.</td></tr>
-			<tr><td><tt>ignoreErrors</tt></td><td>Whether or not to ignore errors. (Default is false)</td></tr>
-			<tr><td><tt>raw</tt></td><td>Copy the exact artifact descriptors from source into the destination instead of 
-			  initializing new artifact descriptors with properties from the source descriptors. (Default is true)</td></tr>
-			<tr><td><tt>verbose</tt></td><td>Turn on verbose logging.</td></tr>
-			<tr><td><tt>validate</tt></td><td>Validate that all all source descriptors are present in the 
-			  destination after mirroring is complete. (Default is false)</td></tr>
-			<tr><td><tt><comparator></tt></td><td>A nested comparator element for comparing against a baseline repository.  
-			  If IUs from the source repository already exist in the baseline, then the artifacts will be mirrored from 
-			  the baseline instead of the source.  This element supports the following attributes:
-			<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-				<tr><td><tt><baseline></tt></td><td>A nested element specifying the baseline repository.  
-				  See <a href="#destination_repositories"><i>destination repositories</i></a> above.</td></tr>
-				<tr><td><tt><exclude></tt></td><td>A nested element specifying artifacts to exclude from the comparison.
-				Contains nested <artifact> elements which support the following attributes:
-				<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-					<tr><td><tt>id</tt></td><td>The artifact id.</td></tr>
-					<tr><td><tt>classifier</tt></td><td>The artifact classifier</td></tr>
-					<tr><td><tt>version</tt></td><td>The version to exclude.</td></tr>
-					<tr><td><tt>range;</tt></td><td>A range of versions to exclude</td></tr>
-					<tr><td><tt><property></tt></td><td>Nested <property> elements specifying properties that the artifact descriptor must have.</td></tr>
-				</table>
-				<br>
-Example: Exclude all pack.gz artifacts:
-<pre>
-	   <exclude>
-	      <artifact>
-	         <property name="format" value="packed" />
-	      </artifact>
-	   </exclude>
-</pre>
-Exclude the specified documentation bundles:
-<pre>
-	   <exclude>
-	      <artifact id="org.eclispe.jdt.doc.isv" classifier="osgi.bundle" />
-	      <artifact id="org.eclispe.jdt.doc.usr" classifier="osgi.bundle" />
-	      <artifact id="org.eclispe.pde.doc.isv" classifier="osgi.bundle" />
-	   </exclude>
+            </li>
+          </ul>
+
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <a name="destination_repositories" id=
+          "destination_repositories"><b>Specifying destination
+          repositories</b></a>
+        </td>
+      </tr>
+      <tr>
+
+        <td>
+          <p>
+            Several p2 tasks accept "destination" repositories. Destination
+            repositories can be specified in several different ways:
+          </p>
+          <ul>
+            <li>A <b><tt>destination</tt></b> attribute directly on the ant
+            task. The value is a URL to a location for both a metadata and
+            artifact repository.
+            </li>
+            <li>A <b><tt><repository></tt></b> element nested in the ant
+            task. (<b><tt><destination></tt></b> may also be used.) This
+            element supports the following attributes:
+              <table border="5" cellspacing="0" cellpadding="1" width="95%"
+              align="center">
+
+                <tr>
+                  <td>
+                    <tt>location</tt>
+                  </td>
+                  <td>
+                    A URL to the location of the repository
+                  </td>
+                </tr>
+                <tr>
+
+                  <td>
+                    <tt>kind</tt>
+                  </td>
+                  <td>
+                    Either "<tt>metadata</tt>" or "<tt>artifact</tt>". Default
+                    is both if not specified.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td>
+                    <tt>name</tt>
+                  </td>
+                  <td>
+                    A name to give the repository if the repository does not
+                    already exist.
+                  </td>
+                </tr>
+                <tr>
+
+                  <td>
+                    <tt>append</tt>
+                  </td>
+                  <td>
+                    Append to a repository that is already there. (Default is
+                    "true")
+                  </td>
+                </tr>
+                <tr>
+                  <td>
+
+                    <tt>compressed</tt>
+                  </td>
+                  <td>
+                    Whether to compress the content/artifact xml into a jar
+                    (Default is "true")
+                  </td>
+                </tr>
+                <tr>
+                  <td>
+                    <tt>format</tt>
+
+                  </td>
+                  <td>
+                    A URL to another repository from which to copy the
+                    repository name and other properties.
+                  </td>
+                </tr>
+              </table>
+            </li>
+          </ul>
+        </td>
+
+      </tr>
+      <tr>
+        <td>
+          <a name="installable_units" id="installable_units"><b>Specifying
+          Installable Units</b></a>
+        </td>
+      </tr>
+      <tr>
+        <td>
+
+          Some p2 tasks allow specifying installable units to work with. This
+          is done with nested <tt><iu></tt> elements which support the
+          following attributes:
+          <table border="5" cellspacing="0" cellpadding="1" width="95%" align=
+          "center">
+            <tr>
+              <td>
+                <tt>id</tt>
+              </td>
+              <td>
+
+                The id of the IU to match.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>version</tt>
+              </td>
+              <td>
+                The version of the IU to match. If not specified, the highest
+                versioned IU is returned. (requires <i>id</i> to be set)
+              </td>
+
+            </tr>
+            <tr>
+              <td>
+                <tt>query</tt>
+              </td>
+              <td>
+                Matches all IUs satisfying the query. Currently only "property"
+                queries are supported. The format of the query attribute is
+                intended to be "xpath-like". Eg:
+                <div class="c1">
+                  <tt><iu
+                  query="property[@name='org.eclipse.equinox.p2.type.category']"
+                  /></tt>
+
+                </div>
+                <div class="c1">
+                  <tt><iu query="property[@name='my.property.name'
+                  @value='specialValue']" /></tt>
+                </div>
+              </td>
+            </tr>
+          </table>
+        </td>
+
+      </tr>
+    </table>
+    <h2>
+      Ant Tasks
+    </h2><br />
+    <table cellspacing="1" cellpadding="2" width="95%" align="center">
+      <tr>
+        <td>
+          <h3 class="c2">
+
+            <a name="p2_mirror" id="p2_mirror">p2.mirror</a>
+          </h3>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            This task mirrors artifacts and metadata from the given source
+            repositories to the destination. This task will traverse the source
+            repository and recursively include all IUs that match the
+            requirements of IUs being mirrored (this is called <em>slicing</em>
+
+            the repository).
+          </p>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            This task supports the following attributes and elements:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width="95%" align=
+          "center">
+
+            <tr>
+              <td>
+                <tt>source</tt>
+              </td>
+              <td>
+                Source repositories, as outlined <a href=
+                "#source_repositories">above</a>
+              </td>
+
+            </tr>
+            <tr>
+              <td>
+                <tt>destination</tt>
+              </td>
+              <td>
+                Destination repositories, as outlined <a href=
+                "#destination_repositories">above</a>
+
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><iu></tt>
+              </td>
+              <td>
+                Nested IU elements, as outlined <a href=
+                "#installable_units">above</a>. The installable units to
+                mirror. If none are specified, all IUs contained in the source
+                repositories are mirrored.
+              </td>
+
+            </tr>
+            <tr>
+              <td>
+                <tt>log</tt>
+              </td>
+              <td>
+                A file to use for logging the results.
+              </td>
+            </tr>
+
+            <tr>
+              <td>
+                <tt>ignoreErrors</tt>
+              </td>
+              <td>
+                Whether or not to ignore errors. (Default is false)
+              </td>
+            </tr>
+            <tr>
+
+              <td>
+                <tt>raw</tt>
+              </td>
+              <td>
+                Copy the exact artifact descriptors from source into the
+                destination instead of initializing new artifact descriptors
+                with properties from the source descriptors. (Default is true)
+              </td>
+            </tr>
+            <tr>
+              <td>
+
+                <tt>verbose</tt>
+              </td>
+              <td>
+                Turn on verbose logging.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>validate</tt>
+
+              </td>
+              <td>
+                Validate that all all source descriptors are present in the
+                destination after mirroring is complete. (Default is false)
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><comparator></tt>
+              </td>
+
+              <td>
+                A nested comparator element for comparing against a baseline
+                repository. If IUs from the source repository already exist in
+                the baseline, then the artifacts will be mirrored from the
+                baseline instead of the source. This element supports the
+                following attributes:
+                <table border="5" cellspacing="0" cellpadding="1" width="95%"
+                align="center">
+                  <tr>
+                    <td>
+                      <tt><baseline></tt>
+                    </td>
+                    <td>
+                      A nested element specifying the baseline repository. See
+                      <a href="#destination_repositories"><i>destination
+                      repositories</i></a> above.
+                    </td>
+
+                  </tr>
+                  <tr>
+                    <td>
+                      <tt><exclude></tt>
+                    </td>
+                    <td>
+                      A nested element specifying artifacts to exclude from the
+                      comparison. Contains nested <artifact> elements
+                      which support the following attributes:
+                      <table border="5" cellspacing="0" cellpadding="1" width=
+                      "95%" align="center">
+
+                        <tr>
+                          <td>
+                            <tt>id</tt>
+                          </td>
+                          <td>
+                            The artifact id.
+                          </td>
+                        </tr>
+                        <tr>
+
+                          <td>
+                            <tt>classifier</tt>
+                          </td>
+                          <td>
+                            The artifact classifier
+                          </td>
+                        </tr>
+                        <tr>
+                          <td>
+
+                            <tt>version</tt>
+                          </td>
+                          <td>
+                            The version to exclude.
+                          </td>
+                        </tr>
+                        <tr>
+                          <td>
+                            <tt>range;</tt>
+
+                          </td>
+                          <td>
+                            A range of versions to exclude
+                          </td>
+                        </tr>
+                        <tr>
+                          <td>
+                            <tt><property></tt>
+                          </td>
+
+                          <td>
+                            Nested <property> elements specifying
+                            properties that the artifact descriptor must have.
+                          </td>
+                        </tr>
+                      </table><br />
+                      Example: Exclude all pack.gz artifacts:
+                      <pre>
+    <exclude>
+
+       <artifact>
+          <property name="format" value="packed" />
+       </artifact>
+    </exclude>
+</pre>Exclude the specified documentation bundles:
+                      <pre>
+    <exclude>
+
+       <artifact id="org.eclispe.jdt.doc.isv" classifier="osgi.bundle" />
+       <artifact id="org.eclispe.jdt.doc.usr" classifier="osgi.bundle" />
+       <artifact id="org.eclispe.pde.doc.isv" classifier="osgi.bundle" />
+    </exclude>
 </pre>
-				</td></tr>
-				<tr><td><tt>comparator</tt></td><td>Id of a comparator to use if the baseline artifacts should be compared 
-				  against the source artifacts.  These are extensions to the <i>org.eclipse.equinox.p2.artifact.repository.artifactComparators</i> extension point.  
-				  Comparators provided by p2 are:
-				<ul>
-				<li><i>org.eclipse.equinox.p2.repository.tools.jar.comparator</i>: Compare jars.  
-				  Class files are disassembled and compared for equivalence, properties and manifest files are compared as such, all other files are compared byte-for-byte.</li>
-				<li><i>org.eclipse.equinox.artifact.md5.comparator</i>: Compare the MD5 sums as recorded in the artifact repositories.</li>
-				</ul>
-				
-				</td></tr>
-				<tr><td><tt>comparatorLog</tt></td><td>A log file for the results of the comparison.</td></tr>
-			</table>
-			</td></tr>
-			<tr><td><tt><slicingOptions></tt></td><td>A nested element for specifying how to slice the 
-			  repositories to bring in additional IUs.  This element supports the following attributes:
-			<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-				<tr><td><tt>followStrict</tt></td><td>Set to true if only strict dependencies should be followed.  
-				  A strict dependency is defined by a version range only including one version (e.g. [1.0.0.v2009, 1.0.0.v2009]). (Default is false)</td></tr>
-				<tr><td><tt>includeOptional</tt></td><td>Whether or not to follow optional requirements. (Default is true).</td></tr>
-				<tr><td><tt>includeNonGreedy</tt></td><td>Whether or not to follow non-greedy requirements. (Default is true).</td></tr>
-				<tr><td><tt>includeFeatures</tt></td><td>Whether or not to include features. (Default is true).</td></tr>
-				<tr><td><tt>platformFilter</tt></td><td>An "os,ws,arch" triplet to set as the platform against which IU LDAP filters will be matched.  
-				  IUs not matching the filter will not be mirrored.</td></tr>
-				<tr><td><tt>filter</tt></td><td>Set additional filter properties.  Format is a comma separated list of "key=value" pairs.</td></tr>
-				<tr><td><tt>followOnlyFilteredRequirements</tt></td><td>Invert the filters, include only the IUs that <b>don't</b> match.</td></tr>
-				<tr><td><tt>latestVersionOnly</tt></td><td>Set to "true" to filter the resulting set of IUs to only included the latest version of each Installable Unit.
-				By default, all versions satisfying dependencies are included.</td></tr>
-			</table>
-			</td></tr>
-		</table>
-	</td></tr>
-</table>
-<br>
-Examples:
-<p>Creating a delta pack repository based on the contents of the platform, rcp, jdt and equinox.executable features:</p>
-<pre>
-	<p2.mirror source="file://${buildRepo}">
-	   <destination kind="metadata" location="file://${deltaTemp}" name="RCP Delta Pack Repo"  />
-	   <destination kind="artifact" location="file://${deltaTemp}" name="RCP Delta Pack Repo"  />
-	   <iu id="org.eclipse.platform.feature.group" version="" />
-	   <iu id="org.eclipse.rcp.feature.group" version="" />
-	   <iu id="org.eclipse.jdt.feature.group" version="" />
-	   <iu id="org.eclipse.equinox.executable" version="" />
-	   <slicingOptions includeOptional="false" includeNonGreedy="false" followStrict="true" followOnlyFilteredRequirements="true" />
-	</p2.mirror>
+                    </td>
+                  </tr>
+
+                  <tr>
+                    <td>
+                      <tt>comparator</tt>
+                    </td>
+                    <td>
+                      Id of a comparator to use if the baseline artifacts
+                      should be compared against the source artifacts. These
+                      are extensions to the
+                      <i>org.eclipse.equinox.p2.artifact.repository.artifactComparators</i>
+                      extension point. Comparators provided by p2 are:
+                      <ul>
+
+                        <li>
+                          <i>org.eclipse.equinox.p2.repository.tools.jar.comparator</i>:
+                          Compare jars. Class files are disassembled and
+                          compared for equivalence, properties and manifest
+                          files are compared as such, all other files are
+                          compared byte-for-byte.
+                        </li>
+                        <li>
+                          <i>org.eclipse.equinox.artifact.md5.comparator</i>:
+                          Compare the MD5 sums as recorded in the artifact
+                          repositories.
+                        </li>
+                      </ul>
+                    </td>
+                  </tr>
+
+                  <tr>
+                    <td>
+                      <tt>comparatorLog</tt>
+                    </td>
+                    <td>
+                      A log file for the results of the comparison.
+                    </td>
+                  </tr>
+                </table>
+
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><slicingOptions></tt>
+              </td>
+              <td>
+                A nested element for specifying how to slice the repositories
+                to bring in additional IUs. This element supports the following
+                attributes:
+                <table border="5" cellspacing="0" cellpadding="1" width="95%"
+                align="center">
+
+                  <tr>
+                    <td>
+                      <tt>followStrict</tt>
+                    </td>
+                    <td>
+                      Set to true if only strict dependencies should be
+                      followed. A strict dependency is defined by a version
+                      range only including one version (e.g. [1.0.0.v2009,
+                      1.0.0.v2009]). (Default is false)
+                    </td>
+                  </tr>
+                  <tr>
+
+                    <td>
+                      <tt>includeOptional</tt>
+                    </td>
+                    <td>
+                      Whether or not to follow optional requirements. (Default
+                      is true).
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>
+
+                      <tt>includeNonGreedy</tt>
+                    </td>
+                    <td>
+                      Whether or not to follow non-greedy requirements.
+                      (Default is true).
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <tt>includeFeatures</tt>
+
+                    </td>
+                    <td>
+                      Whether or not to include features. (Default is true).
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <tt>platformFilter</tt>
+                    </td>
+
+                    <td>
+                      An "os,ws,arch" triplet to set as the platform against
+                      which IU LDAP filters will be matched. IUs not matching
+                      the filter will not be mirrored.
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <tt>filter</tt>
+                    </td>
+                    <td>
+
+                      Set additional filter properties. Format is a comma
+                      separated list of "key=value" pairs.
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>
+                      <tt>followOnlyFilteredRequirements</tt>
+                    </td>
+                    <td>
+                      Invert the filters, include only the IUs that
+                      <b>don't</b> match.
+                    </td>
+
+                  </tr>
+                  <tr>
+                    <td>
+                      <tt>latestVersionOnly</tt>
+                    </td>
+                    <td>
+                      Set to "true" to filter the resulting set of IUs to only
+                      included the latest version of each Installable Unit. By
+                      default, all versions satisfying dependencies are
+                      included.
+                    </td>
+                  </tr>
+
+                </table>
+              </td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+    </table><br />
+    Examples:
+    <p>
+
+      Creating a delta pack repository based on the contents of the platform,
+      rcp, jdt and equinox.executable features:
+    </p>
+    <pre>
+ <p2.mirror source="file://${buildRepo}">
+    <destination kind="metadata" location="file://${deltaTemp}" name="RCP Delta Pack Repo"  />
+    <destination kind="artifact" location="file://${deltaTemp}" name="RCP Delta Pack Repo"  />
+    <iu id="org.eclipse.platform.feature.group" version="" />
+
+    <iu id="org.eclipse.rcp.feature.group" version="" />
+    <iu id="org.eclipse.jdt.feature.group" version="" />
+    <iu id="org.eclipse.equinox.executable" version="" />
+    <slicingOptions includeOptional="false" includeNonGreedy="false" followStrict="true" followOnlyFilteredRequirements="true" />
+ </p2.mirror>
 </pre>
-<p>Mirror the org.eclipse.equinox.p2.user.ui feature and other required bundles locally (perhaps in preparation for a build).</p>
-<pre>
-	<p2.mirror source="http://download.eclipse.org/releases/helios" destination="${p2Repo}">
-	   <slicingOptions followStrict="true" />
-	   <iu id="org.eclipse.equinox.p2.user.ui.feature.group" />
-	   <iu id="org.eclipse.ecf"/>
-	   <iu id="org.eclipse.ecf.filetransfer"/>
-	   <iu id="org.eclipse.ecf.identity"/>
-	   <iu id="org.eclipse.ecf.provider.filetransfer"/>
-	   <iu id="org.eclipse.ecf.provider.filetransfer.httpclient"/>
-	   <iu id="org.eclipse.ecf.provider.filetransfer.httpclient.ssl" />
-	   <iu id="org.eclipse.ecf.provider.filetransfer.ssl"/>
-	   <iu id="org.eclipse.ecf.ssl" />
-	   <iu id="org.apache.commons.codec"/>
-	   <iu id="org.apache.commons.httpclient"/>
-	   <iu id="org.apache.ant"/>
-	   <iu id="org.eclipse.core.runtime.compatibility.registry"/>
-	</p2.mirror>
+    <p>
+
+      Mirror the org.eclipse.equinox.p2.user.ui feature and other required
+      bundles locally (perhaps in preparation for a build).
+    </p>
+    <pre>
+ <p2.mirror source="http://download.eclipse.org/releases/helios" destination="${p2Repo}">
+    <slicingOptions followStrict="true" />
+    <iu id="org.eclipse.equinox.p2.user.ui.feature.group" />
+    <iu id="org.eclipse.ecf"/>
+
+    <iu id="org.eclipse.ecf.filetransfer"/>
+    <iu id="org.eclipse.ecf.identity"/>
+    <iu id="org.eclipse.ecf.provider.filetransfer"/>
+    <iu id="org.eclipse.ecf.provider.filetransfer.httpclient"/>
+    <iu id="org.eclipse.ecf.provider.filetransfer.httpclient.ssl" />
+    <iu id="org.eclipse.ecf.provider.filetransfer.ssl"/>
+
+    <iu id="org.eclipse.ecf.ssl" />
+    <iu id="org.apache.commons.codec"/>
+    <iu id="org.apache.commons.httpclient"/>
+    <iu id="org.apache.ant"/>
+    <iu id="org.eclipse.core.runtime.compatibility.registry"/>
+ </p2.mirror>
+
 </pre>
-<p>Mirror the results of a build into a public location, and compare against the existing update site to ensure that artifacts 
-  haven't changed if their versions haven't been updated.</p>
-<pre>
-	<p2.mirror source="file:${buildRepo}" ignoreErrors="true" log="${buildlogs}/mirrorlog.txt">
-	   <destination compressed="true" name="${p2.repo.name}" location="file:${updateRepo}" append="true" />
-	   <comparator comparator="org.eclipse.equinox.p2.repository.tools.jar.comparator" comparatorLog="${buildlogs}/comparatorlog.txt">
-	      <repository location="file:${updateSite}" />
-	   </comparator>
-	</p2.mirror>
+    <p>
+      Mirror the results of a build into a public location, and compare against
+      the existing update site to ensure that artifacts haven't changed if
+      their versions haven't been updated.
+    </p>
+    <pre>
+ <p2.mirror source="file:${buildRepo}" ignoreErrors="true" log="${buildlogs}/mirrorlog.txt">
+    <destination compressed="true" name="${p2.repo.name}" location="file:${updateRepo}" append="true" />
+    <comparator comparator="org.eclipse.equinox.p2.repository.tools.jar.comparator" comparatorLog="${buildlogs}/comparatorlog.txt">
+
+       <repository location="file:${updateSite}" />
+    </comparator>
+ </p2.mirror>
 </pre>
+    <table cellspacing="1" cellpadding="2" width="95%" align="center">
+      <tr>
+        <td>
+          <h3 class="c2">
+
+            <a name="p2_repo2runnable" id=
+            "p2_repo2runnable">p2.repo2runnable</a>
+          </h3>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Transform IUs into their installed form and add them to the
+            destination repository. This allows compiling against folder shaped
+            bundles that contain nested jars. This task is the main mechanism
+            by which headless PDE/Builds can reuse metadata.
+          </p>
+
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            This task supports the following attributes and elements:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width="95%" align=
+          "center">
+            <tr>
+
+              <td>
+                <tt>source</tt>
+              </td>
+              <td>
+                Source repositories, as outlined <a href=
+                "#source_repositories">above</a>
+              </td>
+            </tr>
+
+            <tr>
+              <td>
+                <tt>desination</tt>
+              </td>
+              <td>
+                Destination repositories, as outlined <a href=
+                "#destination_repositories">above</a>
+              </td>
+
+            </tr>
+            <tr>
+              <td>
+                <tt>failOnError</tt>
+              </td>
+              <td>
+                Default is true. Set to "false" to ignore errors and complete
+                the operation.
+              </td>
+            </tr>
+
+            <tr>
+              <td>
+                <tt><iu></tt>
+              </td>
+              <td>
+                Nested IU elements, as outlined <a href=
+                "#installable_units">above</a>. The installable units to
+                transform. If none are specified, all IUs contained in the
+                source repositories are transformed.
+              </td>
+            </tr>
+
+          </table>
+        </td>
+      </tr>
+    </table><br />
+    <table cellspacing="1" cellpadding="2" width="95%" align="center">
+      <tr>
+        <td>
+          <h3 class="c2">
+            p2.process.artifacts
+          </h3>
+
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Process a local, file-based artifact repository. This task will
+            (optionally) sign and pack artifacts, as well as update the MD5
+            sums in the repository to match the actual artifacts on disk (since
+            signing/conditioning will change the MD5 sums). This task will use
+            the jarProcessor, which in turn uses ant's SignJar task which
+            requires the <i>jarsigner</i> command line tool.
+          </p>
+        </td>
+
+      </tr>
+      <tr>
+        <td>
+          <p>
+            This task supports the following attributes and elements:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width="95%" align=
+          "center">
+            <tr>
+              <td>
+
+                <tt>repositoryPath</tt>
+              </td>
+              <td>
+                A URL to an artifact repository to process. This must be a
+                local, file-based repository.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>pack</tt>
+
+              </td>
+              <td>
+                Whether or not to create pack.gz artifacts. (Default is false)
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>normalize</tt>
+              </td>
+
+              <td>
+                Whether or not to do pack200(pack + unpack) conditioning on the
+                artifacts. (Default is false, however sign + pack will imply a
+                normalize.)
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><sign></tt>
+              </td>
+              <td>
+
+                A nested element to enable signing. This element supports the
+                following attributes:
+                <table border="5" cellspacing="0" cellpadding="1" width="95%"
+                align="center">
+                  <tr>
+                    <td>
+                      <tt>alias</tt>
+                    </td>
+                    <td>
+                      The alias to sign with
+                    </td>
+
+                  </tr>
+                  <tr>
+                    <td>
+                      <tt>keystore</tt>
+                    </td>
+                    <td>
+                      The location of the keystore.
+                    </td>
+                  </tr>
+
+                  <tr>
+                    <td>
+                      <tt>keypass</tt>
+                    </td>
+                    <td>
+                      Password for the private key (if different).
+                    </td>
+                  </tr>
+                  <tr>
+
+                    <td>
+                      <tt>storepass</tt>
+                    </td>
+                    <td>
+                      Password for the key store.
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>
+
+                      <tt>unsign</tt>
+                    </td>
+                    <td>
+                      Whether or not to strip any existing signatures before
+                      signing. (Default is false)
+                    </td>
+                  </tr>
+                </table>
+              </td>
+            </tr>
+
+            <tr>
+              <td>
+                <tt><feature></tt>
+              </td>
+              <td>
+                Nested elements specifying features IUs to process (see
+                <a href="#installable_units">above</a>, the <i>query</i>
+
+                attribute is not supported here). If no features or plug-ins
+                are specified, the entire repository is processed.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><plugin></tt>
+              </td>
+              <td>
+                Nested elements specifying plugins IUs to process (see <a href=
+                "#installable_units">above</a>, the <i>query</i> attribute is
+                not supported here). If no features or plug-ins are specified,
+                the entire repository is processed.
+              </td>
+
+            </tr>
+          </table>
+        </td>
+      </tr>
+    </table><br />
+    <table cellspacing="1" cellpadding="2" width="95%" align="center">
+      <tr>
+        <td>
+          <h3 class="c2">
+
+            p2.remove.iu
+          </h3>
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Remove Installable Units from the given metadata and artifact
+            repositories. The provided repositories must be modifiable.
+          </p>
+        </td>
+
+      </tr>
+      <tr>
+        <td>
+          <p>
+            This task supports the following attributes and elements:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width="95%" align=
+          "center">
+            <tr>
+              <td>
+
+                <tt><repository></tt>
+              </td>
+              <td>
+                Nested elements specifying metadata and artifact repositories
+                to remove Installable Units from. See <a href=
+                "#destination_repositories">destination repositories</a> above.
+                A metadata repository is required, the artifact repository is
+                optional.
+              </td>
+            </tr>
+            <tr>
+
+              <td>
+                <tt><iu></tt>
+              </td>
+              <td>
+                Nested IU elements, as outlined <a href=
+                "#installable_units">above</a>. The installable units to
+                remove. Matching IUs are removed from the metadata repository,
+                and all associated artifacts are removed from the artifact
+                repository (if provided).
+              </td>
+            </tr>
+          </table>
+
+        </td>
+      </tr>
+    </table><br />
+    <table cellspacing="1" cellpadding="2" width="95%" align="center">
+      <tr>
+        <td>
+          <h3 class="c2">
+            p2.composite.repository
+          </h3>
+
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <p>
+            Create a composite repository
+          </p>
+        </td>
+      </tr>
+
+      <tr>
+        <td>
+          <p>
+            This task supports the following attributes and elements:
+          </p>
+          <table border="5" cellspacing="0" cellpadding="1" width="95%" align=
+          "center">
+            <tr>
+              <td>
+                <tt>failOnExists</tt>
+
+              </td>
+              <td>
+                Whether we should fail if the repository already exists.
+                (Default is false)
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt>validate</tt>
+              </td>
+
+              <td>
+                A comparator-id. Child repositories claiming to contain the
+                same artifact are compared using the given comparator. These
+                are extensions to the
+                <i>org.eclipse.equinox.p2.artifact.repository.artifactComparators</i>
+                extension point. Comparators provided by p2 are:
+                <ul>
+                  <li>
+                    <i>org.eclipse.equinox.p2.repository.tools.jar.comparator</i>:
+                    Compare jars. Class files are disassembled and compared for
+                    equivalence, properties and manifest files are compared as
+                    such, all other files are compared byte-for-byte.
+                  </li>
+                  <li>
+
+                    <i>org.eclipse.equinox.artifact.md5.comparator</i>: Compare
+                    the MD5 sums as recorded in the artifact repositories.
+                  </li>
+                </ul>
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><add></tt>
+
+              </td>
+              <td>
+                A nested element containing a list of repositories to add to
+                the composite. See <a href="#source_repositories">source
+                repositories</a> above.
+              </td>
+            </tr>
+            <tr>
+              <td>
+                <tt><remove></tt>
+
+              </td>
+              <td>
+                A nested element containing a list repositories to remove from
+                the composite. See <a href="#source_repositories">source
+                repositories</a> above.
+              </td>
+            </tr>
+          </table>
+        </td>
+      </tr>
 
-<table cellspacing="1" cellpadding="2" width="95%" align="center">
-	<tr><td><b><a name="p2_repo2runnable"><h3>p2.repo2runnable</h3></a></b></td></tr>
-	<tr><td><p>Transform IUs into their installed form and add them to the destination repository.  This allows compiling against folder 
-	  shaped bundles that contain nested jars.  This task is the main mechanism by which headless PDE/Builds can reuse metadata.</p>
-	</td></tr>
-	<tr><td><p>This task supports the following attributes and elements:</p>
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt>source</tt></td><td>Source repositories, as outlined <a href="#source_repositories">above</a></td></tr>
-			<tr><td><tt>desination</tt></td><td>Destination repositories, as outlined <a href="#destination_repositories">above</a></td></tr>
-			<tr><td><tt>failOnError</tt></td><td>Default is true.  Set to "false" to ignore errors and complete the operation.</td></tr>
-			<tr><td><tt><iu></tt></td><td>Nested IU elements, as outlined <a href="#installable_units">above</a>.  
-			  The installable units to transform.  If none are specified, all IUs contained in the source repositories are transformed.</td></tr>
-		</table>
-	</td></tr>
-</table>
-<br>
-<table cellspacing="1" cellpadding="2" width="95%" align="center">
-	<tr><td><b><h3>p2.process.artifacts</h3></b></td></tr>
-	<tr><td><p>Process a local, file-based artifact repository.  This task will (optionally) sign and pack artifacts, 
-	  as well as update the MD5 sums in the repository to match the actual artifacts on disk (since signing/conditioning will change the MD5 sums).
-	This task will use the jarProcessor, which in turn uses ant's SignJar task which requires the <i>jarsigner</i> command line tool.</p></td></tr>
-	<tr><td><p>This task supports the following attributes and elements:</p>
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt>repositoryPath</tt></td><td>A URL to an artifact repository to process.  This must be a local, file-based repository.</td></tr>
-			<tr><td><tt>pack</tt></td><td>Whether or not to create pack.gz artifacts.  (Default is false)</td></tr>
-			<tr><td><tt>normalize</tt></td><td>Whether or not to do pack200(pack + unpack) conditioning on the artifacts.  
-			  (Default is false, however sign + pack will imply a normalize.)</td></tr>
-			<tr><td><tt><sign></tt></td><td>A nested element to enable signing.  This element supports the following attributes:
-			<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-				<tr><td><tt>alias</tt></td><td>The alias to sign with</td></tr>
-				<tr><td><tt>keystore</tt></td><td>The location of the keystore.</td></tr>
-				<tr><td><tt>keypass</tt></td><td>Password for the private key (if different).</td></tr>
-				<tr><td><tt>storepass</tt></td><td>Password for the key store.</td></tr>
-				<tr><td><tt>unsign</tt></td><td>Whether or not to strip any existing signatures before signing.  (Default is false)</td></tr>
-			</table>
-			</td></tr>
-			<tr><td><tt><feature></tt></td><td>Nested elements specifying features IUs to process 
-			  (see <a href="#installable_units">above</a>,  the <i>query</i> attribute is not supported here).  
-			  If no features or plug-ins are specified, the entire repository is processed.</td></tr>
-			<tr><td><tt><plugin></tt></td><td>Nested elements specifying plugins IUs to process 
-			  (see <a href="#installable_units">above</a>, the <i>query</i> attribute is not supported here).  
-			  If no features or plug-ins are specified, the entire repository is processed.</td></tr>
-		</table>
-	</td></tr>
-</table>		
-<br>
-<table cellspacing="1" cellpadding="2" width="95%" align="center">
-	<tr><td><b><h3>p2.remove.iu</h3></b></td></tr>
-	<tr><td><p>Remove Installable Units from the given metadata and artifact repositories.  The provided repositories must be modifiable.</p></td></tr>
-	<tr><td><p>This task supports the following attributes and elements:</p>
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt><repository></tt></td><td>Nested elements specifying metadata and artifact repositories to remove Installable Units from.  See <a href="#destination_repositories">destination repositories</a> above.  
-			A metadata repository is required, the artifact repository is optional.</td></tr>
-			<tr><td><tt><iu></tt></td><td>Nested IU elements, as outlined <a href="#installable_units">above</a>.  
-			  The installable units to remove.  Matching IUs are removed from the metadata repository, and all associated artifacts are removed from the artifact repository (if provided).</td></tr>
-		</table>
-	</td></tr>
-</table>		
-<br>
-<table cellspacing="1" cellpadding="2" width="95%" align="center">
-	<tr><td><b><h3>p2.composite.repository</h3></b></td></tr>
-	<tr><td><p>Create a composite repository</p></td></tr>
-	<tr><td><p>This task supports the following attributes and elements:</p>
-		<table border="5" cellspacing="0" cellpadding="1" width="95%" align="center">
-			<tr><td><tt>failOnExists</tt></td><td>Whether we should fail if the repository already exists.  (Default is false)</td></tr>
-			<tr><td><tt>validate</tt></td><td>A comparator-id.  Child repositories claiming to contain the same artifact are 
-			  compared using the given comparator.  These are extensions to the <i>org.eclipse.equinox.p2.artifact.repository.artifactComparators</i> 
-			  extension point.  Comparators provided by p2 are:
-				<ul>
-				<li><i>org.eclipse.equinox.p2.repository.tools.jar.comparator</i>: Compare jars.  Class files are disassembled and 
-				  compared for equivalence, properties and manifest files are compared as such, all other files are compared byte-for-byte.</li>
-				<li><i>org.eclipse.equinox.artifact.md5.comparator</i>: Compare the MD5 sums as recorded in the artifact repositories.</li>
-				</ul>
-			</td></tr>
-			<tr><td><tt><add></tt></td><td>A nested element containing a list of repositories to add to the composite. 
-			  See <a href="#source_repositories">source repositories</a> above.</td></tr>
-			<tr><td><tt><remove></tt></td><td>A nested element containing a list repositories to remove 
-			  from the composite. See <a href="#source_repositories">source repositories</a> above.</td></tr>
-		</table>
-	</td></tr>
-</table>
-</body>
-</html>
\ No newline at end of file
+    </table>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_startup.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_startup.htm
index e627d0c..d5ffb99 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_startup.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_startup.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -30,13 +30,13 @@ found <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/e
 <p>In this kind of scenario, you need to ensure that all of the p2 services are available at startup time, when the update check is
 to be performed.  The example bundle itself must be started.  Less obvious is that the <b>org.eclipse.equinox.ds</b> bundle must be 
 started so that all of the declared services will be found.  This can be accomplished in a number of ways, depending on how you are 
-running the example:
+running the example:</p>
 <ul>
 <li>set the bundle start level in the Configuration tab of the product editor (the .product file for your build)</li>
 <li>force a start of the bundle in the config.ini of the already built app</li>
 <li>set the bundle start level in the launch configuration if you are simply launching the example in Eclipse</li>
 </ul>
-</p>
+
 <p>The update check is performed in the <b>postWindowOpen()</b> method of the example's <b>ApplicationWorkbenchWindowAdvisor</b> 
 class.  This method sets up the progress monitoring, invokes the update search, and handles any errors or notifications.  It uses a 
 preference to remember if it is restarting after an update, so that the update search is not repeated when the application
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_ui.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_ui.htm
index df84a9b..88c7bd0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_ui.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_ui.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -16,7 +16,7 @@
 Customizing the p2 UI</H2>
 <p>
 There are several different levels of integration with the p2 UI, depending on what kind of support you want to surface 
-to your users.
+to your users.</p>
 <ul>
 <li>If your goal is to <a href="p2_uireuse.htm">reuse the Eclipse SDK UI</a> inside your own product, you can
 include the <b>org.eclipse.equinox.p2.user.ui</b> feature in your product.  If you want only a subset of the functionality, such as providing
@@ -28,6 +28,6 @@ changes aspects of the UI.</li>
 <li>If you want to <a href="p2_startup.htm">force update of your application</a>, you can use the p2 <b>Operations</b> API to perform a customized
 search for updates on startup.</li>
 </ul>
-</p>
+
 </BODY>
 </HTML>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uipolicy.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uipolicy.htm
index 695703c..67ab347 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uipolicy.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uipolicy.htm
@@ -1,131 +1,188 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
-<HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Configuring the UI Policy
+    </title>
+    <link rel="stylesheet" type="text/css" href="../book.css" />
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h2>
+      Configuring the UI Policy
+    </h2>
+    <p>
+      Some aspects of what the p2 UI presents and how it behaves are
+      configurable using the <b><a href=
+      "../reference/api/org/eclipse/equinox/p2/ui/Policy.html">Policy</a></b>
 
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+      class. You can configure an instance of this class (or subclass) in order
+      to customize the UI for your application. This policy is registered as an
+      OSGi service, and retrieved by the UI in order to make decisions about
+      presentation.
+    </p>
+    <p>
+      Depending on the application requirements, the policy instance may be
+      configured in code, configured using internal preferences, or even by
+      exposing some of the decisions to a user in a preference page. The policy
+      allows you to control things such as
+    </p>
+    <ul>
+      <li>whether repositories (sites) are visible to the user, and whether the
+      user is permitted to manipulate (add, enable, disable, remove) the sites
+      that are used for install and update
+      </li>
+      <li>what software (installable units) is visible to the user when
+      browsing software sites
+      </li>
+      <li>what software (installable units) is shown as the roots of the
+      'Installed Software' page
+      </li>
 
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<TITLE>Configuring the UI Policy</TITLE>
+      <li>whether restart is required after updating an application
+      </li>
+    </ul>
+    <h3>
+      Example: Installing from the Cloud
+    </h3>
+    <p>
+      This kind of customization is best described by example. A common
+      scenario in RCP applications is that the user should be able to update
+      the application, or install additional software, from a controlled set of
+      update sites. This is common in managed installations, where a systems
+      administrator is maintaining an internal update site. From the user point
+      of view, updates come from one "cloud" rather than individual software
+      sites, and there is no visibility of software sites.
+    </p>
+    <p>
 
-<link rel="stylesheet" type="text/css" HREF="../book.css">
-</HEAD>
-<BODY BGCOLOR="#ffffff">
-<H2>
-Configuring the UI Policy</H2>
-<p>
-Some aspects of what the p2 UI presents and how it behaves are configurable using
-the <b><a href="../reference/api/org/eclipse/equinox/p2/ui/Policy.html">Policy</a></b> class.
-You can configure an instance of this class (or subclass) in order to customize the UI
-for your application.  This policy is registered as an OSGi service, and retrieved by the UI
-in order to make decisions about presentation.  
-</p>
-<p>Depending on the application requirements, 
-the policy instance may be configured in code, configured using internal preferences,
-or even by exposing some of the decisions to a user in a preference page.  The policy 
-allows you to control things such as
-<ul>
-<li>whether repositories (sites) are visible to the user, and whether the user 
-is permitted to manipulate (add, enable, disable, remove) the sites that are used for install and update</li>
-<li>what software (installable units) is visible to the user when browsing software sites</li>
-<li>what software (installable units) is shown as the roots of the 'Installed Software' page</li>
-<li>whether restart is required after updating an application</li>
-</ul>
-</p>
-<h3>Example: Installing from the Cloud</h3>
-<p>
-This kind of customization is best described by example.  A common scenario in RCP applications is that the user should be able
-to update the application, or install additional software, from a controlled set of update sites.  This is common in managed installations, 
-where a systems administrator is maintaining an internal update site.  From the user point of view, updates come from one "cloud" rather 
-than individual software sites, and there is no visibility of software sites.
-</p>
-<p>In this example, we want the UI to behave in the following ways:</p>
-<ul>
-<li>we do not want to expose any site management function or site preferences</li>
-<li>we do not want to expose the standard SDK update preferences, but instead use our own values</li>
-<li>we want to contribute the standard installation pages (allowing access to uninstall, update, and revert) </li> 
-<li>we want to allow automatic updating using the standard preference page</li>
-<li>we group the application preferences and update menu items in a <b>Tools</b> menu</li>
-</ul>
-<p>A sample RCP Mail application which does this kind of customization can be found
-<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud/?root=RT_Project">in CVS</a>.
-The most important aspect of this example is that we need to configure the p2 UI <b><a href="../reference/api/org/eclipse/equinox/p2/ui/Policy.html">Policy</a></b>
-according to our requirements and register it.  
-</p>
-<p>We will register our policy in the startup code of the existing RCP Mail bundle 
-class.
-</p>
+      In this example, we want the UI to behave in the following ways:
+    </p>
+    <ul>
+      <li>we do not want to expose any site management function or site
+      preferences
+      </li>
+      <li>we do not want to expose the standard SDK update preferences, but
+      instead use our own values
+      </li>
+      <li>we want to contribute the standard installation pages (allowing
+      access to uninstall, update, and revert)
+      </li>
+      <li>we want to allow automatic updating using the standard preference
+      page
+      </li>
 
-<pre>
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
-		// XXX register the p2 UI policy
-		registerP2Policy(context);
-		getPreferenceStore().addPropertyChangeListener(getPreferenceListener());
-	}
+      <li>we group the application preferences and update menu items in a
+      <b>Tools</b> menu
+      </li>
+    </ul>
+    <p>
+      A sample RCP Mail application which does this kind of customization can
+      be found <a href=
+      "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.cloud/?root=RT_Project">
+      in CVS</a>. The most important aspect of this example is that we need to
+      configure the p2 UI <b><a href=
+      "../reference/api/org/eclipse/equinox/p2/ui/Policy.html">Policy</a></b>
+
+      according to our requirements and register it.
+    </p>
+    <p>
+      We will register our policy in the startup code of the existing RCP Mail
+      bundle class.
+    </p>
+    <pre>
+ public void start(BundleContext context) throws Exception {
+  super.start(context);
+  plugin = this;
+  // XXX register the p2 UI policy
+  registerP2Policy(context);
+  getPreferenceStore().addPropertyChangeListener(getPreferenceListener());
+ }
 </pre>
-<p>
-The registration method creates a default policy instance, updates it according to some preference values, and registers it.
-</p>
-<pre>
-	private void registerP2Policy(BundleContext context) {
-		policy = new CloudPolicy();
-		policy.updateForPreferences();
-		policyRegistration = context.registerService(Policy.class.getName(), policy, null);
-	}
+    <p>
+      The registration method creates a default policy instance, updates it
+      according to some preference values, and registers it.
+    </p>
+
+    <pre>
+ private void registerP2Policy(BundleContext context) {
+  policy = new CloudPolicy();
+  policy.updateForPreferences();
+  policyRegistration = context.registerService(Policy.class.getName(), policy, null);
+ }
 </pre>
-<p>
-In this example, we wish to initialize a policy instance that prevents the user from manipulating the repositories.  
-There are several ways to go about this.  The most direct way is that the policy initializes its desired values on construction.
-</p>
-<pre>
+    <p>
+      In this example, we wish to initialize a policy instance that prevents
+      the user from manipulating the repositories. There are several ways to go
+      about this. The most direct way is that the policy initializes its
+      desired values on construction.
+    </p>
+    <pre>
 public class CloudPolicy extends Policy {
-	public CloudPolicy() {
-		// XXX User has no visibility for repos
-		setRepositoriesVisible(false);
-	}
+ public CloudPolicy() {
+  // XXX User has no visibility for repos
+  setRepositoriesVisible(false);
+ }
 }
 </pre>
-<p>
-A more general approach is for the policy to derive its values from preference settings.  These preferences are not exposed to the end 
-user, but are used to control how the policy initializes itself.  This is the approach taken in the cloud example.  
-The advantage of such an approach is that the policy can be configured by altering the preference values in the 
-<b>plugin_customization.ini</b> file for the application.
-</p>
-<p>
-The policy code simply reads preference settings and adjusts the policy accordingly.
-</p>
-<pre>
-	public void updateForPreferences() {
-		IPreferenceStore prefs = Activator.getDefault().getPreferenceStore();
-		setRepositoriesVisible(prefs
-				.getBoolean(PreferenceConstants.REPOSITORIES_VISIBLE));
-		setRestartPolicy(prefs.getInt(PreferenceConstants.RESTART_POLICY));
-		setShowLatestVersionsOnly(prefs
-				.getBoolean(PreferenceConstants.SHOW_LATEST_VERSION_ONLY));
-		setGroupByCategory(prefs
-				.getBoolean(PreferenceConstants.AVAILABLE_GROUP_BY_CATEGORY));
-		setShowDrilldownRequirements(prefs
-				.getBoolean(PreferenceConstants.SHOW_DRILLDOWN_REQUIREMENTS));
-		if (prefs.getBoolean(PreferenceConstants.AVAILABLE_SHOW_ALL_BUNDLES))
-			setVisibleAvailableIUQuery(QueryUtil.ALL_UNITS);
-		else
-			setVisibleAvailableIUQuery(QueryUtil.createIUGroupQuery());
-		if (prefs.getBoolean(PreferenceConstants.INSTALLED_SHOW_ALL_BUNDLES))
-			setVisibleAvailableIUQuery(QueryUtil.ALL_UNITS);
-		else
-			setVisibleAvailableIUQuery(new UserVisibleRootQuery());
+    <p>
+      A more general approach is for the policy to derive its values from
+      preference settings. These preferences are not exposed to the end user,
+      but are used to control how the policy initializes itself. This is the
+      approach taken in the cloud example. The advantage of such an approach is
+      that the policy can be configured by altering the preference values in
+      the <b>plugin_customization.ini</b> file for the application.
+    </p>
+
+    <p>
+      The policy code simply reads preference settings and adjusts the policy
+      accordingly.
+    </p>
+    <pre>
+ public void updateForPreferences() {
+  IPreferenceStore prefs = Activator.getDefault().getPreferenceStore();
+  setRepositoriesVisible(prefs
+    .getBoolean(PreferenceConstants.REPOSITORIES_VISIBLE));
+  setRestartPolicy(prefs.getInt(PreferenceConstants.RESTART_POLICY));
+  setShowLatestVersionsOnly(prefs
+    .getBoolean(PreferenceConstants.SHOW_LATEST_VERSION_ONLY));
+  setGroupByCategory(prefs
+    .getBoolean(PreferenceConstants.AVAILABLE_GROUP_BY_CATEGORY));
+  setShowDrilldownRequirements(prefs
+    .getBoolean(PreferenceConstants.SHOW_DRILLDOWN_REQUIREMENTS));
+  if (prefs.getBoolean(PreferenceConstants.AVAILABLE_SHOW_ALL_BUNDLES))
+   setVisibleAvailableIUQuery(QueryUtil.ALL_UNITS);
+  else
+   setVisibleAvailableIUQuery(QueryUtil.createIUGroupQuery());
+  if (prefs.getBoolean(PreferenceConstants.INSTALLED_SHOW_ALL_BUNDLES))
+   setVisibleAvailableIUQuery(QueryUtil.ALL_UNITS);
+  else
+   setVisibleAvailableIUQuery(new UserVisibleRootQuery());
 
-	}
+ }
 </pre>
-<p>
-Now, the <b>plugin_customization.ini</b> file can be edited according to the desired policy.  
-A sample file that explains all of the configurable aspects of the policy is included in the example.
-It looks something like this.
-</p>
-<pre>
+    <p>
+      Now, the <b>plugin_customization.ini</b> file can be edited according to
+      the desired policy. A sample file that explains all of the configurable
+      aspects of the policy is included in the example. It looks something like
+      this.
+    </p>
+
+    <pre>
 # we can configure the update UI by using application preferences to initialize the default UI policy
 
 # should user be able to see and manipulate repositories in the install wizard
@@ -163,98 +220,138 @@ org.eclipse.equinox.p2.ui.sdk.scheduler/remindElapsedTime=4 Hours
 # download updates before notifying the user
 org.eclipse.equinox.p2.ui.sdk.scheduler/download=true
 </pre>
-<p>The rest of the UI code in the cloud example is based on code from <b>org.eclipse.equinox.p2.ui.sdk</b>.
-We copy the command handlers for install and update, and choose not to use any of the preference pages.  
-The <b>plugin.xml</b> contributions for the standard installation pages are also included.
-The page implementations are contained in the p2 UI bundle, so we only need to define the names of the pages and 
-point to the existing implementations.
-</p>
-<p>The end result is an application whose install and update UI looks familiar.  The most significant change is that the 
-<b>Install New Software...</b> wizard no longer provides any control over which sites are shown.  
-Only the content from sites preconfigured in the product (using the <b>p2.inf</b> file in our example) are shown.
-</p>
-<p><img border="0" src="images/p2cloudinstall.png" alt="Example Install Wizard" >
-</p>
-<h3>Example: Customizing the UI Queries</h3>
-<p>The Eclipse SDK and the examples shown so far use the default p2 
-UI Policy queries that control the visibility of software items.
-In practice, this means that only Eclipse features are shown when 
-browsing the various update sites.  However, p2 does not have any 
-specific knowledge of Eclipse features, nor does it require that 
-installation and update operations be based on features.  
-Similarly, only items actually installed by the end user, (or defined as installed items at 
-product-build time), are shown in the <b>Installed Software</b> page.  
-This is done to simplify the view of the installation.
-</p>
-<p>
-Your application can change the visibility of items in the UI by defining customized
-queries for obtaining the available or installed software.  
-In this example, we'll replace the filtered queries normally used by the Eclipse SDK with queries that show everything available.  
-(We'll also show how this can be achieved by altering the preference settings in the Cloud example.  
-The approach taken in this example is shown in order to demonstrate how the queries can be replaced with application-defined queries.  
-For example, the query could be modified to show only IU's with a certain property, or only those whose ids are associated with the 
-application).
-</p>
-<p>A complete example is available in 
-<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility/?root=RT_Project">CVS</a>.
-When installing new software, every available bundle is shown in the install wizard.  (Note that you must uncheck the 
-<b>Group items by category</b> checkbox to see this list.)
-</p>
-<p><img border="0" src="images/p2allbundles.png" alt="Example Install Wizard showing all bundles in the repository" >
-</p>
-<p>Likewise, the <b>Installed Software</b> page shows every bundle in the installation, not just the "root" of the product 
-and the user-installed items.
-</p>
-<p><img border="0" src="images/p2allbundlesinstalled.png" alt="Example Installed Software page showing all bundles that are installed" >
-</p>
-<p>
-The steps for building the contributions are similar to those for the Cloud example above.  This time, the
-policy class is called <b>AllIUsAreVisiblePolicy</b>.
-</p>
-<pre>
+    <p>
+      The rest of the UI code in the cloud example is based on code from
+      <b>org.eclipse.equinox.p2.ui.sdk</b>. We copy the command handlers for
+      install and update, and choose not to use any of the preference pages.
+      The <b>plugin.xml</b> contributions for the standard installation pages
+      are also included. The page implementations are contained in the p2 UI
+      bundle, so we only need to define the names of the pages and point to the
+      existing implementations.
+    </p>
+    <p>
+      The end result is an application whose install and update UI looks
+      familiar. The most significant change is that the <b>Install New
+      Software...</b> wizard no longer provides any control over which sites
+      are shown. Only the content from sites preconfigured in the product
+      (using the <b>p2.inf</b> file in our example) are shown.
+    </p>
+
+    <p>
+      <img border="0" src="images/p2cloudinstall.png" alt=
+      "Example Install Wizard" />
+    </p>
+    <h3>
+      Example: Customizing the UI Queries
+    </h3>
+    <p>
+      The Eclipse SDK and the examples shown so far use the default p2 UI
+      Policy queries that control the visibility of software items. In
+      practice, this means that only Eclipse features are shown when browsing
+      the various update sites. However, p2 does not have any specific
+      knowledge of Eclipse features, nor does it require that installation and
+      update operations be based on features. Similarly, only items actually
+      installed by the end user, (or defined as installed items at
+      product-build time), are shown in the <b>Installed Software</b> page.
+      This is done to simplify the view of the installation.
+    </p>
+
+    <p>
+      Your application can change the visibility of items in the UI by defining
+      customized queries for obtaining the available or installed software. In
+      this example, we'll replace the filtered queries normally used by the
+      Eclipse SDK with queries that show everything available. (We'll also show
+      how this can be achieved by altering the preference settings in the Cloud
+      example. The approach taken in this example is shown in order to
+      demonstrate how the queries can be replaced with application-defined
+      queries. For example, the query could be modified to show only IU's with
+      a certain property, or only those whose ids are associated with the
+      application).
+    </p>
+    <p>
+      A complete example is available in <a href=
+      "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility/?root=RT_Project">
+      CVS</a>. When installing new software, every available bundle is shown in
+      the install wizard. (Note that you must uncheck the <b>Group items by
+      category</b> checkbox to see this list.)
+    </p>
+
+    <p>
+      <img border="0" src="images/p2allbundles.png" alt=
+      "Example Install Wizard showing all bundles in the repository" />
+    </p>
+    <p>
+      Likewise, the <b>Installed Software</b> page shows every bundle in the
+      installation, not just the "root" of the product and the user-installed
+      items.
+    </p>
+    <p>
+      <img border="0" src="images/p2allbundlesinstalled.png" alt=
+      "Example Installed Software page showing all bundles that are installed" />
+
+    </p>
+    <p>
+      The steps for building the contributions are similar to those for the
+      Cloud example above. This time, the policy class is called
+      <b>AllIUsAreVisiblePolicy</b>.
+    </p>
+    <pre>
 public class AllIUsAreVisiblePolicy extends Policy {
-	public AllIUsAreVisiblePolicy() {
-		// XXX Use the pref-based repository manipulator
-		setRepositoryPreferencePageId(PreferenceConstants.PREF_PAGE_SITES);
-		
-		// XXX All available IU's should be shown, not just groups/features
-		setVisibleAvailableIUQuery(InstallableUnitQuery.ANY);
-		// XXX All installed IU's should be shown, not just the user-installed.
-		setVisibleInstalledIUQuery(InstallableUnitQuery.ANY);
-	}
+ public AllIUsAreVisiblePolicy() {
+  // XXX Use the pref-based repository manipulator
+  setRepositoryPreferencePageId(PreferenceConstants.PREF_PAGE_SITES);
+  
+  // XXX All available IU's should be shown, not just groups/features
+  setVisibleAvailableIUQuery(InstallableUnitQuery.ANY);
+  // XXX All installed IU's should be shown, not just the user-installed.
+  setVisibleInstalledIUQuery(InstallableUnitQuery.ANY);
+ }
 }
 </pre>
-<p>
-The queries that retrieve the visible available software, and the visible installed
-software, are set so that all Installable Units are shown.
-</p>
-<p>
-In this example, we use OSGi declarative services to register the policy.  Rather than manually register the 
-service when our example Activator starts, we instead declare the service in a <b>policy_component.xml</b> file.  
-Using declarative services is not necessary in this particular example, but could become necessary if we were to
-separate our p2 UI contributions into another bundle.  In that case, it becomes possible for p2 UI components that 
-use the policy (the preference page or installation pages) to be invoked before the bundle that configures the 
-policy starts.  Declarative services ensures that the policy is found and the bundle starts when the service is needed. 
-</p>
-<p>
-As mentioned previously, the Cloud example preferences may also be used to make everything visible in the UI.  
-This can be done by editing the <b>plugin_customization.ini</b> file in the example.
-</p>
+    <p>
+      The queries that retrieve the visible available software, and the visible
+      installed software, are set so that all Installable Units are shown.
+    </p>
+
+    <p>
+      In this example, we use OSGi declarative services to register the policy.
+      Rather than manually register the service when our example Activator
+      starts, we instead declare the service in a <b>policy_component.xml</b>
+      file. Using declarative services is not necessary in this particular
+      example, but could become necessary if we were to separate our p2 UI
+      contributions into another bundle. In that case, it becomes possible for
+      p2 UI components that use the policy (the preference page or installation
+      pages) to be invoked before the bundle that configures the policy starts.
+      Declarative services ensures that the policy is found and the bundle
+      starts when the service is needed.
+    </p>
+    <p>
+      As mentioned previously, the Cloud example preferences may also be used
+      to make everything visible in the UI. This can be done by editing the
+      <b>plugin_customization.ini</b> file in the example.
+    </p>
 
-<pre>
+    <pre>
 # show only groups (features) in the available list, not every bundle
 org.eclipse.equinox.p2.examples.rcp.cloud/showAllBundlesAvailable=true
 
 # show only the install roots in the installed software list
 org.eclipse.equinox.p2.examples.rcp.cloud/showAllBundlesInstalled=true
 </pre>
-<h3>Modifying the p2 UI Policy while reusing the p2 UI feature</h3>
-<p>
-Because the p2 UI Policy is defined as an OSGi service, products that ship with the <b>org.eclipse.equinox.p2.user.ui</b> feature 
-unmodified can still provide an alternate implementation of the UI Policy.  The <b>org.eclipse.equinox.p2.ui.sdk</b> bundle declares the 
-service with a default ranking value (0).  This means that the product must supply a policy implementation with a higher service ranking.  
-When the policy service is found, the highest ranking policy will win.  A sample file that declares a policy with a ranking of 1000 can be 
-found <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility/OSGI-INF/policy_component.xml?root=RT_Project&view=markup">here</a>.
-</p>
-</BODY>
-</HTML>
\ No newline at end of file
+    <h3>
+      Modifying the p2 UI Policy while reusing the p2 UI feature
+    </h3>
+    <p>
+      Because the p2 UI Policy is defined as an OSGi service, products that
+      ship with the <b>org.eclipse.equinox.p2.user.ui</b> feature unmodified
+      can still provide an alternate implementation of the UI Policy. The
+      <b>org.eclipse.equinox.p2.ui.sdk</b> bundle declares the service with a
+      default ranking value (0). This means that the product must supply a
+      policy implementation with a higher service ranking. When the policy
+      service is found, the highest ranking policy will win. A sample file that
+      declares a policy with a ranking of 1000 can be found <a href=
+      "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdkbundlevisibility/OSGI-INF/policy_component.xml?root=RT_Project&view=markup">
+      here</a>.
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uireuse.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uireuse.htm
index 83343df..47ca634 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uireuse.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/p2_uireuse.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -20,13 +20,13 @@ You may reuse the p2 UI in its entirety, or you may pick and choose which aspect
 <h3>Reusing the Eclipse SDK UI in its entirety</h3>
 <p>If your goal is to simply use the same update UI used in the SDK inside your RCP app, very few modifications are required. You'll 
 need to include the org.eclipse.equinox.p2.user.ui feature in your application.  This will add the following UI bundles to your 
-application (in addition to all of the p2 core and other required bundles):
+application (in addition to all of the p2 core and other required bundles):</p>
 <ul>
 <li>org.eclipse.equinox.p2.ui</li>
 <li>org.eclipse.equinox.p2.ui.sdk</li>
 <li>org.eclipse.equinox.p2.ui.sdk.scheduler</li>
 </ul>
-</p>
+
 <p>The contributions made in the <b>org.eclipse.equinox.p2.ui.sdk</b> assume that the application has defined a <b>Help</b> menu and
 an <b>additions</b> group for adding menu contributions.
 </p>
@@ -39,12 +39,12 @@ in CVS</a>.</p>
 <h3>Reusing the Eclipse SDK UI without automatic updating</h3>
 <p>
 If you want to use the SDK UI, but do not wish to add automatic update support, the application is modified as above.  
-However, the following bundles can be eliminated from the product:
+However, the following bundles can be eliminated from the product:</p>
 <ul>
 <li>org.eclipse.equinox.p2.ui.sdk.scheduler</li>
 <li>org.eclipse.equinox.p2.updatechecker</li>
 </ul>
-</p>
+
 <p>
 A sample RCP Mail application which shows how to do this can also be found 
 <a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/p2/examples/org.eclipse.equinox.p2.examples.rcp.sdknoautoupdates/?root=RT_Project">in CVS</a>.  
@@ -57,19 +57,21 @@ This allows you to simply rearrange the way users encounter the install/update f
 control of what can be done by the user.  For example, you may wish to expose a subset of functionality, such as 
 permitting updating, but not allowing the user to uninstall, install, or revert configurations.  
 </p>
-<p>The general approach for this kind of reuse is as follows:
+<p>The general approach for this kind of reuse is as follows:</p>
 <ul>
 <li>Decide which p2 UI bundles to include in your product</li>
+<li>
 <ul>
 <li>Always include <b>org.eclipse.equinox.p2.ui</b></li>
 <li>If you wish to use automatic update checking, include <b>org.eclipse.equinox.p2.updatechecker</b></li>
 <li>If you wish to reuse the SDK UI for automatic update checking (the same pref page, popup, etc.), then you can also include 
 <b>org.eclipse.equinox.p2.ui.sdk.scheduler</b></li>
 </ul>
+</li>
 <li>Your application must replace the functionality provided by <b>org.eclipse.equinox.p2.ui.sdk</b> according to what functionality 
 is needed. </li>
 </ul>
-</p>
+
 <p>
 Use the <b>org.eclipse.equinox.p2.ui.sdk</b> bundle as a model when determining which contributions to make.  For example, if you are exposing 
 user preferences, and you are including the SDK's automatic update support (and pref page), then you probably want the automatic 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/preferences_prefs_contribute.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/preferences_prefs_contribute.htm
index cbd20c0..9b4128a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/preferences_prefs_contribute.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/preferences_prefs_contribute.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Contributing a preference page
 </TITLE>
@@ -20,7 +20,7 @@ Contributing a preference page
   org.eclipse.ui.preferencePages</a></b> extension point allows you to contribute 
   pages to the general preferences
   
-  (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Preferences</b></a>)
   
   dialog. The preferences dialog presents a hierarchical list of user preference
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_configproduct.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_configproduct.htm
index b59f081..c48d762 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_configproduct.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_configproduct.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Customizing a product</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -24,7 +24,7 @@ Let's look at how some of the more common customizable elements are defined.</p>
 <p>The platform "about" dialog is shown whenever the user selects
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.aboutAction")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help > About</b></a>
 
 in the workbench menu.  </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_extension.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_extension.htm
index f038154..4d88f9f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_extension.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_extension.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Product extensions</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_open_file.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/product_open_file.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/rcp_browser.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/rcp_browser.htm
index ea9c717..d5b5477 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/rcp_browser.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/rcp_browser.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 The browser example
 </TITLE>
@@ -33,7 +33,7 @@ To run the RCP Browser example from within the Eclipse SDK: </p>
 <li>Choose
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.debug.ui.commands.OpenRunConfigurations")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Run > Run...</b></a>
 
 from the workbench menu bar and create a new "Run-time workbench" 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv.htm
index 691b881..4383eb8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -22,7 +22,11 @@ features, take a gander at some of these topics:
 </p>
 <ul>
   <li><a href="resAdv_natures.htm">Project natures</a></li>
-  <li><a href="resAdv_builders.htm">Incremental project builders</a></li>
+  <li><a href="resAdv_builders.htm">Incremental project builders</a>
+    <ul>
+      <li><a href="resAdv_buildconfigs.htm">Project Build Configurations</a></li>
+    </ul>
+  </li>
   <li><a href="resAdv_derived.htm">Derived resources</a></li>
   <li><a href="resAdv_saving.htm">Workspace save participation</a></li>
   <li><a href="resAdv_hooks.htm">Resource modification hooks</a></li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv_buildconfigs.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv_buildconfigs.htm
new file mode 100644
index 0000000..0c4127e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv_buildconfigs.htm
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
+<HEAD>
+
+<meta name="copyright" content="Copyright (c) Broadcom Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<TITLE>Project Build Configurations</TITLE>
+
+<link rel="stylesheet" type="text/css" HREF="../book.css">
+</HEAD>
+<BODY BGCOLOR="#ffffff">
+<H2>
+Project Build Configurations</H2>
+<P>
+The platform provides <b>Build Configurations</b> to allow integrations to build a project in multiple orthogonal ways.
+All the functionality provided to an <a href="resAdv_builders.htm">Incremental Project Builder</a> is provided per 
+Build Configuration.  
+</P>
+<p> Build configurations are very useful when a project's files can be built in more than one way.
+In statically compiled C/C++, for example, the preprocessor is used to re-write or conditionally compile a single source file to 
+multiple object files. Users can build a project in a 'debug' configuration: including asserts, debug information, etc; or in a 
+'release' configuration which is optimised at compile time.  When building these two (or more) configurations, the project builder
+needs to know which source files have changed since it was last invoked on the specific configuration.
+</p>
+<p>
+Build configurations provide a mechanism to represent the different variants of the build.  Build commands are run in the order defined
+on the Project, and the build resource delta is maintained between builds of the configuration.  Build configurations
+allow the Incremental Project Builder to build only what needs to be built (based on the delta) when the builder is invoked.
+</p>
+<p>
+Builders which don't care about build configurations work as before.
+</p>
+<p>
+Build Configurations are simply a tuple: (<i><a href="../reference/api/org/eclipse/core/resources/IBuildConfiguration.html#getProject()">project</a></i>, 
+<i><a href="../reference/api/org/eclipse/core/resources/IBuildConfiguration.html#getName()">build-config name</a></i>).  Names are domain/application specific strings.  They
+should be human-readable as they may be displayed by the UI, for example: "<i>Debug</i>".  Integrations should respect
+configurations created by other platform integrations.
+By default each project has one build configuration. 
+</p>
+<p>See 
+<a href="../reference/api/org/eclipse/core/resources/IBuildConfiguration.html">IBuildConfiguration</a> for more information.
+</p>
+<p>
+<b>API is provided:</b></p>
+<ul>
+<li> to create build configuration(s) on a Project</li>
+<li> set the active configuration on the Project </li>
+<li> to build particular build configuration(s)</li>
+<li> to create reference between build configurations</li>
+<li> for a builder to discover which build configuration is currently being built</li>
+</ul>
+<p>
+We distinguish between client API and builder API.</p> 
+
+<h3>Client API</h3>
+
+<h4>Creating and setting build configurations </h4>
+
+<p>
+Each project has one <i>default</i> build configuration with name equal to the empty string.  Build configurations are set on the
+Project description:
+</p>
+<pre>
+  <a href="../reference/api/org/eclipse/core/resources/IProject.html">IProject</a> project = ...
+  <a href="../reference/api/org/eclipse/core/resources/IProjectDescription.html">IProjectDescription</a> projDesc = project.getDescription();
+
+  // Get the build configurations for a project
+  <a href="../reference/api/org/eclipse/core/resources/IBuildConfiguration.html">IBuildConfiguration</a>[] buildConfigs = project.<a href="../reference/api/org/eclipse/core/resources/IProject.html#getBuildConfigs()">getBuildConfigs</a>();
+  
+  ... 
+  // Creating a build configuration
+  <a href="../reference/api/org/eclipse/core/resources/IWorkspace.html#newBuildConfig(java.lang.String, java.lang.String)">ResourcesPlugin().getWorkspace().newBuildConfig</a>(project.getName(), "myNewBuildConfig");
+  ...
+  // Set new build configurations on a project
+  projDesc.<a href="../reference/api/org/eclipse/core/resources/IProjectDescription.html#setBuildConfigs(java.lang.String[])">setBuildConfigs</a>(buildConfigs);
+
+  // Set the description
+  project.setDescription(projDesc, null);
+</pre>
+<p>
+As each project must have at least one build configuration, it's not possible to remove all configurations from a project.
+Doing so automatically re-adds the <i><a href="../reference/api/org/eclipse/core/resources/IBuildConfiguration.html#DEFAULT_CONFIG_NAME">default</a></i> build configuration, with name: "".
+</p>
+<h4>Active configuration</h4>
+<p>By default one configuration on the project is defined as '<b>active</b>'. The active configuration is the one that is built 
+when a build configurations isn't specified (e.g. when: <a href="../reference/api/org/eclipse/core/resources/IProject.html#build(int, org.eclipse.core.runtime.IProgressMonitor)">
+IProject#build(kind, monitor)</a> is called on the project).  To set the active build configuration:
+</p>
+
+<pre>
+   projDesc.<a href="../reference/api/org/eclipse/core/resources/IProjectDescription.html#setActiveBuildConfig(java.lang.String)">setActiveBuildConfig</a>(String buildConfigName);
+</pre>
+
+<h4> Creating references between build configurations </h4>
+<p>
+Build Configurations can reference each other. Much like project level references, this can be used to ensure that prerequisite build configurations
+are built before referencing build configurations.
+</p>
+
+<pre>
+  projDesc.<a href="../reference/api/org/eclipse/core/resources/IProjectDescription.html#setBuildConfigReferences(java.lang.String,%20org.eclipse.core.resources.IBuildConfiguration[])">setBuildConfigReferences</a>(String configName, IBuildConfiguration[] references);
+</pre>
+
+<p>causes the named build configuration to reference the passed in build configurations.</p>
+
+<p>
+<b>Note:</b> A referenced build configurations may have a <i>null</i> name.  Such references map to the <i>active</i> build configuration
+of the referenced project when the project is built.  Therefore a project level reference can be thought of as a build configuration reference to 
+the active build configuration.
+</p>
+
+
+<h4> Building Project Build Configurations </h4>
+
+New API exists on the workspace to allow building a build configuration and its references (if required):
+
+<pre>
+  ResourcesPlugin.getWorkspace().<a href="../reference/api/org/eclipse/core/resources/IWorkspace.html#build(org.eclipse.core.resources.IBuildConfiguration[],%20int,%20boolean,%20org.eclipse.core.runtime.IProgressMonitor)">build</a>(IBuildConfiguration[] buildConfigs, int kind, boolean buildReferences, IProgressMonitor monitor);
+</pre>
+
+API also exists on IProject to build a specific build configuration:
+
+<pre>
+  project.<a href="../reference/api/org/eclipse/core/resources/IProject.html#build(org.eclipse.core.resources.IBuildConfiguration,%20int,%20org.eclipse.core.runtime.IProgressMonitor)">build</a>(IBuildConfiguration config, int kind, IProgressMonitor monitor);
+</pre>
+
+<h3>Builder API</h3>
+
+<p> 
+From the point of view of an <a href="resAdv_builders.htm">Incremental Project Builder</a> the platform now builds build configurations,
+rather than projects.  In simple cases the build configuration will be the default configuration, and the project will only have one configuration.
+</p>
+
+<h4>Which build configuration is being built</h4>
+
+<p>A builder can discover which configuration is being built via:</p>
+<pre>
+  	protected IProject[] build(int kind, Map<String,String> args, IProgressMonitor monitor) throws CoreException {
+  	    IBuildConfiguration thisBuildConfig = <a href="../reference/api/org/eclipse/core/resources/IncrementalProjectBuilder.html#getBuildConfig()">getBuildConfig</a>();
+  	    ...
+  	}
+</pre>
+
+<p>
+Note builders needn't necessarily care about build configurations. IncrementalProjectBuilder#<a href="../reference/api/org/eclipse/core/resources/IncrementalProjectBuilder.html#getDelta(org.eclipse.core.resources.IProject)">getDelta</a>(IProject) will continue to return the resource changes since the builder 
+was last run for the current build configuration.
+</p>
+
+</BODY>
+</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv_builders.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv_builders.htm
index f145887..a3711f6 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv_builders.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/resAdv_builders.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -40,6 +40,9 @@ changes since the builder last built the project.  This delta is similar to the
 the next time an incremental build is performed on that project.  Cleaning a project removes build information
 such as problem markers and class files.
 </p>
+<p>Projects support multiple <a href="resAdv_buildconfigs.htm">build configurations</a> which allow Incremental 
+Project Builders to build a project in more than one way while providing a resource delta for each build configuration.
+</p>
 <p>Builders are best understood by example. The JDT Java compiler is driven by a Java incremental project builder 
 which recompiles the files in a project that are affected by changes. When a full build is triggered, (or an incremental
 build after a clean), all of the <b> .java</b> files in the project are compiled. Any compile problems encountered 
@@ -115,13 +118,17 @@ The <b> class</b> identified in the extension point must extend the platform cla
 Build processing begins with the <b> build()</b> method, which includes information about the kind of build that 
 has been requested.  The build is one of the following values:</p>
 <ul>
-<li><b>FULL_BUILD</b> indicates that all resources in the project should be built.</li>
+<li><b>FULL_BUILD</b> indicates that all resources in the project should be built. No delta is available.</li>
 <li><b>INCREMENTAL_BUILD</b> indicates that the build is incremental.</li>
 <li><b>AUTO_BUILD</b> indicates that an incremental build is being triggered automatically because a
 resource has changed and the autobuild feature is on.</li>
 </ul>
-<p>If an incremental build has been requested, a resource delta is provided to describe the changes in the 
-resources since the last build. The following snippet further refines the
+<p>If an incremental build or workspace auto-build have been requested, a resource delta is provided to describe the changes in the 
+resources since the last build.</p>
+<p><strong>NOTE:</strong> If no delta is available, the build kind will
+always be FULL_BUILD. See <a href="#advanced_build_kinds">Advanced Build Kinds</a> for more on build kinds.</p>
+
+<p>The following snippet further refines the
 <b> build() </b> method.
 </P>
 <pre>   protected IProject[] build(int kind, Map args, IProgressMonitor monitor
@@ -205,6 +212,35 @@ allows the user to force a rebuild from scratch on only certain projects.  Build
 this method to clean up any problem markers and <a href="resAdv_derived.htm">derived resources</a> in the project.
 </P>
 
+<h4>Build Locking</h4>
+
+<p>
+By default, builders run with the <a href="resAdv_batching.htm">Workspace Root scheduling rule</a>.  This prevents other threads from modifying the Eclipse
+workspace while the build is in progress.  Long running builders, or builders which do not care about concurrent changes
+in parts of the resource tree, may wish to allow modification while the build is in progress.
+A builder may relax the scheduling rule its run with by overriding the #getRule method:
+</p>
+
+<pre>
+  public ISchedulingRule <a href="../reference/api/org/eclipse/core/resources/IncrementalProjectBuilder.html#getRule(int, java.util.Map)">getRule</a>(int kind, Map<String,String> args) {
+    // Allow any resource to be modified concurrently with this buidler's invocation.
+    return null;
+  }
+</pre>
+
+<h4>Discovering what's being built</h4>
+
+It's sometimes useful for a builder to discover why its being built.  Builders have access to a build context by calling
+<pre>
+<a href="../reference/api/org/eclipse/core/resources/IBuildContext.html">IBuildContext</a> buildContext = <a href="../reference/api/org/eclipse/core/resources/IncrementalProjectBuilder.html#getContext()">getContext</a>();
+</pre>
+When building a project and its references, projects may be implicitly built if they are reachable 
+in the reference graph of the top-level project the user requested built.
+With this API a builder can discover which <a href="resAdv_buildconfigs.htm">build configurations</a> have been built before it 
+(<a href="../reference/api/org/eclipse/core/resources/IBuildContext.html#getAllReferencedBuildConfigs()">IBuildContext#getAllReferencedBuildConfigs()</a>), will be built after 
+it (<a href="../reference/api/org/eclipse/core/resources/IBuildContext.html#getAllReferencingBuildConfigs()">IBuildContext#getAllReferencingBuildConfigs()</a>), as well as 
+which build configurations the user asked to be built (<a href="../reference/api/org/eclipse/core/resources/IBuildContext.html#getRequestedConfigs()">IBuildContext#getRequestedConfigs()</a>).  
+
 <H3>
 Associating an incremental project builder with a project</H3>
 <P >
@@ -248,7 +284,63 @@ The following snippet adds a new builder as the first builder in the existing li
 Configuring a project's builder is done just once, usually as the project is being created.
 A common way to associate a builder with a project is by configuring a <a href="resAdv_natures.htm">project nature</a>.
 </P>
+<H3><a name="advanced_build_kinds">Advanced Build Kinds</a></H3>
+
+<h4>Triggers vs. Kinds</h4>
+<p>When a build is invoked on an IProject or IWorkspace, we call the passed in build kind the build <i>trigger</i>.
+This trigger is usually passed through to the IncrementalProjectBuilder as the build <i>kind</i> argument when IncrementalProjectBuilder#build
+is invoked.</p> 
+<p>The major exception to this is where no delta exists. In this case the build <i>trigger</i> is always promoted to <b>FULL_BUILD</b>.</p>
+
+The mapping between triggers and kinds looks like: 
+<table border="1">
+<tr>
+<th>Trigger</th>
+<th>Kind</th>
+</tr>
+<tr>
+<td>FULL_BUILD</td>
+<td>FULL_BUILD</td>
+</tr>
+<tr>
+<td>INCREMENTAL_BUILD</td>
+<td>INCREMENTAL_BUILD or FULL_BUILD</td>
+</tr>
+<tr>
+<td>AUTO_BUILD</td>
+<td>AUTO_BUILD or FULL_BUILD</td>
+</tr>
+<tr>
+<td>CLEAN_BUILD</td>
+<td>IncrementalProjectBuilder#clean(...)</td>
+</tr>
+</table>
+
+<h4>Ignoring Build Kinds</h4>
+
+<p>
+The platform provides API for configuring which build <i>kind</i>s a builder responds to.  If the builder is marked
+as 'isConfigurable' in its <a href="../reference/extension-points/org_eclipse_core_resources_builders.html">extension point</a> it can be configured at runtime to respond to, or ignore, certain build <i>triggers</i>.
+</p>
+
+For example a long running builder which doesn't want to be called during workspace AUTO_BUILD, can use:
+<pre>
+  <a href="../reference/api/org/eclipse/core/resources/ICommand.html">ICommand</a>#setBuilding(AUTO_BUILD, false);
+</pre>
+
+It is important to note that: 
+<ul>
+<li>
+if INCREMENTAL_BUILD (or AUTO_BUILD) is promoted to FULL_BUILD, a builder that responds to INCREMENTAL_BUILD (or AUTO_BUILD) will be called,
+</li><li>
+if INCREMENTAL_BUILD is promoted to FULL_BUILD, a builder that responds to FULL_BUILD will be called,
+</li><li>
+if AUTO_BUILD is promoted to FULL_BUILD, <strong>only</strong> builders that respond to AUTO_BUILD will be called. 
+This is to allow long running builders to ignore AUTO_BUILD requests completely.
+</li>
+</ul>
 
+<p>See <a href="../reference/api/org/eclipse/core/resources/ICommand.html">ICommand</a> for more information.</p>
 
 </BODY>
 </HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_app_model.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_app_model.htm
index bfe09d7..096dced 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_app_model.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_app_model.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -25,7 +25,7 @@ Runtime application model</H2>
   ApplicationHandle</a> OSGi service is registered to represent the instance of the running 
   application.  An ApplicationHandle service can be used to shutdown an application.
   See the <a href="http://www.osgi.org/javadoc/r4v42/org/osgi/service/application/package-summary.html">org.osgi.service.application</a>
-  package and the <a href="http://www.osgi.org/Download/Release4V41">OSGi R4.1 specification</a> for more
+  package and the <a href="http://www.osgi.org/Download/Release4V42">OSGi R4.2 specification</a> for more
   information.
 </p>
 <h3>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_model_bundles.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_model_bundles.htm
index 4632acb..df342a5 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_model_bundles.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/runtime_model_bundles.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -26,7 +26,7 @@ The <b><a href="../reference/api/org/eclipse/core/runtime/Plugin.html">Plugin</a
 is running in the platform.  It is a convenient place to centralize the life-cycle aspects and overall 
 semantics of a plug-in.  A plug-in can implement specialized functionality for the <b>start</b> and <b>stop</b>
 aspects of its life-cycle.  Each life-cycle method includes a reference to a  
-<b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleContext.html">BundleContext</a></b> which can supply
+<b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleContext.html">BundleContext</a></b> which can supply
 additional information.</p>
 <p>
 The <b>start</b> portion of the life-cycle is worth particular discussion.  We've seen already that information 
@@ -55,45 +55,45 @@ in the start-up code.  This ensures that large data structures are not built unt
 <h4>Bundle Context</h4>
 <p>
 Life-cycle management is where the OSGi "bundle" terminology and the platform's 
-"plug-in" terminology meet.  When your plug-in is started, it is given a reference to a <b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleContext.html">
+"plug-in" terminology meet.  When your plug-in is started, it is given a reference to a <b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleContext.html">
 BundleContext</a></b> from which it can obtain information related to the plug-in.  The
-<b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleContext.html">BundleContext</a></b>
+<b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleContext.html">BundleContext</a></b>
 can also be used to find out about other bundles/plug-ins in the system.  
 </p>
 <p>
 <b>BundleContext.getBundles()</b> can be used to obtain an array of all bundles in the system.  Listeners for
 <b>BundleEvent</b> can be registered so that your plug-in is aware when another bundle has a change
 in its life-cycle status.  See the javadoc for 
-<b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleContext.html">BundleContext</a></b> and
-<b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleEvent.html">BundleEvent</a></b> for more information.
+<b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleContext.html">BundleContext</a></b> and
+<b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleEvent.html">BundleEvent</a></b> for more information.
 </p>
 <blockquote><i>
 Prior to 3.0, a plug-in registry (<b>IPluginRegistry</b>) was provided to supply similar information.  For example,
 it could be queried for the plug-in descriptors of all plug-ins in the system.  This registry is now deprecated and
-<b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleContext.html">BundleContext</a></b> should be
+<b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleContext.html">BundleContext</a></b> should be
 used for this purpose.  The platform registry is now used exclusively for information about extensions 
 and extension points.
 </i></blockquote>
 <h4>Bundle Activator</h4>
 <p>
-The <b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleActivator.html">BundleActivator</a></b> interface defines
+The <b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleActivator.html">BundleActivator</a></b> interface defines
 the start and stop behavior implemented in 
 <b><a href="../reference/api/org/eclipse/core/runtime/Plugin.html">Plugin</a></b>.  Although the
 <b><a href="../reference/api/org/eclipse/core/runtime/Plugin.html">Plugin</a></b> class is a convenient place
 to implement this function, a plug-in developer has complete freedom to implement the interface for
-<b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleActivator.html">BundleActivator</a></b> in any class
+<b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleActivator.html">BundleActivator</a></b> in any class
 appropriate for the plug-in's design.  In fact, your plug-in need not implement this interface at all if it
 does not have specific life-cycle management needs.  </p>
 <h4>Bundles</h4>
 <p>
 Underneath every plug-in lies an OSGi bundle managed by the framework.
-The <b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/Bundle.html">Bundle</a></b> is the OSGi unit of modularity.  Fundamentally, a 
+The <b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/Bundle.html">Bundle</a></b> is the OSGi unit of modularity.  Fundamentally, a 
 bundle is just a collection of files (resources and code) installed in the 
 platform.  Each bundle has its own Java
 class loader, and includes protocol for starting, stopping, and uninstalling itself.  From the Eclipse platform 
-point of view, <b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/Bundle.html">Bundle</a></b> is merely an implementation 
+point of view, <b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/Bundle.html">Bundle</a></b> is merely an implementation 
 class.   Plug-in developers do not extend the bundle class, but use <b><a href="../reference/api/org/eclipse/core/runtime/Plugin.html">Plugin</a></b>
-or other <b><a href="http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleActivator.html">BundleActivator</a></b> implementations
+or other <b><a href="http://www.osgi.org/javadoc/r4v43/org/osgi/framework/BundleActivator.html">BundleActivator</a></b> implementations
 to represent the plug-in.</p>
 
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_architecture.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_architecture.htm
index 27e6b5c..7155630 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_architecture.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_architecture.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -25,9 +25,9 @@ Secure storage is represented as a tree of nodes. Nodes provide context. For ins
 <i>"com.abc"</i> could use the node <i>"abc"</i> under the node <i>"com"</i> under 
 the root node. As in Preference's, the path to such node can be described as <i>"/com/abc"</i>.</p>
 
-<p align=center><img alt="Logical organization of data in secure storage" src="images/equinox_secure_storage_data.png">
+<p align="center"><img alt="Logical organization of data in secure storage" src="images/equinox_secure_storage_data.png">
 </p>
-<p align=center><b>Picture 1. How the data is organized.</b></p>
+<p align="center"><b>Picture 1. How the data is organized.</b></p>
 
 <p>The data is stored under the node as a key-value pair. The data can be stored in an encrypted form or as 
 a clear text. The ability to store clear-text data is provided so that logically related information (such as 
@@ -56,9 +56,9 @@ programmatically by calling
 <p>On the back end, secure storage can be thought of as a keyring. Each entry is associated with a password 
 provider; only this password provider can be used in the future to decrypt the entry.</p> 
 
-<p align=center><img alt="Secure storage entries and password providers" src="images/equinox_secure_storage_prov.png">
+<p align="center"><img alt="Secure storage entries and password providers" src="images/equinox_secure_storage_prov.png">
 </p>
-<p align=center><b>Picture 2. Relationship between entries and password providers.</b></p>
+<p align="center"><b>Picture 2. Relationship between entries and password providers.</b></p>
 
 <p>Secure storage has provisions to obtain the master password from various sources described by 
 password providers. Even more importantly for developers, the set of password providers is open and 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_dev.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_dev.htm
index bd3a5c8..4394597 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_dev.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_dev.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -51,7 +51,7 @@ a few minor differences. One of the differences is that many methods use
 
 <p>The contents of the default secure storage can be seen in the 
    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.security.ui.storage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Security > Secure Storage</strong></a> 
 preferences page. To enable modifications of the contents of secure storage, enable debug options of 
 the <b>org.eclipse.equinox.security.ui</b> bundle. Enabling debug options will add context menus to the preferences 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_providers.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_providers.htm
index 648eb31..404c2ab 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_providers.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/secure_storage_providers.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -38,7 +38,7 @@ The extension must specify an ID; the qualified ID of the extension will be used
 module and must not be changed between releases. The optional name and description of the password provider 
 show up in the 
    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.security.ui.storage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Security > Secure Storage</strong></a> 
 preferences page and are visible to the end user.</p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/swt_widgets_events.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/swt_widgets_events.htm
index 7eeb468..871bb0b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/swt_widgets_events.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/swt_widgets_events.htm
@@ -109,6 +109,11 @@ example, by hitting Enter or double clicking on a row in a Table.</td>
 <td>An item in a Tree is expanded or collapsed.</td>
 </TR>
 
+<tr>
+<td><strong>Gesture</strong></td>
+<td>The user has used a touch-based input source to perform a gesture over the control.</td>
+</tr>
+
 <TR>
 <td><strong>Help</strong></td>
 <td>The user has requested help for a widget.  For example, this occurs when
@@ -256,6 +261,11 @@ control.</td>
 <td><strong>Paint</strong></td>
 <td>The control has been damaged and requires repainting.</td>
 </TR>
+
+<TR>
+<td><strong>Touch</strong></td>
+<td>The user has touched a touch-based input source over the control.</td>
+</TR>
 </table>
 
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_howto.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_howto.htm
index a045f62..a314c93 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_howto.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_howto.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
   <meta content="text/html; charset=ISO-8859-1"
  http-equiv="Content-Type">
@@ -157,7 +157,7 @@ you can allow associated changes in the repository.</td>
 hooks</a> to prevent or enhance moving and deleting of resources.</li>
         <li>See <a
  href="../reference/api/org/eclipse/core/resources/team/IMoveDeleteHook.html"><b>IMoveDeleteHook</b></a>
-          <b> </b>for more detail about what you can do.</li>
+          for more detail about what you can do.</li>
       </ul>
       </td>
     </tr>
@@ -172,7 +172,7 @@ rule factory </a> to ensure that the proper rules are obtained for
 resource operations.</li>
         <li>See <a
  href="../reference/api/org/eclipse/core/resources/team/ResourceRuleFactory.html"><b>ResourceRuleFactory</b></a>
-          <b> </b>for more details.</li>
+          for more details.</li>
       </ul>
       </td>
     </tr>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_synchronize_localhistory_example.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_synchronize_localhistory_example.htm
index 9f98ffb..b5b921b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_synchronize_localhistory_example.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/team_synchronize_localhistory_example.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta content="text/html; charset=ISO-8859-1"
  http-equiv="Content-Type">
@@ -105,7 +105,7 @@ public class LocalHistoryVariantComparator implements IResourceVariantComparator
  
 <p>Because we know that the existence of the local history state implies that 
   it is different from the local, we can simply return <strong>false</strong> 
-  when comparing the file to it's local history state. Also, synchronization with 
+  when comparing the file to its local history state. Also, synchronization with 
   the local history is only two-way because we don't have access to a base resource 
   so the method for comparing two resource variants is not used.</p>
 <p> Note that the synchronize calculation won't call the compare method of the 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua.htm
index d7e2325..5890646 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>User assistance support</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet.htm
index 386a47b..6f98839 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Cheat sheets</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite.htm
index 8176b99..d8e0ddf 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite.htm
@@ -1,149 +1,239 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<title>Composite cheat sheets</title>
-</head>
-<body>
-
-<h2>Composite cheat sheets</h2>
-
-<p>
-<a href="../../org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm">
-Composite cheat sheets</a> provide guidance through complex problems by breaking 
-the problem into a set of smaller tasks. Composite cheat sheets are registered 
-using the  the <b>
-<a href="../reference/extension-points/org_eclipse_ui_cheatsheets_cheatSheetContent.html">
-org.eclipse.ui.cheatsheets.cheatSheetContent</a></b> extension point. </p>
-<h3>Content file format</h3>
-<p>The composite cheat sheet content itself is defined in a separate file which 
-conforms to the  <a href="ua_cheatsheet_composite_content.htm">composite cheat sheet 
-content file specification</a>. The content file is  an XML file and 
-consists of  a set of tasks organized in groups into a tree structure. </p>
-<p><compositeCheatsheet> is the root element of a composite cheat sheet. It will 
-have a single root task which may be a <task> or <taskGroup>. <taskGroup> 
-elements may have one or more children each of which can be a <task> or <taskGroup>. 
-A <task> does not have child tasks.</p>
-<p>Tasks and task groups may contain <intro> elements which contain the text to 
-be displayed before the task has been started and <onCompletion> elements which 
-contain the text to be displayed once the task is completed. Both the <intro> 
-and <onCompletion> elements may contain form text markup, in the example below 
-the tags <b> and </b> are used to make text bold.</p>
-<p>Tasks may also contain <param> elements. A cheat sheet task may have any 
-of the following parameters: "id" is the id of a registered cheatsheet, "path" 
-is the relative path or URL of the cheat sheet content file and "skipIntro" is  
-a boolean parameter which if true causes  the cheat sheet to start at the 
-first step rather than at the introduction. Either "id" or "path" but not both 
-must be specified.</p>
-<p>A <dependency> node from task "B" to task "A" represents a requirement that 
-task A is completed before task B can be started.</p>
-<h3>Cheat sheet task parameters</h3>
-<p>If a task has kind = "cheatsheet" a cheat sheet will be opened when that task 
-is started, There are three possible parameters to a cheat sheet task.</p>
-<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
-  <tr>
-    <td width="10%">Parameter name</td>
-    <td width="29%"> Description</td>
-  </tr>
-  <tr>
-    <td width="10%">id</td>
-    <td width="29%">The id of a cheat sheet which has been registered using the 
-    extension point org.eclipse.ui.cheatsheets.cheatSheetContent. This 
-    identifies the cheatsheet which will be associated with this task. Either 
-    the id or the path parameter (but not both) should be specified.</td>
-  </tr>
-  <tr>
-    <td width="10%">path</td>
-    <td width="29%">The URL of a cheat sheet content file. This may be an 
-    absolute URL, or relative to the content file for the composite cheat sheet. 
-    If both id and path are specified the path will be used to locate the 
-    content file and the id parameter will be ignored.</td>
-  </tr>
-  <tr>
-    <td width="10%">showIntro</td>
-    <td width="29%">A boolean parameter with default value of true. If "false" 
-    the cheat sheet when started will initially show the first step rather than 
-    the introduction..</td>
-  </tr>
-</table>
-<h3>Example of a composite cheat sheet</h3>
-<p>The file below is an example of how to create a composite cheat sheet from 
-existing cheat sheets. It shows how to create task groups and make tasks skippable.</p>
-<pre><?xml version="1.0" encoding="UTF-8"?>
-<compositeCheatsheet name="Composite cheat sheet example">
-    <taskGroup name= "Composite cheat sheet example">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <title>
+      Composite cheat sheets
+    </title>
+
+    <style type="text/css">
+/*<![CDATA[*/
+    table.c1 {border-collapse: collapse}
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h2>
+      Composite cheat sheets
+    </h2>
+    <p>
+      <a href=
+      "../../org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm">
+      Composite cheat sheets</a> provide guidance through complex problems by
+      breaking the problem into a set of smaller tasks. Composite cheat sheets
+      are registered using the  the <b><a href=
+      "../reference/extension-points/org_eclipse_ui_cheatsheets_cheatSheetContent.html">
+
+      org.eclipse.ui.cheatsheets.cheatSheetContent</a></b> extension point.
+    </p>
+    <h3>
+      Content file format
+    </h3>
+    <p>
+      The composite cheat sheet content itself is defined in a separate file
+      which conforms to the  <a href=
+      "ua_cheatsheet_composite_content.htm">composite cheat sheet content file
+      specification</a>. The content file is  an XML file and consists
+      of  a set of tasks organized in groups into a tree structure.
+    </p>
+
+    <p>
+      <compositeCheatsheet> is the root element of a composite cheat
+      sheet. It will have a single root task which may be a <task> or
+      <taskGroup>. <taskGroup> elements may have one or more
+      children each of which can be a <task> or <taskGroup>. A
+      <task> does not have child tasks.
+    </p>
+
+    <p>
+      Tasks and task groups may contain <intro> elements which contain
+      the text to be displayed before the task has been started and
+      <onCompletion> elements which contain the text to be displayed once
+      the task is completed. Both the <intro> and <onCompletion>
+      elements may contain form text markup, in the example below the tags
+      <b> and </b> are used to make text bold.
+    </p>
+
+    <p>
+      Tasks may also contain <param> elements. A cheat sheet task may
+      have any of the following parameters: "id" is the id of a registered
+      cheatsheet, "path" is the relative path or URL of the cheat sheet content
+      file and "skipIntro" is  a boolean parameter which if true
+      causes  the cheat sheet to start at the first step rather than at
+      the introduction. Either "id" or "path" but not both must be specified.
+    </p>
+    <p>
+      A <dependency> node from task "B" to task "A" represents a
+      requirement that task A is completed before task B can be started.
+    </p>
+
+    <h3>
+      Cheat sheet task parameters
+    </h3>
+    <p>
+      If a task has kind = "cheatsheet" a cheat sheet will be opened when that
+      task is started, There are three possible parameters to a cheat sheet
+      task.
+    </p>
+    <table border="1" cellpadding="0" cellspacing="0" class="c1">
+      <tr>
+        <td width="10%">
+          Parameter name
+        </td>
+
+        <td width="29%">
+           Description
+        </td>
+      </tr>
+      <tr>
+        <td width="10%">
+          id
+        </td>
+        <td width="29%">
+          The id of a cheat sheet which has been registered using the extension
+          point org.eclipse.ui.cheatsheets.cheatSheetContent. This identifies
+          the cheatsheet which will be associated with this task. Either the id
+          or the path parameter (but not both) should be specified.
+        </td>
+
+      </tr>
+      <tr>
+        <td width="10%">
+          path
+        </td>
+        <td width="29%">
+          The URL of a cheat sheet content file. This may be an absolute URL,
+          or relative to the content file for the composite cheat sheet. If
+          both id and path are specified the path will be used to locate the
+          content file and the id parameter will be ignored.
+        </td>
+      </tr>
+      <tr>
+
+        <td width="10%">
+          showIntro
+        </td>
+        <td width="29%">
+          A boolean parameter with default value of true. If "false" the cheat
+          sheet when started will initially show the first step rather than the
+          introduction..
+        </td>
+      </tr>
+    </table>
+    <h3>
+      Example of a composite cheat sheet
+    </h3>
+
+    <p>
+      The file below is an example of how to create a composite cheat sheet
+      from existing cheat sheets. It shows how to create task groups and make
+      tasks skippable.
+    </p>
+    <pre>
+<?xml version="1.0" encoding="UTF-8"?>
+<compositeCheatsheet name="Composite cheat sheet example">
+    <taskGroup name= "Composite cheat sheet example">
          <intro> This is an example of a <b>composite cheat sheet</b> built from existing cheat sheets.
                  <br/><br/>You can select a task to work on either by following the hyperlinks or by
                  selecting a task in the tree. 
          </intro>  
          <onCompletion>Congratulations you have completed all the tasks.</onCompletion>             
-         <task kind="cheatsheet" name= "Branching and merging using CVS" skip="true">
-              <param name = "id" value = "org.eclipse.platform.cvs_1" />
+         <task kind="cheatsheet" name= "Branching and merging using CVS" skip="true">
+
+              <param name = "id" value = "org.eclipse.platform.cvs_1" />
               <intro>This cheat sheet is intended for CVS users. If you are not using CVS or do
               not intend to branch and merge you may skip this task.
               </intro>
                <onCompletion>Congratulations you now know how to branch and merge.</onCompletion>                  
          </task>
-         <taskGroup name= "Create Java Projects" kind = "sequence">
+         <taskGroup name= "Create Java Projects" kind = "sequence">
+
              <intro> First you will learn how to create a simple java project, then you will create 
              an java project which uses SWT. 
              <br/><br/>This task group is a sequence which means that
-             if you click on the subtask "Standalone SWT Application" it will not let that task be started 
-             until "Create a java project" has been completed.
+             if you click on the subtask "Standalone SWT Application" it will not let that task be started 
+             until "Create a java project" has been completed.
              </intro>
               <onCompletion>Congratulations you have built both Java applications.</onCompletion>
-             <task kind="cheatsheet" name= "Create a java project" id = "createJavaProject">
-                 <param name="id" value = "org.eclipse.jdt.helloworld"/>
-                 <param name="showIntro" value = "false"/>
+             <task kind="cheatsheet" name= "Create a java project" id = "createJavaProject">
+
+                 <param name="id" value = "org.eclipse.jdt.helloworld"/>
+                 <param name="showIntro" value = "false"/>
                  <intro>This cheat sheet walks through the process of creating a simple hello world application. 
                         The cheat sheet can launch wizards to create a new project and a new class. 
                  </intro>
                  <onCompletion>Congratulations you have succeeded in creating a hello world application</onCompletion>
              </task>
-             <task kind="cheatsheet" name= "Standalone SWT Application">
+
+             <task kind="cheatsheet" name= "Standalone SWT Application">
                  <intro>Eclipse plugins which contribute to the user interface use The Standard Widget Toolkit (SWT). 
                     This task guide can be used to learn more about SWT. 
                  </intro>
-                 <param name = "id" value = "org.eclipse.jdt.helloworld.swt" />
+                 <param name = "id" value = "org.eclipse.jdt.helloworld.swt" />
                   <onCompletion>Congratulations you have succeeded in creating an SWT application.</onCompletion>           
              </task>      
          </taskGroup>
+
     </taskGroup>
-</compositeCheatsheet></pre>
-<h3>Composite Cheat Sheet Extensibility - Provisional in Eclipse 3.2</h3>
-<p>Composite cheat sheets are extensible, however in Eclipse 3.2 this 
-extensibility is provisional and the classes could change before they become 
-API. Composite cheat sheet support can be extended by using the extension point 
-org.eclipse.ui.cheatsheets.cheatSheetContent which has two new elements 
-taskEditor and taskExplorer which allow for contribution of task editors and 
-task explorers.</p>
-<p>Contributing a task editor defines a new kind of task which displays in the 
-task detail section. To contribute a task editor implement a concrete subclass 
-of  TaskEditor, then  add a taskEditor element to plugin.xml.</p>
-<p>The representation of the task explorer is also configurable with an 
-extension point,  a tree explorer  is included with the Eclipse platform. By 
-default the explorer for a composite cheat sheet when first opened is a tree, an 
-attribute on the <compositeCheatSheet> element will allow that default to be 
-overridden. If more than one explorer is registered the view menu will contain a 
-menu item to switch between explorers. To contribute a task explorer first 
-implement a concrete subclass of  TaskExplorer, then  add a taskExplorer element 
-to plugin.xml.</p>
-
-<h3>Related links</h3>
-<p>
-<a href="../../org.eclipse.platform.doc.user/reference/ref-cheatsheets.htm">Working with cheat sheets</a><br>
-<a href="../../org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm">Working with composite cheat sheets</a><br>
-<a href="ua_cheatsheet_simple.htm">Creating cheat sheets</a><br>
-<a href="ua_cheatsheet_guidelines.htm">Authoring guidelines</a><br>
-<a href="ua_cheatsheet_composite_content.htm">Composite cheat 
-sheet content file specification</a><br>
-<a href="../reference/extension-points/org_eclipse_ui_cheatsheets_cheatSheetContent.html">
-org.eclipse.ui.cheatsheets.cheatSheetContent extension point</a><br>
-</p>
-
-</body>
-</html>
\ No newline at end of file
+</compositeCheatsheet>
+</pre>
+    <h3>
+      Composite Cheat Sheet Extensibility - Provisional in Eclipse 3.2
+    </h3>
+    <p>
+      Composite cheat sheets are extensible, however in Eclipse 3.2 this
+      extensibility is provisional and the classes could change before they
+      become API. Composite cheat sheet support can be extended by using the
+      extension point org.eclipse.ui.cheatsheets.cheatSheetContent which has
+      two new elements taskEditor and taskExplorer which allow for contribution
+      of task editors and task explorers.
+    </p>
+    <p>
+
+      Contributing a task editor defines a new kind of task which displays in
+      the task detail section. To contribute a task editor implement a concrete
+      subclass of  TaskEditor, then  add a taskEditor element to
+      plugin.xml.
+    </p>
+    <p>
+      The representation of the task explorer is also configurable with an
+      extension point,  a tree explorer  is included with the Eclipse
+      platform. By default the explorer for a composite cheat sheet when first
+      opened is a tree, an attribute on the <compositeCheatSheet> element
+      will allow that default to be overridden. If more than one explorer is
+      registered the view menu will contain a menu item to switch between
+      explorers. To contribute a task explorer first implement a concrete
+      subclass of  TaskExplorer, then  add a taskExplorer element to
+      plugin.xml.
+    </p>
+
+    <h3>
+      Related links
+    </h3>
+    <p>
+      <a href=
+      "../../org.eclipse.platform.doc.user/reference/ref-cheatsheets.htm">Working
+      with cheat sheets</a><br />
+      <a href=
+      "../../org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm">
+      Working with composite cheat sheets</a><br />
+      <a href="ua_cheatsheet_simple.htm">Creating cheat sheets</a><br />
+
+      <a href="ua_cheatsheet_guidelines.htm">Authoring guidelines</a><br />
+      <a href="ua_cheatsheet_composite_content.htm">Composite cheat sheet
+      content file specification</a><br />
+      <a href=
+      "../reference/extension-points/org_eclipse_ui_cheatsheets_cheatSheetContent.html">
+      org.eclipse.ui.cheatsheets.cheatSheetContent extension point</a><br />
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite_content.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite_content.htm
index c6c28a6..79d9be1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite_content.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_composite_content.htm
@@ -1,87 +1,81 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<link rel="stylesheet" href="../schema.css" charset="utf-8" type="text/css">
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Composite cheat sheet content file XML format</title>
 </head>
 <body>
 
 <h3>Composite cheat sheet content file XML format</h3>
 
-<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.ui.cheatsheets.composite_schema<p></p>
-<h6 class=CaptionFigColumn id=header>Since: </h6>3.2
-<p></p>
+<h6 class="CaptionFigColumn">Identifier: </h6>org.eclipse.ui.cheatsheets.composite_schema
+<h6 class="CaptionFigColumn">Since: </h6>3.2
 
-<h6 class=CaptionFigColumn id=header>Description: </h6><p>The schema definition for a composite cheat sheet content file. A composite cheat sheet consists of a set of tasks organized into task groups. Each task can be a simple cheat sheet or a user contributed task kind.</p>
-<h6 class=CaptionFigColumn id=header>Configuration Markup:</h6>
-<p class=code id=dtd><!ELEMENT <a name="e.compositeCheatsheet">compositeCheatsheet</a> (<a href="#e.taskGroup">taskGroup</a> | <a href="#e.task">task</a>)></p>
-<p class=code id=dtd><!ATTLIST compositeCheatsheet</p>
-<p class=code id=dtdAttlist>name CDATA #REQUIRED></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
+<h6 class="CaptionFigColumn">Description: </h6><p>The schema definition for a composite cheat sheet content file. A composite cheat sheet consists of a set of tasks organized into task groups. Each task can be a simple cheat sheet or a user contributed task kind.</p>
+<h6 class="CaptionFigColumn">Configuration Markup:</h6>
+<p class="SchemaDtd"><!ELEMENT <a name="e.compositeCheatsheet">compositeCheatsheet</a> (<a href="#e.taskGroup">taskGroup</a> | <a href="#e.task">task</a>)></p>
+<p class="SchemaDtd"><!ATTLIST compositeCheatsheet</p>
+<p class="SchemaDtdAttlist">name CDATA #REQUIRED></p>
+<p class="ConfigMarkupElementDesc">
 The root element of a composite cheatsheet</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>name</b> - The name of the composite cheat sheet which will be displayed in large font when the composite cheat sheet is opened.</li>
 </ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.taskGroup">taskGroup</a> ((<a href="#e.task">task</a> | <a href="#e.taskGroup">taskGroup</a>) , <a href="#e.intro">intro</a>? , <a href="#e.onCompletion">onCompletion</a>? , <a href="#e.dependency">dependency</a>*)></p>
-<p class=code id=dtd><!ATTLIST taskGroup</p>
-<p class=code id=dtdAttlist>kind CDATA "set"</p><p class=code id=dtdAttlist>name CDATA #REQUIRED</p><p class=code id=dtdAttlist>id   CDATA #IMPLIED</p><p class=code id=dtdAttlist>skip (true | false) "false"></p>
-<p class=ConfigMarkup id=elementDesc>
+<br><p class="SchemaDtd"><!ELEMENT <a name="e.taskGroup">taskGroup</a> ((<a href="#e.task">task</a> | <a href="#e.taskGroup">taskGroup</a>) , <a href="#e.intro">intro</a>? , <a href="#e.onCompletion">onCompletion</a>? , <a href="#e.dependency">dependency</a>*)></p>
+<p class="SchemaDtd"><!ATTLIST taskGroup</p>
+<p class="SchemaDtdAttlist">kind CDATA "set"</p><p class="SchemaDtdAttlist">name CDATA #REQUIRED</p><p class="SchemaDtdAttlist">id   CDATA #IMPLIED</p><p class="SchemaDtdAttlist">skip (true | false) "false"></p>
+<p class="ConfigMarkupElementDesc">
 A task group represents a collection of related tasks. If the kind is "choice" only one of the child tasks need to be completed. If the kind is "set" or "sequence" all children must be completed.</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>kind</b> - The kind of this task group which can be "set", "sequence" or "choice". If the kind is set or sequence this task group is complete when all of its child tasks/task groups have been completed. In addition the subtasks of a sequence must be completed in order. A choice is complete when any of its subtasks has been completed.</li>
 <li><b>name</b> - The name of this task group which will be displayed in the task explorer.</li>
 <li><b>id</b> - An id for this task group which is required if this task group is referenced by a dependency element.</li>
 <li><b>skip</b> - If true this group of tasks may be skipped.</li>
 </ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.task">task</a> (<a href="#e.intro">intro</a>? , <a href="#e.onCompletion">onCompletion</a>? , <a href="#e.param">param</a>* , <a href="#e.dependency">dependency</a>*)></p>
-<p class=code id=dtd><!ATTLIST task</p>
-<p class=code id=dtdAttlist>kind CDATA #REQUIRED</p><p class=code id=dtdAttlist>name CDATA #REQUIRED</p><p class=code id=dtdAttlist>id   CDATA #IMPLIED</p><p class=code id=dtdAttlist>skip (true | false) "false"></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
+<br><p class="SchemaDtd"><!ELEMENT <a name="e.task">task</a> (<a href="#e.intro">intro</a>? , <a href="#e.onCompletion">onCompletion</a>? , <a href="#e.param">param</a>* , <a href="#e.dependency">dependency</a>*)></p>
+<p class="SchemaDtd"><!ATTLIST task</p>
+<p class="SchemaDtdAttlist">kind CDATA #REQUIRED</p><p class="SchemaDtdAttlist">name CDATA #REQUIRED</p><p class="SchemaDtdAttlist">id   CDATA #IMPLIED</p><p class="SchemaDtdAttlist">skip (true | false) "false"></p>
+<p class="ConfigMarkupElementDesc">
 A leaf task within a composite cheat sheet. A task does not have children, but it does have a task editor which shows in the lower/right hand pane of the cheat sheet view. The task kind determines which task editor will be opened, a task kind of "cheatsheet" represents a simple cheatsheet. Other task kinds may be contributed.</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>kind</b> - The task kind. A task kind of "cheatsheet" represents a simple cheatsheet, other task kinds can be contributed using the extension point org.eclipse.ui.cheatsheets.cheatSheetContent.</li>
 <li><b>name</b> - The name of this task which will be displayed in the task explorer.</li>
 <li><b>id</b> - An id for this task group which is required if this task group is referenced by a dependency element.</li>
 <li><b>skip</b> - If true this task may be skipped.</li>
 </ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.param">param</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST param</p>
-<p class=code id=dtdAttlist>name  CDATA #REQUIRED</p><p class=code id=dtdAttlist>value CDATA #REQUIRED></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
+<br><p class="SchemaDtd"><!ELEMENT <a name="e.param">param</a> EMPTY></p>
+<p class="SchemaDtd"><!ATTLIST param</p>
+<p class="SchemaDtdAttlist">name  CDATA #REQUIRED</p><p class="SchemaDtdAttlist">value CDATA #REQUIRED></p>
+<p class="ConfigMarkupElementDesc">
 A parameter to a task within a composite cheatsheet. Each parameter has a name and value, both of which are strings. A task may have any number of parameters, two parameters for a single task may not share the same name.</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>name</b> - The name of this parameter.</li>
 <li><b>value</b> - The value of this parameter.</li>
 </ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.intro">intro</a> (#PCDATA)></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
+<br><p class="SchemaDtd"><!ELEMENT <a name="e.intro">intro</a> (#PCDATA)></p>
+<p class="ConfigMarkupElementDesc">
 Contains the text which will be displayed before this task has been started. May contain form text markup.</p>
 <br><br>
-<p class=code id=dtd><!ELEMENT <a name="e.onCompletion">onCompletion</a> (#PCDATA)></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
+<p class="SchemaDtd"><!ELEMENT <a name="e.onCompletion">onCompletion</a> (#PCDATA)></p>
+<p class="ConfigMarkupElementDesc">
 Contains the text which will be displayed in the completion panel for this task. May contain form text markup.</p>
 <br><br>
-<p class=code id=dtd><!ELEMENT <a name="e.dependency">dependency</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST dependency</p>
-<p class=code id=dtdAttlist>task CDATA #REQUIRED></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
+<p class="SchemaDtd"><!ELEMENT <a name="e.dependency">dependency</a> EMPTY></p>
+<p class="SchemaDtd"><!ATTLIST dependency</p>
+<p class="SchemaDtdAttlist">task CDATA #REQUIRED></p>
+<p class="ConfigMarkupElementDesc">
 Creates a dependency between two tasks or subtasks.</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>task</b> - The id of the task or task group which must be completed before this task can be started.</li>
 </ul>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_guidelines.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_guidelines.htm
index 472933d..2763f75 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_guidelines.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_guidelines.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Cheat sheet authoring guidelines</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_simple.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_simple.htm
index c2a22b4..4b53072 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_simple.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_cheatsheet_simple.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Simple cheat sheets</title>
 </head>
 <body>
@@ -18,7 +18,7 @@ an overall goal.  For example, a cheat sheet could be used to help guide the use
 create, compile, and run a simple Java program.  Cheat sheets are launched from the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help > Cheat Sheets...</b></a>
 
 menu item.  Cheat sheets can also be launched from an intro page.  
@@ -46,7 +46,7 @@ Much like other workbench contributions, a name, description, and id can be spec
 sheet.  The name and description are shown when the user accesses the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help > Cheat Sheets...</b></a>
 
 list.  A category for the cheat sheet can also be defined if you want 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic.htm
index 94ed1ea..5c1c1a4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic.htm
@@ -5,7 +5,7 @@
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Dynamic content</title>
 
 <style type="text/css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_extensions.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_extensions.htm
index 49923d3..483f336 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_extensions.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_extensions.htm
@@ -1,142 +1,166 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<title>Content extensions</title>
-</head>
-<body>
-
-<h2>Content extensions</h2>
-
-<p>
-A content extension is either a contribution of content into a known anchor (similar to an
-extension into an extension point), or the replacement of an existing element in a document. 
-</p>
-
-<h3>Contributing into anchors</h3>
-
-<p>
-Anchor elements (e.g. <code><anchor id="my_anchor"/></code>) can be specified
-in any user assistance XML document, and represent places at which other components are allowed
-to extend this document. Specifying an anchor is as simple as adding the element in your markup.
-</p>
-
-<p>
-To contribute content into an anchor, you must write the content to be added in a separate XML
-file and hook it into the platform using one of two extension points. For <a
-href="ua_help.htm">help</a> or <a href="ua_cheatsheet.htm">cheat sheet</a> content, you must
-use the <a href="../reference/extension-points/org_eclipse_help_contentExtension.html"><code>
-org.eclipse.help.contentExtension</code></a> extension point. For <a href="ua_intro.htm">welcome
-(intro)</a> extensions, use
-<a href="../reference/extension-points/org_eclipse_ui_intro_configExtension.html"><code>
-org.eclipse.ui.intro.configExtension</code></a>. The table of contents markup also allows the
-special constructs <a href="ua_help_content_nested.htm"><code>link</code></a> and <a
-href="ua_help_content_nested.htm"><code>link_to</code></a> which perform a similar function
-to includes and contributions, but perform the additional operation of merging extra documents
-to index for searching.
-</p>
-
-<p>
-For example, let's say component A's documentation provides a listing of file formats it
-supports. If component B extends A's support to several more formats, you can place an
-anchor in A's list, and extend the list from B. For example:
-</p>
-
-<pre>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <title>
+      Content extensions
+    </title>
+
+    <style type="text/css">
+/*<![CDATA[*/
+    span.c1 {color: blue}
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h2>
+      Content extensions
+    </h2>
+    <p>
+      A content extension is either a contribution of content into a known
+      anchor (similar to an extension into an extension point), or the
+      replacement of an existing element in a document.
+    </p>
+
+    <h3>
+      Contributing into anchors
+    </h3>
+    <p>
+      Anchor elements (e.g. <code><anchor id="my_anchor"/></code>) can be
+      specified in any user assistance XML document, and represent places at
+      which other components are allowed to extend this document. Specifying an
+      anchor is as simple as adding the element in your markup.
+    </p>
+    <p>
+      To contribute content into an anchor, you must write the content to be
+      added in a separate XML file and hook it into the platform using one of
+      two extension points. For <a href="ua_help.htm">help</a> or <a href=
+      "ua_cheatsheet.htm">cheat sheet</a> content, you must use the <a href=
+      "../reference/extension-points/org_eclipse_help_contentExtension.html"><code>
+
+      org.eclipse.help.contentExtension</code></a> extension point. For
+      <a href="ua_intro.htm">welcome (intro)</a> extensions, use <a href=
+      "../reference/extension-points/org_eclipse_ui_intro_configExtension.html">
+      <code>org.eclipse.ui.intro.configExtension</code></a>. The table of
+      contents markup also allows the special constructs <a href=
+      "ua_help_content_nested.htm"><code>link</code></a> and <a href=
+      "ua_help_content_nested.htm"><code>link_to</code></a> which perform a
+      similar function to includes and contributions, but perform the
+      additional operation of merging extra documents to index for searching.
+    </p>
+
+    <p>
+      For example, let's say component A's documentation provides a listing of
+      file formats it supports. If component B extends A's support to several
+      more formats, you can place an anchor in A's list, and extend the list
+      from B. For example:
+    </p>
+    <pre>
    <p>The following list shows the supported formats:</p>
    <ul>
       <li>Portable Network Graphics (.png)</li>
+
       <li>Joint Photographic Experts Group (.jpeg)</li>
       <li>Graphical Interchange Format (.gif)</li>
       
       <!-- Extra formats go here -->
-      <font color="blue"><anchor id="image_format_list"/></font>
+      <span class="c1"><anchor id="image_format_list"/></span>
    </ul>
-</pre>
 
-<p>
-Then component B can make a contribution to the anchor to add more formats
-to the list by specifying the following extension:
-</p>
-
-<pre>
-   <extension point="org.eclipse.help.contentExtension"> 
+</pre>
+    <p>
+      Then component B can make a contribution to the anchor to add more
+      formats to the list by specifying the following extension:
+    </p>
+    <pre>
+   <extension point="org.eclipse.help.contentExtension"> 
       <contentExtension
-            file="path/to/extension.xml"/>
+            file="path/to/extension.xml"/>
    </extension>
 </pre>
 
-<p>
-Where the file <code>path/to/extension.xml</code> might contain:
-</p>
-
-<pre>
+    <p>
+      Where the file <code>path/to/extension.xml</code> might contain:
+    </p>
+    <pre>
    <contentExtension>
       <contribution
-            content="docs/mydoc.xhtml#mycontent"
-            path="/component_a_plugin/docs/doc_with_anchor.xhtml#anchorId">
+            content="docs/mydoc.xhtml#mycontent"
+            path="/component_a_plugin/docs/doc_with_anchor.xhtml#anchorId">
       </contribution>
+
    </contentExtension>
 </pre>
-
-<p>
-The element with the <code>id</code> attribute <code>mycontent</code> in document
-<code>docs/mydoc.xhtml</code> would contain the content you wish to contribute
-into the anchor. The result will be that when the user views the document, the extra content
-will appear at the anchor as though it was explicitly added into the original document.
-</p>
-
-<h3>Replacing content</h3>
-
-<p>
-Any XML element in a user assistance document that has an <code>id</code> attribute that is
-unique to that document can be replaced with any other element.
-</p>
-
-<p>
-As with contributions into anchors, to replace an element, you must write the new element to
-replace with in a separate XML file and hook it into the platform using one of two extension
-points. For <a href="ua_help.htm">help</a> or <a href="ua_cheatsheet.htm">cheat sheet</a> content,
-you must use the <a href="../reference/extension-points/org_eclipse_help_contentExtension.html">
-<code>org.eclipse.help.contentExtension</code></a> extension point. For <a href="ua_intro.htm">
-welcome (intro)</a> extensions, use
-<a href="../reference/extension-points/org_eclipse_ui_intro_configExtension.html"><code>
-org.eclipse.ui.intro.configExtension</code></a>.
-</p>
-
-<p>
-The only difference with replacements as opposed to contributions into anchors is the name of the
-XML element used in the markup; use the <code>replacement</code> element instead of
-<code>contribution</code> (or <code>replacementContent</code> in the case of welcome). For example:
-</p>
-
-<pre>
+    <p>
+      The element with the <code>id</code> attribute <code>mycontent</code> in
+      document <code>docs/mydoc.xhtml</code> would contain the content you wish
+      to contribute into the anchor. The result will be that when the user
+      views the document, the extra content will appear at the anchor as though
+      it was explicitly added into the original document.
+    </p>
+
+    <h3>
+      Replacing content
+    </h3>
+    <p>
+      Any XML element in a user assistance document that has an <code>id</code>
+      attribute that is unique to that document can be replaced with any other
+      element.
+    </p>
+    <p>
+      As with contributions into anchors, to replace an element, you must write
+      the new element to replace with in a separate XML file and hook it into
+      the platform using one of two extension points. For <a href=
+      "ua_help.htm">help</a> or <a href="ua_cheatsheet.htm">cheat sheet</a>
+
+      content, you must use the <a href=
+      "../reference/extension-points/org_eclipse_help_contentExtension.html"><code>
+      org.eclipse.help.contentExtension</code></a> extension point. For
+      <a href="ua_intro.htm">welcome (intro)</a> extensions, use <a href=
+      "../reference/extension-points/org_eclipse_ui_intro_configExtension.html">
+      <code>org.eclipse.ui.intro.configExtension</code></a>.
+    </p>
+    <p>
+
+      The only difference with replacements as opposed to contributions into
+      anchors is the name of the XML element used in the markup; use the
+      <code>replacement</code> element instead of <code>contribution</code> (or
+      <code>replacementContent</code> in the case of welcome). For example:
+    </p>
+    <pre>
    <contentExtension>
+
       <replacement
-            content="docs/mydoc.xml#myelement"
-            path="/plugin.id/path/doc.xml#elementId">
+            content="docs/mydoc.xml#myelement"
+            path="/plugin.id/path/doc.xml#elementId">
       </replacement>
    </contentExtension>
 </pre>
-
-<p>
-(Note the markup is different for welcome, as specified in the <a
-href="../reference/extension-points/org_eclipse_ui_intro_configExtension.html"><code>
-org.eclipse.ui.intro.configExtension</code></a> extension point)
-</p>
-
-<h3>Path format</h3>
-
-<p>
-The format of the <code>path</code> attribute is <code>/pluginId/path/file.xml#elementId</code>,
-except welcome where it is <code>pageId/path/to/elementId</code> where the pageId is the welcome
-page id, and all other path segments are ids of container elements like groups, leading to the
-target element.
-</p>
-
-</body>
+    <p>
+      (Note the markup is different for welcome, as specified in the <a href=
+      "../reference/extension-points/org_eclipse_ui_intro_configExtension.html">
+      <code>org.eclipse.ui.intro.configExtension</code></a> extension point)
+    </p>
+
+    <h3>
+      Path format
+    </h3>
+    <p>
+      The format of the <code>path</code> attribute is
+      <code>/pluginId/path/file.xml#elementId</code>, except welcome where it
+      is <code>pageId/path/to/elementId</code> where the pageId is the welcome
+      page id, and all other path segments are ids of container elements like
+      groups, leading to the target element.
+    </p>
+
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_filters.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_filters.htm
index 3b823fc..34fb437 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_filters.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_filters.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Filters</title>
 
 <style type="text/css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_includes.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_includes.htm
index 04327a8..90af295 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_includes.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_dynamic_includes.htm
@@ -1,73 +1,92 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<title>Includes</title>
-</head>
-<body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <title>
+      Includes
+    </title>
 
-<h2>Includes</h2>
+    <style type="text/css">
+/*<![CDATA[*/
+    span.c1 {color: blue}
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h2>
+      Includes
+    </h2>
+    <p>
+      Includes are used include parts of other documents into your document.
+      The markup specifies the document and element to include, and before the
+      document is shown to the user, the include element will be
+      <i>replaced</i> with the element referred to.
+    </p>
 
-<p>
-Includes are used include parts of other documents into your document. The
-markup specifies the document and element to include, and before the document is
-shown to the user, the include element will be <i>replaced</i> with the element
-referred to.
-</p>
+    <p>
+      For example, you may wish to show a copyright at the end of each help
+      document you provide. You could copy and paste it in each document, but
+      if the copyright changes (e.g. the copyright year), you have to modify
+      <i>every</i> one of your documents.
+    </p>
+    <p>
+      Instead, you can place the copyright in a separate XHTML file called
+      <code>copyright.xhtml</code> and assign it a unique identifier, like
+      this:
+    </p>
+    <pre>
 
-<p>
-For example, you may wish to show a copyright at the end of each help document
-you provide. You could copy and paste it in each document, but if the copyright
-changes (e.g. the copyright year), you have to modify <i>every</i> one of your
-documents.
-</p>
-
-<p>
-Instead, you can place the copyright in a separate XHTML file called <code>
-copyright.xhtml</code> and assign it a unique identifier, like this:
-</p>
-
-<pre>
-   <p <font color="blue">id="copyright"</font>>
+   <p <span class="c1">id="copyright"</span>>
       Copyright 2006 My Company. All rights reserved.
    </p>
 </pre>
-
-<p>
-Then for each document, simply include the copyright paragraph:
-</p>
-
-<pre>
+    <p>
+      Then for each document, simply include the copyright paragraph:
+    </p>
+    <pre>
    <p>
+
       This is my document. It should have a copyright at the end.
    </p>
-   <font color="blue"><include path="my.plugin.id/path/copyright.xhtml/copyright"/></font>
+   <span class=
+"c1"><include path="my.plugin.id/path/copyright.xhtml/copyright"/></span>
 </pre>
+    <p>
+      Before the document is sent to the browser to be displayed, the
+      <code>include</code> element will be <i>replaced</i> by the copyright
+      paragraph.
+    </p>
 
-<p>
-Before the document is sent to the browser to be displayed, the <code>include</code>
-element will be <i>replaced</i> by the copyright paragraph.
-</p>
-
-<h3>Where can I use includes?</h3>
-
-<p>
-See below for a list of the document types in which includes can be used. The
-format of the <code>path</code> element of the include <i>depends on the type of
-document you're including from</i>. As you can see in the example above,
-the format for XHTML help documents is <code>
-"<plugin_id>/<path_to_file>/<element_id>"</code>. Refer to the links
-below for the format for your document type.
-</p>
+    <h3>
+      Where can I use includes?
+    </h3>
+    <p>
+      See below for a list of the document types in which includes can be used.
+      The format of the <code>path</code> element of the include <i>depends on
+      the type of document you're including from</i>. As you can see in the
+      example above, the format for XHTML help documents is
+      <code>"<plugin_id>/<path_to_file>/<element_id>"</code>.
+      Refer to the links below for the format for your document type.
+    </p>
 
-<ul>
-   <li><a href="ua_intro_xhtml.htm">Welcome/Intro XML/XHTML format</a></li>
-   <li><a href="ua_help_content_xhtml.htm#include_format">Help XHTML format</a></li>
-</ul>
+    <ul>
+      <li>
+        <a href="ua_intro_xhtml.htm">Welcome/Intro XML/XHTML format</a>
+      </li>
+      <li>
+        <a href="ua_help_content_xhtml.htm#include_format">Help XHTML
+        format</a>
+      </li>
+    </ul>
 
-</body>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help.htm
index 20ae8be..8817ddb 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_abstract_scope.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_abstract_scope.htm
index dc632da..cdac5ee 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_abstract_scope.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_abstract_scope.htm
@@ -1,53 +1,102 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<title>Using AbstractHelpScope to filter an information center</title>
-</head>
-<body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <title>
+      Using AbstractHelpScope to filter an information center
+    </title>
 
-<h2>Using AbstractHelpScope to filter an information center</h2>
+  </head>
+  <body>
+    <h2>
+      Using AbstractHelpScope to filter an information center
+    </h2>
+    <p>
+      An information center can be used to serve information for more than one
+      product. Using the <a href=
+      "../reference/api/org/eclipse/help/base/AbstractHelpScope.html">AbstractHelpScope</a>
+      class it is possible to define documentation subsets called help scopes
+      which allow for users to see only the information which applies to one or
+      more specific products.
+    </p>
 
-<p>
-An information center can be used to serve information for more than one product. Using the AbstractHelpScope 
-class it is possible to define documentation subsets called help scopes which allow for users to see only the information which 
-applies to one or more specific products. </p>
+    <p>
+      A help scope consists of an id and a class which subclasses
+      AbstractHelpScope and is defined in the extension point <a href=
+      "../reference/extension-points/org_eclipse_help_base_scope.html">org.eclipse.ua.help.base.scope</a>.
+      The AbstractHelpScope class contains methods for determining whether a
+      table of contents, topic or index entry should be included in the scope.
+      Once a help scope with an id of myId has been declared it can be applied
+      by opening an infocenter with a url of this form:
+    </p>
+    <pre>
+http://<host>:<port>/help/index.jsp?scope=myId
+</pre>This will present an infocenter which shows only those topics which fall
+within the scope myId.
+    <p>
+      Scopes can be joined together to retrieve the intersection or union of
+      multiple scopes. A basic query language can be used to perform these
+      multi-scope operations.
+    </p>
 
-<p>
-A help scope consists of an id and a class which subclasses AbstractHelpScope and is defined in the extension 
-point <code>org.eclipse.ua.tests.help.scope</code>. The AbstractHelpScope class contains methods for determining 
-whether a table of contents, topic or index entry should be included in the scope. Once a help scope with an id of myId
-has been declared it can be applied by opening an infocenter with a url of this form: 
-<pre>http://<host>:<port>/help/index.jsp?scope=myId</pre>
-This will present an infocenter which shows only those topics which fall within the scope myId.
-</p>
+    <dl>
+      <dt>
+        Examples:
+      </dt>
+      <dt>
+        Filter help info to include anything in A,B, or C:
+      </dt>
+      <dd>
+        scope=A|B|C
+      </dd>
 
+      <dd>
+        scope=(A|B|C)
+      </dd>
+      <dt>
+        Filter help info to include anything in A,B, and C:
+      </dt>
+      <dd>
+        scope=A^B^C
+      </dd>
+      <dd>
 
-<p>
-Scopes can be joined together to retrieve the intersection or union of multiple scopes.  A basic query language can be used
-to perform these multi-scope operations.
-<dl>Examples:
-	<dt>Filter help info to include anything in A,B, or C:</dt>
-   	<dd>scope=A|B|C</dd>
-   	<dd>scope=(A|B|C)</dd>
-	<dt>Filter help info to include anything in A,B, and C:</dt>
-	<dd>scope=A^B^C</dd>
-	<dd>scope=(A^B^C)</dd>
-	<dd>scope=A&scope=B&scope=C</dd>
-	<dt>Filter help to include A or B, and C:</dt>
-	<dd>scope=(A|B)^C</dd>
-	<dd>scope=A|B&scope=C</dd>
-	<dd><b>Note:</b> (A|B^C) will not be recognized by the parser, and will only use the last operation, so it will look like (A^B^C)</dd>
-	<dt>Filter help to include A and B, or, A and C:</dt>
-	<dd>scope=(A^B)|(A^C)</dd>
-</dl>
-The URL character for 'and' (intersection) is '^', and 'or' (union)
-is '|'.  
-</p>
+        scope=(A^B^C)
+      </dd>
+      <dd>
+        scope=A&scope=B&scope=C
+      </dd>
+      <dt>
+        Filter help to include A or B, and C:
+      </dt>
+      <dd>
 
-</body>
+        scope=(A|B)^C
+      </dd>
+      <dd>
+        scope=A|B&scope=C
+      </dd>
+      <dd>
+        <b>Note:</b> (A|B^C) will not be recognized by the parser, and will
+        only use the last operation, so it will look like (A^B^C)
+      </dd>
+      <dt>
+
+        Filter help to include A and B, or, A and C:
+      </dt>
+      <dd>
+        scope=(A^B)|(A^C)
+      </dd>
+    </dl>The URL character for 'and' (intersection) is '^', and 'or' (union) is
+    '|'.
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content.htm
index 01c4541..5a7f713 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Help content</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active.htm
index b40c80c..d1f0396 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Active help</title>
 </head>
 <body>
@@ -28,7 +28,7 @@ We will take a look at how to create and reference your own actions.</p>
 <p><a href='javascript:liveAction(
 	"org.eclipse.ui.cheatsheets", 
 	"org.eclipse.ui.cheatsheets.OpenCheatSheetFromHelpAction",
-	"org.eclipse.platform.cvs.checkout")'>Open a cheatsheet.</a></p>
+	"org.eclipse.platform.cvs.checkout")'>Open a cheatsheet</a>.</p>
 
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_action.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_action.htm
index a6aa5b7..9c711e3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_action.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_action.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Writing the help action</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_debug.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_debug.htm
index efbef57..bd18f63 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_debug.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_debug.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Tips for debugging active help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_invoke.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_invoke.htm
index 3b33e5b..3180f87 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_invoke.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_active_invoke.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Invoking the action from HTML</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_child_links.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_child_links.htm
index 055bb4c..40d2daf 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_child_links.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_child_links.htm
@@ -1,31 +1,45 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<title>Adding Child Links to Help Pages</title>
-</head>
-<body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Adding Child Links to Help Pages
+    </title>
+  </head>
 
-<h2>Adding Child Links to Help Pages</h2>
+  <body>
+    <h2>
+      Adding Child Links to Help Pages
+    </h2>
+    <p>
+      The Eclipse Help System recognizes two special comments in the source
+      code which can be used to cause child links to appear in help topics.
+      This is useful in the case of a help topic which is the parent of an
+      anchor.
+    </p>
+    <p>
+      If the sequence
+    </p>
 
-<p>
-The Eclipse Help System recognizes two special comments in the source code which can be used to 
-cause child links to appear in help topics. This is useful in the case of a help topic which is
-the parent of an anchor. 
-</p>
-<p>
-If the sequence <pre><!--INSERT_CHILD_LINKS--></pre> appears in the source code it will be replaced
-with html containing hyperlinks to all child topics.
-</p>
-<p>
-If the sequence <pre><!--INSERT_CHILD_LINK_STYLE--></pre> appears in the source code it will be replaced
-by either <code>"has_child_topics"</code> or <code>"no_child_topics"</code> depending on whether or not
-the topic has children. This can be used to assign a style to a section of html so that it will only be
-shown if the topic has children.
-</p>
+    <pre>
+<!--INSERT_CHILD_LINKS-->
+</pre>appears in the source code it will be replaced with html containing
+hyperlinks to all child topics.
+    <p>
+      If the sequence
+    </p>
+    <pre>
+<!--INSERT_CHILD_LINK_STYLE-->
+</pre>appears in the source code it will be replaced by either
+<code>"has_child_topics"</code> or <code>"no_child_topics"</code> depending on
+whether or not the topic has children. This can be used to assign a style to a
+section of html so that it will only be shown if the topic has children.
+  </body>
 
-</body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command.htm
index 742a4b7..c3b8d2f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Embedding commands in help</title>
 </head>
 <body>
@@ -30,20 +30,20 @@ Command links can be used to:
 Open a specific preference page, such as
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Views)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Appearance</b></a>.
 
 </li>
 <li>
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 Select a new perspective</a>
 
 or switch to a pre-determined perspective like the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.jdt.ui.JavaBrowsingPerspective)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Java Browsing</b></a>.
 
 perspective
@@ -51,13 +51,13 @@ perspective
 <li>
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 Select a view to open</a>
 
 or open a pre-determined view like the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.BookmarkView)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Bookmarks</b></a>.
 
 view
@@ -66,13 +66,13 @@ view
 Open wizards like the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.pde.ui.NewProjectWizard)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>New Plug-in Project</b></a>
 
 wizard and the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export(exportWizardId=org.eclipse.ui.wizards.export.Preferences)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Export Preferences</b></a>.
 
 wizard
@@ -80,7 +80,7 @@ wizard
 <li>
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet(cheatSheetId=org.eclipse.jdt.helloworld)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 Open a Cheat Sheet</a>.
 
 </li>
@@ -88,7 +88,7 @@ Open a Cheat Sheet</a>.
 Open a
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.dialogs.openMessageDialog(imageType=3,buttonLabel2=Maybe,title=Opinion Poll,message=Do you like command links?,buttonLabel0=Yes,defaultIndex=0,buttonLabel1=No)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 message dialog</a>.
 
 </li>
@@ -96,7 +96,7 @@ message dialog</a>.
 Open the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.aboutAction")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>About Eclipse SDK</b></a>
 
 dialog.
@@ -110,7 +110,7 @@ And much more!
 To get an idea of the range of commands available, look at the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Keys</b></a>
 
 preference page. This page is used to bind key sequences to commands
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command_authoring.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command_authoring.htm
index 6320ce0..017c977 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command_authoring.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_command_authoring.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Authoring a command link</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_criteria.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_criteria.htm
index 2a8ab65..33760e3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_criteria.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_criteria.htm
@@ -32,13 +32,13 @@ then filter the documentation to show only documents applicable to a specific pl
 <p>For example:</p>
 <pre>
  <toc href="tochref">
-      <criteria  name="platform"  value="AIX">
-      <criteria  name="platform"  value="Windows">
+      <criteria  name="platform"  value="AIX"/>
+      <criteria  name="platform"  value="Windows"/>
       <topic label="label1" href="href1">
-          <criteria  name="platform" value="Windows">
+          <criteria  name="platform" value="Windows"/>
       </topic>
       <topic label="label2" href="href2">
-          <criteria name="platform" value="AIX">      
+          <criteria name="platform" value="AIX"/>
       </topic>
  </toc>
 </pre>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_files.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_files.htm
index ca25e96..d5e17ac 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_files.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_files.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Help server and file locations</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_manifest.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_manifest.htm
index 8e6ec56..b25b927 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_manifest.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_manifest.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Completing the plug-in manifest</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_nested.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_nested.htm
index 5a632e1..2034721 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_nested.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_nested.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Building nested documentation structures</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_process.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_process.htm
index 4c57802..4ba6964 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_process.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_process.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Processing Help Content</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_remote.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_remote.htm
index bd9ed66..0087c34 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_remote.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_remote.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Remote Help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_toc.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_toc.htm
index e10462e..453e0e9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_toc.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_toc.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Table of contents (toc) files</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_xhtml.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_xhtml.htm
index b26ee40..75c72b0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_xhtml.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_content_xhtml.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Contributing XHTML help documents</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context.htm
index 13c9ec3..a50da15 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Context-sensitive help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_dynamic.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_dynamic.htm
index ec23931..0029e41 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_dynamic.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_dynamic.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Dynamic context help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_id.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_id.htm
index c594128..bde9fec 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_id.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_id.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Declaring a context id</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_infopops.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_infopops.htm
index a3b3457..7d37afa 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_infopops.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_infopops.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Infopops</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_xml.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_xml.htm
index e5b6d79..96ec442 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_xml.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_context_xml.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Describing and packaging context-sensitive help content</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_infocenter_preferences.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_infocenter_preferences.htm
index c5611dc..d11c6a0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_infocenter_preferences.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_infocenter_preferences.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -30,7 +30,7 @@ exit the wizard. In the extensions tab of the plug-in manifest editor add the ex
 "org.eclipse.core.runtime.products" and give it a name. Create a product element beneath that and give it a name. 
 Beneath the product element add a property element and 
 set "preferenceCustomization" to "plugin_customization.ini".  plugin.xml will now contain entries similar to 
-the following.
+the following.</p>
 <pre>
  <extension
          id="custom"
@@ -46,25 +46,25 @@ the following.
       </product>
    </extension>
 </pre>
-</p>
+
 
 <h3>Installing the product plug-in</h3>
 <p>
     Export the product plug-in as a deployable plug-in. Copy the jar file for the exported plug-in 
     to the "dropins" folder in the eclipse installation which will be used to start the information center.
     Start the information center with an additional argument to specify the product. For example if the 
-    product plugin is called help.product and it's product id is "custom" add the argument 
+    product plugin is called help.product and its product id is "custom" add the argument 
     "-product help.product.custom". Open the information center, the title will now show the customized product name.
 </p>
 <h3>Additional customization</h3>
 <p>
 Modify plugin_customization.ini in the product plugin to add more customizations, see <a href = "ua_help_setup_preferences.htm">
 Help system customization</a>, re-export and replace the plug-in in the dropins folder. To modify the banner
-a line like this could be added to plugin_custiomization.ini.
+a line like this could be added to plugin_custiomization.ini.</p>
 <pre>
 org.eclipse.help.base/banner=/org.eclipse.help.webapp/advanced/banner.html
 </pre>
-</p>
+
 
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_menu.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_menu.htm
index dcd25cc..e54a516 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_menu.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_menu.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Help content</title>
 </head>
 <body>
@@ -29,8 +29,5 @@ style="push"><br>
     </menuContribution><br>
 </extension></p>
 
-<pre>
-</pre>
-
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search.htm
index f08f084..484aac1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search.htm
@@ -5,7 +5,7 @@
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Help search</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search_types.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search_types.htm
index 834d5a2..0c3c92f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search_types.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_search_types.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Plugging in search engines</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup.htm
index d7d2864..be6ef62 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Configuration/setup</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_about.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_about.htm
index 4e28880..aac1301 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_about.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_about.htm
@@ -1,6 +1,8 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
-<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <title>Using about.html to debug information centers</title>
 <link rel="stylesheet" href="../book.css" charset="utf-8" type="text/css">
 </head>
@@ -11,11 +13,11 @@
 <p>
 When developing an information center sometimes not all of the books show as expected or 
 customizations do not have the desired effect. The about.html page can be used to get information 
-about installed plug-ins and help system preferences. If the home page of the help system is 
-<pre>http://<hostname>:<port>/help/index.jsp</pre> the about page has a url of 
+about installed plug-ins and help system preferences. If the home page of the help system is</p> 
+<pre>http://<hostname>:<port>/help/index.jsp</pre> <p>the about page has a url of</p> 
 <pre>http://<hostname>:<port>/help/about.html</pre> 
-Without any parameters the about page shows a list of all plug-ins installed on the system. 
-Parameters can be added to show other kinds of information as follows:
+<p>Without any parameters the about page shows a list of all plug-ins installed on the system. 
+Parameters can be added to show other kinds of information as follows:</p>
 <ul>
 <li>
 <code>about.html?show=preferences</code> shows the values of the help system preferences.
@@ -25,7 +27,7 @@ Parameters can be added to show other kinds of information as follows:
 read the page.
 </li>
 </ul>
-</p>
+
 
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_help_data.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_help_data.htm
index 73c95cc..97a632a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_help_data.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_help_data.htm
@@ -1,113 +1,236 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Help Data</title>
-<link rel="stylesheet" href="../schema.css" charset="utf-8" type="text/css">
-<link rel="stylesheet" href="../book.css" charset="utf-8" type="text/css">
-</HEAD>
-<BODY>
-<CENTER>
-<H1>Help Data</H1></CENTER>
-<p></p>
-<h6 class=CaptionFigColumn id=header>Identifier: </h6>org.eclipse.help.HELP_DATA<p></p>
-<h6 class=CaptionFigColumn id=header>Since: </h6>3.3
-<p></p>
-
-<p></p>
-<h6 class=CaptionFigColumn id=header>Description: </h6>
-<p>The help data XML file is used by products to control the order of books in the help table of contents, as well whether or not books or keyword index sets should be displayed at all. The file must be referenced in the product's <code>plugin_customization.ini</code> file using the <code>org.eclipse.help/HELP_DATA</code> property.</p>
-<h6 class=CaptionFigColumn id=header>Configuration Markup:</h6>
-<p class=code id=dtd><!ELEMENT <a name="e.extensions">extensions</a> (<a href="#e.tocOrder">tocOrder</a>? , <a href="#e.hidden">hidden</a>?)></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
-The extension data for Help.</p>
-<br><br>
-<p class=code id=dtd><!ELEMENT <a name="e.tocOrder">tocOrder</a> (<a href="#e.toc">toc</a> | <a href="#e.category">category</a>)*></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
-Specifies the order in which top-level table of contents entries (also called "books") or categories of books should appear in Help. If one of the items listed is not available, it is ignored. If there are items available that are not listed and not hidden, they will be displayed after the ones listed here.</p>
-<br><br>
-<p class=code id=dtd><!ELEMENT <a name="e.toc">toc</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST toc</p>
-<p class=code id=dtdAttlist>id CDATA #REQUIRED></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
-A reference to a top-level table of contents (TOC) entry, also called a "book".</p>
-<br>
-<ul class=ConfigMarkup id=attlistDesc>
-<li><b>id</b> - The unique identifier for this book. For XML file TOC contributions, this is a path to the file in the form "<code>/<plugin_id>/<path>/<file></code>" (e.g., "<code>/org.eclipse.platform.doc.user/toc.xml</code>"). In general, this is the ID of the <code>TocContribution</code> supplied by its originating <code>AbstractTocProvider</code>.</li>
-</ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.category">category</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST category</p>
-<p class=code id=dtdAttlist>id CDATA #REQUIRED></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
-A reference to a category of top-level table of contents (TOC) entries (books). Categories are implicitly created when a table of contents contribution declares itself to be of that category, for example, by specifying a <code>category</code> attribute for the <code>toc</code> element in the <code>org.eclipse.help.toc</code> extension point.</p>
-<br>
-<ul class=ConfigMarkup id=attlistDesc>
-<li><b>id</b> - The unique id of the category.</li>
-</ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.hidden">hidden</a> (<a href="#e.toc">toc</a> | <a href="#e.category">category</a> | <a href="#e.index">index</a>)*></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
-Contains a set of help items that should be hidden from the user.</p>
-<br><br>
-<p class=code id=dtd><!ELEMENT <a name="e.index">index</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST index</p>
-<p class=code id=dtdAttlist>id CDATA #REQUIRED></p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
-A reference to a contribution of help index keywords.</p>
-<br>
-<ul class=ConfigMarkup id=attlistDesc>
-<li><b>id</b> - The unique identifier for this contribution of keywords. For XML file index contributions, this is a path to the file in the form "<code>/<plugin_id>/<path>/<file></code>" (e.g., "<code>/org.eclipse.platform.doc.user/index.xml</code>"). In general, this is the ID of the <code>IndexContribution</code> supplied by its originating <code>AbstractIndexProvider</code>.</li>
-</ul>
-<br><h6 class=CaptionFigColumn id=header>Examples: </h6><p>
-The following example shows how to arrange the following books in the order shown:
-</p>
-
-<ul>
-<li>Book #1: "Introduction to XYZ" (category: "<code>user.intro</code>") in <code>/com.xyz.doc.user/introToc.xml</code></li>
-<li>Book #2: "Using XYZ" (category: "<code>user.content</code>") in <code>/com.xyz.doc.user/usingToc.xml</code></li>
-<li>Book #3: "Troubleshooting" (category: "<code>user.reference</code>") in <code>/com.xyz.doc.user/refToc.xml</code></li>
-</ul>
-
-<p>
-As well as hide the following books/categories and related keyword indexes:
-</p>
-
-<ul>
-<li>Book #4: "Platform ABC" (category: <code>none</code>) in <code>/org.abc.doc.isv/toc.xml</code></li>
-<li>Book #5: "DEF Toolkit" (category: "<code>isv.reference</code>") in <code>/com.def.doc.isv/toc.xml</code></li>
-<li>Book #6: "GHI Support" (category: "<code>isv.reference</code>") in <code>/com.ghi.doc.isv/toc.xml</code></li>
-</ul>
-
-<p>
-The markup would be the following:
-</p>
-
-<pre>
-<font color="#0000ff"><extensions>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>
+      Help Data
+    </title>
+    <link rel="stylesheet" href="../schema.css" charset="utf-8" type=
+    "text/css" />
+    <link rel="stylesheet" href="../book.css" charset="utf-8" type=
+    "text/css" />
+    <style type="text/css">
+/*<![CDATA[*/
+    span.c3 {color: #008000}
+    span.c2 {color: #0000FF}
+    h1.c1 {text-align:center}
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1 class="c1">
+      Help Data
+    </h1>
+    <h6 class="CaptionFigColumn">
+      Identifier:
+    </h6>org.eclipse.help.HELP_DATA
+    <h6 class="CaptionFigColumn">
+      Since:
+    </h6>3.3
+    <h6 class="CaptionFigColumn">
+
+      Description:
+    </h6>
+    <p>
+      The help data XML file is used by products to control the order of books
+      in the help table of contents, as well whether or not books or keyword
+      index sets should be displayed at all. The file must be referenced in the
+      product's <code>plugin_customization.ini</code> file using the
+      <code>org.eclipse.help/HELP_DATA</code> property.
+    </p>
+    <h6 class="CaptionFigColumn">
+      Configuration Markup:
+    </h6>
+
+    <p class="SchemaDtd">
+      <!ELEMENT <a name="e.extensions" id="e.extensions">extensions</a>
+      (<a href="#e.tocOrder">tocOrder</a>? , <a href=
+      "#e.hidden">hidden</a>?)>
+    </p>
+    <p class="">
+
+      The extension data for Help.
+    </p><br />
+    <br />
+    <p class="SchemaDtd">
+      <!ELEMENT <a name="e.tocOrder" id="e.tocOrder">tocOrder</a> (<a href=
+      "#e.toc">toc</a> | <a href="#e.category">category</a>)*>
+
+    </p>
+    <p class="ConfigMarkupElementDesc">
+      Specifies the order in which top-level table of contents entries (also
+      called "books") or categories of books should appear in Help. If one of
+      the items listed is not available, it is ignored. If there are items
+      available that are not listed and not hidden, they will be displayed
+      after the ones listed here.
+    </p><br />
+    <br />
+    <p class="SchemaDtd">
+      <!ELEMENT <a name="e.toc" id="e.toc">toc</a> EMPTY>
+
+    </p>
+    <p class="SchemaDtd">
+      <!ATTLIST toc
+    </p>
+    <p class="SchemaDtdAttlist">
+      id CDATA #REQUIRED>
+    </p>
+    <p class="ConfigMarkupElementDesc">
+
+      A reference to a top-level table of contents (TOC) entry, also called a
+      "book".
+    </p><br />
+    <ul class="ConfigMarkupAttlistDesc">
+      <li>
+        <b>id</b> - The unique identifier for this book. For XML file TOC
+        contributions, this is a path to the file in the form
+        "<code>/<plugin_id>/<path>/<file></code>" (e.g.,
+        "<code>/org.eclipse.platform.doc.user/toc.xml</code>"). In general,
+        this is the ID of the <code>TocContribution</code> supplied by its
+        originating <code>AbstractTocProvider</code>.
+      </li>
+
+    </ul><br />
+    <p class="SchemaDtd">
+      <!ELEMENT <a name="e.category" id="e.category">category</a> EMPTY>
+    </p>
+    <p class="SchemaDtd">
+      <!ATTLIST category
+    </p>
+
+    <p class="SchemaDtdAttlist">
+      id CDATA #REQUIRED>
+    </p>
+    <p class="ConfigMarkupElementDesc">
+      A reference to a category of top-level table of contents (TOC) entries
+      (books). Categories are implicitly created when a table of contents
+      contribution declares itself to be of that category, for example, by
+      specifying a <code>category</code> attribute for the <code>toc</code>
+
+      element in the <code>org.eclipse.help.toc</code> extension point.
+    </p><br />
+    <ul class="ConfigMarkupAttlistDesc">
+      <li>
+        <b>id</b> - The unique id of the category.
+      </li>
+    </ul><br />
+
+    <p class="SchemaDtd">
+      <!ELEMENT <a name="e.hidden" id="e.hidden">hidden</a> (<a href=
+      "#e.toc">toc</a> | <a href="#e.category">category</a> | <a href=
+      "#e.index">index</a>)*>
+    </p>
+
+    <p class="ConfigMarkupElementDesc">
+      Contains a set of help items that should be hidden from the user.
+    </p><br />
+    <br />
+    <p class="SchemaDtd">
+      <!ELEMENT <a name="e.index" id="e.index">index</a> EMPTY>
+    </p>
+
+    <p class="SchemaDtd">
+      <!ATTLIST index
+    </p>
+    <p class="SchemaDtdAttlist">
+      id CDATA #REQUIRED>
+    </p>
+    <p class="ConfigMarkupElementDesc">
+      A reference to a contribution of help index keywords.
+    </p><br />
+
+    <ul class="ConfigMarkupAttlistDesc">
+      <li>
+        <b>id</b> - The unique identifier for this contribution of keywords.
+        For XML file index contributions, this is a path to the file in the
+        form "<code>/<plugin_id>/<path>/<file></code>" (e.g.,
+        "<code>/org.eclipse.platform.doc.user/index.xml</code>"). In general,
+        this is the ID of the <code>IndexContribution</code> supplied by its
+        originating <code>AbstractIndexProvider</code>.
+      </li>
+
+    </ul><br />
+    <h6 class="CaptionFigColumn">
+      Examples:
+    </h6>
+    <p>
+      The following example shows how to arrange the following books in the
+      order shown:
+    </p>
+    <ul>
+      <li>Book #1: "Introduction to XYZ" (category: "<code>user.intro</code>")
+      in <code>/com.xyz.doc.user/introToc.xml</code>
+
+      </li>
+      <li>Book #2: "Using XYZ" (category: "<code>user.content</code>") in
+      <code>/com.xyz.doc.user/usingToc.xml</code>
+      </li>
+      <li>Book #3: "Troubleshooting" (category: "<code>user.reference</code>")
+      in <code>/com.xyz.doc.user/refToc.xml</code>
+      </li>
+
+    </ul>
+    <p>
+      As well as hide the following books/categories and related keyword
+      indexes:
+    </p>
+    <ul>
+      <li>Book #4: "Platform ABC" (category: <code>none</code>) in
+      <code>/org.abc.doc.isv/toc.xml</code>
+      </li>
+
+      <li>Book #5: "DEF Toolkit" (category: "<code>isv.reference</code>") in
+      <code>/com.def.doc.isv/toc.xml</code>
+      </li>
+      <li>Book #6: "GHI Support" (category: "<code>isv.reference</code>") in
+      <code>/com.ghi.doc.isv/toc.xml</code>
+      </li>
+    </ul>
+
+    <p>
+      The markup would be the following:
+    </p>
+    <pre>
+<span class="c2"><extensions>
    <tocOrder>
-      <toc id=</font><font color="#008000">"/com.xyz.doc.user/introToc.xml"</font><font color="#0000ff">/>
-      <category id=</font><font color="#008000">"user.content"</font><font color="#0000ff">/>
-      <toc id=</font><font color="#008000">"/com.xyz.doc.user/refToc.xml"</font><font color="#0000ff">/>
+      <toc id=</span><span class=
+"c3">"/com.xyz.doc.user/introToc.xml"</span><span class="c2">/>
+
+      <category id=</span><span class="c3">"user.content"</span><span class=
+"c2">/>
+      <toc id=</span><span class=
+"c3">"/com.xyz.doc.user/refToc.xml"</span><span class="c2">/>
    </tocOrder>
    <hidden>
-      <toc id=</font><font color="#008000">"/org.abc.doc.isv/toc.xml"</font><font color="#0000ff">/>
-      <category id=</font><font color="#008000">"isv.reference"</font><font color="#0000ff">/>
-      <index id=</font><font color="#008000">"/org.abc.doc.isv/index.xml"</font><font color="#0000ff">/>
-      <index id=</font><font color="#008000">"/com.def.doc.isv/index.xml"</font><font color="#0000ff">/>
+      <toc id=</span><span class=
+"c3">"/org.abc.doc.isv/toc.xml"</span><span class="c2">/>
+
+      <category id=</span><span class=
+"c3">"isv.reference"</span><span class="c2">/>
+      <index id=</span><span class=
+"c3">"/org.abc.doc.isv/index.xml"</span><span class="c2">/>
+      <index id=</span><span class=
+"c3">"/com.def.doc.isv/index.xml"</span><span class="c2">/>
    </hidden>
-</extensions></font>
+
+</extensions></span>
 </pre>
+    <h6 class="CaptionFigColumn">
+      Supplied Implementation:
+    </h6>This API is supported by any help implementation that is based on
+    <code>org.eclipse.help</code>, including the default help implementation
+    provided by Eclipse.
+    <p class="SchemaCopyright">
+      Copyright (c) 2006, 2011 IBM Corporation and others.<br />
+      All rights reserved. This program and the accompanying materials are made
+      available under the terms of the Eclipse Public License v1.0 which
+      accompanies this distribution, and is available at <a href=
+      "http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
 
-<h6 class=CaptionFigColumn id=header>Supplied Implementation: </h6>This API is supported by any help implementation that is based on <code>org.eclipse.help</code>, including the default help implementation provided by Eclipse.
-<p class=note id=copyright>
-Copyright (c) 2006 IBM Corporation and others.<br>
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which accompanies 
-this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
-</p>
-</BODY>
-</HTML>
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_infocenter.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_infocenter.htm
index 38663fb..4875a23 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_infocenter.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_infocenter.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Information Center</title>
 </head>
 <body>
@@ -180,7 +180,7 @@ commands. If this is the case, follow the steps:
 	<li>
 	In your application, create an instance of the <code>Help</code> class by
 	passing in the options.
-	<pre>Infocenter infocenter = new Help(options);</pre>
+	<pre>Infocenter infocenter = new Infocenter(options);</pre>
 	</li>
 	
 	<li>
@@ -258,27 +258,6 @@ documentation in both workbench and information center modes, you should use fil
 a way that makes sense even if filtering is turned off.
 </p>
 
-<h3>[Optional] Installing a minimal set of plug-ins</h3>
-
-<p>The information center does not require the entire Eclipse Platform package. It is
-possible to run an information center with the following plug-ins (located in the
-<code>eclipse\plugins</code> directory):
-</p>
-
-<p>
-<code>
-org.apache.lucene<br>
-org.eclipse.core.runtime<br>
-org.eclipse.help<br>
-org.eclipse.help.appserver<br>
-org.eclipse.help.base<br>
-org.eclipse.help.webapp<br>
-org.eclipse.osgi<br>
-org.eclipse.tomcat<br>
-org.eclipse.update.configurator<br>
-</code>
-</p>
-
 <p>
 Some documentation plug-ins may have dependencies on other plug-ins, usually by
 specifying the required plug-ins in their bundle manifest. The dependent
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preferences.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preferences.htm
index 6961238..67d52dd 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preferences.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preferences.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -147,7 +147,7 @@ Specify your html page as <code>/pluginId/path/to/home.html</code>.</td>
     <tr>
       <td><code>page_not_found</code></td>
       <td>The page to show in the content area when a topic file cannot be 
-      opened. If this variable is not specified the browser will show it's 
+      opened. If this variable is not specified the browser will show its 
       default 404 error page.</td>
       <td><code>/org.eclipse.help.base/doc/page_not_found.html</code></td>
     </tr>
@@ -360,6 +360,16 @@ Accepted values:<br>
  <code>in_editor</code> - open document in an editor<br>
  <code>in_browser</code> - open document in a browser</td>
       <td>in_place</td>
+    </tr> 
+    <tr>
+      <td>showSearchDescription</td>
+      <td>If true descriptions are shown with search results.</td>
+      <td>true</td>
+    </tr>
+    <tr>
+      <td>showSearchCategories</td>
+      <td>If true search results are organized by book.</td>
+      <td>false</td>
     </tr>
     <tr>
       <td><a name="remoteHelp"></a>
@@ -414,7 +424,7 @@ Accepted values:<br>
       <td> </td>
     </tr>   
     <tr>
-      <td colspan="3">The four css preferences allow for the control of 
+      <td colspan="3">The five css preferences allow for the control of 
       page appearance by inserting css files into every page served by the help 
       server. Each can each contain zero or more comma separated paths of the 
       form /plugin/path. These paths should contain only ASCII characters.<br>
@@ -431,7 +441,7 @@ Accepted values:<br>
     <tr>
       <td><code>nav_css</code></td>
       <td>A list of css file(s) to include in every navigation page served by 
-      help system</td>
+      help system.</td>
       <td ><code>/PRODUCT_PLUGIN/book.css</code></td>
     </tr>
     <tr>
@@ -440,10 +450,16 @@ Accepted values:<br>
       displayed in the help view or help tray .</td>
       <td><code>/PRODUCT_PLUGIN/narrow_book.css,/PRODUCT_PLUGIN/${os}_narrow_book.css</code></td>
     </tr>
+     <tr>
+      <td><code>remote_css</code></td>
+      <td>A list of css file(s) to include in every page served by 
+      help system which originates from a remote information center.</td>
+      <td> </td>
+    </tr>
     <tr>
       <td><code>disabled_css</code></td>
       <td>A list of  css file(s) to include in every page 
-      served by help system from a capability that is not enabled..</td>
+      served by help system from a capability that is not enabled.</td>
       <td><code>/PRODUCT_PLUGIN/disabled_book.css</code></td>
     </tr>
     <tr>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preindex.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preindex.htm
index 5357301..bb2e0f5 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preindex.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_preindex.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Pre-indexing documentation</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_rcp.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_rcp.htm
index 0eafb64..2784d40 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_rcp.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_rcp.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Rich Client Platform (RCP) help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_standalone.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_standalone.htm
index 98a5559..d7ed51e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_standalone.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_setup_standalone.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Standalone help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_war.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_war.htm
index ca93497..bdabb6e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_war.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_help_war.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Deploying the information center as a Web Archive</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro.htm
index 58c3ab4..cf505de 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Welcome</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_intro_part.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_intro_part.htm
index a2b041d..d8c90e0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_intro_part.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_intro_part.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Using the CustomizableIntroPart</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_static.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_static.htm
index 5dc30bc..064ae30 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_static.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_cust_static.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Displaying static HTML content in a CustomizableIntroPart</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_define_content.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_define_content.htm
index 5490d25..3aff58e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_define_content.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_define_content.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Defining intro content</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining.htm
index 1f881ef..b91a675 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Defining an intro part</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining_config.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining_config.htm
index 4623668..33d0833 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining_config.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_defining_config.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Defining an intro config</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_custom_url.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_custom_url.htm
index 46570ed..758cdf9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_custom_url.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_custom_url.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Defining a custom IntroURL action</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_standbypart.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_standbypart.htm
index 1717441..340f8e1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_standbypart.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_standbypart.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Contributing a standby content part</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_theme.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_theme.htm
index 332e6df..f7fcf11 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_theme.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_ext_theme.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Defining intro themes</title>
 </head>
 <body>
@@ -83,7 +83,7 @@ Concrete intro implementations can choose to expose themes in a more substantial
 way (and in fact Universal Welcome implementation does exactly that with the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.platform.introCustomization)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Welcome</b></a>
 
 preference page.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending.htm
index ad4e1f6..b30b654 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Extending an intro config</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending_content.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending_content.htm
index 1979f46..d88b208 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending_content.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_extending_content.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Extending the content of an intro config</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_hello_world.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_hello_world.htm
index 93902f4..04381c2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_hello_world.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_hello_world.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Contributing a HelloWorld intro Part</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_minimal.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_minimal.htm
index 0314070..44b7081 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_minimal.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_minimal.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Defining intro content</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_swt_properties.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_swt_properties.htm
new file mode 100644
index 0000000..b07c919
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_swt_properties.htm
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
+<title>SWT Properties for Intro</title>
+</head>
+<body>
+<h2>SWT Properties for Intro</h2>
+
+<p>The properties below can be used to affect the appearance of intro on systems 
+which do not support the browser widget and use the SWT based Intro presentation. 
+They have no effect on the HTML presentation, which is the default presentation for
+ most systems.
+</p>
+
+<pre>
+
+! Alternative style file for SWT presentation
+
+! Theme property should be used to indicate that the file is part
+! of the intro theme (new in 3.2). When in theme, relative images are resolved
+! relative to the property file location. Otherwise (false),
+! images are resolved relative to the contributing bundle. This 
+! is the backward-compatible behavior.
+	theme = true/false
+
+! General properties that can only be specified in a shared style 
+! file because they apply to the whole presentation.
+	! Background color of all presentation 
+	! ------------------------------------
+	bg = #rrggbb hex
+
+	! Color for presentation title 
+	! -----------------------------
+	title.fg = #rrggbb hex
+
+	! Backgournd Image for presentation title  
+	! ----------------------------------------
+	title.image = <file name>
+	title.image.repeat = true/false
+	
+	! Flag to display the Home Page using custom layout. Default is true.
+	! ----------------------------------------
+	home-page-custom-layout = true/false
+
+	
+	
+
+! Home Page settings
+! ------------------
+	! The home page layout supports all customization that is supported by a Page,
+	! except what is specified under Subtitle, Description and Fonts. 
+	
+	! In addition, the following customizations applies only to home page:
+	! Color for home page link description (default is UI forms TITLE color, which is 
+	! a system color) 
+	! -------------------------------------
+	<homePageId>.hover-text.fg = #rrggbb hex
+
+
+	! Default icons for links in the navigation bar which is added to each page
+	! -------------------------------------------------------------------------
+	<homePageId>.small-link-icon = <relative file name>
+	<homePageId>.small-hover-icon = <relative file name>
+
+	! Icon for a given link in the Home Page, and its corresponding link in 
+	! the navigation bar 
+	! ----------------------------------------------------------------------
+	<homePageId>.<linkId>.link-icon = <relative file name>
+	<homePageId>.<linkId>.hover-icon = <relative file name>
+	<homePageId>.<linkId>.small-link-icon = <relative file name>
+	<homePageId>.<linkId>.small-hover-icon = <relative file name>
+
+
+
+
+! Page settings
+! -------------
+! Note: in any of the page settings, if the <pageId> is omitted and the 
+! property starts with a ".", then this property applies to this whole page,
+! and to any page that inherits the properties of this page. So in effect,
+! this property becomes like a shared property.
+!
+! A short form of the property that uses element id can be used:
+! <pageId>.<elementId>.property = value
+! Use this for elements that do not have fixed path (when late target
+! path resolution is used).
+ 
+	! Flag to display link description in a given page. Default is true.
+	<pageId>.show-link-description = true/false
+	.show-link-description = true/false
+	
+	! Flag to display Root page navigation links in a given page. Default is true.
+	<pageId>.show-home-page-navigation = true/false
+	.show-home-page-navigation = true/false
+
+	! Layout:
+	! -------
+	! Number of columns in this page or group.
+	<pageId>.layout.ncolumns = <integer>
+	<pageId>.<path_to_group>.layout.ncolumns = <integer>
+	
+	! Equal width of columns
+	<pageId>.<path_to_group>.layout.equalWidth = true/false	
+	
+	! vertical/horizantal spacing of all objects in a given page or group.
+	<pageId>.<path_to_group>.layout.vspacing = <integer>
+	<pageId>.<path_to_group>.layout.hspacing = <integer>
+	
+	! Number of columns/rows an element spans in its group or page.
+	<pageId>.<path_to_element>.layout.colspan = <integer>
+	<pageId>.<path_to_element>.layout.rowspan = <integer>
+
+	
+	! Icons:
+	! ------
+	! default icon/hover icon used for all links in the page.
+	<pageId>.link-icon = <relative file name>
+	<pageId>.hover-icon = <relative file name>
+	
+	! icon/hover icon for specific link/Image link.
+	<pageId>.<path_to_link>.link-icon = <relative file name>
+	<pageId>.<path_to_link>.hover-icon = <relative file name>
+	
+
+	! Sub Title:
+	! ----------
+	! The path of the child Text element that will be used as subtitle of this page.
+	! (Can only be a child Text element)
+	<pageId>.subtitle-id = <path to subtitle child>
+	
+	! The style id of the direct child Text element that will be used as subtitle of any page. 
+	! It would be used if a specific id has not been specified at the page. 
+	! (Can only be a child Text element)
+	subtitle-style-id = <style id of child subtitle Text element>
+
+
+	! Description:
+	! ------------
+	! The path of the child Text element that will be used as description of this page. 
+	! (Can only be a child Text element)
+	<pageId>.description-id = <path to child description Text element>
+
+	! The path of the child Text element that will be used as description of this group. 
+	! (Can only be a child Text element)
+	<pageId>.<path_to_group>.description-id = <path to child description Text element>
+	
+	! The style id of the direct child Text element that will be used as description of any 
+	! page or any group. It would be used if a specific id has not been specified at the page 
+	! or group level. (Can only be a child Text element)
+	description-style-id = <style id of child description Text element>
+
+	
+	! Page elements Font:
+	! -------------------
+	! Set the color for a specific Text or Group label. If applied to a group the label of 
+	! the group gets the color and not the description text. To color description text, 
+	! set its color explicitly.
+	! note: it is not recommended to set the color of a link because it changes the 
+	! theme of the link colors.
+	<pageId>.<path_to_element>.font.fg = #rrggbb hex
+	
+	! make a Text element bold. Note that if the Text string itself has any formatting
+	! tags like <b> and <li> then this bold property is ignored.
+	<pageId>.<path_to_text>.font.bold = true/false
+	
+	! The style id that will make any Text element bold. It would be used if that Text element 
+	! does not have a bold property explicitly set.
+	bold-style-id = <style id of child subtitle Text element>
+	
+	! Color for separator elements:
+	<pageId>.separator.fg = #rrggbb hex
+</pre>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal.htm
index 4edeb33..4ef0622 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Universal intro</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_contributing.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_contributing.htm
index a743edd..5fe7b6e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_contributing.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_contributing.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Contributing to universal intro</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_defaults.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_defaults.htm
index fb18645..7885149 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_defaults.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_defaults.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Configuring product defaults</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_extending.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_extending.htm
index 140065c..e76fc70 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_extending.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_extending.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Extending the universal intro</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_links.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_links.htm
index be8fc95..bdccf44 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_links.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_links.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Managing links</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_preference.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_preference.htm
index adc0a23..e08873e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_preference.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_universal_preference.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Adding the preference page</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_xhtml.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_xhtml.htm
index 42cf4e8..192d859 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_xhtml.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_intro_xhtml.htm
@@ -1,44 +1,31 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
 <title>Using XHTML as intro content</title>
 </head>
 <body>
 
 <h2>Using XHTML as intro content</h2>
 
-<p>Depending on the usage scenario of the intro framework,  XHTML files can be contributed as intro content. <span id="tooltip1" style="position: relative; display:none;" onclick="FP_changeProp(/*id*/'tooltip1',0,'style.display','none')"> <font color="#0000FF" style="cursor: hand;">(A reformulation of the three HTML 4 document types as applications of XML 1.0. For M5, only XHTML 1.0 is supported. XHTML 1.1 (module-based XHTML) can be supported, based on fee</font></span>The idea is to use the fact that XHTML is well formed XML and parse each document, manipulating the DOM to allow for contributions and extensions to be merged. Three xml elements from the 3.0 intro markup where used to extend the XHTML 1.0 element list. These where <code>include</code>, <code>anchor</code>, and <code> contentProvider</code>. </p>
-<ul>
-  <li> <code><b>include</b>: </code>this element can be added to a valid XHTML document to include content from another XHTML document. The content to be included must be a valid XHTML snippet.</li>
-</ul>
-<blockquote>
-  <dl>
-    <dd>e.g.: <code><include path="root/foo" /></code> will include an element with id <code>foo</code> from a welcome page with id <code>root</code>. </dd>
-  </dl>
-</blockquote>
-<ul>
-  <li> <code><b>anchor</b>: </code>this element can be added to a valid XHTML document to declare that content can be contributed to this page by other welcome contributions. A page declares locations that are suitable to be extended by defining these anchor points.</li>
-</ul>
-<blockquote>
-  <dl>
-    <dd>e.g.: <code><anchor id="anchor1" /></code> will allow for contribution into this page from other plugins. </dd>
-  </dl>
-</blockquote>
-<ul>
-  <li><code><b>contentProvider</b>: </code>this element can be added to a valid XHTML document to establish a hook into the workbench. When the intro framework encounters this element, an interface is called allowing for the manipulation of the DOM of the XHTML page.    </li>
-</ul>
+<p>Depending on the usage scenario of the intro framework,  XHTML files can be contributed as intro content. 
+The idea is to use the fact that XHTML is well formed XML and parse each document, manipulating the DOM to allow for contributions and extensions to be merged. Three xml elements from the 3.0 intro markup where used to extend the XHTML 1.0 element list. These are <code>include</code>, <code>anchor</code>, and <code> contentProvider</code>:</p>
 <dl>
-  <dd>
-    <dl>
-      <dd>e.g.: <code><contentProvider id="contentProviderId" class="org.eclipse.ui.intro.template2.IntroXHTMLContentProvider" pluginId="org.eclipse.ui.intro.template2"> </contentProvider> <br>
+  <dt><b><code>include</code></b>:</dt>
+  <dd>This element can be added to a valid XHTML document to include content from another XHTML document. The content to be included must be a valid XHTML snippet.
+  <br>e.g.: <code><include path="root/foo" /></code> will include an element with id <code>foo</code> from a welcome page with id <code>root</code>.<br></dd>
+
+  <dt><br><b><code>anchor</code></b>:</dt>
+  <dd>This element can be added to a valid XHTML document to declare that content can be contributed to this page by other welcome contributions. A page declares locations that are suitable to be extended by defining these anchor points.
+  <br>e.g.: <code><anchor id="anchor1" /></code> will allow for contribution into this page from other plugins.</dd>
+
+  <dt><br><b><code>contentProvider</code></b>:</dt>
+  <dd>This element can be added to a valid XHTML document to establish a hook into the workbench. When the intro framework encounters this element, an interface is called allowing for the manipulation of the DOM of the XHTML page.   
+  <br>e.g.: <code><contentProvider id="contentProviderId" class="org.eclipse.ui.intro.template2.IntroXHTMLContentProvider" pluginId="org.eclipse.ui.intro.template2"> </contentProvider> <br>
       </code> will allow for dynamic content to be generated from the <code> org.eclipse.ui.intro.template2.IntroXHTMLContentProvider</code> class.</dd>
-    </dl>
-  </dd>
 </dl>
 <p>With these three elements, XHTML pages can be used to assemble a pluggable and dynamic welcome pages, just like what used to happen with the custom intro xml markup. PDE has a new template that allow for the creation of a sample RCP application with an Intro. That template is a good sample project for using Intro. </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling.htm
index a2a0e22..bbb2cb7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Status handling</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_defining.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_defining.htm
index ceb7b21..93d2d3f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_defining.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_defining.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Defining a product status handler</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_sample.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_sample.htm
index a847629..4dbce42 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_sample.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/ua_statushandling_sample.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Contributing a sample handler</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_activities.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_activities.htm
index c17385b..12ed038 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_activities.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_activities.htm
@@ -2,7 +2,7 @@
 
 <html lang="en">
 <head>
-  <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page. Portions contributed by Jan-Hendrik Diederich (bug 228956).">
+  <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page. Portions contributed by Jan-Hendrik Diederich (bug 228956).">
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -45,8 +45,8 @@
   contributions associated with that activity are shown. When a activity is
   disabled in the platform, its UI contributions are not shown. Users
   can enable and disable these conventional activities as needed using
-  the <A class=command-link href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.sdk.capabilities)")'  org.eclipse.ui.window.preferences(preferencePageId="org.eclipse.sdk.capabilities)")'"" preferencepageid='org.eclipse.sdk.capabilities)")&apos;"' org.eclipse.ui.window.preferences="" ><IMG height=32 src="PLUGINS_ROOT/org.eclipse.help/command_link.png" width=28 alt="Command link"> <b>General >        
-  Capabilities</b></a> preference page.
+  the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.sdk.capabilities)")'>
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" width="28" height="32" alt="Command link"> <b>General > Capabilities</b></a> preference page.
   <p>Certain user
   operations serve as <b>trigger points</b> for enabling an activity. For
   example, creating a new Java project could trigger the enabling of the Java
@@ -344,19 +344,19 @@ if (enabledIds.add("org.eclipse.javaDevelopment"))
 <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ui.PlatformUI;</font><br>
 <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ui.handlers.IHandlerService;</font><br>
 <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ui.services.IEvaluationService;</font><br>
-<font color="#ffffff"></font><br>
+<br>
 <font color="#7f0055"><b>public class </b></font><font color="#000000">RightsSourceProvider </font><font color="#7f0055"><b>extends </b></font><font color="#000000">AbstractSourceProvider </font><font color="#000000">{</font><br>
 
-<font color="#ffffff"></font><br>
+<br>
 <font color="#ffffff">  </font><font color="#7f0055"><b>public final static </b></font><font color="#000000">String RIGHT_FORBIDDEN = <font color="#2a00ff">"grantShowForbidden"</font><font color="#000000">;</font></font><br>
-<font color="#ffffff"></font><br>
+<br>
 <font color="#ffffff">  </font><font color="#7f0055"><b>public final static </b></font><font color="#000000">String RIGHTS_VARIABLE = </font><font color="#2a00ff">"rightsVariable"</font><font color="#000000">;</font><br>
 
 <font color="#ffffff">  </font><font color="#7f0055"><b>private final static </b></font><font color="#000000">String</font><font color="#000000">[] </font><font color="#000000">PROVIDED_SOURCE_NAMES = </font><font color="#7f0055"><b>new </b></font><font color="#000000">String</font><font color="#000000">[] { </font><font color="#000000">RIGHTS_VARIABLE </font><font color="#000000">}</font><font color="#000000">;</font><br>
-<font color="#ffffff"></font><br>
+<br>
 <font color="#ffffff">  </font><font color="#7f0055"><b>private final static </b></font><font color="#000000">Map<String, List<String>> stateMap = </font><font color="#7f0055"><b>new </b></font><font color="#000000">HashMap<String, List<String>></font><font color="#000000">()</font><font color="#000000">;</font><br>
 
-<font color="#ffffff"></font><br>
+<br>
 <font color="#ffffff">  </font><font color="#7f0055"><b>public </b></font><font color="#000000">Map getCurrentState</font><font color="#000000">() {<BR>    <FONT 
 color="#008000">/* "YourRightsHandler" is here just an example for a 
 static class<BR>     * which returns the list of 
@@ -382,4 +382,4 @@ controlled, gets updated too. */</FONT><br>
    
 </body>
 
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_perspectiveExtension.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_perspectiveExtension.htm
index 5b7469a..6d9caf0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_perspectiveExtension.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_advext_perspectiveExtension.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>org.eclipse.ui.perspectiveExtensions</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -100,7 +100,7 @@ indicates that another perspective (specified by <b>id</b>)
 should be added to the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Open Perspective...</b></a>
 
 menu of the target
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSetPartAssociations.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSetPartAssociations.htm
index cb3d32d..cba9a05 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSetPartAssociations.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSetPartAssociations.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Action set part associations</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -28,7 +28,7 @@ particular view or editor is active.   </P>
 appearance of action sets using
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Customize Perspectives...</b></a>
 
 in
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSets.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSets.htm
index ffc1e02..1161549 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSets.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_actionSets.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>org.eclipse.ui.actionSets</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -25,7 +25,7 @@ extension point. In order to reduce the clutter that would be caused by having e
 You can see which action sets have been contributed to your workbench by choosing
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Customize Perspective...</b></a>
 
 from the workbench menu. This option will show you a dialog that lists
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_views.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_views.htm
index 5c15592..e72a8d3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_views.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_basicext_views.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>org.eclipse.ui.views</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -63,7 +63,7 @@ Let's look at the <b>ReadmeSectionsView</b>. You can show any view in the
 workbench by choosing
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other...</b></a>
 
 and selecting the view from the <b>Show View</b> list.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd.htm
old mode 100644
new mode 100755
index d067dbe..37236d8
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -33,11 +33,11 @@ and views has already been covered in the readme example in
    class="XRef">Basic workbench extension points using actions</a>.
 </p>
 
-<img src="images/contributions_window.png">
+<img src="images/contributions_window.png" alt="Picture of the workbench, showing the contributions">
 <p>
 You can show any view in the workbench by choosing
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other...</b></a>
 and selecting the view from the <b>Show View</b> list.  Use this to select the Info View from
 the View Contributions category.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_bindings.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_bindings.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_commands.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_commands.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_expressions.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_expressions.htm
old mode 100644
new mode 100755
index 3503a25..d421b62
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_expressions.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_expressions.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006,2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Workbench Core Expressions</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_handlers.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_handlers.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_menus.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_menus.htm
old mode 100644
new mode 100755
index ff83ba8..7be0ed3
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_menus.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_cmd_menus.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006,2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>org.eclipse.ui.menus</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -97,7 +97,7 @@ Our <b>locationURI</b> marks this contribution for the org.eclipse.ui.examples.c
 view. Here we are adding 3 commands to the InfoView dropdown menu: Count Entries,
 Edit, and Refresh.
 </p>
-<img src="images/contributions_view_dropdown.png" >
+<img src="images/contributions_view_dropdown.png" alt="Picture of the Info View's view menu">
 <p>Although you can specify a <b>label</b> in the menu
 contribution <command/> element, if you don't we will use the <b>name</b>
 attribute from the 
@@ -181,7 +181,7 @@ that checks contexts to see if the action set is active.  See the <a href="workb
 class="XRef">org.eclipse.ui.handlers</a> section for other examples of core
 expressions. 
 </p>
-<img src="images/contributions_global.png">
+<img src="images/contributions_global.png" alt="Picture of 'Global Menu' main menu">
 <p>
 Now we can add our command to the main menu:</p>
 <pre>
@@ -238,7 +238,7 @@ element will evaluate the body of the previously defined inGlobalActionSet
 core expression.  The <separator/> element adds and additions group
 that can be used by other contributions.  We are also creating a toolbar
 in the main coolbar (org.eclipse.ui.main.toolbar) and placing a our command
-in it with the sample.gif <img src="images/sample.gif"> icon.
+in it with the sample.gif <img src="images/sample.gif" alt="sample.gif icon"> icon.
 </p>
 <p>
 Other contributions can now contribute to the "Global Menu"
@@ -248,7 +248,7 @@ menu:org.eclipse.ui.examples.contributions.menus.globalMenu?after=additions.
 <p>
 Currently, commands contributed to action sets don't show up in the 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Customize Perspective...</b></a> dialog.
 </p>
 
@@ -327,7 +327,7 @@ our Refresh command to the Info View popup as a convenience.  Because we didn't
 To contribute a command to a popup if its selection matches a particular object type you
 can use the default variable, or for behaviour closest to <b>org.eclipse.ui.popupMenus</b>
 target a specific popup selection variable.  Here's an example using the context menu
-selection provider.  This just effects the popup menu visibility, not the command
+selection provider.  This just affects the popup menu visibility, not the command
 enabled state.</p>
 <pre>
       <menuContribution
@@ -349,7 +349,7 @@ enabled state.</p>
       </menuContribution>
 </pre>
 
-<img src="images/contributions_popup.png" >
+<img src="images/contributions_popup.png" alt="Picture of context menu contribution">
 <p>
 Using <iterate><adapt type="Person"/></iterate> is
 the core expression equivalent of the old <b>objectClass</b> attribute.
@@ -376,7 +376,7 @@ For this example we've contributed a simple trim widget that simply displays a s
 and an indication of which side the trim is currently docked on.
 </p>
 <p>
-<img src="images/readmetrim.png" alt="" border="0">
+<img src="images/readmetrim.png" border="0" alt="Picture of trim contribution">
 </p>
 <p>
 Let's take a look at the extension point definition used to contribute this piece of trim:
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_perspectives.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_perspectives.htm
index 6d98131..2e5be8f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_perspectives.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_perspectives.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Perspectives</TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
@@ -21,7 +21,7 @@ We've already seen some ways the workbench allows the user to control the appear
 <b>Window >Show View</b> menu. Action sets can be hidden or shown using the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Customize Perspective...</b></a>
 
 menu. These features help the user organize the workbench. </P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling.htm
index 634042a..bd29896 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Status handling</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling_defining.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling_defining.htm
index 7754b68..6587abe 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling_defining.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/workbench_statushandling_defining.htm
@@ -2,13 +2,12 @@
 <html lang="en">
 <head>
 <meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1"
 	type="text/css">
-<script language="JavaScript"
-	src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"  type="text/javascript"></script>
 <title>Defining a status handler</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_commands_handlers.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_commands_handlers.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_efs_resources.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_efs_resources.htm
index 7aa7548..dd1e105 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_efs_resources.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_efs_resources.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -22,7 +22,7 @@ User interface support for alternative file systems
   </code>extension point. The class attribute of these schema must be a<code> 
   org.eclipse.ui.ide.fileSystem.FileSystemContributor</code> which is used to 
   supply validation and browsing of the other file systems.</p>
-<p><img src="images/efs-newProject.png" ></p>
+<p><img src="images/efs-newProject.png" alt="Picture of the 'New Project' wizard"></p>
 <p><strong>Figure 1. New Project wizard with support for selecting alternative 
   file systems</strong></p>
 <p>Above is the new Project wizard showing the extra support for multiple file 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_encoding.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_encoding.htm
index 3ae92ea..567acca 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_encoding.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_encoding.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Text file encoding
 </TITLE>
@@ -36,7 +36,7 @@ files with another team.</p>
 <p>For this reason, the workbench defines its own encoding profile that is specified 
   by the user in the <b>Preferences</b> dialog.  Users may choose from the 
   available encoding choices in the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'> 
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"> <b>General > Workspace</b></a> 
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"> <b>General > Workspace</b></a> 
   preference page or type in their own encoding.  Plug-ins that interpret 
   text files, such as editors and builders, should consult the workbench encoding 
   preference rather than assume that the installed operating system encoding is 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_keyBindings_accelConfig.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_keyBindings_accelConfig.htm
index 9f1bc9b..e24c5c5 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_keyBindings_accelConfig.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_keyBindings_accelConfig.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>
 Schemes
 </TITLE>
@@ -25,7 +25,7 @@ Schemes
   is active using the
   
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Keys</b>  </a>
   
   preference page.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_marker_support.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_marker_support.htm
index f805564..683ece7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_marker_support.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_marker_support.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 <meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -49,22 +49,21 @@ currently selected.
 <p>The Problems view supports multiple configurations at once. When
 multiple configurations are enabled there are two possible modes of
 matching: <i>match any</i> (any marker that matches one or more selected
-filters will be displayed) or <i>match all</i>(any marker that matches all
+filters will be displayed) or <i>match all</i> (any marker that matches all
 selected filters will be displayed). New configurations can be added
 using the <tt>markerFieldConfiguration</tt> element or manually by the
 user. Below is the configuration section of the Problems view showing
 user configurations and configurations added via the extension point).</p>
-<p><img src="images/problems_view_filters.png"></p>
+<p><img src="images/prbfil.png" alt="Picture of Problems view's 'Configure Contents' dialog"></p>
 <p><strong>Groups</strong></p>
 <p>Markers can be grouped in two ways. The first way is to group
 marker types into groups using the <code>markerTypeCategory</code>
 element. This is shown when the user selects <b>Group By > Type</b>.
-Below is an example showing Java Problems and some using a test
-grouping.</p>
-<p><img src="images/problems_view_groupByType.png"></p>
+Below is an example that shows grouping by 'Java Problem Type':</p>
+<p><img src="images/prob.png" alt="Picture of Problems view showing grouping by type"></p>
 <p>When marker types are grouped together they will be shown in
 those groups in the configurations dialog.</p>
-<p><img src="images/problems_view_markerTypeCat.png"></p>
+<p><img src="images/problems_view_markerTypeCat.png" alt="Picture of Problems view's 'Configure Contents' dialog"></p>
 <p>You can also create your own grouping using the <code>markerGrouping</code>
 element, which will show up as an extra entry in the <b>Group By</b>
 menu of the markers view it is defined in. Top level markerGroupings are
@@ -78,7 +77,6 @@ on the <a
 Below is the Group By menu with the extra <code>markerGroupings</code>
 that have been added. The Problems view is currently grouped by
 severity.</p>
-<p><img src="images/problemsview_groups.png"></p>
-<p></p>
+<p><img src="images/problemsview_groups.png" alt="Picture of the Problems view's 'Group By' view menu"></p>
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_markerresolution.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_markerresolution.htm
index 7b45ab8..ba1d497 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_markerresolution.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_markerresolution.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -52,7 +52,7 @@ add other matching problems to the list of problems to fix, and then apply all
 fixes in one go.  To support multiple resolutions, your implementation of <a href="../reference/api/org/eclipse/ui/IMarkerResolution.html">IMarkerResolution</a> 
 must be a subclass of <a href="../reference/api/org/eclipse/ui/views/markers/WorkbenchMarkerResolution.html">WorkbenchMarkerResolution</a>.
 </p>
-<p><img src="images/quickfix.png"></p>
+<p><img src="images/quickfix.png" alt="Picture of 'Quick Fix' dialog"></p>
 
 </BODY>
 </HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_services.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_services.htm
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_workingsets.htm b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_workingsets.htm
index e785452..920e37e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_workingsets.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/guide/wrkAdv_workingsets.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -37,7 +37,7 @@ you should support working sets.  <b><a href="../reference/api/org/eclipse/
 API.</p>
 <pre>IWorkingSetManager manager = workbench.getWorkingSetManager();</pre>
 <p><b><a href="../reference/api/org/eclipse/ui/IWorkingSetManager.html">IWorkingSetManager</a>
-</b>allows you to<b> </b>manipulate and create working sets:</p>
+</b>allows you to manipulate and create working sets:</p>
 <ul>
   <li><b>createWorkingSetSelectionDialog</b> - returns a working set dialog that shows the user the current working
   sets. You can get the selected working sets from the dialog once it is
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/notices.html b/eclipse/plugins/org.eclipse.platform.doc.isv/notices.html
index f2293eb..e0c52f9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/notices.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/notices.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <LINK REL="STYLESHEET" HREF="book.css" CHARSET="ISO-8859-1" TYPE="text/css">
@@ -13,7 +13,7 @@
 <h3>
 <a NAME="Notices"></a>Notices</h3>
 <p>
-The material in this guide is Copyright (c) Eclipse contributors 2000, 2010.
+The material in this guide is Copyright (c) Eclipse contributors 2000, 2011.
 </p>
 <p>
 <a href="about.html">Terms and conditions regarding the use of this guide.</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/platformOptions.txt b/eclipse/plugins/org.eclipse.platform.doc.isv/platformOptions.txt
index 84e5f77..b6cfbdc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/platformOptions.txt
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/platformOptions.txt
@@ -115,16 +115,22 @@
 ;../org.eclipse.update.core/src"
 -d reference/api
 -classpath @rt@
-;../com.ibm.icu_4.2.1.v20100412.jar
-;../com.jcraft.jsch_0.1.41.v200903070017.jar
-;../javax.servlet_2.5.0.v200910301333.jar
-;../org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar
-;../org.apache.lucene.analysis_1.9.1.v20100518-1140.jar
-;../org.apache.lucene_1.9.1.v20100518-1140.jar
+;../com.ibm.icu_4.4.2.v20110208.jar
+;../com.jcraft.jsch_0.1.41.v201101211617.jar
+;../javax.servlet_2.5.0.v201103041518.jar
+;../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar
+;../org.apache.lucene.analysis_2.9.1.v201101211721.jar
+;../org.apache.lucene_2.9.1.v201101211721.jar
+;../org.apache.lucene.core_2.9.1.v201101211721.jar
 ;../org.eclipse.core.runtime.compatibility.auth/@dot
-;../org.eclipse.ecf.provider.filetransfer_3.1.0.v20100906-1425.jar
-;../org.eclipse.ecf.filetransfer_4.0.0.v20100906-1425.jar
-;../org.eclipse.ecf_3.1.0.v20100906-1425.jar
+;../org.eclipse.ecf.provider.filetransfer_3.2.0.v20110531-2218.jar
+;../org.eclipse.ecf.filetransfer_5.0.0.v20110531-2218.jar
+;../org.eclipse.ecf_3.1.300.v20110531-2218.jar
+;../org.eclipse.ecf.ssl_1.0.100.v20110531-2218.jar
+;../org.eclipse.ecf.identity_3.1.100.v20110531-2218.jar
+;../org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.v20110531-2218.jar
+;../org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.v20110531-2218.jar
+;../org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.v20110531-2218.jar
 ;../org.eclipse.equinox.frameworkadmin/@dot
 ;../org.eclipse.equinox.p2.director/@dot
 ;../org.eclipse.equinox.p2.garbagecollector/@dot
@@ -136,10 +142,10 @@
 ;../org.eclipse.osgi.services/@dot
 ;../org.eclipse.osgi/@dot
 ;../org.eclipse.update.ui/@dot
-;../org.mortbay.jetty.server_6.1.23.v201004211559.jar
-;../org.mortbay.jetty.util_6.1.23.v201004211559.jar
-;../org.sat4j.core_2.2.0.v20100429.jar
-;../org.sat4j.pb_2.2.0.v20100429.jar
+;../org.mortbay.jetty.server_6.1.23.v201012071420.jar
+;../org.mortbay.jetty.util_6.1.23.v201012071420.jar
+;../org.sat4j.core_2.3.0.v20110329.jar
+;../org.sat4j.pb_2.3.0.v20110329.jar
 -breakiterator
 -use
 -splitIndex
@@ -152,9 +158,10 @@
 -tag 'Immutable:t'
 -windowtitle "Eclipse Platform API Specification"
 -doctitle "Eclipse Platform API Specification"
--header "<b>Eclipse Platform</b><br>Release 3.6"
--bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) Eclipse contributors and others 2000, 2010. All rights reserved.</p></font>'
--link http://download.oracle.com/javase/1.5.0/docs/api
+-header "<b>Eclipse Platform</b><br>Release 3.7"
+-bottom '<font size="-1"><p><a href="{@docRoot}/../misc/api-usage-rules.html">Guidelines for using Eclipse APIs</a>.</p><p>Copyright (c) Eclipse contributors and others 2000, 2011. All rights reserved.</p></font>'
+-link http://download.oracle.com/javase/1.5.0/docs/api/
+-link http://www.osgi.org/javadoc/r4v43
 -link http://www.osgi.org/javadoc/r4v42
 
 ../org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java
@@ -254,6 +261,7 @@ org.eclipse.equinox.security.storage
 org.eclipse.equinox.security.storage.provider
 
 org.eclipse.help
+org.eclipse.help.base
 org.eclipse.help.browser
 org.eclipse.help.search
 org.eclipse.help.server
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/plugin.xml b/eclipse/plugins/org.eclipse.platform.doc.isv/plugin.xml
index 3d451c5..6768b95 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/plugin.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/plugin.xml
@@ -3,7 +3,7 @@
 <plugin>
 
 <!-- ============================================================================= -->
-<!-- Small library containing a live help action used in doc                             -->
+<!-- Small library containing a live help action used in doc                       -->
 <!-- ============================================================================= -->
     
 <!-- ============================================================================= -->
@@ -37,6 +37,9 @@
       <toc
             file="topics_Samples.xml">
       </toc>
+      <toc
+            file="topics_WhatsNew.xml">
+      </toc>
    </extension>
 
 <!-- ============================================================================= -->
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.4/recommended.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.4/recommended.html
index b0f9faa..ba544a9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.4/recommended.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.4/recommended.html
@@ -53,7 +53,7 @@ p2 can load update sites designed for Update Manager, you can optimize your site
 for p2 by generating p2 metadata for your update site. This metadata contains
 higher fidelity dependency information about the plug-ins and features in your update
 site, allowing for more accurate resolution of dependencies at install-time. See
-<a href="../../guide/p2_metadata_generator.html">Generating p2 metadata</a>
+<a href="../../guide/p2_publisher.html">Generating p2 metadata</a>
 for more details on how to generate p2 metadata for your update site.
 </p>
 <p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.5/incompatibilities.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.5/incompatibilities.html
index 69c14c6..31b7d94 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.5/incompatibilities.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.5/incompatibilities.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
@@ -64,14 +64,14 @@ IResourceChangeEvent.getResource() to determine the scope of the refresh. See <a
 <!-- ############################################## -->
 
 <h2>4. <a name="teamPluginLeaks">Methods and fields that leaks internal types are no longer accessible</a></h2>
-<p><strong>What is affected: </strong>Clients that refer to ModelSynchronizeParticipant#refreshSchedule or call one of:
+<p><strong>What is affected: </strong>Clients that refer to ModelSynchronizeParticipant#refreshSchedule or call one of:</p>
 <ul>
 <li>ThreeWaySynchronizer#flush</li>
 <li>SubscriberParticipant#getRefreshSchedule</li>
 <li>SubscriberParticipant#setRefreshSchedule</li>
 <li>SubscriberParticipant#getSubscriberSyncInfoCollector</li>
 </ul>
-</p>
+
 <p><strong>Description:</strong> In release 3.4 and earlier, ModelSynchronizeParticipant#refreshSchedule 
 and methods mentioned above were made accessible. #refreshSchedule is declared as an internal type 
 and referring it is illegal. Calling the methods was also illegal since attributes or returned parameters 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/incompatibilities.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/incompatibilities.html
index d195fd4..f206a2a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/incompatibilities.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/incompatibilities.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
@@ -98,20 +98,18 @@ work with key bindings when active within a perspective.
 An example of writing a core expression that's similar to an objectContribution can be found at
 <a href="http://wiki.eclipse.org/Menu_Contributions/IFile_objectContribution">IFile objectContribution
 Example</a>.
-<p>
-
-</p>
 
 <!-- ############################################## -->
 
 <h2>6. <a name="spinner">Spinner now allows setting equal minimum and maximum values</a></h2>
-<p><strong>What is affected:</strong> Clients dependent on the setting of a Spinner control's valid range to a single value to fail.</p>
-<p><strong>Description:</strong> Prior to Eclipse 3.6 it was not possible to set a Spinner's range of valid
-integer values to a single value.  This was done in order to be consistent with other range-based controls
-in SWT.  However the case of specifying a single integer value as the valid range for a Spinner is valid,
-so this can now be done.  Clients that were dependent on this case failing now need to check for this
-condition before setting a Spinner's maximum to a value that would match its minimum value (or vice versa),
-and not set the value in such cases.
+<p><strong>What is affected:</strong> Clients that expect setting a single value range on a Spinner control to be disallowed.</p>
+<p><strong>Description:</strong> Prior to Eclipse 3.6, attempts to set a Spinner's value range to a
+single value were not allowed.  This was done in order to be consistent with
+other range-based controls in SWT.  However the case of specifying a single
+integer value as a Spinner's value range is valid, so this is now allowed. 
+Clients that were dependent on this case being disallowed must now check for
+this condition before setting a Spinner's maximum to a value that would match
+its minimum value (or vice versa), and not set the value in such cases.
 </p>
 
 <!-- ############################################## -->
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/recommended.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/recommended.html
index e625a11..a28935b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/recommended.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.6/recommended.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
@@ -20,6 +20,7 @@
   <li><a href="#setDerived">Use IResource#setDerived(boolean, IProgressMonitor)</a></li>
   <li><a href="#createResourceInVirtualFolderException">A new cause of IFile#create and IFolder#create failure</a></li>
   <li><a href="#workbenchWizardFilter">Keywords support in Workbench Wizards</a></li>
+  <li><a href="#getModalDialogShellProvider">Use IWorkbench#getModalDialogShellProvider()</a></li>
 </ol>
 
 <hr>
@@ -43,5 +44,10 @@ when <code>#create</code> may fail, should handle the case by showing a new erro
 As of 3.6, the New/Import/Export wizards support the org.eclipse.ui.keywords extension. It is recommended to add keywords and associate
 with these wizards, so that the users can easily filter</p>
 
+<h2>4. <a name="getModalDialogShellProvider">Use IWorkbench#getModalDialogShellProvider()</a></h2>
+<p>
+To get the best possible parent shell for modal dialogs, use <code>IWorkbench#getModalDialogShellProvider()</code>.
+</p>
+
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/faq.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/faq.html
new file mode 100644
index 0000000..9c8782b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/faq.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<title>Eclipse 3.7 Plug-in Migration FAQ</title>
+</head>
+
+<body>
+
+<h1>Eclipse 3.7 Plug-in Migration FAQ</h1>
+
+<ol>
+	<li>None</li>
+</ol>
+
+<hr>
+
+<!-- ############################################## -->
+<!-- <h2><a name="item1">Item 1</a></h2>
+<p>
+</p>
+-->
+
+<!-- ############################################## -->
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/incompatibilities.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/incompatibilities.html
new file mode 100644
index 0000000..3bfe4da
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/incompatibilities.html
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<title>Incompatibilities between Eclipse 3.6 and 3.7</title>
+</head>
+<body>
+<h1>Incompatibilities between Eclipse 3.6 and 3.7</h1>
+
+<p>
+  Eclipse changed in incompatible ways between 3.6 and 3.7 in ways that affect 
+  plug-ins. The following entries describe the areas that changed and provide 
+  instructions for migrating 3.7 plug-ins to 3.7. Note that you only need to look 
+  here if you are experiencing problems running your 3.6 plug-in on 3.7.
+</p>
+
+<ol>
+	<li><a href="#luceneVersion">Apache Lucene version change to 2.9.1</a></li>
+	<li><a href="#browserFunction">BrowserFunction now maps Java <code>null</code> to Javascript <code>null</code></a></li>
+	<li><a href="#profileChangeOperation">Method <code>ProfileChangeOperation#getProfileChangeRequest</code> now returns <code>IProfileChangeRequest</code></a></li>
+</ol>
+
+<hr>
+
+<!-- ############################################## -->
+<h2>1. <a name="luceneVersion">Apache Lucene version change to 2.9.1</a></h2>
+<p><strong>What is affected:</strong> Clients that directly reference classes from Apache Lucene</p>
+<p><strong>Description:</strong> org.eclipse.help.base has a dependency on the Lucene bundles org.apache.lucene and
+ org.apache.lucene.analysis both of which are reexported. In release 3.7 the version of the Lucene bundled with the Eclipse platform
+ increased from version 1.9.1 to 2.9.1 creating a potential binary incompatibility for clients that 
+ consume the classes which were reexported from Lucene. 
+
+
+ A rebuild from source is required for any bundles
+ that have a dependency to org.eclipse.help.base and reference the reexported Lucene classes.
+ </p>
+  
+A number of classes have been removed from org.apache.lucene between versions 1.9.1 and 2.9.1. If you are using any of these consult the documentation 
+at <a href="http://lucene.apache.org/">lucene.apache.org</a> for information about how to recode. The classes below were removed.
+<ul>
+<li>org.apache.lucene.search.DisjunctionSumScorer</li>
+<li>org.apache.lucene.analysis.standard.FastCharStream</li>
+<li>org.apache.lucene.analysis.standard.CharStream</li>
+<li>org.apache.lucene.analysis.standard.StandardTokenizerConstants</li>
+<li>org.apache.lucene.analysis.de.WordlistLoader</li>
+<li>org.apache.lucene.store.InputStream</li>
+<li>org.apache.lucene.search.DateFilter</li>
+<li>org.apache.lucene.analysis.standard.ParseException</li>
+<li>org.apache.lucene.analysis.standard.StandardTokenizerTokenManager</li>
+<li>org.apache.lucene.search.PhrasePrefixQuery</li>
+<li>org.apache.lucene.search.RemoteSearchable</li>
+<li>org.apache.lucene.analysis.standard.Token</li>
+<li>org.apache.lucene.search.ReqOptSumScorer</li>
+<li>org.apache.lucene.index.SegmentTermPositionVector</li>
+<li>org.apache.lucene.search.ReqExclScorer</li>
+<li>org.apache.lucene.store.OutputStream</li>
+<li>org.apache.lucene.search.RemoteSearchable_Stub</li>
+<li>org.apache.lucene.analysis.standard.TokenMgrError</li>
+</ul>
+
+<!-- ############################################## -->
+
+<h2>2. <a name="browserFunction">BrowserFunction now maps Java <code>null</code> to Javascript <code>null</code></a></h2>
+<p><strong>What is affected:</strong> Java invocations from Javascript that process the returned value</p>
+<p><strong>Description:</strong> Prior to Eclipse 3.7, BrowserFunction mapped Java's <code>null</code> value to Javascript's
+<code>undefined</code> value.  However this was an incorrect mapping, and as of Eclipse 3.7 this value is now mapped to
+Javascript's <code>null</code> value.  Clients that use BrowserFunction to invoke Java functions from Javascript
+should be aware of this change, and should adjust their Javascript accordingly if they make
+an explicit effort to handle <code>null</code> values returned from Java.
+</p>
+
+<!-- ############################################## -->
+
+<h2>3. <a name="profileChangeOperation">Method <code>ProfileChangeOperation#getProfileChangeRequest</code> now returns <code>IProfileChangeRequest</code></a></h2>
+<p><strong>What is affected:</strong> Callers of the method <code>ProfileChangeOperation#getProfileChangeRequest</code></p>
+<p><strong>Description:</strong> In Eclipse 3.6 the API class <code>ProfileChangeOperation</code> had a method <code>getProfileChangeRequest</code>
+which returned an instance of an <em>internal</em> class <code>ProfileChangeRequest</code>. This internal class was marked as internal
+and <code>@noreference</code>. The method signature has been changed so now <code>ProfileChangeOperation#getProfileChangeRequest</code>
+now returns an instance of the API class <code>IProfileChangeRequest</code>.
+</p>
+
+<!-- ############################################## -->
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/recommended.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/recommended.html
new file mode 100644
index 0000000..3f8ce32
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/3.7/recommended.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
+<title>Adopting 3.7 mechanisms and APIs</title>
+</head>
+
+<body>
+
+<h1>Adopting 3.7 mechanisms and APIs</h1>
+<p>
+  This section describes changes that are required if you are trying to change 
+  your 3.6 plug-in to adopt the 3.7 mechanisms and APIs.
+</p>
+
+<ol>
+  <li><a href="#setRestoreCompletionProposalSize">Use QuickAssistAssistant#setRestoreCompletionProposalSize(IDialogSettings)</a></li>
+  <li><a href="#PropertiesViewPostSelectionListener">Properties view now listens to post selection events</a></li>
+</ol>
+
+<hr>
+
+<!-- ############################################## -->
+
+<h2>1. <a name="setRestoreCompletionProposalSize">Use QuickAssistAssistant#setRestoreCompletionProposalSize(IDialogSettings)</a></h2>
+<p>
+Quick assistants should call <code>QuickAssistAssistant#setRestoreCompletionProposalSize(IDialogSettings)</code> to
+persist the size of quick assist proposal popups.
+</p>
+
+<h2>2. <a name="PropertiesViewPostSelectionListener">Properties view now listens to post selection events</a></h2>
+<p>
+In order to improve performance, the Properties view was updated to listen for post selection events instead of selection events. The change won't impact properly implemented workbench parts. However, selection providers implementing <code>IPostSelectionProvider</code> that combine, process, or re-send selection events must now generate post-selection events for selection sources that don't support <code>IPostSelectionProvider</code>.
+</p>
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/eclipse_3_7_porting_guide.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/eclipse_3_7_porting_guide.html
new file mode 100644
index 0000000..b9a417c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/eclipse_3_7_porting_guide.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Eclipse 3.7 Plug-in Migration Guide</title>
+</head>
+
+<body>
+
+<h1>Eclipse 3.7 Plug-in Migration Guide</h1>
+<p>This guide covers migrating Eclipse 3.6 plug-ins to Eclipse 3.7.</p>
+<p>One of the goals of Eclipse 3.7 was to move Eclipse forward while remaining compatible 
+  with previous versions to the greatest extent possible. That is, plug-ins written 
+  against the Eclipse 3.6 APIs should continue to work in 3.7 in spite of any API changes.</p>
+<p>The key kinds of compatibility are API contract compatibility and binary compatibility. 
+  API contract compatibility means that valid use of 3.6 APIs remains valid for 
+  3.7, so there is no need to revisit working code. Binary compatibility means 
+  that the API method signatures, etc. did not change in ways that would cause 
+  existing compiled ("binary") code to no longer link and run with the 
+  new 3.7 libraries.</p>
+<p>While every effort was made to avoid breakage, there are a few areas of incompatibility or new
+  APIs that should be adopted by clients. 
+  This document describes those areas and provides instructions for migrating 3.6 plug-ins to 
+  3.7.</p>
+<ul>
+  <li><a href="3.7/faq.html">Eclipse 3.7 Plug-in Migration FAQ</a></li>
+  <li><a href="3.7/incompatibilities.html">Incompatibilities between Eclipse 3.6 and 3.7</a></li>
+  <li><a href="3.7/recommended.html">Adopting 3.7 mechanisms and API</a></li>
+</ul>
+
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/removals.html b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/removals.html
index 0c536e1..3566391 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/porting/removals.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/porting/removals.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -34,6 +34,7 @@ There are no API removals planned for the Eclipse project Helios (3.6) release.
  <li><a href="#updateManager">Update Manager</a></li>
  <li><a href="#incrementalProjectBuilder_getRule">IncrementalProjectBuilder#getRule()</a></li>
  <li><a href="#luceneSearchParticipants">luceneSearchParticipants</a></li>
+ <li><a href="#compositeBundles">Composite Bundles</a></li>
 </ol>
 
 <hr>
@@ -118,6 +119,38 @@ For further details or to provide feedback on this change, see <a href="https://
 </p>
 <!-- ############################################## -->
 
+<h3>5. <a name="compositeBundles">Composite Bundles</a></h3>
+<p>
+In the Equinox 3.5 release an implementation of an OSGi provisional API was
+included for composite bundles.  This API includes all classes from the
+<code>org.osgi.service.framework package</code>.  This provisional OSGi API has never been
+considered API by Equinox and as such has always been marked as x-internal.
+</p>
+<p>
+The OSGi Alliance has decided to reject this provisional API.  It will never
+become a part of the official OSGi specification.  Any users of the
+<code>org.osgi.service.framework</code> composite bundle API must migrate to using framework
+hooks to provide additional isolation within a single OSGi framework.  See the
+sub-packages of <code>org.osgi.framework.hooks</code> for ways to control
+visibility and isolation for resolution, bundles and services.  Equinox plans to
+remove the <code>org.osgi.service.framework</code> API and composite bundle implementation
+in the Summer of 2012 (after the 3.8 release).
+</p>
+<p>
+Equinox also has a region digraph implementation that allows for the definition
+and configuration of regions that can be used to isolate bundles.  The region
+digraph is built on top of the standard OSGi framework hooks.
+
+The specific API to be removed includes:
+</p>
+<ul>
 
+<li>The complete org.osgi.service.framework package</li>
+
+</ul>
+<p>
+For further details or to provide feedback on this change, see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345790">bug 345790</a>.
+</p>
+<!-- ############################################## -->
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/questions/index.html b/eclipse/plugins/org.eclipse.platform.doc.isv/questions/index.html
index 4b88742..b0a7924 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/questions/index.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/questions/index.html
@@ -1,12 +1,10 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   
-   <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
    <title>Platform questions index</title>
 </head>
 <body>
@@ -71,7 +69,7 @@ Platform questions index</h1>
     are defined by the workbench UI?</a></li>
   <li><a href="../guide/workbench_menus.htm">How do I add a menu to the
     workbench?</a></li>
-  <li><a HREF="../guide/workbench_menupaths.htm">How do I
+  <li><a href="../guide/workbench_menupaths.htm">How do I
     specify menu and toolbar paths?</a></li>
   <li><a href="../guide/wrkAdv_retarget.htm">How do I implement common actions
     like cut/copy/paste?</a></li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/extension-points/index.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/extension-points/index.html
index 0e91a52..8a50cc3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/extension-points/index.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/extension-points/index.html
@@ -1,255 +1,942 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html lang="en">
-<head>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>Platform Extension Points</title>
-<LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-</head>
-<body link="#0000FF" vlink="#800080">
-
-<center>
-<h1>Platform Extension Points
-</h1></center>
-
-The following extension points can be used to extend the capabilities
-of the platform infrastructure:
-<h3><a name="runtime"></a>Platform runtime</h3>
-<ul>
-  <li><a href="org_eclipse_core_contenttype_contentTypes.html">org.eclipse.core.contenttype.contentTypes</a></li>
-  <li><a href="org_eclipse_core_runtime_adapters.html">org.eclipse.core.runtime.adapters</a></li>
-  <li><a href="org_eclipse_core_runtime_applications.html">org.eclipse.core.runtime.applications</a></li>
-  <li><a href="org_eclipse_core_runtime_contentTypes.html">org.eclipse.core.runtime.contentTypes</a></li>
-  <li><a href="org_eclipse_core_runtime_preferences.html">org.eclipse.core.runtime.preferences</a></li>
-  <li><a href="org_eclipse_core_runtime_products.html">org.eclipse.core.runtime.products</a></li>
-  <li><a href="org_eclipse_equinox_preferences_preferences.html">org.eclipse.equinox.preferences.preferences</a></li>
-</ul>
-<h3><a name="workspace"></a>Workspace</h3>
-<ul>
-  <li><a href="org_eclipse_core_filesystem_filesystems.html">org.eclipse.core.filesystem.filesystems</a></li>
-  <li><a href="org_eclipse_core_resources_builders.html">org.eclipse.core.resources.builders</a>
-  </li>
-   <li><a href="org_eclipse_core_resources_fileModificationValidator.html">org.eclipse.core.resources.fileModificationValidator</a>
-  </li>
-  <li><a href="org_eclipse_core_resources_filterMatchers.html">org.eclipse.core.resources.filterMatchers</a></li>
-  <li><a href="org_eclipse_core_resources_markers.html">org.eclipse.core.resources.markers</a></li>
-  <li><a href="org_eclipse_core_resources_moveDeleteHook.html">org.eclipse.core.resources.moveDeleteHook</a></li>
-  <li><a href="org_eclipse_core_resources_natures.html">org.eclipse.core.resources.natures</a></li>
-  <li><a href="org_eclipse_core_resources_refreshProviders.html">org.eclipse.core.resources.refreshProviders</a></li>
-  <li><a href="org_eclipse_core_resources_teamHook.html">org.eclipse.core.resources.teamHook</a></li>
-  <li><a href="org_eclipse_core_resources_variableResolvers.html">org.eclipse.core.resources.variableResolvers</a></li>
-  <li><a href="org_eclipse_core_resources_filterMatchers.html">org.eclipse.core.resources.filterMatchers</a></li>
-</ul>
-
-<h3><a name="text"></a>Platform Text</h3>
-<ul>
-	<li><a href="org_eclipse_core_filebuffers_annotationModelCreation.html">org.eclipse.core.filebuffers.annotationModelCreation</a></li>
-	<li><a href="org_eclipse_core_filebuffers_documentCreation.html">org.eclipse.core.filebuffers.documentCreation</a></li>
-	<li><a href="org_eclipse_core_filebuffers_documentSetup.html">org.eclipse.core.filebuffers.documentSetup</a></li>
-	<li><a href="org_eclipse_ui_editors_annotationTypes.html">org.eclipse.ui.editors.annotationTypes</a></li>
-	<li><a href="org_eclipse_ui_editors_documentProviders.html">org.eclipse.ui.editors.documentProviders</a></li>
-	<li><a href="org_eclipse_ui_editors_markerAnnotationSpecification.html">org.eclipse.ui.editors.markerAnnotationSpecification</a></li>
-	<li><a href="org_eclipse_ui_editors_markerUpdaters.html">org.eclipse.ui.editors.markerUpdaters</a></li>
-	<li><a href="org_eclipse_ui_editors_templates.html">org.eclipse.ui.editors.templates</a></li>
-	<li><a href="org_eclipse_ui_workbench_texteditor_hyperlinkDetectors.html">org.eclipse.ui.workbench.texteditor.hyperlinkDetectors</a></li>
-	<li><a href="org_eclipse_ui_workbench_texteditor_hyperlinkDetectorTargets.html">org.eclipse.ui.workbench.texteditor.hyperlinkDetectorTargets</a></li>
-	<li><a href="org_eclipse_ui_workbench_texteditor_rulerColumns.html">org.eclipse.ui.workbench.texteditor.rulerColumns</a></li>
-	<li><a href="org_eclipse_ui_workbench_texteditor_quickDiffReferenceProvider.html">org.eclipse.ui.workbench.texteditor.quickDiffReferenceProvider</a></li>
-	<li><a href="org_eclipse_ui_workbench_texteditor_spellingEngine.html">org.eclipse.ui.workbench.texteditor.spellingEngine</a></li>
-</ul>
-
-<h3><a name="workbench"></a>Workbench</h3>
-<ul>
-  <li><a href="org_eclipse_ui_acceleratorConfigurations.html">org.eclipse.ui.acceleratorConfigurations</a></li>
-  <li><a href="org_eclipse_ui_acceleratorScopes.html">org.eclipse.ui.acceleratorScopes</a></li>
-  <li><a href="org_eclipse_ui_acceleratorSets.html">org.eclipse.ui.acceleratorSets</a></li>
-  <li><a href="org_eclipse_ui_actionDefinitions.html">org.eclipse.ui.actionDefinitions</a></li>
-  <li><a href="org_eclipse_ui_actionSetPartAssociations.html">org.eclipse.ui.actionSetPartAssociations</a></li>
-  <li><a href="org_eclipse_ui_actionSets.html">org.eclipse.ui.actionSets</a></li>
-  <li><a href="org_eclipse_ui_activities.html">org.eclipse.ui.activities</a></li>
-  <li><a href="org_eclipse_ui_activitySupport.html">org.eclipse.ui.activitySupport</a></li>
-  <li><a href="org_eclipse_ui_bindings.html">org.eclipse.ui.bindings</a></li>
-  <li><a href="org_eclipse_ui_browser_browsers.html">org.eclipse.ui.browser.browsers</a></li>
-  <li><a href="org_eclipse_ui_browserSupport.html">org.eclipse.ui.browserSupport</a></li>
-  <li><a href="org_eclipse_ui_commands.html">org.eclipse.ui.commands</a></li>
-  <li><a href="org_eclipse_ui_commandImages.html">org.eclipse.ui.commandImages</a></li>
-  <li><a href="org_eclipse_ui_contexts.html">org.eclipse.ui.contexts</a></li>
-  <li><a href="org_eclipse_ui_decorators.html">org.eclipse.ui.decorators</a></li>
-  <li><a href="org_eclipse_ui_dropActions.html">org.eclipse.ui.dropActions</a></li>
-  <li><a href="org_eclipse_ui_editorActions.html">org.eclipse.ui.editorActions</a></li>
-  <li><a href="org_eclipse_ui_editors.html">org.eclipse.ui.editors</a></li>
-  <li><a href="org_eclipse_ui_elementFactories.html">org.eclipse.ui.elementFactories</a></li>
-  <li><a href="org_eclipse_ui_encodings.html">org.eclipse.ui.encodings</a></li>
-  <li><a href="org_eclipse_ui_exportWizards.html">org.eclipse.ui.exportWizards</a></li>
-  <li><a href="org_eclipse_ui_fontDefinitions.html">org.eclipse.ui.fontDefinitions</a></li>
-  <li><a href="org_eclipse_ui_handlers.html">org.eclipse.ui.handlers</a></li>
-  <li><a href="org_eclipse_ui_helpSupport.html">org.eclipse.ui.helpSupport</a></li>
-  <li><a href="org_eclipse_ui_ide_filesystemSupport.html">org.eclipse.ui.ide.filesystemSupport</a></li>
-  <li><a href="org_eclipse_ui_ide_markerHelp.html">org.eclipse.ui.ide.markerHelp</a></li>
-  <li><a href="org_eclipse_ui_ide_markerImageProviders.html">org.eclipse.ui.ide.markerImageProviders</a></li>
-  <li><a href="org_eclipse_ui_ide_markerResolution.html">org.eclipse.ui.ide.markerResolution</a></li>
-  <li><a href="org_eclipse_ui_ide_markerSupport.html">org.eclipse.ui.ide.markerSupport</a></li>
-  <li><a href="org_eclipse_ui_ide_projectNatureImages.html">org.eclipse.ui.ide.projectNatureImages</a></li>
-  <li><a href="org_eclipse_ui_ide_resourceFilters.html">org.eclipse.ui.ide.resourceFilters</a></li>
-  <li><a href="org_eclipse_ui_navigator_linkHelper.html">org.eclipse.ui.navigator.linkHelper</a></li>
-  <li><a href="org_eclipse_ui_navigator_navigatorContent.html">org.eclipse.ui.navigator.navigatorContent</a></li>
-  <li><a href="org_eclipse_ui_navigator_viewer.html">org.eclipse.ui.navigator.viewer</a></li>
-  <li><a href="org_eclipse_ui_importWizards.html">org.eclipse.ui.importWizards</a></li>
-  <li><a href="org_eclipse_ui_installationPages.html">org.eclipse.ui.installationPages</a></li>
-  <li><a href="org_eclipse_ui_intro.html">org.eclipse.ui.intro</a></li>
-  <li><a href="org_eclipse_ui_keywords.html">org.eclipse.ui.keywords</a></li>
-  <li><a href="org_eclipse_ui_menus.html">org.eclipse.ui.menus</a></li>
-  <li><a href="org_eclipse_ui_newWizards.html">org.eclipse.ui.newWizards</a></li>
-  <li><a href="org_eclipse_ui_perspectiveExtensions.html">org.eclipse.ui.perspectiveExtensions</a></li>
-  <li><a href="org_eclipse_ui_perspectives.html">org.eclipse.ui.perspectives</a></li>
-  <li><a href="org_eclipse_ui_popupMenus.html">org.eclipse.ui.popupMenus</a></li>
-  <li><a href="org_eclipse_ui_preferencePages.html">org.eclipse.ui.preferencePages</a></li>
-  <li><a href="org_eclipse_ui_preferenceTransfer.html">org.eclipse.ui.preferenceTransfer</a></li>
-  <li><a href="org_eclipse_ui_presentationFactories.html">org.eclipse.ui.presentationFactories</a></li>
-  <li><a href="org_eclipse_ui_propertiesView.html">org.eclipse.ui.propertiesView</a></li>    
-  <li><a href="org_eclipse_ui_propertyPages.html">org.eclipse.ui.propertyPages</a></li>
-  <li><a href="org_eclipse_ui_services.html">org.eclipse.ui.services</a></li>
-  <li><a href="org_eclipse_ui_splashHandlers.html">org.eclipse.ui.splashHandlers</a></li>
-  <li><a href="org_eclipse_ui_startup.html">org.eclipse.ui.startup</a></li>
-  <li><a href="org_eclipse_ui_statusHandlers.html">org.eclipse.ui.statusHandlers</a></li>
-  <li><a href="org_eclipse_ui_systemSummarySections.html">org.eclipse.ui.systemSummarySections</a></li>
-  <li><a href="org_eclipse_ui_themes.html">org.eclipse.ui.themes</a></li>
-  <li><a href="org_eclipse_ui_viewActions.html">org.eclipse.ui.viewActions</a></li>
-  <li><a href="org_eclipse_ui_views.html">org.eclipse.ui.views</a></li>
-  <li><a href="org_eclipse_ui_views_properties_tabbed_propertyContributor.html">org.eclipse.ui.views.properties.tabbed.propertyContributor</a></li>
-  <li><a href="org_eclipse_ui_views_properties_tabbed_propertySections.html">org.eclipse.ui.views.properties.tabbed.propertySections</a></li>
-  <li><a href="org_eclipse_ui_views_properties_tabbed_propertyTabs.html">org.eclipse.ui.views.properties.tabbed.propertyTabs</a></li>
-  <li><a href="org_eclipse_ui_workingSets.html">org.eclipse.ui.workingSets</a></li>
-</ul>
-<h3><a name="team"></a>Team</h3>
-<ul>
-  <li><a href="org_eclipse_team_core_fileTypes.html">org.eclipse.team.core.fileTypes</a></li>
-  <li><a href="org_eclipse_team_core_ignore.html">org.eclipse.team.core.ignore</a></li>
-  <li><a href="org_eclipse_team_core_projectSets.html">org.eclipse.team.core.projectSets</a></li>
-  <li><a href="org_eclipse_team_core_repository.html">org.eclipse.team.core.repository</a></li>
-  <li><a href="org_eclipse_team_core_storageMergers.html">org.eclipse.team.core.storageMergers</a></li>
-  <li><a href="org_eclipse_team_ui_configurationWizards.html">org.eclipse.team.ui.configurationWizards</a></li>
-  <li><a href="org_eclipse_team_ui_synchronizeParticipants.html">org.eclipse.team.ui.synchronizeParticipants</a></li>
-  <li><a href="org_eclipse_team_ui_synchronizeWizards.html">org.eclipse.team.ui.synchronizeWizards</a></li>
-  <li><a href="org_eclipse_team_ui_teamContentProviders.html">org.eclipse.team.ui.teamContentProviders</a></li>
-  <li><a href="org_eclipse_team_ui_teamDecorators.html">org.eclipse.team.ui.teamDecorators</a></li>
- </ul>
-<h3><a name="debug"></a>Debug</h3>
-<ul>
-  <li><a href="org_eclipse_debug_core_breakpoints.html">org.eclipse.debug.core.breakpoints</a></li>
-  <li><a href="org_eclipse_debug_core_breakpointImportParticipants.html">org.eclipse.debug.core.breakpointImportParticipants</a></li>
-  <li><a href="org_eclipse_debug_core_launchConfigurationComparators.html">org.eclipse.debug.core.launchConfigurationComparators</a></li>
-  <li><a href="org_eclipse_debug_core_launchConfigurationTypes.html">org.eclipse.debug.core.launchConfigurationTypes</a></li>
-  <li><a href="org_eclipse_debug_core_launchDelegates.html">org.eclipse.debug.core.launchDelegates</a></li>
-  <li><a href="org_eclipse_debug_core_launchers.html">org.eclipse.debug.core.launchers</a></li>
-  <li><a href="org_eclipse_debug_core_launchModes.html">org.eclipse.debug.core.launchModes</a></li>
-  <li><a href="org_eclipse_debug_core_logicalStructureProviders.html">org.eclipse.debug.core.logicalStructureProviders</a></li>
-  <li><a href="org_eclipse_debug_core_logicalStructureTypes.html">org.eclipse.debug.core.logicalStructureTypes</a></li>
-  <li><a href="org_eclipse_debug_core_processFactories.html">org.eclipse.debug.core.processFactories</a></li>
-  <li><a href="org_eclipse_debug_core_sourceContainerTypes.html">org.eclipse.debug.core.sourceContainerTypes</a></li>
-  <li><a href="org_eclipse_debug_core_sourceLocators.html">org.eclipse.debug.core.sourceLocators</a></li>
-  <li><a href="org_eclipse_debug_core_sourcePathComputers.html">org.eclipse.debug.core.sourcePathComputers</a></li>
-  <li><a href="org_eclipse_debug_core_statusHandlers.html">org.eclipse.debug.core.statusHandlers</a></li>
-  <li><a href="org_eclipse_debug_core_watchExpressionDelegates.html">org.eclipse.debug.core.watchExpressionDelegates</a></li>
-  <li><a href="org_eclipse_debug_ui_breakpointOrganizers.html">org.eclipse.debug.ui.breakpointOrganizers</a></li>  
-  <li><a href="org_eclipse_debug_ui_consoleColorProviders.html">org.eclipse.debug.ui.consoleColorProviders</a></li>
-  <li><a href="org_eclipse_debug_ui_consoleLineTrackers.html">org.eclipse.debug.ui.consoleLineTrackers</a></li>
-  <li><a href="org_eclipse_debug_ui_contextViewBindings.html">org.eclipse.debug.ui.contextViewBindings</a></li>
-  <li><a href="org_eclipse_debug_ui_debugModelContextBindings.html">org.eclipse.debug.ui.debugModelContextBindings</a></li>
-  <li><a href="org_eclipse_debug_ui_debugModelPresentations.html">org.eclipse.debug.ui.debugModelPresentations</a></li>
-  <li><a href="org_eclipse_debug_ui_detailPaneFactories.html">org.eclipse.debug.ui.detailPaneFactories</a></li>
-  <li><a href="org_eclipse_debug_ui_launchConfigurationTabGroups.html">org.eclipse.debug.ui.launchConfigurationTabGroups</a></li>
-  <li><a href="org_eclipse_debug_ui_launchConfigurationTabs.html">org.eclipse.debug.ui.launchConfigurationTabs</a></li>
-  <li><a href="org_eclipse_debug_ui_launchConfigurationTypeImages.html">org.eclipse.debug.ui.launchConfigurationTypeImages</a></li>
-  <li><a href="org_eclipse_debug_ui_launchGroups.html">org.eclipse.debug.ui.launchGroups</a></li>
-  <li><a href="org_eclipse_debug_ui_launchShortcuts.html">org.eclipse.debug.ui.launchShortcuts</a></li>
-  <li><a href="org_eclipse_debug_ui_memoryRenderings.html">org.eclipse.debug.ui.memoryRenderings</a></li>    
-  <li><a href="org_eclipse_debug_ui_sourceContainerPresentations.html">org.eclipse.debug.ui.sourceContainerPresentations</a></li>
-  <li><a href="org_eclipse_debug_ui_stringVariablePresentations.html">org.eclipse.debug.ui.stringVariablePresentations</a></li>
-  <li><a href="org_eclipse_debug_ui_toggleBreakpointsTargetFactories.html">org.eclipse.debug.ui.toggleBreakpointsTargetFactories</a></li>
-  <li><a href="org_eclipse_debug_ui_variableValueEditors.html">org.eclipse.debug.ui.variableValueEditors</a></li>      
-</ul>
-<h3><a name="console"></a>Console</h3>
-<ul>
-  <li><a href="org_eclipse_ui_console_consoleFactories.html">org.eclipse.ui.console.consoleFactories</a></li>
-  <li><a href="org_eclipse_ui_console_consolePageParticipants.html">org.eclipse.ui.console.consolePageParticipants</a></li>
-  <li><a href="org_eclipse_ui_console_consolePatternMatchListeners.html">org.eclipse.ui.console.consolePatternMatchListeners</a></li>
-</ul>
-<h3><a name="ua"></a>User Assistance</h3>
-<ul>
-  <li><a href="org_eclipse_help_contentExtension.html">org.eclipse.help.contentExtension</a></li>
-  <li><a href="org_eclipse_help_contentProducer.html">org.eclipse.help.contentProducer</a></li>
-  <li><a href="org_eclipse_help_contexts.html">org.eclipse.help.contexts</a></li>
-  <li><a href="org_eclipse_help_criteriaDefinition.html">org.eclipse.help.criteriaDefinition</a></li>
-  <li><a href="org_eclipse_help_criteriaProvider.html">org.eclipse.help.criteriaProvider</a></li>
-  <li><a href="org_eclipse_help_index.html">org.eclipse.help.index</a></li>
-  <li><a href="org_eclipse_help_toc.html">org.eclipse.help.toc</a></li>
-  <li><a href="org_eclipse_help_base_activitySupport.html">org.eclipse.help.base.activitySupport</a></li>
-  <li><a href="org_eclipse_help_base_browser.html">org.eclipse.help.base.browser</a></li>
-  <li><a href="org_eclipse_help_base_luceneAnalyzer.html">org.eclipse.help.base.luceneAnalyzer</a></li>
-  <li><a href="org_eclipse_help_base_luceneSearchParticipants.html">org.eclipse.help.base.luceneSearchParticipants</a></li>
-  <li><a href="org_eclipse_help_base_searchParticipant.html">org.eclipse.help.base.searchParticipant</a></li>
-  <li><a href="org_eclipse_help_base_server.html">org.eclipse.help.base.server</a></li>
-  <li><a href="org_eclipse_help_base_scope.html">org.eclipse.help.base.scope</a></li>
-  <li><a href="org_eclipse_help_ui_searchEngine.html">org.eclipse.help.ui.searchEngine</a></li>
-  <li><a href="org_eclipse_help_webapp_contentFilter.html">org.eclipse.help.webapp.contentFilter</a></li>
-  <li><a href="org_eclipse_help_webapp_frame.html">org.eclipse.help.webapp.frame</a></li>
-  <li><a href="org_eclipse_help_webapp_toolbarButton.html">org.eclipse.help.webapp.toolbarButton</a></li>
-  <li><a href="org_eclipse_help_webapp_view.html">org.eclipse.help.webapp.view</a></li>
-  <li><a href="org_eclipse_ui_cheatsheets_cheatSheetContent.html">org.eclipse.ui.cheatsheets.cheatSheetContent</a></li>
-  <li><a href="org_eclipse_ui_cheatsheets_cheatSheetItemExtension.html">org.eclipse.ui.cheatsheets.cheatSheetItemExtension</a></li>
-  <li><a href="org_eclipse_ui_intro_config.html">org.eclipse.ui.intro.config</a></li>
-  <li><a href="org_eclipse_ui_intro_configExtension.html">org.eclipse.ui.intro.configExtension</a></li>
-</ul>
-<h3><a name="ltk"></a>Language Toolkit</h3>
-<ul>
-  <li><a href="org_eclipse_ltk_core_refactoring_refactoringContributions.html">org.eclipse.ltk.core.refactoring.refactoringContributions</a></li>
-  <li><a href="org_eclipse_ltk_core_refactoring_copyParticipants.html">org.eclipse.ltk.core.refactoring.copyParticipants</a></li>
-  <li><a href="org_eclipse_ltk_core_refactoring_createParticipants.html">org.eclipse.ltk.core.refactoring.createParticipants</a></li>
-  <li><a href="org_eclipse_ltk_core_refactoring_deleteParticipants.html">org.eclipse.ltk.core.refactoring.deleteParticipants</a></li>
-  <li><a href="org_eclipse_ltk_core_refactoring_moveParticipants.html">org.eclipse.ltk.core.refactoring.moveParticipants</a></li>
-  <li><a href="org_eclipse_ltk_core_refactoring_renameParticipants.html">org.eclipse.ltk.core.refactoring.renameParticipants</a></li>
-  <li><a href="org_eclipse_ltk_ui_refactoring_changePreviewViewers.html">org.eclipse.ltk.ui.refactoring.changePreviewViewers</a></li>
-  <li><a href="org_eclipse_ltk_ui_refactoring_statusContextViewers.html">org.eclipse.ltk.ui.refactoring.statusContextViewers</a></li>
-</ul>
-<h3><a name="security"></a>Security</h3>
-<ul>
-  <li><a href="org_eclipse_equinox_security_loginConfigurationProvider.html">org.eclipse.equinox.security.loginConfigurationProvider</a></li>
-  <li><a href="org_eclipse_equinox_security_loginModule.html">org.eclipse.equinox.security.loginModule</a></li>
-  <li><a href="org_eclipse_equinox_security_callbackHandler.html">org.eclipse.equinox.security.callbackHandler</a></li>
-  <li><a href="org_eclipse_equinox_security_callbackHandlerMapping.html">org.eclipse.equinox.security.callbackHandlerMapping</a></li>
-  <li><a href="org_eclipse_equinox_security_secureStorage.html">org.eclipse.equinox.security.secureStorage</a></li>
-</ul>
-<h3><a name="other"></a>Other</h3>
-<ul>
-  <li><a href="org_eclipse_ant_core_antProperties.html">org.eclipse.ant.core.antProperties</a></li>
-  <li><a href="org_eclipse_ant_core_antTasks.html">org.eclipse.ant.core.antTasks</a></li>
-  <li><a href="org_eclipse_ant_core_antTypes.html">org.eclipse.ant.core.antTypes</a></li>
-  <li><a href="org_eclipse_ant_core_extraClasspathEntries.html">org.eclipse.ant.core.extraClasspathEntries</a></li>
-  <li><a href="org_eclipse_compare_contentMergeViewers.html">org.eclipse.compare.contentMergeViewers</a></li>
-  <li><a href="org_eclipse_compare_contentViewers.html">org.eclipse.compare.contentViewers</a></li>
-  <li><a href="org_eclipse_compare_streamMergers.html">org.eclipse.compare.streamMergers</a></li>
-  <li><a href="org_eclipse_compare_structureCreators.html">org.eclipse.compare.structureCreators</a></li>
-  <li><a href="org_eclipse_compare_structureMergeViewers.html">org.eclipse.compare.structureMergeViewers</a></li>
-  <li><a href="org_eclipse_core_expressions_propertyTesters.html">org.eclipse.core.expressions.propertyTesters</a></li>
-  <li><a href="org_eclipse_core_expressions_definitions.html">org.eclipse.core.expressions.definitions</a></li>
-  <li><a href="org_eclipse_core_variables_dynamicVariables.html">org.eclipse.core.variables.dynamicVariables</a></li>
-  <li><a href="org_eclipse_core_variables_valueVariables.html">org.eclipse.core.variables.valueVariables</a></li>
-  <li><a href="org_eclipse_equinox_http_registry_httpcontexts.html">org.eclipse.equinox.http.registry.httpcontexts</a></li>
-  <li><a href="org_eclipse_equinox_http_registry_resources.html">org.eclipse.equinox.http.registry.resources</a></li>
-  <li><a href="org_eclipse_equinox_http_registry_servlets.html">org.eclipse.equinox.http.registry.servlets</a></li>
-  <li><a href="org_eclipse_search_searchPages.html">org.eclipse.search.searchPages</a></li>
-  <li><a href="org_eclipse_search_searchResultSorters.html">org.eclipse.search.searchResultSorters</a></li>
-  <li><a href="org_eclipse_search_searchResultViewPages.html">org.eclipse.search.searchResultViewPages</a></li>
-  <li><a href="org_eclipse_search_textSearchEngine.html">org.eclipse.search.textSearchEngine</a></li>
-  <li><a href="org_eclipse_search_textSearchQueryProvider.html">org.eclipse.search.textSearchQueryProvider</a></li>
-  <li><a href="org_eclipse_ui_externaltools_configurationDuplicationMaps.html">org.eclipse.ui.externaltools.configurationDuplicationMaps</a></li>
-  <li><a href="org_eclipse_update_core_featureTypes.html">org.eclipse.update.core.featureTypes</a></li>
-  <li><a href="org_eclipse_update_core_installHandlers.html">org.eclipse.update.core.installHandlers</a></li>
-  <li><a href="org_eclipse_update_core_siteTypes.html">org.eclipse.update.core.siteTypes</a></li>
-</ul>
-
-</body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>
+      Platform Extension Points
+    </title>
+    <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <style type="text/css">
+/*<![CDATA[*/
+    :link { color: #0000FF }
+    :visited { color: #800080 }
+    h1.c1 {text-align:center}
+    /*]]>*/
+    </style>
+  </head>
+
+  <body>
+    <h1 class="c1">
+      Platform Extension Points
+    </h1>The following extension points can be used to extend the capabilities
+    of the platform infrastructure:
+    <h3>
+      <a name="runtime" id="runtime"></a>Platform runtime
+    </h3>
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_core_contenttype_contentTypes.html">org.eclipse.core.contenttype.contentTypes</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_runtime_adapters.html">org.eclipse.core.runtime.adapters</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_runtime_applications.html">org.eclipse.core.runtime.applications</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_core_runtime_contentTypes.html">org.eclipse.core.runtime.contentTypes</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_runtime_preferences.html">org.eclipse.core.runtime.preferences</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_runtime_products.html">org.eclipse.core.runtime.products</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_equinox_preferences_preferences.html">org.eclipse.equinox.preferences.preferences</a>
+      </li>
+    </ul>
+    <h3>
+      <a name="workspace" id="workspace"></a>Workspace
+    </h3>
+    <ul>
+
+      <li>
+        <a href=
+        "org_eclipse_core_filesystem_filesystems.html">org.eclipse.core.filesystem.filesystems</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_builders.html">org.eclipse.core.resources.builders</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_fileModificationValidator.html">org.eclipse.core.resources.fileModificationValidator</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_filterMatchers.html">org.eclipse.core.resources.filterMatchers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_markers.html">org.eclipse.core.resources.markers</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_core_resources_moveDeleteHook.html">org.eclipse.core.resources.moveDeleteHook</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_natures.html">org.eclipse.core.resources.natures</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_refreshProviders.html">org.eclipse.core.resources.refreshProviders</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_teamHook.html">org.eclipse.core.resources.teamHook</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_resources_variableResolvers.html">org.eclipse.core.resources.variableResolvers</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_core_resources_filterMatchers.html">org.eclipse.core.resources.filterMatchers</a>
+      </li>
+    </ul>
+    <h3>
+      <a name="text" id="text"></a>Platform Text
+    </h3>
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_core_filebuffers_annotationModelCreation.html">org.eclipse.core.filebuffers.annotationModelCreation</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_filebuffers_documentCreation.html">org.eclipse.core.filebuffers.documentCreation</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_filebuffers_documentSetup.html">org.eclipse.core.filebuffers.documentSetup</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_editors_annotationTypes.html">org.eclipse.ui.editors.annotationTypes</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_editors_documentProviders.html">org.eclipse.ui.editors.documentProviders</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_editors_markerAnnotationSpecification.html">org.eclipse.ui.editors.markerAnnotationSpecification</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_editors_markerUpdaters.html">org.eclipse.ui.editors.markerUpdaters</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_editors_templates.html">org.eclipse.ui.editors.templates</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_workbench_texteditor_hyperlinkDetectors.html">org.eclipse.ui.workbench.texteditor.hyperlinkDetectors</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_workbench_texteditor_hyperlinkDetectorTargets.html">org.eclipse.ui.workbench.texteditor.hyperlinkDetectorTargets</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_workbench_texteditor_rulerColumns.html">org.eclipse.ui.workbench.texteditor.rulerColumns</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_workbench_texteditor_quickDiffReferenceProvider.html">org.eclipse.ui.workbench.texteditor.quickDiffReferenceProvider</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_workbench_texteditor_spellingEngine.html">org.eclipse.ui.workbench.texteditor.spellingEngine</a>
+      </li>
+    </ul>
+
+    <h3>
+      <a name="workbench" id="workbench"></a>Workbench
+    </h3>
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_ui_acceleratorConfigurations.html">org.eclipse.ui.acceleratorConfigurations</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_acceleratorScopes.html">org.eclipse.ui.acceleratorScopes</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_acceleratorSets.html">org.eclipse.ui.acceleratorSets</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_actionDefinitions.html">org.eclipse.ui.actionDefinitions</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_actionSetPartAssociations.html">org.eclipse.ui.actionSetPartAssociations</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_actionSets.html">org.eclipse.ui.actionSets</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_activities.html">org.eclipse.ui.activities</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_activitySupport.html">org.eclipse.ui.activitySupport</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_bindings.html">org.eclipse.ui.bindings</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_browser_browsers.html">org.eclipse.ui.browser.browsers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_browserSupport.html">org.eclipse.ui.browserSupport</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_commands.html">org.eclipse.ui.commands</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_commandImages.html">org.eclipse.ui.commandImages</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_contexts.html">org.eclipse.ui.contexts</a>
+      </li>
+      <li>
+
+        <a href="org_eclipse_ui_decorators.html">org.eclipse.ui.decorators</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_dropActions.html">org.eclipse.ui.dropActions</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_editorActions.html">org.eclipse.ui.editorActions</a>
+
+      </li>
+      <li>
+        <a href="org_eclipse_ui_editors.html">org.eclipse.ui.editors</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_elementFactories.html">org.eclipse.ui.elementFactories</a>
+      </li>
+      <li>
+
+        <a href="org_eclipse_ui_encodings.html">org.eclipse.ui.encodings</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_exportWizards.html">org.eclipse.ui.exportWizards</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_fontDefinitions.html">org.eclipse.ui.fontDefinitions</a>
+
+      </li>
+      <li>
+        <a href="org_eclipse_ui_handlers.html">org.eclipse.ui.handlers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_helpSupport.html">org.eclipse.ui.helpSupport</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_ide_filesystemSupport.html">org.eclipse.ui.ide.filesystemSupport</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_ide_markerHelp.html">org.eclipse.ui.ide.markerHelp</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_ide_markerImageProviders.html">org.eclipse.ui.ide.markerImageProviders</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_ide_markerResolution.html">org.eclipse.ui.ide.markerResolution</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_ide_markerSupport.html">org.eclipse.ui.ide.markerSupport</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_ide_projectNatureImages.html">org.eclipse.ui.ide.projectNatureImages</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_ide_resourceFilters.html">org.eclipse.ui.ide.resourceFilters</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_navigator_linkHelper.html">org.eclipse.ui.navigator.linkHelper</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_navigator_navigatorContent.html">org.eclipse.ui.navigator.navigatorContent</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_navigator_viewer.html">org.eclipse.ui.navigator.viewer</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_importWizards.html">org.eclipse.ui.importWizards</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_installationPages.html">org.eclipse.ui.installationPages</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_intro.html">org.eclipse.ui.intro</a>
+
+      </li>
+      <li>
+        <a href="org_eclipse_ui_keywords.html">org.eclipse.ui.keywords</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_menus.html">org.eclipse.ui.menus</a>
+      </li>
+      <li>
+
+        <a href="org_eclipse_ui_newWizards.html">org.eclipse.ui.newWizards</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_perspectiveExtensions.html">org.eclipse.ui.perspectiveExtensions</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_perspectives.html">org.eclipse.ui.perspectives</a>
+
+      </li>
+      <li>
+        <a href="org_eclipse_ui_popupMenus.html">org.eclipse.ui.popupMenus</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_preferencePages.html">org.eclipse.ui.preferencePages</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_preferenceTransfer.html">org.eclipse.ui.preferenceTransfer</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_presentationFactories.html">org.eclipse.ui.presentationFactories</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_propertiesView.html">org.eclipse.ui.propertiesView</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_propertyPages.html">org.eclipse.ui.propertyPages</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_services.html">org.eclipse.ui.services</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_splashHandlers.html">org.eclipse.ui.splashHandlers</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_startup.html">org.eclipse.ui.startup</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_statusHandlers.html">org.eclipse.ui.statusHandlers</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_systemSummarySections.html">org.eclipse.ui.systemSummarySections</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_themes.html">org.eclipse.ui.themes</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_viewActions.html">org.eclipse.ui.viewActions</a>
+      </li>
+      <li>
+        <a href="org_eclipse_ui_views.html">org.eclipse.ui.views</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_views_properties_tabbed_propertyContributor.html">org.eclipse.ui.views.properties.tabbed.propertyContributor</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_views_properties_tabbed_propertySections.html">org.eclipse.ui.views.properties.tabbed.propertySections</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_views_properties_tabbed_propertyTabs.html">org.eclipse.ui.views.properties.tabbed.propertyTabs</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ui_workingSets.html">org.eclipse.ui.workingSets</a>
+      </li>
+    </ul>
+    <h3>
+      <a name="team" id="team"></a>Team
+    </h3>
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_team_core_fileTypes.html">org.eclipse.team.core.fileTypes</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_team_core_ignore.html">org.eclipse.team.core.ignore</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_team_core_projectSets.html">org.eclipse.team.core.projectSets</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_team_core_repository.html">org.eclipse.team.core.repository</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_team_core_storageMergers.html">org.eclipse.team.core.storageMergers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_team_ui_configurationWizards.html">org.eclipse.team.ui.configurationWizards</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_team_ui_synchronizeParticipants.html">org.eclipse.team.ui.synchronizeParticipants</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_team_ui_synchronizeWizards.html">org.eclipse.team.ui.synchronizeWizards</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_team_ui_teamContentProviders.html">org.eclipse.team.ui.teamContentProviders</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_team_ui_teamDecorators.html">org.eclipse.team.ui.teamDecorators</a>
+      </li>
+    </ul>
+    <h3>
+      <a name="debug" id="debug"></a>Debug
+    </h3>
+
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_breakpoints.html">org.eclipse.debug.core.breakpoints</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_breakpointImportParticipants.html">org.eclipse.debug.core.breakpointImportParticipants</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_debug_core_launchConfigurationComparators.html">org.eclipse.debug.core.launchConfigurationComparators</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_launchConfigurationTypes.html">org.eclipse.debug.core.launchConfigurationTypes</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_launchDelegates.html">org.eclipse.debug.core.launchDelegates</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_launchers.html">org.eclipse.debug.core.launchers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_launchModes.html">org.eclipse.debug.core.launchModes</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_debug_core_logicalStructureProviders.html">org.eclipse.debug.core.logicalStructureProviders</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_logicalStructureTypes.html">org.eclipse.debug.core.logicalStructureTypes</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_processFactories.html">org.eclipse.debug.core.processFactories</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_sourceContainerTypes.html">org.eclipse.debug.core.sourceContainerTypes</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_sourceLocators.html">org.eclipse.debug.core.sourceLocators</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_debug_core_sourcePathComputers.html">org.eclipse.debug.core.sourcePathComputers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_statusHandlers.html">org.eclipse.debug.core.statusHandlers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_core_watchExpressionDelegates.html">org.eclipse.debug.core.watchExpressionDelegates</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_breakpointOrganizers.html">org.eclipse.debug.ui.breakpointOrganizers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_consoleColorProviders.html">org.eclipse.debug.ui.consoleColorProviders</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_debug_ui_consoleLineTrackers.html">org.eclipse.debug.ui.consoleLineTrackers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_contextViewBindings.html">org.eclipse.debug.ui.contextViewBindings</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_debugModelContextBindings.html">org.eclipse.debug.ui.debugModelContextBindings</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_debugModelPresentations.html">org.eclipse.debug.ui.debugModelPresentations</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_detailPaneFactories.html">org.eclipse.debug.ui.detailPaneFactories</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_debug_ui_launchConfigurationTabGroups.html">org.eclipse.debug.ui.launchConfigurationTabGroups</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_launchConfigurationTabs.html">org.eclipse.debug.ui.launchConfigurationTabs</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_launchConfigurationTypeImages.html">org.eclipse.debug.ui.launchConfigurationTypeImages</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_launchGroups.html">org.eclipse.debug.ui.launchGroups</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_launchShortcuts.html">org.eclipse.debug.ui.launchShortcuts</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_debug_ui_memoryRenderings.html">org.eclipse.debug.ui.memoryRenderings</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_sourceContainerPresentations.html">org.eclipse.debug.ui.sourceContainerPresentations</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_stringVariablePresentations.html">org.eclipse.debug.ui.stringVariablePresentations</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_toggleBreakpointsTargetFactories.html">org.eclipse.debug.ui.toggleBreakpointsTargetFactories</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_debug_ui_variableValueEditors.html">org.eclipse.debug.ui.variableValueEditors</a>
+      </li>
+    </ul>
+
+    <h3>
+      <a name="console" id="console"></a>Console
+    </h3>
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_ui_console_consoleFactories.html">org.eclipse.ui.console.consoleFactories</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_console_consolePageParticipants.html">org.eclipse.ui.console.consolePageParticipants</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_console_consolePatternMatchListeners.html">org.eclipse.ui.console.consolePatternMatchListeners</a>
+      </li>
+    </ul>
+    <h3>
+      <a name="ua" id="ua"></a>User Assistance
+    </h3>
+    <ul>
+
+      <li>
+        <a href=
+        "org_eclipse_help_contentExtension.html">org.eclipse.help.contentExtension</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_contentProducer.html">org.eclipse.help.contentProducer</a>
+      </li>
+      <li>
+        <a href="org_eclipse_help_contexts.html">org.eclipse.help.contexts</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_criteriaDefinition.html">org.eclipse.help.criteriaDefinition</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_criteriaProvider.html">org.eclipse.help.criteriaProvider</a>
+      </li>
+      <li>
+
+        <a href="org_eclipse_help_index.html">org.eclipse.help.index</a>
+      </li>
+      <li>
+        <a href="org_eclipse_help_toc.html">org.eclipse.help.toc</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_base_activitySupport.html">org.eclipse.help.base.activitySupport</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_base_browser.html">org.eclipse.help.base.browser</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_base_luceneAnalyzer.html">org.eclipse.help.base.luceneAnalyzer</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_help_base_luceneSearchParticipants.html">org.eclipse.help.base.luceneSearchParticipants</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_base_searchParticipant.html">org.eclipse.help.base.searchParticipant</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_base_searchProcessor.html">org.eclipse.help.base.searchProcessor</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_base_server.html">org.eclipse.help.base.server</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_base_scope.html">org.eclipse.help.base.scope</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_help_ui_searchEngine.html">org.eclipse.help.ui.searchEngine</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_webapp_contentFilter.html">org.eclipse.help.webapp.contentFilter</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_webapp_frame.html">org.eclipse.help.webapp.frame</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_webapp_toolbarButton.html">org.eclipse.help.webapp.toolbarButton</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_help_webapp_validatedServlet.html">org.eclipse.help.webapp.validatedServlet</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_help_webapp_view.html">org.eclipse.help.webapp.view</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_cheatsheets_cheatSheetContent.html">org.eclipse.ui.cheatsheets.cheatSheetContent</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_cheatsheets_cheatSheetItemExtension.html">org.eclipse.ui.cheatsheets.cheatSheetItemExtension</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_intro_config.html">org.eclipse.ui.intro.config</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_intro_configExtension.html">org.eclipse.ui.intro.configExtension</a>
+      </li>
+    </ul>
+
+    <h3>
+      <a name="ltk" id="ltk"></a>Language Toolkit
+    </h3>
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_ltk_core_refactoring_refactoringContributions.html">org.eclipse.ltk.core.refactoring.refactoringContributions</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ltk_core_refactoring_copyParticipants.html">org.eclipse.ltk.core.refactoring.copyParticipants</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ltk_core_refactoring_createParticipants.html">org.eclipse.ltk.core.refactoring.createParticipants</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ltk_core_refactoring_deleteParticipants.html">org.eclipse.ltk.core.refactoring.deleteParticipants</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_ltk_core_refactoring_moveParticipants.html">org.eclipse.ltk.core.refactoring.moveParticipants</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ltk_core_refactoring_renameParticipants.html">org.eclipse.ltk.core.refactoring.renameParticipants</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ltk_ui_refactoring_changePreviewViewers.html">org.eclipse.ltk.ui.refactoring.changePreviewViewers</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ltk_ui_refactoring_statusContextViewers.html">org.eclipse.ltk.ui.refactoring.statusContextViewers</a>
+      </li>
+    </ul>
+    <h3>
+      <a name="security" id="security"></a>Security
+    </h3>
+    <ul>
+
+      <li>
+        <a href=
+        "org_eclipse_equinox_security_loginConfigurationProvider.html">org.eclipse.equinox.security.loginConfigurationProvider</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_equinox_security_loginModule.html">org.eclipse.equinox.security.loginModule</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_equinox_security_callbackHandler.html">org.eclipse.equinox.security.callbackHandler</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_equinox_security_callbackHandlerMapping.html">org.eclipse.equinox.security.callbackHandlerMapping</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_equinox_security_secureStorage.html">org.eclipse.equinox.security.secureStorage</a>
+      </li>
+    </ul>
+
+    <h3>
+      <a name="other" id="other"></a>Other
+    </h3>
+    <ul>
+      <li>
+        <a href=
+        "org_eclipse_ant_core_antProperties.html">org.eclipse.ant.core.antProperties</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ant_core_antTasks.html">org.eclipse.ant.core.antTasks</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ant_core_antTypes.html">org.eclipse.ant.core.antTypes</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ant_core_extraClasspathEntries.html">org.eclipse.ant.core.extraClasspathEntries</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_compare_contentMergeViewers.html">org.eclipse.compare.contentMergeViewers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_compare_contentViewers.html">org.eclipse.compare.contentViewers</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_compare_streamMergers.html">org.eclipse.compare.streamMergers</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_compare_structureCreators.html">org.eclipse.compare.structureCreators</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_compare_structureMergeViewers.html">org.eclipse.compare.structureMergeViewers</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_core_expressions_propertyTesters.html">org.eclipse.core.expressions.propertyTesters</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_expressions_definitions.html">org.eclipse.core.expressions.definitions</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_variables_dynamicVariables.html">org.eclipse.core.variables.dynamicVariables</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_core_variables_valueVariables.html">org.eclipse.core.variables.valueVariables</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_equinox_http_registry_httpcontexts.html">org.eclipse.equinox.http.registry.httpcontexts</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_equinox_http_registry_resources.html">org.eclipse.equinox.http.registry.resources</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_equinox_http_registry_servlets.html">org.eclipse.equinox.http.registry.servlets</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_search_searchPages.html">org.eclipse.search.searchPages</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_search_searchResultSorters.html">org.eclipse.search.searchResultSorters</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_search_searchResultViewPages.html">org.eclipse.search.searchResultViewPages</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_search_textSearchEngine.html">org.eclipse.search.textSearchEngine</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_search_textSearchQueryProvider.html">org.eclipse.search.textSearchQueryProvider</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_ui_externaltools_configurationDuplicationMaps.html">org.eclipse.ui.externaltools.configurationDuplicationMaps</a>
+
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_update_core_featureTypes.html">org.eclipse.update.core.featureTypes</a>
+      </li>
+      <li>
+        <a href=
+        "org_eclipse_update_core_installHandlers.html">org.eclipse.update.core.installHandlers</a>
+      </li>
+      <li>
+
+        <a href=
+        "org_eclipse_update_core_siteTypes.html">org.eclipse.update.core.siteTypes</a>
+      </li>
+    </ul>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/api-usage-rules.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/api-usage-rules.html
index 29cbccc..5c280ff 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/api-usage-rules.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/api-usage-rules.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -15,7 +15,7 @@
 <h1>
 Eclipse platform<br>
 API rules of engagement</h1>
-<i><font size=-1>Version 0.15 - Last revised 12:00 May 30, 2001</font></i>
+<i>Version 0.15 - Last revised 12:00 May 30, 2001</i>
 <p>Here are the rules of engagement for clients of the Eclipse platform
 API (and other components).</p>
 <h2>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html
index 96db7bc..0532bc8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html
@@ -2,38 +2,38 @@
 <html lang="en">
 
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2005, 2010. This page is made available under license. Full for details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2005, 2011. This page is made available under license. Full for details see the LEGAL in the documentation book that contains this page." >
 
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>OSGi Bundle Manifest</title>
 </head>
 
-<body lang="EN-US" link=blue vlink=blue style='tab-interval:.5in'>
+<body>
 
-<div class=Section1>
+<div class="Section1">
 
 <h1>OSGi Bundle Manifest Headers</h1>
 
-<p class=MsoNormal><span style='font-size:10.0pt'>Version 3.3 - Last revised May 5, 2008</span></p>
+<p><i>Version 3.3 - Last revised April 27, 2011</i></p>
 
 <p>
 A bundle can carry descriptive information about itself in the manifest file 
-named META-INF/MANIFEST.MF.  The OSGi R4.1 Framework specification defines a set of 
+named META-INF/MANIFEST.MF.  The OSGi R4.3 Framework specification defines a set of 
 manifest headers such as Export-Package and Bundle-Classpath, which bundle developers 
-use to supply descriptive information about a bundle.  The Eclipse OSGi Framework 
-implements the complete OSGi R4.1 Framework specification and all of the Core Framework 
-services. The OSGi R4.1 Core Framework services include the following:</p>
+use to supply descriptive information about a bundle.  The Equinox OSGi Framework 
+implements the complete OSGi R4.3 Framework specification and all of the Core Framework 
+services. The OSGi R4.3 Core Framework services include the following:</p>
 <ul>
-  <li>Package Admin Service Specification</li>
+  <li>Package Admin Service Specification (deprecated) - consider using the new org.osgi.framework.wiring package</li>
   <li>URL Handlers Service Specification</li>
-  <li>Start Level Service Specification</li>
+  <li>Start Level Service Specification(deprecated) - consider using the new org.osgi.framework.startlevel package</li>
   <li>Conditional Permission Admin Specification</li>
   <li>Permission Admin Service Specification</li>
 </ul>
-  <p> There are a number of optional services defined in the OSGi R4.1 specification. 
-    The optional services are not included with the Eclipse OSGi Framework implementation. 
-    For information on OSGi R4.1 manifest headers and services refer to the <a href="http://www.osgi.org/Download/Release4V41">OSGi 
+  <p> There are a number of optional services defined in the OSGi R4.3 compendium specification. 
+    The optional services are not included with the Equinox OSGi Framework implementation. 
+    For information on OSGi R4.3 manifest headers and services refer to the <a href="http://www.osgi.org/Download/Release4V43">OSGi 
     specifications</a>. </p>
 
 <h2>Eclipse Bundle Manifest Headers</h2>
@@ -214,19 +214,11 @@ Eclipse-PlatformFilter ::= a valid LDAP filter string
 The Framework supports filtering on the following system properties:
 </p>
 
-<ul type=disc>
- <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
-     mso-list:l2 level1 lfo3;tab-stops:list .5in'><b>osgi.nl</b> - the platform 
-     language setting.</li>
- <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
-     mso-list:l2 level1 lfo3;tab-stops:list .5in'><b>osgi.os</b> - the platform 
-     operating system.</li>
- <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
-     mso-list:l2 level1 lfo3;tab-stops:list .5in'><b>osgi.arch</b> - the platform 
-     architecture.</li>
- <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
-     mso-list:l2 level1 lfo3;tab-stops:list .5in'><b>osgi.ws</b> - the platform 
-     windowing system.</li>
+<ul type="disc">
+ <li><b>osgi.nl</b> - the platform language setting.</li>
+ <li><b>osgi.os</b> - the platform operating system.</li>
+ <li><b>osgi.arch</b> - the platform architecture.</li>
+ <li><b>osgi.ws</b> - the platform windowing system.</li>
 </ul>
 
 <p>
@@ -362,6 +354,12 @@ Eclipse-BundleShape: jar
 <h3>The Eclipse-GenericCapability Header</h3>
 
 <p>
+<b>Note:</b> the Eclipse-GenericCapability header has been deprecated.  The OSGi R4.3 Core Framework 
+specification includes a new header <b>Provide-Capability</b> which can be used to specify 
+generic capabilities provided by a bundle.  Equinox will continue to support both the 
+Eclipse-GenericCapability header and the new OSGi Provide-Capability header.
+</p>
+<p>
 The Eclipse-GenericCapability header is used to specify a generic capability 
 of a bundle.  Generic capabilities can be used to describe features of your 
 bundle which can be required by other bundles in the system (using the 
@@ -398,7 +396,14 @@ to specify a bundle with an OSGi service org.acme.stuff.SomeService implementati
 <h3>The Eclipse-GenericRequire Header</h3>
 
 <p>
-The Eclipse-GenericRequire header is used to specify a requirement on ageneric 
+<b>Note:</b> the Eclipse-GenericRequire header has been deprecated.  The OSGi R4.3 Core Framework 
+specification includes a new header <b>Require-Capability</b> which can be used to specify 
+a requirement on a generic capabilities provided by another bundle.  Equinox will continue to 
+support both the Eclipse-GenericRequire header and the new OSGi Require-Capability header.
+</p>
+
+<p>
+The Eclipse-GenericRequire header is used to specify a requirement on a generic 
 capability which is offered by another bundle (using the Eclipse-GenericCapability
 header).  Generic requirements are given a name and a capability type.  Capability 
 types are defined by the bundle which is offering the capability.  Generic 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/feature_manifest.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/feature_manifest.html
index 6d7e651..115a68a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/feature_manifest.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/feature_manifest.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
@@ -12,7 +12,7 @@
 
 <h1>
 Eclipse platform feature manifest</h1>
-<p class=MsoNormal><span style='font-size:10.0pt'>Version 3.0 - Last revised June 3, 2009</span></p>
+<p><i>Version 3.0 - Last revised June 3, 2009</i></p>
 
 <p>The feature manifest format is defined by the following dtd:</p>
 <p><tt><?xml encoding="ISO-8859-1"?></tt></p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/gcj.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/gcj.html
index 5655ecb..e49a9c3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/gcj.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/gcj.html
@@ -3,7 +3,7 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
@@ -101,7 +101,5 @@ eclipse.ini file can be found at <a href="http://wiki.eclipse.org/Eclipse.ini">h
 eclipse.org and using a supported Java runtime environment (a list of which may be found in the readme_eclipse.html supplied with your installation), one should seek
 assistance from the Eclipse team via its plethora of communication channels
 like the <a href="http://www.eclipse.org/newsgroups/">newsgroups</a>, the IRC <a href="irc://irc.freenode.net/#eclipse">channel</a>, and/or <a href="https://bugs.eclipse.org/bugs/">bugzilla</a>.</p>
-<p></p>
-<p> </p>
 </body>
 </html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher.html
index 45d96ee..0944c9b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher.html
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en"><head>
-   <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+   <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css">
    <title>Eclipse Launcher</title>
@@ -79,7 +79,7 @@ jvm shared library. If we find the jvm shared library, we use JNI
 invocation. If we find a launcher, we attempt to find a jvm library in
 known locations relative to the launcher. If we find one, we use JNI
 invocation. If no jvm library is found, we exec java in a new process.<br>
-    <span style="font-weight: bold;"></span></li><li><span style="font-weight: bold;"> java.exe/javaw.exe</span>: <location> is a path to a java
+    </li><li><span style="font-weight: bold;"> java.exe/javaw.exe</span>: <location> is a path to a java
 launcher. We exec that java launcher to start the vm in a new process.
   </li>
 <li><span style="font-weight: bold;">jvm dll or so</span>: <location> is a path to a jvm
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher_ini.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher_ini.html
index b6e7ec9..71ae0d5 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher_ini.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/launcher_ini.html
@@ -1,9 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Eclipse launch configuration</title>
 </head>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/message_bundles.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/message_bundles.html
index 4db768c..3b39da4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/message_bundles.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/message_bundles.html
@@ -1,9 +1,9 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Message Bundles</title>
 </head>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/naming.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/naming.html
index f58192f..94f3650 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/naming.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/naming.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,7 +12,7 @@
 <h1>
 Eclipse Platform<br>
 Naming Conventions</h1>
-<font size=-1>Last revised June 6, 2007</font>
+<i>Last revised June 6, 2007</i>
 <p>Naming conventions and guidelines for the Eclipse Platform:</p>
 <ul>
 <li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/p2_dropins_format.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/p2_dropins_format.html
index 917034a..e697f9f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/p2_dropins_format.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/p2_dropins_format.html
@@ -86,7 +86,11 @@ Eclipse extensions:</p>
 </code>
 </pre>
 <p>Finally, you can add link files as in the traditional Eclipse
-links folder:</p>
+links folder. The link file format is the same as a <code>java.util.Properties</code> file
+with a key <code>path</code> pointing to the extension location. There is also 
+an optional key named <code>optional</code> whose boolean value indicates whether or not
+the repository is considered optional. A missing optional repository will suppress error messages
+from being printed in the log file.</p>
 <pre>
 <code>
  eclipse/
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd.html
index ea86bcf..baad1de 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd.html
@@ -3,9 +3,9 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 
 <title>Plug-in manifest dtd</title>
 </head>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd_30.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd_30.html
index bd155c5..95df824 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd_30.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_dtd_30.html
@@ -3,9 +3,9 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 
 <title>Plug-in manifest dtd</title>
 </head>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest.html
index 17d2365..3324c01 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest.html
@@ -3,9 +3,9 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Plug-in manifest</title>
 </head>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest_30.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest_30.html
index 2f6905d..39442e2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest_30.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest_30.html
@@ -3,9 +3,9 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <link REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Plug-in manifest</title>
 </head>
@@ -121,7 +121,7 @@ following attributes: </p>
      dependency cannot be satisfied, the dependency will be ignored</li>
 </ul>
 
-<p><a name=runtime></a>The <runtime> section of the manifest contains a
+<p><a name="runtime"></a>The <runtime> section of the manifest contains a
 definition of one or more libraries that make up the plug-in runtime. The
 referenced libraries are used by the platform execution mechanisms (the plug-in
 class loader) to load and execute the correct code required by the plug-in. </p>
@@ -154,14 +154,13 @@ following attributes: </p>
      file separator.</li>
  <li><b>type</b> - specifies
      whether this library contains executable code (<code>) or just
-     resources.<span style="mso-spacerun: yes">  </span>If the library is
+     resources. If the library is
      of type <code> accessing anything in this library will cause activation of
-     the plug-in.<span style="mso-spacerun: yes">  </span>Accessing a
+     the plug-in. Accessing a
      <resource> will not cause plug-in activation (a potential for significant
-     performance improvement).<span style="mso-spacerun: yes">  </span>It
+     performance improvement). It
      should be noted that specifying a library of type <code> allows it to
-     contain both code and resources.<span style="mso-spacerun: yes"> 
-     </span>But specifying a library of type <resource> assumes it will only be
+     contain both code and resources. But specifying a library of type <resource> assumes it will only be
      used for resources.</li>
 </ul>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html
index b6080fb..5724eed 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html
@@ -3,7 +3,7 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -305,7 +305,7 @@ in <a href="#eclipsevm">eclipse.vm</a>.</dd>
   <dt><a name="eclipseloglevel" id="eclipseloglevel"></a>eclipse.log.level</dt>
   <dd>
     sets the level used when logging messages to the eclipse log.
-    <ul type=disc>
+    <ul type="disc">
       <li><b>ERROR</b> - enables logging only ERROR messages.</li>
       <li><b>WARNING</b> - enables logging of ERROR and WARNING messages.</li>
       <li><b>INFO</b> - enables logging of ERROR, WARNING and INFO messages.</li>
@@ -400,13 +400,17 @@ in <a href="#eclipsevm">eclipse.vm</a>.</dd>
     and optionally started
      once the system is up and running. Each entry is of the form:<br>
 	 <pre>    <URL | simple bundle location>[@ [<start-level>] [":start"]]</pre>
-     If the start-level (>0 integer) is omitted then the framework will use the
+     The start-level indicates the OSGi start level at which the bundle should
+     run. If the start-level (>0 integer) is omitted then the framework will use the
      default start level for the bundle. If the "start" tag is added
      then the bundle will be marked as started after being installed.
      Simple bundle locations are interepreted as relative to the framework's
-    parent directory.
-     The start-level indicates the OSGi start level at which the bundle should
-  run. If this value is not set, the system computes an appropriate default.  </dd>
+     parent directory.  If the location is not a fully qualified path or URL then a search is done
+     to find the highest version available.  Note that the reference: protocol can only be used to refer
+     to content specified by a file: URL (e.g. reference:file:/path/to/mybundle_1.0.0.jar).
+     If the bundle is a directory bundle then using a file: URL without the use of reference: is not
+     supported (e.g. file:/path/to/myDirectoryBundle_1.0.0/ must use reference:file:/path/to/myDirectoryBundle_1.0.0/)
+    </dd>
   <dt><a name="osgibundlesdefaultStartLevel"></a>osgi.bundles.defaultStartLevel</dt>
   <dd>this is the startlevel that all bundles will be set to if installed by Eclipse Update.  
   Bundles which are specified on the <a href="#osgibundles">osgi.bundles</a> list can specify a particular startlevel.  
@@ -441,7 +445,7 @@ in <a href="#eclipsevm">eclipse.vm</a>.</dd>
   <dt><a name="osgiclassloaderlock" id="osgiclassloaderlock"></a>osgi.classloader.lock</dt>
   <dd>
     the classloader locking strategy to use when defining classes.  The valid types are the following:
-    <ul type=disc>
+    <ul type="disc">
       <li><b>classname</b> - lock on the classname.</li>
       <li><b>classloader</b> - lock on the classloader (default value).</li>
     </ul>
@@ -501,7 +505,7 @@ will force eclipse to reinitialize these caches.</dd>
   <dt><a name="osgicontextClassLoaderParent"></a>osgi.contextClassLoaderParent</dt>
   <dd>the classloader type to use as the parent classloader of the context
     classloader used by the Framework.  The valid types are the following:
-    <ul type=disc>
+    <ul type="disc">
       <li><b>app</b> - the application classloader.</li>
       <li><b>boot</b> - the boot classloader.</li>
       <li><b>ext</b> - the extension classloader.</li>
@@ -568,7 +572,7 @@ will force eclipse to reinitialize these caches.</dd>
     System.mapLibraryName(String) will only return names with the .a extension.</dd>
   <dt><a name="osgiframeworkParentClassloader"></a>osgi.frameworkParentClassloader</dt>
   <dd>the classloader type to use as the parent classloader for the the Framework.  The valid types are the following:
-    <ul type=disc>
+    <ul type="disc">
       <li><b>app</b> - the application classloader.</li>
       <li><b>boot</b> - the boot classloader.</li>
       <li><b>ext</b> - the extension classloader.</li>
@@ -627,7 +631,7 @@ will force eclipse to reinitialize these caches.</dd>
 	property "org.osgi.framework.bootdelegation".  The osgi.java.profile.bootdelegation 
 	indicates the policy for bootdelegation to be used.  The following values are valid 
 	(default is ignore):
-    <ul type=disc>
+    <ul type="disc">
       <li><b>ignore</b> - indicates that
           the "org.osgi.framework.bootdelegation" value in the java profile should be ingored.  
           The system property "org.osgi.framework.bootdelegation" will be used to 
@@ -686,7 +690,7 @@ will force eclipse to reinitialize these caches.</dd>
   <dt><a name="osgiparentclassloader"></a>osgi.parentClassloader</dt>
   <dd>the classloader type to use as the parent classloader for all bundles installed
   in the Framework.  The valid types are the following:
-    <ul type=disc>
+    <ul type="disc">
       <li><b>app</b> - the application classloader.</li>
       <li><b>boot</b> - the boot classloader.</li>
       <li><b>ext</b> - the extension classloader.</li>
@@ -699,7 +703,7 @@ will force eclipse to reinitialize these caches.</dd>
   <dt><a name="osgiresolvermode"></a>osgi.resolverMode</dt>
   <dd>the mode used to resolve bundles installed in the Framework.  The default resolver
       mode is not strict.  The following options are available.
-    <ul type=disc>
+    <ul type="disc">
       <li><b>strict</b> - the resolver is in strict mode and will enforce access restriction rules when loading classes and resources from exported packages which specify the x-internal or x-friends directives.</li>
       <li><b>development</b> - used for development time resolution.  This mode disables certain resolver rules that are not needed at development time.  For example, singleton selection is disabled to allow the development of multiple versions of a singleton bundle</li>
     </ul>     
@@ -707,7 +711,7 @@ will force eclipse to reinitialize these caches.</dd>
   <dt><a name="osgi.resolver.usesMode"></a>osgi.resolver.usesMode</dt>
   <dd>
     the resolver mode used to resolve <b>uses</b> directives on Export-Package statements.  
-     <ul type=disc>
+     <ul type="disc">
       <li><b>aggressive</b> - aggressively seeks a solution with no class space inconsistencies (default value).  This mode may be very expensive depending on the number of bundles and number of duplicate exports in the system.</li>
       <li><b>tryFirst</b> - only tries the first solution selected by the resolver.  This mode is very fast but may result in unresolved bundles because of class space inconsistencies.</li>
       <li><b>ignore</b> - ignores all uses directives on exports.  This mode is very fast by may result in inconsistent class spaces in resolved bundles.</li>
@@ -719,7 +723,7 @@ will force eclipse to reinitialize these caches.</dd>
   to "true" then shared configuration area is used as the parent configuration.</dd>
   <dt><a name="osgisignedcontentsupport"></a>osgi.signedcontent.support</dt>
   <dd>A comma separated list of options for signed content support.  The valid types are the following:
-    <ul type=disc>
+    <ul type="disc">
       <li><b>certificate</b> - enables parsing and verification of certificates.</li>
       <li><b>trust</b> - enables verification of certificate trust.  This option implies
       "certificate".</li>
@@ -954,7 +958,7 @@ results in a value of <br>
 A location may be specified as a read-only location by appending ".readOnly" 
 to the location property and setting it to the value "true".  The following properties
 can be used to specify their corresponding locations as read-only:</p>
-    <ul type=disc>
+    <ul type="disc">
       <li>
           osgi.configuration.area.readOnly <a href="#osgiconfigurationarea">osgi.configuration.area</a>
       </li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/update_platform_xml.html b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/update_platform_xml.html
index c461cc4..2f2ee95 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/update_platform_xml.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/reference/misc/update_platform_xml.html
@@ -1,11 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<link rel="stylesheet" href="../../schema.css" charset="utf-8" type="text/css">
 <title>The platform.xml file</title>
 </head>
 <body>
@@ -26,35 +27,33 @@
   info. If platform.xml is to become API, then some re-work is needed (both syntax 
   and semantics).</p>
 <h3>Configuration Markup:</h3>
-<p class=code id=dtd><!ELEMENT <a name="e.extension">extension</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST extension</p>
-<p class=code id=dtdAttlist>point CDATA #REQUIRED</p><p class=code id=dtdAttlist>id    CDATA #IMPLIED</p><p class=code id=dtdAttlist>name  CDATA #IMPLIED></p>
+<p class="SchemaDtd"><!ELEMENT <a name="e.extension">extension</a> EMPTY></p>
+<p class="SchemaDtd"><!ATTLIST extension</p>
+<p class="SchemaDtdAttlist">point CDATA #REQUIRED</p><p class="SchemaDtdAttlist">id    CDATA #IMPLIED</p><p class="SchemaDtdAttlist">name  CDATA #IMPLIED></p>
 
-<ul class=ConfigMarkup id=attlistDesc>
-</ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.config">config</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST config</p>
-<p class=code id=dtdAttlist>version   CDATA #IMPLIED</p><p class=code id=dtdAttlist>date      CDATA #IMPLIED</p>
-<p class=code id=dtdAttlist>transient (true | false) "false"</p>
-<p class=code id=dtdAttlist>shared_ur CDATA #IMPLIED></p>
+<br><p class="SchemaDtd"><!ELEMENT <a name="e.config">config</a> EMPTY></p>
+<p class="SchemaDtd"><!ATTLIST config</p>
+<p class="SchemaDtdAttlist">version   CDATA #IMPLIED</p><p class="SchemaDtdAttlist">date      CDATA #IMPLIED</p>
+<p class="SchemaDtdAttlist">transient (true | false) "false"</p>
+<p class="SchemaDtdAttlist">shared_ur CDATA #IMPLIED></p>
 
-<p class=ConfigMarkup id=elementDesc> describes the current install configuration.</p>
+<p class="ConfigMarkupElementDesc"> describes the current install configuration.</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>version</b> - this attribute may be used to indentify the version of the configuration specification</li>
 <li><b>date</b> - this is an internal attribute that is generated by the update configurator code. If you manually create or modify the platform.xml file then remove this attribute, and let the update code add it when it first runs. In this scenario, update will not try to reconcile the platform.xml with what is on the disk, it takes the platform.xml as is, and slaps the date attribute.</li>
 <li><b>transient</b> - a transient configuration is not modified by the update code, it is just read and used to configure the plugins to run. Its main point is to avoid doing any reconciliation with what's on the disk. This flag is a bit of a hack for PDE to run self hosting without having features in the workspace, and it is better if it is left set to false.</li>
 
 <li><b>shared_ur</b> - points to the shared configuration location. This is particularly useful on unix/linux, when the admin sets up a shared installation and each user's configuration consists of the shared installation data (as pointed at by this attribute) and any local changes.</li>
 </ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.site">site</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST site</p>
-<p class=code id=dtdAttlist>url        CDATA #REQUIRED</p><p class=code id=dtdAttlist>enabled    (true | false) </p><p class=code id=dtdAttlist>updateable (true | false) </p><p class=code id=dtdAttlist>policy     (USER-EXCLUDE|USER-INCLUDE|MANAGED-ONLY) </p><p class=code id=dtdAttlist>linkfile   CDATA #IMPLIED</p><p class=code id=dtdAttlist>list       CDATA #IMPLIED></p>
+<br><p class="SchemaDtd"><!ELEMENT <a name="e.site">site</a> EMPTY></p>
+<p class="SchemaDtd"><!ATTLIST site</p>
+<p class="SchemaDtdAttlist">url        CDATA #REQUIRED</p><p class="SchemaDtdAttlist">enabled    (true | false) </p><p class="SchemaDtdAttlist">updateable (true | false) </p><p class="SchemaDtdAttlist">policy     (USER-EXCLUDE|USER-INCLUDE|MANAGED-ONLY) </p><p class="SchemaDtdAttlist">linkfile   CDATA #IMPLIED</p><p class="SchemaDtdAttlist">list       CDATA #IMPLIED></p>
 
-<p class=ConfigMarkup id=elementDesc>
+<p class="ConfigMarkupElementDesc">
 defines an installation location, which is a location that contains features and plugins.</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>url</b> - location of this installation site. The url is absolute, but there is a special url for the base location (where eclipse.exe is located), of the form platform:/base/</li>
 <li><b>enabled</b> - a boolean value that defines whether the plugins and features from this location will be considered at runtime.</li>
 <li><b>updateable</b> - defines whether any update/install/enable/uninstall/etc. operations can be performed on features on this site.</li>
@@ -72,20 +71,20 @@ defines an installation location, which is a location that contains features and
     attribute) at runtime.</li>
 
 </ul>
-<br><p class=code id=dtd><!ELEMENT <a name="e.feature">feature</a> EMPTY></p>
-<p class=code id=dtd><!ATTLIST feature</p>
-<p class=code id=dtdAttlist>id      CDATA #REQUIRED</p><p class=code id=dtdAttlist>version CDATA #REQUIRED</p><p class=code id=dtdAttlist>url     CDATA #REQUIRED></p>
+<br><p class="SchemaDtd"><!ELEMENT <a name="e.feature">feature</a> EMPTY></p>
+<p class="SchemaDtd"><!ATTLIST feature</p>
+<p class="SchemaDtdAttlist">id      CDATA #REQUIRED</p><p class="SchemaDtdAttlist">version CDATA #REQUIRED</p><p class="SchemaDtdAttlist">url     CDATA #REQUIRED></p>
 
-<p class=ConfigMarkup id=elementDesc> defines a feature installed on this site.</p>
+<p class="ConfigMarkupElementDesc"> defines a feature installed on this site.</p>
 <br>
-<ul class=ConfigMarkup id=attlistDesc>
+<ul class="ConfigMarkupAttlistDesc">
 <li><b>id</b> - the feature id</li>
 <li><b>version</b> - the feature version</li>
 <li><b>url</b> - the feature location, relative to the site. By default, the url is of the form features/some_feature_id_version.</li>
 </ul>
 
 <br>
-<h4 class=CaptionFigColumn id=header>Example: </h4>
+<h4 class="CaptionFigColumn" id="header">Example: </h4>
 <div class="e"> 
   <pre><?xml version="1.0" encoding="UTF-8"?><br><config date="1119300698390" transient="false" version="3.0"><br>  <site enabled="true" policy="USER-EXCLUDE" updateable="true" url="platform:/base/"><br>    <feature id="org.eclipse.platform" url="features/org.eclipse.platform_3.1.0/" version="3.1.0">
     </feature><br>    <feature id="org.eclipse.platform.source" url="features/org.eclipse.platform.source_3.1.0/" version="3.1.0">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/samples/samples.html b/eclipse/plugins/org.eclipse.platform.doc.isv/samples/samples.html
index b7e6f8c..c37af4f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/samples/samples.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/samples/samples.html
@@ -2,10 +2,10 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+   <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
    <title>Installation of Examples</title>
    <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 </head>
@@ -24,7 +24,7 @@ To locate and install them into a product:</p>
 <ol>
   <li>Open the main update manager by clicking
   <a class="command-link" href='javascript:executeCommand("org.eclipse.equinox.p2.ui.sdk.install")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Install New Software...</b></a>.
 
   This opens the Install Wizard.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/toc.xml b/eclipse/plugins/org.eclipse.platform.doc.isv/toc.xml
index 54c2c85..075b65d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/toc.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/toc.xml
@@ -11,8 +11,10 @@
 	<topic label="Reference">
 		<link toc="topics_Reference.xml" />
 	</topic>
-	<topic label="What's new" href="whatsNew/platform_isv_whatsnew.html"/>
-	<topic label="3.6 Plug-in Migration Guide">
+	<topic label="What's new" href="whatsNew/platform_isv_whatsnew.html">
+		<link toc="topics_WhatsNew.xml"/>
+	</topic>
+	<topic label="3.7 Plug-in Migration Guide">
 		<link toc="topics_Porting.xml"/>
 	</topic>
 	<topic label="Examples Guide">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Guide.xml b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Guide.xml
index 2985435..9701158 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Guide.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Guide.xml
@@ -183,7 +183,9 @@
 
 	<topic label="Advanced resource concepts"  href="guide/resAdv.htm">
 		<topic label="Project natures" href="guide/resAdv_natures.htm" />
-		<topic label="Incremental project builders" href="guide/resAdv_builders.htm" />
+		<topic href="guide/resAdv_builders.htm" label="Incremental project builders">
+			<topic href="guide/resAdv_buildconfigs.htm" label="Project Build Configurations" />
+		</topic>
 		<topic label="Derived resources" href="guide/resAdv_derived.htm" />
 		<topic label="Workspace save participation" href="guide/resAdv_saving.htm" />
 		<topic label="Resource modification hooks" href="guide/resAdv_hooks.htm" />
@@ -296,7 +298,7 @@
 			<topic label="Team private resources" href="guide/team_resources_private.htm" />
 			<topic label="File types" href="guide/team_resources_filetypes.htm" /><topic
 				label="Adding History support" href="guide/team_ui_history.htm">
-</topic>
+			</topic>
 		</topic>
 	</topic>
 	
@@ -349,6 +351,7 @@
 					<topic label="Contributing a standby content part" href="guide/ua_intro_ext_standbypart.htm" />
 					<topic label="Defining a custom IntroURL action" href="guide/ua_intro_ext_custom_url.htm" />
 					<topic label="Intro Content File XML Format" href="reference/extension-points/introContentFileSpec.html" />
+                    <topic href="guide/ua_intro_swt_properties.htm" label="SWT Properties for Intro"></topic>
 				</topic>
 			</topic>
    <topic href="guide/ua_intro_universal.htm" label="Universal intro">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Porting.xml b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Porting.xml
index e20f3da..13c11dc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Porting.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Porting.xml
@@ -4,6 +4,12 @@
 <!-- Define topics for the porting guide index                                     -->
 <!-- ============================================================================= -->
 <toc label="Migration">
+	<topic label="Migrating to Eclipse 3.7 from 3.6">
+		<topic label="Introduction" href="porting/eclipse_3_7_porting_guide.html"/>
+		<topic label="FAQ" href="porting/3.7/faq.html" />
+		<topic label="Incompatibilities" href="porting/3.7/incompatibilities.html" />
+		<topic label="Adopting 3.7 mechanisms and API" href="porting/3.7/recommended.html" />
+	</topic>
 	<topic label="Migrating to Eclipse 3.6 from 3.5">
 		<topic label="Introduction" href="porting/eclipse_3_6_porting_guide.html"/>
 		<topic label="FAQ" href="porting/3.6/faq.html" />
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Reference.xml b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Reference.xml
index 25a72fd..294ba27 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Reference.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_Reference.xml
@@ -44,7 +44,6 @@
       <topic label="org.eclipse.core.resources.mapping" href="reference/api/org/eclipse/core/resources/mapping/package-summary.html"/>
       <topic label="org.eclipse.core.resources.team" href="reference/api/org/eclipse/core/resources/team/package-summary.html"/>
       <topic label="org.eclipse.core.resources.variableresolvers" href="reference/api/org/eclipse/core/resources/variableresolvers/package-summary.html"/>
-      <topic label="org.eclipse.core.resources.filterMatchers" href="reference/api/org/eclipse/core/resources/variableresolvers/package-summary.html"/>
       <topic label="org.eclipse.core.runtime" href="reference/api/org/eclipse/core/runtime/package-summary.html"/>
       <topic label="org.eclipse.core.runtime.adaptor" href="reference/api/org/eclipse/core/runtime/adaptor/package-summary.html"/>
       <topic label="org.eclipse.core.runtime.content" href="reference/api/org/eclipse/core/runtime/content/package-summary.html"/>
@@ -97,6 +96,7 @@
       <topic label="org.eclipse.equinox.security.storage" href="reference/api/org/eclipse/equinox/security/storage/package-summary.html"/>
       <topic label="org.eclipse.equinox.security.storage.provider" href="reference/api/org/eclipse/equinox/security/storage/provider/package-summary.html"/>
       <topic label="org.eclipse.help" href="reference/api/org/eclipse/help/package-summary.html"/>
+      <topic label="org.eclipse.help.base" href="reference/api/org/eclipse/help/base/package-summary.html"/>
       <topic label="org.eclipse.help.browser" href="reference/api/org/eclipse/help/browser/package-summary.html"/>
       <topic label="org.eclipse.help.search" href="reference/api/org/eclipse/help/search/package-summary.html"/>
       <topic label="org.eclipse.help.server" href="reference/api/org/eclipse/help/server/package-summary.html"/>
@@ -318,6 +318,7 @@
        <topic label="org.eclipse.core.variables.dynamicVariables" href="reference/extension-points/org_eclipse_core_variables_dynamicVariables.html"/>
        <topic label="org.eclipse.core.variables.valueVariables" href="reference/extension-points/org_eclipse_core_variables_valueVariables.html"/>
        <topic label="org.eclipse.debug.core.breakpoints" href="reference/extension-points/org_eclipse_debug_core_breakpoints.html"/>
+       <topic label="org.eclipse.debug.core.breakpointImportParticipants" href="reference/extension-points/org_eclipse_debug_core_breakpointImportParticipants.html"/>
        <topic label="org.eclipse.debug.core.launchConfigurationComparators" href="reference/extension-points/org_eclipse_debug_core_launchConfigurationComparators.html"/>
        <topic label="org.eclipse.debug.core.launchConfigurationTypes" href="reference/extension-points/org_eclipse_debug_core_launchConfigurationTypes.html"/>
        <topic label="org.eclipse.debug.core.launchDelegates" href="reference/extension-points/org_eclipse_debug_core_launchDelegates.html"/>
@@ -369,12 +370,14 @@
        <topic label="org.eclipse.help.base.luceneAnalyzer" href="reference/extension-points/org_eclipse_help_base_luceneAnalyzer.html"/>
        <topic label="org.eclipse.help.base.luceneSearchParticipants" href="reference/extension-points/org_eclipse_help_base_luceneSearchParticipants.html"/>
        <topic label="org.eclipse.help.base.searchParticipant" href="reference/extension-points/org_eclipse_help_base_searchParticipant.html"/>
+       <topic label="org.eclipse.help.base.searchProcessor" href="reference/extension-points/org_eclipse_help_base_searchProcessor.html"/>
        <topic label="org.eclipse.help.base.server" href="reference/extension-points/org_eclipse_help_base_server.html"/>
        <topic label="org.eclipse.help.base.scope" href="reference/extension-points/org_eclipse_help_base_scope.html"/>
        <topic label="org.eclipse.help.ui.searchEngine" href="reference/extension-points/org_eclipse_help_ui_searchEngine.html"/>
        <topic label="org.eclipse.help.webapp.contentFilter" href="reference/extension-points/org_eclipse_help_webapp_contentFilter.html"/>
        <topic label="org.eclipse.help.webapp.frame" href="reference/extension-points/org_eclipse_help_webapp_frame.html"/>
        <topic label="org.eclipse.help.webapp.toolbarButton" href="reference/extension-points/org_eclipse_help_webapp_toolbarButton.html"/>
+       <topic label="org.eclipse.help.webapp.validatedServlet" href="reference/extension-points/org_eclipse_help_webapp_validatedServlet.html"/>
        <topic label="org.eclipse.help.webapp.view" href="reference/extension-points/org_eclipse_help_webapp_view.html"/>
        <topic label="org.eclipse.ltk.core.refactoring.copyParticipants" href="reference/extension-points/org_eclipse_ltk_core_refactoring_copyParticipants.html"/>
        <topic label="org.eclipse.ltk.core.refactoring.createParticipants" href="reference/extension-points/org_eclipse_ltk_core_refactoring_createParticipants.html"/>
@@ -406,10 +409,10 @@
        <topic label="org.eclipse.ui.actionSetPartAssociations" href="reference/extension-points/org_eclipse_ui_actionSetPartAssociations.html"/>
        <topic label="org.eclipse.ui.actionSets" href="reference/extension-points/org_eclipse_ui_actionSets.html"/>
        <topic label="org.eclipse.ui.activities" href="reference/extension-points/org_eclipse_ui_activities.html"/>
-	    <topic label="org.eclipse.ui.activitySupport" href="reference/extension-points/org_eclipse_ui_activitySupport.html"/>
-		 <topic label="org.eclipse.ui.bindings" href="reference/extension-points/org_eclipse_ui_bindings.html"/>
+       <topic label="org.eclipse.ui.activitySupport" href="reference/extension-points/org_eclipse_ui_activitySupport.html"/>
+       <topic label="org.eclipse.ui.bindings" href="reference/extension-points/org_eclipse_ui_bindings.html"/>
        <topic label="org.eclipse.ui.browser.browsers" href="reference/extension-points/org_eclipse_ui_browser_browsers.html"/>
-		 <topic label="org.eclipse.ui.browserSupport" href="reference/extension-points/org_eclipse_ui_browserSupport.html"/>
+       <topic label="org.eclipse.ui.browserSupport" href="reference/extension-points/org_eclipse_ui_browserSupport.html"/>
        <topic label="org.eclipse.ui.cheatsheets.cheatSheetContent" href="reference/extension-points/org_eclipse_ui_cheatsheets_cheatSheetContent.html"/>
        <topic label="org.eclipse.ui.cheatsheets.cheatSheetItemExtension" href="reference/extension-points/org_eclipse_ui_cheatsheets_cheatSheetItemExtension.html"/>
        <topic label="org.eclipse.ui.commands" href="reference/extension-points/org_eclipse_ui_commands.html"/>
@@ -417,7 +420,7 @@
        <topic label="org.eclipse.ui.console.consoleFactories" href="reference/extension-points/org_eclipse_ui_console_consoleFactories.html"/>
        <topic label="org.eclipse.ui.console.consolePageParticipants" href="reference/extension-points/org_eclipse_ui_console_consolePageParticipants.html"/>
        <topic label="org.eclipse.ui.console.consolePatternMatchListeners" href="reference/extension-points/org_eclipse_ui_console_consolePatternMatchListeners.html"/>
-	    <topic label="org.eclipse.ui.contexts" href="reference/extension-points/org_eclipse_ui_contexts.html"/>
+       <topic label="org.eclipse.ui.contexts" href="reference/extension-points/org_eclipse_ui_contexts.html"/>
        <topic label="org.eclipse.ui.decorators" href="reference/extension-points/org_eclipse_ui_decorators.html"/>
        <topic label="org.eclipse.ui.dropActions" href="reference/extension-points/org_eclipse_ui_dropActions.html"/>
        <topic label="org.eclipse.ui.editorActions" href="reference/extension-points/org_eclipse_ui_editorActions.html"/>
@@ -428,17 +431,17 @@
        <topic label="org.eclipse.ui.editors.markerUpdaters" href="reference/extension-points/org_eclipse_ui_editors_markerUpdaters.html"/>
        <topic label="org.eclipse.ui.editors.templates" href="reference/extension-points/org_eclipse_ui_editors_templates.html"/>
        <topic label="org.eclipse.ui.elementFactories" href="reference/extension-points/org_eclipse_ui_elementFactories.html"/>
-	    <topic label="org.eclipse.ui.encodings" href="reference/extension-points/org_eclipse_ui_encodings.html"/>
+       <topic label="org.eclipse.ui.encodings" href="reference/extension-points/org_eclipse_ui_encodings.html"/>
        <topic label="org.eclipse.ui.exportWizards" href="reference/extension-points/org_eclipse_ui_exportWizards.html"/>
        <topic label="org.eclipse.ui.externaltools.configurationDuplicationMaps" href="reference/extension-points/org_eclipse_ui_externaltools_configurationDuplicationMaps.html"/>
        <topic label="org.eclipse.ui.fontDefinitions" href="reference/extension-points/org_eclipse_ui_fontDefinitions.html"/>
-	    <topic label="org.eclipse.ui.handlers" href="reference/extension-points/org_eclipse_ui_handlers.html"/>
+	   <topic label="org.eclipse.ui.handlers" href="reference/extension-points/org_eclipse_ui_handlers.html"/>
        <topic label="org.eclipse.ui.helpSupport" href="reference/extension-points/org_eclipse_ui_helpSupport.html"/>
        <topic label="org.eclipse.ui.ide.filesystemSupport" href="reference/extension-points/org_eclipse_ui_ide_filesystemSupport.html"/>
        <topic label="org.eclipse.ui.ide.markerHelp" href="reference/extension-points/org_eclipse_ui_ide_markerHelp.html"/>
        <topic label="org.eclipse.ui.ide.markerImageProviders" href="reference/extension-points/org_eclipse_ui_ide_markerImageProviders.html"/>
        <topic label="org.eclipse.ui.ide.markerResolution" href="reference/extension-points/org_eclipse_ui_ide_markerResolution.html"/>
-        <topic label="org.eclipse.ui.ide.markerSupport" href="reference/extension-points/org_eclipse_ui_ide_markerSupport.html"/>
+       <topic label="org.eclipse.ui.ide.markerSupport" href="reference/extension-points/org_eclipse_ui_ide_markerSupport.html"/>
        <topic label="org.eclipse.ui.ide.projectNatureImages" href="reference/extension-points/org_eclipse_ui_ide_projectNatureImages.html"/>
        <topic label="org.eclipse.ui.ide.resourceFilters" href="reference/extension-points/org_eclipse_ui_ide_resourceFilters.html"/>
        <topic label="org.eclipse.ui.importWizards" href="reference/extension-points/org_eclipse_ui_importWizards.html"/>
@@ -446,11 +449,11 @@
        <topic label="org.eclipse.ui.intro" href="reference/extension-points/org_eclipse_ui_intro.html"/>
        <topic label="org.eclipse.ui.intro.config" href="reference/extension-points/org_eclipse_ui_intro_config.html"/>
        <topic label="org.eclipse.ui.intro.configExtension" href="reference/extension-points/org_eclipse_ui_intro_configExtension.html"/>
-	    <topic label="org.eclipse.ui.keywords" href="reference/extension-points/org_eclipse_ui_keywords.html"/>	    
-	    <topic label="org.eclipse.ui.menus" href="reference/extension-points/org_eclipse_ui_menus.html"/>
+       <topic label="org.eclipse.ui.keywords" href="reference/extension-points/org_eclipse_ui_keywords.html"/>	    
+       <topic label="org.eclipse.ui.menus" href="reference/extension-points/org_eclipse_ui_menus.html"/>
        <topic label="org.eclipse.ui.navigator.linkHelper" href="reference/extension-points/org_eclipse_ui_navigator_linkHelper.html"/>
-	   <topic label="org.eclipse.ui.navigator.navigatorContent" href="reference/extension-points/org_eclipse_ui_navigator_navigatorContent.html"/>
-	   <topic label="org.eclipse.ui.navigator.viewer" href="reference/extension-points/org_eclipse_ui_navigator_viewer.html"/>
+       <topic label="org.eclipse.ui.navigator.navigatorContent" href="reference/extension-points/org_eclipse_ui_navigator_navigatorContent.html"/>
+       <topic label="org.eclipse.ui.navigator.viewer" href="reference/extension-points/org_eclipse_ui_navigator_viewer.html"/>
        <topic label="org.eclipse.ui.newWizards" href="reference/extension-points/org_eclipse_ui_newWizards.html"/>
        <topic label="org.eclipse.ui.perspectiveExtensions" href="reference/extension-points/org_eclipse_ui_perspectiveExtensions.html"/>
        <topic label="org.eclipse.ui.perspectives" href="reference/extension-points/org_eclipse_ui_perspectives.html"/>
@@ -480,11 +483,9 @@
        <topic label="org.eclipse.update.core.featureTypes" href="reference/extension-points/org_eclipse_update_core_featureTypes.html"/>
        <topic label="org.eclipse.update.core.installHandlers" href="reference/extension-points/org_eclipse_update_core_installHandlers.html"/>
        <topic label="org.eclipse.update.core.siteTypes" href="reference/extension-points/org_eclipse_update_core_siteTypes.html"/>
-       <topic href="reference/extension-points/org_eclipse_debug_core_breakpointImportParticipants.html" label="org.eclipse.debug.core.breakpointImportParticipants">
-       </topic>
     </topic>
 
-	<topic label="OSGi API Reference" href="http://www.osgi.org/javadoc/r4v42"/>
+	<topic label="OSGi API Reference" href="http://www.osgi.org/javadoc/r4v43"/>
 
 	<topic label="Other reference information" href="reference/misc/index.html">
       	<topic label="Runtime options" href="reference/misc/runtime-options.html"/>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/topics_WhatsNew.xml b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_WhatsNew.xml
new file mode 100644
index 0000000..9c911c7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/topics_WhatsNew.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<!-- ================================ -->
+<!-- Define topics for the What's New -->
+<!-- ================================ -->
+<toc label="What's new">
+	<topic label="Platform" href="whatsNew/platform_isv_whatsnew.html#Platform"/>
+	<topic label="Equinox" href="whatsNew/platform_isv_whatsnew.html#Equinox"/>
+	<topic label="SWT" href="whatsNew/platform_isv_whatsnew.html#SWT"/>
+</toc>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/AppMenuBar.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/AppMenuBar.png
new file mode 100644
index 0000000..e1660d4
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/AppMenuBar.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/NativeToolBar.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/NativeToolBar.png
new file mode 100644
index 0000000..4b5d17e
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/NativeToolBar.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/browserclose.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/browserclose.png
deleted file mode 100644
index 5de069c..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/browserclose.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoadatetime.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoadatetime.png
new file mode 100644
index 0000000..d86f701
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoadatetime.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoartl.PNG b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoartl.PNG
deleted file mode 100644
index fb0d40c..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoartl.PNG and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoatool.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoatool.png
new file mode 100644
index 0000000..a00e9a5
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/cocoatool.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ll.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ll.png
new file mode 100644
index 0000000..719517f
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ll.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ls.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ls.png
new file mode 100644
index 0000000..580a741
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ls.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-pl.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-pl.png
new file mode 100644
index 0000000..38f0872
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-pl.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ps.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ps.png
new file mode 100644
index 0000000..7689c46
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/duplex-printing-ps.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/footer.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/footer.png
deleted file mode 100644
index 6558b14..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/footer.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/gesture.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/gesture.png
new file mode 100644
index 0000000..e3536ac
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/gesture.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/gtk-datetime.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/gtk-datetime.png
new file mode 100644
index 0000000..9c03444
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/gtk-datetime.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/install-history-tag.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/install-history-tag.png
new file mode 100644
index 0000000..f20d9ec
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/install-history-tag.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/menu-mac.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/menu-mac.png
deleted file mode 100644
index f0c6717..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/menu-mac.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/menu-win32.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/menu-win32.png
deleted file mode 100644
index e18465a..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/menu-win32.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/newctab.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/newctab.png
deleted file mode 100644
index 5fd4a5a..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/newctab.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/newscope.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/newscope.png
deleted file mode 100644
index 29f3e70..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/newscope.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/overlayimage.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/overlayimage.png
deleted file mode 100644
index 1ac7f99..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/overlayimage.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/overlaytext.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/overlaytext.png
deleted file mode 100644
index b888539..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/overlaytext.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/progress.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/progress.png
deleted file mode 100644
index 4abb309..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/progress.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/rss.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/rss.png
deleted file mode 100644
index 6ebc35c..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/rss.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/searchprocessorNN.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/searchprocessorNN.png
new file mode 100644
index 0000000..907af59
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/searchprocessorNN.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/see.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/see.png
deleted file mode 100644
index 2beb87a..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/see.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/segments-chars.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/segments-chars.png
deleted file mode 100644
index c29ea11..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/segments-chars.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/sttabs.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/sttabs.png
deleted file mode 100644
index 367a814..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/sttabs.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/system-menu.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/system-menu.png
new file mode 100644
index 0000000..3733d1f
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/system-menu.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/tablednd.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/tablednd.png
deleted file mode 100644
index 293dd5c..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/tablednd.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/text_search.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/text_search.png
deleted file mode 100644
index 09a9e4e..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/text_search.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/variable-tab-stops.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/variable-tab-stops.png
deleted file mode 100644
index e8248b2..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/variable-tab-stops.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webappextn.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webappextn.png
deleted file mode 100644
index b252810..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webappextn.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webkitWindows.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webkitWindows.png
new file mode 100644
index 0000000..d56eba4
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webkitWindows.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webkitgtk.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webkitgtk.png
deleted file mode 100644
index ef51c49..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/webkitgtk.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/wrap-indent.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/wrap-indent.png
deleted file mode 100644
index 8ae6df1..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/wrap-indent.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/wrap.png b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/wrap.png
new file mode 100644
index 0000000..f00554c
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/images/wrap.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/platform_isv_whatsnew.html b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/platform_isv_whatsnew.html
index be8e6ed..72b7a40 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/platform_isv_whatsnew.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.isv/whatsNew/platform_isv_whatsnew.html
@@ -1,25 +1,25 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) Eclipse contributors and others 2010. This page is made available under license. For full details, see the LEGAL section in the documentation that contains this page."/>
+<meta name="copyright" content="Copyright (c) Eclipse contributors and others 2010, 2011. This page is made available under license. For full details, see the LEGAL section in the documentation that contains this page."/>
 <meta http-equiv="Content-Language" content="en-us"/>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<link rel="STYLESHEET" href="../book.css"  type="text/css"/>
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
 <style type="text/css">
-td {border-top: solid thin black;}
-img[alt] {background-color:#ffdddd;}
-tr {vertical-align: top;}
+table.news td {border-top: solid thin black;}
+table.news tr {vertical-align: top;}
+table.news tr td.section {font-size: 20px; font-weight: bold;}
+table.news tr td.title {vertical-align: top; width: 30%; font-weight: bold;}
+table.news tr td.content {vertical-align: top; width: 70%;}
 </style>
-<title>Eclipse Platform What's New in 3.6</title>
+<title>Eclipse Platform What's New in 3.7 (SWT and Plug-in Developers)</title>
 </head>
 
 <body>
-
-<h1>What's New in 3.6</h1>
-
+<h2>What's New in 3.7</h2>
 <p>Here are descriptions of some of the changes of interest to plug-in developers
 made to the Eclipse <a href="#Platform">Platform</a>, <a href="#Equinox">Equinox</a> and
-<a href="#SWT">SWT</a> for the 3.6 release of Eclipse.</p>
+<a href="#SWT">SWT</a> for the 3.7 release of Eclipse.</p>
 
 <p>
 There are also many new features oriented towards end-users of the platform
@@ -29,496 +29,564 @@ section of the Workbench User Guide.
 </p>
 
 <!-- ****************** START OF N&N TABLE ****************** -->
-<table cellpadding="10" cellspacing="0" width="600">
-  <colgroup>
-  <col width="20%"/>
-  <col width="80%"/>
-  </colgroup>
-  <tbody>
-
+<table class="news" border="0" cellpadding="10" cellspacing="0" width="600">
+<tbody>
 <!-- ******************** Platform ********************** -->
-<tr>
-
-<td colspan="2"><a name="Platform"></a>
-<div style="font-size: 20px; font-weight: bold;">Platform Changes</div>
-</td>
-</tr>
-
-  <tr id="test-framework-junit4"> 
-    <td width="30%" valign="top" align="left">
-      <b>Platform test framework support for JUnit 4</b>
-    </td>
-    <td width="70%" valign="top">
-      The platform's automated testing framework now supports running tests with JUnit 4.
-      The test framework previously only allowed running with JUnit version 3.
-    </td>
-  </tr>
 
-  <tr id="headless-ext-tools">
-    <td width="30%" valign="top" align="left"><b>Headless external tool builders</b></td>
-    <td width="70%" valign="top">
-    	Launching support for Ant and external tools is provided by the new headless plug-ins
-    	<code>org.eclipse.ant.launching</code> and <code>org.eclipse.core.externaltools</code>.
-    	This allows applications without a user interface to leverage the launch support programmatically
-    	and it allows projects configured with external tool builders to be built in headless
-    	environments.
+	<tr>
+    <td id="Platform" class="section" colspan="2">
+      <h2>Platform Changes</h2>
     </td>
-   </tr>
-
-  <tr id="equinox.event.admin">
-    <td width="30%" valign="top" align="left"><b>Event admin added</b></td>
-    <td width="70%" valign="top">The OSGi event admin specification provides 
-        a general purpose event bus for posting and sending events to event 
-        handlers.  The Equinox event admin implementation has been 
-        added to the platform feature.</td>
-  </tr>
+  	</tr>
 
-  <tr id="webappextension">
-    <td width="30%" valign="top" align="left"><b>Help UI extensibility</b></td>
-    <td width="70%" valign="top">New extension points allow additional buttons and 
-    frames to be added to the help web application. In the image below the title search frame, 
-    the rightmost button and the frame below the content page are all contributed.
-      <p><img src="images/webappextn.png" alt="Help webapp showing extensions" /></p>
+  <tr id="builderFrameworkEnhancements">
+    <td class="title">Builder framework enhancements</td>
+    <td class="content">
+        The platform now supports multiple <i>build configurations</i> per project. Build configurations
+        allow a project to be built in different ways. The build commands can discover
+        which configuration is currently being built. Builder resource deltas are stored per 
+        configuration.
+        <p>
+        New API has been introduced to define references between the configurations and
+        to build chosen configurations and their references.
+        See <tt>org.eclipse.core.resources.IBuildConfiguration</tt> for further details.
+        </p>
+        <p>
+        Builders also now have access to a <i>build context</i> that can be used to discover the 
+        source of the build request, as well as the build configurations being built during the current
+        build invocation.
+        See <tt>org.eclipse.core.resources.IncrementalProjectBuilder#getContext</tt> for further details.
+        </p>
     </td>
   </tr>
 
-  <tr id="helpfooter">
-    <td width="30%" valign="top" align="left"><b>Customizable help footer</b></td>
-    <td width="70%" valign="top"><p>The customization <tt>org.eclipse.help.base/footer</tt> allows
-    a footer to be added to the Eclipse help system. This can be used for infocenters or 
-    in Eclipse-based products.</p>
-      <p><img src="images/footer.png" alt="Eclipse Help showing footer" />.</p>
+  <tr id="search-processor">
+    <td class="title">Help search refinement</td>
+    <td class="content">
+      The new extension point <code>org.eclipse.help.base.searchProcessor</code> allows for modification
+      of the search term, suggestion of alternate terms and modification of the list of search results. 
+       <p><img src = "images/searchprocessorNN.png" alt="Help view showing alternate terms"/>
+      </p>
     </td>
   </tr>
 
-  <tr id="help-scoping-criteria">
-    <td width="30%" valign="top" align="left"><b>Scoping by criteria in help system</b></td>
-    <td width="70%" valign="top">The help web application now allows the table of contents, the 
-		index and the search results to be filtered by book/topic or by criteria. Criteria are defined in 
-		the table of contents or using the extension point <tt>org.eclipse.help.criteriaDefinition</tt>. The list of 
-		displayed criteria is defined at the product level. Products which do not define criteria (including 
-		the Eclipse SDK) will not show any UI for criteria.
-      <p><img src="images/newscope.png" alt="Scope dialog showing criteria." /></p>
+  <tr id="help-display">
+    <td class="title">Extension point for changing help main page</td>
+    <td class="content">
+      A new extension point, <code>org.eclipse.help.base.display</code>, allows for an alternate
+      web page instead of help/index.jsp to be opened when <b>Help > Contents</b> is invoked from the workbench menu.
     </td>
   </tr>
-
-  <tr id="helpsort">
-    <td width="30%" valign="top" align="left"><b>Sorting help topics</b></td>
-    <td width="70%" valign="top">A new attribute "sort" has been added to the <toc> and
-    <topic> elements in a table of contents which causes subtopics to be sorted alphabetically when 
-    the value is set to "true".</td>
-  </tr>
-
-  <tr id="rsswidget">
-    <td width="30%" valign="top" align="left"><b>Reusable intro news reader</b></td>
-    <td width="70%" valign="top">The <tt>EclipseRSSViewer</tt> class allows multiple RSS news readers to
-be easily added to an intro page.
-      <p><img src="images/rss.png" alt="RSS reader on Intro page" /></p>
-    </td>
+  
+  <tr id="remote_style">
+    <td class="title">Remote help styling</td>
+    <td class="content">The new preference <code>org.eclipse.help.base/remote_css</code> 
+    allows the definition of a style sheet which is included in all help pages that
+    originated from a remote infocenter.
+    </td>
+  </tr>
+
+  <tr id="Plat-launchshortcuts">
+	<td class="title">Variables in launch shortcuts</td>
+	<td class="content">
+	Previously when you contributed a launch shortcut, the only variable you had available 
+	for examination was the current selection in the workspace. Now you have all of the 
+	variables from the Platform evaluation context available as well.
+	<p>
+	For example you can now ask if your bundle has been loaded yet to prevent your launch 
+	shortcut from appearing when it should not.</p>
+	<pre>
+      <enablement>
+        <with variable="selection">
+          <count value="1"/>
+             <iterate>
+                <and>
+                    <test property="org.eclipse.my.bundle.tester" value="true"/>
+                    <with variable="org.eclipse.core.runtime.Platform">
+                       <test
+                             args="org.eclipse.my.bundle"
+                             property="org.eclipse.core.runtime.bundleState"
+                             value="ACTIVE">
+
+                       </test>
+                    </with>
+                </and>
+             </iterate>
+        </with>
+      </enablement>
+	</pre>
+	</td>
   </tr>
 
-
-  <tr id="see">
-    <td width="30%" valign="top" align="left"><b>See entries in keyword index</b></td>
-    <td width="70%" valign="top">See entries can now be added to the help system keyword index.
-      <p><img src="images/see.png" alt="Help webapp showing extensions" /></p>
+  <tr id="projectSetCapabilityAPI">
+    <td class="title">ProjectSetCapability API extension</td>
+    <td class="content">
+		The ProjectSetCapability API now supports SCM URLs (see http://maven.apache.org/scm/scm-url-format.html). 
+		An URL in that format is now accepted by ProjectSetCapability#asReference(URI, String) method. Currently, 
+		only CVS provides an extended implementation of the method. 
+    </td>
+  </tr>
+
+  <tr id="Plat-stackdumps-on-timeout">
+    <td class="title">Eclipse Test Framework writes stackdumps on timeout</td>
+    <td class="content">
+
+      The Eclipse Test Framework (org.eclipse.test) now writes stackdumps to <code>System.err</code> shortly before
+      a test gets killed by the <code><java fork="true" timeout="${timeout}" ...></code> Ant task.
+      
+      <p>Where before, you just saw:</p>
+      
+      <pre>     [java] Timeout: killed the sub-process
+     [java] Java Result: -1</pre>
+     
+     You now get the process memory stats, followed by a stackdump of all threads, followed by the current focus control (with all its parents), and the open shells, e.g.:
+     
+      <pre>     [java] EclipseTestRunner almost reached timeout '7200000'.
+     [java] totalMemory: 260177920
+     [java] freeMemory (before GC): 195046224
+     [java] freeMemory (after GC):  244342384
+     [java] Thread dump at 2011-04-21 06:41:49 -0400:
+     [java] java.lang.Exception: Worker-JM
+     [java] 	at java.lang.Object.wait
+     [java] 	at org.eclipse.core.internal.jobs.InternalWorker.run
+     [java] ...
+     [java] java.lang.Exception: main
+     [java] 	at org.eclipse.swt.internal.win32.OS.WaitMessage
+     [java] 	at org.eclipse.swt.widgets.Display.sleep
+     [java] 	at pack.TestClass.testMethod
+     [java] ...
+     [java] FocusControl: 
+     [java]   Tree {}
+     [java]     Shell {}
+     [java] Shells: 
+     [java]   visible: Shell {Java - Eclipse SDK}
+     [java]   visible: Shell {}</pre>
+
+     <p>The whole dump is repeated 5 seconds later. Since the code that prints the SWT information uses
+     <code>display.syncExec(..)</code>, this may or may not influence a hung main thread.</p>
     </td>
   </tr>
 
-  <tr id="helpsearchprovider">
-    <td width="30%" valign="top" align="left"><b>Extension point  for help search</b></td>
-    <td width="70%" valign="top">A new extension point <tt>org.eclipse.help.base.searchParticipant</tt>
-    has been added. This allows clients to add documents not in the html or xhtml format to the search
-    index used by the help system. This should be used in place of the deprecated extension point 
-    <tt>org.eclipse.help.base.luceneSearchParticipants</tt> which is not binary compatible across Lucene versions.	  
-	</td>
-  </tr>
-
 <!-- ******************** Equinox ********************** -->
-<tr>
-<td colspan="2"><a name="Equinox"></a>
-<div style="font-size: 20px; font-weight: bold;">Equinox Changes</div>
-</td>
-</tr>
-
-  <tr id="multi-locale-registry"> 
-    <td width="30%" valign="top" align="left"><b>Multi-locale support in extension registry</b></td>
-    <td width="70%" valign="top">The Equinox extension registry now supports running
-    in a multi-locale mode. When running in this mode, translated extension attributes can be
-    obtained for any locale, whereas they were previously only available for the system's
-    current locale. Multi-locale mode is enabled via the <tt>-registryMultiLanguage</tt>
-    command line argument, or by setting the Java system property <tt>eclipse.registry.MultiLanguage=true</tt>.
-    <p>
-    The registry also uses a new <tt>LocaleProvider</tt> service for
-    obtaining the locale for a given execution context. This allows a system to provide
-    an alternative mechanism for computing the current locale, rather than using the
-    singleton locale defined by the Java runtime environment.
-    </p>
+	<tr>
+    <td id="Equinox" class="section" colspan="2">
+      <h2>Equinox Changes</h2>
+    </td>
+  	</tr>
+
+  <tr id="framework-update">
+    <td class="title">OSGi R4.3 Core Framework API update</td>
+    <td class="content">
+      The upcoming OSGi R4.3 Core Specification includes many updates to core
+      framework API.  This includes introducing generics in the framework and other core
+      API.  
+
+      <p>The framework package is updated in several ways. First, generic 
+      types are added to existing API where appropriate. Second, new API 
+      is added to exploit generic type safety. In particular there is new API in the service registry 
+      to facilitate working with type parameters. Finally, in order to 
+      tidy up the overall framework API, an adapt method was added to the <tt>Bundle</tt> 
+      interface to allow it to be adapted to types in the new <tt>org.osgi.framework.wiring</tt>
+      and <tt>org.osgi.framework.startlevel</tt> packages. These new packages replace the 
+      <tt>org.osgi.service.packageadmin</tt> and <tt>org.osgi.service.startlevel</tt> packages, 
+      respectively, both of which are now deprecated.</p>
+
+      <p>The tracker API is also updated to use generic types. A new constructor is added 
+      to <tt>ServiceTracker</tt> which take a class argument for type safety.  New <tt>getTracked</tt>
+      methods are added to both <tt>BundleTracker</tt> and <tt>ServiceTracker</tt> to return a map for 
+      keys to values. </p>
+
+      <p>OSGi has a requirement to support J2ME foundation 1.1, even with 
+      the introduction of generic API.  For J2ME platforms, the OSGi API 
+      is compiled in a way that allows it to continue running on J2SE 1.4
+      based VMs (a compiler option known as jsr14).  The Equinox core framework
+      uses this option when it is built and we still support J2SE 1.4 and
+      J2ME Foundation 1.1 runtime environments.</p>
+
+      <p>For more information see the upcoming OSGi Service Platform Release 4 Core 
+      and Compendium Version 4.3 
+      <a href="http://www.osgi.org/Download/File?url=/download/osgi-4.3-early-draft3.pdf">Early Draft 3</a>
+      available December 20th, 2010.</p>
     </td>
   </tr>
-
-  <tr id="equinox.weaving">
-    <td width="30%" valign="top" align="left"><b>New Equinox weaving feature</b></td>
-    <td width="70%" valign="top">The byte code weaving work in the Equinox incubator has passed the 
-        graduation review and the major parts of the work are now part of the Equinox distribution.
-      <p>Equinox Weaving provides a general infrastructure for load-time byte code 
-        weaving for the Equinox OSGi runtime. Currently Equinox Weaving includes 
-        a weaver for AspectJ to load-time weave aspects into bundles (AspectJ Development Tools and 
-        the Scala IDE for Eclipse already use this to realize deeper integration 
-        with the Eclipse Java development tools, for example).</p>
-      <p>These four bundles are contained in the distribution:</p>
-      <ul>
-        <li><tt>org.eclipse.equinox.weaving.hook:</tt> The framework extension project 
-          containing the hooks to insert byte code weaving and caching at 
-          load-time.</li>
-        <li><tt>org.eclipse.equinox.weaving.aspectj:</tt> Contains the bridge to use 
-          AspectJ as load-time weaving implementation.</li>
-        <li><tt>org.eclipse.equinox.weaving.caching:</tt> Provides caching for woven 
-          byte code for standard Java virtual machines.</li>
-        <li><tt>org.eclipse.equinox.weaving.caching.j9:</tt> Contains an alternative 
-          cache implementation that uses IBM J9 VM shared classes for caching woven 
-          classes.</li>
-      </ul>
+  
+  <tr id="framework-hooks">
+    <td class="title">Framework Hooks</td>
+    <td class="content">
+      The upcoming OSGi R4.3 Core Framework Specification includes new framework
+      hooks that provide a means for a bundle to hook into the resolver, bundle
+      events and accessing bundles via the bundle context.  These hooks build 
+      upon the concepts already available in the service hooks introduced in the 
+      OSGi R4.2 Core Specification (package org.osgi.framework.hooks.service).
+
+      <p>The framework hook specification provides a number of new mechanisms that closely 
+      interact with the built-in resolver and lifecycle layer of the framework.  These 
+      interactions are not intended for use by application bundles.  Modifying the behavior
+      of the module and lifecycle layer requires developers to closely follow the semantics 
+      of the OSGi module and lifecycle model and this is often hard, requiring a significant
+      amount of code.  The resolver hook API is included in the 
+      <tt>org.osgi.framework.hooks.resolver</tt> package.  The bundle event and find hooks are
+      included in the <tt>org.osgi.framework.hooks.bundle</tt> package.</p>
+
+      <p>OSGi middleware developers may notice that the composite bundle specification and
+      concept will not be included in the upcoming OSGi R4.3 Core Specification.  The OSGi
+      Core Expert Group decided against building the concept of composite bundles directly 
+      into the framework.  Instead these new core framework hooks have been introduced
+      to allow a layer on top to provide isolation in a similar fashion as the composite
+      bundle concept from earlier OSGi draft specification proposals.</p>
+
+      <p>For more information see the upcoming OSGi Service Platform Release 4 Core 
+      and Compendium Version 4.3 
+      <a href="http://www.osgi.org/Download/File?url=/download/osgi-4.3-early-draft3.pdf">Early Draft 3</a>
+      available December 20th 2010.</p>
+    </td>
+  </tr>
+
+  <tr id="weaving-hooks">
+    <td class="title">Weaving Hooks</td>
+    <td class="content">
+      The upcoming OSGi R4.3 Core Framework Specification includes new hooks for 
+      manipulating class bytecode at runtime (or bytecode weaving). Bytecode weaving has 
+      become more popular, in particular due to its inclusion in the core Java API, and so 
+      there are a number of bytecode weaving technologies that would benefit from weaving 
+      support in the OSGi runtime.  Bytecode weaving requires tight integration with the 
+      class loader for the class to be woven, and also can alter the class dependency graph.
+
+      <p>To support bytecode weaving a new weaving hook is defined in the package 
+      <tt>org.osgi.framework.hooks.weaving</tt>.  The weaving hook allows a hook
+      implementation to manipulate the bytecode of a class before it is defined
+      by an OSGi class loader.  In cases where the class dependency graph has 
+      changed, a weaving hook is able to add additional package constraints to 
+      the bundle that is being woven.</p>
+
+      <p>For more information see the upcoming OSGi Service Platform Release 4 Core 
+      and Compendium Version 4.3 
+      <a href="http://www.osgi.org/Download/File?url=/download/osgi-4.3-early-draft3.pdf">Early Draft 3</a>
+      available December 20th 2010.</p>
+    </td>
+  </tr>
+
+  <tr id="generic-capabilities">
+    <td class="title">Generic Capabilities</td>
+    <td class="content">
+      The upcoming OSGi R4.3 Core Framework Specification includes a new 
+      generic dependency model for bundles that will be understood and enforced by
+      the framework resolver.   Since existing resolve-time dependencies (Import-Package,
+      Require-Bundle etc.) are related to code visibility management, the resolution of
+      such dependencies has traditionally indicated
+      that the bundles in question are ready to share and/or use their code.  With the
+      introduction of a generic dependency model, a bundle can provide and require 
+      capabilities that are not related to code.
+
+      <p>New OSGi bundle manifest headers are introduced to declare arbitrary provided
+      capabilities (<tt>Provide-Capability</tt>) and requirements on them (<tt>Require-Capability</tt>).
+      These headers impact the resolution of the bundles involved and the dependencies among 
+      them, but have no other impact.  It is predicated solely on the
+      existence of declared capabilities to satisfy declared requirements and nothing more.</p>
+
+      <p>Those familiar with Equinox may notice a similarity between the generic dependency
+      model in OSGi R4.3 and the Equinox specific manifest headers <tt>Eclipse-GenericCapability</tt>
+      and <tt>Eclipse-GenericRequire</tt>.  The OSGi R4.3 generic dependency model provides
+      an equivalent and standard way for defining generic capabilities and requirements.
+      Developers are encouraged to migrate off the Equinox specific headers to the new OSGi
+      headers for generic capabilities and requirements.</p>
+
+      <p>For more information see the upcoming OSGi Service Platform Release 4 Core 
+      and Compendium Version 4.3 
+      <a href="http://www.osgi.org/Download/File?url=/download/osgi-4.3-early-draft3.pdf">Early Draft 3</a>
+      available December 20th 2010.</p>
+    </td>
+  </tr>
+
+  <tr id="unified-logging">
+    <td class="title">Unified logging</td>
+    <td class="content">
+      Eclipse and Equinox currently have several logging APIs which do not 
+      always work together nicely.  This includes <tt>ILog</tt>, <tt>FrameworkLog</tt>, and 
+      the OSGi <tt>LogService</tt>, among others.  For the 3.7 release Equinox has pulled the 
+      Extended OSGi log service into the core framework to 
+      aggregate and unify the various logging APIs within the Eclipse
+      Platform.  Before this unification it was not possible for an 
+      <tt>ILogListener</tt> to listen to entries logged directly to the
+      <tt>FrameworkLog</tt> or to the OSGi <tt>LogService</tt>.  Similarly, it was not possible
+      for an OSGi <tt>LogListener</tt> to listen to entries logged directly to
+      the <tt>FrameworkLog</tt> or an <tt>ILog</tt>.  Now through the use of the 
+      <tt>ExtendedLogService</tt>, included in the core framework, listeners
+      can listen to logs coming from any source as long as they are 
+      aggregated through the extended log service.
+      <p>
+      The package <tt>org.osgi.service.log</tt> contains the OSGi LogService
+      API and <tt>org.eclipse.equinox.log</tt> contains the Equinox 
+      extended OSGi log service API.  Both packages are exported by the
+      core framework (<tt>org.eclipse.osgi</tt>).  All eclipse logging
+      APIs are now aggregated through the <tt>org.eclipse.equinox.log.Logger</tt>
+      with the name <tt>org.eclipse.equinox.logger</tt>.  All <tt>ILogListener</tt>
+      instances will be notified of entries logged through this logger.  OSGi <tt>LogListener</tt>
+      instances will also be notified of entries logged through this logger as well as entries logged
+      through any other logger.  The <tt>ExtendedLogReaderService</tt> in Equinox also allows
+      OSGi <tt>LogListener</tt> instances to listen to specific loggers through the use of a filter.
+      </p>
+    </td>
+  </tr>
+
+  <tr id="memory-improvements">
+    <td class="title">Reduced memory use when loading p2 repositories</td>
+    <td class="content">
+      Several changes were made to reduce memory usage during and after loading p2 repositories.
+      Although actual savings depends on the composition of the repositories being loaded we are seeing
+      an average reduction of 23% in the peak memory usage and heap expansion during the load and an 
+      average reduction of 19% in memory used to store the repository after the load.  
+      Using a sample Eclipse build repository with 10 integration builds, this translates to a 
+      reduction in peak memory usage from 92 MB to 71 MB, and a reduction in retained 
+      memory after the load of 48 MB to 39 MB.
+      <p>
+      To maintain repository compatibility between different versions of Eclipse, most of
+      these savings will only be realized when reading repositories generated with a 3.7 M4 or later
+      Eclipse. 
+      </p>
+      <p>
+      You can look forward to additional improvements which did not make it into this Milestone, but 
+      will be included in the next Milestone.
+      </p>
+    </td>
+  </tr>
+
+  <tr id="p2-touchpoint-instructions">
+    <td class="title">More metadata customizations in p2</td>
+    <td class="content">
+	Applications can now set the <tt>-vm</tt> command-line argument within p2 metadata by using the <tt>setJvm</tt>
+	touchpoint instruction.
+<pre>
+<touchpointData ...>
+   <instructions ...>
+      <instruction key='configure'>
+         <b>setJvm</b>(jvm:/usr/bin/java);
+      </instruction>
+      ...
+</touchpointData>
+</pre> 
+	
+	<p>
+	You can also incrementally add program property arguments. This is useful particularly for
+	the case where you have a property in the <tt>config.ini</tt> file whose value is a comma-separated
+	list. Calling <tt>addProgramProperty</tt> will add the value to the end of the list and calling
+	<tt>removeProgramProperty</tt> will remove it from the list. If it is the only item in the list and it is removed,
+	then the property itself is removed.
+	</p>
+<pre>
+<touchpointData ...>
+   <instructions ...>
+      <instruction key='configure'>
+         <b>addProgramProperty</b>(propName:myKey,propValue:myValue);
+      </instruction>
+      <instruction key='unconfigure'>
+         <b>removeProgramProperty</b>(propName:myKey,propValue:myValue);
+      </instruction>
+      ...
+</touchpointData>
+</pre> 
     </td>
   </tr>
-
-  <tr id="equinox.console">
-    <td width="30%" valign="top" align="left"><b>Multi-session Equinox console</b></td>
-    <td width="70%" valign="top">The Equinox console has been enhanced to 
-        allow multiple console sessions to be connected.  Previous versions of the 
-        Equinox console would only allow a single session to be connected at a time.   
-        The console only allowed for connections from two built connection types,
-        through standard in/out or though a telnet port.
-      <p>A new service interface has been introduced: 
-        <tt>org.eclipse.osgi.framework.console.ConsoleSession</tt>.  
-        Implementers of a console session register themselves as an OSGi service.
-        The console implementation will then automatically use the console session
-        for input and output of a console connection.</p>
+  
+  <tr id="p2-history-labels">
+    <td class="title">Add labels to install history states</td>
+    <td class="content">
+	When using the p2 director application to install from the command-line, you can now tag the operation with a label
+	that you can later refer to. This label will appear next to the associated entry in the <b>Installation History</b> table
+	and you can later refer to it when using the director application to revert to a particular installation state. 
+	
+	<p>You call the director application with the <tt>-tag <tagName></tt> argument to set the tag.</p>
+<pre>
+d:\builder\eclipse.exe
+   -application org.eclipse.equinox.p2.director
+   -repository http://download.eclipse.org/releases/helios/
+   -installIU org.eclipse.cdt.feature.group
+   <b>-tag AddCDT</b>
+   -destination d:/eclipse/
+   -profile SDKProfile
+</pre>
+	<p>
+	To get a list of tags for a particular profile, invoke the application with the <tt>-listTags</tt> argument.
+	</p>
+<pre>
+d:\builder\eclipse.exe
+   -application org.eclipse.equinox.p2.director
+   <b>-listTags</b>
+   -profile SDKProfile
+</pre>
+	<p>
+	The list of tags is also available from the <b>About Eclipse -> Installation Details -> Installation History</b> view.
+	</p>
+	<p>
+	<img src="images/install-history-tag.png" alt="Install History View" />
+	</p>
     </td>
   </tr>
-
-  <tr id="equinox.p2.revert">
-    <td width="30%" valign="top" align="left"><b>Revert support in p2 director</b></td>
-    <td width="70%" valign="top">The p2 director application now supports reverting
-    to an earlier profile state from the command line. Use the new <tt>-revert</tt>
-    argument to specify a previous profile state to revert to.
+ 
+  <tr id="p2-director-download">
+    <td class="title">Use the p2 director to download only</td>
+    <td class="content">
+	You can now use the p2 director application to download artifacts without installing them. This
+	is done by invoking the application with the <tt>-downloadOnly</tt> flag.
+<pre>
+d:\builder\eclipse.exe
+   -application org.eclipse.equinox.p2.director
+   -repository http://download.eclipse.org/releases/helios/
+   -installIU org.eclipse.cdt.feature.group
+   <b>-downloadOnly</b>
+   -destination d:/eclipse/
+   -profile SDKProfile
+</pre>
     </td>
   </tr>
 
 <!-- *********************** SWT *********************** -->
-<tr>
-<td colspan="2"><a name="SWT"></a>
-<div style="font-size: 20px; font-weight: bold;">SWT Changes</div>
-</td>
-</tr>
-
-  <tr>
-    <td width="30%" valign="top" align="left"><b>Browser can use WebKitGTK+</b></td>
-    <td width="70%" valign="top">Linux users can now use WebKitGTK+ instead of Mozilla as the Browser control's native renderer.
-      See <a href="http://www.eclipse.org/swt/faq.php#browserwebkitgtk">Can the Browser use the WebKit renderer on GTK?</a>.
-      <p><img src="images/webkitgtk.png" alt="WebKitGTK+ Image"/></p>
-	</td>
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left"><b>Icon support for GTK Text widgets</b></td>
-    <td width="70%" valign="top">The text widget can now display the search and cancel icons inside the widget. This runs on Linux platforms with a GTK version of 2.16 or greater.
-     <p><img src="images/text_search.png" alt="Icon support"/></p>
+	<tr>
+    <td id="SWT" class="section" colspan="2">
+      <h2>SWT Changes</h2>
     </td>
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left"><b>Mozilla browser support on Solaris SPARC</b></td>
-    <td width="70%" valign="top">Mozilla browser support has been added for the Solaris SPARC platform (Solaris 10, GTK+).</td>
-  </tr>
+  	</tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left"><b>Browser closing API</b></td>
-    <td width="70%" valign="top">The new API method <tt>Browser.close()</tt> is used to 
-    close a browser, but allows the close to be cancelled by an <i>onbeforeunload</i> handler.  
-	See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet326.java">Snippet 326</a>.
-     <p><img src="images/browserclose.png" alt="Browser close"/></p>
+  <tr id="touch-support">
+    <td class="title">Touch and gesture support</td>
+    <td class="content">If your hardware supports it, you can now listen for touches or 
+    gestures on SWT controls. Four standard gestures are supported: two-finger panning, 
+    rotation, magnification, and swipe (three fingers on Mac OS X, flicks on Windows). 
+    You can also listen for 'raw' touches on a MacBook touchpad, Magic Trackpad or 
+    Magic Mouse, or a touch-sensitive display that is supported by Windows Touch.
+	For examples of how to use the touch and gesture support see 
+	<a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet352.java">Snippet 352</a> 
+	and <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet353.java">Snippet 353</a>.
+	<p><img src="images/gesture.png" alt="Gesture" title="A gesture from our fearless leader"/></p>
     </td>
   </tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left"><b>Key events for F16-F20 </b></td>
-    <td width="70%" valign="top">New key event constants have been added for the keyboard function keys F16 to F20.</td> 
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left"><b>DND insertion feedback for tables</b></td>
-    <td width="70%" valign="top">The default drop target effect for Table now supports <tt>DND.FEEDBACK_INSERT_BEFORE</tt>
-      and <tt>DND.FEEDBACK_INSERT_AFTER</tt>.
-     <p><img src="images/tablednd.png" alt="desc"/></p>
-    </td> 
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left"><b>Horizontal mouse wheel</b></td>
-    <td width="70%" valign="top">New event constants have been added for horizontal
-    mouse wheels. See <tt>SWT.MouseHorizontalWheel</tt> and <tt>SWT.MouseVerticalWheel</tt>.</td> 
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left"><b>Variable tab stops in StyledText</b></td>
-    <td width="70%" valign="top">New API in StyledText allows the application to specify a non-uniform sequence of tab stops.
-	See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet325.java">Snippet 325</a>.
-     <p><img src="images/sttabs.png" alt="desc"/></p>
-    </td> 
-   </tr>
-
-  <tr id="styledtext-variable-tab-stops">
-    <td width="30%" valign="top" align="left">
-      <b>StyledText: per line variable tab stops</b>
+  <tr id="WebKit_Everywhere">
+    <td class="title">WebKit everywhere</td>
+    <td class="content">The SWT browser now supports using WebKit as its native renderer 
+    on Windows.  Consequently, browsers created with new style <code>SWT.WEBKIT</code> 
+    will use WebKit on Windows, Linux and OS X, provided that the user's machine satisfies the 
+    <a href="http://www.eclipse.org/swt/faq.php#howusewebkit">runtime requirements</a>.  
+    For an example of using WebKit see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet351.java">Snippet 351</a>.
+	<p><img src="images/webkitWindows.png" alt="Webkit"/></p>
     </td>
-    <td width="70%" valign="top">
-      Tab stop support in <tt>StyledText</tt> has been improved to allow each line to have its own sequence of tab stops.
-	  <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet328.java">Snippet 328</a> 
-	  has been modified from Snippet325 to show this.
-     <p><img src="images/variable-tab-stops.png" alt="Multi-line variable tab stops in a StyledText"/></p>
-    </td> 
-  </tr>
-
-  <tr id="swt-clabel-margins">
-    <td width="30%" valign="top" align="left"><b>CLabel set/get margins</b></td>
-    <td width="70%" valign="top">New API has been added to <tt>CLabel</tt> to set and get the left, top, right and bottom margin spacing.
-    </td> 
   </tr>
 
-  <tr id="swt-key-location">
-    <td width="30%" valign="top" align="left">
-      <b>Key location</b>
-    </td>
+  <tr id="webkitgtk">
+    <td width="30%" valign="top" align="left"><b>Browser on Linux defaults to WebKitGTK+</b></td>
     <td width="70%" valign="top">
-		A new field has been added to <code>KeyEvent</code> to allow the application 
-		to identify which keyboard key originated the event, for example, right or left shift key.
-		See <code>KeyEvent.keyLocation</code> for details.
-    </td> 
-  </tr>
-
-  <tr id="swt-scrollbar-api">
-    <td width="30%" valign="top" align="left">
-      <b>New API in Scrollbar</b>
+      Browsers created with style <tt>SWT.NONE</tt> on Linux now use WebKitGTK+ as the default native renderer if it is found on the user's machine.  If WebKitGTK+ is not found then a Mozilla-based native renderer is used instead.
     </td>
-    <td width="70%" valign="top">
-      New methods have been added to <tt>Scrollbar</tt> to return the bounds for the thumb and its track.
-      See <code>ScrollBar.getThumbBounds()</code> and <code>ScrollBar.getThumbTrackBounds()</code>.
-    </td> 
   </tr>
 
-  <tr id="state-mask-selection-event">
-    <td width="30%" valign="top" align="left">
-      <b>State mask for selection events</b>
+  <tr id="Change_Orientation">
+    <td class="title">Change orientation</td>
+    <td class="content">
+      New API <tt>setOrientation()</tt> has been added to <tt>Control</tt> and <tt>Menu</tt> to 
+      allow the application to change the orientation on instances of these widgets. Prior to 
+      the introduction of <tt>setOrientation()</tt> the application had to recreate the widgets 
+      in order to do this. 
+      Note that these methods are only relevant on platforms where BIDI mirroring is supported.
     </td>
-    <td width="70%" valign="top">
-	<tt>SelectionEvent.stateMask</tt> is now set on selection and default selection events for all native controls.
-    </td> 
   </tr>
 
-  <tr id="styledtext-orientation-event">
-    <td width="30%" valign="top" align="left">
-      <b>Orientation event</b>
-    </td>
+  <tr id="accessibleeditabletext">
+    <td width="30%" valign="top" align="left"><b>Accessible editable text support</b></td>
     <td width="70%" valign="top">
-	A new event has been added to <tt>Text</tt>, <tt>Combo</tt>, and <tt>StyledText</tt>. It is sent when the writing direction is changed via keyboard shortcut.
-        See <code>SWT.OrientationChanged</code>
-    </td> 
-  </tr>
-
-  <tr id="browser-post-data">
-    <td width="30%" valign="top" align="left"><b>Browser.setUrl() can specify post data and headers</b></td>
-    <td width="70%" valign="top">The new API <code>Browser.setUrl(String url, String postData, String[] headers)</code> allows clients
-      to include post data and add/override header values when initiating HTTP requests.  See
-      <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet330.java">Snippet 330</a> for an example.
-    </td> 
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>Wrap indent in StyledText</b>
+      SWT Accessibility now has API to support the platform's EditableText interface 
+      used by accessibility tools such as speech recognition systems. Clients can add support
+      for this to their custom controls by providing an implementation of new interface
+      <a href="../reference/api/org/eclipse/swt/accessibility/AccessibleEditableTextListener.html">AccessibleEditableTextListener</a>.
     </td>
-    <td width="70%" valign="top">
-      <tt>StyledText</tt> and <tt>TextLayout</tt> now offer API to allow the application 
-      to control the amount of indent space for wrapped lines.
-      See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet331.java">Snippet 331</a>.
-      <p><img src="images/wrap-indent.png" alt="Wrap Indent"/></p>
-    </td> 
   </tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>Improved bidi segments support</b>
-    </td>
-    <td width="70%" valign="top">
-      The bidi segments support in <tt>StyledText</tt> and <tt>TextLayout</tt> was changed 
-      to allow the application to specify which Unicode Control Characters to use in the segments boundaries.
-      See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet332.java">Snippet 332</a>.
-      <p><img src="images/segments-chars.png" alt="Improved Bidi Segments support"/></p>
-    </td> 
+  <tr id="duplex">
+    <td class="title">Duplex printing</td>
+    <td class="content">
+      New API has been added to <tt>PrinterData</tt> to enable duplex (double-sided) printing without using the <tt>PrintDialog</tt>.
+      This can also be used to seed the <tt>PrintDialog</tt>'s duplex setting before presenting it to the user.
+      <p><img src="images/duplex-printing-pl.png" alt="PrintDialog showing double-sided portrait printing that can be bound on the long edge"/></p>
+      <p><img src="images/duplex-printing-ps.png" alt="PrintDialog showing double-sided portrait printing that can be bound on the short edge"/></p>
+      <p><img src="images/duplex-printing-ll.png" alt="PrintDialog showing double-sided landscape printing that can be bound on the long edge"/></p>
+      <p><img src="images/duplex-printing-ls.png" alt="PrintDialog showing double-sided landscape printing that can be bound on the short edge"/></p>
+     </td>
   </tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>Right-to-Left text support on Cocoa</b>
-    </td>
+  <tr id="cocoatool">
+    <td width="30%" valign="top" align="left"><b>Tool shell support on Cocoa</b></td>
     <td width="70%" valign="top">
-      On Cocoa, setting the <code>SWT.RIGHT_TO_LEFT</code> flag changes the default text reading direction to right to left. 
-      <p><img src="images/cocoartl.PNG" alt="Right-to-Left text support on Cocoa"/></p>
-    </td> 
+      The Cocoa port now supports the <tt>SWT.TOOL</tt> style bit. For an example of this see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet344.java">Snippet 344</a>.
+      <p><img src="images/cocoatool.png" alt="Cocoa Tool"/></p></td>
   </tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>Skin engine support</b>
-    </td>
-    <td width="70%" valign="top">
-      New API added to allow CSS engines to skin widgets at the appropriate time 
-      (See <code>SWT.Skin</code> and <code>Widget.reskin(int)</code>). For more info see 
-      <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet333.java">Snippet 333</a>. 
-
-    </td> 
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>New layout API</b>
-    </td>
-    <td width="70%" valign="top">
-	New API added to <code>Composite</code> to support automatic deferred layout.
-        See <code>Composite.layout(Control[], int)</code>.
-    </td> 
-  </tr>
-  
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>Browser.setText() can restrict content permissions</b>
-    </td>
-    <td width="70%" valign="top">
-        New Browser API <code>setText(String html, boolean trusted)</code> allows clients to 
-        restrict the permissions that are given to Browser content that is set from a String.  
-        Restricting permissions is suggested when the source of the content is not trusted.
-    </td> 
-  </tr>
-
-  <tr id="swt-accessibility"> 
-    <td width="30%" valign="top" align="left">
-      <b>Accessibility upgrade</b>
-    </td>
+  <tr id="wrappablebuttons">
+    <td width="30%" valign="top" align="left"><b>Wrappable buttons</b></td>
     <td width="70%" valign="top">
-    SWT Accessibility has new API for making applications more accessible to Assistive 
-    Technology products such as screen readers.
-    The new API can be found in the <code>org.eclipse.swt.accessibility</code> package.
-    For examples, see the <code>org.eclipse.swt.examples.accessibility</code> package, and the 
-    <a href="http://www.eclipse.org/swt/snippets/#accessibility">Accessibility snippets</a>.
-	</td> 
+      The button control now supports the <b>SWT.WRAP</b> style bit on all platforms. This 
+      allows for the creation of buttons that will automatically wrap any text when resized. 
+      For an example of this see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet345.java">Snippet 345</a>.
+      <p><img src="images/wrap.png" alt="Wrap"/></p></td>
   </tr>
 
-  <tr id="swt.opendoc.event"> 
-    <td width="30%" valign="top" align="left">
-      <b>SWT.OpenDoc Event</b>
-    </td>
+  <tr id="appmenu">
+    <td width="30%" valign="top" align="left"><b>Cocoa getMenuBar</b></td>
     <td width="70%" valign="top">
-    A new event type has been added to SWT to notify applications that a document 
-    should be opened. Listeners for <tt>OpenDoc</tt> events can be added to a <tt>Display</tt>.
-    <p>Support has also been added to the Equinox launcher, and the Eclipse workbench. 
-    Users are now able to associate file types with Eclipse and have Eclipse launched when 
-    they open a file of an associated type.</p>
-    </td> 
-  </tr>
-
- <tr id="swt-program-working-directory"> 
-    <td width="30%" valign="top" align="left">
-      <b>Program working directory</b>
+	<tt>Display.getMenuBar()</tt> is a new API that returns a menu that is 
+	displayed when no shell is visible or when the active shell doesn't have a 
+	menu bar of its own.  This API is currently only available in the Mac OS X Cocoa port; 
+	it returns <code>null</code> on all other platforms.  
+	See <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet347.java">Snippet 347</a> 
+	for an example of using this API in a cross-platform application.
+    <p><img src="images/AppMenuBar.png" alt="menuBar"/></p></td>
+  </tr>
+
+  <tr id="swt-cocoa-system-menu">
+    <td class="title">Cocoa getSystemMenu</td>
+    <td class="content">
+	<tt>Display.getSystemMenu()</tt> is a new API that returns the system-provided menu for the application.
+    You can access menu items in the system menu by comparing a <tt>MenuItem</tt>'s id with various <tt>SWT.ID_</tt>* constants.
+    This API is currently only available in the Mac OS X Cocoa port; it returns <code>null</code> on all other platforms.  
+	See <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet354.java">Snippet 354</a> 
+	for an example of using this API in a cross-platform application.
+    <p><img src="images/system-menu.png" alt="Cocoa System Menu"/></p>
     </td>
-    <td width="70%" valign="top">
-    New API has been added to <tt>Program</tt> to allow the working directory to be 
-    specified when launching an executable. See <code>Program.launch(String fileName, String workingDir)</code> for more details.
-    </td> 
   </tr>
  
- <tr id="swt-xul-runner"> 
-    <td width="30%" valign="top" align="left">
-      <b>XULRunner 1.9.2 support</b>
-    </td>
-    <td width="70%" valign="top">
-    The <tt>Browser</tt> widget now has full support for the recent release of XULRunner 1.9.2.
-    </td> 
-  </tr>
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>TaskItem overlay image</b>
-    </td>
+  <tr id="toolbar">
+    <td width="30%" valign="top" align="left"><b>Cocoa getToolBar</b></td>
     <td width="70%" valign="top">
-      The new API <code>TaskItem#setOverlayImage(Image)</code> allows clients to set an image to be displayed on top of the application button in the taskbar.
-      See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet336.java">Snippet 336</a> for an example.
-      <p><img src="images/overlayimage.png" alt="Overlay Image"/></p>
-    </td> 
+      <tt>Shell.getToolBar()</tt> returns a tool bar that appears in the title area of the shell.
+      Tool items added to that tool bar will have the look and feel of the platform. 
+      You can also add special separator items that provide a fixed-width spacer or 
+      a flexible-width spacer that pushes the tool items on either side of it out to 
+      the next fixed item, or the edge of the shell. This API is currently only available in the
+      Mac OS X Cocoa port; it returns <code>null</code> on all other platforms.
+      <p><img src="images/NativeToolBar.png" alt="nativeToolbar"/></p></td>
   </tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>TaskItem overlay text</b>
-    </td>
+  <tr id="textChar">
+    <td width="30%" valign="top" align="left"><b>Text setTextChars</b></td>
     <td width="70%" valign="top">
-      The new API <code>TaskItem#setOverlayText(String)</code> allows clients to set a short text to be displayed on top of the application button in the taskbar.
-      See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet336.java">Snippet 336</a> for an example. 
-      <p><img src="images/overlaytext.png" alt="Overlay Text"/></p>
-    </td> 
+    There is new API in Text that allows applications to get and set text as a char array 
+    in a secure manner. For an example of this see <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet346.java">Snippet 346</a>.
+ 	</td>
   </tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>TaskItem progress</b>
+  <tr id="CocoaDateTime">
+    <td class="title">Improved Cocoa DateTime support</td>
+    <td class="content">
+      On Cocoa the <tt>DateTime</tt> control now supports the <tt>SWT.DROP_DOWN</tt> style bit.
+      <p><img src="images/cocoadatetime.png" alt="cocoadatetime"/></p>
     </td>
-    <td width="70%" valign="top">
-      The new APIs <code>TaskItem#setProgress(int)</code> and <code>TaskItem#setProgressState(int)</code> allows clients to show progress indication in the application button in the taskbar.
-      See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet336.java">Snippet 336</a> for an example.
-      <p><img src="images/progress.png" alt="Progress"/></p>
-    </td> 
   </tr>
 
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>TaskItem menu</b>
+  <tr id="swt-gtk-datetime">
+    <td class="title">Improved GTK DateTime support</td>
+    <td class="content">
+	On GTK, the <tt>DateTime</tt> control now supports <tt>SWT.DROP_DOWN</tt> style to drop down a calendar from a date editor.
+    All platforms now support this style, and the <tt>HINT</tt> keyword has been removed from the <tt>SWT.DROP_DOWN</tt> style bit.
+    <p><img src="images/gtk-datetime.png" alt="GTK DateTime DROP_DOWN calendar"/></p>
     </td>
-    <td width="70%" valign="top">
-      The new API <code>TaskItem#setMenu(Menu)</code> allows clients to specify a menu for the application button in the taskbar.
-      Running on Windows 7:<br/> 
-     <p><img src="images/menu-win32.png" alt="Menu on Windows"/></p>
-      Running on Mac OS X:<br/> 
-     <p><img src="images/menu-mac.png" alt="Menu on Mac"/></p>
-    </td> 
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>CTabFolder renderer</b>
-    </td>
-    <td width="70%" valign="top">
-      <tt>CTabFolder</tt> has been improved and now allows clients to change its look by implementing their own renderers.
-	<p><img src="images/newctab.png" alt="New CTabFolder"/></p>
-    </td> 
-  </tr>
-
-  <tr> 	
-    <td width="30%" valign="top" align="left">
-      <b>Custom traversals</b>
-    </td>
-    <td width="70%" valign="top">
-      New API <code>Control.traverse(int, event)</code> enables clients to request that a customized traversal be performed.  For an example of this see
-        <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet338.java">Snippet 338</a>.
-    </td> 
-  </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>Draw background at an offset</b>
-    </td>
-    <td width="70%" valign="top">
-      New API was added in <code>Composite.drawBackground</code> that allows for drawing of a parent background at an offset specified by the child. This
-	is useful for aligning patterns between the parent and child when dealing with non-rectangular shapes. 
-    </td> 
   </tr>
 
 <!-- ****************** END OF N&N TABLE ****************** -->
@@ -526,4 +594,4 @@ be easily added to an intro page.
 </table>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF
index a6858de..8bab3eb 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.platform.doc.user; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.help;bundle-version="[3.2.0,4.0.0)"
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/about.html b/eclipse/plugins/org.eclipse.platform.doc.user/about.html
index b71e25d..d50539c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/about.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/about.html
@@ -1,6 +1,6 @@
 <!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" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>About</title>
@@ -25,4 +25,4 @@ indicated below, the terms and conditions of the EPL still apply to any source c
 and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/book.css b/eclipse/plugins/org.eclipse.platform.doc.user/book.css
index c65a811..9282dca 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/book.css
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/book.css
@@ -1 +1 @@
-/*******************************************************************************
 * Copyright (c) 2001, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

@import "../PRODUCT_PLUGIN/book.css";
\ No newline at end of file
+/*******************************************************************************
 * Copyright (c) 2001, 2011 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

@import "../PRODUCT_PLUGIN/book.css";

p.color-blue {
	color: #0000FF
}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/accessmain.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/accessmain.htm
index 2049658..8d5fa77 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/accessmain.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/accessmain.htm
@@ -4,7 +4,7 @@
 
  <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css"> 
  <meta name="keyword" content="shortcut key, accelerator key, hot key, hotkey">
@@ -13,7 +13,7 @@
  <meta name="keyword" content="accessible, disabilities, special need">
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <title>Accessibility features for Eclipse</title>
- <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+ <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
  <body>
@@ -39,7 +39,7 @@
    </li>
    <li>Fonts and colors defined by Eclipse can be set using the
    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
    <strong>General > Appearance > Colors and Fonts</strong></a>
    preference page. See the related link.
    </li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/colordialog.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/colordialog.htm
index cf6f1a9..78e6cb5 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/colordialog.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/colordialog.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
   <LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css"> 
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -16,9 +16,9 @@
 <h2>Windows Color Dialog Color Matrix</h2>
 <table border="1">
   <col >
-  <col span=2 >
-  <col  span=5 >
-  <tr bordercolor="#000000" > 
+  <col span="2">
+  <col  span="5">
+  <tr> 
     <td > <div align="center">salmon</div></td>
     <td> <div align="center">pale yellow</div></td>
     <td > <div align="center">pale green</div></td>
@@ -28,7 +28,7 @@
     <td> <div align="center">pale rose</div></td>
     <td > <div align="center">pink</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr> 
     <td  > <div align="center">red</div></td>
     <td > <div align="center">yellow</div></td>
     <td > <div align="center">apple green</div></td>
@@ -38,7 +38,7 @@
     <td > <div align="center">pale slate blue</div></td>
     <td > <div align="center">magenta</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="center">chocolate</div></td>
     <td > <div align="center">pumpkin</div></td>
     <td > <div align="center">lime</div></td>
@@ -48,7 +48,7 @@
     <td > <div align="center">maroon</div></td>
     <td > <div align="center">rose</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="center">dark red</div></td>
     <td > <div align="center">dark orange</div></td>
     <td > <div align="center">green</div></td>
@@ -58,7 +58,7 @@
     <td > <div align="center">purple</div></td>
     <td > <div align="center">blueviolet</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="center">dark brown</div></td>
     <td > <div align="center">saddle brown</div></td>
     <td > <div align="center">dark forest green</div></td>
@@ -68,7 +68,7 @@
     <td > <div align="center">dark purple</div></td>
     <td > <div align="center">dark blueviolet</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="center">black</div></td>
     <td > <div align="center">olive</div></td>
     <td > <div align="center">dark olive</div></td>
@@ -80,12 +80,12 @@
   </tr>
 </table>
 <h2>Settings for Default Colors in the Windows Color Dialog</h2>
-<p></p>
+
 <table border="1">
   <col >
-  <col span=2 >
-  <col  span=5 >
-  <tr bordercolor="#000000"  > 
+  <col span="2">
+  <col  span="5">
+  <tr>
     <td width="95"  > <div align="left"><strong>Color</strong></div></td>
     <td width="22" > <div align="right"><strong>Hue</strong></div></td>
     <td width="58" > <div align="right"><strong>Saturation</strong></div></td>
@@ -94,7 +94,7 @@
     <td width="37" > <div align="right"><strong>Green </strong></div></td>
     <td width="26" > <div align="right"><strong>Blue</strong></div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">apple green</div></td>
     <td  > <div align="right">60</div></td>
     <td  > <div align="right">240</div></td>
@@ -103,7 +103,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">aqua</div></td>
     <td  > <div align="right">120</div></td>
     <td  > <div align="right">240</div></td>
@@ -112,7 +112,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">black</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">0</div></td>
@@ -121,7 +121,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">blue</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">240</div></td>
@@ -130,7 +130,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">blueviolet</div></td>
     <td  > <div align="right">180</div></td>
     <td  > <div align="right">240</div></td>
@@ -139,7 +139,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">chocolate</div></td>
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">80</div></td>
@@ -148,7 +148,7 @@
     <td  > <div align="right">64</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark blueviolet</div></td>
     <td  > <div align="right">180</div></td>
     <td  > <div align="right">240</div></td>
@@ -157,7 +157,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark brown</div></td>
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">240</div></td>
@@ -166,7 +166,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark forest green</div></td>
     <td  > <div align="right">80</div></td>
     <td  > <div align="right">240</div></td>
@@ -175,7 +175,7 @@
     <td  > <div align="right">64</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark olive</div></td>
     <td  > <div align="right">40</div></td>
     <td  > <div align="right">80</div></td>
@@ -184,7 +184,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark orange</div></td>
     <td  > <div align="right">20</div></td>
     <td  > <div align="right">240</div></td>
@@ -193,7 +193,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark purple</div></td>
     <td  > <div align="right">200</div></td>
     <td  > <div align="right">240</div></td>
@@ -202,7 +202,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark purple</div></td>
     <td  > <div align="right">200</div></td>
     <td  > <div align="right">240</div></td>
@@ -211,7 +211,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark red</div></td>
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">240</div></td>
@@ -220,7 +220,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark teal</div></td>
     <td  > <div align="right">120</div></td>
     <td  > <div align="right">240</div></td>
@@ -229,7 +229,7 @@
     <td  > <div align="right">64</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">dark turquoise</div></td>
     <td  > <div align="right">140</div></td>
     <td  > <div align="right">240</div></td>
@@ -238,7 +238,7 @@
     <td  > <div align="right">64</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">deep sky blue</div></td>
     <td  > <div align="right">140</div></td>
     <td  > <div align="right">240</div></td>
@@ -247,7 +247,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">green</div></td>
     <td  > <div align="right">80</div></td>
     <td  > <div align="right">240</div></td>
@@ -256,7 +256,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">grey</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">0</div></td>
@@ -265,7 +265,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">light green</div></td>
     <td  > <div align="right">90</div></td>
     <td  > <div align="right">240</div></td>
@@ -274,7 +274,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">light grey</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">0</div></td>
@@ -283,7 +283,7 @@
     <td  > <div align="right">192</div></td>
     <td  > <div align="right">192</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">light teal</div></td>
     <td  > <div align="right">120</div></td>
     <td  > <div align="right">80</div></td>
@@ -292,7 +292,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">lime</div></td>
     <td  > <div align="right">80</div></td>
     <td  > <div align="right">240</div></td>
@@ -301,7 +301,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">magenta</div></td>
     <td  > <div align="right">200</div></td>
     <td  > <div align="right">240</div></td>
@@ -310,7 +310,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">maroon</div></td>
     <td  > <div align="right">220</div></td>
     <td  > <div align="right">240</div></td>
@@ -319,7 +319,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">medium blue</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">240</div></td>
@@ -328,7 +328,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">160</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">medium slate blu<span style='display:
   none'>e</span></div></td>
     <td  > <div align="right">160</div></td>
@@ -338,7 +338,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">midnight blue</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">240</div></td>
@@ -347,7 +347,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">navy </div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">240</div></td>
@@ -356,7 +356,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">olive</div></td>
     <td  > <div align="right">40</div></td>
     <td  > <div align="right">240</div></td>
@@ -365,7 +365,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">pale green</div></td>
     <td  > <div align="right">80</div></td>
     <td  > <div align="right">240</div></td>
@@ -374,7 +374,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">pale rose</div></td>
     <td  > <div align="right">220</div></td>
     <td  > <div align="right">240</div></td>
@@ -383,7 +383,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">192</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">pale slate blue</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">81</div></td>
@@ -392,7 +392,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">192</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">pale turquoise</div></td>
     <td  > <div align="right">120</div></td>
     <td  > <div align="right">240</div></td>
@@ -401,7 +401,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">pale yellow</div></td>
     <td  > <div align="right">40</div></td>
     <td > <div align="right">240</div></td>
@@ -410,7 +410,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">pink</div></td>
     <td  > <div align="right">200</div></td>
     <td  > <div align="right">240</div></td>
@@ -419,7 +419,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">pumpkin</div></td>
     <td  > <div align="right">13</div></td>
     <td  > <div align="right">240</div></td>
@@ -428,7 +428,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">purple</div></td>
     <td  > <div align="right">200</div></td>
     <td  > <div align="right">240</div></td>
@@ -437,7 +437,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">red</div></td>
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">240</div></td>
@@ -446,7 +446,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">rose</div></td>
     <td  > <div align="right">220</div></td>
     <td  > <div align="right">240</div></td>
@@ -455,7 +455,7 @@
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">saddle brown</div></td>
     <td  > <div align="right">20</div></td>
     <td  > <div align="right">240</div></td>
@@ -464,7 +464,7 @@
     <td  > <div align="right">64</div></td>
     <td  > <div align="right">0</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">salmon</div></td>
     <td  > <div align="right">0</div></td>
     <td  > <div align="right">240</div></td>
@@ -473,7 +473,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">sea green</div></td>
     <td  > <div align="right">100</div></td>
     <td  > <div align="right">240</div></td>
@@ -482,7 +482,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">64</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">spring green</div></td>
     <td  > <div align="right">100</div></td>
     <td  > <div align="right">240</div></td>
@@ -491,7 +491,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">teal</div></td>
     <td  > <div align="right">120</div></td>
     <td  > <div align="right">240</div></td>
@@ -500,7 +500,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">128</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">turquoise</div></td>
     <td  > <div align="right">133</div></td>
     <td  > <div align="right">240</div></td>
@@ -509,7 +509,7 @@
     <td  > <div align="right">128</div></td>
     <td  > <div align="right">192</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">white</div></td>
     <td  > <div align="right">160</div></td>
     <td  > <div align="right">0</div></td>
@@ -518,7 +518,7 @@
     <td  > <div align="right">255</div></td>
     <td  > <div align="right">255</div></td>
   </tr>
-  <tr bordercolor="#000000"  > 
+  <tr>
     <td  > <div align="left">yellow</div></td>
     <td  > <div align="right">40</div></td>
     <td  > <div align="right">240</div></td>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/fontsandcolors.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/fontsandcolors.htm
index 1278cfa..12b310c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/fontsandcolors.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/fontsandcolors.htm
@@ -2,12 +2,12 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
   <LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css"> 
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <title>Fonts and colors in Eclipse</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body>
@@ -37,7 +37,7 @@
 </dl>
 <p>These fonts can be set via the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Appearance > Colors and Fonts</b></a> preference page. 
   As well as these 4 fonts there are several other secondary font settings. These 
   default to the text font. They can be found on the Colors and Fonts preference 
@@ -61,53 +61,53 @@ operating system settings are not enough, Eclipse defines other colors. All of
 these colors can be adjusted via the following preference pages:</p>
 <ul>
   <li><b><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Appearance > Colors and Fonts</b></a> > Basic </b> (Error text, hyperlink text, active hyperlink text)</li>
   <li><b><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.GeneralTextEditor)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Editors > Text Editors</b></a></b> (Foreground, background and other appearance colors)</li>
   <li><b><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Annotations)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Editors > Text Editors > Annotations</b></a></b> (Text editors annotation colors)</li>
   <li><b><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.LinkedModePreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Editors > Text Editors > Linked Mode</b></a></b> (Text editors linked mode colors)</li>
   <li><b><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.QuickDiff)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Editors > Text Editors > Quick Diff</b></a></b> (Colors used by text editors quick diff feature)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.search.preferences.SearchPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Search</b></a> (Foreground for potential matches)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.ConsolePreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Run/Debug > Console</b></a> (Standard Out, Standard Error, Standard In)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.debug.ui.DebugPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Run/Debug</b></a> (Variable Views changed value, Memory View unbuffered lines)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Ant</b></a> (Error, Warning, Information, Verbose, Debug)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Java > Editor</b></a> (Line number, matching brackets, current line, 
     print, find scope, hyperlink, selection foreground, selection background)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorColoringPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Java > Editor > Syntax Coloring</b></a> (Javadoc HTML tags, 
     Javadoc keywords, Javadoc links, Javadoc others, keyword 'return', keywords 
     excluding 'return', Method names, Multi line comment, Operators and brackets, 
     Others, Single-line comment, Strings, Task Tags)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.CodeAssistPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Java > Editor > Content Assist</b></a> (completion proposal background, 
     completion proposal foreground, method parameter background, method parameter 
     foreground, completion overwrite background, completion overwrite foreground)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.pde.ui.EditorPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Plug-in Development > Editors</b></a> (Text, Processing instructions, 
     Constant strings, Tags, Comments)</li>
   <li><a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.ConsolePreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Team > CVS > Console</b></a> (Command line, Message, Error)</li>
 </ul>
 <h2><img src="../../images/win_only.png" alt="Windows only" border="0" >Accessibility 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/keyboardshortcuts.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/keyboardshortcuts.htm
index 496baab..1e676f7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/keyboardshortcuts.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/keyboardshortcuts.htm
@@ -2,12 +2,12 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 	<LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css"> 
 	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 	<title>Keys</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 <h1>Keys</h1>
@@ -15,7 +15,7 @@
 The function of the keyboard can be extensively customized in Eclipse using the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Keys</strong></a>
 
 preference page. Within Eclipse, key strokes and key sequences are assigned to
@@ -118,7 +118,7 @@ The current platform and locale is determined when Eclipse starts, and does not
   lot of things to keep in mind when customizing key bindings. To make things 
   easier, all key customization is done on the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Keys</b></a> preference page.
 </p>
 <p> <img src="../../images/keys1.png" alt="Keys preference page the About command with no binding" > 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/navigation.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/navigation.htm
index cb15d1b..408d73c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/navigation.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/navigation.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
  <LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css"> 
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -31,7 +31,7 @@
     one.  For editors, Ctrl+F10 will open the menu for the marker bar on the left of the
     editor area.</li>
   <li>Alt+mnemonic will activate the Workbench menu for a particular entry
-    (e.g., Alt+W will bring down the <u>W</u>indow menu).</li>
+    (e.g., Alt+W will bring down the Window menu).</li>
   <li>Microsoft Windows only: Pressing Alt will give focus to the menu
   bar.</li>
  </ul>
@@ -54,6 +54,14 @@
   <li>Ctrl+F7 - Cycle to View</li>
   <li>Ctrl+F8 - Cycle to Perspective</li>
  </ul>
+  <p>If you use the "StickyKeys" input, you might need to enable the "Keep next/previous editor, 
+ view and perspectives dialog open" option on the
+
+<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workbench)")'>
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
+<strong>General</strong></a>
+ 
+ preference page.</p>
  <p>Also, Ctrl+E can be used to activate the editor drop-down, and Ctrl+PageUp
  and Ctrl+PageDown can be used for switching between the open editors.</p>
  <h2>Accelerators </h2>
@@ -65,7 +73,7 @@
 <p>To quickly access UI elements such as views,
 commands, preference pages, and others, you can use the Quick Access dialog,
 available under <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.quickAccess")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Navigation > Quick Access</b></a> and bound to <b>Ctrl+3</b> by
 default. Start typing in the filter field to see matches. For example,
 to open the help view, type Ctrl+3 followed by "help". One
@@ -74,6 +82,18 @@ commands and preference pages related to help. You can use the
 arrow keys to select a different match for a given filter string. Press
 Enter to select the highlighted entry. This will execute the command, or
 open the view, perspective, or wizard etc.</p>
+<h2>Following Embedded Links</h2>
+<p>For links embedded in dialogs, such as the links between preference pages, 
+or hyper-links in the About dialog, press "Space" key to activate the currently 
+selected link.
+</p>
+<h2>Changing Size of Views and Editors</h2>
+<p>You can adjust size of most views and editors using commands in the "Size"
+ system menu. By default the system menu for the active part is bound to <b>Alt+"-"</b>. 
+ After a "Size" submenu (Left, Right, Top, or Bottom) is selected, the selected 
+ part's side will be highlighted and can be moved using the arrow keys.
+</p>
+
  <h2>Help system</h2>
  <p>You can navigate the help system by keyboard using the following key 
  combinations:</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/text_editor.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/text_editor.htm
index bd07600..cd4646c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/text_editor.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/accessibility/text_editor.htm
@@ -1,59 +1,70 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html lang="en">
 <head>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-  <LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css"> 
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-  <title>Configuring accessibility options for textual editors</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+	<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+	<link rel="STYLESHEET" href="../../book.css" charset="ISO-8859-1" type="text/css"/> 
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+	<title>Configuring accessibility options for textual editors</title>
+	<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body>
 
 <h1>Configuring accessibility options for textual editors</h1>
-Textual editors in Eclipse can be configured to better fit the needs of people using Accessible Technology such as screen readers and magnifiers. This document describes the relevant options.
+<p>Textual editors in Eclipse can be configured to better fit the needs of people using Accessible Technology such as screen readers and magnifiers. This document describes the relevant options.</p>
 
 <h2>Accessing Annotations</h2>
 <p>You can navigate to the next annotation by pressing <b>Ctrl+.</b> and to the previous one by pressing <b>Ctrl+,</b>. Out of the box not all available annotation types are included in that navigation,
 for example, breakpoints are not part of it. Breakpoints and other annotation types can either be enabled via the <b>Next Annotation</b> toolbar button drop-down menu or by checking <b>Include in next/previous navigation</b> on the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Annotations)")'>
-   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
    <strong>General > Editors > Text Editors > Annotations</strong></a> preference page.</p>
 <p>Navigating to an annotation moves the text caret to the annotated line, and displays the annotation text in the status line. The next section explains how to read the status line under Windows.</p>
 <p>Some annotation types, for example warnings and errors, can
 be accessed by pressing <b>F2</b> after having navigated to one of them or setting the caret inside the annotation.</p> 
 
-<h2><img src="../../images/win_only.png" alt="Windows only" border="0" >Reading the status line with JAWS</h2>
-JAWS desktop users press <b>Insert+PageDown</b> to read the Eclipse status line and JAWS laptop users press <b>Caps Lock+PageDown</b>.
+<h2><img src="../../images/win_only.png" alt="Windows only" border="0"/>Reading the status line with JAWS</h2>
+<p>JAWS desktop users press <b>Insert+PageDown</b> to read the Eclipse status line and JAWS laptop users press <b>Caps Lock+PageDown</b>.</p>
 
 <h2>Accessing the Current Line Number</h2>
 <p>You can get the current line number by pressing <b>Ctrl+L</b> or via <b>Navigate > Go To Line...</b>.</p>
- 
+
 <h2>Quick Diff Hover</h2>
-Like normal hovers can be shown by pressing <b>F2</b>, the quick diff and revision hovers that appear when hovering over the quick diff ruler on the left can also be shown by pressing a key sequence.
+<p>Like normal hovers can be shown by pressing <b>F2</b>, the quick diff and revision hovers that appear when hovering over the quick diff ruler on the left can also be shown by pressing a key sequence.
 However, out of the box no key sequence is defined for that. Go to the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-   <strong>General > Keys</strong></a> preference page to assign a key sequence to the <b>Show Quick Diff Ruler Tooltip</b> command.
+   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
+   <strong>General > Keys</strong></a> preference page to assign a key sequence to the <b>Show Quick Diff Ruler Tooltip</b> command.</p>
 
 <h2>Annotation Hover</h2>
-Like normal hovers can be shown by pressing <b>F2</b>, the annotation hover that appears when hovering over the vertical ruler on the left can also be shown by pressing a key sequence.
+<p>Like normal hovers can be shown by pressing <b>F2</b>, the annotation hover that appears when hovering over the vertical ruler on the left can also be shown by pressing a key sequence.
 However, out of the box no key sequence is defined for that. Go to the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-   <strong>General > Keys</strong></a> preference page to assign a key sequence to the <b>Show Ruler Annotation Tooltip</b> command.
+   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
+   <strong>General > Keys</strong></a> preference page to assign a key sequence to the <b>Show Ruler Annotation Tooltip</b> command.</p>
+
+<h2>Content Assist Auto Activation</h2>
+<p>In order to prevent content assist to open automatically and hence maybe unexpectedly, it is recommended
+to disable auto activation. In the SDK the options below are available. Other editors might offer similar
+preferences.</p>
+<ul>
+	<li>Deselect <b>Enable auto activation</b> on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntCodeAssistPreferencePage)")'>
+   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/> <strong>Ant > Editor > Content Assist</strong></a> preference page</li>
+
+	<li>Deselect <b>Enable auto activation</b> on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.CodeAssistPreferencePage)")'>
+   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/> <strong>Java > Editor > Content Assist</strong></a> preference page</li>
+</ul>
 
 <h2>Reading Words in the Java Editor</h2>
 <p>In order to get correct results when letting the screen reader read words in the Java editor it is recommended to
-disable <b>Smart caret positioning in Java names</b> on the <b>Java > Editor</b> preference page.</p>
+disable <b>Smart caret positioning in Java names</b> on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage)")'>
+   <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/> <strong>Java > Editor</strong></a> preference page.</p> 
 
 <h2>Reading Java Code in the Java Editor</h2>
 <p>Some screen readers do not read punctuation by default, however it is useful to hear punctuation when reading code.
-When using a Java Editor with a screen reader, you can do the following:
+When using a Java Editor with a screen reader, you can do the following:</p>
 <ul>
-	<li>JAWS:<ul>
-		JAWS reads most punctuation out of the box, however it does not say commas. To change this:
-		<li><b>Utilities > Configuration Manager</b></li>
+	<li>JAWS:<br/>
+		<p>JAWS reads most punctuation out of the box, however it does not say commas. To change this:</p>
+		<ul><li><b>Utilities > Configuration Manager</b></li>
 		<li><b>Set Options > Customize Punctuation...</b></li>
 		<li>Select <b>comma</b> in the list, and change the setting from <b>All</b> to <b>Most</b></li>
 		<li><b>OK</b></li>
@@ -68,9 +79,9 @@ When using a Java Editor with a screen reader, you can do the following:
 		<li><b>Preferences > Speech > Punctuation level: All</b></li>
 		<li><b>OK</b></li>
 	</ul></li>
-	<li>VoiceOver:<ul>
-		VoiceOver reads most punctuation out of the box, however it does not say commas. To change this:
-		<li><b>VoiceOver Utility</b></li>
+	<li>VoiceOver:<br/>
+		<p>VoiceOver reads most punctuation out of the box, however it does not say commas. To change this:</p>
+		<ul><li><b>VoiceOver Utility</b></li>
 		<li><b>Verbosity</b> tab</li>
 		<li><b>Punctuation: All</b></li>
 	</ul></li>
@@ -80,19 +91,16 @@ When using a Java Editor with a screen reader, you can do the following:
 		<li><b>File > Save</b></li>
 	</ul></li>
 </ul>
-</p>
 
-<p><img src="../../images/ngrelt.png" alt="Related tasks" border="0" ><br>
-<a href="accessmain.htm">Accessibility features in Eclipse</a><br>
+<p><img src="../../images/ngrelt.png" alt="Related tasks" border="0"/><br/>
+<a href="accessmain.htm">Accessibility features in Eclipse</a><br/>
 <a href="navigation.htm">Navigating the user interface by using the keyboard</a>
 </p>
 
- <p><img src="../../images/ngrelr.png" alt="Related references" border="0" ><br>
-	<a href="../../reference/ref-7.htm">Accessibility preference page</a><br>
-	<a href="keyboardshortcuts.htm">Keys</a><br>
+ <p><img src="../../images/ngrelr.png" alt="Related references" border="0"/><br/>
+	<a href="../../reference/ref-7.htm">Accessibility preference page</a><br/>
+	<a href="keyboardshortcuts.htm">Keys</a><br/>
 	<a href="fontsandcolors.htm">Font and color settings in Eclipse</a></p>
 
-
-
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cdecorations.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cdecorations.htm
index b0db31a..5577df9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cdecorations.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cdecorations.htm
@@ -2,14 +2,14 @@
 
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Label decorations</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,7 +22,7 @@ Properties view or open its Properties dialog.</P>
 <P CLASS="Para">A number of label decorators may be available. To control which 
   decorators are visible, go to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Appearance > Label Decorations</b></a> preference page.
   This preference page provides a selectable 
   list and description of the available decorations.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cnav.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cnav.htm
index da99c52..c8d472e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cnav.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cnav.htm
@@ -3,14 +3,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Project Explorer view</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -34,7 +34,7 @@ on Microsoft Windows).</P>
 By default, the Project Explorer view is included in the Resources perspective. To add it
 to the current perspective, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.ResourceNavigator)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Project Explorer</b></a>.</P>
 <h2>
 Toolbar</h2>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-11.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-11.htm
index ffa88cf..d1355ff 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-11.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-11.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -39,7 +39,7 @@ Tasks</h2>
   <p>Both of these task types appear in the Tasks view.</p>
 <h2>
 Problems</h2>
-  <P CLASS="Para" Label=Type> Problem markers represent invalid states and are 
+  <P> Problem markers represent invalid states and are 
     categorized as follows..</P>
 </DIV>
 <ul>
@@ -59,16 +59,16 @@ Problems</h2>
 <p>Problems are shown in the Problems view. </p>
 <h2>
 Bookmarks</h2>
-<P CLASS="Para" Label=Type> Bookmarks place an anchor either at a specific line 
+<P> Bookmarks place an anchor either at a specific line 
   in a resource or on the resource itself. They are shown in the Bookmarks view.</P>
 
-<P CLASS="Para" Label=Type>
+<P>
 <img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
 <a href="cbookmrk.htm">Bookmarks</a><br>
 <a href="ctskview.htm">Tasks view</a><br>
   <a href="cprbview.htm">Problems view</a></P>
 
-<P CLASS="Para" Label=Type>
+<P>
 <img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
 <a href="../tasks/tasks-81.htm">Creating a bookmark within a file</a><br>
 <a href="../tasks/tasks-81b.htm">Creating a bookmark for an entire file</a></P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-13.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-13.htm
index 2074640..8e0716a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-13.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-13.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Linked resources</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -50,7 +50,7 @@ Some plug-ins built on top of the Eclipse platform are not compatible with linke
 If this is the case, you can completely disable the linked resource feature to prevent them
 from being created in your workspace.  Linked resources can be disabled from the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.LinkedResources)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Workspace > Linked Resources</b></a> preference page.
 Certain types of projects or team repository providers may also disallow linked resources
 from being created in some projects.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-18.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-18.htm
index 0cd795d..341755e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-18.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-18.htm
@@ -3,7 +3,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -18,10 +18,10 @@
 
 <H1 CLASS="Head">Toolbars </H1>
 
-<p CLASS="Para" Label="Type">There are five kinds of toolbars in the Workbench.</p>
+<p>There are five kinds of toolbars in the Workbench.</p>
 
 
-<p CLASS="Para" Label="Type">The <i> main toolbar</i>, sometimes called the Workbench toolbar,
+<p>The <i> main toolbar</i>, sometimes called the Workbench toolbar,
 is displayed at the top of
 the Workbench window directly beneath the menu bar. The contents of this toolbar change based on the active perspective. Items in the toolbar
 might be enabled or disabled based on
@@ -29,7 +29,7 @@ the state of either the active view or editor. Sections of the main toolbar can
 </p>
 
 
-<p CLASS="Para" Label="Type">There are also individual <i>view toolbars</i>,
+<p>There are also individual <i>view toolbars</i>,
 which appear in the title
 bar of a view. Actions in a view's toolbar apply only to the view in which
 they appear. Some view toolbars include a <b>Menu</b> button, shown as an
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21.htm
index fa182b4..dd0b0f1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -22,22 +22,22 @@ the same manner as the Fast Views). While there's only one Fast View Bar you can
 as you want and can place them where you want in the trim. See '<a href="../gettingStarted/qs-39g.htm">Maximizing a view or editor</a>'
 for details.
 </p>
-<P CLASS="Para" Label=Type>
+<P>
    Fast views are hidden views that can be quickly opened and closed. They work
    like other views except they do not take up space in your Workbench window. </P>
-<P CLASS="Para" Label=Type> Fast views are represented by toolbar buttons on the 
+<P> Fast views are represented by toolbar buttons on the 
   <i>fast view bar</i>, which is the toolbar initially on the bottom 
   left of the Workbench window. When you click the toolbar button for a fast view, 
   that view opens temporarily in the current perspective (overlaying it). As soon as you click 
   outside that view or the view loses focus it is hidden again. The fast view bar can also be docked 
   on the other sides of the Workbench window.</P> 
-<P CLASS="Para" Label=Type>  
+<P>  
  By default the fast view bar is always visible. You can use the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Perspectives</b></a>
   preference page to hide the fast view bar if it is empty.</P>
-<P CLASS="Para" Label=Type>
+<P>
 You can create a new fast view by dragging any open view to the
 fast view bar or by selecting <b>Fast View</b> from the menu that opens when you
 right-click the icon of the view's tab. You can also click on the left-most button of the fast View bar
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21a.htm
index 0c465b4..2ac0dc6 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-21a.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2007, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -14,13 +14,13 @@
 <body>
 <H1 CLASS="Head">
 Detached views</H1>
-<P CLASS="Para" Label=Type>
+<P>
    <img src="../images/win_only.png" alt="Windows only" border="0" > Detached views are
    views that are shown in a separate window with a smaller trim. They work like other views
    except they are always shown in front of the Workbench window. </P>
 <P CLASS="Para">
 <img src="../images/detachview2.png" alt="Picture of Workbench window with a detached view containing the Task view on top of it " border="0"></P>
-<P CLASS="Para" Label=Type>
+<P>
 You can create a new detached view by dragging any open view outside of the Workbench window
 or by selecting <b>Detached</b> from the menu that opens when you
 right-click the view's tab.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-22.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-22.htm
index f90ee3d..c160f27 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-22.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-22.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Builds</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -25,15 +25,15 @@ builder converts each Java source file (.java files) into one or more executable
 domain. For example, a Web link builder could update links to files
 whose name/location changes.</p>
 
-<p CLASS="Para" Label="Type">There are two kinds of builds: </p>
+<p>There are two kinds of builds: </p>
 <ul>
   <li>
-    <p CLASS="Para" Label="Type">An <i>incremental build</i> leverages a
+    <p>An <i>incremental build</i> leverages a
     previously built state and applies the transforms of the configured builders
     to the resources that have changed since the previous state was computed
     (that is, since the last build).</p></li>
   <li>
-    <p CLASS="Para" Label="Type">A clean build discards any problems and 
+    <p>A clean build discards any problems and 
     previously built state.  The next build after a clean will transform all resources according to
     the domain rules of the configured builders.</p></li>
 </ul>
@@ -44,7 +44,7 @@ the workspace as a whole. Specific files and folders cannot be built. There
     are always incremental and always operate over the entire workspace. You can 
     configure your preferences
     (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Window > Preferences > General > Workspace</b></a>) to 
     perform builds automatically on resource modification. </li>
   <li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-4.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-4.htm
index 20d5cfb..94cf826 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-4.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-4.htm
@@ -1,20 +1,20 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Perspectives</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
 <H1 CLASS="Head">
 Perspectives</H1>
-<p CLASS="Para" Label="Type">Each Workbench window contains one or more
+<p>Each Workbench window contains one or more
 perspectives. A perspective defines the initial set and layout of views
 in the Workbench window. Within the window, each perspective shares the same set
 of editors. Each perspective provides a set of functionality aimed
@@ -23,14 +23,14 @@ resources. For example, the Java perspective combines views that you would
 commonly use while editing Java source files, while the Debug perspective
 contains the views that you would use while debugging Java programs. As you work
 in the Workbench, you will probably switch perspectives frequently.</p>
-<P CLASS="Para" Label=Type>Perspectives control what appears in certain menus
+<P>Perspectives control what appears in certain menus
 and toolbars. They define visible <i> action sets</i>, which you
 can change to customize a perspective. You can save a perspective that you
 build in this manner, making your own custom perspective that you can open again
 later.  </p>
-<P CLASS="Para" Label=Type>You can use the
+<P>You can use the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Perspectives</b></a>
 preference page to open perspectives 
 in the same window or in a new window.</p>
@@ -38,7 +38,7 @@ in the same window or in a new window.</p>
 <a href="concepts-2.htm">Workbench</a><br>
 <a href="concepts-6.htm">Editors</a><br>
 <a href="concepts-5.htm">Views</a></p>
-<P CLASS="Para" Label=Type><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><a href="../tasks/tasks-9f.htm"><br>
+<P><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><a href="../tasks/tasks-9f.htm"><br>
 Opening perspectives<br>
 </a><a href="../tasks/tasks-3.htm">Opening views</a><br>
 <a href="../tasks/tasks-24.htm">Changing where perspectives open<br></a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-5.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-5.htm
index 2f372d2..0634362 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-5.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-5.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,15 +12,15 @@
 <BODY BGCOLOR="#ffffff">
 <H1 CLASS="Head">
 Views</H1>
-<P CLASS="Para" Label=Type> Views support editors and provide alternative presentations 
+<P> Views support editors and provide alternative presentations 
   as well as ways to navigate the information in your Workbench.  For example, 
   the Project Explorer and other navigation views display projects and other resources that you are working 
   with.</P>
-<P CLASS="Para" Label=Type>
+<P>
  Views also have their own menus. To open the menu for a view, click the icon at the left
 end of the view's title bar. Some views also have their own toolbars. The actions represented by buttons on view
 toolbars only affect the items within that view. </P>
-<P CLASS="Para" Label=Type>
+<P>
 A view might appear by itself, or stacked with other
 views in a tabbed notebook. You can change the layout of a perspective by
 opening and closing views and by docking them in different
@@ -38,7 +38,7 @@ positions in the Workbench window.  </P>
 <a href="../tasks/tasks-3e.htm">Moving and docking views</a><br>
 <a href="../tasks/tasks-9b.htm">Creating fast views</a><br>
 <a href="../tasks/tasks-9l.htm">Detaching views</a><br>
-<a href="../gettingStarted\qs-39g.htm">Maximizing a view or editor</a><br>
+<a href="../gettingStarted/qs-39g.htm">Maximizing a view or editor</a><br>
   <a href="../tasks/tasks-9i.htm">Saving a user defined perspective</a><br>
 <a href="../tasks/tasks-9j.htm">Resetting perspectives</a>
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6.htm
index 53da9f8..0a81103 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,10 +12,10 @@
 <BODY BGCOLOR="#ffffff">
 <H1 CLASS="Head">
 Editors</H1>
-<P CLASS="Para" Label=Type>
+<P>
 Most perspectives in the Workbench are comprised of an editor area and one or more
 views. </P>
-<P CLASS="Para" Label=Type>You can associate different editors with different
+<P>You can associate different editors with different
 types of files. For example, when you open a file for editing by double-clicking
 it in one of the navigation views, the associated editor opens in the Workbench.
 If there is no
@@ -27,18 +27,18 @@ of editor is referred to as an <i>embedded editor</i>. For example, if you have
 files in your operating system, then opening the file will launch Word as an OLE document within the Workbench editor
 area. The Workbench menu bar and toolbar will be updated with options for
 Microsoft Word.)  </P>
-<P CLASS="Para" Label=Type>Any number of editors can be open at once, but only
+<P>Any number of editors can be open at once, but only
 one can be active at a time. The main menu bar and toolbar for the
 Workbench window contain operations that are applicable to the active
 editor.  </P>
-<P CLASS="Para" Label=Type>Tabs in the editor area indicate the names of
+<P>Tabs in the editor area indicate the names of
 resources that are currently open for editing. An asterisk (*) indicates that an editor has unsaved
 changes.   </P>
-<P CLASS="Para" Label=Type>By default, editors are stacked in the editor area,
+<P>By default, editors are stacked in the editor area,
 but you can choose to tile them in order to view source files simultaneously.</P>
-<P CLASS="Para" Label=Type>
+<P>
 Here is an example of a text editor in the Workbench:</P>
-<P CLASS="Para" Label=Type> <img src="../images/Image5_text_editor.png" alt="Text editor" border="0"> 
+<P> <img src="../images/Image5_text_editor.png" alt="Text editor" border="0"> 
 </P>
 <P> The gray border at the left margin of the editor area may contain
 icons that flag errors, warnings, or problems detected by the system. Icons also
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6a.htm
index 8bf5325..a4fc09c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-6a.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,20 +12,20 @@
 <BODY BGCOLOR="#ffffff">
 <H1 CLASS="Head">
 External editors</H1>
-<P CLASS="Para" Label=Type>Sometimes you may need to use an external program to
+<P>Sometimes you may need to use an external program to
 edit a file in the Workbench. This can occur, for example, when the Workbench
 has no editor for that file type.</P>
-<P CLASS="Para" Label=Type>The external program will be used as the default editor if that program is
+<P>The external program will be used as the default editor if that program is
 registered as the system default editor for that file type and no other editor
 is registered for that file type in the Workbench. For example, on most systems the default
 editor for JPEG files is an application for editing or viewing image files. If there is no other editor
 associated with .jpg or .jpeg files in the Workbench, then opening a JPEG file from the
 Workbench would cause the file to be opened externally, in the system default editor.</P>
-<P CLASS="Para" Label=Type>To open an external program that is not the default editor, you can use
+<P>To open an external program that is not the default editor, you can use
 <b>Open With > Other...</b> from the context menu of a file. External programs can also be registered in
 Eclipse as the associated editor for a given file type. Use the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileEditors)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Editors > File Associations</b></a> preference page to register editors.
 </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antexttools.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antexttools.htm
index 7a09828..e665805 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antexttools.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antexttools.htm
@@ -1,7 +1,7 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <title>Ant & External tools</title>
@@ -45,12 +45,12 @@ Whether run as a stand-alone tool or as a project builder, each external tool ca
 	<a href="concepts-22.htm">Builds</a>
 </p>
 <p>
-	<img src="../images/ngrelt.png" alt="Related tasks" BORDER=0 ><br>
+	<img src="../images/ngrelt.png" alt="Related tasks" BORDER="0"><br>
 	<a href="../tasks/tasks-exttools-running.htm">Running external tools</a><br>
 	<a href="../tasks/tasks-ant-running.htm">Running Ant buildfiles</a>
 </p>
 <p>
-	<img src="../images/ngrelr.png" alt="Related reference" BORDER=0 ><br>
+	<img src="../images/ngrelr.png" alt="Related reference" BORDER="0"><br>
 	<a href="../reference/ref-exttoolsprefs.htm">External Tools preferences</a><br>
 	<a href="../reference/ref-anticons.htm">External Tools and Ant icons</a><br>
 	<a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/reference/views/console/ref-console_view.htm">Console view</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antsupport.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antsupport.htm
index 8c9a233..6a42c77 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antsupport.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-antsupport.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Ant support</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 
@@ -31,7 +31,7 @@ to the associated Java source file and line number.
 <p>
 You can add classes to the Ant classpath and add Ant tasks and types from the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntRuntimePreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Ant > Runtime</b></a> preference page.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-exttools.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-exttools.htm
index de3458e..e3a5d2a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-exttools.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/concepts-exttools.htm
@@ -1,7 +1,7 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <title>External tools</title>
@@ -214,13 +214,13 @@ selected.</p>
 	<a href="concepts-22.htm">Builds</a>
 </p>
 <p>
-	<img src="../images/ngrelr.png" alt="Related reference" BORDER=0 ><br>
+	<img src="../images/ngrelr.png" alt="Related reference" BORDER="0"><br>
 	<a href="../reference/ref-exttoolsprefs.htm">External Tools preferences</a><br>
 	<a href="../reference/ref-anticons.htm">External Tools and Ant icons</a><br>
 	<a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/reference/views/console/ref-console_view.htm">Console view</a>
 </p>
 <p>
-	<img src="../images/ngrelt.png" alt="Related tasks" BORDER=0 ><br>
+	<img src="../images/ngrelt.png" alt="Related tasks" BORDER="0"><br>
 	<a href="../tasks/tasks-exttools-running.htm">Running external tools</a><br>
 	<a href="../tasks/tasks-ant-running.htm">Running Ant buildfiles</a>
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/coutline.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/coutline.htm
index a48448f..6ad2162 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/coutline.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/coutline.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Outline view</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY>
@@ -26,7 +26,7 @@ Outline view</H1>
 <p>
   To add the Outline view to the current perspective, click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.ContentOutline)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Show View > Other... > General > Outline</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpathvars.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpathvars.htm
index 96a0ced..794aa41 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpathvars.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpathvars.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Path variables</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -44,7 +44,7 @@ variable is flagged using a special decorator icon. In addition, the
 <b>File > Properties > Resource</b> 
 property page and the Properties view
 (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.PropertySheet)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Properties</b></a>)
 for a linked resource indicate the 
 variable and whether it is defined or not. A path variable can also specify a 
@@ -56,7 +56,7 @@ You can create new path variables and edit and remove existing path variables in
 the <b>File > Properties > Resource > Linked Resources</b> property page for a project resource
 and at the workspace level on the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.LinkedResources)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Workspace > Linked Resources</b></a> preference page.
 </p>
 <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cprbview.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cprbview.htm
index 9cefd47..4f71af9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cprbview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cprbview.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Problems view (concept)</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body>
@@ -18,7 +18,7 @@
   error, or warning, the editor for the associated resource automatically opens 
   to the relevant line of code. </P>
 <p><img src="../images/prob.png" alt="Picture of the Problems view with two warnings added to it." border="0" ></p>
-<p CLASS="Head">By default the problems view will group your problems by severity. 
+<p CLASS="Head">By default the Problems view will group your problems by severity. 
   You can also group them by type or not at all. Certain components will add their 
   own grouping. For instance the Java development tools (JDT) support adds a Java 
   Problem Type group. The grouping can be selected using the <b>Group By</b> menu.</p>
@@ -29,7 +29,7 @@
 <p CLASS="Head">You can configure the contents of the Problems view to view only warnings 
   and errors associated with a particular resource or group of resources. This is done
   using the <b>Configure Contents</b> dialog available from the drop down menu. You can
-  add multiple filters to the problems view and enable or disable 
+  add multiple filters to the Problems view and enable or disable 
   them as required. Filters can either be additive (any problem that satisfies at least 
   one of the enables filters will be shown) or exclusive (only problems that satisfy all
   of the filters will be shown)  The two most popular filters (All Errors and Warnings on
@@ -42,7 +42,7 @@
 <p CLASS="Head">
   To add the Problems view to the current perspective, click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.ProblemView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Show View > Other... > General > Problems</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpropview.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpropview.htm
index bdbf679..d3552e3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpropview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cpropview.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Properties view</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -30,7 +30,7 @@ Properties from the pop-up menu.
 <p>
   To add the Properties view to the current perspective, click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.PropertySheet)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Show View > Other... > General > Properties</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/ctskview.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/ctskview.htm
index f33beb2..df42dc4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/ctskview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/ctskview.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Tasks view (concept)</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body>
@@ -28,7 +28,7 @@ Tasks view</H1>
 <p CLASS="Head"> By default, the Tasks view is included in the Resource perspective. 
   To add it to the current perspective, click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.TaskList)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Show View > Other... > General > Tasks</b></a>.</p>
 
 <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cworkset.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cworkset.htm
index a3cacd0..261e55b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cworkset.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/cworkset.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,11 +12,11 @@
 <BODY BGCOLOR="#ffffff">
 <H1 CLASS="Head">
 Working sets</H1>
-<P CLASS="Para" Label=Type>
+<P>
 Working sets group elements for display in views or for operations on a set 
 of elements. </P>
 
-<P CLASS="Para" Label=Type> The navigation views use working sets to restrict 
+<P> The navigation views use working sets to restrict 
   the set of resources that are displayed. If a working set is selected in the 
   navigator, only resources, children of resources, and parents of resources contained 
   in the working set are shown. The problems view, tasks view and bookmarks view 
@@ -25,54 +25,55 @@ of elements. </P>
   you can also use working sets to restrict the set of elements that are searched. 
 </P>
 
-<P CLASS="Para" Label=Type> Different views provide different ways to specify 
+<P> Different views provide different ways to specify 
   a working set.  The views in the Eclipse SDK use the <b>Window Working Set</b> by 
-  default. The Window Working Set is specified in <b>Window > Working Sets</b> menu
-  and is initially empty. Views that support working sets typically use the following 
+  default. The Window Working Set is initially empty. In order to modify the window working set
+  you need to enable the <b>Window Working Set</b> command group via <b>Window > Customize Perspective...</b>. You can then
+  modify the window working set via <b>Window > Working Sets</b> menu or via corresponding toolbar button. Views that support working sets typically use the following 
   working set selection dialog to manage existing working sets and to create new working sets:</P>
-<P CLASS="Para" Label=Type>   <img src="../images/Image87_workset_sel.png" alt="Picture of working set selection dialog" border="0" > 
+<P>   <img src="../images/Image87_workset_sel.png" alt="Picture of working set selection dialog" border="0" > 
 </P>
 
-<P CLASS="Para" Label=Type> 
+<P> 
 </P>
 
-<P CLASS="Para" Label=Type>
+<P>
 When you create a new working set you can choose from different types
 of working sets. In the example below you can create a resource working set, a
 Java working set or a help working set.
 </P>
 
-<P CLASS="Para" Label=Type>
+<P>
  
 <img src="../images/Image88_workset_new_type.png" alt="Picture of type selection page of new working set wizard" border="0" >
 </P>
 
-<P CLASS="Para" Label=Type> 
+<P> 
 
 </P>
 
-<P CLASS="Para" Label=Type>
+<P>
 If you create a new resource working set you will be able to select the working 
 set resources as shown below. The same wizard is used to edit an existing working
 set. Different types of working sets provide different kinds of working set 
 editing wizards.
 </P>
 
-<P CLASS="Para" Label=Type>
+<P>
  
 <img src="../images/Image89_workset_new_res.png" alt="Picture of edit page of working set wizard" border="0" >
 </P>
 
-<P CLASS="Para" Label=Type> 
+<P> 
 
 </P>
-<p CLASS="Para" Label=Type>
+<p>
 Working sets may also be a part of a manual build workflow.  With autobuild disabled the 
 <b>Project > Build Working Set</b> menu becomes enabled.  From here you are able to selectively build working sets of your choosing.
 </p>
 
 <DIV CLASS="Note">
-  <P CLASS="Para" Label=Type> <strong>Note:</strong> Newly created resources are 
+  <P> <strong>Note:</strong> Newly created resources are 
     not automatically included in the active working set. They are implicitly 
     included in a working set if they are children of an existing working set 
     element. If you want to include other resources after you have created them 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help.htm
index 51152a7..0afd71a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Help</title>
 </head>
 <body>
@@ -32,7 +32,7 @@ window provide the same information but in different ways.
 The Help view provides help inside the workbench. You can open the view from
 the main menu by selecting <b>Help > Dynamic Help</b> or <b>Help >
 Search</b>. The view will open showing the Related Topics or Search page,
-respectively. You can use links at the bottom of the help view to turn to other
+respectively. You can use links at the top of the help view to turn to other
 pages.
 </p>
 
@@ -95,7 +95,7 @@ An alternative way of presenting context-sensitive information is using
 <b>infopops</b>. You can use the 
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.help.ui.browsersPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help preference page</b>
 </a>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help_view.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help_view.htm
index e91e128..b7431ef 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help_view.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/help_view.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Help view</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/resourcefilters.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/resourcefilters.htm
index 667fb48..c8c7b6f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/resourcefilters.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/resourcefilters.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) Freescale Semiconductor and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) Freescale Semiconductor and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Resource filters</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/virtualfolders.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/virtualfolders.htm
index 857b994..1f40582 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/virtualfolders.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/virtualfolders.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Virtual folders</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/welcome.htm b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/welcome.htm
index 8c65c82..2c66ae6 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/concepts/welcome.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/concepts/welcome.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Welcome</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_AntUI.xml b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_AntUI.xml
index 82277b6..f85d08e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_AntUI.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_AntUI.xml
@@ -112,6 +112,7 @@
     <topic label="Ant Editor" href="reference/ref-anteditor.htm"/> 
     <topic label="Ant Support" href="concepts/concepts-antsupport.htm"/> 
     <topic label="External Tools" href="concepts/concepts-exttools.htm"/>
+    <topic label="Configuring accessibility options for textual editors" href="PLUGINS_ROOT/org.eclipse.platform.doc.user/concepts/accessibility/text_editor.htm"/>
   </context>
 
   <context id="ant_types_page_context">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_ExternalTools.xml b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_ExternalTools.xml
index e272963..bc3da7e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_ExternalTools.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_ExternalTools.xml
@@ -22,6 +22,9 @@
 
   <context id="builders_tab_context">
     <description>This tab allows you to configure when this project builder will be executed.</description>
+    <topic href="gettingStarted/qs-92_project_builders.htm" label="Ant Buildfiles As Project Builders"/>
+    <topic href="gettingStarted/qs-93_project_builder.htm" label="Creating a Project Builder Ant Buildfile"/>
+    <topic href="gettingStarted/qs-93a_project_builder_targets.htm" label="Project Builder Ant Targets"/>
     <topic label="Ant Support" href="concepts/concepts-antsupport.htm"/> 
     <topic label="External Tools" href="concepts/concepts-exttools.htm"/>
   </context>
@@ -30,4 +33,4 @@
     <description>This tab allows you to configure the program location and other attributes of this launch configuration.</description>
     <topic label="External Tools" href="concepts/concepts-exttools.htm"/>
   </context>
-</contexts>
\ No newline at end of file
+</contexts>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team.xml b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team.xml
index 83cd4d4..ea83409 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team.xml
@@ -23,7 +23,7 @@
    	</context>
    	
    	<context id="import_project_set_page_context">
-      <description>This page helps you import a project set from a file on the file system. A project set is a lightweight description of a set of shared projects. It can be used to reconstruct a lineup of shared projects that you have in your workspace.</description>
+      <description>This page helps you import a project set from a file on the file system or directly from a URL. A project set is a lightweight description of a set of shared projects. It can be used to reconstruct a lineup of shared projects that you have in your workspace.</description>
    	</context>
 	
 	<context id="export_project_set_page_context">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team_CVS.xml b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team_CVS.xml
index a2c8785..e6e91e8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team_CVS.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Team_CVS.xml
@@ -155,6 +155,11 @@
        <topic label="Committing" href="tasks/tasks-114.htm"/>
     </context>
     
+    <context id="cvs_scm_url_import_page">
+       <description>Either choose to import all listed bundles in the indicated versions or their latest revisions from HEAD.</description>
+       <topic label="Versions" href="concepts/concepts-27.htm" />
+    </context>
+    
    	<!-- ********************************** -->
  	<!-- TeamMenuActions 					-->
  	<!-- ********************************** -->
@@ -446,7 +451,8 @@
     	<description>This dialog allows you to disconnect the project from CVS control. Keeping the CVS meta information allows the project to be easily re-shared or used with other CVS tools.</description>
     </context>
     <context id="history_filter_dialog_context">
-        <description>This dialog allows you to specify filters that reduce the number of entries displayed in the History View. </description>
+        <description>This dialog allows you to specify filters that reduce the number of entries displayed in the History View.</description>
+        <topic href="tasks/tasks-cvs-16.htm" label="Filtering CVS Revisions in the History View"/>
     </context>
     <context id="date_tag_dialog_context">
         <description>This dialog allows you to specify a date tag which can be used to retrieve the resources that were in the repository at that time.</description>
@@ -496,10 +502,6 @@
       <description>Sets the amount of time in seconds to wait before timing out from a connection to the CVS server.</description>
    	</context>
    	
-   	<context  id="consider_content_pref" >
-      <description>Sets the default compare method for comparing and synchronizing CVS resources. By default timestamps are used to compare CVS files, and this is by far the fastest method. However, in some cases a more accurate comparison can be achieved by comparing file content. This setting can be toggled from within a compare editor or the synchronization view.</description>
-   	</context>
-   	
 	<context  id="replace_deletion_of_unmanaged_pref" >
       <description>Allows resources not under CVS control to be deleted when replacing with resources from the repository.</description>
    	</context>
@@ -530,7 +532,7 @@
    	</context>
    	
    	<context  id="auto_refresh_tag" >
-      <description>Sets whether the tags are automatically refreshed from the repository when comparing or replacing tags from another branch or version.</description>
+      <description>Sets whether the tags are automatically refreshed from the repository when comparing, replacing or checking out from another branch or version.</description>
    	</context>
 
    	<context  id="change_perspective_on_show_annotations" >
@@ -546,7 +548,7 @@
    	</context>
    	
    	<context  id="console_preference_page_context" >
-      <description>This page supports the configuration of the CVS console. Properties that can be set are outpu colors and text font. The console can also be configured to open automatically when there is output.</description>
+      <description>This page supports the configuration of the CVS console. Properties that can be set are output colors and text font. The console can also be configured to open automatically when there is output.</description>
    	</context>
    	
    	<context  id="comment_template_preference_page_context" >
@@ -587,7 +589,8 @@
    	
     <context  id="cvs_compare_preference_page_context" >
       <description>This page allows you to configure various aspects of CVS synchronizations and comparisons.</description>
-      <topic label="CVS Synchronize view" href="reference/ref-33.htm"/>
+      <topic label="CVS Synchronize/Compare preferences" href="reference/ref-19cvs-sync.htm"/>
+      <topic label="CVS Workspace Synchronization" href="reference/ref-33.htm"/>
    	</context>
    	
    	<context  id="general_preference_page_context" >
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_UserAssistance.xml b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_UserAssistance.xml
index e3230b0..6066c02 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_UserAssistance.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_UserAssistance.xml
@@ -47,5 +47,9 @@
       <description>Use this dialog to define search scopes which can be used to restrict the search to specific books.</description>
       <topic href="tasks/help_search.htm" label="Searching Help"/>
    </context>
+   <context id="helpView">
+      <description>This view allows the user to view help pages, view the help table of contents or search the help system.</description>
+      <topic href="concepts/help_view.htm" label="The Help View"/>
+   </context>
   
 </contexts>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Workbench.xml b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Workbench.xml
index 9d92823..c519507 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Workbench.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/contexts_Workbench.xml
@@ -608,6 +608,11 @@
         <topic label="Virtual Folders" href="concepts/virtualfolders.htm"/>
         <topic label="Linked Resources" href="concepts/concepts-13.htm"/>
     </context>
+    <context id="linked_resource_preference_page_context">
+        <description>Allows you to view path variables in the workspace</description>
+        <topic label="Path Variables" href="concepts/cpathvars.htm"/>
+        <topic label="Linked Resources" href="concepts/concepts-13.htm"/>
+    </context>
     <context id="resource_filter_property_page_context">
         <description>Allows you to view and configure resources filters on a project or folder</description>
         <topic label="Resource Filters" href="concepts/resourcefilters.htm"/>
@@ -1258,4 +1263,8 @@
        <topic label="Project Explorer" href="reference/ref-73.htm"/>
        <topic label="Views" href="concepts/concepts-5.htm"/>
     </context>
+    <context id="open_hyperlink_action_context">
+       <description>Opens a hyperlink at the current caret location.</description>
+       <topic href="reference/ref-58.htm" label="Navigate Menu - Open Hyperlink"/>
+    </context>
 </contexts>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/intro/overview.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/intro/overview.htm
index aad9075..e41a3ed 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/intro/overview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/intro/overview.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -9,7 +9,7 @@
 <LINK REL="STYLESHEET" HREF="../../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Eclipse platform overview</title>
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <BODY BGCOLOR="#ffffff">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02a.htm
index fa3a166..34109e9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02a.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>The Workbench</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -26,7 +26,7 @@ The Workbench</h2>
   Click the arrow labeled <b>Workbench</b> in the Welcome view to cause the other
   views in the perspective to become visible. Note you can get the Welcome view back at any time by selecting
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.quickStartAction")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Welcome</b></a>.</p>
 <p>A shortcut bar appears in the top right corner of the window. This allows you
   to open new perspectives and switch between ones already open. The name of the 
@@ -35,7 +35,7 @@ The Workbench</h2>
 <p>You should be seeing the Java perspective. We will switch to the simpler Resource perspective
   to simplify this tutorial. Select 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.ui.resourcePerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Open Perspective > Other... > Resource</b></a>.
   The Project Explorer, Outline, and Tasks views should now be visible. <br>
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02d.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02d.xhtml
index 32e93f8..fb971fe 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02d.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02d.xhtml
@@ -1,8 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02e.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02e.htm
index 8fe4522..5b0fc3f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02e.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-02e.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Views</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -49,7 +49,7 @@ A view might appear by itself or stacked with other views in a tabbed notebook.&
   displays these on the <b>Show View</b> sub-menu. Additional views are available 
   by choosing
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Other...</b></a>
   at the bottom of the <b>Show View</b> sub-menu. This 
   is just one of the many features that provide for the creation of a custom work 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07b.htm
index 2a0b186..47fa986 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07b.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -29,8 +29,7 @@ From the menu bar, select <b>File > New > Project...</b></P>
   </li>
   <li>
     <P CLASS="Para"> In the <b> Project name </b> field, type your name as the 
-      name of your new project. Do not use spaces or special characters in the 
-      project name (for example, "JaneQuser").</P>
+      name of your new project, for example "JaneQuser".</P>
   </li>
   <li>
 <P CLASS="Para">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07d.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07d.htm
index 4acd4cc..dc2b251 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07d.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-07d.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -36,8 +36,7 @@ Using the New button</h3>
   </li>
   <li> 
     <P CLASS="Para"> In the <b> File name</b> field, type a unique name for a 
-      new text file, including the .txt file extension. Do not use spaces or special 
-      characters in this file name (for example, "JanesFile.txt").</P>
+      new text file, including the .txt file extension, for example "JanesFile.txt".</P>
   </li>
   <li> 
     <P CLASS="Para"> Click <b>Finish</b> when you are done.</P>
@@ -84,8 +83,7 @@ Using the New button</h3>
     or select the parent folder </b> field. </P></li>
   <li>
     <P CLASS="Para"> In the <b>File name</b> field, type a unique name for an 
-      .ini file. Do not use any spaces or special characters in the file name 
-      (for example, "JanesINIFile.ini"). Click Finish when you are done. </P>
+      .ini file, for example "JanesINIFile.ini". Click Finish when you are done. </P>
   </li>
   <li> 
     <P CLASS="Para"> Since the Workbench does not have any editors registered 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-10b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-10b.htm
index 0b25854..9d38a53 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-10b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-10b.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Closing an editor</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -55,7 +55,7 @@ In the text area add a 6th line of text:</p>
 
 <P>The preference to close editors automatically can be found in the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Editors</b></a> preference page. There you can configure the number of editors that 
   can be opened prior to editors being reused and what should occur when all editors 
   have unsaved changes.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-12b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-12b.htm
index 2a358aa..98959d7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-12b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-12b.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Opening resources in the Project Explorer</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -40,7 +40,7 @@ editor.</P>
 </ol>
 <P CLASS="Para"> The default editors can be configured using the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileEditors)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Editors > File Associations</b></a> preference page.
 </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-24a.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-24a.xhtml
index c55f888..c56763e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-24a.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-24a.xhtml
@@ -1,15 +1,15 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 	<head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Exporting files</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body bgcolor="#ffffff">
@@ -21,7 +21,7 @@ Exporting files </h1>
   <li> Copying and pasting to the file system, or</li>
   <li> Using the
   <a class="command-link" href="javascript:executeCommand("org.eclipse.ui.file.export")">
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"/>
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
   <b>Export wizard</b></a>.</li>
 </ul>
 <h2>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-31a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-31a.htm
index 0238560..a90e390 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-31a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-31a.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Importing files</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -23,7 +23,7 @@ Importing files </h2>
   <li>
      Using the
      <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-     <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+     <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
      <b>Import wizard</b></a>.</li>
 </ul>
 <p>Using drag and drop or copy/paste to import files relies on operating system support
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34a.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34a.xhtml
index 9172ff7..646a10d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34a.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34a.xhtml
@@ -1,8 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34b.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34b.xhtml
index dd91df1..2dea2a3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34b.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34b.xhtml
@@ -1,8 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34c.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34c.xhtml
index b34e9a6..bad7823 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34c.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-34c.xhtml
@@ -1,8 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
@@ -43,4 +43,4 @@ Embedded editors</h3>
 
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-35b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-35b.htm
index bdfd41a..95aad8a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-35b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-35b.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -18,7 +18,7 @@ Copying</h3>
 <ol>
   <li> 
     <p CLASS="Head"> Ensure that the setup described in the introduction to this 
-      <a href="qs-35.htm#setup">section</a> has been performed.</p>
+      <a href="qs-35.htm#Setup">section</a> has been performed.</p>
   </li>
   <li> 
     <p CLASS="Para"> In one of the navigation views, select JanesFile.txt.</p>
@@ -40,4 +40,4 @@ Copying</h3>
 
 
 </BODY>
-</HTML>
\ No newline at end of file
+</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36a.htm
index 65495c9..089461b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36a.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -31,7 +31,7 @@
   <li> The kinds of files to include in the search can be specified in the <b>File 
     name patterns</b> field. Click <b>Choose...</b> to open the Select Types dialog. 
     This dialog provides a quick way to select from a list of registered extensions. 
-    <blockquote><img src="../images/Image51_choose_ext.png" alt="Type Selection Dialog" border="0"></blockquote>
+    <img src="../images/Image51_choose_ext.png" alt="Type Selection Dialog" border="0">
     For the moment, the search will be confined to .txt files. Ensure *.txt is 
     checked and click <b>OK</b>.</li>
   <li>In the <b>Scope</b> field, specify the files and folders to include in the 
@@ -45,7 +45,7 @@
     in the Search view can be clicked to cancel the search while it is in progress. 
   </li>
   <li>Observe that the Search view displays: 
-    <blockquote> <img src="../images/Image51_search_view.png" alt="Search view" border="0"></blockquote>
+    <img src="../images/Image51_search_view.png" alt="Search view" border="0">
   </li>
 </ol>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36b.htm
index 991aa1a..3c6179e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-36b.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 	<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -35,7 +35,7 @@
     in the Search view, it does <strong>not</strong> affect the files themselves. 
     Select JanesFile.txt and choose <b>Remove Selected Matches</b> from the popup 
     menu. The Search view now shows only the matches for JanesText.txt 
-    <blockquote><img src="../images/Image51_search_reduced.png"  alt="Search view. One match in Workspace." border="0"></blockquote>
+    <img src="../images/Image51_search_reduced.png"  alt="Search view. One match in Workspace." border="0">
   </li>
   <li>Perform a second search for "that" by clicking on the Search button 
     <img src="../images/Image50_search.png"  alt="Search button" border="0"> in 
@@ -43,7 +43,7 @@
   <li>The Search view updates to show the results of the new search. <br>
     Use the drop down button on the Search view's toolbar to move back and forth 
     between the two search results. 
-    <blockquote><img src="../images/Image51_search_switching.png"  alt="Search view. Drop down button." border="0"></blockquote>
+    <img src="../images/Image51_search_switching.png"  alt="Search view. Drop down button." border="0">
   </li>
   <li>In the drop down button choose <b>'it' - 1 match in workspace</b>. The Search 
     view switches back to show the original search. On the context menu choose 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3e.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3e.htm
index acc4f01..086bea8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3e.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3e.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -29,7 +29,7 @@ Using bookmarks</h3>
       is highlighted.<br> 
 	  <strong>Note:</strong> The Bookmarks view supports an additional 
       way to open the file associated with a selected bookmark, simply select 
-      <b>Go To </b>from the bookmark's context menu.<b> </b></P>
+      <b>Go To </b>from the bookmark's context menu.</P>
   </li>
 </ol>
 <p CLASS="Head"> In the Bookmarks view, select the associated file in the Project Explorer. 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3f.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3f.htm
index 58e739a..dc4699b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3f.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-37-3f.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -35,7 +35,7 @@ Removing bookmarks</h3>
     this bookmark. 
     <ul>
       <li>Use <b>Remove Bookmark</b> in the marker bar of the JanesFile.txt editor. 
-        Remember, <b>Add Bookmark</b> was used <b></b>in the marker bar when the 
+        Remember, <b>Add Bookmark</b> was used in the marker bar when the 
         bookmark was first created.<br>
         <img src="../images/Image54_bookmark_remove2.png" alt="Bookmark menu" border="0" ></li>
       <li>Delete the bookmark (as was done above) by using <b>Delete</b> from 
@@ -60,4 +60,4 @@ Removing bookmarks</h3>
 
 
 </BODY>
-</HTML>
\ No newline at end of file
+</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39c.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39c.htm
index d39f1d2..7eb1a16 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39c.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39c.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -13,12 +13,10 @@
 <BODY BGCOLOR="#ffffff">
 <h3>
 Drop cursors</h3>
-<P CLASS="Para"> Drop cursors indicate where it is possible to dock views in the 
+<P CLASS="Para"> Drop cursors indicate where it is possible to dock a part in the 
   Workbench window. Several different drop cursors may be displayed when rearranging 
-  views.</P>
+  a part.</P>
 <TABLE BORDER="1" cellspacing="0">
-<THEAD>
-</THEAD>
 <TBODY>
 <TR>
 <TD height="38" valign="top" align="left">
@@ -28,7 +26,7 @@ Drop cursors</h3>
 </TD>
       <TD height="38" valign="top" align="left"> <P CLASS="Para"> Dock above: 
           If the mouse button is released when a dock above cursor is displayed, 
-          the view will appear above the view underneath the cursor.</P>
+          the part will appear above the part underneath the cursor.</P>
 </TD>
 </TR>
 <TR>
@@ -39,7 +37,7 @@ Drop cursors</h3>
 </TD>
       <TD height="38" valign="top" align="left"> <p CLASS="Para"> Dock below: 
           If the mouse button is released when a dock below cursor is displayed, 
-          the view will appear below the view underneath the cursor.</p></TD>
+          the part will appear below the part underneath the cursor.</p></TD>
 </TR>
 <TR>
 <TD height="38" valign="top" align="left">
@@ -48,7 +46,7 @@ Drop cursors</h3>
 </TD>
       <TD height="38" valign="top" align="left"> <p CLASS="Para"> Dock to the right: 
           If the mouse button is released when a dock to the right cursor is displayed, 
-          the view will appear to the right of the view underneath the cursor.</p> 
+          the part will appear to the right of the part underneath the cursor.</p> 
       </TD>
 </TR>
 <TR>
@@ -56,31 +54,27 @@ Drop cursors</h3>
 <img src="../images/drop_left_source.png" alt="Left arrow" border="0" >
 </TD>
       <TD height="38" valign="top" align="left"> Dock to the left: If the mouse button 
-        is released when a dock to the left cursor is displayed, the view will 
-        appear to the left of the view underneath the cursor. </TD>
+        is released when a dock to the left cursor is displayed, the part will 
+        appear to the left of the part underneath the cursor. </TD>
 </TR>
 <TR>
 <TD height="38" valign="top" align="left">
 <img src="../images/drop_stack.png" alt="Stack icon" border="0" >
 </TD>
       <TD height="38" valign="top" align="left"> Stack: If the mouse button is 
-        released when a stack cursor is displayed, the view will appear as a tab 
-        in the same pane as the view underneath the cursor. </TD>
+        released when a stack cursor is displayed, the part will appear as a tab 
+        in the same pane as the part underneath the cursor. </TD>
 </TR>
 <TR>
 <TD height="38" valign="top" align="left">
 <img src="../images/drop_invalid_source.png" alt="Restricted icon" border="0" >
 </TD>
       <TD height="38" valign="top" align="left"> Restricted: If the mouse button 
-        is released when a restricted cursor is displayed, the view will not dock 
-        there. For example, a view cannot be docked in the editor area. </TD>
+        is released when a restricted cursor is displayed, the part will not dock 
+        there.</TD>
 </TR>
 </TBODY>
 </TABLE>
 
-
-
-
-
 </BODY>
 </HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39g.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39g.htm
index 0108705..1c9cd0f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39g.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-39g.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -100,8 +100,8 @@ while stacks that were independently minimized stay that way.
 <b><i>Tip:</i></b> This difference is important in that it allows you fine grained control over the presentation. While
 using maximize is a one-click operation it's an 'all or nothing' paradigm (i.e. no other stack is allowed
 to share the presentation with a maximized stack). While adequate for most tasks you may find yourself wanting to
-have the presentation show more than stack. In these scenarios don't maximize; minimize all the other stacks <i>except</i>
-the ones you want in the presentaton. Once you have it set up you can still subsequently maximize the editor area but
+have the presentation show more than one stack. In these scenarios don't maximize; minimize all the other stacks <i>except</i>
+the ones you want in the presentation. Once you have it set up you can still subsequently maximize the editor area but
 the un-maximize will only restore the particular stack(s) that were sharing the presentation, not the ones you've
 explicitly minimized.
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43.htm
index 96e0e22..bf71816 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -13,29 +13,29 @@
 <BODY BGCOLOR="#ffffff">
 <h2>
 Perspectives</h2>
-<p class="Para" Type Label>A perspective defines the initial set and layout of
+<p>A perspective defines the initial set and layout of
 views in the Workbench window. One or more perspectives can exist in a single
 Workbench window.  </p>
-<p class="Para" Type Label>Perspectives can be opened in one of two ways:</p>
+<p>Perspectives can be opened in one of two ways:</p>
 <ul>
   <li><p>In the same (existing) Workbench window.</p> </li>
   <li><p>In a new Workbench window.</p></li> 
 </ul>
-<p class="Para" Type Label>Perspectives define visible action sets, which can 
+<p>Perspectives define visible action sets, which can 
   be changed to customize a perspective. A perspective that is built in this manner 
   can be saved, creating a custom perspective that can be opened again later.   </p>
-<P CLASS="Para"> The Workbench window displays one or more perspectives. Each 
+<p> The Workbench window displays one or more perspectives. Each 
   product determines initially what default perspective is displayed, in this 
   example it is the Resource perspective. A perspective consists of views such 
   as the Project Explorer as well as editors for working with resources. More than one 
   Workbench window can be open at any given time.  </P>
-<P CLASS="Para"> So far, only the Resource perspective (shown below) has been 
+<P> So far, only the Resource perspective (shown below) has been 
   used in this tutorial. This section will explore how to open and work with other 
   perspectives. </P>
-<P CLASS="Para"> A perspective provides a set of functionality aimed at accomplishing 
+<P> A perspective provides a set of functionality aimed at accomplishing 
   a specific type of task, or working with a specific type of resource.   
 </P>
-<P CLASS="Para">
+<P>
 <img src="../images/Image1.png" alt="Eclipse Workbench" border="0" > </P>
 <P> </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43e.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43e.htm
index 70d33d5..bba130a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43e.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-43e.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -67,15 +67,14 @@ perspectives</h3>
     <p CLASS="Para">Expand <b>General</b> and select <b>Perspectives</b>.</p>
   </li>
   <li> 
-    <p CLASS="Para">Select <b>Resource (default) > Make Default</b> and then 
-      click <b>OK</b>.</p> 
+    <p CLASS="Para">Select the <b>Resource</b> prespective and then click <b>Reset</b> on the right side.</p> 
     <blockquote> 
       <p CLASS="Para"><img src="../images/Image71_pers_reset.png" alt="Reset Perspective" border="0"></p></blockquote>
   </li>
   <li> 
     <p CLASS="Para">Any changes to the saved state of the perspective has now 
       been undone. To update the current copy of the Resource perspective that 
-      is being worked with, also choose <b>Window > Reset Perspective</b> from 
+      is being worked with, also choose <b>Window > Reset Perspective...</b> from 
       the Workbench's menu bar. </p>
   </li>
 </ol>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-52.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-52.htm
index 4db14df..b4c7902 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-52.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-52.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -27,8 +27,7 @@ Comparing</h2>
   <li> 
     <p CLASS="Para">Create a new simple project using <b>File > New > Project</b>. 
       Be sure to give the project a distinct name by typing unique name as the 
-      name of the new project (for example, "JaneQUserCompare"). Do 
-      not use spaces or special characters in the project name.</p></li>
+      name of the new project, for example "JaneQUserCompare".</p></li>
   <li> 
     <p CLASS="Para">Use the project's pop-up menu to create a file called file1.txt.</p>
     <p CLASS="Para">In the editor for file1.txt type the following lines of text 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-60_team.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-60_team.htm
index 67e68bc..a347ef0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-60_team.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-60_team.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -27,12 +27,5 @@
   through these steps as well. Another option is to start up two Eclipse instances
   at once and step through both roles yourself.</P>
 
-
-<UL CLASS="UnorderedList">
-
-</UL>
-
-
-
 </BODY>
-</HTML>
\ No newline at end of file
+</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-83_edit.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-83_edit.htm
index 120528e..d6fd27b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-83_edit.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-83_edit.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
@@ -60,7 +60,7 @@
   <target name="World">
     <echo>${WorldText}</echo>
   </target>
-  </project>
+</project>
 </pre>
 
 </li>
@@ -76,7 +76,7 @@
     type <code><tar</code>, then hit <b>Ctrl-Space</b> to activate content assist. Notice that 
     now the only valid completions are the <code></target></code> and the <code>tar</code> tag. This is because the Ant editor 
     knows that nested targets are not allowed.<br><br>
-    <img src="../images/Image602_tar_assist.png" alt="Code assist in Ant editor" border="0"> 
+    <img src="../images/ant_tar_assist.png" alt="Code assist in Ant editor" border="0"> 
     <br></li>
   <li>Close the editor and do not save changes.</li>
 </ol>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-92_project_builders.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-92_project_builders.htm
index 55a8374..410c5d4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-92_project_builders.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-92_project_builders.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -38,6 +38,7 @@
 	<a href="qs-85_ant_configs.htm">Saving & Reusing Ant options</a><br>
 	<a href="qs-93_project_builder.htm">Creating a project builder Ant buildfile</a><br>
 	<a href="qs-94_run_pj.htm">Executing project builders</a><br>
+	<a href="qs-93a_project_builder_targets.htm">Project Builder Ant Targets</a><br>
 	<a href="qs-95_external_tools.htm">External tools</a><br>
 	<a href="qs-96_non_ant_pjs.htm">Non-Ant project builders</a><br>
 	<a href="qs-97_standalone_ets.htm">Stand-alone external tools</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-93_project_builder.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-93_project_builder.htm
index 7cdd93f..35324e4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-93_project_builder.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-93_project_builder.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -24,11 +24,11 @@
     the following content, and save changes.
 <pre>
 <?xml version="1.0" encoding="UTF-8"?>
-  <project name="HW.makejar" default="makejar" basedir=".">
+<project name="HW.makejar" default="makejar" basedir=".">
   <target name ="makejar" description="Create a jar for the HW project">
     <jar jarfile="HelloWorld.jar" includes="*.class" basedir="bin"/>
   </target>
-  </project>
+</project>
 </pre>
   </li>
   <li>In one of the navigation views, select the HW project and choose <b>Properties</b> 
@@ -42,7 +42,7 @@
     and set the <b>Location</b> to be the <code>projectBuilder.xml</code> buildfile created 
     above. Then click the <strong>Base Directory</strong> <b>Browse Workspace...</b> 
     and set the Base Directory to be the HW project.
-    <p><img src="../images/Image611_et_main_tab.png" alt="Main tab of External tools dialog" border="0" ></p>
+    <p><img src="../images/ant_builder_main_tab.png" alt="Main tab of External tools dialog" border="0" ></p>
   </li>
   <li>In the <b>Refresh</b> tab, we want to be sure that when our <code>HelloWorld.jar</code> 
     is created, we see it in Eclipse. By default, no refreshing is done when a 
@@ -51,14 +51,14 @@
     of scoped variables. Because refreshing can be expensive, you should, in general,
     refresh the smallest entity that contains all resources that will be affected 
     by your buildfile.
-    <p><img src="../images/Image612_et_refresh_tab.png" alt="Refresh tab of External tools dialog" border="0"></p>
+    <p><img src="../images/ant_builder_refresh_tab.png" alt="Refresh tab of External tools dialog" border="0"></p>
   </li>
   <li>In the <b>Targets</b> tab, you can specify when this project builder 
     is executed and which targets. By default, the <code>default</code> target is set to run <strong>After a "Clean" 
     </strong> and <strong>Manual Build</strong>. You can specify other targets and other triggers. Running your project builder 
     during auto builds is possible, though not recommended because of performance 
-    concerns.
-    <p><img src="../images/Image610_et_targets_tab.png" alt="Targets tab of External tools dialog" border="0" ></p>
+    concerns. More information about the build kinds can be found <a href="qs-93a_project_builder_targets.htm">here</a>.
+    <p><img src="../images/ant_builder_targets_tab.png" alt="Targets tab of External tools dialog" border="0" ></p>
   </li>
   <li>Apply the changes and click <b>OK</b>.</li>
   <li>Back in the project properties dialog, you will now see a project builder 
@@ -66,7 +66,7 @@
     to save the project builder and close the dialog. <br>
     <strong>Note:</strong>You can change the order so that your Ant buildfile runs before 
     the <b><a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/concepts/concept-java-builder.htm">Java builder</a></b>, though that wouldn't make sense in this example. 
-    <p><img src="../images/Image613_project_properties.png" alt="Project properties dialog" border="0" ></p>
+    <p><img src="../images/builder_property_page.png" alt="Project properties dialog" border="0" ></p>
   </li>
 </ol>
 <p>The <b><a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/concepts/concept-java-builder.htm">Java builder</a></b> runs the internal Eclipse Java compiler which in 
@@ -77,6 +77,7 @@
 <p>
 	<img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
 	<a href="qs-82_create.htm">Creating Ant buildfiles</a><br>
+	<a href="qs-93a_project_builder_targets.htm">Project Builder Ant Targets</a><br>
 	<a href="qs-83_edit.htm">Editing Ant buildfiles</a><br>
 	<a href="qs-85_ant_configs.htm">Saving & Reusing Ant options</a><br>
 	<a href="qs-84_run_ant.htm">Running Ant buildfiles</a><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-93a_project_builder_targets.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-93a_project_builder_targets.htm
new file mode 100755
index 0000000..35e75e3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-93a_project_builder_targets.htm
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
+<head>
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
+<title>Project Builder Ant Targets</title>
+</head>
+<body>
+<h1>Project Builder Ant Targets</h1>
+<p>
+    When creating a new project builder using an Ant build file, one of the key pieces of information to set 
+    up and understand is the targets and when they will be executed.
+</p>
+<p>
+    When you create a new Ant buildfile project builder, the default target is set to be run for <b>After a "Clean"</b> 
+    and <b>Manual Build</b> and the remaining two kinds; <b>Auto Build</b> and <b>During a "Clean"</b> are set to not be executed. If you want 
+    to configure your builder to execute specific targets from your buildfile for specific build kinds then more understanding of what the build
+    kinds are, and more importantly, when they will be executed is required. 
+</p>
+<p>
+    The following sections describe each build kind and when it is executed.
+</p>
+<h3>After a "Clean"</h3>
+<p>
+    This build kind is executed <i>after</i> a project has been cleaned via the <b>Project > Clean...</b> command.
+</p>
+<p> 
+    <b>After a "Clean"</b> will execute during the next build immediately following the clean regardless of your workspace auto-build settings.
+    If you have workspace auto-build <i>on</i> this will execute automatically following the clean, otherwise you will have to invoke
+    one of the manual build commands; <b>Project > Build Project</b>, <b>Project > Build All</b> or enable <b>Project > Build Automatically</b>. 
+</p>
+
+<h3>Manual Build</h3>
+<p>
+    This build kind is executed when you have workspace auto-build (<b>Project > Build Automatically</b>) turned <i>off</i> and you invoke a build via the <b>Project > Build Project</b> 
+    or <b>Project > Build All</b> (<b>Ctrl+B</b>) command.
+</p>
+<p>
+    There are three exceptions to when <b>Manual Build</b> targets execute:
+</p>
+<ol>
+    <li>If the build is the first build following a clean (<b>Project > Clean...</b>) then an <b>After a "Clean"</b> build will be executed instead</li>
+    <li>If there are no targets set to run for <b>After a "Clean"</b>, then the <b>Manual Build</b> targets will be executed following a clean (<b>Project > Clean...</b>)</li>
+    <li>If there is nothing to be built, i.e. no changes have been made to the project, then <b>Manual Build</b> targets will <i>not</i> be executed</li>
+</ol>
+
+<h3>Auto Build</h3>
+<p>
+    This build kind is executed when you have workspace auto-build (<b>Project > Build Automatically</b>) turned <i>on</i> and you make changes in your 
+    project and save them.
+</p>
+
+<h3>During a "Clean"</h3>
+<p>
+    This build kind is executed when you invoke a clean build via the (<b>Project > Clean...</b>) command. 
+</p>
+<p>
+    <b>During a "Clean"</b> does not depend on the workspace auto-build setting (<b>Project > Build Automatically</b>) as it executes
+    during the clean build, not after, like <b>After a "Clean"</b> or <b>Manual Build</b>.
+</p>
+
+<p>
+	<img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
+	<a href="qs-82_create.htm">Creating Ant buildfiles</a><br>
+	<a href="qs-83_edit.htm">Editing Ant buildfiles</a><br>
+	<a href="qs-85_ant_configs.htm">Saving & Reusing Ant options</a><br>
+	<a href="qs-84_run_ant.htm">Running Ant buildfiles</a><br>
+	<a href="qs-92_project_builders.htm">Ant buildfiles as project builders</a><br>
+	<a href="qs-94_run_pj.htm">Executing project builders</a><br>
+	<a href="qs-95_external_tools.htm">External tools</a><br>
+	<a href="qs-96_non_ant_pjs.htm">Non-Ant project builders</a><br>
+	<a href="qs-97_standalone_ets.htm">Stand-alone external tools</a>
+</p>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-94_run_pj.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-94_run_pj.htm
index 4559dce..07f3453 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-94_run_pj.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-94_run_pj.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -41,6 +41,7 @@ explicitly tell them to run.  Instead, they run automatically whenever a qualify
 	<a href="qs-85_ant_configs.htm">Saving & Reusing Ant options</a><br>
 	<a href="qs-84_run_ant.htm">Running Ant buildfiles</a><br>
 	<a href="qs-93_project_builder.htm">Creating a project builder Ant buildfile</a><br>
+	<a href="qs-93a_project_builder_targets.htm">Project Builder Ant Targets</a><br>
 	<a href="qs-92_project_builders.htm">Ant buildfiles as project builders</a><br>
 	<a href="qs-95_external_tools.htm">External tools</a><br>
 	<a href="qs-96_non_ant_pjs.htm">Non-Ant project builders</a><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-96_non_ant_pjs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-96_non_ant_pjs.htm
index 5f920e9..005a3c3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-96_non_ant_pjs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-96_non_ant_pjs.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -10,9 +10,8 @@
 <body>
 <h1>Non-Ant project builders</h1>
 <p> When we worked through our <a href="qs-93_project_builder.htm">project builder example</a>, you may have 
-  noticed that when we created our project builder Ant buildfile, we had a choice 
-  of external tool type:<br><br>
-  <img src="../images/Image614_et_type_dialog.png" alt="Choice of external tool type dialog" border="0" > 
+  noticed that when we created our project builder as an Ant buildfile kind. This time we will choose the Program kind when we create a 
+  project builder. 
 </p>
 <p>The <b>Program</b> option is essentially a catch-all, allowing you 
   to define an external tool for any executable file that is accessible on your 
@@ -29,7 +28,7 @@
   <li>The <b>External Tools</b> dialog appears, configured for <b>Program</b> type tools.</li>
   <li>Enter the location of your script, its working directory, and any required 
     arguments. <br><br>
-    <img src="../images/Image615_program_builder.png" alt="External tools dialog for program type tools" border="0" >
+    <img src="../images/et_builder_main_tab.png" alt="External tools dialog for program type tools" border="0" >
     <br><br> 
   </li>
   <li>In this case, the script is a Windows <code>.bat</code> file, but it could be a Linux 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-97_standalone_ets.htm b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-97_standalone_ets.htm
index 16c8860..8861845 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-97_standalone_ets.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/gettingStarted/qs-97_standalone_ets.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -20,11 +20,11 @@
   <li>Select some <code>.jar</code> file in your workspace.</li>
   <li>Select <b>Run > External Tools > Open External Tools Dialog...</b> from the workbench 
     toolbar.<br><br>
-    <img src="../images/Image616_et_dropdown.png" alt="External tools drop-down menu" border="0" >
+    <img src="../images/et_run_dropdown.png" alt="External tools drop-down menu" border="0" >
     <br><br> 
   </li>
   <li>Select <b>Program</b> in the tree, then click <b>New</b>.<br><br>
-    <img src="../images/Image617_jar_inspector.png" alt="External tools dialog for jar inspector script" border="0" >
+    <img src="../images/et_standalone.png" alt="External tools dialog for jar inspector script" border="0" >
     <br><br>  
   </li>
   <li>Name the launch configuration <code>jar inspector</code>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image1.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image1.png
index 8d812b8..3cc4891 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image1.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image1.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image11_new_wizard.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image11_new_wizard.png
index 78e8231..197a0e2 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image11_new_wizard.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image11_new_wizard.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image209_workspace.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image209_workspace.png
index 1858ec1..4e01957 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image209_workspace.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image209_workspace.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image216_history_view.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image216_history_view.png
index 0958234..5347497 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image216_history_view.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image216_history_view.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image219_pref_cv2.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image219_pref_cv2.png
index e4bab41..fea0358 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image219_pref_cv2.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image219_pref_cv2.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image223_pref_persp.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image223_pref_persp.png
index b5d4d0b..aaf4311 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image223_pref_persp.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image223_pref_persp.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image247_projsel_wiz.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image247_projsel_wiz.png
deleted file mode 100644
index 16fc41c..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image247_projsel_wiz.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image265_team_project.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image265_team_project.png
index 4042690..f01a732 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image265_team_project.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image265_team_project.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference.png
index 8977ae1..04c737d 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference2.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference2.png
index 204f353..21f36d8 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference2.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image274_fonts_preference2.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_editor.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_editor.png
index 8c1fbd2..a1e7ae8 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_editor.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_editor.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_view.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_view.png
index aeb1347..4b9b372 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_view.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image2_active_view.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image4_showview.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image4_showview.png
index af10210..14540ad 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image4_showview.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image4_showview.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image55_reset.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image55_reset.png
index 664db54..d194d38 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image55_reset.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image55_reset.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image5_text_editor.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image5_text_editor.png
index 331563c..fe5fb1d 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image5_text_editor.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image5_text_editor.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image610_et_targets_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image610_et_targets_tab.png
deleted file mode 100644
index 7f87ae7..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image610_et_targets_tab.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image611_et_main_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image611_et_main_tab.png
deleted file mode 100644
index 4e94239..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image611_et_main_tab.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image612_et_refresh_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image612_et_refresh_tab.png
deleted file mode 100644
index e883a73..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image612_et_refresh_tab.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image613_project_properties.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image613_project_properties.png
deleted file mode 100644
index 24f502e..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image613_project_properties.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image614_et_type_dialog.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image614_et_type_dialog.png
deleted file mode 100644
index 8fb61dc..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image614_et_type_dialog.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image615_program_builder.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image615_program_builder.png
deleted file mode 100644
index 9cb138b..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image615_program_builder.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image617_jar_inspector.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image617_jar_inspector.png
deleted file mode 100644
index 32fcade..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image617_jar_inspector.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane-history.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane-history.png
index ede9035..fa2b509 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane-history.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane-history.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane3_conflict.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane3_conflict.png
index afa9e0e..81a033c 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane3_conflict.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image83_jane3_conflict.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image84_replace3.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image84_replace3.png
index 88649a8..fdaab53 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image84_replace3.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image84_replace3.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_1.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_1.png
deleted file mode 100644
index d34f833..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_1.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_2.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_2.png
deleted file mode 100644
index 8f0fcd6..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_2.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_3.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_3.png
deleted file mode 100644
index 37062f0..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/Image91_ant_prefs_3.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_main_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_main_tab.png
new file mode 100644
index 0000000..309ee72
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_main_tab.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_refresh_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_refresh_tab.png
new file mode 100644
index 0000000..0dbb2e0
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_refresh_tab.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_targets_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_targets_tab.png
new file mode 100644
index 0000000..2f0f94c
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_builder_targets_tab.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_classpath_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_classpath_tab.png
new file mode 100644
index 0000000..f163002
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_classpath_tab.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_code_assist.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_code_assist.png
deleted file mode 100644
index 466f492..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_code_assist.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_content_assist.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_content_assist.png
new file mode 100644
index 0000000..d2b6763
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_content_assist.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_appearance.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_appearance.png
index c6012c5..5d06163 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_appearance.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_appearance.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_folding.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_folding.png
index cff1140..caa3ff2 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_folding.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_folding.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_problems.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_problems.png
index c51b299..6b819e2 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_problems.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_problems.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_syntax.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_syntax.png
index cb726e6..62288bd 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_syntax.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_editor_syntax.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_formatter.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_formatter.png
index 0f61905..a177737 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_formatter.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_formatter.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_prefs.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_prefs.png
index 844950a..cf0c97d 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_prefs.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_prefs.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_run_dialog.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_run_dialog.png
index 870f32f..e6943cc 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_run_dialog.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_run_dialog.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_classpath.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_classpath.png
new file mode 100644
index 0000000..0a20875
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_classpath.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_properties.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_properties.png
index 4084009..8fcf46a 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_properties.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_properties.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_tasks.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_tasks.png
new file mode 100644
index 0000000..423dc91
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_tasks.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_types.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_types.png
new file mode 100644
index 0000000..3ff293f
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_runtime_types.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_tar_assist.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_tar_assist.png
new file mode 100644
index 0000000..8b451eb
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_tar_assist.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_templates.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_templates.png
index 60699a7..462d6da 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_templates.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ant_templates.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/builder_property_page.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/builder_property_page.png
new file mode 100644
index 0000000..8b9c359
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/builder_property_page.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/cvs_filter_res_history.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/cvs_filter_res_history.png
index 365aec3..679ef3c 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/cvs_filter_res_history.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/cvs_filter_res_history.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/detachview2.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/detachview2.png
index b74b62f..12dd5f8 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/detachview2.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/detachview2.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/et_builder_main_tab.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_builder_main_tab.png
new file mode 100644
index 0000000..302d380
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_builder_main_tab.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dialog.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dialog.png
index 3855fdc..3a9ec67 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dialog.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dialog.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dropdown.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dropdown.png
index 25895c8..f5e0974 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dropdown.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_dropdown.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/et_run_dropdown.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_run_dropdown.png
new file mode 100644
index 0000000..949ebb5
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_run_dropdown.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/et_standalone.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_standalone.png
new file mode 100644
index 0000000..1a4d67f
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/et_standalone.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/external_tools_prefs.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/external_tools_prefs.png
index 34e6985..0eff386 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/external_tools_prefs.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/external_tools_prefs.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/first_anteditor.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/first_anteditor.png
index 2bab7a8..eb3d55e 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/first_anteditor.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/first_anteditor.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_bookmarks.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_bookmarks.png
index 7a0f835..39e9153 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_bookmarks.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_bookmarks.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_context.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_context.png
index 54b4f47..0e7142a 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_context.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_context.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_index.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_index.png
index afb1c54..d0038e3 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_index.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_index.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_search.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_search.png
index f573b97..2feae47 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_search.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_search.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_toc.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_toc.png
index 91184ea..d7d319a 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_toc.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_view_toc.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_window_external.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_window_external.png
index 0cc7ec9..ac7d662 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/help_window_external.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/help_window_external.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/newprj_wiz.gif b/eclipse/plugins/org.eclipse.platform.doc.user/images/newprj_wiz.gif
new file mode 100644
index 0000000..97d4cb0
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/images/newprj_wiz.gif differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/newprj_wiz.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/newprj_wiz.png
deleted file mode 100644
index bbee775..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/newprj_wiz.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/prb_quickfix.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/prb_quickfix.png
index d996b2a..4985031 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/prb_quickfix.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/prb_quickfix.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/prbfil.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/prbfil.png
index 3ef6312..1ec881c 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/prbfil.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/prbfil.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/prob.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/prob.png
index b50e4f1..aceb3e1 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/prob.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/prob.png differ
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_error_obj.gif b/eclipse/plugins/org.eclipse.platform.doc.user/images/quickfix_error_obj.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_error_obj.gif
copy to eclipse/plugins/org.eclipse.platform.doc.user/images/quickfix_error_obj.gif
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_warning_obj.gif b/eclipse/plugins/org.eclipse.platform.doc.user/images/quickfix_warning_obj.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_warning_obj.gif
copy to eclipse/plugins/org.eclipse.platform.doc.user/images/quickfix_warning_obj.gif
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/images/ref-texteditorpref.png b/eclipse/plugins/org.eclipse.platform.doc.user/images/ref-texteditorpref.png
index 9a9eb9b..80cd74c 100644
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/images/ref-texteditorpref.png and b/eclipse/plugins/org.eclipse.platform.doc.user/images/ref-texteditorpref.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/notices.html b/eclipse/plugins/org.eclipse.platform.doc.user/notices.html
index f2293eb..e0c52f9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/notices.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/notices.html
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <LINK REL="STYLESHEET" HREF="book.css" CHARSET="ISO-8859-1" TYPE="text/css">
@@ -13,7 +13,7 @@
 <h3>
 <a NAME="Notices"></a>Notices</h3>
 <p>
-The material in this guide is Copyright (c) Eclipse contributors 2000, 2010.
+The material in this guide is Copyright (c) Eclipse contributors 2000, 2011.
 </p>
 <p>
 <a href="about.html">Terms and conditions regarding the use of this guide.</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/plugin.xml b/eclipse/plugins/org.eclipse.platform.doc.user/plugin.xml
index bf4f851..0548992 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/plugin.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/plugin.xml
@@ -2,7 +2,7 @@
 <?eclipse version="3.0"?>
 
 <!-- ===================================================== -->
-<!-- Declare the documentation for the Platform User Guide  -->
+<!-- Declare the documentation for the Platform User Guide -->
 <!-- We will declare only one infoset (book)               -->
 <!-- ===================================================== -->
 
@@ -27,6 +27,8 @@
        <toc file="topics_Concepts.xml" />
        <toc file="topics_Tasks.xml" />
        <toc file="topics_Reference.xml" />
+       <toc file="topics_Tips.xml" />
+       <toc file="topics_WhatsNew.xml" />
    </extension>
 
 <!-- ============================================================================= -->
@@ -133,10 +135,5 @@
           point="org.eclipse.help.contentProducer">
        <binding producerId="org.eclipse.help.dynamic"/>
     </extension>
-    
-    <extension
-          point="org.eclipse.help.base.luceneSearchParticipants">
-       <binding participantId="org.eclipse.help.base.xhtml"/>
-    </extension>
 
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences.htm
index a525934..16498c6 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Help preferences</title>
 </head>
 <body>
@@ -16,7 +16,7 @@
 On the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.help.ui.browsersPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Help</strong></a>
 
 preferences page, you can indicate how to display help information.</P>
@@ -27,7 +27,8 @@ preferences page, you can indicate how to display help information.</P>
       <TH ROWSPAN="1" COLSPAN="1"> <P CLASS="Para"> Description</P></TH>
       <TH ROWSPAN="1" COLSPAN="1"> <P CLASS="Para"> Default</P></TH>
     </TR>
-    <TR> 
+  </THEAD>
+  <TR> 
       <TH align="left"> <span style="font-weight: 400">Open Help Search</span></TH>
       <TH align="left"> <span style="font-weight: 400">Configures whether Help/Search (and Help/Index if configured) opens the help view or help contents.</span></TH>
       <TH align="left"> <span style="font-weight: 400">In the dynamic help view</span></TH>
@@ -62,9 +63,6 @@ preferences page, you can indicate how to display help information.</P>
         help section of help view or in an infopop.</span></TH>
       <TH align="left"> <span style="font-weight: 400">in dialog tray</span></TH>
     </TR>
-  </THEAD>
-  <TBODY>
-  </TBODY>
 </TABLE>
 
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm
index 91446c3..51e7ef3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/help_preferences_content.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Help Content preferences</title>
 </head>
 <body>
@@ -17,7 +17,7 @@ Help topics from remote servers can be included seamlessly into the local help s
 Use the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.help.ui.contentPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Help > Content</strong></a>
 
 preference page to configure one or more remote servers from which to include content.
@@ -34,6 +34,7 @@ Button</P>
 Description</P>
 </TH>
 </TR>
+</THEAD>
 <TR>
 <TH align="left">
 <span style="font-weight: 400">Include local help only</span></TH>
@@ -85,9 +86,6 @@ host/port combination</span></TH>
 <span style="font-weight: 400">Allows a data source to be disabled so the help 
 system will not try to read topics from that source.</span></TH>
 </TR>
-</THEAD>
-<TBODY>
-</TBODY>
 </TABLE>
 
 
@@ -151,7 +149,7 @@ be selected and the correct port must be specified in the text field.</span>
 
 
 <P>
- <img border="0" src="../images/help_preference_infocenter.png" ></P>
+ <img border="0" src="../images/help_preference_infocenter.png" alt="Picture of the 'Add new information center' dialog" ></P>
 
 <p>
 <img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
@@ -170,4 +168,4 @@ be selected and the correct port must be specified in the text field.</span>
 </p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-10.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-10.htm
index 4d7bd37..db294be 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-10.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-10.htm
@@ -1,15 +1,15 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
    <title>General</title>
 <link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 </head>
 <body bgcolor="#FFFFFF">
 <h1 CLASS="Head">General</h1>
@@ -18,7 +18,7 @@
 environment.</div>
 
 
-<p CLASS="Para" Label="Type">Each Workbench window contains one or more
+<p>Each Workbench window contains one or more
 perspectives.  Perspectives contain views and editors and control
 what appears in certain menus and tool bars.  More than one Workbench
 window can exist on the desktop at any given time.</p>
@@ -26,7 +26,7 @@ window can exist on the desktop at any given time.</p>
 <p CLASS="Para">The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workbench)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General</strong></a>
 
 preference page. </p>
@@ -74,11 +74,6 @@ preference page. </p>
     <td>Double click</td>
   </tr>
 </table>
-<table width="75%" border="1">
-  <tr> 
-
-  </tr>
-</table>
 <p>Here is what the General preferences page looks like:</p> 
 <p><img src="../images/Image217_pref_wb.png" alt="Preference dialog" ></p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-11.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-11.htm
index 4b3909d..22e1095 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-11.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-11.htm
@@ -1,14 +1,14 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <title>Compare/Patch</title>
 <link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 </head>
 <body bgcolor="#FFFFFF">
 
@@ -18,19 +18,13 @@ Compare/Patch</h1>
 <p>The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.compare.internal.ComparePreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Compare/Patch</strong></a>
 
 page.</p>
 
 <h2>General options</h2>
 <table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
   <tbody>
     <tr> 
       <th width="25%"> <div class="Para">Option</div></th>
@@ -98,12 +92,6 @@ page.</p>
 </table>
 <h2>Text Compare options</h2>
 <table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
   <tbody>
     <tr> 
       <th width="25%"> <div class="Para">Option</div></th>
@@ -155,8 +143,11 @@ page.</p>
 	<tr> 
 		<td style="vertical-align: top; width: 25%;">Disable capping when comparing 
 		 large documents</td>
-		<td style="vertical-align: top;">The capping mechanism is used to speed up finding differences in large files. In that case, the result may be inaccurate and contain too many changes.
-		Turn this option on, if you prefer a precise result in favour of possibly longer calculation time.</td>
+		<td style="vertical-align: top;">The capping mechanism is used to speed up finding
+		differences in large files. In case where the capping happens the result can either 
+		be correct or it can display too many changes, but it never misses any change. Turn
+		this option on, if you prefer a precise result in favour of possibly longer
+		calculation time.</td>
 		<td style="vertical-align: top;">Off </td>
 	</tr>
 	<tr> 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-12.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-12.htm
index 3d47b1c..dd993cf 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-12.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-12.htm
@@ -1,11 +1,11 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Editors preference page</title>
 </head>
 <body bgcolor="#ffffff">
@@ -13,7 +13,7 @@
 <h1 class="Head">Editors preference page</h1>
 
 <p class="Para">You can change the following preferences on the
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"><strong>General > Editors</strong></a>
+<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"><strong>General > Editors</strong></a>
 preference page:
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-13.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-13.htm
index 61b50d3..c576dab 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-13.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-13.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>File Associations</title>
 
 </HEAD>
@@ -18,7 +18,7 @@ File Associations</H1>
 On the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileEditors)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Editors > File Associations</strong></a>
 
 preference page, you can add or remove file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14.htm
index 91babc5..57b4288 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Local History</title>
 
 </HEAD>
@@ -17,7 +17,7 @@ Local History</H1>
 <P CLASS="Intro"> The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileStates)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Workspace > Local History</strong></a>
 
 page.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14b.htm
index cd77944..7635d1c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-14b.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Linked Resources</title>
 
 </HEAD>
@@ -19,7 +19,7 @@ Linked Resources</H1>
 The 
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.LinkedResources)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Workspace > Linked Resources</strong></a>
 
 preference page is used when working with 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-15.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-15.htm
index 7efe4e2..9f9957c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-15.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-15.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Perspectives</title>
 
 </HEAD>
@@ -18,7 +18,7 @@ Perspectives</H1>
 On the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Perspectives</strong></a>
 
 preference page, you can manage the various perspectives defined in the Workbench.  </P>
@@ -152,7 +152,7 @@ Resource</P>
 <TR>
 <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left">
 <P CLASS="Para">
-Reset</P>
+Revert</P>
 </TD>
 <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left">
 <P CLASS="Para">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-16.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-16.htm
index a7742c0..47127ff 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-16.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-16.htm
@@ -1,11 +1,11 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation, Red Hat, and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation, Red Hat, and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Appearance preference page</title>
 </head>
 <body bgcolor="#ffffff">
@@ -13,7 +13,7 @@
 <h1 class="Head">Appearance preference page</h1>
 
 <p class="Para">You can change the following preferences on the
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Views)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"><strong>General > Appearance</strong></a> preferences page.
+<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Views)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"><strong>General > Appearance</strong></a> preferences page.
 </p>
 
 <table width="80%" border="1" cellspacing="0" cellpadding="5">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-17.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-17.htm
index 0df9f28..7349741 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-17.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-17.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Build Order</title>
 
 </HEAD>
@@ -26,7 +26,7 @@ of projects. </P>
 <P CLASS="Para">You can change this order on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.BuildOrder)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Workspace > Build Order</strong></a>
 
 preferences page. </P>
@@ -43,7 +43,7 @@ preferences page. </P>
       <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
           Use default builder order</P></TD>
       <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-          This<b></b> option allows the platform to computes the build ordering. 
+          This option allows the platform to computes the build ordering. 
           Turning off this option enables access to the projects list, the ordering 
           of which can be manipulated. </P></TD>
       <TD>On</TD>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19.htm
index 40b3980..8eabb62 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Team</title>
 
 </HEAD>
@@ -17,7 +17,7 @@ Team</H1>
 <P CLASS="Para"> The
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.TeamPreferences)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team</strong></a>
 
 preferences page contains options which 
@@ -101,7 +101,6 @@ preferences page contains options which
   </TBODY>
 </TABLE>
 <P>Here is what the Team preference page looks like:   </P>
-<P> </P>
 <img src="../images/Image_team_pref.png" alt="Team Preference Page" border="0">
 <p><img border="0" src="../images/ngrelr.png" alt="Related reference"
  > <br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-annotate.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-annotate.htm
index bc05950..284a382 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-annotate.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-annotate.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>CVS Annotate</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -15,7 +15,7 @@
 <P class="Para">The following preference can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.AnnotatePreferences)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team > CVS > Annotate</strong></a>
 
 preference page.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-commenttemplates.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-commenttemplates.htm
index fc36371..afe1fa0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-commenttemplates.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-commenttemplates.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>CVS Comment Templates</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -15,7 +15,7 @@
 <P class="Para">The
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.CommentTemplatesPreferences)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team > CVS > Comment Templates</strong></a>
 
 preference page allows you to create, edit and remove
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-console.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-console.htm
index 0fdd640..cae16b9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-console.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-console.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>CVS Console</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -15,7 +15,7 @@
 <P class="Para">The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.ConsolePreferences)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team > CVS > Console</strong></a>
 
 preference page.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-decorations.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-decorations.htm
index 3a7bc78..609d164 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-decorations.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-decorations.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>CVS Labels Decorations</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -15,7 +15,7 @@
 <P class="Para">The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.CVSDecoratorPreferences)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team > CVS > Label Decorations</strong></a>
 
 preference page.</P>
@@ -34,7 +34,7 @@ preference page.</P>
           to enable font and color decorations. The colors and fonts used for 
           outgoing changes, ignored resources, etc. can be configured on the 
           <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     	<b>General > Appearance > Colors and Fonts</b></a> preference page</li>
       </ul></TD>
   </TR>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-ext.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-ext.htm
index a084f6d..6d88f72 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-ext.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-ext.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>CVS Ext Connection Method</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -15,7 +15,7 @@
 <P class="Para">The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.ExtMethodPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team > CVS > Ext Connection Method</strong></a>
   
 preference page.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-sync.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-sync.htm
index b2b40e4..02644d4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-sync.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-sync.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en"><head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css"><link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"><title>CVS Synchronize/Compare</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>																						  
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>																						  
 </head>
 
 
@@ -14,7 +14,7 @@
 <p class="Para">The following preferences can be changed on the
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.ComparePreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > CVS > Synchronize/Compare</strong></a>
 
   preference page.</p>
@@ -27,14 +27,13 @@
     </tr>
   </thead>
   <tbody><tr> 
-    <td align="left" valign="top" width="21%">Consider file contents in comparisons</td>
-    <td align="left" valign="top" width="58%"> Use this option to compare contents 
-      for changed files found when comparing CVS resources. Usually, time stamps 
-      are used to compare CVS files, and this is by far the fastest method. However, 
-      in some cases a more accurate comparison can be achieved by comparing file 
-      content. Disabling this option will speed up comparisons but may result 
-      in compare entries whose contents are the same. This option only applies 
-      to comparisons and merges but not Workspace synchronizations.</td>
+    <td align="left" valign="top" width="21%">Consider file contents in remote comparisons</td>
+    <td align="left" valign="top" width="58%">For more precise comparison, 
+      the contents can be compared. If performance is an issue this can be disabled 
+      to use the much faster time stamp based comparison. This option only applies 
+      to comparisons of remote resources or when comparing a selected project or folder 
+      with a branch or version. For the later case the option is only respected 
+      when displaying model elements is disabled.</td>
     <td align="left" valign="top" width="21%">Enabled</td>
   </tr>
   <tr> 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-updatemerge.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-updatemerge.htm
index d034fed..6b305a2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-updatemerge.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-updatemerge.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>CVS Update/Merge</title>
 
 </HEAD>
@@ -16,7 +16,7 @@
 <P CLASS="Para"> The
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.UpdateMergePreferences)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team > CVS > Update/Merge</strong></a>
 
 preferences page contains options which 
@@ -64,7 +64,6 @@ preferences page contains options which
   </TBODY>
 </TABLE>
 <P>Here is what the CVS Update/Merge preference page looks like:   </P>
-<P> </P>
 <img src="../images/cvs-updatemerge.png" alt="Team Preference Page" border="0">
 <p><img border="0" src="../images/ngrelr.png" alt="Related reference"> <br>
 <a href="ref-33.htm">CVS Synchronize view</a> </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-watch-edit.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-watch-edit.htm
index f903be1..2239572 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-watch-edit.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs-watch-edit.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>CVS Watch/Edit</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -15,7 +15,7 @@
 <P class="Para">The following preferences can be changed on the
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.WatchEditPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > CVS > Watch/Edit</strong></a>
 
   preference page.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs.htm
index c755cf0..22cdd96 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-19cvs.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>CVS</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -16,7 +16,7 @@
   tab groups of the
   
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.CVSPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > CVS</strong></a>
   
   preferences page.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20-fileContent.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20-fileContent.htm
index fe2d628..767cc4f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20-fileContent.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20-fileContent.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Team File Content</title>
 
 </HEAD>
@@ -16,7 +16,7 @@
 <P CLASS="Intro"> On the
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.TextPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > File Content</strong></a>
 
   preference page, you can associate 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20.htm
index 9341744..41a7648 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Ignored Resources</title>
 
 </HEAD>
@@ -16,7 +16,7 @@
 <P CLASS="Intro"> On the
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.IgnorePreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > Ignored Resources</strong></a>
 
   preference 
@@ -38,7 +38,6 @@
   the list to temporarily disable it.</P>
 <P>Here is what the Ignored Resources preference page looks like:   
 </P>
-<P> </P>
 <img src="../images/Image_ignore_pref.png" alt="Ignored Resources Preference Page" border="0">
 <P CLASS="Para"> </P>
 <p><img border="0" src="../images/ngrelr.png" alt="Related reference"
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20team-models.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20team-models.htm
index 3ddadee..9041ffa 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20team-models.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-20team-models.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Team Models</title>
 
 </HEAD>
@@ -16,7 +16,7 @@
 <p>The
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.enabledModels)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Team > Models</strong></a>
 
 preference page allows you to select which model providers
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-21.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-21.htm
index fe30b36..1a82940 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-21.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-21.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Install/Update</title>
 
 </HEAD>
@@ -17,7 +17,7 @@ Install/Update</H1>
 <P CLASS="Intro"> The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.update.internal.ui.preferences.MainPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Install/Update</strong></a>
 
   page:</p> 
@@ -85,7 +85,7 @@ Install/Update</H1>
 
 
 <p>Here is what the Install/Update preference page looks like:   </p>
-<P> </P><img src="../images/Image_pref_inup.png" alt="Install/Update Preference Page" border="0">
+<img src="../images/Image_pref_inup.png" alt="Install/Update Preference Page" border="0">
 
 <p><img border="0" src="../images/ngrelt.png" alt="Related tasks" >
 <br><a HREF="../tasks/tasks-36.htm">Updating Eclipse with the update manager</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-22.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-22.htm
index 885814e..a051601 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-22.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-22.htm
@@ -1,83 +1,122 @@
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html lang="en"><head>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <title>
+      Annotations preference page
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    table.c2 {width: 100%;}
+    th.c1 {width: 25%;}
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h1 class="Head">
+      Annotations preference page
+    </h1>
+    <div class="Para">
+      <p>
+        The following preferences can be changed on the <a class="command-link"
+        href=
+        'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Annotations)")'>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Style-Type" content="text/css"><title>Annotations preference page</title>
-   
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"></head><body bgcolor="#ffffff">
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "command link" /> <strong>General > Editors > Text Editors >
+        Annotations</strong></a> preference page.
+      </p>
+    </div>
+    <table border="1" cellspacing="0" class="c2">
 
-<h1 class="Head">Annotations preference page</h1>
-<div class="Para">
-  <p>The following preferences can be changed on the
-  
-  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Annotations)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-  <strong>General > Editors > Text Editors > Annotations</strong></a>
-  
-  preference page.</p>
-</div>
+      <tbody>
+        <tr>
+          <th class="c1">
+            <div class="Para">
+              Option
+            </div>
+          </th>
+          <th>
+            <div class="Para">
 
-<table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
-  <tbody>
-    <tr> 
-      <th style="width: 25%;"> <div class="Para">Option</div></th>
-      <th> <div class="Para">Description</div></th>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> Show in Text as </td>
-      <td align="left" valign="top">This option controls whether the selected 
-        annotation type is shown in the text. The corresponding text will be underlined 
-        with squiggles or highlighted.<br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Show in Overview 
-          ruler      <br>
-        </div></td>
-      <td align="left" valign="top"> This option controls whether the overview 
-        ruler on the right side of the text editor is shown.</td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Show in Vertical ruler      
-          <br>
-        </div></td>
-      <td align="left" valign="top"> This option controls whether the selected 
-        annotation type is shown in the vertical ruler.</td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Color</div></td>
-      <td align="left" valign="top"> <div class="Para">This option controls the 
-          color for the selected annotation type.<br>
-        </div></td>
-    </tr>
-  </tbody>
-</table>
+              Description
+            </div>
+          </th>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+            Show in Text as
+          </td>
+          <td align="left" valign="top">
+            This option controls whether the selected annotation type is shown
+            in the text. The corresponding text will be underlined with
+            squiggles or highlighted.<br />
 
-<table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
-  <tbody>
-  
-  </tbody>
-</table>
-<p></p>
-<p>Here is what the Annotations preference page looks like: </p>
-<p><img src="../images/ref-annotationspref.png" alt="Image of the Annotations preference page"><br>
-</p>
-<p> <br>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+              Show in Overview ruler     <br />
+            </div>
+          </td>
 
-</p>
+          <td align="left" valign="top">
+            This option controls whether the overview ruler on the right side
+            of the text editor is shown.
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Show in Vertical ruler     <br />
+            </div>
 
+          </td>
+          <td align="left" valign="top">
+            This option controls whether the selected annotation type is shown
+            in the vertical ruler.
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+              Color
+            </div>
 
-</body></html>
\ No newline at end of file
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option controls the color for the selected annotation
+              type.<br />
+            </div>
+          </td>
+        </tr>
+      </tbody>
+
+    </table>
+    <p>
+      Here is what the Annotations preference page looks like:
+    </p>
+    <p>
+      <img src="../images/ref-annotationspref.png" alt=
+      "Image of the Annotations preference page" /><br />
+    </p>
+    <p>
+
+       <br />
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-23.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-23.htm
index debaddd..954681e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-23.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-23.htm
@@ -1,249 +1,399 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
-<HEAD>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Workbench window layout</title>
-
-</HEAD>
-<BODY BGCOLOR="#ffffff">
-<H1 CLASS="Head">
-Workbench window layout</H1>
-<P CLASS="Para">
-You can rearrange the layout of Workbench windows as follows:</P>
-<UL CLASS="UnorderedList">
-<LI CLASS="Item">
-Drag views to different positions within the Workbench window.</LI>
-<LI CLASS="Item">
-Drag views to the shortcut bar to create a fast view.</LI>
-<LI CLASS="Item">
-Drag editors such that they are simultaneously visible beside, above, or below
-another editor.</LI>
-<LI CLASS="Item">
-Resize views and editors by dragging the sashes which separate them.</LI>
-</UL>
-<DIV CLASS="Topic">
-<h2>
-Drop cursors</h2>
-<P CLASS="Para">
-<i>Drop cursors</i> indicate where a view will dock when you release your mouse
-button. This indication is relative to the view or editor area underneath the cursor. </P>
-<TABLE BORDER="1" width="669" cellspacing="0">
-<CAPTION>
-Drop Cursors</CAPTION>
-<THEAD>
-<TR>
-<TH ROWSPAN="1" COLSPAN="1" width="54">
-<P CLASS="Para">
-Cursor</P>
-</TH>
-<TH ROWSPAN="1" COLSPAN="1" width="113">
-<P CLASS="Para">
-Name</P>
-</TH>
-<TH ROWSPAN="1" COLSPAN="1" width="480">
-<P CLASS="Para">
-Description</P>
-</TH>
-</TR>
-</THEAD>
-<TBODY>
-<TR>
-<TD ROWSPAN="1" COLSPAN="1" width="54">
-<P CLASS="Para"> 
-</P>
-<img src="../images/ref-1.png"  align="BASELINE" alt="Up arrow">
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="113">
-<P CLASS="Para">
-Dock above</P>
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="480">
-<P CLASS="Para">
-The view will appear above the view underneath the cursor.</P>
-</TD>
-</TR>
-<TR>
-<TD ROWSPAN="1" COLSPAN="1" width="54">
-<P CLASS="Para"> 
-</P>
-<img src="../images/ref-2.png"  align="BASELINE" alt="Down arrow">
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="113">
-<P CLASS="Para">
-Dock below</P>
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="480">
-<P CLASS="Para">
-The view will appear below the view underneath the cursor.</P>
-</TD>
-</TR>
-<TR>
-<TD ROWSPAN="1" COLSPAN="1" width="54">
-<P CLASS="Para"> 
-</P>
-<img src="../images/ref-3.png"  align="BASELINE" alt="Right arrow">
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="113">
-<P CLASS="Para">
-Dock to the right</P>
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="480">
-<P CLASS="Para">
-The view will appear to the right of the view underneath the cursor.</P>
-</TD>
-</TR>
-<TR>
-<TD ROWSPAN="1" COLSPAN="1" width="54">
-<P CLASS="Para"> 
-</P>
-<img src="../images/ref-4.png"  align="BASELINE" alt="Left arrow">
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="113">
-<P CLASS="Para">
-Dock to the left</P>
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="480">
-<P CLASS="Para">
-The view will appear to the left of the view underneath the cursor. </P>
-</TD>
-</TR>
-<TR>
-<TD ROWSPAN="1" COLSPAN="1" width="54">
-<P CLASS="Para"> 
-</P>
-<img src="../images/ref-5.png"  align="BASELINE" alt="Stack">
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="113">
-<P CLASS="Para">
-Stack</P>
-</TD>
-<TD ROWSPAN="1" COLSPAN="1" width="480">
-<P CLASS="Para">
-The view will appear as a tab in the same pane as the view underneath the cursor. </P>
-</TD>
-</TR>
-</TBODY>
-</TABLE>
-</DIV>
-<DIV CLASS="Topic">
-<DIV CLASS="Subtopic">
-<H2>
-Fast views</H2>
-<P CLASS="Para">
-From a view's title bar context menu, you can select Fast View to minimize the view
-as a  button on the shortcut bar.</P>
-<P CLASS="Para">
-If a view is minimized in this way, you can click its
-button on the shortcut bar to bring it up in a fast view. To revert the fast
-view back to a docked view again, select the <i>Fast View</i> button on its title
-bar.</P>
-See <A HREF="ref-3.htm" CLASS="XRef">Perspective Bar</A></DIV>
-<DIV CLASS="Subtopic">
-<H2 CLASS="Head">
-Double-Click</H2>
-    <P CLASS="Para"> Double-clicking a view or editor's title bar maximizes the 
-      part in the Workbench window.</P>
-  </DIV>
-  <DIV CLASS="Subtopic">
-<H2 CLASS="Head"> Title bar context menu and fast view toolbars</H2>
-    <P CLASS="Para"> From the context menu of a view or editor's title bar, you 
-      can select how you want the view to appear within the Workbench window.</P>
-    <TABLE BORDER="1" cellspacing="0">
-      <CAPTION>
-      View and editor title bar context menu options 
-      </CAPTION>
-      <THEAD>
-        <TR> 
-          <TH ROWSPAN="1" COLSPAN="1"> <P CLASS="Para"> <A NAME="pgfId-1096571">O</A>ption</P></TH>
-          <TH ROWSPAN="1" COLSPAN="1"> <P CLASS="Para"> Description</P></TH>
-        </TR>
-      </THEAD>
-      <TBODY>
-        <TR> 
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Restore</P></TD>
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Restores the view to its originating (non-maximized/non-minimized) 
-              size and position within the Workbench.</P></TD>
-        </TR>
-        <TR> 
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Fast View<BR>
-              (views only)</P></TD>
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Minimizes the view and places a button for it in the shortcut bar.</p>
-            <P CLASS="Para"> This option, when used in a fast view, will restore 
-              the view to its originating (docked) position in the Workbench.</P>
-            <P CLASS="Para">See  <A HREF="ref-3.htm" CLASS="XRef">Perspective Bar</A> </p>
-          </TD>
-        </TR>
-        <TR> 
-          <TD COLSPAN="1" valign="top" align="left">Restore</TD>
-          <TD COLSPAN="1" valign="top" align="left">Restores the view or editor 
-            to its originating (non-maximized/non-minimized) size and position 
-            within the Workbench.</TD>
-        </TR>
-        <TR> 
-          <TD COLSPAN="1" valign="top" align="left">Move</TD>
-          <TD COLSPAN="1" valign="top" align="left">Move the part or part group.</TD>
-        </TR>
-        <TR> 
-          <TD COLSPAN="1" valign="top" align="left">Size</TD>
-          <TD COLSPAN="1" valign="top" align="left">Change the size of the part 
-            in the direction specified.</TD>
-        </TR>
-        <TR> 
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Maximize</P></TD>
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Maximizes the part in the Workbench window.</P></TD>
-        </TR>
-        <TR> 
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Minimize</P></TD>
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Minimizes the part in the Workbench window.</P></TD>
-        </TR>
-        <TR> 
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Close</P></TD>
-          <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> 
-              Closes the part.  </P></TD>
-        </TR>
-        <TR> 
-          <TD COLSPAN="1" valign="top" align="left"><p>Close Others</p>
-            <p>(editors only)</p></TD>
-          <TD COLSPAN="1" valign="top" align="left">Closes all editors except 
-            the current editor.</TD>
-        </TR>
-        <TR> 
-          <TD COLSPAN="1" valign="top" align="left"><p>Close All </p>
-            <p>(editors only)</p></TD>
-          <TD COLSPAN="1" valign="top" align="left">Closes all editors.</TD>
-        </TR>
-      </TBODY>
-    </TABLE>
-</DIV>
-</DIV>
-<P>Here is what a view's context menu looks like:
-</P>
-
-
-<P><img src="../images/Image229_view_popup.png" alt="View's context menu" border="1" >
-</P>
-<P>Here is what an editor's context menu looks like:
-</P>
-
-
-<P><img src="../images/Image229_editor_popup.png" alt="Editor's context menu" border="1" >
-</P>
-
-
-
-</BODY>
-</HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Workbench window layout
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1 class="Head">
+      Workbench window layout
+    </h1>
+    <p class="Para">
+      You can rearrange the layout of Workbench windows as follows:
+    </p>
+    <ul class="UnorderedList">
+      <li class="Item">Drag views to different positions within the Workbench
+      window.
+      </li>
+
+      <li class="Item">Drag views to the shortcut bar to create a fast view.
+      </li>
+      <li class="Item">Drag editors such that they are simultaneously visible
+      beside, above, or below another editor.
+      </li>
+      <li class="Item">Resize views and editors by dragging the sashes which
+      separate them.
+      </li>
+    </ul>
+    <div class="Topic">
+      <h2>
+        Drop cursors
+      </h2>
+
+      <p class="Para">
+        <i>Drop cursors</i> indicate where a view will dock when you release
+        your mouse button. This indication is relative to the view or editor
+        area underneath the cursor.
+      </p>
+      <table border="1" width="669" cellspacing="0">
+        <caption>
+          Drop Cursors
+        </caption>
+        <thead>
+          <tr>
+
+            <th rowspan="1" colspan="1" width="54">
+              <p class="Para">
+                Cursor
+              </p>
+            </th>
+            <th rowspan="1" colspan="1" width="113">
+              <p class="Para">
+                Name
+              </p>
+            </th>
+
+            <th rowspan="1" colspan="1" width="480">
+              <p class="Para">
+                Description
+              </p>
+            </th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+
+            <td rowspan="1" colspan="1" width="54">
+              <p class="Para">
+                 
+              </p><img src="../images/ref-1.png" align="top" alt=
+              "Up arrow" />
+            </td>
+            <td rowspan="1" colspan="1" width="113">
+              <p class="Para">
+                Dock above
+              </p>
+
+            </td>
+            <td rowspan="1" colspan="1" width="480">
+              <p class="Para">
+                The view will appear above the view underneath the cursor.
+              </p>
+            </td>
+          </tr>
+          <tr>
+            <td rowspan="1" colspan="1" width="54">
+
+              <p class="Para">
+                 
+              </p><img src="../images/ref-2.png" align="top" alt=
+              "Down arrow" />
+            </td>
+            <td rowspan="1" colspan="1" width="113">
+              <p class="Para">
+                Dock below
+              </p>
+            </td>
+
+            <td rowspan="1" colspan="1" width="480">
+              <p class="Para">
+                The view will appear below the view underneath the cursor.
+              </p>
+            </td>
+          </tr>
+          <tr>
+            <td rowspan="1" colspan="1" width="54">
+              <p class="Para">
+
+                 
+              </p><img src="../images/ref-3.png" align="top" alt=
+              "Right arrow" />
+            </td>
+            <td rowspan="1" colspan="1" width="113">
+              <p class="Para">
+                Dock to the right
+              </p>
+            </td>
+            <td rowspan="1" colspan="1" width="480">
+
+              <p class="Para">
+                The view will appear to the right of the view underneath the
+                cursor.
+              </p>
+            </td>
+          </tr>
+          <tr>
+            <td rowspan="1" colspan="1" width="54">
+              <p class="Para">
+                 
+
+              </p><img src="../images/ref-4.png" align="top" alt=
+              "Left arrow" />
+            </td>
+            <td rowspan="1" colspan="1" width="113">
+              <p class="Para">
+                Dock to the left
+              </p>
+            </td>
+            <td rowspan="1" colspan="1" width="480">
+              <p class="Para">
+
+                The view will appear to the left of the view underneath the
+                cursor.
+              </p>
+            </td>
+          </tr>
+          <tr>
+            <td rowspan="1" colspan="1" width="54">
+              <p class="Para">
+                 
+              </p><img src="../images/ref-5.png" align="top" alt=
+              "Stack" />
+
+            </td>
+            <td rowspan="1" colspan="1" width="113">
+              <p class="Para">
+                Stack
+              </p>
+            </td>
+            <td rowspan="1" colspan="1" width="480">
+              <p class="Para">
+                The view will appear as a tab in the same pane as the view
+                underneath the cursor.
+              </p>
+
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="Topic">
+      <div class="Subtopic">
+        <h2>
+          Fast views
+        </h2>
+
+        <p class="Para">
+          From a view's title bar context menu, you can select Fast View to
+          minimize the view as a  button on the shortcut bar.
+        </p>
+        <p class="Para">
+          If a view is minimized in this way, you can click its button on the
+          shortcut bar to bring it up in a fast view. To revert the fast view
+          back to a docked view again, select the <i>Fast View</i> button on
+          its title bar.
+        </p>See <a href="ref-3.htm" class="XRef">Perspective Bar</a>
+
+      </div>
+      <div class="Subtopic">
+        <h2 class="Head">
+          Double-Click
+        </h2>
+        <p class="Para">
+          Double-clicking a view or editor's title bar maximizes the part in
+          the Workbench window.
+        </p>
+      </div>
+      <div class="Subtopic">
+
+        <h2 class="Head">
+          Title bar context menu and fast view toolbars
+        </h2>
+        <p class="Para">
+          From the context menu of a view or editor's title bar, you can select
+          how you want the view to appear within the Workbench window.
+        </p>
+        <table border="1" cellspacing="0">
+          <caption>
+            View and editor title bar context menu options
+          </caption>
+
+          <thead>
+            <tr>
+              <th rowspan="1" colspan="1">
+                <p class="Para">
+                  <a name="pgfId-1096571" id="pgfId-1096571">O</a>ption
+                </p>
+              </th>
+              <th rowspan="1" colspan="1">
+                <p class="Para">
+
+                  Description
+                </p>
+              </th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr>
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+
+                  Restore
+                </p>
+              </td>
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Restores the view to its originating
+                  (non-maximized/non-minimized) size and position within the
+                  Workbench.
+                </p>
+              </td>
+            </tr>
+            <tr>
+
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Fast View<br />
+                  (views only)
+                </p>
+              </td>
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Minimizes the view and places a button for it in the shortcut
+                  bar.
+                </p>
+
+                <p class="Para">
+                  This option, when used in a fast view, will restore the view
+                  to its originating (docked) position in the Workbench.
+                </p>
+                <p class="Para">
+                  See <a href="ref-3.htm" class="XRef">Perspective Bar</a>
+                </p>
+              </td>
+            </tr>
+
+            <tr>
+              <td colspan="1" valign="top" align="left">
+                Restore
+              </td>
+              <td colspan="1" valign="top" align="left">
+                Restores the view or editor to its originating
+                (non-maximized/non-minimized) size and position within the
+                Workbench.
+              </td>
+            </tr>
+            <tr>
+              <td colspan="1" valign="top" align="left">
+
+                Move
+              </td>
+              <td colspan="1" valign="top" align="left">
+                Move the part or part group.
+              </td>
+            </tr>
+            <tr>
+              <td colspan="1" valign="top" align="left">
+                Size
+              </td>
+
+              <td colspan="1" valign="top" align="left">
+                Change the size of the part in the direction specified.
+              </td>
+            </tr>
+            <tr>
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Maximize
+                </p>
+              </td>
+
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Maximizes the part in the Workbench window.
+                </p>
+              </td>
+            </tr>
+            <tr>
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+
+                  Minimize
+                </p>
+              </td>
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Minimizes the part in the Workbench window.
+                </p>
+              </td>
+            </tr>
+            <tr>
+
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Close
+                </p>
+              </td>
+              <td rowspan="1" colspan="1" valign="top" align="left">
+                <p class="Para">
+                  Closes the part.  
+                </p>
+
+              </td>
+            </tr>
+            <tr>
+              <td colspan="1" valign="top" align="left">
+                <p>
+                  Close Others
+                </p>
+                <p>
+                  (editors only)
+                </p>
+
+              </td>
+              <td colspan="1" valign="top" align="left">
+                Closes all editors except the current editor.
+              </td>
+            </tr>
+            <tr>
+              <td colspan="1" valign="top" align="left">
+                <p>
+                  Close All
+                </p>
+
+                <p>
+                  (editors only)
+                </p>
+              </td>
+              <td colspan="1" valign="top" align="left">
+                Closes all editors.
+              </td>
+            </tr>
+          </tbody>
+        </table>
+
+      </div>
+    </div>
+    <p>
+      Here is what a view's context menu looks like:
+    </p>
+    <p>
+      <img src="../images/Image229_view_popup.png" alt="View's context menu"
+      border="1" />
+    </p>
+    <p>
+
+      Here is what an editor's context menu looks like:
+    </p>
+    <p>
+      <img src="../images/Image229_editor_popup.png" alt=
+      "Editor's context menu" border="1" />
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-24.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-24.htm
index 01d6513..282c38b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-24.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-24.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Editor area</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -67,7 +67,7 @@ file in an SGML editor, then save the file. The edited SGML file is still repres
 though you did not edit the file in the Workbench. If you associate a file type with an external editor in 
 the Workbench
 (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileEditors)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Editors > File Associations</b></a>
 preference page), then the Workbench
 will launch this external editor.</LI>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-25.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-25.htm
index 16e2b41..db6523c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-25.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-25.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
              
   <meta http-equiv="Content-Type"
@@ -59,12 +59,12 @@ Workspace synchronization.</p>
 <p>The toolbar of the Compare editor includes the following buttons:</p>
            
 <dl>
-  <dt>Switch Compare Viewer <img src="../images/view_menu.png"></dt>
+  <dt>Switch Compare Viewer <img src="../images/view_menu.png" alt="Image of the 'Switch Compare Viewer' button"></dt>
   <dd>Basing on the content type the system determines which compare viewer 
   should be used during a comparison. The button opens a drop down menu which allows to choose between other 
   viewers registered for the same content type. If there is no alternative 
   content viewer available the button is hidden.</dd>
-  <dt>Control Visibility of Ancestor Pane <img src="../images/ancestorpane_co.gif"></dt>
+  <dt>Control Visibility of Ancestor Pane <img src="../images/ancestorpane_co.gif" alt="Image of the 'Control Visibility of Ancestor Pane' button"></dt>
   <dd>There are two conditions under which a three way compare will occur, 
 		both when using the Team version management support: when comparing 
 		a file that is in conflict, and when comparing a file being merged 
@@ -72,29 +72,29 @@ Workspace synchronization.</p>
  		ancestor in the repository to compare the conflict or merge against. 
  		This button determines the visibility of the third editor. By default, 
  		the ancestor pane is not visible.</dd>
-  <dt>Perform Three way/Two way Compare <img src="../images/twowaycompare_co.gif"></dt>
+  <dt>Perform Three way/Two way Compare <img src="../images/twowaycompare_co.gif" alt="Image of the 'Perform Three way/Two way Compare' button"></dt>
   <dd>The compare editor can be toggled between performing a three way compare 
 		or a two way compare which ignores the common ancestor.</dd>
-  <dt>Copy All from Left to Right <img src="../images/copy_r_co.gif"></dt>
+  <dt>Copy All from Left to Right <img src="../images/copy_r_co.gif" alt="Image of the 'Copy All from Left to Right' button"></dt>
   <dd>Copies the entire contents of the file in the left pane into the file 
           in the right pane, making the contents of the two files identical.</dd>
-  <dt>Copy All Non-Conflicting Changes from Right to Left <img src="../images/copy_l_co.gif"></dt>
+  <dt>Copy All Non-Conflicting Changes from Right to Left <img src="../images/copy_l_co.gif" alt="Image of the 'Copy All Non-Conflicting Changes from Right to Left' button"></dt>
   <dd>Copies all the non-conflicting changes from the right pane into the left
   pane. Conflicting changes must be copied individually.</dd>
-  <dt>Copy Current Change from Left to Right <img src="../images/copycont_r_co.gif"></dt>
+  <dt>Copy Current Change from Left to Right <img src="../images/copycont_r_co.gif" alt="Image of the 'Copy Current Change from Left to Right' button"></dt>
   <dd>Merges changes in two files by copying the highlighted change in the 
 		left pane into the highlighted fragment on the right. This 
  		will overwrite the highlighted fragment in the right pane.</dd>
-  <dt>Copy Current Change from Right to Left <img src="../images/copycont_l_co.gif"></dt>
+  <dt>Copy Current Change from Right to Left <img src="../images/copycont_l_co.gif" alt="Image of the 'Copy Current Change from Right to Left' button"></dt>
   <dd>Does the opposite of the one just described.</dd>
-  <dt>Select Next Difference <img src="../images/next_diff_nav.gif"></dt>
+  <dt>Select Next Difference <img src="../images/next_diff_nav.gif" alt="Image of the 'Select Next Difference' button"></dt>
   <dd>Highlights the next difference that is found between the compared resources.</dd>
-  <dt>Select Previous Difference <img src="../images/prev_diff_nav.gif"></dt>
+  <dt>Select Previous Difference <img src="../images/prev_diff_nav.gif" alt="Image of the 'Select Previous Difference' button"></dt>
   <dd>Highlights the previous difference that is found between the compared 
           resources.</dd>
-  <dt>Select Next Change <img src="../images/next_change_nav.gif"></dt>
+  <dt>Select Next Change <img src="../images/next_change_nav.gif" alt="Image of the 'Select Next Change' button"></dt>
   <dd>Highlights the next change that is found between the compared resources.</dd>
-  <dt>Select Previous Change <img src="../images/prev_change_nav.gif"></dt>
+  <dt>Select Previous Change <img src="../images/prev_change_nav.gif" alt="Image of the 'Select Previous Change' button"></dt>
   <dd>Highlights the previous change that is found between the compared resources.</dd>
 </dl>
            
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-27.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-27.htm
index d4687bb..f172b91 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-27.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-27.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Project Explorer view</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -24,7 +24,7 @@ Here is what the Project Explorer view looks like:</P>
 <p CLASS="Head">
 To add the Project Explorer view to the current perspective, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.ResourceNavigator)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Project Explorer</b></a>.
 </p>
 <P CLASS="Para"> 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-28.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-28.htm
index 63a073d..182b021 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-28.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-28.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Bookmarks view</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -17,11 +17,11 @@ Bookmarks view</H1>
 <P CLASS="Para">
 The Bookmarks view displays user defined bookmarks.</P>
 <P CLASS="Para">
-<img align="texttop" border="0" src="../images/Image244_bmark_view.png" alt="Bookmarks view" ></P>
+<img align="top" border="0" src="../images/Image244_bmark_view.png" alt="Bookmarks view" ></P>
 <p CLASS="Head">
 To add the Bookmarks view to the current perspective, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.BookmarkView)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Bookmarks</b></a>.
 </p>
 <DIV CLASS="Subtopic">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-29.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-29.htm
index c01c14a..24cd1dd 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-29.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-29.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Properties view</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -29,7 +29,7 @@ Properties from the pop-up menu.
 <p CLASS="Head">
 To add the Properties view to the current perspective, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.PropertySheet)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Properties</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3.htm
index e906877..feb5dc8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Perspective bar</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -39,7 +39,7 @@ shown on the shortcut bar.</P>
     to your workspace, click <strong>Open Perspective</strong> <img src="../images/open_persp.png" alt="Open Perspective Icon" border="0" >, 
     select <strong>Other</strong> and choose from the following
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     available perspectives</a>:</p>
 </DIV>
 <ul>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-30.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-30.htm
index 3b8ed0a..761199d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-30.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-30.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Outline view</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <body>
@@ -27,7 +27,7 @@ The contents of the toolbar are also editor-specific.
 <p CLASS="Head">
 To add the Outline view to the current perspective, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.ContentOutline)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Outline</b></a>.
 </p>
 </body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31.htm
index 64c5ce6..2d37185 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Tasks view (reference)</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@ Tasks view</H1>
 By default, the Tasks view is included in the Resources perspective. To add it
 to the current perspective, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.TaskList)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Tasks</b></a>.
 </p>
 <p CLASS="Head">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31a.htm
index 56748ae..7f7fab8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-31a.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Problems view (reference)</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@
 <p CLASS="Head"> By default, the Problems view is included in the Resources perspective. 
   To add it to the current perspective, click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.ProblemView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Show View > Other... > General > Problems</b></a>.
 </p>
 <p CLASS="Head"> The following icons are used by the Problems view:</p>
@@ -33,17 +33,27 @@
   <tr>
     <td valign="top" align="center"><img src="../images/ref-20.png" alt=" Information icon" border="0" ></td>
     <td valign="top" align="left">
-      Information     </td>
+      Information </td>
   </tr>
   <tr>
     <td valign="top" align="center"><img src="../images/ref-22.png" alt="Warning icon" border="0"></td>
     <td valign="top" align="left">
-      Warning    </td>
+      Warning</td>
+  </tr>
+  <tr>
+    <td valign="top" align="center"><img src="../images/quickfix_warning_obj.gif" alt="Warning with quick fix icon" border="0"></td>
+    <td valign="top" align="left">
+      Warning with quick fix</td>
   </tr>
   <tr>
     <td valign="top" align="center"><img src="../images/ref-24.png" alt="Error icon" border="0"></td>
     <td valign="top" align="left">
-      Error    </td>
+      Error</td>
+  </tr>
+  <tr>
+    <td valign="top" align="center"><img src="../images/quickfix_error_obj.gif" alt="Error with quick fix icon" border="0"></td>
+    <td valign="top" align="left">
+      Error with quick fix</td>
   </tr>
   <tr> 
     <td valign="top" align="center"><img src="../images/delete_edit.png" alt="Delete" border="0"></td>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-32a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-32a.htm
index 7e876ef..3aa5868 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-32a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-32a.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
      
   <meta http-equiv="Content-Type"
@@ -60,6 +60,11 @@ For remote revisions:
 </div>
    
 <div class="Topic">    
+<h3>Branches</h3>   
+<p class="Para">This column displays the list of branches on which the revision is available. <i>(Remote revisions only)</i></p>
+</div>
+
+<div class="Topic">    
 <h3>Tags</h3>   
 <p class="Para">The tags that are associated with the revision. Selecting 
 a      revision line will list the tags in the lower left pane of the view. <i>(Remote revisions only)</i></p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-33.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-33.htm
index 2fe25f4..401f73b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-33.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-33.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-  <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+  <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <meta http-equiv="Content-Style-Type" content="text/css">
   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -274,6 +274,9 @@ the default Workbench editor for the file type.</p>
 <h3>Open With</h3>
 <p>This command allows you to open the local resource for the selected 
   change in the a Workbench editor.</p>
+  
+<h3>Show In</h3>
+<p>This sub-menu is used to show the currently selected resource in another view.</p>
 
 <h3>Open in Compare Editor</h3>
 <p>This command open the selected change in a Compare editor which allows 
@@ -289,15 +292,15 @@ you to inspect the changes within the file.</p>
   so that the file is no longer an outgoing change. This is useful in situations 
   where build tools regenerate files whose contents have not changed.</p>
 
-<h3>Remove From View</h3>
+<h3>Expand All</h3>
+<p >This command expands all of the selected resource's children.</p>
+
+<h3>Remove from View</h3>
 <p>This command removes the selected resources from the view. The
 resources will only reappear if the state of the removed resources changes or the 
 Workbench is restarted or the <strong> Restore Removed Items </strong> action is
 invoked from the Drop Down menu.</p>
 
-<h3>Expand All</h3>
-<p >This command expands all of the selected resource's children.</p>
-
 <h3>Update</h3>
 <p>This command updates the selected resources. Conflicts can be 
   included in an update but only auto-mergeable conflicts will be updated. Non-mergeable 
@@ -333,13 +336,27 @@ the branch back to the source branch.</p>
 <p>Depending on your Annotation preferences, this command will either bring up turn on the Quick Diff annotate
 or open the Annotate view for the selected resource.</p>
 
-<h3>Show in History</h3>
-<p>This command will show the history for the selected resource..</p>
-
 <h3>Change ASCII/Binary Property...</h3>
 <p>This command will open a dialog containing all of the selected resources. You can then
 alter the ASCII/Binary property for each resource.</p>
 
+<h3>Reassign Changes To</h3>
+<p>This command will move changes to the change set selected from the sub-menu.</p>
+
+<h3>Edit Change Set...</h3>
+<p>This command will open a dialog that allows to create or edit the name and comment
+for the selected change set.</p>
+
+<h3>Make Changes Unassigned</h3>
+<p>This command removes changes from the selected change set. If all changes are removed
+the change set is deleted.</p>
+
+<h3>Mark Change Set as Default</h3>
+<p>This command will mark/unmark the selected change set as default.</p>
+
+<h3>Don't Use Default Change Set</h3>
+<p>This command will remove the default flag from the change set currently marked as default.</p>
+
 <p><img border="0" src="../images/ngrelc.png" alt="Related concepts">
  <br>
     <a href="../concepts/concepts-26.htm">Team programming with CVS</a><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-35.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-35.htm
index d91d2cc..c9a8d43 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-35.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-35.htm
@@ -1,95 +1,184 @@
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html lang="en"><head>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Style-Type" content="text/css"><title>Quick Diff Preference Page</title>
-   
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"></head><body bgcolor="#ffffff">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-
-<h1 class="Head">Quick Diff Preference Page</h1>
-<div class="Para"></div>
-
-<div class="Para">
-  <p>The following preferences can be changed on the
-  
-  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.QuickDiff)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-  <strong>General > Editors > Text Editors > Quick Diff</strong></a>
-  
-  preference page.</p>
-</div>
-<table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
-  <tbody>
-    <tr> 
-      <th width="25%"> <div class="Para">Option</div></th>
-      <th> <div class="Para">Description</div></th>
-      <th> <div class="Para">Default</div></th>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Enable quick 
-          diff<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option will enable 
-          or disable the quick diff option.</div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top; width: 25%;">Show differences in overview 
-        ruler<br> </td>
-      <td style="vertical-align: top;">
-        This option will show differences in the overview ruler.</td>
-      <td style="vertical-align: top;">Off<br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Colors - Changes<br>
-        </div></td>
-      <td align="left" valign="top">This option controls the color of changes. 
-      </td>
-      <td align="left" valign="top"> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Colors - Additions<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option controls the 
-          color of additions. <br>
-        </div></td>
-      <td align="left" valign="top"> <br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Colors - Deletions<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option controls the 
-          color of deletions. <br></div></td>
-      <td align="left" valign="top"> <br></td>
-    </tr>
-     <tr> 
-      <td style="vertical-align: top; width: 25%;">Use this reference source<br> </td>
-      <td style="vertical-align: top;">
-        This option sets which reference to use as the base for generating quick diff comparisons. Options are: 
-      <ul>
-        <li><STRONG>Version on Disk: </STRONG>Current file is compared against the last saved version on disk.</li>
-        <li><strong>Latest CVS Revision: </strong>Current file is compared against the latest CVS revision for the file.</li>
-      </ul></td>
-      <td style="vertical-align: top;">Version on Disk<br> </td>
-    </tr>
-  </tbody>
-</table>
-
-<p></p>
-<p>Here is what the Quick Diff preference page looks like: </p>
-<p><img src="../images/ref-quickdiffpref.png" alt="Image of the Quick Diff preference page"><br>
-</p>
-<p> <br>
-
-</p>
-
-
-</body></html>
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <title>
+      Quick Diff Preference Page
+    </title>
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    table.c3 {width: 100%;}
+    td.c2 {vertical-align: top;}
+    td.c1 {vertical-align: top; width: 25%;}
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <h1 class="Head">
+      Quick Diff Preference Page
+    </h1>
+    <div class="Para"></div>
+    <div class="Para">
+      <p>
+
+        The following preferences can be changed on the <a class="command-link"
+        href=
+        'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.QuickDiff)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "command link" /> <strong>General > Editors > Text Editors >
+        Quick Diff</strong></a> preference page.
+      </p>
+    </div>
+
+    <table border="1" cellspacing="0" class="c3">
+      <tbody>
+        <tr>
+          <th width="25%">
+            <div class="Para">
+              Option
+            </div>
+          </th>
+          <th>
+
+            <div class="Para">
+              Description
+            </div>
+          </th>
+          <th>
+            <div class="Para">
+              Default
+            </div>
+          </th>
+        </tr>
+
+        <tr>
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+              Enable quick diff<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+
+              This option will enable or disable the quick diff option.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              On
+            </div>
+          </td>
+        </tr>
+        <tr>
+
+          <td class="c1">
+            Show differences in overview ruler<br />
+          </td>
+          <td class="c2">
+            This option will show differences in the overview ruler.
+          </td>
+          <td class="c2">
+            Off<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+              Colors - Changes<br />
+            </div>
+          </td>
+
+          <td align="left" valign="top">
+            This option controls the color of changes.
+          </td>
+          <td align="left" valign="top">
+             
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+
+            <div class="Para">
+              Colors - Additions<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option controls the color of additions.<br />
+            </div>
+
+          </td>
+          <td align="left" valign="top">
+            <br />
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+              Colors - Deletions<br />
+
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option controls the color of deletions.<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+
+            <br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c1">
+            Use this reference source<br />
+          </td>
+          <td class="c2">
+
+            This option sets which reference to use as the base for generating
+            quick diff comparisons. Options are:
+            <ul>
+              <li>
+                <strong>Version on Disk:</strong> Current file is compared
+                against the last saved version on disk.
+              </li>
+              <li>
+                <strong>Latest CVS Revision:</strong> Current file is compared
+                against the latest CVS revision for the file.
+              </li>
+
+            </ul>
+          </td>
+          <td class="c2">
+            Version on Disk<br />
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <p>
+      Here is what the Quick Diff preference page looks like:
+    </p>
+    <p>
+      <img src="../images/ref-quickdiffpref.png" alt=
+      "Image of the Quick Diff preference page" /><br />
+    </p>
+    <p>
+       <br />
+    </p>
+
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-36.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-36.htm
index 6ef96c5..e7e6020 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-36.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-36.htm
@@ -1,143 +1,339 @@
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html lang="en"><head>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Style-Type" content="text/css"><title>Spelling preference page</title>
-   
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"></head><body bgcolor="#ffffff">
-<h1 class="Head">Spelling Preference Page</h1>
-<div class="Para">
-  <p>The following preferences can be changed on the
-  
-  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Spelling)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-  <strong>General > Editors > Text Editors > Spelling</strong></a>
-  
-  preference page.</p>
-</div>
-<table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
-  <tbody>
-    <tr> 
-      <th width="25%"> <div class="Para">Option</div></th>
-      <th> <div class="Para">Description</div></th>
-      <th> <div class="Para">Default</div></th>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Enable spell 
-          checking<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option enables spell 
-          checking. </div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top; width: 25%;">Ignore words with digits <br> 
-      </td>
-      <td style="vertical-align: top;">This option ignores words with digits when 
-        performing spell checking.<br> </td>
-      <td style="vertical-align: top;">On<br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Ignore mixed 
-          case words <br>
-        </div></td>
-      <td align="left" valign="top">This option ignores mixed case words when 
-        performing spell checking. </td>
-      <td align="left" valign="top">On<br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Ignore sentence 
-          capitalization<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option ignores sentence 
-          capitalization when performing spell checking. <br>
-        </div></td>
-      <td align="left" valign="top">On<br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top" width="25%"> <div class="Para">Ignore upper 
-          case words<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option ignores upper 
-          case words when performing spell checking. </div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Ignore internet addresses<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option ignores internet 
-          addresses when performing spell checking. </div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Ignore non-letters at word boundaries<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option ignores non-letters 
-          at word boundaries when performing spell checking. </div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Ignore single letters<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option ignores single 
-          letters when performing spell checking. </div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Ignore Java string literals<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option ignores 
-          Java string literals when performing spell checking. </div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Ignore '&' in Java properties files<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option ignores '&' 
-          in Java properties files when performing spell checking. </div></td>
-      <td align="left" valign="top"> <div class="Para">On</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Platform dictionary<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option selects a platform
-	 dictionary to use. </div></td>
-      <td align="left" valign="top"> <div class="Para">English (United States)</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">User defined dictionary<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option selects a User defined
-	 dictionary to use. </div></td>
-      <td align="left" valign="top"> <div class="Para">-</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Encoding<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option selects which encoding to use for reading the dictonaries. </div></td>
-      <td align="left" valign="top"> <div class="Para">Default (depends on Platform)</div></td>
-    </tr>
-    <tr>
-      <td align="left" valign="top"> <div class="Para">Maximum number of correction proposals<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option limits the possible corrections 
-	 displayed to the given value. </div></td>
-      <td align="left" valign="top"> <div class="Para">20</div></td>
-    </tr>
-  </tbody>
-</table>
-
-<p></p>
-<p>Here is what the Spelling preference page looks like: </p>
-<p><img src="../images/ref-spellingpref.png" alt="Image of the Spelling preference page"><br>
-   <br>
-</p>
-</body></html>
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>
+      Spelling preference page
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    table.c3 {width: 100%;}
+    td.c2 {vertical-align: top;}
+    td.c1 {vertical-align: top; width: 25%;}
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h1 class="Head">
+      Spelling Preference Page
+    </h1>
+    <div class="Para">
+      <p>
+        The following preferences can be changed on the <a class="command-link"
+        href=
+        'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Spelling)")'>
+
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+        "command link" /> <strong>General > Editors > Text Editors >
+        Spelling</strong></a> preference page.
+      </p>
+    </div>
+    <table border="1" cellspacing="0" class="c3">
+
+      <tbody>
+        <tr>
+          <th width="25%">
+            <div class="Para">
+              Option
+            </div>
+          </th>
+          <th>
+            <div class="Para">
+
+              Description
+            </div>
+          </th>
+          <th>
+            <div class="Para">
+              Default
+            </div>
+          </th>
+        </tr>
+        <tr>
+
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+              Enable spell checking<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option enables spell checking.
+            </div>
+
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              On
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td class="c1">
+
+            Ignore words with digits<br />
+          </td>
+          <td class="c2">
+            This option ignores words with digits when performing spell
+            checking.<br />
+          </td>
+          <td class="c2">
+            On<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+              Ignore mixed case words<br />
+            </div>
+          </td>
+
+          <td align="left" valign="top">
+            This option ignores mixed case words when performing spell
+            checking.
+          </td>
+          <td align="left" valign="top">
+            On<br />
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+
+            <div class="Para">
+              Ignore sentence capitalization<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option ignores sentence capitalization when performing spell
+              checking.<br />
+            </div>
+
+          </td>
+          <td align="left" valign="top">
+            On<br />
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top" width="25%">
+            <div class="Para">
+
+              Ignore upper case words<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option ignores upper case words when performing spell
+              checking.
+            </div>
+          </td>
+          <td align="left" valign="top">
+
+            <div class="Para">
+              On
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Ignore internet addresses<br />
+
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option ignores internet addresses when performing spell
+              checking.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+
+              On
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Ignore non-letters at word boundaries<br />
+            </div>
+
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option ignores non-letters at word boundaries when
+              performing spell checking.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              On
+            </div>
+
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Ignore single letters<br />
+            </div>
+          </td>
+
+          <td align="left" valign="top">
+            <div class="Para">
+              This option ignores single letters when performing spell
+              checking.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              On
+            </div>
+          </td>
+
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Ignore Java string literals<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+
+            <div class="Para">
+              This option ignores Java string literals when performing spell
+              checking.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              On
+            </div>
+          </td>
+        </tr>
+
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Ignore '&' in Java properties files<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+
+              This option ignores '&' in Java properties files when
+              performing spell checking.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              On
+            </div>
+          </td>
+        </tr>
+
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Platform dictionary<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+
+              This option selects a platform dictionary to use.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              English (United States)
+            </div>
+          </td>
+        </tr>
+        <tr>
+
+          <td align="left" valign="top">
+            <div class="Para">
+              User defined dictionary<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option selects a User defined dictionary to use.
+            </div>
+
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              -
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+
+            <div class="Para">
+              Encoding<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option selects which encoding to use for reading the
+              dictonaries.
+            </div>
+          </td>
+
+          <td align="left" valign="top">
+            <div class="Para">
+              Default (depends on Platform)
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+
+              Maximum number of correction proposals<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option limits the possible corrections displayed to the
+              given value.
+            </div>
+          </td>
+          <td align="left" valign="top">
+
+            <div class="Para">
+              20
+            </div>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+      Here is what the Spelling preference page looks like:
+    </p>
+
+    <p>
+      <img src="../images/ref-spellingpref.png" alt=
+      "Image of the Spelling preference page" /><br />
+       <br />
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-37.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-37.htm
index f09327c..aec4df4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-37.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-37.htm
@@ -1,119 +1,117 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html lang="en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Style-Type" content="text/css">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+   <meta http-equiv="Content-Style-Type" content="text/css"/>
    <title>New Project wizard</title>
-<link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+   <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
 </head>
 <body bgcolor="#FFFFFF">
 
-<h1 CLASS="Head">
+<h1 class="Head">
 New Project wizard</h1>
 
-<div CLASS="Intro">This wizard helps you create a new project in the Workbench.</div>
+<div class="Intro">This wizard helps you create a new project in the Workbench.</div>
 
 
-<p CLASS="Para">When you first bring up the New Project wizard, you need to select 
+<p class="Para">When you first bring up the New Project wizard, you need to select 
   the type of project you want to create.  Select the General type if you 
   want to create a generic project. To assist in locating a particular wizard, 
   the text field can be used to show only the wizards that match the entered text. </p>
 
-<p CLASS="Para"><img src="../images/Image247_projsel_wiz.png" alt="New project wizard" border="0" ></p> 
-<div CLASS="Topic">
+<p class="Para"><img src="../images/Image11_new_wizard.png" alt="New project wizard" border="0"/></p> 
+<div class="Topic">
 <h2>
 Create a New Project Resource Page</h2>
 When you select Next, you will be presented with the New Project Resource
 Page, containing the following edit fields:
-<br> 
-<table BORDER CELLSPACING=0 >
+<br/> 
+<table border="1" cellspacing="0">
 <tr>
 <th>
-<div CLASS="Para">Field</div>
+<div class="Para">Field</div>
 </th>
 
 <th>
-<div CLASS="Para">Description</div>
+<div class="Para">Description</div>
 </th>
 
 <th>
-<div CLASS="Para">Default</div>
+<div class="Para">Default</div>
 </th>
 </tr>
 
 <tr>
-<td ALIGN=LEFT VALIGN=TOP>
-<div CLASS="Para">Project Name</div>
+<td align="left" valign="top">
+<div class="Para">Project Name</div>
 </td>
 
-<td ALIGN=LEFT VALIGN=TOP>
-<div CLASS="Para">The name of the new project to be created.</div>
+<td align="left" valign="top">
+<div class="Para">The name of the new project to be created.</div>
 </td>
 
-<td ALIGN=LEFT VALIGN=TOP>
-<div CLASS="Para"><blank></div>
+<td align="left" valign="top">
+<div class="Para"><blank></div>
 </td>
 </tr>
 
 <tr>
-<td ALIGN=LEFT VALIGN=TOP>
-<div CLASS="Para">Location</div>
+<td align="left" valign="top">
+<div class="Para">Location</div>
 </td>
 
-<td ALIGN=LEFT VALIGN=TOP>
-<div CLASS="Para">The location in the file system where the project will
+<td align="left" valign="top">
+<div class="Para">The location in the file system where the project will
 be created. De-select "Use default location" to specify a location other
 than the default.  You can type the new location or browse to select
 a file system location for the new project.</div>
 </td>
 
-<td ALIGN=LEFT VALIGN=TOP>
-<div CLASS="Para">The workspace root directory</div>
+<td align="left" valign="top">
+<div class="Para">The workspace root directory</div>
 </td>
 </tr>
 </table>
 
 
-  <p CLASS="Para">After you indicate a name and location for the project, you 
+  <p class="Para">After you indicate a name and location for the project, you 
     can either click <strong>Finish </strong>to create the project, or you can 
     click <strong>Next </strong>to set up project dependencies on the Select Referenced 
     Projects page.</p> 
-  <p CLASS="Para">Here is what the New Project Resource page looks like:</p>
+  <p class="Para">Here is what the New Project Resource page looks like:</p>
 
-  <p CLASS="Para"><img src="../images/Image251_proj_wiz.png" alt="New project name and location page" border="0" ></p></div>
+  <p class="Para"><img src="../images/Image251_proj_wiz.png" alt="New project name and location page" border="0"/></p></div>
 
-<div CLASS="Topic">
+<div class="Topic">
 <h2>
 Select Referenced Projects page</h2>
 
-<div CLASS="Para">In the Referenced Projects list, you can set project
+<div class="Para">In the Referenced Projects list, you can set project
 dependencies for the new project. In the list of other projects in the
 Workbench, you can select one or more projects on which you want the new
 project to depend.  Initially, no projects will be selected.</div>
 
 
-  <p CLASS="Para">Click <strong>Finish</strong> when you are done to create the 
+  <p class="Para">Click <strong>Finish</strong> when you are done to create the 
     new project in the Workbench.</p> 
-  <p CLASS="Para">Here is what the Select Referenced Projects page looks
+  <p class="Para">Here is what the Select Referenced Projects page looks
 like:</p>
 
-  <p CLASS="Para"><img src="../images/Image252_projref_page.png" alt="Project references page" border="0" ></p></div>
+  <p class="Para"><img src="../images/Image252_projref_page.png" alt="Project references page" border="0" /></p></div>
 
-<div CLASS="Topic">
+<div class="Topic">
 <h2>
 New Project perspective options</h2>
 
-  <div CLASS="Para">On the preferences page (<strong>Window > Preferences > General 
+  <div class="Para">On the preferences page (<strong>Window > Preferences > General 
     > Perspectives</strong>), you can change the way that new projects are initially 
     displayed. For details on how to change this option see <a href="ref-10.htm">General</a>.</div>
 </div>
 
-<p><img border="0" src="../images/ngrelr.png" alt="Related reference" >
-<br><a href="ref-27.htm">Project Explorer View</a>
+<p><img border="0" src="../images/ngrelr.png" alt="Related reference"/>
+<br/><a href="ref-27.htm">Project Explorer View</a>
 </p>
 
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3a.htm
index 3ac162b..b788fb8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-3a.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -20,7 +20,7 @@
 <P CLASS="Para">
 By default the fast view bar is always visible. You can use the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Perspectives</b></a>
   preference page to hide the fast view bar if it is empty.</P>
 <DIV CLASS="Topic">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-42.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-42.htm
index 415a298..fb257e7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-42.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-42.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Web Browser preferences</title>
 </head>
 <body>
@@ -16,19 +16,13 @@
   <p>The following preferences can be changed on the
   
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.browser.preferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Web Browser</strong></a>
   
   preference page.</p>
 </div>
 
 <table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
   <tbody>
     <tr> 
       <th width="25%"> <div class="Para">Option</div></th>
@@ -53,7 +47,6 @@
     </tr>
   </tbody>
 </table>
-<p></p>
 <p>Here is what the Web Browser preference page looks like: </p>
 <p><img src="../images/ref-webbrowserpref.png" alt="Image of the Web Browser preference page"><br>
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-48a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-48a.htm
index 7f4c918..1d35eb0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-48a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-48a.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,15 +12,15 @@
 </HEAD>
 <BODY BGCOLOR="#ffffff">
 <H1 CLASS="Head"> Ignoring resources from version control</H1>
-<P CLASS="Para" Label=Type>When synchronizing resources, it is possible that there 
+<P>When synchronizing resources, it is possible that there 
   are some resources that you do not want to commit to the repository. There 
   are two ignore facilities provided, allowing you to specify what resources 
   should be excluded from update and commit operations.</P>
-<P CLASS="Para" Label=Type>The first is a global ignore facility, provided by the
+<P>The first is a global ignore facility, provided by the
 Workbench. The second is the CVS ignore facility, which reads the contents of a
 special file .<i>cvsignore</i> to determine what to ignore.</P>
-<h2 Label=Type>Why ignore files when synchronizing?</h2>
-<P Label=Type>There are many files that a user may not want to commit to the repository. 
+<h2>Why ignore files when synchronizing?</h2>
+<P>There are many files that a user may not want to commit to the repository. 
 For example, external editors may create temporary files in your project. Compilation of .java files creates .class files, and
 likewise many build operations result in binary files. These files, when taken together, may
 be quite large. In addition, they may be re-generated whenever a build is performed,
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-5.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-5.htm
index 6c681ee..c2bdf70 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-5.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-5.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Builds</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -33,7 +33,7 @@ proportional to the amount of change done.  The benefit of auto-building is
 that your derived resources (e.g., Java .class files) are always up to date.
 Auto-building is turned on/off via the <b>Build automatically</b> option on the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Workspace</b></a> preference page.</p>
 <p class="Intro">If you need more control over when builds occur, you can turn off
 auto-building and invoke builds manually. This is sometimes desirable in
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-58.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-58.htm
index d314a67..521737e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-58.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-58.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -41,6 +41,11 @@ you Go Into a resource, then the Back command in the resulting display returns t
 </UL>
 </DIV>
 <DIV CLASS="Topic">
+<H2>Open Hyperlink</H2>
+<P>This command opens one or more hyperlinks at the current caret location. If there's only one link available it directly opens the hyperlink,
+ else brings up the chooser showing all the available hyperlinks at that location.</P>
+</DIV>
+<DIV CLASS="Topic">
 <H2>Open Resource</H2>
 <P>This command displays a dialog that lets you select any resource in the
 workspace to open it in an editor. For more information see the links
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-6.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-6.htm
index 4d3f61e..7c02e6f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-6.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-6.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -17,10 +17,10 @@ Perspectives</H1>
 <P CLASS="Intro">
 A perspective defines the initial set and layout of views in the Workbench
 window. One or more perspectives can exist in a single Workbench window.</p>
-<p CLASS="Para" Label=Type>Perspectives can be opened either in the same 
+<p>Perspectives can be opened either in the same 
 (existing) Workbench window, hiding the current perspective, or in a new 
 Workbench window</p>
-<p CLASS="Para" Label=Type>Perspectives define visible action sets, which you
+<p>Perspectives define visible action sets, which you
 can change to customize a perspective.  You can save a perspective that you
 build in this manner, making your own custom perspective that you can open again
 later.  </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-65.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-65.htm
index 6713429..7de8ba7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-65.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-65.htm
@@ -1,7 +1,7 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" type="text/css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-66.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-66.htm
index 6d6bde0..75580e8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-66.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-66.htm
@@ -1,65 +1,112 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" type="text/css">
-<title>Editor area marker bar</title>
-</head>
-<body bgcolor="#ffffff">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" type="text/css" />
+    <title>
+      Editor area marker bar
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
 
-<h1>Editor area marker bar</h1>
+  </head>
+  <body>
+    <h1>
+      Editor area marker bar
+    </h1>
+    <p>
+      The following markers can appear in the marker bar (to the left of the
+      editor area):
+    </p>
+    <table border="1" cellspacing="0" cellpadding="4">
+      <caption>
 
-<p>The following markers can appear in the marker bar (to the left of the editor area):
-</p>
+        Marker Bar Markers
+      </caption>
+      <thead>
+        <tr>
+          <th>
+            Icon
+          </th>
+          <th>
+            Description
+          </th>
 
-<table border="1" cellspacing="0" cellpadding="4">
-<caption>Marker Bar Markers</caption>
-<thead>
-<tr>
-<th>Icon</th>
-<th>Description</th>
-</tr>
-</thead>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td align="center" valign="middle">
+            <img src="../images/ref-16.png" alt="Bookmark icon" />
+          </td>
+          <td>
+            Bookmark
+          </td>
 
-<tbody>
-<tr>
-<td align="center" valign="middle" align="center" valign="middle"><img src="../images/ref-16.png" alt="Bookmark icon"></td>
-<td>Bookmark</td>
-</tr>
+        </tr>
+        <tr>
+          <td align="center" valign="middle">
+            <img src="../images/ref-17.png" alt="Breakpoint icon" />
+          </td>
+          <td>
+            Breakpoint
+          </td>
+        </tr>
 
-<tr>
-<td align="center" valign="middle" align="center" valign="middle"><img src="../images/ref-17.png" alt="Breakpoint icon"></td>
-<td>Breakpoint</td>
-</tr>
+        <tr>
+          <td align="center" valign="middle">
+            <img src="../images/ref-18.png" alt="Task marker icon" />
+          </td>
+          <td>
+            Task marker
+          </td>
+        </tr>
+        <tr>
 
-<tr>
-<td align="center" valign="middle"><img src="../images/ref-18.png" alt="Task marker icon"></td>
-<td>Task marker</td>
-</tr>
+          <td align="center" valign="middle">
+            <img src="../images/searchm_obj.png" alt="Search result icon" />
+          </td>
+          <td>
+            Search result
+          </td>
+        </tr>
+        <tr>
+          <td align="center" valign="middle">
 
-<tr>
-<td align="center" valign="middle"><img src="../images/searchm_obj.png" alt="Search result icon"></td>
-<td>Search result</td>
-</tr>
+            <img src="../images/ref-24.png" alt="Error marker icon" />
+          </td>
+          <td>
+            Error marker
+          </td>
+        </tr>
+        <tr>
+          <td align="center" valign="middle">
+            <img src="../images/ref-22.png" alt="Warning marker icon" />
 
-<tr>
-<td align="center" valign="middle"><img src="../images/ref-24.png" alt="Error marker icon"></td>
-<td>Error marker</td>
-</tr>
+          </td>
+          <td>
+            Warning marker
+          </td>
+        </tr>
+        <tr>
+          <td align="center" valign="middle">
+            <img src="../images/ref-20.png" alt="Information marker icon" />
+          </td>
 
-<tr>
-<td align="center" valign="middle"><img src="../images/ref-22.png" alt="Warning marker icon"></td>
-<td>Warning marker</td>
-</tr>
-
-<tr>
-<td align="center" valign="middle"><img src="../images/ref-20.png" alt="Information marker icon"></td>
-<td>Information marker</td>
-</tr>
-</tbody>
-</table>
-
-</body>
+          <td>
+            Information marker
+          </td>
+        </tr>
+      </tbody>
+    </table>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-67.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-67.htm
index b3b2f98..0c59bbb 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-67.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-67.htm
@@ -1,7 +1,7 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" type="text/css">
@@ -24,7 +24,7 @@
 
 <tbody>
 <tr>
-<td align="center" valign="middle" align="center" valign="middle"><img src="../images/ref-21.png" alt="High priority task icon"></td>
+<td align="center" valign="middle"><img src="../images/ref-21.png" alt="High priority task icon"></td>
 <td>High priority task</td>
 </tr>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-68.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-68.htm
index 67b5ed4..f3ff6d2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-68.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-68.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" type="text/css">
@@ -56,7 +56,7 @@
 <tr>
 <td align="center" valign="middle"><img src="../images/newfolder_wiz.png" alt="New folder image"></td>
 <td>Open a folder creation wizard</td>
-<td align="center" valign="middle"><img src="../images/newprj_wiz.png" alt="New project image"></td>
+<td align="center" valign="middle"><img src="../images/newprj_wiz.gif" alt="New project image"></td>
 <td>Open a project creation wizard</td>
 </tr>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-7.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-7.htm
index 5d3295d..9016005 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-7.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-7.htm
@@ -1,19 +1,19 @@
-<!doctype doctype public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
+<meta http-equiv="Content-Style-Type" content="text/css"/>
 <title>Accessibility preference page</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<link rel="STYLESHEET" href="../book.css" type="text/css">
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
+<link rel="STYLESHEET" href="../book.css" type="text/css"/>
 </head>
 <body bgcolor="#ffffff">
 
 <h1 class="Head">Accessibility preference page</h1>
 
 <p>You can change the following preferences on the
-  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Accessibility)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"><strong>General > Editors > Text Editors > Accessibility</strong></a> preference page:
+  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Accessibility)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/><strong>General > Editors > Text Editors > Accessibility</strong></a> preference page:
 </p>
 
 <table border="1" cellspacing="0" cellpadding="5">
@@ -49,7 +49,7 @@ in the line number ruler.</td>
 <p>The <b>Accessibility</b> preference page:
 </p>
 
-<p><img src="../images/ref-accessibility.png" alt="Accessibility preference page">
+<p><img src="../images/ref-accessibility.png" alt="Accessibility preference page"/>
 </p>
 
 </body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-70.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-70.htm
index 034201d..bd6d40a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-70.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-70.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Import wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -19,7 +19,7 @@ This wizard helps you import resources into the Workbench.</P>
 <P CLASS="Para">
 When the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Import wizard</b></a>
 first comes up, you must choose what type of import to
 do. To assist in locating a particular wizard, 
@@ -659,7 +659,7 @@ Default</P>
 <TR>
 <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left">
 <P CLASS="Para">
-File name</P>
+File</P>
 </TD>
 <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left">
 <P CLASS="Para">
@@ -670,11 +670,23 @@ The name of the team project set export file</P>
 <blank></P>
 </TD>
 </TR>
+<TR>
+<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left">
+<P CLASS="Para">
+URL</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left">
+<P CLASS="Para">
+The URL of the team project set on the web</P>
+</TD>
+<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left">
+<P CLASS="Para">
+<blank></P>
+</TD>
+</TR>
 </TBODY>
 </TABLE>
 </DIV>
 
-
-
 </BODY>
 </HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-71.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-71.htm
index 4db3c05..8284c7e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-71.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-71.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Export wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -19,7 +19,7 @@ This wizard help you export resources from the Workbench.</P>
 <P CLASS="Para">
 When the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Export wizard</b></a>
 first comes up, you must choose what type of export to
 do. To assist in locating a particular wizard, 
@@ -457,12 +457,6 @@ Create hierarchy (folder) structure in the file system only for selected folders
 </TABLE>
 </DIV>
 
-
-
-
-<h2>
-</h2>
-
 <h2>Preferences</h2>
   <p class="Head">Export preferences to the local file system.</p>
      <p> <img src="../images/Image266_export_preferences.png" alt="Preferences export wizard" width="470" height="550" border="0"> </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-72.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-72.htm
index ef8820d..be4438b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-72.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-72.htm
@@ -1,11 +1,11 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation, Red Hat, and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<meta name="copyright" content="Copyright (c) IBM Corporation, Red Hat, and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<meta http-equiv="Content-Style-Type" content="text/css"/>
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Preferences</title>
 </head>
 <body>
@@ -13,7 +13,7 @@
 <h1>Preferences</h1>
 
 <p>Use the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workbench)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
 <b>Window > Preferences</b></a> dialog pages to set how you want Eclipse to 
 operate. 
 </p>
@@ -28,8 +28,8 @@ instead.
 </p>
 
 <p>The arrow controls in the upper-right of the right pane 
-<img src="../images/backward_nav.png" alt="Navigate backwards image">
-<img src="../images/forward_nav.png" alt="Navigate forwards image"> 
+<img src="../images/backward_nav.png" alt="Navigate backwards image"/>
+<img src="../images/forward_nav.png" alt="Navigate forwards image"/> 
 enable you to navigate through previously viewed pages. 
 To return to a page after viewing several pages, 
 click the drop-down arrow to display a list of your recently viewed 
@@ -37,12 +37,12 @@ preference pages.
 </p> 
 
 <p>The preferences dialog displaying the <b>General</b> preferences:</p> 
-<p><img src="../images/Image217_pref_wb.png" alt="Preference dialog" border="0" ></p>
+<p><img src="../images/Image217_pref_wb.png" alt="Preference dialog" border="0"/></p>
 
 <p>Preference pages contributed by plug-ins are included in this dialog.</p> 
 
-<p><img border="0" src="../images/ngrelr.png" alt="Related reference" >
-<br><a href="ref-23.htm">Workbench window layout</a>
+<p><img border="0" src="../images/ngrelr.png" alt="Related reference"/>
+<br/><a href="ref-23.htm">Workbench window layout</a>
 </p>
 
 </body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-73.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-73.htm
index fefed13..0c5f727 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-73.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-73.htm
@@ -3,7 +3,7 @@
 <HEAD>
 
 <meta name="copyright"
-	content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+	content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,7 +12,7 @@
 	TYPE="text/css">
 <title>Project Explorer view</title>
 <script language="JavaScript"
-	src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+	src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"  type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -27,7 +27,7 @@ Development Tools (JDT) installed looks similar to the Package Explorer:</P>
 <p CLASS="Head">To add the Project Explorer view to the current
 perspective, click <a class="command-link"
 	href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.navigator.ProjectExplorer)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"> <b>Window
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"> <b>Window
 > Show View > Other... > General > Project Explorer</b></a>.</p>
 <P CLASS="Para"> </P>
 <h2>Toolbar</h2>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-8.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-8.htm
index cfe40d3..17e3467 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-8.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-8.htm
@@ -1,8 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation, Red Hat, and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
+<meta name="copyright" content="Copyright (c) IBM Corporation, Red Hat, and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page."/>
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <meta http-equiv="Content-Style-Type" content="text/css"/>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-9.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-9.htm
index b609bc0..5d86a16 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-9.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-9.htm
@@ -1,14 +1,14 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta name="GENERATOR" content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]">
    <title>Workspace</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <link REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 </head>
 <body bgcolor="#FFFFFF">
@@ -17,7 +17,7 @@
 <p CLASS="Head">On the
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Workspace</strong></a>
 
   preference page, you can manage 
@@ -36,6 +36,22 @@
     <td>On</td>
   </tr>
   <tr> 
+    <td>Refresh using native hooks or polling</td>
+    <td>If this option is turned on then the workspace resources will be synchronized 
+        with their corresponding resources in the file system automatically
+        using native refresh providers (on Windows) or a polling mechanism.
+      	<p><strong>Note</strong>: This can potentially be a lengthy operation depending 
+        on the number of resources you have in your workspace.</p></td>
+    <td>Off </td>
+  </tr>
+  <tr> 
+    <td>Refresh on access</td>
+    <td>If this option is turned on then files discovered to be out-of-sync by the workspace, 
+    	for example while accessing the file content by an editor, 
+    	will be automatically asynchronously refreshed.</td>
+    <td>Off </td>
+  </tr>
+  <tr> 
     <td>Save automatically before build</td>
     <td>If this option is selected, when a manual build is performed the Workbench 
       will automatically save all resources that have been modified since the 
@@ -56,40 +72,32 @@
     <td>5</td>
   </tr>
   <tr> 
-    <td>Refresh automatically</td>
-    <td><p>If this option is turned on then the workspace resources will be synchronized 
-        with their corresponding resources in the file system automatically.</p>
-      <p><strong>Note</strong>: This can potentially be a lengthy operation depending 
-        on the number of resources you have in your workspace. </p></td>
-    <td>Off </td>
+    <td>Workspace title (shown in window title) </td>
+    <td>This string plus " - " will be prepended to the computed title of each workbench window.</td>
+    <td> </td>
   </tr>
-  <TR> 
-    <TD COLSPAN="1" valign="top" align="left">Open referenced projects when a 
-      project is opened</TD>
-    <TD COLSPAN="1" valign="top" align="left">If this option is enabled opening 
+  <tr> 
+    <td>Open referenced projects when a 
+      project is opened</td>
+    <td>If this option is enabled opening 
       a project will also open and closed projects it references. Select prompt 
-      if you wish to be asked first.</TD>
-    <TD COLSPAN="1" valign="top" align="left">Prompt</TD>
-  </TR>
-  <TR> 
-    <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">Text 
-        file encoding</P></TD>
-    <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> Use 
-        this option to specify the encoding to use when saving text files in editors. 
-      </P></TD>
-    <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">Default 
-        (CP1252)</P></TD>
-  </TR>
-  <TR> 
-    <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">Text 
-        File line delimiter</P></TD>
-    <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para"> Use 
-        this option to specify the line delimiter to use for new text files. <strong>Note:</strong> 
+      if you wish to be asked first.</td>
+    <td>Prompt</td>
+  </tr>
+  <tr> 
+    <td>Text file encoding</td>
+    <td> Use 
+        this option to specify the encoding to use when saving text files in editors.</td>
+    <td>Default (Cp1252)</td>
+  </tr>
+  <tr> 
+    <td>New text file line delimiter</td>
+    <td>Use this option to specify the line delimiter to use for new text files.
+        <p><strong>Note:</strong> 
         This will generally not affect the file line delimiter for<br>
-        existing files.</P></TD>
-    <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">Default 
-      </P></TD>
-  </TR>
+        existing files.</p></td>
+    <td>Default</td>
+  </tr>
 </table>
 <p> </p><p>Here is what the <strong>Workspace</strong> preferences page looks like:</p> 
 <p><img src="../images/Image209_workspace.png" alt="Preference dialog" border="0" ></p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antcodeassist.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antcodeassist.htm
deleted file mode 100644
index 577e73d..0000000
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antcodeassist.htm
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
-<HEAD>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Ant Content Assist Preferences</title>
-
-</HEAD>
-<body>
-<h1> Ant Content Assist Preferences</h1>
-<p>
-	The following preferences can be changed on the
-	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntCodeAssistPreferencePage)")'>
-	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-	<strong>Ant > Editor > Content Assist</strong></a> preference page.
-</p>
-<table border="1" cellspacing="0" width="80%">
-  <thead>
-  <tr> 
-      <th width="25%">Option</th>
-      <th>Description</th>
-      <th width="8%">Default</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr> 
-      <td width="25%"> Insert single proposals automatically</td>
-      <td>This option allows you to automatically insert single proposals.</td>
-      <td width="8%" align="center">On</td>
-    </tr>
-    <tr> 
-      <td width="25%">Provide proposals for user defined tasks (may lock referenced JAR files)</td>
-      <td>This option allows you to provide proposals for user defined tasks.</td>
-      <td width="8%" align="center">On</td>
-    </tr>
-    <tr> 
-      <td width="25%">Enable auto activation</td>
-      <td >This option enables and disables auto activation.</td>
-      <td width="8%" align="center">On</td>
-    </tr>
-    <tr> 
-      <td width="25%">Auto activation delay</td>
-      <td>This option allows you to set the auto activation delay.</td>
-      <td width="8%" align="center">500</td>
-    </tr>
-    <tr> 
-      <td width="25%">Auto activation triggers</td>
-      <td >This option allows you to set the auto activation triggers.</td>
-      <td width="8%" align="center"><${</td>
-    </tr>
-    <tr> 
-      <td width="25%"> Code assist color options</td>
-      <td> This option allows you to set the color for the completion proposal background and foreground.</td>
-      <td width="8%" align="center"> </td>
-    </tr>
-  </tbody>
-</table>
-
-<P CLASS="Para">Here is what the Ant Code Assist preference page looks like.</P>
-<P CLASS="Para">
-<img src="../images/ant_code_assist.png" alt="Ant Code Assist preference page" border="0"></P>
-
-<P CLASS="Para"> <img border="0" src="../images/ngrelc.png" alt="Related concepts"><br>
-	<a href="../concepts/concepts-antsupport.htm">Ant support</a> 
-</P>
-<p>
-	<img border="0" src="../images/ngrelr.png" alt="Related reference" ><br>
-	<a href="ref-anteditor.htm">Ant Editor</a><br>
-	<a href="../reference/ref-antprefs.htm">Ant preference page</a><br>
-	<a href="ref-anteditorprefs.htm">Ant editor preferences</a><br>
-	<a href="../reference/ref-antruntimeprefs.htm">Ant runtime preferences</a><br>
-	<a href="../reference/ref-antformatter.htm">Ant formatter preferences</a><br>
-	<a href="../reference/ref-anttemplates.htm">Ant templates preferences</a>
-</p>
-</body>
-</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antcontentassist.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antcontentassist.htm
new file mode 100644
index 0000000..ff8affa
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antcontentassist.htm
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
+<HEAD>
+
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
+<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
+<title>Ant Content Assist Preferences</title>
+
+</HEAD>
+<body>
+<h1> Ant Content Assist Preferences</h1>
+<p>
+	The following preferences can be changed on the
+	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntCodeAssistPreferencePage)")'>
+	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
+	<strong>Ant > Editor > Content Assist</strong></a> preference page.
+</p>
+<table border="1" cellspacing="0" width="80%">
+  <thead>
+  <tr> 
+      <th width="25%">Option</th>
+      <th>Description</th>
+      <th width="8%">Default</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr> 
+      <td width="25%"> Insert single proposals automatically</td>
+      <td>This option allows you to automatically insert single proposals.</td>
+      <td width="8%" align="center">On</td>
+    </tr>
+    <tr> 
+      <td width="25%">Provide proposals for user defined tasks (may lock referenced JAR files)</td>
+      <td>This option allows you to provide proposals for user defined tasks.</td>
+      <td width="8%" align="center">On</td>
+    </tr>
+    <tr> 
+      <td width="25%">Enable auto activation</td>
+      <td >This option enables and disables auto activation.</td>
+      <td width="8%" align="center">On</td>
+    </tr>
+    <tr> 
+      <td width="25%">Auto activation delay</td>
+      <td>This option allows you to set the auto activation delay.</td>
+      <td width="8%" align="center">500</td>
+    </tr>
+    <tr> 
+      <td width="25%">Auto activation triggers</td>
+      <td >This option allows you to set the auto activation triggers.</td>
+      <td width="8%" align="center"><${</td>
+    </tr>
+  </tbody>
+</table>
+
+<P CLASS="Para">Here is what the Ant Content Assist preference page looks like.</P>
+<P CLASS="Para">
+<img src="../images/ant_content_assist.png" alt="Ant Content Assist preference page" border="0"></P>
+
+<P CLASS="Para"> <img border="0" src="../images/ngrelc.png" alt="Related concepts"><br>
+	<a href="../concepts/concepts-antsupport.htm">Ant support</a> 
+</P>
+<p>
+	<img border="0" src="../images/ngrelr.png" alt="Related reference" ><br>
+	<a href="ref-anteditor.htm">Ant Editor</a><br>
+	<a href="../reference/ref-antprefs.htm">Ant preference page</a><br>
+	<a href="ref-anteditorprefs.htm">Ant editor preferences</a><br>
+	<a href="../reference/ref-antruntimeprefs.htm">Ant runtime preferences</a><br>
+	<a href="../reference/ref-antformatter.htm">Ant formatter preferences</a><br>
+	<a href="../reference/ref-anttemplates.htm">Ant templates preferences</a>
+</p>
+</body>
+</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditor.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditor.htm
index 63b3a32..5113612 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditor.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditor.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 
@@ -45,6 +45,7 @@ The editor includes the following features:
 <p>
 	<img border="0" src="../images/ngrelr.png" alt="Related reference"><br>
     <a href="ref-anteditorprefs.htm">Ant editor preferences</a><br>
+    <a href="ref-antcontentassist.htm">Ant content assist preferences</a><br>
     <a href="ref-anticons.htm">External Tools and Ant icons</a><br>
     <a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/reference/views/ref-view-outline.htm">Outline view</a><br>
     <a href="PLUGINS_ROOT/org.eclipse.jdt.doc.user/reference/views/ref-view-package-explorer.htm">Package Explorer</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditorprefs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditorprefs.htm
index 1c360ec..a2c69fd 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditorprefs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anteditorprefs.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Ant Editor Preferences</title>
 
@@ -15,7 +15,7 @@
 <H1 CLASS="Head">Ant Editor Preferences</H1>
 <p>The following preferences can be changed on the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntEditorPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Ant > Editor</strong></a> page.</p>
 <h2>Appearance options</h2>
 <table border="1" cellspacing="0" width="80%">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antformatter.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antformatter.htm
index 64357fd..62b7244 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antformatter.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antformatter.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Ant Formatter Preferences</title>
 
@@ -16,7 +16,7 @@
 <p>
 	The following preferences can be changed on the
   	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntCodeFormatterPreferencePage)")'>
-  	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   	<strong>Ant > Editor > Formatter</strong></a> preference page.
 </p>
 <table border="1" cellspacing="0" style="width: 80%;">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antprefs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antprefs.htm
index 9a2dd07..ab8b27e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antprefs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antprefs.htm
@@ -1,11 +1,11 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>General Ant Preferences</title>
 </head>
 <body>
@@ -14,7 +14,7 @@
 
 <p>
 	You can change the following preferences on the
-	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntPreferencePage)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"><strong>Ant</strong></a> preference page.
+	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntPreferencePage)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"><strong>Ant</strong></a> preference page.
 </p>
 
 <table border="1" cellspacing="0" cellpadding="5" width="80%">
@@ -42,6 +42,11 @@
 			<td align="center"><a href="http://ant.apache.org/manual" target="_blank">http://ant.apache.org/manual</a></td>
 		</tr>
 		<tr >
+            <td>Always run new Ant configurations in the same JRE as the workspace</td>
+            <td>Allows you to automatically always have all new Ant launch configurations set to run in the same JRE as the workspace.</td>
+            <td align="center">Off</td>
+        </tr>
+		<tr >
 			<td>Warn when tools.jar is not on the classpath</td>
 			<td>Displays a warning when tools.jar is not on the classpath.</td>
 			<td align="center">On</td>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antruntimeprefs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antruntimeprefs.htm
index e4cd71e..0a32304 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antruntimeprefs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antruntimeprefs.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Ant Runtime Preferences</title>
 
@@ -15,7 +15,7 @@
 <h1>Ant Runtime Preferences</h1>
 <p>
 	The following preferences can be changed on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntRuntimePreferencePage)")'>
-	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 	<strong>Ant > Runtime</strong></a> preference page.
 </p>
 <h2>Classpath options</h2>
@@ -78,7 +78,7 @@
 	Here is what the Classpath tab of the Ant Runtime preferences page looks like:
 </p>
 <p>
-	<img src="../images/Image91_ant_prefs_1.png" alt="Ant classpath preference tab" border="0">
+	<img src="../images/ant_runtime_classpath.png" alt="Ant classpath preference tab" border="0">
 </p>
 <h2>Tasks options</h2>
 <p>
@@ -118,7 +118,7 @@
 	Here is what the Tasks tab of the Ant Runtime preferences page looks like:
 </p>
 <p>
-	<img src="../images/Image91_ant_prefs_2.png" alt="Ant tasks preference page" border="0">
+	<img src="../images/ant_runtime_tasks.png" alt="Ant tasks preference page" border="0">
 </p>
 <h2>Types options</h2>
 <p>
@@ -154,7 +154,7 @@
 	Here is what the Types tab of the Ant Runtime preferences page looks like:
 </p>
 <p>
-	<img src="../images/Image91_ant_prefs_3.png" alt="Ant types preference page" border="0" >
+	<img src="../images/ant_runtime_types.png" alt="Ant types preference page" border="0" >
 </p>
 <h2>Properties options</h2>
 <p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anttemplates.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anttemplates.htm
index 8da3f03..6b86d9f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anttemplates.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-anttemplates.htm
@@ -1,10 +1,10 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
 <title>Ant Templates Preference</title>
 </head>
@@ -15,7 +15,7 @@
 <p>
 	The following preferences can be changed on the 
 	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.TemplatesPreferencePage)")'>
-	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"><strong>Ant > Editor > Templates</strong></a>
+	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"><strong>Ant > Editor > Templates</strong></a>
     preference page.
 </p>
 <p> 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antview.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antview.htm
index 2a9423f..d79870c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antview.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-antview.htm
@@ -2,12 +2,12 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
 <title>Ant View</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>    
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>    
 </head>
 <body>
 	<h1> Ant View</h1>
@@ -35,7 +35,7 @@
 	<p>
 		To add the Ant view to the current perspective, click
 		<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ant.ui.views.AntView)")'>
-		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+		<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 		<b>Window > Show View > Other... > Ant > Ant</b></a>.
 	</p>    
 	<table border="1" cellpadding="5" cellspacing="0" summary="The commands available in the Ant View">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-capabilitiespref.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-capabilitiespref.htm
index 35c3fce..64e35d9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-capabilitiespref.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-capabilitiespref.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Capabilities</title>
 </HEAD>
@@ -15,7 +15,7 @@
 <P CLASS="Para">The
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.sdk.capabilities)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Capabilities</strong></a>
 
   preference page allows you to enable or disable 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-cheatsheets.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-cheatsheets.htm
index 7c653b2..742f35a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-cheatsheets.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-cheatsheets.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Working with cheat sheets</title>
 </head>
 <body>
@@ -28,7 +28,7 @@ is another kind of cheat sheet that provides guidance for larger tasks or a grou
 <ol>
   <li>Select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Help > Cheat Sheets</strong></a> from the menu bar.
   If this command is not in the menu, it can be added from <b>Window >
   Customize Perspective > Commands</b>, and check <b>Cheat Sheets</b>.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm
index 75220cb..ba4a38a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-composite-cheatsheets.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Working with composite cheat sheets</title>
 </head>
 <body>
@@ -29,7 +29,7 @@ task detail panel and shows the task which is selected in the explorer.</P>
 <p>Composite cheat sheets are launched in the same way as any other
 <a href="ref-cheatsheets.htm">cheat sheet</a> by selecting 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Help > Cheat Sheets</strong></a> from the menu bar.
   If this command is not in the menu, it can be added from <b>Window >
   Customize Perspective > Commands</b>, and check <b>Cheat Sheets</b>.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-content-type.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-content-type.htm
index 5885c87..c2f25ba 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-content-type.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-content-type.htm
@@ -1,10 +1,10 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <link rel="STYLESHEET" href="../book.css" type="text/css">
 <title>Content Types preference page</title>
 </head>
@@ -12,7 +12,7 @@
 
 <h1 class="Head">Content Types preference page</h1>
 
-<p class="Para">The <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ContentTypes)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"><strong>General > Content Types</strong></a>
+<p class="Para">The <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ContentTypes)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"><strong>General > Content Types</strong></a>
   preference page enables you to edit content types and their associated file names and character sets.
   You can also associate arbitrary file names or file extensions with content types. 
   A <i>content type</i> acts as a description 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-decorations.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-decorations.htm
index 11faa24..47a2fc2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-decorations.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-decorations.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Label Decorations</title>
 
@@ -21,7 +21,7 @@ label and icon.</P>
 The
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Appearance > Label Decorations</strong></a>
 
 preference page provides a description of each decoration
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-exttoolsprefs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-exttoolsprefs.htm
index cd8333c..dac9c97 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-exttoolsprefs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-exttoolsprefs.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>External Tools</title>
 
@@ -19,7 +19,7 @@ External Tools</H1>
 The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.externaltools.ExternalToolsPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Run/Debug > External Tools</strong></a>
 
 page.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-fonts.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-fonts.htm
index 6751b23..08d4720 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-fonts.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-fonts.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Colors and Fonts</title>
 
@@ -17,7 +17,7 @@ Colors and Fonts</H1>
 <P CLASS="Para"> Many of the fonts and colors and used by eclipse components can be set using the 
   
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Appearance > Colors and Fonts</strong></a>
   
   preference page.</P>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-keybindings.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-keybindings.htm
index f5a6643..1961eed 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-keybindings.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-keybindings.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -12,7 +12,7 @@ List of key bindings
 </TITLE>
 
 <link rel="stylesheet" type="text/css" HREF="../book.css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,7 +22,7 @@ what view or editor is selected, whether a dialog is open, what plug-ins are
 installed, and what operating and windowing system is being used.  At any
 time, you can obtain a list of available key bindings using Key Assist 
 (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.showKeyAssist")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help > Key Assist...</b></a>
 or Ctrl+Shift+L).  The following tables list some 
 popular key bindings available in the Eclipse SDK.
@@ -31,8 +31,8 @@ popular key bindings available in the Eclipse SDK.
 <h3><strong>File actions</strong></h3>
 
 <table width="75%" border="1">
-  <tr style="height: 64.5pt;" height="86"> 
-    <td class="xl29" style="height: 64.5pt; width: 126pt;" height="86">New</td>
+  <tr> 
+    <td class="xl29" height="86">New</td>
     <td class="xl29" style="border-left: medium none; width: 269pt;">Create a 
       Java element or a new resource. Configure which elements are shown in the 
       submenu in Window > Customize Perspective. In a Java perspective, by 
@@ -40,7 +40,7 @@ popular key bindings available in the Eclipse SDK.
       folder, scrapbook, file and folder are available.</td>
     <td class="xl29" style="border-left: medium none; width: 110pt;">Ctrl + N</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Close</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Close 
       the current editor. If the editor contains unsaved data, a save request 
@@ -48,7 +48,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + F4</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Close 
       All</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Close all editors. 
@@ -56,7 +56,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Shift + F4</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Save</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Save 
       the content of the current editor. Disabled if the editor does not contain 
@@ -64,14 +64,14 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + S</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Save 
       As</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Save 
       the content of the current editor under a new name.</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;"></td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Save 
       All</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Save 
@@ -80,14 +80,14 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Shift + S</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Print</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Prints 
       the content of the current editor. Enabled when an editor has the focus.</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + P</td>
   </tr>
-  <tr style="height: 51.75pt;" height="69"> 
+  <tr> 
     <td class="xl27" style="border-top: medium none; height: 51.75pt; width: 126pt;" height="69">Properties</td>
     <td class="xl27" style="border-top: medium none; border-left: medium none; width: 269pt;">Opens 
       the property pages of the select elements. Opened on Java projects the Java 
@@ -99,20 +99,20 @@ popular key bindings available in the Eclipse SDK.
 </table>
 <h3><strong>Edit actions</strong></h3>
 <table width="75%" border="1">
-  <tr style="height: 13.5pt;" height="18"> 
-    <td class="xl29" style="height: 13.5pt; width: 126pt;" height="18">Undo</td>
+  <tr> 
+    <td class="xl29" height="18">Undo</td>
     <td class="xl29" style="border-left: medium none; width: 269pt;">Revert the 
       last change in the editor</td>
     <td class="xl29" style="border-left: medium none; width: 110pt;">Ctrl + Z</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Redo</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Revert 
       an undone change</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Y</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 38.25pt; width: 126pt;" height="51">Cut</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Copies 
       the currently selected text or element to the clipboard and removes the 
@@ -121,14 +121,14 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + X</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Copy</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Copies 
       the currently selected text or elements to the clipboard</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + C</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 38.25pt; width: 126pt;" height="51">Paste</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Paste 
       the current content as text to the editor, or as a sibling or child element 
@@ -136,13 +136,13 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + V</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Delete</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Delete 
       the current text or element selection.</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Delete</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Select 
       All</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Select 
@@ -150,7 +150,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + A</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Find 
       / Replace</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Open 
@@ -158,7 +158,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + F</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Find 
       Next</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Finds 
@@ -166,7 +166,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + K</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Find 
       Previous</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Finds 
@@ -174,7 +174,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Shift + K</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Incremental 
       Find Next</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Starts 
@@ -183,7 +183,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + J</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Incremental 
       Find Previous</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Starts 
@@ -192,7 +192,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Shift + J</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Add 
       Task</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Add 
@@ -200,7 +200,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Alt 
       + Enter</td>
   </tr>
-  <tr style="height: 51pt;" height="68"> 
+  <tr> 
     <td rowspan="4" class="xl27" style="border-top: medium none; height: 127.5pt; width: 126pt;" height="170">Expand 
       Selection to</td>
     <td class="xl27" style="border-top: medium none; border-left: medium none; width: 269pt;">Enclosing 
@@ -210,27 +210,27 @@ popular key bindings available in the Eclipse SDK.
     <td rowspan="4" class="xl27" style="border-top: medium none; width: 110pt;">Alt 
       + Shift + Arrow Keys</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl28" style="border-left: medium none; height: 25.5pt; width: 269pt;" height="34">Next 
       Element: Selects the current and next element. (Arrow Right)</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl28" style="border-left: medium none; height: 25.5pt; width: 269pt;" height="34">Previous 
       Element: Selects the current and the previous element (Arrow Left)</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl28" style="border-left: medium none; height: 25.5pt; width: 269pt;" height="34">Restore 
       Last Selection: After an invocation of Expand Selection to restore the previous selection. (Arrow Down)</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
-    <td class="xl25" style="height: 38.25pt; width: 126pt;" height="51">Show Tooltip 
+  <tr> 
+    <td class="xl25" height="51">Show Tooltip 
       Description</td>
     <td class="xl25" style="border-left: medium none; width: 269pt;">Shows the 
       value of a hover that would appear at the current cursor location. The dialog 
       shown is scrollable and does not shorten descriptions.</td>
     <td class="xl25" style="border-left: medium none; width: 110pt;">F2</td>
   </tr>
-  <tr style="height: 89.25pt;" height="119"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 89.25pt; width: 126pt;" height="119">Content 
       Assist</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Opens 
@@ -243,7 +243,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Space</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 38.25pt; width: 126pt;" height="51">Quick 
       Fix</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">If 
@@ -252,7 +252,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + 1</td>
   </tr>
-  <tr style="height: 51.75pt;" height="69"> 
+  <tr> 
     <td class="xl27" style="border-top: medium none; height: 51.75pt; width: 126pt;" height="69">Parameter 
       Hints</td>
     <td class="xl27" style="border-top: medium none; border-left: medium none; width: 269pt;">If 
@@ -265,14 +265,14 @@ popular key bindings available in the Eclipse SDK.
 </table>
 <h3><strong>Navigate actions</strong></h3>
 <table width="75%" border="1">
-  <tr style="height: 26.25pt;" height="35"> 
-    <td class="xl29" style="height: 26.25pt; width: 126pt;" height="35">Open</td>
+  <tr> 
+    <td class="xl29" height="35">Open</td>
     <td class="xl29" style="border-left: medium none; width: 269pt;">Tries to 
       resolve the element referenced at the current code selection and opens the 
       file declaring the reference.</td>
     <td class="xl29" style="border-left: medium none; width: 110pt;">F3</td>
   </tr>
-  <tr style="height: 63.75pt;" height="85"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 63.75pt; width: 126pt;" height="85">Open 
       Type Hierarchy</td>
     <td class="xl26" style="width: 269pt;">Tries to resolve the element referenced 
@@ -281,7 +281,7 @@ popular key bindings available in the Eclipse SDK.
       in the Java editor and views showing Java elements.</td>
     <td class="xl25" style="border-top: medium none; width: 110pt;">F4</td>
   </tr>
-  <tr style="height: 102pt;" height="136"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 102pt; width: 126pt;" height="136">Open 
       External Javadoc</td>
     <td class="xl25" style="border-left: medium none; width: 269pt;">Opens the 
@@ -294,7 +294,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Shift 
       + F2</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 38.25pt; width: 126pt;" height="51">Open 
       Type</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Brings 
@@ -303,7 +303,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Shift + T</td>
   </tr>
-  <tr style="height: 51pt;" height="68"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 51pt; width: 126pt;" height="68">Open 
       Type In Hierarchy</td>
     <td class="xl26" style="width: 269pt;">Brings up the Open Type selection dialog 
@@ -312,7 +312,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; width: 110pt;">Ctrl + Shift 
       + H</td>
   </tr>
-  <tr style="height: 25.5pt;" height="34"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 25.5pt; width: 126pt;" height="34">Show 
       Outline</td>
     <td class="xl25" style="border-left: medium none; width: 269pt;">Opens the 
@@ -320,7 +320,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + O</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Go 
       to Next Problem</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Selects 
@@ -328,7 +328,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + . (Period)</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Go 
       to Previous Problem</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Selects 
@@ -336,7 +336,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + , (Comma)</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Go 
       to Last Edit Location</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Reveal 
@@ -344,7 +344,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Q</td>
   </tr>
-  <tr style="height: 26.25pt;" height="35"> 
+  <tr> 
     <td class="xl27" style="border-top: medium none; height: 26.25pt; width: 126pt;" height="36">Go 
       to Line</td>
     <td class="xl27" style="border-top: medium none; border-left: medium none; width: 269pt;">Opens 
@@ -356,13 +356,13 @@ popular key bindings available in the Eclipse SDK.
 </table>
 <h3><strong>Search actions</strong></h3>
 <table width="75%" border="1">
-  <tr style="height: 13.5pt;" height="18"> 
-    <td class="xl29" style="height: 13.5pt; width: 126pt;" height="18">Search...</td>
+  <tr> 
+    <td class="xl29" height="18">Search...</td>
     <td class="xl29" style="border-left: medium none; width: 269pt;">Opens the 
       search dialog</td>
     <td class="xl29" style="border-left: medium none; width: 110pt;">Ctrl + H</td>
   </tr>
-  <tr style="height: 26.25pt;" height="35"> 
+  <tr> 
     <td class="xl27" style="border-top: medium none; height: 26.25pt; width: 126pt;" height="35">Occurrences 
       in File</td>
     <td class="xl27" style="border-top: medium none; border-left: medium none; width: 269pt;">Finds 
@@ -373,8 +373,8 @@ popular key bindings available in the Eclipse SDK.
 </table>
 <h3><strong>Project actions</strong></h3>
 <table width="75%" border="1">
-  <tr style="height: 52.5pt;" height="70"> 
-    <td class="xl28" style="height: 52.5pt; width: 126pt;" height="70">Build All</td>
+  <tr> 
+    <td class="xl28" height="70">Build All</td>
     <td class="xl28" style="border-left: medium none; width: 269pt;">Builds the 
       all projects in the workspace. This is an incremental build, means that 
       the builder analyzes the changes since the last time of build and minimizes 
@@ -384,20 +384,20 @@ popular key bindings available in the Eclipse SDK.
 </table>
 <h3><strong>Source actions</strong></h3>
 <table width="75%" border="1">
-  <tr style="height: 13.5pt;" height="18"> 
-    <td class="xl29" style="height: 13.5pt; width: 126pt;" height="18">Comment</td>
+  <tr> 
+    <td class="xl29" height="18">Comment</td>
     <td class="xl29" style="border-left: medium none; width: 269pt;">Comments 
       out all lines containing the current selection.</td>
     <td class="xl29" style="border-left: medium none; width: 110pt;">Ctrl + /</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">Uncomment</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Uncomments 
       all lines containing the current selection.</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + \</td>
   </tr>
-  <tr style="height: 12.75pt;" height="17"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 12.75pt; width: 126pt;" height="17">
 	Indent</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">
@@ -405,7 +405,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">
 	Ctrl + I</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 38.25pt; width: 126pt;" height="51">Shift 
       Right</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Increments 
@@ -413,7 +413,7 @@ popular key bindings available in the Eclipse SDK.
       the selection covers multiple lines or a single whole line.</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Tab</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 38.25pt; width: 126pt;" height="51">Shift 
       Left</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Decrements 
@@ -422,7 +422,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Shift 
       + Tab</td>
   </tr>
-  <tr style="height: 51pt;" height="68"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 51pt; width: 126pt;" height="68">Format</td>
     <td class="xl24" style="border-top: medium none; border-left: medium none; width: 269pt;">Uses 
       the code formatter to format the current text selection. The formatting 
@@ -431,7 +431,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Shift + F</td>
   </tr>
-  <tr style="height: 140.25pt;" height="187"> 
+  <tr> 
     <td class="xl27" style="border-top: medium none; height: 140.25pt; width: 126pt;" height="187">Organize 
       Imports</td>
     <td class="xl31" style="border-left: medium none; width: 269pt;">Organizes 
@@ -446,8 +446,8 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl27" style="border-top: medium none; border-left: medium none; width: 110pt;">Ctrl 
       + Shift + O</td>
   </tr>
-  <tr style="height: 90pt;" height="120"> 
-    <td class="xl27" style="height: 90pt; width: 126pt;" height="120">Add Import</td>
+  <tr> 
+    <td class="xl27" height="120">Add Import</td>
     <td class="xl26" style="width: 269pt;">Creates an import declaration for a 
       type reference currently selected. If the type reference if qualified, the 
       qualification will be removed if possible. If the referenced type name can 
@@ -459,15 +459,15 @@ popular key bindings available in the Eclipse SDK.
 </table>
 <h3><strong>Refactor actions</strong></h3>
 <table width="75%" border="1">
-  <tr style="height: 39pt;" height="52"> 
-    <td class="xl29" style="height: 39pt; width: 126pt;" height="52">Undo</td>
+  <tr> 
+    <td class="xl29" height="52">Undo</td>
     <td class="xl29" style="border-left: medium none; width: 269pt;">Does an Undo 
       of the last refactoring. The refactoring undo buffer is only valid as long 
       as no other source changes than refactoring have been performed.</td>
     <td class="xl29" style="border-left: medium none; width: 110pt;">Alt + Shift 
       + Z</td>
   </tr>
-  <tr style="height: 38.25pt;" height="51"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 38.25pt; width: 126pt;" height="51">Redo</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Does 
       a Redo of the last undone refactoring. The refactoring undo/redo buffer 
@@ -476,7 +476,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Alt 
       + Shift + Y</td>
   </tr>
-  <tr style="height: 89.25pt;" height="119"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 89.25pt; width: 126pt;" height="119">Rename</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Starts 
       the Rename refactoring dialog: Renames the selected element and (if enabled) 
@@ -487,7 +487,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Alt 
       + Shift + R</td>
   </tr>
-  <tr style="height: 102pt;" height="136"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 102pt; width: 126pt;" height="136">Move</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Starts 
       the Move refactoring dialog: Moves the selected elements and (if enabled) 
@@ -499,7 +499,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Alt 
       + Shift + V</td>
   </tr>
-  <tr style="height: 51pt;" height="68"> 
+  <tr> 
     <td class="xl25" style="border-top: medium none; height: 51pt; width: 126pt;" height="68">Inline</td>
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 269pt;">Starts 
       the Inline refactoring dialog. Inlines local variables, methods or constants. 
@@ -508,7 +508,7 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl25" style="border-top: medium none; border-left: medium none; width: 110pt;">Alt 
       + Shift + I</td>
   </tr>
-  <tr style="height: 89.25pt;" height="119"> 
+  <tr> 
     <td class="xl27" style="border-top: medium none; height: 89.25pt; width: 126pt;" height="119">Extract 
       Method</td>
     <td class="xl24" style="border-top: medium none; border-left: medium none; width: 269pt;">Starts 
@@ -519,8 +519,8 @@ popular key bindings available in the Eclipse SDK.
     <td class="xl27" style="border-top: medium none; border-left: medium none; width: 110pt;">Alt 
       + Shift + M</td>
   </tr>
-  <tr class="xl30" style="height: 76.5pt;" height="102"> 
-    <td class="xl25" style="height: 76.5pt; width: 126pt;" height="102">Extract 
+  <tr class="xl30"> 
+    <td class="xl25" height="102">Extract 
       Local Variable</td>
     <td class="xl30" style="width: 269pt;">Starts the Extract Variable refactoring 
       dialog. Creates a new variable assigned to the expression currently selected 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-net-preferences.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-net-preferences.htm
index 0f58c8f..d214f4b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-net-preferences.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-net-preferences.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Network Connections</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -15,7 +15,7 @@
 <p class="Head">The following sections describe the preferences available on the
   
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.net.NetPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Network Connections</strong></a>
   
   preference page.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-autoupdate.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-autoupdate.htm
index c9a494b..51716df 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-autoupdate.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-autoupdate.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Automatic updates</title>
 
 </HEAD>
@@ -17,7 +17,7 @@ Automatic Updates</H1>
 <P CLASS="Intro"> The following preferences can be changed on the
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdatesPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Install/Update > Automatic Updates</strong></a>
 
   page:</p> 
@@ -75,7 +75,6 @@ Automatic Updates</H1>
 
 <P>Here is what the Automatic Updates preference page looks like:   
 </P>
-<P> </P>
 <img src="../images/ref-p2-autoupdate.png" alt="Automatic Update Preference Page" border="0">
 <P>  </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-installupdate.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-installupdate.htm
index 77b25df..b44799a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-installupdate.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-installupdate.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Install/Update</title>
 
 </HEAD>
@@ -17,7 +17,7 @@ Install/Update</H1>
 <P CLASS="Intro"> The following preferences can be changed on the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.internal.p2.ui.sdk.ProvisioningPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>Install/Update</strong></a>
   page:</p> 
 <TABLE BORDER="1" cellspacing="0">
@@ -58,7 +58,7 @@ Install/Update</H1>
 
 
 <p>Here is what the Install/Update preference page looks like:   </p>
-<P> </P><img src="../images/ref-p2-installupdate.png" alt="Install/Update Preference Page" border="0">
+<img src="../images/ref-p2-installupdate.png" alt="Install/Update Preference Page" border="0">
 
 <p><img border="0" src="../images/ngrelt.png" alt="Related tasks" >
 <br><a href="../tasks/tasks-120.htm">Updating the installation</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-siteprefs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-siteprefs.htm
index 5e9c28d..5434527 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-siteprefs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-p2-siteprefs.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Available Software Sites</title>
 
 </HEAD>
@@ -17,7 +17,7 @@ Available Software Sites</H1>
 <P CLASS="Intro"> The following preferences can be changed on the
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.internal.provisional.p2.ui.dialogs.RepositoryManipulationPage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Install/Update > Available Software Sites</strong></a>
 
   page:</p> 
@@ -62,7 +62,6 @@ software.</span></TH>
 
 <P>Here is what the Available Software Sites preference page looks like:   
 </P>
-<P> </P>
 <img src="../images/ref-p2-siteprefs.png" alt="Available Software Sites Preference Page" border="0">
 <P>  </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-regex-find-replace.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-regex-find-replace.htm
index af7ee22..bdb1982 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-regex-find-replace.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-regex-find-replace.htm
@@ -1,54 +1,175 @@
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html lang="en"><head>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Style-Type" content="text/css"><title>Supported Regular Expressions</title>
-   
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"></head><body bgcolor="#ffffff">
-
-<h1 class="Head">Supported Regular Expressions</h1>
-
-<p>
-When searching for text you can use the regular expressions as defined by the <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">Pattern class</a>.
-<br>Additionally, \R can be used to match any form of line delimiter (Unix, Windows, Mac OS 9).
-Note that \R does not work in character groups ([]).
-</p>
-
-<p>
-The replace string allows the following constructs:
-</p>
-  <table border="1" cellpadding="5" summary="supported constructs in the replace field">
-    <tbody>
-      <tr>
-        <td>$i</td>
-        <td>inserts
-          <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html#cg">capturing group</a>
-          i.
-        </td>
-      </tr>
-      <tr>
-        <td>\i</td>
-        <td>inserts
-          <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html#cg">capturing group</a>
-          i (same as $i).
-        </td>
-      </tr>
-      
-      <tr> <td>\<i>x</i></td> <td>quotes character <i>x</i> (unless \<i>x</i> has a special meaning)</td> </tr>
-      <tr> <td>\R</td> <td>inserts the default line delimiter of the document</td> </tr>
-      <tr> <td>\x<i>hh</i></td> <td>inserts the hexadecimal character <i>hh</i></td> </tr>
-      <tr> <td>\u<i>hhhh</i></td> <td>inserts the Unicode character <i>hhhh</i></td> </tr>
-      <tr> <td>\n</td> <td>inserts a newline character (usually, you should use \R instead)</td> </tr>
-      <tr> <td>\r</td> <td>inserts a carriage-return character (usually, you should use \R instead)</td> </tr>
-      <tr> <td>\t</td> <td>inserts a tab character</td> </tr>
-      <tr> <td>\f</td> <td>inserts a form-feed character</td> </tr>
-      <tr> <td>\a</td> <td>inserts an alert (beep) character</td> </tr>
-      <tr> <td>\e</td> <td>inserts an escape character</td> </tr>
-      <tr> <td>\c<i>C</i></td> <td>inserts a the control character for <i>C</i></td> </tr>
-      <tr> <td>\C</td> <td>retains the casing of the match (all lower case, all upper case, capitalized)</td> </tr>
-      
-    </tbody>
-  </table>
-
-</body></html>
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <title>
+      Supported Regular Expressions
+    </title>
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1 class="Head">
+      Supported Regular Expressions
+    </h1>
+    <p>
+      When searching for text you can use the regular expressions as defined by
+      the <a href=
+      "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">Pattern
+      class</a>.<br />
+      Additionally, \R can be used to match any form of line delimiter (Unix,
+      Windows, Mac OS 9). Note that \R does not work in character groups ([]).
+    </p>
+
+    <p>
+      The replace string allows the following constructs:
+    </p>
+    <table border="1" cellpadding="5" summary=
+    "supported constructs in the replace field">
+      <tbody>
+        <tr>
+          <td>
+            $i
+          </td>
+          <td>
+
+            inserts <a href=
+            "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html#cg">
+            capturing group</a> i.
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \i
+          </td>
+
+          <td>
+            inserts <a href=
+            "http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html#cg">
+            capturing group</a> i (same as $i).
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \<i>x</i>
+
+          </td>
+          <td>
+            quotes character <i>x</i> (unless \<i>x</i> has a special meaning)
+          </td>
+        </tr>
+        <tr>
+
+          <td>
+            \R
+          </td>
+          <td>
+            inserts the default line delimiter of the document
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \x<i>hh</i>
+
+          </td>
+          <td>
+            inserts the hexadecimal character <i>hh</i>
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \u<i>hhhh</i>
+
+          </td>
+          <td>
+            inserts the Unicode character <i>hhhh</i>
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \n
+          </td>
+
+          <td>
+            inserts a newline character (usually, you should use \R instead)
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \r
+          </td>
+          <td>
+            inserts a carriage-return character (usually, you should use \R
+            instead)
+          </td>
+
+        </tr>
+        <tr>
+          <td>
+            \t
+          </td>
+          <td>
+            inserts a tab character
+          </td>
+        </tr>
+        <tr>
+
+          <td>
+            \f
+          </td>
+          <td>
+            inserts a form-feed character
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \a
+          </td>
+
+          <td>
+            inserts an alert (beep) character
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \e
+          </td>
+          <td>
+            inserts an escape character
+          </td>
+
+        </tr>
+        <tr>
+          <td>
+            \c<i>C</i>
+          </td>
+          <td>
+            inserts a the control character for <i>C</i>
+
+          </td>
+        </tr>
+        <tr>
+          <td>
+            \C
+          </td>
+          <td>
+            retains the casing of the match (all lower case, all upper case,
+            capitalized)
+          </td>
+        </tr>
+
+      </tbody>
+    </table>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-search.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-search.htm
index e47d54b..6edf36a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-search.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-search.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en"><head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"><title>Search</title></head>
 <body>
 
@@ -13,7 +13,7 @@
 <p> The
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.search.preferences.SearchPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <strong>General > Search</strong></a>
 preference page allows you to set preferences for searches. 
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-options.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-options.htm
index 605cc13..1ce2a53 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-options.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-options.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Secure storage runtime options</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -25,7 +25,7 @@ to persist the secure storage data.</p>
 
 <p>The current location of the default secure storage can be found on the 
    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.security.ui.storage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Security > Secure Storage</strong></a> 
 preferences page.</p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-passwd.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-passwd.htm
index 2981ac3..f78e776 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-passwd.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-passwd.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Life of a master password</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -20,9 +20,9 @@ The master passwords are specific to providers: each provider has a separate mas
 Depending on the provider, it will either generate a master password behind the scenes, or will ask you 
 for some input. The same master password is then used for all subsequent use of this password provider.</p>
 
-<p align=center><img alt="Lifecycle of a master password." src="../images/equinox_secure_storage_pswd.png"><br>
+<p align="center"><img alt="Lifecycle of a master password." src="../images/equinox_secure_storage_pswd.png"><br>
 </p>
-<p align=center><b>Picture 1. Lifecycle of a master password.</b></p>
+<p align="center"><b>Picture 1. Lifecycle of a master password.</b></p>
 
 <p>Once the master password is obtained from the password provider, it is cached in memory until 
 the application is closed or the password cache is cleared using the <b>Secure Storage</b> preference page.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-prefs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-prefs.htm
index e7814a8..ba2651a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-prefs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-prefs.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Secure storage preference page</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-recovery.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-recovery.htm
index 944344d..3e277bc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-recovery.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-recovery.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Password recovery</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-start.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-start.htm
index b2fb52f..1e47f52 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-start.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-start.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>Secure storage</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -34,7 +34,7 @@ virtual machine running this application.</p>
 
 <p>The <b>Secure Storage</b> preference page can be found under
    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.security.ui.storage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Security > Secure Storage</strong></a>
 .</p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-works.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-works.htm
index b0fe3ee..2cacf59 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-works.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-securestorage-works.htm
@@ -1,13 +1,13 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>How secure storage works</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
@@ -16,9 +16,9 @@
 <p>Let's consider a concrete example of CVS integration. When you specify a password for a CVS connection, 
 the application offers you an option to save your user name and password using secure storage.</p>
 
-<p align=center><img alt="Schema of secure storage encrypting data" src="../images/equinox_secure_storage_start.png"><br>
+<p align="center"><img alt="Schema of secure storage encrypting data" src="../images/equinox_secure_storage_start.png"><br>
 </p>
-<p align=center><b>Picture 1. How secure storage works.</b></p>
+<p align="center"><b>Picture 1. How secure storage works.</b></p>
 
 <p>Your CVS password is passed as data to secure storage. Secure storage uses a "master" password 
 to encrypt it and store the encrypted CVS password in a file on disk.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-ssh2-preferences.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-ssh2-preferences.htm
index 482ad27..f2d369c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-ssh2-preferences.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-ssh2-preferences.htm
@@ -1,20 +1,20 @@
 
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <META http-equiv="Content-Style-Type" content="text/css"><LINK rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <TITLE>SSH2</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
 <H1 class="Head">SSH2</H1>
 <p class="Head">The preferences on the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jsch.ui.SSHPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Network Connections > SSH2</strong></a>
   preferences page are divided into 3 groups.</p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup-workspaces.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup-workspaces.htm
index e1166ac..f8b2e90 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup-workspaces.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup-workspaces.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) Eric Rizzo and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) Eric Rizzo and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Startup and Shutdown, Workspaces</title>
 
@@ -16,15 +16,13 @@
 <P CLASS="Para"> The
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Startup.Workspaces)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Startup and Shutdown > Workspaces</strong></a>
 
   preference page allows configuration of the workspace prompting during IDE startup.</P>
 
 
-<table BORDER CELLSPACING=0 >
-  <caption>
-  </caption>
+<table BORDER="1" CELLSPACING="0">
   <tr>
     <th> <div CLASS="Para">Option</div></th>
     <th> <div CLASS="Para">Description</div></th>
@@ -50,13 +48,5 @@
 
 <P>Here is what the workspaces preference page looks like:  </P>
 
-
-<P>
-</P>
-
-
-<P> 
-</P>
-
 </BODY>
 </HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup.htm
index 988aa36..e9b5064 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-startup.htm
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Startup and Shutdown</title>
 
@@ -16,7 +16,7 @@
 <P CLASS="Para"> The
 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Startup)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Startup and Shutdown</strong></a>
 
   preference page allows the selection
@@ -28,9 +28,7 @@ However some plug-ins may specify that they wish to be activated during startup.
 This preference page allows the selection of which of these plug-ins will
 actually be activated during startup.</P>
 
-<table BORDER CELLSPACING=0 >
-  <caption>
-  </caption>
+<table BORDER="1" CELLSPACING="0">
   <tr>
     <th> <div CLASS="Para">Option</div></th>
     <th> <div CLASS="Para">Description</div></th>
@@ -52,7 +50,7 @@ actually be activated during startup.</P>
     <td> <div CLASS="Para">Plug-ins activated on startup</div></td>
     <td> <div CLASS="Para">This option allows you to select which available plug-ins
         should be activated on startup.</div></td>
-    <td> <div CLASS="Para"></div></td>
+    <td> <div CLASS="Para"> </div></td>
   </tr>
 </table>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-templates-view.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-templates-view.htm
index d85b5ed..111a1fa 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-templates-view.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-templates-view.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <title>Templates view</title>
 <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" type="text/css">
@@ -17,12 +17,11 @@
 <p CLASS="Head">
 To add the Templates view to the current perspective, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.texteditor.TemplatesView)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Templates</b></a>.
 </p>
 
 
 <p><img border="0" src="../images/ngrelr.png" alt="Related reference"></p>
-<p><a href="views/ref-viewsandeditors.htm">Views and editors</a></p>
 </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-texteditorprefs.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-texteditorprefs.htm
index 1f9bb5e..49bf134 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-texteditorprefs.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-texteditorprefs.htm
@@ -1,143 +1,310 @@
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html lang="en"><head>
-
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Style-Type" content="text/css"><title>Text Editors preference page</title>
-   
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"></head><body bgcolor="#ffffff">
-
-<h1 class="Head">Text Editors preference page</h1>
-
-<p>The following preferences can be changed on the
-
-<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.GeneralTextEditor)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-<strong>General > Editors > Text Editors</strong></a>
-
-page.</p>
-
-<h2>Appearance options</h2>
-<table border="1" cellspacing="0" style="width: 100%;">
-  <caption>
-  </caption>
-  <thead>
-  </thead>
-  <tbody>
-  </tbody>
-  <tbody>
-    <tr> 
-      <th width="25%"> <div class="Para">Option</div></th>
-      <th> <div class="Para">Description</div></th>
-      <th> <div class="Para">Default</div></th>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Undo history size<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option allows you 
-          to set the size of the undo history for text editors. </div></td>
-      <td align="left" valign="top"> <div class="Para">200</div></td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Displayed tab width<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option allows you 
-          to set the displayed tab width for text editors. </div></td>
-      <td align="left" valign="top"> <div class="Para">4</div></td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Insert spaces for tabs<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option allows you to insert space characters in place of tab characters.</div></td>
-      <td align="left" valign="top"> <div class="Para">Off</div></td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Highlight current line<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option controls whether 
-          or the current line is highlighted or not.<br>
-        </div></td>
-      <td align="left" valign="top"> On<br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Show print margin<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option controls whether 
-          the print margin is visible or not.</div></td>
-      <td align="left" valign="top"> <div class="Para">Off</div></td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Print margin column<br>
-        </div></td>
-      <td align="left" valign="top"> <div class="Para">This option allows you
-          to set the print margin column position.</div></td>
-      <td align="left" valign="top"> <div class="Para">80</div></td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Show line numbers<br>
-        </div></td>
-      <td align="left" valign="top">This option controls whether or not line numbers 
-        are shown on the left side of the text editor.<br> </td>
-      <td align="left" valign="top"> Off<br> </td>
-    </tr>
-    <tr> 
-      <td align="left" valign="top"> <div class="Para">Show range indicator<br>
-        </div></td>
-      <td align="left" valign="top">This option controls whether or not range 
-        indicators are shown in the text editor.<br> </td>
-      <td align="left" valign="top"> On<br> </td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top; width: 25%;">Show whitespace characters<br> 
-      </td>
-      <td style="vertical-align: top;">This option controls whether to display whitespace characters in text editors.<br> </td>
-      <td style="vertical-align: top;">Off<br> </td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top; width: 25%;">Enable drag and drop of text<br> </td>
-      <td style="vertical-align: top;">This option controls whether text drag and drop is enabled.<br> </td>
-      <td style="vertical-align: top;">On<br></td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top; width: 25%;">Warn before editing a derived file<br> 
-      </td>
-      <td style="vertical-align: top;">This option controls whether to warn if a derived file is going to be edited.<br> </td>
-      <td style="vertical-align: top;">On<br> </td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top; width: 25%;">Smart caret positioning at line start and end<br> 
-      </td>
-      <td style="vertical-align: top;">This option controls whether the editor automatically positions the caret and the start or end of a line.<br> </td>
-      <td style="vertical-align: top;">On<br> </td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top; width: 25%;">Show affordance in hover on how to make it sticky<br> 
-      </td>
-      <td style="vertical-align: top;">This option controls whether to show an affordance in the hover on how to make it sticky.<br> </td>
-      <td style="vertical-align: top;">On<br> </td>
-    </tr>
-    <tr> 
-      <td style="vertical-align: top;" width="25%">Appearance color options<br> 
-      </td>
-      <td style="vertical-align: top;">This option controls various appearance 
-        colors.<br> </td>
-      <td style="vertical-align: top;"><br> </td>
-    </tr>
-  </tbody>
-</table>
-
-<p></p>
-<p>Here is how the Text Editors preference page looks like:
-</p><p><img src="../images/ref-texteditorpref.png" alt="Image of the Text Editors preference page"><br>
-
-
-</p><p><img border="0" src="../images/ngrelr.png" alt="Related reference" >
-<br><a href="../concepts/concepts-6.htm">Editor</a>
-<br>
-</p><p> <br>
-
-</p>
-
-
-</body></html>
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <title>
+      Text Editors preference page
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    table.c3 {width: 100%;}
+    td.c2 {vertical-align: top;}
+    td.c1 {vertical-align: top; width: 25%;}
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h1 class="Head">
+      Text Editors preference page
+    </h1>
+    <p>
+      The following preferences can be changed on the <a class="command-link"
+      href=
+      'javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.GeneralTextEditor)")'>
+
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt=
+      "command link" /> <strong>General > Editors > Text
+      Editors</strong></a> page.
+    </p>
+    <h2>
+      Appearance options
+    </h2>
+    <table border="1" cellspacing="0" class="c3">
+
+      <tbody>
+        <tr>
+          <th width="25%">
+            <div class="Para">
+              Option
+            </div>
+          </th>
+          <th>
+            <div class="Para">
+
+              Description
+            </div>
+          </th>
+          <th>
+            <div class="Para">
+              Default
+            </div>
+          </th>
+        </tr>
+        <tr>
+
+          <td align="left" valign="top">
+            <div class="Para">
+              Undo history size<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option allows you to set the size of the undo history for
+              text editors.
+            </div>
+
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              200
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+
+            <div class="Para">
+              Displayed tab width<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option allows you to set the displayed tab width for text
+              editors.
+            </div>
+          </td>
+
+          <td align="left" valign="top">
+            <div class="Para">
+              4
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+
+              Insert spaces for tabs<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option allows you to insert space characters in place of tab
+              characters.
+            </div>
+          </td>
+          <td align="left" valign="top">
+
+            <div class="Para">
+              Off
+            </div>
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Highlight current line<br />
+
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option controls whether or the current line is highlighted
+              or not.<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+
+            On<br />
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Show print margin<br />
+            </div>
+
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              This option controls whether the print margin is visible or not.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              Off
+            </div>
+
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Print margin column<br />
+            </div>
+          </td>
+
+          <td align="left" valign="top">
+            <div class="Para">
+              This option allows you to set the print margin column position.
+            </div>
+          </td>
+          <td align="left" valign="top">
+            <div class="Para">
+              80
+            </div>
+          </td>
+
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+            <div class="Para">
+              Show line numbers<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+
+            This option controls whether or not line numbers are shown on the
+            left side of the text editor.<br />
+          </td>
+          <td align="left" valign="top">
+            Off<br />
+          </td>
+        </tr>
+        <tr>
+          <td align="left" valign="top">
+
+            <div class="Para">
+              Show range indicator<br />
+            </div>
+          </td>
+          <td align="left" valign="top">
+            This option controls whether or not range indicators are shown in
+            the text editor.<br />
+          </td>
+          <td align="left" valign="top">
+
+            On<br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c1">
+            Show whitespace characters<br />
+          </td>
+          <td class="c2">
+
+            This option controls whether to display whitespace characters in
+            text editors.<br />
+          </td>
+          <td class="c2">
+            Off<br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c1">
+
+            Enable drag and drop of text<br />
+          </td>
+          <td class="c2">
+            This option controls whether text drag and drop is enabled.<br />
+          </td>
+          <td class="c2">
+            On<br />
+
+          </td>
+        </tr>
+        <tr>
+          <td class="c1">
+            Warn before editing a derived file<br />
+          </td>
+          <td class="c2">
+            This option controls whether to warn if a derived file is going to
+            be edited.<br />
+
+          </td>
+          <td class="c2">
+            On<br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c1">
+            Smart caret positioning at line start and end<br />
+
+          </td>
+          <td class="c2">
+            This option controls whether the editor automatically positions the
+            caret and the start or end of a line.<br />
+          </td>
+          <td class="c2">
+            On<br />
+          </td>
+        </tr>
+
+        <tr>
+          <td class="c1">
+            Show affordance in hover on how to make it sticky<br />
+          </td>
+          <td class="c2">
+            This option controls whether to show an affordance in the hover on
+            how to make it sticky.<br />
+          </td>
+          <td class="c2">
+
+            On<br />
+          </td>
+        </tr>
+        <tr>
+          <td class="c2" width="25%">
+            Appearance color options<br />
+          </td>
+          <td class="c2">
+
+            This option controls various appearance colors.<br />
+          </td>
+          <td class="c2">
+            <br />
+          </td>
+        </tr>
+      </tbody>
+    </table>
+
+    <p>
+      Here is how the Text Editors preference page looks like:
+    </p>
+    <p>
+      <img src="../images/ref-texteditorpref.png" alt=
+      "Image of the Text Editors preference page" /><br />
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelr.png" alt=
+      "Related reference" /><br />
+      <a href="../concepts/concepts-6.htm">Editor</a><br />
+
+    </p>
+    <p>
+       <br />
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-workspaceswitch.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-workspaceswitch.htm
index 5370074..62134d0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-workspaceswitch.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/ref-workspaceswitch.htm
@@ -1,31 +1,60 @@
-<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html lang="en"><head>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <title>
+      Switching workspaces
+    </title>
+    <script language="JavaScript" src=
+    "PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+  </head>
+  <body>
+    <h1>
+      Switching workspaces
+    </h1>
+    <p>
+      The current workspace for Eclipse can be switched by using the
+      <strong>File->Switch Workspace</strong> command. If you have already
+      switched your workspace previously the previous workspaces will be
+      available for selection in the Switch Workspace menu.
+    </p>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Style-Type" content="text/css"><title>Switching workspaces</title>
-   
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
-<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"></head>
+    <p>
+      The Switch Workspace --> Other.. menu item will open the switch
+      workspace dialog. The dialog will allow you to browse for or manually
+      enter a new workspace location. The combo will also allow you to select
+      your previously selected workspaces.
+    </p>
+    <p>
+      <img src="../images/switch_workspace.png" width="438" height="274" alt=
+      "Picture of the workspace switcher dialog" />
+    </p>
+    <h2>
+      Settings Transfers
+    </h2>
 
-<body>
-<h1>Switching workspaces</h1>
-<p>The current workspace for Eclipse can be switched by using the<strong> File->Switch 
-  Workspace </strong>command. If you have already switched your workspace previously 
-  the previous workspaces will be available for selection in the Switch Workspace 
-  menu.</p>
-<p>The Switch Workspace --> Other.. menu item will open the switch workspace 
-  dialog. The dialog will allow you to browse for or manually enter a new workspace 
-  location. The combo will also allow you to select your previously selected workspaces.</p>
-<p><img src="../images/switch_workspace.png" width="438" height="274"></p>
-<h2>Settings Transfers</h2>
-<p>When you switch your workspace you can select settings than will be transferred 
-  to the new workspace. These settings are supplied by the org.eclipse.ui.preferenceTransfer 
-  extension. </p>
-<p>The SDK supplies transfers for:</p>
-<ul>
-  <li>Workspace Layout: Opened views, thier size, and selected perspectives.</li>
-  <li>Working Sets: The user defined working sets.</li>
-</ul>
-</body>
+    <p>
+      When you switch your workspace you can select settings than will be
+      transferred to the new workspace. These settings are supplied by the
+      org.eclipse.ui.preferenceTransfer extension.
+    </p>
+    <p>
+      The SDK supplies transfers for:
+    </p>
+    <ul>
+      <li>Workspace Layout: Opened views, their size, and selected
+      perspectives.
+      </li>
+      <li>Working Sets: The user defined working sets.
+      </li>
+
+    </ul>
+  </body>
 </html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/reference/welcome_preferences.htm b/eclipse/plugins/org.eclipse.platform.doc.user/reference/welcome_preferences.htm
index 774788d..e948f4b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/reference/welcome_preferences.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/reference/welcome_preferences.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2006, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Customize Welcome Dialog</title>
 </head>
 <body>
@@ -39,6 +39,7 @@ Description</P>
 Default</P>
 </TH>
 </TR>
+</THEAD>
 
 <TR>
 <TH align="left">
@@ -141,10 +142,6 @@ icon and a drop down menu will appear. The possible settings are:
 <TH align="left">
 <span style="font-weight: 400">low</span></TH>
 </TR>
-
-</THEAD>
-<TBODY>
-</TBODY>
 </TABLE>
 
 <p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help.xhtml
index 0b0fc16..57fb3e6 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help.xhtml
@@ -1,12 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Accessing Help</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_accessibility.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_accessibility.htm
index 41b035f..c65ccc0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_accessibility.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_accessibility.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Help accessibility</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_context.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_context.htm
index ebe2164..90e3982 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_context.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_context.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Accessing context-sensitive help</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_navigate.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_navigate.htm
index 999f811..62c23b7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_navigate.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_navigate.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Navigating help topics</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_scope.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_scope.htm
index f013db9..4326249 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_scope.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_scope.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Using help scopes</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_search.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_search.htm
index 843f28e..6861314 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_search.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_search.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Searching help</title>
 </head>
 <body>
@@ -114,11 +114,11 @@ Follow the following search expression rules for searching local help content:
   <li>Use double quotation marks around terms you want treated as a phrase. For 
     example: 
     <pre>"creating projects"</pre>
-    <p>returns topics that contain the entire phrase <i>creating projects</i>, 
-      and not <i>creating</i> or <i>project</i> on its own.</p></li>
+    <p>returns topics that contain the entire phrase <i>creating projects</i>.
+       Topics where the words <i>creating</i> and <i>projects</i> are not consecutive are not returned.</p></li>
   <li>Punctuation acts as term delimiters. For example:
     <pre>plugin.xml</pre>
-    <p>returns hits on topics that contain <i>plugin.xml</i>, <i>plugin</i>, and 
+    <p>returns hits on topics that contain <i>plugin</i> and 
       <i>xml</i>, which is likely broader than you want. If you want to find just 
       those topics containing <i>plugin.xml</i>, use double quotes, as in:</p>
     <pre>"plugin.xml"</pre></li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_settings.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_settings.htm
index ec6d953..a3515b8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_settings.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/help_settings.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Help display settings</title>
 </head>
 <body>
@@ -26,7 +26,7 @@ to display help. If you prefer to always use a full external browser, you may
 select this behavior in the
 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.help.ui.browsersPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help preference page</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/running_eclipse.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/running_eclipse.htm
index cfbd8e3..6c65168 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/running_eclipse.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/running_eclipse.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -132,7 +132,7 @@ option from an account that has a write access to the install directory.</p>
 
 </blockquote>
 
-<TABLE width="95%" border=1 height="2005">
+<TABLE width="95%" border="1">
   <caption>
   <b> Eclipse Startup Parameters </b> 
   </caption>
@@ -143,7 +143,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%"><b>Since</b></TD>
     </tr>
     <tr> 
-      <TD vAlign=top width="31%"> <pre><b>-arch</b> <var>architecture</var></pre></TD>
+      <TD vAlign="top" width="31%"> <pre><b>-arch</b> <var>architecture</var></pre></TD>
       <TD width="65%">Defines the processor architecture on which the Eclipse 
         platform is running. The Eclipse platform ordinarily computes the optimal 
         setting using the prevailing value of Java <code>os.arch</code> property. 
@@ -154,7 +154,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">2.0</TD>
     </tr>
     <TR> 
-      <TD vAlign=top width="31%"> <PRE><b>-application</b> <var>applicationId</var></PRE></TD>
+      <TD vAlign="top" width="31%"> <PRE><b>-application</b> <var>applicationId</var></PRE></TD>
       <TD width="65%">The application to run. Applications are declared by plug-ins 
         supplying extensions to the org.eclipse.core.runtime.applications extension 
         point. This argument is typically not needed. If specified, the value 
@@ -163,14 +163,14 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">1.0</TD>
     </TR>
     <tr> 
-      <TD vAlign=top width="31%"> <pre><b>-clean</b></pre></TD>
+      <TD vAlign="top" width="31%"> <pre><b>-clean</b></pre></TD>
       <TD width="65%">Cleans cached data used by the OSGi framework and Eclipse runtime. 
       Try to run Eclipse once with this option if you observe startup errors after install, 
       update, or using a shared configuration. </TD>
       <TD width="4%">3.0</TD>
     </tr>
     <tr> 
-      <TD vAlign=top width="31%"> <pre><b>-configuration</b> <var>configURL</var></pre></TD>
+      <TD vAlign="top" width="31%"> <pre><b>-configuration</b> <var>configURL</var></pre></TD>
       <TD width="65%">The location for the Eclipse Platform configuration file, 
         expressed as a URL. The configuration file determines the location of 
         the Eclipse platform, the set of available plug-ins, and the primary feature. 
@@ -179,13 +179,13 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">2.0</TD>
     </tr>
     <TR> 
-      <TD vAlign=top width="31%"><PRE><b>-consolelog</b></PRE></TD>
+      <TD vAlign="top" width="31%"><PRE><b>-consolelog</b></PRE></TD>
       <TD width="65%">Mirrors the Eclipse platform's error log to the console 
         used to run Eclipse. Handy when combined with <code>-debug</code>.</TD>
       <TD width="4%">1.0</TD>
     </TR>
     <tr> 
-      <TD vAlign=top width="31%"> <PRE><b>-data</b> <var>workspacePath</var></PRE></TD>
+      <TD vAlign="top" width="31%"> <PRE><b>-data</b> <var>workspacePath</var></PRE></TD>
       <TD width="65%">The path of the workspace on which to run the Eclipse platform. 
         The workspace location is also the default location for projects. Relative 
         paths are interpreted relative to the directory that Eclipse was started 
@@ -193,7 +193,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">1.0</TD>
     </tr>
     <TR> 
-      <TD vAlign=top width="31%"> <PRE><b>-debug</b> [<var>optionsFile</var>]</PRE></TD>
+      <TD vAlign="top" width="31%"> <PRE><b>-debug</b> [<var>optionsFile</var>]</PRE></TD>
       <TD width="65%"> Puts the platform in debug mode and loads the debug options 
         from the file at the given location, if specified. This file indicates 
         which debug points are available for a plug-in and whether or not they 
@@ -203,7 +203,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">1.0</TD>
     </TR>
     <tr> 
-      <TD width="31%" height="133" vAlign=top> <PRE><b>-dev</b> [<var>classpathEntries</var>]</PRE></TD>
+      <TD width="31%" height="133" vAlign="top"> <PRE><b>-dev</b> [<var>classpathEntries</var>]</PRE></TD>
       <TD width="65%">Puts the platform in development mode. The optional classpath 
         entries (a comma separated list) are added to the runtime classpath of 
         each plug-in. For example, when the workspace contains plug-ins being 
@@ -214,7 +214,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">1.0</TD>
     </tr>
     <TR> 
-      <TD vAlign=top width="31%"> <pre><b>-initialize</b></pre></TD>
+      <TD vAlign="top" width="31%"> <pre><b>-initialize</b></pre></TD>
       <TD width="65%"> Initializes the configuration being run. All runtime related data 
       structures and caches are refreshed. Handy with shared installs: running Eclipse once 
       with this option from an account with write privileges will improve startup 
@@ -222,7 +222,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">3.0</TD>
     </TR>
     <TR> 
-      <TD vAlign=top width="31%"> <pre><b>-keyring</b> <var>keyringFilePath</var></pre></TD>
+      <TD vAlign="top" width="31%"> <pre><b>-keyring</b> <var>keyringFilePath</var></pre></TD>
       <TD width="65%"> The location of the authorization database (or "key 
         ring" file) on disk. This argument must be used in conjunction with 
         the <code>-password</code> option. Relative paths are interpreted relative 
@@ -230,7 +230,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">1.0</TD>
     </TR>
     <tr> 
-      <TD vAlign=top width="31%"> <pre><b>-nl</b> <var>locale</var></pre></TD>
+      <TD vAlign="top" width="31%"> <pre><b>-nl</b> <var>locale</var></pre></TD>
       <TD width="65%">Defines the name of the locale on which the Eclipse platform 
         is running. The Eclipse platform ordinarily computes the optimal setting 
         automatically. If specified here, this is the value that the Eclipse platform 
@@ -239,12 +239,12 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">2.0</TD>
     </tr>
     <tr> 
-      <TD vAlign=top width="31%"> <PRE><b>-nosplash</b></PRE></TD>
+      <TD vAlign="top" width="31%"> <PRE><b>-nosplash</b></PRE></TD>
       <TD width="65%">Runs the platform without putting up the splash screen.</TD>
       <TD width="4%">1.0</TD>
     </tr>
     <tr> 
-      <TD vAlign=top width="31%"> <PRE><b>-os</b> <var>operatingSystem</var></PRE></TD>
+      <TD vAlign="top" width="31%"> <PRE><b>-os</b> <var>operatingSystem</var></PRE></TD>
       <TD width="65%">Defines the operating system on which the Eclipse platform 
         is running. The Eclipse platform ordinarily computes the optimal setting 
         using the prevailing value of Java <code>os.name</code> property. If specified 
@@ -256,20 +256,20 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">1.0</TD>
     </tr>
     <TR> 
-      <TD vAlign=top width="31%"> <pre><b>-password</b> <var>password</var></pre></TD>
+      <TD vAlign="top" width="31%"> <pre><b>-password</b> <var>password</var></pre></TD>
       <TD width="65%">The password for the authorization database. Used in conjunction 
         with the <code>-keyring</code> option.</TD>
       <TD width="4%">1.0</TD>
     </TR>
     <tr> 
-      <TD vAlign=top width="31%"> <PRE><b>-perspective</b> <var>perspectiveId</var></PRE></TD>
+      <TD vAlign="top" width="31%"> <PRE><b>-perspective</b> <var>perspectiveId</var></PRE></TD>
       <TD width="65%">The perspective to open in the active workbench window on 
         startup. If this parameter is not specified, the perspective that was 
         active on shutdown will be opened.</TD>
       <TD width="4%">1.0</TD>
     </tr>
     <tr> 
-      <TD vAlign=top width="31%"> <pre><b>-plugincustomization</b>
+      <TD vAlign="top" width="31%"> <pre><b>-plugincustomization</b>
 	  <var>propertiesFile</var></pre></TD>
       <TD width="65%">The location of a properties file containing default settings 
         for plug-in preferences. These default settings override default settings 
@@ -278,7 +278,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">2.0</TD>
     </tr>
     <tr> 
-      <TD vAlign=top> <pre><b>-product</b> <em>productId</em><br></pre></TD>
+      <TD vAlign="top"> <pre><b>-product</b> <em>productId</em><br></pre></TD>
       <TD height="16">The ID of the product to run. The product gives the launched 
         instance of Eclipse its personality, and determines the product customization 
         information used. This replaces -feature, which is still supported for 
@@ -286,21 +286,21 @@ option from an account that has a write access to the install directory.</p>
       <TD height="16">3.0</TD>
     </tr>
     <TR> 
-      <TD vAlign=top width="31%" height="16"><pre><b>-refresh</b> </pre></TD>
+      <TD vAlign="top" width="31%" height="16"><pre><b>-refresh</b> </pre></TD>
       <TD width="65%" height="16">Option for performing a global refresh of the 
         workspace on startup. This will reconcile any changes that were made in 
         the file system since the platform was last run. </TD>
       <TD width="4%" height="16">1.0</TD>
     </TR>
     <TR> 
-      <TD vAlign=top width="31%" height="16"><pre><b>-showlocation</b> [<var>workspaceName</var>]</pre></TD>
+      <TD vAlign="top" width="31%" height="16"><pre><b>-showlocation</b> [<var>workspaceName</var>]</pre></TD>
       <TD width="65%" height="16">Option for displaying the location of the workspace 
         in the window title bar. In release 2.0 this option only worked in conjunction 
         with the -data command line argument. In 3.2, an optional workspace name argument was added that  displays the  provided name  in the window title bar instead of the location of the workspace. </TD>
       <TD width="4%" height="16">2.0</TD>
     </TR>
     <tr> 
-      <TD vAlign=top width="31%"> <PRE><b>-vm</b> <var>vmPath</var></PRE></TD>
+      <TD vAlign="top" width="31%"> <PRE><b>-vm</b> <var>vmPath</var></PRE></TD>
       <TD width="65%">The location of Java Runtime Environment (JRE) to use to 
         run the Eclipse platform. If not specified, the launcher will attempt to find
         a JRE.  It will first look for a directory called <code>jre</code> as a sibling
@@ -309,7 +309,7 @@ option from an account that has a write access to the install directory.</p>
       <TD width="4%">1.0</TD>
     </tr>
     <tr> 
-      <TD vAlign=top> <PRE><b>-vm</b><strong>args</strong> <em>args</em></PRE></TD>
+      <TD vAlign="top"> <PRE><b>-vm</b><strong>args</strong> <em>args</em></PRE></TD>
       <TD>When passed to the Eclipse, this option is used to customize the operation 
         of the Java VM used to run Eclipse. If specified, this option must come 
         at the end of the command line. The given arguments are dependent on VM 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/task-team-cmdlineclient.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/task-team-cmdlineclient.htm
index 4ec3202..8524459 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/task-team-cmdlineclient.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/task-team-cmdlineclient.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Running the CVS command-line client outside of Eclipse</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -63,7 +63,7 @@
     location.</li>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.ExtMethodPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > CVS > Ext Connection Method</strong></a> preference page.</li>
   <li>Enable<strong> Use another connection method type to connect</strong> and 
     choose <em>extssh</em>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1.htm
index 4da8cc0..ff81453 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Customizing the Workbench</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d.htm
index 32b1bc7..239735f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Version control life cycle: adding and ignoring resources</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -64,7 +64,7 @@
     ignore for <samp>/bin</samp>, and any resource that matches "bin" 
     in any directory in the workspace will be ignored for version control. Use the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.IgnorePreferences)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Team > Ignored Resources</b></a>
     preference page to globally exclude resources from version control.</li>
   <li>Any resource marked as <i>derived</i> will be automatically ignored for 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1.htm
index e0009e0..eaa9e23 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating a global ignore pattern</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -23,7 +23,7 @@
 <ol>
   <li>Open the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.IgnorePreferences)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Team > Ignored Resources</b></a> preference page.
     This displays a list of resource 
     name patterns against which resources will be screened, before they are considered 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1b.htm
index c05cec0..48e2a76 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-100d1b.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Overriding or removing resource ignore patterns</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -23,7 +23,7 @@
 <ol>
   <li>Open the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.IgnorePreferences)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Team > Ignored Resources</b></a> preference page.</li>
   <li>To temporarily override one or more of the file-matching patterns, clear 
     their checkboxes.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105.htm
index eecce14..b3b5feb 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Changing CVS team settings</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,13 +20,13 @@
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.TeamPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Team</b></a> preference page. You will see a number of general Team options. These options can 
     be used by any Eclipse integrated repository. In our case, they are all applicable 
     to CVS.</li>
   <li>You will also see a
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.CVSPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Team > CVS</b></a> preference page containing
   various CVS options.</li>
   <li>Underneath the <strong>Team > CVS</strong> preference page are several sub-pages. 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105b.htm
index a476eec..b63ba1e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-105b.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Reverting a branch to a previous version</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -31,9 +31,9 @@ It is often useful to revert the contents of a branch to those of a specific ver
     as the remote revision. </li>
   <li>You can verify this by performing another comparison against the version. 
     (<strong>Note</strong>: That the CVS preference to <strong>Consider file contents 
-    in comparisons</strong> in the
+    in remote comparisons</strong> in the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.ComparePreferences)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Team > CVS > Synchronize/Compare</b></a>
     preference page should be enabled for this to work.) </li>
   <li>The comparison should report that there are no changes.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-107b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-107b.htm
index cda4ad5..c20e3b6 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-107b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-107b.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Enabling the CVS resource decorations</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -25,7 +25,7 @@ label decorations that indicate the CVS state of the resource.
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Appearance > Label Decorations</b></a>
   preference page. This page allows the enabling and disabling of all decorations 
   defined by different plug-ins in the Workbench.</li>
@@ -43,7 +43,7 @@ label decorations that indicate the CVS state of the resource.
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.CVSDecoratorPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Team > CVS > Label Decorations</b></a>
   preference page. This page allows the configuration of how decorations appear on CVS 
   projects, folders and files.</li>
@@ -83,19 +83,19 @@ label decorations that indicate the CVS state of the resource.
 <ol>
   <li>Open the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.CVSDecoratorPreferences)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Team > CVS > Label Decorations</b></a>
     preference page.</li>
   <li>Check the box to <em>Enable font and color decorations</em>.</li>
   <li>Next, Open the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>General > Appearance > Colors and Fonts</b></a> preference page.</li>
   <li>In the <strong>CVS</strong> category are the various CVS states for which 
     you can set the colors and fonts. Set them as desired.</li>
   <li>You can return to the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.CVSDecoratorPreferences)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Team > CVS > Label Decorations</b></a>
     preference page to preview the changes.</li>
   <li>Click <b>OK</b> or <b>Apply</b> for the new decorations to take effect.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-110.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-110.htm
index ba190ae..a61e1d3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-110.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-110.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Discovering branch and version tags</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -23,10 +23,10 @@
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, select a repository location.</li>
   <li>From the pop-up menu for the CVS Repositories view, select <b>Refresh Branches</b>. 
@@ -52,10 +52,10 @@
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, expand the repository location.</li>
   <li>Expand <strong>HEAD</strong> and select the root folder whose tags are to 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-113.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-113.htm
index 136eda7..ea43be2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-113.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-113.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -42,7 +42,7 @@
   will be updated with incoming changes of all of the above three types. You can specify what
   the update behaviour should be in the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.UpdateMergePreferences)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Team > CVS > Update/Merge</b></a>
   preference page. The choices are:</p>
   <ul>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-115.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-115.htm
index c12ca9f..c0a6dce 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-115.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-115.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Synchronizing with the repository</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -53,7 +53,7 @@ view and benefiting following advantages:
   other perspectives. You can enable the action to appear in your current perspective 
   by selecting
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Window > Customize Perspective</strong></a>. Then click 
   on the <strong>Commands</strong> tab and check off <strong>Team</strong>.</p>
 <p><em>Tip</em>: You can use method 3 below to avoid loosing the created synchronization.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-118.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-118.htm
index 655342b..a291533 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-118.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-118.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Versioning projects in the repository</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,10 +22,10 @@
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, expand a repository location and find the 
     project you wish to version.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-119.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-119.htm
index 99d0d30..267f365 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-119.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-119.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -24,7 +24,7 @@
 
 <ol>
   <li>Select the file in one of the navigation views. From the context menu, choose <b>Team 
-    > Show in History</b>.</li>
+    > Show History</b>.</li>
   <li>The History view will open and show a history for the selected CVS
     file.</li>
 </ol>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-120.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-120.htm
index 4c20585..015f8d0 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-120.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-120.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Updating the installation</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@
 <ol>
   <li>Click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.equinox.p2.ui.sdk.update")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Check for Updates</b></a>. 
   </li>
   <li>This will contact 
@@ -37,7 +37,7 @@ updates.
 <ol>
 <li>Click <b>Help > About</b> and then click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> to open a dialog showing pages that provide more detail about your installation. </li>
 <li> Click the <b>Installed Software</b> tab to see a list of the software items that you have installed into your system.</li>
 <li>Select the items that you wish to update. </li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-122.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-122.htm
index 1878b9f..b92c76e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-122.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-122.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Scheduling automatic updates</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -50,10 +50,10 @@ You may click on the popup to review the list of updates. The
 same <a href="tasks-125.htm">Available Updates wizard</a>
  is used when you search for updates manually using
 <a class="command-link" href='javascript:executeCommand("org.eclipse.equinox.p2.ui.sdk.update")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Check for Updates</b></a>.</p>
   <p>If you do not wish to update your system right away, you may dismiss the notification
-  popup by clicking on the <font color="#0000FF">[X]</font> in the corner of the popup.  When you are ready to review
+  popup by clicking on the <strong>[X]</strong> in the corner of the popup.  When you are ready to review
   the updates, you may then click on the update icon in the status bar.
   </p>
 <h4>Download new updates</h4>
@@ -66,10 +66,10 @@ You may click on the popup to review the list of updates. The
 same <a href="tasks-125.htm">Available Updates wizard</a>
  is used when you search for updates manually using
 <a class="command-link" href='javascript:executeCommand("org.eclipse.equinox.p2.ui.sdk.update")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Check for Updates</b></a>.</p>
   <p>If you do not wish to update your system right away, you may dismiss the notification
-  popup by clicking on the <font color="#0000FF">[X]</font> in the corner of the popup.  When you are ready to review
+  popup by clicking on the <strong>[X]</strong> in the corner of the popup.  When you are ready to review
   the updates, you may then click on the update icon in the status bar.  The software that was downloaded
   will be used the next time you update the system.
   </p>
@@ -84,7 +84,7 @@ You can choose between:</p>
 <p>In either case, a popup will appear when updates are available.  Clicking
 the popup will open the <a href="tasks-125.htm">Available Updates wizard</a>
 so that you can review the updates.  If you do not wish to update your system right away, 
-you may dismiss the notification popup by clicking on the <font color="#0000FF">[X]</font> in the corner of the popup.  
+you may dismiss the notification popup by clicking on the <strong>[X]</strong> in the corner of the popup.  
 If you have selected a time interval for reminders, the popup will appear when the
 specified interval has passed.
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-123.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-123.htm
index 78e938c..9af823a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-123.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-123.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Reverting to a previous install configuration</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,7 +22,7 @@
 <ol>
 <li>Click <b>Help > About</b> and then click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> to open a dialog showing pages that provide more detail about your installation. </li>
   <li> Click the <b>Installation History</b> tab to see a list of previously saved configurations.  Selecting each configuration
   will show you what was installed in that configuration.  When you have found the configuration
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-124.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-124.htm
index 4972b53..71eb37b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-124.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-124.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Installing software using the Install wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -19,7 +19,7 @@ installation.  To install new software:
 <ol>
   <li>Click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.equinox.p2.ui.sdk.install")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Install New Software...</b></a>.  This wizard shows you the items that are
     available for installation.</li>
   <li>You may type the location of a software site or select an existing software site
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-125.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-125.htm
index 779edb5..5ba8bbf 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-125.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-125.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Updating software using the Available Updates wizard</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -16,7 +16,7 @@
 <p>The <b>Available Updates</b> wizard shows you what updates are available for your software.
 This wizard is shown if you click the automatic updates notification popup, or if you
 check for updates using the <a class="command-link" href='javascript:executeCommand("org.eclipse.equinox.p2.ui.sdk.update")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Check for Updates</b></a> command.  To update your system:
 </p>
 <ol>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm
index ea98016..adb9598 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-126.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <META name="keywords" content="uninstall,uninstalling,uninstalling features, uninstall features">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Uninstalling software (formerly uninstalling features)</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@ configuration.  This wizard is shown when you select items and press <b>Uninstal
 <ol>
   <li>Click <b>Help > About</b> and then click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> to open a dialog showing pages that provide more detail about your installation. </li>
   <li> Click the <b>Installed Software</b> tab to see a list of the software items that you have installed into your system.</li>
   <li>Select the items that you wish to uninstall. </li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-127.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-127.htm
index 2639aec..23aa491 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-127.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-127.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Adding a new software site</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@ one of the following procedures:
 </p>
 <ul>
 <li>Add a new site using the  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.internal.provisional.p2.ui.dialogs.RepositoryManipulationPage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Install/Update > Available Software Sites</strong></a> preference page.
 <ol>
   <li>Click the <b>Add...</b> button.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-128.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-128.htm
index 4cea01c..2596462 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-128.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-128.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Working with the Available Software sites</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -18,7 +18,7 @@ sites that are consulted when browsing for available software or updating the
 system.  To manage the list of sites used by the system:</p>
 <ol>
   <li>Open the  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.internal.provisional.p2.ui.dialogs.RepositoryManipulationPage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Install/Update > Available Software Sites</strong></a> preference page to see 
   the list of sites that
   are used to gather the available software and search for updates.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-130.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-130.htm
index 37d9212..da79acc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-130.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-130.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -15,11 +15,11 @@
 
 <p>The
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.aboutAction")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > About Eclipse SDK</b></a>
   dialog summarizes information about the installation.  To get detailed
   information about the installation, click the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> button.  This will open a dialog showing pages that provide more detail about different aspects of
   your installation.
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-131.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-131.htm
index dbe1b9e..6903002 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-131.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-131.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -21,7 +21,7 @@ having to know what feature contained the plug-in.  To browse the plug-in detail
 <ol>
 <li>Click <b>Help > About</b> and then click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> to open a dialog showing pages that provide more detail about your installation. </li>
   <li> Click the <b>Plug-ins</b> tab to see a list of the plug-ins that are installed in your
   configuration.  The list includes each plug-in's name, provider, id, and version.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-132.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-132.htm
index 85e958f..15c4ed7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-132.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-132.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -22,7 +22,7 @@ what installed software item required that feature.  To browse the feature detai
 <ol>
 <li>Click <b>Help > About</b> and then click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> to open a dialog showing pages that provide more detail about your installation. </li>
   <li> Click the <b>Features</b> tab to see a list of the features that are installed in your
   configuration.  The list includes each feature's name, provider, id, and version.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-133.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-133.htm
index da18b11..86cf8ee 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-133.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-133.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -21,7 +21,7 @@ configuration details:
 <ol>
 <li>Click <b>Help > About</b> and then click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> to open a dialog showing pages that provide more detail about your installation. </li>
   <li> Click the <b>Configuration</b> tab to view a report containing various pieces of information about your 
       installation, including plug-in versions, preference settings, and the contents 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-134.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-134.htm
index 7e46876..d555d5e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-134.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-134.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2009, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -15,7 +15,7 @@
 
 <p>The
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.aboutAction")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > About Eclipse SDK</b></a>
   dialog summarizes information about your installation.  This is useful when reporting bugs or problems with your setup.
   The detailed id of the build is shown, along with copyright information.
@@ -29,7 +29,7 @@
  </p>
  <p>To get detailed
   information about the installation, click the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.installationDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Installation Details...</b></a> button.  This will open a dialog showing pages that provide more detail about different aspects of
   your installation.
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-14.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-14.htm
index d227fd8..976bdc1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-14.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-14.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Changing build order</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -30,7 +30,7 @@ the order of it.
 <ol>
   <li>Open the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.BuildOrder)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>General > Workspace > Build Order</b></a>
   preference page.</li>
   <li>Ensure that the <b>Use default build order</b> checkbox is cleared. If 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-16.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-16.htm
index 80388de..b320987 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-16.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-16.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Performing builds automatically</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@ resources are saved:
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Workspace</b></a>
   preference page.</li>
   <li>Select the <b>Build automatically</b> checkbox.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-17.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-17.htm
index 2709aa5..245f37a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-17.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-17.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Saving resources automatically before a manual build</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@ build is done:
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Workspace</b></a>
   preference page.</li>
   <li>Select the <b>Save automatically before build</b> checkbox.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1b.htm
index be2a42e..1948730 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1b.htm
@@ -1,48 +1,64 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Working with views and editors
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+  </head>
+  <body>
+    <h1>
+      Working with views and editors
+    </h1>
+    <p>
+      Views and editors are the main visual entities which appear in the
+      Workbench. In any given perspective there is a single editor area, which
+      can contain multiple editors, and a number of surrounding views which
+      provide context.
+    </p>
+    <p>
+      The Workbench provides a number of operations for working with views and
+      editors. See the Related tasks links for more details.
+    </p>
 
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Working with views and editors</title>
-</HEAD>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt=
+      "Related concepts" /><br />
+      <a href="../concepts/concepts-5.htm">Views</a><br />
+      <a href="../concepts/concepts-6.htm">Editors</a><br />
+      <a href="../concepts/concepts-21.htm">Fast views</a><br />
+      <a href="../concepts/concepts-21a.htm">Detached views</a><br />
+      <a href="../concepts/concepts-4.htm">Perspectives</a>
 
-<BODY BGCOLOR="#ffffff">
-<H1>Working with views and editors</H1>
-<p>Views and editors are the main visual entities which appear in the Workbench. 
-  In any given perspective there is a single editor area, which can contain multiple 
-  editors, and a number of surrounding views which provide context.
-</p>
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="tasks-3.htm">Opening views</a><br />
+      <a href="tasks-3e.htm">Moving and docking views</a><br />
+      <a href="tasks-3h.htm">Rearranging tabbed views</a><br />
+      <a href="tasks-9b.htm">Creating fast views</a><br />
 
-<p>The Workbench provides a number of operations for working with views and editors.
-See the Related tasks links for more details.
-</p>
+      <a href="tasks-9l.htm">Detaching views</a><br />
+      <a href="tasks-46.htm">Opening files for editing</a><br />
+      <a href="tasks-51.xhtml">Associating editors with file types</a><br />
+      <a href="tasks-52.htm">Editing files outside the Workbench</a><br />
+      <a href="tasks-3g.htm">Tiling editors</a><br />
+      <a href="../gettingStarted/qs-39g.htm">Maximizing a view or editor</a>
 
-<p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
-<a href="../concepts/concepts-5.htm">Views</a><br>
-<a href="../concepts/concepts-6.htm">Editors</a><br>
-<a href="../concepts/concepts-21.htm">Fast views</a><br>
-<a href="../concepts/concepts-21a.htm">Detached views</a><br>
-<a href="../concepts/concepts-4.htm">Perspectives</a>
-</p>
-
-<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
-<a href="tasks-3.htm">Opening views</a><br>
-<a href="tasks-3e.htm">Moving and docking views</a><br>
-<a href="tasks-3h.htm">Rearranging tabbed views</a><br>
-<a href="tasks-9b.htm">Creating fast views</a><br>
-<a href="tasks-9l.htm">Detaching views</a><br>
-<a href="tasks-46.htm">Opening files for editing</a><br>
-<a href="tasks-51.xhtml">Associating editors with file types</a><br>
-<a href="tasks-52.htm">Editing files outside the Workbench</a><br>
-<a href="tasks-3g.htm">Tiling editors</a><br>
-<a href="../gettingStarted/qs-39g.htm">Maximizing a view or editor</a>
-</p>
-
-
-
-</BODY>
-</HTML>
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1c.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1c.htm
index 1ead4a7..a9a7675 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1c.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1c.htm
@@ -1,36 +1,52 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Navigating and finding resources
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
+
+  </head>
+  <body>
+    <h1>
+      Navigating and finding resources
+    </h1>
+    <p>
+      The Workbench provides a number of mechanisms for navigating and finding
+      resources. See the Related tasks links for more details.
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt=
+      "Related concepts" /><br />
+
+      <a href="../concepts/concepts-12.htm">Resources</a><br />
+      <a href="../concepts/cnav.htm">Project Explorer view</a><br />
+      <a href="../concepts/csearchview.htm">Search view</a>
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="tasks-46ag.htm">Finding a resource quickly</a><br />
+
+      <a href="tasks-84b.htm">Searching for files</a><br />
+      <a href="tasks-84.htm">Searching for text within a file</a><br />
+      <a href="tasks-48b.htm">Showing or hiding files in the Project Explorer
+      view</a><br />
+      <a href="tasks-18.htm">Linking the Project Explorer view to the active
+      editor</a>
+    </p>
+  </body>
+</html>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Navigating and finding resources</title>
-</HEAD>
-
-<BODY BGCOLOR="#ffffff">
-<H1>Navigating and finding resources</H1>
-
-<p>The Workbench provides a number of mechanisms for navigating and finding resources.
-See the Related tasks links for more details.
-</p>
-
-<p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
-<a href="../concepts/concepts-12.htm">Resources</a><br>
-<a href="../concepts/cnav.htm">Project Explorer view</a><br>
-<a href="../concepts/csearchview.htm">Search view</a>
-</p>
-
-<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
-<a href="tasks-46ag.htm">Finding a resource quickly</a><br>
-<a href="tasks-84b.htm">Searching for files</a><br>
-<a href="tasks-84.htm">Searching for text within a file</a><br>
-<a href="tasks-48b.htm">Showing or hiding files in the Project Explorer view</a><br>
-  <a href="tasks-18.htm">Linking the Project Explorer view to the active editor</a> </p>
-
-
-
-</BODY>
-</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1e.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1e.htm
index 84fc2eb..d44e627 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1e.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1e.htm
@@ -1,51 +1,69 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Working with projects, folders and resources
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+  </head>
+  <body>
+    <h1>
+      Working with projects, folders and files
+    </h1>
+    <p>
+      There are three different types of resources in the workbench: projects,
+      folders, and files. Projects are the largest structural unit used by the
+      Workbench. Projects contain folders and files, and they can be opened,
+      closed, or built. Folders can contain other folders and files. The
+      Workbench provides a number of mechanisms for working with projects,
+      folders and files. See the related tasks section for more details.
+    </p>
+    <p>
+      Folders and files can be linked to locations in the file system outside
+      of the project's location. These special folders and files are called
+      <a href="../concepts/concepts-13.htm">linked resources</a>.
+    </p>
 
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Working with projects, folders and resources</title>
-</HEAD>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt=
+      "Related concepts" /><br />
+      <a href="../concepts/concepts-2.htm">Workbench</a><br />
+      <a href="../concepts/concepts-12.htm">Resources</a><br />
+      <a href="../concepts/concepts-17.htm">Resource hierarchies</a><br />
+      <a href="../concepts/concepts-13.htm">Linked resources</a><br />
+      <a href="../concepts/resourcefilters.htm">Resource filters</a>
 
-<BODY BGCOLOR="#ffffff">
-<H1>Working with projects, folders and files</H1>
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="tasks-42.htm">Creating a project</a><br />
+      <a href="tasks-47.htm">Closing projects</a><br />
+      <a href="tasks-42b.htm">Deleting projects</a><br />
+      <a href="tasks-43.htm">Creating a folder</a><br />
 
-<p>There are three different types of resources in the workbench: projects, folders,
-and files.  Projects are the largest structural unit used by the Workbench. Projects contain
-folders and files, and they can be opened, closed, or built. Folders can contain other folders 
-and files. The Workbench provides a number of mechanisms for working with projects, folders 
-and files.  See the related tasks section for more details.
-</p>
-<p>
-Folders and files can be linked to locations in the file system
-outside of the project's location.  These special folders and files are called 
-<a href="../concepts/concepts-13.htm">linked resources</a>.
-</p>
-<p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
-<a href="../concepts/concepts-2.htm">Workbench</a><br>
-<a href="../concepts/concepts-12.htm">Resources</a><br>
-<a href="../concepts/concepts-17.htm">Resource hierarchies</a><br>
-<a href="../concepts/concepts-13.htm">Linked resources</a><br>
-<a href="../concepts/resourcefilters.htm">Resource filters</a>
-</p>
+      <a href="tasks-44.htm">Creating a file</a><br />
+      <a href="tasks-45.htm">Creating linked resources</a><br />
+      <a href="tasks-63.htm">Moving resources</a><br />
+      <a href="tasks-63cg.htm">Copying resources</a><br />
+      <a href="tasks-66.htm">Renaming resources</a><br />
+      <a href="tasks-67.htm">Deleting resources</a><br />
 
-<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
-<a href="tasks-42.htm">Creating a project</a><br>
-<a href="tasks-47.htm">Closing projects</a><br>
-<a href="tasks-42b.htm">Deleting projects</a><br>
-<a href="tasks-43.htm">Creating a folder</a><br>
-<a href="tasks-44.htm">Creating a file</a><br>
-<a href="tasks-45.htm">Creating linked resources</a><br>
-<a href="tasks-63.htm">Moving resources</a><br>
-<a href="tasks-63cg.htm">Copying resources</a><br>
-<a href="tasks-66.htm">Renaming resources</a><br>
-<a href="tasks-67.htm">Deleting resources</a><br>
-<a href="tasks-49.htm">Viewing resources properties</a><br>
-<a href="tasks-97.htm">Creating resource filters</a>
-</p>
-
-</BODY>
-</HTML>
\ No newline at end of file
+      <a href="tasks-49.htm">Viewing resources properties</a><br />
+      <a href="tasks-97.htm">Creating resource filters</a>
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1h.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1h.htm
index 477196f..b85d438 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1h.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-1h.htm
@@ -1,33 +1,47 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html lang="en">
-<HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Working in the team environment
+    </title>
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+  </head>
+  <body>
+    <h1>
+      Working in the team environment with CVS
+    </h1>
+    <p>
+      The Workbench provides tools to manage, share and synchronize resources.
+      The CVS standard is supported by default. See the Related tasks links
+      below for more details.
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelc.png" alt=
+      "Related concepts" /><br />
 
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Working in the team environment</title>
-</HEAD>
+      <a href="../concepts/concepts-26.htm">Team programming with CVS</a>
+    </p>
+    <p>
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="tasks-1i.htm">Working with a CVS repository</a><br />
+      <a href="tasks-1j.htm">Working with projects shared with CVS</a><br />
+      <a href="tasks-115.htm">Synchronizing with the repository</a><br />
 
-<BODY BGCOLOR="#ffffff">
-<H1>Working in the team environment with CVS</H1>
-
-<p>The Workbench provides tools to manage, share and synchronize resources. The 
-  CVS standard is supported by default. See the Related tasks links below for 
-  more details.
-</p>
-
-<p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
-<a href="../concepts/concepts-26.htm">Team programming with CVS</a>
-</p>
-
-<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
-<a href="tasks-1i.htm">Working with a CVS repository</a><br>
-<a href="tasks-1j.htm">Working with projects shared with CVS</a><br>
-<a href="tasks-115.htm">Synchronizing with the repository</a><br>
-<a href="tasks-1k.htm">Versioning</a>
-</p>
-
-</BODY>
-</HTML>
+      <a href="tasks-1k.htm">Versioning</a>
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-20.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-20.htm
index e4cf33f..ab6fccc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-20.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-20.htm
@@ -1,14 +1,14 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Changing fonts and colors</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -72,7 +72,7 @@
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Appearance > Colors and Fonts</b></a>
   preference page.</li>
   <li>Select the font you want to change.</li>
@@ -103,7 +103,7 @@ Windows, or the .Xdefaults file in Motif).
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ColorsAndFonts)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Appearance > Colors and Fonts</b></a>
   preference page.</li>
   <li>Select the color you want to change in the tree view and click the color 
@@ -117,7 +117,7 @@ be customized. For example, the searching support provides a preference for cont
 the color used to display potential matches
 (see the <b>Foreground color for potential matches</b> item on the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.search.preferences.SearchPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Search</b></a> preference page).
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-24.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-24.htm
index 200be18..3aade0b 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-24.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-24.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Changing where perspectives open</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 <BODY BGCOLOR="#ffffff">
 <H1>Changing where perspectives open</H1>
@@ -18,7 +18,7 @@
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Perspectives</b></a> preference page.</li>
   <li>Select either <b>In the same window</b> or <b>In a new window</b> from the
 	<b>Open a new perspective</b> group.</li>
@@ -29,7 +29,7 @@
 <a href="../concepts/concepts-4.htm">Perspectives</a>
 </p>
 
-<p CLASS="Para" Label="Type"><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
+<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
 <a href="tasks-9f.htm">Opening perspectives</a><br>
 <a href="tasks-31.htm">Specifying the default perspective</a><br>
 <a href="tasks-28.htm">Switching between perspectives</a><br>
@@ -41,4 +41,4 @@
 
 
 </BODY>
-</HTML>
\ No newline at end of file
+</HTML>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3.htm
index bf168bc..20490e6 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Opening views</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -24,7 +24,7 @@
 <P>After adding a view to the current perspective, you may wish 
   to save your new layout by clicking 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.savePerspective")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Save Perspective As...</b></a>.
 </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-31.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-31.htm
index 2cfcbae..f4c08cf 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-31.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-31.htm
@@ -2,20 +2,20 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Specifying the default perspective</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
 <H1>Specifying the default perspective</H1>
 <P>The default perspective is indicated in the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 Select Perspective</a> dialog (accessible via the <b> Window > Open Perspective 
   > Other... </b> menu). The pre-defined default perspective is indicated by the 
   word default in brackets following the perspective name, for example, <strong>Resource 
@@ -24,7 +24,7 @@ Select Perspective</a> dialog (accessible via the <b> Window > Open Perspecti
 <P>To change the default perspective:</P>
 <ol>
   <li>Open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Perspectives</b></a> preference page.</li>
   <li>Select the perspective that you want to define as the
     default from the list of available perspectives, and click <b>Make Default</b>.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-32.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-32.htm
index ccb61d1..18f2b50 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-32.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-32.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2008, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Using the classic update manager</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-33.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-33.htm
index 53b1499..142709c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-33.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-33.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Inspecting the current configuration</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -16,7 +16,7 @@
 
 <p>The
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.aboutAction")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > About Eclipse SDK</b></a>
   dialog shows most of the important information about the features and plug-in configured in 
   the product. To find out further detailed information about the current configuration:
@@ -25,7 +25,7 @@
 <ol>
   <li>Open the update configuration manager by clicking
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.update.manageConfiguration")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Software Updates > Manage Configuration</b></a>.
   This opens the Product Configuration dialog.</li>
   <li>In the Product Configuration dialog expand the root node (current  
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-34.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-34.htm
index 0afc6eb..f23849c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-34.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-34.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Installing new features with the update manager</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@
 <ol>
   <li>Open the Install Wizard by clicking
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.update.findAndInstallUpdates")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Software Updates > Find and Install...</b></a>.
   This opens the wizard. </li>
   <li>Select the second button, "<b>Search for new features to install</b>" and 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-35.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-35.htm
index 43ce034..ffe9c0e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-35.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-35.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Enabling, disabling, and uninstalling features</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -17,7 +17,7 @@
 <p>You can browse and manage your configuration from the <b>Product Configuration</b> dialog.
 Open the <b>Product Configuration</b> dialog by clicking
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.update.manageConfiguration")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help > Software Updates > Manage Configuration</b></a>. 
 </p>
 <ol>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-36.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-36.htm
index d235ba4..d04203d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-36.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-36.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Updating features with the update manager</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@
 <ol>
   <li>Click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.update.findAndInstallUpdates")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Software Updates > Find and Install...</b></a> and select the 
   first choice (search for updates). This will contact 
     the Web sites associated with the product's features to discover what versions 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37.htm
index 1c99864..079993d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Controlling the Eclipse update policy</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -68,9 +68,9 @@ an Eclipse product by creating an update policy file and configuring Update to
 use that file when searching.</p>
 <p>The file in question uses XML format and can have any name. The file can be set in
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.update.internal.ui.preferences.MainPreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Preferences > Install/Update</b></a>
-<font color="#0000FF"> </font>in the <b>Update Policy</b> field. The text field 
+in the <b>Update Policy</b> field. The text field 
 is empty by default: users may set the URL of the update policy file. The file 
 is managed by the local administrator and is shared for all the product 
 installations. Sharing can be achieved in two ways:</p>
@@ -82,7 +82,7 @@ installations. Sharing can be achieved in two ways:</p>
   property as follows:<br>
   <br>
     <code>org.eclipse.update.core/updatePolicyURL = <URL value><br>
-  </code><font color="#0000FF"></font><br>
+  </code><br>
   <br>
   This will cause all the installations to have this file set by default.</li>
 </ul>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37a.htm
index 82e7c92..c89e418 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-37a.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Scheduling automatic updates</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -47,13 +47,12 @@ chosen download option.</p>
 <h4>Search and notify</h4>
 <p>If search only is selected, a message box will open to notify you when updates
 are found:</p>
-<p><font color="#0000FF">New updates have been found for this product. Do you want to 
-download them?</font></p>
-<p><font color="#0000FF">[Yes] [No] </font></p>
+<p class="color-blue">New updates have been found for this product. Do you want to download them?</p>
+<p class="color-blue">[Yes] [No] </p>
 <p>If <b>Yes</b> is pressed, an update wizard will show a list of detected updates. The 
 same wizard is used when you search for updates manually using
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.update.findAndInstallUpdates")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Help > Software Updates > Find and Install...</b></a>.</p>
 <p>If <b>No</b> is pressed, the dialog closes and the updates are ignored.</p>
 <h4>Download new updates</h4>
@@ -61,8 +60,8 @@ same wizard is used when you search for updates manually using
 search will be scheduled as before, but when new updates are found, the 
 download will commence immediately. When all the features have been successfully 
 downloaded, a different message box will show up:</p>
-<p><font color="#0000FF">New updates have been found and downloaded. Do you want to install them?</font></p>
-<p><font color="#0000FF">[Yes] [No] </font></p>
+<p class="color-blue">New updates have been found and downloaded. Do you want to install them?</p>
+<p class="color-blue">[Yes] [No] </p>
 <p>If <b>No</b> is pressed, the dialog will close and no updates will occur.
 If <b>Yes</b> is pressed, installation of the new updates will proceed.</p>
 <p>If you choose not to install the downloaded features, but later launch the 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-38.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-38.htm
index ce81ece..d4edaaa 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-38.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-38.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Restoring a saved configuration</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -25,7 +25,7 @@
 <ol>
   <li> Select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.update.manageConfiguration")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Help > Software Updates > Manage Configuration</b></a> to 
     open the Manage Configuration dialog. </li>
   <li>In the Product Configuration view, click the Installation History icon and 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3e.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3e.htm
index e483c32..688f5c7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3e.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-3e.htm
@@ -1,122 +1,189 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html lang="en">
-<HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta name="copyright" content=
+    "Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type=
+    "text/css" />
+    <title>
+      Moving and docking views
+    </title>
+    <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript">
+</script>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+    <style type="text/css">
+/*<![CDATA[*/
+    body {
+    background-color: #FFFFFF;
+    }
+    /*]]>*/
+    </style>
+  </head>
+  <body>
+    <h1>
+      Moving and docking views
+    </h1>
+    <p>
+      To change the location of a view in the current perspective:
+    </p>
 
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
-<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
-<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
-<title>Moving and docking views</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
-</HEAD>
+    <ol>
+      <li>Drag the view by its title bar. Do not release the left mouse button
+      yet.
+      </li>
+      <li>As you move the view around the Workbench, the mouse pointer changes
+      to one of the <i>drop cursors</i> shown in the table below. The drop
+      cursor indicates where the view will be docked if you release the left
+      mouse button. To see the drop cursor change, drag the view over the left,
+      right, top, or bottom border of another view or editor. You may also drag
+      the view <i>outside</i> of the Workbench area to turn it into a
+      "Detached" view.
+      </li>
+      <li>When the view is in the location that you want, relative to the view
+      or editor area underneath the drop cursor, release the left mouse button.
+      </li>
 
-<BODY BGCOLOR="#ffffff">
-<H1>Moving and docking views</H1>
+      <li>(Optional) If you want to save your changes, select <a class=
+      "command-link" href=
+      'javascript:executeCommand("org.eclipse.ui.window.savePerspective")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"
+        alt="command link" /> <b>Window > Save Perspective As...</b></a>
+        from the main menu bar.
+      </li>
+      <li>Note that a group of stacked views can be dragged using the empty
+      space to the right of the view tabs.
+      </li>
+    </ol>
+    <p>
 
-<p>To change the location of a view in the current perspective:
-</p>
+      You can also move a view by using the pop-up menu for the view.
+      (Left-click on the icon at the left end of the view's title bar, or
+      right-click anywhere else in the view's title bar). As well as moving the
+      view this menu will provide sortcut options for turning a view into
+      either a "Fast" or "Detached" view.
+    </p>
+    <table border="1" cellspacing="0" cellpadding="5">
+      <tbody>
+        <tr>
+          <th colspan="1" valign="bottom" align="left" height="38">
+            Drop cursor
+          </th>
+          <th colspan="1" valign="bottom" align="left" height="38">
+            Where the view will be moved to
+          </th>
 
-<ol>
-  <li>Drag the view by its title bar. Do not release the left
-    mouse button yet.</li>
-  <li>As you move the view around the Workbench, the mouse pointer
-    changes to one of the <i>drop cursors</i> shown in the table below. The drop
-    cursor indicates where the view will be docked if you release the left mouse
-    button. To see the drop cursor change, drag the view over the left, right,
-    top, or bottom border of another view or editor. You may also drag the view
-    <i>outside</i> of the Workbench area to turn it into a "Detached" view.</li>
-  <li>When the view is in the location that you want, relative to
-    the view or editor area underneath the drop cursor, release the left mouse
-    button.</li>
-  <li>(Optional) If you want to save your changes, select
-    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.savePerspective")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
-    <b>Window > Save Perspective As...</b></a> from the main menu bar.</li>
-  <li>Note that a group of stacked views can be dragged using the empty space to
-    the right of the view tabs.</li>
-</ol>
+        </tr>
+        <tr>
+          <td colspan="1" align="center" height="38">
+            <p class="Para">
+              <img src="../images/drop_top_source.png" alt=" Up icon" border=
+              "0" />
+            </p>
+          </td>
+          <td colspan="1" valign="top" align="left" height="38">
+            <p class="Para">
 
-<p>You can also move a view by using the pop-up menu for the view. (Left-click
-on the icon at the left end of the view's title bar, or right-click anywhere
-else in the view's title bar). As well as moving the view this menu will provide
-sortcut options for turning a view into either a "Fast" or "Detached" view.
-</p>
+              Dock above: The view is docked above the view underneath the
+              cursor.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td rowspan="1" colspan="1" align="center" height="38">
+            <p class="Para">
+              <img src="../images/drop_bottom_source.png" alt=" Down icon"
+              border="0" />
+            </p>
 
-<TABLE BORDER="1" cellspacing="0" cellpadding="5">
-  <THEAD>
-  </THEAD>
-  <TBODY>
-    <TR> 
-      <th COLSPAN="1" valign="bottom" align="left" height="38"> Drop cursor </th>
-      <th COLSPAN="1" valign="bottom" align="left" height="38"> Where the view 
-        will be moved to </th>
-    </TR>
-    <TR> 
-      <TD COLSPAN="1" align="center" height="38"> <P CLASS="Para"> <img src="../images/drop_top_source.png" alt=" Up icon" border="0" > 
-        </P></TD>
-      <TD COLSPAN="1" valign="top" align="left" height="38"> <P CLASS="Para"> 
-          Dock above: The view is docked above the view underneath the cursor.</P></TD>
-    </TR>
-    <TR> 
-      <TD ROWSPAN="1" COLSPAN="1" align="center" height="38"> <P CLASS="Para"> 
-          <img src="../images/drop_bottom_source.png" alt="  Down icon" border="0" > 
-        </P></TD>
-      <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left" height="38"> <p CLASS="Para"> 
-          Dock below: The view is docked below the view underneath the cursor.</p> 
-      </TD>
-    </TR>
-    <TR> 
-      <TD ROWSPAN="1" COLSPAN="1" align="center" height="38"> <P CLASS="Para"><img align="texttop" border="0" src="../images/drop_right_source.png" alt="Right icon" > 
-        </P></TD>
-      <TD ROWSPAN="1" COLSPAN="1" valign="top" align="left" height="38"> <p CLASS="Para"> 
-          Dock to the right: The view is docked to the right of the view underneath 
-          the cursor.</p></TD>
-    </TR>
-    <TR> 
-      <TD COLSPAN="1" align="center" height="38"> <img align="texttop" border="0" src="../images/drop_left_source.png" alt=" Left icon" > 
-      </TD>
-      <TD COLSPAN="1" valign="top" align="left" height="38"> Dock to the left: 
-        The view is docked to the left of the view underneath the cursor. </TD>
-    </TR>
-    <TR> 
-      <TD COLSPAN="1" align="center" height="38"> <img align="texttop" border="0" src="../images/drop_stack.png" alt=" Stack views" > 
-      </TD>
-      <TD COLSPAN="1" valign="top" align="left" height="38"> Stack: The view is 
-        docked as a Tab in the same pane as the view underneath the cursor. </TD>
-    </TR>
-    <TR> 
-      <TD COLSPAN="1" align="center" height="38"> <img align="texttop" border="0" src="../images/drop_offscreen_source.png" alt=" Tear off icon " > 
-      </TD>
-      <TD COLSPAN="1" valign="top" align="left" height="38"> Detached: The view is 
-        detached from the Workbench window and is shown in its own separate window. </TD>
-    </TR>
-    <TR> 
-      <TD COLSPAN="1" align="center" height="38"> <img align="texttop" border="0" src="../images/drop_invalid_source.png" alt=" Restricted icon" > 
-      </TD>
-      <TD COLSPAN="1" valign="top" align="left" height="38"> Restricted: You cannot 
-        dock the view in this area. </TD>
-    </TR>
-  </TBODY>
-</TABLE>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left" height="38">
+            <p class="Para">
+              Dock below: The view is docked below the view underneath the
+              cursor.
+            </p>
+          </td>
+        </tr>
+        <tr>
+          <td rowspan="1" colspan="1" align="center" height="38">
 
-<p><img border="0" src="../images/ngrelc.png" alt="Related concepts." ><br>
-<a href="../concepts/concepts-5.htm">Views</a><br>
-<a href="../concepts/concepts-21.htm">Fast views</a><br>
-<a href="../concepts/concepts-21a.htm">Detached views</a><br>
-<a href="../concepts/concepts-4.htm">Perspectives</a>
-</p>
+            <p class="Para">
+              <img align="top" border="0" src=
+              "../images/drop_right_source.png" alt="Right icon" />
+            </p>
+          </td>
+          <td rowspan="1" colspan="1" valign="top" align="left" height="38">
+            <p class="Para">
+              Dock to the right: The view is docked to the right of the view
+              underneath the cursor.
+            </p>
+          </td>
 
-<p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br>
-<a href="tasks-3.htm">Opening views</a><br>
-<a href="tasks-9b.htm">Creating fast views</a><br>
-<a href="tasks-9l.htm">Detaching views</a><br>
-<a href="../gettingStarted/qs-39g.htm">Maximizing a view or editor</a><br>
-<a href="tasks-9i.htm">Saving a user defined perspective</a><br>
-<a href="tasks-9j.htm">Resetting perspectives</a>
-</p>
+        </tr>
+        <tr>
+          <td colspan="1" align="center" height="38">
+            <img align="top" border="0" src=
+            "../images/drop_left_source.png" alt=" Left icon" />
+          </td>
+          <td colspan="1" valign="top" align="left" height="38">
+            Dock to the left: The view is docked to the left of the view
+            underneath the cursor.
+          </td>
+        </tr>
 
+        <tr>
+          <td colspan="1" align="center" height="38">
+            <img align="top" border="0" src="../images/drop_stack.png" alt=
+            " Stack views" />
+          </td>
+          <td colspan="1" valign="top" align="left" height="38">
+            Stack: The view is docked as a Tab in the same pane as the view
+            underneath the cursor.
+          </td>
+        </tr>
+        <tr>
 
+          <td colspan="1" align="center" height="38">
+            <img align="top" border="0" src=
+            "../images/drop_offscreen_source.png" alt=" Tear off icon " />
+          </td>
+          <td colspan="1" valign="top" align="left" height="38">
+            Detached: The view is detached from the Workbench window and is
+            shown in its own separate window.
+          </td>
+        </tr>
+        <tr>
+          <td colspan="1" align="center" height="38">
 
-</BODY>
-</HTML>
+            <img align="top" border="0" src=
+            "../images/drop_invalid_source.png" alt=" Restricted icon" />
+          </td>
+          <td colspan="1" valign="top" align="left" height="38">
+            Restricted: You cannot dock the view in this area.
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <p>
+
+      <img border="0" src="../images/ngrelc.png" alt=
+      "Related concepts." /><br />
+      <a href="../concepts/concepts-5.htm">Views</a><br />
+      <a href="../concepts/concepts-21.htm">Fast views</a><br />
+      <a href="../concepts/concepts-21a.htm">Detached views</a><br />
+      <a href="../concepts/concepts-4.htm">Perspectives</a>
+    </p>
+    <p>
+
+      <img border="0" src="../images/ngrelt.png" alt="Related tasks" /><br />
+      <a href="tasks-3.htm">Opening views</a><br />
+      <a href="tasks-9b.htm">Creating fast views</a><br />
+      <a href="tasks-9l.htm">Detaching views</a><br />
+      <a href="../gettingStarted/qs-39g.htm">Maximizing a view or
+      editor</a><br />
+      <a href="tasks-9i.htm">Saving a user defined perspective</a><br />
+
+      <a href="tasks-9j.htm">Resetting perspectives</a>
+    </p>
+  </body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-42.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-42.htm
index 93e4816..f1af554 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-42.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-42.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating a project</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-43.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-43.htm
index 6e12b5b..bc6be32 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-43.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-43.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating a folder</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,7 +22,7 @@
     where you want to create the new folder.</li>
   <li>From the pop-up menu, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.ui.wizards.new.folder)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>New > Folder</b></a>.</li>
   <li>Enter the name of the new folder and click <b>Finish</b>.</li>
 </ol>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-44.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-44.htm
index ba72e68..26b69bd 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-44.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-44.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating a file</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,7 +22,7 @@
     where you want to create the new file.</li>
   <li>From the pop-up menu, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.ui.wizards.new.file)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>New > File</b></a>.</li>
   <li>Specify the name of the file, including the file extension (for
     example, newfile.txt).</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45.htm
index 06e85ad..d1c5bc8 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating linked resources</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -27,7 +27,7 @@ outside of the project's location.  These special folders and files are called
     where you want to create the linked folder.</li>
   <li>From the pop-up menu, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.ui.wizards.new.folder)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>New > Folder</b></a>.</li>
   <li>Specify the name of the folder as it will appear in the workbench.  This 
   name can be different from the name of the folder in the file system.</li>
@@ -39,10 +39,10 @@ outside of the project's location.  These special folders and files are called
 
 <P>To create a linked file, follow the same steps as above, except choose
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.ui.wizards.new.file)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>New > File</b></a> instead of
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.ui.wizards.new.folder)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>New > Folder</b></a> in the context menu. </P>
 <P>Linked resource locations can also be specified relative to a variable.  This makes
 it easier to share projects containing linked resources with other team members,
@@ -63,7 +63,7 @@ above:
 </ol>
 <p><em>Tip:</em> The 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.LinkedResources)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Workspace > Linked Resources</b></a>
 preference page also allows you to define path variables. 
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45a.htm
index ad43c85..43224c1 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-45a.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating virtual folders</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -25,7 +25,7 @@ Virtual folders are folders that exist only in the Eclipse workspace tree.
     where you want to create the virtual folder.</li>
   <li>From the pop-up menu, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.newWizard(newWizardId=org.eclipse.ui.wizards.new.folder)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>New > Folder</b></a>.</li>
   <li>Specify the name of the folder as it will appear in the workbench.  This 
   name can be different from the name of the folder in the file system.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-46ag.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-46ag.htm
index 3df374d..54c68ea 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-46ag.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-46ag.htm
@@ -1,14 +1,14 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Finding a resource quickly</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -31,7 +31,7 @@
 If you want to open a particular resource in an editor rather than select
 it in a view, you can use the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.navigate.openResource")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Navigate > Open Resource</b></a> action.
 This action presents the same dialog as the <b>Go To > Resource</b> action,
 but immediately opens the matching resource for editing.
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-48b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-48b.htm
index da687f7..ad26949 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-48b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-48b.htm
@@ -1,8 +1,8 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-49.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-49.htm
index 4666cc6..f9b6c74 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-49.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-49.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Viewing resource properties</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -26,7 +26,7 @@
 you have selected and the features and plug-in that are installed in the Workbench.
 </P> <P><em>Tip:</em> When the resource is selected in one of the navigation views you can also see basic properties for a resource by clicking
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.PropertySheet)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Properties</b></a>.
 </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-51.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-51.xhtml
index 3c4fb13..64a8bb3 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-51.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-51.xhtml
@@ -1,14 +1,14 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Associating editors with file types</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body bgcolor="#ffffff">
@@ -17,7 +17,7 @@
 <ol>
   <li>Open the
   <a class="command-link" href="javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileEditors)")">
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"/>
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
   <b>General > Editors > File Associations</b></a> preference page.</li>
   <li>Select the file type from the <b>File types</b> list, or click <b>Add</b>
     to add a type that is not already on the list.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-52.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-52.htm
index 7ecb84d..360aaf5 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-52.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-52.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Editing files outside the Workbench</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -27,11 +27,11 @@
 <p><em>Tip</em>: If you work with external editors regularly, you may want to 
   enable auto-refresh. This can be done by opening the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Workspace</b></a> preference page, and checking 
-  the <strong>Refresh automatically</strong> option. When this option is enabled, 
-  any external changes will be automatically discovered by the Workbench. Depending 
-  on the platform this may not happen immediately.</p>
+  the <strong>Refresh using native hooks or polling</strong> or <strong>Refresh on access</strong> option. 
+  When at least one of them is enabled, any changes made by external editors will be automatically discovered 
+  by the Workbench. Depending on the platform this may not happen immediately for <strong>Refresh using native hooks or polling</strong>.</p>
 <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
 <a href="../concepts/concepts-6.htm">Editors</a><br>
 <a href="../concepts/concepts-6a.htm">External editors</a>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-53.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-53.xhtml
index e593db7..7a9fcff 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-53.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-53.xhtml
@@ -1,14 +1,14 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Importing</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body bgcolor="#ffffff">
@@ -20,7 +20,7 @@
 <ul>
   <li>By using the
   <a class="command-link" href="javascript:executeCommand("org.eclipse.ui.file.import")">
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"/>
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
   Import wizard</a>.</li>
   <li filter="ws=win32"><img src="../images/win_only.png" alt="For Windows:" border="0" />
     By dragging files or folders from the file system to one of the navigation views</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55.htm
index b8ac8ab..e6d1bf4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Importing resources from the file system</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -16,14 +16,14 @@
 
 <p>You can use the Import Wizard to
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.ui.wizards.import.FileSystem)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 import resources from the local file system into an existing project</a>.
 </p>
 
 <ol>
   <li>From the main menu bar, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>File > Import...</b></a>. The Import wizard opens.</li>
   <li>Select <b>General > File System</b> and click <b>Next</b>.</li>
   <li>Click the <b>Browse</b> button on the next page of the wizard to select
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55bg.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55bg.htm
index cf8daf7..04cdf10 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55bg.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-55bg.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Importing resources from an Archive file</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -15,13 +15,13 @@
 
 <P>You can use the Import wizard to
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.ui.wizards.import.ZipFile)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>extract files from an archive file into the Workbench</b></a>. </P>
 
 <ol>
   <li>From the main menu bar, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>File > Import...</b></a>. The Import wizard opens.</li>
   <li>Select <b>General > Archive File</b> and click <b>Next</b>.</li>
   <li>Click the <b>Browse</b> button on the next page of the wizard, to select 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-57.xhtml b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-57.xhtml
index ba56acd..169e411 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-57.xhtml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-57.xhtml
@@ -1,14 +1,14 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." />
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css" />
 <title>Exporting</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body bgcolor="#ffffff">
@@ -20,7 +20,7 @@
 <ul>
   <li>By using the
   <a class="command-link" href="javascript:executeCommand("org.eclipse.ui.file.export")">
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"/>
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link"/>
   Export wizard</a>.</li>
   <li filter="ws=win32"><img src="../images/win_only.png" alt="For Windows:" border="0" /> By
     dragging files or folders from one of the navigation views to the file system.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59.htm
index 3ba293e..c013ecc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Exporting resources to the file system</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -16,7 +16,7 @@
 
 <P>You can use the Export wizard to
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export(exportWizardId=org.eclipse.ui.wizards.export.FileSystem)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 export resources from the Workbench to the file system</a>.
 </P>
 
@@ -24,7 +24,7 @@ export resources from the Workbench to the file system</a>.
   <li>In one of the navigation views, select the resources that you want to export.</li>
   <li>From the main menu bar, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>File > Export...</b></a>. The Export wizard opens.</li>
   <li>Select <b>General > File System</b> and click <b>Next</b>.</li>
   <li>By default, the resources that you selected will be exported, along with
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59ag.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59ag.htm
index 3350d98..18ddb4d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59ag.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-59ag.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Exporting resources to an Archive file</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -16,7 +16,7 @@
 
 <p>You can use the Export wizard to
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export(exportWizardId=org.eclipse.ui.wizards.export.ZipFile)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 export resources from the Workbench to an archive file in the file system</a>.
 </p>
 
@@ -24,7 +24,7 @@ export resources from the Workbench to an archive file in the file system</a>.
   <li>In one of the navigation views, select the resources that you want to export.</li>
   <li>From the main menu bar, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>File > Export...</b></a>. The Export wizard opens.</li>
   <li>Select <b>General > Archive File</b> and click <b>Next</b>.</li>
   <li>By default, the resources that you selected will be exported along with 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68.htm
index 2c05799..0f00922 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68.htm
@@ -1,13 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Comparing resources</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -58,13 +58,13 @@ resources.
     is maintained when you save changes. (<em>Tip:</em> to configure the size 
     and depth of your local history, use the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileStates)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>General > Workspace > Local History</b></a> preference page.)</dd>
 </dl>
 
 <p><em>Tip:</em> You can customize the behavior of the comparison editor with the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.compare.internal.ComparePreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Compare/Patch</b></a> preference page.
   You can select to "synchronize scrolling" of the pane contents, as well 
   as setting options for showing conflicts with other team members and changing 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68b.htm
index c30df31..6f63635 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68b.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Setting preferences for comparing files</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,7 +22,7 @@ editors behave:
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.compare.internal.ComparePreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Compare/Patch</b></a> preference page.</li>
   <li>Set your preferences and click <b>OK</b>.</li>
 </ol>
@@ -153,6 +153,18 @@ Off</P>
 		<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">
 		On</P></TD>
 	</TR>
+	<TR> 
+		<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">
+		Disable capping when comparing large documents</P></TD>
+		<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">
+		The capping mechanism is used to speed up finding
+		differences in large files. In case where the capping happens the result can either 
+		be correct or it can display too many changes, but it never misses any change. Turn
+		this option on, if you prefer a precise result in favour of possibly longer
+		calculation time.</P></TD>
+		<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">
+		Off</P></TD>
+	</TR>
 	<TR>
 		<TD ROWSPAN="1" COLSPAN="1" valign="top" align="left"> <P CLASS="Para">
 		When the end/beginning is reached while navigating an element</P></TD>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68bg.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68bg.htm
index 0829c2f..8a56c95 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68bg.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-68bg.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -39,7 +39,7 @@ indicate the differences between the files.
     and right file have different contents for this line (see #2).Also, you can 
     observe that a part of the line is highlighted. You can turn this option off 
     on the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.compare.internal.ComparePreferencePage)")'>
-	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 	<b>General > Compare/Patch</b></a> preference page.</li>
   <li>The next line ("This is line 4") is once again in white, so we
     can skip it, since the contents are the same in both.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81.htm
index b469d6b..67f3f2d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating a bookmark within a file</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -19,7 +19,7 @@
 <p>The Workbench allows you to create bookmarks in files that you
 edit so that you can quickly reopen those files from the Bookmarks view
 (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.BookmarkView)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Bookmarks</b></a>).
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81b.htm
index 5954dcb..fae95c2 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-81b.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating a bookmark for an entire file</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@
 <p>You can bookmark individual files in the Workbench, in order to open them
 quickly from the Bookmarks view
 (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.BookmarkView)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Bookmarks</b></a>)
 later.
 </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-82.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-82.htm
index bb2b2a6..c4043ca 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-82.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-82.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Deleting a bookmark</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@
 <ol>
   <li>Open the Bookmarks view
   (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.BookmarkView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Show View > Other... > General > Bookmarks</b></a>).</li>
   <li>Right-click the bookmark that you want to delete and select <b>Delete</b>
     from the pop-up menu.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84.htm
index c1a90d6..e5e9e4d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
 <title>Searching for text within a file</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body>
@@ -25,7 +25,7 @@ files in the Workbench. To find all files that contain a particular string of ch
 <ol>
   <li>On the main toolbar, click the 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.search.ui.openSearchDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Search</b></a> button <img src="../images/Image50_search.png"  alt="search icon" border="0">.</li>
   <li>Type your search string in the <b>Containing Text</b> field, or use the 
       pull-down list to select a previously entered search expression.<br> Use <code>\</code> as an escape 
@@ -42,7 +42,7 @@ files in the Workbench. To find all files that contain a particular string of ch
 
 <p>If you close the Search view, you can return to it later by selecting
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.search.ui.views.SearchView)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Search</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84b.htm
index 145fd9e..6bf3c97 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-84b.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
 <title>Searching for files</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body>
@@ -25,7 +25,7 @@ to find all files that end with .xml:
 <ol>
   <li>On the main toolbar, click the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.search.ui.openSearchDialog")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Search</b></a> button <img src="../images/Image50_search.png" alt="Search icon" border="0" >.</li>
   <li>Type <code>.xml</code> into the <b>File name patterns</b> field and leave 
     the <b>Containing text</b> field empty. <br>
@@ -41,7 +41,7 @@ to find all files that end with .xml:
 <p>
 If you close the Search view, you can return to it later by selecting
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.search.ui.views.SearchView)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Show View > Other... > General > Search</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87.htm
index bf91064..c192520 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Replacing a resource with local history</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -47,7 +47,7 @@
   days to keep files, or how many entries per file you want to keep, or the maximum 
   file size for files to be kept with the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileStates)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Workspace > Local History</b></a> preference page.
 </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87b.htm
index b17ce48..41dbf6f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-87b.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Restoring deleted resources from local history</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -34,7 +34,7 @@
   days to keep files, or how many entries per file you want to keep, or the maximum 
   file size for files to be kept with the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileStates)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Workspace > Local History</b></a> preference page.
 </P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-88.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-88.htm
index 4265d78..bbb582a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-88.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-88.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Setting local history preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@ each resource in the Workbench:
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileStates)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Workspace > Local History</b></a> preference page.</li>
   <li>In the <b>Limit history size</b> field, specify whether you want
   to limit the local history size using following options.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9.htm
index 46a0473..4ce788f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Changing the placement of the tabs</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@ of the area which contains them.
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Views)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Appearance</b></a> preference page.</li>
   <li>Select from the choices displayed in the <b>Editor tab positions</b> group 
     or <b>View tab positions</b> group to control whether you want the tabs at 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-92.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-92.htm
index d338d43..fa95d82 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-92.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-92.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating a CVS repository location</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -25,11 +25,11 @@ valid repository location in the Workbench.
 <ol>
   <li>Open the CVS Repositories view by selecting
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Show View > Other... > CVS > CVS Repositories</b></a>.
   Alternatively, the CVS Repositories view is also shown in the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective.</li>
   <li>On the toolbar, click on <strong>Add CVS Repository</strong> (or from the 
     context menu of the CVS Repositories View, select <b>New > Repository Location</b>). 
@@ -81,7 +81,7 @@ valid repository location in the Workbench.
   line client, you can use the <strong>ext</strong> connection method and configure 
   it to use <strong>extssh</strong> from inside Eclipse on the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.ExtMethodPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > CVS > Ext Connection Method</strong></a> preference page.</p>
 <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
   <a href="../concepts/concepts-26.htm">Team programming with CVS</a><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-94.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-94.htm
index b094a8b..2786472 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-94.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-94.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Discarding a CVS repository location</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -25,10 +25,10 @@ are shared with that location.
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, select the repository location that you want 
     to delete from the Workbench.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95.htm
index 0c6b86a..021d692 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -22,10 +22,10 @@
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, select the repository location whose properties 
     you want to change.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95a.htm
index b361ed9..1326556 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-95a.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Changing the encoding of a CVS repository location</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@
   to the server encoding and vice versa. The encoding does not affect the contents 
   of file. You may use the editor encoding (available from the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.ContentTypes)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Content Types</strong></a> preference page)
   or resource encodings (available from the <strong>Properties > Resource</strong> 
   page of resources) to configure the Workbench to use the proper file encodings.</p>
@@ -30,10 +30,10 @@
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, select the repository location whose properties 
     you want to change.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96.htm
index 179ee25..c3dbf9e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Checking out a project from a CVS repository</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -24,7 +24,7 @@
 <ol>
   <li>Launch the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.team.cvs.ui.newProjectCheckout)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     Checkout wizard</a>. It is available from the <strong>Import</strong> 
     menu, the <strong>New > Project</strong> menu and the toolbar of the CVS 
     Repository Exploring perspective. It is also opened when performing a Checkout 
@@ -63,10 +63,10 @@
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, expand the repository location.</li>
   <li>Expand <b>HEAD</b> and select the folders that you want to add as projects 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96a.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96a.htm
index 2dad12b..1f52e8a 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96a.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96a.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Checking out a module from a CVS repository</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -22,10 +22,10 @@ CVS repository to the Workbench:
 <ol>
   <li>Switch to the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.team.cvs.ui.cvsPerspective)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repository Exploring</a> perspective or add the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.team.ccvs.ui.RepositoriesView)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   CVS Repositories</a> view to the current perspective.</li>
   <li>In the CVS Repositories view, expand the repository location.</li>
   <li>Expand <b>HEAD</b> and select the modules that you want to add to the Workbench. 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96b.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96b.htm
index 13f98da..341d270 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96b.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-96b.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -21,7 +21,7 @@
 
 <ol>
   <li>Launch the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.team.cvs.ui.newProjectCheckout)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     Checkout wizard</a>..</li>
   <li>Select the desired repository from the list of known repositories or, if 
     the desired repository is not in this list, choose to create a new repository 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-97.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-97.htm
index 7ff46bd..e5b06eb 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-97.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-97.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) Freescale Semiconductor and others 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) Freescale Semiconductor and others 2010, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Creating resource filters</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -34,8 +34,6 @@ refresh operation.
   <li>Click <b>OK</b>.</li>
 </ol>
 
-<P>
-</P>
 <P><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
 <a href="../concepts/resourcefilters.htm">Resources Filters</a><br>
 <a href="../concepts/concepts-12.htm">Resources</a><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9c.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9c.htm
index 6708d92..4f2bd72 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9c.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9c.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -21,8 +21,6 @@ appear in the shortcut bar as shown below. </p>
 </blockquote>
   <p CLASS="Head">To work with a fast view proceed as follows.</p>
 <TABLE BORDER="0" cellspacing="0" cellpadding="3">
-<THEAD>
-</THEAD>
 <TBODY>
 <TR>
 <TD COLSPAN="1" valign="top" align="left">
@@ -83,11 +81,10 @@ the fast view's toolbar </P>
   left corner of the view. To reposition a fast view, drag the fast view's title 
   bar (or close the fast view and then drag its button from the shortcut bar) 
   and drop it on the workbench like a normal view.</P>
-<p></p>
 <P CLASS="Para">
 An empty fast view bar can be hidden using the 'Hide empty fast view bar' preference on the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Perspectives</b></a>
   preference page.</P>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9d.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9d.htm
index baa2c08..375aad7 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9d.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9d.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Deleting a user defined perspective</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -17,7 +17,7 @@
 those that are delivered with the Workbench.</P>
 <ol>
   <li>Open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Perspectives</b></a> preference page.</li>
   <li>From the <b>Available perspectives</b> list, select the one that you want
     to delete and click <b>Delete</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9f.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9f.htm
index c6263e4..4387db9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9f.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9f.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Opening perspectives</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -39,7 +39,7 @@ window.
 By default, a perspective will open in the same window.
 If you would rather it opened in a new window, change the setting in the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Perspectives</b></a> preference page.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9i.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9i.htm
index 635af52..55c574f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9i.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9i.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Saving a user defined perspective</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@ moving (docking) views, you can save your changes for future use.
 <ol>
   <li>Switch to the perspective that you want to save.</li>
   <li>Click <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.savePerspective")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Save Perspective As...</b></a>.</li>
   <li>Type a new name for the perspective into the <b>Name</b> field.</li>
   <li>Click <b>OK</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9j.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9j.htm
index e283ad4..a6faa39 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9j.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9j.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Resetting perspectives</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -16,7 +16,7 @@
 <p>To restore a perspective to its original layout:</p>
 <ol>
   <li>Open the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General > Perspectives</b></a> preference page.</li>
   <li>From the <b>Available perspectives</b> list, select the perspective you want to restore.</li>
   <li>Click <b>Reset</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9k.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9k.htm
index 3679679..40262d9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9k.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9k.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Configuring perspective shortcuts</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -21,7 +21,7 @@ To configure shortcuts:</p>
 <ol>
   <li>Switch to the perspective that you want to configure.</li>
   <li>Select <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Window > Customize Perspective...</b></a>.</li>
   <li>Open the <b>Shortcuts</b> tab.</li>
   <li>Choose the sub menu whose shortcuts you want to edit.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9m.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9m.htm
index d759b7a..175ca89 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9m.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9m.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Configuring perspective command groups</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -27,7 +27,7 @@
 <ol>
   <li>Switch to the perspective that you want to configure.</li>
   <li>Select <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Window > Customize Perspective...</b></a>.</li>
   <li>Open the <b>Command Groups Availability</b> tab.</li>
   <li>Select the command group in the <b>Available command groups</b> list whose
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9n.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9n.htm
index 864ce23..b535db4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9n.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-9n.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005, 2008. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Showing and hiding menu items and toolbar buttons</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@
 <ol>
   <li>Switch to the perspective that you want to configure.</li>
   <li>Select <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <b>Window > Customize Perspective...</b></a>.</li>
   <li>Open the <b>Menu Visibility</b> or <b>Tool Bar Visibility</b> tab.</li>
   <li>Find the item you want to hide. You can do this two ways:
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-addtasksandtypes.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-addtasksandtypes.htm
index daafcc5..8d41960 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-addtasksandtypes.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-addtasksandtypes.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Adding new Ant tasks and types</title>
 <meta name="keyword" content="ant">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 <body>
 <H1>Adding new Ant tasks and types</H1>
@@ -25,7 +25,7 @@ typedef see the Ant documentation in
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntRuntimePreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Ant > Runtime</b></a> preference page.</li>
   <li>Click the <b>Tasks</b> tab or the <b>Types</b> tab.</li>
   <li>Click <b>Add Task</b> or <b>Add Type</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-classpath.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-classpath.htm
index ee0bf34..09d239e 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-classpath.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-classpath.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Modifying the Ant classpath</title>
 <meta name="keyword" content="ant">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 <body>
 <H1>Modifying the Ant classpath</H1>
@@ -23,9 +23,12 @@
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntRuntimePreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Ant > Runtime</b></a> preference page.</li>
-  <li>If you are not on it already, click the <b>Classpath</b> tab.</li>
+  <li>If you are not on it already, click the <b>Classpath</b> tab.
+  <br><br>
+  <img src="../images/ant_runtime_classpath.png" alt="Ant runtime classpath global preferences" border="0" >
+  </li>
   <li>To add a JAR file to the classpath, click <b>Add Jar</b> and select the JAR file.</li>
   <li>To add a folder to the classpath, click <b>Add Folder</b> and select the folder.</li>
   <li>To remove an item from the classpath, select it and click <b>Remove</b>.</li>
@@ -36,10 +39,13 @@
 <ol>
   <li>Click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.externalTools.commands.OpenExternalToolsConfigurations")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Run > External Tools > External Tools...</b></a>.</li>
   <li>Select the Ant configuration whose classpath you wish to modify</li>
-  <li>Select the <b>Classpath</b> tab</li>
+  <li>Select the <b>Classpath</b> tab
+  <br><br>
+  <img src="../images/ant_classpath_tab.png" alt="Ant launch configuration classpath tab" border="0" >
+  </li>
   <li>To add a JAR file to the classpath, click <b>Add Jar</b> and select the JAR file.</li>
   <li>To add a folder to the classpath, click <b>Add Folder</b> and select the folder.</li>
   <li>To remove an item from the classpath, select it and click <b>Remove</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-running.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-running.htm
index 7201700..9dce537 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-running.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-running.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Running Ant buildfiles</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 <body>
 <H1>Running Ant buildfiles</H1>
@@ -37,7 +37,7 @@ as the buildfile runs.
 appear in the launch history under <b>Run > External Tools</b> and will be available in the
 launch configuration dialog which is opened by clicking
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.externalTools.commands.OpenExternalToolsConfigurations")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Run > External Tools > External Tools...</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-version.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-version.htm
index 9cbb03f..bf34633 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-version.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-ant-version.htm
@@ -2,14 +2,14 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Using a different version of Ant</title>
 <meta name="keyword" content="ant">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 <body>
 <H1>Using a different version of Ant</H1>
@@ -27,7 +27,7 @@ The Ant classpath consists of the plug-ins contributing new tasks, types or
 libraries, plus the classpath defined in the Ant runtime classpath preferences. To 
 access the preferences, click
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntRuntimePreferencePage)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Window > Preferences > Ant > Runtime</b></a>. 
 The JARs related to Ant 1.7.1 are grouped under the <b>Ant Home Entries</b> item.
 To change the Ant Home entries, click on the <b>Ant Home...</b> button and choose the Ant
@@ -50,7 +50,7 @@ These steps are for Windows, but similar methods can be used for other operating
     <a href="http://ant.apache.org" target="_blank">http://ant.apache.org</a> .</li>
   <li>Click
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.externalTools.commands.OpenExternalToolsConfigurations")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Run > External Tools > External Tools...</b></a>.</li>
   <li>Click <b>Program</b></li>
   <li>Click <b>New</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-16.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-16.htm
index 3237210..d78899c 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-16.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-16.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -11,7 +11,7 @@
 <meta name="keyword" content="team">
 </HEAD>
 <BODY BGCOLOR="#ffffff">
-<H1 CLASS="Head"> Filtering CVS Revisions in the History View</H1>
+<H1 CLASS="Head">Filtering CVS Revisions in the History View</H1>
 <P CLASS="Para">Over time, the revision history for a file can grow drastically. 
   As a result, it may be difficult to find the revision or revisions that you 
   are looking for. Using the filtering mechanism of the History View 
@@ -19,7 +19,7 @@
 <P CLASS="Para">To set a filter on a CVS managed resource that is currently being displayed in the History View:</P>
 <ol>
   <li>Select the <b>Filter...</b> action from the dropdown menu on the History View toolbar.</li>
-  <li>Enter any author, comment, or date range that you would like the view to display.
+  <li>Enter any branch, author, comment, or date range that you would like the view to display.
   <p><img src="../images/cvs_filter_res_history.png" alt="Filter Resource History dialog" border="0" ></p>
   </li>
   <li>Click <b>OK</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-passwords.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-passwords.htm
index 10346a0..a595d77 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-passwords.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-passwords.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
@@ -11,7 +11,7 @@
  type="text/css">
   <title>Password Management</title>
   <meta name="keyword" content="team">
-  <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+  <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 <body style="background-color: rgb(255, 255, 255);">
 <h1 class="Head">Password Management</h1>
@@ -25,7 +25,7 @@ now you have full control over this behavior. To persist login credentials in
 a safe, encrypted form <a href="../reference/ref-securestorage-start.htm">Secure Storage</a> is now used.</p>
 <p>You can manage the list of passwords that have been saved via the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.equinox.security.ui.storage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>General > Security > Secure Storage</strong></a> preference page.
 The page displays the currently saved passwords and allows you to clear or delete them all.</p>
 <p>As an alternative you can use 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-project-set.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-project-set.htm
index e7ef49a..3e2fe9f 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-project-set.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-project-set.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -9,7 +9,7 @@
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Sharing your workspace setup using Project Sets</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -27,7 +27,7 @@
     tooling you are using.</li>
   <li>From the <strong>File</strong> menu, choose <strong>Export</strong>. The
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     Export dialog</a> will open.</li>
   <li>In the Export dialog, choose <b>Team > Team Project Set</b> and click <strong>Next</strong>. 
     The dialog will now display all the projects that are eligible for export.</li>
@@ -42,7 +42,7 @@
   <li>From the <strong>File</strong> menu, choose <strong>Import</strong>. This 
     will open the
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     Import dialog</a>.</li>
   <li>In the Import dialog, choose <b>Team > Team Project Set</b> and click <strong>Next</strong>.</li>
   <li>Browse for or type in the name of the file containing the project set and 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-quickdiff.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-quickdiff.htm
index bdd0b22..533e0ae 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-quickdiff.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-quickdiff.htm
@@ -2,7 +2,7 @@
 <html lang="en">
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
   <meta http-equiv="Content-Type"
  content="text/html; charset=ISO-8859-1">
@@ -11,7 +11,7 @@
  type="text/css">
   <title>Quick Diff: showing changes in a text editor</title>
   <meta name="keyword" content="team">
-  <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+  <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body style="background-color: rgb(255, 255, 255);">
@@ -23,7 +23,7 @@ support and see the changes within the text editor (e.g. any text
 editor based on the Eclipse text editor). This feature can be enabled
 via the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.QuickDiff)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <span style="font-weight: bold;">General > Editors > Text Editors > Quick Diff</span></a>
 preference page. You should select the
 <span style="font-weight: bold;">Latest CVS Revision</span> as the reference
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-ssh2.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-ssh2.htm
index 824ce7c..a9546d4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-ssh2.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-ssh2.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 
 <head>
-  <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+  <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
   <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
   <meta content="text/css" http-equiv="Content-Style-Type">
   <link type="text/css" charset="ISO-8859-1" href="../book.css" rel="STYLESHEET">
   <title>Connecting and configuring CVS with SSH</title>
   <meta content="team" name="keyword">
-  <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+  <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </head>
 
 <body>
@@ -36,7 +36,7 @@ connection type.</p>
   <li>
     <p>If you already have a private/public key for the CVS server, simply open the
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jsch.ui.SSHPreferences)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <em class="UILabel">General > Network Connections >  SSH2</em></a>
        preference page and on the <em class="UILabel">General</em> tab add your private key to the list 
       by selecting the <em class="UILabel">Add Private Key</em> 
@@ -104,7 +104,7 @@ where the port_number is only required if the SSH2 host's port is not 22.
 <p>Both the <span style="font-weight: bold;">extssh</span> and <span style="font-weight: bold;">pserver</span> connection
 methods support the use the proxies specified on the 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.net.NetPreferences)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <em class="UILabel">General > Network Connections</em></a>
 preference page. If a SOCKS proxy is specified, it will be used. Otherwise, the specified SSL proxy will be used. If neither of these
 proxy types are specified or if the host being contacted is in the host exclusion list, the connection will be made directly to the target host.</p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-watch.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-watch.htm
index 40c34c1..4bac87d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-watch.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-cvs-watch.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -9,7 +9,7 @@
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Finding out who's working on what: watch/edit</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -49,7 +49,7 @@
 <p>Watches and editing are optional in CVS. To use this facility, you must turn 
   on this option in the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.WatchEditPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > CVS > Watch/Edit</strong></a>
   preference page. Select "Configure projects to use Watch/Edit on checkout", accept 
   the preference dialog, and then checkout your project. All the files in the 
@@ -75,7 +75,7 @@
   will need to manually perform a Team > Edit for each file you are working 
   on. To use this work mode, open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.WatchEditPreferencePage)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>Team > CVS > Watch/Edit</strong></a>
   preference page
   and enable "Edit the file without informing the server". </p>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-exttools-running.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-exttools-running.htm
index 195209b..6c5b097 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-exttools-running.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-exttools-running.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Running external tools</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@ To configure an external tool:
 
 <ol>
   <li>Click <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.externalTools.commands.OpenExternalToolsConfigurations")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Run > External Tools > External Tools...</b></a>.
   </li>
   <li>Select the Program configuration</li>
@@ -40,7 +40,7 @@ To configure an external tool:
 appear in the launch history under <b>Run > External Tools</b> and will be available in the
 launch configuration dialog which is opened by clicking
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.externalTools.commands.OpenExternalToolsConfigurations")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>Run > External Tools > External Tools...</b></a>.
 </p>
 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-importproject.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-importproject.htm
index e9ea162..6ff9bea 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-importproject.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-importproject.htm
@@ -2,13 +2,13 @@
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Importing existing projects</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -16,14 +16,14 @@
 
 <p>You can use the Import Wizard to 
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.ui.wizards.import.ExternalProject)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 import an existing project into workspace</a>.
 </p>
 
 <ol>
   <li>From the main menu bar, select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>File > Import...</b></a>. The Import wizard opens.</li>
   <li>Select <b>General > Existing Project into Workspace</b> and click <b>Next</b>.</li>
   <li> Choose either <strong>Select root directory </strong>or <strong>Select 
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-team-1.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-team-1.htm
index d889bac..956ad18 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-team-1.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tasks-team-1.htm
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
@@ -9,7 +9,7 @@
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Setting the content type of a file extension</title>
 <meta name="keyword" content="team">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -33,7 +33,7 @@
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.TextPreferences)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>Team > File Content</b></a> preference page. 
     This page displays a list of file extensions and content type (ASCII or Binary) 
     for file extensions whose content type is known.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/timpandexp.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/timpandexp.htm
index 47726aa..cda3dfc 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/timpandexp.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/timpandexp.htm
@@ -1,14 +1,14 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Importing and exporting preferences</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@
 <ol>
   <li>Select 
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>File > Import</strong></a>.</li>
   <li>In the Import wizard select <strong>General > Preferences</strong> and click <strong>Next</strong>.</li>
   <li>Click <strong>Browse...</strong> and locate the Preferences file on the file system.</li>
@@ -35,7 +35,7 @@
 <ol>
   <li>Select
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <strong>File > Export</strong></a>.</li>
   <li>In the Export wizard select <strong>General > Preferences</strong> and click <strong>Next</strong>.</li>
   <li>Click <strong>Export all</strong> to add all of the preferences to the file.</li>  
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tkeybindings.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tkeybindings.htm
index 61ac5c2..6201e89 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tkeybindings.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/tkeybindings.htm
@@ -1,13 +1,14 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html lang="en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Changing the key bindings</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -18,7 +19,7 @@ The function of the keyboard can be extensively customized in Eclipse.
 <p>
 Use the
 <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
 <b>General > Keys</b></a> preference page to 
 <a href="../concepts/accessibility/keyboardshortcuts.htm">assign key sequences</a> to many of the commands in Eclipse. </p>
 <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/topenmode.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/topenmode.htm
index 9df8b19..05d98e9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/topenmode.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/topenmode.htm
@@ -1,14 +1,14 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
 <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
 <title>Controlling single and double click behavior</title>
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 </HEAD>
 
 <BODY BGCOLOR="#ffffff">
@@ -20,7 +20,7 @@
 <ol>
   <li>Open the
   <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workbench)")'>
-  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+  <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
   <b>General</b></a> preference page.</li>
   <li>Select the behavior you want to change from the <b>Open mode</b> group.</li>
   <li>Click <b>OK</b>.</li>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/ttoolbars.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/ttoolbars.htm
index 663f390..cb8ddb9 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/ttoolbars.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/ttoolbars.htm
@@ -1,7 +1,8 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html lang="en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html lang="en">
 <HEAD>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
 <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/welcome.htm b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/welcome.htm
index bb9376d..367dd56 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tasks/welcome.htm
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tasks/welcome.htm
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta http-equiv="Content-Style-Type" content="text/css">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"> </script>
 <title>Customizing Welcome</title>
 </head>
 <body>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tips/images/separate_derived_encodings.png b/eclipse/plugins/org.eclipse.platform.doc.user/tips/images/separate_derived_encodings.png
new file mode 100644
index 0000000..45a0e83
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/tips/images/separate_derived_encodings.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/tips/platform_tips.html b/eclipse/plugins/org.eclipse.platform.doc.user/tips/platform_tips.html
index eacd732..e392a9d 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/tips/platform_tips.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/tips/platform_tips.html
@@ -3,12 +3,12 @@
 
 <head>
 
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2010. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
+<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2011. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
 
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
-<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js" type="text/javascript"></script>
 <title>Platform Tips and Tricks</title>
 </head>
 
@@ -59,7 +59,7 @@ productivity. They are divided into the following sections:</p>
     <td width="80%" valign="top" align="left">A setting on the 
     
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Editors</strong></a>
 
       preference page closes all open editors automatically whenever 
@@ -71,7 +71,7 @@ productivity. They are divided into the following sections:</p>
     <td width="80%" valign="top" align="left">By default, on Windows, OLE applications like Microsoft Word or Excel open as in-place editors inside of Eclipse.
     You can force OLE applications to open as stand-alone applications by unchecking the "Allow in-place system editors" option on the
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Editors</strong></a>
     preference page.</td>
   </tr>
@@ -87,7 +87,7 @@ productivity. They are divided into the following sections:</p>
     <td width="20%" valign="top" align="left"><b>Tiling the editor work area</b></td>
     <td width="80%" valign="top" align="left">You can use drag and drop to modify 
       the layout of your editor work area. Grab an editor tab and drag it to the 
-      edge of the editor work area. The arrow dock icons (e.g., <img src="../images/drop_left_source.png" align="texttop" border="0" alt="Left arrow icon">) 
+      edge of the editor work area. The arrow dock icons (e.g., <img src="../images/drop_left_source.png" align="top" border="0" alt="Left arrow icon">) 
       indicate which way the editor work area will split. 
       <p><img src="images/editor-tiles.png" alt="Tiled editor work area"  border="0"></p></td>
   </tr>
@@ -103,7 +103,7 @@ productivity. They are divided into the following sections:</p>
     <td width="80%" valign="top" align="left">Use the Open mode setting on the 
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workbench)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General</strong></a>
       
       preference page to activate single click opening for editors. 
@@ -122,7 +122,7 @@ productivity. They are divided into the following sections:</p>
     <td valign="top" align="left" width="80%"> Use
     
       <a class="command-link" href='javascript:executeCommand("org.eclipse.search.ui.openFileSearchPage")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Search > File</strong></a>
     
       from the main menu to specify the text that you want to replace and the scope
@@ -170,7 +170,7 @@ productivity. They are divided into the following sections:</p>
       <p><img src="images/keyboard-shortcut.png" alt="Navigation shortcuts menu"  border="0"></p> 
       <p>To directly navigate to a particular view you can define a keyboard shortcut 
         to a view via the <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Keys</strong></a></p></td>
   </tr>
   <tr id="switch-editors">
@@ -190,7 +190,7 @@ productivity. They are divided into the following sections:</p>
       preference is active (found on the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Editors)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Editors</strong></a>
 
       preference page), you can stop an editor from being closed by using the
@@ -202,7 +202,7 @@ productivity. They are divided into the following sections:</p>
     <td width="80%" valign="top" align="left">You can rearrange the order of open 
       editors by using drag and drop. Grab the editor tab and drag it to the position 
       you want the editor to appear. When positioning editors, the stack icon 
-      <img src="../images/drop_stack.png"  align="texttop" border="0" alt="Stack icon"> 
+      <img src="../images/drop_stack.png"  align="top" border="0" alt="Stack icon"> 
       indicates a valid spot to drop.</td>
   </tr>
 
@@ -250,7 +250,7 @@ productivity. They are divided into the following sections:</p>
         or via the
         
         <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Views)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
         <strong>General > Appearance</strong></a>
  
         preference page. </p>
@@ -283,7 +283,7 @@ productivity. They are divided into the following sections:</p>
       with. To return it to a familiar state, use
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.resetPerspective")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Window > Reset Perspective</strong></a>.
     </td>
   </tr>
@@ -296,7 +296,7 @@ productivity. They are divided into the following sections:</p>
       viewing existing bindings, is done from the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Keys</strong></a>
       preference page. 
       <p><img src="images/key-bindings.png" alt="Key bindings preference dialog"></p></td>
@@ -311,7 +311,7 @@ productivity. They are divided into the following sections:</p>
         This information is also available in the improved
         
         <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
         <strong>General > Keys</strong></a>
         
         preference page.
@@ -336,7 +336,7 @@ productivity. They are divided into the following sections:</p>
       on the main toolbar and menu bar using the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Window > Customize Perspective</strong></a>
       
       command. 
@@ -354,7 +354,7 @@ productivity. They are divided into the following sections:</p>
     <td width="80%" valign="top" align="left">
     
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.navigate.openResource")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Navigate > Open Resource...</strong></a>
 
       (<b>Ctrl+Shift+R</b>) brings up a dialog that allows you to quickly locate and 
@@ -367,7 +367,7 @@ productivity. They are divided into the following sections:</p>
       command does not appear in your perspective, you can add it by selecting 
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Window > Customize Perspective</strong></a>,
       
       then <b>Other > Resource Navigation</b>.</td>
@@ -417,7 +417,7 @@ productivity. They are divided into the following sections:</p>
       <b>Installation Details</b> button on the
 
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.help.aboutAction")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Help > About <i>Product</i></strong></a>
       
       dialog opens a dialog containing pages that describe different aspects of
@@ -438,7 +438,7 @@ productivity. They are divided into the following sections:</p>
     <td width="20%" valign="top" align="left"><b>Viewing resource properties</b></td>
     <td width="80%" valign="top" align="left">Use the Properties view
 
-      (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.PropertySheet)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      (<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.ui.views.PropertySheet)")'><img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Window > Show View > Properties</strong></a>)
     
       when viewing the properties for many 
@@ -452,7 +452,7 @@ productivity. They are divided into the following sections:</p>
       mechanism for showing extra information about a resource. Use the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Decorators)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Appearance > Label Decorations</strong></a>
       
       preference page to select which of the available 
@@ -481,7 +481,7 @@ productivity. They are divided into the following sections:</p>
       or via the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.LinkedResources)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Workspace > Linked Resources</strong></a>
       
       preference page. 
@@ -508,7 +508,7 @@ productivity. They are divided into the following sections:</p>
     	with a different workspace you can instead use
     	
     	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.openWorkspace")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
         <strong>File > Switch Workspace</strong></a>.  From here you can either open previous workspaces 
         directly from the menu or you can open the workspace chooser dialog to choose a new one.
     	
@@ -516,7 +516,7 @@ productivity. They are divided into the following sections:</p>
         a restart to take effect (such as the
         
         <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Views)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
         <strong>General > Appearance</strong></a>
         
         preferences), use <b>File > Restart</b>.</p>
@@ -531,7 +531,7 @@ productivity. They are divided into the following sections:</p>
       <p>Click <b>Always run in background</b> or toggle this on the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workbench)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General</strong></a>
       
       preference page so that you never get the initial dialog for these operations.</p>
@@ -546,7 +546,7 @@ productivity. They are divided into the following sections:</p>
         be found in the
         
         <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.sdk.capabilities)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
         <strong>General > Capabilities</strong></a>
         
         preference page. By disabling capabilities you are able to hide views,
@@ -554,7 +554,19 @@ productivity. They are divided into the following sections:</p>
 	    
       <p><img src="images/cap-pref.png" alt="Capabilities Preference Page"></p>
     </td>
-  </tr>  
+  </tr>
+  <tr>
+    <td width="20%" valign="top" align="left"><b>Storing the encoding of derived resources separately</b></td>
+    <td width="80%" valign="top" align="left">Usually the encodings for all files
+    in a project are stored in one preferences file. If you are using a version
+    control system and the preferences file is shared, the encodings for all
+    resources, including derived, are shared along with it. To store the encodings of derived resources
+    in a separate preferences file and avoid sharing it, go to <b>Project > Properties > Resource</b> 
+    and select the <b>Store the encoding of derived resources separately</b> option.
+    
+    <p><img src="images/separate_derived_encodings.png" alt="Storing the encoding of derived resources separately"></p>
+    </td>
+  </tr>
   </table>
 
 <h3><a name="Editing">Editing</a></h3>
@@ -581,7 +593,7 @@ productivity. They are divided into the following sections:</p>
     add it by selecting
     
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.customizePerspective")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <strong>Window > Customize Perspective</strong></a>,
     
     then <b>Other > Editor Navigation</b>.</td>
@@ -610,7 +622,7 @@ productivity. They are divided into the following sections:</p>
       the ruler context menu, <b>Ctrl+Shift+Q</b> or for all new editors on the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.QuickDiff)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Editors > Text Editors > Quick Diff</strong></a>
       
       preference page. The 
@@ -630,7 +642,7 @@ productivity. They are divided into the following sections:</p>
       in editors on the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.editors.preferencePages.Annotations)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>General > Editors > Text Editors > Annotations</strong></a>
       
       preference page: 
@@ -654,7 +666,7 @@ productivity. They are divided into the following sections:</p>
           for the entire workspace, using the
           
           <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
-          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
           <strong>General > Workspace</strong></a>
           
           preferences, or for a given project.
@@ -735,7 +747,7 @@ productivity. They are divided into the following sections:</p>
       upwards (some will recognize this as Ant's "-find"
       feature).
       The names of buildfiles to search for are specified in the  <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ant.ui.AntPreferencePage)")'>
-          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
           <strong>Ant</strong></a> preference page.</td>
   </tr>
 </table>
@@ -775,7 +787,7 @@ productivity. They are divided into the following sections:</p>
       configure Help to use these instead of the Help view/tray from the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.help.ui.browsersPreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Help</strong></a>
       
       preference page.</td>
@@ -787,7 +799,7 @@ productivity. They are divided into the following sections:</p>
     the
     
     <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.cheatsheets.openCheatSheet")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
     <strong>Help > Cheat Sheets...</strong></a>
     
     menu item. This menu item may not appear in all perspectives.</td>
@@ -807,7 +819,7 @@ productivity. They are divided into the following sections:</p>
     <td width="20%" valign="top" align="left"><b>CVS Watch/Edit</b></td>
     <td width="80%" valign="top" align="left">Through settings on the
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.cvs.ui.WatchEditPreferencePage)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Team > CVS > Watch/Edit</strong></a>
       
       preference page (which must be set before the projects 
@@ -825,7 +837,7 @@ productivity. They are divided into the following sections:</p>
       set for projects imported into the workspace via
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.team.ui.ProjectSetImportWizard)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>Import > Team Project Set</strong></a>.
       
       This works for all types of repositories. 
@@ -863,7 +875,7 @@ productivity. They are divided into the following sections:</p>
       one easy step via the
       
       <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.team.cvs.ui.newProjectCheckout)")'>
-      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+      <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
       <strong>File > Import > Checkout projects from CVS wizard</strong></a>.
       
       This also allows checking out projects from a CVS server that doesn't support 
@@ -914,7 +926,7 @@ productivity. They are divided into the following sections:</p>
           select
           
           <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export")'>
-          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
           <strong>File > Export</strong></a>
           
           from the main menu.</li>
@@ -924,7 +936,7 @@ productivity. They are divided into the following sections:</p>
         <li>To import the project set select
         
           <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import")'>
-          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+          <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
           <strong>File > Import</strong></a>
           
           and select <strong>Team Project Set</strong>. The projects will be checked 
@@ -979,7 +991,7 @@ productivity. They are divided into the following sections:</p>
         on the
 
         <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.compare.internal.ComparePreferencePage)")'>
-        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png">
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="command link">
         <strong>General > Compare/Patch</strong></a>
         
         <strong>> Text Compare</strong> preference page has to be enabled.</P></TD>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/toc.xml b/eclipse/plugins/org.eclipse.platform.doc.user/toc.xml
index 149aeef..92fe9c4 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/toc.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/toc.xml
@@ -18,8 +18,12 @@
 	<topic label="Reference">
 		<link toc="topics_Reference.xml" />
 	</topic>
-	<topic label="Tips and tricks" href="tips/platform_tips.html"/>
-	<topic label="What's new" href="whatsNew/platform_whatsnew.html"/>
+	<topic label="Tips and tricks" href="tips/platform_tips.html">
+		<link toc="topics_Tips.xml" />
+	</topic>
+	<topic label="What's new" href="whatsNew/platform_whatsnew.html">
+		<link toc="topics_WhatsNew.xml" />
+	</topic>
 	<topic label="Legal" href="notices.html"/>
 	<enablement>
 		<test property="org.eclipse.core.runtime.isBundleInstalled" args="org.eclipse.ui.workbench"/>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/topics_GettingStarted.xml b/eclipse/plugins/org.eclipse.platform.doc.user/topics_GettingStarted.xml
index 00367a5..5643fad 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/topics_GettingStarted.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/topics_GettingStarted.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
-<!-- ========================== -->
+<!-- ==================================== -->
 <!-- Define topics for the GettingStarted -->
-<!-- ========================== -->
+<!-- ==================================== -->
 <toc label="GettingStarted">
    <topic label="Basic tutorial" href="gettingStarted/qs-01.htm">
       <topic label="The Workbench" href="gettingStarted/qs-02a.htm"/>
@@ -136,7 +136,9 @@
      </topic>    
      <topic label="Ant buildfiles as project builders" href="gettingStarted/qs-92_project_builders.htm">
        <topic label="Creating a project builder Ant buildfile" href="gettingStarted/qs-93_project_builder.htm"/>
-       <topic label="Executing project builders" href="gettingStarted/qs-94_run_pj.htm"/>       
+       <topic label="Executing project builders" href="gettingStarted/qs-94_run_pj.htm"/>
+       <topic href="gettingStarted/qs-93a_project_builder_targets.htm" label="Project Builder Ant Targets">
+       </topic>       
      </topic>      	
      <topic label="External tools" href="gettingStarted/qs-95_external_tools.htm">
        <topic label="Non-Ant project builders" href="gettingStarted/qs-96_non_ant_pjs.htm"/>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/topics_Reference.xml b/eclipse/plugins/org.eclipse.platform.doc.user/topics_Reference.xml
index c7f0ad7..ed1ff92 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/topics_Reference.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/topics_Reference.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
-<!-- ========================== -->
+<!-- =============================== -->
 <!-- Define topics for the Reference -->
-<!-- ========================== -->
+<!-- =============================== -->
 <toc label="Reference">
 
 <!-- <topic label="Keyboard shortcuts" /> -->
@@ -18,7 +18,7 @@
 				<test property="org.eclipse.core.runtime.isBundleInstalled" args="org.eclipse.ant.ui"/>
 			</enablement>
 		</topic>
-		<topic label="Ant Code Assist" href="reference/ref-antcodeassist.htm">
+		<topic label="Ant Content Assist" href="reference/ref-antcontentassist.htm">
 			<enablement>
 				<test property="org.eclipse.core.runtime.isBundleInstalled" args="org.eclipse.ant.ui"/>
 			</enablement>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/topics_Tasks.xml b/eclipse/plugins/org.eclipse.platform.doc.user/topics_Tasks.xml
index b4b9d38..f58f948 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/topics_Tasks.xml
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/topics_Tasks.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?NLS TYPE="org.eclipse.help.toc"?>
-<!-- ========================== -->
+<!-- =========================== -->
 <!-- Define topics for the Tasks -->
-<!-- ========================== -->
+<!-- =========================== -->
 <toc label="Tasks">
 
 <topic label="Running Eclipse" href="tasks/running_eclipse.htm" />
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/topics_Tips.xml b/eclipse/plugins/org.eclipse.platform.doc.user/topics_Tips.xml
new file mode 100644
index 0000000..234635b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/topics_Tips.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<!-- ===================================== -->
+<!-- Define topics for the Tips and Tricks -->
+<!-- ===================================== -->
+<toc label="Tips and tricks">
+	<topic label="Workbench" href="tips/platform_tips.html#Workbench"/>
+	<topic label="Editing" href="tips/platform_tips.html#Editing"/>
+	<topic label="Ant" href="tips/platform_tips.html#Ant"/>
+	<topic label="Help" href="tips/platform_tips.html#Help"/>
+	<topic label="Team - CVS" href="tips/platform_tips.html#CVS"/>
+</toc>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/topics_WhatsNew.xml b/eclipse/plugins/org.eclipse.platform.doc.user/topics_WhatsNew.xml
new file mode 100644
index 0000000..ceb835c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/topics_WhatsNew.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+<!-- ================================ -->
+<!-- Define topics for the What's New -->
+<!-- ================================ -->
+<toc label="What's new">
+	<topic label="Platform" href="whatsNew/platform_whatsnew.html#Platform"/>
+	<topic label="Install/Update" href="whatsNew/platform_whatsnew.html#Install"/>
+	<topic label="Editor" href="whatsNew/platform_whatsnew.html#Text"/>
+	<topic label="Team/CVS" href="whatsNew/platform_whatsnew.html#TeamCVS"/>
+	<topic label="Debug" href="whatsNew/platform_whatsnew.html#Debug"/>
+</toc>
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/AIX.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/AIX.png
new file mode 100644
index 0000000..e5b3a58
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/AIX.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/apply-patch-in-sync-view-preference.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/apply-patch-in-sync-view-preference.png
deleted file mode 100644
index f25ac10..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/apply-patch-in-sync-view-preference.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/apply-patch-ws.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/apply-patch-ws.png
deleted file mode 100644
index 5da82d5..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/apply-patch-ws.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/author.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/author.png
new file mode 100644
index 0000000..122765c
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/author.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/branch-column.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/branch-column.png
new file mode 100644
index 0000000..f7c8243
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/branch-column.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/breakpoint-details.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/breakpoint-details.png
deleted file mode 100644
index 736c3a5..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/breakpoint-details.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/commitWizardLogicalModels.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/commitWizardLogicalModels.png
deleted file mode 100644
index ee950d5..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/commitWizardLogicalModels.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/configure-branches.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/configure-branches.png
deleted file mode 100644
index 0c76b68..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/configure-branches.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/default-ssh-dir.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/default-ssh-dir.png
new file mode 100644
index 0000000..a1924bb
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/default-ssh-dir.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/default_style.css b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/default_style.css
new file mode 100644
index 0000000..a182540
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/default_style.css
@@ -0,0 +1,21 @@
+p, table, td, th {  font-family: verdana, arial, helvetica, geneva; font-size: 10pt}
+pre {  font-family: "Courier New", Courier, mono; font-size: 10pt}
+h2 { font-family: verdana, arial, helvetica, geneva; font-size: 18pt; font-weight: bold ; line-height: 14px}
+code {  font-family: "Courier New", Courier, mono; font-size: 10pt}
+sup {  font-family: verdana, arial, helvetica, geneva; font-size: 10px}
+h3 {  font-family: verdana, arial, helvetica, geneva; font-size: 14pt; font-weight: bold}
+li {  font-family: verdana, arial, helvetica, geneva; font-size: 10pt}
+h1 {  font-family: verdana, arial, helvetica, geneva; font-size: 24pt; font-weight: bold}
+body {  font-family: verdana, arial, helvetica, geneva; font-size: 10pt; margin-top: 5mm; margin-left: 3mm}
+.indextop { font-size: x-large; font-family: verdana, arial, helvetica, sans-serif; font-weight: bold}
+.indexsub { font-size: xx-small; font-family: verdana, arial, helvetica, sans-serif; color: #8080FF}
+a.bar:link {  text-decoration: none; color: #FFFFFF}
+a.bar:visited {  color: #FFFFFF; text-decoration: none}
+a.bar:hover {  color: #FFFFFF; text-decoration: underline}
+a.bar {  color: #FFFFFF}
+
+table.news td {border-top: solid thin black;}
+table.news tr {vertical-align: top;}
+table.news tr td.section {font-size: 20px; font-weight: bold;}
+table.news tr td.title {vertical-align: top; width: 30%; font-weight: bold;}
+table.news tr td.content {vertical-align: top; width: 70%;}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/disableCapping.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/disableCapping.png
new file mode 100644
index 0000000..c961ade
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/disableCapping.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/dynamicPathVariables.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/dynamicPathVariables.png
deleted file mode 100644
index 121aabc..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/dynamicPathVariables.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/edit-button-in-property.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/edit-button-in-property.png
deleted file mode 100644
index 7f439c8..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/edit-button-in-property.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/export-plugins.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/export-plugins.png
new file mode 100644
index 0000000..f1ba32a
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/export-plugins.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/expressions-columns.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/expressions-columns.png
deleted file mode 100644
index 85b354f..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/expressions-columns.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/file-attributes-ui.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/file-attributes-ui.png
deleted file mode 100644
index 57c5536..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/file-attributes-ui.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/file-system-import.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/file-system-import.png
deleted file mode 100644
index 0781f1c..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/file-system-import.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/hide-fvb.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/hide-fvb.png
deleted file mode 100644
index cf66ebd..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/hide-fvb.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/hpux.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/hpux.png
new file mode 100644
index 0000000..1e214c7
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/hpux.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-plugins.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-plugins.png
new file mode 100644
index 0000000..b1ba916
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-plugins.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-type-dialog.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-type-dialog.png
deleted file mode 100644
index ef8a7e0..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-type-dialog.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-zip.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-zip.png
deleted file mode 100644
index 0876756..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/import-zip.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/inaccessible-projects-page.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/inaccessible-projects-page.png
deleted file mode 100644
index 7174268..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/inaccessible-projects-page.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/install-history.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/install-history.png
new file mode 100644
index 0000000..202772d
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/install-history.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/installhistory.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/installhistory.png
deleted file mode 100644
index 159963a..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/installhistory.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/lightweight-refresh.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/lightweight-refresh.png
new file mode 100644
index 0000000..6b306dd
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/lightweight-refresh.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/linkedResourcesPropPage.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/linkedResourcesPropPage.png
deleted file mode 100644
index 2247866..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/linkedResourcesPropPage.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/localHistoryLimitSize.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/localHistoryLimitSize.png
deleted file mode 100644
index 6d7fbcb..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/localHistoryLimitSize.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/mac-proxy-icon.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/mac-proxy-icon.png
new file mode 100644
index 0000000..76b57f2
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/mac-proxy-icon.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/mac-window-menu.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/mac-window-menu.png
new file mode 100644
index 0000000..9ac5f71
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/mac-window-menu.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/matching-might-not-be-optimal.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/matching-might-not-be-optimal.png
deleted file mode 100644
index 83012dc..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/matching-might-not-be-optimal.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-hyperlink-menu-item.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-hyperlink-menu-item.png
new file mode 100644
index 0000000..4fa3fcd
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-hyperlink-menu-item.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-hyperlink-popup.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-hyperlink-popup.png
new file mode 100644
index 0000000..be4f8d0
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-hyperlink-popup.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-in-compare-editor.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-in-compare-editor.png
deleted file mode 100644
index e94b310..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-in-compare-editor.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-boosting.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-boosting.png
deleted file mode 100644
index 252a4ab..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-boosting.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-path-relative.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-path-relative.png
deleted file mode 100644
index fe92f55..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-path-relative.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-path.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-path.png
deleted file mode 100644
index 982c6af..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-resource-path.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-with-context-menu.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-with-context-menu.png
new file mode 100644
index 0000000..1c342cc
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/open-with-context-menu.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/p2-license.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/p2-license.png
deleted file mode 100644
index 8e52625..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/p2-license.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/patch-options-in-sync-view.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/patch-options-in-sync-view.png
deleted file mode 100644
index 551bf7e..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/patch-options-in-sync-view.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/problems-view-icon.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/problems-view-icon.png
new file mode 100644
index 0000000..ef0e71e
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/problems-view-icon.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/quickaccess-bindings.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/quickaccess-bindings.png
deleted file mode 100644
index d4733fe..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/quickaccess-bindings.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/resize-popups-gtk.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/resize-popups-gtk.png
deleted file mode 100644
index 74c2b15..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/resize-popups-gtk.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/resourceFilters.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/resourceFilters.png
deleted file mode 100644
index 70e4377..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/resourceFilters.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/save-dialog.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/save-dialog.png
deleted file mode 100644
index 4159383..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/save-dialog.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/searchprocessorNN.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/searchprocessorNN.png
new file mode 100644
index 0000000..907af59
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/searchprocessorNN.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/separate-derived-encodings.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/separate-derived-encodings.png
new file mode 100644
index 0000000..e8ffdec
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/separate-derived-encodings.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/show-ruler-annotation-tooltip.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/show-ruler-annotation-tooltip.png
deleted file mode 100644
index dda4ab8..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/show-ruler-annotation-tooltip.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/show-whitespace-characters.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/show-whitespace-characters.png
new file mode 100644
index 0000000..39afd1c
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/show-whitespace-characters.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/syncViewLinkWithEditor.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/syncViewLinkWithEditor.png
deleted file mode 100644
index 0f03527..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/syncViewLinkWithEditor.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/taskbarprogress.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/taskbarprogress.png
deleted file mode 100644
index c19c78d..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/taskbarprogress.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/taskitem-progress-overlay.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/taskitem-progress-overlay.png
new file mode 100644
index 0000000..d6d0776
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/taskitem-progress-overlay.png differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/virtual-folder-properties.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/virtual-folder-properties.png
deleted file mode 100644
index 4d02ad5..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/virtual-folder-properties.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/virtual-folder.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/virtual-folder.png
deleted file mode 100644
index 2bf3eb6..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/virtual-folder.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/visible-folded-annotations.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/visible-folded-annotations.png
deleted file mode 100644
index d7041fc..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/visible-folded-annotations.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/webkitgtk.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/webkitgtk.png
deleted file mode 100644
index ef51c49..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/webkitgtk.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/wizardstop.png b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/wizardstop.png
deleted file mode 100644
index 7546fda..0000000
Binary files a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/images/wizardstop.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html
index 5b3d0b2..8837242 100644
--- a/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html
+++ b/eclipse/plugins/org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html
@@ -1,24 +1,24 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-<meta name="copyright" content="Copyright (c) Eclipse contributors and others 2010. This page is made available under license. For full details, see the LEGAL section in the documentation that contains this page."/>
+<meta name="copyright" content="Copyright (c) Eclipse contributors and others 2010, 2011. This page is made available under license. For full details, see the LEGAL section in the documentation that contains this page."/>
 <meta http-equiv="Content-Language" content="en-us"/>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<link rel="STYLESHEET" href="../book.css"  type="text/css"/>
+<link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css"/>
 <style type="text/css">
-td {border-top: solid thin black;}
-img[alt] {background-color:#ffdddd;}
-tr {vertical-align: top;}
+table.news td {border-top: solid thin black;}
+table.news tr {vertical-align: top;}
+table.news tr td.section {font-size: 20px; font-weight: bold;}
+table.news tr td.title {vertical-align: top; width: 30%; font-weight: bold;}
+table.news tr td.content {vertical-align: top; width: 70%;}
 </style>
-<title>Eclipse Platform What's New in 3.6</title>
+<title>Eclipse Platform What's New in 3.7</title>
 </head>
 
 <body>
-
-<h2>What's New in 3.6</h2>
-
+<h2>What's New in 3.7</h2>
 <p>Here are descriptions of some of the more interesting or significant changes 
-made to the Eclipse Platform for the 3.6 release of Eclipse. They are grouped into:</p>
+made to the Eclipse Platform for the 3.7 release of Eclipse. They are grouped into:</p>
 
 <ul>
 <li><a href="#Platform">Platform Changes</a></li>
@@ -35,434 +35,302 @@ document in the plug-in developer's guide.
 </p>
 
 <!-- ****************** START OF N&N TABLE ****************** -->
-<table cellpadding="10" cellspacing="0" width="600">
-  <colgroup>
-  <col width="30%"/>
-  <col width="70%"/>
-  </colgroup>
+<table class="news" border="0" cellpadding="10" cellspacing="0" width="600">
   <tbody>
+
     <!-- ******************** Platform ********************** -->
-    <tr> 
-      <td colspan="2"><a name="Platform"></a> <div style="font-size: 20px; font-weight: bold;">Platform 
-          Changes</div></td>
-    </tr>
-
-  <tr> 
-    <td width="30%" valign="top" align="left">
-      <b>New platforms</b>
+	<tr>
+    <td id="Platform" class="section" colspan="2">
+      <h2>Platform Changes</h2>
     </td>
-    <td width="70%" valign="top">
-     PowerPC 64-bit, Windows 7, and Ubuntu LTS 10.04 have joined the line-up of supported configurations 
-     for which SWT and Eclipse are routinely built and tested.
-    </td> 
+  	</tr>
+
+  <tr id="HPUX">
+    <td class="title">HPUX for GTK</td>
+    <td class="content">
+      A new GTK port for HP-UX (32 bit) has joined the lineup of supported configurations for which SWT and Eclipse are routinely built.
+      <p><img src="images/hpux.png" alt="hpux"/></p>
+     </td>
   </tr>
 
-  <tr id="platform-open-file">
-    <td width="30%" valign="top" align="left"><b>Opening a file from the command line</b></td>
-    <td width="70%" valign="top">Based on work in SWT and the native launcher, the 
-    Eclipse IDE now supports opening a file from the command line, or opening a file that 
-    has been associated with the Eclipse executable. If an instance of Eclipse is already running, 
-    that instance will open the file. Otherwise, a new instance will be started.
-	</td>
-	</tr>
-
-  <tr id="resource-filters">
-    <td width="30%" valign="top" align="left"><b>Resource filters</b></td>
-    <td width="70%" valign="top">Projects and folders can now be configured to omit some of their
-    children in the file system from the workspace. The filtered files and directories will not
-    appear in views such as the <b>Project Explorer</b>, and won't be processed by 
-    workspace facilities such as builders. Filters can be configured on the <b>Resource Filters</b> 
-    page in the <b>Properties</b> dialog. When a filter is added, the following attributes have to be set.
-    <ul>
-    	<li><b>Filter type</b> - determines whether only matching resources should be visible (<b>Include</b>) or whether all matching resources should be hidden (<b>Exclude</b>)</li>
-    	<li><b>Applies to</b> - determines the type of resources that should be affected (files, folders, or both)</li>
-    	<li><b>All children (recursive)</b> - indicates that the filter should be used for the entire resource subtree</li>
-    	<li><b>File and Folder Attributes</b> - specifies the filter condition</li>
-	</ul>
-    <p><img src="images/resourceFilters.png" alt="Resource Filters" /></p></td>
-  </tr> 
-
-  <tr id="dynamic_path_variables">
-    <td width="30%" valign="top" align="left"><b>Dynamic path variables</b></td>
-    <td width="70%" valign="top">Linked resources can define their locations 
-    relative to user-defined <i>path variables</i>.
-    Now, a set of predefined path variables are available:
-    <ul>
-  		<li><b>PROJECT_LOC</b> - pointing out the project location</li>
-  		<li><b>WORKSPACE_LOC</b> - pointing out the workspace location</li>
-	</ul>
-	<p>When these variables are used, they are dynamically resolved based on the context 
-	of a linked resource. Those predefined variables may be also used to build user-defined variables.
-	</p>
-    <p><img src="images/dynamicPathVariables.png" alt="Dynamic Path Variables" /></p>
-    <p><img src="images/linkedResourcesPropPage.png" alt="Linked Resources Property Page" /></p>
-	</td>
+  <tr id="AIX">
+    <td class="title">GTK on AIX 32/64</td>
+    <td class="content">
+      Two new ports for AIX using GTK (one for 32 bit and another one for 64 bit architectures) 
+      have joined the lineup of supported configurations for which SWT and Eclipse are routinely built. 
+      <p><img src="images/AIX.png" alt="aix"/></p></td>
   </tr>
 
-  <tr id="virtual_folders">
-    <td width="30%" valign="top" align="left"><b>Virtual folders</b></td>
-    <td width="70%" valign="top"><b>Virtual folders</b> are a new type of resource that exist only in the workspace and
-    are not backed by a directory in your file system. These folders can be used to create more flexible project structures
-    by bringing together links to files spread throughout your file system.
-    <p>
-    Since virtual folders do not exist in the local file system, they can only
-    contain other virtual folders and linked resources.
-    </p>
-    <p><img src="images/virtual-folder.png" alt="Virtual Folders" /></p>
-    <p><img src="images/virtual-folder-properties.png" alt="Virtual Folders Properties" /></p></td>
-  </tr> 
-
-  <tr id="filesystem_import">
-    <td width="30%" valign="top" align="left"><b>File system import wizard</b></td>
-    <td width="70%" valign="top">The file system import wizard now supports creating
-    	virtual folders and linked files and folders.
-      <p><img src="images/file-system-import.png" alt="File System Import Wizard" /></p>
-      <p>Linked files and folders can also be created relative to a path variable.</p></td>
-  </tr>
-
-  <tr id="webkitgtk">
-    <td width="30%" valign="top" align="left"><b>Browser can use WebKitGTK+</b></td>
-    <td width="70%" valign="top">
-      Linux users can now use WebKitGTK+ instead of Mozilla as the Browser control's native renderer.  See
-      <a href="http://www.eclipse.org/swt/faq.php#browserwebkitgtk">Can the Browser use the WebKit renderer on GTK?</a>.
-      <p><img src="images/webkitgtk.png" alt="WebKitGTK+ Image"/></p>
-	</td>
-  </tr>
-
-  <tr id="unix-file-permissions">
-    <td width="30%" valign="top" align="left"><b>UNIX file permissions</b></td>
-    <td width="70%" valign="top">The full set of UNIX file permissions are now supported.
-	The attributes can be managed from the <b>Resource Properties</b> page.
-        <p><img src="images/file-attributes-ui.png" alt="File attributes UI" /></p>
+  <tr id="Plat-lightweight-refresh">
+    <td class="title">Lightweight refresh on access</td>
+    <td class="content">
+    	Previous Eclipse versions relied on native refresh providers (on Windows) 
+    	or a polling mechanism to keep the workspace synchronized with the underlying filesystem. 
+    	This capability can be still enabled by selecting <b>Refresh using native hooks or polling</b> on
+    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
+    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
+    	<b>Preferences > General > Workspace</b></a>.
+    	 
+    	<p>Now a new lightweight mechanism is available. Files discovered to be out-of-sync by the workspace, for example
+    	while accessing the file content by an editor, will be automatically asynchronously refreshed.
+    	If you want to refresh files this way, go to
+    	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Workspace)")'>
+    	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
+    	<b>Preferences > General > Workspace</b></a>
+		and select <b>Refresh on access</b>.</p>
+		 
+		<p><img src="images/lightweight-refresh.png" alt="Lightweight Refresh on Access"/></p>
     </td>
   </tr>
 
-  <tr id="open-resource-paths">
-    <td width="30%" valign="top" align="left">
-        <b>New features in Open Resource dialog</b>
-    </td>
-    <td width="70%" valign="top">
-        The <b>Open Resource</b> dialog supports three new features:
-        <p>• <b>Path patterns:</b> If the pattern contains a /, the part before the last / is used to match a path in the workspace:</p> 
-          <p><img src="images/open-resource-path.png" alt="Open Resource dialog with pattern '*/jface/w*/pa.html'"/></p> 
-        <br/>
-        <p>• <b>Relative paths:</b> For example, "./T" matches all files starting with T in the folder of the active editor or selection:</p>
-          <p><img src="images/open-resource-path-relative.png" alt="Open Resource dialog with pattern './T'"/></p> 
-        <br/>
-        <p>• <b>Closer items on top:</b> If the pattern matches many files with the same name, the files that are closer
-          to the currently edited or selected resource are shown on top of the matching items list.</p>
-          <p><img src="images/open-resource-boosting.png" alt="Open Resource dialog with pattern 'mak', matching many makefiles"/></p> 
+  <tr id="back-forward-with-mouse">
+    <td class="title">Back & Forward mouse buttons</td>
+    <td class="content">
+        The Back and Forward mouse buttons now move backward and forward in the editor navigation history.
     </td>
   </tr>
 
-   <tr id="platui-2">
-    <td width="30%" valign="top" align="left"><b>Progress shown in platform task bar</b></td>
-    <td width="70%" valign="top">Progress for long running operations is now shown in 
-    the platform task bar on platforms that support this feature.  Progress is shown for
-    long running tasks such as workbench startup, install, update, and repository synchronization.
-    <p> <img src="images/taskbarprogress.png" alt="Progress View and Win 7 Task Bar indicating the same progress" title="Progress in Win7 Task Bar"/></p>
+  <tr id="problems-view-icon">
+    <td class="title">The Problems view icon shows state</td>
+    <td class="content">
+        The <b>Problems</b> view icon now indicates whether the view contains warnings or errors.
+        This is especially useful when working with maximized editor area as it allows you
+        to see whether there are errors or warnings without going to the Problems view:
+        <p><img src="images/problems-view-icon.png" alt="Problems view icon"/></p>
+        <p>When the view is a fast view, the tool tip gives the details about the number of errors and warnings.</p>
     </td>
   </tr>
 
-   <tr id="platui-1">
-    <td width="30%" valign="top" align="left"><b>Canceling long-running operations in wizards</b></td>
-    <td width="70%" valign="top">There is now a stop button adjacent to the progress bar when a wizard is running
-       a long operation.  You can press the stop button (or the <b>Enter</b> or <b>Space</b> key) to cancel the operation
-       being shown in the progress bar.
-       <p> <img src="images/wizardstop.png" alt="Wizard with a progress bar and stop button" title="Wizard with Stop Button"/></p>
+  <tr id="taskitem-progress-overlay">
+    <td class="title">Job image overlay in task item</td>
+    <td class="content">When the progress of long running operations is shown in the
+    operating system task tray, the image associated with the operation is now also shown with the progress.
+    <p><img src="images/taskitem-progress-overlay.png" alt="Progress overlay in task item"/></p>
     </td>
   </tr>
 
-  <tr id="quick-access-keybindings">
-    <td width="30%" valign="top" align="left"><b>Quick Access now shows keybindings for commands</b></td>
-    <td width="70%" valign="top"><b>Quick Access</b> (<b>Ctrl+3</b>) now shows keybindings for commands so you can
-        save yourself from all that typing and just use the keyboard shortcut the next time you need
-        to run a command.
-      <p><img src="images/quickaccess-bindings.png"
-      alt="Quick Access dialog displaying two commands and their associated keybindings at the end of the command's description."/></p></td>
-  </tr>
-
-  <tr id="wizard-keywords">
-    <td width="30%" valign="top" align="left"><b>Search keywords in wizards</b></td>
-    <td width="70%" valign="top">The <b>File > New</b>, <b>File > Import...</b>,
-    and <b>File > Export...</b> wizards now support searching by keyword. You can type
-    a search term that doesn't appear in the wizard name, and the term will match against
-    search keywords registered for that wizard. For example if you search for "zip" or
-    "directory" in the import wizard, you will be shown the wizards for importing from
-    archives or the file system, respectively.
-    <p><img src="images/import-zip.png" alt="Keyword search in wizards"/></p>
-	</td>
-  </tr>
-
-  <tr id="workspace_local-history-limit-size">
-    <td width="30%" valign="top" align="left"><b>Local History pruning can be disabled</b></td>
-    <td width="70%" valign="top">The local history size constraints can now be disabled. 
-    Users that never want to discard history no longer need to wait on shutdown for 
-    history cleanup to occur. To disable history cleaning, go to
-    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.FileStates)")'>
-    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
-    <b>Preferences > General > Workspace > Local History</b></a>
-    and disable <b>Limit history size</b>.
-	Note that when this option is chosen, disk usage for the workspace local history 
-	will continue to grow indefinitely.
-	<p><img src="images/localHistoryLimitSize.png" alt="Limit history size"/></p></td>
-  </tr> 
-
-  <tr id="hideFVB">
-    <td width="30%" valign="top" align="left"><b>Hide empty fast view bars</b></td>
-    <td width="70%" valign="top">
-	In order to clean up the UI and gain some space in the trim area, there is a new preference on the
-	<a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Perspectives)")'>
-	<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
-	<strong>General > Perspectives</strong></a>
-	page that allows you to
-	hide the Fast View Bar when it's empty. Note that this option does not inhibit the functionality; if there are
-	fast views in the perspective (or you make a view a fast view) the bar will be shown regardless of the preference
-	setting.
-	<p>	<img src="images/hide-fvb.png" alt="Hide the fast view bar" /></p></td>
+  <tr id="mac-window-menu">
+    <td class="title">Mac standard menu items in Window menu</td>
+    <td class="content">The Window menu now sports the standard Mac menu items ("Minimize", "Zoom" and "Bring All to Front") on Cocoa.
+    <p><img src="images/mac-window-menu.png" alt="Minimize, Zoom & Bring All to Front"/></p>
+    </td>
   </tr>
 
-  <tr id="edit-link-location">
-    <td width="30%" valign="top" align="left"><b>Edit linked resource location</b></td>
-    <td width="70%" valign="top">Linked resource locations can now be changed
-    	by selecting the <b>Edit...</b> button in the <b>Resource Properties</b> page.
-    	<p><img src="images/edit-button-in-property.png" border="0" alt="Edit Button"/></p>
+  <tr id="mac-proxy-icon">
+    <td class="title">Document Proxy icons in Cocoa</td>
+    <td class="content">On Cocoa, Eclipse now supports the Document Proxy icons in the title bar of the window. You can drag it to other applications or Command+click to get the folder hierarchy.
+    <p><img src="images/mac-proxy-icon.png" alt="Document Proxy Icon for a Window in Cocoa"/></p>
     </td>
   </tr>
-
-  <tr id="file-drag-dialog">
-    <td width="30%" valign="top" align="left"><b>File and folder operation dialog</b></td>
-    <td width="70%" valign="top">When dragging files and folders from the operating system 
-    	shell (such as Windows Explorer) onto <b>Project Explorer</b>, a dialog appears 
-    	to let you choose how the files should be imported.
-    	<p>The dialog allows you to simply copy files and folders (the traditional operation)
-    	but also easily create linked resources and virtual folders hierarchies in a project folder 
-    	by simply drag and dropping files and folders.</p>
-    	<img src="images/import-type-dialog.png" border="0" alt="Import File Operation Dialog" />
-      <p>The dialog also creates project path variable relative linked resources automatically,
-      	so that projects remains portable while using linked resources.</p>
-      </td>
+  
+  <tr id="derived-file-encodings">
+    <td class="title">Store the encoding of derived resources separately</td>
+    <td class="content">
+    You can now store encodings of derived resources in a separate preferences file.
+	Usually the encodings for all files in each project are stored in one preferences file. 
+	If you are using a version control system and the preferences file is shared, the encodings 
+	for all resources are shared along with it. This new option allows you to avoid sharing
+	encoding information for derived files, which are not typically shared in a version
+	control system.
+	<p>
+	If you want to store encoding settings of derived resources separately, go to
+	<b>Project > Properties > Resource</b> and select the <b>Store the encoding of derived resources
+	separately</b> option.
+	</p>
+	  
+	<img border="0" src="images/separate-derived-encodings.png" 
+	alt="Select Store the encoding of derived resources separately option"/>
+    </td>
   </tr>
 
-      <!-- ******************** User Assistance ********************** -->
-
       <!-- ******************** Install/Update ********************** -->
 
-    <tr> 
-      <td colspan="2"><a name="Install"></a> <div style="font-size: 20px; font-weight: bold;">Install/Update Changes</div></td>
-    </tr>
-
-  <tr id="p2-license"> 
-    <td width="30%" valign="top" align="left"><b>Grouping by license in install wizard</b></td>
-    <td width="70%" valign="top">Software to install is now grouped by license
-    in the <b>Review Licenses</b> page of the install wizard. This means you no longer need to select each item being
-    installed to ensure all applicable licenses have been reviewed.
-     <p><img src="images/p2-license.png" alt="Install wizard license review page"/></p>
+	<tr>
+    <td id="Install" class="section" colspan="2">
+      <h2>Install/Update Changes</h2>
     </td>
+  	</tr>
+
+  <tr id="Plat-install-from-file">
+    <td class="title">Install software from file</td>
+    <td class="content">
+	Sharing or persisting the set of plugins constituting your eclipse installation is now made 
+	easy by the addition of new import / export functionality. The export functionality, available from 
+    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.export(exportWizardId=org.eclipse.equinox.p2.replication.export)")'>
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the export wizard"/>
+    <b>File > Export > Install > Installed Software Items to File</b></a>
+	, will create a description file 
+	of your installation. This description file can then be used to recreate the installation by using
+    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.equinox.p2.replication.import)")'>
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the import wizard"/>
+    <b>File > Import > Install > Install Software Items from File</b></a>.
+    <p><img src="images/export-plugins.png" alt="Export plug-ins to file"/></p>
+	    </td>
   </tr>
 
-  <tr id="ntlm-support"> 
-    <td width="30%" valign="top" align="left"><b>NTLMv2 proxy support</b></td>
-    <td width="70%" valign="top">Support has been added to the platform for communicating
-    with NT Lan Manager proxies (NTLMv2). You can now install and update software
-    in the Eclipse user interface when running behind proxies that use this protocol.</td>
+  <tr id="Plat-install-from-product">
+    <td class="title">Install software from another product</td>
+    <td class="content">You can now easily install software directly from another product.
+    Select
+    <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.file.import(importWizardId=org.eclipse.equinox.p2.replication.importfrominstallation)")'>
+    <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the import wizard"/>
+    <b>File > Import > Install > From Existing Installation</b></a>
+    , then select
+    the location of any locally installed Eclipse-based product. You can then select
+    what software items from that product you want to install in the current application.
+    <p><img src="images/import-plugins.png" alt="Import plug-ins from another product"/></p>
+    </td>
   </tr>
 
-  <tr id="p2ui-1">
-    <td width="30%" valign="top" align="left"><b>Comparing configurations in the Installation History</b></td>
-    <td width="70%" valign="top">The <b>Installation History</b> page now allows you to compare two different
-       installation history configurations.  Now you can more easily see what was installed, uninstalled, or updated
-       in the various installation configurations.  You can also delete unwanted installation configurations
-       in order to reduce clutter and free up disk space.
-       <p> <img src="images/installhistory.png" alt="Compare button in the Installation History Page" title="Installation History Page"/></p>
+  <tr id="install-history-filter">
+    <td class="title">Filtered install history</td>
+    <td class="content">
+      Install states resulting from non user-initiated install operations are now filtered out 
+      of the <b>Installation History</b> list.
+      For example, adding bundles in the <tt>dropins</tt> folder will no longer add
+      extra entries to the install history. Previously, these entries were shown,
+      but could not be reverted and the details of what changed were not shown.
+      <p><img src="images/install-history.png" alt="Installation history"/></p>
     </td>
   </tr>
 
     <!-- ******************** Text ********************** -->
-    <tr> 
-      <td colspan="2"><a name="Text"></a> <div style="font-size: 20px; font-weight: bold;">Editor Changes</div>
-      <p>
-      <em>These changes apply to all textual editors in the SDK.</em></p></td>
-    </tr>
-
-  <tr id="resize-popups-gtk">
-    <td width="30%" valign="top" align="left">
-        <b>Resize content assist and hover pop-ups under Linux</b>
+	<tr>
+    <td id="Text" class="section" colspan="2">
+      <h2>Editor Changes</h2>
     </td>
-    <td width="70%" valign="top">
-        Content assist and most hover pop-ups are now resizable in textual editors under Linux/GTK.
-       <p><img src="images/resize-popups-gtk.png" alt="Content assist popup with resize trim"/></p>
+  	</tr>
+
+  <tr id="open-with-menu">
+    <td class="title">'Open With' context menu for textual editors</td>
+    <td class="content">
+        Textual editors now have an <b>Open With</b> context menu which allows you to open a different editor on the same input:
+       <p><img src="images/open-with-context-menu.png" alt="Open With context menu"/></p>
     </td>
   </tr>
 
-  <tr id="all-folded-annotations-visible">
-    <td width="30%" valign="top" align="left">
-        <b>All folded annotations are now visible in the rulers</b>
-    </td>
-    <td width="70%" valign="top">
-        Until now, only errors and warnings were shown in the vertical and overview ruler when code is folded. As of this release,
-        all annotations from the folded region are visible:
-        <p><img src="images/visible-folded-annotations.png" alt="Vertical and overview ruler annotations for folded code"/></p> 
+  <tr id="shift-find-replace">
+    <td class="title">'Shift' reverses search in Find/Replace dialog</td>
+    <td class="content">
+        Pressing the <b>Shift</b> key while invoking a search in the <b>Find/Replace</b> dialog will temporarily reverse the current direction setting.
+        For example, if the current direction setting is 'Forward', then <b>Shift+Enter</b> will do the search in 'Backward' direction.
     </td>
   </tr>
+  
+  <tr id="new-whitespace-rendering-options">
+    <td class="title">New options for whitespace rendering in textual editors</td>
+    <td class="content">
+        The <b>Show Whitespace Characters</b> feature for textual editors now provides additional options:
+        <p><img src="images/show-whitespace-characters.png" alt="Show Whitespace Characters"/></p>
+        <p>These options can be configured by clicking the 'whitespace characters' link on the
+        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.GeneralTextEditor)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
+        <b>General > Editors > Text Editors</b></a>
+        preference page.</p>
+    </td>
+  </tr> 
 
-  <tr id="ruler-annotation-tooltip">
-    <td width="30%" valign="top" align="left"><b>Show ruler annotation tooltip command</b></td>
-    <td width="70%" valign="top">The annotation tooltip that appears when you hover over 
-    an icon in the vertical ruler on the left of a textual editor can now also be shown by pressing a key sequence. 
-        However, out of the box no key sequence is defined for that. Go to the
+  <tr id="open-hyperlink-command">
+    <td class="title">New 'Open Hyperlink' command</td>
+    <td class="content">
+        The new <b>Open Hyperlink</b> command opens one or more hyperlinks at the current caret location.
+        The command has been added to the <b>Navigate</b> menu for the Java and properties file editors and can also be used in other text editors by
+        assigning a key binding on the
         <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'>
         <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
-        <strong>General > Keys</strong></a>
-        preference page to assign a key sequence to the <b>Show Ruler Annotation Tooltip</b> command.      
-        <p><img src="images/show-ruler-annotation-tooltip.png" alt="Text editor with ruler annotation tooltip"/></p>         
+        <b>General > Keys</b></a>
+        preference page.
+       <p>
+       <img src="images/open-hyperlink-menu-item.png" alt="Open Hyperlink action in menu"/>   
+       </p>
+       <p>
+       <img src="images/open-hyperlink-popup.png" alt="Open Hyperlink popup with 2 entries"/>
+       </p>
+       <p>The command opens the hyperlink directly if there's only one link available. Otherwise, it shows a chooser with all 
+       the available hyperlinks at that location. The links are the same as when you move the mouse with <b>Ctrl</b> pressed.</p>
     </td>
   </tr>
 
-  <tr id="save-unmappable-chars">
-    <td width="30%" valign="top" align="left">
-        <b>Better handling of unmappable characters on save</b>
-    </td>
-    <td width="70%" valign="top">
-        There is now better support for characters that cannot be saved with the current encoding:
-       <p><img src="images/save-dialog.png" alt="Save dialog in case of unmappable characters"/></p> 
+    <!-- ******************* Team/CVS ******************** -->
+	<tr>
+    <td id="TeamCVS" class="section" colspan="2">
+      <h2>Team/CVS Changes</h2>
     </td>
-  </tr>
+  	</tr>
 
 
-  <tr id="print-dialog-remembers-options">
-    <td width="30%" valign="top" align="left">
-        <b>Print dialog remembers user selected options </b>
-    </td>
-    <td width="70%" valign="top">
-    	The <b>Print</b> dialog now remembers the following user selected options for all textual editors until the workbench is shutdown:
-    	<ul>
-    		<li>Selected printer</li>
-    		<li>Print to file</li>
-    		<li>Printer preferences: These are printer specific options like paper size, page order orientation etc.</li>
-    	</ul>
+  <tr id="Plat-cvs-branches">
+    <td class="title">Branch column in History view</td>
+    <td class="content">There is now a column showing branches in the History view when using CVS.
+    <p><img src="images/branch-column.png" alt="Branch Column"/></p>
     </td>
   </tr>
-
-    <!-- ******************* Team/CVS ******************** -->
-    <tr> 
-      <td colspan="2"><a name="TeamCVS"></a> <div style="font-size: 20px; font-weight: bold;">Team/CVS 
-          Changes</div></td>
-    </tr>
-
-  <tr id="open-in-compare-editor.png">
-    <td width="30%" valign="top" align="left"><b>Enhanced Open in Compare editor menu</b></td>
-    <td width="70%" valign="top">    
-    The context menu of the <b>Compare</b> editor contains <b>Open</b> and <b>Open With</b> actions, 
-    which open the file in full-fledged editors. Now, these actions set the selection and the caret position 
-    in the newly opened editor based on the selection in <b>Compare Editor</b>.
-    <p><img src="images/open-in-compare-editor.png" alt="Open in Compare Editor" />
-    </p>
-      </td>
-  </tr>
-
-  <tr id="patch-sync-view">
-    <td width="30%" valign="top" align="left"><b>Apply patch in Synchronize view</b></td>
-    <td width="70%" valign="top">
-    	The <b>Synchronize</b> view now allows to synchronize with a patch either by pasting
-    	the patch into the view or by using the <b>Synchronize</b> wizard. If you prefer
-    	this new way of applying patches, you can replace the modal <b>Apply Patch</b>
-    	dialog with the <b>Synchronize</b> view by selecting the 
-    	new <b>Apply patch in Synchronize view</b> option on the
+  
+
+  <tr id="show-left-author">
+    <td class="title">Compare editor shows author on left side</td>
+    <td class="content">
+       The compare editors now also show the author on the left side:
+       <p>
+       <img src="images/author.png" alt="Show left author"/>
+       </p>
+       <p>Note that the authors are only shown if <b>Show the file author in compare editors</b> is enabled on the
         <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.team.ui.TeamPreferences)")'>
         <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
     	<b>Team</b></a>
-    	preference page:
-		<p><img alt="Apply patch in Synchronize view preference" title="Apply patch in Synchronize view preference"
-		src="images/apply-patch-in-sync-view-preference.png"/></p>
-
-		<p>When synchronizing with a patch the drop-down menu in the <b>Synchronize</b> view offers patch options
-		including <b>Reverse</b>, <b>Fuzz Factor...</b>, <b>Generate .rej File</b> 
-		and <b>Ignore Leading Path Segments...</b>.</p>
-    	<p><img src="images/patch-options-in-sync-view.png" alt="Patch options in Synchronize view"/></p>
-		<p>Moreover the <b>Synchronize with Patch</b> wizard displays a page with inaccessible projects 
-		referred from within the patch. Projects selected on this page will be opened prior to synchronization.</p>	
-        <p><img src="images/inaccessible-projects-page.png" alt="Inaccessible Projects page" /></p>
+       preference page.</p>
     </td>
   </tr>
 
-  <tr id="workspace_sync-view-link-with-editor">
-    <td width="30%" valign="top" align="left"><b>"Link with Editor" in Synchronize view</b></td>
-    <td width="70%" valign="top">The <b>Synchronize</b> view can now be linked 
-    with the active editor. Moreover, the view is now one of the 'Show In' targets when in the Synchronize perspective.
-    <p><img src="images/syncViewLinkWithEditor.png" alt="Link with Editor" /></p></td>
+  <tr id="defaultSshHomeOnWindows">
+    <td class="title">Default ssh home directory on Windows</td>
+    <td class="content">
+		The default ssh home directory on Windows platform has been changed
+		from <b>ssh</b> to <b>.ssh</b>. This way your keys and known hosts
+		will be shared between Eclipse and other applications by default.
+		If you were using <b>ssh</b> directory before, there is no need
+		to change your home directory manually. Eclipse will recognize it
+		and set <b>ssh</b> as the home directory for you.
+		<p>To check your current ssh home directory see
+        <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jsch.ui.SSHPreferences)")'>
+        <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens the preference page"/>
+		<b>Preferences > General > Network Connections > SSH2</b></a>.</p>
+		<p><img src="images/default-ssh-dir.png" alt="Default ssh home directory"/></p>
+    </td>
   </tr>
 
-  <tr id="workspace_commit-wizard-logical-models">
-    <td width="30%" valign="top" align="left"><b>Logical models in Commit wizard</b></td>
-    <td width="70%" valign="top">The <b>Commit</b> wizard now shows logical 
-    models just like the <b>Synchronize</b> view does.
-    <p><img src="images/commitWizardLogicalModels.png" alt="Commit Wizard" /></p></td>
+  <tr id="disable-compare-capping">
+    <td class="title">Disable capping when comparing large documents</td>
+    <td class="content">You can now disable the capping mechanism to speed up finding differences in large documents. 
+    In cases where the capping occurs, the result can either be correct or it can display too many changes, but it never misses any change.
+    Please remember that with this option enabled, the calculation may take more time.
+    <p><img src="images/disableCapping.png" alt="Apply Patch wizard" /></p></td>
   </tr>
 
-  <tr id="workspace_sorted-diffs-in-patch">
-    <td width="30%" valign="top" align="left"><b>Sorted diffs in patches</b></td>
-    <td width="70%" valign="top">The <b>Create Patch</b> action now creates patches 
-    that contain changes sorted by project and file path. This makes comparing patches much easier.</td>
-  </tr>
+    <!-- ******************** Debug ********************* -->
+	<tr>
+    <td id="Debug" class="section" colspan="2">
+      <h2>Debug Changes</h2>
+    </td>
+  	</tr>
 
-  <tr id="config-branches">
-    <td width="30%" valign="top" align="left"><b>Usability enhancement to Configure Branches and Versions</b></td>
-    <td width="70%" valign="top">
-      	Now the <b>Configure Branches and Versions</b> action in the repository view is enabled for multiple selections. 
-      	This means that you are able to choose any file in the selection as a tag source for all selected folders.
-		<p><img src="images/configure-branches.png" alt="Configure Branches and Versions for multiple selection"/></p>
-	</td>
+  <tr id="breakpoint_undo">
+    <td class="title">Undo support for breakpoints</td>
+    <td class="content">
+      If you accidentally removed a breakpoint from the editor's vertical ruler or the <b>Breakpoints</b> view, you can now get it back using the standard undo functionality
+      - <b>Edit > Undo Delete Breakpoint (Ctrl+Z)</b> - in the Breakpoints view or any other view that works against the global undo history.
+    </td>
   </tr>
 
-  <tr id="matching-might-not-be-optimal">
-    <td width="30%" valign="top" align="left"><b>Warning about possible inaccuracy in comparison result</b></td>
-    <td width="70%" valign="top">
-	The compare framework caps the result accuracy for large files. This used to happen silently, which
-	confused users. Now when the faster algorithm is used a warning label appears.
-	<p><img alt="Mathing might not be optimal label" title="Matching might not be optimal label"
-		src="images/matching-might-not-be-optimal.png"/>
-	</p>
+  <tr id="Plat-expressionview">
+    <td class="title">Edit with keyboard in Expressions view</td>
+    <td class="content">
+    When adding or editing watch expressions in the Expressions view, you now have the option 
+    of activating the table cell for editing using the <b>F2</b> key. 
+    This shortcut works for existing expressions and for the <b>Add new expression</b> entry.
     </td>
   </tr>
 
-    <!-- ******************** Debug ********************* -->
-    <tr> 
-      <td colspan="2"><a name="Debug"></a> <div style="font-size: 20px; font-weight: bold;">Debug 
-          Changes</div></td>
-    </tr>
-
-	<tr id="expressionsviewcolumnsupport">
-	<td align="left" valign="top" width="30%"><b>Columns in Expressions view
-	</b></td>
-	<td valign="top" width="70%">The <b>Expressions</b> view now supports column display
-	just like the <b>Variables</b> view. To switch to a column 
-	presentation select <b>Layout > Show Columns</b> from the view's menu.
-	<p><img alt="Expressions View with Columns" title="Expressions View with Columns"
-	src="images/expressions-columns.png"/><br/><br/></p>
-	<p>Users can also quickly edit existing expressions in-line by clicking on the 
-	expression in the <b>Name</b> column.  To add a	new expression, click on the
-	<b><i>Add new expression</i></b> place-holder at the bottom of the list.
-	</p>
-	</td>
-	</tr>
-
-	<tr id="breakpointdetails">
-	<td align="left" valign="top" width="30%"><b>Breakpoint detail panes
-	</b></td>
-	<td valign="top" width="70%">The breakpoints view now provides detail panes
-	to display and edit breakpoint properties. Use the view's <b>Layout</b> menu
-	to configure the orientation of the detail pane or hide it. 
-	<p><img alt="Breakpoint Detail Panes" title="Breakpoint Detail Panes"
-	src="images/breakpoint-details.png"/><br/><br/></p>
-	<p>For example, the detail pane for a Java line breakpoint allows its
-	condition to be edited in place with content assist. Use the <b>File > Save (Ctrl-S)</b>
-	action to save a condition that has been edited. Check box and radio button properties are
-	saved immediately.
-	</p>
-	</td>
-	</tr>
-
     <!-- ****************** END OF N&N TABLE ****************** -->
 </tbody>
 </table>
diff --git a/eclipse/plugins/org.eclipse.platform/EclipseSplash37_Indigo.psd b/eclipse/plugins/org.eclipse.platform/EclipseSplash37_Indigo.psd
new file mode 100644
index 0000000..e0f014c
Binary files /dev/null and b/eclipse/plugins/org.eclipse.platform/EclipseSplash37_Indigo.psd differ
diff --git a/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF
index 54485c6..472c8be 100644
--- a/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.platform/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.platform; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: platform.jar
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.platform/intro/whatsnewExtensionContent3.xml b/eclipse/plugins/org.eclipse.platform/intro/whatsnewExtensionContent3.xml
index 899529d..5292031 100644
--- a/eclipse/plugins/org.eclipse.platform/intro/whatsnewExtensionContent3.xml
+++ b/eclipse/plugins/org.eclipse.platform/intro/whatsnewExtensionContent3.xml
@@ -2,8 +2,8 @@
 <introContent>
   	<extensionContent id="org.eclipse.ui.workbench.migration" name="Porting Guide" alt-style="css/whatsnew.properties" style="css/whatsnew.css" path="whatsnew/@">
 		<group filter="plugin=org.eclipse.platform.doc.isv" style-id="content-group" id="content-group">
-       		<link label="Migration from the previous release" url="http://org.eclipse.ui.intro/showHelpTopic?id=/org.eclipse.platform.doc.isv/porting/eclipse_3_6_porting_guide.html" id="migration" style-id="content-link">
-          		<text>Learn what you need to do to make your old code work in Eclipse 3.6</text>
+       		<link label="Migration from the previous release" url="http://org.eclipse.ui.intro/showHelpTopic?id=/org.eclipse.platform.doc.isv/porting/eclipse_3_7_porting_guide.html" id="migration" style-id="content-link">
+          		<text>Learn what you need to do to make your old code work in Eclipse 3.7</text>
        		</link>
        	</group>
   	</extensionContent>
diff --git a/eclipse/plugins/org.eclipse.platform/plugin.properties b/eclipse/plugins/org.eclipse.platform/plugin.properties
index 5a10b42..12fcff0 100644
--- a/eclipse/plugins/org.eclipse.platform/plugin.properties
+++ b/eclipse/plugins/org.eclipse.platform/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@ providerName=Eclipse.org
 productName=Eclipse Platform
 productBlurb=Eclipse Platform\n\
 \n\
-Version: 3.6.2\n\
+Version: 3.7.0\n\
 Build id: {0}\n\
 \n\
 (c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
diff --git a/eclipse/plugins/org.eclipse.platform/splash.bmp b/eclipse/plugins/org.eclipse.platform/splash.bmp
index cd72727..5ab2b3e 100644
Binary files a/eclipse/plugins/org.eclipse.platform/splash.bmp and b/eclipse/plugins/org.eclipse.platform/splash.bmp differ
diff --git a/eclipse/plugins/org.eclipse.rcp/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.rcp/META-INF/MANIFEST.MF
index a50060c..0e04323 100644
--- a/eclipse/plugins/org.eclipse.rcp/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.rcp/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.rcp; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Eclipse-AutoStart: true
diff --git a/eclipse/plugins/org.eclipse.rcp/about.properties b/eclipse/plugins/org.eclipse.rcp/about.properties
index f6d85d0..bcaa894 100644
--- a/eclipse/plugins/org.eclipse.rcp/about.properties
+++ b/eclipse/plugins/org.eclipse.rcp/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse RCP\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/rcp
 
diff --git a/eclipse/plugins/org.eclipse.rcp/notice.html b/eclipse/plugins/org.eclipse.rcp/notice.html
index c6af966..dc5aefd 100644
--- a/eclipse/plugins/org.eclipse.rcp/notice.html
+++ b/eclipse/plugins/org.eclipse.rcp/notice.html
@@ -1,79 +1,162 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
+<!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=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head><body lang="EN-US">
 <h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
+<p>February 1, 2011</p>
 
 <h3>Usage Of Content</h3>
 
 <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
    CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
    OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
    NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
    CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-   
-<h3>Applicable Licenses</h3>   
-   
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   ("EPL").  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository ("Repository") in CVS
-   modules ("Modules") and made available as downloadable archives ("Downloads").</p>
-   
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
+
 <ul>
-	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
-	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
-	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named "features".  Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
       and/or Fragments associated with that Feature.</li>
-	<li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>   
- 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses").  Abouts and Feature Licenses may be located in any directory of a Download or Module
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
 including, but not limited to the following locations:</p>
 
 <ul>
-	<li>The top-level (root) directory</li>
-	<li>Plug-in and Fragment directories</li>
-	<li>Inside Plug-ins and Fragments packaged as JARs</li>
-	<li>Sub-directories of the directory named "src" of certain Plug-ins</li>
-	<li>Feature directories</li>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
 </ul>
-		
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license ("Feature Update License") during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
 that directory.</p>
 
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
 OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
 
 <ul>
-	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
-	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
 </ul>
 
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
+</ol>
 
 <h3>Cryptography</h3>
 
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-   
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
-</body>
-</html>
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body></html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.releng.tools/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.releng.tools/.settings/org.eclipse.jdt.core.prefs
index 8e4f576..ba9b9a8 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.releng.tools/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Wed Apr 04 08:57:47 GMT 2007
+#Fri Jun 04 12:52:28 CEST 2010
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
@@ -7,6 +7,71 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=error
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.releng.tools/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.releng.tools/META-INF/MANIFEST.MF
index e421337..8c38081 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.releng.tools/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %PluginName
 Bundle-SymbolicName: org.eclipse.releng.tools; singleton:=true
-Bundle-Version: 3.5.200.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-ClassPath: tools.jar
 Bundle-Activator: org.eclipse.releng.tools.RelEngPlugin
 Bundle-Vendor: %PluginProvider
diff --git a/eclipse/plugins/org.eclipse.releng.tools/plugin.xml b/eclipse/plugins/org.eclipse.releng.tools/plugin.xml
index b5cc617..ec0bf59 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/plugin.xml
+++ b/eclipse/plugins/org.eclipse.releng.tools/plugin.xml
@@ -33,6 +33,13 @@
                menubarPath="replaceWithMenu/replaceWithGroup"
                id="org.eclipse.releng.tools.replaceWithReleased">
          </action>
+         <action
+               label="Fix Copyrights"
+               class="org.eclipse.releng.tools.AdvancedFixCopyrightAction"
+               menubarPath="additions"
+               enablesFor="+"
+               id="org.eclipse.releng.tools.advancedFixCopyrights">
+         </action>
       </objectContribution>
       <objectContribution
             adaptable="true"
@@ -58,6 +65,13 @@
                menubarPath="replaceWithMenu/replaceWithGroup"
                id="org.eclipse.releng.tools.replaceWithReleased">
          </action>
+         <action
+               label="Fix Copyrights"
+               class="org.eclipse.releng.tools.AdvancedFixCopyrightAction"
+               menubarPath="additions"
+               enablesFor="+"
+               id="org.eclipse.releng.tools.advancedFixCopyrights">
+         </action>
       </objectContribution>
       <objectContribution
             adaptable="true"
@@ -76,31 +90,7 @@
                menubarPath="team.main/group1"
                id="org.eclipse.releng.cvs.TagMap">
          </action>
-      </objectContribution>
-      <objectContribution
-      		adaptable="true"
-            objectClass="org.eclipse.core.resources.IProject"
-            id="org.eclipse.releng.internal.tools.CopyrightContribution">
-         <action
-               label="Eclipse/IBM Fix Copyrights..."
-               class="org.eclipse.releng.tools.FixCopyrightAction"
-               menubarPath="additions"
-               enablesFor="+"
-               id="org.eclipse.releng.tools.fixCopyrights">
-         </action>
-      </objectContribution>
-      <objectContribution
-            adaptable="true"
-            objectClass="org.eclipse.core.resources.IResource"
-            id="org.eclipse.releng.internal.tools.AdvancedCopyrightContribution">
-         <action
-               label="Fix Copyrights"
-               class="org.eclipse.releng.tools.AdvancedFixCopyrightAction"
-               menubarPath="additions"
-               enablesFor="+"
-               id="org.eclipse.releng.tools.advancedFixCopyrights">
-         </action>
-      </objectContribution>
+      </objectContribution>     
    </extension>
    
    	<!-- ********** Action Sets ************** -->
@@ -128,12 +118,11 @@
             class="org.eclipse.releng.tools.preferences.CopyrightPreferencePage"
             id="org.eclipse.releng.tools.preferences.CopyrightPreferencePage">
       </page>
-	</extension>
-	<extension point="org.eclipse.ui.preferencePages">
       <page
             class="org.eclipse.releng.tools.preferences.MapProjectPreferencePage"
             id="org.eclipse.releng.tools.preferences.MapProjectPreferencePage"
-            name="Map Project Selection">
+            name="Releng Map Project Selection"
+            category="org.eclipse.team.ui.TeamPreferences">
       </page>
    </extension>
 	
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/AdvancedFixCopyrightAction.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/AdvancedFixCopyrightAction.java
index 103decb..560e038 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/AdvancedFixCopyrightAction.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/AdvancedFixCopyrightAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,11 +23,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.releng.tools.preferences.RelEngCopyrightConstants;
+import org.eclipse.team.core.RepositoryProvider;
+import org.eclipse.team.core.RepositoryProviderType;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -36,16 +35,22 @@ import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubProgressMonitor;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.releng.tools.preferences.RelEngCopyrightConstants;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.core.RepositoryProviderType;
+
 import org.eclipse.ui.IActionDelegate;
 import org.eclipse.ui.IObjectActionDelegate;
 import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkingSet;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.console.ConsolePlugin;
@@ -100,19 +105,7 @@ public class AdvancedFixCopyrightAction implements IObjectActionDelegate {
             resources = new ArrayList();
             Iterator elements = selection.iterator();
             while (elements.hasNext()) {
-                Object next = elements.next();
-                if (next instanceof IResource) {
-                    resources.add(next);
-                    continue;
-                }
-                if (next instanceof IAdaptable) {
-                    IAdaptable a = (IAdaptable) next;
-                    Object adapter = a.getAdapter(IResource.class);
-                    if (adapter instanceof IResource) {
-                        resources.add(adapter);
-                        continue;
-                    }
-                }
+                addResource(elements.next(), resources);
             }
         }
         if (resources != null && !resources.isEmpty()) {
@@ -123,6 +116,20 @@ public class AdvancedFixCopyrightAction implements IObjectActionDelegate {
         return new IResource[0];
     }
 
+    private void addResource(Object element, ArrayList resources) {
+        if (element instanceof IResource) {
+        	resources.add(element);
+        } else if (element instanceof IWorkingSet) {
+        	IWorkingSet ws = (IWorkingSet) element;
+        	IAdaptable[] elements= ws.getElements();
+        	for (int i= 0; i < elements.length; i++)
+        		addResource(elements[i], resources);
+        } else if (element instanceof IAdaptable) {
+        	IAdaptable a = (IAdaptable) element;
+        	addResource((IResource)a.getAdapter(IResource.class), resources);
+        }
+    }
+
     /**
      * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
      */
@@ -156,7 +163,7 @@ public class AdvancedFixCopyrightAction implements IObjectActionDelegate {
                     RepositoryProviderCopyrightAdapter adapter = createCopyrightAdapter(results);
                     if(adapter == null) {
             			if(!RelEngPlugin.getDefault().getPreferenceStore().getBoolean(RelEngCopyrightConstants.USE_DEFAULT_REVISION_YEAR_KEY)) {
-            				throw new CoreException(new Status(IStatus.ERROR, RelEngPlugin.ID, 0, "The selected resources are not shared in a team repository", null));
+            				throw new CoreException(new Status(IStatus.ERROR, RelEngPlugin.ID, 0, "None of the selected resources is shared in a team repository", null));
             			}
                     } else {
                     	adapter.initialize(new SubProgressMonitor(monitor, 100));
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BatFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BatFile.java
index abe5678..7105a03 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BatFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BatFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.regex.Pattern;
 
 import org.eclipse.core.resources.IFile;
 
+
 public class BatFile extends SourceFile {
 
 	public BatFile(IFile file) {
@@ -22,7 +23,7 @@ public class BatFile extends SourceFile {
 	}
 
 	//Optional Whitespace, #, optional whitespace, then at least 2 non-word chars repeated till EOL 
-	private static Pattern p = Pattern.compile("\\s*@?[rR][eE][mM]\\s+\\W{2,}\\s*");
+	private static Pattern p = Pattern.compile("\\s*@?[rR][eE][mM]\\s+\\W{2,}\\s*"); //$NON-NLS-1$
 	
 	public boolean isCommentStart(String aLine) {
 		return p.matcher(aLine).matches();
@@ -35,11 +36,11 @@ public class BatFile extends SourceFile {
 	}
 
 	public String getCommentStart() {
-		return "@rem **";  //unused, Pattern matcher above will be used instead
+		return "@rem **";  //unused, Pattern matcher above will be used instead //$NON-NLS-1$
 	}
 
 	public String getCommentEnd() {
-		return "**";  //unused, Pattern matcher above will be used instead
+		return "**";  //unused, Pattern matcher above will be used instead //$NON-NLS-1$
 	}
 	
 	public int getFileType() {
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BlockComment.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BlockComment.java
index 2b3eff8..ada8b5c 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BlockComment.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/BlockComment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 
+
 /**
  * @author droberts
  */
@@ -24,7 +25,7 @@ public class BlockComment {
 	int start;
 	int end;
 	private String contents;
-	private static String newLine = System.getProperty("line.separator");
+	private static String newLine = System.getProperty("line.separator"); //$NON-NLS-1$
 	private String copyrightHolder;
 	private List nonIBMContributors = new ArrayList();
 	private String commentEnd;
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CFile.java
index 965a988..4e2958a 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.releng.tools;
 
+
 import org.eclipse.core.resources.IFile;
 
 public class CFile extends SourceFile {
@@ -19,11 +20,11 @@ public class CFile extends SourceFile {
 	}
 
 	public String getCommentStart() {
-		return "/*";
+		return "/*"; //$NON-NLS-1$
 	}
 
 	public String getCommentEnd() {
-		return "*/";
+		return "*/"; //$NON-NLS-1$
 	}
 	
 	public int getFileType() {
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSCopyrightAdapter.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSCopyrightAdapter.java
index 25ea6f5..ca2739d 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSCopyrightAdapter.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSCopyrightAdapter.java
@@ -44,6 +44,10 @@ public class CVSCopyrightAdapter extends RepositoryProviderCopyrightAdapter {
 					//the last update was a copyright checkin - ignore
 					return 0;
 				}
+				if (logComment.indexOf("restore HEAD after accidental deletion") != -1) {
+					//the last update was the SWT accidental deletion of HEAD in 2009 - ignore
+					return 0;
+				}
 				
 				Calendar calendar = Calendar.getInstance();
 				calendar.setTime(entry.getDate());
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSTagHelper.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSTagHelper.java
index 3db25d6..ced41ff 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSTagHelper.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CVSTagHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,13 +11,17 @@
 package org.eclipse.releng.tools;
 
 import java.util.ArrayList;
+
+import org.eclipse.releng.tools.preferences.MapProjectPreferencePage;
+import org.eclipse.team.internal.ccvs.core.CVSTag;
+
+import org.eclipse.core.runtime.CoreException;
+
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
+
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.releng.tools.preferences.MapProjectPreferencePage;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
 
 /**
  * This is a helper class used for obtaining CVSTags and checking for projects that have no corresponding
@@ -60,13 +64,19 @@ public class CVSTagHelper {
 	 * @throws CVSException
 	 */
 	private CVSTag getTag(IResource resource) {
-		MapProject selectedMapProject = getSelectedMapProject();
-		if (selectedMapProject == null)
-			return CVSTag.DEFAULT;
-		MapEntry entry = selectedMapProject.getMapEntry(resource.getProject());
-		if (entry == null)
-			return CVSTag.DEFAULT;
-		return entry.getTag();
+		MapProject selectedMapProject= null;
+		try {
+			selectedMapProject= getSelectedMapProject();
+			if (selectedMapProject == null)
+				return CVSTag.DEFAULT;
+			MapEntry entry = selectedMapProject.getMapEntry(resource.getProject());
+			if (entry == null)
+				return CVSTag.DEFAULT;
+			return entry.getTag();
+		} finally {
+			if (selectedMapProject != null)
+				selectedMapProject.dispose();
+		}
 	}
 
 	//returns the MapProject that was selected by the user in the MapProjectSelectionWizard
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CompareLocalToMap.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CompareLocalToMap.java
index 71a60e0..312bb18 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CompareLocalToMap.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CompareLocalToMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,18 +11,29 @@
 package org.eclipse.releng.tools;
 
 import java.lang.reflect.InvocationTargetException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.preference.IPreferenceStore;
+
 import org.eclipse.releng.tools.preferences.MapProjectPreferencePage;
-import org.eclipse.team.internal.ccvs.core.*;
+import org.eclipse.team.internal.ccvs.core.CVSCompareSubscriber;
+import org.eclipse.team.internal.ccvs.core.CVSException;
+import org.eclipse.team.internal.ccvs.core.CVSTag;
 import org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction;
 import org.eclipse.team.internal.ccvs.ui.subscriber.CompareParticipant;
 import org.eclipse.team.ui.TeamUI;
 import org.eclipse.team.ui.synchronize.ISynchronizeParticipant;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.OperationCanceledException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceProxy;
+import org.eclipse.core.resources.IResourceProxyVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+
 /**
  * This class compares the locally selected projects againsts the versions
  * found in the releng map files. The releng map files are searched for in the 
@@ -30,6 +41,7 @@ import org.eclipse.team.ui.synchronize.ISynchronizeParticipant;
  */
 public class CompareLocalToMap extends WorkspaceAction {
 	
+
 	/**
 	 * Returns true if the super would enable the option *and*
 	 * only projects are selected.  There is no concept of "releasing"
@@ -41,17 +53,46 @@ public class CompareLocalToMap extends WorkspaceAction {
 		if (!super.isEnabled())
 			return false;
 		
-		//if any of the projects in the current workspace contain valid map files, return true
-		IProject[] workspaceProjects = RelEngPlugin.getWorkspace().getRoot().getProjects();
-        for (int i=0; i<workspaceProjects.length; i++) {
-        	try {
-    			if (new MapProject(workspaceProjects[i]).getValidMapFiles().length != 0)
-    				return true;
-    		} catch (CoreException e) {
-        		//do nothing
-    		}
-        }
-        return false;
+		return hasProjectFromMapFile();
+	}
+
+	static boolean hasProjectFromMapFile() {
+		final String FOUND= new String();
+		try {
+			final MapFile[] mapFiles= MapFile.findAllMapFiles(ResourcesPlugin.getWorkspace().getRoot());
+
+			IResourceProxyVisitor visitor= new IResourceProxyVisitor() {
+				public boolean visit(IResourceProxy resourceProxy) throws CoreException {
+					if (resourceProxy.getType() == IResource.ROOT)
+						return true;
+
+					if (resourceProxy.getType() != IResource.PROJECT || !resourceProxy.isAccessible())
+						return false;
+
+					IProject project= (IProject)resourceProxy.requestResource();
+					if (!RelEngPlugin.isShared(project))
+						return false;
+
+					if (contains(mapFiles, project))
+						throw new OperationCanceledException(FOUND);
+
+					return false;
+				}
+			};
+			ResourcesPlugin.getWorkspace().getRoot().accept(visitor, IResource.NONE);
+			return false;
+		} catch (OperationCanceledException ex) {
+			return ex.getMessage() == FOUND;
+		} catch (CoreException e) {
+			return false;
+		}
+	}
+
+	private static boolean contains(MapFile[] mapFiles, IProject project) {
+		for (int i= 0; i < mapFiles.length; i++)
+			if (mapFiles[i].contains(project))
+				return true;
+		return false;
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CopyrightComment.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CopyrightComment.java
index 9df0d36..720eedc 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CopyrightComment.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/CopyrightComment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,8 @@
 package org.eclipse.releng.tools;
 
 import java.io.PrintWriter;
-import java.util.Date;
+import java.util.Calendar;
+
 
 public abstract class CopyrightComment {
 
@@ -32,7 +33,7 @@ public abstract class CopyrightComment {
     
     protected CopyrightComment(int commentStyle, int creationYear, int revisionYear) {
         this.commentStyle = commentStyle;
-        this.creationYear = creationYear == -1 ? (new Date().getYear() + 1900) : creationYear;
+        this.creationYear = creationYear == -1 ? (Calendar.getInstance().get(Calendar.YEAR)) : creationYear;
         this.revisionYear = revisionYear;
     }
 
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/FixCopyrightAction.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/FixCopyrightAction.java
deleted file mode 100644
index fb1b4f2..0000000
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/FixCopyrightAction.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.releng.tools;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteFile;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource;
-import org.eclipse.team.internal.ccvs.core.ILogEntry;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.ui.IActionDelegate;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-
-public class FixCopyrightAction implements IObjectActionDelegate {
-
-	public class MyInnerClass implements IResourceVisitor {
-		public IProgressMonitor monitor;
-
-		public boolean visit(IResource resource) throws CoreException {
-			if (resource.getType() == IResource.FILE) {
-				processFile((IFile) resource, monitor);
-			}
-			return true;
-		}
-	}
-
-	private String newLine = System.getProperty("line.separator");
-	private Map log = new HashMap();
-	private boolean swt = false;
-	private String filterString;
-
-	// The current selection
-	protected IStructuredSelection selection;
-
-	private static final int currentYear = new GregorianCalendar().get(Calendar.YEAR);
-
-	/**
-	 * Constructor for Action1.
-	 */
-	public FixCopyrightAction() {
-		super();
-	}
-
-	/**
-	 * Returns the selected resources.
-	 * 
-	 * @return the selected resources
-	 */
-	protected IFile[] getSelectedResources() {
-		ArrayList resources = null;
-		if (!selection.isEmpty()) {
-			resources = new ArrayList();
-			Iterator elements = selection.iterator();
-			while (elements.hasNext()) {
-				Object next = elements.next();
-				IResource resource = (IResource) next;
-				switch(resource.getType()) {
-					case IResource.FILE :
-						resources.add((IFile) resource);
-						break;
-					case IResource.FOLDER :
-					case IResource.PROJECT :
-						addMembers((IContainer) resource, resources);
-						break;
-				}
-			}
-		}
-		if (resources != null && !resources.isEmpty()) {
-			IFile[] result = new IFile[resources.size()];
-			resources.toArray(result);
-			return result;
-		}
-		return new IFile[0];
-	}
-
-	private void addMembers(IContainer container, List list) {
-		try {
-			IResource[] resources = container.members();
-			for (int i = 0, max = resources.length; i < max; i++) {
-				IResource resource = resources[i];
-				switch(resource.getType()) {
-					case IResource.FOLDER :
-					case IResource.PROJECT :
-						addMembers((IContainer) resource, list);
-						break;
-					case IResource.FILE :
-						list.add((IFile) resource);
-				}
-			}
-		} catch (CoreException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
-	 */
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-	}
-
-	/**
-	 * @see IActionDelegate#run(IAction)
-	 */
-	public void run(IAction action) {
-		log = new HashMap();
-		try {
-			final String[] filterArray = new String[1];
-			Dialog filterCriteria = new Dialog(PlatformUI.getWorkbench()
-					.getActiveWorkbenchWindow()) {
-				
-				Text text;
-				
-				protected void configureShell(Shell newShell) {
-					super.configureShell(newShell);
-					newShell.setText(Messages.getString("CopyrightDialog.1"));
-				}
-
-				protected Control createDialogArea(Composite parent) {
-					Composite parentComposite = (Composite) super
-							.createDialogArea(parent);
-					Composite composite = new Composite(parentComposite,
-							SWT.NONE);
-					composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
-							true, true));
-					composite.setLayout(new GridLayout(2, false));
-
-					Label label = new Label(composite, SWT.NONE);
-					label.setText(Messages.getString("CopyrightDialog.2"));
-					text = new Text(composite, SWT.BORDER | SWT.SINGLE);
-					text.setText("copyright");
-					text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
-							false));
-					
-					Label header = new Label(composite, SWT.WRAP);
-					header.setText(Messages.getString("CopyrightDialog.3"));
-					GridData gridData = new GridData(SWT.FILL, SWT.FILL, true,
-							false);
-					gridData.horizontalSpan = 2;
-					header.setLayoutData(gridData);
-					return parentComposite;
-				}
-
-				protected void okPressed() {
-					filterArray[0] = text.getText();
-					super.okPressed();
-				}
-				
-			};
-			filterCriteria.setBlockOnOpen(true);
-			int result = filterCriteria.open();
-			if (result == Dialog.CANCEL)
-				return;
-			
-			if (!filterArray[0].trim().equals("")) {
-				filterString = filterArray[0];
-			}
-			
-			final IResource[] results = getSelectedResources();
-			PlatformUI.getWorkbench().getProgressService().run(true, /* fork */
-			true, /* cancellable */
-			new WorkspaceModifyOperation() {
-				protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
-					try {
-						monitor.beginTask("Fixing copyrights...", results.length);
-						System.out.println("Start Fixing Copyrights");
-						System.out.println("Resources selected: " + results.length);
-						if (results.length > 0) {
-							IProject project = results[0].getProject();
-							if (project.getName().equals("org.eclipse.swt")) swt = true;
-						}
-						for (int i = 0; i < results.length; i++) {
-							IResource resource = results[i];
-							System.out.println("Resource selected: " + resource.getFullPath());
-							processFile((IFile) resource, monitor);
-							monitor.worked(1);
-							if (monitor.isCanceled()) {
-								monitor.setCanceled(true);
-								break;
-							}
-						}
-
-						writeLogs();
-						if (swt) displayLogs();
-						System.out.println("Done Fixing Copyrights");
-
-					} finally {
-						monitor.done();
-					}
-				}
-			});
-		} catch (InvocationTargetException e) {
-			e.printStackTrace();
-		} catch (InterruptedException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * Lookup and return the year in which the argument file was revised.  Return -1 if
-	 * the revision year cannot be found.
-	 */
-	private int getCVSModificationYear(IFile file, IProgressMonitor monitor) {
-		try {
-			monitor.beginTask("Fetching logs from CVS", 100);
-
-			try {
-				ICVSRemoteResource cvsFile = CVSWorkspaceRoot.getRemoteResourceFor(file);
-				if (cvsFile != null) {
-					// get the log entry for the revision loaded in the workspace
-					ILogEntry entry = ((ICVSRemoteFile) cvsFile)
-							.getLogEntry(new SubProgressMonitor(monitor, 100));
-
-					String logComment = entry.getComment();
-					if (swt && logComment.indexOf("CPL") != -1
-							&& logComment.indexOf("EPL") != -1) {
-						// the last modification was the copyright comment
-						// update for the transition from CPL to EPL, so
-						// ignore
-						return 0;
-
-					}
-					else if (swt && logComment.indexOf("restore HEAD after accidental deletion by error in automated build script") != -1) {
-						// the last modification was the recovery when SWT was accidentally deleted from HEAD in July 2009, so ignore
-						return 0;
-					}
-					else if (filterString != null && logComment.indexOf(filterString) != -1) {
-						//the last update was a copyright checkin - ignore
-						return 0;
-					}
-					
-					Calendar calendar = Calendar.getInstance();
-					calendar.setTime(entry.getDate());
-					return calendar.get(Calendar.YEAR);
-				}
-			} catch (TeamException e) {
-				// do nothing
-			}
-		} finally {
-			monitor.done();
-		}
-
-		return -1;
-	}
-
-	/**
-	 *  
-	 */
-	private void writeLogs() {
-
-		FileOutputStream aStream;
-		try {
-			File aFile = new File(Platform.getLocation().toFile(), "copyrightLog.txt");
-			aStream = new FileOutputStream(aFile);
-			Set aSet = log.entrySet();
-			Iterator errorIterator = aSet.iterator();
-			while (errorIterator.hasNext()) {
-				Map.Entry anEntry = (Map.Entry) errorIterator.next();
-				String errorDescription = (String) anEntry.getKey();
-				aStream.write(errorDescription.getBytes());
-				aStream.write(newLine.getBytes());
-				List fileList = (List) anEntry.getValue();
-				Iterator listIterator = fileList.iterator();
-				while (listIterator.hasNext()) {
-					String fileName = (String) listIterator.next();
-					aStream.write("     ".getBytes());
-					aStream.write(fileName.getBytes());
-					aStream.write(newLine.getBytes());
-				}
-			}
-			aStream.close();
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	private void displayLogs() {
-
-		Set aSet = log.entrySet();
-		Iterator errorIterator = aSet.iterator();
-		while (errorIterator.hasNext()) {
-			Map.Entry anEntry = (Map.Entry) errorIterator.next();
-			String errorDescription = (String) anEntry.getKey();
-			System.out.println(errorDescription);
-			List fileList = (List) anEntry.getValue();
-			Iterator listIterator = fileList.iterator();
-			while (listIterator.hasNext()) {
-				String fileName = (String) listIterator.next();
-				System.out.println("     " + fileName);
-			}
-		}
-	}
-
-	/**
-	 * @param file
-	 */
-	private void processFile(IFile file, IProgressMonitor monitor) {
-		String extension = file.getFileExtension();
-		if (extension == null) {
-			warn(file, null, "File has no extension.  File UNCHANGED."); //$NON-NLS-1$
-			return;
-		}
-		monitor.subTask(file.getFullPath().toOSString());
-		SourceFile aSourceFile = SourceFile.createFor(file);
-		if (aSourceFile == null) {
-			return;
-		}
-
-		if (aSourceFile.hasMultipleCopyrights()) {
-			warn(file, null, "Multiple copyrights found.  File UNCHANGED."); //$NON-NLS-1$//$NON-NLS-2$
-			return;
-		}
-
-		boolean hasCPL = false, hasGPL = false, hasMPL = false, hasApple = false;
-
-		BlockComment copyrightComment = aSourceFile.firstCopyrightComment();
-		if (copyrightComment != null) {
-			String copyrightString = copyrightComment.getContents();
-			if (copyrightString.indexOf("Common Public License") != -1) hasCPL = true;
-			if (swt) {
-				if (copyrightString.indexOf("GPL") != -1) hasGPL = true;
-				if (copyrightString.indexOf("MPL") != -1) hasMPL = true;
-				if (copyrightString.indexOf("Apple Computer") != -1) hasApple = true; 
-			}
-		}
-
-		IBMCopyrightComment ibmCopyright = IBMCopyrightComment.parse(copyrightComment, aSourceFile.getFileType());
-		if (ibmCopyright == null) {
-			warn(file, copyrightComment, "Could not interpret copyright comment.  File UNCHANGED."); //$NON-NLS-1$
-			return;
-		}
-
-		// figure out if the comment should be updated by comparing the date range
-		// in the comment to the last modification time provided by CVS
-
-		int revised = ibmCopyright.getRevisionYear();
-		int lastMod = revised;
-		if (lastMod < currentYear)
-			lastMod = getCVSModificationYear(file, new NullProgressMonitor());
-
-		if (lastMod <= revised && !hasCPL) {
-			return; // no update necessary
-		}
-
-		// either replace old copyright or put the new one at the top of the file
-		ibmCopyright.setRevisionYear(lastMod);
-		if (copyrightComment == null) {
-			aSourceFile.insert(ibmCopyright.getCopyrightComment());
-		} else {
-			if (!copyrightComment.atTop()) {
-				warn(file, copyrightComment, "Old copyright not at start of file, new copyright replaces old in same location."); //$NON-NLS-1$
-			}
-			if (hasGPL || hasMPL || hasApple) {
-				warn(file, copyrightComment, "Old copyright contains GPL, MPL, or Apple. Copyright unchanged. Date updated if necessary."); //$NON-NLS-1$
-				aSourceFile.replace(copyrightComment, ibmCopyright.getOriginalCopyrightComment());
-			} else {
-				aSourceFile.replace(copyrightComment, ibmCopyright.getCopyrightComment());
-			}
-		}
-	}
-
-	private void warn(IFile file, BlockComment firstBlockComment, String errorDescription) {
-		List aList = (List) log.get(errorDescription);
-		if (aList == null) {
-			aList = new ArrayList();
-			log.put(errorDescription, aList);
-		}
-		aList.add(file.getFullPath().toOSString());
-	}
-
-	/**
-	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
-	 */
-	public void selectionChanged(IAction action, ISelection selection) {
-		if (selection instanceof IStructuredSelection) {
-			this.selection = (IStructuredSelection) selection;
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/IBMCopyrightComment.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/IBMCopyrightComment.java
index fb8b037..277660d 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/IBMCopyrightComment.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/IBMCopyrightComment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.StringTokenizer;
 
+
 public class IBMCopyrightComment extends CopyrightComment {
 
     private static final int DEFAULT_CREATION_YEAR = 2005;
@@ -50,7 +51,7 @@ public class IBMCopyrightComment extends CopyrightComment {
    	    String body = comment.getContents();
 
         final String copyrightLabel = "Copyright (c) "; //$NON-NLS-1$
-   	    int start = body.indexOf(copyrightLabel); //$NON-NLS-1$
+   	    int start = body.indexOf(copyrightLabel);
    	    if (start == -1) return null;
    	    int contrib = body.indexOf("Contributors:", start); //$NON-NLS-1$
    	    int rangeEnd = body.indexOf(" IBM Corp", start); //$NON-NLS-1$ // catch both IBM Corporation and IBM Corp.
@@ -98,9 +99,9 @@ public class IBMCopyrightComment extends CopyrightComment {
    	        if (contributor.indexOf("***********************************") == -1 //$NON-NLS-1$
    	         && contributor.indexOf("###################################") == -1) { //$NON-NLS-1$
    	            int c = contributor.indexOf(linePrefix);
-   	            if (c == -1 && linePrefix.equals(" *")) {
+   	            if (c == -1 && linePrefix.equals(" *")) { //$NON-NLS-1$
    	            	// special case: old prefix was "*" and new prefix is " *"
-   	            	c = contributor.indexOf("*");
+   	            	c = contributor.indexOf("*"); //$NON-NLS-1$
    	            }
    	            if (c == 0) {
 					// prefix has to be at the beginning of the line
@@ -176,12 +177,12 @@ public class IBMCopyrightComment extends CopyrightComment {
 				String contributor = (String) i.next();
 				if (contributor.length() > 0) {
 					if (Character.isWhitespace(contributor.charAt(0))) {
-					    writer.println(linePrefix + contributor);  //$NON-NLS-1$
+					    writer.println(linePrefix + contributor);
 					} else {
 					    writer.println(linePrefix + " " + contributor);  //$NON-NLS-1$
 					}
 				} else {
-				    writer.println(linePrefix);  //$NON-NLS-1$
+				    writer.println(linePrefix);
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaFile.java
index 833a012..e210dad 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.releng.tools;
 
 import org.eclipse.core.resources.IFile;
 
+
 /**
  * @author droberts
  */
@@ -28,14 +29,14 @@ public class JavaFile extends SourceFile {
 	 * @see Test.popup.actions.SourceFile#getCommentStart()
 	 */
 	public String getCommentStart() {
-		return "/*";
+		return "/*"; //$NON-NLS-1$
 	}
 
 	/* (non-Javadoc)
 	 * @see Test.popup.actions.SourceFile#getCommentEnd()
 	 */
 	public String getCommentEnd() {
-		return "*/";
+		return "*/"; //$NON-NLS-1$
 	}
 
 	public int getFileType() {
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaScriptFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaScriptFile.java
index cf38382..5135669 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaScriptFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/JavaScriptFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.releng.tools;
 
 import org.eclipse.core.resources.IFile;
 
+
 public class JavaScriptFile extends SourceFile {
 
 	public JavaScriptFile(IFile file) {
@@ -22,14 +23,14 @@ public class JavaScriptFile extends SourceFile {
 	 * @see Test.popup.actions.SourceFile#getCommentStart()
 	 */
 	public String getCommentStart() {
-		return "/*";
+		return "/*"; //$NON-NLS-1$
 	}
 
 	/* (non-Javadoc)
 	 * @see Test.popup.actions.SourceFile#getCommentEnd()
 	 */
 	public String getCommentEnd() {
-		return "*/";
+		return "*/"; //$NON-NLS-1$
 	}
 	public int getFileType() {
 		return CopyrightComment.JAVASCRIPT_COMMENT;
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/LoadMap.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/LoadMap.java
index c9fe549..5286807 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/LoadMap.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/LoadMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,21 +17,27 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.action.IAction;
+
 import org.eclipse.team.core.ProjectSetCapability;
 import org.eclipse.team.core.RepositoryProviderType;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
 import org.eclipse.team.internal.ccvs.ui.actions.CVSAction;
 import org.eclipse.team.internal.ui.UIProjectSetSerializationContext;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+
+import org.eclipse.jface.action.IAction;
+
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 
+
 public class LoadMap extends CVSAction {
 
 	/**
@@ -112,8 +118,10 @@ public class LoadMap extends CVSAction {
 		if (resources.length == 0) return false;
 		for (int i = 0; i < resources.length; i++) {
 			IResource resource = resources[i];
-			if (resource.getType() != IResource.FILE) return false;
-			if (!resource.getFileExtension().equals("map")) return false;
+			if (resource.getType() != IResource.FILE)
+				return false;
+			if (!MapFile.isMapFile((IFile)resource))
+				return false;
 		}
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapContentDocument.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapContentDocument.java
index 0cf0d7c..00b24d9 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapContentDocument.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapContentDocument.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,19 +17,23 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 
-import org.eclipse.compare.IStreamContentAccessor;
-import org.eclipse.compare.ITypedElement;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.team.internal.ccvs.core.CVSException;
 import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
 
+import org.eclipse.swt.graphics.Image;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.core.resources.IProject;
+
+import org.eclipse.compare.IStreamContentAccessor;
+import org.eclipse.compare.ITypedElement;
+
 
 public class MapContentDocument implements ITypedElement, IStreamContentAccessor{
 	private MapFile mapFile;
-	private String oldContents = "";
-	private String newContents = "";
+	private String oldContents = ""; //$NON-NLS-1$
+	private String newContents = ""; //$NON-NLS-1$
 
 	public MapContentDocument(MapFile aMapFile) {
 		mapFile = aMapFile;	
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapFile.java
index be7282a..9a20a5d 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,18 +14,30 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceProxy;
+import org.eclipse.core.resources.IResourceProxyVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+
 public class MapFile {
 	
-	public static final String MAP_FILE_EXTENSION = "map";
+	/**
+	 * @deprecated As of 3.7, replaced by {@link #isMapFile(IFile)}
+	 */
+	public static final String MAP_FILE_EXTENSION = "map"; //$NON-NLS-1$
+	private static final String MAP_FILE_NAME_ENDING = '.' + MAP_FILE_EXTENSION;
 	
 	protected IFile file;
 	protected MapEntry[] entries;
@@ -114,4 +126,39 @@ public class MapFile {
 		return file.getName();
 	}
 
+	/**
+	 * Finds all map files in the workspace.
+	 * 
+	 * @param resource the resource for which to find the map files
+	 * @return an array of all map file for the given resource
+	 * @throws CoreException if something goes wrong
+	 * @since 3.7
+	 */
+	public static MapFile[] findAllMapFiles(IResource resource) throws CoreException {
+		final ArrayList mapFiles = new ArrayList();
+		IResourceProxyVisitor visitor= new IResourceProxyVisitor() {
+			public boolean visit(IResourceProxy resourceProxy) throws CoreException {
+				if (!resourceProxy.isAccessible())
+					return false;
+
+				int type= resourceProxy.getType();
+				if (type == IResource.PROJECT)
+					return RelEngPlugin.isShared((IProject)resourceProxy.requestResource());
+
+				if (type == IResource.FILE && resourceProxy.getName().endsWith(MAP_FILE_NAME_ENDING))
+					mapFiles.add(new MapFile((IFile)resourceProxy.requestResource()));
+
+				return true;
+			}
+		};
+		
+		resource.accept(visitor,IResource.NONE);
+		
+		return (MapFile[]) mapFiles.toArray(new MapFile[mapFiles.size()]);
+	}
+
+	public static boolean isMapFile(IFile aFile){
+		return MapFile.MAP_FILE_EXTENSION.equals(aFile.getFileExtension());
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProject.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProject.java
index 4da2288..9bf6d2a 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProject.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.releng.tools;
+
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -16,6 +17,15 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.team.core.TeamException;
+import org.eclipse.team.internal.ccvs.core.CVSTag;
+import org.eclipse.team.internal.ccvs.core.client.Command;
+import org.eclipse.team.internal.ccvs.ui.operations.CommitOperation;
+import org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
@@ -23,17 +33,10 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
 import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.client.Command;
-import org.eclipse.team.internal.ccvs.ui.operations.CommitOperation;
-import org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation;
+
 
 public class MapProject implements IResourceChangeListener {
 	
@@ -57,7 +60,6 @@ public class MapProject implements IResourceChangeListener {
 				RelEngPlugin.log(e);
 			}
 		}
-		
 		return mapProject;
 	}
 	
@@ -70,8 +72,8 @@ public class MapProject implements IResourceChangeListener {
 
 	public MapProject(IProject p) throws CoreException {
 		this.project = p;
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
 		loadMapFiles();
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
 	}
 
 	public IProject getProject() {
@@ -176,6 +178,7 @@ public class MapProject implements IResourceChangeListener {
 	 */
 	public void dispose(){
 		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+		mapFiles= null;
 	}
 	
 	/**
@@ -197,7 +200,7 @@ public class MapProject implements IResourceChangeListener {
 				try{
 					IFile aFile = (IFile)(delta.getResource());
 					MapFile mFile = null;
-					if(isMapFile(aFile)){
+					if(MapFile.isMapFile(aFile)){
 						// Handle content change
 						if(delta.getKind() == IResourceDelta.CHANGED){	
 							mFile = getMapFileFor(aFile);
@@ -227,23 +230,7 @@ public class MapProject implements IResourceChangeListener {
 	}
 
 	private void loadMapFiles() throws CoreException {
-		final ArrayList maps = new ArrayList();
-		project.accept(new IResourceVisitor() {
-			public boolean visit(IResource resource) throws CoreException {
-				if (resource.getType() == IResource.FILE) {
-					IFile file = (IFile) resource;
-					if (isMapFile(file)) {
-						maps.add(new MapFile(file));
-					}
-				}
-				return true;
-			}
-		});
-		if (maps.size() > 0) {
-			mapFiles = (MapFile[]) maps.toArray(new MapFile[maps.size()]);
-		} else {
-			mapFiles = new MapFile[0];
-		}
+		mapFiles = MapFile.findAllMapFiles(project);
 	}
 	
 	private MapFile getMapFileFor(IFile file) throws CoreException{
@@ -258,9 +245,4 @@ public class MapProject implements IResourceChangeListener {
 		set.add(aFile);
 		mapFiles = (MapFile[])set.toArray(new MapFile[set.size()]); 
 	}
-	private boolean isMapFile(IFile aFile){
-		String extension = aFile.getFileExtension();
-		//In case file has no extension name or is not validate map file
-		return ( extension != null && extension.equals(MapFile.MAP_FILE_EXTENSION)); 
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProjectSelectionPage.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProjectSelectionPage.java
index c29ebb0..cce79ed 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProjectSelectionPage.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/MapProjectSelectionPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,29 +10,48 @@
  *******************************************************************************/
 package org.eclipse.releng.tools;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.wizard.WizardPage;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.team.core.RepositoryProvider;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.List;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.core.resources.IProject;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.wizard.WizardPage;
+
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 import org.eclipse.ui.views.navigator.ResourceComparator;
 
+
 public class MapProjectSelectionPage extends WizardPage {
 	
 	private MapProject selectedMapProject;
 	private IDialogSettings settings;
-	private TreeViewer projectTree;
+	private ListViewer mapProjectListViewer;
 	protected Button useDefaultProjectButton;
 	protected boolean useDefaultMapProject;
 	private final String SELECTED_PROJECT_KEY = "Selected Project"; //$NON-NLS-1$
@@ -53,9 +72,8 @@ public class MapProjectSelectionPage extends WizardPage {
 		topContainer.setLayout(new GridLayout());
 		topContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
 		
-		projectTree = createTree(topContainer); 
-		projectTree.setInput(RelEngPlugin.getWorkspace().getRoot());
-		
+		mapProjectListViewer = createListViewer(topContainer); 
+		mapProjectListViewer.setInput(getMapFileProjects());
 		useDefaultProjectButton = new Button(topContainer, SWT.CHECK);
 		useDefaultProjectButton.setText(Messages.getString("MapProjectSelectionPage.0")); //$NON-NLS-1$
 		useDefaultProjectButton.addSelectionListener(new SelectionAdapter() {
@@ -70,13 +88,22 @@ public class MapProjectSelectionPage extends WizardPage {
         setControl(topContainer);
 	}
 
-	protected TreeViewer createTree(Composite parent) {
-		Tree tree = new Tree(parent, SWT.SINGLE | SWT.BORDER);
+	protected ListViewer createListViewer(Composite parent) {
+		List tree = new List(parent, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
 		GridData gd= new GridData(GridData.FILL_BOTH);
 		gd.heightHint= tree.getItemHeight() * 15;
 		tree.setLayoutData(gd);
-		TreeViewer result = new TreeViewer(tree);
-		result.setContentProvider(new WorkbenchContentProvider());
+		ListViewer result = new ListViewer(tree);
+		result.setContentProvider(new IStructuredContentProvider() {
+			public Object[] getElements(Object inputElement) {
+				Set projects=(Set)inputElement;
+				return ((IProject[]) projects.toArray(new IProject[projects.size()]));
+			}
+			public void dispose() {	
+			}
+			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			}
+		});
 		result.setLabelProvider(new WorkbenchLabelProvider());
 		result.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {				
@@ -87,18 +114,45 @@ public class MapProjectSelectionPage extends WizardPage {
 		return result;
 	}	
 
+	private static Set getMapFileProjects() {
+		Set projects = new HashSet();
+		MapFile[] mapFiles;
+		try {
+			mapFiles = MapFile.findAllMapFiles(RelEngPlugin.getWorkspace().getRoot());
+		} catch (CoreException ex) {
+			return Collections.EMPTY_SET;
+		}
+		for (int i = 0; i < mapFiles.length; i++)
+			projects.add(mapFiles[i].getFile().getProject());
+		for (Iterator iterator= projects.iterator(); iterator.hasNext();) {
+			MapProject mapProject= null;
+			try {
+				mapProject= new MapProject((IProject)iterator.next());
+				if (mapProject.getValidMapFiles().length == 0)
+					iterator.remove();
+			} catch (CoreException e) {
+				iterator.remove();
+			} finally {
+				if (mapProject != null)
+					mapProject.dispose();
+			}
+			
+		}
+		return projects;
+	}
+
 	private void updateMapProject(){
-		selectedMapProject = null;	
-		
-		IStructuredSelection selection = (IStructuredSelection)projectTree.getSelection();
+		if (selectedMapProject != null) {
+			selectedMapProject.dispose();	
+			selectedMapProject = null;
+		}
+
+		IStructuredSelection selection = (IStructuredSelection)mapProjectListViewer.getSelection();
 		if( !selection.isEmpty()){
 			Object obj = selection.getFirstElement();
 			if(obj instanceof IProject){
 				try {
 					selectedMapProject = new MapProject((IProject)obj);
-					if(selectedMapProject.getValidMapFiles().length == 0){
-						selectedMapProject = null;
-					}
 				} catch (CoreException e) {
 					selectedMapProject = null;
 				}
@@ -107,6 +161,18 @@ public class MapProjectSelectionPage extends WizardPage {
 		setPageComplete(isValid(selectedMapProject));
 	}
 
+	/*
+	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
+	 * @since 3.7
+	 */
+	public void dispose() {
+		if (selectedMapProject != null) {
+			selectedMapProject.dispose();	
+			selectedMapProject = null;
+		}
+		super.dispose();
+	}
+
 	private void initializedViewer(){
 		readSettings();
 		updateOthers();
@@ -120,13 +186,13 @@ public class MapProjectSelectionPage extends WizardPage {
 		String name = settings.get(SELECTED_PROJECT_KEY);
 		if (name != null) {
 			ISelection selection = new StructuredSelection(RelEngPlugin.getWorkspace().getRoot().getProject(name));
-			projectTree.setSelection(selection);
+			mapProjectListViewer.setSelection(selection);
 		}
-		projectTree.getTree().setFocus();
+		mapProjectListViewer.getList().setFocus();
 	}
 	
 	public void saveSettings(){
-		IStructuredSelection selection = (IStructuredSelection)projectTree.getSelection();
+		IStructuredSelection selection = (IStructuredSelection)mapProjectListViewer.getSelection();
 		if(!selection.isEmpty()){
 			Object obj = selection.getFirstElement();
 			if(obj instanceof IProject){
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/OrderedMap.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/OrderedMap.java
index 0755ac1..30bfff9 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/OrderedMap.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/OrderedMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,12 @@
  *******************************************************************************/
 package org.eclipse.releng.tools;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * Don't implement the Map interface because we don't want people calling #entrySet
@@ -135,21 +140,21 @@ public class OrderedMap {
 	 */
 	public String toString() {
 		StringBuffer result = new StringBuffer();
-		result.append("{");
+		result.append("{"); //$NON-NLS-1$
 		for (Iterator iter = keys().iterator(); iter.hasNext(); ) {
 			Object key = iter.next();
 			Object value = get(key);
 			result.append(key);
 			result.append('=');
 			result.append(value);
-			result.append(",\n");
+			result.append(",\n"); //$NON-NLS-1$
 		}
 		// delete last 2 chars... comma and new-line
 		if (result.length() > 2) {
 			result = result.deleteCharAt(result.length() - 1);
 			result = result.deleteCharAt(result.length() - 1);
 		}
-		result.append("}");
+		result.append("}"); //$NON-NLS-1$
 		return result.toString();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectComparePage.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectComparePage.java
index ff20329..c666b51 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectComparePage.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectComparePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,25 +12,6 @@ package org.eclipse.releng.tools;
 
 import java.lang.reflect.InvocationTargetException;
 
-import org.eclipse.compare.CompareConfiguration;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.synchronize.SyncInfoSet;
 import org.eclipse.team.internal.ccvs.core.CVSCompareSubscriber;
@@ -42,8 +23,34 @@ import org.eclipse.team.internal.ui.synchronize.ChangeSetModelManager;
 import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
 import org.eclipse.team.ui.synchronize.ISynchronizeParticipant;
 import org.eclipse.team.ui.synchronize.ParticipantPageSaveablePart;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+
 import org.eclipse.ui.part.PageBook;
 
+import org.eclipse.compare.CompareConfiguration;
+
+
 /**
  *This class extends <code>WizardPage<code>. It utilizes a <code>PageBook<code> to show user
  *whether there are any changed projects or not since last release. It also shows a compare 
@@ -52,7 +59,7 @@ import org.eclipse.ui.part.PageBook;
 public class ProjectComparePage extends WizardPage{
 
 	private IDialogSettings settings;
-	private String NOTES_BUTTON_KEY = "ProjectComparePage.buildNotesButton";
+	private String NOTES_BUTTON_KEY = "ProjectComparePage.buildNotesButton"; //$NON-NLS-1$
 	private SyncInfoSet syncInfoSet;
 	private Button buildNotesButton;
 	private boolean buildNotesButtonChecked;
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectSelectionPage.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectSelectionPage.java
index 1c98d90..f5b1f9c 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectSelectionPage.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ProjectSelectionPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,20 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
+
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
@@ -24,17 +36,9 @@ import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.IContentProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.wizard.IWizardPage;
 import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
+
 import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
 import org.eclipse.ui.model.WorkbenchContentProvider;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
@@ -140,14 +144,33 @@ public class ProjectSelectionPage extends WizardPage {
 		return new WorkbenchContentProvider() {
 			public Object[] getChildren(Object parentElement) {
 				if (parentElement instanceof MapProject) {
-					return mapProject.getValidMapFiles();								
+					return mapProject.getValidMapFiles();
 				}
 				if (parentElement instanceof MapFile) {
 					return ((MapFile)parentElement).getAccessibleProjects();
 				}
 				return null;
 			}
-			
+			/*
+			 * @see org.eclipse.ui.model.BaseWorkbenchContentProvider#getParent(java.lang.Object)
+			 * @since 3.7
+			 */
+			public Object getParent(Object element) {
+				if (mapProject == null)
+					return null;
+
+				if (element instanceof MapFile) {
+					return mapProject;
+				}
+				if (element instanceof IProject) {
+					MapFile[] mapFiles= mapProject.getValidMapFiles();
+					for (int i= 0; i < mapFiles.length; i++) {
+						if (mapFiles[i].contains((IProject)element))
+							return mapFiles[i];
+					}
+				}
+				return super.getParent(element);
+			}
 			public boolean hasChildren(Object element) {
 				if (element instanceof MapFile) {
 					return ((MapFile)element).getAccessibleProjects().length > 0;
@@ -214,6 +237,15 @@ public class ProjectSelectionPage extends WizardPage {
 		settings.put(SELECTED_ITEMS_KEY, (String[])names.toArray(new String[names.size()]));
 		settings.put(COMPARE_BUTTON_KEY, compareButtonChecked);
 	}
+
+	/*
+	 * @see org.eclipse.jface.wizard.WizardPage#setPreviousPage(org.eclipse.jface.wizard.IWizardPage)
+	 * @since 3.7
+	 */
+	public void setPreviousPage(IWizardPage page) {
+		super.setPreviousPage(page);
+		updatePageComplete();
+	}
 	
 	private void initialize(){
 		initCheckedProjects();
@@ -275,7 +307,13 @@ public class ProjectSelectionPage extends WizardPage {
 	public void updateMapProject(MapProject m){
 		mapProject = m;
 		if(viewer != null){
+			Object[] checkedElements= null;
+			if (m != null && mapProject != null && m.getProject().equals(mapProject.getProject()))
+				checkedElements= viewer.getCheckedElements();
 			viewer.setInput(mapProject);
+			viewer.expandAll();
+			if (checkedElements != null)
+				viewer.setCheckedElements(checkedElements);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/PropertiesFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/PropertiesFile.java
index 7dd316e..0e2d0d4 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/PropertiesFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/PropertiesFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.releng.tools;
 
 import org.eclipse.core.resources.IFile;
 
+
 /**
  * @author droberts
  */
@@ -28,14 +29,14 @@ public class PropertiesFile extends SourceFile {
 	 * @see Test.popup.actions.SourceFile#getCommentStart()
 	 */
 	public String getCommentStart() {
-		return "##";
+		return "##"; //$NON-NLS-1$
 	}
 
 	/* (non-Javadoc)
 	 * @see Test.popup.actions.SourceFile#getCommentEnd()
 	 */
 	public String getCommentEnd() {
-		return "##";
+		return "##"; //$NON-NLS-1$
 	}
 	
 	public int getFileType() {
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/RelEngPlugin.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/RelEngPlugin.java
index 04ab5e4..29874d6 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/RelEngPlugin.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/RelEngPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,19 +8,25 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.releng.tools;
 
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.team.core.RepositoryProvider;
+
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 
+
 /**
  * A Plugin for performing certain important RelEng tasks.
  * Currentley this Plugin provides support for:
@@ -31,6 +37,8 @@ public class RelEngPlugin extends AbstractUIPlugin {
 	public static final String ID = "org.eclipse.releng.tools"; //$NON-NLS-1$
 	public static final String MAP_PROJECT_NAME = Messages.getString("RelEngPlugin.1"); //$NON-NLS-1$
 	public static final String MAP_FOLDER = Messages.getString("RelEngPlugin.2"); //$NON-NLS-1$
+	private static final String BINARY_REPOSITORY_PROVIDER_CLASS_NAME= "org.eclipse.pde.internal.core.BinaryRepositoryProvider"; //$NON-NLS-1$
+
 	
 	//The shared instance.
 	private static RelEngPlugin plugin;
@@ -121,7 +129,24 @@ public class RelEngPlugin extends AbstractUIPlugin {
 		}
 		return plugin;
 	}
-	
+
+	/**
+	 * Tells whether the given project is shared.
+	 * 
+	 * @param project the project
+	 * @return <code>true</code> if the project is shared
+	 * @since 3.7
+	 */
+	static boolean isShared(IProject project) {
+		Assert.isLegal(project != null);
+		if (!RepositoryProvider.isShared(project))
+			return false;
+
+		// Check for PDE's binary projects that also connect a provider to the project
+		RepositoryProvider provider= RepositoryProvider.getProvider(project);
+		return provider != null && !BINARY_REPOSITORY_PROVIDER_CLASS_NAME.equals(provider.getClass().getName());
+	}
+
 	/**
 	 * The following code is a sample of how to assign a
 	 * RelEng nature to a project.  This only ever needed
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReleaseWizard.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReleaseWizard.java
index 0e524c9..dfa6462 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReleaseWizard.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReleaseWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -208,7 +208,19 @@ public class ReleaseWizard extends Wizard {
 		
 		if (defaultBeingUsed) broadcastMapProjectChange(mapProject);
 	}
-	
+
+	/*
+	 * @see org.eclipse.jface.wizard.Wizard#dispose()
+	 * @since 3.7
+	 */
+	public void dispose() {
+		if (mapProject != null) {
+			mapProject.dispose();
+			mapProject= null;
+		}
+		super.dispose();
+	}
+
 	private void addMapSelectionPage() {
 		mapSelectionPage = new MapProjectSelectionPage("MapProjectSelectionPage", //$NON-NLS-1$
 				Messages.getString("ReleaseWizard.4"), //$NON-NLS-1$
@@ -273,9 +285,8 @@ public class ReleaseWizard extends Wizard {
 	public boolean performFinish() {
 		if(!isProjectSelected())return false;
 		
-		// Build notes file update cancelled. Close dialog.
-		if (!buildNotesOperation()) {
-			return true;
+		if (projectSelectionPage.isCompareButtonChecked() && !buildNotesOperation()) {
+			return true; // Build notes file update cancelled. Close dialog.
 		}
 		
 		try {
@@ -360,7 +371,11 @@ public class ReleaseWizard extends Wizard {
 	 * @see org.eclipse.jface.wizard.IWizard#getNextPage(org.eclipse.jface.wizard.IWizardPage)
 	 */
 	public IWizardPage getNextPage(IWizardPage page) {
-		if (page == mapSelectionPage){
+		if (page == mapSelectionPage) {
+			if (selectedProjects == null && preSelectedProjects != null) {
+				projectSelectionPage.setSelection(preSelectedProjects);
+				selectedProjects= preSelectedProjects;
+			}
 			return projectSelectionPage;
 		}
 		if (page == projectSelectionPage) {
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReplaceLocalFromMap.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReplaceLocalFromMap.java
index c90d80f..19058ac 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReplaceLocalFromMap.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ReplaceLocalFromMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,20 +11,27 @@
 package org.eclipse.releng.tools;
 
 import java.lang.reflect.InvocationTargetException;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.preference.IPreferenceStore;
+
 import org.eclipse.releng.tools.preferences.MapProjectPreferencePage;
 import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.*;
+import org.eclipse.team.internal.ccvs.core.CVSException;
+import org.eclipse.team.internal.ccvs.core.CVSTag;
+import org.eclipse.team.internal.ccvs.core.ICVSResource;
 import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
 import org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction;
 import org.eclipse.team.internal.ccvs.ui.operations.ReplaceOperation;
 import org.eclipse.team.internal.core.InfiniteSubProgressMonitor;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubProgressMonitor;
+
+import org.eclipse.core.resources.IResource;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+
 /**
  * This action replaces one or more projects in the local workspace
  * with the versions released to the RelEng map file.
@@ -77,26 +84,16 @@ public class ReplaceLocalFromMap extends WorkspaceAction {
 	public boolean isEnabled() {
 		if (!(super.isEnabled()))
 			return false;
-		
-		IResource[] resources = super.getSelectedResources();
+
+		IResource[] resources = getSelectedResources();
 		for (int i = 0; i < resources.length; i++) {
 			IResource resource = resources[i];
 			if (resource.getType() != IResource.PROJECT) {
 				return false;
 			}
 		}
-		
-		//if any of the projects in the current workspace contain valid map files, return true
-		IProject[] workspaceProjects = RelEngPlugin.getWorkspace().getRoot().getProjects();
-        for (int i=0; i<workspaceProjects.length; i++) {
-        	try {
-    			if (new MapProject(workspaceProjects[i]).getValidMapFiles().length != 0)
-    				return true;
-    		} catch (CoreException e) {
-        		//this is ok, we will move on to the next project
-    		}
-        }
-        return false;
+
+		return CompareLocalToMap.hasProjectFromMapFile();
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ShellMakeFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ShellMakeFile.java
index 8d7eb7c..72753da 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ShellMakeFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/ShellMakeFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.util.regex.Pattern;
 
 import org.eclipse.core.resources.IFile;
 
+
 public class ShellMakeFile extends SourceFile {
 
 	public ShellMakeFile(IFile file) {
@@ -22,7 +23,7 @@ public class ShellMakeFile extends SourceFile {
 	}
 
 	//Optional Whitespace, #, optional whitespace, then at least 2 non-word chars repeated till EOL 
-	private static Pattern p = Pattern.compile("\\s*#\\s*\\W{2,}\\s*");
+	private static Pattern p = Pattern.compile("\\s*#\\s*\\W{2,}\\s*"); //$NON-NLS-1$
 	
 	public boolean isCommentStart(String aLine) {
 		return p.matcher(aLine).matches();
@@ -35,11 +36,11 @@ public class ShellMakeFile extends SourceFile {
 	}
 
 	public String getCommentStart() {
-		return "#*"; //unused, Pattern matcher above will be used instead
+		return "#*"; //unused, Pattern matcher above will be used instead //$NON-NLS-1$
 	}
 
 	public String getCommentEnd() {
-		return "**"; //unused, Pattern matcher above will be used instead
+		return "**"; //unused, Pattern matcher above will be used instead //$NON-NLS-1$
 	}
 
 	public int getFileType() {
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/SourceFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/SourceFile.java
index 4824b27..5f85039 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/SourceFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/SourceFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,27 +11,15 @@
  *******************************************************************************/
 package org.eclipse.releng.tools;
 
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.filebuffers.FileBuffers;
-import org.eclipse.core.filebuffers.ITextFileBuffer;
-import org.eclipse.core.filebuffers.ITextFileBufferManager;
-import org.eclipse.core.filebuffers.LocationKind;
+import java.io.*;
+import java.util.*;
+import org.eclipse.core.filebuffers.*;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.TextUtilities;
+import org.eclipse.jface.text.*;
 import org.eclipse.osgi.util.NLS;
 
+
 /**
  * @author droberts
  */
@@ -48,18 +36,18 @@ public abstract class SourceFile {
 	        extension = extension.toLowerCase();
 			if (extension.equals("java")) { //$NON-NLS-1$
 				return new JavaFile(file);
-	        } else if (extension.equals("c") || extension.equals("h") || extension.equals("rc") || extension.equals("cc") || extension.equals("cpp")) { //$NON-NLS-1$
+	        } else if (extension.equals("c") || extension.equals("h") || extension.equals("rc") || extension.equals("cc") || extension.equals("cpp")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 	            return new CFile(file);
 			} else if (extension.equals("properties")) { //$NON-NLS-1$
 				return new PropertiesFile(file);
-	        } else if (extension.equals("sh") || extension.equals("csh") || extension.equals("mak") || extension.equals("pl") || extension.equals("tcl")) { //$NON-NLS-1$
+	        } else if (extension.equals("sh") || extension.equals("csh") || extension.equals("mak") || extension.equals("pl") || extension.equals("tcl")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 	            return new ShellMakeFile(file);
 	        } else if (extension.equals("bat")) { //$NON-NLS-1$
 	            return new BatFile(file);
 			} else if (extension.equals("js")) { //$NON-NLS-1$
 	            return new JavaScriptFile(file);
-			} else if (extension.equals("xml")) { //$NON-NLS-1$
-	            return new XmlFile(file);
+//			} else if (extension.equals("xml")) { //$NON-NLS-1$
+//	            return new XmlFile(file);
 			}
         }
 		return null;
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagMap.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagMap.java
index c3ea92c..b78fe90 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagMap.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,16 +10,28 @@
  *******************************************************************************/
 package org.eclipse.releng.tools;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.team.internal.ccvs.core.*;
+import org.eclipse.team.internal.ccvs.core.CVSException;
+import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
+import org.eclipse.team.internal.ccvs.core.CVSTag;
+import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource;
+import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
 import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
 import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
 import org.eclipse.team.internal.ccvs.ui.actions.TagInRepositoryAction;
 
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+
+
 /**
  * Tags the versions in a map file with another tag
  */
@@ -122,8 +134,10 @@ public class TagMap extends TagInRepositoryAction {
 		if (resources.length == 0) return false;
 		for (int i = 0; i < resources.length; i++) {
 			IResource resource = resources[i];
-			if (resource.getType() != IResource.FILE) return false;
-			if (!resource.getFileExtension().equals("map")) return false;
+			if (resource.getType() != IResource.FILE)
+				return false;
+			if (!MapFile.isMapFile((IFile)resource))
+				return false;
 		}
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagPage.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagPage.java
index 44e7fd0..7ef983b 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagPage.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/TagPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -275,7 +275,7 @@ public class TagPage extends WizardPage{
 	
 	//The default tag format is "vYYYYMMDD"
 	private String getTagTemplate(){
-		String tag = getTagPrefix(); //$NON-NLS-1$
+		String tag = getTagPrefix();
 		Calendar today = Calendar.getInstance( );
 		tag += today.get(Calendar.YEAR);
 		int month = today.get(Calendar.MONTH) + 1;
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/XmlFile.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/XmlFile.java
index 680dfa6..eefa5a1 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/XmlFile.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/XmlFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Gunnar Wagenknecht and others.
+ * Copyright (c) 2008, 2010 Gunnar Wagenknecht and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,11 @@ package org.eclipse.releng.tools;
 import java.io.IOException;
 
 import org.eclipse.core.resources.IFile;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 
+
 /**
  * XML File
  */
@@ -26,11 +28,11 @@ public class XmlFile extends SourceFile {
 	}
 
 	public String getCommentStart() {
-		return "<!--";
+		return "<!--"; //$NON-NLS-1$
 	}
 
 	public String getCommentEnd() {
-		return "-->";
+		return "-->"; //$NON-NLS-1$
 	}
 	
 	public int getFileType() {
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties
index 366f8d0..9310e97 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties
@@ -89,9 +89,7 @@ CopyrightDialog.3=Any file whose last CVS commit comment contained the above as
 MapProjectPreferencePage.1=Choose the name of the project which contains your map files.
 MapProjectPreferencePage.2=&Select one of the following to be used as your default map project:
 MapProjectPreferencePage.0=&Always prompt
-MapProjectPreferencePage.3=Invalid map project selected
-MapProjectPreferencePage.4=Project 
-MapProjectPreferencePage.5=\ is not shared
+MapProjectPreferencePage.3=No project from the selected map file in the workspace.
 CompareLocalToMap.1=Map file entry was not found for the following project(s), comparison will be done from HEAD
 CompareLocalToMap.0=Compare With
 CVSTagHelper.1=Would you like to continue anyways?
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/CopyrightPreferencePage.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/CopyrightPreferencePage.java
index 8fdd748..e3fd0c6 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/CopyrightPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/CopyrightPreferencePage.java
@@ -10,16 +10,11 @@
  *******************************************************************************/
 package org.eclipse.releng.tools.preferences;
 
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.osgi.service.prefs.BackingStoreException;
+
 import org.eclipse.releng.tools.Messages;
 import org.eclipse.releng.tools.RelEngPlugin;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyAdapter;
 import org.eclipse.swt.events.KeyEvent;
@@ -31,6 +26,20 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
@@ -342,7 +351,11 @@ public class CopyrightPreferencePage extends PreferencePage implements IWorkbenc
 		store.setValue(RelEngCopyrightConstants.IGNORE_PROPERTIES_KEY, fIgnoreProperties.getSelection());
 		store.setValue(RelEngCopyrightConstants.IGNORE_XML_KEY, fIgnoreXml.getSelection());
 		
-		RelEngPlugin.getDefault().savePluginPreferences();
+		try {
+			InstanceScope.INSTANCE.getNode(RelEngPlugin.ID).flush();
+		} catch (BackingStoreException e) {
+			RelEngPlugin.log(IStatus.ERROR, "could not save preferences", e); //$NON-NLS-1$
+		}
 		
 		return super.performOk();
 	}
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/MapProjectPreferencePage.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/MapProjectPreferencePage.java
index 5e610a5..d0d9cd0 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/MapProjectPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/MapProjectPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,25 +10,39 @@
  *******************************************************************************/
 package org.eclipse.releng.tools.preferences;
 
-import java.util.ArrayList;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.releng.tools.*;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.releng.tools.MapFile;
+import org.eclipse.releng.tools.MapProject;
+import org.eclipse.releng.tools.Messages;
+import org.eclipse.releng.tools.RelEngPlugin;
+import org.eclipse.team.internal.ui.SWTUtils;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.internal.ui.SWTUtils;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
+
 public class MapProjectPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
 
 	//used as key in the preference store
@@ -101,7 +115,7 @@ public class MapProjectPreferencePage extends PreferencePage implements IWorkben
 	 * @param aComposite The Composite to which the List being populated will be attached.
 	 */
 	private void createMapProjectList(Composite aComposite) {
-		projectList = new List(aComposite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		projectList = new List(aComposite, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
 		GridData data = new GridData();
 		//Set heightHint with a small value so the list size will be defined by 
 		//the space available in the dialog instead of resizing the dialog to
@@ -113,21 +127,16 @@ public class MapProjectPreferencePage extends PreferencePage implements IWorkben
 		data.grabExcessVerticalSpace = true;
 		projectList.setLayoutData(data);
 
-		IProject[] workspaceProjects = RelEngPlugin.getWorkspace().getRoot().getProjects();
-		ArrayList temporaryProjectList = new ArrayList();
-		for (int i = 0; i < workspaceProjects.length; i++) {
-			MapProject aMapProject;
-			try {
-				aMapProject = new MapProject(workspaceProjects[i]);
-				if (aMapProject.getValidMapFiles().length != 0) {
-					temporaryProjectList.add(workspaceProjects[i]);
-				}
-			} catch (CoreException e) {
-				//do nothing
-			}
+		Set projects = new HashSet();
+		MapFile[] mapFiles;
+		try {
+			mapFiles = MapFile.findAllMapFiles(RelEngPlugin.getWorkspace().getRoot());
+		} catch (CoreException ex) {
+			mapFiles = new MapFile[0];
 		}
-		workspaceMapProjects = new IProject[temporaryProjectList.size()];
-		workspaceMapProjects = ((IProject[]) temporaryProjectList.toArray(new IProject[temporaryProjectList.size()]));
+		for (int i = 0; i < mapFiles.length; i++)
+			projects.add(mapFiles[i].getFile().getProject());
+		workspaceMapProjects = ((IProject[]) projects.toArray(new IProject[projects.size()]));
 
 		String[] projectNames = new String[workspaceMapProjects.length];
 		for (int i = 0; i < workspaceMapProjects.length; i++) {
@@ -149,16 +158,20 @@ public class MapProjectPreferencePage extends PreferencePage implements IWorkben
 			return;
 		}
 		IProject selectedProject = workspaceMapProjects[selectedIndex];
+		boolean isValid = false;
 		MapProject mapProject = null;
 		try {
 			mapProject = new MapProject(selectedProject);
-			if (mapProject.getValidMapFiles().length == 0) {
-				mapProject = null;
-			}
+			isValid = true;
+			if (mapProject.getValidMapFiles().length == 0)
+				setMessage(Messages.getString("MapProjectPreferencePage.3"), WARNING); //$NON-NLS-1$
 		} catch (CoreException e) {
-			mapProject = null;
+			isValid = false;
+		} finally {
+			if (mapProject != null)
+				mapProject.dispose();
 		}
-		setValid(isValid(mapProject));
+		setValid(isValid);
 	}
 
 	/*
@@ -213,16 +226,21 @@ public class MapProjectPreferencePage extends PreferencePage implements IWorkben
 
 	private void highlightDefaultMapProject() {
 		String path = preferenceStore.getString(MapProjectPreferencePage.SELECTED_MAP_PROJECT_PATH);
-		MapProject selectedMapProject = null;
+		boolean isMapProjectSelected = false;
 		if (path.length() > 0) {
+			MapProject selectedMapProject= null;
 			try {
 				selectedMapProject = new MapProject(ResourcesPlugin.getWorkspace().getRoot().getProject(path));
+				isMapProjectSelected = true;
 			} catch (CoreException e) {
-				//do nothing
+				isMapProjectSelected = false;
+			} finally {
+				if (selectedMapProject != null)
+					selectedMapProject.dispose();
 			}
 		}
 
-		if (selectedMapProject == null) {
+		if (!isMapProjectSelected) {
 			alwaysPromptButton.setEnabled(true);
 			preferenceStore.setValue(USE_DEFAULT_MAP_PROJECT, false);
 		} else {
@@ -237,19 +255,4 @@ public class MapProjectPreferencePage extends PreferencePage implements IWorkben
 		}
 	}
 
-	private boolean isValid(final MapProject mapProject) {
-		//Check if map project is accessible
-		if (mapProject == null || (!mapProject.getProject().isAccessible())) {
-			setErrorMessage(Messages.getString("MapProjectPreferencePage.3")); //$NON-NLS-1$
-			return false;
-		}
-
-		//Check if the map project is shared
-		if (RepositoryProvider.getProvider(mapProject.getProject()) == null) {
-			setErrorMessage(Messages.getString("MapProjectPreferencePage.4") + mapProject.getProject().getName() + Messages.getString("MapProjectPreferencePage.5")); //$NON-NLS-1$ //$NON-NLS-2$
-			return false;
-		}
-		setErrorMessage(null);
-		return true;
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/RelEngPreferenceInitializer.java b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/RelEngPreferenceInitializer.java
index dadeca8..efaf42c 100644
--- a/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/RelEngPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.releng.tools/src/org/eclipse/releng/tools/preferences/RelEngPreferenceInitializer.java
@@ -10,13 +10,15 @@
  *******************************************************************************/
 package org.eclipse.releng.tools.preferences;
 
-import java.util.Date;
+import java.util.Calendar;
 
-import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
-import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.releng.tools.Messages;
 import org.eclipse.releng.tools.RelEngPlugin;
 
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
 /**
  * Initializes default preferences for release engineering tool
  */
@@ -28,7 +30,7 @@ public class RelEngPreferenceInitializer extends AbstractPreferenceInitializer {
 	 */
 	public void initializeDefaultPreferences() {
         IPreferenceStore store = RelEngPlugin.getDefault().getPreferenceStore();
-        int year = new Date().getYear() + 1900;
+        int year = Calendar.getInstance().get(Calendar.YEAR);
         store.setDefault(RelEngCopyrightConstants.COPYRIGHT_TEMPLATE_KEY, LEGAL_LINE);
         store.setDefault(RelEngCopyrightConstants.CREATION_YEAR_KEY, year);
 		store.setDefault(RelEngCopyrightConstants.REVISION_YEAR_KEY, year);
diff --git a/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF
index afe0233..0488e77 100644
--- a/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.sdk/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.sdk; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.sdk/about.properties b/eclipse/plugins/org.eclipse.sdk/about.properties
index f7a8801..9fdf97c 100644
--- a/eclipse/plugins/org.eclipse.sdk/about.properties
+++ b/eclipse/plugins/org.eclipse.sdk/about.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,6 +19,6 @@ blurb=Eclipse Project SDK\n\
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2000, 2010.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
 Visit http://www.eclipse.org/eclipse
 
diff --git a/eclipse/plugins/org.eclipse.sdk/book.css b/eclipse/plugins/org.eclipse.sdk/book.css
index 2becc9e..b337d94 100644
--- a/eclipse/plugins/org.eclipse.sdk/book.css
+++ b/eclipse/plugins/org.eclipse.sdk/book.css
@@ -73,7 +73,7 @@ body, html { border: 0px }
 /* following font face declarations need to be removed for DBCS */
 
 body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-family: Arial, Helvetica, sans-serif; color: #000000}
-pre, code		{ font-family: "Courier New", Courier, monospace;}
+pre, code, tt	{ font-family: "Courier New", Courier, monospace;}
 
 /* end font face declarations */
 
@@ -88,7 +88,7 @@ h3           { font-size: 110%; margin-top: 20px; margin-bottom: 3px }
 h4           { font-size: 100%; margin-top: 20px; margin-bottom: 3px; font-style: italic }
 p            { margin-top: 10px; margin-bottom: 10px }
 pre          { font-size: 93%; margin-left: 6; color: #4444CC }
-code         { font-size: 93%; } 
+code, tt     { font-size: 93%; } 
 table        { font-size: 100% } /* needed for quirks mode */
 a:link	     { color: #0000FF }
 a:hover	     { color: #000080 }
diff --git a/eclipse/plugins/org.eclipse.sdk/plugin.properties b/eclipse/plugins/org.eclipse.sdk/plugin.properties
index 9e5e26a..4793088 100644
--- a/eclipse/plugins/org.eclipse.sdk/plugin.properties
+++ b/eclipse/plugins/org.eclipse.sdk/plugin.properties
@@ -14,7 +14,7 @@ providerName=Eclipse.org
 productName=Eclipse SDK
 productBlurb=Eclipse SDK\n\
 \n\
-Version: 3.6.2\n\
+Version: 3.7.0\n\
 Build id: {0}\n\
 \n\
 (c) Copyright Eclipse contributors and others 2000, 2011.  All rights reserved.\n\
diff --git a/eclipse/plugins/org.eclipse.search/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.search/META-INF/MANIFEST.MF
index 3163b08..fe78910 100644
--- a/eclipse/plugins/org.eclipse.search/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.search/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.search; singleton:=true
-Bundle-Version: 3.6.0.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.search.internal.ui.SearchPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
@@ -22,6 +22,7 @@ Export-Package: org.eclipse.search.core.text,
 Require-Bundle: 
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.filesystem;bundle-version="[1.3.0,2.0.0)",
  org.eclipse.core.filebuffers;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/refresh_nav.gif b/eclipse/plugins/org.eclipse.search/icons/full/dlcl16/refresh.gif
similarity index 100%
rename from eclipse/plugins/org.eclipse.jdt.ui/icons/full/dlcl16/refresh_nav.gif
rename to eclipse/plugins/org.eclipse.search/icons/full/dlcl16/refresh.gif
diff --git a/eclipse/plugins/org.eclipse.ant.ui/icons/full/elcl16/refresh.gif b/eclipse/plugins/org.eclipse.search/icons/full/elcl16/refresh.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.ant.ui/icons/full/elcl16/refresh.gif
copy to eclipse/plugins/org.eclipse.search/icons/full/elcl16/refresh.gif
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchPageContainer.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchPageContainer.java
index faedc6f..61dd893 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchPageContainer.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchPageContainer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@ package org.eclipse.search.ui;
 import org.eclipse.jface.operation.IRunnableContext;
 import org.eclipse.jface.viewers.ISelection;
 
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IWorkingSet;
 
 /**
@@ -107,6 +108,24 @@ public interface ISearchPageContainer {
 	public boolean hasValidScope();
 
 	/**
+	 * Tells this container whether the active editor can provide the selection for the scope and
+	 * hence the {@link #SELECTION_SCOPE} can be enabled if the active part is an editor.
+	 * 
+	 * @param state <code>true</code> if the active editor can provide the selection,
+	 *            <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	public void setActiveEditorCanProvideScopeSelection(boolean state);
+
+	/**
+	 * Returns the editor input of the active editor.
+	 * 
+	 * @return the editor input or <code>null</code> if the active part is not an editor
+	 * @since 3.7
+	 */
+	public IEditorInput getActiveEditorInput();
+
+	/**
 	 * Returns the selected working sets of this container.
 	 *
 	 * @return an array with the selected working sets or <code>null</code> if the scope is not {@link #WORKING_SET_SCOPE}
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchQuery.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchQuery.java
index 2ae82e1..7470c9f 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchQuery.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/ISearchQuery.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,18 +12,18 @@ package org.eclipse.search.ui;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.OperationCanceledException;
+
 /**
- * Represents a particular search query (in a Java example, a query might
- * be "find all occurrences of 'foo' in workspace"). When it's run method is
- * called, the query places any results it finds in the
- * <code>ISearchResult</code> that can be accessed via getSearchResult().
- * Note that <code>getSearchResult</code> may be called at any time, even
- * before the <code>run()</code> method has been called. An empty search
- * result should be returned in that case.
+ * Represents a particular search query (in a Java example, a query might be
+ * "find all occurrences of 'foo' in workspace"). When its run method is called, the query places
+ * any results it finds in the <code>ISearchResult</code> that can be accessed via
+ * getSearchResult(). Note that <code>getSearchResult</code> may be called at any time, even before
+ * the <code>run()</code> method has been called. An empty search result should be returned in that
+ * case.
  * <p>
  * Clients may implement this interface.
  * </p>
- *
+ * 
  * @since 3.0
  */
 public interface ISearchQuery {
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/AbstractTextSearchViewPage.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/AbstractTextSearchViewPage.java
index 919740b..7dd80a2 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/AbstractTextSearchViewPage.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/AbstractTextSearchViewPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1405,7 +1405,7 @@ public abstract class AbstractTextSearchViewPage extends Page implements ISearch
 	}
 
 	/**
-	 * <p>This method is called when the search page gets an open even from it's
+	 * <p>This method is called when the search page gets an 'open' event from its
 	 * underlying viewer (for example on double click). The default
 	 * implementation will open the first match on any element that has matches.
 	 * If the element to be opened is an inner node in the tree layout, the node
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/FileTextSearchScope.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/FileTextSearchScope.java
index 20aee64..003a306 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/FileTextSearchScope.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/FileTextSearchScope.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -292,7 +292,7 @@ public final class FileTextSearchScope extends TextSearchScope {
 	}
 
 	private static void addToList(ArrayList res, IResource curr, boolean includeDerived) {
-		if (!includeDerived && isDerived(curr)) {
+		if (!includeDerived && curr.isDerived(IResource.CHECK_ANCESTORS)) {
 			return;
 		}
 		IPath currPath= curr.getFullPath();
@@ -308,14 +308,4 @@ public final class FileTextSearchScope extends TextSearchScope {
 		}
 		res.add(curr);
 	}
-
-	private static boolean isDerived(IResource curr) {
-		do {
-			if (curr.isDerived()) {
-				return true;
-			}
-			curr= curr.getParent();
-		} while (curr != null);
-		return false;
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/TextSearchQueryProvider.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/TextSearchQueryProvider.java
index 73475f7..d5b8275 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/TextSearchQueryProvider.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search/ui/text/TextSearchQueryProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 Wind River Systems and others.
+ * Copyright (c) 2006, 2008 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/OpenSearchPreferencesAction.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/OpenSearchPreferencesAction.java
index af26a90..5a3349e 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/OpenSearchPreferencesAction.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/OpenSearchPreferencesAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,11 @@ public class OpenSearchPreferencesAction extends Action {
 	 */
 	public void run() {
 		Shell shell= SearchPlugin.getActiveWorkbenchShell();
-		PreferencesUtil.createPreferenceDialogOn(shell, SearchPreferencePage.PAGE_ID, null, null).open();
+		String[] displayedPages= { SearchPreferencePage.PAGE_ID,
+				"org.eclipse.ui.editors.preferencePages.Annotations", //$NON-NLS-1$
+				"org.eclipse.ui.preferencePages.ColorsAndFonts" //$NON-NLS-1$
+		};
+		PreferencesUtil.createPreferenceDialogOn(shell, SearchPreferencePage.PAGE_ID, displayedPages, null).open();
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchAgainAction.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchAgainAction.java
index a78f238..c3b7401 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchAgainAction.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchAgainAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,13 +23,14 @@ import org.eclipse.search.ui.ISearchQuery;
 import org.eclipse.search.ui.ISearchResult;
 import org.eclipse.search.ui.NewSearchUI;
 
+
 class SearchAgainAction extends Action {
 	private SearchView fView;
 
 	public SearchAgainAction(SearchView view) {
 		setText(SearchMessages.SearchAgainAction_label);
 		setToolTipText(SearchMessages.SearchAgainAction_tooltip);
-		SearchPluginImages.setImageDescriptors(this, SearchPluginImages.T_LCL, SearchPluginImages.IMG_LCL_SEARCH_AGAIN);
+		SearchPluginImages.setImageDescriptors(this, SearchPluginImages.T_LCL, SearchPluginImages.IMG_LCL_REFRESH);
 		fView= view;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchView.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchView.java
index 4568226..0cb2463 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchView.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/SearchView.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,8 +122,8 @@ public class SearchView extends PageBookView implements ISearchResultViewPart, I
 		menu.add(new GroupMarker(IContextMenuConstants.GROUP_GOTO));
 		menu.add(new GroupMarker(IContextMenuConstants.GROUP_OPEN));
 		menu.add(new Separator(IContextMenuConstants.GROUP_SHOW));
-		menu.add(new Separator(IContextMenuConstants.GROUP_EDIT));
 		menu.add(new GroupMarker(IContextMenuConstants.GROUP_REMOVE_MATCHES));
+		menu.add(new Separator(IContextMenuConstants.GROUP_EDIT));
 		menu.add(new Separator(IContextMenuConstants.GROUP_REORGANIZE));
 		menu.add(new GroupMarker(IContextMenuConstants.GROUP_GENERATE));
 		menu.add(new Separator(IContextMenuConstants.GROUP_SEARCH));
@@ -499,6 +499,8 @@ public class SearchView extends PageBookView implements ISearchResultViewPart, I
 
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ISearchHelpContextIds.New_SEARCH_VIEW);
 		restorePageFromMemento();
+
+		showLatestSearch();
 	}
 
 	private void initializePageSwitcher() {
@@ -678,9 +680,6 @@ public class SearchView extends PageBookView implements ISearchResultViewPart, I
 		IMenuManager menuManager= site.getActionBars().getMenuManager();
 		createViewMenuGroups(menuManager);
 		fPageState= memento;
-		IWorkbenchSiteProgressService progressService= getProgressService();
-		if (progressService != null)
-			progressService.showBusyForFamily(InternalSearchUI.FAMILY_SEARCH);
 	}
 
 
@@ -706,6 +705,12 @@ public class SearchView extends PageBookView implements ISearchResultViewPart, I
 		srPage.restoreState(memento);
 	}
 
+	private void showLatestSearch() {
+		ISearchQuery[] queries= InternalSearchUI.getInstance().getSearchManager().getQueries();
+		if (queries.length > 0)
+			showSearchResult(queries[0].getSearchResult());
+	}
+
 	/*
 	 *  TODO workaround for focus problem. Clarify focus behavior.
 	 * @see org.eclipse.ui.IWorkbenchPart#setFocus()
@@ -734,10 +739,11 @@ public class SearchView extends PageBookView implements ISearchResultViewPart, I
 		return service;
 	}
 
-    public void showBusy(boolean busy) {
-        super.showBusy(busy);
-        getProgressService().warnOfContentChange();
-    }
+	public void showBusy(boolean busy) {
+		super.showBusy(busy);
+		if (!busy)
+			getProgressService().warnOfContentChange();
+	}
 
 	public Object getAdapter(Class adapter) {
 		Object superAdapter= super.getAdapter(adapter);
diff --git a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/text2/TextSearchQueryProviderRegistry.java b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/text2/TextSearchQueryProviderRegistry.java
index 0ae2ab2..c502536 100644
--- a/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/text2/TextSearchQueryProviderRegistry.java	
+++ b/eclipse/plugins/org.eclipse.search/new search/org/eclipse/search2/internal/ui/text2/TextSearchQueryProviderRegistry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Wind River Systems, IBM Corporation and others.
+ * Copyright (c) 2006, 2011 Wind River Systems, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,11 +66,6 @@ public class TextSearchQueryProviderRegistry {
 		return preferedEngine;
 	}
 
-//	private void setPreferredEngineID(String id) {
-//		Preferences prefs= SearchPlugin.getDefault().getPluginPreferences();
-//		prefs.setValue(SearchPreferencePage.TEXT_SEARCH_QUERY_PROVIDER, id);
-//	}
-
 	private TextSearchQueryProvider createFromExtension(final String id) {
 		final TextSearchQueryProvider[] res= new TextSearchQueryProvider[] { null };
 
diff --git a/eclipse/plugins/org.eclipse.search/plugin.properties b/eclipse/plugins/org.eclipse.search/plugin.properties
index f7cfcef..5dd1326 100644
--- a/eclipse/plugins/org.eclipse.search/plugin.properties
+++ b/eclipse/plugins/org.eclipse.search/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -60,7 +60,7 @@ ViewCommand.searchView.description=Show the Search view
 
 SearchPreferencePage.label= Search
 
-preferenceKeywords.general=Search potential matches
+preferenceKeywords.general=Search potential matches reuse
 
 
 ActionDefinition.openSearchDialog.name= Open Search Dialog
@@ -77,3 +77,6 @@ searchCategory.description= Search command category
 
 textSearchEngine="Text Search Engine"
 textSearchQueryProvider="Text Search Query Provider"
+
+match_highlight.label= Match highlight background color
+match_highlight.description= The background color used to highlight matches in the Search view when colored labels are enabled.
diff --git a/eclipse/plugins/org.eclipse.search/plugin.xml b/eclipse/plugins/org.eclipse.search/plugin.xml
index 204474e..9d113fe 100644
--- a/eclipse/plugins/org.eclipse.search/plugin.xml
+++ b/eclipse/plugins/org.eclipse.search/plugin.xml
@@ -394,4 +394,16 @@
        point="org.eclipse.core.runtime.preferences">
     <initializer class="org.eclipse.search.internal.ui.SearchPreferenceInitializer"/>
  </extension>
+   <extension
+      point="org.eclipse.ui.themes">
+      <colorDefinition
+         label="%match_highlight.label"
+         categoryId="org.eclipse.ui.workbenchMisc"
+         value="206,204,247"
+         id="org.eclipse.search.ui.match.highlight">
+         <description>
+            %match_highlight.description
+         </description>
+      </colorDefinition>
+   </extension>
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/core/text/FileNamePatternSearchScope.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/core/text/FileNamePatternSearchScope.java
index 93a4924..e3e2171 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/core/text/FileNamePatternSearchScope.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/core/text/FileNamePatternSearchScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,7 +168,7 @@ public class FileNamePatternSearchScope extends TextSearchScope {
 	}
 
 	private static void addToList(ArrayList res, IResource curr, boolean includeDerived) {
-		if (!includeDerived && isDerived(curr)) {
+		if (!includeDerived && curr.isDerived(IResource.CHECK_ANCESTORS)) {
 			return;
 		}
 		IPath currPath= curr.getFullPath();
@@ -185,15 +185,4 @@ public class FileNamePatternSearchScope extends TextSearchScope {
 		res.add(curr);
 	}
 
-	private static boolean isDerived(IResource curr) {
-		do {
-			if (curr.isDerived()) {
-				return true;
-			}
-			curr= curr.getParent();
-		} while (curr != null);
-		return false;
-	}
-
-
 }
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemovePotentialMatchesAction.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemovePotentialMatchesAction.java
index d842d73..27369e5 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemovePotentialMatchesAction.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemovePotentialMatchesAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,7 +78,7 @@ class RemovePotentialMatchesAction extends Action {
 
 		ArrayList markers= new ArrayList(size * 3);
 		Iterator iter= selection.iterator();
-		for(int i= 0; iter.hasNext(); i++) {
+		while (iter.hasNext()) {
 			SearchResultViewEntry entry= (SearchResultViewEntry)iter.next();
 			Iterator entryIter= entry.getMarkers().iterator();
 			while (entryIter.hasNext()) {
@@ -103,7 +103,7 @@ class RemovePotentialMatchesAction extends Action {
 
 		int markerCount= 0;
 		Iterator iter= selection.iterator();
-		for(int i= 0; iter.hasNext(); i++) {
+		while (iter.hasNext()) {
 			SearchResultViewEntry entry= (SearchResultViewEntry)iter.next();
 			Iterator entryIter= entry.getMarkers().iterator();
 			while (entryIter.hasNext()) {
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemoveResultAction.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemoveResultAction.java
index 9113175..ac2dad2 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemoveResultAction.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/RemoveResultAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,7 +73,7 @@ class RemoveResultAction extends Action {
 		ArrayList markers= new ArrayList(size * 3);
 		int markerCount= 0;
 		Iterator iter= selection.iterator();
-		for(int i= 0; iter.hasNext(); i++) {
+		while (iter.hasNext()) {
 			SearchResultViewEntry entry= (SearchResultViewEntry)iter.next();
 			markerCount += entry.getMatchCount();
 			markers.addAll(entry.getMarkers());
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java
index ce585ea..0ba1eee 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/ScopePart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,8 @@ public class ScopePart {
 	// Reference to its search page container (can be null)
 	private SearchDialog fSearchDialog;
 
+	private boolean fActiveEditorCanProvideScopeSelection;
+
 	/**
 	 * Returns a new scope part with workspace as initial scope.
 	 * The part is not yet created.
@@ -192,6 +194,15 @@ public class ScopePart {
 
 	}
 
+	public void setActiveEditorCanProvideScopeSelection(boolean state) {
+		fActiveEditorCanProvideScopeSelection= state;
+		fUseSelection.setEnabled(canSearchInSelection());
+
+		// Reinitialize the controls
+		fScope= getStoredScope(fSettingsStore, fCanSearchEnclosingProjects);
+		setSelectedScope(fScope);
+	}
+
 	private void updateSearchPageContainerActionPerformedEnablement() {
 		fSearchDialog.notifyScopeSelectionChanged();
 	}
@@ -272,7 +283,7 @@ public class ScopePart {
 
 		fUseSelection= new Button(fPart, SWT.RADIO);
 		fUseSelection.setData(new Integer(ISearchPageContainer.SELECTION_SCOPE));
-			fUseSelection.setText(SearchMessages.ScopePart_selectedResourcesScope_text);
+		fUseSelection.setText(SearchMessages.ScopePart_selectedResourcesScope_text);
 
 		boolean canSearchInSelection= canSearchInSelection();
 		fUseSelection.setEnabled(canSearchInSelection);
@@ -343,7 +354,8 @@ public class ScopePart {
 
 	private boolean canSearchInSelection() {
 		ISelection selection= fSearchDialog.getSelection();
-		return selection instanceof IStructuredSelection && !selection.isEmpty();
+		return (selection instanceof IStructuredSelection) && !selection.isEmpty() || fActiveEditorCanProvideScopeSelection && fSearchDialog.getActiveEditorInput() != null;
+
 	}
 
 	private void handleScopeChanged(SelectionEvent e) {
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java
index d104c31..fd12ea8 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,13 +69,16 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.window.Window;
 
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.IWorkingSet;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.dialogs.ListSelectionDialog;
+import org.eclipse.ui.part.MultiPageEditorPart;
 
 import org.eclipse.search.internal.ui.util.ExceptionHandler;
 import org.eclipse.search.internal.ui.util.ExtendedDialogWindow;
@@ -84,6 +87,7 @@ import org.eclipse.search.ui.ISearchPage;
 import org.eclipse.search.ui.ISearchPageContainer;
 import org.eclipse.search.ui.ISearchPageScoreComputer;
 
+
 public class SearchDialog extends ExtendedDialogWindow implements ISearchPageContainer, IPageChangeProvider {
 
 	private class TabFolderLayout extends Layout {
@@ -245,16 +249,29 @@ public class SearchDialog extends ExtendedDialogWindow implements ISearchPageCon
 		return fCurrentSelection;
 	}
 
-	private IEditorPart getActiveEditor() {
+	public IEditorPart getActiveEditor() {
 		IWorkbenchPage activePage= fWorkbenchWindow.getActivePage();
 		if (activePage != null) {
 			IEditorPart activeEditor= activePage.getActiveEditor();
-			if (activeEditor == activePage.getActivePart())
+			IWorkbenchPart activePart= activePage.getActivePart();
+			if (activeEditor == activePart || isOldSearchView(activePart))
 				return activeEditor;
 		}
 		return null;
 	}
 
+	/**
+	 * Tells whether the given part is the old ('classic') search view.
+	 * 
+	 * @param part the part to test
+	 * @return <code>true</code> if the given part is the old search view
+	 * @deprecated old ('classic') search is deprecated
+	 * @since 3.7
+	 */
+	private static boolean isOldSearchView(IWorkbenchPart part) {
+		return org.eclipse.search.ui.SearchUI.SEARCH_RESULT_VIEW_ID.equals(part.getSite().getId());
+	}
+
 	//---- Page Handling -------------------------------------------------------
 
 	/*
@@ -540,12 +557,9 @@ public class SearchDialog extends ExtendedDialogWindow implements ISearchPageCon
 		if (selection instanceof IStructuredSelection)
 			element= ((IStructuredSelection) selection).getFirstElement();
 
-		if (element == null) {
-			IEditorPart editorPart= getActiveEditor();
-			if (editorPart != null) {
-				element= editorPart.getEditorInput();
-			}
-		}
+		if (element == null)
+			element= getActiveEditorInput();
+
 		int result= 0;
 		int level= ISearchPageScoreComputer.LOWEST;
 		int size= fDescriptors.size();
@@ -613,6 +627,36 @@ public class SearchDialog extends ExtendedDialogWindow implements ISearchPageCon
 	}
 
 	/*
+	 * @see org.eclipse.search.ui.ISearchPageContainer#allowsActiveEditorAsScope(boolean)
+	 * @since 3.7
+	 */
+	public void setActiveEditorCanProvideScopeSelection(boolean state) {
+		if (fScopeParts[fCurrentIndex] != null)
+			fScopeParts[fCurrentIndex].setActiveEditorCanProvideScopeSelection(state);
+	}
+
+	/*
+	 * @see org.eclipse.search.ui.ISearchPageContainer#getActiveEditorInput()
+	 * @since 3.7
+	 */
+	public IEditorInput getActiveEditorInput() {
+		IEditorPart editor= getActiveEditor();
+		if (editor == null)
+			return null;
+
+		// Handle multi-page editors
+		if (editor instanceof MultiPageEditorPart) {
+			Object page= ((MultiPageEditorPart)editor).getSelectedPage();
+			if (page instanceof IEditorPart)
+				editor= (IEditorPart)page;
+			else
+				return null;
+		}
+
+		return editor.getEditorInput();
+	}
+
+	/*
 	 * Implements method from ISearchPageContainer
 	 */
 	public boolean hasValidScope() {
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java
index 28c8b88..c06861f 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -278,7 +278,6 @@ class SearchPageDescriptor implements IPluginContribution, Comparable {
 
 	private static void storeEnabledPageIds() {
 		getDialogSettings().put(STORE_ENABLED_PAGE_IDS, (String[])fgEnabledPageIds.toArray(new String[fgEnabledPageIds.size()]));
-		SearchPlugin.getDefault().savePluginPreferences();
 	}
 
 	private static IDialogSettings getDialogSettings() {
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java
index aa01759..91768c1 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -363,7 +363,9 @@ public class SearchPlugin extends AbstractUIPlugin {
 
 	/**
 	 * Creates the Search plugin standard groups in a context menu.
+	 * 
 	 * @param menu the menu to create in
+	 * @deprecated old search
 	 */
 	public static void createStandardGroups(IMenuManager menu) {
 		if (!menu.isEmpty())
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java
index 791e0e9..1b02870 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@ import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;
 
+
 /**
  * Bundle of all images used by the Search UI plugin.
  */
@@ -46,7 +47,7 @@ public class SearchPluginImages {
 	// Define image names
 	public static final String IMG_TOOL_SEARCH= NAME_PREFIX + "search.gif"; //$NON-NLS-1$
 
-	public static final String IMG_LCL_SEARCH_AGAIN= NAME_PREFIX + "search_again.gif"; //$NON-NLS-1$
+	public static final String IMG_LCL_REFRESH= NAME_PREFIX + "refresh.gif"; //$NON-NLS-1$
 	public static final String IMG_LCL_PIN_VIEW= NAME_PREFIX + "pin_view.gif"; //$NON-NLS-1$
 
 	public static final String IMG_LCL_SEARCH_REM= NAME_PREFIX + "search_rem.gif"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/DecoratingFileSearchLabelProvider.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/DecoratingFileSearchLabelProvider.java
index 3c0708b..b29f35a 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/DecoratingFileSearchLabelProvider.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/DecoratingFileSearchLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,15 +22,16 @@ import org.eclipse.jface.viewers.ColumnViewer;
 import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.StyledString;
-import org.eclipse.jface.viewers.ViewerColumn;
 import org.eclipse.jface.viewers.StyledString.Styler;
+import org.eclipse.jface.viewers.ViewerColumn;
 
 import org.eclipse.ui.IWorkbenchPreferenceConstants;
 import org.eclipse.ui.PlatformUI;
 
+
 public class DecoratingFileSearchLabelProvider extends DecoratingStyledCellLabelProvider implements IPropertyChangeListener, ILabelProvider {
 
-	private static final String HIGHLIGHT_BG_COLOR_NAME= "org.eclipse.jdt.ui.ColoredLabels.match_highlight"; //$NON-NLS-1$
+	private static final String HIGHLIGHT_BG_COLOR_NAME= "org.eclipse.search.ui.match.highlight"; //$NON-NLS-1$
 
 	public static final Styler HIGHLIGHT_STYLE= StyledString.createColorRegistryStyler(null, HIGHLIGHT_BG_COLOR_NAME);
 
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java
index 4a10d52..2e8c660 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -207,12 +207,12 @@ public class FileSearchPage extends AbstractTextSearchViewPage implements IAdapt
 		if (query.getSearchString().length() > 0) {
 			IStructuredSelection selection= (IStructuredSelection) getViewer().getSelection();
 			if (!selection.isEmpty()) {
-				ReplaceAction replaceSelection= new ReplaceAction(getSite().getShell(), (FileSearchResult) getInput(), selection.toArray(), true);
+				ReplaceAction replaceSelection= new ReplaceAction(getSite().getShell(), (FileSearchResult)getInput(), selection.toArray());
 				replaceSelection.setText(SearchMessages.ReplaceAction_label_selected);
 				mgr.appendToGroup(IContextMenuConstants.GROUP_REORGANIZE, replaceSelection);
 
 			}
-			ReplaceAction replaceAll= new ReplaceAction(getSite().getShell(), (FileSearchResult) getInput(), null, true);
+			ReplaceAction replaceAll= new ReplaceAction(getSite().getShell(), (FileSearchResult)getInput(), null);
 			replaceAll.setText(SearchMessages.ReplaceAction_label_all);
 			mgr.appendToGroup(IContextMenuConstants.GROUP_REORGANIZE, replaceAll);
 		}
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceAction.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceAction.java
index 69d885c..62c4741 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceAction.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,6 @@ public class ReplaceAction extends Action {
 
 	private final FileSearchResult fResult;
 	private final Object[] fSelection;
-	private final boolean fSkipFiltered;
 	private final Shell fShell;
 
 	/**
@@ -44,13 +43,11 @@ public class ReplaceAction extends Action {
 	 * @param shell the parent shell
 	 * @param result the file search page to
 	 * @param selection the selected entries or <code>null</code> to replace all
-	 * @param skipFiltered if set to <code>true</code>, filtered matches will not be replaced
 	 */
-	public ReplaceAction(Shell shell, FileSearchResult result, Object[] selection, boolean skipFiltered) {
+	public ReplaceAction(Shell shell, FileSearchResult result, Object[] selection) {
 		fShell= shell;
 		fResult= result;
 		fSelection= selection;
-		fSkipFiltered= skipFiltered;
 	}
 
 	/* (non-Javadoc)
@@ -58,7 +55,7 @@ public class ReplaceAction extends Action {
 	 */
 	public void run() {
 		try {
-			ReplaceRefactoring refactoring= new ReplaceRefactoring(fResult, fSelection, fSkipFiltered);
+			ReplaceRefactoring refactoring= new ReplaceRefactoring(fResult, fSelection);
 			ReplaceWizard refactoringWizard= new ReplaceWizard(refactoring);
 			if (fSelection == null) {
 				refactoringWizard.setDefaultPageTitle(SearchMessages.ReplaceAction_title_all);
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceRefactoring.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceRefactoring.java
index 68006b4..d642be1 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceRefactoring.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceRefactoring.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,11 @@
  *******************************************************************************/
 package org.eclipse.search.internal.ui.text;
 
+import java.net.URI;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -20,6 +23,10 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
+import com.ibm.icu.text.Collator;
+
+import org.eclipse.core.filesystem.URIUtil;
+
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -62,6 +69,7 @@ import org.eclipse.ltk.core.refactoring.TextEditChangeGroup;
 import org.eclipse.ltk.core.refactoring.TextFileChange;
 import org.eclipse.ltk.core.refactoring.participants.ResourceChangeChecker;
 
+
 public class ReplaceRefactoring extends Refactoring {
 
 	private static class MatchGroup {
@@ -78,20 +86,20 @@ public class ReplaceRefactoring extends Refactoring {
 
 		private MatchGroup[] fMatchGroups;
 		private Match[] fMatches;
+
+		private Map/*<URI,ArrayList<Match>*/ fIgnoredMatches;
 		private final FileSearchResult fResult;
 		private final boolean fIsRemove;
 
-		public SearchResultUpdateChange(FileSearchResult result, MatchGroup[] matchGroups, boolean isRemove) {
-			fResult= result;
+		public SearchResultUpdateChange(FileSearchResult result, MatchGroup[] matchGroups, Map ignoredMatches) {
+			this(result, null, ignoredMatches, true);
 			fMatchGroups= matchGroups;
-			fMatches= null;
-			fIsRemove= isRemove;
 		}
 
-		public SearchResultUpdateChange(FileSearchResult result, Match[] matches, boolean isRemove) {
+		private SearchResultUpdateChange(FileSearchResult result, Match[] matches, Map ignoredMatches, boolean isRemove) {
 			fResult= result;
 			fMatches= matches;
-			fMatchGroups= null;
+			fIgnoredMatches= ignoredMatches;
 			fIsRemove= isRemove;
 		}
 
@@ -116,7 +124,20 @@ public class ReplaceRefactoring extends Refactoring {
 				for (int i= 0; i < fMatchGroups.length; i++) {
 					MatchGroup curr= fMatchGroups[i];
 					if (curr.group.isEnabled()) {
-						matches.add(curr.match);
+						FileMatch match= curr.match;
+						matches.add(match);
+
+						if (fIgnoredMatches == null)
+							continue;
+
+						// Add matches that we removed before starting the refactoring
+						IFile file= match.getFile();
+						URI uri= file.getLocationURI();
+						if (uri != null) {
+							ArrayList ignoredMatches= (ArrayList)fIgnoredMatches.get(uri);
+							if (ignoredMatches != null)
+								matches.addAll(ignoredMatches);
+						}
 					}
 				}
 				fMatches= (Match[]) matches.toArray(new Match[matches.size()]);
@@ -132,7 +153,7 @@ public class ReplaceRefactoring extends Refactoring {
 			} else {
 				fResult.addMatches(matches);
 			}
-			return new SearchResultUpdateChange(fResult, matches, !fIsRemove);
+			return new SearchResultUpdateChange(fResult, matches, fIgnoredMatches, !fIsRemove);
 		}
 
 	}
@@ -141,22 +162,27 @@ public class ReplaceRefactoring extends Refactoring {
 
 	private final FileSearchResult fResult;
 	private final Object[] fSelection;
-	private final boolean fSkipFiltered;
 
-	private HashMap/*<IFile,Set<Match>*/ fMatches;
+	private final HashMap/*<IFile,Set<Match>*/ fMatches;
+
+	/** Map that keeps already collected locations. */
+	private final Map/*<URI,IFile>*/fAlreadyCollected;
+
+	/** Map that keeps ignored matches (can be null). */
+	private Map/*<URI,ArrayList<Match>*/ fIgnoredMatches;
 
 	private String fReplaceString;
 
 	private Change fChange;
 
-	public ReplaceRefactoring(FileSearchResult result, Object[] selection, boolean skipFiltered) {
+	public ReplaceRefactoring(FileSearchResult result, Object[] selection) {
 		Assert.isNotNull(result);
 
 		fResult= result;
 		fSelection= selection;
-		fSkipFiltered= skipFiltered;
 
 		fMatches= new HashMap();
+		fAlreadyCollected= new HashMap(selection != null ? selection.length : result.getElements().length);
 
 		fReplaceString= null;
 	}
@@ -204,7 +230,7 @@ public class ReplaceRefactoring extends Refactoring {
 			FileMatch[] matches= lineElement.getMatches(fResult);
 			for (int i= 0; i < matches.length; i++) {
 				FileMatch fileMatch= matches[i];
-				if (!isSkipped(fileMatch)) {
+				if (isMatchToBeIncluded(fileMatch)) {
 					getBucket(fileMatch.getFile()).add(fileMatch);
 				}
 			}
@@ -220,9 +246,9 @@ public class ReplaceRefactoring extends Refactoring {
 				Collection bucket= null;
 				for (int i= 0; i < matches.length; i++) {
 					FileMatch fileMatch= (FileMatch) matches[i];
-					if (!isSkipped(fileMatch)) {
+					if (isMatchToBeIncluded(fileMatch)) {
 						if (bucket == null) {
-							bucket= getBucket((IFile) object);
+							bucket= getBucket((IFile)object);
 						}
 						bucket.add(fileMatch);
 					}
@@ -248,8 +274,41 @@ public class ReplaceRefactoring extends Refactoring {
 		return !fMatches.isEmpty();
 	}
 
-	private boolean isSkipped(FileMatch match) {
-		return !fSkipFiltered && match.isFiltered();
+	/**
+	 * Checks whether the match should be included. Also collects ignored matches whose
+	 * file is linked to an already collected match.
+	 * 
+	 * @param match the match
+	 * @return <code>true</code> iff the match should be included
+	 * @since 3.7
+	 */
+	private boolean isMatchToBeIncluded(FileMatch match) {
+		IFile file= match.getFile();
+		URI uri= file.getLocationURI();
+		if (uri == null)
+			return true;
+
+		for (Iterator iter= fAlreadyCollected.keySet().iterator(); iter.hasNext();) {
+			if (URIUtil.equals((URI)iter.next(), uri)) {
+				if (file.equals(fAlreadyCollected.get(uri)))
+					return true; // another FileMatch for an IFile which already had matches
+
+				if (fIgnoredMatches == null)
+					fIgnoredMatches= new HashMap();
+
+				ArrayList matches= (ArrayList)fIgnoredMatches.get(uri);
+				if (matches == null) {
+					matches= new ArrayList();
+					fIgnoredMatches.put(uri, matches);
+				}
+				matches.add(match);
+
+				return false;
+			}
+		}
+
+		fAlreadyCollected.put(uri, file);
+		return true;
 	}
 
 	private Collection getBucket(IFile file) {
@@ -277,8 +336,17 @@ public class ReplaceRefactoring extends Refactoring {
 
 		RefactoringStatus resultingStatus= new RefactoringStatus();
 
-		Collection allFiles= fMatches.keySet();
-		checkFilesToBeChanged((IFile[]) allFiles.toArray(new IFile[allFiles.size()]), resultingStatus);
+		Collection allFilesSet= fMatches.keySet();
+		IFile[] allFiles= (IFile[]) allFilesSet.toArray(new IFile[allFilesSet.size()]);
+		Arrays.sort(allFiles, new Comparator() {
+			private Collator fCollator= Collator.getInstance();
+			public int compare(Object o1, Object o2) {
+				String p1= ((IFile) o1).getFullPath().toString();
+				String p2= ((IFile) o2).getFullPath().toString();
+				return fCollator.compare(p1, p2);
+			}
+		});
+		checkFilesToBeChanged(allFiles, resultingStatus);
 		if (resultingStatus.hasFatalError()) {
 			return resultingStatus;
 		}
@@ -289,10 +357,9 @@ public class ReplaceRefactoring extends Refactoring {
 		ArrayList matchGroups= new ArrayList();
 		boolean hasChanges= false;
 		try {
-			for (Iterator iterator= fMatches.entrySet().iterator(); iterator.hasNext();) {
-				Map.Entry entry= (Map.Entry) iterator.next();
-				IFile file= (IFile) entry.getKey();
-				Collection bucket= (Collection) entry.getValue();
+			for (int i= 0; i < allFiles.length; i++) {
+				IFile file= allFiles[i];
+				Collection bucket= (Collection) fMatches.get(file);
 				if (!bucket.isEmpty()) {
 					try {
 						TextChange change= createFileChange(file, pattern, bucket, resultingStatus, matchGroups);
@@ -314,7 +381,7 @@ public class ReplaceRefactoring extends Refactoring {
 			return RefactoringStatus.createFatalErrorStatus(SearchMessages.ReplaceRefactoring_error_no_changes);
 		}
 
-		compositeChange.add(new SearchResultUpdateChange(fResult, (MatchGroup[]) matchGroups.toArray(new MatchGroup[matchGroups.size()]), true));
+		compositeChange.add(new SearchResultUpdateChange(fResult, (MatchGroup[])matchGroups.toArray(new MatchGroup[matchGroups.size()]), fIgnoredMatches));
 
 		fChange= compositeChange;
 		return resultingStatus;
diff --git a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/TextSearchPage.java b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/TextSearchPage.java
index 7473882..de128fa 100644
--- a/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/TextSearchPage.java
+++ b/eclipse/plugins/org.eclipse.search/search/org/eclipse/search/internal/ui/text/TextSearchPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IStatus;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -60,6 +61,7 @@ import org.eclipse.jface.text.FindReplaceDocumentAdapter;
 import org.eclipse.jface.text.FindReplaceDocumentAdapterContentProposalProvider;
 import org.eclipse.jface.text.ITextSelection;
 
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IWorkingSet;
@@ -268,7 +270,7 @@ public class TextSearchPage extends DialogPage implements ISearchPage, IReplaceP
 						ISearchResultPage page= view.getActivePage();
 						if (page instanceof FileSearchPage) {
 							FileSearchPage filePage= (FileSearchPage) page;
-							new ReplaceAction(filePage.getSite().getShell(), (FileSearchResult) filePage.getInput(), null, true).run();
+							new ReplaceAction(filePage.getSite().getShell(), (FileSearchResult)filePage.getInput(), null).run();
 						}
 					}
 				}
@@ -332,6 +334,8 @@ public class TextSearchPage extends DialogPage implements ISearchPage, IReplaceP
 					}
 				}
 			}
+		} else if (getContainer().getActiveEditorInput() != null) {
+			resources.add(getContainer().getActiveEditorInput().getAdapter(IFile.class));
 		}
 		IResource[] arr= (IResource[]) resources.toArray(new IResource[resources.size()]);
 		return FileTextSearchScope.newSearchScope(arr, getExtensions(), fSearchDerived);
@@ -434,6 +438,10 @@ public class TextSearchPage extends DialogPage implements ISearchPage, IReplaceP
 			fPattern.setFocus();
 		}
 		updateOKStatus();
+
+		IEditorInput editorInput= getContainer().getActiveEditorInput();
+		getContainer().setActiveEditorCanProvideScopeSelection(editorInput != null && editorInput.getAdapter(IFile.class) != null);
+
 		super.setVisible(visible);
 	}
 
@@ -588,7 +596,7 @@ public class TextSearchPage extends DialogPage implements ISearchPage, IReplaceP
 
 	private boolean initializePatternControl() {
 		ISelection selection= getSelection();
-		if (selection instanceof ITextSelection && !selection.isEmpty()) {
+		if (selection instanceof ITextSelection && !selection.isEmpty() && ((ITextSelection)selection).getLength() > 0) {
 			String text= ((ITextSelection) selection).getText();
 			if (text != null) {
 				if (fIsRegExSearch)
diff --git a/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index 493c638..6a329fd
--- a/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.carbon.macosx/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.carbon.macosx; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.carbon.macosx/about.html b/eclipse/plugins/org.eclipse.swt.carbon.macosx/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.properties b/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml b/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml
old mode 100644
new mode 100755
index e54746f..39bbef2
--- a/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.carbon.macosx/build.xml
@@ -5,7 +5,7 @@
 	<property name="swt.os" value="macosx" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.carbon.macosx/fragment.properties b/eclipse/plugins/org.eclipse.swt.carbon.macosx/fragment.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index dcfcf81..36871ce
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/META-INF/MANIFEST.MF
@@ -3,11 +3,11 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.cocoa.macosx.x86_64; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
- org.eclipse.swt.internal.cocoa; x-internal:=true
+ org.eclipse.swt.internal.cocoa; x-friends:="org.eclipse.ui"
 Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) )
 Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
  J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/about.html b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/about_files/IJG_README
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/about_files/mpl-v11.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.properties b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml
old mode 100644
new mode 100755
index 5ce91de..c8395bc
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="x86_64" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/fragment.properties b/eclipse/plugins/org.eclipse.swt.cocoa.macosx.x86_64/fragment.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index 6eec22f..50bc388
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/META-INF/MANIFEST.MF
@@ -3,11 +3,11 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.cocoa.macosx; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
- org.eclipse.swt.internal.cocoa; x-internal:=true
+ org.eclipse.swt.internal.cocoa; x-friends:="org.eclipse.ui"
 Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (|(osgi.arch=x86)(osgi.arch=ppc)) )
 Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
  J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/about.html b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/about_files/IJG_README
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/about_files/mpl-v11.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.properties b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml
old mode 100644
new mode 100755
index 8333be3..74798cc
--- a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/build.xml
@@ -5,7 +5,7 @@
 	<property name="swt.os" value="macosx" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.cocoa.macosx/fragment.properties b/eclipse/plugins/org.eclipse.swt.cocoa.macosx/fragment.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/.project b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/.project
new file mode 100644
index 0000000..ad6fc9b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.swt.gtk.aix.ppc</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..78248f0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
+Bundle-Name: %fragmentName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.swt.gtk.aix.ppc;singleton:=true
+Bundle-Version: 3.7.0.qualifier
+Bundle-ManifestVersion: 2
+Bundle-Localization: fragment
+Export-Package: 
+ org.eclipse.swt.internal.accessibility.gtk; x-internal:=true,
+ org.eclipse.swt.internal.cairo; x-internal:=true,
+ org.eclipse.swt.internal.cde; x-internal:=true,
+ org.eclipse.swt.internal.gnome; x-internal:=true,
+ org.eclipse.swt.internal.gtk; x-internal:=true,
+ org.eclipse.swt.internal.mozilla; x-internal:=true,
+ org.eclipse.swt.internal.opengl.glx; x-internal:=true
+Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=aix) (osgi.arch=ppc))
+Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
+ J2SE-1.3
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.x86/about.html b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about.html
old mode 100644
new mode 100755
similarity index 100%
copy from eclipse/features/org.eclipse.platform/about_files/linux.gtk.x86/about.html
copy to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about.html
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/IJG_README
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/IJG_README
rename to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/IJG_README
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/about_cairo.html b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/about_cairo.html
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/about_cairo.html
rename to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/about_cairo.html
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/lgpl-v21.txt b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/lgpl-v21.txt
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/lgpl-v21.txt
rename to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/lgpl-v21.txt
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/mpl-v11.txt
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/mpl-v11.txt
rename to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/mpl-v11.txt
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/pixman-licenses.txt b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/pixman-licenses.txt
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/features/org.eclipse.platform/about_files/linux.motif.x86/about_files/pixman-licenses.txt
rename to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/pixman-licenses.txt
diff --git a/eclipse/features/org.eclipse.platform/about_files/linux.gtk.x86/about_files/webkit-bsd.txt b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/webkit-bsd.txt
similarity index 100%
copy from eclipse/features/org.eclipse.platform/about_files/linux.gtk.x86/about_files/webkit-bsd.txt
copy to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/about_files/webkit-bsd.txt
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.properties b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/build.properties
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.properties
rename to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/build.properties
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/build.xml
new file mode 100755
index 0000000..d656a27
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/build.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.swt.gtk.linux.x86" default="build.jars" basedir=".">
+
+	<property name="swt.ws" value="gtk" />
+	<property name="swt.os" value="aix" />
+	<property name="swt.arch" value="ppc" />
+	
+	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
+	<property name="version.suffix" value="3.7.0" />
+
+	<import file="../org.eclipse.swt/buildFragment.xml"/>
+</project>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/fragment.properties b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/fragment.properties
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/fragment.properties
rename to eclipse/plugins/org.eclipse.swt.gtk.aix.ppc/fragment.properties
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index eb5cad1..7a27773
--- a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.aix.ppc64;singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about.html b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/IJG_README
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/about_cairo.html b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/about_cairo.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/lgpl-v21.txt b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/lgpl-v21.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/mpl-v11.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/pixman-licenses.txt b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/about_files/pixman-licenses.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/build.properties b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/build.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/build.xml
old mode 100644
new mode 100755
index 3a437a1..baef24e
--- a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="ppc64" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/fragment.properties b/eclipse/plugins/org.eclipse.swt.gtk.aix.ppc64/fragment.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/.project b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/.project
new file mode 100644
index 0000000..d7e6fc4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.swt.gtk.hpux.ia64_32</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..f39d627
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
+Bundle-Name: %fragmentName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.swt.gtk.hpux.ia64_32;singleton:=true
+Bundle-Version: 3.7.0.qualifier
+Bundle-ManifestVersion: 2
+Bundle-Localization: fragment
+Export-Package: 
+ org.eclipse.swt.internal.accessibility.gtk; x-internal:=true,
+ org.eclipse.swt.internal.cairo; x-internal:=true,
+ org.eclipse.swt.internal.cde; x-internal:=true,
+ org.eclipse.swt.internal.gnome; x-internal:=true,
+ org.eclipse.swt.internal.gtk; x-internal:=true,
+ org.eclipse.swt.internal.mozilla; x-internal:=true,
+ org.eclipse.swt.internal.opengl.glx; x-internal:=true
+Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=hpux) (osgi.arch=ia64_32))
+Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
+ J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about.html b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about.html
new file mode 100755
index 0000000..f3827d1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about.html
@@ -0,0 +1,262 @@
+<!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=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>August 17, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor’s license for 
+terms and conditions of use.</p>
+
+<h4>Gnome Binding</h4>
+
+<p>The "Gnome Binding" is a binding to the Gnome API.  The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the Gnome Binding:</p>
+<ul>
+	<li>libswt-gnome-gtk-xxxx.so (where "xxxx" is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Gnome Binding:</p>
+<ul>
+	<li>The contents of the directory org/eclipse/swt/internal/gnome (but not including any sub-directories)</li>
+</ul>
+
+<p>The Gnome Binding contains portions of Gnome ("Library").  Gnome is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
+conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the Gnome Binding on a standalone
+basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
+<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
+
+<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
+containing portions of the Library (e.g. the Gnome Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
+other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the Gnome Binding such modifications shall be
+governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
+work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
+
+<h4>GTK+ Binding</h4>
+
+<p>The "GTK+ Binding" is a binding to the GTK+ API.  The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the GTK+ Binding:</p>
+<ul>
+	<li>libswt-atk-gtk-xxxx.so (where "xxxx" is the version number)</li>
+	<li>libswt-pi-gtk-xxxx.so (where "xxxx" is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the GTK+ Binding:</p>
+<ul>
+	<li>The contents of the directory org/eclipse/swt/internal/accessibility/gtk (but not including any sub-directories)</li>
+	<li>The contents of the directory org/eclipse/swt/internal/cde (but not including any sub-directories)</li>
+	<li>The contents of the directory org/eclipse/swt/internal/gtk (but not including any sub-directories)</li>				
+</ul>
+
+<p>The GTK+ Binding contains portions of GTK+ ("Library").  GTK+ is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
+conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the GTK+ Binding on a standalone
+basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
+<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
+
+<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
+containing portions of the Library (e.g. the GTK+ Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
+other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the GTK+ Binding such modifications shall be
+governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
+work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
+
+<h4>Mozilla Binding</h4>
+
+<p>The "Mozilla Binding" is a binding to the Mozilla API.  The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the Mozilla Binding:</p>
+<ul>
+	<li>libswt-mozilla-gtk-xxxx.so (where "xxxx" is the version number)</li>
+	<li>libswt-mozilla-gcc3-gtk-xxxx.so (where "xxxx" is the version number)</li>
+	<li>libswt-xulrunner-gtk-xxxx.so (where "xxxx" is the version number)</li>
+	<li>libswt-xpcominit-gtk-xxxx.so (where "xxxx" is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Mozilla Binding:</p>
+<ul>
+	<li>The contents of the directory org/eclipse/swt/internal/mozilla (but not including any sub-directories)</li>
+</ul>
+
+<p>The Mozilla Binding contains portions of Mozilla ("Mozilla").  Mozilla is made available by Mozilla.org.  Use of Mozilla is governed by the terms and
+conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at
+<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
+
+<h4>XULRunner 1.9 (subset, derivative work)</h4>
+
+The library swt-xulrunner-gtk-xxxx.dll (where "xxxx" is the version number) contains a small portion of XULRunner 1.9 content (header files) that have
+been modified from the Original Code provided by mozilla.org, and whose Initial Developer is Netscape Communications Corporation. Use of this code is governed by
+the terms and conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="./about_files/mpl-v11.txt">mpl-v11.txt</a>)
+and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.
+<p>The changed files are:
+<ul>
+  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h</code>
+  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h</code>
+</ul>
+Changes to the original files were made by SWT on April 7, 2009 and are marked with trailing comment <em>"//SWT-20090407"</em>.
+
+<h4>Cairo Binding</h4>
+
+<p>The "Cairo Binding" is a binding to the Cairo API.  The Content may include any or all of the following files:</p>
+
+<p>The following files in the plug-in JAR shall be defined as the native code portion of the Cairo Binding:</p>
+<ul>
+	<li>libswt-cairo-gtk-xxxx.so (where "xxxx" is the version number)</li>
+</ul>
+
+<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Cairo Binding:</p>
+<ul>
+	<li>The contents of the directory org/eclipse/swt/internal/cairo (but not including any sub-directories)</li>
+</ul>
+
+<p>The Cairo Binding contains portions of Cairo ("Cairo").  Cairo is made available by the Cairo project at
+<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>.  Use of Cairo by the Cairo Binding is governed by the terms and
+conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is
+provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
+
+<h4>Cairo for Linux</h4>
+
+<p>Refer to the file <a href="about_files/about_cairo.html">about_files/about_cairo.html</a> for licensing details about "Cairo for Linux."
+
+<h4>Independent JPEG Group's JPEG software release 6b</h4>
+
+<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
+LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
+
+<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
+with the Content.</p>
+
+<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
+
+<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
+
+<ul>
+    <li>cderror.h</li>
+    <li>cdjpeg.h</li>
+    <li>jchuff.h</li>
+    <li>jdcolor.c</li>
+    <li>jdct.h</li>
+    <li>jdhuff.h</li>
+    <li>jerror.h</li>
+    <li>jidctint.c</li>
+    <li>jinclude.h</li>
+    <li>jmemsys.h</li>
+    <li>jmorecfg.h</li>
+    <li>jpegint.h</li>
+    <li>jpeglib.h</li>
+    <li>jversion.h</li>
+    <li>transupp.h</li>
+</ul>
+
+<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
+
+<ul>
+	<li>jcapimin.c</li>
+	<li>jcapistd.c</li>
+	<li>jccoefct.c</li>
+	<li>jccolor.c</li>
+	<li>jcdctmgr.c</li>
+	<li>jchuff.c</li>
+	<li>jcinit.c</li>
+	<li>jcmainct.c</li>
+	<li>jcmarker.c</li>
+	<li>jcmaster.c</li>
+	<li>jcomapi.c</li>
+	<li>jcparam.c</li>
+	<li>jcphuff.c</li>
+	<li>jcprepct.c</li>
+	<li>jcsample.c</li>
+	<li>jctrans.c</li>
+	<li>jdapimin.c</li>
+	<li>jdapistd.c</li>
+	<li>jdatadst.c</li>
+	<li>jdatasrc.c</li>
+	<li>jdcoefct.c</li>
+	<li>jdcolor.c</li>
+	<li>jddctmgr.c</li>
+	<li>jdhuff.c</li>
+	<li>jdinput.c</li>
+	<li>jdmainct.c</li>
+	<li>jdmarker.c</li>
+	<li>jdmaster.c</li>
+	<li>jdmerge.c</li>
+	<li>jdphuff.c</li>
+	<li>jdpostct.c</li>
+	<li>jdsample.c</li>
+	<li>jdtrans.c</li>
+	<li>jerror.c</li>
+	<li>jfdctflt.c</li>
+	<li>jfdctfst.c</li>
+	<li>jfdctint.c</li>
+	<li>jidctflt.c</li>
+	<li>jidctfst.c</li>
+	<li>jidctint.c</li>
+	<li>jidctred.c</li>
+	<li>jpegtran.c</li>
+	<li>jquant1.c</li>
+	<li>jquant2.c</li>
+	<li>jutils.c</li>
+	<li>cderror.h</li>
+	<li>cdjpeg.h</li>
+	<li>jchuff.h</li>
+	<li>jconfig.h</li>
+	<li>jdct.h</li>
+	<li>jdhuff.h</li>
+	<li>jerror.h</li>
+	<li>jinclude.h</li>
+	<li>jmorecfg.h</li>
+	<li>jpegint.h</li>
+	<li>jpeglib.h</li>
+	<li>jversion.h</li>
+	<li>transupp.h</li>
+</ul>
+	
+<p>The following changes were made to the LIBJPEG code in the Content:</p>
+
+<ol>
+	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
+	<li>Function pointers were replaced with switch statements.</li>
+	<li>The virtual memory, tracing and progress monitoring were removed.</li>
+	<li>The error handling was simplified and now uses Java exceptions.</li>
+</ol>
+
+<h4>PuTTY 0.58 (derivative work)</h4>
+
+<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org.  Use of PuTTY is governed by the terms and
+conditions of the the following MIT-style license:  </p>
+<blockquote>
+  <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
+  <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian  Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,  Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn,  and CORE SDI S.A.</em> </p>
+  <p><em>Permission is hereby granted, free of charge, to any person  obtaining a copy of this software and associated documentation files  (the "Software"), to deal in the Software without restriction,  including without limitation the rights to use, copy, modify, merge,  publish, distribute, sublicense, and/or sell copies of the Software,  and to permit persons to whom the Software is furnished to do so,  subject to the following conditions:</em> </p>
+  <p><em>The above copyright notice and this permission notice shall be  included in all copies or substantial portions of the Software.</em> </p>
+  <p><em>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
+</blockquote>
+<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
+
+<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/IJG_README
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/IJG_README
rename to eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/IJG_README
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/lgpl-v21.txt b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/lgpl-v21.txt
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/lgpl-v21.txt
rename to eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/lgpl-v21.txt
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/mpl-v11.txt
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/mpl-v11.txt
rename to eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/mpl-v11.txt
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/pixman-licenses.txt b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/pixman-licenses.txt
old mode 100644
new mode 100755
similarity index 100%
rename from eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/pixman-licenses.txt
rename to eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/about_files/pixman-licenses.txt
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/build.properties b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/build.properties
new file mode 100755
index 0000000..4f3123c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/build.properties
@@ -0,0 +1,11 @@
+###############################################################################
+# Copyright (c) 2000, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+custom = true
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/build.xml
new file mode 100755
index 0000000..18176c8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/build.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.swt.gtk.hpux.ia64_32" default="build.jars" basedir=".">
+
+	<property name="swt.ws" value="gtk" />
+	<property name="swt.os" value="hpux" />
+	<property name="swt.arch" value="ia64_32" />
+	
+	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
+	<property name="version.suffix" value="3.7.0" />
+
+	<import file="../org.eclipse.swt/buildFragment.xml"/>
+</project>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/fragment.properties b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/fragment.properties
new file mode 100755
index 0000000..25afde1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt.gtk.hpux.ia64_32/fragment.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2000, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+fragmentName = Standard Widget Toolkit for GTK 2.0
+providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/.project b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/.project
deleted file mode 100644
index c902d5f..0000000
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.gtk.linux.ppc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/META-INF/MANIFEST.MF
deleted file mode 100644
index 963de57..0000000
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Manifest-Version: 1.0
-Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
-Bundle-Name: %fragmentName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.swt.gtk.linux.ppc; singleton:=true
-Bundle-Version: 3.6.2.qualifier
-Bundle-ManifestVersion: 2
-Bundle-Localization: fragment
-Export-Package: 
- org.eclipse.swt.internal.accessibility.gtk; x-internal:=true,
- org.eclipse.swt.internal.cairo; x-internal:=true,
- org.eclipse.swt.internal.cde; x-internal:=true,
- org.eclipse.swt.internal.gnome; x-internal:=true,
- org.eclipse.swt.internal.gtk; x-internal:=true,
- org.eclipse.swt.internal.mozilla; x-internal:=true,
- org.eclipse.swt.internal.opengl.glx; x-internal:=true
-Eclipse-PlatformFilter: (& (osgi.ws=gtk) (osgi.os=linux) (osgi.arch=ppc))
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about.html b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about.html
deleted file mode 100644
index 3a9d4d6..0000000
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>August 17, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Gnome Binding</h4>
-
-<p>The "Gnome Binding" is a binding to the Gnome API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Gnome Binding:</p>
-<ul>
-	<li>libswt-gnome-gtk-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Gnome Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/gnome (but not including any sub-directories)</li>
-</ul>
-
-<p>The Gnome Binding contains portions of Gnome ("Library").  Gnome is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
-conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the Gnome Binding on a standalone
-basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
-<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
-
-<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
-containing portions of the Library (e.g. the Gnome Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
-other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the Gnome Binding such modifications shall be
-governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
-work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
-
-<h4>GTK+ Binding</h4>
-
-<p>The "GTK+ Binding" is a binding to the GTK+ API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the GTK+ Binding:</p>
-<ul>
-	<li>libswt-atk-gtk-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-pi-gtk-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the GTK+ Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/accessibility/gtk (but not including any sub-directories)</li>
-	<li>The contents of the directory org/eclipse/swt/internal/cde (but not including any sub-directories)</li>
-	<li>The contents of the directory org/eclipse/swt/internal/gtk (but not including any sub-directories)</li>				
-</ul>
-
-<p>The GTK+ Binding contains portions of GTK+ ("Library").  GTK+ is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
-conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the GTK+ Binding on a standalone
-basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
-<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
-
-<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
-containing portions of the Library (e.g. the GTK+ Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
-other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the GTK+ Binding such modifications shall be
-governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
-work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
-
-<h4>Mozilla Binding</h4>
-
-<p>The "Mozilla Binding" is a binding to the Mozilla API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Mozilla Binding:</p>
-<ul>
-	<li>libswt-mozilla-gtk-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-xulrunner-gtk-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-xpcominit-gtk-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Mozilla Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/mozilla (but not including any sub-directories)</li>
-</ul>
-
-<p>The Mozilla Binding contains portions of Mozilla ("Mozilla").  Mozilla is made available by Mozilla.org.  Use of Mozilla is governed by the terms and
-conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at
-<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
-
-<h4>XULRunner 1.9 (subset, derivative work)</h4>
-
-The library libswt-xulrunner-gtk-xxxx.so (where "xxxx" is the version number) contains a small portion of XULRunner 1.9 content (header files) that have
-been modified from the Original Code provided by mozilla.org, and whose Initial Developer is Netscape Communications Corporation. Use of this code is governed by
-the terms and conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="./about_files/mpl-v11.txt">mpl-v11.txt</a>)
-and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.
-<p>The changed files are:
-<ul>
-  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h</code>
-  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h</code>
-</ul>
-Changes to the original files were made by SWT on April 7, 2009 and are marked with trailing comment <em>"//SWT-20090407"</em>.
-
-<h4>Cairo Binding</h4>
-
-<p>The "Cairo Binding" is a binding to the Cairo API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Cairo Binding:</p>
-<ul>
-	<li>libswt-cairo-gtk-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Cairo Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/cairo (but not including any sub-directories)</li>
-</ul>
-
-<p>The Cairo Binding contains portions of Cairo ("Cairo").  Cairo is made available by the Cairo project at
-<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>.  Use of Cairo by the Cairo Binding is governed by the terms and
-conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is
-provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
-
-<h4>Cairo for Linux</h4>
-
-<p>Refer to the file <a href="about_files/about_cairo.html">about_files/about_cairo.html</a> for licensing details about "Cairo for Linux."
-
-<h4>Independent JPEG Group's JPEG software release 6b</h4>
-
-<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
-LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
-
-<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
-with the Content.</p>
-
-<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
-
-<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
-
-<ul>
-    <li>cderror.h</li>
-    <li>cdjpeg.h</li>
-    <li>jchuff.h</li>
-    <li>jdcolor.c</li>
-    <li>jdct.h</li>
-    <li>jdhuff.h</li>
-    <li>jerror.h</li>
-    <li>jidctint.c</li>
-    <li>jinclude.h</li>
-    <li>jmemsys.h</li>
-    <li>jmorecfg.h</li>
-    <li>jpegint.h</li>
-    <li>jpeglib.h</li>
-    <li>jversion.h</li>
-    <li>transupp.h</li>
-</ul>
-
-<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
-
-<ul>
-	<li>jcapimin.c</li>
-	<li>jcapistd.c</li>
-	<li>jccoefct.c</li>
-	<li>jccolor.c</li>
-	<li>jcdctmgr.c</li>
-	<li>jchuff.c</li>
-	<li>jcinit.c</li>
-	<li>jcmainct.c</li>
-	<li>jcmarker.c</li>
-	<li>jcmaster.c</li>
-	<li>jcomapi.c</li>
-	<li>jcparam.c</li>
-	<li>jcphuff.c</li>
-	<li>jcprepct.c</li>
-	<li>jcsample.c</li>
-	<li>jctrans.c</li>
-	<li>jdapimin.c</li>
-	<li>jdapistd.c</li>
-	<li>jdatadst.c</li>
-	<li>jdatasrc.c</li>
-	<li>jdcoefct.c</li>
-	<li>jdcolor.c</li>
-	<li>jddctmgr.c</li>
-	<li>jdhuff.c</li>
-	<li>jdinput.c</li>
-	<li>jdmainct.c</li>
-	<li>jdmarker.c</li>
-	<li>jdmaster.c</li>
-	<li>jdmerge.c</li>
-	<li>jdphuff.c</li>
-	<li>jdpostct.c</li>
-	<li>jdsample.c</li>
-	<li>jdtrans.c</li>
-	<li>jerror.c</li>
-	<li>jfdctflt.c</li>
-	<li>jfdctfst.c</li>
-	<li>jfdctint.c</li>
-	<li>jidctflt.c</li>
-	<li>jidctfst.c</li>
-	<li>jidctint.c</li>
-	<li>jidctred.c</li>
-	<li>jpegtran.c</li>
-	<li>jquant1.c</li>
-	<li>jquant2.c</li>
-	<li>jutils.c</li>
-	<li>cderror.h</li>
-	<li>cdjpeg.h</li>
-	<li>jchuff.h</li>
-	<li>jconfig.h</li>
-	<li>jdct.h</li>
-	<li>jdhuff.h</li>
-	<li>jerror.h</li>
-	<li>jinclude.h</li>
-	<li>jmorecfg.h</li>
-	<li>jpegint.h</li>
-	<li>jpeglib.h</li>
-	<li>jversion.h</li>
-	<li>transupp.h</li>
-</ul>
-	
-<p>The following changes were made to the LIBJPEG code in the Content:</p>
-
-<ol>
-	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
-	<li>Function pointers were replaced with switch statements.</li>
-	<li>The virtual memory, tracing and progress monitoring were removed.</li>
-	<li>The error handling was simplified and now uses Java exceptions.</li>
-</ol>
-
-<h4>PuTTY 0.58 (derivative work)</h4>
-
-<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org.  Use of PuTTY is governed by the terms and
-conditions of the the following MIT-style license:  </p>
-<blockquote>
-  <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
-  <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian  Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,  Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn,  and CORE SDI S.A.</em> </p>
-  <p><em>Permission is hereby granted, free of charge, to any person  obtaining a copy of this software and associated documentation files  (the "Software"), to deal in the Software without restriction,  including without limitation the rights to use, copy, modify, merge,  publish, distribute, sublicense, and/or sell copies of the Software,  and to permit persons to whom the Software is furnished to do so,  subject to the following conditions:</em> </p>
-  <p><em>The above copyright notice and this permission notice shall be  included in all copies or substantial portions of the Software.</em> </p>
-  <p><em>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
-</blockquote>
-<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
-
-<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/about_cairo.html b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/about_cairo.html
deleted file mode 100644
index 0132307..0000000
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/about_files/about_cairo.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>March 27, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation has included the following package for your convenience:</p> 
-
-<h4>Cairo 1.0.2 for Linux</h4>
-
-<p>Cairo for Linux ("Cairo") is developed by The Cairo Project (<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>):</p>
-
-<p>Cairo is delivered in the following file ("Cairo Library"):</p>
-<ul>
-    <li>libcairo-swt.so</li>
-</ul>
-
-<p>which was compiled from Cairo source code available at <a href="http://www.cairographics.org/snapshots" target="_blank">http://www.cairographics.org/snapshots</a>.</p>
-
-<p>Your use of the Cairo code in binary form is subject to
-the terms and conditions of Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided (<a href="mpl-v11.txt" target="blank">mpl-v11.txt</a>)
-and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html.</a>
-
-<h4>pixman 0.1.6</h4>
-
-<p>pixman ("pixman") is packaged within the Cairo Library and was compiled from source code available at
-<a href="http://www.cairographics.org/snapshots" target="_blank">http://www.cairographics.org/snapshots</a>.
-pixman includes the following packages:</p>
-
-<ul>
-	<li>libpixregion</li>
-	<li>libic</li>
-	<li>slim</li>
-</ul>
-
-Your use of pixman is subject to the terms and conditions of the licenses in <a href="pixman-licenses.txt" target="blank">pixman-licenses.txt</a>.</p>
-
-<p>If you did not receive the Cairo Library directly from the Eclipse Foundation, the package is being redistributed by another party ("Redistributor") and different terms and conditions may
-apply its use.  Check the Redistributor's license that was provided with the content.  If no such license exists, contact the Redistributor.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.xml
deleted file mode 100644
index 3d7d687..0000000
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc/build.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.swt.gtk.linux.ppc" default="build.jars" basedir=".">
-
-	<property name="swt.ws" value="gtk" />
-	<property name="swt.os" value="linux" />
-	<property name="swt.arch" value="ppc" />
-	
-	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
-	
-	<import file="../org.eclipse.swt/buildFragment.xml"/>
-</project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index d4e70d4..be5afcd
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.linux.ppc64;singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about.html b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/IJG_README
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/about_cairo.html b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/about_cairo.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/lgpl-v21.txt b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/lgpl-v21.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/mpl-v11.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/pixman-licenses.txt b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/about_files/pixman-licenses.txt
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.properties b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.xml
old mode 100644
new mode 100755
index 7d061ef..257c038
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="ppc64" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/fragment.properties b/eclipse/plugins/org.eclipse.swt.gtk.linux.ppc64/fragment.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF
index bf836c1..b6c1e27 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.linux.s390; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml
index 8e28e60..73cb8b1 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="s390" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF
index b76d48c..69384f9 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.linux.s390x; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml
index 532c98a..87fe541 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.s390x/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="s390x" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF
index bf452ce..8a31547 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.linux.x86; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml
index 4e27917..3d58922 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="x86" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF
index 403baa1..4f7ccf9 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.linux.x86_64; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml
index 603f376..51ffe08 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_64/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="x86_64" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF
index a44ce66..f12eaf4 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.solaris.sparc; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml
index 3122656..0023fd3 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.sparc/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="sparc" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF
index d0586a7..bfa306d 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.gtk.solaris.x86; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml
index 0a79ee0..e962444 100644
--- a/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.gtk.solaris.x86/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="x86" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/.classpath b/eclipse/plugins/org.eclipse.swt.jmx/.classpath
deleted file mode 100644
index 304e861..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/.options b/eclipse/plugins/org.eclipse.swt.jmx/.options
deleted file mode 100644
index 8979064..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/.options
+++ /dev/null
@@ -1,2 +0,0 @@
-org.eclipse.ui/debug=true 
-org.eclipse.ui/trace/graphics=true
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/.project b/eclipse/plugins/org.eclipse.swt.jmx/.project
deleted file mode 100644
index 30391b8..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.jmx</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.swt.jmx/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 31fdcbf..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,309 +0,0 @@
-#Thu May 10 13:51:34 EDT 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=false
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false
-org.eclipse.jdt.core.formatter.comment.format_line_comments=false
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=800
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.swt.jmx/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index bb0a68b..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,9 +0,0 @@
-#Mon Feb 26 11:28:09 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_core
-formatter_settings_version=11
-internal.default.compliance=default
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=;
-org.eclipse.jdt.ui.ondemandthreshold=3
-org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.jmx/META-INF/MANIFEST.MF
deleted file mode 100644
index 8931c6f..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,20 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Resource Monitoring SWT Extensions (Incubation)
-Bundle-SymbolicName: org.eclipse.swt.jmx;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Eclipse-LazyStart: true
-Import-Package: javax.management,
- javax.management.remote,
- org.eclipse.core.runtime; common=split,
- org.eclipse.equinox.jmx.common,
- org.eclipse.osgi.util,
- org.eclipse.swt.graphics,
- org.eclipse.swt.widgets,
- org.osgi.framework,
- org.eclipse.equinox.jmx.server
-Bundle-RequiredExecutionEnvironment: J2SE-1.5,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
-Bundle-Activator: org.eclipse.swt.jmx.internal.Activator
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/about.html b/eclipse/plugins/org.eclipse.swt.jmx/about.html
deleted file mode 100644
index 5d03fd4..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/build.properties b/eclipse/plugins/org.eclipse.swt.jmx/build.properties
deleted file mode 100644
index b8f0ab6..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html,\
-               icons/
-src.includes = about.html
-javacSource=1.3
-javacTarget=1.1
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/icons/sleak.png b/eclipse/plugins/org.eclipse.swt.jmx/icons/sleak.png
deleted file mode 100644
index 1a9271c..0000000
Binary files a/eclipse/plugins/org.eclipse.swt.jmx/icons/sleak.png and /dev/null differ
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/plugin.xml b/eclipse/plugins/org.eclipse.swt.jmx/plugin.xml
deleted file mode 100644
index af5f296..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
-<plugin>
-   <extension
-         point="org.eclipse.equinox.jmx.server.contribution">
-      <contribution
-            class="org.eclipse.swt.jmx.internal.SleakContributionProvider"
-            isroot="true"/>
-   </extension>
-
-</plugin>
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/Activator.java b/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/Activator.java
deleted file mode 100644
index c8e2f3e..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/Activator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.jmx.internal;
-
-import org.osgi.framework.*;
-
-public class Activator implements BundleActivator {
-
-	private static BundleContext bundleContext;
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		bundleContext = context;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		bundleContext = null;
-	}
-
-	public static Bundle getBundle() {
-		return bundleContext == null ? null : bundleContext.getBundle();
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakContributionProvider.java b/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakContributionProvider.java
deleted file mode 100644
index a8bf02d..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakContributionProvider.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.jmx.internal;
-
-import java.net.URL;
-import java.util.Set;
-import java.util.TreeSet;
-import javax.management.*;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.equinox.jmx.common.ContributionNotificationEvent;
-import org.eclipse.equinox.jmx.server.Contribution;
-import org.eclipse.equinox.jmx.server.ContributionProvider;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.Display;
-
-public class SleakContributionProvider extends ContributionProvider {
-
-	private static int DEFAULT_REFRESH_INTERVAL = 10000;
-	private static final String SLEAK_IMG_PATH = "icons/sleak.png"; //$NON-NLS-1$
-
-	private int colors, cursors, fonts, gcs, images, regions;
-	private boolean started;
-	private int refreshInterval = DEFAULT_REFRESH_INTERVAL;
-	private Object mutex = new Object();
-
-	public SleakContributionProvider() {
-		new Sleak().start();
-	}
-
-	/**
-	 * Start monitoring graphics resources.
-	 */
-	public void start() {
-		synchronized (mutex) {
-			started = true;
-			mutex.notify();
-		}
-	}
-
-	/**
-	 * Stop monitoring graphics resources.
-	 */
-	public synchronized void stop() {
-		synchronized (mutex) {
-			started = false;
-		}
-	}
-
-	public void setPollInterval(Integer interval) {
-		refreshInterval = interval.intValue();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#contributesType(java.lang.Object)
-	 */
-	protected boolean contributesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#providesType(java.lang.Object)
-	 */
-	protected boolean providesType(Object obj) {
-		return false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createProvider(java.lang.Object)
-	 */
-	protected ContributionProvider createProvider(Object obj) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.ContributionProvider#createContribution(java.lang.Object)
-	 */
-	protected Contribution createContribution(Object obj) throws MalformedObjectNameException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getName()
-	 */
-	protected String getName() {
-		return SleakMessages.name;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getChildren()
-	 */
-	protected Object[] getChildren() {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getProperties()
-	 */
-	protected Set getProperties() {
-		Set result = new TreeSet();
-		result.add(SleakMessages.colors + " " + colors); //$NON-NLS-1$
-		result.add(SleakMessages.cursors + " " + cursors); //$NON-NLS-1$
-		result.add(SleakMessages.fonts + " " + fonts); //$NON-NLS-1$
-		result.add(SleakMessages.gcs + " " + gcs); //$NON-NLS-1$
-		result.add(SleakMessages.images + " " + images); //$NON-NLS-1$
-		result.add(SleakMessages.regions + " " + regions); //$NON-NLS-1$
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getImageLocation()
-	 */
-	protected URL getImageLocation() {
-		return FileLocator.find(Activator.getBundle(), new Path(SLEAK_IMG_PATH), null);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#getMBeanInfo(java.lang.Object)
-	 */
-	protected MBeanInfo getMBeanInfo(Object delegate) {
-		MBeanOperationInfo[] ops = new MBeanOperationInfo[3];
-		ops[0] = createStartOperation();
-		ops[1] = createStopOperation();
-		ops[2] = createSetPollIntervalOperation();
-		return new MBeanInfo(SleakContributionProvider.class.getName(), SleakMessages.description, null, null, ops, null);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.jmx.server.Contribution#invokeOperation(java.lang.String, java.lang.Object[], java.lang.String[])
-	 */
-	protected Object invokeOperation(String operationName, Object[] args, String[] argTypes) {
-		if (operationName.equals("start")) {
-			start();
-		} else if (operationName.equals("stop")) {
-			stop();
-		} else if (operationName.equals("setPollInterval") && args.length == 1 && args[0] instanceof Integer) {
-			try {
-				setPollInterval((Integer) args[0]);
-			} catch (NumberFormatException e) {
-			}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttribute(java.lang.String)
-	 */
-	public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttribute(javax.management.Attribute)
-	 */
-	public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#getAttributes(java.lang.String[])
-	 */
-	public AttributeList getAttributes(String[] attributes) {
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see javax.management.DynamicMBean#setAttributes(javax.management.AttributeList)
-	 */
-	public AttributeList setAttributes(AttributeList attributes) {
-		return null;
-	}
-
-	private static MBeanOperationInfo createStartOperation() {
-		return new MBeanOperationInfo("start", SleakMessages.start_monitoring, new MBeanParameterInfo[0], Void.TYPE.getName(), 0);//$NON-NLS-1$
-	}
-
-	private static MBeanOperationInfo createStopOperation() {
-		return new MBeanOperationInfo("stop", SleakMessages.stop_monitoring, new MBeanParameterInfo[0], Void.TYPE.getName(), 0); //$NON-NLS-1$
-	}
-
-	private static MBeanOperationInfo createSetPollIntervalOperation() {
-		try {
-			return new MBeanOperationInfo(SleakMessages.poll_interval_desc, SleakContributionProvider.class.getMethod("setPollInterval", new Class[] {Integer.class}));
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	private class Sleak extends Thread {
-
-		Object[] oldObjects = new Object[0];
-		Object[] objects = new Object[0];
-		Error[] errors = new Error[0];
-
-		ContributionNotificationEvent event = new ContributionNotificationEvent(ContributionNotificationEvent.NOTIFICATION_UPDATED);
-
-		public Sleak() {
-		}
-
-		public void run() {
-			while (true) {
-				synchronized (mutex) {
-					try {
-						if (!started) {
-							mutex.wait();
-						}
-						refreshDifference();
-					} catch (InterruptedException e) {
-					}
-				}
-				try {
-					contributionStateChanged(event);
-					Thread.sleep(refreshInterval);
-				} catch (InterruptedException e) {
-				}
-			}
-		}
-
-		void refreshCounters() {
-			colors = cursors = fonts = gcs = images = regions = 0;
-			for (int i = 0; i < objects.length; i++) {
-				Object object = objects[i];
-				if (object instanceof Color)
-					colors++;
-				if (object instanceof Cursor)
-					cursors++;
-				if (object instanceof Font)
-					fonts++;
-				if (object instanceof GC)
-					gcs++;
-				if (object instanceof Image)
-					images++;
-				if (object instanceof Region)
-					regions++;
-			}
-		}
-
-		void refreshDifference() {
-			final Display display = Display.getDefault();
-			display.asyncExec(new Runnable() {
-				public void run() {
-					DeviceData info = display.getDeviceData();
-					if (!info.tracking) {
-						return;
-					}
-					Object[] newObjects = info.objects;
-					Error[] newErrors = info.errors;
-					Object[] diffObjects = new Object[newObjects.length];
-					Error[] diffErrors = new Error[newErrors.length];
-					int count = 0;
-					for (int i = 0; i < newObjects.length; i++) {
-						int index = 0;
-						while (index < oldObjects.length) {
-							if (newObjects[i] == oldObjects[index])
-								break;
-							index++;
-						}
-						if (index == oldObjects.length) {
-							diffObjects[count] = newObjects[i];
-							diffErrors[count] = newErrors[i];
-							count++;
-						}
-					}
-					objects = new Object[count];
-					errors = new Error[count];
-					System.arraycopy(diffObjects, 0, objects, 0, count);
-					System.arraycopy(diffErrors, 0, errors, 0, count);
-					refreshCounters();
-				}
-			});
-		}
-	}
-}
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakMessages.java b/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakMessages.java
deleted file mode 100644
index b12bcd8..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakMessages.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.jmx.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-public class SleakMessages extends NLS {
-
-	public static String name;
-	public static String description;
-	public static String start_monitoring;
-	public static String stop_monitoring;
-	public static String colors;
-	public static String cursors;
-	public static String fonts;
-	public static String images;
-	public static String regions;
-	public static String gcs;
-	public static String poll_interval_desc;
-
-	private SleakMessages() {
-		// disallow instantiations
-	}
-
-	static {
-		NLS.initializeMessages(SleakMessages.class.getName(), SleakMessages.class);
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakMessages.properties b/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakMessages.properties
deleted file mode 100644
index 8b0261a..0000000
--- a/eclipse/plugins/org.eclipse.swt.jmx/src/org/eclipse/swt/jmx/internal/SleakMessages.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-name = Sleak
-description = Graphic resources monitor
-start_monitoring = Start monitoring
-stop_monitoring = Stop monitoring
-colors = Colors:
-cursors = Cursors:
-fonts = Fonts:
-images = Images:
-gcs = GCs:
-regions = Regions:
-poll_interval_desc = Polling interval.
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/.project b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/.project
deleted file mode 100644
index d926061..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.motif.aix.ppc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/META-INF/MANIFEST.MF
deleted file mode 100644
index ac18d16..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Manifest-Version: 1.0
-Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
-Bundle-Name: %fragmentName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.swt.motif.aix.ppc; singleton:=true
-Bundle-Version: 3.6.2.qualifier
-Bundle-ManifestVersion: 2
-Bundle-Localization: fragment
-Export-Package: 
- org.eclipse.swt.internal.cairo; x-internal:=true,
- org.eclipse.swt.internal.cde; x-internal:=true,
- org.eclipse.swt.internal.gnome; x-internal:=true,
- org.eclipse.swt.internal.gtk; x-internal:=true,
- org.eclipse.swt.internal.motif; x-internal:=true,
- org.eclipse.swt.internal.mozilla; x-internal:=true,
- org.eclipse.swt.internal.opengl.glx; x-internal:=true
-Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=aix) (osgi.arch=ppc))
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/about.html b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/about.html
deleted file mode 100644
index 0973f70..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/about.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>August 17, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Independent JPEG Group's JPEG software release 6b</h4>
-
-<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
-LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
-
-<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
-with the Content.</p>
-
-<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
-
-<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
-
-<ul>
-    <li>cderror.h</li>
-    <li>cdjpeg.h</li>
-    <li>jchuff.h</li>
-    <li>jdcolor.c</li>
-    <li>jdct.h</li>
-    <li>jdhuff.h</li>
-    <li>jerror.h</li>
-    <li>jidctint.c</li>
-    <li>jinclude.h</li>
-    <li>jmemsys.h</li>
-    <li>jmorecfg.h</li>
-    <li>jpegint.h</li>
-    <li>jpeglib.h</li>
-    <li>jversion.h</li>
-    <li>transupp.h</li>
-</ul>
-
-<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
-
-<ul>
-	<li>jcapimin.c</li>
-	<li>jcapistd.c</li>
-	<li>jccoefct.c</li>
-	<li>jccolor.c</li>
-	<li>jcdctmgr.c</li>
-	<li>jchuff.c</li>
-	<li>jcinit.c</li>
-	<li>jcmainct.c</li>
-	<li>jcmarker.c</li>
-	<li>jcmaster.c</li>
-	<li>jcomapi.c</li>
-	<li>jcparam.c</li>
-	<li>jcphuff.c</li>
-	<li>jcprepct.c</li>
-	<li>jcsample.c</li>
-	<li>jctrans.c</li>
-	<li>jdapimin.c</li>
-	<li>jdapistd.c</li>
-	<li>jdatadst.c</li>
-	<li>jdatasrc.c</li>
-	<li>jdcoefct.c</li>
-	<li>jdcolor.c</li>
-	<li>jddctmgr.c</li>
-	<li>jdhuff.c</li>
-	<li>jdinput.c</li>
-	<li>jdmainct.c</li>
-	<li>jdmarker.c</li>
-	<li>jdmaster.c</li>
-	<li>jdmerge.c</li>
-	<li>jdphuff.c</li>
-	<li>jdpostct.c</li>
-	<li>jdsample.c</li>
-	<li>jdtrans.c</li>
-	<li>jerror.c</li>
-	<li>jfdctflt.c</li>
-	<li>jfdctfst.c</li>
-	<li>jfdctint.c</li>
-	<li>jidctflt.c</li>
-	<li>jidctfst.c</li>
-	<li>jidctint.c</li>
-	<li>jidctred.c</li>
-	<li>jpegtran.c</li>
-	<li>jquant1.c</li>
-	<li>jquant2.c</li>
-	<li>jutils.c</li>
-	<li>cderror.h</li>
-	<li>cdjpeg.h</li>
-	<li>jchuff.h</li>
-	<li>jconfig.h</li>
-	<li>jdct.h</li>
-	<li>jdhuff.h</li>
-	<li>jerror.h</li>
-	<li>jinclude.h</li>
-	<li>jmorecfg.h</li>
-	<li>jpegint.h</li>
-	<li>jpeglib.h</li>
-	<li>jversion.h</li>
-	<li>transupp.h</li>
-</ul>
-	
-<p>The following changes were made to the LIBJPEG code in the Content:</p>
-
-<ol>
-	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
-	<li>Function pointers were replaced with switch statements.</li>
-	<li>The virtual memory, tracing and progress monitoring were removed.</li>
-	<li>The error handling was simplified and now uses Java exceptions.</li>
-</ol>
-
-<h4>PuTTY 0.58 (derivative work)</h4>
-
-<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org.  Use of PuTTY is governed by the terms and
-conditions of the the following MIT-style license:  </p>
-<blockquote>
-  <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
-  <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian  Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,  Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn,  and CORE SDI S.A.</em> </p>
-  <p><em>Permission is hereby granted, free of charge, to any person  obtaining a copy of this software and associated documentation files  (the "Software"), to deal in the Software without restriction,  including without limitation the rights to use, copy, modify, merge,  publish, distribute, sublicense, and/or sell copies of the Software,  and to permit persons to whom the Software is furnished to do so,  subject to the following conditions:</em> </p>
-  <p><em>The above copyright notice and this permission notice shall be  included in all copies or substantial portions of the Software.</em> </p>
-  <p><em>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
-</blockquote>
-<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
-
-<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/about_files/IJG_README
deleted file mode 100644
index 86cc206..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/about_files/IJG_README
+++ /dev/null
@@ -1,385 +0,0 @@
-The Independent JPEG Group's JPEG software
-==========================================
-
-README for release 6b of 27-Mar-1998
-====================================
-
-This distribution contains the sixth public release of the Independent JPEG
-Group's free JPEG software.  You are welcome to redistribute this software and
-to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
-
-Serious users of this software (particularly those incorporating it into
-larger programs) should contact IJG at jpeg-info at uunet.uu.net to be added to
-our electronic mailing list.  Mailing list members are notified of updates
-and have a chance to participate in technical discussions, etc.
-
-This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
-Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
-Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
-Group.
-
-IJG is not affiliated with the official ISO JPEG standards committee.
-
-
-DOCUMENTATION ROADMAP
-=====================
-
-This file contains the following sections:
-
-OVERVIEW            General description of JPEG and the IJG software.
-LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
-REFERENCES          Where to learn more about JPEG.
-ARCHIVE LOCATIONS   Where to find newer versions of this software.
-RELATED SOFTWARE    Other stuff you should get.
-FILE FORMAT WARS    Software *not* to get.
-TO DO               Plans for future IJG releases.
-
-Other documentation files in the distribution are:
-
-User documentation:
-  install.doc       How to configure and install the IJG software.
-  usage.doc         Usage instructions for cjpeg, djpeg, jpegtran,
-                    rdjpgcom, and wrjpgcom.
-  *.1               Unix-style man pages for programs (same info as usage.doc).
-  wizard.doc        Advanced usage instructions for JPEG wizards only.
-  change.log        Version-to-version change highlights.
-Programmer and internal documentation:
-  libjpeg.doc       How to use the JPEG library in your own programs.
-  example.c         Sample code for calling the JPEG library.
-  structure.doc     Overview of the JPEG library's internal structure.
-  filelist.doc      Road map of IJG files.
-  coderules.doc     Coding style rules --- please read if you contribute code.
-
-Please read at least the files install.doc and usage.doc.  Useful information
-can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
-ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
-
-If you want to understand how the JPEG code works, we suggest reading one or
-more of the REFERENCES, then looking at the documentation files (in roughly
-the order listed) before diving into the code.
-
-
-OVERVIEW
-========
-
-This package contains C software to implement JPEG image compression and
-decompression.  JPEG (pronounced "jay-peg") is a standardized compression
-method for full-color and gray-scale images.  JPEG is intended for compressing
-"real-world" scenes; line drawings, cartoons and other non-realistic images
-are not its strong suit.  JPEG is lossy, meaning that the output image is not
-exactly identical to the input image.  Hence you must not use JPEG if you
-have to have identical output bits.  However, on typical photographic images,
-very good compression levels can be obtained with no visible change, and
-remarkably high compression levels are possible if you can tolerate a
-low-quality image.  For more details, see the references, or just experiment
-with various compression settings.
-
-This software implements JPEG baseline, extended-sequential, and progressive
-compression processes.  Provision is made for supporting all variants of these
-processes, although some uncommon parameter settings aren't implemented yet.
-For legal reasons, we are not distributing code for the arithmetic-coding
-variants of JPEG; see LEGAL ISSUES.  We have made no provision for supporting
-the hierarchical or lossless processes defined in the standard.
-
-We provide a set of library routines for reading and writing JPEG image files,
-plus two sample applications "cjpeg" and "djpeg", which use the library to
-perform conversion between JPEG and some other popular image file formats.
-The library is intended to be reused in other applications.
-
-In order to support file conversion and viewing software, we have included
-considerable functionality beyond the bare JPEG coding/decoding capability;
-for example, the color quantization modules are not strictly part of JPEG
-decoding, but they are essential for output to colormapped file formats or
-colormapped displays.  These extra functions can be compiled out of the
-library if not required for a particular application.  We have also included
-"jpegtran", a utility for lossless transcoding between different JPEG
-processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
-inserting and extracting textual comments in JFIF files.
-
-The emphasis in designing this software has been on achieving portability and
-flexibility, while also making it fast enough to be useful.  In particular,
-the software is not intended to be read as a tutorial on JPEG.  (See the
-REFERENCES section for introductory material.)  Rather, it is intended to
-be reliable, portable, industrial-strength code.  We do not claim to have
-achieved that goal in every aspect of the software, but we strive for it.
-
-We welcome the use of this software as a component of commercial products.
-No royalty is required, but we do ask for an acknowledgement in product
-documentation, as described under LEGAL ISSUES.
-
-
-LEGAL ISSUES
-============
-
-In plain English:
-
-1. We don't promise that this software works.  (But if you find any bugs,
-   please let us know!)
-2. You can use this software for whatever you want.  You don't have to pay us.
-3. You may not pretend that you wrote this software.  If you use it in a
-   program, you must acknowledge somewhere in your documentation that
-   you've used the IJG code.
-
-In legalese:
-
-The authors make NO WARRANTY or representation, either express or implied,
-with respect to this software, its quality, accuracy, merchantability, or
-fitness for a particular purpose.  This software is provided "AS IS", and you,
-its user, assume the entire risk as to its quality and accuracy.
-
-This software is copyright (C) 1991-1998, Thomas G. Lane.
-All Rights Reserved except as specified below.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-software (or portions thereof) for any purpose, without fee, subject to these
-conditions:
-(1) If any part of the source code for this software is distributed, then this
-README file must be included, with this copyright and no-warranty notice
-unaltered; and any additions, deletions, or changes to the original files
-must be clearly indicated in accompanying documentation.
-(2) If only executable code is distributed, then the accompanying
-documentation must state that "this software is based in part on the work of
-the Independent JPEG Group".
-(3) Permission for use of this software is granted only if the user accepts
-full responsibility for any undesirable consequences; the authors accept
-NO LIABILITY for damages of any kind.
-
-These conditions apply to any software derived from or based on the IJG code,
-not just to the unmodified library.  If you use our work, you ought to
-acknowledge us.
-
-Permission is NOT granted for the use of any IJG author's name or company name
-in advertising or publicity relating to this software or products derived from
-it.  This software may be referred to only as "the Independent JPEG Group's
-software".
-
-We specifically permit and encourage the use of this software as the basis of
-commercial products, provided that all warranty or liability claims are
-assumed by the product vendor.
-
-
-ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
-sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
-ansi2knr.c is NOT covered by the above copyright and conditions, but instead
-by the usual distribution terms of the Free Software Foundation; principally,
-that you must include source code if you redistribute it.  (See the file
-ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
-of any program generated from the IJG code, this does not limit you more than
-the foregoing paragraphs do.
-
-The Unix configuration script "configure" was produced with GNU Autoconf.
-It is copyright by the Free Software Foundation but is freely distributable.
-The same holds for its supporting scripts (config.guess, config.sub,
-ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
-by M.I.T. but is also freely distributable.
-
-It appears that the arithmetic coding option of the JPEG spec is covered by
-patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
-legally be used without obtaining one or more licenses.  For this reason,
-support for arithmetic coding has been removed from the free JPEG software.
-(Since arithmetic coding provides only a marginal gain over the unpatented
-Huffman mode, it is unlikely that very many implementations will support it.)
-So far as we are aware, there are no patent restrictions on the remaining
-code.
-
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent, GIF reading support has
-been removed altogether, and the GIF writer has been simplified to produce
-"uncompressed GIFs".  This technique does not use the LZW algorithm; the
-resulting GIF files are larger than usual, but are readable by all standard
-GIF decoders.
-
-We are required to state that
-    "The Graphics Interchange Format(c) is the Copyright property of
-    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
-    CompuServe Incorporated."
-
-
-REFERENCES
-==========
-
-We highly recommend reading one or more of these references before trying to
-understand the innards of the JPEG software.
-
-The best short technical introduction to the JPEG compression algorithm is
-	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
-	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
-(Adjacent articles in that issue discuss MPEG motion picture compression,
-applications of JPEG, and related topics.)  If you don't have the CACM issue
-handy, a PostScript file containing a revised version of Wallace's article is
-available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz.  The file (actually
-a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
-omits the sample images that appeared in CACM, but it includes corrections
-and some added material.  Note: the Wallace article is copyright ACM and IEEE,
-and it may not be used for commercial purposes.
-
-A somewhat less technical, more leisurely introduction to JPEG can be found in
-"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
-M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
-good explanations and example C code for a multitude of compression methods
-including JPEG.  It is an excellent source if you are comfortable reading C
-code but don't know much about data compression in general.  The book's JPEG
-sample code is far from industrial-strength, but when you are ready to look
-at a full implementation, you've got one here...
-
-The best full description of JPEG is the textbook "JPEG Still Image Data
-Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
-by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95, 638 pp.
-The book includes the complete text of the ISO JPEG standards (DIS 10918-1
-and draft DIS 10918-2).  This is by far the most complete exposition of JPEG
-in existence, and we highly recommend it.
-
-The JPEG standard itself is not available electronically; you must order a
-paper copy through ISO or ITU.  (Unless you feel a need to own a certified
-official copy, we recommend buying the Pennebaker and Mitchell book instead;
-it's much cheaper and includes a great deal of useful explanatory material.)
-In the USA, copies of the standard may be ordered from ANSI Sales at (212)
-642-4900, or from Global Engineering Documents at (800) 854-7179.  (ANSI
-doesn't take credit card orders, but Global does.)  It's not cheap: as of
-1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
-shipping/handling.  The standard is divided into two parts, Part 1 being the
-actual specification, while Part 2 covers compliance testing methods.  Part 1
-is titled "Digital Compression and Coding of Continuous-tone Still Images,
-Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
-10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
-Continuous-tone Still Images, Part 2: Compliance testing" and has document
-numbers ISO/IEC IS 10918-2, ITU-T T.83.
-
-Some extensions to the original JPEG standard are defined in JPEG Part 3,
-a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84.  IJG
-currently does not support any Part 3 extensions.
-
-The JPEG standard does not specify all details of an interchangeable file
-format.  For the omitted details we follow the "JFIF" conventions, revision
-1.02.  A copy of the JFIF spec is available from:
-	Literature Department
-	C-Cube Microsystems, Inc.
-	1778 McCarthy Blvd.
-	Milpitas, CA 95035
-	phone (408) 944-6300,  fax (408) 944-6314
-A PostScript version of this document is available by FTP at
-ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.  There is also a plain text
-version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
-the figures.
-
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7).  Copies of this Note can be obtained from ftp.sgi.com or
-from ftp://ftp.uu.net/graphics/jpeg/.  It is expected that the next revision
-of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
-Although IJG's own code does not support TIFF/JPEG, the free libtiff library
-uses our library to implement TIFF/JPEG per the Note.  libtiff is available
-from ftp://ftp.sgi.com/graphics/tiff/.
-
-
-ARCHIVE LOCATIONS
-=================
-
-The "official" archive site for this software is ftp.uu.net (Internet
-address 192.48.96.9).  The most recent released version can always be found
-there in directory graphics/jpeg.  This particular version will be archived
-as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz.  If you don't have
-direct Internet access, UUNET's archives are also available via UUCP; contact
-help at uunet.uu.net for information on retrieving files that way.
-
-Numerous Internet sites maintain copies of the UUNET files.  However, only
-ftp.uu.net is guaranteed to have the latest official version.
-
-You can also obtain this software in DOS-compatible "zip" archive format from
-the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
-on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
-"JPEG Tools".  Again, these versions may sometimes lag behind the ftp.uu.net
-release.
-
-The JPEG FAQ (Frequently Asked Questions) article is a useful source of
-general information about JPEG.  It is updated constantly and therefore is
-not included in this distribution.  The FAQ is posted every two weeks to
-Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server at rtfm.mit.edu
-with body
-	send usenet/news.answers/jpeg-faq/part1
-	send usenet/news.answers/jpeg-faq/part2
-
-
-RELATED SOFTWARE
-================
-
-Numerous viewing and image manipulation programs now support JPEG.  (Quite a
-few of them use this library to do so.)  The JPEG FAQ described above lists
-some of the more popular free and shareware viewers, and tells where to
-obtain them on Internet.
-
-If you are on a Unix machine, we highly recommend Jef Poskanzer's free
-PBMPLUS software, which provides many useful operations on PPM-format image
-files.  In particular, it can convert PPM images to and from a wide range of
-other formats, thus making cjpeg/djpeg considerably more useful.  The latest
-version is distributed by the NetPBM group, and is available from numerous
-sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
-Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
-you are likely to have difficulty making it work on any non-Unix machine.
-
-A different free JPEG implementation, written by the PVRG group at Stanford,
-is available from ftp://havefun.stanford.edu/pub/jpeg/.  This program
-is designed for research and experimentation rather than production use;
-it is slower, harder to use, and less portable than the IJG code, but it
-is easier to read and modify.  Also, the PVRG code supports lossless JPEG,
-which we do not.  (On the other hand, it doesn't do progressive JPEG.)
-
-
-FILE FORMAT WARS
-================
-
-Some JPEG programs produce files that are not compatible with our library.
-The root of the problem is that the ISO JPEG committee failed to specify a
-concrete file format.  Some vendors "filled in the blanks" on their own,
-creating proprietary formats that no one else could read.  (For example, none
-of the early commercial JPEG implementations for the Macintosh were able to
-exchange compressed files.)
-
-The file format we have adopted is called JFIF (see REFERENCES).  This format
-has been agreed to by a number of major commercial JPEG vendors, and it has
-become the de facto standard.  JFIF is a minimal or "low end" representation.
-We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
-Technical Note #2) for "high end" applications that need to record a lot of
-additional data about an image.  TIFF/JPEG is fairly new and not yet widely
-supported, unfortunately.
-
-The upcoming JPEG Part 3 standard defines a file format called SPIFF.
-SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
-be able to read the most common variant of SPIFF.  SPIFF has some technical
-advantages over JFIF, but its major claim to fame is simply that it is an
-official standard rather than an informal one.  At this point it is unclear
-whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
-standard.  IJG intends to support SPIFF once the standard is frozen, but we
-have not decided whether it should become our default output format or not.
-(In any case, our decoder will remain capable of reading JFIF indefinitely.)
-
-Various proprietary file formats incorporating JPEG compression also exist.
-We have little or no sympathy for the existence of these formats.  Indeed,
-one of the original reasons for developing this free software was to help
-force convergence on common, open format standards for JPEG files.  Don't
-use a proprietary file format!
-
-
-TO DO
-=====
-
-The major thrust for v7 will probably be improvement of visual quality.
-The current method for scaling the quantization tables is known not to be
-very good at low Q values.  We also intend to investigate block boundary
-smoothing, "poor man's variable quantization", and other means of improving
-quality-vs-file-size performance without sacrificing compatibility.
-
-In future versions, we are considering supporting some of the upcoming JPEG
-Part 3 extensions --- principally, variable quantization and the SPIFF file
-format.
-
-As always, speeding things up is of great interest.
-
-Please send bug reports, offers of help, etc. to jpeg-info at uunet.uu.net.
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.properties b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.properties
deleted file mode 100644
index b1ad110..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-custom = true
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.xml b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.xml
deleted file mode 100644
index 95642d8..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/build.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.swt.motif.aix.ppc" default="build.jars" basedir=".">
-
-	<property name="swt.ws" value="motif" />
-	<property name="swt.os" value="aix" />
-	<property name="swt.arch" value="ppc" />
-	
-	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
-
-	<import file="../org.eclipse.swt/buildFragment.xml"/>
-</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/fragment.properties b/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/fragment.properties
deleted file mode 100644
index d7c7965..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.aix.ppc/fragment.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-fragmentName = Standard Widget Toolkit for Motif
-providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/.project b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/.project
deleted file mode 100644
index 5ceb9ac..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.motif.hpux.ia64_32</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/META-INF/MANIFEST.MF
deleted file mode 100644
index c2fb563..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Manifest-Version: 1.0
-Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
-Bundle-Name: %fragmentName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.swt.motif.hpux.ia64_32; singleton:=true
-Bundle-Version: 3.6.2.qualifier
-Bundle-ManifestVersion: 2
-Bundle-Localization: fragment
-Export-Package: 
- org.eclipse.swt.internal.cairo; x-internal:=true,
- org.eclipse.swt.internal.cde; x-internal:=true,
- org.eclipse.swt.internal.gnome; x-internal:=true,
- org.eclipse.swt.internal.gtk; x-internal:=true,
- org.eclipse.swt.internal.motif; x-internal:=true,
- org.eclipse.swt.internal.mozilla; x-internal:=true
-Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=hpux) (osgi.arch=ia64_32))
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/about.html b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/about.html
deleted file mode 100644
index d5baa78..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/about.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>August 17, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Independent JPEG Group's JPEG software release 6b</h4>
-
-<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
-LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
-
-<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
-with the Content.</p>
-
-<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
-
-<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
-
-<ul>
-    <li>cderror.h</li>
-    <li>cdjpeg.h</li>
-    <li>jchuff.h</li>
-    <li>jdcolor.c</li>
-    <li>jdct.h</li>
-    <li>jdhuff.h</li>
-    <li>jerror.h</li>
-    <li>jidctint.c</li>
-    <li>jinclude.h</li>
-    <li>jmemsys.h</li>
-    <li>jmorecfg.h</li>
-    <li>jpegint.h</li>
-    <li>jpeglib.h</li>
-    <li>jversion.h</li>
-    <li>transupp.h</li>
-</ul>
-
-<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
-
-<ul>
-	<li>jcapimin.c</li>
-	<li>jcapistd.c</li>
-	<li>jccoefct.c</li>
-	<li>jccolor.c</li>
-	<li>jcdctmgr.c</li>
-	<li>jchuff.c</li>
-	<li>jcinit.c</li>
-	<li>jcmainct.c</li>
-	<li>jcmarker.c</li>
-	<li>jcmaster.c</li>
-	<li>jcomapi.c</li>
-	<li>jcparam.c</li>
-	<li>jcphuff.c</li>
-	<li>jcprepct.c</li>
-	<li>jcsample.c</li>
-	<li>jctrans.c</li>
-	<li>jdapimin.c</li>
-	<li>jdapistd.c</li>
-	<li>jdatadst.c</li>
-	<li>jdatasrc.c</li>
-	<li>jdcoefct.c</li>
-	<li>jdcolor.c</li>
-	<li>jddctmgr.c</li>
-	<li>jdhuff.c</li>
-	<li>jdinput.c</li>
-	<li>jdmainct.c</li>
-	<li>jdmarker.c</li>
-	<li>jdmaster.c</li>
-	<li>jdmerge.c</li>
-	<li>jdphuff.c</li>
-	<li>jdpostct.c</li>
-	<li>jdsample.c</li>
-	<li>jdtrans.c</li>
-	<li>jerror.c</li>
-	<li>jfdctflt.c</li>
-	<li>jfdctfst.c</li>
-	<li>jfdctint.c</li>
-	<li>jidctflt.c</li>
-	<li>jidctfst.c</li>
-	<li>jidctint.c</li>
-	<li>jidctred.c</li>
-	<li>jpegtran.c</li>
-	<li>jquant1.c</li>
-	<li>jquant2.c</li>
-	<li>jutils.c</li>
-	<li>cderror.h</li>
-	<li>cdjpeg.h</li>
-	<li>jchuff.h</li>
-	<li>jconfig.h</li>
-	<li>jdct.h</li>
-	<li>jdhuff.h</li>
-	<li>jerror.h</li>
-	<li>jinclude.h</li>
-	<li>jmorecfg.h</li>
-	<li>jpegint.h</li>
-	<li>jpeglib.h</li>
-	<li>jversion.h</li>
-	<li>transupp.h</li>
-</ul>
-	
-<p>The following changes were made to the LIBJPEG code in the Content:</p>
-
-<ol>
-	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
-	<li>Function pointers were replaced with switch statements.</li>
-	<li>The virtual memory, tracing and progress monitoring were removed.</li>
-	<li>The error handling was simplified and now uses Java exceptions.</li>
-</ol>
-
-<small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/about_files/IJG_README
deleted file mode 100644
index 86cc206..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/about_files/IJG_README
+++ /dev/null
@@ -1,385 +0,0 @@
-The Independent JPEG Group's JPEG software
-==========================================
-
-README for release 6b of 27-Mar-1998
-====================================
-
-This distribution contains the sixth public release of the Independent JPEG
-Group's free JPEG software.  You are welcome to redistribute this software and
-to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
-
-Serious users of this software (particularly those incorporating it into
-larger programs) should contact IJG at jpeg-info at uunet.uu.net to be added to
-our electronic mailing list.  Mailing list members are notified of updates
-and have a chance to participate in technical discussions, etc.
-
-This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
-Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
-Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
-Group.
-
-IJG is not affiliated with the official ISO JPEG standards committee.
-
-
-DOCUMENTATION ROADMAP
-=====================
-
-This file contains the following sections:
-
-OVERVIEW            General description of JPEG and the IJG software.
-LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
-REFERENCES          Where to learn more about JPEG.
-ARCHIVE LOCATIONS   Where to find newer versions of this software.
-RELATED SOFTWARE    Other stuff you should get.
-FILE FORMAT WARS    Software *not* to get.
-TO DO               Plans for future IJG releases.
-
-Other documentation files in the distribution are:
-
-User documentation:
-  install.doc       How to configure and install the IJG software.
-  usage.doc         Usage instructions for cjpeg, djpeg, jpegtran,
-                    rdjpgcom, and wrjpgcom.
-  *.1               Unix-style man pages for programs (same info as usage.doc).
-  wizard.doc        Advanced usage instructions for JPEG wizards only.
-  change.log        Version-to-version change highlights.
-Programmer and internal documentation:
-  libjpeg.doc       How to use the JPEG library in your own programs.
-  example.c         Sample code for calling the JPEG library.
-  structure.doc     Overview of the JPEG library's internal structure.
-  filelist.doc      Road map of IJG files.
-  coderules.doc     Coding style rules --- please read if you contribute code.
-
-Please read at least the files install.doc and usage.doc.  Useful information
-can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
-ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
-
-If you want to understand how the JPEG code works, we suggest reading one or
-more of the REFERENCES, then looking at the documentation files (in roughly
-the order listed) before diving into the code.
-
-
-OVERVIEW
-========
-
-This package contains C software to implement JPEG image compression and
-decompression.  JPEG (pronounced "jay-peg") is a standardized compression
-method for full-color and gray-scale images.  JPEG is intended for compressing
-"real-world" scenes; line drawings, cartoons and other non-realistic images
-are not its strong suit.  JPEG is lossy, meaning that the output image is not
-exactly identical to the input image.  Hence you must not use JPEG if you
-have to have identical output bits.  However, on typical photographic images,
-very good compression levels can be obtained with no visible change, and
-remarkably high compression levels are possible if you can tolerate a
-low-quality image.  For more details, see the references, or just experiment
-with various compression settings.
-
-This software implements JPEG baseline, extended-sequential, and progressive
-compression processes.  Provision is made for supporting all variants of these
-processes, although some uncommon parameter settings aren't implemented yet.
-For legal reasons, we are not distributing code for the arithmetic-coding
-variants of JPEG; see LEGAL ISSUES.  We have made no provision for supporting
-the hierarchical or lossless processes defined in the standard.
-
-We provide a set of library routines for reading and writing JPEG image files,
-plus two sample applications "cjpeg" and "djpeg", which use the library to
-perform conversion between JPEG and some other popular image file formats.
-The library is intended to be reused in other applications.
-
-In order to support file conversion and viewing software, we have included
-considerable functionality beyond the bare JPEG coding/decoding capability;
-for example, the color quantization modules are not strictly part of JPEG
-decoding, but they are essential for output to colormapped file formats or
-colormapped displays.  These extra functions can be compiled out of the
-library if not required for a particular application.  We have also included
-"jpegtran", a utility for lossless transcoding between different JPEG
-processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
-inserting and extracting textual comments in JFIF files.
-
-The emphasis in designing this software has been on achieving portability and
-flexibility, while also making it fast enough to be useful.  In particular,
-the software is not intended to be read as a tutorial on JPEG.  (See the
-REFERENCES section for introductory material.)  Rather, it is intended to
-be reliable, portable, industrial-strength code.  We do not claim to have
-achieved that goal in every aspect of the software, but we strive for it.
-
-We welcome the use of this software as a component of commercial products.
-No royalty is required, but we do ask for an acknowledgement in product
-documentation, as described under LEGAL ISSUES.
-
-
-LEGAL ISSUES
-============
-
-In plain English:
-
-1. We don't promise that this software works.  (But if you find any bugs,
-   please let us know!)
-2. You can use this software for whatever you want.  You don't have to pay us.
-3. You may not pretend that you wrote this software.  If you use it in a
-   program, you must acknowledge somewhere in your documentation that
-   you've used the IJG code.
-
-In legalese:
-
-The authors make NO WARRANTY or representation, either express or implied,
-with respect to this software, its quality, accuracy, merchantability, or
-fitness for a particular purpose.  This software is provided "AS IS", and you,
-its user, assume the entire risk as to its quality and accuracy.
-
-This software is copyright (C) 1991-1998, Thomas G. Lane.
-All Rights Reserved except as specified below.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-software (or portions thereof) for any purpose, without fee, subject to these
-conditions:
-(1) If any part of the source code for this software is distributed, then this
-README file must be included, with this copyright and no-warranty notice
-unaltered; and any additions, deletions, or changes to the original files
-must be clearly indicated in accompanying documentation.
-(2) If only executable code is distributed, then the accompanying
-documentation must state that "this software is based in part on the work of
-the Independent JPEG Group".
-(3) Permission for use of this software is granted only if the user accepts
-full responsibility for any undesirable consequences; the authors accept
-NO LIABILITY for damages of any kind.
-
-These conditions apply to any software derived from or based on the IJG code,
-not just to the unmodified library.  If you use our work, you ought to
-acknowledge us.
-
-Permission is NOT granted for the use of any IJG author's name or company name
-in advertising or publicity relating to this software or products derived from
-it.  This software may be referred to only as "the Independent JPEG Group's
-software".
-
-We specifically permit and encourage the use of this software as the basis of
-commercial products, provided that all warranty or liability claims are
-assumed by the product vendor.
-
-
-ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
-sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
-ansi2knr.c is NOT covered by the above copyright and conditions, but instead
-by the usual distribution terms of the Free Software Foundation; principally,
-that you must include source code if you redistribute it.  (See the file
-ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
-of any program generated from the IJG code, this does not limit you more than
-the foregoing paragraphs do.
-
-The Unix configuration script "configure" was produced with GNU Autoconf.
-It is copyright by the Free Software Foundation but is freely distributable.
-The same holds for its supporting scripts (config.guess, config.sub,
-ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
-by M.I.T. but is also freely distributable.
-
-It appears that the arithmetic coding option of the JPEG spec is covered by
-patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
-legally be used without obtaining one or more licenses.  For this reason,
-support for arithmetic coding has been removed from the free JPEG software.
-(Since arithmetic coding provides only a marginal gain over the unpatented
-Huffman mode, it is unlikely that very many implementations will support it.)
-So far as we are aware, there are no patent restrictions on the remaining
-code.
-
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent, GIF reading support has
-been removed altogether, and the GIF writer has been simplified to produce
-"uncompressed GIFs".  This technique does not use the LZW algorithm; the
-resulting GIF files are larger than usual, but are readable by all standard
-GIF decoders.
-
-We are required to state that
-    "The Graphics Interchange Format(c) is the Copyright property of
-    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
-    CompuServe Incorporated."
-
-
-REFERENCES
-==========
-
-We highly recommend reading one or more of these references before trying to
-understand the innards of the JPEG software.
-
-The best short technical introduction to the JPEG compression algorithm is
-	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
-	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
-(Adjacent articles in that issue discuss MPEG motion picture compression,
-applications of JPEG, and related topics.)  If you don't have the CACM issue
-handy, a PostScript file containing a revised version of Wallace's article is
-available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz.  The file (actually
-a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
-omits the sample images that appeared in CACM, but it includes corrections
-and some added material.  Note: the Wallace article is copyright ACM and IEEE,
-and it may not be used for commercial purposes.
-
-A somewhat less technical, more leisurely introduction to JPEG can be found in
-"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
-M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
-good explanations and example C code for a multitude of compression methods
-including JPEG.  It is an excellent source if you are comfortable reading C
-code but don't know much about data compression in general.  The book's JPEG
-sample code is far from industrial-strength, but when you are ready to look
-at a full implementation, you've got one here...
-
-The best full description of JPEG is the textbook "JPEG Still Image Data
-Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
-by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95, 638 pp.
-The book includes the complete text of the ISO JPEG standards (DIS 10918-1
-and draft DIS 10918-2).  This is by far the most complete exposition of JPEG
-in existence, and we highly recommend it.
-
-The JPEG standard itself is not available electronically; you must order a
-paper copy through ISO or ITU.  (Unless you feel a need to own a certified
-official copy, we recommend buying the Pennebaker and Mitchell book instead;
-it's much cheaper and includes a great deal of useful explanatory material.)
-In the USA, copies of the standard may be ordered from ANSI Sales at (212)
-642-4900, or from Global Engineering Documents at (800) 854-7179.  (ANSI
-doesn't take credit card orders, but Global does.)  It's not cheap: as of
-1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
-shipping/handling.  The standard is divided into two parts, Part 1 being the
-actual specification, while Part 2 covers compliance testing methods.  Part 1
-is titled "Digital Compression and Coding of Continuous-tone Still Images,
-Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
-10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
-Continuous-tone Still Images, Part 2: Compliance testing" and has document
-numbers ISO/IEC IS 10918-2, ITU-T T.83.
-
-Some extensions to the original JPEG standard are defined in JPEG Part 3,
-a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84.  IJG
-currently does not support any Part 3 extensions.
-
-The JPEG standard does not specify all details of an interchangeable file
-format.  For the omitted details we follow the "JFIF" conventions, revision
-1.02.  A copy of the JFIF spec is available from:
-	Literature Department
-	C-Cube Microsystems, Inc.
-	1778 McCarthy Blvd.
-	Milpitas, CA 95035
-	phone (408) 944-6300,  fax (408) 944-6314
-A PostScript version of this document is available by FTP at
-ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.  There is also a plain text
-version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
-the figures.
-
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7).  Copies of this Note can be obtained from ftp.sgi.com or
-from ftp://ftp.uu.net/graphics/jpeg/.  It is expected that the next revision
-of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
-Although IJG's own code does not support TIFF/JPEG, the free libtiff library
-uses our library to implement TIFF/JPEG per the Note.  libtiff is available
-from ftp://ftp.sgi.com/graphics/tiff/.
-
-
-ARCHIVE LOCATIONS
-=================
-
-The "official" archive site for this software is ftp.uu.net (Internet
-address 192.48.96.9).  The most recent released version can always be found
-there in directory graphics/jpeg.  This particular version will be archived
-as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz.  If you don't have
-direct Internet access, UUNET's archives are also available via UUCP; contact
-help at uunet.uu.net for information on retrieving files that way.
-
-Numerous Internet sites maintain copies of the UUNET files.  However, only
-ftp.uu.net is guaranteed to have the latest official version.
-
-You can also obtain this software in DOS-compatible "zip" archive format from
-the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
-on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
-"JPEG Tools".  Again, these versions may sometimes lag behind the ftp.uu.net
-release.
-
-The JPEG FAQ (Frequently Asked Questions) article is a useful source of
-general information about JPEG.  It is updated constantly and therefore is
-not included in this distribution.  The FAQ is posted every two weeks to
-Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server at rtfm.mit.edu
-with body
-	send usenet/news.answers/jpeg-faq/part1
-	send usenet/news.answers/jpeg-faq/part2
-
-
-RELATED SOFTWARE
-================
-
-Numerous viewing and image manipulation programs now support JPEG.  (Quite a
-few of them use this library to do so.)  The JPEG FAQ described above lists
-some of the more popular free and shareware viewers, and tells where to
-obtain them on Internet.
-
-If you are on a Unix machine, we highly recommend Jef Poskanzer's free
-PBMPLUS software, which provides many useful operations on PPM-format image
-files.  In particular, it can convert PPM images to and from a wide range of
-other formats, thus making cjpeg/djpeg considerably more useful.  The latest
-version is distributed by the NetPBM group, and is available from numerous
-sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
-Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
-you are likely to have difficulty making it work on any non-Unix machine.
-
-A different free JPEG implementation, written by the PVRG group at Stanford,
-is available from ftp://havefun.stanford.edu/pub/jpeg/.  This program
-is designed for research and experimentation rather than production use;
-it is slower, harder to use, and less portable than the IJG code, but it
-is easier to read and modify.  Also, the PVRG code supports lossless JPEG,
-which we do not.  (On the other hand, it doesn't do progressive JPEG.)
-
-
-FILE FORMAT WARS
-================
-
-Some JPEG programs produce files that are not compatible with our library.
-The root of the problem is that the ISO JPEG committee failed to specify a
-concrete file format.  Some vendors "filled in the blanks" on their own,
-creating proprietary formats that no one else could read.  (For example, none
-of the early commercial JPEG implementations for the Macintosh were able to
-exchange compressed files.)
-
-The file format we have adopted is called JFIF (see REFERENCES).  This format
-has been agreed to by a number of major commercial JPEG vendors, and it has
-become the de facto standard.  JFIF is a minimal or "low end" representation.
-We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
-Technical Note #2) for "high end" applications that need to record a lot of
-additional data about an image.  TIFF/JPEG is fairly new and not yet widely
-supported, unfortunately.
-
-The upcoming JPEG Part 3 standard defines a file format called SPIFF.
-SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
-be able to read the most common variant of SPIFF.  SPIFF has some technical
-advantages over JFIF, but its major claim to fame is simply that it is an
-official standard rather than an informal one.  At this point it is unclear
-whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
-standard.  IJG intends to support SPIFF once the standard is frozen, but we
-have not decided whether it should become our default output format or not.
-(In any case, our decoder will remain capable of reading JFIF indefinitely.)
-
-Various proprietary file formats incorporating JPEG compression also exist.
-We have little or no sympathy for the existence of these formats.  Indeed,
-one of the original reasons for developing this free software was to help
-force convergence on common, open format standards for JPEG files.  Don't
-use a proprietary file format!
-
-
-TO DO
-=====
-
-The major thrust for v7 will probably be improvement of visual quality.
-The current method for scaling the quantization tables is known not to be
-very good at low Q values.  We also intend to investigate block boundary
-smoothing, "poor man's variable quantization", and other means of improving
-quality-vs-file-size performance without sacrificing compatibility.
-
-In future versions, we are considering supporting some of the upcoming JPEG
-Part 3 extensions --- principally, variable quantization and the SPIFF file
-format.
-
-As always, speeding things up is of great interest.
-
-Please send bug reports, offers of help, etc. to jpeg-info at uunet.uu.net.
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.properties b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.properties
deleted file mode 100644
index addefa4..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-custom = true
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.xml b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.xml
deleted file mode 100644
index 04f5811..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/build.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.swt.motif.hpux.ia64_32" default="build.jars" basedir=".">
-
-	<property name="swt.ws" value="motif" />
-	<property name="swt.os" value="hpux" />
-	<property name="swt.arch" value="ia64_32" />
-	
-	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
-
-	<import file="../org.eclipse.swt/buildFragment.xml"/>
-</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/fragment.properties b/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/fragment.properties
deleted file mode 100644
index ca77dcb..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.hpux.ia64_32/fragment.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2004 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-fragmentName = Standard Widget Toolkit for Motif
-providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/.classpath b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/.classpath
deleted file mode 100644
index be7799c..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
-		<attributes>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path=""/>
-</classpath>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/.project b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/.project
deleted file mode 100644
index 04ff5e9..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.motif.linux.x86</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/META-INF/MANIFEST.MF
deleted file mode 100644
index cb14ec7..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Manifest-Version: 1.0
-Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
-Bundle-Name: %fragmentName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.swt.motif.linux.x86; singleton:=true
-Bundle-Version: 3.6.2.qualifier
-Bundle-ManifestVersion: 2
-Bundle-Localization: fragment
-Export-Package: 
- org.eclipse.swt.internal.cairo; x-internal:=true,
- org.eclipse.swt.internal.cde; x-internal:=true,
- org.eclipse.swt.internal.gnome; x-internal:=true,
- org.eclipse.swt.internal.gtk; x-internal:=true,
- org.eclipse.swt.internal.motif; x-internal:=true,
- org.eclipse.swt.internal.mozilla; x-internal:=true,
- org.eclipse.swt.internal.opengl.glx; x-internal:=true
-Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=linux) (osgi.arch=x86))
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about.html b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about.html
deleted file mode 100644
index c06208a..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about.html
+++ /dev/null
@@ -1,265 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>August 17, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Gnome Binding</h4>
-
-<p>The "Gnome Binding" is a binding to the Gnome API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Gnome Binding:</p>
-<ul>
-	<li>libswt-gnome-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Gnome Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/gnome (but not including any sub-directories)</li>
-</ul>
-
-<p>The Gnome Binding contains portions of Gnome ("Library").  Gnome is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
-conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the Gnome Binding on a standalone
-basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
-<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
-
-<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
-containing portions of the Library (e.g. the Gnome Binding) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
-other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the Gnome Binding such modifications shall be
-governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
-work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
-
-<h4>GTK+ Binding For Mozilla</h4>
-
-<p>The "GTK+ Binding For Mozilla" is a GTK+ binding to the Mozilla API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the GTK+ Binding For Mozilla:</p>
-<ul>
-	<li>libswt-gtk-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the GTK+ Binding For Mozilla:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/gtk (but not including any sub-directories)</li>
-</ul>
-
-<p>The GTK+ Binding For Mozilla contains portions of GTK+ ("Library").  GTK+ is made available by The Free Software Foundation.  Use of the Library is governed by the terms and
-conditions of the GNU Lesser General Public License Version 2.1 ("LGPL").  Use of the GTK+ Binding for Mozilla on a standalone
-basis, is also governed by the terms and conditions of the LGPL.  A copy of the LGPL is provided with the Content (<a href="about_files/lgpl-v21.txt" target="_blank">lgpl-v21.txt</a>) and is also available at
-<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>.</p>
-
-<p>In accordance with Section 6 of the LGPL, you may combine or link a "work that uses the Library" (e.g. the SWT) with the Library to produce a work
-containing portions of the Library (e.g. the GTK+ Binding For Mozilla) and distribute that work under the terms of your choice (e.g. the EPL) provided you comply with all
-other terms and conditions of Section 6 as well as other Sections of the LGPL.  Please note, if you modify the GTK+ Binding For Mozilla such modifications shall be
-governed by the terms and conditions of the LGPL.  Also note, the terms of the EPL permit you to modify the combined work and the source code of the combined
-work is provided for debugging purposes so there is no need to reverse engineer the combined work.</p>
-
-<p>Note that the GTK+ Binding For Mozilla contains a subset of the code found in the GTK+ Binding that is available in Linux GTK+ builds.</p>
-
-<h4>Mozilla Binding</h4>
-
-<p>The "Mozilla Binding" is a binding to the Mozilla API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Mozilla Binding:</p>
-<ul>
-	<li>libswt-mozilla-motif-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-mozilla-gcc3-motif-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-xulrunner-motif-xxxx.so (where "xxxx" is the version number)</li>
-	<li>libswt-xpcominit-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Mozilla Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/mozilla (but not including any sub-directories)</li>
-</ul>
-
-<p>The Mozilla Binding contains portions of Mozilla ("Mozilla").  Mozilla is made available by Mozilla.org.  Use of Mozilla is governed by the terms and
-conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at
-<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
-
-<h4>XULRunner 1.9 (subset, derivative work)</h4>
-
-The libraries libswt-xulrunner-motif-xxxx.so, libswt-mozilla-motif-xxxx.so, and libswt-mozilla-gcc3-motif-xxxx.so (where "xxxx" is the version number) contain a small portion of XULRunner 1.9 content (header files)
-that have been modified from the Original Code provided by mozilla.org, and whose Initial Developer is Netscape Communications Corporation. Use of this code is governed by
-the terms and conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided with the Content (<a href="./about_files/mpl-v11.txt">mpl-v11.txt</a>)
-and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.
-<p>The changed files are:
-<ul>
-  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h</code>
-  <li>org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h</code>
-</ul>
-Changes to the original files were made by SWT on April 7, 2009 and are marked with trailing comment <em>"//SWT-20090407"</em>.
-
-<h4>Cairo Binding</h4>
-
-<p>The "Cairo Binding" is a binding to the Cairo API.  The Content may include any or all of the following files:</p>
-
-<p>The following files in the plug-in JAR shall be defined as the native code portion of the Cairo Binding:</p>
-<ul>
-	<li>libswt-cairo-motif-xxxx.so (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The following files in both the plug-in JAR and the src.zip shall be defined respectively as the bytecode and source code portions of the Cairo Binding:</p>
-<ul>
-	<li>The contents of the directory org/eclipse/swt/internal/cairo (where "xxxx" is the version number)</li>
-</ul>
-
-<p>The Cairo Binding contains portions of Cairo ("Cairo").  Cairo is made available by the Cairo project at
-<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>.  Use of Cairo by the Cairo Binding is governed by the terms and
-conditions of the Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is
-provided with the Content (<a href="about_files/mpl-v11.txt" target="_blank">mpl-v11.txt</a>) and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>.</p>
-
-<h4>Cairo for Linux</h4>
-
-<p>Refer to the file <a href="about_files/about_cairo.html">about_cairo.html</a> for licensing details about "Cairo for Linux".</p>
-
-<h4>Open Motif for Linux</h4>
-
-<p>Refer to the file <a href="about_files/about_open_motif.html">about_open_motif.html</a> for licensing details about "Open Motif for Linux".</p>
-
-<h4>Independent JPEG Group's JPEG software release 6b</h4>
-
-<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
-LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
-
-<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
-with the Content.</p>
-
-<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
-
-<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
-
-<ul>
-    <li>cderror.h</li>
-    <li>cdjpeg.h</li>
-    <li>jchuff.h</li>
-    <li>jdcolor.c</li>
-    <li>jdct.h</li>
-    <li>jdhuff.h</li>
-    <li>jerror.h</li>
-    <li>jidctint.c</li>
-    <li>jinclude.h</li>
-    <li>jmemsys.h</li>
-    <li>jmorecfg.h</li>
-    <li>jpegint.h</li>
-    <li>jpeglib.h</li>
-    <li>jversion.h</li>
-    <li>transupp.h</li>
-</ul>
-
-<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
-
-<ul>
-	<li>jcapimin.c</li>
-	<li>jcapistd.c</li>
-	<li>jccoefct.c</li>
-	<li>jccolor.c</li>
-	<li>jcdctmgr.c</li>
-	<li>jchuff.c</li>
-	<li>jcinit.c</li>
-	<li>jcmainct.c</li>
-	<li>jcmarker.c</li>
-	<li>jcmaster.c</li>
-	<li>jcomapi.c</li>
-	<li>jcparam.c</li>
-	<li>jcphuff.c</li>
-	<li>jcprepct.c</li>
-	<li>jcsample.c</li>
-	<li>jctrans.c</li>
-	<li>jdapimin.c</li>
-	<li>jdapistd.c</li>
-	<li>jdatadst.c</li>
-	<li>jdatasrc.c</li>
-	<li>jdcoefct.c</li>
-	<li>jdcolor.c</li>
-	<li>jddctmgr.c</li>
-	<li>jdhuff.c</li>
-	<li>jdinput.c</li>
-	<li>jdmainct.c</li>
-	<li>jdmarker.c</li>
-	<li>jdmaster.c</li>
-	<li>jdmerge.c</li>
-	<li>jdphuff.c</li>
-	<li>jdpostct.c</li>
-	<li>jdsample.c</li>
-	<li>jdtrans.c</li>
-	<li>jerror.c</li>
-	<li>jfdctflt.c</li>
-	<li>jfdctfst.c</li>
-	<li>jfdctint.c</li>
-	<li>jidctflt.c</li>
-	<li>jidctfst.c</li>
-	<li>jidctint.c</li>
-	<li>jidctred.c</li>
-	<li>jpegtran.c</li>
-	<li>jquant1.c</li>
-	<li>jquant2.c</li>
-	<li>jutils.c</li>
-	<li>cderror.h</li>
-	<li>cdjpeg.h</li>
-	<li>jchuff.h</li>
-	<li>jconfig.h</li>
-	<li>jdct.h</li>
-	<li>jdhuff.h</li>
-	<li>jerror.h</li>
-	<li>jinclude.h</li>
-	<li>jmorecfg.h</li>
-	<li>jpegint.h</li>
-	<li>jpeglib.h</li>
-	<li>jversion.h</li>
-	<li>transupp.h</li>
-</ul>
-	
-<p>The following changes were made to the LIBJPEG code in the Content:</p>
-
-<ol>
-	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
-	<li>Function pointers were replaced with switch statements.</li>
-	<li>The virtual memory, tracing and progress monitoring were removed.</li>
-	<li>The error handling was simplified and now uses Java exceptions.</li>
-</ol>
-
-<h4>PuTTY 0.58 (derivative work)</h4>
-
-<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org.  Use of PuTTY is governed by the terms and
-conditions of the the following MIT-style license:  </p>
-<blockquote>
-  <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
-  <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian  Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,  Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn,  and CORE SDI S.A.</em> </p>
-  <p><em>Permission is hereby granted, free of charge, to any person  obtaining a copy of this software and associated documentation files  (the "Software"), to deal in the Software without restriction,  including without limitation the rights to use, copy, modify, merge,  publish, distribute, sublicense, and/or sell copies of the Software,  and to permit persons to whom the Software is furnished to do so,  subject to the following conditions:</em> </p>
-  <p><em>The above copyright notice and this permission notice shall be  included in all copies or substantial portions of the Software.</em> </p>
-  <p><em>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
-</blockquote>
-<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
-
-<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/IJG_README
deleted file mode 100644
index 86cc206..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/IJG_README
+++ /dev/null
@@ -1,385 +0,0 @@
-The Independent JPEG Group's JPEG software
-==========================================
-
-README for release 6b of 27-Mar-1998
-====================================
-
-This distribution contains the sixth public release of the Independent JPEG
-Group's free JPEG software.  You are welcome to redistribute this software and
-to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
-
-Serious users of this software (particularly those incorporating it into
-larger programs) should contact IJG at jpeg-info at uunet.uu.net to be added to
-our electronic mailing list.  Mailing list members are notified of updates
-and have a chance to participate in technical discussions, etc.
-
-This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
-Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
-Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
-Group.
-
-IJG is not affiliated with the official ISO JPEG standards committee.
-
-
-DOCUMENTATION ROADMAP
-=====================
-
-This file contains the following sections:
-
-OVERVIEW            General description of JPEG and the IJG software.
-LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
-REFERENCES          Where to learn more about JPEG.
-ARCHIVE LOCATIONS   Where to find newer versions of this software.
-RELATED SOFTWARE    Other stuff you should get.
-FILE FORMAT WARS    Software *not* to get.
-TO DO               Plans for future IJG releases.
-
-Other documentation files in the distribution are:
-
-User documentation:
-  install.doc       How to configure and install the IJG software.
-  usage.doc         Usage instructions for cjpeg, djpeg, jpegtran,
-                    rdjpgcom, and wrjpgcom.
-  *.1               Unix-style man pages for programs (same info as usage.doc).
-  wizard.doc        Advanced usage instructions for JPEG wizards only.
-  change.log        Version-to-version change highlights.
-Programmer and internal documentation:
-  libjpeg.doc       How to use the JPEG library in your own programs.
-  example.c         Sample code for calling the JPEG library.
-  structure.doc     Overview of the JPEG library's internal structure.
-  filelist.doc      Road map of IJG files.
-  coderules.doc     Coding style rules --- please read if you contribute code.
-
-Please read at least the files install.doc and usage.doc.  Useful information
-can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
-ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
-
-If you want to understand how the JPEG code works, we suggest reading one or
-more of the REFERENCES, then looking at the documentation files (in roughly
-the order listed) before diving into the code.
-
-
-OVERVIEW
-========
-
-This package contains C software to implement JPEG image compression and
-decompression.  JPEG (pronounced "jay-peg") is a standardized compression
-method for full-color and gray-scale images.  JPEG is intended for compressing
-"real-world" scenes; line drawings, cartoons and other non-realistic images
-are not its strong suit.  JPEG is lossy, meaning that the output image is not
-exactly identical to the input image.  Hence you must not use JPEG if you
-have to have identical output bits.  However, on typical photographic images,
-very good compression levels can be obtained with no visible change, and
-remarkably high compression levels are possible if you can tolerate a
-low-quality image.  For more details, see the references, or just experiment
-with various compression settings.
-
-This software implements JPEG baseline, extended-sequential, and progressive
-compression processes.  Provision is made for supporting all variants of these
-processes, although some uncommon parameter settings aren't implemented yet.
-For legal reasons, we are not distributing code for the arithmetic-coding
-variants of JPEG; see LEGAL ISSUES.  We have made no provision for supporting
-the hierarchical or lossless processes defined in the standard.
-
-We provide a set of library routines for reading and writing JPEG image files,
-plus two sample applications "cjpeg" and "djpeg", which use the library to
-perform conversion between JPEG and some other popular image file formats.
-The library is intended to be reused in other applications.
-
-In order to support file conversion and viewing software, we have included
-considerable functionality beyond the bare JPEG coding/decoding capability;
-for example, the color quantization modules are not strictly part of JPEG
-decoding, but they are essential for output to colormapped file formats or
-colormapped displays.  These extra functions can be compiled out of the
-library if not required for a particular application.  We have also included
-"jpegtran", a utility for lossless transcoding between different JPEG
-processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
-inserting and extracting textual comments in JFIF files.
-
-The emphasis in designing this software has been on achieving portability and
-flexibility, while also making it fast enough to be useful.  In particular,
-the software is not intended to be read as a tutorial on JPEG.  (See the
-REFERENCES section for introductory material.)  Rather, it is intended to
-be reliable, portable, industrial-strength code.  We do not claim to have
-achieved that goal in every aspect of the software, but we strive for it.
-
-We welcome the use of this software as a component of commercial products.
-No royalty is required, but we do ask for an acknowledgement in product
-documentation, as described under LEGAL ISSUES.
-
-
-LEGAL ISSUES
-============
-
-In plain English:
-
-1. We don't promise that this software works.  (But if you find any bugs,
-   please let us know!)
-2. You can use this software for whatever you want.  You don't have to pay us.
-3. You may not pretend that you wrote this software.  If you use it in a
-   program, you must acknowledge somewhere in your documentation that
-   you've used the IJG code.
-
-In legalese:
-
-The authors make NO WARRANTY or representation, either express or implied,
-with respect to this software, its quality, accuracy, merchantability, or
-fitness for a particular purpose.  This software is provided "AS IS", and you,
-its user, assume the entire risk as to its quality and accuracy.
-
-This software is copyright (C) 1991-1998, Thomas G. Lane.
-All Rights Reserved except as specified below.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-software (or portions thereof) for any purpose, without fee, subject to these
-conditions:
-(1) If any part of the source code for this software is distributed, then this
-README file must be included, with this copyright and no-warranty notice
-unaltered; and any additions, deletions, or changes to the original files
-must be clearly indicated in accompanying documentation.
-(2) If only executable code is distributed, then the accompanying
-documentation must state that "this software is based in part on the work of
-the Independent JPEG Group".
-(3) Permission for use of this software is granted only if the user accepts
-full responsibility for any undesirable consequences; the authors accept
-NO LIABILITY for damages of any kind.
-
-These conditions apply to any software derived from or based on the IJG code,
-not just to the unmodified library.  If you use our work, you ought to
-acknowledge us.
-
-Permission is NOT granted for the use of any IJG author's name or company name
-in advertising or publicity relating to this software or products derived from
-it.  This software may be referred to only as "the Independent JPEG Group's
-software".
-
-We specifically permit and encourage the use of this software as the basis of
-commercial products, provided that all warranty or liability claims are
-assumed by the product vendor.
-
-
-ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
-sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
-ansi2knr.c is NOT covered by the above copyright and conditions, but instead
-by the usual distribution terms of the Free Software Foundation; principally,
-that you must include source code if you redistribute it.  (See the file
-ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
-of any program generated from the IJG code, this does not limit you more than
-the foregoing paragraphs do.
-
-The Unix configuration script "configure" was produced with GNU Autoconf.
-It is copyright by the Free Software Foundation but is freely distributable.
-The same holds for its supporting scripts (config.guess, config.sub,
-ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
-by M.I.T. but is also freely distributable.
-
-It appears that the arithmetic coding option of the JPEG spec is covered by
-patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
-legally be used without obtaining one or more licenses.  For this reason,
-support for arithmetic coding has been removed from the free JPEG software.
-(Since arithmetic coding provides only a marginal gain over the unpatented
-Huffman mode, it is unlikely that very many implementations will support it.)
-So far as we are aware, there are no patent restrictions on the remaining
-code.
-
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent, GIF reading support has
-been removed altogether, and the GIF writer has been simplified to produce
-"uncompressed GIFs".  This technique does not use the LZW algorithm; the
-resulting GIF files are larger than usual, but are readable by all standard
-GIF decoders.
-
-We are required to state that
-    "The Graphics Interchange Format(c) is the Copyright property of
-    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
-    CompuServe Incorporated."
-
-
-REFERENCES
-==========
-
-We highly recommend reading one or more of these references before trying to
-understand the innards of the JPEG software.
-
-The best short technical introduction to the JPEG compression algorithm is
-	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
-	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
-(Adjacent articles in that issue discuss MPEG motion picture compression,
-applications of JPEG, and related topics.)  If you don't have the CACM issue
-handy, a PostScript file containing a revised version of Wallace's article is
-available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz.  The file (actually
-a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
-omits the sample images that appeared in CACM, but it includes corrections
-and some added material.  Note: the Wallace article is copyright ACM and IEEE,
-and it may not be used for commercial purposes.
-
-A somewhat less technical, more leisurely introduction to JPEG can be found in
-"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
-M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
-good explanations and example C code for a multitude of compression methods
-including JPEG.  It is an excellent source if you are comfortable reading C
-code but don't know much about data compression in general.  The book's JPEG
-sample code is far from industrial-strength, but when you are ready to look
-at a full implementation, you've got one here...
-
-The best full description of JPEG is the textbook "JPEG Still Image Data
-Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
-by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95, 638 pp.
-The book includes the complete text of the ISO JPEG standards (DIS 10918-1
-and draft DIS 10918-2).  This is by far the most complete exposition of JPEG
-in existence, and we highly recommend it.
-
-The JPEG standard itself is not available electronically; you must order a
-paper copy through ISO or ITU.  (Unless you feel a need to own a certified
-official copy, we recommend buying the Pennebaker and Mitchell book instead;
-it's much cheaper and includes a great deal of useful explanatory material.)
-In the USA, copies of the standard may be ordered from ANSI Sales at (212)
-642-4900, or from Global Engineering Documents at (800) 854-7179.  (ANSI
-doesn't take credit card orders, but Global does.)  It's not cheap: as of
-1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
-shipping/handling.  The standard is divided into two parts, Part 1 being the
-actual specification, while Part 2 covers compliance testing methods.  Part 1
-is titled "Digital Compression and Coding of Continuous-tone Still Images,
-Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
-10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
-Continuous-tone Still Images, Part 2: Compliance testing" and has document
-numbers ISO/IEC IS 10918-2, ITU-T T.83.
-
-Some extensions to the original JPEG standard are defined in JPEG Part 3,
-a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84.  IJG
-currently does not support any Part 3 extensions.
-
-The JPEG standard does not specify all details of an interchangeable file
-format.  For the omitted details we follow the "JFIF" conventions, revision
-1.02.  A copy of the JFIF spec is available from:
-	Literature Department
-	C-Cube Microsystems, Inc.
-	1778 McCarthy Blvd.
-	Milpitas, CA 95035
-	phone (408) 944-6300,  fax (408) 944-6314
-A PostScript version of this document is available by FTP at
-ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.  There is also a plain text
-version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
-the figures.
-
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7).  Copies of this Note can be obtained from ftp.sgi.com or
-from ftp://ftp.uu.net/graphics/jpeg/.  It is expected that the next revision
-of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
-Although IJG's own code does not support TIFF/JPEG, the free libtiff library
-uses our library to implement TIFF/JPEG per the Note.  libtiff is available
-from ftp://ftp.sgi.com/graphics/tiff/.
-
-
-ARCHIVE LOCATIONS
-=================
-
-The "official" archive site for this software is ftp.uu.net (Internet
-address 192.48.96.9).  The most recent released version can always be found
-there in directory graphics/jpeg.  This particular version will be archived
-as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz.  If you don't have
-direct Internet access, UUNET's archives are also available via UUCP; contact
-help at uunet.uu.net for information on retrieving files that way.
-
-Numerous Internet sites maintain copies of the UUNET files.  However, only
-ftp.uu.net is guaranteed to have the latest official version.
-
-You can also obtain this software in DOS-compatible "zip" archive format from
-the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
-on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
-"JPEG Tools".  Again, these versions may sometimes lag behind the ftp.uu.net
-release.
-
-The JPEG FAQ (Frequently Asked Questions) article is a useful source of
-general information about JPEG.  It is updated constantly and therefore is
-not included in this distribution.  The FAQ is posted every two weeks to
-Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server at rtfm.mit.edu
-with body
-	send usenet/news.answers/jpeg-faq/part1
-	send usenet/news.answers/jpeg-faq/part2
-
-
-RELATED SOFTWARE
-================
-
-Numerous viewing and image manipulation programs now support JPEG.  (Quite a
-few of them use this library to do so.)  The JPEG FAQ described above lists
-some of the more popular free and shareware viewers, and tells where to
-obtain them on Internet.
-
-If you are on a Unix machine, we highly recommend Jef Poskanzer's free
-PBMPLUS software, which provides many useful operations on PPM-format image
-files.  In particular, it can convert PPM images to and from a wide range of
-other formats, thus making cjpeg/djpeg considerably more useful.  The latest
-version is distributed by the NetPBM group, and is available from numerous
-sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
-Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
-you are likely to have difficulty making it work on any non-Unix machine.
-
-A different free JPEG implementation, written by the PVRG group at Stanford,
-is available from ftp://havefun.stanford.edu/pub/jpeg/.  This program
-is designed for research and experimentation rather than production use;
-it is slower, harder to use, and less portable than the IJG code, but it
-is easier to read and modify.  Also, the PVRG code supports lossless JPEG,
-which we do not.  (On the other hand, it doesn't do progressive JPEG.)
-
-
-FILE FORMAT WARS
-================
-
-Some JPEG programs produce files that are not compatible with our library.
-The root of the problem is that the ISO JPEG committee failed to specify a
-concrete file format.  Some vendors "filled in the blanks" on their own,
-creating proprietary formats that no one else could read.  (For example, none
-of the early commercial JPEG implementations for the Macintosh were able to
-exchange compressed files.)
-
-The file format we have adopted is called JFIF (see REFERENCES).  This format
-has been agreed to by a number of major commercial JPEG vendors, and it has
-become the de facto standard.  JFIF is a minimal or "low end" representation.
-We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
-Technical Note #2) for "high end" applications that need to record a lot of
-additional data about an image.  TIFF/JPEG is fairly new and not yet widely
-supported, unfortunately.
-
-The upcoming JPEG Part 3 standard defines a file format called SPIFF.
-SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
-be able to read the most common variant of SPIFF.  SPIFF has some technical
-advantages over JFIF, but its major claim to fame is simply that it is an
-official standard rather than an informal one.  At this point it is unclear
-whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
-standard.  IJG intends to support SPIFF once the standard is frozen, but we
-have not decided whether it should become our default output format or not.
-(In any case, our decoder will remain capable of reading JFIF indefinitely.)
-
-Various proprietary file formats incorporating JPEG compression also exist.
-We have little or no sympathy for the existence of these formats.  Indeed,
-one of the original reasons for developing this free software was to help
-force convergence on common, open format standards for JPEG files.  Don't
-use a proprietary file format!
-
-
-TO DO
-=====
-
-The major thrust for v7 will probably be improvement of visual quality.
-The current method for scaling the quantization tables is known not to be
-very good at low Q values.  We also intend to investigate block boundary
-smoothing, "poor man's variable quantization", and other means of improving
-quality-vs-file-size performance without sacrificing compatibility.
-
-In future versions, we are considering supporting some of the upcoming JPEG
-Part 3 extensions --- principally, variable quantization and the SPIFF file
-format.
-
-As always, speeding things up is of great interest.
-
-Please send bug reports, offers of help, etc. to jpeg-info at uunet.uu.net.
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/about_cairo.html b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/about_cairo.html
deleted file mode 100644
index 0132307..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/about_cairo.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>March 27, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation has included the following package for your convenience:</p> 
-
-<h4>Cairo 1.0.2 for Linux</h4>
-
-<p>Cairo for Linux ("Cairo") is developed by The Cairo Project (<a href="http://www.cairographics.org" target="_blank">http://www.cairographics.org</a>):</p>
-
-<p>Cairo is delivered in the following file ("Cairo Library"):</p>
-<ul>
-    <li>libcairo-swt.so</li>
-</ul>
-
-<p>which was compiled from Cairo source code available at <a href="http://www.cairographics.org/snapshots" target="_blank">http://www.cairographics.org/snapshots</a>.</p>
-
-<p>Your use of the Cairo code in binary form is subject to
-the terms and conditions of Mozilla Public License Version 1.1 ("MPL").  A copy of the MPL is provided (<a href="mpl-v11.txt" target="blank">mpl-v11.txt</a>)
-and is also available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html.</a>
-
-<h4>pixman 0.1.6</h4>
-
-<p>pixman ("pixman") is packaged within the Cairo Library and was compiled from source code available at
-<a href="http://www.cairographics.org/snapshots" target="_blank">http://www.cairographics.org/snapshots</a>.
-pixman includes the following packages:</p>
-
-<ul>
-	<li>libpixregion</li>
-	<li>libic</li>
-	<li>slim</li>
-</ul>
-
-Your use of pixman is subject to the terms and conditions of the licenses in <a href="pixman-licenses.txt" target="blank">pixman-licenses.txt</a>.</p>
-
-<p>If you did not receive the Cairo Library directly from the Eclipse Foundation, the package is being redistributed by another party ("Redistributor") and different terms and conditions may
-apply its use.  Check the Redistributor's license that was provided with the content.  If no such license exists, contact the Redistributor.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/about_open_motif.html b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/about_open_motif.html
deleted file mode 100644
index 2862520..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/about_open_motif.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>June 20, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation has included the following package for your convenience:</p> 
-
-<h4>Open Motif for Linux 2.1.30 Release 4</h4>
-
-<p>Open Motif for Linux ("Open Motif") is developed by Metro Link as part of The Open Motif project.  Open Motif is:</p>
-
-<blockquote>
-	Copyright (C) May, 2000 The Open Group, Metro Link, Incorporated and others. All Rights Reserved
-</blockquote>
-
-<p>Open Motif includes the following files:</p>
-<ul>
-    <li>libXm.so.2</li>
-</ul>
-
-<p>Open Motif is not considered part of the content provided by the Eclipse Foundation.  Your use of the Open Motif code in binary form is subject to
-the terms and conditions of Metro Link Public License 1.00 ("MLPL").   A copy of the MLPL is provided (<a href="mlpl-v10.html" target="_blank">mlpl-v10.html</a>)
-and is also available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html" target="_blank">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>.</p>
-
-<p>Source code for Open Motif is available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/" target="_blank">http://www.opengroup.org/openmotif/supporters/metrolink/</a>.</p>
-
-<p>If you did not receive Open Motif directly from the Eclipse Foundation, the package is being redistributed by another party ("Redistributor") and different terms and conditions may
-apply its use.  Check the Redistributor's license that was provided with the content.  If no such license exists, contact the Redistributor.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/lgpl-v21.txt b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/lgpl-v21.txt
deleted file mode 100644
index 807db79..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/lgpl-v21.txt
+++ /dev/null
@@ -1,506 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
-
-
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/mlpl-v10.html b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/mlpl-v10.html
deleted file mode 100644
index 5c692a5..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/mlpl-v10.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- saved from url=(0068)http://www.opengroup.org/openmotif/supporters/metrolink/license.html -->
-<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:o = 
-"urn:schemas-microsoft-com:office:office" xmlns:w = 
-"urn:schemas-microsoft-com:office:word"><HEAD><TITLE>Metro Link Open Motif License</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=windows-1252">
-<META content=Word.Document name=ProgId>
-<META content="MSHTML 6.00.2800.1491" name=GENERATOR>
-<META content="Microsoft Word 9" name=Originator><LINK 
-href="./Open_Motif_License_ver1.00_files/filelist.xml" rel=File-List><!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Author>10-06-99 W98</o:Author>
-  <o:LastAuthor>Preferred Customer</o:LastAuthor>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>11</o:TotalTime>
-  <o:LastPrinted>2000-05-10T23:38:00Z</o:LastPrinted>
-  <o:Created>2000-05-11T19:36:00Z</o:Created>
-  <o:LastSaved>2000-05-11T19:36:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1750</o:Words>
-  <o:Characters>9977</o:Characters>
-  <o:Company>Akerman</o:Company>
-  <o:Bytes>35840</o:Bytes>
-  <o:Lines>83</o:Lines>
-  <o:Paragraphs>19</o:Paragraphs>
-  <o:CharactersWithSpaces>12252</o:CharactersWithSpaces>
-  <o:Version>9.2720</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
-  <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery>
-  <w:UseMarginsForDrawingGridOrigin/>
-  <w:Compatibility>
-   <w:FootnoteLayoutLikeWW8/>
-   <w:ShapeLayoutLikeWW8/>
-   <w:AlignTablesRowByRow/>
-   <w:ForgetLastTabAlignment/>
-   <w:LayoutRawTableWidth/>
-   <w:LayoutTableRowsApart/>
-  </w:Compatibility>
- </w:WordDocument>
-</xml><![endif]-->
-<STYLE>@page Section1 {size: 8.5in 11.0in; margin: 1.0in 1.0in 1.0in 1.0in; mso-header-margin: 1.0in; mso-footer-margin: 1.0in; mso-footer: url("./Open_Motif_License_ver1.00_files/header.htm") f1; mso-paper-source: 0; }
-P.MsoNormal {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"
-}
-LI.MsoNormal {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"
-}
-DIV.MsoNormal {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"
-}
-P.MsoHeader {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-LI.MsoHeader {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-DIV.MsoHeader {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-P.MsoFooter {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-LI.MsoFooter {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-DIV.MsoFooter {
-	FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; tab-stops: center 3.0in right 6.0in
-}
-P.H2 {
-	FONT-WEIGHT: bold; FONT-SIZE: 18pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H2; mso-style-next: Normal; mso-outline-level: 3; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-LI.H2 {
-	FONT-WEIGHT: bold; FONT-SIZE: 18pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H2; mso-style-next: Normal; mso-outline-level: 3; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-DIV.H2 {
-	FONT-WEIGHT: bold; FONT-SIZE: 18pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H2; mso-style-next: Normal; mso-outline-level: 3; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-P.H3 {
-	FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H3; mso-style-next: Normal; mso-outline-level: 4; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-LI.H3 {
-	FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H3; mso-style-next: Normal; mso-outline-level: 4; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-DIV.H3 {
-	FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 5pt 0in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: H3; mso-style-next: Normal; mso-outline-level: 4; mso-bidi-font-size: 10.0pt; mso-bidi-font-weight: normal
-}
-P.Blockquote {
-	FONT-SIZE: 12pt; MARGIN: 5pt 0.25in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: Blockquote; mso-bidi-font-size: 10.0pt
-}
-LI.Blockquote {
-	FONT-SIZE: 12pt; MARGIN: 5pt 0.25in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: Blockquote; mso-bidi-font-size: 10.0pt
-}
-DIV.Blockquote {
-	FONT-SIZE: 12pt; MARGIN: 5pt 0.25in; LAYOUT-GRID-MODE: line; FONT-FAMILY: "Times New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: "Times New Roman"; mso-style-name: Blockquote; mso-bidi-font-size: 10.0pt
-}
-DIV.Section1 {
-	page: Section1
-}
-OL {
-	MARGIN-BOTTOM: 0in
-}
-UL {
-	MARGIN-BOTTOM: 0in
-}
-</STYLE>
-</HEAD>
-<BODY lang=EN-US style="tab-interval: .5in" bgColor=white>
-<DIV class=Section1>
-<P class=H2 style="TEXT-ALIGN: center" align=center>METRO LINK PUBLIC LICENSE 
-<BR>MOTIF GRAPHICAL USER INTERFACE SOFTWARE<BR>Version 1.00</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS 
-METRO LINK PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION 
-OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. </P>
-<P class=H3>1. DEFINITIONS </P>
-<P class=MsoNormal>"Contribution" means: </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l6 level1 lfo9">in 
-  the case of METRO LINK, INCORPORATED ("METRO LINK"), the Metro Link Program, 
-  and </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l6 level1 lfo9">in 
-  the case of each Contributor, </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=1>
-  <OL style="MARGIN-TOP: 0in" type=1>
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l0 level2 lfo2">changes 
-    to the Program, and 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l0 level2 lfo2">additions 
-    to the Program; </LI></OL></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.75in; mso-outline-level: 2"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.5in; mso-outline-level: 1">where such 
-changes and/or additions to the Program originate from and are distributed by 
-that particular Contributor. A Contribution 'originates' from a Contributor if 
-it was added to the Program by such Contributor itself or anyone acting on such 
-Contributor's behalf. Contributions do not include additions to the Program 
-which: (i) are separate modules of software distributed in conjunction with the 
-Program under their own license agreement, and (ii) are not derivative works of 
-the Program. </P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.5in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Contributor" means The Open Group, METRO LINK and any other 
-entity that distributes the Program. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Licensed Patents" mean patent claims licensable by a 
-Contributor which are necessarily infringed by the use or sale of its 
-Contribution alone or when combined with the Program.</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Open Source"<SPAN style="mso-spacerun: yes">  
-</SPAN>programs mean software for the source code is available without 
-confidential or trade secret restrictions and for which<SPAN 
-style="mso-spacerun: yes">  </SPAN>the source code and object code are 
-available for distribution without license charges.</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Metro Link Program" means the original version of the 
-software accompanying this Agreement as released by METRO LINK, including source 
-code, object code and documentation, if any. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Program" means the Metro Link Program and Contributions. 
-</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>"Recipient" means anyone who receives the Program under this 
-Agreement, including all Contributors. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=H3 
-style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in; mso-list: l4 level1 lfo8"><![if !supportLists]>2.<SPAN 
-style="FONT: 7pt 'Times New Roman'">     
-</SPAN><![endif]>GRANT OF RIGHTS </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>The rights granted under this license are limited solely to 
-distribution and sublicensing of the Contribution(s) on, with or<SPAN 
-style="mso-spacerun: yes">  </SPAN>for operating systems which are 
-themselves Open Source programs.</P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Subject 
-  to the terms of this Agreement, The Open Group Public License Agreement 
-  attached hereto (“The Open Group Agreement”) and<SPAN 
-  style="mso-spacerun: yes">  </SPAN>the limitations of this Section 2, 
-  each Contributor hereby grants Recipient a non-exclusive, worldwide, 
-  royalty-free copyright license to reproduce, prepare derivative works of, 
-  publicly display, publicly perform, distribute and sublicense the Contribution 
-  of such Contributor, if any, and such derivative works, in source code and 
-  object code form. </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Subject 
-  to the terms of this Agreement, The Open Group Agreement and this Section 2, 
-  each Contributor hereby grants Recipient a non-exclusive, worldwide, 
-  royalty-free patent license under Licensed Patents to make, use, sell, offer 
-  to sell, import and otherwise transfer the Contribution of such Contributor, 
-  if any, in source code and object code form. This patent license shall apply 
-  to the combination of the Contribution and the Program if, at the time the 
-  Contribution is added by the Contributor, such addition of the Contribution 
-  causes such combination to be covered by the Licensed Patents. The patent 
-  license shall not apply to any other combinations which include the 
-  Contribution. No hardware per se is licensed hereunder. </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=3>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Recipient 
-  understands that although each Contributor grants the licenses to its 
-  Contributions set forth herein, no assurances are provided by any Contributor 
-  that the Program does not infringe the patent or other intellectual property 
-  rights of any other entity. Each Contributor disclaims any liability to 
-  Recipient for claims brought by any other entity based on infringement of 
-  intellectual property rights or otherwise. As a condition to exercising the 
-  rights and licenses granted hereunder, each Recipient hereby assumes sole 
-  responsibility to secure any other intellectual property rights needed, if 
-  any. For example, if a third party patent license is required to allow 
-  Recipient to distribute the Program, it is Recipient's responsibility to 
-  acquire that license before distributing the Program. </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=4>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l1 level1 lfo3">Each 
-  Contributor represents that to its knowledge it has sufficient copyright 
-  rights in its Contribution, if any, to grant the copyright license set forth 
-  in this Agreement. </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=H3>3. REQUIREMENTS </P>
-<P class=MsoNormal>A Contributor may choose to distribute the Program in object 
-code form under its own license agreement, provided that: </P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l2 level1 lfo4">it 
-  complies with the terms and conditions of this Agreement<B 
-  style="mso-bidi-font-weight: normal"> </B>and The Open Group Agreement; and 
-  </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l2 level1 lfo4">its 
-  license agreement: </LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=1 start=2>
-  <OL style="MARGIN-TOP: 0in" type=1>
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">effectively 
-    disclaims on behalf of all Contributors all warranties and conditions, 
-    express and implied, including warranties or conditions of title and 
-    non-infringement, and implied warranties or conditions of merchantability 
-    and fitness for a particular purpose; 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">effectively 
-    excludes on behalf of all Contributors all liability for damages, including 
-    direct, indirect, special, incidental and consequential damages, such as 
-    lost profits; 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">states 
-    that any provisions which differ from this Agreement are offered by that 
-    Contributor alone and not by any other party; and 
-    <LI class=MsoNormal 
-    style="tab-stops: list 1.0in; mso-outline-level: 2; mso-list: l2 level2 lfo5">states 
-    that source code for the Program is available from such Contributor, and 
-    informs licensees how to obtain it in a reasonable manner on or through a 
-    medium customarily used for software exchange. </LI></OL></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.75in; mso-outline-level: 2"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>When the Program is made available in source code form: </P>
-<OL style="MARGIN-TOP: 0in" type=a>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l3 level1 lfo6">it 
-  must be made available under this Agreement and the Open Group Agreement; and 
-  </LI></OL>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<OL style="MARGIN-TOP: 0in" type=a start=2>
-  <LI class=MsoNormal 
-  style="tab-stops: list .5in; mso-outline-level: 1; mso-list: l3 level1 lfo6">a 
-  copy of this Agreement must be included with each copy of the Program. 
-</LI></OL>
-<P class=MsoNormal style="mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal style="MARGIN-LEFT: 0.25in; mso-outline-level: 1"><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>Each Contributor must include the following in a conspicuous 
-location in the Program: </P>
-<P class=Blockquote>Copyright (C) May, 2000 The Open Group, Metro Link, 
-Incorporated and others. All Rights Reserved</P>
-<P class=Blockquote><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>In addition, each Contributor must identify itself as the 
-originator of its Contribution, if any, in a manner that reasonably allows 
-subsequent Recipients to identify the originator of the Contribution. </P>
-<P class=H3>4. COMMERCIAL DISTRIBUTION </P>
-<P class=MsoNormal>Commercial distributors of software may accept certain 
-responsibilities with respect to end users, business partners and the like. 
-While this license is intended to facilitate the commercial use of the Program, 
-the Contributor who includes the Program in a commercial product offering should 
-do so in a manner which does not create potential liability for other 
-Contributors. Therefore, if a Contributor includes the Program in a commercial 
-product offering, such Contributor ("Commercial Contributor") hereby agrees to 
-defend and indemnify every other Contributor ("Indemnified Contributor") against 
-any losses, damages and costs (collectively "Losses") arising from claims, 
-lawsuits and other legal actions brought by a third party against the 
-Indemnified Contributor to the extent caused by the acts or omissions of such 
-Commercial Contributor in connection with its distribution of the Program in a 
-commercial product offering. The obligations in this section do not apply to any 
-claims or Losses relating to any actual or alleged intellectual property 
-infringement. In order to qualify, an Indemnified Contributor must: </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal 
-style="MARGIN-LEFT: 0.25in; TEXT-INDENT: -0.25in; tab-stops: list .25in; mso-list: l5 level1 lfo7"><![if !supportLists]>a)<SPAN 
-style="FONT: 7pt 'Times New Roman'">       </SPAN><![endif]>promptly notify the Commercial Contributor in writing of such 
-claim, and </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal 
-style="MARGIN-LEFT: 0.25in; TEXT-INDENT: -0.25in; tab-stops: list .25in; mso-list: l5 level1 lfo7"><![if !supportLists]>b)<SPAN 
-style="FONT: 7pt 'Times New Roman'">       </SPAN><![endif]>allow the Commercial Contributor to control, and cooperate with 
-the Commercial Contributor in, the defense and any related settlement 
-negotiations. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>The Indemnified Contributor may participate in any such claim 
-at its own expense. </P>
-<P class=MsoNormal>For example, a Contributor might include the Program in a 
-commercial product offering, Product X. That Contributor is then a Commercial 
-Contributor. If that Commercial Contributor then makes performance claims, or 
-offers warranties related to Product X, those performance claims and warranties 
-are such Commercial Contributor's responsibility alone. Under this section, the 
-Commercial Contributor would have to defend claims against the other 
-Contributors related to those performance claims and warranties, and if a court 
-requires any other Contributor to pay any damages as a result, the Commercial 
-Contributor must pay those damages. </P>
-<P class=H3>5. NO WARRANTY </P>
-<P class=MsoNormal>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM 
-IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
-EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR 
-CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A 
-PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the 
-appropriateness of using and distributing the Program and assumes all risks 
-associated with its exercise of rights under this Agreement, including but not 
-limited to the risks and costs of program errors, compliance with applicable 
-laws, damage to or loss of data, programs or equipment, and unavailability or 
-interruption of operations. </P>
-<P class=H3>6. DISCLAIMER OF LIABILITY </P>
-<P class=MsoNormal>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER 
-RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, 
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING 
-WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR 
-THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY 
-OF SUCH DAMAGES. </P>
-<P class=H3>7. GENERAL </P>
-<P class=MsoNormal>If any provision of this Agreement is invalid or 
-unenforceable under applicable law, it shall not affect the validity or 
-enforceability of the remainder of the terms of this Agreement, and without 
-further action by the parties hereto, such provision shall be reformed to the 
-minimum extent necessary to make such provision valid and enforceable. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>If Recipient institutes patent litigation against a 
-Contributor with respect to a patent applicable to software (including a 
-cross-claim or counterclaim in a lawsuit), then any patent licenses granted by 
-that Contributor to such Recipient under this Agreement shall terminate as of 
-the date such litigation is filed. In addition, if Recipient institutes patent 
-litigation against any entity (including a cross-claim or counterclaim in a 
-lawsuit) alleging that the Program itself (excluding combinations of the Program 
-with other software or hardware) infringes such Recipient's patent(s), then such 
-Recipient's rights granted under Section 2(b) shall terminate as of the date 
-such litigation is filed. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>All Recipient's rights under this Agreement shall terminate 
-if it fails to comply with any of the material terms or conditions of this 
-Agreement and does not cure such failure in a reasonable period of time after 
-becoming aware of such noncompliance. If all Recipient's rights under this 
-Agreement terminate, Recipient agrees to cease use and distribution of the 
-Program as soon as reasonably practicable. However, Recipient's obligations 
-under this Agreement and any licenses granted by Recipient relating to the 
-Program shall continue and survive. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>METRO LINK may publish new versions (including revisions) of 
-this Agreement from time to time. Each new version of the Agreement will be 
-given a distinguishing version number. The Program (including Contributions) may 
-always be distributed subject to the version of the Agreement under which it was 
-received. In addition, after a new version of the Agreement is published, 
-Contributor may elect to distribute the Program (including its Contributions) 
-under the new version. No one other than METRO LINK has the right to modify this 
-Agreement. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient 
-receives no rights or licenses to the intellectual property of any Contributor 
-under this Agreement, whether expressly, by implication, estoppel or otherwise. 
-All rights in the Program not expressly granted under this Agreement are 
-reserved. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>This Agreement is governed by the laws of the State of 
-Florida and the intellectual property laws of the United States of America. </P>
-<P class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P>
-<P class=MsoNormal>No party to this Agreement will bring a legal action under 
-this Agreement more than one year after the cause of action arose. Each party 
-waives its rights to a jury trial in any resulting litigation.</P>
-<P 
-class=MsoNormal><![if !supportEmptyParas]><![endif]> <o:p></o:p></P></DIV></BODY></HTML>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/mpl-v11.txt b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/mpl-v11.txt
deleted file mode 100644
index 7714141..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/mpl-v11.txt
+++ /dev/null
@@ -1,470 +0,0 @@
-                          MOZILLA PUBLIC LICENSE
-                                Version 1.1
-
-                              ---------------
-
-1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which controls, is
-     controlled by, or is under common control with You. For purposes of
-     this definition, "control" means (a) the power, direct or indirect,
-     to cause the direction or management of such entity, whether by
-     contract or otherwise, or (b) ownership of more than fifty percent
-     (50%) of the outstanding shares or beneficial ownership of such
-     entity.
-
-2. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, each Contributor
-     hereby grants You a world-wide, royalty-free, non-exclusive license
-
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
-     If it is impossible for You to comply with any of the terms of this
-     License with respect to some or all of the Covered Code due to
-     statute, judicial order, or regulation then You must: (a) comply with
-     the terms of this License to the maximum extent possible; and (b)
-     describe the limitations and the code they affect. Such description
-     must be included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. Except to the
-     extent prohibited by statute or regulation, such description must be
-     sufficiently detailed for a recipient of ordinary skill to be able to
-     understand it.
-
-5. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
-     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
-     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
-     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
-     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
-     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
-     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
-     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
-     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
-     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning subject
-     matter hereof. If any provision of this License is held to be
-     unenforceable, such provision shall be reformed only to the extent
-     necessary to make it enforceable. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-EXHIBIT A -Mozilla Public License.
-
-     ``The contents of this file are subject to the Mozilla Public License
-     Version 1.1 (the "License"); you may not use this file except in
-     compliance with the License. You may obtain a copy of the License at
-     http://www.mozilla.org/MPL/
-
-     Software distributed under the License is distributed on an "AS IS"
-     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
-     License for the specific language governing rights and limitations
-     under the License.
-
-     The Original Code is ______________________________________.
-
-     The Initial Developer of the Original Code is ________________________.
-     Portions created by ______________________ are Copyright (C) ______
-     _______________________. All Rights Reserved.
-
-     Contributor(s): ______________________________________.
-
-     Alternatively, the contents of this file may be used under the terms
-     of the _____ license (the  "[___] License"), in which case the
-     provisions of [______] License are applicable instead of those
-     above.  If you wish to allow use of your version of this file only
-     under the terms of the [____] License and not to allow others to use
-     your version of this file under the MPL, indicate your decision by
-     deleting  the provisions above and replace  them with the notice and
-     other provisions required by the [___] License.  If you do not delete
-     the provisions above, a recipient may use your version of this file
-     under either the MPL or the [___] License."
-
-     [NOTE: The text of this Exhibit A may differ slightly from the text of
-     the notices in the Source Code files of the Original Code. You should
-     use the text of this Exhibit A rather than the text found in the
-     Original Code Source Code for Your Modifications.]
-
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/pixman-licenses.txt b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/pixman-licenses.txt
deleted file mode 100644
index 5d8dca6..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/about_files/pixman-licenses.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-libpixregion
-
-Copyright 1987, 1998  The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-----------------------------------------------------------------------
-libic
-
-Copyright © 2001 Keith Packard
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Keith Packard not be used in
-advertising or publicity pertaining to distribution of the software without
-specific, written prior permission.  Keith Packard makes no
-representations about the suitability of this software for any purpose.  It
-is provided "as is" without express or implied warranty.
-
-KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
-----------------------------------------------------------------------
-slim
-
-slim is Copyright © 2003 Richard Henderson
-
-Permission to use, copy, modify, distribute, and sell this software
-and its documentation for any purpose is hereby granted without fee,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Richard Henderson not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  Richard Henderson
-makes no representations about the suitability of this software for
-any purpose.  It is provided "as is" without express or implied
-warranty.
-
-RICHARD HENDERSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL RICHARD HENDERSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
-USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.properties b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.properties
deleted file mode 100644
index b1ad110..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-custom = true
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.xml b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.xml
deleted file mode 100644
index 136672b..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/build.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.swt.motif.linux.x86" default="build.jars" basedir=".">
-
-	<property name="swt.ws" value="motif" />
-	<property name="swt.os" value="linux" />
-	<property name="swt.arch" value="x86" />
-	
-	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
-
-	<import file="../org.eclipse.swt/buildFragment.xml"/>
-</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/fragment.properties b/eclipse/plugins/org.eclipse.swt.motif.linux.x86/fragment.properties
deleted file mode 100644
index d7c7965..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.linux.x86/fragment.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-fragmentName = Standard Widget Toolkit for Motif
-providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/.project b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/.project
deleted file mode 100644
index 09e3aa0..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.motif.solaris.sparc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/META-INF/MANIFEST.MF
deleted file mode 100644
index 16236d0..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Manifest-Version: 1.0
-Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
-Bundle-Name: %fragmentName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.swt.motif.solaris.sparc; singleton:=true
-Bundle-Version: 3.6.2.qualifier
-Bundle-ManifestVersion: 2
-Bundle-Localization: fragment
-Export-Package: 
- org.eclipse.swt.internal.cairo; x-internal:=true,
- org.eclipse.swt.internal.cde; x-internal:=true,
- org.eclipse.swt.internal.gnome; x-internal:=true,
- org.eclipse.swt.internal.gtk; x-internal:=true,
- org.eclipse.swt.internal.motif; x-internal:=true,
- org.eclipse.swt.internal.mozilla; x-internal:=true,
- org.eclipse.swt.internal.opengl.glx; x-internal:=true
-Eclipse-PlatformFilter: (& (osgi.ws=motif) (osgi.os=solaris) (osgi.arch=sparc))
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/about.html b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/about.html
deleted file mode 100644
index 0973f70..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/about.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>August 17, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Independent JPEG Group's JPEG software release 6b</h4>
-
-<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
-LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
-
-<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
-with the Content.</p>
-
-<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
-
-<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
-
-<ul>
-    <li>cderror.h</li>
-    <li>cdjpeg.h</li>
-    <li>jchuff.h</li>
-    <li>jdcolor.c</li>
-    <li>jdct.h</li>
-    <li>jdhuff.h</li>
-    <li>jerror.h</li>
-    <li>jidctint.c</li>
-    <li>jinclude.h</li>
-    <li>jmemsys.h</li>
-    <li>jmorecfg.h</li>
-    <li>jpegint.h</li>
-    <li>jpeglib.h</li>
-    <li>jversion.h</li>
-    <li>transupp.h</li>
-</ul>
-
-<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
-
-<ul>
-	<li>jcapimin.c</li>
-	<li>jcapistd.c</li>
-	<li>jccoefct.c</li>
-	<li>jccolor.c</li>
-	<li>jcdctmgr.c</li>
-	<li>jchuff.c</li>
-	<li>jcinit.c</li>
-	<li>jcmainct.c</li>
-	<li>jcmarker.c</li>
-	<li>jcmaster.c</li>
-	<li>jcomapi.c</li>
-	<li>jcparam.c</li>
-	<li>jcphuff.c</li>
-	<li>jcprepct.c</li>
-	<li>jcsample.c</li>
-	<li>jctrans.c</li>
-	<li>jdapimin.c</li>
-	<li>jdapistd.c</li>
-	<li>jdatadst.c</li>
-	<li>jdatasrc.c</li>
-	<li>jdcoefct.c</li>
-	<li>jdcolor.c</li>
-	<li>jddctmgr.c</li>
-	<li>jdhuff.c</li>
-	<li>jdinput.c</li>
-	<li>jdmainct.c</li>
-	<li>jdmarker.c</li>
-	<li>jdmaster.c</li>
-	<li>jdmerge.c</li>
-	<li>jdphuff.c</li>
-	<li>jdpostct.c</li>
-	<li>jdsample.c</li>
-	<li>jdtrans.c</li>
-	<li>jerror.c</li>
-	<li>jfdctflt.c</li>
-	<li>jfdctfst.c</li>
-	<li>jfdctint.c</li>
-	<li>jidctflt.c</li>
-	<li>jidctfst.c</li>
-	<li>jidctint.c</li>
-	<li>jidctred.c</li>
-	<li>jpegtran.c</li>
-	<li>jquant1.c</li>
-	<li>jquant2.c</li>
-	<li>jutils.c</li>
-	<li>cderror.h</li>
-	<li>cdjpeg.h</li>
-	<li>jchuff.h</li>
-	<li>jconfig.h</li>
-	<li>jdct.h</li>
-	<li>jdhuff.h</li>
-	<li>jerror.h</li>
-	<li>jinclude.h</li>
-	<li>jmorecfg.h</li>
-	<li>jpegint.h</li>
-	<li>jpeglib.h</li>
-	<li>jversion.h</li>
-	<li>transupp.h</li>
-</ul>
-	
-<p>The following changes were made to the LIBJPEG code in the Content:</p>
-
-<ol>
-	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
-	<li>Function pointers were replaced with switch statements.</li>
-	<li>The virtual memory, tracing and progress monitoring were removed.</li>
-	<li>The error handling was simplified and now uses Java exceptions.</li>
-</ol>
-
-<h4>PuTTY 0.58 (derivative work)</h4>
-
-<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org.  Use of PuTTY is governed by the terms and
-conditions of the the following MIT-style license:  </p>
-<blockquote>
-  <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
-  <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian  Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,  Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn,  and CORE SDI S.A.</em> </p>
-  <p><em>Permission is hereby granted, free of charge, to any person  obtaining a copy of this software and associated documentation files  (the "Software"), to deal in the Software without restriction,  including without limitation the rights to use, copy, modify, merge,  publish, distribute, sublicense, and/or sell copies of the Software,  and to permit persons to whom the Software is furnished to do so,  subject to the following conditions:</em> </p>
-  <p><em>The above copyright notice and this permission notice shall be  included in all copies or substantial portions of the Software.</em> </p>
-  <p><em>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
-</blockquote>
-<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
-
-<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/about_files/IJG_README
deleted file mode 100644
index 86cc206..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/about_files/IJG_README
+++ /dev/null
@@ -1,385 +0,0 @@
-The Independent JPEG Group's JPEG software
-==========================================
-
-README for release 6b of 27-Mar-1998
-====================================
-
-This distribution contains the sixth public release of the Independent JPEG
-Group's free JPEG software.  You are welcome to redistribute this software and
-to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
-
-Serious users of this software (particularly those incorporating it into
-larger programs) should contact IJG at jpeg-info at uunet.uu.net to be added to
-our electronic mailing list.  Mailing list members are notified of updates
-and have a chance to participate in technical discussions, etc.
-
-This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
-Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
-Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
-Group.
-
-IJG is not affiliated with the official ISO JPEG standards committee.
-
-
-DOCUMENTATION ROADMAP
-=====================
-
-This file contains the following sections:
-
-OVERVIEW            General description of JPEG and the IJG software.
-LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
-REFERENCES          Where to learn more about JPEG.
-ARCHIVE LOCATIONS   Where to find newer versions of this software.
-RELATED SOFTWARE    Other stuff you should get.
-FILE FORMAT WARS    Software *not* to get.
-TO DO               Plans for future IJG releases.
-
-Other documentation files in the distribution are:
-
-User documentation:
-  install.doc       How to configure and install the IJG software.
-  usage.doc         Usage instructions for cjpeg, djpeg, jpegtran,
-                    rdjpgcom, and wrjpgcom.
-  *.1               Unix-style man pages for programs (same info as usage.doc).
-  wizard.doc        Advanced usage instructions for JPEG wizards only.
-  change.log        Version-to-version change highlights.
-Programmer and internal documentation:
-  libjpeg.doc       How to use the JPEG library in your own programs.
-  example.c         Sample code for calling the JPEG library.
-  structure.doc     Overview of the JPEG library's internal structure.
-  filelist.doc      Road map of IJG files.
-  coderules.doc     Coding style rules --- please read if you contribute code.
-
-Please read at least the files install.doc and usage.doc.  Useful information
-can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
-ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
-
-If you want to understand how the JPEG code works, we suggest reading one or
-more of the REFERENCES, then looking at the documentation files (in roughly
-the order listed) before diving into the code.
-
-
-OVERVIEW
-========
-
-This package contains C software to implement JPEG image compression and
-decompression.  JPEG (pronounced "jay-peg") is a standardized compression
-method for full-color and gray-scale images.  JPEG is intended for compressing
-"real-world" scenes; line drawings, cartoons and other non-realistic images
-are not its strong suit.  JPEG is lossy, meaning that the output image is not
-exactly identical to the input image.  Hence you must not use JPEG if you
-have to have identical output bits.  However, on typical photographic images,
-very good compression levels can be obtained with no visible change, and
-remarkably high compression levels are possible if you can tolerate a
-low-quality image.  For more details, see the references, or just experiment
-with various compression settings.
-
-This software implements JPEG baseline, extended-sequential, and progressive
-compression processes.  Provision is made for supporting all variants of these
-processes, although some uncommon parameter settings aren't implemented yet.
-For legal reasons, we are not distributing code for the arithmetic-coding
-variants of JPEG; see LEGAL ISSUES.  We have made no provision for supporting
-the hierarchical or lossless processes defined in the standard.
-
-We provide a set of library routines for reading and writing JPEG image files,
-plus two sample applications "cjpeg" and "djpeg", which use the library to
-perform conversion between JPEG and some other popular image file formats.
-The library is intended to be reused in other applications.
-
-In order to support file conversion and viewing software, we have included
-considerable functionality beyond the bare JPEG coding/decoding capability;
-for example, the color quantization modules are not strictly part of JPEG
-decoding, but they are essential for output to colormapped file formats or
-colormapped displays.  These extra functions can be compiled out of the
-library if not required for a particular application.  We have also included
-"jpegtran", a utility for lossless transcoding between different JPEG
-processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
-inserting and extracting textual comments in JFIF files.
-
-The emphasis in designing this software has been on achieving portability and
-flexibility, while also making it fast enough to be useful.  In particular,
-the software is not intended to be read as a tutorial on JPEG.  (See the
-REFERENCES section for introductory material.)  Rather, it is intended to
-be reliable, portable, industrial-strength code.  We do not claim to have
-achieved that goal in every aspect of the software, but we strive for it.
-
-We welcome the use of this software as a component of commercial products.
-No royalty is required, but we do ask for an acknowledgement in product
-documentation, as described under LEGAL ISSUES.
-
-
-LEGAL ISSUES
-============
-
-In plain English:
-
-1. We don't promise that this software works.  (But if you find any bugs,
-   please let us know!)
-2. You can use this software for whatever you want.  You don't have to pay us.
-3. You may not pretend that you wrote this software.  If you use it in a
-   program, you must acknowledge somewhere in your documentation that
-   you've used the IJG code.
-
-In legalese:
-
-The authors make NO WARRANTY or representation, either express or implied,
-with respect to this software, its quality, accuracy, merchantability, or
-fitness for a particular purpose.  This software is provided "AS IS", and you,
-its user, assume the entire risk as to its quality and accuracy.
-
-This software is copyright (C) 1991-1998, Thomas G. Lane.
-All Rights Reserved except as specified below.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-software (or portions thereof) for any purpose, without fee, subject to these
-conditions:
-(1) If any part of the source code for this software is distributed, then this
-README file must be included, with this copyright and no-warranty notice
-unaltered; and any additions, deletions, or changes to the original files
-must be clearly indicated in accompanying documentation.
-(2) If only executable code is distributed, then the accompanying
-documentation must state that "this software is based in part on the work of
-the Independent JPEG Group".
-(3) Permission for use of this software is granted only if the user accepts
-full responsibility for any undesirable consequences; the authors accept
-NO LIABILITY for damages of any kind.
-
-These conditions apply to any software derived from or based on the IJG code,
-not just to the unmodified library.  If you use our work, you ought to
-acknowledge us.
-
-Permission is NOT granted for the use of any IJG author's name or company name
-in advertising or publicity relating to this software or products derived from
-it.  This software may be referred to only as "the Independent JPEG Group's
-software".
-
-We specifically permit and encourage the use of this software as the basis of
-commercial products, provided that all warranty or liability claims are
-assumed by the product vendor.
-
-
-ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
-sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
-ansi2knr.c is NOT covered by the above copyright and conditions, but instead
-by the usual distribution terms of the Free Software Foundation; principally,
-that you must include source code if you redistribute it.  (See the file
-ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
-of any program generated from the IJG code, this does not limit you more than
-the foregoing paragraphs do.
-
-The Unix configuration script "configure" was produced with GNU Autoconf.
-It is copyright by the Free Software Foundation but is freely distributable.
-The same holds for its supporting scripts (config.guess, config.sub,
-ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
-by M.I.T. but is also freely distributable.
-
-It appears that the arithmetic coding option of the JPEG spec is covered by
-patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
-legally be used without obtaining one or more licenses.  For this reason,
-support for arithmetic coding has been removed from the free JPEG software.
-(Since arithmetic coding provides only a marginal gain over the unpatented
-Huffman mode, it is unlikely that very many implementations will support it.)
-So far as we are aware, there are no patent restrictions on the remaining
-code.
-
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent, GIF reading support has
-been removed altogether, and the GIF writer has been simplified to produce
-"uncompressed GIFs".  This technique does not use the LZW algorithm; the
-resulting GIF files are larger than usual, but are readable by all standard
-GIF decoders.
-
-We are required to state that
-    "The Graphics Interchange Format(c) is the Copyright property of
-    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
-    CompuServe Incorporated."
-
-
-REFERENCES
-==========
-
-We highly recommend reading one or more of these references before trying to
-understand the innards of the JPEG software.
-
-The best short technical introduction to the JPEG compression algorithm is
-	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
-	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
-(Adjacent articles in that issue discuss MPEG motion picture compression,
-applications of JPEG, and related topics.)  If you don't have the CACM issue
-handy, a PostScript file containing a revised version of Wallace's article is
-available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz.  The file (actually
-a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
-omits the sample images that appeared in CACM, but it includes corrections
-and some added material.  Note: the Wallace article is copyright ACM and IEEE,
-and it may not be used for commercial purposes.
-
-A somewhat less technical, more leisurely introduction to JPEG can be found in
-"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
-M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
-good explanations and example C code for a multitude of compression methods
-including JPEG.  It is an excellent source if you are comfortable reading C
-code but don't know much about data compression in general.  The book's JPEG
-sample code is far from industrial-strength, but when you are ready to look
-at a full implementation, you've got one here...
-
-The best full description of JPEG is the textbook "JPEG Still Image Data
-Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
-by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95, 638 pp.
-The book includes the complete text of the ISO JPEG standards (DIS 10918-1
-and draft DIS 10918-2).  This is by far the most complete exposition of JPEG
-in existence, and we highly recommend it.
-
-The JPEG standard itself is not available electronically; you must order a
-paper copy through ISO or ITU.  (Unless you feel a need to own a certified
-official copy, we recommend buying the Pennebaker and Mitchell book instead;
-it's much cheaper and includes a great deal of useful explanatory material.)
-In the USA, copies of the standard may be ordered from ANSI Sales at (212)
-642-4900, or from Global Engineering Documents at (800) 854-7179.  (ANSI
-doesn't take credit card orders, but Global does.)  It's not cheap: as of
-1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
-shipping/handling.  The standard is divided into two parts, Part 1 being the
-actual specification, while Part 2 covers compliance testing methods.  Part 1
-is titled "Digital Compression and Coding of Continuous-tone Still Images,
-Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
-10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
-Continuous-tone Still Images, Part 2: Compliance testing" and has document
-numbers ISO/IEC IS 10918-2, ITU-T T.83.
-
-Some extensions to the original JPEG standard are defined in JPEG Part 3,
-a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84.  IJG
-currently does not support any Part 3 extensions.
-
-The JPEG standard does not specify all details of an interchangeable file
-format.  For the omitted details we follow the "JFIF" conventions, revision
-1.02.  A copy of the JFIF spec is available from:
-	Literature Department
-	C-Cube Microsystems, Inc.
-	1778 McCarthy Blvd.
-	Milpitas, CA 95035
-	phone (408) 944-6300,  fax (408) 944-6314
-A PostScript version of this document is available by FTP at
-ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.  There is also a plain text
-version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
-the figures.
-
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7).  Copies of this Note can be obtained from ftp.sgi.com or
-from ftp://ftp.uu.net/graphics/jpeg/.  It is expected that the next revision
-of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
-Although IJG's own code does not support TIFF/JPEG, the free libtiff library
-uses our library to implement TIFF/JPEG per the Note.  libtiff is available
-from ftp://ftp.sgi.com/graphics/tiff/.
-
-
-ARCHIVE LOCATIONS
-=================
-
-The "official" archive site for this software is ftp.uu.net (Internet
-address 192.48.96.9).  The most recent released version can always be found
-there in directory graphics/jpeg.  This particular version will be archived
-as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz.  If you don't have
-direct Internet access, UUNET's archives are also available via UUCP; contact
-help at uunet.uu.net for information on retrieving files that way.
-
-Numerous Internet sites maintain copies of the UUNET files.  However, only
-ftp.uu.net is guaranteed to have the latest official version.
-
-You can also obtain this software in DOS-compatible "zip" archive format from
-the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
-on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
-"JPEG Tools".  Again, these versions may sometimes lag behind the ftp.uu.net
-release.
-
-The JPEG FAQ (Frequently Asked Questions) article is a useful source of
-general information about JPEG.  It is updated constantly and therefore is
-not included in this distribution.  The FAQ is posted every two weeks to
-Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server at rtfm.mit.edu
-with body
-	send usenet/news.answers/jpeg-faq/part1
-	send usenet/news.answers/jpeg-faq/part2
-
-
-RELATED SOFTWARE
-================
-
-Numerous viewing and image manipulation programs now support JPEG.  (Quite a
-few of them use this library to do so.)  The JPEG FAQ described above lists
-some of the more popular free and shareware viewers, and tells where to
-obtain them on Internet.
-
-If you are on a Unix machine, we highly recommend Jef Poskanzer's free
-PBMPLUS software, which provides many useful operations on PPM-format image
-files.  In particular, it can convert PPM images to and from a wide range of
-other formats, thus making cjpeg/djpeg considerably more useful.  The latest
-version is distributed by the NetPBM group, and is available from numerous
-sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
-Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
-you are likely to have difficulty making it work on any non-Unix machine.
-
-A different free JPEG implementation, written by the PVRG group at Stanford,
-is available from ftp://havefun.stanford.edu/pub/jpeg/.  This program
-is designed for research and experimentation rather than production use;
-it is slower, harder to use, and less portable than the IJG code, but it
-is easier to read and modify.  Also, the PVRG code supports lossless JPEG,
-which we do not.  (On the other hand, it doesn't do progressive JPEG.)
-
-
-FILE FORMAT WARS
-================
-
-Some JPEG programs produce files that are not compatible with our library.
-The root of the problem is that the ISO JPEG committee failed to specify a
-concrete file format.  Some vendors "filled in the blanks" on their own,
-creating proprietary formats that no one else could read.  (For example, none
-of the early commercial JPEG implementations for the Macintosh were able to
-exchange compressed files.)
-
-The file format we have adopted is called JFIF (see REFERENCES).  This format
-has been agreed to by a number of major commercial JPEG vendors, and it has
-become the de facto standard.  JFIF is a minimal or "low end" representation.
-We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
-Technical Note #2) for "high end" applications that need to record a lot of
-additional data about an image.  TIFF/JPEG is fairly new and not yet widely
-supported, unfortunately.
-
-The upcoming JPEG Part 3 standard defines a file format called SPIFF.
-SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
-be able to read the most common variant of SPIFF.  SPIFF has some technical
-advantages over JFIF, but its major claim to fame is simply that it is an
-official standard rather than an informal one.  At this point it is unclear
-whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
-standard.  IJG intends to support SPIFF once the standard is frozen, but we
-have not decided whether it should become our default output format or not.
-(In any case, our decoder will remain capable of reading JFIF indefinitely.)
-
-Various proprietary file formats incorporating JPEG compression also exist.
-We have little or no sympathy for the existence of these formats.  Indeed,
-one of the original reasons for developing this free software was to help
-force convergence on common, open format standards for JPEG files.  Don't
-use a proprietary file format!
-
-
-TO DO
-=====
-
-The major thrust for v7 will probably be improvement of visual quality.
-The current method for scaling the quantization tables is known not to be
-very good at low Q values.  We also intend to investigate block boundary
-smoothing, "poor man's variable quantization", and other means of improving
-quality-vs-file-size performance without sacrificing compatibility.
-
-In future versions, we are considering supporting some of the upcoming JPEG
-Part 3 extensions --- principally, variable quantization and the SPIFF file
-format.
-
-As always, speeding things up is of great interest.
-
-Please send bug reports, offers of help, etc. to jpeg-info at uunet.uu.net.
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.properties b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.properties
deleted file mode 100644
index b1ad110..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-custom = true
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.xml b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.xml
deleted file mode 100644
index 8f8db4b..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/build.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.swt.motif.solaris.sparc" default="build.jars" basedir=".">
-
-	<property name="swt.ws" value="motif" />
-	<property name="swt.os" value="solaris" />
-	<property name="swt.arch" value="sparc" />
-	
-	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
-
-	<import file="../org.eclipse.swt/buildFragment.xml"/>
-</project>
diff --git a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/fragment.properties b/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/fragment.properties
deleted file mode 100644
index d7c7965..0000000
--- a/eclipse/plugins/org.eclipse.swt.motif.solaris.sparc/fragment.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-fragmentName = Standard Widget Toolkit for Motif
-providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/.project b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/.project
deleted file mode 100644
index 5175bb9..0000000
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.photon.qnx.x86</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
-	</natures>
-</projectDescription>
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/META-INF/MANIFEST.MF
deleted file mode 100644
index 42f33a4..0000000
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
-Bundle-Name: %fragmentName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.swt.photon.qnx.x86; singleton:=true
-Bundle-Version: 3.6.2.qualifier
-Bundle-ManifestVersion: 2
-Bundle-Localization: fragment
-Export-Package: 
- org.eclipse.swt.internal.photon; x-internal:=true
-Eclipse-PlatformFilter: (& (osgi.ws=photon) (osgi.os=qnx) (osgi.arch=x86))
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/about.html b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/about.html
deleted file mode 100644
index 0973f70..0000000
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/about.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>August 17, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-<h3>Third Party Content</h3>
-
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor’s license for 
-terms and conditions of use.</p>
-
-<h4>Independent JPEG Group's JPEG software release 6b</h4>
-
-<p>This software is based in part on the work of the Independent JPEG Group's JPEG software release 6b ("LIBJPEG").
-LIBJPEG was used to implement the decoding of JPEG format files in Java (TM).  The Content does NOT include any portion of the LIBJPEG file ansi2knr.c.</p>
-
-<p>Your use of LIBJPEG is subject to the terms and conditions located in the <a href="about_files/IJG_README">about_files/IJG_README</a> file which is included
-with the Content.</p>
-
-<p>The IJG's website is located at <a href="http://ijg.org/" target="_blank">http://ijg.org</a>.</p>
-
-<p>The class org.eclipse.swt.internal.image.JPEGFileFormat is based on following files from LIBJPEG:</p>
-
-<ul>
-    <li>cderror.h</li>
-    <li>cdjpeg.h</li>
-    <li>jchuff.h</li>
-    <li>jdcolor.c</li>
-    <li>jdct.h</li>
-    <li>jdhuff.h</li>
-    <li>jerror.h</li>
-    <li>jidctint.c</li>
-    <li>jinclude.h</li>
-    <li>jmemsys.h</li>
-    <li>jmorecfg.h</li>
-    <li>jpegint.h</li>
-    <li>jpeglib.h</li>
-    <li>jversion.h</li>
-    <li>transupp.h</li>
-</ul>
-
-<p>The class org.eclipse.swt.internal.image.JPEGDecoder is based on the following files from LIBJPEG:</p>
-
-<ul>
-	<li>jcapimin.c</li>
-	<li>jcapistd.c</li>
-	<li>jccoefct.c</li>
-	<li>jccolor.c</li>
-	<li>jcdctmgr.c</li>
-	<li>jchuff.c</li>
-	<li>jcinit.c</li>
-	<li>jcmainct.c</li>
-	<li>jcmarker.c</li>
-	<li>jcmaster.c</li>
-	<li>jcomapi.c</li>
-	<li>jcparam.c</li>
-	<li>jcphuff.c</li>
-	<li>jcprepct.c</li>
-	<li>jcsample.c</li>
-	<li>jctrans.c</li>
-	<li>jdapimin.c</li>
-	<li>jdapistd.c</li>
-	<li>jdatadst.c</li>
-	<li>jdatasrc.c</li>
-	<li>jdcoefct.c</li>
-	<li>jdcolor.c</li>
-	<li>jddctmgr.c</li>
-	<li>jdhuff.c</li>
-	<li>jdinput.c</li>
-	<li>jdmainct.c</li>
-	<li>jdmarker.c</li>
-	<li>jdmaster.c</li>
-	<li>jdmerge.c</li>
-	<li>jdphuff.c</li>
-	<li>jdpostct.c</li>
-	<li>jdsample.c</li>
-	<li>jdtrans.c</li>
-	<li>jerror.c</li>
-	<li>jfdctflt.c</li>
-	<li>jfdctfst.c</li>
-	<li>jfdctint.c</li>
-	<li>jidctflt.c</li>
-	<li>jidctfst.c</li>
-	<li>jidctint.c</li>
-	<li>jidctred.c</li>
-	<li>jpegtran.c</li>
-	<li>jquant1.c</li>
-	<li>jquant2.c</li>
-	<li>jutils.c</li>
-	<li>cderror.h</li>
-	<li>cdjpeg.h</li>
-	<li>jchuff.h</li>
-	<li>jconfig.h</li>
-	<li>jdct.h</li>
-	<li>jdhuff.h</li>
-	<li>jerror.h</li>
-	<li>jinclude.h</li>
-	<li>jmorecfg.h</li>
-	<li>jpegint.h</li>
-	<li>jpeglib.h</li>
-	<li>jversion.h</li>
-	<li>transupp.h</li>
-</ul>
-	
-<p>The following changes were made to the LIBJPEG code in the Content:</p>
-
-<ol>
-	<li>In Java, pointer math is not allowed so indexing was used instead.</li>
-	<li>Function pointers were replaced with switch statements.</li>
-	<li>The virtual memory, tracing and progress monitoring were removed.</li>
-	<li>The error handling was simplified and now uses Java exceptions.</li>
-</ol>
-
-<h4>PuTTY 0.58 (derivative work)</h4>
-
-<p>Portions of the SWT class org/eclipse/swt/internal/image/PngDeflater are based on PuTTY's sshzlib.c. PuTTY is made available by Mozilla.org.  Use of PuTTY is governed by the terms and
-conditions of the the following MIT-style license:  </p>
-<blockquote>
-  <p><em>PuTTY is copyright 1997-2007 Simon Tatham.</em> </p>
-  <p><em>Portions copyright Robert de Bath, Joris van Rantwijk, Delian  Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,  Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn,  and CORE SDI S.A.</em> </p>
-  <p><em>Permission is hereby granted, free of charge, to any person  obtaining a copy of this software and associated documentation files  (the "Software"), to deal in the Software without restriction,  including without limitation the rights to use, copy, modify, merge,  publish, distribute, sublicense, and/or sell copies of the Software,  and to permit persons to whom the Software is furnished to do so,  subject to the following conditions:</em> </p>
-  <p><em>The above copyright notice and this permission notice shall be  included in all copies or substantial portions of the Software.</em> </p>
-  <p><em>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</em> </p>
-</blockquote>
-<p>A copy of the license is also available at <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html" target="_blank">http://www.chiark.greenend.org.uk/~sgtatham/putty/licence.html</a>.</p>
-
-<p><small>Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.</small></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/about_files/IJG_README b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/about_files/IJG_README
deleted file mode 100644
index 86cc206..0000000
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/about_files/IJG_README
+++ /dev/null
@@ -1,385 +0,0 @@
-The Independent JPEG Group's JPEG software
-==========================================
-
-README for release 6b of 27-Mar-1998
-====================================
-
-This distribution contains the sixth public release of the Independent JPEG
-Group's free JPEG software.  You are welcome to redistribute this software and
-to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
-
-Serious users of this software (particularly those incorporating it into
-larger programs) should contact IJG at jpeg-info at uunet.uu.net to be added to
-our electronic mailing list.  Mailing list members are notified of updates
-and have a chance to participate in technical discussions, etc.
-
-This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
-Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
-Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
-Group.
-
-IJG is not affiliated with the official ISO JPEG standards committee.
-
-
-DOCUMENTATION ROADMAP
-=====================
-
-This file contains the following sections:
-
-OVERVIEW            General description of JPEG and the IJG software.
-LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
-REFERENCES          Where to learn more about JPEG.
-ARCHIVE LOCATIONS   Where to find newer versions of this software.
-RELATED SOFTWARE    Other stuff you should get.
-FILE FORMAT WARS    Software *not* to get.
-TO DO               Plans for future IJG releases.
-
-Other documentation files in the distribution are:
-
-User documentation:
-  install.doc       How to configure and install the IJG software.
-  usage.doc         Usage instructions for cjpeg, djpeg, jpegtran,
-                    rdjpgcom, and wrjpgcom.
-  *.1               Unix-style man pages for programs (same info as usage.doc).
-  wizard.doc        Advanced usage instructions for JPEG wizards only.
-  change.log        Version-to-version change highlights.
-Programmer and internal documentation:
-  libjpeg.doc       How to use the JPEG library in your own programs.
-  example.c         Sample code for calling the JPEG library.
-  structure.doc     Overview of the JPEG library's internal structure.
-  filelist.doc      Road map of IJG files.
-  coderules.doc     Coding style rules --- please read if you contribute code.
-
-Please read at least the files install.doc and usage.doc.  Useful information
-can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
-ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
-
-If you want to understand how the JPEG code works, we suggest reading one or
-more of the REFERENCES, then looking at the documentation files (in roughly
-the order listed) before diving into the code.
-
-
-OVERVIEW
-========
-
-This package contains C software to implement JPEG image compression and
-decompression.  JPEG (pronounced "jay-peg") is a standardized compression
-method for full-color and gray-scale images.  JPEG is intended for compressing
-"real-world" scenes; line drawings, cartoons and other non-realistic images
-are not its strong suit.  JPEG is lossy, meaning that the output image is not
-exactly identical to the input image.  Hence you must not use JPEG if you
-have to have identical output bits.  However, on typical photographic images,
-very good compression levels can be obtained with no visible change, and
-remarkably high compression levels are possible if you can tolerate a
-low-quality image.  For more details, see the references, or just experiment
-with various compression settings.
-
-This software implements JPEG baseline, extended-sequential, and progressive
-compression processes.  Provision is made for supporting all variants of these
-processes, although some uncommon parameter settings aren't implemented yet.
-For legal reasons, we are not distributing code for the arithmetic-coding
-variants of JPEG; see LEGAL ISSUES.  We have made no provision for supporting
-the hierarchical or lossless processes defined in the standard.
-
-We provide a set of library routines for reading and writing JPEG image files,
-plus two sample applications "cjpeg" and "djpeg", which use the library to
-perform conversion between JPEG and some other popular image file formats.
-The library is intended to be reused in other applications.
-
-In order to support file conversion and viewing software, we have included
-considerable functionality beyond the bare JPEG coding/decoding capability;
-for example, the color quantization modules are not strictly part of JPEG
-decoding, but they are essential for output to colormapped file formats or
-colormapped displays.  These extra functions can be compiled out of the
-library if not required for a particular application.  We have also included
-"jpegtran", a utility for lossless transcoding between different JPEG
-processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
-inserting and extracting textual comments in JFIF files.
-
-The emphasis in designing this software has been on achieving portability and
-flexibility, while also making it fast enough to be useful.  In particular,
-the software is not intended to be read as a tutorial on JPEG.  (See the
-REFERENCES section for introductory material.)  Rather, it is intended to
-be reliable, portable, industrial-strength code.  We do not claim to have
-achieved that goal in every aspect of the software, but we strive for it.
-
-We welcome the use of this software as a component of commercial products.
-No royalty is required, but we do ask for an acknowledgement in product
-documentation, as described under LEGAL ISSUES.
-
-
-LEGAL ISSUES
-============
-
-In plain English:
-
-1. We don't promise that this software works.  (But if you find any bugs,
-   please let us know!)
-2. You can use this software for whatever you want.  You don't have to pay us.
-3. You may not pretend that you wrote this software.  If you use it in a
-   program, you must acknowledge somewhere in your documentation that
-   you've used the IJG code.
-
-In legalese:
-
-The authors make NO WARRANTY or representation, either express or implied,
-with respect to this software, its quality, accuracy, merchantability, or
-fitness for a particular purpose.  This software is provided "AS IS", and you,
-its user, assume the entire risk as to its quality and accuracy.
-
-This software is copyright (C) 1991-1998, Thomas G. Lane.
-All Rights Reserved except as specified below.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-software (or portions thereof) for any purpose, without fee, subject to these
-conditions:
-(1) If any part of the source code for this software is distributed, then this
-README file must be included, with this copyright and no-warranty notice
-unaltered; and any additions, deletions, or changes to the original files
-must be clearly indicated in accompanying documentation.
-(2) If only executable code is distributed, then the accompanying
-documentation must state that "this software is based in part on the work of
-the Independent JPEG Group".
-(3) Permission for use of this software is granted only if the user accepts
-full responsibility for any undesirable consequences; the authors accept
-NO LIABILITY for damages of any kind.
-
-These conditions apply to any software derived from or based on the IJG code,
-not just to the unmodified library.  If you use our work, you ought to
-acknowledge us.
-
-Permission is NOT granted for the use of any IJG author's name or company name
-in advertising or publicity relating to this software or products derived from
-it.  This software may be referred to only as "the Independent JPEG Group's
-software".
-
-We specifically permit and encourage the use of this software as the basis of
-commercial products, provided that all warranty or liability claims are
-assumed by the product vendor.
-
-
-ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
-sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
-ansi2knr.c is NOT covered by the above copyright and conditions, but instead
-by the usual distribution terms of the Free Software Foundation; principally,
-that you must include source code if you redistribute it.  (See the file
-ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
-of any program generated from the IJG code, this does not limit you more than
-the foregoing paragraphs do.
-
-The Unix configuration script "configure" was produced with GNU Autoconf.
-It is copyright by the Free Software Foundation but is freely distributable.
-The same holds for its supporting scripts (config.guess, config.sub,
-ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
-by M.I.T. but is also freely distributable.
-
-It appears that the arithmetic coding option of the JPEG spec is covered by
-patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
-legally be used without obtaining one or more licenses.  For this reason,
-support for arithmetic coding has been removed from the free JPEG software.
-(Since arithmetic coding provides only a marginal gain over the unpatented
-Huffman mode, it is unlikely that very many implementations will support it.)
-So far as we are aware, there are no patent restrictions on the remaining
-code.
-
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent, GIF reading support has
-been removed altogether, and the GIF writer has been simplified to produce
-"uncompressed GIFs".  This technique does not use the LZW algorithm; the
-resulting GIF files are larger than usual, but are readable by all standard
-GIF decoders.
-
-We are required to state that
-    "The Graphics Interchange Format(c) is the Copyright property of
-    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
-    CompuServe Incorporated."
-
-
-REFERENCES
-==========
-
-We highly recommend reading one or more of these references before trying to
-understand the innards of the JPEG software.
-
-The best short technical introduction to the JPEG compression algorithm is
-	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
-	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
-(Adjacent articles in that issue discuss MPEG motion picture compression,
-applications of JPEG, and related topics.)  If you don't have the CACM issue
-handy, a PostScript file containing a revised version of Wallace's article is
-available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz.  The file (actually
-a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
-omits the sample images that appeared in CACM, but it includes corrections
-and some added material.  Note: the Wallace article is copyright ACM and IEEE,
-and it may not be used for commercial purposes.
-
-A somewhat less technical, more leisurely introduction to JPEG can be found in
-"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
-M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
-good explanations and example C code for a multitude of compression methods
-including JPEG.  It is an excellent source if you are comfortable reading C
-code but don't know much about data compression in general.  The book's JPEG
-sample code is far from industrial-strength, but when you are ready to look
-at a full implementation, you've got one here...
-
-The best full description of JPEG is the textbook "JPEG Still Image Data
-Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
-by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95, 638 pp.
-The book includes the complete text of the ISO JPEG standards (DIS 10918-1
-and draft DIS 10918-2).  This is by far the most complete exposition of JPEG
-in existence, and we highly recommend it.
-
-The JPEG standard itself is not available electronically; you must order a
-paper copy through ISO or ITU.  (Unless you feel a need to own a certified
-official copy, we recommend buying the Pennebaker and Mitchell book instead;
-it's much cheaper and includes a great deal of useful explanatory material.)
-In the USA, copies of the standard may be ordered from ANSI Sales at (212)
-642-4900, or from Global Engineering Documents at (800) 854-7179.  (ANSI
-doesn't take credit card orders, but Global does.)  It's not cheap: as of
-1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
-shipping/handling.  The standard is divided into two parts, Part 1 being the
-actual specification, while Part 2 covers compliance testing methods.  Part 1
-is titled "Digital Compression and Coding of Continuous-tone Still Images,
-Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
-10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
-Continuous-tone Still Images, Part 2: Compliance testing" and has document
-numbers ISO/IEC IS 10918-2, ITU-T T.83.
-
-Some extensions to the original JPEG standard are defined in JPEG Part 3,
-a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84.  IJG
-currently does not support any Part 3 extensions.
-
-The JPEG standard does not specify all details of an interchangeable file
-format.  For the omitted details we follow the "JFIF" conventions, revision
-1.02.  A copy of the JFIF spec is available from:
-	Literature Department
-	C-Cube Microsystems, Inc.
-	1778 McCarthy Blvd.
-	Milpitas, CA 95035
-	phone (408) 944-6300,  fax (408) 944-6314
-A PostScript version of this document is available by FTP at
-ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.  There is also a plain text
-version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
-the figures.
-
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7).  Copies of this Note can be obtained from ftp.sgi.com or
-from ftp://ftp.uu.net/graphics/jpeg/.  It is expected that the next revision
-of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
-Although IJG's own code does not support TIFF/JPEG, the free libtiff library
-uses our library to implement TIFF/JPEG per the Note.  libtiff is available
-from ftp://ftp.sgi.com/graphics/tiff/.
-
-
-ARCHIVE LOCATIONS
-=================
-
-The "official" archive site for this software is ftp.uu.net (Internet
-address 192.48.96.9).  The most recent released version can always be found
-there in directory graphics/jpeg.  This particular version will be archived
-as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz.  If you don't have
-direct Internet access, UUNET's archives are also available via UUCP; contact
-help at uunet.uu.net for information on retrieving files that way.
-
-Numerous Internet sites maintain copies of the UUNET files.  However, only
-ftp.uu.net is guaranteed to have the latest official version.
-
-You can also obtain this software in DOS-compatible "zip" archive format from
-the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
-on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
-"JPEG Tools".  Again, these versions may sometimes lag behind the ftp.uu.net
-release.
-
-The JPEG FAQ (Frequently Asked Questions) article is a useful source of
-general information about JPEG.  It is updated constantly and therefore is
-not included in this distribution.  The FAQ is posted every two weeks to
-Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server at rtfm.mit.edu
-with body
-	send usenet/news.answers/jpeg-faq/part1
-	send usenet/news.answers/jpeg-faq/part2
-
-
-RELATED SOFTWARE
-================
-
-Numerous viewing and image manipulation programs now support JPEG.  (Quite a
-few of them use this library to do so.)  The JPEG FAQ described above lists
-some of the more popular free and shareware viewers, and tells where to
-obtain them on Internet.
-
-If you are on a Unix machine, we highly recommend Jef Poskanzer's free
-PBMPLUS software, which provides many useful operations on PPM-format image
-files.  In particular, it can convert PPM images to and from a wide range of
-other formats, thus making cjpeg/djpeg considerably more useful.  The latest
-version is distributed by the NetPBM group, and is available from numerous
-sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
-Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
-you are likely to have difficulty making it work on any non-Unix machine.
-
-A different free JPEG implementation, written by the PVRG group at Stanford,
-is available from ftp://havefun.stanford.edu/pub/jpeg/.  This program
-is designed for research and experimentation rather than production use;
-it is slower, harder to use, and less portable than the IJG code, but it
-is easier to read and modify.  Also, the PVRG code supports lossless JPEG,
-which we do not.  (On the other hand, it doesn't do progressive JPEG.)
-
-
-FILE FORMAT WARS
-================
-
-Some JPEG programs produce files that are not compatible with our library.
-The root of the problem is that the ISO JPEG committee failed to specify a
-concrete file format.  Some vendors "filled in the blanks" on their own,
-creating proprietary formats that no one else could read.  (For example, none
-of the early commercial JPEG implementations for the Macintosh were able to
-exchange compressed files.)
-
-The file format we have adopted is called JFIF (see REFERENCES).  This format
-has been agreed to by a number of major commercial JPEG vendors, and it has
-become the de facto standard.  JFIF is a minimal or "low end" representation.
-We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
-Technical Note #2) for "high end" applications that need to record a lot of
-additional data about an image.  TIFF/JPEG is fairly new and not yet widely
-supported, unfortunately.
-
-The upcoming JPEG Part 3 standard defines a file format called SPIFF.
-SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
-be able to read the most common variant of SPIFF.  SPIFF has some technical
-advantages over JFIF, but its major claim to fame is simply that it is an
-official standard rather than an informal one.  At this point it is unclear
-whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
-standard.  IJG intends to support SPIFF once the standard is frozen, but we
-have not decided whether it should become our default output format or not.
-(In any case, our decoder will remain capable of reading JFIF indefinitely.)
-
-Various proprietary file formats incorporating JPEG compression also exist.
-We have little or no sympathy for the existence of these formats.  Indeed,
-one of the original reasons for developing this free software was to help
-force convergence on common, open format standards for JPEG files.  Don't
-use a proprietary file format!
-
-
-TO DO
-=====
-
-The major thrust for v7 will probably be improvement of visual quality.
-The current method for scaling the quantization tables is known not to be
-very good at low Q values.  We also intend to investigate block boundary
-smoothing, "poor man's variable quantization", and other means of improving
-quality-vs-file-size performance without sacrificing compatibility.
-
-In future versions, we are considering supporting some of the upcoming JPEG
-Part 3 extensions --- principally, variable quantization and the SPIFF file
-format.
-
-As always, speeding things up is of great interest.
-
-Please send bug reports, offers of help, etc. to jpeg-info at uunet.uu.net.
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.properties b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.properties
deleted file mode 100644
index b1ad110..0000000
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-custom = true
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.xml b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.xml
deleted file mode 100644
index 0d50d37..0000000
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/build.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.swt.photon.qnx.x86" default="build.jars" basedir=".">
-
-	<property name="swt.ws" value="photon" />
-	<property name="swt.os" value="qnx" />
-	<property name="swt.arch" value="x86" />
-	
-	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
-
-	<import file="../org.eclipse.swt/buildFragment.xml"/>
-</project>
diff --git a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/fragment.properties b/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/fragment.properties
deleted file mode 100644
index c5c9aaa..0000000
--- a/eclipse/plugins/org.eclipse.swt.photon.qnx.x86/fragment.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-fragmentName = Standard Widget Toolkit for Photon
-providerName = Eclipse.org
diff --git a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF
index 0fcc182..1365e00 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.win32.wce_ppc.arm; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml
index fafdbc4..e811045 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.win32.wce_ppc.arm/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="arm" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF
index ceec371..2cf3848 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.win32.win32.x86; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml
index fa087fe..1fd26ef 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="x86" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF
index 41e9e9f..420e66e 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)"
 Bundle-Name: %fragmentName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt.win32.win32.x86_64; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: fragment
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml
index b45aeec..e2bcaad 100644
--- a/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml
+++ b/eclipse/plugins/org.eclipse.swt.win32.win32.x86_64/build.xml
@@ -6,7 +6,7 @@
 	<property name="swt.arch" value="x86_64" />
 	
 	<!-- These properties are used by eclipse when exporting as Deployable plugin and fragments -->
-	<property name="version.suffix" value="3.6.2" />
+	<property name="version.suffix" value="3.7.0" />
 	
 	<import file="../org.eclipse.swt/buildFragment.xml"/>
 </project>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/.classpath_carbon b/eclipse/plugins/org.eclipse.swt/.classpath_carbon
index cdb68d6..3a1e478 100644
--- a/eclipse/plugins/org.eclipse.swt/.classpath_carbon
+++ b/eclipse/plugins/org.eclipse.swt/.classpath_carbon
@@ -28,6 +28,7 @@
     <classpathentry kind="src" path="Eclipse SWT Program/carbon"/>
     <classpathentry kind="src" path="Eclipse SWT Browser/common"/>
     <classpathentry kind="src" path="Eclipse SWT Browser/carbon"/>
+    <classpathentry kind="src" path="Eclipse SWT WebKit/carbon"/>
     <classpathentry kind="src" path="Eclipse SWT Mozilla/common"/>
     <classpathentry kind="src" path="Eclipse SWT Mozilla/carbon"/>
     <classpathentry kind="src" path="Eclipse SWT OpenGL/carbon"/>
diff --git a/eclipse/plugins/org.eclipse.swt/.classpath_cocoa b/eclipse/plugins/org.eclipse.swt/.classpath_cocoa
old mode 100644
new mode 100755
index 7ffa753..dc8d373
--- a/eclipse/plugins/org.eclipse.swt/.classpath_cocoa
+++ b/eclipse/plugins/org.eclipse.swt/.classpath_cocoa
@@ -28,6 +28,7 @@
     <classpathentry kind="src" path="Eclipse SWT Program/cocoa"/>
     <classpathentry kind="src" path="Eclipse SWT Browser/common"/>
     <classpathentry kind="src" path="Eclipse SWT Browser/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT WebKit/cocoa"/>
     <classpathentry kind="src" path="Eclipse SWT Mozilla/common"/>
     <classpathentry kind="src" path="Eclipse SWT Mozilla/cocoa"/>
     <classpathentry kind="src" path="Eclipse SWT OpenGL/cocoa"/>
diff --git a/eclipse/plugins/org.eclipse.swt/.classpath_gtk b/eclipse/plugins/org.eclipse.swt/.classpath_gtk
index a455a20..c1e7b94 100644
--- a/eclipse/plugins/org.eclipse.swt/.classpath_gtk
+++ b/eclipse/plugins/org.eclipse.swt/.classpath_gtk
@@ -30,6 +30,7 @@
 	<classpathentry kind="src" path="Eclipse SWT Program/cde"/>
 	<classpathentry kind="src" path="Eclipse SWT Custom Widgets/common"/>
 	<classpathentry kind="src" path="Eclipse SWT Browser/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Browser/gtk"/>
 	<classpathentry kind="src" path="Eclipse SWT Mozilla/common"/>
 	<classpathentry kind="src" path="Eclipse SWT Mozilla/gtk"/>
 	<classpathentry kind="src" path="Eclipse SWT OpenGL/gtk"/>
diff --git a/eclipse/plugins/org.eclipse.swt/.classpath_motif b/eclipse/plugins/org.eclipse.swt/.classpath_motif
old mode 100644
new mode 100755
index 42051eb..7c18c5c
--- a/eclipse/plugins/org.eclipse.swt/.classpath_motif
+++ b/eclipse/plugins/org.eclipse.swt/.classpath_motif
@@ -38,6 +38,7 @@
 	<classpathentry kind="src" path="Eclipse SWT Program/cde"/>
 	<classpathentry kind="src" path="Eclipse SWT Custom Widgets/common"/>
 	<classpathentry kind="src" path="Eclipse SWT Browser/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Browser/motif"/>
 	<classpathentry kind="src" path="Eclipse SWT Mozilla/common"/>
 	<classpathentry kind="src" path="Eclipse SWT Mozilla/motif"/>
 	<classpathentry kind="src" path="Eclipse SWT OpenGL/motif"/>
diff --git a/eclipse/plugins/org.eclipse.swt/.classpath_photon b/eclipse/plugins/org.eclipse.swt/.classpath_photon
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/.classpath_win32 b/eclipse/plugins/org.eclipse.swt/.classpath_win32
old mode 100644
new mode 100755
index a8cdf24..376d930
--- a/eclipse/plugins/org.eclipse.swt/.classpath_win32
+++ b/eclipse/plugins/org.eclipse.swt/.classpath_win32
@@ -27,6 +27,7 @@
 	<classpathentry kind="src" path="Eclipse SWT Browser/win32"/>
 	<classpathentry kind="src" path="Eclipse SWT Mozilla/common"/>
 	<classpathentry kind="src" path="Eclipse SWT Mozilla/win32"/>
+	<classpathentry kind="src" path="Eclipse SWT WebKit/win32"/>
 	<classpathentry kind="src" path="Eclipse SWT OpenGL/win32"/>
 	<classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
 	<classpathentry kind="src" path="Eclipse SWT Theme/win32"/>
diff --git a/eclipse/plugins/org.eclipse.swt/.project_classpath_builder b/eclipse/plugins/org.eclipse.swt/.project_classpath_builder
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/.project_normal b/eclipse/plugins/org.eclipse.swt/.project_normal
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/.settings/.api_filters b/eclipse/plugins/org.eclipse.swt/.settings/.api_filters
index c341e5a..49f59bb 100644
--- a/eclipse/plugins/org.eclipse.swt/.settings/.api_filters
+++ b/eclipse/plugins/org.eclipse.swt/.settings/.api_filters
@@ -1,1318 +1,744 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <component id="org.eclipse.swt" version="2">
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleActionListener.java" type="org.eclipse.swt.accessibility.AccessibleActionListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleActionListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeListener.java" type="org.eclipse.swt.accessibility.AccessibleAttributeListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleAttributeListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleControlListener.java" type="org.eclipse.swt.accessibility.AccessibleControlListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleControlListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleHyperlinkListener.java" type="org.eclipse.swt.accessibility.AccessibleHyperlinkListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleHyperlinkListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleListener.java" type="org.eclipse.swt.accessibility.AccessibleListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableCellListener.java" type="org.eclipse.swt.accessibility.AccessibleTableCellListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleTableCellListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableListener.java" type="org.eclipse.swt.accessibility.AccessibleTableListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleTableListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextExtendedListener.java" type="org.eclipse.swt.accessibility.AccessibleTextExtendedListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleTextExtendedListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextListener.java" type="org.eclipse.swt.accessibility.AccessibleTextListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleTextListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleValueListener.java" type="org.eclipse.swt.accessibility.AccessibleValueListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AccessibleValueListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java" type="org.eclipse.swt.accessibility.Accessible">
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.accessibility.Accessible"/>
-                <message_argument value="internal_dispose_Accessible()"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.accessibility.Accessible"/>
-                <message_argument value="internal_new_Accessible(Control)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.accessibility.Accessible"/>
-                <message_argument value="internal_WM_GETOBJECT(int, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationListener.java" type="org.eclipse.swt.browser.AuthenticationListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="AuthenticationListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java" type="org.eclipse.swt.browser.Browser">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.browser.Browser"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/CloseWindowListener.java" type="org.eclipse.swt.browser.CloseWindowListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="CloseWindowListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/LocationListener.java" type="org.eclipse.swt.browser.LocationListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="LocationListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/OpenWindowListener.java" type="org.eclipse.swt.browser.OpenWindowListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="OpenWindowListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/ProgressListener.java" type="org.eclipse.swt.browser.ProgressListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ProgressListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/StatusTextListener.java" type="org.eclipse.swt.browser.StatusTextListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="StatusTextListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/TitleListener.java" type="org.eclipse.swt.browser.TitleListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="TitleListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/VisibilityWindowListener.java" type="org.eclipse.swt.browser.VisibilityWindowListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="VisibilityWindowListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/BidiSegmentListener.java" type="org.eclipse.swt.custom.BidiSegmentListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="BidiSegmentListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CBanner.java" type="org.eclipse.swt.custom.CBanner">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.custom.CBanner"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CLabel.java" type="org.eclipse.swt.custom.CLabel">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.custom.CLabel"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java" type="org.eclipse.swt.custom.CTabFolder">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.custom.CTabFolder"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder2Listener.java" type="org.eclipse.swt.custom.CTabFolder2Listener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="CTabFolder2Listener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderListener.java" type="org.eclipse.swt.custom.CTabFolderListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="CTabFolderListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java" type="org.eclipse.swt.custom.CTabItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.custom.CTabItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretListener.java" type="org.eclipse.swt.custom.CaretListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="CaretListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ExtendedModifyListener.java" type="org.eclipse.swt.custom.ExtendedModifyListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ExtendedModifyListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineBackgroundListener.java" type="org.eclipse.swt.custom.LineBackgroundListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="LineBackgroundListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineStyleListener.java" type="org.eclipse.swt.custom.LineStyleListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="LineStyleListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementListener.java" type="org.eclipse.swt.custom.MovementListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="MovementListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/PaintObjectListener.java" type="org.eclipse.swt.custom.PaintObjectListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="PaintObjectListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyleRange.java" type="org.eclipse.swt.custom.StyleRange">
-        <filter id="576725006">
-            <message_arguments>
-                <message_argument value="CloneableCompatibility"/>
-                <message_argument value="StyleRange"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java" type="org.eclipse.swt.custom.StyledText">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.custom.StyledText"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangeListener.java" type="org.eclipse.swt.custom.TextChangeListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="TextChangeListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/VerifyKeyListener.java" type="org.eclipse.swt.custom.VerifyKeyListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="VerifyKeyListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ViewForm.java" type="org.eclipse.swt.custom.ViewForm">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.custom.ViewForm"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceListener.java" type="org.eclipse.swt.dnd.DragSourceListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="DragSourceListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetListener.java" type="org.eclipse.swt.dnd.DropTargetListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="DropTargetListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/Clipboard.java" type="org.eclipse.swt.dnd.Clipboard">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.Clipboard"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DragSource.java" type="org.eclipse.swt.dnd.DragSource">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.DragSource"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java" type="org.eclipse.swt.dnd.DropTarget">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.DropTarget"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TransferData.java" type="org.eclipse.swt.dnd.TransferData">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.TransferData"/>
-                <message_argument value="pIDataObject"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.TransferData"/>
-                <message_argument value="type"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.TransferData"/>
-                <message_argument value="stgmedium"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.TransferData"/>
-                <message_argument value="result"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.dnd.TransferData"/>
-                <message_argument value="formatetc"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleClientSite.java" type="org.eclipse.swt.ole.win32.OleClientSite">
-        <filter id="338948223">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.ole.win32.OleClientSite"/>
-                <message_argument value="OleClientSite(Composite, int, String, File)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java" type="org.eclipse.swt.ole.win32.OleControlSite">
-        <filter id="338948223">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.ole.win32.OleControlSite"/>
-                <message_argument value="OleControlSite(Composite, int, String, File)"/>
-            </message_arguments>
-        </filter>
-        <filter id="1227882500">
-            <message_arguments>
-                <message_argument value="OnUIDeactivate(int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/Variant.java" type="org.eclipse.swt.ole.win32.Variant">
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.ole.win32.Variant"/>
-                <message_argument value="win32_new(int)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.ole.win32.Variant"/>
-                <message_argument value="win32_copy(int, Variant)"/>
-            </message_arguments>
-        </filter>
-        <filter id="389242988">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.ole.win32.Variant"/>
-                <message_argument value="sizeof"/>
-                <message_argument value="16"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java" type="org.eclipse.swt.printing.PrintDialog">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.printing.PrintDialog"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java" type="org.eclipse.swt.printing.Printer">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.printing.Printer"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.printing.Printer"/>
-                <message_argument value="internal_new_GC(GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.printing.Printer"/>
-                <message_argument value="internal_dispose_GC(int, GCData)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/ArmListener.java" type="org.eclipse.swt.events.ArmListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ArmListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/ControlListener.java" type="org.eclipse.swt.events.ControlListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ControlListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/DisposeListener.java" type="org.eclipse.swt.events.DisposeListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="DisposeListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/DragDetectListener.java" type="org.eclipse.swt.events.DragDetectListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="DragDetectListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/ExpandListener.java" type="org.eclipse.swt.events.ExpandListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ExpandListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/FocusListener.java" type="org.eclipse.swt.events.FocusListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="FocusListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/HelpListener.java" type="org.eclipse.swt.events.HelpListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="HelpListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/KeyListener.java" type="org.eclipse.swt.events.KeyListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="KeyListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/MenuDetectListener.java" type="org.eclipse.swt.events.MenuDetectListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="MenuDetectListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/MenuListener.java" type="org.eclipse.swt.events.MenuListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="MenuListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/ModifyListener.java" type="org.eclipse.swt.events.ModifyListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ModifyListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseListener.java" type="org.eclipse.swt.events.MouseListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="MouseListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseMoveListener.java" type="org.eclipse.swt.events.MouseMoveListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="MouseMoveListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseTrackListener.java" type="org.eclipse.swt.events.MouseTrackListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="MouseTrackListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseWheelListener.java" type="org.eclipse.swt.events.MouseWheelListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="MouseWheelListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/PaintListener.java" type="org.eclipse.swt.events.PaintListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="PaintListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/SelectionListener.java" type="org.eclipse.swt.events.SelectionListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="SelectionListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/ShellListener.java" type="org.eclipse.swt.events.ShellListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ShellListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/TraverseListener.java" type="org.eclipse.swt.events.TraverseListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="TraverseListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/TreeListener.java" type="org.eclipse.swt.events.TreeListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="TreeListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/events/VerifyListener.java" type="org.eclipse.swt.events.VerifyListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="VerifyListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/graphics/Drawable.java" type="org.eclipse.swt.graphics.Drawable">
-        <filter id="406052990">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Drawable"/>
-                <message_argument value="internal_new_GC(GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="406052990">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Drawable"/>
-                <message_argument value="internal_dispose_GC(int, GCData)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java" type="org.eclipse.swt.graphics.ImageData">
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.ImageData"/>
-                <message_argument value="internal_new(int, int, int, PaletteData, int, byte[], int, byte[], byte[], int, int, int, int, int, int, int)"/>
-            </message_arguments>
-        </filter>
-        <filter id="576725006">
-            <message_arguments>
-                <message_argument value="CloneableCompatibility"/>
-                <message_argument value="ImageData"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoaderListener.java" type="org.eclipse.swt.graphics.ImageLoaderListener">
-        <filter id="576720909">
-            <message_arguments>
-                <message_argument value="SWTEventListener"/>
-                <message_argument value="ImageLoaderListener"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/graphics/Point.java" type="org.eclipse.swt.graphics.Point">
-        <filter id="576725006">
-            <message_arguments>
-                <message_argument value="SerializableCompatibility"/>
-                <message_argument value="Point"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/graphics/RGB.java" type="org.eclipse.swt.graphics.RGB">
-        <filter id="576725006">
-            <message_arguments>
-                <message_argument value="SerializableCompatibility"/>
-                <message_argument value="RGB"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/graphics/Rectangle.java" type="org.eclipse.swt.graphics.Rectangle">
-        <filter id="576725006">
-            <message_arguments>
-                <message_argument value="SerializableCompatibility"/>
-                <message_argument value="Rectangle"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/widgets/Tray.java" type="org.eclipse.swt.widgets.Tray">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Tray"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/common/org/eclipse/swt/widgets/TypedListener.java" type="org.eclipse.swt.widgets.TypedListener">
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TypedListener"/>
-                <message_argument value="getEventListener()"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TypedListener"/>
-                <message_argument value="handleEvent(Event)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338948223">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TypedListener"/>
-                <message_argument value="TypedListener(SWTEventListener)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java" type="org.eclipse.swt.graphics.Color">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Color"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Color"/>
-                <message_argument value="win32_new(Device, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java" type="org.eclipse.swt.graphics.Cursor">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Cursor"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Cursor"/>
-                <message_argument value="win32_new(Device, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java" type="org.eclipse.swt.graphics.Device">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Device"/>
-                <message_argument value="hPalette"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Device"/>
-                <message_argument value="internal_dispose_GC(int, GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Device"/>
-                <message_argument value="internal_new_GC(GCData)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java" type="org.eclipse.swt.graphics.Font">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Font"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Font"/>
-                <message_argument value="win32_new(Device, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java" type="org.eclipse.swt.graphics.FontData">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.FontData"/>
-                <message_argument value="data"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.FontData"/>
-                <message_argument value="height"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.FontData"/>
-                <message_argument value="win32_new(LOGFONT, float)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/FontMetrics.java" type="org.eclipse.swt.graphics.FontMetrics">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.FontMetrics"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.FontMetrics"/>
-                <message_argument value="win32_new(TEXTMETRIC)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java" type="org.eclipse.swt.graphics.GC">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.GC"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.GC"/>
-                <message_argument value="win32_new(int, GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.GC"/>
-                <message_argument value="win32_new(Drawable, GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.GC"/>
-                <message_argument value="getGCData()"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/GCData.java" type="org.eclipse.swt.graphics.GCData">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.GCData"/>
-            </message_arguments>
-        </filter>
-        <filter id="338755678">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.GCData"/>
-                <message_argument value="hFont"/>
-            </message_arguments>
-        </filter>
-        <filter id="1143996420">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.GCData"/>
-            </message_arguments>
-        </filter>
-        <filter id="1143996420">
-            <message_arguments>
-                <message_argument value="hGDIFont"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java" type="org.eclipse.swt.graphics.Image">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Image"/>
-                <message_argument value="type"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Image"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Image"/>
-                <message_argument value="internal_dispose_GC(int, GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Image"/>
-                <message_argument value="internal_new_GC(GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Image"/>
-                <message_argument value="win32_new(Device, int, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Path.java" type="org.eclipse.swt.graphics.Path">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Path"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Pattern.java" type="org.eclipse.swt.graphics.Pattern">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Pattern"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Region.java" type="org.eclipse.swt.graphics.Region">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Region"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Region"/>
-                <message_argument value="win32_new(Device, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/Transform.java" type="org.eclipse.swt.graphics.Transform">
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.graphics.Transform"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java" type="org.eclipse.swt.widgets.Button">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Button"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java" type="org.eclipse.swt.widgets.Caret">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Caret"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ColorDialog.java" type="org.eclipse.swt.widgets.ColorDialog">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ColorDialog"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java" type="org.eclipse.swt.widgets.Combo">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Combo"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java" type="org.eclipse.swt.widgets.Control">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Control"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Control"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Control"/>
-                <message_argument value="internal_dispose_GC(int, GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Control"/>
-                <message_argument value="internal_new_GC(GCData)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/CoolBar.java" type="org.eclipse.swt.widgets.CoolBar">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.CoolBar"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/CoolItem.java" type="org.eclipse.swt.widgets.CoolItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.CoolItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java" type="org.eclipse.swt.widgets.DateTime">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.DateTime"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Decorations.java" type="org.eclipse.swt.widgets.Decorations">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Decorations"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/DirectoryDialog.java" type="org.eclipse.swt.widgets.DirectoryDialog">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.DirectoryDialog"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java" type="org.eclipse.swt.widgets.Display">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Display"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Display"/>
-                <message_argument value="msg"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Display"/>
-                <message_argument value="internal_dispose_GC(int, GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Display"/>
-                <message_argument value="findWidget(int)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Display"/>
-                <message_argument value="internal_new_GC(GCData)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Display"/>
-                <message_argument value="findWidget(int, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandBar.java" type="org.eclipse.swt.widgets.ExpandBar">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ExpandBar"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandItem.java" type="org.eclipse.swt.widgets.ExpandItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ExpandItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/FileDialog.java" type="org.eclipse.swt.widgets.FileDialog">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.FileDialog"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/FontDialog.java" type="org.eclipse.swt.widgets.FontDialog">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.FontDialog"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Group.java" type="org.eclipse.swt.widgets.Group">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Group"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java" type="org.eclipse.swt.widgets.IME">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.IME"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Label.java" type="org.eclipse.swt.widgets.Label">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Label"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Link.java" type="org.eclipse.swt.widgets.Link">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Link"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/List.java" type="org.eclipse.swt.widgets.List">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.List"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java" type="org.eclipse.swt.widgets.Menu">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Menu"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Menu"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java" type="org.eclipse.swt.widgets.MenuItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.MenuItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/MessageBox.java" type="org.eclipse.swt.widgets.MessageBox">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.MessageBox"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ProgressBar.java" type="org.eclipse.swt.widgets.ProgressBar">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ProgressBar"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Sash.java" type="org.eclipse.swt.widgets.Sash">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Sash"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Scale.java" type="org.eclipse.swt.widgets.Scale">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Scale"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ScrollBar.java" type="org.eclipse.swt.widgets.ScrollBar">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ScrollBar"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Scrollable.java" type="org.eclipse.swt.widgets.Scrollable">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Scrollable"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java" type="org.eclipse.swt.widgets.Shell">
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Shell"/>
-                <message_argument value="win32_new(Display, int)"/>
-            </message_arguments>
-        </filter>
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Shell"/>
-                <message_argument value="internal_new(Display, int)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Slider.java" type="org.eclipse.swt.widgets.Slider">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Slider"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java" type="org.eclipse.swt.widgets.Spinner">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Spinner"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TabFolder.java" type="org.eclipse.swt.widgets.TabFolder">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TabFolder"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TabItem.java" type="org.eclipse.swt.widgets.TabItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TabItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java" type="org.eclipse.swt.widgets.Table">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Table"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TableColumn.java" type="org.eclipse.swt.widgets.TableColumn">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TableColumn"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java" type="org.eclipse.swt.widgets.TableItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TableItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Text.java" type="org.eclipse.swt.widgets.Text">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Text"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ToolBar.java" type="org.eclipse.swt.widgets.ToolBar">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ToolBar"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ToolItem.java" type="org.eclipse.swt.widgets.ToolItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ToolItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ToolTip.java" type="org.eclipse.swt.widgets.ToolTip">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.ToolTip"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java" type="org.eclipse.swt.widgets.Tracker">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Tracker"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java" type="org.eclipse.swt.widgets.TrayItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TrayItem"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java" type="org.eclipse.swt.widgets.Tree">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Tree"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TreeColumn.java" type="org.eclipse.swt.widgets.TreeColumn">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TreeColumn"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java" type="org.eclipse.swt.widgets.TreeItem">
-        <filter id="336744520">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TreeItem"/>
-            </message_arguments>
-        </filter>
-        <filter id="338940029">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.TreeItem"/>
-                <message_argument value="handle"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java" type="org.eclipse.swt.widgets.Widget">
-        <filter id="338944126">
-            <message_arguments>
-                <message_argument value="org.eclipse.swt.widgets.Widget"/>
-                <message_argument value="removeListener(int, SWTEventListener)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="META-INF/MANIFEST.MF">
-        <filter id="923795461">
-            <message_arguments>
-                <message_argument value="3.6.0.qualifier"/>
-                <message_argument value="3.5.2.v3557f"/>
-            </message_arguments>
-        </filter>
-    </resource>
+<resource path="Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java" type="org.eclipse.swt.accessibility.Accessible">
+<filter id="643842064">
+<message_arguments>
+<message_argument value="NSArray"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityActionNames(int)"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="NSArray"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityAttributeNames(int)"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="NSArray"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityParameterizedAttributeNames(int)"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="id"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityActionDescription(NSString, int)"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="id"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityAttributeValue(NSString, int)"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="id"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityAttributeValue_forParameter(NSString, id, int)"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="id"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityFocusedUIElement(int)"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="id"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityHitTest(NSPoint, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="NSPoint"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityHitTest(NSPoint, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="NSString"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityActionDescription(NSString, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="NSString"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityAttributeValue(NSString, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="NSString"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityAttributeValue_forParameter(NSString, id, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="NSString"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityIsAttributeSettable(NSString, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="NSString"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityPerformAction(NSString, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="NSString"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilitySetValue_forAttribute(id, NSString, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="id"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilityAttributeValue_forParameter(NSString, id, int)"/>
+</message_arguments>
+</filter>
+<filter id="643846161">
+<message_arguments>
+<message_argument value="id"/>
+<message_argument value="Accessible"/>
+<message_argument value="internal_accessibilitySetValue_forAttribute(id, NSString, int)"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleActionListener.java" type="org.eclipse.swt.accessibility.AccessibleActionListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleActionListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeListener.java" type="org.eclipse.swt.accessibility.AccessibleAttributeListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleAttributeListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleControlListener.java" type="org.eclipse.swt.accessibility.AccessibleControlListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleControlListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextListener.java" type="org.eclipse.swt.accessibility.AccessibleEditableTextListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleEditableTextListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleHyperlinkListener.java" type="org.eclipse.swt.accessibility.AccessibleHyperlinkListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleHyperlinkListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleListener.java" type="org.eclipse.swt.accessibility.AccessibleListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableCellListener.java" type="org.eclipse.swt.accessibility.AccessibleTableCellListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleTableCellListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableListener.java" type="org.eclipse.swt.accessibility.AccessibleTableListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleTableListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextListener.java" type="org.eclipse.swt.accessibility.AccessibleTextListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleTextListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleValueListener.java" type="org.eclipse.swt.accessibility.AccessibleValueListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleValueListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationListener.java" type="org.eclipse.swt.browser.AuthenticationListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AuthenticationListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/CloseWindowListener.java" type="org.eclipse.swt.browser.CloseWindowListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CloseWindowListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/LocationListener.java" type="org.eclipse.swt.browser.LocationListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="LocationListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/OpenWindowListener.java" type="org.eclipse.swt.browser.OpenWindowListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="OpenWindowListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/ProgressListener.java" type="org.eclipse.swt.browser.ProgressListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ProgressListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/StatusTextListener.java" type="org.eclipse.swt.browser.StatusTextListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="StatusTextListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/TitleListener.java" type="org.eclipse.swt.browser.TitleListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TitleListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/VisibilityWindowListener.java" type="org.eclipse.swt.browser.VisibilityWindowListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="VisibilityWindowListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/BidiSegmentListener.java" type="org.eclipse.swt.custom.BidiSegmentListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="BidiSegmentListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder2Listener.java" type="org.eclipse.swt.custom.CTabFolder2Listener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CTabFolder2Listener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderListener.java" type="org.eclipse.swt.custom.CTabFolderListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CTabFolderListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretListener.java" type="org.eclipse.swt.custom.CaretListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CaretListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ExtendedModifyListener.java" type="org.eclipse.swt.custom.ExtendedModifyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ExtendedModifyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineBackgroundListener.java" type="org.eclipse.swt.custom.LineBackgroundListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="LineBackgroundListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineStyleListener.java" type="org.eclipse.swt.custom.LineStyleListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="LineStyleListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementListener.java" type="org.eclipse.swt.custom.MovementListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MovementListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/PaintObjectListener.java" type="org.eclipse.swt.custom.PaintObjectListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="PaintObjectListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyleRange.java" type="org.eclipse.swt.custom.StyleRange">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="CloneableCompatibility"/>
+<message_argument value="StyleRange"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangeListener.java" type="org.eclipse.swt.custom.TextChangeListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TextChangeListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/VerifyKeyListener.java" type="org.eclipse.swt.custom.VerifyKeyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="VerifyKeyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceListener.java" type="org.eclipse.swt.dnd.DragSourceListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DragSourceListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetListener.java" type="org.eclipse.swt.dnd.DropTargetListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DropTargetListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java" type="org.eclipse.swt.browser.WebKit">
+<filter id="305365105">
+<message_arguments>
+<message_argument value="org.eclipse.swt.browser.WebKit"/>
+<message_argument value="org.eclipse.swt_3.7.0"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/cocoa/org/eclipse/swt/graphics/GCData.java" type="org.eclipse.swt.graphics.GCData">
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSAffineTransform"/>
+<message_argument value="GCData"/>
+<message_argument value="inverseTransform"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSAffineTransform"/>
+<message_argument value="GCData"/>
+<message_argument value="transform"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSBezierPath"/>
+<message_argument value="GCData"/>
+<message_argument value="clipPath"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSBezierPath"/>
+<message_argument value="GCData"/>
+<message_argument value="path"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSBezierPath"/>
+<message_argument value="GCData"/>
+<message_argument value="visiblePath"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSColor"/>
+<message_argument value="GCData"/>
+<message_argument value="bg"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSColor"/>
+<message_argument value="GCData"/>
+<message_argument value="fg"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSGraphicsContext"/>
+<message_argument value="GCData"/>
+<message_argument value="flippedContext"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSLayoutManager"/>
+<message_argument value="GCData"/>
+<message_argument value="layoutManager"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSRect"/>
+<message_argument value="GCData"/>
+<message_argument value="paintRect"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSSize"/>
+<message_argument value="GCData"/>
+<message_argument value="size"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSTextContainer"/>
+<message_argument value="GCData"/>
+<message_argument value="textContainer"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSTextStorage"/>
+<message_argument value="GCData"/>
+<message_argument value="textStorage"/>
+</message_arguments>
+</filter>
+<filter id="627060751">
+<message_arguments>
+<message_argument value="NSView"/>
+<message_argument value="GCData"/>
+<message_argument value="view"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java" type="org.eclipse.swt.widgets.Widget">
+<filter id="643846161">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="Widget"/>
+<message_argument value="removeListener(int, SWTEventListener)"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ArmListener.java" type="org.eclipse.swt.events.ArmListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ArmListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ControlListener.java" type="org.eclipse.swt.events.ControlListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ControlListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/DisposeListener.java" type="org.eclipse.swt.events.DisposeListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DisposeListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/DragDetectListener.java" type="org.eclipse.swt.events.DragDetectListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DragDetectListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ExpandListener.java" type="org.eclipse.swt.events.ExpandListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ExpandListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/FocusListener.java" type="org.eclipse.swt.events.FocusListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="FocusListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/GestureListener.java" type="org.eclipse.swt.events.GestureListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="GestureListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/HelpListener.java" type="org.eclipse.swt.events.HelpListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="HelpListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/KeyListener.java" type="org.eclipse.swt.events.KeyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="KeyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MenuDetectListener.java" type="org.eclipse.swt.events.MenuDetectListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MenuDetectListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MenuListener.java" type="org.eclipse.swt.events.MenuListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MenuListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ModifyListener.java" type="org.eclipse.swt.events.ModifyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ModifyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseListener.java" type="org.eclipse.swt.events.MouseListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseMoveListener.java" type="org.eclipse.swt.events.MouseMoveListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseMoveListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseTrackListener.java" type="org.eclipse.swt.events.MouseTrackListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseTrackListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseWheelListener.java" type="org.eclipse.swt.events.MouseWheelListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseWheelListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/PaintListener.java" type="org.eclipse.swt.events.PaintListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="PaintListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/SelectionListener.java" type="org.eclipse.swt.events.SelectionListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="SelectionListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ShellListener.java" type="org.eclipse.swt.events.ShellListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ShellListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/TouchListener.java" type="org.eclipse.swt.events.TouchListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TouchListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/TraverseListener.java" type="org.eclipse.swt.events.TraverseListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TraverseListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/TreeListener.java" type="org.eclipse.swt.events.TreeListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TreeListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/VerifyListener.java" type="org.eclipse.swt.events.VerifyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="VerifyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java" type="org.eclipse.swt.graphics.ImageData">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="CloneableCompatibility"/>
+<message_argument value="ImageData"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoaderListener.java" type="org.eclipse.swt.graphics.ImageLoaderListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ImageLoaderListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/Point.java" type="org.eclipse.swt.graphics.Point">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="SerializableCompatibility"/>
+<message_argument value="Point"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/RGB.java" type="org.eclipse.swt.graphics.RGB">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="SerializableCompatibility"/>
+<message_argument value="RGB"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/Rectangle.java" type="org.eclipse.swt.graphics.Rectangle">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="SerializableCompatibility"/>
+<message_argument value="Rectangle"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/widgets/TypedListener.java" type="org.eclipse.swt.widgets.TypedListener">
+<filter id="627060751">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TypedListener"/>
+<message_argument value="eventListener"/>
+</message_arguments>
+</filter>
+<filter id="643842064">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TypedListener"/>
+<message_argument value="getEventListener()"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java" type="org.eclipse.swt.widgets.Shell">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Shell"/>
+</message_arguments>
+</filter>
+</resource>
 </component>
diff --git a/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs
index d93e94b..45a9b43 100644
--- a/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs
@@ -5,4 +5,5 @@ org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs b/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs
index c87951d..da97d42 100644
--- a/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs
+++ b/eclipse/plugins/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs
@@ -1,4 +1,4 @@
-#Tue Apr 20 10:20:28 EDT 2010
+#Thu May 19 10:34:03 EDT 2011
 ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
 ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
 ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
@@ -8,6 +8,9 @@ API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
 API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Error
 API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
 API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
 CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
 CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
 CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
@@ -59,7 +62,7 @@ INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
 INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
 INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
 INVALID_JAVADOC_TAG=Ignore
-INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Warning
 LEAK_EXTEND=Warning
 LEAK_FIELD_DECL=Warning
 LEAK_IMPLEMENT=Warning
@@ -81,7 +84,7 @@ TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
 TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
 TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
 TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
-UNUSED_PROBLEM_FILTERS=Warning
+UNUSED_PROBLEM_FILTERS=Ignore
 automatically_removed_unused_problem_filters=false
 eclipse.preferences.version=1
 incompatible_api_component_version=Error
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java
old mode 100644
new mode 100755
index 08b8e4a..00ba391
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,231 +83,231 @@ public class SWT_AWT {
 		} catch (Throwable e) {}
 	}
 	
-	/**
-	 * Returns a <code>java.awt.Frame</code> which is the embedded frame
-	 * associated with the specified composite.
-	 * 
-	 * @param parent the parent <code>Composite</code> of the <code>java.awt.Frame</code>
-	 * @return a <code>java.awt.Frame</code> the embedded frame or <code>null</code>.
-	 * 
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-	 * </ul>
-	 * 
-	 * @since 3.2
-	 */
-	public static Frame getFrame(Composite parent) {
-		if (parent == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if ((parent.getStyle() & SWT.EMBEDDED) == 0) return null;
-		return (Frame) parent.getData(EMBEDDED_FRAME_KEY);
+/**
+ * Returns a <code>java.awt.Frame</code> which is the embedded frame
+ * associated with the specified composite.
+ * 
+ * @param parent the parent <code>Composite</code> of the <code>java.awt.Frame</code>
+ * @return a <code>java.awt.Frame</code> the embedded frame or <code>null</code>.
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public static Frame getFrame(Composite parent) {
+	if (parent == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if ((parent.getStyle() & SWT.EMBEDDED) == 0) return null;
+	return (Frame) parent.getData(EMBEDDED_FRAME_KEY);
+}
+	
+/**
+ * Creates a new <code>java.awt.Frame</code>. This frame is the root for
+ * the AWT components that will be embedded within the composite. In order
+ * for the embedding to succeed, the composite must have been created
+ * with the SWT.EMBEDDED style.
+ * <p>
+ * IMPORTANT: As of JDK1.5, the embedded frame does not receive mouse events.
+ * When a lightweight component is added as a child of the embedded frame,
+ * the cursor does not change. In order to work around both these problems, it is
+ * strongly recommended that a heavyweight component such as <code>java.awt.Panel</code>
+ * be added to the frame as the root of all components.
+ * </p>
+ * 
+ * @param parent the parent <code>Composite</code> of the new <code>java.awt.Frame</code>
+ * @return a <code>java.awt.Frame</code> to be the parent of the embedded AWT components
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent Composite does not have the SWT.EMBEDDED style</li> 
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public static Frame new_Frame(final Composite parent) {
+	if (parent == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if ((parent.getStyle() & SWT.EMBEDDED) == 0) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
 	}
 	
-	/**
-	 * Creates a new <code>java.awt.Frame</code>. This frame is the root for
-	 * the AWT components that will be embedded within the composite. In order
-	 * for the embedding to succeed, the composite must have been created
-	 * with the SWT.EMBEDDED style.
-	 * <p>
-	 * IMPORTANT: As of JDK1.5, the embedded frame does not receive mouse events.
-	 * When a lightweight component is added as a child of the embedded frame,
-	 * the cursor does not change. In order to work around both these problems, it is
-	 * strongly recommended that a heavyweight component such as <code>java.awt.Panel</code>
-	 * be added to the frame as the root of all components.
-	 * </p>
-	 * 
-	 * @param parent the parent <code>Composite</code> of the new <code>java.awt.Frame</code>
-	 * @return a <code>java.awt.Frame</code> to be the parent of the embedded AWT components
-	 * 
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-	 *    <li>ERROR_INVALID_ARGUMENT - if the parent Composite does not have the SWT.EMBEDDED style</li> 
-	 * </ul>
-	 * 
-	 * @since 3.0
-	 */
-	public static Frame new_Frame(final Composite parent) {
-		if (parent == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if ((parent.getStyle() & SWT.EMBEDDED) == 0) {
-			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	final int /*long*/ handle = parent.view.id;
+	
+	Class clazz = null;
+	try {
+		String className = embeddedFrameClass != null ? embeddedFrameClass : "apple.awt.CEmbeddedFrame";
+		if (embeddedFrameClass == null) {
+			clazz = Class.forName(className, true, ClassLoader.getSystemClassLoader());
+		} else {
+			clazz = Class.forName(className);
 		}
-		
-		final int /*long*/ handle = parent.view.id;
-		
-		Class clazz = null;
-		try {
-			String className = embeddedFrameClass != null ? embeddedFrameClass : "apple.awt.CEmbeddedFrame";
-			if (embeddedFrameClass == null) {
-				clazz = Class.forName(className, true, ClassLoader.getSystemClassLoader());
-			} else {
-				clazz = Class.forName(className);
+	} catch (ClassNotFoundException cne) {
+		SWT.error (SWT.ERROR_NOT_IMPLEMENTED, cne);		
+	} catch (Throwable e) {
+		SWT.error (SWT.ERROR_UNSPECIFIED , e, " [Error while starting AWT]");		
+	}
+	
+	initializeSwing();
+	Object value = null;
+	Constructor constructor = null;
+	try {
+		constructor = clazz.getConstructor (new Class [] {long.class});
+		value = constructor.newInstance (new Object [] {new Long(handle)});
+	} catch (Throwable e) {
+		SWT.error(SWT.ERROR_NOT_IMPLEMENTED, e);
+	}
+	final Frame frame = (Frame) value;
+	frame.addNotify();
+	
+	parent.setData(EMBEDDED_FRAME_KEY, frame);
+	
+	/* Forward the iconify and deiconify events */
+	final Listener shellListener = new Listener () {
+		public void handleEvent (Event e) {
+			switch (e.type) {
+				case SWT.Deiconify:
+					EventQueue.invokeLater(new Runnable () {
+						public void run () {
+							frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_DEICONIFIED));
+						}
+					});
+					break;
+				case SWT.Iconify:
+					EventQueue.invokeLater(new Runnable () {
+						public void run () {
+							frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_ICONIFIED));
+						}
+					});
+					break;
 			}
-		} catch (ClassNotFoundException cne) {
-			SWT.error (SWT.ERROR_NOT_IMPLEMENTED, cne);		
-		} catch (Throwable e) {
-			SWT.error (SWT.ERROR_UNSPECIFIED , e, " [Error while starting AWT]");		
-		}
-		
-		initializeSwing();
-		Object value = null;
-		Constructor constructor = null;
-		try {
-			constructor = clazz.getConstructor (new Class [] {long.class});
-			value = constructor.newInstance (new Object [] {new Long(handle)});
-		} catch (Throwable e) {
-			SWT.error(SWT.ERROR_NOT_IMPLEMENTED, e);
 		}
-		final Frame frame = (Frame) value;
-		frame.addNotify();
-		
-		parent.setData(EMBEDDED_FRAME_KEY, frame);
-		
-		/* Forward the iconify and deiconify events */
-		final Listener shellListener = new Listener () {
-			public void handleEvent (Event e) {
-				switch (e.type) {
-					case SWT.Deiconify:
-						EventQueue.invokeLater(new Runnable () {
-							public void run () {
-								frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_DEICONIFIED));
-							}
-						});
-						break;
-					case SWT.Iconify:
-						EventQueue.invokeLater(new Runnable () {
-							public void run () {
-								frame.dispatchEvent (new WindowEvent (frame, WindowEvent.WINDOW_ICONIFIED));
-							}
-						});
-						break;
-				}
+	};
+	Shell shell = parent.getShell ();
+	shell.addListener (SWT.Deiconify, shellListener);
+	shell.addListener (SWT.Iconify, shellListener);
+	
+	/*
+	 * Generate the appropriate events to activate and deactivate
+	 * the embedded frame. This is needed in order to make keyboard
+	 * focus work properly for lightweights.
+	 */
+	Listener listener = new Listener () {
+		public void handleEvent (Event e) {
+			switch (e.type) {
+				case SWT.Dispose:
+					Shell shell = parent.getShell ();
+					shell.removeListener (SWT.Deiconify, shellListener);
+					shell.removeListener (SWT.Iconify, shellListener);
+					parent.setVisible(false);
+					EventQueue.invokeLater(new Runnable () {
+						public void run () {
+							try {
+								frame.dispose ();
+							} catch (Throwable e) {}
+						}
+					});
+					break;
+				case SWT.FocusIn:
+					EventQueue.invokeLater(new Runnable () {
+						public void run () {
+							if (frame.isActive()) return;
+							try {
+								Class clazz = frame.getClass();
+								Method method = clazz.getMethod("synthesizeWindowActivation", new Class[]{boolean.class});
+								if (method != null) method.invoke(frame, new Object[]{new Boolean(true)});
+							} catch (Throwable e) {e.printStackTrace();}
+						}
+					});
+					break;
+				case SWT.Deactivate:
+					EventQueue.invokeLater(new Runnable () {
+						public void run () {
+							if (!frame.isActive()) return;
+							try {
+								Class clazz = frame.getClass();
+								Method method = clazz.getMethod("synthesizeWindowActivation", new Class[]{boolean.class});
+								if (method != null) method.invoke(frame, new Object[]{new Boolean(false)});
+							} catch (Throwable e) {e.printStackTrace();}
+						}
+					});
+					break;
 			}
-		};
-		Shell shell = parent.getShell ();
-		shell.addListener (SWT.Deiconify, shellListener);
-		shell.addListener (SWT.Iconify, shellListener);
-		
-		/*
-		 * Generate the appropriate events to activate and deactivate
-		 * the embedded frame. This is needed in order to make keyboard
-		 * focus work properly for lightweights.
-		 */
-		Listener listener = new Listener () {
-			public void handleEvent (Event e) {
-				switch (e.type) {
-					case SWT.Dispose:
-						Shell shell = parent.getShell ();
-						shell.removeListener (SWT.Deiconify, shellListener);
-						shell.removeListener (SWT.Iconify, shellListener);
-						parent.setVisible(false);
-						EventQueue.invokeLater(new Runnable () {
-							public void run () {
-								try {
-									frame.dispose ();
-								} catch (Throwable e) {}
-							}
-						});
-						break;
-					case SWT.FocusIn:
-						EventQueue.invokeLater(new Runnable () {
-							public void run () {
-								if (frame.isActive()) return;
-								try {
-									Class clazz = frame.getClass();
-									Method method = clazz.getMethod("synthesizeWindowActivation", new Class[]{boolean.class});
-									if (method != null) method.invoke(frame, new Object[]{new Boolean(true)});
-								} catch (Throwable e) {e.printStackTrace();}
-							}
-						});
-						break;
-					case SWT.Deactivate:
-						EventQueue.invokeLater(new Runnable () {
-							public void run () {
-								if (!frame.isActive()) return;
-								try {
-									Class clazz = frame.getClass();
-									Method method = clazz.getMethod("synthesizeWindowActivation", new Class[]{boolean.class});
-									if (method != null) method.invoke(frame, new Object[]{new Boolean(false)});
-								} catch (Throwable e) {e.printStackTrace();}
-							}
-						});
-						break;
+		}
+	};
+	
+	parent.addListener (SWT.FocusIn, listener);
+	parent.addListener (SWT.Deactivate, listener);
+	parent.addListener (SWT.Dispose, listener);
+	
+	parent.getDisplay().asyncExec(new Runnable() {
+		public void run () {
+			if (parent.isDisposed()) return;
+			final Rectangle clientArea = parent.getClientArea();
+			EventQueue.invokeLater(new Runnable () {
+				public void run () {
+					frame.setSize (clientArea.width, clientArea.height);
+					frame.validate();
+					
+					// Bug in Cocoa AWT? For some reason the frame isn't showing up on first draw.
+					// Toggling visibility seems to be the only thing that works.
+					frame.setVisible(false);
+					frame.setVisible(true);
 				}
-			}
-		};
-		
-		parent.addListener (SWT.FocusIn, listener);
-		parent.addListener (SWT.Deactivate, listener);
-		parent.addListener (SWT.Dispose, listener);
-		
-		parent.getDisplay().asyncExec(new Runnable() {
-			public void run () {
-				if (parent.isDisposed()) return;
-				final Rectangle clientArea = parent.getClientArea();
-				EventQueue.invokeLater(new Runnable () {
-					public void run () {
-						frame.setSize (clientArea.width, clientArea.height);
-						frame.validate();
-						
-						// Bug in Cocoa AWT? For some reason the frame isn't showing up on first draw.
-						// Toggling visibility seems to be the only thing that works.
-						frame.setVisible(false);
-						frame.setVisible(true);
-					}
-				});
-			}
-		});
-		
-		return frame;
+			});
+		}
+	});
+	
+	return frame;
+}
+	
+/**
+ * Creates a new <code>Shell</code>. This Shell is the root for
+ * the SWT widgets that will be embedded within the AWT canvas. 
+ * 
+ * @param display the display for the new Shell
+ * @param parent the parent <code>java.awt.Canvas</code> of the new Shell
+ * @return a <code>Shell</code> to be the parent of the embedded SWT widgets
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the display is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent's peer is not created</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public static Shell new_Shell(final Display display, final Canvas parent) {
+	if (display == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (parent == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	int /*long*/ handle = 0;
+	
+	try {
+		loadLibrary ();
+		handle = getAWTHandle (parent);
+	} catch (Throwable e) {
+		SWT.error (SWT.ERROR_NOT_IMPLEMENTED, e);
 	}
+	if (handle == 0) SWT.error (SWT.ERROR_INVALID_ARGUMENT, null, " [peer not created]");
 	
-	/**
-	 * Creates a new <code>Shell</code>. This Shell is the root for
-	 * the SWT widgets that will be embedded within the AWT canvas. 
-	 * 
-	 * @param display the display for the new Shell
-	 * @param parent the parent <code>java.awt.Canvas</code> of the new Shell
-	 * @return a <code>Shell</code> to be the parent of the embedded SWT widgets
-	 * 
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the display is null</li>
-	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-	 *    <li>ERROR_INVALID_ARGUMENT - if the parent's peer is not created</li>
-	 * </ul>
-	 * 
-	 * @since 3.0
-	 */
-	public static Shell new_Shell(final Display display, final Canvas parent) {
-		if (display == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-		if (parent == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-		int /*long*/ handle = 0;
-		
-		try {
-			loadLibrary ();
-			handle = getAWTHandle (parent);
-		} catch (Throwable e) {
-			SWT.error (SWT.ERROR_NOT_IMPLEMENTED, e);
+	final Shell shell = Shell.cocoa_new (display, handle);
+	final ComponentListener listener = new ComponentAdapter () {
+		public void componentResized (ComponentEvent e) {
+			display.asyncExec (new Runnable () {
+				public void run () {
+					if (shell.isDisposed()) return;
+					Dimension dim = parent.getSize ();
+					shell.setSize (dim.width, dim.height);
+				}
+			});
 		}
-		if (handle == 0) SWT.error (SWT.ERROR_INVALID_ARGUMENT, null, " [peer not created]");
-		
-		final Shell shell = Shell.cocoa_new (display, handle);
-		final ComponentListener listener = new ComponentAdapter () {
-			public void componentResized (ComponentEvent e) {
-				display.asyncExec (new Runnable () {
-					public void run () {
-						if (shell.isDisposed()) return;
-						Dimension dim = parent.getSize ();
-						shell.setSize (dim.width, dim.height);
-					}
-				});
-			}
-		};
-		parent.addComponentListener(listener);
-		shell.addListener(SWT.Dispose, new Listener() {
-			public void handleEvent(Event event) {
-				parent.removeComponentListener(listener);
-			}
-		});
-		shell.setVisible (true);
-		return shell;
-	}
+	};
+	parent.addComponentListener(listener);
+	shell.addListener(SWT.Dispose, new Listener() {
+		public void handleEvent(Event event) {
+			parent.removeComponentListener(listener);
+		}
+	});
+	shell.setVisible (true);
+	return shell;
+}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/carbon/org/eclipse/swt/accessibility/Accessible.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/carbon/org/eclipse/swt/accessibility/Accessible.java
index 1a85e8f..41b55ed 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/carbon/org/eclipse/swt/accessibility/Accessible.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/carbon/org/eclipse/swt/accessibility/Accessible.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,6 +72,7 @@ public class Accessible {
 	Vector accessibleControlListeners = new Vector();
 	Vector accessibleTextListeners = new Vector ();
 	Vector accessibleActionListeners = new Vector();
+	Vector accessibleEditableTextListeners = new Vector();
 	Vector accessibleHyperlinkListeners = new Vector();
 	Vector accessibleTableListeners = new Vector();
 	Vector accessibleTableCellListeners = new Vector();
@@ -93,6 +94,7 @@ public class Accessible {
 	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
 	 * </ul>
 	 * 
+	 * @see #dispose
 	 * @see Control#getAccessible
 	 * 
 	 * @since 3.6
@@ -233,10 +235,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -260,10 +262,37 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #removeAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void addAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.addElement(listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -287,10 +316,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -314,10 +343,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -341,10 +370,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -368,10 +397,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1379,10 +1408,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1406,10 +1435,37 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #addAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.removeElement(listener);
+	}
+	
+	/**
+	 * Removes the listener from the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1433,10 +1489,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1460,10 +1516,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1487,10 +1543,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1514,10 +1570,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1558,6 +1614,7 @@ public class Accessible {
 	 *
 	 * @param event an <code>ACC</code> constant beginning with EVENT_* indicating the message to send
 	 * @param eventData an object containing event-specific data, or null if there is no event-specific data
+	 * (eventData is specified in the documentation for individual ACC.EVENT_* constants)
 	 * 
 	 * @exception SWTException <ul>
 	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
old mode 100644
new mode 100755
index 1fb0b60..07f67ab
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,8 @@ import org.eclipse.swt.widgets.*;
  */
 public class Accessible {
 
+	static boolean DEBUG = false;
+	
 	static final int MAX_RELATION_TYPES = 15;
 
 	static NSString[] baseAttributes = { 
@@ -67,6 +69,7 @@ public class Accessible {
 	Vector accessibleControlListeners = new Vector();
 	Vector accessibleTextListeners = new Vector ();
 	Vector accessibleActionListeners = new Vector();
+	Vector accessibleEditableTextListeners = new Vector();
 	Vector accessibleHyperlinkListeners = new Vector();
 	Vector accessibleTableListeners = new Vector();
 	Vector accessibleTableCellListeners = new Vector();
@@ -94,6 +97,7 @@ public class Accessible {
 	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
 	 * </ul>
 	 * 
+	 * @see #dispose
 	 * @see Control#getAccessible
 	 * 
 	 * @since 3.6
@@ -236,10 +240,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -263,10 +267,37 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #removeAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void addAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.addElement(listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -290,10 +321,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -317,10 +348,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -344,10 +375,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -371,10 +402,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -832,6 +863,9 @@ public class Accessible {
 			if (attribute.isEqualToString(OS.NSAccessibilitySelectedTextRangeAttribute)) return true;
 			if (attribute.isEqualToString(OS.NSAccessibilityVisibleCharacterRangeAttribute)) return true;
 		}
+		if (accessibleEditableTextListeners.size() > 0) {
+			if (attribute.isEqualToString(OS.NSAccessibilitySelectedTextAttribute)) return true;
+		}
 		if (accessibleValueListeners.size() > 0) {
 			if (attribute.isEqualToString(OS.NSAccessibilityValueAttribute)) return true;
 		}
@@ -1435,6 +1469,7 @@ public class Accessible {
 	 */
 	public void internal_accessibilitySetValue_forAttribute(id value, NSString attribute, int childId) {
 		if (attribute.isEqualToString(OS.NSAccessibilitySelectedTextRangeAttribute)) setSelectedTextRangeAttribute(value, childId);
+		if (attribute.isEqualToString(OS.NSAccessibilitySelectedTextAttribute)) setSelectedTextAttribute(value, childId);
 		if (attribute.isEqualToString(OS.NSAccessibilityVisibleCharacterRangeAttribute)) setVisibleCharacterRangeAttribute(value, childId);
 		
 		if (accessibleValueListeners.size() > 0) {
@@ -2312,26 +2347,23 @@ public class Accessible {
 	
 	id getNumberOfCharactersAttribute (int childID) {
 		id returnValue = null;
-		if (accessibleTextExtendedListeners.size() > 0) {
-			AccessibleTextEvent event = new AccessibleTextEvent(this);
-			event.childID = childID;
-			for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
-				AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
-				listener.getCharacterCount(event);
-			}
-			returnValue = NSNumber.numberWithInt(event.count);
-		} else {
-			AccessibleControlEvent event = new AccessibleControlEvent(this);
-			event.childID = childID;
-			event.result = null;
+		AccessibleTextEvent event = new AccessibleTextEvent(this);
+		event.count = -1;
+		for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
+			AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
+			listener.getCharacterCount(event);
+		}
+		if (event.count != -1) {
+			AccessibleControlEvent e = new AccessibleControlEvent(this);
+			e.childID = ACC.CHILDID_SELF;
 			for (int i = 0; i < accessibleControlListeners.size(); i++) {
 				AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
-				listener.getValue(event);
-			}
-			String appValue = event.result;
-			if (appValue != null) {
-				returnValue = NSNumber.numberWithInt(appValue.length());
+				listener.getRole(e);
+				listener.getValue(e);
 			}
+			// TODO: Consider passing the value through for other roles as well (i.e. combo, etc). Keep in sync with get_text.
+			event.count = e.detail == ACC.ROLE_TEXT && e.result != null ? e.result.length() : 0;
+			returnValue = NSNumber.numberWithInt(event.count);
 		}
 		return returnValue;
 	}
@@ -2534,7 +2566,7 @@ public class Accessible {
 	}
 	
 	id getSelectedTextRangesAttribute (int childID) {
-		NSMutableArray returnValue = null;
+		NSMutableArray returnValue = NSMutableArray.arrayWithCapacity(3);
 		if (accessibleTextExtendedListeners.size() > 0) {
 			AccessibleTextEvent event = new AccessibleTextEvent(this);
 			event.childID = childID;
@@ -2543,7 +2575,6 @@ public class Accessible {
 				listener.getSelectionCount(event);
 			}
 			if (event.count > 0) {
-				returnValue = NSMutableArray.arrayWithCapacity(event.count);
 				for (int i = 0; i < event.count; i++) {
 					event.index = i;
 					for (int j = 0; j < accessibleTextExtendedListeners.size(); j++) {
@@ -2568,13 +2599,15 @@ public class Accessible {
 			}
 
 			if (event.offset != -1) {
-				returnValue = NSMutableArray.arrayWithCapacity(1);
 				NSRange range = new NSRange();
 				range.location = event.offset;
 				range.length = event.length;
 				returnValue.addObject(NSValue.valueWithRange(range));
 			}
 		}
+		if (returnValue.count() == 0) {
+			returnValue.addObject(NSValue.valueWithRange(new NSRange()));
+		}
 		return returnValue;
 	}
 	
@@ -2766,10 +2799,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -2793,10 +2826,37 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #addAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.removeElement(listener);
+	}
+	
+	/**
+	 * Removes the listener from the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -2820,10 +2880,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -2847,10 +2907,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -2874,10 +2934,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -2901,10 +2961,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -2982,6 +3042,7 @@ public class Accessible {
 	 *
 	 * @param event an <code>ACC</code> constant beginning with EVENT_* indicating the message to send
 	 * @param eventData an object containing event-specific data, or null if there is no event-specific data
+	 * (eventData is specified in the documentation for individual ACC.EVENT_* constants)
 	 * 
 	 * @exception SWTException <ul>
 	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
@@ -3027,6 +3088,7 @@ public class Accessible {
 		checkWidget();
 
 		id eventSource = accessibleHandle(this);
+		if (DEBUG) System.out.println("sendEvent: 0x" + Integer.toHexString(event) + ", data = " + eventData + ", source = " + eventSource);
 
 		switch (event) {
 		case ACC.EVENT_TEXT_CHANGED:
@@ -3069,7 +3131,13 @@ public class Accessible {
 				getRowsAttribute(ACC.CHILDID_SELF);
 				getColumnsAttribute(ACC.CHILDID_SELF);
 			}
-			OS.NSAccessibilityPostNotification(eventSource.id, OS.NSAccessibilityRowCountChangedNotification.id); break;
+			if (eventData != null) {
+				int[] eventParams = (int[])eventData;
+				// Slot 2 of the array is the number of rows that were either added or deleted. If non-zero, fire a notification.
+				// Cocoa doesn't have a notification for a change in the number of columns.
+				if (eventParams[2] != 0) OS.NSAccessibilityPostNotification(eventSource.id, OS.NSAccessibilityRowCountChangedNotification.id);
+			}
+			break;
 			
 		// None of these correspond to anything in Cocoa. 
 		case ACC.EVENT_HYPERTEXT_LINK_SELECTED:
@@ -3094,10 +3162,12 @@ public class Accessible {
 	 */
 	public void selectionChanged () {
 		checkWidget();
+		id eventSource = accessibleHandle(this);
+		if (DEBUG) System.out.println("selectionChanged on " + eventSource);
 		if (currentRole == ACC.ROLE_TABLE) {
-			OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilitySelectedRowsChangedNotification.id);
+			OS.NSAccessibilityPostNotification(eventSource.id, OS.NSAccessibilitySelectedRowsChangedNotification.id);
 		} else {
-			OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilitySelectedChildrenChangedNotification.id);
+			OS.NSAccessibilityPostNotification(eventSource.id, OS.NSAccessibilitySelectedChildrenChangedNotification.id);
 		}
 	}
 
@@ -3114,7 +3184,35 @@ public class Accessible {
 	 */
 	public void setFocus(int childID) {
 		checkWidget();
-		OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilityFocusedUIElementChangedNotification.id);
+		id accessible = childIDToOs(childID);
+		if (DEBUG) System.out.println("setFocus on " + accessible);
+		OS.NSAccessibilityPostNotification(accessible.id, OS.NSAccessibilityFocusedUIElementChangedNotification.id);
+	}
+
+	void setSelectedTextAttribute(id value, int childId) {
+		NSString newText = new NSString(value.id);
+		int rangeStart = 0;
+		id charsValue = getNumberOfCharactersAttribute(childId); 
+		int rangeEnd = new NSNumber(charsValue).intValue();
+		id rangeObj = getSelectedTextRangeAttribute(childId);
+		
+		if (rangeObj != null) {
+			NSRange range = new NSValue(rangeObj).rangeValue();
+			rangeStart = (int)/*64*/range.location;
+			rangeEnd = (int)/*64*/(range.location + range.length);
+		}
+		
+		if (accessibleEditableTextListeners.size() > 0) {
+			AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+			event.start = rangeStart;
+			event.end = rangeEnd;
+			event.string = newText.getString();
+
+			for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+				AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+				listener.replaceText(event);
+			}
+		} 
 	}
 
 	void setSelectedTextRangeAttribute(id value, int childId) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleActionEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleActionEvent.java
index de96073..49219c3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleActionEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleActionEvent.java	
@@ -50,7 +50,7 @@ public AccessibleActionEvent(Object source) {
  * @return a string representation of the event
  */
 public String toString () {
-	return "AccessibleActionEvent {"
+	return "AccessibleActionEvent {" //$NON-NLS-1$
 		+ "string=" + result   //$NON-NLS-1$
 		+ " count=" + count   //$NON-NLS-1$
 		+ " index=" + index   //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeAdapter.java
index 43df16e..f51f7eb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeAdapter.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeAdapter.java	
@@ -48,14 +48,14 @@ public class AccessibleAttributeAdapter implements AccessibleAttributeListener {
 	 * Returns text attributes specific to this Accessible object.
 	 * 
 	 * @param e an event object containing the following fields:<ul>
-	 * <li>[in] offset - the 0 based text offset</li>
-	 * <li>[out] start - the starting offset of the character range
+	 * <li>[in] offset - the 0 based text offset for which to return attribute information</li>
+	 * <li>[out] start - the 0 based starting offset of the character range
 	 * 		over which all text attributes match those of offset</li>
 	 * <li>[out] end - the 0 based offset after the last character of the character range
 	 * 		over which all text attributes match those of offset</li>
 	 * <li>[out] textStyle - the TextStyle of the character range</li>
 	 * <li>[out] attributes - an array of alternating key and value Strings
-	 * 		which represent additional (i.e. non predefined) attributes</li>
+	 * 		that represent additional attributes that do not correspond to TextStyle fields</li>
 	 * </ul>
 	 */
 	public void getTextAttributes(AccessibleTextAttributeEvent e) {}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeEvent.java
index b09ffb0..87a3a08 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeEvent.java	
@@ -51,7 +51,7 @@ public AccessibleAttributeEvent(Object source) {
  * @return a string representation of the event
  */
 public String toString () {
-	return "AccessibleAttributeEvent {"
+	return "AccessibleAttributeEvent {" //$NON-NLS-1$
 		+ " topMargin=" + topMargin   //$NON-NLS-1$
 		+ " bottomMargin=" + bottomMargin   //$NON-NLS-1$
 		+ " leftMargin=" + leftMargin   //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeListener.java
index 6d08f26..da725e0 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeListener.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleAttributeListener.java	
@@ -51,14 +51,14 @@ public interface AccessibleAttributeListener extends SWTEventListener {
 	 * Returns text attributes specific to this Accessible object.
 	 * 
 	 * @param e an event object containing the following fields:<ul>
-	 * <li>[in] offset - the 0 based text offset</li>
-	 * <li>[out] start - the starting offset of the character range
+	 * <li>[in] offset - the 0 based text offset for which to return attribute information</li>
+	 * <li>[out] start - the 0 based starting offset of the character range
 	 * 		over which all text attributes match those of offset</li>
 	 * <li>[out] end - the 0 based offset after the last character of the character range
 	 * 		over which all text attributes match those of offset</li>
 	 * <li>[out] textStyle - the TextStyle of the character range</li>
 	 * <li>[out] attributes - an array of alternating key and value Strings
-	 * 		which represent additional (i.e. non predefined) attributes</li>
+	 * 		that represent additional attributes that do not correspond to TextStyle fields</li>
 	 * </ul>
 	 */
 	public void getTextAttributes(AccessibleTextAttributeEvent e);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextAdapter.java
new file mode 100644
index 0000000..583ee5c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextAdapter.java	
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.accessibility;
+
+/**
+ * This adapter class provides default implementations for the
+ * methods in the <code>AccessibleEditableTextListener</code> interface.
+ * <p>
+ * Classes that wish to deal with <code>AccessibleEditableText</code> events can
+ * extend this class and override only the methods that they are
+ * interested in.
+ * </p>
+ *
+ * @see AccessibleEditableTextListener
+ * @see AccessibleEditableTextEvent
+ * @see AccessibleTextAttributeEvent
+ *
+ * @since 3.7
+ */
+public class AccessibleEditableTextAdapter implements AccessibleEditableTextListener {
+	/**
+	 * Copies the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> to the clipboard.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		to be copied to the clipboard</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		to be copied to the clipboard</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void copyText(AccessibleEditableTextEvent e) {};
+
+	/**
+	 * Moves the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> to the clipboard.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		to be moved to the clipboard</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		to be moved to the clipboard</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void cutText(AccessibleEditableTextEvent e) {};
+
+	/**
+	 * Inserts the text in the clipboard at the leading edge of the specified <code>start</code> offset.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the offset at which to insert the text from the clipboard.
+	 * 		The valid range is 0..length</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void pasteText(AccessibleEditableTextEvent e) {};
+
+	/**
+	 * Replaces the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> by the specified string.
+	 * <p>
+	 * This event notification is also used to delete text if <code>string</code> is an empty string,
+	 * or to insert text at the leading edge of the specified offset if <code>start</code> and <code>end</code> are equal.
+	 * </p>
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		to be replaced</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		to be replaced</li>
+	 * <li>[in] string - the string that replaces the substring beginning at
+	 * 		<code>start</code> and extending to <code>end - 1</code></li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void replaceText(AccessibleEditableTextEvent e) {};
+
+	/**
+	 * Replaces the set of attributes of the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> by the specified set of attributes.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		whose attributes are modified</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		whose attributes are modified</li>
+	 * <li>[in] textStyle - the TextStyle which contains attributes that replace the old set of attributes.
+	 * 		The foreground, background, and font fields of this TextStyle are only valid for the duration of the event.
+	 * 		The value of this field may be null if none of the attributes to be set correspond to TextStyle fields.</li>
+	 * <li>[in] attributes - an array of alternating key and value Strings that represent the complete
+	 * 		set of attributes to replace the old set of attributes.
+	 * 		The value of this field may be null if no attributes are to be set.</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void setTextAttributes(AccessibleTextAttributeEvent e) {};
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextEvent.java
new file mode 100644
index 0000000..207614b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextEvent.java	
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.accessibility;
+
+import org.eclipse.swt.internal.*;
+
+/**
+ * Instances of this class are sent as a result of accessibility clients
+ * sending AccessibleEditableText messages to an accessible object.
+ *
+ * @see AccessibleEditableTextListener
+ * @see AccessibleEditableTextAdapter
+ *
+ * @since 3.7
+ */
+public class AccessibleEditableTextEvent extends SWTEventObject {
+
+	/**
+	 * [in] 0-based start offset of the character range to perform
+	 * the operation on
+	 * 
+	 * @see AccessibleEditableTextListener#copyText
+	 * @see AccessibleEditableTextListener#cutText
+	 * @see AccessibleEditableTextListener#pasteText
+	 * @see AccessibleEditableTextListener#replaceText
+	 */
+	public int start;
+	
+	/**
+	 * [in] 0-based ending offset of the character range to perform
+	 * the operation on
+	 * 
+	 * @see AccessibleEditableTextListener#copyText
+	 * @see AccessibleEditableTextListener#cutText
+	 * @see AccessibleEditableTextListener#replaceText
+	 */
+	public int end;
+	
+	/**
+	 * [in] a string that will replace the specified character range
+	 * 
+	 * @see AccessibleEditableTextListener#replaceText
+	 */
+	public String string;
+
+	/**
+	 * [out] Set this field to {@link ACC#OK} if the operation
+	 * was completed successfully, and <code>null</code> otherwise.
+	 * 
+	 * @see AccessibleEditableTextListener#copyText
+	 * @see AccessibleEditableTextListener#cutText
+	 * @see AccessibleEditableTextListener#pasteText
+	 * @see AccessibleEditableTextListener#replaceText
+	 */
+	public String result;
+
+	static final long serialVersionUID = -5045447704486894646L;
+
+/**
+ * Constructs a new instance of this class.
+ *
+ * @param source the object that fired the event
+ */
+public AccessibleEditableTextEvent(Object source) {
+	super(source);
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString () {
+	return "AccessibleEditableTextEvent {" //$NON-NLS-1$
+		+ "start=" + start   //$NON-NLS-1$
+		+ " end=" + end   //$NON-NLS-1$
+		+ " string=" + string   //$NON-NLS-1$
+		+ " result=" + result   //$NON-NLS-1$
+		+ "}";  //$NON-NLS-1$
+}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextListener.java
new file mode 100644
index 0000000..6bbe3d6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleEditableTextListener.java	
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.accessibility;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide methods
+ * that handle AccessibleEditableText events.
+ * <p>
+ * After creating an instance of a class that implements
+ * this interface it can be added to an accessible using the
+ * <code>addAccessibleEditableTextListener</code> method and removed using
+ * the <code>removeAccessibleEditableTextListener</code> method.
+ * </p>
+ *
+ * @see AccessibleEditableTextAdapter
+ * @see AccessibleEditableTextEvent
+ * @see AccessibleTextAttributeEvent
+ *
+ * @since 3.7
+ */
+public interface AccessibleEditableTextListener extends SWTEventListener {
+	/**
+	 * Copies the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> to the clipboard.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		to be copied to the clipboard</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		to be copied to the clipboard</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void copyText(AccessibleEditableTextEvent e);
+
+	/**
+	 * Moves the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> to the clipboard.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		to be moved to the clipboard</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		to be moved to the clipboard</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void cutText(AccessibleEditableTextEvent e);
+
+	/**
+	 * Inserts the text in the clipboard at the leading edge of the specified <code>start</code> offset.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the offset at which to insert the text from the clipboard.
+	 * 		The valid range is 0..length</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void pasteText(AccessibleEditableTextEvent e);
+
+	/**
+	 * Replaces the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> by the specified string.
+	 * <p>
+	 * This event notification is also used to delete text if <code>string</code> is an empty string,
+	 * or to insert text at the leading edge of the specified offset if <code>start</code> and <code>end</code> are equal.
+	 * </p>
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		to be replaced</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		to be replaced</li>
+	 * <li>[in] string - the string that replaces the substring beginning at
+	 * 		<code>start</code> and extending to <code>end - 1</code></li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void replaceText(AccessibleEditableTextEvent e);
+
+	/**
+	 * Replaces the set of attributes of the substring beginning at the specified <code>start</code> offset
+	 * and extending to the character at offset <code>end - 1</code> by the specified set of attributes.
+	 * 
+	 * @param e an event object containing the following information:<ul>
+	 * <li>[in] start - the 0 based offset of the first character of the substring
+	 * 		whose attributes are modified</li>
+	 * <li>[in] end - the 0 based offset after the last character of the substring
+	 * 		whose attributes are modified</li>
+	 * <li>[in] textStyle - the TextStyle which contains attributes that replace the old set of attributes.
+	 * 		The foreground, background, and font fields of this TextStyle are only valid for the duration of the event.
+	 * 		The value of this field may be null if none of the attributes to be set correspond to TextStyle fields.</li>
+	 * <li>[in] attributes - an array of alternating key and value Strings that represent the complete
+	 * 		set of attributes to replace the old set of attributes.
+	 * 		The value of this field may be null if no attributes are to be set.</li>
+	 * <li>[out] result - set to {@link ACC#OK} if the operation was completed successfully</li>
+	 * </ul>
+	 */
+	public void setTextAttributes(AccessibleTextAttributeEvent e);
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleHyperlinkEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleHyperlinkEvent.java
index 79df0ef..5e30381 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleHyperlinkEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleHyperlinkEvent.java	
@@ -51,7 +51,7 @@ public AccessibleHyperlinkEvent(Object source) {
  * @return a string representation of the event
  */
 public String toString () {
-	return "AccessibleHyperlinkEvent {"
+	return "AccessibleHyperlinkEvent {" //$NON-NLS-1$
 		+ "accessible=" + accessible   //$NON-NLS-1$
 		+ " string=" + result   //$NON-NLS-1$
 		+ " index=" + index   //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableCellEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableCellEvent.java
index 47ceff4..59c6fe6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableCellEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableCellEvent.java	
@@ -47,7 +47,7 @@ public AccessibleTableCellEvent(Object source) {
  * @return a string representation of the event
  */
 public String toString () {
-	return "AccessibleTableCellEvent {"
+	return "AccessibleTableCellEvent {" //$NON-NLS-1$
 		+ " accessibles=" + accessibles   //$NON-NLS-1$
 		+ " isSelected=" + isSelected   //$NON-NLS-1$
 		+ " count=" + count   //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableEvent.java
index a4dcc9b..ff059d7 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTableEvent.java	
@@ -56,7 +56,7 @@ public AccessibleTableEvent(Object source) {
  * @return a string representation of the event
  */
 public String toString () {
-	return "AccessibleTableEvent {"
+	return "AccessibleTableEvent {" //$NON-NLS-1$
 		+ "accessible=" + accessible   //$NON-NLS-1$
 		+ " accessibles=" + accessibles   //$NON-NLS-1$
 		+ " string=" + result   //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextAttributeEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextAttributeEvent.java
index 96dc631..aa6ccfa 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextAttributeEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextAttributeEvent.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,21 +15,61 @@ import org.eclipse.swt.internal.*;
 
 /**
  * Instances of this class are sent as a result of accessibility clients
- * sending AccessibleAttribute messages to an accessible object.
+ * sending AccessibleAttribute or AccessibleEditableText messages to an
+ * accessible object.
  *
  * @see AccessibleAttributeListener
  * @see AccessibleAttributeAdapter
+ * @see AccessibleEditableTextListener
+ * @see AccessibleEditableTextAdapter
  *
  * @since 3.6
  */
 public class AccessibleTextAttributeEvent extends SWTEventObject {
 
+	/**
+	 * [in] the 0-based text offset for which to return attribute information
+	 * 
+	 * @see AccessibleAttributeListener#getTextAttributes
+	 */
 	public int offset;
+
+	/**
+	 * [in/out] the starting and ending offsets of the character range
+	 * 
+	 * @see AccessibleAttributeListener#getTextAttributes
+	 * @see AccessibleEditableTextListener#setTextAttributes
+	 */
 	public int start, end;
+
+	/**
+	 * [in/out] the TextStyle of the character range
+	 * 
+	 * @see AccessibleAttributeListener#getTextAttributes
+	 * @see AccessibleEditableTextListener#setTextAttributes
+	 */
 	public TextStyle textStyle;
+	
+	/**
+	 * [in/out] an array of alternating key and value Strings
+	 * that represent attributes that do not correspond to TextStyle fields
+	 * 
+	 * @see AccessibleAttributeListener#getTextAttributes
+	 * @see AccessibleEditableTextListener#setTextAttributes
+	 */
 	public String [] attributes;
 
-	static final long serialVersionUID = 0L; // TODO: run serialver -show
+	/**
+	 * [out] Set this field to {@link ACC#OK} if the operation
+	 * was completed successfully, and null otherwise.
+	 * 
+	 * @see AccessibleEditableTextListener#setTextAttributes
+	 * 
+	 * @since 3.7
+	 */
+	public String result;
+
+	static final long serialVersionUID = 7131825608864332802L;
 
 /**
  * Constructs a new instance of this class.
@@ -47,11 +87,23 @@ public AccessibleTextAttributeEvent(Object source) {
  * @return a string representation of the event
  */
 public String toString () {
-	return "AccessibleAttributeEvent {"
+	return "AccessibleAttributeEvent {" //$NON-NLS-1$
 		+ " offset=" + offset   //$NON-NLS-1$
-		+ " startOffset=" + start   //$NON-NLS-1$
-		+ " endOffset=" + end   //$NON-NLS-1$
+		+ " start=" + start   //$NON-NLS-1$
+		+ " end=" + end   //$NON-NLS-1$
 		+ " textStyle=" + textStyle   //$NON-NLS-1$
+		+ " attributes=" + toAttributeString(attributes)   //$NON-NLS-1$
+		+ " result=" + result   //$NON-NLS-1$
 		+ "}";  //$NON-NLS-1$
 }
+
+String toAttributeString(String [] attributes) {
+	if (attributes == null || attributes.length == 0) return "" + attributes;   //$NON-NLS-1$
+	StringBuffer attributeString = new StringBuffer();
+	for (int i = 0; i < attributes.length; i++) {
+		attributeString.append(attributes[i]);
+		attributeString.append((i % 2 == 0) ? ":" : ";");   //$NON-NLS-1$   //$NON-NLS-2$
+	}
+	return attributeString.toString();
+}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextExtendedListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextExtendedListener.java
index c4374ef..59ec5df 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextExtendedListener.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextExtendedListener.java	
@@ -16,8 +16,8 @@ package org.eclipse.swt.accessibility;
  * <p>
  * After creating an instance of a class that implements
  * this interface it can be added to an accessible using the
- * <code>addAccessibleTextExtendedListener</code> method and removed using
- * the <code>removeAccessibleTextExtendedListener</code> method.
+ * <code>addAccessibleTextListener</code> method and removed using
+ * the <code>removeAccessibleTextListener</code> method.
  * </p>
  *
  * @see AccessibleTextExtendedAdapter
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleValueEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleValueEvent.java
index de42982..5c4b579 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleValueEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleValueEvent.java	
@@ -43,7 +43,7 @@ public AccessibleValueEvent(Object source) {
  * @return a string representation of the event
  */
 public String toString () {
-	return "AccessibleValueEvent {"
+	return "AccessibleValueEvent {" //$NON-NLS-1$
 		+ "value=" + value   //$NON-NLS-1$
 		+ "}";  //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/emulated/org/eclipse/swt/accessibility/Accessible.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/emulated/org/eclipse/swt/accessibility/Accessible.java
index 41eb5f5..4b29520 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/emulated/org/eclipse/swt/accessibility/Accessible.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/emulated/org/eclipse/swt/accessibility/Accessible.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@ public class Accessible {
 	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
 	 * </ul>
 	 * 
+	 * @see #dispose
 	 * @see Control#getAccessible
 	 * 
 	 * @since 3.6
@@ -233,10 +234,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -257,10 +258,34 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #removeAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void addAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -281,10 +306,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -305,10 +330,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -329,10 +354,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -353,10 +378,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -418,10 +443,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -442,10 +467,34 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #addAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	}
+	
+	/**
+	 * Removes the listener from the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -466,10 +515,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -490,10 +539,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -514,10 +563,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -538,10 +587,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -577,6 +626,7 @@ public class Accessible {
 	 *
 	 * @param event an <code>ACC</code> constant beginning with EVENT_* indicating the message to send
 	 * @param eventData an object containing event-specific data, or null if there is no event-specific data
+	 * (eventData is specified in the documentation for individual ACC.EVENT_* constants)
 	 * 
 	 * @exception SWTException <ul>
 	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java
index f1b21b9..73c155f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class Accessible {
 	Vector accessibleControlListeners = new Vector ();
 	Vector accessibleTextListeners = new Vector ();
 	Vector accessibleActionListeners = new Vector();
+	Vector accessibleEditableTextListeners = new Vector();
 	Vector accessibleHyperlinkListeners = new Vector();
 	Vector accessibleTableListeners = new Vector();
 	Vector accessibleTableCellListeners = new Vector();
@@ -83,6 +84,7 @@ public class Accessible {
 	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
 	 * </ul>
 	 * 
+	 * @see #dispose
 	 * @see Control#getAccessible
 	 * 
 	 * @since 3.6
@@ -209,10 +211,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -236,10 +238,37 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #removeAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void addAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.addElement(listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -263,10 +292,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -290,10 +319,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -317,10 +346,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -344,10 +373,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -587,10 +616,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -614,10 +643,37 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #addAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.removeElement(listener);
+	}
+	
+	/**
+	 * Removes the listener from the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -641,10 +697,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -668,10 +724,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -695,10 +751,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -722,10 +778,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -771,6 +827,7 @@ public class Accessible {
 	 *
 	 * @param event an <code>ACC</code> constant beginning with EVENT_* indicating the message to send
 	 * @param eventData an object containing event-specific data, or null if there is no event-specific data
+	 * (eventData is specified in the documentation for individual ACC.EVENT_* constants)
 	 * 
 	 * @exception SWTException <ul>
 	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleFactory.java
index 47ed177..03e4031 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleFactory.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleFactory.java	
@@ -29,6 +29,9 @@ class AccessibleFactory {
 		ACC.ROLE_SPLITBUTTON, ACC.ROLE_SPINBUTTON,
 		ACC.ROLE_CHECKMENUITEM, ACC.ROLE_RADIOMENUITEM,
 	};
+	static final int[] editableTextRoles = {
+		ACC.ROLE_TEXT, ACC.ROLE_COMBOBOX, ACC.ROLE_PARAGRAPH, ACC.ROLE_DOCUMENT,
+	};
 	static final int[] hypertextRoles = {
 		ACC.ROLE_TEXT, ACC.ROLE_LINK, ACC.ROLE_PARAGRAPH,
 	};
@@ -37,7 +40,7 @@ class AccessibleFactory {
 	};
 	static final int[] textRoles = {
 		ACC.ROLE_COMBOBOX, ACC.ROLE_LINK, ACC.ROLE_LABEL, ACC.ROLE_TEXT, ACC.ROLE_STATUSBAR,
-		ACC.ROLE_PARAGRAPH,
+		ACC.ROLE_PARAGRAPH, ACC.ROLE_DOCUMENT,
 	};
 	static final int[] tableRoles = {
 		ACC.ROLE_TABLE, ACC.ROLE_TREE,
@@ -59,6 +62,15 @@ class AccessibleFactory {
 	static final Callback AtkComponentCB_get_size;
 	static final Callback AtkComponentCB_ref_accessible_at_point;
 	
+	/* EditableText callbacks */
+	static final Callback AtkEditableTextCB_set_run_attributes;
+	static final Callback AtkEditableTextCB_set_text_contents;
+	static final Callback AtkEditableTextCB_insert_text;
+	static final Callback AtkEditableTextCB_copy_text;
+	static final Callback AtkEditableTextCB_cut_text;
+	static final Callback AtkEditableTextCB_delete_text;
+	static final Callback AtkEditableTextCB_paste_text;
+
 	/* Hypertext callbacks */
 	static final Callback AtkHypertextCB_get_link;
 	static final Callback AtkHypertextCB_get_n_links;
@@ -136,6 +148,7 @@ class AccessibleFactory {
 	/* interface initialization callbacks */
 	static final Callback InitActionIfaceCB;		
 	static final Callback InitComponentIfaceCB;
+	static final Callback InitEditableTextIfaceCB;
 	static final Callback InitHypertextIfaceCB;
 	static final Callback GTypeInfo_base_init_type;
 	static final Callback InitSelectionIfaceCB;
@@ -146,6 +159,7 @@ class AccessibleFactory {
 	/* interface definitions */
 	static final int /*long*/ ActionIfaceDefinition;
 	static final int /*long*/ ComponentIfaceDefinition;
+	static final int /*long*/ EditableTextIfaceDefinition;
 	static final int /*long*/ HypertextIfaceDefinition;
 	static final int /*long*/ SelectionIfaceDefinition;
 	static final int /*long*/ TableIfaceDefinition;
@@ -161,6 +175,13 @@ class AccessibleFactory {
 		AtkComponentCB_get_position = newCallback (AccessibleObject.class, "atkComponent_get_position", 4); //$NON-NLS-1$
 		AtkComponentCB_get_size = newCallback (AccessibleObject.class, "atkComponent_get_size", 4); //$NON-NLS-1$
 		AtkComponentCB_ref_accessible_at_point = newCallback (AccessibleObject.class, "atkComponent_ref_accessible_at_point", 4); //$NON-NLS-1$
+		AtkEditableTextCB_set_run_attributes = newCallback (AccessibleObject.class, "atkEditableText_set_run_attributes", 4); //$NON-NLS-1$
+		AtkEditableTextCB_set_text_contents = newCallback (AccessibleObject.class, "atkEditableText_set_text_contents", 2); //$NON-NLS-1$
+		AtkEditableTextCB_insert_text = newCallback (AccessibleObject.class, "atkEditableText_insert_text", 4); //$NON-NLS-1$
+		AtkEditableTextCB_copy_text = newCallback (AccessibleObject.class, "atkEditableText_copy_text", 3); //$NON-NLS-1$
+		AtkEditableTextCB_cut_text = newCallback (AccessibleObject.class, "atkEditableText_cut_text", 3); //$NON-NLS-1$
+		AtkEditableTextCB_delete_text = newCallback (AccessibleObject.class, "atkEditableText_delete_text", 3); //$NON-NLS-1$
+		AtkEditableTextCB_paste_text = newCallback (AccessibleObject.class, "atkEditableText_paste_text", 2); //$NON-NLS-1$
 		AtkHypertextCB_get_link = newCallback (AccessibleObject.class, "atkHypertext_get_link", 2); //$NON-NLS-1$
 		AtkHypertextCB_get_n_links = newCallback (AccessibleObject.class, "atkHypertext_get_n_links", 1); //$NON-NLS-1$
 		AtkHypertextCB_get_link_index = newCallback (AccessibleObject.class, "atkHypertext_get_link_index", 2); //$NON-NLS-1$
@@ -236,6 +257,12 @@ class AccessibleFactory {
 		interfaceInfo.interface_init = InitComponentIfaceCB.getAddress ();
 		ComponentIfaceDefinition = OS.g_malloc (GInterfaceInfo.sizeof);
 		OS.memmove (ComponentIfaceDefinition, interfaceInfo, GInterfaceInfo.sizeof);
+		/* EditableText interface */
+		InitEditableTextIfaceCB = newCallback (AccessibleFactory.class, "initEditableTextIfaceCB", 1); //$NON-NLS-1$
+		interfaceInfo = new GInterfaceInfo ();
+		interfaceInfo.interface_init = InitEditableTextIfaceCB.getAddress ();
+		EditableTextIfaceDefinition = OS.g_malloc (GInterfaceInfo.sizeof);  
+		OS.memmove (EditableTextIfaceDefinition, interfaceInfo, GInterfaceInfo.sizeof);
 		/* Hypertext interface */
 		InitHypertextIfaceCB = newCallback (AccessibleFactory.class, "initHypertextIfaceCB", 1); //$NON-NLS-1$
 		interfaceInfo = new GInterfaceInfo ();
@@ -334,7 +361,7 @@ class AccessibleFactory {
 			AccessibleControlListener listener = (AccessibleControlListener)listeners.elementAt (i);
 			listener.getRole (event);
 		}
-		boolean action = false, hypertext = false, selection = false, table = false, text = false, value = false;
+		boolean action = false, editableText = false, hypertext = false, selection = false, table = false, text = false, value = false;
 		if (event.detail != 0) {	/* a role was specified */
 			for (int i = 0; i < actionRoles.length; i++) {
 				if (event.detail == actionRoles [i]) {
@@ -342,6 +369,12 @@ class AccessibleFactory {
 					break;
 				}
 			}
+			for (int i = 0; i < editableTextRoles.length; i++) {
+				if (event.detail == editableTextRoles [i]) {
+					editableText = true;
+					break;
+				}
+			}
 			for (int i = 0; i < hypertextRoles.length; i++) {
 				if (event.detail == hypertextRoles [i]) {
 					hypertext = true;
@@ -373,10 +406,11 @@ class AccessibleFactory {
 				}
 			}
 		} else {
-			action = hypertext = selection = table = text = value = true;
+			action = editableText = hypertext = selection = table = text = value = true;
 		}
 		String swtTypeName = SWT_TYPE_PREFIX + widgetTypeName;
 		if (action) swtTypeName += "Action"; //$NON-NLS-1$
+		if (editableText) swtTypeName += "EditableText"; //$NON-NLS-1$
 		if (hypertext) swtTypeName += "Hypertext"; //$NON-NLS-1$
 		if (selection) swtTypeName += "Selection"; //$NON-NLS-1$
 		if (table) swtTypeName += "Table"; //$NON-NLS-1$
@@ -402,6 +436,7 @@ class AccessibleFactory {
 			type = OS.g_type_register_static (parentType, nameBytes, definition, 0);
 			OS.g_type_add_interface_static (type, ATK.ATK_TYPE_COMPONENT(), ComponentIfaceDefinition);
 			if (action) OS.g_type_add_interface_static (type, ATK.ATK_TYPE_ACTION(), ActionIfaceDefinition);
+			if (editableText) OS.g_type_add_interface_static (type, ATK.ATK_TYPE_EDITABLE_TEXT(), EditableTextIfaceDefinition);
 			if (hypertext) OS.g_type_add_interface_static (type, ATK.ATK_TYPE_HYPERTEXT(), HypertextIfaceDefinition);
 			if (selection) OS.g_type_add_interface_static (type, ATK.ATK_TYPE_SELECTION(), SelectionIfaceDefinition);
 			if (table) OS.g_type_add_interface_static (type, ATK.ATK_TYPE_TABLE(), TableIfaceDefinition);
@@ -463,6 +498,20 @@ class AccessibleFactory {
 		return 0;
 	}
 
+	static int /*long*/ initEditableTextIfaceCB (int /*long*/ iface) {
+		AtkEditableTextIface inter = new AtkEditableTextIface ();
+		ATK.memmove (inter, iface);
+		inter.set_run_attributes = AtkEditableTextCB_set_run_attributes.getAddress ();
+		inter.set_text_contents = AtkEditableTextCB_set_text_contents.getAddress ();
+		inter.insert_text = AtkEditableTextCB_insert_text.getAddress ();
+		inter.copy_text = AtkEditableTextCB_copy_text.getAddress ();
+		inter.cut_text = AtkEditableTextCB_cut_text.getAddress ();
+		inter.delete_text = AtkEditableTextCB_delete_text.getAddress ();
+		inter.paste_text = AtkEditableTextCB_paste_text.getAddress ();
+		ATK.memmove (iface, inter);
+		return 0;
+	}
+
 	static int /*long*/ initHypertextIfaceCB (int /*long*/ iface) {
 		AtkHypertextIface inter = new AtkHypertextIface ();
 		ATK.memmove (inter, iface);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java
index ec4c646..80896bd 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java	
@@ -400,6 +400,347 @@ class AccessibleObject {
 		return parentResult;
 	}	
 
+	
+	static AtkEditableTextIface getEditableTextIface (int /*long*/ atkObject) {
+		if (ATK.g_type_is_a (OS.g_type_parent (OS.G_OBJECT_TYPE (atkObject)), ATK.ATK_TYPE_EDITABLE_TEXT())) {
+			AtkEditableTextIface iface = new AtkEditableTextIface ();
+			ATK.memmove (iface, ATK.g_type_interface_peek_parent (ATK.ATK_EDITABLE_TEXT_GET_IFACE (atkObject)));
+			return iface;
+		}
+		return null;
+	}
+	
+//	gboolean atk_editable_text_set_run_attributes(AtkEditableText *text, AtkAttributeSet *attrib_set, gint start_offset, gint end_offset);
+	static int /*long*/ atkEditableText_set_run_attributes (int /*long*/ atkObject, int /*long*/ attrib_set, int /*long*/ start_offset, int /*long*/ end_offset) {
+		if (DEBUG) print ("-->atkEditableText_set_run_attributes");
+		AccessibleObject object = getAccessibleObject (atkObject);
+		if (object != null) {
+			Accessible accessible = object.accessible;
+			Vector listeners = accessible.accessibleEditableTextListeners;
+			int length = listeners.size();
+			if (length > 0) {
+				Display display = accessible.control.getDisplay();
+				int /*long*/ fontDesc = OS.pango_font_description_new ();
+				boolean createFont = false;
+				TextStyle style = new TextStyle();
+				String [] attributes = new String [0];
+				int /*long*/ current = attrib_set;
+				int listLength = OS.g_slist_length (attrib_set);
+				for (int i = 0; i < listLength; i++) {
+					int /*long*/ attrPtr = OS.g_slist_data (current);
+					if (attrPtr != 0) {
+						AtkAttribute attr = new AtkAttribute();
+						ATK.memmove(attr, attrPtr, AtkAttribute.sizeof);
+						String name = getString(attr.name);
+						String value = getString(attr.value);
+						OS.g_free(attrPtr);
+						if (DEBUG) print("name=" + name + ", value=" + value);
+						String [] newAttributes = new String [attributes.length + 2];
+						System.arraycopy (attributes, 0, newAttributes, 0, attributes.length);
+						newAttributes[attributes.length] = name;
+						newAttributes[attributes.length + 1] = value;
+						attributes = newAttributes;
+						try {
+							if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_RISE)))) {
+								// number of pixels above baseline
+								style.rise = Integer.parseInt(value);
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_UNDERLINE)))) {
+								// "none", "single", "double", "low", or "error" (also allow "squiggle")
+								if (value.equals("single") || value.equals("low")) {
+									style.underline = true;
+									style.underlineStyle = SWT.UNDERLINE_SINGLE;
+								} else if (value.equals("double")) {
+									style.underline = true;
+									style.underlineStyle = SWT.UNDERLINE_DOUBLE;
+								} else if (value.equals("error")) {
+									style.underline = true;
+									style.underlineStyle = SWT.UNDERLINE_ERROR;
+								} else if (value.equals("squiggle")) {
+									style.underline = true;
+									style.underlineStyle = SWT.UNDERLINE_SQUIGGLE;
+								}
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_STRIKETHROUGH)))) {
+								// "true" or "false" (also allow "1" and "single")
+								if (value.equals("true") || value.equals("1") || value.equals("single")) style.strikeout = true;
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_FAMILY_NAME)))) {
+								// font family name
+								byte [] buffer = Converter.wcsToMbcs(null, value, true);
+								OS.pango_font_description_set_family(fontDesc, buffer);
+								createFont = true;
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_SIZE)))) {
+								// size of characters in points (allow fractional points)
+								float size = Float.parseFloat(value);
+								OS.pango_font_description_set_size(fontDesc, (int)(size * OS.PANGO_SCALE));
+								createFont = true;
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_STYLE)))) {
+								// "normal", "italic" or "oblique"
+								int fontStyle = -1;
+								if (value.equals("normal")) fontStyle = OS.PANGO_STYLE_NORMAL;
+								else if (value.equals("italic")) fontStyle = OS.PANGO_STYLE_ITALIC;
+								else if (value.equals("oblique")) fontStyle = OS.PANGO_STYLE_OBLIQUE;
+								if (fontStyle != -1) {
+									OS.pango_font_description_set_style(fontDesc, fontStyle);
+									createFont = true;
+								}
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_VARIANT)))) {
+								// "normal" or "small_caps"
+								int variant = -1;
+								if (value.equals("normal")) variant = OS.PANGO_VARIANT_NORMAL;
+								else if (value.equals("small_caps")) variant = OS.PANGO_VARIANT_SMALL_CAPS;
+								if (variant != -1) {
+									OS.pango_font_description_set_variant(fontDesc, variant);
+									createFont = true;
+								}
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_STRETCH)))) {
+								//"ultra_condensed", "extra_condensed", "condensed", "semi_condensed", "normal", "semi_expanded", "expanded", "extra_expanded" or "ultra_expanded" 
+								int stretch = -1;
+								if (value.equals("ultra_condensed")) stretch = OS.PANGO_STRETCH_ULTRA_CONDENSED;
+								else if (value.equals("extra_condensed")) stretch = OS.PANGO_STRETCH_EXTRA_CONDENSED;
+								else if (value.equals("condensed")) stretch = OS.PANGO_STRETCH_CONDENSED;
+								else if (value.equals("semi_condensed")) stretch = OS.PANGO_STRETCH_SEMI_CONDENSED;
+								else if (value.equals("normal")) stretch = OS.PANGO_STRETCH_NORMAL;
+								else if (value.equals("semi_expanded")) stretch = OS.PANGO_STRETCH_SEMI_EXPANDED;
+								else if (value.equals("expanded")) stretch = OS.PANGO_STRETCH_EXPANDED;
+								else if (value.equals("extra_expanded")) stretch = OS.PANGO_STRETCH_EXTRA_EXPANDED;
+								else if (value.equals("ultra_expanded")) stretch = OS.PANGO_STRETCH_ULTRA_EXPANDED;
+								if (stretch != -1) {
+									OS.pango_font_description_set_stretch(fontDesc, stretch);
+									createFont = true;
+								}
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_WEIGHT)))) {
+								// weight of the characters
+								int weight = Integer.parseInt(value);
+								OS.pango_font_description_set_weight(fontDesc, weight);
+								createFont = true;
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_FG_COLOR)))) {
+								// RGB value of the format "u,u,u"
+								style.foreground = colorFromString(display, value);
+							} else if (name.equals(getString(ATK.atk_text_attribute_get_name(ATK.ATK_TEXT_ATTR_BG_COLOR)))) {
+								// RGB value of the format "u,u,u"
+								style.background = colorFromString(display, value);
+							} else {
+								//TODO language and direction
+							}
+						} catch (NumberFormatException ex) {}
+					}
+					current = OS.g_slist_next (current);
+				}
+				if (createFont) {
+					style.font = Font.gtk_new(display, fontDesc);
+				}
+
+				AccessibleTextAttributeEvent event = new AccessibleTextAttributeEvent(accessible);
+				event.start = (int)/*64*/start_offset;
+				event.end = (int)/*64*/end_offset;
+				event.textStyle = style;
+				event.attributes = attributes;
+				for (int i = 0; i < length; i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+					listener.setTextAttributes(event);
+				}
+				if (style.font != null) {
+					style.font.dispose();
+				}
+				if (style.foreground != null) {
+					style.foreground.dispose();
+				}
+				if (style.background != null) {
+					style.background.dispose();
+				}
+				return ACC.OK.equals(event.result) ? 1 : 0;
+			}
+		}
+		int /*long*/ parentResult = 0;
+		AtkEditableTextIface iface = getEditableTextIface (atkObject);
+		if (iface != null && iface.set_run_attributes != 0) {
+			parentResult = ATK.call (iface.set_run_attributes, atkObject, attrib_set, start_offset, end_offset);
+		}
+		return parentResult;
+	}
+
+	/*
+	 * Return a Color given a string of the form "n,n,n".
+	 * @param display must be the display for the accessible's control
+	 * @param rgbString must not be null
+	 */
+	static Color colorFromString(Display display, String rgbString) {
+		try {
+			int comma1 = rgbString.indexOf(',');
+			int comma2 = rgbString.indexOf(',', comma1 + 1);
+			int r = Integer.parseInt(rgbString.substring(0, comma1));
+			int g = Integer.parseInt(rgbString.substring(comma1 + 1, comma2));
+			int b = Integer.parseInt(rgbString.substring(comma2 + 1, rgbString.length()));
+			return new Color(display, r, g, b);
+		} catch (NumberFormatException ex) {}
+		return null;
+	}
+
+//	void atk_editable_text_set_text_contents (AtkEditableText *text, const gchar *string);
+	static int /*long*/ atkEditableText_set_text_contents (int /*long*/ atkObject, int /*long*/ string) {
+		if (DEBUG) print ("-->atkEditableText_set_text_contents");
+		AccessibleObject object = getAccessibleObject (atkObject);
+		if (object != null) {
+			Accessible accessible = object.accessible;
+			Vector listeners = accessible.accessibleEditableTextListeners;
+			int length = listeners.size();
+			if (length > 0) {
+				AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+				event.start = 0;
+				String text = object.getText ();
+				event.end = text == null ? 0 : text.length ();
+				event.string = getString (string);
+				for (int i = 0; i < length; i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+					listener.replaceText(event);
+				}
+				return ACC.OK.equals(event.result) ? 1 : 0;
+			}
+		}
+		int /*long*/ parentResult = 0;
+		AtkEditableTextIface iface = getEditableTextIface (atkObject);
+		if (iface != null && iface.set_text_contents != 0) {
+			parentResult = ATK.call (iface.set_text_contents, atkObject, string);
+		}
+		return parentResult;
+	}
+
+//	void atk_editable_text_insert_text (AtkEditableText *text, const gchar *string, gint length, gint *position);
+	static int /*long*/ atkEditableText_insert_text (int /*long*/ atkObject, int /*long*/ string, int /*long*/ string_length, int /*long*/ position) {
+		if (DEBUG) print ("-->atkEditableText_insert_text");
+		AccessibleObject object = getAccessibleObject (atkObject);
+		if (object != null) {
+			Accessible accessible = object.accessible;
+			Vector listeners = accessible.accessibleEditableTextListeners;
+			int length = listeners.size();
+			if (length > 0) {
+				AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+				int[] pos = new int [1];
+				OS.memmove (pos, position, OS.PTR_SIZEOF);
+				event.start = event.end = pos[0];
+				event.string = getString (string);
+				for (int i = 0; i < length; i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+					listener.replaceText(event);
+				}
+				return ACC.OK.equals(event.result) ? 1 : 0;
+			}
+		}
+		int /*long*/ parentResult = 0;
+		AtkEditableTextIface iface = getEditableTextIface (atkObject);
+		if (iface != null && iface.insert_text != 0) {
+			parentResult = ATK.call (iface.insert_text, atkObject, string, string_length, position);
+		}
+		return parentResult;
+	}
+
+//	void atk_editable_text_copy_text (AtkEditableText *text, gint start_pos, gint end_pos);
+	static int /*long*/ atkEditableText_copy_text(int /*long*/ atkObject, int /*long*/ start_pos, int /*long*/ end_pos) {
+		if (DEBUG) print ("-->atkEditableText_copy_text");
+		AccessibleObject object = getAccessibleObject (atkObject);
+		if (object != null) {
+			Accessible accessible = object.accessible;
+			Vector listeners = accessible.accessibleEditableTextListeners;
+			int length = listeners.size();
+			if (length > 0) {
+				AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+				event.start = (int)/*64*/start_pos;
+				event.end = (int)/*64*/end_pos;
+				for (int i = 0; i < length; i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+					listener.copyText(event);
+				}
+				return ACC.OK.equals(event.result) ? 1 : 0;
+			}
+		}
+		int /*long*/ parentResult = 0;
+		AtkEditableTextIface iface = getEditableTextIface (atkObject);
+		if (iface != null && iface.copy_text != 0) {
+			parentResult = ATK.call (iface.copy_text, atkObject, start_pos, end_pos);
+		}
+		return parentResult;
+	}
+
+//	void atk_editable_text_cut_text (AtkEditableText *text, gint start_pos, gint end_pos);
+	static int /*long*/ atkEditableText_cut_text (int /*long*/ atkObject, int /*long*/ start_pos, int /*long*/ end_pos) {
+		if (DEBUG) print ("-->atkEditableText_cut_text");
+		AccessibleObject object = getAccessibleObject (atkObject);
+		if (object != null) {
+			Accessible accessible = object.accessible;
+			Vector listeners = accessible.accessibleEditableTextListeners;
+			int length = listeners.size();
+			if (length > 0) {
+				AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+				event.start = (int)/*64*/start_pos;
+				event.end = (int)/*64*/end_pos;
+				for (int i = 0; i < length; i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+					listener.cutText(event);
+				}
+				return ACC.OK.equals(event.result) ? 1 : 0;
+			}
+		}
+		int /*long*/ parentResult = 0;
+		AtkEditableTextIface iface = getEditableTextIface (atkObject);
+		if (iface != null && iface.cut_text != 0) {
+			parentResult = ATK.call (iface.cut_text, atkObject, start_pos, end_pos);
+		}
+		return parentResult;
+	}
+	
+//	void atk_editable_text_delete_text (AtkEditableText *text, gint start_pos, gint end_pos);
+	static int /*long*/ atkEditableText_delete_text (int /*long*/ atkObject, int /*long*/ start_pos, int /*long*/ end_pos) {
+		if (DEBUG) print ("-->atkEditableText_delete_text");
+		AccessibleObject object = getAccessibleObject (atkObject);
+		if (object != null) {
+			Accessible accessible = object.accessible;
+			Vector listeners = accessible.accessibleEditableTextListeners;
+			int length = listeners.size();
+			if (length > 0) {
+				AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+				event.start = (int)/*64*/start_pos;
+				event.end = (int)/*64*/end_pos;
+				event.string = "";
+				for (int i = 0; i < length; i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+					listener.replaceText(event);
+				}
+				return ACC.OK.equals(event.result) ? 1 : 0;
+			}
+		}
+		int /*long*/ parentResult = 0;
+		AtkEditableTextIface iface = getEditableTextIface (atkObject);
+		if (iface != null && iface.delete_text != 0) {
+			parentResult = ATK.call (iface.delete_text, atkObject, start_pos, end_pos);
+		}
+		return parentResult;
+	}
+
+//	void atk_editable_text_paste_text (AtkEditableText *text, gint position);
+	static int /*long*/ atkEditableText_paste_text (int /*long*/ atkObject, int /*long*/ position) {
+		if (DEBUG) print ("-->atkEditableText_paste_text");
+		AccessibleObject object = getAccessibleObject (atkObject);
+		if (object != null) {
+			Accessible accessible = object.accessible;
+			Vector listeners = accessible.accessibleEditableTextListeners;
+			int length = listeners.size();
+			if (length > 0) {
+				AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+				event.start = (int)/*64*/position;
+				for (int i = 0; i < length; i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+					listener.pasteText(event);
+				}
+				return ACC.OK.equals(event.result) ? 1 : 0;
+			}
+		}
+		int /*long*/ parentResult = 0;
+		AtkEditableTextIface iface = getEditableTextIface (atkObject);
+		if (iface != null && iface.paste_text != 0) {
+			parentResult = ATK.call (iface.paste_text, atkObject, position);
+		}
+		return parentResult;
+	}
+	
 	static AtkHypertextIface getHypertextIface (int /*long*/ atkObject) {
 		if (ATK.g_type_is_a (OS.g_type_parent (OS.G_OBJECT_TYPE (atkObject)), ATK.ATK_TYPE_HYPERTEXT())) {
 			AtkHypertextIface iface = new AtkHypertextIface ();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
index 37d866a..24698a6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,7 @@ public class Accessible {
 	static int UniqueID = -0x10;
 	int refCount = 0, enumIndex = 0;
 	COMObject objIAccessible, objIEnumVARIANT, objIServiceProvider, objIAccessible2, objIAccessibleAction,
-		objIAccessibleApplication, /*objIAccessibleComponent,*/ /*objIAccessibleEditableText,*/ objIAccessibleHyperlink,
+		objIAccessibleApplication, /*objIAccessibleComponent,*/ objIAccessibleEditableText, objIAccessibleHyperlink,
 		objIAccessibleHypertext, /*objIAccessibleImage,*/ objIAccessibleTable2, objIAccessibleTableCell,
 		objIAccessibleText, objIAccessibleValue; /* objIAccessibleRelation is defined in Relation class */
 	IAccessible iaccessible;
@@ -60,6 +60,7 @@ public class Accessible {
 	Vector accessibleControlListeners = new Vector();
 	Vector accessibleTextListeners = new Vector ();
 	Vector accessibleActionListeners = new Vector();
+	Vector accessibleEditableTextListeners = new Vector();
 	Vector accessibleHyperlinkListeners = new Vector();
 	Vector accessibleTableListeners = new Vector();
 	Vector accessibleTableCellListeners = new Vector();
@@ -322,21 +323,20 @@ public class Accessible {
 //		};
 //	}
 
-	// This method is intentionally commented. We are not providing IAccessibleEditableText at this time.
-//	void createIAccessibleEditableText() {
-//		objIAccessibleEditableText = new COMObject(new int[] {2,0,0,2,2,2,2,1,3,3}) {
-//			public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
-//			public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
-//			public int /*long*/ method2(int /*long*/[] args) {return Release();}
-//			public int /*long*/ method3(int /*long*/[] args) {return copyText((int)/*64*/args[0], (int)/*64*/args[1]);}
-//			public int /*long*/ method4(int /*long*/[] args) {return deleteText((int)/*64*/args[0], (int)/*64*/args[1]);}
-//			public int /*long*/ method5(int /*long*/[] args) {return insertText((int)/*64*/args[0], args[1]);}
-//			public int /*long*/ method6(int /*long*/[] args) {return cutText((int)/*64*/args[0], (int)/*64*/args[1]);}
-//			public int /*long*/ method7(int /*long*/[] args) {return pasteText((int)/*64*/args[0]);}
-//			public int /*long*/ method8(int /*long*/[] args) {return replaceText((int)/*64*/args[0], (int)/*64*/args[1], args[2]);}
-//			public int /*long*/ method9(int /*long*/[] args) {return setAttributes((int)/*64*/args[0], (int)/*64*/args[1], args[2]);}
-//		};
-//	}
+	void createIAccessibleEditableText() {
+		objIAccessibleEditableText = new COMObject(new int[] {2,0,0,2,2,2,2,1,3,3}) {
+			public int /*long*/ method0(int /*long*/[] args) {return QueryInterface(args[0], args[1]);}
+			public int /*long*/ method1(int /*long*/[] args) {return AddRef();}
+			public int /*long*/ method2(int /*long*/[] args) {return Release();}
+			public int /*long*/ method3(int /*long*/[] args) {return copyText((int)/*64*/args[0], (int)/*64*/args[1]);}
+			public int /*long*/ method4(int /*long*/[] args) {return deleteText((int)/*64*/args[0], (int)/*64*/args[1]);}
+			public int /*long*/ method5(int /*long*/[] args) {return insertText((int)/*64*/args[0], args[1]);}
+			public int /*long*/ method6(int /*long*/[] args) {return cutText((int)/*64*/args[0], (int)/*64*/args[1]);}
+			public int /*long*/ method7(int /*long*/[] args) {return pasteText((int)/*64*/args[0]);}
+			public int /*long*/ method8(int /*long*/[] args) {return replaceText((int)/*64*/args[0], (int)/*64*/args[1], args[2]);}
+			public int /*long*/ method9(int /*long*/[] args) {return setAttributes((int)/*64*/args[0], (int)/*64*/args[1], args[2]);}
+		};
+	}
 
 	void createIAccessibleHyperlink() {
 		objIAccessibleHyperlink = new COMObject(new int[] {2,0,0,/*IAA>>*/1,1,2,4,2,2,/*<<IAA*/2,2,1,1,1}) {
@@ -626,10 +626,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -653,10 +653,37 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #removeAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void addAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.addElement(listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -680,10 +707,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -707,10 +734,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -734,10 +761,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -761,10 +788,10 @@ public class Accessible {
 	/**
 	 * Adds the listener to the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -974,10 +1001,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAction</code> interface.
+	 * defined in the <code>AccessibleActionListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAction</code> interface properties
+	 * is asked for <code>AccessibleActionListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1001,10 +1028,37 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleHyperlink</code> interface.
+	 * defined in the <code>AccessibleEditableTextListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleHyperlink</code> interface properties
+	 * is asked for <code>AccessibleEditableTextListener</code> interface properties
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleEditableTextListener
+	 * @see #addAccessibleEditableTextListener
+	 * 
+	 * @since 3.7
+	 */
+	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
+	    checkWidget();
+	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	    accessibleEditableTextListeners.removeElement(listener);
+	}
+	
+	/**
+	 * Removes the listener from the collection of listeners that will be
+	 * notified when an accessible client asks for any of the properties
+	 * defined in the <code>AccessibleHyperlinkListener</code> interface.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for <code>AccessibleHyperlinkListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1028,10 +1082,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTable</code> interface.
+	 * defined in the <code>AccessibleTableListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTable</code> interface properties
+	 * is asked for <code>AccessibleTableListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1055,10 +1109,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleTableCell</code> interface.
+	 * defined in the <code>AccessibleTableCellListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleTableCell</code> interface properties
+	 * is asked for <code>AccessibleTableCellListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1082,10 +1136,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleValue</code> interface.
+	 * defined in the <code>AccessibleValueListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleValue</code> interface properties
+	 * is asked for <code>AccessibleValueListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1109,10 +1163,10 @@ public class Accessible {
 	/**
 	 * Removes the listener from the collection of listeners that will be
 	 * notified when an accessible client asks for any of the properties
-	 * defined in the <code>AccessibleAttribute</code> interface.
+	 * defined in the <code>AccessibleAttributeListener</code> interface.
 	 *
 	 * @param listener the listener that should no longer be notified when the receiver
-	 * is asked for <code>AccessibleAttribute</code> interface properties
+	 * is asked for <code>AccessibleAttributeListener</code> interface properties
 	 *
 	 * @exception IllegalArgumentException <ul>
 	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
@@ -1160,6 +1214,7 @@ public class Accessible {
 	 *
 	 * @param event an <code>ACC</code> constant beginning with EVENT_* indicating the message to send
 	 * @param eventData an object containing event-specific data, or null if there is no event-specific data
+	 * (eventData is specified in the documentation for individual ACC.EVENT_* constants)
 	 * 
 	 * @exception SWTException <ul>
 	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
@@ -1519,10 +1574,9 @@ public class Accessible {
 //				objIAccessibleComponent.dispose();
 //			objIAccessibleComponent = null;
 
-			// The following lines are intentionally commented. We are not providing IAccessibleEditableText at this time.
-//			if (objIAccessibleEditableText != null)
-//				objIAccessibleEditableText.dispose();
-//			objIAccessibleEditableText = null;
+			if (objIAccessibleEditableText != null)
+				objIAccessibleEditableText.dispose();
+			objIAccessibleEditableText = null;
 
 			if (objIAccessibleHyperlink != null)
 				objIAccessibleHyperlink.dispose();
@@ -1653,13 +1707,12 @@ public class Accessible {
 		}
 		
 		if (COM.IsEqualGUID(guid, COM.IIDIAccessibleEditableText)) {
-			// The following lines are intentionally commented. We are not supporting IAccessibleEditableText at this time.
-//			if (accessibleEditableTextListeners.size() > 0) {
-//				if (objIAccessibleEditableText == null) createIAccessibleEditableText();
-//				COM.MoveMemory(ppvObject, new int /*long*/[] { objIAccessibleEditableText.getAddress() }, OS.PTR_SIZEOF);
-//				AddRef();
-//				return COM.S_OK;
-//			}
+			if (accessibleEditableTextListeners.size() > 0) {
+				if (objIAccessibleEditableText == null) createIAccessibleEditableText();
+				COM.MoveMemory(ppvObject, new int /*long*/[] { objIAccessibleEditableText.getAddress() }, OS.PTR_SIZEOF);
+				AddRef();
+				return COM.S_OK;
+			}
 			return COM.E_NOINTERFACE;
 		}
 		
@@ -2508,15 +2561,38 @@ public class Accessible {
 		return COM.E_NOTIMPL;
 	}
 	
-	// We may support this method with IAccessibleEditableText, but we are not providing IAccessibleEditableText at this time.
 	/* put_accValue([in] varChild, [in] szValue) */
 	int put_accValue(int /*long*/ varChild, int /*long*/ szValue) {
-		/* MSAA: this method is typically only used for edit controls. */
+		/* MSAA: this method is supported for some UI elements (usually edit controls). */
+		VARIANT v = getVARIANT(varChild);
+		if (v.vt != COM.VT_I4) return COM.E_INVALIDARG;
 		int code = COM.DISP_E_MEMBERNOTFOUND;
-		if (iaccessible != null) {
-			/* Currently, we don't expose this as API. Forward to the proxy. */
+		if (v.lVal == COM.CHILDID_SELF && accessibleEditableTextListeners.size() > 0) {
+			/*
+			 * If the object supports AccessibleEditableTextListener.replaceText,
+			 * then give the object a chance to handle this event.
+			 */
+			AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+			event.start = 0;
+			event.end = getCharacterCount();
+			if (event.end >= 0) {
+				int size = COM.SysStringByteLen(szValue);
+				char [] buffer = new char [(size + 1) / 2];
+				OS.MoveMemory (buffer, szValue, size);
+				event.string = new String (buffer);
+				for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+					AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+					listener.replaceText(event);
+				}
+				if (event.result != null && event.result.equals(ACC.OK)) code = COM.S_OK;
+				if (DEBUG) print(this + ".IAccessible::put_accValue(" + v.lVal + ", \"" + event.string + "\") returning " + hresult(code));
+			}
+		}
+		if (code != COM.S_OK && iaccessible != null) {
+			/* If the object did not handle the event, then forward to the proxy. */
 			code = iaccessible.put_accValue(varChild, szValue);
 			if (code == COM.E_INVALIDARG) code = COM.DISP_E_MEMBERNOTFOUND; // proxy doesn't know about app childID
+			if (DEBUG) print(this + ".IAccessible::put_accValue(" + v.lVal + ") returning " + hresult(code) + " from proxy");
 		}
 		return code;
 	}
@@ -3132,105 +3208,200 @@ public class Accessible {
 //		return COM.S_OK;
 //	}
 
-	// The following 7 method are intentionally commented. We are not providing IAccessibleEditableText at this time.
-//	/* IAccessibleEditableText::copyText([in] startOffset, [in] endOffset) */
-//	int copyText(int startOffset, int endOffset) {
-//		if (DEBUG) print(this + ".IAccessibleEditableText::copyText");
-//		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
-//		event.start = startOffset;
-//		event.end = endOffset;
-//		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
-//			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
-//			listener.copyText(event);
-//		}
-//		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
-//		return COM.S_OK;
-//	}
-//
-//	/* IAccessibleEditableText::deleteText([in] startOffset, [in] endOffset) */
-//	int deleteText(int startOffset, int endOffset) {
-//		if (DEBUG) print(this + ".IAccessibleEditableText::deleteText");
-//		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
-//		event.start = startOffset;
-//		event.end = endOffset;
-//		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
-//			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
-//			listener.deleteText(event);
-//		}
-//		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
-//		return COM.S_OK;
-//	}
-//
-//	/* IAccessibleEditableText::insertText([in] offset, [in] pbstrText) */
-//	int insertText(int offset, int /*long*/ pbstrText) {
-//		if (DEBUG) print(this + ".IAccessibleEditableText::insertText");
-//		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
-//		event.offset = offset;
-//		event.string = pbstrText;
-//		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
-//			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
-//			listener.insertText(event);
-//		}
-//		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
-//		return COM.S_OK;
-//	}
-//
-//	/* IAccessibleEditableText::cutText([in] startOffset, [in] endOffset) */
-//	int cutText(int startOffset, int endOffset) {
-//		if (DEBUG) print(this + ".IAccessibleEditableText::cutText");
-//		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
-//		event.start = startOffset;
-//		event.end = endOffset;
-//		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
-//			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
-//			listener.cutText(event);
-//		}
-//		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
-//		return COM.S_OK;
-//	}
-//
-//	/* IAccessibleEditableText::pasteText([in] offset) */
-//	int pasteText(int offset) {
-//		if (DEBUG) print(this + ".IAccessibleEditableText::pasteText");
-//		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
-//		event.offset = offset;
-//		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
-//			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
-//			listener.pasteText(event);
-//		}
-//		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
-//		return COM.S_OK;
-//	}
-//
-//	/* IAccessibleEditableText::replaceText([in] startOffset, [in] endOffset, [in] pbstrText) */
-//	int replaceText(int startOffset, int endOffset, int /*long*/ pbstrText) {
-//		if (DEBUG) print(this + ".IAccessibleEditableText::replaceText");
-//		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
-//		event.start = startOffset;
-//		event.end = endOffset;
-//		event.string = pbstrText;
-//		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
-//			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
-//			listener.replaceText(event);
-//		}
-//		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
-//		return COM.S_OK;
-//	}
-//
-//	/* IAccessibleEditableText::setAttributes([in] startOffset, [in] endOffset, [in] pbstrAttributes) */
-//	int setAttributes(int startOffset, int endOffset, int /*long*/ pbstrAttributes) {
-//		if (DEBUG) print(this + ".IAccessibleEditableText::setAttributes");
-//		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
-//		event.start = startOffset;
-//		event.end = endOffset;
-//		event.attributes = pbstrAttributes;
-//		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
-//			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
-//			listener.setAttributes(event);
-//		}
-//		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
-//		return COM.S_OK;
-//	}
+	/* IAccessibleEditableText::copyText([in] startOffset, [in] endOffset) */
+	int copyText(int startOffset, int endOffset) {
+		if (DEBUG) print(this + ".IAccessibleEditableText::copyText, start=" + startOffset + ", end=" + endOffset);
+		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+		event.start = startOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : startOffset;
+		event.end = endOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : endOffset;
+		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+			listener.copyText(event);
+		}
+		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
+		return COM.S_OK;
+	}
+
+	/* IAccessibleEditableText::deleteText([in] startOffset, [in] endOffset) */
+	int deleteText(int startOffset, int endOffset) {
+		if (DEBUG) print(this + ".IAccessibleEditableText::deleteText, start=" + startOffset + ", end=" + endOffset);
+		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+		event.start = startOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : startOffset;
+		event.end = endOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : endOffset;
+		event.string = "";
+		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+			listener.replaceText(event);
+		}
+		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
+		return COM.S_OK;
+	}
+
+	/* IAccessibleEditableText::insertText([in] offset, [in] pbstrText) */
+	int insertText(int offset, int /*long*/ pbstrText) {
+		if (DEBUG) print(this + ".IAccessibleEditableText::insertText, offset=" + offset + ", pbstrText=" + pbstrText);
+		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+		event.start = offset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : offset;
+		event.end = event.start;
+		event.string = getString(pbstrText);
+		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+			listener.replaceText(event);
+		}
+		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
+		return COM.S_OK;
+	}
+
+	/* IAccessibleEditableText::cutText([in] startOffset, [in] endOffset) */
+	int cutText(int startOffset, int endOffset) {
+		if (DEBUG) print(this + ".IAccessibleEditableText::cutText, start=" + startOffset + ", end=" + endOffset);
+		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+		event.start = startOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : startOffset;
+		event.end = endOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : endOffset;
+		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+			listener.cutText(event);
+		}
+		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
+		return COM.S_OK;
+	}
+
+	/* IAccessibleEditableText::pasteText([in] offset) */
+	int pasteText(int offset) {
+		if (DEBUG) print(this + ".IAccessibleEditableText::pasteText, offset=" + offset);
+		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+		event.start = offset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : offset;
+		event.end = event.start;
+		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+			listener.pasteText(event);
+		}
+		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
+		return COM.S_OK;
+	}
+
+	/* IAccessibleEditableText::replaceText([in] startOffset, [in] endOffset, [in] pbstrText) */
+	int replaceText(int startOffset, int endOffset, int /*long*/ pbstrText) {
+		if (DEBUG) print(this + ".IAccessibleEditableText::replaceText, start=" + startOffset + ", end=" + endOffset + ", pbstrText=" + pbstrText);
+		AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(this);
+		event.start = startOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : startOffset;
+		event.end = endOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : endOffset;
+		event.string = getString(pbstrText);
+		for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+			AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+			listener.replaceText(event);
+		}
+		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
+		return COM.S_OK;
+	}
+
+	/* IAccessibleEditableText::setAttributes([in] startOffset, [in] endOffset, [in] pbstrAttributes) */
+	int setAttributes(int startOffset, int endOffset, int /*long*/ pbstrAttributes) {
+		if (DEBUG) print(this + ".IAccessibleEditableText::setAttributes, start=" + startOffset + ", end=" + endOffset + ", pbstrAttributes=" + pbstrAttributes);
+		AccessibleTextAttributeEvent event = new AccessibleTextAttributeEvent(this);
+		String string = getString(pbstrAttributes);
+		if (string != null && string.length() > 0) {
+			event.start = startOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : startOffset;
+			event.end = endOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : endOffset;
+			TextStyle style = new TextStyle();
+			FontData fontData = null;
+			int points = 10; // used for default rise
+			String [] attributes = new String [0];
+			int begin = 0;
+			int end = string.indexOf(';');
+			while (end != -1 && end < string.length()) {
+				String keyValue = string.substring(begin, end).trim();
+				int colonIndex = keyValue.indexOf(':');
+				if (colonIndex != -1 && colonIndex + 1 < keyValue.length()) {
+					String [] newAttributes = new String [attributes.length + 2];
+					System.arraycopy (attributes, 0, newAttributes, 0, attributes.length);
+					newAttributes[attributes.length] = keyValue.substring(0, colonIndex).trim();
+					newAttributes[attributes.length + 1] = keyValue.substring(colonIndex + 1).trim();
+					attributes = newAttributes;
+				}
+				begin = end + 1;
+				end = string.indexOf(';', begin);
+			}
+			for (int i = 0; i+1 < attributes.length; i+=2) {
+				String key = attributes[i];
+				String value = attributes[i+1];
+				if (key.equals("text-position")) {
+					if (value.equals("super")) style.rise = points / 2;
+					else if (value.equals("sub")) style.rise = - points / 2;
+				} else if (key.equals("text-underline-type")) {
+					style.underline = true;
+					if (value.equals("double")) style.underlineStyle = SWT.UNDERLINE_DOUBLE;
+					else if (value.equals("single")) {
+						if (style.underlineStyle != SWT.UNDERLINE_SQUIGGLE && style.underlineStyle != SWT.UNDERLINE_ERROR) {
+							style.underlineStyle = SWT.UNDERLINE_SINGLE;
+						}
+					}
+				} else if (key.equals("text-underline-style") && value.equals("wave")) {
+					style.underline = true;
+					style.underlineStyle = SWT.UNDERLINE_SQUIGGLE;
+				} else if (key.equals("invalid") && value.equals("true")) {
+					style.underline = true;
+					style.underlineStyle = SWT.UNDERLINE_ERROR;
+				} else if (key.equals("text-line-through-type")) {
+					if (value.equals("single")) style.strikeout = true;
+				} else if (key.equals("font-family")) {
+					if (fontData == null) fontData = new FontData ();
+					fontData.setName(value);
+				} else if (key.equals("font-size")) {
+					try {
+						String pts = value.endsWith("pt") ? value.substring(0, value.length() - 2) : value;
+						points = Integer.parseInt(pts);
+						if (fontData == null) fontData = new FontData ();
+						fontData.setHeight(points);
+						if (style.rise > 0) style.rise = points / 2;
+						else if (style.rise < 0) style.rise = - points / 2;
+					} catch (NumberFormatException ex) {}
+				} else if (key.equals("font-style")) {
+					if (value.equals("italic")) {
+						if (fontData == null) fontData = new FontData ();
+						fontData.setStyle(fontData.getStyle() | SWT.ITALIC);
+					}
+				} else if (key.equals("font-weight")) {
+					if (value.equals("bold")) {
+						if (fontData == null) fontData = new FontData ();
+						fontData.setStyle(fontData.getStyle() | SWT.BOLD);
+					} else {
+						try {
+							int weight = Integer.parseInt(value);
+							if (fontData == null) fontData = new FontData ();
+							if (weight > 400) fontData.setStyle(fontData.getStyle() | SWT.BOLD);
+						} catch (NumberFormatException ex) {}
+					}
+				} else if (key.equals("color")) {
+					style.foreground = colorFromString(value);
+				} else if (key.equals("background-color")) {
+					style.background = colorFromString(value);
+				}
+			}
+			if (attributes.length > 0) {
+				event.attributes = attributes;
+				if (fontData != null) {
+					style.font = new Font(control.getDisplay(), fontData);
+				}
+				if (!style.equals(new TextStyle())) event.textStyle = style;
+			}
+			for (int i = 0; i < accessibleEditableTextListeners.size(); i++) {
+				AccessibleEditableTextListener listener = (AccessibleEditableTextListener) accessibleEditableTextListeners.elementAt(i);
+				listener.setTextAttributes(event);
+			}
+			if (style.font != null) {
+				style.font.dispose();
+			}
+			if (style.foreground != null) {
+				style.foreground.dispose();
+			}
+			if (style.background != null) {
+				style.background.dispose();
+			}
+		}
+		if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG;
+		return COM.S_OK;
+	}
 
 	/* IAccessibleHyperlink::get_anchor([in] index, [out] pAnchor) */
 	int get_anchor(int index, int /*long*/ pAnchor) {
@@ -3890,7 +4061,7 @@ public class Accessible {
 				// style.underlineColor is not currently part of the IA2 spec. If provided, it would be "text-underline-color:rgb(n,n,n);"
 			}
 			if (style.strikeout) {
-				textAttributes += "text-line-through-type:single";
+				textAttributes += "text-line-through-type:single;";
 				// style.strikeoutColor is not currently part of the IA2 spec. If provided, it would be "text-line-through-color:rgb(n,n,n);"
 			}
 			Font font = style.font;
@@ -3932,6 +4103,7 @@ public class Accessible {
 		return COM.S_OK;
 	}
 
+	/* IAccessibleText::get_characterExtents([in] offset, [in] coordType, [out] pX, [out] pY, [out] pWidth, [out] pHeight) */
 	int get_characterExtents(int offset, int coordType, int /*long*/ pX, int /*long*/ pY, int /*long*/ pWidth, int /*long*/ pHeight) {
 		int length = getCharacterCount();
 		AccessibleTextEvent event = new AccessibleTextEvent(this);
@@ -4611,6 +4783,23 @@ public class Accessible {
 		return ACC.ROLE_CLIENT_AREA;
 	}
 
+	/*
+	 * Return a Color given a string of the form "rgb(n,n,n)".
+	 */
+	Color colorFromString(String rgbString) {
+		try {
+			int open = rgbString.indexOf('(');
+			int comma1 = rgbString.indexOf(',');
+			int comma2 = rgbString.indexOf(',', comma1 + 1);
+			int close = rgbString.indexOf(')');
+			int r = Integer.parseInt(rgbString.substring(open + 1, comma1));
+			int g = Integer.parseInt(rgbString.substring(comma1 + 1, comma2));
+			int b = Integer.parseInt(rgbString.substring(comma2 + 1, close));
+			return new Color(control.getDisplay(), r, g, b);
+		} catch (NumberFormatException ex) {}
+		return null;
+	}
+
 	int getCaretOffset() {
 		AccessibleTextEvent event = new AccessibleTextEvent(this);
 		event.offset = -1;
@@ -4628,7 +4817,6 @@ public class Accessible {
 		return event.offset;
 	}
 
-	/* IAccessibleText::get_characterExtents([in] offset, [in] coordType, [out] pX, [out] pY, [out] pWidth, [out] pHeight) */
 	int getCharacterCount() {
 		AccessibleTextEvent event = new AccessibleTextEvent(this);
 		event.count = -1;
@@ -4687,6 +4875,16 @@ public class Accessible {
 		return role;
 	}
 
+	String getString(int /*long*/ psz) {
+		int /*long*/ [] ptr = new int /*long*/ [1];
+		OS.MoveMemory (ptr, psz, OS.PTR_SIZEOF);
+		int size = COM.SysStringByteLen(ptr [0]);
+		if (size == 0) return "";
+		char [] buffer = new char [(size + 1) / 2];
+		OS.MoveMemory (buffer, ptr [0], size);
+		return new String (buffer);
+	}
+	
 	VARIANT getVARIANT(int /*long*/ variant) {
 		VARIANT v = new VARIANT();
 		COM.MoveMemory(v, variant, VARIANT.sizeof);
@@ -5145,7 +5343,7 @@ public class Accessible {
 		if (COM.IsEqualGUID(guid, IIDIAccPropServer)) return "IIDIAccPropServer";
 		if (COM.IsEqualGUID(guid, IIDIAccPropServices)) return "IIDIAccPropServices";
 		}
-		return StringFromIID(guid);
+		return guid.toString();
 	}
 	static GUID IIDFromString(String lpsz) {
 		if (DEBUG) {
@@ -5157,22 +5355,6 @@ public class Accessible {
 		}
 		return null;
 	}
-	static String StringFromIID(GUID guid) {
-		return '{' + toHex(guid.Data1, 8) + "-" + 
-        toHex(guid.Data2, 4) + "-" + 
-        toHex(guid.Data3, 4) + "-" + 
-        toHex(guid.Data4[0], 2) + toHex(guid.Data4[1], 2) + "-" + 
-        toHex(guid.Data4[2], 2) + toHex(guid.Data4[3], 2) + toHex(guid.Data4[4], 2) + toHex(guid.Data4[5], 2) + toHex(guid.Data4[6], 2) + toHex(guid.Data4[7], 2) + '}';
-	}
-	static final String zeros = "00000000";
-	static String toHex(int v, int length) {
-		String t = Integer.toHexString(v).toUpperCase();
-		int tlen = t.length();
-		if (tlen > length) {
-			t = t.substring(tlen - length);
-		}
-		return zeros.substring(0, Math.max(0, length - tlen)) + t;
-	}
 	public String toString () {
 		String toString = super.toString();
 		if (DEBUG) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..3944cfb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import org.eclipse.swt.SWT;
+
+class BrowserFactory {
+
+WebBrowser createWebBrowser (int style) {
+	if ((style & SWT.MOZILLA) != 0) {
+		return new Mozilla ();
+	}
+	return new WebKit ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Safari.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Safari.java
deleted file mode 100644
index 21fe561..0000000
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Safari.java	
+++ /dev/null
@@ -1,2204 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.browser;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Enumeration;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.internal.*;
-import org.eclipse.swt.internal.carbon.*;
-import org.eclipse.swt.internal.cocoa.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class Safari extends WebBrowser {
-	
-	/* Objective-C WebView delegate */
-	int delegate;
-	
-	/* Carbon HIView handle */
-	int webViewHandle, webView;
-	int windowBoundsHandler;
-	int preferences;
-	
-	boolean loadingText, hasNewFocusElement, untrustedText;
-	String lastHoveredLinkURL, lastNavigateURL;
-	String html;
-	int identifier;
-	int resourceCount;
-	int lastMouseMoveX, lastMouseMoveY;
-	String url = ""; //$NON-NLS-1$
-	Point location;
-	Point size;
-	boolean statusBar = true, toolBar = true, ignoreDispose;
-	//TEMPORARY CODE
-//	boolean doit;
-
-	static boolean Initialized;
-	static Callback Callback3, Callback7;
-
-	static final int MIN_SIZE = 16;
-	static final int MAX_PROGRESS = 100;
-	static final String WebElementLinkURLKey = "WebElementLinkURL"; //$NON-NLS-1$
-	static final String AGENT_STRING = "Safari/412.0"; /* Safari version on OSX 10.4 initial release */ //$NON-NLS-1$
-	static final String URI_FILEROOT = "file:///"; //$NON-NLS-1$
-	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
-	static final String PROTOCOL_HTTP = "http://"; //$NON-NLS-1$
-	static final String URI_APPLEWEBDATA = "applewebdata://"; //$NON-NLS-1$
-	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
-	static final String HEADER_SETCOOKIE = "Set-Cookie"; //$NON-NLS-1$
-	static final String POST = "POST"; //$NON-NLS-1$
-	static final String USER_AGENT = "user-agent"; //$NON-NLS-1$
-	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
-	static final String BROWSER_WINDOW = "org.eclipse.swt.browser.Browser.Window"; //$NON-NLS-1$
-	static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$
-
-	/* event strings */
-	static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$
-	static final String DOMEVENT_KEYDOWN = "keydown"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEDOWN = "mousedown"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEUP = "mouseup"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEMOVE = "mousemove"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEWHEEL = "mousewheel"; //$NON-NLS-1$
-	static final String DOMEVENT_FOCUSIN = "DOMFocusIn"; //$NON-NLS-1$
-	static final String DOMEVENT_FOCUSOUT = "DOMFocusOut"; //$NON-NLS-1$
-
-	static {
-		Cocoa.WebInitForCarbon();
-
-		NativeClearSessions = new Runnable() {
-			public void run() {
-				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
-				int cookies = Cocoa.objc_msgSend (storage, Cocoa.S_cookies);
-				int count = Cocoa.objc_msgSend (cookies, Cocoa.S_count);
-				for (int i = 0; i < count; i++) {
-					int cookie = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, i);
-					boolean isSession = Cocoa.objc_msgSend (cookie, Cocoa.S_isSessionOnly) != 0;
-					if (isSession) {
-						Cocoa.objc_msgSend (storage, Cocoa.S_deleteCookie, cookie);
-					}
-				}
-			}
-		};
-
-		NativeGetCookie = new Runnable () {
-			public void run () {
-				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
-				int urlString = createNSString (CookieUrl);
-				int url = Cocoa.objc_msgSend (Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString);
-				OS.CFRelease (urlString);
-				int cookies = Cocoa.objc_msgSend (storage, Cocoa.S_cookiesForURL, url);
-				int count = Cocoa.objc_msgSend (cookies, Cocoa.S_count);
-				if (count == 0) return;
-
-				int name = createNSString (CookieName);
-				for (int i = 0; i < count; i++) {
-					int current = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, i);
-					int currentName = Cocoa.objc_msgSend (current, Cocoa.S_name);
-					if (Cocoa.objc_msgSend (currentName, Cocoa.S_compare, name) == Cocoa.NSOrderedSame) {
-						int value = Cocoa.objc_msgSend (current, Cocoa.S_value);
-						int length = OS.CFStringGetLength (value);
-						char[] buffer = new char[length];
-						CFRange range = new CFRange ();
-						range.length = length;
-						OS.CFStringGetCharacters (value, range, buffer);
-						CookieValue = new String (buffer);
-						OS.CFRelease (name);
-						return;
-					}
-				}
-				OS.CFRelease (name);
-			}
-		};
-
-		NativeSetCookie = new Runnable () {
-			public void run () {
-				int urlString = createNSString(CookieUrl);
-				int url = Cocoa.objc_msgSend (Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString);
-				OS.CFRelease (urlString);
-
-				int value = createNSString (CookieValue);
-				int key = createNSString (HEADER_SETCOOKIE);
-				int headers = Cocoa.objc_msgSend (Cocoa.C_NSMutableDictionary, Cocoa.S_dictionaryWithCapacity, 1);
-				Cocoa.objc_msgSend (headers, Cocoa.S_setValue, value, key);
-				OS.CFRelease (key);
-				OS.CFRelease (value);
-
-				int cookies = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookie, Cocoa.S_cookiesWithResponseHeaderFields, headers, url);
-				if (Cocoa.objc_msgSend (cookies, Cocoa.S_count) == 0) return;
-				int cookie = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, 0);
-				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
-				Cocoa.objc_msgSend (storage, Cocoa.S_setCookie, cookie);
-				CookieResult = true;
-			}
-		};
-
-		if (NativePendingCookies != null) {
-			SetPendingCookies (NativePendingCookies);
-		}
-		NativePendingCookies = null;
-	}
-
-public boolean create (Composite parent, int style) {
-	/*
-	* Note.  Loading the webkit bundle on Jaguar causes a crash.
-	* The workaround is to detect any OS prior to 10.30 and fail
-	* without crashing.
-	*/
-	if (OS.VERSION < 0x1030) {
-		browser.dispose();
-		SWT.error(SWT.ERROR_NO_HANDLES);
-	}
-	
-	/*
-	* Bug in Safari on OSX 10.5 (Leopard) only.  VoiceOver no longer follows focus when
-	* HIWebViewCreate is used to create a WebView.  The VoiceOver cursor (activated by
-	* Control+Alt+arrows) continues to work, but keyboard focus is not tracked.  The fix
-	* is to create the WebView with HICocoaViewCreate (api introduced in OSX 10.5) when
-	* running on OSX 10.5.
-	*/
-	int outControl[] = new int[1];
-	if (OS.VERSION >= 0x1050) {
-		webView = Cocoa.objc_msgSend(Cocoa.objc_msgSend(Cocoa.C_WebView, Cocoa.S_alloc), Cocoa.S_initWithFrame_frameName_groupName, new NSRect(), 0, 0);
-		if (webView != 0) {
-			Cocoa.HICocoaViewCreate(webView, 0, outControl);
-			webViewHandle = outControl[0];
-			Cocoa.objc_msgSend(webView, Cocoa.S_release);
-		}
-	} else {
-		Cocoa.HIWebViewCreate(outControl);
-		webViewHandle = outControl[0];
-		if (webViewHandle != 0) {
-			webView = Cocoa.HIWebViewGetWebView(webViewHandle);
-		}
-	}
-	if (webViewHandle == 0) {
-		browser.dispose();
-		SWT.error(SWT.ERROR_NO_HANDLES);
-	}
-
-	Display display = browser.getDisplay();
-	display.setData(ADD_WIDGET_KEY, new Object[] {new Integer(webViewHandle), browser});
-
-	/*
-	* WebKit's DOM listener api became functional in OSX 10.4.  If OSX 10.4 or 
-	* later is detected then override the default event mechanism to not send key
-	* events and some mouse events so that the browser can send them by listening
-	* to the DOM instead.
-	*/
-	if (!(OS.VERSION < 0x1040)) {
-		browser.setData(SAFARI_EVENTS_FIX_KEY);
-	}
-
-	/*
-	* Bug in Safari.  For some reason, every application must contain
-	* a visible window that has never had a WebView or mouse move events
-	* are not delivered.  This seems to happen after a browser has been
-	* either hidden or disposed in any window.  The fix is to create a
-	* single transparent overlay window that is disposed when the display
-	* is disposed.
-	*/
-	if (display.getData(BROWSER_WINDOW) == null) {
-		Rect bounds = new Rect ();
-		OS.SetRect (bounds, (short) 0, (short) 0, (short) 1, (short) 1);
-		final int[] outWindow = new int[1];
-		OS.CreateNewWindow(OS.kOverlayWindowClass, 0, bounds, outWindow);
-		OS.ShowWindow(outWindow[0]);
-		OS.HIObjectSetAccessibilityIgnored (outWindow[0], true);
-		display.disposeExec(new Runnable() {
-			public void run() {
-				if (outWindow[0] != 0) {
-					OS.DisposeWindow(outWindow[0]);
-				}
-				outWindow[0] = 0;
-			}
-		});
-		display.setData(BROWSER_WINDOW, outWindow);
-	}
-	
-	/*
-	* Bug in Safari. The WebView does not draw properly if it is embedded as
-	* sub view of the browser handle.  The fix is to add the web view to the
-	* window root control and resize it on top of the browser handle.
-	* 
-	* Note that when the browser is reparented, the web view has to
-	* be reparented by hand by hooking kEventControlOwningWindowChanged.
-	*/
-	int window = OS.GetControlOwner(browser.handle);
-	int[] contentView = new int[1];
-	OS.HIViewFindByID(OS.HIViewGetRoot(window), OS.kHIViewWindowContentID(), contentView);
-	OS.HIViewAddSubview(contentView[0], webViewHandle);
-	OS.HIViewChangeFeatures(webViewHandle, OS.kHIViewFeatureIsOpaque, 0);
-
-	/*
-	* Bug in Safari. The WebView does not receive mouse and key events when it is added
-	* to a visible top window.  It is assumed that Safari hooks its own event listener
-	* when the top window emits the kEventWindowShown event. The workaround is to send a
-	* fake kEventWindowShown event to the top window after the WebView has been added
-	* to the HIView (after the top window is visible) to give Safari a chance to hook
-	* events.
-	*/
-	OS.HIViewSetVisible(webViewHandle, true);	
-	if (browser.getShell().isVisible()) {
-		int[] showEvent = new int[1];
-		OS.CreateEvent(0, OS.kEventClassWindow, OS.kEventWindowShown, 0.0, OS.kEventAttributeUserEvent, showEvent);
-		OS.SetEventParameter(showEvent[0], OS.kEventParamDirectObject, OS.typeWindowRef, 4, new int[] {OS.GetControlOwner(browser.handle)});
-		OS.SendEventToEventTarget(showEvent[0], OS.GetWindowEventTarget(window));
-		if (showEvent[0] != 0) OS.ReleaseEvent(showEvent[0]);
-	}
-
-	/*
-	* This code is intentionally commented. Setting a group name is the right thing
-	* to do in order to avoid multiple open window requests. For some reason, Safari
-	* crashes when requested to reopen the same window if that window was previously
-	* closed. This may be because that window was not correctly closed. 
-	*/	
-//	String groupName = "MyDocument"; //$NON-NLS-1$
-//	int length = groupName.length();
-//	char[] buffer = new char[length];
-//	groupName.getChars(0, length, buffer, 0);
-//	int groupNameString = OS.CFStringCreateWithCharacters(0, buffer, length);
-//	// [webView setGroupName:@"MyDocument"];
-//	WebKit.objc_msgSend(webView, WebKit.S_setGroupName, groupNameString);
-//	OS.CFRelease(groupNameString);
-	
-	final int notificationCenter = Cocoa.objc_msgSend(Cocoa.C_NSNotificationCenter, Cocoa.S_defaultCenter);
-
-	Listener listener = new Listener() {
-		public void handleEvent(Event e) {
-			switch (e.type) {
-				case SWT.Dispose: {
-					/* make this handler run after other dispose listeners */
-					if (ignoreDispose) {
-						ignoreDispose = false;
-						break;
-					}
-					ignoreDispose = true;
-					browser.notifyListeners (e.type, e);
-					e.type = SWT.NONE;
-
-					/* invoke onbeforeunload handlers */
-					if (!browser.isClosing && !browser.isDisposed()) {
-						close (false);
-					}
-
-					OS.RemoveEventHandler(windowBoundsHandler);
-					windowBoundsHandler = 0;
-
-					e.display.setData(ADD_WIDGET_KEY, new Object[] {new Integer(webViewHandle), null});
-
-					Cocoa.objc_msgSend(webView, Cocoa.S_setFrameLoadDelegate, 0);
-					Cocoa.objc_msgSend(webView, Cocoa.S_setResourceLoadDelegate, 0);
-					Cocoa.objc_msgSend(webView, Cocoa.S_setUIDelegate, 0);
-					Cocoa.objc_msgSend(webView, Cocoa.S_setPolicyDelegate, 0);
-					Cocoa.objc_msgSend(webView, Cocoa.S_setDownloadDelegate, 0);
-					Cocoa.objc_msgSend(notificationCenter, Cocoa.S_removeObserver, delegate);
-					
-					Cocoa.objc_msgSend(delegate, Cocoa.S_release);
-					OS.DisposeControl(webViewHandle);
-					webView = webViewHandle = 0;
-					html = null;
-					lastHoveredLinkURL = lastNavigateURL = null;
-
-					Enumeration elements = functions.elements ();
-					while (elements.hasMoreElements ()) {
-						((BrowserFunction)elements.nextElement ()).dispose (false);
-					}
-					functions = null;
-
-					if (preferences != 0) {
-						Cocoa.objc_msgSend (preferences, Cocoa.S_release);
-					}
-					preferences = 0;
-					break;
-				}
-				case SWT.FocusIn: {
-					hasNewFocusElement = true;
-					OS.SetKeyboardFocus(OS.GetControlOwner(browser.handle), webViewHandle, (short)-1);
-					break;
-				}
-			}
-		}
-	};
-	browser.addListener(SWT.Dispose, listener);
-	browser.addListener(SWT.FocusIn, listener);
-	browser.addListener(SWT.KeyDown, listener); /* needed to make browser traversable */
-	
-	if (Callback3 == null) Callback3 = new Callback(this.getClass(), "eventProc3", 3); //$NON-NLS-1$
-	int callback3Address = Callback3.getAddress();
-	if (callback3Address == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
-
-	int[] mask = new int[] {
-		OS.kEventClassKeyboard, OS.kEventRawKeyDown,
-		OS.kEventClassControl, OS.kEventControlDraw,
-		OS.kEventClassControl, OS.kEventControlGetClickActivation,
-		OS.kEventClassControl, OS.kEventControlSetCursor,
-		OS.kEventClassTextInput, OS.kEventTextInputUnicodeForKeyEvent,
-	};
-	OS.InstallEventHandler(OS.GetControlEventTarget(webViewHandle), callback3Address, mask.length / 2, mask, webViewHandle, null);
-	int[] mask1 = new int[] {
-		OS.kEventClassControl, OS.kEventControlBoundsChanged,
-		OS.kEventClassControl, OS.kEventControlVisibilityChanged,
-		OS.kEventClassControl, OS.kEventControlOwningWindowChanged,
-	};
-	OS.InstallEventHandler(OS.GetControlEventTarget(browser.handle), callback3Address, mask1.length / 2, mask1, browser.handle, null);
-	int[] mask2 = new int[] {
-		OS.kEventClassWindow, OS.kEventWindowBoundsChanged,
-	};
-	int[] outRef = new int[1];
-	OS.InstallEventHandler(OS.GetWindowEventTarget(window), callback3Address, mask2.length / 2, mask2, browser.handle, outRef);
-	windowBoundsHandler = outRef[0];
-
-	if (Callback7 == null) Callback7 = new Callback(this.getClass(), "eventProc7", 7); //$NON-NLS-1$
-	int callback7Address = Callback7.getAddress();
-	if (callback7Address == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
-	
-	// delegate = [[WebResourceLoadDelegate alloc] init eventProc];
-	delegate = Cocoa.objc_msgSend(Cocoa.C_WebKitDelegate, Cocoa.S_alloc);
-	delegate = Cocoa.objc_msgSend(delegate, Cocoa.S_initWithProc, callback7Address, webViewHandle);
-
-	// [webView setFrameLoadDelegate:delegate];
-	Cocoa.objc_msgSend(webView, Cocoa.S_setFrameLoadDelegate, delegate);
-		
-	// [webView setResourceLoadDelegate:delegate];
-	Cocoa.objc_msgSend(webView, Cocoa.S_setResourceLoadDelegate, delegate);
-
-	// [webView setUIDelegate:delegate];
-	Cocoa.objc_msgSend(webView, Cocoa.S_setUIDelegate, delegate);
-	
-	/* register delegate for all notifications sent out from webview */
-	Cocoa.objc_msgSend(notificationCenter, Cocoa.S_addObserver_selector_name_object, delegate, Cocoa.S_handleNotification, 0, webView);
-	
-	// [webView setPolicyDelegate:delegate];
-	Cocoa.objc_msgSend(webView, Cocoa.S_setPolicyDelegate, delegate);
-
-	// [webView setDownloadDelegate:delegate];
-	Cocoa.objc_msgSend(webView, Cocoa.S_setDownloadDelegate, delegate);
-
-	// [webView setApplicationNameForUserAgent:applicationName];
-	int sHandle = createNSString(AGENT_STRING);
-	Cocoa.objc_msgSend(webView, Cocoa.S_setApplicationNameForUserAgent, sHandle);
-	OS.CFRelease(sHandle);
-
-	if (OS.VERSION < 0x1050 && display.getActiveShell() == browser.getShell()) {
-		Cocoa.objc_msgSend(Cocoa.objc_msgSend(webView, Cocoa.S_window), Cocoa.S_makeKeyWindow);
-	}
-
-	if (!Initialized) {
-		Initialized = true;
-		/* disable applets */
-		int preferences = Cocoa.objc_msgSend(Cocoa.C_WebPreferences, Cocoa.S_standardPreferences);
-		Cocoa.objc_msgSend(preferences, Cocoa.S_setJavaEnabled, 0);
-	}
-
-	return true;
-}
-
-static int eventProc3(int nextHandler, int theEvent, int userData) {
-	Widget widget = Display.getCurrent().findWidget(userData);
-	if (widget instanceof Browser) {
-		return ((Safari)((Browser)widget).webBrowser).handleCallback(nextHandler, theEvent);
-	}
-	return OS.eventNotHandledErr;
-}
-
-static int eventProc7(int webview, int userData, int selector, int arg0, int arg1, int arg2, int arg3) {
-	Widget widget = Display.getCurrent().findWidget(userData);
-	if (widget instanceof Browser) {
-		return ((Safari)((Browser)widget).webBrowser).handleCallback(selector, arg0, arg1, arg2, arg3);
-	}
-	return 0;
-}
-
-static int createNSString(String string) {
-	int length = string.length ();
-	char[] buffer = new char[length];
-	string.getChars (0, length, buffer, 0);
-	return OS.CFStringCreateWithCharacters (0, buffer, length);
-}
-
-static String getString (int ptr) {
-	int length = OS.CFStringGetLength (ptr);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange ();
-	range.length = length;
-	OS.CFStringGetCharacters (ptr, range, buffer);
-	return new String (buffer);
-}
-
-public boolean back() {
-	html = null;
-	return Cocoa.objc_msgSend(webView, Cocoa.S_goBack) != 0;
-}
-
-public boolean close () {
-	return close (true);
-}
-
-boolean close (boolean showPrompters) {
-	if (!jsEnabled) return true;
-
-	String functionName = EXECUTE_ID + "CLOSE"; // $NON-NLS-1$
-	StringBuffer buffer = new StringBuffer ("function "); // $NON-NLS-1$
-	buffer.append (functionName);
-	buffer.append ("(win) {\n"); // $NON-NLS-1$
-	buffer.append ("var fn = win.onbeforeunload; if (fn != null) {try {var str = fn(); "); // $NON-NLS-1$
-	if (showPrompters) {
-		buffer.append ("if (str != null) { "); // $NON-NLS-1$
-		buffer.append ("var result = window.external.callRunBeforeUnloadConfirmPanelWithMessage(str);"); // $NON-NLS-1$
-		buffer.append ("if (!result) return false;}"); // $NON-NLS-1$
-	}	
-	buffer.append ("} catch (e) {}}"); // $NON-NLS-1$
-	buffer.append ("try {for (var i = 0; i < win.frames.length; i++) {var result = "); // $NON-NLS-1$
-	buffer.append (functionName);
-	buffer.append ("(win.frames[i]); if (!result) return false;}} catch (e) {} return true;"); // $NON-NLS-1$
-	buffer.append ("\n};"); // $NON-NLS-1$
-	execute (buffer.toString ());
-
-	Boolean result = (Boolean)evaluate ("return " + functionName +"(window);"); // $NON-NLS-1$ // $NON-NLS-2$
-	if (result == null) return false;
-	return result.booleanValue ();
-}
-
-public boolean execute(String script) {
-	int frame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-	int context = Cocoa.objc_msgSend(frame, Cocoa.S_globalContext);
-
-	byte[] bytes = null;
-	try {
-		bytes = (script + '\0').getBytes("UTF-8"); //$NON-NLS-1$
-	} catch (UnsupportedEncodingException e) {
-		bytes = (script + '\0').getBytes();
-	}
-	int scriptString = OS.JSStringCreateWithUTF8CString(bytes);
-
-	try {
-		bytes = (getUrl() + '\0').getBytes("UTF-8"); //$NON-NLS-1$
-	} catch (UnsupportedEncodingException e) {
-		bytes = (getUrl() + '\0').getBytes();
-	}
-	int urlString = OS.JSStringCreateWithUTF8CString(bytes);
-
-	int result = OS.JSEvaluateScript(context, scriptString, 0, urlString, 0, null);
-	OS.JSStringRelease(urlString);
-	OS.JSStringRelease(scriptString);
-	return result != 0;
-}
-
-public boolean forward() {
-	html = null;
-	return Cocoa.objc_msgSend(webView, Cocoa.S_goForward) != 0;
-}
-
-public String getBrowserType () {
-	return "webkit"; //$NON-NLS-1$
-}
-
-public String getText() {
-	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-	int dataSource = Cocoa.objc_msgSend(mainFrame, Cocoa.S_dataSource);
-	if (dataSource == 0) return "";	//$NON-NLS-1$
-	int representation = Cocoa.objc_msgSend(dataSource, Cocoa.S_representation);
-	if (representation == 0) return "";	//$NON-NLS-1$
-	int source = Cocoa.objc_msgSend(representation, Cocoa.S_documentSource);
-	if (source == 0) return "";	//$NON-NLS-1$
-	int length = OS.CFStringGetLength(source);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(source, range, buffer);
-	return new String(buffer);
-}
-
-public String getUrl() {
-	/* WebKit auto-navigates to about:blank at startup */
-	if (url.length() == 0) return ABOUT_BLANK;
-
-	return url;
-}
-
-int handleCallback(int nextHandler, int theEvent) {
-	int eventKind = OS.GetEventKind(theEvent);
-	switch (OS.GetEventClass(theEvent)) {
-		case OS.kEventClassControl:
-			switch (eventKind) {
-				case OS.kEventControlGetClickActivation: {
-					OS.SetEventParameter (theEvent, OS.kEventParamClickActivation, OS.typeClickActivationResult, 4, new int [] {OS.kActivateAndHandleClick});
-					return OS.noErr;
-				}
-				case OS.kEventControlSetCursor: {
-					return OS.noErr;
-				}
-				case OS.kEventControlDraw: {
-					/*
-					 * Bug on Safari. The web view cannot be obscured by other views above it.
-					 * This problem is specified in the apple documentation for HiWebViewCreate.
-					 * The workaround is to don't draw the web view when it is not visible.
-					 */
-					if (!browser.isVisible ()) return OS.noErr;
-					break;
-				}
-				case OS.kEventControlOwningWindowChanged: {
-					/* Reparent the web view handler */
-					int window = OS.GetControlOwner(browser.handle);
-					int[] contentView = new int[1];
-					OS.HIViewFindByID(OS.HIViewGetRoot(window), OS.kHIViewWindowContentID(), contentView);
-					OS.HIViewAddSubview(contentView[0], webViewHandle);
-					
-					/* Reset the kEventWindowBoundsChanged handler */
-					OS.RemoveEventHandler(windowBoundsHandler);
-					int[] mask2 = new int[] {
-						OS.kEventClassWindow, OS.kEventWindowBoundsChanged,
-					};
-					int[] outRef = new int[1];
-					OS.InstallEventHandler(OS.GetWindowEventTarget(window), Callback3.getAddress(), mask2.length / 2, mask2, browser.handle, outRef);
-					windowBoundsHandler = outRef[0];
-					break;
-				}
-				case OS.kEventControlBoundsChanged:
-				case OS.kEventControlVisibilityChanged: {
-					/*
-					 * Bug on Safari. The web view cannot be obscured by other views above it.
-					 * This problem is specified in the apple documentation for HiWebViewCreate.
-					 * The workaround is to hook kEventControlVisibilityChanged on the browser
-					 * and move the browser out of the screen when hidden and restore its bounds
-					 * when shown.
-					 */
-					CGRect bounds = new CGRect();
-					if (!browser.isVisible()) {
-						bounds.x = bounds.y = -MIN_SIZE;
-						bounds.width = bounds.height = MIN_SIZE;
-						OS.HIViewSetFrame(webViewHandle, bounds);
-					} else {
-						OS.HIViewGetBounds(browser.handle, bounds);
-						int[] contentView = new int[1];
-						OS.HIViewFindByID(OS.HIViewGetRoot(OS.GetControlOwner(browser.handle)), OS.kHIViewWindowContentID(), contentView);
-						OS.HIViewConvertRect(bounds, browser.handle, contentView[0]);
-						/* 
-						* Bug in Safari.  For some reason, the web view will display incorrectly or
-						* blank depending on its contents, if its size is set to a value smaller than
-						* MIN_SIZE. It will not display properly even after the size is made larger.
-						* The fix is to avoid setting sizes smaller than MIN_SIZE. 
-						*/
-						if (bounds.width <= MIN_SIZE) bounds.width = MIN_SIZE;
-						if (bounds.height <= MIN_SIZE) bounds.height = MIN_SIZE;
-						OS.HIViewSetFrame(webViewHandle, bounds);
-					}
-					break;
-				}
-			}
-		case OS.kEventClassWindow:
-			switch (eventKind) {
-				case OS.kEventWindowBoundsChanged:
-					/*
-					 * Bug on Safari. Resizing the height of a Shell containing a Browser at
-					 * a fixed location causes the Browser to redraw at a wrong location.
-					 * The web view is a HIView container that internally hosts
-					 * a Cocoa NSView that uses a coordinates system with the origin at the
-					 * bottom left corner of a window instead of the coordinates system used
-					 * in Carbon that starts at the top left corner. The workaround is to
-					 * reposition the web view every time the Shell of the Browser is resized.
-					 * 
-					 * Note the size should not be updated if the browser is hidden.
-					 */
-					if (browser.isVisible()) {
-						CGRect oldBounds = new CGRect();
-						OS.GetEventParameter (theEvent, OS.kEventParamOriginalBounds, OS.typeHIRect, null, CGRect.sizeof, null, oldBounds);
-						CGRect bounds = new CGRect();
-						OS.GetEventParameter (theEvent, OS.kEventParamCurrentBounds, OS.typeHIRect, null, CGRect.sizeof, null, bounds);
-						if (oldBounds.height == bounds.height) break;
-						OS.HIViewGetBounds(browser.handle, bounds);
-						int[] contentView = new int[1];
-						OS.HIViewFindByID(OS.HIViewGetRoot(OS.GetControlOwner(browser.handle)), OS.kHIViewWindowContentID(), contentView);
-						OS.HIViewConvertRect(bounds, browser.handle, contentView[0]);
-						/* 
-						* Bug in Safari.  For some reason, the web view will display incorrectly or
-						* blank depending on its contents, if its size is set to a value smaller than
-						* MIN_SIZE. It will not display properly even after the size is made larger.
-						* The fix is to avoid setting sizes smaller than MIN_SIZE. 
-						*/
-						if (bounds.width <= MIN_SIZE) bounds.width = MIN_SIZE;
-						if (bounds.height <= MIN_SIZE) bounds.height = MIN_SIZE;
-						bounds.x++;
-						/* Note that the bounds needs to change */
-						OS.HIViewSetFrame(webViewHandle, bounds);
-						bounds.x--;
-						OS.HIViewSetFrame(webViewHandle, bounds);
-					}
-			}
-		case OS.kEventClassKeyboard:
-			switch (eventKind) {
-				case OS.kEventRawKeyDown: {
-					/*
-					* Bug in Safari. The WebView blocks the propagation of certain Carbon events
-					* such as kEventRawKeyDown. On the Mac, Carbon events propagate from the
-					* Focus Target Handler to the Control Target Handler, Window Target and finally
-					* the Application Target Handler. It is assumed that WebView hooks its events
-					* on the Window Target and does not pass kEventRawKeyDown to the next handler.
-					* Since kEventRawKeyDown events never make it to the Application Target Handler,
-					* the Application Target Handler never gets to emit kEventTextInputUnicodeForKeyEvent
-					* used by SWT to send a SWT.KeyDown event.
-					* The workaround is to hook kEventRawKeyDown on the Control Target Handler which gets
-					* called before the WebView hook on the Window Target Handler. Then, forward this event
-					* directly to the Application Target Handler. Note that if in certain conditions Safari
-					* does not block the kEventRawKeyDown, then multiple kEventTextInputUnicodeForKeyEvent
-					* events might be generated as a result of this workaround.
-					*/
-					//TEMPORARY CODE
-//					doit = false;
-//					OS.SendEventToEventTarget(theEvent, OS.GetApplicationEventTarget());
-//					if (!doit) return OS.noErr;
-
-					int[] length = new int[1];
-					int status = OS.GetEventParameter (theEvent, OS.kEventParamKeyUnicodes, OS.typeUnicodeText, null, 4, length, (char[])null);
-					if (status == OS.noErr && length[0] != 0) {
-						int[] modifiers = new int[1];
-						OS.GetEventParameter (theEvent, OS.kEventParamKeyModifiers, OS.typeUInt32, null, 4, null, modifiers);
-						char[] chars = new char[1];
-						OS.GetEventParameter (theEvent, OS.kEventParamKeyUnicodes, OS.typeUnicodeText, null, 2, null, chars);
-						if ((modifiers[0] & OS.cmdKey) != 0) {
-							switch (chars[0]) {
-								case 'v': {
-									Cocoa.objc_msgSend (webView, Cocoa.S_paste);
-									return OS.noErr;
-								}
-								case 'c': {
-									Cocoa.objc_msgSend (webView, Cocoa.S_copy);
-									return OS.noErr;
-								}
-								case 'x': {
-									Cocoa.objc_msgSend (webView, Cocoa.S_cut);
-									return OS.noErr;
-								}
-							}
-						}
-					}
-					/*
-					* Bug in Carbon.  OSX crashes if a HICocoaView is disposed during a key event,
-					* presumably as a result of attempting to use it after its refcount has reached
-					* 0.  The workaround is to temporarily add an extra ref to the view and its
-					* ancestor while the DOM listener is handling the event, in case the
-					* Browser gets disposed in a callback.
-					*/
-					int handle = webViewHandle, root = OS.HIViewGetSuperview (webViewHandle);
-					OS.CFRetain (handle);
-					OS.CFRetain (root);
-					int result = OS.CallNextEventHandler (nextHandler, theEvent);
-					OS.CFRelease (handle);
-					OS.CFRelease (root);
-					return result;
-				}
-			}
-		case OS.kEventClassTextInput:
-			switch (eventKind) {
-				case OS.kEventTextInputUnicodeForKeyEvent: {
-					/*
-					* Note.  This event is received from the Window Target therefore after it was received
-					* by the Focus Target. The SWT.KeyDown event is sent by SWT on the Focus Target. If it
-					* is received here, then the SWT.KeyDown doit flag must have been left to the value
-					* true.  For package visibility reasons we cannot access the doit flag directly.
-					* 
-					* Sequence of events when the user presses a key down
-					* 
-					* .Control Target - kEventRawKeyDown
-					* 	.forward to ApplicationEventTarget
-					* 		.Focus Target kEventTextInputUnicodeForKeyEvent - SWT emits SWT.KeyDown - 
-					* 			blocks further propagation if doit false. Browser does not know directly about
-					* 			the doit flag value.
-					* 			.Window Target kEventTextInputUnicodeForKeyEvent - if received, Browser knows 
-					* 			SWT.KeyDown is not blocked and event should be sent to WebKit
-					*  Return from Control Target - kEventRawKeyDown: let the event go to WebKit if doit true 
-					*  (eventNotHandledErr) or stop it (noErr).
-					*/
-					//TEMPORARY CODE
-//					doit = true;
-					break;
-				}
-			}
-	}
-	return OS.eventNotHandledErr;
-}
-
-/* Here we dispatch all WebView upcalls. */
-int handleCallback(int selector, int arg0, int arg1, int arg2, int arg3) {
-	int ret = 0;
-	// for meaning of selector see WebKitDelegate methods in webkit.c
-	switch (selector) {
-		case 1: didFailProvisionalLoadWithError(arg0, arg1); break;
-		case 2: didFinishLoadForFrame(arg0); break;
-		case 3: didReceiveTitle(arg0, arg1); break;
-		case 4: didStartProvisionalLoadForFrame(arg0); break;
-		case 5: didFinishLoadingFromDataSource(arg0, arg1); break;
-		case 6: didFailLoadingWithError(arg0, arg1, arg2); break;
-		case 7: ret = identifierForInitialRequest(arg0, arg1); break;
-		case 8: ret = willSendRequest(arg0, arg1, arg2, arg3); break;
-		case 9: handleNotification(arg0); break;
-		case 10: didCommitLoadForFrame(arg0); break;
-		case 11: ret = createWebViewWithRequest(arg0); break;
-		case 12: webViewShow(arg0); break;
-		case 13: setFrame(arg0); break;
-		case 14: webViewClose(); break;
-		case 15: ret = contextMenuItemsForElement(arg0, arg1); break;
-		case 16: setStatusBarVisible(arg0); break;
-		case 17: setResizable(arg0); break;
-		case 18: setToolbarsVisible(arg0); break;
-		case 19: decidePolicyForMIMEType(arg0, arg1, arg2, arg3); break;
-		case 20: decidePolicyForNavigationAction(arg0, arg1, arg2, arg3); break;
-		case 21: decidePolicyForNewWindowAction(arg0, arg1, arg2, arg3); break;
-		case 22: unableToImplementPolicyWithError(arg0, arg1); break;
-		case 23: setStatusText(arg0); break;
-		case 24: webViewFocus(); break;
-		case 25: webViewUnfocus(); break;
-		case 26: runJavaScriptAlertPanelWithMessage(arg0); break;
-		case 27: ret = runJavaScriptConfirmPanelWithMessage(arg0); break;
-		case 28: runOpenPanelForFileButtonWithResultListener(arg0); break;
-		case 29: decideDestinationWithSuggestedFilename(arg0, arg1); break;
-		case 30: mouseDidMoveOverElement(arg0, arg1); break;
-		case 31: didChangeLocationWithinPageForFrame(arg0); break;
-		case 32: handleEvent(arg0); break;
-		case 33: windowScriptObjectAvailable(arg0); break;
-		case 34: ret = callJava(arg0, arg1, arg2); break;
-		case 35: didReceiveAuthenticationChallengefromDataSource(arg0, arg1, arg2); break;
-		case 36: ret = runBeforeUnloadConfirmPanelWithMessage(arg0, arg1); break;
-		case 37: ret = callRunBeforeUnloadConfirmPanelWithMessage(arg0, arg1); break;
-		case 38: createPanelDidEnd(arg0, arg1, arg2); break;
-	}
-	return ret;
-}
-
-public boolean isBackEnabled() {
-	return Cocoa.objc_msgSend(webView, Cocoa.S_canGoBack) != 0;
-}
-
-public boolean isForwardEnabled() {
-	return Cocoa.objc_msgSend(webView, Cocoa.S_canGoForward) != 0;
-}
-
-public void refresh() {
-	html = null;
-	Cocoa.objc_msgSend(webView, Cocoa.S_reload, 0);
-}
-
-public boolean setText(String html, boolean trusted) {
-	/*
-	* If this.html is not null then the about:blank page is already being loaded,
-	* so no navigate is required.  Just set the html that is to be shown.
-	*/
-	boolean blankLoading = this.html != null;
-	this.html = html;
-	untrustedText = !trusted;
-	if (blankLoading) return true;
-
-	int str = createNSString(ABOUT_BLANK);
-	int inURL = Cocoa.objc_msgSend(Cocoa.C_NSURL, Cocoa.S_URLWithString, str); /* autoreleased */
-	OS.CFRelease (str);
-	int request = Cocoa.objc_msgSend(Cocoa.C_NSURLRequest, Cocoa.S_requestWithURL, inURL);
-	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-	Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
-	return true;
-}
-
-public boolean setUrl(String url, String postData, String[] headers) {
-	html = null;
-
-	if (url.indexOf('/') == 0) {
-		url = PROTOCOL_FILE + url;
-	} else if (url.indexOf(':') == -1) {
-		url = PROTOCOL_HTTP + url;
-	}
-
-	int inURL = 0;
-	int str = createNSString(url);
-	if (str != 0) {
-		char[] unescapedChars = new char[] {'%', '#'};
-		int unescapedStr = OS.CFStringCreateWithCharacters(0, unescapedChars, unescapedChars.length);
-		int escapedStr = OS.CFURLCreateStringByAddingPercentEscapes(OS.kCFAllocatorDefault, str, unescapedStr, 0, OS.kCFStringEncodingUTF8);
-		if (escapedStr != 0) {
-			inURL = OS.CFURLCreateWithString(OS.kCFAllocatorDefault, escapedStr, 0);
-			OS.CFRelease(escapedStr);
-		}
-		if (unescapedStr != 0) OS.CFRelease(unescapedStr);
-		OS.CFRelease(str);
-	}
-	if (inURL == 0) return false;
-
-	int request = Cocoa.objc_msgSend(Cocoa.C_NSMutableURLRequest, Cocoa.S_requestWithURL, inURL);
-	OS.CFRelease(inURL);
-
-	if (postData != null) {
-		int post = createNSString(POST);
-		Cocoa.objc_msgSend(request, Cocoa.S_setHTTPMethod, post);
-		OS.CFRelease (post);
-		byte[] bytes = postData.getBytes();
-		int data = Cocoa.objc_msgSend(Cocoa.C_NSData, Cocoa.S_dataWithBytes, bytes, bytes.length);
-		Cocoa.objc_msgSend(request, Cocoa.S_setHTTPBody, data);
-	}
-	if (headers != null) {
-		for (int i = 0; i < headers.length; i++) {
-			String current = headers[i];
-			if (current != null) {
-				int index = current.indexOf(':');
-				if (index != -1) {
-					String key = current.substring(0, index).trim();
-					String value = current.substring(index + 1).trim();
-					if (key.length() > 0 && value.length() > 0) {
-						if (key.equalsIgnoreCase(USER_AGENT)) {
-							/*
-							* Feature of Safari.  The user-agent header value cannot be overridden
-							* here.  The workaround is to temporarily set the value on the WebView
-							* and then remove it after the loading of the request has begun.
-							*/
-							int string = createNSString(value);
-							Cocoa.objc_msgSend(webView, Cocoa.S_setCustomUserAgent, string);
-							OS.CFRelease (string);
-						} else {
-							int keyString = createNSString(key);
-							int valueString = createNSString(value);
-							Cocoa.objc_msgSend(request, Cocoa.S_setValueForHTTPHeaderField, valueString, keyString);
-							OS.CFRelease (valueString);
-							OS.CFRelease (keyString);
-						}
-					}
-				}
-			}
-		}
-	}
-
-	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-	Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
-	Cocoa.objc_msgSend(webView, Cocoa.S_setCustomUserAgent, 0);
-	return true;
-}
-
-public void stop() {
-	html = null;
-	Cocoa.objc_msgSend(webView, Cocoa.S_stopLoading, 0);
-}
-
-boolean translateMnemonics() {
-	return false;
-}
-
-/* WebFrameLoadDelegate */
-void didChangeLocationWithinPageForFrame(int frame) {
-	//id url= [[[[frame provisionalDataSource] request] URL] absoluteString];
-	int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
-	int request = Cocoa.objc_msgSend(dataSource, Cocoa.S_request);
-	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
-	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);
-	int length = OS.CFStringGetLength(s);
-	if (length == 0) return;
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(s, range, buffer);
-	String url2 = new String(buffer);
-	/*
-	 * If the URI indicates that the page is being rendered from memory
-	 * (via setText()) then set it to about:blank to be consistent with IE.
-	 */
-	if (url2.equals (URI_FILEROOT)) {
-		url2 = ABOUT_BLANK;
-	} else {
-		length = URI_FILEROOT.length ();
-		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
-			url2 = ABOUT_BLANK + url2.substring (length);
-		}
-	}
-
-	final Display display = browser.getDisplay();
-	boolean top = frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-	if (top) {
-		StatusTextEvent statusText = new StatusTextEvent(browser);
-		statusText.display = display;
-		statusText.widget = browser;
-		statusText.text = url2;
-		for (int i = 0; i < statusTextListeners.length; i++) {
-			statusTextListeners[i].changed(statusText);
-		}
-	}
-	LocationEvent location = new LocationEvent(browser);
-	location.display = display;
-	location.widget = browser;
-	location.location = url2;
-	location.top = top;
-	for (int i = 0; i < locationListeners.length; i++) {
-		locationListeners[i].changed(location);
-	}
-}
-
-void didFailProvisionalLoadWithError(int error, int frame) {
-	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
-		/*
-		* Feature on Safari.  The identifier is used here as a marker for the events 
-		* related to the top frame and the URL changes related to that top frame as 
-		* they should appear on the location bar of a browser.  It is expected to reset
-		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-		* the identifierForInitialRequest event is received.  However, Safari fires
-		* the didFinishLoadingFromDataSource event before the entire content of the
-		* top frame is loaded.  It is possible to receive multiple willSendRequest 
-		* events in this interval, causing the Browser widget to send unwanted
-		* Location.changing events.  For this reason, the identifier is reset to 0
-		* when the top frame has either finished loading (didFinishLoadForFrame
-		* event) or failed (didFailProvisionalLoadWithError).
-		*/
-		identifier = 0;
-	}
-
-	int errorCode = Cocoa.objc_msgSend(error, Cocoa.S_code);
-	if (Cocoa.NSURLErrorBadURL < errorCode) return;
-
-	int failingURL = 0;
-	int info = Cocoa.objc_msgSend(error, Cocoa.S_userInfo);
-	if (info != 0) {
-		int keyString = createNSString("NSErrorFailingURLKey"); //$NON-NLS-1$
-		failingURL = Cocoa.objc_msgSend(info, Cocoa.S_valueForKey, keyString);
-		OS.CFRelease(keyString);
-	}
-
-	if (failingURL != 0 && Cocoa.NSURLErrorServerCertificateNotYetValid <= errorCode && errorCode <= Cocoa.NSURLErrorSecureConnectionFailed) {
-		/* handle invalid certificate error */
-		int keyString = createNSString("NSErrorPeerCertificateChainKey"); //$NON-NLS-1$
-		int certificates = Cocoa.objc_msgSend(info, Cocoa.S_objectForKey, keyString);
-		OS.CFRelease(keyString);
-
-		int[] policySearch = new int[1];
-		int[] policyRef = new int[1];
-		int[] trustRef = new int[1];
-		boolean success = false;
-		int result = OS.SecPolicySearchCreate(OS.CSSM_CERT_X_509v3, 0, 0, policySearch);
-		if (result == 0 && policySearch[0] != 0) {
-			result = OS.SecPolicySearchCopyNext(policySearch[0], policyRef);
-			if (result == 0 && policyRef[0] != 0) {
-				result = OS.SecTrustCreateWithCertificates(certificates, policyRef[0], trustRef);
-				if (result == 0 && trustRef[0] != 0) {
-					int panel = Cocoa.objc_msgSend(Cocoa.C_SFCertificateTrustPanel, Cocoa.S_sharedCertificateTrustPanel);
-					String failingUrlString = getString(Cocoa.objc_msgSend(failingURL, Cocoa.S_absoluteString));
-					String message = Compatibility.getMessage("SWT_InvalidCert_Message", new Object[] {failingUrlString}); //$NON-NLS-1$
-					int nsString = createNSString(Compatibility.getMessage("SWT_Cancel")); //$NON-NLS-1$
-					Cocoa.objc_msgSend(panel, Cocoa.S_setAlternateButtonTitle, nsString);
-					OS.CFRelease(nsString);
-					Cocoa.objc_msgSend(panel, Cocoa.S_setShowsHelp, 1);
-					Cocoa.objc_msgSend(failingURL, Cocoa.S_retain);
-					int window = Cocoa.objc_msgSend(webView, Cocoa.S_window);
-					nsString = createNSString(message);
-					Cocoa.objc_msgSend(panel, Cocoa.S_beginSheetForWindow, window, delegate, Cocoa.S_createPanelDidEnd, failingURL, trustRef[0], nsString);
-					OS.CFRelease(nsString);
-					success = true;
-				}
-			}
-		}
-
-		if (trustRef[0] != 0) OS.CFRelease(trustRef[0]);
-		if (policyRef[0] != 0) OS.CFRelease(policyRef[0]);
-		if (policySearch[0] != 0) OS.CFRelease(policySearch[0]);
-		if (success) return;
-	}
-
-	/* handle other types of errors */
-	int description = Cocoa.objc_msgSend(error, Cocoa.S_localizedDescription);
-	if (description != 0) {
-		String descriptionString = getString(description);
-		String message = failingURL != 0 ? getString(Cocoa.objc_msgSend(failingURL, Cocoa.S_absoluteString)) + "\n\n" : ""; //$NON-NLS-1$ //$NON-NLS-2$
-		message += Compatibility.getMessage ("SWT_Page_Load_Failed", new Object[] {descriptionString}); //$NON-NLS-1$
-		MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_ERROR);
-		messageBox.setMessage(message);
-		messageBox.open();
-	}
-}
-
-void createPanelDidEnd(int sheet, int returnCode, int contextInfo) {
-	Cocoa.objc_msgSend(contextInfo, Cocoa.S_autorelease);
-	if (returnCode != Cocoa.NSFileHandlingPanelOKButton) return;	/* nothing more to do */
-
-	int /*long*/ method = Cocoa.class_getClassMethod(Cocoa.C_NSURLRequest, Cocoa.S_setAllowsAnyHTTPSCertificate);
-	if (method != 0) {
-		int host = Cocoa.objc_msgSend(contextInfo, Cocoa.S_host);
-		int urlString = Cocoa.objc_msgSend(contextInfo, Cocoa.S_absoluteString);
-		Cocoa.objc_msgSend(Cocoa.C_NSURLRequest, Cocoa.S_setAllowsAnyHTTPSCertificate, 1, host);
-		setUrl(getString(urlString), null, null);
-	}
-}
-
-void didFinishLoadForFrame(int frame) {
-	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
-		/*
-		 * If html is not null then there is html from a previous setText() call
-		 * waiting to be set into the about:blank page once it has completed loading. 
-		 */
-		if (html != null) {
-			if (getUrl().startsWith(ABOUT_BLANK)) {
-				loadingText = true;
-				int htmlString = createNSString(html);
-				int urlString;
-				if (untrustedText) {
-					urlString = createNSString(ABOUT_BLANK);
-				} else {
-					urlString = createNSString(URI_FILEROOT);
-				}
-				int url = Cocoa.objc_msgSend(Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString); /* autoreleased */
-				int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-				Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadHTMLStringBaseURL, htmlString, url);
-				OS.CFRelease(urlString);
-				OS.CFRelease(htmlString);
-				html = null;
-			}
-		}
-
-		/*
-		* The loadHTMLStringBaseURL invocation above will trigger a second didFinishLoadForFrame
-		* callback when it is completed.  If text was just set into the browser then wait
-		* for this second callback to come before sending the title or completed events.
-		*/
-		if (!loadingText) {
-			/*
-			* To be consistent with other platforms a title event should be fired when a
-			* page has completed loading.  A page with a <title> tag will do this
-			* automatically when the didReceiveTitle callback is received.  However a page
-			* without a <title> tag will not do this by default, so fire the event
-			* here with the page's url as the title.
-			*/
-			final Display display = browser.getDisplay();
-			int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
-			if (dataSource != 0) {
-				int title = Cocoa.objc_msgSend(dataSource, Cocoa.S_pageTitle);
-				if (title == 0) {	/* page has no title */
-					final TitleEvent newEvent = new TitleEvent(browser);
-					newEvent.display = display;
-					newEvent.widget = browser;
-					newEvent.title = getUrl();
-					for (int i = 0; i < titleListeners.length; i++) {
-						titleListeners[i].changed(newEvent);
-					}
-					if (browser.isDisposed()) return;
-				}
-			}
-
-			ProgressEvent progress = new ProgressEvent(browser);
-			progress.display = display;
-			progress.widget = browser;
-			progress.current = MAX_PROGRESS;
-			progress.total = MAX_PROGRESS;
-			for (int i = 0; i < progressListeners.length; i++) {
-				progressListeners[i].completed(progress);
-			}
-		}
-		loadingText = false;
-		if (browser.isDisposed()) return;
-
-		/*
-		* Feature on Safari.  The identifier is used here as a marker for the events 
-		* related to the top frame and the URL changes related to that top frame as 
-		* they should appear on the location bar of a browser.  It is expected to reset
-		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-		* the identifierForInitialRequest event is received.  Howeever, Safari fires
-		* the didFinishLoadingFromDataSource event before the entire content of the
-		* top frame is loaded.  It is possible to receive multiple willSendRequest 
-		* events in this interval, causing the Browser widget to send unwanted
-		* Location.changing events.  For this reason, the identifier is reset to 0
-		* when the top frame has either finished loading (didFinishLoadForFrame
-		* event) or failed (didFailProvisionalLoadWithError).
-		*/
-		identifier = 0;
-	}
-}
-
-void hookDOMFocusListeners(int frame) {
-	/*
-	* These listeners only need to be hooked for OSX 10.4 (Tiger).  The WebKit on
-	* OSX < 10.4 does not send these DOM events, and tab traversals that exit
-	* Safari are handled as of OSX 10.5 as a result of using HICocoaViewCreate,
-	* which makes these listeners unnecessary.
-	*/
-	if (!(0x1040 <= OS.VERSION && OS.VERSION < 0x1050)) return;
-
-	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
-	if (document == 0) return;
-
-	int ptr = createNSString(DOMEVENT_FOCUSIN);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-
-	ptr = createNSString(DOMEVENT_FOCUSOUT);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-}
-	
-void hookDOMKeyListeners(int frame) {
-	/*
-	* WebKit's DOM listener api became functional in OSX 10.4, so if an earlier
-	* version than this is detected then do not hook the DOM listeners.
-	*/
-	if (OS.VERSION < 0x1040) return;
-
-	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
-	if (document == 0) return;
-
-	int ptr = createNSString(DOMEVENT_KEYDOWN);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-
-	ptr = createNSString(DOMEVENT_KEYUP);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-}
-
-void hookDOMMouseListeners(int frame) {
-	/*
-	* WebKit's DOM listener api became functional in OSX 10.4, so if an earlier
-	* version than this is detected then do not hook the DOM listeners.
-	*/
-	if (OS.VERSION < 0x1040) return;
-
-	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
-	if (document == 0) return;
-
-	int ptr = createNSString(DOMEVENT_MOUSEDOWN);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-
-	ptr = createNSString(DOMEVENT_MOUSEUP);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-
-	ptr = createNSString(DOMEVENT_MOUSEMOVE);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-
-	ptr = createNSString(DOMEVENT_MOUSEWHEEL);
-	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
-	OS.CFRelease(ptr);
-}
-
-void didReceiveTitle(int title, int frame) {
-	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
-		int length = OS.CFStringGetLength(title);
-		char[] buffer = new char[length];
-		CFRange range = new CFRange();
-		range.length = length;
-		OS.CFStringGetCharacters(title, range, buffer);
-		String newTitle = new String(buffer);
-		TitleEvent newEvent = new TitleEvent(browser);
-		newEvent.display = browser.getDisplay();
-		newEvent.widget = browser;
-		newEvent.title = newTitle;
-		for (int i = 0; i < titleListeners.length; i++) {
-			titleListeners[i].changed(newEvent);
-		}
-	}
-}
-
-void didStartProvisionalLoadForFrame(int frame) {
-	/* 
-	* This code is intentionally commented.  WebFrameLoadDelegate:didStartProvisionalLoadForFrame is
-	* called before WebResourceLoadDelegate:willSendRequest and
-	* WebFrameLoadDelegate:didCommitLoadForFrame.  The resource count is reset when didCommitLoadForFrame
-	* is received for the top frame.
-	*/
-//	int webView = WebKit.HIWebViewGetWebView(webViewHandle);
-//	if (frame == WebKit.objc_msgSend(webView, WebKit.S_mainFrame)) {
-//		/* reset resource status variables */
-//		resourceCount= 0;
-//	}
-}
-
-void didCommitLoadForFrame(int frame) {
-	//id url= [[[[frame provisionalDataSource] request] URL] absoluteString];
-	int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
-	int request = Cocoa.objc_msgSend(dataSource, Cocoa.S_request);
-	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
-	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);	
-	int length = OS.CFStringGetLength(s);
-	if (length == 0) return;
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(s, range, buffer);
-	String url2 = new String(buffer);
-	/*
-	 * If the URI indicates that the page is being rendered from memory
-	 * (via setText()) then set it to about:blank to be consistent with IE.
-	 */
-	if (url2.equals (URI_FILEROOT)) {
-		url2 = ABOUT_BLANK;
-	} else {
-		length = URI_FILEROOT.length ();
-		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
-			url2 = ABOUT_BLANK + url2.substring (length);
-		}
-	}
-
-	final Display display = browser.getDisplay();
-	boolean top = frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-	if (top) {
-		/* reset resource status variables */
-		resourceCount = 0;		
-		this.url = url2;
-
-		/*
-		* Each invocation of setText() causes didCommitLoadForFrame to be invoked twice,
-		* once for the initial navigate to about:blank, and once for the auto-navigate
-		* to about:blank that Safari does when loadHTMLStringBaseURL is invoked.  If
-		* this is the first didCommitLoadForFrame callback received for a setText()
-		* invocation then do not send any events or re-install registered BrowserFunctions. 
-		*/
-		if (url2.startsWith(ABOUT_BLANK) && html != null) return;
-
-		Enumeration elements = functions.elements ();
-		while (elements.hasMoreElements ()) {
-			BrowserFunction function = (BrowserFunction)elements.nextElement ();
-			execute (function.functionString);
-		}
-
-		final ProgressEvent progress = new ProgressEvent(browser);
-		progress.display = display;
-		progress.widget = browser;
-		progress.current = 1;
-		progress.total = MAX_PROGRESS;
-		for (int i = 0; i < progressListeners.length; i++) {
-			progressListeners[i].changed(progress);
-		}
-		if (browser.isDisposed()) return;
-		
-		StatusTextEvent statusText = new StatusTextEvent(browser);
-		statusText.display = display;
-		statusText.widget = browser;
-		statusText.text = url2;
-		for (int i = 0; i < statusTextListeners.length; i++) {
-			statusTextListeners[i].changed(statusText);
-		}
-		if (browser.isDisposed()) return;
-
-		hookDOMKeyListeners(frame);
-	}
-
-	hookDOMFocusListeners(frame);
-	hookDOMMouseListeners(frame);
-
-	LocationEvent location = new LocationEvent(browser);
-	location.display = display;
-	location.widget = browser;
-	location.location = url2;
-	location.top = top;
-	for (int i = 0; i < locationListeners.length; i++) {
-		locationListeners[i].changed(location);
-	}
-}
-
-void windowScriptObjectAvailable (int windowScriptObject) {
-	int str = createNSString("external"); //$NON-NLS-1$
-	if (str != 0) {
-		Cocoa.objc_msgSend (windowScriptObject, Cocoa.S_setValue, delegate, str);
-		OS.CFRelease (str);
-	}
-}
-
-/* WebResourceLoadDelegate */
-
-void didFinishLoadingFromDataSource(int identifier, int dataSource) {
-	/*
-	* Feature on Safari.  The identifier is used here as a marker for the events 
-	* related to the top frame and the URL changes related to that top frame as 
-	* they should appear on the location bar of a browser.  It is expected to reset
-	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-	* the identifierForInitialRequest event is received.  Howeever, Safari fires
-	* the didFinishLoadingFromDataSource event before the entire content of the
-	* top frame is loaded.  It is possible to receive multiple willSendRequest 
-	* events in this interval, causing the Browser widget to send unwanted
-	* Location.changing events.  For this reason, the identifier is reset to 0
-	* when the top frame has either finished loading (didFinishLoadForFrame
-	* event) or failed (didFailProvisionalLoadWithError).
-	*/
-	// this code is intentionally commented
-	//if (this.identifier == identifier) this.identifier = 0;
-}
-
-void didFailLoadingWithError(int identifier, int error, int dataSource) {
-	/*
-	* Feature on Safari.  The identifier is used here as a marker for the events 
-	* related to the top frame and the URL changes related to that top frame as 
-	* they should appear on the location bar of a browser.  It is expected to reset
-	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-	* the identifierForInitialRequest event is received.  Howeever, Safari fires
-	* the didFinishLoadingFromDataSource event before the entire content of the
-	* top frame is loaded.  It is possible to receive multiple willSendRequest 
-	* events in this interval, causing the Browser widget to send unwanted
-	* Location.changing events.  For this reason, the identifier is reset to 0
-	* when the top frame has either finished loading (didFinishLoadForFrame
-	* event) or failed (didFailProvisionalLoadWithError).
-	*/
-	// this code is intentionally commented
-	//if (this.identifier == identifier) this.identifier = 0;
-}
-
-void didReceiveAuthenticationChallengefromDataSource (int identifier, int challenge, int dataSource) {
-	/*
-	 * Do not invoke the listeners if this challenge has been failed too many
-	 * times because a listener is likely giving incorrect credentials repeatedly
-	 * and will do so indefinitely.
-	 */
-	int count = Cocoa.objc_msgSend (challenge, Cocoa.S_previousFailureCount);
-	if (count < 3) {
-		for (int i = 0; i < authenticationListeners.length; i++) {
-			AuthenticationEvent event = new AuthenticationEvent (browser);
-			event.location = lastNavigateURL;
-			authenticationListeners[i].authenticate (event);
-			if (!event.doit) {
-				int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
-				Cocoa.objc_msgSend (challengeSender, Cocoa.S_cancelAuthenticationChallenge, challenge);
-				return;
-			}
-			if (event.user != null && event.password != null) {
-				int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
-				int user = createNSString(event.user);
-				int password = createNSString(event.password);
-				int credential = Cocoa.objc_msgSend (Cocoa.C_NSURLCredential, Cocoa.S_credentialWithUser, user, password, Cocoa.NSURLCredentialPersistenceForSession);
-				Cocoa.objc_msgSend (challengeSender, Cocoa.S_useCredential, credential, challenge);
-				OS.CFRelease (password);
-				OS.CFRelease (user);
-				return;
-			}
-		}
-	}
-
-	/* no listener handled the challenge, so try to invoke the native panel */
-	int cls = Cocoa.C_WebPanelAuthenticationHandler;
-	if (cls != 0) {
-		int method = Cocoa.class_getClassMethod (cls, Cocoa.S_sharedHandler);
-		if (method != 0) {
-			int handler = Cocoa.objc_msgSend (cls, Cocoa.S_sharedHandler);
-			if (handler != 0) {
-				int window = Cocoa.objc_msgSend (webView, Cocoa.S_window);
-				Cocoa.objc_msgSend (handler, Cocoa.S_startAuthentication, challenge, window);
-				return;
-			}
-		}
-	}
-
-	/* the native panel was not available, so show a custom dialog */
-	String[] userReturn = new String[1], passwordReturn = new String[1];
-	int proposedCredential = Cocoa.objc_msgSend (challenge, Cocoa.S_proposedCredential);
-	if (proposedCredential != 0) {
-		int user = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_user);
-		userReturn[0] = getString (user);
-		boolean hasPassword = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_hasPassword) != 0;
-		if (hasPassword) {
-			int password = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_password);
-			passwordReturn[0] = getString (password);
-		}
-	}
-
-	int space = Cocoa.objc_msgSend (challenge, Cocoa.S_protectionSpace);
-	int host = Cocoa.objc_msgSend (space, Cocoa.S_host);
-	String hostString = getString (host) + ':';
-	int port = Cocoa.objc_msgSend (space, Cocoa.S_port);
-	hostString += port;
-	int realm = Cocoa.objc_msgSend (space, Cocoa.S_realm);
-	String realmString = getString (realm);
-	boolean result = showAuthenticationDialog (userReturn, passwordReturn, hostString, realmString);
-	int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
-	if (!result) {
-		Cocoa.objc_msgSend (challengeSender, Cocoa.S_cancelAuthenticationChallenge, challenge);
-		return;
-	}
-
-	int user = createNSString(userReturn[0]);
-	int password = createNSString(passwordReturn[0]);
-	int credential = Cocoa.objc_msgSend (Cocoa.C_NSURLCredential, Cocoa.S_credentialWithUser, user, password, Cocoa.NSURLCredentialPersistenceForSession);
-	Cocoa.objc_msgSend (challengeSender, Cocoa.S_useCredential, credential, challenge);
-	OS.CFRelease (password);
-	OS.CFRelease (user);
-}
-
-boolean showAuthenticationDialog (final String[] user, final String[] password, String host, String realm) {
-	final Shell shell = new Shell (browser.getShell ());
-	shell.setLayout (new GridLayout ());
-	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
-	shell.setText (title);
-	Label label = new Label (shell, SWT.WRAP);
-	label.setText (Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host})); //$NON-NLS-1$
-
-	GridData data = new GridData ();
-	Monitor monitor = browser.getMonitor ();
-	int maxWidth = monitor.getBounds ().width * 2 / 3;
-	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
-	data.widthHint = Math.min (width, maxWidth);
-	data.horizontalAlignment = GridData.FILL;
-	data.grabExcessHorizontalSpace = true;
-	label.setLayoutData (data);
-
-	Label userLabel = new Label (shell, SWT.NONE);
-	userLabel.setText (SWT.getMessage ("SWT_Username")); //$NON-NLS-1$
-
-	final Text userText = new Text (shell, SWT.BORDER);
-	if (user[0] != null) userText.setText (user[0]);
-	data = new GridData ();
-	data.horizontalAlignment = GridData.FILL;
-	data.grabExcessHorizontalSpace = true;
-	userText.setLayoutData (data);
-
-	Label passwordLabel = new Label (shell, SWT.NONE);
-	passwordLabel.setText (SWT.getMessage ("SWT_Password")); //$NON-NLS-1$
-
-	final Text passwordText = new Text (shell, SWT.PASSWORD | SWT.BORDER);
-	if (password[0] != null) passwordText.setText (password[0]);
-	data = new GridData ();
-	data.horizontalAlignment = GridData.FILL;
-	data.grabExcessHorizontalSpace = true;
-	passwordText.setLayoutData (data);
-
-	final boolean[] result = new boolean[1];
-	final Button[] buttons = new Button[2];
-	Listener listener = new Listener() {
-		public void handleEvent(Event event) {
-			user[0] = userText.getText();
-			password[0] = passwordText.getText();
-			result[0] = event.widget == buttons[1];
-			shell.close();
-		}	
-	};
-
-	Composite composite = new Composite (shell, SWT.NONE);
-	data = new GridData ();
-	data.horizontalAlignment = GridData.END;
-	composite.setLayoutData (data);
-	composite.setLayout (new GridLayout (2, true));
-	buttons[0] = new Button (composite, SWT.PUSH);
-	buttons[0].setText (SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
-	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
-	buttons[0].addListener (SWT.Selection, listener);
-	buttons[1] = new Button (composite, SWT.PUSH);
-	buttons[1].setText (SWT.getMessage("SWT_OK")); //$NON-NLS-1$
-	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
-	buttons[1].addListener (SWT.Selection, listener);
-
-	shell.setDefaultButton (buttons[1]);
-	shell.pack ();
-	shell.open ();
-	Display display = browser.getDisplay ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-
-	return result[0];
-}
-
-int identifierForInitialRequest(int request, int dataSource) {
-	final Display display = browser.getDisplay();
-	final ProgressEvent progress = new ProgressEvent(browser);
-	progress.display = display;
-	progress.widget = browser;
-	progress.current = resourceCount;
-	progress.total = Math.max(resourceCount, MAX_PROGRESS);
-	for (int i = 0; i < progressListeners.length; i++) {
-		progressListeners[i].changed(progress);
-	}
-	if (browser.isDisposed()) return 0;
-
-	/*
-	* Note.  numberWithInt uses autorelease.  The resulting object
-	* does not need to be released.
-	* identifier = [NSNumber numberWithInt: resourceCount++]
-	*/	
-	int identifier = Cocoa.objc_msgSend(Cocoa.C_NSNumber, Cocoa.S_numberWithInt, resourceCount++);
-		
-	if (this.identifier == 0) {
-		int frame = Cocoa.objc_msgSend(dataSource, Cocoa.S_webFrame);
-		if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) this.identifier = identifier;
-	}
-	return identifier;
-}
-
-int willSendRequest(int identifier, int request, int redirectResponse, int dataSource) {
-	int url = Cocoa.objc_msgSend (request, Cocoa.S_URL);
-	boolean isFileURL = Cocoa.objc_msgSend (url, Cocoa.S_isFileURL) != 0;
-	if (isFileURL) {
-		int newRequest = Cocoa.objc_msgSend (request, Cocoa.S_mutableCopy);
-		Cocoa.objc_msgSend (newRequest, Cocoa.S_autorelease);
-		Cocoa.objc_msgSend (newRequest, Cocoa.S_setCachePolicy, Cocoa.NSURLRequestReloadIgnoringLocalCacheData);
-		return newRequest;
-	}
-	return request;
-}
-
-/* handleNotification */
-
-void handleNotification(int notification) {	
-}
-
-/* UIDelegate */
-int createWebViewWithRequest(int request) {
-	WindowEvent newEvent = new WindowEvent(browser);
-	newEvent.display = browser.getDisplay();
-	newEvent.widget = browser;
-	newEvent.required = true;
-	if (openWindowListeners != null) {
-		for (int i = 0; i < openWindowListeners.length; i++) {
-			openWindowListeners[i].open(newEvent);
-		}
-	}
-
-	int webView = 0;
-	Browser browser = null;
-	if (newEvent.browser != null && newEvent.browser.webBrowser instanceof Safari) {
-		browser = newEvent.browser;
-	}
-	if (browser != null && !browser.isDisposed()) {
-		webView = ((Safari)browser.webBrowser).webView;
-		
-		if (request != 0) {
-			//mainFrame = [webView mainFrame];
-			int mainFrame= Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
-
-			//[mainFrame loadRequest:request];
-			Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
-		}
-	}
-	return webView;
-}
-
-void webViewShow(int sender) {
-	/*
-	* Feature on WebKit.  The Safari WebKit expects the application
-	* to create a new Window using the Objective C Cocoa API in response
-	* to UIDelegate.createWebViewWithRequest. The application is then
-	* expected to use Objective C Cocoa API to make this window visible
-	* when receiving the UIDelegate.webViewShow message.  For some reason,
-	* a window created with the Carbon API hosting the new browser instance
-	* does not redraw until it has been resized.  The fix is to increase the
-	* size of the Shell and restore it to its initial size.
-	*/
-	Shell parent = browser.getShell();
-	Point pt = parent.getSize();
-	parent.setSize(pt.x+1, pt.y);
-	parent.setSize(pt.x, pt.y);
-	WindowEvent newEvent = new WindowEvent(browser);
-	newEvent.display = browser.getDisplay();
-	newEvent.widget = browser;
-	if (location != null) newEvent.location = location;
-	if (size != null) newEvent.size = size;
-	/*
-	* Feature in Safari.  Safari's tool bar contains
-	* the address bar.  The address bar is displayed
-	* if the tool bar is displayed. There is no separate
-	* notification for the address bar.
-	* 
-	* Feature of OSX.  The menu bar is always displayed.
-	* There is no notification to hide the menu bar.
-	*/
-	newEvent.addressBar = toolBar;
-	newEvent.menuBar = true;
-	newEvent.statusBar = statusBar;
-	newEvent.toolBar = toolBar;
-	for (int i = 0; i < visibilityWindowListeners.length; i++) {
-		visibilityWindowListeners[i].show(newEvent);
-	}
-	location = null;
-	size = null;
-}
-
-void setFrame(int frame) {
-	float[] dest = new float[4];
-	OS.memmove(dest, frame, 16);
-	/* convert to SWT system coordinates */
-	Rectangle bounds = browser.getDisplay().getBounds();
-	location = new Point((int)dest[0], bounds.height - (int)dest[1] - (int)dest[3]);
-	size = new Point((int)dest[2], (int)dest[3]);
-}
-
-void webViewFocus() {
-}
-
-void webViewUnfocus() {
-}
-
-int callRunBeforeUnloadConfirmPanelWithMessage(int /*long*/ messageID, int /*long*/ arg) {
-	int result = runBeforeUnloadConfirmPanelWithMessage (messageID, 0);
-	return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithBool, result);
-}
-
-int runBeforeUnloadConfirmPanelWithMessage(int message, int frame) {
-	StringBuffer text = new StringBuffer(Compatibility.getMessage("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
-	text.append ("\n\n"); //$NON-NLS-1$
-	int length = OS.CFStringGetLength(message);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(message, range, buffer);
-	text.append(new String(buffer));
-	text.append("\n\n"); //$NON-NLS-1$
-	text.append(Compatibility.getMessage("SWT_OnBeforeUnload_Message2")); //$NON-NLS-1$
-	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
-	messageBox.setMessage(text.toString());
-	return messageBox.open() == SWT.OK ? 1 : 0;
-}
-
-void runJavaScriptAlertPanelWithMessage(int message) {
-	int length = OS.CFStringGetLength(message);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(message, range, buffer);
-	String text = new String(buffer);
-
-	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_WARNING);
-	messageBox.setText("Javascript");	//$NON-NLS-1$
-	messageBox.setMessage(text);
-	messageBox.open();
-}
-
-int runJavaScriptConfirmPanelWithMessage(int message) {
-	int length = OS.CFStringGetLength(message);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(message, range, buffer);
-	String text = new String(buffer);
-
-	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
-	messageBox.setText("Javascript");	//$NON-NLS-1$
-	messageBox.setMessage(text);
-	return messageBox.open() == SWT.OK ? 1 : 0;
-}
-
-void runOpenPanelForFileButtonWithResultListener(int resultListener) {
-	FileDialog dialog = new FileDialog(browser.getShell(), SWT.NONE);
-	String result = dialog.open();
-	if (result == null) {
-		Cocoa.objc_msgSend(resultListener, Cocoa.S_cancel);
-		return;
-	}
-	int filename = createNSString(result);
-	Cocoa.objc_msgSend(resultListener, Cocoa.S_chooseFilename, filename);
-	OS.CFRelease(filename);
-}
-
-void webViewClose() {
-	Shell parent = browser.getShell();
-	WindowEvent newEvent = new WindowEvent(browser);
-	newEvent.display = browser.getDisplay();
-	newEvent.widget = browser;
-	for (int i = 0; i < closeWindowListeners.length; i++) {
-		closeWindowListeners[i].close(newEvent);
-	}
-	browser.dispose();
-	if (parent.isDisposed()) return;
-	/*
-	* Feature on WebKit.  The Safari WebKit expects the application
-	* to create a new Window using the Objective C Cocoa API in response
-	* to UIDelegate.createWebViewWithRequest. The application is then
-	* expected to use Objective C Cocoa API to make this window visible
-	* when receiving the UIDelegate.webViewShow message.  For some reason,
-	* a window created with the Carbon API hosting the new browser instance
-	* does not redraw until it has been resized.  The fix is to increase the
-	* size of the Shell and restore it to its initial size.
-	*/
-	Point pt = parent.getSize();
-	parent.setSize(pt.x+1, pt.y);
-	parent.setSize(pt.x, pt.y);
-}
-
-int contextMenuItemsForElement(int element, int defaultMenuItems) {
-	org.eclipse.swt.internal.carbon.Point pt = new org.eclipse.swt.internal.carbon.Point();
-	OS.GetGlobalMouse(pt);
-	Event event = new Event();
-	event.x = pt.h;
-	event.y = pt.v;
-	browser.notifyListeners(SWT.MenuDetect, event);
-	if (!event.doit || browser.isDisposed()) return 0;
-	Menu menu = browser.getMenu();
-	if (menu != null && !menu.isDisposed()) {
-		if (event.x != pt.h || event.y != pt.v) {
-			menu.setLocation(event.x, event.y);
-		}
-		menu.setVisible(true);
-		return 0;
-	}
-	return defaultMenuItems;
-}
-
-void setStatusBarVisible(int visible) {
-	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
-	statusBar = visible != 0;
-}
-
-void setStatusText(int text) {
-	int length = OS.CFStringGetLength(text);
-	if (length == 0) return;
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(text, range, buffer);
-
-	StatusTextEvent statusText = new StatusTextEvent(browser);
-	statusText.display = browser.getDisplay();
-	statusText.widget = browser;
-	statusText.text = new String(buffer);
-	for (int i = 0; i < statusTextListeners.length; i++) {
-		statusTextListeners[i].changed(statusText);
-	}
-}
-
-void setResizable(int visible) {
-}
-
-void setToolbarsVisible(int visible) {
-	/* Note.  Webkit only emits the notification when the tool bar should be hidden. */
-	toolBar = visible != 0;
-}
-
-void mouseDidMoveOverElement (int elementInformation, int modifierFlags) {
-	if (elementInformation == 0) return;
-	if (!browser.isEnabled ()) return;
-
-	int key = createNSString(WebElementLinkURLKey);
-	int value = Cocoa.objc_msgSend(elementInformation, Cocoa.S_valueForKey, key);
-	OS.CFRelease(key);
-	if (value == 0) {
-		/* not currently over a link */
-		if (lastHoveredLinkURL == null) return;
-		lastHoveredLinkURL = null;
-		StatusTextEvent statusText = new StatusTextEvent(browser);
-		statusText.display = browser.getDisplay();
-		statusText.widget = browser;
-		statusText.text = "";	//$NON-NLS-1$
-		for (int i = 0; i < statusTextListeners.length; i++) {
-			statusTextListeners[i].changed(statusText);
-		}
-		return;
-	}
-
-	int stringPtr = Cocoa.objc_msgSend(value, Cocoa.S_absoluteString);
-	int length = OS.CFStringGetLength(stringPtr);
-	String urlString;
-	if (length == 0) {
-		urlString = "";	//$NON-NLS-1$
-	} else {
-		char[] chars = new char[length];
-		CFRange range = new CFRange();
-		range.length = length;
-		OS.CFStringGetCharacters(stringPtr, range, chars);
-		urlString = new String(chars);
-	}
-	if (urlString.equals(lastHoveredLinkURL)) return;
-
-	lastHoveredLinkURL = urlString;
-	StatusTextEvent statusText = new StatusTextEvent(browser);
-	statusText.display = browser.getDisplay();
-	statusText.widget = browser;
-	statusText.text = urlString;
-	for (int i = 0; i < statusTextListeners.length; i++) {
-		statusTextListeners[i].changed(statusText);
-	}
-}
-
-/* PolicyDelegate */
-
-void decidePolicyForMIMEType(int type, int request, int frame, int listener) {
-	boolean canShow = Cocoa.objc_msgSend(Cocoa.C_WebView, Cocoa.S_canShowMIMEType, type) != 0;
-	Cocoa.objc_msgSend(listener, canShow ? Cocoa.S_use : Cocoa.S_download);
-}
-
-void decidePolicyForNavigationAction(int actionInformation, int request, int frame, int listener) {
-	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
-	if (loadingText) {
-		/* 
-		 * Safari is auto-navigating to about:blank in response to a loadHTMLString()
-		 * invocation.  This navigate should always proceed without sending an event
-		 * since it is preceded by an explicit navigate to about:blank in setText().
-		 */
-		Cocoa.objc_msgSend(listener, Cocoa.S_use);
-		return;
-	}
-	if (url == 0) {
-		/* indicates that a URL with an invalid format was specified */
-		Cocoa.objc_msgSend(listener, Cocoa.S_ignore);
-		return;
-	}
-	boolean isFileURL = Cocoa.objc_msgSend(url, Cocoa.S_isFileURL) != 0;
-	if (isFileURL && getUrl().startsWith(ABOUT_BLANK) && untrustedText) {
-		/* indicates an attempt to access the local file system from untrusted content */
-		Cocoa.objc_msgSend(listener, Cocoa.S_ignore);
-		return;
-	}
-	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);
-	int length = OS.CFStringGetLength(s);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(s, range, buffer);
-	String url2 = new String(buffer);
-	/*
-	 * If the URI indicates that the page is being rendered from memory
-	 * (via setText()) then set it to about:blank to be consistent with IE.
-	 */
-	if (url2.equals (URI_FILEROOT)) {
-		url2 = ABOUT_BLANK;
-	} else {
-		length = URI_FILEROOT.length ();
-		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
-			url2 = ABOUT_BLANK + url2.substring (length);
-		}
-	}
-
-	if (url2.startsWith (URI_APPLEWEBDATA)) {
-		/* listeners should not be notified of internal transitions like this */
-		Cocoa.objc_msgSend(listener, Cocoa.S_use);
-	} else {
-		LocationEvent newEvent = new LocationEvent(browser);
-		newEvent.display = browser.getDisplay();
-		newEvent.widget = browser;
-		newEvent.location = url2;
-		newEvent.doit = true;
-		if (locationListeners != null) {
-			for (int i = 0; i < locationListeners.length; i++) {
-				locationListeners[i].changing(newEvent);
-			}
-		}
-		if (newEvent.doit) {
-			if (jsEnabledChanged) {
-				jsEnabledChanged = false;
-				if (preferences == 0) {
-					preferences = Cocoa.objc_msgSend (Cocoa.C_WebPreferences, Cocoa.S_alloc);
-					Cocoa.objc_msgSend (preferences, Cocoa.S_init);
-					Cocoa.objc_msgSend (webView, Cocoa.S_setPreferences, preferences);
-				}
-				Cocoa.objc_msgSend (preferences, Cocoa.S_setJavaScriptEnabled, jsEnabled ? 1 : 0);
-			}
-			lastNavigateURL = url2;
-		}
-		Cocoa.objc_msgSend(listener, newEvent.doit ? Cocoa.S_use : Cocoa.S_ignore);
-	}
-}
-
-void decidePolicyForNewWindowAction(int actionInformation, int request, int frameName, int listener) {
-	Cocoa.objc_msgSend(listener, Cocoa.S_use);
-}
-
-void unableToImplementPolicyWithError(int error, int frame) {
-}
-
-/* WebDownload */
-
-void decideDestinationWithSuggestedFilename (int download, int filename) {
-	int length = OS.CFStringGetLength(filename);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(filename, range, buffer);
-	String name = new String(buffer);
-
-	/*
-	* Bug in Safari.  As of OSX 10.5.5, showing the file dialog here invokes this
-	* callback a second time when the file dialog runs the event loop, which
-	* always leads to a crash.  The workaround is to choose a location to save
-	* the file without showing the file dialog. 
-	*/
-	String path = null;
-	if (OS.VERSION >= 0x1055) {
-		int array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDesktopDirectory, Cocoa.NSAllDomainsMask, true);
-		int count = Cocoa.objc_msgSend (array, Cocoa.S_count);
-		if (count == 0) { /* should never happen */
-			array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDownloadsDirectory, Cocoa.NSAllDomainsMask, true);
-			count = Cocoa.objc_msgSend (array, Cocoa.S_count);
-			if (count == 0) {
-				array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDocumentDirectory, Cocoa.NSAllDomainsMask, true);
-				count = Cocoa.objc_msgSend (array, Cocoa.S_count);
-				if (count == 0) {
-					Cocoa.objc_msgSend (download, Cocoa.S_cancel);
-					return;
-				}
-			}
-		}
-		int string = Cocoa.objc_msgSend (array, Cocoa.S_objectAtIndex, 0);
-		length = OS.CFStringGetLength (string);
-		buffer = new char[length];
-		range = new CFRange ();
-		range.length = length;
-		OS.CFStringGetCharacters (string, range, buffer);
-		path = new String (buffer) + '/' + name;
-	} else {
-		FileDialog dialog = new FileDialog(browser.getShell(), SWT.SAVE);
-		dialog.setText(SWT.getMessage ("SWT_FileDownload")); //$NON-NLS-1$
-		dialog.setFileName(name);
-		path = dialog.open();
-	}
-
-	if (path == null) {
-		/* cancel pressed */
-		Cocoa.objc_msgSend(download, Cocoa.S_cancel);
-		return;
-	}
-	int result = createNSString(path);
-	Cocoa.objc_msgSend(download, Cocoa.S_setDestinationAllowOverwrite, result, 1);
-	OS.CFRelease(result);
-}
-
-/* DOMEventListener */
-
-void handleEvent(int evt) {
-	if (!browser.isEnabled ()) return;
-
-	int type = Cocoa.objc_msgSend(evt, Cocoa.S_type);
-	int length = OS.CFStringGetLength(type);
-	char[] buffer = new char[length];
-	CFRange range = new CFRange();
-	range.length = length;
-	OS.CFStringGetCharacters(type, range, buffer);
-	String typeString = new String(buffer);
-
-	if (typeString.equals(DOMEVENT_FOCUSIN)) {
-		hasNewFocusElement = true;
-		return;
-	}
-	if (typeString.equals(DOMEVENT_FOCUSOUT)) {
-		hasNewFocusElement = false;
-		return;
-	}
-
-	boolean ctrl = Cocoa.objc_msgSend(evt, Cocoa.S_ctrlKey) != 0;
-	boolean shift = Cocoa.objc_msgSend(evt, Cocoa.S_shiftKey) != 0;
-	boolean alt = Cocoa.objc_msgSend(evt, Cocoa.S_altKey) != 0;
-	boolean meta = Cocoa.objc_msgSend(evt, Cocoa.S_metaKey) != 0;
-
-	if (DOMEVENT_KEYDOWN.equals(typeString) || DOMEVENT_KEYUP.equals(typeString)) {
-		int keyCode = Cocoa.objc_msgSend(evt, Cocoa.S_keyCode);
-		int charCode = Cocoa.objc_msgSend(evt, Cocoa.S_charCode);
-
-		Event keyEvent = new Event();
-		keyEvent.widget = browser;
-		if (DOMEVENT_KEYDOWN.equals(typeString)) {
-			keyEvent.type = SWT.KeyDown;
-		} else {
-			keyEvent.type = SWT.KeyUp;
-		}
-		keyEvent.keyCode = translateKey(keyCode);
-		/*
-		* Safari maps the Delete key's character to 0xf728.  Detect
-		* this key and set its character to SWT.DEL so that the
-		* Browser's key events are consistent with other controls.
-		*/
-		if (keyEvent.keyCode == SWT.DEL) {
-			keyEvent.character = SWT.DEL;
-		} else {
-			keyEvent.character = (char)charCode;
-		}
-		keyEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
-
-		boolean doit;
-		if (keyEvent.type == SWT.KeyDown) {
-			doit = sendKeyEvent(keyEvent);
-		} else { /* SWT.KeyUp */
-			browser.notifyListeners(keyEvent.type, keyEvent);
-			doit = keyEvent.doit;
-		}
-		if (browser.isDisposed()) {
-			Cocoa.objc_msgSend(evt, Cocoa.S_preventDefault);
-			return;
-		}
-
-		/*
-		* Bug in Safari.  As a result of using HIWebViewCreate on OSX versions < 10.5 (Leopard), attempting
-		* to traverse out of Safari backwards (Shift+Tab) leaves it in a strange state where Safari no
-		* longer has focus but still receives keys.  The Carbon-based Safari examples have the same
-		* problem.  The workaround is to only allow forward Tab traversals in the Browser on OSX < 10.5.
-		*/
-		if (doit && OS.VERSION < 0x1050 && keyEvent.keyCode == SWT.TAB && (keyEvent.stateMask & SWT.SHIFT) != 0) {
-			doit = false;
-		}
-		if (!doit) {
-			Cocoa.objc_msgSend(evt, Cocoa.S_preventDefault);
-		} else {
-			if (!hasNewFocusElement && keyEvent.keyCode == SWT.TAB && DOMEVENT_KEYUP.equals(typeString)) {
-				hasNewFocusElement = false;
-			}
-		}
-		return;
-	}
-
-	/* mouse event */
-
-	/*
-	 * The position of mouse events is received in screen-relative coordinates
-	 * in order to handle pages with frames, since frames express their event
-	 * coordinates relative to themselves rather than relative to their top-
-	 * level page.  Convert screen-relative coordinates to be browser-relative.
-	 */
-	int screenX = Cocoa.objc_msgSend(evt, Cocoa.S_screenX);
-	int screenY = Cocoa.objc_msgSend(evt, Cocoa.S_screenY);
-	Point position = new Point(screenX, screenY);
-	position = browser.getDisplay().map(null, browser, position);
-
-	int detail = Cocoa.objc_msgSend(evt, Cocoa.S_detail);
-	Event mouseEvent = new Event();
-	mouseEvent.widget = browser;
-	mouseEvent.x = position.x; mouseEvent.y = position.y;
-	mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
-
-	if (DOMEVENT_MOUSEDOWN.equals (typeString)) {
-		mouseEvent.type = SWT.MouseDown;
-		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
-		mouseEvent.button = button + 1;
-		mouseEvent.count = detail;
-	} else if (DOMEVENT_MOUSEUP.equals (typeString)) {
-		mouseEvent.type = SWT.MouseUp;
-		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
-		mouseEvent.button = button + 1;
-		mouseEvent.count = detail;
-		switch (mouseEvent.button) {
-			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
-			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
-			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
-			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
-			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
-		}
-	} else if (DOMEVENT_MOUSEMOVE.equals (typeString)) {
-		/*
-		* Feature in Safari.  Spurious and redundant mousemove events are received in
-		* various contexts, including following every MouseUp.  The workaround is to
-		* not fire MouseMove events whose x and y values match the last MouseMove.  
-		*/
-		if (mouseEvent.x == lastMouseMoveX && mouseEvent.y == lastMouseMoveY) return;
-		mouseEvent.type = SWT.MouseMove;
-		lastMouseMoveX = mouseEvent.x; lastMouseMoveY = mouseEvent.y;
-	} else if (DOMEVENT_MOUSEWHEEL.equals (typeString)) {
-		mouseEvent.type = SWT.MouseWheel;
-		int delta = Cocoa.objc_msgSend(evt, Cocoa.S_wheelDelta);
-		mouseEvent.count = delta / 120;
-	}
-
-	browser.notifyListeners (mouseEvent.type, mouseEvent);
-	if (browser.isDisposed()) return;
-	if (detail == 2 && DOMEVENT_MOUSEDOWN.equals (typeString)) {
-		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
-		mouseEvent = new Event ();
-		mouseEvent.widget = browser;
-		mouseEvent.x = position.x; mouseEvent.y = position.y;
-		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
-		mouseEvent.type = SWT.MouseDoubleClick;
-		mouseEvent.button = button + 1;
-		mouseEvent.count = detail;
-		browser.notifyListeners (mouseEvent.type, mouseEvent);
-	}
-}
-
-/* external */
-
-Object convertToJava (int value) {
-	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_NSString) != 0) {
-		int length = Cocoa.objc_msgSend (value, Cocoa.S_length);
-		char[] buffer = new char[length];
-		Cocoa.objc_msgSend (value, Cocoa.S_getCharacters_, buffer);
-		return new String (buffer);
-	}
-	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
-		int ptr = Cocoa.objc_msgSend (value, Cocoa.S_objCType);
-		byte[] type = new byte[1];
-		OS.memmove (type, ptr, 1);
-		if (type[0] == 'c' || type[0] == 'B') {
-			int result = Cocoa.objc_msgSend (value, Cocoa.S_boolValue);
-			return new Boolean (result != 0);
-		}
-		if ("islqISLQfd".indexOf (type[0]) != -1) { //$NON-NLS-1$
-			double result = Cocoa.objc_msgSend_fpret (value, Cocoa.S_doubleValue);
-			return new Double (result);
-		}
-	}
-	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_WebScriptObject) != 0) {
-		int str = createNSString ("length"); //$NON-NLS-1$
-		int numberValue = Cocoa.objc_msgSend (value, Cocoa.S_valueForKey, str);
-		OS.CFRelease (str);
-		int length = Cocoa.objc_msgSend (numberValue, Cocoa.S_intValue);
-		Object[] arguments = new Object[length];
-		for (int i = 0; i < length; i++) {
-			int current = Cocoa.objc_msgSend (value, Cocoa.S_webScriptValueAtIndex, i);
-			if (current != 0) {
-				arguments[i] = convertToJava (current);
-			}
-		}
-		return arguments;
-	}
-	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_WebUndefined) != 0) {
-		return null;
-	}
-
-	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
-	return null;
-}
-
-int convertToJS (Object value) {
-	if (value == null) {
-		return Cocoa.objc_msgSend (Cocoa.C_WebUndefined, Cocoa.S_undefined);
-	}
-	if (value instanceof String) {
-		return createNSString((String)value);
-	}
-	if (value instanceof Boolean) {
-		int booleanValue = ((Boolean)value).booleanValue () ? 1 : 0;
-		return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithBool, booleanValue);
-	}
-	if (value instanceof Number) {
-		double doubleValue = ((Number)value).doubleValue ();
-		return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithDouble, doubleValue);
-	}
-	if (value instanceof Object[]) {
-		Object[] arrayValue = (Object[])value;
-		int length = arrayValue.length;
-		int array = Cocoa.objc_msgSend (Cocoa.C_NSMutableArray, Cocoa.S_arrayWithCapacity, length);
-		for (int i = 0; i < length; i++) {
-			Object currentObject = arrayValue[i];
-			int jsObject = convertToJS (currentObject);
-			Cocoa.objc_msgSend (array, Cocoa.S_addObject, jsObject);
-		}
-		return array;
-	}
-	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
-	return 0;
-}
-
-int /*long*/ callJava (int /*long*/ index, int /*long*/ args, int /*long*/ arg1) {
-	Object returnValue = null;
-	if (Cocoa.objc_msgSend (index, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
-		int functionIndex = Cocoa.objc_msgSend (index, Cocoa.S_intValue);
-		Object key = new Integer (functionIndex);
-		BrowserFunction function = (BrowserFunction)functions.get (key);
-		if (function != null) {
-			try {
-				Object temp = convertToJava (args);
-				if (temp instanceof Object[]) {
-					Object[] arguments = (Object[])temp;
-					try {
-						returnValue = function.function (arguments);
-					} catch (Exception e) {
-						/* exception during function invocation */
-						returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
-					}
-				}
-			} catch (IllegalArgumentException e) {
-				/* invalid argument value type */
-				if (function.isEvaluate) {
-					/* notify the evaluate function so that a java exception can be thrown */
-					function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
-				}
-				returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
-			}
-		}
-	}
-	try {
-		return convertToJS (returnValue);
-	} catch (SWTException e) {
-		return convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
-	}
-}
-}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..3944cfb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import org.eclipse.swt.SWT;
+
+class BrowserFactory {
+
+WebBrowser createWebBrowser (int style) {
+	if ((style & SWT.MOZILLA) != 0) {
+		return new Mozilla ();
+	}
+	return new WebKit ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java
deleted file mode 100644
index 90ecf69..0000000
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java	
+++ /dev/null
@@ -1,1786 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.browser;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Enumeration;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.internal.*;
-import org.eclipse.swt.internal.cocoa.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class Safari extends WebBrowser {
-	WebView webView;
-	WebPreferences preferences;
-	SWTWebViewDelegate delegate;
-	boolean loadingText, untrustedText;
-	String lastHoveredLinkURL, lastNavigateURL;
-	String html;
-	int /*long*/ identifier;
-	int resourceCount;
-	String url = ""; //$NON-NLS-1$
-	Point location;
-	Point size;
-	boolean statusBar = true, toolBar = true, ignoreDispose;
-	int lastMouseMoveX, lastMouseMoveY;
-	//TEMPORARY CODE
-//	boolean doit;
-
-	static int /*long*/ delegateClass;
-	static boolean Initialized;
-	// the following Callbacks are never freed
-	static Callback Callback3, Callback4, Callback5, Callback6, Callback7;
-
-	static final int MIN_SIZE = 16;
-	static final int MAX_PROGRESS = 100;
-	static final String WebElementLinkURLKey = "WebElementLinkURL"; //$NON-NLS-1$
-	static final String AGENT_STRING = "Safari/522.0"; /* Safari version on OSX 10.5 initial release */ //$NON-NLS-1$
-	static final String URI_FILEROOT = "file:///"; //$NON-NLS-1$
-	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
-	static final String PROTOCOL_HTTP = "http://"; //$NON-NLS-1$
-	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
-	static final String HEADER_SETCOOKIE = "Set-Cookie"; //$NON-NLS-1$
-	static final String POST = "POST"; //$NON-NLS-1$
-	static final String USER_AGENT = "user-agent"; //$NON-NLS-1$
-	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
-	static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$
-	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
-
-	/* event strings */
-	static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$
-	static final String DOMEVENT_KEYDOWN = "keydown"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEDOWN = "mousedown"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEUP = "mouseup"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEMOVE = "mousemove"; //$NON-NLS-1$
-	static final String DOMEVENT_MOUSEWHEEL = "mousewheel"; //$NON-NLS-1$
-
-	static {
-		NativeClearSessions = new Runnable() {
-			public void run() {
-				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage();
-				NSArray cookies = storage.cookies();
-				int count = (int)/*64*/cookies.count ();
-				for (int i = 0; i < count; i++) {
-					NSHTTPCookie cookie = new NSHTTPCookie(cookies.objectAtIndex(i));
-					if (cookie.isSessionOnly()) {
-						storage.deleteCookie(cookie);
-					}
-				}
-			}
-		};
-
-		NativeGetCookie = new Runnable () {
-			public void run () {
-				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage ();
-				NSURL url = NSURL.URLWithString (NSString.stringWith (CookieUrl));
-				NSArray cookies = storage.cookiesForURL (url);
-				int count = (int)/*64*/cookies.count ();
-				if (count == 0) return;
-
-				NSString name = NSString.stringWith (CookieName);
-				for (int i = 0; i < count; i++) {
-					NSHTTPCookie current = new NSHTTPCookie (cookies.objectAtIndex (i));
-					if (current.name ().compare (name) == OS.NSOrderedSame) {
-						CookieValue = current.value ().getString ();
-						return;
-					}
-				}
-			}
-		};
-
-		NativeSetCookie = new Runnable () {
-			public void run () {
-				NSURL url = NSURL.URLWithString (NSString.stringWith (CookieUrl));
-				NSMutableDictionary headers = NSMutableDictionary.dictionaryWithCapacity (1);
-				headers.setValue (NSString.stringWith (CookieValue), NSString.stringWith (HEADER_SETCOOKIE));
-				NSArray cookies = NSHTTPCookie.cookiesWithResponseHeaderFields (headers, url);
-				if (cookies.count () == 0) return;
-				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage ();
-				NSHTTPCookie cookie = new NSHTTPCookie (cookies.objectAtIndex (0));
-				storage.setCookie (cookie);
-				CookieResult = true;
-			}
-		};
-
-		if (NativePendingCookies != null) {
-			SetPendingCookies (NativePendingCookies);
-		}
-		NativePendingCookies = null;
-	}
-
-public boolean create (Composite parent, int style) {
-	if (delegateClass == 0) {
-		Class safariClass = this.getClass();
-		Callback3 = new Callback(safariClass, "browserProc", 3); //$NON-NLS-1$
-		int /*long*/ proc3 = Callback3.getAddress();
-		if (proc3 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Callback4 = new Callback(safariClass, "browserProc", 4); //$NON-NLS-1$
-		int /*long*/ proc4 = Callback4.getAddress();
-		if (proc4 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Callback5 = new Callback(safariClass, "browserProc", 5); //$NON-NLS-1$
-		int /*long*/ proc5 = Callback5.getAddress();
-		if (proc5 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Callback6 = new Callback(safariClass, "browserProc", 6); //$NON-NLS-1$
-		int /*long*/ proc6 = Callback6.getAddress();
-		if (proc6 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Callback7 = new Callback(safariClass, "browserProc", 7); //$NON-NLS-1$
-		int /*long*/ proc7 = Callback7.getAddress();
-		if (proc7 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		int /*long*/ setFrameProc = OS.CALLBACK_webView_setFrame_(proc4);
-		if (setFrameProc == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-
-		String className = "SWTWebViewDelegate"; //$NON-NLS-1$
-		byte[] types = {'*','\0'};
-		int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
-		delegateClass = OS.objc_allocateClassPair (OS.class_NSObject, className, 0);
-
-		OS.class_addIvar(delegateClass, SWT_OBJECT, size, (byte)align, types);
-		OS.class_addMethod(delegateClass, OS.sel_webView_didChangeLocationWithinPageForFrame_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_didFailProvisionalLoadWithError_forFrame_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_didFinishLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_didReceiveTitle_forFrame_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_didStartProvisionalLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_didCommitLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didFinishLoadingFromDataSource_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_, proc6, "@:@@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didFailLoadingWithError_fromDataSource_, proc6, "@:@@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_identifierForInitialRequest_fromDataSource_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_resource_willSendRequest_redirectResponse_fromDataSource_, proc7, "@:@@@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_createWebViewWithRequest_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webViewShow_, proc3, "@:@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webViewClose_, proc3, "@:@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_contextMenuItemsForElement_defaultMenuItems_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_setStatusBarVisible_, proc4, "@:@B"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_setResizable_, proc4, "@:@B"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_setToolbarsVisible_, proc4, "@:@B"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_setStatusText_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webViewFocus_, proc3, "@:@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webViewUnfocus_, proc3, "@:@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptAlertPanelWithMessage_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptAlertPanelWithMessage_initiatedByFrame_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptConfirmPanelWithMessage_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptConfirmPanelWithMessage_initiatedByFrame_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_runOpenPanelForFileButtonWithResultListener_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_mouseDidMoveOverElement_modifierFlags_, proc5, "@:@@I"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_printFrameView_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForMIMEType_request_frame_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForNavigationAction_request_frame_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_unableToImplementPolicyWithError_frame_, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_download_decideDestinationWithSuggestedFilename_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_handleEvent_, proc3, "@:@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_setFrame_, setFrameProc, "@:@{NSRect}"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_webView_windowScriptObjectAvailable_, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_callJava, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_callRunBeforeUnloadConfirmPanelWithMessage, proc4, "@:@@"); //$NON-NLS-1$
-		OS.class_addMethod(delegateClass, OS.sel_createPanelDidEnd, proc5, "@:@@@"); //$NON-NLS-1$
-		OS.objc_registerClassPair(delegateClass);
-
- 		int /*long*/ metaClass = OS.objc_getMetaClass (className);
-		OS.class_addMethod(metaClass, OS.sel_isSelectorExcludedFromWebScript_, proc3, "@:@"); //$NON-NLS-1$
-		OS.class_addMethod(metaClass, OS.sel_webScriptNameForSelector_, proc3, "@:@"); //$NON-NLS-1$
-	}
-
-	/*
-	* Override the default event mechanism to not send key events so
-	* that the browser can send them by listening to the DOM instead.
-	*/
-	browser.setData(SAFARI_EVENTS_FIX_KEY);
-
-	WebView webView = (WebView)new WebView().alloc();
-	if (webView == null) SWT.error(SWT.ERROR_NO_HANDLES);
-	webView.initWithFrame(browser.view.frame(), null, null);
-	webView.setAutoresizingMask(OS.NSViewWidthSizable | OS.NSViewHeightSizable);
-	if (webView.respondsToSelector(OS.sel__setDashboardBehavior)) {
-		OS.objc_msgSend(webView.id, OS.sel__setDashboardBehavior, 2, 1);
-	}
-	final SWTWebViewDelegate delegate = (SWTWebViewDelegate)new SWTWebViewDelegate().alloc().init();
-	Display display = browser.getDisplay();
-	display.setData(ADD_WIDGET_KEY, new Object[] {delegate, browser});
-	this.delegate = delegate;
-	this.webView = webView;
-	browser.view.addSubview(webView);
-
-	Listener listener = new Listener() {
-		public void handleEvent(Event e) {
-			switch (e.type) {
-				case SWT.FocusIn:
-					Safari.this.webView.window().makeFirstResponder(Safari.this.webView);
-					break;
-				case SWT.Dispose: {
-					/* make this handler run after other dispose listeners */
-					if (ignoreDispose) {
-						ignoreDispose = false;
-						break;
-					}
-					ignoreDispose = true;
-					browser.notifyListeners (e.type, e);
-					e.type = SWT.NONE;
-
-					/* Browser could have been disposed by one of the Dispose listeners */
-					if (!browser.isDisposed()) {
-						/* invoke onbeforeunload handlers */
-						if (!browser.isClosing) {
-							close (false);
-						}
-
-						e.display.setData(ADD_WIDGET_KEY, new Object[] {delegate, null});
-					}
-
-					Safari.this.webView.setFrameLoadDelegate(null);
-					Safari.this.webView.setResourceLoadDelegate(null);
-					Safari.this.webView.setUIDelegate(null);
-					Safari.this.webView.setPolicyDelegate(null);
-					Safari.this.webView.setDownloadDelegate(null);
-
-					Safari.this.webView.release();
-					Safari.this.webView = null;
-					Safari.this.delegate.release();
-					Safari.this.delegate = null;
-					html = null;
-					lastHoveredLinkURL = lastNavigateURL = null;
-
-					Enumeration elements = functions.elements ();
-					while (elements.hasMoreElements ()) {
-						((BrowserFunction)elements.nextElement ()).dispose (false);
-					}
-					functions = null;
-
-					if (preferences != null) preferences.release ();
-					preferences = null;
-					break;
-				}
-			}
-		}
-	};
-	browser.addListener(SWT.Dispose, listener);
-	browser.addListener(SWT.KeyDown, listener); /* needed for tabbing into the Browser */
-	browser.addListener(SWT.FocusIn, listener);
-
-	webView.setFrameLoadDelegate(delegate);
-	webView.setResourceLoadDelegate(delegate);
-	webView.setUIDelegate(delegate);	
-	webView.setPolicyDelegate(delegate);
-	webView.setDownloadDelegate(delegate);
-	webView.setApplicationNameForUserAgent(NSString.stringWith(AGENT_STRING));
-
-	if (!Initialized) {
-		Initialized = true;
-		/* disable applets */
-		WebPreferences.standardPreferences().setJavaEnabled(false);
-	}
-
-	return true;
-}
-
-public boolean back() {
-	html = null;	
-	return webView.goBack();
-}
-
-static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
-	if (id == delegateClass) {
-		if (sel == OS.sel_isSelectorExcludedFromWebScript_) {
-			return isSelectorExcludedFromWebScript (arg0) ? 1 : 0;
-		} else if (sel == OS.sel_webScriptNameForSelector_) {
-			return webScriptNameForSelector (arg0);
-		}
-	}
-
-	Widget widget = Display.getCurrent().findWidget(id);
-	if (widget == null) return 0;
-	Safari safari = (Safari)((Browser)widget).webBrowser;
-	if (sel == OS.sel_webViewShow_) {
-		safari.webViewShow(arg0);
-	} else if (sel == OS.sel_webViewClose_) {
-		safari.webViewClose(arg0);
-	} else if (sel == OS.sel_webViewFocus_) {
-		safari.webViewFocus(arg0);
-	} else if (sel == OS.sel_webViewUnfocus_) {
-		safari.webViewUnfocus(arg0);
-	} else if (sel == OS.sel_handleEvent_) {
-		safari.handleEvent(arg0);
-	}
-	return 0;
-}
-
-static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
-	Widget widget = Display.getCurrent().findWidget(id);
-	if (widget == null) return 0;
-	Safari safari = (Safari)((Browser)widget).webBrowser;
-	if (sel == OS.sel_webView_didChangeLocationWithinPageForFrame_) {
-		safari.webView_didChangeLocationWithinPageForFrame(arg0, arg1);
-	} else if (sel == OS.sel_webView_didFinishLoadForFrame_) {
-		safari.webView_didFinishLoadForFrame(arg0, arg1);
-	} else if (sel == OS.sel_webView_didStartProvisionalLoadForFrame_) {
-		safari.webView_didStartProvisionalLoadForFrame(arg0, arg1);
-	} else if (sel == OS.sel_webView_didCommitLoadForFrame_) {
-		safari.webView_didCommitLoadForFrame(arg0, arg1);
-	} else if (sel == OS.sel_webView_setFrame_) {
-		safari.webView_setFrame(arg0, arg1);
-	} else if (sel == OS.sel_webView_createWebViewWithRequest_) {
-		return safari.webView_createWebViewWithRequest(arg0, arg1);		
-	} else if (sel == OS.sel_webView_setStatusBarVisible_) {
-		safari.webView_setStatusBarVisible(arg0, arg1 != 0);
-	} else if (sel == OS.sel_webView_setResizable_) {
-		safari.webView_setResizable(arg0, arg1 != 0);
-	} else if (sel == OS.sel_webView_setStatusText_) {
-		safari.webView_setStatusText(arg0, arg1);
-	} else if (sel == OS.sel_webView_setToolbarsVisible_) {
-		safari.webView_setToolbarsVisible(arg0, arg1 != 0);
-	} else if (sel == OS.sel_webView_runJavaScriptAlertPanelWithMessage_) {
-		safari.webView_runJavaScriptAlertPanelWithMessage(arg0, arg1);
-	} else if (sel == OS.sel_webView_runJavaScriptConfirmPanelWithMessage_) {
-		return safari.webView_runJavaScriptConfirmPanelWithMessage(arg0, arg1);
-	} else if (sel == OS.sel_webView_runOpenPanelForFileButtonWithResultListener_) {
-		safari.webView_runOpenPanelForFileButtonWithResultListener(arg0, arg1);
-	} else if (sel == OS.sel_download_decideDestinationWithSuggestedFilename_) {
-		safari.download_decideDestinationWithSuggestedFilename(arg0, arg1);
-	} else if (sel == OS.sel_webView_printFrameView_) {
-		safari.webView_printFrameView(arg0, arg1);
-	} else if (sel == OS.sel_webView_windowScriptObjectAvailable_) {
-		safari.webView_windowScriptObjectAvailable (arg0, arg1);
-	} else if (sel == OS.sel_callRunBeforeUnloadConfirmPanelWithMessage) {
-		return safari.callRunBeforeUnloadConfirmPanelWithMessage (arg0, arg1).id;
-	}
-	return 0;
-}
-
-static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
-	Widget widget = Display.getCurrent().findWidget(id);
-	if (widget == null) return 0;
-	Safari safari = (Safari)((Browser)widget).webBrowser;
-	if (sel == OS.sel_webView_didFailProvisionalLoadWithError_forFrame_) {
-		safari.webView_didFailProvisionalLoadWithError_forFrame(arg0, arg1, arg2);
-	} else if (sel == OS.sel_webView_didReceiveTitle_forFrame_) {
-		safari.webView_didReceiveTitle_forFrame(arg0, arg1, arg2);
-	} else if (sel == OS.sel_webView_resource_didFinishLoadingFromDataSource_) {
-		safari.webView_resource_didFinishLoadingFromDataSource(arg0, arg1, arg2);
-	} else if (sel == OS.sel_webView_identifierForInitialRequest_fromDataSource_) {
-		return safari.webView_identifierForInitialRequest_fromDataSource(arg0, arg1, arg2);
-	} else if (sel == OS.sel_webView_contextMenuItemsForElement_defaultMenuItems_) {
-		return safari.webView_contextMenuItemsForElement_defaultMenuItems(arg0, arg1, arg2);
-	} else if (sel == OS.sel_webView_mouseDidMoveOverElement_modifierFlags_) {
-		safari.webView_mouseDidMoveOverElement_modifierFlags(arg0, arg1, arg2);
-	} else if (sel == OS.sel_webView_unableToImplementPolicyWithError_frame_) {
-		safari.webView_unableToImplementPolicyWithError_frame(arg0, arg1, arg2);
-	} else if (sel == OS.sel_webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame_) {
-		return safari.webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame(arg0, arg1, arg2) ? 1 : 0;
-	} else if (sel == OS.sel_webView_runJavaScriptAlertPanelWithMessage_initiatedByFrame_) {
-		safari.webView_runJavaScriptAlertPanelWithMessage(arg0, arg1);
-	} else if (sel == OS.sel_webView_runJavaScriptConfirmPanelWithMessage_initiatedByFrame_) {
-		return safari.webView_runJavaScriptConfirmPanelWithMessage(arg0, arg1);
-	} else if (sel == OS.sel_callJava) {
-		id result = safari.callJava(arg0, arg1, arg2);
-		return result == null ? 0 : result.id;
-	} else if (sel == OS.sel_createPanelDidEnd) {
-		safari.createPanelDidEnd(arg0, arg1, arg2);
-	}
-	return 0;
-}
-
-static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
-	Widget widget = Display.getCurrent().findWidget(id);
-	if (widget == null) return 0;
-	Safari safari = (Safari)((Browser)widget).webBrowser;
-	if (sel == OS.sel_webView_resource_didFailLoadingWithError_fromDataSource_) {
-		safari.webView_resource_didFailLoadingWithError_fromDataSource(arg0, arg1, arg2, arg3);
-	} else if (sel == OS.sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_) {
-		safari.webView_resource_didReceiveAuthenticationChallenge_fromDataSource(arg0, arg1, arg2, arg3);
-	}
-	return 0;
-}
-
-static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4) {
-	Widget widget = Display.getCurrent().findWidget(id);
-	if (widget == null) return 0;
-	Safari safari = (Safari)((Browser)widget).webBrowser;
-	if (sel == OS.sel_webView_resource_willSendRequest_redirectResponse_fromDataSource_) {
-		return safari.webView_resource_willSendRequest_redirectResponse_fromDataSource(arg0, arg1, arg2, arg3, arg4);
-	} else if (sel == OS.sel_webView_decidePolicyForMIMEType_request_frame_decisionListener_) {
-		safari.webView_decidePolicyForMIMEType_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4);
-	} else if (sel == OS.sel_webView_decidePolicyForNavigationAction_request_frame_decisionListener_) {
-		safari.webView_decidePolicyForNavigationAction_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4);
-	} else if (sel == OS.sel_webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener_) {
-		safari.webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(arg0, arg1, arg2, arg3, arg4);
-	}
-	return 0;
-}
-
-static boolean isSelectorExcludedFromWebScript (int /*long*/ aSelector) {
-	return !(aSelector == OS.sel_callJava || aSelector == OS.sel_callRunBeforeUnloadConfirmPanelWithMessage);
-}
-
-static int /*long*/ webScriptNameForSelector (int /*long*/ aSelector) {
-	if (aSelector == OS.sel_callJava) {
-		return NSString.stringWith ("callJava").id; //$NON-NLS-1$
-	}
-	if (aSelector == OS.sel_callRunBeforeUnloadConfirmPanelWithMessage) {
-		return NSString.stringWith ("callRunBeforeUnloadConfirmPanelWithMessage").id; //$NON-NLS-1$
-	}
-	return 0;
-}
-
-public boolean close () {
-	return close (true);
-}
-
-boolean close (boolean showPrompters) {
-	if (!jsEnabled) return true;
-
-	String functionName = EXECUTE_ID + "CLOSE"; // $NON-NLS-1$
-	StringBuffer buffer = new StringBuffer ("function "); // $NON-NLS-1$
-	buffer.append (functionName);
-	buffer.append ("(win) {\n"); // $NON-NLS-1$
-	buffer.append ("var fn = win.onbeforeunload; if (fn != null) {try {var str = fn(); "); // $NON-NLS-1$
-	if (showPrompters) {
-		buffer.append ("if (str != null) { "); // $NON-NLS-1$
-		buffer.append ("var result = window.external.callRunBeforeUnloadConfirmPanelWithMessage(str);"); // $NON-NLS-1$
-		buffer.append ("if (!result) return false;}"); // $NON-NLS-1$
-	}	
-	buffer.append ("} catch (e) {}}"); // $NON-NLS-1$
-	buffer.append ("try {for (var i = 0; i < win.frames.length; i++) {var result = "); // $NON-NLS-1$
-	buffer.append (functionName);
-	buffer.append ("(win.frames[i]); if (!result) return false;}} catch (e) {} return true;"); // $NON-NLS-1$
-	buffer.append ("\n};"); // $NON-NLS-1$
-	execute (buffer.toString ());
-
-	Boolean result = (Boolean)evaluate ("return " + functionName +"(window);"); // $NON-NLS-1$ // $NON-NLS-2$
-	if (result == null) return false;
-	return result.booleanValue ();
-}
-
-public boolean execute (String script) {
-	WebFrame frame = webView.mainFrame();
-	int /*long*/ context = frame.globalContext();
-
-	byte[] bytes = null;
-	try {
-		bytes = (script + '\0').getBytes("UTF-8"); //$NON-NLS-1$
-	} catch (UnsupportedEncodingException e) {
-		bytes = (script + '\0').getBytes();
-	}
-	int /*long*/ scriptString = OS.JSStringCreateWithUTF8CString(bytes);
-
-	try {
-		bytes = (getUrl() + '\0').getBytes("UTF-8"); //$NON-NLS-1$
-	} catch (UnsupportedEncodingException e) {
-		bytes = (getUrl() + '\0').getBytes();
-	}
-	int /*long*/ urlString = OS.JSStringCreateWithUTF8CString(bytes);
-
-	int /*long*/ result = OS.JSEvaluateScript(context, scriptString, 0, urlString, 0, null);
-	OS.JSStringRelease(urlString);
-	OS.JSStringRelease(scriptString);
-	return result != 0;
-}
-
-public boolean forward () {
-	html = null;
-	return webView.goForward();
-}
-
-public String getBrowserType () {
-	return "webkit"; //$NON-NLS-1$
-}
-
-public String getText() {
-	WebFrame mainFrame = webView.mainFrame();
-	WebDataSource dataSource = mainFrame.dataSource();
-	if (dataSource == null) return "";	//$NON-NLS-1$
-	WebDocumentRepresentation representation = dataSource.representation();
-	if (representation == null) return "";	//$NON-NLS-1$
-	NSString source = representation.documentSource();
-	if (source == null) return "";	//$NON-NLS-1$
-	return source.getString();
-}
-
-public String getUrl() {
-	/* WebKit auto-navigates to about:blank at startup */
-	if (url.length() == 0) return ABOUT_BLANK;
-
-	return url;
-}
-
-public boolean isBackEnabled() {
-	return webView.canGoBack();
-}
-
-public boolean isForwardEnabled() {
-	return webView.canGoForward();
-}
-
-public void refresh() {
-	html = null;
-	webView.reload(null);
-}
-
-public boolean setText(String html, boolean trusted) {
-	/*
-	* If this.html is not null then the about:blank page is already being loaded,
-	* so no navigate is required.  Just set the html that is to be shown.
-	*/
-	boolean blankLoading = this.html != null;
-	this.html = html;
-	untrustedText = !trusted;
-	if (blankLoading) return true;
-
-	NSURL inURL = NSURL.URLWithString(NSString.stringWith (ABOUT_BLANK));
-	NSURLRequest request = NSURLRequest.requestWithURL(inURL);
-	WebFrame mainFrame = webView.mainFrame();
-	mainFrame.loadRequest(request);
-	return true;
-}
-
-public boolean setUrl(String url, String postData, String[] headers) {
-	html = null;
-	lastNavigateURL = url;
-
-	if (url.indexOf('/') == 0) {
-		url = PROTOCOL_FILE + url;
-	} else if (url.indexOf(':') == -1) {
-		url = PROTOCOL_HTTP + url;
-	}
-
-	NSString str = NSString.stringWith(url);
-	NSString unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
-	int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, str.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8);
-	NSString escapedString = new NSString(ptr);
-	NSURL inURL = NSURL.URLWithString(escapedString);
-	OS.CFRelease(ptr);
-	NSMutableURLRequest request = (NSMutableURLRequest)NSMutableURLRequest.requestWithURL(inURL);
-	if (postData != null) {
-		request.setHTTPMethod(NSString.stringWith(POST));
-		byte[] bytes = postData.getBytes();
-		NSData data = NSData.dataWithBytes(bytes, bytes.length);
-		request.setHTTPBody(data);
-	}
-	if (headers != null) {
-		for (int i = 0; i < headers.length; i++) {
-			String current = headers[i];
-			if (current != null) {
-				int index = current.indexOf(':');
-				if (index != -1) {
-					String key = current.substring(0, index).trim();
-					String value = current.substring(index + 1).trim();
-					if (key.length() > 0 && value.length() > 0) {
-						if (key.equalsIgnoreCase(USER_AGENT)) {
-							/*
-							* Feature of Safari.  The user-agent header value cannot be overridden
-							* here.  The workaround is to temporarily set the value on the WebView
-							* and then remove it after the loading of the request has begun.
-							*/
-							webView.setCustomUserAgent(NSString.stringWith(value));
-						} else {
-							request.setValue(NSString.stringWith(value), NSString.stringWith(key));						
-						}
-					}
-				}
-			}
-		}
-	}
-	WebFrame mainFrame = webView.mainFrame();
-	mainFrame.loadRequest(request);
-	webView.setCustomUserAgent(null);
-	return true;
-}
-
-public void stop() {
-	html = null;
-	webView.stopLoading(null);
-}
-
-boolean translateMnemonics() {
-	return false;
-}
-
-/* WebFrameLoadDelegate */
-
-void webView_didChangeLocationWithinPageForFrame(int /*long*/ sender, int /*long*/ frameID) {
-	WebFrame frame = new WebFrame(frameID);
-	WebDataSource dataSource = frame.dataSource();
-	NSURLRequest request = dataSource.request();
-	NSURL url = request.URL();
-	NSString s = url.absoluteString();
-	int length = (int)/*64*/s.length();
-	if (length == 0) return;
-	String url2 = s.getString();
-	/*
-	 * If the URI indicates that the page is being rendered from memory
-	 * (via setText()) then set it to about:blank to be consistent with IE.
-	 */
-	if (url2.equals (URI_FILEROOT)) {
-		url2 = ABOUT_BLANK;
-	} else {
-		length = URI_FILEROOT.length ();
-		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
-			url2 = ABOUT_BLANK + url2.substring (length);
-		}
-	}
-
-	final Display display = browser.getDisplay();
-	boolean top = frameID == webView.mainFrame().id;
-	if (top) {
-		StatusTextEvent statusText = new StatusTextEvent(browser);
-		statusText.display = display;
-		statusText.widget = browser;
-		statusText.text = url2;
-		for (int i = 0; i < statusTextListeners.length; i++) {
-			statusTextListeners[i].changed(statusText);
-		}
-	}
-
-	LocationEvent location = new LocationEvent(browser);
-	location.display = display;
-	location.widget = browser;
-	location.location = url2;
-	location.top = top;
-	for (int i = 0; i < locationListeners.length; i++) {
-		locationListeners[i].changed(location);
-	}
-}
-
-void webView_didFailProvisionalLoadWithError_forFrame(int /*long*/ sender, int /*long*/ error, int /*long*/ frame) {
-	if (frame == webView.mainFrame().id) {
-		/*
-		* Feature on Safari.  The identifier is used here as a marker for the events 
-		* related to the top frame and the URL changes related to that top frame as 
-		* they should appear on the location bar of a browser.  It is expected to reset
-		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-		* the identifierForInitialRequest event is received.  However, Safari fires
-		* the didFinishLoadingFromDataSource event before the entire content of the
-		* top frame is loaded.  It is possible to receive multiple willSendRequest 
-		* events in this interval, causing the Browser widget to send unwanted
-		* Location.changing events.  For this reason, the identifier is reset to 0
-		* when the top frame has either finished loading (didFinishLoadForFrame
-		* event) or failed (didFailProvisionalLoadWithError).
-		*/
-		identifier = 0;
-	}
-
-	NSError nserror = new NSError(error);
-	int /*long*/ errorCode = nserror.code();
-	if (OS.NSURLErrorBadURL < errorCode) return;
-
-	NSURL failingURL = null;
-	NSDictionary info = nserror.userInfo();
-	if (info != null) {
-		id id = info.valueForKey(NSString.stringWith("NSErrorFailingURLKey")); //$NON-NLS-1$
-		if (id != null) failingURL = new NSURL(id);
-	}
-
-	if (failingURL != null && OS.NSURLErrorServerCertificateNotYetValid <= errorCode && errorCode <= OS.NSURLErrorSecureConnectionFailed) {
-		/* handle invalid certificate error */
-		id certificates = info.objectForKey(NSString.stringWith("NSErrorPeerCertificateChainKey")); //$NON-NLS-1$
-
-		int /*long*/[] policySearch = new int /*long*/[1];
-		int /*long*/[] policyRef = new int /*long*/[1];
-		int /*long*/[] trustRef = new int /*long*/[1];
-		boolean success = false;
-		int result = OS.SecPolicySearchCreate(OS.CSSM_CERT_X_509v3, 0, 0, policySearch);
-		if (result == 0 && policySearch[0] != 0) {
-			result = OS.SecPolicySearchCopyNext(policySearch[0], policyRef);
-			if (result == 0 && policyRef[0] != 0) {
-				result = OS.SecTrustCreateWithCertificates(certificates.id, policyRef[0], trustRef);
-				if (result == 0 && trustRef[0] != 0) {
-					SFCertificateTrustPanel panel = SFCertificateTrustPanel.sharedCertificateTrustPanel();
-					String failingUrlString = failingURL.absoluteString().getString();
-					String message = Compatibility.getMessage("SWT_InvalidCert_Message", new Object[] {failingUrlString}); //$NON-NLS-1$
-					panel.setAlternateButtonTitle(NSString.stringWith(Compatibility.getMessage("SWT_Cancel"))); //$NON-NLS-1$
-					panel.setShowsHelp(true);
-					failingURL.retain();
-					NSWindow window = browser.getShell().view.window();
-					panel.beginSheetForWindow(window, delegate, OS.sel_createPanelDidEnd, failingURL.id, trustRef[0], NSString.stringWith(message));
-					success = true;
-				}
-			}
-		}
-
-		if (trustRef[0] != 0) OS.CFRelease(trustRef[0]);
-		if (policyRef[0] != 0) OS.CFRelease(policyRef[0]);
-		if (policySearch[0] != 0) OS.CFRelease(policySearch[0]);
-		if (success) return;
-	}
-
-	/* handle other types of errors */
-	NSString description = nserror.localizedDescription();
-	if (description != null) {
-		String descriptionString = description.getString();
-		String message = failingURL != null ? failingURL.absoluteString().getString() + "\n\n" : ""; //$NON-NLS-1$ //$NON-NLS-2$
-		message += Compatibility.getMessage ("SWT_Page_Load_Failed", new Object[] {descriptionString}); //$NON-NLS-1$
-		MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_ERROR);
-		messageBox.setMessage(message);
-		messageBox.open();
-	}
-}
-
-void createPanelDidEnd(int /*long*/ sheet, int /*long*/ returnCode, int /*long*/ contextInfo) {
-	NSURL failingURL = new NSURL(contextInfo);
-	failingURL.autorelease();
-	if (returnCode != OS.NSFileHandlingPanelOKButton) return;	/* nothing more to do */
-
-	int /*long*/ method = OS.class_getClassMethod(OS.class_NSURLRequest, OS.sel_setAllowsAnyHTTPSCertificate);
-	if (method != 0) {
-		OS.objc_msgSend(OS.class_NSURLRequest, OS.sel_setAllowsAnyHTTPSCertificate, 1, failingURL.host().id);
-		setUrl(failingURL.absoluteString().getString(), null, null);
-	}
-}
-
-void webView_didFinishLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
-	if (frameID == webView.mainFrame().id) {
-		/*
-		 * If html is not null then there is html from a previous setText() call
-		 * waiting to be set into the about:blank page once it has completed loading. 
-		 */
-		if (html != null) {
-			if (getUrl().startsWith(ABOUT_BLANK)) {
-				loadingText = true;
-				NSString string = NSString.stringWith(html);
-				NSString URLString;
-				if (untrustedText) {
-					URLString = NSString.stringWith(ABOUT_BLANK);
-				} else {
-					URLString = NSString.stringWith(URI_FILEROOT);
-				}
-				NSURL URL = NSURL.URLWithString(URLString);
-				WebFrame mainFrame = webView.mainFrame();
-				mainFrame.loadHTMLString(string, URL);
-				html = null;
-			}
-		}
-
-		/*
-		* The loadHTMLString() invocation above will trigger a second webView_didFinishLoadForFrame
-		* callback when it is completed.  If text was just set into the browser then wait for this
-		* second callback to come before sending the title or completed events.
-		*/
-		if (!loadingText) {
-			/*
-			* To be consistent with other platforms a title event should be fired when a
-			* page has completed loading.  A page with a <title> tag will do this
-			* automatically when the didReceiveTitle callback is received.  However a page
-			* without a <title> tag will not do this by default, so fire the event
-			* here with the page's url as the title.
-			*/
-			Display display = browser.getDisplay();
-			WebFrame frame = new WebFrame(frameID);
-			WebDataSource dataSource = frame.dataSource();
-			if (dataSource != null) {
-				NSString title = dataSource.pageTitle();
-				if (title == null) {	/* page has no title */
-					TitleEvent newEvent = new TitleEvent(browser);
-					newEvent.display = display;
-					newEvent.widget = browser;
-					newEvent.title = getUrl();
-					for (int i = 0; i < titleListeners.length; i++) {
-						titleListeners[i].changed(newEvent);
-					}
-					if (browser.isDisposed()) return;
-				}
-			}
-
-			ProgressEvent progress = new ProgressEvent(browser);
-			progress.display = display;
-			progress.widget = browser;
-			progress.current = MAX_PROGRESS;
-			progress.total = MAX_PROGRESS;
-			for (int i = 0; i < progressListeners.length; i++) {
-				progressListeners[i].completed(progress);
-			}
-		}
-		loadingText = false;
-		if (browser.isDisposed()) return;
-
-		/*
-		* Feature on Safari.  The identifier is used here as a marker for the events 
-		* related to the top frame and the URL changes related to that top frame as 
-		* they should appear on the location bar of a browser.  It is expected to reset
-		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-		* the identifierForInitialRequest event is received.  However, Safari fires
-		* the didFinishLoadingFromDataSource event before the entire content of the
-		* top frame is loaded.  It is possible to receive multiple willSendRequest 
-		* events in this interval, causing the Browser widget to send unwanted
-		* Location.changing events.  For this reason, the identifier is reset to 0
-		* when the top frame has either finished loading (didFinishLoadForFrame
-		* event) or failed (didFailProvisionalLoadWithError).
-		*/
-		identifier = 0;
-	}
-}
-
-void hookDOMKeyListeners(int /*long*/ frameID) {
-	WebFrame frame = new WebFrame(frameID);
-	DOMDocument document = frame.DOMDocument();
-	if (document == null) return;
-
-	NSString type = NSString.stringWith(DOMEVENT_KEYDOWN);
-	document.addEventListener(type, delegate, false);
-
-	type = NSString.stringWith(DOMEVENT_KEYUP);
-	document.addEventListener(type, delegate, false);
-}
-
-void hookDOMMouseListeners(int /*long*/ frameID) {
-	WebFrame frame = new WebFrame(frameID);
-	DOMDocument document = frame.DOMDocument();
-	if (document == null) return;
-
-	NSString type = NSString.stringWith(DOMEVENT_MOUSEDOWN);
-	document.addEventListener(type, delegate, false);
-
-	type = NSString.stringWith(DOMEVENT_MOUSEUP);
-	document.addEventListener(type, delegate, false);
-
-	type = NSString.stringWith(DOMEVENT_MOUSEMOVE);
-	document.addEventListener(type, delegate, false);
-
-	type = NSString.stringWith(DOMEVENT_MOUSEWHEEL);
-	document.addEventListener(type, delegate, false);
-}
-
-void webView_didReceiveTitle_forFrame(int /*long*/ sender, int /*long*/ titleID, int /*long*/ frameID) {
-	if (frameID == webView.mainFrame().id) {
-		NSString title = new NSString(titleID);
-		String newTitle = title.getString();
-		TitleEvent newEvent = new TitleEvent(browser);
-		newEvent.display = browser.getDisplay();
-		newEvent.widget = browser;
-		newEvent.title = newTitle;
-		for (int i = 0; i < titleListeners.length; i++) {
-			titleListeners[i].changed(newEvent);
-		}
-	}
-}
-
-void webView_didStartProvisionalLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
-	/* 
-	* This code is intentionally commented.  WebFrameLoadDelegate:didStartProvisionalLoadForFrame is
-	* called before WebResourceLoadDelegate:willSendRequest and
-	* WebFrameLoadDelegate:didCommitLoadForFrame.  The resource count is reset when didCommitLoadForFrame
-	* is received for the top frame.
-	*/
-//	if (frameID == webView.mainFrame().id) {
-//		/* reset resource status variables */
-//		resourceCount= 0;
-//	}
-}
-
-void webView_didCommitLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
-	WebFrame frame = new WebFrame(frameID);
-	WebDataSource dataSource = frame.dataSource();
-	NSURLRequest request = dataSource.request();
-	NSURL url = request.URL();
-	NSString s = url.absoluteString();
-	int length = (int)/*64*/s.length();
-	if (length == 0) return;
-	String url2 = s.getString();
-	/*
-	 * If the URI indicates that the page is being rendered from memory
-	 * (via setText()) then set it to about:blank to be consistent with IE.
-	 */
-	if (url2.equals (URI_FILEROOT)) {
-		url2 = ABOUT_BLANK;
-	} else {
-		length = URI_FILEROOT.length ();
-		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
-			url2 = ABOUT_BLANK + url2.substring (length);
-		}
-	}
-
-	Display display = browser.getDisplay();
-	boolean top = frameID == webView.mainFrame().id;
-	if (top) {
-		/* reset resource status variables */
-		resourceCount = 0;		
-		this.url = url2;
-
-		/*
-		* Each invocation of setText() causes webView_didCommitLoadForFrame to be invoked
-		* twice, once for the initial navigate to about:blank, and once for the auto-navigate
-		* to about:blank that Safari does when loadHTMLString is invoked.  If this is the
-		* first webView_didCommitLoadForFrame callback received for a setText() invocation
-		* then do not send any events or re-install registered BrowserFunctions. 
-		*/
-		if (url2.startsWith(ABOUT_BLANK) && html != null) return;
-
-		/* re-install registered functions */
-		Enumeration elements = functions.elements ();
-		while (elements.hasMoreElements ()) {
-			BrowserFunction function = (BrowserFunction)elements.nextElement ();
-			execute (function.functionString);
-		}
-
-		ProgressEvent progress = new ProgressEvent(browser);
-		progress.display = display;
-		progress.widget = browser;
-		progress.current = 1;
-		progress.total = MAX_PROGRESS;
-		for (int i = 0; i < progressListeners.length; i++) {
-			progressListeners[i].changed(progress);
-		}
-		if (browser.isDisposed()) return;
-
-		StatusTextEvent statusText = new StatusTextEvent(browser);
-		statusText.display = display;
-		statusText.widget = browser;
-		statusText.text = url2;
-		for (int i = 0; i < statusTextListeners.length; i++) {
-			statusTextListeners[i].changed(statusText);
-		}
-		if (browser.isDisposed()) return;
-
-		hookDOMKeyListeners(frameID);
-	}
-
-	hookDOMMouseListeners(frameID);
-
-	LocationEvent location = new LocationEvent(browser);
-	location.display = display;
-	location.widget = browser;
-	location.location = url2;
-	location.top = top;
-	for (int i = 0; i < locationListeners.length; i++) {
-		locationListeners[i].changed(location);
-	}
-}
-
-void webView_windowScriptObjectAvailable (int /*long*/ webView, int /*long*/ windowScriptObject) {
-	NSObject scriptObject = new NSObject (windowScriptObject);
-	NSString key = NSString.stringWith ("external"); //$NON-NLS-1$
-	scriptObject.setValue (delegate, key);
-}
-
-/* WebResourceLoadDelegate */
-
-void webView_resource_didFinishLoadingFromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ dataSource) {
-	/*
-	* Feature on Safari.  The identifier is used here as a marker for the events 
-	* related to the top frame and the URL changes related to that top frame as 
-	* they should appear on the location bar of a browser.  It is expected to reset
-	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-	* the identifierForInitialRequest event is received.  However, Safari fires
-	* the didFinishLoadingFromDataSource event before the entire content of the
-	* top frame is loaded.  It is possible to receive multiple willSendRequest 
-	* events in this interval, causing the Browser widget to send unwanted
-	* Location.changing events.  For this reason, the identifier is reset to 0
-	* when the top frame has either finished loading (didFinishLoadForFrame
-	* event) or failed (didFailProvisionalLoadWithError).
-	*/
-	// this code is intentionally commented
-	//if (this.identifier == identifier) this.identifier = 0;
-}
-
-void webView_resource_didFailLoadingWithError_fromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ error, int /*long*/ dataSource) {
-	/*
-	* Feature on Safari.  The identifier is used here as a marker for the events 
-	* related to the top frame and the URL changes related to that top frame as 
-	* they should appear on the location bar of a browser.  It is expected to reset
-	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
-	* the identifierForInitialRequest event is received.  However, Safari fires
-	* the didFinishLoadingFromDataSource event before the entire content of the
-	* top frame is loaded.  It is possible to receive multiple willSendRequest 
-	* events in this interval, causing the Browser widget to send unwanted
-	* Location.changing events.  For this reason, the identifier is reset to 0
-	* when the top frame has either finished loading (didFinishLoadForFrame
-	* event) or failed (didFailProvisionalLoadWithError).
-	*/
-	// this code is intentionally commented
-	//if (this.identifier == identifier) this.identifier = 0;
-}
-
-void webView_resource_didReceiveAuthenticationChallenge_fromDataSource (int /*long*/ sender, int /*long*/ identifier, int /*long*/ challenge, int /*long*/ dataSource) {
-	NSURLAuthenticationChallenge nsChallenge = new NSURLAuthenticationChallenge (challenge);
-
-	/*
-	 * Do not invoke the listeners if this challenge has been failed too many
-	 * times because a listener is likely giving incorrect credentials repeatedly
-	 * and will do so indefinitely.
-	 */
-	if (nsChallenge.previousFailureCount () < 3) {
-		for (int i = 0; i < authenticationListeners.length; i++) {
-			AuthenticationEvent event = new AuthenticationEvent (browser);
-			event.location = lastNavigateURL;
-			authenticationListeners[i].authenticate (event);
-			if (!event.doit) {
-				id challengeSender = nsChallenge.sender ();
-				OS.objc_msgSend (challengeSender.id, OS.sel_cancelAuthenticationChallenge_, challenge);
-				return;
-			}
-			if (event.user != null && event.password != null) {
-				id challengeSender = nsChallenge.sender ();
-				NSString user = NSString.stringWith (event.user);
-				NSString password = NSString.stringWith (event.password);
-				NSURLCredential credential = NSURLCredential.credentialWithUser (user, password, OS.NSURLCredentialPersistenceForSession);
-				OS.objc_msgSend (challengeSender.id, OS.sel_useCredential_forAuthenticationChallenge_, credential.id, challenge);
-				return;
-			}
-		}
-	}
-
-	/* no listener handled the challenge, so try to invoke the native panel */
-	int /*long*/ cls = OS.class_WebPanelAuthenticationHandler;
-	if (cls != 0) {
-		int /*long*/ method = OS.class_getClassMethod (cls, OS.sel_sharedHandler);
-		if (method != 0) {
-			int /*long*/ handler = OS.objc_msgSend (cls, OS.sel_sharedHandler);
-			if (handler != 0) {
-				OS.objc_msgSend (handler, OS.sel_startAuthentication, challenge, webView.window ().id);
-				return;
-			}
-		}
-	}
-
-	/* the native panel was not available, so show a custom dialog */
-	String[] userReturn = new String[1], passwordReturn = new String[1];
-	NSURLCredential proposedCredential = nsChallenge.proposedCredential ();
-	if (proposedCredential != null) {
-		userReturn[0] = proposedCredential.user ().getString ();
-		if (proposedCredential.hasPassword ()) {
-			passwordReturn[0] = proposedCredential.password ().getString ();
-		}
-	}
-	NSURLProtectionSpace space = nsChallenge.protectionSpace ();
-	String host = space.host ().getString () + ':' + space.port ();
-	String realm = space.realm ().getString ();
-	boolean result = showAuthenticationDialog (userReturn, passwordReturn, host, realm);
-	if (!result) {
-		id challengeSender = nsChallenge.sender ();
-		OS.objc_msgSend (challengeSender.id, OS.sel_cancelAuthenticationChallenge_, challenge);
-		return;
-	}
-	id challengeSender = nsChallenge.sender ();
-	NSString user = NSString.stringWith (userReturn[0]);
-	NSString password = NSString.stringWith (passwordReturn[0]);
-	NSURLCredential credential = NSURLCredential.credentialWithUser (user, password, OS.NSURLCredentialPersistenceForSession);
-	OS.objc_msgSend (challengeSender.id, OS.sel_useCredential_forAuthenticationChallenge_, credential.id, challenge);
-}
-
-boolean showAuthenticationDialog (final String[] user, final String[] password, String host, String realm) {
-	final Shell shell = new Shell (browser.getShell ());
-	shell.setLayout (new GridLayout ());
-	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
-	shell.setText (title);
-	Label label = new Label (shell, SWT.WRAP);
-	label.setText (Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host})); //$NON-NLS-1$
-
-	GridData data = new GridData ();
-	Monitor monitor = browser.getMonitor ();
-	int maxWidth = monitor.getBounds ().width * 2 / 3;
-	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
-	data.widthHint = Math.min (width, maxWidth);
-	data.horizontalAlignment = GridData.FILL;
-	data.grabExcessHorizontalSpace = true;
-	label.setLayoutData (data);
-
-	Label userLabel = new Label (shell, SWT.NONE);
-	userLabel.setText (SWT.getMessage ("SWT_Username")); //$NON-NLS-1$
-
-	final Text userText = new Text (shell, SWT.BORDER);
-	if (user[0] != null) userText.setText (user[0]);
-	data = new GridData ();
-	data.horizontalAlignment = GridData.FILL;
-	data.grabExcessHorizontalSpace = true;
-	userText.setLayoutData (data);
-
-	Label passwordLabel = new Label (shell, SWT.NONE);
-	passwordLabel.setText (SWT.getMessage ("SWT_Password")); //$NON-NLS-1$
-
-	final Text passwordText = new Text (shell, SWT.PASSWORD | SWT.BORDER);
-	if (password[0] != null) passwordText.setText (password[0]);
-	data = new GridData ();
-	data.horizontalAlignment = GridData.FILL;
-	data.grabExcessHorizontalSpace = true;
-	passwordText.setLayoutData (data);
-
-	final boolean[] result = new boolean[1];
-	final Button[] buttons = new Button[2];
-	Listener listener = new Listener() {
-		public void handleEvent(Event event) {
-			user[0] = userText.getText();
-			password[0] = passwordText.getText();
-			result[0] = event.widget == buttons[1];
-			shell.close();
-		}	
-	};
-
-	Composite composite = new Composite (shell, SWT.NONE);
-	data = new GridData ();
-	data.horizontalAlignment = GridData.END;
-	composite.setLayoutData (data);
-	composite.setLayout (new GridLayout (2, true));
-	buttons[0] = new Button (composite, SWT.PUSH);
-	buttons[0].setText (SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
-	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
-	buttons[0].addListener (SWT.Selection, listener);
-	buttons[1] = new Button (composite, SWT.PUSH);
-	buttons[1].setText (SWT.getMessage("SWT_OK")); //$NON-NLS-1$
-	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
-	buttons[1].addListener (SWT.Selection, listener);
-
-	shell.setDefaultButton (buttons[1]);
-	shell.pack ();
-	shell.open ();
-	Display display = browser.getDisplay ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-
-	return result[0];
-}
-
-int /*long*/ webView_identifierForInitialRequest_fromDataSource(int /*long*/ sender, int /*long*/ request, int /*long*/ dataSourceID) {
-	ProgressEvent progress = new ProgressEvent(browser);
-	progress.display = browser.getDisplay();
-	progress.widget = browser;
-	progress.current = resourceCount;
-	progress.total = Math.max(resourceCount, MAX_PROGRESS);
-	for (int i = 0; i < progressListeners.length; i++) {
-		progressListeners[i].changed(progress);
-	}
-	if (browser.isDisposed()) return 0;
-
-	NSNumber identifier = NSNumber.numberWithInt(resourceCount++);
-	if (this.identifier == 0) {
-		WebDataSource dataSource = new WebDataSource(dataSourceID);
-		WebFrame frame = dataSource.webFrame();
-		if (frame.id == webView.mainFrame().id) this.identifier = identifier.id;
-	}
-	return identifier.id;
-		
-}
-
-int /*long*/ webView_resource_willSendRequest_redirectResponse_fromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ request, int /*long*/ redirectResponse, int /*long*/ dataSource) {
-	NSURLRequest nsRequest = new NSURLRequest (request);
-	NSURL url = nsRequest.URL ();
-	if (url.isFileURL ()) {
-		NSMutableURLRequest newRequest = new NSMutableURLRequest (nsRequest.mutableCopy ());
-		newRequest.autorelease ();
-		newRequest.setCachePolicy (OS.NSURLRequestReloadIgnoringLocalCacheData);
-		return newRequest.id;
-	}
-	return request;
-}
-
-/* UIDelegate */
-
-int /*long*/ webView_createWebViewWithRequest(int /*long*/ sender, int /*long*/ request) {
-	WindowEvent newEvent = new WindowEvent(browser);
-	newEvent.display = browser.getDisplay();
-	newEvent.widget = browser;
-	newEvent.required = true;
-	if (openWindowListeners != null) {
-		for (int i = 0; i < openWindowListeners.length; i++) {
-			openWindowListeners[i].open(newEvent);
-		}
-	}
-	WebView result = null;
-	Browser browser = null;
-	if (newEvent.browser != null && newEvent.browser.webBrowser instanceof Safari) {
-		browser = newEvent.browser;
-	}
-	if (browser != null && !browser.isDisposed()) {
-		result = ((Safari)browser.webBrowser).webView;
-		if (request != 0) {
-			WebFrame mainFrame = result.mainFrame();
-			mainFrame.loadRequest(new NSURLRequest(request));
-		}
-	}
-	return result != null ? result.id : 0;
-}
-
-void webViewShow(int /*long*/ sender) {
-	/*
-	* Feature on WebKit.  The Safari WebKit expects the application
-	* to create a new Window using the Objective C Cocoa API in response
-	* to UIDelegate.createWebViewWithRequest. The application is then
-	* expected to use Objective C Cocoa API to make this window visible
-	* when receiving the UIDelegate.webViewShow message.  For some reason,
-	* a window created with the Carbon API hosting the new browser instance
-	* does not redraw until it has been resized.  The fix is to increase the
-	* size of the Shell and restore it to its initial size.
-	*/
-	Shell parent = browser.getShell();
-	Point pt = parent.getSize();
-	parent.setSize(pt.x+1, pt.y);
-	parent.setSize(pt.x, pt.y);
-	WindowEvent newEvent = new WindowEvent(browser);
-	newEvent.display = browser.getDisplay();
-	newEvent.widget = browser;
-	if (location != null) newEvent.location = location;
-	if (size != null) newEvent.size = size;
-	/*
-	* Feature in Safari.  Safari's tool bar contains
-	* the address bar.  The address bar is displayed
-	* if the tool bar is displayed. There is no separate
-	* notification for the address bar.
-	* 
-	* Feature of OSX.  The menu bar is always displayed.
-	* There is no notification to hide the menu bar.
-	*/
-	newEvent.addressBar = toolBar;
-	newEvent.menuBar = true;
-	newEvent.statusBar = statusBar;
-	newEvent.toolBar = toolBar;
-	for (int i = 0; i < visibilityWindowListeners.length; i++) {
-		visibilityWindowListeners[i].show(newEvent);
-	}
-	location = null;
-	size = null;
-}
-
-void webView_setFrame(int /*long*/ sender, int /*long*/ frame) {
-	NSRect rect = new NSRect();
-	OS.memmove(rect, frame, NSRect.sizeof);
-	/* convert to SWT system coordinates */
-	Rectangle bounds = browser.getDisplay().getBounds();
-	location = new Point((int)rect.x, bounds.height - (int)rect.y - (int)rect.height);
-	size = new Point((int)rect.width, (int)rect.height);
-}
-
-void webViewFocus(int /*long*/ sender) {
-}
-
-void webViewUnfocus(int /*long*/ sender) {
-}
-
-NSNumber callRunBeforeUnloadConfirmPanelWithMessage(int /*long*/ messageID, int /*long*/ arg) {
-	boolean result = webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame (0, messageID, 0);
-	return NSNumber.numberWithBool (result);
-}
-
-boolean webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame(int /*long*/ sender, int /*long*/ messageID, int /*long*/ frame) {
-	NSString message = new NSString(messageID);
-	StringBuffer text = new StringBuffer(Compatibility.getMessage("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
-	text.append("\n\n"); //$NON-NLS-1$
-	text.append(message.getString());
-	text.append("\n\n"); //$NON-NLS-1$
-	text.append(Compatibility.getMessage("SWT_OnBeforeUnload_Message2")); //$NON-NLS-1$
-	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION | SWT.SHEET);
-	messageBox.setMessage(text.toString());
-	return messageBox.open() == SWT.OK;
-}
-
-void webView_runJavaScriptAlertPanelWithMessage(int /*long*/ sender, int /*long*/ messageID) {
-	NSString message = new NSString(messageID);
-	String text = message.getString();
-
-	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_WARNING);
-	messageBox.setText("Javascript");	//$NON-NLS-1$
-	messageBox.setMessage(text);
-	messageBox.open();
-}
-
-int webView_runJavaScriptConfirmPanelWithMessage(int /*long*/ sender, int /*long*/ messageID) {
-	NSString message = new NSString(messageID);
-	String text = message.getString();
-
-	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
-	messageBox.setText("Javascript");	//$NON-NLS-1$
-	messageBox.setMessage(text);
-	return messageBox.open() == SWT.OK ? 1 : 0;
-}
-
-void webView_runOpenPanelForFileButtonWithResultListener(int /*long*/ sender, int /*long*/ resultListenerID) {
-	FileDialog dialog = new FileDialog(browser.getShell(), SWT.NONE);
-	String result = dialog.open();
-	WebOpenPanelResultListener resultListener = new WebOpenPanelResultListener(resultListenerID);
-	if (result == null) {
-		resultListener.cancel();
-		return;
-	}
-	resultListener.chooseFilename(NSString.stringWith(result));
-}
-
-void webViewClose(int /*long*/ sender) {
-	Shell parent = browser.getShell();
-	WindowEvent newEvent = new WindowEvent(browser);
-	newEvent.display = browser.getDisplay();
-	newEvent.widget = browser;
-	for (int i = 0; i < closeWindowListeners.length; i++) {
-		closeWindowListeners[i].close(newEvent);
-	}
-	browser.dispose();
-	if (parent.isDisposed()) return;
-	/*
-	* Feature on WebKit.  The Safari WebKit expects the application
-	* to create a new Window using the Objective C Cocoa API in response
-	* to UIDelegate.createWebViewWithRequest. The application is then
-	* expected to use Objective C Cocoa API to make this window visible
-	* when receiving the UIDelegate.webViewShow message.  For some reason,
-	* a window created with the Carbon API hosting the new browser instance
-	* does not redraw until it has been resized.  The fix is to increase the
-	* size of the Shell and restore it to its initial size.
-	*/
-	Point pt = parent.getSize();
-	parent.setSize(pt.x+1, pt.y);
-	parent.setSize(pt.x, pt.y);
-}
-
-int /*long*/ webView_contextMenuItemsForElement_defaultMenuItems(int /*long*/ sender, int /*long*/ element, int /*long*/ defaultMenuItems) {
-	Point pt = browser.getDisplay().getCursorLocation();
-	Event event = new Event();
-	event.x = pt.x;
-	event.y = pt.y;
-	browser.notifyListeners(SWT.MenuDetect, event);
-	Menu menu = browser.getMenu();
-	if (!event.doit) return 0;
-	if (menu != null && !menu.isDisposed()) {
-		if (event.x != pt.x || event.y != pt.y) {
-			menu.setLocation(event.x, event.y);
-		}
-		menu.setVisible(true);
-		return 0;
-	}
-	return defaultMenuItems;
-}
-
-void webView_setStatusBarVisible(int /*long*/ sender, boolean visible) {
-	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
-	statusBar = visible;
-}
-
-void webView_setStatusText(int /*long*/ sender, int /*long*/ textID) {
-	NSString text = new NSString(textID);
-	int length = (int)/*64*/text.length();
-	if (length == 0) return;
-
-	StatusTextEvent statusText = new StatusTextEvent(browser);
-	statusText.display = browser.getDisplay();
-	statusText.widget = browser;
-	statusText.text = text.getString();
-	for (int i = 0; i < statusTextListeners.length; i++) {
-		statusTextListeners[i].changed(statusText);
-	}
-}
-
-void webView_setResizable(int /*long*/ sender, boolean visible) {
-}
-
-void webView_setToolbarsVisible(int /*long*/ sender, boolean visible) {
-	/* Note.  Webkit only emits the notification when the tool bar should be hidden. */
-	toolBar = visible;
-}
-
-void webView_mouseDidMoveOverElement_modifierFlags (int /*long*/ sender, int /*long*/ elementInformationID, int /*long*/ modifierFlags) {
-	if (elementInformationID == 0) return;
-
-	NSString key = NSString.stringWith(WebElementLinkURLKey);
-	NSDictionary elementInformation = new NSDictionary(elementInformationID);
-	id value = elementInformation.valueForKey(key);
-	if (value == null) {
-		/* not currently over a link */
-		if (lastHoveredLinkURL == null) return;
-		lastHoveredLinkURL = null;
-		StatusTextEvent statusText = new StatusTextEvent(browser);
-		statusText.display = browser.getDisplay();
-		statusText.widget = browser;
-		statusText.text = "";	//$NON-NLS-1$
-		for (int i = 0; i < statusTextListeners.length; i++) {
-			statusTextListeners[i].changed(statusText);
-		}
-		return;
-	}
-
-	NSString url = new NSURL(value.id).absoluteString();
-	int length = (int)/*64*/url.length();
-	String urlString;
-	if (length == 0) {
-		urlString = "";	//$NON-NLS-1$
-	} else {
-		urlString = url.getString();
-	}
-	if (urlString.equals(lastHoveredLinkURL)) return;
-
-	lastHoveredLinkURL = urlString;
-	StatusTextEvent statusText = new StatusTextEvent(browser);
-	statusText.display = browser.getDisplay();
-	statusText.widget = browser;
-	statusText.text = urlString;
-	for (int i = 0; i < statusTextListeners.length; i++) {
-		statusTextListeners[i].changed(statusText);
-	}
-}
-
-void webView_printFrameView (int /*long*/ sender, int /*long*/ frameViewID) {
-	WebFrameView view = new WebFrameView(frameViewID);
-	boolean viewPrint = view.documentViewShouldHandlePrint();
-	if (viewPrint) {
-		view.printDocumentView();
-		return;
-	}
-	NSPrintInfo info = NSPrintInfo.sharedPrintInfo();
-	NSPrintOperation operation = view.printOperationWithPrintInfo(info);
-	if (operation != null) operation.runOperation();
-}
-
-/* PolicyDelegate */
-
-void webView_decidePolicyForMIMEType_request_frame_decisionListener(int /*long*/ sender, int /*long*/ type, int /*long*/ request, int /*long*/ frame, int /*long*/ listenerID) {
-	boolean canShow = WebView.canShowMIMEType(new NSString(type));
-	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
-	if (canShow) {
-		listener.use();
-	} else {
-		listener.download();
-	}
-}
-
-void webView_decidePolicyForNavigationAction_request_frame_decisionListener(int /*long*/ sender, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frame, int /*long*/ listenerID) {
-	NSURL url = new NSURLRequest(request).URL();
-	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
-
-	if (loadingText) {
-		/* 
-		 * Safari is auto-navigating to about:blank in response to a loadHTMLString()
-		 * invocation.  This navigate should always proceed without sending an event
-		 * since it is preceded by an explicit navigate to about:blank in setText().
-		 */
-		listener.use();
-		return;
-	}
-	if (url == null) {
-		/* indicates that a URL with an invalid format was specified */
-		listener.ignore();
-		return;
-	}
-	if (url.isFileURL() && getUrl().startsWith(ABOUT_BLANK) && untrustedText) {
-		/* indicates an attempt to access the local file system from untrusted content */
-		listener.ignore();
-		return;
-	}
-	NSString s = url.absoluteString();
-	String url2 = s.getString();
-	/*
-	 * If the URI indicates that the page is being rendered from memory
-	 * (via setText()) then set it to about:blank to be consistent with IE.
-	 */
-	if (url2.equals (URI_FILEROOT)) {
-		url2 = ABOUT_BLANK;
-	} else {
-		int length = URI_FILEROOT.length ();
-		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
-			url2 = ABOUT_BLANK + url2.substring (length);
-		}
-	}
-
-	LocationEvent newEvent = new LocationEvent(browser);
-	newEvent.display = browser.getDisplay();
-	newEvent.widget = browser;
-	newEvent.location = url2;
-	newEvent.doit = true;
-	if (locationListeners != null) {
-		for (int i = 0; i < locationListeners.length; i++) {
-			locationListeners[i].changing(newEvent);
-		}
-	}
-	if (newEvent.doit) {
-		if (jsEnabledChanged) {
-			jsEnabledChanged = false;
-			if (preferences == null) {
-				preferences = (WebPreferences)new WebPreferences ().alloc ().init ();
-				webView.setPreferences (preferences);
-			}
-			preferences.setJavaScriptEnabled (jsEnabled);
-		}
-		listener.use();
-		lastNavigateURL = url2;
-	} else {
-		listener.ignore();
-	}
-}
-
-void webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(int /*long*/ sender, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frameName, int /*long*/ listenerID) {
-	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
-	listener.use();
-}
-
-void webView_unableToImplementPolicyWithError_frame(int /*long*/ sender, int /*long*/ error, int /*long*/ frame) {
-}
-
-/* WebDownload */
-
-void download_decideDestinationWithSuggestedFilename(int /*long*/ downloadId, int /*long*/ filename) {
-	NSString string = new NSString(filename);
-	String name = string.getString();
-	FileDialog dialog = new FileDialog(browser.getShell(), SWT.SAVE);
-	dialog.setText(SWT.getMessage ("SWT_FileDownload")); //$NON-NLS-1$
-	dialog.setFileName(name);
-	String path = dialog.open();
-	NSURLDownload download = new NSURLDownload(downloadId);
-	if (path == null) {
-		/* cancel pressed */
-		download.cancel();
-		return;
-	}
-	download.setDestination(NSString.stringWith(path), true);
-}
-
-/* DOMEventListener */
-
-void handleEvent(int /*long*/ evtId) {
-	NSString string = new NSString(OS.objc_msgSend(evtId, OS.sel_type));
-	String type = string.getString();
-
-	if (DOMEVENT_KEYDOWN.equals(type) || DOMEVENT_KEYUP.equals(type)) {
-		DOMKeyboardEvent event = new DOMKeyboardEvent(evtId);
-
-		boolean ctrl = event.ctrlKey();
-		boolean shift = event.shiftKey();
-		boolean alt = event.altKey();
-		boolean meta = event.metaKey();
-		int keyCode = event.keyCode();
-		int charCode = event.charCode();
-
-		Event keyEvent = new Event();
-		keyEvent.widget = browser;
-		int eventType = DOMEVENT_KEYDOWN.equals(type) ? SWT.KeyDown : SWT.KeyUp;
-		keyEvent.type = eventType;
-		int translatedKey = translateKey (keyCode);
-		keyEvent.keyCode = translatedKey;
-		keyEvent.character = (char)charCode;
-		int stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
-		keyEvent.stateMask = stateMask;
-
-		boolean doit = true;
-		if (keyEvent.type == SWT.KeyDown) {
-			doit = sendKeyEvent(keyEvent);
-		} else {
-			browser.notifyListeners(keyEvent.type, keyEvent);
-			doit = keyEvent.doit;
-		}
-		if (!doit) {
-			event.preventDefault();
-		} else {
-			if (eventType == SWT.KeyDown && stateMask == SWT.COMMAND) {
-				if (translatedKey == 'v') {
-					webView.paste (webView);
-				} else if (translatedKey == 'c') {
-					webView.copy (webView);
-				} else if (translatedKey == 'x') {
-					webView.cut (webView);
-				}
-			}
-		}
-		return;
-	}
-
-	if (DOMEVENT_MOUSEWHEEL.equals(type)) {
-		DOMWheelEvent event = new DOMWheelEvent(evtId);
-
-		/*
-		 * The position of mouse events is received in screen-relative coordinates
-		 * in order to handle pages with frames, since frames express their event
-		 * coordinates relative to themselves rather than relative to their top-
-		 * level page.  Convert screen-relative coordinates to be browser-relative.
-		 */
-		int screenX = event.screenX();
-		int screenY = event.screenY();
-		Point position = new Point(screenX, screenY);
-		position = browser.getDisplay().map(null, browser, position);
-
-		int delta = event.wheelDelta();
-		boolean ctrl = event.ctrlKey();
-		boolean shift = event.shiftKey();
-		boolean alt = event.altKey();
-		boolean meta = event.metaKey();
-		Event mouseEvent = new Event();
-		mouseEvent.type = SWT.MouseWheel;
-		mouseEvent.widget = browser;
-		mouseEvent.x = position.x; mouseEvent.y = position.y;
-		mouseEvent.count = delta / 120;
-		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
-		browser.notifyListeners (mouseEvent.type, mouseEvent);
-		return;
-	}
-
-	/* mouse event */
-
-	DOMMouseEvent event = new DOMMouseEvent(evtId);
-
-	/*
-	 * The position of mouse events is received in screen-relative coordinates
-	 * in order to handle pages with frames, since frames express their event
-	 * coordinates relative to themselves rather than relative to their top-
-	 * level page.  Convert screen-relative coordinates to be browser-relative.
-	 */
-	int screenX = event.screenX();
-	int screenY = event.screenY();
-	Point position = new Point(screenX, screenY);
-	position = browser.getDisplay().map(null, browser, position);
-
-	int detail = event.detail();
-	int button = event.button();
-	boolean ctrl = event.ctrlKey();
-	boolean shift = event.shiftKey();
-	boolean alt = event.altKey();
-	boolean meta = event.metaKey();
-
-	Event mouseEvent = new Event ();
-	mouseEvent.widget = browser;
-	mouseEvent.x = position.x; mouseEvent.y = position.y;
-	mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
-	if (DOMEVENT_MOUSEDOWN.equals (type)) {
-		mouseEvent.type = SWT.MouseDown;
-		mouseEvent.button = button + 1;
-		mouseEvent.count = detail;
-	} else if (DOMEVENT_MOUSEUP.equals (type)) {
-		mouseEvent.type = SWT.MouseUp;
-		mouseEvent.button = button + 1;
-		mouseEvent.count = detail;
-		switch (mouseEvent.button) {
-			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
-			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
-			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
-			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
-			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
-		}
-	} else if (DOMEVENT_MOUSEMOVE.equals (type)) {
-		/*
-		* Bug in Safari.  Spurious and redundant mousemove events are received in
-		* various contexts, including following every MouseUp.  The workaround is
-		* to not fire MouseMove events whose x and y values match the last MouseMove  
-		*/
-		if (mouseEvent.x == lastMouseMoveX && mouseEvent.y == lastMouseMoveY) return;
-		mouseEvent.type = SWT.MouseMove;
-		lastMouseMoveX = mouseEvent.x; lastMouseMoveY = mouseEvent.y;
-	}
-
-	browser.notifyListeners (mouseEvent.type, mouseEvent);
-	if (detail == 2 && DOMEVENT_MOUSEDOWN.equals (type)) {
-		mouseEvent = new Event ();
-		mouseEvent.widget = browser;
-		mouseEvent.x = position.x; mouseEvent.y = position.y;
-		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
-		mouseEvent.type = SWT.MouseDoubleClick;
-		mouseEvent.button = button + 1;
-		mouseEvent.count = detail;
-		browser.notifyListeners (mouseEvent.type, mouseEvent);
-	}
-}
-
-/* external */
-
-Object convertToJava (int /*long*/ value) {
-	NSObject object = new NSObject (value);
-	int /*long*/ clazz = OS.objc_lookUpClass ("NSString"); //$NON-NLS-1$
-	if (object.isKindOfClass (clazz)) {
-		NSString string = new NSString (value);
-		return string.getString ();
-	}
-	clazz = OS.objc_lookUpClass ("NSNumber"); //$NON-NLS-1$
-	if (object.isKindOfClass (clazz)) {
-		NSNumber number = new NSNumber (value);
-		int /*long*/ ptr = number.objCType ();
-		byte[] type = new byte[1];
-		OS.memmove (type, ptr, 1);
-		if (type[0] == 'c' || type[0] == 'B') {
-			return new Boolean (number.boolValue ());
-		}
-		if ("islqISLQfd".indexOf (type[0]) != -1) { //$NON-NLS-1$
-			return new Double (number.doubleValue ());
-		}
-	}
-	clazz = OS.objc_lookUpClass ("WebScriptObject"); //$NON-NLS-1$
-	if (object.isKindOfClass (clazz)) {
-		WebScriptObject script = new WebScriptObject (value);
-		id id = script.valueForKey (NSString.stringWith ("length")); //$NON-NLS-1$
-		if (id == null) { /* not a JS array */
-			SWT.error (SWT.ERROR_INVALID_ARGUMENT);
-		}
-		int length = new NSNumber (id).intValue ();
-		Object[] arguments = new Object[length];
-		for (int i = 0; i < length; i++) {
-			id current = script.webScriptValueAtIndex (i);
-			if (current != null) {
-				arguments[i] = convertToJava (current.id);
-			}
-		}
-		return arguments;
-	}
-	clazz = OS.objc_lookUpClass ("WebUndefined"); //$NON-NLS-1$
-	if (object.isKindOfClass (clazz)) {
-		return null;
-	}
-
-	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
-	return null;
-}
-
-NSObject convertToJS (Object value) {
-	if (value == null) {
-		return WebUndefined.undefined ();
-	}
-	if (value instanceof String) {
-		return NSString.stringWith ((String)value);
-	}
-	if (value instanceof Boolean) {
-		return NSNumber.numberWithBool (((Boolean)value).booleanValue ());
-	}
-	if (value instanceof Number) {
-		return NSNumber.numberWithDouble (((Number)value).doubleValue ());
-	}
-	if (value instanceof Object[]) {
-		Object[] arrayValue = (Object[]) value;
-		int length = arrayValue.length;
-		NSMutableArray array = NSMutableArray.arrayWithCapacity (length);
-		for (int i = 0; i < length; i++) {
-			Object currentObject = arrayValue[i];
-			array.addObject (convertToJS (currentObject));
-		}
-		return array;
-	}
-	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
-	return null;
-}
-
-NSObject callJava (int /*long*/ index, int /*long*/ args, int /*long*/ arg1) {
-	Object returnValue = null;
-	NSObject object = new NSObject (index);
-	int /*long*/ clazz = OS.objc_lookUpClass ("NSNumber"); //$NON-NLS-1$
-	if (object.isKindOfClass (clazz)) {
-		NSNumber number = new NSNumber (index);
-		Object key = new Integer (number.intValue ());
-		BrowserFunction function = (BrowserFunction)functions.get (key);
-		if (function != null) {
-			try {
-				Object temp = convertToJava (args);
-				if (temp instanceof Object[]) {
-					Object[] arguments = (Object[])temp;
-					try {
-						returnValue = function.function (arguments);
-					} catch (Exception e) {
-						/* exception during function invocation */
-						returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
-					}
-				}
-			} catch (IllegalArgumentException e) {
-				/* invalid argument value type */
-				if (function.isEvaluate) {
-					/* notify the evaluate function so that a java exception can be thrown */
-					function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
-				}
-				returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
-			}
-		}
-	}
-	try {
-		return convertToJS (returnValue);
-	} catch (SWTException e) {
-		/* invalid return value type */
-		return convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
-	}
-}
-
-}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java
old mode 100644
new mode 100755
index 88c8297..7914e1c
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,11 +23,14 @@ import org.eclipse.swt.widgets.*;
  * </p>
  * <dl>
  * <dt><b>Styles:</b></dt>
- * <dd>MOZILLA</dd>
+ * <dd>MOZILLA, WEBKIT</dd>
  * <dt><b>Events:</b></dt>
  * <dd>CloseWindowListener, LocationListener, OpenWindowListener, ProgressListener, StatusTextListener, TitleListener, VisibilityWindowListener</dd>
  * </dl>
  * <p>
+ * Note: At most one of the styles MOZILLA and WEBKIT may be specified.
+ * </p>
+ * <p>
  * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
@@ -83,45 +86,15 @@ public Browser (Composite parent, int style) {
 	userStyle = style;
 
 	String platform = SWT.getPlatform ();
-	Display display = parent.getDisplay ();
-	if ("gtk".equals (platform)) display.setData (NO_INPUT_METHOD, null); //$NON-NLS-1$
-	String classNames[] = null;
-	if ((style & SWT.MOZILLA) != 0) {
-		classNames = new String[] {"org.eclipse.swt.browser.Mozilla"}; //$NON-NLS-1$
-	} else {
-		if ("win32".equals (platform) || "wpf".equals (platform)) { //$NON-NLS-1$ $NON-NLS-2$
-			classNames = new String[] {"org.eclipse.swt.browser.IE"}; //$NON-NLS-1$
-		} else if ("motif".equals (platform)) { //$NON-NLS-1$
-			classNames = new String[] {"org.eclipse.swt.browser.Mozilla"}; //$NON-NLS-1$
-		} else if ("gtk".equals (platform)) { //$NON-NLS-1$
-			String property = System.getProperty (PROPERTY_USEWEBKITGTK);
-			if (property != null && property.equalsIgnoreCase ("true")) { //$NON-NLS-1$
-				classNames = new String[] {"org.eclipse.swt.browser.WebKit", "org.eclipse.swt.browser.Mozilla"}; //$NON-NLS-1$ //$NON-NLS-2$
-			} else {
-				classNames = new String[] {"org.eclipse.swt.browser.Mozilla"}; //$NON-NLS-1$
-			}
-		} else if ("carbon".equals (platform) || "cocoa".equals (platform)) { //$NON-NLS-1$
-			classNames = new String[] {"org.eclipse.swt.browser.Safari"}; //$NON-NLS-1$
-		} else if ("photon".equals (platform)) { //$NON-NLS-1$
-			classNames = new String[] {"org.eclipse.swt.browser.Voyager"}; //$NON-NLS-1$
-		} else {
-			dispose ();
-			SWT.error (SWT.ERROR_NO_HANDLES);
-		}
+	if ("gtk".equals (platform)) { //$NON-NLS-1$
+		parent.getDisplay ().setData (NO_INPUT_METHOD, null);
 	}
 
-	for (int i = 0; i < classNames.length; i++) {
-		try {
-			Class clazz = Class.forName (classNames[i]);
-			webBrowser = (WebBrowser)clazz.newInstance ();
-			if (webBrowser != null) {
-				webBrowser.setBrowser (this);
-				if (webBrowser.create (parent, style)) return;
-			}
-		} catch (ClassNotFoundException e) {
-		} catch (IllegalAccessException e) {
-		} catch (InstantiationException e) {
-		}
+	webBrowser = new BrowserFactory ().createWebBrowser (style);
+	if (webBrowser != null) {
+		webBrowser.setBrowser (this);
+		webBrowser.create (parent, style);
+		return;
 	}
 	dispose ();
 	SWT.error (SWT.ERROR_NO_HANDLES);
@@ -149,8 +122,11 @@ static Composite checkParent (Composite parent) {
 }
 
 static int checkStyle(int style) {
+	if ((style & (SWT.MOZILLA | SWT.WEBKIT)) == (SWT.MOZILLA | SWT.WEBKIT)) {
+		style &= ~SWT.WEBKIT;
+	}
 	String platform = SWT.getPlatform ();
-	if ((style & SWT.MOZILLA) != 0) {
+	if ((style & SWT.MOZILLA) != 0 || (style & SWT.WEBKIT) != 0) {
 		if ("carbon".equals (platform)) return style | SWT.EMBEDDED; //$NON-NLS-1$
 		if ("motif".equals (platform)) return style | SWT.EMBEDDED; //$NON-NLS-1$
 		return style;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java
index f87aef0..b77ed22 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.swt.browser;
 
+import java.util.Random;
+
 import org.eclipse.swt.*;
 
 /**
@@ -46,6 +48,7 @@ public class BrowserFunction {
 	String functionString;
 	int index;
 	boolean isEvaluate;
+	long token;
 
 /**
  * Constructs a new instance of this class, which will be invokable
@@ -83,6 +86,10 @@ BrowserFunction (Browser browser, String name, boolean create) {
 	browser.checkWidget ();
 	this.browser = browser;
 	this.name = name;
+
+	Random random = new Random ();
+	long value = random.nextLong ();
+	token = ((value & 0xFFE0000000000000L) >>> 11) ^ (value & 0x1FFFFFFFFFFFFFL);
 	if (create) browser.webBrowser.createFunction (this);
 }
 
@@ -119,12 +126,14 @@ void dispose (boolean remove) {
  * javascript boolean -> <code>java.lang.Boolean</code>
  * javascript array whose elements are all of supported types -> <code>java.lang.Object[]</code>
  *
- * If any of the Javascript arguments are of unsupported types then the
+ * If any of the javascript arguments are of unsupported types then the
  * function invocation will fail and this method will not be called.
  * 
- * This method must return a value with one of these supported types to
- * the javascript caller (note that any subclass of <code>java.lang.Number</code>
- * will be successfully converted to a javascript number).
+ * This method must return a value with one of these supported java types to
+ * the javascript caller.  Note that <code>null</code> values are converted
+ * to javascript's <code>null</code> value (not <code>undefined</code>), and
+ * instances of any <code>java.lang.Number</code> subclass will be converted
+ * to a javascript number.
  * 
  * @param arguments the javascript arguments converted to java equivalents 
  * @return the value to return to the javascript caller
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java
index 8b93b11..31dd96b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -171,7 +171,7 @@ abstract class WebBrowser {
 		{19,	SWT.PAUSE},
 		{3,		SWT.BREAK},
 
-		/* WebKit/Safari-specific */
+		/* WebKit-specific */
 		{186,	';'},
 		{187,	'='},
 		{189,	'-'},
@@ -300,7 +300,7 @@ static void SetPendingCookies (Vector pendingCookies) {
 	}
 }
 
-public abstract boolean create (Composite parent, int style);
+public abstract void create (Composite parent, int style);
 
 static String CreateErrorString (String error) {
 	return ERROR_ID + error;
@@ -325,7 +325,7 @@ public void createFunction (BrowserFunction function) {
 		Object key = keys.nextElement ();
 		BrowserFunction current = (BrowserFunction)functions.get (key);
 		if (current.name.equals (function.name)) {
-			functions.remove (key);
+			deregisterFunction (current);
 			break;
 		}
 	}
@@ -339,6 +339,8 @@ public void createFunction (BrowserFunction function) {
 	buffer.append (function.name);
 	buffer.append ("() {var result = window.external.callJava("); //$NON-NLS-1$
 	buffer.append (function.index);
+	buffer.append (',');
+	buffer.append (function.token);
 	buffer.append (",Array.prototype.slice.call(arguments)); if (typeof result == 'string' && result.indexOf('"); //$NON-NLS-1$
 	buffer.append (ERROR_ID);
 	buffer.append ("') == 0) {var error = new Error(result.substring("); //$NON-NLS-1$
@@ -390,14 +392,20 @@ public Object evaluate (String script) throws SWTException {
 	buffer.append (functionName);
 	buffer.append (" == undefined) {window.external.callJava("); // $NON-NLS-1$
 	buffer.append (index);
+	buffer.append (',');
+	buffer.append (function.token);
 	buffer.append (", ['"); // $NON-NLS-1$
 	buffer.append (ERROR_ID);
 	buffer.append ("']);} else {try {var result = "); // $NON-NLS-1$
 	buffer.append (functionName);
 	buffer.append ("(); window.external.callJava("); // $NON-NLS-1$
 	buffer.append (index);
+	buffer.append (',');
+	buffer.append (function.token);
 	buffer.append (", [result]);} catch (e) {window.external.callJava("); // $NON-NLS-1$
 	buffer.append (index);
+	buffer.append (',');
+	buffer.append (function.token);
 	buffer.append (", ['"); // $NON-NLS-1$
 	buffer.append (ERROR_ID);
 	buffer.append ("' + e.message]);}}"); // $NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..6dd076e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import org.eclipse.swt.SWT;
+
+class BrowserFactory {
+
+WebBrowser createWebBrowser (int style) {
+	if ((style & (SWT.MOZILLA | SWT.WEBKIT)) != 0) return null;
+	return new IE ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java
index 30f73eb..5384ab9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java	
@@ -28,7 +28,7 @@ class IE extends WebBrowser {
 		};
 	}
 
-public boolean create(Composite parent, int style) {
+public void create(Composite parent, int style) {
 	host = OS.gcnew_WindowsFormsHost();
 	if (host == 0) SWT.error(SWT.ERROR_NO_HANDLES);
 	webBrowser = OS.gcnew_WebBrowser();
@@ -87,8 +87,6 @@ public boolean create(Composite parent, int style) {
 	};
 	browser.addListener(SWT.Resize, listener);
 	browser.addListener(SWT.Dispose, listener);
-
-	return true;
 }
 
 public boolean back() {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/gtk/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/gtk/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..37a332a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/gtk/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import org.eclipse.swt.SWT;
+
+class BrowserFactory {
+
+	static boolean mozillaLibsLoaded;
+
+WebBrowser createWebBrowser (int style) {
+	boolean webkitInstalled = WebKit.isInstalled ();
+	if ((style & SWT.MOZILLA) != 0 || (!webkitInstalled && (style & SWT.WEBKIT) == 0)) {
+		mozillaLibsLoaded = true;
+		return new Mozilla ();
+	}
+	if (!webkitInstalled) return null;
+
+	/*
+	* A crash can occur if XULRunner-1.9.2.x is loaded into a process where WebKit has
+	* already been loaded, as a result of conflicting versions of the sqlite3 library.
+	* Loading these native renderers in the reverse order does not cause a problem.  The
+	* crash workaround is to ensure that Mozilla's libraries (if available) are always
+	* loaded before WebKit's.
+	*/
+	if (!mozillaLibsLoaded) {
+		mozillaLibsLoaded = true;
+		Mozilla.LoadLibraries ();
+	}
+	return new WebKit ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/motif/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/motif/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..7d4613f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/motif/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+
+class BrowserFactory {
+
+WebBrowser createWebBrowser (int style) {
+	return new Mozilla ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..ac6ff2f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import org.eclipse.swt.SWT;
+
+class BrowserFactory {
+
+WebBrowser createWebBrowser (int style) {
+	if ((style & (SWT.MOZILLA | SWT.WEBKIT)) != 0) return null;
+	return new Voyager ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java
old mode 100644
new mode 100755
index 6be7a97..543e1d7
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java	
@@ -32,7 +32,7 @@ class Voyager extends WebBrowser {
 	/* Package Name */
 	static Callback callback;
 
-public boolean create(Composite parent, int style) {
+public void create(Composite parent, int style) {
 	/* use Photon's built-in anchoring for resizing */
 	int[] args = {
 			OS.Pt_ARG_ANCHOR_FLAGS,
@@ -108,8 +108,6 @@ public boolean create(Composite parent, int style) {
 		browser.addListener(folderEvents[i], listener);
 	}
 	OS.PtRealizeWidget(webHandle);
-
-	return true;
 }
 
 static int webProc(int handle, int data, int info) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebkit.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebkit.java
new file mode 100644
index 0000000..b0b4cc7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebkit.java	
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import com.trolltech.qt.core.QUrl;
+import com.trolltech.qt.webkit.QWebView;
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ *
+ */
+public class QtWebkit extends WebBrowser {
+
+	private QWebView webView = null;
+	private int style;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.swt.browser.WebBrowser#create(org.eclipse.swt.widgets.Composite
+	 * , int)
+	 */
+	@Override
+	public void create(Composite parent, int style) {
+		this.style = style;
+		webView = new QWebView(parent.getQWidget());
+		webView.loadProgress.connect(this, "loadProgress(int)"); //$NON-NLS-1$
+		webView.loadFinished.connect(this, "loadFinished(boolean)"); //$NON-NLS-1$
+		webView.titleChanged.connect(this, "titleChanged(java.lang.String)"); //$NON-NLS-1$
+
+	}
+
+	public void loadProgress(int progress) {
+		ProgressEvent progressEvent = new ProgressEvent(browser);
+		progressEvent.display = browser.getDisplay();
+		progressEvent.widget = browser;
+		progressEvent.current = progress;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].changed(progressEvent);
+		}
+	}
+
+	public void loadFinished(boolean OK) {
+		ProgressEvent progressEvent = new ProgressEvent(browser);
+		progressEvent.display = browser.getDisplay();
+		progressEvent.widget = browser;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].completed(progressEvent);
+		}
+	}
+
+	public void titleChanged(String title) {
+		TitleEvent newEvent = new TitleEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.title = title;
+		for (int i = 0; i < titleListeners.length; i++) {
+			titleListeners[i].changed(newEvent);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#execute(java.lang.String)
+	 */
+	@Override
+	public boolean execute(String script) {
+		webView.page().mainFrame().evaluateJavaScript(script);
+		webView.repaint(); // TODO seems to help for SWT Snippet161 but is a repaint really necessary ?
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#back()
+	 */
+	@Override
+	public boolean back() {
+		webView.back();
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#forward()
+	 */
+	@Override
+	public boolean forward() {
+		webView.forward();
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#getBrowserType()
+	 */
+	@Override
+	public String getBrowserType() {
+		// TODO Auto-generated method stub
+		return "qtWebkit";
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#getText()
+	 */
+	@Override
+	public String getText() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#getUrl()
+	 */
+	@Override
+	public String getUrl() {
+		return webView.url().toString();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#isBackEnabled()
+	 */
+	@Override
+	public boolean isBackEnabled() {
+		return webView.history().canGoBack();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#isForwardEnabled()
+	 */
+	@Override
+	public boolean isForwardEnabled() {
+		return webView.history().canGoForward();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#refresh()
+	 */
+	@Override
+	public void refresh() {
+		webView.reload();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#setText(java.lang.String)
+	 */
+	@Override
+	public boolean setText(String html) {
+		webView.setHtml(html);
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#setUrl(java.lang.String)
+	 */
+	@Override
+	public boolean setUrl(String url) {
+		webView.load(new QUrl(url));
+		// TODO Auto-generated method stub
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.swt.browser.WebBrowser#stop()
+	 */
+	@Override
+	public void stop() {
+		webView.stop();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..d55b499
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.win32.OS;
+
+class BrowserFactory {
+
+	static boolean mozillaLibsLoaded;
+
+WebBrowser createWebBrowser (int style) {
+	if (OS.IsWinCE && (style & (SWT.MOZILLA | SWT.WEBKIT)) != 0) {
+		throw new SWTError (SWT.ERROR_NO_HANDLES, "Unsupported Browser type"); //$NON-NLS-1$
+	}
+	if ((style & SWT.MOZILLA) != 0) {
+		mozillaLibsLoaded = true;
+		return new Mozilla ();
+	}
+	if ((style & SWT.WEBKIT) != 0) {
+		/*
+		* A crash can occur if XULRunner-1.9.2.x is loaded into a process where WebKit has
+		* already been loaded, as a result of conflicting versions of the sqlite3 library.
+		* Loading these native renderers in the reverse order does not cause a problem.  The
+		* crash workaround is to ensure that Mozilla's libraries (if available) are always
+		* loaded before WebKit's.
+		*/
+		if (!mozillaLibsLoaded) {
+			mozillaLibsLoaded = true;
+			Mozilla.LoadLibraries ();
+		}
+		return new WebKit ();
+	}
+	return new IE ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java
index 784d157..a312752 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@ class IE extends WebBrowser {
 	OleAutomation[] documents = new OleAutomation[0];
 
 	boolean back, forward, delaySetText, ignoreDispose, ignoreTraverse, performingInitialNavigate;
-	boolean installFunctionsOnDocumentComplete, untrustedText, isRefresh;
+	boolean installFunctionsOnDocumentComplete, untrustedText, isRefresh, isAboutBlank;
 	Point location;
 	Point size;
 	boolean addressBar = true, menuBar = true, statusBar = true, toolBar = true;
@@ -40,6 +40,7 @@ class IE extends WebBrowser {
 	int style, lastKeyCode, lastCharCode;
 	int lastMouseMoveX, lastMouseMoveY;
 
+	static boolean Initialized;
 	static int IEVersion, PDFCount;
 	static String ProgId = "Shell.Explorer";	//$NON-NLS-1$
 
@@ -105,8 +106,13 @@ class IE extends WebBrowser {
 	
 	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
 	static final String CLSID_SHELLEXPLORER1 = "{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}"; //$NON-NLS-1$
+	static final int DEFAULT_IE_VERSION = 9000;
 	static final String EXTENSION_PDF = ".pdf";	//$NON-NLS-1$
+	static final String HTML_DOCUMENT = "HTML Document";	//$NON-NLS-1$
 	static final int MAX_PDF = 20;
+	static final char SEPARATOR_OS = System.getProperty ("file.separator").charAt (0); //$NON-NLS-1$
+	static final String PROPERTY_IEVERSION = "org.eclipse.swt.browser.IEVersion"; //$NON-NLS-1$
+	static final String VALUE_DEFAULT = "default"; //$NON-NLS-1$
 
 	static final String EVENT_DOUBLECLICK = "dblclick"; //$NON-NLS-1$
 	static final String EVENT_DRAGEND = "dragend";	//$NON-NLS-1$
@@ -136,7 +142,6 @@ class IE extends WebBrowser {
 	static final String PROPERTY_TYPE = "type"; //$NON-NLS-1$
 	static final String PROPERTY_WHEELDELTA = "wheelDelta"; //$NON-NLS-1$
 
-
 	static {
 		NativeClearSessions = new Runnable() {
 			public void run() {
@@ -254,17 +259,70 @@ class IE extends WebBrowser {
 		NativePendingCookies = null;
 	}
 
-public boolean create(Composite parent, int style) {
+public void create(Composite parent, int style) {
 	this.style = style;
 	frame = new OleFrame(browser, SWT.NONE);
 
 	try {
-		site = new WebSite(frame, SWT.NONE, ProgId); //$NON-NLS-1$
+		site = new WebSite(frame, SWT.NONE, ProgId);
 	} catch (SWTException e) {
 		browser.dispose();
 		SWT.error(SWT.ERROR_NO_HANDLES);
 	}
-	
+
+	if (!Initialized) {
+		Initialized = true;
+		int version = 0;
+		String versionProperty = System.getProperty(PROPERTY_IEVERSION);
+		if (versionProperty != null) {
+			if (versionProperty.equalsIgnoreCase(VALUE_DEFAULT)) {
+				version = -1;
+			} else {
+				try {
+					version = Integer.valueOf(versionProperty).intValue();
+				} catch (NumberFormatException e) {
+					/* 
+					 * An invalid value was specified for the IEVersion java property.  Ignore it
+					 * and continue with the usual steps for determining the version to specify.
+					 */
+				}
+			}
+		}
+		if (version == 0) {
+			if (IEVersion != 0) {
+				version = IEVersion * 1000;
+			} else {
+				version = DEFAULT_IE_VERSION;
+			}
+		}
+
+		if (version != -1) {
+			int /*long*/[] key = new int /*long*/[1];
+			final TCHAR subkey = new TCHAR(0, "Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);	//$NON-NLS-1$
+			if (OS.RegCreateKeyEx(OS.HKEY_CURRENT_USER, subkey, 0, null, OS.REG_OPTION_VOLATILE, OS.KEY_WRITE | OS.KEY_QUERY_VALUE, 0, key, null) == 0) {
+				TCHAR lpszFile = new TCHAR(0, OS.MAX_PATH);
+				OS.GetModuleFileName(0, lpszFile, lpszFile.length());
+				String path = lpszFile.toString(0, lpszFile.strlen());
+				int index = path.lastIndexOf(SEPARATOR_OS);
+				String executable = index != -1 ? path.substring(index + 1) : path;
+				final TCHAR lpValueName = new TCHAR(0, executable, true);
+				if (OS.RegQueryValueEx(key[0], lpValueName, 0, null, (int[])null, null) == OS.ERROR_FILE_NOT_FOUND) {
+					if (OS.RegSetValueEx(key[0], lpValueName, 0, OS.REG_DWORD, new int[] {version}, 4) == 0) {
+						parent.getDisplay().addListener(SWT.Dispose, new Listener() {			
+							public void handleEvent(Event event) {
+								int /*long*/[] key = new int /*long*/[1];
+								if (OS.RegOpenKeyEx(OS.HKEY_CURRENT_USER, subkey, 0, OS.KEY_WRITE, key) == 0) {
+									OS.RegDeleteValue(key[0], lpValueName);
+								}
+							}
+						});
+					}
+				}
+				OS.RegCloseKey(key[0]);
+			}
+		}
+	}
+
 	site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
 	auto = new OleAutomation(site);
 
@@ -448,20 +506,7 @@ public boolean create(Composite parent, int style) {
 						}
 						if (doit) {
 							lastNavigateURL = url;
-							varResult = event.arguments[0];
-							IDispatch dispatch = varResult.getDispatch();
-							Variant variant = new Variant(auto);
-							IDispatch top = variant.getDispatch();
-							boolean isTop = top.getAddress() == dispatch.getAddress();
-							if (isTop) {
-								/* unhook DOM listeners and unref the last document(s) */
-								unhookDOMListeners(documents);
-								for (int i = 0; i < documents.length; i++) {
-									documents[i].dispose();
-								}
-								documents = new OleAutomation[0];
-							}
-							}
+						}
 						break;
 					}
 					case CommandStateChange: {
@@ -613,6 +658,9 @@ public boolean create(Composite parent, int style) {
 					case NavigateComplete2: {
 						Variant varResult = event.arguments[1];
 						String url = varResult.getString();
+						if (!performingInitialNavigate) {
+							isAboutBlank = url.startsWith(ABOUT_BLANK);
+						}
 
 						/*
 						* Bug in Acrobat Reader.  Opening > MAX_PDF PDF files causes Acrobat to not
@@ -668,6 +716,13 @@ public boolean create(Composite parent, int style) {
 						IDispatch top = variant.getDispatch();
 						boolean isTop = top.getAddress() == dispatch.getAddress();
 						if (isTop) {
+							/* unhook DOM listeners and unref the last document(s) */
+							unhookDOMListeners(documents);
+							for (int i = 0; i < documents.length; i++) {
+								documents[i].dispose();
+							}
+							documents = new OleAutomation[0];
+
 							/* re-install registered functions */
 							Enumeration elements = functions.elements ();
 							while (elements.hasMoreElements ()) {
@@ -979,8 +1034,6 @@ public boolean create(Composite parent, int style) {
 	int[] rgdispid = auto.getIDsOfNames(new String[] {"RegisterAsDropTarget"}); //$NON-NLS-1$
 	if (rgdispid != null) auto.setProperty(rgdispid[0], variant);
 	variant.dispose();
-
-	return true;
 }
 
 public boolean back() {
@@ -1054,7 +1107,7 @@ static Variant createSafeArray(String string) {
 	int /*long*/ pSafeArray = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, SAFEARRAY.sizeof);
 	SAFEARRAY safeArray = new SAFEARRAY();
 	safeArray.cDims = 1;
-	safeArray.fFeatures = OS.FADF_FIXEDSIZE | OS.FADF_HAVEVARTYPE;
+	safeArray.fFeatures = OS.FADF_FIXEDSIZE;
 	safeArray.cbElements = 1;
 	safeArray.pvData = pvData;
 	SAFEARRAYBOUND safeArrayBound = new SAFEARRAYBOUND(); 
@@ -1848,7 +1901,7 @@ void handleDOMEvent (OleEvent e) {
 void hookDOMListeners(OleAutomation webBrowser, final boolean isTop) {
 	int[] rgdispid = webBrowser.getIDsOfNames(new String[] { PROPERTY_DOCUMENT });
 	int dispIdMember = rgdispid[0];
-	Variant	pVarResult = webBrowser.getProperty(dispIdMember);
+	Variant pVarResult = webBrowser.getProperty(dispIdMember);
 	if (pVarResult == null) return;
 	if (pVarResult.getType() == COM.VT_EMPTY) {
 		pVarResult.dispose();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java
index a62a9a1..81413c1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -307,8 +307,8 @@ int TranslateAccelerator(int /*long*/ lpMsg, int /*long*/ pguidCmdGroup, int nCm
 	* answering COM.S_OK.
 	* 
 	* - F5 causes a refresh, which is not appropriate when rendering HTML from memory
-	* - CTRL+L opens an Open Location dialog in IE8, which is undesirable and can
-	* crash in some contexts
+	* - CTRL+L and CTRL+O show an Open Location dialog in IE8, which is undesirable and
+	* can crash in some contexts
 	* - CTRL+N opens a standalone IE, which is undesirable and can crash in some contexts
 	*/
 	int result = COM.S_FALSE;
@@ -346,6 +346,7 @@ int TranslateAccelerator(int /*long*/ lpMsg, int /*long*/ pguidCmdGroup, int nCm
 				break;
 			case OS.VK_L:
 			case OS.VK_N:
+			case OS.VK_O:
 				if (OS.GetKeyState (OS.VK_CONTROL) < 0 && OS.GetKeyState (OS.VK_MENU) >= 0 && OS.GetKeyState (OS.VK_SHIFT) >= 0) {
 					if (msg.wParam == OS.VK_N || IE.IEVersion >= 8) {
 						frame.setData(CONSUME_KEY, "false"); //$NON-NLS-1$
@@ -496,7 +497,7 @@ int MapUrlToZone(int /*long*/ pwszUrl, int /*long*/ pdwZone, int dwFlags) {
 	* For some reason IE8 invokes this function after the Browser has
 	* been disposed.  To detect this case check for ie.auto != null. 
 	*/
-	if (ie.auto != null && ie._getUrl().startsWith(IE.ABOUT_BLANK) && !ie.untrustedText) {
+	if (ie.auto != null && ie.isAboutBlank && !ie.untrustedText) {
 		COM.MoveMemory(pdwZone, new int[] {IE.URLZONE_INTRANET}, 4);
 		return COM.S_OK;
 	}
@@ -711,14 +712,14 @@ int Invoke (int dispIdMember, int /*long*/ riid, int lcid, int dwFlags, int /*lo
 
 	DISPPARAMS dispParams = new DISPPARAMS ();
 	COM.MoveMemory (dispParams, pDispParams, DISPPARAMS.sizeof);
-	if (dispParams.cArgs != 2) {
+	if (dispParams.cArgs != 3) {
 		if (pVarResult != 0) {
 			COM.MoveMemory (pVarResult, new int /*long*/[] {0}, C.PTR_SIZEOF);
 		}
 		return COM.S_OK;
 	}
 
-	int /*long*/ ptr = dispParams.rgvarg + Variant.sizeof;
+	int /*long*/ ptr = dispParams.rgvarg + 2 * Variant.sizeof;
 	Variant variant = Variant.win32_new (ptr);
 	if (variant.getType () != COM.VT_I4) {
 		variant.dispose ();
@@ -736,11 +737,24 @@ int Invoke (int dispIdMember, int /*long*/ riid, int lcid, int dwFlags, int /*lo
 		return COM.S_OK;
 	}
 
+	ptr = dispParams.rgvarg + Variant.sizeof;
+	variant = Variant.win32_new (ptr);
+	int type = variant.getType ();
+	if (type != COM.VT_I4 && type != COM.VT_R8) {
+		variant.dispose ();
+		if (pVarResult != 0) {
+			COM.MoveMemory (pVarResult, new int /*long*/[] {0}, C.PTR_SIZEOF);
+		}
+		return COM.S_OK;
+	}
+	long token = variant.getLong ();
+	variant.dispose ();
+
 	variant = Variant.win32_new (dispParams.rgvarg);
 	Object key = new Integer (index);
 	BrowserFunction function = (BrowserFunction)functions.get (key);
 	Object returnValue = null;
-	if (function != null) {
+	if (function != null && token == function.token) {
 		try {
 			Object temp = convertToJava (variant);
 			if (temp instanceof Object[]) {
@@ -764,24 +778,21 @@ int Invoke (int dispIdMember, int /*long*/ riid, int lcid, int dwFlags, int /*lo
 	variant.dispose ();
 
 	if (pVarResult != 0) {
-		if (returnValue == null) {
-			COM.MoveMemory (pVarResult, new int /*long*/[] {0}, C.PTR_SIZEOF);
-		} else {
-			try {
-				variant = convertToJS (returnValue);
-			} catch (SWTException e) {
-				/* invalid return value type */
-				variant = convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
-			}
-			Variant.win32_copy (pVarResult, variant);
-			variant.dispose ();
+		try {
+			variant = convertToJS (returnValue);
+		} catch (SWTException e) {
+			/* invalid return value type */
+			variant = convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
 		}
+		Variant.win32_copy (pVarResult, variant);
+		variant.dispose ();
 	}
 	return COM.S_OK;
 }
 
 Object convertToJava (Variant variant) {
 	switch (variant.getType ()) {
+		case OLE.VT_EMPTY:
 		case OLE.VT_NULL: return null;
 		case OLE.VT_BSTR: return variant.getString ();
 		case OLE.VT_BOOL: return new Boolean (variant.getBoolean ());
@@ -839,7 +850,7 @@ Object convertToJava (Variant variant) {
 
 Variant convertToJS (Object value) {
 	if (value == null) {
-		return new Variant ();
+		return Variant.NULL;
 	}
 	if (value instanceof String) {
 		return new Variant ((String)value);
@@ -890,11 +901,11 @@ Variant convertToJS (Object value) {
 		Variant arrayType = ihtmlWindow2.getProperty (rgdispid[0]);
 		ihtmlWindow2.dispose ();
 		IDispatch arrayTypeDispatch = arrayType.getDispatch ();
-		arrayType.dispose ();
-
 		int /*long*/[] result = new int /*long*/[1];
 		int rc = arrayTypeDispatch.QueryInterface (COM.IIDIDispatchEx, result);
+		arrayType.dispose ();
 		if (rc != COM.S_OK) return new Variant ();
+
 		IDispatchEx arrayTypeDispatchEx = new IDispatchEx (result[0]);
 		result[0] = 0;
 		int /*long*/ resultPtr = OS.GlobalAlloc (OS.GMEM_FIXED | OS.GMEM_ZEROINIT, VARIANT.sizeof);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/BrowserFactory.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/BrowserFactory.java
new file mode 100644
index 0000000..6dd076e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/BrowserFactory.java	
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import org.eclipse.swt.SWT;
+
+class BrowserFactory {
+
+WebBrowser createWebBrowser (int style) {
+	if ((style & (SWT.MOZILLA | SWT.WEBKIT)) != 0) return null;
+	return new IE ();
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java
index 72ac7de..57c1d5e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java	
@@ -28,7 +28,7 @@ class IE extends WebBrowser {
 		};
 	}
 
-public boolean create(Composite parent, int style) {
+public void create(Composite parent, int style) {
 	frame = OS.gcnew_Frame();
 	if (frame == 0) SWT.error(SWT.ERROR_NO_HANDLES);
 	OS.Frame_NavigationUIVisibility(frame, OS.NavigationUIVisibility_Hidden);
@@ -64,8 +64,6 @@ public boolean create(Composite parent, int style) {
 	};
 	browser.addListener(SWT.Resize, listener);
 	browser.addListener(SWT.Dispose, listener);
-
-	return true;
 }
 
 public boolean back() {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/AnimatedProgress.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/AnimatedProgress.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/BusyIndicator.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/BusyIndicator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CBanner.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CBanner.java
index 0a20c6b..69d4b03 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CBanner.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CBanner.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,7 +102,7 @@ public class CBanner extends Composite {
 public CBanner(Composite parent, int style) {
 	super(parent, checkStyle(style));
 	super.setLayout(new CBannerLayout());
-	resizeCursor = new Cursor(getDisplay(), SWT.CURSOR_SIZEWE);
+	resizeCursor = getDisplay().getSystemCursor(SWT.CURSOR_SIZEWE);
 	
 	listener = new Listener() {
 		public void handleEvent(Event e) {
@@ -261,7 +261,6 @@ void onDispose(Event event) {
 	notifyListeners(SWT.Dispose, event);
 	event.type = SWT.None;
 
-	if (resizeCursor != null) resizeCursor.dispose();
 	resizeCursor = null;
 	left = null;
 	right = null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java
old mode 100644
new mode 100755
index aceaced..49cae17
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CCombo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -470,9 +470,9 @@ void createPopup(String[] items, int selectionIndex) {
 	if (foreground != null) list.setForeground (foreground);
 	if (background != null) list.setBackground (background);
 
-	int [] popupEvents = {SWT.Close, SWT.Paint, SWT.Deactivate};
+	int [] popupEvents = {SWT.Close, SWT.Paint};
 	for (int i=0; i<popupEvents.length; i++) popup.addListener (popupEvents [i], listener);
-	int [] listEvents = {SWT.MouseUp, SWT.Selection, SWT.Traverse, SWT.KeyDown, SWT.KeyUp, SWT.FocusIn, SWT.Dispose};
+	int [] listEvents = {SWT.MouseUp, SWT.Selection, SWT.Traverse, SWT.KeyDown, SWT.KeyUp, SWT.FocusIn, SWT.FocusOut, SWT.Dispose};
 	for (int i=0; i<listEvents.length; i++) list.addListener (listEvents [i], listener);
 
 	if (items != null) list.setItems (items);
@@ -1077,6 +1077,30 @@ void listEvent (Event event) {
 			handleFocus (SWT.FocusIn);
 			break;
 		}
+		case SWT.FocusOut: {
+			/*
+			 * Behavior in Windows, GTK & Cocoa: When the arrow button is pressed
+			 * with the popup list visible, the following events are received-
+			 * popup control receives a deactivate event, 
+			 * list receives focus lost event, and then
+			 * arrow button receives a selection event. 
+			 * If we hide the popup in the focus out event, the selection event will
+			 * show it again. To prevent the popup from showing again, we will detect
+			 * this case and let the selection event of the arrow button hide the popup.
+			 */
+			if (!"carbon".equals(SWT.getPlatform())) {
+				Point point = arrow.toControl(getDisplay().getCursorLocation());
+				Point size = arrow.getSize();
+				Rectangle rect = new Rectangle(0, 0, size.x, size.y);
+				if (rect.contains(point)) {
+					boolean comboShellActivated = getDisplay ().getActiveShell () == getShell ();
+					if (!comboShellActivated) dropDown (false);
+					break;
+				}
+			}
+			dropDown (false);
+			break;
+		}
 		case SWT.MouseUp: {
 			if (event.button != 1) return;
 			dropDown (false);
@@ -1197,25 +1221,6 @@ void popupEvent(Event event) {
 			event.doit = false;
 			dropDown (false);
 			break;
-		case SWT.Deactivate:
-			/*
-			 * Bug in GTK. When the arrow button is pressed the popup control receives a
-			 * deactivate event and then the arrow button receives a selection event. If 
-			 * we hide the popup in the deactivate event, the selection event will show 
-			 * it again. To prevent the popup from showing again, we will let the selection 
-			 * event of the arrow button hide the popup.
-			 * In Windows, hiding the popup during the deactivate causes the deactivate 
-			 * to be called twice and the selection event to be disappear.
-			 */
-			if (!"carbon".equals(SWT.getPlatform())) {
-				Point point = arrow.toControl(getDisplay().getCursorLocation());
-				Point size = arrow.getSize();
-				Rectangle rect = new Rectangle(0, 0, size.x, size.y);
-				if (!rect.contains(point)) dropDown (false);
-			} else {
-				dropDown(false);
-			}
-			break;
 	}
 }
 public void redraw () {
@@ -1429,7 +1434,7 @@ public void setEnabled (boolean enabled) {
 }
 public boolean setFocus () {
 	checkWidget();
-	if (!isEnabled () || !isVisible ()) return false;
+	if (!isEnabled () || !getVisible ()) return false;
 	if (isFocusControl ()) return true;
 	return text.setFocus ();
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CLabel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CLabel.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java
old mode 100644
new mode 100755
index 6549c46..f9f31b7
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1038,6 +1038,9 @@ void initAccessible() {
 					}
 				}
 			}
+			if (childID == ACC.CHILDID_SELF) {
+				shortcut = "Ctrl+PageDown"; //$NON-NLS-1$
+			}
 			e.result = shortcut;
 		}
 	});
@@ -1964,13 +1967,12 @@ public void setBackground(Color[] colors, int[] percents) {
  * </pre>
  *
  * @param colors an array of Color that specifies the colors to appear in the gradient 
- *               in order of appearance left to right.  The value <code>null</code> clears the
- *               background gradient. The value <code>null</code> can be used inside the array of 
- *               Color to specify the background color.
+ *               in order of appearance from top to bottom or left to right.  The value
+ *               <code>null</code> clears the background gradient. The value <code>null</code>
+ *               can be used inside the array of Color to specify the background color.
  * @param percents an array of integers between 0 and 100 specifying the percent of the width 
  *                 of the widget at which the color should change.  The size of the <code>percents</code>
  *                 array must be one less than the size of the <code>colors</code> array.
- * 
  * @param vertical indicate the direction of the gradient. <code>True</code> is vertical and <code>false</code> is horizontal. 
  * 
  * @exception SWTException <ul>
@@ -2762,8 +2764,8 @@ void setSelection(int index, boolean notify) {
  */
 public void setSelectionBackground (Color color) {
 	checkWidget();
+	if (selectionBackground.equals(color)) return;
 	setSelectionHighlightGradientColor(null);
-	if (selectionBackground == color) return;
 	if (color == null) color = getDisplay().getSystemColor(SELECTION_BACKGROUND);
 	selectionBackground = color;
 	renderer.createAntialiasColors(); //TODO:  need better caching strategy
@@ -2798,11 +2800,11 @@ public void setSelectionBackground(Color[] colors, int[] percents) {
 	setSelectionBackground(colors, percents, false);
 }
 /**
- * Specify a gradient of colours to be draw in the background of the selected tab.
+ * Specify a gradient of colours to be drawn in the background of the selected tab.
  * For example to draw a vertical gradient that varies from dark blue to blue and then to
- * white, use the following call to setBackground:
+ * white, use the following call to setSelectionBackground:
  * <pre>
- *	cfolder.setBackground(new Color[]{display.getSystemColor(SWT.COLOR_DARK_BLUE), 
+ *	cfolder.setSelectionBackground(new Color[]{display.getSystemColor(SWT.COLOR_DARK_BLUE), 
  *		                           display.getSystemColor(SWT.COLOR_BLUE),
  *		                           display.getSystemColor(SWT.COLOR_WHITE), 
  *		                           display.getSystemColor(SWT.COLOR_WHITE)},
@@ -2810,13 +2812,14 @@ public void setSelectionBackground(Color[] colors, int[] percents) {
  * </pre>
  *
  * @param colors an array of Color that specifies the colors to appear in the gradient 
- *               in order of appearance left to right.  The value <code>null</code> clears the
+ *               in order of appearance from top to bottom.  The value <code>null</code> clears the
  *               background gradient. The value <code>null</code> can be used inside the array of 
- *               Color to specify the background color.
- * @param percents an array of integers between 0 and 100 specifying the percent of the width 
+ *               Color to specify the background color. For vertical gradients, the colors array
+ *               can optionally have an extra entry at the end to specify a highlight top color.
+ * @param percents an array of increasing integers between 0 and 100 specifying the percent of the width 
  *                 of the widget at which the color should change.  The size of the percents array must be one 
- *                 less than the size of the colors array.
- * 
+ *                 less than the size of the colors array, unless there is a highlight top color, in which
+ *                 case it must be exactly two less than the size of the colors array.
  * @param vertical indicate the direction of the gradient.  True is vertical and false is horizontal. 
  * 
  * @exception SWTException <ul>
@@ -2934,8 +2937,8 @@ void setSelectionHighlightGradientColor(Color start) {
  */
 public void setSelectionBackground(Image image) {
 	checkWidget();
-	setSelectionHighlightGradientColor(null);
 	if (image == selectionBgImage) return;
+	setSelectionHighlightGradientColor(null);
 	if (image != null) {
 		selectionGradientColors = null;
 		selectionGradientPercents = null;
@@ -2957,7 +2960,7 @@ public void setSelectionBackground(Image image) {
  */
 public void setSelectionForeground (Color color) {
 	checkWidget();
-	if (selectionForeground == color) return;
+	if (selectionForeground.equals(color)) return;
 	if (color == null) color = getDisplay().getSystemColor(SELECTION_FOREGROUND);
 	selectionForeground = color;
 	if (selectedIndex > -1) redraw();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java
index 1a05182..3613304 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.custom;
 
+import java.util.Hashtable;
 import org.eclipse.swt.*;
 import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.widgets.*;
@@ -52,6 +53,7 @@ public class CTabFolderRenderer {
 	 * We have to recompute the colors if the border color changes
 	 */
 	Color lastBorderColor = null;
+	static final String COLOR_CACHE = "org.eclipse.swt.custom.CTabFolderRenderer.ColorCache"; //$NON-NLS-1$
 	
 	//TOP_LEFT_CORNER_HILITE is laid out in reverse (ie. top to bottom)
 	//so can fade in same direction as right swoop curve
@@ -124,6 +126,45 @@ public class CTabFolderRenderer {
 		this.parent = parent;
 	}
 	
+	static Color getColor(Display display, RGB rgb) {
+		Color color;
+		Hashtable ColorCache = (Hashtable) display.getData(COLOR_CACHE);
+		if (ColorCache == null) {
+			ColorCache = new Hashtable();
+			display.setData(COLOR_CACHE, ColorCache);
+		}
+		Object [] colorData = (Object []) ColorCache.get(rgb);
+		if (colorData != null) {
+			color = (Color) colorData[0];
+			int refcount = ((Integer) colorData[1]).intValue();
+			colorData[1] = new Integer(refcount + 1);
+		} else {
+			color = new Color(display, rgb);
+			ColorCache.put(rgb, new Object[] {color, new Integer(1)});
+		}
+		return color;
+	}
+	
+	static void releaseColor(Display display, Color color) {
+		RGB rgb = color.getRGB();
+		Hashtable ColorCache = (Hashtable) display.getData(COLOR_CACHE);
+		if (ColorCache == null) {
+			ColorCache = new Hashtable();
+			display.setData(COLOR_CACHE, ColorCache);
+		}
+		Object [] colorData = (Object []) ColorCache.get(rgb);
+		if (colorData != null) {
+			int refcount = ((Integer) colorData[1]).intValue();
+			refcount--;
+			if (refcount == 0) {
+				ColorCache.remove(rgb);
+				color.dispose();
+			} else {
+				colorData[1] = new Integer(refcount);
+			}
+		}
+	}
+	
 	void antialias (int[] shape, Color innerColor, Color outerColor, GC gc){
 		// Don't perform anti-aliasing on Mac and WPF because the platform
 		// already does it.  The simple style also does not require anti-aliasing.
@@ -374,7 +415,8 @@ public class CTabFolderRenderer {
 	
 	void createAntialiasColors() {
 	    disposeAntialiasColors();
-	    lastBorderColor = parent.getDisplay().getSystemColor(BORDER1_COLOR);
+	    Display display = parent.getDisplay();
+	    lastBorderColor = display.getSystemColor(BORDER1_COLOR);
 	    RGB lineRGB = lastBorderColor.getRGB();
 	    /* compute the selected color */
 	    RGB innerRGB = parent.selectionBackground.getRGB();
@@ -392,7 +434,7 @@ public class CTabFolderRenderer {
 			int red = from.red + 2*(to.red - from.red)/3;
 			int green = from.green + 2*(to.green - from.green)/3;
 			int blue = from.blue + 2*(to.blue - from.blue)/3;
-			selectedOuterColor = new Color(parent.getDisplay(), red, green, blue);
+			selectedOuterColor = getColor(display, new RGB(red, green, blue));
 	    }
 	    if (innerRGB != null) {
 			RGB from = lineRGB;
@@ -400,7 +442,7 @@ public class CTabFolderRenderer {
 			int red = from.red + 2*(to.red - from.red)/3;
 			int green = from.green + 2*(to.green - from.green)/3;
 			int blue = from.blue + 2*(to.blue - from.blue)/3;
-			selectedInnerColor = new Color(parent.getDisplay(), red, green, blue);
+			selectedInnerColor = getColor(display, new RGB(red, green, blue));
 	    }
 	    /* compute the tabArea color */
 	    outerRGB = parent.getParent().getBackground().getRGB();
@@ -410,7 +452,7 @@ public class CTabFolderRenderer {
 			int red = from.red + 2*(to.red - from.red)/3;
 			int green = from.green + 2*(to.green - from.green)/3;
 			int blue = from.blue + 2*(to.blue - from.blue)/3;
-			tabAreaColor = new Color(parent.getDisplay(), red, green, blue);
+			tabAreaColor = getColor(display, new RGB(red, green, blue));
 	    }
 	}
 
@@ -436,13 +478,14 @@ public class CTabFolderRenderer {
 		selectionHighlightGradientColorsCache = new Color[fadeGradientSize];
 		int denom = fadeGradientSize - 1;
 
+		Display display = parent.getDisplay();
 		for (int i = 0; i < fadeGradientSize; i++) {
 			int propFrom = denom - i;
 			int propTo = i;
 			int red = (to.red * propTo + from.red * propFrom) / denom;
 			int green = (to.green * propTo  + from.green * propFrom) / denom;
 			int blue = (to.blue * propTo  + from.blue * propFrom) / denom;
-			selectionHighlightGradientColorsCache[i] = new Color(parent.getDisplay(), red, green, blue);
+			selectionHighlightGradientColorsCache[i] = getColor(display, new RGB(red, green, blue));
 		}
 	}
 	
@@ -457,23 +500,25 @@ public class CTabFolderRenderer {
 		disposeAntialiasColors();
 		disposeSelectionHighlightGradientColors();
 		if (fillColor != null) {
-		    fillColor.dispose();
+			releaseColor(parent.getDisplay(), fillColor);
 		    fillColor = null;
 		}
 	}
 	
 	void disposeAntialiasColors() {
-	    if (tabAreaColor != null) tabAreaColor.dispose();
-	    if (selectedInnerColor != null) selectedInnerColor.dispose();
-	    if (selectedOuterColor != null) selectedOuterColor.dispose();
+		Display display = parent.getDisplay();
+	    if (tabAreaColor != null) releaseColor(display, tabAreaColor);
+	    if (selectedInnerColor != null) releaseColor(display, selectedInnerColor);
+	    if (selectedOuterColor != null) releaseColor(display, selectedOuterColor);
 	    tabAreaColor = selectedInnerColor = selectedOuterColor = null;
 	}
 
 	void disposeSelectionHighlightGradientColors() {
 		if(selectionHighlightGradientColorsCache == null)
 			return;
+		Display display = parent.getDisplay();
 		for (int i = 0; i < selectionHighlightGradientColorsCache.length; i++) {
-			selectionHighlightGradientColorsCache[i].dispose();
+			releaseColor(display, selectionHighlightGradientColorsCache[i]);
 		}
 		selectionHighlightGradientColorsCache = null;
 	}
@@ -1624,7 +1669,7 @@ public class CTabFolderRenderer {
 		
 	Color getFillColor() {
 		if (fillColor == null) {
-			fillColor = new Color(parent.getDisplay(), CLOSE_FILL);
+			fillColor = getColor(parent.getDisplay(), CLOSE_FILL);
 		}
 		return fillColor;
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ControlEditor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ControlEditor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/DefaultContent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/DefaultContent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ExtendedModifyEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ExtendedModifyEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ExtendedModifyListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ExtendedModifyListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineBackgroundEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineBackgroundEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineBackgroundListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineBackgroundListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineStyleEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineStyleEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineStyleListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineStyleListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/PopupList.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/PopupList.java
old mode 100644
new mode 100755
index c3bb6f0..4db6100
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/PopupList.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/PopupList.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,9 +47,12 @@ public PopupList(Shell parent) {
 * @since 3.0 
 */
 public PopupList(Shell parent, int style) {
+	int listStyle = SWT.SINGLE | SWT.V_SCROLL;
+	if ((style & SWT.H_SCROLL) != 0) listStyle |= SWT.H_SCROLL;
+	
 	shell = new Shell(parent, checkStyle(style));
 	
-	list = new List(shell, SWT.SINGLE | SWT.V_SCROLL);	
+	list = new List(shell, listStyle);	
 
 	// close dialog if user selects outside of the shell
 	shell.addListener(SWT.Deactivate, new Listener() {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ST.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ST.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/SashForm.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/SashForm.java
old mode 100644
new mode 100755
index 232652d..c944b71
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/SashForm.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/SashForm.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -107,6 +107,11 @@ Sash createSash() {
  * Returns SWT.HORIZONTAL if the controls in the SashForm are laid out side by side
  * or SWT.VERTICAL   if the controls in the SashForm are laid out top to bottom.
  * 
+ * <p>
+ * To retrieve the bidi orientation of the SashForm use <code>{@link #getStyle()}</code>
+ * and test if the SWT.RIGHT_TO_LEFT or SWT.LEFT_TO_RIGHT bits are set.
+ * </p>
+ * 
  * @return SWT.HORIZONTAL or SWT.VERTICAL
  */
 public int getOrientation() {
@@ -286,16 +291,27 @@ void onDragSash(Event event) {
  * out side by side.  If orientation is SWT.VERTICAL, lay the 
  * controls in the SashForm out top to bottom.
  * 
- * @param orientation SWT.HORIZONTAL or SWT.VERTICAL
+ * <p>
+ * Since 3.7, this method can also be called with SWT.RIGHT_TO_LEFT or SWT.LEFT_TO_RIGHT 
+ * to change the bidi orientation of the SashForm.
+ * </p>
+ * 
+ * @param orientation SWT.HORIZONTAL or SWT.VERTICAL, SWT.RIGHT_TO_LEFT or SWT.LEFT_TO_RIGHT
+ * 
+ * @see Control#setOrientation(int)
  * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- *    <li>ERROR_INVALID_ARGUMENT - if the value of orientation is not SWT.HORIZONTAL or SWT.VERTICAL
+ *    <li>ERROR_INVALID_ARGUMENT - if the value of orientation is not SWT.HORIZONTAL or SWT.VERTICAL, SWT.RIGHT_TO_LEFT or SWT.LEFT_TO_RIGHT
  * </ul>
  */
 public void setOrientation(int orientation) {
 	checkWidget();
+	if (orientation == SWT.RIGHT_TO_LEFT || orientation == SWT.LEFT_TO_RIGHT) {
+		super.setOrientation(orientation);
+		return;
+	}
 	if (getOrientation() == orientation) return;
 	if (orientation != SWT.HORIZONTAL && orientation != SWT.VERTICAL) {
 		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ScrolledComposite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ScrolledComposite.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StackLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StackLayout.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyleRange.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyleRange.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
old mode 100644
new mode 100755
index c6915a2..250f2d7
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -149,7 +149,6 @@ public class StyledText extends Canvas {
 	int lastTextChangeReplaceCharCount;
 	int lastCharCount = 0;
 	int lastLineBottom;					// the bottom pixel of the last line been replaced
-	boolean isMirrored;
 	boolean bidiColoring = false;		// apply the BIDI algorithm on text segments of the same color
 	Image leftCaretBitmap = null;
 	Image rightCaretBitmap = null;
@@ -1000,6 +999,7 @@ public class StyledText extends Canvas {
 				write("\\highlight");
 				write(colorIndex);
 			}
+			int fontStyle = style.fontStyle;
 			Font font = style.font;
 			if (font != null) {
 				int fontIndex = getFontIndex(font);
@@ -1008,13 +1008,13 @@ public class StyledText extends Canvas {
 				FontData fontData = font.getFontData()[0];
 				write("\\fs");
 				write(fontData.getHeight() * 2);
-			} else {
-				if ((style.fontStyle & SWT.BOLD) != 0) {
-					write("\\b"); 
-				}
-				if ((style.fontStyle & SWT.ITALIC) != 0) {
-					write("\\i"); 
-				}
+				fontStyle = fontData.getStyle();
+			}
+			if ((fontStyle & SWT.BOLD) != 0) {
+				write("\\b");
+			}
+			if ((fontStyle & SWT.ITALIC) != 0) {
+				write("\\i");
 			}
 			if (style.underline) {
 				write("\\ul");
@@ -1028,13 +1028,11 @@ public class StyledText extends Canvas {
 			// guard against invalid styles and let style processing continue
 			copyEnd = Math.max(copyEnd, lineIndex);
 			write(line, lineIndex, copyEnd);
-			if (font == null) {
-				if ((style.fontStyle & SWT.BOLD) != 0) {
-					write("\\b0"); 
-				}
-				if ((style.fontStyle & SWT.ITALIC) != 0) {
-					write("\\i0"); 
-				}
+			if ((fontStyle & SWT.BOLD) != 0) {
+				write("\\b0");
+			}
+			if ((style.fontStyle & SWT.ITALIC) != 0) {
+				write("\\i0");
 			}
 			if (style.underline) {
 				write("\\ul0");
@@ -1239,7 +1237,6 @@ public StyledText(Composite parent, int style) {
 	super.setForeground(getForeground());
 	super.setDragDetect(false);
 	Display display = getDisplay();
-	isMirrored = (super.getStyle() & SWT.MIRRORED) != 0;
 	fixedLineHeight = true;
 	if ((style & SWT.READ_ONLY) != 0) {
 		setEditable(false);
@@ -1523,7 +1520,7 @@ public void addVerifyListener(VerifyListener verifyListener) {
  */
 public void addWordMovementListener(MovementListener movementListener) {
 	checkWidget();
-	if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (movementListener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
 	addListener(WordNext, new StyledTextListener(movementListener));
 	addListener(WordPrevious, new StyledTextListener(movementListener));
 }
@@ -2469,20 +2466,16 @@ void doContentEnd() {
 		doLineEnd();
 	} else {
 		int length = content.getCharCount();		
-		if (caretOffset < length) {
-			setCaretOffset(length, SWT.DEFAULT);
-			showCaret();
-		}
+		setCaretOffset(length, SWT.DEFAULT);
+		showCaret();
 	}
 }
 /**
  * Moves the caret in front of the first character of the widget content.
  */
 void doContentStart() {
-	if (caretOffset > 0) {
-		setCaretOffset(0, SWT.DEFAULT);
-		showCaret();
-	}
+	setCaretOffset(0, SWT.DEFAULT);
+	showCaret();
 }
 /**
  * Moves the caret to the start of the selection if a selection exists.
@@ -2636,10 +2629,8 @@ void doLineEnd() {
 		int lineLength = content.getLine(caretLine).length();
 		lineEndOffset = lineOffset + lineLength;
 	}
-	if (caretOffset < lineEndOffset) {
-		setCaretOffset(lineEndOffset, PREVIOUS_OFFSET_TRAILING);
-		showCaret();
-	}
+	setCaretOffset(lineEndOffset, PREVIOUS_OFFSET_TRAILING);
+	showCaret();
 }
 /**
  * Moves the caret to the beginning of the line.
@@ -2655,10 +2646,8 @@ void doLineStart() {
 		lineOffset += offsets[lineIndex];
 		renderer.disposeTextLayout(layout);
 	}
-	if (caretOffset > lineOffset) {
-		setCaretOffset(lineOffset, OFFSET_LEADING);
-		showCaret();
-	}
+	setCaretOffset(lineOffset, OFFSET_LEADING);
+	showCaret();
 }
 /**
  * Moves the caret one line up and to the same character offset relative 
@@ -4471,12 +4460,7 @@ int getOffsetAtPoint(int x, int y, int[] trailing, boolean inTextOnly) {
  * @since 2.1.2
  */
 public int getOrientation () {
-	checkWidget();
-	if (IS_MAC) {
-		int style = super.getStyle();
-		return style & (SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT);
-	}
-	return isMirrored() ? SWT.RIGHT_TO_LEFT : SWT.LEFT_TO_RIGHT;
+	return super.getOrientation ();
 }
 /** 
  * Returns the index of the last partially visible line.
@@ -4770,14 +4754,6 @@ public String getSelectionText() {
 	}
 	return content.getTextRange(selection.x, selection.y - selection.x);
 }
-public int getStyle() {
-	int style = super.getStyle();
-	style &= ~(SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT | SWT.MIRRORED);
-	style |= getOrientation();
-	if (isMirrored()) style |= SWT.MIRRORED;
-	return style;
-}
-
 StyledTextEvent getBidiSegments(int lineOffset, String line) {
 	if (!isBidi()) return null;
 	if (!isListening(LineGetSegments)) {
@@ -5296,6 +5272,7 @@ int getVisualLineIndex(TextLayout layout, int offsetInLine) {
 		int lineY = layout.getLineBounds(lineIndex).y;
 		int caretY = getCaret().getLocation().y - topMargin - getLinePixel(getCaretLine());
 		if (lineY > caretY) lineIndex--;
+		caretAlignment = OFFSET_LEADING;
  	}
 	return lineIndex;
 }
@@ -5442,7 +5419,8 @@ Point getPointAtOffset(int offset) {
 	TextLayout layout = renderer.getTextLayout(lineIndex);
 	if (lineLength != 0  && offsetInLine <= lineLength) {
 		if (offsetInLine == lineLength) {
-			point = layout.getLocation(offsetInLine - 1, true);
+			offsetInLine = layout.getPreviousOffset(offsetInLine, SWT.MOVEMENT_CLUSTER); 
+			point = layout.getLocation(offsetInLine, true);
 		} else {
 			switch (caretAlignment) {
 				case OFFSET_LEADING:
@@ -5453,7 +5431,8 @@ Point getPointAtOffset(int offset) {
 					if (offsetInLine == 0) {
 						point = layout.getLocation(offsetInLine, false);
 					} else {
-						point = layout.getLocation(offsetInLine - 1, true);
+						offsetInLine = layout.getPreviousOffset(offsetInLine, SWT.MOVEMENT_CLUSTER); 
+						point = layout.getLocation(offsetInLine, true);
 					}
 					break;
 			}
@@ -6685,6 +6664,35 @@ void initializeAccessible() {
 			e.result = ACC.OK;
 		}
 	});
+	accessible.addAccessibleEditableTextListener(new AccessibleEditableTextListener() {
+		public void setTextAttributes(AccessibleTextAttributeEvent e) {
+			// This method must be implemented by the application
+			e.result = ACC.OK;
+		}
+		public void replaceText(AccessibleEditableTextEvent e) {
+			StyledText st = StyledText.this;
+			st.replaceTextRange(e.start, e.end - e.start, e.string);
+            e.result = ACC.OK;
+		}
+		public void pasteText(AccessibleEditableTextEvent e) {
+			StyledText st = StyledText.this;
+			st.setSelection(e.start);
+            st.paste();
+            e.result = ACC.OK;
+		}
+		public void cutText(AccessibleEditableTextEvent e) {
+			StyledText st = StyledText.this;
+			st.setSelection(e.start, e.end);
+            st.cut();
+            e.result = ACC.OK;
+		}
+		public void copyText(AccessibleEditableTextEvent e) {
+			StyledText st = StyledText.this;
+			st.setSelection(e.start, e.end);
+            st.copy();
+            e.result = ACC.OK;
+		}
+	});
 	accessible.addAccessibleAttributeListener(new AccessibleAttributeAdapter() {
 		public void getAttributes(AccessibleAttributeEvent e) {
 			StyledText st = StyledText.this;
@@ -7078,7 +7086,7 @@ boolean invokeBlockAction(int action) {
  * Temporary until SWT provides this
  */
 boolean isBidi() {
-	return IS_GTK || IS_MAC || BidiUtil.isBidiPlatform() || isMirrored;
+	return IS_GTK || IS_MAC || BidiUtil.isBidiPlatform() || isMirrored();
 }
 boolean isBidiCaret() {
 	return BidiUtil.isBidiPlatform();
@@ -7111,7 +7119,7 @@ boolean isLineDelimiter(int offset) {
  * 	is left oriented
  */
 boolean isMirrored() {
-	return isMirrored;
+	return (getStyle() & SWT.MIRRORED) != 0;
 }
 /**
  * Returns whether the widget can have only one line.
@@ -9236,28 +9244,17 @@ void setMouseWordSelectionAnchor() {
  * @since 2.1.2
  */
 public void setOrientation(int orientation) {
-	if ((orientation & (SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT)) == 0) { 
-		return;
-	}
-	if ((orientation & SWT.RIGHT_TO_LEFT) != 0 && (orientation & SWT.LEFT_TO_RIGHT) != 0) {
-		return;	
-	}
-	if ((orientation & SWT.RIGHT_TO_LEFT) != 0 && isMirrored()) {
-		return;	
-	} 
-	if ((orientation & SWT.LEFT_TO_RIGHT) != 0 && !isMirrored()) {
-		return;
-	}
-	if (!BidiUtil.setOrientation(this, orientation)) {
-		return;
+	int oldOrientation = getOrientation();
+	super.setOrientation(orientation);
+	int newOrientation = getOrientation();
+	if (oldOrientation != newOrientation) {
+		caretDirection = SWT.NULL;
+		resetCache(0, content.getLineCount());
+		setCaretLocation();
+		keyActionMap.clear();
+		createKeyBindings();
+		super.redraw();
 	}
-	isMirrored = (orientation & SWT.RIGHT_TO_LEFT) != 0;
-	caretDirection = SWT.NULL;
-	resetCache(0, content.getLineCount());
-	setCaretLocation();
-	keyActionMap.clear();
-	createKeyBindings();
-	super.redraw();
 }
 /** 
  * Sets the right margin.
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextContent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextContent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java
index f1e2fba..f22fed0 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java	
@@ -514,7 +514,8 @@ boolean hasLink(int offset) {
 				}
 			} else {
 				for (int i = 0; i < styles.length; i++) {
-					if (styles[i].start <= offset && offset < styles[i].start + styles[i].length && styles[i >> 1].underline && styles[i >> 1].underlineStyle == SWT.UNDERLINE_LINK) {
+					StyleRange style = styles[i]; 
+					if (style.start <= offset && offset < style.start + style.length && style.underline && style.underlineStyle == SWT.UNDERLINE_LINK) {
 						return true;
 					}
 				}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableEditor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableEditor.java
old mode 100644
new mode 100755
index 2f57b5f..05278af
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableEditor.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableEditor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -111,8 +111,11 @@ Rectangle computeBounds () {
 	if (item == null || column == -1 || item.isDisposed()) return new Rectangle(0, 0, 0, 0);
 	Rectangle cell = item.getBounds(column);
 	Rectangle rect = item.getImageBounds(column);
-	cell.x = rect.x + rect.width;
-	cell.width -= rect.width;
+	if (rect.width != 0) {
+		int imageGap = Math.max(rect.x - cell.x, 0);
+		cell.x = rect.x + rect.width;
+		cell.width -= (imageGap + rect.width);
+	}
 	Rectangle area = table.getClientArea();
 	if (cell.x < area.x + area.width) {
 		if (cell.x + cell.width > area.x + area.width) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableTree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableTree.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableTreeEditor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableTreeEditor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableTreeItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TableTreeItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangeListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangeListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangedEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangedEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangingEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangingEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TreeEditor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TreeEditor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/VerifyKeyListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/VerifyKeyListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ViewForm.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ViewForm.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java
index 7aa900b..d6da7ed 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DragSource.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -351,6 +351,7 @@ void drag(Event dragEvent) {
 }
 
 int dragSendDataProc(int theType, int dragSendRefCon, int theItemRef, int theDrag) {
+	control.setData(DRAG_STARTED, null);
 	if (theType == 0) return OS.badDragFlavorErr;
 	TransferData transferData = new TransferData();
 	transferData.type = theType;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java
index af52555..c916c83 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/DropTarget.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/HTMLTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/HTMLTransfer.java
index 34b9ccf..0b03f4a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/HTMLTransfer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/HTMLTransfer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java
index 81414b1..c022f93 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TextTransfer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java
index 46b5e46..3c1026c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -128,7 +128,18 @@ void addDragHandlers() {
 	// If we already added it, no need to do it again.
 	int /*long*/ procPtr = OS.class_getMethodImplementation(cls, OS.sel_draggingEntered_);
 	if (procPtr == proc3Args) return;
+	addDragHandlers(cls);
+	
+	// If the content view can be image view, then add the dragging methods to image view too.
+	// This is used by Label so that dragging can work even when the Label has an image set on it.
+	int /*long*/ imageView = 0;
+	if ((imageView = OS.objc_msgSend(control.view.id, OS.sel_getImageView)) != 0) {
+		cls = OS.object_getClass(imageView);
+		addDragHandlers(cls);
+	}
+}
 
+void addDragHandlers (int /*long*/ cls) {
 	// Add the NSDraggingDestination callbacks
 	OS.class_addMethod(cls, OS.sel_draggingEntered_, proc3Args, "@:@");
 	OS.class_addMethod(cls, OS.sel_draggingUpdated_, proc3Args, "@:@");
@@ -734,7 +745,6 @@ boolean outlineView_acceptDrop_item_childIndex(int /*long*/ id, int /*long*/ sel
 }
 
 int /*long*/ outlineView_validateDrop_proposedItem_proposedChildIndex(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ info, int /*long*/ item, int /*long*/ index) {
-	//TODO stop scrolling and expansion when app does not set FEEDBACK_SCROLL and/or FEEDBACK_EXPAND
 	//TODO expansion animation and auto collapse not working because of outlineView:shouldExpandItem:
 	NSOutlineView widget = new NSOutlineView(outlineView);
 	NSObject sender = new NSObject(info);
@@ -947,20 +957,23 @@ boolean tableView_acceptDrop_row_dropOperation(int /*long*/ id, int /*long*/ sel
 }
 
 int tableView_validateDrop_proposedRow_proposedDropOperation(int /*long*/ id, int /*long*/ sel, int /*long*/ tableView, int /*long*/ info, int /*long*/ row, int /*long*/ operation) {
-	//TODO stop scrolling and expansion when app does not set FEEDBACK_SCROLL and/or FEEDBACK_EXPAND
 	NSTableView widget = new NSTableView(tableView);
-	if (0 <= row && row < widget.numberOfRows()) {
+	NSObject sender = new NSObject(info);
+	NSPoint pt = sender.draggingLocation();
+	pt = widget.convertPoint_fromView_(pt, null);
+	int /*long*/ hitRow = widget.rowAtPoint(pt);
+	if (0 <= hitRow && hitRow < widget.numberOfRows()) {
 		if (feedback == 0) {
 			widget.setDropRow(-1, OS.NSTableViewDropOn);		
 		} else {
 			if ((feedback & DND.FEEDBACK_SELECT) != 0) {
-				widget.setDropRow(row, OS.NSTableViewDropOn);
+				widget.setDropRow(hitRow, OS.NSTableViewDropOn);
 			} else {
 				if ((feedback & DND.FEEDBACK_INSERT_AFTER) != 0) {
-					widget.setDropRow(row + 1, OS.NSTableViewDropAbove);
+					widget.setDropRow(hitRow + 1, OS.NSTableViewDropAbove);
 				}
 				if ((feedback & DND.FEEDBACK_INSERT_BEFORE) != 0) {
-					widget.setDropRow(row, OS.NSTableViewDropAbove);
+					widget.setDropRow(hitRow, OS.NSTableViewDropAbove);
 				}
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java
index 6fdf4f7..876cf76 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.dnd;
 
+import org.eclipse.swt.internal.cocoa.*;
 import org.eclipse.swt.widgets.*;
 
 /**
@@ -43,7 +44,8 @@ import org.eclipse.swt.widgets.*;
  * @since 3.3
  */
 public class TableDropTargetEffect extends DropTargetEffect {
-	
+	boolean shouldEnableScrolling;
+
 	/**
 	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
 	 * <code>Table</code>.
@@ -93,6 +95,11 @@ public class TableDropTargetEffect extends DropTargetEffect {
 	 * @see DropTargetEvent
 	 */
 	public void dragLeave(DropTargetEvent event) {
+		if (shouldEnableScrolling) {
+			shouldEnableScrolling = false;
+			OS.objc_msgSend(control.view.id, OS.sel_setShouldScrollClipView_, 1);
+			control.redraw();
+		}
 	}
 
 	/**
@@ -115,5 +122,11 @@ public class TableDropTargetEffect extends DropTargetEffect {
 	public void dragOver(DropTargetEvent event) {
 		int effect = checkEffect(event.feedback);
 		((DropTarget)event.widget).feedback = effect;
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			shouldEnableScrolling = true;
+			OS.objc_msgSend(control.view.id, OS.sel_setShouldScrollClipView_, 0);
+		} else {
+			OS.objc_msgSend(control.view.id, OS.sel_setShouldScrollClipView_, 1);
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java
index fac1c86..a7ad7d5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.dnd;
 
+import org.eclipse.swt.internal.cocoa.*;
 import org.eclipse.swt.widgets.*;
 
 /**
@@ -46,6 +47,7 @@ import org.eclipse.swt.widgets.*;
  * @since 3.3
  */
 public class TreeDropTargetEffect extends DropTargetEffect {
+	boolean shouldEnableScrolling;
 
 	/**
 	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
@@ -96,6 +98,12 @@ public class TreeDropTargetEffect extends DropTargetEffect {
 	 * @see DropTargetEvent
 	 */
 	public void dragLeave(DropTargetEvent event) {
+		OS.objc_msgSend(control.view.id, OS.sel_setShouldExpandItem_, 1);
+		if (shouldEnableScrolling) {
+			shouldEnableScrolling = false;
+			OS.objc_msgSend(control.view.id, OS.sel_setShouldScrollClipView_, 1);
+			control.redraw();
+		}
 	}
 
 	/**
@@ -119,5 +127,12 @@ public class TreeDropTargetEffect extends DropTargetEffect {
 	public void dragOver(DropTargetEvent event) {
 		int effect = checkEffect(event.feedback);		
 		((DropTarget)event.widget).feedback = effect;
+		OS.objc_msgSend(control.view.id, OS.sel_setShouldExpandItem_, (effect & DND.FEEDBACK_EXPAND) == 0 ? 0 : 1);
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			shouldEnableScrolling = true;
+			OS.objc_msgSend(control.view.id, OS.sel_setShouldScrollClipView_, 0);
+		} else {
+			OS.objc_msgSend(control.view.id, OS.sel_setShouldScrollClipView_, 1);
+		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DND.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DND.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DNDEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DNDEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DNDListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DNDListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/Clipboard.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/Clipboard.java
index 981acde..2802356 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/Clipboard.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/Clipboard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -123,6 +123,54 @@ protected void checkWidget () {
 }
 
 /**
+ * If this clipboard is currently the owner of the data on the system clipboard,
+ * clear the contents.  If this clipboard is not the owner, then nothing is done.
+ * Note that there are clipboard assistant applications that take ownership of 
+ * data or make copies of data when it is placed on the clipboard.  In these 
+ * cases, it may not be possible to clear the clipboard.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void clearContents() {
+	clearContents(DND.CLIPBOARD);
+}
+
+/**
+ * If this clipboard is currently the owner of the data on the specified 
+ * clipboard, clear the contents.  If this clipboard is not the owner, then 
+ * nothing is done.
+ * 
+ * <p>Note that there are clipboard assistant applications that take ownership
+ * of data or make copies of data when it is placed on the clipboard.  In these 
+ * cases, it may not be possible to clear the clipboard.</p>
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param clipboards to be cleared
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public void clearContents(int clipboards) {
+	checkWidget();
+}
+
+/**
  * Disposes of the operating system resources associated with the clipboard. 
  * The data will still be available on the system clipboard after the dispose 
  * method is called.  
@@ -388,6 +436,34 @@ public TransferData[] getAvailableTypes() {
 }
 
 /**
+ * Returns an array of the data types currently available on the specified 
+ * clipboard. Use with Transfer.isSupportedType.
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param clipboards from which to get the data types
+ * @return array of data types currently available on the specified clipboard
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Transfer#isSupportedType
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public TransferData[] getAvailableTypes(int clipboards) {
+	checkWidget();
+	return new TransferData[0];
+}
+
+/**
  * Returns a platform specific list of the data types currently available on the 
  * system clipboard.
  * 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/Clipboard.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/Clipboard.java
index 87b1e17..8c2cb59 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/Clipboard.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/Clipboard.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -292,10 +292,24 @@ public Object getContents(Transfer transfer, int clipboards) {
 	for (int i = 0; i < typeIds.length; i++) {
 		if ((clipboards & DND.CLIPBOARD) != 0) {
 			selection_data = gtk_clipboard_wait_for_contents(GTKCLIPBOARD, typeIds[i]);
+			/*
+			* This call to gdk_threads_leave() is a temporary work around
+			* to avoid deadlocks when gdk_threads_init() is called by native
+			* code outside of SWT (i.e AWT, etc). It ensures that the current
+			* thread leaves the GTK lock acquired by the function above. 
+			*/
+			OS.gdk_threads_leave();
 		}
 		if (selection_data != 0) break;
 		if ((clipboards & DND.SELECTION_CLIPBOARD) != 0) {
 			selection_data = gtk_clipboard_wait_for_contents(GTKPRIMARYCLIPBOARD, typeIds[i]);
+			/*
+			* This call to gdk_threads_leave() is a temporary work around
+			* to avoid deadlocks when gdk_threads_init() is called by native
+			* code outside of SWT (i.e AWT, etc). It ensures that the current
+			* thread leaves the GTK lock acquired by the function above. 
+			*/
+			OS.gdk_threads_leave();
 		}
 	}
 	if (selection_data == 0) return null;
@@ -579,6 +593,13 @@ public String[] getAvailableTypeNames() {
 private  int[] getAvailablePrimaryTypes() {
 	int[] types = new int[0];
 	int /*long*/ selection_data = gtk_clipboard_wait_for_contents(GTKPRIMARYCLIPBOARD, TARGET);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if (selection_data != 0) {
 		try {
 			GtkSelectionData gtkSelectionData = new GtkSelectionData();
@@ -596,6 +617,13 @@ private  int[] getAvailablePrimaryTypes() {
 private int[] getAvailableClipboardTypes () {
 	int[] types = new int[0];
 	int /*long*/ selection_data  = gtk_clipboard_wait_for_contents(GTKCLIPBOARD, TARGET);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if (selection_data != 0) {
 		try {
 			GtkSelectionData gtkSelectionData = new GtkSelectionData();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java
index 1c53f72..c03768f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -88,8 +88,20 @@ int /*long*/ clearFunc(int /*long*/ clipboard,int /*long*/ user_data_or_owner){
 
 void dispose () {
 	if (display == null) return;
-	if (activeClipboard != null) OS.gtk_clipboard_clear(Clipboard.GTKCLIPBOARD);
-	if (activePrimaryClipboard != null) OS.gtk_clipboard_clear(Clipboard.GTKPRIMARYCLIPBOARD);
+	if (activeClipboard != null) {
+		if (OS.GTK_VERSION >= OS.VERSION(2, 6, 0)) {
+			OS.gtk_clipboard_store(Clipboard.GTKCLIPBOARD);
+		} else {
+			OS.gtk_clipboard_clear(Clipboard.GTKCLIPBOARD);
+		}
+	}
+	if (activePrimaryClipboard != null) {
+		if (OS.GTK_VERSION >= OS.VERSION(2, 6, 0)) {
+			OS.gtk_clipboard_store(Clipboard.GTKPRIMARYCLIPBOARD);
+		} else {
+			OS.gtk_clipboard_clear(Clipboard.GTKPRIMARYCLIPBOARD);
+		}
+	}
 	display = null;
 	if (getFunc != null ) getFunc.dispose();
 	getFunc = null;
@@ -178,6 +190,9 @@ boolean setData(Clipboard owner, Object[] data, Transfer[] dataTypes, int clipbo
 			if (!OS.gtk_clipboard_set_with_owner (Clipboard.GTKCLIPBOARD, pTargetsList, entries.length, getFuncProc, clearFuncProc, clipboardOwner)) {
 				return false;
 			}
+			if (OS.GTK_VERSION >= OS.VERSION(2, 6, 0)) {
+				OS.gtk_clipboard_set_can_store(Clipboard.GTKCLIPBOARD, 0, 0);
+			}
 			activeClipboard = owner;
 		}
 		if ((clipboards & DND.SELECTION_CLIPBOARD) != 0) {
@@ -188,6 +203,9 @@ boolean setData(Clipboard owner, Object[] data, Transfer[] dataTypes, int clipbo
 			if (!OS.gtk_clipboard_set_with_owner (Clipboard.GTKPRIMARYCLIPBOARD, pTargetsList, entries.length, getFuncProc, clearFuncProc, clipboardOwner)) {
 				return false;
 			}
+			if (OS.GTK_VERSION >= OS.VERSION(2, 6, 0)) {
+				OS.gtk_clipboard_set_can_store(Clipboard.GTKPRIMARYCLIPBOARD, 0, 0);
+			}
 			activePrimaryClipboard = owner;
 		}
 		return true;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ByteArrayTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ByteArrayTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/Clipboard.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/Clipboard.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/DragSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/DragSource.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/DropTarget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/DropTarget.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/FileTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/FileTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/RTFTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/RTFTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TextTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TextTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/Transfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/Transfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TransferData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TransferData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/ByteArrayTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/ByteArrayTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/Clipboard.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/Clipboard.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/DragSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/DragSource.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/DropTarget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/DropTarget.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/FileTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/FileTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/RTFTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/RTFTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TextTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TextTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/Transfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/Transfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TransferData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TransferData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ByteArrayTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ByteArrayTransfer.java
new file mode 100644
index 0000000..e46c883
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ByteArrayTransfer.java	
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+/**
+ * The class <code>ByteArrayTransfer</code> provides a platform specific
+ * mechanism for converting a java <code>byte[]</code> to a platform specific
+ * representation of the byte array and vice versa.
+ * 
+ * <p>
+ * <code>ByteArrayTransfer</code> is never used directly but is sub-classed by
+ * transfer agents that convert between data in a java format such as a
+ * <code>String</code> and a platform specific byte array.
+ * 
+ * <p>
+ * If the data you are converting <b>does not</b> map to a <code>byte[]</code>,
+ * you should sub-class <code>Transfer</code> directly and do your own mapping
+ * to a platform data type.
+ * </p>
+ * 
+ * <p>
+ * The following snippet shows a subclass of ByteArrayTransfer that transfers
+ * data defined by the class <code>MyType</code>.
+ * </p>
+ * 
+ * <pre>
+ * <code>
+ * public class MyType {
+ * public String fileName;
+ * public long fileLength;
+ * public long lastModified;
+ * }
+ * </code>
+ * </pre>
+ * 
+ * <pre>
+ * <code>
+ * public class MyTypeTransfer extends ByteArrayTransfer {
+ * 
+ * private static final String MYTYPENAME = "my_type_name";
+ * private static final int MYTYPEID = registerType(MYTYPENAME);
+ * private static MyTypeTransfer _instance = new MyTypeTransfer();
+ * 
+ * private MyTypeTransfer() {}
+ * 
+ * public static MyTypeTransfer getInstance () {
+ * 	return _instance;
+ * }
+ * public void javaToNative (Object object, TransferData transferData) {
+ * 	if (object == null || !(object instanceof MyType[])) return;
+ * 
+ * 	if (isSupportedType(transferData)) {
+ * 		MyType[] myTypes = (MyType[]) object;
+ * 		try {
+ * 			// write data to a byte array and then ask super to convert to pMedium
+ * 			ByteArrayOutputStream out = new ByteArrayOutputStream();
+ * 			DataOutputStream writeOut = new DataOutputStream(out);
+ * 			for (int i = 0, length = myTypes.length; i < length;  i++){
+ * 				byte[] buffer = myTypes[i].fileName.getBytes();
+ * 				writeOut.writeInt(buffer.length);
+ * 				writeOut.write(buffer);
+ * 				writeOut.writeLong(myTypes[i].fileLength);
+ * 				writeOut.writeLong(myTypes[i].lastModified);
+ * 			}
+ * 			byte[] buffer = out.toByteArray();
+ * 			writeOut.close();
+ * 
+ * 			super.javaToNative(buffer, transferData);
+ * 
+ * 		} catch (IOException e) {
+ * 		}
+ * 	}
+ * }
+ * public Object nativeToJava(TransferData transferData){
+ * 
+ * 	if (isSupportedType(transferData)) {
+ * 
+ * 		byte[] buffer = (byte[])super.nativeToJava(transferData);
+ * 		if (buffer == null) return null;
+ * 
+ * 		MyType[] myData = new MyType[0];
+ * 		try {
+ * 			ByteArrayInputStream in = new ByteArrayInputStream(buffer);
+ * 			DataInputStream readIn = new DataInputStream(in);
+ * 			while(readIn.available() > 20) {
+ * 				MyType datum = new MyType();
+ * 				int size = readIn.readInt();
+ * 				byte[] name = new byte[size];
+ * 				readIn.read(name);
+ * 				datum.fileName = new String(name);
+ * 				datum.fileLength = readIn.readLong();
+ * 				datum.lastModified = readIn.readLong();
+ * 				MyType[] newMyData = new MyType[myData.length + 1];
+ * 				System.arraycopy(myData, 0, newMyData, 0, myData.length);
+ * 				newMyData[myData.length] = datum;
+ * 				myData = newMyData;
+ * 			}
+ * 			readIn.close();
+ * 		} catch (IOException ex) {
+ * 			return null;
+ * 		}
+ * 		return myData;
+ * 	}
+ * 
+ * 	return null;
+ * }
+ * protected String[] getTypeNames(){
+ * 	return new String[]{MYTYPENAME};
+ * }
+ * protected int[] getTypeIds(){
+ * 	return new int[] {MYTYPEID};
+ * }
+ * }
+ * </code>
+ * </pre>
+ * 
+ * @see Transfer
+ */
+public abstract class ByteArrayTransfer extends Transfer {
+
+	@Override
+	public TransferData[] getSupportedTypes() {
+		int[] types = getTypeIds();
+		String[] names = getTypeNames();
+		TransferData[] data = new TransferData[types.length];
+		for (int i = 0; i < types.length; i++) {
+			data[i] = new TransferData();
+			data[i].type = types[i];
+			data[i].format = names[i];
+		}
+		return data;
+	}
+
+	@Override
+	public boolean isSupportedType(TransferData transferData) {
+		if (transferData == null) {
+			return false;
+		}
+		int[] types = getTypeIds();
+		for (int i = 0; i < types.length; i++) {
+			if (transferData.type == types[i]) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * This implementation of <code>javaToNative</code> converts a java
+	 * <code>byte[]</code> to a platform specific representation.
+	 * 
+	 * @param object
+	 *            a java <code>byte[]</code> containing the data to be converted
+	 * @param transferData
+	 *            an empty <code>TransferData</code> object that will be filled
+	 *            in on return with the platform specific format of the data
+	 * 
+	 * @see Transfer#nativeToJava
+	 */
+	@Override
+	protected void javaToNative(Object object, TransferData transferData) {
+		if (!checkByteArray(object) || !isSupportedType(transferData)) {
+			DND.error(DND.ERROR_INVALID_DATA);
+		}
+		transferData.data = object;
+	}
+
+	/**
+	 * This implementation of <code>nativeToJava</code> converts a platform
+	 * specific representation of a byte array to a java <code>byte[]</code>.
+	 * 
+	 * @param transferData
+	 *            the platform specific representation of the data to be
+	 *            converted
+	 * @return a java <code>byte[]</code> containing the converted data if the
+	 *         conversion was successful; otherwise null
+	 * 
+	 * @see Transfer#javaToNative
+	 */
+	@Override
+	protected Object nativeToJava(TransferData transferData) {
+		if (!checkByteArray(transferData.data) || !isSupportedType(transferData)) {
+			return null;
+		}
+		return transferData.data;
+	}
+
+	protected boolean checkByteArray(Object object) {
+		return object != null && object instanceof byte[] && ((byte[]) object).length > 0;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/Clipboard.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Clipboard.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/Clipboard.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Clipboard.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DragSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DragSource.java
new file mode 100644
index 0000000..fffc83c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DragSource.java	
@@ -0,0 +1,593 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import com.trolltech.qt.core.QByteArray;
+import com.trolltech.qt.core.QMimeData;
+import com.trolltech.qt.core.Qt.DropAction;
+import com.trolltech.qt.core.Qt.DropActions;
+import com.trolltech.qt.gui.QDrag;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * 
+ * <code>DragSource</code> defines the source object for a drag and drop
+ * transfer.
+ * 
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * <p>
+ * A drag source is the object which originates a drag and drop operation. For
+ * the specified widget, it defines the type of data that is available for
+ * dragging and the set of operations that can be performed on that data. The
+ * operations can be any bit-wise combination of DND.MOVE, DND.COPY or DND.LINK.
+ * The type of data that can be transferred is specified by subclasses of
+ * Transfer such as TextTransfer or FileTransfer. The type of data transferred
+ * can be a predefined system type or it can be a type defined by the
+ * application. For instructions on how to define your own transfer type, refer
+ * to <code>ByteArrayTransfer</code>.
+ * </p>
+ * 
+ * <p>
+ * You may have several DragSources in an application but you can only have one
+ * DragSource per Control. Data dragged from this DragSource can be dropped on a
+ * site within this application or it can be dropped on another application such
+ * as an external Text editor.
+ * </p>
+ * 
+ * <p>
+ * The application supplies the content of the data being transferred by
+ * implementing the <code>DragSourceListener</code> and associating it with the
+ * DragSource via DragSource#addDragListener.
+ * </p>
+ * 
+ * <p>
+ * When a successful move operation occurs, the application is required to take
+ * the appropriate action to remove the data from its display and remove any
+ * associated operating system resources or internal references. Typically in a
+ * move operation, the drop target makes a copy of the data and the drag source
+ * deletes the original. However, sometimes copying the data can take a long
+ * time (such as copying a large file). Therefore, on some platforms, the drop
+ * target may actually move the data in the operating system rather than make a
+ * copy. This is usually only done in file transfers. In this case, the drag
+ * source is informed in the DragEnd event that a DROP_TARGET_MOVE was
+ * performed. It is the responsibility of the drag source at this point to clean
+ * up its displayed information. No action needs to be taken on the operating
+ * system resources.
+ * </p>
+ * 
+ * <p>
+ * The following example shows a Label widget that allows text to be dragged
+ * from it.
+ * </p>
+ * 
+ * <code><pre>
+ * 	// Enable a label as a Drag Source
+ * 	Label label = new Label(shell, SWT.NONE);
+ * 	// This example will allow text to be dragged
+ * 	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
+ * 	// This example will allow the text to be copied or moved to the drop target
+ * 	int operations = DND.DROP_MOVE | DND.DROP_COPY;
+ * 
+ * 	DragSource source = new DragSource(label, operations);
+ * 	source.setTransfer(types);
+ * 	source.addDragListener(new DragSourceListener() {
+ * 		public void dragStart(DragSourceEvent e) {
+ * 			// Only start the drag if there is actually text in the
+ * 			// label - this text will be what is dropped on the target.
+ * 			if (label.getText().length() == 0) {
+ * 				event.doit = false;
+ * 			}
+ * 		};
+ * 		public void dragSetData(DragSourceEvent event) {
+ * 			// A drop has been performed, so provide the data of the
+ * 			// requested type.
+ * 			// (Checking the type of the requested data is only
+ * 			// necessary if the drag source supports more than
+ * 			// one data type but is shown here as an example).
+ * 			if (TextTransfer.getInstance().isSupportedType(event.dataType)){
+ * 				event.data = label.getText();
+ * 			}
+ * 		}
+ * 		public void dragFinished(DragSourceEvent event) {
+ * 			// A Move operation has been performed so remove the data
+ * 			// from the source
+ * 			if (event.detail == DND.DROP_MOVE)
+ * 				label.setText("");
+ * 		}
+ * 	});
+ * </pre></code>
+ * 
+ * 
+ * <dl>
+ * <dt><b>Styles</b></dt>
+ * <dd>DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK</dd>
+ * <dt><b>Events</b></dt>
+ * <dd>DND.DragStart, DND.DragSetData, DND.DragEnd</dd>
+ * </dl>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DragSource extends Widget {
+
+	// info for registering as a drag source
+	private Control control;
+	private Listener controlListener;
+	private Transfer[] transferAgents = new Transfer[0];
+	private DragSourceEffect dragEffect;
+	private QDrag drag;
+
+	private static final String DEFAULT_DRAG_SOURCE_EFFECT = "DEFAULT_DRAG_SOURCE_EFFECT"; //$NON-NLS-1$
+
+	/**
+	 * Creates a new <code>DragSource</code> to handle dragging from the
+	 * specified <code>Control</code>. Creating an instance of a DragSource may
+	 * cause system resources to be allocated depending on the platform. It is
+	 * therefore mandatory that the DragSource instance be disposed when no
+	 * longer required.
+	 * 
+	 * @param control
+	 *            the <code>Control</code> that the user clicks on to initiate
+	 *            the drag
+	 * @param style
+	 *            the bitwise OR'ing of allowed operations; this may be a
+	 *            combination of any of DND.DROP_NONE, DND.DROP_COPY,
+	 *            DND.DROP_MOVE, DND.DROP_LINK
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_CANNOT_INIT_DRAG - unable to initiate drag
+	 *                source; this will occur if more than one drag source is
+	 *                created for a control or if the operating system will not
+	 *                allow the creation of the drag source</li>
+	 *                </ul>
+	 * 
+	 *                <p>
+	 *                NOTE: ERROR_CANNOT_INIT_DRAG should be an SWTException,
+	 *                since it is a recoverable error, but can not be changed
+	 *                due to backward compatibility.
+	 *                </p>
+	 * 
+	 * @see Widget#dispose
+	 * @see DragSource#checkSubclass
+	 * @see DND#DROP_NONE
+	 * @see DND#DROP_COPY
+	 * @see DND#DROP_MOVE
+	 * @see DND#DROP_LINK
+	 */
+	public DragSource(Control control, int style) {
+		super(control, checkStyle(style));
+		this.control = control;
+		if (control.getData(DND.DRAG_SOURCE_KEY) != null) {
+			DND.error(DND.ERROR_CANNOT_INIT_DRAG);
+		}
+		control.setDragEnabled(true);
+		control.setData(DND.DRAG_SOURCE_KEY, this);
+
+		controlListener = new Listener() {
+			public void handleEvent(Event event) {
+				if (event.type == SWT.DragDetect) {
+					if (!DragSource.this.isDisposed()) {
+						DragSource.this.drag(event);
+						return;
+					}
+				}
+				if (event.type == SWT.Dispose) {
+					if (!DragSource.this.isDisposed()) {
+						DragSource.this.dispose();
+					}
+				}
+			}
+		};
+		control.addListener(SWT.Dispose, controlListener);
+		control.addListener(SWT.DragDetect, controlListener);
+
+		this.addListener(SWT.Dispose, new Listener() {
+			public void handleEvent(Event e) {
+				onDispose();
+			}
+		});
+
+		Object effect = control.getData(DEFAULT_DRAG_SOURCE_EFFECT);
+		if (effect instanceof DragSourceEffect) {
+			dragEffect = (DragSourceEffect) effect;
+		} else if (control instanceof Tree) {
+			dragEffect = new TreeDragSourceEffect((Tree) control);
+		} else if (control instanceof Table) {
+			dragEffect = new TableDragSourceEffect((Table) control);
+		}
+	}
+
+	private void drag(Event dragEvent) {
+		if (transferAgents == null || transferAgents.length == 0) {
+			return;
+		}
+		System.out.println("dragging ongoing");
+
+		try {
+			if (drag == null) {
+				DNDEvent event = new DNDEvent();
+				event.widget = this;
+				event.x = dragEvent.x;
+				event.y = dragEvent.y;
+				event.time = dragEvent.time;
+				event.doit = true;
+				notifyListeners(DND.DragStart, event);
+
+				if (!event.doit) {
+					System.out.println("stop after DragStart event");
+					return;
+				}
+
+				QMimeData mimeData = createMimeData();
+				if (mimeData == null) {
+					System.out.println("stop after DragSetData event");
+					return;
+				}
+
+				System.out.println("send mime: " + mimeData);
+
+				drag = new QDrag(control.getQWidget());
+
+				drag.setMimeData(mimeData);
+
+				DropActions actions = convertOps2Actions(getStyle());
+				DropAction dropAction = drag.exec(actions, defaultAction(actions));
+
+				int operation = convertAction(dropAction);
+				DNDEvent endEvent = new DNDEvent();
+				endEvent.widget = this;
+				endEvent.doit = operation != 0;
+				endEvent.detail = operation;
+				notifyListeners(DND.DragEnd, endEvent);
+
+				control.dragEnd();
+				System.out.println(dropAction);
+			}
+		} finally {
+			drag = null;
+		}
+	}
+
+	/**
+	 * @param actions
+	 * @return
+	 */
+	private DropAction defaultAction(DropActions actions) {
+		if (actions.isSet(DropAction.CopyAction)) {
+			return DropAction.CopyAction;
+		} else if (actions.isSet(DropAction.MoveAction)) {
+			return DropAction.MoveAction;
+		} else if (actions.isSet(DropAction.LinkAction)) {
+			return DropAction.LinkAction;
+		} else if (actions.isSet(DropAction.TargetMoveAction)) {
+			return DropAction.TargetMoveAction;
+		}
+		return DropAction.IgnoreAction;
+	}
+
+	/**
+	 * @param dragEvent
+	 * @return
+	 */
+	private QMimeData createMimeData() {
+		QMimeData mimeData = null;
+		for (Transfer transfer : transferAgents) {
+			if (transfer == null) {
+				continue;
+			}
+			for (TransferData transferData : transfer.getSupportedTypes()) {
+				DNDEvent setDataEvent = new DNDEvent();
+				setDataEvent.widget = this;
+				setDataEvent.dataType = transferData;
+				notifyListeners(DND.DragSetData, setDataEvent);
+				if (setDataEvent.doit && setDataEvent.data != null) {
+					transfer.javaToNative(setDataEvent.data, transferData);
+					if (mimeData == null) {
+						mimeData = new QMimeData();
+					}
+					mimeData.setData(transferData.format, new QByteArray((byte[]) transferData.data));
+				}
+			}
+		}
+		return mimeData;
+	}
+
+	static int convertAction(DropAction dropAction) {
+		if (dropAction == DropAction.CopyAction) {
+			return DND.DROP_COPY;
+		}
+		if (dropAction == DropAction.MoveAction) {
+			return DND.DROP_MOVE;
+		}
+		if (dropAction == DropAction.LinkAction) {
+			return DND.DROP_LINK;
+		}
+		if (dropAction == DropAction.TargetMoveAction) {
+			return DND.DROP_TARGET_MOVE;
+		}
+		return DND.DROP_NONE;
+	}
+
+	static int convertActions(DropActions dropActions) {
+		int actions = DND.DROP_NONE;
+		if (dropActions.isSet(DropAction.CopyAction)) {
+			actions |= DND.DROP_COPY;
+		}
+		if (dropActions.isSet(DropAction.MoveAction)) {
+			actions |= DND.DROP_MOVE;
+		}
+		if (dropActions.isSet(DropAction.LinkAction)) {
+			actions |= DND.DROP_LINK;
+		}
+		if (dropActions.isSet(DropAction.TargetMoveAction)) {
+			actions |= DND.DROP_TARGET_MOVE;
+		}
+		return actions;
+	}
+
+	static DropActions convertOps2Actions(int operations) {
+		int actions = 0;
+		if ((operations & DND.DROP_COPY) != 0) {
+			actions |= DropAction.CopyAction.value();
+		}
+		if ((operations & DND.DROP_MOVE) != 0) {
+			actions |= DropAction.MoveAction.value();
+		}
+		if ((operations & DND.DROP_LINK) != 0) {
+			actions |= DropAction.LinkAction.value();
+		}
+		if ((operations & DND.DROP_TARGET_MOVE) != 0) {
+			actions |= DropAction.TargetMoveAction.value();
+		}
+		return new DropActions(actions);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when a drag and drop operation is in progress, by sending it one of the
+	 * messages defined in the <code>DragSourceListener</code> interface.
+	 * 
+	 * <p>
+	 * <ul>
+	 * <li><code>dragStart</code> is called when the user has begun the actions
+	 * required to drag the widget. This event gives the application the chance
+	 * to decide if a drag should be started.
+	 * <li><code>dragSetData</code> is called when the data is required from the
+	 * drag source.
+	 * <li><code>dragFinished</code> is called when the drop has successfully
+	 * completed (mouse up over a valid target) or has been terminated (such as
+	 * hitting the ESC key). Perform cleanup such as removing data from the
+	 * source side on a successful move operation.
+	 * </ul>
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DragSourceListener
+	 * @see #getDragListeners
+	 * @see #removeDragListener
+	 * @see DragSourceEvent
+	 */
+	public void addDragListener(DragSourceListener listener) {
+		if (listener == null) {
+			DND.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		DNDListener typedListener = new DNDListener(listener);
+		typedListener.dndWidget = this;
+		addListener(DND.DragStart, typedListener);
+		addListener(DND.DragSetData, typedListener);
+		addListener(DND.DragEnd, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		if (style == SWT.NONE) {
+			return DND.DROP_MOVE;
+		}
+		return style;
+	}
+
+	@Override
+	protected void checkSubclass() {
+		String name = getClass().getName();
+		String validName = DragSource.class.getName();
+		if (!validName.equals(name)) {
+			DND.error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	/**
+	 * Returns the Control which is registered for this DragSource. This is the
+	 * control that the user clicks in to initiate dragging.
+	 * 
+	 * @return the Control which is registered for this DragSource
+	 */
+	public Control getControl() {
+		return control;
+	}
+
+	/**
+	 * Returns an array of listeners who will be notified when a drag and drop
+	 * operation is in progress, by sending it one of the messages defined in
+	 * the <code>DragSourceListener</code> interface.
+	 * 
+	 * @return the listeners who will be notified when a drag and drop operation
+	 *         is in progress
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DragSourceListener
+	 * @see #addDragListener
+	 * @see #removeDragListener
+	 * @see DragSourceEvent
+	 * 
+	 * @since 3.4
+	 */
+	public DragSourceListener[] getDragListeners() {
+		Listener[] listeners = getListeners(DND.DragStart);
+		int length = listeners.length;
+		DragSourceListener[] dragListeners = new DragSourceListener[length];
+		int count = 0;
+		for (int i = 0; i < length; i++) {
+			Listener listener = listeners[i];
+			if (listener instanceof DNDListener) {
+				dragListeners[count] = (DragSourceListener) ((DNDListener) listener).getEventListener();
+				count++;
+			}
+		}
+		if (count == length) {
+			return dragListeners;
+		}
+		DragSourceListener[] result = new DragSourceListener[count];
+		System.arraycopy(dragListeners, 0, result, 0, count);
+		return result;
+	}
+
+	/**
+	 * Returns the drag effect that is registered for this DragSource. This drag
+	 * effect will be used during a drag and drop operation.
+	 * 
+	 * @return the drag effect that is registered for this DragSource
+	 * 
+	 * @since 3.3
+	 */
+	public DragSourceEffect getDragSourceEffect() {
+		return dragEffect;
+	}
+
+	/**
+	 * Returns the list of data types that can be transferred by this
+	 * DragSource.
+	 * 
+	 * @return the list of data types that can be transferred by this DragSource
+	 */
+	public Transfer[] getTransfer() {
+		return transferAgents;
+	}
+
+	private void onDispose() {
+		if (control == null) {
+			return;
+		}
+		if (controlListener != null) {
+			control.removeListener(SWT.Dispose, controlListener);
+			control.removeListener(SWT.DragDetect, controlListener);
+		}
+		controlListener = null;
+		control.setData(DND.DRAG_SOURCE_KEY, null);
+		control = null;
+		transferAgents = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when a drag and drop operation is in progress.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DragSourceListener
+	 * @see #addDragListener
+	 * @see #getDragListeners
+	 */
+	public void removeDragListener(DragSourceListener listener) {
+		if (listener == null) {
+			DND.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		removeListener(DND.DragStart, listener);
+		removeListener(DND.DragSetData, listener);
+		removeListener(DND.DragEnd, listener);
+	}
+
+	/**
+	 * Specifies the drag effect for this DragSource. This drag effect will be
+	 * used during a drag and drop operation.
+	 * 
+	 * @param effect
+	 *            the drag effect that is registered for this DragSource
+	 * 
+	 * @since 3.3
+	 */
+	public void setDragSourceEffect(DragSourceEffect effect) {
+		dragEffect = effect;
+	}
+
+	/**
+	 * Specifies the list of data types that can be transferred by this
+	 * DragSource. The application must be able to provide data to match each of
+	 * these types when a successful drop has occurred.
+	 * 
+	 * @param transferAgents
+	 *            a list of Transfer objects which define the types of data that
+	 *            can be dragged from this source
+	 */
+	public void setTransfer(Transfer[] transferAgents) {
+		this.transferAgents = transferAgents;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DropTarget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DropTarget.java
new file mode 100644
index 0000000..4bf4db6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/DropTarget.java	
@@ -0,0 +1,638 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.trolltech.qt.core.QByteArray;
+import com.trolltech.qt.core.QMimeData;
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.Qt.DropAction;
+import com.trolltech.qt.core.Qt.DropActions;
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDragLeaveEvent;
+import com.trolltech.qt.gui.QDragMoveEvent;
+import com.trolltech.qt.gui.QDropEvent;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.internal.qt.DragNDropListener;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * 
+ * Class <code>DropTarget</code> defines the target object for a drag and drop
+ * transfer.
+ * 
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * <p>
+ * This class identifies the <code>Control</code> over which the user must
+ * position the cursor in order to drop the data being transferred. It also
+ * specifies what data types can be dropped on this control and what operations
+ * can be performed. You may have several DropTragets in an application but
+ * there can only be a one to one mapping between a <code>Control</code> and a
+ * <code>DropTarget</code>. The DropTarget can receive data from within the same
+ * application or from other applications (such as text dragged from a text
+ * editor like Word).
+ * </p>
+ * 
+ * <code><pre>
+ * 	int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
+ * 	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
+ * 	DropTarget target = new DropTarget(label, operations);
+ * 	target.setTransfer(types);
+ * </code></pre>
+ * 
+ * <p>
+ * The application is notified of data being dragged over this control and of
+ * when a drop occurs by implementing the interface
+ * <code>DropTargetListener</code> which uses the class
+ * <code>DropTargetEvent</code>. The application can modify the type of drag
+ * being performed on this Control at any stage of the drag by modifying the
+ * <code>event.detail</code> field or the <code>event.currentDataType</code>
+ * field. When the data is dropped, it is the responsibility of the application
+ * to copy this data for its own purposes.
+ * 
+ * <code><pre>
+ * 	target.addDropListener (new DropTargetListener() {
+ * 		public void dragEnter(DropTargetEvent event) {};
+ * 		public void dragOver(DropTargetEvent event) {};
+ * 		public void dragLeave(DropTargetEvent event) {};
+ * 		public void dragOperationChanged(DropTargetEvent event) {};
+ * 		public void dropAccept(DropTargetEvent event) {}
+ * 		public void drop(DropTargetEvent event) {
+ * 			// A drop has occurred, copy over the data
+ * 			if (event.data == null) { // no data to copy, indicate failure in event.detail
+ * 				event.detail = DND.DROP_NONE;
+ * 				return;
+ * 			}
+ * 			label.setText ((String) event.data); // data copied to label text
+ * 		}
+ * 	});
+ * </pre></code>
+ * 
+ * <dl>
+ * <dt><b>Styles</b></dt>
+ * <dd>DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK</dd>
+ * <dt><b>Events</b></dt>
+ * <dd>DND.DragEnter, DND.DragLeave, DND.DragOver, DND.DragOperationChanged,
+ * DND.DropAccept, DND.Drop</dd>
+ * </dl>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DropTarget extends Widget {
+
+	// info for registering as a droptarget
+	Control control;
+	Listener controlListener;
+	Transfer[] transferAgents = new Transfer[0];
+	DropTargetEffect dropEffect;
+	private DragNDropListener dndListener;
+
+	static final String DEFAULT_DROP_TARGET_EFFECT = "DEFAULT_DROP_TARGET_EFFECT"; //$NON-NLS-1$
+
+	/**
+	 * Creates a new <code>DropTarget</code> to allow data to be dropped on the
+	 * specified <code>Control</code>. Creating an instance of a DropTarget may
+	 * cause system resources to be allocated depending on the platform. It is
+	 * therefore mandatory that the DropTarget instance be disposed when no
+	 * longer required.
+	 * 
+	 * @param control
+	 *            the <code>Control</code> over which the user positions the
+	 *            cursor to drop the data
+	 * @param style
+	 *            the bitwise OR'ing of allowed operations; this may be a
+	 *            combination of any of DND.DROP_NONE, DND.DROP_COPY,
+	 *            DND.DROP_MOVE, DND.DROP_LINK
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_CANNOT_INIT_DROP - unable to initiate drop
+	 *                target; this will occur if more than one drop target is
+	 *                created for a control or if the operating system will not
+	 *                allow the creation of the drop target</li>
+	 *                </ul>
+	 * 
+	 *                <p>
+	 *                NOTE: ERROR_CANNOT_INIT_DROP should be an SWTException,
+	 *                since it is a recoverable error, but can not be changed
+	 *                due to backward compatibility.
+	 *                </p>
+	 * 
+	 * @see Widget#dispose
+	 * @see DropTarget#checkSubclass
+	 * @see DND#DROP_NONE
+	 * @see DND#DROP_COPY
+	 * @see DND#DROP_MOVE
+	 * @see DND#DROP_LINK
+	 */
+	public DropTarget(Control control, int style) {
+		super(control, checkStyle(style));
+		this.control = control;
+		if (control.getData(DND.DROP_TARGET_KEY) != null) {
+			DND.error(DND.ERROR_CANNOT_INIT_DROP);
+		}
+		control.setData(DND.DROP_TARGET_KEY, this);
+		control.setAcceptDrops(true);
+
+		controlListener = new Listener() {
+			public void handleEvent(Event event) {
+				if (!DropTarget.this.isDisposed()) {
+					DropTarget.this.dispose();
+				}
+			}
+		};
+		control.addListener(SWT.Dispose, controlListener);
+
+		this.addListener(SWT.Dispose, new Listener() {
+			public void handleEvent(Event event) {
+				onDispose();
+			}
+		});
+
+		this.dndListener = new QDNDListener();
+		control.setDragNDropListener(dndListener);
+
+		Object effect = control.getData(DEFAULT_DROP_TARGET_EFFECT);
+		if (effect instanceof DropTargetEffect) {
+			dropEffect = (DropTargetEffect) effect;
+		} else if (control instanceof Table) {
+			dropEffect = new TableDropTargetEffect((Table) control);
+		} else if (control instanceof Tree) {
+			dropEffect = new TreeDropTargetEffect((Tree) control);
+		}
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when a drag and drop operation is in progress, by sending it one of the
+	 * messages defined in the <code>DropTargetListener</code> interface.
+	 * 
+	 * <p>
+	 * <ul>
+	 * <li><code>dragEnter</code> is called when the cursor has entered the drop
+	 * target boundaries
+	 * <li><code>dragLeave</code> is called when the cursor has left the drop
+	 * target boundaries and just before the drop occurs or is cancelled.
+	 * <li><code>dragOperationChanged</code> is called when the operation being
+	 * performed has changed (usually due to the user changing the selected
+	 * modifier key(s) while dragging)
+	 * <li><code>dragOver</code> is called when the cursor is moving over the
+	 * drop target
+	 * <li><code>dropAccept</code> is called just before the drop is performed.
+	 * The drop target is given the chance to change the nature of the drop or
+	 * veto the drop by setting the <code>event.detail</code> field
+	 * <li><code>drop</code> is called when the data is being dropped
+	 * </ul>
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DropTargetListener
+	 * @see #getDropListeners
+	 * @see #removeDropListener
+	 * @see DropTargetEvent
+	 */
+	public void addDropListener(DropTargetListener listener) {
+		if (listener == null) {
+			DND.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		DNDListener typedListener = new DNDListener(listener);
+		typedListener.dndWidget = this;
+		addListener(DND.DragEnter, typedListener);
+		addListener(DND.DragLeave, typedListener);
+		addListener(DND.DragOver, typedListener);
+		addListener(DND.DragOperationChanged, typedListener);
+		addListener(DND.Drop, typedListener);
+		addListener(DND.DropAccept, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		if (style == SWT.NONE) {
+			return DND.DROP_MOVE;
+		}
+		return style;
+	}
+
+	@Override
+	protected void checkSubclass() {
+		String name = getClass().getName();
+		String validName = DropTarget.class.getName();
+		if (!validName.equals(name)) {
+			DND.error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	/**
+	 * Returns the Control which is registered for this DropTarget. This is the
+	 * control over which the user positions the cursor to drop the data.
+	 * 
+	 * @return the Control which is registered for this DropTarget
+	 */
+	public Control getControl() {
+		return control;
+	}
+
+	/**
+	 * Returns an array of listeners who will be notified when a drag and drop
+	 * operation is in progress, by sending it one of the messages defined in
+	 * the <code>DropTargetListener</code> interface.
+	 * 
+	 * @return the listeners who will be notified when a drag and drop operation
+	 *         is in progress
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DropTargetListener
+	 * @see #addDropListener
+	 * @see #removeDropListener
+	 * @see DropTargetEvent
+	 * 
+	 * @since 3.4
+	 */
+	public DropTargetListener[] getDropListeners() {
+		Listener[] listeners = getListeners(DND.DragEnter);
+		int length = listeners.length;
+		DropTargetListener[] dropListeners = new DropTargetListener[length];
+		int count = 0;
+		for (int i = 0; i < length; i++) {
+			Listener listener = listeners[i];
+			if (listener instanceof DropTargetListener) {
+				dropListeners[count] = (DropTargetListener) ((DNDListener) listener).getEventListener();
+				count++;
+			}
+		}
+		if (count == length) {
+			return dropListeners;
+		}
+		DropTargetListener[] result = new DropTargetListener[count];
+		System.arraycopy(dropListeners, 0, result, 0, count);
+		return result;
+	}
+
+	/**
+	 * Returns the drop effect for this DropTarget. This drop effect will be
+	 * used during a drag and drop to display the drag under effect on the
+	 * target widget.
+	 * 
+	 * @return the drop effect that is registered for this DropTarget
+	 * 
+	 * @since 3.3
+	 */
+	public DropTargetEffect getDropTargetEffect() {
+		return dropEffect;
+	}
+
+	/**
+	 * Specifies the drop effect for this DropTarget. This drop effect will be
+	 * used during a drag and drop to display the drag under effect on the
+	 * target widget.
+	 * 
+	 * @param effect
+	 *            the drop effect that is registered for this DropTarget
+	 * 
+	 * @since 3.3
+	 */
+	public void setDropTargetEffect(DropTargetEffect effect) {
+		dropEffect = effect;
+	}
+
+	/**
+	 * Returns a list of the data types that can be transferred to this
+	 * DropTarget.
+	 * 
+	 * @return a list of the data types that can be transferred to this
+	 *         DropTarget
+	 */
+	public Transfer[] getTransfer() {
+		return transferAgents;
+	}
+
+	void onDispose() {
+		if (control == null) {
+			return;
+		}
+		if (controlListener != null) {
+			control.removeListener(SWT.Dispose, controlListener);
+		}
+		controlListener = null;
+		control.unsetDragNDropListener(dndListener);
+		dndListener = null;
+		control.setData(DND.DROP_TARGET_KEY, null);
+		control.setAcceptDrops(false);
+		transferAgents = null;
+		control = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when a drag and drop operation is in progress.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DropTargetListener
+	 * @see #addDropListener
+	 * @see #getDropListeners
+	 */
+	public void removeDropListener(DropTargetListener listener) {
+		if (listener == null) {
+			DND.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		removeListener(DND.DragEnter, listener);
+		removeListener(DND.DragLeave, listener);
+		removeListener(DND.DragOver, listener);
+		removeListener(DND.DragOperationChanged, listener);
+		removeListener(DND.Drop, listener);
+		removeListener(DND.DropAccept, listener);
+	}
+
+	/**
+	 * Specifies the data types that can be transferred to this DropTarget. If
+	 * data is being dragged that does not match one of these types, the drop
+	 * target will be notified of the drag and drop operation but the
+	 * currentDataType will be null and the operation will be DND.NONE.
+	 * 
+	 * @param transferAgents
+	 *            a list of Transfer objects which define the types of data that
+	 *            can be dropped on this target
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if transferAgents is null</li>
+	 *                </ul>
+	 */
+	public void setTransfer(Transfer[] transferAgents) {
+		if (transferAgents == null) {
+			DND.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		this.transferAgents = transferAgents;
+	}
+
+	private final class QDNDListener implements DragNDropListener {
+		TransferData selectedDataType;
+		int selectedOperation = -1;
+
+		public void dragEnter(QDragEnterEvent qEvent) {
+			System.out.println("DNDListener.dragEnter");
+
+			DNDEvent event = new DNDEvent();
+			if (!initDNDEvent(event, qEvent.source(), qEvent.mimeData(), qEvent.pos(), qEvent.proposedAction(), qEvent
+					.possibleActions())) {
+				return;
+			}
+
+			int operation = event.detail;
+			int allowedOperations = event.operations;
+			System.out.println("proposed op: " + operation + " from: " + event.operations);
+			selectedDataType = null;
+			selectedOperation = DND.DROP_NONE;
+			notifyListeners(DND.DragEnter, event);
+
+			if (!handleEventResponse(qEvent, event, operation, allowedOperations)) {
+				qEvent.acceptProposedAction();
+			}
+		}
+
+		public void dragMove(QDragMoveEvent qEvent) {
+			System.out.println("DNDListener.dragMove");
+
+			DNDEvent event = new DNDEvent();
+			if (!initDNDEvent(event, qEvent.source(), qEvent.mimeData(), qEvent.pos(), qEvent.proposedAction(), qEvent
+					.possibleActions())) {
+				return;
+			}
+			int operation = event.detail;
+			int allowedOperations = event.operations;
+
+			System.out.println("proposed op: " + operation + " from: " + event.operations);
+
+			selectedDataType = null;
+			if (selectedOperation != operation) {
+				System.out.println("op changed");
+				notifyListeners(DND.DragOperationChanged, event);
+			} else {
+				notifyListeners(DND.DragOver, event);
+			}
+			handleEventResponse(qEvent, event, operation, allowedOperations);
+		}
+
+		public void drop(QDropEvent event) {
+			System.out.println("DNDListener.drop. selected type: " + selectedDataType + " op: " + selectedOperation);
+
+			DNDEvent swtEvent = new DNDEvent();
+			if (!initDNDEvent(swtEvent, event.source(), event.mimeData(), event.pos(), event.proposedAction(), event
+					.possibleActions())) {
+				return;
+			}
+
+			swtEvent.dataType = selectedDataType;
+			swtEvent.detail = selectedOperation;
+
+			Transfer transfer = getTransfer(selectedDataType.format);
+			QByteArray ba = event.mimeData().data(selectedDataType.format);
+			if (ba == null || transfer == null) {
+				System.out.println("no data or transfer for format: " + selectedDataType.format);
+				return;
+			}
+			selectedDataType.data = ba.toByteArray();
+			swtEvent.data = transfer.nativeToJava(selectedDataType);
+
+			notifyListeners(DND.Drop, swtEvent);
+			handleEventResponse(event, swtEvent, selectedOperation, selectedOperation);
+		}
+
+		public void dragLeave(QDragLeaveEvent event) {
+			System.out.println("DNDListener.dragLeave");
+			DNDEvent swtEvent = new DNDEvent();
+
+			swtEvent.widget = DropTarget.this;
+			swtEvent.detail = DND.DROP_NONE;
+			notifyListeners(DND.DragLeave, swtEvent);
+			selectedDataType = null;
+			selectedOperation = -1;
+		}
+
+		private boolean initDNDEvent(DNDEvent event, QWidget source, QMimeData mimeData, QPoint globalPos,
+				DropAction proposedAction, DropActions possibleActions) {
+
+			event.operations = DragSource.convertActions(possibleActions) & getStyle();
+			if (event.operations == DND.DROP_NONE) {
+				return false;
+			}
+
+			TransferData[] dataTypes = getDataTypes(mimeData);
+			if (dataTypes.length == 0) {
+				System.out.println("no supported mime types found");
+				return false;
+			}
+
+			QPoint pos = source.mapToGlobal(globalPos);
+			event.widget = DropTarget.this;
+			event.x = pos.x();
+			event.y = pos.y();
+			event.time = DropTarget.this.control.getDisplay().getLastEventTime();
+			event.dataType = dataTypes[0];
+			event.dataTypes = dataTypes;
+			event.detail = DragSource.convertAction(proposedAction);
+			event.feedback = DND.FEEDBACK_SELECT;
+			event.doit = true;
+			if (dropEffect != null) {
+				event.item = dropEffect.getItem(event.x, event.y);
+			}
+
+			return true;
+		}
+
+		private boolean handleEventResponse(QDropEvent qEvent, DNDEvent event, int operation, int allowedOperations) {
+			selectedDataType = event.dataType;
+			System.out.println("selected type: " + selectedDataType);
+			System.out.println("op from event : " + event.detail);
+			if (event.detail == DND.DROP_DEFAULT) {
+				event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
+			}
+
+			if (selectedDataType != null && (allowedOperations & event.detail) != 0) {
+				selectedOperation = event.detail;
+			}
+			System.out.println("selected op  : " + selectedOperation);
+
+			if (selectedOperation == operation) {
+				qEvent.acceptProposedAction();
+			} else {
+				if (selectedOperation != DND.DROP_NONE) {
+					DropAction action = convertOperation(selectedOperation);
+					System.out.println("changed op: " + action);
+					qEvent.setDropAction(action);
+					qEvent.accept();
+				} else {
+					return false;
+				}
+			}
+			return true;
+		}
+
+		private Transfer getTransfer(String format) {
+			for (Transfer transfer : transferAgents) {
+				if (transfer == null) {
+					continue;
+				}
+				for (String typeName : transfer.getTypeNames()) {
+					if (format.equals(typeName)) {
+						return transfer;
+					}
+				}
+			}
+			return null;
+		}
+
+		private TransferData[] getDataTypes(QMimeData mimeData) {
+			System.out.println("got mimeData " + mimeData.formats());
+
+			List<TransferData> dataTypes = new ArrayList<TransferData>();
+			for (Transfer transfer : transferAgents) {
+				if (transfer == null) {
+					continue;
+				}
+				String[] typeNames = transfer.getTypeNames();
+				int[] typeIds = transfer.getTypeIds();
+				for (int i = 0; i < typeNames.length; i++) {
+					String typeName = typeNames[i];
+					if (mimeData.hasFormat(typeName)) {
+						TransferData data = new TransferData();
+						data.type = typeIds[i];
+						data.format = typeName;
+						dataTypes.add(data);
+					}
+				}
+			}
+			//System.out.println("mime -> transfer types: " + dataTypes);
+			return dataTypes.toArray(new TransferData[dataTypes.size()]);
+		}
+
+		private DropAction convertOperation(int operation) {
+			if (operation == DND.DROP_COPY) {
+				return DropAction.CopyAction;
+			}
+			if (operation == DND.DROP_MOVE) {
+				return DropAction.MoveAction;
+			}
+			if (operation == DND.DROP_LINK) {
+				return DropAction.LinkAction;
+			}
+			if (operation == DND.DROP_TARGET_MOVE) {
+				return DropAction.TargetMoveAction;
+			}
+			return DropAction.IgnoreAction;
+		}
+
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/FileTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/FileTransfer.java
new file mode 100644
index 0000000..21e615d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/FileTransfer.java	
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+/**
+ * The class <code>FileTransfer</code> provides a platform specific mechanism
+ * for converting a list of files represented as a java <code>String[]</code> to
+ * a platform specific representation of the data and vice versa. Each
+ * <code>String</code> in the array contains the absolute path for a single file
+ * or directory.
+ * 
+ * <p>
+ * An example of a java <code>String[]</code> containing a list of files is
+ * shown below:
+ * </p>
+ * 
+ * <code><pre>
+ *     File file1 = new File("C:\temp\file1");
+ *     File file2 = new File("C:\temp\file2");
+ *     String[] fileData = new String[2];
+ *     fileData[0] = file1.getAbsolutePath();
+ *     fileData[1] = file2.getAbsolutePath();
+ * </code></pre>
+ * 
+ * @see Transfer
+ */
+public class FileTransfer extends ByteArrayTransfer {
+	/**
+	 *
+	 */
+	private static final String SEPARATOR = "\n";
+	private static final String URI_LIST = "text/uri-list"; //$NON-NLS-1$
+	private static final int URI_LIST_ID = registerType(URI_LIST);
+
+	private FileTransfer() {
+	}
+
+	private static FileTransfer _instance = new FileTransfer();
+
+	/**
+	 * Returns the singleton instance of the FileTransfer class.
+	 * 
+	 * @return the singleton instance of the FileTransfer class
+	 */
+	public static FileTransfer getInstance() {
+		return _instance;
+	}
+
+	/**
+	 * This implementation of <code>javaToNative</code> converts a list of file
+	 * names represented by a java <code>String[]</code> to a platform specific
+	 * representation. Each <code>String</code> in the array contains the
+	 * absolute path for a single file or directory.
+	 * 
+	 * @param object
+	 *            a java <code>String[]</code> containing the file names to be
+	 *            converted
+	 * @param transferData
+	 *            an empty <code>TransferData</code> object that will be filled
+	 *            in on return with the platform specific format of the data
+	 * 
+	 * @see Transfer#nativeToJava
+	 */
+	@Override
+	public void javaToNative(Object object, TransferData transferData) {
+		if (!checkStringArray(object) || !isSupportedType(transferData)) {
+			DND.error(DND.ERROR_INVALID_DATA);
+		}
+		boolean first = true;
+		StringBuilder sb = new StringBuilder();
+		String[] files = (String[]) object;
+		for (String file : files) {
+			if (file == null || file.length() == 0) {
+				continue;
+			}
+			System.out.println("dnd file: " + file);
+			if (first) {
+				first = false;
+			} else {
+				sb.append(SEPARATOR);
+			}
+			sb.append("file://");
+			sb.append(file);
+		}
+		transferData.data = sb.toString().getBytes();
+		transferData.format = URI_LIST;
+	}
+
+	/**
+	 * This implementation of <code>nativeToJava</code> converts a platform
+	 * specific representation of a list of file names to a java
+	 * <code>String[]</code>. Each String in the array contains the absolute
+	 * path for a single file or directory.
+	 * 
+	 * @param transferData
+	 *            the platform specific representation of the data to be
+	 *            converted
+	 * @return a java <code>String[]</code> containing a list of file names if
+	 *         the conversion was successful; otherwise null
+	 * 
+	 * @see Transfer#javaToNative
+	 */
+	@Override
+	public Object nativeToJava(TransferData transferData) {
+		byte[] data = (byte[]) super.nativeToJava(transferData);
+		if (data == null) {
+			return null;
+		}
+		String[] files = new String(data).split(SEPARATOR);
+		return files;
+	}
+
+	@Override
+	protected int[] getTypeIds() {
+		return new int[] { URI_LIST_ID };
+	}
+
+	@Override
+	protected String[] getTypeNames() {
+		return new String[] { URI_LIST };
+	}
+
+	boolean checkStringArray(Object object) {
+		if (object == null || !(object instanceof String[]) || ((String[]) object).length == 0) {
+			return false;
+		}
+		String[] strings = (String[]) object;
+		for (int i = 0; i < strings.length; i++) {
+			if (strings[i] == null || strings[i].length() == 0) {
+				return false;
+			}
+		}
+		return true;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/HTMLTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/HTMLTransfer.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/HTMLTransfer.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/HTMLTransfer.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/ImageTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ImageTransfer.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/ImageTransfer.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/ImageTransfer.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/RTFTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/RTFTransfer.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/RTFTransfer.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/RTFTransfer.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDragSourceEffect.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDragSourceEffect.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDragSourceEffect.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDragSourceEffect.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDropTargetEffect.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDropTargetEffect.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDropTargetEffect.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TableDropTargetEffect.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TextTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TextTransfer.java
new file mode 100644
index 0000000..0b83a96
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TextTransfer.java	
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+/**
+ * The class <code>TextTransfer</code> provides a platform specific mechanism
+ * for converting plain text represented as a java <code>String</code> to a
+ * platform specific representation of the data and vice versa.
+ * 
+ * <p>
+ * An example of a java <code>String</code> containing plain text is shown
+ * below:
+ * </p>
+ * 
+ * <code><pre>
+ *     String textData = "Hello World";
+ * </code></pre>
+ * 
+ * @see Transfer
+ */
+public class TextTransfer extends ByteArrayTransfer {
+	private static final String TYPENAME = "text/plain"; //$NON-NLS-1$
+	private static final int TYPEID = registerType(TYPENAME);
+	private static TextTransfer _instance = new TextTransfer();
+
+	private TextTransfer() {
+	}
+
+	/**
+	 * Returns the singleton instance of the TextTransfer class.
+	 * 
+	 * @return the singleton instance of the TextTransfer class
+	 */
+	public static TextTransfer getInstance() {
+		return _instance;
+	}
+
+	/**
+	 * This implementation of <code>javaToNative</code> converts plain text
+	 * represented by a java <code>String</code> to a platform specific
+	 * representation.
+	 * 
+	 * @param object
+	 *            a java <code>String</code> containing text
+	 * @param transferData
+	 *            an empty <code>TransferData</code> object that will be filled
+	 *            in on return with the platform specific format of the data
+	 * 
+	 * @see Transfer#nativeToJava
+	 */
+	@Override
+	public void javaToNative(Object object, TransferData transferData) {
+		if (!checkText(object) || !isSupportedType(transferData)) {
+			DND.error(DND.ERROR_INVALID_DATA);
+			return;
+		}
+		transferData.data = ((String) object).getBytes();
+		transferData.format = TYPENAME;
+		transferData.type = TYPEID;
+	}
+
+	private boolean checkText(Object object) {
+		return object != null && object instanceof String && ((String) object).length() > 0;
+	}
+
+	/**
+	 * This implementation of <code>nativeToJava</code> converts a platform
+	 * specific representation of plain text to a java <code>String</code>.
+	 * 
+	 * @param transferData
+	 *            the platform specific representation of the data to be
+	 *            converted
+	 * @return a java <code>String</code> containing text if the conversion was
+	 *         successful; otherwise null
+	 * 
+	 * @see Transfer#javaToNative
+	 */
+	@Override
+	public Object nativeToJava(TransferData transferData) {
+		byte[] data = (byte[]) super.nativeToJava(transferData);
+		if (data == null) {
+			return null;
+		}
+		return new String(data);
+	}
+
+	@Override
+	protected String[] getTypeNames() {
+		return new String[] { TYPENAME };
+	}
+
+	@Override
+	protected int[] getTypeIds() {
+		return new int[] { TYPEID };
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Transfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Transfer.java
new file mode 100644
index 0000000..4ed963d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/Transfer.java	
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+/**
+ * <code>Transfer</code> provides a mechanism for converting between a java
+ * representation of data and a platform specific representation of data and
+ * vice versa. It is used in data transfer operations such as drag and drop and
+ * clipboard copy/paste.
+ * 
+ * <p>
+ * You should only need to become familiar with this class if you are
+ * implementing a Transfer subclass and you are unable to subclass the
+ * ByteArrayTransfer class.
+ * </p>
+ * 
+ * @see ByteArrayTransfer
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public abstract class Transfer {
+
+	/**
+	 * Returns a list of the platform specific data types that can be converted
+	 * using this transfer agent.
+	 * 
+	 * <p>
+	 * Only the data type fields of the <code>TransferData</code> objects are
+	 * filled in.
+	 * </p>
+	 * 
+	 * @return a list of the data types that can be converted using this
+	 *         transfer agent
+	 */
+	abstract public TransferData[] getSupportedTypes();
+
+	/**
+	 * Returns true if the <code>TransferData</code> data type can be converted
+	 * using this transfer agent, or false otherwise (including if transferData
+	 * is <code>null</code>).
+	 * 
+	 * @param transferData
+	 *            a platform specific description of a data type; only the data
+	 *            type fields of the <code>TransferData</code> object need to be
+	 *            filled in
+	 * 
+	 * @return true if the transferData data type can be converted using this
+	 *         transfer agent
+	 */
+	abstract public boolean isSupportedType(TransferData transferData);
+
+	/**
+	 * Returns the platform specific names of the data types that can be
+	 * converted using this transfer agent.
+	 * 
+	 * @return the platform specific names of the data types that can be
+	 *         converted using this transfer agent.
+	 */
+	abstract protected String[] getTypeNames();
+
+	/**
+	 * Returns the platform specific ids of the data types that can be converted
+	 * using this transfer agent.
+	 * 
+	 * @return the platform specific ids of the data types that can be converted
+	 *         using this transfer agent
+	 */
+	abstract protected int[] getTypeIds();
+
+	/**
+	 * Converts a java representation of data to a platform specific
+	 * representation of the data.
+	 * 
+	 * <p>
+	 * On a successful conversion, the transferData.result field will be set as
+	 * follows:
+	 * <ul>
+	 * <li>Windows: COM.S_OK
+	 * <li>Motif: 1
+	 * <li>GTK: 1
+	 * <li>Photon: 1
+	 * </ul>
+	 * </p>
+	 * 
+	 * <p>
+	 * If this transfer agent is unable to perform the conversion, the
+	 * transferData.result field will be set to a failure value as follows:
+	 * <ul>
+	 * <li>Windows: COM.DV_E_TYMED or COM.E_FAIL
+	 * <li>Motif: 0
+	 * <li>GTK: 0
+	 * <li>Photon: 0
+	 * </ul>
+	 * </p>
+	 * 
+	 * @param object
+	 *            a java representation of the data to be converted; the type of
+	 *            Object that is passed in is dependent on the
+	 *            <code>Transfer</code> subclass.
+	 * 
+	 * @param transferData
+	 *            an empty TransferData object; this object will be filled in on
+	 *            return with the platform specific representation of the data
+	 * 
+	 * @exception org.eclipse.swt.SWTException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_DATA - if object does not contain data
+	 *                in a valid format or is <code>null</code></li>
+	 *                </ul>
+	 */
+	abstract protected void javaToNative(Object object, TransferData transferData);
+
+	/**
+	 * Converts a platform specific representation of data to a java
+	 * representation.
+	 * 
+	 * @param transferData
+	 *            the platform specific representation of the data to be
+	 *            converted
+	 * 
+	 * @return a java representation of the converted data if the conversion was
+	 *         successful; otherwise null. If transferData is <code>null</code>
+	 *         then <code>null</code> is returned. The type of Object that is
+	 *         returned is dependent on the <code>Transfer</code> subclass.
+	 */
+	abstract protected Object nativeToJava(TransferData transferData);
+
+	/**
+	 * Registers a name for a data type and returns the associated unique
+	 * identifier.
+	 * 
+	 * <p>
+	 * You may register the same type more than once, the same unique identifier
+	 * will be returned if the type has been previously registered.
+	 * </p>
+	 * 
+	 * <p>
+	 * Note: On windows, do <b>not</b> call this method with pre-defined
+	 * Clipboard Format types such as CF_TEXT or CF_BITMAP because the
+	 * pre-defined identifier will not be returned
+	 * </p>
+	 * 
+	 * @param formatName
+	 *            the name of a data type
+	 * 
+	 * @return the unique identifier associated with this data type
+	 */
+	public static int registerType(String formatName) {
+		return formatName.hashCode();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TransferData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TransferData.java
new file mode 100644
index 0000000..cd59afd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TransferData.java	
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+/**
+ * The <code>TransferData</code> class is a platform specific data structure for
+ * describing the type and the contents of data being converted by a transfer
+ * agent.
+ * 
+ * <p>
+ * As an application writer, you do not need to know the specifics of
+ * TransferData. TransferData instances are passed to a subclass of Transfer and
+ * the Transfer object manages the platform specific issues. You can ask a
+ * Transfer subclass if it can handle this data by calling
+ * Transfer.isSupportedType(transferData).
+ * </p>
+ * 
+ * <p>
+ * You should only need to become familiar with the fields in this class if you
+ * are implementing a Transfer subclass and you are unable to subclass the
+ * ByteArrayTransfer class.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public class TransferData {
+	/**
+	 * The type is a unique identifier of a system format or user defined
+	 * format. (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 */
+	public int type;
+
+	// attributes specific to set/get
+	Object data;
+	String format;
+
+	/**
+	 * The result field contains the result of converting a java data type into
+	 * a platform specific value. (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 * <p>
+	 * The value of result is 1 if the conversion was successful. The value of
+	 * result is 0 if the conversion failed.
+	 * </p>
+	 */
+	//	int result;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder("TransferData {type: ");//$NON-NLS-1$
+		sb.append(type);
+		sb.append(", format: ");//$NON-NLS-1$
+		sb.append(format);
+		sb.append(", data: ");//$NON-NLS-1$
+		sb.append(data);
+		sb.append("}"); //$NON-NLS-1$
+		return sb.toString();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDragSourceEffect.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDragSourceEffect.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDragSourceEffect.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..d5eaaeb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/TreeDropTargetEffect.java	
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll
+ * and expand) when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>
+ * Classes that wish to provide their own drag under effect for a
+ * <code>Tree</code> can extend the <code>TreeDropTargetEffect</code> class and
+ * override any applicable methods in <code>TreeDropTargetEffect</code> to
+ * display their own drag under effect.
+ * </p>
+ * 
+ * Subclasses that override any methods of this class must call the
+ * corresponding <code>super</code> method to get the default drag under effect
+ * implementation.
+ * 
+ * <p>
+ * The feedback value is either one of the FEEDBACK constants defined in class
+ * <code>DND</code> which is applicable to instances of this class, or it must
+ * be built by <em>bitwise OR</em>'ing together (that is, using the
+ * <code>int</code> "|" operator) two or more of those <code>DND</code> effect
+ * constants.
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER,
+ * FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under
+	 * effect on the specified <code>Tree</code>.
+	 * 
+	 * @param tree
+	 *            the <code>Tree</code> over which the user positions the cursor
+	 *            to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+
+	@Override
+	public void dragEnter(DropTargetEvent event) {
+		System.out.println("TreeDropTargetEffect.dragEnter: " + event);
+		super.dragEnter(event);
+	}
+
+	@Override
+	public void dragLeave(DropTargetEvent event) {
+		System.out.println("TreeDropTargetEffect.dragLeave: " + event);
+		super.dragLeave(event);
+	}
+
+	@Override
+	public void dragOver(DropTargetEvent event) {
+		System.out.println("TreeDropTargetEffect.dragOver: " + event);
+		Tree tree = (Tree) control;
+		//int effect = checkEffect(event.feedback);
+
+		TreeItem item = tree.getItem(tree.toControl(new Point(event.x, event.y)));
+
+		tree.highlightItem(item);
+	}
+
+	@Override
+	public void drop(DropTargetEvent event) {
+		System.out.println("TreeDropTargetEffect.drop: " + event);
+		super.drop(event);
+	}
+
+	@Override
+	public void dropAccept(DropTargetEvent event) {
+		System.out.println("TreeDropTargetEffect.dropAccept: " + event);
+		super.dropAccept(event);
+	}
+
+	@Override
+	public Widget getItem(int x, int y) {
+		//System.out.println("TreeDropTargetEffect.getItem: " + x + " " + y);
+		Tree tree = (Tree) control;
+		TreeItem item = tree.getItem(tree.toControl(new Point(x, y)));
+		//System.out.println("item: " + item);
+		return item;
+	}
+
+	private int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) {
+			effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		}
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) {
+			effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		}
+		return effect;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/URLTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/URLTransfer.java
similarity index 100%
copy from eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/URLTransfer.java
copy to eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/qt/org/eclipse/swt/dnd/URLTransfer.java
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/ByteArrayTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/ByteArrayTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/Clipboard.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/Clipboard.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DragSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DragSource.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/FileTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/FileTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/OleEnumFORMATETC.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/OleEnumFORMATETC.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/RTFTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/RTFTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TextTransfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TextTransfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/Transfer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/Transfer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TransferData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TransferData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java
index 16b769d..6f810fd 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -234,7 +234,7 @@ String getProfilePath () {
 	return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
 }
 
-String getSWTInitLibraryName () {
+static String GetSWTInitLibraryName () {
 	return "swt-xulrunner"; //$NON-NLS-1$
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java
old mode 100644
new mode 100755
index 40ef94f..ed79dec
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,7 +110,7 @@ String getProfilePath () {
 	return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
 }
 
-String getSWTInitLibraryName () {
+static String GetSWTInitLibraryName () {
 	return "swt-xulrunner"; //$NON-NLS-1$
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp
index 32741cf..78e2a00 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.cpp	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h
index 21bc338..5bfb56e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp
index 45b342c..ac77109 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,19 @@
 
 #define XPCOMInit_NATIVE(func) Java_org_eclipse_swt_internal_mozilla_init_XPCOMInit_##func
 
+#ifndef NO_GREProperty_1sizeof
+extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(GREProperty_1sizeof)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL XPCOMInit_NATIVE(GREProperty_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	XPCOMInit_NATIVE_ENTER(env, that, GREProperty_1sizeof_FUNC);
+	rc = (jint)GREProperty_sizeof();
+	XPCOMInit_NATIVE_EXIT(env, that, GREProperty_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_GREVersionRange_1sizeof
 extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(GREVersionRange_1sizeof)(JNIEnv *env, jclass that);
 JNIEXPORT jint JNICALL XPCOMInit_NATIVE(GREVersionRange_1sizeof)
@@ -29,16 +42,19 @@ JNIEXPORT jint JNICALL XPCOMInit_NATIVE(GREVersionRange_1sizeof)
 #endif
 
 #ifndef NO__1GRE_1GetGREPathWithProperties
-extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1GRE_1GetGREPathWithProperties)(JNIEnv *env, jclass that, jobject arg0, jint arg1, jintLong arg2, jint arg3, jintLong arg4, jint arg5);
+extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1GRE_1GetGREPathWithProperties)(JNIEnv *env, jclass that, jobject arg0, jint arg1, jobject arg2, jint arg3, jintLong arg4, jint arg5);
 JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1GRE_1GetGREPathWithProperties)
-	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jintLong arg2, jint arg3, jintLong arg4, jint arg5)
+	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jobject arg2, jint arg3, jintLong arg4, jint arg5)
 {
 	GREVersionRange _arg0, *lparg0=NULL;
+	GREProperty _arg2, *lparg2=NULL;
 	jint rc = 0;
 	XPCOMInit_NATIVE_ENTER(env, that, _1GRE_1GetGREPathWithProperties_FUNC);
 	if (arg0) if ((lparg0 = getGREVersionRangeFields(env, arg0, &_arg0)) == NULL) goto fail;
-	rc = (jint)GRE_GetGREPathWithProperties((const GREVersionRange *)lparg0, arg1, (const GREProperty *)arg2, arg3, (char *)arg4, arg5);
+	if (arg2) if ((lparg2 = getGREPropertyFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)GRE_GetGREPathWithProperties((const GREVersionRange *)lparg0, arg1, (const GREProperty *)lparg2, arg3, (char *)arg4, arg5);
 fail:
+	if (arg2 && lparg2) setGREPropertyFields(env, arg2, lparg2);
 	if (arg0 && lparg0) setGREVersionRangeFields(env, arg0, lparg0);
 	XPCOMInit_NATIVE_EXIT(env, that, _1GRE_1GetGREPathWithProperties_FUNC);
 	return rc;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.h
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp
index 687a29a..84eb84c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,9 +14,10 @@
 
 #ifdef NATIVE_STATS
 
-int XPCOMInit_nativeFunctionCount = 4;
-int XPCOMInit_nativeFunctionCallCount[4];
+int XPCOMInit_nativeFunctionCount = 5;
+int XPCOMInit_nativeFunctionCallCount[5];
 char * XPCOMInit_nativeFunctionNames[] = {
+	"GREProperty_1sizeof",
 	"GREVersionRange_1sizeof",
 	"_1GRE_1GetGREPathWithProperties",
 	"_1XPCOMGlueShutdown",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h
index 048e3d7..20a17e9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ extern char* XPCOMInit_nativeFunctionNames[];
 #endif
 
 typedef enum {
+	GREProperty_1sizeof_FUNC,
 	GREVersionRange_1sizeof_FUNC,
 	_1GRE_1GetGREPathWithProperties_FUNC,
 	_1XPCOMGlueShutdown_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp
index e9edfd6..31dff97 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,40 @@
 #include "swt.h"
 #include "xpcominit_structs.h"
 
+#ifndef NO_GREProperty
+typedef struct GREProperty_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID property, value;
+} GREProperty_FID_CACHE;
+
+GREProperty_FID_CACHE GREPropertyFc;
+
+void cacheGREPropertyFields(JNIEnv *env, jobject lpObject)
+{
+	if (GREPropertyFc.cached) return;
+	GREPropertyFc.clazz = env->GetObjectClass(lpObject);
+	GREPropertyFc.property = env->GetFieldID(GREPropertyFc.clazz, "property", I_J);
+	GREPropertyFc.value = env->GetFieldID(GREPropertyFc.clazz, "value", I_J);
+	GREPropertyFc.cached = 1;
+}
+
+GREProperty *getGREPropertyFields(JNIEnv *env, jobject lpObject, GREProperty *lpStruct)
+{
+	if (!GREPropertyFc.cached) cacheGREPropertyFields(env, lpObject);
+	lpStruct->property = (const char *)env->GetIntLongField(lpObject, GREPropertyFc.property);
+	lpStruct->value = (const char *)env->GetIntLongField(lpObject, GREPropertyFc.value);
+	return lpStruct;
+}
+
+void setGREPropertyFields(JNIEnv *env, jobject lpObject, GREProperty *lpStruct)
+{
+	if (!GREPropertyFc.cached) cacheGREPropertyFields(env, lpObject);
+	env->SetIntLongField(lpObject, GREPropertyFc.property, (jintLong)lpStruct->property);
+	env->SetIntLongField(lpObject, GREPropertyFc.value, (jintLong)lpStruct->value);
+}
+#endif
+
 #ifndef NO_GREVersionRange
 typedef struct GREVersionRange_FID_CACHE {
 	int cached;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h
index 096a9da..1918384 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,18 @@
 
 #include "xpcominit.h"
 
+#ifndef NO_GREProperty
+void cacheGREPropertyFields(JNIEnv *env, jobject lpObject);
+GREProperty *getGREPropertyFields(JNIEnv *env, jobject lpObject, GREProperty *lpStruct);
+void setGREPropertyFields(JNIEnv *env, jobject lpObject, GREProperty *lpStruct);
+#define GREProperty_sizeof() sizeof(GREProperty)
+#else
+#define cacheGREPropertyFields(a,b)
+#define getGREPropertyFields(a,b,c) NULL
+#define setGREPropertyFields(a,b,c)
+#define GREProperty_sizeof() 0
+#endif
+
 #ifndef NO_GREVersionRange
 void cacheGREVersionRangeFields(JNIEnv *env, jobject lpObject);
 GREVersionRange *getGREVersionRangeFields(JNIEnv *env, jobject lpObject, GREVersionRange *lpStruct);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java
index e888c32..f971969 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,11 +68,11 @@ void createCOMInterfaces () {
 		public int /*long*/ method6 (int /*long*/[] args) {return canSetProperty (args[0], args[1], args[2]);}
 	};
 
-	external = new XPCOMObject (new int[] {2, 0, 0, 3}) {
+	external = new XPCOMObject (new int[] {2, 0, 0, 4}) {
 		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
 		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
 		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
-		public int /*long*/ method3 (int /*long*/[] args) {return callJava ((int)/*64*/args[0], args[1], args[2]);}
+		public int /*long*/ method3 (int /*long*/[] args) {return callJava ((int)/*64*/args[0], args[1], args[2], args[3]);}
 	};
 	
 }
@@ -475,7 +475,7 @@ nsIVariant convertToJS (Object value, nsIComponentManager componentManager) {
 	result[0] = 0;
 
 	if (value == null) {
-		rc = variant.SetAsVoid ();
+		rc = variant.SetAsEmpty ();
 		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
 		return variant;
 	}
@@ -541,25 +541,35 @@ nsIVariant convertToJS (Object value, nsIComponentManager componentManager) {
 	return null;
 }
 
-int callJava (int functionId, int /*long*/ args, int /*long*/ returnPtr) {
+int callJava (int functionId, int /*long*/ tokenVariant, int /*long*/ args, int /*long*/ returnPtr) {
 	Object key = new Integer (functionId);
 	BrowserFunction function = (BrowserFunction)Mozilla.AllFunctions.get (key);
 	Object returnValue = null;
 
 	if (function != null) {
-		short[] type = new short[1]; /* PRUint16 */
-		nsIVariant variant = new nsIVariant (args);
-		int rc = variant.GetDataType (type);
-		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
 		try {
-			Object temp = (Object[])convertToJava (variant, type[0]);
-			if (temp instanceof Object[]) {
-				Object[] arguments = (Object[])temp;
-				try {
-					returnValue = function.function (arguments);
-				} catch (Exception e) {
-					/* exception during function invocation */
-					returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+			short[] type = new short[1]; /* PRUint16 */
+			nsIVariant variant = new nsIVariant (tokenVariant);
+			int rc = variant.GetDataType (type);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			Object temp = convertToJava (variant, type[0]);
+			type[0] = 0;
+			if (temp instanceof Number) {
+				long token = ((Number)temp).longValue ();
+				if (token == function.token) {
+					variant = new nsIVariant (args);
+					rc = variant.GetDataType (type);
+					if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+					temp = convertToJava (variant, type[0]);
+					if (temp instanceof Object[]) {
+						Object[] arguments = (Object[])temp;
+						try {
+							returnValue = function.function (arguments);
+						} catch (Exception e) {
+							/* exception during function invocation */
+							returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+						}
+					}
 				}
 			}
 		} catch (IllegalArgumentException e) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java
index af44dda..78944cc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,22 +62,25 @@ class Mozilla extends WebBrowser {
 	static int BrowserCount, NextJSFunctionIndex = 1;
 	static Hashtable AllFunctions = new Hashtable ();
 	static Listener DisplayListener;
-	static boolean Initialized, IsPre_1_8, IsPre_1_9, PerformedVersionCheck, XPCOMWasGlued, XPCOMInitWasGlued;
+	static boolean Initialized, IsPre_1_8, IsPre_1_9, IsXULRunner, PerformedVersionCheck, XPCOMWasGlued, XPCOMInitWasGlued;
+	static String MozillaPath;
 	static String oldProxyHostFTP, oldProxyHostHTTP, oldProxyHostSSL;
 	static int oldProxyPortFTP = -1, oldProxyPortHTTP = -1, oldProxyPortSSL = -1, oldProxyType = -1;
 	static byte[] pathBytes_JSEvaluateUCScriptForPrincipals;
 	static byte[] pathBytes_NSFree;
 
 	/* XULRunner detect constants */
+	static final String GCC3 = "-gcc3"; //$NON-NLS-1$
 	static final String GRERANGE_LOWER = "1.8.1.2"; //$NON-NLS-1$
 	static final String GRERANGE_LOWER_FALLBACK = "1.8"; //$NON-NLS-1$
 	static final boolean LowerRangeInclusive = true;
 	static final String GRERANGE_UPPER = "1.9.*"; //$NON-NLS-1$
 	static final boolean UpperRangeInclusive = true;
+	static final String PROPERTY_ABI = "abi"; //$NON-NLS-1$
 
 	static final int MAX_PORT = 65535;
 	static final String DEFAULTVALUE_STRING = "default"; //$NON-NLS-1$
-	static final String SEPARATOR_OS = System.getProperty ("file.separator"); //$NON-NLS-1$
+	static final char SEPARATOR_OS = System.getProperty ("file.separator").charAt (0); //$NON-NLS-1$
 	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
 	static final String DISPOSE_LISTENER_HOOKED = "org.eclipse.swt.browser.Mozilla.disposeListenerHooked"; //$NON-NLS-1$
 	static final String HEADER_CONTENTTYPE = "Content-Type"; //$NON-NLS-1
@@ -106,10 +109,12 @@ class Mozilla extends WebBrowser {
 	static final String SHUTDOWN_PERSIST = "shutdown-persist"; //$NON-NLS-1$
 	static final String STARTUP = "startup"; //$NON-NLS-1$
 	static final String TOKENIZER_LOCALE = ","; //$NON-NLS-1$
+	static final String TRUE = "true"; //$NON-NLS-1$
 	static final String URI_FILEROOT = "file:///"; //$NON-NLS-1$
 	static final String XULRUNNER_PATH = "org.eclipse.swt.browser.XULRunnerPath"; //$NON-NLS-1$
 
 	// TEMPORARY CODE
+	static final String FACTORIES_REGISTERED = "org.eclipse.swt.browser.MozillaFactoriesRegistered"; //$NON-NLS-1$
 	static final String GRE_INITIALIZED = "org.eclipse.swt.browser.XULRunnerInitialized"; //$NON-NLS-1$
 
 	static {
@@ -207,7 +212,7 @@ class Mozilla extends WebBrowser {
 					XPCOMInit.XPCOMGlueShutdown ();
 					XPCOMInitWasGlued = false;
 				}
-				Initialized = false;
+				Initialized = PerformedVersionCheck = false;
 			}
 
 			void revertProxySettings (nsIPrefService prefService) {
@@ -528,117 +533,143 @@ class Mozilla extends WebBrowser {
 		};
 	}
 
-public boolean create (Composite parent, int style) {
-	delegate = new MozillaDelegate (browser);
-	final Display display = parent.getDisplay ();
+static String Arch () {
+	String osArch = System.getProperty("os.arch"); //$NON-NLS-1$
+	if (osArch.equals ("i386") || osArch.equals ("i686")) return "x86"; //$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$
+	if (osArch.equals ("amd64")) return "x86_64"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osArch.equals ("IA64N")) return "ia64_32"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osArch.equals ("IA64W")) return "ia64"; //$NON-NLS-1$ $NON-NLS-2$
+	return osArch;
+}
 
-	int /*long*/[] result = new int /*long*/[1];
-	if (!Initialized) {
-		boolean initLoaded = false;
-		boolean isXULRunner = false;
+static void LoadLibraries () {
+	boolean initLoaded = false;
 
-		String greInitialized = System.getProperty (GRE_INITIALIZED); 
-		if ("true".equals (greInitialized)) { //$NON-NLS-1$
-			/* 
-			 * Another browser has already initialized xulrunner in this process,
-			 * so just bind to it instead of trying to initialize a new one.
-			 */
-			Initialized = true;
-		}
+	String greInitialized = System.getProperty (GRE_INITIALIZED);
+	if (TRUE.equals (greInitialized)) {
+		/* 
+		 * Another browser has already initialized xulrunner in this process,
+		 * so just bind to it instead of trying to initialize a new one.
+		 */
+		Initialized = true;
+	}
 
-		String mozillaPath = System.getProperty (XULRUNNER_PATH);
-		/*
-		* Browser clients that ship XULRunner in a plug-in must have an opportunity 
-		* to set the org.eclipse.swt.browser.XULRunnerPath system property to point
-		* at their XULRunner before the first Mozilla-based Browser is created.  To
-		* facilitate this, reflection is used to reference non-existent class
-		* org.eclipse.swt.browser.XULRunnerInitializer the first time a Mozilla-
-		* based Browser is created.   A client wishing to use this hook can do so
-		* by creating a fragment of org.eclipse.swt that implements this class and
-		* sets the system property in its static initializer.
-		*/
-		if (mozillaPath == null) {
-			try {
-				Class.forName ("org.eclipse.swt.browser.XULRunnerInitializer"); //$NON-NLS-1$
-				mozillaPath = System.getProperty (XULRUNNER_PATH);
-			} catch (ClassNotFoundException e) {
-				/* no fragment is providing this class, which is the typical case */
-			}
+	MozillaPath = System.getProperty (XULRUNNER_PATH);
+	/*
+	* Browser clients that ship XULRunner in a plug-in must have an opportunity 
+	* to set the org.eclipse.swt.browser.XULRunnerPath system property to point
+	* at their XULRunner before the first Mozilla-based Browser is created.  To
+	* facilitate this, reflection is used to reference non-existent class
+	* org.eclipse.swt.browser.XULRunnerInitializer the first time a Mozilla-
+	* based Browser is created.   A client wishing to use this hook can do so
+	* by creating a fragment of org.eclipse.swt that implements this class and
+	* sets the system property in its static initializer.
+	*/
+	if (MozillaPath == null) {
+		try {
+			Class.forName ("org.eclipse.swt.browser.XULRunnerInitializer"); //$NON-NLS-1$
+			MozillaPath = System.getProperty (XULRUNNER_PATH);
+		} catch (ClassNotFoundException e) {
+			/* no fragment is providing this class, which is the typical case */
 		}
+	}
 
-		if (mozillaPath == null) {
-			try {
-				String libName = delegate.getSWTInitLibraryName ();
-				Library.loadLibrary (libName);
-				initLoaded = true;
-			} catch (UnsatisfiedLinkError e) {
-				/* 
-				* If this library failed to load then do not attempt to detect a
-				* xulrunner to use.  The Browser may still be usable if MOZILLA_FIVE_HOME
-				* points at a GRE. 
-				*/
-			}
+	if (MozillaPath == null) {
+		try {
+			String libName = MozillaDelegate.GetSWTInitLibraryName ();
+			Library.loadLibrary (libName);
+			initLoaded = true;
+		} catch (UnsatisfiedLinkError e) {
+			/* 
+			* If this library failed to load then do not attempt to detect a
+			* xulrunner to use.  The Browser may still be usable if MOZILLA_FIVE_HOME
+			* points at a GRE. 
+			*/
+		}
+	} else {
+		/* ensure that client-supplied path is using correct separators */
+		if (SEPARATOR_OS == '/') {
+			MozillaPath = MozillaPath.replace ('\\', SEPARATOR_OS);
 		} else {
-			mozillaPath += SEPARATOR_OS + MozillaDelegate.getLibraryName ();
-			isXULRunner = true;
+			MozillaPath = MozillaPath.replace ('/', SEPARATOR_OS);
 		}
 
-		if (initLoaded) {
-			/* attempt to discover a XULRunner to use as the GRE */
-			mozillaPath = initDiscoverXULRunner ();
-			isXULRunner = mozillaPath.length () > 0;
+		MozillaPath += SEPARATOR_OS + MozillaDelegate.getLibraryName ();
+		IsXULRunner = true;
+	}
 
-			/*
-			 * Test whether the detected XULRunner can be used as the GRE before loading swt's
-			 * XULRunner library.  If it cannot be used then fall back to attempting to use
-			 * the GRE pointed to by MOZILLA_FIVE_HOME.
-			 * 
-			 * One case where this will fail is attempting to use a 64-bit xulrunner while swt
-			 * is running in 32-bit mode, or vice versa.
-			 */
-			if (isXULRunner) {
-				byte[] path = MozillaDelegate.wcsToMbcs (null, mozillaPath, true);
-				int rc = XPCOMInit.XPCOMGlueStartup (path);
-				if (rc != XPCOM.NS_OK) {
-					mozillaPath = mozillaPath.substring (0, mozillaPath.lastIndexOf (SEPARATOR_OS));
-					if (Device.DEBUG) System.out.println ("cannot use detected XULRunner: " + mozillaPath); //$NON-NLS-1$
+	if (initLoaded) {
+		/* attempt to discover a XULRunner to use as the GRE */
+		MozillaPath = InitDiscoverXULRunner ();
+		IsXULRunner = MozillaPath.length () > 0;
 
-					/* attempt to XPCOMGlueStartup the GRE pointed at by MOZILLA_FIVE_HOME */
-					int /*long*/ ptr = C.getenv (MozillaDelegate.wcsToMbcs (null, XPCOM.MOZILLA_FIVE_HOME, true));
-					if (ptr == 0) {
-						isXULRunner = false;
+		/*
+		 * Test whether the detected XULRunner can be used as the GRE before loading swt's
+		 * XULRunner library.  If it cannot be used then fall back to attempting to use
+		 * the GRE pointed to by MOZILLA_FIVE_HOME.
+		 * 
+		 * One case where this will fail is attempting to use a 64-bit xulrunner while swt
+		 * is running in 32-bit mode, or vice versa.
+		 */
+		if (IsXULRunner) {
+			byte[] bytes = MozillaDelegate.wcsToMbcs (null, MozillaPath, true);
+			int rc = XPCOMInit.XPCOMGlueStartup (bytes);
+			if (rc != XPCOM.NS_OK) {
+				MozillaPath = MozillaPath.substring (0, MozillaPath.lastIndexOf (SEPARATOR_OS));
+				if (Device.DEBUG) System.out.println ("cannot use detected XULRunner: " + MozillaPath); //$NON-NLS-1$
+
+				/* attempt to XPCOMGlueStartup the GRE pointed at by MOZILLA_FIVE_HOME */
+				int /*long*/ ptr = C.getenv (MozillaDelegate.wcsToMbcs (null, XPCOM.MOZILLA_FIVE_HOME, true));
+				if (ptr == 0) {
+					IsXULRunner = false;
+				} else {
+					int length = C.strlen (ptr);
+					bytes = new byte[length];
+					C.memmove (bytes, ptr, length);
+					MozillaPath = new String (MozillaDelegate.mbcsToWcs (null, bytes));
+					/*
+					 * Attempting to XPCOMGlueStartup a mozilla-based GRE != xulrunner can
+					 * crash, so don't attempt unless the GRE appears to be xulrunner.
+					 */
+					if (MozillaPath.indexOf ("xulrunner") == -1) { //$NON-NLS-1$
+						IsXULRunner = false;	
 					} else {
-						int length = C.strlen (ptr);
-						byte[] buffer = new byte[length];
-						C.memmove (buffer, ptr, length);
-						mozillaPath = new String (MozillaDelegate.mbcsToWcs (null, buffer));
-						/*
-						 * Attempting to XPCOMGlueStartup a mozilla-based GRE != xulrunner can
-						 * crash, so don't attempt unless the GRE appears to be xulrunner.
-						 */
-						if (mozillaPath.indexOf("xulrunner") == -1) { //$NON-NLS-1$
-							isXULRunner = false;	
-						} else {
-							mozillaPath += SEPARATOR_OS + MozillaDelegate.getLibraryName ();
-							path = MozillaDelegate.wcsToMbcs (null, mozillaPath, true);
-							rc = XPCOMInit.XPCOMGlueStartup (path);
-							if (rc != XPCOM.NS_OK) {
-								isXULRunner = false;
-								mozillaPath = mozillaPath.substring (0, mozillaPath.lastIndexOf (SEPARATOR_OS));
-								if (Device.DEBUG) System.out.println ("failed to start as XULRunner: " + mozillaPath); //$NON-NLS-1$
+						MozillaPath += SEPARATOR_OS + MozillaDelegate.getLibraryName ();
+						bytes = MozillaDelegate.wcsToMbcs (null, MozillaPath, true);
+						rc = XPCOMInit.XPCOMGlueStartup (bytes);
+						if (rc == XPCOM.NS_OK) {
+							/* ensure that client-supplied path is using correct separators */
+							if (SEPARATOR_OS == '/') {
+								MozillaPath = MozillaPath.replace ('\\', SEPARATOR_OS);
+							} else {
+								MozillaPath = MozillaPath.replace ('/', SEPARATOR_OS);
 							}
+						} else {
+							IsXULRunner = false;
+							MozillaPath = MozillaPath.substring (0, MozillaPath.lastIndexOf (SEPARATOR_OS));
+							if (Device.DEBUG) System.out.println ("failed to start as XULRunner: " + MozillaPath); //$NON-NLS-1$
 						}
-					} 
-				}
-				if (isXULRunner) {
-					XPCOMInitWasGlued = true;
-				}
+					}
+				} 
+			}
+			if (IsXULRunner) {
+				XPCOMInitWasGlued = true;
 			}
 		}
+	}
+}
+
+public void create (Composite parent, int style) {
+	delegate = new MozillaDelegate (browser);
+	final Display display = parent.getDisplay ();
+
+	int /*long*/[] result = new int /*long*/[1];
+	if (!Initialized) {
+		LoadLibraries ();
 
-		if (isXULRunner) {
+		if (IsXULRunner) {
 			/* load swt's xulrunner library and invoke XPCOMGlueStartup to load xulrunner's dependencies */
-			mozillaPath = initXULRunner (mozillaPath);
+			MozillaPath = initXULRunner (MozillaPath);
 		} else {
 			/*
 			* If style SWT.MOZILLA was specified then this initialization has already
@@ -646,31 +677,31 @@ public boolean create (Composite parent, int style) {
 			*/
 			if ((style & SWT.MOZILLA) != 0) {
 				browser.dispose ();
-				String errorString = (mozillaPath != null && mozillaPath.length () > 0) ?
-					" [Failed to use detected XULRunner: " + mozillaPath + "]" :
+				String errorString = (MozillaPath != null && MozillaPath.length () > 0) ?
+					" [Failed to use detected XULRunner: " + MozillaPath + "]" :
 					" [Could not detect registered XULRunner to use]";	//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				SWT.error (SWT.ERROR_NO_HANDLES, null, errorString);
 			}
 
 			/* load swt's mozilla library */
-			mozillaPath = initMozilla (mozillaPath);
+			MozillaPath = initMozilla (MozillaPath);
 		}
 
 		if (!Initialized) {
 			/* create LocationProvider, which tells mozilla where to find things on the file system */
 			String profilePath = delegate.getProfilePath ();
-			LocationProvider = new AppFileLocProvider (mozillaPath, profilePath, isXULRunner);
+			LocationProvider = new AppFileLocProvider (MozillaPath, profilePath, IsXULRunner);
 			LocationProvider.AddRef ();
 
 			/* write external.xpt to the file system if needed */
 			initExternal (profilePath);
 
 			/* load swt's mozilla/xulrunner library and invoke appropriate Init function */
-			initXPCOM (mozillaPath, isXULRunner);
+			initXPCOM (MozillaPath, IsXULRunner);
 		}
 
 		/* attempt to initialize JavaXPCOM in the detected XULRunner */
-		if (isXULRunner) initJavaXPCOM (mozillaPath);
+		if (IsXULRunner) initJavaXPCOM (MozillaPath);
 
 		/* get the nsIComponentManager and nsIServiceManager, used throughout initialization */
 		int rc = XPCOM.NS_GetComponentManager (result);
@@ -700,17 +731,31 @@ public boolean create (Composite parent, int style) {
 		/* init the event handler if needed */
 		initSpinup (componentManager);
 
+		/*
+		 * Check for the property indicating that factories have already been registered,
+		 * in which case this browser should not overwrite them with its own.
+		 */
+		boolean factoriesRegistered = false;
+		String propertyString = System.getProperty (FACTORIES_REGISTERED);
+		if (TRUE.equals (propertyString)) {
+			factoriesRegistered = true;
+		}
+
 		/* init our WindowCreator, which mozilla uses for the creation of child browsers in external Shells */
-		initWindowCreator (serviceManager);
+		if (!factoriesRegistered) {
+			initWindowCreator (serviceManager);
+		}
 
 		/* notify mozilla that the profile directory has been changed from its default value */
-		initProfile (serviceManager, isXULRunner);
+		initProfile (serviceManager, IsXULRunner);
 
 		/* init preference values that give desired mozilla behaviours */ 
 		initPreferences (serviceManager, componentManager);
 
-		/* init our various factories that mozilla can invoke as needed */ 
-		initFactories (serviceManager, componentManager, isXULRunner);
+		/* init our various factories that mozilla can invoke as needed */
+		if (!factoriesRegistered) {
+			initFactories (serviceManager, componentManager, IsXULRunner);
+		}
 
 		serviceManager.Release ();
 		componentManager.Release ();
@@ -780,16 +825,28 @@ public boolean create (Composite parent, int style) {
 		nsIComponentRegistrar componentRegistrar = new nsIComponentRegistrar (result[0]);
 		result[0] = 0;
 
-		HelperAppLauncherDialogFactory dialogFactory = new HelperAppLauncherDialogFactory ();
-		dialogFactory.AddRef ();
-		byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CONTRACTID, true);
-		byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "swtHelperAppLauncherDialog", true); //$NON-NLS-1$
-		rc = componentRegistrar.RegisterFactory (XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CID, aClassName, aContractID, dialogFactory.getAddress ());
-		if (rc != XPCOM.NS_OK) {
-			browser.dispose ();
-			error (rc);
+		/*
+		 * Check for the property indicating that factories have already been registered,
+		 * in which case this browser should not overwrite them with its own.
+		 */
+		boolean factoriesRegistered = false;
+		String propertyString = System.getProperty (FACTORIES_REGISTERED);
+		if (TRUE.equals (propertyString)) {
+			factoriesRegistered = true;
+		}
+
+		if (!factoriesRegistered) {
+			HelperAppLauncherDialogFactory dialogFactory = new HelperAppLauncherDialogFactory ();
+			dialogFactory.AddRef ();
+			byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CONTRACTID, true);
+			byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "swtHelperAppLauncherDialog", true); //$NON-NLS-1$
+			rc = componentRegistrar.RegisterFactory (XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CID, aClassName, aContractID, dialogFactory.getAddress ());
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			dialogFactory.Release ();
 		}
-		dialogFactory.Release ();
 
 		/*
 		* Check for the availability of the pre-1.8 implementation of nsIDocShell
@@ -830,16 +887,18 @@ public boolean create (Composite parent, int style) {
 				new nsISupports (result[0]).Release ();
 				result[0] = 0;
 
-				DownloadFactory_1_8 downloadFactory_1_8 = new DownloadFactory_1_8 ();
-				downloadFactory_1_8.AddRef ();
-				aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_TRANSFER_CONTRACTID, true);
-				aClassName = MozillaDelegate.wcsToMbcs (null, "swtTransfer", true); //$NON-NLS-1$
-				rc = componentRegistrar.RegisterFactory (XPCOM.NS_DOWNLOAD_CID, aClassName, aContractID, downloadFactory_1_8.getAddress ());
-				if (rc != XPCOM.NS_OK) {
-					browser.dispose ();
-					error (rc);
+				if (!factoriesRegistered) {
+					DownloadFactory_1_8 downloadFactory_1_8 = new DownloadFactory_1_8 ();
+					downloadFactory_1_8.AddRef ();
+					byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_TRANSFER_CONTRACTID, true);
+					byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "swtTransfer", true); //$NON-NLS-1$
+					rc = componentRegistrar.RegisterFactory (XPCOM.NS_DOWNLOAD_CID, aClassName, aContractID, downloadFactory_1_8.getAddress ());
+					if (rc != XPCOM.NS_OK) {
+						browser.dispose ();
+						error (rc);
+					}
+					downloadFactory_1_8.Release ();
 				}
-				downloadFactory_1_8.Release ();
 			} else { /* >= 1.9 */
 				IsPre_1_9 = false;
 			}
@@ -847,6 +906,8 @@ public boolean create (Composite parent, int style) {
 		result[0] = 0;
 		interfaceRequestor.Release ();
 		componentRegistrar.Release ();
+
+		System.setProperty (FACTORIES_REGISTERED, TRUE);
 	}
 	componentManager.Release ();
 
@@ -930,8 +991,6 @@ public boolean create (Composite parent, int style) {
 	for (int i = 0; i < folderEvents.length; i++) {
 		browser.addListener (folderEvents[i], listener);
 	}
-
-	return true;
 }
 
 public boolean back () {
@@ -1543,7 +1602,18 @@ public Object getWebBrowser () {
 	return null;
 }
 
-String initDiscoverXULRunner () {
+static String InitDiscoverXULRunner () {
+	/*
+	* Up to three XULRunner detection attempts will be made:
+	*
+	* 1. A XULRunner with 1.8.1.2 <= version < 2.0, and with "abi" property matching
+	* the current runtime.  Note that XULRunner registrations began including abi
+	* info as of version 1.9.x, so older versions than this will not be returned.
+	* 2. A XULRunner with 1.8.1.2 <= version < 2.0.  XULRunner 1.8.1.2 is the oldest
+	* release that enables the Browser to expose its JavaXPCOM interfaces to clients.
+	* 3. A XULRunner with 1.8.0.1 <= version < 2.0.
+	*/
+
 	GREVersionRange range = new GREVersionRange ();
 	byte[] bytes = MozillaDelegate.wcsToMbcs (null, GRERANGE_LOWER, true);
 	int /*long*/ lower = C.malloc (bytes.length);
@@ -1557,26 +1627,37 @@ String initDiscoverXULRunner () {
 	range.upper = upper;
 	range.upperInclusive = UpperRangeInclusive;
 
+	GREProperty property = new GREProperty ();
+	bytes = MozillaDelegate.wcsToMbcs (null, PROPERTY_ABI, true);
+	int /*long*/ name = C.malloc (bytes.length);
+	C.memmove (name, bytes, bytes.length);
+	property.property = name;
+	bytes = MozillaDelegate.wcsToMbcs (null, Arch () + GCC3, true);
+	int /*long*/ value = C.malloc (bytes.length);
+	C.memmove (value, bytes, bytes.length);
+	property.value = value;
+
 	int length = XPCOMInit.PATH_MAX;
 	int /*long*/ greBuffer = C.malloc (length);
-	int /*long*/ propertiesPtr = C.malloc (2 * C.PTR_SIZEOF);
-	int rc = XPCOMInit.GRE_GetGREPathWithProperties (range, 1, propertiesPtr, 0, greBuffer, length);
+	int rc = XPCOMInit.GRE_GetGREPathWithProperties (range, 1, property, 1, greBuffer, length);
 
-	/*
-	 * A XULRunner was not found that supports wrapping of XPCOM handles as JavaXPCOM objects.
-	 * Drop the lower version bound and try to detect an earlier XULRunner installation.
-	 */
 	if (rc != XPCOM.NS_OK) {
-		C.free (lower);
-		bytes = MozillaDelegate.wcsToMbcs (null, GRERANGE_LOWER_FALLBACK, true);
-		lower = C.malloc (bytes.length);
-		C.memmove (lower, bytes, bytes.length);
-		range.lower = lower;
-		rc = XPCOMInit.GRE_GetGREPathWithProperties (range, 1, propertiesPtr, 0, greBuffer, length);
+		/* Fall back to attempt #2 */
+		rc = XPCOMInit.GRE_GetGREPathWithProperties (range, 1, property, 0, greBuffer, length); /* note: propertiesLength is 0 */
+		if (rc != XPCOM.NS_OK) {
+			/* Fall back to attempt #3 */
+			C.free (lower);
+			bytes = MozillaDelegate.wcsToMbcs (null, GRERANGE_LOWER_FALLBACK, true);
+			lower = C.malloc (bytes.length);
+			C.memmove (lower, bytes, bytes.length);
+			range.lower = lower;
+			rc = XPCOMInit.GRE_GetGREPathWithProperties (range, 1, property, 0, greBuffer, length); /* note: propertiesLength is 0 */
+		}
 	}
+	C.free (value);
+	C.free (name);
 	C.free (lower);
 	C.free (upper);
-	C.free (propertiesPtr);
 
 	String result = null;
 	if (rc == XPCOM.NS_OK) {
@@ -1618,9 +1699,6 @@ void initExternal (String profilePath) {
 void initFactories (nsIServiceManager serviceManager, nsIComponentManager componentManager, boolean isXULRunner) {
 	int /*long*/[] result = new int /*long*/[1];
 
-	PromptService2Factory factory = new PromptService2Factory ();
-	factory.AddRef ();
-
 	int rc = componentManager.QueryInterface (nsIComponentRegistrar.NS_ICOMPONENTREGISTRAR_IID, result);
 	if (rc != XPCOM.NS_OK) {
 		browser.dispose ();
@@ -1635,6 +1713,8 @@ void initFactories (nsIServiceManager serviceManager, nsIComponentManager compon
 	result[0] = 0;
 	componentRegistrar.AutoRegister (0);	 /* detect the External component */ 
 
+	PromptService2Factory factory = new PromptService2Factory ();
+	factory.AddRef ();
 	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PROMPTSERVICE_CONTRACTID, true); 
 	byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "swtPromptService", true); //$NON-NLS-1$
 	rc = componentRegistrar.RegisterFactory (XPCOM.NS_PROMPTSERVICE_CID, aClassName, aContractID, factory.getAddress ());
@@ -1734,6 +1814,13 @@ String initMozilla (String mozillaPath) {
 		byte[] buffer = new byte[length];
 		C.memmove (buffer, ptr, length);
 		mozillaPath = new String (MozillaDelegate.mbcsToWcs (null, buffer));
+
+		/* ensure that client-supplied path is using correct separators */
+		if (SEPARATOR_OS == '/') {
+			mozillaPath = mozillaPath.replace ('\\', SEPARATOR_OS);
+		} else {
+			mozillaPath = mozillaPath.replace ('/', SEPARATOR_OS);
+		}
 	} else {
 		browser.dispose ();
 		SWT.error (SWT.ERROR_NO_HANDLES, null, " [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]"); //$NON-NLS-1$
@@ -1826,7 +1913,7 @@ void initXPCOM (String mozillaPath, boolean isXULRunner) {
 		browser.dispose ();
 		SWT.error (SWT.ERROR_NO_HANDLES, null, " [MOZILLA_FIVE_HOME may not point at an embeddable GRE] [NS_InitEmbedding " + mozillaPath + " error " + rc + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
-	System.setProperty (GRE_INITIALIZED, "true"); //$NON-NLS-1$
+	System.setProperty (GRE_INITIALIZED, TRUE);
 }
 
 void initPreferences (nsIServiceManager serviceManager, nsIComponentManager componentManager) {
@@ -2384,6 +2471,7 @@ String initXULRunner (String mozillaPath) {
 	 */ 
 	return mozillaPath.substring (0, mozillaPath.lastIndexOf (SEPARATOR_OS));
 }
+
 public boolean isBackEnabled () {
 	int /*long*/[] result = new int /*long*/[1];
 	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
@@ -2841,8 +2929,7 @@ void hookDOMListeners (nsIDOMEventTarget target, boolean isTop) {
 void unhookDOMListeners () {
 	int /*long*/[] result = new int /*long*/[1];
 	int rc = webBrowser.GetContentDOMWindow (result);
-	if (rc != XPCOM.NS_OK) error (rc);
-	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	if (rc != XPCOM.NS_OK || result[0] == 0) return;
 
 	nsIDOMWindow window = new nsIDOMWindow (result[0]);
 	result[0] = 0;
@@ -3048,7 +3135,9 @@ int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateF
 		Enumeration elements = functions.elements ();
 		while (elements.hasMoreElements ()) {
 			BrowserFunction function = (BrowserFunction)elements.nextElement ();
-			execute (function.functionString);
+			if (!function.isEvaluate) {
+				execute (function.functionString);
+			}
 		}
 	}
 
@@ -3242,7 +3331,9 @@ int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateF
 				Enumeration elements = functions.elements ();
 				while (elements.hasMoreElements ()) {
 					BrowserFunction function = (BrowserFunction)elements.nextElement ();
-					execute (function.functionString);
+					if (!function.isEvaluate) {
+						execute (function.functionString);
+					}
 				}
 				/* 
 				* For Mozilla >= 1.9.2, when content is being set via nsIWebBrowserStream,
@@ -3343,27 +3434,27 @@ int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateF
 			nsIRequest request = new nsIRequest (aRequest);
 
 			int rc = request.QueryInterface (nsIChannel.NS_ICHANNEL_IID, result);
-			if (rc != XPCOM.NS_OK) error (rc);
-			if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
-			nsIChannel channel = new nsIChannel (result[0]);
-			result[0] = 0;
-			rc = channel.GetURI (result);
-			if (rc != XPCOM.NS_OK) error (rc);
-			if (result[0] == 0) error (XPCOM.NS_ERROR_NULL_POINTER);
-			channel.Release ();
+			if (rc == XPCOM.NS_OK && result[0] != 0) {
+				nsIChannel channel = new nsIChannel (result[0]);
+				result[0] = 0;
+				rc = channel.GetURI (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_ERROR_NULL_POINTER);
+				channel.Release ();
 
-			nsIURI uri = new nsIURI (result[0]);
-			result[0] = 0;
-			int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
-			rc = uri.GetSpec (aSpec);
-			if (rc != XPCOM.NS_OK) error (rc);
-			int length = XPCOM.nsEmbedCString_Length (aSpec);
-			int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
-			byte[] bytes = new byte[length];
-			XPCOM.memmove (bytes, buffer, length);
-			lastNavigateURL = new String (bytes);
-			XPCOM.nsEmbedCString_delete (aSpec);
-			uri.Release ();
+				nsIURI uri = new nsIURI (result[0]);
+				result[0] = 0;
+				int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
+				rc = uri.GetSpec (aSpec);
+				if (rc != XPCOM.NS_OK) error (rc);
+				int length = XPCOM.nsEmbedCString_Length (aSpec);
+				int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
+				byte[] bytes = new byte[length];
+				XPCOM.memmove (bytes, buffer, length);
+				lastNavigateURL = new String (bytes);
+				XPCOM.nsEmbedCString_delete (aSpec);
+				uri.Release ();
+			}
 		}
 
 		/*
@@ -3574,7 +3665,7 @@ int DestroyBrowserWindow () {
 	browser.dispose ();
 	return XPCOM.NS_OK;
 }
-   	
+
 int SizeBrowserTo (int aCX, int aCY) {
 	size = new Point (aCX, aCY);
 	boolean isChrome = (chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) != 0;
@@ -3626,18 +3717,26 @@ int ExitModalEventLoop (int aStatus) {
 	return XPCOM.NS_OK;
 }
 
-/* nsIEmbeddingSiteWindow */ 
+/* nsIEmbeddingSiteWindow */
 
 int SetDimensions (int flags, int x, int y, int cx, int cy) {
+	boolean isChrome = (chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) != 0;
 	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) != 0) {
 		location = new Point (x, y);
-		browser.getShell ().setLocation (x, y);
+		if (isChrome) {
+			browser.getShell ().setLocation (x, y);
+		}
 	}
 	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) != 0) {
-		browser.setSize (cx, cy);
+		size = new Point (cx, cy);
+		if (isChrome) {
+			browser.setSize (cx, cy);
+		}
 	}
 	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER) != 0) {
-		browser.getShell ().setSize (cx, cy);
+		if (isChrome) {
+			browser.getShell ().setSize (cx, cy);
+		}
 	}
 	return XPCOM.NS_OK;
 }
@@ -4306,6 +4405,7 @@ int HandleEvent (int /*long*/ event) {
 		rc = domMouseEvent.GetRelatedTarget (result);
 		if (rc != XPCOM.NS_OK) error (rc);
 		if (result[0] != 0) {
+			new nsISupports (result[0]).Release ();
 			domMouseEvent.Release ();
 			return XPCOM.NS_OK;
 		}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java
index 79be3c2..3d8d084 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOM.java	
@@ -22,7 +22,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Mozilla and SWT
- * -  Copyright (C) 2003, 2006 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2003, 2010 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 package org.eclipse.swt.internal.mozilla;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREProperty.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREProperty.java
new file mode 100644
index 0000000..d5935e3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREProperty.java	
@@ -0,0 +1,37 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2011 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla.init;
+
+/** @jniclass flags=cpp */
+public class GREProperty {
+	/** @field cast=(const char *) */
+	public int /*long*/ property;
+	/** @field cast=(const char *) */
+	public int /*long*/ value;
+    public static final int sizeof = XPCOMInit.GREProperty_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java
index da361dd..0ec838b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java	
@@ -1,13 +1,30 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
  *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2011 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
 package org.eclipse.swt.internal.mozilla.init;
 
 /** @jniclass flags=cpp */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java
index a746934..d8901f2 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java	
@@ -22,7 +22,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Mozilla and SWT
- * -  Copyright (C) 2003, 2006 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2003, 2011 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 package org.eclipse.swt.internal.mozilla.init;
@@ -32,7 +32,8 @@ import org.eclipse.swt.internal.Platform;
 /** @jniclass flags=cpp */
 public class XPCOMInit extends Platform {
 	public static final int PATH_MAX = 4096;
-	
+
+public static final native int GREProperty_sizeof ();
 public static final native int GREVersionRange_sizeof ();
 
 /**
@@ -40,8 +41,8 @@ public static final native int GREVersionRange_sizeof ();
  * @param properties cast=(const GREProperty *)
  * @param buffer cast=(char *)
  */
-public static final native int _GRE_GetGREPathWithProperties (GREVersionRange versions, int versionsLength, int /*long*/ properties, int propertiesLength, int /*long*/ buffer, int buflen);
-public static final int GRE_GetGREPathWithProperties (GREVersionRange versions, int versionsLength, int /*long*/ properties, int propertiesLength, int /*long*/ buffer, int buflen) {
+public static final native int _GRE_GetGREPathWithProperties (GREVersionRange versions, int versionsLength, GREProperty properties, int propertiesLength, int /*long*/ buffer, int buflen);
+public static final int GRE_GetGREPathWithProperties (GREVersionRange versions, int versionsLength, GREProperty properties, int propertiesLength, int /*long*/ buffer, int buflen) {
 	lock.lock();
 	try {
 		return _GRE_GetGREPathWithProperties(versions, versionsLength, properties, propertiesLength, buffer, buflen);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java
index 7857539..1053001 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java	
@@ -1,13 +1,30 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
  *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2011 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
 package org.eclipse.swt.internal.mozilla;
 
 public class nsDynamicFunctionLoad {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsID.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsID.java
index 716aab3..9e2a28b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsID.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsID.java	
@@ -22,7 +22,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Mozilla and SWT
- * -  Copyright (C) 2003, 2004 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2003, 2010 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 package org.eclipse.swt.internal.mozilla;
@@ -36,6 +36,8 @@ public class nsID {
 	public byte[] m3 = new byte[8];
 	public static final int sizeof = 16;
 
+	static final String zeros = "00000000"; //$NON-NLS-1$
+
 public nsID() {
 }
 
@@ -118,4 +120,21 @@ public void Parse(String aIDStr) {
 	}
 }
 
+static String toHex (int v, int length) {
+	String t = Integer.toHexString (v).toUpperCase ();
+	int tlen = t.length ();
+	if (tlen > length) {
+		t = t.substring (tlen - length);
+	}
+	return zeros.substring (0, Math.max (0, length - tlen)) + t;
+}
+
+public String toString () {
+	return '{' + toHex (m0, 8) + '-' + 
+    	toHex (m1, 4) + '-' + 
+    	toHex (m2, 4) + '-' + 
+    	toHex (m3[0], 2) + toHex (m3[1], 2) + '-' + 
+    	toHex (m3[2], 2) + toHex (m3[3], 2) + toHex (m3[4], 2) + toHex (m3[5], 2) + toHex (m3[6], 2) + toHex (m3[7], 2) + '}';
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrefBranch.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrefBranch.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrefLocalizedString.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrefLocalizedString.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrefService.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrefService.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
index e2dda62..d5de1b3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -113,7 +113,7 @@ String getProfilePath () {
 	return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
 }
 
-String getSWTInitLibraryName () {
+static String GetSWTInitLibraryName () {
 	return "swt-xpcominit"; //$NON-NLS-1$
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java
index 3a6c5bd..f008779 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -125,7 +125,7 @@ String getProfilePath () {
 	return baseDir + Mozilla.SEPARATOR_OS + ".mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
 }
 
-String getSWTInitLibraryName () {
+static String GetSWTInitLibraryName () {
 	return "swt-xpcominit"; //$NON-NLS-1$
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
index f7bb342..aee87e7 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ String getProfilePath () {
 	return baseDir + Mozilla.SEPARATOR_OS + "Mozilla" + Mozilla.SEPARATOR_OS + "eclipse"; //$NON-NLS-1$ //$NON-NLS-2$
 }
 
-String getSWTInitLibraryName () {
+static String GetSWTInitLibraryName () {
 	return "swt-xulrunner"; //$NON-NLS-1$
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/internal/ole/win32/COMObject.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/internal/ole/win32/COMObject.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OLE.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OLE.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleAutomation.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleAutomation.java
old mode 100644
new mode 100755
index 96856e3..62cf4b1
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleAutomation.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleAutomation.java	
@@ -150,9 +150,10 @@ public OleAutomation(String progId) {
 			OS.OleUninitialize();
 			OLE.error(OLE.ERROR_INVALID_CLASSID);
 		}
-		
+		int flags = COM.CLSCTX_INPROC_SERVER;
+		if (progId.startsWith("Excel")) flags |= COM.CLSCTX_LOCAL_SERVER; //$NON-NLS-1$
 		int /*long*/[] ppvObject = new int /*long*/[1];
-		int result = COM.CoCreateInstance(appClsid, 0, COM.CLSCTX_INPROC_SERVER, COM.IIDIUnknown, ppvObject); 
+		int result = COM.CoCreateInstance(appClsid, 0, flags, COM.IIDIUnknown, ppvObject); 
 		if (result != COM.S_OK) {
 			OS.OleUninitialize();
 			OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleClientSite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleClientSite.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleEventSink.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleEventSink.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleEventTable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleEventTable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleFrame.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleFrame.java
old mode 100644
new mode 100755
index cbc6210..560d792
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleFrame.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleFrame.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleFunctionDescription.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleFunctionDescription.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleParameterDescription.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleParameterDescription.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OlePropertyChangeSink.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OlePropertyChangeSink.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OlePropertyDescription.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OlePropertyDescription.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/Variant.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/Variant.java
old mode 100644
new mode 100755
index 26c2ec7..d7a541f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/Variant.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/Variant.java	
@@ -41,6 +41,17 @@ public final class Variant {
 	private IDispatch dispatchData;
 	private IUnknown unknownData;
 
+	/**
+	 * A shared Variant instance with type VT_NULL.
+	 * 
+	 * @since 3.7
+	 */
+	public static final Variant NULL;
+	static {
+		NULL = new Variant ();
+		NULL.type = COM.VT_NULL;
+	}
+
 /**	 
  * Invokes platform specific functionality to copy a variant
  * into operating system memory.
@@ -93,7 +104,7 @@ public static Variant win32_new (int /*long*/ pVariant) {
  * 
  * @since 2.0
  */	
-public Variant(){
+public Variant() {
 	type = COM.VT_EMPTY;
 }
 /**
@@ -105,7 +116,6 @@ public Variant(){
 public Variant(float val) {
 	type = COM.VT_R4;
 	floatData = val;
-	
 }
 /**
  * Create a Variant object which represents a Java double as a VT_R8.
@@ -899,7 +909,6 @@ public void setByRef(short val) {
 	}
 	COM.MoveMemory(byRefPtr, new short[]{val}, 2);
 }
-
 void setData(int /*long*/ pData){
 	if (pData == 0) OLE.error(OLE.ERROR_INVALID_ARGUMENT);
 
@@ -1017,7 +1026,6 @@ void setData(int /*long*/ pData){
 			break;
 	}
 }
-
 /**
  * Returns a string containing a concise, human-readable
  * description of the receiver.
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/carbon/org/eclipse/swt/opengl/GLCanvas.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/carbon/org/eclipse/swt/opengl/GLCanvas.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/cocoa/org/eclipse/swt/opengl/GLCanvas.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/cocoa/org/eclipse/swt/opengl/GLCanvas.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/common/org/eclipse/swt/opengl/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/common/org/eclipse/swt/opengl/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/glx/org/eclipse/swt/internal/opengl/glx/GLX.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/glx/org/eclipse/swt/internal/opengl/glx/GLX.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/glx/org/eclipse/swt/internal/opengl/glx/XVisualInfo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/glx/org/eclipse/swt/internal/opengl/glx/XVisualInfo.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/win32/org/eclipse/swt/internal/opengl/win32/LAYERPLANEDESCRIPTOR.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/win32/org/eclipse/swt/internal/opengl/win32/LAYERPLANEDESCRIPTOR.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/win32/org/eclipse/swt/internal/opengl/win32/PIXELFORMATDESCRIPTOR.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/win32/org/eclipse/swt/internal/opengl/win32/PIXELFORMATDESCRIPTOR.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/win32/org/eclipse/swt/internal/opengl/win32/WGL.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT OpenGL/win32/org/eclipse/swt/internal/opengl/win32/WGL.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.c
index cbdd5b1..e9ed5ad 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.c	
@@ -15,7 +15,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Cairo and SWT
- * -  Copyright (C) 2005, 2008 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2005, 2009 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.h
index eb79671..0500b3b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo.h	
@@ -15,7 +15,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Cairo and SWT
- * -  Copyright (C) 2005, 2006 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2005, 2009 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h
old mode 100644
new mode 100755
index 44c5e55..0eb3d23
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h	
@@ -15,7 +15,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Cairo and SWT
- * -  Copyright (C) 2005, 2006 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2005, 2010 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.c
index 57be51f..b387ce3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.c	
@@ -15,7 +15,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Cairo and SWT
- * -  Copyright (C) 2005, 2008 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2005, 2009 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.h
index 1b2a1b5..f5f3bbf 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_stats.h	
@@ -15,7 +15,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Cairo and SWT
- * -  Copyright (C) 2005, 2008 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2005, 2009 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.c
index 3225703..085d180 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.c	
@@ -15,7 +15,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Cairo and SWT
- * -  Copyright (C) 2005, 2008 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2005, 2009 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.h
index 3a87645..1e0ece9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_structs.h	
@@ -15,7 +15,7 @@
  *
  * IBM
  * -  Binding to permit interfacing between Cairo and SWT
- * -  Copyright (C) 2005, 2008 IBM Corp.  All Rights Reserved.
+ * -  Copyright (C) 2005, 2009 IBM Corp.  All Rights Reserved.
  *
  * ***** END LICENSE BLOCK ***** */
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/build.sh b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/build.sh
old mode 100755
new mode 100644
index c001240..9b912da
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/build.sh	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/build.sh	
@@ -1,6 +1,6 @@
 #!/bin/sh
 #*******************************************************************************
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -16,6 +16,6 @@ OUTPUT_DIR=../../../org.eclipse.swt.carbon.macosx
 
 export OUTPUT_DIR
 
-export MACOSX_DEPLOYMENT_TARGET=10.3
+export MACOSX_DEPLOYMENT_TARGET=10.4
 
 make -f make_macosx.mak $1 $2 $3 $4 $5 $6 $7 $8 $9
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c
old mode 100644
new mode 100755
index b7b7438..43c9cab
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,40 +66,48 @@ fail:
     return self;
 }
 
+- (void)setUserData:(int)data {
+    user_data = data;
+}
+
+- (void)setProc:(id)prc {
+    proc= (void *) prc;
+}
+
 - (void)mouseDown:(NSEvent *)event
 {
-	proc((int)self, user_data, 0, event);
+	if (proc) proc((int)self, user_data, 0, event);
 }
 
 - (void)mouseUp:(NSEvent *)event
 {
-	proc((int)self, user_data, 1, event);
+	if (proc) proc((int)self, user_data, 1, event);
 }
 
 - (void)rightMouseDown:(NSEvent *)event
 {
-	proc((int)self, user_data, 2, event);
+	if (proc) proc((int)self, user_data, 2, event);
 }
 
 - (void)drawRect:(NSRect) rect
 {
-	proc((int)self, user_data, 3, &rect);
+	if (proc) proc((int)self, user_data, 3, &rect);
 	[super drawRect: rect];
 }
 
 - (void)rightMouseUp:(NSEvent *)event
 {
-	proc((int)self, user_data, 4, event);
+	if (proc) proc((int)self, user_data, 4, event);
 }
 
 - (void)mouseDragged:(NSEvent *)event
 {
-	proc((int)self, user_data, 5, event);
+	if (proc) proc((int)self, user_data, 5, event);
 }
 
 - (void)rightMouseDragged:(NSEvent *)event
 {
-	proc((int)self, user_data, 6, event);
+	if (proc) proc((int)self, user_data, 6, event);
 }
 @end
 
@@ -324,12 +332,12 @@ fail:
 
 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
 {
-	return !(aSelector == @selector(callJava:index:arg:) || aSelector == @selector(callRunBeforeUnloadConfirmPanelWithMessage:arg:));
+	return !(aSelector == @selector(callJava:index:token:arg:) || aSelector == @selector(callRunBeforeUnloadConfirmPanelWithMessage:arg:));
 }
 
 + (NSString *)webScriptNameForSelector:(SEL)aSelector
 {
-	if (aSelector == @selector(callJava:index:arg:)) {
+	if (aSelector == @selector(callJava:index:token:arg:)) {
 		return @"callJava";
 	}
 	if (aSelector == @selector(callRunBeforeUnloadConfirmPanelWithMessage:arg:)) {
@@ -340,9 +348,9 @@ fail:
 
 /* external */
 
-- (id)callJava:(NSObject *)arg index:(NSObject *)index arg:(NSObject *)arg0
+- (id)callJava:(NSObject *)arg index:(NSObject *)index token:(NSObject *)token arg:(NSObject *)arg0
 {
-	return (id)proc(0, user_data, 34, (int)arg, (int)index, (int)arg0, 0);
+	return (id)proc(0, user_data, 34, (int)arg, (int)index, (int)token, (int)arg0);
 }
 
 - (id)callRunBeforeUnloadConfirmPanelWithMessage:(NSString *)arg arg:(NSObject *)arg0
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.h
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/make_macosx.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/make_macosx.mak
index bf0cf51..7b62386 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/make_macosx.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/make_macosx.mak	
@@ -31,7 +31,7 @@ XULRUNNER_LIB=lib$(SWTXULRUNNER_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).jnilib
 
 #SWT_DEBUG = -g
 ARCHS = -arch i386 -arch ppc
-CFLAGS = -c -Wall $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS) $(SWT_DEBUG) -DUSE_ASSEMBLER -DCARBON -I /System/Library/Frameworks/JavaVM.framework/Headers -I /System/Library/Frameworks/JavaScriptCore.framework/Headers
+CFLAGS = -c -Wall -Wno-deprecated-declarations $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS) $(SWT_DEBUG) -DUSE_ASSEMBLER -DCARBON -I /System/Library/Frameworks/Security.framework/Headers -I /System/Library/Frameworks/JavaVM.framework/Headers -I /System/Library/Frameworks/JavaScriptCore.framework/Headers
 LFLAGS = -bundle $(ARCHS) -framework JavaVM -framework Carbon -framework JavaScriptCore -framework Security -framework SecurityInterface
 COCOACFLAGS = $(CFLAGS) -xobjective-c -I /System/Library/Frameworks/Cocoa.framework/Headers -I /System/Library/Frameworks/WebKit.framework/Headers
 COCOALFLAGS = $(LFLAGS) -framework WebKit -framework Cocoa
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c
index 08d6923..bda460f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,6 +173,18 @@ fail:
 }
 #endif
 
+#ifndef NO_AERemoveEventHandler
+JNIEXPORT jint JNICALL OS_NATIVE(AERemoveEventHandler)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, AERemoveEventHandler_FUNC);
+	rc = (jint)AERemoveEventHandler((AEEventClass)arg0, (AEEventID)arg1, (AEEventHandlerUPP)arg2, arg3);
+	OS_NATIVE_EXIT(env, that, AERemoveEventHandler_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_ATSFontActivateFromFileSpecification
 JNIEXPORT jint JNICALL OS_NATIVE(ATSFontActivateFromFileSpecification)
 	(JNIEnv *env, jclass that, jbyteArray arg0, jint arg1, jint arg2, jint arg3, jint arg4, jintArray arg5)
@@ -2880,6 +2892,26 @@ fail:
 }
 #endif
 
+#ifndef NO_CGImageCreateCopy
+JNIEXPORT jint JNICALL OS_NATIVE(CGImageCreateCopy)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGImageCreateCopy_FUNC);
+/*
+	rc = (jint)CGImageCreateCopy(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, CGImageCreateCopy)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(jint))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, CGImageCreateCopy_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CGImageCreateWithImageInRect
 JNIEXPORT jint JNICALL OS_NATIVE(CGImageCreateWithImageInRect)
 	(JNIEnv *env, jclass that, jint arg0, jobject arg1)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.h
index e8664d0..f7c7b1c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.h	
@@ -14,12 +14,11 @@
 
 /*#define NDEBUG*/
 
-#include <Carbon/Carbon.h>
 #include <sys/types.h>
 #include <unistd.h>
-
-#include <JavaScriptCore/JSBase.h>
-#include <JavaScriptCore/JSStringRef.h>
+#include <Carbon/Carbon.h>
+#include <Security/Security.h>
+#include <JavaScriptCore/JavaScriptCore.h>
 
 #include "os_custom.h"
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h
index f77483f..0c66ec8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 
 /* Libraries for dynamic loaded functions */
 #define CGBitmapContextCreateImage_LIB "com.apple.Carbon"
+#define CGImageCreateCopy_LIB "com.apple.Carbon"
 #define CGImageCreateWithImageInRect_LIB "com.apple.Carbon"
 #define CGContextSetBlendMode_LIB "com.apple.Carbon"
 #define DataBrowserChangeAttributes_LIB "com.apple.Carbon"
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c
index 3bc62d6..ae3a9c1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,8 @@
 
 #ifdef NATIVE_STATS
 
-int OS_nativeFunctionCount = 1013;
-int OS_nativeFunctionCallCount[1013];
+int OS_nativeFunctionCount = 1015;
+int OS_nativeFunctionCallCount[1015];
 char * OS_nativeFunctionNames[] = {
 	"AECoerceDesc",
 	"AECountItems",
@@ -26,6 +26,7 @@ char * OS_nativeFunctionNames[] = {
 	"AEGetParamDesc",
 	"AEInstallEventHandler",
 	"AEProcessAppleEvent",
+	"AERemoveEventHandler",
 	"ATSFontActivateFromFileSpecification",
 	"ATSFontDeactivate",
 	"ATSFontFindFromName",
@@ -238,6 +239,7 @@ char * OS_nativeFunctionNames[] = {
 	"CGFunctionRelease",
 	"CGGetDisplaysWithRect",
 	"CGImageCreate",
+	"CGImageCreateCopy",
 	"CGImageCreateWithImageInRect",
 	"CGImageCreateWithJPEGDataProvider",
 	"CGImageCreateWithPNGDataProvider",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h
index 8bc2379..32d3640 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ typedef enum {
 	AEGetParamDesc_FUNC,
 	AEInstallEventHandler_FUNC,
 	AEProcessAppleEvent_FUNC,
+	AERemoveEventHandler_FUNC,
 	ATSFontActivateFromFileSpecification_FUNC,
 	ATSFontDeactivate_FUNC,
 	ATSFontFindFromName_FUNC,
@@ -246,6 +247,7 @@ typedef enum {
 	CGFunctionRelease_FUNC,
 	CGGetDisplaysWithRect_FUNC,
 	CGImageCreate_FUNC,
+	CGImageCreateCopy_FUNC,
 	CGImageCreateWithImageInRect_FUNC,
 	CGImageCreateWithJPEGDataProvider_FUNC,
 	CGImageCreateWithPNGDataProvider_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java
index 95f92d1..9881449 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java	
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2010 IBM Corp.
+ * Copyright (c) 2003, 2011 IBM Corp.
  * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
  *
  * All rights reserved.  This program and the accompanying materials
@@ -1155,6 +1155,12 @@ public static final native int AEGetParamDesc (int theAppleEvent, int theAEKeywo
  * @param handlerRefcon cast=(long)
  */
 public static final native int AEInstallEventHandler(int theAEEventClass, int theAEEventID, int handler, int handlerRefcon, boolean isSysHandler);  
+/**
+ * @param theAEEventClass cast=(AEEventClass)
+ * @param theAEEventID cast=(AEEventID)
+ * @param handler cast=(AEEventHandlerUPP)
+ */
+public static final native int AERemoveEventHandler (int theAEEventClass, int theAEEventID, int handler, boolean isSysHandler);
 /** @param theEventRecord cast=(const EventRecord *) */
 public static final native int AEProcessAppleEvent(EventRecord theEventRecord);
 /**
@@ -2080,6 +2086,10 @@ public static final native int CGGetDisplaysWithRect (CGRect rect, int maxDispla
 public static final native int CGImageCreate (int width, int height, int bitsPerComponent, int bitsPerPixel, int bytesPerRow, int colorspace, int alphaInfo, int provider, float[] decode, boolean shouldInterpolate, int intent);
 /**
  * @method flags=dynamic
+ */
+public static final native int CGImageCreateCopy (int image);
+/**
+ * @method flags=dynamic
  * @param rect flags=struct
  */
 public static final native int CGImageCreateWithImageInRect(int image, CGRect rect);
@@ -5700,7 +5710,7 @@ public static final String kAXDateFieldRole    = "AXDateField";
 public static final String kAXHelpTagRole      = "AXHelpTag";
 public static final String kAXMatteRole        = "AXMatteRole";
 public static final String kAXDockItemRole     = "AXDockItem";
-public static final String kAXLinkRole         = "AXLink";  // as seen in Safari
+public static final String kAXLinkRole         = "AXLink";  // as seen in WebKit
 
 public static final String kAXCloseButtonSubrole       = "AXCloseButton";
 public static final String kAXMinimizeButtonSubrole    = "AXMinimizeButton";
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java
old mode 100644
new mode 100755
index 3239d4d..a1b3b9f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -242,6 +242,8 @@ public static final int S_setHTTPMethod = Cocoa.sel_registerName("setHTTPMethod:
 public static final int S_setCustomUserAgent = Cocoa.sel_registerName("setCustomUserAgent:"); //$NON-NLS-1$
 public static final int S_setValueForHTTPHeaderField = Cocoa.sel_registerName("setValue:forHTTPHeaderField:"); //$NON-NLS-1$
 public static final int S_locationInWindow = sel_registerName("locationInWindow");
+public static final int S_setUserData = Cocoa.sel_registerName("setUserData:"); //$NON-NLS-1$
+public static final int S_setProc = Cocoa.sel_registerName("setProc:"); //$NON-NLS-1$
 
 public static final int NSAlphaFirstBitmapFormat = 1 << 0;
 public static final int NSAlphaNonpremultipliedBitmapFormat = 1 << 1;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSSize.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSSize.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
old mode 100644
new mode 100755
index 7520cd7..4ae25a0
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak	
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -44,9 +44,9 @@ XULRUNNERCFLAGS = -c -Wall $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS)
 	-Wno-non-virtual-dtor -include ${XULRUNNER_SDK}/include/mozilla-config.h -I${XULRUNNER_SDK}/include 
 XULRUNNERLFLAGS = $(LFLAGS)
 
-all: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB)
+all: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB) #$(XULRUNNER_LIB)
 
-all_x86_64: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB)
+all_x86_64: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB) #$(XULRUNNER_LIB)
 
 .c.o:
 	cc $(CFLAGS) $*.c
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c
index 4cb1a6e..27fa0b1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c	
@@ -206,6 +206,34 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1cellSize)
 }
 #endif
 
+#ifndef NO_CALLBACK_1cellSizeForBounds_1
+static jintLong CALLBACK_1cellSizeForBounds_1;
+static NSSize proc_CALLBACK_1cellSizeForBounds_1(id arg0, SEL arg1, NSRect arg2) {
+	NSSize* lprc = ((NSSize* (*)(id, SEL, NSRect*))CALLBACK_1cellSizeForBounds_1)(arg0, arg1, &arg2);
+	NSSize rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSSize));
+	}
+	return rc;
+}
+static jintLong CALLBACK_cellSizeForBounds_(jintLong func) {
+	CALLBACK_1cellSizeForBounds_1 = func;
+	return (jintLong)proc_CALLBACK_1cellSizeForBounds_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1cellSizeForBounds_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1cellSizeForBounds_1_FUNC);
+	rc = (jintLong)CALLBACK_cellSizeForBounds_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1cellSizeForBounds_1_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CALLBACK_1characterIndexForPoint_1
 static jintLong CALLBACK_1characterIndexForPoint_1;
 static NSUInteger proc_CALLBACK_1characterIndexForPoint_1(id arg0, SEL arg1, NSPoint arg2) {
@@ -226,6 +254,26 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1characterIndexForPoint_1)
 }
 #endif
 
+#ifndef NO_CALLBACK_1columnAtPoint_1
+static jintLong CALLBACK_1columnAtPoint_1;
+static NSInteger proc_CALLBACK_1columnAtPoint_1(id arg0, SEL arg1, NSPoint arg2) {
+	return ((NSInteger (*)(id, SEL, NSPoint*))CALLBACK_1columnAtPoint_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_columnAtPoint_(jintLong func) {
+	CALLBACK_1columnAtPoint_1 = func;
+	return (jintLong)proc_CALLBACK_1columnAtPoint_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1columnAtPoint_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1columnAtPoint_1_FUNC);
+	rc = (jintLong)CALLBACK_columnAtPoint_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1columnAtPoint_1_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1
 static jintLong CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1;
 static BOOL proc_CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1(id arg0, SEL arg1, NSEvent* arg2, NSSize arg3, BOOL arg4) {
@@ -386,6 +434,34 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1drawRect_1)
 }
 #endif
 
+#ifndef NO_CALLBACK_1drawTitle_1withFrame_1inView_1
+static jintLong CALLBACK_1drawTitle_1withFrame_1inView_1;
+static NSRect proc_CALLBACK_1drawTitle_1withFrame_1inView_1(id arg0, SEL arg1, NSAttributedString* arg2, NSRect arg3, NSView* arg4) {
+	NSRect* lprc = ((NSRect* (*)(id, SEL, NSAttributedString*, NSRect*, NSView*))CALLBACK_1drawTitle_1withFrame_1inView_1)(arg0, arg1, arg2, &arg3, arg4);
+	NSRect rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRect));
+	}
+	return rc;
+}
+static jintLong CALLBACK_drawTitle_withFrame_inView_(jintLong func) {
+	CALLBACK_1drawTitle_1withFrame_1inView_1 = func;
+	return (jintLong)proc_CALLBACK_1drawTitle_1withFrame_1inView_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1drawTitle_1withFrame_1inView_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1drawTitle_1withFrame_1inView_1_FUNC);
+	rc = (jintLong)CALLBACK_drawTitle_withFrame_inView_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1drawTitle_1withFrame_1inView_1_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CALLBACK_1drawViewBackgroundInRect_1
 static jintLong CALLBACK_1drawViewBackgroundInRect_1;
 static void proc_CALLBACK_1drawViewBackgroundInRect_1(id arg0, SEL arg1, NSRect arg2) {
@@ -482,6 +558,34 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1firstRectForCharacterRange_1)
 }
 #endif
 
+#ifndef NO_CALLBACK_1headerRectOfColumn_1
+static jintLong CALLBACK_1headerRectOfColumn_1;
+static NSRect proc_CALLBACK_1headerRectOfColumn_1(id arg0, SEL arg1, NSInteger arg2) {
+	NSRect* lprc = ((NSRect* (*)(id, SEL, NSInteger))CALLBACK_1headerRectOfColumn_1)(arg0, arg1, arg2);
+	NSRect rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRect));
+	}
+	return rc;
+}
+static jintLong CALLBACK_headerRectOfColumn_(jintLong func) {
+	CALLBACK_1headerRectOfColumn_1 = func;
+	return (jintLong)proc_CALLBACK_1headerRectOfColumn_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1headerRectOfColumn_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1headerRectOfColumn_1_FUNC);
+	rc = (jintLong)CALLBACK_headerRectOfColumn_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1headerRectOfColumn_1_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CALLBACK_1highlightSelectionInClipRect_1
 static jintLong CALLBACK_1highlightSelectionInClipRect_1;
 static void proc_CALLBACK_1highlightSelectionInClipRect_1(id arg0, SEL arg1, NSRect arg2) {
@@ -1186,6 +1290,20 @@ JNIEXPORT void JNICALL OS_NATIVE(CGContextAddPath)
 }
 #endif
 
+#ifndef NO_CGContextBeginTransparencyLayerWithRect
+JNIEXPORT void JNICALL OS_NATIVE(CGContextBeginTransparencyLayerWithRect)
+	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+{
+	CGRect _arg1, *lparg1=NULL;
+	OS_NATIVE_ENTER(env, that, CGContextBeginTransparencyLayerWithRect_FUNC);
+	if (arg1) if ((lparg1 = getCGRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	CGContextBeginTransparencyLayerWithRect((CGContextRef)arg0, *lparg1, (CFDictionaryRef)arg2);
+fail:
+	if (arg1 && lparg1) setCGRectFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, CGContextBeginTransparencyLayerWithRect_FUNC);
+}
+#endif
+
 #ifndef NO_CGContextCopyPath
 JNIEXPORT jintLong JNICALL OS_NATIVE(CGContextCopyPath)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -1245,6 +1363,16 @@ fail:
 }
 #endif
 
+#ifndef NO_CGContextEndTransparencyLayer
+JNIEXPORT void JNICALL OS_NATIVE(CGContextEndTransparencyLayer)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGContextEndTransparencyLayer_FUNC);
+	CGContextEndTransparencyLayer((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGContextEndTransparencyLayer_FUNC);
+}
+#endif
+
 #ifndef NO_CGContextFillRect
 JNIEXPORT void JNICALL OS_NATIVE(CGContextFillRect)
 	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
@@ -1555,18 +1683,6 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayPixelsWide)
 }
 #endif
 
-#ifndef NO_CGEnableEventStateCombining
-JNIEXPORT jint JNICALL OS_NATIVE(CGEnableEventStateCombining)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jint rc = 0;
-	OS_NATIVE_ENTER(env, that, CGEnableEventStateCombining_FUNC);
-	rc = (jint)CGEnableEventStateCombining((boolean_t)arg0);
-	OS_NATIVE_EXIT(env, that, CGEnableEventStateCombining_FUNC);
-	return rc;
-}
-#endif
-
 #ifndef NO_CGEventCreateKeyboardEvent
 JNIEXPORT jintLong JNICALL OS_NATIVE(CGEventCreateKeyboardEvent)
 	(JNIEnv *env, jclass that, jintLong arg0, jshort arg1, jboolean arg2)
@@ -1579,6 +1695,34 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CGEventCreateKeyboardEvent)
 }
 #endif
 
+#ifndef NO_CGEventCreateMouseEvent
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGEventCreateMouseEvent)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jobject arg2, jint arg3)
+{
+	CGPoint _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGEventCreateMouseEvent_FUNC);
+	if (arg2) if ((lparg2 = getCGPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)CGEventCreateMouseEvent((CGEventSourceRef)arg0, (CGEventType)arg1, *lparg2, (CGMouseButton)arg3);
+fail:
+	if (arg2 && lparg2) setCGPointFields(env, arg2, lparg2);
+	OS_NATIVE_EXIT(env, that, CGEventCreateMouseEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGEventCreateScrollWheelEvent
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGEventCreateScrollWheelEvent)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jint arg2, jint arg3)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGEventCreateScrollWheelEvent_FUNC);
+	rc = (jintLong)CGEventCreateScrollWheelEvent((CGEventSourceRef)arg0, (CGScrollEventUnit)arg1, (CGWheelCount)arg2, (int32_t)arg3);
+	OS_NATIVE_EXIT(env, that, CGEventCreateScrollWheelEvent_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CGEventGetIntegerValueField
 JNIEXPORT jlong JNICALL OS_NATIVE(CGEventGetIntegerValueField)
 	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
@@ -1591,20 +1735,6 @@ JNIEXPORT jlong JNICALL OS_NATIVE(CGEventGetIntegerValueField)
 }
 #endif
 
-#ifndef NO_CGEventKeyboardSetUnicodeString
-JNIEXPORT void JNICALL OS_NATIVE(CGEventKeyboardSetUnicodeString)
-	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2)
-{
-	jchar *lparg2=NULL;
-	OS_NATIVE_ENTER(env, that, CGEventKeyboardSetUnicodeString_FUNC);
-	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	CGEventKeyboardSetUnicodeString((CGEventRef)arg0, (UniCharCount)arg1, (UniChar*)lparg2);
-fail:
-	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
-	OS_NATIVE_EXIT(env, that, CGEventKeyboardSetUnicodeString_FUNC);
-}
-#endif
-
 #ifndef NO_CGEventPost
 JNIEXPORT void JNICALL OS_NATIVE(CGEventPost)
 	(JNIEnv *env, jclass that, jint arg0, jintLong arg1)
@@ -1615,6 +1745,18 @@ JNIEXPORT void JNICALL OS_NATIVE(CGEventPost)
 }
 #endif
 
+#ifndef NO_CGEventSourceCreate
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGEventSourceCreate)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGEventSourceCreate_FUNC);
+	rc = (jintLong)CGEventSourceCreate((CGEventSourceStateID)arg0);
+	OS_NATIVE_EXIT(env, that, CGEventSourceCreate_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CGGetDisplaysWithRect
 JNIEXPORT jint JNICALL OS_NATIVE(CGGetDisplaysWithRect)
 	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jintLong arg2, jintLong arg3)
@@ -1811,34 +1953,6 @@ JNIEXPORT jint JNICALL OS_NATIVE(CGPostKeyboardEvent)
 }
 #endif
 
-#ifndef NO_CGPostMouseEvent
-JNIEXPORT jint JNICALL OS_NATIVE(CGPostMouseEvent)
-	(JNIEnv *env, jclass that, jobject arg0, jboolean arg1, jint arg2, jboolean arg3, jboolean arg4, jboolean arg5, jboolean arg6, jboolean arg7)
-{
-	CGPoint _arg0, *lparg0=NULL;
-	jint rc = 0;
-	OS_NATIVE_ENTER(env, that, CGPostMouseEvent_FUNC);
-	if (arg0) if ((lparg0 = getCGPointFields(env, arg0, &_arg0)) == NULL) goto fail;
-	rc = (jint)CGPostMouseEvent(*lparg0, (boolean_t)arg1, (CGButtonCount)arg2, (boolean_t)arg3, arg4, arg5, arg6, arg7);
-fail:
-	if (arg0 && lparg0) setCGPointFields(env, arg0, lparg0);
-	OS_NATIVE_EXIT(env, that, CGPostMouseEvent_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_CGPostScrollWheelEvent
-JNIEXPORT jint JNICALL OS_NATIVE(CGPostScrollWheelEvent)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	jint rc = 0;
-	OS_NATIVE_ENTER(env, that, CGPostScrollWheelEvent_FUNC);
-	rc = (jint)CGPostScrollWheelEvent((CGWheelCount)arg0, (int32_t)arg1);
-	OS_NATIVE_EXIT(env, that, CGPostScrollWheelEvent_FUNC);
-	return rc;
-}
-#endif
-
 #ifndef NO_CGRect_1sizeof
 JNIEXPORT jint JNICALL OS_NATIVE(CGRect_1sizeof)
 	(JNIEnv *env, jclass that)
@@ -2129,6 +2243,24 @@ JNIEXPORT void JNICALL OS_NATIVE(DeleteGlobalRef)
 }
 #endif
 
+#ifndef NO_DeleteMenuItem
+JNIEXPORT void JNICALL OS_NATIVE(DeleteMenuItem)
+	(JNIEnv *env, jclass that, jintLong arg0, jshort arg1)
+{
+	OS_NATIVE_ENTER(env, that, DeleteMenuItem_FUNC);
+/*
+	DeleteMenuItem((MenuRef)arg0, (short)arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, DeleteMenuItem)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(MenuRef, short))fp)((MenuRef)arg0, (short)arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, DeleteMenuItem_FUNC);
+}
+#endif
+
 #ifndef NO_DiffRgn
 JNIEXPORT void JNICALL OS_NATIVE(DiffRgn)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
@@ -2228,22 +2360,22 @@ fail:
 }
 #endif
 
-#ifndef NO_GetCurrentButtonState
-JNIEXPORT jint JNICALL OS_NATIVE(GetCurrentButtonState)
+#ifndef NO_GetCurrentEventButtonState
+JNIEXPORT jint JNICALL OS_NATIVE(GetCurrentEventButtonState)
 	(JNIEnv *env, jclass that)
 {
 	jint rc = 0;
-	OS_NATIVE_ENTER(env, that, GetCurrentButtonState_FUNC);
+	OS_NATIVE_ENTER(env, that, GetCurrentEventButtonState_FUNC);
 /*
-	rc = (jint)GetCurrentButtonState();
+	rc = (jint)GetCurrentEventButtonState();
 */
 	{
-		LOAD_FUNCTION(fp, GetCurrentButtonState)
+		LOAD_FUNCTION(fp, GetCurrentEventButtonState)
 		if (fp) {
 			rc = (jint)((jint (CALLING_CONVENTION*)())fp)();
 		}
 	}
-	OS_NATIVE_EXIT(env, that, GetCurrentButtonState_FUNC);
+	OS_NATIVE_EXIT(env, that, GetCurrentEventButtonState_FUNC);
 	return rc;
 }
 #endif
@@ -2284,6 +2416,57 @@ JNIEXPORT jint JNICALL OS_NATIVE(GetDblTime)
 }
 #endif
 
+#ifndef NO_GetIconRefFromTypeInfo
+JNIEXPORT jint JNICALL OS_NATIVE(GetIconRefFromTypeInfo)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintLong arg2, jintLong arg3, jint arg4, jintLongArray arg5)
+{
+	jintLong *lparg5=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GetIconRefFromTypeInfo_FUNC);
+	if (arg5) if ((lparg5 = (*env)->GetIntLongArrayElements(env, arg5, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)GetIconRefFromTypeInfo((OSType)arg0, (OSType)arg1, (CFStringRef)arg2, (CFStringRef)arg3, (IconServicesUsageFlags)arg4, (IconRef *)lparg5);
+*/
+	{
+		LOAD_FUNCTION(fp, GetIconRefFromTypeInfo)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(OSType, OSType, CFStringRef, CFStringRef, IconServicesUsageFlags, IconRef *))fp)((OSType)arg0, (OSType)arg1, (CFStringRef)arg2, (CFStringRef)arg3, (IconServicesUsageFlags)arg4, (IconRef *)lparg5);
+		}
+	}
+fail:
+	if (arg5 && lparg5) (*env)->ReleaseIntLongArrayElements(env, arg5, lparg5, 0);
+	OS_NATIVE_EXIT(env, that, GetIconRefFromTypeInfo_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetIndMenuItemWithCommandID
+JNIEXPORT jint JNICALL OS_NATIVE(GetIndMenuItemWithCommandID)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jint arg2, jintLongArray arg3, jshortArray arg4)
+{
+	jintLong *lparg3=NULL;
+	jshort *lparg4=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GetIndMenuItemWithCommandID_FUNC);
+	if (arg3) if ((lparg3 = (*env)->GetIntLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetShortArrayElements(env, arg4, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)GetIndMenuItemWithCommandID((MenuRef)arg0, (MenuCommand)arg1, (UInt32)arg2, (MenuRef *)lparg3, (MenuItemIndex *)lparg4);
+*/
+	{
+		LOAD_FUNCTION(fp, GetIndMenuItemWithCommandID)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(MenuRef, MenuCommand, UInt32, MenuRef *, MenuItemIndex *))fp)((MenuRef)arg0, (MenuCommand)arg1, (UInt32)arg2, (MenuRef *)lparg3, (MenuItemIndex *)lparg4);
+		}
+	}
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseShortArrayElements(env, arg4, lparg4, 0);
+	if (arg3 && lparg3) (*env)->ReleaseIntLongArrayElements(env, arg3, lparg3, 0);
+	OS_NATIVE_EXIT(env, that, GetIndMenuItemWithCommandID_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_GetRegionBounds
 JNIEXPORT void JNICALL OS_NATIVE(GetRegionBounds)
 	(JNIEnv *env, jclass that, jintLong arg0, jshortArray arg1)
@@ -2379,6 +2562,53 @@ fail:
 }
 #endif
 
+#ifndef NO_HIWindowFindAtLocation
+JNIEXPORT jint JNICALL OS_NATIVE(HIWindowFindAtLocation)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jintLong arg2, jint arg3, jintLongArray arg4, jintLongArray arg5, jintLong arg6)
+{
+	jintLong *lparg4=NULL;
+	jintLong *lparg5=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HIWindowFindAtLocation_FUNC);
+	if (arg4) if ((lparg4 = (*env)->GetIntLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	if (arg5) if ((lparg5 = (*env)->GetIntLongArrayElements(env, arg5, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)HIWindowFindAtLocation((HIPoint *)arg0, (HICoordinateSpace)arg1, (WindowRef)arg2, (OptionBits)arg3, (WindowRef *)lparg4, (WindowPartCode *)lparg5, (HIPoint *)arg6);
+*/
+	{
+		LOAD_FUNCTION(fp, HIWindowFindAtLocation)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(HIPoint *, HICoordinateSpace, WindowRef, OptionBits, WindowRef *, WindowPartCode *, HIPoint *))fp)((HIPoint *)arg0, (HICoordinateSpace)arg1, (WindowRef)arg2, (OptionBits)arg3, (WindowRef *)lparg4, (WindowPartCode *)lparg5, (HIPoint *)arg6);
+		}
+	}
+fail:
+	if (arg5 && lparg5) (*env)->ReleaseIntLongArrayElements(env, arg5, lparg5, 0);
+	if (arg4 && lparg4) (*env)->ReleaseIntLongArrayElements(env, arg4, lparg4, 0);
+	OS_NATIVE_EXIT(env, that, HIWindowFindAtLocation_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HIWindowGetCGWindowID
+JNIEXPORT jint JNICALL OS_NATIVE(HIWindowGetCGWindowID)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HIWindowGetCGWindowID_FUNC);
+/*
+	rc = (jint)HIWindowGetCGWindowID((WindowRef)arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, HIWindowGetCGWindowID)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(WindowRef))fp)((WindowRef)arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, HIWindowGetCGWindowID_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_JSEvaluateScript
 JNIEXPORT jintLong JNICALL OS_NATIVE(JSEvaluateScript)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jint arg4, jintLongArray arg5)
@@ -4271,6 +4501,20 @@ fail:
 }
 #endif
 
+#ifndef NO_NSCountWindows
+JNIEXPORT void JNICALL OS_NATIVE(NSCountWindows)
+	(JNIEnv *env, jclass that, jintLongArray arg0)
+{
+	jintLong *lparg0=NULL;
+	OS_NATIVE_ENTER(env, that, NSCountWindows_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetIntLongArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	NSCountWindows((NSInteger*)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseIntLongArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, NSCountWindows_FUNC);
+}
+#endif
+
 #ifndef NO_NSCursorAttributeName
 JNIEXPORT jintLong JNICALL OS_NATIVE(NSCursorAttributeName)
 	(JNIEnv *env, jclass that)
@@ -4453,6 +4697,18 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(NSHTMLPboardType)
 }
 #endif
 
+#ifndef NO_NSLigatureAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSLigatureAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSLigatureAttributeName_FUNC);
+	rc = (jintLong)NSLigatureAttributeName;
+	OS_NATIVE_EXIT(env, that, NSLigatureAttributeName_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_NSLinkAttributeName
 JNIEXPORT jintLong JNICALL OS_NATIVE(NSLinkAttributeName)
 	(JNIEnv *env, jclass that)
@@ -4465,6 +4721,18 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(NSLinkAttributeName)
 }
 #endif
 
+#ifndef NO_NSLocaleLanguageCode
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSLocaleLanguageCode)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSLocaleLanguageCode_FUNC);
+	rc = (jintLong)NSLocaleLanguageCode;
+	OS_NATIVE_EXIT(env, that, NSLocaleLanguageCode_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_NSModalPanelRunLoopMode
 JNIEXPORT jintLong JNICALL OS_NATIVE(NSModalPanelRunLoopMode)
 	(JNIEnv *env, jclass that)
@@ -4628,6 +4896,18 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintMustCollate)
 }
 #endif
 
+#ifndef NO_NSPrintOrientation
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintOrientation)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintOrientation_FUNC);
+	rc = (jintLong)NSPrintOrientation;
+	OS_NATIVE_EXIT(env, that, NSPrintOrientation_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_NSPrintPreviewJob
 JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintPreviewJob)
 	(JNIEnv *env, jclass that)
@@ -4712,6 +4992,20 @@ JNIEXPORT jint JNICALL OS_NATIVE(NSRange_1sizeof)
 }
 #endif
 
+#ifndef NO_NSRectFillUsingOperation
+JNIEXPORT void JNICALL OS_NATIVE(NSRectFillUsingOperation)
+	(JNIEnv *env, jclass that, jobject arg0, jintLong arg1)
+{
+	NSRect _arg0, *lparg0=NULL;
+	OS_NATIVE_ENTER(env, that, NSRectFillUsingOperation_FUNC);
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	NSRectFillUsingOperation(*lparg0, (NSCompositingOperation)arg1);
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, NSRectFillUsingOperation_FUNC);
+}
+#endif
+
 #ifndef NO_NSRect_1sizeof
 JNIEXPORT jint JNICALL OS_NATIVE(NSRect_1sizeof)
 	(JNIEnv *env, jclass that)
@@ -5012,43 +5306,141 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(NSViewGlobalFrameDidChangeNotification)
 }
 #endif
 
-#ifndef NO_NewGlobalRef
-JNIEXPORT jintLong JNICALL OS_NATIVE(NewGlobalRef)
-	(JNIEnv *env, jclass that, jobject arg0)
+#ifndef NO_NSWindowDidBecomeKeyNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSWindowDidBecomeKeyNotification)
+	(JNIEnv *env, jclass that)
 {
 	jintLong rc = 0;
-	OS_NATIVE_ENTER(env, that, NewGlobalRef_FUNC);
-	rc = (jintLong)(*env)->NewGlobalRef(env, arg0);
-	OS_NATIVE_EXIT(env, that, NewGlobalRef_FUNC);
+	OS_NATIVE_ENTER(env, that, NSWindowDidBecomeKeyNotification_FUNC);
+	rc = (jintLong)NSWindowDidBecomeKeyNotification;
+	OS_NATIVE_EXIT(env, that, NSWindowDidBecomeKeyNotification_FUNC);
 	return rc;
 }
 #endif
 
-#ifndef NO_NewRgn
-JNIEXPORT jintLong JNICALL OS_NATIVE(NewRgn)
+#ifndef NO_NSWindowDidDeminiaturizeNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSWindowDidDeminiaturizeNotification)
 	(JNIEnv *env, jclass that)
 {
 	jintLong rc = 0;
-	OS_NATIVE_ENTER(env, that, NewRgn_FUNC);
-/*
-	rc = (jintLong)NewRgn();
-*/
-	{
-		LOAD_FUNCTION(fp, NewRgn)
-		if (fp) {
-			rc = (jintLong)((jintLong (CALLING_CONVENTION*)())fp)();
-		}
-	}
-	OS_NATIVE_EXIT(env, that, NewRgn_FUNC);
+	OS_NATIVE_ENTER(env, that, NSWindowDidDeminiaturizeNotification_FUNC);
+	rc = (jintLong)NSWindowDidDeminiaturizeNotification;
+	OS_NATIVE_EXIT(env, that, NSWindowDidDeminiaturizeNotification_FUNC);
 	return rc;
 }
 #endif
 
-#ifndef NO_OffsetRgn
-JNIEXPORT void JNICALL OS_NATIVE(OffsetRgn)
-	(JNIEnv *env, jclass that, jintLong arg0, jshort arg1, jshort arg2)
+#ifndef NO_NSWindowDidMiniaturizeNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSWindowDidMiniaturizeNotification)
+	(JNIEnv *env, jclass that)
 {
-	OS_NATIVE_ENTER(env, that, OffsetRgn_FUNC);
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSWindowDidMiniaturizeNotification_FUNC);
+	rc = (jintLong)NSWindowDidMiniaturizeNotification;
+	OS_NATIVE_EXIT(env, that, NSWindowDidMiniaturizeNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSWindowDidMoveNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSWindowDidMoveNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSWindowDidMoveNotification_FUNC);
+	rc = (jintLong)NSWindowDidMoveNotification;
+	OS_NATIVE_EXIT(env, that, NSWindowDidMoveNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSWindowDidResignKeyNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSWindowDidResignKeyNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSWindowDidResignKeyNotification_FUNC);
+	rc = (jintLong)NSWindowDidResignKeyNotification;
+	OS_NATIVE_EXIT(env, that, NSWindowDidResignKeyNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSWindowDidResizeNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSWindowDidResizeNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSWindowDidResizeNotification_FUNC);
+	rc = (jintLong)NSWindowDidResizeNotification;
+	OS_NATIVE_EXIT(env, that, NSWindowDidResizeNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSWindowList
+JNIEXPORT void JNICALL OS_NATIVE(NSWindowList)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLongArray arg1)
+{
+	jintLong *lparg1=NULL;
+	OS_NATIVE_ENTER(env, that, NSWindowList_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntLongArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	NSWindowList((NSInteger)arg0, (NSInteger*)lparg1);
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntLongArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, NSWindowList_FUNC);
+}
+#endif
+
+#ifndef NO_NSWindowWillCloseNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSWindowWillCloseNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSWindowWillCloseNotification_FUNC);
+	rc = (jintLong)NSWindowWillCloseNotification;
+	OS_NATIVE_EXIT(env, that, NSWindowWillCloseNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NewGlobalRef
+JNIEXPORT jintLong JNICALL OS_NATIVE(NewGlobalRef)
+	(JNIEnv *env, jclass that, jobject arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NewGlobalRef_FUNC);
+	rc = (jintLong)(*env)->NewGlobalRef(env, arg0);
+	OS_NATIVE_EXIT(env, that, NewGlobalRef_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NewRgn
+JNIEXPORT jintLong JNICALL OS_NATIVE(NewRgn)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NewRgn_FUNC);
+/*
+	rc = (jintLong)NewRgn();
+*/
+	{
+		LOAD_FUNCTION(fp, NewRgn)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, NewRgn_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_OffsetRgn
+JNIEXPORT void JNICALL OS_NATIVE(OffsetRgn)
+	(JNIEnv *env, jclass that, jintLong arg0, jshort arg1, jshort arg2)
+{
+	OS_NATIVE_ENTER(env, that, OffsetRgn_FUNC);
 /*
 	OffsetRgn(arg0, arg1, arg2);
 */
@@ -5080,6 +5472,170 @@ JNIEXPORT void JNICALL OS_NATIVE(OpenRgn)
 }
 #endif
 
+#ifndef NO_PMGetDuplex
+JNIEXPORT jintLong JNICALL OS_NATIVE(PMGetDuplex)
+	(JNIEnv *env, jclass that, jintLong arg0, jintArray arg1)
+{
+	jint *lparg1=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, PMGetDuplex_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
+/*
+	rc = (jintLong)PMGetDuplex((PMPrintSettings)arg0, (PMDuplexMode *)lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, PMGetDuplex)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(PMPrintSettings, PMDuplexMode *))fp)((PMPrintSettings)arg0, (PMDuplexMode *)lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, PMGetDuplex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PMPrinterGetIndexedPrinterResolution
+JNIEXPORT jintLong JNICALL OS_NATIVE(PMPrinterGetIndexedPrinterResolution)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jobject arg2)
+{
+	PMResolution _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, PMPrinterGetIndexedPrinterResolution_FUNC);
+	if (arg2) if ((lparg2 = getPMResolutionFields(env, arg2, &_arg2)) == NULL) goto fail;
+/*
+	rc = (jintLong)PMPrinterGetIndexedPrinterResolution((PMPrinter)arg0, arg1, (PMResolution *)lparg2);
+*/
+	{
+		LOAD_FUNCTION(fp, PMPrinterGetIndexedPrinterResolution)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(PMPrinter, jint, PMResolution *))fp)((PMPrinter)arg0, arg1, (PMResolution *)lparg2);
+		}
+	}
+fail:
+	if (arg2 && lparg2) setPMResolutionFields(env, arg2, lparg2);
+	OS_NATIVE_EXIT(env, that, PMPrinterGetIndexedPrinterResolution_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PMPrinterGetOutputResolution
+JNIEXPORT jintLong JNICALL OS_NATIVE(PMPrinterGetOutputResolution)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+{
+	PMResolution _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, PMPrinterGetOutputResolution_FUNC);
+	if (arg2) if ((lparg2 = getPMResolutionFields(env, arg2, &_arg2)) == NULL) goto fail;
+/*
+	rc = (jintLong)PMPrinterGetOutputResolution((PMPrinter)arg0, (PMPrintSettings)arg1, (PMResolution *)lparg2);
+*/
+	{
+		LOAD_FUNCTION(fp, PMPrinterGetOutputResolution)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(PMPrinter, PMPrintSettings, PMResolution *))fp)((PMPrinter)arg0, (PMPrintSettings)arg1, (PMResolution *)lparg2);
+		}
+	}
+fail:
+	if (arg2 && lparg2) setPMResolutionFields(env, arg2, lparg2);
+	OS_NATIVE_EXIT(env, that, PMPrinterGetOutputResolution_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PMPrinterGetPrinterResolutionCount
+JNIEXPORT jintLong JNICALL OS_NATIVE(PMPrinterGetPrinterResolutionCount)
+	(JNIEnv *env, jclass that, jintLong arg0, jintArray arg1)
+{
+	jint *lparg1=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, PMPrinterGetPrinterResolutionCount_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
+/*
+	rc = (jintLong)PMPrinterGetPrinterResolutionCount((PMPrinter)arg0, lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, PMPrinterGetPrinterResolutionCount)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(PMPrinter, jint *))fp)((PMPrinter)arg0, lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, PMPrinterGetPrinterResolutionCount_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PMSessionGetCurrentPrinter
+JNIEXPORT jintLong JNICALL OS_NATIVE(PMSessionGetCurrentPrinter)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLongArray arg1)
+{
+	jintLong *lparg1=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, PMSessionGetCurrentPrinter_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntLongArrayElements(env, arg1, NULL)) == NULL) goto fail;
+/*
+	rc = (jintLong)PMSessionGetCurrentPrinter((PMPrintSession)arg0, (PMPrinter *)lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, PMSessionGetCurrentPrinter)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(PMPrintSession, PMPrinter *))fp)((PMPrintSession)arg0, (PMPrinter *)lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntLongArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, PMSessionGetCurrentPrinter_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PMSessionGetDestinationType
+JNIEXPORT jintLong JNICALL OS_NATIVE(PMSessionGetDestinationType)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jshortArray arg2)
+{
+	jshort *lparg2=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, PMSessionGetDestinationType_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetShortArrayElements(env, arg2, NULL)) == NULL) goto fail;
+/*
+	rc = (jintLong)PMSessionGetDestinationType((PMPrintSession)arg0, (PMPrintSettings)arg1, lparg2);
+*/
+	{
+		LOAD_FUNCTION(fp, PMSessionGetDestinationType)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(PMPrintSession, PMPrintSettings, jshort *))fp)((PMPrintSession)arg0, (PMPrintSettings)arg1, lparg2);
+		}
+	}
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseShortArrayElements(env, arg2, lparg2, 0);
+	OS_NATIVE_EXIT(env, that, PMSessionGetDestinationType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PMSetDuplex
+JNIEXPORT jintLong JNICALL OS_NATIVE(PMSetDuplex)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, PMSetDuplex_FUNC);
+/*
+	rc = (jintLong)PMSetDuplex((PMPrintSettings)arg0, (PMDuplexMode)arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, PMSetDuplex)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(PMPrintSettings, PMDuplexMode))fp)((PMPrintSettings)arg0, (PMDuplexMode)arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, PMSetDuplex_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_PtInRgn
 JNIEXPORT jboolean JNICALL OS_NATIVE(PtInRgn)
 	(JNIEnv *env, jclass that, jshortArray arg0, jintLong arg1)
@@ -6305,6 +6861,16 @@ fail:
 }
 #endif
 
+#ifndef NO_objc_1disposeClassPair
+JNIEXPORT void JNICALL OS_NATIVE(objc_1disposeClassPair)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, objc_1disposeClassPair_FUNC);
+	objc_disposeClassPair((Class)arg0);
+	OS_NATIVE_EXIT(env, that, objc_1disposeClassPair_FUNC);
+}
+#endif
+
 #ifndef NO_objc_1getClass
 JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1getClass)
 	(JNIEnv *env, jclass that, jstring arg0)
@@ -7191,6 +7757,33 @@ fail:
 }
 #endif
 
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jfloatDoubleArray arg4)
@@ -8682,25 +9275,133 @@ fail:
 }
 #endif
 
-#ifndef NO_objc_1msgSendSuper_1bool
-JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSendSuper_1bool)
-	(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#if (!defined(NO_objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jboolean)((jboolean (*)(struct objc_super *, jintLong, jintLong, NSPoint))objc_msgSendSuper_bool)(lparg0, arg1, arg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRange_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#endif
 {
 	struct objc_super _arg0, *lparg0=NULL;
 	NSRange _arg2, *lparg2=NULL;
 	jboolean rc = 0;
-	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1bool_FUNC);
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
 	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
 	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
 	rc = (jboolean)((jboolean (*)(struct objc_super *, jintLong, NSRange, jintLong))objc_msgSendSuper_bool)(lparg0, arg1, *lparg2, arg3);
 fail:
 	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
 	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
-	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1bool_FUNC);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
 	return rc;
 }
 #endif
 
+#if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2II)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	struct objc_super _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getobjc_superFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, jintLong))objc_msgSendSuper_stret)(lparg1, arg2, arg3);
+	} else {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, jintLong))objc_msgSendSuper)(lparg1, arg2, arg3);
+	}
+fail:
+	if (arg1 && lparg1) setobjc_superFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jintLong arg3, jobject arg4, jintLong arg5)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jintLong arg3, jobject arg4, jintLong arg5)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	struct objc_super _arg1, *lparg1=NULL;
+	NSRect _arg4, *lparg4=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getobjc_superFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = getNSRectFields(env, arg4, &_arg4)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, jintLong, NSRect, jintLong))objc_msgSendSuper_stret)(lparg1, arg2, arg3, *lparg4, arg5);
+	} else {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, jintLong, NSRect, jintLong))objc_msgSendSuper)(lparg1, arg2, arg3, *lparg4, arg5);
+	}
+fail:
+	if (arg4 && lparg4) setNSRectFields(env, arg4, lparg4);
+	if (arg1 && lparg1) setobjc_superFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jobject arg3)
@@ -8803,6 +9504,41 @@ fail:
 }
 #endif
 
+#if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+	struct objc_super _arg1, *lparg1=NULL;
+	NSRect _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSSizeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getobjc_superFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSSize (*)(struct objc_super *, jintLong, NSRect))objc_msgSendSuper_stret)(lparg1, arg2, *lparg3);
+	} else {
+		*lparg0 = (*(NSSize (*)(struct objc_super *, jintLong, NSRect))objc_msgSendSuper)(lparg1, arg2, *lparg3);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg1 && lparg1) setobjc_superFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jboolean arg3)
@@ -9054,6 +9790,36 @@ fail:
 }
 #endif
 
+#if (!defined(NO_objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	NSRect _arg3, *lparg3=NULL;
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, NSPoint, NSRect))objc_msgSend_bool)(arg0, arg1, *lparg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
@@ -9589,6 +10355,38 @@ fail:
 }
 #endif
 
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jobject arg4, jintLong arg5)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jobject arg4, jintLong arg5)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSRect _arg4, *lparg4=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = getNSRectFields(env, arg4, &_arg4)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong, NSRect, jintLong))objc_msgSend_stret)(arg1, arg2, arg3, *lparg4, arg5);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong, NSRect, jintLong))objc_msgSend)(arg1, arg2, arg3, *lparg4, arg5);
+	}
+fail:
+	if (arg4 && lparg4) setNSRectFields(env, arg4, lparg4);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
@@ -9685,6 +10483,38 @@ fail:
 }
 #endif
 
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSSize _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSSizeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSSize, jintLong))objc_msgSend_stret)(arg1, arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSSize, jintLong))objc_msgSend)(arg1, arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSSizeFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h
old mode 100644
new mode 100755
index b3b3770..b5cf671
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h	
@@ -15,12 +15,11 @@
 /*#define NDEBUG*/
 /*#define DEBUG_EXCEPTIONS*/
 
-#include <Cocoa/Cocoa.h>
-#include <WebKit/WebView.h>
 #import <objc/objc-runtime.h>
-
-#include <JavaScriptCore/JSBase.h>
-#include <JavaScriptCore/JSStringRef.h>
+#include <Cocoa/Cocoa.h>
+#include <Carbon/Carbon.h>
+#include <WebKit/WebKit.h>
+#include <JavaScriptCore/JavaScriptCore.h>
 
 #include "os_custom.h"
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c
old mode 100644
new mode 100755
index a51b7fd..c43c4c1
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,33 @@ JNIEXPORT jobject JNICALL OS_NATIVE(JNIGetObject)
 }
 #endif
 
+#ifndef NO_FindWindow
+JNIEXPORT jintLong JNICALL OS_NATIVE(FindWindow)
+(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2)
+{
+	jintLong *lparg2=NULL;
+	jintLong rc = 0;
+	Point p;
+	p.h = (short)arg0;
+	p.v = (short)arg1;
+	OS_NATIVE_ENTER(env, that, FindWindow_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetIntLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	/*
+	 rc = (jintLong)FindWindow(arg0, arg1, (WindowRef *)lparg2);
+	 */
+	{
+		LOAD_FUNCTION(fp, FindWindow)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(Point, WindowRef *))fp)(p, (WindowRef *)lparg2);
+		}
+	}
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntLongArrayElements(env, arg2, lparg2, 0);
+		OS_NATIVE_EXIT(env, that, FindWindow_FUNC);
+		return rc;
+}
+#endif
+
 #ifndef NO_NSIntersectionRect
 JNIEXPORT void JNICALL OS_NATIVE(NSIntersectionRect)
 	(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jobject arg2)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h
old mode 100644
new mode 100755
index 2ebf369..dbd5f18
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,9 +28,10 @@
 #define DiffRgn_LIB "com.apple.Carbon"
 #define CopyRgn_LIB "com.apple.Carbon"
 #define CloseRgn_LIB "com.apple.Carbon"
+#define FindWindow_LIB "com.apple.Carbon"
 #define instrumentObjcMessageSends_LIB "com.apple.Foundation"
 #define SetThemeCursor_LIB "com.apple.Carbon"
-#define GetCurrentButtonState_LIB "com.apple.Carbon"
+#define GetCurrentEventButtonState_LIB "com.apple.Carbon"
 #define GetDblTime_LIB "com.apple.Carbon"
 #define CGContextCopyPath_LIB "com.apple.Cocoa"
 #define TISCopyCurrentKeyboardInputSource_LIB "com.apple.Carbon"
@@ -52,3 +53,15 @@
 #define NSAccessibilityCellRole_LIB "com.apple.Cocoa"
 #define NSAccessibilityColumnIndexRangeAttribute_LIB "com.apple.Cocoa"
 #define NSAccessibilityRowIndexRangeAttribute_LIB "com.apple.Cocoa"
+#define GetIconRefFromTypeInfo_LIB "com.apple.LaunchServices"
+#define GetIndMenuItemWithCommandID_LIB "com.apple.Carbon"
+#define DeleteMenuItem_LIB "com.apple.Carbon"
+#define PMSessionGetCurrentPrinter_LIB "com.apple.ApplicationServices"
+#define PMSessionGetDestinationType_LIB "com.apple.ApplicationServices"
+#define PMPrinterGetPrinterResolutionCount_LIB "com.apple.ApplicationServices"
+#define PMPrinterGetOutputResolution_LIB "com.apple.ApplicationServices"
+#define PMPrinterGetIndexedPrinterResolution_LIB "com.apple.ApplicationServices"
+#define PMGetDuplex_LIB "com.apple.ApplicationServices"
+#define PMSetDuplex_LIB "com.apple.ApplicationServices"
+#define HIWindowFindAtLocation_LIB "com.apple.Carbon"
+#define HIWindowGetCGWindowID_LIB "com.apple.Carbon"
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c
index 85eddf1..ff1373e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c	
@@ -14,8 +14,8 @@
 
 #ifdef NATIVE_STATS
 
-int OS_nativeFunctionCount = 588;
-int OS_nativeFunctionCallCount[588];
+int OS_nativeFunctionCount = 628;
+int OS_nativeFunctionCallCount[628];
 char * OS_nativeFunctionNames[] = {
 	"ATSFontActivateFromFileReference",
 	"AcquireRootMenu",
@@ -25,7 +25,9 @@ char * OS_nativeFunctionNames[] = {
 	"CALLBACK_1canDragRowsWithIndexes_1atPoint_1",
 	"CALLBACK_1cellBaselineOffset",
 	"CALLBACK_1cellSize",
+	"CALLBACK_1cellSizeForBounds_1",
 	"CALLBACK_1characterIndexForPoint_1",
+	"CALLBACK_1columnAtPoint_1",
 	"CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1",
 	"CALLBACK_1draggedImage_1beganAt_1",
 	"CALLBACK_1draggedImage_1endedAt_1operation_1",
@@ -34,10 +36,12 @@ char * OS_nativeFunctionNames[] = {
 	"CALLBACK_1drawInteriorWithFrame_1inView_1",
 	"CALLBACK_1drawLabel_1inRect_1",
 	"CALLBACK_1drawRect_1",
+	"CALLBACK_1drawTitle_1withFrame_1inView_1",
 	"CALLBACK_1drawViewBackgroundInRect_1",
 	"CALLBACK_1drawWithExpansionFrame_1inView_1",
 	"CALLBACK_1expansionFrameWithFrame_1inView_1",
 	"CALLBACK_1firstRectForCharacterRange_1",
+	"CALLBACK_1headerRectOfColumn_1",
 	"CALLBACK_1highlightSelectionInClipRect_1",
 	"CALLBACK_1hitTestForEvent_1inRect_1ofView_1",
 	"CALLBACK_1hitTest_1",
@@ -81,9 +85,11 @@ char * OS_nativeFunctionNames[] = {
 	"CGColorSpaceCreateDeviceRGB",
 	"CGColorSpaceRelease",
 	"CGContextAddPath",
+	"CGContextBeginTransparencyLayerWithRect",
 	"CGContextCopyPath",
 	"CGContextCopyWindowContentsToRect",
 	"CGContextDrawImage",
+	"CGContextEndTransparencyLayer",
 	"CGContextFillRect",
 	"CGContextRelease",
 	"CGContextReplacePathWithStrokedPath",
@@ -113,11 +119,12 @@ char * OS_nativeFunctionNames[] = {
 	"CGDisplayBytesPerRow",
 	"CGDisplayPixelsHigh",
 	"CGDisplayPixelsWide",
-	"CGEnableEventStateCombining",
 	"CGEventCreateKeyboardEvent",
+	"CGEventCreateMouseEvent",
+	"CGEventCreateScrollWheelEvent",
 	"CGEventGetIntegerValueField",
-	"CGEventKeyboardSetUnicodeString",
 	"CGEventPost",
+	"CGEventSourceCreate",
 	"CGGetDisplaysWithRect",
 	"CGImageCreate",
 	"CGImageGetHeight",
@@ -135,8 +142,6 @@ char * OS_nativeFunctionNames[] = {
 	"CGPathRelease",
 	"CGPoint_1sizeof",
 	"CGPostKeyboardEvent",
-	"CGPostMouseEvent",
-	"CGPostScrollWheelEvent",
 	"CGRect_1sizeof",
 	"CGSetLocalEventsFilterDuringSuppressionState",
 	"CGSetLocalEventsSuppressionInterval",
@@ -158,18 +163,24 @@ char * OS_nativeFunctionNames[] = {
 	"CloseRgn",
 	"CopyRgn",
 	"DeleteGlobalRef",
+	"DeleteMenuItem",
 	"DiffRgn",
 	"DisposeRgn",
 	"EmptyRgn",
 	"FSPathMakeRef",
+	"FindWindow",
 	"Gestalt",
-	"GetCurrentButtonState",
+	"GetCurrentEventButtonState",
 	"GetCurrentProcess",
 	"GetDblTime",
+	"GetIconRefFromTypeInfo",
+	"GetIndMenuItemWithCommandID",
 	"GetRegionBounds",
 	"GetSystemUIMode",
 	"GetThemeMetric",
 	"HIThemeDrawFocusRect",
+	"HIWindowFindAtLocation",
+	"HIWindowGetCGWindowID",
 	"JNIGetObject",
 	"JSEvaluateScript",
 	"JSStringCreateWithUTF8CString",
@@ -330,6 +341,7 @@ char * OS_nativeFunctionNames[] = {
 	"NSBitsPerPixelFromDepth",
 	"NSCalibratedRGBColorSpace",
 	"NSCopyBits",
+	"NSCountWindows",
 	"NSCursorAttributeName",
 	"NSDefaultRunLoopMode",
 	"NSDeviceRGBColorSpace",
@@ -345,7 +357,9 @@ char * OS_nativeFunctionNames[] = {
 	"NSGetSizeAndAlignment",
 	"NSHTMLPboardType",
 	"NSIntersectionRect",
+	"NSLigatureAttributeName",
 	"NSLinkAttributeName",
+	"NSLocaleLanguageCode",
 	"NSModalPanelRunLoopMode",
 	"NSNumberOfColorComponents",
 	"NSObliquenessAttributeName",
@@ -359,6 +373,7 @@ char * OS_nativeFunctionNames[] = {
 	"NSPrintJobDisposition",
 	"NSPrintLastPage",
 	"NSPrintMustCollate",
+	"NSPrintOrientation",
 	"NSPrintPreviewJob",
 	"NSPrintSaveJob",
 	"NSPrintSavePath",
@@ -366,6 +381,7 @@ char * OS_nativeFunctionNames[] = {
 	"NSPrintSpoolJob",
 	"NSRTFPboardType",
 	"NSRange_1sizeof",
+	"NSRectFillUsingOperation",
 	"NSRect_1sizeof",
 	"NSSearchPathForDirectoriesInDomains",
 	"NSSize_1sizeof",
@@ -391,10 +407,25 @@ char * OS_nativeFunctionNames[] = {
 	"NSUnderlineColorAttributeName",
 	"NSUnderlineStyleAttributeName",
 	"NSViewGlobalFrameDidChangeNotification",
+	"NSWindowDidBecomeKeyNotification",
+	"NSWindowDidDeminiaturizeNotification",
+	"NSWindowDidMiniaturizeNotification",
+	"NSWindowDidMoveNotification",
+	"NSWindowDidResignKeyNotification",
+	"NSWindowDidResizeNotification",
+	"NSWindowList",
+	"NSWindowWillCloseNotification",
 	"NewGlobalRef",
 	"NewRgn",
 	"OffsetRgn",
 	"OpenRgn",
+	"PMGetDuplex",
+	"PMPrinterGetIndexedPrinterResolution",
+	"PMPrinterGetOutputResolution",
+	"PMPrinterGetPrinterResolutionCount",
+	"PMSessionGetCurrentPrinter",
+	"PMSessionGetDestinationType",
+	"PMSetDuplex",
 	"PtInRgn",
 	"QDRegionToRects",
 	"RectInRgn",
@@ -557,6 +588,7 @@ char * OS_nativeFunctionNames[] = {
 #endif
 	"method_1setImplementation",
 	"objc_1allocateClassPair",
+	"objc_1disposeClassPair",
 	"objc_1getClass",
 	"objc_1getMetaClass",
 	"objc_1getProtocol",
@@ -728,6 +760,11 @@ char * OS_nativeFunctionNames[] = {
 	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ",
 #endif
 #ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J",
+#endif
+#ifndef JNI64
 	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F",
 #else
 	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D",
@@ -986,7 +1023,26 @@ char * OS_nativeFunctionNames[] = {
 #else
 	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZLorg_eclipse_swt_internal_cocoa_NSRect_2",
 #endif
-	"objc_1msgSendSuper_1bool",
+#ifndef JNI64
+	"objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRange_2I",
+#else
+	"objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRange_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2II",
+#else
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
 #ifndef JNI64
 	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2",
 #else
@@ -1003,6 +1059,11 @@ char * OS_nativeFunctionNames[] = {
 	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J",
 #endif
 #ifndef JNI64
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
 	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ",
 #else
 	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ",
@@ -1053,6 +1114,11 @@ char * OS_nativeFunctionNames[] = {
 	"objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2",
 #endif
 #ifndef JNI64
+	"objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
 	"objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I",
 #else
 	"objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J",
@@ -1148,6 +1214,11 @@ char * OS_nativeFunctionNames[] = {
 	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ",
 #endif
 #ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
 	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I",
 #else
 	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J",
@@ -1163,6 +1234,11 @@ char * OS_nativeFunctionNames[] = {
 	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J",
 #endif
 #ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J",
+#endif
+#ifndef JNI64
 	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II",
 #else
 	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h
index abc2f51..88fc61e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h	
@@ -33,7 +33,9 @@ typedef enum {
 	CALLBACK_1canDragRowsWithIndexes_1atPoint_1_FUNC,
 	CALLBACK_1cellBaselineOffset_FUNC,
 	CALLBACK_1cellSize_FUNC,
+	CALLBACK_1cellSizeForBounds_1_FUNC,
 	CALLBACK_1characterIndexForPoint_1_FUNC,
+	CALLBACK_1columnAtPoint_1_FUNC,
 	CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1_FUNC,
 	CALLBACK_1draggedImage_1beganAt_1_FUNC,
 	CALLBACK_1draggedImage_1endedAt_1operation_1_FUNC,
@@ -42,10 +44,12 @@ typedef enum {
 	CALLBACK_1drawInteriorWithFrame_1inView_1_FUNC,
 	CALLBACK_1drawLabel_1inRect_1_FUNC,
 	CALLBACK_1drawRect_1_FUNC,
+	CALLBACK_1drawTitle_1withFrame_1inView_1_FUNC,
 	CALLBACK_1drawViewBackgroundInRect_1_FUNC,
 	CALLBACK_1drawWithExpansionFrame_1inView_1_FUNC,
 	CALLBACK_1expansionFrameWithFrame_1inView_1_FUNC,
 	CALLBACK_1firstRectForCharacterRange_1_FUNC,
+	CALLBACK_1headerRectOfColumn_1_FUNC,
 	CALLBACK_1highlightSelectionInClipRect_1_FUNC,
 	CALLBACK_1hitTestForEvent_1inRect_1ofView_1_FUNC,
 	CALLBACK_1hitTest_1_FUNC,
@@ -89,9 +93,11 @@ typedef enum {
 	CGColorSpaceCreateDeviceRGB_FUNC,
 	CGColorSpaceRelease_FUNC,
 	CGContextAddPath_FUNC,
+	CGContextBeginTransparencyLayerWithRect_FUNC,
 	CGContextCopyPath_FUNC,
 	CGContextCopyWindowContentsToRect_FUNC,
 	CGContextDrawImage_FUNC,
+	CGContextEndTransparencyLayer_FUNC,
 	CGContextFillRect_FUNC,
 	CGContextRelease_FUNC,
 	CGContextReplacePathWithStrokedPath_FUNC,
@@ -121,11 +127,12 @@ typedef enum {
 	CGDisplayBytesPerRow_FUNC,
 	CGDisplayPixelsHigh_FUNC,
 	CGDisplayPixelsWide_FUNC,
-	CGEnableEventStateCombining_FUNC,
 	CGEventCreateKeyboardEvent_FUNC,
+	CGEventCreateMouseEvent_FUNC,
+	CGEventCreateScrollWheelEvent_FUNC,
 	CGEventGetIntegerValueField_FUNC,
-	CGEventKeyboardSetUnicodeString_FUNC,
 	CGEventPost_FUNC,
+	CGEventSourceCreate_FUNC,
 	CGGetDisplaysWithRect_FUNC,
 	CGImageCreate_FUNC,
 	CGImageGetHeight_FUNC,
@@ -143,8 +150,6 @@ typedef enum {
 	CGPathRelease_FUNC,
 	CGPoint_1sizeof_FUNC,
 	CGPostKeyboardEvent_FUNC,
-	CGPostMouseEvent_FUNC,
-	CGPostScrollWheelEvent_FUNC,
 	CGRect_1sizeof_FUNC,
 	CGSetLocalEventsFilterDuringSuppressionState_FUNC,
 	CGSetLocalEventsSuppressionInterval_FUNC,
@@ -166,18 +171,24 @@ typedef enum {
 	CloseRgn_FUNC,
 	CopyRgn_FUNC,
 	DeleteGlobalRef_FUNC,
+	DeleteMenuItem_FUNC,
 	DiffRgn_FUNC,
 	DisposeRgn_FUNC,
 	EmptyRgn_FUNC,
 	FSPathMakeRef_FUNC,
+	FindWindow_FUNC,
 	Gestalt_FUNC,
-	GetCurrentButtonState_FUNC,
+	GetCurrentEventButtonState_FUNC,
 	GetCurrentProcess_FUNC,
 	GetDblTime_FUNC,
+	GetIconRefFromTypeInfo_FUNC,
+	GetIndMenuItemWithCommandID_FUNC,
 	GetRegionBounds_FUNC,
 	GetSystemUIMode_FUNC,
 	GetThemeMetric_FUNC,
 	HIThemeDrawFocusRect_FUNC,
+	HIWindowFindAtLocation_FUNC,
+	HIWindowGetCGWindowID_FUNC,
 	JNIGetObject_FUNC,
 	JSEvaluateScript_FUNC,
 	JSStringCreateWithUTF8CString_FUNC,
@@ -338,6 +349,7 @@ typedef enum {
 	NSBitsPerPixelFromDepth_FUNC,
 	NSCalibratedRGBColorSpace_FUNC,
 	NSCopyBits_FUNC,
+	NSCountWindows_FUNC,
 	NSCursorAttributeName_FUNC,
 	NSDefaultRunLoopMode_FUNC,
 	NSDeviceRGBColorSpace_FUNC,
@@ -353,7 +365,9 @@ typedef enum {
 	NSGetSizeAndAlignment_FUNC,
 	NSHTMLPboardType_FUNC,
 	NSIntersectionRect_FUNC,
+	NSLigatureAttributeName_FUNC,
 	NSLinkAttributeName_FUNC,
+	NSLocaleLanguageCode_FUNC,
 	NSModalPanelRunLoopMode_FUNC,
 	NSNumberOfColorComponents_FUNC,
 	NSObliquenessAttributeName_FUNC,
@@ -367,6 +381,7 @@ typedef enum {
 	NSPrintJobDisposition_FUNC,
 	NSPrintLastPage_FUNC,
 	NSPrintMustCollate_FUNC,
+	NSPrintOrientation_FUNC,
 	NSPrintPreviewJob_FUNC,
 	NSPrintSaveJob_FUNC,
 	NSPrintSavePath_FUNC,
@@ -374,6 +389,7 @@ typedef enum {
 	NSPrintSpoolJob_FUNC,
 	NSRTFPboardType_FUNC,
 	NSRange_1sizeof_FUNC,
+	NSRectFillUsingOperation_FUNC,
 	NSRect_1sizeof_FUNC,
 	NSSearchPathForDirectoriesInDomains_FUNC,
 	NSSize_1sizeof_FUNC,
@@ -399,10 +415,25 @@ typedef enum {
 	NSUnderlineColorAttributeName_FUNC,
 	NSUnderlineStyleAttributeName_FUNC,
 	NSViewGlobalFrameDidChangeNotification_FUNC,
+	NSWindowDidBecomeKeyNotification_FUNC,
+	NSWindowDidDeminiaturizeNotification_FUNC,
+	NSWindowDidMiniaturizeNotification_FUNC,
+	NSWindowDidMoveNotification_FUNC,
+	NSWindowDidResignKeyNotification_FUNC,
+	NSWindowDidResizeNotification_FUNC,
+	NSWindowList_FUNC,
+	NSWindowWillCloseNotification_FUNC,
 	NewGlobalRef_FUNC,
 	NewRgn_FUNC,
 	OffsetRgn_FUNC,
 	OpenRgn_FUNC,
+	PMGetDuplex_FUNC,
+	PMPrinterGetIndexedPrinterResolution_FUNC,
+	PMPrinterGetOutputResolution_FUNC,
+	PMPrinterGetPrinterResolutionCount_FUNC,
+	PMSessionGetCurrentPrinter_FUNC,
+	PMSessionGetDestinationType_FUNC,
+	PMSetDuplex_FUNC,
 	PtInRgn_FUNC,
 	QDRegionToRects_FUNC,
 	RectInRgn_FUNC,
@@ -565,6 +596,7 @@ typedef enum {
 #endif
 	method_1setImplementation_FUNC,
 	objc_1allocateClassPair_FUNC,
+	objc_1disposeClassPair_FUNC,
 	objc_1getClass_FUNC,
 	objc_1getMetaClass_FUNC,
 	objc_1getProtocol_FUNC,
@@ -736,6 +768,11 @@ typedef enum {
 	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ_FUNC,
 #endif
 #ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC,
+#endif
+#ifndef JNI64
 	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F_FUNC,
 #else
 	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D_FUNC,
@@ -994,7 +1031,26 @@ typedef enum {
 #else
 	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
 #endif
-	objc_1msgSendSuper_1bool_FUNC,
+#ifndef JNI64
+	objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
+#else
+	objc_1msgSendSuper_1bool__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2II_FUNC,
+#else
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
 #ifndef JNI64
 	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
 #else
@@ -1011,6 +1067,11 @@ typedef enum {
 	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J_FUNC,
 #endif
 #ifndef JNI64
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
 	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ_FUNC,
 #else
 	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ_FUNC,
@@ -1061,6 +1122,11 @@ typedef enum {
 	objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
 #endif
 #ifndef JNI64
+	objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
 	objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
 #else
 	objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
@@ -1156,6 +1222,11 @@ typedef enum {
 	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ_FUNC,
 #endif
 #ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
 	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
 #else
 	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
@@ -1171,6 +1242,11 @@ typedef enum {
 	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
 #endif
 #ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC,
+#endif
+#ifndef JNI64
 	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II_FUNC,
 #else
 	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c
index 4013ae7..b4eb10d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -465,6 +465,40 @@ void setNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct)
 }
 #endif
 
+#ifndef NO_PMResolution
+typedef struct PMResolution_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID hRes, vRes;
+} PMResolution_FID_CACHE;
+
+PMResolution_FID_CACHE PMResolutionFc;
+
+void cachePMResolutionFields(JNIEnv *env, jobject lpObject)
+{
+	if (PMResolutionFc.cached) return;
+	PMResolutionFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	PMResolutionFc.hRes = (*env)->GetFieldID(env, PMResolutionFc.clazz, "hRes", "D");
+	PMResolutionFc.vRes = (*env)->GetFieldID(env, PMResolutionFc.clazz, "vRes", "D");
+	PMResolutionFc.cached = 1;
+}
+
+PMResolution *getPMResolutionFields(JNIEnv *env, jobject lpObject, PMResolution *lpStruct)
+{
+	if (!PMResolutionFc.cached) cachePMResolutionFields(env, lpObject);
+	lpStruct->hRes = (*env)->GetDoubleField(env, lpObject, PMResolutionFc.hRes);
+	lpStruct->vRes = (*env)->GetDoubleField(env, lpObject, PMResolutionFc.vRes);
+	return lpStruct;
+}
+
+void setPMResolutionFields(JNIEnv *env, jobject lpObject, PMResolution *lpStruct)
+{
+	if (!PMResolutionFc.cached) cachePMResolutionFields(env, lpObject);
+	(*env)->SetDoubleField(env, lpObject, PMResolutionFc.hRes, (jdouble)lpStruct->hRes);
+	(*env)->SetDoubleField(env, lpObject, PMResolutionFc.vRes, (jdouble)lpStruct->vRes);
+}
+#endif
+
 #ifndef NO_objc_super
 typedef struct objc_super_FID_CACHE {
 	int cached;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h
index 009ded2..101e375 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -155,6 +155,18 @@ void setNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct);
 #define NSSize_sizeof() 0
 #endif
 
+#ifndef NO_PMResolution
+void cachePMResolutionFields(JNIEnv *env, jobject lpObject);
+PMResolution *getPMResolutionFields(JNIEnv *env, jobject lpObject, PMResolution *lpStruct);
+void setPMResolutionFields(JNIEnv *env, jobject lpObject, PMResolution *lpStruct);
+#define PMResolution_sizeof() sizeof(PMResolution)
+#else
+#define cachePMResolutionFields(a,b)
+#define getPMResolutionFields(a,b,c) NULL
+#define setPMResolutionFields(a,b,c)
+#define PMResolution_sizeof() 0
+#endif
+
 #ifndef NO_objc_super
 void cacheobjc_superFields(JNIEnv *env, jobject lpObject);
 struct objc_super *getobjc_superFields(JNIEnv *env, jobject lpObject, struct objc_super *lpStruct);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras
index 7d60f9c..64a517a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras	
@@ -104,6 +104,10 @@
 		<method selector="applicationIconImage" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="arrangeInFront:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
@@ -146,6 +150,9 @@
 		<method selector="mainMenu" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="mainWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="nextEventMatchingMask:untilDate:inMode:dequeue:" swt_gen="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
@@ -176,6 +183,12 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="sendAction:to:from:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="sendEvent:" swt_gen="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -211,6 +224,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="windowWithWindowNumber:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="windows" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -228,6 +245,11 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="boundingRectWithSize:options:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="doubleClickAtIndex:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -621,6 +643,12 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="drawTitle:withFrame:inView:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setBackgroundColor:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -629,6 +657,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setHighlightsBy:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setImagePosition:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -648,10 +680,13 @@
 		<method selector="cellSize" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="cellSizeForBounds:" swt_gen="true">
+		<method selector="cellSizeForBounds:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="controlSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="drawInteriorWithFrame:inView:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
@@ -718,6 +753,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setBackgroundStyle:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setBaseWritingDirection:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -822,14 +861,20 @@
 		<method class_method="true" selector="clearColor" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="colorUsingColorSpace:" swt_gen="true">
-			<arg swt_gen="true"></arg>
+		<method selector="colorSpace" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
 		<method selector="colorUsingColorSpaceName:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method class_method="true" selector="colorWithCalibratedRed:green:blue:alpha:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method class_method="true" selector="colorWithDeviceRed:green:blue:alpha:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
@@ -928,7 +973,10 @@
 		</method>
 	</class>
 	<class name="NSColorSpace" swt_gen="mixed">
-		<method class_method="true" selector="deviceRGBColorSpace" swt_gen="true">
+		<method selector="colorSpaceModel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="genericRGBColorSpace" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
 	</class>
@@ -1134,6 +1182,14 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setBezeled:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBordered:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setDatePickerElements:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -1212,6 +1268,9 @@
 		<method selector="locationInWindow" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="magnification" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="modifierFlags" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -1230,9 +1289,17 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="rotation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="timestamp" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="touchesMatchingPhase:inView:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="type" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -1481,6 +1548,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="initWithIconRef:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSImage"></retval>
+		</method>
 		<method selector="initWithSize:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true" swt_java_type="NSImage"></retval>
@@ -1499,6 +1570,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setScalesWhenResized:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setSize:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -1741,6 +1816,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="itemWithTag:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="numberOfItems" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -1777,6 +1856,9 @@
 		</method>
 	</class>
 	<class name="NSMenuItem" swt_gen="mixed">
+		<method selector="action" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="attributedTitle" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -1792,6 +1874,9 @@
 		<method selector="isHidden" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="isSeparatorItem" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="keyEquivalent" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -1841,6 +1926,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setTag:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setTarget:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -1855,6 +1944,12 @@
 		<method selector="submenu" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="tag" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="target" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="title" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -1949,6 +2044,18 @@
 		<method selector="draggingSourceOperationMask" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="outlineView:shouldEditTableColumn:item:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="outlineView:shouldReorderColumn:toColumn:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="outlineView:shouldSelectItem:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
@@ -1961,6 +2068,16 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="readSelectionFromPasteboard:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="tableView:shouldReorderColumn:toColumn:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="tableView:shouldSelectRow:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
@@ -1973,6 +2090,11 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="writeSelectionToPasteboard:types:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 	</class>
 	<class name="NSObjectController" swt_superclass="NSController">
 	</class>
@@ -2115,6 +2237,14 @@
 	<class name="NSPICTImageRep" swt_superclass="NSImageRep">
 	</class>
 	<class name="NSPanel" swt_gen="mixed" swt_superclass="NSWindow">
+		<method selector="setBecomesKeyOnlyIfNeeded:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFloatingPanel:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setWorksWhenModal:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -2247,6 +2377,12 @@
 	<class name="NSPredicateEditor" swt_superclass="NSRuleEditor">
 	</class>
 	<class name="NSPrintInfo" swt_gen="mixed">
+		<method selector="PMPrintSession" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="PMPrintSettings" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method class_method="true" selector="defaultPrinter" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -2263,10 +2399,10 @@
 		<method selector="jobDisposition" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="orientation" swt_gen="true">
+		<method selector="paperSize" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="paperSize" swt_gen="true">
+		<method selector="printSettings" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
 		<method selector="printer" swt_gen="true">
@@ -2276,10 +2412,6 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="setOrientation:" swt_gen="true">
-			<arg swt_gen="true"></arg>
-			<retval swt_gen="true"></retval>
-		</method>
 		<method selector="setPrinter:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -2290,6 +2422,9 @@
 		<method class_method="true" selector="sharedPrintInfo" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="updateFromPMPrintSettings" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 	</class>
 	<class name="NSPrintOperation" swt_gen="mixed">
 		<method selector="cleanUpOperation" swt_gen="true">
@@ -2424,6 +2559,14 @@
 		<method selector="becomeFirstResponder" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="beginGestureWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cancelOperation:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="cursorUpdate:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -2432,6 +2575,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="endGestureWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="flagsChanged:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -2456,6 +2603,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="magnifyWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="mouseDown:" swt_gen="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -2516,6 +2667,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="performKeyEquivalent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="resignFirstResponder" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -2531,10 +2686,39 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="rotateWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="scrollWheel:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="swipeWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="touchesBeganWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="touchesCancelledWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="touchesEndedWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="touchesMovedWithEvent:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="validRequestorForSendType:returnType:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 	</class>
 	<class name="NSRuleEditor" swt_superclass="NSControl">
 	</class>
@@ -2665,6 +2849,9 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="tile" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 	</class>
 	<class name="NSScroller" swt_gen="mixed" swt_superclass="NSControl">
 		<method selector="controlSize" swt_gen="true">
@@ -3008,11 +3195,11 @@
 		</method>
 	</class>
 	<class name="NSTableHeaderView" swt_gen="mixed" swt_superclass="NSView">
-		<method selector="columnAtPoint:" swt_gen="true">
+		<method selector="columnAtPoint:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="headerRectOfColumn:" swt_gen="true">
+		<method selector="headerRectOfColumn:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
@@ -3025,7 +3212,7 @@
 		<method selector="allowsColumnReordering" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="canDragRowsWithIndexes:atPoint:" swt_gen="true" swt_gen_custom_callback="true">
+		<method selector="canDragRowsWithIndexes:atPoint:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3036,6 +3223,10 @@
 		<method selector="clickedRow" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="columnAtPoint:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="columnIndexesInRect:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3044,11 +3235,11 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="deselectAll:" swt_gen="true">
+		<method selector="deselectAll:" swt_gen="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="deselectRow:" swt_gen="true">
+		<method selector="deselectRow:" swt_gen="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
@@ -3142,7 +3333,7 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
-		<method selector="selectRowIndexes:byExtendingSelection:" swt_gen="true">
+		<method selector="selectRowIndexes:byExtendingSelection:" swt_gen="true" swt_gen_super_msgSend="true">
 			<arg swt_gen="true"></arg>
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3518,6 +3709,9 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="isVisible" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="removeItemAtIndex:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3534,6 +3728,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setSelectedItemIdentifier:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setVisible:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3567,6 +3765,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setMenuFormRepresentation:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setMinSize:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3590,6 +3792,23 @@
 	</class>
 	<class name="NSToolbarItemGroup" swt_superclass="NSToolbarItem">
 	</class>
+	<class name="NSTouch" swt_gen="true">
+		<method selector="device" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deviceSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isResting" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="normalizedPosition" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="phase" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
 	<class name="NSTrackingArea" swt_gen="mixed">
 		<method selector="initWithRect:options:owner:userInfo:" swt_gen="true">
 			<arg swt_gen="true"></arg>
@@ -3779,6 +3998,14 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="mouse:inRect:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseDownCanMoveWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="registerForDraggedTypes:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3786,6 +4013,10 @@
 		<method selector="removeFromSuperview" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="removeToolTip:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="removeTrackingArea:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3806,6 +4037,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setAcceptsTouchEvents:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setAutoresizesSubviews:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3850,6 +4085,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setWantsRestingTouches:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="shouldDelayWindowOrderingForEvent:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -3875,6 +4114,10 @@
 		<method selector="viewDidMoveToWindow" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="viewWillMoveToWindow:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="visibleRect" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -3999,6 +4242,9 @@
 		<method selector="isKeyWindow" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="isMainWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="isMiniaturized" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -4011,6 +4257,9 @@
 		<method selector="isZoomed" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="level" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="makeFirstResponder:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -4115,6 +4364,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setHidesOnDeactivate:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setLevel:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -4131,6 +4384,14 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="setRepresentedFilename:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setRepresentedURL:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="setShowsResizeIndicator:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -4167,6 +4428,14 @@
 		<method selector="windowNumber" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
+		<method class_method="true" selector="windowNumberAtPoint:belowWindowWithWindowNumber:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="windowRef" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="zoom:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
@@ -4372,6 +4641,7 @@
 	<constant name="NSFontAttributeName" swt_gen="true"></constant>
 	<constant name="NSForegroundColorAttributeName" swt_gen="true"></constant>
 	<constant name="NSHTMLPboardType" swt_gen="true"></constant>
+	<constant name="NSLigatureAttributeName" swt_gen="true"></constant>
 	<constant name="NSLinkAttributeName" swt_gen="true"></constant>
 	<constant name="NSModalPanelRunLoopMode" swt_gen="true"></constant>
 	<constant name="NSObliquenessAttributeName" swt_gen="true"></constant>
@@ -4383,6 +4653,7 @@
 	<constant name="NSPrintJobDisposition" swt_gen="true"></constant>
 	<constant name="NSPrintLastPage" swt_gen="true"></constant>
 	<constant name="NSPrintMustCollate" swt_gen="true"></constant>
+	<constant name="NSPrintOrientation" swt_gen="true"></constant>
 	<constant name="NSPrintPreviewJob" swt_gen="true"></constant>
 	<constant name="NSPrintSaveJob" swt_gen="true"></constant>
 	<constant name="NSPrintSavePath" swt_gen="true"></constant>
@@ -4410,6 +4681,13 @@
 	<constant name="NSUnderlineColorAttributeName" swt_gen="true"></constant>
 	<constant name="NSUnderlineStyleAttributeName" swt_gen="true"></constant>
 	<constant name="NSViewGlobalFrameDidChangeNotification" swt_gen="true"></constant>
+	<constant name="NSWindowDidBecomeKeyNotification" swt_gen="true"></constant>
+	<constant name="NSWindowDidDeminiaturizeNotification" swt_gen="true"></constant>
+	<constant name="NSWindowDidMiniaturizeNotification" swt_gen="true"></constant>
+	<constant name="NSWindowDidMoveNotification" swt_gen="true"></constant>
+	<constant name="NSWindowDidResignKeyNotification" swt_gen="true"></constant>
+	<constant name="NSWindowDidResizeNotification" swt_gen="true"></constant>
+	<constant name="NSWindowWillCloseNotification" swt_gen="true"></constant>
 	<enum name="NSAlertFirstButtonReturn" swt_gen="true"></enum>
 	<enum name="NSAlertSecondButtonReturn" swt_gen="true"></enum>
 	<enum name="NSAlertThirdButtonReturn" swt_gen="true"></enum>
@@ -4419,6 +4697,7 @@
 	<enum name="NSApplicationDefined" swt_gen="true"></enum>
 	<enum name="NSApplicationDelegateReplySuccess" swt_gen="true"></enum>
 	<enum name="NSAtTop" swt_gen="true"></enum>
+	<enum name="NSBackgroundStyleRaised" swt_gen="true"></enum>
 	<enum name="NSBackingStoreBuffered" swt_gen="true"></enum>
 	<enum name="NSBackspaceCharacter" swt_gen="true"></enum>
 	<enum name="NSBevelLineJoinStyle" swt_gen="true"></enum>
@@ -4438,13 +4717,16 @@
 	<enum name="NSCommandKeyMask" swt_gen="true"></enum>
 	<enum name="NSCompositeClear" swt_gen="true"></enum>
 	<enum name="NSCompositeCopy" swt_gen="true"></enum>
+	<enum name="NSCompositeSourceAtop" swt_gen="true"></enum>
 	<enum name="NSCompositeSourceOver" swt_gen="true"></enum>
 	<enum name="NSCompositeXOR" swt_gen="true"></enum>
+	<enum name="NSContentsCellMask" swt_gen="true"></enum>
 	<enum name="NSControlKeyMask" swt_gen="true"></enum>
 	<enum name="NSCriticalAlertStyle" swt_gen="true"></enum>
 	<enum name="NSCurveToBezierPathElement" swt_gen="true"></enum>
 	<enum name="NSDeleteCharacter" swt_gen="true"></enum>
 	<enum name="NSDeviceIndependentModifierFlagsMask" swt_gen="true"></enum>
+	<enum name="NSDocModalWindowMask" swt_gen="true"></enum>
 	<enum name="NSDragOperationCopy" swt_gen="true"></enum>
 	<enum name="NSDragOperationDelete" swt_gen="true"></enum>
 	<enum name="NSDragOperationEvery" swt_gen="true"></enum>
@@ -4453,6 +4735,12 @@
 	<enum name="NSDragOperationNone" swt_gen="true"></enum>
 	<enum name="NSEnterCharacter" swt_gen="true"></enum>
 	<enum name="NSEvenOddWindingRule" swt_gen="true"></enum>
+	<enum name="NSEventTypeBeginGesture" swt_gen="true"></enum>
+	<enum name="NSEventTypeEndGesture" swt_gen="true"></enum>
+	<enum name="NSEventTypeGesture" swt_gen="true"></enum>
+	<enum name="NSEventTypeMagnify" swt_gen="true"></enum>
+	<enum name="NSEventTypeRotate" swt_gen="true"></enum>
+	<enum name="NSEventTypeSwipe" swt_gen="true"></enum>
 	<enum name="NSFileHandlingPanelOKButton" swt_gen="true"></enum>
 	<enum name="NSFlagsChanged" swt_gen="true"></enum>
 	<enum name="NSFocusRingTypeNone" swt_gen="true"></enum>
@@ -4488,11 +4776,14 @@
 	<enum name="NSLeftTextAlignment" swt_gen="true"></enum>
 	<enum name="NSLineBreakByClipping" swt_gen="true"></enum>
 	<enum name="NSLineBreakByTruncatingMiddle" swt_gen="true"></enum>
+	<enum name="NSLineBreakByTruncatingTail" swt_gen="true"></enum>
 	<enum name="NSLineBreakByWordWrapping" swt_gen="true"></enum>
 	<enum name="NSLineToBezierPathElement" swt_gen="true"></enum>
+	<enum name="NSMiniControlSize" swt_gen="true"></enum>
 	<enum name="NSMiniaturizableWindowMask" swt_gen="true"></enum>
 	<enum name="NSMiterLineJoinStyle" swt_gen="true"></enum>
 	<enum name="NSMixedState" swt_gen="true"></enum>
+	<enum name="NSModalPanelWindowLevel" swt_gen="true"></enum>
 	<enum name="NSMomentaryLightButton" swt_gen="true"></enum>
 	<enum name="NSMouseEntered" swt_gen="true"></enum>
 	<enum name="NSMouseExited" swt_gen="true"></enum>
@@ -4503,6 +4794,8 @@
 	<enum name="NSNoImage" swt_gen="true"></enum>
 	<enum name="NSNoTitle" swt_gen="true"></enum>
 	<enum name="NSNonZeroWindingRule" swt_gen="true"></enum>
+	<enum name="NSNonactivatingPanelMask" swt_gen="true"></enum>
+	<enum name="NSNormalWindowLevel" swt_gen="true"></enum>
 	<enum name="NSOffState" swt_gen="true"></enum>
 	<enum name="NSOnState" swt_gen="true"></enum>
 	<enum name="NSOpenGLPFAAccumSize" swt_gen="true"></enum>
@@ -4521,11 +4814,16 @@
 	<enum name="NSPageDownFunctionKey" swt_gen="true"></enum>
 	<enum name="NSPageUpFunctionKey" swt_gen="true"></enum>
 	<enum name="NSPortraitOrientation" swt_gen="true"></enum>
+	<enum name="NSPrintPanelShowsCopies" swt_gen="true"></enum>
+	<enum name="NSPrintPanelShowsOrientation" swt_gen="true"></enum>
+	<enum name="NSPrintPanelShowsPageRange" swt_gen="true"></enum>
 	<enum name="NSPrintPanelShowsPageSetupAccessory" swt_gen="true"></enum>
 	<enum name="NSProgressIndicatorPreferredThickness" swt_gen="true"></enum>
 	<enum name="NSPushOnPushOffButton" swt_gen="true"></enum>
+	<enum name="NSRGBColorSpaceModel" swt_gen="true"></enum>
 	<enum name="NSRadioButton" swt_gen="true"></enum>
 	<enum name="NSRegularControlSize" swt_gen="true"></enum>
+	<enum name="NSRegularSquareBezelStyle" swt_gen="true"></enum>
 	<enum name="NSResizableWindowMask" swt_gen="true"></enum>
 	<enum name="NSRightMouseDown" swt_gen="true"></enum>
 	<enum name="NSRightMouseDragged" swt_gen="true"></enum>
@@ -4534,6 +4832,7 @@
 	<enum name="NSRoundLineCapStyle" swt_gen="true"></enum>
 	<enum name="NSRoundLineJoinStyle" swt_gen="true"></enum>
 	<enum name="NSRoundedBezelStyle" swt_gen="true"></enum>
+	<enum name="NSRoundedDisclosureBezelStyle" swt_gen="true"></enum>
 	<enum name="NSScaleNone" swt_gen="true"></enum>
 	<enum name="NSScrollWheel" swt_gen="true"></enum>
 	<enum name="NSScrollerDecrementLine" swt_gen="true"></enum>
@@ -4547,6 +4846,8 @@
 	<enum name="NSSmallControlSize" swt_gen="true"></enum>
 	<enum name="NSSquareLineCapStyle" swt_gen="true"></enum>
 	<enum name="NSStatusWindowLevel" swt_gen="true"></enum>
+	<enum name="NSStringDrawingUsesLineFragmentOrigin" swt_gen="true"></enum>
+	<enum name="NSSubmenuWindowLevel" swt_gen="true"></enum>
 	<enum name="NSSwitchButton" swt_gen="true"></enum>
 	<enum name="NSSystemDefined" swt_gen="true"></enum>
 	<enum name="NSTabCharacter" swt_gen="true"></enum>
@@ -4560,11 +4861,22 @@
 	<enum name="NSTerminateCancel" swt_gen="true"></enum>
 	<enum name="NSTerminateNow" swt_gen="true"></enum>
 	<enum name="NSTextFieldAndStepperDatePickerStyle" swt_gen="true"></enum>
+	<enum name="NSTextFieldDatePickerStyle" swt_gen="true"></enum>
 	<enum name="NSTitledWindowMask" swt_gen="true"></enum>
+	<enum name="NSToolbarDisplayModeIconOnly" swt_gen="true"></enum>
+	<enum name="NSTouchEventSubtype" swt_gen="true"></enum>
+	<enum name="NSTouchPhaseAny" swt_gen="true"></enum>
+	<enum name="NSTouchPhaseBegan" swt_gen="true"></enum>
+	<enum name="NSTouchPhaseCancelled" swt_gen="true"></enum>
+	<enum name="NSTouchPhaseEnded" swt_gen="true"></enum>
+	<enum name="NSTouchPhaseMoved" swt_gen="true"></enum>
+	<enum name="NSTouchPhaseStationary" swt_gen="true"></enum>
+	<enum name="NSTouchPhaseTouching" swt_gen="true"></enum>
 	<enum name="NSUnderlineStyleDouble" swt_gen="true"></enum>
 	<enum name="NSUnderlineStyleNone" swt_gen="true"></enum>
 	<enum name="NSUnderlineStyleSingle" swt_gen="true"></enum>
 	<enum name="NSUnderlineStyleThick" swt_gen="true"></enum>
+	<enum name="NSUtilityWindowMask" swt_gen="true"></enum>
 	<enum name="NSViewHeightSizable" swt_gen="true"></enum>
 	<enum name="NSViewMaxXMargin" swt_gen="true"></enum>
 	<enum name="NSViewMaxYMargin" swt_gen="true"></enum>
@@ -4630,10 +4942,21 @@
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 	</function>
+	<function name="NSCountWindows" swt_gen="true">
+		<arg swt_gen="true" swt_java_type="int[]" swt_java_type64="long[]"></arg>
+	</function>
 	<function name="NSNumberOfColorComponents" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<retval swt_gen="true"></retval>
 	</function>
+	<function name="NSRectFillUsingOperation" swt_gen="true">
+		<arg swt_gen="true"></arg>
+		<arg swt_gen="true"></arg>
+	</function>
+	<function name="NSWindowList" swt_gen="true">
+		<arg swt_gen="true"></arg>
+		<arg swt_gen="true" swt_java_type="int[]" swt_java_type64="long[]"></arg>
+	</function>
 	<informal_protocol name="NSAccessibility" swt_gen="true">
 		<method selector="accessibilityActionDescription:" swt_gen="true">
 			<arg swt_gen="true"></arg>
@@ -4776,6 +5099,11 @@
 			<arg swt_gen="true"></arg>
 		</method>
 	</informal_protocol>
+	<informal_protocol name="NSMenuValidation" swt_gen="true">
+		<method selector="validateMenuItem:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
 	<informal_protocol name="NSOutlineViewDataSource" swt_gen="mixed">
 		<method selector="outlineView:acceptDrop:item:childIndex:" swt_gen="true">
 			<arg swt_gen="true"></arg>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras
index f08cef2..843c42f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras	
@@ -2,9 +2,20 @@
 <signatures swt_gen="mixed">
 	<cftype name="CGMutablePathRef" swt_gen="true"></cftype>
 	<enum name="kCGBlendModeDifference" swt_gen="true"></enum>
+	<enum name="kCGBlendModeNormal" swt_gen="true"></enum>
 	<enum name="kCGEventFilterMaskPermitLocalKeyboardEvents" swt_gen="true"></enum>
 	<enum name="kCGEventFilterMaskPermitLocalMouseEvents" swt_gen="true"></enum>
 	<enum name="kCGEventFilterMaskPermitSystemDefinedEvents" swt_gen="true"></enum>
+	<enum name="kCGEventKeyDown" swt_gen="true"></enum>
+	<enum name="kCGEventKeyUp" swt_gen="true"></enum>
+	<enum name="kCGEventLeftMouseDown" swt_gen="true"></enum>
+	<enum name="kCGEventLeftMouseUp" swt_gen="true"></enum>
+	<enum name="kCGEventMouseMoved" swt_gen="true"></enum>
+	<enum name="kCGEventOtherMouseDown" swt_gen="true"></enum>
+	<enum name="kCGEventOtherMouseUp" swt_gen="true"></enum>
+	<enum name="kCGEventRightMouseDown" swt_gen="true"></enum>
+	<enum name="kCGEventRightMouseUp" swt_gen="true"></enum>
+	<enum name="kCGEventSourceStateHIDSystemState" swt_gen="true"></enum>
 	<enum name="kCGEventSuppressionStateRemoteMouseDrag" swt_gen="true"></enum>
 	<enum name="kCGEventSuppressionStateSuppressionInterval" swt_gen="true"></enum>
 	<enum name="kCGImageAlphaFirst" swt_gen="true"></enum>
@@ -25,6 +36,8 @@
 	<enum name="kCGPathElementCloseSubpath" swt_gen="true"></enum>
 	<enum name="kCGPathElementMoveToPoint" swt_gen="true"></enum>
 	<enum name="kCGPathStroke" swt_gen="true"></enum>
+	<enum name="kCGScrollEventUnitLine" swt_gen="true"></enum>
+	<enum name="kCGScrollEventUnitPixel" swt_gen="true"></enum>
 	<enum name="kCGSessionEventTap" swt_gen="true"></enum>
 	<enum name="kCGTextFillStroke" swt_gen="true"></enum>
 	<function name="CGBitmapContextCreate" swt_gen="true">
@@ -63,11 +76,19 @@
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 	</function>
+	<function name="CGContextBeginTransparencyLayerWithRect" swt_gen="true">
+		<arg swt_gen="true"></arg>
+		<arg swt_gen="true"></arg>
+		<arg swt_gen="true"></arg>
+	</function>
 	<function name="CGContextDrawImage" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 	</function>
+	<function name="CGContextEndTransparencyLayer" swt_gen="true">
+		<arg swt_gen="true"></arg>
+	</function>
 	<function name="CGContextFillRect" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
@@ -187,30 +208,39 @@
 		<arg swt_gen="true"></arg>
 		<retval swt_gen="true"></retval>
 	</function>
-	<function name="CGEnableEventStateCombining" swt_gen="true">
-		<arg swt_gen="true" swt_param_name="doCombineState"></arg>
+	<function name="CGEventCreateKeyboardEvent" swt_gen="true">
+		<arg swt_gen="true"></arg>
+		<arg swt_gen="true"></arg>
+		<arg swt_gen="true"></arg>
 		<retval swt_gen="true"></retval>
 	</function>
-	<function name="CGEventCreateKeyboardEvent" swt_gen="true">
+	<function name="CGEventCreateMouseEvent" swt_gen="true">
+		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 		<retval swt_gen="true"></retval>
 	</function>
-	<function name="CGEventGetIntegerValueField" swt_gen="true">
+	<function name="CGEventCreateScrollWheelEvent" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
+		<arg swt_gen="true" swt_param_cast="CGWheelCount"></arg>
+		<arg swt_gen="true"></arg>
 		<retval swt_gen="true"></retval>
 	</function>
-	<function name="CGEventKeyboardSetUnicodeString" swt_gen="true">
+	<function name="CGEventGetIntegerValueField" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
-		<arg swt_gen="true" swt_java_type="char[]"></arg>
+		<retval swt_gen="true"></retval>
 	</function>
 	<function name="CGEventPost" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
 	</function>
+	<function name="CGEventSourceCreate" swt_gen="true">
+		<arg swt_gen="true" swt_param_name="sourceState"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
 	<function name="CGGetDisplaysWithRect" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true" swt_param_cast="CGDisplayCount"></arg>
@@ -295,20 +325,15 @@
 	<function name="CGPostKeyboardEvent" swt_gen="true">
 		<arg swt_gen="true"></arg>
 		<arg swt_gen="true"></arg>
-		<arg swt_gen="true" swt_java_type="boolean" swt_java_type64="boolean"></arg>
-		<retval swt_gen="true"></retval>
-	</function>
-	<function name="CGPostMouseEvent" swt_gen="true" swt_variadic_count="4" swt_variadic_java_types="boolean,*">
-		<arg swt_gen="true"></arg>
-		<arg swt_gen="true" swt_java_type="boolean"></arg>
-		<arg swt_gen="true"></arg>
 		<arg swt_gen="true" swt_java_type="boolean"></arg>
 		<retval swt_gen="true"></retval>
 	</function>
-	<function name="CGPostScrollWheelEvent" swt_gen="true">
-		<arg swt_gen="true"></arg>
-		<arg swt_gen="true"></arg>
-		<retval swt_gen="true"></retval>
+	<function name="CGPostMouseEvent" swt_variadic_count="4" swt_variadic_java_types="boolean,*">
+		<arg></arg>
+		<arg swt_java_type="boolean"></arg>
+		<arg></arg>
+		<arg swt_java_type="boolean"></arg>
+		<retval></retval>
 	</function>
 	<function name="CGSetLocalEventsFilterDuringSuppressionState" swt_gen="true">
 		<arg swt_gen="true"></arg>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras
index e9ff140..ef51c74 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras	
@@ -101,6 +101,13 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="pathForResource:ofType:inDirectory:forLocalization:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="resourcePath" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -352,10 +359,18 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method class_method="true" selector="indexSetWithIndex:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="initWithIndex:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true" swt_java_type="NSIndexSet"></retval>
 		</method>
+		<method selector="initWithIndexSet:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="initWithIndexesInRange:" swt_gen="true">
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true" swt_java_type="NSIndexSet"></retval>
@@ -379,6 +394,17 @@
 			<retval swt_gen="true"></retval>
 		</method>
 	</class>
+	<class name="NSLocale" swt_gen="mixed">
+		<method selector="displayNameForKey:value:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithLocaleIdentifier:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
 	<class name="NSLogicalTest" swt_superclass="NSScriptWhoseTest">
 	</class>
 	<class name="NSMachBootstrapServer" swt_superclass="NSPortNameServer">
@@ -482,6 +508,10 @@
 			<arg swt_gen="true"></arg>
 			<retval swt_gen="true"></retval>
 		</method>
+		<method selector="removeIndex:" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
 	</class>
 	<class name="NSMutableSet" swt_gen="mixed" swt_superclass="NSSet">
 		<method selector="addObjectsFromArray:" swt_gen="true">
@@ -767,6 +797,9 @@
 	<class name="NSScriptClassDescription" swt_superclass="NSClassDescription">
 	</class>
 	<class name="NSSet" swt_gen="mixed">
+		<method selector="allObjects" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
 		<method selector="count" swt_gen="true">
 			<retval swt_gen="true"></retval>
 		</method>
@@ -1046,6 +1079,7 @@
 	</class>
 	<constant name="NSDefaultRunLoopMode" swt_gen="true"></constant>
 	<constant name="NSErrorFailingURLStringKey" swt_gen="true"></constant>
+	<constant name="NSLocaleLanguageCode" swt_gen="true"></constant>
 	<enum name="NSAllApplicationsDirectory" swt_gen="true"></enum>
 	<enum name="NSAllDomainsMask" swt_gen="true"></enum>
 	<enum name="NSNotFound" swt_gen="true"></enum>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java
index 4a1a001..a3ff53d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java	
@@ -33,6 +33,10 @@ public NSImage applicationIconImage() {
 	return result != 0 ? new NSImage(result) : null;
 }
 
+public void arrangeInFront(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_arrangeInFront_, sender != null ? sender.id : 0);
+}
+
 public void beginSheet(NSWindow sheet, NSWindow docWindow, id modalDelegate, int /*long*/ didEndSelector, int /*long*/ contextInfo) {
 	OS.objc_msgSend(this.id, OS.sel_beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_, sheet != null ? sheet.id : 0, docWindow != null ? docWindow.id : 0, modalDelegate != null ? modalDelegate.id : 0, didEndSelector, contextInfo);
 }
@@ -81,6 +85,11 @@ public NSMenu mainMenu() {
 	return result != 0 ? new NSMenu(result) : null;
 }
 
+public NSWindow mainWindow() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_mainWindow);
+	return result != 0 ? new NSWindow(result) : null;
+}
+
 public NSEvent nextEventMatchingMask(int /*long*/ mask, NSDate expiration, NSString mode, boolean deqFlag) {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_nextEventMatchingMask_untilDate_inMode_dequeue_, mask, expiration != null ? expiration.id : 0, mode != null ? mode.id : 0, deqFlag);
 	return result != 0 ? new NSEvent(result) : null;
@@ -111,6 +120,10 @@ public int /*long*/ runModalForWindow(NSWindow theWindow) {
 	return OS.objc_msgSend(this.id, OS.sel_runModalForWindow_, theWindow != null ? theWindow.id : 0);
 }
 
+public boolean sendAction(int /*long*/ theAction, id theTarget, id sender) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_sendAction_to_from_, theAction, theTarget != null ? theTarget.id : 0, sender != null ? sender.id : 0);
+}
+
 public void sendEvent(NSEvent theEvent) {
 	OS.objc_msgSend(this.id, OS.sel_sendEvent_, theEvent != null ? theEvent.id : 0);
 }
@@ -148,6 +161,11 @@ public void unhideAllApplications(id sender) {
 	OS.objc_msgSend(this.id, OS.sel_unhideAllApplications_, sender != null ? sender.id : 0);
 }
 
+public NSWindow windowWithWindowNumber(int /*long*/ windowNum) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_windowWithWindowNumber_, windowNum);
+	return result != 0 ? new NSWindow(result) : null;
+}
+
 public NSArray windows() {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_windows);
 	return result != 0 ? new NSArray(result) : null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java
index 9ff15a5..7d26d52 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,12 @@ public NSDictionary attributesAtIndex(int /*long*/ location, int /*long*/ range,
 	return result != 0 ? new NSDictionary(result) : null;
 }
 
+public NSRect boundingRectWithSize(NSSize size, int /*long*/ options) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_boundingRectWithSize_options_, size, options);
+	return result;
+}
+
 public NSRange doubleClickAtIndex(int /*long*/ location) {
 	NSRange result = new NSRange();
 	OS.objc_msgSend_stret(result, this.id, OS.sel_doubleClickAtIndex_, location);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java
index e65d4c5..ab76f90 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,6 +68,11 @@ public NSString pathForResource(NSString name, NSString ext) {
 	return result != 0 ? new NSString(result) : null;
 }
 
+public NSString pathForResource(NSString name, NSString ext, NSString subpath, NSString localizationName) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_pathForResource_ofType_inDirectory_forLocalization_, name != null ? name.id : 0, ext != null ? ext.id : 0, subpath != null ? subpath.id : 0, localizationName != null ? localizationName.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
 public NSString resourcePath() {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_resourcePath);
 	return result != 0 ? new NSString(result) : null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java
index ee7586e..bdc70b3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,12 @@ public void drawImage(NSImage image, NSRect frame, NSView controlView) {
 	OS.objc_msgSend(this.id, OS.sel_drawImage_withFrame_inView_, image != null ? image.id : 0, frame, controlView != null ? controlView.id : 0);
 }
 
+public NSRect drawTitle(NSAttributedString title, NSRect frame, NSView controlView) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_drawTitle_withFrame_inView_, title != null ? title.id : 0, frame, controlView != null ? controlView.id : 0);
+	return result;
+}
+
 public void setBackgroundColor(NSColor color) {
 	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
 }
@@ -41,6 +47,10 @@ public void setButtonType(int /*long*/ aType) {
 	OS.objc_msgSend(this.id, OS.sel_setButtonType_, aType);
 }
 
+public void setHighlightsBy(int /*long*/ aType) {
+	OS.objc_msgSend(this.id, OS.sel_setHighlightsBy_, aType);
+}
+
 public void setImagePosition(int /*long*/ aPosition) {
 	OS.objc_msgSend(this.id, OS.sel_setImagePosition_, aPosition);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java
index e7449ba..d5820a1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,10 @@ public NSSize cellSizeForBounds(NSRect aRect) {
 	return result;
 }
 
+public int /*long*/ controlSize() {
+	return OS.objc_msgSend(this.id, OS.sel_controlSize);
+}
+
 public void drawInteriorWithFrame(NSRect cellFrame, NSView controlView) {
 	OS.objc_msgSend(this.id, OS.sel_drawInteriorWithFrame_inView_, cellFrame, controlView != null ? controlView.id : 0);
 }
@@ -110,6 +114,10 @@ public void setAttributedStringValue(NSAttributedString obj) {
 	OS.objc_msgSend(this.id, OS.sel_setAttributedStringValue_, obj != null ? obj.id : 0);
 }
 
+public void setBackgroundStyle(int /*long*/ style) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundStyle_, style);
+}
+
 public void setBaseWritingDirection(int /*long*/ writingDirection) {
 	OS.objc_msgSend(this.id, OS.sel_setBaseWritingDirection_, writingDirection);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java
index 1e59ab9..aea601d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,9 +52,9 @@ public static NSColor clearColor() {
 	return result != 0 ? new NSColor(result) : null;
 }
 
-public NSColor colorUsingColorSpace(NSColorSpace space) {
-	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_colorUsingColorSpace_, space != null ? space.id : 0);
-	return result == this.id ? this : (result != 0 ? new NSColor(result) : null);
+public NSColorSpace colorSpace() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_colorSpace);
+	return result != 0 ? new NSColorSpace(result) : null;
 }
 
 public NSColor colorUsingColorSpaceName(NSString colorSpace) {
@@ -62,6 +62,11 @@ public NSColor colorUsingColorSpaceName(NSString colorSpace) {
 	return result == this.id ? this : (result != 0 ? new NSColor(result) : null);
 }
 
+public static NSColor colorWithCalibratedRed(float /*double*/ red, float /*double*/ green, float /*double*/ blue, float /*double*/ alpha) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_colorWithCalibratedRed_green_blue_alpha_, red, green, blue, alpha);
+	return result != 0 ? new NSColor(result) : null;
+}
+
 public static NSColor colorWithDeviceRed(float /*double*/ red, float /*double*/ green, float /*double*/ blue, float /*double*/ alpha) {
 	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_colorWithDeviceRed_green_blue_alpha_, red, green, blue, alpha);
 	return result != 0 ? new NSColor(result) : null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java
index f179cf4..150083e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,4 +42,8 @@ public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*lon
 	return (float)OS.objc_msgSend_fpret(OS.class_NSColorPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_NSColorPanel, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java
index 8048179..71c2f2c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,8 +24,12 @@ public NSColorSpace(id id) {
 	super(id);
 }
 
-public static NSColorSpace deviceRGBColorSpace() {
-	int /*long*/ result = OS.objc_msgSend(OS.class_NSColorSpace, OS.sel_deviceRGBColorSpace);
+public int /*long*/ colorSpaceModel() {
+	return OS.objc_msgSend(this.id, OS.sel_colorSpaceModel);
+}
+
+public static NSColorSpace genericRGBColorSpace() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColorSpace, OS.sel_genericRGBColorSpace);
 	return result != 0 ? new NSColorSpace(result) : null;
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java
index e64ffb4..68a46dc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,14 @@ public void setBackgroundColor(NSColor color) {
 	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
 }
 
+public void setBezeled(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setBezeled_, flag);
+}
+
+public void setBordered(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setBordered_, flag);
+}
+
 public void setDatePickerElements(int /*long*/ elementFlags) {
 	OS.objc_msgSend(this.id, OS.sel_setDatePickerElements_, elementFlags);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java
index 87921bd..e052654 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,6 +69,10 @@ public NSPoint locationInWindow() {
 	return result;
 }
 
+public float /*double*/ magnification() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_magnification);
+}
+
 public int /*long*/ modifierFlags() {
 	return OS.objc_msgSend(this.id, OS.sel_modifierFlags);
 }
@@ -84,10 +88,19 @@ public static NSEvent otherEventWithType(int /*long*/ type, NSPoint location, in
 	return result != 0 ? new NSEvent(result) : null;
 }
 
+public float rotation() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_rotation);
+}
+
 public double timestamp() {
 	return OS.objc_msgSend_fpret(this.id, OS.sel_timestamp);
 }
 
+public NSSet touchesMatchingPhase(int /*long*/ phase, NSView view) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_touchesMatchingPhase_inView_, phase, view != null ? view.id : 0);
+	return result != 0 ? new NSSet(result) : null;
+}
+
 public int /*long*/ type() {
 	return OS.objc_msgSend(this.id, OS.sel_type);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java
index f96c059..c0fcb8d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,4 +42,8 @@ public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*lon
 	return (float)OS.objc_msgSend_fpret(OS.class_NSFontPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_NSFontPanel, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java
index af08776..7f22c01 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,11 @@ public id initWithData(NSData data) {
 	return result != 0 ? new id(result) : null;
 }
 
+public NSImage initWithIconRef(int /*long*/ iconRef) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIconRef_, iconRef);
+	return result == this.id ? this : (result != 0 ? new NSImage(result) : null);
+}
+
 public NSImage initWithSize(NSSize aSize) {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithSize_, aSize);
 	return result == this.id ? this : (result != 0 ? new NSImage(result) : null);
@@ -88,6 +93,10 @@ public void setCacheMode(int /*long*/ mode) {
 	OS.objc_msgSend(this.id, OS.sel_setCacheMode_, mode);
 }
 
+public void setScalesWhenResized(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setScalesWhenResized_, flag);
+}
+
 public void setSize(NSSize aSize) {
 	OS.objc_msgSend(this.id, OS.sel_setSize_, aSize);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java
index a2b132f..601d923 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,11 +40,21 @@ public int /*long*/ getIndexes(int[] /*long[]*/ indexBuffer, int /*long*/ buffer
 	return OS.objc_msgSend(this.id, OS.sel_getIndexes_maxCount_inIndexRange_, indexBuffer, bufferSize, range);
 }
 
+public static id indexSetWithIndex(int /*long*/ value) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSIndexSet, OS.sel_indexSetWithIndex_, value);
+	return result != 0 ? new id(result) : null;
+}
+
 public NSIndexSet initWithIndex(int /*long*/ value) {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIndex_, value);
 	return result == this.id ? this : (result != 0 ? new NSIndexSet(result) : null);
 }
 
+public id initWithIndexSet(NSIndexSet indexSet) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIndexSet_, indexSet != null ? indexSet.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
 public NSIndexSet initWithIndexesInRange(NSRange range) {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIndexesInRange_, range);
 	return result == this.id ? this : (result != 0 ? new NSIndexSet(result) : null);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSLocale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSLocale.java
new file mode 100644
index 0000000..f356b8d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSLocale.java	
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.cocoa;
+
+public class NSLocale extends NSObject {
+
+public NSLocale() {
+	super();
+}
+
+public NSLocale(int /*long*/ id) {
+	super(id);
+}
+
+public NSLocale(id id) {
+	super(id);
+}
+
+public NSString displayNameForKey(id key, id value) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_displayNameForKey_value_, key != null ? key.id : 0, value != null ? value.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public id initWithLocaleIdentifier(NSString string) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithLocaleIdentifier_, string != null ? string.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java
index 1611c73..15e8b65 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,11 @@ public NSMenuItem itemAtIndex(int /*long*/ index) {
 	return result != 0 ? new NSMenuItem(result) : null;
 }
 
+public NSMenuItem itemWithTag(int /*long*/ tag) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemWithTag_, tag);
+	return result != 0 ? new NSMenuItem(result) : null;
+}
+
 public int /*long*/ numberOfItems() {
 	return OS.objc_msgSend(this.id, OS.sel_numberOfItems);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java
index 2ed4c9c..3d12164 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,10 @@ public NSMenuItem(id id) {
 	super(id);
 }
 
+public int /*long*/ action() {
+	return OS.objc_msgSend(this.id, OS.sel_action);
+}
+
 public NSAttributedString attributedTitle() {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_attributedTitle);
 	return result != 0 ? new NSAttributedString(result) : null;
@@ -43,6 +47,10 @@ public boolean isHidden() {
 	return OS.objc_msgSend_bool(this.id, OS.sel_isHidden);
 }
 
+public boolean isSeparatorItem() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isSeparatorItem);
+}
+
 public NSString keyEquivalent() {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_keyEquivalent);
 	return result != 0 ? new NSString(result) : null;
@@ -97,6 +105,10 @@ public void setSubmenu(NSMenu submenu) {
 	OS.objc_msgSend(this.id, OS.sel_setSubmenu_, submenu != null ? submenu.id : 0);
 }
 
+public void setTag(int /*long*/ anInt) {
+	OS.objc_msgSend(this.id, OS.sel_setTag_, anInt);
+}
+
 public void setTarget(id anObject) {
 	OS.objc_msgSend(this.id, OS.sel_setTarget_, anObject != null ? anObject.id : 0);
 }
@@ -114,6 +126,15 @@ public NSMenu submenu() {
 	return result != 0 ? new NSMenu(result) : null;
 }
 
+public int /*long*/ tag() {
+	return OS.objc_msgSend(this.id, OS.sel_tag);
+}
+
+public id target() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_target);
+	return result != 0 ? new id(result) : null;
+}
+
 public NSString title() {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_title);
 	return result != 0 ? new NSString(result) : null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java
index 60f8037..3eb8318 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,4 +28,13 @@ public void addIndex(int /*long*/ value) {
 	OS.objc_msgSend(this.id, OS.sel_addIndex_, value);
 }
 
+public void removeIndex(int /*long*/ value) {
+	OS.objc_msgSend(this.id, OS.sel_removeIndex_, value);
+}
+
+public static id indexSetWithIndex(int /*long*/ value) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableIndexSet, OS.sel_indexSetWithIndex_, value);
+	return result != 0 ? new id(result) : null;
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java
index 2fcca8e..c8ffbd8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java	
@@ -62,6 +62,14 @@ public int /*long*/ draggingSourceOperationMask() {
 	return OS.objc_msgSend(this.id, OS.sel_draggingSourceOperationMask);
 }
 
+public boolean outlineView(NSOutlineView outlineView, NSTableColumn tableColumn, id item) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_outlineView_shouldEditTableColumn_item_, outlineView != null ? outlineView.id : 0, tableColumn != null ? tableColumn.id : 0, item != null ? item.id : 0);
+}
+
+public boolean outlineView(NSOutlineView outlineView, int /*long*/ columnIndex, int /*long*/ newColumnIndex) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_outlineView_shouldReorderColumn_toColumn_, outlineView != null ? outlineView.id : 0, columnIndex, newColumnIndex);
+}
+
 public boolean outlineView(NSOutlineView outlineView, id item) {
 	return OS.objc_msgSend_bool(this.id, OS.sel_outlineView_shouldSelectItem_, outlineView != null ? outlineView.id : 0, item != null ? item.id : 0);
 }
@@ -70,6 +78,14 @@ public boolean outlineView(NSOutlineView outlineView, NSCell cell, NSTableColumn
 	return OS.objc_msgSend_bool(this.id, OS.sel_outlineView_shouldTrackCell_forTableColumn_item_, outlineView != null ? outlineView.id : 0, cell != null ? cell.id : 0, tableColumn != null ? tableColumn.id : 0, item != null ? item.id : 0);
 }
 
+public boolean readSelectionFromPasteboard(NSPasteboard pboard) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_readSelectionFromPasteboard_, pboard != null ? pboard.id : 0);
+}
+
+public boolean tableView(NSTableView tableView, int /*long*/ columnIndex, int /*long*/ newColumnIndex) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_tableView_shouldReorderColumn_toColumn_, tableView != null ? tableView.id : 0, columnIndex, newColumnIndex);
+}
+
 public boolean tableView(NSTableView tableView, int /*long*/ row) {
 	return OS.objc_msgSend_bool(this.id, OS.sel_tableView_shouldSelectRow_, tableView != null ? tableView.id : 0, row);
 }
@@ -78,6 +94,10 @@ public boolean tableView(NSTableView tableView, NSCell cell, NSTableColumn table
 	return OS.objc_msgSend_bool(this.id, OS.sel_tableView_shouldTrackCell_forTableColumn_row_, tableView != null ? tableView.id : 0, cell != null ? cell.id : 0, tableColumn != null ? tableColumn.id : 0, row);
 }
 
+public boolean writeSelectionToPasteboard(NSPasteboard pboard, NSArray types) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_writeSelectionToPasteboard_types_, pboard != null ? pboard.id : 0, types != null ? types.id : 0);
+}
+
 public NSObject autorelease() {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_autorelease);
 	return result == this.id ? this : (result != 0 ? new NSObject(result) : null);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java
index a53b6d2..407eb00 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,4 +55,8 @@ public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*lon
 	return (float)OS.objc_msgSend_fpret(OS.class_NSOpenPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_NSOpenPanel, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java
index a7ad52d..bb7cd91 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,14 @@ public NSPanel(id id) {
 	super(id);
 }
 
+public void setBecomesKeyOnlyIfNeeded(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setBecomesKeyOnlyIfNeeded_, flag);
+}
+
+public void setFloatingPanel(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setFloatingPanel_, flag);
+}
+
 public void setWorksWhenModal(boolean flag) {
 	OS.objc_msgSend(this.id, OS.sel_setWorksWhenModal_, flag);
 }
@@ -36,4 +44,8 @@ public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*lon
 	return (float)OS.objc_msgSend_fpret(OS.class_NSPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_NSPanel, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPoint.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPoint.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java
index 41a58a9..fc2fa09 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,14 @@ public NSPrintInfo(id id) {
 	super(id);
 }
 
+public int /*long*/ PMPrintSession() {
+	return OS.objc_msgSend(this.id, OS.sel_PMPrintSession);
+}
+
+public int /*long*/ PMPrintSettings() {
+	return OS.objc_msgSend(this.id, OS.sel_PMPrintSettings);
+}
+
 public static NSPrinter defaultPrinter() {
 	int /*long*/ result = OS.objc_msgSend(OS.class_NSPrintInfo, OS.sel_defaultPrinter);
 	return result != 0 ? new NSPrinter(result) : null;
@@ -50,16 +58,17 @@ public NSString jobDisposition() {
 	return result != 0 ? new NSString(result) : null;
 }
 
-public int /*long*/ orientation() {
-	return OS.objc_msgSend(this.id, OS.sel_orientation);
-}
-
 public NSSize paperSize() {
 	NSSize result = new NSSize();
 	OS.objc_msgSend_stret(result, this.id, OS.sel_paperSize);
 	return result;
 }
 
+public NSMutableDictionary printSettings() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_printSettings);
+	return result != 0 ? new NSMutableDictionary(result) : null;
+}
+
 public NSPrinter printer() {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_printer);
 	return result != 0 ? new NSPrinter(result) : null;
@@ -69,10 +78,6 @@ public void setJobDisposition(NSString disposition) {
 	OS.objc_msgSend(this.id, OS.sel_setJobDisposition_, disposition != null ? disposition.id : 0);
 }
 
-public void setOrientation(int /*long*/ orientation) {
-	OS.objc_msgSend(this.id, OS.sel_setOrientation_, orientation);
-}
-
 public void setPrinter(NSPrinter printer) {
 	OS.objc_msgSend(this.id, OS.sel_setPrinter_, printer != null ? printer.id : 0);
 }
@@ -86,4 +91,8 @@ public static NSPrintInfo sharedPrintInfo() {
 	return result != 0 ? new NSPrintInfo(result) : null;
 }
 
+public void updateFromPMPrintSettings() {
+	OS.objc_msgSend(this.id, OS.sel_updateFromPMPrintSettings);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRect.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRect.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java
index cbc51fe..94575b5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,14 @@ public boolean becomeFirstResponder() {
 	return OS.objc_msgSend_bool(this.id, OS.sel_becomeFirstResponder);
 }
 
+public void beginGestureWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_beginGestureWithEvent_, event != null ? event.id : 0);
+}
+
+public void cancelOperation(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_cancelOperation_, sender != null ? sender.id : 0);
+}
+
 public void cursorUpdate(NSEvent event) {
 	OS.objc_msgSend(this.id, OS.sel_cursorUpdate_, event != null ? event.id : 0);
 }
@@ -40,6 +48,10 @@ public void doCommandBySelector(int /*long*/ aSelector) {
 	OS.objc_msgSend(this.id, OS.sel_doCommandBySelector_, aSelector);
 }
 
+public void endGestureWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_endGestureWithEvent_, event != null ? event.id : 0);
+}
+
 public void flagsChanged(NSEvent theEvent) {
 	OS.objc_msgSend(this.id, OS.sel_flagsChanged_, theEvent != null ? theEvent.id : 0);
 }
@@ -64,6 +76,10 @@ public void keyUp(NSEvent theEvent) {
 	OS.objc_msgSend(this.id, OS.sel_keyUp_, theEvent != null ? theEvent.id : 0);
 }
 
+public void magnifyWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_magnifyWithEvent_, event != null ? event.id : 0);
+}
+
 public void mouseDown(NSEvent theEvent) {
 	OS.objc_msgSend(this.id, OS.sel_mouseDown_, theEvent != null ? theEvent.id : 0);
 }
@@ -124,6 +140,10 @@ public void pageUp(id sender) {
 	OS.objc_msgSend(this.id, OS.sel_pageUp_, sender != null ? sender.id : 0);
 }
 
+public boolean performKeyEquivalent(NSEvent theEvent) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_performKeyEquivalent_, theEvent != null ? theEvent.id : 0);
+}
+
 public boolean resignFirstResponder() {
 	return OS.objc_msgSend_bool(this.id, OS.sel_resignFirstResponder);
 }
@@ -140,8 +160,37 @@ public void rightMouseUp(NSEvent theEvent) {
 	OS.objc_msgSend(this.id, OS.sel_rightMouseUp_, theEvent != null ? theEvent.id : 0);
 }
 
+public void rotateWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_rotateWithEvent_, event != null ? event.id : 0);
+}
+
 public void scrollWheel(NSEvent theEvent) {
 	OS.objc_msgSend(this.id, OS.sel_scrollWheel_, theEvent != null ? theEvent.id : 0);
 }
 
+public void swipeWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_swipeWithEvent_, event != null ? event.id : 0);
+}
+
+public void touchesBeganWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_touchesBeganWithEvent_, event != null ? event.id : 0);
+}
+
+public void touchesCancelledWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_touchesCancelledWithEvent_, event != null ? event.id : 0);
+}
+
+public void touchesEndedWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_touchesEndedWithEvent_, event != null ? event.id : 0);
+}
+
+public void touchesMovedWithEvent(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_touchesMovedWithEvent_, event != null ? event.id : 0);
+}
+
+public id validRequestorForSendType(NSString sendType, NSString returnType) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_validRequestorForSendType_returnType_, sendType != null ? sendType.id : 0, returnType != null ? returnType.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java
index e455c29..e5faa0b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,4 +70,8 @@ public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*lon
 	return (float)OS.objc_msgSend_fpret(OS.class_NSSavePanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_NSSavePanel, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java
index 9196938..ba695d8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,4 +94,8 @@ public void setVerticalScroller(NSScroller anObject) {
 	OS.objc_msgSend(this.id, OS.sel_setVerticalScroller_, anObject != null ? anObject.id : 0);
 }
 
+public void tile() {
+	OS.objc_msgSend(this.id, OS.sel_tile);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java
index ed6afcc..998b521 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,11 @@ public NSSet(id id) {
 	super(id);
 }
 
+public NSArray allObjects() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_allObjects);
+	return result != 0 ? new NSArray(result) : null;
+}
+
 public int /*long*/ count() {
 	return OS.objc_msgSend(this.id, OS.sel_count);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSize.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSize.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java
index d81fc2b..4bfd583 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,10 @@ public int /*long*/ clickedRow() {
 	return OS.objc_msgSend(this.id, OS.sel_clickedRow);
 }
 
+public int /*long*/ columnAtPoint(NSPoint point) {
+	return OS.objc_msgSend(this.id, OS.sel_columnAtPoint_, point);
+}
+
 public NSIndexSet columnIndexesInRect(NSRect rect) {
 	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_columnIndexesInRect_, rect);
 	return result != 0 ? new NSIndexSet(result) : null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java
index 82c8786..db010b4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,10 @@ public void insertItemWithItemIdentifier(NSString itemIdentifier, int /*long*/ i
 	OS.objc_msgSend(this.id, OS.sel_insertItemWithItemIdentifier_atIndex_, itemIdentifier != null ? itemIdentifier.id : 0, index);
 }
 
+public boolean isVisible() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isVisible);
+}
+
 public void removeItemAtIndex(int /*long*/ index) {
 	OS.objc_msgSend(this.id, OS.sel_removeItemAtIndex_, index);
 }
@@ -49,6 +53,10 @@ public void setDisplayMode(int /*long*/ displayMode) {
 	OS.objc_msgSend(this.id, OS.sel_setDisplayMode_, displayMode);
 }
 
+public void setSelectedItemIdentifier(NSString itemIdentifier) {
+	OS.objc_msgSend(this.id, OS.sel_setSelectedItemIdentifier_, itemIdentifier != null ? itemIdentifier.id : 0);
+}
+
 public void setVisible(boolean shown) {
 	OS.objc_msgSend(this.id, OS.sel_setVisible_, shown);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java
index ea08b1a..efe821e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,10 @@ public void setMaxSize(NSSize size) {
 	OS.objc_msgSend(this.id, OS.sel_setMaxSize_, size);
 }
 
+public void setMenuFormRepresentation(NSMenuItem menuItem) {
+	OS.objc_msgSend(this.id, OS.sel_setMenuFormRepresentation_, menuItem != null ? menuItem.id : 0);
+}
+
 public void setMinSize(NSSize size) {
 	OS.objc_msgSend(this.id, OS.sel_setMinSize_, size);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTouch.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTouch.java
new file mode 100644
index 0000000..d2c2b0e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTouch.java	
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.cocoa;
+
+public class NSTouch extends NSObject {
+
+public NSTouch() {
+	super();
+}
+
+public NSTouch(int /*long*/ id) {
+	super(id);
+}
+
+public NSTouch(id id) {
+	super(id);
+}
+
+public id device() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_device);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSSize deviceSize() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_deviceSize);
+	return result;
+}
+
+public boolean isResting() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isResting);
+}
+
+public NSPoint normalizedPosition() {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_normalizedPosition);
+	return result;
+}
+
+public int /*long*/ phase() {
+	return OS.objc_msgSend(this.id, OS.sel_phase);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java
index 68ed879..fd70c7f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -203,6 +203,14 @@ public NSMenu menuForEvent(NSEvent event) {
 	return result != 0 ? new NSMenu(result) : null;
 }
 
+public boolean mouse(NSPoint aPoint, NSRect aRect) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_mouse_inRect_, aPoint, aRect);
+}
+
+public boolean mouseDownCanMoveWindow() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_mouseDownCanMoveWindow);
+}
+
 public void registerForDraggedTypes(NSArray newTypes) {
 	OS.objc_msgSend(this.id, OS.sel_registerForDraggedTypes_, newTypes != null ? newTypes.id : 0);
 }
@@ -211,6 +219,10 @@ public void removeFromSuperview() {
 	OS.objc_msgSend(this.id, OS.sel_removeFromSuperview);
 }
 
+public void removeToolTip(int /*long*/ tag) {
+	OS.objc_msgSend(this.id, OS.sel_removeToolTip_, tag);
+}
+
 public void removeTrackingArea(NSTrackingArea trackingArea) {
 	OS.objc_msgSend(this.id, OS.sel_removeTrackingArea_, trackingArea != null ? trackingArea.id : 0);
 }
@@ -231,6 +243,10 @@ public boolean scrollRectToVisible(NSRect aRect) {
 	return OS.objc_msgSend_bool(this.id, OS.sel_scrollRectToVisible_, aRect);
 }
 
+public void setAcceptsTouchEvents(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAcceptsTouchEvents_, flag);
+}
+
 public void setAutoresizesSubviews(boolean flag) {
 	OS.objc_msgSend(this.id, OS.sel_setAutoresizesSubviews_, flag);
 }
@@ -275,6 +291,10 @@ public void setToolTip(NSString string) {
 	OS.objc_msgSend(this.id, OS.sel_setToolTip_, string != null ? string.id : 0);
 }
 
+public void setWantsRestingTouches(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setWantsRestingTouches_, flag);
+}
+
 public boolean shouldDelayWindowOrderingForEvent(NSEvent theEvent) {
 	return OS.objc_msgSend_bool(this.id, OS.sel_shouldDelayWindowOrderingForEvent_, theEvent != null ? theEvent.id : 0);
 }
@@ -310,6 +330,10 @@ public void viewDidMoveToWindow() {
 	OS.objc_msgSend(this.id, OS.sel_viewDidMoveToWindow);
 }
 
+public void viewWillMoveToWindow(NSWindow newWindow) {
+	OS.objc_msgSend(this.id, OS.sel_viewWillMoveToWindow_, newWindow != null ? newWindow.id : 0);
+}
+
 public NSRect visibleRect() {
 	NSRect result = new NSRect();
 	OS.objc_msgSend_stret(result, this.id, OS.sel_visibleRect);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java
index 538ff89..594056f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -166,6 +166,10 @@ public boolean isKeyWindow() {
 	return OS.objc_msgSend_bool(this.id, OS.sel_isKeyWindow);
 }
 
+public boolean isMainWindow() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isMainWindow);
+}
+
 public boolean isMiniaturized() {
 	return OS.objc_msgSend_bool(this.id, OS.sel_isMiniaturized);
 }
@@ -182,6 +186,10 @@ public boolean isZoomed() {
 	return OS.objc_msgSend_bool(this.id, OS.sel_isZoomed);
 }
 
+public int /*long*/ level() {
+	return OS.objc_msgSend(this.id, OS.sel_level);
+}
+
 public boolean makeFirstResponder(NSResponder aResponder) {
 	return OS.objc_msgSend_bool(this.id, OS.sel_makeFirstResponder_, aResponder != null ? aResponder.id : 0);
 }
@@ -292,6 +300,10 @@ public void setHasShadow(boolean hasShadow) {
 	OS.objc_msgSend(this.id, OS.sel_setHasShadow_, hasShadow);
 }
 
+public void setHidesOnDeactivate(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setHidesOnDeactivate_, flag);
+}
+
 public void setLevel(int /*long*/ newLevel) {
 	OS.objc_msgSend(this.id, OS.sel_setLevel_, newLevel);
 }
@@ -308,6 +320,14 @@ public void setReleasedWhenClosed(boolean flag) {
 	OS.objc_msgSend(this.id, OS.sel_setReleasedWhenClosed_, flag);
 }
 
+public void setRepresentedFilename(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setRepresentedFilename_, aString != null ? aString.id : 0);
+}
+
+public void setRepresentedURL(NSURL url) {
+	OS.objc_msgSend(this.id, OS.sel_setRepresentedURL_, url != null ? url.id : 0);
+}
+
 public void setShowsResizeIndicator(boolean show) {
 	OS.objc_msgSend(this.id, OS.sel_setShowsResizeIndicator_, show);
 }
@@ -350,6 +370,14 @@ public int /*long*/ windowNumber() {
 	return OS.objc_msgSend(this.id, OS.sel_windowNumber);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_NSWindow, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
+public int /*long*/ windowRef() {
+	return OS.objc_msgSend(this.id, OS.sel_windowRef);
+}
+
 public void zoom(id sender) {
 	OS.objc_msgSend(this.id, OS.sel_zoom_, sender != null ? sender.id : 0);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
index 425dc72..118aa48 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,12 +24,31 @@ public class OS extends C {
 		VERSION = response [0] & 0xffff;		
 	}
 	
+	/*
+	 *  Magic number explanation, from Cocoa's TextSizingExample:
+	 *  
+	 *  "The first is called LargeNumberForText [1.0e7] and it was not arbitrarily chosen.
+	 *  The actual value was chosen to be around the largest floating point value possible that can preserve at least pixel precision. [...]
+	 *  It is not wise to use bigger dimensions for text system objects because, even if you ever fill all that space, 
+	 *  by the time you get to the far reaches, the letters won't have the precision necessary to look and act correctly. 
+	 *  [...] Because the Cocoa text system respects this limit in various ways, a second constant, NotQuiteAsLargeNumberForText, is used for the 
+	 *  field-like text views created by the FieldAspect class. This is simply half of LargeNumberForText; at sizes as large as LargeNumberForText, 
+	 *  the text system stops aligning text, for various reasons."
+	 */
+	public static final float /*double*/ MAX_TEXT_CONTAINER_SIZE = 0.5e7f;
+	
 	public static final int gestaltSystemVersion = ('s'<<24) + ('y'<<16) + ('s'<<8) + 'v';
 	public static final int noErr = 0;
 	public static final int kProcessTransformToForegroundApplication = 1;
+	public static final int kSystemIconsCreator = ('m' << 24) + ('a' << 16) + ('c' << 8) + 's';
 	public static final int kAlertCautionIcon = ('c'<<24) + ('a'<<16) + ('u'<<8) + 't';
 	public static final int kAlertNoteIcon = ('n'<<24) + ('o'<<16) + ('t'<<8) + 'e';
 	public static final int kAlertStopIcon = ('s'<<24) + ('t'<<16) + ('o'<<8) + 'p';
+	public static final int kHICommandHide = ('h'<<24) + ('i'<<16) + ('d'<<8) + 'e';
+	public static final int kHICommandHideOthers = ('h'<<24) + ('i'<<16) + ('d'<<8) + 'o';
+	public static final int kHICommandShowAll = ('s'<<24) + ('h'<<16) + ('a'<<8) + 'l';
+	public static final int kHICommandQuit = ('q'<<24) + ('u'<<16) + ('i'<<8) + 't';
+	public static final int kHICommandServices = ('s'<<24) + ('e'<<16) + ('r'<<8) + 'v';
 	public static final int shiftKey = 1 << 9;
 	public static final int kThemeMetricFocusRectOutset = 7;
 	public static final int kHIThemeOrientationNormal = 0;
@@ -43,8 +62,12 @@ public class OS extends C {
 	public static final int kAXUnderlineStyleSingle = 0x1; 
 	public static final int kAXUnderlineStyleThick = 0x2; 
 	public static final int kAXUnderlineStyleDouble = 0x9;
+	public static final int kPMDestinationPrinter = 1;
+	public static final int kPMDuplexNone = 0x0001;
+	public static final int kPMDuplexNoTumble = 0x0002;
+	public static final int kPMDuplexTumble = 0x0003;
 
-
+	public static final int /*long*/ sel_identity = sel_registerName("identity");
 	public static final int /*long*/ sel_sendSearchSelection = sel_registerName("sendSearchSelection");
 	public static final int /*long*/ sel_sendCancelSelection = sel_registerName("sendCancelSelection");
 	public static final int /*long*/ sel_sendSelection = sel_registerName("sendSelection");
@@ -54,7 +77,7 @@ public class OS extends C {
 	public static final int /*long*/ sel_sendHorizontalSelection = sel_registerName("sendHorizontalSelection");
 	public static final int /*long*/ sel_timerProc_ = sel_registerName("timerProc:");
 	public static final int /*long*/ sel_handleNotification_ = sel_registerName("handleNotification:");
-	public static final int /*long*/ sel_callJava = sel_registerName("callJava:index:arg:");
+	public static final int /*long*/ sel_callJava = sel_registerName("callJava:index:token:arg:");
 	public static final int /*long*/ sel_callRunBeforeUnloadConfirmPanelWithMessage = sel_registerName("callRunBeforeUnloadConfirmPanelWithMessage:arg:");
 	public static final int /*long*/ sel_createPanelDidEnd = sel_registerName("createPanelDidEnd:returnCode:contextInfo:");
 	public static final int /*long*/ sel_systemSettingsChanged_ = sel_registerName("systemSettingsChanged:");
@@ -80,9 +103,13 @@ public class OS extends C {
 	public static final int /*long*/ sel_setAllowsAnyHTTPSCertificate = sel_registerName("setAllowsAnyHTTPSCertificate:forHost:");
 	
 	public static final int /*long*/ sel_accessibleHandle = sel_registerName("accessibleHandle");
+	public static final int /*long*/ sel_getImageView = sel_registerName("getImageView");
 
 	public static final int /*long*/ sel_clearDeferFlushing = sel_registerName("clearDeferFlushing");
-
+	
+	public static final int /*long*/ sel_setShouldExpandItem_ = sel_registerName("setShouldExpandItem:");
+	public static final int /*long*/ sel_setShouldScrollClipView_ = sel_registerName("setShouldScrollClipView:");
+	
 	/* These are not generated in order to avoid creating static methods on all classes */
 	public static final int /*long*/ sel_isSelectorExcludedFromWebScript_ = sel_registerName("isSelectorExcludedFromWebScript:");
 	public static final int /*long*/ sel_webScriptNameForSelector_ = sel_registerName("webScriptNameForSelector:");
@@ -91,6 +118,10 @@ public class OS extends C {
 	
 	public static final int /*long*/ sel_javaRunLoopMode = sel_registerName("javaRunLoopMode");
 
+	/* These are not generated in order to avoid attempting to create a java method called "null" */
+	public static final int /*long*/ class_NSNull = objc_getClass("NSNull");
+	public static final int /*long*/ sel_null = sel_registerName("null");
+
 	/* NSTextAttachmentCell */
 	/** @method callback_types=NSPoint;id;SEL;,callback_flags=struct;none;none; */
 	public static final native int /*long*/ CALLBACK_cellBaselineOffset(int /*long*/ func);
@@ -113,6 +144,12 @@ public class OS extends C {
 	public static final native int /*long*/ NSAccessibilityCellRole();
 	public static final NSString NSAccessibilityCellRole = new NSString(NSAccessibilityCellRole());
 
+	/* AWT application delegate. Remove these when JavaRuntimeSupport.framework has bridgesupport generated for it. */
+	public static final int /*long*/ class_JRSAppKitAWT = objc_getClass("JRSAppKitAWT");
+	public static final int /*long*/ sel_awtAppDelegate = sel_registerName("awtAppDelegate");
+	
+	public static final int /*long*/ class_NSToolbarView = objc_getClass("NSToolbarView");
+
 /** JNI natives */
 
 /** @method flags=jni */
@@ -138,9 +175,17 @@ public static final native int CPSSetProcessName(int[] psn, int /*long*/ name);
 /** @method flags=dynamic */
 public static final native int SetThemeCursor(int themeCursor);
 /** @method flags=dynamic */
-public static final native int GetCurrentButtonState();
+public static final native int GetCurrentEventButtonState();
 /** @method flags=dynamic */
 public static final native int GetDblTime();
+/** @method flags=dynamic
+	@param inCreator cast=(OSType) 
+	@param inType cast=(OSType) 
+	@param inExtension cast=(CFStringRef) 
+	@param inMIMEType cast=(CFStringRef) 
+	@param inUsageFlags cast=(IconServicesUsageFlags) 
+	@param outIconRef cast=(IconRef *) */
+public static final native int GetIconRefFromTypeInfo(int inCreator, int inType, int /*long*/ inExtension, int /*long*/ inMIMEType, int inUsageFlags, int /*long*/ outIconRef[]);
 /** @method flags=dynamic 
     @param  cast=(CGContextRef) */
 public static final native int /*long*/ CGContextCopyPath(int /*long*/ context);
@@ -239,6 +284,62 @@ public static final native int CancelMenuTracking (int /*long*/ inRootMenu, bool
  * @param outAppURL cast=(CFURLRef *)
  */
 public static final native int /*long*/ LSGetApplicationForInfo(int inType, int inCreator,int /*long*/ inExtension, int inRoleMask, byte[] outAppRef, int[] outAppURL);
+/** @method flags=dynamic
+ * @param mHandle cast=(MenuRef)
+ * @param commandId cast=(MenuCommand)
+ * @param index cast=(UInt32)
+ * @param outMenu cast=(MenuRef *)
+ * @param outIndex cast=(MenuItemIndex *)
+ */
+public static final native int GetIndMenuItemWithCommandID(int /*long*/ mHandle, int commandId, int index, int /*long*/ [] outMenu, short[] outIndex);
+/** @method flags=dynamic
+ * @param mHandle cast=(MenuRef)
+ * @param index cast=(short)
+ */
+public static final native void DeleteMenuItem(int /*long*/ mHandle, short index);
+/** @method flags=dynamic
+ * @param pmSessionInfo cast=(PMPrintSession)
+ * @param outPMPrinter cast=(PMPrinter *)
+ */
+public static final native int /*long*/ PMSessionGetCurrentPrinter(int /*long*/ pmSessionInfo, int /*long*/[] outPMPrinter);
+/** @method flags=dynamic
+ * @param pmSessionInfo cast=(PMPrintSession)
+ * @param pmPrintSettings cast=(PMPrintSettings)
+ */
+public static final native int /*long*/ PMSessionGetDestinationType(int /*long*/ pmSessionInfo, int /*long*/ pmPrintSettings, short[] outDestinationType);
+/** @method flags=dynamic
+ * @param printSettings cast=(PMPrintSettings)
+ * @param outDuplexSetting cast=(PMDuplexMode *)
+ */
+public static final native int /*long*/ PMGetDuplex(int /*long*/ printSettings, int[] outDuplexSetting);
+/** @method flags=dynamic
+ * @param printSettings cast=(PMPrintSettings)
+ * @param duplexSetting cast=(PMDuplexMode)
+ */
+public static final native int /*long*/ PMSetDuplex(int /*long*/ printSettings, int duplexSetting);
+/** @method flags=dynamic
+ * @param pmPrinter cast=(PMPrinter)
+ * @param pmPrintSettings cast=(PMPrintSettings)
+ */
+public static final native int /*long*/ PMPrinterGetPrinterResolutionCount(int /*long*/ pmPrinter, int[] outNumResolutions);
+/** @method flags=dynamic
+ * @param pmPrinter cast=(PMPrinter)
+ * @param pmPrintSettings cast=(PMPrintSettings)
+ * @param outResolution cast=(PMResolution *)
+ */
+public static final native int /*long*/ PMPrinterGetOutputResolution(int /*long*/ pmPrinter, int /*long*/ pmPrintSettings, PMResolution outResolution);
+/** @method flags=dynamic
+ * @param pmPrinter cast=(PMPrinter)
+ * @param outResolution cast=(PMResolution *)
+ */
+public static final native int /*long*/ PMPrinterGetIndexedPrinterResolution(int /*long*/ pmPrinter, int index, PMResolution outResolution);
+
+// Custom FindWindow implementation to avoid namespace collisions with Point.
+/**
+ * @method flags=no_gen
+ * @param wHandle cast=(WindowRef *)
+ */
+public static final native int /*long*/ FindWindow (int /*long*/ h, int /*long*/ v, int /*long*/ [] wHandle);
 
 /** C calls */
 
@@ -311,6 +412,24 @@ public static final int kQDParseRegionFromRight = (1 << 3);
 public static final int kQDParseRegionFromTopLeft = kQDParseRegionFromTop | kQDParseRegionFromLeft;
 public static final int kQDRegionToRectsMsgParse = 2;
 
+/**
+ * @method flags=dynamic
+ * @param cgLocation cast=(HIPoint *)
+ * @param inSpace cast=(HICoordinateSpace)
+ * @param inStartWindow cast=(WindowRef)
+ * @param inOptions cast=(OptionBits)
+ * @param outWindow cast=(WindowRef *)
+ * @param outWindowPart cast=(WindowPartCode *)
+ * @param outWindowLocation cast=(HIPoint *)
+ */
+public static final native int HIWindowFindAtLocation(int /*long*/ cgLocation, int inSpace, int /*long*/ inStartWindow, int inOptions, int /*long*/[] outWindow, int /*long*/ [] outWindowPart, int /*long*/ outWindowLocation);
+
+/**
+ * @method flags=dynamic
+ * @param inWindow cast=(WindowRef)
+ */
+public static final native int HIWindowGetCGWindowID(int /*long*/ inWindow);
+
 /** JavaScriptCore calls */
 
 /**
@@ -437,6 +556,8 @@ public static final native String class_getName(int /*long*/ cls);
 public static final native void instrumentObjcMessageSends(boolean val);
 /** @param superclass cast=(Class) */
 public static final native int /*long*/ objc_allocateClassPair(int /*long*/ superclass, String name, int /*long*/ extraBytes);
+/** @param klass cast=(Class) */
+public static final native void objc_disposeClassPair(int /*long*/ klass);
 public static final native int /*long*/ objc_getClass(String className);
 public static final native int /*long*/ objc_getMetaClass(String name);
 public static final native int /*long*/ objc_getProtocol(String name);
@@ -480,8 +601,12 @@ public static final native int /*long*/ CALLBACK_attributedSubstringFromRange_(i
 public static final native int /*long*/ CALLBACK_canDragRowsWithIndexes_atPoint_(int /*long*/ func);
 /** @method callback_types=NSSize;id;SEL;,callback_flags=struct;none;none; */
 public static final native int /*long*/ CALLBACK_cellSize(int /*long*/ func);
+/** @method callback_types=NSSize;id;SEL;NSRect;,callback_flags=struct;none;none;struct; */
+public static final native int /*long*/ CALLBACK_cellSizeForBounds_(int /*long*/ func);
 /** @method callback_types=NSUInteger;id;SEL;NSPoint;,callback_flags=none;none;none;struct; */
 public static final native int /*long*/ CALLBACK_characterIndexForPoint_(int /*long*/ func);
+/** @method callback_types=NSInteger;id;SEL;NSPoint;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_columnAtPoint_(int /*long*/ func);
 /** @method callback_types=BOOL;id;SEL;NSEvent*;NSSize;BOOL;,callback_flags=none;none;none;none;struct;none; */
 public static final native int /*long*/ CALLBACK_dragSelectionWithEvent_offset_slideBack_(int /*long*/ func);
 /** @method callback_types=void;id;SEL;NSImage*;NSPoint;,callback_flags=none;none;none;none;struct; */
@@ -498,6 +623,8 @@ public static final native int /*long*/ CALLBACK_drawInteriorWithFrame_inView_(i
 public static final native int /*long*/ CALLBACK_drawLabel_inRect_(int /*long*/ func);
 /** @method callback_types=void;id;SEL;NSRect;,callback_flags=none;none;none;struct; */
 public static final native int /*long*/ CALLBACK_drawRect_(int /*long*/ func);
+/** @method callback_types=NSRect;id;SEL;NSAttributedString*;NSRect;NSView*;,callback_flags=struct;none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_drawTitle_withFrame_inView_(int /*long*/ func);
 /** @method callback_types=void;id;SEL;NSRect;,callback_flags=none;none;none;struct; */
 public static final native int /*long*/ CALLBACK_drawViewBackgroundInRect_(int /*long*/ func);
 /** @method callback_types=void;id;SEL;NSRect;NSView*;,callback_flags=none;none;none;struct;none; */
@@ -506,6 +633,8 @@ public static final native int /*long*/ CALLBACK_drawWithExpansionFrame_inView_(
 public static final native int /*long*/ CALLBACK_expansionFrameWithFrame_inView_(int /*long*/ func);
 /** @method callback_types=NSRect;id;SEL;NSRange;,callback_flags=struct;none;none;struct; */
 public static final native int /*long*/ CALLBACK_firstRectForCharacterRange_(int /*long*/ func);
+/** @method callback_types=NSRect;id;SEL;NSInteger;,callback_flags=struct;none;none;none; */
+public static final native int /*long*/ CALLBACK_headerRectOfColumn_(int /*long*/ func);
 /** @method callback_types=void;id;SEL;NSRect;,callback_flags=none;none;none;struct; */
 public static final native int /*long*/ CALLBACK_highlightSelectionInClipRect_(int /*long*/ func);
 /** @method callback_types=NSView*;id;SEL;NSPoint;,callback_flags=none;none;none;struct; */
@@ -605,6 +734,7 @@ public static final int /*long*/ class_NSInputManager = objc_getClass("NSInputMa
 public static final int /*long*/ class_NSKeyedArchiver = objc_getClass("NSKeyedArchiver");
 public static final int /*long*/ class_NSKeyedUnarchiver = objc_getClass("NSKeyedUnarchiver");
 public static final int /*long*/ class_NSLayoutManager = objc_getClass("NSLayoutManager");
+public static final int /*long*/ class_NSLocale = objc_getClass("NSLocale");
 public static final int /*long*/ class_NSMenu = objc_getClass("NSMenu");
 public static final int /*long*/ class_NSMenuItem = objc_getClass("NSMenuItem");
 public static final int /*long*/ class_NSMutableArray = objc_getClass("NSMutableArray");
@@ -668,6 +798,7 @@ public static final int /*long*/ class_NSTimeZone = objc_getClass("NSTimeZone");
 public static final int /*long*/ class_NSTimer = objc_getClass("NSTimer");
 public static final int /*long*/ class_NSToolbar = objc_getClass("NSToolbar");
 public static final int /*long*/ class_NSToolbarItem = objc_getClass("NSToolbarItem");
+public static final int /*long*/ class_NSTouch = objc_getClass("NSTouch");
 public static final int /*long*/ class_NSTrackingArea = objc_getClass("NSTrackingArea");
 public static final int /*long*/ class_NSTypesetter = objc_getClass("NSTypesetter");
 public static final int /*long*/ class_NSURL = objc_getClass("NSURL");
@@ -701,6 +832,7 @@ public static final int /*long*/ protocol_NSDraggingDestination = objc_getProtoc
 public static final int /*long*/ protocol_NSDraggingSource = objc_getProtocol("NSDraggingSource");
 public static final int /*long*/ protocol_NSFontManagerResponderMethod = objc_getProtocol("NSFontManagerResponderMethod");
 public static final int /*long*/ protocol_NSMenuDelegate = objc_getProtocol("NSMenuDelegate");
+public static final int /*long*/ protocol_NSMenuValidation = objc_getProtocol("NSMenuValidation");
 public static final int /*long*/ protocol_NSOutlineViewDataSource = objc_getProtocol("NSOutlineViewDataSource");
 public static final int /*long*/ protocol_NSOutlineViewDelegate = objc_getProtocol("NSOutlineViewDelegate");
 public static final int /*long*/ protocol_NSOutlineViewNotifications = objc_getProtocol("NSOutlineViewNotifications");
@@ -731,6 +863,8 @@ public static final int /*long*/ protocol_WebUIDelegate = objc_getProtocol("WebU
 public static final int /*long*/ sel_CGEvent = sel_registerName("CGEvent");
 public static final int /*long*/ sel_DOMDocument = sel_registerName("DOMDocument");
 public static final int /*long*/ sel_IBeamCursor = sel_registerName("IBeamCursor");
+public static final int /*long*/ sel_PMPrintSession = sel_registerName("PMPrintSession");
+public static final int /*long*/ sel_PMPrintSettings = sel_registerName("PMPrintSettings");
 public static final int /*long*/ sel_TIFFRepresentation = sel_registerName("TIFFRepresentation");
 public static final int /*long*/ sel_URL = sel_registerName("URL");
 public static final int /*long*/ sel_URLFromPasteboard_ = sel_registerName("URLFromPasteboard:");
@@ -781,6 +915,7 @@ public static final int /*long*/ sel_addToolTipRect_owner_userData_ = sel_regist
 public static final int /*long*/ sel_addTypes_owner_ = sel_registerName("addTypes:owner:");
 public static final int /*long*/ sel_alignment = sel_registerName("alignment");
 public static final int /*long*/ sel_allKeys = sel_registerName("allKeys");
+public static final int /*long*/ sel_allObjects = sel_registerName("allObjects");
 public static final int /*long*/ sel_alloc = sel_registerName("alloc");
 public static final int /*long*/ sel_allowsColumnReordering = sel_registerName("allowsColumnReordering");
 public static final int /*long*/ sel_allowsFloats = sel_registerName("allowsFloats");
@@ -812,6 +947,7 @@ public static final int /*long*/ sel_applicationWillFinishLaunching_ = sel_regis
 public static final int /*long*/ sel_applicationWillTerminate_ = sel_registerName("applicationWillTerminate:");
 public static final int /*long*/ sel_archivedDataWithRootObject_ = sel_registerName("archivedDataWithRootObject:");
 public static final int /*long*/ sel_areCursorRectsEnabled = sel_registerName("areCursorRectsEnabled");
+public static final int /*long*/ sel_arrangeInFront_ = sel_registerName("arrangeInFront:");
 public static final int /*long*/ sel_array = sel_registerName("array");
 public static final int /*long*/ sel_arrayWithCapacity_ = sel_registerName("arrayWithCapacity:");
 public static final int /*long*/ sel_arrayWithObject_ = sel_registerName("arrayWithObject:");
@@ -834,6 +970,7 @@ public static final int /*long*/ sel_becomeFirstResponder = sel_registerName("be
 public static final int /*long*/ sel_becomeKeyWindow = sel_registerName("becomeKeyWindow");
 public static final int /*long*/ sel_beginDocument = sel_registerName("beginDocument");
 public static final int /*long*/ sel_beginEditing = sel_registerName("beginEditing");
+public static final int /*long*/ sel_beginGestureWithEvent_ = sel_registerName("beginGestureWithEvent:");
 public static final int /*long*/ sel_beginPageInRect_atPlacement_ = sel_registerName("beginPageInRect:atPlacement:");
 public static final int /*long*/ sel_beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_ = sel_registerName("beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:");
 public static final int /*long*/ sel_beginSheetForWindow_modalDelegate_didEndSelector_contextInfo_trust_message_ = sel_registerName("beginSheetForWindow:modalDelegate:didEndSelector:contextInfo:trust:message:");
@@ -852,6 +989,7 @@ public static final int /*long*/ sel_blueComponent = sel_registerName("blueCompo
 public static final int /*long*/ sel_boolValue = sel_registerName("boolValue");
 public static final int /*long*/ sel_borderWidth = sel_registerName("borderWidth");
 public static final int /*long*/ sel_boundingRectForGlyphRange_inTextContainer_ = sel_registerName("boundingRectForGlyphRange:inTextContainer:");
+public static final int /*long*/ sel_boundingRectWithSize_options_ = sel_registerName("boundingRectWithSize:options:");
 public static final int /*long*/ sel_bounds = sel_registerName("bounds");
 public static final int /*long*/ sel_bundleIdentifier = sel_registerName("bundleIdentifier");
 public static final int /*long*/ sel_bundlePath = sel_registerName("bundlePath");
@@ -872,6 +1010,7 @@ public static final int /*long*/ sel_canShowMIMEType_ = sel_registerName("canSho
 public static final int /*long*/ sel_cancel = sel_registerName("cancel");
 public static final int /*long*/ sel_cancelAuthenticationChallenge_ = sel_registerName("cancelAuthenticationChallenge:");
 public static final int /*long*/ sel_cancelButtonCell = sel_registerName("cancelButtonCell");
+public static final int /*long*/ sel_cancelOperation_ = sel_registerName("cancelOperation:");
 public static final int /*long*/ sel_cancelTracking = sel_registerName("cancelTracking");
 public static final int /*long*/ sel_cascadeTopLeftFromPoint_ = sel_registerName("cascadeTopLeftFromPoint:");
 public static final int /*long*/ sel_cell = sel_registerName("cell");
@@ -904,9 +1043,11 @@ public static final int /*long*/ sel_collapseItem_ = sel_registerName("collapseI
 public static final int /*long*/ sel_collapseItem_collapseChildren_ = sel_registerName("collapseItem:collapseChildren:");
 public static final int /*long*/ sel_color = sel_registerName("color");
 public static final int /*long*/ sel_colorAtX_y_ = sel_registerName("colorAtX:y:");
+public static final int /*long*/ sel_colorSpace = sel_registerName("colorSpace");
+public static final int /*long*/ sel_colorSpaceModel = sel_registerName("colorSpaceModel");
 public static final int /*long*/ sel_colorSpaceName = sel_registerName("colorSpaceName");
-public static final int /*long*/ sel_colorUsingColorSpace_ = sel_registerName("colorUsingColorSpace:");
 public static final int /*long*/ sel_colorUsingColorSpaceName_ = sel_registerName("colorUsingColorSpaceName:");
+public static final int /*long*/ sel_colorWithCalibratedRed_green_blue_alpha_ = sel_registerName("colorWithCalibratedRed:green:blue:alpha:");
 public static final int /*long*/ sel_colorWithDeviceRed_green_blue_alpha_ = sel_registerName("colorWithDeviceRed:green:blue:alpha:");
 public static final int /*long*/ sel_colorWithPatternImage_ = sel_registerName("colorWithPatternImage:");
 public static final int /*long*/ sel_columnAtPoint_ = sel_registerName("columnAtPoint:");
@@ -1011,8 +1152,9 @@ public static final int /*long*/ sel_deselectItemAtIndex_ = sel_registerName("de
 public static final int /*long*/ sel_deselectRow_ = sel_registerName("deselectRow:");
 public static final int /*long*/ sel_destroyContext = sel_registerName("destroyContext");
 public static final int /*long*/ sel_detail = sel_registerName("detail");
+public static final int /*long*/ sel_device = sel_registerName("device");
 public static final int /*long*/ sel_deviceDescription = sel_registerName("deviceDescription");
-public static final int /*long*/ sel_deviceRGBColorSpace = sel_registerName("deviceRGBColorSpace");
+public static final int /*long*/ sel_deviceSize = sel_registerName("deviceSize");
 public static final int /*long*/ sel_dictionary = sel_registerName("dictionary");
 public static final int /*long*/ sel_dictionaryWithCapacity_ = sel_registerName("dictionaryWithCapacity:");
 public static final int /*long*/ sel_dictionaryWithObject_forKey_ = sel_registerName("dictionaryWithObject:forKey:");
@@ -1023,6 +1165,7 @@ public static final int /*long*/ sel_discardCursorRects = sel_registerName("disc
 public static final int /*long*/ sel_display = sel_registerName("display");
 public static final int /*long*/ sel_displayIfNeeded = sel_registerName("displayIfNeeded");
 public static final int /*long*/ sel_displayName = sel_registerName("displayName");
+public static final int /*long*/ sel_displayNameForKey_value_ = sel_registerName("displayNameForKey:value:");
 public static final int /*long*/ sel_displayRectIgnoringOpacity_inContext_ = sel_registerName("displayRectIgnoringOpacity:inContext:");
 public static final int /*long*/ sel_distantFuture = sel_registerName("distantFuture");
 public static final int /*long*/ sel_doCommandBySelector_ = sel_registerName("doCommandBySelector:");
@@ -1065,6 +1208,7 @@ public static final int /*long*/ sel_drawLabel_inRect_ = sel_registerName("drawL
 public static final int /*long*/ sel_drawRect_ = sel_registerName("drawRect:");
 public static final int /*long*/ sel_drawSortIndicatorWithFrame_inView_ascending_priority_ = sel_registerName("drawSortIndicatorWithFrame:inView:ascending:priority:");
 public static final int /*long*/ sel_drawStatusBarBackgroundInRect_withHighlight_ = sel_registerName("drawStatusBarBackgroundInRect:withHighlight:");
+public static final int /*long*/ sel_drawTitle_withFrame_inView_ = sel_registerName("drawTitle:withFrame:inView:");
 public static final int /*long*/ sel_drawViewBackgroundInRect_ = sel_registerName("drawViewBackgroundInRect:");
 public static final int /*long*/ sel_drawWithExpansionFrame_inView_ = sel_registerName("drawWithExpansionFrame:inView:");
 public static final int /*long*/ sel_drawingRectForBounds_ = sel_registerName("drawingRectForBounds:");
@@ -1076,6 +1220,7 @@ public static final int /*long*/ sel_enableFreedObjectCheck_ = sel_registerName(
 public static final int /*long*/ sel_endDocument = sel_registerName("endDocument");
 public static final int /*long*/ sel_endEditing = sel_registerName("endEditing");
 public static final int /*long*/ sel_endEditingFor_ = sel_registerName("endEditingFor:");
+public static final int /*long*/ sel_endGestureWithEvent_ = sel_registerName("endGestureWithEvent:");
 public static final int /*long*/ sel_endPage = sel_registerName("endPage");
 public static final int /*long*/ sel_endSheet_returnCode_ = sel_registerName("endSheet:returnCode:");
 public static final int /*long*/ sel_enterExitEventWithType_location_modifierFlags_timestamp_windowNumber_context_eventNumber_trackingNumber_userData_ = sel_registerName("enterExitEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:trackingNumber:userData:");
@@ -1113,6 +1258,7 @@ public static final int /*long*/ sel_frameRectForContentRect_ = sel_registerName
 public static final int /*long*/ sel_frameSizeForContentSize_hasHorizontalScroller_hasVerticalScroller_borderType_ = sel_registerName("frameSizeForContentSize:hasHorizontalScroller:hasVerticalScroller:borderType:");
 public static final int /*long*/ sel_fullPathForApplication_ = sel_registerName("fullPathForApplication:");
 public static final int /*long*/ sel_generalPasteboard = sel_registerName("generalPasteboard");
+public static final int /*long*/ sel_genericRGBColorSpace = sel_registerName("genericRGBColorSpace");
 public static final int /*long*/ sel_getBitmapDataPlanes_ = sel_registerName("getBitmapDataPlanes:");
 public static final int /*long*/ sel_getBytes_ = sel_registerName("getBytes:");
 public static final int /*long*/ sel_getBytes_length_ = sel_registerName("getBytes:length:");
@@ -1174,6 +1320,7 @@ public static final int /*long*/ sel_indentationPerLevel = sel_registerName("ind
 public static final int /*long*/ sel_indexOfItemWithTarget_andAction_ = sel_registerName("indexOfItemWithTarget:andAction:");
 public static final int /*long*/ sel_indexOfObjectIdenticalTo_ = sel_registerName("indexOfObjectIdenticalTo:");
 public static final int /*long*/ sel_indexOfSelectedItem = sel_registerName("indexOfSelectedItem");
+public static final int /*long*/ sel_indexSetWithIndex_ = sel_registerName("indexSetWithIndex:");
 public static final int /*long*/ sel_infoDictionary = sel_registerName("infoDictionary");
 public static final int /*long*/ sel_init = sel_registerName("init");
 public static final int /*long*/ sel_initByReferencingFile_ = sel_registerName("initByReferencingFile:");
@@ -1195,11 +1342,14 @@ public static final int /*long*/ sel_initWithFormat_shareContext_ = sel_register
 public static final int /*long*/ sel_initWithFrame_ = sel_registerName("initWithFrame:");
 public static final int /*long*/ sel_initWithFrame_frameName_groupName_ = sel_registerName("initWithFrame:frameName:groupName:");
 public static final int /*long*/ sel_initWithFrame_pullsDown_ = sel_registerName("initWithFrame:pullsDown:");
+public static final int /*long*/ sel_initWithIconRef_ = sel_registerName("initWithIconRef:");
 public static final int /*long*/ sel_initWithIdentifier_ = sel_registerName("initWithIdentifier:");
 public static final int /*long*/ sel_initWithImage_hotSpot_ = sel_registerName("initWithImage:hotSpot:");
 public static final int /*long*/ sel_initWithIndex_ = sel_registerName("initWithIndex:");
+public static final int /*long*/ sel_initWithIndexSet_ = sel_registerName("initWithIndexSet:");
 public static final int /*long*/ sel_initWithIndexesInRange_ = sel_registerName("initWithIndexesInRange:");
 public static final int /*long*/ sel_initWithItemIdentifier_ = sel_registerName("initWithItemIdentifier:");
+public static final int /*long*/ sel_initWithLocaleIdentifier_ = sel_registerName("initWithLocaleIdentifier:");
 public static final int /*long*/ sel_initWithRect_options_owner_userInfo_ = sel_registerName("initWithRect:options:owner:userInfo:");
 public static final int /*long*/ sel_initWithSize_ = sel_registerName("initWithSize:");
 public static final int /*long*/ sel_initWithStartingColor_endingColor_ = sel_registerName("initWithStartingColor:endingColor:");
@@ -1242,11 +1392,14 @@ public static final int /*long*/ sel_isItemExpanded_ = sel_registerName("isItemE
 public static final int /*long*/ sel_isKeyWindow = sel_registerName("isKeyWindow");
 public static final int /*long*/ sel_isKindOfClass_ = sel_registerName("isKindOfClass:");
 public static final int /*long*/ sel_isMainThread = sel_registerName("isMainThread");
+public static final int /*long*/ sel_isMainWindow = sel_registerName("isMainWindow");
 public static final int /*long*/ sel_isMiniaturized = sel_registerName("isMiniaturized");
 public static final int /*long*/ sel_isOpaque = sel_registerName("isOpaque");
 public static final int /*long*/ sel_isPlanar = sel_registerName("isPlanar");
+public static final int /*long*/ sel_isResting = sel_registerName("isResting");
 public static final int /*long*/ sel_isRowSelected_ = sel_registerName("isRowSelected:");
 public static final int /*long*/ sel_isRunning = sel_registerName("isRunning");
+public static final int /*long*/ sel_isSeparatorItem = sel_registerName("isSeparatorItem");
 public static final int /*long*/ sel_isSessionOnly = sel_registerName("isSessionOnly");
 public static final int /*long*/ sel_isSheet = sel_registerName("isSheet");
 public static final int /*long*/ sel_isVisible = sel_registerName("isVisible");
@@ -1258,6 +1411,7 @@ public static final int /*long*/ sel_itemHeight = sel_registerName("itemHeight")
 public static final int /*long*/ sel_itemIdentifier = sel_registerName("itemIdentifier");
 public static final int /*long*/ sel_itemObjectValueAtIndex_ = sel_registerName("itemObjectValueAtIndex:");
 public static final int /*long*/ sel_itemTitleAtIndex_ = sel_registerName("itemTitleAtIndex:");
+public static final int /*long*/ sel_itemWithTag_ = sel_registerName("itemWithTag:");
 public static final int /*long*/ sel_jobDisposition = sel_registerName("jobDisposition");
 public static final int /*long*/ sel_keyCode = sel_registerName("keyCode");
 public static final int /*long*/ sel_keyDown_ = sel_registerName("keyDown:");
@@ -1270,6 +1424,7 @@ public static final int /*long*/ sel_lastPathComponent = sel_registerName("lastP
 public static final int /*long*/ sel_layoutManager = sel_registerName("layoutManager");
 public static final int /*long*/ sel_leading = sel_registerName("leading");
 public static final int /*long*/ sel_length = sel_registerName("length");
+public static final int /*long*/ sel_level = sel_registerName("level");
 public static final int /*long*/ sel_levelForItem_ = sel_registerName("levelForItem:");
 public static final int /*long*/ sel_lineFragmentUsedRectForGlyphAtIndex_effectiveRange_ = sel_registerName("lineFragmentUsedRectForGlyphAtIndex:effectiveRange:");
 public static final int /*long*/ sel_lineFragmentUsedRectForGlyphAtIndex_effectiveRange_withoutAdditionalLayout_ = sel_registerName("lineFragmentUsedRectForGlyphAtIndex:effectiveRange:withoutAdditionalLayout:");
@@ -1284,11 +1439,14 @@ public static final int /*long*/ sel_locationForGlyphAtIndex_ = sel_registerName
 public static final int /*long*/ sel_locationInWindow = sel_registerName("locationInWindow");
 public static final int /*long*/ sel_lockFocus = sel_registerName("lockFocus");
 public static final int /*long*/ sel_lowercaseString = sel_registerName("lowercaseString");
+public static final int /*long*/ sel_magnification = sel_registerName("magnification");
+public static final int /*long*/ sel_magnifyWithEvent_ = sel_registerName("magnifyWithEvent:");
 public static final int /*long*/ sel_mainBundle = sel_registerName("mainBundle");
 public static final int /*long*/ sel_mainFrame = sel_registerName("mainFrame");
 public static final int /*long*/ sel_mainMenu = sel_registerName("mainMenu");
 public static final int /*long*/ sel_mainRunLoop = sel_registerName("mainRunLoop");
 public static final int /*long*/ sel_mainScreen = sel_registerName("mainScreen");
+public static final int /*long*/ sel_mainWindow = sel_registerName("mainWindow");
 public static final int /*long*/ sel_makeCurrentContext = sel_registerName("makeCurrentContext");
 public static final int /*long*/ sel_makeFirstResponder_ = sel_registerName("makeFirstResponder:");
 public static final int /*long*/ sel_makeKeyAndOrderFront_ = sel_registerName("makeKeyAndOrderFront:");
@@ -1316,7 +1474,9 @@ public static final int /*long*/ sel_minimumSize = sel_registerName("minimumSize
 public static final int /*long*/ sel_minuteOfHour = sel_registerName("minuteOfHour");
 public static final int /*long*/ sel_modifierFlags = sel_registerName("modifierFlags");
 public static final int /*long*/ sel_monthOfYear = sel_registerName("monthOfYear");
+public static final int /*long*/ sel_mouse_inRect_ = sel_registerName("mouse:inRect:");
 public static final int /*long*/ sel_mouseDown_ = sel_registerName("mouseDown:");
+public static final int /*long*/ sel_mouseDownCanMoveWindow = sel_registerName("mouseDownCanMoveWindow");
 public static final int /*long*/ sel_mouseDragged_ = sel_registerName("mouseDragged:");
 public static final int /*long*/ sel_mouseEntered_ = sel_registerName("mouseEntered:");
 public static final int /*long*/ sel_mouseExited_ = sel_registerName("mouseExited:");
@@ -1337,6 +1497,7 @@ public static final int /*long*/ sel_nextObject = sel_registerName("nextObject")
 public static final int /*long*/ sel_nextState = sel_registerName("nextState");
 public static final int /*long*/ sel_nextWordFromIndex_forward_ = sel_registerName("nextWordFromIndex:forward:");
 public static final int /*long*/ sel_noResponderFor_ = sel_registerName("noResponderFor:");
+public static final int /*long*/ sel_normalizedPosition = sel_registerName("normalizedPosition");
 public static final int /*long*/ sel_noteNumberOfRowsChanged = sel_registerName("noteNumberOfRowsChanged");
 public static final int /*long*/ sel_numberOfColumns = sel_registerName("numberOfColumns");
 public static final int /*long*/ sel_numberOfComponents = sel_registerName("numberOfComponents");
@@ -1370,7 +1531,6 @@ public static final int /*long*/ sel_orderFrontStandardAboutPanel_ = sel_registe
 public static final int /*long*/ sel_orderOut_ = sel_registerName("orderOut:");
 public static final int /*long*/ sel_orderWindow_relativeTo_ = sel_registerName("orderWindow:relativeTo:");
 public static final int /*long*/ sel_orderedWindows = sel_registerName("orderedWindows");
-public static final int /*long*/ sel_orientation = sel_registerName("orientation");
 public static final int /*long*/ sel_otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_ = sel_registerName("otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:");
 public static final int /*long*/ sel_otherMouseDown_ = sel_registerName("otherMouseDown:");
 public static final int /*long*/ sel_otherMouseDragged_ = sel_registerName("otherMouseDragged:");
@@ -1384,7 +1544,9 @@ public static final int /*long*/ sel_outlineView_numberOfChildrenOfItem_ = sel_r
 public static final int /*long*/ sel_outlineView_objectValueForTableColumn_byItem_ = sel_registerName("outlineView:objectValueForTableColumn:byItem:");
 public static final int /*long*/ sel_outlineView_setObjectValue_forTableColumn_byItem_ = sel_registerName("outlineView:setObjectValue:forTableColumn:byItem:");
 public static final int /*long*/ sel_outlineView_shouldCollapseItem_ = sel_registerName("outlineView:shouldCollapseItem:");
+public static final int /*long*/ sel_outlineView_shouldEditTableColumn_item_ = sel_registerName("outlineView:shouldEditTableColumn:item:");
 public static final int /*long*/ sel_outlineView_shouldExpandItem_ = sel_registerName("outlineView:shouldExpandItem:");
+public static final int /*long*/ sel_outlineView_shouldReorderColumn_toColumn_ = sel_registerName("outlineView:shouldReorderColumn:toColumn:");
 public static final int /*long*/ sel_outlineView_shouldSelectItem_ = sel_registerName("outlineView:shouldSelectItem:");
 public static final int /*long*/ sel_outlineView_shouldTrackCell_forTableColumn_item_ = sel_registerName("outlineView:shouldTrackCell:forTableColumn:item:");
 public static final int /*long*/ sel_outlineView_validateDrop_proposedItem_proposedChildIndex_ = sel_registerName("outlineView:validateDrop:proposedItem:proposedChildIndex:");
@@ -1411,9 +1573,12 @@ public static final int /*long*/ sel_pasteboardWithName_ = sel_registerName("pas
 public static final int /*long*/ sel_path = sel_registerName("path");
 public static final int /*long*/ sel_pathExtension = sel_registerName("pathExtension");
 public static final int /*long*/ sel_pathForResource_ofType_ = sel_registerName("pathForResource:ofType:");
+public static final int /*long*/ sel_pathForResource_ofType_inDirectory_forLocalization_ = sel_registerName("pathForResource:ofType:inDirectory:forLocalization:");
 public static final int /*long*/ sel_performDragOperation_ = sel_registerName("performDragOperation:");
+public static final int /*long*/ sel_performKeyEquivalent_ = sel_registerName("performKeyEquivalent:");
 public static final int /*long*/ sel_performSelector_withObject_afterDelay_inModes_ = sel_registerName("performSelector:withObject:afterDelay:inModes:");
 public static final int /*long*/ sel_performSelectorOnMainThread_withObject_waitUntilDone_ = sel_registerName("performSelectorOnMainThread:withObject:waitUntilDone:");
+public static final int /*long*/ sel_phase = sel_registerName("phase");
 public static final int /*long*/ sel_pixelsHigh = sel_registerName("pixelsHigh");
 public static final int /*long*/ sel_pixelsWide = sel_registerName("pixelsWide");
 public static final int /*long*/ sel_pointSize = sel_registerName("pointSize");
@@ -1432,6 +1597,7 @@ public static final int /*long*/ sel_printDocumentView = sel_registerName("print
 public static final int /*long*/ sel_printOperationWithPrintInfo_ = sel_registerName("printOperationWithPrintInfo:");
 public static final int /*long*/ sel_printOperationWithView_printInfo_ = sel_registerName("printOperationWithView:printInfo:");
 public static final int /*long*/ sel_printPanel = sel_registerName("printPanel");
+public static final int /*long*/ sel_printSettings = sel_registerName("printSettings");
 public static final int /*long*/ sel_printer = sel_registerName("printer");
 public static final int /*long*/ sel_printerNames = sel_registerName("printerNames");
 public static final int /*long*/ sel_printerWithName_ = sel_registerName("printerWithName:");
@@ -1440,6 +1606,7 @@ public static final int /*long*/ sel_proposedCredential = sel_registerName("prop
 public static final int /*long*/ sel_protectionSpace = sel_registerName("protectionSpace");
 public static final int /*long*/ sel_push = sel_registerName("push");
 public static final int /*long*/ sel_rangeValue = sel_registerName("rangeValue");
+public static final int /*long*/ sel_readSelectionFromPasteboard_ = sel_registerName("readSelectionFromPasteboard:");
 public static final int /*long*/ sel_realm = sel_registerName("realm");
 public static final int /*long*/ sel_recentSearches = sel_registerName("recentSearches");
 public static final int /*long*/ sel_rectArrayForCharacterRange_withinSelectedCharacterRange_inTextContainer_rectCount_ = sel_registerName("rectArrayForCharacterRange:withinSelectedCharacterRange:inTextContainer:rectCount:");
@@ -1460,6 +1627,7 @@ public static final int /*long*/ sel_removeAllPoints = sel_registerName("removeA
 public static final int /*long*/ sel_removeAttribute_range_ = sel_registerName("removeAttribute:range:");
 public static final int /*long*/ sel_removeChildWindow_ = sel_registerName("removeChildWindow:");
 public static final int /*long*/ sel_removeFromSuperview = sel_registerName("removeFromSuperview");
+public static final int /*long*/ sel_removeIndex_ = sel_registerName("removeIndex:");
 public static final int /*long*/ sel_removeItem_ = sel_registerName("removeItem:");
 public static final int /*long*/ sel_removeItemAtIndex_ = sel_registerName("removeItemAtIndex:");
 public static final int /*long*/ sel_removeItemAtPath_error_ = sel_registerName("removeItemAtPath:error:");
@@ -1475,6 +1643,7 @@ public static final int /*long*/ sel_removeStatusItem_ = sel_registerName("remov
 public static final int /*long*/ sel_removeTabViewItem_ = sel_registerName("removeTabViewItem:");
 public static final int /*long*/ sel_removeTableColumn_ = sel_registerName("removeTableColumn:");
 public static final int /*long*/ sel_removeTemporaryAttribute_forCharacterRange_ = sel_registerName("removeTemporaryAttribute:forCharacterRange:");
+public static final int /*long*/ sel_removeToolTip_ = sel_registerName("removeToolTip:");
 public static final int /*long*/ sel_removeTrackingArea_ = sel_registerName("removeTrackingArea:");
 public static final int /*long*/ sel_replaceCharactersInRange_withString_ = sel_registerName("replaceCharactersInRange:withString:");
 public static final int /*long*/ sel_replyToOpenOrPrint_ = sel_registerName("replyToOpenOrPrint:");
@@ -1500,6 +1669,8 @@ public static final int /*long*/ sel_rightMouseDown_ = sel_registerName("rightMo
 public static final int /*long*/ sel_rightMouseDragged_ = sel_registerName("rightMouseDragged:");
 public static final int /*long*/ sel_rightMouseUp_ = sel_registerName("rightMouseUp:");
 public static final int /*long*/ sel_rotateByDegrees_ = sel_registerName("rotateByDegrees:");
+public static final int /*long*/ sel_rotateWithEvent_ = sel_registerName("rotateWithEvent:");
+public static final int /*long*/ sel_rotation = sel_registerName("rotation");
 public static final int /*long*/ sel_rowAtPoint_ = sel_registerName("rowAtPoint:");
 public static final int /*long*/ sel_rowForItem_ = sel_registerName("rowForItem:");
 public static final int /*long*/ sel_rowHeight = sel_registerName("rowHeight");
@@ -1550,11 +1721,13 @@ public static final int /*long*/ sel_selectedTextAttributes = sel_registerName("
 public static final int /*long*/ sel_selectedTextBackgroundColor = sel_registerName("selectedTextBackgroundColor");
 public static final int /*long*/ sel_selectedTextColor = sel_registerName("selectedTextColor");
 public static final int /*long*/ sel_sendAction_to_ = sel_registerName("sendAction:to:");
+public static final int /*long*/ sel_sendAction_to_from_ = sel_registerName("sendAction:to:from:");
 public static final int /*long*/ sel_sendEvent_ = sel_registerName("sendEvent:");
 public static final int /*long*/ sel_sender = sel_registerName("sender");
 public static final int /*long*/ sel_separatorItem = sel_registerName("separatorItem");
 public static final int /*long*/ sel_set = sel_registerName("set");
 public static final int /*long*/ sel_setAcceptsMouseMovedEvents_ = sel_registerName("setAcceptsMouseMovedEvents:");
+public static final int /*long*/ sel_setAcceptsTouchEvents_ = sel_registerName("setAcceptsTouchEvents:");
 public static final int /*long*/ sel_setAccessoryView_ = sel_registerName("setAccessoryView:");
 public static final int /*long*/ sel_setAction_ = sel_registerName("setAction:");
 public static final int /*long*/ sel_setAlertStyle_ = sel_registerName("setAlertStyle:");
@@ -1581,10 +1754,13 @@ public static final int /*long*/ sel_setAutoresizingMask_ = sel_registerName("se
 public static final int /*long*/ sel_setAutosaveExpandedItems_ = sel_registerName("setAutosaveExpandedItems:");
 public static final int /*long*/ sel_setBackgroundColor_ = sel_registerName("setBackgroundColor:");
 public static final int /*long*/ sel_setBackgroundLayoutEnabled_ = sel_registerName("setBackgroundLayoutEnabled:");
+public static final int /*long*/ sel_setBackgroundStyle_ = sel_registerName("setBackgroundStyle:");
 public static final int /*long*/ sel_setBadgeLabel_ = sel_registerName("setBadgeLabel:");
 public static final int /*long*/ sel_setBaseWritingDirection_ = sel_registerName("setBaseWritingDirection:");
 public static final int /*long*/ sel_setBaseWritingDirection_range_ = sel_registerName("setBaseWritingDirection:range:");
+public static final int /*long*/ sel_setBecomesKeyOnlyIfNeeded_ = sel_registerName("setBecomesKeyOnlyIfNeeded:");
 public static final int /*long*/ sel_setBezelStyle_ = sel_registerName("setBezelStyle:");
+public static final int /*long*/ sel_setBezeled_ = sel_registerName("setBezeled:");
 public static final int /*long*/ sel_setBorderType_ = sel_registerName("setBorderType:");
 public static final int /*long*/ sel_setBorderWidth_ = sel_registerName("setBorderWidth:");
 public static final int /*long*/ sel_setBordered_ = sel_registerName("setBordered:");
@@ -1646,6 +1822,7 @@ public static final int /*long*/ sel_setFillColor_ = sel_registerName("setFillCo
 public static final int /*long*/ sel_setFireDate_ = sel_registerName("setFireDate:");
 public static final int /*long*/ sel_setFirstLineHeadIndent_ = sel_registerName("setFirstLineHeadIndent:");
 public static final int /*long*/ sel_setFloatValue_knobProportion_ = sel_registerName("setFloatValue:knobProportion:");
+public static final int /*long*/ sel_setFloatingPanel_ = sel_registerName("setFloatingPanel:");
 public static final int /*long*/ sel_setFocusRingType_ = sel_registerName("setFocusRingType:");
 public static final int /*long*/ sel_setFont_ = sel_registerName("setFont:");
 public static final int /*long*/ sel_setFormatter_ = sel_registerName("setFormatter:");
@@ -1667,9 +1844,11 @@ public static final int /*long*/ sel_setHeaderCell_ = sel_registerName("setHeade
 public static final int /*long*/ sel_setHeaderView_ = sel_registerName("setHeaderView:");
 public static final int /*long*/ sel_setHidden_ = sel_registerName("setHidden:");
 public static final int /*long*/ sel_setHiddenUntilMouseMoves_ = sel_registerName("setHiddenUntilMouseMoves:");
+public static final int /*long*/ sel_setHidesOnDeactivate_ = sel_registerName("setHidesOnDeactivate:");
 public static final int /*long*/ sel_setHighlightMode_ = sel_registerName("setHighlightMode:");
 public static final int /*long*/ sel_setHighlighted_ = sel_registerName("setHighlighted:");
 public static final int /*long*/ sel_setHighlightedTableColumn_ = sel_registerName("setHighlightedTableColumn:");
+public static final int /*long*/ sel_setHighlightsBy_ = sel_registerName("setHighlightsBy:");
 public static final int /*long*/ sel_setHorizontalScroller_ = sel_registerName("setHorizontalScroller:");
 public static final int /*long*/ sel_setHorizontallyResizable_ = sel_registerName("setHorizontallyResizable:");
 public static final int /*long*/ sel_setIcon_ = sel_registerName("setIcon:");
@@ -1713,6 +1892,7 @@ public static final int /*long*/ sel_setMaximumFractionDigits_ = sel_registerNam
 public static final int /*long*/ sel_setMaximumIntegerDigits_ = sel_registerName("setMaximumIntegerDigits:");
 public static final int /*long*/ sel_setMenu_ = sel_registerName("setMenu:");
 public static final int /*long*/ sel_setMenu_forSegment_ = sel_registerName("setMenu:forSegment:");
+public static final int /*long*/ sel_setMenuFormRepresentation_ = sel_registerName("setMenuFormRepresentation:");
 public static final int /*long*/ sel_setMessage_ = sel_registerName("setMessage:");
 public static final int /*long*/ sel_setMessageText_ = sel_registerName("setMessageText:");
 public static final int /*long*/ sel_setMinSize_ = sel_registerName("setMinSize:");
@@ -1731,7 +1911,6 @@ public static final int /*long*/ sel_setObjectValue_ = sel_registerName("setObje
 public static final int /*long*/ sel_setOnMouseEntered_ = sel_registerName("setOnMouseEntered:");
 public static final int /*long*/ sel_setOpaque_ = sel_registerName("setOpaque:");
 public static final int /*long*/ sel_setOptions_ = sel_registerName("setOptions:");
-public static final int /*long*/ sel_setOrientation_ = sel_registerName("setOrientation:");
 public static final int /*long*/ sel_setOutlineTableColumn_ = sel_registerName("setOutlineTableColumn:");
 public static final int /*long*/ sel_setPaletteLabel_ = sel_registerName("setPaletteLabel:");
 public static final int /*long*/ sel_setPanelFont_isMultiple_ = sel_registerName("setPanelFont:isMultiple:");
@@ -1744,16 +1923,20 @@ public static final int /*long*/ sel_setPrinter_ = sel_registerName("setPrinter:
 public static final int /*long*/ sel_setPropertyList_forType_ = sel_registerName("setPropertyList:forType:");
 public static final int /*long*/ sel_setPullsDown_ = sel_registerName("setPullsDown:");
 public static final int /*long*/ sel_setReleasedWhenClosed_ = sel_registerName("setReleasedWhenClosed:");
+public static final int /*long*/ sel_setRepresentedFilename_ = sel_registerName("setRepresentedFilename:");
+public static final int /*long*/ sel_setRepresentedURL_ = sel_registerName("setRepresentedURL:");
 public static final int /*long*/ sel_setResizingMask_ = sel_registerName("setResizingMask:");
 public static final int /*long*/ sel_setResourceLoadDelegate_ = sel_registerName("setResourceLoadDelegate:");
 public static final int /*long*/ sel_setRichText_ = sel_registerName("setRichText:");
 public static final int /*long*/ sel_setRowHeight_ = sel_registerName("setRowHeight:");
+public static final int /*long*/ sel_setScalesWhenResized_ = sel_registerName("setScalesWhenResized:");
 public static final int /*long*/ sel_setScrollable_ = sel_registerName("setScrollable:");
 public static final int /*long*/ sel_setSearchButtonCell_ = sel_registerName("setSearchButtonCell:");
 public static final int /*long*/ sel_setSegmentCount_ = sel_registerName("setSegmentCount:");
 public static final int /*long*/ sel_setSegmentStyle_ = sel_registerName("setSegmentStyle:");
 public static final int /*long*/ sel_setSelectable_ = sel_registerName("setSelectable:");
 public static final int /*long*/ sel_setSelected_forSegment_ = sel_registerName("setSelected:forSegment:");
+public static final int /*long*/ sel_setSelectedItemIdentifier_ = sel_registerName("setSelectedItemIdentifier:");
 public static final int /*long*/ sel_setSelectedRange_ = sel_registerName("setSelectedRange:");
 public static final int /*long*/ sel_setSelectedSegment_ = sel_registerName("setSelectedSegment:");
 public static final int /*long*/ sel_setSelectedTextAttributes_ = sel_registerName("setSelectedTextAttributes:");
@@ -1774,6 +1957,7 @@ public static final int /*long*/ sel_setSubmenu_ = sel_registerName("setSubmenu:
 public static final int /*long*/ sel_setSubmenu_forItem_ = sel_registerName("setSubmenu:forItem:");
 public static final int /*long*/ sel_setTabStops_ = sel_registerName("setTabStops:");
 public static final int /*long*/ sel_setTabViewType_ = sel_registerName("setTabViewType:");
+public static final int /*long*/ sel_setTag_ = sel_registerName("setTag:");
 public static final int /*long*/ sel_setTag_forSegment_ = sel_registerName("setTag:forSegment:");
 public static final int /*long*/ sel_setTarget_ = sel_registerName("setTarget:");
 public static final int /*long*/ sel_setTextColor_ = sel_registerName("setTextColor:");
@@ -1799,6 +1983,7 @@ public static final int /*long*/ sel_setValueWraps_ = sel_registerName("setValue
 public static final int /*long*/ sel_setVerticalScroller_ = sel_registerName("setVerticalScroller:");
 public static final int /*long*/ sel_setView_ = sel_registerName("setView:");
 public static final int /*long*/ sel_setVisible_ = sel_registerName("setVisible:");
+public static final int /*long*/ sel_setWantsRestingTouches_ = sel_registerName("setWantsRestingTouches:");
 public static final int /*long*/ sel_setWidth_ = sel_registerName("setWidth:");
 public static final int /*long*/ sel_setWidth_forSegment_ = sel_registerName("setWidth:forSegment:");
 public static final int /*long*/ sel_setWidthTracksTextView_ = sel_registerName("setWidthTracksTextView:");
@@ -1854,6 +2039,7 @@ public static final int /*long*/ sel_submenu = sel_registerName("submenu");
 public static final int /*long*/ sel_subviews = sel_registerName("subviews");
 public static final int /*long*/ sel_superclass = sel_registerName("superclass");
 public static final int /*long*/ sel_superview = sel_registerName("superview");
+public static final int /*long*/ sel_swipeWithEvent_ = sel_registerName("swipeWithEvent:");
 public static final int /*long*/ sel_systemFontOfSize_ = sel_registerName("systemFontOfSize:");
 public static final int /*long*/ sel_systemFontSize = sel_registerName("systemFontSize");
 public static final int /*long*/ sel_systemFontSizeForControlSize_ = sel_registerName("systemFontSizeForControlSize:");
@@ -1871,6 +2057,7 @@ public static final int /*long*/ sel_tableView_didClickTableColumn_ = sel_regist
 public static final int /*long*/ sel_tableView_objectValueForTableColumn_row_ = sel_registerName("tableView:objectValueForTableColumn:row:");
 public static final int /*long*/ sel_tableView_setObjectValue_forTableColumn_row_ = sel_registerName("tableView:setObjectValue:forTableColumn:row:");
 public static final int /*long*/ sel_tableView_shouldEditTableColumn_row_ = sel_registerName("tableView:shouldEditTableColumn:row:");
+public static final int /*long*/ sel_tableView_shouldReorderColumn_toColumn_ = sel_registerName("tableView:shouldReorderColumn:toColumn:");
 public static final int /*long*/ sel_tableView_shouldSelectRow_ = sel_registerName("tableView:shouldSelectRow:");
 public static final int /*long*/ sel_tableView_shouldTrackCell_forTableColumn_row_ = sel_registerName("tableView:shouldTrackCell:forTableColumn:row:");
 public static final int /*long*/ sel_tableView_validateDrop_proposedRow_proposedDropOperation_ = sel_registerName("tableView:validateDrop:proposedRow:proposedDropOperation:");
@@ -1880,6 +2067,7 @@ public static final int /*long*/ sel_tableViewColumnDidMove_ = sel_registerName(
 public static final int /*long*/ sel_tableViewColumnDidResize_ = sel_registerName("tableViewColumnDidResize:");
 public static final int /*long*/ sel_tableViewSelectionDidChange_ = sel_registerName("tableViewSelectionDidChange:");
 public static final int /*long*/ sel_tableViewSelectionIsChanging_ = sel_registerName("tableViewSelectionIsChanging:");
+public static final int /*long*/ sel_tag = sel_registerName("tag");
 public static final int /*long*/ sel_target = sel_registerName("target");
 public static final int /*long*/ sel_terminate_ = sel_registerName("terminate:");
 public static final int /*long*/ sel_testPart_ = sel_registerName("testPart:");
@@ -1910,6 +2098,11 @@ public static final int /*long*/ sel_toolbarDefaultItemIdentifiers_ = sel_regist
 public static final int /*long*/ sel_toolbarDidRemoveItem_ = sel_registerName("toolbarDidRemoveItem:");
 public static final int /*long*/ sel_toolbarSelectableItemIdentifiers_ = sel_registerName("toolbarSelectableItemIdentifiers:");
 public static final int /*long*/ sel_toolbarWillAddItem_ = sel_registerName("toolbarWillAddItem:");
+public static final int /*long*/ sel_touchesBeganWithEvent_ = sel_registerName("touchesBeganWithEvent:");
+public static final int /*long*/ sel_touchesCancelledWithEvent_ = sel_registerName("touchesCancelledWithEvent:");
+public static final int /*long*/ sel_touchesEndedWithEvent_ = sel_registerName("touchesEndedWithEvent:");
+public static final int /*long*/ sel_touchesMatchingPhase_inView_ = sel_registerName("touchesMatchingPhase:inView:");
+public static final int /*long*/ sel_touchesMovedWithEvent_ = sel_registerName("touchesMovedWithEvent:");
 public static final int /*long*/ sel_trackingAreas = sel_registerName("trackingAreas");
 public static final int /*long*/ sel_traitsOfFont_ = sel_registerName("traitsOfFont:");
 public static final int /*long*/ sel_transform = sel_registerName("transform");
@@ -1930,6 +2123,7 @@ public static final int /*long*/ sel_unlockFocus = sel_registerName("unlockFocus
 public static final int /*long*/ sel_unmarkText = sel_registerName("unmarkText");
 public static final int /*long*/ sel_unregisterDraggedTypes = sel_registerName("unregisterDraggedTypes");
 public static final int /*long*/ sel_update = sel_registerName("update");
+public static final int /*long*/ sel_updateFromPMPrintSettings = sel_registerName("updateFromPMPrintSettings");
 public static final int /*long*/ sel_updateTrackingAreas = sel_registerName("updateTrackingAreas");
 public static final int /*long*/ sel_use = sel_registerName("use");
 public static final int /*long*/ sel_useCredential_forAuthenticationChallenge_ = sel_registerName("useCredential:forAuthenticationChallenge:");
@@ -1939,6 +2133,8 @@ public static final int /*long*/ sel_userInfo = sel_registerName("userInfo");
 public static final int /*long*/ sel_userSpaceScaleFactor = sel_registerName("userSpaceScaleFactor");
 public static final int /*long*/ sel_usesAlternatingRowBackgroundColors = sel_registerName("usesAlternatingRowBackgroundColors");
 public static final int /*long*/ sel_validAttributesForMarkedText = sel_registerName("validAttributesForMarkedText");
+public static final int /*long*/ sel_validRequestorForSendType_returnType_ = sel_registerName("validRequestorForSendType:returnType:");
+public static final int /*long*/ sel_validateMenuItem_ = sel_registerName("validateMenuItem:");
 public static final int /*long*/ sel_validateVisibleColumns = sel_registerName("validateVisibleColumns");
 public static final int /*long*/ sel_value = sel_registerName("value");
 public static final int /*long*/ sel_valueForKey_ = sel_registerName("valueForKey:");
@@ -1949,6 +2145,7 @@ public static final int /*long*/ sel_valueWithSize_ = sel_registerName("valueWit
 public static final int /*long*/ sel_view = sel_registerName("view");
 public static final int /*long*/ sel_view_stringForToolTip_point_userData_ = sel_registerName("view:stringForToolTip:point:userData:");
 public static final int /*long*/ sel_viewDidMoveToWindow = sel_registerName("viewDidMoveToWindow");
+public static final int /*long*/ sel_viewWillMoveToWindow_ = sel_registerName("viewWillMoveToWindow:");
 public static final int /*long*/ sel_visibleFrame = sel_registerName("visibleFrame");
 public static final int /*long*/ sel_visibleRect = sel_registerName("visibleRect");
 public static final int /*long*/ sel_wantsPeriodicDraggingUpdates = sel_registerName("wantsPeriodicDraggingUpdates");
@@ -2004,11 +2201,15 @@ public static final int /*long*/ sel_windowDidResize_ = sel_registerName("window
 public static final int /*long*/ sel_windowFrameColor = sel_registerName("windowFrameColor");
 public static final int /*long*/ sel_windowFrameTextColor = sel_registerName("windowFrameTextColor");
 public static final int /*long*/ sel_windowNumber = sel_registerName("windowNumber");
+public static final int /*long*/ sel_windowNumberAtPoint_belowWindowWithWindowNumber_ = sel_registerName("windowNumberAtPoint:belowWindowWithWindowNumber:");
+public static final int /*long*/ sel_windowRef = sel_registerName("windowRef");
 public static final int /*long*/ sel_windowShouldClose_ = sel_registerName("windowShouldClose:");
 public static final int /*long*/ sel_windowWillClose_ = sel_registerName("windowWillClose:");
+public static final int /*long*/ sel_windowWithWindowNumber_ = sel_registerName("windowWithWindowNumber:");
 public static final int /*long*/ sel_windows = sel_registerName("windows");
 public static final int /*long*/ sel_worksWhenModal = sel_registerName("worksWhenModal");
 public static final int /*long*/ sel_wraps = sel_registerName("wraps");
+public static final int /*long*/ sel_writeSelectionToPasteboard_types_ = sel_registerName("writeSelectionToPasteboard:types:");
 public static final int /*long*/ sel_writeToPasteboard_ = sel_registerName("writeToPasteboard:");
 public static final int /*long*/ sel_yearOfCommonEra = sel_registerName("yearOfCommonEra");
 public static final int /*long*/ sel_zoom_ = sel_registerName("zoom:");
@@ -2023,6 +2224,7 @@ public static final int NSAlternateKeyMask = 524288;
 public static final int NSApplicationDefined = 15;
 public static final int NSApplicationDelegateReplySuccess = 0;
 public static final int NSAtTop = 2;
+public static final int NSBackgroundStyleRaised = 2;
 public static final int NSBackingStoreBuffered = 2;
 public static final int NSBackspaceCharacter = 8;
 public static final int NSBevelLineJoinStyle = 2;
@@ -2042,13 +2244,16 @@ public static final int NSClosePathBezierPathElement = 3;
 public static final int NSCommandKeyMask = 1048576;
 public static final int NSCompositeClear = 0;
 public static final int NSCompositeCopy = 1;
+public static final int NSCompositeSourceAtop = 5;
 public static final int NSCompositeSourceOver = 2;
 public static final int NSCompositeXOR = 10;
+public static final int NSContentsCellMask = 1;
 public static final int NSControlKeyMask = 262144;
 public static final int NSCriticalAlertStyle = 2;
 public static final int NSCurveToBezierPathElement = 2;
 public static final int NSDeleteCharacter = 127;
 public static final int NSDeviceIndependentModifierFlagsMask = -65536;
+public static final int NSDocModalWindowMask = 64;
 public static final int NSDragOperationCopy = 1;
 public static final int NSDragOperationDelete = 32;
 public static final int NSDragOperationEvery = -1;
@@ -2057,6 +2262,12 @@ public static final int NSDragOperationMove = 16;
 public static final int NSDragOperationNone = 0;
 public static final int NSEnterCharacter = 3;
 public static final int NSEvenOddWindingRule = 1;
+public static final int NSEventTypeBeginGesture = 19;
+public static final int NSEventTypeEndGesture = 20;
+public static final int NSEventTypeGesture = 29;
+public static final int NSEventTypeMagnify = 30;
+public static final int NSEventTypeRotate = 18;
+public static final int NSEventTypeSwipe = 31;
 public static final int NSFileHandlingPanelOKButton = 1;
 public static final int NSFlagsChanged = 12;
 public static final int NSFocusRingTypeNone = 1;
@@ -2092,11 +2303,14 @@ public static final int NSLeftTabStopType = 0;
 public static final int NSLeftTextAlignment = 0;
 public static final int NSLineBreakByClipping = 2;
 public static final int NSLineBreakByTruncatingMiddle = 5;
+public static final int NSLineBreakByTruncatingTail = 4;
 public static final int NSLineBreakByWordWrapping = 0;
 public static final int NSLineToBezierPathElement = 1;
+public static final int NSMiniControlSize = 2;
 public static final int NSMiniaturizableWindowMask = 4;
 public static final int NSMiterLineJoinStyle = 0;
 public static final int NSMixedState = -1;
+public static final int NSModalPanelWindowLevel = 8;
 public static final int NSMomentaryLightButton = 0;
 public static final int NSMouseEntered = 8;
 public static final int NSMouseExited = 9;
@@ -2107,6 +2321,8 @@ public static final int NSNoBorder = 0;
 public static final int NSNoImage = 0;
 public static final int NSNoTitle = 0;
 public static final int NSNonZeroWindingRule = 0;
+public static final int NSNonactivatingPanelMask = 128;
+public static final int NSNormalWindowLevel = 0;
 public static final int NSOffState = 0;
 public static final int NSOnState = 1;
 public static final int NSOpenGLPFAAccumSize = 14;
@@ -2125,11 +2341,16 @@ public static final int NSOutlineViewDropOnItemIndex = -1;
 public static final int NSPageDownFunctionKey = 63277;
 public static final int NSPageUpFunctionKey = 63276;
 public static final int NSPortraitOrientation = 0;
+public static final int NSPrintPanelShowsCopies = 1;
+public static final int NSPrintPanelShowsOrientation = 8;
+public static final int NSPrintPanelShowsPageRange = 2;
 public static final int NSPrintPanelShowsPageSetupAccessory = 256;
 public static final int NSProgressIndicatorPreferredThickness = 14;
 public static final int NSPushOnPushOffButton = 1;
+public static final int NSRGBColorSpaceModel = 1;
 public static final int NSRadioButton = 4;
 public static final int NSRegularControlSize = 0;
+public static final int NSRegularSquareBezelStyle = 2;
 public static final int NSResizableWindowMask = 8;
 public static final int NSRightMouseDown = 3;
 public static final int NSRightMouseDragged = 7;
@@ -2138,6 +2359,7 @@ public static final int NSRightTextAlignment = 1;
 public static final int NSRoundLineCapStyle = 1;
 public static final int NSRoundLineJoinStyle = 1;
 public static final int NSRoundedBezelStyle = 1;
+public static final int NSRoundedDisclosureBezelStyle = 14;
 public static final int NSScaleNone = 2;
 public static final int NSScrollWheel = 22;
 public static final int NSScrollerDecrementLine = 4;
@@ -2151,6 +2373,8 @@ public static final int NSShiftKeyMask = 131072;
 public static final int NSSmallControlSize = 1;
 public static final int NSSquareLineCapStyle = 2;
 public static final int NSStatusWindowLevel = 25;
+public static final int NSStringDrawingUsesLineFragmentOrigin = 1;
+public static final int NSSubmenuWindowLevel = 3;
 public static final int NSSwitchButton = 3;
 public static final int NSSystemDefined = 14;
 public static final int NSTabCharacter = 9;
@@ -2164,11 +2388,22 @@ public static final int NSTableViewSolidVerticalGridLineMask = 1;
 public static final int NSTerminateCancel = 0;
 public static final int NSTerminateNow = 1;
 public static final int NSTextFieldAndStepperDatePickerStyle = 0;
+public static final int NSTextFieldDatePickerStyle = 2;
 public static final int NSTitledWindowMask = 1;
+public static final int NSToolbarDisplayModeIconOnly = 2;
+public static final int NSTouchEventSubtype = 3;
+public static final int NSTouchPhaseAny = -1;
+public static final int NSTouchPhaseBegan = 1;
+public static final int NSTouchPhaseCancelled = 16;
+public static final int NSTouchPhaseEnded = 8;
+public static final int NSTouchPhaseMoved = 2;
+public static final int NSTouchPhaseStationary = 4;
+public static final int NSTouchPhaseTouching = 7;
 public static final int NSUnderlineStyleDouble = 9;
 public static final int NSUnderlineStyleNone = 0;
 public static final int NSUnderlineStyleSingle = 1;
 public static final int NSUnderlineStyleThick = 2;
+public static final int NSUtilityWindowMask = 16;
 public static final int NSViewHeightSizable = 16;
 public static final int NSViewMaxXMargin = 4;
 public static final int NSViewMaxYMargin = 32;
@@ -2189,9 +2424,20 @@ public static final int NSYearMonthDayDatePickerElementFlag = 224;
 public static final int kCFRunLoopBeforeWaiting = 32;
 public static final int kCFStringEncodingUTF8 = 134217984;
 public static final int kCGBlendModeDifference = 10;
+public static final int kCGBlendModeNormal = 0;
 public static final int kCGEventFilterMaskPermitLocalKeyboardEvents = 2;
 public static final int kCGEventFilterMaskPermitLocalMouseEvents = 1;
 public static final int kCGEventFilterMaskPermitSystemDefinedEvents = 4;
+public static final int kCGEventKeyDown = 10;
+public static final int kCGEventKeyUp = 11;
+public static final int kCGEventLeftMouseDown = 1;
+public static final int kCGEventLeftMouseUp = 2;
+public static final int kCGEventMouseMoved = 5;
+public static final int kCGEventOtherMouseDown = 25;
+public static final int kCGEventOtherMouseUp = 26;
+public static final int kCGEventRightMouseDown = 3;
+public static final int kCGEventRightMouseUp = 4;
+public static final int kCGEventSourceStateHIDSystemState = 1;
 public static final int kCGEventSuppressionStateRemoteMouseDrag = 1;
 public static final int kCGEventSuppressionStateSuppressionInterval = 0;
 public static final int kCGImageAlphaFirst = 4;
@@ -2212,6 +2458,8 @@ public static final int kCGPathElementAddQuadCurveToPoint = 2;
 public static final int kCGPathElementCloseSubpath = 4;
 public static final int kCGPathElementMoveToPoint = 0;
 public static final int kCGPathStroke = 2;
+public static final int kCGScrollEventUnitLine = 1;
+public static final int kCGScrollEventUnitPixel = 0;
 public static final int kCGSessionEventTap = 1;
 public static final int kCGTextFillStroke = 2;
 public static final int kCTParagraphStyleSpecifierBaseWritingDirection = 13;
@@ -2663,6 +2911,9 @@ public static final NSString NSForegroundColorAttributeName = new NSString(NSFor
 public static final native int /*long*/ NSHTMLPboardType();
 public static final NSString NSHTMLPboardType = new NSString(NSHTMLPboardType());
 /** @method flags=const */
+public static final native int /*long*/ NSLigatureAttributeName();
+public static final NSString NSLigatureAttributeName = new NSString(NSLigatureAttributeName());
+/** @method flags=const */
 public static final native int /*long*/ NSLinkAttributeName();
 public static final NSString NSLinkAttributeName = new NSString(NSLinkAttributeName());
 /** @method flags=const */
@@ -2696,6 +2947,9 @@ public static final NSString NSPrintLastPage = new NSString(NSPrintLastPage());
 public static final native int /*long*/ NSPrintMustCollate();
 public static final NSString NSPrintMustCollate = new NSString(NSPrintMustCollate());
 /** @method flags=const */
+public static final native int /*long*/ NSPrintOrientation();
+public static final NSString NSPrintOrientation = new NSString(NSPrintOrientation());
+/** @method flags=const */
 public static final native int /*long*/ NSPrintPreviewJob();
 public static final NSString NSPrintPreviewJob = new NSString(NSPrintPreviewJob());
 /** @method flags=const */
@@ -2777,6 +3031,27 @@ public static final NSString NSUnderlineStyleAttributeName = new NSString(NSUnde
 public static final native int /*long*/ NSViewGlobalFrameDidChangeNotification();
 public static final NSString NSViewGlobalFrameDidChangeNotification = new NSString(NSViewGlobalFrameDidChangeNotification());
 /** @method flags=const */
+public static final native int /*long*/ NSWindowDidBecomeKeyNotification();
+public static final NSString NSWindowDidBecomeKeyNotification = new NSString(NSWindowDidBecomeKeyNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSWindowDidDeminiaturizeNotification();
+public static final NSString NSWindowDidDeminiaturizeNotification = new NSString(NSWindowDidDeminiaturizeNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSWindowDidMiniaturizeNotification();
+public static final NSString NSWindowDidMiniaturizeNotification = new NSString(NSWindowDidMiniaturizeNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSWindowDidMoveNotification();
+public static final NSString NSWindowDidMoveNotification = new NSString(NSWindowDidMoveNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSWindowDidResignKeyNotification();
+public static final NSString NSWindowDidResignKeyNotification = new NSString(NSWindowDidResignKeyNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSWindowDidResizeNotification();
+public static final NSString NSWindowDidResizeNotification = new NSString(NSWindowDidResizeNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSWindowWillCloseNotification();
+public static final NSString NSWindowWillCloseNotification = new NSString(NSWindowWillCloseNotification());
+/** @method flags=const */
 public static final native int /*long*/ kCFAllocatorDefault();
 /** @method flags=const */
 public static final native int /*long*/ kCFRunLoopCommonModes();
@@ -2792,6 +3067,9 @@ public static final NSString NSDefaultRunLoopMode = new NSString(NSDefaultRunLoo
 /** @method flags=const */
 public static final native int /*long*/ NSErrorFailingURLStringKey();
 public static final NSString NSErrorFailingURLStringKey = new NSString(NSErrorFailingURLStringKey());
+/** @method flags=const */
+public static final native int /*long*/ NSLocaleLanguageCode();
+public static final NSString NSLocaleLanguageCode = new NSString(NSLocaleLanguageCode());
 
 /** Functions */
 
@@ -2847,10 +3125,24 @@ public static final native int /*long*/ NSBitsPerPixelFromDepth(int depth);
  */
 public static final native void NSCopyBits(int /*long*/ srcGState, NSRect srcRect, NSPoint destPoint);
 /**
+ * @param count cast=(NSInteger*)
+ */
+public static final native void NSCountWindows(int[] /*long[]*/ count);
+/**
  * @param colorSpaceName cast=(NSString*)
  */
 public static final native int /*long*/ NSNumberOfColorComponents(int /*long*/ colorSpaceName);
 /**
+ * @param aRect flags=struct
+ * @param op cast=(NSCompositingOperation)
+ */
+public static final native void NSRectFillUsingOperation(NSRect aRect, int /*long*/ op);
+/**
+ * @param size cast=(NSInteger)
+ * @param list cast=(NSInteger*)
+ */
+public static final native void NSWindowList(int /*long*/ size, int[] /*long[]*/ list);
+/**
  * @param alloc cast=(CFAllocatorRef)
  * @param str cast=(CFStringRef)
  * @param attributes cast=(CFDictionaryRef)
@@ -2968,12 +3260,22 @@ public static final native void CGColorSpaceRelease(int /*long*/ space);
  */
 public static final native void CGContextAddPath(int /*long*/ context, int /*long*/ path);
 /**
+ * @param context cast=(CGContextRef)
+ * @param rect flags=struct
+ * @param auxiliaryInfo cast=(CFDictionaryRef)
+ */
+public static final native void CGContextBeginTransparencyLayerWithRect(int /*long*/ context, CGRect rect, int /*long*/ auxiliaryInfo);
+/**
  * @param c cast=(CGContextRef)
  * @param rect flags=struct
  * @param image cast=(CGImageRef)
  */
 public static final native void CGContextDrawImage(int /*long*/ c, CGRect rect, int /*long*/ image);
 /**
+ * @param context cast=(CGContextRef)
+ */
+public static final native void CGContextEndTransparencyLayer(int /*long*/ context);
+/**
  * @param c cast=(CGContextRef)
  * @param rect flags=struct
  */
@@ -3109,32 +3411,40 @@ public static final native int /*long*/ CGDisplayPixelsHigh(int display);
  */
 public static final native int /*long*/ CGDisplayPixelsWide(int display);
 /**
- * @param doCombineState cast=(boolean_t)
- */
-public static final native int CGEnableEventStateCombining(int doCombineState);
-/**
  * @param source cast=(CGEventSourceRef)
  * @param virtualKey cast=(CGKeyCode)
  * @param keyDown cast=(_Bool)
  */
 public static final native int /*long*/ CGEventCreateKeyboardEvent(int /*long*/ source, short virtualKey, boolean keyDown);
 /**
- * @param event cast=(CGEventRef)
- * @param field cast=(CGEventField)
+ * @param source cast=(CGEventSourceRef)
+ * @param mouseType cast=(CGEventType)
+ * @param mouseCursorPosition flags=struct
+ * @param mouseButton cast=(CGMouseButton)
  */
-public static final native long CGEventGetIntegerValueField(int /*long*/ event, int field);
+public static final native int /*long*/ CGEventCreateMouseEvent(int /*long*/ source, int mouseType, CGPoint mouseCursorPosition, int mouseButton);
+/**
+ * @param source cast=(CGEventSourceRef)
+ * @param units cast=(CGScrollEventUnit)
+ * @param wheelCount cast=(CGWheelCount)
+ * @param wheel1 cast=(int32_t)
+ */
+public static final native int /*long*/ CGEventCreateScrollWheelEvent(int /*long*/ source, int units, int wheelCount, int wheel1);
 /**
  * @param event cast=(CGEventRef)
- * @param stringLength cast=(UniCharCount)
- * @param unicodeString cast=(UniChar*)
+ * @param field cast=(CGEventField)
  */
-public static final native void CGEventKeyboardSetUnicodeString(int /*long*/ event, int /*long*/ stringLength, char[] unicodeString);
+public static final native long CGEventGetIntegerValueField(int /*long*/ event, int field);
 /**
  * @param tap cast=(CGEventTapLocation)
  * @param event cast=(CGEventRef)
  */
 public static final native void CGEventPost(int tap, int /*long*/ event);
 /**
+ * @param sourceState cast=(CGEventSourceStateID)
+ */
+public static final native int /*long*/ CGEventSourceCreate(int sourceState);
+/**
  * @param rect flags=struct
  * @param maxDisplays cast=(CGDisplayCount)
  * @param dspys cast=(CGDirectDisplayID*)
@@ -3224,18 +3534,6 @@ public static final native void CGPathRelease(int /*long*/ path);
  */
 public static final native int CGPostKeyboardEvent(short keyChar, short virtualKey, boolean keyDown);
 /**
- * @param mouseCursorPosition flags=struct
- * @param updateMouseCursorPosition cast=(boolean_t)
- * @param buttonCount cast=(CGButtonCount)
- * @param mouseButtonDown cast=(boolean_t)
- */
-public static final native int CGPostMouseEvent(CGPoint mouseCursorPosition, boolean updateMouseCursorPosition, int buttonCount, boolean mouseButtonDown, boolean varArg0, boolean varArg1, boolean varArg2, boolean varArg3);
-/**
- * @param wheelCount cast=(CGWheelCount)
- * @param wheel1 cast=(int32_t)
- */
-public static final native int CGPostScrollWheelEvent(int wheelCount, int wheel1);
-/**
  * @param filter cast=(CGEventFilterMask)
  * @param state cast=(CGEventSuppressionState)
  */
@@ -3331,6 +3629,11 @@ public static final native int /*long*/ NSTemporaryDirectory();
  * @param arg0 flags=struct
  */
 public static final native boolean objc_msgSendSuper_bool(objc_super superId, int /*long*/ sel, NSRange arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native boolean objc_msgSendSuper_bool(objc_super superId, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1);
 /** @method flags=cast */
 public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel);
 /**
@@ -3396,7 +3699,19 @@ public static final native void objc_msgSendSuper_stret(NSRect result, objc_supe
  */
 public static final native void objc_msgSendSuper_stret(NSRect result, objc_super superId, int /*long*/ sel, NSRect arg0, int /*long*/ arg1);
 /** @method flags=cast */
+public static final native void objc_msgSendSuper_stret(NSRect result, objc_super superId, int /*long*/ sel, int /*long*/ arg0);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native void objc_msgSendSuper_stret(NSRect result, objc_super superId, int /*long*/ sel, int /*long*/ arg0, NSRect arg1, int /*long*/ arg2);
+/** @method flags=cast */
 public static final native void objc_msgSendSuper_stret(NSSize result, objc_super superId, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSendSuper_stret(NSSize result, objc_super superId, int /*long*/ sel, NSRect arg0);
 /** @method flags=cast */
 public static final native void objc_msgSendSuper_stret(NSSize result, objc_super superId, int /*long*/ sel, boolean arg0);
 
@@ -3412,6 +3727,12 @@ public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long
 /**
  * @method flags=cast
  * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, NSPoint arg0, NSRect arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
  */
 public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, NSRange arg0, int /*long*/ arg1);
 /**
@@ -3492,6 +3813,11 @@ public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long
  * @method flags=cast
  * @param arg0 flags=struct
  */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
 public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, int /*long*/ arg1, float[] /*double[]*/ arg2);
 /**
  * @method flags=cast
@@ -3767,8 +4093,18 @@ public static final native void objc_msgSend_stret(NSRect result, int /*long*/ i
  * @param arg0 flags=struct
  */
 public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, NSSize arg0, int /*long*/ arg1);
 /** @method flags=cast */
 public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSRect arg1, int /*long*/ arg2);
 /** @method flags=cast */
 public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1);
 /** @method flags=cast */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/PMResolution.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/PMResolution.java
new file mode 100755
index 0000000..98279c1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/PMResolution.java	
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.cocoa;
+
+public class PMResolution {
+	public double hRes;
+	public double vRes;
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificatePanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificatePanel.java
index 52f15a3..cfb9961 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificatePanel.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificatePanel.java	
@@ -36,4 +36,8 @@ public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*lon
 	return (float)OS.objc_msgSend_fpret(OS.class_SFCertificatePanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_SFCertificatePanel, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificateTrustPanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificateTrustPanel.java
index 8517e30..1a6cc55 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificateTrustPanel.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SFCertificateTrustPanel.java	
@@ -37,4 +37,8 @@ public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*lon
 	return (float)OS.objc_msgSend_fpret(OS.class_SFCertificateTrustPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
 }
 
+public static int /*long*/ windowNumberAtPoint(NSPoint point, int /*long*/ windowNumber) {
+	return OS.objc_msgSend(OS.class_SFCertificateTrustPanel, OS.sel_windowNumberAtPoint_belowWindowWithWindowNumber_, point, windowNumber);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanel.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanel.java
new file mode 100644
index 0000000..b45ef40
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanel.java	
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.cocoa;
+
+public class SWTPanel extends NSPanel {
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java
index 2eee3a7..e812879 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,14 @@ public id(id id) {
 	this.id = id != null ? id.id : 0;
 }
 
+public int hashCode() {
+	return (int) this.id;
+}
+
+public boolean equals(Object other) {
+	return (this.id == ((id)other).id);
+}
+
 public int /*long*/ objc_getClass() {
 	String name = getClass().getName();
 	int index = name.lastIndexOf('.');
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java
index 8609adc..91f0a09 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,6 @@ public class LONG {
 	}
 
 	public int hashCode () {
-		return (int)/*64*/value;
+		return (int)/*64*/(value ^ (value >>> 32));
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java
index dde42cd..b280efb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2me/org/eclipse/swt/internal/Library.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@ public class Library {
 	/**
 	 * SWT Minor version number (must be in the range 0..999)
 	 */
-    static int MINOR_VERSION = 659;
+    static int MINOR_VERSION = 735;
 	
 	/**
 	 * SWT revision number (must be >= 0)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java
index 87d1355..0858efa 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/common_j2se/org/eclipse/swt/internal/Library.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,7 +24,7 @@ public class Library {
 	/**
 	 * SWT Minor version number (must be in the range 0..999)
 	 */
-    static int MINOR_VERSION = 659;
+    static int MINOR_VERSION = 735;
 	
 	/**
 	 * SWT revision number (must be >= 0)
@@ -42,16 +42,36 @@ public class Library {
 	/* 64-bit support */
 	static final boolean IS_64 = longConst() == (int /*long*/)longConst();
 	static final String SUFFIX_64 = "-64";	//$NON-NLS-1$
-	static final String SWTDIR_32 = "swtlib-32";	//$NON-NLS-1$
-	static final String SWTDIR_64 = "swtlib-64";	//$NON-NLS-1$
+	static final String SWT_LIB_DIR;
 
 static {
 	DELIMITER = System.getProperty("line.separator"); //$NON-NLS-1$
 	SEPARATOR = System.getProperty("file.separator"); //$NON-NLS-1$
+	SWT_LIB_DIR = ".swt" + SEPARATOR + "lib" + SEPARATOR + os() + SEPARATOR + arch(); //$NON-NLS-1$ $NON-NLS-2$
 	JAVA_VERSION = parseVersion(System.getProperty("java.version")); //$NON-NLS-1$
 	SWT_VERSION = SWT_VERSION(MAJOR_VERSION, MINOR_VERSION);
 }
 
+static String arch() {
+	String osArch = System.getProperty("os.arch"); //$NON-NLS-1$
+	if (osArch.equals ("i386") || osArch.equals ("i686")) return "x86"; //$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$
+	if (osArch.equals ("amd64")) return "x86_64"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osArch.equals ("IA64N")) return "ia64_32"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osArch.equals ("IA64W")) return "ia64"; //$NON-NLS-1$ $NON-NLS-2$
+	return osArch;
+}
+
+static String os() {
+	String osName = System.getProperty("os.name"); //$NON-NLS-1$
+	if (osName.equals ("Linux")) return "linux"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osName.equals ("AIX")) return "aix"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osName.equals ("Solaris") || osName.equals ("SunOS")) return "solaris"; //$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$
+	if (osName.equals ("HP-UX")) return "hpux"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osName.equals ("Mac OS X")) return "macosx"; //$NON-NLS-1$ $NON-NLS-2$
+	if (osName.startsWith ("Win")) return "win32"; //$NON-NLS-1$ $NON-NLS-2$
+	return osName;
+}
+
 static void chmod(String permision, String path) {
 	if (Platform.PLATFORM.equals ("win32")) return; //$NON-NLS-1$
 	try {
@@ -240,14 +260,12 @@ public static void loadLibrary (String name, boolean mapName) {
 	String fileName1 = mappedName1;
 	String fileName2 = mappedName2;
 	if (path == null) {
-		path = System.getProperty ("java.io.tmpdir"); //$NON-NLS-1$
-		File dir = new File (path, IS_64 ? SWTDIR_64 : SWTDIR_32);
-		boolean make = false;
-		if ((dir.exists () && dir.isDirectory ()) || (make = dir.mkdir ())) {
+		path = System.getProperty ("user.home"); //$NON-NLS-1$
+		File dir = new File (path, SWT_LIB_DIR);
+		if ((dir.exists () && dir.isDirectory ()) || dir.mkdirs ()) {
 			path = dir.getAbsolutePath ();
-			if (make) chmod ("777", path); //$NON-NLS-1$
 		} else {
-			/* fall back to using the tmp directory */
+			/* fall back to using the home dir directory */
 			if (IS_64) {
 				fileName1 = mapLibraryName (libName1 + SUFFIX_64);
 				fileName2 = mapLibraryName (libName2 + SUFFIX_64);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk.c
index 3b25002..f542499 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk.c	
@@ -55,6 +55,18 @@ JNIEXPORT jintLong JNICALL ATK_NATIVE(ATK_1TYPE_1COMPONENT)
 }
 #endif
 
+#ifndef NO_ATK_1TYPE_1EDITABLE_1TEXT
+JNIEXPORT jintLong JNICALL ATK_NATIVE(ATK_1TYPE_1EDITABLE_1TEXT)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	ATK_NATIVE_ENTER(env, that, ATK_1TYPE_1EDITABLE_1TEXT_FUNC);
+	rc = (jintLong)ATK_TYPE_EDITABLE_TEXT;
+	ATK_NATIVE_EXIT(env, that, ATK_1TYPE_1EDITABLE_1TEXT_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_ATK_1TYPE_1HYPERTEXT
 JNIEXPORT jintLong JNICALL ATK_NATIVE(ATK_1TYPE_1HYPERTEXT)
 	(JNIEnv *env, jclass that)
@@ -223,6 +235,18 @@ JNIEXPORT jintLong JNICALL ATK_NATIVE(_1ATK_1COMPONENT_1GET_1IFACE)
 }
 #endif
 
+#ifndef NO__1ATK_1EDITABLE_1TEXT_1GET_1IFACE
+JNIEXPORT jintLong JNICALL ATK_NATIVE(_1ATK_1EDITABLE_1TEXT_1GET_1IFACE)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	ATK_NATIVE_ENTER(env, that, _1ATK_1EDITABLE_1TEXT_1GET_1IFACE_FUNC);
+	rc = (jintLong)ATK_EDITABLE_TEXT_GET_IFACE(arg0);
+	ATK_NATIVE_EXIT(env, that, _1ATK_1EDITABLE_1TEXT_1GET_1IFACE_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1ATK_1HYPERTEXT_1GET_1IFACE
 JNIEXPORT jintLong JNICALL ATK_NATIVE(_1ATK_1HYPERTEXT_1GET_1IFACE)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -737,6 +761,27 @@ JNIEXPORT void JNICALL ATK_NATIVE(memmove__JLorg_eclipse_swt_internal_accessibil
 }
 #endif
 
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL ATK_NATIVE(memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
+#else
+JNIEXPORT void JNICALL ATK_NATIVE(memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
+#endif
+{
+#ifndef JNI64
+	ATK_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2_FUNC);
+#else
+	ATK_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2_FUNC);
+#endif
+	if (arg1) getAtkEditableTextIfaceFields(env, arg1, (AtkEditableTextIface *)arg0);
+#ifndef JNI64
+	ATK_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2_FUNC);
+#else
+	ATK_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL ATK_NATIVE(memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
@@ -999,6 +1044,27 @@ JNIEXPORT void JNICALL ATK_NATIVE(memmove__Lorg_eclipse_swt_internal_accessibili
 }
 #endif
 
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2I) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL ATK_NATIVE(memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1)
+#else
+JNIEXPORT void JNICALL ATK_NATIVE(memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1)
+#endif
+{
+#ifndef JNI64
+	ATK_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2I_FUNC);
+#else
+	ATK_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2J_FUNC);
+#endif
+	if (arg0) setAtkEditableTextIfaceFields(env, arg0, (AtkEditableTextIface *)arg1);
+#ifndef JNI64
+	ATK_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2I_FUNC);
+#else
+	ATK_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2J_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2I) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL ATK_NATIVE(memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.c
index 880122a..8563724 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.c	
@@ -18,12 +18,13 @@
 
 #ifdef NATIVE_STATS
 
-int ATK_nativeFunctionCount = 74;
-int ATK_nativeFunctionCallCount[74];
+int ATK_nativeFunctionCount = 78;
+int ATK_nativeFunctionCallCount[78];
 char * ATK_nativeFunctionNames[] = {
 	"ATK_1IS_1NO_1OP_1OBJECT_1FACTORY",
 	"ATK_1TYPE_1ACTION",
 	"ATK_1TYPE_1COMPONENT",
+	"ATK_1TYPE_1EDITABLE_1TEXT",
 	"ATK_1TYPE_1HYPERTEXT",
 	"ATK_1TYPE_1OBJECT_1FACTORY",
 	"ATK_1TYPE_1SELECTION",
@@ -38,6 +39,7 @@ char * ATK_nativeFunctionNames[] = {
 	"GTK_1TYPE_1ACCESSIBLE",
 	"_1ATK_1ACTION_1GET_1IFACE",
 	"_1ATK_1COMPONENT_1GET_1IFACE",
+	"_1ATK_1EDITABLE_1TEXT_1GET_1IFACE",
 	"_1ATK_1HYPERTEXT_1GET_1IFACE",
 	"_1ATK_1OBJECT_1FACTORY_1CLASS",
 	"_1ATK_1SELECTION_1GET_1IFACE",
@@ -110,6 +112,11 @@ char * ATK_nativeFunctionNames[] = {
 	"memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2",
 #endif
 #ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2",
+#else
+	"memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2",
+#endif
+#ifndef JNI64
 	"memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2",
 #else
 	"memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2",
@@ -170,6 +177,11 @@ char * ATK_nativeFunctionNames[] = {
 	"memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2J",
 #endif
 #ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2I",
+#else
+	"memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2J",
+#endif
+#ifndef JNI64
 	"memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2I",
 #else
 	"memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2J",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.h
index 10e1400..4b40bb9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_stats.h	
@@ -32,6 +32,7 @@ typedef enum {
 	ATK_1IS_1NO_1OP_1OBJECT_1FACTORY_FUNC,
 	ATK_1TYPE_1ACTION_FUNC,
 	ATK_1TYPE_1COMPONENT_FUNC,
+	ATK_1TYPE_1EDITABLE_1TEXT_FUNC,
 	ATK_1TYPE_1HYPERTEXT_FUNC,
 	ATK_1TYPE_1OBJECT_1FACTORY_FUNC,
 	ATK_1TYPE_1SELECTION_FUNC,
@@ -46,6 +47,7 @@ typedef enum {
 	GTK_1TYPE_1ACCESSIBLE_FUNC,
 	_1ATK_1ACTION_1GET_1IFACE_FUNC,
 	_1ATK_1COMPONENT_1GET_1IFACE_FUNC,
+	_1ATK_1EDITABLE_1TEXT_1GET_1IFACE_FUNC,
 	_1ATK_1HYPERTEXT_1GET_1IFACE_FUNC,
 	_1ATK_1OBJECT_1FACTORY_1CLASS_FUNC,
 	_1ATK_1SELECTION_1GET_1IFACE_FUNC,
@@ -118,6 +120,11 @@ typedef enum {
 	memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2_FUNC,
 #endif
 #ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2_FUNC,
+#endif
+#ifndef JNI64
 	memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2_FUNC,
 #else
 	memmove__JLorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2_FUNC,
@@ -178,6 +185,11 @@ typedef enum {
 	memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2J_FUNC,
 #endif
 #ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2I_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkEditableTextIface_2J_FUNC,
+#endif
+#ifndef JNI64
 	memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2I_FUNC,
 #else
 	memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2J_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.c
index 0f18573..cf07ec8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.c	
@@ -163,6 +163,55 @@ void setAtkComponentIfaceFields(JNIEnv *env, jobject lpObject, AtkComponentIface
 }
 #endif
 
+#ifndef NO_AtkEditableTextIface
+typedef struct AtkEditableTextIface_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID set_run_attributes, set_text_contents, insert_text, copy_text, cut_text, delete_text, paste_text;
+} AtkEditableTextIface_FID_CACHE;
+
+AtkEditableTextIface_FID_CACHE AtkEditableTextIfaceFc;
+
+void cacheAtkEditableTextIfaceFields(JNIEnv *env, jobject lpObject)
+{
+	if (AtkEditableTextIfaceFc.cached) return;
+	AtkEditableTextIfaceFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	AtkEditableTextIfaceFc.set_run_attributes = (*env)->GetFieldID(env, AtkEditableTextIfaceFc.clazz, "set_run_attributes", I_J);
+	AtkEditableTextIfaceFc.set_text_contents = (*env)->GetFieldID(env, AtkEditableTextIfaceFc.clazz, "set_text_contents", I_J);
+	AtkEditableTextIfaceFc.insert_text = (*env)->GetFieldID(env, AtkEditableTextIfaceFc.clazz, "insert_text", I_J);
+	AtkEditableTextIfaceFc.copy_text = (*env)->GetFieldID(env, AtkEditableTextIfaceFc.clazz, "copy_text", I_J);
+	AtkEditableTextIfaceFc.cut_text = (*env)->GetFieldID(env, AtkEditableTextIfaceFc.clazz, "cut_text", I_J);
+	AtkEditableTextIfaceFc.delete_text = (*env)->GetFieldID(env, AtkEditableTextIfaceFc.clazz, "delete_text", I_J);
+	AtkEditableTextIfaceFc.paste_text = (*env)->GetFieldID(env, AtkEditableTextIfaceFc.clazz, "paste_text", I_J);
+	AtkEditableTextIfaceFc.cached = 1;
+}
+
+AtkEditableTextIface *getAtkEditableTextIfaceFields(JNIEnv *env, jobject lpObject, AtkEditableTextIface *lpStruct)
+{
+	if (!AtkEditableTextIfaceFc.cached) cacheAtkEditableTextIfaceFields(env, lpObject);
+	lpStruct->set_run_attributes = (gboolean (*)())(*env)->GetIntLongField(env, lpObject, AtkEditableTextIfaceFc.set_run_attributes);
+	lpStruct->set_text_contents = (void (*)())(*env)->GetIntLongField(env, lpObject, AtkEditableTextIfaceFc.set_text_contents);
+	lpStruct->insert_text = (void (*)())(*env)->GetIntLongField(env, lpObject, AtkEditableTextIfaceFc.insert_text);
+	lpStruct->copy_text = (void (*)())(*env)->GetIntLongField(env, lpObject, AtkEditableTextIfaceFc.copy_text);
+	lpStruct->cut_text = (void (*)())(*env)->GetIntLongField(env, lpObject, AtkEditableTextIfaceFc.cut_text);
+	lpStruct->delete_text = (void (*)())(*env)->GetIntLongField(env, lpObject, AtkEditableTextIfaceFc.delete_text);
+	lpStruct->paste_text = (void (*)())(*env)->GetIntLongField(env, lpObject, AtkEditableTextIfaceFc.paste_text);
+	return lpStruct;
+}
+
+void setAtkEditableTextIfaceFields(JNIEnv *env, jobject lpObject, AtkEditableTextIface *lpStruct)
+{
+	if (!AtkEditableTextIfaceFc.cached) cacheAtkEditableTextIfaceFields(env, lpObject);
+	(*env)->SetIntLongField(env, lpObject, AtkEditableTextIfaceFc.set_run_attributes, (jintLong)lpStruct->set_run_attributes);
+	(*env)->SetIntLongField(env, lpObject, AtkEditableTextIfaceFc.set_text_contents, (jintLong)lpStruct->set_text_contents);
+	(*env)->SetIntLongField(env, lpObject, AtkEditableTextIfaceFc.insert_text, (jintLong)lpStruct->insert_text);
+	(*env)->SetIntLongField(env, lpObject, AtkEditableTextIfaceFc.copy_text, (jintLong)lpStruct->copy_text);
+	(*env)->SetIntLongField(env, lpObject, AtkEditableTextIfaceFc.cut_text, (jintLong)lpStruct->cut_text);
+	(*env)->SetIntLongField(env, lpObject, AtkEditableTextIfaceFc.delete_text, (jintLong)lpStruct->delete_text);
+	(*env)->SetIntLongField(env, lpObject, AtkEditableTextIfaceFc.paste_text, (jintLong)lpStruct->paste_text);
+}
+#endif
+
 #ifndef NO_AtkHypertextIface
 typedef struct AtkHypertextIface_FID_CACHE {
 	int cached;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.h
index cc692cd..873fdae 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/atk_structs.h	
@@ -51,6 +51,18 @@ void setAtkComponentIfaceFields(JNIEnv *env, jobject lpObject, AtkComponentIface
 #define AtkComponentIface_sizeof() 0
 #endif
 
+#ifndef NO_AtkEditableTextIface
+void cacheAtkEditableTextIfaceFields(JNIEnv *env, jobject lpObject);
+AtkEditableTextIface *getAtkEditableTextIfaceFields(JNIEnv *env, jobject lpObject, AtkEditableTextIface *lpStruct);
+void setAtkEditableTextIfaceFields(JNIEnv *env, jobject lpObject, AtkEditableTextIface *lpStruct);
+#define AtkEditableTextIface_sizeof() sizeof(AtkEditableTextIface)
+#else
+#define cacheAtkEditableTextIfaceFields(a,b)
+#define getAtkEditableTextIfaceFields(a,b,c) NULL
+#define setAtkEditableTextIfaceFields(a,b,c)
+#define AtkEditableTextIface_sizeof() 0
+#endif
+
 #ifndef NO_AtkHypertextIface
 void cacheAtkHypertextIfaceFields(JNIEnv *env, jobject lpObject);
 AtkHypertextIface *getAtkHypertextIfaceFields(JNIEnv *env, jobject lpObject, AtkHypertextIface *lpStruct);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh
old mode 100755
new mode 100644
index 55f98da..1eb3a06
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	
@@ -1,6 +1,6 @@
 #!/bin/sh
 #*******************************************************************************
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -24,6 +24,22 @@ if [ "${CC}" = "" ]; then
 	export CC
 fi
 
+# Check if we have to compile external.xpt from external.idl
+COMPONENTS_DIR=`pwd`/../../components
+if test ! -f ${COMPONENTS_DIR}/external.xpt; then
+	if test ! -f ${COMPONENTS_DIR}/external.idl; then
+		echo "Can't find ${COMPONENTS_DIR}/external.idl"
+	else
+		IDLDIR=`pkg-config --variable=idldir libxul | sed 's@/stable$@@'`/unstable
+		if test ! -d ${IDLDIR}; then
+			IDLDIR=`pkg-config --variable=idldir libxul`
+		fi
+		XPIDL=`pkg-config --variable=sdkdir libxul`/bin/xpidl
+		echo "${XPIDL} -m typelib -I ${IDLDIR} -e ${COMPONENTS_DIR}/external.xpt ${COMPONENTS_DIR}/external.idl"
+		${XPIDL} -m typelib -I ${IDLDIR} -e ${COMPONENTS_DIR}/external.xpt ${COMPONENTS_DIR}/external.idl
+	fi
+fi
+
 # Determine which OS we are on
 if [ "${OS}" = "" ]; then
 	OS=`uname -s`
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_aix.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_aix.mak
old mode 100644
new mode 100755
index a951b1b..5dc0ca5
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_aix.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_aix.mak	
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2010, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_hpux.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_hpux.mak
new file mode 100755
index 0000000..b6d0f30
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_hpux.mak	
@@ -0,0 +1,200 @@
+#*******************************************************************************
+# Copyright (c) 2010, 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+#*******************************************************************************
+
+# Makefile for creating SWT libraries for Linux GTK
+
+include make_common.mak
+
+SWT_VERSION=$(maj_ver)$(min_ver)
+
+# Define the various shared libraries to be build.
+WS_PREFIX = gtk
+SWT_PREFIX = swt
+CDE_PREFIX = swt-cde
+AWT_PREFIX = swt-awt
+SWTPI_PREFIX = swt-pi
+CAIRO_PREFIX = swt-cairo
+ATK_PREFIX = swt-atk
+GNOME_PREFIX = swt-gnome
+GLX_PREFIX = swt-glx
+
+SWT_LIB = lib$(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+CDE_LIB = lib$(CDE_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+AWT_LIB = lib$(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+SWTPI_LIB = lib$(SWTPI_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+CAIRO_LIB = lib$(CAIRO_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+ATK_LIB = lib$(ATK_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+GNOME_LIB = lib$(GNOME_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+GLX_LIB = lib$(GLX_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+
+CAIROCFLAGS = `pkg-config --cflags cairo`
+CAIROLIBS = `pkg-config --libs cairo` -lcairo
+
+GTKCFLAGS = `pkg-config --cflags gtk+-2.0`
+GTKLIBS = `pkg-config --libs gtk+-2.0 gthread-2.0` $(XLIB64) -L/usr/X11R6/lib -lXtst -lX11
+
+CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc
+
+AWT_LFLAGS = -shared -s ${SWT_LFLAGS} 
+AWT_LIBS = -L$(AWT_LIB_PATH) -L$(AWT_LIB_PATH)/server -ljawt -lX11
+
+
+ATKCFLAGS = `pkg-config --cflags atk gtk+-2.0`
+ATKLIBS = `pkg-config --libs atk gtk+-2.0`
+
+GNOMECFLAGS = `pkg-config --cflags gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0`
+GNOMELIBS = `pkg-config --libs-only-L gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0` -lgnomevfs-2 -lgnome-2 -lgnomeui-2
+
+GLXLIBS = -L/usr/X11R6/lib -lGL -lGLU -lm
+
+# Uncomment for Native Stats tool
+#NATIVE_STATS = -DNATIVE_STATS
+
+SWT_OBJECTS = swt.o c.o c_stats.o callback.o
+CDE_OBJECTS = swt.o cde.o cde_structs.o cde_stats.o
+AWT_OBJECTS = swt_awt.o
+SWTPI_OBJECTS = swt.o os.o os_structs.o os_custom.o os_stats.o
+CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o
+ATK_OBJECTS = swt.o atk.o atk_structs.o atk_custom.o atk_stats.o
+GNOME_OBJECTS = swt.o gnome.o gnome_structs.o gnome_stats.o
+GLX_OBJECTS = swt.o glx.o glx_structs.o glx_stats.o
+
+CFLAGS = -O -Wall \
+		-DSWT_VERSION=$(SWT_VERSION) \
+		$(NATIVE_STATS) \
+		-DHPUX -DGTK \
+		-I$(JAVA_HOME)/include \
+		-I$(JAVA_HOME)/include/hp-ux \
+		${SWT_PTR_CFLAGS}
+LFLAGS = -shared -s ${SWT_LFLAGS}
+
+
+all: make_swt make_atk #make_glx
+
+#
+# SWT libs
+#
+make_swt: $(SWT_LIB) $(SWTPI_LIB)
+
+$(SWT_LIB): $(SWT_OBJECTS)
+	$(CC) $(LFLAGS) -o $(SWT_LIB) $(SWT_OBJECTS)
+
+callback.o: callback.c callback.h
+	$(CC) $(CFLAGS) -DUSE_ASSEMBLER -c callback.c
+
+$(SWTPI_LIB): $(SWTPI_OBJECTS)
+	$(CC) $(LFLAGS) -o $(SWTPI_LIB) $(SWTPI_OBJECTS) $(GTKLIBS)
+
+swt.o: swt.c swt.h
+	$(CC) $(CFLAGS) -c swt.c
+os.o: os.c os.h swt.h os_custom.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os.c
+os_structs.o: os_structs.c os_structs.h os.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_structs.c 
+os_custom.o: os_custom.c os_structs.h os.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_custom.c
+os_stats.o: os_stats.c os_structs.h os.h os_stats.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_stats.c
+
+#
+# CAIRO libs
+#
+make_cairo: $(CAIRO_LIB)
+
+$(CAIRO_LIB): $(CAIRO_OBJECTS)
+	$(CC) $(LFLAGS) -o $(CAIRO_LIB) $(CAIRO_OBJECTS) $(CAIROLIBS)
+
+cairo.o: cairo.c cairo.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo.c
+cairo_structs.o: cairo_structs.c cairo_structs.h cairo.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_structs.c
+cairo_stats.o: cairo_stats.c cairo_structs.h cairo.h cairo_stats.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_stats.c
+
+#
+# CDE lib
+#
+
+make_cde: $(CDE_LIB)
+
+$(CDE_LIB): $(CDE_OBJECTS)
+	$(CC) $(LFLAGS) -o $(CDE_LIB) $(CDE_OBJECTS) $(CDE_LIBS)
+
+#
+# AWT lib
+#
+make_awt:$(AWT_LIB)
+
+$(AWT_LIB): $(AWT_OBJECTS)
+	$(CC) $(AWT_LFLAGS) -o $(AWT_LIB) $(AWT_OBJECTS) $(AWT_LIBS)
+
+#
+# Atk lib
+#
+make_atk: $(ATK_LIB)
+
+$(ATK_LIB): $(ATK_OBJECTS)
+	$(CC) $(LFLAGS) -o $(ATK_LIB) $(ATK_OBJECTS) $(ATKLIBS)
+
+atk.o: atk.c atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk.c
+atk_structs.o: atk_structs.c atk_structs.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_structs.c
+atk_custom.o: atk_custom.c atk_structs.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_custom.c
+atk_stats.o: atk_stats.c atk_structs.h atk_stats.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_stats.c
+
+#
+# Gnome lib
+#
+make_gnome: $(GNOME_LIB)
+
+$(GNOME_LIB): $(GNOME_OBJECTS)
+	$(CC) $(LFLAGS) -o $(GNOME_LIB) $(GNOME_OBJECTS) $(GNOMELIBS)
+
+gnome.o: gnome.c 
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome.c
+
+gnome_structs.o: gnome_structs.c 
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome_structs.c
+	
+gnome_stats.o: gnome_stats.c gnome_stats.h
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome_stats.c
+
+#
+# GLX lib
+#
+make_glx: $(GLX_LIB)
+
+$(GLX_LIB): $(GLX_OBJECTS)
+	$(CC) $(LFLAGS) -o $(GLX_LIB) $(GLX_OBJECTS) $(GLXLIBS)
+
+glx.o: glx.c 
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx.c
+
+glx_structs.o: glx_structs.c 
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_structs.c
+	
+glx_stats.o: glx_stats.c glx_stats.h
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_stats.c
+
+#
+# Install
+#
+install: all
+	cp *.so $(OUTPUT_DIR)
+
+#
+# Clean
+#
+clean:
+	rm -f *.o *.so
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_linux.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_linux.mak
index 8b8f1a8..25bb83b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_linux.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_linux.mak	
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -91,8 +91,8 @@ MOZILLAEXCLUDES = -DNO__1XPCOMGlueShutdown \
 	-DNO_nsDynamicFunctionLoad
 XULRUNNEREXCLUDES = -DNO__1NS_1InitXPCOM2
 
-WEBKITCFLAGS = `pkg-config --cflags gtk+-2.0` -I/usr/include/webkit-1.0 -I/usr/include/libsoup-2.4
-WEBKITLIBS = -lwebkit-1.0
+WEBKITCFLAGS = `pkg-config --cflags webkit-1.0`
+WEBKITLIBS = `pkg-config --libs webkit-1.0`
 
 SWT_OBJECTS = swt.o c.o c_stats.o callback.o
 CDE_OBJECTS = swt.o cde.o cde_structs.o cde_stats.o
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris.mak
index 20f711c..308e1c4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris.mak	
@@ -48,9 +48,9 @@ CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo
 GTKCFLAGS = `pkg-config --cflags gtk+-2.0`
 GTKLIBS = `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/openwin/lib -Wl,-R -Wl,/usr/openwin/lib -lXtst
 
-CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc
+CDE_LIBS = -L$(CDE_HOME)/lib$(SWT_CDE_64SUFFIX) -R$(CDE_HOME)/lib$(SWT_CDE_64SUFFIX) -lXt -lX11 -lDtSvc
 
-AWT_LFLAGS = -G -s
+AWT_LFLAGS = -G -s $(SWT_LFLAGS)
 AWT_LIBS = -L$(AWT_LIB_PATH) -ljawt
 
 ATKCFLAGS = `pkg-config --cflags atk gtk+-2.0`
@@ -108,7 +108,7 @@ CFLAGS = -O \
 		-K PIC \
 		${SWT_PTR_CFLAGS} \
 		-I$(CDE_HOME)/include
-LFLAGS = -G -K PIC -s
+LFLAGS = -G -K PIC -s $(SWT_LFLAGS)
 
 
 all: make_swt make_atk make_awt make_glx make_cde
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris_x86.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris_x86.mak
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
index 04527a3..b852989 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
  * The contents of this file are made available under the terms
  * of the GNU Lesser General Public License (LGPL) Version 2.1 that
  * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -3343,6 +3343,18 @@ JNIEXPORT void JNICALL OS_NATIVE(_1g_1list_1free_11)
 }
 #endif
 
+#ifndef NO__1g_1list_1last
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1list_1last)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1g_1list_1last_FUNC);
+	rc = (jintLong)g_list_last((GList *)arg0);
+	OS_NATIVE_EXIT(env, that, _1g_1list_1last_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1g_1list_1length
 JNIEXPORT jint JNICALL OS_NATIVE(_1g_1list_1length)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -3669,20 +3681,59 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1malloc)
 }
 #endif
 
-#ifndef NO__1g_1object_1get
-JNIEXPORT void JNICALL OS_NATIVE(_1g_1object_1get)
-	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintArray arg2, jintLong arg3)
+#if (!defined(NO__1g_1object_1get__I_3B_3II) && !defined(JNI64)) || (!defined(NO__1g_1object_1get__J_3B_3IJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(_1g_1object_1get__I_3B_3II)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintArray arg2, jintLong arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(_1g_1object_1get__J_3B_3IJ)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintArray arg2, jintLong arg3)
+#endif
 {
 	jbyte *lparg1=NULL;
 	jint *lparg2=NULL;
-	OS_NATIVE_ENTER(env, that, _1g_1object_1get_FUNC);
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, _1g_1object_1get__I_3B_3II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, _1g_1object_1get__J_3B_3IJ_FUNC);
+#endif
 	if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
 	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
 	g_object_get((GObject *)arg0, (const gchar *)lparg1, lparg2, (const gchar *)NULL);
 fail:
 	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
 	if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, JNI_ABORT);
-	OS_NATIVE_EXIT(env, that, _1g_1object_1get_FUNC);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, _1g_1object_1get__I_3B_3II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, _1g_1object_1get__J_3B_3IJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO__1g_1object_1get__I_3B_3JI) && !defined(JNI64)) || (!defined(NO__1g_1object_1get__J_3B_3JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(_1g_1object_1get__I_3B_3JI)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jlongArray arg2, jintLong arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(_1g_1object_1get__J_3B_3JJ)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jlongArray arg2, jintLong arg3)
+#endif
+{
+	jbyte *lparg1=NULL;
+	jlong *lparg2=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, _1g_1object_1get__I_3B_3JI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, _1g_1object_1get__J_3B_3JJ_FUNC);
+#endif
+	if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = (*env)->GetLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	g_object_get((GObject *)arg0, (const gchar *)lparg1, lparg2, (const gchar *)NULL);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseLongArrayElements(env, arg2, lparg2, 0);
+	if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, JNI_ABORT);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, _1g_1object_1get__I_3B_3JI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, _1g_1object_1get__J_3B_3JJ_FUNC);
+#endif
 }
 #endif
 
@@ -4507,6 +4558,54 @@ fail:
 }
 #endif
 
+#ifndef NO__1g_1utf16_1offset_1to_1pointer
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf16_1offset_1to_1pointer)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1g_1utf16_1offset_1to_1pointer_FUNC);
+	rc = (jintLong)g_utf16_offset_to_pointer((const gchar *)arg0, arg1);
+	OS_NATIVE_EXIT(env, that, _1g_1utf16_1offset_1to_1pointer_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO__1g_1utf16_1offset_1to_1utf8_1offset
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf16_1offset_1to_1utf8_1offset)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1g_1utf16_1offset_1to_1utf8_1offset_FUNC);
+	rc = (jintLong)g_utf16_offset_to_utf8_offset((const gchar *)arg0, arg1);
+	OS_NATIVE_EXIT(env, that, _1g_1utf16_1offset_1to_1utf8_1offset_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO__1g_1utf16_1pointer_1to_1offset
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf16_1pointer_1to_1offset)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1g_1utf16_1pointer_1to_1offset_FUNC);
+	rc = (jintLong)g_utf16_pointer_to_offset((const gchar *)arg0, (const gchar *)arg1);
+	OS_NATIVE_EXIT(env, that, _1g_1utf16_1pointer_1to_1offset_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO__1g_1utf16_1strlen
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf16_1strlen)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1g_1utf16_1strlen_FUNC);
+	rc = (jintLong)g_utf16_strlen((const gchar *)arg0, arg1);
+	OS_NATIVE_EXIT(env, that, _1g_1utf16_1strlen_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1g_1utf16_1to_1utf8
 JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf16_1to_1utf8)
 	(JNIEnv *env, jclass that, jcharArray arg0, jintLong arg1, jintLongArray arg2, jintLongArray arg3, jintLongArray arg4)
@@ -4564,6 +4663,18 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf8_1offset_1to_1pointer)
 }
 #endif
 
+#ifndef NO__1g_1utf8_1offset_1to_1utf16_1offset
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf8_1offset_1to_1utf16_1offset)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1g_1utf8_1offset_1to_1utf16_1offset_FUNC);
+	rc = (jintLong)g_utf8_offset_to_utf16_offset((const gchar *)arg0, arg1);
+	OS_NATIVE_EXIT(env, that, _1g_1utf8_1offset_1to_1utf16_1offset_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1g_1utf8_1pointer_1to_1offset
 JNIEXPORT jintLong JNICALL OS_NATIVE(_1g_1utf8_1pointer_1to_1offset)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
@@ -6851,6 +6962,18 @@ JNIEXPORT void JNICALL OS_NATIVE(_1gdk_1window_1invalidate_1region)
 }
 #endif
 
+#ifndef NO__1gdk_1window_1is_1viewable
+JNIEXPORT jboolean JNICALL OS_NATIVE(_1gdk_1window_1is_1viewable)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, _1gdk_1window_1is_1viewable_FUNC);
+	rc = (jboolean)gdk_window_is_viewable((GdkWindow *)arg0);
+	OS_NATIVE_EXIT(env, that, _1gdk_1window_1is_1viewable_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1gdk_1window_1is_1visible
 JNIEXPORT jboolean JNICALL OS_NATIVE(_1gdk_1window_1is_1visible)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -7298,6 +7421,35 @@ JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1accel_1label_1set_1accel_1widget)
 }
 #endif
 
+#ifndef NO__1gtk_1accelerator_1get_1default_1mod_1mask
+JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1accelerator_1get_1default_1mod_1mask)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, _1gtk_1accelerator_1get_1default_1mod_1mask_FUNC);
+	rc = (jint)gtk_accelerator_get_default_mod_mask();
+	OS_NATIVE_EXIT(env, that, _1gtk_1accelerator_1get_1default_1mod_1mask_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO__1gtk_1accelerator_1parse
+JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1accelerator_1parse)
+	(JNIEnv *env, jclass that, jintLong arg0, jintArray arg1, jintArray arg2)
+{
+	jint *lparg1=NULL;
+	jint *lparg2=NULL;
+	OS_NATIVE_ENTER(env, that, _1gtk_1accelerator_1parse_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	gtk_accelerator_parse((const gchar *)arg0, (guint *)lparg1, (GdkModifierType *)lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+	if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, _1gtk_1accelerator_1parse_FUNC);
+}
+#endif
+
 #ifndef NO__1gtk_1adjustment_1changed
 JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1adjustment_1changed)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -7448,6 +7600,24 @@ JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1button_1set_1relief)
 }
 #endif
 
+#ifndef NO__1gtk_1calendar_1clear_1marks
+JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1calendar_1clear_1marks)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, _1gtk_1calendar_1clear_1marks_FUNC);
+/*
+	gtk_calendar_clear_marks((GtkCalendar *)arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, gtk_calendar_clear_marks)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(GtkCalendar *))fp)((GtkCalendar *)arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, _1gtk_1calendar_1clear_1marks_FUNC);
+}
+#endif
+
 #ifndef NO__1gtk_1calendar_1display_1options
 JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1calendar_1display_1options)
 	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
@@ -7494,6 +7664,24 @@ fail:
 }
 #endif
 
+#ifndef NO__1gtk_1calendar_1mark_1day
+JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1calendar_1mark_1day)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, _1gtk_1calendar_1mark_1day_FUNC);
+/*
+	gtk_calendar_mark_day((GtkCalendar *)arg0, (guint)arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, gtk_calendar_mark_day)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(GtkCalendar *, guint))fp)((GtkCalendar *)arg0, (guint)arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, _1gtk_1calendar_1mark_1day_FUNC);
+}
+#endif
+
 #ifndef NO__1gtk_1calendar_1new
 JNIEXPORT jintLong JNICALL OS_NATIVE(_1gtk_1calendar_1new)
 	(JNIEnv *env, jclass that)
@@ -7752,6 +7940,24 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(_1gtk_1clipboard_1get)
 }
 #endif
 
+#ifndef NO__1gtk_1clipboard_1set_1can_1store
+JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1clipboard_1set_1can_1store)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, _1gtk_1clipboard_1set_1can_1store_FUNC);
+/*
+	gtk_clipboard_set_can_store((GtkClipboard *)arg0, (const GtkTargetEntry *)arg1, (gint)arg2);
+*/
+	{
+		LOAD_FUNCTION(fp, gtk_clipboard_set_can_store)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(GtkClipboard *, const GtkTargetEntry *, gint))fp)((GtkClipboard *)arg0, (const GtkTargetEntry *)arg1, (gint)arg2);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, _1gtk_1clipboard_1set_1can_1store_FUNC);
+}
+#endif
+
 #ifndef NO__1gtk_1clipboard_1set_1with_1data
 JNIEXPORT jboolean JNICALL OS_NATIVE(_1gtk_1clipboard_1set_1with_1data)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jint arg2, jintLong arg3, jintLong arg4, jintLong arg5)
@@ -7776,6 +7982,24 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(_1gtk_1clipboard_1set_1with_1owner)
 }
 #endif
 
+#ifndef NO__1gtk_1clipboard_1store
+JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1clipboard_1store)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, _1gtk_1clipboard_1store_FUNC);
+/*
+	gtk_clipboard_store((GtkClipboard *)arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, gtk_clipboard_store)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(GtkClipboard *))fp)((GtkClipboard *)arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, _1gtk_1clipboard_1store_FUNC);
+}
+#endif
+
 #ifndef NO__1gtk_1clipboard_1wait_1for_1contents
 JNIEXPORT jintLong JNICALL OS_NATIVE(_1gtk_1clipboard_1wait_1for_1contents)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
@@ -11822,6 +12046,26 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(_1gtk_1print_1settings_1get_1collate)
 }
 #endif
 
+#ifndef NO__1gtk_1print_1settings_1get_1duplex
+JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1print_1settings_1get_1duplex)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, _1gtk_1print_1settings_1get_1duplex_FUNC);
+/*
+	rc = (jint)gtk_print_settings_get_duplex(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, gtk_print_settings_get_duplex)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(jintLong))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, _1gtk_1print_1settings_1get_1duplex_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1gtk_1print_1settings_1get_1n_1copies
 JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1print_1settings_1get_1n_1copies)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -12049,6 +12293,24 @@ JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1print_1settings_1set_1collate)
 }
 #endif
 
+#ifndef NO__1gtk_1print_1settings_1set_1duplex
+JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1print_1settings_1set_1duplex)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, _1gtk_1print_1settings_1set_1duplex_FUNC);
+/*
+	gtk_print_settings_set_duplex(arg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, gtk_print_settings_set_duplex)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jint))fp)(arg0, arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, _1gtk_1print_1settings_1set_1duplex_FUNC);
+}
+#endif
+
 #ifndef NO__1gtk_1print_1settings_1set_1n_1copies
 JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1print_1settings_1set_1n_1copies)
 	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
@@ -12269,6 +12531,24 @@ JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1print_1unix_1dialog_1set_1current_1page)
 }
 #endif
 
+#ifndef NO__1gtk_1print_1unix_1dialog_1set_1embed_1page_1setup
+JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1print_1unix_1dialog_1set_1embed_1page_1setup)
+	(JNIEnv *env, jclass that, jintLong arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, _1gtk_1print_1unix_1dialog_1set_1embed_1page_1setup_FUNC);
+/*
+	gtk_print_unix_dialog_set_embed_page_setup(arg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, gtk_print_unix_dialog_set_embed_page_setup)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jboolean))fp)(arg0, arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, _1gtk_1print_1unix_1dialog_1set_1embed_1page_1setup_FUNC);
+}
+#endif
+
 #ifndef NO__1gtk_1print_1unix_1dialog_1set_1manual_1capabilities
 JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1print_1unix_1dialog_1set_1manual_1capabilities)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
@@ -13013,6 +13293,18 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(_1gtk_1status_1icon_1new)
 }
 #endif
 
+#ifndef NO__1gtk_1status_1icon_1position_1menu_1func
+JNIEXPORT jintLong JNICALL OS_NATIVE(_1gtk_1status_1icon_1position_1menu_1func)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, _1gtk_1status_1icon_1position_1menu_1func_FUNC);
+	rc = (jintLong)gtk_status_icon_position_menu_func();
+	OS_NATIVE_EXIT(env, that, _1gtk_1status_1icon_1position_1menu_1func_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO__1gtk_1status_1icon_1set_1from_1pixbuf
 JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1status_1icon_1set_1from_1pixbuf)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
@@ -17513,6 +17805,16 @@ JNIEXPORT void JNICALL OS_NATIVE(_1pango_1font_1description_1set_1style)
 }
 #endif
 
+#ifndef NO__1pango_1font_1description_1set_1variant
+JNIEXPORT void JNICALL OS_NATIVE(_1pango_1font_1description_1set_1variant)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, _1pango_1font_1description_1set_1variant_FUNC);
+	pango_font_description_set_variant((PangoFontDescription *)arg0, (PangoVariant)arg1);
+	OS_NATIVE_EXIT(env, that, _1pango_1font_1description_1set_1variant_FUNC);
+}
+#endif
+
 #ifndef NO__1pango_1font_1description_1set_1weight
 JNIEXPORT void JNICALL OS_NATIVE(_1pango_1font_1description_1set_1weight)
 	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
@@ -18401,6 +18703,54 @@ JNIEXPORT void JNICALL OS_NATIVE(g_1value_1unset)
 }
 #endif
 
+#ifndef NO_gdk_1threads_1enter
+JNIEXPORT void JNICALL OS_NATIVE(gdk_1threads_1enter)
+	(JNIEnv *env, jclass that)
+{
+	OS_NATIVE_ENTER(env, that, gdk_1threads_1enter_FUNC);
+	gdk_threads_enter();
+	OS_NATIVE_EXIT(env, that, gdk_1threads_1enter_FUNC);
+}
+#endif
+
+#ifndef NO_gdk_1threads_1init
+JNIEXPORT void JNICALL OS_NATIVE(gdk_1threads_1init)
+	(JNIEnv *env, jclass that)
+{
+	OS_NATIVE_ENTER(env, that, gdk_1threads_1init_FUNC);
+	gdk_threads_init();
+	OS_NATIVE_EXIT(env, that, gdk_1threads_1init_FUNC);
+}
+#endif
+
+#ifndef NO_gdk_1threads_1leave
+JNIEXPORT void JNICALL OS_NATIVE(gdk_1threads_1leave)
+	(JNIEnv *env, jclass that)
+{
+	OS_NATIVE_ENTER(env, that, gdk_1threads_1leave_FUNC);
+	gdk_threads_leave();
+	OS_NATIVE_EXIT(env, that, gdk_1threads_1leave_FUNC);
+}
+#endif
+
+#ifndef NO_gdk_1threads_1set_1lock_1functions
+JNIEXPORT void JNICALL OS_NATIVE(gdk_1threads_1set_1lock_1functions)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	OS_NATIVE_ENTER(env, that, gdk_1threads_1set_1lock_1functions_FUNC);
+/*
+	gdk_threads_set_lock_functions(arg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, gdk_threads_set_lock_functions)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jintLong))fp)(arg0, arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, gdk_1threads_1set_1lock_1functions_FUNC);
+}
+#endif
+
 #ifndef NO_localeconv_1decimal_1point
 JNIEXPORT jintLong JNICALL OS_NATIVE(localeconv_1decimal_1point)
 	(JNIEnv *env, jclass that)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c
index 704af6c..c964103 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (c) 2000, 2008 IBM Corporation and others. All rights reserved.
+* Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
 * The contents of this file are made available under the terms
 * of the GNU Lesser General Public License (LGPL) Version 2.1 that
 * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -118,3 +118,72 @@ fail:
 }
 #endif
 
+glong g_utf16_strlen(const gchar *str, glong max) {
+	const gchar *s = str;
+	guchar ch;
+	glong offset = 0;
+	if (!s || max == 0) return 0;
+	if (max < 0) {
+		while (*s) {
+			if (0xf0 <= *(guchar*)s && *(guchar*)s <= 0xfd) offset++;
+			s = g_utf8_next_char (s);
+			offset++;
+		}
+		
+	} else {
+		while (*s) {
+			ch = *(guchar*)s;
+			s = g_utf8_next_char (s);
+			if (s - str > max) break;
+			if (0xf0 <= ch && ch <= 0xfd) offset++;
+			offset++;
+		}
+	}
+	return offset;
+}
+
+glong g_utf16_pointer_to_offset(const gchar *str, const gchar * pos) {
+	const gchar *s = str;
+	glong offset = 0;
+	if (!s || !pos) return 0; 
+	while (s < pos && *s) {
+		if (0xf0 <= *(guchar*)s && *(guchar*)s <= 0xfd) offset++;
+		s = g_utf8_next_char (s);
+		offset++;
+	}
+	return offset;
+}
+
+gchar* g_utf16_offset_to_pointer(const gchar* str, glong offset) {
+	const gchar *s = str;
+	if (!s) return 0; 
+	while (offset-- > 0 && *s) {
+		if (0xf0 <= *(guchar*)s && *(guchar*)s <= 0xfd) offset--;
+		s = g_utf8_next_char (s);
+	}
+	return (gchar *)s;
+}
+
+glong g_utf16_offset_to_utf8_offset(const gchar* str, glong offset) {
+	glong r = 0;
+	const gchar *s = str;
+	if (!s) return 0;
+	while (offset-- > 0 && *s) {
+		if (0xf0 <= *(guchar*)s && *(guchar*)s <= 0xfd) offset--;
+		s = g_utf8_next_char (s);
+		r++;
+	}
+	return r;
+}
+
+glong g_utf8_offset_to_utf16_offset(const gchar* str, glong offset) {
+	glong r = 0;
+	const gchar *s = str;
+	if (!s) return 0;
+	while (offset-- > 0 && *s) {
+		if (0xf0 <= *(guchar*)s && *(guchar*)s <= 0xfd) r++;
+		s = g_utf8_next_char (s);
+		r++;
+	}
+	return r;
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.h
index 1f2b7de..ecf7d7b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+* Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
 * The contents of this file are made available under the terms
 * of the GNU Lesser General Public License (LGPL) Version 2.1 that
 * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -68,8 +68,12 @@
 #define gtk_calendar_get_date_LIB LIB_GTK
 #define gtk_calendar_new_LIB LIB_GTK
 #define gtk_calendar_select_day_LIB LIB_GTK
+#define gtk_calendar_mark_day_LIB LIB_GTK
+#define gtk_calendar_clear_marks_LIB LIB_GTK
 #define gtk_calendar_select_month_LIB LIB_GTK
 #define gtk_calendar_set_display_options_LIB LIB_GTK
+#define gtk_clipboard_store_LIB LIB_GTK
+#define gtk_clipboard_set_can_store_LIB LIB_GTK
 #define gtk_cell_layout_set_attributes_LIB LIB_GTK
 #define gtk_cell_layout_clear_LIB LIB_GTK
 #define gtk_cell_layout_pack_start_LIB LIB_GTK
@@ -145,6 +149,7 @@
 #define gtk_status_icon_set_from_pixbuf_LIB LIB_GTK
 #define gtk_status_icon_set_visible_LIB LIB_GTK
 #define gtk_status_icon_set_tooltip_LIB LIB_GTK
+#define gtk_status_icon_position_menu_LIB LIB_GTK
 #define gtk_window_get_group_LIB LIB_GTK
 #define gtk_window_get_opacity_LIB LIB_GTK
 #define gdk_window_restack_LIB LIB_GDK
@@ -156,6 +161,7 @@
 #define gtk_widget_set_tooltip_text_LIB LIB_GTK
 #define gdk_x11_screen_get_window_manager_name_LIB LIB_GDK
 #define gdk_x11_screen_lookup_visual_LIB LIB_GDK
+#define gdk_threads_set_lock_functions_LIB LIB_GDK
 
 #define atk_object_add_relationship_LIB LIB_ATK
 #define atk_object_remove_relationship_LIB LIB_ATK
@@ -217,6 +223,7 @@
 #define gtk_print_settings_foreach_LIB LIB_GTK
 #define gtk_print_settings_get_LIB LIB_GTK
 #define gtk_print_settings_get_collate_LIB LIB_GTK
+#define gtk_print_settings_get_duplex_LIB LIB_GTK
 #define gtk_print_settings_get_n_copies_LIB LIB_GTK
 #define gtk_print_settings_get_orientation_LIB LIB_GTK
 #define gtk_print_settings_get_page_ranges_LIB LIB_GTK
@@ -228,6 +235,7 @@
 #define gtk_print_settings_new_LIB LIB_GTK
 #define gtk_print_settings_set_LIB LIB_GTK
 #define gtk_print_settings_set_collate_LIB LIB_GTK
+#define gtk_print_settings_set_duplex_LIB LIB_GTK
 #define gtk_print_settings_set_n_copies_LIB LIB_GTK
 #define gtk_print_settings_set_orientation_LIB LIB_GTK
 #define gtk_print_settings_set_page_ranges_LIB LIB_GTK
@@ -240,6 +248,7 @@
 #define gtk_print_unix_dialog_new_LIB LIB_GTK
 #define gtk_print_unix_dialog_set_current_page_LIB LIB_GTK
 #define gtk_print_unix_dialog_set_manual_capabilities_LIB LIB_GTK
+#define gtk_print_unix_dialog_set_embed_page_setup_LIB LIB_GTK
 #define gtk_print_unix_dialog_set_page_setup_LIB LIB_GTK
 #define gtk_print_unix_dialog_set_settings_LIB LIB_GTK
 #define gtk_printer_get_backend_LIB LIB_GTK
@@ -343,3 +352,12 @@
 #define gtk_style_get_white_gc(arg0, arg1) *arg1 = (arg0)->white_gc
 #define localeconv_decimal_point() localeconv()->decimal_point
 
+#define gtk_status_icon_position_menu_func() 0; \
+LOAD_FUNCTION(fp, gtk_status_icon_position_menu) \
+rc = (jintLong)fp;
+
+glong g_utf16_pointer_to_offset(const gchar*, const gchar*);
+gchar* g_utf16_offset_to_pointer(const gchar*, glong);
+glong g_utf16_strlen(const gchar*, glong max);
+glong g_utf16_offset_to_utf8_offset(const gchar*, glong);
+glong g_utf8_offset_to_utf16_offset(const gchar*, glong);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
index 9e17829..a835169 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
  * The contents of this file are made available under the terms
  * of the GNU Lesser General Public License (LGPL) Version 2.1 that
  * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -18,8 +18,8 @@
 
 #ifdef NATIVE_STATS
 
-int OS_nativeFunctionCount = 1370;
-int OS_nativeFunctionCallCount[1370];
+int OS_nativeFunctionCount = 1393;
+int OS_nativeFunctionCallCount[1393];
 char * OS_nativeFunctionNames[] = {
 #ifndef JNI64
 	"Call__IIII",
@@ -265,6 +265,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1g_1list_1data",
 	"_1g_1list_1free",
 	"_1g_1list_1free_11",
+	"_1g_1list_1last",
 	"_1g_1list_1length",
 	"_1g_1list_1next",
 	"_1g_1list_1nth",
@@ -290,7 +291,16 @@ char * OS_nativeFunctionNames[] = {
 	"_1g_1main_1context_1query",
 	"_1g_1main_1context_1release",
 	"_1g_1malloc",
-	"_1g_1object_1get",
+#ifndef JNI64
+	"_1g_1object_1get__I_3B_3II",
+#else
+	"_1g_1object_1get__J_3B_3IJ",
+#endif
+#ifndef JNI64
+	"_1g_1object_1get__I_3B_3JI",
+#else
+	"_1g_1object_1get__J_3B_3JJ",
+#endif
 	"_1g_1object_1get_1qdata",
 	"_1g_1object_1new",
 	"_1g_1object_1notify",
@@ -389,8 +399,13 @@ char * OS_nativeFunctionNames[] = {
 	"_1g_1type_1parent",
 	"_1g_1type_1query",
 	"_1g_1type_1register_1static",
+	"_1g_1utf16_1offset_1to_1pointer",
+	"_1g_1utf16_1offset_1to_1utf8_1offset",
+	"_1g_1utf16_1pointer_1to_1offset",
+	"_1g_1utf16_1strlen",
 	"_1g_1utf16_1to_1utf8",
 	"_1g_1utf8_1offset_1to_1pointer",
+	"_1g_1utf8_1offset_1to_1utf16_1offset",
 	"_1g_1utf8_1pointer_1to_1offset",
 	"_1g_1utf8_1strlen",
 #ifndef JNI64
@@ -556,6 +571,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1gdk_1window_1hide",
 	"_1gdk_1window_1invalidate_1rect",
 	"_1gdk_1window_1invalidate_1region",
+	"_1gdk_1window_1is_1viewable",
 	"_1gdk_1window_1is_1visible",
 	"_1gdk_1window_1lookup",
 	"_1gdk_1window_1lower",
@@ -594,6 +610,8 @@ char * OS_nativeFunctionNames[] = {
 	"_1gtk_1accel_1group_1new",
 	"_1gtk_1accel_1groups_1activate",
 	"_1gtk_1accel_1label_1set_1accel_1widget",
+	"_1gtk_1accelerator_1get_1default_1mod_1mask",
+	"_1gtk_1accelerator_1parse",
 	"_1gtk_1adjustment_1changed",
 	"_1gtk_1adjustment_1new",
 	"_1gtk_1adjustment_1set_1value",
@@ -608,8 +626,10 @@ char * OS_nativeFunctionNames[] = {
 	"_1gtk_1button_1get_1relief",
 	"_1gtk_1button_1new",
 	"_1gtk_1button_1set_1relief",
+	"_1gtk_1calendar_1clear_1marks",
 	"_1gtk_1calendar_1display_1options",
 	"_1gtk_1calendar_1get_1date",
+	"_1gtk_1calendar_1mark_1day",
 	"_1gtk_1calendar_1new",
 	"_1gtk_1calendar_1select_1day",
 	"_1gtk_1calendar_1select_1month",
@@ -628,8 +648,10 @@ char * OS_nativeFunctionNames[] = {
 	"_1gtk_1check_1version",
 	"_1gtk_1clipboard_1clear",
 	"_1gtk_1clipboard_1get",
+	"_1gtk_1clipboard_1set_1can_1store",
 	"_1gtk_1clipboard_1set_1with_1data",
 	"_1gtk_1clipboard_1set_1with_1owner",
+	"_1gtk_1clipboard_1store",
 	"_1gtk_1clipboard_1wait_1for_1contents",
 	"_1gtk_1color_1selection_1dialog_1new",
 	"_1gtk_1color_1selection_1get_1current_1color",
@@ -930,6 +952,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1gtk_1print_1settings_1foreach",
 	"_1gtk_1print_1settings_1get",
 	"_1gtk_1print_1settings_1get_1collate",
+	"_1gtk_1print_1settings_1get_1duplex",
 	"_1gtk_1print_1settings_1get_1n_1copies",
 	"_1gtk_1print_1settings_1get_1orientation",
 	"_1gtk_1print_1settings_1get_1page_1ranges",
@@ -941,6 +964,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1gtk_1print_1settings_1new",
 	"_1gtk_1print_1settings_1set",
 	"_1gtk_1print_1settings_1set_1collate",
+	"_1gtk_1print_1settings_1set_1duplex",
 	"_1gtk_1print_1settings_1set_1n_1copies",
 	"_1gtk_1print_1settings_1set_1orientation",
 	"_1gtk_1print_1settings_1set_1page_1ranges",
@@ -952,6 +976,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1gtk_1print_1unix_1dialog_1get_1settings",
 	"_1gtk_1print_1unix_1dialog_1new",
 	"_1gtk_1print_1unix_1dialog_1set_1current_1page",
+	"_1gtk_1print_1unix_1dialog_1set_1embed_1page_1setup",
 	"_1gtk_1print_1unix_1dialog_1set_1manual_1capabilities",
 	"_1gtk_1print_1unix_1dialog_1set_1page_1setup",
 	"_1gtk_1print_1unix_1dialog_1set_1settings",
@@ -1011,6 +1036,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1gtk_1status_1icon_1get_1geometry",
 	"_1gtk_1status_1icon_1get_1visible",
 	"_1gtk_1status_1icon_1new",
+	"_1gtk_1status_1icon_1position_1menu_1func",
 	"_1gtk_1status_1icon_1set_1from_1pixbuf",
 	"_1gtk_1status_1icon_1set_1tooltip",
 	"_1gtk_1status_1icon_1set_1visible",
@@ -1407,6 +1433,7 @@ char * OS_nativeFunctionNames[] = {
 	"_1pango_1font_1description_1set_1size",
 	"_1pango_1font_1description_1set_1stretch",
 	"_1pango_1font_1description_1set_1style",
+	"_1pango_1font_1description_1set_1variant",
 	"_1pango_1font_1description_1set_1weight",
 	"_1pango_1font_1description_1to_1string",
 	"_1pango_1font_1face_1describe",
@@ -1476,6 +1503,10 @@ char * OS_nativeFunctionNames[] = {
 	"g_1value_1set_1int",
 	"g_1value_1set_1int64",
 	"g_1value_1unset",
+	"gdk_1threads_1enter",
+	"gdk_1threads_1init",
+	"gdk_1threads_1leave",
+	"gdk_1threads_1set_1lock_1functions",
 	"localeconv_1decimal_1point",
 #ifndef JNI64
 	"memmove__ILorg_eclipse_swt_internal_gtk_GInterfaceInfo_2I",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
index 6901aa2..4f42ff4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
  * The contents of this file are made available under the terms
  * of the GNU Lesser General Public License (LGPL) Version 2.1 that
  * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -273,6 +273,7 @@ typedef enum {
 	_1g_1list_1data_FUNC,
 	_1g_1list_1free_FUNC,
 	_1g_1list_1free_11_FUNC,
+	_1g_1list_1last_FUNC,
 	_1g_1list_1length_FUNC,
 	_1g_1list_1next_FUNC,
 	_1g_1list_1nth_FUNC,
@@ -298,7 +299,16 @@ typedef enum {
 	_1g_1main_1context_1query_FUNC,
 	_1g_1main_1context_1release_FUNC,
 	_1g_1malloc_FUNC,
-	_1g_1object_1get_FUNC,
+#ifndef JNI64
+	_1g_1object_1get__I_3B_3II_FUNC,
+#else
+	_1g_1object_1get__J_3B_3IJ_FUNC,
+#endif
+#ifndef JNI64
+	_1g_1object_1get__I_3B_3JI_FUNC,
+#else
+	_1g_1object_1get__J_3B_3JJ_FUNC,
+#endif
 	_1g_1object_1get_1qdata_FUNC,
 	_1g_1object_1new_FUNC,
 	_1g_1object_1notify_FUNC,
@@ -397,8 +407,13 @@ typedef enum {
 	_1g_1type_1parent_FUNC,
 	_1g_1type_1query_FUNC,
 	_1g_1type_1register_1static_FUNC,
+	_1g_1utf16_1offset_1to_1pointer_FUNC,
+	_1g_1utf16_1offset_1to_1utf8_1offset_FUNC,
+	_1g_1utf16_1pointer_1to_1offset_FUNC,
+	_1g_1utf16_1strlen_FUNC,
 	_1g_1utf16_1to_1utf8_FUNC,
 	_1g_1utf8_1offset_1to_1pointer_FUNC,
+	_1g_1utf8_1offset_1to_1utf16_1offset_FUNC,
 	_1g_1utf8_1pointer_1to_1offset_FUNC,
 	_1g_1utf8_1strlen_FUNC,
 #ifndef JNI64
@@ -564,6 +579,7 @@ typedef enum {
 	_1gdk_1window_1hide_FUNC,
 	_1gdk_1window_1invalidate_1rect_FUNC,
 	_1gdk_1window_1invalidate_1region_FUNC,
+	_1gdk_1window_1is_1viewable_FUNC,
 	_1gdk_1window_1is_1visible_FUNC,
 	_1gdk_1window_1lookup_FUNC,
 	_1gdk_1window_1lower_FUNC,
@@ -602,6 +618,8 @@ typedef enum {
 	_1gtk_1accel_1group_1new_FUNC,
 	_1gtk_1accel_1groups_1activate_FUNC,
 	_1gtk_1accel_1label_1set_1accel_1widget_FUNC,
+	_1gtk_1accelerator_1get_1default_1mod_1mask_FUNC,
+	_1gtk_1accelerator_1parse_FUNC,
 	_1gtk_1adjustment_1changed_FUNC,
 	_1gtk_1adjustment_1new_FUNC,
 	_1gtk_1adjustment_1set_1value_FUNC,
@@ -616,8 +634,10 @@ typedef enum {
 	_1gtk_1button_1get_1relief_FUNC,
 	_1gtk_1button_1new_FUNC,
 	_1gtk_1button_1set_1relief_FUNC,
+	_1gtk_1calendar_1clear_1marks_FUNC,
 	_1gtk_1calendar_1display_1options_FUNC,
 	_1gtk_1calendar_1get_1date_FUNC,
+	_1gtk_1calendar_1mark_1day_FUNC,
 	_1gtk_1calendar_1new_FUNC,
 	_1gtk_1calendar_1select_1day_FUNC,
 	_1gtk_1calendar_1select_1month_FUNC,
@@ -636,8 +656,10 @@ typedef enum {
 	_1gtk_1check_1version_FUNC,
 	_1gtk_1clipboard_1clear_FUNC,
 	_1gtk_1clipboard_1get_FUNC,
+	_1gtk_1clipboard_1set_1can_1store_FUNC,
 	_1gtk_1clipboard_1set_1with_1data_FUNC,
 	_1gtk_1clipboard_1set_1with_1owner_FUNC,
+	_1gtk_1clipboard_1store_FUNC,
 	_1gtk_1clipboard_1wait_1for_1contents_FUNC,
 	_1gtk_1color_1selection_1dialog_1new_FUNC,
 	_1gtk_1color_1selection_1get_1current_1color_FUNC,
@@ -938,6 +960,7 @@ typedef enum {
 	_1gtk_1print_1settings_1foreach_FUNC,
 	_1gtk_1print_1settings_1get_FUNC,
 	_1gtk_1print_1settings_1get_1collate_FUNC,
+	_1gtk_1print_1settings_1get_1duplex_FUNC,
 	_1gtk_1print_1settings_1get_1n_1copies_FUNC,
 	_1gtk_1print_1settings_1get_1orientation_FUNC,
 	_1gtk_1print_1settings_1get_1page_1ranges_FUNC,
@@ -949,6 +972,7 @@ typedef enum {
 	_1gtk_1print_1settings_1new_FUNC,
 	_1gtk_1print_1settings_1set_FUNC,
 	_1gtk_1print_1settings_1set_1collate_FUNC,
+	_1gtk_1print_1settings_1set_1duplex_FUNC,
 	_1gtk_1print_1settings_1set_1n_1copies_FUNC,
 	_1gtk_1print_1settings_1set_1orientation_FUNC,
 	_1gtk_1print_1settings_1set_1page_1ranges_FUNC,
@@ -960,6 +984,7 @@ typedef enum {
 	_1gtk_1print_1unix_1dialog_1get_1settings_FUNC,
 	_1gtk_1print_1unix_1dialog_1new_FUNC,
 	_1gtk_1print_1unix_1dialog_1set_1current_1page_FUNC,
+	_1gtk_1print_1unix_1dialog_1set_1embed_1page_1setup_FUNC,
 	_1gtk_1print_1unix_1dialog_1set_1manual_1capabilities_FUNC,
 	_1gtk_1print_1unix_1dialog_1set_1page_1setup_FUNC,
 	_1gtk_1print_1unix_1dialog_1set_1settings_FUNC,
@@ -1019,6 +1044,7 @@ typedef enum {
 	_1gtk_1status_1icon_1get_1geometry_FUNC,
 	_1gtk_1status_1icon_1get_1visible_FUNC,
 	_1gtk_1status_1icon_1new_FUNC,
+	_1gtk_1status_1icon_1position_1menu_1func_FUNC,
 	_1gtk_1status_1icon_1set_1from_1pixbuf_FUNC,
 	_1gtk_1status_1icon_1set_1tooltip_FUNC,
 	_1gtk_1status_1icon_1set_1visible_FUNC,
@@ -1415,6 +1441,7 @@ typedef enum {
 	_1pango_1font_1description_1set_1size_FUNC,
 	_1pango_1font_1description_1set_1stretch_FUNC,
 	_1pango_1font_1description_1set_1style_FUNC,
+	_1pango_1font_1description_1set_1variant_FUNC,
 	_1pango_1font_1description_1set_1weight_FUNC,
 	_1pango_1font_1description_1to_1string_FUNC,
 	_1pango_1font_1face_1describe_FUNC,
@@ -1484,6 +1511,10 @@ typedef enum {
 	g_1value_1set_1int_FUNC,
 	g_1value_1set_1int64_FUNC,
 	g_1value_1unset_FUNC,
+	gdk_1threads_1enter_FUNC,
+	gdk_1threads_1init_FUNC,
+	gdk_1threads_1leave_FUNC,
+	gdk_1threads_1set_1lock_1functions_FUNC,
 	localeconv_1decimal_1point_FUNC,
 #ifndef JNI64
 	memmove__ILorg_eclipse_swt_internal_gtk_GInterfaceInfo_2I_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java
old mode 100644
new mode 100755
index 7254f52..a1858da
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/accessibility/gtk/ATK.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/accessibility/gtk/ATK.java
index a54a31a..d643afc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/accessibility/gtk/ATK.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/accessibility/gtk/ATK.java	
@@ -204,6 +204,8 @@ public static final native int /*long*/ ATK_TYPE_ACTION ();
 /** @method flags=const */
 public static final native int /*long*/ ATK_TYPE_COMPONENT ();
 /** @method flags=const */
+public static final native int /*long*/ ATK_TYPE_EDITABLE_TEXT ();
+/** @method flags=const */
 public static final native int /*long*/ ATK_TYPE_HYPERTEXT ();
 /** @method flags=const */
 public static final native int /*long*/ ATK_TYPE_SELECTION ();
@@ -244,6 +246,15 @@ public static final int /*long*/ ATK_SELECTION_GET_IFACE (int /*long*/ obj) {
 		lock.unlock();
 	}
 }
+public static final native int /*long*/ _ATK_EDITABLE_TEXT_GET_IFACE (int /*long*/ handle);
+public static final int /*long*/ ATK_EDITABLE_TEXT_GET_IFACE (int /*long*/ handle) {
+	lock.lock();
+	try {
+		return _ATK_EDITABLE_TEXT_GET_IFACE(handle);
+	} finally {
+		lock.unlock();
+	}
+}
 public static final native int /*long*/ _ATK_HYPERTEXT_GET_IFACE (int /*long*/ handle);
 public static final int /*long*/ ATK_HYPERTEXT_GET_IFACE (int /*long*/ handle) {
 	lock.lock();
@@ -546,6 +557,7 @@ public static final int /*long*/ call (int /*long*/ function, int /*long*/ arg0,
 public static final native int /*long*/ g_strdup (int /*long*/ str);
 public static final native void memmove (AtkActionIface dest, int /*long*/ src);
 public static final native void memmove (AtkComponentIface dest, int /*long*/ src);
+public static final native void memmove (AtkEditableTextIface dest, int /*long*/ src);
 public static final native void memmove (AtkHypertextIface dest, int /*long*/ src);
 public static final native void memmove (AtkObjectClass dest, int /*long*/ src);
 public static final native void memmove (AtkObjectFactoryClass  dest, int /*long*/ src);
@@ -556,6 +568,7 @@ public static final native void memmove (AtkValueIface dest, int /*long*/ src);
 public static final native void memmove (GtkAccessible  dest, int /*long*/ src);
 public static final native void memmove (int /*long*/ dest, AtkActionIface src);
 public static final native void memmove (int /*long*/ dest, AtkComponentIface src);
+public static final native void memmove (int /*long*/ dest, AtkEditableTextIface src);
 public static final native void memmove (int /*long*/ dest, AtkHypertextIface src);
 public static final native void memmove (int /*long*/ dest, AtkObjectClass src);
 public static final native void memmove (int /*long*/ dest, AtkObjectFactoryClass src);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/accessibility/gtk/AtkEditableTextIface.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/accessibility/gtk/AtkEditableTextIface.java
new file mode 100644
index 0000000..f4f7723
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/accessibility/gtk/AtkEditableTextIface.java	
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.accessibility.gtk;
+
+public class AtkEditableTextIface {
+	/** @field cast=(gboolean (*)()) */
+	public int /*long*/ set_run_attributes;
+	/** @field cast=(void (*)()) */
+	public int /*long*/ set_text_contents;
+	/** @field cast=(void (*)()) */
+	public int /*long*/ insert_text;
+	/** @field cast=(void (*)()) */
+	public int /*long*/ copy_text;
+	/** @field cast=(void (*)()) */
+	public int /*long*/ cut_text;
+	/** @field cast=(void (*)()) */
+	public int /*long*/ delete_text;
+	/** @field cast=(void (*)()) */
+	public int /*long*/ paste_text;
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
index 41ed3fa..9c3db9f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
  * The contents of this file are made available under the terms
  * of the GNU Lesser General Public License (LGPL) Version 2.1 that
  * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -311,6 +311,9 @@ public class OS extends C {
 	public static final int GTK_PRINT_PAGES_ALL = 0;
 	public static final int GTK_PRINT_PAGES_CURRENT = 1;
 	public static final int GTK_PRINT_PAGES_RANGES = 2;
+	public static final int GTK_PRINT_DUPLEX_SIMPLEX = 0;
+	public static final int GTK_PRINT_DUPLEX_HORIZONTAL = 1;
+	public static final int GTK_PRINT_DUPLEX_VERTICAL = 2;
 	public static final int GTK_PROGRESS_CONTINUOUS = 0x0;
 	public static final int GTK_PROGRESS_DISCRETE = 0x1;
 	public static final int GTK_PROGRESS_LEFT_TO_RIGHT = 0x0;
@@ -408,7 +411,15 @@ public class OS extends C {
 	public static final int PANGO_DIRECTION_LTR = 0;
 	public static final int PANGO_DIRECTION_RTL = 1;	
 	public static final int PANGO_SCALE = 1024;
+	public static final int PANGO_STRETCH_ULTRA_CONDENSED = 0x0;
+	public static final int PANGO_STRETCH_EXTRA_CONDENSED = 0x1;
+	public static final int PANGO_STRETCH_CONDENSED = 0x2;
+	public static final int PANGO_STRETCH_SEMI_CONDENSED = 0x3;
 	public static final int PANGO_STRETCH_NORMAL = 0x4;
+	public static final int PANGO_STRETCH_SEMI_EXPANDED = 0x5;
+	public static final int PANGO_STRETCH_EXPANDED = 0x6;
+	public static final int PANGO_STRETCH_EXTRA_EXPANDED = 0x7;
+	public static final int PANGO_STRETCH_ULTRA_EXPANDED = 0x8;
 	public static final int PANGO_STYLE_ITALIC = 0x2;
 	public static final int PANGO_STYLE_NORMAL = 0x0;
 	public static final int PANGO_STYLE_OBLIQUE = 0x1;
@@ -418,6 +429,8 @@ public class OS extends C {
 	public static final int PANGO_UNDERLINE_DOUBLE = 2;
 	public static final int PANGO_UNDERLINE_LOW = 3;
 	public static final int PANGO_UNDERLINE_ERROR = 4;
+	public static final int PANGO_VARIANT_NORMAL = 0;
+	public static final int PANGO_VARIANT_SMALL_CAPS = 1;
 	public static final int PANGO_WEIGHT_BOLD = 0x2bc;
 	public static final int PANGO_WEIGHT_NORMAL = 0x190;
 	public static final int PANGO_WRAP_WORD = 0;
@@ -514,6 +527,7 @@ public class OS extends C {
 	public static final byte[] expander_size = ascii("expander-size");
 	public static final byte[] fixed_height_mode = ascii("fixed-height-mode");
 	public static final byte[] focus_line_width = ascii("focus-line-width");
+	public static final byte[] focus_padding = ascii("focus-padding");
 	public static final byte[] font_desc = ascii("font-desc");
 	public static final byte[] foreground_gdk = ascii("foreground-gdk");
 	public static final byte[] grid_line_width = ascii("grid-line-width");
@@ -522,12 +536,17 @@ public class OS extends C {
 	public static final byte[] gtk_cursor_blink_time = ascii("gtk-cursor-blink-time");
 	public static final byte[] gtk_double_click_time = ascii("gtk-double-click-time");
 	public static final byte[] gtk_entry_select_on_focus = ascii("gtk-entry-select-on-focus");
+	public static final byte[] gtk_show_input_method_menu = ascii("gtk-show-input-method-menu");
+	public static final byte[] gtk_menu_bar_accel = ascii("gtk-menu-bar-accel");
 	public static final byte[] inner_border = ascii("inner-border");
 	public static final byte[] horizontal_separator = ascii("horizontal-separator");
 	public static final byte[] inconsistent = ascii("inconsistent");
+	public static final byte[] indicator_size = ascii("indicator-size");
+	public static final byte[] indicator_spacing = ascii("indicator-spacing");
 	public static final byte[] interior_focus = ascii("interior-focus");
 	public static final byte[] mode = ascii("mode");
 	public static final byte[] model = ascii("model");
+	public static final byte[] spacing = ascii("spacing");
 	public static final byte[] pixbuf = ascii("pixbuf");
 	public static final byte[] text = ascii("text");
 	public static final byte[] xalign = ascii("xalign");
@@ -622,6 +641,8 @@ public static final native int /*long*/ localeconv_decimal_point();
  */
 public static final native int /*long*/ realpath(byte[] path, byte[] realPath);
 
+
+
 /** Object private fields accessors */
 
 
@@ -1287,7 +1308,7 @@ public static final native void memmove(XFocusChangeEvent dest, int /*long*/ src
  */
 public static final native void memmove(XVisibilityEvent dest, int /*long*/ src, int /*long*/ size);
 
-/** @method flags=const*/
+/** @method flags=const */
 public static final native int RTLD_GLOBAL();
 /** @method flags=const */
 public static final native int RTLD_NOW();
@@ -2420,6 +2441,18 @@ public static final void g_list_free_1(int /*long*/ list) {
 		lock.unlock();
 	}
 }
+/**
+ * @param list cast=(GList *)
+ */
+public static final native int /*long*/ _g_list_last(int /*long*/ list);
+public static final int /*long*/ g_list_last(int /*long*/ list) {
+	lock.lock();
+	try {
+		return _g_list_last(list);
+	} finally {
+		lock.unlock();
+	}
+}
 /** @param list cast=(GList *) */
 public static final native int _g_list_length(int /*long*/ list);
 public static final int g_list_length(int /*long*/ list) {
@@ -2637,6 +2670,20 @@ public static final void g_object_get(int /*long*/ object, byte[] first_property
 }
 /**
  * @param object cast=(GObject *)
+ * @param first_property_name cast=(const gchar *),flags=no_out
+ * @param terminator cast=(const gchar *),flags=sentinel
+ */
+public static final native void _g_object_get(int /*long*/ object, byte[] first_property_name, long[] value, int /*long*/ terminator);
+public static final void g_object_get(int /*long*/ object, byte[] first_property_name, long[] value, int /*long*/ terminator) {
+	lock.lock();
+	try {
+		_g_object_get(object, first_property_name, value, terminator);
+	} finally {
+		lock.unlock();
+	}
+}
+/**
+ * @param object cast=(GObject *)
  * @param quark cast=(GQuark)
  */
 public static final native int /*long*/ _g_object_get_qdata(int /*long*/ object, int quark);
@@ -3350,6 +3397,59 @@ public static final int /*long*/ g_utf8_pointer_to_offset(int /*long*/ str, int
 	}
 }
 /** @param str cast=(const gchar *) */
+public static final native int /*long*/ _g_utf16_offset_to_pointer(int /*long*/ str, int /*long*/ offset);
+public static final int /*long*/ g_utf16_offset_to_pointer(int /*long*/ str, int /*long*/ offset) {
+	lock.lock();
+	try {
+		return _g_utf16_offset_to_pointer(str, offset);
+	} finally {
+		lock.unlock();
+	}
+}
+/**
+ * @param str cast=(const gchar *)
+ * @param pos cast=(const gchar *)
+ */
+public static final native int /*long*/ _g_utf16_pointer_to_offset(int /*long*/ str, int /*long*/ pos);
+public static final int /*long*/ g_utf16_pointer_to_offset(int /*long*/ str, int /*long*/ pos) {
+	lock.lock();
+	try {
+		return _g_utf16_pointer_to_offset(str, pos);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @param str cast=(const gchar *) */
+public static final native int /*long*/ _g_utf16_strlen(int /*long*/ str, int /*long*/ max);
+public static final int /*long*/ g_utf16_strlen(int /*long*/ str, int /*long*/ max) {
+	lock.lock();
+	try {
+		return _g_utf16_strlen(str, max);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @param str cast=(const gchar *) */
+public static final native int /*long*/ _g_utf8_offset_to_utf16_offset(int /*long*/ str, int /*long*/ offset);
+public static final int /*long*/ g_utf8_offset_to_utf16_offset(int /*long*/ str, int /*long*/ offset) {
+	lock.lock();
+	try {
+		return _g_utf8_offset_to_utf16_offset(str, offset);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @param str cast=(const gchar *) */
+public static final native int /*long*/ _g_utf16_offset_to_utf8_offset(int /*long*/ str, int /*long*/ offset);
+public static final int /*long*/ g_utf16_offset_to_utf8_offset(int /*long*/ str, int /*long*/ offset) {
+	lock.lock();
+	try {
+		return _g_utf16_offset_to_utf8_offset(str, offset);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @param str cast=(const gchar *) */
 public static final native int /*long*/ _g_utf8_strlen(int /*long*/ str, int /*long*/ max);
 public static final int /*long*/ g_utf8_strlen(int /*long*/ str, int /*long*/ max) {
 	lock.lock();
@@ -5033,6 +5133,13 @@ public static final int gdk_text_property_to_utf8_list  (int /*long*/ encoding,
 		lock.unlock();
 	}
 }
+public static final native void gdk_threads_init ();
+public static final native void gdk_threads_enter ();
+public static final native void gdk_threads_leave ();
+/**
+ * @method flags=dynamic
+ */
+public static final native void gdk_threads_set_lock_functions(int /*long*/ enter_fn, int /*long*/ leave_fn);
 /**
  * @method flags=dynamic
  * @param display cast=(GdkDisplay*)
@@ -5304,6 +5411,16 @@ public static final boolean gdk_window_is_visible(int /*long*/ window) {
 	}
 }
 /** @param window cast=(GdkWindow *) */
+public static final native boolean _gdk_window_is_viewable (int /*long*/ window);
+public static final boolean gdk_window_is_viewable (int /*long*/ window) {
+	lock.lock();
+	try {
+		return _gdk_window_is_viewable (window);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @param window cast=(GdkWindow *) */
 public static final native void _gdk_window_move(int /*long*/ window, int x, int y);
 public static final void gdk_window_move(int /*long*/ window, int x, int y) {
 	lock.lock();
@@ -5598,6 +5715,29 @@ public static final void gdk_window_thaw_updates(int /*long*/ window) {
 		lock.unlock();
 	}
 }
+public static final native int _gtk_accelerator_get_default_mod_mask();
+public static final int gtk_accelerator_get_default_mod_mask() {
+	lock.lock();
+	try {
+		return _gtk_accelerator_get_default_mod_mask();
+	} finally {
+		lock.unlock();
+	}
+}
+/**
+ * @param accelerator cast=(const gchar *)
+ * @param accelerator_key cast=(guint *)
+ * @param accelerator_mods cast=(GdkModifierType *)
+ */
+public static final native void _gtk_accelerator_parse(int /*long*/ accelerator, int [] accelerator_key, int [] accelerator_mods);
+public static final void gtk_accelerator_parse(int /*long*/ accelerator, int [] accelerator_key, int [] accelerator_mods) {
+	lock.lock();
+	try {
+		_gtk_accelerator_parse(accelerator, accelerator_key, accelerator_mods);
+	} finally {
+		lock.unlock();
+	}
+}
 public static final native int /*long*/ _gtk_accel_group_new();
 public static final int /*long*/ gtk_accel_group_new() {
 	lock.lock();
@@ -5837,6 +5977,34 @@ public static final void gtk_calendar_select_day(int /*long*/ calendar, int day)
 /**
  * @method flags=dynamic
  * @param calendar cast=(GtkCalendar *)
+ * @param day cast=(guint)
+ */
+public static final native void _gtk_calendar_mark_day(int /*long*/ calendar, int day);
+public static final void gtk_calendar_mark_day(int /*long*/ calendar, int day) {
+	lock.lock();
+	try {
+		_gtk_calendar_mark_day(calendar, day);
+	} finally {
+		lock.unlock();
+	}
+}
+/**
+ * @method flags=dynamic
+ * @param calendar cast=(GtkCalendar *)
+ * @param day cast=(guint)
+ */
+public static final native void _gtk_calendar_clear_marks(int /*long*/ calendar);
+public static final void gtk_calendar_clear_marks(int /*long*/ calendar) {
+	lock.lock();
+	try {
+		_gtk_calendar_clear_marks(calendar);
+	} finally {
+		lock.unlock();
+	}
+}
+/**
+ * @method flags=dynamic
+ * @param calendar cast=(GtkCalendar *)
  * @param flags cast=(GtkCalendarDisplayOptions)
  */
 public static final native void _gtk_calendar_set_display_options(int /*long*/ calendar, int flags);
@@ -6059,6 +6227,34 @@ public static final boolean gtk_clipboard_set_with_owner(int /*long*/ clipboard,
 	}
 }
 /**
+ * @method flags=dynamic
+ * @param clipboard cast=(GtkClipboard *)
+ * @param targets cast=(const GtkTargetEntry *)
+ * @param n_targets cast=(gint)
+ */
+public static final native void _gtk_clipboard_set_can_store(int /*long*/ clipboard, int /*long*/ targets, int n_targets);
+public static final void gtk_clipboard_set_can_store(int /*long*/ clipboard, int /*long*/ targets, int n_targets) {
+	lock.lock();
+	try {
+		_gtk_clipboard_set_can_store(clipboard, targets, n_targets);
+	} finally {
+		lock.unlock();
+	}
+}
+/**
+ * @method flags=dynamic
+ * @param clipboard cast=(GtkClipboard *)
+ */
+public static final native void _gtk_clipboard_store(int /*long*/ clipboard);
+public static final void gtk_clipboard_store(int /*long*/ clipboard) {
+	lock.lock();
+	try {
+		_gtk_clipboard_store(clipboard);
+	} finally {
+		lock.unlock();
+	}
+}
+/**
  * @param clipboard cast=(GtkClipboard *)
  * @param target cast=(GdkAtom)
  */
@@ -7469,6 +7665,15 @@ public static final int /*long*/ gtk_hseparator_new() {
 		lock.unlock();
 	}
 }
+public static final native int /*long*/ _gtk_status_icon_position_menu_func();
+public static final int /*long*/ gtk_status_icon_position_menu_func() {
+	lock.lock();
+	try {
+		return _gtk_status_icon_position_menu_func();
+	} finally {
+		lock.unlock();
+	}
+}
 /**
  * @method flags=dynamic
  */
@@ -9301,6 +9506,26 @@ public static final void gtk_print_settings_set_collate(int /*long*/ settings, b
 	}
 }
 /** @method flags=dynamic */
+public static final native int _gtk_print_settings_get_duplex(int /*long*/ settings);
+public static final int gtk_print_settings_get_duplex(int /*long*/ settings) {
+	lock.lock();
+	try {
+		return _gtk_print_settings_get_duplex(settings);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @method flags=dynamic */
+public static final native void _gtk_print_settings_set_duplex(int /*long*/ settings, int duplex);
+public static final void gtk_print_settings_set_duplex(int /*long*/ settings, int duplex) {
+	lock.lock();
+	try {
+		_gtk_print_settings_set_duplex(settings, duplex);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @method flags=dynamic */
 public static final native int _gtk_print_settings_get_n_copies(int /*long*/ settings);
 public static final int gtk_print_settings_get_n_copies(int /*long*/ settings) {
 	lock.lock();
@@ -9414,6 +9639,16 @@ public static final int /*long*/ gtk_print_unix_dialog_new(byte[] title, int /*l
 	}
 }
 /** @method flags=dynamic */
+public static final native void _gtk_print_unix_dialog_set_embed_page_setup(int /*long*/ dialog, boolean embed);
+public static final void gtk_print_unix_dialog_set_embed_page_setup(int /*long*/ dialog, boolean embed) {
+	lock.lock();
+	try {
+		_gtk_print_unix_dialog_set_embed_page_setup(dialog, embed);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @method flags=dynamic */
 public static final native void _gtk_print_unix_dialog_set_page_setup(int /*long*/ dialog, int /*long*/ page_setup);
 public static final void gtk_print_unix_dialog_set_page_setup(int /*long*/ dialog, int /*long*/ page_setup) {
 	lock.lock();
@@ -14401,6 +14636,19 @@ public static final void pango_font_description_set_weight(int /*long*/ desc, in
 		lock.unlock();
 	}
 }
+/**
+ * @param desc cast=(PangoFontDescription *)
+ * @param variant cast=(PangoVariant)
+ */
+public static final native void _pango_font_description_set_variant(int /*long*/ desc, int variant);
+public static final void pango_font_description_set_variant(int /*long*/ desc, int variant) {
+	lock.lock();
+	try {
+		_pango_font_description_set_variant(desc, variant);
+	} finally {
+		lock.unlock();
+	}
+}
 /** @param desc cast=(PangoFontDescription *) */
 public static final native int /*long*/ _pango_font_description_to_string(int /*long*/ desc);
 public static final int /*long*/ pango_font_description_to_string(int /*long*/ desc) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/build.sh b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/build.sh
old mode 100755
new mode 100644
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak
index 57a50f8..8bba52f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/library/make_hpux_ia64_32.mak	
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/Lock.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/Lock.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/motif/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/motif/OS.java
index 5a01b8d..8939bbc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/motif/OS.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/motif/OS.java	
@@ -557,6 +557,7 @@ public class OS extends C {
 	public static final int XmNsliderSize = malloc ("sliderSize", 4);
 	public static final int XmNsliderVisual = malloc ("sliderVisual", 4);
 	public static final int XmNsourceCursorIcon = malloc ("sourceCursorIcon", 4);
+	public static final int XmNspacing = malloc ("spacing", 2);
 	public static final int XmNspinBoxChildType = malloc ("spinBoxChildType", 2);
 	public static final int XmNspotLocation = malloc ("spotLocation", 4);
 	public static final int XmNstateCursorIcon = malloc ("stateCursorIcon", 4);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/photon/library/build.sh b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/photon/library/build.sh
old mode 100755
new mode 100644
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/photon/org/eclipse/swt/internal/photon/PtWebClient2Data_t.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/photon/org/eclipse/swt/internal/photon/PtWebClient2Data_t.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c
index b4f0e9b..6fbda3b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1028,9 +1028,9 @@ JNIEXPORT jint JNICALL COM_NATIVE(OleSetMenuDescriptor)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
 {
 	jint rc = 0;
-	COM_NATIVE_ENTER(env, that, OleSetMenuDescriptor_FUNC);
+	COM_NATIVE_ENTER_TRY(env, that, OleSetMenuDescriptor_FUNC);
 	rc = (jint)OleSetMenuDescriptor((HOLEMENU)arg0, (HWND)arg1, (HWND)arg2, (LPOLEINPLACEFRAME)arg3, (LPOLEINPLACEACTIVEOBJECT)arg4);
-	COM_NATIVE_EXIT(env, that, OleSetMenuDescriptor_FUNC);
+	COM_NATIVE_EXIT_CATCH(env, that, OleSetMenuDescriptor_FUNC);
 	return rc;
 }
 #endif
@@ -1255,6 +1255,18 @@ JNIEXPORT jint JNICALL COM_NATIVE(SysStringByteLen)
 }
 #endif
 
+#ifndef NO_SysStringLen
+JNIEXPORT jint JNICALL COM_NATIVE(SysStringLen)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, SysStringLen_FUNC);
+	rc = (jint)SysStringLen((BSTR)arg0);
+	COM_NATIVE_EXIT(env, that, SysStringLen_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_TYPEATTR_1sizeof
 JNIEXPORT jint JNICALL COM_NATIVE(TYPEATTR_1sizeof)
 	(JNIEnv *env, jclass that)
@@ -1599,6 +1611,29 @@ fail:
 }
 #endif
 
+#if (!defined(NO_VtblCall__IIIIZ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJIIZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIIIZ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jint arg3, jboolean arg4)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJIIZ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jint arg3, jboolean arg4)
+#endif
+{
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__IIIIZ_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJIIZ_FUNC);
+#endif
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jint, jint, jboolean))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, arg4);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__IIIIZ_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJIIZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__IIII_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJII_3I) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIII_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jint arg3, jintArray arg4)
@@ -1653,29 +1688,6 @@ fail:
 }
 #endif
 
-#if (!defined(NO_VtblCall__IIIJ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJIJ) && defined(JNI64))
-#ifndef JNI64
-JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIIJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jlong arg3)
-#else
-JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJIJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jlong arg3)
-#endif
-{
-	jint rc = 0;
-#ifndef JNI64
-	COM_NATIVE_ENTER(env, that, VtblCall__IIIJ_FUNC);
-#else
-	COM_NATIVE_ENTER(env, that, VtblCall__IJIJ_FUNC);
-#endif
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jint, jlong))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3);
-#ifndef JNI64
-	COM_NATIVE_EXIT(env, that, VtblCall__IIIJ_FUNC);
-#else
-	COM_NATIVE_EXIT(env, that, VtblCall__IJIJ_FUNC);
-#endif
-	return rc;
-}
-#endif
-
 #if (!defined(NO_VtblCall__IIIJ_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJIJ_3I) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIIJ_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jlong arg3, jintArray arg4)
@@ -2296,6 +2308,56 @@ fail:
 }
 #endif
 
+#if (!defined(NO_VtblCall__IIJJZ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIJJZ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlong arg3, jboolean arg4)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJJJZ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlong arg3, jboolean arg4)
+#endif
+{
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__IIJJZ_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJJJZ_FUNC);
+#endif
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jlong, jboolean))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, arg4);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__IIJJZ_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJJJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_VtblCall__IIJJ_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJJ_3J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIJJ_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlong arg3, jlongArray arg4)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJJJ_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlong arg3, jlongArray arg4)
+#endif
+{
+	jlong *lparg4=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__IIJJ_3J_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJJJ_3J_FUNC);
+#endif
+	if (arg4) if ((lparg4 = (*env)->GetLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jlong, jlong *))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, lparg4);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseLongArrayElements(env, arg4, lparg4, 0);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__IIJJ_3J_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJJJ_3J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__IIJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jobject arg3, jlongArray arg4)
@@ -2406,33 +2468,6 @@ JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJJZ)(JNIEnv *env, jclass that, jint
 }
 #endif
 
-#if (!defined(NO_VtblCall__IIJ_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJ_3I) && defined(JNI64))
-#ifndef JNI64
-JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIJ_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jintArray arg3)
-#else
-JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJJ_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jintArray arg3)
-#endif
-{
-	jint *lparg3=NULL;
-	jint rc = 0;
-#ifndef JNI64
-	COM_NATIVE_ENTER(env, that, VtblCall__IIJ_3I_FUNC);
-#else
-	COM_NATIVE_ENTER(env, that, VtblCall__IJJ_3I_FUNC);
-#endif
-	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jint *))(*(jintLong **)arg1)[arg0])(arg1, arg2, lparg3);
-fail:
-	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-#ifndef JNI64
-	COM_NATIVE_EXIT(env, that, VtblCall__IIJ_3I_FUNC);
-#else
-	COM_NATIVE_EXIT(env, that, VtblCall__IJJ_3I_FUNC);
-#endif
-	return rc;
-}
-#endif
-
 #if (!defined(NO_VtblCall__IIJ_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJ_3J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIJ_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlongArray arg3)
@@ -3009,6 +3044,33 @@ fail:
 }
 #endif
 
+#if (!defined(NO_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2II) && !defined(JNI64)) || (!defined(NO_VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2II) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2II)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jobject arg2, jint arg3, jint arg4)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2II)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jobject arg2, jint arg3, jint arg4)
+#endif
+{
+	RECT _arg2, *lparg2=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2II_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2II_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getRECTFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, RECT, jint, jint))(*(jintLong **)arg1)[arg0])(arg1, *lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) setRECTFields(env, arg2, lparg2);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2II_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2II_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2IZ) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jobject arg2, jint arg3, jboolean arg4)
@@ -3036,6 +3098,33 @@ fail:
 }
 #endif
 
+#if (!defined(NO_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JJ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jobject arg2, jlong arg3, jlong arg4)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jobject arg2, jlong arg3, jlong arg4)
+#endif
+{
+	RECT _arg2, *lparg2=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getRECTFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, RECT, jlong, jlong))(*(jintLong **)arg1)[arg0])(arg1, *lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) setRECTFields(env, arg2, lparg2);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JZ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JZ) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JZ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jobject arg2, jlong arg3, jboolean arg4)
@@ -3170,6 +3259,52 @@ JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJZ)(JNIEnv *env, jclass that, jint
 }
 #endif
 
+#if (!defined(NO_VtblCall__IIZI) && !defined(JNI64)) || (!defined(NO_VtblCall__IJZI) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIZI)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jboolean arg2, jint arg3)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJZI)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jboolean arg2, jint arg3)
+#endif
+{
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__IIZI_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJZI_FUNC);
+#endif
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jboolean, jint))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__IIZI_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJZI_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_VtblCall__IIZJ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJZJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IIZJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jboolean arg2, jlong arg3)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJZJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jboolean arg2, jlong arg3)
+#endif
+{
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__IIZJ_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJZJ_FUNC);
+#endif
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jboolean, jlong))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__IIZJ_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJZJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__II_3CIIII_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJ_3CIIII_3I) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__II_3CIIII_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jcharArray arg2, jint arg3, jint arg4, jint arg5, jint arg6, jintArray arg7)
@@ -3260,6 +3395,36 @@ fail:
 }
 #endif
 
+#if (!defined(NO_VtblCall__II_3CI_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJ_3CI_3I) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__II_3CI_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jcharArray arg2, jint arg3, jintArray arg4)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJ_3CI_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jcharArray arg2, jint arg3, jintArray arg4)
+#endif
+{
+	jchar *lparg2=NULL;
+	jint *lparg4=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__II_3CI_3I_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3CI_3I_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jint, jint *))(*(jintLong **)arg1)[arg0])(arg1, lparg2, arg3, lparg4);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__II_3CI_3I_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3CI_3I_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__II_3CJIII_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJ_3CJIII_3J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__II_3CJIII_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jcharArray arg2, jlong arg3, jint arg4, jint arg5, jint arg6, jlongArray arg7)
@@ -3350,6 +3515,39 @@ fail:
 }
 #endif
 
+#if (!defined(NO_VtblCall__II_3C_3I_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJ_3C_3I_3I) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__II_3C_3I_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jcharArray arg2, jintArray arg3, jintArray arg4)
+#else
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJ_3C_3I_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jcharArray arg2, jintArray arg3, jintArray arg4)
+#endif
+{
+	jchar *lparg2=NULL;
+	jint *lparg3=NULL;
+	jint *lparg4=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	COM_NATIVE_ENTER(env, that, VtblCall__II_3C_3I_3I_FUNC);
+#else
+	COM_NATIVE_ENTER(env, that, VtblCall__IJ_3C_3I_3I_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jchar *, jint *, jint *))(*(jintLong **)arg1)[arg0])(arg1, lparg2, lparg3, lparg4);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	COM_NATIVE_EXIT(env, that, VtblCall__II_3C_3I_3I_FUNC);
+#else
+	COM_NATIVE_EXIT(env, that, VtblCall__IJ_3C_3I_3I_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #ifndef NO_VtblCall__IJIIIIJ
 JNIEXPORT jint JNICALL COM_NATIVE(VtblCall__IJIIIIJ)
 	(JNIEnv *env, jclass that, jint arg0, jlong arg1, jint arg2, jint arg3, jint arg4, jint arg5, jlong arg6)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.h
index fb3fd91..5e98453 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,4 +15,11 @@
 #include "os_structs.h"
 #include "com_custom.h"
 
+#define COM_NATIVE_ENTER_TRY(env, that, func) \
+	COM_NATIVE_ENTER(env, that, func); \
+	NATIVE_TRY(env, that, func);
+#define COM_NATIVE_EXIT_CATCH(env, that, func) \
+	NATIVE_CATCH(env, that, func); \
+	COM_NATIVE_EXIT(env, that, func);
+
 #endif /* INC_com_H */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c
index 435385d..ede775f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,8 @@
 
 #ifdef NATIVE_STATS
 
-int COM_nativeFunctionCount = 175;
-int COM_nativeFunctionCallCount[175];
+int COM_nativeFunctionCount = 183;
+int COM_nativeFunctionCallCount[183];
 char * COM_nativeFunctionNames[] = {
 	"AccessibleChildren",
 	"AccessibleObjectFromWindow",
@@ -149,6 +149,7 @@ char * COM_nativeFunctionNames[] = {
 	"SysAllocString",
 	"SysFreeString",
 	"SysStringByteLen",
+	"SysStringLen",
 	"TYPEATTR_1sizeof",
 	"TYPEDESC_1sizeof",
 	"VARDESC_1sizeof",
@@ -207,6 +208,11 @@ char * COM_nativeFunctionNames[] = {
 	"VtblCall__IJIILorg_eclipse_swt_internal_win32_POINT_2I",
 #endif
 #ifndef JNI64
+	"VtblCall__IIIIZ",
+#else
+	"VtblCall__IJIIZ",
+#endif
+#ifndef JNI64
 	"VtblCall__IIII_3I",
 #else
 	"VtblCall__IJII_3I",
@@ -217,11 +223,6 @@ char * COM_nativeFunctionNames[] = {
 	"VtblCall__IJII_3J",
 #endif
 #ifndef JNI64
-	"VtblCall__IIIJ",
-#else
-	"VtblCall__IJIJ",
-#endif
-#ifndef JNI64
 	"VtblCall__IIIJ_3I",
 #else
 	"VtblCall__IJIJ_3I",
@@ -327,6 +328,16 @@ char * COM_nativeFunctionNames[] = {
 	"VtblCall__IJJJLorg_eclipse_swt_internal_win32_POINT_2I",
 #endif
 #ifndef JNI64
+	"VtblCall__IIJJZ",
+#else
+	"VtblCall__IJJJZ",
+#endif
+#ifndef JNI64
+	"VtblCall__IIJJ_3J",
+#else
+	"VtblCall__IJJJ_3J",
+#endif
+#ifndef JNI64
 	"VtblCall__IIJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3J",
 #else
 	"VtblCall__IJJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3J",
@@ -347,11 +358,6 @@ char * COM_nativeFunctionNames[] = {
 	"VtblCall__IJJZ",
 #endif
 #ifndef JNI64
-	"VtblCall__IIJ_3I",
-#else
-	"VtblCall__IJJ_3I",
-#endif
-#ifndef JNI64
 	"VtblCall__IIJ_3J",
 #else
 	"VtblCall__IJJ_3J",
@@ -452,11 +458,21 @@ char * COM_nativeFunctionNames[] = {
 	"VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2",
 #endif
 #ifndef JNI64
+	"VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2II",
+#else
+	"VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2II",
+#endif
+#ifndef JNI64
 	"VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ",
 #else
 	"VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2IZ",
 #endif
 #ifndef JNI64
+	"VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JJ",
+#else
+	"VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ",
+#endif
+#ifndef JNI64
 	"VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JZ",
 #else
 	"VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JZ",
@@ -482,6 +498,16 @@ char * COM_nativeFunctionNames[] = {
 	"VtblCall__IJZ",
 #endif
 #ifndef JNI64
+	"VtblCall__IIZI",
+#else
+	"VtblCall__IJZI",
+#endif
+#ifndef JNI64
+	"VtblCall__IIZJ",
+#else
+	"VtblCall__IJZJ",
+#endif
+#ifndef JNI64
 	"VtblCall__II_3CIIII_3I",
 #else
 	"VtblCall__IJ_3CIIII_3I",
@@ -497,6 +523,11 @@ char * COM_nativeFunctionNames[] = {
 	"VtblCall__IJ_3CIII_3J",
 #endif
 #ifndef JNI64
+	"VtblCall__II_3CI_3I",
+#else
+	"VtblCall__IJ_3CI_3I",
+#endif
+#ifndef JNI64
 	"VtblCall__II_3CJIII_3J",
 #else
 	"VtblCall__IJ_3CJIII_3J",
@@ -511,6 +542,11 @@ char * COM_nativeFunctionNames[] = {
 #else
 	"VtblCall__IJ_3C_3C",
 #endif
+#ifndef JNI64
+	"VtblCall__II_3C_3I_3I",
+#else
+	"VtblCall__IJ_3C_3I_3I",
+#endif
 	"VtblCall__IJIIIIJ",
 #ifndef JNI64
 	"VtblCall__IJJIIIII",
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h
index 0312728..c308d62 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_stats.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -157,6 +157,7 @@ typedef enum {
 	SysAllocString_FUNC,
 	SysFreeString_FUNC,
 	SysStringByteLen_FUNC,
+	SysStringLen_FUNC,
 	TYPEATTR_1sizeof_FUNC,
 	TYPEDESC_1sizeof_FUNC,
 	VARDESC_1sizeof_FUNC,
@@ -215,6 +216,11 @@ typedef enum {
 	VtblCall__IJIILorg_eclipse_swt_internal_win32_POINT_2I_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IIIIZ_FUNC,
+#else
+	VtblCall__IJIIZ_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__IIII_3I_FUNC,
 #else
 	VtblCall__IJII_3I_FUNC,
@@ -225,11 +231,6 @@ typedef enum {
 	VtblCall__IJII_3J_FUNC,
 #endif
 #ifndef JNI64
-	VtblCall__IIIJ_FUNC,
-#else
-	VtblCall__IJIJ_FUNC,
-#endif
-#ifndef JNI64
 	VtblCall__IIIJ_3I_FUNC,
 #else
 	VtblCall__IJIJ_3I_FUNC,
@@ -335,6 +336,16 @@ typedef enum {
 	VtblCall__IJJJLorg_eclipse_swt_internal_win32_POINT_2I_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IIJJZ_FUNC,
+#else
+	VtblCall__IJJJZ_FUNC,
+#endif
+#ifndef JNI64
+	VtblCall__IIJJ_3J_FUNC,
+#else
+	VtblCall__IJJJ_3J_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__IIJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3J_FUNC,
 #else
 	VtblCall__IJJLorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3J_FUNC,
@@ -355,11 +366,6 @@ typedef enum {
 	VtblCall__IJJZ_FUNC,
 #endif
 #ifndef JNI64
-	VtblCall__IIJ_3I_FUNC,
-#else
-	VtblCall__IJJ_3I_FUNC,
-#endif
-#ifndef JNI64
 	VtblCall__IIJ_3J_FUNC,
 #else
 	VtblCall__IJJ_3J_FUNC,
@@ -460,11 +466,21 @@ typedef enum {
 	VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2II_FUNC,
+#else
+	VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2II_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ_FUNC,
 #else
 	VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2IZ_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC,
+#else
+	VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JJ_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2JZ_FUNC,
 #else
 	VtblCall__IJLorg_eclipse_swt_internal_win32_RECT_2JZ_FUNC,
@@ -490,6 +506,16 @@ typedef enum {
 	VtblCall__IJZ_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IIZI_FUNC,
+#else
+	VtblCall__IJZI_FUNC,
+#endif
+#ifndef JNI64
+	VtblCall__IIZJ_FUNC,
+#else
+	VtblCall__IJZJ_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__II_3CIIII_3I_FUNC,
 #else
 	VtblCall__IJ_3CIIII_3I_FUNC,
@@ -505,6 +531,11 @@ typedef enum {
 	VtblCall__IJ_3CIII_3J_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__II_3CI_3I_FUNC,
+#else
+	VtblCall__IJ_3CI_3I_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__II_3CJIII_3J_FUNC,
 #else
 	VtblCall__IJ_3CJIII_3J_FUNC,
@@ -519,6 +550,11 @@ typedef enum {
 #else
 	VtblCall__IJ_3C_3C_FUNC,
 #endif
+#ifndef JNI64
+	VtblCall__II_3C_3I_3I_FUNC,
+#else
+	VtblCall__IJ_3C_3I_3I_FUNC,
+#endif
 	VtblCall__IJIIIIJ_FUNC,
 #ifndef JNI64
 	VtblCall__IJJIIIII_FUNC,
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.c
index 7f6dab7..78daed6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.h
index 099dee8..42ef159 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/com_structs.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/gdip_custom.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/gdip_custom.cpp
index 8d74873..8d23183 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/gdip_custom.cpp	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/gdip_custom.cpp	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(Graphics_1DrawLines)
 	}
 	rc = (jint)((Graphics *)arg0)->DrawLines((Pen *)arg1, points, (INT)arg3);
 fail:
-	if (lparg2 && points) delete points;
+	if (lparg2 && points) delete[] points;
 	if (arg2 && lparg2) env->ReleaseIntArrayElements(arg2, lparg2, JNI_ABORT);
 	Gdip_NATIVE_EXIT(env, that, Graphics_1DrawLines_FUNC);
 	return rc;
@@ -62,7 +62,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(Graphics_1DrawPolygon)
 	}
 	rc = (jint)((Graphics *)arg0)->DrawPolygon((Pen *)arg1, points, (INT)arg3);
 fail:
-	if (lparg2 && points) delete points;
+	if (lparg2 && points) delete[] points;
 	if (arg2 && lparg2) env->ReleaseIntArrayElements(arg2, lparg2, JNI_ABORT);
 	Gdip_NATIVE_EXIT(env, that, Graphics_1DrawPolygon_FUNC);
 	return rc;
@@ -88,7 +88,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(Graphics_1FillPolygon)
 	}
 	rc = (jint)((Graphics *)arg0)->FillPolygon((Brush *)arg1, points, (INT)arg3, (FillMode)arg4);
 fail:
-	if (lparg2 && points) delete points;
+	if (lparg2 && points) delete[] points;
 	if (arg2 && lparg2) env->ReleaseIntArrayElements(arg2, lparg2, JNI_ABORT);
 	Gdip_NATIVE_EXIT(env, that, Graphics_1FillPolygon_FUNC);
 	return rc;
@@ -114,7 +114,7 @@ fail:
 			lparg1[j] = points[i].X;
 			lparg1[j + 1] = points[i].Y;
 		}
-		delete points;
+		delete[] points;
 	}
 	if (arg1 && lparg1) env->ReleaseFloatArrayElements(arg1, lparg1, 0);
 	Gdip_NATIVE_EXIT(env, that, GraphicsPath_1GetPathPoints_FUNC);
@@ -151,7 +151,7 @@ fail:
 			lparg1[j] = points[i].X;
 			lparg1[j + 1] = points[i].Y;
 		}
-		delete points;
+		delete[] points;
 	}
 	if (arg1 && lparg1) env->ReleaseFloatArrayElements(arg1, lparg1, 0);
 	Gdip_NATIVE_EXIT(env, that, Matrix_1TransformPoints__I_3FI_FUNC);
@@ -179,7 +179,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(LinearGradientBrush_1SetInterpolationColors)
 	rc = (jint)((LinearGradientBrush *)arg0)->SetInterpolationColors(colors, (const REAL *)lparg2, arg3);
 fail:
 	if (lparg1 && colors) {
-		delete colors;
+		delete[] colors;
 	}
 	if (arg2 && lparg2) env->ReleaseFloatArrayElements(arg2, lparg2, 0);
 	if (arg1 && lparg1) env->ReleaseIntLongArrayElements(arg1, lparg1, 0);
@@ -208,7 +208,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(PathGradientBrush_1SetInterpolationColors)
 	rc = (jint)((PathGradientBrush *)arg0)->SetInterpolationColors(colors, (const REAL *)lparg2, arg3);
 fail:
 	if (lparg1 && colors) {
-		delete colors;
+		delete[] colors;
 	}
 	if (arg2 && lparg2) env->ReleaseFloatArrayElements(arg2, lparg2, 0);
 	if (arg1 && lparg1) env->ReleaseIntLongArrayElements(arg1, lparg1, 0);
@@ -237,7 +237,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(PathGradientBrush_1SetSurroundColors)
 	rc = (jint)((PathGradientBrush *)arg0)->SetSurroundColors((Color *)colors, (INT *)lparg2);
 fail:
 	if (lparg1 && lparg2 && colors) {
-		delete colors;
+		delete[] colors;
 	}	
 	if (arg2 && lparg2) env->ReleaseIntArrayElements(arg2, lparg2, 0);
 	if (arg1 && lparg1) env->ReleaseIntLongArrayElements(arg1, lparg1, 0);
@@ -268,7 +268,7 @@ JNIEXPORT jintLong JNICALL Gdip_NATIVE(GraphicsPath_1new___3I_3BII)
 	rc = (jintLong)new GraphicsPath(points, (BYTE *)lparg1, arg2, (FillMode)arg3);
 fail:
 	if (arg1 && lparg1) env->ReleaseByteArrayElements(arg1, lparg1, 0);
-	if (lparg0 && points) delete points;
+	if (lparg0 && points) delete[] points;
 	if (arg0 && lparg0) env->ReleaseIntArrayElements(arg0, lparg0, 0);
 	Gdip_NATIVE_EXIT(env, that, GraphicsPath_1new___3I_3BII_FUNC);
 	return rc;
@@ -305,7 +305,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(Graphics_1DrawDriverString__IIIII_3FII)(JNIEn
 	rc = (jint)((Graphics *)arg0)->DrawDriverString((const UINT16 *)arg1, arg2, (const Font *)arg3, (const Brush *)arg4, points, arg6, (const Matrix *)arg7);
 fail:
 	if (arg5 && lparg5) env->ReleaseFloatArrayElements(arg5, lparg5, 0);
-	if (lparg5 && points) delete points;
+	if (lparg5 && points) delete[] points;
 #ifdef JNI64
 	Gdip_NATIVE_EXIT(env, that, Graphics_1DrawDriverString__JJIJJ_3FIJ_FUNC);
 #else
@@ -339,7 +339,7 @@ JNIEXPORT jint JNICALL Gdip_NATIVE(Graphics_1MeasureDriverString)
 fail:
 	if (arg7 && lparg7) setRectFFields(env, arg7, lparg7);
 	if (arg4 && lparg4) env->ReleaseFloatArrayElements(arg4, lparg4, 0);
-	if (lparg4 && points) delete points;
+	if (lparg4 && points) delete[] points;
 	Gdip_NATIVE_EXIT(env, that, Graphics_1MeasureDriverString_FUNC);
 	return rc;
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak
index 45da377..aabec23 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/make_win32.mak	
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@ SWT_PREFIX  = swt
 WS_PREFIX   = win32
 SWT_VERSION = $(maj_ver)$(min_ver)
 SWT_LIB     = $(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
-SWT_LIBS    = comctl32.lib shell32.lib imm32.lib oleacc.lib usp10.lib wininet.lib
+SWT_LIBS    = comctl32.lib shell32.lib imm32.lib oleacc.lib usp10.lib wininet.lib Crypt32.lib
 SWT_OBJS    = swt.obj callback.obj c.obj c_stats.obj \
 	os.obj os_structs.obj os_custom.obj os_stats.obj \
 	com_structs.obj com.obj com_stats.obj com_custom.obj
@@ -37,6 +37,13 @@ AWT_LIB    = $(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
 AWT_LIBS   = "$(JAVA_HOME)\jre\bin\jawt.lib"
 AWT_OBJS   = swt_awt.obj
 
+WEBKIT_DIR 	  = S:\swt-builddir\webkit\WebKit-r72896
+WEBKIT_SUPPORT_DIR = S:\swt-builddir\webkit\WebKitSupportLibrary
+WEBKIT_PREFIX = swt-webkit
+WEBKIT_LIB    = $(WEBKIT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
+WEBKIT_LIBS   = $(WEBKIT_DIR)\lib\webkit.lib $(WEBKIT_SUPPORT_DIR)\win\lib\CFNetwork.lib $(WEBKIT_SUPPORT_DIR)\win\lib\CoreFoundation.lib
+WEBKIT_OBJS   = webkit_win32.obj webkit_win32_stats.obj webkit_win32_custom.obj webkit_win32_structs.obj
+
 WGL_PREFIX = swt-wgl
 WGL_LIB    = $(WGL_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
 WGL_LIBS   = opengl32.lib
@@ -62,6 +69,15 @@ MOZILLACFLAGS = -c \
 	-I"$(JAVA_HOME)/include/win32" \
 	-I"$(XULRUNNER_SDK)\include\mozilla-config.h" -I"$(XULRUNNER_SDK)\include"
 
+WEBKITCFLAGS = -c -O1\
+	-DSWT_VERSION=$(SWT_VERSION) \
+	$(NATIVE_STATS) \
+	-I"$(JAVA_HOME)\include" -I"$(JAVA_HOME)\include\win32" \
+	-I"$(WEBKIT_DIR)" \
+	-I"$(WEBKIT_DIR)\WebKit\win" \
+	-I"$(WEBKIT_DIR)\JavaScriptCore\ForwardingHeaders" \
+	-I"$(WEBKIT_SUPPORT_DIR)\win\include"
+
 #CFLAGS = $(cdebug) $(cflags) $(cvarsmt) $(CFLAGS) \
 CFLAGS = -O1 -DNDEBUG $(cflags) $(cvarsmt) $(CFLAGS) \
 	-DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS) -DUSE_ASSEMBLER \
@@ -70,6 +86,15 @@ RCFLAGS = $(rcflags) $(rcvars) $(RCFLAGS) -DSWT_FILE_VERSION=\"$(maj_ver).$(min_
 
 all: make_swt make_awt make_gdip make_wgl
 
+webkit_win32_custom.obj: webkit_win32_custom.cpp
+	cl $(WEBKITCFLAGS) webkit_win32_custom.cpp
+webkit_win32_stats.obj: webkit_win32_stats.cpp
+	cl $(WEBKITCFLAGS) webkit_win32_stats.cpp
+webkit_win32_structs.obj: webkit_win32_structs.cpp
+	cl $(WEBKITCFLAGS) webkit_win32_structs.cpp
+webkit_win32.obj: webkit_win32.cpp
+	cl $(WEBKITCFLAGS) webkit_win32.cpp
+	
 xpcom_custom.obj: xpcom_custom.cpp
 	cl $(MOZILLACFLAGS) xpcom_custom.cpp
 xpcom_stats.obj: xpcom_stats.cpp
@@ -118,6 +143,15 @@ make_awt: $(AWT_OBJS) swt_awt.res
 	link @templrf
 	del templrf
 
+make_webkit: $(WEBKIT_OBJS) swt_webkit.res
+	echo $(ldebug) $(dlllflags) >templrf
+	echo $(WEBKIT_LIBS) >>templrf
+	echo $(WEBKIT_OBJS) >>templrf
+	echo swt_webkit.res >>templrf
+	echo -out:$(WEBKIT_LIB) >>templrf
+	link @templrf
+	del templrf
+
 make_wgl: $(WGL_OBJS) swt_wgl.res
 	echo $(ldebug) $(dlllflags) $(guilibsmt) >templrf
 	echo $(WGL_LIBS) >>templrf
@@ -145,6 +179,9 @@ swt_gdip.res:
 swt_awt.res:
 	rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(AWT_LIB)\" -r -fo swt_awt.res swt_awt.rc
 
+swt_webkit.res:
+	rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(WEBKIT_LIB)\" -r -fo swt_webkit.res swt_webkit.rc
+
 swt_wgl.res:
 	rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(WGL_LIB)\" -r -fo swt_wgl.res swt_wgl.rc
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c
index fc48919..31e8d5c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -547,6 +547,54 @@ JNIEXPORT jint JNICALL OS_NATIVE(CANDIDATEFORM_1sizeof)
 }
 #endif
 
+#ifndef NO_CERT_1CONTEXT_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CERT_1CONTEXT_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CERT_1CONTEXT_1sizeof_FUNC);
+	rc = (jint)CERT_CONTEXT_sizeof();
+	OS_NATIVE_EXIT(env, that, CERT_1CONTEXT_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CERT_1INFO_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CERT_1INFO_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CERT_1INFO_1sizeof_FUNC);
+	rc = (jint)CERT_INFO_sizeof();
+	OS_NATIVE_EXIT(env, that, CERT_1INFO_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CERT_1NAME_1BLOB_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CERT_1NAME_1BLOB_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CERT_1NAME_1BLOB_1sizeof_FUNC);
+	rc = (jint)CERT_NAME_BLOB_sizeof();
+	OS_NATIVE_EXIT(env, that, CERT_1NAME_1BLOB_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CERT_1PUBLIC_1KEY_1INFO_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CERT_1PUBLIC_1KEY_1INFO_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CERT_1PUBLIC_1KEY_1INFO_1sizeof_FUNC);
+	rc = (jint)CERT_PUBLIC_KEY_INFO_sizeof();
+	OS_NATIVE_EXIT(env, that, CERT_1PUBLIC_1KEY_1INFO_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CHOOSECOLOR_1sizeof
 JNIEXPORT jint JNICALL OS_NATIVE(CHOOSECOLOR_1sizeof)
 	(JNIEnv *env, jclass that)
@@ -607,18 +655,100 @@ JNIEXPORT jint JNICALL OS_NATIVE(CREATESTRUCT_1sizeof)
 }
 #endif
 
-#ifndef NO_Call
-JNIEXPORT jint JNICALL OS_NATIVE(Call)
-	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
+#ifndef NO_CRYPT_1ALGORITHM_1IDENTIFIER_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CRYPT_1ALGORITHM_1IDENTIFIER_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CRYPT_1ALGORITHM_1IDENTIFIER_1sizeof_FUNC);
+	rc = (jint)CRYPT_ALGORITHM_IDENTIFIER_sizeof();
+	OS_NATIVE_EXIT(env, that, CRYPT_1ALGORITHM_1IDENTIFIER_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CRYPT_1BIT_1BLOB_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CRYPT_1BIT_1BLOB_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CRYPT_1BIT_1BLOB_1sizeof_FUNC);
+	rc = (jint)CRYPT_BIT_BLOB_sizeof();
+	OS_NATIVE_EXIT(env, that, CRYPT_1BIT_1BLOB_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CRYPT_1INTEGER_1BLOB_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CRYPT_1INTEGER_1BLOB_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CRYPT_1INTEGER_1BLOB_1sizeof_FUNC);
+	rc = (jint)CRYPT_INTEGER_BLOB_sizeof();
+	OS_NATIVE_EXIT(env, that, CRYPT_1INTEGER_1BLOB_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CRYPT_1OBJID_1BLOB_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CRYPT_1OBJID_1BLOB_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CRYPT_1OBJID_1BLOB_1sizeof_FUNC);
+	rc = (jint)CRYPT_OBJID_BLOB_sizeof();
+	OS_NATIVE_EXIT(env, that, CRYPT_1OBJID_1BLOB_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#if (!defined(NO_Call__I) && !defined(JNI64)) || (!defined(NO_Call__J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(Call__I)(JNIEnv *env, jclass that, jintLong arg0)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(Call__J)(JNIEnv *env, jclass that, jintLong arg0)
+#endif
+{
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, Call__I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, Call__J_FUNC);
+#endif
+	rc = (jint)((jint (*)())arg0)();
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, Call__I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, Call__J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_Call__ILorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2) && !defined(JNI64)) || (!defined(NO_Call__JLorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(Call__ILorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(Call__JLorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
+#endif
 {
 	DLLVERSIONINFO _arg1, *lparg1=NULL;
 	jint rc = 0;
-	OS_NATIVE_ENTER(env, that, Call_FUNC);
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, Call__ILorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, Call__JLorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2_FUNC);
+#endif
 	if (arg1) if ((lparg1 = getDLLVERSIONINFOFields(env, arg1, &_arg1)) == NULL) goto fail;
 	rc = (jint)((DLLGETVERSIONPROC)arg0)(lparg1);
 fail:
 	if (arg1 && lparg1) setDLLVERSIONINFOFields(env, arg1, lparg1);
-	OS_NATIVE_EXIT(env, that, Call_FUNC);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, Call__ILorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, Call__JLorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2_FUNC);
+#endif
 	return rc;
 }
 #endif
@@ -659,6 +789,44 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CallWindowProcW)
 }
 #endif
 
+#ifndef NO_CertNameToStrA
+JNIEXPORT jint JNICALL OS_NATIVE(CertNameToStrA)
+	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jbyteArray arg3, jint arg4)
+{
+	CERT_NAME_BLOB _arg1, *lparg1=NULL;
+	jbyte *lparg3=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CertNameToStrA_FUNC);
+	if (arg1) if ((lparg1 = getCERT_NAME_BLOBFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetByteArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jint)CertNameToStrA(arg0, (PCERT_NAME_BLOB)lparg1, arg2, (LPSTR)lparg3, arg4);
+fail:
+	if (arg3 && lparg3) (*env)->ReleaseByteArrayElements(env, arg3, lparg3, 0);
+	if (arg1 && lparg1) setCERT_NAME_BLOBFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, CertNameToStrA_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CertNameToStrW
+JNIEXPORT jint JNICALL OS_NATIVE(CertNameToStrW)
+	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jcharArray arg3, jint arg4)
+{
+	CERT_NAME_BLOB _arg1, *lparg1=NULL;
+	jchar *lparg3=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CertNameToStrW_FUNC);
+	if (arg1) if ((lparg1 = getCERT_NAME_BLOBFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetCharArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jint)CertNameToStrW(arg0, (PCERT_NAME_BLOB)lparg1, arg2, (LPWSTR)lparg3, arg4);
+fail:
+	if (arg3 && lparg3) (*env)->ReleaseCharArrayElements(env, arg3, lparg3, 0);
+	if (arg1 && lparg1) setCERT_NAME_BLOBFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, CertNameToStrW_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CharLowerA
 JNIEXPORT jintLong JNICALL OS_NATIVE(CharLowerA)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -823,6 +991,26 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CloseEnhMetaFile)
 }
 #endif
 
+#ifndef NO_CloseGestureInfoHandle
+JNIEXPORT jintLong JNICALL OS_NATIVE(CloseGestureInfoHandle)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CloseGestureInfoHandle_FUNC);
+/*
+	rc = (jintLong)CloseGestureInfoHandle((HGESTUREINFO)arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, CloseGestureInfoHandle)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(HGESTUREINFO))fp)((HGESTUREINFO)arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, CloseGestureInfoHandle_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CloseHandle
 JNIEXPORT jboolean JNICALL OS_NATIVE(CloseHandle)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -855,6 +1043,26 @@ JNIEXPORT jint JNICALL OS_NATIVE(CloseThemeData)
 }
 #endif
 
+#ifndef NO_CloseTouchInputHandle
+JNIEXPORT jboolean JNICALL OS_NATIVE(CloseTouchInputHandle)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, CloseTouchInputHandle_FUNC);
+/*
+	rc = (jboolean)CloseTouchInputHandle((HTOUCHINPUT)arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, CloseTouchInputHandle)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(HTOUCHINPUT))fp)((HTOUCHINPUT)arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, CloseTouchInputHandle_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_CoCreateInstance
 JNIEXPORT jint JNICALL OS_NATIVE(CoCreateInstance)
 	(JNIEnv *env, jclass that, jbyteArray arg0, jintLong arg1, jint arg2, jbyteArray arg3, jintLongArray arg4)
@@ -3099,6 +3307,49 @@ JNIEXPORT jint JNICALL OS_NATIVE(FILETIME_1sizeof)
 }
 #endif
 
+#ifndef NO_FLICK_1DATA_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(FLICK_1DATA_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FLICK_1DATA_1sizeof_FUNC);
+	rc = (jint)FLICK_DATA_sizeof();
+	OS_NATIVE_EXIT(env, that, FLICK_1DATA_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FLICK_1POINT_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(FLICK_1POINT_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FLICK_1POINT_1sizeof_FUNC);
+	rc = (jint)FLICK_POINT_sizeof();
+	OS_NATIVE_EXIT(env, that, FLICK_1POINT_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FileTimeToSystemTime
+JNIEXPORT jboolean JNICALL OS_NATIVE(FileTimeToSystemTime)
+	(JNIEnv *env, jclass that, jobject arg0, jobject arg1)
+{
+	FILETIME _arg0, *lparg0=NULL;
+	SYSTEMTIME _arg1, *lparg1=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, FileTimeToSystemTime_FUNC);
+	if (arg0) if ((lparg0 = getFILETIMEFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getSYSTEMTIMEFields(env, arg1, &_arg1)) == NULL) goto fail;
+	rc = (jboolean)FileTimeToSystemTime(lparg0, lparg1);
+fail:
+	if (arg1 && lparg1) setSYSTEMTIMEFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setFILETIMEFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, FileTimeToSystemTime_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_FillPath
 JNIEXPORT jboolean JNICALL OS_NATIVE(FillPath)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -3220,6 +3471,30 @@ JNIEXPORT jint JNICALL OS_NATIVE(GCP_1RESULTS_1sizeof)
 }
 #endif
 
+#ifndef NO_GESTURECONFIG_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(GESTURECONFIG_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GESTURECONFIG_1sizeof_FUNC);
+	rc = (jint)GESTURECONFIG_sizeof();
+	OS_NATIVE_EXIT(env, that, GESTURECONFIG_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GESTUREINFO_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(GESTUREINFO_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GESTUREINFO_1sizeof_FUNC);
+	rc = (jint)GESTUREINFO_sizeof();
+	OS_NATIVE_EXIT(env, that, GESTUREINFO_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_GET_1WHEEL_1DELTA_1WPARAM
 JNIEXPORT jint JNICALL OS_NATIVE(GET_1WHEEL_1DELTA_1WPARAM)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -3256,6 +3531,18 @@ JNIEXPORT jint JNICALL OS_NATIVE(GET_1Y_1LPARAM)
 }
 #endif
 
+#ifndef NO_GID_1ROTATE_1ANGLE_1FROM_1ARGUMENT
+JNIEXPORT jdouble JNICALL OS_NATIVE(GID_1ROTATE_1ANGLE_1FROM_1ARGUMENT)
+	(JNIEnv *env, jclass that, jlong arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, GID_1ROTATE_1ANGLE_1FROM_1ARGUMENT_FUNC);
+	rc = (jdouble)GID_ROTATE_ANGLE_FROM_ARGUMENT(arg0);
+	OS_NATIVE_EXIT(env, that, GID_1ROTATE_1ANGLE_1FROM_1ARGUMENT_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_GRADIENT_1RECT_1sizeof
 JNIEXPORT jint JNICALL OS_NATIVE(GRADIENT_1RECT_1sizeof)
 	(JNIEnv *env, jclass that)
@@ -4052,6 +4339,30 @@ fail:
 }
 #endif
 
+#ifndef NO_GetGestureInfo
+JNIEXPORT jboolean JNICALL OS_NATIVE(GetGestureInfo)
+	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1)
+{
+	GESTUREINFO _arg1, *lparg1=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, GetGestureInfo_FUNC);
+	if (arg1) if ((lparg1 = getGESTUREINFOFields(env, arg1, &_arg1)) == NULL) goto fail;
+/*
+	rc = (jboolean)GetGestureInfo((HGESTUREINFO)arg0, (PGESTUREINFO)lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, GetGestureInfo)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(HGESTUREINFO, PGESTUREINFO))fp)((HGESTUREINFO)arg0, (PGESTUREINFO)lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) setGESTUREINFOFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, GetGestureInfo_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_GetGlyphIndicesW
 JNIEXPORT jint JNICALL OS_NATIVE(GetGlyphIndicesW)
 	(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1, jint arg2, jshortArray arg3, jint arg4)
@@ -5969,6 +6280,26 @@ fail:
 }
 #endif
 
+#ifndef NO_GetTouchInputInfo
+JNIEXPORT jboolean JNICALL OS_NATIVE(GetTouchInputInfo)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jintLong arg2, jint arg3)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, GetTouchInputInfo_FUNC);
+/*
+	rc = (jboolean)GetTouchInputInfo((HTOUCHINPUT)arg0, (UINT)arg1, (PTOUCHINPUT)arg2, arg3);
+*/
+	{
+		LOAD_FUNCTION(fp, GetTouchInputInfo)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(HTOUCHINPUT, UINT, PTOUCHINPUT, jint))fp)((HTOUCHINPUT)arg0, (UINT)arg1, (PTOUCHINPUT)arg2, arg3);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, GetTouchInputInfo_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_GetUpdateRect
 JNIEXPORT jboolean JNICALL OS_NATIVE(GetUpdateRect)
 	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jboolean arg2)
@@ -7604,6 +7935,30 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(IsIconic)
 }
 #endif
 
+#ifndef NO_IsTouchWindow
+JNIEXPORT jboolean JNICALL OS_NATIVE(IsTouchWindow)
+	(JNIEnv *env, jclass that, jintLong arg0, jlongArray arg1)
+{
+	jlong *lparg1=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, IsTouchWindow_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetLongArrayElements(env, arg1, NULL)) == NULL) goto fail;
+/*
+	rc = (jboolean)IsTouchWindow((HWND)arg0, (PULONG)lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, IsTouchWindow)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(HWND, PULONG))fp)((HWND)arg0, (PULONG)lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseLongArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, IsTouchWindow_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_IsWindowEnabled
 JNIEXPORT jboolean JNICALL OS_NATIVE(IsWindowEnabled)
 	(JNIEnv *env, jclass that, jintLong arg0)
@@ -7676,6 +8031,18 @@ JNIEXPORT jint JNICALL OS_NATIVE(LITEM_1sizeof)
 }
 #endif
 
+#ifndef NO_LODWORD
+JNIEXPORT jint JNICALL OS_NATIVE(LODWORD)
+	(JNIEnv *env, jclass that, jlong arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, LODWORD_FUNC);
+	rc = (jint)LODWORD(arg0);
+	OS_NATIVE_EXIT(env, that, LODWORD_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_LOGBRUSH_1sizeof
 JNIEXPORT jint JNICALL OS_NATIVE(LOGBRUSH_1sizeof)
 	(JNIEnv *env, jclass that)
@@ -8553,6 +8920,30 @@ fail:
 }
 #endif
 
+#if (!defined(NO_MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I) && !defined(JNI64)) || (!defined(NO_MoveMemory__JLorg_eclipse_swt_internal_win32_GESTURECONFIG_2I) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jint arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__JLorg_eclipse_swt_internal_win32_GESTURECONFIG_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jint arg2)
+#endif
+{
+	GESTURECONFIG _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, MoveMemory__JLorg_eclipse_swt_internal_win32_GESTURECONFIG_2I_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getGESTURECONFIGFields(env, arg1, &_arg1)) == NULL) goto fail;
+	MoveMemory((PVOID)arg0, (CONST VOID *)lparg1, arg2);
+fail:
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, MoveMemory__JLorg_eclipse_swt_internal_win32_GESTURECONFIG_2I_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I) && !defined(JNI64)) || (!defined(NO_MoveMemory__JLorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jint arg2)
@@ -9411,64 +9802,114 @@ fail:
 }
 #endif
 
-#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI) && defined(JNI64))
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2JI) && defined(JNI64))
 #ifndef JNI64
-JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
 #else
-JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
 #endif
 {
-	DEVMODEA _arg0, *lparg0=NULL;
+	CERT_CONTEXT _arg0, *lparg0=NULL;
 #ifndef JNI64
-	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II_FUNC);
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2II_FUNC);
 #else
-	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI_FUNC);
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2JI_FUNC);
 #endif
 	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
 	MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
 fail:
-	if (arg0 && lparg0) setDEVMODEAFields(env, arg0, lparg0);
+	if (arg0 && lparg0) setCERT_CONTEXTFields(env, arg0, lparg0);
 #ifndef JNI64
-	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II_FUNC);
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2II_FUNC);
 #else
-	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI_FUNC);
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2JI_FUNC);
 #endif
 }
 #endif
 
-#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI) && defined(JNI64))
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2JI) && defined(JNI64))
 #ifndef JNI64
-JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
 #else
-JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
 #endif
 {
-	DEVMODEW _arg0, *lparg0=NULL;
+	CERT_INFO _arg0, *lparg0=NULL;
 #ifndef JNI64
-	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II_FUNC);
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2II_FUNC);
 #else
-	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI_FUNC);
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2JI_FUNC);
 #endif
 	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
 	MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
 fail:
-	if (arg0 && lparg0) setDEVMODEWFields(env, arg0, lparg0);
+	if (arg0 && lparg0) setCERT_INFOFields(env, arg0, lparg0);
 #ifndef JNI64
-	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II_FUNC);
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2II_FUNC);
 #else
-	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI_FUNC);
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2JI_FUNC);
 #endif
 }
 #endif
 
-#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2JI) && defined(JNI64))
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI) && defined(JNI64))
 #ifndef JNI64
-JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
 #else
-JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
 #endif
 {
-	DOCHOSTUIINFO _arg0, *lparg0=NULL;
+	DEVMODEA _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setDEVMODEAFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+#endif
+{
+	DEVMODEW _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setDEVMODEWFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEW_2JI_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2JI) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+#endif
+{
+	DOCHOSTUIINFO _arg0, *lparg0=NULL;
 #ifndef JNI64
 	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_DOCHOSTUIINFO_2II_FUNC);
 #else
@@ -9586,6 +10027,62 @@ fail:
 }
 #endif
 
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3JI) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3II)(JNIEnv *env, jclass that, jobject arg0, jintLongArray arg1, jint arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3JI)(JNIEnv *env, jclass that, jobject arg0, jintLongArray arg1, jint arg2)
+#endif
+{
+	FLICK_DATA _arg0, *lparg0=NULL;
+	jintLong *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3JI_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	if (arg1) if ((lparg1 = (*env)->GetIntLongArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	MoveMemory((PVOID)lparg0, (CONST VOID *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntLongArrayElements(env, arg1, lparg1, JNI_ABORT);
+	if (arg0 && lparg0) setFLICK_DATAFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3JI_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3JI) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3II)(JNIEnv *env, jclass that, jobject arg0, jintLongArray arg1, jint arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3JI)(JNIEnv *env, jclass that, jobject arg0, jintLongArray arg1, jint arg2)
+#endif
+{
+	FLICK_POINT _arg0, *lparg0=NULL;
+	jintLong *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3JI_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	if (arg1) if ((lparg1 = (*env)->GetIntLongArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	MoveMemory((PVOID)lparg0, (CONST VOID *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntLongArrayElements(env, arg1, lparg1, JNI_ABORT);
+	if (arg0 && lparg0) setFLICK_POINTFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3JI_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2JI) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
@@ -10595,6 +11092,31 @@ fail:
 }
 #endif
 
+#if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2JI) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2JI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
+#endif
+{
+	TOUCHINPUT _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2JI_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setTOUCHINPUTFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2JI_FUNC);
+#endif
+}
+#endif
+
 #if (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II) && !defined(JNI64)) || (!defined(NO_MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2JI) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT void JNICALL OS_NATIVE(MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jint arg2)
@@ -12112,6 +12634,88 @@ JNIEXPORT jint JNICALL OS_NATIVE(RegCloseKey)
 }
 #endif
 
+#ifndef NO_RegCreateKeyExA
+JNIEXPORT jint JNICALL OS_NATIVE(RegCreateKeyExA)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jint arg2, jbyteArray arg3, jint arg4, jint arg5, jintLong arg6, jintLongArray arg7, jintLongArray arg8)
+{
+	jbyte *lparg1=NULL;
+	jbyte *lparg3=NULL;
+	jintLong *lparg7=NULL;
+	jintLong *lparg8=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegCreateKeyExA_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetByteArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	if (arg7) if ((lparg7 = (*env)->GetIntLongArrayElements(env, arg7, NULL)) == NULL) goto fail;
+	if (arg8) if ((lparg8 = (*env)->GetIntLongArrayElements(env, arg8, NULL)) == NULL) goto fail;
+	rc = (jint)RegCreateKeyExA((HKEY)arg0, (LPSTR)lparg1, arg2, (LPTSTR)lparg3, arg4, arg5, (LPSECURITY_ATTRIBUTES)arg6, (PHKEY)lparg7, (LPDWORD)lparg8);
+fail:
+	if (arg8 && lparg8) (*env)->ReleaseIntLongArrayElements(env, arg8, lparg8, 0);
+	if (arg7 && lparg7) (*env)->ReleaseIntLongArrayElements(env, arg7, lparg7, 0);
+	if (arg3 && lparg3) (*env)->ReleaseByteArrayElements(env, arg3, lparg3, 0);
+	if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, RegCreateKeyExA_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RegCreateKeyExW
+JNIEXPORT jint JNICALL OS_NATIVE(RegCreateKeyExW)
+	(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1, jint arg2, jcharArray arg3, jint arg4, jint arg5, jintLong arg6, jintLongArray arg7, jintLongArray arg8)
+{
+	jchar *lparg1=NULL;
+	jchar *lparg3=NULL;
+	jintLong *lparg7=NULL;
+	jintLong *lparg8=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegCreateKeyExW_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetCharArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetCharArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	if (arg7) if ((lparg7 = (*env)->GetIntLongArrayElements(env, arg7, NULL)) == NULL) goto fail;
+	if (arg8) if ((lparg8 = (*env)->GetIntLongArrayElements(env, arg8, NULL)) == NULL) goto fail;
+	rc = (jint)RegCreateKeyExW((HKEY)arg0, (LPWSTR)lparg1, arg2, (LPWSTR)lparg3, arg4, arg5, (LPSECURITY_ATTRIBUTES)arg6, (PHKEY)lparg7, (LPDWORD)lparg8);
+fail:
+	if (arg8 && lparg8) (*env)->ReleaseIntLongArrayElements(env, arg8, lparg8, 0);
+	if (arg7 && lparg7) (*env)->ReleaseIntLongArrayElements(env, arg7, lparg7, 0);
+	if (arg3 && lparg3) (*env)->ReleaseCharArrayElements(env, arg3, lparg3, 0);
+	if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, RegCreateKeyExW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RegDeleteValueA
+JNIEXPORT jint JNICALL OS_NATIVE(RegDeleteValueA)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1)
+{
+	jbyte *lparg1=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegDeleteValueA_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	rc = (jint)RegDeleteValueA((HKEY)arg0, (LPSTR)lparg1);
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, RegDeleteValueA_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RegDeleteValueW
+JNIEXPORT jint JNICALL OS_NATIVE(RegDeleteValueW)
+	(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1)
+{
+	jchar *lparg1=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegDeleteValueW_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetCharArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	rc = (jint)RegDeleteValueW((HKEY)arg0, (LPWSTR)lparg1);
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, RegDeleteValueW_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_RegEnumKeyExA
 JNIEXPORT jint JNICALL OS_NATIVE(RegEnumKeyExA)
 	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jbyteArray arg2, jintArray arg3, jintArray arg4, jbyteArray arg5, jintArray arg6, jobject arg7)
@@ -12430,6 +13034,44 @@ fail:
 }
 #endif
 
+#ifndef NO_RegSetValueExA
+JNIEXPORT jint JNICALL OS_NATIVE(RegSetValueExA)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jint arg2, jint arg3, jintArray arg4, jint arg5)
+{
+	jbyte *lparg1=NULL;
+	jint *lparg4=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegSetValueExA_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jint)RegSetValueExA((HKEY)arg0, (LPSTR)lparg1, arg2, arg3, (const BYTE*)lparg4, arg5);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+	if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, RegSetValueExA_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RegSetValueExW
+JNIEXPORT jint JNICALL OS_NATIVE(RegSetValueExW)
+	(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1, jint arg2, jint arg3, jintArray arg4, jint arg5)
+{
+	jchar *lparg1=NULL;
+	jint *lparg4=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegSetValueExW_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetCharArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jint)RegSetValueExW((HKEY)arg0, (LPWSTR)lparg1, arg2, arg3, (const BYTE*)lparg4, arg5);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+	if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, RegSetValueExW_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_RegisterClassA
 JNIEXPORT jint JNICALL OS_NATIVE(RegisterClassA)
 	(JNIEnv *env, jclass that, jobject arg0)
@@ -12494,6 +13136,26 @@ fail:
 }
 #endif
 
+#ifndef NO_RegisterTouchWindow
+JNIEXPORT jboolean JNICALL OS_NATIVE(RegisterTouchWindow)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, RegisterTouchWindow_FUNC);
+/*
+	rc = (jboolean)RegisterTouchWindow((HWND)arg0, (ULONG)arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, RegisterTouchWindow)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(HWND, ULONG))fp)((HWND)arg0, (ULONG)arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, RegisterTouchWindow_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_RegisterWindowMessageA
 JNIEXPORT jint JNICALL OS_NATIVE(RegisterWindowMessageA)
 	(JNIEnv *env, jclass that, jbyteArray arg0)
@@ -15614,6 +16276,54 @@ fail:
 }
 #endif
 
+#ifndef NO_SetDllDirectoryA
+JNIEXPORT jboolean JNICALL OS_NATIVE(SetDllDirectoryA)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, SetDllDirectoryA_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+/*
+	rc = (jboolean)SetDllDirectoryA((LPSTR)lparg0);
+*/
+	{
+		LOAD_FUNCTION(fp, SetDllDirectoryA)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(LPSTR))fp)((LPSTR)lparg0);
+		}
+	}
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, SetDllDirectoryA_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SetDllDirectoryW
+JNIEXPORT jboolean JNICALL OS_NATIVE(SetDllDirectoryW)
+	(JNIEnv *env, jclass that, jcharArray arg0)
+{
+	jchar *lparg0=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, SetDllDirectoryW_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetCharArrayElements(env, arg0, NULL)) == NULL) goto fail;
+/*
+	rc = (jboolean)SetDllDirectoryW((LPWSTR)lparg0);
+*/
+	{
+		LOAD_FUNCTION(fp, SetDllDirectoryW)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(LPWSTR))fp)((LPWSTR)lparg0);
+		}
+	}
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseCharArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, SetDllDirectoryW_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_SetErrorMode
 JNIEXPORT jint JNICALL OS_NATIVE(SetErrorMode)
 	(JNIEnv *env, jclass that, jint arg0)
@@ -15650,6 +16360,26 @@ JNIEXPORT jboolean JNICALL OS_NATIVE(SetForegroundWindow)
 }
 #endif
 
+#ifndef NO_SetGestureConfig
+JNIEXPORT jboolean JNICALL OS_NATIVE(SetGestureConfig)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jint arg2, jintLong arg3, jint arg4)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, SetGestureConfig_FUNC);
+/*
+	rc = (jboolean)SetGestureConfig((HWND)arg0, arg1, arg2, (PGESTURECONFIG)arg3, arg4);
+*/
+	{
+		LOAD_FUNCTION(fp, SetGestureConfig)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(HWND, jint, jint, PGESTURECONFIG, jint))fp)((HWND)arg0, arg1, arg2, (PGESTURECONFIG)arg3, arg4);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, SetGestureConfig_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_SetGraphicsMode
 JNIEXPORT jint JNICALL OS_NATIVE(SetGraphicsMode)
 	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
@@ -16727,6 +17457,30 @@ JNIEXPORT jint JNICALL OS_NATIVE(TOOLINFO_1sizeof)
 }
 #endif
 
+#ifndef NO_TOUCHINPUT_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(TOUCHINPUT_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TOUCHINPUT_1sizeof_FUNC);
+	rc = (jint)TOUCHINPUT_sizeof();
+	OS_NATIVE_EXIT(env, that, TOUCHINPUT_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TOUCH_1COORD_1TO_1PIXEL
+JNIEXPORT jlong JNICALL OS_NATIVE(TOUCH_1COORD_1TO_1PIXEL)
+	(JNIEnv *env, jclass that, jlong arg0)
+{
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, TOUCH_1COORD_1TO_1PIXEL_FUNC);
+	rc = (jlong)TOUCH_COORD_TO_PIXEL(arg0);
+	OS_NATIVE_EXIT(env, that, TOUCH_1COORD_1TO_1PIXEL_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_TRACKMOUSEEVENT_1sizeof
 JNIEXPORT jint JNICALL OS_NATIVE(TRACKMOUSEEVENT_1sizeof)
 	(JNIEnv *env, jclass that)
@@ -17077,6 +17831,26 @@ fail:
 }
 #endif
 
+#ifndef NO_UnregisterTouchWindow
+JNIEXPORT jboolean JNICALL OS_NATIVE(UnregisterTouchWindow)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UnregisterTouchWindow_FUNC);
+/*
+	rc = (jboolean)UnregisterTouchWindow(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, UnregisterTouchWindow)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(jintLong))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, UnregisterTouchWindow_FUNC);
+	return rc;
+}
+#endif
+
 #ifndef NO_UpdateLayeredWindow
 JNIEXPORT jboolean JNICALL OS_NATIVE(UpdateLayeredWindow)
 	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4, jobject arg5, jint arg6, jobject arg7, jint arg8)
@@ -17171,15 +17945,15 @@ JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJ)(JNIEnv *env, jclass that, jint ar
 {
 	jint rc = 0;
 #ifndef JNI64
-	OS_NATIVE_ENTER(env, that, VtblCall__II_FUNC);
+	OS_NATIVE_ENTER_TRY(env, that, VtblCall__II_FUNC);
 #else
-	OS_NATIVE_ENTER(env, that, VtblCall__IJ_FUNC);
+	OS_NATIVE_ENTER_TRY(env, that, VtblCall__IJ_FUNC);
 #endif
 	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong))(*(jintLong **)arg1)[arg0])(arg1);
 #ifndef JNI64
-	OS_NATIVE_EXIT(env, that, VtblCall__II_FUNC);
+	OS_NATIVE_EXIT_CATCH(env, that, VtblCall__II_FUNC);
 #else
-	OS_NATIVE_EXIT(env, that, VtblCall__IJ_FUNC);
+	OS_NATIVE_EXIT_CATCH(env, that, VtblCall__IJ_FUNC);
 #endif
 	return rc;
 }
@@ -17281,11 +18055,11 @@ fail:
 }
 #endif
 
-#if (!defined(NO_VtblCall__IIII_3C_3CI) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJI_3C_3CJ) && defined(JNI64))
+#if (!defined(NO_VtblCall__IIII_3C_3CI) && !defined(JNI64)) || (!defined(NO_VtblCall__IJII_3C_3CI) && defined(JNI64))
 #ifndef JNI64
-JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIII_3C_3CI)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jintLong arg2, jint arg3, jcharArray arg4, jcharArray arg5, jintLong arg6)
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIII_3C_3CI)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jint arg3, jcharArray arg4, jcharArray arg5, jint arg6)
 #else
-JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJI_3C_3CJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jintLong arg2, jint arg3, jcharArray arg4, jcharArray arg5, jintLong arg6)
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJII_3C_3CI)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jint arg3, jcharArray arg4, jcharArray arg5, jint arg6)
 #endif
 {
 	jchar *lparg4=NULL;
@@ -17294,18 +18068,41 @@ JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJI_3C_3CJ)(JNIEnv *env, jclass that
 #ifndef JNI64
 	OS_NATIVE_ENTER(env, that, VtblCall__IIII_3C_3CI_FUNC);
 #else
-	OS_NATIVE_ENTER(env, that, VtblCall__IJJI_3C_3CJ_FUNC);
+	OS_NATIVE_ENTER(env, that, VtblCall__IJII_3C_3CI_FUNC);
 #endif
 	if (arg4) if ((lparg4 = (*env)->GetCharArrayElements(env, arg4, NULL)) == NULL) goto fail;
 	if (arg5) if ((lparg5 = (*env)->GetCharArrayElements(env, arg5, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jint, jchar *, jchar *, jintLong))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, lparg4, lparg5, arg6);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jint, jint, jchar *, jchar *, jint))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, lparg4, lparg5, arg6);
 fail:
 	if (arg5 && lparg5) (*env)->ReleaseCharArrayElements(env, arg5, lparg5, 0);
 	if (arg4 && lparg4) (*env)->ReleaseCharArrayElements(env, arg4, lparg4, 0);
 #ifndef JNI64
 	OS_NATIVE_EXIT(env, that, VtblCall__IIII_3C_3CI_FUNC);
 #else
-	OS_NATIVE_EXIT(env, that, VtblCall__IJJI_3C_3CJ_FUNC);
+	OS_NATIVE_EXIT(env, that, VtblCall__IJII_3C_3CI_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_VtblCall__IIIJ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJIJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIIJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jlong arg3)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJIJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jlong arg3)
+#endif
+{
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__IIIJ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJIJ_FUNC);
+#endif
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jint, jlong))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__IIIJ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJIJ_FUNC);
 #endif
 	return rc;
 }
@@ -17491,6 +18288,33 @@ JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJI)(JNIEnv *env, jclass that, jint
 }
 #endif
 
+#if (!defined(NO_VtblCall__IIJII_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJII_3I) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJII_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jint arg3, jint arg4, jintArray arg5)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJII_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jint arg3, jint arg4, jintArray arg5)
+#endif
+{
+	jint *lparg5=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__IIJII_3I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJJII_3I_FUNC);
+#endif
+	if (arg5) if ((lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jint, jint, jint *))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, arg4, lparg5);
+fail:
+	if (arg5 && lparg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__IIJII_3I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJJII_3I_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__IIJII_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJII_3J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJII_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jint arg3, jint arg4, jlongArray arg5)
@@ -17518,6 +18342,59 @@ fail:
 }
 #endif
 
+#if (!defined(NO_VtblCall__IIJI_3C_3CJ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJI_3C_3CJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJI_3C_3CJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jint arg3, jcharArray arg4, jcharArray arg5, jlong arg6)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJI_3C_3CJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jint arg3, jcharArray arg4, jcharArray arg5, jlong arg6)
+#endif
+{
+	jchar *lparg4=NULL;
+	jchar *lparg5=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__IIJI_3C_3CJ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJJI_3C_3CJ_FUNC);
+#endif
+	if (arg4) if ((lparg4 = (*env)->GetCharArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	if (arg5) if ((lparg5 = (*env)->GetCharArrayElements(env, arg5, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jint, jchar *, jchar *, jlong))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, lparg4, lparg5, arg6);
+fail:
+	if (arg5 && lparg5) (*env)->ReleaseCharArrayElements(env, arg5, lparg5, 0);
+	if (arg4 && lparg4) (*env)->ReleaseCharArrayElements(env, arg4, lparg4, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__IIJI_3C_3CJ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJJI_3C_3CJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_VtblCall__IIJJ) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlong arg3)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJJ)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlong arg3)
+#endif
+{
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__IIJJ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJJJ_FUNC);
+#endif
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jlong))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__IIJJ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__IIJJI_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJJI_3J) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJJI_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlong arg3, jint arg4, jlongArray arg5)
@@ -17568,6 +18445,93 @@ JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJJJ)(JNIEnv *env, jclass that, jint
 }
 #endif
 
+#if (!defined(NO_VtblCall__IIJ_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJ_3I) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJ_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jintArray arg3)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJ_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jintArray arg3)
+#endif
+{
+	jint *lparg3=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__IIJ_3I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJJ_3I_FUNC);
+#endif
+	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jint *))(*(jintLong **)arg1)[arg0])(arg1, arg2, lparg3);
+fail:
+	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__IIJ_3I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJJ_3I_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_VtblCall__IIJ_3I_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJ_3I_3I) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJ_3I_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jintArray arg3, jintArray arg4)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJ_3I_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jintArray arg3, jintArray arg4)
+#endif
+{
+	jint *lparg3=NULL;
+	jint *lparg4=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__IIJ_3I_3I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJJ_3I_3I_FUNC);
+#endif
+	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jint *, jint *))(*(jintLong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__IIJ_3I_3I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJJ_3I_3I_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_VtblCall__IIJ_3J_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJJ_3J_3J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IIJ_3J_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlongArray arg3, jlongArray arg4)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJJ_3J_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jlong arg2, jlongArray arg3, jlongArray arg4)
+#endif
+{
+	jlong *lparg3=NULL;
+	jlong *lparg4=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__IIJ_3J_3J_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJJ_3J_3J_FUNC);
+#endif
+	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetLongArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jlong, jlong *, jlong *))(*(jintLong **)arg1)[arg0])(arg1, arg2, lparg3, lparg4);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseLongArrayElements(env, arg4, lparg4, 0);
+	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__IIJ_3J_3J_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJJ_3J_3J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
 #if (!defined(NO_VtblCall__IILorg_eclipse_swt_internal_win32_PROPERTYKEY_2I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJLorg_eclipse_swt_internal_win32_PROPERTYKEY_2I) && defined(JNI64))
 #ifndef JNI64
 JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IILorg_eclipse_swt_internal_win32_PROPERTYKEY_2I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jobject arg2, jint arg3)
@@ -17682,30 +18646,60 @@ fail:
 }
 #endif
 
-#if (!defined(NO_VtblCall__II_3B_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJ_3B_3J) && defined(JNI64))
+#if (!defined(NO_VtblCall__II_3B_3I) && !defined(JNI64)) || (!defined(NO_VtblCall__IJ_3B_3I) && defined(JNI64))
 #ifndef JNI64
-JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__II_3B_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jbyteArray arg2, jintLongArray arg3)
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__II_3B_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jbyteArray arg2, jintArray arg3)
 #else
-JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJ_3B_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jbyteArray arg2, jintLongArray arg3)
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJ_3B_3I)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jbyteArray arg2, jintArray arg3)
 #endif
 {
 	jbyte *lparg2=NULL;
-	jintLong *lparg3=NULL;
+	jint *lparg3=NULL;
 	jint rc = 0;
 #ifndef JNI64
 	OS_NATIVE_ENTER(env, that, VtblCall__II_3B_3I_FUNC);
 #else
-	OS_NATIVE_ENTER(env, that, VtblCall__IJ_3B_3J_FUNC);
+	OS_NATIVE_ENTER(env, that, VtblCall__IJ_3B_3I_FUNC);
 #endif
 	if (arg2) if ((lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	if (arg3) if ((lparg3 = (*env)->GetIntLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jbyte *, jintLong *))(*(jintLong **)arg1)[arg0])(arg1, lparg2, lparg3);
+	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jbyte *, jint *))(*(jintLong **)arg1)[arg0])(arg1, lparg2, lparg3);
 fail:
-	if (arg3 && lparg3) (*env)->ReleaseIntLongArrayElements(env, arg3, lparg3, 0);
+	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
 	if (arg2 && lparg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
 #ifndef JNI64
 	OS_NATIVE_EXIT(env, that, VtblCall__II_3B_3I_FUNC);
 #else
+	OS_NATIVE_EXIT(env, that, VtblCall__IJ_3B_3I_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_VtblCall__II_3B_3J) && !defined(JNI64)) || (!defined(NO_VtblCall__IJ_3B_3J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__II_3B_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jbyteArray arg2, jlongArray arg3)
+#else
+JNIEXPORT jint JNICALL OS_NATIVE(VtblCall__IJ_3B_3J)(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jbyteArray arg2, jlongArray arg3)
+#endif
+{
+	jbyte *lparg2=NULL;
+	jlong *lparg3=NULL;
+	jint rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, VtblCall__II_3B_3J_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, VtblCall__IJ_3B_3J_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetLongArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jbyte *, jlong *))(*(jintLong **)arg1)[arg0])(arg1, lparg2, lparg3);
+fail:
+	if (arg3 && lparg3) (*env)->ReleaseLongArrayElements(env, arg3, lparg3, 0);
+	if (arg2 && lparg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, VtblCall__II_3B_3J_FUNC);
+#else
 	OS_NATIVE_EXIT(env, that, VtblCall__IJ_3B_3J_FUNC);
 #endif
 	return rc;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.h
index 36ed3f0..1eb0648 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,6 +57,14 @@
 #define NO_BP_PAINTPARAMS
 #define NO_BROWSEINFO
 #define NO_BUTTON_IMAGELIST
+#define NO_CERT_CONTEXT
+#define NO_CERT_INFO
+#define NO_CERT_NAME_BLOB
+#define NO_CERT_PUBLIC_KEY_INFO
+#define NO_CRYPT_ALGORITHM_IDENTIFIER
+#define NO_CRYPT_BIT_BLOB
+#define NO_CRYPT_INTEGER_BLOB
+#define NO_CRYPT_OBJID_BLOB
 #define NO_CHOOSEFONT
 #define NO_COMBOBOXINFO
 #define NO_DEVMODE
@@ -68,6 +76,11 @@
 #define NO_EMREXTCREATEFONTINDIRECTW
 #define NO_EXTLOGFONTW
 #define NO_EXTLOGPEN
+#define NO_FLICK_DATA
+#define NO_FLICK_POINT
+#define NO_GESTURECONFIG
+#define NO_GESTUREINFO
+#define NO_GESTURENOTIFYSTRUCT
 #define NO_GCP_RESULTS
 #define NO_GRADIENT_RECT
 #define NO_GUITHREADINFO
@@ -113,6 +126,7 @@
 #define NO_TF_DA_COLOR
 #define NO_TF_DISPLAYATTRIBUTE
 #define NO_TOOLINFO
+#define NO_TOUCHINPUT
 #define NO_TRACKMOUSEEVENT
 #define NO_TRIVERTEX
 #define NO_TVITEMEX
@@ -173,13 +187,17 @@
 #define NO_BufferedPaintUnInit
 #define NO_CallNextHookEx
 #define NO_CallWindowProcA
+#define NO_CertNameToStrA
+#define NO_CertNameToStrW
 #define NO_CharLowerA
 #define NO_CharUpperA
 #define NO_ChooseColorA
 #define NO_ChooseFontA
 #define NO_ChooseFontW
 #define NO_CloseEnhMetaFile
+#define NO_CloseGestureInfoHandle
 #define NO_CloseThemeData
+#define NO_CloseTouchInputHandle
 #define NO_CoCreateInstance
 #define NO_CoInternetIsFeatureEnabled
 #define NO_CoInternetSetFeatureEnabled
@@ -245,8 +263,13 @@
 #define NO_ExtractIconExA
 #define NO_FillPath
 #define NO_FindWindowA
+#define NO_FLICK_1DATA_1sizeof
+#define NO_FLICK_1POINT_1sizeof
 #define NO_FormatMessageA
 #define NO_GdiSetBatchLimit
+#define NO_GESTURECONFIG_1sizeof
+#define NO_GESTUREINFO_1sizeof
+#define NO_GID_1ROTATE_1ANGLE_1FROM_1ARGUMENT
 #define NO_GetCharABCWidthsA
 #define NO_GetCharABCWidthsW
 #define NO_GetCharWidthA
@@ -261,6 +284,7 @@
 #define NO_GetDIBColorTable
 #define NO_GetDIBits
 #define NO_GetFontLanguageInfo
+#define NO_GetGestureInfo
 #define NO_GetGlyphIndicesW
 #define NO_GetGraphicsMode
 #define NO_GetGUIThreadInfo
@@ -328,6 +352,7 @@
 #define NO_GetThemeRect
 #define NO_GetThemeSysSize
 #define NO_GetTimeFormatA
+#define NO_GetTouchInputInfo
 #define NO_GetVersionExA__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOA_2
 #define NO_GetVersionExA__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOEXA_2
 #define NO_GetVersionExW__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOEXW_2
@@ -364,6 +389,7 @@
 #define NO_IsAppThemed
 #define NO_IsHungAppWindow
 #define NO_IsIconic
+#define NO_IsTouchWindow
 #define NO_IsZoomed
 #define NO_LineTo
 #define NO_LoadBitmapA
@@ -374,22 +400,29 @@
 #define NO_LoadLibraryA
 #define NO_LoadStringA
 #define NO_LockWindowUpdate
+#define NO_LODWORD
 #define NO_LPtoDP
 #define NO_MapVirtualKeyA
 #define NO_MCIWndRegisterClass
 #define NO_MessageBoxA
 #define NO_ModifyWorldTransform
 #define NO_MonitorFromWindow
+#define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2II
+#define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2II
 #define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_DEVMODEA_2I
 #define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_DEVMODEW_2I
 #define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_DROPFILES_2I
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_EMREXTCREATEFONTINDIRECTW_2II
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_EMR_2II
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_EXTLOGPEN_2II
+#define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3II
+#define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3II
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHEVRON_2II
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHILDSIZE_2II
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_HELPINFO_2II
 #define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_TRIVERTEX_2I
+#define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I
+#define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I
 #define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLINK_2II
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTBHOTITEM_2II
@@ -408,6 +441,7 @@
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_SHDRAGIMAGE_2II
 #define NO_MoveMemory__ILorg_eclipse_swt_internal_win32_MINMAXINFO_2I
 #define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_MINMAXINFO_2II
+#define NO_MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2II
 #define NO_MoveToEx
 #define NO_NotifyWinEvent
 #define NO_OleInitialize
@@ -425,19 +459,24 @@
 #define NO_PROPVARIANT_1sizeof
 #define NO_PSPropertyKeyFromString
 #define NO_RedrawWindow
+#define NO_RegCreateKeyExA
+#define NO_RegDeleteValueA
 #define NO_RegEnumKeyExA
 #define NO_RegOpenKeyExA
 #define NO_RegQueryInfoKeyA
 #define NO_RegQueryValueExA__I_3BI_3I_3B_3I
 #define NO_RegQueryValueExA__I_3BI_3I_3I_3I
+#define NO_RegSetValueExA
 #define NO_RegisterClassA
 #define NO_RegisterClipboardFormatA
+#define NO_RegisterTouchWindow
 #define NO_RegisterWindowMessageA
 #define NO_RemoveFontResourceExW
 #define NO_RemovePropA
 #define NO_RemovePropW
 #define NO_ReplyMessage
 #define NO_SetCurrentProcessExplicitAppUserModelID
+#define NO_SetGestureConfig
 #define NO_SetLayeredWindowAttributes
 #define NO_SetLayout
 #define NO_SetProcessDPIAware
@@ -492,6 +531,8 @@
 #define NO_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVINSERTMARK_2
 #define NO_SendMessageW__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2
 #define NO_SetDIBColorTable
+#define NO_SetDllDirectoryA
+#define NO_SetDllDirectoryW
 #define NO_SetErrorMode
 #define NO_SetGraphicsMode
 #define NO_SetMapMode
@@ -553,6 +594,8 @@
 #define NO_ScriptXtoCP
 #define NO_StrokePath
 #define NO_ToAscii
+#define NO_TOUCHINPUT_1sizeof
+#define NO_TOUCH_1COORD_1TO_1PIXEL
 #define NO_ToUnicode
 #define NO_TrackMouseEvent
 #define NO_TranslateAcceleratorA
@@ -560,6 +603,7 @@
 #define NO_TransparentBlt
 #define NO_UnhookWindowsHookEx
 #define NO_UnregisterClassA
+#define NO_UnregisterTouchWindow
 #define NO_UpdateLayeredWindow
 #define NO_VkKeyScanA
 #define NO_VkKeyScanW
@@ -673,10 +717,129 @@ typedef struct tagTVITEMCHANGE {
 #endif /* _WIN32_IE <= 0x0600 */
 #endif /* _WIN32_WCE */
 
+#if (WINVER < 0x0601)
+typedef struct FLICK_POINT
+{
+    INT x:16;
+    INT y:16;
+}FLICK_POINT;
+
+typedef struct FLICK_DATA
+{
+/*
+	Avoid warnings in Windows 64 bit.
+    FLICKACTION_COMMANDCODE iFlickActionCommandCode:5;
+    FLICKDIRECTION iFlickDirection:3;
+*/
+    INT iFlickActionCommandCode:5;
+    UINT iFlickDirection:3;
+    BOOL fControlModifier:1;
+    BOOL fMenuModifier:1;
+    BOOL fAltGRModifier:1;
+    BOOL fWinModifier:1;
+    BOOL fShiftModifier:1;
+    INT  iReserved:2;
+    BOOL fOnInkingSurface:1;
+    INT  iActionArgument:16;
+}FLICK_DATA;
+
+/*
+ * Touch input handle
+ */
+DECLARE_HANDLE(HTOUCHINPUT);
+
+typedef struct tagTOUCHINPUT {
+    LONG x;
+    LONG y;
+    HANDLE hSource;
+    DWORD dwID;
+    DWORD dwFlags;
+    DWORD dwMask;
+    DWORD dwTime;
+    ULONG_PTR dwExtraInfo;
+    DWORD cxContact;
+    DWORD cyContact;
+} TOUCHINPUT, *PTOUCHINPUT;
+typedef TOUCHINPUT const * PCTOUCHINPUT;
+
+/*
+ * Conversion of touch input coordinates to pixels
+ */
+#define TOUCH_COORD_TO_PIXEL(l)         ((l) / 100)
+
+/*
+ * Gesture information handle
+ */
+DECLARE_HANDLE(HGESTUREINFO);
+
+typedef struct tagGESTUREINFO {
+    UINT cbSize;                    // size, in bytes, of this structure (including variable length Args field)
+    DWORD dwFlags;                  // see GF_* flags
+    DWORD dwID;                     // gesture ID, see GID_* defines
+    HWND hwndTarget;                // handle to window targeted by this gesture
+    POINTS ptsLocation;             // current location of this gesture
+    DWORD dwInstanceID;             // internally used
+    DWORD dwSequenceID;             // internally used
+    ULONGLONG ullArguments;         // arguments for gestures whose arguments fit in 8 BYTES
+    UINT cbExtraArgs;               // size, in bytes, of extra arguments, if any, that accompany this gesture
+} GESTUREINFO, *PGESTUREINFO;
+typedef GESTUREINFO const * PCGESTUREINFO;
+
+typedef struct tagGESTURENOTIFYSTRUCT {
+    UINT cbSize;                    // size, in bytes, of this structure
+    DWORD dwFlags;                  // unused
+    HWND hwndTarget;                // handle to window targeted by the gesture
+    POINTS ptsLocation;             // starting location
+    DWORD dwInstanceID;             // internally used
+} GESTURENOTIFYSTRUCT, *PGESTURENOTIFYSTRUCT;
+
+/*
+ * Gesture argument helpers
+ *   - Angle should be a double in the range of -2pi to +2pi
+ *   - Argument should be an unsigned 16-bit value
+ */
+#define GID_ROTATE_ANGLE_TO_ARGUMENT(_arg_)     ((USHORT)((((_arg_) + 2.0 * 3.14159265) / (4.0 * 3.14159265)) * 65535.0))
+#define GID_ROTATE_ANGLE_FROM_ARGUMENT(_arg_)   ((((double)(_arg_) / 65535.0) * 4.0 * 3.14159265) - 2.0 * 3.14159265)
+
+typedef struct tagGESTURECONFIG {
+    DWORD dwID;                     // gesture ID
+    DWORD dwWant;                   // settings related to gesture ID that are to be turned on
+    DWORD dwBlock;                  // settings related to gesture ID that are to be turned off
+} GESTURECONFIG, *PGESTURECONFIG;
+#endif /* WINVER >= 0x0601 */
+
 #ifndef GET_WHEEL_DELTA_WPARAM
 #define GET_WHEEL_DELTA_WPARAM(wParam)  ((short)HIWORD(wParam))
 #endif
 
+#ifndef LODWORD
+#define LODWORD(l) ((DWORD)((DWORDLONG)(l)))
+#endif
+
 #include "os_custom.h"
 
+#if defined (_WIN64) || defined (_WIN32_WCE)
+#define PRINT_CODE(buf, size, format, code) sprintf(buf, format, code);
+#else
+#define PRINT_CODE(buf, size, format, code) sprintf_s(buf, size, format, code);
+#endif
+#define NATIVE_TRY(env, that, func) \
+	__try {
+#define NATIVE_CATCH(env, that, func) \
+	} __except(EXCEPTION_EXECUTE_HANDLER) { \
+		jclass expClass = (*env)->FindClass(env, "org/eclipse/swt/SWTError");  \
+		if (expClass) { \
+			char buffer[256]; \
+			PRINT_CODE(buffer, 256, "cought native exception: 0x%x", GetExceptionCode()) \
+			(*env)->ThrowNew(env, expClass, buffer); \
+		} \
+	}
+
+#define OS_NATIVE_ENTER_TRY(env, that, func) \
+	OS_NATIVE_ENTER(env, that, func); \
+	NATIVE_TRY(env, that, func);
+#define OS_NATIVE_EXIT_CATCH(env, that, func) \
+	NATIVE_CATCH(env, that, func); \
+	OS_NATIVE_EXIT(env, that, func);
+
 #endif /* INC_os_H */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h
index 2ffdf48..a57a384 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_custom.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,9 @@
 #define BufferedPaintUnInit_LIB "uxtheme.dll"
 #define BufferedPaintSetAlpha_LIB "uxtheme.dll"
 #define BeginBufferedPaint_LIB "uxtheme.dll"
+#define CloseGestureInfoHandle_LIB "user32.dll"
 #define CloseThemeData_LIB "uxtheme.dll"
+#define CloseTouchInputHandle_LIB "user32.dll"
 #define CoInternetIsFeatureEnabled_LIB "urlmon.dll"
 #define CoInternetSetFeatureEnabled_LIB "urlmon.dll"
 #define CreateActCtxW_LIB "kernel32.dll"
@@ -38,6 +40,7 @@
 #define DrawThemeText_LIB "uxtheme.dll"
 #define DwmEnableBlurBehindWindow_LIB "dwmapi.dll"
 #define DwmExtendFrameIntoClientArea_LIB "dwmapi.dll"
+#define GetGestureInfo_LIB "user32.dll"
 #define GetThemeInt_LIB "uxtheme.dll"
 #define GetThemeMargins_LIB "uxtheme.dll"
 #define GetThemeBackgroundContentRect_LIB "uxtheme.dll"
@@ -47,6 +50,7 @@
 #define GetThemeMetric_LIB "uxtheme.dll"
 #define GetThemeRect_LIB "uxtheme.dll"
 #define GetThemeSysSize_LIB "uxtheme.dll"
+#define GetTouchInputInfo_LIB "user32.dll"
 #define HitTestThemeBackground_LIB "uxtheme.dll"
 #define EndBufferedPaint_LIB "uxtheme.dll"
 #define EnumDisplayMonitors_LIB "user32.dll"
@@ -66,13 +70,18 @@
 #define ImmDisableTextFrameService_LIB "imm32.dll"
 #define IsAppThemed_LIB "uxtheme.dll"
 #define IsHungAppWindow_LIB "user32.dll"
+#define IsTouchWindow_LIB "user32.dll"
 #define MCIWndRegisterClass_LIB "msvfw32.dll"
 #define MonitorFromWindow_LIB "user32.dll"
 #define NotifyWinEvent_LIB "user32.dll"
 #define OpenThemeData_LIB "uxtheme.dll"
 #define PrintWindow_LIB "user32.dll"
 #define PSPropertyKeyFromString_LIB "propsys.dll"
+#define RegisterTouchWindow_LIB "user32.dll"
 #define SetCurrentProcessExplicitAppUserModelID_LIB "shell32.dll"
+#define SetDllDirectoryA_LIB "Kernel32.dll"
+#define SetDllDirectoryW_LIB "Kernel32.dll"
+#define SetGestureConfig_LIB "user32.dll"
 #define SetLayeredWindowAttributes_LIB "user32.dll"
 #define SetLayout_LIB "gdi32.dll"
 #define SetMenuInfo_LIB "user32.dll"
@@ -81,4 +90,5 @@
 #define SHCreateItemFromRelativeName_LIB "shell32.dll"
 #define SHCreateItemInKnownFolder_LIB "shell32.dll"
 #define TransparentBlt_LIB "msimg32.dll"
+#define UnregisterTouchWindow_LIB "user32.dll"
 #define UpdateLayeredWindow_LIB "user32.dll"
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.c
index 60cc211..661e111 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,8 @@
 
 #ifdef NATIVE_STATS
 
-int OS_nativeFunctionCount = 1009;
-int OS_nativeFunctionCallCount[1009];
+int OS_nativeFunctionCount = 1059;
+int OS_nativeFunctionCallCount[1059];
 char * OS_nativeFunctionNames[] = {
 	"ACCEL_1sizeof",
 	"ACTCTX_1sizeof",
@@ -48,15 +48,34 @@ char * OS_nativeFunctionNames[] = {
 	"BufferedPaintSetAlpha",
 	"BufferedPaintUnInit",
 	"CANDIDATEFORM_1sizeof",
+	"CERT_1CONTEXT_1sizeof",
+	"CERT_1INFO_1sizeof",
+	"CERT_1NAME_1BLOB_1sizeof",
+	"CERT_1PUBLIC_1KEY_1INFO_1sizeof",
 	"CHOOSECOLOR_1sizeof",
 	"CHOOSEFONT_1sizeof",
 	"COMBOBOXINFO_1sizeof",
 	"COMPOSITIONFORM_1sizeof",
 	"CREATESTRUCT_1sizeof",
-	"Call",
+	"CRYPT_1ALGORITHM_1IDENTIFIER_1sizeof",
+	"CRYPT_1BIT_1BLOB_1sizeof",
+	"CRYPT_1INTEGER_1BLOB_1sizeof",
+	"CRYPT_1OBJID_1BLOB_1sizeof",
+#ifndef JNI64
+	"Call__I",
+#else
+	"Call__J",
+#endif
+#ifndef JNI64
+	"Call__ILorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2",
+#else
+	"Call__JLorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2",
+#endif
 	"CallNextHookEx",
 	"CallWindowProcA",
 	"CallWindowProcW",
+	"CertNameToStrA",
+	"CertNameToStrW",
 	"CharLowerA",
 	"CharLowerW",
 	"CharUpperA",
@@ -69,8 +88,10 @@ char * OS_nativeFunctionNames[] = {
 	"ClientToScreen",
 	"CloseClipboard",
 	"CloseEnhMetaFile",
+	"CloseGestureInfoHandle",
 	"CloseHandle",
 	"CloseThemeData",
+	"CloseTouchInputHandle",
 	"CoCreateInstance",
 	"CoInternetIsFeatureEnabled",
 	"CoInternetSetFeatureEnabled",
@@ -222,6 +243,9 @@ char * OS_nativeFunctionNames[] = {
 	"ExtractIconExA",
 	"ExtractIconExW",
 	"FILETIME_1sizeof",
+	"FLICK_1DATA_1sizeof",
+	"FLICK_1POINT_1sizeof",
+	"FileTimeToSystemTime",
 	"FillPath",
 	"FillRect",
 	"FindWindowA",
@@ -230,9 +254,12 @@ char * OS_nativeFunctionNames[] = {
 	"FormatMessageW",
 	"FreeLibrary",
 	"GCP_1RESULTS_1sizeof",
+	"GESTURECONFIG_1sizeof",
+	"GESTUREINFO_1sizeof",
 	"GET_1WHEEL_1DELTA_1WPARAM",
 	"GET_1X_1LPARAM",
 	"GET_1Y_1LPARAM",
+	"GID_1ROTATE_1ANGLE_1FROM_1ARGUMENT",
 	"GRADIENT_1RECT_1sizeof",
 	"GUITHREADINFO_1sizeof",
 	"GdiSetBatchLimit",
@@ -280,6 +307,7 @@ char * OS_nativeFunctionNames[] = {
 	"GetFontLanguageInfo",
 	"GetForegroundWindow",
 	"GetGUIThreadInfo",
+	"GetGestureInfo",
 	"GetGlyphIndicesW",
 	"GetGraphicsMode",
 	"GetIconInfo",
@@ -439,6 +467,7 @@ char * OS_nativeFunctionNames[] = {
 	"GetTickCount",
 	"GetTimeFormatA",
 	"GetTimeFormatW",
+	"GetTouchInputInfo",
 	"GetUpdateRect",
 	"GetUpdateRgn",
 	"GetVersionExA__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOA_2",
@@ -571,12 +600,14 @@ char * OS_nativeFunctionNames[] = {
 	"IsIconic",
 	"IsPPC",
 	"IsSP",
+	"IsTouchWindow",
 	"IsWindowEnabled",
 	"IsWindowVisible",
 	"IsZoomed",
 	"KEYBDINPUT_1sizeof",
 	"KillTimer",
 	"LITEM_1sizeof",
+	"LODWORD",
 	"LOGBRUSH_1sizeof",
 	"LOGFONTA_1sizeof",
 	"LOGFONTW_1sizeof",
@@ -679,6 +710,11 @@ char * OS_nativeFunctionNames[] = {
 	"MoveMemory__JLorg_eclipse_swt_internal_win32_DROPFILES_2I",
 #endif
 #ifndef JNI64
+	"MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I",
+#else
+	"MoveMemory__JLorg_eclipse_swt_internal_win32_GESTURECONFIG_2I",
+#endif
+#ifndef JNI64
 	"MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I",
 #else
 	"MoveMemory__JLorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I",
@@ -830,6 +866,16 @@ char * OS_nativeFunctionNames[] = {
 #endif
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2_3BI",
 #ifndef JNI64
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2II",
+#else
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2JI",
+#endif
+#ifndef JNI64
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2II",
+#else
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2JI",
+#endif
+#ifndef JNI64
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II",
 #else
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI",
@@ -865,6 +911,16 @@ char * OS_nativeFunctionNames[] = {
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_EXTLOGPEN_2JI",
 #endif
 #ifndef JNI64
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3II",
+#else
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3JI",
+#endif
+#ifndef JNI64
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3II",
+#else
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3JI",
+#endif
+#ifndef JNI64
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II",
 #else
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2JI",
@@ -1061,6 +1117,11 @@ char * OS_nativeFunctionNames[] = {
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICW_2JI",
 #endif
 #ifndef JNI64
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2II",
+#else
+	"MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2JI",
+#endif
+#ifndef JNI64
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II",
 #else
 	"MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2JI",
@@ -1195,6 +1256,10 @@ char * OS_nativeFunctionNames[] = {
 	"Rectangle",
 	"RedrawWindow",
 	"RegCloseKey",
+	"RegCreateKeyExA",
+	"RegCreateKeyExW",
+	"RegDeleteValueA",
+	"RegDeleteValueW",
 	"RegEnumKeyExA",
 	"RegEnumKeyExW",
 	"RegOpenKeyExA",
@@ -1221,10 +1286,13 @@ char * OS_nativeFunctionNames[] = {
 #else
 	"RegQueryValueExW__J_3CJ_3I_3I_3I",
 #endif
+	"RegSetValueExA",
+	"RegSetValueExW",
 	"RegisterClassA",
 	"RegisterClassW",
 	"RegisterClipboardFormatA",
 	"RegisterClipboardFormatW",
+	"RegisterTouchWindow",
 	"RegisterWindowMessageA",
 	"RegisterWindowMessageW",
 	"ReleaseCapture",
@@ -1649,9 +1717,12 @@ char * OS_nativeFunctionNames[] = {
 	"SetCursor",
 	"SetCursorPos",
 	"SetDIBColorTable",
+	"SetDllDirectoryA",
+	"SetDllDirectoryW",
 	"SetErrorMode",
 	"SetFocus",
 	"SetForegroundWindow",
+	"SetGestureConfig",
 	"SetGraphicsMode",
 	"SetLayeredWindowAttributes",
 	"SetLayout",
@@ -1727,6 +1798,8 @@ char * OS_nativeFunctionNames[] = {
 	"TF_1DA_1COLOR_1sizeof",
 	"TF_1DISPLAYATTRIBUTE_1sizeof",
 	"TOOLINFO_1sizeof",
+	"TOUCHINPUT_1sizeof",
+	"TOUCH_1COORD_1TO_1PIXEL",
 	"TRACKMOUSEEVENT_1sizeof",
 	"TRIVERTEX_1sizeof",
 	"TVHITTESTINFO_1sizeof",
@@ -1751,6 +1824,7 @@ char * OS_nativeFunctionNames[] = {
 	"UnmapViewOfFile",
 	"UnregisterClassA",
 	"UnregisterClassW",
+	"UnregisterTouchWindow",
 	"UpdateLayeredWindow",
 	"UpdateWindow",
 	"ValidateRect",
@@ -1784,7 +1858,12 @@ char * OS_nativeFunctionNames[] = {
 #ifndef JNI64
 	"VtblCall__IIII_3C_3CI",
 #else
-	"VtblCall__IJJI_3C_3CJ",
+	"VtblCall__IJII_3C_3CI",
+#endif
+#ifndef JNI64
+	"VtblCall__IIIJ",
+#else
+	"VtblCall__IJIJ",
 #endif
 #ifndef JNI64
 	"VtblCall__IIIJI_3J",
@@ -1822,11 +1901,26 @@ char * OS_nativeFunctionNames[] = {
 	"VtblCall__IJJI",
 #endif
 #ifndef JNI64
+	"VtblCall__IIJII_3I",
+#else
+	"VtblCall__IJJII_3I",
+#endif
+#ifndef JNI64
 	"VtblCall__IIJII_3J",
 #else
 	"VtblCall__IJJII_3J",
 #endif
 #ifndef JNI64
+	"VtblCall__IIJI_3C_3CJ",
+#else
+	"VtblCall__IJJI_3C_3CJ",
+#endif
+#ifndef JNI64
+	"VtblCall__IIJJ",
+#else
+	"VtblCall__IJJJ",
+#endif
+#ifndef JNI64
 	"VtblCall__IIJJI_3J",
 #else
 	"VtblCall__IJJJI_3J",
@@ -1837,6 +1931,21 @@ char * OS_nativeFunctionNames[] = {
 	"VtblCall__IJJJJ",
 #endif
 #ifndef JNI64
+	"VtblCall__IIJ_3I",
+#else
+	"VtblCall__IJJ_3I",
+#endif
+#ifndef JNI64
+	"VtblCall__IIJ_3I_3I",
+#else
+	"VtblCall__IJJ_3I_3I",
+#endif
+#ifndef JNI64
+	"VtblCall__IIJ_3J_3J",
+#else
+	"VtblCall__IJJ_3J_3J",
+#endif
+#ifndef JNI64
 	"VtblCall__IILorg_eclipse_swt_internal_win32_PROPERTYKEY_2I",
 #else
 	"VtblCall__IJLorg_eclipse_swt_internal_win32_PROPERTYKEY_2I",
@@ -1859,6 +1968,11 @@ char * OS_nativeFunctionNames[] = {
 #ifndef JNI64
 	"VtblCall__II_3B_3I",
 #else
+	"VtblCall__IJ_3B_3I",
+#endif
+#ifndef JNI64
+	"VtblCall__II_3B_3J",
+#else
 	"VtblCall__IJ_3B_3J",
 #endif
 #ifndef JNI64
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h
index 58b2e69..9bd7930 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_stats.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,15 +56,34 @@ typedef enum {
 	BufferedPaintSetAlpha_FUNC,
 	BufferedPaintUnInit_FUNC,
 	CANDIDATEFORM_1sizeof_FUNC,
+	CERT_1CONTEXT_1sizeof_FUNC,
+	CERT_1INFO_1sizeof_FUNC,
+	CERT_1NAME_1BLOB_1sizeof_FUNC,
+	CERT_1PUBLIC_1KEY_1INFO_1sizeof_FUNC,
 	CHOOSECOLOR_1sizeof_FUNC,
 	CHOOSEFONT_1sizeof_FUNC,
 	COMBOBOXINFO_1sizeof_FUNC,
 	COMPOSITIONFORM_1sizeof_FUNC,
 	CREATESTRUCT_1sizeof_FUNC,
-	Call_FUNC,
+	CRYPT_1ALGORITHM_1IDENTIFIER_1sizeof_FUNC,
+	CRYPT_1BIT_1BLOB_1sizeof_FUNC,
+	CRYPT_1INTEGER_1BLOB_1sizeof_FUNC,
+	CRYPT_1OBJID_1BLOB_1sizeof_FUNC,
+#ifndef JNI64
+	Call__I_FUNC,
+#else
+	Call__J_FUNC,
+#endif
+#ifndef JNI64
+	Call__ILorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2_FUNC,
+#else
+	Call__JLorg_eclipse_swt_internal_win32_DLLVERSIONINFO_2_FUNC,
+#endif
 	CallNextHookEx_FUNC,
 	CallWindowProcA_FUNC,
 	CallWindowProcW_FUNC,
+	CertNameToStrA_FUNC,
+	CertNameToStrW_FUNC,
 	CharLowerA_FUNC,
 	CharLowerW_FUNC,
 	CharUpperA_FUNC,
@@ -77,8 +96,10 @@ typedef enum {
 	ClientToScreen_FUNC,
 	CloseClipboard_FUNC,
 	CloseEnhMetaFile_FUNC,
+	CloseGestureInfoHandle_FUNC,
 	CloseHandle_FUNC,
 	CloseThemeData_FUNC,
+	CloseTouchInputHandle_FUNC,
 	CoCreateInstance_FUNC,
 	CoInternetIsFeatureEnabled_FUNC,
 	CoInternetSetFeatureEnabled_FUNC,
@@ -230,6 +251,9 @@ typedef enum {
 	ExtractIconExA_FUNC,
 	ExtractIconExW_FUNC,
 	FILETIME_1sizeof_FUNC,
+	FLICK_1DATA_1sizeof_FUNC,
+	FLICK_1POINT_1sizeof_FUNC,
+	FileTimeToSystemTime_FUNC,
 	FillPath_FUNC,
 	FillRect_FUNC,
 	FindWindowA_FUNC,
@@ -238,9 +262,12 @@ typedef enum {
 	FormatMessageW_FUNC,
 	FreeLibrary_FUNC,
 	GCP_1RESULTS_1sizeof_FUNC,
+	GESTURECONFIG_1sizeof_FUNC,
+	GESTUREINFO_1sizeof_FUNC,
 	GET_1WHEEL_1DELTA_1WPARAM_FUNC,
 	GET_1X_1LPARAM_FUNC,
 	GET_1Y_1LPARAM_FUNC,
+	GID_1ROTATE_1ANGLE_1FROM_1ARGUMENT_FUNC,
 	GRADIENT_1RECT_1sizeof_FUNC,
 	GUITHREADINFO_1sizeof_FUNC,
 	GdiSetBatchLimit_FUNC,
@@ -288,6 +315,7 @@ typedef enum {
 	GetFontLanguageInfo_FUNC,
 	GetForegroundWindow_FUNC,
 	GetGUIThreadInfo_FUNC,
+	GetGestureInfo_FUNC,
 	GetGlyphIndicesW_FUNC,
 	GetGraphicsMode_FUNC,
 	GetIconInfo_FUNC,
@@ -447,6 +475,7 @@ typedef enum {
 	GetTickCount_FUNC,
 	GetTimeFormatA_FUNC,
 	GetTimeFormatW_FUNC,
+	GetTouchInputInfo_FUNC,
 	GetUpdateRect_FUNC,
 	GetUpdateRgn_FUNC,
 	GetVersionExA__Lorg_eclipse_swt_internal_win32_OSVERSIONINFOA_2_FUNC,
@@ -579,12 +608,14 @@ typedef enum {
 	IsIconic_FUNC,
 	IsPPC_FUNC,
 	IsSP_FUNC,
+	IsTouchWindow_FUNC,
 	IsWindowEnabled_FUNC,
 	IsWindowVisible_FUNC,
 	IsZoomed_FUNC,
 	KEYBDINPUT_1sizeof_FUNC,
 	KillTimer_FUNC,
 	LITEM_1sizeof_FUNC,
+	LODWORD_FUNC,
 	LOGBRUSH_1sizeof_FUNC,
 	LOGFONTA_1sizeof_FUNC,
 	LOGFONTW_1sizeof_FUNC,
@@ -687,6 +718,11 @@ typedef enum {
 	MoveMemory__JLorg_eclipse_swt_internal_win32_DROPFILES_2I_FUNC,
 #endif
 #ifndef JNI64
+	MoveMemory__ILorg_eclipse_swt_internal_win32_GESTURECONFIG_2I_FUNC,
+#else
+	MoveMemory__JLorg_eclipse_swt_internal_win32_GESTURECONFIG_2I_FUNC,
+#endif
+#ifndef JNI64
 	MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I_FUNC,
 #else
 	MoveMemory__JLorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I_FUNC,
@@ -838,6 +874,16 @@ typedef enum {
 #endif
 	MoveMemory__Lorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2_3BI_FUNC,
 #ifndef JNI64
+	MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2II_FUNC,
+#else
+	MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1CONTEXT_2JI_FUNC,
+#endif
+#ifndef JNI64
+	MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2II_FUNC,
+#else
+	MoveMemory__Lorg_eclipse_swt_internal_win32_CERT_1INFO_2JI_FUNC,
+#endif
+#ifndef JNI64
 	MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2II_FUNC,
 #else
 	MoveMemory__Lorg_eclipse_swt_internal_win32_DEVMODEA_2JI_FUNC,
@@ -873,6 +919,16 @@ typedef enum {
 	MoveMemory__Lorg_eclipse_swt_internal_win32_EXTLOGPEN_2JI_FUNC,
 #endif
 #ifndef JNI64
+	MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3II_FUNC,
+#else
+	MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1DATA_2_3JI_FUNC,
+#endif
+#ifndef JNI64
+	MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3II_FUNC,
+#else
+	MoveMemory__Lorg_eclipse_swt_internal_win32_FLICK_1POINT_2_3JI_FUNC,
+#endif
+#ifndef JNI64
 	MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II_FUNC,
 #else
 	MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2JI_FUNC,
@@ -1069,6 +1125,11 @@ typedef enum {
 	MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICW_2JI_FUNC,
 #endif
 #ifndef JNI64
+	MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2II_FUNC,
+#else
+	MoveMemory__Lorg_eclipse_swt_internal_win32_TOUCHINPUT_2JI_FUNC,
+#endif
+#ifndef JNI64
 	MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II_FUNC,
 #else
 	MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2JI_FUNC,
@@ -1203,6 +1264,10 @@ typedef enum {
 	Rectangle_FUNC,
 	RedrawWindow_FUNC,
 	RegCloseKey_FUNC,
+	RegCreateKeyExA_FUNC,
+	RegCreateKeyExW_FUNC,
+	RegDeleteValueA_FUNC,
+	RegDeleteValueW_FUNC,
 	RegEnumKeyExA_FUNC,
 	RegEnumKeyExW_FUNC,
 	RegOpenKeyExA_FUNC,
@@ -1229,10 +1294,13 @@ typedef enum {
 #else
 	RegQueryValueExW__J_3CJ_3I_3I_3I_FUNC,
 #endif
+	RegSetValueExA_FUNC,
+	RegSetValueExW_FUNC,
 	RegisterClassA_FUNC,
 	RegisterClassW_FUNC,
 	RegisterClipboardFormatA_FUNC,
 	RegisterClipboardFormatW_FUNC,
+	RegisterTouchWindow_FUNC,
 	RegisterWindowMessageA_FUNC,
 	RegisterWindowMessageW_FUNC,
 	ReleaseCapture_FUNC,
@@ -1657,9 +1725,12 @@ typedef enum {
 	SetCursor_FUNC,
 	SetCursorPos_FUNC,
 	SetDIBColorTable_FUNC,
+	SetDllDirectoryA_FUNC,
+	SetDllDirectoryW_FUNC,
 	SetErrorMode_FUNC,
 	SetFocus_FUNC,
 	SetForegroundWindow_FUNC,
+	SetGestureConfig_FUNC,
 	SetGraphicsMode_FUNC,
 	SetLayeredWindowAttributes_FUNC,
 	SetLayout_FUNC,
@@ -1735,6 +1806,8 @@ typedef enum {
 	TF_1DA_1COLOR_1sizeof_FUNC,
 	TF_1DISPLAYATTRIBUTE_1sizeof_FUNC,
 	TOOLINFO_1sizeof_FUNC,
+	TOUCHINPUT_1sizeof_FUNC,
+	TOUCH_1COORD_1TO_1PIXEL_FUNC,
 	TRACKMOUSEEVENT_1sizeof_FUNC,
 	TRIVERTEX_1sizeof_FUNC,
 	TVHITTESTINFO_1sizeof_FUNC,
@@ -1759,6 +1832,7 @@ typedef enum {
 	UnmapViewOfFile_FUNC,
 	UnregisterClassA_FUNC,
 	UnregisterClassW_FUNC,
+	UnregisterTouchWindow_FUNC,
 	UpdateLayeredWindow_FUNC,
 	UpdateWindow_FUNC,
 	ValidateRect_FUNC,
@@ -1792,7 +1866,12 @@ typedef enum {
 #ifndef JNI64
 	VtblCall__IIII_3C_3CI_FUNC,
 #else
-	VtblCall__IJJI_3C_3CJ_FUNC,
+	VtblCall__IJII_3C_3CI_FUNC,
+#endif
+#ifndef JNI64
+	VtblCall__IIIJ_FUNC,
+#else
+	VtblCall__IJIJ_FUNC,
 #endif
 #ifndef JNI64
 	VtblCall__IIIJI_3J_FUNC,
@@ -1830,11 +1909,26 @@ typedef enum {
 	VtblCall__IJJI_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IIJII_3I_FUNC,
+#else
+	VtblCall__IJJII_3I_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__IIJII_3J_FUNC,
 #else
 	VtblCall__IJJII_3J_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IIJI_3C_3CJ_FUNC,
+#else
+	VtblCall__IJJI_3C_3CJ_FUNC,
+#endif
+#ifndef JNI64
+	VtblCall__IIJJ_FUNC,
+#else
+	VtblCall__IJJJ_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__IIJJI_3J_FUNC,
 #else
 	VtblCall__IJJJI_3J_FUNC,
@@ -1845,6 +1939,21 @@ typedef enum {
 	VtblCall__IJJJJ_FUNC,
 #endif
 #ifndef JNI64
+	VtblCall__IIJ_3I_FUNC,
+#else
+	VtblCall__IJJ_3I_FUNC,
+#endif
+#ifndef JNI64
+	VtblCall__IIJ_3I_3I_FUNC,
+#else
+	VtblCall__IJJ_3I_3I_FUNC,
+#endif
+#ifndef JNI64
+	VtblCall__IIJ_3J_3J_FUNC,
+#else
+	VtblCall__IJJ_3J_3J_FUNC,
+#endif
+#ifndef JNI64
 	VtblCall__IILorg_eclipse_swt_internal_win32_PROPERTYKEY_2I_FUNC,
 #else
 	VtblCall__IJLorg_eclipse_swt_internal_win32_PROPERTYKEY_2I_FUNC,
@@ -1867,6 +1976,11 @@ typedef enum {
 #ifndef JNI64
 	VtblCall__II_3B_3I_FUNC,
 #else
+	VtblCall__IJ_3B_3I_FUNC,
+#endif
+#ifndef JNI64
+	VtblCall__II_3B_3J_FUNC,
+#else
 	VtblCall__IJ_3B_3J_FUNC,
 #endif
 #ifndef JNI64
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c
index a7c7a15..3e2d07c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -444,6 +444,247 @@ void setCANDIDATEFORMFields(JNIEnv *env, jobject lpObject, CANDIDATEFORM *lpStru
 }
 #endif
 
+#ifndef NO_CERT_CONTEXT
+typedef struct CERT_CONTEXT_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID dwCertEncodingType, pbCertEncoded, cbCertEncoded, pCertInfo, hCertStore;
+} CERT_CONTEXT_FID_CACHE;
+
+CERT_CONTEXT_FID_CACHE CERT_CONTEXTFc;
+
+void cacheCERT_CONTEXTFields(JNIEnv *env, jobject lpObject)
+{
+	if (CERT_CONTEXTFc.cached) return;
+	CERT_CONTEXTFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CERT_CONTEXTFc.dwCertEncodingType = (*env)->GetFieldID(env, CERT_CONTEXTFc.clazz, "dwCertEncodingType", "I");
+	CERT_CONTEXTFc.pbCertEncoded = (*env)->GetFieldID(env, CERT_CONTEXTFc.clazz, "pbCertEncoded", I_J);
+	CERT_CONTEXTFc.cbCertEncoded = (*env)->GetFieldID(env, CERT_CONTEXTFc.clazz, "cbCertEncoded", "I");
+	CERT_CONTEXTFc.pCertInfo = (*env)->GetFieldID(env, CERT_CONTEXTFc.clazz, "pCertInfo", I_J);
+	CERT_CONTEXTFc.hCertStore = (*env)->GetFieldID(env, CERT_CONTEXTFc.clazz, "hCertStore", I_J);
+	CERT_CONTEXTFc.cached = 1;
+}
+
+CERT_CONTEXT *getCERT_CONTEXTFields(JNIEnv *env, jobject lpObject, CERT_CONTEXT *lpStruct)
+{
+	if (!CERT_CONTEXTFc.cached) cacheCERT_CONTEXTFields(env, lpObject);
+	lpStruct->dwCertEncodingType = (*env)->GetIntField(env, lpObject, CERT_CONTEXTFc.dwCertEncodingType);
+	lpStruct->pbCertEncoded = (BYTE *)(*env)->GetIntLongField(env, lpObject, CERT_CONTEXTFc.pbCertEncoded);
+	lpStruct->cbCertEncoded = (*env)->GetIntField(env, lpObject, CERT_CONTEXTFc.cbCertEncoded);
+	lpStruct->pCertInfo = (PCERT_INFO)(*env)->GetIntLongField(env, lpObject, CERT_CONTEXTFc.pCertInfo);
+	lpStruct->hCertStore = (HCERTSTORE)(*env)->GetIntLongField(env, lpObject, CERT_CONTEXTFc.hCertStore);
+	return lpStruct;
+}
+
+void setCERT_CONTEXTFields(JNIEnv *env, jobject lpObject, CERT_CONTEXT *lpStruct)
+{
+	if (!CERT_CONTEXTFc.cached) cacheCERT_CONTEXTFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, CERT_CONTEXTFc.dwCertEncodingType, (jint)lpStruct->dwCertEncodingType);
+	(*env)->SetIntLongField(env, lpObject, CERT_CONTEXTFc.pbCertEncoded, (jintLong)lpStruct->pbCertEncoded);
+	(*env)->SetIntField(env, lpObject, CERT_CONTEXTFc.cbCertEncoded, (jint)lpStruct->cbCertEncoded);
+	(*env)->SetIntLongField(env, lpObject, CERT_CONTEXTFc.pCertInfo, (jintLong)lpStruct->pCertInfo);
+	(*env)->SetIntLongField(env, lpObject, CERT_CONTEXTFc.hCertStore, (jintLong)lpStruct->hCertStore);
+}
+#endif
+
+#ifndef NO_CERT_INFO
+typedef struct CERT_INFO_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID dwVersion, SerialNumber, SignatureAlgorithm, Issuer, NotBefore, NotAfter, Subject, SubjectPublicKeyInfo, IssuerUniqueId, SubjectUniqueId, cExtension, rgExtension;
+} CERT_INFO_FID_CACHE;
+
+CERT_INFO_FID_CACHE CERT_INFOFc;
+
+void cacheCERT_INFOFields(JNIEnv *env, jobject lpObject)
+{
+	if (CERT_INFOFc.cached) return;
+	CERT_INFOFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CERT_INFOFc.dwVersion = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "dwVersion", "I");
+	CERT_INFOFc.SerialNumber = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "SerialNumber", "Lorg/eclipse/swt/internal/win32/CRYPT_INTEGER_BLOB;");
+	CERT_INFOFc.SignatureAlgorithm = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "SignatureAlgorithm", "Lorg/eclipse/swt/internal/win32/CRYPT_ALGORITHM_IDENTIFIER;");
+	CERT_INFOFc.Issuer = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "Issuer", "Lorg/eclipse/swt/internal/win32/CERT_NAME_BLOB;");
+	CERT_INFOFc.NotBefore = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "NotBefore", "Lorg/eclipse/swt/internal/win32/FILETIME;");
+	CERT_INFOFc.NotAfter = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "NotAfter", "Lorg/eclipse/swt/internal/win32/FILETIME;");
+	CERT_INFOFc.Subject = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "Subject", "Lorg/eclipse/swt/internal/win32/CERT_NAME_BLOB;");
+	CERT_INFOFc.SubjectPublicKeyInfo = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "SubjectPublicKeyInfo", "Lorg/eclipse/swt/internal/win32/CERT_PUBLIC_KEY_INFO;");
+	CERT_INFOFc.IssuerUniqueId = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "IssuerUniqueId", "Lorg/eclipse/swt/internal/win32/CRYPT_BIT_BLOB;");
+	CERT_INFOFc.SubjectUniqueId = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "SubjectUniqueId", "Lorg/eclipse/swt/internal/win32/CRYPT_BIT_BLOB;");
+	CERT_INFOFc.cExtension = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "cExtension", "I");
+	CERT_INFOFc.rgExtension = (*env)->GetFieldID(env, CERT_INFOFc.clazz, "rgExtension", I_J);
+	CERT_INFOFc.cached = 1;
+}
+
+CERT_INFO *getCERT_INFOFields(JNIEnv *env, jobject lpObject, CERT_INFO *lpStruct)
+{
+	if (!CERT_INFOFc.cached) cacheCERT_INFOFields(env, lpObject);
+	lpStruct->dwVersion = (*env)->GetIntField(env, lpObject, CERT_INFOFc.dwVersion);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SerialNumber);
+	if (lpObject1 != NULL) getCRYPT_INTEGER_BLOBFields(env, lpObject1, &lpStruct->SerialNumber);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SignatureAlgorithm);
+	if (lpObject1 != NULL) getCRYPT_ALGORITHM_IDENTIFIERFields(env, lpObject1, &lpStruct->SignatureAlgorithm);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.Issuer);
+	if (lpObject1 != NULL) getCERT_NAME_BLOBFields(env, lpObject1, &lpStruct->Issuer);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.NotBefore);
+	if (lpObject1 != NULL) getFILETIMEFields(env, lpObject1, &lpStruct->NotBefore);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.NotAfter);
+	if (lpObject1 != NULL) getFILETIMEFields(env, lpObject1, &lpStruct->NotAfter);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.Subject);
+	if (lpObject1 != NULL) getCERT_NAME_BLOBFields(env, lpObject1, &lpStruct->Subject);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SubjectPublicKeyInfo);
+	if (lpObject1 != NULL) getCERT_PUBLIC_KEY_INFOFields(env, lpObject1, &lpStruct->SubjectPublicKeyInfo);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.IssuerUniqueId);
+	if (lpObject1 != NULL) getCRYPT_BIT_BLOBFields(env, lpObject1, &lpStruct->IssuerUniqueId);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SubjectUniqueId);
+	if (lpObject1 != NULL) getCRYPT_BIT_BLOBFields(env, lpObject1, &lpStruct->SubjectUniqueId);
+	}
+	lpStruct->cExtension = (*env)->GetIntField(env, lpObject, CERT_INFOFc.cExtension);
+	lpStruct->rgExtension = (PCERT_EXTENSION)(*env)->GetIntLongField(env, lpObject, CERT_INFOFc.rgExtension);
+	return lpStruct;
+}
+
+void setCERT_INFOFields(JNIEnv *env, jobject lpObject, CERT_INFO *lpStruct)
+{
+	if (!CERT_INFOFc.cached) cacheCERT_INFOFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, CERT_INFOFc.dwVersion, (jint)lpStruct->dwVersion);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SerialNumber);
+	if (lpObject1 != NULL) setCRYPT_INTEGER_BLOBFields(env, lpObject1, &lpStruct->SerialNumber);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SignatureAlgorithm);
+	if (lpObject1 != NULL) setCRYPT_ALGORITHM_IDENTIFIERFields(env, lpObject1, &lpStruct->SignatureAlgorithm);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.Issuer);
+	if (lpObject1 != NULL) setCERT_NAME_BLOBFields(env, lpObject1, &lpStruct->Issuer);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.NotBefore);
+	if (lpObject1 != NULL) setFILETIMEFields(env, lpObject1, &lpStruct->NotBefore);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.NotAfter);
+	if (lpObject1 != NULL) setFILETIMEFields(env, lpObject1, &lpStruct->NotAfter);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.Subject);
+	if (lpObject1 != NULL) setCERT_NAME_BLOBFields(env, lpObject1, &lpStruct->Subject);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SubjectPublicKeyInfo);
+	if (lpObject1 != NULL) setCERT_PUBLIC_KEY_INFOFields(env, lpObject1, &lpStruct->SubjectPublicKeyInfo);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.IssuerUniqueId);
+	if (lpObject1 != NULL) setCRYPT_BIT_BLOBFields(env, lpObject1, &lpStruct->IssuerUniqueId);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_INFOFc.SubjectUniqueId);
+	if (lpObject1 != NULL) setCRYPT_BIT_BLOBFields(env, lpObject1, &lpStruct->SubjectUniqueId);
+	}
+	(*env)->SetIntField(env, lpObject, CERT_INFOFc.cExtension, (jint)lpStruct->cExtension);
+	(*env)->SetIntLongField(env, lpObject, CERT_INFOFc.rgExtension, (jintLong)lpStruct->rgExtension);
+}
+#endif
+
+#ifndef NO_CERT_NAME_BLOB
+typedef struct CERT_NAME_BLOB_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID cbData, pbData;
+} CERT_NAME_BLOB_FID_CACHE;
+
+CERT_NAME_BLOB_FID_CACHE CERT_NAME_BLOBFc;
+
+void cacheCERT_NAME_BLOBFields(JNIEnv *env, jobject lpObject)
+{
+	if (CERT_NAME_BLOBFc.cached) return;
+	CERT_NAME_BLOBFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CERT_NAME_BLOBFc.cbData = (*env)->GetFieldID(env, CERT_NAME_BLOBFc.clazz, "cbData", "I");
+	CERT_NAME_BLOBFc.pbData = (*env)->GetFieldID(env, CERT_NAME_BLOBFc.clazz, "pbData", I_J);
+	CERT_NAME_BLOBFc.cached = 1;
+}
+
+CERT_NAME_BLOB *getCERT_NAME_BLOBFields(JNIEnv *env, jobject lpObject, CERT_NAME_BLOB *lpStruct)
+{
+	if (!CERT_NAME_BLOBFc.cached) cacheCERT_NAME_BLOBFields(env, lpObject);
+	lpStruct->cbData = (*env)->GetIntField(env, lpObject, CERT_NAME_BLOBFc.cbData);
+	lpStruct->pbData = (BYTE *)(*env)->GetIntLongField(env, lpObject, CERT_NAME_BLOBFc.pbData);
+	return lpStruct;
+}
+
+void setCERT_NAME_BLOBFields(JNIEnv *env, jobject lpObject, CERT_NAME_BLOB *lpStruct)
+{
+	if (!CERT_NAME_BLOBFc.cached) cacheCERT_NAME_BLOBFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, CERT_NAME_BLOBFc.cbData, (jint)lpStruct->cbData);
+	(*env)->SetIntLongField(env, lpObject, CERT_NAME_BLOBFc.pbData, (jintLong)lpStruct->pbData);
+}
+#endif
+
+#ifndef NO_CERT_PUBLIC_KEY_INFO
+typedef struct CERT_PUBLIC_KEY_INFO_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID Algorithm, PublicKey;
+} CERT_PUBLIC_KEY_INFO_FID_CACHE;
+
+CERT_PUBLIC_KEY_INFO_FID_CACHE CERT_PUBLIC_KEY_INFOFc;
+
+void cacheCERT_PUBLIC_KEY_INFOFields(JNIEnv *env, jobject lpObject)
+{
+	if (CERT_PUBLIC_KEY_INFOFc.cached) return;
+	CERT_PUBLIC_KEY_INFOFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CERT_PUBLIC_KEY_INFOFc.Algorithm = (*env)->GetFieldID(env, CERT_PUBLIC_KEY_INFOFc.clazz, "Algorithm", "Lorg/eclipse/swt/internal/win32/CRYPT_ALGORITHM_IDENTIFIER;");
+	CERT_PUBLIC_KEY_INFOFc.PublicKey = (*env)->GetFieldID(env, CERT_PUBLIC_KEY_INFOFc.clazz, "PublicKey", "Lorg/eclipse/swt/internal/win32/CRYPT_BIT_BLOB;");
+	CERT_PUBLIC_KEY_INFOFc.cached = 1;
+}
+
+CERT_PUBLIC_KEY_INFO *getCERT_PUBLIC_KEY_INFOFields(JNIEnv *env, jobject lpObject, CERT_PUBLIC_KEY_INFO *lpStruct)
+{
+	if (!CERT_PUBLIC_KEY_INFOFc.cached) cacheCERT_PUBLIC_KEY_INFOFields(env, lpObject);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_PUBLIC_KEY_INFOFc.Algorithm);
+	if (lpObject1 != NULL) getCRYPT_ALGORITHM_IDENTIFIERFields(env, lpObject1, &lpStruct->Algorithm);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_PUBLIC_KEY_INFOFc.PublicKey);
+	if (lpObject1 != NULL) getCRYPT_BIT_BLOBFields(env, lpObject1, &lpStruct->PublicKey);
+	}
+	return lpStruct;
+}
+
+void setCERT_PUBLIC_KEY_INFOFields(JNIEnv *env, jobject lpObject, CERT_PUBLIC_KEY_INFO *lpStruct)
+{
+	if (!CERT_PUBLIC_KEY_INFOFc.cached) cacheCERT_PUBLIC_KEY_INFOFields(env, lpObject);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_PUBLIC_KEY_INFOFc.Algorithm);
+	if (lpObject1 != NULL) setCRYPT_ALGORITHM_IDENTIFIERFields(env, lpObject1, &lpStruct->Algorithm);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CERT_PUBLIC_KEY_INFOFc.PublicKey);
+	if (lpObject1 != NULL) setCRYPT_BIT_BLOBFields(env, lpObject1, &lpStruct->PublicKey);
+	}
+}
+#endif
+
 #ifndef NO_CHOOSECOLOR
 typedef struct CHOOSECOLOR_FID_CACHE {
 	int cached;
@@ -752,6 +993,151 @@ void setCREATESTRUCTFields(JNIEnv *env, jobject lpObject, CREATESTRUCT *lpStruct
 }
 #endif
 
+#ifndef NO_CRYPT_ALGORITHM_IDENTIFIER
+typedef struct CRYPT_ALGORITHM_IDENTIFIER_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID pszObjId, Parameters;
+} CRYPT_ALGORITHM_IDENTIFIER_FID_CACHE;
+
+CRYPT_ALGORITHM_IDENTIFIER_FID_CACHE CRYPT_ALGORITHM_IDENTIFIERFc;
+
+void cacheCRYPT_ALGORITHM_IDENTIFIERFields(JNIEnv *env, jobject lpObject)
+{
+	if (CRYPT_ALGORITHM_IDENTIFIERFc.cached) return;
+	CRYPT_ALGORITHM_IDENTIFIERFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CRYPT_ALGORITHM_IDENTIFIERFc.pszObjId = (*env)->GetFieldID(env, CRYPT_ALGORITHM_IDENTIFIERFc.clazz, "pszObjId", I_J);
+	CRYPT_ALGORITHM_IDENTIFIERFc.Parameters = (*env)->GetFieldID(env, CRYPT_ALGORITHM_IDENTIFIERFc.clazz, "Parameters", "Lorg/eclipse/swt/internal/win32/CRYPT_OBJID_BLOB;");
+	CRYPT_ALGORITHM_IDENTIFIERFc.cached = 1;
+}
+
+CRYPT_ALGORITHM_IDENTIFIER *getCRYPT_ALGORITHM_IDENTIFIERFields(JNIEnv *env, jobject lpObject, CRYPT_ALGORITHM_IDENTIFIER *lpStruct)
+{
+	if (!CRYPT_ALGORITHM_IDENTIFIERFc.cached) cacheCRYPT_ALGORITHM_IDENTIFIERFields(env, lpObject);
+	lpStruct->pszObjId = (LPSTR)(*env)->GetIntLongField(env, lpObject, CRYPT_ALGORITHM_IDENTIFIERFc.pszObjId);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CRYPT_ALGORITHM_IDENTIFIERFc.Parameters);
+	if (lpObject1 != NULL) getCRYPT_OBJID_BLOBFields(env, lpObject1, &lpStruct->Parameters);
+	}
+	return lpStruct;
+}
+
+void setCRYPT_ALGORITHM_IDENTIFIERFields(JNIEnv *env, jobject lpObject, CRYPT_ALGORITHM_IDENTIFIER *lpStruct)
+{
+	if (!CRYPT_ALGORITHM_IDENTIFIERFc.cached) cacheCRYPT_ALGORITHM_IDENTIFIERFields(env, lpObject);
+	(*env)->SetIntLongField(env, lpObject, CRYPT_ALGORITHM_IDENTIFIERFc.pszObjId, (jintLong)lpStruct->pszObjId);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CRYPT_ALGORITHM_IDENTIFIERFc.Parameters);
+	if (lpObject1 != NULL) setCRYPT_OBJID_BLOBFields(env, lpObject1, &lpStruct->Parameters);
+	}
+}
+#endif
+
+#ifndef NO_CRYPT_BIT_BLOB
+typedef struct CRYPT_BIT_BLOB_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID cbData, pbData, cUnusedBits;
+} CRYPT_BIT_BLOB_FID_CACHE;
+
+CRYPT_BIT_BLOB_FID_CACHE CRYPT_BIT_BLOBFc;
+
+void cacheCRYPT_BIT_BLOBFields(JNIEnv *env, jobject lpObject)
+{
+	if (CRYPT_BIT_BLOBFc.cached) return;
+	CRYPT_BIT_BLOBFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CRYPT_BIT_BLOBFc.cbData = (*env)->GetFieldID(env, CRYPT_BIT_BLOBFc.clazz, "cbData", "I");
+	CRYPT_BIT_BLOBFc.pbData = (*env)->GetFieldID(env, CRYPT_BIT_BLOBFc.clazz, "pbData", I_J);
+	CRYPT_BIT_BLOBFc.cUnusedBits = (*env)->GetFieldID(env, CRYPT_BIT_BLOBFc.clazz, "cUnusedBits", "I");
+	CRYPT_BIT_BLOBFc.cached = 1;
+}
+
+CRYPT_BIT_BLOB *getCRYPT_BIT_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_BIT_BLOB *lpStruct)
+{
+	if (!CRYPT_BIT_BLOBFc.cached) cacheCRYPT_BIT_BLOBFields(env, lpObject);
+	lpStruct->cbData = (*env)->GetIntField(env, lpObject, CRYPT_BIT_BLOBFc.cbData);
+	lpStruct->pbData = (BYTE *)(*env)->GetIntLongField(env, lpObject, CRYPT_BIT_BLOBFc.pbData);
+	lpStruct->cUnusedBits = (*env)->GetIntField(env, lpObject, CRYPT_BIT_BLOBFc.cUnusedBits);
+	return lpStruct;
+}
+
+void setCRYPT_BIT_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_BIT_BLOB *lpStruct)
+{
+	if (!CRYPT_BIT_BLOBFc.cached) cacheCRYPT_BIT_BLOBFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, CRYPT_BIT_BLOBFc.cbData, (jint)lpStruct->cbData);
+	(*env)->SetIntLongField(env, lpObject, CRYPT_BIT_BLOBFc.pbData, (jintLong)lpStruct->pbData);
+	(*env)->SetIntField(env, lpObject, CRYPT_BIT_BLOBFc.cUnusedBits, (jint)lpStruct->cUnusedBits);
+}
+#endif
+
+#ifndef NO_CRYPT_INTEGER_BLOB
+typedef struct CRYPT_INTEGER_BLOB_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID cbData, pbData;
+} CRYPT_INTEGER_BLOB_FID_CACHE;
+
+CRYPT_INTEGER_BLOB_FID_CACHE CRYPT_INTEGER_BLOBFc;
+
+void cacheCRYPT_INTEGER_BLOBFields(JNIEnv *env, jobject lpObject)
+{
+	if (CRYPT_INTEGER_BLOBFc.cached) return;
+	CRYPT_INTEGER_BLOBFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CRYPT_INTEGER_BLOBFc.cbData = (*env)->GetFieldID(env, CRYPT_INTEGER_BLOBFc.clazz, "cbData", "I");
+	CRYPT_INTEGER_BLOBFc.pbData = (*env)->GetFieldID(env, CRYPT_INTEGER_BLOBFc.clazz, "pbData", I_J);
+	CRYPT_INTEGER_BLOBFc.cached = 1;
+}
+
+CRYPT_INTEGER_BLOB *getCRYPT_INTEGER_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_INTEGER_BLOB *lpStruct)
+{
+	if (!CRYPT_INTEGER_BLOBFc.cached) cacheCRYPT_INTEGER_BLOBFields(env, lpObject);
+	lpStruct->cbData = (*env)->GetIntField(env, lpObject, CRYPT_INTEGER_BLOBFc.cbData);
+	lpStruct->pbData = (BYTE *)(*env)->GetIntLongField(env, lpObject, CRYPT_INTEGER_BLOBFc.pbData);
+	return lpStruct;
+}
+
+void setCRYPT_INTEGER_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_INTEGER_BLOB *lpStruct)
+{
+	if (!CRYPT_INTEGER_BLOBFc.cached) cacheCRYPT_INTEGER_BLOBFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, CRYPT_INTEGER_BLOBFc.cbData, (jint)lpStruct->cbData);
+	(*env)->SetIntLongField(env, lpObject, CRYPT_INTEGER_BLOBFc.pbData, (jintLong)lpStruct->pbData);
+}
+#endif
+
+#ifndef NO_CRYPT_OBJID_BLOB
+typedef struct CRYPT_OBJID_BLOB_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID cbData, pbData;
+} CRYPT_OBJID_BLOB_FID_CACHE;
+
+CRYPT_OBJID_BLOB_FID_CACHE CRYPT_OBJID_BLOBFc;
+
+void cacheCRYPT_OBJID_BLOBFields(JNIEnv *env, jobject lpObject)
+{
+	if (CRYPT_OBJID_BLOBFc.cached) return;
+	CRYPT_OBJID_BLOBFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CRYPT_OBJID_BLOBFc.cbData = (*env)->GetFieldID(env, CRYPT_OBJID_BLOBFc.clazz, "cbData", "I");
+	CRYPT_OBJID_BLOBFc.pbData = (*env)->GetFieldID(env, CRYPT_OBJID_BLOBFc.clazz, "pbData", I_J);
+	CRYPT_OBJID_BLOBFc.cached = 1;
+}
+
+CRYPT_OBJID_BLOB *getCRYPT_OBJID_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_OBJID_BLOB *lpStruct)
+{
+	if (!CRYPT_OBJID_BLOBFc.cached) cacheCRYPT_OBJID_BLOBFields(env, lpObject);
+	lpStruct->cbData = (*env)->GetIntField(env, lpObject, CRYPT_OBJID_BLOBFc.cbData);
+	lpStruct->pbData = (BYTE *)(*env)->GetIntLongField(env, lpObject, CRYPT_OBJID_BLOBFc.pbData);
+	return lpStruct;
+}
+
+void setCRYPT_OBJID_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_OBJID_BLOB *lpStruct)
+{
+	if (!CRYPT_OBJID_BLOBFc.cached) cacheCRYPT_OBJID_BLOBFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, CRYPT_OBJID_BLOBFc.cbData, (jint)lpStruct->cbData);
+	(*env)->SetIntLongField(env, lpObject, CRYPT_OBJID_BLOBFc.pbData, (jintLong)lpStruct->pbData);
+}
+#endif
+
 #ifndef NO_DEVMODE
 typedef struct DEVMODE_FID_CACHE {
 	int cached;
@@ -1721,6 +2107,98 @@ void setFILETIMEFields(JNIEnv *env, jobject lpObject, FILETIME *lpStruct)
 }
 #endif
 
+#ifndef NO_FLICK_DATA
+typedef struct FLICK_DATA_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID iFlickActionCommandCode, iFlickDirection, fControlModifier, fMenuModifier, fAltGRModifier, fWinModifier, fShiftModifier, iReserved, fOnInkingSurface, iActionArgument;
+} FLICK_DATA_FID_CACHE;
+
+FLICK_DATA_FID_CACHE FLICK_DATAFc;
+
+void cacheFLICK_DATAFields(JNIEnv *env, jobject lpObject)
+{
+	if (FLICK_DATAFc.cached) return;
+	FLICK_DATAFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	FLICK_DATAFc.iFlickActionCommandCode = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "iFlickActionCommandCode", "I");
+	FLICK_DATAFc.iFlickDirection = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "iFlickDirection", "B");
+	FLICK_DATAFc.fControlModifier = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "fControlModifier", "Z");
+	FLICK_DATAFc.fMenuModifier = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "fMenuModifier", "Z");
+	FLICK_DATAFc.fAltGRModifier = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "fAltGRModifier", "Z");
+	FLICK_DATAFc.fWinModifier = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "fWinModifier", "Z");
+	FLICK_DATAFc.fShiftModifier = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "fShiftModifier", "Z");
+	FLICK_DATAFc.iReserved = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "iReserved", "I");
+	FLICK_DATAFc.fOnInkingSurface = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "fOnInkingSurface", "Z");
+	FLICK_DATAFc.iActionArgument = (*env)->GetFieldID(env, FLICK_DATAFc.clazz, "iActionArgument", "I");
+	FLICK_DATAFc.cached = 1;
+}
+
+FLICK_DATA *getFLICK_DATAFields(JNIEnv *env, jobject lpObject, FLICK_DATA *lpStruct)
+{
+	if (!FLICK_DATAFc.cached) cacheFLICK_DATAFields(env, lpObject);
+	lpStruct->iFlickActionCommandCode = (*env)->GetIntField(env, lpObject, FLICK_DATAFc.iFlickActionCommandCode);
+	lpStruct->iFlickDirection = (*env)->GetByteField(env, lpObject, FLICK_DATAFc.iFlickDirection);
+	lpStruct->fControlModifier = (*env)->GetBooleanField(env, lpObject, FLICK_DATAFc.fControlModifier);
+	lpStruct->fMenuModifier = (*env)->GetBooleanField(env, lpObject, FLICK_DATAFc.fMenuModifier);
+	lpStruct->fAltGRModifier = (*env)->GetBooleanField(env, lpObject, FLICK_DATAFc.fAltGRModifier);
+	lpStruct->fWinModifier = (*env)->GetBooleanField(env, lpObject, FLICK_DATAFc.fWinModifier);
+	lpStruct->fShiftModifier = (*env)->GetBooleanField(env, lpObject, FLICK_DATAFc.fShiftModifier);
+	lpStruct->iReserved = (*env)->GetIntField(env, lpObject, FLICK_DATAFc.iReserved);
+	lpStruct->fOnInkingSurface = (*env)->GetBooleanField(env, lpObject, FLICK_DATAFc.fOnInkingSurface);
+	lpStruct->iActionArgument = (*env)->GetIntField(env, lpObject, FLICK_DATAFc.iActionArgument);
+	return lpStruct;
+}
+
+void setFLICK_DATAFields(JNIEnv *env, jobject lpObject, FLICK_DATA *lpStruct)
+{
+	if (!FLICK_DATAFc.cached) cacheFLICK_DATAFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, FLICK_DATAFc.iFlickActionCommandCode, (jint)lpStruct->iFlickActionCommandCode);
+	(*env)->SetByteField(env, lpObject, FLICK_DATAFc.iFlickDirection, (jbyte)lpStruct->iFlickDirection);
+	(*env)->SetBooleanField(env, lpObject, FLICK_DATAFc.fControlModifier, (jboolean)lpStruct->fControlModifier);
+	(*env)->SetBooleanField(env, lpObject, FLICK_DATAFc.fMenuModifier, (jboolean)lpStruct->fMenuModifier);
+	(*env)->SetBooleanField(env, lpObject, FLICK_DATAFc.fAltGRModifier, (jboolean)lpStruct->fAltGRModifier);
+	(*env)->SetBooleanField(env, lpObject, FLICK_DATAFc.fWinModifier, (jboolean)lpStruct->fWinModifier);
+	(*env)->SetBooleanField(env, lpObject, FLICK_DATAFc.fShiftModifier, (jboolean)lpStruct->fShiftModifier);
+	(*env)->SetIntField(env, lpObject, FLICK_DATAFc.iReserved, (jint)lpStruct->iReserved);
+	(*env)->SetBooleanField(env, lpObject, FLICK_DATAFc.fOnInkingSurface, (jboolean)lpStruct->fOnInkingSurface);
+	(*env)->SetIntField(env, lpObject, FLICK_DATAFc.iActionArgument, (jint)lpStruct->iActionArgument);
+}
+#endif
+
+#ifndef NO_FLICK_POINT
+typedef struct FLICK_POINT_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y;
+} FLICK_POINT_FID_CACHE;
+
+FLICK_POINT_FID_CACHE FLICK_POINTFc;
+
+void cacheFLICK_POINTFields(JNIEnv *env, jobject lpObject)
+{
+	if (FLICK_POINTFc.cached) return;
+	FLICK_POINTFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	FLICK_POINTFc.x = (*env)->GetFieldID(env, FLICK_POINTFc.clazz, "x", "I");
+	FLICK_POINTFc.y = (*env)->GetFieldID(env, FLICK_POINTFc.clazz, "y", "I");
+	FLICK_POINTFc.cached = 1;
+}
+
+FLICK_POINT *getFLICK_POINTFields(JNIEnv *env, jobject lpObject, FLICK_POINT *lpStruct)
+{
+	if (!FLICK_POINTFc.cached) cacheFLICK_POINTFields(env, lpObject);
+	lpStruct->x = (*env)->GetIntField(env, lpObject, FLICK_POINTFc.x);
+	lpStruct->y = (*env)->GetIntField(env, lpObject, FLICK_POINTFc.y);
+	return lpStruct;
+}
+
+void setFLICK_POINTFields(JNIEnv *env, jobject lpObject, FLICK_POINT *lpStruct)
+{
+	if (!FLICK_POINTFc.cached) cacheFLICK_POINTFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, FLICK_POINTFc.x, (jint)lpStruct->x);
+	(*env)->SetIntField(env, lpObject, FLICK_POINTFc.y, (jint)lpStruct->y);
+}
+#endif
+
 #ifndef NO_GCP_RESULTS
 typedef struct GCP_RESULTS_FID_CACHE {
 	int cached;
@@ -1776,6 +2254,101 @@ void setGCP_RESULTSFields(JNIEnv *env, jobject lpObject, GCP_RESULTS *lpStruct)
 }
 #endif
 
+#ifndef NO_GESTURECONFIG
+typedef struct GESTURECONFIG_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID dwID, dwWant, dwBlock;
+} GESTURECONFIG_FID_CACHE;
+
+GESTURECONFIG_FID_CACHE GESTURECONFIGFc;
+
+void cacheGESTURECONFIGFields(JNIEnv *env, jobject lpObject)
+{
+	if (GESTURECONFIGFc.cached) return;
+	GESTURECONFIGFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	GESTURECONFIGFc.dwID = (*env)->GetFieldID(env, GESTURECONFIGFc.clazz, "dwID", "I");
+	GESTURECONFIGFc.dwWant = (*env)->GetFieldID(env, GESTURECONFIGFc.clazz, "dwWant", "I");
+	GESTURECONFIGFc.dwBlock = (*env)->GetFieldID(env, GESTURECONFIGFc.clazz, "dwBlock", "I");
+	GESTURECONFIGFc.cached = 1;
+}
+
+GESTURECONFIG *getGESTURECONFIGFields(JNIEnv *env, jobject lpObject, GESTURECONFIG *lpStruct)
+{
+	if (!GESTURECONFIGFc.cached) cacheGESTURECONFIGFields(env, lpObject);
+	lpStruct->dwID = (*env)->GetIntField(env, lpObject, GESTURECONFIGFc.dwID);
+	lpStruct->dwWant = (*env)->GetIntField(env, lpObject, GESTURECONFIGFc.dwWant);
+	lpStruct->dwBlock = (*env)->GetIntField(env, lpObject, GESTURECONFIGFc.dwBlock);
+	return lpStruct;
+}
+
+void setGESTURECONFIGFields(JNIEnv *env, jobject lpObject, GESTURECONFIG *lpStruct)
+{
+	if (!GESTURECONFIGFc.cached) cacheGESTURECONFIGFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, GESTURECONFIGFc.dwID, (jint)lpStruct->dwID);
+	(*env)->SetIntField(env, lpObject, GESTURECONFIGFc.dwWant, (jint)lpStruct->dwWant);
+	(*env)->SetIntField(env, lpObject, GESTURECONFIGFc.dwBlock, (jint)lpStruct->dwBlock);
+}
+#endif
+
+#ifndef NO_GESTUREINFO
+typedef struct GESTUREINFO_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID cbSize, dwFlags, dwID, hwndTarget, x, y, dwInstanceID, dwSequenceID, ullArguments, cbExtraArgs;
+} GESTUREINFO_FID_CACHE;
+
+GESTUREINFO_FID_CACHE GESTUREINFOFc;
+
+void cacheGESTUREINFOFields(JNIEnv *env, jobject lpObject)
+{
+	if (GESTUREINFOFc.cached) return;
+	GESTUREINFOFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	GESTUREINFOFc.cbSize = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "cbSize", "I");
+	GESTUREINFOFc.dwFlags = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "dwFlags", "I");
+	GESTUREINFOFc.dwID = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "dwID", "I");
+	GESTUREINFOFc.hwndTarget = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "hwndTarget", I_J);
+	GESTUREINFOFc.x = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "x", "S");
+	GESTUREINFOFc.y = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "y", "S");
+	GESTUREINFOFc.dwInstanceID = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "dwInstanceID", "I");
+	GESTUREINFOFc.dwSequenceID = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "dwSequenceID", "I");
+	GESTUREINFOFc.ullArguments = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "ullArguments", "J");
+	GESTUREINFOFc.cbExtraArgs = (*env)->GetFieldID(env, GESTUREINFOFc.clazz, "cbExtraArgs", "I");
+	GESTUREINFOFc.cached = 1;
+}
+
+GESTUREINFO *getGESTUREINFOFields(JNIEnv *env, jobject lpObject, GESTUREINFO *lpStruct)
+{
+	if (!GESTUREINFOFc.cached) cacheGESTUREINFOFields(env, lpObject);
+	lpStruct->cbSize = (*env)->GetIntField(env, lpObject, GESTUREINFOFc.cbSize);
+	lpStruct->dwFlags = (*env)->GetIntField(env, lpObject, GESTUREINFOFc.dwFlags);
+	lpStruct->dwID = (*env)->GetIntField(env, lpObject, GESTUREINFOFc.dwID);
+	lpStruct->hwndTarget = (HWND)(*env)->GetIntLongField(env, lpObject, GESTUREINFOFc.hwndTarget);
+	lpStruct->ptsLocation.x = (*env)->GetShortField(env, lpObject, GESTUREINFOFc.x);
+	lpStruct->ptsLocation.y = (*env)->GetShortField(env, lpObject, GESTUREINFOFc.y);
+	lpStruct->dwInstanceID = (*env)->GetIntField(env, lpObject, GESTUREINFOFc.dwInstanceID);
+	lpStruct->dwSequenceID = (*env)->GetIntField(env, lpObject, GESTUREINFOFc.dwSequenceID);
+	lpStruct->ullArguments = (*env)->GetLongField(env, lpObject, GESTUREINFOFc.ullArguments);
+	lpStruct->cbExtraArgs = (*env)->GetIntField(env, lpObject, GESTUREINFOFc.cbExtraArgs);
+	return lpStruct;
+}
+
+void setGESTUREINFOFields(JNIEnv *env, jobject lpObject, GESTUREINFO *lpStruct)
+{
+	if (!GESTUREINFOFc.cached) cacheGESTUREINFOFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, GESTUREINFOFc.cbSize, (jint)lpStruct->cbSize);
+	(*env)->SetIntField(env, lpObject, GESTUREINFOFc.dwFlags, (jint)lpStruct->dwFlags);
+	(*env)->SetIntField(env, lpObject, GESTUREINFOFc.dwID, (jint)lpStruct->dwID);
+	(*env)->SetIntLongField(env, lpObject, GESTUREINFOFc.hwndTarget, (jintLong)lpStruct->hwndTarget);
+	(*env)->SetShortField(env, lpObject, GESTUREINFOFc.x, (jshort)lpStruct->ptsLocation.x);
+	(*env)->SetShortField(env, lpObject, GESTUREINFOFc.y, (jshort)lpStruct->ptsLocation.y);
+	(*env)->SetIntField(env, lpObject, GESTUREINFOFc.dwInstanceID, (jint)lpStruct->dwInstanceID);
+	(*env)->SetIntField(env, lpObject, GESTUREINFOFc.dwSequenceID, (jint)lpStruct->dwSequenceID);
+	(*env)->SetLongField(env, lpObject, GESTUREINFOFc.ullArguments, (jlong)lpStruct->ullArguments);
+	(*env)->SetIntField(env, lpObject, GESTUREINFOFc.cbExtraArgs, (jint)lpStruct->cbExtraArgs);
+}
+#endif
+
 #ifndef NO_GRADIENT_RECT
 typedef struct GRADIENT_RECT_FID_CACHE {
 	int cached;
@@ -8282,6 +8855,64 @@ void setTOOLINFOFields(JNIEnv *env, jobject lpObject, TOOLINFO *lpStruct)
 }
 #endif
 
+#ifndef NO_TOUCHINPUT
+typedef struct TOUCHINPUT_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y, hSource, dwID, dwFlags, dwMask, dwTime, dwExtraInfo, cxContact, cyContact;
+} TOUCHINPUT_FID_CACHE;
+
+TOUCHINPUT_FID_CACHE TOUCHINPUTFc;
+
+void cacheTOUCHINPUTFields(JNIEnv *env, jobject lpObject)
+{
+	if (TOUCHINPUTFc.cached) return;
+	TOUCHINPUTFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	TOUCHINPUTFc.x = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "x", "I");
+	TOUCHINPUTFc.y = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "y", "I");
+	TOUCHINPUTFc.hSource = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "hSource", I_J);
+	TOUCHINPUTFc.dwID = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "dwID", "I");
+	TOUCHINPUTFc.dwFlags = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "dwFlags", "I");
+	TOUCHINPUTFc.dwMask = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "dwMask", "I");
+	TOUCHINPUTFc.dwTime = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "dwTime", "I");
+	TOUCHINPUTFc.dwExtraInfo = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "dwExtraInfo", I_J);
+	TOUCHINPUTFc.cxContact = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "cxContact", "I");
+	TOUCHINPUTFc.cyContact = (*env)->GetFieldID(env, TOUCHINPUTFc.clazz, "cyContact", "I");
+	TOUCHINPUTFc.cached = 1;
+}
+
+TOUCHINPUT *getTOUCHINPUTFields(JNIEnv *env, jobject lpObject, TOUCHINPUT *lpStruct)
+{
+	if (!TOUCHINPUTFc.cached) cacheTOUCHINPUTFields(env, lpObject);
+	lpStruct->x = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.x);
+	lpStruct->y = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.y);
+	lpStruct->hSource = (HWND)(*env)->GetIntLongField(env, lpObject, TOUCHINPUTFc.hSource);
+	lpStruct->dwID = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.dwID);
+	lpStruct->dwFlags = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.dwFlags);
+	lpStruct->dwMask = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.dwMask);
+	lpStruct->dwTime = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.dwTime);
+	lpStruct->dwExtraInfo = (*env)->GetIntLongField(env, lpObject, TOUCHINPUTFc.dwExtraInfo);
+	lpStruct->cxContact = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.cxContact);
+	lpStruct->cyContact = (*env)->GetIntField(env, lpObject, TOUCHINPUTFc.cyContact);
+	return lpStruct;
+}
+
+void setTOUCHINPUTFields(JNIEnv *env, jobject lpObject, TOUCHINPUT *lpStruct)
+{
+	if (!TOUCHINPUTFc.cached) cacheTOUCHINPUTFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.x, (jint)lpStruct->x);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.y, (jint)lpStruct->y);
+	(*env)->SetIntLongField(env, lpObject, TOUCHINPUTFc.hSource, (jintLong)lpStruct->hSource);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.dwID, (jint)lpStruct->dwID);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.dwFlags, (jint)lpStruct->dwFlags);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.dwMask, (jint)lpStruct->dwMask);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.dwTime, (jint)lpStruct->dwTime);
+	(*env)->SetIntLongField(env, lpObject, TOUCHINPUTFc.dwExtraInfo, (jintLong)lpStruct->dwExtraInfo);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.cxContact, (jint)lpStruct->cxContact);
+	(*env)->SetIntField(env, lpObject, TOUCHINPUTFc.cyContact, (jint)lpStruct->cyContact);
+}
+#endif
+
 #ifndef NO_TRACKMOUSEEVENT
 typedef struct TRACKMOUSEEVENT_FID_CACHE {
 	int cached;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h
index b13086f..aa120cb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -119,6 +119,54 @@ void setCANDIDATEFORMFields(JNIEnv *env, jobject lpObject, CANDIDATEFORM *lpStru
 #define CANDIDATEFORM_sizeof() 0
 #endif
 
+#ifndef NO_CERT_CONTEXT
+void cacheCERT_CONTEXTFields(JNIEnv *env, jobject lpObject);
+CERT_CONTEXT *getCERT_CONTEXTFields(JNIEnv *env, jobject lpObject, CERT_CONTEXT *lpStruct);
+void setCERT_CONTEXTFields(JNIEnv *env, jobject lpObject, CERT_CONTEXT *lpStruct);
+#define CERT_CONTEXT_sizeof() sizeof(CERT_CONTEXT)
+#else
+#define cacheCERT_CONTEXTFields(a,b)
+#define getCERT_CONTEXTFields(a,b,c) NULL
+#define setCERT_CONTEXTFields(a,b,c)
+#define CERT_CONTEXT_sizeof() 0
+#endif
+
+#ifndef NO_CERT_INFO
+void cacheCERT_INFOFields(JNIEnv *env, jobject lpObject);
+CERT_INFO *getCERT_INFOFields(JNIEnv *env, jobject lpObject, CERT_INFO *lpStruct);
+void setCERT_INFOFields(JNIEnv *env, jobject lpObject, CERT_INFO *lpStruct);
+#define CERT_INFO_sizeof() sizeof(CERT_INFO)
+#else
+#define cacheCERT_INFOFields(a,b)
+#define getCERT_INFOFields(a,b,c) NULL
+#define setCERT_INFOFields(a,b,c)
+#define CERT_INFO_sizeof() 0
+#endif
+
+#ifndef NO_CERT_NAME_BLOB
+void cacheCERT_NAME_BLOBFields(JNIEnv *env, jobject lpObject);
+CERT_NAME_BLOB *getCERT_NAME_BLOBFields(JNIEnv *env, jobject lpObject, CERT_NAME_BLOB *lpStruct);
+void setCERT_NAME_BLOBFields(JNIEnv *env, jobject lpObject, CERT_NAME_BLOB *lpStruct);
+#define CERT_NAME_BLOB_sizeof() sizeof(CERT_NAME_BLOB)
+#else
+#define cacheCERT_NAME_BLOBFields(a,b)
+#define getCERT_NAME_BLOBFields(a,b,c) NULL
+#define setCERT_NAME_BLOBFields(a,b,c)
+#define CERT_NAME_BLOB_sizeof() 0
+#endif
+
+#ifndef NO_CERT_PUBLIC_KEY_INFO
+void cacheCERT_PUBLIC_KEY_INFOFields(JNIEnv *env, jobject lpObject);
+CERT_PUBLIC_KEY_INFO *getCERT_PUBLIC_KEY_INFOFields(JNIEnv *env, jobject lpObject, CERT_PUBLIC_KEY_INFO *lpStruct);
+void setCERT_PUBLIC_KEY_INFOFields(JNIEnv *env, jobject lpObject, CERT_PUBLIC_KEY_INFO *lpStruct);
+#define CERT_PUBLIC_KEY_INFO_sizeof() sizeof(CERT_PUBLIC_KEY_INFO)
+#else
+#define cacheCERT_PUBLIC_KEY_INFOFields(a,b)
+#define getCERT_PUBLIC_KEY_INFOFields(a,b,c) NULL
+#define setCERT_PUBLIC_KEY_INFOFields(a,b,c)
+#define CERT_PUBLIC_KEY_INFO_sizeof() 0
+#endif
+
 #ifndef NO_CHOOSECOLOR
 void cacheCHOOSECOLORFields(JNIEnv *env, jobject lpObject);
 CHOOSECOLOR *getCHOOSECOLORFields(JNIEnv *env, jobject lpObject, CHOOSECOLOR *lpStruct);
@@ -179,6 +227,54 @@ void setCREATESTRUCTFields(JNIEnv *env, jobject lpObject, CREATESTRUCT *lpStruct
 #define CREATESTRUCT_sizeof() 0
 #endif
 
+#ifndef NO_CRYPT_ALGORITHM_IDENTIFIER
+void cacheCRYPT_ALGORITHM_IDENTIFIERFields(JNIEnv *env, jobject lpObject);
+CRYPT_ALGORITHM_IDENTIFIER *getCRYPT_ALGORITHM_IDENTIFIERFields(JNIEnv *env, jobject lpObject, CRYPT_ALGORITHM_IDENTIFIER *lpStruct);
+void setCRYPT_ALGORITHM_IDENTIFIERFields(JNIEnv *env, jobject lpObject, CRYPT_ALGORITHM_IDENTIFIER *lpStruct);
+#define CRYPT_ALGORITHM_IDENTIFIER_sizeof() sizeof(CRYPT_ALGORITHM_IDENTIFIER)
+#else
+#define cacheCRYPT_ALGORITHM_IDENTIFIERFields(a,b)
+#define getCRYPT_ALGORITHM_IDENTIFIERFields(a,b,c) NULL
+#define setCRYPT_ALGORITHM_IDENTIFIERFields(a,b,c)
+#define CRYPT_ALGORITHM_IDENTIFIER_sizeof() 0
+#endif
+
+#ifndef NO_CRYPT_BIT_BLOB
+void cacheCRYPT_BIT_BLOBFields(JNIEnv *env, jobject lpObject);
+CRYPT_BIT_BLOB *getCRYPT_BIT_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_BIT_BLOB *lpStruct);
+void setCRYPT_BIT_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_BIT_BLOB *lpStruct);
+#define CRYPT_BIT_BLOB_sizeof() sizeof(CRYPT_BIT_BLOB)
+#else
+#define cacheCRYPT_BIT_BLOBFields(a,b)
+#define getCRYPT_BIT_BLOBFields(a,b,c) NULL
+#define setCRYPT_BIT_BLOBFields(a,b,c)
+#define CRYPT_BIT_BLOB_sizeof() 0
+#endif
+
+#ifndef NO_CRYPT_INTEGER_BLOB
+void cacheCRYPT_INTEGER_BLOBFields(JNIEnv *env, jobject lpObject);
+CRYPT_INTEGER_BLOB *getCRYPT_INTEGER_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_INTEGER_BLOB *lpStruct);
+void setCRYPT_INTEGER_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_INTEGER_BLOB *lpStruct);
+#define CRYPT_INTEGER_BLOB_sizeof() sizeof(CRYPT_INTEGER_BLOB)
+#else
+#define cacheCRYPT_INTEGER_BLOBFields(a,b)
+#define getCRYPT_INTEGER_BLOBFields(a,b,c) NULL
+#define setCRYPT_INTEGER_BLOBFields(a,b,c)
+#define CRYPT_INTEGER_BLOB_sizeof() 0
+#endif
+
+#ifndef NO_CRYPT_OBJID_BLOB
+void cacheCRYPT_OBJID_BLOBFields(JNIEnv *env, jobject lpObject);
+CRYPT_OBJID_BLOB *getCRYPT_OBJID_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_OBJID_BLOB *lpStruct);
+void setCRYPT_OBJID_BLOBFields(JNIEnv *env, jobject lpObject, CRYPT_OBJID_BLOB *lpStruct);
+#define CRYPT_OBJID_BLOB_sizeof() sizeof(CRYPT_OBJID_BLOB)
+#else
+#define cacheCRYPT_OBJID_BLOBFields(a,b)
+#define getCRYPT_OBJID_BLOBFields(a,b,c) NULL
+#define setCRYPT_OBJID_BLOBFields(a,b,c)
+#define CRYPT_OBJID_BLOB_sizeof() 0
+#endif
+
 #ifndef NO_DEVMODE
 void cacheDEVMODEFields(JNIEnv *env, jobject lpObject);
 DEVMODE *getDEVMODEFields(JNIEnv *env, jobject lpObject, DEVMODE *lpStruct);
@@ -359,6 +455,30 @@ void setFILETIMEFields(JNIEnv *env, jobject lpObject, FILETIME *lpStruct);
 #define FILETIME_sizeof() 0
 #endif
 
+#ifndef NO_FLICK_DATA
+void cacheFLICK_DATAFields(JNIEnv *env, jobject lpObject);
+FLICK_DATA *getFLICK_DATAFields(JNIEnv *env, jobject lpObject, FLICK_DATA *lpStruct);
+void setFLICK_DATAFields(JNIEnv *env, jobject lpObject, FLICK_DATA *lpStruct);
+#define FLICK_DATA_sizeof() sizeof(FLICK_DATA)
+#else
+#define cacheFLICK_DATAFields(a,b)
+#define getFLICK_DATAFields(a,b,c) NULL
+#define setFLICK_DATAFields(a,b,c)
+#define FLICK_DATA_sizeof() 0
+#endif
+
+#ifndef NO_FLICK_POINT
+void cacheFLICK_POINTFields(JNIEnv *env, jobject lpObject);
+FLICK_POINT *getFLICK_POINTFields(JNIEnv *env, jobject lpObject, FLICK_POINT *lpStruct);
+void setFLICK_POINTFields(JNIEnv *env, jobject lpObject, FLICK_POINT *lpStruct);
+#define FLICK_POINT_sizeof() sizeof(FLICK_POINT)
+#else
+#define cacheFLICK_POINTFields(a,b)
+#define getFLICK_POINTFields(a,b,c) NULL
+#define setFLICK_POINTFields(a,b,c)
+#define FLICK_POINT_sizeof() 0
+#endif
+
 #ifndef NO_GCP_RESULTS
 void cacheGCP_RESULTSFields(JNIEnv *env, jobject lpObject);
 GCP_RESULTS *getGCP_RESULTSFields(JNIEnv *env, jobject lpObject, GCP_RESULTS *lpStruct);
@@ -371,6 +491,30 @@ void setGCP_RESULTSFields(JNIEnv *env, jobject lpObject, GCP_RESULTS *lpStruct);
 #define GCP_RESULTS_sizeof() 0
 #endif
 
+#ifndef NO_GESTURECONFIG
+void cacheGESTURECONFIGFields(JNIEnv *env, jobject lpObject);
+GESTURECONFIG *getGESTURECONFIGFields(JNIEnv *env, jobject lpObject, GESTURECONFIG *lpStruct);
+void setGESTURECONFIGFields(JNIEnv *env, jobject lpObject, GESTURECONFIG *lpStruct);
+#define GESTURECONFIG_sizeof() sizeof(GESTURECONFIG)
+#else
+#define cacheGESTURECONFIGFields(a,b)
+#define getGESTURECONFIGFields(a,b,c) NULL
+#define setGESTURECONFIGFields(a,b,c)
+#define GESTURECONFIG_sizeof() 0
+#endif
+
+#ifndef NO_GESTUREINFO
+void cacheGESTUREINFOFields(JNIEnv *env, jobject lpObject);
+GESTUREINFO *getGESTUREINFOFields(JNIEnv *env, jobject lpObject, GESTUREINFO *lpStruct);
+void setGESTUREINFOFields(JNIEnv *env, jobject lpObject, GESTUREINFO *lpStruct);
+#define GESTUREINFO_sizeof() sizeof(GESTUREINFO)
+#else
+#define cacheGESTUREINFOFields(a,b)
+#define getGESTUREINFOFields(a,b,c) NULL
+#define setGESTUREINFOFields(a,b,c)
+#define GESTUREINFO_sizeof() 0
+#endif
+
 #ifndef NO_GRADIENT_RECT
 void cacheGRADIENT_RECTFields(JNIEnv *env, jobject lpObject);
 GRADIENT_RECT *getGRADIENT_RECTFields(JNIEnv *env, jobject lpObject, GRADIENT_RECT *lpStruct);
@@ -1727,6 +1871,18 @@ void setTOOLINFOFields(JNIEnv *env, jobject lpObject, TOOLINFO *lpStruct);
 #define TOOLINFO_sizeof() 0
 #endif
 
+#ifndef NO_TOUCHINPUT
+void cacheTOUCHINPUTFields(JNIEnv *env, jobject lpObject);
+TOUCHINPUT *getTOUCHINPUTFields(JNIEnv *env, jobject lpObject, TOUCHINPUT *lpStruct);
+void setTOUCHINPUTFields(JNIEnv *env, jobject lpObject, TOUCHINPUT *lpStruct);
+#define TOUCHINPUT_sizeof() sizeof(TOUCHINPUT)
+#else
+#define cacheTOUCHINPUTFields(a,b)
+#define getTOUCHINPUTFields(a,b,c) NULL
+#define setTOUCHINPUTFields(a,b,c)
+#define TOUCHINPUT_sizeof() 0
+#endif
+
 #ifndef NO_TRACKMOUSEEVENT
 void cacheTRACKMOUSEEVENTFields(JNIEnv *env, jobject lpObject);
 TRACKMOUSEEVENT *getTRACKMOUSEEVENTFields(JNIEnv *env, jobject lpObject, TRACKMOUSEEVENT *lpStruct);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt.rc b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt.rc
index 4bdbcfb..a77e5ea 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt.rc	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt.rc	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@ BEGIN
             VALUE "FileDescription", "SWT for Windows native library\0"
             VALUE "FileVersion", SWT_FILE_VERSION
             VALUE "InternalName", "SWT\0"
-            VALUE "LegalCopyright", "Copyright (c) 2000, 2006 IBM Corp.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright (c) 2000, 2011 IBM Corp.  All Rights Reserved.\0"
             VALUE "OriginalFilename", SWT_ORG_FILENAME
             VALUE "ProductName", "Standard Widget Toolkit\0"
             VALUE "ProductVersion", "0,0,0,0\0"
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_gdip.rc b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_gdip.rc
index e46095f..ecf1bd0 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_gdip.rc	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/library/swt_gdip.rc	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ BEGIN
             VALUE "FileDescription", "SWT for Windows native library\0"
             VALUE "FileVersion", SWT_FILE_VERSION
             VALUE "InternalName", "SWT\0"
-            VALUE "LegalCopyright", "Copyright (c) 2000, 2006 IBM Corp.  All Rights Reserved.\0"
+            VALUE "LegalCopyright", "Copyright (c) 2000, 2011 IBM Corp.  All Rights Reserved.\0"
             VALUE "OriginalFilename", SWT_ORG_FILENAME
             VALUE "ProductName", "Standard Widget Toolkit\0"
             VALUE "ProductVersion", "0,0,0,0\0"
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java
index 1b9c11b..1a0041c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/COM.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -595,6 +595,7 @@ public static final native int OleSetClipboard(int /*long*/ pDataObject);
 /** @param pUnk cast=(LPUNKNOWN) */
 public static final native int OleSetContainedObject(int /*long*/ pUnk, boolean fContained);
 /**
+ * @method flags=trycatch
  * @param holemenu cast=(HOLEMENU)
  * @param hwndFrame cast=(HWND)
  * @param hwndActiveObject cast=(HWND)
@@ -645,6 +646,8 @@ public static final native int /*long*/ SysAllocString(char [] sz);
 public static final native void SysFreeString(int /*long*/ bstr);
 /** @param bstr cast=(BSTR) */
 public static final native int SysStringByteLen(int /*long*/ bstr);
+/** @param bstr cast=(BSTR) */
+public static final native int SysStringLen(int /*long*/ bstr);
 /**
  * @param pvargDest cast=(VARIANTARG FAR* )
  * @param pvarSrc cast=(VARIANTARG FAR* )
@@ -673,13 +676,11 @@ public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, char[
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, char[] arg0, int arg1, int arg2, int arg3, int arg4, int [] arg5);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, char[] arg0, long arg1, int arg2, int arg3, int arg4, long[] arg5);
 
-public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long arg0, int[] arg1);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long arg0, long[] arg1);
 
-public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int arg0, long arg1);
-
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, int[] arg2);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long arg0, int arg1, long[] arg2);
+public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long arg0, long arg1, long[] arg2);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, long[] arg2);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int arg0, long arg1, int[] arg2);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long arg0, int arg1, int[] arg2);
@@ -716,6 +717,8 @@ public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int a
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long arg0, boolean arg1);
 
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, boolean arg0);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, boolean arg0, int arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, boolean arg0, long arg1);
 
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, CAUUID arg0);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, CONTROLINFO arg0);
@@ -743,6 +746,15 @@ public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, LICIN
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, RECT arg0, int arg1, boolean arg2);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, RECT arg0, long arg1, boolean arg2);
 
+/**
+ * @param arg0 flags=struct
+ */
+public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, RECT arg0, int arg1, int arg2);
+/**
+ * @param arg0 flags=struct
+ */
+public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, RECT arg0, long arg1, long arg2);
+
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, RECT arg0, RECT arg1);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, RECT arg0);
 
@@ -755,6 +767,12 @@ public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int a
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, int arg2, DISPPARAMS arg3, int arg4, EXCEPINFO arg5, int arg6);
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, int arg2, DISPPARAMS arg3, long arg4, EXCEPINFO arg5, long arg6);
 
+public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, char[] pszPropName, int[] pVar, int[] pErrorLog);
+public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, char[] pszPropName, int pVar, int[] pErrorLog);
+
+public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int type, int listener, boolean useCapture);
+public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long type, long listener, boolean useCapture);
+
 /** @param pStg cast=(IStorage *) */
 public static final native int WriteClassStg(int /*long*/ pStg, GUID rclsid);
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/GUID.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/GUID.java
index 8a4c301..bd1b4be 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/GUID.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/GUID.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,4 +16,24 @@ public final class GUID {
 	public short Data3;
 	public byte[] Data4 = new byte[8];
 	public static final int sizeof = COM.GUID_sizeof ();
+
+	static final String zeros = "00000000"; //$NON-NLS-1$
+
+static String toHex (int v, int length) {
+	String t = Integer.toHexString (v).toUpperCase ();
+	int tlen = t.length ();
+	if (tlen > length) {
+		t = t.substring (tlen - length);
+	}
+	return zeros.substring (0, Math.max (0, length - tlen)) + t;
+}
+
+public String toString () {
+	return '{' + toHex (Data1, 8) + '-' + 
+    	toHex (Data2, 4) + '-' + 
+    	toHex (Data3, 4) + '-' + 
+    	toHex (Data4[0], 2) + toHex (Data4[1], 2) + '-' + 
+    	toHex (Data4[2], 2) + toHex (Data4[3], 2) + toHex (Data4[4], 2) + toHex (Data4[5], 2) + toHex (Data4[6], 2) + toHex (Data4[7], 2) + '}';
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IPropertyBag.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IPropertyBag.java
new file mode 100644
index 0000000..98e0b4e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IPropertyBag.java	
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.ole.win32;
+
+
+public class IPropertyBag extends IUnknown {
+
+public IPropertyBag (int /*long*/ address) {
+	super (address);
+}
+
+public int Read (int /*long*/ pszPropName, int /*long*/ pVar, int /*long*/[] pErrorLog) {
+	return COM.VtblCall (3, getAddress(), pszPropName, pVar, pErrorLog);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_CONTEXT.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_CONTEXT.java
new file mode 100644
index 0000000..d23ee0e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_CONTEXT.java	
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CERT_CONTEXT {
+	public int dwCertEncodingType;
+	/** @field cast=(BYTE *) */
+	public int /*long*/ pbCertEncoded;
+	public int cbCertEncoded;
+	/** @field cast=(PCERT_INFO) */
+	public int /*long*/ pCertInfo;
+	/** @field cast=(HCERTSTORE) */
+	public int /*long*/ hCertStore;
+
+	public static final int sizeof = OS.CERT_CONTEXT_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_INFO.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_INFO.java
new file mode 100644
index 0000000..64261e7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_INFO.java	
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CERT_INFO {
+	public int dwVersion;
+	public CRYPT_INTEGER_BLOB SerialNumber = new CRYPT_INTEGER_BLOB ();
+	public CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm = new CRYPT_ALGORITHM_IDENTIFIER ();
+	public CERT_NAME_BLOB Issuer = new CERT_NAME_BLOB ();
+	public FILETIME NotBefore = new FILETIME ();
+	public FILETIME NotAfter = new FILETIME ();
+	public CERT_NAME_BLOB Subject = new CERT_NAME_BLOB ();
+	public CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo = new CERT_PUBLIC_KEY_INFO ();
+	public CRYPT_BIT_BLOB IssuerUniqueId = new CRYPT_BIT_BLOB ();
+	public CRYPT_BIT_BLOB SubjectUniqueId = new CRYPT_BIT_BLOB ();
+	public int cExtension;
+	/** @field cast=(PCERT_EXTENSION) */
+	public int /*long*/ rgExtension;
+
+	public static final int sizeof = OS.CERT_INFO_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_NAME_BLOB.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_NAME_BLOB.java
new file mode 100644
index 0000000..351c9d7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_NAME_BLOB.java	
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CERT_NAME_BLOB {
+	public int cbData;
+	/** @field cast=(BYTE *) */
+	public int /*long*/ pbData;
+
+	static final public int sizeof = OS.CERT_NAME_BLOB_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_PUBLIC_KEY_INFO.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_PUBLIC_KEY_INFO.java
new file mode 100644
index 0000000..1d62eae
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CERT_PUBLIC_KEY_INFO.java	
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CERT_PUBLIC_KEY_INFO {
+	 public CRYPT_ALGORITHM_IDENTIFIER Algorithm = new CRYPT_ALGORITHM_IDENTIFIER ();
+	 public CRYPT_BIT_BLOB PublicKey = new CRYPT_BIT_BLOB ();
+
+	 static final public int sizeof = OS.CERT_PUBLIC_KEY_INFO_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_ALGORITHM_IDENTIFIER.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_ALGORITHM_IDENTIFIER.java
new file mode 100644
index 0000000..bf948af
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_ALGORITHM_IDENTIFIER.java	
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CRYPT_ALGORITHM_IDENTIFIER {
+	/** @field cast=(LPSTR) */
+	public int /*long*/ pszObjId;
+	public CRYPT_OBJID_BLOB Parameters = new CRYPT_OBJID_BLOB ();
+
+	static final public int sizeof = OS.CRYPT_ALGORITHM_IDENTIFIER_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_BIT_BLOB.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_BIT_BLOB.java
new file mode 100644
index 0000000..9b83415
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_BIT_BLOB.java	
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CRYPT_BIT_BLOB {
+	public int cbData;
+	/** @field cast=(BYTE *) */
+	public int /*long*/ pbData;
+	public int cUnusedBits;
+
+	static final public int sizeof = OS.CRYPT_BIT_BLOB_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_INTEGER_BLOB.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_INTEGER_BLOB.java
new file mode 100644
index 0000000..9eb3b35
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_INTEGER_BLOB.java	
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CRYPT_INTEGER_BLOB {
+	public int cbData;
+	/** @field cast=(BYTE *) */
+	public int /*long*/ pbData;
+
+	static final public int sizeof = OS.CRYPT_INTEGER_BLOB_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_OBJID_BLOB.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_OBJID_BLOB.java
new file mode 100644
index 0000000..23ab023
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CRYPT_OBJID_BLOB.java	
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+
+public class CRYPT_OBJID_BLOB {
+	public int cbData;
+	/** @field cast=(BYTE *) */
+	public int /*long*/ pbData;
+
+	static final public int sizeof = OS.CRYPT_OBJID_BLOB_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/FLICK_DATA.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/FLICK_DATA.java
new file mode 100644
index 0000000..2f6dcf3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/FLICK_DATA.java	
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.swt.internal.win32;
+
+public class FLICK_DATA {
+	public int iFlickActionCommandCode;
+	public byte iFlickDirection;
+	public boolean fControlModifier;
+	public boolean fMenuModifier;
+	public boolean fAltGRModifier;
+	public boolean fWinModifier;
+	public boolean fShiftModifier;
+	public int iReserved;
+	public boolean fOnInkingSurface;
+	public int iActionArgument;
+	public static final int sizeof = OS.FLICK_DATA_sizeof();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/FLICK_POINT.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/FLICK_POINT.java
new file mode 100644
index 0000000..90edaa0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/FLICK_POINT.java	
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+public class FLICK_POINT {
+	public int x;
+	public int y;
+	public static final int sizeof = OS.FLICK_POINT_sizeof();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/GESTURECONFIG.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/GESTURECONFIG.java
new file mode 100644
index 0000000..87ba865
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/GESTURECONFIG.java	
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+public class GESTURECONFIG {
+	public int dwID;                     // gesture ID
+    public int dwWant;                   // settings related to gesture ID that are to be turned on
+    public int dwBlock;                  // settings related to gesture ID that are to be turned off
+    public static final int sizeof = OS.GESTURECONFIG_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/GESTUREINFO.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/GESTUREINFO.java
new file mode 100644
index 0000000..6329aba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/GESTUREINFO.java	
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+public class GESTUREINFO {
+	 public int cbSize;
+	 public int dwFlags;
+	 public int dwID;
+	 /** @field cast=(HWND) */
+	 public int /*long*/ hwndTarget;
+	 //	POINTS ptsLocation
+	 /** @field accessor=ptsLocation.x */
+	 public short x;
+	 /** @field accessor=ptsLocation.y */
+	 public short y;
+	 public int dwInstanceID;
+	 public int dwSequenceID;
+	 public long ullArguments;
+	 public int cbExtraArgs;
+	 public static final int sizeof = OS.GESTUREINFO_sizeof ();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java
index f785acb..12021c1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -324,6 +324,7 @@ public class OS extends C {
 	public static final int BS_GROUPBOX = 0x7;
 	public static final int BS_ICON = 0x40;
 	public static final int BS_LEFT = 0x100;
+	public static final int BS_MULTILINE = 0x2000;
 	public static final int BS_NOTIFY = 0x4000;
 	public static final int BS_OWNERDRAW = 0xb;
 	public static final int BS_PATTERN = 0x3;
@@ -356,9 +357,9 @@ public class OS extends C {
 	public static final int CBS_CHECKEDDISABLED = 8;
 	public static final int CBS_CHECKEDHOT = 6;
 	public static final int CBS_CHECKEDPRESSED = 7;
-	public static final int CBS_MIXEDDISABLED = 0;
-	public static final int CBS_MIXEDHOT = 0;
-	public static final int CBS_MIXEDPRESSED = 0;
+	public static final int CBS_MIXEDDISABLED = 12;
+	public static final int CBS_MIXEDHOT = 10;
+	public static final int CBS_MIXEDPRESSED = 11;
 	public static final int CBS_UNCHECKEDDISABLED = 4;
 	public static final int CBS_UNCHECKEDHOT = 2;
 	public static final int CBS_UNCHECKEDPRESSED = 3;
@@ -437,6 +438,7 @@ public class OS extends C {
 	public static final int CDRF_NOTIFYSUBITEMDRAW = 0x00000020;
 	public static final int CDRF_SKIPDEFAULT = 0x04;
 	public static final int CDRF_SKIPPOSTPAINT = 0x00000100;
+	public static final int CERT_SIMPLE_NAME_STR = 1;
 	public static final int CFE_AUTOCOLOR = 0x40000000;
 	public static final int CFE_ITALIC = 0x2;
 	public static final int CFE_STRIKEOUT = 0x8;
@@ -547,9 +549,13 @@ public class OS extends C {
 	public static final int DM_SETDEFID = 0x401;
 	public static final int DM_COLLATE = 0x00008000;
 	public static final int DM_COPIES = 0x00000100;
+	public static final int DM_DUPLEX = 0x00001000;
 	public static final int DM_ORIENTATION = 0x00000001;
 	public static final short DMORIENT_PORTRAIT = 1;
 	public static final short DMORIENT_LANDSCAPE = 2;
+	public static final short DMDUP_SIMPLEX = 1;
+	public static final short DMDUP_VERTICAL = 2;
+	public static final short DMDUP_HORIZONTAL = 3;
 	public static final int DSS_DISABLED = 0x20;
 	public static final int DSTINVERT = 0x550009;
 	public static final int DST_BITMAP = 0x4;
@@ -572,6 +578,7 @@ public class OS extends C {
 	public static final int DT_WORDBREAK = 0x10;
 	public static final int DTM_FIRST = 0x1000;
 	public static final int DTM_GETSYSTEMTIME = DTM_FIRST + 1; 
+	public static final int DTM_GETIDEALSIZE = DTM_FIRST + 15;
 	public static final int DTM_SETFORMAT = IsUnicode ? DTM_FIRST + 50 : DTM_FIRST + 5;
 	public static final int DTM_SETSYSTEMTIME = DTM_FIRST + 2;
 	public static final int DTN_FIRST = 0xFFFFFD08;
@@ -642,6 +649,7 @@ public class OS extends C {
 	public static final int EN_ALIGN_RTL_EC = 0x0701;
 	public static final int EN_CHANGE = 0x300;
 	public static final int EP_EDITTEXT = 1;
+	public static final int ERROR_FILE_NOT_FOUND = 0x2;
 	public static final int ERROR_NO_MORE_ITEMS = 0x103;
 	public static final int ESB_DISABLE_BOTH = 0x3;
 	public static final int ESB_ENABLE_BOTH = 0x0;
@@ -673,6 +681,15 @@ public class OS extends C {
 	public static final int FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
 	public static final int FILE_ATTRIBUTE_NORMAL = 0x00000080;
 	public static final int FILE_MAP_READ = 4;
+	public static final int FLICKDIRECTION_RIGHT = 0;
+	public static final int FLICKDIRECTION_UPRIGHT = 1;
+	public static final int FLICKDIRECTION_UP = 2;
+	public static final int FLICKDIRECTION_UPLEFT = 3;
+	public static final int FLICKDIRECTION_LEFT = 4;
+	public static final int FLICKDIRECTION_DOWNLEFT = 5;
+	public static final int FLICKDIRECTION_DOWN = 6;
+	public static final int FLICKDIRECTION_DOWNRIGHT = 7;
+	public static final int FLICKDIRECTION_INVALID = 8;
 	public static final int FNERR_INVALIDFILENAME = 0x3002;
 	public static final int FNERR_BUFFERTOOSMALL = 0x3003;
 	public static final int FOF_SILENT = 0x0004;
@@ -699,12 +716,23 @@ public class OS extends C {
 	public static final int GCS_CURSORPOS = 0x0080;
 	public static final int GDT_VALID = 0;
 	public static final int GET_FEATURE_FROM_PROCESS = 0x2;
+	public static final int GF_BEGIN = 1;
+	public static final int GF_INERTIA = 2;
+	public static final int GF_END = 4;
 	public static final int GGI_MARK_NONEXISTING_GLYPHS = 1;
+	public static final int GID_BEGIN = 1;
+	public static final int GID_END = 2;
+	public static final int GID_ZOOM = 3;
+	public static final int GID_PAN = 4;
+	public static final int GID_ROTATE = 5;
+	public static final int GID_TWOFINGERTAP = 6;
+	public static final int GID_PRESSANDTAP = 7;
 	public static final int GLPS_CLOSED = 1;
 	public static final int GLPS_OPENED = 2;
 	public static final int GM_ADVANCED = 2;
 	public static final int GMDI_USEDISABLED = 0x1;
 	public static final int GMEM_FIXED = 0x0;
+	public static final int GMEM_MOVEABLE = 0x2;
 	public static final int GMEM_ZEROINIT = 0x40;
 	public static final int GN_CONTEXTMENU = 1000;
 	public static final int GPTR = 0x40;
@@ -879,6 +907,7 @@ public class OS extends C {
 	public static final int KEY_NOTIFY = 0x10;
 	public static final int KEY_QUERY_VALUE = 0x1;
 	public static final int KEY_READ = 0x20019;
+	public static final int KEY_WRITE = 0x20006;
 	public static final int KEYEVENTF_EXTENDEDKEY = 0x0001;
 	public static final int KEYEVENTF_KEYUP = 0x0002;
 	public static final int L_MAX_URL_LENGTH = 2084;
@@ -1149,6 +1178,7 @@ public class OS extends C {
 	public static final int MF_UNCHECKED = 0x0;
 	public static final int MIIM_BITMAP = 0x80;
 	public static final int MIIM_DATA = 0x20;
+	public static final int MIIM_FTYPE = 0x100;
 	public static final int MIIM_ID = 0x2;
 	public static final int MIIM_STATE = 0x1;
 	public static final int MIIM_STRING = 0x40;
@@ -1198,6 +1228,8 @@ public class OS extends C {
 	public static final int MWMO_INPUTAVAILABLE = 0x4;
 	public static final int MWT_LEFTMULTIPLY = 2;
 	public static final int NI_COMPOSITIONSTR = 0x15;
+	public static final int NID_READY = 0x80;
+	public static final int NID_MULTI_INPUT = 0x40;	
 	public static final int NIF_ICON = 0x00000002;
 	public static final int NIF_INFO = 0x00000010;
 	public static final int NIF_MESSAGE = 0x00000001;
@@ -1403,6 +1435,8 @@ public class OS extends C {
 	public static final int RDW_UPDATENOW = 0x100;
 	public static final int READ_CONTROL = 0x20000;
 	public static final String REBARCLASSNAME = "ReBarWindow32"; //$NON-NLS-1$
+	public static final int REG_DWORD = 4;
+	public static final int REG_OPTION_VOLATILE = 0x1;
 	public static final int RGN_AND = 0x1;
 	public static final int RGN_COPY = 5;
 	public static final int RGN_DIFF = 0x4;
@@ -1512,6 +1546,8 @@ public class OS extends C {
 	public static final int SM_CMOUSEBUTTONS = 43;
 	public static final int SM_CYSCREEN = 0x1;
 	public static final int SM_CYVSCROLL = 0x14;
+	public static final int SM_DIGITIZER = 94;
+	public static final int SM_MAXIMUMTOUCHES= 95;	
 //	public static final int SM_DBCSENABLED = 0x2A;
 //	public static final int SM_IMMENABLED = 0x52;
 	public static final int SPI_GETFONTSMOOTHINGTYPE = 0x200A;
@@ -1732,6 +1768,13 @@ public class OS extends C {
 	public static final int TME_QUERY = 0x40000000;
 	public static final int TMPF_VECTOR = 0x2;
 	public static final int TMT_CONTENTMARGINS = 3602;
+	public static final int TOUCHEVENTF_MOVE = 0x0001;
+	public static final int TOUCHEVENTF_DOWN = 0x0002;
+	public static final int TOUCHEVENTF_UP = 0x0004;
+	public static final int TOUCHEVENTF_INRANGE = 0x0008;
+	public static final int TOUCHEVENTF_PRIMARY = 0x0010;
+	public static final int TOUCHEVENTF_NOCOALESCE = 0x0020;
+	public static final int TOUCHEVENTF_PALM = 0x0080;	
 	public static final String TOOLBARCLASSNAME = "ToolbarWindow32"; //$NON-NLS-1$
 	public static final String TOOLTIPS_CLASS = "tooltips_class32"; //$NON-NLS-1$
 	public static final int TP_BUTTON = 1;
@@ -1977,6 +2020,7 @@ public class OS extends C {
 	public static final int VK_MENU = 0x12;
 	public static final int VK_MULTIPLY = 0x6A;
 	public static final int VK_N = 0x4e;
+	public static final int VK_O = 0x4f;
 	public static final int VK_NEXT = 0x22;
 	public static final int VK_NUMLOCK = 0x90;
 	public static final int VK_NUMPAD0 = 0x60;
@@ -2060,6 +2104,7 @@ public class OS extends C {
 	public static final int WM_ENDSESSION = 0x16;
 	public static final int WM_ENTERIDLE = 0x121;
 	public static final int WM_ERASEBKGND = 0x14;
+	public static final int WM_GESTURE = 0x0119;
 	public static final int WM_GETDLGCODE = 0x87;
 	public static final int WM_GETFONT = 0x31;
 //	public static final int WM_GETICON = 0x7f;
@@ -2132,9 +2177,12 @@ public class OS extends C {
 	public static final int WM_SYSCOMMAND = 0x112;
 	public static final int WM_SYSKEYDOWN = 0x104;
 	public static final int WM_SYSKEYUP = 0x105;
+	public static final int WM_TABLET_FLICK = 0x02C0 + 11;	
 	public static final int WM_TIMER = 0x113;
 	public static final int WM_THEMECHANGED = 0x031a;
+	public static final int WM_TOUCH = 0x240;
 	public static final int WM_UNDO = 0x304;
+	public static final int WM_UNINITMENUPOPUP = 0x0125;
 	public static final int WM_UPDATEUISTATE = 0x0128;
 	public static final int WM_USER = 0x400;
 	public static final int WM_VSCROLL = 0x115;
@@ -2179,6 +2227,7 @@ public class OS extends C {
 	public static final int WM_XBUTTONDBLCLK = 0x020D;
 	public static final int XBUTTON1 = 0x1;
 	public static final int XBUTTON2 = 0x2;
+	public static final int X509_ASN_ENCODING = 1;
 	
 public static int VERSION (int major, int minor) {
 	return major << 16 | minor;
@@ -2194,11 +2243,19 @@ public static final native int BP_PAINTPARAMS_sizeof ();
 public static final native int BROWSEINFO_sizeof ();
 public static final native int BUTTON_IMAGELIST_sizeof ();
 public static final native int CANDIDATEFORM_sizeof ();
+public static final native int CERT_CONTEXT_sizeof ();
+public static final native int CERT_INFO_sizeof ();
+public static final native int CERT_NAME_BLOB_sizeof ();
+public static final native int CERT_PUBLIC_KEY_INFO_sizeof ();
 public static final native int CHOOSECOLOR_sizeof ();
 public static final native int CHOOSEFONT_sizeof ();
 public static final native int COMBOBOXINFO_sizeof ();
 public static final native int COMPOSITIONFORM_sizeof ();
 public static final native int CREATESTRUCT_sizeof ();
+public static final native int CRYPT_ALGORITHM_IDENTIFIER_sizeof ();
+public static final native int CRYPT_BIT_BLOB_sizeof ();
+public static final native int CRYPT_INTEGER_BLOB_sizeof ();
+public static final native int CRYPT_OBJID_BLOB_sizeof ();
 public static final native int DEVMODEA_sizeof ();
 public static final native int DEVMODEW_sizeof ();
 public static final native int DIBSECTION_sizeof ();
@@ -2213,7 +2270,11 @@ public static final native int EMREXTCREATEFONTINDIRECTW_sizeof ();
 public static final native int EXTLOGFONTW_sizeof ();
 public static final native int EXTLOGPEN_sizeof ();
 public static final native int FILETIME_sizeof ();
+public static final native int FLICK_DATA_sizeof ();
+public static final native int FLICK_POINT_sizeof ();
 public static final native int GCP_RESULTS_sizeof ();
+public static final native int GESTURECONFIG_sizeof ();
+public static final native int GESTUREINFO_sizeof ();
 public static final native int GRADIENT_RECT_sizeof ();
 public static final native int GUITHREADINFO_sizeof ();
 public static final native int HDITEM_sizeof ();
@@ -2322,6 +2383,7 @@ public static final native int TEXTMETRICW_sizeof ();
 public static final native int TF_DA_COLOR_sizeof ();
 public static final native int TF_DISPLAYATTRIBUTE_sizeof ();
 public static final native int TOOLINFO_sizeof ();
+public static final native int TOUCHINPUT_sizeof();
 public static final native int TRACKMOUSEEVENT_sizeof ();
 public static final native int TRIVERTEX_sizeof ();
 public static final native int TVHITTESTINFO_sizeof ();
@@ -2363,6 +2425,15 @@ public static final int /*long*/ CallWindowProc (int /*long*/ lpPrevWndFunc, int
 	return CallWindowProcA (lpPrevWndFunc, hWnd, Msg, wParam, lParam);
 }
 
+public static final int CertNameToStr (int dwCertEncodingType, CERT_NAME_BLOB pName, int dwStrType, TCHAR psz, int csz) {
+	if (IsUnicode) {
+		char [] psz1 = psz == null ? null : psz.chars;
+		return CertNameToStrW (dwCertEncodingType, pName, dwStrType, psz1, csz);
+	}
+	byte [] psz1 = psz == null ? null : psz.bytes;
+	return CertNameToStrA (dwCertEncodingType, pName, dwStrType, psz1, csz);
+}
+
 public static final int /*long*/ CharUpper (int /*long*/ ch) {
 	if (IsUnicode) return CharUpperW (ch);
 	return CharUpperA (ch);
@@ -3040,6 +3111,26 @@ public static final boolean PrintDlg (PRINTDLG lppd) {
 	return PrintDlgA (lppd);
 }
 
+public static final int RegCreateKeyEx (int /*long*/ hKey, TCHAR lpSubKey, int Reserved, TCHAR lpClass, int dwOptions, int samDesired, int /*long*/ lpSecurityAttributes, int /*long*/[] phkResult, int /*long*/[] lpdwDisposition) {
+	if (IsUnicode) {
+		char [] lpClass1 = lpClass == null ? null : lpClass.chars;
+		char [] lpSubKey1 = lpSubKey == null ? null : lpSubKey.chars;
+		return RegCreateKeyExW (hKey, lpSubKey1, Reserved, lpClass1, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition);
+	}
+	byte [] lpClass1 = lpClass == null ? null : lpClass.bytes;
+	byte [] lpSubKey1 = lpSubKey == null ? null : lpSubKey.bytes;
+	return RegCreateKeyExA (hKey, lpSubKey1, Reserved, lpClass1, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition);
+}
+
+public static final int RegDeleteValue (int /*long*/ hKey, TCHAR lpValueName) {
+	if (IsUnicode) {
+		char [] lpValueName1 = lpValueName == null ? null : lpValueName.chars;
+		return RegDeleteValueW (hKey, lpValueName1);
+	}
+	byte [] lpValueName1 = lpValueName == null ? null : lpValueName.bytes;
+	return RegDeleteValueA (hKey, lpValueName1);
+}
+
 public static final int RegEnumKeyEx (int /*long*/ hKey, int dwIndex, TCHAR lpName, int [] lpcName, int [] lpReserved, TCHAR lpClass, int [] lpcClass, FILETIME lpftLastWriteTime) {
 	if (IsUnicode) {
 		char [] lpName1 = lpName == null ? null : lpName.chars;
@@ -3108,6 +3199,15 @@ public static final int RegQueryValueEx (int /*long*/ hKey, TCHAR lpValueName, i
 	return RegQueryValueExA (hKey, lpValueName1, lpReserved, lpType, lpData, lpcbData);
 }
 
+public static final int RegSetValueEx (int /*long*/ hKey, TCHAR lpValueName, int Reserved, int dwType, int[] lpData, int cbData) {
+	if (IsUnicode) {
+		char [] lpValueName1 = lpValueName == null ? null : lpValueName.chars;
+		return RegSetValueExW (hKey, lpValueName1, Reserved, dwType, lpData, cbData);
+	}
+	byte [] lpValueName1 = lpValueName == null ? null : lpValueName.bytes;
+	return RegSetValueExA (hKey, lpValueName1, Reserved, dwType, lpData, cbData);
+}
+
 public static final int /*long*/ RemoveProp  (int /*long*/ hWnd, int /*long*/ lpString){
 	if (IsUnicode) return RemovePropW (hWnd, lpString);
 	return RemovePropA (hWnd, lpString);
@@ -3292,6 +3392,15 @@ public static final boolean SetMenuItemInfo (int /*long*/ hMenu, int uItem, bool
 	return SetMenuItemInfoA (hMenu, uItem, fByPosition, lpmii);
 }
 
+public static final boolean SetDllDirectory (TCHAR lpPathName) {
+	if (IsUnicode) {
+		char [] lpPathName1 = lpPathName == null ? null : lpPathName.chars;
+		return SetDllDirectoryW (lpPathName1);
+	}
+	byte [] lpPathName1 = lpPathName == null ? null : lpPathName.bytes;
+	return SetDllDirectoryA (lpPathName1);
+}
+
 public static boolean SetProp (int /*long*/ hWnd, int /*long*/ lpString, int /*long*/ hData) {
 	if (IsUnicode) return SetPropW (hWnd, lpString, hData);
 	return SetPropA (hWnd, lpString, hData);
@@ -3473,6 +3582,7 @@ public static final native int BufferedPaintInit ();
 public static final native int BufferedPaintSetAlpha (int /*long*/ hBufferedPaint, RECT prc, byte alpha);
 /** @method flags=dynamic */
 public static final native int BufferedPaintUnInit ();
+public static final native int Call (int /*long*/ address);
 /** @param address cast=(DLLGETVERSIONPROC) */
 public static final native int Call (int /*long*/ address, DLLVERSIONINFO arg0);
 /**
@@ -3491,6 +3601,16 @@ public static final native int /*long*/ CallWindowProcW (int /*long*/ lpPrevWndF
  * @param hWnd cast=(HWND)
  */
 public static final native int /*long*/ CallWindowProcA (int /*long*/ lpPrevWndFunc, int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
+/**
+ * @param pName cast=(PCERT_NAME_BLOB)
+ * @param psz cast=(LPWSTR)
+ */
+public static final native int CertNameToStrW(int dwCertEncodingType, CERT_NAME_BLOB pName, int dwStrType, char[] psz, int csz);
+/**
+ * @param pName cast=(PCERT_NAME_BLOB)
+ * @param psz cast=(LPSTR)
+ */
+public static final native int CertNameToStrA(int dwCertEncodingType, CERT_NAME_BLOB pName, int dwStrType, byte[] psz, int csz);
 /** @param ch cast=(LPWSTR) */
 public static final native int /*long*/ CharLowerW (int /*long*/ ch);
 /** @param ch cast=(LPSTR) */
@@ -3516,6 +3636,11 @@ public static final native boolean ClientToScreen (int /*long*/ hWnd, POINT lpPo
 public static final native boolean CloseClipboard ();
 /** @param hdc cast=(HDC) */
 public static final native int /*long*/ CloseEnhMetaFile (int /*long*/ hdc);
+/** 
+ * @method flags=dynamic
+ * @param hGesture cast=(HGESTUREINFO) 
+ */
+public static final native int /*long*/ CloseGestureInfoHandle (int /*long*/ hGesture);
 /** @param hObject cast=(HANDLE) */
 public static final native boolean CloseHandle (int /*long*/ hObject);
 /**
@@ -3524,6 +3649,11 @@ public static final native boolean CloseHandle (int /*long*/ hObject);
  */
 public static final native int CloseThemeData (int /*long*/ hTheme);
 /**
+ * @method flags=dynamic
+ * @param hTouchInput cast=(HTOUCHINPUT)
+ */
+public static final native boolean CloseTouchInputHandle(int /*long*/ hTouchInput);
+/**
  * @param rclsid cast=(REFCLSID)
  * @param pUnkOuter cast=(LPUNKNOWN)
  * @param riid cast=(REFIID)
@@ -3999,6 +4129,7 @@ public static final native int ExtractIconExW (char [] lpszFile, int nIconIndex,
  * @param phiconSmall cast=(HICON FAR *)
  */
 public static final native int ExtractIconExA (byte [] lpszFile, int nIconIndex, int /*long*/ [] phiconLarge, int /*long*/ [] phiconSmall, int nIcons);
+public static final native boolean FileTimeToSystemTime (FILETIME lpFileTime, SYSTEMTIME lpSystemTime);
 /**
  * @param hDC cast=(HDC)
  * @param lprc flags=no_out
@@ -4157,6 +4288,12 @@ public static final native int /*long*/ GetFocus ();
 /** @param hdc cast=(HDC) */
 public static final native int GetFontLanguageInfo (int /*long*/ hdc);
 public static final native int /*long*/ GetForegroundWindow ();
+/** 
+ * @method flags=dynamic
+ * @param hGestureInfo cast=(HGESTUREINFO)
+ * @param pGestureInfo cast=(PGESTUREINFO)
+ */
+public static final native boolean GetGestureInfo(int /*long*/ hGestureInfo, GESTUREINFO pGestureInfo);
 /** @param hdc cast=(HDC) */
 public static final native int GetGraphicsMode (int /*long*/ hdc);
 /**
@@ -4507,6 +4644,13 @@ public static final native int GetTimeFormatW(int Locale, int dwFlags, SYSTEMTIM
  */
 public static final native int GetTimeFormatA(int Locale, int dwFlags, SYSTEMTIME lpTime, byte [] lpFormat, byte [] lpTimeStr, int cchTime);
 /**
+ * @method flags=dynamic
+ * @param hTouchInput cast=(HTOUCHINPUT)
+ * @param cInputs cast=(UINT)
+ * @param pTouchInputs cast=(PTOUCHINPUT)
+ */
+public static final native boolean GetTouchInputInfo(int /*long*/ hTouchInput, int cInputs, int /*long*/ pTouchInputs, int cbSize);
+/**
  * @param hWnd cast=(HWND)
  * @param lpRect cast=(LPRECT)
  * @param bErase cast=(BOOL)
@@ -4575,6 +4719,7 @@ public static final native int GetWindowThreadProcessId (int /*long*/ hWnd, int
  * @param lpXform cast=(LPXFORM)
  */
 public static final native boolean GetWorldTransform (int /*long*/ hdc, float[] lpXform);
+public static final native double GID_ROTATE_ANGLE_FROM_ARGUMENT(long dwArgument); 
 /** @param lpString cast=(LPCWSTR) */
 public static final native int GlobalAddAtomW (char [] lpString);
 /** @param lpString cast=(LPCTSTR) */
@@ -4838,6 +4983,12 @@ public static final native boolean IsIconic (int /*long*/ hWnd);
 public static final native boolean IsPPC ();
 /** @method flags=no_gen */
 public static final native boolean IsSP ();
+/**
+ * @method flags=dynamic
+ * @param hWnd cast=(HWND) 
+ * @param outFlags cast=(PULONG)
+ */
+public static final native boolean IsTouchWindow (int /*long*/ hWnd, long[] outFlags);
 /** @param hWnd cast=(HWND) */
 public static final native boolean IsWindowEnabled (int /*long*/ hWnd);
 /** @param hWnd cast=(HWND) */
@@ -4916,6 +5067,7 @@ public static final native int /*long*/ LoadLibraryA (byte [] lpLibFileName);
 public static final native int /*long*/ LocalFree (int /*long*/ hMem);
 /** @param hWndLock cast=(HWND) */
 public static final native boolean LockWindowUpdate (int /*long*/ hWndLock);
+public static final native int LODWORD (long l);
 public static final native int LOWORD (int /*long*/ l);
 /** @param hdc cast=(HDC) */
 public static final native boolean LPtoDP (int /*long*/ hdc, POINT lpPoints, int nCount);
@@ -5123,6 +5275,16 @@ public static final native void MoveMemory (BITMAPINFOHEADER Destination, int /*
  * @param Destination cast=(PVOID),flags=no_in
  * @param Source cast=(CONST VOID *)
  */
+public static final native void MoveMemory (CERT_CONTEXT Destination, int /*long*/ Source, int Length);
+/**
+ * @param Destination cast=(PVOID),flags=no_in
+ * @param Source cast=(CONST VOID *)
+ */
+public static final native void MoveMemory (CERT_INFO Destination, int /*long*/ Source, int Length);
+/**
+ * @param Destination cast=(PVOID),flags=no_in
+ * @param Source cast=(CONST VOID *)
+ */
 public static final native void MoveMemory (DEVMODEW Destination, int /*long*/ Source, int Length);
 /**
  * @param Destination cast=(PVOID),flags=no_in
@@ -5146,6 +5308,16 @@ public static final native void MoveMemory (DRAWITEMSTRUCT Destination, int /*lo
 public static final native void MoveMemory (EXTLOGPEN Destination, int /*long*/ Source, int Length);
 /**
  * @param Destination cast=(PVOID),flags=no_in
+ * @param Source cast=(CONST VOID *),flags=no_out
+ */
+public static final native void MoveMemory (FLICK_DATA Destination, int /*long*/ [] Source, int Length);
+/**
+ * @param Destination cast=(PVOID),flags=no_in
+ * @param Source cast=(CONST VOID *),flags=no_out
+ */
+public static final native void MoveMemory (FLICK_POINT Destination, int /*long*/ [] Source, int Length);
+/**
+ * @param Destination cast=(PVOID),flags=no_in
  * @param Source cast=(CONST VOID *)
  */
 public static final native void MoveMemory (HDITEM Destination, int /*long*/ Source, int Length);
@@ -5364,6 +5536,11 @@ public static final native void MoveMemory (TEXTMETRICA Destination, int /*long*
  * @param Destination cast=(PVOID),flags=no_in
  * @param Source cast=(CONST VOID *)
  */
+public static final native void MoveMemory (TOUCHINPUT Destination, int /*long*/ Source, int Length);
+/**
+ * @param Destination cast=(PVOID),flags=no_in
+ * @param Source cast=(CONST VOID *)
+ */
 public static final native void MoveMemory (TVITEM Destination, int /*long*/ Source, int Length);
 /**
  * @param Destination cast=(PVOID),flags=no_in
@@ -5431,6 +5608,11 @@ public static final native void MoveMemory (int /*long*/ Destination, KEYBDINPUT
  */
 public static final native void MoveMemory (int /*long*/ Destination, MOUSEINPUT Source, int Length);
 /**
+ * @param Destination cast=(PVOID)
+ * @param Source cast=(CONST VOID *),flags=no_out
+ */
+public static final native void MoveMemory (int /*long*/ Destination, GESTURECONFIG Source, int Length);
+/**
  * @param hdc cast=(HDC)
  * @param lPoint cast=(LPPOINT)
  */
@@ -5556,6 +5738,34 @@ public static final native boolean RedrawWindow (int /*long*/ hWnd, RECT lprcUpd
 public static final native int RegCloseKey (int /*long*/ hKey);
 /**
  * @param hKey cast=(HKEY)
+ * @param lpSubKey cast=(LPWSTR)
+ * @param lpClass cast=(LPWSTR)
+ * @param lpSecurityAttributes cast=(LPSECURITY_ATTRIBUTES)
+ * @param phkResult cast=(PHKEY)
+ * @param lpdwDisposition cast=(LPDWORD)
+ */
+public static final native int RegCreateKeyExW (int /*long*/ hKey, char[] lpSubKey, int Reserved, char[] lpClass, int dwOptions, int samDesired, int /*long*/ lpSecurityAttributes, int /*long*/[] phkResult, int /*long*/[] lpdwDisposition);
+/**
+ * @param hKey cast=(HKEY)
+ * @param lpSubKey cast=(LPSTR)
+ * @param lpClass cast=(LPTSTR)
+ * @param lpSecurityAttributes cast=(LPSECURITY_ATTRIBUTES)
+ * @param phkResult cast=(PHKEY)
+ * @param lpdwDisposition cast=(LPDWORD)
+ */
+public static final native int RegCreateKeyExA (int /*long*/ hKey, byte[] lpSubKey, int Reserved, byte[] lpClass, int dwOptions, int samDesired, int /*long*/ lpSecurityAttributes, int /*long*/[] phkResult, int /*long*/[] lpdwDisposition);
+/**
+ * @param hKey cast=(HKEY)
+ * @param lpValueName cast=(LPWSTR)
+ */
+public static final native int RegDeleteValueW (int /*long*/ hKey, char[] lpValueName);
+/**
+ * @param hKey cast=(HKEY)
+ * @param lpValueName cast=(LPSTR)
+ */
+public static final native int RegDeleteValueA (int /*long*/ hKey, byte[] lpValueName);
+/**
+ * @param hKey cast=(HKEY)
  * @param lpName cast=(LPWSTR)
  * @param lpcName cast=(LPDWORD)
  * @param lpReserved cast=(LPDWORD)
@@ -5575,6 +5785,12 @@ public static final native int RegEnumKeyExA (int /*long*/ hKey, int dwIndex, by
 /** @param lpWndClass cast=(LPWNDCLASSW) */
 public static final native int RegisterClassW (WNDCLASS lpWndClass);
 public static final native int RegisterClassA (WNDCLASS lpWndClass);
+/**
+ * @method flags=dynamic
+ * @param hWnd cast=(HWND)
+ * @param ulFlags cast=(ULONG)
+ */
+public static final native boolean RegisterTouchWindow(int /*long*/ hWnd, int ulFlags);
 /** @param lpString cast=(LPWSTR) */
 public static final native int RegisterWindowMessageW (char [] lpString);
 /** @param lpString cast=(LPTSTR) */
@@ -5654,6 +5870,18 @@ public static final native int RegQueryValueExW (int /*long*/ hKey, char[] lpVal
 public static final native int RegQueryValueExA (int /*long*/ hKey, byte[] lpValueName, int /*long*/ lpReserved, int[] lpType, byte [] lpData, int[] lpcbData);
 /**
  * @param hKey cast=(HKEY)
+ * @param lpValueName cast=(LPWSTR)
+ * @param lpData cast=(const BYTE*)
+ */
+public static final native int RegSetValueExW (int /*long*/ hKey, char[] lpValueName, int Reserved, int dwType, int[] lpData, int cbData);
+/**
+ * @param hKey cast=(HKEY)
+ * @param lpValueName cast=(LPSTR)
+ * @param lpData cast=(const BYTE*)
+ */
+public static final native int RegSetValueExA (int /*long*/ hKey, byte[] lpValueName, int Reserved, int dwType, int[] lpData, int cbData);
+/**
+ * @param hKey cast=(HKEY)
  * @param lpValueName cast=(LPSTR)
  * @param lpReserved cast=(LPDWORD)
  * @param lpType cast=(LPDWORD)
@@ -6280,11 +6508,27 @@ public static final native boolean SetCursorPos (int X, int Y);
  * @param pColors cast=(RGBQUAD *),flags=no_out critical
  */
 public static final native int SetDIBColorTable (int /*long*/ hdc, int uStartIndex, int cEntries, byte[] pColors);
+/**
+ * @method flags=dynamic
+ * @param lpString cast=(LPSTR)
+ */
+public static final native boolean SetDllDirectoryA (byte [] lpString);
+/**
+ * @method flags=dynamic
+ * @param lpString cast=(LPWSTR)
+ */
+public static final native boolean SetDllDirectoryW (char [] lpString);
 public static final native int SetErrorMode (int uMode);
 /** @param hWnd cast=(HWND) */
 public static final native int /*long*/ SetFocus (int /*long*/ hWnd);
 /** @param hWnd cast=(HWND) */
 public static final native boolean SetForegroundWindow (int /*long*/ hWnd);
+/** 
+ * @method flags=dynamic
+ * @param hwnd cast=(HWND)
+ * @param pGestureConfig cast=(PGESTURECONFIG)
+ */
+public static final native boolean SetGestureConfig(int /*long*/ hwnd, int dwReserved, int cIDs, int /*long*/ pGestureConfig, int cbSize);
 /** @param hdc cast=(HDC) */
 public static final native int SetGraphicsMode (int /*long*/ hdc, int iMode);
 /**
@@ -6545,6 +6789,7 @@ public static final native int ToAscii (int uVirtKey, int uScanCode, byte [] lpK
  * @param pwszBuff cast=(LPWSTR)
  */
 public static final native int ToUnicode (int wVirtKey, int wScanCode, byte [] lpKeyState, char [] pwszBuff, int cchBuff, int wFlags);
+public static final native long TOUCH_COORD_TO_PIXEL(long touchCoord);
 /**
  * @param hwndTV cast=(HWND)
  * @param hitem cast=(HTREEITEM)
@@ -6605,6 +6850,11 @@ public static final native boolean UnregisterClassA (byte [] lpClassName, int /*
  * @param crKey cast=(COLORREF)
  */
 public static final native boolean UpdateLayeredWindow (int /*long*/ hwnd, int /*long*/ hdcDst, POINT pptDst, SIZE psize, int /*long*/ hdcSrc, POINT pptSrc, int crKey, BLENDFUNCTION pblend, int dwFlags);
+/**
+ * @method flags=dynamic
+ * @param hWnd cast=(HWND)
+ */
+public static final native boolean UnregisterTouchWindow (int /*long*/ hwnd);
 /** @param hWnd cast=(HWND) */
 public static final native boolean UpdateWindow (int /*long*/ hWnd);
 /** @param hWnd cast=(HWND) */
@@ -6613,13 +6863,14 @@ public static final native boolean ValidateRect (int /*long*/ hWnd, RECT lpRect)
 public static final native short VkKeyScanW (short ch);
 /** @param ch cast=(TCHAR) */
 public static final native short VkKeyScanA (short ch);
-
+/** @method flags=trycatch */
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl);
 
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0);
 
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, int arg2, int[] arg3);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, int arg1, int arg2, int[] arg3);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, long arg1, int arg2, long[] arg3);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, long arg1, int arg2, long[] arg3);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, int arg1, int arg2, long[] arg3);
@@ -6628,8 +6879,11 @@ public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, char
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, short arg0, byte[] arg1, byte[] arg2, byte[] arg3);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int[] arg0);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long[] arg0);
-public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, byte[] arg0, int /*long*/[] arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, byte[] arg0, int[] arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, byte[] arg0, long[] arg1);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int /*long*/[] arg1, int[] arg2);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, int[] arg1, int[] arg2);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, long[] arg1, long[] arg2);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, TF_DISPLAYATTRIBUTE arg0);
 
 public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, int arg0, long arg1, long arg2);
@@ -6637,6 +6891,8 @@ public static final native int VtblCall(int fnNumber, int /*long*/ ppVtbl, long
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, int arg2);
 
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, long arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, long arg1);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, int arg1);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int[] arg0, byte[] arg1, int[] arg2);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int[] arg0, byte[] arg1, long[] arg2);
@@ -6645,9 +6901,11 @@ public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, char
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, char[] arg0, long arg1);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, PROPERTYKEY arg0, int arg1);
 public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, PROPERTYKEY arg0, long arg1);
-public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int /*long*/ arg0, int arg1, char[] arg2, char[] arg3, int /*long*/ arg4);
-public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int [] arg1);
-public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, long [] arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, char[] arg2, char[] arg3, int arg4);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, int arg1, char[] arg2, char[] arg3, long arg4);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int[] arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, int[] arg1);
+public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, long[] arg1);
 
 public static final native boolean WaitMessage ();
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TOUCHINPUT.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TOUCHINPUT.java
new file mode 100644
index 0000000..c444ad0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TOUCHINPUT.java	
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.win32;
+
+public class TOUCHINPUT {
+	public int x;
+	public int y;
+	/** @field cast=(HWND) */
+	public int /*long*/    hSource;
+	public int dwID;
+	public int dwFlags;
+	public int dwMask;
+	public int dwTime;
+	public int /*long*/ dwExtraInfo;
+	public int cxContact;
+	public int cyContact;
+	public static final int sizeof = OS.TOUCHINPUT_sizeof();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/PrintDialog.java
index 336908a..e1364a1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/PrintDialog.java	
@@ -20,8 +20,7 @@ import org.eclipse.swt.internal.carbon.OS;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/Printer.java
index 7b12bbd..740d208 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/carbon/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -162,7 +162,7 @@ static int unpackData(int[] handle, byte[] buffer, int offset) {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java
old mode 100644
new mode 100755
index a7da036..4f96ced
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,8 +21,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
@@ -155,10 +154,25 @@ public PrinterData open() {
 	PrinterData data = null;
 	NSPrintPanel panel = NSPrintPanel.printPanel();
 	NSPrintInfo printInfo = new NSPrintInfo(NSPrintInfo.sharedPrintInfo().copy());
-	printInfo.setOrientation(printerData.orientation == PrinterData.LANDSCAPE ? OS.NSLandscapeOrientation : OS.NSPortraitOrientation);
-	NSMutableDictionary dict = printInfo.dictionary();	
+	if (printerData.duplex != SWT.DEFAULT) {
+		int /*long*/ settings = printInfo.PMPrintSettings();
+		int duplex = printerData.duplex == PrinterData.DUPLEX_SHORT_EDGE ? OS.kPMDuplexTumble
+				: printerData.duplex == PrinterData.DUPLEX_LONG_EDGE ? OS.kPMDuplexNoTumble
+				: OS.kPMDuplexNone;
+		OS.PMSetDuplex(settings, duplex);
+	}
+	/* Updating printInfo from PMPrintSettings overrides values in the printInfo dictionary. */
+	printInfo.updateFromPMPrintSettings();
+	if (printerData.name != null) {
+		NSPrinter printer = NSPrinter.printerWithName(NSString.stringWith(printerData.name));
+		if (printer != null) {
+			printInfo.setPrinter(printer);
+		}
+	}
+	NSMutableDictionary dict = printInfo.dictionary();
 	dict.setValue(NSNumber.numberWithBool(printerData.collate), OS.NSPrintMustCollate);
 	dict.setValue(NSNumber.numberWithInt(printerData.copyCount), OS.NSPrintCopies);
+	dict.setValue(NSNumber.numberWithInt(printerData.orientation == PrinterData.LANDSCAPE ? OS.NSLandscapeOrientation : OS.NSPortraitOrientation), OS.NSPrintOrientation);
 	if (printerData.printToFile) {
 		dict.setValue(OS.NSPrintSaveJob, OS.NSPrintJobDisposition);
 	}
@@ -211,7 +225,13 @@ public PrinterData open() {
 		data.collate = false; //TODO: Only set to false if the printer does the collate internally (most printers do)
 		data.copyCount = new NSNumber(dict.objectForKey(OS.NSPrintCopies)).intValue();
 		data.copyCount = 1; //TODO: Only set to 1 if the printer does the copy internally (most printers do)
-		data.orientation = printInfo.orientation() == OS.NSLandscapeOrientation ? PrinterData.LANDSCAPE : PrinterData.PORTRAIT;
+		data.orientation = new NSNumber(dict.objectForKey(OS.NSPrintOrientation)).intValue() == OS.NSLandscapeOrientation ? PrinterData.LANDSCAPE : PrinterData.PORTRAIT;
+		int /*long*/ settings = printInfo.PMPrintSettings();
+		int outDuplexSetting[] = new int[1];
+		OS.PMGetDuplex(settings, outDuplexSetting);
+		data.duplex = outDuplexSetting[0] == OS.kPMDuplexTumble ? PrinterData.DUPLEX_SHORT_EDGE
+				: outDuplexSetting[0] == OS.kPMDuplexNoTumble ? PrinterData.DUPLEX_LONG_EDGE
+				: PrinterData.DUPLEX_NONE;
 		NSData nsData = NSKeyedArchiver.archivedDataWithRootObject(printInfo);
 		data.otherData = new byte[(int)/*64*/nsData.length()];
 		OS.memmove(data.otherData, nsData.bytes(), data.otherData.length);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java
old mode 100644
new mode 100755
index 292ef0d..01d5ca2
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,7 +101,7 @@ public static PrinterData getDefaultPrinterData() {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
@@ -211,10 +211,19 @@ protected void create(DeviceData deviceData) {
 			printer.retain();
 			printInfo.setPrinter(printer);
 		}
-		printInfo.setOrientation(data.orientation == PrinterData.LANDSCAPE ? OS.NSLandscapeOrientation : OS.NSPortraitOrientation);
+		if (data.duplex != SWT.DEFAULT) {
+			int /*long*/ settings = printInfo.PMPrintSettings();
+			int duplex = data.duplex == PrinterData.DUPLEX_SHORT_EDGE ? OS.kPMDuplexTumble
+					: data.duplex == PrinterData.DUPLEX_LONG_EDGE ? OS.kPMDuplexNoTumble
+					: OS.kPMDuplexNone;
+			OS.PMSetDuplex(settings, duplex);
+		}
+		/* Updating printInfo from PMPrintSettings overrides values in the printInfo dictionary. */
+		printInfo.updateFromPMPrintSettings();
 		NSMutableDictionary dict = printInfo.dictionary();	
 		if (data.collate != false) dict.setValue(NSNumber.numberWithBool(data.collate), OS.NSPrintMustCollate);
 		if (data.copyCount != 1) dict.setValue(NSNumber.numberWithInt(data.copyCount), OS.NSPrintCopies);
+		dict.setValue(NSNumber.numberWithInt(data.orientation == PrinterData.LANDSCAPE ? OS.NSLandscapeOrientation : OS.NSPortraitOrientation), OS.NSPrintOrientation);
 		if (data.printToFile) {
 			dict.setValue(OS.NSPrintSaveJob, OS.NSPrintJobDisposition);
 			if (data.fileName != null) dict.setValue(NSString.stringWith(data.fileName), OS.NSPrintSavePath);
@@ -545,7 +554,38 @@ public Point getDPI() {
 	NSAutoreleasePool pool = null;
 	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
 	try {
-		//TODO get output resolution
+		int /*long*/ pmPrintSession = printInfo.PMPrintSession();
+		int /*long*/ printer[] = new int /*long*/ [1]; 
+		int /*long*/ err = OS.PMSessionGetCurrentPrinter(pmPrintSession, printer);
+		
+		if (err == OS.noErr) {
+			int /*long*/ printSettings = printInfo.PMPrintSettings();
+			short[] destType = new short[1];
+			if (OS.PMSessionGetDestinationType(pmPrintSession, printSettings, destType) == OS.noErr) {
+				if (destType[0] == OS.kPMDestinationPrinter) {
+					PMResolution resolution =  new PMResolution();
+					
+					if (OS.PMPrinterGetOutputResolution(printer[0], printSettings, resolution) != OS.noErr) {
+						int numberOfResolutions[] = new int[1];
+						if (OS.PMPrinterGetPrinterResolutionCount(printer[0], numberOfResolutions) == OS.noErr) {
+							PMResolution tempResolution = new PMResolution();
+							tempResolution.hRes = tempResolution.vRes = 300.0;							
+							for (int i = 1; i <= numberOfResolutions[0]; i++) {
+								// PMPrinterGetIndexedPrinterResolution indexes are 1-based.
+								if (OS.PMPrinterGetIndexedPrinterResolution(printer[0], i, tempResolution) == OS.noErr) {
+									if (tempResolution.vRes > resolution.vRes && tempResolution.hRes > resolution.hRes) {
+										resolution = tempResolution;
+									}
+								}
+							}
+						}
+					}
+					
+					return new Point((int)resolution.hRes, (int)resolution.vRes);
+				}
+			}
+		}
+		
 		return getIndependentDPI();
 	} finally {
 		if (pool != null) pool.release();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/common/org/eclipse/swt/printing/PrinterData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/common/org/eclipse/swt/printing/PrinterData.java
old mode 100644
new mode 100755
index 98fc552..334d7aa
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/common/org/eclipse/swt/printing/PrinterData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/common/org/eclipse/swt/printing/PrinterData.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.swt.printing;
 
 
+import org.eclipse.swt.*;
 import org.eclipse.swt.graphics.*;
 
 /**
@@ -113,6 +114,30 @@ public final class PrinterData extends DeviceData {
 	public int orientation = PORTRAIT;
 
 	/**
+	 * Single-sided or double-sided printing, expressed as one of the
+	 * following values:
+	 * <dl>
+	 * <dt><code>SWT.DEFAULT</code></dt>
+	 * <dd>the default duplex value for the printer</dd>
+	 * <dt><code>DUPLEX_NONE</code></dt>
+	 * <dd>single-sided printing</dd>
+	 * <dt><code>DUPLEX_LONG_EDGE</code></dt>
+	 * <dd>double-sided printing as if bound on the long edge</dd>
+	 * <dt><code>DUPLEX_SHORT_EDGE</code></dt>
+	 * <dd>double-sided printing as if bound on the short edge</dd>
+	 * </dl>
+	 * <p>
+	 * The default value is <code>SWT.DEFAULT</code>, meaning do not set a value;
+	 * use the printer's default duplex setting.
+	 * A printer's default value is typically single-sided,
+	 * however it can default to double-sided in order to save paper.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public int duplex = SWT.DEFAULT;
+
+	/**
 	 * <code>scope</code> field value indicating that
 	 * all pages should be printed
 	 */	
@@ -147,6 +172,45 @@ public final class PrinterData extends DeviceData {
 	 */
 	public static final int LANDSCAPE = 2;
 	
+ 	/**
+	 * <code>duplex</code> field value indicating
+	 * single-sided printing.
+	 * <p>
+	 * This is also known as simplex printing.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final int DUPLEX_NONE = 0;
+	
+	/**
+	 * <code>duplex</code> field value indicating
+	 * double-sided printing for binding on the long edge.
+	 * <p>
+	 * For portrait orientation, the long edge is vertical.
+	 * For landscape orientation, the long edge is horizontal.
+	 * </p><p>
+	 * This is also known as duplex printing.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final int DUPLEX_LONG_EDGE = 1;
+	
+	/**
+	 * <code>duplex</code> field value indicating
+	 * double-sided printing for binding on the short edge.
+	 * <p>
+	 * For portrait orientation, the short edge is horizontal.
+	 * For landscape orientation, the short edge is vertical.
+	 * </p><p>
+	 * This is also known as duplex tumble printing.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final int DUPLEX_SHORT_EDGE = 2;
+	
 	/**
 	 * private, platform-specific data
 	 * On Windows, this contains a copy of the DEVMODE struct
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/common/org/eclipse/swt/printing/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/common/org/eclipse/swt/printing/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java
index 5920b40..214f59b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java	
@@ -20,8 +20,7 @@ import org.eclipse.swt.widgets.*;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java
index 00c30a8..96b4dcb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -82,7 +82,7 @@ static DeviceData checkNull (PrinterData data) {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/PrintDialog.java
index 03cbb14..a317822 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/PrintDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,8 +22,7 @@ import org.eclipse.swt.widgets.*;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
@@ -312,7 +311,23 @@ public PrinterData open() {
 		if (printerData.otherData != null) {
 			Printer.restore(printerData.otherData, settings, page_setup);
 		}
+		
 		/* Set values of print_settings and page_setup from PrinterData. */
+		String printerName = printerData.name;
+		if (printerName == null && printerData.printToFile) {
+			/* Find the printer name corresponding to the file backend. */
+			int /*long*/ printer = Printer.gtkPrinterFromPrinterData(printerData);
+			if (printer != 0) {
+				PrinterData data = Printer.printerDataFromGtkPrinter(printer);
+				printerName = data.name;
+				OS.g_object_unref(printer);
+			}
+		}
+		if (printerName != null) {
+			byte [] nameBytes = Converter.wcsToMbcs (null, printerName, true);
+			OS.gtk_print_settings_set_printer(settings, nameBytes);
+		}
+		
 		switch (printerData.scope) {
 			case PrinterData.ALL_PAGES:
 				OS.gtk_print_settings_set_print_pages(settings, OS.GTK_PRINT_PAGES_ALL);
@@ -329,37 +344,41 @@ public PrinterData open() {
 				OS.gtk_print_settings_set_print_pages(settings, OS.GTK_PRINT_PAGES_ALL);
 				break;
 		}
-		if (printerData.fileName != null) {
-			//TODO: Should we look at printToFile, or driver/name for "Print to File", or both? (see gtk bug 345590)
-			if (printerData.printToFile) {
-				byte [] buffer = Converter.wcsToMbcs (null, printerData.fileName, true);
-				OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI, buffer);
+		if ((printerData.printToFile || Printer.GTK_FILE_BACKEND.equals(printerData.driver)) && printerData.fileName != null) {
+			// TODO: GTK_FILE_BACKEND is not GTK API (see gtk bug 345590)
+			byte [] uri = Printer.uriFromFilename(printerData.fileName);
+			if (uri != null) {
+				OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI, uri);
 			}
-			if (printerData.driver != null && printerData.name != null) {
-				if (printerData.driver.equals("GtkPrintBackendFile") && printerData.name.equals("Print to File")) { //$NON-NLS-1$ //$NON-NLS-2$
-					byte [] buffer = Converter.wcsToMbcs (null, printerData.fileName, true);
-					OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI, buffer);
-				}
-			}
-		}
-		if (printerData.printToFile) {
-			byte [] buffer = Converter.wcsToMbcs (null, "Print to File", true); //$NON-NLS-1$
-			OS.gtk_print_settings_set_printer(settings, buffer);
 		}
 		OS.gtk_print_settings_set_n_copies(settings, printerData.copyCount);
 		OS.gtk_print_settings_set_collate(settings, printerData.collate);
+		/* 
+		 * Bug in GTK.  The unix dialog gives priority to the value of the non-API
+		 * field cups-Duplex in the print_settings (which we preserve in otherData).
+		 * The fix is to manually clear cups-Duplex before setting the duplex field.
+		 */
+		byte [] keyBuffer = Converter.wcsToMbcs (null, "cups-Duplex", true);
+		OS.gtk_print_settings_set(settings, keyBuffer, (byte[]) null);
+		if (printerData.duplex != SWT.DEFAULT) {
+			int duplex = printerData.duplex == PrinterData.DUPLEX_LONG_EDGE ? OS.GTK_PRINT_DUPLEX_HORIZONTAL
+				: printerData.duplex == PrinterData.DUPLEX_SHORT_EDGE ? OS.GTK_PRINT_DUPLEX_VERTICAL
+				: OS.GTK_PRINT_DUPLEX_SIMPLEX;
+			OS.gtk_print_settings_set_duplex (settings, duplex);
+		}
 		int orientation = printerData.orientation == PrinterData.LANDSCAPE ? OS.GTK_PAGE_ORIENTATION_LANDSCAPE : OS.GTK_PAGE_ORIENTATION_PORTRAIT;
 		OS.gtk_print_settings_set_orientation(settings, orientation);
 		OS.gtk_page_setup_set_orientation(page_setup, orientation);
 		
 		OS.gtk_print_unix_dialog_set_settings(handle, settings);
 		OS.gtk_print_unix_dialog_set_page_setup(handle, page_setup);
+		if (OS.GTK_VERSION >= OS.VERSION (2, 18, 0)) {
+			OS.gtk_print_unix_dialog_set_embed_page_setup(handle, true);
+		}
 		OS.g_object_unref(settings);
 		OS.g_object_unref(page_setup);
-		if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
-			int /*long*/ group = OS.gtk_window_get_group(0);
-			OS.gtk_window_group_add_window (group, handle);
-		}
+		int /*long*/ group = OS.gtk_window_get_group(0);
+		OS.gtk_window_group_add_window (group, handle);
 		OS.gtk_window_set_modal(handle, true);
 		PrinterData data = null;
 		//TODO: Handle 'Print Preview' (GTK_RESPONSE_APPLY).
@@ -378,6 +397,13 @@ public PrinterData open() {
 			display.setData (SET_MODAL_DIALOG, this);
 		}
 		int response = OS.gtk_dialog_run (handle);
+		/*
+		* This call to gdk_threads_leave() is a temporary work around
+		* to avoid deadlocks when gdk_threads_init() is called by native
+		* code outside of SWT (i.e AWT, etc). It ensures that the current
+		* thread leaves the GTK lock acquired by the function above. 
+		*/
+		OS.gdk_threads_leave();
 		if (OS.gtk_window_get_modal (handle)) {
 			display.setData (SET_MODAL_DIALOG, oldModal);
 		}
@@ -419,7 +445,7 @@ public PrinterData open() {
 						break;
 				}
 				
-				data.printToFile = data.name.equals("Print to File"); //$NON-NLS-1$
+				data.printToFile = Printer.GTK_FILE_BACKEND.equals(data.driver); // TODO: GTK_FILE_BACKEND is not GTK API (see gtk bug 345590)
 				if (data.printToFile) {
 					int /*long*/ address = OS.gtk_print_settings_get(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI);
 					int length = OS.strlen (address);
@@ -430,6 +456,10 @@ public PrinterData open() {
 
 				data.copyCount = OS.gtk_print_settings_get_n_copies(settings);
 				data.collate = OS.gtk_print_settings_get_collate(settings);
+				int duplex = OS.gtk_print_settings_get_duplex(settings);
+				data.duplex = duplex == OS.GTK_PRINT_DUPLEX_HORIZONTAL ? PrinterData.DUPLEX_LONG_EDGE
+						: duplex == OS.GTK_PRINT_DUPLEX_VERTICAL ? PrinterData.DUPLEX_SHORT_EDGE
+						: PrinterData.DUPLEX_NONE;
 				data.orientation = OS.gtk_page_setup_get_orientation(page_setup) == OS.GTK_PAGE_ORIENTATION_LANDSCAPE ? PrinterData.LANDSCAPE : PrinterData.PORTRAIT;
 
 				/* Save other print_settings data as key/value pairs in otherData. */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/Printer.java
index 0812440..0b79f2d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/gtk/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,8 @@ import org.eclipse.swt.printing.PrinterData;
  */
 public final class Printer extends Device {
 	static PrinterData [] printerList;
+	static int /*long*/ findPrinter;
+	static PrinterData findData;
 	
 	PrinterData data;
 	int /*long*/ printer;
@@ -63,9 +65,20 @@ public final class Printer extends Device {
 	static int start, end;
 
 	static final String GTK_LPR_BACKEND = "GtkPrintBackendLpr"; //$NON-NLS-1$
+	static final String GTK_FILE_BACKEND = "GtkPrintBackendFile"; //$NON-NLS-1$
 
 	static boolean disablePrinting = System.getProperty("org.eclipse.swt.internal.gtk.disablePrinting") != null; //$NON-NLS-1$
 	
+static void gtk_init() {
+	if (!OS.g_thread_supported ()) {
+		OS.g_thread_init (0);
+	}
+	OS.gtk_set_locale();
+	if (!OS.gtk_init_check (new int /*long*/ [] {0}, null)) {
+		SWT.error (SWT.ERROR_NO_HANDLES, null, " [gtk_init_check() failed]");
+	}
+}
+
 /**
  * Returns an array of <code>PrinterData</code> objects
  * representing all available printers.  If there are no
@@ -78,17 +91,18 @@ public static PrinterData[] getPrinterList() {
 	if (OS.GTK_VERSION < OS.VERSION (2, 10, 0) || disablePrinting) {
 		return printerList;
 	}
-	if (!OS.g_thread_supported ()) {
-		OS.g_thread_init (0);
-	}
-	OS.gtk_set_locale();
-	if (!OS.gtk_init_check (new int /*long*/ [] {0}, null)) {
-		SWT.error (SWT.ERROR_NO_HANDLES, null, " [gtk_init_check() failed]");
-	}
+	gtk_init();
 	Callback printerCallback = new Callback(Printer.class, "GtkPrinterFunc_List", 2); //$NON-NLS-1$
 	int /*long*/ GtkPrinterFunc_List = printerCallback.getAddress();
 	if (GtkPrinterFunc_List == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
 	OS.gtk_enumerate_printers(GtkPrinterFunc_List, 0, 0, true);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	printerCallback.dispose ();
 	return printerList;
 }
@@ -121,28 +135,29 @@ static int /*long*/ GtkPrinterFunc_List (int /*long*/ printer, int /*long*/ user
  * @since 2.1
  */
 public static PrinterData getDefaultPrinterData() {
-	printerList = new PrinterData [1];
+	findData = null;
 	if (OS.GTK_VERSION < OS.VERSION (2, 10, 0) || disablePrinting) {
 		return null;
 	}
-	if (!OS.g_thread_supported ()) {
-		OS.g_thread_init (0);
-	}
-	OS.gtk_set_locale();
-	if (!OS.gtk_init_check (new int /*long*/ [] {0}, null)) {
-		SWT.error (SWT.ERROR_NO_HANDLES, null, " [gtk_init_check() failed]");
-	}
+	gtk_init();
 	Callback printerCallback = new Callback(Printer.class, "GtkPrinterFunc_Default", 2); //$NON-NLS-1$
 	int /*long*/ GtkPrinterFunc_Default = printerCallback.getAddress();
 	if (GtkPrinterFunc_Default == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
 	OS.gtk_enumerate_printers(GtkPrinterFunc_Default, 0, 0, true);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	printerCallback.dispose ();
-	return printerList[0];
+	return findData;
 }
 
 static int /*long*/ GtkPrinterFunc_Default (int /*long*/ printer, int /*long*/ user_data) {
 	if (OS.gtk_printer_is_default(printer)) {
-		printerList[0] = printerDataFromGtkPrinter(printer);
+		findData = printerDataFromGtkPrinter(printer);
 		return 1;
 	} else if (OS.GTK_VERSION < OS.VERSION(2, 10, 12) && printerDataFromGtkPrinter(printer).driver.equals (GTK_LPR_BACKEND)) { 
 		return 1;
@@ -150,20 +165,31 @@ static int /*long*/ GtkPrinterFunc_Default (int /*long*/ printer, int /*long*/ u
 	return 0;
 }
 
-int /*long*/ gtkPrinterFromPrinterData() {
-	Callback printerCallback = new Callback(this, "GtkPrinterFunc_FindNamedPrinter", 2); //$NON-NLS-1$
+static int /*long*/ gtkPrinterFromPrinterData(PrinterData data) {
+	gtk_init();
+	Callback printerCallback = new Callback(Printer.class, "GtkPrinterFunc_FindNamedPrinter", 2); //$NON-NLS-1$
 	int /*long*/ GtkPrinterFunc_FindNamedPrinter = printerCallback.getAddress();
 	if (GtkPrinterFunc_FindNamedPrinter == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-	printer = 0;
+	findPrinter = 0;
+	findData = data;
 	OS.gtk_enumerate_printers(GtkPrinterFunc_FindNamedPrinter, 0, 0, true);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	printerCallback.dispose ();
-	return printer;
+	return findPrinter;
 }
 
-int /*long*/ GtkPrinterFunc_FindNamedPrinter (int /*long*/ printer, int /*long*/ user_data) {
+static int /*long*/ GtkPrinterFunc_FindNamedPrinter (int /*long*/ printer, int /*long*/ user_data) {
 	PrinterData pd = printerDataFromGtkPrinter(printer);
-	if (pd.driver.equals(data.driver) && pd.name.equals(data.name)) {
-		this.printer = printer;
+	if ((pd.driver.equals(findData.driver) && pd.name.equals(findData.name))
+			|| (pd.driver.equals(GTK_FILE_BACKEND)) && findData.printToFile && findData.driver == null && findData.name == null) {
+			// TODO: GTK_FILE_BACKEND is not GTK API (see gtk bug 345590)
+		findPrinter = printer;
 		OS.g_object_ref(printer);
 		return 1;
 	} else if (OS.GTK_VERSION < OS.VERSION (2, 10, 12) && pd.driver.equals(GTK_LPR_BACKEND)) {
@@ -239,13 +265,45 @@ static void restore(byte [] data, int /*long*/ settings, int /*long*/ page_setup
 	OS.gtk_paper_size_free(paper_size);
 }
 
+static byte [] uriFromFilename(String filename) {
+	if (filename == null) return null;
+	int length = filename.length();
+	if (length == 0) return null;
+	char[] chars = new char[length];
+	filename.getChars(0, length, chars, 0);		
+	int /*long*/[] error = new int /*long*/[1];
+	int /*long*/ utf8Ptr = OS.g_utf16_to_utf8(chars, chars.length, null, null, error);
+	if (error[0] != 0 || utf8Ptr == 0) return null;
+	int /*long*/ localePtr = OS.g_filename_from_utf8(utf8Ptr, -1, null, null, error);
+	OS.g_free(utf8Ptr);
+	if (error[0] != 0 || localePtr == 0) return null;
+	int /*long*/ uriPtr = OS.g_filename_to_uri(localePtr, 0, error);
+	OS.g_free(localePtr);
+	if (error[0] != 0 || uriPtr == 0) return null;
+	length = OS.strlen(uriPtr);
+	byte[] uri = new byte[length + 1];
+	OS.memmove (uri, uriPtr, length);
+	OS.g_free(uriPtr);
+	return uri;
+}
+
 static DeviceData checkNull (PrinterData data) {
 	if (data == null) data = new PrinterData();
 	if (data.driver == null || data.name == null) {
-		PrinterData defaultPrinter = getDefaultPrinterData();
-		if (defaultPrinter == null) SWT.error(SWT.ERROR_NO_HANDLES);
-		data.driver = defaultPrinter.driver;
-		data.name = defaultPrinter.name;		
+		PrinterData defaultData = null;
+		if (data.printToFile) {
+			int /*long*/ filePrinter = gtkPrinterFromPrinterData(data);
+			if (filePrinter != 0) {
+				defaultData = printerDataFromGtkPrinter(filePrinter);
+				OS.g_object_unref(filePrinter);
+			}
+		}
+		if (defaultData == null) {
+			defaultData = getDefaultPrinterData();
+			if (defaultData == null) SWT.error(SWT.ERROR_NO_HANDLES);
+		}
+		data.driver = defaultData.driver;
+		data.name = defaultData.name;		
 	}
 	return data;
 }
@@ -257,7 +315,7 @@ static DeviceData checkNull (PrinterData data) {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
@@ -352,6 +410,9 @@ public Font getSystemFont () {
 	if (systemFont != null) return systemFont;
 	int /*long*/ style = OS.gtk_widget_get_default_style();	
 	int /*long*/ defaultFont = OS.pango_font_description_copy (OS.gtk_style_get_font_desc (style));
+	int size = OS.pango_font_description_get_size(defaultFont);
+	Point dpi = getDPI(), screenDPI = super.getDPI();
+	OS.pango_font_description_set_size(defaultFont, size * dpi.y / screenDPI.y);
 	return systemFont = Font.gtk_new (this, defaultFont);
 }
 
@@ -387,10 +448,15 @@ public int /*long*/ internal_new_GC(GCData data) {
 		data.background = getSystemColor (SWT.COLOR_WHITE).handle;
 		data.foreground = getSystemColor (SWT.COLOR_BLACK).handle;
 		data.font = getSystemFont ();
-		//TODO: We are supposed to return this in pixels, but GTK_UNIT_PIXELS is currently not implemented (gtk bug 346245)
-		data.width = (int)OS.gtk_page_setup_get_paper_width (pageSetup, OS.GTK_UNIT_POINTS);
-		data.height = (int)OS.gtk_page_setup_get_paper_height (pageSetup, OS.GTK_UNIT_POINTS);
+		Point dpi = getDPI(), screenDPI = getIndependentDPI();
+		data.width = (int)(OS.gtk_page_setup_get_paper_width (pageSetup, OS.GTK_UNIT_POINTS) * dpi.x / screenDPI.x);
+		data.height = (int)(OS.gtk_page_setup_get_paper_height (pageSetup, OS.GTK_UNIT_POINTS) * dpi.y / screenDPI.y);
 		if (cairo == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		Cairo.cairo_identity_matrix(cairo);
+		double printX = OS.gtk_page_setup_get_left_margin(pageSetup, OS.GTK_UNIT_POINTS);
+		double printY = OS.gtk_page_setup_get_top_margin(pageSetup, OS.GTK_UNIT_POINTS);
+		Cairo.cairo_translate(cairo, printX, printY);
+		Cairo.cairo_scale(cairo, screenDPI.x / (float)dpi.x, screenDPI.y / (float)dpi.y);
 		data.cairo = cairo;
 		isGCCreated = true;
 	}
@@ -591,10 +657,9 @@ public Point getDPI() {
 	checkDevice();
 	int resolution = OS.gtk_print_settings_get_resolution(settings);
 	if (DEBUG) System.out.println("print_settings.resolution=" + resolution);
-	//TODO: Return 72 (1/72 inch = 1 point) until gtk bug 346245 is fixed
-	//TODO: Fix this: gtk_print_settings_get_resolution returns 0? (see gtk bug 346252)
-	/*if (resolution == 0)*/ return new Point(72, 72);
-//	return new Point(resolution, resolution);
+	//TODO: use new api for get x resolution and get y resolution
+	if (resolution == 0) return new Point(72, 72);
+	return new Point(resolution, resolution);
 }
 
 /**
@@ -614,9 +679,9 @@ public Point getDPI() {
  */
 public Rectangle getBounds() {
 	checkDevice();
-	//TODO: We are supposed to return this in pixels, but GTK_UNIT_PIXELS is currently not implemented (gtk bug 346245)
-	double width = OS.gtk_page_setup_get_paper_width (pageSetup, OS.GTK_UNIT_POINTS);
-	double height = OS.gtk_page_setup_get_paper_height (pageSetup, OS.GTK_UNIT_POINTS);
+	Point dpi = getDPI(), screenDPI = getIndependentDPI();
+	double width = OS.gtk_page_setup_get_paper_width (pageSetup, OS.GTK_UNIT_POINTS) * dpi.x / screenDPI.x;
+	double height = OS.gtk_page_setup_get_paper_height (pageSetup, OS.GTK_UNIT_POINTS) * dpi.y / screenDPI.y;
 	return new Rectangle(0, 0, (int) width, (int) height);
 }
 
@@ -639,12 +704,16 @@ public Rectangle getBounds() {
  */
 public Rectangle getClientArea() {
 	checkDevice();
-	//TODO: We are supposed to return this in pixels, but GTK_UNIT_PIXELS is currently not implemented (gtk bug 346245)
-	double width = OS.gtk_page_setup_get_page_width(pageSetup, OS.GTK_UNIT_POINTS);
-	double height = OS.gtk_page_setup_get_page_height(pageSetup, OS.GTK_UNIT_POINTS);
+	Point dpi = getDPI(), screenDPI = getIndependentDPI();
+	double width = OS.gtk_page_setup_get_page_width(pageSetup, OS.GTK_UNIT_POINTS) * dpi.x / screenDPI.x;
+	double height = OS.gtk_page_setup_get_page_height(pageSetup, OS.GTK_UNIT_POINTS) * dpi.y / screenDPI.y;
 	return new Rectangle(0, 0, (int) width, (int) height);
 }
 
+Point getIndependentDPI () {
+	return new Point(72, 72);
+}
+
 /**
  * Given a <em>client area</em> (as described by the arguments),
  * returns a rectangle, relative to the client area's coordinates,
@@ -682,13 +751,13 @@ public Rectangle getClientArea() {
  */
 public Rectangle computeTrim(int x, int y, int width, int height) {
 	checkDevice();
-	//TODO: We are supposed to return this in pixels, but GTK_UNIT_PIXELS is currently not implemented (gtk bug 346245)
-	double printWidth = OS.gtk_page_setup_get_page_width(pageSetup, OS.GTK_UNIT_POINTS);
-	double printHeight = OS.gtk_page_setup_get_page_height(pageSetup, OS.GTK_UNIT_POINTS);
-	double paperWidth = OS.gtk_page_setup_get_paper_width (pageSetup, OS.GTK_UNIT_POINTS);
-	double paperHeight = OS.gtk_page_setup_get_paper_height (pageSetup, OS.GTK_UNIT_POINTS);
-	double printX = -OS.gtk_page_setup_get_left_margin(pageSetup, OS.GTK_UNIT_POINTS);
-	double printY = -OS.gtk_page_setup_get_top_margin(pageSetup, OS.GTK_UNIT_POINTS);
+	Point dpi = getDPI(), screenDPI = getIndependentDPI();
+	double printWidth = OS.gtk_page_setup_get_page_width(pageSetup, OS.GTK_UNIT_POINTS) * dpi.x / screenDPI.x;
+	double printHeight = OS.gtk_page_setup_get_page_height(pageSetup, OS.GTK_UNIT_POINTS) * dpi.y / screenDPI.y;
+	double paperWidth = OS.gtk_page_setup_get_paper_width (pageSetup, OS.GTK_UNIT_POINTS) * dpi.x / screenDPI.x;
+	double paperHeight = OS.gtk_page_setup_get_paper_height (pageSetup, OS.GTK_UNIT_POINTS) * dpi.y / screenDPI.y;
+	double printX = -OS.gtk_page_setup_get_left_margin(pageSetup, OS.GTK_UNIT_POINTS) * dpi.x / screenDPI.x;
+	double printY = -OS.gtk_page_setup_get_top_margin(pageSetup, OS.GTK_UNIT_POINTS) * dpi.y / screenDPI.y;
 	double hTrim = paperWidth - printWidth;
 	double vTrim = paperHeight - printHeight;
 	return new Rectangle(x + (int)printX, y + (int)printY, width + (int)hTrim, height + (int)vTrim);
@@ -703,7 +772,7 @@ public Rectangle computeTrim(int x, int y, int width, int height) {
 protected void create(DeviceData deviceData) {
 	this.data = (PrinterData)deviceData;
 	if (OS.GTK_VERSION < OS.VERSION (2, 10, 0) || disablePrinting) SWT.error(SWT.ERROR_NO_HANDLES);
-	printer = gtkPrinterFromPrinterData();
+	printer = gtkPrinterFromPrinterData(data);
 	if (printer == 0) SWT.error(SWT.ERROR_NO_HANDLES);
 }
 
@@ -720,7 +789,6 @@ protected void create(DeviceData deviceData) {
  * @see #create
  */
 protected void init() {
-	super.init ();
 	settings = OS.gtk_print_settings_new();
 	pageSetup = OS.gtk_page_setup_new();
 	if (data.otherData != null) {
@@ -728,20 +796,37 @@ protected void init() {
 	}
 	
 	/* Set values of print_settings and page_setup from PrinterData. */
-	//TODO: Should we look at printToFile, or driver/name for "Print to File", or both? (see gtk bug 345590)
 	if (data.printToFile && data.fileName != null) {
-		byte [] buffer = Converter.wcsToMbcs (null, data.fileName, true);
-		OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI, buffer);
-	}
-	if (data.driver.equals("GtkPrintBackendFile") && data.name.equals("Print to File") && data.fileName != null) { //$NON-NLS-1$ //$NON-NLS-2$
-		byte [] buffer = Converter.wcsToMbcs (null, data.fileName, true);
-		OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI, buffer);
+		byte [] uri = uriFromFilename(data.fileName);
+		if (uri != null) {
+			OS.gtk_print_settings_set(settings, OS.GTK_PRINT_SETTINGS_OUTPUT_URI, uri);
+		}
 	}
 	OS.gtk_print_settings_set_n_copies(settings, data.copyCount);
 	OS.gtk_print_settings_set_collate(settings, data.collate);
+	if (data.duplex != SWT.DEFAULT) {
+		int duplex = data.duplex == PrinterData.DUPLEX_LONG_EDGE ? OS.GTK_PRINT_DUPLEX_HORIZONTAL
+			: data.duplex == PrinterData.DUPLEX_SHORT_EDGE ? OS.GTK_PRINT_DUPLEX_VERTICAL
+			: OS.GTK_PRINT_DUPLEX_SIMPLEX;
+		OS.gtk_print_settings_set_duplex (settings, duplex);
+		/* 
+		 * Bug in GTK.  The cups backend only looks at the value
+		 * of the non-API field cups-Duplex in the print_settings.
+		 * The fix is to manually set cups-Duplex to Tumble or NoTumble.
+		 */
+		String cupsDuplexType = null;
+		if (duplex == OS.GTK_PRINT_DUPLEX_HORIZONTAL) cupsDuplexType = "DuplexNoTumble";
+		else if (duplex == OS.GTK_PRINT_DUPLEX_VERTICAL) cupsDuplexType = "DuplexTumble";
+		if (cupsDuplexType != null) {
+			byte [] keyBuffer = Converter.wcsToMbcs (null, "cups-Duplex", true);
+			byte [] valueBuffer = Converter.wcsToMbcs (null, cupsDuplexType, true);
+			OS.gtk_print_settings_set(settings, keyBuffer, valueBuffer);
+		}
+	}
 	int orientation = data.orientation == PrinterData.LANDSCAPE ? OS.GTK_PAGE_ORIENTATION_LANDSCAPE : OS.GTK_PAGE_ORIENTATION_PORTRAIT;
 	OS.gtk_page_setup_set_orientation(pageSetup, orientation);
 	OS.gtk_print_settings_set_orientation(settings, orientation);
+	super.init ();
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/PrintDialog.java
old mode 100644
new mode 100755
index 72e4dde..4829e2d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/PrintDialog.java	
@@ -20,8 +20,7 @@ import org.eclipse.swt.widgets.*;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/Printer.java
old mode 100644
new mode 100755
index 83ac822..6474368
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/motif/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -243,7 +243,7 @@ static String[] getXPServerList() {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/PrintDialog.java
old mode 100644
new mode 100755
index 72e4dde..4829e2d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/PrintDialog.java	
@@ -20,8 +20,7 @@ import org.eclipse.swt.widgets.*;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/Printer.java
old mode 100644
new mode 100755
index c3cf7f5..fb8ca9a
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/photon/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,7 +71,7 @@ public static PrinterData getDefaultPrinterData() {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java
old mode 100644
new mode 100755
index 1fd65f7..dfbdfca
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,8 +20,7 @@ import org.eclipse.swt.internal.win32.*;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
@@ -292,9 +291,9 @@ public PrinterData open() {
 	int /*long*/ hwndParent = parent.handle;
 
 	/*
-	* Feature in Windows.  There is no API to set the orientation of a
-	* file dialog.  It is always inherited from the parent.  The fix is
-	* to create a hidden parent and set the orientation in the hidden
+	* Feature in Windows.  There is no API to set the BIDI orientation
+	* of a print dialog.  It is always inherited from the parent.  The fix
+	* is to create a hidden parent and set the orientation in the hidden
 	* parent for the dialog to inherit.
 	*/
 	boolean enabled = false;
@@ -324,31 +323,82 @@ public PrinterData open() {
 	pd.lStructSize = PRINTDLG.sizeof;
 	pd.hwndOwner = hwndOwner;
 	
-	/* Initialize PRINTDLG fields, including DEVMODE. */
-	pd.Flags = OS.PD_RETURNDEFAULT;
-	if (OS.PrintDlg(pd)) {
-		if (pd.hDevNames != 0) {
-			OS.GlobalFree(pd.hDevNames);
-			pd.hDevNames = 0;
+	boolean success = false;
+	if (printerData.name != null) {
+		/* Ensure that the printer name is in the current list of printers. */
+		PrinterData printerList[] = Printer.getPrinterList();
+		if (printerList.length > 0) {
+			for (int p = 0; p < printerList.length; p++) {
+				if (printerList[p].name.equals(printerData.name)) {
+					success = true;
+					break;
+				}
+			}
 		}
+		if (success) {
+			/* Initialize PRINTDLG DEVNAMES for the specified printer. */
+			TCHAR buffer = new TCHAR(0, printerData.name, true);
+			int size = buffer.length() * TCHAR.sizeof;
+			short[] offsets = new short[4]; // DEVNAMES (4 offsets)
+			int offsetsSize = offsets.length * 2; // 2 bytes each
+			offsets[1] = (short) offsets.length; // offset 1 points to wDeviceOffset
+			int /*long*/ hMem = OS.GlobalAlloc(OS.GMEM_MOVEABLE | OS.GMEM_ZEROINIT, offsetsSize + size);
+			int /*long*/ ptr = OS.GlobalLock(hMem);
+			OS.MoveMemory(ptr, offsets, offsetsSize);
+			OS.MoveMemory(ptr + offsetsSize, buffer, size);
+			OS.GlobalUnlock(hMem);
+			pd.hDevNames = hMem;
+		}
+	}
+	if (!success) {
+		/* Initialize PRINTDLG fields, including DEVMODE, for the default printer. */
+		pd.Flags = OS.PD_RETURNDEFAULT;
+		if (success = OS.PrintDlg(pd)) {
+			if (pd.hDevNames != 0) {
+				OS.GlobalFree(pd.hDevNames);
+				pd.hDevNames = 0;
+			}
+		}
+	}
 
+	if (success) {
 		/*
 		 * If user setup info from a previous print dialog was specified,
 		 * then restore the previous DEVMODE struct.
 		 */
 		byte devmodeData [] = printerData.otherData;
 		if (devmodeData != null && devmodeData.length != 0) {
-			int /*long*/ lpInitData = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, devmodeData.length);
-			OS.MoveMemory(lpInitData, devmodeData, devmodeData.length);
+			int /*long*/ hMem = OS.GlobalAlloc(OS.GMEM_MOVEABLE | OS.GMEM_ZEROINIT, devmodeData.length);
+			int /*long*/ ptr = OS.GlobalLock(hMem);
+			OS.MoveMemory(ptr, devmodeData, devmodeData.length);
+			OS.GlobalUnlock(hMem);
 			if (pd.hDevMode != 0) OS.GlobalFree(pd.hDevMode);
-			pd.hDevMode = lpInitData;
+			pd.hDevMode = hMem;
 		}
 		
 		/* Initialize the DEVMODE struct's fields from the printerData. */
 		int /*long*/ hMem = pd.hDevMode;
+		if (hMem == 0) {
+			hMem = OS.GlobalAlloc(OS.GMEM_MOVEABLE | OS.GMEM_ZEROINIT, DEVMODE.sizeof);
+			pd.hDevMode = hMem;
+		}
 		int /*long*/ ptr = OS.GlobalLock(hMem);
 		DEVMODE devmode = OS.IsUnicode ? (DEVMODE)new DEVMODEW () : new DEVMODEA ();
 		OS.MoveMemory(devmode, ptr, OS.IsUnicode ? OS.DEVMODEW_sizeof() : OS.DEVMODEA_sizeof());
+		if (printerData.name != null) {
+			/* Copy PRINTDLG DEVNAMES into DEVMODE dmDeviceName (truncate if necessary). */
+			int max = Math.min(printerData.name.length(), OS.CCHDEVICENAME - 1);
+			if (OS.IsUnicode) {
+				for (int i = 0; i < max; i++) {
+					((DEVMODEW) devmode).dmDeviceName[i] = printerData.name.charAt(i);
+				}
+			} else {
+				byte[] bytes = printerData.name.getBytes();
+				for (int i = 0; i < max; i++) {
+					((DEVMODEA) devmode).dmDeviceName[i] = bytes[i];
+				}
+			}
+		}
 		devmode.dmFields |= OS.DM_ORIENTATION;
 		devmode.dmOrientation = printerData.orientation == PrinterData.PORTRAIT ? OS.DMORIENT_PORTRAIT : OS.DMORIENT_LANDSCAPE;
 		if (printerData.copyCount != 1) {
@@ -359,6 +409,14 @@ public PrinterData open() {
 			devmode.dmFields |= OS.DM_COLLATE;
 			devmode.dmCollate = OS.DMCOLLATE_TRUE;
 		}
+		if (printerData.duplex != SWT.DEFAULT) {
+			devmode.dmFields |= OS.DM_DUPLEX;
+			switch (printerData.duplex) {
+				case PrinterData.DUPLEX_SHORT_EDGE: devmode.dmDuplex = OS.DMDUP_HORIZONTAL; break;
+				case PrinterData.DUPLEX_LONG_EDGE: devmode.dmDuplex = OS.DMDUP_VERTICAL; break;
+				default: devmode.dmDuplex = OS.DMDUP_SIMPLEX;
+			}
+		}
 		OS.MoveMemory(ptr, devmode, OS.IsUnicode ? OS.DEVMODEW_sizeof() : OS.DEVMODEA_sizeof());
 		OS.GlobalUnlock(hMem);
 	
@@ -388,7 +446,7 @@ public PrinterData open() {
 		String key = "org.eclipse.swt.internal.win32.runMessagesInIdle"; //$NON-NLS-1$
 		Object oldValue = display.getData(key);
 		display.setData(key, new Boolean(true));
-		boolean success = OS.PrintDlg(pd);
+		success = OS.PrintDlg(pd);
 		display.setData(key, oldValue);
 		if ((getStyle() & (SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL)) != 0) {
 			for (int i=0; i<shells.length; i++) {
@@ -425,15 +483,7 @@ public PrinterData open() {
 				i++;
 			}
 			String device = buffer.toString(deviceOffset, i);	
-	
-			int outputOffset = offsets[2];
-			i = 0;
-			while (outputOffset + i < size) {
-				if (buffer.tcharAt(outputOffset + i) == 0) break;
-				i++;
-			}
-			String output = buffer.toString(outputOffset, i);
-			
+
 			/* Create PrinterData object and set fields from PRINTDLG */
 			data = new PrinterData(driver, device);
 			if ((pd.Flags & OS.PD_PAGENUMS) != 0) {
@@ -444,7 +494,7 @@ public PrinterData open() {
 				data.scope = PrinterData.SELECTION;
 			}
 			data.printToFile = (pd.Flags & OS.PD_PRINTTOFILE) != 0;
-			if (data.printToFile) data.fileName = output;
+			if (data.printToFile) data.fileName = printerData.fileName;
 			data.copyCount = pd.nCopies;
 			data.collate = (pd.Flags & OS.PD_COLLATE) != 0;
 	
@@ -454,12 +504,19 @@ public PrinterData open() {
 			ptr = OS.GlobalLock(hMem);
 			data.otherData = new byte[size];
 			OS.MoveMemory(data.otherData, ptr, size);
+			
+			/* Set PrinterData fields from DEVMODE */
 			devmode = OS.IsUnicode ? (DEVMODE)new DEVMODEW () : new DEVMODEA ();
 			OS.MoveMemory(devmode, ptr, OS.IsUnicode ? OS.DEVMODEW_sizeof() : OS.DEVMODEA_sizeof());
 			if ((devmode.dmFields & OS.DM_ORIENTATION) != 0) {
 				int dmOrientation = devmode.dmOrientation;
 				data.orientation = dmOrientation == OS.DMORIENT_LANDSCAPE ? PrinterData.LANDSCAPE : PrinterData.PORTRAIT;
 			}
+			if ((devmode.dmFields & OS.DM_DUPLEX) != 0) {
+				short dmDuplex = devmode.dmDuplex;
+				data.duplex = dmDuplex == OS.DMDUP_SIMPLEX ? PrinterData.DUPLEX_NONE : dmDuplex == OS.DMDUP_HORIZONTAL ? PrinterData.DUPLEX_SHORT_EDGE : PrinterData.DUPLEX_LONG_EDGE;
+			}
+
 			OS.GlobalUnlock(hMem);
 			printerData = data;
 		}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java
old mode 100644
new mode 100755
index cf02a0e..9e9c64c
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -141,6 +141,7 @@ public static PrinterData getDefaultPrinterData() {
 	if (commaIndex < length) {
 		deviceName = buf.toString(0, commaIndex);		
 	}
+	if (deviceName == null) return null;
 	String driver = ""; //$NON-NLS-1$
 	if (OS.GetProfileString(profile, new TCHAR(0, deviceName, true), nullBuf, buf, length) > 0) {
 		commaIndex = 0;
@@ -170,7 +171,7 @@ static DeviceData checkNull (PrinterData data) {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
@@ -225,7 +226,7 @@ protected void create(DeviceData deviceData) {
 		PRINTDLG pd = new PRINTDLG();
 		pd.lStructSize = PRINTDLG.sizeof;
 		pd.Flags = OS.PD_RETURNDEFAULT;
-		OS.PrintDlg(pd);
+		if (!OS.PrintDlg(pd)) SWT.error(SWT.ERROR_NO_HANDLES);
 		if (pd.hDevMode != 0) {
 			int /*long*/ hGlobal = pd.hDevMode;
 			int /*long*/ ptr = OS.GlobalLock(hGlobal);
@@ -251,6 +252,14 @@ protected void create(DeviceData deviceData) {
 		devmode.dmFields |= OS.DM_COLLATE;
 		devmode.dmCollate = OS.DMCOLLATE_TRUE;
 	}
+	if (data.duplex != SWT.DEFAULT) {
+		devmode.dmFields |= OS.DM_DUPLEX;
+		switch (data.duplex) {
+			case PrinterData.DUPLEX_SHORT_EDGE: devmode.dmDuplex = OS.DMDUP_HORIZONTAL; break;
+			case PrinterData.DUPLEX_LONG_EDGE: devmode.dmDuplex = OS.DMDUP_VERTICAL; break;
+			default: devmode.dmDuplex = OS.DMDUP_SIMPLEX;
+		}
+	}
 	OS.MoveMemory(lpInitData, devmode, DEVMODE.sizeof);
 
 	handle = OS.CreateDC(driver, device, 0, lpInitData);
@@ -345,7 +354,11 @@ public boolean startJob(String jobName) {
 		di.lpszDocName = lpszDocName;
 	}
 	int /*long*/ lpszOutput = 0;
-	if (data.printToFile && data.fileName != null) {
+	if (data.printToFile) {
+		if (data.fileName == null) {
+			/* Prompt the user for a file name. */
+			data.fileName = "FILE:"; //$NON-NLS-1$
+		}
 		/* Use the character encoding for the default locale */
 		TCHAR buffer = new TCHAR(0, data.fileName, true);
 		int byteCount = buffer.length() * TCHAR.sizeof;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java
index 72e4dde..4829e2d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java	
@@ -20,8 +20,7 @@ import org.eclipse.swt.widgets.*;
  * a printer and various print-related parameters
  * prior to starting a print job.
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java
index c3cf7f5..fb8ca9a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,7 +71,7 @@ public static PrinterData getDefaultPrinterData() {
  * </p>
  *
  * @exception SWTError <ul>
- *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ *    <li>ERROR_NO_HANDLES - if there is no valid default printer
  * </ul>
  *
  * @see Device#dispose
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java
old mode 100644
new mode 100755
index df4ee14..ac206dd
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ import java.util.Vector;
 public final class Program {
 	String name, fullPath, identifier;
 
+	static final String PREFIX_FILE = "file:/"; //$NON-NLS-1$
 	static final String PREFIX_HTTP = "http://"; //$NON-NLS-1$
 	static final String PREFIX_HTTPS = "https://"; //$NON-NLS-1$
 
@@ -159,12 +160,13 @@ static Program getProgram(NSBundle bundle) {
         bundleName = bundle.objectForInfoDictionaryKey(CFBundleName);
     }
     if (bundleName == null) {
-        bundleName = fullPath.lastPathComponent().stringByDeletingPathExtension();
+       if (fullPath == null) return null;
+       bundleName = fullPath.lastPathComponent().stringByDeletingPathExtension();
     }
     NSString name = new NSString(bundleName.id);
     Program program = new Program();
     program.name = name.getString();
-    program.fullPath = fullPath.getString();
+    if (fullPath != null) program.fullPath = fullPath.getString();
     program.identifier = identifier != null ? identifier.getString() : "";
     return program;
 }
@@ -194,7 +196,10 @@ public static Program [] getPrograms () {
 					NSString fullPath = path.stringByAppendingPathComponent(new NSString(id.id));
 					if (workspace.isFilePackageAtPath(fullPath)) {
 						NSBundle bundle = NSBundle.bundleWithPath(fullPath);
-						if (bundle != null) vector.addElement(getProgram(bundle));
+						if (bundle != null) {
+							Program program = getProgram(bundle);
+							if (program != null) vector.addElement(program);
+						}
 					}
 				}
 			}
@@ -210,7 +215,7 @@ public static Program [] getPrograms () {
 static NSURL getURL (String fileName) {
 	NSString unescapedStr;
 	String lowercaseName = fileName.toLowerCase ();
-	if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS)) {
+	if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS) || lowercaseName.startsWith (PREFIX_FILE)) {
 		unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
 	} else {
 		unescapedStr = NSString.stringWith("%"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/common/org/eclipse/swt/program/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/common/org/eclipse/swt/program/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gnome/library/gnome.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gnome/library/gnome.h
index 4cebd6d..07f1b5a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gnome/library/gnome.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gnome/library/gnome.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
-* Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.
+* Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
 * The contents of this file are made available under the terms
 * of the GNU Lesser General Public License (LGPL) Version 2.1 that
 * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java
index 9d4d4fe..80efc65 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,34 +94,21 @@ static int getDesktop(final Display display) {
 	 * The workaround is to simply check that the window manager is a 
 	 * compliant one (property _NET_SUPPORTING_WM_CHECK) and to attempt to load 
 	 * our native library that depends on gnome-vfs.
+	 * 
+	 * Note: GIO is used when available instead of gnome-vfs.
 	 */
 	if (desktop == DESKTOP_UNKNOWN) {
 		byte[] gnomeName = Converter.wcsToMbcs(null, "_NET_SUPPORTING_WM_CHECK", true);
 		int /*long*/ gnome = OS.XInternAtom(xDisplay, gnomeName, true);
-		if (gnome != OS.None && (OS.GTK_VERSION >= OS.VERSION (2, 2, 0)) && gnome_init()) {
-			desktop = DESKTOP_GNOME;
-			int /*long*/ icon_theme = GNOME.gnome_icon_theme_new();
-			display.setData(ICON_THEME_DATA, new LONG(icon_theme));
-			display.addListener(SWT.Dispose, new Listener() {
-				public void handleEvent(Event event) {
-					LONG gnomeIconTheme = (LONG)display.getData(ICON_THEME_DATA);
-					if (gnomeIconTheme == null) return;
-					display.setData(ICON_THEME_DATA, null);
-					/* 
-					 * Note.  gnome_icon_theme_new uses g_object_new to allocate the
-					 * data it returns. Use g_object_unref to free the pointer it returns.
-					 */
-					if (gnomeIconTheme.value != 0) OS.g_object_unref(gnomeIconTheme.value);
-				}
-			});
-			/* Check for the existence of libgio libraries */
-			byte[] buffer ;
+		if (gnome != OS.None) {
+			/* Check for the existence of libgio libraries first */
+			byte[] buffer;
 			int flags = OS.RTLD_LAZY;
 			if (OS.IsAIX) {
-				 buffer = Converter.wcsToMbcs(null, "libgio-2.0.a(libgio-2.0.so.0)", true);
-				 flags |= OS.RTLD_MEMBER;
+				buffer = Converter.wcsToMbcs(null, "libgio-2.0.a(libgio-2.0.so.0)", true);
+				flags |= OS.RTLD_MEMBER;
 			} else  if (OS.IsHPUX) {
-				 buffer = Converter.wcsToMbcs(null, "libgio-2.0.so", true);
+				buffer = Converter.wcsToMbcs(null, "libgio-2.0.so", true);
 			} else {
 				buffer =  Converter.wcsToMbcs(null, "libgio-2.0.so.0", true);
 			}
@@ -133,7 +120,24 @@ static int getDesktop(final Display display) {
 					desktop = DESKTOP_GIO;
 				}
 				OS.dlclose(libgio);
-			} else {
+			}
+			
+			if (desktop == DESKTOP_UNKNOWN && (OS.GTK_VERSION >= OS.VERSION (2, 2, 0)) && gnome_init()) {
+				desktop = DESKTOP_GNOME;
+				int /*long*/ icon_theme = GNOME.gnome_icon_theme_new();
+				display.setData(ICON_THEME_DATA, new LONG(icon_theme));
+				display.addListener(SWT.Dispose, new Listener() {
+					public void handleEvent(Event event) {
+						LONG gnomeIconTheme = (LONG)display.getData(ICON_THEME_DATA);
+						if (gnomeIconTheme == null) return;
+						display.setData(ICON_THEME_DATA, null);
+						/* 
+						 * Note.  gnome_icon_theme_new uses g_object_new to allocate the
+						 * data it returns. Use g_object_unref to free the pointer it returns.
+						 */
+						if (gnomeIconTheme.value != 0) OS.g_object_unref(gnomeIconTheme.value);
+					}
+				});
 				/* Check for libgnomevfs-2 version 2.4 */
 				buffer = Converter.wcsToMbcs(null, "libgnomevfs-2.so.0", true);
 				int /*long*/ libgnomevfs = OS.dlopen(buffer, OS.RTLD_LAZY);
@@ -974,14 +978,17 @@ boolean gio_execute(String fileName) {
 	if (application != 0) {
 		byte[] fileNameBuffer = Converter.wcsToMbcs (null, fileName, true);
 		int /*long*/ file = 0;
-		if (OS.g_app_info_supports_uris (application)) {
-			file = OS.g_file_new_for_uri (fileNameBuffer);
-		} else {
-			file = OS.g_file_new_for_path (fileNameBuffer);
+		if (fileName.length() > 0) {
+			if (OS.g_app_info_supports_uris (application)) {
+				file = OS.g_file_new_for_uri (fileNameBuffer);
+			} else {
+				file = OS.g_file_new_for_path (fileNameBuffer);
+			}
 		}
-		if (file != 0) {
-			int /*long*/ list = OS.g_list_append (0, file);
-			result = OS.g_app_info_launch (application, list, 0, 0);
+		int /*long*/ list = 0;
+		if (file != 0) list = OS.g_list_append (0, file);
+		result = OS.g_app_info_launch (application, list, 0, 0);
+		if (list != 0) {
 			OS.g_list_free (list);
 			OS.g_object_unref (file);
 		}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/motif/org/eclipse/swt/program/Program.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/motif/org/eclipse/swt/program/Program.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/photon/org/eclipse/swt/program/Program.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/photon/org/eclipse/swt/program/Program.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/win32/org/eclipse/swt/program/Program.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Program/win32/org/eclipse/swt/program/Program.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java
index a170c1f..eff7bef 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -130,17 +130,19 @@ void draw(Theme theme, GC gc, Rectangle bounds) {
 		int border_width = OS.gtk_container_get_border_width(buttonHandle);
 		
 		GtkBorder default_border = new GtkBorder();
-		int default_border_ptr = theme.getWidgetProperty(buttonHandle, "default-border");
+		int /*long*/ default_border_ptr = theme.getBorderProperty(buttonHandle, "default-border");
 		if (default_border_ptr != 0) {
-			OS.memmove(default_border, default_border_ptr, GdkRectangle.sizeof);
+			OS.memmove(default_border, default_border_ptr, GtkBorder.sizeof);
+			OS.gtk_border_free(default_border_ptr);
 		} else {
 			default_border.left = default_border.right = default_border.top = default_border.bottom = 1;
 		}
 
 		GtkBorder default_outside_border = new GtkBorder();
-		int default_outside_border_ptr = theme.getWidgetProperty(buttonHandle, "default-outside-border");
+		int /*long*/ default_outside_border_ptr = theme.getBorderProperty(buttonHandle, "default-outside-border");
 		if (default_outside_border_ptr != 0) {
-			OS.memmove(default_outside_border, default_outside_border_ptr, GdkRectangle.sizeof);
+			OS.memmove(default_outside_border, default_outside_border_ptr, GtkBorder.sizeof);
+			OS.gtk_border_free(default_outside_border_ptr);
 		} else {
 			default_outside_border.left = default_outside_border.right = default_outside_border.top = default_outside_border.bottom = 0;
 		}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java
index 3bab8a1..dbf3b0d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,10 +47,10 @@ void draw(Theme theme, GC gc, Rectangle bounds) {
 	int arrow_width = MIN_ARROW_SIZE;
 	int arrow_height = ARROW_HEIGHT;
 	int x_border = xthickness + focus_padding;
-	int y_border = ythickness + focus_padding;
+	//int y_border = ythickness + focus_padding;
 	if (interior_focus == 0) {
 		x_border += focus_line_width;
-		y_border += focus_line_width;
+		//y_border += focus_line_width;
 	}
 	int arrow_button_width = arrow_width + x_border * 2;		
 	int arrow_button_x = x + width - arrow_button_width;
@@ -106,16 +106,17 @@ int hit(Theme theme, Point position, Rectangle bounds) {
 	int focus_line_width = theme.getWidgetProperty(buttonHandle, "focus-line-width");
 	int focus_padding = theme.getWidgetProperty(buttonHandle, "focus-padding");
 	int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
-	int ythickness = OS.gtk_style_get_xthickness(gtkStyle);
+//	int ythickness = OS.gtk_style_get_xthickness(gtkStyle);
 	int arrow_width = MIN_ARROW_SIZE;
 	int x_border = xthickness + focus_padding;
-	int y_border = ythickness + focus_padding;
+	//int y_border = ythickness + focus_padding;
 	if (interior_focus == 0) {
 		x_border += focus_line_width;
-		y_border += focus_line_width;
+		//y_border += focus_line_width;
 	}
 	int arrow_button_width = arrow_width + x_border * 2;		
 	int arrow_button_x = bounds.x + bounds.width - arrow_button_width;
+
 	Rectangle arrowRect = new Rectangle(arrow_button_x, bounds.y, arrow_button_width, bounds.height);
 	if (arrowRect.contains(position)) return DrawData.COMBO_ARROW;
 	return DrawData.WIDGET_WHOLE;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java
index a174a93..72d8175 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -225,6 +225,14 @@ int getWidgetProperty(int /*long*/ handle, String name) {
 	return result[0];
 }
 
+
+int /*long*/ getBorderProperty(int /*long*/ handle, String name) {
+	byte[] propertyName = Converter.wcsToMbcs(null, name, true);
+	int /*long*/ [] result = new int /*long*/[1];
+	OS.gtk_widget_style_get(handle, propertyName, result, 0);
+	return result[0];
+}
+
 void transferClipping(GC gc, int /*long*/ style) {
 	GCData data = gc.getGCData();
 	int /*long*/ clipRgn = data.clipRgn;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java
new file mode 100755
index 0000000..3d22383
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java	
@@ -0,0 +1,2205 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Enumeration;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.carbon.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class WebKit extends WebBrowser {
+	
+	/* Objective-C WebView delegate */
+	int delegate;
+	
+	/* Carbon HIView handle */
+	int webViewHandle, webView;
+	int windowBoundsHandler;
+	int preferences;
+	
+	boolean loadingText, hasNewFocusElement, untrustedText;
+	String lastHoveredLinkURL, lastNavigateURL;
+	String html;
+	int identifier;
+	int resourceCount;
+	int lastMouseMoveX, lastMouseMoveY;
+	String url = ""; //$NON-NLS-1$
+	Point location;
+	Point size;
+	boolean statusBar = true, toolBar = true, ignoreDispose;
+	//TEMPORARY CODE
+//	boolean doit;
+
+	static boolean Initialized;
+	static Callback Callback3, Callback7;
+
+	static final int MIN_SIZE = 16;
+	static final int MAX_PROGRESS = 100;
+	static final String WebElementLinkURLKey = "WebElementLinkURL"; //$NON-NLS-1$
+	static final String AGENT_STRING = "Safari/412.0"; /* Safari version on OSX 10.4 initial release */ //$NON-NLS-1$
+	static final String URI_FILEROOT = "file:///"; //$NON-NLS-1$
+	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
+	static final String PROTOCOL_HTTP = "http://"; //$NON-NLS-1$
+	static final String URI_APPLEWEBDATA = "applewebdata://"; //$NON-NLS-1$
+	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
+	static final String HEADER_SETCOOKIE = "Set-Cookie"; //$NON-NLS-1$
+	static final String POST = "POST"; //$NON-NLS-1$
+	static final String USER_AGENT = "user-agent"; //$NON-NLS-1$
+	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
+	static final String BROWSER_WINDOW = "org.eclipse.swt.browser.Browser.Window"; //$NON-NLS-1$
+	static final String WEBKIT_EVENTS_FIX_KEY = "org.eclipse.swt.internal.webKitEventsFix"; //$NON-NLS-1$
+
+	/* event strings */
+	static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$
+	static final String DOMEVENT_KEYDOWN = "keydown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEDOWN = "mousedown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEUP = "mouseup"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEMOVE = "mousemove"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEWHEEL = "mousewheel"; //$NON-NLS-1$
+	static final String DOMEVENT_FOCUSIN = "DOMFocusIn"; //$NON-NLS-1$
+	static final String DOMEVENT_FOCUSOUT = "DOMFocusOut"; //$NON-NLS-1$
+
+	static {
+		Cocoa.WebInitForCarbon();
+
+		NativeClearSessions = new Runnable() {
+			public void run() {
+				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
+				int cookies = Cocoa.objc_msgSend (storage, Cocoa.S_cookies);
+				int count = Cocoa.objc_msgSend (cookies, Cocoa.S_count);
+				for (int i = 0; i < count; i++) {
+					int cookie = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, i);
+					boolean isSession = Cocoa.objc_msgSend (cookie, Cocoa.S_isSessionOnly) != 0;
+					if (isSession) {
+						Cocoa.objc_msgSend (storage, Cocoa.S_deleteCookie, cookie);
+					}
+				}
+			}
+		};
+
+		NativeGetCookie = new Runnable () {
+			public void run () {
+				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
+				int urlString = createNSString (CookieUrl);
+				int url = Cocoa.objc_msgSend (Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString);
+				OS.CFRelease (urlString);
+				int cookies = Cocoa.objc_msgSend (storage, Cocoa.S_cookiesForURL, url);
+				int count = Cocoa.objc_msgSend (cookies, Cocoa.S_count);
+				if (count == 0) return;
+
+				int name = createNSString (CookieName);
+				for (int i = 0; i < count; i++) {
+					int current = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, i);
+					int currentName = Cocoa.objc_msgSend (current, Cocoa.S_name);
+					if (Cocoa.objc_msgSend (currentName, Cocoa.S_compare, name) == Cocoa.NSOrderedSame) {
+						int value = Cocoa.objc_msgSend (current, Cocoa.S_value);
+						int length = OS.CFStringGetLength (value);
+						char[] buffer = new char[length];
+						CFRange range = new CFRange ();
+						range.length = length;
+						OS.CFStringGetCharacters (value, range, buffer);
+						CookieValue = new String (buffer);
+						OS.CFRelease (name);
+						return;
+					}
+				}
+				OS.CFRelease (name);
+			}
+		};
+
+		NativeSetCookie = new Runnable () {
+			public void run () {
+				int urlString = createNSString(CookieUrl);
+				int url = Cocoa.objc_msgSend (Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString);
+				OS.CFRelease (urlString);
+
+				int value = createNSString (CookieValue);
+				int key = createNSString (HEADER_SETCOOKIE);
+				int headers = Cocoa.objc_msgSend (Cocoa.C_NSMutableDictionary, Cocoa.S_dictionaryWithCapacity, 1);
+				Cocoa.objc_msgSend (headers, Cocoa.S_setValue, value, key);
+				OS.CFRelease (key);
+				OS.CFRelease (value);
+
+				int cookies = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookie, Cocoa.S_cookiesWithResponseHeaderFields, headers, url);
+				if (Cocoa.objc_msgSend (cookies, Cocoa.S_count) == 0) return;
+				int cookie = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, 0);
+				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
+				Cocoa.objc_msgSend (storage, Cocoa.S_setCookie, cookie);
+				CookieResult = true;
+			}
+		};
+
+		if (NativePendingCookies != null) {
+			SetPendingCookies (NativePendingCookies);
+		}
+		NativePendingCookies = null;
+	}
+
+public void create (Composite parent, int style) {
+	/*
+	* Note.  Loading the webkit bundle on Jaguar causes a crash.
+	* The workaround is to detect any OS prior to 10.30 and fail
+	* without crashing.
+	*/
+	if (OS.VERSION < 0x1030) {
+		browser.dispose();
+		SWT.error(SWT.ERROR_NO_HANDLES);
+	}
+	
+	/*
+	* Bug in WebKit on OSX 10.5 (Leopard) only.  VoiceOver no longer follows focus when
+	* HIWebViewCreate is used to create a WebView.  The VoiceOver cursor (activated by
+	* Control+Alt+arrows) continues to work, but keyboard focus is not tracked.  The fix
+	* is to create the WebView with HICocoaViewCreate (api introduced in OSX 10.5) when
+	* running on OSX 10.5.
+	*/
+	int outControl[] = new int[1];
+	if (OS.VERSION >= 0x1050) {
+		webView = Cocoa.objc_msgSend(Cocoa.objc_msgSend(Cocoa.C_WebView, Cocoa.S_alloc), Cocoa.S_initWithFrame_frameName_groupName, new NSRect(), 0, 0);
+		if (webView != 0) {
+			Cocoa.HICocoaViewCreate(webView, 0, outControl);
+			webViewHandle = outControl[0];
+			Cocoa.objc_msgSend(webView, Cocoa.S_release);
+		}
+	} else {
+		Cocoa.HIWebViewCreate(outControl);
+		webViewHandle = outControl[0];
+		if (webViewHandle != 0) {
+			webView = Cocoa.HIWebViewGetWebView(webViewHandle);
+		}
+	}
+	if (webViewHandle == 0) {
+		browser.dispose();
+		SWT.error(SWT.ERROR_NO_HANDLES);
+	}
+
+	Display display = browser.getDisplay();
+	display.setData(ADD_WIDGET_KEY, new Object[] {new Integer(webViewHandle), browser});
+
+	/*
+	* WebKit's DOM listener api became functional in OSX 10.4.  If OSX 10.4 or 
+	* later is detected then override the default event mechanism to not send key
+	* events and some mouse events so that the browser can send them by listening
+	* to the DOM instead.
+	*/
+	if (!(OS.VERSION < 0x1040)) {
+		browser.setData(WEBKIT_EVENTS_FIX_KEY);
+	}
+
+	/*
+	* Bug in WebKit.  For some reason, every application must contain
+	* a visible window that has never had a WebView or mouse move events
+	* are not delivered.  This seems to happen after a browser has been
+	* either hidden or disposed in any window.  The fix is to create a
+	* single transparent overlay window that is disposed when the display
+	* is disposed.
+	*/
+	if (display.getData(BROWSER_WINDOW) == null) {
+		Rect bounds = new Rect ();
+		OS.SetRect (bounds, (short) 0, (short) 0, (short) 1, (short) 1);
+		final int[] outWindow = new int[1];
+		OS.CreateNewWindow(OS.kOverlayWindowClass, 0, bounds, outWindow);
+		OS.ShowWindow(outWindow[0]);
+		OS.HIObjectSetAccessibilityIgnored (outWindow[0], true);
+		display.disposeExec(new Runnable() {
+			public void run() {
+				if (outWindow[0] != 0) {
+					OS.DisposeWindow(outWindow[0]);
+				}
+				outWindow[0] = 0;
+			}
+		});
+		display.setData(BROWSER_WINDOW, outWindow);
+	}
+	
+	/*
+	* Bug in WebKit. The WebView does not draw properly if it is embedded as
+	* sub view of the browser handle.  The fix is to add the web view to the
+	* window root control and resize it on top of the browser handle.
+	* 
+	* Note that when the browser is reparented, the web view has to
+	* be reparented by hand by hooking kEventControlOwningWindowChanged.
+	*/
+	int window = OS.GetControlOwner(browser.handle);
+	int[] contentView = new int[1];
+	OS.HIViewFindByID(OS.HIViewGetRoot(window), OS.kHIViewWindowContentID(), contentView);
+	OS.HIViewAddSubview(contentView[0], webViewHandle);
+	OS.HIViewChangeFeatures(webViewHandle, OS.kHIViewFeatureIsOpaque, 0);
+
+	/*
+	* Bug in WebKit. The WebView does not receive mouse and key events when it is added
+	* to a visible top window.  It is assumed that WebKit hooks its own event listener
+	* when the top window emits the kEventWindowShown event. The workaround is to send a
+	* fake kEventWindowShown event to the top window after the WebView has been added
+	* to the HIView (after the top window is visible) to give WebKit a chance to hook
+	* events.
+	*/
+	OS.HIViewSetVisible(webViewHandle, true);	
+	if (browser.getShell().isVisible()) {
+		int[] showEvent = new int[1];
+		OS.CreateEvent(0, OS.kEventClassWindow, OS.kEventWindowShown, 0.0, OS.kEventAttributeUserEvent, showEvent);
+		OS.SetEventParameter(showEvent[0], OS.kEventParamDirectObject, OS.typeWindowRef, 4, new int[] {OS.GetControlOwner(browser.handle)});
+		OS.SendEventToEventTarget(showEvent[0], OS.GetWindowEventTarget(window));
+		if (showEvent[0] != 0) OS.ReleaseEvent(showEvent[0]);
+	}
+
+	/*
+	* This code is intentionally commented. Setting a group name is the right thing
+	* to do in order to avoid multiple open window requests. For some reason, WebKit
+	* crashes when requested to reopen the same window if that window was previously
+	* closed. This may be because that window was not correctly closed. 
+	*/	
+//	String groupName = "MyDocument"; //$NON-NLS-1$
+//	int length = groupName.length();
+//	char[] buffer = new char[length];
+//	groupName.getChars(0, length, buffer, 0);
+//	int groupNameString = OS.CFStringCreateWithCharacters(0, buffer, length);
+//	// [webView setGroupName:@"MyDocument"];
+//	WebKit.objc_msgSend(webView, WebKit.S_setGroupName, groupNameString);
+//	OS.CFRelease(groupNameString);
+	
+	final int notificationCenter = Cocoa.objc_msgSend(Cocoa.C_NSNotificationCenter, Cocoa.S_defaultCenter);
+
+	Listener listener = new Listener() {
+		public void handleEvent(Event e) {
+			switch (e.type) {
+				case SWT.Dispose: {
+					/* make this handler run after other dispose listeners */
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (e.type, e);
+					e.type = SWT.NONE;
+
+					/* invoke onbeforeunload handlers */
+					if (!browser.isClosing && !browser.isDisposed()) {
+						close (false);
+					}
+
+					OS.RemoveEventHandler(windowBoundsHandler);
+					windowBoundsHandler = 0;
+
+					e.display.setData(ADD_WIDGET_KEY, new Object[] {new Integer(webViewHandle), null});
+
+					Cocoa.objc_msgSend(webView, Cocoa.S_setFrameLoadDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setResourceLoadDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setUIDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setPolicyDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setDownloadDelegate, 0);
+					Cocoa.objc_msgSend(notificationCenter, Cocoa.S_removeObserver, delegate);
+					
+					Cocoa.objc_msgSend(delegate, Cocoa.S_release);
+					OS.DisposeControl(webViewHandle);
+					webView = webViewHandle = 0;
+					html = null;
+					lastHoveredLinkURL = lastNavigateURL = null;
+
+					Enumeration elements = functions.elements ();
+					while (elements.hasMoreElements ()) {
+						((BrowserFunction)elements.nextElement ()).dispose (false);
+					}
+					functions = null;
+
+					if (preferences != 0) {
+						Cocoa.objc_msgSend (preferences, Cocoa.S_release);
+					}
+					preferences = 0;
+					break;
+				}
+				case SWT.FocusIn: {
+					hasNewFocusElement = true;
+					OS.SetKeyboardFocus(OS.GetControlOwner(browser.handle), webViewHandle, (short)-1);
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener(SWT.Dispose, listener);
+	browser.addListener(SWT.FocusIn, listener);
+	browser.addListener(SWT.KeyDown, listener); /* needed to make browser traversable */
+	
+	if (Callback3 == null) Callback3 = new Callback(this.getClass(), "eventProc3", 3); //$NON-NLS-1$
+	int callback3Address = Callback3.getAddress();
+	if (callback3Address == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+
+	int[] mask = new int[] {
+		OS.kEventClassKeyboard, OS.kEventRawKeyDown,
+		OS.kEventClassControl, OS.kEventControlDraw,
+		OS.kEventClassControl, OS.kEventControlGetClickActivation,
+		OS.kEventClassControl, OS.kEventControlSetCursor,
+		OS.kEventClassTextInput, OS.kEventTextInputUnicodeForKeyEvent,
+	};
+	OS.InstallEventHandler(OS.GetControlEventTarget(webViewHandle), callback3Address, mask.length / 2, mask, webViewHandle, null);
+	int[] mask1 = new int[] {
+		OS.kEventClassControl, OS.kEventControlBoundsChanged,
+		OS.kEventClassControl, OS.kEventControlVisibilityChanged,
+		OS.kEventClassControl, OS.kEventControlOwningWindowChanged,
+	};
+	OS.InstallEventHandler(OS.GetControlEventTarget(browser.handle), callback3Address, mask1.length / 2, mask1, browser.handle, null);
+	int[] mask2 = new int[] {
+		OS.kEventClassWindow, OS.kEventWindowBoundsChanged,
+	};
+	int[] outRef = new int[1];
+	OS.InstallEventHandler(OS.GetWindowEventTarget(window), callback3Address, mask2.length / 2, mask2, browser.handle, outRef);
+	windowBoundsHandler = outRef[0];
+
+	if (Callback7 == null) Callback7 = new Callback(this.getClass(), "eventProc7", 7); //$NON-NLS-1$
+	int callback7Address = Callback7.getAddress();
+	if (callback7Address == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	
+	// delegate = [[WebResourceLoadDelegate alloc] init eventProc];
+	delegate = Cocoa.objc_msgSend(Cocoa.C_WebKitDelegate, Cocoa.S_alloc);
+	delegate = Cocoa.objc_msgSend(delegate, Cocoa.S_initWithProc, callback7Address, webViewHandle);
+
+	// [webView setFrameLoadDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setFrameLoadDelegate, delegate);
+		
+	// [webView setResourceLoadDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setResourceLoadDelegate, delegate);
+
+	// [webView setUIDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setUIDelegate, delegate);
+	
+	/* register delegate for all notifications sent out from webview */
+	Cocoa.objc_msgSend(notificationCenter, Cocoa.S_addObserver_selector_name_object, delegate, Cocoa.S_handleNotification, 0, webView);
+	
+	// [webView setPolicyDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setPolicyDelegate, delegate);
+
+	// [webView setDownloadDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setDownloadDelegate, delegate);
+
+	// [webView setApplicationNameForUserAgent:applicationName];
+	int sHandle = createNSString(AGENT_STRING);
+	Cocoa.objc_msgSend(webView, Cocoa.S_setApplicationNameForUserAgent, sHandle);
+	OS.CFRelease(sHandle);
+
+	if (OS.VERSION < 0x1050 && display.getActiveShell() == browser.getShell()) {
+		Cocoa.objc_msgSend(Cocoa.objc_msgSend(webView, Cocoa.S_window), Cocoa.S_makeKeyWindow);
+	}
+
+	if (!Initialized) {
+		Initialized = true;
+		/* disable applets */
+		int preferences = Cocoa.objc_msgSend(Cocoa.C_WebPreferences, Cocoa.S_standardPreferences);
+		Cocoa.objc_msgSend(preferences, Cocoa.S_setJavaEnabled, 0);
+	}
+}
+
+static int eventProc3(int nextHandler, int theEvent, int userData) {
+	Widget widget = Display.getCurrent().findWidget(userData);
+	if (widget instanceof Browser) {
+		return ((WebKit)((Browser)widget).webBrowser).handleCallback(nextHandler, theEvent);
+	}
+	return OS.eventNotHandledErr;
+}
+
+static int eventProc7(int webview, int userData, int selector, int arg0, int arg1, int arg2, int arg3) {
+	Widget widget = Display.getCurrent().findWidget(userData);
+	if (widget instanceof Browser) {
+		return ((WebKit)((Browser)widget).webBrowser).handleCallback(selector, arg0, arg1, arg2, arg3);
+	}
+	return 0;
+}
+
+static int createNSString(String string) {
+	int length = string.length ();
+	char[] buffer = new char[length];
+	string.getChars (0, length, buffer, 0);
+	return OS.CFStringCreateWithCharacters (0, buffer, length);
+}
+
+static String getString (int ptr) {
+	int length = OS.CFStringGetLength (ptr);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange ();
+	range.length = length;
+	OS.CFStringGetCharacters (ptr, range, buffer);
+	return new String (buffer);
+}
+
+public boolean back() {
+	html = null;
+	return Cocoa.objc_msgSend(webView, Cocoa.S_goBack) != 0;
+}
+
+public boolean close () {
+	return close (true);
+}
+
+boolean close (boolean showPrompters) {
+	if (!jsEnabled) return true;
+
+	String functionName = EXECUTE_ID + "CLOSE"; // $NON-NLS-1$
+	StringBuffer buffer = new StringBuffer ("function "); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append ("(win) {\n"); // $NON-NLS-1$
+	buffer.append ("var fn = win.onbeforeunload; if (fn != null) {try {var str = fn(); "); // $NON-NLS-1$
+	if (showPrompters) {
+		buffer.append ("if (str != null) { "); // $NON-NLS-1$
+		buffer.append ("var result = window.external.callRunBeforeUnloadConfirmPanelWithMessage(str);"); // $NON-NLS-1$
+		buffer.append ("if (!result) return false;}"); // $NON-NLS-1$
+	}	
+	buffer.append ("} catch (e) {}}"); // $NON-NLS-1$
+	buffer.append ("try {for (var i = 0; i < win.frames.length; i++) {var result = "); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append ("(win.frames[i]); if (!result) return false;}} catch (e) {} return true;"); // $NON-NLS-1$
+	buffer.append ("\n};"); // $NON-NLS-1$
+	execute (buffer.toString ());
+
+	Boolean result = (Boolean)evaluate ("return " + functionName +"(window);"); // $NON-NLS-1$ // $NON-NLS-2$
+	if (result == null) return false;
+	return result.booleanValue ();
+}
+
+public boolean execute(String script) {
+	int frame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	int context = Cocoa.objc_msgSend(frame, Cocoa.S_globalContext);
+
+	byte[] bytes = null;
+	try {
+		bytes = (script + '\0').getBytes("UTF-8"); //$NON-NLS-1$
+	} catch (UnsupportedEncodingException e) {
+		bytes = (script + '\0').getBytes();
+	}
+	int scriptString = OS.JSStringCreateWithUTF8CString(bytes);
+
+	try {
+		bytes = (getUrl() + '\0').getBytes("UTF-8"); //$NON-NLS-1$
+	} catch (UnsupportedEncodingException e) {
+		bytes = (getUrl() + '\0').getBytes();
+	}
+	int urlString = OS.JSStringCreateWithUTF8CString(bytes);
+
+	int result = OS.JSEvaluateScript(context, scriptString, 0, urlString, 0, null);
+	OS.JSStringRelease(urlString);
+	OS.JSStringRelease(scriptString);
+	return result != 0;
+}
+
+public boolean forward() {
+	html = null;
+	return Cocoa.objc_msgSend(webView, Cocoa.S_goForward) != 0;
+}
+
+public String getBrowserType () {
+	return "webkit"; //$NON-NLS-1$
+}
+
+public String getText() {
+	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	int dataSource = Cocoa.objc_msgSend(mainFrame, Cocoa.S_dataSource);
+	if (dataSource == 0) return "";	//$NON-NLS-1$
+	int representation = Cocoa.objc_msgSend(dataSource, Cocoa.S_representation);
+	if (representation == 0) return "";	//$NON-NLS-1$
+	int source = Cocoa.objc_msgSend(representation, Cocoa.S_documentSource);
+	if (source == 0) return "";	//$NON-NLS-1$
+	int length = OS.CFStringGetLength(source);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(source, range, buffer);
+	return new String(buffer);
+}
+
+public String getUrl() {
+	/* WebKit auto-navigates to about:blank at startup */
+	if (url.length() == 0) return ABOUT_BLANK;
+
+	return url;
+}
+
+int handleCallback(int nextHandler, int theEvent) {
+	int eventKind = OS.GetEventKind(theEvent);
+	switch (OS.GetEventClass(theEvent)) {
+		case OS.kEventClassControl:
+			switch (eventKind) {
+				case OS.kEventControlGetClickActivation: {
+					OS.SetEventParameter (theEvent, OS.kEventParamClickActivation, OS.typeClickActivationResult, 4, new int [] {OS.kActivateAndHandleClick});
+					return OS.noErr;
+				}
+				case OS.kEventControlSetCursor: {
+					return OS.noErr;
+				}
+				case OS.kEventControlDraw: {
+					/*
+					 * Bug on WebKit. The web view cannot be obscured by other views above it.
+					 * This problem is specified in the apple documentation for HiWebViewCreate.
+					 * The workaround is to don't draw the web view when it is not visible.
+					 */
+					if (!browser.isVisible ()) return OS.noErr;
+					break;
+				}
+				case OS.kEventControlOwningWindowChanged: {
+					/* Reparent the web view handler */
+					int window = OS.GetControlOwner(browser.handle);
+					int[] contentView = new int[1];
+					OS.HIViewFindByID(OS.HIViewGetRoot(window), OS.kHIViewWindowContentID(), contentView);
+					OS.HIViewAddSubview(contentView[0], webViewHandle);
+					
+					/* Reset the kEventWindowBoundsChanged handler */
+					OS.RemoveEventHandler(windowBoundsHandler);
+					int[] mask2 = new int[] {
+						OS.kEventClassWindow, OS.kEventWindowBoundsChanged,
+					};
+					int[] outRef = new int[1];
+					OS.InstallEventHandler(OS.GetWindowEventTarget(window), Callback3.getAddress(), mask2.length / 2, mask2, browser.handle, outRef);
+					windowBoundsHandler = outRef[0];
+					break;
+				}
+				case OS.kEventControlBoundsChanged:
+				case OS.kEventControlVisibilityChanged: {
+					/*
+					 * Bug on WebKit. The web view cannot be obscured by other views above it.
+					 * This problem is specified in the apple documentation for HiWebViewCreate.
+					 * The workaround is to hook kEventControlVisibilityChanged on the browser
+					 * and move the browser out of the screen when hidden and restore its bounds
+					 * when shown.
+					 */
+					CGRect bounds = new CGRect();
+					if (!browser.isVisible()) {
+						bounds.x = bounds.y = -MIN_SIZE;
+						bounds.width = bounds.height = MIN_SIZE;
+						OS.HIViewSetFrame(webViewHandle, bounds);
+					} else {
+						OS.HIViewGetBounds(browser.handle, bounds);
+						int[] contentView = new int[1];
+						OS.HIViewFindByID(OS.HIViewGetRoot(OS.GetControlOwner(browser.handle)), OS.kHIViewWindowContentID(), contentView);
+						OS.HIViewConvertRect(bounds, browser.handle, contentView[0]);
+						/* 
+						* Bug in WebKit.  For some reason, the web view will display incorrectly or
+						* blank depending on its contents, if its size is set to a value smaller than
+						* MIN_SIZE. It will not display properly even after the size is made larger.
+						* The fix is to avoid setting sizes smaller than MIN_SIZE. 
+						*/
+						if (bounds.width <= MIN_SIZE) bounds.width = MIN_SIZE;
+						if (bounds.height <= MIN_SIZE) bounds.height = MIN_SIZE;
+						OS.HIViewSetFrame(webViewHandle, bounds);
+					}
+					break;
+				}
+			}
+		case OS.kEventClassWindow:
+			switch (eventKind) {
+				case OS.kEventWindowBoundsChanged:
+					/*
+					 * Bug on WebKit. Resizing the height of a Shell containing a Browser at
+					 * a fixed location causes the Browser to redraw at a wrong location.
+					 * The web view is a HIView container that internally hosts
+					 * a Cocoa NSView that uses a coordinates system with the origin at the
+					 * bottom left corner of a window instead of the coordinates system used
+					 * in Carbon that starts at the top left corner. The workaround is to
+					 * reposition the web view every time the Shell of the Browser is resized.
+					 * 
+					 * Note the size should not be updated if the browser is hidden.
+					 */
+					if (browser.isVisible()) {
+						CGRect oldBounds = new CGRect();
+						OS.GetEventParameter (theEvent, OS.kEventParamOriginalBounds, OS.typeHIRect, null, CGRect.sizeof, null, oldBounds);
+						CGRect bounds = new CGRect();
+						OS.GetEventParameter (theEvent, OS.kEventParamCurrentBounds, OS.typeHIRect, null, CGRect.sizeof, null, bounds);
+						if (oldBounds.height == bounds.height) break;
+						OS.HIViewGetBounds(browser.handle, bounds);
+						int[] contentView = new int[1];
+						OS.HIViewFindByID(OS.HIViewGetRoot(OS.GetControlOwner(browser.handle)), OS.kHIViewWindowContentID(), contentView);
+						OS.HIViewConvertRect(bounds, browser.handle, contentView[0]);
+						/* 
+						* Bug in WebKit.  For some reason, the web view will display incorrectly or
+						* blank depending on its contents, if its size is set to a value smaller than
+						* MIN_SIZE. It will not display properly even after the size is made larger.
+						* The fix is to avoid setting sizes smaller than MIN_SIZE. 
+						*/
+						if (bounds.width <= MIN_SIZE) bounds.width = MIN_SIZE;
+						if (bounds.height <= MIN_SIZE) bounds.height = MIN_SIZE;
+						bounds.x++;
+						/* Note that the bounds needs to change */
+						OS.HIViewSetFrame(webViewHandle, bounds);
+						bounds.x--;
+						OS.HIViewSetFrame(webViewHandle, bounds);
+					}
+			}
+		case OS.kEventClassKeyboard:
+			switch (eventKind) {
+				case OS.kEventRawKeyDown: {
+					/*
+					* Bug in WebKit. The WebView blocks the propagation of certain Carbon events
+					* such as kEventRawKeyDown. On the Mac, Carbon events propagate from the
+					* Focus Target Handler to the Control Target Handler, Window Target and finally
+					* the Application Target Handler. It is assumed that WebView hooks its events
+					* on the Window Target and does not pass kEventRawKeyDown to the next handler.
+					* Since kEventRawKeyDown events never make it to the Application Target Handler,
+					* the Application Target Handler never gets to emit kEventTextInputUnicodeForKeyEvent
+					* used by SWT to send a SWT.KeyDown event.
+					* The workaround is to hook kEventRawKeyDown on the Control Target Handler which gets
+					* called before the WebView hook on the Window Target Handler. Then, forward this event
+					* directly to the Application Target Handler. Note that if in certain conditions WebKit
+					* does not block the kEventRawKeyDown, then multiple kEventTextInputUnicodeForKeyEvent
+					* events might be generated as a result of this workaround.
+					*/
+					//TEMPORARY CODE
+//					doit = false;
+//					OS.SendEventToEventTarget(theEvent, OS.GetApplicationEventTarget());
+//					if (!doit) return OS.noErr;
+
+					int[] length = new int[1];
+					int status = OS.GetEventParameter (theEvent, OS.kEventParamKeyUnicodes, OS.typeUnicodeText, null, 4, length, (char[])null);
+					if (status == OS.noErr && length[0] != 0) {
+						int[] modifiers = new int[1];
+						OS.GetEventParameter (theEvent, OS.kEventParamKeyModifiers, OS.typeUInt32, null, 4, null, modifiers);
+						char[] chars = new char[1];
+						OS.GetEventParameter (theEvent, OS.kEventParamKeyUnicodes, OS.typeUnicodeText, null, 2, null, chars);
+						if ((modifiers[0] & OS.cmdKey) != 0) {
+							switch (chars[0]) {
+								case 'v': {
+									Cocoa.objc_msgSend (webView, Cocoa.S_paste);
+									return OS.noErr;
+								}
+								case 'c': {
+									Cocoa.objc_msgSend (webView, Cocoa.S_copy);
+									return OS.noErr;
+								}
+								case 'x': {
+									Cocoa.objc_msgSend (webView, Cocoa.S_cut);
+									return OS.noErr;
+								}
+							}
+						}
+					}
+					/*
+					* Bug in Carbon.  OSX crashes if a HICocoaView is disposed during a key event,
+					* presumably as a result of attempting to use it after its refcount has reached
+					* 0.  The workaround is to temporarily add an extra ref to the view and its
+					* ancestor while the DOM listener is handling the event, in case the
+					* Browser gets disposed in a callback.
+					*/
+					int handle = webViewHandle, root = OS.HIViewGetSuperview (webViewHandle);
+					OS.CFRetain (handle);
+					OS.CFRetain (root);
+					int result = OS.CallNextEventHandler (nextHandler, theEvent);
+					OS.CFRelease (handle);
+					OS.CFRelease (root);
+					return result;
+				}
+			}
+		case OS.kEventClassTextInput:
+			switch (eventKind) {
+				case OS.kEventTextInputUnicodeForKeyEvent: {
+					/*
+					* Note.  This event is received from the Window Target therefore after it was received
+					* by the Focus Target. The SWT.KeyDown event is sent by SWT on the Focus Target. If it
+					* is received here, then the SWT.KeyDown doit flag must have been left to the value
+					* true.  For package visibility reasons we cannot access the doit flag directly.
+					* 
+					* Sequence of events when the user presses a key down
+					* 
+					* .Control Target - kEventRawKeyDown
+					* 	.forward to ApplicationEventTarget
+					* 		.Focus Target kEventTextInputUnicodeForKeyEvent - SWT emits SWT.KeyDown - 
+					* 			blocks further propagation if doit false. Browser does not know directly about
+					* 			the doit flag value.
+					* 			.Window Target kEventTextInputUnicodeForKeyEvent - if received, Browser knows 
+					* 			SWT.KeyDown is not blocked and event should be sent to WebKit
+					*  Return from Control Target - kEventRawKeyDown: let the event go to WebKit if doit true 
+					*  (eventNotHandledErr) or stop it (noErr).
+					*/
+					//TEMPORARY CODE
+//					doit = true;
+					break;
+				}
+			}
+	}
+	return OS.eventNotHandledErr;
+}
+
+/* Here we dispatch all WebView upcalls. */
+int handleCallback(int selector, int arg0, int arg1, int arg2, int arg3) {
+	int ret = 0;
+	// for meaning of selector see WebKitDelegate methods in webkit.c
+	switch (selector) {
+		case 1: didFailProvisionalLoadWithError(arg0, arg1); break;
+		case 2: didFinishLoadForFrame(arg0); break;
+		case 3: didReceiveTitle(arg0, arg1); break;
+		case 4: didStartProvisionalLoadForFrame(arg0); break;
+		case 5: didFinishLoadingFromDataSource(arg0, arg1); break;
+		case 6: didFailLoadingWithError(arg0, arg1, arg2); break;
+		case 7: ret = identifierForInitialRequest(arg0, arg1); break;
+		case 8: ret = willSendRequest(arg0, arg1, arg2, arg3); break;
+		case 9: handleNotification(arg0); break;
+		case 10: didCommitLoadForFrame(arg0); break;
+		case 11: ret = createWebViewWithRequest(arg0); break;
+		case 12: webViewShow(arg0); break;
+		case 13: setFrame(arg0); break;
+		case 14: webViewClose(); break;
+		case 15: ret = contextMenuItemsForElement(arg0, arg1); break;
+		case 16: setStatusBarVisible(arg0); break;
+		case 17: setResizable(arg0); break;
+		case 18: setToolbarsVisible(arg0); break;
+		case 19: decidePolicyForMIMEType(arg0, arg1, arg2, arg3); break;
+		case 20: decidePolicyForNavigationAction(arg0, arg1, arg2, arg3); break;
+		case 21: decidePolicyForNewWindowAction(arg0, arg1, arg2, arg3); break;
+		case 22: unableToImplementPolicyWithError(arg0, arg1); break;
+		case 23: setStatusText(arg0); break;
+		case 24: webViewFocus(); break;
+		case 25: webViewUnfocus(); break;
+		case 26: runJavaScriptAlertPanelWithMessage(arg0); break;
+		case 27: ret = runJavaScriptConfirmPanelWithMessage(arg0); break;
+		case 28: runOpenPanelForFileButtonWithResultListener(arg0); break;
+		case 29: decideDestinationWithSuggestedFilename(arg0, arg1); break;
+		case 30: mouseDidMoveOverElement(arg0, arg1); break;
+		case 31: didChangeLocationWithinPageForFrame(arg0); break;
+		case 32: handleEvent(arg0); break;
+		case 33: windowScriptObjectAvailable(arg0); break;
+		case 34: ret = callJava(arg0, arg1, arg2, arg3); break;
+		case 35: didReceiveAuthenticationChallengefromDataSource(arg0, arg1, arg2); break;
+		case 36: ret = runBeforeUnloadConfirmPanelWithMessage(arg0, arg1); break;
+		case 37: ret = callRunBeforeUnloadConfirmPanelWithMessage(arg0, arg1); break;
+		case 38: createPanelDidEnd(arg0, arg1, arg2); break;
+	}
+	return ret;
+}
+
+public boolean isBackEnabled() {
+	return Cocoa.objc_msgSend(webView, Cocoa.S_canGoBack) != 0;
+}
+
+public boolean isForwardEnabled() {
+	return Cocoa.objc_msgSend(webView, Cocoa.S_canGoForward) != 0;
+}
+
+public void refresh() {
+	html = null;
+	Cocoa.objc_msgSend(webView, Cocoa.S_reload, 0);
+}
+
+public boolean setText(String html, boolean trusted) {
+	/*
+	* If this.html is not null then the about:blank page is already being loaded,
+	* so no navigate is required.  Just set the html that is to be shown.
+	*/
+	boolean blankLoading = this.html != null;
+	this.html = html;
+	untrustedText = !trusted;
+	if (blankLoading) return true;
+
+	int str = createNSString(ABOUT_BLANK);
+	int inURL = Cocoa.objc_msgSend(Cocoa.C_NSURL, Cocoa.S_URLWithString, str); /* autoreleased */
+	OS.CFRelease (str);
+	int request = Cocoa.objc_msgSend(Cocoa.C_NSURLRequest, Cocoa.S_requestWithURL, inURL);
+	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
+	return true;
+}
+
+public boolean setUrl(String url, String postData, String[] headers) {
+	html = null;
+
+	if (url.indexOf('/') == 0) {
+		url = PROTOCOL_FILE + url;
+	} else if (url.indexOf(':') == -1) {
+		url = PROTOCOL_HTTP + url;
+	}
+
+	int inURL = 0;
+	int str = createNSString(url);
+	if (str != 0) {
+		char[] unescapedChars = new char[] {'%', '#'};
+		int unescapedStr = OS.CFStringCreateWithCharacters(0, unescapedChars, unescapedChars.length);
+		int escapedStr = OS.CFURLCreateStringByAddingPercentEscapes(OS.kCFAllocatorDefault, str, unescapedStr, 0, OS.kCFStringEncodingUTF8);
+		if (escapedStr != 0) {
+			inURL = OS.CFURLCreateWithString(OS.kCFAllocatorDefault, escapedStr, 0);
+			OS.CFRelease(escapedStr);
+		}
+		if (unescapedStr != 0) OS.CFRelease(unescapedStr);
+		OS.CFRelease(str);
+	}
+	if (inURL == 0) return false;
+
+	int request = Cocoa.objc_msgSend(Cocoa.C_NSMutableURLRequest, Cocoa.S_requestWithURL, inURL);
+	OS.CFRelease(inURL);
+
+	if (postData != null) {
+		int post = createNSString(POST);
+		Cocoa.objc_msgSend(request, Cocoa.S_setHTTPMethod, post);
+		OS.CFRelease (post);
+		byte[] bytes = postData.getBytes();
+		int data = Cocoa.objc_msgSend(Cocoa.C_NSData, Cocoa.S_dataWithBytes, bytes, bytes.length);
+		Cocoa.objc_msgSend(request, Cocoa.S_setHTTPBody, data);
+	}
+	if (headers != null) {
+		for (int i = 0; i < headers.length; i++) {
+			String current = headers[i];
+			if (current != null) {
+				int index = current.indexOf(':');
+				if (index != -1) {
+					String key = current.substring(0, index).trim();
+					String value = current.substring(index + 1).trim();
+					if (key.length() > 0 && value.length() > 0) {
+						if (key.equalsIgnoreCase(USER_AGENT)) {
+							/*
+							* Feature of WebKit.  The user-agent header value cannot be overridden
+							* here.  The workaround is to temporarily set the value on the WebView
+							* and then remove it after the loading of the request has begun.
+							*/
+							int string = createNSString(value);
+							Cocoa.objc_msgSend(webView, Cocoa.S_setCustomUserAgent, string);
+							OS.CFRelease (string);
+						} else {
+							int keyString = createNSString(key);
+							int valueString = createNSString(value);
+							Cocoa.objc_msgSend(request, Cocoa.S_setValueForHTTPHeaderField, valueString, keyString);
+							OS.CFRelease (valueString);
+							OS.CFRelease (keyString);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
+	Cocoa.objc_msgSend(webView, Cocoa.S_setCustomUserAgent, 0);
+	return true;
+}
+
+public void stop() {
+	html = null;
+	Cocoa.objc_msgSend(webView, Cocoa.S_stopLoading, 0);
+}
+
+boolean translateMnemonics() {
+	return false;
+}
+
+/* WebFrameLoadDelegate */
+void didChangeLocationWithinPageForFrame(int frame) {
+	//id url= [[[[frame provisionalDataSource] request] URL] absoluteString];
+	int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
+	int request = Cocoa.objc_msgSend(dataSource, Cocoa.S_request);
+	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
+	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);
+	int length = OS.CFStringGetLength(s);
+	if (length == 0) return;
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(s, range, buffer);
+	String url2 = new String(buffer);
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FILEROOT)) {
+		url2 = ABOUT_BLANK;
+	} else {
+		length = URI_FILEROOT.length ();
+		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = ABOUT_BLANK + url2.substring (length);
+		}
+	}
+
+	final Display display = browser.getDisplay();
+	boolean top = frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	if (top) {
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+	}
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void didFailProvisionalLoadWithError(int error, int frame) {
+	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
+		/*
+		* Feature on WebKit.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  However, WebKit fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+
+	int errorCode = Cocoa.objc_msgSend(error, Cocoa.S_code);
+	if (Cocoa.NSURLErrorBadURL < errorCode) return;
+
+	int failingURL = 0;
+	int info = Cocoa.objc_msgSend(error, Cocoa.S_userInfo);
+	if (info != 0) {
+		int keyString = createNSString("NSErrorFailingURLKey"); //$NON-NLS-1$
+		failingURL = Cocoa.objc_msgSend(info, Cocoa.S_valueForKey, keyString);
+		OS.CFRelease(keyString);
+	}
+
+	if (failingURL != 0 && Cocoa.NSURLErrorServerCertificateNotYetValid <= errorCode && errorCode <= Cocoa.NSURLErrorSecureConnectionFailed) {
+		/* handle invalid certificate error */
+		int keyString = createNSString("NSErrorPeerCertificateChainKey"); //$NON-NLS-1$
+		int certificates = Cocoa.objc_msgSend(info, Cocoa.S_objectForKey, keyString);
+		OS.CFRelease(keyString);
+
+		int[] policySearch = new int[1];
+		int[] policyRef = new int[1];
+		int[] trustRef = new int[1];
+		boolean success = false;
+		int result = OS.SecPolicySearchCreate(OS.CSSM_CERT_X_509v3, 0, 0, policySearch);
+		if (result == 0 && policySearch[0] != 0) {
+			result = OS.SecPolicySearchCopyNext(policySearch[0], policyRef);
+			if (result == 0 && policyRef[0] != 0) {
+				result = OS.SecTrustCreateWithCertificates(certificates, policyRef[0], trustRef);
+				if (result == 0 && trustRef[0] != 0) {
+					int panel = Cocoa.objc_msgSend(Cocoa.C_SFCertificateTrustPanel, Cocoa.S_sharedCertificateTrustPanel);
+					String failingUrlString = getString(Cocoa.objc_msgSend(failingURL, Cocoa.S_absoluteString));
+					String message = Compatibility.getMessage("SWT_InvalidCert_Message", new Object[] {failingUrlString}); //$NON-NLS-1$
+					int nsString = createNSString(Compatibility.getMessage("SWT_Cancel")); //$NON-NLS-1$
+					Cocoa.objc_msgSend(panel, Cocoa.S_setAlternateButtonTitle, nsString);
+					OS.CFRelease(nsString);
+					Cocoa.objc_msgSend(panel, Cocoa.S_setShowsHelp, 1);
+					Cocoa.objc_msgSend(failingURL, Cocoa.S_retain);
+					int window = Cocoa.objc_msgSend(webView, Cocoa.S_window);
+					nsString = createNSString(message);
+					Cocoa.objc_msgSend(panel, Cocoa.S_beginSheetForWindow, window, delegate, Cocoa.S_createPanelDidEnd, failingURL, trustRef[0], nsString);
+					OS.CFRelease(nsString);
+					success = true;
+				}
+			}
+		}
+
+		if (trustRef[0] != 0) OS.CFRelease(trustRef[0]);
+		if (policyRef[0] != 0) OS.CFRelease(policyRef[0]);
+		if (policySearch[0] != 0) OS.CFRelease(policySearch[0]);
+		if (success) return;
+	}
+
+	/* handle other types of errors */
+	int description = Cocoa.objc_msgSend(error, Cocoa.S_localizedDescription);
+	if (description != 0) {
+		String descriptionString = getString(description);
+		String message = failingURL != 0 ? getString(Cocoa.objc_msgSend(failingURL, Cocoa.S_absoluteString)) + "\n\n" : ""; //$NON-NLS-1$ //$NON-NLS-2$
+		message += Compatibility.getMessage ("SWT_Page_Load_Failed", new Object[] {descriptionString}); //$NON-NLS-1$
+		MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_ERROR);
+		messageBox.setMessage(message);
+		messageBox.open();
+	}
+}
+
+void createPanelDidEnd(int sheet, int returnCode, int contextInfo) {
+	Cocoa.objc_msgSend(contextInfo, Cocoa.S_autorelease);
+	if (returnCode != Cocoa.NSFileHandlingPanelOKButton) return;	/* nothing more to do */
+
+	int /*long*/ method = Cocoa.class_getClassMethod(Cocoa.C_NSURLRequest, Cocoa.S_setAllowsAnyHTTPSCertificate);
+	if (method != 0) {
+		int host = Cocoa.objc_msgSend(contextInfo, Cocoa.S_host);
+		int urlString = Cocoa.objc_msgSend(contextInfo, Cocoa.S_absoluteString);
+		Cocoa.objc_msgSend(Cocoa.C_NSURLRequest, Cocoa.S_setAllowsAnyHTTPSCertificate, 1, host);
+		setUrl(getString(urlString), null, null);
+	}
+}
+
+void didFinishLoadForFrame(int frame) {
+	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
+		/*
+		 * If html is not null then there is html from a previous setText() call
+		 * waiting to be set into the about:blank page once it has completed loading. 
+		 */
+		if (html != null) {
+			if (getUrl().startsWith(ABOUT_BLANK)) {
+				loadingText = true;
+				int htmlString = createNSString(html);
+				int urlString;
+				if (untrustedText) {
+					urlString = createNSString(ABOUT_BLANK);
+				} else {
+					urlString = createNSString(URI_FILEROOT);
+				}
+				int url = Cocoa.objc_msgSend(Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString); /* autoreleased */
+				int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+				Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadHTMLStringBaseURL, htmlString, url);
+				OS.CFRelease(urlString);
+				OS.CFRelease(htmlString);
+				html = null;
+			}
+		}
+
+		/*
+		* The loadHTMLStringBaseURL invocation above will trigger a second didFinishLoadForFrame
+		* callback when it is completed.  If text was just set into the browser then wait
+		* for this second callback to come before sending the title or completed events.
+		*/
+		if (!loadingText) {
+			/*
+			* To be consistent with other platforms a title event should be fired when a
+			* page has completed loading.  A page with a <title> tag will do this
+			* automatically when the didReceiveTitle callback is received.  However a page
+			* without a <title> tag will not do this by default, so fire the event
+			* here with the page's url as the title.
+			*/
+			final Display display = browser.getDisplay();
+			int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
+			if (dataSource != 0) {
+				int title = Cocoa.objc_msgSend(dataSource, Cocoa.S_pageTitle);
+				if (title == 0) {	/* page has no title */
+					final TitleEvent newEvent = new TitleEvent(browser);
+					newEvent.display = display;
+					newEvent.widget = browser;
+					newEvent.title = getUrl();
+					for (int i = 0; i < titleListeners.length; i++) {
+						titleListeners[i].changed(newEvent);
+					}
+					if (browser.isDisposed()) return;
+				}
+			}
+
+			ProgressEvent progress = new ProgressEvent(browser);
+			progress.display = display;
+			progress.widget = browser;
+			progress.current = MAX_PROGRESS;
+			progress.total = MAX_PROGRESS;
+			for (int i = 0; i < progressListeners.length; i++) {
+				progressListeners[i].completed(progress);
+			}
+		}
+		loadingText = false;
+		if (browser.isDisposed()) return;
+
+		/*
+		* Feature on WebKit.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  Howeever, WebKit fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+}
+
+void hookDOMFocusListeners(int frame) {
+	/*
+	* These listeners only need to be hooked for OSX 10.4 (Tiger).  The WebKit on
+	* OSX < 10.4 does not send these DOM events, and tab traversals that exit
+	* WebKit are handled as of OSX 10.5 as a result of using HICocoaViewCreate,
+	* which makes these listeners unnecessary.
+	*/
+	if (!(0x1040 <= OS.VERSION && OS.VERSION < 0x1050)) return;
+
+	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
+	if (document == 0) return;
+
+	int ptr = createNSString(DOMEVENT_FOCUSIN);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	ptr = createNSString(DOMEVENT_FOCUSOUT);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+}
+	
+void hookDOMKeyListeners(int frame) {
+	/*
+	* WebKit's DOM listener api became functional in OSX 10.4, so if an earlier
+	* version than this is detected then do not hook the DOM listeners.
+	*/
+	if (OS.VERSION < 0x1040) return;
+
+	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
+	if (document == 0) return;
+
+	int ptr = createNSString(DOMEVENT_KEYDOWN);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	ptr = createNSString(DOMEVENT_KEYUP);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+}
+
+void hookDOMMouseListeners(int frame) {
+	/*
+	* WebKit's DOM listener api became functional in OSX 10.4, so if an earlier
+	* version than this is detected then do not hook the DOM listeners.
+	*/
+	if (OS.VERSION < 0x1040) return;
+
+	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
+	if (document == 0) return;
+
+	int ptr = createNSString(DOMEVENT_MOUSEDOWN);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	ptr = createNSString(DOMEVENT_MOUSEUP);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	ptr = createNSString(DOMEVENT_MOUSEMOVE);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	ptr = createNSString(DOMEVENT_MOUSEWHEEL);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+}
+
+void didReceiveTitle(int title, int frame) {
+	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
+		int length = OS.CFStringGetLength(title);
+		char[] buffer = new char[length];
+		CFRange range = new CFRange();
+		range.length = length;
+		OS.CFStringGetCharacters(title, range, buffer);
+		String newTitle = new String(buffer);
+		TitleEvent newEvent = new TitleEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.title = newTitle;
+		for (int i = 0; i < titleListeners.length; i++) {
+			titleListeners[i].changed(newEvent);
+		}
+	}
+}
+
+void didStartProvisionalLoadForFrame(int frame) {
+	/* 
+	* This code is intentionally commented.  WebFrameLoadDelegate:didStartProvisionalLoadForFrame is
+	* called before WebResourceLoadDelegate:willSendRequest and
+	* WebFrameLoadDelegate:didCommitLoadForFrame.  The resource count is reset when didCommitLoadForFrame
+	* is received for the top frame.
+	*/
+//	int webView = WebKit.HIWebViewGetWebView(webViewHandle);
+//	if (frame == WebKit.objc_msgSend(webView, WebKit.S_mainFrame)) {
+//		/* reset resource status variables */
+//		resourceCount= 0;
+//	}
+}
+
+void didCommitLoadForFrame(int frame) {
+	//id url= [[[[frame provisionalDataSource] request] URL] absoluteString];
+	int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
+	int request = Cocoa.objc_msgSend(dataSource, Cocoa.S_request);
+	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
+	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);	
+	int length = OS.CFStringGetLength(s);
+	if (length == 0) return;
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(s, range, buffer);
+	String url2 = new String(buffer);
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FILEROOT)) {
+		url2 = ABOUT_BLANK;
+	} else {
+		length = URI_FILEROOT.length ();
+		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = ABOUT_BLANK + url2.substring (length);
+		}
+	}
+
+	final Display display = browser.getDisplay();
+	boolean top = frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	if (top) {
+		/* reset resource status variables */
+		resourceCount = 0;		
+		this.url = url2;
+
+		/*
+		* Each invocation of setText() causes didCommitLoadForFrame to be invoked twice,
+		* once for the initial navigate to about:blank, and once for the auto-navigate
+		* to about:blank that WebKit does when loadHTMLStringBaseURL is invoked.  If
+		* this is the first didCommitLoadForFrame callback received for a setText()
+		* invocation then do not send any events or re-install registered BrowserFunctions. 
+		*/
+		if (url2.startsWith(ABOUT_BLANK) && html != null) return;
+
+		Enumeration elements = functions.elements ();
+		while (elements.hasMoreElements ()) {
+			BrowserFunction function = (BrowserFunction)elements.nextElement ();
+			execute (function.functionString);
+		}
+
+		final ProgressEvent progress = new ProgressEvent(browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = 1;
+		progress.total = MAX_PROGRESS;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].changed(progress);
+		}
+		if (browser.isDisposed()) return;
+		
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+		if (browser.isDisposed()) return;
+
+		hookDOMKeyListeners(frame);
+	}
+
+	hookDOMFocusListeners(frame);
+	hookDOMMouseListeners(frame);
+
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void windowScriptObjectAvailable (int windowScriptObject) {
+	int str = createNSString("external"); //$NON-NLS-1$
+	if (str != 0) {
+		Cocoa.objc_msgSend (windowScriptObject, Cocoa.S_setValue, delegate, str);
+		OS.CFRelease (str);
+	}
+}
+
+/* WebResourceLoadDelegate */
+
+void didFinishLoadingFromDataSource(int identifier, int dataSource) {
+	/*
+	* Feature on WebKit.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  Howeever, WebKit fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void didFailLoadingWithError(int identifier, int error, int dataSource) {
+	/*
+	* Feature on WebKit.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  Howeever, WebKit fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void didReceiveAuthenticationChallengefromDataSource (int identifier, int challenge, int dataSource) {
+	/*
+	 * Do not invoke the listeners if this challenge has been failed too many
+	 * times because a listener is likely giving incorrect credentials repeatedly
+	 * and will do so indefinitely.
+	 */
+	int count = Cocoa.objc_msgSend (challenge, Cocoa.S_previousFailureCount);
+	if (count < 3) {
+		for (int i = 0; i < authenticationListeners.length; i++) {
+			AuthenticationEvent event = new AuthenticationEvent (browser);
+			event.location = lastNavigateURL;
+			authenticationListeners[i].authenticate (event);
+			if (!event.doit) {
+				int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
+				Cocoa.objc_msgSend (challengeSender, Cocoa.S_cancelAuthenticationChallenge, challenge);
+				return;
+			}
+			if (event.user != null && event.password != null) {
+				int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
+				int user = createNSString(event.user);
+				int password = createNSString(event.password);
+				int credential = Cocoa.objc_msgSend (Cocoa.C_NSURLCredential, Cocoa.S_credentialWithUser, user, password, Cocoa.NSURLCredentialPersistenceForSession);
+				Cocoa.objc_msgSend (challengeSender, Cocoa.S_useCredential, credential, challenge);
+				OS.CFRelease (password);
+				OS.CFRelease (user);
+				return;
+			}
+		}
+	}
+
+	/* no listener handled the challenge, so try to invoke the native panel */
+	int cls = Cocoa.C_WebPanelAuthenticationHandler;
+	if (cls != 0) {
+		int method = Cocoa.class_getClassMethod (cls, Cocoa.S_sharedHandler);
+		if (method != 0) {
+			int handler = Cocoa.objc_msgSend (cls, Cocoa.S_sharedHandler);
+			if (handler != 0) {
+				int window = Cocoa.objc_msgSend (webView, Cocoa.S_window);
+				Cocoa.objc_msgSend (handler, Cocoa.S_startAuthentication, challenge, window);
+				return;
+			}
+		}
+	}
+
+	/* the native panel was not available, so show a custom dialog */
+	String[] userReturn = new String[1], passwordReturn = new String[1];
+	int proposedCredential = Cocoa.objc_msgSend (challenge, Cocoa.S_proposedCredential);
+	if (proposedCredential != 0) {
+		int user = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_user);
+		userReturn[0] = getString (user);
+		boolean hasPassword = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_hasPassword) != 0;
+		if (hasPassword) {
+			int password = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_password);
+			passwordReturn[0] = getString (password);
+		}
+	}
+
+	int space = Cocoa.objc_msgSend (challenge, Cocoa.S_protectionSpace);
+	int host = Cocoa.objc_msgSend (space, Cocoa.S_host);
+	String hostString = getString (host) + ':';
+	int port = Cocoa.objc_msgSend (space, Cocoa.S_port);
+	hostString += port;
+	int realm = Cocoa.objc_msgSend (space, Cocoa.S_realm);
+	String realmString = getString (realm);
+	boolean result = showAuthenticationDialog (userReturn, passwordReturn, hostString, realmString);
+	int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
+	if (!result) {
+		Cocoa.objc_msgSend (challengeSender, Cocoa.S_cancelAuthenticationChallenge, challenge);
+		return;
+	}
+
+	int user = createNSString(userReturn[0]);
+	int password = createNSString(passwordReturn[0]);
+	int credential = Cocoa.objc_msgSend (Cocoa.C_NSURLCredential, Cocoa.S_credentialWithUser, user, password, Cocoa.NSURLCredentialPersistenceForSession);
+	Cocoa.objc_msgSend (challengeSender, Cocoa.S_useCredential, credential, challenge);
+	OS.CFRelease (password);
+	OS.CFRelease (user);
+}
+
+boolean showAuthenticationDialog (final String[] user, final String[] password, String host, String realm) {
+	final Shell shell = new Shell (browser.getShell ());
+	shell.setLayout (new GridLayout ());
+	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
+	shell.setText (title);
+	Label label = new Label (shell, SWT.WRAP);
+	label.setText (Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host})); //$NON-NLS-1$
+
+	GridData data = new GridData ();
+	Monitor monitor = browser.getMonitor ();
+	int maxWidth = monitor.getBounds ().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	data.widthHint = Math.min (width, maxWidth);
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	label.setLayoutData (data);
+
+	Label userLabel = new Label (shell, SWT.NONE);
+	userLabel.setText (SWT.getMessage ("SWT_Username")); //$NON-NLS-1$
+
+	final Text userText = new Text (shell, SWT.BORDER);
+	if (user[0] != null) userText.setText (user[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	userText.setLayoutData (data);
+
+	Label passwordLabel = new Label (shell, SWT.NONE);
+	passwordLabel.setText (SWT.getMessage ("SWT_Password")); //$NON-NLS-1$
+
+	final Text passwordText = new Text (shell, SWT.PASSWORD | SWT.BORDER);
+	if (password[0] != null) passwordText.setText (password[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	passwordText.setLayoutData (data);
+
+	final boolean[] result = new boolean[1];
+	final Button[] buttons = new Button[2];
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			user[0] = userText.getText();
+			password[0] = passwordText.getText();
+			result[0] = event.widget == buttons[1];
+			shell.close();
+		}	
+	};
+
+	Composite composite = new Composite (shell, SWT.NONE);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.END;
+	composite.setLayoutData (data);
+	composite.setLayout (new GridLayout (2, true));
+	buttons[0] = new Button (composite, SWT.PUSH);
+	buttons[0].setText (SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
+	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[0].addListener (SWT.Selection, listener);
+	buttons[1] = new Button (composite, SWT.PUSH);
+	buttons[1].setText (SWT.getMessage("SWT_OK")); //$NON-NLS-1$
+	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[1].addListener (SWT.Selection, listener);
+
+	shell.setDefaultButton (buttons[1]);
+	shell.pack ();
+	shell.open ();
+	Display display = browser.getDisplay ();
+	while (!shell.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+
+	return result[0];
+}
+
+int identifierForInitialRequest(int request, int dataSource) {
+	final Display display = browser.getDisplay();
+	final ProgressEvent progress = new ProgressEvent(browser);
+	progress.display = display;
+	progress.widget = browser;
+	progress.current = resourceCount;
+	progress.total = Math.max(resourceCount, MAX_PROGRESS);
+	for (int i = 0; i < progressListeners.length; i++) {
+		progressListeners[i].changed(progress);
+	}
+	if (browser.isDisposed()) return 0;
+
+	/*
+	* Note.  numberWithInt uses autorelease.  The resulting object
+	* does not need to be released.
+	* identifier = [NSNumber numberWithInt: resourceCount++]
+	*/	
+	int identifier = Cocoa.objc_msgSend(Cocoa.C_NSNumber, Cocoa.S_numberWithInt, resourceCount++);
+		
+	if (this.identifier == 0) {
+		int frame = Cocoa.objc_msgSend(dataSource, Cocoa.S_webFrame);
+		if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) this.identifier = identifier;
+	}
+	return identifier;
+}
+
+int willSendRequest(int identifier, int request, int redirectResponse, int dataSource) {
+	int url = Cocoa.objc_msgSend (request, Cocoa.S_URL);
+	boolean isFileURL = Cocoa.objc_msgSend (url, Cocoa.S_isFileURL) != 0;
+	if (isFileURL) {
+		int newRequest = Cocoa.objc_msgSend (request, Cocoa.S_mutableCopy);
+		Cocoa.objc_msgSend (newRequest, Cocoa.S_autorelease);
+		Cocoa.objc_msgSend (newRequest, Cocoa.S_setCachePolicy, Cocoa.NSURLRequestReloadIgnoringLocalCacheData);
+		return newRequest;
+	}
+	return request;
+}
+
+/* handleNotification */
+
+void handleNotification(int notification) {	
+}
+
+/* UIDelegate */
+int createWebViewWithRequest(int request) {
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.required = true;
+	if (openWindowListeners != null) {
+		for (int i = 0; i < openWindowListeners.length; i++) {
+			openWindowListeners[i].open(newEvent);
+		}
+	}
+
+	int webView = 0;
+	Browser browser = null;
+	if (newEvent.browser != null && newEvent.browser.webBrowser instanceof WebKit) {
+		browser = newEvent.browser;
+	}
+	if (browser != null && !browser.isDisposed()) {
+		webView = ((WebKit)browser.webBrowser).webView;
+		
+		if (request != 0) {
+			//mainFrame = [webView mainFrame];
+			int mainFrame= Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+
+			//[mainFrame loadRequest:request];
+			Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
+		}
+	}
+	return webView;
+}
+
+void webViewShow(int sender) {
+	/*
+	* Feature on WebKit.  WebKit expects the application to
+	* create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Shell parent = browser.getShell();
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	if (location != null) newEvent.location = location;
+	if (size != null) newEvent.size = size;
+	/*
+	* Feature in WebKit.  WebKit's tool bar contains
+	* the address bar.  The address bar is displayed
+	* if the tool bar is displayed. There is no separate
+	* notification for the address bar.
+	* 
+	* Feature of OSX.  The menu bar is always displayed.
+	* There is no notification to hide the menu bar.
+	*/
+	newEvent.addressBar = toolBar;
+	newEvent.menuBar = true;
+	newEvent.statusBar = statusBar;
+	newEvent.toolBar = toolBar;
+	for (int i = 0; i < visibilityWindowListeners.length; i++) {
+		visibilityWindowListeners[i].show(newEvent);
+	}
+	location = null;
+	size = null;
+}
+
+void setFrame(int frame) {
+	float[] dest = new float[4];
+	OS.memmove(dest, frame, 16);
+	/* convert to SWT system coordinates */
+	Rectangle bounds = browser.getDisplay().getBounds();
+	location = new Point((int)dest[0], bounds.height - (int)dest[1] - (int)dest[3]);
+	size = new Point((int)dest[2], (int)dest[3]);
+}
+
+void webViewFocus() {
+}
+
+void webViewUnfocus() {
+}
+
+int callRunBeforeUnloadConfirmPanelWithMessage(int /*long*/ messageID, int /*long*/ arg) {
+	int result = runBeforeUnloadConfirmPanelWithMessage (messageID, 0);
+	return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithBool, result);
+}
+
+int runBeforeUnloadConfirmPanelWithMessage(int message, int frame) {
+	StringBuffer text = new StringBuffer(Compatibility.getMessage("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
+	text.append ("\n\n"); //$NON-NLS-1$
+	int length = OS.CFStringGetLength(message);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(message, range, buffer);
+	text.append(new String(buffer));
+	text.append("\n\n"); //$NON-NLS-1$
+	text.append(Compatibility.getMessage("SWT_OnBeforeUnload_Message2")); //$NON-NLS-1$
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
+	messageBox.setMessage(text.toString());
+	return messageBox.open() == SWT.OK ? 1 : 0;
+}
+
+void runJavaScriptAlertPanelWithMessage(int message) {
+	int length = OS.CFStringGetLength(message);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(message, range, buffer);
+	String text = new String(buffer);
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_WARNING);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	messageBox.open();
+}
+
+int runJavaScriptConfirmPanelWithMessage(int message) {
+	int length = OS.CFStringGetLength(message);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(message, range, buffer);
+	String text = new String(buffer);
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	return messageBox.open() == SWT.OK ? 1 : 0;
+}
+
+void runOpenPanelForFileButtonWithResultListener(int resultListener) {
+	FileDialog dialog = new FileDialog(browser.getShell(), SWT.NONE);
+	String result = dialog.open();
+	if (result == null) {
+		Cocoa.objc_msgSend(resultListener, Cocoa.S_cancel);
+		return;
+	}
+	int filename = createNSString(result);
+	Cocoa.objc_msgSend(resultListener, Cocoa.S_chooseFilename, filename);
+	OS.CFRelease(filename);
+}
+
+void webViewClose() {
+	Shell parent = browser.getShell();
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	for (int i = 0; i < closeWindowListeners.length; i++) {
+		closeWindowListeners[i].close(newEvent);
+	}
+	browser.dispose();
+	if (parent.isDisposed()) return;
+	/*
+	* Feature on WebKit.  WebKit expects the application to
+	* create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+}
+
+int contextMenuItemsForElement(int element, int defaultMenuItems) {
+	org.eclipse.swt.internal.carbon.Point pt = new org.eclipse.swt.internal.carbon.Point();
+	OS.GetGlobalMouse(pt);
+	Event event = new Event();
+	event.x = pt.h;
+	event.y = pt.v;
+	browser.notifyListeners(SWT.MenuDetect, event);
+	if (!event.doit || browser.isDisposed()) return 0;
+	Menu menu = browser.getMenu();
+	if (menu != null && !menu.isDisposed()) {
+		if (event.x != pt.h || event.y != pt.v) {
+			menu.setLocation(event.x, event.y);
+		}
+		menu.setVisible(true);
+		return 0;
+	}
+	return defaultMenuItems;
+}
+
+void setStatusBarVisible(int visible) {
+	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
+	statusBar = visible != 0;
+}
+
+void setStatusText(int text) {
+	int length = OS.CFStringGetLength(text);
+	if (length == 0) return;
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(text, range, buffer);
+
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = new String(buffer);
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+void setResizable(int visible) {
+}
+
+void setToolbarsVisible(int visible) {
+	/* Note.  Webkit only emits the notification when the tool bar should be hidden. */
+	toolBar = visible != 0;
+}
+
+void mouseDidMoveOverElement (int elementInformation, int modifierFlags) {
+	if (elementInformation == 0) return;
+	if (!browser.isEnabled ()) return;
+
+	int key = createNSString(WebElementLinkURLKey);
+	int value = Cocoa.objc_msgSend(elementInformation, Cocoa.S_valueForKey, key);
+	OS.CFRelease(key);
+	if (value == 0) {
+		/* not currently over a link */
+		if (lastHoveredLinkURL == null) return;
+		lastHoveredLinkURL = null;
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = browser.getDisplay();
+		statusText.widget = browser;
+		statusText.text = "";	//$NON-NLS-1$
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+		return;
+	}
+
+	int stringPtr = Cocoa.objc_msgSend(value, Cocoa.S_absoluteString);
+	int length = OS.CFStringGetLength(stringPtr);
+	String urlString;
+	if (length == 0) {
+		urlString = "";	//$NON-NLS-1$
+	} else {
+		char[] chars = new char[length];
+		CFRange range = new CFRange();
+		range.length = length;
+		OS.CFStringGetCharacters(stringPtr, range, chars);
+		urlString = new String(chars);
+	}
+	if (urlString.equals(lastHoveredLinkURL)) return;
+
+	lastHoveredLinkURL = urlString;
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = urlString;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+/* PolicyDelegate */
+
+void decidePolicyForMIMEType(int type, int request, int frame, int listener) {
+	boolean canShow = Cocoa.objc_msgSend(Cocoa.C_WebView, Cocoa.S_canShowMIMEType, type) != 0;
+	Cocoa.objc_msgSend(listener, canShow ? Cocoa.S_use : Cocoa.S_download);
+}
+
+void decidePolicyForNavigationAction(int actionInformation, int request, int frame, int listener) {
+	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
+	if (loadingText) {
+		/* 
+		 * WebKit is auto-navigating to about:blank in response to a loadHTMLString()
+		 * invocation.  This navigate should always proceed without sending an event
+		 * since it is preceded by an explicit navigate to about:blank in setText().
+		 */
+		Cocoa.objc_msgSend(listener, Cocoa.S_use);
+		return;
+	}
+	if (url == 0) {
+		/* indicates that a URL with an invalid format was specified */
+		Cocoa.objc_msgSend(listener, Cocoa.S_ignore);
+		return;
+	}
+	boolean isFileURL = Cocoa.objc_msgSend(url, Cocoa.S_isFileURL) != 0;
+	if (isFileURL && getUrl().startsWith(ABOUT_BLANK) && untrustedText) {
+		/* indicates an attempt to access the local file system from untrusted content */
+		Cocoa.objc_msgSend(listener, Cocoa.S_ignore);
+		return;
+	}
+	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);
+	int length = OS.CFStringGetLength(s);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(s, range, buffer);
+	String url2 = new String(buffer);
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FILEROOT)) {
+		url2 = ABOUT_BLANK;
+	} else {
+		length = URI_FILEROOT.length ();
+		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = ABOUT_BLANK + url2.substring (length);
+		}
+	}
+
+	if (url2.startsWith (URI_APPLEWEBDATA)) {
+		/* listeners should not be notified of internal transitions like this */
+		Cocoa.objc_msgSend(listener, Cocoa.S_use);
+	} else {
+		LocationEvent newEvent = new LocationEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.location = url2;
+		newEvent.doit = true;
+		if (locationListeners != null) {
+			for (int i = 0; i < locationListeners.length; i++) {
+				locationListeners[i].changing(newEvent);
+			}
+		}
+		if (newEvent.doit) {
+			if (jsEnabledChanged) {
+				jsEnabledChanged = false;
+				if (preferences == 0) {
+					preferences = Cocoa.objc_msgSend (Cocoa.C_WebPreferences, Cocoa.S_alloc);
+					Cocoa.objc_msgSend (preferences, Cocoa.S_init);
+					Cocoa.objc_msgSend (webView, Cocoa.S_setPreferences, preferences);
+				}
+				Cocoa.objc_msgSend (preferences, Cocoa.S_setJavaScriptEnabled, jsEnabled ? 1 : 0);
+			}
+			lastNavigateURL = url2;
+		}
+		Cocoa.objc_msgSend(listener, newEvent.doit ? Cocoa.S_use : Cocoa.S_ignore);
+	}
+}
+
+void decidePolicyForNewWindowAction(int actionInformation, int request, int frameName, int listener) {
+	Cocoa.objc_msgSend(listener, Cocoa.S_use);
+}
+
+void unableToImplementPolicyWithError(int error, int frame) {
+}
+
+/* WebDownload */
+
+void decideDestinationWithSuggestedFilename (int download, int filename) {
+	int length = OS.CFStringGetLength(filename);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(filename, range, buffer);
+	String name = new String(buffer);
+
+	/*
+	* Bug in WebKit.  As of OSX 10.5.5, showing the file dialog here invokes this
+	* callback a second time when the file dialog runs the event loop, which
+	* always leads to a crash.  The workaround is to choose a location to save
+	* the file without showing the file dialog. 
+	*/
+	String path = null;
+	if (OS.VERSION >= 0x1055) {
+		int array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDesktopDirectory, Cocoa.NSAllDomainsMask, true);
+		int count = Cocoa.objc_msgSend (array, Cocoa.S_count);
+		if (count == 0) { /* should never happen */
+			array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDownloadsDirectory, Cocoa.NSAllDomainsMask, true);
+			count = Cocoa.objc_msgSend (array, Cocoa.S_count);
+			if (count == 0) {
+				array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDocumentDirectory, Cocoa.NSAllDomainsMask, true);
+				count = Cocoa.objc_msgSend (array, Cocoa.S_count);
+				if (count == 0) {
+					Cocoa.objc_msgSend (download, Cocoa.S_cancel);
+					return;
+				}
+			}
+		}
+		int string = Cocoa.objc_msgSend (array, Cocoa.S_objectAtIndex, 0);
+		length = OS.CFStringGetLength (string);
+		buffer = new char[length];
+		range = new CFRange ();
+		range.length = length;
+		OS.CFStringGetCharacters (string, range, buffer);
+		path = new String (buffer) + '/' + name;
+	} else {
+		FileDialog dialog = new FileDialog(browser.getShell(), SWT.SAVE);
+		dialog.setText(SWT.getMessage ("SWT_FileDownload")); //$NON-NLS-1$
+		dialog.setFileName(name);
+		path = dialog.open();
+	}
+
+	if (path == null) {
+		/* cancel pressed */
+		Cocoa.objc_msgSend(download, Cocoa.S_cancel);
+		return;
+	}
+	int result = createNSString(path);
+	Cocoa.objc_msgSend(download, Cocoa.S_setDestinationAllowOverwrite, result, 1);
+	OS.CFRelease(result);
+}
+
+/* DOMEventListener */
+
+void handleEvent(int evt) {
+	if (!browser.isEnabled ()) return;
+
+	int type = Cocoa.objc_msgSend(evt, Cocoa.S_type);
+	int length = OS.CFStringGetLength(type);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(type, range, buffer);
+	String typeString = new String(buffer);
+
+	if (typeString.equals(DOMEVENT_FOCUSIN)) {
+		hasNewFocusElement = true;
+		return;
+	}
+	if (typeString.equals(DOMEVENT_FOCUSOUT)) {
+		hasNewFocusElement = false;
+		return;
+	}
+
+	boolean ctrl = Cocoa.objc_msgSend(evt, Cocoa.S_ctrlKey) != 0;
+	boolean shift = Cocoa.objc_msgSend(evt, Cocoa.S_shiftKey) != 0;
+	boolean alt = Cocoa.objc_msgSend(evt, Cocoa.S_altKey) != 0;
+	boolean meta = Cocoa.objc_msgSend(evt, Cocoa.S_metaKey) != 0;
+
+	if (DOMEVENT_KEYDOWN.equals(typeString) || DOMEVENT_KEYUP.equals(typeString)) {
+		int keyCode = Cocoa.objc_msgSend(evt, Cocoa.S_keyCode);
+		int charCode = Cocoa.objc_msgSend(evt, Cocoa.S_charCode);
+
+		Event keyEvent = new Event();
+		keyEvent.widget = browser;
+		if (DOMEVENT_KEYDOWN.equals(typeString)) {
+			keyEvent.type = SWT.KeyDown;
+		} else {
+			keyEvent.type = SWT.KeyUp;
+		}
+		keyEvent.keyCode = translateKey(keyCode);
+		/*
+		* WebKit maps the Delete key's character to 0xf728.  Detect
+		* this key and set its character to SWT.DEL so that the
+		* Browser's key events are consistent with other controls.
+		*/
+		if (keyEvent.keyCode == SWT.DEL) {
+			keyEvent.character = SWT.DEL;
+		} else {
+			keyEvent.character = (char)charCode;
+		}
+		keyEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+
+		boolean doit;
+		if (keyEvent.type == SWT.KeyDown) {
+			doit = sendKeyEvent(keyEvent);
+		} else { /* SWT.KeyUp */
+			browser.notifyListeners(keyEvent.type, keyEvent);
+			doit = keyEvent.doit;
+		}
+		if (browser.isDisposed()) {
+			Cocoa.objc_msgSend(evt, Cocoa.S_preventDefault);
+			return;
+		}
+
+		/*
+		* Bug in WebKit.  As a result of using HIWebViewCreate on OSX versions < 10.5 (Leopard), attempting
+		* to traverse out of WebKit backwards (Shift+Tab) leaves it in a strange state where WebKit no
+		* longer has focus but still receives keys.  The Carbon-based WebKit examples have the same
+		* problem.  The workaround is to only allow forward Tab traversals in the Browser on OSX < 10.5.
+		*/
+		if (doit && OS.VERSION < 0x1050 && keyEvent.keyCode == SWT.TAB && (keyEvent.stateMask & SWT.SHIFT) != 0) {
+			doit = false;
+		}
+		if (!doit) {
+			Cocoa.objc_msgSend(evt, Cocoa.S_preventDefault);
+		} else {
+			if (!hasNewFocusElement && keyEvent.keyCode == SWT.TAB && DOMEVENT_KEYUP.equals(typeString)) {
+				hasNewFocusElement = false;
+			}
+		}
+		return;
+	}
+
+	/* mouse event */
+
+	/*
+	 * The position of mouse events is received in screen-relative coordinates
+	 * in order to handle pages with frames, since frames express their event
+	 * coordinates relative to themselves rather than relative to their top-
+	 * level page.  Convert screen-relative coordinates to be browser-relative.
+	 */
+	int screenX = Cocoa.objc_msgSend(evt, Cocoa.S_screenX);
+	int screenY = Cocoa.objc_msgSend(evt, Cocoa.S_screenY);
+	Point position = new Point(screenX, screenY);
+	position = browser.getDisplay().map(null, browser, position);
+
+	int detail = Cocoa.objc_msgSend(evt, Cocoa.S_detail);
+	Event mouseEvent = new Event();
+	mouseEvent.widget = browser;
+	mouseEvent.x = position.x; mouseEvent.y = position.y;
+	mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+
+	if (DOMEVENT_MOUSEDOWN.equals (typeString)) {
+		mouseEvent.type = SWT.MouseDown;
+		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+	} else if (DOMEVENT_MOUSEUP.equals (typeString)) {
+		mouseEvent.type = SWT.MouseUp;
+		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		switch (mouseEvent.button) {
+			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	} else if (DOMEVENT_MOUSEMOVE.equals (typeString)) {
+		/*
+		* Feature in WebKit.  Spurious and redundant mousemove events are received in
+		* various contexts, including following every MouseUp.  The workaround is to
+		* not fire MouseMove events whose x and y values match the last MouseMove.  
+		*/
+		if (mouseEvent.x == lastMouseMoveX && mouseEvent.y == lastMouseMoveY) return;
+		mouseEvent.type = SWT.MouseMove;
+		lastMouseMoveX = mouseEvent.x; lastMouseMoveY = mouseEvent.y;
+	} else if (DOMEVENT_MOUSEWHEEL.equals (typeString)) {
+		mouseEvent.type = SWT.MouseWheel;
+		int delta = Cocoa.objc_msgSend(evt, Cocoa.S_wheelDelta);
+		mouseEvent.count = delta / 120;
+	}
+
+	browser.notifyListeners (mouseEvent.type, mouseEvent);
+	if (browser.isDisposed()) return;
+	if (detail == 2 && DOMEVENT_MOUSEDOWN.equals (typeString)) {
+		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
+		mouseEvent = new Event ();
+		mouseEvent.widget = browser;
+		mouseEvent.x = position.x; mouseEvent.y = position.y;
+		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		mouseEvent.type = SWT.MouseDoubleClick;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		browser.notifyListeners (mouseEvent.type, mouseEvent);
+	}
+}
+
+/* external */
+
+Object convertToJava (int value) {
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_NSString) != 0) {
+		int length = Cocoa.objc_msgSend (value, Cocoa.S_length);
+		char[] buffer = new char[length];
+		Cocoa.objc_msgSend (value, Cocoa.S_getCharacters_, buffer);
+		return new String (buffer);
+	}
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
+		int ptr = Cocoa.objc_msgSend (value, Cocoa.S_objCType);
+		byte[] type = new byte[1];
+		OS.memmove (type, ptr, 1);
+		if (type[0] == 'c' || type[0] == 'B') {
+			int result = Cocoa.objc_msgSend (value, Cocoa.S_boolValue);
+			return new Boolean (result != 0);
+		}
+		if ("islqISLQfd".indexOf (type[0]) != -1) { //$NON-NLS-1$
+			double result = Cocoa.objc_msgSend_fpret (value, Cocoa.S_doubleValue);
+			return new Double (result);
+		}
+	}
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_WebScriptObject) != 0) {
+		int str = createNSString ("length"); //$NON-NLS-1$
+		int numberValue = Cocoa.objc_msgSend (value, Cocoa.S_valueForKey, str);
+		OS.CFRelease (str);
+		int length = Cocoa.objc_msgSend (numberValue, Cocoa.S_intValue);
+		Object[] arguments = new Object[length];
+		for (int i = 0; i < length; i++) {
+			int current = Cocoa.objc_msgSend (value, Cocoa.S_webScriptValueAtIndex, i);
+			if (current != 0) {
+				arguments[i] = convertToJava (current);
+			}
+		}
+		return arguments;
+	}
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_WebUndefined) != 0) {
+		return null;
+	}
+
+	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	return null;
+}
+
+int convertToJS (Object value) {
+	if (value == null) {
+		return Cocoa.objc_msgSend (Cocoa.C_WebUndefined, Cocoa.S_undefined);
+	}
+	if (value instanceof String) {
+		return createNSString((String)value);
+	}
+	if (value instanceof Boolean) {
+		int booleanValue = ((Boolean)value).booleanValue () ? 1 : 0;
+		return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithBool, booleanValue);
+	}
+	if (value instanceof Number) {
+		double doubleValue = ((Number)value).doubleValue ();
+		return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithDouble, doubleValue);
+	}
+	if (value instanceof Object[]) {
+		Object[] arrayValue = (Object[])value;
+		int length = arrayValue.length;
+		int array = Cocoa.objc_msgSend (Cocoa.C_NSMutableArray, Cocoa.S_arrayWithCapacity, length);
+		for (int i = 0; i < length; i++) {
+			Object currentObject = arrayValue[i];
+			int jsObject = convertToJS (currentObject);
+			Cocoa.objc_msgSend (array, Cocoa.S_addObject, jsObject);
+		}
+		return array;
+	}
+	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
+	return 0;
+}
+
+int /*long*/ callJava (int /*long*/ index, int /*long*/ token, int /*long*/ args, int /*long*/ arg1) {
+	Object returnValue = null;
+	if (Cocoa.objc_msgSend (index, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
+		int functionIndex = Cocoa.objc_msgSend (index, Cocoa.S_intValue);
+		if (Cocoa.objc_msgSend (token, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
+			long tokenValue = (long)Cocoa.objc_msgSend_fpret (token, Cocoa.S_doubleValue);
+			Object key = new Integer (functionIndex);
+			BrowserFunction function = (BrowserFunction)functions.get (key);
+			if (function != null && tokenValue == function.token) {
+				try {
+					Object temp = convertToJava (args);
+					if (temp instanceof Object[]) {
+						Object[] arguments = (Object[])temp;
+						try {
+							returnValue = function.function (arguments);
+						} catch (Exception e) {
+							/* exception during function invocation */
+							returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+						}
+					}
+				} catch (IllegalArgumentException e) {
+					/* invalid argument value type */
+					if (function.isEvaluate) {
+						/* notify the evaluate function so that a java exception can be thrown */
+						function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
+					}
+					returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+				}
+			}
+		}
+	}
+	try {
+		return convertToJS (returnValue);
+	} catch (SWTException e) {
+		return convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
+	}
+}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java
new file mode 100755
index 0000000..032bdb2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java	
@@ -0,0 +1,1803 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Enumeration;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class WebKit extends WebBrowser {
+	WebView webView;
+	WebPreferences preferences;
+	SWTWebViewDelegate delegate;
+	boolean loadingText, untrustedText;
+	String lastHoveredLinkURL, lastNavigateURL;
+	String html;
+	int /*long*/ identifier;
+	int resourceCount;
+	String url = ""; //$NON-NLS-1$
+	Point location;
+	Point size;
+	boolean statusBar = true, toolBar = true, ignoreDispose;
+	int lastMouseMoveX, lastMouseMoveY;
+	//TEMPORARY CODE
+//	boolean doit;
+
+	static int /*long*/ delegateClass;
+	static boolean Initialized;
+	// the following Callbacks are never freed
+	static Callback Callback3, Callback4, Callback5, Callback6, Callback7;
+
+	static final int MIN_SIZE = 16;
+	static final int MAX_PROGRESS = 100;
+	static final String WebElementLinkURLKey = "WebElementLinkURL"; //$NON-NLS-1$
+	static final String AGENT_STRING = "Safari/522.0"; /* Safari version on OSX 10.5 initial release */ //$NON-NLS-1$
+	static final String URI_FILEROOT = "file:///"; //$NON-NLS-1$
+	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
+	static final String PROTOCOL_HTTP = "http://"; //$NON-NLS-1$
+	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
+	static final String HEADER_SETCOOKIE = "Set-Cookie"; //$NON-NLS-1$
+	static final String POST = "POST"; //$NON-NLS-1$
+	static final String USER_AGENT = "user-agent"; //$NON-NLS-1$
+	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
+	static final String WEBKIT_EVENTS_FIX_KEY = "org.eclipse.swt.internal.webKitEventsFix"; //$NON-NLS-1$
+	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+
+	/* event strings */
+	static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$
+	static final String DOMEVENT_KEYDOWN = "keydown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEDOWN = "mousedown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEUP = "mouseup"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEMOVE = "mousemove"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEWHEEL = "mousewheel"; //$NON-NLS-1$
+
+	static {
+		NativeClearSessions = new Runnable() {
+			public void run() {
+				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage();
+				NSArray cookies = storage.cookies();
+				int count = (int)/*64*/cookies.count ();
+				for (int i = 0; i < count; i++) {
+					NSHTTPCookie cookie = new NSHTTPCookie(cookies.objectAtIndex(i));
+					if (cookie.isSessionOnly()) {
+						storage.deleteCookie(cookie);
+					}
+				}
+			}
+		};
+
+		NativeGetCookie = new Runnable () {
+			public void run () {
+				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage ();
+				NSURL url = NSURL.URLWithString (NSString.stringWith (CookieUrl));
+				NSArray cookies = storage.cookiesForURL (url);
+				int count = (int)/*64*/cookies.count ();
+				if (count == 0) return;
+
+				NSString name = NSString.stringWith (CookieName);
+				for (int i = 0; i < count; i++) {
+					NSHTTPCookie current = new NSHTTPCookie (cookies.objectAtIndex (i));
+					if (current.name ().compare (name) == OS.NSOrderedSame) {
+						CookieValue = current.value ().getString ();
+						return;
+					}
+				}
+			}
+		};
+
+		NativeSetCookie = new Runnable () {
+			public void run () {
+				NSURL url = NSURL.URLWithString (NSString.stringWith (CookieUrl));
+				NSMutableDictionary headers = NSMutableDictionary.dictionaryWithCapacity (1);
+				headers.setValue (NSString.stringWith (CookieValue), NSString.stringWith (HEADER_SETCOOKIE));
+				NSArray cookies = NSHTTPCookie.cookiesWithResponseHeaderFields (headers, url);
+				if (cookies.count () == 0) return;
+				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage ();
+				NSHTTPCookie cookie = new NSHTTPCookie (cookies.objectAtIndex (0));
+				storage.setCookie (cookie);
+				CookieResult = true;
+			}
+		};
+
+		if (NativePendingCookies != null) {
+			SetPendingCookies (NativePendingCookies);
+		}
+		NativePendingCookies = null;
+	}
+
+public void create (Composite parent, int style) {
+	if (delegateClass == 0) {
+		Class webKitClass = this.getClass();
+		Callback3 = new Callback(webKitClass, "browserProc", 3); //$NON-NLS-1$
+		int /*long*/ proc3 = Callback3.getAddress();
+		if (proc3 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback4 = new Callback(webKitClass, "browserProc", 4); //$NON-NLS-1$
+		int /*long*/ proc4 = Callback4.getAddress();
+		if (proc4 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback5 = new Callback(webKitClass, "browserProc", 5); //$NON-NLS-1$
+		int /*long*/ proc5 = Callback5.getAddress();
+		if (proc5 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback6 = new Callback(webKitClass, "browserProc", 6); //$NON-NLS-1$
+		int /*long*/ proc6 = Callback6.getAddress();
+		if (proc6 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback7 = new Callback(webKitClass, "browserProc", 7); //$NON-NLS-1$
+		int /*long*/ proc7 = Callback7.getAddress();
+		if (proc7 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		int /*long*/ setFrameProc = OS.CALLBACK_webView_setFrame_(proc4);
+		if (setFrameProc == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		String className = "SWTWebViewDelegate"; //$NON-NLS-1$
+		byte[] types = {'*','\0'};
+		int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+		delegateClass = OS.objc_allocateClassPair (OS.class_NSObject, className, 0);
+
+		OS.class_addIvar(delegateClass, SWT_OBJECT, size, (byte)align, types);
+		OS.class_addMethod(delegateClass, OS.sel_webView_didChangeLocationWithinPageForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didFailProvisionalLoadWithError_forFrame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didFinishLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didReceiveTitle_forFrame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didStartProvisionalLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didCommitLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didFinishLoadingFromDataSource_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_, proc6, "@:@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didFailLoadingWithError_fromDataSource_, proc6, "@:@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_identifierForInitialRequest_fromDataSource_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_willSendRequest_redirectResponse_fromDataSource_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_createWebViewWithRequest_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewShow_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewClose_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_contextMenuItemsForElement_defaultMenuItems_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setStatusBarVisible_, proc4, "@:@B"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setResizable_, proc4, "@:@B"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setToolbarsVisible_, proc4, "@:@B"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setStatusText_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewFocus_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewUnfocus_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptAlertPanelWithMessage_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptAlertPanelWithMessage_initiatedByFrame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptConfirmPanelWithMessage_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptConfirmPanelWithMessage_initiatedByFrame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runOpenPanelForFileButtonWithResultListener_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_mouseDidMoveOverElement_modifierFlags_, proc5, "@:@@I"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_printFrameView_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForMIMEType_request_frame_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForNavigationAction_request_frame_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_unableToImplementPolicyWithError_frame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_download_decideDestinationWithSuggestedFilename_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_handleEvent_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setFrame_, setFrameProc, "@:@{NSRect}"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_windowScriptObjectAvailable_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_callJava, proc6, "@:@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_callRunBeforeUnloadConfirmPanelWithMessage, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_createPanelDidEnd, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.objc_registerClassPair(delegateClass);
+
+ 		int /*long*/ metaClass = OS.objc_getMetaClass (className);
+		OS.class_addMethod(metaClass, OS.sel_isSelectorExcludedFromWebScript_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(metaClass, OS.sel_webScriptNameForSelector_, proc3, "@:@"); //$NON-NLS-1$
+	}
+
+	/*
+	* Override the default event mechanism to not send key events so
+	* that the browser can send them by listening to the DOM instead.
+	*/
+	browser.setData(WEBKIT_EVENTS_FIX_KEY);
+
+	WebView webView = (WebView)new WebView().alloc();
+	if (webView == null) SWT.error(SWT.ERROR_NO_HANDLES);
+	webView.initWithFrame(browser.view.frame(), null, null);
+	webView.setAutoresizingMask(OS.NSViewWidthSizable | OS.NSViewHeightSizable);
+	if (webView.respondsToSelector(OS.sel__setDashboardBehavior)) {
+		OS.objc_msgSend(webView.id, OS.sel__setDashboardBehavior, 2, 1);
+	}
+	final SWTWebViewDelegate delegate = (SWTWebViewDelegate)new SWTWebViewDelegate().alloc().init();
+	Display display = browser.getDisplay();
+	display.setData(ADD_WIDGET_KEY, new Object[] {delegate, browser});
+	this.delegate = delegate;
+	this.webView = webView;
+	browser.view.addSubview(webView);
+
+	Listener listener = new Listener() {
+		public void handleEvent(Event e) {
+			switch (e.type) {
+				case SWT.FocusIn:
+					WebKit.this.webView.window().makeFirstResponder(WebKit.this.webView);
+					break;
+				case SWT.Dispose: {
+					/* make this handler run after other dispose listeners */
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (e.type, e);
+					e.type = SWT.NONE;
+
+					/* Browser could have been disposed by one of the Dispose listeners */
+					if (!browser.isDisposed()) {
+						/* invoke onbeforeunload handlers */
+						if (!browser.isClosing) {
+							close (false);
+						}
+
+						e.display.setData(ADD_WIDGET_KEY, new Object[] {delegate, null});
+					}
+
+					WebKit.this.webView.setFrameLoadDelegate(null);
+					WebKit.this.webView.setResourceLoadDelegate(null);
+					WebKit.this.webView.setUIDelegate(null);
+					WebKit.this.webView.setPolicyDelegate(null);
+					WebKit.this.webView.setDownloadDelegate(null);
+
+					WebKit.this.webView.release();
+					WebKit.this.webView = null;
+					WebKit.this.delegate.release();
+					WebKit.this.delegate = null;
+					html = null;
+					lastHoveredLinkURL = lastNavigateURL = null;
+
+					Enumeration elements = functions.elements ();
+					while (elements.hasMoreElements ()) {
+						((BrowserFunction)elements.nextElement ()).dispose (false);
+					}
+					functions = null;
+
+					if (preferences != null) preferences.release ();
+					preferences = null;
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener(SWT.Dispose, listener);
+	browser.addListener(SWT.KeyDown, listener); /* needed for tabbing into the Browser */
+	browser.addListener(SWT.FocusIn, listener);
+
+	webView.setFrameLoadDelegate(delegate);
+	webView.setResourceLoadDelegate(delegate);
+	webView.setUIDelegate(delegate);	
+	webView.setPolicyDelegate(delegate);
+	webView.setDownloadDelegate(delegate);
+	webView.setApplicationNameForUserAgent(NSString.stringWith(AGENT_STRING));
+
+	if (!Initialized) {
+		Initialized = true;
+		/* disable applets */
+		WebPreferences.standardPreferences().setJavaEnabled(false);
+	}
+}
+
+public boolean back() {
+	html = null;	
+	return webView.goBack();
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	if (id == delegateClass) {
+		if (sel == OS.sel_isSelectorExcludedFromWebScript_) {
+			return isSelectorExcludedFromWebScript (arg0) ? 1 : 0;
+		} else if (sel == OS.sel_webScriptNameForSelector_) {
+			return webScriptNameForSelector (arg0);
+		}
+	}
+
+	Display d = Display.getCurrent();
+	if (d == null || d.isDisposed()) return 0;
+	Widget widget = d.findWidget(id);
+	if (widget == null) return 0;
+	WebKit webKit = (WebKit)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webViewShow_) {
+		webKit.webViewShow(arg0);
+	} else if (sel == OS.sel_webViewClose_) {
+		webKit.webViewClose(arg0);
+	} else if (sel == OS.sel_webViewFocus_) {
+		webKit.webViewFocus(arg0);
+	} else if (sel == OS.sel_webViewUnfocus_) {
+		webKit.webViewUnfocus(arg0);
+	} else if (sel == OS.sel_handleEvent_) {
+		webKit.handleEvent(arg0);
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	Display d = Display.getCurrent();
+	if (d == null || d.isDisposed()) return 0;
+	Widget widget = d.findWidget(id);
+	if (widget == null) return 0;
+	WebKit webKit = (WebKit)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_didChangeLocationWithinPageForFrame_) {
+		webKit.webView_didChangeLocationWithinPageForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_didFinishLoadForFrame_) {
+		webKit.webView_didFinishLoadForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_didStartProvisionalLoadForFrame_) {
+		webKit.webView_didStartProvisionalLoadForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_didCommitLoadForFrame_) {
+		webKit.webView_didCommitLoadForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_setFrame_) {
+		webKit.webView_setFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_createWebViewWithRequest_) {
+		return webKit.webView_createWebViewWithRequest(arg0, arg1);		
+	} else if (sel == OS.sel_webView_setStatusBarVisible_) {
+		webKit.webView_setStatusBarVisible(arg0, arg1 != 0);
+	} else if (sel == OS.sel_webView_setResizable_) {
+		webKit.webView_setResizable(arg0, arg1 != 0);
+	} else if (sel == OS.sel_webView_setStatusText_) {
+		webKit.webView_setStatusText(arg0, arg1);
+	} else if (sel == OS.sel_webView_setToolbarsVisible_) {
+		webKit.webView_setToolbarsVisible(arg0, arg1 != 0);
+	} else if (sel == OS.sel_webView_runJavaScriptAlertPanelWithMessage_) {
+		webKit.webView_runJavaScriptAlertPanelWithMessage(arg0, arg1);
+	} else if (sel == OS.sel_webView_runJavaScriptConfirmPanelWithMessage_) {
+		return webKit.webView_runJavaScriptConfirmPanelWithMessage(arg0, arg1);
+	} else if (sel == OS.sel_webView_runOpenPanelForFileButtonWithResultListener_) {
+		webKit.webView_runOpenPanelForFileButtonWithResultListener(arg0, arg1);
+	} else if (sel == OS.sel_download_decideDestinationWithSuggestedFilename_) {
+		webKit.download_decideDestinationWithSuggestedFilename(arg0, arg1);
+	} else if (sel == OS.sel_webView_printFrameView_) {
+		webKit.webView_printFrameView(arg0, arg1);
+	} else if (sel == OS.sel_webView_windowScriptObjectAvailable_) {
+		webKit.webView_windowScriptObjectAvailable (arg0, arg1);
+	} else if (sel == OS.sel_callRunBeforeUnloadConfirmPanelWithMessage) {
+		return webKit.callRunBeforeUnloadConfirmPanelWithMessage (arg0, arg1).id;
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	Display d = Display.getCurrent();
+	if (d == null || d.isDisposed()) return 0;
+	Widget widget = d.findWidget(id);
+	if (widget == null) return 0;
+	WebKit webKit = (WebKit)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_didFailProvisionalLoadWithError_forFrame_) {
+		webKit.webView_didFailProvisionalLoadWithError_forFrame(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_didReceiveTitle_forFrame_) {
+		webKit.webView_didReceiveTitle_forFrame(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_resource_didFinishLoadingFromDataSource_) {
+		webKit.webView_resource_didFinishLoadingFromDataSource(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_identifierForInitialRequest_fromDataSource_) {
+		return webKit.webView_identifierForInitialRequest_fromDataSource(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_contextMenuItemsForElement_defaultMenuItems_) {
+		return webKit.webView_contextMenuItemsForElement_defaultMenuItems(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_mouseDidMoveOverElement_modifierFlags_) {
+		webKit.webView_mouseDidMoveOverElement_modifierFlags(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_unableToImplementPolicyWithError_frame_) {
+		webKit.webView_unableToImplementPolicyWithError_frame(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame_) {
+		return webKit.webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame(arg0, arg1, arg2) ? 1 : 0;
+	} else if (sel == OS.sel_webView_runJavaScriptAlertPanelWithMessage_initiatedByFrame_) {
+		webKit.webView_runJavaScriptAlertPanelWithMessage(arg0, arg1);
+	} else if (sel == OS.sel_webView_runJavaScriptConfirmPanelWithMessage_initiatedByFrame_) {
+		return webKit.webView_runJavaScriptConfirmPanelWithMessage(arg0, arg1);
+	} else if (sel == OS.sel_createPanelDidEnd) {
+		webKit.createPanelDidEnd(arg0, arg1, arg2);
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	Display d = Display.getCurrent();
+	if (d == null || d.isDisposed()) return 0;
+	Widget widget = d.findWidget(id);
+	if (widget == null) return 0;
+	WebKit webKit = (WebKit)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_resource_didFailLoadingWithError_fromDataSource_) {
+		webKit.webView_resource_didFailLoadingWithError_fromDataSource(arg0, arg1, arg2, arg3);
+	} else if (sel == OS.sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_) {
+		webKit.webView_resource_didReceiveAuthenticationChallenge_fromDataSource(arg0, arg1, arg2, arg3);
+	} else if (sel == OS.sel_callJava) {
+		id result = webKit.callJava(arg0, arg1, arg2, arg3);
+		return result == null ? 0 : result.id;
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4) {
+	Display d = Display.getCurrent();
+	if (d == null || d.isDisposed()) return 0;
+	Widget widget = d.findWidget(id);
+	if (widget == null) return 0;
+	WebKit webKit = (WebKit)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_resource_willSendRequest_redirectResponse_fromDataSource_) {
+		return webKit.webView_resource_willSendRequest_redirectResponse_fromDataSource(arg0, arg1, arg2, arg3, arg4);
+	} else if (sel == OS.sel_webView_decidePolicyForMIMEType_request_frame_decisionListener_) {
+		webKit.webView_decidePolicyForMIMEType_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4);
+	} else if (sel == OS.sel_webView_decidePolicyForNavigationAction_request_frame_decisionListener_) {
+		webKit.webView_decidePolicyForNavigationAction_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4);
+	} else if (sel == OS.sel_webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener_) {
+		webKit.webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(arg0, arg1, arg2, arg3, arg4);
+	}
+	return 0;
+}
+
+static boolean isSelectorExcludedFromWebScript (int /*long*/ aSelector) {
+	return !(aSelector == OS.sel_callJava || aSelector == OS.sel_callRunBeforeUnloadConfirmPanelWithMessage);
+}
+
+static int /*long*/ webScriptNameForSelector (int /*long*/ aSelector) {
+	if (aSelector == OS.sel_callJava) {
+		return NSString.stringWith ("callJava").id; //$NON-NLS-1$
+	}
+	if (aSelector == OS.sel_callRunBeforeUnloadConfirmPanelWithMessage) {
+		return NSString.stringWith ("callRunBeforeUnloadConfirmPanelWithMessage").id; //$NON-NLS-1$
+	}
+	return 0;
+}
+
+public boolean close () {
+	return close (true);
+}
+
+boolean close (boolean showPrompters) {
+	if (!jsEnabled) return true;
+
+	String functionName = EXECUTE_ID + "CLOSE"; // $NON-NLS-1$
+	StringBuffer buffer = new StringBuffer ("function "); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append ("(win) {\n"); // $NON-NLS-1$
+	buffer.append ("var fn = win.onbeforeunload; if (fn != null) {try {var str = fn(); "); // $NON-NLS-1$
+	if (showPrompters) {
+		buffer.append ("if (str != null) { "); // $NON-NLS-1$
+		buffer.append ("var result = window.external.callRunBeforeUnloadConfirmPanelWithMessage(str);"); // $NON-NLS-1$
+		buffer.append ("if (!result) return false;}"); // $NON-NLS-1$
+	}	
+	buffer.append ("} catch (e) {}}"); // $NON-NLS-1$
+	buffer.append ("try {for (var i = 0; i < win.frames.length; i++) {var result = "); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append ("(win.frames[i]); if (!result) return false;}} catch (e) {} return true;"); // $NON-NLS-1$
+	buffer.append ("\n};"); // $NON-NLS-1$
+	execute (buffer.toString ());
+
+	Boolean result = (Boolean)evaluate ("return " + functionName +"(window);"); // $NON-NLS-1$ // $NON-NLS-2$
+	if (result == null) return false;
+	return result.booleanValue ();
+}
+
+public boolean execute (String script) {
+	WebFrame frame = webView.mainFrame();
+	int /*long*/ context = frame.globalContext();
+
+	byte[] bytes = null;
+	try {
+		bytes = (script + '\0').getBytes("UTF-8"); //$NON-NLS-1$
+	} catch (UnsupportedEncodingException e) {
+		bytes = (script + '\0').getBytes();
+	}
+	int /*long*/ scriptString = OS.JSStringCreateWithUTF8CString(bytes);
+
+	try {
+		bytes = (getUrl() + '\0').getBytes("UTF-8"); //$NON-NLS-1$
+	} catch (UnsupportedEncodingException e) {
+		bytes = (getUrl() + '\0').getBytes();
+	}
+	int /*long*/ urlString = OS.JSStringCreateWithUTF8CString(bytes);
+
+	int /*long*/ result = OS.JSEvaluateScript(context, scriptString, 0, urlString, 0, null);
+	OS.JSStringRelease(urlString);
+	OS.JSStringRelease(scriptString);
+	return result != 0;
+}
+
+public boolean forward () {
+	html = null;
+	return webView.goForward();
+}
+
+public String getBrowserType () {
+	return "webkit"; //$NON-NLS-1$
+}
+
+public String getText() {
+	WebFrame mainFrame = webView.mainFrame();
+	WebDataSource dataSource = mainFrame.dataSource();
+	if (dataSource == null) return "";	//$NON-NLS-1$
+	WebDocumentRepresentation representation = dataSource.representation();
+	if (representation == null) return "";	//$NON-NLS-1$
+	NSString source = representation.documentSource();
+	if (source == null) return "";	//$NON-NLS-1$
+	return source.getString();
+}
+
+public String getUrl() {
+	/* WebKit auto-navigates to about:blank at startup */
+	if (url.length() == 0) return ABOUT_BLANK;
+
+	return url;
+}
+
+public boolean isBackEnabled() {
+	return webView.canGoBack();
+}
+
+public boolean isForwardEnabled() {
+	return webView.canGoForward();
+}
+
+public void refresh() {
+	html = null;
+	webView.reload(null);
+}
+
+public boolean setText(String html, boolean trusted) {
+	/*
+	* If this.html is not null then the about:blank page is already being loaded,
+	* so no navigate is required.  Just set the html that is to be shown.
+	*/
+	boolean blankLoading = this.html != null;
+	this.html = html;
+	untrustedText = !trusted;
+	if (blankLoading) return true;
+
+	NSURL inURL = NSURL.URLWithString(NSString.stringWith (ABOUT_BLANK));
+	NSURLRequest request = NSURLRequest.requestWithURL(inURL);
+	WebFrame mainFrame = webView.mainFrame();
+	mainFrame.loadRequest(request);
+	return true;
+}
+
+public boolean setUrl(String url, String postData, String[] headers) {
+	html = null;
+	lastNavigateURL = url;
+
+	if (url.indexOf('/') == 0) {
+		url = PROTOCOL_FILE + url;
+	} else if (url.indexOf(':') == -1) {
+		url = PROTOCOL_HTTP + url;
+	}
+
+	NSString str = NSString.stringWith(url);
+	NSString unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
+	int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, str.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8);
+	NSString escapedString = new NSString(ptr);
+	NSURL inURL = NSURL.URLWithString(escapedString);
+	OS.CFRelease(ptr);
+	NSMutableURLRequest request = (NSMutableURLRequest)NSMutableURLRequest.requestWithURL(inURL);
+	if (postData != null) {
+		request.setHTTPMethod(NSString.stringWith(POST));
+		byte[] bytes = postData.getBytes();
+		NSData data = NSData.dataWithBytes(bytes, bytes.length);
+		request.setHTTPBody(data);
+	}
+	if (headers != null) {
+		for (int i = 0; i < headers.length; i++) {
+			String current = headers[i];
+			if (current != null) {
+				int index = current.indexOf(':');
+				if (index != -1) {
+					String key = current.substring(0, index).trim();
+					String value = current.substring(index + 1).trim();
+					if (key.length() > 0 && value.length() > 0) {
+						if (key.equalsIgnoreCase(USER_AGENT)) {
+							/*
+							* Feature of WebKit.  The user-agent header value cannot be overridden
+							* here.  The workaround is to temporarily set the value on the WebView
+							* and then remove it after the loading of the request has begun.
+							*/
+							webView.setCustomUserAgent(NSString.stringWith(value));
+						} else {
+							request.setValue(NSString.stringWith(value), NSString.stringWith(key));						
+						}
+					}
+				}
+			}
+		}
+	}
+	WebFrame mainFrame = webView.mainFrame();
+	mainFrame.loadRequest(request);
+	webView.setCustomUserAgent(null);
+	return true;
+}
+
+public void stop() {
+	html = null;
+	webView.stopLoading(null);
+}
+
+boolean translateMnemonics() {
+	return false;
+}
+
+/* WebFrameLoadDelegate */
+
+void webView_didChangeLocationWithinPageForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	WebDataSource dataSource = frame.dataSource();
+	NSURLRequest request = dataSource.request();
+	NSURL url = request.URL();
+	NSString s = url.absoluteString();
+	int length = (int)/*64*/s.length();
+	if (length == 0) return;
+	String url2 = s.getString();
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FILEROOT)) {
+		url2 = ABOUT_BLANK;
+	} else {
+		length = URI_FILEROOT.length ();
+		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = ABOUT_BLANK + url2.substring (length);
+		}
+	}
+
+	final Display display = browser.getDisplay();
+	boolean top = frameID == webView.mainFrame().id;
+	if (top) {
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+	}
+
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void webView_didFailProvisionalLoadWithError_forFrame(int /*long*/ sender, int /*long*/ error, int /*long*/ frame) {
+	if (frame == webView.mainFrame().id) {
+		/*
+		* Feature on WebKit.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  However, WebKit fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+
+	NSError nserror = new NSError(error);
+	int /*long*/ errorCode = nserror.code();
+	if (OS.NSURLErrorBadURL < errorCode) return;
+
+	NSURL failingURL = null;
+	NSDictionary info = nserror.userInfo();
+	if (info != null) {
+		id id = info.valueForKey(NSString.stringWith("NSErrorFailingURLKey")); //$NON-NLS-1$
+		if (id != null) failingURL = new NSURL(id);
+	}
+
+	if (failingURL != null && OS.NSURLErrorServerCertificateNotYetValid <= errorCode && errorCode <= OS.NSURLErrorSecureConnectionFailed) {
+		/* handle invalid certificate error */
+		id certificates = info.objectForKey(NSString.stringWith("NSErrorPeerCertificateChainKey")); //$NON-NLS-1$
+
+		int /*long*/[] policySearch = new int /*long*/[1];
+		int /*long*/[] policyRef = new int /*long*/[1];
+		int /*long*/[] trustRef = new int /*long*/[1];
+		boolean success = false;
+		int result = OS.SecPolicySearchCreate(OS.CSSM_CERT_X_509v3, 0, 0, policySearch);
+		if (result == 0 && policySearch[0] != 0) {
+			result = OS.SecPolicySearchCopyNext(policySearch[0], policyRef);
+			if (result == 0 && policyRef[0] != 0) {
+				result = OS.SecTrustCreateWithCertificates(certificates.id, policyRef[0], trustRef);
+				if (result == 0 && trustRef[0] != 0) {
+					SFCertificateTrustPanel panel = SFCertificateTrustPanel.sharedCertificateTrustPanel();
+					String failingUrlString = failingURL.absoluteString().getString();
+					String message = Compatibility.getMessage("SWT_InvalidCert_Message", new Object[] {failingUrlString}); //$NON-NLS-1$
+					panel.setAlternateButtonTitle(NSString.stringWith(Compatibility.getMessage("SWT_Cancel"))); //$NON-NLS-1$
+					panel.setShowsHelp(true);
+					failingURL.retain();
+					NSWindow window = browser.getShell().view.window();
+					panel.beginSheetForWindow(window, delegate, OS.sel_createPanelDidEnd, failingURL.id, trustRef[0], NSString.stringWith(message));
+					success = true;
+				}
+			}
+		}
+
+		if (trustRef[0] != 0) OS.CFRelease(trustRef[0]);
+		if (policyRef[0] != 0) OS.CFRelease(policyRef[0]);
+		if (policySearch[0] != 0) OS.CFRelease(policySearch[0]);
+		if (success) return;
+	}
+
+	/* handle other types of errors */
+	NSString description = nserror.localizedDescription();
+	if (description != null) {
+		String descriptionString = description.getString();
+		String message = failingURL != null ? failingURL.absoluteString().getString() + "\n\n" : ""; //$NON-NLS-1$ //$NON-NLS-2$
+		message += Compatibility.getMessage ("SWT_Page_Load_Failed", new Object[] {descriptionString}); //$NON-NLS-1$
+		MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_ERROR);
+		messageBox.setMessage(message);
+		messageBox.open();
+	}
+}
+
+void createPanelDidEnd(int /*long*/ sheet, int /*long*/ returnCode, int /*long*/ contextInfo) {
+	NSURL failingURL = new NSURL(contextInfo);
+	failingURL.autorelease();
+	if (returnCode != OS.NSFileHandlingPanelOKButton) return;	/* nothing more to do */
+
+	int /*long*/ method = OS.class_getClassMethod(OS.class_NSURLRequest, OS.sel_setAllowsAnyHTTPSCertificate);
+	if (method != 0) {
+		OS.objc_msgSend(OS.class_NSURLRequest, OS.sel_setAllowsAnyHTTPSCertificate, 1, failingURL.host().id);
+		setUrl(failingURL.absoluteString().getString(), null, null);
+	}
+}
+
+void webView_didFinishLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	if (frameID == webView.mainFrame().id) {
+		/*
+		 * If html is not null then there is html from a previous setText() call
+		 * waiting to be set into the about:blank page once it has completed loading. 
+		 */
+		if (html != null) {
+			if (getUrl().startsWith(ABOUT_BLANK)) {
+				loadingText = true;
+				NSString string = NSString.stringWith(html);
+				NSString URLString;
+				if (untrustedText) {
+					URLString = NSString.stringWith(ABOUT_BLANK);
+				} else {
+					URLString = NSString.stringWith(URI_FILEROOT);
+				}
+				NSURL URL = NSURL.URLWithString(URLString);
+				WebFrame mainFrame = webView.mainFrame();
+				mainFrame.loadHTMLString(string, URL);
+				html = null;
+			}
+		}
+
+		/*
+		* The loadHTMLString() invocation above will trigger a second webView_didFinishLoadForFrame
+		* callback when it is completed.  If text was just set into the browser then wait for this
+		* second callback to come before sending the title or completed events.
+		*/
+		if (!loadingText) {
+			/*
+			* To be consistent with other platforms a title event should be fired when a
+			* page has completed loading.  A page with a <title> tag will do this
+			* automatically when the didReceiveTitle callback is received.  However a page
+			* without a <title> tag will not do this by default, so fire the event
+			* here with the page's url as the title.
+			*/
+			Display display = browser.getDisplay();
+			WebFrame frame = new WebFrame(frameID);
+			WebDataSource dataSource = frame.dataSource();
+			if (dataSource != null) {
+				NSString title = dataSource.pageTitle();
+				if (title == null) {	/* page has no title */
+					TitleEvent newEvent = new TitleEvent(browser);
+					newEvent.display = display;
+					newEvent.widget = browser;
+					newEvent.title = getUrl();
+					for (int i = 0; i < titleListeners.length; i++) {
+						titleListeners[i].changed(newEvent);
+					}
+					if (browser.isDisposed()) return;
+				}
+			}
+
+			ProgressEvent progress = new ProgressEvent(browser);
+			progress.display = display;
+			progress.widget = browser;
+			progress.current = MAX_PROGRESS;
+			progress.total = MAX_PROGRESS;
+			for (int i = 0; i < progressListeners.length; i++) {
+				progressListeners[i].completed(progress);
+			}
+		}
+		loadingText = false;
+		if (browser.isDisposed()) return;
+
+		/*
+		* Feature on WebKit.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  However, WebKit fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+}
+
+void hookDOMKeyListeners(int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	DOMDocument document = frame.DOMDocument();
+	if (document == null) return;
+
+	NSString type = NSString.stringWith(DOMEVENT_KEYDOWN);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_KEYUP);
+	document.addEventListener(type, delegate, false);
+}
+
+void hookDOMMouseListeners(int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	DOMDocument document = frame.DOMDocument();
+	if (document == null) return;
+
+	NSString type = NSString.stringWith(DOMEVENT_MOUSEDOWN);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_MOUSEUP);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_MOUSEMOVE);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_MOUSEWHEEL);
+	document.addEventListener(type, delegate, false);
+}
+
+void webView_didReceiveTitle_forFrame(int /*long*/ sender, int /*long*/ titleID, int /*long*/ frameID) {
+	if (frameID == webView.mainFrame().id) {
+		NSString title = new NSString(titleID);
+		String newTitle = title.getString();
+		TitleEvent newEvent = new TitleEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.title = newTitle;
+		for (int i = 0; i < titleListeners.length; i++) {
+			titleListeners[i].changed(newEvent);
+		}
+	}
+}
+
+void webView_didStartProvisionalLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	/* 
+	* This code is intentionally commented.  WebFrameLoadDelegate:didStartProvisionalLoadForFrame is
+	* called before WebResourceLoadDelegate:willSendRequest and
+	* WebFrameLoadDelegate:didCommitLoadForFrame.  The resource count is reset when didCommitLoadForFrame
+	* is received for the top frame.
+	*/
+//	if (frameID == webView.mainFrame().id) {
+//		/* reset resource status variables */
+//		resourceCount= 0;
+//	}
+}
+
+void webView_didCommitLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	WebDataSource dataSource = frame.dataSource();
+	NSURLRequest request = dataSource.request();
+	NSURL url = request.URL();
+	NSString s = url.absoluteString();
+	int length = (int)/*64*/s.length();
+	if (length == 0) return;
+	String url2 = s.getString();
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FILEROOT)) {
+		url2 = ABOUT_BLANK;
+	} else {
+		length = URI_FILEROOT.length ();
+		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = ABOUT_BLANK + url2.substring (length);
+		}
+	}
+
+	Display display = browser.getDisplay();
+	boolean top = frameID == webView.mainFrame().id;
+	if (top) {
+		/* reset resource status variables */
+		resourceCount = 0;		
+		this.url = url2;
+
+		/*
+		* Each invocation of setText() causes webView_didCommitLoadForFrame to be invoked
+		* twice, once for the initial navigate to about:blank, and once for the auto-navigate
+		* to about:blank that WebKit does when loadHTMLString is invoked.  If this is the
+		* first webView_didCommitLoadForFrame callback received for a setText() invocation
+		* then do not send any events or re-install registered BrowserFunctions. 
+		*/
+		if (url2.startsWith(ABOUT_BLANK) && html != null) return;
+
+		/* re-install registered functions */
+		Enumeration elements = functions.elements ();
+		while (elements.hasMoreElements ()) {
+			BrowserFunction function = (BrowserFunction)elements.nextElement ();
+			execute (function.functionString);
+		}
+
+		ProgressEvent progress = new ProgressEvent(browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = 1;
+		progress.total = MAX_PROGRESS;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].changed(progress);
+		}
+		if (browser.isDisposed()) return;
+
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+		if (browser.isDisposed()) return;
+
+		hookDOMKeyListeners(frameID);
+	}
+
+	hookDOMMouseListeners(frameID);
+
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void webView_windowScriptObjectAvailable (int /*long*/ webView, int /*long*/ windowScriptObject) {
+	NSObject scriptObject = new NSObject (windowScriptObject);
+	NSString key = NSString.stringWith ("external"); //$NON-NLS-1$
+	scriptObject.setValue (delegate, key);
+}
+
+/* WebResourceLoadDelegate */
+
+void webView_resource_didFinishLoadingFromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ dataSource) {
+	/*
+	* Feature on WebKit.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  However, WebKit fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void webView_resource_didFailLoadingWithError_fromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ error, int /*long*/ dataSource) {
+	/*
+	* Feature on WebKit.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  However, WebKit fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void webView_resource_didReceiveAuthenticationChallenge_fromDataSource (int /*long*/ sender, int /*long*/ identifier, int /*long*/ challenge, int /*long*/ dataSource) {
+	NSURLAuthenticationChallenge nsChallenge = new NSURLAuthenticationChallenge (challenge);
+
+	/*
+	 * Do not invoke the listeners if this challenge has been failed too many
+	 * times because a listener is likely giving incorrect credentials repeatedly
+	 * and will do so indefinitely.
+	 */
+	if (nsChallenge.previousFailureCount () < 3) {
+		for (int i = 0; i < authenticationListeners.length; i++) {
+			AuthenticationEvent event = new AuthenticationEvent (browser);
+			event.location = lastNavigateURL;
+			authenticationListeners[i].authenticate (event);
+			if (!event.doit) {
+				id challengeSender = nsChallenge.sender ();
+				OS.objc_msgSend (challengeSender.id, OS.sel_cancelAuthenticationChallenge_, challenge);
+				return;
+			}
+			if (event.user != null && event.password != null) {
+				id challengeSender = nsChallenge.sender ();
+				NSString user = NSString.stringWith (event.user);
+				NSString password = NSString.stringWith (event.password);
+				NSURLCredential credential = NSURLCredential.credentialWithUser (user, password, OS.NSURLCredentialPersistenceForSession);
+				OS.objc_msgSend (challengeSender.id, OS.sel_useCredential_forAuthenticationChallenge_, credential.id, challenge);
+				return;
+			}
+		}
+	}
+
+	/* no listener handled the challenge, so try to invoke the native panel */
+	int /*long*/ cls = OS.class_WebPanelAuthenticationHandler;
+	if (cls != 0) {
+		int /*long*/ method = OS.class_getClassMethod (cls, OS.sel_sharedHandler);
+		if (method != 0) {
+			int /*long*/ handler = OS.objc_msgSend (cls, OS.sel_sharedHandler);
+			if (handler != 0) {
+				OS.objc_msgSend (handler, OS.sel_startAuthentication, challenge, webView.window ().id);
+				return;
+			}
+		}
+	}
+
+	/* the native panel was not available, so show a custom dialog */
+	String[] userReturn = new String[1], passwordReturn = new String[1];
+	NSURLCredential proposedCredential = nsChallenge.proposedCredential ();
+	if (proposedCredential != null) {
+		userReturn[0] = proposedCredential.user ().getString ();
+		if (proposedCredential.hasPassword ()) {
+			passwordReturn[0] = proposedCredential.password ().getString ();
+		}
+	}
+	NSURLProtectionSpace space = nsChallenge.protectionSpace ();
+	String host = space.host ().getString () + ':' + space.port ();
+	String realm = space.realm ().getString ();
+	boolean result = showAuthenticationDialog (userReturn, passwordReturn, host, realm);
+	if (!result) {
+		id challengeSender = nsChallenge.sender ();
+		OS.objc_msgSend (challengeSender.id, OS.sel_cancelAuthenticationChallenge_, challenge);
+		return;
+	}
+	id challengeSender = nsChallenge.sender ();
+	NSString user = NSString.stringWith (userReturn[0]);
+	NSString password = NSString.stringWith (passwordReturn[0]);
+	NSURLCredential credential = NSURLCredential.credentialWithUser (user, password, OS.NSURLCredentialPersistenceForSession);
+	OS.objc_msgSend (challengeSender.id, OS.sel_useCredential_forAuthenticationChallenge_, credential.id, challenge);
+}
+
+boolean showAuthenticationDialog (final String[] user, final String[] password, String host, String realm) {
+	final Shell shell = new Shell (browser.getShell ());
+	shell.setLayout (new GridLayout ());
+	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
+	shell.setText (title);
+	Label label = new Label (shell, SWT.WRAP);
+	label.setText (Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host})); //$NON-NLS-1$
+
+	GridData data = new GridData ();
+	Monitor monitor = browser.getMonitor ();
+	int maxWidth = monitor.getBounds ().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	data.widthHint = Math.min (width, maxWidth);
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	label.setLayoutData (data);
+
+	Label userLabel = new Label (shell, SWT.NONE);
+	userLabel.setText (SWT.getMessage ("SWT_Username")); //$NON-NLS-1$
+
+	final Text userText = new Text (shell, SWT.BORDER);
+	if (user[0] != null) userText.setText (user[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	userText.setLayoutData (data);
+
+	Label passwordLabel = new Label (shell, SWT.NONE);
+	passwordLabel.setText (SWT.getMessage ("SWT_Password")); //$NON-NLS-1$
+
+	final Text passwordText = new Text (shell, SWT.PASSWORD | SWT.BORDER);
+	if (password[0] != null) passwordText.setText (password[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	passwordText.setLayoutData (data);
+
+	final boolean[] result = new boolean[1];
+	final Button[] buttons = new Button[2];
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			user[0] = userText.getText();
+			password[0] = passwordText.getText();
+			result[0] = event.widget == buttons[1];
+			shell.close();
+		}	
+	};
+
+	Composite composite = new Composite (shell, SWT.NONE);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.END;
+	composite.setLayoutData (data);
+	composite.setLayout (new GridLayout (2, true));
+	buttons[0] = new Button (composite, SWT.PUSH);
+	buttons[0].setText (SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
+	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[0].addListener (SWT.Selection, listener);
+	buttons[1] = new Button (composite, SWT.PUSH);
+	buttons[1].setText (SWT.getMessage("SWT_OK")); //$NON-NLS-1$
+	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[1].addListener (SWT.Selection, listener);
+
+	shell.setDefaultButton (buttons[1]);
+	shell.pack ();
+	shell.open ();
+	Display display = browser.getDisplay ();
+	while (!shell.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+
+	return result[0];
+}
+
+int /*long*/ webView_identifierForInitialRequest_fromDataSource(int /*long*/ sender, int /*long*/ request, int /*long*/ dataSourceID) {
+	ProgressEvent progress = new ProgressEvent(browser);
+	progress.display = browser.getDisplay();
+	progress.widget = browser;
+	progress.current = resourceCount;
+	progress.total = Math.max(resourceCount, MAX_PROGRESS);
+	for (int i = 0; i < progressListeners.length; i++) {
+		progressListeners[i].changed(progress);
+	}
+	if (browser.isDisposed()) return 0;
+
+	NSNumber identifier = NSNumber.numberWithInt(resourceCount++);
+	if (this.identifier == 0) {
+		WebDataSource dataSource = new WebDataSource(dataSourceID);
+		WebFrame frame = dataSource.webFrame();
+		if (frame.id == webView.mainFrame().id) this.identifier = identifier.id;
+	}
+	return identifier.id;
+		
+}
+
+int /*long*/ webView_resource_willSendRequest_redirectResponse_fromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ request, int /*long*/ redirectResponse, int /*long*/ dataSource) {
+	NSURLRequest nsRequest = new NSURLRequest (request);
+	NSURL url = nsRequest.URL ();
+	if (url.isFileURL ()) {
+		NSMutableURLRequest newRequest = new NSMutableURLRequest (nsRequest.mutableCopy ());
+		newRequest.autorelease ();
+		newRequest.setCachePolicy (OS.NSURLRequestReloadIgnoringLocalCacheData);
+		return newRequest.id;
+	}
+	return request;
+}
+
+/* UIDelegate */
+
+int /*long*/ webView_createWebViewWithRequest(int /*long*/ sender, int /*long*/ request) {
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.required = true;
+	if (openWindowListeners != null) {
+		for (int i = 0; i < openWindowListeners.length; i++) {
+			openWindowListeners[i].open(newEvent);
+		}
+	}
+	WebView result = null;
+	Browser browser = null;
+	if (newEvent.browser != null && newEvent.browser.webBrowser instanceof WebKit) {
+		browser = newEvent.browser;
+	}
+	if (browser != null && !browser.isDisposed()) {
+		result = ((WebKit)browser.webBrowser).webView;
+		if (request != 0) {
+			WebFrame mainFrame = result.mainFrame();
+			mainFrame.loadRequest(new NSURLRequest(request));
+		}
+	}
+	return result != null ? result.id : 0;
+}
+
+void webViewShow(int /*long*/ sender) {
+	/*
+	* Feature on WebKit.  WebKit expects the application to
+	* create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Shell parent = browser.getShell();
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	if (location != null) newEvent.location = location;
+	if (size != null) newEvent.size = size;
+	/*
+	* Feature in WebKit.  WebKit's tool bar contains
+	* the address bar.  The address bar is displayed
+	* if the tool bar is displayed. There is no separate
+	* notification for the address bar.
+	* 
+	* Feature of OSX.  The menu bar is always displayed.
+	* There is no notification to hide the menu bar.
+	*/
+	newEvent.addressBar = toolBar;
+	newEvent.menuBar = true;
+	newEvent.statusBar = statusBar;
+	newEvent.toolBar = toolBar;
+	for (int i = 0; i < visibilityWindowListeners.length; i++) {
+		visibilityWindowListeners[i].show(newEvent);
+	}
+	location = null;
+	size = null;
+}
+
+void webView_setFrame(int /*long*/ sender, int /*long*/ frame) {
+	NSRect rect = new NSRect();
+	OS.memmove(rect, frame, NSRect.sizeof);
+	/* convert to SWT system coordinates */
+	Rectangle bounds = browser.getDisplay().getBounds();
+	location = new Point((int)rect.x, bounds.height - (int)rect.y - (int)rect.height);
+	size = new Point((int)rect.width, (int)rect.height);
+}
+
+void webViewFocus(int /*long*/ sender) {
+}
+
+void webViewUnfocus(int /*long*/ sender) {
+}
+
+NSNumber callRunBeforeUnloadConfirmPanelWithMessage(int /*long*/ messageID, int /*long*/ arg) {
+	boolean result = webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame (0, messageID, 0);
+	return NSNumber.numberWithBool (result);
+}
+
+boolean webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame(int /*long*/ sender, int /*long*/ messageID, int /*long*/ frame) {
+	NSString message = new NSString(messageID);
+	StringBuffer text = new StringBuffer(Compatibility.getMessage("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
+	text.append("\n\n"); //$NON-NLS-1$
+	text.append(message.getString());
+	text.append("\n\n"); //$NON-NLS-1$
+	text.append(Compatibility.getMessage("SWT_OnBeforeUnload_Message2")); //$NON-NLS-1$
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION | SWT.SHEET);
+	messageBox.setMessage(text.toString());
+	return messageBox.open() == SWT.OK;
+}
+
+void webView_runJavaScriptAlertPanelWithMessage(int /*long*/ sender, int /*long*/ messageID) {
+	NSString message = new NSString(messageID);
+	String text = message.getString();
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_WARNING);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	messageBox.open();
+}
+
+int webView_runJavaScriptConfirmPanelWithMessage(int /*long*/ sender, int /*long*/ messageID) {
+	NSString message = new NSString(messageID);
+	String text = message.getString();
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	return messageBox.open() == SWT.OK ? 1 : 0;
+}
+
+void webView_runOpenPanelForFileButtonWithResultListener(int /*long*/ sender, int /*long*/ resultListenerID) {
+	FileDialog dialog = new FileDialog(browser.getShell(), SWT.NONE);
+	String result = dialog.open();
+	WebOpenPanelResultListener resultListener = new WebOpenPanelResultListener(resultListenerID);
+	if (result == null) {
+		resultListener.cancel();
+		return;
+	}
+	resultListener.chooseFilename(NSString.stringWith(result));
+}
+
+void webViewClose(int /*long*/ sender) {
+	Shell parent = browser.getShell();
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	for (int i = 0; i < closeWindowListeners.length; i++) {
+		closeWindowListeners[i].close(newEvent);
+	}
+	browser.dispose();
+	if (parent.isDisposed()) return;
+	/*
+	* Feature on WebKit.  WebKit expects the application to
+	* create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+}
+
+int /*long*/ webView_contextMenuItemsForElement_defaultMenuItems(int /*long*/ sender, int /*long*/ element, int /*long*/ defaultMenuItems) {
+	Point pt = browser.getDisplay().getCursorLocation();
+	Event event = new Event();
+	event.x = pt.x;
+	event.y = pt.y;
+	browser.notifyListeners(SWT.MenuDetect, event);
+	Menu menu = browser.getMenu();
+	if (!event.doit) return 0;
+	if (menu != null && !menu.isDisposed()) {
+		if (event.x != pt.x || event.y != pt.y) {
+			menu.setLocation(event.x, event.y);
+		}
+		menu.setVisible(true);
+		return 0;
+	}
+	return defaultMenuItems;
+}
+
+void webView_setStatusBarVisible(int /*long*/ sender, boolean visible) {
+	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
+	statusBar = visible;
+}
+
+void webView_setStatusText(int /*long*/ sender, int /*long*/ textID) {
+	NSString text = new NSString(textID);
+	int length = (int)/*64*/text.length();
+	if (length == 0) return;
+
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = text.getString();
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+void webView_setResizable(int /*long*/ sender, boolean visible) {
+}
+
+void webView_setToolbarsVisible(int /*long*/ sender, boolean visible) {
+	/* Note.  Webkit only emits the notification when the tool bar should be hidden. */
+	toolBar = visible;
+}
+
+void webView_mouseDidMoveOverElement_modifierFlags (int /*long*/ sender, int /*long*/ elementInformationID, int /*long*/ modifierFlags) {
+	if (elementInformationID == 0) return;
+
+	NSString key = NSString.stringWith(WebElementLinkURLKey);
+	NSDictionary elementInformation = new NSDictionary(elementInformationID);
+	id value = elementInformation.valueForKey(key);
+	if (value == null) {
+		/* not currently over a link */
+		if (lastHoveredLinkURL == null) return;
+		lastHoveredLinkURL = null;
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = browser.getDisplay();
+		statusText.widget = browser;
+		statusText.text = "";	//$NON-NLS-1$
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+		return;
+	}
+
+	NSString url = new NSURL(value.id).absoluteString();
+	int length = (int)/*64*/url.length();
+	String urlString;
+	if (length == 0) {
+		urlString = "";	//$NON-NLS-1$
+	} else {
+		urlString = url.getString();
+	}
+	if (urlString.equals(lastHoveredLinkURL)) return;
+
+	lastHoveredLinkURL = urlString;
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = urlString;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+void webView_printFrameView (int /*long*/ sender, int /*long*/ frameViewID) {
+	WebFrameView view = new WebFrameView(frameViewID);
+	boolean viewPrint = view.documentViewShouldHandlePrint();
+	if (viewPrint) {
+		view.printDocumentView();
+		return;
+	}
+	NSPrintInfo info = NSPrintInfo.sharedPrintInfo();
+	NSPrintOperation operation = view.printOperationWithPrintInfo(info);
+	if (operation != null) operation.runOperation();
+}
+
+/* PolicyDelegate */
+
+void webView_decidePolicyForMIMEType_request_frame_decisionListener(int /*long*/ sender, int /*long*/ type, int /*long*/ request, int /*long*/ frame, int /*long*/ listenerID) {
+	boolean canShow = WebView.canShowMIMEType(new NSString(type));
+	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
+	if (canShow) {
+		listener.use();
+	} else {
+		listener.download();
+	}
+}
+
+void webView_decidePolicyForNavigationAction_request_frame_decisionListener(int /*long*/ sender, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frame, int /*long*/ listenerID) {
+	NSURL url = new NSURLRequest(request).URL();
+	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
+
+	if (loadingText) {
+		/* 
+		 * WebKit is auto-navigating to about:blank in response to a loadHTMLString()
+		 * invocation.  This navigate should always proceed without sending an event
+		 * since it is preceded by an explicit navigate to about:blank in setText().
+		 */
+		listener.use();
+		return;
+	}
+	if (url == null) {
+		/* indicates that a URL with an invalid format was specified */
+		listener.ignore();
+		return;
+	}
+	if (url.isFileURL() && getUrl().startsWith(ABOUT_BLANK) && untrustedText) {
+		/* indicates an attempt to access the local file system from untrusted content */
+		listener.ignore();
+		return;
+	}
+	NSString s = url.absoluteString();
+	String url2 = s.getString();
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FILEROOT)) {
+		url2 = ABOUT_BLANK;
+	} else {
+		int length = URI_FILEROOT.length ();
+		if (url2.startsWith (URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = ABOUT_BLANK + url2.substring (length);
+		}
+	}
+
+	LocationEvent newEvent = new LocationEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.location = url2;
+	newEvent.doit = true;
+	if (locationListeners != null) {
+		for (int i = 0; i < locationListeners.length; i++) {
+			locationListeners[i].changing(newEvent);
+		}
+	}
+	if (newEvent.doit) {
+		if (jsEnabledChanged) {
+			jsEnabledChanged = false;
+			if (preferences == null) {
+				preferences = (WebPreferences)new WebPreferences ().alloc ().init ();
+				webView.setPreferences (preferences);
+			}
+			preferences.setJavaScriptEnabled (jsEnabled);
+		}
+		listener.use();
+		lastNavigateURL = url2;
+	} else {
+		listener.ignore();
+	}
+}
+
+void webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(int /*long*/ sender, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frameName, int /*long*/ listenerID) {
+	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
+	listener.use();
+}
+
+void webView_unableToImplementPolicyWithError_frame(int /*long*/ sender, int /*long*/ error, int /*long*/ frame) {
+}
+
+/* WebDownload */
+
+void download_decideDestinationWithSuggestedFilename(int /*long*/ downloadId, int /*long*/ filename) {
+	NSString string = new NSString(filename);
+	String name = string.getString();
+	FileDialog dialog = new FileDialog(browser.getShell(), SWT.SAVE);
+	dialog.setText(SWT.getMessage ("SWT_FileDownload")); //$NON-NLS-1$
+	dialog.setFileName(name);
+	String path = dialog.open();
+	NSURLDownload download = new NSURLDownload(downloadId);
+	if (path == null) {
+		/* cancel pressed */
+		download.cancel();
+		return;
+	}
+	download.setDestination(NSString.stringWith(path), true);
+}
+
+/* DOMEventListener */
+
+void handleEvent(int /*long*/ evtId) {
+	NSString string = new NSString(OS.objc_msgSend(evtId, OS.sel_type));
+	String type = string.getString();
+
+	if (DOMEVENT_KEYDOWN.equals(type) || DOMEVENT_KEYUP.equals(type)) {
+		DOMKeyboardEvent event = new DOMKeyboardEvent(evtId);
+
+		boolean ctrl = event.ctrlKey();
+		boolean shift = event.shiftKey();
+		boolean alt = event.altKey();
+		boolean meta = event.metaKey();
+		int keyCode = event.keyCode();
+		int charCode = event.charCode();
+
+		Event keyEvent = new Event();
+		keyEvent.widget = browser;
+		int eventType = DOMEVENT_KEYDOWN.equals(type) ? SWT.KeyDown : SWT.KeyUp;
+		keyEvent.type = eventType;
+		int translatedKey = translateKey (keyCode);
+		keyEvent.keyCode = translatedKey;
+		keyEvent.character = (char)charCode;
+		int stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		keyEvent.stateMask = stateMask;
+
+		boolean doit = true;
+		if (keyEvent.type == SWT.KeyDown) {
+			doit = sendKeyEvent(keyEvent);
+		} else {
+			browser.notifyListeners(keyEvent.type, keyEvent);
+			doit = keyEvent.doit;
+		}
+		if (!doit) {
+			event.preventDefault();
+		} else {
+			if (eventType == SWT.KeyDown && stateMask == SWT.COMMAND) {
+				if (translatedKey == 'v') {
+					webView.paste (webView);
+					event.preventDefault();
+				} else if (translatedKey == 'c') {
+					webView.copy (webView);
+					event.preventDefault();
+				} else if (translatedKey == 'x') {
+					webView.cut (webView);
+					event.preventDefault();
+				}
+			}
+		}
+		return;
+	}
+
+	if (DOMEVENT_MOUSEWHEEL.equals(type)) {
+		DOMWheelEvent event = new DOMWheelEvent(evtId);
+
+		/*
+		 * The position of mouse events is received in screen-relative coordinates
+		 * in order to handle pages with frames, since frames express their event
+		 * coordinates relative to themselves rather than relative to their top-
+		 * level page.  Convert screen-relative coordinates to be browser-relative.
+		 */
+		int screenX = event.screenX();
+		int screenY = event.screenY();
+		Point position = new Point(screenX, screenY);
+		position = browser.getDisplay().map(null, browser, position);
+
+		int delta = event.wheelDelta();
+		boolean ctrl = event.ctrlKey();
+		boolean shift = event.shiftKey();
+		boolean alt = event.altKey();
+		boolean meta = event.metaKey();
+		Event mouseEvent = new Event();
+		mouseEvent.type = SWT.MouseWheel;
+		mouseEvent.widget = browser;
+		mouseEvent.x = position.x; mouseEvent.y = position.y;
+		mouseEvent.count = delta / 120;
+		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		browser.notifyListeners (mouseEvent.type, mouseEvent);
+		return;
+	}
+
+	/* mouse event */
+
+	DOMMouseEvent event = new DOMMouseEvent(evtId);
+
+	/*
+	 * The position of mouse events is received in screen-relative coordinates
+	 * in order to handle pages with frames, since frames express their event
+	 * coordinates relative to themselves rather than relative to their top-
+	 * level page.  Convert screen-relative coordinates to be browser-relative.
+	 */
+	int screenX = event.screenX();
+	int screenY = event.screenY();
+	Point position = new Point(screenX, screenY);
+	position = browser.getDisplay().map(null, browser, position);
+
+	int detail = event.detail();
+	int button = event.button();
+	boolean ctrl = event.ctrlKey();
+	boolean shift = event.shiftKey();
+	boolean alt = event.altKey();
+	boolean meta = event.metaKey();
+
+	Event mouseEvent = new Event ();
+	mouseEvent.widget = browser;
+	mouseEvent.x = position.x; mouseEvent.y = position.y;
+	mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+	if (DOMEVENT_MOUSEDOWN.equals (type)) {
+		mouseEvent.type = SWT.MouseDown;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+	} else if (DOMEVENT_MOUSEUP.equals (type)) {
+		mouseEvent.type = SWT.MouseUp;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		switch (mouseEvent.button) {
+			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	} else if (DOMEVENT_MOUSEMOVE.equals (type)) {
+		/*
+		* Bug in WebKit.  Spurious and redundant mousemove events are received in
+		* various contexts, including following every MouseUp.  The workaround is
+		* to not fire MouseMove events whose x and y values match the last MouseMove  
+		*/
+		if (mouseEvent.x == lastMouseMoveX && mouseEvent.y == lastMouseMoveY) return;
+		mouseEvent.type = SWT.MouseMove;
+		lastMouseMoveX = mouseEvent.x; lastMouseMoveY = mouseEvent.y;
+	}
+
+	browser.notifyListeners (mouseEvent.type, mouseEvent);
+	if (detail == 2 && DOMEVENT_MOUSEDOWN.equals (type)) {
+		mouseEvent = new Event ();
+		mouseEvent.widget = browser;
+		mouseEvent.x = position.x; mouseEvent.y = position.y;
+		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		mouseEvent.type = SWT.MouseDoubleClick;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		browser.notifyListeners (mouseEvent.type, mouseEvent);
+	}
+}
+
+/* external */
+
+Object convertToJava (int /*long*/ value) {
+	NSObject object = new NSObject (value);
+	int /*long*/ clazz = OS.objc_lookUpClass ("NSString"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		NSString string = new NSString (value);
+		return string.getString ();
+	}
+	clazz = OS.objc_lookUpClass ("NSNumber"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		NSNumber number = new NSNumber (value);
+		int /*long*/ ptr = number.objCType ();
+		byte[] type = new byte[1];
+		OS.memmove (type, ptr, 1);
+		if (type[0] == 'c' || type[0] == 'B') {
+			return new Boolean (number.boolValue ());
+		}
+		if ("islqISLQfd".indexOf (type[0]) != -1) { //$NON-NLS-1$
+			return new Double (number.doubleValue ());
+		}
+	}
+	clazz = OS.objc_lookUpClass ("WebScriptObject"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		WebScriptObject script = new WebScriptObject (value);
+		id id = script.valueForKey (NSString.stringWith ("length")); //$NON-NLS-1$
+		if (id == null) { /* not a JS array */
+			SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int length = new NSNumber (id).intValue ();
+		Object[] arguments = new Object[length];
+		for (int i = 0; i < length; i++) {
+			id current = script.webScriptValueAtIndex (i);
+			if (current != null) {
+				arguments[i] = convertToJava (current.id);
+			}
+		}
+		return arguments;
+	}
+	clazz = OS.objc_lookUpClass ("WebUndefined"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		return null;
+	}
+
+	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	return null;
+}
+
+NSObject convertToJS (Object value) {
+	if (value == null) {
+		int /*long*/ result = OS.objc_msgSend (OS.class_NSNull, OS.sel_null);
+		return result != 0 ? new NSObject (result) : null;
+	}
+	if (value instanceof String) {
+		return NSString.stringWith ((String)value);
+	}
+	if (value instanceof Boolean) {
+		return NSNumber.numberWithBool (((Boolean)value).booleanValue ());
+	}
+	if (value instanceof Number) {
+		return NSNumber.numberWithDouble (((Number)value).doubleValue ());
+	}
+	if (value instanceof Object[]) {
+		Object[] arrayValue = (Object[]) value;
+		int length = arrayValue.length;
+		NSMutableArray array = NSMutableArray.arrayWithCapacity (length);
+		for (int i = 0; i < length; i++) {
+			Object currentObject = arrayValue[i];
+			array.addObject (convertToJS (currentObject));
+		}
+		return array;
+	}
+	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
+	return null;
+}
+
+NSObject callJava (int /*long*/ index, int /*long*/ token, int /*long*/ args, int /*long*/ arg1) {
+	Object returnValue = null;
+	NSObject object = new NSObject (index);
+	int /*long*/ clazz = OS.objc_lookUpClass ("NSNumber"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		NSNumber number = new NSNumber (index);
+		Object key = new Integer (number.intValue ());
+		object = new NSObject (token);
+		if (object.isKindOfClass (clazz)) {
+			number = new NSNumber (token);
+			long tokenValue = (long)number.doubleValue ();
+			BrowserFunction function = (BrowserFunction)functions.get (key);
+			if (function != null && tokenValue == function.token) {
+				try {
+					Object temp = convertToJava (args);
+					if (temp instanceof Object[]) {
+						Object[] arguments = (Object[])temp;
+						try {
+							returnValue = function.function (arguments);
+						} catch (Exception e) {
+							/* exception during function invocation */
+							returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+						}
+					}
+				} catch (IllegalArgumentException e) {
+					/* invalid argument value type */
+					if (function.isEvaluate) {
+						/* notify the evaluate function so that a java exception can be thrown */
+						function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
+					}
+					returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+				}
+			}
+		}
+	}
+	try {
+		return convertToJS (returnValue);
+	} catch (SWTException e) {
+		/* invalid return value type */
+		return convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
+	}
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.h
old mode 100644
new mode 100755
index 05b9a2e..90685cf
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/library/webkitgtk.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2009, 2011 IBM Corporation and others. All rights reserved.
  * The contents of this file are made available under the terms
  * of the GNU Lesser General Public License (LGPL) Version 2.1 that
  * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -31,4 +31,9 @@
 #include <webkit/webkitwebpolicydecision.h>
 #include <webkit/webkitwebsettings.h>
 #include <webkit/webkitwebview.h>
+
+#if WEBKIT_CHECK_VERSION(1,4,0)
+#include <webkit/webkitglobals.h>
+#endif
+
 #endif /* INC_webkitgtk_H */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
index fa8840b..727a9ed 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@ import org.eclipse.swt.internal.webkit.*;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.widgets.*;
 
-public class WebKit extends WebBrowser {
+class WebKit extends WebBrowser {
 	int /*long*/ webView, webViewData, scrolledWindow;
 	int failureCount, lastKeyCode, lastCharCode;
 	String postData;
@@ -89,116 +89,127 @@ public class WebKit extends WebBrowser {
 	static Callback JSObjectHasPropertyProc, JSObjectGetPropertyProc, JSObjectCallAsFunctionProc;
 
 	static {
+
+		/*
+		* WebKitGTK is binary-incompatible between its 1.2 and 1.4 releases,
+		* so swt has separate libraries compiled against each.
+		*/
 		try {
-			Library.loadLibrary ("swt-webkit"); // $NON-NLS-1$
+			Library.loadLibrary ("swt-webkit12"); // $NON-NLS-1$
 			LibraryLoaded = true;
 		} catch (Throwable e) {
+			try {
+				Library.loadLibrary ("swt-webkit"); // $NON-NLS-1$
+				LibraryLoaded = true;
+			} catch (Throwable e2) {
+			}
 		}
 
-		Proc2 = new Callback (WebKit.class, "Proc", 2); //$NON-NLS-1$
-		if (Proc2.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Proc3 = new Callback (WebKit.class, "Proc", 3); //$NON-NLS-1$
-		if (Proc3.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Proc4 = new Callback (WebKit.class, "Proc", 4); //$NON-NLS-1$
-		if (Proc4.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Proc5 = new Callback (WebKit.class, "Proc", 5); //$NON-NLS-1$
-		if (Proc5.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		Proc6 = new Callback (WebKit.class, "Proc", 6); //$NON-NLS-1$
-		if (Proc6.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		JSObjectHasPropertyProc = new Callback (WebKit.class, "JSObjectHasPropertyProc", 3); //$NON-NLS-1$
-		if (JSObjectHasPropertyProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		JSObjectGetPropertyProc = new Callback (WebKit.class, "JSObjectGetPropertyProc", 4); //$NON-NLS-1$
-		if (JSObjectGetPropertyProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-		JSObjectCallAsFunctionProc = new Callback (WebKit.class, "JSObjectCallAsFunctionProc", 6); //$NON-NLS-1$
-		if (JSObjectCallAsFunctionProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
-
-		NativeClearSessions = new Runnable () {
-			public void run () {
-				if (!LibraryLoaded) return;
-				int /*long*/ session = WebKitGTK.webkit_get_default_session ();
-				int /*long*/ type = WebKitGTK.soup_cookie_jar_get_type ();
-				int /*long*/ jar = WebKitGTK.soup_session_get_feature (session, type);
-				if (jar == 0) return;
-				int /*long*/ cookies = WebKitGTK.soup_cookie_jar_all_cookies (jar);
-				int length = OS.g_slist_length (cookies);
-				int /*long*/ current = cookies;
-				for (int i = 0; i < length; i++) {
-					int /*long*/ cookie = OS.g_slist_data (current);
-					int /*long*/ expires = WebKitGTK.SoupCookie_expires (cookie);
-					if (expires == 0) {
-						/* indicates a session cookie */
-						WebKitGTK.soup_cookie_jar_delete_cookie (jar, cookie);
+		if (LibraryLoaded) {
+			Proc2 = new Callback (WebKit.class, "Proc", 2); //$NON-NLS-1$
+			if (Proc2.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+			Proc3 = new Callback (WebKit.class, "Proc", 3); //$NON-NLS-1$
+			if (Proc3.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+			Proc4 = new Callback (WebKit.class, "Proc", 4); //$NON-NLS-1$
+			if (Proc4.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+			Proc5 = new Callback (WebKit.class, "Proc", 5); //$NON-NLS-1$
+			if (Proc5.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+			Proc6 = new Callback (WebKit.class, "Proc", 6); //$NON-NLS-1$
+			if (Proc6.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+			JSObjectHasPropertyProc = new Callback (WebKit.class, "JSObjectHasPropertyProc", 3); //$NON-NLS-1$
+			if (JSObjectHasPropertyProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+			JSObjectGetPropertyProc = new Callback (WebKit.class, "JSObjectGetPropertyProc", 4); //$NON-NLS-1$
+			if (JSObjectGetPropertyProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+			JSObjectCallAsFunctionProc = new Callback (WebKit.class, "JSObjectCallAsFunctionProc", 6); //$NON-NLS-1$
+			if (JSObjectCallAsFunctionProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+			NativeClearSessions = new Runnable () {
+				public void run () {
+					if (!LibraryLoaded) return;
+					int /*long*/ session = WebKitGTK.webkit_get_default_session ();
+					int /*long*/ type = WebKitGTK.soup_cookie_jar_get_type ();
+					int /*long*/ jar = WebKitGTK.soup_session_get_feature (session, type);
+					if (jar == 0) return;
+					int /*long*/ cookies = WebKitGTK.soup_cookie_jar_all_cookies (jar);
+					int length = OS.g_slist_length (cookies);
+					int /*long*/ current = cookies;
+					for (int i = 0; i < length; i++) {
+						int /*long*/ cookie = OS.g_slist_data (current);
+						int /*long*/ expires = WebKitGTK.SoupCookie_expires (cookie);
+						if (expires == 0) {
+							/* indicates a session cookie */
+							WebKitGTK.soup_cookie_jar_delete_cookie (jar, cookie);
+						}
+						OS.g_free (cookie);
+						current = OS.g_slist_next (current);
 					}
-					OS.g_free (cookie);
-					current = OS.g_slist_next (current);
 				}
-			}
-		};
-
-		NativeGetCookie = new Runnable () {
-			public void run () {
-				if (!LibraryLoaded) return;
-				int /*long*/ session = WebKitGTK.webkit_get_default_session ();
-				int /*long*/ type = WebKitGTK.soup_cookie_jar_get_type ();
-				int /*long*/ jar = WebKitGTK.soup_session_get_feature (session, type);
-				if (jar == 0) return;
-				byte[] bytes = Converter.wcsToMbcs (null, CookieUrl, true);
-				int /*long*/ uri = WebKitGTK.soup_uri_new (bytes);
-				if (uri == 0) return;
-				int /*long*/ cookies = WebKitGTK.soup_cookie_jar_get_cookies (jar, uri, 0);
-				WebKitGTK.soup_uri_free (uri);
-				if (cookies == 0) return;
-				int length = OS.strlen (cookies);
-				bytes = new byte[length];
-				C.memmove (bytes, cookies, length);
-				OS.g_free (cookies);
-				String allCookies = new String (Converter.mbcsToWcs (null, bytes));
-				StringTokenizer tokenizer = new StringTokenizer (allCookies, ";"); //$NON-NLS-1$
-				while (tokenizer.hasMoreTokens ()) {
-					String cookie = tokenizer.nextToken ();
-					int index = cookie.indexOf ('=');
-					if (index != -1) {
-						String name = cookie.substring (0, index).trim ();
-						if (name.equals (CookieName)) {
-							CookieValue = cookie.substring (index + 1).trim ();
-							return;
+			};
+
+			NativeGetCookie = new Runnable () {
+				public void run () {
+					if (!LibraryLoaded) return;
+					int /*long*/ session = WebKitGTK.webkit_get_default_session ();
+					int /*long*/ type = WebKitGTK.soup_cookie_jar_get_type ();
+					int /*long*/ jar = WebKitGTK.soup_session_get_feature (session, type);
+					if (jar == 0) return;
+					byte[] bytes = Converter.wcsToMbcs (null, CookieUrl, true);
+					int /*long*/ uri = WebKitGTK.soup_uri_new (bytes);
+					if (uri == 0) return;
+					int /*long*/ cookies = WebKitGTK.soup_cookie_jar_get_cookies (jar, uri, 0);
+					WebKitGTK.soup_uri_free (uri);
+					if (cookies == 0) return;
+					int length = OS.strlen (cookies);
+					bytes = new byte[length];
+					C.memmove (bytes, cookies, length);
+					OS.g_free (cookies);
+					String allCookies = new String (Converter.mbcsToWcs (null, bytes));
+					StringTokenizer tokenizer = new StringTokenizer (allCookies, ";"); //$NON-NLS-1$
+					while (tokenizer.hasMoreTokens ()) {
+						String cookie = tokenizer.nextToken ();
+						int index = cookie.indexOf ('=');
+						if (index != -1) {
+							String name = cookie.substring (0, index).trim ();
+							if (name.equals (CookieName)) {
+								CookieValue = cookie.substring (index + 1).trim ();
+								return;
+							}
 						}
 					}
 				}
-
-			}
-		};
-
-		NativeSetCookie = new Runnable () {
-			public void run () {
-				if (!LibraryLoaded) return;
-				int /*long*/ session = WebKitGTK.webkit_get_default_session ();
-				int /*long*/ type = WebKitGTK.soup_cookie_jar_get_type ();
-				int /*long*/ jar = WebKitGTK.soup_session_get_feature (session, type);
-				if (jar == 0) {
-					/* this happens if a navigation has not occurred yet */
-					WebKitGTK.soup_session_add_feature_by_type (session, type);
-					jar = WebKitGTK.soup_session_get_feature (session, type);
-				}
-				if (jar == 0) return;
-				byte[] bytes = Converter.wcsToMbcs (null, CookieUrl, true);
-				int /*long*/ uri = WebKitGTK.soup_uri_new (bytes);
-				if (uri == 0) return;
-				bytes = Converter.wcsToMbcs (null, CookieValue, true);
-				int /*long*/ cookie = WebKitGTK.soup_cookie_parse (bytes, uri);
-				if (cookie != 0) {
-					WebKitGTK.soup_cookie_jar_add_cookie (jar, cookie);
-					// the following line is intentionally commented
-					// WebKitGTK.soup_cookie_free (cookie);
-					CookieResult = true;
+			};
+
+			NativeSetCookie = new Runnable () {
+				public void run () {
+					if (!LibraryLoaded) return;
+					int /*long*/ session = WebKitGTK.webkit_get_default_session ();
+					int /*long*/ type = WebKitGTK.soup_cookie_jar_get_type ();
+					int /*long*/ jar = WebKitGTK.soup_session_get_feature (session, type);
+					if (jar == 0) {
+						/* this happens if a navigation has not occurred yet */
+						WebKitGTK.soup_session_add_feature_by_type (session, type);
+						jar = WebKitGTK.soup_session_get_feature (session, type);
+					}
+					if (jar == 0) return;
+					byte[] bytes = Converter.wcsToMbcs (null, CookieUrl, true);
+					int /*long*/ uri = WebKitGTK.soup_uri_new (bytes);
+					if (uri == 0) return;
+					bytes = Converter.wcsToMbcs (null, CookieValue, true);
+					int /*long*/ cookie = WebKitGTK.soup_cookie_parse (bytes, uri);
+					if (cookie != 0) {
+						WebKitGTK.soup_cookie_jar_add_cookie (jar, cookie);
+						// the following line is intentionally commented
+						// WebKitGTK.soup_cookie_free (cookie);
+						CookieResult = true;
+					}
+					WebKitGTK.soup_uri_free (uri);
 				}
-				WebKitGTK.soup_uri_free (uri);
-			}
-		};
+			};
 
-		if (NativePendingCookies != null) {
-			SetPendingCookies (NativePendingCookies);
-			NativePendingCookies = null;
+			if (NativePendingCookies != null) {
+				SetPendingCookies (NativePendingCookies);
+				NativePendingCookies = null;
+			}
 		}
 	}
 
@@ -209,6 +220,19 @@ static Browser findBrowser (int /*long*/ webView) {
 	return (Browser)Display.getCurrent ().findWidget (parent);
 }
 
+static boolean isInstalled () {
+	if (!LibraryLoaded) return false;
+	// TODO webkit_check_version() should take care of the following, but for some
+	// reason this symbol is missing from the latest build.  If it is present in
+	// Linux distro-provided builds then replace the following with this call.
+	int major = WebKitGTK.webkit_major_version ();
+	int minor = WebKitGTK.webkit_minor_version ();
+	int micro = WebKitGTK.webkit_micro_version ();
+	return major > MIN_VERSION[0] ||
+		(major == MIN_VERSION[0] && minor > MIN_VERSION[1]) ||
+		(major == MIN_VERSION[0] && minor == MIN_VERSION[1] && micro >= MIN_VERSION[2]);
+}
+
 static int /*long*/ JSObjectCallAsFunctionProc (int /*long*/ ctx, int /*long*/ function, int /*long*/ thisObject, int /*long*/ argumentCount, int /*long*/ arguments, int /*long*/ exception) {
 	if (WebKitGTK.JSValueIsObjectOfClass (ctx, thisObject, ExternalClass) == 0) {
 		return WebKitGTK.JSValueMakeUndefined (ctx);
@@ -395,22 +419,12 @@ int /*long*/ webViewProc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ a
 	}
 }
 
-public boolean create (Composite parent, int style) {
-	if (!LibraryLoaded) return false;
-
+public void create (Composite parent, int style) {
 	if (ExternalClass == 0) {
-		// TODO webkit_check_version() should do the following, but for some reason
-		// this symbol is missing from the latest build.  If it is present in Linux
-		// distro-provided builds then replace the following with this call.
-		int major = WebKitGTK.webkit_major_version ();
-		int minor = WebKitGTK.webkit_minor_version ();
-		int micro = WebKitGTK.webkit_micro_version ();
-		boolean success = major > MIN_VERSION[0] ||
-			(major == MIN_VERSION[0] && minor > MIN_VERSION[1]) ||
-			(major == MIN_VERSION[0] && minor == MIN_VERSION[1] && micro >= MIN_VERSION[2]);
-		if (!success) return false;
-
 		if (Device.DEBUG) {
+			int major = WebKitGTK.webkit_major_version ();
+			int minor = WebKitGTK.webkit_minor_version ();
+			int micro = WebKitGTK.webkit_micro_version ();
 			System.out.println("WebKit version " + major + "." + minor + "." + micro); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 		JSClassDefinition jsClassDefinition = new JSClassDefinition ();
@@ -471,6 +485,8 @@ public boolean create (Composite parent, int style) {
     int /*long*/ settings = WebKitGTK.webkit_web_view_get_settings (webView);
     OS.g_object_set (settings, WebKitGTK.javascript_can_open_windows_automatically, 1, 0);
     OS.g_object_set (settings, WebKitGTK.enable_universal_access_from_file_uris, 1, 0);
+    byte[] bytes = Converter.wcsToMbcs (null, "UTF-8", true); // $NON-NLS-1$
+    OS.g_object_set (settings, WebKitGTK.default_encoding, bytes, 0);
 
     Listener listener = new Listener () {
 		public void handleEvent (Event event) {
@@ -534,7 +550,7 @@ public boolean create (Composite parent, int style) {
 			proxyHost = PROTOCOL_HTTP + proxyHost;
 		}
 		proxyHost += ":" + port; //$NON-NLS-1$
-		byte[] bytes = Converter.wcsToMbcs (null, proxyHost, true);
+		bytes = Converter.wcsToMbcs (null, proxyHost, true);
 		int /*long*/ uri = WebKitGTK.soup_uri_new (bytes);
 		if (uri != 0) {
 			OS.g_object_set (session, WebKitGTK.SOUP_SESSION_PROXY_URI, uri, 0);
@@ -557,8 +573,6 @@ public boolean create (Composite parent, int style) {
 	* be changed.
 	*/
 	browser.setData (KEY_CHECK_SUBWINDOW, Boolean.FALSE);
-
-	return true;
 }
 
 void addEventHandlers (boolean top) {
@@ -693,9 +707,9 @@ public String getText () {
 	OS.memmove (bytes, encoding, length);
 	String encodingString = new String (Converter.mbcsToWcs (null, bytes));
 
-	int /*long*/ string = OS.GString_str (data);
-	length = OS.GString_len (string);
+	length = OS.GString_len (data);
 	bytes = new byte[length];
+	int /*long*/ string = OS.GString_str (data);
 	C.memmove (bytes, string, length);
 
 	try {
@@ -1727,19 +1741,22 @@ int /*long*/ webkit_window_object_cleared (int /*long*/ web_view, int /*long*/ f
 
 int /*long*/ callJava (int /*long*/ ctx, int /*long*/ func, int /*long*/ thisObject, int /*long*/ argumentCount, int /*long*/ arguments, int /*long*/ exception) {
 	Object returnValue = null;
-	if (argumentCount == 2) {
+	if (argumentCount == 3) {
 		int /*long*/[] result = new int /*long*/[1];
 		C.memmove (result, arguments, C.PTR_SIZEOF);
 		int type = WebKitGTK.JSValueGetType (ctx, result[0]);
 		if (type == WebKitGTK.kJSTypeNumber) {
 			int index = ((Double)convertToJava (ctx, result[0])).intValue ();
 			result[0] = 0;
-			if (index > 0) {
-				Object key = new Integer (index);
+			Object key = new Integer (index);
+			C.memmove (result, arguments + C.PTR_SIZEOF, C.PTR_SIZEOF);
+			type = WebKitGTK.JSValueGetType (ctx, result[0]);
+			if (type == WebKitGTK.kJSTypeNumber) {
+				long token = ((Double)convertToJava (ctx, result[0])).longValue ();
 				BrowserFunction function = (BrowserFunction)functions.get (key);
-				if (function != null) {
+				if (function != null && token == function.token) {
 					try {
-						C.memmove (result, arguments + C.PTR_SIZEOF, C.PTR_SIZEOF);
+						C.memmove (result, arguments + 2 * C.PTR_SIZEOF, C.PTR_SIZEOF);
 						Object temp = convertToJava (ctx, result[0]);
 						if (temp instanceof Object[]) {
 							Object[] args = (Object[])temp;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java
index 0b1717e..01bbe98 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/internal/webkit/WebKitGTK.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved.
+ * Copyright (c) 2000, 2011 IBM Corporation and others. All rights reserved.
  * The contents of this file are made available under the terms
  * of the GNU Lesser General Public License (LGPL) Version 2.1 that
  * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
@@ -52,6 +52,7 @@ public class WebKitGTK extends C {
 	public static final byte[] window_object_cleared = ascii ("window-object-cleared"); // $NON-NLS-1$
 
 	/** Properties */
+	public static final byte[] default_encoding = ascii ("default-encoding"); // $NON-NLS-1$
 	public static final byte[] enable_scripts = ascii ("enable-scripts"); // $NON-NLS-1$
 	public static final byte[] enable_universal_access_from_file_uris = ascii ("enable-universal-access-from-file-uris"); // $NON-NLS-1$
 	public static final byte[] height = ascii ("height"); // $NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/swt_webkit.rc b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/swt_webkit.rc
new file mode 100644
index 0000000..8a642d1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/swt_webkit.rc	
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+ 
+#include "windows.h"
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION SWT_COMMA_VERSION
+ PRODUCTVERSION 0,0,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40000L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "CompanyName", "Eclipse Foundation\0"
+            VALUE "FileDescription", "SWT for Windows native library\0"
+            VALUE "FileVersion", SWT_FILE_VERSION
+            VALUE "InternalName", "SWT\0"
+            VALUE "LegalCopyright", "Copyright (c) 2010 IBM Corp.  All Rights Reserved.\0"
+            VALUE "OriginalFilename", SWT_ORG_FILENAME
+            VALUE "ProductName", "Standard Widget Toolkit\0"
+            VALUE "ProductVersion", "0,0,0,0\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32.cpp
new file mode 100644
index 0000000..321dea3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32.cpp	
@@ -0,0 +1,794 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#include "swt.h"
+#include "webkit_win32_structs.h"
+#include "webkit_win32_stats.h"
+
+#define WebKit_win32_NATIVE(func) Java_org_eclipse_swt_internal_webkit_WebKit_1win32_##func
+
+#ifndef NO_CFArrayGetCount
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFArrayGetCount)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFArrayGetCount)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFArrayGetCount_FUNC);
+	rc = (jint)CFArrayGetCount((CFArrayRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFArrayGetCount_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFArrayGetValueAtIndex
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFArrayGetValueAtIndex)(JNIEnv *env, jclass that, jintLong arg0, jint arg1);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFArrayGetValueAtIndex)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFArrayGetValueAtIndex_FUNC);
+	rc = (jintLong)CFArrayGetValueAtIndex((CFArrayRef)arg0, (CFIndex)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, CFArrayGetValueAtIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFDataCreate
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFDataCreate)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jint arg2);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFDataCreate)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jint arg2)
+{
+	jbyte *lparg1=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFDataCreate_FUNC);
+	if (arg1) if ((lparg1 = env->GetByteArrayElements(arg1, NULL)) == NULL) goto fail;
+	rc = (jintLong)CFDataCreate((CFAllocatorRef)arg0, (const UInt8 *)lparg1, (CFIndex)arg2);
+fail:
+	if (arg1 && lparg1) env->ReleaseByteArrayElements(arg1, lparg1, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFDataCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFDataGetBytePtr
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFDataGetBytePtr)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFDataGetBytePtr)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFDataGetBytePtr_FUNC);
+	rc = (jintLong)CFDataGetBytePtr((CFDataRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFDataGetBytePtr_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFDataGetLength
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFDataGetLength)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFDataGetLength)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFDataGetLength_FUNC);
+	rc = (jint)CFDataGetLength((CFDataRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFDataGetLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFDictionaryCreate
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFDictionaryCreate)(JNIEnv *env, jclass that, jintLong arg0, jintLongArray arg1, jintLongArray arg2, jint arg3, jintLong arg4, jintLong arg5);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFDictionaryCreate)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLongArray arg1, jintLongArray arg2, jint arg3, jintLong arg4, jintLong arg5)
+{
+	jintLong *lparg1=NULL;
+	jintLong *lparg2=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFDictionaryCreate_FUNC);
+	if (arg1) if ((lparg1 = env->GetIntLongArrayElements(arg1, NULL)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = env->GetIntLongArrayElements(arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)CFDictionaryCreate((CFAllocatorRef)arg0, (const void **)lparg1, (const void **)lparg2, (CFIndex)arg3, (const CFDictionaryKeyCallBacks *)arg4, (const CFDictionaryValueCallBacks *)arg5);
+fail:
+	if (arg2 && lparg2) env->ReleaseIntLongArrayElements(arg2, lparg2, 0);
+	if (arg1 && lparg1) env->ReleaseIntLongArrayElements(arg1, lparg1, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFDictionaryCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFHTTPCookieCreateWithResponseHeaderFields
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieCreateWithResponseHeaderFields)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieCreateWithResponseHeaderFields)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieCreateWithResponseHeaderFields_FUNC);
+	rc = (jintLong)CFHTTPCookieCreateWithResponseHeaderFields((CFAllocatorRef)arg0, (CFDictionaryRef)arg1, (CFURLRef)arg2);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieCreateWithResponseHeaderFields_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFHTTPCookieGetFlags
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFHTTPCookieGetFlags)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFHTTPCookieGetFlags)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieGetFlags_FUNC);
+	rc = (jint)CFHTTPCookieGetFlags((CFHTTPCookieRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieGetFlags_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFHTTPCookieGetName
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieGetName)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieGetName)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieGetName_FUNC);
+	rc = (jintLong)CFHTTPCookieGetName((CFHTTPCookieRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieGetName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFHTTPCookieGetValue
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieGetValue)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieGetValue)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieGetValue_FUNC);
+	rc = (jintLong)CFHTTPCookieGetValue((CFHTTPCookieRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieGetValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFHTTPCookieStorageCopyCookies
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageCopyCookies)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageCopyCookies)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieStorageCopyCookies_FUNC);
+	rc = (jintLong)CFHTTPCookieStorageCopyCookies((CFHTTPCookieStorageRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieStorageCopyCookies_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFHTTPCookieStorageCopyCookiesForURL
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageCopyCookiesForURL)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageCopyCookiesForURL)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieStorageCopyCookiesForURL_FUNC);
+	rc = (jintLong)CFHTTPCookieStorageCopyCookiesForURL((CFHTTPCookieStorageRef)arg0, (CFURLRef)arg1, (Boolean)arg2);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieStorageCopyCookiesForURL_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFHTTPCookieStorageDeleteCookie
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageDeleteCookie)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageDeleteCookie)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieStorageDeleteCookie_FUNC);
+	CFHTTPCookieStorageDeleteCookie((CFHTTPCookieStorageRef)arg0, (CFHTTPCookieRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieStorageDeleteCookie_FUNC);
+}
+#endif
+
+#ifndef NO_CFHTTPCookieStorageSetCookie
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageSetCookie)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFHTTPCookieStorageSetCookie)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	WebKit_win32_NATIVE_ENTER(env, that, CFHTTPCookieStorageSetCookie_FUNC);
+	CFHTTPCookieStorageSetCookie((CFHTTPCookieStorageRef)arg0, (CFHTTPCookieRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, CFHTTPCookieStorageSetCookie_FUNC);
+}
+#endif
+
+#ifndef NO_CFRelease
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFRelease)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	WebKit_win32_NATIVE_ENTER(env, that, CFRelease_FUNC);
+	CFRelease((CFTypeRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFRelease_FUNC);
+}
+#endif
+
+#ifndef NO_CFStringCreateWithCharacters
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFStringCreateWithCharacters)(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1, jint arg2);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFStringCreateWithCharacters)
+	(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1, jint arg2)
+{
+	jchar *lparg1=NULL;
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFStringCreateWithCharacters_FUNC);
+	if (arg1) if ((lparg1 = env->GetCharArrayElements(arg1, NULL)) == NULL) goto fail;
+	rc = (jint)CFStringCreateWithCharacters((CFAllocatorRef)arg0, (const UniChar *)lparg1, (CFIndex)arg2);
+fail:
+	if (arg1 && lparg1) env->ReleaseCharArrayElements(arg1, lparg1, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFStringCreateWithCharacters_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFStringGetCharacterAtIndex
+extern "C" JNIEXPORT jchar JNICALL WebKit_win32_NATIVE(CFStringGetCharacterAtIndex)(JNIEnv *env, jclass that, jintLong arg0, jint arg1);
+JNIEXPORT jchar JNICALL WebKit_win32_NATIVE(CFStringGetCharacterAtIndex)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	jchar rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFStringGetCharacterAtIndex_FUNC);
+	rc = (jchar)CFStringGetCharacterAtIndex((CFStringRef)arg0, (CFIndex)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, CFStringGetCharacterAtIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFStringGetCharactersPtr
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFStringGetCharactersPtr)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFStringGetCharactersPtr)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFStringGetCharactersPtr_FUNC);
+	rc = (jintLong)CFStringGetCharactersPtr((CFStringRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFStringGetCharactersPtr_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFStringGetLength
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFStringGetLength)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(CFStringGetLength)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFStringGetLength_FUNC);
+	rc = (jint)CFStringGetLength((CFStringRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFStringGetLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFURLCreateWithString
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFURLCreateWithString)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFURLCreateWithString)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFURLCreateWithString_FUNC);
+	rc = (jintLong)CFURLCreateWithString((CFAllocatorRef)arg0, (CFStringRef)arg1, (CFURLRef)arg2);
+	WebKit_win32_NATIVE_EXIT(env, that, CFURLCreateWithString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFURLRequestCopyHTTPRequestBody
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFURLRequestCopyHTTPRequestBody)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFURLRequestCopyHTTPRequestBody)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFURLRequestCopyHTTPRequestBody_FUNC);
+	rc = (jintLong)CFURLRequestCopyHTTPRequestBody((CFURLRequestRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, CFURLRequestCopyHTTPRequestBody_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFURLRequestCreateMutableCopy
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFURLRequestCreateMutableCopy)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(CFURLRequestCreateMutableCopy)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, CFURLRequestCreateMutableCopy_FUNC);
+	rc = (jintLong)CFURLRequestCreateMutableCopy((CFAllocatorRef)arg0, (CFURLRequestRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, CFURLRequestCreateMutableCopy_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFURLRequestSetHTTPRequestBody
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFURLRequestSetHTTPRequestBody)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFURLRequestSetHTTPRequestBody)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	WebKit_win32_NATIVE_ENTER(env, that, CFURLRequestSetHTTPRequestBody_FUNC);
+	CFURLRequestSetHTTPRequestBody((CFMutableURLRequestRef)arg0, (CFDataRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, CFURLRequestSetHTTPRequestBody_FUNC);
+}
+#endif
+
+#ifndef NO_CFURLRequestSetURL
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFURLRequestSetURL)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(CFURLRequestSetURL)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	WebKit_win32_NATIVE_ENTER(env, that, CFURLRequestSetURL_FUNC);
+	CFURLRequestSetURL((CFMutableURLRequestRef)arg0, (CFURLRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, CFURLRequestSetURL_FUNC);
+}
+#endif
+
+#ifndef NO_JSClassCreate
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSClassCreate)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSClassCreate)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSClassCreate_FUNC);
+	rc = (jintLong)JSClassCreate((const JSClassDefinition*)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSClassCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSClassDefinition_1sizeof
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSClassDefinition_1sizeof)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSClassDefinition_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSClassDefinition_1sizeof_FUNC);
+	rc = (jint)JSClassDefinition_sizeof();
+	WebKit_win32_NATIVE_EXIT(env, that, JSClassDefinition_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSClassRetain
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSClassRetain)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSClassRetain)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSClassRetain_FUNC);
+	rc = (jintLong)JSClassRetain((JSClassRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSClassRetain_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSContextGetGlobalObject
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSContextGetGlobalObject)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSContextGetGlobalObject)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSContextGetGlobalObject_FUNC);
+	rc = (jintLong)JSContextGetGlobalObject((JSContextRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSContextGetGlobalObject_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSEvaluateScript
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSEvaluateScript)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jint arg4, jintLongArray arg5);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSEvaluateScript)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jint arg4, jintLongArray arg5)
+{
+	jintLong *lparg5=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSEvaluateScript_FUNC);
+	if (arg5) if ((lparg5 = env->GetIntLongArrayElements(arg5, NULL)) == NULL) goto fail;
+	rc = (jintLong)JSEvaluateScript((JSContextRef)arg0, (JSStringRef)arg1, (JSObjectRef)arg2, (JSStringRef)arg3, arg4, (JSValueRef *)lparg5);
+fail:
+	if (arg5 && lparg5) env->ReleaseIntLongArrayElements(arg5, lparg5, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSEvaluateScript_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSGlobalContextRetain
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSGlobalContextRetain)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSGlobalContextRetain)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSGlobalContextRetain_FUNC);
+	rc = (jint)JSGlobalContextRetain((JSGlobalContextRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSGlobalContextRetain_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSObjectGetPrivate
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetPrivate)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetPrivate)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSObjectGetPrivate_FUNC);
+	rc = (jintLong)JSObjectGetPrivate((JSObjectRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSObjectGetPrivate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSObjectGetProperty
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetProperty)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLongArray arg3);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetProperty)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLongArray arg3)
+{
+	jintLong *lparg3=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSObjectGetProperty_FUNC);
+	if (arg3) if ((lparg3 = env->GetIntLongArrayElements(arg3, NULL)) == NULL) goto fail;
+	rc = (jintLong)JSObjectGetProperty((JSContextRef)arg0, (JSObjectRef)arg1, (JSStringRef)arg2, (JSValueRef*)lparg3);
+fail:
+	if (arg3 && lparg3) env->ReleaseIntLongArrayElements(arg3, lparg3, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSObjectGetProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSObjectGetPropertyAtIndex
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetPropertyAtIndex)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jint arg2, jintLongArray arg3);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetPropertyAtIndex)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jint arg2, jintLongArray arg3)
+{
+	jintLong *lparg3=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSObjectGetPropertyAtIndex_FUNC);
+	if (arg3) if ((lparg3 = env->GetIntLongArrayElements(arg3, NULL)) == NULL) goto fail;
+	rc = (jintLong)JSObjectGetPropertyAtIndex((JSContextRef)arg0, (JSObjectRef)arg1, (unsigned)arg2, (JSValueRef*)lparg3);
+fail:
+	if (arg3 && lparg3) env->ReleaseIntLongArrayElements(arg3, lparg3, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSObjectGetPropertyAtIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSObjectMake
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSObjectMake)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSObjectMake)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSObjectMake_FUNC);
+	rc = (jint)JSObjectMake((JSContextRef)arg0, (JSClassRef)arg1, (void *)arg2);
+	WebKit_win32_NATIVE_EXIT(env, that, JSObjectMake_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSObjectMakeArray
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectMakeArray)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2, jintLongArray arg3);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectMakeArray)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2, jintLongArray arg3)
+{
+	jintLong *lparg2=NULL;
+	jintLong *lparg3=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSObjectMakeArray_FUNC);
+	if (arg2) if ((lparg2 = env->GetIntLongArrayElements(arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = env->GetIntLongArrayElements(arg3, NULL)) == NULL) goto fail;
+	rc = (jintLong)JSObjectMakeArray((JSContextRef)arg0, (size_t)arg1, (const struct OpaqueJSValue * const*)lparg2, (JSValueRef*)lparg3);
+fail:
+	if (arg3 && lparg3) env->ReleaseIntLongArrayElements(arg3, lparg3, 0);
+	if (arg2 && lparg2) env->ReleaseIntLongArrayElements(arg2, lparg2, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSObjectMakeArray_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSObjectMakeFunctionWithCallback
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSObjectMakeFunctionWithCallback)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSObjectMakeFunctionWithCallback)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSObjectMakeFunctionWithCallback_FUNC);
+	rc = (jint)JSObjectMakeFunctionWithCallback((JSContextRef)arg0, (JSStringRef)arg1, (JSObjectCallAsFunctionCallback)arg2);
+	WebKit_win32_NATIVE_EXIT(env, that, JSObjectMakeFunctionWithCallback_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSObjectSetProperty
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(JSObjectSetProperty)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLongArray arg5);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(JSObjectSetProperty)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLongArray arg5)
+{
+	jintLong *lparg5=NULL;
+	WebKit_win32_NATIVE_ENTER(env, that, JSObjectSetProperty_FUNC);
+	if (arg5) if ((lparg5 = env->GetIntLongArrayElements(arg5, NULL)) == NULL) goto fail;
+	JSObjectSetProperty((JSContextRef)arg0, (JSObjectRef)arg1, (JSStringRef)arg2, (JSValueRef)arg3, (JSPropertyAttributes)arg4, (JSValueRef *)lparg5);
+fail:
+	if (arg5 && lparg5) env->ReleaseIntLongArrayElements(arg5, lparg5, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSObjectSetProperty_FUNC);
+}
+#endif
+
+#ifndef NO_JSStringCreateWithUTF8CString
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSStringCreateWithUTF8CString)(JNIEnv *env, jclass that, jbyteArray arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSStringCreateWithUTF8CString)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSStringCreateWithUTF8CString_FUNC);
+	if (arg0) if ((lparg0 = env->GetByteArrayElements(arg0, NULL)) == NULL) goto fail;
+	rc = (jintLong)JSStringCreateWithUTF8CString((const char*)lparg0);
+fail:
+	if (arg0 && lparg0) env->ReleaseByteArrayElements(arg0, lparg0, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSStringCreateWithUTF8CString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSStringGetLength
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSStringGetLength)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSStringGetLength)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSStringGetLength_FUNC);
+	rc = (jint)JSStringGetLength((JSStringRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSStringGetLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSStringGetMaximumUTF8CStringSize
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSStringGetMaximumUTF8CStringSize)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSStringGetMaximumUTF8CStringSize)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSStringGetMaximumUTF8CStringSize_FUNC);
+	rc = (jintLong)JSStringGetMaximumUTF8CStringSize((JSStringRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSStringGetMaximumUTF8CStringSize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSStringGetUTF8CString
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSStringGetUTF8CString)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintLong arg2);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSStringGetUTF8CString)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintLong arg2)
+{
+	jbyte *lparg1=NULL;
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSStringGetUTF8CString_FUNC);
+	if (arg1) if ((lparg1 = env->GetByteArrayElements(arg1, NULL)) == NULL) goto fail;
+	rc = (jint)JSStringGetUTF8CString((JSStringRef)arg0, (char *)lparg1, (size_t)arg2);
+fail:
+	if (arg1 && lparg1) env->ReleaseByteArrayElements(arg1, lparg1, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSStringGetUTF8CString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSStringIsEqualToUTF8CString
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSStringIsEqualToUTF8CString)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSStringIsEqualToUTF8CString)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1)
+{
+	jbyte *lparg1=NULL;
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSStringIsEqualToUTF8CString_FUNC);
+	if (arg1) if ((lparg1 = env->GetByteArrayElements(arg1, NULL)) == NULL) goto fail;
+	rc = (jint)JSStringIsEqualToUTF8CString((JSStringRef)arg0, (const char *)lparg1);
+fail:
+	if (arg1 && lparg1) env->ReleaseByteArrayElements(arg1, lparg1, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSStringIsEqualToUTF8CString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSStringRelease
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(JSStringRelease)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(JSStringRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	WebKit_win32_NATIVE_ENTER(env, that, JSStringRelease_FUNC);
+	JSStringRelease((JSStringRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSStringRelease_FUNC);
+}
+#endif
+
+#ifndef NO_JSValueGetType
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSValueGetType)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSValueGetType)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueGetType_FUNC);
+	rc = (jint)JSValueGetType((JSContextRef)arg0, (JSValueRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueGetType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueIsObjectOfClass
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSValueIsObjectOfClass)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSValueIsObjectOfClass)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueIsObjectOfClass_FUNC);
+	rc = (jint)JSValueIsObjectOfClass((JSContextRef)arg0, (JSValueRef)arg1, (JSClassRef)arg2);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueIsObjectOfClass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueMakeBoolean
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeBoolean)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeBoolean)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueMakeBoolean_FUNC);
+	rc = (jintLong)JSValueMakeBoolean((JSContextRef)arg0, (bool)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueMakeBoolean_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueMakeNull
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeNull)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeNull)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueMakeNull_FUNC);
+	rc = (jintLong)JSValueMakeNull((JSContextRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueMakeNull_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueMakeNumber
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeNumber)(JNIEnv *env, jclass that, jintLong arg0, jdouble arg1);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeNumber)
+	(JNIEnv *env, jclass that, jintLong arg0, jdouble arg1)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueMakeNumber_FUNC);
+	rc = (jintLong)JSValueMakeNumber((JSContextRef)arg0, (double)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueMakeNumber_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueMakeString
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeString)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeString)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueMakeString_FUNC);
+	rc = (jintLong)JSValueMakeString((JSContextRef)arg0, (JSStringRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueMakeString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueMakeUndefined
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeUndefined)(JNIEnv *env, jclass that, jintLong arg0);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueMakeUndefined)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueMakeUndefined_FUNC);
+	rc = (jintLong)JSValueMakeUndefined((JSContextRef)arg0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueMakeUndefined_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueToBoolean
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSValueToBoolean)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(JSValueToBoolean)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueToBoolean_FUNC);
+	rc = (jint)JSValueToBoolean((JSContextRef)arg0, (JSValueRef)arg1);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueToBoolean_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueToNumber
+extern "C" JNIEXPORT jdouble JNICALL WebKit_win32_NATIVE(JSValueToNumber)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2);
+JNIEXPORT jdouble JNICALL WebKit_win32_NATIVE(JSValueToNumber)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2)
+{
+	jintLong *lparg2=NULL;
+	jdouble rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueToNumber_FUNC);
+	if (arg2) if ((lparg2 = env->GetIntLongArrayElements(arg2, NULL)) == NULL) goto fail;
+	rc = (jdouble)JSValueToNumber((JSContextRef)arg0, (JSValueRef)arg1, (JSValueRef*)lparg2);
+fail:
+	if (arg2 && lparg2) env->ReleaseIntLongArrayElements(arg2, lparg2, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueToNumber_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_JSValueToStringCopy
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueToStringCopy)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSValueToStringCopy)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2)
+{
+	jintLong *lparg2=NULL;
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, JSValueToStringCopy_FUNC);
+	if (arg2) if ((lparg2 = env->GetIntLongArrayElements(arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)JSValueToStringCopy((JSContextRef)arg0, (JSValueRef)arg1, (JSValueRef*)lparg2);
+fail:
+	if (arg2 && lparg2) env->ReleaseIntLongArrayElements(arg2, lparg2, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, JSValueToStringCopy_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_kCFCopyStringDictionaryKeyCallBacks
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(kCFCopyStringDictionaryKeyCallBacks)(JNIEnv *env, jclass that);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(kCFCopyStringDictionaryKeyCallBacks)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, kCFCopyStringDictionaryKeyCallBacks_FUNC);
+	rc = (jintLong)&kCFCopyStringDictionaryKeyCallBacks;
+	WebKit_win32_NATIVE_EXIT(env, that, kCFCopyStringDictionaryKeyCallBacks_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_kCFTypeDictionaryValueCallBacks
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(kCFTypeDictionaryValueCallBacks)(JNIEnv *env, jclass that);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(kCFTypeDictionaryValueCallBacks)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, kCFTypeDictionaryValueCallBacks_FUNC);
+	rc = (jintLong)&kCFTypeDictionaryValueCallBacks;
+	WebKit_win32_NATIVE_EXIT(env, that, kCFTypeDictionaryValueCallBacks_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_memmove
+extern "C" JNIEXPORT void JNICALL WebKit_win32_NATIVE(memmove)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2);
+JNIEXPORT void JNICALL WebKit_win32_NATIVE(memmove)
+	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+{
+	JSClassDefinition _arg1, *lparg1=NULL;
+	WebKit_win32_NATIVE_ENTER(env, that, memmove_FUNC);
+	if (arg1) if ((lparg1 = getJSClassDefinitionFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+	WebKit_win32_NATIVE_EXIT(env, that, memmove_FUNC);
+}
+#endif
+
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32.h
new file mode 100644
index 0000000..583f876
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32.h	
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#ifndef INC_webkit_win32_H
+#define INC_webkit_win32_H
+
+#include <ole2.h>
+#include <JavaScriptCore/JSContextRef.h>
+#include <JavaScriptCore/JSObjectRef.h>
+#include <JavaScriptCore/JSStringRef.h>
+#include <CFNetwork/CFHTTPCookiesPriv.h>
+#include <CFNetwork/CFURLRequestPriv.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <WebKitCOMAPI.h>
+#include "webkit_win32_custom.h"
+
+#endif /* INC_webkit_win32_H */
+
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_custom.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_custom.cpp
new file mode 100644
index 0000000..5193f76
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_custom.cpp	
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#include "swt.h"
+#include "webkit_win32.h"
+#include "webkit_win32_stats.h"
+
+#define WebKit_win32_NATIVE(func) Java_org_eclipse_swt_internal_webkit_WebKit_1win32_##func
+
+#ifndef NO_willPerformClientRedirectToURL_1CALLBACK
+static jintLong willPerformClientRedirectToURL_CALLBACK;
+static HRESULT CALLBACK willPerformClientRedirectToURL(void* ppVTable, jintLong webView, BSTR url, double delaySeconds, DATE fireDate, jintLong frame)
+{
+	return ((HRESULT (CALLBACK *)(void*, jintLong, BSTR, double*, DATE*, jintLong))willPerformClientRedirectToURL_CALLBACK)(ppVTable, webView, url, &delaySeconds, &fireDate, frame);
+}
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(willPerformClientRedirectToURL_1CALLBACK) (JNIEnv *env, jclass that, jintLong func);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(willPerformClientRedirectToURL_1CALLBACK) (JNIEnv *env, jclass that, jintLong func)
+{
+	willPerformClientRedirectToURL_CALLBACK = func;
+	return (jintLong)willPerformClientRedirectToURL;
+}
+#endif
+
+#ifndef NO_JSObjectCallAsFunctionProc_1CALLBACK
+static jintLong JSObjectCallAsFunctionProc_CALLBACK;
+static JSValueRef JSObjectCallAsFunctionProc(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+	return ((JSValueRef (CALLBACK *)(JSContextRef, JSObjectRef, JSObjectRef, size_t, const JSValueRef[], JSValueRef*))JSObjectCallAsFunctionProc_CALLBACK)(ctx, function, thisObject, argumentCount, arguments, exception);
+}
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectCallAsFunctionProc_1CALLBACK) (JNIEnv *env, jclass that, jintLong func);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectCallAsFunctionProc_1CALLBACK) (JNIEnv *env, jclass that, jintLong func)
+{
+	JSObjectCallAsFunctionProc_CALLBACK = func;
+	return (jintLong)JSObjectCallAsFunctionProc;
+}
+#endif
+
+#ifndef NO_JSObjectGetPropertyProc_1CALLBACK
+static jintLong JSObjectGetPropertyProc_CALLBACK;
+static JSValueRef JSObjectGetPropertyProc(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
+{
+	return ((JSValueRef (CALLBACK *)(JSContextRef, JSObjectRef, JSStringRef, JSValueRef*))JSObjectGetPropertyProc_CALLBACK)(ctx, object, propertyName, exception);
+}
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetPropertyProc_1CALLBACK) (JNIEnv *env, jclass that, jintLong func);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectGetPropertyProc_1CALLBACK) (JNIEnv *env, jclass that, jintLong func)
+{
+	JSObjectGetPropertyProc_CALLBACK = func;
+	return (jintLong)JSObjectGetPropertyProc;
+}
+#endif
+
+#ifndef NO_JSObjectHasPropertyProc_1CALLBACK
+static jintLong JSObjectHasPropertyProc_CALLBACK;
+static bool JSObjectHasPropertyProc(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName)
+{
+	return ((bool (CALLBACK *)(JSContextRef, JSObjectRef, JSStringRef))JSObjectHasPropertyProc_CALLBACK)(ctx, object, propertyName);
+}
+extern "C" JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectHasPropertyProc_1CALLBACK) (JNIEnv *env, jclass that, jintLong func);
+JNIEXPORT jintLong JNICALL WebKit_win32_NATIVE(JSObjectHasPropertyProc_1CALLBACK) (JNIEnv *env, jclass that, jintLong func)
+{
+	JSObjectHasPropertyProc_CALLBACK = func;
+	return (jintLong)JSObjectHasPropertyProc;
+}
+#endif
+
+#ifndef NO_WebKitCreateInstance
+extern "C" JNIEXPORT jint JNICALL WebKit_win32_NATIVE(WebKitCreateInstance)(JNIEnv *env, jclass that, jbyteArray arg0, jintLong arg1, jbyteArray arg2, jintLongArray arg3);
+JNIEXPORT jint JNICALL WebKit_win32_NATIVE(WebKitCreateInstance)
+	(JNIEnv *env, jclass that, jbyteArray arg0, jintLong arg1, jbyteArray arg2, jintLongArray arg3)
+{
+	jbyte *lparg0=NULL;
+	jbyte *lparg2=NULL;
+	jintLong *lparg3=NULL;
+	jint rc = 0;
+	WebKit_win32_NATIVE_ENTER(env, that, WebKitCreateInstance_FUNC);
+	if (arg0) if ((lparg0 = env->GetByteArrayElements(arg0, NULL)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = env->GetByteArrayElements(arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = env->GetIntLongArrayElements(arg3, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)WebKitCreateInstance(lparg0, arg1, lparg2, lparg3);
+*/
+	{
+		LOAD_FUNCTION(fp, WebKitCreateInstance)
+		if (fp) {
+			rc = (jint)((jint (*)(jbyte *, jintLong, jbyte *, jintLong *))fp)(lparg0, arg1, lparg2, lparg3);
+		}
+	}
+fail:
+	if (arg3 && lparg3) env->ReleaseIntLongArrayElements(arg3, lparg3, 0);
+	if (arg2 && lparg2) env->ReleaseByteArrayElements(arg2, lparg2, 0);
+	if (arg0 && lparg0) env->ReleaseByteArrayElements(arg0, lparg0, 0);
+	WebKit_win32_NATIVE_EXIT(env, that, WebKitCreateInstance_FUNC);
+	return rc;
+}
+#endif
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_custom.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_custom.h
new file mode 100644
index 0000000..aaf00f4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_custom.h	
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/* Libraries for dynamic loaded functions */
+#define WebKitCreateInstance_LIB "webkit.dll"
+
+
+
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_stats.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_stats.cpp
new file mode 100644
index 0000000..a6fa7bc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_stats.cpp	
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#include "swt.h"
+#include "webkit_win32_stats.h"
+
+#ifdef NATIVE_STATS
+
+int WebKit_win32_nativeFunctionCount = 61;
+int WebKit_win32_nativeFunctionCallCount[61];
+char * WebKit_win32_nativeFunctionNames[] = {
+	"CFArrayGetCount",
+	"CFArrayGetValueAtIndex",
+	"CFDataCreate",
+	"CFDataGetBytePtr",
+	"CFDataGetLength",
+	"CFDictionaryCreate",
+	"CFHTTPCookieCreateWithResponseHeaderFields",
+	"CFHTTPCookieGetFlags",
+	"CFHTTPCookieGetName",
+	"CFHTTPCookieGetValue",
+	"CFHTTPCookieStorageCopyCookies",
+	"CFHTTPCookieStorageCopyCookiesForURL",
+	"CFHTTPCookieStorageDeleteCookie",
+	"CFHTTPCookieStorageSetCookie",
+	"CFRelease",
+	"CFStringCreateWithCharacters",
+	"CFStringGetCharacterAtIndex",
+	"CFStringGetCharactersPtr",
+	"CFStringGetLength",
+	"CFURLCreateWithString",
+	"CFURLRequestCopyHTTPRequestBody",
+	"CFURLRequestCreateMutableCopy",
+	"CFURLRequestSetHTTPRequestBody",
+	"CFURLRequestSetURL",
+	"JSClassCreate",
+	"JSClassDefinition_1sizeof",
+	"JSClassRetain",
+	"JSContextGetGlobalObject",
+	"JSEvaluateScript",
+	"JSGlobalContextRetain",
+	"JSObjectCallAsFunctionProc_1CALLBACK",
+	"JSObjectGetPrivate",
+	"JSObjectGetProperty",
+	"JSObjectGetPropertyAtIndex",
+	"JSObjectGetPropertyProc_1CALLBACK",
+	"JSObjectHasPropertyProc_1CALLBACK",
+	"JSObjectMake",
+	"JSObjectMakeArray",
+	"JSObjectMakeFunctionWithCallback",
+	"JSObjectSetProperty",
+	"JSStringCreateWithUTF8CString",
+	"JSStringGetLength",
+	"JSStringGetMaximumUTF8CStringSize",
+	"JSStringGetUTF8CString",
+	"JSStringIsEqualToUTF8CString",
+	"JSStringRelease",
+	"JSValueGetType",
+	"JSValueIsObjectOfClass",
+	"JSValueMakeBoolean",
+	"JSValueMakeNull",
+	"JSValueMakeNumber",
+	"JSValueMakeString",
+	"JSValueMakeUndefined",
+	"JSValueToBoolean",
+	"JSValueToNumber",
+	"JSValueToStringCopy",
+	"WebKitCreateInstance",
+	"kCFCopyStringDictionaryKeyCallBacks",
+	"kCFTypeDictionaryValueCallBacks",
+	"memmove",
+	"willPerformClientRedirectToURL_1CALLBACK",
+};
+
+#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+
+JNIEXPORT jint JNICALL STATS_NATIVE(WebKit_1win32_1GetFunctionCount)
+	(JNIEnv *env, jclass that)
+{
+	return WebKit_win32_nativeFunctionCount;
+}
+
+JNIEXPORT jstring JNICALL STATS_NATIVE(WebKit_1win32_1GetFunctionName)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return env->NewStringUTF(WebKit_win32_nativeFunctionNames[index]);
+}
+
+JNIEXPORT jint JNICALL STATS_NATIVE(WebKit_1win32_1GetFunctionCallCount)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return WebKit_win32_nativeFunctionCallCount[index];
+}
+
+#endif
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_stats.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_stats.h
new file mode 100644
index 0000000..cbf2c86
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_stats.h	
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#ifdef NATIVE_STATS
+extern int WebKit_win32_nativeFunctionCount;
+extern int WebKit_win32_nativeFunctionCallCount[];
+extern char* WebKit_win32_nativeFunctionNames[];
+#define WebKit_win32_NATIVE_ENTER(env, that, func) WebKit_win32_nativeFunctionCallCount[func]++;
+#define WebKit_win32_NATIVE_EXIT(env, that, func) 
+#else
+#ifndef WebKit_win32_NATIVE_ENTER
+#define WebKit_win32_NATIVE_ENTER(env, that, func) 
+#endif
+#ifndef WebKit_win32_NATIVE_EXIT
+#define WebKit_win32_NATIVE_EXIT(env, that, func) 
+#endif
+#endif
+
+typedef enum {
+	CFArrayGetCount_FUNC,
+	CFArrayGetValueAtIndex_FUNC,
+	CFDataCreate_FUNC,
+	CFDataGetBytePtr_FUNC,
+	CFDataGetLength_FUNC,
+	CFDictionaryCreate_FUNC,
+	CFHTTPCookieCreateWithResponseHeaderFields_FUNC,
+	CFHTTPCookieGetFlags_FUNC,
+	CFHTTPCookieGetName_FUNC,
+	CFHTTPCookieGetValue_FUNC,
+	CFHTTPCookieStorageCopyCookies_FUNC,
+	CFHTTPCookieStorageCopyCookiesForURL_FUNC,
+	CFHTTPCookieStorageDeleteCookie_FUNC,
+	CFHTTPCookieStorageSetCookie_FUNC,
+	CFRelease_FUNC,
+	CFStringCreateWithCharacters_FUNC,
+	CFStringGetCharacterAtIndex_FUNC,
+	CFStringGetCharactersPtr_FUNC,
+	CFStringGetLength_FUNC,
+	CFURLCreateWithString_FUNC,
+	CFURLRequestCopyHTTPRequestBody_FUNC,
+	CFURLRequestCreateMutableCopy_FUNC,
+	CFURLRequestSetHTTPRequestBody_FUNC,
+	CFURLRequestSetURL_FUNC,
+	JSClassCreate_FUNC,
+	JSClassDefinition_1sizeof_FUNC,
+	JSClassRetain_FUNC,
+	JSContextGetGlobalObject_FUNC,
+	JSEvaluateScript_FUNC,
+	JSGlobalContextRetain_FUNC,
+	JSObjectCallAsFunctionProc_1CALLBACK_FUNC,
+	JSObjectGetPrivate_FUNC,
+	JSObjectGetProperty_FUNC,
+	JSObjectGetPropertyAtIndex_FUNC,
+	JSObjectGetPropertyProc_1CALLBACK_FUNC,
+	JSObjectHasPropertyProc_1CALLBACK_FUNC,
+	JSObjectMake_FUNC,
+	JSObjectMakeArray_FUNC,
+	JSObjectMakeFunctionWithCallback_FUNC,
+	JSObjectSetProperty_FUNC,
+	JSStringCreateWithUTF8CString_FUNC,
+	JSStringGetLength_FUNC,
+	JSStringGetMaximumUTF8CStringSize_FUNC,
+	JSStringGetUTF8CString_FUNC,
+	JSStringIsEqualToUTF8CString_FUNC,
+	JSStringRelease_FUNC,
+	JSValueGetType_FUNC,
+	JSValueIsObjectOfClass_FUNC,
+	JSValueMakeBoolean_FUNC,
+	JSValueMakeNull_FUNC,
+	JSValueMakeNumber_FUNC,
+	JSValueMakeString_FUNC,
+	JSValueMakeUndefined_FUNC,
+	JSValueToBoolean_FUNC,
+	JSValueToNumber_FUNC,
+	JSValueToStringCopy_FUNC,
+	WebKitCreateInstance_FUNC,
+	kCFCopyStringDictionaryKeyCallBacks_FUNC,
+	kCFTypeDictionaryValueCallBacks_FUNC,
+	memmove_FUNC,
+	willPerformClientRedirectToURL_1CALLBACK_FUNC,
+} WebKit_win32_FUNCS;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_structs.cpp b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_structs.cpp
new file mode 100644
index 0000000..021a6f9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_structs.cpp	
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#include "swt.h"
+#include "webkit_win32_structs.h"
+
+#ifndef NO_JSClassDefinition
+typedef struct JSClassDefinition_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID version, attributes, className, parentClass, staticValues, staticFunctions, initialize, finalize, hasProperty, getProperty, setProperty, deleteProperty, getPropertyNames, callAsFunction, callAsConstructor, hasInstance, convertToType;
+} JSClassDefinition_FID_CACHE;
+
+JSClassDefinition_FID_CACHE JSClassDefinitionFc;
+
+void cacheJSClassDefinitionFields(JNIEnv *env, jobject lpObject)
+{
+	if (JSClassDefinitionFc.cached) return;
+	JSClassDefinitionFc.clazz = env->GetObjectClass(lpObject);
+	JSClassDefinitionFc.version = env->GetFieldID(JSClassDefinitionFc.clazz, "version", "I");
+	JSClassDefinitionFc.attributes = env->GetFieldID(JSClassDefinitionFc.clazz, "attributes", "I");
+	JSClassDefinitionFc.className = env->GetFieldID(JSClassDefinitionFc.clazz, "className", I_J);
+	JSClassDefinitionFc.parentClass = env->GetFieldID(JSClassDefinitionFc.clazz, "parentClass", I_J);
+	JSClassDefinitionFc.staticValues = env->GetFieldID(JSClassDefinitionFc.clazz, "staticValues", I_J);
+	JSClassDefinitionFc.staticFunctions = env->GetFieldID(JSClassDefinitionFc.clazz, "staticFunctions", I_J);
+	JSClassDefinitionFc.initialize = env->GetFieldID(JSClassDefinitionFc.clazz, "initialize", I_J);
+	JSClassDefinitionFc.finalize = env->GetFieldID(JSClassDefinitionFc.clazz, "finalize", I_J);
+	JSClassDefinitionFc.hasProperty = env->GetFieldID(JSClassDefinitionFc.clazz, "hasProperty", I_J);
+	JSClassDefinitionFc.getProperty = env->GetFieldID(JSClassDefinitionFc.clazz, "getProperty", I_J);
+	JSClassDefinitionFc.setProperty = env->GetFieldID(JSClassDefinitionFc.clazz, "setProperty", I_J);
+	JSClassDefinitionFc.deleteProperty = env->GetFieldID(JSClassDefinitionFc.clazz, "deleteProperty", I_J);
+	JSClassDefinitionFc.getPropertyNames = env->GetFieldID(JSClassDefinitionFc.clazz, "getPropertyNames", I_J);
+	JSClassDefinitionFc.callAsFunction = env->GetFieldID(JSClassDefinitionFc.clazz, "callAsFunction", I_J);
+	JSClassDefinitionFc.callAsConstructor = env->GetFieldID(JSClassDefinitionFc.clazz, "callAsConstructor", I_J);
+	JSClassDefinitionFc.hasInstance = env->GetFieldID(JSClassDefinitionFc.clazz, "hasInstance", I_J);
+	JSClassDefinitionFc.convertToType = env->GetFieldID(JSClassDefinitionFc.clazz, "convertToType", I_J);
+	JSClassDefinitionFc.cached = 1;
+}
+
+JSClassDefinition *getJSClassDefinitionFields(JNIEnv *env, jobject lpObject, JSClassDefinition *lpStruct)
+{
+	if (!JSClassDefinitionFc.cached) cacheJSClassDefinitionFields(env, lpObject);
+	lpStruct->version = env->GetIntField(lpObject, JSClassDefinitionFc.version);
+	lpStruct->attributes = (JSClassAttributes)env->GetIntField(lpObject, JSClassDefinitionFc.attributes);
+	lpStruct->className = (const char*)env->GetIntLongField(lpObject, JSClassDefinitionFc.className);
+	lpStruct->parentClass = (JSClassRef)env->GetIntLongField(lpObject, JSClassDefinitionFc.parentClass);
+	lpStruct->staticValues = (const JSStaticValue*)env->GetIntLongField(lpObject, JSClassDefinitionFc.staticValues);
+	lpStruct->staticFunctions = (const JSStaticFunction*)env->GetIntLongField(lpObject, JSClassDefinitionFc.staticFunctions);
+	lpStruct->initialize = (JSObjectInitializeCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.initialize);
+	lpStruct->finalize = (JSObjectFinalizeCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.finalize);
+	lpStruct->hasProperty = (JSObjectHasPropertyCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.hasProperty);
+	lpStruct->getProperty = (JSObjectGetPropertyCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.getProperty);
+	lpStruct->setProperty = (JSObjectSetPropertyCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.setProperty);
+	lpStruct->deleteProperty = (JSObjectDeletePropertyCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.deleteProperty);
+	lpStruct->getPropertyNames = (JSObjectGetPropertyNamesCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.getPropertyNames);
+	lpStruct->callAsFunction = (JSObjectCallAsFunctionCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.callAsFunction);
+	lpStruct->callAsConstructor = (JSObjectCallAsConstructorCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.callAsConstructor);
+	lpStruct->hasInstance = (JSObjectHasInstanceCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.hasInstance);
+	lpStruct->convertToType = (JSObjectConvertToTypeCallback)env->GetIntLongField(lpObject, JSClassDefinitionFc.convertToType);
+	return lpStruct;
+}
+
+void setJSClassDefinitionFields(JNIEnv *env, jobject lpObject, JSClassDefinition *lpStruct)
+{
+	if (!JSClassDefinitionFc.cached) cacheJSClassDefinitionFields(env, lpObject);
+	env->SetIntField(lpObject, JSClassDefinitionFc.version, (jint)lpStruct->version);
+	env->SetIntField(lpObject, JSClassDefinitionFc.attributes, (jint)lpStruct->attributes);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.className, (jintLong)lpStruct->className);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.parentClass, (jintLong)lpStruct->parentClass);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.staticValues, (jintLong)lpStruct->staticValues);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.staticFunctions, (jintLong)lpStruct->staticFunctions);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.initialize, (jintLong)lpStruct->initialize);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.finalize, (jintLong)lpStruct->finalize);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.hasProperty, (jintLong)lpStruct->hasProperty);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.getProperty, (jintLong)lpStruct->getProperty);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.setProperty, (jintLong)lpStruct->setProperty);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.deleteProperty, (jintLong)lpStruct->deleteProperty);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.getPropertyNames, (jintLong)lpStruct->getPropertyNames);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.callAsFunction, (jintLong)lpStruct->callAsFunction);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.callAsConstructor, (jintLong)lpStruct->callAsConstructor);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.hasInstance, (jintLong)lpStruct->hasInstance);
+	env->SetIntLongField(lpObject, JSClassDefinitionFc.convertToType, (jintLong)lpStruct->convertToType);
+}
+#endif
+
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_structs.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_structs.h
new file mode 100644
index 0000000..5a98f5c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/library/webkit_win32_structs.h	
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+#include "webkit_win32.h"
+
+#ifndef NO_JSClassDefinition
+void cacheJSClassDefinitionFields(JNIEnv *env, jobject lpObject);
+JSClassDefinition *getJSClassDefinitionFields(JNIEnv *env, jobject lpObject, JSClassDefinition *lpStruct);
+void setJSClassDefinitionFields(JNIEnv *env, jobject lpObject, JSClassDefinition *lpStruct);
+#define JSClassDefinition_sizeof() sizeof(JSClassDefinition)
+#else
+#define cacheJSClassDefinitionFields(a,b)
+#define getJSClassDefinitionFields(a,b,c) NULL
+#define setJSClassDefinitionFields(a,b,c)
+#define JSClassDefinition_sizeof() 0
+#endif
+
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebDownloadDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebDownloadDelegate.java
new file mode 100644
index 0000000..56dba1e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebDownloadDelegate.java	
@@ -0,0 +1,249 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+
+import java.io.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.webkit.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class WebDownloadDelegate {
+	COMObject iWebDownloadDelegate;
+
+	Browser browser;
+	int refCount = 0;
+	int status = -1;
+	long size, totalSize;
+	String url;
+
+	static final int DOWNLOAD_FINISHED = 0;
+	static final int DOWNLOAD_CANCELLED = 1;
+	static final int DOWNLOAD_ERROR = 3;
+
+WebDownloadDelegate (Browser browser) {
+	createCOMInterfaces ();
+	this.browser = browser;
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	iWebDownloadDelegate = new COMObject (new int[] {2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return decideDestinationWithSuggestedFilename (args[0], args[1]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method5 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method6 (int /*long*/[] args) {return didFailWithError (args[0], args[1]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method8 (int /*long*/[] args) {return didReceiveDataOfLength (args[0], (int)/*64*/args[1]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return didReceiveResponse (args[0], args[1]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method11 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method12 (int /*long*/[] args) {return willSendRequest (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return didBegin (args[0]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return didFinish (args[0]);}
+	};
+}
+
+int decideDestinationWithSuggestedFilename (int /*long*/ download, int /*long*/ filename) {
+	String name = WebKit.extractBSTR (filename);
+	FileDialog dialog = new FileDialog (browser.getShell(), SWT.SAVE);
+	dialog.setText (SWT.getMessage ("SWT_FileDownload")); //$NON-NLS-1$
+	dialog.setFileName (name);
+	dialog.setOverwrite (true);
+	String path = dialog.open ();
+	IWebDownload iwebdownload = new IWebDownload (download);
+	iwebdownload.setDeletesFileUponFailure (0);
+	if (path == null) {
+		/*
+		* Bug in WebKit.  Failure to set a non-null destination on the IWebDownload results in
+		* a crash, even when the download is being cancelled.
+		*/
+		iwebdownload.setDestination (WebKit.createBSTR (""), 1); //$NON-NLS-1$
+		iwebdownload.cancel();
+		iwebdownload.Release();
+	} else {
+		File file = new File (path);
+		if (file.exists ()) file.delete ();
+		iwebdownload.setDestination (WebKit.createBSTR (path), 1);
+		openDownloadWindow (iwebdownload, path);
+	}
+	return COM.S_OK;
+}
+
+int didBegin (int /*long*/ download) {
+	new IWebDownload (download).AddRef ();
+	status = -1;
+	size = 0;
+	totalSize = 0;
+	url = null;
+	return COM.S_OK;
+}
+
+int didFailWithError (int /*long*/ download, int /*long*/ error) {
+	new IWebDownload (download).Release ();
+	status = DOWNLOAD_ERROR;
+	return COM.S_OK;
+}
+
+int didFinish (int /*long*/ download) {
+	new IWebDownload (download).Release ();
+	status = DOWNLOAD_FINISHED;
+	return COM.S_OK;
+}
+
+int didReceiveDataOfLength (int /*long*/ download, int length) {
+	 size += length;
+	 return COM.S_OK;
+}
+
+int didReceiveResponse (int /*long*/ download, int /*long*/ response) {
+	if (response != 0) {
+		IWebURLResponse urlResponse = new IWebURLResponse (response);
+		long[] size = new long[1];
+		int hr = urlResponse.expectedContentLength (size);
+		if (hr == COM.S_OK) totalSize = size[0];
+		int /*long*/[] result = new int /*long*/[1];
+		hr = urlResponse.URL (result);
+		if (hr == COM.S_OK && result[0] != 0) {
+			url = WebKit.extractBSTR (result[0]);
+			COM.SysFreeString (result[0]);
+		}
+	}
+	return COM.S_OK;
+}
+
+void disposeCOMInterfaces () {
+	if (iWebDownloadDelegate != null) {
+		iWebDownloadDelegate.dispose ();
+		iWebDownloadDelegate = null;
+	}	
+}
+
+int /*long*/ getAddress () {
+	return iWebDownloadDelegate.getAddress ();
+}
+
+void openDownloadWindow (final IWebDownload download, String name) {
+	final Shell shell = new Shell ();
+	shell.setText (Compatibility.getMessage ("SWT_FileDownload"));	//$NON-NLS-1$
+	GridLayout gridLayout = new GridLayout ();
+	gridLayout.marginHeight = 15;
+	gridLayout.marginWidth = 15;
+	gridLayout.verticalSpacing = 20;
+	shell.setLayout (gridLayout);
+
+	Label nameLabel = new Label (shell, SWT.WRAP);
+	nameLabel.setText (Compatibility.getMessage ("SWT_Download_Location", new Object[] {name, url})); //$NON-NLS-1$
+	GridData data = new GridData ();
+	Monitor monitor = browser.getMonitor ();
+	int maxWidth = monitor.getBounds ().width / 2;
+	int width = nameLabel.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	data.widthHint = Math.min (width, maxWidth);
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	nameLabel.setLayoutData (data);
+
+	final Label statusLabel = new Label (shell, SWT.NONE);
+	statusLabel.setText (Compatibility.getMessage ("SWT_Download_Started")); //$NON-NLS-1$
+	data = new GridData (GridData.FILL_BOTH);
+	statusLabel.setLayoutData (data);
+
+	final Button cancel = new Button (shell, SWT.PUSH);
+	cancel.setText (Compatibility.getMessage ("SWT_Cancel")); //$NON-NLS-1$
+	data = new GridData ();
+	data.horizontalAlignment = GridData.CENTER;
+	cancel.setLayoutData (data);
+	final Listener cancelListener = new Listener () {
+		public void handleEvent (Event event) {
+			download.cancel ();
+			status = DOWNLOAD_CANCELLED;
+			download.Release ();
+		}
+	};
+	cancel.addListener (SWT.Selection, cancelListener);
+
+	final Display display = browser.getDisplay ();
+	final int INTERVAL = 500;
+	display.timerExec (INTERVAL, new Runnable () {
+		public void run () {
+			if (shell.isDisposed () || status == DOWNLOAD_FINISHED || status == DOWNLOAD_CANCELLED) {
+				shell.dispose ();
+				return;
+			}
+			if (status == DOWNLOAD_ERROR) {
+				statusLabel.setText (Compatibility.getMessage ("SWT_Download_Error")); //$NON-NLS-1$
+				cancel.removeListener (SWT.Selection, cancelListener);
+				cancel.addListener (SWT.Selection, new Listener () {
+					public void handleEvent (Event event) {
+						shell.dispose ();
+					}
+				});
+				return;
+			}
+			long current = size / 1024L;
+			long total = totalSize / 1024L;
+			String message = Compatibility.getMessage ("SWT_Download_Status", new Object[] {new Long(current), new Long(total)}); //$NON-NLS-1$
+			statusLabel.setText (message);
+			display.timerExec (INTERVAL, this);
+		}
+	});
+	shell.pack ();
+	shell.open ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
+	GUID guid = new GUID ();
+	COM.MoveMemory (guid, riid, GUID.sizeof);
+
+	if (COM.IsEqualGUID (guid, COM.IIDIUnknown)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebDownloadDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebDownloadDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+	if (COM.IsEqualGUID (guid, WebKit_win32.IID_IWebDownloadDelegate)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebDownloadDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebDownloadDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+
+	COM.MoveMemory (ppvObject, new int /*long*/[] {0}, OS.PTR_SIZEOF);
+	return COM.E_NOINTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) {
+		disposeCOMInterfaces ();
+	}
+	return refCount;
+}
+
+int willSendRequest (int /*long*/ download, int /*long*/ request, int /*long*/ redirectResponse, int /*long*/ finalRequest) {
+	IWebMutableURLRequest req = new IWebMutableURLRequest (request);
+	req.AddRef ();
+	OS.MoveMemory (finalRequest, new int /*long*/[] {request}, C.PTR_SIZEOF);
+	return COM.S_OK;
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebFrameLoadDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebFrameLoadDelegate.java
new file mode 100644
index 0000000..6cd2e56
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebFrameLoadDelegate.java	
@@ -0,0 +1,751 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.webkit.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class WebFrameLoadDelegate {
+	COMObject iWebFrameLoadDelegate;
+	int refCount = 0;
+
+	Browser browser;
+	String html;
+	String url;
+
+	static final String OBJECTNAME_EXTERNAL = "external"; //$NON-NLS-1$
+
+WebFrameLoadDelegate (Browser browser) {
+	createCOMInterfaces ();
+	this.browser = browser;
+}
+
+void addEventHandlers (boolean top) {
+	if (top) {
+		StringBuffer buffer = new StringBuffer ("window.SWTkeyhandler = function SWTkeyhandler(e) {"); //$NON-NLS-1$
+		buffer.append ("try {e.returnValue = HandleWebKitEvent(e.type, e.keyCode, e.charCode, e.altKey, e.ctrlKey, e.shiftKey, e.metaKey);} catch (e) {}};"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('keydown', SWTkeyhandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('keypress', SWTkeyhandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('keyup', SWTkeyhandler, true);"); //$NON-NLS-1$
+		browser.execute (buffer.toString ());
+
+		buffer = new StringBuffer ("window.SWTmousehandler = function SWTmousehandler(e) {"); //$NON-NLS-1$
+		buffer.append ("try {e.returnValue = HandleWebKitEvent(e.type, e.screenX, e.screenY, e.detail, e.button + 1, e.altKey, e.ctrlKey, e.shiftKey, e.metaKey, e.relatedTarget != null);} catch (e) {}};"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('mousedown', SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('mouseup', SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('mousemove', SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('mousewheel', SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('dragstart', SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('mouseover', SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("document.addEventListener('mouseout', SWTmousehandler, true);"); //$NON-NLS-1$
+
+		browser.execute (buffer.toString ());
+	} else {
+		StringBuffer buffer = new StringBuffer ("for (var i = 0; i < frames.length; i++) {"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('keydown', window.SWTkeyhandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('keypress', window.SWTkeyhandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('keyup', window.SWTkeyhandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('mousedown', window.SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('mouseup', window.SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('mousemove', window.SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('mouseover', window.SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('mouseout', window.SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('mousewheel', window.SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ("frames[i].document.addEventListener('dragstart', window.SWTmousehandler, true);"); //$NON-NLS-1$
+		buffer.append ('}');
+		browser.execute (buffer.toString ());
+	}
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	iWebFrameLoadDelegate = new COMObject (new int[] {2, 0, 0, 2, 2, 3, 2, 3, 3, 2, 3, 2, 5, 2, 2, 3, 4}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return didStartProvisionalLoadForFrame (args[0], args[1]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method5 (int /*long*/[] args) {return didFailProvisionalLoadWithError (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return didCommitLoadForFrame (args[0], args[1]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return didReceiveTitle (args[0], args[1], args[2]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method9 (int /*long*/[] args) {return didFinishLoadForFrame (args[0], args[1]);}
+		public int /*long*/ method10 (int /*long*/[] args){return COM.E_NOTIMPL;}
+		public int /*long*/ method11 (int /*long*/[] args){return didChangeLocationWithinPageForFrame (args[0], args[1]);}
+		public int /*long*/ method12 (int /*long*/[] args){return COM.S_OK;}
+		public int /*long*/ method13 (int /*long*/[] args){return COM.E_NOTIMPL;}
+		public int /*long*/ method14 (int /*long*/[] args){return COM.S_OK;}
+		public int /*long*/ method15 (int /*long*/[] args){return COM.S_OK;}
+		public int /*long*/ method16 (int /*long*/[] args){return didClearWindowObject (args[0], args[1], args[2], args[3]);}
+	};
+
+	/* Callbacks that take double parameters require custom callbacks that instead pass pointers to the doubles. */
+	int /*long*/ ppVtable = iWebFrameLoadDelegate.ppVtable;
+	int /*long*/[] pVtable = new int /*long*/[1];
+	COM.MoveMemory (pVtable, ppVtable, OS.PTR_SIZEOF);
+	int /*long*/[] funcs = new int /*long*/[17];
+	COM.MoveMemory (funcs, pVtable[0], OS.PTR_SIZEOF * funcs.length);
+	funcs[12] = WebKit_win32.willPerformClientRedirectToURL_CALLBACK (funcs[12]);
+	COM.MoveMemory (pVtable[0], funcs, OS.PTR_SIZEOF * funcs.length);
+}
+
+int didChangeLocationWithinPageForFrame (int /*long*/ webView, int /*long*/ frame) {
+	IWebFrame iwebframe = new IWebFrame (frame);
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = iwebframe.dataSource (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	IWebDataSource dataSource = new IWebDataSource (result[0]);
+	result[0] = 0;
+	hr = dataSource.request (result);
+	dataSource.Release ();
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	IWebURLRequest request = new IWebURLRequest (result[0]);
+	result[0] = 0;
+	hr = request.URL (result);
+	request.Release ();
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	String url2 = WebKit.extractBSTR (result[0]);
+	COM.SysFreeString (result[0]);
+	if (url2.length() == 0) return COM.S_OK;
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (WebKit.URI_FILEROOT)) {
+		url2 = WebKit.ABOUT_BLANK;
+	} else {
+		int length = WebKit.URI_FILEROOT.length ();
+		if (url2.startsWith (WebKit.URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = WebKit.ABOUT_BLANK + url2.substring (length);
+		}
+	}
+	final Display display = browser.getDisplay ();
+	result[0] = 0;
+	IWebView iWebView = new IWebView (webView);
+	hr = iWebView.mainFrame (result);
+	boolean top = false;
+	if (hr == COM.S_OK && result[0] != 0) {
+		top = frame == result[0];
+		new IWebFrame (result[0]).Release ();
+	}
+	if (top) {
+		StatusTextEvent statusText = new StatusTextEvent (browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		StatusTextListener[] statusTextListeners = browser.webBrowser.statusTextListeners;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed (statusText);
+		}
+	}
+
+	LocationEvent location = new LocationEvent (browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	LocationListener[] locationListeners = browser.webBrowser.locationListeners;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed (location);
+	}
+	return COM.S_OK;
+}
+
+int didClearWindowObject (int /*long*/ webView, int /*long*/ context, int /*long*/ windowScriptObject, int /*long*/ frame) {
+	WebKit_win32.JSGlobalContextRetain (context);
+	int /*long*/ globalObject = WebKit_win32.JSContextGetGlobalObject (context);
+	int /*long*/ privateData = ((WebKit)browser.webBrowser).webViewData;
+	int /*long*/ externalObject = WebKit_win32.JSObjectMake (context, WebKit.ExternalClass, privateData);
+	byte[] bytes = null;
+	try {
+		bytes = (OBJECTNAME_EXTERNAL + '\0').getBytes (WebKit.CHARSET_UTF8);
+	} catch (UnsupportedEncodingException e) {
+		bytes = (OBJECTNAME_EXTERNAL + '\0').getBytes ();
+	} 
+	int /*long*/ name = WebKit_win32.JSStringCreateWithUTF8CString (bytes);
+	WebKit_win32.JSObjectSetProperty (context, globalObject, name, externalObject, 0, null);
+	WebKit_win32.JSStringRelease (name);
+
+	Enumeration elements = browser.webBrowser.functions.elements ();
+	while (elements.hasMoreElements ()) {
+		BrowserFunction current = (BrowserFunction)elements.nextElement ();
+		browser.execute (current.functionString);
+	}
+
+	IWebView iwebView = new IWebView (webView);
+	int /*long*/[] mainFrame = new int /*long*/[1];
+	iwebView.mainFrame (mainFrame);
+	boolean top = mainFrame[0] == frame;
+	new IWebFrame (mainFrame[0]).Release ();
+	addEventHandlers (top);
+	return COM.S_OK;
+}
+
+int didCommitLoadForFrame (int /*long*/ webview, int /*long*/ frame) {
+	IWebFrame iWebFrame = new IWebFrame (frame);
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = iWebFrame.dataSource (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+    }
+	IWebDataSource dataSource = new IWebDataSource (result[0]);
+	result[0] = 0;
+	hr = dataSource.request (result);
+	dataSource.Release ();
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	IWebMutableURLRequest request = new IWebMutableURLRequest (result[0]);
+	result[0] = 0;
+	hr = request.URL (result);
+	request.Release ();
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	String url2 = WebKit.extractBSTR (result[0]);
+	COM.SysFreeString (result[0]);
+	if (url2.length () == 0) return COM.S_OK;
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (WebKit.URI_FILEROOT)) {
+		url2 = WebKit.ABOUT_BLANK;
+	} else {
+		int length = WebKit.URI_FILEROOT.length ();
+		if (url2.startsWith (WebKit.URI_FILEROOT) && url2.charAt (length) == '#') {
+			url2 = WebKit.ABOUT_BLANK + url2.substring (length);
+		}
+	}
+	Display display = browser.getDisplay ();
+	result[0] = 0;
+	IWebView iwebView = new IWebView (webview);
+	hr = iwebView.mainFrame (result);
+	boolean top = false;
+	if (hr == COM.S_OK && result[0] != 0) {
+		top = frame == result[0];
+		new IWebFrame (result[0]).Release ();
+	}
+	if (top) {
+		/* reset resource status variables */
+		this.url = url2;
+
+		/*
+		* Each invocation of setText() causes webView_didCommitLoadForFrame to be invoked
+		* twice, once for the initial navigate to about:blank, and once for the auto-navigate
+		* to about:blank that WebKit does when loadHTMLString is invoked.  If this is the
+		* first webView_didCommitLoadForFrame callback received for a setText() invocation
+		* then do not send any events or re-install registered BrowserFunctions. 
+		*/
+		if (url2.startsWith (WebKit.ABOUT_BLANK) && html != null) return COM.S_OK;
+
+		/* re-install registered functions */
+		Enumeration elements = browser.webBrowser.functions.elements ();
+		while (elements.hasMoreElements ()) {
+			BrowserFunction function = (BrowserFunction)elements.nextElement ();
+			browser.webBrowser.execute (function.functionString);
+		}
+
+		ProgressEvent progress = new ProgressEvent (browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = 1;
+		progress.total = WebKit.MAX_PROGRESS;
+		ProgressListener[] progressListeners = browser.webBrowser.progressListeners;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].changed (progress);
+		}
+		if (browser.isDisposed ()) return COM.S_OK;
+
+		StatusTextEvent statusText = new StatusTextEvent (browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		StatusTextListener[] statusTextListeners = browser.webBrowser.statusTextListeners;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed (statusText);
+		}
+		if (browser.isDisposed ()) return COM.S_OK;
+	}
+	LocationEvent location = new LocationEvent (browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	LocationListener[] locationListeners = browser.webBrowser.locationListeners;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed (location);
+	}
+	return COM.S_OK;
+}
+
+int didFailProvisionalLoadWithError (int /*long*/ webView, int /*long*/ error, int /*long*/ frame) {
+	IWebError iweberror = new IWebError (error);
+	int[] errorCode = new int[1];
+	int hr = iweberror.code (errorCode);
+	if (WebKit_win32.WebURLErrorBadURL < errorCode[0]) return COM.S_OK;
+
+	String failingURLString = null;
+	int /*long*/[] failingURL = new int /*long*/[1];
+	hr = iweberror.failingURL (failingURL);
+	if (hr == COM.S_OK && failingURL[0] != 0) {
+		failingURLString = WebKit.extractBSTR (failingURL[0]);
+		COM.SysFreeString (failingURL[0]);
+	}
+	if (failingURLString != null && WebKit_win32.WebURLErrorServerCertificateNotYetValid <= errorCode[0] && errorCode[0] <= WebKit_win32.WebURLErrorSecureConnectionFailed) {
+		/* handle invalid certificate error */
+		int /*long*/[] result = new int /*long*/[1];
+		hr = iweberror.localizedDescription (result);
+		if (hr != COM.S_OK || result[0] == 0) {
+			return COM.S_OK;
+		}
+		String description = WebKit.extractBSTR (result[0]);
+		COM.SysFreeString (result[0]);
+
+		result[0] = 0;
+		hr = iweberror.QueryInterface (WebKit_win32.IID_IWebErrorPrivate, result);
+		if (hr != COM.S_OK || result[0] == 0) {
+			return COM.S_OK;
+		}
+
+		IWebErrorPrivate webErrorPrivate = new IWebErrorPrivate (result[0]);
+		result[0] = 0;
+		int /*long*/[] certificate = new int /*long*/[1];
+		hr = webErrorPrivate.sslPeerCertificate (certificate);
+		webErrorPrivate.Release ();
+		if (hr != COM.S_OK || certificate[0] == 0) {
+			return COM.S_OK;
+		}
+		if (showCertificateDialog (webView, failingURLString, description, certificate[0])) {
+			IWebFrame iWebFrame = new IWebFrame (frame);
+			hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebMutableURLRequest, 0, WebKit_win32.IID_IWebMutableURLRequest, result);
+			if (hr != COM.S_OK || result[0] == 0) {
+				certificate[0] = 0;
+				return COM.S_OK;
+			}
+			IWebMutableURLRequest request = new IWebMutableURLRequest (result[0]);
+			request.setURL (failingURL[0]);
+			request.setAllowsAnyHTTPSCertificate ();
+			iWebFrame.loadRequest (request.getAddress ());
+			request.Release ();
+		}
+		certificate[0] = 0;
+		return COM.S_OK;
+	}
+
+	/* handle other types of errors */
+	int /*long*/[] result = new int /*long*/[1];
+	hr = iweberror.localizedDescription (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	String description = WebKit.extractBSTR (result[0]);
+	COM.SysFreeString (result[0]);
+	if (!browser.isDisposed ()) {
+		String message = failingURLString != null ? failingURLString + "\n\n" : ""; //$NON-NLS-1$ //$NON-NLS-2$
+		message += Compatibility.getMessage ("SWT_Page_Load_Failed", new Object[] {description}); //$NON-NLS-1$
+		MessageBox messageBox = new MessageBox (browser.getShell (), SWT.OK | SWT.ICON_ERROR);
+		messageBox.setMessage (message);
+		messageBox.open ();
+	}
+	return COM.S_OK;
+}
+
+int didFinishLoadForFrame (int /*long*/ webview, int /*long*/ frame) {
+	IWebView iWebView = new IWebView (webview);
+	int /*long*/[] iWebFrame = new int /*long*/[1];
+	int hr = iWebView.mainFrame (iWebFrame);
+	if (hr != COM.S_OK || iWebFrame[0] == 0) {
+		return COM.S_OK;
+	}
+	boolean top = frame == iWebFrame[0];
+	new IWebFrame (iWebFrame[0]).Release();
+	if (!top) return COM.S_OK;
+
+	/*
+	 * If html is not null then there is html from a previous setText() call
+	 * waiting to be set into the about:blank page once it has completed loading. 
+	 */
+	if (html != null) {
+		if (getUrl ().startsWith (WebKit.ABOUT_BLANK)) {
+			((WebKit)browser.webBrowser).loadingText = true;
+			int /*long*/ string = WebKit.createBSTR (html);
+			int /*long*/ URLString;
+			if (((WebKit)browser.webBrowser).untrustedText) {
+				URLString = WebKit.createBSTR (WebKit.ABOUT_BLANK);
+			} else {
+				URLString = WebKit.createBSTR (WebKit.URI_FILEROOT);
+			}
+			IWebFrame mainFrame = new IWebFrame (frame);
+			mainFrame.loadHTMLString (string, URLString);
+			html = null;
+		}
+	}
+
+	/*
+	* The loadHTMLString() invocation above will trigger a second didFinishLoadForFrame
+	* callback when it is completed.  If text was just set into the browser then wait for this
+	* second callback to come before sending the title or completed events.
+	*/
+	if (!((WebKit)browser.webBrowser).loadingText) {
+		if (browser.isDisposed ()) return COM.S_OK;
+		/*
+		* To be consistent with other platforms a title event should be fired when a
+		* page has completed loading.  A page with a <title> tag will do this
+		* automatically when the didReceiveTitle callback is received.  However a page
+		* without a <title> tag will not do this by default, so fire the event
+		* here with the page's url as the title.
+		*/
+		Display display = browser.getDisplay ();
+		IWebFrame mainFrame = new IWebFrame (frame);
+		int /*long*/[] result = new int /*long*/[1];
+		hr = mainFrame.dataSource (result);
+		if (hr != COM.S_OK || result[0] == 0) {
+			return COM.S_OK;
+		}
+		IWebDataSource dataSource = new IWebDataSource (result[0]);
+		result[0] = 0;
+		hr = dataSource.pageTitle (result);
+		dataSource.Release ();
+		if (hr != COM.S_OK) {
+			return COM.S_OK;
+		}
+		String title = null;
+		if (result[0] != 0) {
+			title = WebKit.extractBSTR (result[0]);
+			COM.SysFreeString (result[0]);
+		}
+		if (title == null || title.length () == 0) {	/* page has no title */
+			TitleEvent newEvent = new TitleEvent (browser);
+			newEvent.display = display;
+			newEvent.widget = browser;
+			newEvent.title = getUrl ();
+			TitleListener[] titleListeners = browser.webBrowser.titleListeners;
+			for (int i = 0; i < titleListeners.length; i++) {
+				titleListeners[i].changed (newEvent);
+			}
+			if (browser.isDisposed ()) return COM.S_OK;
+		}
+
+		ProgressEvent progress = new ProgressEvent (browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = WebKit.MAX_PROGRESS;
+		progress.total = WebKit.MAX_PROGRESS;
+		ProgressListener[] progressListeners = browser.webBrowser.progressListeners;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].completed (progress);
+		}
+		if (browser.isDisposed ()) return COM.S_OK;
+	}
+	((WebKit)browser.webBrowser).loadingText = false;
+	return COM.S_OK;
+}
+
+int didReceiveTitle (int /*long*/ webView, int /*long*/ title, int /*long*/ frame) {
+	int /*long*/[] mainFrame = new int /*long*/[1];
+	IWebView iWebView = new IWebView (webView);
+	int hr = iWebView.mainFrame (mainFrame);
+	if (hr != COM.S_OK || frame == 0) {
+		return COM.S_OK;
+	}
+	if (frame == mainFrame[0]) {
+		String newTitle = WebKit.extractBSTR (title);
+		TitleEvent newEvent = new TitleEvent (browser);
+		newEvent.display = browser.getDisplay ();
+		newEvent.widget = browser;
+		newEvent.title = newTitle;
+		TitleListener[] titleListeners = browser.webBrowser.titleListeners;
+		for (int i = 0; i < titleListeners.length; i++) {
+			titleListeners[i].changed (newEvent);
+		}
+	}
+	new IWebFrame (mainFrame[0]).Release ();
+	return COM.S_OK;
+}
+
+int didStartProvisionalLoadForFrame (int /*long*/ webView, int /*long*/ frame) {
+	return COM.S_OK;
+}
+
+void disposeCOMInterfaces () {
+	if (iWebFrameLoadDelegate != null) {
+		iWebFrameLoadDelegate.dispose ();
+		iWebFrameLoadDelegate = null;
+	}	
+}
+
+int /*long*/ getAddress () {
+	return iWebFrameLoadDelegate.getAddress ();
+}
+
+String getUrl () {
+	/* WebKit auto-navigates to about:blank at startup */
+	if (url == null || url.length () == 0) return WebKit.ABOUT_BLANK;
+	return url;
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
+	GUID guid = new GUID ();
+	COM.MoveMemory (guid, riid, GUID.sizeof);
+
+	if (COM.IsEqualGUID (guid, COM.IIDIUnknown)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebFrameLoadDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebFrameLoadDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+	if (COM.IsEqualGUID (guid, WebKit_win32.IID_IWebFrameLoadDelegate)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebFrameLoadDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebFrameLoadDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+
+	COM.MoveMemory (ppvObject, new int /*long*/[] {0}, OS.PTR_SIZEOF);
+	return COM.E_NOINTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) {
+		disposeCOMInterfaces ();
+	}
+	return refCount;
+}
+
+boolean showCertificateDialog (int /*long*/ webView, final String failingUrlString, final String description, final int /*long*/ certificate) {
+	Shell parent = browser.getShell ();
+	final Shell shell = new Shell (parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+	shell.setText (Compatibility.getMessage ("SWT_InvalidCert_Title")); //$NON-NLS-1$
+	shell.setLayout (new GridLayout ());
+	Label label = new Label (shell, SWT.WRAP);
+	String host = null;
+	try {
+		host = new URL (failingUrlString).getHost ();
+	} catch (MalformedURLException e) {
+		/* show the url instead */
+		host = failingUrlString;
+	}
+	StringBuffer message = new StringBuffer ("\n"); //$NON-NLS-1$
+	message.append (Compatibility.getMessage ("SWT_InvalidCert_Message", new String[] {host})); //$NON-NLS-1$
+	message.append ("\n\n"); //$NON-NLS-1$
+	message.append (Compatibility.getMessage (description));
+	message.append ("\n"); //$NON-NLS-1$
+	message.append (Compatibility.getMessage ("SWT_InvalidCert_Connect")); //$NON-NLS-1$
+	message.append ("\n"); //$NON-NLS-1$
+	label.setText(message.toString ());
+
+	GridData data = new GridData ();
+	Monitor monitor = browser.getMonitor ();
+	int maxWidth = monitor.getBounds ().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	data.widthHint = Math.min (width, maxWidth);
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	label.setLayoutData (data);
+
+	final boolean[] result = new boolean[1];
+	final Button[] buttons = new Button[3];
+	Listener listener = new Listener() {
+		public void handleEvent (Event event) {
+			if (event.widget == buttons[2]) {
+				showCertificate (shell, certificate);
+			} else {
+				result[0] = event.widget == buttons[0];
+				shell.close();
+			}
+		}	
+	};
+
+	Composite composite = new Composite (shell, SWT.NONE);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.END;
+	composite.setLayoutData (data);
+	composite.setLayout (new GridLayout (3, true));
+	buttons[0] = new Button (composite, SWT.PUSH);
+	buttons[0].setText (SWT.getMessage("SWT_Continue")); //$NON-NLS-1$
+	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[0].addListener (SWT.Selection, listener);
+	buttons[1] = new Button (composite, SWT.PUSH);
+	buttons[1].setText (SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
+	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[1].addListener (SWT.Selection, listener);
+	buttons[2] = new Button (composite, SWT.PUSH);
+	buttons[2].setText (SWT.getMessage("SWT_ViewCertificate")); //$NON-NLS-1$
+	buttons[2].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[2].addListener (SWT.Selection, listener);
+
+	shell.setDefaultButton (buttons[0]);
+	shell.pack ();
+
+	Rectangle parentSize = parent.getBounds ();
+	Rectangle shellSize = shell.getBounds ();
+	int x = parent.getLocation ().x + (parentSize.width - shellSize.width) / 2;
+	int y = parent.getLocation ().y + (parentSize.height - shellSize.height) / 2;
+	shell.setLocation (x, y);
+	shell.open ();
+	Display display = browser.getDisplay ();
+	while (!shell.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+	return result[0];
+}
+
+void showCertificate (Shell parent, int /*long*/ certificate) {
+	CERT_CONTEXT context = new CERT_CONTEXT ();
+	OS.MoveMemory (context, certificate, CERT_CONTEXT.sizeof);
+	CERT_INFO info = new CERT_INFO ();
+	OS.MoveMemory (info, context.pCertInfo, CERT_INFO.sizeof);
+
+	int length = OS.CertNameToStr (OS.X509_ASN_ENCODING, info.Issuer, OS.CERT_SIMPLE_NAME_STR, null, 0);
+	TCHAR tchar = new TCHAR (0, length);
+	OS.CertNameToStr (OS.X509_ASN_ENCODING, info.Issuer, OS.CERT_SIMPLE_NAME_STR, tchar, length);
+	String issuer = tchar.toString (0, tchar.strlen ());
+
+	length = OS.CertNameToStr (OS.X509_ASN_ENCODING, info.Subject, OS.CERT_SIMPLE_NAME_STR, null, 0);
+	tchar = new TCHAR (0, length);
+	OS.CertNameToStr (OS.X509_ASN_ENCODING, info.Subject, OS.CERT_SIMPLE_NAME_STR, tchar, length);
+	String subject = tchar.toString (0, tchar.strlen ());
+
+	final String SEPARATOR_DATE = "/"; //$NON-NLS-1$
+	final String SEPARATOR_TIME = ":"; //$NON-NLS-1$
+	SYSTEMTIME systemTime = new SYSTEMTIME ();
+	OS.FileTimeToSystemTime (info.NotBefore, systemTime);
+	String validFrom = systemTime.wDay + SEPARATOR_DATE + systemTime.wMonth + SEPARATOR_DATE + systemTime.wYear;
+	String validFromTime = systemTime.wHour + SEPARATOR_TIME + systemTime.wMinute + SEPARATOR_TIME + systemTime.wSecond;
+
+	systemTime = new SYSTEMTIME ();
+	OS.FileTimeToSystemTime (info.NotAfter, systemTime);
+	String validTo = systemTime.wDay + SEPARATOR_DATE + systemTime.wMonth + SEPARATOR_DATE + systemTime.wYear;
+	String validToTime = systemTime.wHour + SEPARATOR_TIME + systemTime.wMinute + SEPARATOR_TIME + systemTime.wSecond;
+
+	length = info.SerialNumber.cbData;
+	byte[] serialNumber = new byte[length];
+	OS.MoveMemory (serialNumber, info.SerialNumber.pbData, length);
+	String hexSerialNumber = new String ();
+	for (int i = length - 1; i >= 0; i--) {
+		int number = 0xFF & serialNumber[i];
+		String hex = Integer.toHexString (number);
+		if (hex.length () == 1) hexSerialNumber += "0"; //$NON-NLS-1$
+		hexSerialNumber += hex + " "; //$NON-NLS-1$
+	}
+
+	final Shell dialog = new Shell (parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+	dialog.setText (SWT.getMessage ("SWT_Certificate")); //$NON-NLS-1$
+	dialog.setLayout (new GridLayout (1, false));
+
+	TabFolder tabFolder = new TabFolder (dialog, SWT.NONE);
+	tabFolder.setLayoutData (new GridData (SWT.FILL, SWT.FILL, true, true, 1, 1));
+	tabFolder.setLayout (new FillLayout ());
+
+	TabItem general = new TabItem (tabFolder, SWT.NONE);
+	general.setText (SWT.getMessage ("SWT_General")); //$NON-NLS-1$
+	Composite composite = new Composite (tabFolder, SWT.BORDER);
+	composite.setLayout (new GridLayout (1, false));
+	Label issuedTo = new Label (composite, SWT.NONE);
+	issuedTo.setLayoutData (new GridData (SWT.BEGINNING, SWT.CENTER, false, false));
+	issuedTo.setText (Compatibility.getMessage ("SWT_IssuedTo", new Object[] {subject})); //$NON-NLS-1$
+	Label issuedBy = new Label (composite, SWT.NONE);
+	issuedBy.setLayoutData (new GridData (SWT.BEGINNING, SWT.CENTER, false, false));
+	issuedBy.setText (Compatibility.getMessage ("SWT_IssuedFrom", new Object[] {issuer}));  //$NON-NLS-1$
+	Label valid = new Label (composite, SWT.NONE);
+	valid.setLayoutData (new GridData (SWT.BEGINNING, SWT.CENTER, false, false));
+	valid.setText (Compatibility.getMessage ("SWT_ValidFromTo", new Object[] {validFrom, validTo})); //$NON-NLS-1$
+	general.setControl (composite);
+
+	TabItem details = new TabItem (tabFolder, SWT.NONE);
+	details.setText (SWT.getMessage ("SWT_Details")); //$NON-NLS-1$
+	Table table = new Table (tabFolder, SWT.SINGLE | SWT.BORDER| SWT.FULL_SELECTION);
+	table.setHeaderVisible (true);
+	TableColumn tableColumn = new TableColumn (table, SWT.LEAD);
+	tableColumn.setText (SWT.getMessage ("SWT_Field")); //$NON-NLS-1$
+	tableColumn = new TableColumn (table, SWT.NONE);
+	tableColumn.setText (SWT.getMessage ("SWT_Value")); //$NON-NLS-1$
+	TableItem tableItem = new TableItem(table, SWT.NONE);
+	String version = "V" + String.valueOf (info.dwVersion + 1); //$NON-NLS-1$
+	tableItem.setText (new String[]{SWT.getMessage ("SWT_Version"), version}); //$NON-NLS-1$
+	tableItem = new TableItem (table, SWT.NONE);
+	tableItem.setText (new String[] {SWT.getMessage ("SWT_SerialNumber"), hexSerialNumber}); //$NON-NLS-1$
+	tableItem = new TableItem (table, SWT.NONE);
+	tableItem.setText (new String[] {SWT.getMessage ("SWT_Issuer"), issuer}); //$NON-NLS-1$
+
+	tableItem = new TableItem (table, SWT.NONE);
+	StringBuffer stringBuffer2 = new StringBuffer ();
+	stringBuffer2.append (validFrom);
+	stringBuffer2.append (", "); //$NON-NLS-1$
+	stringBuffer2.append (validFromTime);
+	stringBuffer2.append (" GMT"); //$NON-NLS-1$
+	tableItem.setText (new String[] {SWT.getMessage ("SWT_ValidFrom"), stringBuffer2.toString ()}); //$NON-NLS-1$
+
+	tableItem = new TableItem (table, SWT.NONE);
+	StringBuffer stringBuffer = new StringBuffer ();
+	stringBuffer.append (validTo);
+	stringBuffer.append (", "); //$NON-NLS-1$
+	stringBuffer.append (validToTime);
+	stringBuffer.append (" GMT"); //$NON-NLS-1$
+	tableItem.setText (new String[] {SWT.getMessage ("SWT_ValidTo"), stringBuffer.toString ()}); //$NON-NLS-1$
+
+	tableItem = new TableItem (table, SWT.NONE);
+	tableItem.setText (new String[] {SWT.getMessage ("SWT_Subject"), subject}); //$NON-NLS-1$
+	for (int i = 0; i < table.getColumnCount (); i++) {
+		table.getColumn (i).pack ();
+	}
+	details.setControl (table);
+
+	Button ok = new Button (dialog, SWT.PUSH);
+	GridData layoutData = new GridData (SWT.END, SWT.CENTER, false, false);
+	layoutData.widthHint = 75;
+	ok.setLayoutData (layoutData);
+	ok.setText (SWT.getMessage ("SWT_OK")); //$NON-NLS-1$
+	ok.addSelectionListener (new SelectionAdapter() {
+		public void widgetSelected (SelectionEvent e) {
+			dialog.dispose ();
+		}
+	});
+
+	dialog.setDefaultButton (ok);
+	dialog.pack ();
+	Rectangle parentSize = parent.getBounds ();
+	Rectangle dialogSize = dialog.getBounds ();
+	int x = parent.getLocation ().x + (parentSize.width - dialogSize.width) / 2;
+	int y = parent.getLocation ().y + (parentSize.height - dialogSize.height) / 2;
+	dialog.setLocation (x, y);
+	dialog.open ();
+	Display display = browser.getDisplay ();
+	while (!dialog.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java
new file mode 100644
index 0000000..a68b060
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java	
@@ -0,0 +1,1310 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.webkit.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.widgets.*;
+
+class WebKit extends WebBrowser {
+	IWebView webView;
+	int /*long*/ webViewWindowHandle, webViewData;
+	int refCount = 0;
+	int lastKeyCode, lastCharCode;
+
+	WebDownloadDelegate webDownloadDelegate;
+	WebFrameLoadDelegate webFrameLoadDelegate;
+	WebPolicyDelegate webPolicyDelegate;
+	WebResourceLoadDelegate webResourceLoadDelegate;
+	WebUIDelegate webUIDelegate;
+
+	boolean ignoreDispose;
+	boolean loadingText = false;
+	boolean traverseNext = true;
+	boolean traverseOut = false;
+	boolean untrustedText;
+	String lastNavigateURL;
+	BrowserFunction eventFunction;
+
+	static int prefsIdentifier;
+	static int /*long*/ ExternalClass;
+	static boolean LibraryLoaded = false;
+	static String LibraryLoadError;
+	static Callback JSObjectHasPropertyProc;
+	static Callback JSObjectGetPropertyProc;
+	static Callback JSObjectCallAsFunctionProc;
+	static final int MAX_PROGRESS = 100;
+	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
+	static final String CHARSET_UTF8 = "UTF-8"; //$NON-NLS-1$
+	static final String CLASSNAME_EXTERNAL = "External"; //$NON-NLS-1$
+	static final String EMPTY_STRING = ""; //$NON-NLS-1$
+	static final String FUNCTIONNAME_CALLJAVA = "callJava"; //$NON-NLS-1$
+	static final String HEADER_SETCOOKIE = "Set-Cookie"; //$NON-NLS-1$
+	static final String POST = "POST"; //$NON-NLS-1$
+	static final String PROPERTY_LENGTH = "length"; //$NON-NLS-1$
+	static final String PROTOCOL_HTTPS = "https://"; //$NON-NLS-1$
+	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
+	static final String PROTOCOL_HTTP = "http://"; //$NON-NLS-1$
+	static final String USER_AGENT = "user-agent"; //$NON-NLS-1$
+	static final String URI_FILEROOT = "file:///"; //$NON-NLS-1$
+
+	/* event strings */
+	static final String DOMEVENT_DRAGSTART = "dragstart"; //$NON-NLS-1$
+	static final String DOMEVENT_KEYDOWN = "keydown"; //$NON-NLS-1$
+	static final String DOMEVENT_KEYPRESS = "keypress"; //$NON-NLS-1$
+	static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEDOWN = "mousedown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEUP = "mouseup"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEMOVE = "mousemove"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEOUT = "mouseout"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEOVER = "mouseover"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEWHEEL = "mousewheel"; //$NON-NLS-1$
+
+static {
+	/*
+	* Attempt to load the swt-webkit library.  This will only succeed if the Apple
+	* Application Support package is on the user's Windows Path environment variable. 
+	*/
+	try {
+		Library.loadLibrary ("swt-webkit"); // $NON-NLS-1$
+		LibraryLoaded = true;
+	} catch (Throwable e) {
+	}
+	
+	/*
+	* If needed, add the Apple Application Support package's directory to the library
+	* lookup path and try to load the swt-webkit library again.
+	*/
+	if (!LibraryLoaded) {
+		/*
+		* Registry entry HKEY_LOCAL_MACHINE\SOFTWARE\Apple Inc.\Apple Application Support\InstallDir
+		* indicates where the required Apple Application Support package is installed.  Check this
+		* value to ensure that it is installed, and to update the library lookup path.
+		*/
+		boolean AASDetected = false;
+		TCHAR key = new TCHAR (0, "SOFTWARE\\Apple Inc.\\Apple Application Support", true);	//$NON-NLS-1$
+		int /*long*/[] phkResult = new int /*long*/[1];
+		if (OS.RegOpenKeyEx (OS.HKEY_LOCAL_MACHINE, key, 0, OS.KEY_READ, phkResult) == 0) {
+			int[] lpcbData = new int[1];
+			TCHAR buffer = new TCHAR (0, "InstallDir", true); //$NON-NLS-1$
+			int result = OS.RegQueryValueEx (phkResult[0], buffer, 0, null, (TCHAR)null, lpcbData);
+			if (result == 0) {
+				TCHAR lpData = new TCHAR (0, lpcbData[0] / TCHAR.sizeof);
+				result = OS.RegQueryValueEx (phkResult[0], buffer, 0, null, lpData, lpcbData);
+				if (result == 0) {
+					AASDetected = true;
+					String AASDirectory = lpData.toString (0, lpData.strlen ());
+					buffer = new TCHAR (0, AASDirectory, true);
+					boolean success = OS.SetDllDirectory (buffer); /* should succeed on XP+SP1 and newer */
+					if (success) {
+						try {
+							Library.loadLibrary ("swt-webkit"); //$NON-NLS-1$
+							LibraryLoaded = true;
+						} catch (Throwable e) {
+							LibraryLoadError = "Failed to load the swt-webkit library"; //$NON-NLS-1$
+						}
+					} else {
+						LibraryLoadError = "Failed to add the Apple Application Support package to the library lookup path.  "; //$NON-NLS-1$
+						LibraryLoadError += "To use a SWT.WEBKIT-style Browser prepend " + AASDirectory + " to your Windows 'Path' environment variable and restart."; //$NON-NLS-1$ //$NON-NLS-2$
+					}
+				}
+			}
+			OS.RegCloseKey (phkResult[0]);
+		}
+		if (!AASDetected) {
+			LibraryLoadError = "Safari must be installed to use a SWT.WEBKIT-style Browser"; //$NON-NLS-1$
+		}
+	}
+
+	if (LibraryLoaded) {
+		JSObjectHasPropertyProc = new Callback (WebKit.class, "JSObjectHasPropertyProc", 3); //$NON-NLS-1$
+		if (JSObjectHasPropertyProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		JSObjectGetPropertyProc = new Callback (WebKit.class, "JSObjectGetPropertyProc", 4); //$NON-NLS-1$
+		if (JSObjectGetPropertyProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		JSObjectCallAsFunctionProc = new Callback (WebKit.class, "JSObjectCallAsFunctionProc", 6); //$NON-NLS-1$
+		if (JSObjectCallAsFunctionProc.getAddress () == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		NativeClearSessions = new Runnable () {
+			public void run () {
+				int /*long*/[] result = new int /*long*/[1];
+				int hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebCookieManager, 0, WebKit_win32.IID_IWebCookieManager, result);
+				if (hr != COM.S_OK || result[0] == 0) {
+					return;
+				}
+				IWebCookieManager cookieManager = new IWebCookieManager (result[0]);
+				int /*long*/[] storage = new int /*long*/[1];
+				hr = cookieManager.cookieStorage (storage);
+				cookieManager.Release ();
+				if (hr != COM.S_OK || storage[0] == 0) {
+					return;
+				}
+				int /*long*/ cookies = WebKit_win32.CFHTTPCookieStorageCopyCookies (storage[0]);
+				if (cookies != 0) {
+					int count = WebKit_win32.CFArrayGetCount (cookies);
+					for (int i = 0; i < count; i++) {
+						int /*long*/ cookie = WebKit_win32.CFArrayGetValueAtIndex (cookies, i);
+						int /*long*/ flags = WebKit_win32.CFHTTPCookieGetFlags (cookie);
+						if ((flags & WebKit_win32.CFHTTPCookieSessionOnlyFlag) != 0) {
+							WebKit_win32.CFHTTPCookieStorageDeleteCookie (storage[0], cookie);
+						}
+					}
+					WebKit_win32.CFRelease (cookies);
+				}
+				// WebKit_win32.CFRelease (storage[0]);	//intentionally commented, causes crash
+			}
+		};
+
+		NativeGetCookie = new Runnable () {
+			public void run () {
+				int /*long*/[] result = new int /*long*/[1];
+				int hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebCookieManager, 0, WebKit_win32.IID_IWebCookieManager, result);
+				if (hr != COM.S_OK || result[0] == 0) {
+					return;
+				}
+				IWebCookieManager cookieManager = new IWebCookieManager (result[0]);
+				int /*long*/[] storage = new int /*long*/[1];
+				hr = cookieManager.cookieStorage (storage);
+				cookieManager.Release ();
+				if (hr != COM.S_OK || storage[0] == 0) {
+					return;
+				}
+				char[] chars = CookieUrl.toCharArray ();
+				int /*long*/ string = WebKit_win32.CFStringCreateWithCharacters (0, chars, chars.length);
+				if (string != 0) {
+					int /*long*/ cfUrl = WebKit_win32.CFURLCreateWithString (0, string, 0);
+					if (cfUrl != 0) {
+						boolean secure = CookieUrl.startsWith (PROTOCOL_HTTPS);
+						int /*long*/ cookiesArray = WebKit_win32.CFHTTPCookieStorageCopyCookiesForURL (storage[0], cfUrl, secure);
+						if (cookiesArray != 0) {
+							int count = WebKit_win32.CFArrayGetCount (cookiesArray);
+							for (int i = 0; i < count; i++) {
+								int /*long*/ cookie = WebKit_win32.CFArrayGetValueAtIndex (cookiesArray, i);
+								if (cookie != 0) {
+									int /*long*/ cookieName = WebKit_win32.CFHTTPCookieGetName (cookie);
+									if (cookieName != 0) {
+										String name = stringFromCFString (cookieName);
+										if (CookieName.equals (name)) {
+											int /*long*/ value = WebKit_win32.CFHTTPCookieGetValue (cookie);
+											if (value != 0) CookieValue = stringFromCFString (value);
+											break;
+										}
+									}
+								}
+							}
+							WebKit_win32.CFRelease (cookiesArray);
+						}
+						WebKit_win32.CFRelease (cfUrl);
+					}
+					WebKit_win32.CFRelease (string);
+				}
+				// WebKit_win32.CFRelease (storage[0]);	//intentionally commented, causes crash
+			}
+		};
+
+		NativeSetCookie = new Runnable () {
+			public void run () {
+				int /*long*/[] result = new int /*long*/[1];
+				int hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebCookieManager, 0, WebKit_win32.IID_IWebCookieManager, result);
+				if (hr != COM.S_OK || result[0] == 0) {
+					return;
+				}
+				IWebCookieManager cookieManager = new IWebCookieManager (result[0]);
+				int /*long*/[] storage = new int /*long*/[1];
+				hr = cookieManager.cookieStorage (storage);
+				cookieManager.Release ();
+				if (hr != COM.S_OK || storage[0] == 0) {
+					return;
+				}
+
+				char[] chars = CookieUrl.toCharArray ();
+				int /*long*/ string = WebKit_win32.CFStringCreateWithCharacters (0, chars, chars.length);
+				if (string != 0) {
+					int /*long*/ cfUrl = WebKit_win32.CFURLCreateWithString (0, string, 0);
+					if (cfUrl != 0) {
+						chars = CookieValue.toCharArray ();
+						int /*long*/ value = WebKit_win32.CFStringCreateWithCharacters (0, chars, chars.length);
+						if (value != 0) {
+							chars = HEADER_SETCOOKIE.toCharArray ();
+							int /*long*/ key = WebKit_win32.CFStringCreateWithCharacters (0, chars, chars.length);
+							if (key != 0) {
+								int /*long*/ headers = WebKit_win32.CFDictionaryCreate (0, new int /*long*/[] {key}, new int /*long*/[] {value}, 1, WebKit_win32.kCFCopyStringDictionaryKeyCallBacks (), WebKit_win32.kCFTypeDictionaryValueCallBacks ());
+								if (headers != 0) {
+									int /*long*/ cookies = WebKit_win32.CFHTTPCookieCreateWithResponseHeaderFields (0, headers, cfUrl);
+									if (cookies != 0) {
+										int /*long*/ cookie = WebKit_win32.CFArrayGetValueAtIndex (cookies, 0);
+										if (cookie != 0) {
+											WebKit_win32.CFHTTPCookieStorageSetCookie (storage[0], cookie);
+											CookieResult = true;
+										}
+										WebKit_win32.CFRelease (cookies);
+									}
+									WebKit_win32.CFRelease (headers);
+								}
+								WebKit_win32.CFRelease (key);
+							}
+							WebKit_win32.CFRelease (value);
+						}
+						WebKit_win32.CFRelease (cfUrl);
+					}
+					WebKit_win32.CFRelease (string);
+				}
+				// WebKit_win32.CFRelease (storage[0]);	//intentionally commented, causes crash
+			}
+		};
+
+		if (NativePendingCookies != null) {
+			SetPendingCookies (NativePendingCookies);
+		}
+		NativePendingCookies = null;
+	}
+}
+
+static int /*long*/ createBSTR (String string) {
+	char[] data = (string + '\0').toCharArray ();
+	return COM.SysAllocString (data);
+}
+
+static String error (int code) {
+	throw new SWTError ("WebKit error " + code); //$NON-NLS-1$
+}
+
+static String extractBSTR (int /*long*/ bstrString) {
+	int size = COM.SysStringByteLen (bstrString);
+	if (size == 0) return EMPTY_STRING;
+	char[] buffer = new char[(size + 1) / 2]; // add one to avoid rounding errors
+	COM.MoveMemory (buffer, bstrString, size);
+	return new String (buffer);
+}
+
+static Browser findBrowser (int /*long*/ webView) {
+	if (webView == 0) return null;
+	IWebView iwebView = new IWebView (webView);
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = iwebView.hostWindow (result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		Widget widget = Display.getCurrent ().findWidget (result[0]);
+		if (widget != null && widget instanceof Browser) return (Browser)widget;
+	}
+	return null;
+}
+
+static int /*long*/ JSObjectCallAsFunctionProc (int /*long*/ ctx, int /*long*/ function, int /*long*/ thisObject, int /*long*/ argumentCount, int /*long*/ arguments, int /*long*/ exception) {
+	WebKit_win32.JSGlobalContextRetain (ctx);
+	if (WebKit_win32.JSValueIsObjectOfClass (ctx, thisObject, ExternalClass) == 0) {
+		return WebKit_win32.JSValueMakeUndefined (ctx);
+	}
+	int /*long*/ ptr = WebKit_win32.JSObjectGetPrivate (thisObject);
+	int /*long*/[] handle = new int /*long*/[1];
+	C.memmove (handle, ptr, C.PTR_SIZEOF);
+	Browser browser = findBrowser (handle[0]);
+	if (browser == null) return WebKit_win32.JSValueMakeUndefined (ctx);
+	WebKit webkit = (WebKit)browser.webBrowser;
+	return webkit.callJava (ctx, function, thisObject, argumentCount, arguments, exception);
+}
+
+static int /*long*/ JSObjectGetPropertyProc (int /*long*/ ctx, int /*long*/ object, int /*long*/ propertyName, int /*long*/ exception) {
+	byte[] bytes = null;
+	try {
+		bytes = (FUNCTIONNAME_CALLJAVA + '\0').getBytes (CHARSET_UTF8);
+	} catch (UnsupportedEncodingException e) {
+		bytes = (FUNCTIONNAME_CALLJAVA + '\0').getBytes ();
+	} 
+	int /*long*/ name = WebKit_win32.JSStringCreateWithUTF8CString (bytes);
+	int /*long*/ addr = WebKit_win32.JSObjectCallAsFunctionProc_CALLBACK (WebKit.JSObjectCallAsFunctionProc.getAddress ());
+	int /*long*/ function = WebKit_win32.JSObjectMakeFunctionWithCallback (ctx, name, addr);
+	WebKit_win32.JSStringRelease (name);
+	return function;
+}
+
+static int /*long*/ JSObjectHasPropertyProc (int /*long*/ ctx, int /*long*/ object, int /*long*/ propertyName) {
+	byte[] bytes = null;
+	try {
+		bytes = (FUNCTIONNAME_CALLJAVA + '\0').getBytes (CHARSET_UTF8);
+	} catch (UnsupportedEncodingException e) {
+		bytes = (FUNCTIONNAME_CALLJAVA + '\0').getBytes ();
+	}
+	return WebKit_win32.JSStringIsEqualToUTF8CString (propertyName, bytes);
+}
+
+static String stringFromCFString (int /*long*/ cfString) {
+	if (cfString == 0) return null;
+	int length = WebKit_win32.CFStringGetLength (cfString);
+	int /*long*/ ptr = WebKit_win32.CFStringGetCharactersPtr (cfString);
+	char[] chars = new char[length];
+	if (ptr != 0) {
+		OS.MoveMemory (chars, ptr, length);
+	} else {
+		for (int j = 0; j < length; j++) {
+			chars[j] = WebKit_win32.CFStringGetCharacterAtIndex (cfString, j);
+		}
+	}
+	return new String (chars);
+}
+
+static String stringFromJSString (int /*long*/ jsString) {
+	if (jsString == 0) return null;
+	int length = WebKit_win32.JSStringGetLength (jsString);
+	byte[] bytes = new byte[length + 1];
+	WebKit_win32.JSStringGetUTF8CString (jsString, bytes, length + 1);
+	return new String (bytes);
+}
+
+public boolean back () {
+	int[] result = new int[1];
+	webView.goBack (result);
+	return result[0] != 0;
+}
+
+int /*long*/ callJava (int /*long*/ ctx, int /*long*/ func, int /*long*/ thisObject, int /*long*/ argumentCount, int /*long*/ arguments, int /*long*/ exception) {
+	Object returnValue = null;
+	if (argumentCount == 3) {
+		int /*long*/[] result = new int /*long*/[1];
+		C.memmove (result, arguments, C.PTR_SIZEOF);
+		int type = WebKit_win32.JSValueGetType (ctx, result[0]);
+		if (type == WebKit_win32.kJSTypeNumber) {
+			int index = ((Double)convertToJava (ctx, result[0])).intValue ();
+			result[0] = 0;
+			if (index > 0) {
+				Object key = new Integer (index);
+				C.memmove (result, arguments + C.PTR_SIZEOF, C.PTR_SIZEOF);
+				type = WebKit_win32.JSValueGetType (ctx, result[0]);
+				if (type == WebKit_win32.kJSTypeNumber) {
+					long token = ((Double)convertToJava (ctx, result[0])).longValue ();
+					BrowserFunction function = (BrowserFunction)functions.get (key);
+					if (function != null && token == function.token) {
+						try {
+							C.memmove (result, arguments + 2 * C.PTR_SIZEOF, C.PTR_SIZEOF);
+							Object temp = convertToJava (ctx, result[0]);
+							if (temp instanceof Object[]) {
+								Object[] args = (Object[])temp;
+								try {
+									returnValue = function.function (args);
+								} catch (Exception e) {
+									/* exception during function invocation */
+									returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+								}
+							}
+						} catch (IllegalArgumentException e) {
+							/* invalid argument value type */
+							if (function.isEvaluate) {
+								/* notify the function so that a java exception can be thrown */
+								function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
+							}
+							returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+						}
+					}
+				}
+			}
+		}
+	}
+	return convertToJS (ctx, returnValue);
+}
+
+public boolean close () {
+	return shouldClose ();
+}
+
+Object convertToJava (int /*long*/ ctx, int /*long*/ value) {
+	int type = WebKit_win32.JSValueGetType (ctx, value);
+	switch (type) {
+		case WebKit_win32.kJSTypeBoolean: {
+			int result = WebKit_win32.JSValueToBoolean (ctx, value);
+			return new Boolean (result != 0);
+		}
+		case WebKit_win32.kJSTypeNumber: {
+			double result = WebKit_win32.JSValueToNumber (ctx, value, null);
+			return new Double (result);
+		}
+		case WebKit_win32.kJSTypeString: {
+			int /*long*/ string = WebKit_win32.JSValueToStringCopy (ctx, value, null);
+			if (string == 0) return ""; //$NON-NLS-1$
+			int /*long*/ length = WebKit_win32.JSStringGetMaximumUTF8CStringSize (string);
+			byte[] bytes = new byte[(int)/*64*/length];
+			length = WebKit_win32.JSStringGetUTF8CString (string, bytes, length);
+			WebKit_win32.JSStringRelease (string);
+			try {
+				/* length-1 is needed below to exclude the terminator character */
+				return new String (bytes, 0, (int)/*64*/length - 1, CHARSET_UTF8);
+			} catch (UnsupportedEncodingException e) {
+				return new String (bytes);
+			}
+		}
+		case WebKit_win32.kJSTypeNull:
+			// FALL THROUGH
+		case WebKit_win32.kJSTypeUndefined: return null;
+		case WebKit_win32.kJSTypeObject: {
+			byte[] bytes = null;
+			try {
+				bytes = (PROPERTY_LENGTH + '\0').getBytes (CHARSET_UTF8);
+			} catch (UnsupportedEncodingException e) {
+				bytes = (PROPERTY_LENGTH + '\0').getBytes ();
+			}
+			int /*long*/ propertyName = WebKit_win32.JSStringCreateWithUTF8CString (bytes);
+			int /*long*/ valuePtr = WebKit_win32.JSObjectGetProperty (ctx, value, propertyName, null);
+			WebKit_win32.JSStringRelease (propertyName);
+			type = WebKit_win32.JSValueGetType (ctx, valuePtr);
+			if (type == WebKit_win32.kJSTypeNumber) {
+				int length = (int)WebKit_win32.JSValueToNumber (ctx, valuePtr, null);
+				Object[] result = new Object[length];
+				for (int i = 0; i < length; i++) {
+					int /*long*/ current = WebKit_win32.JSObjectGetPropertyAtIndex (ctx, value, i, null);
+					if (current != 0) {
+						result[i] = convertToJava (ctx, current);
+					}
+				}
+				return result;
+			}
+		}
+	}
+	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	return null;
+}
+
+int /*long*/ convertToJS (int /*long*/ ctx, Object value) {
+	if (value == null) {
+		return WebKit_win32.JSValueMakeNull (ctx);
+	}
+	if (value instanceof String) {
+		byte[] bytes = null;
+		try {
+			bytes = ((String)value + '\0').getBytes (CHARSET_UTF8);
+		} catch (UnsupportedEncodingException e) {
+			bytes = ((String)value + '\0').getBytes ();
+		}
+		int /*long*/ stringRef = WebKit_win32.JSStringCreateWithUTF8CString (bytes);
+		int /*long*/ result = WebKit_win32.JSValueMakeString (ctx, stringRef);
+		WebKit_win32.JSStringRelease (stringRef);
+		return result;
+	}
+	if (value instanceof Boolean) {
+		return WebKit_win32.JSValueMakeBoolean (ctx, ((Boolean)value).booleanValue () ? 1 : 0);
+	}
+	if (value instanceof Number) {
+		return WebKit_win32.JSValueMakeNumber (ctx, ((Number)value).doubleValue ());
+	}
+	if (value instanceof Object[]) {
+		Object[] arrayValue = (Object[]) value;
+		int length = arrayValue.length;
+		int /*long*/[] arguments = new int /*long*/[length];
+		for (int i = 0; i < length; i++) {
+			Object javaObject = arrayValue[i];
+			int /*long*/ jsObject = convertToJS (ctx, javaObject);
+			arguments[i] = jsObject;
+		}
+		return WebKit_win32.JSObjectMakeArray (ctx, length, arguments, null);
+	}
+	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
+	return 0;
+}
+
+public void create (Composite parent, int style) {
+	if (!LibraryLoaded) {
+		browser.dispose ();
+		SWT.error (SWT.ERROR_NO_HANDLES, null, LibraryLoadError == null ? null : " [" + LibraryLoadError + ']'); //$NON-NLS-1$
+	}
+
+	if (ExternalClass == 0) {
+		JSClassDefinition jsClassDefinition = new JSClassDefinition ();
+		byte[] bytes = (CLASSNAME_EXTERNAL + '\0').getBytes ();
+		jsClassDefinition.className = C.malloc (bytes.length);
+		OS.memmove (jsClassDefinition.className, bytes, bytes.length);
+
+		/* custom callbacks for hasProperty, getProperty and callAsFunction */
+		int /*long*/ addr = WebKit_win32.JSObjectHasPropertyProc_CALLBACK (JSObjectHasPropertyProc.getAddress ());
+		jsClassDefinition.hasProperty = addr;
+		addr = WebKit_win32.JSObjectGetPropertyProc_CALLBACK (JSObjectGetPropertyProc.getAddress ());
+		jsClassDefinition.getProperty = addr;
+
+		int /*long*/ classDefinitionPtr = C.malloc (JSClassDefinition.sizeof);
+		WebKit_win32.memmove (classDefinitionPtr, jsClassDefinition, JSClassDefinition.sizeof);
+		ExternalClass = WebKit_win32.JSClassCreate (classDefinitionPtr);
+		WebKit_win32.JSClassRetain (ExternalClass);
+	}
+
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebView, 0, WebKit_win32.IID_IWebView, result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		browser.dispose ();
+		error (hr);
+	}
+	webView = new IWebView (result[0]);
+	webViewData = C.malloc (C.PTR_SIZEOF);
+	C.memmove (webViewData, new int /*long*/[] {webView.getAddress ()}, C.PTR_SIZEOF);
+	hr = webView.setHostWindow (browser.handle);
+	if (hr != COM.S_OK) {
+		browser.dispose ();
+		error (hr);
+	}
+	hr = webView.initWithFrame (new RECT (), 0, 0);
+	if (hr != COM.S_OK) {
+		browser.dispose ();
+		error (hr);
+	}
+	result[0] = 0;
+	hr = webView.QueryInterface (WebKit_win32.IID_IWebViewPrivate, result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		browser.dispose ();
+		error (hr);
+	}
+	IWebViewPrivate webViewPrivate = new IWebViewPrivate (result[0]);
+	result[0] = 0;
+	hr = webViewPrivate.viewWindow (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		browser.dispose ();
+		error (hr);
+	}
+	webViewPrivate.Release ();
+	webViewWindowHandle = result[0];
+
+	webFrameLoadDelegate = new WebFrameLoadDelegate (browser);
+	hr = webView.setFrameLoadDelegate (webFrameLoadDelegate.getAddress ());
+	if (hr != COM.S_OK) {
+		browser.dispose ();
+		error (hr);
+	}
+	webUIDelegate = new WebUIDelegate (browser);
+	hr = webView.setUIDelegate (webUIDelegate.getAddress ());
+	if (hr != COM.S_OK) {
+		browser.dispose ();
+		error (hr);
+	}
+
+	webResourceLoadDelegate = new WebResourceLoadDelegate (browser);
+	hr = webView.setResourceLoadDelegate (webResourceLoadDelegate.getAddress ());
+	if (hr != COM.S_OK) {
+		browser.dispose ();
+		error (hr);
+	}
+
+	webDownloadDelegate = new WebDownloadDelegate (browser);
+	hr = webView.setDownloadDelegate (webDownloadDelegate.getAddress ());
+	if (hr != COM.S_OK) {
+		browser.dispose ();
+		error (hr);
+	}
+
+	webPolicyDelegate = new WebPolicyDelegate (browser);
+	hr = webView.setPolicyDelegate (webPolicyDelegate.getAddress ());
+	if (hr != COM.S_OK) {
+		browser.dispose ();
+		error (hr);
+	}
+
+	initializeWebViewPreferences ();
+
+	Listener listener = new Listener () {
+		public void handleEvent (Event e) {
+			switch (e.type) {
+				case SWT.Dispose: {
+					/* make this handler run after other dispose listeners */
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (e.type, e);
+					e.type = SWT.NONE;
+					onDispose ();
+					break;
+				}
+				case SWT.FocusIn: {
+					OS.SetFocus (webViewWindowHandle);
+					break;
+				}
+				case SWT.Resize: {
+					Rectangle bounds = browser.getClientArea ();
+					OS.SetWindowPos (webViewWindowHandle, 0, bounds.x, bounds.y, bounds.width, bounds.height, OS.SWP_DRAWFRAME);
+					break;
+				}
+				case SWT.Traverse: {
+					if (traverseOut) {
+						e.doit = true;
+						traverseOut = false;
+					} else {
+						e.doit = false;
+					}
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener (SWT.Dispose, listener);
+	browser.addListener (SWT.KeyDown, listener); /* needed for tabbing into the Browser */
+	browser.addListener (SWT.FocusIn, listener);
+	browser.addListener (SWT.Resize, listener);
+	browser.addListener (SWT.Traverse, listener);
+
+	eventFunction = new BrowserFunction (browser, "HandleWebKitEvent") { //$NON-NLS-1$
+		public Object function (Object[] arguments) {
+			return handleEvent (arguments) ? Boolean.TRUE : Boolean.FALSE;
+		};	
+	};
+}
+
+public boolean execute (String script) {
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = webView.mainFrame (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return false;
+	}
+	IWebFrame frame = new IWebFrame (result[0]);
+	int /*long*/ context = frame.globalContext ();
+	frame.Release ();
+	if (context == 0) {
+		return false;
+	}
+	byte[] bytes = null;
+	try {
+		bytes = (script + '\0').getBytes ("UTF-8"); //$NON-NLS-1$
+	} catch (UnsupportedEncodingException e) {
+		bytes = (script + '\0').getBytes ();
+	}
+	int /*long*/ scriptString = WebKit_win32.JSStringCreateWithUTF8CString (bytes);
+	if (scriptString == 0) return false;
+	try {
+		bytes = (getUrl () + '\0').getBytes ("UTF-8"); //$NON-NLS-1$
+	} catch (UnsupportedEncodingException e) {
+		bytes = (getUrl () + '\0').getBytes ();
+	}
+	int /*long*/ urlString = WebKit_win32.JSStringCreateWithUTF8CString (bytes);
+	if (urlString == 0) {
+		WebKit_win32.JSStringRelease (scriptString);
+		return false;
+	}
+	int /*long*/ evalResult = WebKit_win32.JSEvaluateScript (context, scriptString, 0, urlString, 0, null);
+	WebKit_win32.JSStringRelease (urlString);
+	WebKit_win32.JSStringRelease (scriptString);
+	return evalResult != 0;
+}
+
+public boolean forward () {
+	int[] result = new int[1];
+	webView.goForward (result);
+	return result[0] != 0;
+}
+
+public String getBrowserType () {
+	return "webkit"; //$NON-NLS-1$
+}
+
+public String getText () {
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = webView.mainFrame (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return EMPTY_STRING;
+	}
+	IWebFrame mainFrame = new IWebFrame (result[0]);
+	result[0] = 0;
+	hr = mainFrame.dataSource (result);
+	mainFrame.Release ();
+	if (hr != COM.S_OK || result[0] == 0) {
+		return EMPTY_STRING;
+	}
+	IWebDataSource dataSource = new IWebDataSource (result[0]);
+	result[0] = 0;
+	hr = dataSource.representation (result);
+	dataSource.Release ();
+	if (hr != COM.S_OK || result[0] == 0) {
+		return EMPTY_STRING;
+	}
+	IWebDocumentRepresentation representation = new IWebDocumentRepresentation (result[0]);
+	result[0] = 0;
+	hr = representation.documentSource (result);
+	representation.Release ();
+	if (hr != COM.S_OK || result[0] == 0) {
+		return EMPTY_STRING;
+	}
+	String source = extractBSTR (result[0]);
+	COM.SysFreeString (result[0]);
+	return source;	
+}
+
+public String getUrl () {
+	return webFrameLoadDelegate.getUrl ();
+}
+
+boolean handleEvent (Object[] arguments) {
+
+	/*
+	* DOM events are currently received by hooking DOM listeners
+	* in javascript that invoke this method via a BrowserFunction.
+	* Document.addListener is not implemented on WebKit on windows.
+	* The argument lists received here are:
+	* 
+	* For key events:
+	* 	argument 0: type (String)
+	* 	argument 1: keyCode (Double)
+	* 	argument 2: charCode (Double)
+	* 	argument 3: altKey (Boolean)
+	* 	argument 4: ctrlKey (Boolean)
+	* 	argument 5: shiftKey (Boolean)
+	* 	argument 6: metaKey (Boolean)
+	* 	returns doit
+	* 
+	* For mouse events
+	* 	argument 0: type (String)
+	* 	argument 1: screenX (Double)
+	* 	argument 2: screenY (Double)
+	* 	argument 3: detail (Double)
+	* 	argument 4: button (Double)
+	* 	argument 5: altKey (Boolean)
+	* 	argument 6: ctrlKey (Boolean)
+	* 	argument 7: shiftKey (Boolean)
+	* 	argument 8: metaKey (Boolean)
+	* 	argument 9: hasRelatedTarget (Boolean)
+	* 	returns doit
+	*/
+
+	String type = (String)arguments[0];
+	if (type.equals (DOMEVENT_KEYDOWN)) {
+		int keyCode = translateKey (((Double)arguments[1]).intValue ());
+		lastKeyCode = keyCode;
+		switch (keyCode) {
+			case SWT.SHIFT:
+			case SWT.CONTROL:
+			case SWT.ALT:
+			case SWT.CAPS_LOCK:
+			case SWT.NUM_LOCK:
+			case SWT.SCROLL_LOCK:
+			case SWT.COMMAND:
+//			case SWT.ESC:
+			case SWT.TAB:
+			case SWT.PAUSE:
+//			case SWT.BS:
+			case SWT.INSERT:
+			case SWT.DEL:
+			case SWT.HOME:
+			case SWT.END:
+			case SWT.PAGE_UP:
+			case SWT.PAGE_DOWN:
+			case SWT.ARROW_DOWN:
+			case SWT.ARROW_UP:
+			case SWT.ARROW_LEFT:
+			case SWT.ARROW_RIGHT:
+			case SWT.F1:
+			case SWT.F2:
+			case SWT.F3:
+			case SWT.F4:
+			case SWT.F5:
+			case SWT.F6:
+			case SWT.F7:
+			case SWT.F8:
+			case SWT.F9:
+			case SWT.F10:
+			case SWT.F11:
+			case SWT.F12: {
+				/* keypress events will not be received for these keys, so send KeyDowns for them now */
+
+				Event keyEvent = new Event ();
+				keyEvent.widget = browser;
+				keyEvent.type = type.equals (DOMEVENT_KEYDOWN) ? SWT.KeyDown : SWT.KeyUp;
+				keyEvent.keyCode = keyCode;
+				switch (keyCode) {
+					case SWT.BS: keyEvent.character = SWT.BS; break;
+					case SWT.DEL: keyEvent.character = SWT.DEL; break;
+					case SWT.ESC: keyEvent.character = SWT.ESC; break;
+					case SWT.TAB: keyEvent.character = SWT.TAB; break;
+				}
+				lastCharCode = keyEvent.character;
+				keyEvent.stateMask =
+					(((Boolean)arguments[3]).booleanValue () ? SWT.ALT : 0) |
+					(((Boolean)arguments[4]).booleanValue () ? SWT.CTRL : 0) |
+					(((Boolean)arguments[5]).booleanValue () ? SWT.SHIFT : 0) |
+					(((Boolean)arguments[6]).booleanValue () ? SWT.COMMAND : 0);
+				keyEvent.stateMask &= ~keyCode;		/* remove current keydown if it's a state key */
+				if (!sendKeyEvent (keyEvent) || browser.isDisposed ()) return false;
+				break;
+			}
+		}
+		return true;
+	}
+
+	if (type.equals (DOMEVENT_KEYPRESS)) {
+		/*
+		* if keydown could not determine a keycode for this key then it's a
+		* key for which key events are not sent (eg.- the Windows key)
+		*/
+		if (lastKeyCode == 0) return true;
+
+		lastCharCode = ((Double)arguments[2]).intValue ();
+		if (((Boolean)arguments[4]).booleanValue () && (0 <= lastCharCode && lastCharCode <= 0x7F)) {
+			if ('a' <= lastCharCode && lastCharCode <= 'z') lastCharCode -= 'a' - 'A';
+			if (64 <= lastCharCode && lastCharCode <= 95) lastCharCode -= 64;
+		}
+
+		Event keyEvent = new Event ();
+		keyEvent.widget = browser;
+		keyEvent.type = SWT.KeyDown;
+		keyEvent.keyCode = lastKeyCode;
+		keyEvent.character = (char)lastCharCode;
+		keyEvent.stateMask =
+			(((Boolean)arguments[3]).booleanValue () ? SWT.ALT : 0) |
+			(((Boolean)arguments[4]).booleanValue () ? SWT.CTRL : 0) |
+			(((Boolean)arguments[5]).booleanValue () ? SWT.SHIFT : 0) |
+			(((Boolean)arguments[6]).booleanValue () ? SWT.COMMAND : 0);
+		return sendKeyEvent (keyEvent) && !browser.isDisposed ();
+	}
+
+	if (type.equals (DOMEVENT_KEYUP)) {
+		int keyCode = translateKey (((Double)arguments[1]).intValue ());
+		if (keyCode == 0) {
+			/* indicates a key for which key events are not sent */
+			return true;
+		}
+		if (keyCode != lastKeyCode) {
+			/* keyup does not correspond to the last keydown */
+			lastKeyCode = keyCode;
+			lastCharCode = 0;
+		}
+
+		Event keyEvent = new Event ();
+		keyEvent.widget = browser;
+		keyEvent.type = SWT.KeyUp;
+		keyEvent.keyCode = lastKeyCode;
+		keyEvent.character = (char)lastCharCode;
+		keyEvent.stateMask =
+			(((Boolean)arguments[3]).booleanValue () ? SWT.ALT : 0) |
+			(((Boolean)arguments[4]).booleanValue () ? SWT.CTRL : 0) |
+			(((Boolean)arguments[5]).booleanValue () ? SWT.SHIFT : 0) |
+			(((Boolean)arguments[6]).booleanValue () ? SWT.COMMAND : 0);
+		switch (lastKeyCode) {
+			case SWT.SHIFT:
+			case SWT.CONTROL:
+			case SWT.ALT:
+			case SWT.COMMAND: {
+				keyEvent.stateMask |= lastKeyCode;
+			}
+		}
+		browser.notifyListeners (keyEvent.type, keyEvent);
+		lastKeyCode = lastCharCode = 0;
+		return keyEvent.doit && !browser.isDisposed ();
+	}
+
+	/* mouse events */
+
+	/*
+	 * MouseOver and MouseOut events are fired any time the mouse enters or exits
+	 * any element within the Browser.  To ensure that SWT events are only
+	 * fired for mouse movements into or out of the Browser, do not fire an
+	 * event if there is a related target element.
+	 */
+	if (type.equals (DOMEVENT_MOUSEOVER) || type.equals (DOMEVENT_MOUSEOUT)) {
+		if (((Boolean)arguments[9]).booleanValue ()) return true;
+	}
+
+	/*
+	 * The position of mouse events is received in screen-relative coordinates
+	 * in order to handle pages with frames, since frames express their event
+	 * coordinates relative to themselves rather than relative to their top-
+	 * level page.  Convert screen-relative coordinates to be browser-relative.
+	 */
+	Point position = new Point (((Double)arguments[1]).intValue (), ((Double)arguments[2]).intValue ());
+	position = browser.getDisplay ().map (null, browser, position); 
+
+	Event mouseEvent = new Event ();
+	mouseEvent.widget = browser;
+	mouseEvent.x = position.x;
+	mouseEvent.y = position.y;
+	int mask =
+		(((Boolean)arguments[5]).booleanValue () ? SWT.ALT : 0) |
+		(((Boolean)arguments[6]).booleanValue () ? SWT.CTRL : 0) |
+		(((Boolean)arguments[7]).booleanValue () ? SWT.SHIFT : 0);
+	mouseEvent.stateMask = mask;
+
+	if (type.equals (DOMEVENT_MOUSEDOWN)) {
+		mouseEvent.type = SWT.MouseDown;
+		mouseEvent.count = ((Double)arguments[3]).intValue ();
+		mouseEvent.button = ((Double)arguments[4]).intValue ();
+		browser.notifyListeners (mouseEvent.type, mouseEvent);
+		if (browser.isDisposed ()) return true;
+		if (((Double)arguments[3]).intValue () == 2) {
+			mouseEvent = new Event ();
+			mouseEvent.type = SWT.MouseDoubleClick;
+			mouseEvent.widget = browser;
+			mouseEvent.x = position.x;
+			mouseEvent.y = position.y;
+			mouseEvent.stateMask = mask;
+			mouseEvent.count = ((Double)arguments[3]).intValue ();
+			mouseEvent.button = ((Double)arguments[4]).intValue ();
+			browser.notifyListeners (mouseEvent.type, mouseEvent);
+		}
+		return true;
+	}
+
+	if (type.equals (DOMEVENT_MOUSEUP)) {
+		mouseEvent.type = SWT.MouseUp;
+		mouseEvent.count = ((Double)arguments[3]).intValue ();
+		mouseEvent.button = ((Double)arguments[4]).intValue ();
+		switch (mouseEvent.button) {
+			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	} else if (type.equals (DOMEVENT_MOUSEMOVE)) {
+		mouseEvent.type = SWT.MouseMove;
+	} else if (type.equals (DOMEVENT_MOUSEWHEEL)) {
+		mouseEvent.type = SWT.MouseWheel;
+		mouseEvent.count = ((Double)arguments[3]).intValue ();
+	} else if (type.equals (DOMEVENT_MOUSEOVER)) {
+		mouseEvent.type = SWT.MouseEnter;
+	} else if (type.equals (DOMEVENT_MOUSEOUT)) {
+		mouseEvent.type = SWT.MouseExit;
+		if (mouseEvent.x < 0) mouseEvent.x = -1;
+		if (mouseEvent.y < 0) mouseEvent.y = -1;
+	} else if (type.equals (DOMEVENT_DRAGSTART)) {
+		mouseEvent.type = SWT.DragDetect;
+		mouseEvent.button = ((Double)arguments[4]).intValue () + 1;
+		switch (mouseEvent.button) {
+			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	}
+
+	browser.notifyListeners (mouseEvent.type, mouseEvent);
+	return true;
+}
+
+public boolean isBackEnabled () {
+	int /*long*/[] address = new int /*long*/[1];
+	int hr = webView.QueryInterface (WebKit_win32.IID_IWebIBActions, address);
+	if (hr != COM.S_OK || address[0] == 0) {
+		return false;
+	}
+	IWebIBActions webIBActions = new IWebIBActions (address[0]);
+	int[] result = new int[1];
+	webIBActions.canGoBack (webView.getAddress (), result);
+	webIBActions.Release ();
+	return result[0] != 0;
+}
+
+public boolean isFocusControl () {
+	int /*long*/ hwndFocus = OS.GetFocus ();
+	return hwndFocus != 0 && hwndFocus == webViewWindowHandle;
+}
+
+public boolean isForwardEnabled () {
+	int /*long*/[] address = new int /*long*/[1];
+	int hr = webView.QueryInterface (WebKit_win32.IID_IWebIBActions, address);
+	if (hr != COM.S_OK || address[0] == 0) {
+		return false;
+	}
+	IWebIBActions webIBActions = new IWebIBActions (address[0]);
+	int[] result = new int[1];
+	webIBActions.canGoForward (webView.getAddress (), result);
+	webIBActions.Release ();
+	return result[0] != 0;
+}
+
+void onDispose () {
+	/* Browser could have been disposed by one of the Dispose listeners */
+	if (!browser.isDisposed ()) {
+		/* invoke onbeforeunload handlers but don't prompt with message box */
+		if (!browser.isClosing) {
+			webUIDelegate.prompt = false;
+			shouldClose ();
+			webUIDelegate.prompt = true;
+		}
+	}
+
+	Enumeration elements = functions.elements ();
+	while (elements.hasMoreElements ()) {
+		((BrowserFunction)elements.nextElement ()).dispose (false);
+	}
+	functions = null;
+
+	eventFunction.dispose();
+	eventFunction = null;
+	C.free (webViewData);
+
+	webView.setPreferences (0);
+	webView.setHostWindow (0);
+	webView.setFrameLoadDelegate (0);
+	webView.setResourceLoadDelegate (0);
+	webView.setUIDelegate (0);
+	webView.setPolicyDelegate (0);
+	webView.setDownloadDelegate (0);
+	webView.Release();
+	webView = null;
+	webDownloadDelegate = null;
+	webFrameLoadDelegate = null;
+	webPolicyDelegate = null;
+	webResourceLoadDelegate = null;
+	webUIDelegate = null;
+	lastNavigateURL = null;
+}
+
+public void refresh () {
+	webFrameLoadDelegate.html = null;
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = webView.QueryInterface (WebKit_win32.IID_IWebIBActions, result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return;
+	}
+	IWebIBActions webIBActions = new IWebIBActions (result[0]);
+	webIBActions.reload (webView.getAddress ());
+	webIBActions.Release ();
+}
+
+boolean sendKeyEvent (Event event) {
+	/*
+	 * browser.traverse() is called through dislay.translateTraversal() for all
+	 * traversal types except SWT.TRAVERSE_MNEMONIC. So, override
+	 * WebBrowser.sendKeyEvent() so that when it is called from handleEvent(),
+	 * browser.traverse() is not called again.
+	 */
+	boolean doit = true;
+	switch (event.keyCode) {
+		case SWT.ESC:
+		case SWT.CR:
+		case SWT.ARROW_DOWN:
+		case SWT.ARROW_RIGHT:
+		case SWT.ARROW_UP:
+		case SWT.ARROW_LEFT:
+		case SWT.TAB:
+		case SWT.PAGE_DOWN:
+		case SWT.PAGE_UP:
+			break;
+		default: {
+			if (translateMnemonics ()) {
+				if (event.character != 0 && (event.stateMask & (SWT.ALT | SWT.CTRL)) == SWT.ALT) {
+					int traversal = SWT.TRAVERSE_MNEMONIC;
+					boolean oldEventDoit = event.doit;
+					event.doit = true;	
+					doit = !browser.traverse (traversal, event);
+					event.doit = oldEventDoit;
+				}
+			}
+			break;
+		}
+	}
+	if (doit) {
+		browser.notifyListeners (event.type, event);
+		doit = event.doit; 
+	}
+	return doit;
+}
+
+public boolean setText (String html, boolean trusted) {
+	/*
+	* If this.html is not null then the about:blank page is already being loaded,
+	* so no navigate is required.  Just set the html that is to be shown.
+	*/
+	boolean blankLoading = webFrameLoadDelegate.html != null;
+	webFrameLoadDelegate.html = html;
+	untrustedText = !trusted;
+	if (blankLoading) return true;
+
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = webView.mainFrame (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return false;
+	}
+	IWebFrame frame = new IWebFrame (result[0]);
+
+	result[0] = 0;
+	hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebMutableURLRequest, 0, WebKit_win32.IID_IWebMutableURLRequest, result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		frame.Release ();
+		return false;
+	}
+	IWebMutableURLRequest request = new IWebMutableURLRequest (result[0]);
+
+	int /*long*/ urlString = createBSTR (ABOUT_BLANK);
+	hr = request.setURL (urlString);
+	COM.SysFreeString (urlString);
+
+	if (hr == COM.S_OK) {
+		hr = frame.loadRequest (request.getAddress ());
+	}
+	frame.Release ();
+	request.Release ();
+	return hr == COM.S_OK;
+}
+
+public boolean setUrl (String url, String postData, String[] headers) {
+	if (url.length () == 0) return false;
+	/*
+	* WebKit attempts to open the exact url string that is passed to it and
+	* will not infer a protocol if it's not specified.  Detect the case of an
+	* invalid URL string and try to fix it by prepending an appropriate protocol.
+	*/
+	try {
+		new URL (url);
+	} catch (MalformedURLException e) {
+		String testUrl = null;
+		if (new File (url).isAbsolute ()) {
+			/* appears to be a local file */
+			testUrl = PROTOCOL_FILE + url; 
+		} else {
+			testUrl = PROTOCOL_HTTP + url;
+		}
+		try {
+			new URL (testUrl);
+			url = testUrl;		/* adding the protocol made the url valid */
+		} catch (MalformedURLException e2) {
+			/* adding the protocol did not make the url valid, so do nothing */
+		}
+	}
+	webFrameLoadDelegate.html = null;
+	lastNavigateURL = url;
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = webView.mainFrame (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return false;
+	}
+	IWebFrame frame = new IWebFrame (result[0]);
+
+	result[0] = 0;
+	hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebMutableURLRequest, 0, WebKit_win32.IID_IWebMutableURLRequest, result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		frame.Release ();
+		return false;
+	}
+	IWebMutableURLRequest request = new IWebMutableURLRequest (result[0]);
+
+	if (postData != null) { //TODO: POST
+//    	webResourceLoadDelegate.postData = postData;
+//    	int /*long*/ postString = createBSTR (POST);
+//		hr = request.setHTTPMethod (postString);
+//		COM.SysFreeString (postString);
+//		
+//		result[0] = 0;
+//		hr = request.QueryInterface (WebKit_win32.IID_IWebMutableURLRequestPrivate, result);
+//		if (hr == COM.S_OK && result[0] != 0) {
+//			IWebMutableURLRequestPrivate requestPrivate = new IWebMutableURLRequestPrivate(result[0]);
+//			int cfRequest = requestPrivate.cfRequest();
+//			byte[] bytes = postData.getBytes();
+//			int /*long*/ data = WebKit_win32.CFDataCreate(0, bytes, bytes.length);
+//			if (data != 0)WebKit_win32.CFURLRequestSetHTTPRequestBody(cfRequest, data);
+//			
+//			int /*long*/ dataGet = WebKit_win32.CFURLRequestCopyHTTPRequestBody(cfRequest);
+//			int length = WebKit_win32.CFDataGetLength(dataGet);
+//			int /*long*/ bytePtr = WebKit_win32.CFDataGetBytePtr(dataGet);
+//		}
+	}
+	hr = COM.S_OK;	//TODO: once post code is completed, remove this line if not required
+	if (headers != null) {
+		for (int i = 0; i < headers.length; i++) {
+			String current = headers[i];
+			if (current != null) {
+				int index = current.indexOf (':');
+				if (index != -1) {
+					String key = current.substring (0, index).trim ();
+					String value = current.substring (index + 1).trim ();
+					if (key.length () > 0 && value.length () > 0) {
+						int /*long*/ valueString = createBSTR (value);
+						if (key.equalsIgnoreCase (USER_AGENT)) {
+							/*
+							* Feature of WebKit.  The user-agent header value cannot be overridden
+							* here.  The workaround is to temporarily set the value on the WebView
+							* and then remove it after the loading of the request has begun.
+							*/
+							hr = webView.setCustomUserAgent (valueString);
+						} else {
+							int /*long*/ keyString = createBSTR (key);
+							hr = request.setValue (valueString, keyString);
+							COM.SysFreeString (keyString);
+						}
+						COM.SysFreeString (valueString);
+					}
+				}
+			}
+		}
+	}
+	if (hr == COM.S_OK) {
+		int /*long*/ urlString = createBSTR (url);
+		hr = request.setURL (urlString);
+		COM.SysFreeString (urlString);
+		if (hr == COM.S_OK) {
+			hr = frame.loadRequest (request.getAddress ());
+		}
+		webView.setCustomUserAgent (0);
+	}
+	frame.Release ();
+	request.Release ();
+	return hr == COM.S_OK;
+}
+
+boolean shouldClose () {
+	if (!jsEnabled) return true;
+
+	int /*long*/[] address = new int /*long*/[1];
+	int hr = webView.QueryInterface (WebKit_win32.IID_IWebViewPrivate, address);
+	if (hr != COM.S_OK || address[0] == 0) {
+		return false;
+	}
+	IWebViewPrivate webViewPrivate = new IWebViewPrivate (address[0]);
+	int[] result = new int[1];
+	/* This function will fire the before unload handler for a page */
+	webViewPrivate.shouldClose (result);
+	webViewPrivate.Release ();
+	return result[0] != 0;
+}
+
+public void stop () {
+	webFrameLoadDelegate.html = null;
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = webView.QueryInterface (WebKit_win32.IID_IWebIBActions, result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return;
+	}
+	IWebIBActions webIBActions = new IWebIBActions (result[0]);
+	webIBActions.stopLoading (webView.getAddress ());
+	webIBActions.Release ();
+}
+
+void initializeWebViewPreferences () {
+	/* 
+	 * Try to create separate preferences for each webview using different identifier for each webview. 
+	 * Otherwise all the webviews use the shared preferences.
+	 */
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebPreferences, 0, WebKit_win32.IID_IWebPreferences, result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		IWebPreferences preferences = new IWebPreferences (result[0]);
+		result[0] = 0;
+		hr = preferences.initWithIdentifier (createBSTR (String.valueOf (prefsIdentifier++)), result);
+		preferences.Release ();
+		if (hr == COM.S_OK && result[0] != 0) {
+			preferences = new IWebPreferences (result[0]);
+			webView.setPreferences (preferences.getAddress());
+			preferences.Release ();
+		}
+	}
+	
+	result[0] = 0;
+	hr = webView.preferences (result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		IWebPreferences preferences = new IWebPreferences (result[0]);
+		preferences.setJavaScriptEnabled (1);
+		preferences.setJavaScriptCanOpenWindowsAutomatically (1);
+		preferences.setJavaEnabled (0);	/* disable applets */
+		preferences.setTabsToLinks (1);
+		preferences.setFontSmoothing (WebKit_win32.FontSmoothingTypeWindows);
+		preferences.Release ();
+	}
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebPolicyDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebPolicyDelegate.java
new file mode 100644
index 0000000..0469ec4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebPolicyDelegate.java	
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.webkit.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.widgets.*;
+
+class WebPolicyDelegate {
+	COMObject iWebPolicyDelegate;
+	int refCount = 0;
+
+	Browser browser;
+
+WebPolicyDelegate (Browser browser) {
+	createCOMInterfaces ();
+	this.browser = browser;
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	iWebPolicyDelegate = new COMObject (new int[] {2, 0, 0, 5, 5, 5, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return decidePolicyForNavigationAction (args[0], args[1], args[2], args[3], args[4]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return decidePolicyForNewWindowAction (args[0], args[1], args[2], args[3], args[4]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return decidePolicyForMIMEType (args[0], args[1], args[2], args[3], args[4]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return unableToImplementPolicyWithError (args[0], args[1], args[2]);}
+	};
+}
+
+int decidePolicyForMIMEType (int /*long*/ webView, int /*long*/ type, int /*long*/ request, int /*long*/ frame, int /*long*/ listener) {
+	IWebView iwebView = new IWebView (webView);
+	int[] canShow = new int[1];
+	iwebView.canShowMIMEType (type, canShow);
+	IWebPolicyDecisionListener pdListener = new IWebPolicyDecisionListener (listener);
+	if (canShow[0] != 0) {
+		pdListener.use ();
+	} else {
+		pdListener.download ();
+	}
+	return COM.S_OK;
+}
+
+int decidePolicyForNavigationAction (int /*long*/ webView, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frame, int /*long*/ listener) {
+	IWebURLRequest iwebUrlRequest = new IWebURLRequest (request);
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = iwebUrlRequest.URL (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	String url = WebKit.extractBSTR (result[0]);
+	COM.SysFreeString (result[0]);
+	IWebPolicyDecisionListener pdListener = new IWebPolicyDecisionListener (listener);
+	WebKit webKit = (WebKit)browser.webBrowser;
+	if (webKit.loadingText) {
+		/* 
+		 * WebKit is auto-navigating to about:blank in response to a loadHTMLString()
+		 * invocation.  This navigate should always proceed without sending an event
+		 * since it is preceded by an explicit navigate to about:blank in setText().
+		 */
+		pdListener.use ();
+		return COM.S_OK;
+	}
+	if (url.length () == 0) {
+		pdListener.ignore ();
+		return COM.S_OK;
+	}
+	if (url.startsWith (WebKit.PROTOCOL_FILE) && webKit.getUrl ().startsWith (WebKit.ABOUT_BLANK) && webKit.untrustedText) {
+		/* indicates an attempt to access the local file system from untrusted content */
+		pdListener.ignore ();
+		return COM.S_OK;
+	}
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url.equals (WebKit.URI_FILEROOT)) {
+		url = WebKit.ABOUT_BLANK;
+	} else {
+		int length = WebKit.URI_FILEROOT.length ();
+		if (url.startsWith (WebKit.URI_FILEROOT) && url.charAt (length) == '#') {
+			url = WebKit.ABOUT_BLANK + url.substring (length);
+		}
+	}
+	LocationEvent newEvent = new LocationEvent (browser);
+	newEvent.display = browser.getDisplay ();
+	newEvent.widget = browser;
+	newEvent.location = url;
+	newEvent.doit = true;
+	LocationListener[] locationListeners = webKit.locationListeners;
+	if (locationListeners != null) {
+		for (int i = 0; i < locationListeners.length; i++) {
+			locationListeners[i].changing (newEvent);
+		}
+	}
+	if (newEvent.doit) {
+		if (webKit.jsEnabledChanged) {
+			webKit.jsEnabledChanged = false;
+			IWebView view = new IWebView (webView);
+			result[0] = 0;
+			hr = view.preferences (result);
+			if (hr == COM.S_OK && result[0] != 0) {
+				IWebPreferences preferences = new IWebPreferences (result[0]);
+				hr = preferences.setJavaScriptEnabled (webKit.jsEnabled ? 1 : 0);
+				view.setPreferences (preferences.getAddress());
+				preferences.Release ();
+			}
+		}
+		pdListener.use ();
+		webKit.lastNavigateURL = url;
+	} else {
+		pdListener.ignore ();
+	}
+	return COM.S_OK;
+}
+
+int decidePolicyForNewWindowAction (int /*long*/ webView, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frameName, int /*long*/ listener) {
+	IWebPolicyDecisionListener pdListener = new IWebPolicyDecisionListener (listener);
+	pdListener.use();
+	return COM.S_OK;
+}
+
+protected void disposeCOMInterfaces () {
+	if (iWebPolicyDelegate != null) {
+		iWebPolicyDelegate.dispose ();
+		iWebPolicyDelegate = null;
+	}	
+}
+
+int /*long*/ getAddress () {
+	return iWebPolicyDelegate.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
+	GUID guid = new GUID ();
+	COM.MoveMemory (guid, riid, GUID.sizeof);
+
+	if (COM.IsEqualGUID (guid, COM.IIDIUnknown)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebPolicyDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebPolicyDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+	if (COM.IsEqualGUID (guid, WebKit_win32.IID_IWebPolicyDelegate)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebPolicyDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebPolicyDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+
+	COM.MoveMemory (ppvObject, new int /*long*/[] {0}, OS.PTR_SIZEOF);
+	return COM.E_NOINTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) {
+		disposeCOMInterfaces ();
+	}
+	return refCount;
+}
+
+int unableToImplementPolicyWithError (int /*long*/ webView, int /*long*/ error, int /*long*/ frame) {
+	if (browser.isDisposed ()) return COM.S_OK;
+
+	IWebError iweberror = new IWebError (error);
+	String failingURL = null;
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = iweberror.failingURL (result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		failingURL = WebKit.extractBSTR (result[0]);
+		COM.SysFreeString (result[0]);
+	}
+	result[0] = 0;
+	hr = iweberror.localizedDescription (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+    	return COM.S_OK;
+    }
+	String description = WebKit.extractBSTR (result[0]);
+	COM.SysFreeString (result[0]);
+
+	String message = failingURL != null ? failingURL + "\n\n" : ""; //$NON-NLS-1$ //$NON-NLS-2$
+	message += Compatibility.getMessage ("SWT_Page_Load_Failed", new Object[] {description}); //$NON-NLS-1$
+	MessageBox messageBox = new MessageBox (browser.getShell (), SWT.OK | SWT.ICON_ERROR);
+	messageBox.setMessage (message);
+	messageBox.open ();
+	return COM.S_OK;
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebResourceLoadDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebResourceLoadDelegate.java
new file mode 100644
index 0000000..eb4502e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebResourceLoadDelegate.java	
@@ -0,0 +1,369 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.webkit.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class WebResourceLoadDelegate {
+	COMObject iWebResourceLoadDelegate;
+	int refCount = 0;
+
+	Browser browser;
+	String postData;
+
+WebResourceLoadDelegate (Browser browser) {
+	createCOMInterfaces ();
+	this.browser = browser;
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	iWebResourceLoadDelegate = new COMObject (new int[] {2, 0, 0, 4, 6, 4, 4, 4, 4, 3, 4, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return identifierForInitialRequest (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return willSendRequest (args[0], args[1], args[2], args[3], args[4], args[5]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return didReceiveAuthenticationChallenge (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method7 (int /*long*/[] args) {return COM.S_OK;}
+		public int /*long*/ method8 (int /*long*/[] args) {return COM.S_OK;}
+		public int /*long*/ method9 (int /*long*/[] args) {return COM.S_OK;}
+		public int /*long*/ method10 (int /*long*/[] args) {return COM.S_OK;}
+		public int /*long*/ method11 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+	};
+}
+
+int didReceiveAuthenticationChallenge (int /*long*/ webView, int /*long*/ identifier, int /*long*/ challenge, int /*long*/ dataSource) {
+	IWebURLAuthenticationChallenge authenticationChallenge = new IWebURLAuthenticationChallenge (challenge);
+	/*
+	 * Do not invoke the listeners if this challenge has been failed too many
+	 * times because a listener is likely giving incorrect credentials repeatedly
+	 * and will do so indefinitely.
+	 */
+	int[] count = new int[1];
+	int hr = authenticationChallenge.previousFailureCount (count);
+	int /*long*/[] result = new int /*long*/[1];
+	if (hr == COM.S_OK && count[0] < 3) {
+		AuthenticationListener[] authenticationListeners = browser.webBrowser.authenticationListeners;
+		for (int i = 0; i < authenticationListeners.length; i++) {
+			AuthenticationEvent event = new AuthenticationEvent (browser);
+			event.location = ((WebKit)browser.webBrowser).lastNavigateURL;
+			authenticationListeners[i].authenticate (event);
+			if (!event.doit) {
+				hr = authenticationChallenge.sender (result);
+				if (hr != COM.S_OK || result[0] == 0) {
+					return COM.S_OK;
+				}
+				IWebURLAuthenticationChallengeSender challengeSender = new IWebURLAuthenticationChallengeSender (result[0]);
+				challengeSender.cancelAuthenticationChallenge (challenge);
+				challengeSender.Release ();
+				return COM.S_OK;
+			}
+			if (event.user != null && event.password != null) {
+				hr = authenticationChallenge.sender (result);
+				if (hr != COM.S_OK || result[0] == 0) continue;
+
+				IWebURLAuthenticationChallengeSender challengeSender = new IWebURLAuthenticationChallengeSender (result[0]);
+				result[0] = 0;
+				hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebURLCredential, 0, WebKit_win32.IID_IWebURLCredential, result);
+				if (hr == COM.S_OK && result[0] != 0) {
+					IWebURLCredential credential = new IWebURLCredential (result[0]);
+					int /*long*/ user = WebKit.createBSTR (event.user);
+					int /*long*/ password = WebKit.createBSTR (event.password);
+					credential.initWithUser (user, password, WebKit_win32.WebURLCredentialPersistenceForSession);
+					challengeSender.useCredential (credential.getAddress (), challenge);
+					credential.Release ();
+				}
+				challengeSender.Release ();
+				return COM.S_OK;
+			}
+		}
+	}
+
+	/* show a custom authentication dialog */
+
+	String[] userReturn = new String[1], passwordReturn = new String[1];
+	result[0] = 0;
+	hr = authenticationChallenge.proposedCredential (result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		IWebURLCredential proposedCredential = new IWebURLCredential(result[0]);
+		result[0] = 0;
+		hr = proposedCredential.user (result);
+		if (hr == COM.S_OK && result[0] != 0) {
+			userReturn[0] = WebKit.extractBSTR (result[0]);
+			COM.SysFreeString (result[0]);
+			int[] value = new int[1];
+			hr = proposedCredential.hasPassword (value);
+			if (hr == COM.S_OK && value[0] != 0) {
+				result[0] = 0;
+				hr = proposedCredential.password (result);
+				if (hr == COM.S_OK && result[0] != 0) {
+					passwordReturn[0] = WebKit.extractBSTR (result[0]);
+					COM.SysFreeString (result[0]);
+				}
+			}
+		}
+		proposedCredential.Release ();
+	}
+	result[0] = 0;
+	hr = authenticationChallenge.protectionSpace (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+    }
+	IWebURLProtectionSpace space = new IWebURLProtectionSpace (result[0]);
+	String host = null, realm = null;
+	result[0] = 0;
+	hr = space.host (result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		host = WebKit.extractBSTR (result[0]);
+		COM.SysFreeString (result[0]);
+		int[] port = new int[1];
+		hr = space.port (port);
+		if (hr == COM.S_OK) {
+			host += ":" + port[0]; //$NON-NLS-1$
+			result[0] = 0;
+			hr = space.realm (result);
+			if (hr == COM.S_OK && result[0] != 0) {
+				realm = WebKit.extractBSTR (result[0]);
+				COM.SysFreeString (result[0]);
+		    }
+		}
+	}
+	space.Release ();
+	boolean response = showAuthenticationDialog (userReturn, passwordReturn, host, realm);
+	result[0] = 0;
+	hr = authenticationChallenge.sender (result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	IWebURLAuthenticationChallengeSender challengeSender = new IWebURLAuthenticationChallengeSender (result[0]);
+	if (!response) {
+		challengeSender.cancelAuthenticationChallenge (challenge);
+		challengeSender.Release ();
+		return COM.S_OK;
+	}
+	result[0] = 0;
+	hr = WebKit_win32.WebKitCreateInstance (WebKit_win32.CLSID_WebURLCredential, 0, WebKit_win32.IID_IWebURLCredential, result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		IWebURLCredential credential = new IWebURLCredential (result[0]);
+		int /*long*/ user = WebKit.createBSTR (userReturn[0]);
+		int /*long*/ password = WebKit.createBSTR (passwordReturn[0]);
+		credential.initWithUser (user, password, WebKit_win32.WebURLCredentialPersistenceForSession);
+		challengeSender.useCredential (credential.getAddress (), challenge);
+		credential.Release ();
+	}
+	challengeSender.Release ();
+	return COM.S_OK;
+}
+
+void disposeCOMInterfaces () {
+	if (iWebResourceLoadDelegate != null) {
+		iWebResourceLoadDelegate.dispose ();
+		iWebResourceLoadDelegate = null;
+	}	
+}
+
+int /*long*/ getAddress () {
+	return iWebResourceLoadDelegate.getAddress ();
+}
+
+int identifierForInitialRequest (int /*long*/ webView, int /*long*/ request, int /*long*/ dataSource, int /*long*/ identifier) {
+	if (browser.isDisposed ()) return COM.S_OK;
+
+	/* send progress event iff request is for top-level frame */
+
+	IWebDataSource source = new IWebDataSource (dataSource);
+	int /*long*/[] frame = new int /*long*/[1];
+	int hr = source.webFrame (frame);
+	if (hr != COM.S_OK || frame[0] == 0) {
+    	return COM.S_OK;
+    }
+	new IWebFrame (frame[0]).Release ();
+	int /*long*/[] mainFrame = new int /*long*/[1];
+	IWebView iWebView = new IWebView (webView);
+	hr = iWebView.mainFrame (mainFrame);
+	if (hr != COM.S_OK || mainFrame[0] == 0) {
+    	return COM.S_OK;
+    }
+	new IWebFrame (mainFrame[0]).Release ();
+	if (frame[0] == mainFrame[0]) {
+		int /*long*/ ptr = OS.malloc (8);
+		iWebView.estimatedProgress (ptr);
+		double[] estimate = new double[1];
+		OS.MoveMemory (estimate, ptr, 8);
+		OS.free (ptr);
+		int progress = (int)(estimate[0] * 100);
+
+		ProgressEvent progressEvent = new ProgressEvent (browser);
+		progressEvent.display = browser.getDisplay ();
+		progressEvent.widget = browser;
+		progressEvent.current = progress;
+		progressEvent.total = Math.max (progress, WebKit.MAX_PROGRESS);
+		ProgressListener[] progressListeners = browser.webBrowser.progressListeners;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].changed (progressEvent);
+		}
+	}
+	return COM.S_OK;
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
+	GUID guid = new GUID ();
+	COM.MoveMemory (guid, riid, GUID.sizeof);
+
+	if (COM.IsEqualGUID (guid, COM.IIDIUnknown)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebResourceLoadDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebResourceLoadDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+	if (COM.IsEqualGUID (guid, WebKit_win32.IID_IWebResourceLoadDelegate)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebResourceLoadDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebResourceLoadDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+
+	COM.MoveMemory (ppvObject, new int /*long*/[] {0}, OS.PTR_SIZEOF);
+	return COM.E_NOINTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) {
+		disposeCOMInterfaces ();
+	}
+	return refCount;
+}
+
+boolean showAuthenticationDialog (final String[] user, final String[] password, String host, String realm) {
+	Shell parent = browser.getShell ();
+	final Shell shell = new Shell (parent);
+	shell.setLayout (new GridLayout ());
+	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
+	shell.setText (title);
+	Label label = new Label (shell, SWT.WRAP);
+	label.setText (Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host})); //$NON-NLS-1$
+
+	GridData data = new GridData ();
+	Monitor monitor = browser.getMonitor ();
+	int maxWidth = monitor.getBounds ().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	data.widthHint = Math.min (width, maxWidth);
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	label.setLayoutData (data);
+
+	Label userLabel = new Label (shell, SWT.NONE);
+	userLabel.setText (SWT.getMessage ("SWT_Username")); //$NON-NLS-1$
+
+	final Text userText = new Text (shell, SWT.BORDER);
+	if (user[0] != null) userText.setText (user[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	userText.setLayoutData (data);
+
+	Label passwordLabel = new Label (shell, SWT.NONE);
+	passwordLabel.setText (SWT.getMessage ("SWT_Password")); //$NON-NLS-1$
+
+	final Text passwordText = new Text (shell, SWT.PASSWORD | SWT.BORDER);
+	if (password[0] != null) passwordText.setText (password[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	passwordText.setLayoutData (data);
+
+	final boolean[] result = new boolean[1];
+	final Button[] buttons = new Button[2];
+	Listener listener = new Listener () {
+		public void handleEvent (Event event) {
+			user[0] = userText.getText ();
+			password[0] = passwordText.getText ();
+			result[0] = event.widget == buttons[1];
+			shell.close ();
+		}	
+	};
+
+	Composite composite = new Composite (shell, SWT.NONE);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.END;
+	composite.setLayoutData (data);
+	composite.setLayout (new GridLayout (2, true));
+	buttons[0] = new Button (composite, SWT.PUSH);
+	buttons[0].setText (SWT.getMessage ("SWT_Cancel")); //$NON-NLS-1$
+	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[0].addListener (SWT.Selection, listener);
+	buttons[1] = new Button (composite, SWT.PUSH);
+	buttons[1].setText (SWT.getMessage ("SWT_OK")); //$NON-NLS-1$
+	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[1].addListener (SWT.Selection, listener);
+
+	shell.setDefaultButton (buttons[1]);
+	shell.pack ();
+	Rectangle parentSize = parent.getBounds ();
+	Rectangle shellSize = shell.getBounds ();
+	int x = parent.getLocation().x + (parentSize.width - shellSize.width) / 2;
+	int y = parent.getLocation().y + (parentSize.height - shellSize.height) / 2;
+	shell.setLocation (x, y);
+	shell.open ();
+	Display display = browser.getDisplay ();
+	while (!shell.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+
+	return result[0];
+}
+
+int willSendRequest (int /*long*/ webView, int /*long*/ identifier, int /*long*/ request, int /*long*/ redirectResponse, int /*long*/ dataSource, int /*long*/ newRequest) {
+	IWebURLRequest req = new IWebURLRequest (request);
+	int /*long*/[] result = new int /*long*/ [1];
+	int hr = req.URL (result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		String url = WebKit.extractBSTR (result[0]);
+		COM.SysFreeString (result[0]);
+		/*
+		 * file://c|/ doesn't work on Webkit but works on other browsers. 
+		 * So change file:// to file:/// to be consistent
+		 */
+		if (url.startsWith (WebKit.PROTOCOL_FILE) && !url.startsWith (WebKit.URI_FILEROOT)) {
+			int length = WebKit.PROTOCOL_FILE.length ();
+			url = WebKit.URI_FILEROOT + url.substring (length);
+			result[0] = 0;
+
+			hr = req.mutableCopy (result);
+			if (hr == COM.S_OK && result[0] != 0) {
+				IWebMutableURLRequest mReq = new IWebMutableURLRequest (result[0]);
+				int /*long*/ urlString = WebKit.createBSTR (url);
+				mReq.setURL (urlString);
+				OS.MoveMemory (newRequest, new int /*long*/[] {mReq.getAddress ()}, C.PTR_SIZEOF);
+				return COM.S_OK;
+			}
+		}
+	}
+	req.AddRef ();
+	OS.MoveMemory (newRequest, new int /*long*/[] {request}, C.PTR_SIZEOF);
+	return COM.S_OK;
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebUIDelegate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebUIDelegate.java
new file mode 100644
index 0000000..7f9ee9c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebUIDelegate.java	
@@ -0,0 +1,657 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.webkit.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class WebUIDelegate {
+	COMObject iWebUIDelegate;
+	int refCount = 0;
+
+	String lastHoveredLinkURL;
+	Browser browser;
+	Point size;
+	Point location;
+	boolean menuBar = true, toolBar = true, statusBar = true;
+	boolean prompt = true;
+
+WebUIDelegate (Browser browser) {
+	createCOMInterfaces ();
+	this.browser = browser;
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+int canTakeFocus (int /*long*/ sender, int forward, int /*long*/ result) {
+	OS.MoveMemory (result, new int[] {1}, 4); /* BOOL */
+	return COM.S_OK;
+}
+
+int contextMenuItemsForElement (int /*long*/ sender, int /*long*/ element, int /*long*/ defaultItemsHMenu, int /*long*/ resultHMenu) {
+	Point pt = browser.getDisplay ().getCursorLocation ();
+	Event event = new Event ();
+	event.x = pt.x;
+	event.y = pt.y;
+	browser.notifyListeners (SWT.MenuDetect, event);
+	if (event.doit) {
+		Menu menu = browser.getMenu ();
+		if (menu != null && !menu.isDisposed ()) {
+			if (event.x != pt.x || event.y != pt.y) {
+				menu.setLocation (event.x, event.y);
+			}
+			menu.setVisible (true);
+		} else {
+			OS.MoveMemory (resultHMenu, new int /*long*/[] {defaultItemsHMenu}, C.PTR_SIZEOF);
+			return COM.S_OK;
+		}
+	}
+	OS.MoveMemory (resultHMenu, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return COM.S_OK;
+}
+
+void createCOMInterfaces () {
+	iWebUIDelegate = new COMObject (new int[] {2, 0, 0, 3, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 2, 3, 4, 4, 3, 3, 3, 3, 5, 3, 1, 3, 2, 2, 2, 2, 3, 2, 3, 1, 1, 0, 0, 1, 1, 2, 2, 2, 2, 3, 5, 2, 2, 3, 1, 2, 2, 4, 10, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args)  {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args)  {return createWebViewWithRequest (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args)  {return webViewShow (args[0]);}
+		public int /*long*/ method5 (int /*long*/[] args)  {return webViewClose (args[0]);}
+		public int /*long*/ method6 (int /*long*/[] args)  {return COM.E_NOTIMPL;}
+		public int /*long*/ method7 (int /*long*/[] args)  {return COM.E_NOTIMPL;}
+		public int /*long*/ method8 (int /*long*/[] args)  {return COM.E_NOTIMPL;}
+		public int /*long*/ method9 (int /*long*/[] args)  {return COM.E_NOTIMPL;}
+		public int /*long*/ method10 (int /*long*/[] args) {return setStatusText (args[0], args[1]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method12 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method13 (int /*long*/[] args) {return setToolbarsVisible (args[0], (int)/*64*/args[1]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method15 (int /*long*/[] args) {return setStatusBarVisible (args[0], (int)/*64*/args[1]);}
+		public int /*long*/ method16 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method17 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method18 (int /*long*/[] args) {return setFrame (args[0], args[1]);}
+		public int /*long*/ method19 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method20 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method21 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method22 (int /*long*/[] args) {return runJavaScriptAlertPanelWithMessage (args[0], args[1]);}
+		public int /*long*/ method23 (int /*long*/[] args) {return runJavaScriptConfirmPanelWithMessage (args[0], args[1], args[2]);}
+		public int /*long*/ method24 (int /*long*/[] args) {return runJavaScriptTextInputPanelWithPrompt (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method25 (int /*long*/[] args) {return runBeforeUnloadConfirmPanelWithMessage (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method26 (int /*long*/[] args) {return runOpenPanelForFileButtonWithResultListener (args[0], args[1]);}
+		public int /*long*/ method27 (int /*long*/[] args) {return mouseDidMoveOverElement (args[0], args[1], (int)/*64*/args[2]);}
+		public int /*long*/ method28 (int /*long*/[] args) {return contextMenuItemsForElement (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method29 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method30 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method31 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method32 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method33 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method34 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method35 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method36 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method37 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method38 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method39 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method40 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method41 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method42 (int /*long*/[] args) {return canTakeFocus (args[0], (int)/*64*/args[1], args[2]);}
+		public int /*long*/ method43 (int /*long*/[] args) {return takeFocus (args[0], (int)/*64*/args[1]);}
+		public int /*long*/ method44 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method45 (int /*long*/[] args) {return COM.S_OK;}
+		public int /*long*/ method46 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method47 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method48 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method49 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method50 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method51 (int /*long*/[] args) {return printFrame (args[0], args[1]);}
+		public int /*long*/ method52 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method53 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method54 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method55 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method56 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method57 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method58 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method59 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method60 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method61 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method62 (int /*long*/[] args) {return setMenuBarVisible (args[0], (int)/*64*/args[1]);}
+		public int /*long*/ method63 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method64 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+		public int /*long*/ method65 (int /*long*/[] args) {return COM.E_NOTIMPL;}
+	};
+}
+
+int createWebViewWithRequest (int /*long*/ sender, int /*long*/ request, int /*long*/ webView) {
+	WindowEvent newEvent = new WindowEvent (browser);
+	newEvent.display = browser.getDisplay ();
+	newEvent.widget = browser;
+	newEvent.required = true;
+	OpenWindowListener[] openWindowListeners = browser.webBrowser.openWindowListeners;
+	for (int i = 0; i < openWindowListeners.length; i++) {
+		openWindowListeners[i].open (newEvent);
+	}
+	IWebView iwebview = null;
+	Browser browser = null;
+	if (newEvent.browser != null && newEvent.browser.webBrowser instanceof WebKit) {
+		browser = newEvent.browser;
+	}
+	if (browser != null && !browser.isDisposed ()) {
+		iwebview = ((WebKit)browser.webBrowser).webView;
+		OS.MoveMemory (webView, new int /*long*/[] {iwebview.getAddress ()}, OS.PTR_SIZEOF);
+		if (request != 0) {
+			IWebURLRequest req = new IWebURLRequest (request);
+			int /*long*/[] result = new int /*long*/[1];
+			int hr = req.URL (result);
+			if (hr != COM.S_OK || result[0] == 0) {
+				return COM.S_OK;
+			}
+			String sUrl = WebKit.extractBSTR (result[0]);
+			COM.SysFreeString (result[0]);
+			if (sUrl.length () != 0) {
+				result[0] = 0;
+				hr = iwebview.mainFrame (result);
+				if (hr != COM.S_OK || result[0] == 0) {
+					return COM.S_OK;
+				}
+				IWebFrame mainFrame = new IWebFrame (result[0]);
+				mainFrame.loadRequest (req.getAddress ());
+				mainFrame.Release ();
+			}
+		}
+		return COM.S_OK;
+	}
+	return COM.E_NOTIMPL;
+}
+
+protected void disposeCOMInterfaces () {
+	if (iWebUIDelegate != null) {
+		iWebUIDelegate.dispose ();
+		iWebUIDelegate = null;
+	}	
+}
+
+int /*long*/ getAddress () {
+	return iWebUIDelegate.getAddress ();
+}
+
+int mouseDidMoveOverElement (int /*long*/ sender, int /*long*/ elementInformation, int modifierFlags) {
+	if (elementInformation == 0) return COM.S_OK;
+
+	IPropertyBag info = new IPropertyBag (elementInformation);
+	int /*long*/ key = WebKit.createBSTR ("WebElementLinkURLKey"); //$NON-NLS-N$
+	int /*long*/ hHeap = OS.GetProcessHeap ();
+	int /*long*/ resultPtr = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, VARIANT.sizeof);
+	int hr = info.Read (key, resultPtr, null);
+	if (hr != COM.S_OK || resultPtr == 0) {
+		return COM.S_OK;
+	}
+	String value = null;
+	VARIANT v = new VARIANT ();
+	COM.MoveMemory (v, resultPtr, VARIANT.sizeof);
+	if (v.vt == COM.VT_BSTR) value = WebKit.extractBSTR (v.lVal);
+	OS.HeapFree (hHeap, 0, resultPtr);
+	StatusTextListener[] statusTextListeners = browser.webBrowser.statusTextListeners;
+	if (value == null || value.length () == 0) {
+		/* not currently over a link */
+		if (lastHoveredLinkURL == null) return COM.S_OK;
+		lastHoveredLinkURL = null;
+		StatusTextEvent statusText = new StatusTextEvent (browser);
+		statusText.display = browser.getDisplay ();
+		statusText.widget = browser;
+		statusText.text = "";	//$NON-NLS-1$
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed (statusText);
+		}
+		return COM.S_OK;
+	}
+	if (value.equals (lastHoveredLinkURL)) return COM.S_OK;
+	lastHoveredLinkURL = value;
+	StatusTextEvent statusText = new StatusTextEvent (browser);
+	statusText.display = browser.getDisplay ();
+	statusText.widget = browser;
+	statusText.text = value;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed (statusText);
+	}
+	return COM.S_OK;
+}
+
+int printFrame (int /*long*/ webView, int /*long*/ frame) {
+	IWebFrame iwebFrame = new IWebFrame (frame);
+	PRINTDLG pd = new PRINTDLG ();
+	pd.lStructSize = PRINTDLG.sizeof;
+	pd.Flags = OS.PD_RETURNDC;
+	if (!OS.PrintDlg (pd)) return COM.S_OK;
+	int /*long*/ printDC = pd.hDC;
+
+	int /*long*/[] result = new int /*long*/[1];
+	int hr = iwebFrame.QueryInterface (WebKit_win32.IID_IWebFramePrivate, result);
+	if (hr != COM.S_OK || result[0] == 0) {
+		return COM.S_OK;
+	}
+	IWebFramePrivate privateFrame = new IWebFramePrivate (result[0]);
+	privateFrame.setInPrintingMode (1, printDC);
+	int[] count = new int[1];
+	hr = privateFrame.getPrintedPageCount (printDC, count);
+	if (hr != COM.S_OK || count[0] == 0) {
+		privateFrame.Release ();
+		return COM.S_OK;
+	}
+	int pageCount = count[0];
+	String jobName = null;
+	result[0] = 0;
+	hr = iwebFrame.dataSource (result);
+	if (hr == COM.S_OK && result[0] != 0) {
+		IWebDataSource dataSource = new IWebDataSource (result[0]);
+		result[0] = 0;
+		hr = dataSource.pageTitle (result);
+		dataSource.Release ();
+		if (hr == COM.S_OK && result[0] != 0) {
+			jobName = WebKit.extractBSTR (result[0]);
+			COM.SysFreeString (result[0]);
+		}
+	}
+	DOCINFO di = new DOCINFO ();
+	di.cbSize = DOCINFO.sizeof;
+	int /*long*/ hHeap = OS.GetProcessHeap ();
+	int /*long*/ lpszDocName = 0;
+	if (jobName != null && jobName.length () != 0) {
+		/* Use the character encoding for the default locale */
+		TCHAR buffer = new TCHAR (0, jobName, true);
+		int byteCount = buffer.length () * TCHAR.sizeof;
+		lpszDocName = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+		OS.MoveMemory (lpszDocName, buffer, byteCount);
+		di.lpszDocName = lpszDocName;
+	}
+	int rc = OS.StartDoc (printDC, di);
+	if (lpszDocName != 0) OS.HeapFree (hHeap, 0, lpszDocName);
+	if (rc >= 0) {
+		for (int i = 0; i < pageCount; i++) {
+			OS.StartPage (printDC);
+			privateFrame.spoolPages (printDC, i, i, null);
+			OS.EndPage (printDC);
+		}
+		privateFrame.setInPrintingMode (0, printDC);
+		OS.EndDoc (printDC);
+	}
+	privateFrame.Release ();
+	return COM.S_OK;
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
+	GUID guid = new GUID ();
+	COM.MoveMemory (guid, riid, GUID.sizeof);
+
+	if (COM.IsEqualGUID (guid, COM.IIDIUnknown)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebUIDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebUIDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+	if (COM.IsEqualGUID (guid, WebKit_win32.IID_IWebUIDelegate)) {
+		COM.MoveMemory (ppvObject, new int /*long*/[] {iWebUIDelegate.getAddress ()}, OS.PTR_SIZEOF);
+		new IUnknown (iWebUIDelegate.getAddress ()).AddRef ();
+		return COM.S_OK;
+	}
+
+	COM.MoveMemory (ppvObject, new int /*long*/[] {0}, OS.PTR_SIZEOF);
+	return COM.E_NOINTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) {
+		disposeCOMInterfaces ();
+	}
+	return refCount;
+}
+
+int runBeforeUnloadConfirmPanelWithMessage (int /*long*/ sender, int /*long*/ message, int /*long*/ initiatedByFrame, int /*long*/ result) {
+	if (!prompt) return COM.S_OK;
+
+	Shell parent = browser.getShell ();
+	String string = WebKit.extractBSTR (message);
+	StringBuffer text = new StringBuffer (Compatibility.getMessage ("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
+	text.append ("\n\n"); //$NON-NLS-1$
+	text.append (string);
+	text.append ("\n\n"); //$NON-NLS-1$
+	text.append (Compatibility.getMessage ("SWT_OnBeforeUnload_Message2")); //$NON-NLS-1$
+	MessageBox box = new MessageBox (parent, SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
+	box.setMessage (text.toString ());
+	int[] response = new int[1];
+	response[0] = box.open () == SWT.OK ? 1 : 0;
+	OS.MoveMemory (result, response, 4); /* BOOL */
+	return COM.S_OK;
+}
+
+int runJavaScriptAlertPanelWithMessage (int /*long*/ sender, int /*long*/ message) {
+	String messageString = WebKit.extractBSTR (message);
+	showAlertMessage ("Javascript", messageString);	//$NON-NLS-1$
+	return COM.S_OK;
+}
+
+int runJavaScriptConfirmPanelWithMessage (int /*long*/ sender, int /*long*/ message, int /*long*/ result) {
+	String messageString = WebKit.extractBSTR (message);
+	int[] response = new int[1];
+	response[0] = showConfirmPanel ("Javascript", messageString) == SWT.OK ? 1 : 0;	//$NON-NLS-1$
+	OS.MoveMemory (result, response, 4); /* BOOL */
+	return COM.S_OK;
+}
+
+int runJavaScriptTextInputPanelWithPrompt (int /*long*/ sender, int /*long*/ message, int /*long*/ defaultText, int /*long*/ result) {
+	String messageString = WebKit.extractBSTR (message);
+	String defaultTextString = WebKit.extractBSTR (defaultText);
+	String resultString = showTextPrompter ("Javascript", messageString, defaultTextString); //$NON-NLS-1$
+	int /*long*/[] response = new int /*long*/[1];
+	if (resultString != null) {
+		response[0] = WebKit.createBSTR (resultString);
+	}
+	OS.MoveMemory (result, response, C.PTR_SIZEOF);
+	return COM.S_OK;
+}
+
+int runOpenPanelForFileButtonWithResultListener (int /*long*/ sender, int /*long*/ resultListener) {
+	Shell parent = browser.getShell ();
+	FileDialog dialog = new FileDialog (parent, SWT.NONE);
+	String result = dialog.open ();
+	IWebOpenPanelResultListener listener = new IWebOpenPanelResultListener (resultListener);
+	if (result == null) {
+		listener.cancel ();
+	} else {
+		listener.chooseFilename (WebKit.createBSTR (result));
+	}
+	return COM.S_OK;
+}
+
+int setFrame (int /*long*/ sender, int /*long*/ frame) {
+	RECT rect = new RECT ();
+	COM.MoveMemory (rect, frame, RECT.sizeof);
+	/* convert to SWT system coordinates */
+	location = browser.getDisplay ().map (browser, null, rect.left, rect.top);
+	int x = rect.right - rect.left;
+	int y = rect.bottom - rect.top;
+	if (y < 0 || x < 0 || (x == 0 && y == 0)) return COM.S_OK;
+	size = new Point (x, y);
+	return COM.S_OK;
+}
+
+int setMenuBarVisible (int /*long*/ sender, int visible) {
+	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
+	menuBar = visible == 1;
+	return COM.S_OK;
+}
+
+int setStatusBarVisible (int /*long*/ sender, int visible) {
+	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
+	statusBar = visible == 1;
+	return COM.S_OK;
+}
+
+int setStatusText (int /*long*/ sender, int /*long*/ text) {
+	String statusText = WebKit.extractBSTR (text);
+	if (statusText.length () == 0) return COM.S_OK;
+	StatusTextEvent statusTextEvent = new StatusTextEvent (browser);
+	statusTextEvent.display = browser.getDisplay ();
+	statusTextEvent.widget = browser;
+	statusTextEvent.text = statusText;
+	StatusTextListener[] statusTextListeners = browser.webBrowser.statusTextListeners;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed (statusTextEvent);
+	}
+	return COM.S_OK;
+}
+
+int setToolbarsVisible (int /*long*/ sender, int visible) {
+	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
+	toolBar = visible == 1;
+	return COM.S_OK;
+}
+
+void showAlertMessage (String title, String message) {
+	Shell parent = browser.getShell ();
+	final Shell dialog = new Shell (parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+	GridLayout layout = new GridLayout (2, false);
+	layout.horizontalSpacing = 10;
+	layout.verticalSpacing = 20;
+	layout.marginWidth = layout.marginHeight = 10;
+	dialog.setLayout (layout);
+	dialog.setText (title);
+
+	Label label = new Label (dialog, SWT.NONE);
+	Image image = dialog.getDisplay ().getSystemImage (SWT.ICON_WARNING);
+	label.setImage (image);
+
+	label = new Label (dialog, SWT.WRAP);
+	label.setText (message);
+	Monitor monitor = parent.getMonitor ();
+	int maxWidth = monitor.getBounds().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	GridData data = new GridData (SWT.FILL, SWT.CENTER, true, false);
+	data.widthHint = Math.min (width, maxWidth);
+	label.setLayoutData (data);
+
+	Button ok = new Button (dialog, SWT.PUSH);
+	ok.setText (SWT.getMessage ("SWT_OK")); //$NON-NLS-1$
+	width = ok.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	GridData layoutData = new GridData ();
+	layoutData.horizontalAlignment = SWT.CENTER;
+	layoutData.verticalAlignment = SWT.CENTER;
+	layoutData.horizontalSpan = 2;
+	layoutData.widthHint = Math.max (width, 75);
+	ok.setLayoutData (layoutData);
+
+	ok.addSelectionListener (new SelectionAdapter () {
+		public void widgetSelected (SelectionEvent e) {
+			dialog.dispose ();
+		}
+	});
+	
+	dialog.setDefaultButton (ok);
+	dialog.pack ();
+	Rectangle parentSize = parent.getBounds ();
+	Rectangle dialogSize = dialog.getBounds ();
+	int x = parent.getLocation ().x + (parentSize.width - dialogSize.width) / 2;
+	int y = parent.getLocation ().y + (parentSize.height - dialogSize.height) / 2;
+	dialog.setLocation (x, y);
+	dialog.open ();
+	Display display = browser.getDisplay ();
+	while (!dialog.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+}
+
+int showConfirmPanel (String title, String message) {
+	Shell parent = browser.getShell ();
+	final Shell dialog = new Shell (parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+	GridLayout layout = new GridLayout (2, false);
+	layout.horizontalSpacing = 10;
+	layout.verticalSpacing = 20;
+	layout.marginWidth = layout.marginHeight = 10;
+	dialog.setLayout (layout);
+	dialog.setText (title);
+
+	Label label = new Label (dialog, SWT.NONE);
+	Image image = dialog.getDisplay ().getSystemImage (SWT.ICON_QUESTION);
+	label.setImage (image);
+	label.setLayoutData (new GridData ());
+
+	label = new Label (dialog, SWT.WRAP);
+	label.setText (message);
+	Monitor monitor = parent.getMonitor ();
+	int maxWidth = monitor.getBounds ().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	GridData data = new GridData (SWT.FILL, SWT.CENTER, true, false);
+	data.widthHint = Math.min (width, maxWidth);
+	label.setLayoutData (data);
+
+	Composite buttons = new Composite (dialog, SWT.NONE);
+	data = new GridData (SWT.CENTER, SWT.CENTER, true, true, 2, 1);
+	buttons.setLayoutData (data);
+	buttons.setLayout (new GridLayout (2, true));
+
+	Button ok = new Button (buttons, SWT.PUSH);
+	ok.setText (SWT.getMessage ("SWT_OK")); //$NON-NLS-1$
+	GridData layoutData = new GridData ();
+	layoutData.horizontalAlignment = SWT.CENTER;
+	layoutData.verticalAlignment = SWT.CENTER;
+	ok.setLayoutData (layoutData);
+
+	Button cancel = new Button (buttons, SWT.PUSH);
+	cancel.setText (SWT.getMessage ("SWT_Cancel")); //$NON-NLS-1$
+	cancel.setLayoutData (layoutData);
+	width = cancel.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	layoutData.widthHint = Math.max (width, 75);
+
+	final int[] result = new int[1];
+	ok.addSelectionListener (new SelectionAdapter () {
+		public void widgetSelected (SelectionEvent e) {
+			result[0] = SWT.OK;
+			dialog.dispose ();
+		}
+	});
+	cancel.addSelectionListener (new SelectionAdapter () {
+		public void widgetSelected (SelectionEvent e) {
+			result[0] = SWT.CANCEL;
+			dialog.dispose ();
+		}
+	});
+
+	dialog.setDefaultButton (ok);
+	dialog.pack ();
+	Rectangle parentSize = parent.getBounds ();
+	Rectangle dialogSize = dialog.getBounds ();
+	int x = parent.getLocation ().x + (parentSize.width - dialogSize.width) / 2;
+	int y = parent.getLocation ().y + (parentSize.height - dialogSize.height) / 2;
+	dialog.setLocation (x, y);
+	dialog.open ();
+	Display display = browser.getDisplay ();
+	while (!dialog.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+	return result[0];
+}
+
+String showTextPrompter (String title, String message, String defaultText) {
+	Shell parent = browser.getShell ();
+	final Shell dialog = new Shell (parent, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+	dialog.setLayout (new GridLayout ());
+	dialog.setText (title);
+
+	Label label = new Label (dialog, SWT.NONE);
+	label.setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	label.setText (message);
+
+	final Text textBox = new Text (dialog, SWT.SINGLE | SWT.BORDER);
+	GridData data = new GridData (GridData.FILL_HORIZONTAL);
+	data.widthHint = 300;
+	textBox.setLayoutData (data);
+	textBox.setText (defaultText);
+
+	Composite buttons = new Composite (dialog, SWT.NONE);
+	buttons.setLayout (new GridLayout (2, true));
+	buttons.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_CENTER));
+	Button ok = new Button (buttons, SWT.PUSH);
+	ok.setText (SWT.getMessage ("SWT_OK")); //$NON-NLS-1$
+	ok.setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+
+	final String[] result = new String[1];
+	ok.addSelectionListener (new SelectionAdapter () {
+		public void widgetSelected (SelectionEvent e) {
+			result[0] = textBox.getText ();
+			dialog.dispose ();
+		}
+	});
+	Button cancel = new Button (buttons, SWT.PUSH);
+	cancel.setText (SWT.getMessage ("SWT_Cancel")); //$NON-NLS-1$
+	cancel.setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	cancel.addSelectionListener (new SelectionAdapter () {
+		public void widgetSelected (SelectionEvent e) {
+			dialog.dispose ();
+		}
+	});
+
+	dialog.setDefaultButton (ok);
+	dialog.pack ();
+	Rectangle parentSize = parent.getBounds ();
+	Rectangle dialogSize = dialog.getBounds ();
+	int x = parent.getLocation ().x + (parentSize.width - dialogSize.width) / 2;
+	int y = parent.getLocation ().y + (parentSize.height - dialogSize.height) / 2;
+	dialog.setLocation (x, y);
+	dialog.open ();
+	Display display = browser.getDisplay ();
+	while (!dialog.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+	return result[0];
+}
+
+int takeFocus (int /*long*/ sender, int forward) {
+	int traveralCode = forward == 0 ? SWT.TRAVERSE_TAB_PREVIOUS : SWT.TRAVERSE_TAB_NEXT;
+	((WebKit)browser.webBrowser).traverseOut = true;
+	browser.traverse (traveralCode);
+	return COM.S_OK;
+}
+
+int webViewClose (int /*long*/ sender) {
+	WindowEvent newEvent = new WindowEvent (browser);
+	newEvent.display = browser.getDisplay ();
+	newEvent.widget = browser;
+	CloseWindowListener[] closeWindowListeners = browser.webBrowser.closeWindowListeners;
+	for (int i = 0; i < closeWindowListeners.length; i++) {
+		closeWindowListeners[i].close (newEvent);
+	}
+	browser.dispose ();
+	return COM.S_OK;
+}
+
+int webViewFrame (int /*long*/ sender, int /*long*/ frame) {
+	RECT rect = new RECT ();
+	OS.MoveMemory (frame, rect, RECT.sizeof);
+	return COM.S_OK;
+}
+
+int webViewShow (int /*long*/ sender) {
+	WindowEvent newEvent = new WindowEvent (browser);
+	newEvent.display = browser.getDisplay ();
+	newEvent.widget = browser;
+	if (location != null) newEvent.location = location;
+	if (size != null) newEvent.size = size;
+	/*
+	* Feature in WebKit.  WebKit's tool bar contains
+	* the address bar.  The address bar is displayed
+	* if the tool bar is displayed. There is no separate
+	* notification for the address bar.
+	*/
+	newEvent.addressBar = toolBar;
+	newEvent.menuBar = menuBar;
+	newEvent.statusBar = statusBar;
+	newEvent.toolBar = toolBar;
+	VisibilityWindowListener[] visibilityWindowListeners = browser.webBrowser.visibilityWindowListeners;
+	for (int i = 0; i < visibilityWindowListeners.length; i++) {
+		visibilityWindowListeners[i].show (newEvent);
+	}
+	location = null;
+	size = null;
+	return COM.S_OK;
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebCookieManager.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebCookieManager.java
new file mode 100644
index 0000000..d4397ab
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebCookieManager.java	
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebCookieManager extends IUnknown {
+
+public IWebCookieManager (int /*long*/ address) {
+	super (address);
+}
+
+public int cookieStorage (int /*long*/[] storage) {
+	return COM.VtblCall (3, getAddress (), storage);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDataSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDataSource.java
new file mode 100644
index 0000000..800f44f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDataSource.java	
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebDataSource extends IUnknown {
+
+public IWebDataSource (int /*long*/ address) {
+	super (address);
+}
+
+public int representation (int /*long*/[] rep) {
+	return COM.VtblCall (5, getAddress (), rep);
+}
+
+public int webFrame (int /*long*/[] frame) {
+	return COM.VtblCall (6, getAddress (), frame);
+}
+
+public int request (int /*long*/[] request) {
+	return COM.VtblCall (8, getAddress (), request);
+}
+
+public int pageTitle (int /*long*/[] title) {
+	return COM.VtblCall (12, getAddress (), title);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDocumentRepresentation.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDocumentRepresentation.java
new file mode 100644
index 0000000..f8c2518
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDocumentRepresentation.java	
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebDocumentRepresentation extends IUnknown {
+
+public IWebDocumentRepresentation (int /*long*/ address) {
+	super (address);
+}
+
+public int documentSource (int /*long*/[] source) {
+	return COM.VtblCall (8, getAddress (), source);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDownload.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDownload.java
new file mode 100644
index 0000000..6465774
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebDownload.java	
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebDownload extends IUnknown {
+
+public IWebDownload (int /*long*/ address) {
+	super (address);
+}
+
+public int cancel () {
+	return COM.VtblCall (4, getAddress ());
+}
+
+public int setDeletesFileUponFailure (int deletesFileUponFailure) {
+	return COM.VtblCall (12, getAddress (), deletesFileUponFailure);
+}
+
+public int setDestination (int /*long*/ path, int allowOverwrite) {
+	return COM.VtblCall (13, getAddress(), path, allowOverwrite);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebError.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebError.java
new file mode 100644
index 0000000..3b48b5b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebError.java	
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebError extends IUnknown {
+
+public IWebError (int /*long*/ address) {
+	super (address);
+}
+
+public int code (int[] result) {
+	return COM.VtblCall (4, getAddress (), result);
+}
+
+//public int domain (int /*long*/[] result) {
+//	return COM.VtblCall (5, getAddress (), result);
+//}
+
+public int localizedDescription (int /*long*/[] result) {
+	return COM.VtblCall (6, getAddress (), result);
+}
+
+//public int localizedFailureReason (int /*long*/[] result) {
+//	return COM.VtblCall (7, getAddress (), result);
+//}
+
+//public int userInfo (int /*long*/[] result) {
+//return COM.VtblCall (11, getAddress (), result);
+//}
+
+public int failingURL (int /*long*/[] result) {
+	return COM.VtblCall (12, getAddress (), result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebErrorPrivate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebErrorPrivate.java
new file mode 100644
index 0000000..cd69d68
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebErrorPrivate.java	
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebErrorPrivate extends IUnknown {
+
+public IWebErrorPrivate (int /*long*/ address) {
+	super (address);
+}
+
+public int sslPeerCertificate (int /*long*/[] result) {
+	return COM.VtblCall (3, getAddress (), result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebFrame.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebFrame.java
new file mode 100644
index 0000000..eeb2372
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebFrame.java	
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebFrame extends IUnknown {
+
+public IWebFrame (int /*long*/ address) {
+	super (address);
+}
+
+public int loadRequest (int /*long*/ request) {
+	return COM.VtblCall (8, getAddress (), request);
+}
+
+public int loadHTMLString (int /*long*/ string, int /*long*/ baseURL) {
+	return COM.VtblCall (10, getAddress (), string, baseURL);
+}
+
+public int dataSource (int /*long*/[] source) {
+	return COM.VtblCall (13, getAddress (), source);
+}
+
+public int /*long*/ globalContext () {
+	return COM.VtblCall (23, getAddress ());
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebFramePrivate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebFramePrivate.java
new file mode 100644
index 0000000..f349a53
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebFramePrivate.java	
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebFramePrivate extends IUnknown {
+
+public IWebFramePrivate (int /*long*/ address) {
+	super (address);
+}
+
+public int setInPrintingMode (int value, int /*long*/ printDC) {
+	return COM.VtblCall (8, getAddress (), value, printDC);
+}
+
+public int getPrintedPageCount (int /*long*/ printDC, int[] pageCount) {
+	return COM.VtblCall (9, getAddress (), printDC, pageCount);
+}
+
+public int spoolPages (int /*long*/ printDC, int startPage, int endPage, int /*long*/[] ctx) {
+	return COM.VtblCall (10, getAddress (), printDC, startPage, endPage, ctx);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebIBActions.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebIBActions.java
new file mode 100644
index 0000000..5d74cc3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebIBActions.java	
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebIBActions extends IUnknown {
+
+public IWebIBActions (int /*long*/ address) {
+	super (address);
+}
+
+public int stopLoading (int /*long*/ sender) {
+	return COM.VtblCall (4, getAddress (), sender);
+}
+
+public int reload (int /*long*/ sender) {
+	return COM.VtblCall (5, getAddress (), sender);
+}
+
+public int canGoBack (int /*long*/ sender, int[] result) {
+	return COM.VtblCall (6, getAddress (), sender, result);
+}
+
+public int canGoForward (int /*long*/ sender, int[] result) {
+	return COM.VtblCall (8, getAddress (), sender, result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebMutableURLRequest.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebMutableURLRequest.java
new file mode 100644
index 0000000..6fb7512
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebMutableURLRequest.java	
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebMutableURLRequest extends IWebURLRequest {
+
+public IWebMutableURLRequest (int /*long*/ address) {
+	super (address);
+}
+
+//public int setHTTPBody (int /*long*/ data) {
+//	return COM.VtblCall (21, getAddress (), data);
+//}
+
+//public int setHTTPBodyStream (int /*long*/ data) {
+//	return COM.VtblCall (22, getAddress (), data);
+//}
+
+public int setHTTPMethod (int post) {
+	return COM.VtblCall (23, getAddress (), post);
+}
+
+public int setURL (int /*long*/ theUrl) {
+	return COM.VtblCall (27, getAddress (), theUrl);
+}
+
+public int setValue (int /*long*/ value, int /*long*/ field) {
+	return COM.VtblCall (28, getAddress (), value, field);
+}
+
+public int setAllowsAnyHTTPSCertificate () {
+	return COM.VtblCall (29, getAddress ());
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebMutableURLRequestPrivate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebMutableURLRequestPrivate.java
new file mode 100644
index 0000000..802f713
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebMutableURLRequestPrivate.java	
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebMutableURLRequestPrivate extends IUnknown {
+
+public IWebMutableURLRequestPrivate (int /*long*/ address) {
+	super (address);
+}
+
+//public int setClientCertificate (int /*long*/ cert) {
+//return COM.VtblCall (3, getAddress (), cert);
+//}
+
+public int cfRequest () {
+	return COM.VtblCall (4, getAddress ());
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebOpenPanelResultListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebOpenPanelResultListener.java
new file mode 100644
index 0000000..9a36db3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebOpenPanelResultListener.java	
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebOpenPanelResultListener extends IUnknown {
+
+public IWebOpenPanelResultListener (int /*long*/ address) {
+	super (address);
+}
+
+public int chooseFilename (int /*long*/ fileName) {
+	return COM.VtblCall (3, getAddress (), fileName);
+}
+
+public int cancel () {
+	return COM.VtblCall (4, getAddress ());
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebPolicyDecisionListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebPolicyDecisionListener.java
new file mode 100644
index 0000000..e7e2116
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebPolicyDecisionListener.java	
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebPolicyDecisionListener extends IUnknown{
+
+public IWebPolicyDecisionListener (int /*long*/ address) {
+	super (address);
+}
+
+public int use () {
+	return COM.VtblCall (3, getAddress ());
+}
+
+public int download () {
+	return COM.VtblCall (4, getAddress ());
+}
+
+public int ignore () {
+	return COM.VtblCall (5, getAddress ());
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebPreferences.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebPreferences.java
new file mode 100644
index 0000000..ad45d3c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebPreferences.java	
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebPreferences extends IUnknown {
+
+public IWebPreferences (int /*long*/ address) {
+	super (address);
+}
+
+public int initWithIdentifier (int /*long*/ identifier, int /*long*/[] preferences) {
+	return COM.VtblCall (4, getAddress (), identifier, preferences);
+}
+
+public int setJavaEnabled (int enabled) {
+	return COM.VtblCall (33, getAddress (), enabled);
+}
+
+public int setJavaScriptEnabled (int enabled) {
+	return COM.VtblCall (35, getAddress (), enabled);
+}
+
+public int setJavaScriptCanOpenWindowsAutomatically (int enabled) {
+	return COM.VtblCall (37, getAddress (), enabled);
+}
+
+public int setTabsToLinks (int enabled) {
+	return COM.VtblCall (52, getAddress (), enabled);
+}
+
+public int setFontSmoothing (int smoothingType) {
+	return COM.VtblCall (63, getAddress (), smoothingType);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLAuthenticationChallenge.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLAuthenticationChallenge.java
new file mode 100644
index 0000000..0108468
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLAuthenticationChallenge.java	
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebURLAuthenticationChallenge extends IUnknown {
+
+public IWebURLAuthenticationChallenge (int /*long*/ address) {
+	super (address);
+}
+
+public int previousFailureCount (int[] result) {
+	return COM.VtblCall (7, getAddress (), result);
+}
+
+public int proposedCredential (int /*long*/[] result) {
+	return COM.VtblCall (8, getAddress (), result);
+}
+
+public int protectionSpace (int /*long*/[] result) {
+	return COM.VtblCall (9, getAddress (), result);
+}
+
+public int sender (int /*long*/[] sender) {
+	return COM.VtblCall (10, getAddress (), sender);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLAuthenticationChallengeSender.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLAuthenticationChallengeSender.java
new file mode 100644
index 0000000..c5185b5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLAuthenticationChallengeSender.java	
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebURLAuthenticationChallengeSender extends IUnknown {
+
+public IWebURLAuthenticationChallengeSender (int /*long*/ address) {
+	super (address);
+}
+
+public int cancelAuthenticationChallenge (int /*long*/ challenge) {
+	return COM.VtblCall (3, getAddress (), challenge);
+}
+
+public int useCredential (int /*long*/ credential, int /*long*/ challenge) {
+	return COM.VtblCall (5, getAddress (), credential, challenge);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLCredential.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLCredential.java
new file mode 100644
index 0000000..d2979c5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLCredential.java	
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebURLCredential extends IUnknown {
+
+public IWebURLCredential (int /*long*/ address) {
+	super (address);
+}
+
+public int hasPassword (int[] result) {
+	return COM.VtblCall (3, getAddress (), result);
+}
+
+public int initWithUser (int /*long*/ user, int /*long*/ password, int /*long*/ persistence) {
+	return COM.VtblCall (4, getAddress (), user, password, persistence);
+}
+
+public int password (int /*long*/[] password) {
+	return COM.VtblCall (5, getAddress (), password);
+}
+
+public int user (int /*long*/[] result) {
+	return COM.VtblCall (7, getAddress (), result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLProtectionSpace.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLProtectionSpace.java
new file mode 100644
index 0000000..c802d16
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLProtectionSpace.java	
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebURLProtectionSpace extends IUnknown {
+
+public IWebURLProtectionSpace(int /*long*/ address) {
+	super(address);
+}
+
+public int host (int /*long*/[] result) {
+	return COM.VtblCall (4, getAddress (), result);
+}
+
+public int port (int[] result) {
+	return COM.VtblCall (8, getAddress (), result);
+}
+
+public int realm (int /*long*/[] result) {
+	return COM.VtblCall (11, getAddress (), result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLRequest.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLRequest.java
new file mode 100644
index 0000000..11eee69
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLRequest.java	
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebURLRequest extends IUnknown {
+
+public IWebURLRequest (int /*long*/ address) {
+	super (address);
+}
+
+//public int HTTPBody (int /*long*/[] result) {
+//	return COM.VtblCall (6, getAddress (), result);
+//}
+
+public int HTTPMethod (int /*long*/[] result) {
+	return COM.VtblCall (8, getAddress (), result);
+}
+
+public int URL (int /*long*/[] result) {
+	return COM.VtblCall (13, getAddress (), result);
+}
+
+public int mutableCopy (int /*long*/[] result) {
+	return COM.VtblCall (16, getAddress (), result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLResponse.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLResponse.java
new file mode 100644
index 0000000..8565058
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebURLResponse.java	
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebURLResponse extends IUnknown {
+
+public IWebURLResponse (int /*long*/ address) {
+	super (address);
+}
+
+public int expectedContentLength (long[] result) {
+	return COM.VtblCall (3, getAddress (), result);
+}
+
+public int URL (int /*long*/[] result) {
+	return COM.VtblCall (8, getAddress (), result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebView.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebView.java
new file mode 100644
index 0000000..efbc5d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebView.java	
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class IWebView extends IUnknown {
+
+public IWebView (int /*long*/ address) {
+	super (address);
+}
+
+public int canShowMIMEType (int /*long*/ mimeType, int[] canShow) {
+	return COM.VtblCall (3, getAddress (), mimeType, canShow);
+}
+
+public int initWithFrame (RECT frame, int /*long*/ frameName, int /*long*/ groupName) {
+	return COM.VtblCall (9, getAddress(), frame, frameName, groupName);
+}
+
+public int setUIDelegate (int /*long*/ delegate) {
+	return COM.VtblCall (10, getAddress (), delegate);
+}
+
+public int setResourceLoadDelegate (int /*long*/ delegate) {
+	return COM.VtblCall (12, getAddress (), delegate);
+}
+
+public int setDownloadDelegate (int /*long*/ delegate) {
+	return COM.VtblCall (14, getAddress (), delegate);
+}
+
+public int setFrameLoadDelegate (int /*long*/ delegate) {
+	return COM.VtblCall (16, getAddress (), delegate);
+}
+
+public int setPolicyDelegate (int /*long*/ delegate) {
+	return COM.VtblCall (18, getAddress (), delegate);
+}
+
+public int mainFrame (int /*long*/[] frame) {
+	return COM.VtblCall (20, getAddress (), frame);
+}
+
+public int goBack (int[] succeeded) {
+	return COM.VtblCall (24, getAddress(), succeeded);
+}
+
+public int goForward (int[] succeeded) {
+	return COM.VtblCall (25, getAddress(), succeeded);
+}
+
+public int setCustomUserAgent (int /*long*/ valueString) {
+	return COM.VtblCall (31, getAddress (), valueString);
+}
+
+public int setPreferences (int /*long*/ prefs) {
+	return COM.VtblCall (41, getAddress (), prefs);
+}
+
+public int preferences (int /*long*/[] prefs) {
+	return COM.VtblCall (42, getAddress (), prefs);
+}
+
+public int setHostWindow (int /*long*/ window) {
+	return COM.VtblCall (45, getAddress (), window);
+}
+
+public int hostWindow (int /*long*/[] window) {
+	return COM.VtblCall (46, getAddress (), window);
+}
+
+public int estimatedProgress (int /*long*/ estimatedProgress) {
+	return COM.VtblCall (51, getAddress (), estimatedProgress);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebViewPrivate.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebViewPrivate.java
new file mode 100644
index 0000000..3fe02ea
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/IWebViewPrivate.java	
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.ole.win32.*;
+
+public class IWebViewPrivate extends IUnknown {
+
+public IWebViewPrivate (int /*long*/ address) {
+	super (address);
+}
+
+public int viewWindow (int /*long*/[] window) {
+	return COM.VtblCall (5, getAddress (), window);
+}
+
+public int setInitialFocus (int forwardEnabled) {
+	return COM.VtblCall (28, getAddress (), forwardEnabled);
+}
+
+public int shouldClose (int[] result) {
+	return COM.VtblCall (33, getAddress (), result);
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/JSClassDefinition.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/JSClassDefinition.java
new file mode 100644
index 0000000..86b3f63
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/JSClassDefinition.java	
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+/** @jniclass flags=cpp */
+public class JSClassDefinition {
+    public int version;
+    /** @field cast=(JSClassAttributes) */
+    public int attributes;
+    /** @field cast=(const char*) */
+    public int /*long*/ className;
+    /** @field cast=(JSClassRef) */
+    public int /*long*/ parentClass;
+    /** @field cast=(const JSStaticValue*) */
+    public int /*long*/ staticValues;
+    /** @field cast=(const JSStaticFunction*) */
+    public int /*long*/ staticFunctions;
+    /** @field cast=(JSObjectInitializeCallback) */
+    public int /*long*/ initialize;
+    /** @field cast=(JSObjectFinalizeCallback) */
+    public int /*long*/ finalize;
+    /** @field cast=(JSObjectHasPropertyCallback) */
+    public int /*long*/ hasProperty;
+    /** @field cast=(JSObjectGetPropertyCallback) */
+    public int /*long*/ getProperty;
+    /** @field cast=(JSObjectSetPropertyCallback) */
+    public int /*long*/ setProperty;
+    /** @field cast=(JSObjectDeletePropertyCallback) */
+    public int /*long*/ deleteProperty;
+    /** @field cast=(JSObjectGetPropertyNamesCallback) */
+    public int /*long*/ getPropertyNames;
+    /** @field cast=(JSObjectCallAsFunctionCallback) */
+    public int /*long*/ callAsFunction;
+    /** @field cast=(JSObjectCallAsConstructorCallback) */
+    public int /*long*/ callAsConstructor;
+    /** @field cast=(JSObjectHasInstanceCallback) */
+    public int /*long*/ hasInstance;
+    /** @field cast=(JSObjectConvertToTypeCallback) */
+    public int /*long*/ convertToType;
+
+    public static final int sizeof = WebKit_win32.JSClassDefinition_sizeof();
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/WebKit_win32.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/WebKit_win32.java
new file mode 100644
index 0000000..aaa9c1c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/internal/webkit/WebKit_win32.java	
@@ -0,0 +1,366 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.webkit;
+
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.win32.*;
+
+/** @jniclass flags=cpp */
+public class WebKit_win32 extends C {
+	//public static final GUID CLSID_DOMEventListener = IIDFromString("{AC3D1BC3-4976-4431-8A19-4812C5EFE39C}"); //$NON-NLS-1$
+	public static final GUID CLSID_WebCookieManager = IIDFromString("{3F35F332-BB2B-49b3-AEDD-27B317687E07}"); //$NON-NLS-1$
+	public static final GUID CLSID_WebMutableURLRequest = IIDFromString("{a062ecc3-bb1b-4694-a569-f59e0ad6be0c}"); //$NON-NLS-1$
+	public static final GUID CLSID_WebPreferences = IIDFromString("{67B89F90-F778-438B-ABBF-34D1ACBF8651}"); //$NON-NLS-1$
+	public static final GUID CLSID_WebURLCredential = IIDFromString("{7433F53B-7FE9-484a-9432-72909457A646}"); //$NON-NLS-1$
+	public static final GUID CLSID_WebView = IIDFromString("{d6bca079-f61c-4e1e-b453-32a0477d02e3}"); //$NON-NLS-1$
+	//public static final GUID IID_IDOMEventListener = IIDFromString("{7f8a0a96-f864-44fb-87fb-c5f03666e8e6}"); //$NON-NLS-1$
+	public static final GUID IID_IWebCookieManager = IIDFromString("{7053FE94-3623-444f-A298-209A90879A8C}"); //$NON-NLS-1$
+	public static final GUID IID_IWebDownloadDelegate = IIDFromString("{16A32AE6-C862-40cd-9225-2CAF823F40F9}"); //$NON-NLS-1$
+	public static final GUID IID_IWebErrorPrivate = IIDFromString("{19FED49C-7016-48a6-B5C6-07ADE116531B}"); //$NON-NLS-1$
+	public static final GUID IID_IWebFrameLoadDelegate = IIDFromString("{3354665B-84BA-4fdf-B35E-BF5CF9D96026}"); //$NON-NLS-1$
+	public static final GUID IID_IWebFramePrivate = IIDFromString("{A1657D07-4881-4475-9D10-76548731D448}"); //$NON-NLS-1$
+	public static final GUID IID_IWebIBActions = IIDFromString("{8F0E3A30-B924-44f8-990A-1AE61ED6C632}"); //$NON-NLS-1$
+	public static final GUID IID_IWebMutableURLRequest = IIDFromString("{C4042773-371F-427e-AFA9-9D4B358A0D93}"); //$NON-NLS-1$
+	public static final GUID IID_IWebMutableURLRequestPrivate = IIDFromString("{AD675B60-2CE9-478c-B2AA-CAD643FF18AC}"); //$NON-NLS-1$;
+	public static final GUID IID_IWebPolicyDelegate = IIDFromString("{9B0BAE6C-A496-4000-9E22-2E89F0747401}"); //$NON-NLS-1$
+	public static final GUID IID_IWebPreferences = IIDFromString("{0930D594-A5A3-46e1-858E-AB17A13CD28E}"); //$NON-NLS-1$
+	public static final GUID IID_IWebResourceLoadDelegate = IIDFromString("{AF3289AA-90DB-4ca4-A112-A1E5F0517953}"); //$NON-NLS-1$
+	public static final GUID IID_IWebUIDelegate = IIDFromString("{042B7EE3-A5A4-4a8f-8C33-775CD9E89C7C}"); //$NON-NLS-1$
+	public static final GUID IID_IWebURLCredential = IIDFromString("{A1E9D765-FACE-4189-BBE3-AED7EBF65EBD}"); //$NON-NLS-1$
+	public static final GUID IID_IWebView = IIDFromString("{174BBEFD-058E-49C7-91DF-6F110AA4AC28}"); //$NON-NLS-1$
+	public static final GUID IID_IWebViewPrivate = IIDFromString("{44914369-DEB5-4fcf-A6A3-30C02E73154F}"); //$NON-NLS-1$
+
+	public static final int CFHTTPCookieSessionOnlyFlag   = 1 << 1;
+	public static final int FontSmoothingTypeWindows = 4;
+	public static final int kCFStringEncodingUTF8 = 0x08000100;
+
+	public static final int kJSTypeUndefined = 0;
+	public static final int kJSTypeNull = 1;
+	public static final int kJSTypeBoolean = 2;
+	public static final int kJSTypeNumber = 3;
+	public static final int kJSTypeString = 4;
+	public static final int kJSTypeObject = 5;
+
+	public static final int WebURLCredentialPersistenceForSession = 1;
+	public static final int WebURLErrorBadURL = -1000;
+	public static final int WebURLErrorServerCertificateNotYetValid = -1204;
+	public static final int WebURLErrorSecureConnectionFailed = -1200;
+
+static GUID IIDFromString (String lpsz) {
+	int length = lpsz.length ();
+	char[] buffer = new char[length + 1];
+	lpsz.getChars (0, length, buffer, 0);
+	GUID lpiid = new GUID ();
+	if (COM.IIDFromString (buffer, lpiid) == COM.S_OK) return lpiid;
+	return null;
+}
+
+/** 
+ * @param theArray cast=(CFArrayRef)
+ */
+public static final native int CFArrayGetCount (int /*long*/ theArray);
+/**
+ * @param theArray cast=(CFArrayRef)
+ * @param idx cast=(CFIndex)
+ */
+public static final native int /*long*/ CFArrayGetValueAtIndex (int /*long*/ theArray, int idx);
+/**
+ * @param allocator cast=(CFAllocatorRef)
+ * @param bytes cast=(const UInt8 *)
+ * @param length cast=(CFIndex)
+ */
+public static final native int /*long*/ CFDataCreate (int /*long*/ allocator, byte [] bytes, int length);
+/**
+ * @param theData cast=(CFDataRef)
+ */
+public static final native int /*long*/ CFDataGetBytePtr (int /*long*/ theData);
+/**
+ * @param theData cast=(CFDataRef)
+ */
+public static final native int CFDataGetLength (int /*long*/ theData);
+/**
+ * @param allocator	cast=(CFAllocatorRef)
+ * @param keys cast=(const void **)
+ * @param values cast=(const void **)
+ * @param numValues cast=(CFIndex)
+ * @param keyCallBacks cast=(const CFDictionaryKeyCallBacks *)
+ * @param valueCallBacks cast=(const CFDictionaryValueCallBacks *)
+ */
+public static final native int /*long*/ CFDictionaryCreate (int /*long*/ allocator, int /*long*/[] keys, int /*long*/[] values, int numValues, int /*long*/ keyCallBacks, int /*long*/ valueCallBacks);
+/**
+ * @param inAllocator cast=(CFAllocatorRef)
+ * @param headerFields cast=(CFDictionaryRef)
+ * @param inURL	cast=(CFURLRef)
+ */
+public static final native int /*long*/ CFHTTPCookieCreateWithResponseHeaderFields (int /*long*/ inAllocator, int /*long*/ headerFields, int /*long*/ inURL);
+/**
+ * @param inCookie cast=(CFHTTPCookieRef)
+ */
+public static final native int CFHTTPCookieGetFlags (int /*long*/ inCookie);
+/**
+ * @param inCookie cast=(CFHTTPCookieRef)
+ */
+public static final native int /*long*/ CFHTTPCookieGetName (int /*long*/ inCookie);
+/**
+ * @param inCookie cast=(CFHTTPCookieRef)
+ */
+public static final native int /*long*/ CFHTTPCookieGetValue (int /*long*/ inCookie);
+/**
+ * @param inCookieStorage cast=(CFHTTPCookieStorageRef)
+ */
+public static final native int /*long*/ CFHTTPCookieStorageCopyCookies (int /*long*/ inCookieStorage);
+/**
+ * @param inCookieStorage cast=(CFHTTPCookieStorageRef)
+ * @param inURL cast=(CFURLRef)
+ * @param sendSecureCookies cast=(Boolean)
+ */
+public static final native int /*long*/ CFHTTPCookieStorageCopyCookiesForURL (int /*long*/ inCookieStorage, int /*long*/ inURL, boolean sendSecureCookies);
+/**
+ * @param inCookieStorage cast=(CFHTTPCookieStorageRef)
+ * @param inCookie cast=(CFHTTPCookieRef)
+ */
+public static final native void CFHTTPCookieStorageDeleteCookie (int /*long*/ inCookieStorage, int /*long*/ inCookie);
+/**
+ * @param inCookieStorage cast=(CFHTTPCookieStorageRef)
+ * @param inCookie cast=(CFHTTPCookieRef)
+ */
+public static final native void CFHTTPCookieStorageSetCookie (int /*long*/ inCookieStorage, int /*long*/ inCookie);
+/**
+ * @param cf cast=(CFTypeRef)
+ */
+public static final native void CFRelease (int /*long*/ cf);
+/**
+ * @param alloc cast=(CFAllocatorRef)
+ * @param chars cast=(const UniChar *)
+ * @param numChars cast=(CFIndex)
+ */
+public static final native int CFStringCreateWithCharacters (int /*long*/ alloc, char[] chars, int numChars);
+/**
+ * @param theString cast=(CFStringRef)
+ * @param idx cast=(CFIndex)
+ */
+public static final native char CFStringGetCharacterAtIndex (int /*long*/ theString, int idx);
+/**
+ * @param theString cast=(CFStringRef)
+ */
+public static final native int /*long*/ CFStringGetCharactersPtr (int /*long*/ theString);
+/**
+ * @param theString cast=(CFStringRef)
+ */
+public static final native int CFStringGetLength (int /*long*/ theString);
+/**
+ * @param allocator cast=(CFAllocatorRef)
+ * @param URLString cast=(CFStringRef)
+ * @param baseURL cast=(CFURLRef)
+ */
+public static final native int /*long*/ CFURLCreateWithString (int /*long*/ allocator, int /*long*/ URLString, int /*long*/ baseURL);
+/**
+ * @param alloc cast=(CFAllocatorRef)
+ * @param origRequest cast=(CFURLRequestRef)
+ */
+public static final native int /*long*/ CFURLRequestCreateMutableCopy (int /*long*/	alloc, int /*long*/ origRequest);
+/**
+ * @param request cast=(CFURLRequestRef)
+ */
+public static final native int /*long*/ CFURLRequestCopyHTTPRequestBody (int /*long*/ request);
+/**
+ * @param mutableHTTPRequest cast=(CFMutableURLRequestRef)
+ * @param httpBody cast=(CFDataRef)
+ */
+public static final native void CFURLRequestSetHTTPRequestBody (int /*long*/ mutableHTTPRequest, int /*long*/ httpBody);
+/**
+ * @param mutableRequest cast=(CFMutableURLRequestRef)
+ * @param url cast=(CFURLRef)
+ */
+public static final native void CFURLRequestSetURL (int /*long*/ mutableRequest, int /*long*/ url);
+
+/**
+ * @param definition cast=(const JSClassDefinition*)
+ */
+public static final native int /*long*/ JSClassCreate (int /*long*/ definition);
+/**
+ * @param jsClass cast=(JSClassRef)
+ */
+public static final native int /*long*/ JSClassRetain (int /*long*/ jsClass);
+/**
+ * @param ctx cast=(JSContextRef)
+ */
+public static final native int /*long*/ JSContextGetGlobalObject (int /*long*/ ctx);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param script cast=(JSStringRef)
+ * @param thisObject cast=(JSObjectRef)
+ * @param sourceURL cast=(JSStringRef)
+ * @param exception cast=(JSValueRef *)
+ */
+public static final native int /*long*/ JSEvaluateScript (int /*long*/ ctx, int /*long*/ script, int /*long*/ thisObject, int /*long*/ sourceURL, int startingLineNumber, int /*long*/[] exception);
+/**
+ * @param ctx cast=(JSGlobalContextRef)
+ */
+public static final native int JSGlobalContextRetain (int /*long*/ ctx);
+/**
+ * @param object cast=(JSObjectRef)
+ */
+public static final native int /*long*/ JSObjectGetPrivate (int /*long*/ object);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param object cast=(JSObjectRef)
+ * @param propertyName cast=(JSStringRef)
+ * @param exception cast=(JSValueRef*)
+ */
+public static final native int /*long*/ JSObjectGetProperty (int /*long*/ ctx, int /*long*/ object, int /*long*/ propertyName, int /*long*/[] exception);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param object cast=(JSObjectRef)
+ * @param propertyIndex cast=(unsigned)
+ * @param exception cast=(JSValueRef*)
+ */
+public static final native int /*long*/ JSObjectGetPropertyAtIndex (int /*long*/ ctx, int /*long*/ object, int propertyIndex, int /*long*/[] exception); 
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param jsClass cast=(JSClassRef)
+ * @param data cast=(void *)
+ */
+public static final native int JSObjectMake (int /*long*/ ctx, int /*long*/ jsClass, int /*long*/ data);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param argumentCount cast=(size_t)
+ * @param arguments cast=(const struct OpaqueJSValue * const*)
+ * @param exception cast=(JSValueRef*)
+ */
+public static final native int /*long*/ JSObjectMakeArray (int /*long*/ ctx, int /*long*/ argumentCount, int /*long*/[] arguments, int /*long*/[] exception);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param name cast=(JSStringRef)
+ * @param callAsFunction cast=(JSObjectCallAsFunctionCallback)
+ */
+public static final native int JSObjectMakeFunctionWithCallback (int /*long*/ ctx, int /*long*/ name, int /*long*/ callAsFunction);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param object cast=(JSObjectRef)
+ * @param propertyName cast=(JSStringRef)
+ * @param value cast=(JSValueRef)
+ * @param attributes cast=(JSPropertyAttributes)
+ * @param exception cast=(JSValueRef *)
+ */
+public static final native void JSObjectSetProperty (int /*long*/ ctx, int /*long*/ object, int /*long*/ propertyName, int /*long*/ value, int /*long*/ attributes, int /*long*/[] exception);
+/**
+ * @param string cast=(const char*)
+ */
+public static final native int /*long*/ JSStringCreateWithUTF8CString (byte[] string);
+/** 
+ * @param string cast=(JSStringRef) 
+ */
+public static final native int JSStringGetLength (int /*long*/ string);	
+/**
+ * @param string cast=(JSStringRef)
+ */
+public static final native int /*long*/ JSStringGetMaximumUTF8CStringSize (int /*long*/ string);
+/**
+ * @param string cast=(JSStringRef)
+ * @param buffer cast=(char *)
+ * @param bufferSize cast=(size_t)
+ */
+public static final native int JSStringGetUTF8CString (int /*long*/ string, byte[] buffer, int /*long*/ bufferSize);
+/**
+ * @param a cast=(JSStringRef)
+ * @param b	cast=(const char *)
+ */
+public static final native int JSStringIsEqualToUTF8CString (int /*long*/ a, byte[] b);
+/** 
+ * @param string cast=(JSStringRef) 
+ */
+public static final native void JSStringRelease (int /*long*/ string);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param value cast=(JSValueRef)
+ */
+public static final native int JSValueGetType (int /*long*/ ctx, int /*long*/ value);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param value	cast=(JSValueRef)
+ * @param jsClass	cast=(JSClassRef)
+ */
+public static final native int JSValueIsObjectOfClass (int /*long*/ ctx, int /*long*/ value, int /*long*/ jsClass);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param b cast=(bool)
+ */
+public static final native int /*long*/ JSValueMakeBoolean (int /*long*/ ctx, int /*long*/ b);
+/**
+ * @param ctx cast=(JSContextRef)
+ */
+public static final native int /*long*/ JSValueMakeNull (int /*long*/ ctx);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param number cast=(double)
+ */
+public static final native int /*long*/ JSValueMakeNumber (int /*long*/ ctx, double number);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param string cast=(JSStringRef)
+ */
+public static final native int /*long*/ JSValueMakeString (int /*long*/ ctx, int /*long*/ string);
+/**
+ * @param ctx cast=(JSContextRef)
+ */
+public static final native int /*long*/ JSValueMakeUndefined (int /*long*/ ctx);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param value cast=(JSValueRef)
+ */
+public static final native int JSValueToBoolean (int /*long*/ ctx, int /*long*/ value);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param value cast=(JSValueRef)
+ * @param exception cast=(JSValueRef*)
+ */
+public static final native double JSValueToNumber (int /*long*/ ctx, int /*long*/ value, int /*long*/[] exception);
+/**
+ * @param ctx cast=(JSContextRef)
+ * @param value cast=(JSValueRef)
+ * @param exception cast=(JSValueRef*)
+ */
+public static final native int /*long*/ JSValueToStringCopy (int /*long*/ ctx, int /*long*/ value, int /*long*/[] exception);
+/** @method flags=const address*/
+public static final native int /*long*/ kCFCopyStringDictionaryKeyCallBacks ();
+/** @method flags=const address*/
+public static final native int /*long*/ kCFTypeDictionaryValueCallBacks ();
+
+public static final native int JSClassDefinition_sizeof ();
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, JSClassDefinition src, int /*long*/ size);
+/** @method flags=no_gen */
+public static final native int WebKitCreateInstance (byte[] rclsid, int /*long*/ pUnkOuter, byte[] refiid, int /*long*/[] ppvObject);
+public static final int WebKitCreateInstance (GUID clsid, int /*long*/ pUnkOuter, GUID iid, int /*long*/[] ppvObject) {
+	byte[] rclsid = new byte[GUID.sizeof];
+	OS.IIDFromString ((clsid.toString () + '\0').toCharArray (), rclsid);
+	byte[] refiid = new byte[GUID.sizeof];
+	OS.IIDFromString ((iid.toString () + '\0').toCharArray (), refiid);
+	return WebKitCreateInstance (rclsid, pUnkOuter, refiid, ppvObject);
+}
+
+/** @method flags=no_gen */
+public static final native int /*long*/ JSObjectCallAsFunctionProc_CALLBACK (int /*long*/ func);
+/** @method flags=no_gen */
+public static final native int /*long*/ JSObjectGetPropertyProc_CALLBACK (int /*long*/ func); 
+/** @method flags=no_gen */
+public static final native int /*long*/ JSObjectHasPropertyProc_CALLBACK (int /*long*/ func);
+/** @method flags=no_gen */
+public static final native int /*long*/ willPerformClientRedirectToURL_CALLBACK (int /*long*/ func);
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/FontData.java
index 4a485de..51df700 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/FontData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/FontData.java	
@@ -320,7 +320,7 @@ public int getStyle() {
  * @see #equals
  */
 public int hashCode () {
-	return name.hashCode() ^ getHeight() ^ style;
+	return name.hashCode() ^ getHeight() << 8 ^ style;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
index d9a430c..b5e2285 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,8 +37,7 @@ import org.eclipse.swt.internal.carbon.*;
  * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
  * when the ARROW style is specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Caret.java
index dda581c..2dfec1f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Caret.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Caret.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ColorDialog.java
index d829ac0..e1bcd47 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ColorDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ColorDialog.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.RGB;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Combo.java
index 3b8ea96..46e4e75 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Combo.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Combo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1830,7 +1830,7 @@ void setText (String string, boolean notify) {
 		lastText = string;
 		OS.SetControlData (handle, OS.kHIComboBoxEditTextPart, OS.kControlEditTextCFStringTag, 4, new int[] {ptr});
 		OS.CFRelease (ptr);
-		selection = null;
+		setSelection(new Point(0, 0));
 		if (notify) sendEvent (SWT.Modify);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java
index 88f6c4d..abfd199 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Composite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -201,9 +201,9 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		}
 	} else {
 		size = minimumSize (wHint, hHint, changed);
+		if (size.x == 0) size.x = DEFAULT_WIDTH;
+		if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	}
-	if (size.x == 0) size.x = DEFAULT_WIDTH;
-	if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) size.x = wHint;
 	if (hHint != SWT.DEFAULT) size.y = hHint;
 	Rectangle trim = computeTrim (0, 0, size.x, size.y);
@@ -975,11 +975,12 @@ void markLayout (boolean changed, boolean all) {
 
 Point minimumSize (int wHint, int Hint, boolean changed) {
 	Control [] children = _getChildren ();
+	Rectangle clientArea = getClientArea();
 	int width = 0, height = 0;
 	for (int i=0; i<children.length; i++) {
 		Rectangle rect = children [i].getBounds ();
-		width = Math.max (width, rect.x + rect.width);
-		height = Math.max (height, rect.y + rect.height);
+		width = Math.max (width, rect.x - clientArea.x + rect.width);
+		height = Math.max (height, rect.y - clientArea.y + rect.height);
 	}
 	return new Point (width, height);
 }
@@ -1112,6 +1113,7 @@ public void setLayout (Layout layout) {
  * @since 3.1
  */
 public void setLayoutDeferred (boolean defer) {
+	checkWidget();
 	if (!defer) {
 		if (--layoutCount == 0) {
 			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java
index b186978..94ba664 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Control.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -214,6 +214,41 @@ public void addFocusListener(FocusListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when gesture events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>GestureListener</code> interface.
+ * <p>
+ * NOTE: If <code>setTouchEnabled(true)</code> has previously been
+ * invoked on the receiver then <code>setTouchEnabled(false)</code>
+ * must be invoked on it to specify that gesture events should be
+ * sent instead of touch events.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #removeGestureListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Gesture, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when help events are generated for the control,
  * by sending it one of the messages defined in the
  * <code>HelpListener</code> interface.
@@ -445,6 +480,40 @@ public void addPaintListener(PaintListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when touch events occur, by sending it
+ * one of the messages defined in the <code>TouchListener</code>
+ * interface.
+ * <p>
+ * NOTE: You must also call <code>setTouchEnabled(true)</code> to 
+ * specify that touch events should be sent, which will cause gesture
+ * events to not be sent.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #removeTouchListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addTouchListener (TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Touch,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when traversal events occur, by sending it
  * one of the messages defined in the <code>TraverseListener</code>
  * interface.
@@ -1023,8 +1092,11 @@ public boolean forceFocus () {
 
 /**
  * Returns the accessible object for the receiver.
+ * <p>
  * If this is the first time this object is requested,
- * then the object is created and returned.
+ * then the object is created and returned. The object
+ * returned by getAccessible() does not need to be disposed.
+ * </p>
  *
  * @return the accessible object
  *
@@ -1328,6 +1400,24 @@ public Monitor getMonitor () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Composite</code>
  * or null when the receiver is a shell that was created with null or
  * a display for a parent.
@@ -1437,6 +1527,31 @@ public String getToolTipText () {
 	return toolTipText;
 }
 
+/**
+ * Returns <code>true</code> if this control is set to send touch events, or
+ * <code>false</code> if it is set to send gesture events instead.  This method
+ * also returns <code>false</code> if a touch-based input device is not detected
+ * (this can be determined with <code>Display#getTouchEnabled()</code>).  Use
+ * {@link #setTouchEnabled(boolean)} to switch the events that a control sends
+ * between touch events and gesture events.
+ *
+ * @return <code>true</code> if the control is set to send touch events, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTouchEnabled
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkWidget();
+	return false;
+}
+
 float getThemeAlpha () {
 	return 1 * parent.getThemeAlpha ();
 }
@@ -1491,7 +1606,7 @@ int helpProc (int inControl, int inGlobalMouse, int inRequest, int outContentPro
 			* If a control doesn't have a tooltip text, then helpProc gets
 			* called on the controls in its parent hierarchy and their
 			* tooltip text is used. Note that returning OS.eventNotHandledErr
-			* prevents the window help content callback from being called. The
+			* prevents the window help content callback from being called. The fix
 			* is to only handle the message when the cursor is directly over this
 			* control.
 			*/
@@ -2680,6 +2795,32 @@ public void removeFocusListener(FocusListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when gesture events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #addGestureListener
+ * 
+ * @since 3.7
+ */
+public void removeGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Gesture, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when the help events are generated for the control.
  *
  * @param listener the listener which should no longer be notified
@@ -2895,6 +3036,32 @@ void removeRelation () {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when touch events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #addTouchListener
+ * 
+ * @since 3.7
+ */
+public void removeTouchListener(TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Touch, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when traversal events occur.
  *
  * @param listener the listener which should no longer be notified
@@ -3024,7 +3191,7 @@ boolean sendMouseEvent (int type, short button, int count, boolean send, int cho
 
 boolean sendMouseEvent (int type, short button, int count, int detail, boolean send, int chord, short x, short y, int modifiers) {
 	if (!hooks (type) && !filters (type)) return true;
-	if ((state & SAFARI_EVENTS_FIX) != 0) {
+	if ((state & WEBKIT_EVENTS_FIX) != 0) {
 		switch (type) {
 			case SWT.MouseUp:
 			case SWT.MouseMove:
@@ -3656,6 +3823,24 @@ public void setMenu (Menu menu) {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+}
+
+/**
  * Changes the parent of the widget to be the one provided if
  * the underlying operating system supports this feature.
  * Returns <code>true</code> if the parent is successfully changed.
@@ -3866,6 +4051,26 @@ public void setToolTipText (String string) {
 }
 
 /**
+ * Sets whether this control should send touch events (by default controls do not).
+ * Setting this to <code>false</code> causes the receiver to send gesture events
+ * instead.  No exception is thrown if a touch-based input device is not
+ * detected (this can be determined with <code>Display#getTouchEnabled()</code>).
+ * 
+ * @param enabled the new touch-enabled state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public void setTouchEnabled(boolean enabled) {
+	checkWidget();
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java
index 6ffb960..722f84e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.swt.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java
index d5dd483..488b7e4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Display.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -121,6 +121,7 @@ public class Display extends Device {
 	int mouseProc, trackingProc, windowProc, colorProc, textInputProc, releaseProc, coreEventProc, pollingProc;
 	EventTable eventTable, filterTable;
 	int queue, runLoop, runLoopSource, runLoopObserver, lastModifiers, lastState, lastX, lastY;
+	int commandHandler, appleEventHandler, mouseHandler, keyboardHandler, textInputHandler, launcherHandler;
 	boolean disposing;
 	
 	boolean inPaint, needsPaint;
@@ -1379,6 +1380,23 @@ public Shell getActiveShell () {
 }
 
 /**
+ * Returns the single instance of the application menu bar, or
+ * <code>null</code> if there is no application menu bar for the platform.
+ *
+ * @return the application menu bar, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getMenuBar () {
+	checkDevice ();
+	return null;
+}
+
+/**
  * Returns a rectangle describing the receiver's size and location. Note that
  * on multi-monitor systems the origin can be negative.
  *
@@ -1451,7 +1469,7 @@ public Rectangle getClientArea () {
  * over top of, or null if it is not currently over one of the
  * controls built by the currently running application.
  *
- * @return the control under the cursor
+ * @return the control under the cursor or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1661,7 +1679,7 @@ public int getDoubleClickTime () {
  * any of the controls built by the currently running
  * application.
  *
- * @return the control under the cursor
+ * @return the focus control or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1787,7 +1805,7 @@ Menu getMenu (int id) {
 	return null;
 }
 
-Menu getMenuBar () {
+Menu _getMenuBar () {
 	return menuBar;
 }
 
@@ -2108,6 +2126,24 @@ public Image getSystemImage (int id) {
 }
 
 /**
+ * Returns the single instance of the system-provided menu for the application, or
+ * <code>null</code> on platforms where no menu is provided for the application.
+ *
+ * @return the system menu, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getSystemMenu () {
+	checkDevice();
+	return null;
+}
+
+/**
  * Returns the single instance of the system taskBar or null
  * when there is no system taskBar available for the platform.
  *
@@ -2158,6 +2194,24 @@ public Thread getThread () {
 	}
 }
 
+/**	 
+ * Returns a boolean indicating whether a touch-aware input device is
+ * attached to the system and is ready for use.
+ *
+ * @return <code>true</code> if a touch-aware input device is detected, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkDevice();
+	return false;
+}
+
 Widget getWidget (int handle) {
 	if (handle == 0) return null;
 	property [0] = 0;
@@ -2297,7 +2351,9 @@ void initializeCallbacks () {
 		OS.kEventClassCommand, OS.kEventProcessCommand,
 	};
 	int appTarget = OS.GetApplicationEventTarget ();
-	OS.InstallEventHandler (appTarget, commandProc, mask1.length / 2, mask1, 0, null);
+	int [] handler = new int [1];
+	OS.InstallEventHandler (appTarget, commandProc, mask1.length / 2, mask1, 0, handler);
+	commandHandler = handler [0];
 	int[] mask2 = new int[] {
 		OS.kEventClassMouse, OS.kEventMouseDown,
 		OS.kEventClassMouse, OS.kEventMouseDragged,
@@ -2307,13 +2363,17 @@ void initializeCallbacks () {
 		OS.kEventClassMouse, OS.kEventMouseUp,
 		OS.kEventClassMouse, OS.kEventMouseWheelMoved,
 	};
-	OS.InstallEventHandler (appTarget, mouseProc, mask2.length / 2, mask2, 0, null);
+	handler [0] = 0;
+	OS.InstallEventHandler (appTarget, mouseProc, mask2.length / 2, mask2, 0, handler);
+	mouseHandler = handler [0];
 	int [] mask3 = new int[] {
 		OS.kEventClassApplication, OS.kEventAppDeactivated,
 		OS.kEventClassApplication, OS.kEventAppAvailableWindowBoundsChanged,
 		OS.kEventClassAppleEvent, OS.kEventAppleEvent,
 	};
-	OS.InstallEventHandler (appTarget, appleEventProc, mask3.length / 2, mask3, 0, null);
+	handler [0] = 0;
+	OS.InstallEventHandler (appTarget, appleEventProc, mask3.length / 2, mask3, 0, handler);
+	appleEventHandler = handler [0];
 	OS.AEInstallEventHandler(OS.kCoreEventClass, OS.kAEQuitApplication, coreEventProc, OS.kAEQuitApplication, false);
 
 	int [] mask4 = new int[] {
@@ -2323,7 +2383,9 @@ void initializeCallbacks () {
 		OS.kEventClassKeyboard, OS.kEventRawKeyUp,
 	};
 	int focusTarget = OS.GetUserFocusEventTarget ();
-	OS.InstallEventHandler (focusTarget, keyboardProc, mask4.length / 2, mask4, 0, null);
+	handler [0] = 0;
+	OS.InstallEventHandler (focusTarget, keyboardProc, mask4.length / 2, mask4, 0, handler);
+	keyboardHandler = handler [0];
 	int [] mask5 = new int[] {
 		OS.kEventClassTextInput, OS.kEventTextInputUnicodeForKeyEvent,
 		OS.kEventClassTextInput, OS.kEventTextInputUpdateActiveInputArea,
@@ -2331,7 +2393,9 @@ void initializeCallbacks () {
 		OS.kEventClassTextInput, OS.kEventTextInputPosToOffset,
 		OS.kEventClassTextInput, OS.kEventTextInputGetSelectedText,
 	};
-	OS.InstallEventHandler (focusTarget, textInputProc, mask5.length / 2, mask5, 0, null);
+	handler [0] = 0;
+	OS.InstallEventHandler (focusTarget, textInputProc, mask5.length / 2, mask5, 0, handler);
+	textInputHandler = handler [0];
 	OS.AEInstallEventHandler (OS.kAppearanceEventClass, OS.kAEAppearanceChanged, appearanceProc, 0, false);
 	OS.AEInstallEventHandler (OS.kAppearanceEventClass, OS.kAESmallSystemFontChanged, appearanceProc, 0, false);
 	OS.AEInstallEventHandler (OS.kAppearanceEventClass, OS.kAESystemFontChanged, appearanceProc, 0, false);
@@ -2339,8 +2403,10 @@ void initializeCallbacks () {
 	
 	int[] mask6 = new int[] {
 			SWT_CLASS, SWT_OPEN_FILE_KIND,
-		};
-	OS.InstallEventHandler (appTarget, launcherProc, mask6.length / 2, mask6, 0, null);
+	};
+	handler [0] = 0;
+	OS.InstallEventHandler (appTarget, launcherProc, mask6.length / 2, mask6, 0, handler);
+	launcherHandler = handler [0];
 	OS.AEInstallEventHandler(OS.kCoreEventClass, OS.kAEOpenDocuments, coreEventProc, OS.kAEOpenDocuments, false);
 	
 	int mode = OS.kCFRunLoopCommonModes ();
@@ -3310,7 +3376,22 @@ void releaseDisplay () {
 
 	if (gcWindow != 0) OS.DisposeWindow (gcWindow);
 	gcWindow = 0;
-
+	
+	/* Release event handlers */
+	if (appleEventHandler != 0) OS.RemoveEventHandler (appleEventHandler);
+	if (commandHandler != 0) OS.RemoveEventHandler (commandHandler);
+	if (mouseHandler != 0) OS.RemoveEventHandler (mouseHandler);
+	if (keyboardHandler != 0) OS.RemoveEventHandler (keyboardHandler);
+	if (textInputHandler != 0) OS.RemoveEventHandler (textInputHandler);
+	if (launcherHandler != 0) OS.RemoveEventHandler (launcherHandler);
+	appleEventHandler = commandHandler = mouseHandler = keyboardHandler = textInputHandler = launcherHandler = 0;
+	OS.AERemoveEventHandler (OS.kCoreEventClass, OS.kAEOpenDocuments, coreEventProc, false);
+	OS.AERemoveEventHandler (OS.kCoreEventClass, OS.kAEQuitApplication, coreEventProc, false);
+	OS.AERemoveEventHandler (OS.kAppearanceEventClass, OS.kAEAppearanceChanged, appearanceProc, false);
+	OS.AERemoveEventHandler (OS.kAppearanceEventClass, OS.kAESmallSystemFontChanged, appearanceProc, false);
+	OS.AERemoveEventHandler (OS.kAppearanceEventClass, OS.kAESystemFontChanged, appearanceProc, false);
+	OS.AERemoveEventHandler (OS.kAppearanceEventClass, OS.kAEViewsFontChanged, appearanceProc, false);
+	
 	/* Release Timers */
 	if (caretID != 0) OS.RemoveEventLoopTimer (caretID);
 	if (mouseHoverID != 0) OS.RemoveEventLoopTimer (mouseHoverID);
@@ -4332,6 +4413,7 @@ int trackingProc (int browser, int itemID, int property, int theRect, int startP
 }
 
 int trayItemProc (int target, int userData, int selector, int event) {
+	if (userData == 0) return 0;
 	TrayItem item = (TrayItem) OS.JNIGetObject (userData);
 	if (item != null) return item.trayItemProc (target, userData, selector, event);
 	return 0;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java
index b3d4ee6..a942c81 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FileDialog.java	
@@ -27,8 +27,7 @@ import org.eclipse.swt.internal.carbon.*;
  * <p>
  * Note: Only one of the styles SAVE and OPEN may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FontDialog.java
index 020c174..348d295 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FontDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/FontDialog.java	
@@ -27,8 +27,7 @@ import org.eclipse.swt.internal.carbon.RGBColor;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Label.java
index 561c617..cdcaf3f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Label.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Label.java	
@@ -43,8 +43,7 @@ import org.eclipse.swt.graphics.*;
  * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
  * Only one of CENTER, LEFT and RIGHT may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Menu.java
index cb05733..a08890f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Menu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Menu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -372,7 +372,7 @@ void fixMenus (Decorations newParent) {
 /*public*/ Rectangle getBounds () {
 	checkWidget ();
 	if ((style & SWT.BAR) != 0) {
-		Menu menu = display.getMenuBar ();
+		Menu menu = display._getMenuBar ();
 		if (this != menu) return new Rectangle (0, 0, 0, 0);
 		int height = OS.GetMBarHeight ();
 		int gdevice = OS.GetMainDevice ();
@@ -510,6 +510,24 @@ String getNameText () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Decorations</code>.
  *
  * @return the receiver's parent
@@ -1163,6 +1181,24 @@ public void setLocation (Point location) {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7  
+ */
+public void setOrientation (int orientation) {
+    checkWidget (); 
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MenuItem.java
index 6611e93..c2ada24 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ import org.eclipse.swt.internal.carbon.*;
  */
 public class MenuItem extends Item {
 	Menu parent, menu;
-	int accelerator;
+	int accelerator, userId;
 	boolean acceleratorSet;
 //	int x, y, width, height;
 
@@ -267,7 +267,7 @@ public int getAccelerator () {
 	if ((parent.style & SWT.BAR) != 0) {
 		int index = parent.indexOf (this);
 		if (index == -1) return new Rectangle (0 ,0, 0, 0);
-		Menu menu = display.getMenuBar ();
+		Menu menu = display._getMenuBar ();
 		if (parent != menu) return new Rectangle (0 ,0, 0, 0);
 		int outMenuRef [] = new int [1];
 		if (OS.GetMenuItemHierarchicalMenu (menu.handle, (short)(index + 1), outMenuRef) != OS.noErr) {
@@ -308,6 +308,23 @@ public boolean getEnabled () {
 }
 
 /**
+ * Gets the identifier associated with the receiver.
+ *
+ * @return the receiver's identifier
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getID () {
+	checkWidget();
+	return userId;
+}
+
+/**
  * Returns the receiver's cascade menu if it has one or null
  * if it does not. Only <code>CASCADE</code> menu items can have
  * a pull down menu. The sequence of key strokes, button presses 
@@ -671,6 +688,25 @@ public void setEnabled (boolean enabled) {
 }
 
 /**
+ * Sets the identifier associated with the receiver to the argument.
+ *
+ * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setID (int id) {
+	checkWidget();
+	if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+	userId = id;
+}
+
+/**
  * Sets the image the receiver will display to the argument.
  * <p>
  * Note: This operation is a hint and is not supported on
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MessageBox.java
index c2f6bbe..c63eb9e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MessageBox.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/MessageBox.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,8 +30,7 @@ import org.eclipse.swt.internal.carbon.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
  * ICON_WARNING and ICON_WORKING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
@@ -234,10 +233,30 @@ public int open () {
 			OS.SetFrontProcessWithOptions (new int [] {0, OS.kCurrentProcess}, OS.kSetFrontProcessFrontWindowOnly);
 		}
 		Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
+		/*
+		* Bug in carbon. For some reason, RunStandardAlert() hangs when there are
+		* windows opened with kUtilityWindowClass group.  The fix is to temporarily
+		* put those windows in the kFloatingWindowClass group.
+		*/
+		Shell [] shells = display.getShells ();
+		for (int i = 0; i < shells.length; i++) {
+			Shell shell = shells[i];
+			if ((shell.style & SWT.ON_TOP) != 0 && !shell.isDisposed () && shell.isVisible ()) {
+				OS.SetWindowGroup (shell.shellHandle, OS.GetWindowGroupOfClass (OS.kFloatingWindowClass));
+			} else {
+				shells[i] = null;
+			}
+		}
 		display.setModalDialog(this);
 		short [] outItemHit = new short [1];
 		OS.RunStandardAlert(dialogRef[0], 0, outItemHit);
 		display.setModalDialog(null);
+		for (int i = 0; i < shells.length; i++) {
+			Shell shell = shells[i];
+			if (shell != null && !shell.isDisposed ()) {
+				OS.SetWindowGroup (shell.shellHandle, shell.getParentGroup ());
+			}
+		}
 		if (outItemHit [0] != 0) {
 			switch (bits) {
 				case SWT.OK:
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ProgressBar.java
index c3d1d57..1e6d3c7 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ProgressBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ProgressBar.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Sash.java
index 1f59b75..f92b775 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Sash.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Sash.java	
@@ -32,8 +32,7 @@ import org.eclipse.swt.events.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scale.java
index 1c64e84..f986938 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scale.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scale.java	
@@ -31,8 +31,7 @@ import org.eclipse.swt.graphics.*;
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scrollable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scrollable.java
index d1b6d9c..f43a01a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scrollable.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Scrollable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -325,6 +325,29 @@ void redrawBackgroundImage () {
 	}
 }
 
+void redrawObscured () {
+	int visibleRgn = getVisibleRegion (handle, false), boundsRgn = OS.NewRgn();
+	OS.GetControlRegion (handle, (short) OS.kControlStructureMetaPart, boundsRgn);
+	int [] root = new int [1];
+	int window = OS.GetControlOwner (handle);
+	OS.GetRootControl (window, root);
+	OS.HIViewConvertRegion (boundsRgn, handle, root[0]);
+	OS.DiffRgn(boundsRgn, visibleRgn, boundsRgn);
+	boolean obscured = !OS.EmptyRgn (boundsRgn);
+	if (obscured) {
+		Rect rect = new Rect ();
+		OS.GetControlBounds (handle, rect);
+		rect.right += rect.left;
+		rect.bottom += rect.top;
+		rect.top = rect.left = 0;
+		OS.RectRgn (boundsRgn, rect);
+		OS.HIViewConvertRegion (boundsRgn, handle, 0);
+		redrawChildren (OS.HIViewGetRoot (window), boundsRgn);
+	}
+	OS.DisposeRgn(boundsRgn);
+	OS.DisposeRgn(visibleRgn);
+}
+
 void register () {
 	super.register ();
 	if (scrolledHandle != 0) display.addWidget (scrolledHandle, this);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java
index e4eaacb..b8a333d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Shell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,7 +110,7 @@ import org.eclipse.swt.graphics.*;
  * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
  * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
  * </p><p>
- * IMPORTANT: This class is not intended to be subclassed.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see Decorations
@@ -118,6 +118,7 @@ import org.eclipse.swt.graphics.*;
  * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Shell extends Decorations {
 	int shellHandle, windowGroup;
@@ -889,7 +890,8 @@ Shell getModalShell () {
 /**
  * Gets the receiver's modified state.
  *
- * </ul>
+ * @return <code>true</code> if the receiver is marked as modified, or <code>false</code> otherwise
+ * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -920,9 +922,9 @@ float [] getParentBackground () {
 
 /** 
  * Returns the region that defines the shape of the shell,
- * or null if the shell has the default shape.
+ * or <code>null</code> if the shell has the default shape.
  *
- * @return the region that defines the shape of the shell (or null)
+ * @return the region that defines the shape of the shell, or <code>null</code>
  *	
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -990,6 +992,27 @@ float getThemeAlpha () {
 	return 1;
 }
 
+/**
+ * Returns a ToolBar object representing the tool bar that can be shown in the receiver's
+ * trim. This will return <code>null</code> if the platform does not support tool bars that
+ * are not part of the content area of the shell, or if the Shell's style does not support 
+ * having a tool bar. 
+ * <p>
+ * 
+ * @return a ToolBar object representing the Shell's tool bar, or <ocde>null</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public ToolBar getToolBar() {
+	checkWidget();
+	return null;
+}
+
 boolean hasBorder () {
 	return false;
 }
@@ -1172,8 +1195,7 @@ void kEventWindowDeactivated () {
 	 * Bug in Mac OS X. When calling SelectWindow on a window with kWindowModalityWindowModal during
 	 * kEventWindowGetClickModality, multiple activation events are sent to the window even though the
 	 * window is already active. This will cause flicker as windows activate and deactivate. 
-	 * a deactivate is sent during activation. Fix is to watch for a deactivation event  
-	 * are sent to the window. 
+	 * Fix is to ignore deactivation events while processing an activation event.
 	 */
 	if (active && !isActivating) {
 		active = false;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java
index d4b5832..af8f799 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Table.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -2413,6 +2413,19 @@ int kEventUnicodeKeyPressed (int nextHandler, int theEvent, int userData) {
 	return result;
 }
 
+void redrawBackgroundImage () {
+	super.redrawBackgroundImage();
+	/*
+	* Bug in Carbon.  The data browser copies bits from the window buffer when
+	* scrolling.  If the control is obscured be a sibling control, the bits of the
+	* sibling are copied causing pixel corruption.  The fix is to detect that the
+	* data browser is obscured and redraw any control that overlaps with the data
+	* browser bounds.
+	*/
+	if (isDisposed()) return;
+	redrawObscured ();
+}
+
 void releaseChildren (boolean destroy) {
 	if (items != null) {
 		for (int i=0; i<itemCount; i++) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Text.java
index 1fef22f..e899ae2 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Text.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Text.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,7 +71,8 @@ public class Text extends Scrollable {
 	ControlEditTextSelectionRec selection;
 	char echoCharacter;
 	boolean doubleClick;
-	String hiddenText, message;
+	char [] hiddenText;
+	String message;
 	
 	/**
 	* The maximum number of characters that can be entered
@@ -1206,6 +1207,33 @@ public String getText (int start, int end) {
 	}
 }
 
+/**
+ * Returns the widget's text as a character array.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * a zero-length array if this has never been set.
+ * </p>
+ *
+ * @return a character array that contains the widget's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setTextChars(char[])
+ *
+ * @since 3.7
+ */
+public char [] getTextChars () {
+	checkWidget();
+	if (txnObject == 0) {
+		return getEditText ();
+	} else {
+		return getTXNChars (OS.kTXNStartOffset, OS.kTXNEndOffset);
+	}
+}
+
 char [] getEditText () {
 	int [] ptr = new int [1];
 	int [] actualSize = new int [1];
@@ -1216,7 +1244,7 @@ char [] getEditText () {
 	range.length = length;
 	char [] buffer = new char [range.length];
 	if (hiddenText != null) {
-		hiddenText.getChars (0, range.length, buffer, 0);
+		System.arraycopy (hiddenText, 0, buffer, 0, range.length);
 	} else {
 		OS.CFStringGetCharacters (ptr [0], range, buffer);
 	}
@@ -1238,7 +1266,7 @@ char [] getEditText (int start, int end) {
 	range.length = Math.max (0, end - start + 1);
 	char [] buffer = new char [range.length];
 	if (hiddenText != null) {
-		hiddenText.getChars (range.location, range.location + range.length, buffer, 0);
+		System.arraycopy (hiddenText, range.location, buffer, 0, range.length);
 	} else {
 		OS.CFStringGetCharacters (ptr [0], range, buffer);
 	}
@@ -1686,7 +1714,8 @@ void register () {
 void releaseWidget () {
 	super.releaseWidget ();
 	txnObject = 0;
-	hiddenText = message = null;
+	hiddenText = null;
+	message = null;
 }
 
 /**
@@ -1995,7 +2024,7 @@ public void setEchoChar (char echo) {
 	if (txnObject == 0) {
 		if ((style & SWT.PASSWORD) == 0) {
 			Point selection = getSelection ();
-			String text = getText ();
+			char [] text = getTextChars ();
 			echoCharacter = echo;
 			setEditText (text);
 			setSelection (selection);
@@ -2319,18 +2348,65 @@ public void setText (String string) {
 	sendModifyEvent (true);
 }
 
+/**
+ * Sets the contents of the receiver to the characters in the array. If the receiver
+ * has style <code>SWT.SINGLE</code> and the argument contains multiple lines of text
+ * then the result of this operation is undefined and may vary between platforms.
+ *
+ * @param text a character array that contains the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getTextChars()
+ *
+ * @since 3.7
+ */
+public void setTextChars (char [] text) {
+	checkWidget();
+	if (text == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		String string = verifyText (new String (text), 0, getCharCount (), null);
+		if (string == null) return;
+		text = new char [string.length()];
+		string.getChars (0, text.length, text, 0);
+	}
+	if (txnObject == 0) {
+		setEditText (text);
+	} else {
+		setTXNText (OS.kTXNStartOffset, OS.kTXNEndOffset, text);
+		OS.TXNSetSelection (txnObject, OS.kTXNStartOffset, OS.kTXNStartOffset);
+		OS.TXNShowSelection (txnObject, false);
+	}
+	sendModifyEvent (true);
+}
+
 void setEditText (String string) {
+	char [] text = new char [string.length()];
+	string.getChars (0, text.length, text, 0);
+	setEditText (text);
+}
+
+void setEditText (char [] text) {
 	char [] buffer;
+	int length = Math.min(text.length, textLimit);
 	if ((style & SWT.PASSWORD) == 0 && echoCharacter != '\0') {
-		hiddenText = string;
-		buffer = new char [Math.min(hiddenText.length (), textLimit)];
-		for (int i = 0; i < buffer.length; i++) buffer [i] = echoCharacter;
+		hiddenText = new char [length];
+		buffer = new char [length];
+		for (int i = 0; i < length; i++) {
+			hiddenText [i] = text [i];
+			buffer [i] = echoCharacter;
+		}
 	} else {
 		hiddenText = null;
-		buffer = new char [Math.min(string.length (), textLimit)];
-		string.getChars (0, buffer.length, buffer, 0);
+		buffer = text;
 	}
-	int ptr = OS.CFStringCreateWithCharacters (OS.kCFAllocatorDefault, buffer, buffer.length);
+	int ptr = OS.CFStringCreateWithCharacters (OS.kCFAllocatorDefault, buffer, length);
 	if (ptr == 0) error (SWT.ERROR_CANNOT_SET_TEXT);
 	OS.SetControlData (handle, OS.kControlEntireControl, OS.kControlEditTextCFStringTag, 4, new int[] {ptr});
 	OS.CFRelease (ptr);
@@ -2338,7 +2414,13 @@ void setEditText (String string) {
 }
 
 void setTXNText (int iStartOffset, int iEndOffset, String string) {
-	int length = string.length ();
+	char [] text = new char [string.length()];
+	string.getChars (0, text.length, text, 0);
+	setTXNText (iStartOffset, iEndOffset, text);
+}
+
+void setTXNText (int iStartOffset, int iEndOffset, char [] text) {
+	int length = text.length;
 	if (textLimit != LIMIT) {
 		int charCount = OS.TXNDataSize (txnObject) / 2;
 		int start = iStartOffset, end = iEndOffset;
@@ -2353,12 +2435,10 @@ void setTXNText (int iStartOffset, int iEndOffset, String string) {
 		}
 		if (charCount - (end - start) + length > textLimit) length = textLimit - charCount + (end - start);
 	}
-	char [] buffer = new char [length];
-	string.getChars (0, buffer.length, buffer, 0);
 	boolean readOnly = (style & SWT.READ_ONLY) != 0;
 	int [] tag = new int [] {OS.kTXNIOPrivilegesTag};
 	if (readOnly) OS.TXNSetTXNObjectControls (txnObject, false, 1, tag, new int [] {0});
-	OS.TXNSetData (txnObject, OS.kTXNUnicodeTextData, buffer, buffer.length * 2, iStartOffset, iEndOffset);
+	OS.TXNSetData (txnObject, OS.kTXNUnicodeTextData, text, length * 2, iStartOffset, iEndOffset);
 	if (readOnly) OS.TXNSetTXNObjectControls (txnObject, false, 1, tag, new int [] {1});
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolItem.java
index c2bd67b..e4b23c5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1324,7 +1324,14 @@ void setVisible (boolean visible) {
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
- * @param width the new width
+ * @param width the new width. If the new value is <code>SWT.DEFAULT</code>,
+ * the width is a fixed-width area whose amount is determined by the platform.
+ * If the new value is 0 a vertical or horizontal line will be drawn, depending
+ * on the setting of the corresponding style bit (<code>SWT.VERTICAL</code> or 
+ * <code>SWT.HORIZONTAL</code>). If the new value is <code>SWT.SEPARATOR_FILL</code>
+ * a variable-width space is inserted that acts as a spring between the two adjoining
+ * items which will push them out to the extent of the containing ToolBar.
+ * 
  *
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolTip.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolTip.java
index e066bcf..adf916e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolTip.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ToolTip.java	
@@ -31,8 +31,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION,
  * and ICON_WARNING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#tooltips">Tool Tips snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tracker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tracker.java
index 2ab6afa..887d4ef 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tracker.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tracker.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java
old mode 100644
new mode 100755
index 7baa1f2..d60768b
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -275,7 +275,11 @@ void releaseWidget () {
 	Cocoa.objc_msgSend (statusBar, Cocoa.S_removeStatusItem, handle);
 	Cocoa.objc_msgSend (handle, Cocoa.S_release);
 	if (nsImage != 0) Cocoa.objc_msgSend (nsImage, Cocoa.S_release);
-	if (view != 0) Cocoa.objc_msgSend (view, Cocoa.S_release);
+	if (view != 0) {
+		Cocoa.objc_msgSend(view, Cocoa.S_setUserData, 0);
+		Cocoa.objc_msgSend(view, Cocoa.S_setProc, 0);
+		Cocoa.objc_msgSend (view, Cocoa.S_release);
+	}
 	if (jniRef != 0) OS.DeleteGlobalRef (jniRef);
 	handle = nsImage = view = jniRef = 0;
 }
@@ -456,6 +460,7 @@ public void setVisible (boolean visible) {
 void displayMenu () {
 	if (highlight) {
 		Cocoa.objc_msgSend(view, Cocoa.S_display);
+		Display display = this.display;
 		display.trayItemMenu = null;
 		showMenu();
 		if (display.trayItemMenu != null) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java
index b499f4e..8723098 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Tree.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -2686,6 +2686,19 @@ int kEventMouseDown (int nextHandler, int theEvent, int userData) {
 	return result;
 }
 
+void redrawBackgroundImage () {
+	super.redrawBackgroundImage();
+	/*
+	* Bug in Carbon.  The data browser copies bits from the window buffer when
+	* scrolling.  If the control is obscured be a sibling control, the bits of the
+	* sibling are copied causing pixel corruption.  The fix is to detect that the
+	* data browser is obscured and redraw any control that overlaps with the data
+	* browser bounds.
+	*/
+	if (isDisposed()) return;
+	redrawObscured ();
+}
+
 void releaseItem (TreeItem item, boolean release) {
 	int id = item.id;
 	if (release) item.release (false);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java
index f44ac49..c24eb1c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Widget.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,9 +86,9 @@ public abstract class Widget {
 	static final int FOREIGN_HANDLE = 1<<17;
 	static final int DRAG_DETECT = 1<<18;
 
-	/* Safari fixes */
-	static final int SAFARI_EVENTS_FIX = 1<<19;
-	static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$
+	/* WebKit fixes */
+	static final int WEBKIT_EVENTS_FIX = 1<<19;
+	static final String WEBKIT_EVENTS_FIX_KEY = "org.eclipse.swt.internal.webKitEventsFix"; //$NON-NLS-1$
 	
 	static final String IS_ACTIVE = "org.eclipse.swt.internal.isActive"; //$NON-NLS-1$
 
@@ -1697,7 +1697,7 @@ void sendEvent (int eventType, Event event, boolean send) {
 }
 
 boolean sendKeyEvent (int type, int theEvent) {
-	if ((state & SAFARI_EVENTS_FIX) != 0) return true;
+	if ((state & WEBKIT_EVENTS_FIX) != 0) return true;
 	int [] length = new int [1];
 	int status = OS.GetEventParameter (theEvent, OS.kEventParamKeyUnicodes, OS.typeUnicodeText, null, 4, length, (char[])null);
 	if (status == OS.noErr && length [0] > 2) {
@@ -1843,8 +1843,8 @@ int setBounds (int control, int x, int y, int width, int height, boolean move, b
  */
 public void setData (Object data) {
 	checkWidget();
-	if (SAFARI_EVENTS_FIX_KEY.equals(data)) {
-		state |= SAFARI_EVENTS_FIX;
+	if (WEBKIT_EVENTS_FIX_KEY.equals(data)) {
+		state |= WEBKIT_EVENTS_FIX;
 		return;
 	}
 	if ((state & KEYED_DATA) != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java
old mode 100644
new mode 100755
index 7f4ba39..a214cd4
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -282,7 +282,7 @@ void createNSCursor(int hotspotX, int hotspotY, byte[] buffer, int width, int he
 	size.height =  height;
 	nsImage = nsImage.initWithSize(size);
 	nsImageRep = nsImageRep.initWithBitmapDataPlanes(0, width, height,
-			8, 4, true, false, new NSString(OS.NSDeviceRGBColorSpace()),
+			8, 4, true, false, OS.NSDeviceRGBColorSpace,
 			OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, width * 4, 32);
 	OS.memmove(nsImageRep.bitmapData(), buffer, buffer.length);
 	nsImage.addRepresentation(nsImageRep);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Device.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Device.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/DeviceData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/DeviceData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java
old mode 100644
new mode 100755
index b1be7e9..1382edd
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,6 +60,12 @@ public final class Font extends Resource {
 	 */
 	public int extraTraits;
 	
+	/**
+	 * FontMetrics of this font. This has to be calculated by GC, so it's more
+	 * efficient to do it once and store it with the Font.
+	 */
+	FontMetrics metrics = null;
+	
 	static final double SYNTHETIC_BOLD = -2.5;
 	static final double SYNTHETIC_ITALIC = 0.2;
 
@@ -200,6 +206,7 @@ void addTraits(NSMutableDictionary dict) {
 void destroy() {
 	handle.release();
 	handle = null;
+	metrics = null;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java
old mode 100644
new mode 100755
index c25f636..6dcd68b
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java	
@@ -320,7 +320,7 @@ public int getStyle() {
  * @see #equals
  */
 public int hashCode () {
-	return name.hashCode() ^ getHeight() ^ style;
+	return name.hashCode() ^ getHeight() << 8 ^ style;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java
old mode 100644
new mode 100755
index 2c0d6a7..919fa28
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -130,4 +130,21 @@ public int hashCode() {
 	return ascent ^ descent ^ averageCharWidth ^ leading ^ height;
 }
 
+String getName () {
+	String string = getClass ().getName ();
+	int index = string.lastIndexOf ('.');
+	if (index == -1) return string;
+	return string.substring (index + 1, string.length ());
+}
+
+public String toString() {
+	return getName() + 
+		"{" 
+		+ " ascent=" + ascent
+		+ " descent=" + descent
+		+ " averageCharWidth=" + averageCharWidth
+		+ " leading=" + leading
+		+ " height=" + height
+		+ "}";
+}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java
old mode 100644
new mode 100755
index 71699fd..51b9e21
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -276,6 +276,8 @@ NSAutoreleasePool checkGC (int mask) {
 		}
 	}
 
+	OS.CGContextSetBlendMode(handle.graphicsPort(), data.xorMode ? OS.kCGBlendModeDifference : OS.kCGBlendModeNormal);
+
 	int state = data.state;
 	if ((state & mask) == mask) return pool;
 	state = (state ^ mask) & mask;	
@@ -742,8 +744,8 @@ static int /*long*/ createCGPathRef(NSBezierPath nsPath) {
 
 void createLayout () {
 	NSSize size = new NSSize();
-	size.width = Float.MAX_VALUE;
-	size.height = Float.MAX_VALUE;
+	size.width = OS.MAX_TEXT_CONTAINER_SIZE;
+	size.height = OS.MAX_TEXT_CONTAINER_SIZE;
 	NSTextStorage textStorage = (NSTextStorage)new NSTextStorage().alloc().init();
 	NSLayoutManager layoutManager = (NSLayoutManager)new NSLayoutManager().alloc().init();
 	layoutManager.setBackgroundLayoutEnabled(NSThread.isMainThread());
@@ -1906,8 +1908,8 @@ void fillPattern(NSBezierPath path, Pattern pattern) {
 	float /*double*/ difx = end.x - start.x;
 	float /*double*/ dify = end.y - start.y;
 	if (difx == 0 && dify == 0) {
-		float /*double*/ [] color = pattern.color1;
-		NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f).setFill();
+		float /*double*/ [] color = pattern.color1;		
+		NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f).setFill();		
 		path.fill();
 		handle.restoreGraphicsState();
 		return;
@@ -2536,17 +2538,26 @@ public FontMetrics getFontMetrics() {
 	NSAutoreleasePool pool = checkGC(FONT);
 	try {
 		if (data.textStorage == null) createLayout();
-		String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  //$NON-NLS-1$
-		NSAttributedString attribStr = createString(s, 0, false);
-		data.textStorage.setAttributedString(attribStr);
-		attribStr.release();
-		NSLayoutManager layoutManager = data.layoutManager;
-		layoutManager.glyphRangeForTextContainer(data.textContainer);
-		NSRect rect = layoutManager.usedRectForTextContainer(data.textContainer);
-		int width = (int)Math.ceil(rect.width);
-		int ascent = (int)layoutManager.defaultBaselineOffsetForFont(data.font.handle);
-		int height = (int)layoutManager.defaultLineHeightForFont(data.font.handle);
-		return FontMetrics.cocoa_new(ascent, height - ascent, width / s.length(), 0, height);
+
+		if (data.font.metrics == null) {
+			String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  //$NON-NLS-1$
+			NSMutableDictionary dict = ((NSMutableDictionary)new NSMutableDictionary().alloc()).initWithCapacity(3);
+			dict.setObject(data.font.handle, OS.NSFontAttributeName);
+			data.font.addTraits(dict);
+			NSAttributedString attribStr = ((NSAttributedString)new NSAttributedString().alloc()).initWithString(NSString.stringWith(s), dict);
+			data.textStorage.setAttributedString(attribStr);
+			attribStr.release();
+			dict.release();
+			NSLayoutManager layoutManager = data.layoutManager;
+			layoutManager.glyphRangeForTextContainer(data.textContainer);
+			NSRect rect = layoutManager.usedRectForTextContainer(data.textContainer);
+			int avgWidth = (int) Math.ceil(rect.width) / s.length();
+			int ascent = (int)layoutManager.defaultBaselineOffsetForFont(data.font.handle);
+			int height = (int)layoutManager.defaultLineHeightForFont(data.font.handle);
+			data.font.metrics = FontMetrics.cocoa_new(ascent, height - ascent, avgWidth, 0, height); 
+		}
+		
+		return data.font.metrics;
 	} finally {
 		uncheckGC(pool);
 	}
@@ -3924,7 +3935,7 @@ public Point textExtent(String string, int flags) {
 	try {
 		int length = string.length();
 		if (data.textStorage == null) createLayout();
-		NSAttributedString attribStr = createString(length == 0 ? " " : string, flags, true); //$NON-NLS-1$
+		NSAttributedString attribStr = createString(length == 0 ? " " : string, flags, false); //$NON-NLS-1$
 		data.textStorage.setAttributedString(attribStr);
 		attribStr.release();
 		data.layoutManager.glyphRangeForTextContainer(data.textContainer);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GCData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GCData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java
old mode 100644
new mode 100755
index 3a38788..0122f79
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java
old mode 100644
new mode 100755
index 1de065c..7a87377
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -359,8 +359,8 @@ public void addString(String string, float x, float y, Font font) {
 		NSLayoutManager layoutManager = (NSLayoutManager)new NSLayoutManager().alloc().init();
 		NSTextContainer textContainer = (NSTextContainer)new NSTextContainer().alloc();
 		NSSize size = new NSSize();
-		size.width = Float.MAX_VALUE;
-		size.height = Float.MAX_VALUE;
+		size.width = OS.MAX_TEXT_CONTAINER_SIZE;
+		size.height = OS.MAX_TEXT_CONTAINER_SIZE;
 		textContainer.initWithContainerSize(size);
 		textStorage.addLayoutManager(layoutManager);
 		layoutManager.addTextContainer(textContainer);
@@ -634,26 +634,26 @@ public PathData getPathData() {
 				case OS.NSMoveToBezierPathElement:
 					types[typeCount++] = SWT.PATH_MOVE_TO;
 					OS.memmove(pt, points, NSPoint.sizeof);
-					pointArray[pointCount++] = (int)pt.x;
-					pointArray[pointCount++] = (int)pt.y;
+					pointArray[pointCount++] = (float)pt.x;
+					pointArray[pointCount++] = (float)pt.y;
 					break;
 				case OS.NSLineToBezierPathElement:
 					types[typeCount++] = SWT.PATH_LINE_TO;
 					OS.memmove(pt, points, NSPoint.sizeof);
-					pointArray[pointCount++] = (int)pt.x;
-					pointArray[pointCount++] = (int)pt.y;
+					pointArray[pointCount++] = (float)pt.x;
+					pointArray[pointCount++] = (float)pt.y;
 					break;
 				case OS.NSCurveToBezierPathElement:
 					types[typeCount++] = SWT.PATH_CUBIC_TO;
 					OS.memmove(pt, points, NSPoint.sizeof);
-					pointArray[pointCount++] = (int)pt.x;
-					pointArray[pointCount++] = (int)pt.y;
+					pointArray[pointCount++] = (float)pt.x;
+					pointArray[pointCount++] = (float)pt.y;
 					OS.memmove(pt, points + NSPoint.sizeof, NSPoint.sizeof);
-					pointArray[pointCount++] = (int)pt.x;
-					pointArray[pointCount++] = (int)pt.y;
+					pointArray[pointCount++] = (float)pt.x;
+					pointArray[pointCount++] = (float)pt.y;
 					OS.memmove(pt, points + NSPoint.sizeof + NSPoint.sizeof, NSPoint.sizeof);
-					pointArray[pointCount++] = (int)pt.x;
-					pointArray[pointCount++] = (int)pt.y;
+					pointArray[pointCount++] = (float)pt.x;
+					pointArray[pointCount++] = (float)pt.y;
 					break;
 				case OS.NSClosePathBezierPathElement:
 					types[typeCount++] = SWT.PATH_CLOSE;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java
old mode 100644
new mode 100755
index 4d72b20..46875f9
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Region.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Region.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java
old mode 100644
new mode 100755
index ecf88c9..9aaba2f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -151,6 +151,7 @@ void computeRuns() {
 	NSRange range = new NSRange();
 	range.length = attrStr.length();
 	attrStr.addAttribute(OS.NSFontAttributeName, defaultFont.handle, range);
+	attrStr.addAttribute(OS.NSLigatureAttributeName, NSNumber.numberWithInt(0), range);
 	defaultFont.addTraits(attrStr, range);
 	//TODO ascend descent wrap
 	NSMutableParagraphStyle paragraph = (NSMutableParagraphStyle)new NSMutableParagraphStyle().alloc().init();
@@ -290,8 +291,8 @@ void computeRuns() {
 	attrStr.endEditing();
 
 	NSSize size = new NSSize();
-	size.width = wrapWidth != -1 ? wrapWidth : Float.MAX_VALUE;
-	size.height = Float.MAX_VALUE;
+	size.width = wrapWidth != -1 ? wrapWidth : OS.MAX_TEXT_CONTAINER_SIZE;
+	size.height = OS.MAX_TEXT_CONTAINER_SIZE;
 	if (textStorage == null) {
 		textStorage = (NSTextStorage)new NSTextStorage().alloc().init();
 		layoutManager = (NSLayoutManager)new NSLayoutManager().alloc().init();
@@ -446,7 +447,7 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 			layoutManager.drawBackgroundForGlyphRange(range, pt);
 		}
 		boolean hasSelection = selectionStart <= selectionEnd && selectionStart != -1 && selectionEnd != -1;
-		if (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0) {
+		if (hasSelection || ((flags & SWT.LAST_LINE_SELECTION) != 0 && (flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0)) {
 			if (selectionBackground == null) selectionBackground = device.getSystemColor(SWT.COLOR_LIST_SELECTION);
 			NSColor selectionColor = NSColor.colorWithDeviceRed(selectionBackground.handle[0], selectionBackground.handle[1], selectionBackground.handle[2], selectionBackground.handle[3]);
 			NSBezierPath path = NSBezierPath.bezierPath();
@@ -465,8 +466,8 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 					path.appendBezierPathWithRect(rect);
 				}
 			}
-			//TODO draw full selection for wrapped text
-			if ((flags & SWT.LAST_LINE_SELECTION) != 0) {
+			//TODO draw full selection for wrapped text and delimiter selection for hard breaks
+			if ((flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0 && (/*hasSelection ||*/ (flags & SWT.LAST_LINE_SELECTION) != 0)) {
 				NSRect bounds = lineBounds[lineBounds.length - 1];
 				rect.x = pt.x + bounds.x + bounds.width;
 				rect.y = y + bounds.y;
@@ -642,14 +643,16 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 }
 
 void fixRect(NSRect rect) {
+	float /*double*/ right = -1;
 	for (int j = 0; j < lineBounds.length; j++) {
 		NSRect line = lineBounds[j];
-		if (line.y <= rect.y && rect.y < line.y + line.height) {
-			if (rect.x + rect.width > line.x + line.width) {
-				rect.width = line.x + line.width - rect.x;
-			}
+		if (rect.y <= line.y && line.y <= rect.y + rect.height) {
+			right = Math.max(right, line.x + line.width);
 		}
 	}
+	if (right != -1 && rect.x + rect.width > right) {
+		rect.width = right - rect.x;
+	}
 }
 
 void freeRuns() {
@@ -1060,30 +1063,35 @@ public Point getLocation(int offset, boolean trailing) {
 		int length = text.length();
 		if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
 		if (length == 0) return new Point(0, 0);
-		offset = translateOffset(offset);
-		int /*long*/ glyphIndex = layoutManager.glyphIndexForCharacterAtIndex(offset);
-		NSRect rect = layoutManager.lineFragmentUsedRectForGlyphAtIndex(glyphIndex, 0);
-		NSPoint point = layoutManager.locationForGlyphAtIndex(glyphIndex);
-		boolean rtl = false;
-		NSRange range  = new NSRange();
-		range.location = glyphIndex;
-		range.length = 1;
-		byte[] bidiLevels = new byte[1];
-		int /*long*/ result = layoutManager.getGlyphsInRange(range, 0, 0, 0, 0, bidiLevels);
-		if (result > 0) {
-			rtl = (bidiLevels[0] & 1) != 0;
-		}
-		if (trailing != rtl) {
-			int /*long*/ [] rectCount = new int /*long*/ [1];
-			int /*long*/ pArray = layoutManager.rectArrayForGlyphRange(range, range, textContainer, rectCount);
-			if (rectCount[0] > 0) {
-				NSRect bounds = new NSRect();
-				OS.memmove(bounds, pArray, NSRect.sizeof);
-				fixRect(bounds);
-				point.x += bounds.width;
+		if (offset == length) {
+			NSRect rect = lineBounds[lineBounds.length - 1];
+			return new Point((int)(rect.x + rect.width), (int)rect.y);
+		} else {
+			offset = translateOffset(offset);
+			int /*long*/ glyphIndex = layoutManager.glyphIndexForCharacterAtIndex(offset);
+			NSRect rect = layoutManager.lineFragmentUsedRectForGlyphAtIndex(glyphIndex, 0);
+			NSPoint point = layoutManager.locationForGlyphAtIndex(glyphIndex);
+			boolean rtl = false;
+			NSRange range  = new NSRange();
+			range.location = glyphIndex;
+			range.length = 1;
+			byte[] bidiLevels = new byte[1];
+			int /*long*/ result = layoutManager.getGlyphsInRange(range, 0, 0, 0, 0, bidiLevels);
+			if (result > 0) {
+				rtl = (bidiLevels[0] & 1) != 0;
+			}
+			if (trailing != rtl) {
+				int /*long*/ [] rectCount = new int /*long*/ [1];
+				int /*long*/ pArray = layoutManager.rectArrayForGlyphRange(range, range, textContainer, rectCount);
+				if (rectCount[0] > 0) {
+					NSRect bounds = new NSRect();
+					OS.memmove(bounds, pArray, NSRect.sizeof);
+					fixRect(bounds);
+					point.x += bounds.width;
+				}
 			}
+			return new Point((int)point.x, (int)rect.y);
 		}
-		return new Point((int)point.x, (int)rect.y);
 	} finally {
 		if (pool != null) pool.release();
 	}
@@ -1123,17 +1131,26 @@ int _getOffset (int offset, int movement, boolean forward) {
 	computeRuns();
 	int length = text.length();
 	if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
-	if (length == 0) return 0;
+	if (forward && offset == length) return length;
+	if (!forward && offset == 0) return 0;
+	int step = forward ? 1 : -1;
+	if ((movement & SWT.MOVEMENT_CHAR) != 0) return offset + step;
 	switch (movement) {
-		case SWT.MOVEMENT_CLUSTER://TODO cluster
-		case SWT.MOVEMENT_CHAR: {
-				if (forward) {
-					if (offset < length) offset++;
-				} else {
-					if (offset > 0) offset--;
+		case SWT.MOVEMENT_CLUSTER:
+			//TODO cluster
+			offset += step;
+			if (0 <= offset && offset < length) {
+				char ch = text.charAt(offset);
+				if (0xDC00 <= ch && ch <= 0xDFFF) {
+					if (offset > 0) {
+						ch = text.charAt(offset - 1);
+						if (0xD800 <= ch && ch <= 0xDBFF) {
+							offset += step;
+						}
+					}
 				}
-				return offset;
-		}
+			}
+			break;
 		case SWT.MOVEMENT_WORD: {
 			offset = translateOffset(offset);
 			offset = (int)/*64*/textStorage.nextWordFromIndex(offset, forward);
@@ -1242,11 +1259,25 @@ public int getOffset(int x, int y, int[] trailing) {
 		NSPoint pt = new NSPoint();
 		pt.x = x;
 		pt.y = y;
-		float /*double*/[] partialFration = new float /*double*/[1];
-		int /*long*/ glyphIndex = layoutManager.glyphIndexForPoint(pt, textContainer, partialFration);
-		int /*long*/ offset = layoutManager.characterIndexForGlyphAtIndex(glyphIndex);
-		if (trailing != null) trailing[0] = Math.round((float)/*64*/partialFration[0]);
-		return Math.min(untranslateOffset((int)/*64*/offset), length - 1);
+		float /*double*/[] partialFraction = new float /*double*/[1];
+		int /*long*/ glyphIndex = layoutManager.glyphIndexForPoint(pt, textContainer, partialFraction);
+		int offset = (int)/*64*/layoutManager.characterIndexForGlyphAtIndex(glyphIndex);
+		offset = Math.min(untranslateOffset(offset), length - 1);
+		if (trailing != null) {
+			trailing[0] = Math.round((float)/*64*/partialFraction[0]);
+			if (partialFraction[0] >= 0.5) {
+				char ch = text.charAt(offset);
+				if (0xD800 <= ch && ch <= 0xDBFF) {
+					if (offset + 1 < length) {
+						ch = text.charAt(offset + 1);
+						if (0xDC00 <= ch && ch <= 0xDFFF) {
+							trailing[0]++;
+						}
+					}
+				}
+			}
+		}
+		return offset;
 	} finally {
 		if (pool != null) pool.release();
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Transform.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Transform.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java
old mode 100644
new mode 100755
index d47c681..256c9f6
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,8 +35,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
  * when the ARROW style is specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
@@ -52,6 +51,9 @@ public class Button extends Control {
 	static final int EXTRA_HEIGHT = 2;
 	static final int EXTRA_WIDTH = 6;
 	static final int IMAGE_GAP = 2;
+	static final int SMALL_BUTTON_HEIGHT = 28;
+	static final int REGULAR_BUTTON_HEIGHT = 32;
+	static final int MAX_SIZE = 40000;
 	
 /**
  * Constructs a new instance of this class given its parent
@@ -133,13 +135,40 @@ public void addSelectionListener(SelectionListener listener) {
 	addListener(SWT.DefaultSelection,typedListener);
 }
 
-NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
-	NSSize size = super.cellSize(id, sel);
+NSSize cellSizeForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	NSSize size = super.cellSizeForBounds(id, sel, cellFrame);
 	if (image != null && ((style & (SWT.CHECK|SWT.RADIO)) !=0)) {
 		NSSize imageSize = image.handle.size();
 		size.width += imageSize.width + IMAGE_GAP;
 		size.height = Math.max(size.height, imageSize.height);
 	}
+	
+	if (((style & (SWT.PUSH|SWT.TOGGLE)) !=0) && (style & (SWT.FLAT|SWT.WRAP)) == 0) {
+		if (image != null) {
+			NSCell cell = new NSCell(id);
+			if (cell.controlSize() == OS.NSSmallControlSize) size.height += EXTRA_HEIGHT;
+		}
+		// TODO: Why is this necessary?
+		size.width += EXTRA_WIDTH;
+	}
+	
+	if ((style & SWT.WRAP) != 0 && text.length() != 0 && cellFrame.width < MAX_SIZE) {
+		NSCell cell = new NSCell (id);
+		NSRect titleRect = cell.titleRectForBounds(cellFrame);
+		NSSize wrapSize = new NSSize();
+		wrapSize.width = titleRect.width;
+		wrapSize.height = MAX_SIZE;
+		NSAttributedString attribStr = createString(text, null, foreground, style, true, true, true);
+		NSRect rect = attribStr.boundingRectWithSize(wrapSize, OS.NSStringDrawingUsesLineFragmentOrigin);
+		attribStr.release();
+		float /*double*/ trimHeight = size.height - titleRect.height;
+		size.height = rect.height;
+		if (image != null && ((style & (SWT.CHECK|SWT.RADIO)) !=0)) {
+			NSSize imageSize = image.handle.size();
+			size.height = Math.max(size.height, imageSize.height);
+		}
+		size.height += trimHeight;
+	}
 	return size;
 }
 
@@ -170,15 +199,20 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		int height = hHint != SWT.DEFAULT ? hHint : 14;
 		return new Point (width, height);
 	}
-	NSSize size = ((NSButton)view).cell ().cellSize ();
+	NSSize size = null;
+	NSCell cell = ((NSButton)view).cell ();
+	if ((style & SWT.WRAP) != 0 && wHint != SWT.DEFAULT) {
+		NSRect rect = new NSRect ();
+		rect.width = wHint;
+		rect.height = hHint != SWT.DEFAULT ? hHint : MAX_SIZE;
+		size = cell.cellSizeForBounds (rect);
+	} else {
+		size = cell.cellSize ();
+	}
 	int width = (int)Math.ceil (size.width);
 	int height = (int)Math.ceil (size.height);
 	if (wHint != SWT.DEFAULT) width = wHint;
 	if (hHint != SWT.DEFAULT) height = hHint;
-	if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & SWT.FLAT) == 0) {
-		if (display.smallFonts) height += EXTRA_HEIGHT;
-		width += EXTRA_WIDTH;
-	}
 	return new Point (width, height);
 }
 
@@ -192,34 +226,25 @@ void createHandle () {
 	if ((style & SWT.PUSH) == 0) state |= THEME_BACKGROUND;
 	NSButton widget = (NSButton)new SWTButton().alloc();
 	widget.init();
-	/*
-	* Feature in Cocoa.  Images touch the edge of rounded buttons
-	* when set to small size. The fix to subclass the button cell
-    * and offset the image drawing.
-	*/
-//	if (display.smallFonts && (style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & SWT.FLAT) == 0) {
-		NSButtonCell cell = (NSButtonCell)new SWTButtonCell ().alloc ().init ();
-		widget.setCell (cell);
-		cell.release ();
-//	}
-	int type = OS.NSMomentaryLightButton;
-	if ((style & SWT.PUSH) != 0) {
-		boolean flat = (style & SWT.FLAT) != 0;
-		if (!flat) {
-			NSView superview = widget.superview();
-			while (superview != null) {
-				if (superview.isKindOfClass(OS.class_NSTableView)) {
-					flat = true;
-					break;
-				}
-				superview = superview.superview();
+	NSButtonCell cell = (NSButtonCell)new SWTButtonCell ().alloc ().init ();
+	widget.setCell (cell);
+	cell.release ();
+	if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & SWT.FLAT) == 0) {
+		NSView superview = parent.view;
+		while (superview != null) {
+			if (superview.isKindOfClass(OS.class_NSTableView)) {
+				style |= SWT.FLAT;
+				break;
 			}
+			superview = superview.superview();
 		}
-		if (flat) {
+	}
+	int type = OS.NSMomentaryLightButton;
+	if ((style & SWT.PUSH) != 0) {
+		if ((style & SWT.FLAT) != 0) {
 			widget.setBezelStyle(OS.NSShadowlessSquareBezelStyle);
-//			if ((style & SWT.BORDER) == 0) widget.setShowsBorderOnlyWhileMouseInside(true);
 		} else {
-			widget.setBezelStyle(OS.NSRoundedBezelStyle);
+			widget.setBezelStyle((style & SWT.WRAP) != 0 ? OS.NSRegularSquareBezelStyle : OS.NSRoundedBezelStyle);
 		}
 	} else if ((style & SWT.CHECK) != 0) {
 		type = OS.NSSwitchButton;
@@ -229,9 +254,8 @@ void createHandle () {
 		type = OS.NSPushOnPushOffButton;
 		if ((style & SWT.FLAT) != 0) {
 			widget.setBezelStyle(OS.NSShadowlessSquareBezelStyle);
-//			if ((style & SWT.BORDER) == 0) widget.setShowsBorderOnlyWhileMouseInside(true);
 		} else {
-			widget.setBezelStyle(OS.NSRoundedBezelStyle);
+			widget.setBezelStyle((style & SWT.WRAP) != 0 ? OS.NSRegularSquareBezelStyle : OS.NSRoundedBezelStyle);
 		}
 	} else if ((style & SWT.ARROW) != 0) {
 		widget.setBezelStyle(OS.NSShadowlessSquareBezelStyle);
@@ -250,8 +274,13 @@ void createWidget() {
 	super.createWidget ();
 }
 
+Font defaultFont () {
+	return Font.cocoa_new (display, defaultNSFont ());
+}
+
 NSFont defaultNSFont() {
-	return display.buttonFont;
+	NSCell cell = ((NSControl)view).cell();
+	return NSFont.systemFontOfSize (NSFont.systemFontSizeForControlSize (cell.controlSize()));
 }
 
 void deregister () {
@@ -265,21 +294,20 @@ boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
 	return dragging;
 }
 
-boolean drawsBackground() {
-	return background != null || backgroundImage != null;
-}
-
 void drawImageWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ image, NSRect rect, int /*long*/ view) {
 	/*
 	* Feature in Cocoa.  Images touch the edge of rounded buttons
 	* when set to small size. The fix to subclass the button cell
     * and offset the image drawing.
 	*/
-	if (display.smallFonts && (style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & SWT.FLAT) == 0) {
-		rect.y += EXTRA_HEIGHT / 2;
-		rect.height += EXTRA_HEIGHT;
+	NSCell cell = ((NSControl)this.view).cell();
+	if (cell != null && cell.controlSize() == OS.NSRegularControlSize) {
+		if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & (SWT.FLAT | SWT.WRAP)) == 0) {
+			rect.y += EXTRA_HEIGHT / 2;
+			rect.height += EXTRA_HEIGHT;
+		}
 	}
-	callSuper (id, sel, image, rect, view);
+	super.drawImageWithFrameInView(id, sel, image, rect, view);
 }
 
 void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellRect, int /*long*/ viewid) {
@@ -321,6 +349,37 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cel
 
 }
 
+NSRect drawTitleWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ title, NSRect titleRect, int /*long*/ view) {
+	boolean wrap = (style & SWT.WRAP) != 0 && text.length() != 0;
+	if (wrap) {
+		NSSize wrapSize = new NSSize();
+		wrapSize.width = titleRect.width;
+		wrapSize.height = MAX_SIZE;
+		NSAttributedString attribStr = createString(text, null, foreground, style, true, true, true);
+		NSRect rect = attribStr.boundingRectWithSize(wrapSize, OS.NSStringDrawingUsesLineFragmentOrigin);
+		switch (style & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) {
+			case SWT.LEFT:
+				rect.x = titleRect.x;
+				break;
+			case SWT.CENTER:
+				rect.x = titleRect.x + (titleRect.width - rect.width) / 2f;
+				break;
+			case SWT.RIGHT:
+				rect.x = titleRect.x + titleRect.width - rect.width;
+				break;
+		}
+		rect.y = titleRect.y + (titleRect.height - rect.height) / 2;
+		attribStr.drawInRect(rect);
+		attribStr.release ();
+		return rect;
+	}
+	return super.drawTitleWithFrameInView(id, sel, title, titleRect, view);
+}
+
+boolean drawsBackground() {
+	return background != null || backgroundImage != null;
+}
+
 void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
 	if ((style & SWT.ARROW) != 0) {	
 		NSRect frame = view.frame();
@@ -622,6 +681,25 @@ void setBackgroundImage(NSImage image) {
 	}
 }
 
+void setBounds (int x, int y, int width, int height, boolean move, boolean resize) {
+	if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & (SWT.FLAT | SWT.WRAP)) == 0) {
+		int heightThreshold = REGULAR_BUTTON_HEIGHT;
+		
+		NSCell cell = ((NSControl)view).cell();
+		if (cell != null && cell.controlSize() == OS.NSSmallControlSize) {
+			heightThreshold = SMALL_BUTTON_HEIGHT;
+		}
+
+		NSButton button = (NSButton)view;
+		if (height > heightThreshold) {
+			button.setBezelStyle(OS.NSRegularSquareBezelStyle);
+		} else {
+			button.setBezelStyle(OS.NSRoundedBezelStyle);
+		}
+	}
+	super.setBounds(x, y, width, height, move, resize);
+}
+
 void setFont (NSFont font) {
 	if (text != null) {
 		((NSButton)view).setAttributedTitle(createString());
@@ -701,6 +779,21 @@ public void setImage (Image image) {
 	} else {
 		((NSButton)view).setAttributedTitle(createString());
 	}
+	
+	if (image != null) {
+		if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & (SWT.FLAT | SWT.WRAP)) == 0) {
+			NSCell cell = ((NSButton)view).cell();
+			NSSize size = cell.cellSize ();
+			int height = (int)Math.ceil(size.height);
+			if (height > SMALL_BUTTON_HEIGHT) {
+				cell.setControlSize(OS.NSRegularControlSize);
+			} else if (display.smallFonts){
+				cell.setControlSize(OS.NSSmallControlSize);
+			}
+			setFont(getFont());
+		}
+	}
+
 	updateAlignment ();
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java
old mode 100644
new mode 100755
index 3312be1..d0bdab7
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.swt.widgets;
 
 
 import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
 import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.internal.cocoa.*;
 
@@ -42,6 +43,16 @@ public class Canvas extends Composite {
 	IME ime;
 	NSOpenGLContext context;
 
+	static NSMutableArray supportedPboardTypes;
+	
+	static { 
+		// This array is leaked.
+		supportedPboardTypes = NSMutableArray.arrayWithCapacity(1);
+		supportedPboardTypes.retain();
+		supportedPboardTypes.addObject(OS.NSStringPboardType);
+		//supportedPboardTypes.addObject(OS.NSRTFPboardType);
+	};
+
 Canvas () {
 	/* Do nothing */
 }
@@ -255,6 +266,41 @@ NSRange markedRange (int /*long*/ id, int /*long*/ sel) {
 	return super.markedRange (id, sel);
 }
 
+boolean readSelectionFromPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ pasteboard) {
+    boolean result = false;
+    NSPasteboard pboard = new NSPasteboard(pasteboard);
+    NSArray availableTypes = pboard.types();
+    NSString type;
+    
+    for (int /*long*/ i = 0; i < supportedPboardTypes.count(); i++) {
+    	if (result) break;
+    	type = new NSString(supportedPboardTypes.objectAtIndex(i));
+        if (availableTypes.containsObject(type)) {
+            result = readSelectionFromPasteboard(pboard, type);
+        }
+    }
+    return result;
+}
+
+boolean readSelectionFromPasteboard(NSPasteboard pboard, NSString type) {
+    boolean result = false;
+    NSString newSelection = null;
+    if (type.isEqualToString(OS.NSStringPboardType)) {
+        NSString string = pboard.stringForType(OS.NSStringPboardType);
+        if (string != null && string.length() > 0) {
+        	newSelection = string;
+        }
+    }
+
+    if (newSelection != null) {
+    	Accessible acc = getAccessible();
+    	acc.internal_accessibilitySetValue_forAttribute(newSelection, OS.NSAccessibilitySelectedTextAttribute, ACC.CHILDID_SELF);
+    	result = true;
+    }
+
+    return result;
+}
+
 void releaseChildren (boolean destroy) {
 	if (caret != null) {
 		caret.release (false);
@@ -308,6 +354,7 @@ public void scroll (int destX, int destY, int x, int y, int width, int height, b
 	Rectangle clientRect = getClientArea ();
 	Rectangle sourceRect = new Rectangle (x, y, width, height);
 	if (sourceRect.intersects (clientRect)) {
+		getShell().setScrolling();
 		update (all);
 	}
 	Control control = findBackgroundControl ();
@@ -493,8 +540,72 @@ int /*long*/ validAttributesForMarkedText (int /*long*/ id, int /*long*/ sel) {
 	return super.validAttributesForMarkedText(id, sel);
 }
 
+int /*long*/ validRequestorForSendType(int /*long*/ id, int /*long*/ sel, int /*long*/ sendType, int /*long*/ returnType) {
+	if (id == view.id) {
+		Accessible acc = getAccessible();
+		if (acc != null) {
+			// This returns null if there are no additional overrides. Since this is only checked to see if there is
+			// a StyledText or other control that supports reading and writing of the selection there's no need to bother
+			// with checking the default values. They will be picked up in the default implementation.
+			NSArray attributes = acc.internal_accessibilityAttributeNames(ACC.CHILDID_SELF);
+			if (attributes != null) {
+				boolean canReturn = attributes.containsObject(OS.NSAccessibilitySelectedTextAttribute);
+				boolean canSend = acc.internal_accessibilityIsAttributeSettable(OS.NSAccessibilitySelectedTextAttribute, ACC.CHILDID_SELF);
+				boolean canHandlePBoardType = supportedPboardTypes.containsObject(new id(sendType)) && supportedPboardTypes.containsObject(new id(returnType)); 
+				if (canReturn && canSend && canHandlePBoardType) {
+					id selection = acc.internal_accessibilityAttributeValue(OS.NSAccessibilitySelectedTextAttribute, ACC.CHILDID_SELF);
+					if (selection != null) {
+						NSString selectionString = new NSString(selection);
+						if (selectionString.length() > 0) return view.id;
+					}
+				}
+			}
+		}
+	}
+	
+	return super.validRequestorForSendType(id, sel, sendType, returnType);
+}
+
 void updateOpenGLContext(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
 	if (context != null) ((NSOpenGLContext)context).update();
 }
 
+boolean writeSelectionToPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ pasteboardObj, int /*long*/ typesObj) {
+    boolean result = false;
+    NSPasteboard pboard = new NSPasteboard(pasteboardObj);
+    NSArray types = new NSArray(typesObj);
+    NSMutableArray typesToDeclare = NSMutableArray.arrayWithCapacity(2);
+    NSString type;
+    
+    for (int /*long*/ i = 0; i < supportedPboardTypes.count(); i++) {
+    	type = new NSString(supportedPboardTypes.objectAtIndex(i));
+        if (types.containsObject(type)) typesToDeclare.addObject(type);
+    }
+
+    if (typesToDeclare.count() > 0) {
+        pboard.declareTypes(typesToDeclare, view);
+        for (int /*long*/ i = 0; i < typesToDeclare.count(); i++) {
+        	type = new NSString(typesToDeclare.objectAtIndex(i));
+            if (writeSelectionToPasteboard(pboard, type)) result = true;
+        }
+    }
+
+    return result;
+}
+    
+boolean writeSelectionToPasteboard(NSPasteboard pboard, NSString type) {
+	boolean result = false;
+
+	if (type.isEqualToString(OS.NSStringPboardType)) {
+		Accessible acc = getAccessible();
+		id selection = acc.internal_accessibilityAttributeValue(OS.NSAccessibilitySelectedTextAttribute, ACC.CHILDID_SELF);
+		if (selection != null) {
+			NSString selectionString = new NSString(selection);
+			if (selectionString.length() > 0) result = pboard.setString(selectionString, OS.NSStringPboardType);
+		}
+	}
+
+	return result;
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java
old mode 100644
new mode 100755
index 410caaa..a42a739
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java	
@@ -26,8 +26,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java
old mode 100644
new mode 100755
index cb16511..908cc57
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
@@ -121,6 +120,9 @@ public RGB getRGB() {
  */
 public RGB open() {	
 	NSColorPanel panel = NSColorPanel.sharedColorPanel();
+	String className = "SWTColorDialogPanel";
+	Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
+	display.subclassPanel(panel, className);
 	if (rgb != null) {
 		NSColor color = NSColor.colorWithDeviceRed(rgb.red / 255f, rgb.green / 255f, rgb.blue / 255f, 1);
 		panel.setColor(color);
@@ -133,7 +135,6 @@ public RGB open() {
 	rgb = null;
 	selected = false;
 	panel.orderFront(null);
-	Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
 	display.setModalDialog(this);
 	NSApplication.sharedApplication().runModalForWindow(panel);
 	display.setModalDialog(null);
@@ -143,8 +144,8 @@ public RGB open() {
 	if (selected) {
 		NSColor color = panel.color();
 		if (color != null) {
-			color = color.colorUsingColorSpaceName(OS.NSCalibratedRGBColorSpace);
-			rgb = new RGB((int)(color.redComponent() * 255), (int)(color.greenComponent() * 255), (int)(color.blueComponent() * 255));
+			float /*double*/ [] handle = display.getNSColorRGB(color);
+			rgb = new RGB((int)(handle[0] * 255), (int)(handle[1] * 255), (int)(handle[2] * 255));
 		}
 	}
 	return rgb;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java
old mode 100644
new mode 100755
index 56f5842..67b8035
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1126,12 +1126,14 @@ public void remove (String string) {
  */
 public void removeAll () {
 	checkWidget ();
+	ignoreSelection = true;
 	if ((style & SWT.READ_ONLY) != 0) {
 		((NSPopUpButton)view).removeAllItems();
 	} else {
 		setText ("", true);
 		((NSComboBox)view).removeAllItems();
 	}
+	ignoreSelection = false;
 }
 
 /**
@@ -1350,6 +1352,7 @@ public void setItem (int index, String string) {
 	if (0 > index || index >= count) error (SWT.ERROR_INVALID_RANGE);
 	int selection = getSelectionIndex();
 	NSAttributedString str = createString(string);
+	ignoreSelection = true;
 	if ((style & SWT.READ_ONLY) != 0) {
 		NSMenuItem nsItem = ((NSPopUpButton)view).itemAtIndex(index);
 		nsItem.setAttributedTitle(str);
@@ -1366,6 +1369,7 @@ public void setItem (int index, String string) {
 		widget.removeItemAtIndex(index + 1);
 	}
 	if (selection != -1) select (selection);
+	ignoreSelection = false;
 }
 
 /**
@@ -1390,6 +1394,7 @@ public void setItems (String [] items) {
 	}
 	removeAll();
 	if (items.length == 0) return;
+	ignoreSelection = true;
 	for (int i= 0; i < items.length; i++) {
 		NSAttributedString str = createString(items[i]);
 		if ((style & SWT.READ_ONLY) != 0) {
@@ -1406,6 +1411,7 @@ public void setItems (String [] items) {
 			((NSComboBox)view).addItemWithObjectValue(str);
 		}
 	}
+	ignoreSelection = false;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java
old mode 100644
new mode 100755
index 3d19efb..6678d07
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -240,9 +240,9 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		}
 	} else {
 		size = minimumSize (wHint, hHint, changed);
+		if (size.x == 0) size.x = DEFAULT_WIDTH;
+		if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	}
-	if (size.x == 0) size.x = DEFAULT_WIDTH;
-	if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) size.x = wHint;
 	if (hHint != SWT.DEFAULT) size.y = hHint;
 	Rectangle trim = computeTrim (0, 0, size.x, size.y);
@@ -865,11 +865,12 @@ void markLayout (boolean changed, boolean all) {
 
 Point minimumSize (int wHint, int Hint, boolean changed) {
 	Control [] children = _getChildren ();
+	Rectangle clientArea = getClientArea();
 	int width = 0, height = 0;
 	for (int i=0; i<children.length; i++) {
 		Rectangle rect = children [i].getBounds ();
-		width = Math.max (width, rect.x + rect.width);
-		height = Math.max (height, rect.y + rect.height);
+		width = Math.max (width, rect.x - clientArea.x + rect.width);
+		height = Math.max (height, rect.y - clientArea.y + rect.height);
 	}
 	return new Point (width, height);
 }
@@ -940,45 +941,54 @@ void scrollWheel (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 			getShell().deferFlushing();
 			NSEvent nsEvent = new NSEvent(theEvent);
 			boolean handled = false;
-			float /*double*/ delta = nsEvent.deltaY();
-			if (delta != 0) {
-				boolean doit = true;
-				if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
-					doit = sendMouseEvent(nsEvent, SWT.MouseWheel, true);
-				}
-				ScrollBar bar = verticalBar;
-				if (doit && bar != null && bar.getEnabled ()) {
-					if (-1 < delta && delta < 0) delta = -1;
-					if (0 < delta && delta < 1) delta = 1;
-					int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * delta));
-					bar.setSelection (selection);
-					Event event = new Event ();
-					event.detail = delta > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;	
-					bar.sendSelectionEvent (SWT.Selection, event, true);
-					handled = true;
+			float /*double*/ deltaY = nsEvent.deltaY();
+			float /*double*/ deltaX = nsEvent.deltaX ();
+			if ((hooks(SWT.Gesture) || filters (SWT.Gesture))) {
+				if (deltaX != 0 || deltaY != 0) {
+					if (!gestureEvent(id, theEvent, SWT.GESTURE_PAN)) {
+						handled = true;						
+					}
 				}
-				if (!doit) handled = true;
 			}
-			delta = nsEvent.deltaX ();
-			if (delta != 0) {
-				boolean doit = true;
-				if (hooks (SWT.MouseHorizontalWheel) || filters (SWT.MouseHorizontalWheel)) {
-					doit = sendMouseEvent(nsEvent, SWT.MouseHorizontalWheel, true);
+			if (!handled) {
+				if (deltaY != 0) {
+					boolean doit = true;
+					if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
+						doit = sendMouseEvent(nsEvent, SWT.MouseWheel, true);
+					}
+					ScrollBar bar = verticalBar;
+					if (doit && bar != null && bar.getEnabled ()) {
+						if (-1 < deltaY && deltaY < 0) deltaY = -1;
+						if (0 < deltaY && deltaY < 1) deltaY = 1;
+						int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * deltaY));
+						bar.setSelection (selection);
+						Event event = new Event ();
+						event.detail = deltaY > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;	
+						bar.sendSelectionEvent (SWT.Selection, event, true);
+						handled = true;
+					}
+					if (!doit) handled = true;
 				}
-				ScrollBar bar = horizontalBar;
-				if (doit && bar != null && bar.getEnabled ()) {
-					if (-1 < delta && delta < 0) delta = -1;
-					if (0 < delta && delta < 1) delta = 1;
-					int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * delta));
-					bar.setSelection (selection);
-					Event event = new Event ();
-					event.detail = delta > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;	
-					bar.sendSelectionEvent (SWT.Selection, event, true);
-					handled = true;
+				if (deltaX != 0) {
+					boolean doit = true;
+					if (hooks (SWT.MouseHorizontalWheel) || filters (SWT.MouseHorizontalWheel)) {
+						doit = sendMouseEvent(nsEvent, SWT.MouseHorizontalWheel, true);
+					}
+					ScrollBar bar = horizontalBar;
+					if (doit && bar != null && bar.getEnabled ()) {
+						if (-1 < deltaX && deltaX < 0) deltaX = -1;
+						if (0 < deltaX && deltaX < 1) deltaX = 1;
+						int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * deltaX));
+						bar.setSelection (selection);
+						Event event = new Event ();
+						event.detail = deltaX > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;	
+						bar.sendSelectionEvent (SWT.Selection, event, true);
+						handled = true;
+					}
+					if (!doit) handled = true;
 				}
-				if (!doit) handled = true;
+				if (!handled) view.superview().scrollWheel(nsEvent);
 			}
-			if (!handled) view.superview().scrollWheel(nsEvent);
 			return;
 		}
 		callSuper(id, sel, theEvent);
@@ -1061,6 +1071,7 @@ public void setLayout (Layout layout) {
  * @since 3.1
  */
 public void setLayoutDeferred (boolean defer) {
+	checkWidget();
 	if (!defer) {
 		if (--layoutCount == 0) {
 			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
old mode 100644
new mode 100755
index 728c3ec..ca0e428
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,7 +68,8 @@ public abstract class Control extends Widget implements Drawable {
 	NSBezierPath regionPath;
 	int /*long*/ visibleRgn;
 	Accessible accessible;
-
+	boolean touchEnabled;
+	
 	final static int CLIPPING = 1 << 10;
 	final static int VISIBLE_REGION = 1 << 12;
 	
@@ -136,7 +137,7 @@ int /*long*/ accessibleHandle() {
 }
 
 int /*long*/ accessibilityActionDescription(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
-	if (handleIsAccessible(id) && accessible != null) {
+	if (id == accessibleHandle() && accessible != null) {
 		NSString actionName = new NSString(arg0);
 		id returnValue = accessible.internal_accessibilityActionDescription(actionName, ACC.CHILDID_SELF);
 		if (returnValue != null) return returnValue.id;
@@ -386,6 +387,41 @@ public void addFocusListener(FocusListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when gesture events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>GestureListener</code> interface.
+ * <p>
+ * NOTE: If <code>setTouchEnabled(true)</code> has previously been
+ * invoked on the receiver then <code>setTouchEnabled(false)</code>
+ * must be invoked on it to specify that gesture events should be
+ * sent instead of touch events.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #removeGestureListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Gesture, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when help events are generated for the control,
  * by sending it one of the messages defined in the
  * <code>HelpListener</code> interface.
@@ -629,6 +665,40 @@ void addTraits(NSMutableDictionary dict, Font font) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when touch events occur, by sending it
+ * one of the messages defined in the <code>TouchListener</code>
+ * interface.
+ * <p>
+ * NOTE: You must also call <code>setTouchEnabled(true)</code> to 
+ * specify that touch events should be sent, which will cause gesture
+ * events to not be sent.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #removeTouchListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addTouchListener (TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Touch,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when traversal events occur, by sending it
  * one of the messages defined in the <code>TraverseListener</code>
  * interface.
@@ -658,6 +728,16 @@ boolean becomeFirstResponder (int /*long*/ id, int /*long*/ sel) {
 	return super.becomeFirstResponder (id, sel);
 }
 
+void beginGestureWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!gestureEvent(id, event, SWT.GESTURE_BEGIN)) return;
+	super.beginGestureWithEvent(id, sel, event);
+}
+
+void endGestureWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!gestureEvent(id, event, SWT.GESTURE_END)) return;
+	super.endGestureWithEvent(id, sel, event);
+}
+
 void calculateVisibleRegion (NSView view, int /*long*/ visibleRgn, boolean clipChildren) {
 	int /*long*/ tempRgn = OS.NewRgn ();
 	if (!view.isHiddenOrHasHiddenAncestor() && isDrawing()) {
@@ -703,6 +783,19 @@ void calculateVisibleRegion (NSView view, int /*long*/ visibleRgn, boolean clipC
 	OS.DisposeRgn (tempRgn);
 }
 
+void cancelOperation(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	// Cmd-. and escape arrive here. Forward the current event as a key event.
+	if (hasKeyboardFocus(id)) {
+		NSEvent nsEvent = NSApplication.sharedApplication().currentEvent();
+		Shell s = this.getShell();
+		s.keyInputHappened = false;
+		boolean [] consume = new boolean [1];
+		if (translateTraversal (nsEvent.keyCode (), nsEvent, consume)) return;
+		if (isDisposed ()) return;
+		if (!sendKeyEvent (nsEvent, SWT.KeyDown)) return;
+	}
+}
+
 void checkBackground () {
 	Shell shell = getShell ();
 	if (this == shell) return;
@@ -866,7 +959,7 @@ NSAttributedString createString (String string, Font font, float /*double*/ [] f
 	NSMutableParagraphStyle paragraphStyle = (NSMutableParagraphStyle)new NSMutableParagraphStyle ().alloc ().init ();
 	paragraphStyle.setLineBreakMode (wrap ? OS.NSLineBreakByWordWrapping : OS.NSLineBreakByClipping);
 	if (alignment != 0) {
-		int align = SWT.LEFT;
+		int align = OS.NSLeftTextAlignment;
 		if ((alignment & SWT.CENTER) != 0) {
 			align = OS.NSCenterTextAlignment;
 		} else if ((alignment & SWT.RIGHT) != 0) {
@@ -1071,13 +1164,20 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 	 * To check for an actual drag we need to pull off mouse moved and mouse up events
 	 * to detect if the user dragged outside of a 10 x 10 box centered on the mouse down location.
 	 * We still want the view to see the events, so save them and re-post when done checking.
+	 * If no motion happens for .3 seconds, bail.
 	 */
 	NSEvent mouseUpEvent = null;
 	NSMutableArray dragEvents = NSMutableArray.arrayWithCapacity(10);
+	NSDate timeout = NSDate.dateWithTimeIntervalSinceNow(0.3);
 
 	while (eventType != OS.NSLeftMouseUp) {
 		NSEvent event = application.nextEventMatchingMask((OS.NSLeftMouseUpMask | OS.NSLeftMouseDraggedMask),
-				NSDate.distantFuture(), OS.NSEventTrackingRunLoopMode, true);
+				timeout, OS.NSEventTrackingRunLoopMode, true);
+		// No event means nextEventMatchingMask timed out.
+		if (event == null) {
+			dragging = true;
+			break;
+		}
 		eventType = event.type();
 		
 		if (eventType == OS.NSLeftMouseDragged) {
@@ -1114,6 +1214,10 @@ boolean drawGripper (int x, int y, int width, int height, boolean vertical) {
 	return false;
 }
 
+boolean drawsBackground() {
+    return true;
+}
+
 void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
 	if (id != paintView().id) return;
 	if (!hooks (SWT.Paint) && !filters (SWT.Paint)) return;
@@ -1154,10 +1258,6 @@ NSView eventView () {
 	return view;
 }
 
-boolean drawsBackground() {
-	return true;
-}
-
 void fillBackground (NSView view, NSGraphicsContext context, NSRect rect, int imgHeight) {
 	fillBackground(view, context, rect, imgHeight, null, 0, 0);
 }
@@ -1243,12 +1343,15 @@ void fixFocus (Control focusControl) {
 	}
 	shell.setSavedFocus (focusControl);
 	NSWindow window = view.window();
-	window.becomeKeyWindow();
+	if (!window.makeFirstResponder(null)) {
+	    // Force first responder to resign.
+	    window.endEditingFor(null);
+	}
 }
 
 void flagsChanged (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	if (hasKeyboardFocus(id)) {
-		if ((state & SAFARI_EVENTS_FIX) == 0) {
+		if ((state & WEBKIT_EVENTS_FIX) == 0) {
 			Shell s = this.getShell();
 			s.keyInputHappened = false;
 			int mask = 0;
@@ -1312,20 +1415,93 @@ public boolean forceFocus () {
 	if (!focusView.canBecomeKeyView()) return false;
 	boolean result = forceFocus(focusView);
 	if (isDisposed ()) return false;
+	shell.setSavedFocus (this);
+	/*
+	 * Feature in Cocoa. If the window is inactive when forceFocus is called bringToTop 
+	 * eventually calls makeKeyAndOrderFront. This activates the window immediately, but unlike other platforms, 
+	 * it also immediately fire notifications that the window was activated, as opposed to posting an event
+	 * to be handled on the next pass of readAndDispatch().
+	 * 
+	 * Shell#windowDidBecomeKey will call Decorations#restoreFocus, so the saved focus must be set
+	 * before the window is activated or the wrong control will get focus.
+	 */
 	shell.bringToTop (false);
 	if (isDisposed ()) return false;
-	shell.setSavedFocus (this);
 	return result;
 }
 
 boolean forceFocus (NSView focusView) {
-	return view.window ().makeFirstResponder (focusView);
+	NSWindow window = view.window ();
+	if(window == null) { return false; }
+	return window.makeFirstResponder (focusView);
+}
+
+boolean gestureEvent(int /*long*/ id, int /*long*/ eventPtr, int detail) {
+	if (!display.sendEvent) return true;
+	display.sendEvent = false;
+	// For cross-platform compatibility, touch events and gestures are mutually exclusive.
+	// Don't send a gesture if touch events are enabled for this control.
+	if (touchEnabled) return true;
+	if (!isEventView (id)) return true;
+	if (!hooks(SWT.Gesture) && !filters(SWT.Gesture)) return true;
+	NSEvent nsEvent = new NSEvent(eventPtr);
+	Event event = new Event();
+	NSPoint windowPoint;
+	NSView view = eventView ();
+	windowPoint = nsEvent.locationInWindow();
+	NSPoint point = view.convertPoint_fromView_(windowPoint, null);
+	if (!view.isFlipped ()) {
+		point.y = view.bounds().height - point.y;
+	}
+	event.x = (int) point.x;
+	event.y = (int) point.y;
+	setInputState (event, nsEvent, SWT.Gesture);
+	event.detail = detail;
+
+	if (detail == SWT.GESTURE_BEGIN) {
+		display.rotation = 0.0;
+		display.magnification = 1.0;
+		display.gestureActive = true;
+	} else if (detail == SWT.GESTURE_END) {
+		display.gestureActive = false;
+	}
+	
+	switch (detail) {	
+	case SWT.GESTURE_SWIPE:
+		event.xDirection = (int) -nsEvent.deltaX();
+		event.yDirection = (int) -nsEvent.deltaY();
+		break;
+	case SWT.GESTURE_ROTATE: {	
+		display.rotation += nsEvent.rotation();
+		event.rotation = display.rotation;
+		break;
+	}
+	case SWT.GESTURE_MAGNIFY:
+		display.magnification += nsEvent.magnification();
+		event.magnification = display.magnification;
+		break;
+	case SWT.GESTURE_PAN:
+		// Panning increment is expressed in terms of the direction of movement,
+		// not in terms of scrolling increment.
+		if (display.gestureActive) {
+			event.xDirection = (int) -nsEvent.deltaX();
+			event.yDirection = (int) -nsEvent.deltaY();
+			if (event.xDirection == 0 && event.yDirection == 0) return true;
+		}
+		break;
+	}
+
+	sendEvent (SWT.Gesture, event);
+	return event.doit;
 }
 
 /**
  * Returns the accessible object for the receiver.
+ * <p>
  * If this is the first time this object is requested,
- * then the object is created and returned.
+ * then the object is created and returned. The object
+ * returned by getAccessible() does not need to be disposed.
+ * </p>
  *
  * @return the accessible object
  *
@@ -1623,6 +1799,24 @@ public Monitor getMonitor () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Composite</code>
  * or null when the receiver is a shell that was created with null or
  * a display for a parent.
@@ -1750,6 +1944,31 @@ public String getToolTipText () {
 }
 
 /**
+ * Returns <code>true</code> if this control is set to send touch events, or
+ * <code>false</code> if it is set to send gesture events instead.  This method
+ * also returns <code>false</code> if a touch-based input device is not detected
+ * (this can be determined with <code>Display#getTouchEnabled()</code>).  Use
+ * {@link #setTouchEnabled(boolean)} to switch the events that a control sends
+ * between touch events and gesture events.
+ *
+ * @return <code>true</code> if the control is set to send touch events, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTouchEnabled
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkWidget();
+	return display.getTouchEnabled() && touchEnabled;
+}
+
+/**
  * Returns <code>true</code> if the receiver is visible, and
  * <code>false</code> otherwise.
  * <p>
@@ -1810,31 +2029,41 @@ boolean imeInComposition () {
 }
 
 boolean insertText (int /*long*/ id, int /*long*/ sel, int /*long*/ string) {
-	if (hasKeyboardFocus(id)) {
-		Shell s = this.getShell();
-		NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
-		if (nsEvent != null) {
-			int /*long*/ type = nsEvent.type ();
-			if (type == OS.NSKeyDown || type == OS.NSSystemDefined) {
-				NSString str = new NSString (string);
-				if (str.isKindOfClass (OS.class_NSAttributedString)) {
-					str = new NSAttributedString (string).string ();
-				}
-				int length = (int)/*64*/str.length ();
-				char[] buffer = new char [length];
-				str.getCharacters(buffer);
-				for (int i = 0; i < buffer.length; i++) {
-					s.keyInputHappened = true;
-					Event event = new Event ();
-					if (i == 0 && type == OS.NSKeyDown) setKeyState (event, SWT.KeyDown, nsEvent);
-					event.character = buffer [i];
-					if (!sendKeyEvent (SWT.KeyDown, event)) return false;
+	// sendKeyEvent may do something to run the event loop.  That would cause
+	// 'string' to be released before any superclass could use it, so save it
+	// until this method finishes.
+	NSObject saver = new NSObject(string);
+	saver.retain();
+	try {
+		if (hasKeyboardFocus(id)) {
+			Shell s = this.getShell();
+			NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
+			if (nsEvent != null) {
+				int /*long*/ type = nsEvent.type ();
+				if (type == OS.NSKeyDown || type == OS.NSSystemDefined) {
+					NSString str = new NSString (string);
+					if (str.isKindOfClass (OS.class_NSAttributedString)) {
+						str = new NSAttributedString (string).string ();
+					}
+					int length = (int)/*64*/str.length ();
+					char[] buffer = new char [length];
+					str.getCharacters(buffer);
+					for (int i = 0; i < buffer.length; i++) {
+						s.keyInputHappened = true;
+						Event event = new Event ();
+						if (i == 0 && type == OS.NSKeyDown) setKeyState (event, SWT.KeyDown, nsEvent);
+						event.character = buffer [i];
+						if (!sendKeyEvent (SWT.KeyDown, event)) return false;
+					}
 				}
 			}
+			if ((state & CANVAS) != 0) return true;
 		}
-		if ((state & CANVAS) != 0) return true;
+
+		return super.insertText (id, sel, string);
+	} finally {
+		saver.release();
 	}
-	return super.insertText (id, sel, string);
 }
 
 /**	 
@@ -1889,6 +2118,8 @@ public int /*long*/ internal_new_GC (GCData data) {
 		data.device = display;
 		data.thread = display.thread;
 		data.view = view;
+		data.view.retain();
+		data.view.window().retain();
 		data.foreground = getForegroundColor ().handle;
 		Control control = findBackgroundControl ();
 		if (control == null) control = this;
@@ -1921,6 +2152,11 @@ public void internal_dispose_GC (int /*long*/ context, GCData data) {
 		if (data.paintRect == null) graphicsContext.flushGraphics ();
 		if (data.visibleRgn != 0) OS.DisposeRgn(data.visibleRgn);
 		data.visibleRgn = 0;
+		if (data.view != null) {
+			data.view.window().release();
+			data.view.release();
+			data.view = null;
+		}
 	}
 }
 
@@ -2150,6 +2386,11 @@ void keyUp (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	super.keyUp (id, sel, theEvent);
 }
 
+void magnifyWithEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!gestureEvent(id, event, SWT.GESTURE_MAGNIFY)) return;
+	super.magnifyWithEvent(id, sel, event);
+}
+
 void markLayout (boolean changed, boolean all) {
 	/* Do nothing */
 }
@@ -2186,19 +2427,27 @@ Decorations menuShell () {
 void scrollWheel (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	boolean handled = false;
 	if (id == view.id) {
-		if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
-			NSEvent nsEvent = new NSEvent(theEvent);
-			if (nsEvent.deltaY() != 0) {
-				if (!sendMouseEvent(nsEvent, SWT.MouseWheel, true)) {
-					handled = true;
+		NSEvent nsEvent = new NSEvent(theEvent);
+		if ((hooks(SWT.Gesture) || filters(SWT.Gesture))) {
+			if (nsEvent.deltaY() != 0 || nsEvent.deltaX() != 0) {
+				if (!gestureEvent(id, theEvent, SWT.GESTURE_PAN)) {
+					handled = true;						
 				}
 			}
 		}
-		if (hooks (SWT.MouseHorizontalWheel) || filters (SWT.MouseHorizontalWheel)) {
-			NSEvent nsEvent = new NSEvent(theEvent);
-			if (nsEvent.deltaX() != 0) {
-				if (!sendMouseEvent(nsEvent, SWT.MouseHorizontalWheel, true)) {
-					handled = true;
+		if (!handled) {
+			if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
+				if (nsEvent.deltaY() != 0) {
+					if (!sendMouseEvent(nsEvent, SWT.MouseWheel, true)) {
+						handled = true;
+					}
+				}
+			}
+			if (hooks (SWT.MouseHorizontalWheel) || filters (SWT.MouseHorizontalWheel)) {
+				if (nsEvent.deltaX() != 0) {
+					if (!sendMouseEvent(nsEvent, SWT.MouseHorizontalWheel, true)) {
+						handled = true;
+					}
 				}
 			}
 		}
@@ -2224,6 +2473,10 @@ boolean mouseEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent, in
 			return true;
 		}
 	}
+
+	boolean runEnterExit = false;
+	Control runEnterExitControl = null;
+	
 	switch (nsType) {
 		case OS.NSLeftMouseDown:
 			if (nsEvent.clickCount() == 1 && (state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect)) {
@@ -2238,19 +2491,22 @@ boolean mouseEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent, in
 		case OS.NSLeftMouseDragged:
 		case OS.NSRightMouseDragged:
 		case OS.NSOtherMouseDragged:
-			display.checkEnterExit (this, nsEvent, false);
+			runEnterExit = true;
+			runEnterExitControl = this;
 			break;
 		case OS.NSLeftMouseUp:
 		case OS.NSRightMouseUp:
 		case OS.NSOtherMouseUp:
-			display.checkEnterExit (display.findControl(true), nsEvent, false);
+			if (display.clickCount == 2) {
+				sendMouseEvent (nsEvent, SWT.MouseDoubleClick, false);
+			}
+			runEnterExit = true;
+			runEnterExitControl = display.findControl(true);
 			break;
 	}
-	sendMouseEvent (nsEvent, type, false);	
-	if (type == SWT.MouseDown && nsEvent.clickCount() == 2) {
-		sendMouseEvent (nsEvent, SWT.MouseDoubleClick, false);
-	}
+	sendMouseEvent (nsEvent, type, false);
 	if (dragging) sendMouseEvent(nsEvent, SWT.DragDetect, false);
+	if (runEnterExit) display.checkEnterExit (runEnterExitControl, nsEvent, false);
 	if (consume != null && consume[0]) return false;
 	return true;
 }
@@ -2523,7 +2779,7 @@ int /*long*/ regionToRects(int /*long*/ message, int /*long*/ rgn, int /*long*/
 	NSPoint pt = new NSPoint();
 	short[] rect = new short[4];
 	if (message == OS.kQDRegionToRectsMsgParse) {
-		OS.memmove(rect, r, rect.length * 2);
+		C.memmove(rect, r, rect.length * 2);
 		pt.x = rect[1];
 		pt.y = rect[0];
 		OS.objc_msgSend(path, OS.sel_moveToPoint_, pt);
@@ -2678,6 +2934,32 @@ public void removeFocusListener(FocusListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when gesture events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #addGestureListener
+ * 
+ * @since 3.7
+ */
+public void removeGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Gesture, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when the help events are generated for the control.
  *
  * @param listener the listener which should no longer be notified
@@ -2896,6 +3178,32 @@ void removeRelation () {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when touch events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #addTouchListener
+ * 
+ * @since 3.7
+ */
+public void removeTouchListener(TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Touch, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when traversal events occur.
  *
  * @param listener the listener which should no longer be notified
@@ -2944,6 +3252,11 @@ void resized () {
 	sendEvent (SWT.Resize);
 }
 
+void rotateWithEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!gestureEvent(id, event, SWT.GESTURE_ROTATE)) return;
+	super.rotateWithEvent(id, sel, event);
+}
+
 boolean sendDragEvent (int button, int stateMask, int x, int y) {
 	Event event = new Event ();
 	event.button = button;
@@ -3016,7 +3329,7 @@ boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
 			break;
 		}
 	}
-	if (event.button != 0) event.count = (int)/*64*/nsEvent.clickCount();
+	if (event.button != 0) event.count = display.clickCount;
 	NSPoint windowPoint;
 	NSView view = eventView ();
 	if (nsEvent == null || nsEvent.type() == OS.NSMouseMoved) {
@@ -3042,6 +3355,49 @@ boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
 	return event.doit;
 }
 
+Touch touchStateFromNSTouch(NSTouch touch) {
+	TouchSource source = display.findTouchSource(touch);	
+	int /*long*/ osPhase = touch.phase();
+	long identity = OS.objc_msgSend(touch.id, OS.sel_identity);
+	int state = 0;
+	
+	switch ((int)osPhase) {
+	case OS.NSTouchPhaseBegan:
+		state = SWT.TOUCHSTATE_DOWN;
+		break;
+	case OS.NSTouchPhaseMoved:
+		state = SWT.TOUCHSTATE_MOVE;
+		break;
+	case OS.NSTouchPhaseEnded:
+	case OS.NSTouchPhaseCancelled:
+		state = SWT.TOUCHSTATE_UP;
+		break;
+	}
+
+	display.touchCounter++;	
+	boolean primary = false;
+	NSPoint normalizedPos = touch.normalizedPosition();
+    double normalizedX = normalizedPos.x;
+    double normalizedY = 1 - normalizedPos.y;
+    if (display.currentTouches().count() == 1) display.primaryIdentifier = identity;
+    if (display.primaryIdentifier == identity) primary = true;    
+	NSSize deviceSize = touch.deviceSize();
+	int deviceX = (int) (normalizedX * deviceSize.width);
+	int deviceY = (int) (normalizedY * deviceSize.height);
+	Touch newTS = new Touch(identity, source, state, primary, deviceX, deviceY);
+	return newTS;
+}
+
+NSTouch findTouchWithId(NSArray touches, NSObject identity) {
+	int /*long*/ count = touches.count();
+	for (int /*long*/ i = 0; i < count; i++) {
+		NSTouch aTouch = new NSTouch(touches.objectAtIndex(i).id);
+		NSObject currIdentity = new NSObject(OS.objc_msgSend(aTouch.id, OS.sel_identity));
+		if (currIdentity.isEqual(identity)) return aTouch;
+	}
+	return null;
+}
+
 void setBackground () {
 	if (!drawsBackground()) return;
 	Control control = findBackgroundControl ();
@@ -3524,6 +3880,24 @@ public void setMenu (Menu menu) {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+}
+
+/**
  * Changes the parent of the widget to be the one provided if
  * the underlying operating system supports this feature.
  * Returns <code>true</code> if the parent is successfully changed.
@@ -3731,6 +4105,28 @@ public void setToolTipText (String string) {
 }
 
 /**
+ * Sets whether this control should send touch events (by default controls do not).
+ * Setting this to <code>false</code> causes the receiver to send gesture events
+ * instead.  No exception is thrown if a touch-based input device is not
+ * detected (this can be determined with <code>Display#getTouchEnabled()</code>).
+ * 
+ * @param enabled the new touch-enabled state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public void setTouchEnabled(boolean enabled) {
+	checkWidget();
+	eventView().setAcceptsTouchEvents(enabled);
+	touchEnabled = enabled;
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
@@ -3894,6 +4290,11 @@ void sort (int [] items) {
 	}
 }
 
+void swipeWithEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!gestureEvent(id, event, SWT.GESTURE_SWIPE)) return;
+	super.swipeWithEvent(id, sel, event);
+}
+
 NSSize textExtent (String string) {
 	NSAttributedString attribStr = createString(string, null, null, 0, false, true, false);
 	NSSize size = attribStr.size();
@@ -3995,6 +4396,102 @@ NSView topView () {
 	return view;
 }
 
+boolean touchEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ eventPtr) {
+	if (!display.sendEvent) return true;
+	display.sendEvent = false;
+	if (!(hooks(SWT.Touch) || filters(SWT.Touch))) return true;
+	if (!isEventView (id)) return true;
+	if (!touchEnabled) return true;
+	NSEvent nsEvent = new NSEvent(eventPtr);
+	NSMutableArray currentTouches = display.currentTouches();
+	Event event = new Event ();
+	NSPoint location = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
+	if (!view.isFlipped ()) {
+		location.y = view.bounds().height - location.y;
+	}
+	event.x = (int) location.x;
+	event.y = (int) location.y;
+	setInputState (event, nsEvent, SWT.Touch);
+	NSSet allTouchesSet = nsEvent.touchesMatchingPhase(OS.NSTouchPhaseAny, null);
+	int /*long*/ touchCount = allTouchesSet.count();
+	Touch touches[] = new Touch[(int)/*64*/touchCount];
+	int currTouchIndex = 0;
+	
+	// Process removed/cancelled touches first.
+	NSArray endedTouches = nsEvent.touchesMatchingPhase(OS.NSTouchPhaseEnded | OS.NSTouchPhaseCancelled, null).allObjects();
+		
+	for (int i = 0; i < endedTouches.count(); i++) {
+		NSTouch touch = new NSTouch(endedTouches.objectAtIndex(i).id);
+		NSObject identity = new NSObject(OS.objc_msgSend(touch.id, OS.sel_identity));
+		NSTouch endedTouch = findTouchWithId(currentTouches, identity);
+		if (endedTouch != null) currentTouches.removeObject(endedTouch);
+		touches[currTouchIndex++] = touchStateFromNSTouch(touch);
+	}
+	
+	if (currentTouches.count() == 0) display.touchCounter = 0;
+
+	// Process touches in progress or starting. 
+	NSArray activeTouches = nsEvent.touchesMatchingPhase(OS.NSTouchPhaseBegan | OS.NSTouchPhaseMoved | OS.NSTouchPhaseStationary, null).allObjects();
+	
+	for (int i = 0; i < activeTouches.count(); i++) {
+		NSTouch touch = new NSTouch(activeTouches.objectAtIndex(i).id);
+		NSObject identity = new NSObject(OS.objc_msgSend(touch.id, OS.sel_identity));
+		NSTouch activeTouch = findTouchWithId(currentTouches, identity);
+		if (activeTouch == null) currentTouches.addObject(touch);
+		touches[currTouchIndex++] = touchStateFromNSTouch(touch);
+	}	
+
+	if (activeTouches.count() != currentTouches.count()) {
+		/**
+		 * Bug in Cocoa. Under some situations we don't get the NSTouchPhaseEnded/Cancelled notification. Most commonly this happens
+		 * if a 4-finger gesture occurs and the application switcher appears. Workaround is to generate a TOUCHSTATE_UP for the 
+		 * orphaned touch.
+		 */
+		for (int /*long*/ j = currentTouches.count() - 1; j >= 0 ; j--) {
+			NSTouch touch = new NSTouch(currentTouches.objectAtIndex(j).id);
+			NSObject identity = new NSObject(OS.objc_msgSend(touch.id, OS.sel_identity));
+			NSTouch activeTouch = findTouchWithId(activeTouches, identity);
+			if (activeTouch == null) {
+				Touch fakeTouchUp = touchStateFromNSTouch(touch);
+				fakeTouchUp.state = SWT.TOUCHSTATE_UP;
+
+				if (currTouchIndex == touches.length) {
+					Touch newTouchStates[] = new Touch[touches.length + 1];
+					System.arraycopy(touches, 0, newTouchStates, 0, touches.length);
+					touches = newTouchStates;
+				}
+
+				touches[currTouchIndex++] = fakeTouchUp;
+				currentTouches.removeObject(activeTouch);
+			}
+		}
+	}
+	
+	event.touches = touches;
+	postEvent (SWT.Touch, event);
+	return true;
+}
+
+void touchesBeganWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!touchEvent(id, sel, event)) return;
+	super.touchesBeganWithEvent(id, sel, event);
+}
+
+void touchesCancelledWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!touchEvent(id, sel, event)) return;
+	super.touchesCancelledWithEvent(id, sel, event);
+}
+
+void touchesEndedWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!touchEvent(id, sel, event)) return;
+	super.touchesEndedWithEvent(id, sel, event);
+}
+
+void touchesMovedWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	if (!touchEvent(id, sel, event)) return;
+	super.touchesMovedWithEvent(id, sel, event);
+}
+
 boolean translateTraversal (int key, NSEvent theEvent, boolean [] consume) {
 	int detail = SWT.TRAVERSE_NONE;
 	int code = traversalCode (key, theEvent);
@@ -4374,7 +4871,7 @@ void update (boolean all) {
 //	checkWidget();
 	if (display.isPainting.containsObject(view)) return;
 	Shell shell = getShell();
-	NSWindow window = shell.deferFlushing ? view.window() : null;
+	NSWindow window = shell.deferFlushing && shell.scrolling ? view.window() : null;
 	try {
 		if (window != null) {
 			window.retain();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java
old mode 100644
new mode 100755
index ed5269c..7f2801f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,6 +48,14 @@ public class DateTime extends Composite {
 	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
 	static final int MAX_YEAR = 9999;
 	
+	/* Emulated DROP_DOWN calendar fields for DATE */
+	NSButton buttonView;
+	Shell popupShell;
+	DateTime popupCalendar;
+	int savedYear, savedMonth, savedDay;
+
+	Listener clickListener;
+	
 /**
  * Constructs a new instance of this class given its parent
  * and a style value describing its behavior and appearance.
@@ -96,6 +104,7 @@ static int checkStyle (int style) {
 	*/
 	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
 	style = checkBits (style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+	if ((style & SWT.DATE) == 0) style &=~ SWT.DROP_DOWN;
 	return checkBits (style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
 }
 
@@ -142,6 +151,11 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 	NSSize size = widget.cell ().cellSize ();
 	width = (int)Math.ceil (size.width);
 	height = (int)Math.ceil (size.height);
+	if ((style & SWT.DROP_DOWN) != 0) {
+		size = buttonView.cell ().cellSize ();
+		width += (int)Math.ceil (size.width) - getBezelSize() * 2;
+		height = Math.max(height, (int)Math.ceil (size.height));
+	}
 	if (width == 0) width = DEFAULT_WIDTH;
 	if (height == 0) height = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) width = wHint;
@@ -154,7 +168,7 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 void createHandle () {
 	NSDatePicker widget = (NSDatePicker)new SWTDatePicker().alloc();
 	widget.init();
-	int pickerStyle = OS.NSTextFieldAndStepperDatePickerStyle;
+	int pickerStyle = (style & SWT.DROP_DOWN) != 0 ? OS.NSTextFieldDatePickerStyle : OS.NSTextFieldAndStepperDatePickerStyle;
 	int elementFlags = 0;
 	if ((style & SWT.CALENDAR) != 0) {
 		pickerStyle = OS.NSClockAndCalendarDatePickerStyle;
@@ -167,6 +181,10 @@ void createHandle () {
 			elementFlags = (style & SWT.SHORT) != 0 ? OS.NSYearMonthDatePickerElementFlag : OS.NSYearMonthDayDatePickerElementFlag;
 		}
 	}
+	widget.setBezeled((style & SWT.BORDER) != 0);
+	if ((style & SWT.BORDER) == 0) {
+		widget.setFocusRingType(OS.NSFocusRingTypeNone);
+	}
 	widget.setDrawsBackground(true);
 	widget.setDatePickerStyle(pickerStyle);
 	widget.setDatePickerElements(elementFlags);
@@ -175,22 +193,153 @@ void createHandle () {
 	widget.setTarget(widget);
 	widget.setAction(OS.sel_sendSelection);
 	view = widget;
+	
+	if ((this.style & SWT.DROP_DOWN) != 0) {
+		NSButton buttonWidget = (NSButton)new SWTButton().alloc();
+		buttonWidget.init();
+		buttonWidget.setButtonType(OS.NSMomentaryLightButton);
+		buttonWidget.setBezelStyle(OS.NSRoundedDisclosureBezelStyle);
+		buttonWidget.setFocusRingType(OS.NSFocusRingTypeNone);
+		buttonWidget.setTitle(NSString.stringWith(""));
+		buttonWidget.setImagePosition(OS.NSNoImage);
+		buttonWidget.setTarget(view);
+		buttonWidget.setAction(OS.sel_sendVerticalSelection);
+		view.addSubview(buttonWidget);
+		buttonView = buttonWidget;
+
+		createPopupShell(-1, -1, -1);
+	}
+}
+
+void createPopupShell(int year, int month, int day) {
+	popupShell = new Shell (getShell (), SWT.NO_TRIM | SWT.ON_TOP);
+	popupShell.isPopup = true;
+	popupShell.window.setHasShadow(true);
+	popupCalendar = new DateTime (popupShell, SWT.CALENDAR);
+	if (font != null) popupCalendar.setFont (font);
+
+	if (clickListener == null) {
+		clickListener = new Listener() {
+			public void handleEvent(Event event) {
+				if (event.widget instanceof Control && event.widget != DateTime.this) {
+					Control c = (Control)event.widget;
+					if (c.getShell() != popupShell) {
+						hideCalendar();
+					}
+				}
+			}
+		};
+	}
+
+	popupCalendar.addListener (SWT.Selection, new Listener() {
+		public void handleEvent(Event event) {
+			int year = popupCalendar.getYear ();
+			int month = popupCalendar.getMonth ();
+			int day = popupCalendar.getDay ();
+			setDate(year, month, day);
+			Event e = new Event ();
+			e.time = event.time;
+			notifyListeners (SWT.Selection, e);
+			hideCalendar();
+		}
+	});
+	
+	addListener (SWT.Dispose, new Listener() {
+		public void handleEvent(Event event) {
+			if (popupShell != null && !popupShell.isDisposed ()) {
+				disposePopupShell();
+			}
+		}
+	});
+	addListener(SWT.FocusOut, new Listener() {
+		public void handleEvent(Event event) {
+			hideCalendar();
+			display.removeFilter(SWT.MouseDown, clickListener); 
+		}
+	});
+	if (year != -1) popupCalendar.setDate(year, month, day);
 }
 
 NSFont defaultNSFont() {
 	return display.datePickerFont;
 }
 
+void deregister() {
+	super.deregister();
+	if (buttonView != null) {
+		display.removeWidget(buttonView);
+		display.removeWidget(buttonView.cell());
+	}
+
+}
+
+void disposePopupShell() {
+	popupShell.dispose ();
+	popupShell = null;  
+	popupCalendar = null;
+}
+
 void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
 	if (id != view.id) return;
 	fillBackground (view, context, rect, -1);
 }
 
+void showCalendar() {
+	if (isDropped ()) return;
+	savedYear = getYear ();
+	savedMonth = getMonth ();
+	savedDay = getDay ();
+	if (getShell() != popupShell.getParent ()) {
+		disposePopupShell();
+		createPopupShell (savedYear, savedMonth, savedDay);
+	}
+	Point dateBounds = getSize ();
+	Point calendarSize = popupCalendar.computeSize (SWT.DEFAULT, SWT.DEFAULT, false);
+	popupCalendar.setBounds (1, 1, Math.max (dateBounds.x - 2, calendarSize.x), calendarSize.y);
+	popupCalendar.setDate(savedYear, savedMonth, savedDay);
+	Rectangle parentRect = display.map (getParent (), null, getBounds ());
+	Rectangle displayRect = getMonitor ().getClientArea ();
+	int width = Math.max (dateBounds.x, calendarSize.x + 2);
+	int height = calendarSize.y + 2;
+	int x = parentRect.x;
+	int y = parentRect.y + dateBounds.y;
+	if (y + height > displayRect.y + displayRect.height) y = parentRect.y - height;
+	if (x + width > displayRect.x + displayRect.width) x = displayRect.x + displayRect.width - calendarSize.x;
+	popupShell.setBounds (x, y, width, height);
+	popupShell.setVisible (true);
+	if (isFocusControl()) popupCalendar.setFocus ();
+	display.addFilter(SWT.MouseDown, clickListener); 
+}
+
+void hideCalendar() {
+	if (!isDropped ()) return;
+	popupShell.setVisible (false);
+	if (!isDisposed () && isFocusControl()) {
+		setFocus();
+	}
+	display.removeFilter(SWT.MouseDown, clickListener); 
+}
+
+int getBezelInset() {
+	//TODO: Determine this value from the system instead of using constants
+	return (buttonView.cell ().controlSize () == OS.NSMiniControlSize) ? 3 : 1;
+}
+
+int getBezelSize() {
+	//TODO: Determine this value from the system instead of using constants
+	return (buttonView.cell ().controlSize () == OS.NSMiniControlSize) ? 6 : 4;
+}
+
 NSCalendarDate getCalendarDate () {
 	NSDate date = ((NSDatePicker)view).dateValue();
 	return date.dateWithCalendarFormat(null, null);
 }
 
+public Control [] getChildren () {
+	checkWidget();
+	return new Control [0];
+}
+
 /**
  * Returns the receiver's date, or day of the month.
  * <p>
@@ -304,6 +453,10 @@ public int getYear () {
 	return (int)/*64*/getCalendarDate().yearOfCommonEra();
 }
 
+boolean isDropped () {
+	return popupShell.getVisible ();
+}
+
 boolean isEventView (int /*long*/ id) {
 	return true;
 }
@@ -313,6 +466,52 @@ boolean isFlipped (int /*long*/ id, int /*long*/ sel) {
 	return true;
 }
 
+void keyDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if ((style & SWT.DROP_DOWN) != 0) {
+		NSEvent nsEvent = new NSEvent (theEvent);
+		int keyCode = Display.translateKey (nsEvent.keyCode ());
+		boolean alt = (nsEvent.modifierFlags() & OS.NSAlternateKeyMask) != 0;
+		if (alt && (keyCode == SWT.ARROW_UP || keyCode == SWT.ARROW_DOWN)) {
+			if (isDropped ()) {
+				hideCalendar();
+			} else {
+				showCalendar();
+			}
+			return;
+		}
+		if (keyCode == SWT.ESC) {
+			/* Escape key cancels popupCalendar and reverts date */
+			popupCalendar.setDate (savedYear, savedMonth, savedDay);
+			setDate(savedYear, savedMonth, savedDay);
+			hideCalendar();
+			return;
+		}
+	}
+	super.keyDown(id, sel, theEvent);
+
+	if ((style & SWT.DROP_DOWN) != 0 && popupCalendar != null) {
+		// Re-sync the calendar to the current date in the field.
+		int month = getMonth();
+		int day = getDay();
+		int year = getYear();
+		popupCalendar.setDate(year, month, day);
+	}
+}
+
+void register () {
+	super.register ();
+	if (buttonView != null) {
+		display.addWidget (buttonView, this);
+		display.addWidget (buttonView.cell(), this);
+	}
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (buttonView != null) buttonView.release();
+	buttonView = null;
+}
+
 /**
  * Removes the listener from the collection of listeners who will
  * be notified when the control is selected by the user.
@@ -338,6 +537,18 @@ public void removeSelectionListener (SelectionListener listener) {
 	eventTable.unhook (SWT.DefaultSelection, listener);	
 }
 
+void resized () {
+	super.resized ();
+	if (buttonView == null) return;
+	NSSize buttonSize = buttonView.cell ().cellSize ();
+	NSRect rect = view.bounds();
+	rect.x = rect.width - buttonSize.width + getBezelSize();
+	rect.y = - getBezelInset();
+	rect.width = buttonSize.width;
+	rect.height = buttonSize.height;
+	buttonView.setFrame(rect);
+}
+
 boolean sendKeyEvent (NSEvent nsEvent, int type) {
 	boolean result = super.sendKeyEvent (nsEvent, type);
 	if (!result) return result;
@@ -347,6 +558,7 @@ boolean sendKeyEvent (NSEvent nsEvent, int type) {
 		switch (keyCode) {
 			case 76: /* KP Enter */
 			case 36: /* Return */
+				hideCalendar();
 				sendSelectionEvent (SWT.DefaultSelection);
 		}
 	}
@@ -366,6 +578,16 @@ void sendSelection () {
 	}
 }
 
+/* Drop-down arrow button has been pressed. */
+void sendVerticalSelection () {
+	setFocus();
+	if (isDropped ()) {
+		hideCalendar();
+	} else {
+		showCalendar();
+	}
+}
+
 void setBackgroundColor(NSColor nsColor) {
 	((NSDatePicker)view).setBackgroundColor(nsColor);
 }
@@ -535,6 +757,10 @@ public void setSeconds (int seconds) {
 	((NSDatePicker)view).setDateValue(newDate);
 }
 
+void setSmallSize () {
+	if (buttonView != null) buttonView.cell ().setControlSize (OS.NSMiniControlSize);
+}
+
 /**
  * Sets the receiver's hours, minutes, and seconds in a single operation.
  *
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java
old mode 100644
new mode 100755
index a8ad95f..7839aa3
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java	
@@ -427,11 +427,10 @@ boolean restoreFocus () {
 }
 
 void saveFocus () {
-//	int window = OS.GetControlOwner (handle);
-//	Control control = display.getFocusControl (window, false);
-//	if (control != null && control != this && this == control.menuShell ()) {
-//		setSavedFocus (control);
-//	}
+	Control control = display._getFocusControl(view.window());
+	if (control != null && control != this && this == control.menuShell ()) {
+		setSavedFocus (control);
+	}
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java
old mode 100644
new mode 100755
index fc41c1a..5f33471
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -11,8 +11,8 @@
 package org.eclipse.swt.widgets;
 
 
-import org.eclipse.swt.internal.cocoa.*;
 import org.eclipse.swt.*;
+import org.eclipse.swt.internal.cocoa.*;
 
 
 /**
@@ -25,8 +25,7 @@ import org.eclipse.swt.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
@@ -124,7 +123,13 @@ public String getMessage () {
 public String open () {
 	String directoryPath = null;
 	NSOpenPanel panel = NSOpenPanel.openPanel();
-    OS.objc_msgSend(panel.id, OS.sel_setShowsHiddenFiles_, true);
+
+	// Install a callback so editing keys work.
+	String className = "SWTFileOpenPanel";
+	Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
+	display.subclassPanel(panel, className);
+	
+	OS.objc_msgSend(panel.id, OS.sel_setShowsHiddenFiles_, true);
 	panel.setCanCreateDirectories(true);
 	panel.setAllowsMultipleSelection((style & SWT.MULTI) != 0);
 	panel.setTitle(NSString.stringWith(title != null ? title : ""));
@@ -135,7 +140,6 @@ public String open () {
 	if (parent != null && (style & SWT.SHEET) != 0) {
 		application.beginSheet(panel, parent.view.window (), null, 0, 0);
 	}
-	Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
 	display.setModalDialog(this);
 	NSString dir = (filterPath != null && filterPath.length() > 0) ? NSString.stringWith(filterPath) : null;
 	int /*long*/ response = panel.runModalForDirectory(dir, null);
@@ -151,6 +155,7 @@ public String open () {
 	return directoryPath;
 }
 
+
 /**
  * Sets the dialog's message, which is a description of
  * the purpose for which it was opened. This message will be
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
old mode 100644
new mode 100755
index eae5cba..a374930
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.swt.widgets;
 
+import java.util.*;
+
 import org.eclipse.swt.*;
 import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.internal.*;
@@ -95,17 +97,26 @@ import org.eclipse.swt.internal.cocoa.*;
  */
 public class Display extends Device {
 	
+	static byte[] types = {'*','\0'};
+	static int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+
 	/* Windows and Events */
 	Event [] eventQueue;
 	EventTable eventTable, filterTable;
 	boolean disposing;
 	int sendEventCount;
 
-	/* Key event management */
-	int [] deadKeyState = new int[1];
-	int currentKeyboardUCHRdata;
-	boolean eventSourceDelaySet;
-	
+	/* gesture event state */
+	double rotation;
+	double magnification;
+	boolean gestureActive;
+
+	/* touch event state */
+	int touchCounter;
+	long primaryIdentifier;
+	NSMutableArray currentTouches;
+	TouchSource[] touchSources;
+
 	/* Sync/Async Widget Communication */
 	Synchronizer synchronizer;
 	Thread thread;
@@ -116,6 +127,8 @@ public class Display extends Device {
 	Caret currentCaret;
 	
 	boolean sendEvent;
+	int clickCountButton, clickCount;
+
 	Control currentControl, trackingControl, tooltipControl;
 	Widget tooltipTarget;
 	
@@ -147,9 +160,6 @@ public class Display extends Device {
 	Control focusControl, currentFocusControl;
 	int focusEvent;
 	
-	/* Table/Tree click tracking */
-	int /*long*/ trackedButtonRow = -1;
-
 	NSWindow screenWindow, keyWindow;
 
 	NSAutoreleasePool[] pools;
@@ -169,7 +179,8 @@ public class Display extends Device {
 	static Callback windowCallback2, windowCallback3, windowCallback4, windowCallback5, windowCallback6;
 	static Callback dialogCallback3, dialogCallback4, dialogCallback5;
 	static Callback applicationCallback2, applicationCallback3, applicationCallback4, applicationCallback6;
-	
+	static Callback performKeyEquivalentCallback;
+
 	/* Display Shutdown */
 	Runnable [] disposeList;
 	
@@ -182,6 +193,9 @@ public class Display extends Device {
 	TrayItem currentTrayItem;
 	Menu trayItemMenu;
 	
+	/* Main menu bar and application menu */
+	Menu appMenuBar, appMenu;
+
 	/* TaskBar */
 	TaskBar taskBar;
 	
@@ -282,6 +296,7 @@ public class Display extends Device {
 	static String APP_VERSION = ""; //$NON-NLS-1$
 	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
 	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+	static final byte[] SWT_EMBED_FRAMES = {'S', 'W', 'T', '_', 'E', 'M', 'B', 'E', 'D', '_', 'F', 'R', 'A', 'M', 'E', 'S', '\0'};
 	static final byte[] SWT_IMAGE = {'S', 'W', 'T', '_', 'I', 'M', 'A', 'G', 'E', '\0'};
 	static final byte[] SWT_ROW = {'S', 'W', 'T', '_', 'R', 'O', 'W', '\0'};
 	static final byte[] SWT_COLUMN = {'S', 'W', 'T', '_', 'C', 'O', 'L', 'U', 'M', 'N', '\0'};
@@ -305,7 +320,8 @@ public class Display extends Device {
 	NSTimer nsTimers [];
 	SWTWindowDelegate timerDelegate;
 	static SWTApplicationDelegate applicationDelegate;
-
+	static NSObject currAppDelegate;
+	
 	/* Settings */
 	boolean runSettings;
 	SWTWindowDelegate settingsDelegate;
@@ -316,6 +332,7 @@ public class Display extends Device {
 	Object data;
 	String [] keys;
 	Object [] values;
+	static Map/*<NSObject, LONG>*/ dynamicObjectMap;
 	
 	/*
 	* TEMPORARY CODE.  Install the runnable that
@@ -526,7 +543,15 @@ void addSkinnableWidget (Widget widget) {
 
 void addWidget (NSObject view, Widget widget) {
 	if (view == null) return;
-	OS.object_setInstanceVariable (view.id, SWT_OBJECT, widget.jniRef);
+	int /*long*/ ivar = OS.object_setInstanceVariable (view.id, SWT_OBJECT, widget.jniRef);
+	
+	if (ivar == 0) {
+		if (dynamicObjectMap == null) {
+			dynamicObjectMap = new HashMap();
+		}
+		LONG JNIRef = new LONG(widget.jniRef);
+		dynamicObjectMap.put(view, JNIRef);
+	}
 }
 
 /**
@@ -882,16 +907,10 @@ void createDisplay (DeviceData data) {
 		OS.class_addMethod(cls, OS.sel_application_openFile_, appProc4, "@:@@");
 		OS.class_addMethod(cls, OS.sel_application_openFiles_, appProc4, "@:@@");
 		OS.class_addMethod(cls, OS.sel_applicationShouldHandleReopen_hasVisibleWindows_, appProc4, "@:@B");
-		OS.class_addMethod(cls, OS.sel_applicationShouldTerminate_, appProc4, "@:@B");
+		OS.class_addMethod(cls, OS.sel_applicationShouldTerminate_, appProc3, "@:@");
 		OS.objc_registerClassPair(cls);
 	}
-	if (!isEmbedded) {
-		if (applicationDelegate == null) {
-			applicationDelegate = (SWTApplicationDelegate)new SWTApplicationDelegate().alloc().init();
-			application.setDelegate(applicationDelegate);
-		}
-	}
-	
+
 	int[] bufferMode = new int[1], bufferOptions = new int[1];
 	OS.GetSystemUIMode(bufferMode, bufferOptions);
 	systemUIMode = bufferMode[0];
@@ -921,7 +940,13 @@ void createMainMenu () {
 	
 	title = NSString.stringWith(SWT.getMessage("Preferences..."));
 	menuItem = appleMenu.addItemWithTitle(title, 0, NSString.stringWith(","));
-	
+
+	/* 
+	 * Through the magic of nib decompilation, the prefs item must have a tag of 42
+	 * or else the AWT won't be able to find it.
+	 */
+	menuItem.setTag(42);
+
 	appleMenu.addItem(NSMenuItem.separatorItem());
 	
 	title = NSString.stringWith(SWT.getMessage("Services"));
@@ -959,6 +984,16 @@ void createMainMenu () {
 	mainMenu.release();
 }
 
+NSMutableArray currentTouches() {
+	synchronized (Device.class) {
+		if (currentTouches == null) {
+			currentTouches = (NSMutableArray) new NSMutableArray().alloc();
+			currentTouches = currentTouches.initWithCapacity(5);
+		}
+	}
+	return currentTouches;
+}
+
 int /*long*/ cursorSetProc (int /*long*/ id, int /*long*/ sel) {
 	if (lockCursor) {
 		if (currentControl != null) {
@@ -1138,6 +1173,35 @@ public static Display findDisplay (Thread thread) {
 	}
 }
 
+TouchSource findTouchSource(NSTouch touch) {
+	if (touchSources == null) touchSources = new TouchSource [4];
+	int index = 0;
+	int length = touchSources.length;
+	id touchDevice = touch.device();
+	TouchSource source = null;
+
+	while (index < length && touchSources[index] != null) {
+		if (touchSources[index].handle == touchDevice.id) {
+			source = touchSources[index];
+			break;
+		}
+		index++;
+	}
+	
+	if (source != null) return source;
+	
+	if (index == length) {
+		TouchSource [] newList = new TouchSource [length + 4];
+		System.arraycopy(touchSources, 0, newList, 0, length);
+		touchSources = newList;
+	}
+
+	Rectangle bounds = new Rectangle(0, 0, (int)Math.ceil(touch.deviceSize().width), (int)Math.ceil(touch.deviceSize().height));
+	source = new TouchSource(touchDevice.id, false, bounds);
+	touchSources [index] = source;
+	return source;
+}
+
 /**
  * Returns the currently active <code>Shell</code>, or null
  * if no shell belonging to the currently running application
@@ -1158,6 +1222,19 @@ public Shell getActiveShell () {
 		if (widget instanceof Shell) {
 			return (Shell)widget;
 		}
+		
+		// Embedded shell test: If the NSWindow isn't an SWTWindow walk up the
+		// hierarchy from the hit view to see if some view maps to a Shell.
+		NSPoint windowLocation = window.mouseLocationOutsideOfEventStream();
+		NSView hitView = window.contentView().hitTest(windowLocation);
+		while (hitView != null) {
+			widget = getWidget(hitView.id);
+			if (widget instanceof Shell) {
+				break;
+			}
+			hitView = hitView.superview();
+		}
+		return (Shell)widget;
 	}
 	return null;
 }
@@ -1247,7 +1324,7 @@ public Rectangle getClientArea () {
  * over top of, or null if it is not currently over one of the
  * controls built by the currently running application.
  *
- * @return the control under the cursor
+ * @return the control under the cursor or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1416,7 +1493,7 @@ public int getDoubleClickTime () {
  * any of the controls built by the currently running
  * application.
  *
- * @return the control under the cursor
+ * @return the focus control or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1721,7 +1798,7 @@ float /*double*/ [] getWidgetColorRGB (int id) {
 	NSColor color = null;
 	switch (id) {
 		case SWT.COLOR_INFO_FOREGROUND: color = NSColor.blackColor (); break;
-		case SWT.COLOR_INFO_BACKGROUND: return new float /*double*/ [] {0xFF / 255f, 0xFF / 255f, 0xE1 / 255f, 1};
+		case SWT.COLOR_INFO_BACKGROUND: return new float /*double*/ [] {.984f, .988f, 0.773f, 1};
 		case SWT.COLOR_TITLE_FOREGROUND: color = NSColor.windowFrameTextColor(); break;
 		case SWT.COLOR_TITLE_BACKGROUND: color = NSColor.alternateSelectedControlColor(); break;
 		case SWT.COLOR_TITLE_BACKGROUND_GRADIENT: color = NSColor.selectedControlColor(); break;
@@ -1740,12 +1817,15 @@ float /*double*/ [] getWidgetColorRGB (int id) {
 		case SWT.COLOR_LIST_SELECTION_TEXT: color = NSColor.selectedTextColor(); break;
 		case SWT.COLOR_LIST_SELECTION: color = NSColor.selectedTextBackgroundColor(); break;
 	}
-	return getWidgetColorRGB (color);
+	return getNSColorRGB (color);
 }
 
-float /*double*/ [] getWidgetColorRGB (NSColor color) {
+float /*double*/ [] getNSColorRGB (NSColor color) {
 	if (color == null) return null;
-	color = color.colorUsingColorSpace(NSColorSpace.deviceRGBColorSpace());
+	NSColorSpace colorSpace = color.colorSpace();
+	if (colorSpace == null || colorSpace.colorSpaceModel() != OS.NSRGBColorSpaceModel) {
+		color = color.colorUsingColorSpaceName(OS.NSDeviceRGBColorSpace);
+	}
 	if (color == null) return null;
 	float /*double*/[] components = new float /*double*/[(int)/*64*/color.numberOfComponents()];
 	color.getComponents(components);	
@@ -1803,6 +1883,22 @@ public Cursor getSystemCursor (int id) {
 	return cursors [id];
 }
 
+NSImage getSystemImageForID(int osType) {
+	int /*long*/ iconRef[] = new int /*long*/ [1];
+	OS.GetIconRefFromTypeInfo(OS.kSystemIconsCreator, osType, 0, 0, 0, iconRef);
+	NSImage nsImage = (NSImage)new NSImage().alloc();
+	nsImage = nsImage.initWithIconRef(iconRef[0]);
+	/*
+	 * Feature in Cocoa. GetIconRefFromTypeInfo returns a huge icon that scales well.  Resize
+	 * it to 32x32, which is what NSWorkspace does.
+	 */
+	NSSize size = new NSSize();
+	size.width = size.height = 32.0f;
+	nsImage.setSize(size);
+	nsImage.setScalesWhenResized(true);
+	return nsImage;
+}
+
 /**
  * Returns the matching standard platform image for the given
  * constant, which should be one of the icon constants
@@ -1834,32 +1930,80 @@ public Image getSystemImage (int id) {
 	switch(id) {
 		case SWT.ICON_ERROR: {	
 			if (errorImage != null) return errorImage;
-			NSImage nsImage = NSWorkspace.sharedWorkspace ().iconForFileType (new NSString (OS.NSFileTypeForHFSTypeCode (OS.kAlertStopIcon)));
-			if (nsImage == null) return null;
-			nsImage.retain ();
-			return errorImage = Image.cocoa_new (this, SWT.ICON, nsImage);
+			NSImage img = getSystemImageForID(OS.kAlertStopIcon);
+			return errorImage = Image.cocoa_new (this, SWT.ICON, img);
 		}
 		case SWT.ICON_INFORMATION:
 		case SWT.ICON_QUESTION:
 		case SWT.ICON_WORKING: {
 			if (infoImage != null) return infoImage;
-			NSImage nsImage = NSWorkspace.sharedWorkspace ().iconForFileType (new NSString (OS.NSFileTypeForHFSTypeCode (OS.kAlertNoteIcon)));
-			if (nsImage == null) return null;
-			nsImage.retain ();
-			return infoImage = Image.cocoa_new (this, SWT.ICON, nsImage);
+			NSImage img = getSystemImageForID(OS.kAlertNoteIcon);
+			return infoImage = Image.cocoa_new (this, SWT.ICON, img);
 		}
 		case SWT.ICON_WARNING: {
 			if (warningImage != null) return warningImage;
-			NSImage nsImage = NSWorkspace.sharedWorkspace ().iconForFileType (new NSString (OS.NSFileTypeForHFSTypeCode (OS.kAlertCautionIcon)));
-			if (nsImage == null) return null;
-			nsImage.retain ();
-			return warningImage = Image.cocoa_new (this, SWT.ICON, nsImage);
+			NSImage img = getSystemImageForID(OS.kAlertCautionIcon);
+			return warningImage = Image.cocoa_new (this, SWT.ICON, img);
 		}
 	}
 	return null;
 }
 
 /**
+ * Returns the single instance of the application menu bar, or
+ * <code>null</code> if there is no application menu bar for the platform.
+ *
+ * @return the application menu bar, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getMenuBar () {
+	checkDevice ();
+	if (appMenuBar != null) return appMenuBar;
+	appMenuBar = new Menu (this);
+	
+	// If there is an active menu bar don't replace it.
+	// It will be updated when the next Shell without a menu bar activates.
+	if (menuBar == null) setMenuBar(appMenuBar);
+	
+	return appMenuBar;
+}
+
+/**
+ * Returns the single instance of the system-provided menu for the application, or
+ * <code>null</code> on platforms where no menu is provided for the application.
+ *
+ * @return the system menu, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getSystemMenu () {
+	checkDevice();
+	if (appMenu == null) {
+		NSMenu mainMenu = NSApplication.sharedApplication().mainMenu();
+		NSMenu nsAppMenu = mainMenu.itemAtIndex(0).submenu();
+		appMenu = new Menu(this, nsAppMenu);
+
+		// Create menu items that correspond to the NSMenuItems.
+		int /*long*/ nsCount = nsAppMenu.numberOfItems();
+		for (int j = 0; j < nsCount; j++) {
+			NSMenuItem currMenuItem = nsAppMenu.itemAtIndex(j);
+			new MenuItem(appMenu, currMenuItem);
+		}
+	}
+	return appMenu;
+}
+
+/**
  * Returns the single instance of the system tray or null
  * when there is no system tray available for the platform.
  *
@@ -1912,6 +2056,25 @@ public Thread getThread () {
 	}
 }
 
+/**	 
+ * Returns a boolean indicating whether a touch-aware input device is
+ * attached to the system and is ready for use.
+ *
+ * @return <code>true</code> if a touch-aware input device is detected, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkDevice();
+	// Gestures are available on OS X 10.5.3 and later. Touch events are only available on 10.6 and later.
+	return (OS.VERSION > 0x1053);
+}
+
 int getToolTipTime () {
 	checkDevice ();
 	//TODO get OS value (NSTooltipManager?)
@@ -1925,7 +2088,15 @@ Widget getWidget (int /*long*/ id) {
 static Widget GetWidget (int /*long*/ id) {
 	if (id == 0) return null;
 	int /*long*/ [] jniRef = new int /*long*/ [1];
-	OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+	int /*long*/ iVar = OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+	if (iVar == 0) {
+		if (dynamicObjectMap != null) {
+			NSObject key = new NSObject(id);
+			LONG dynJNIRef = (LONG) dynamicObjectMap.get(key);
+			if (dynJNIRef != null) jniRef[0] = dynJNIRef.value;
+		}
+	}
+
 	if (jniRef[0] == 0) return null;
 	return (Widget)OS.JNIGetObject(jniRef[0]);
 }
@@ -1962,26 +2133,58 @@ protected void init () {
 	initColors ();
 	initFonts ();
 	
-	if (!isEmbedded) {
-		/*
-		 * Feature in Cocoa:  NSApplication.finishLaunching() adds an apple menu to the menu bar that isn't accessible via NSMenu.
-		 * If Display objects are created and disposed of multiple times in a single process, another apple menu is added to the menu bar.
-		 * It must be called or the dock icon will continue to bounce. So, it should only be called once per process, not just once per
-		 * creation of a Display.  Use a static so creation of additional Display objects won't affect the menu bar. 
-		 */
-		if (!Display.launched) {
-			application.finishLaunching();
-			Display.launched = true;
-			
-			/* only add the shutdown hook once */
-			Runtime.getRuntime().addShutdownHook(new Thread() {
-				public void run() {
-					NSApplication.sharedApplication().terminate(null);
+	/*
+	 * Create an application delegate for app-level notifications.  The AWT may have already set a delegate;
+	 * if so, hold on to it so messages can be forwarded to it.
+	 */
+	if (applicationDelegate == null) {
+		applicationDelegate = (SWTApplicationDelegate)new SWTApplicationDelegate().alloc().init();
+		
+		if (currAppDelegate == null) {
+			if (OS.class_JRSAppKitAWT != 0) {
+				int /*long*/ currDelegatePtr = OS.objc_msgSend(OS.class_JRSAppKitAWT, OS.sel_awtAppDelegate);
+				if (currDelegatePtr != 0) {
+					currAppDelegate = new NSObject(currDelegatePtr);
+					currAppDelegate.retain();
 				}
-			});
+			}
+			application.setDelegate(applicationDelegate);
+		} else {
+			// TODO: register for notification to find out when AWT finishes loading.  Waiting on new value from Apple.
 		}
 	}
 	
+	/*
+	 * Feature in Cocoa:  NSApplication.finishLaunching() adds an apple menu to the menu bar that isn't accessible via NSMenu.
+	 * If Display objects are created and disposed of multiple times in a single process, another apple menu is added to the menu bar.
+	 * It must be called or the dock icon will continue to bounce. So, it should only be called once per process, not just once per
+	 * creation of a Display.  Use a static so creation of additional Display objects won't affect the menu bar. 
+	 */
+	if (!Display.launched) {
+		application.finishLaunching();
+		Display.launched = true;
+
+		/* only add the shutdown hook once */
+		Runtime.getRuntime().addShutdownHook(new Thread() {
+			public void run() {
+				NSApplication.sharedApplication().terminate(null);
+			}
+		});
+	}
+	
+	/*
+	 * Call init to force the AWT delegate to re-attach itself to the application menu.
+	 * The Preferences item must have a tag of 42 or the AWT delegate won't be able to find it. 
+	 * Reset it to what we want it to be after the delegate is set up.
+	 */
+	NSMenu appleMenu = application.mainMenu().itemAtIndex(0).submenu();
+	NSMenuItem prefsItem = appleMenu.itemWithTag(SWT.ID_PREFERENCES);
+	if (prefsItem != null) prefsItem.setTag(42);
+	if (currAppDelegate != null) {
+		currAppDelegate.init();
+	} 
+	if (prefsItem != null) prefsItem.setTag(SWT.ID_PREFERENCES);
+	
 	observerCallback = new Callback (this, "observerProc", 3); //$NON-NLS-1$
 	int /*long*/ observerProc = observerCallback.getAddress ();
 	if (observerProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
@@ -2046,12 +2249,25 @@ void addEventMethods (int /*long*/ cls, int /*long*/ proc2, int /*long*/ proc3,
 		OS.class_addMethod(cls, OS.sel_shouldDelayWindowOrderingForEvent_, proc3, "@:@");
 		OS.class_addMethod(cls, OS.sel_acceptsFirstMouse_, proc3, "@:@");
 		OS.class_addMethod(cls, OS.sel_changeColor_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_cancelOperation_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_touchesBeganWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_touchesMovedWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_touchesEndedWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_touchesCancelledWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_beginGestureWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_endGestureWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_swipeWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_rotateWithEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_magnifyWithEvent_, proc3, "@:@");
+		
 	}
 	if (proc2 != 0) {
 		OS.class_addMethod(cls, OS.sel_resignFirstResponder, proc2, "@:");
 		OS.class_addMethod(cls, OS.sel_becomeFirstResponder, proc2, "@:");
 		OS.class_addMethod(cls, OS.sel_resetCursorRects, proc2, "@:");
 		OS.class_addMethod(cls, OS.sel_updateTrackingAreas, proc2, "@:");
+		OS.class_addMethod(cls, OS.sel_getImageView, proc2, "@:");
+		OS.class_addMethod(cls, OS.sel_mouseDownCanMoveWindow, proc2, "@:");
 	}
 	if (needsDisplayInRectProc != 0) {
 		OS.class_addMethod(cls, OS.sel_setNeedsDisplayInRect_, needsDisplayInRectProc, "@:{NSRect}");
@@ -2093,6 +2309,56 @@ int /*long*/ registerCellSubclass(int /*long*/ cellClass, int size, int align, b
 	return cls;
 }
 
+int /*long*/ createWindowSubclass(int /*long*/ baseClass, String newClass, boolean isDynamic) {
+	int /*long*/ cls = OS.objc_lookUpClass(newClass);
+	if (cls != 0) return cls;
+	cls = OS.objc_allocateClassPair(baseClass, newClass, 0);
+	int /*long*/ proc3 = windowCallback3.getAddress();
+	int /*long*/ proc2 = windowCallback2.getAddress();
+	int /*long*/ proc4 = windowCallback4.getAddress();
+	int /*long*/ proc6 = windowCallback6.getAddress();
+	int /*long*/ view_stringForToolTip_point_userDataProc = OS.CALLBACK_view_stringForToolTip_point_userData_(proc6);
+	int /*long*/ accessibilityHitTestProc = OS.CALLBACK_accessibilityHitTest_(proc3);
+
+	if (!isDynamic) OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendEvent_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_helpRequested_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_canBecomeKeyWindow, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_becomeKeyWindow, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_makeFirstResponder_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_noResponderFor_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_view_stringForToolTip_point_userData_, view_stringForToolTip_point_userDataProc, "@:@i{NSPoint}@");
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	return cls;	
+}
+
+int /*long*/ createMenuSubclass(int /*long*/ baseClass, String newClass, boolean isDynamic) {
+	int /*long*/ cls = OS.objc_lookUpClass(newClass);
+	if (cls != 0) return cls;
+	cls = OS.objc_allocateClassPair(baseClass, newClass, 0);
+	int /*long*/ proc3 = windowCallback3.getAddress();
+	int /*long*/ proc4 = windowCallback4.getAddress();
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_menuWillOpen_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_menuDidClose_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_menu_willHighlightItem_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_menuNeedsUpdate_, proc3, "@:@");
+	OS.objc_registerClassPair(cls);
+	return cls;	
+}
+
+int /*long*/ createMenuItemSubclass(int /*long*/ baseClass, String newClass, boolean isDynamic) {
+	int /*long*/ cls = OS.objc_lookUpClass(newClass);
+	if (cls != 0) return cls;
+	cls = OS.objc_allocateClassPair(baseClass, newClass, 0);
+	int /*long*/ proc2 = windowCallback2.getAddress();
+	if (!isDynamic) OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	OS.objc_registerClassPair(cls);
+	return cls;	
+}
+
 void initClasses () {
 	if (OS.objc_lookUpClass ("SWTView") != 0) return;
 	
@@ -2128,9 +2394,11 @@ void initClasses () {
 	int /*long*/ drawWithExpansionFrameProc = OS.CALLBACK_drawWithExpansionFrame_inView_ (proc4);
 	int /*long*/ imageRectForBoundsProc = OS.CALLBACK_imageRectForBounds_ (proc3);
 	int /*long*/ titleRectForBoundsProc = OS.CALLBACK_titleRectForBounds_ (proc3);
+	int /*long*/ cellSizeForBoundsProc = OS.CALLBACK_cellSizeForBounds_ (proc3);
 	int /*long*/ hitTestForEvent_inRect_ofViewProc = OS.CALLBACK_hitTestForEvent_inRect_ofView_ (proc5);
 	int /*long*/ cellSizeProc = OS.CALLBACK_cellSize (proc2);
 	int /*long*/ drawImageWithFrameInViewProc = OS.CALLBACK_drawImage_withFrame_inView_ (proc5);
+	int /*long*/ drawTitleWithFrameInViewProc = OS.CALLBACK_drawTitle_withFrame_inView_ (proc5);
 	int /*long*/ setFrameOriginProc = OS.CALLBACK_setFrameOrigin_(proc3);
 	int /*long*/ setFrameSizeProc = OS.CALLBACK_setFrameSize_(proc3);
 	int /*long*/ hitTestProc = OS.CALLBACK_hitTest_(proc3);
@@ -2153,9 +2421,8 @@ void initClasses () {
 	int /*long*/ drawViewBackgroundInRectProc = OS.CALLBACK_drawViewBackgroundInRect_(proc3);
 	int /*long*/ drawBackgroundInClipRectProc = OS.CALLBACK_drawBackgroundInClipRect_(proc3);
 	int /*long*/ scrollClipView_ToPointProc = OS.CALLBACK_scrollClipView_toPoint_(proc4);
-	
-	byte[] types = {'*','\0'};
-	int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+	int /*long*/ headerRectOfColumnProc = OS.CALLBACK_headerRectOfColumn_(proc3);
+	int /*long*/ columnAtPointProc = OS.CALLBACK_columnAtPoint_(proc3);
 
 	String className;
 	int /*long*/ cls;
@@ -2172,6 +2439,7 @@ void initClasses () {
 	cls = OS.objc_allocateClassPair(OS.class_NSButton, className, 0);
 	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
 	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_validateMenuItem_, proc3, "@:@");
 	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
 	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
 	OS.objc_registerClassPair(cls);
@@ -2185,10 +2453,11 @@ void initClasses () {
 	cls = OS.objc_allocateClassPair (OS.class_NSButtonCell, className, 0);
 	OS.class_addIvar (cls, SWT_OBJECT, size, (byte)align, types);
 	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
-	OS.class_addMethod (cls, OS.sel_drawImage_withFrame_inView_, drawImageWithFrameInViewProc, "@:@{NSFrame}@");
-	OS.class_addMethod(cls, OS.sel_cellSize, cellSizeProc, "@:");
+	OS.class_addMethod (cls, OS.sel_drawImage_withFrame_inView_, drawImageWithFrameInViewProc, "@:@{NSRect}@");
+	OS.class_addMethod (cls, OS.sel_drawTitle_withFrame_inView_, drawTitleWithFrameInViewProc, "@:@{NSRect}@");
 	OS.class_addMethod(cls, OS.sel_drawInteriorWithFrame_inView_, drawInteriorWithFrameInViewProc, "@:{NSRect}@");
 	OS.class_addMethod(cls, OS.sel_titleRectForBounds_, titleRectForBoundsProc, "@:{NSRect}");
+	OS.class_addMethod(cls, OS.sel_cellSizeForBounds_, cellSizeForBoundsProc, "@:{NSRect}");
 	OS.objc_registerClassPair (cls);
 
 	className = "SWTCanvasView";
@@ -2214,6 +2483,10 @@ void initClasses () {
 	OS.class_addMethod(cls, OS.sel_isOpaque, proc2, "@:");
 	OS.class_addMethod(cls, OS.sel_updateOpenGLContext_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_clearDeferFlushing, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_validRequestorForSendType_returnType_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_readSelectionFromPasteboard_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_writeSelectionToPasteboard_types_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_viewWillMoveToWindow_, proc3, "@:@");
 	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
 	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
 	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
@@ -2244,6 +2517,7 @@ void initClasses () {
 	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
 	OS.class_addMethod(cls, OS.sel_isFlipped, proc2, "@:");
 	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_sendVerticalSelection, proc2, "@:");
 	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
 	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
 	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
@@ -2288,20 +2562,8 @@ void initClasses () {
 	OS.class_addMethod (cls, OS.sel_expansionFrameWithFrame_inView_, expansionFrameWithFrameProc, "@:{NSRect}@");
 	OS.objc_registerClassPair (cls);
 
-	className = "SWTMenu";
-	cls = OS.objc_allocateClassPair(OS.class_NSMenu, className, 0);
-	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
-	OS.class_addMethod(cls, OS.sel_menuWillOpen_, proc3, "@:@");
-	OS.class_addMethod(cls, OS.sel_menuDidClose_, proc3, "@:@");
-	OS.class_addMethod(cls, OS.sel_menu_willHighlightItem_, proc4, "@:@@");
-	OS.class_addMethod(cls, OS.sel_menuNeedsUpdate_, proc3, "@:@");
-	OS.objc_registerClassPair(cls);
-	
-	className = "SWTMenuItem";
-	cls = OS.objc_allocateClassPair(OS.class_NSMenuItem, className, 0);
-	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
-	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
-	OS.objc_registerClassPair(cls);
+	createMenuSubclass(OS.class_NSMenu, "SWTMenu", false);
+	createMenuItemSubclass(OS.class_NSMenuItem, "SWTMenuItem", false);
 
 	className = "SWTOutlineView";
 	cls = OS.objc_allocateClassPair(OS.class_NSOutlineView, className, 0);
@@ -2313,11 +2575,18 @@ void initClasses () {
 	OS.class_addMethod(cls, OS.sel_outlineView_child_ofItem_, proc5, "@:@i@");
 	OS.class_addMethod(cls, OS.sel_outlineView_isItemExpandable_, proc4, "@:@@");
 	OS.class_addMethod(cls, OS.sel_outlineView_numberOfChildrenOfItem_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_selectRowIndexes_byExtendingSelection_, proc4, "@:@Z");
+	OS.class_addMethod(cls, OS.sel_deselectRow_, proc3, "@:i");
+	OS.class_addMethod(cls, OS.sel_deselectAll_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_outlineView_objectValueForTableColumn_byItem_, proc5, "@:@@@");
 	OS.class_addMethod(cls, OS.sel_outlineView_willDisplayCell_forTableColumn_item_, proc6, "@:@@@@");
-	OS.class_addMethod(cls, OS.sel_outlineView_shouldSelectItem_, proc4, "@:@@");
-	OS.class_addMethod(cls, OS.sel_outlineView_shouldTrackCell_forTableColumn_item_, proc6, "@:@@@i");
+	OS.class_addMethod(cls, OS.sel_outlineView_shouldReorderColumn_toColumn_, proc5, "@:@ii");
 	OS.class_addMethod(cls, OS.sel_outlineView_setObjectValue_forTableColumn_byItem_, proc6, "@:@@@@");
+	OS.class_addMethod(cls, OS.sel_outlineView_shouldEditTableColumn_item_, proc5, "@:@@@");
+	OS.class_addMethod(cls, OS.sel_outlineView_shouldTrackCell_forTableColumn_item_, proc6, "@:@@@@@@");
+	OS.class_addMethod(cls, OS.sel_outlineView_shouldExpandItem_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_setShouldExpandItem_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_setShouldScrollClipView_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_outlineViewColumnDidMove_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_outlineViewColumnDidResize_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_outlineView_didClickTableColumn_, proc4, "@:@@");
@@ -2471,6 +2740,8 @@ void initClasses () {
 	OS.class_addMethod(cls, OS.sel_resetCursorRects, proc2, "@:");
 	OS.class_addMethod(cls, OS.sel_updateTrackingAreas, proc2, "@:");
 	OS.class_addMethod(cls, OS.sel_menuForEvent_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_headerRectOfColumn_, headerRectOfColumnProc, "@:i");
+	OS.class_addMethod(cls, OS.sel_columnAtPoint_, columnAtPointProc, "@:{NSPoint}");
 	//TODO hitTestProc and drawRectProc should be set Control.setRegion()? 
 	OS.objc_registerClassPair(cls);
 
@@ -2480,18 +2751,22 @@ void initClasses () {
 	OS.class_addMethod(cls, OS.sel_highlightSelectionInClipRect_, highlightSelectionInClipRectProc, "@:{NSRect}");
 	OS.class_addMethod(cls, OS.sel_sendDoubleSelection, proc2, "@:");
 	OS.class_addMethod(cls, OS.sel_numberOfRowsInTableView_, proc3, "@:@");
-	OS.class_addMethod(cls, OS.sel_tableView_objectValueForTableColumn_row_, proc5, "@:@:@:@");
-	OS.class_addMethod(cls, OS.sel_tableView_shouldEditTableColumn_row_, proc5, "@:@:@:@");
+	OS.class_addMethod(cls, OS.sel_tableView_objectValueForTableColumn_row_, proc5, "@:@@i");
+	OS.class_addMethod(cls, OS.sel_tableView_shouldEditTableColumn_row_, proc5, "@:@@i");
+	OS.class_addMethod(cls, OS.sel_tableView_shouldReorderColumn_toColumn_, proc5, "@:@ii");
+	OS.class_addMethod(cls, OS.sel_tableView_shouldTrackCell_forTableColumn_row_, proc6, "@:@@@i");
 	OS.class_addMethod(cls, OS.sel_tableViewSelectionIsChanging_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_tableViewSelectionDidChange_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_tableView_willDisplayCell_forTableColumn_row_, proc6, "@:@@@i");
-	OS.class_addMethod(cls, OS.sel_tableView_shouldSelectRow_, proc4, "@:@i");
-	OS.class_addMethod(cls, OS.sel_tableView_shouldTrackCell_forTableColumn_row_, proc6, "@:@@@i");
 	OS.class_addMethod(cls, OS.sel_tableView_setObjectValue_forTableColumn_row_, proc6, "@:@@@i");
 	OS.class_addMethod(cls, OS.sel_tableViewColumnDidMove_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_tableViewColumnDidResize_, proc3, "@:@");
-	OS.class_addMethod(cls, OS.sel_tableView_didClickTableColumn_, proc4, "@:@");
+	OS.class_addMethod(cls, OS.sel_setShouldScrollClipView_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_tableView_didClickTableColumn_, proc4, "@:@@");
 	OS.class_addMethod(cls, OS.sel_canDragRowsWithIndexes_atPoint_, canDragRowsWithIndexes_atPoint_Proc, "@:@{NSPoint=ff}");
+	OS.class_addMethod(cls, OS.sel_selectRowIndexes_byExtendingSelection_, proc4, "@:@Z");
+	OS.class_addMethod(cls, OS.sel_deselectRow_, proc3, "@:i");
+	OS.class_addMethod(cls, OS.sel_deselectAll_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_tableView_writeRowsWithIndexes_toPasteboard_, proc5, "@:@@@");
 	OS.class_addMethod(cls, OS.sel_drawBackgroundInClipRect_, drawBackgroundInClipRectProc, "@:{NSRect}");
 	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
@@ -2569,7 +2844,10 @@ void initClasses () {
 	OS.objc_registerClassPair(cls);
 	
 	className = "SWTWindow";
-	cls = OS.objc_allocateClassPair(OS.class_NSWindow, className, 0);
+	createWindowSubclass(OS.class_NSWindow, className, false);
+	
+	className = "SWTPanel";
+	cls = OS.objc_allocateClassPair(OS.class_NSPanel, className, 0);
 	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
 	OS.class_addMethod(cls, OS.sel_sendEvent_, proc3, "@:@");
 	OS.class_addMethod(cls, OS.sel_helpRequested_, proc3, "@:@");
@@ -2581,6 +2859,25 @@ void initClasses () {
 	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
 	OS.objc_registerClassPair(cls);
 	
+	className = "SWTToolbar";
+	cls = OS.objc_allocateClassPair(OS.class_NSToolbar, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar_, proc5, "@:@@Z");
+	OS.class_addMethod(cls, OS.sel_toolbarAllowedItemIdentifiers_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_toolbarDefaultItemIdentifiers_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_toolbarSelectableItemIdentifiers_, proc3, "@:@");
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTToolbarView";
+	cls = OS.objc_allocateClassPair(OS.class_NSToolbarView, className, 0);
+	/**
+	 * Note no SWT_OBJECT field is added. SWTToolbarView is always used dynamically so no ivars can be added to the class.
+	 */
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	OS.objc_registerClassPair(cls);
+	
 	className = "SWTWindowDelegate";
 	cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
 	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
@@ -2636,10 +2933,10 @@ void initColors () {
 	colors[SWT.COLOR_LIST_SELECTION_TEXT] = getWidgetColorRGB(SWT.COLOR_LIST_SELECTION_TEXT);
 	colors[SWT.COLOR_LIST_SELECTION] = getWidgetColorRGB(SWT.COLOR_LIST_SELECTION);
 
-	alternateSelectedControlColor = getWidgetColorRGB(NSColor.alternateSelectedControlColor());
-	alternateSelectedControlTextColor = getWidgetColorRGB(NSColor.alternateSelectedControlTextColor());
-	secondarySelectedControlColor = getWidgetColorRGB(NSColor.secondarySelectedControlColor());
-	selectedControlTextColor = getWidgetColorRGB(NSColor.selectedControlTextColor());
+	alternateSelectedControlColor = getNSColorRGB(NSColor.alternateSelectedControlColor());
+	alternateSelectedControlTextColor = getNSColorRGB(NSColor.alternateSelectedControlTextColor());
+	secondarySelectedControlColor = getNSColorRGB(NSColor.secondarySelectedControlColor());
+	selectedControlTextColor = getNSColorRGB(NSColor.selectedControlTextColor());
 }
 
 void initFonts () {
@@ -2816,16 +3113,11 @@ public boolean post(Event event) {
 	synchronized (Device.class) {
 		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
 		if (event == null) error (SWT.ERROR_NULL_ARGUMENT);
-
-		// TODO: Not sure if these calls have any effect on event posting.
-		if (!eventSourceDelaySet) {
-			OS.CGSetLocalEventsSuppressionInterval(0.0);
-	        OS.CGEnableEventStateCombining(1);
-	        OS.CGSetLocalEventsFilterDuringSuppressionState(OS.kCGEventFilterMaskPermitLocalKeyboardEvents | OS.kCGEventFilterMaskPermitLocalMouseEvents | OS.kCGEventFilterMaskPermitSystemDefinedEvents, OS.kCGEventSuppressionStateSuppressionInterval);
-	        OS.CGSetLocalEventsFilterDuringSuppressionState(OS.kCGEventFilterMaskPermitLocalKeyboardEvents | OS.kCGEventFilterMaskPermitLocalMouseEvents | OS.kCGEventFilterMaskPermitSystemDefinedEvents, OS.kCGEventSuppressionStateRemoteMouseDrag);
-			eventSourceDelaySet = true;
-		}
-
+		int /*long*/ eventRef = 0;
+		int /*long*/ eventSource = OS.CGEventSourceCreate(OS.kCGEventSourceStateHIDSystemState);
+		if (eventSource == 0) return false;
+		boolean returnValue = false;
+		int deadKeyState[] = new int[1];
 		int type = event.type;
 		switch (type) {
 			case SWT.KeyDown:
@@ -2845,6 +3137,7 @@ public boolean post(Event event) {
 					char [] output = new char [maxStringLength];
 					int [] actualStringLength = new int [1];
 					for (short i = 0 ; i <= 0x7F ; i++) {
+						deadKeyState[0] = 0;
 						OS.UCKeyTranslate (uchrPtr, i, (short)(type == SWT.KeyDown ? OS.kUCKeyActionDown : OS.kUCKeyActionUp), 0, OS.LMGetKbdType(), 0, deadKeyState, maxStringLength, actualStringLength, output);
 						if (output[0] == event.character) {
 							vKey = i;
@@ -2853,6 +3146,7 @@ public boolean post(Event event) {
 					}
 					if (vKey == -1) {
 						for (short i = 0 ; i <= 0x7F ; i++) {
+							deadKeyState[0] = 0;
 							OS.UCKeyTranslate (uchrPtr, i, (short)(type == SWT.KeyDown ? OS.kUCKeyActionDown : OS.kUCKeyActionUp), OS.shiftKey, OS.LMGetKbdType(), 0, deadKeyState, maxStringLength, actualStringLength, output);
 							if (output[0] == event.character) {
 								vKey = i;
@@ -2871,79 +3165,73 @@ public boolean post(Event event) {
 					vKey = 127;
 				}
 				
-				if (vKey == -1) return false;
-				
-				return OS.CGPostKeyboardEvent((short)0, vKey, type == SWT.KeyDown) == 0;
+				if (vKey != -1) {
+					if (OS.VERSION < 0x1060) {
+						returnValue = OS.CGPostKeyboardEvent((short)0, vKey, type == SWT.KeyDown) == OS.noErr;
+					} else {
+						eventRef = OS.CGEventCreateKeyboardEvent(eventSource, vKey, type == SWT.KeyDown);
+					}
+				}
+				break;
 			}
 			case SWT.MouseDown:
 			case SWT.MouseMove: 
 			case SWT.MouseUp: {
 				CGPoint mouseCursorPosition = new CGPoint ();
-				int chord = OS.GetCurrentButtonState ();
 
 				if (type == SWT.MouseMove) {
 					mouseCursorPosition.x = event.x;
 					mouseCursorPosition.y = event.y;
-					return OS.CGPostMouseEvent (mouseCursorPosition, true, 5, (chord & 0x1) != 0, (chord & 0x2) != 0, (chord & 0x4) != 0, (chord & 0x8) != 0, (chord & 0x10) != 0) == 0;
+					eventRef = OS.CGEventCreateMouseEvent(eventSource, OS.kCGEventMouseMoved, mouseCursorPosition, 0);
 				} else {
-					int button = event.button;
-					if (button < 1 || button > 5) return false;
-					boolean button1 = false, button2 = false, button3 = false, button4 = false, button5 = false;
-	 				switch (button) {
-						case 1: {
-							button1 = type == SWT.MouseDown;
-							button2 = (chord & 0x4) != 0;
-							button3 = (chord & 0x2) != 0;
-							button4 = (chord & 0x8) != 0;
-							button5 = (chord & 0x10) != 0;
-							break;
-						}
-						case 2: {
-							button1 = (chord & 0x1) != 0;
-							button2 = type == SWT.MouseDown;
-							button3 = (chord & 0x2) != 0;
-							button4 = (chord & 0x8) != 0;
-							button5 = (chord & 0x10) != 0;
-							break;
-						}
-						case 3: {
-							button1 = (chord & 0x1) != 0;
-							button2 = (chord & 0x4) != 0;
-							button3 = type == SWT.MouseDown;
-							button4 = (chord & 0x8) != 0;
-							button5 = (chord & 0x10) != 0;
-							break;
-						}
-						case 4: {
-							button1 = (chord & 0x1) != 0;
-							button2 = (chord & 0x4) != 0;
-							button3 = (chord & 0x2) != 0;
-							button4 = type == SWT.MouseDown;
-							button5 = (chord & 0x10) != 0;
-							break;
-						}
-						case 5: {
-							button1 = (chord & 0x1) != 0;
-							button2 = (chord & 0x4) != 0;
-							button3 = (chord & 0x2) != 0;
-							button4 = (chord & 0x8) != 0;
-							button5 = type == SWT.MouseDown;
-							break;
-						}
-					}
-	 				
 	 				NSPoint nsCursorPosition = NSEvent.mouseLocation();
 	 				NSRect primaryFrame = getPrimaryFrame();
 	 				mouseCursorPosition.x = nsCursorPosition.x;
 	 				mouseCursorPosition.y = (int) (primaryFrame.height - nsCursorPosition.y);
-					return OS.CGPostMouseEvent (mouseCursorPosition, true, 5, button1, button3, button2, button4, button5) == 0;
+	 				int eventType = 0;
+	 				int button = event.button;
+	 				switch (button) {
+	 				case 1:
+	 					eventType = (event.type == SWT.MouseDown ? OS.kCGEventLeftMouseDown : OS.kCGEventLeftMouseUp);
+	 					break;
+	 				case 2:
+	 					eventType = (event.type == SWT.MouseDown ? OS.kCGEventRightMouseDown : OS.kCGEventRightMouseUp);
+	 					break;
+	 				default:
+	 					eventType = (event.type == SWT.MouseDown ? OS.kCGEventOtherMouseDown : OS.kCGEventOtherMouseUp);
+	 					break;
+	 				}
+
+	 				// SWT buttons are 1-based; CG buttons are 0 based.
+	 				button -= 1;
+	 				if (button >= 0) {
+	 					eventRef = OS.CGEventCreateMouseEvent(eventSource, eventType, mouseCursorPosition, button);
+	 				}
 				}
+				break;
 			}
 			case SWT.MouseWheel: {
-				return OS.CGPostScrollWheelEvent(1, event.count) == 0;
+				// CG does not support scrolling a page at a time. Technically that is a page up/down, but not a scroll-wheel event. 
+				eventRef = OS.CGEventCreateScrollWheelEvent(eventSource, OS.kCGScrollEventUnitLine, 1, event.count);
+				break;
 			}
 		} 
-		return false;
+		
+		// returnValue is true if we called CGPostKeyboardEvent (10.5 only).
+		if (returnValue == false) {
+			if (eventRef != 0) {
+				try {
+					Thread.sleep(1);
+				} catch (Exception e) {
+				}
+				OS.CGEventPost(OS.kCGSessionEventTap, eventRef);
+				OS.CFRelease(eventRef);
+				returnValue = true;
+			}
+		}
+		
+		if (eventSource != 0) OS.CFRelease(eventSource);		
+		return returnValue;
 	}
 }
 
@@ -3238,6 +3526,44 @@ int /*long*/ observerProc (int /*long*/ observer, int /*long*/ activity, int /*l
 	return 0;
 }
 
+static int /*long*/ performKeyEquivalent(int /*long*/ id, int /*long*/ sel, int /*long*/ arg) {
+	NSEvent nsEvent = new NSEvent(arg);
+	int stateMask = 0;
+	int /*long*/ selector = 0;
+	int /*long*/ modifierFlags = nsEvent.modifierFlags();
+	if ((modifierFlags & OS.NSAlternateKeyMask) != 0) stateMask |= SWT.ALT;
+	if ((modifierFlags & OS.NSShiftKeyMask) != 0) stateMask |= SWT.SHIFT;
+	if ((modifierFlags & OS.NSControlKeyMask) != 0) stateMask |= SWT.CONTROL;
+	if ((modifierFlags & OS.NSCommandKeyMask) != 0) stateMask |= SWT.COMMAND;
+	if (stateMask == SWT.COMMAND) {
+		short keyCode = nsEvent.keyCode ();
+		switch (keyCode) {
+			case 7: /* X */
+				selector = OS.sel_cut_;
+				break;
+			case 8: /* C */
+				selector = OS.sel_copy_;
+				break;
+			case 9: /* V */
+				selector = OS.sel_paste_;
+				break;
+			case 0: /* A */
+				selector = OS.sel_selectAll_;
+				break;
+		}
+		
+		if (selector != 0) {
+			NSApplication.sharedApplication().sendAction(selector, null, NSApplication.sharedApplication());
+			return 1;
+		}
+	}
+
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg);
+}
+
 /**
  * Reads an event from the operating system's event queue,
  * dispatches it appropriately, and returns <code>true</code>
@@ -3353,6 +3679,10 @@ protected void release () {
 	disposeList = null;
 	synchronizer.releaseSynchronizer ();
 	synchronizer = null;
+	if (appMenu != null) appMenu.dispose();
+	appMenu = null;
+	if (appMenuBar != null) appMenuBar.dispose();
+	appMenuBar = null;
 	releaseDisplay ();
 	super.release ();
 }
@@ -3438,8 +3768,6 @@ void releaseDisplay () {
 	if (cursorSetCallback != null) cursorSetCallback.dispose();
 	cursorSetCallback = null;
 
-	deadKeyState = null;
-
 	if (settingsDelegate != null) {
 		NSNotificationCenter.defaultCenter().removeObserver(settingsDelegate);
 		settingsDelegate.release();
@@ -3457,6 +3785,11 @@ void releaseDisplay () {
 		}
 	}
 	
+	if (dynamicObjectMap != null) {
+		dynamicObjectMap.clear();
+		dynamicObjectMap = null;
+	}
+	
 	// The autorelease pool is cleaned up when we call NSApplication.terminate().
 
 	if (application != null && applicationClass != 0) {
@@ -3552,7 +3885,16 @@ public void removeListener (int eventType, Listener listener) {
 Widget removeWidget (NSObject view) {
 	if (view == null) return null;
 	int /*long*/ [] jniRef = new int /*long*/ [1];
-	OS.object_getInstanceVariable(view.id, SWT_OBJECT, jniRef);
+	int /*long*/ iVar = OS.object_getInstanceVariable(view.id, SWT_OBJECT, jniRef);
+	
+	if (iVar == 0) {
+		if (dynamicObjectMap != null) {
+			LONG dynJNIRef = (LONG) dynamicObjectMap.get(view);
+			if (dynJNIRef != null) jniRef[0] = dynJNIRef.value;
+			dynamicObjectMap.remove(view);
+		}
+	}
+
 	if (jniRef[0] == 0) return null;
 	Widget widget = (Widget)OS.JNIGetObject(jniRef[0]);
 	OS.object_setInstanceVariable(view.id, SWT_OBJECT, 0);
@@ -3787,6 +4129,24 @@ void sendEvent (EventTable table, Event event) {
 	}
 }
 
+void subclassPanel(id panel, String swtClassName) {
+	if (performKeyEquivalentCallback == null) performKeyEquivalentCallback = new Callback(getClass(), "performKeyEquivalent", 3);
+	int /*long*/ proc = performKeyEquivalentCallback.getAddress();
+	if (proc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	int /*long*/ cls = OS.object_getClass(panel.id);
+	if (cls == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	// If the implementation is the callback's the class is already subclassed, so don't do it again.
+	int /*long*/ procPtr = OS.class_getMethodImplementation(cls, OS.sel_performKeyEquivalent_);
+	if (procPtr == proc) return;
+	int /*long*/ swtPanelClass = OS.objc_getClass(swtClassName);
+	if (swtPanelClass == 0) {
+		swtPanelClass = OS.objc_allocateClassPair(OS.object_getClass(panel.id), swtClassName, 0);
+		OS.class_addMethod(swtPanelClass, OS.sel_performKeyEquivalent_, proc, "@:@");
+		OS.objc_registerClassPair(swtPanelClass);
+	}
+	OS.object_setClass(panel.id, swtPanelClass);
+}
+
 static NSString getApplicationName() {
 	NSString name = null;
 	int pid = OS.getpid ();
@@ -3799,6 +4159,10 @@ static NSString getApplicationName() {
 			name = new NSString(value);
 		}
 	}
+	if (name == null) {
+		String macAppName = System.getProperty("com.apple.mrj.application.apple.menu.about.name");
+		if (macAppName != null) name = NSString.stringWith(macAppName);
+	}
 	if (name == null) name = NSString.stringWith("SWT");
 	return name;
 }
@@ -3862,7 +4226,7 @@ public static void setAppVersion (String version) {
 Runnable hoverTimer = new Runnable () {
 	public void run () {
 		if (currentControl != null && !currentControl.isDisposed()) {
-			currentControl.sendMouseEvent (NSApplication.sharedApplication().currentEvent(), SWT.MouseHover, trackingControl != null && !trackingControl.isDisposed());
+			currentControl.sendMouseEvent (null, SWT.MouseHover, trackingControl != null && !trackingControl.isDisposed());
 		}
 	}
 };
@@ -3941,9 +4305,11 @@ void setCursor (Control control) {
  */
 public void setCursorLocation (int x, int y) {
 	checkDevice ();
-	CGPoint pt = new CGPoint ();
-	pt.x = x;  pt.y = y;
-	OS.CGWarpMouseCursorPosition (pt);
+	Event e = new Event();
+	e.type = SWT.MouseMove;
+	e.x = x;
+	e.y = y;
+	post(e);
 }
 
 /**
@@ -4060,6 +4426,10 @@ public void setData (String key, Object value) {
 }
 
 void setMenuBar (Menu menu) {
+	// If passed a null menu bar don't clear out the menu bar, but switch back to the 
+	// application menu bar instead, if it exists.  If the app menu bar is already active
+	// we jump out without harming the current menu bar.
+	if (menu == null) menu = appMenuBar;
 	if (menu == menuBar) return;
 	menuBar = menu;
 	//remove all existing menu items except the application menu
@@ -4428,19 +4798,31 @@ Control findControl (boolean checkTrim) {
 Control findControl (boolean checkTrim, NSView[] hitView) {
 	NSView view = null;
 	NSPoint screenLocation = NSEvent.mouseLocation();
-	NSArray windows = application.orderedWindows();
-	for (int i = 0, count = (int)/*64*/windows.count(); i < count && view == null; i++) {
-		NSWindow window = new NSWindow(windows.objectAtIndex(i));
+	int /*long*/ hitWindowNumber = 0;
+	if (OS.VERSION >= 0x1060) {
+		hitWindowNumber = NSWindow.windowNumberAtPoint(screenLocation, 0);
+	} else {
+		int /*long*/ outWindow[] = new int /*long*/ [1];
+		OS.FindWindow ((int /*long*/)screenLocation.x, (int /*long*/)(getPrimaryFrame().height - screenLocation.y), outWindow);
+
+		if (outWindow[0] != 0) {
+			hitWindowNumber = OS.HIWindowGetCGWindowID(outWindow[0]);
+		}
+	}
+	
+	NSWindow window = application.windowWithWindowNumber(hitWindowNumber);
+	if (window != null) {
 		NSView contentView = window.contentView();
-		if (contentView != null && OS.NSPointInRect(screenLocation, window.frame())) {
+		if (contentView != null) contentView = contentView.superview();
+		if (contentView != null) {
 			NSPoint location = window.convertScreenToBase(screenLocation);
 			view = contentView.hitTest (location);
 			if (view == null && !checkTrim) {
 				view = contentView;
 			}
-			break;
 		}
 	}
+
 	Control control = null;
 	if (view != null) {
 		do {
@@ -4473,6 +4855,10 @@ void finishLaunching (int /*long*/ id, int /*long*/ sel) {
 }
 
 void applicationDidBecomeActive (int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	NSWindow keyWindow = application.keyWindow();
+	if (keyWindow != null) {
+		keyWindow.orderFrontRegardless();
+	}
 	checkFocus();
 	checkEnterExit(findControl(true), null, false);
 }
@@ -4498,31 +4884,41 @@ int /*long*/ applicationNextEventMatchingMask (int /*long*/ id, int /*long*/ sel
 
 void applicationSendTrackingEvent (NSEvent nsEvent, Control trackingControl) {
 	int type = (int)/*64*/nsEvent.type();
+	boolean runEnterExit = false;
+	Control runEnterExitControl = null;
 	switch (type) {
 		case OS.NSLeftMouseDown:
 		case OS.NSRightMouseDown:
 		case OS.NSOtherMouseDown:
+			clickCount = (int)(clickCountButton == nsEvent.buttonNumber() ? nsEvent.clickCount() : 1);
+			clickCountButton = (int)nsEvent.buttonNumber();
 			trackingControl.sendMouseEvent (nsEvent, SWT.MouseDown, true);
 			break;
 		case OS.NSLeftMouseUp:
 		case OS.NSRightMouseUp:
 		case OS.NSOtherMouseUp:
-			checkEnterExit (findControl (true), nsEvent, true);
-			if (trackingControl.isDisposed()) return;
+			runEnterExit = true;
+			runEnterExitControl = findControl(true);
 			Control control = trackingControl;
 			this.trackingControl = null;
-			control.sendMouseEvent (nsEvent, SWT.MouseUp, false);
+			if (clickCount == 2) {
+				control.sendMouseEvent (nsEvent, SWT.MouseDoubleClick, false);
+			}
+			if (!control.isDisposed()) control.sendMouseEvent (nsEvent, SWT.MouseUp, false);
 			break;
 		case OS.NSLeftMouseDragged:
 		case OS.NSRightMouseDragged:
 		case OS.NSOtherMouseDragged:
-			checkEnterExit (trackingControl, nsEvent, true);
-			if (trackingControl.isDisposed()) return;
+			runEnterExit = true;
+			runEnterExitControl = trackingControl;
 			//FALL THROUGH
 		case OS.NSMouseMoved:
 			trackingControl.sendMouseEvent (nsEvent, SWT.MouseMove, true);
 			break;
 	}
+	if (runEnterExit) {
+		if (runEnterExitControl == null || !runEnterExitControl.isDisposed()) checkEnterExit (runEnterExitControl, nsEvent, false);
+	}
 }
 
 void applicationSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
@@ -4547,6 +4943,7 @@ void applicationSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event
 		case OS.NSKeyDown:
 		case OS.NSKeyUp:
 		case OS.NSScrollWheel:
+		// TODO:  Add touch detection here...
 			if (window != null) {
 				Shell shell = (Shell) getWidget (window.id);
 				if (shell != null) {
@@ -4593,9 +4990,53 @@ void applicationSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event
 
 void applicationWillFinishLaunching (int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
 	boolean loaded = false;
+	
+	/*
+	 * Bug in AWT:  If the AWT starts up first when the VM was started on the first thread it assumes that
+	 * a Carbon-based SWT will be used, so it calls NSApplicationLoad().  This causes the Carbon menu
+	 * manager to create an application menu that isn't accessible via NSMenu.  It is, however, accessible
+	 * via the Carbon menu manager, so find and delete the menu items it added. 
+	 * 
+	 * Note that this code will continue to work if Apple does change this. GetIndMenuWithCommandID will
+	 * return a non-zero value indicating failure, which we ignore.
+	 */
+	if (isEmbedded) {
+		int /*long*/ outMenu [] = new int /*long*/ [1];
+		short outIndex[] = new short[1];
+		int status = OS.GetIndMenuItemWithCommandID(0, OS.kHICommandHide, 1, outMenu, outIndex);
+		if (status == 0) OS.DeleteMenuItem(outMenu[0], outIndex[0]);
+		status = OS.GetIndMenuItemWithCommandID(0, OS.kHICommandHideOthers, 1, outMenu, outIndex);
+		if (status == 0) OS.DeleteMenuItem(outMenu[0], outIndex[0]);
+		status = OS.GetIndMenuItemWithCommandID(0, OS.kHICommandShowAll, 1, outMenu, outIndex);
+		if (status == 0) OS.DeleteMenuItem(outMenu[0], outIndex[0]);
+		status = OS.GetIndMenuItemWithCommandID(0, OS.kHICommandQuit, 1, outMenu, outIndex);
+		if (status == 0) OS.DeleteMenuItem(outMenu[0], outIndex[0]);
+		status = OS.GetIndMenuItemWithCommandID(0, OS.kHICommandServices, 1, outMenu, outIndex);
+		if (status == 0) OS.DeleteMenuItem(outMenu[0], outIndex[0]);
+	}
+
+	/*
+	 * Get the default locale's language, and then the display name of the language. Some Mac OS X localizations use the 
+	 * display name of the language, but many use the ISO two-char abbreviation instead.
+	 */
+	Locale loc = Locale.getDefault();
+	String languageISOValue = loc.getLanguage();
+	NSLocale englishLocale = (NSLocale) new NSLocale().alloc();
+	englishLocale = new NSLocale(englishLocale.initWithLocaleIdentifier(NSString.stringWith("en_US")));
+	NSString languageDisplayName = englishLocale.displayNameForKey(OS.NSLocaleLanguageCode, NSString.stringWith(languageISOValue));
+	if (englishLocale != null) englishLocale.release();
+	
+	/* To find the nib look for each of these paths, in order, until one is found:
+	 * 		/System/Library/..../Resources/<display name>.lproj/DefaultApp.nib
+	 * 		/System/Library/..../Resources/<language>.lproj/DefaultApp.nib
+	 * 		/System/Library/..../Resources/<user's default language>.lproj/DefaultApp.nib
+	 * 		/System/Library/..../Resources/English.lproj/DefaultApp.nib.
+	 */
 	NSBundle bundle = NSBundle.bundleWithIdentifier(NSString.stringWith("com.apple.JavaVM"));
 	NSDictionary dict = NSDictionary.dictionaryWithObject(applicationDelegate, NSString.stringWith("NSOwner"));
-	NSString path = bundle.pathForResource(NSString.stringWith("DefaultApp"), NSString.stringWith("nib"));
+	NSString path = bundle.pathForResource(NSString.stringWith("DefaultApp"), NSString.stringWith("nib"), null, languageDisplayName);
+	if (path == null) path = bundle.pathForResource(NSString.stringWith("DefaultApp"), NSString.stringWith("nib"), null, NSString.stringWith(languageISOValue));
+	if (path == null) path = bundle.pathForResource(NSString.stringWith("DefaultApp"), NSString.stringWith("nib"));
 	if (!loaded) loaded = path != null && NSBundle.loadNibFile(path, dict, 0);
 	if (!loaded) {
 		NSString resourcePath = bundle.resourcePath();
@@ -4609,6 +5050,7 @@ void applicationWillFinishLaunching (int /*long*/ id, int /*long*/ sel, int /*lo
 	if (!loaded) {
 		createMainMenu();
 	}
+	
 	//replace %@ with application name
 	NSMenu mainmenu = application.mainMenu();
 	NSMenuItem appitem = mainmenu.itemAtIndex(0);
@@ -4622,6 +5064,28 @@ void applicationWillFinishLaunching (int /*long*/ id, int /*long*/ sel, int /*lo
 			NSMenuItem ni = new NSMenuItem(ia.objectAtIndex(i));
 			NSString title = ni.title().stringByReplacingOccurrencesOfString(match, name);
 			ni.setTitle(title);
+			int /*long*/ newTag = 0;
+			switch(i) {
+				case 0:
+					newTag = SWT.ID_ABOUT;
+					break;
+				case 2:
+					newTag = SWT.ID_PREFERENCES;
+					break;
+				case 6:
+					newTag = SWT.ID_HIDE;
+					break;
+				case 7:
+					newTag = SWT.ID_HIDE_OTHERS;
+					break;
+				case 8:
+					newTag = SWT.ID_SHOW_ALL;
+					break;
+				case 10:
+					newTag = SWT.ID_QUIT;
+					break;
+			}
+			if (newTag != 0) ni.setTag(newTag);
 		}
 
 		int /*long*/ quitIndex = sm.indexOfItemWithTarget(applicationDelegate, OS.sel_terminate_);
@@ -4655,19 +5119,33 @@ static int /*long*/ applicationProc(int /*long*/ id, int /*long*/ sel) {
 static int /*long*/ applicationProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
 	//TODO optimize getting the display
 	Display display = getCurrent ();
-	if (display == null) {
+	if (display == null && id != applicationDelegate.id) {
 		objc_super super_struct = new objc_super ();
 		super_struct.receiver = id;
 		super_struct.super_class = OS.objc_msgSend (id, OS.sel_superclass);
 		return OS.objc_msgSendSuper (super_struct, sel, arg0);
 	}
+
+	if (currAppDelegate != null) {
+		if (currAppDelegate.respondsToSelector(sel)) OS.objc_msgSend(currAppDelegate.id, sel, arg0);
+	}
+	
 	NSApplication application = display.application;
 	if (sel == OS.sel_sendEvent_) {
 		display.applicationSendEvent (id, sel, arg0);
 	} else if (sel == OS.sel_applicationWillFinishLaunching_) {
 		display.applicationWillFinishLaunching(id, sel, arg0);
-	} else if (sel == OS.sel_terminate_) {
-		// Do nothing here -- without a definition of sel_terminate we get a warning dumped to the console.
+	} else if (sel == OS.sel_applicationShouldTerminate_) {
+		int returnVal = OS.NSTerminateCancel;
+		if (!display.disposing) {
+			Event event = new Event ();
+			display.sendEvent (SWT.Close, event);
+			if (event.doit) {
+				display.dispose();
+				returnVal = OS.NSTerminateNow;
+			}
+		}
+		return returnVal;
 	} else if (sel == OS.sel_orderFrontStandardAboutPanel_) {
 //		application.orderFrontStandardAboutPanel(application);
 	} else if (sel == OS.sel_hideOtherApplications_) {
@@ -4697,38 +5175,37 @@ static int /*long*/ applicationProc(int /*long*/ id, int /*long*/ sel, int /*lon
 
 static int /*long*/ applicationProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
 	Display display = getCurrent();
-	if (display != null) {
-		if (sel == OS.sel_application_openFile_) {
-			String file = new NSString(arg1).getString();
+
+	if (display == null && id != applicationDelegate.id) {
+		objc_super super_struct = new objc_super ();
+		super_struct.receiver = id;
+		super_struct.super_class = OS.objc_msgSend (id, OS.sel_superclass);
+		return OS.objc_msgSendSuper (super_struct, sel, arg0, arg1);
+	}
+
+	// Forward to the AWT, if necessary.
+	if (currAppDelegate != null) {
+		if (currAppDelegate.respondsToSelector(sel)) OS.objc_msgSend(currAppDelegate.id, sel, arg0, arg1);
+	} 
+
+	if (sel == OS.sel_application_openFile_) {
+		String file = new NSString(arg1).getString();
+		Event event = new Event();
+		event.text = file;
+		display.sendEvent(SWT.OpenDocument, event);
+		return 1;
+	} else if (sel == OS.sel_application_openFiles_) {
+		NSArray files = new NSArray(arg1);
+		int /*long*/ count = files.count();
+		for (int i=0; i<count; i++) {
+			String file = new NSString(files.objectAtIndex(i)).getString();
 			Event event = new Event();
 			event.text = file;
 			display.sendEvent(SWT.OpenDocument, event);
-			return 1;
-		} else if (sel == OS.sel_application_openFiles_) {
-			NSArray files = new NSArray(arg1);
-			int /*long*/ count = files.count();
-			for (int i=0; i<count; i++) {
-				String file = new NSString(files.objectAtIndex(i)).getString();
-				Event event = new Event();
-				event.text = file;
-				display.sendEvent(SWT.OpenDocument, event);
-			}
-			new NSApplication(arg0).replyToOpenOrPrint(OS.NSApplicationDelegateReplySuccess);
-		} 
-		else if (sel == OS.sel_applicationShouldHandleReopen_hasVisibleWindows_) {
-			return 1;
-		}
-		else if (sel == OS.sel_applicationShouldTerminate_) {
-			if (!display.disposing) {
-				Event event = new Event ();
-				display.sendEvent (SWT.Close, event);
-				if (event.doit) {
-					display.dispose();
-					return OS.NSTerminateNow;
-				}
-			}
-			return OS.NSTerminateCancel;
 		}
+		new NSApplication(arg0).replyToOpenOrPrint(OS.NSApplicationDelegateReplySuccess);
+	}  else if (sel == OS.sel_applicationShouldHandleReopen_hasVisibleWindows_) {
+		return 1;
 	}
 	return 0;
 }
@@ -4736,7 +5213,7 @@ static int /*long*/ applicationProc(int /*long*/ id, int /*long*/ sel, int /*lon
 static int /*long*/ applicationProc(int /*long*/ id, int /*long*/sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
 	//TODO optimize getting the display
 	Display display = getCurrent ();
-	if (display == null) {
+	if (display == null && id != applicationDelegate.id) {
 		objc_super super_struct = new objc_super ();
 		super_struct.receiver = id;
 		super_struct.super_class = OS.objc_msgSend (id, OS.sel_superclass);
@@ -4893,6 +5370,10 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel) {
 		return widget.accessibilityAttributeNames(id, sel);
 	} else if (sel == OS.sel_accessibilityParameterizedAttributeNames) {
 		return widget.accessibilityParameterizedAttributeNames(id, sel);
+	} else if (sel == OS.sel_getImageView) {
+		return widget.imageView();
+	} else if (sel == OS.sel_mouseDownCanMoveWindow) {
+		return (widget.mouseDownCanMoveWindow(id, sel) ? 1 : 0);
 	} else if (sel == OS.sel_accessibilityFocusedUIElement) {
 		return widget.accessibilityFocusedUIElement(id, sel);
 	} else if (sel == OS.sel_accessibilityIsIgnored) {
@@ -4963,6 +5444,10 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		NSRect rect = new NSRect();
 		OS.memmove(rect, arg0, NSRect.sizeof);
 		widget.drawRect(id, sel, rect);
+	} else if (sel == OS.sel_columnAtPoint_) {
+		NSPoint point = new NSPoint();
+		OS.memmove(point, arg0, NSPoint.sizeof);
+		return widget.columnAtPoint(id, sel, point);
 	} else if (sel == OS.sel__drawThemeProgressArea_) {
 		widget._drawThemeProgressArea(id, sel, arg0);
 	} else if (sel == OS.sel_setFrameOrigin_) {
@@ -5105,6 +5590,12 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		widget.setNeedsDisplayInRect(id, sel, arg0);
 	} else if (sel == OS.sel_setImage_) {
 		widget.setImage(id, sel, arg0);
+	} else if (sel == OS.sel_headerRectOfColumn_) {
+		NSRect rect = widget.headerRectOfColumn(id, sel, arg0);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRect.sizeof);
+		OS.memmove (result, rect, NSRect.sizeof);
+		return result;
 	} else if (sel == OS.sel_imageRectForBounds_) {
 		NSRect rect = new NSRect();
 		OS.memmove(rect, arg0, NSRect.sizeof);
@@ -5121,6 +5612,14 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		int /*long*/ result = OS.malloc (NSRect.sizeof);
 		OS.memmove (result, rect, NSRect.sizeof);
 		return result;
+	} else if (sel == OS.sel_cellSizeForBounds_) {
+		NSRect rect = new NSRect();
+		OS.memmove(rect, arg0, NSRect.sizeof);
+		NSSize size = widget.cellSizeForBounds(id, sel, rect);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSSize.sizeof);
+		OS.memmove (result, size, NSSize.sizeof);
+		return result;
 	} else if (sel == OS.sel_setObjectValue_) {
 		widget.setObjectValue(id, sel, arg0);
 	} else if (sel == OS.sel_updateOpenGLContext_) {
@@ -5149,6 +5648,46 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		widget.windowDidMiniturize(id, sel, arg0);
 	} else if (sel == OS.sel_windowDidDeminiaturize_) {
 		widget.windowDidDeminiturize(id, sel, arg0);
+	} else if (sel == OS.sel_touchesBeganWithEvent_) {
+		widget.touchesBeganWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_touchesMovedWithEvent_) {
+		widget.touchesMovedWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_touchesEndedWithEvent_) {
+		widget.touchesEndedWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_touchesCancelledWithEvent_) {
+		widget.touchesCancelledWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_beginGestureWithEvent_) {
+		widget.beginGestureWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_endGestureWithEvent_) {
+		widget.endGestureWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_swipeWithEvent_) {
+		widget.swipeWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_magnifyWithEvent_) {
+		widget.magnifyWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_rotateWithEvent_) {
+		widget.rotateWithEvent(id, sel, arg0);
+	} else if (sel == OS.sel_toolbarAllowedItemIdentifiers_) {
+		return widget.toolbarAllowedItemIdentifiers(id, sel, arg0);
+	} else if (sel == OS.sel_toolbarDefaultItemIdentifiers_) {
+		return widget.toolbarDefaultItemIdentifiers(id, sel, arg0);
+	} else if (sel == OS.sel_toolbarSelectableItemIdentifiers_) {
+		return widget.toolbarSelectableItemIdentifiers(id, sel, arg0);
+	} else if (sel == OS.sel_validateMenuItem_) {
+		return (widget.validateMenuItem(id, sel, arg0) ? 1 : 0);
+	} else if (sel == OS.sel_readSelectionFromPasteboard_) {
+		return (widget.readSelectionFromPasteboard(id, sel, arg0) ? 1 : 0);
+	} else if (sel == OS.sel_viewWillMoveToWindow_) {
+		widget.viewWillMoveToWindow(id, sel, arg0);
+	} else if (sel == OS.sel_cancelOperation_) {
+		widget.cancelOperation(id, sel, arg0);
+	} else if (sel == OS.sel_setShouldExpandItem_) {
+		widget.setShouldExpandItem(id, sel, arg0 != 0);
+	} else if (sel == OS.sel_setShouldScrollClipView_) {
+		widget.setShouldScrollClipView(id, sel, arg0 != 0);
+	} else if (sel == OS.sel_deselectRow_) {
+		widget.deselectRow(id, sel, arg0);
+	} else if (sel == OS.sel_deselectAll_) {
+		widget.deselectAll(id, sel, arg0);
 	}
 	return 0;
 }
@@ -5180,16 +5719,14 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		return widget.accessibilityAttributeValue_forParameter(id, sel, arg0, arg1);
 	} else if (sel == OS.sel_tableView_didClickTableColumn_) {
 		widget.tableView_didClickTableColumn (id, sel, arg0, arg1);
-	} else if (sel == OS.sel_tableView_shouldSelectRow_) {
-		return (widget.tableView_shouldSelectRow(id, sel, arg0, arg1) ? 1 : 0);
 	} else if (sel == OS.sel_outlineView_didClickTableColumn_) {
 		widget.outlineView_didClickTableColumn (id, sel, arg0, arg1);
-	} else if (sel == OS.sel_outlineView_shouldSelectItem_) {
-		return (widget.outlineView_shouldSelectItem(id, sel, arg0, arg1) ? 1 : 0);
 	} else if (sel == OS.sel_shouldChangeTextInRange_replacementString_) {
 		return widget.shouldChangeTextInRange_replacementString(id, sel, arg0, arg1) ? 1 : 0;
 	} else if (sel == OS.sel_canDragRowsWithIndexes_atPoint_) {
-		return widget.canDragRowsWithIndexes_atPoint(id, sel, arg0, arg1) ? 1 : 0;
+		NSPoint clickPoint = new NSPoint();
+		OS.memmove(clickPoint, arg1, NSPoint.sizeof);
+		return widget.canDragRowsWithIndexes_atPoint(id, sel, arg0, clickPoint) ? 1 : 0;
 	} else if (sel == OS.sel_expandItem_expandChildren_) {
 		widget.expandItem_expandChildren(id, sel, arg0, arg1 != 0);
 	} else if (sel == OS.sel_collapseItem_collapseChildren_) {
@@ -5212,6 +5749,14 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		widget.scrollClipViewToPoint (id, sel, arg0, point);
 	} else if (sel == OS.sel_accessibilitySetValue_forAttribute_) {
 		widget.accessibilitySetValue_forAttribute(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_validRequestorForSendType_returnType_) {
+		return widget.validRequestorForSendType(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_writeSelectionToPasteboard_types_) {
+		return (widget.writeSelectionToPasteboard(id, sel, arg0, arg1) ? 1 : 0);
+	} else if (sel == OS.sel_outlineView_shouldExpandItem_) {
+		return (widget.outlineView_shouldExpandItem_item(id, sel, arg0, arg1) ? 1 : 0);
+	} else if (sel == OS.sel_selectRowIndexes_byExtendingSelection_) {
+		widget.selectRowIndexes_byExtendingSelection(id, sel, arg0, arg1 != 0);
 	}
 	return 0;
 }
@@ -5221,8 +5766,14 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 	if (widget == null) return 0;
 	if (sel == OS.sel_tableView_objectValueForTableColumn_row_) {
 		return widget.tableView_objectValueForTableColumn_row(id, sel, arg0, arg1, arg2);
+	} else if (sel == OS.sel_tableView_shouldReorderColumn_toColumn_) {
+		return widget.tableView_shouldReorderColumn_toColumn(id, sel, arg0, arg1, arg2) ? 1 : 0;
 	} else if (sel == OS.sel_tableView_shouldEditTableColumn_row_) {
 		return widget.tableView_shouldEditTableColumn_row(id, sel, arg0, arg1, arg2) ? 1 : 0;
+	} else if (sel == OS.sel_outlineView_shouldReorderColumn_toColumn_) {
+		return widget.outlineView_shouldReorderColumn_toColumn(id, sel, arg0, arg1, arg2) ? 1 : 0;
+	} else if (sel == OS.sel_outlineView_shouldEditTableColumn_item_) {
+		return widget.outlineView_shouldEditTableColumn_row(id, sel, arg0, arg1, arg2) ? 1 : 0;
 	} else if (sel == OS.sel_textView_clickedOnLink_atIndex_) {
 		 return widget.textView_clickOnLink_atIndex(id, sel, arg0, arg1, arg2) ? 1 : 0;
 	} else if (sel == OS.sel_outlineView_child_ofItem_) {
@@ -5243,6 +5794,14 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		NSRect rect = new NSRect ();
 		OS.memmove (rect, arg1, NSRect.sizeof);
 		widget.drawImageWithFrameInView (id, sel, arg0, rect, arg2);
+	} else if (sel == OS.sel_drawTitle_withFrame_inView_) {
+		NSRect rect = new NSRect ();
+		OS.memmove (rect, arg1, NSRect.sizeof);
+		rect = widget.drawTitleWithFrameInView (id, sel, arg0, rect, arg2);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRect.sizeof);
+		OS.memmove (result, rect, NSRect.sizeof);
+		return result;
 	} else if (sel == OS.sel_hitTestForEvent_inRect_ofView_) {
 		NSRect rect = new NSRect ();
 		OS.memmove (rect, arg1, NSRect.sizeof);
@@ -5251,6 +5810,8 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 		return (widget.tableView_writeRowsWithIndexes_toPasteboard(id, sel, arg0, arg1, arg2) ? 1 : 0);
 	} else if (sel == OS.sel_outlineView_writeItems_toPasteboard_) {
 		return (widget.outlineView_writeItems_toPasteboard(id, sel, arg0, arg1, arg2) ? 1 : 0);
+	} else if (sel == OS.sel_toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar_) {
+		return widget.toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar(id, sel, arg0, arg1, arg2 != 0);
 	}
 	return 0;
 }
@@ -5269,9 +5830,9 @@ static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ a
 	} else if (sel == OS.sel_view_stringForToolTip_point_userData_) {
 		return widget.view_stringForToolTip_point_userData(id, sel, arg0, arg1, arg2, arg3);
 	} else if (sel == OS.sel_tableView_shouldTrackCell_forTableColumn_row_) {
-		return (widget.tableView_shouldTrackCell_forTableColumn_row(id, sel, arg0, arg1, arg2, arg3) ? 1 : 0);
+		return widget.tableView_shouldTrackCell_forTableColumn_row(id, sel, arg0, arg1, arg2, arg3) ? 1 : 0;
 	} else if (sel == OS.sel_outlineView_shouldTrackCell_forTableColumn_item_) {
-		return (widget.outlineView_shouldTrackCell_forTableColumn_item(id, sel, arg0, arg1, arg2, arg3) ? 1 : 0);
+		return widget.outlineView_shouldTrackCell_forTableColumn_item(id, sel, arg0, arg1, arg2, arg3) ? 1 : 0;
 	}
 	return 0;
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java
old mode 100644
new mode 100755
index 870bcec..5be438b
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java	
@@ -27,8 +27,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * <p>
  * Note: Only one of the styles SAVE and OPEN may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
@@ -220,6 +219,11 @@ public String open () {
 		openPanel.setAllowsMultipleSelection((style & SWT.MULTI) != 0);
 		panel = openPanel;
 	}
+	
+	Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
+	// Note that SWTFileOpenPanel is also used by DirectoryDialog!!
+	String className = ((style & SWT.OPEN) != 0) ? "SWTFileOpenPanel" : "SWTFileSavePanel";
+	display.subclassPanel(panel, className);	
 	panel.setCanCreateDirectories(true);
 	OS.objc_msgSend(panel.id, OS.sel_setShowsHiddenFiles_, true);
 	int /*long*/ jniRef = 0;
@@ -256,7 +260,6 @@ public String open () {
 	if (parent != null && (style & SWT.SHEET) != 0) {
 		application.beginSheet(panel, parent.view.window (), null, 0, 0);
 	}
-	Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
 	display.setModalDialog(this);
 	NSString dir = (filterPath != null && filterPath.length() > 0) ? NSString.stringWith(filterPath) : null;
 	NSString file = (fileName != null && fileName.length() > 0) ? NSString.stringWith(fileName) : null;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java
old mode 100644
new mode 100755
index e4c5241..fc999e2
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
@@ -143,6 +142,8 @@ public RGB getRGB () {
 public FontData open () {
 	Display display = parent != null ? parent.display : Display.getCurrent ();	
 	NSFontPanel panel = NSFontPanel.sharedFontPanel();
+	String className = "SWTFontDialogPanel";
+	display.subclassPanel(panel, className);
 	panel.setTitle(NSString.stringWith(title != null ? title : ""));
 	boolean create = fontData != null;
 	Font font = create ? new Font(display, fontData) : display.getSystemFont();
@@ -175,8 +176,9 @@ void setColor_forAttribute(int /*long*/ id, int /*long*/ sel, int /*long*/ color
 	if (attribute != 0 && NSString.stringWith("NSColor").isEqualToString(new NSString(attribute))) { //$NON-NLS-1$
 		if (colorArg != 0) {
 			NSColor color = new NSColor(colorArg);
-			color = color.colorUsingColorSpaceName(OS.NSCalibratedRGBColorSpace);
-			rgb = new RGB((int)(color.redComponent() * 255), (int)(color.greenComponent() * 255), (int)(color.blueComponent() * 255));
+			Display display = parent != null ? parent.getDisplay() : Display.getCurrent();
+			float /*double*/ [] handle = display.getNSColorRGB(color);
+			rgb = new RGB((int)(handle[0] * 255), (int)(handle[1] * 255), (int)(handle[2] * 255));
 		} else {
 			rgb = null;
 		}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java
old mode 100644
new mode 100755
index b457465..15cb569
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -124,6 +124,8 @@ void createHandle () {
 	NSBox widget = (NSBox)new SWTBox().alloc();
 	widget.init();
 	widget.setTitlePosition(OS.NSNoTitle);
+	widget.setContentViewMargins(new NSSize());
+	
 	NSView contentWidget = (NSView)new SWTView().alloc();
 	contentWidget.init();
 //	contentWidget.setDrawsBackground(false);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java
index 44165a7..db0136f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -261,17 +261,14 @@ TextStyle getStyle (NSDictionary attribs) {
 	for (int j = 0; j < count; j++) {
 		NSString key = new NSString (keys.objectAtIndex (j));
 		if (key.isEqualTo (OS.NSBackgroundColorAttributeName)) {
-			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
-			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
-			style.background = Color.cocoa_new (display, rgbColor);
+			NSColor color = new NSColor (attribs.objectForKey (key));
+			style.background = Color.cocoa_new (display, display.getNSColorRGB(color));
 		} else if (key.isEqualTo (OS.NSForegroundColorAttributeName)) {
-			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
-			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
-			style.foreground = Color.cocoa_new (display, rgbColor);
+			NSColor color = new NSColor (attribs.objectForKey (key));
+			style.foreground = Color.cocoa_new (display, display.getNSColorRGB(color));
 		} else if (key.isEqualTo (OS.NSUnderlineColorAttributeName)) {
-			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
-			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
-			style.underlineColor = Color.cocoa_new (display, rgbColor);
+			NSColor color = new NSColor (attribs.objectForKey (key));
+			style.underlineColor = Color.cocoa_new (display, display.getNSColorRGB(color));
 		} else if (key.isEqualTo (OS.NSUnderlineStyleAttributeName)) {
 			NSNumber value = new NSNumber (attribs.objectForKey (key));
 			switch (value.intValue ()) {
@@ -281,9 +278,8 @@ TextStyle getStyle (NSDictionary attribs) {
 			}
 			style.underline = value.intValue () != OS.NSUnderlineStyleNone;
 		} else if (key.isEqualTo (OS.NSStrikethroughColorAttributeName)) {
-			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
-			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
-			style.strikeoutColor = Color.cocoa_new (display, rgbColor);
+			NSColor color = new NSColor (attribs.objectForKey (key));
+			style.strikeoutColor = Color.cocoa_new (display, display.getNSColorRGB(color));
 		} else if (key.isEqualTo (OS.NSStrikethroughStyleAttributeName)) {
 			NSNumber value = new NSNumber (attribs.objectForKey (key));
 			style.strikeout = value.intValue () != OS.NSUnderlineStyleNone;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java
old mode 100644
new mode 100755
index c98066a..db3b4b1
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,8 +38,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
  * Only one of CENTER, LEFT and RIGHT may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
@@ -287,6 +286,10 @@ void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
 	fillBackground(view, context, rect, -1);
 }
 
+int /*long*/ imageView() {
+	return imageView.id;
+};
+
 boolean drawsBackground() {
 	return background != null || backgroundImage != null;
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java
old mode 100644
new mode 100755
index 6f46287..8b875fa
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@ public class Link extends Control {
 	int [] mnemonics;
 	NSColor linkColor;
 	int focusIndex;
+	boolean ignoreNextMouseUp;
 	
 /**
  * Constructs a new instance of this class given its parent
@@ -114,6 +115,8 @@ boolean textView_clickOnLink_atIndex(int /*long*/ id, int /*long*/ sel, int /*lo
 	Event event = new Event ();
 	event.text = str.getString();
 	sendSelectionEvent (SWT.Selection, event, true);
+	// Widget may be disposed at this point.
+	if (isDisposed()) return true;
 	for (int i = 0; i < offsets.length; i++) {
 		if ((charIndex >= offsets[i].x) && (charIndex <= offsets[i].y)) {
 			focusIndex = i;
@@ -121,9 +124,19 @@ boolean textView_clickOnLink_atIndex(int /*long*/ id, int /*long*/ sel, int /*lo
 		}
 	}
 	redrawWidget(view, false);
+	ignoreNextMouseUp = true;
 	return true;
 }
 
+boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
+	if (type == SWT.MouseMove) {
+		if (view.window().firstResponder().id != view.id) {
+			mouseMoved(view.id, OS.sel_mouseMoved_, nsEvent.id);
+		}
+	}
+	return super.sendMouseEvent(nsEvent, type, send);
+}
+
 public Point computeSize (int wHint, int hHint, boolean changed) {
 	checkWidget ();
 	if (wHint != SWT.DEFAULT && wHint < 0) wHint = 0;
@@ -133,7 +146,7 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 	NSLayoutManager layoutManager = (NSLayoutManager)new NSLayoutManager ().alloc ().init ();
 	NSTextContainer textContainer = (NSTextContainer)new NSTextContainer ().alloc ();
 	NSSize size = new NSSize ();
-	size.width = size.height = Float.MAX_VALUE;
+	size.width = size.height = OS.MAX_TEXT_CONTAINER_SIZE;
 	if (wHint != SWT.DEFAULT) size.width = wHint;
 	if (hHint != SWT.DEFAULT) size.height = hHint;
 	textContainer.initWithContainerSize (size);
@@ -186,6 +199,7 @@ void createHandle () {
 	NSSize size = new NSSize ();
 	size.width = size.height = Float.MAX_VALUE;
 	widget.setMaxSize (size);
+	widget.setDisplaysLinkToolTips(false);
 	widget.setDrawsBackground(false);
 	widget.setDelegate(widget);
 	widget.setAutoresizingMask (OS.NSViewWidthSizable | OS.NSViewHeightSizable);
@@ -245,6 +259,18 @@ void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rectangl
 	}
 }
 
+Cursor findCursor () {
+	Cursor cursor = super.findCursor();
+	if (cursor != null) return cursor;
+	NSWindow window = view.window();
+	NSTextView widget = (NSTextView) view;
+	NSPoint point = view.convertPoint_fromView_(window.convertScreenToBase(NSEvent.mouseLocation()), null);
+	if (widget.characterIndexForInsertionAtPoint(point) == widget.textStorage ().length ()) {
+		return display.getSystemCursor (SWT.CURSOR_ARROW);
+	}
+	return null;
+}
+
 void enableWidget (boolean enabled) {
 	super.enableWidget (enabled);
 	NSColor nsColor = null; 
@@ -338,6 +364,19 @@ public String getText () {
 	return text;
 }
 
+void mouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	/*
+	 * Feature in Cocoa: Link click notices are sent on mouseDown, but for some reason, Cocoa
+	 * re-sends the mouseUp that follows the click on a link. Fix is to ignore the next mouseUp
+	 * fired after a link selection.
+	 */
+	if (ignoreNextMouseUp) {
+		ignoreNextMouseUp = false;
+		return;
+	}
+	super.mouseUp(id, sel, theEvent);
+}
+
 boolean shouldDrawInsertionPoint(int /*long*/ id, int /*long*/ sel) {
 	return false;
 }
@@ -672,11 +711,6 @@ public void setText (String string) {
 	}
 }
 
-public void setToolTipText(String string) {
-	((NSTextView)view).setDisplaysLinkToolTips(string == null);
-	super.setToolTipText(string);
-}
-
 void setZOrder () {
 	super.setZOrder ();
 	if (scrollView != null) scrollView.setDocumentView (view);
@@ -708,7 +742,7 @@ void updateCursorRects (boolean enabled) {
 	updateCursorRects (enabled, scrollView);	
 	NSClipView contentView = scrollView.contentView ();
 	updateCursorRects (enabled, contentView);
-	contentView.setDocumentCursor (enabled ? NSCursor.IBeamCursor () : null);
+	contentView.setDocumentCursor (enabled ? NSCursor.arrowCursor () : null);
 }
 
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java
old mode 100644
new mode 100755
index 8cb80d9..3b06fb9
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,7 @@ public class List extends Scrollable {
 	NSTableColumn column;
 	String [] items;
 	int itemCount;
-	boolean ignoreSelect, didSelect;
+	boolean ignoreSelect, didSelect, rowsChanged, mouseIsDown;
 
 	static int NEXT_ID;
 
@@ -754,7 +754,7 @@ void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	NSEvent nsEvent = new NSEvent(theEvent);
 	NSPoint pt = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
 	int row = (int)/*64*/widget.rowAtPoint(pt);
-	if (row != -1 && (nsEvent.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == 0) {
+	if (row != -1 && (nsEvent.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == 0 && nsEvent.clickCount() == 1) {
 		if (widget.isRowSelected(row) && widget.selectedRowIndexes().count() == 1) {
 			if (0 <= row && row < itemCount) {
 				sendSelection();
@@ -1103,6 +1103,20 @@ boolean sendKeyEvent (NSEvent nsEvent, int type) {
 	return result;
 }
 
+boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
+	if (type == SWT.MouseDown) {
+		mouseIsDown = true;
+	} else if (type == SWT.MouseUp || type == SWT.DragDetect) {
+		mouseIsDown = false;
+		
+		if (rowsChanged) {
+			rowsChanged = false;
+			((NSTableView)view).noteNumberOfRowsChanged();
+		}
+	}
+	return super.sendMouseEvent(nsEvent, type, send);
+}
+
 void sendSelection () {
 	if (ignoreSelect) return;
 	sendSelectionEvent(SWT.Selection);
@@ -1428,10 +1442,6 @@ void tableViewSelectionIsChanging (int /*long*/ id, int /*long*/ sel, int /*long
 	sendSelection();
 }
 
-boolean tableView_shouldEditTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
-	return false;
-}
-
 int /*long*/ tableView_objectValueForTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
 	float /*double*/ [] fg = ((NSTableView)view).isRowSelected(rowIndex) ? null : foreground;
 	NSAttributedString attribStr = createString(items[(int)/*64*/rowIndex], null, fg, SWT.LEFT, false, getEnabled(), false);
@@ -1439,14 +1449,43 @@ int /*long*/ tableView_objectValueForTableColumn_row(int /*long*/ id, int /*long
 	return attribStr.id;
 }
 
-void updateRowCount() {
-	NSTableView widget = (NSTableView)view;
-	setRedraw(false);
-	ignoreSelect = true;
-	widget.noteNumberOfRowsChanged ();
-	ignoreSelect = false;
-	widget.tile();
-	setRedraw(true);
+int /*long*/ tableView_selectionIndexesForProposedSelection (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ indexSet) {
+	if ((style & SWT.SINGLE) != 0) {
+		/*
+		 * Feature in Cocoa.  Calling setAllowsEmptySelection will automatically select the first row of the list. 
+		 * And, single-selection NSTable/OutlineViews allow the user to de-select the selected item via command-click.
+		 * This is normal platform behavior, but for compatibility with other platforms, if the SINGLE style is in use,
+		 * force a selection by seeing if the proposed selection set is empty, and if so, put back the currently selected row.  
+		 */
+		NSIndexSet indexes = new NSIndexSet(indexSet);
+		NSTableView table = new NSTableView(aTableView);			
+		if (indexes.count() != 1 && table.selectedRow() != -1) {
+			NSIndexSet newSelection = (NSIndexSet)new NSIndexSet().alloc();
+			newSelection = newSelection.initWithIndex(table.selectedRow());
+			newSelection.autorelease();
+			return newSelection.id;
+		}
+	}
+	
+	return indexSet;
+}
+
+void updateRowCount() {	
+	/*
+	 * Feature in Cocoa. Changing the row count while the mouse is tracking will confuse the code that calculates the 
+	 * current selection.  Fix is to not call noteNumberOfRowsChanged if the mouse is down.
+	 */
+	if (mouseIsDown) {
+		rowsChanged = true;
+	} else {
+		NSTableView widget = (NSTableView)view;
+		setRedraw(false);
+		ignoreSelect = true;
+		widget.noteNumberOfRowsChanged ();
+		ignoreSelect = false;
+		widget.tile();
+		setRedraw(true);
+	}
 }
 
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java
old mode 100644
new mode 100755
index 98dff52..adffc44
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -127,9 +127,21 @@ public Menu (Control parent) {
  * @see Widget#getStyle
  */
 public Menu (Decorations parent, int style) {
-	super (parent, checkStyle (style));
+	checkSubclass ();
+	checkParent (parent);
+	this.style = checkStyle(style);
+	if (parent != null) {
+		display = parent.display;
+	} else {
+		display = Display.getCurrent ();
+		if (display == null) display = Display.getDefault ();
+		if (!display.isValidThread ()) {
+			error (SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+	}
 	this.parent = parent;
-	createWidget ();
+	reskinWidget();
+	createWidget();
 }
 
 /**
@@ -188,6 +200,26 @@ public Menu (MenuItem parentItem) {
 	this (checkNull (parentItem).parent);
 }
 
+Menu (Display display) {
+	if (display == null) display = Display.getCurrent ();
+	if (display == null) display = Display.getDefault ();
+	if (!display.isValidThread ()) {
+		error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+	this.display = display;
+	this.style = SWT.BAR;
+	reskinWidget();
+	createWidget();
+}
+
+Menu (Display display, NSMenu nativeMenu) {
+	this.display = display;
+	this.style = SWT.DROP_DOWN;
+	this.nsMenu = nativeMenu;
+	reskinWidget();
+	createWidget();
+}
+
 static Control checkNull (Control control) {
 	if (control == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
 	return control;
@@ -203,6 +235,16 @@ static MenuItem checkNull (MenuItem item) {
 	return item;
 }
 
+void checkParent (Widget parent) {
+	// A null parent is okay when the app menu bar is in use.
+	if (parent == null && Display.getDefault().appMenuBar == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (parent != null) {
+		if (parent.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		parent.checkWidget ();
+		parent.checkOpen ();
+	}
+}
+
 static int checkStyle (int style) {
 	return checkBits (style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0);
 }
@@ -294,30 +336,79 @@ public void addMenuListener (MenuListener listener) {
 
 void createHandle () {
 	display.addMenu (this);
-	NSMenu widget = (NSMenu)new SWTMenu().alloc();
-	widget = widget.initWithTitle(NSString.string());
-	widget.setAutoenablesItems(false);
-	widget.setDelegate(widget);	
-	nsMenu = widget;	
+	if (nsMenu == null) {
+		NSMenu widget = (NSMenu)new SWTMenu().alloc();
+		widget = widget.initWithTitle(NSString.string());
+		widget.setAutoenablesItems(false);
+		widget.setDelegate(widget);	
+		nsMenu = widget;	
+	} else {
+		nsMenu.retain();
+		int /*long*/ cls = OS.object_getClass(nsMenu.id);
+		int /*long*/ dynNSMenu_class = display.createMenuSubclass(cls, "SWTSystemMenu", true);
+		if (cls != dynNSMenu_class) {
+			OS.object_setClass(nsMenu.id, dynNSMenu_class);
+		}
+		nsMenu.setDelegate(nsMenu);	
+	}
 }
 
 void createItem (MenuItem item, int index) {
 	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
-	NSMenuItem nsItem = null;
-	if ((item.style & SWT.SEPARATOR) != 0) {
-		nsItem = NSMenuItem.separatorItem();
-		nsItem.retain();
+	boolean add = true;
+	NSMenuItem nsItem = item.nsItem;
+	if (nsItem == null) {
+		if ((item.style & SWT.SEPARATOR) != 0) {
+			nsItem = NSMenuItem.separatorItem();
+			nsItem.retain();
+		} else {
+			nsItem = (NSMenuItem)new SWTMenuItem().alloc();
+			NSString empty = NSString.string();
+			nsItem.initWithTitle(empty, 0, empty);
+			nsItem.setTarget(nsItem);
+			nsItem.setAction(OS.sel_sendSelection);
+		}
+		item.nsItem = nsItem;
 	} else {
-		nsItem = (NSMenuItem)new SWTMenuItem().alloc();
-		NSString empty = NSString.string();
-		nsItem.initWithTitle(empty, 0, empty);
+		int /*long*/ cls = OS.object_getClass(nsItem.id);
+		int /*long*/ dynNSMenuItem_class = display.createMenuItemSubclass(cls, "SWTSystemMenuItem", true);
+		if (cls != dynNSMenuItem_class) {
+			OS.object_setClass(nsItem.id, dynNSMenuItem_class);
+		}
+		nsItem.retain();
+		item.nsItemAction = nsItem.action();
+		item.nsItemTarget = nsItem.target();
 		nsItem.setTarget(nsItem);
 		nsItem.setAction(OS.sel_sendSelection);
+
+		// Sync native item type to Item's style.
+		int type = SWT.PUSH;
+		if (nsItem.isSeparatorItem()) type = SWT.SEPARATOR;
+		if (nsItem.submenu() != null) type = SWT.CASCADE;
+		item.style |= type;
+		
+		// Sync native item text to Item's text.
+		item.text = nsItem.title().getString();
+		
+		// Sync native key equivalent to MenuItem's accelerator.
+		// The system menu on OS X only uses command and option, so it's
+		// safe to just check for those two key masks.
+		int /*long*/ keyMask = nsItem.keyEquivalentModifierMask();
+		NSString keyEquivString = nsItem.keyEquivalent();
+		int /*long*/ keyEquiv = 0;
+		if (keyEquivString != null) {
+			keyEquiv = keyEquivString.characterAtIndex(0);
+			if ((keyMask & OS.NSCommandKeyMask) != 0) keyEquiv |= SWT.COMMAND;
+			if ((keyMask & OS.NSAlternateKeyMask) != 0) keyEquiv |= SWT.ALT;
+			item.accelerator = (int) keyEquiv;
+		}
+		add = false;
 	}
-	item.nsItem = nsItem;
 	item.createJNIRef();
 	item.register();
-	nsMenu.insertItem(nsItem, index);
+	if (add) {
+		nsMenu.insertItem(nsItem, index);
+	}
 	if (itemCount == items.length) {
 		MenuItem [] newItems = new MenuItem [items.length + 4];
 		System.arraycopy (items, 0, newItems, 0, items.length);
@@ -325,17 +416,19 @@ void createItem (MenuItem item, int index) {
 	}
 	System.arraycopy (items, index, items, index + 1, itemCount++ - index);
 	items [index] = item;
-	NSMenu emptyMenu = item.createEmptyMenu ();
-	if (emptyMenu != null) {
-		nsItem.setSubmenu (emptyMenu);
-		emptyMenu.release();
-	}
-	if (display.menuBar == this) {
-		NSApplication application = display.application;
-		NSMenu menubar = application.mainMenu();
-		if (menubar != null) {
-			nsItem.setMenu(null);
-			menubar.insertItem(nsItem, index + 1);
+	if (add) {
+		NSMenu emptyMenu = item.createEmptyMenu ();
+		if (emptyMenu != null) {
+			nsItem.setSubmenu (emptyMenu);
+			emptyMenu.release();
+		}
+		if (display.menuBar == this) {
+			NSApplication application = display.application;
+			NSMenu menubar = application.mainMenu();
+			if (menubar != null) {
+				nsItem.setMenu(null);
+				menubar.insertItem(nsItem, index + 1);
+			}
 		}
 	}
 	//TODO - find a way to disable the menu instead of each item
@@ -501,6 +594,24 @@ String getNameText () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Decorations</code>.
  *
  * @return the receiver's parent
@@ -567,6 +678,7 @@ public Menu getParentMenu () {
  */
 public Shell getShell () {
 	checkWidget ();
+	if (this == display.appMenuBar) return null;
 	return parent.getShell ();
 }
 
@@ -590,7 +702,10 @@ public Shell getShell () {
 public boolean getVisible () {
 	checkWidget ();
 	if ((style & SWT.BAR) != 0) {
-		return this == parent.menuShell ().menuBar;
+		if (this == display.appMenuBar) 
+			return display.application.isActive();
+		else
+			return this == parent.menuShell ().menuBar;
 	}
 	if ((style & SWT.POP_UP) != 0) {
 		Menu [] popups = display.popups;
@@ -645,6 +760,7 @@ public int indexOf (MenuItem item) {
  */
 public boolean isEnabled () {
 	checkWidget ();
+	if (this == display.appMenuBar) return getEnabled();
 	Menu parentMenu = getParentMenu ();
 	if (parentMenu == null) {
 		return getEnabled () && parent.isEnabled ();
@@ -790,7 +906,7 @@ void releaseHandle () {
 void releaseParent () {
 	super.releaseParent ();
 	if (cascade != null) cascade.setMenu (null);
-	if ((style & SWT.BAR) != 0 && this == parent.menuBar) {
+	if ((style & SWT.BAR) != 0 && parent != null && this == parent.menuBar) {
 		parent.setMenuBar (null);
 	}
 }
@@ -974,6 +1090,24 @@ public void setLocation (Point location) {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7  
+ */
+public void setOrientation (int orientation) {
+    checkWidget ();
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
@@ -996,6 +1130,7 @@ public void setVisible (boolean visible) {
 		display.addPopup (this);
 	} else {
 		display.removePopup (this);
+		_setVisible(false);
 	}
 }
 	
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java
old mode 100644
new mode 100755
index 4f5fbbc..d12c0bf
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,8 @@ public class MenuItem extends Item {
 	NSMenuItem nsItem;
 	Menu parent, menu;
 	int accelerator;
+	int /*long*/ nsItemAction;
+	id nsItemTarget;
 
 /**
  * Constructs a new instance of this class given its parent
@@ -123,6 +125,13 @@ public MenuItem (Menu parent, int style, int index) {
 	parent.createItem (this, index);
 }
 
+MenuItem (Menu parent, NSMenuItem nsMenuItem) {
+	super(parent, 0);
+	this.parent = parent;
+	this.nsItem = nsMenuItem;	
+	parent.createItem(this, parent.getItemCount ());
+}
+
 /**
  * Adds the listener to the collection of listeners who will
  * be notified when the arm events are generated for the control, by sending
@@ -279,6 +288,23 @@ public boolean getEnabled () {
 }
 
 /**
+ * Gets the identifier associated with the receiver.
+ *
+ * @return the receiver's identifier
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getID () {
+	checkWidget();
+	return (int)nsItem.tag();
+}
+
+/**
  * Returns the receiver's cascade menu if it has one or null
  * if it does not. Only <code>CASCADE</code> menu items can have
  * a pull down menu. The sequence of key strokes, button presses 
@@ -535,7 +561,15 @@ void sendSelection () {
 			}
 		}
 	}
-	sendSelectionEvent (SWT.Selection);
+
+	Event event = new Event ();
+	sendSelectionEvent (SWT.Selection, event, nsItemAction != 0);
+	if (nsItemAction != 0) {
+		if (event.doit) {
+			NSApplication app = NSApplication.sharedApplication();
+			app.sendAction(nsItemAction, nsItemTarget, app);
+		}
+	}
 }
 
 /**
@@ -597,6 +631,25 @@ public void setEnabled (boolean enabled) {
 }
 
 /**
+ * Sets the identifier associated with the receiver to the argument.
+ *
+ * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setID (int id) {
+	checkWidget();
+	if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+	nsItem.setTag(id);
+}
+
+/**
  * Sets the image the receiver will display to the argument.
  * <p>
  * Note: This operation is a hint and is not supported on
@@ -657,7 +710,7 @@ public void setMenu (Menu menu) {
 		if ((menu.style & SWT.DROP_DOWN) == 0) {
 			error (SWT.ERROR_MENU_NOT_DROP_DOWN);
 		}
-		if (menu.parent != parent.parent) {
+		if (parent.parent != null && menu.parent != parent.parent) {
 			error (SWT.ERROR_INVALID_PARENT);
 		}
 	} 
@@ -766,6 +819,7 @@ public void setText (String string) {
 }
 	
 void updateText () {
+	if (isDisposed() || parent.isDisposed()) return;
 	char [] buffer = new char [text.length ()];
 	text.getChars (0, buffer.length, buffer, 0);
 	int i=0, j=0;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java
old mode 100644
new mode 100755
index 39350fb..462e010
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java	
@@ -30,8 +30,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
  * ICON_WARNING and ICON_WORKING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java
old mode 100644
new mode 100755
index 2287e20..92b7d43
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java
old mode 100644
new mode 100755
index e3c1672..b9eb76f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java
old mode 100644
new mode 100755
index 13e4c49..9b163c3
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java	
@@ -31,8 +31,7 @@ import org.eclipse.swt.graphics.*;
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java
old mode 100644
new mode 100755
index 2b287f8..1dcd904
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -360,7 +360,7 @@ public Rectangle getThumbTrackBounds () {
  */
 public boolean getVisible () {
 	checkWidget();
-	return (state & HIDDEN) == 0;
+	return (state & HIDDEN) == 0 && !view.isHidden();
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java
old mode 100644
new mode 100755
index c1357a7..ee91d20
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java
old mode 100644
new mode 100755
index dc967e6..3c03062
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.swt.widgets;
 
+import java.util.*;
+
 import org.eclipse.swt.*;
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.graphics.*;
@@ -105,7 +107,7 @@ import org.eclipse.swt.internal.cocoa.*;
  * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
  * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
  * </p><p>
- * IMPORTANT: This class is not intended to be subclassed.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see Decorations
@@ -113,17 +115,22 @@ import org.eclipse.swt.internal.cocoa.*;
  * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Shell extends Decorations {
 	NSWindow window;
 	SWTWindowDelegate windowDelegate;
+	int /*long*/ hostWindowClass;
+	NSWindow hostWindow;
 	int /*long*/ tooltipOwner, tooltipTag, tooltipUserData;
-	boolean opened, moved, resized, fullScreen, center, deferFlushing;
+	boolean opened, moved, resized, fullScreen, center, deferFlushing, scrolling, isPopup;
 	Control lastActive;
 	Rectangle normalBounds;
 	boolean keyInputHappened;
 	NSRect currentFrame;
 	NSRect fullScreenFrame;
+	ToolBar toolBar;
+	Map windowEmbedCounts;
 	
 	static int DEFAULT_CLIENT_WIDTH = -1;
 	static int DEFAULT_CLIENT_HEIGHT = -1;
@@ -410,6 +417,17 @@ public static Shell cocoa_new (Display display, int /*long*/ handle) {
 	return new Shell (display, null, SWT.NO_TRIM, handle, true);
 }
 
+Control [] _getChildren () {
+	Control [] children = super._getChildren();
+	if (toolBar != null) {
+		Control [] newChildren = new Control [children.length + 1];
+		System.arraycopy (children, 0, newChildren, 1, children.length);
+		newChildren[0] = toolBar;
+		children = newChildren;
+	}
+	return children;
+}
+
 static int checkStyle (Shell parent, int style) {
 	style = Decorations.checkStyle (style);
 	style &= ~SWT.TRANSPARENT;
@@ -472,9 +490,45 @@ public void addShellListener(ShellListener listener) {
 	addListener(SWT.Deiconify,typedListener);
 }
 
+void attachObserversToWindow(NSWindow newWindow) {
+	if (newWindow == null || newWindow.id == 0) return;
+	hostWindow = newWindow;
+	hostWindow.retain();
+	int /*long*/ newHostWindowClass = OS.object_getClass(newWindow.id);
+	int /*long*/ embeddedSubclass = display.createWindowSubclass(newHostWindowClass, "SWTAWTWindow", true);
+	if (newHostWindowClass != embeddedSubclass) {
+		OS.object_setClass(hostWindow.id, embeddedSubclass);
+		hostWindowClass = newHostWindowClass;
+	}
+	
+	if (windowEmbedCounts == null) windowEmbedCounts = new HashMap();
+	Integer embedCount = (Integer) windowEmbedCounts.get(hostWindow);
+	if (embedCount == null) {
+		embedCount = new Integer(0);
+	}
+	embedCount = new Integer(embedCount.intValue() + 1);
+	windowEmbedCounts.put(hostWindow, embedCount);
+	
+	// Register for notifications. An embedded shell has no control over the host window,
+	// so it isn't correct to install a delegate.
+	NSNotificationCenter defaultCenter = NSNotificationCenter.defaultCenter();
+	defaultCenter.addObserver(windowDelegate, OS.sel_windowDidBecomeKey_, OS.NSWindowDidBecomeKeyNotification, hostWindow);
+	defaultCenter.addObserver(windowDelegate, OS.sel_windowDidDeminiaturize_, OS.NSWindowDidDeminiaturizeNotification, hostWindow);
+	defaultCenter.addObserver(windowDelegate, OS.sel_windowDidMiniaturize_, OS.NSWindowDidMiniaturizeNotification, hostWindow);
+	defaultCenter.addObserver(windowDelegate, OS.sel_windowDidMove_, OS.NSWindowDidMoveNotification, hostWindow);
+	defaultCenter.addObserver(windowDelegate, OS.sel_windowDidResize_, OS.NSWindowDidResizeNotification, hostWindow);
+	defaultCenter.addObserver(windowDelegate, OS.sel_windowDidResignKey_, OS.NSWindowDidResignKeyNotification, hostWindow);
+	defaultCenter.addObserver(windowDelegate, OS.sel_windowWillClose_, OS.NSWindowWillCloseNotification, hostWindow);
+}
+
 void becomeKeyWindow (int /*long*/ id, int /*long*/ sel) {
+	Shell modal = getModalShell();
+	if (modal != null && modal.window != null) {
+		modal.window.makeKeyAndOrderFront(null);
+		return;
+	}
 	Display display = this.display;
-	display.keyWindow = window;
+	display.keyWindow = view.window();
 	super.becomeKeyWindow(id, sel);
 	display.checkFocus();
 	display.keyWindow = null;
@@ -490,7 +544,12 @@ void bringToTop (boolean force) {
 }
 
 boolean canBecomeKeyWindow (int /*long*/ id, int /*long*/ sel) {
-	if (window.styleMask () == OS.NSBorderlessWindowMask) return true;
+	if (isPopup) return false;
+	// Only answer if SWT created the window.
+	if (window != null) {
+		int /*long*/ styleMask = window.styleMask();
+		if (styleMask == OS.NSBorderlessWindowMask || (styleMask & (OS.NSNonactivatingPanelMask | OS.NSDocModalWindowMask)) != 0) return true;
+	}
 	return super.canBecomeKeyWindow (id, sel);
 }
 
@@ -520,6 +579,7 @@ void center () {
 
 void clearDeferFlushing (int /*long*/ id, int /*long*/ sel) {
 	deferFlushing = false;
+	scrolling = false;
 	if (window != null) window.flushWindowIfNeeded();
 }
 
@@ -540,13 +600,14 @@ void clearDeferFlushing (int /*long*/ id, int /*long*/ sel) {
  */
 public void close () {
 	checkWidget();
-	closeWidget ();
+	closeWidget (false);
 }
 
-void closeWidget () {
+void closeWidget (boolean force) {
+	if (display.isDisposed()) return;
 	Event event = new Event ();
 	sendEvent (SWT.Close, event);
-	if (event.doit && !isDisposed ()) dispose ();
+	if ((force || event.doit) && !isDisposed ()) dispose ();
 }
 
 public Rectangle computeTrim (int x, int y, int width, int height) {
@@ -570,8 +631,17 @@ public Rectangle computeTrim (int x, int y, int width, int height) {
 void createHandle () {
 	state |= HIDDEN;
 	if (window == null && view == null) {
-		window = (NSWindow) new SWTWindow ().alloc ();
 		int styleMask = OS.NSBorderlessWindowMask;
+		if ((style & (SWT.TOOL | SWT.SHEET)) != 0) {
+			window = (NSWindow) new SWTPanel().alloc();
+			if ((style & SWT.SHEET) != 0) {
+				styleMask |= OS.NSDocModalWindowMask;
+			} else {
+				styleMask |= OS.NSUtilityWindowMask | OS.NSNonactivatingPanelMask;
+			}
+ 		} else {
+ 			window = (NSWindow) new SWTWindow().alloc ();
+ 		}
 		if ((style & SWT.NO_TRIM) == 0) {
 			if ((style & SWT.TITLE) != 0) styleMask |= OS.NSTitledWindowMask;
 			if ((style & SWT.CLOSE) != 0) styleMask |= OS.NSClosableWindowMask;
@@ -587,6 +657,16 @@ void createHandle () {
 		if ((style & (SWT.NO_TRIM | SWT.BORDER | SWT.SHELL_TRIM)) == 0 || (style & (SWT.TOOL | SWT.SHEET)) != 0) {
 			window.setHasShadow (true);
 		}
+		if ((style & SWT.TOOL) != 0) {
+			// Feature in Cocoa: NSPanels that use NSUtilityWindowMask are always promoted to the floating window layer.
+			// Fix is to call setFloatingPanel:NO, which turns off this behavior.
+			((NSPanel)window).setFloatingPanel(false);
+			// By default, panels hide on deactivation. 
+			((NSPanel)window).setHidesOnDeactivate(false);
+			// Normally a panel doesn't become key unless something inside it needs to be first responder.
+			// TOOL shells always become key, so disable that behavior.
+			((NSPanel)window).setBecomesKeyOnlyIfNeeded(false);
+		}
 		if ((style & SWT.NO_TRIM) == 0) {
 			NSSize size = window.minSize();
 			size.width = NSWindow.minFrameWidthWithTitle(NSString.string(), styleMask);
@@ -638,12 +718,22 @@ void createHandle () {
 		style |= SWT.NO_BACKGROUND;
 	}
 	
-	if (window != null) {
+	windowDelegate = (SWTWindowDelegate)new SWTWindowDelegate().alloc().init();
+
+	if (window == null) {
+		NSWindow hostWindow = view.window();
+		attachObserversToWindow(hostWindow);
+	} else {
 		if (parent != null) window.setCollectionBehavior(OS.NSWindowCollectionBehaviorMoveToActiveSpace);
 		window.setAcceptsMouseMovedEvents(true);
-		windowDelegate = (SWTWindowDelegate)new SWTWindowDelegate().alloc().init();
 		window.setDelegate(windowDelegate);
 	}
+
+	if (OS.VERSION < 0x1060) {
+		// Force a WindowRef to be created for this window so we can use
+		// HIWindowFindAtLocation (see Display.findControl())
+		window.windowRef();
+	}
 	
 	NSWindow fieldEditorWindow = window;
 	if (fieldEditorWindow == null) fieldEditorWindow = view.window();
@@ -662,13 +752,16 @@ void deferFlushing () {
 void deregister () {
 	super.deregister ();
 	if (window != null) display.removeWidget (window);
+	if (hostWindow != null)	display.removeWidget (hostWindow);
 	if (windowDelegate != null) display.removeWidget (windowDelegate);
 }
 
 void destroyWidget () {
 	NSWindow window = this.window;
+	if (window != null) window.retain();
 	Display display = this.display;
 	NSView view = topView();
+	if (view != null) view.retain();
 	
 	boolean sheet = (style & (SWT.SHEET)) != 0;
 	releaseHandle ();
@@ -680,6 +773,7 @@ void destroyWidget () {
 		window.close();
 	} else if (view != null) {
 		view.removeFromSuperview();
+		view.release();
 	}
 	
 	// If another shell is not going to become active, clear the menu bar.
@@ -688,6 +782,7 @@ void destroyWidget () {
 		if (!display.isDisposed () && display.getShells ().length == 0) {
 			display.setMenuBar (null);
 		}
+		window.release();
 	}
 }
 
@@ -720,9 +815,12 @@ boolean fixResize () {
 	* Feature in Cocoa.  It is not possible to have a resizable window
 	* without the title bar.  The fix is to resize the content view on
 	* top of the title bar.
+	* 
+	* Never do this when the shell is embedded, because the window belongs to the AWT.
 	*/
+	if (window == null) return false;
 	if ((style & SWT.NO_TRIM) == 0) {
-		if ((style & SWT.RESIZE) != 0 && (style & (SWT.TITLE | SWT.CLOSE | SWT.MIN | SWT.MAX)) == 0) {
+		if ((style & SWT.RESIZE) != 0 && (style & (SWT.SHEET | SWT.TITLE | SWT.CLOSE | SWT.MIN | SWT.MAX)) == 0) {
 			return true;
 		}
 	}
@@ -823,7 +921,7 @@ public Rectangle getClientArea () {
 			rect.height /= scaleFactor;
 		}
 	} else {
-		rect = scrollView != null ? scrollView.frame() : view.frame();
+		rect = topView().frame();
 	}
 	int width = (int)rect.width, height = (int)rect.height;
 	if (scrollView != null) {
@@ -943,7 +1041,8 @@ Shell getModalShell () {
 /**
  * Gets the receiver's modified state.
  *
- * </ul>
+ * @return <code>true</code> if the receiver is marked as modified, or <code>false</code> otherwise
+ * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -987,9 +1086,9 @@ public Point getMinimumSize () {
 
 /** 
  * Returns the region that defines the shape of the shell,
- * or null if the shell has the default shape.
+ * or <code>null</code> if the shell has the default shape.
  *
- * @return the region that defines the shape of the shell (or null)
+ * @return the region that defines the shape of the shell, or <code>null</code>
  *	
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -1060,6 +1159,28 @@ float getThemeAlpha () {
 	return 1;
 }
 
+/**
+ * Returns a ToolBar object representing the tool bar that can be shown in the receiver's
+ * trim. This will return <code>null</code> if the platform does not support tool bars that
+ * are not part of the content area of the shell, or if the Shell's style does not support 
+ * having a tool bar. 
+ * <p>
+ * 
+ * @return a ToolBar object representing the Shell's tool bar, or <ocde>null</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public ToolBar getToolBar() {
+	checkWidget();
+	if (toolBar == null) toolBar = new ToolBar(this, SWT.HORIZONTAL | SWT.SMOOTH, true);
+	return toolBar;
+}
+
 boolean hasBorder () {
 	return false;
 }
@@ -1109,7 +1230,7 @@ public boolean isVisible () {
 boolean makeFirstResponder (int /*long*/ id, int /*long*/ sel, int /*long*/ responder) {
 	Display display = this.display;
 	boolean result = super.makeFirstResponder(id, sel, responder);
-	display.checkFocus();
+	if (!display.isDisposed()) display.checkFocus();
 	return result;
 }
 
@@ -1130,6 +1251,41 @@ void makeKeyAndOrderFront() {
 	window.makeKeyAndOrderFront (null);
 }
 
+Point minimumSize (int wHint, int Hint, boolean changed) {
+	// minimumSize is used by computeSize() to figure out how big the view
+	// (or, in this case, the content view of the Shell) should be.
+	// An NSToolbar does not contribute to the content area, but must be
+	// accounted for. If the shell has a toolbar but no other children
+	// this will return the width of the toolbar and a height of 1
+	Control [] children = _getChildren ();
+	int width = 0, height = 0;
+	for (int i=0; i<children.length; i++) {
+		Rectangle rect = children [i].getBounds ();
+		width = Math.max (width, rect.x + rect.width);
+		if (children[i] != toolBar)	{
+			height = Math.max (height, rect.y + rect.height);
+		} else {
+			height = Math.max (height, 1);
+		}
+	}
+	return new Point (width, height);
+}
+
+void mouseMoved(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	super.mouseMoved(id, sel, theEvent);
+
+	/**
+	 * Bug in AWT. WebViews need to have a mouseMove: handled by the window so it can generate
+	 * DOMMouseMove events and also provide proper feedback to the window. However, the top-level
+	 * view in an AWT window does not have the NSWindow as a next responder.
+	 * 
+	 * Fix is to forward the message to the window if this is an embedded shell (that is, window == null)
+	 */
+	if (id == view.id && window == null) {
+		view.window().mouseMoved(new NSEvent(theEvent));		
+	}
+}
+
 void noResponderFor(int /*long*/ id, int /*long*/ sel, int /*long*/ selector) {
 	/**
 	 * Feature in Cocoa.  If the selector is keyDown and nothing has handled the event
@@ -1194,8 +1350,14 @@ public boolean print (GC gc) {
 }
 
 void register () {
+	/*
+	 * Note that if there are multiple SWT_AWT shells only the last one created
+	 * will be associated with the NSWindow. This is okay, and intentional because 
+	 * all of the NSWindow overrides operate on the entire window. 
+	 */
 	super.register ();
 	if (window != null) display.addWidget (window, this);
+	if (hostWindow != null)	display.addWidget (hostWindow, this);
 	if (windowDelegate != null) display.addWidget (windowDelegate, this);
 }
 
@@ -1212,8 +1374,10 @@ void releaseChildren (boolean destroy) {
 
 void releaseHandle () {
 	if (window != null) window.setDelegate(null);
+	removeObserversFromWindow();
 	if (windowDelegate != null) windowDelegate.release();
 	windowDelegate = null;
+
 	super.releaseHandle ();
 	window = null;
 }
@@ -1224,12 +1388,39 @@ void releaseParent () {
 
 void releaseWidget () {
 	super.releaseWidget ();
+	if (tooltipTag != 0) {
+		view.window().contentView().removeToolTip(tooltipTag);
+		tooltipTag = 0;
+	}
 	display.clearModal (this);
 	updateParent (false);
 	display.updateQuitMenu();
 	lastActive = null;
 }
 
+void removeObserversFromWindow () {
+	NSNotificationCenter.defaultCenter().removeObserver(windowDelegate);		
+
+	if (hostWindow != null) {
+		Integer embedCount = (Integer) windowEmbedCounts.get(hostWindow);
+		if (embedCount == null) {
+			embedCount = new Integer(0);
+		}
+		embedCount = new Integer(embedCount.intValue() - 1);
+		windowEmbedCounts.put(hostWindow, embedCount);
+
+		if (embedCount.intValue() <= 0) {
+			windowEmbedCounts.remove(hostWindow);
+			OS.object_setClass(hostWindow.id, hostWindowClass);
+			display.removeWidget(hostWindow);
+			hostWindow.release();
+			hostWindow = null;
+			hostWindowClass = 0;
+		}
+	}
+}
+
+
 /**
  * Removes the listener from the collection of listeners who will
  * be notified when operations are performed on the receiver.
@@ -1269,9 +1460,10 @@ void reskinChildren (int flags) {
 
 void sendToolTipEvent (boolean enter) {
 	if (!isVisible()) return;
+	NSWindow eventWindow = view.window();
 	if (tooltipTag == 0) {
-		NSView view = window.contentView();
-		tooltipTag = view.addToolTipRect(new NSRect(), window, 0);
+		NSView view = eventWindow.contentView();
+		tooltipTag = view.addToolTipRect(new NSRect(), eventWindow, 0);
 		if (tooltipTag != 0) {
 			NSTrackingArea trackingArea = new NSTrackingArea(tooltipTag);
 			id owner = trackingArea.owner();
@@ -1287,8 +1479,8 @@ void sendToolTipEvent (boolean enter) {
 		}
 	}
 	if (tooltipTag == 0 || tooltipOwner == 0 || tooltipUserData == 0) return;
-	NSPoint pt = window.convertScreenToBase(NSEvent.mouseLocation());
-	NSEvent event = NSEvent.enterExitEventWithType(enter ? OS.NSMouseEntered : OS.NSMouseExited, pt, 0, 0, window.windowNumber(), null, 0, tooltipTag, tooltipUserData);
+	NSPoint pt = eventWindow.convertScreenToBase(NSEvent.mouseLocation());
+	NSEvent event = NSEvent.enterExitEventWithType(enter ? OS.NSMouseEntered : OS.NSMouseExited, pt, 0, 0, eventWindow.windowNumber(), null, 0, tooltipTag, tooltipUserData);
 	OS.objc_msgSend(tooltipOwner, enter ? OS.sel_mouseEntered_ : OS.sel_mouseExited_, event.id);
 }
 
@@ -1450,9 +1642,9 @@ public void setEnabled (boolean enabled) {
 	checkWidget();
 	if (((state & DISABLED) == 0) == enabled) return;
 	super.setEnabled (enabled);
-//	if (enabled && OS.IsWindowActive (shellHandle)) {
-//		if (!restoreFocus ()) traverseGroup (false);
-//	}
+	if (enabled && window.isMainWindow()) {
+		if (!restoreFocus ()) traverseGroup (false);
+	}
 }
 
 /**
@@ -1677,6 +1869,11 @@ public void setRegion (Region region) {
 	}
 }
 
+void setScrolling () {
+	scrolling = true;
+	view.performSelector(OS.sel_clearDeferFlushing, null, 0.0, display.runLoopModes());
+}
+
 public void setText (String string) {
 	checkWidget();
 	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -1778,7 +1975,7 @@ void setWindowVisible (boolean visible, boolean key) {
 			} 
 			window.orderOut (null);
 		}
-
+		if (isDisposed()) return;
 		topView ().setHidden (true);
 		invalidateVisibleRegion();
 		sendEvent (SWT.Hide);
@@ -1803,6 +2000,7 @@ void setZOrder () {
 
 void setZOrder (Control control, boolean above) {
 	if (window == null) return;
+	if (!getVisible ()) return;
 	if (control == null) {
 		if (above) {
 			window.orderFront(null);
@@ -1885,12 +2083,29 @@ int /*long*/ view_stringForToolTip_point_userData (int /*long*/ id, int /*long*/
 	return NSString.stringWithCharacters (chars, length).id;
 }
 
+void viewWillMoveToWindow(int /*long*/ id, int /*long*/ sel, int /*long*/ newWindow) {
+	if (window == null) {
+		int /*long*/ currentWindow = hostWindow != null ? hostWindow.id : 0;
+		if (currentWindow != 0) {
+			removeObserversFromWindow();
+			display.removeWidget(hostWindow);
+		}
+		if (newWindow != 0) {
+			attachObserversToWindow(new NSWindow(newWindow));
+			display.addWidget(hostWindow, this);
+		}
+	}
+}
+
 void windowDidBecomeKey(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
-	super.windowDidBecomeKey(id, sel, notification);
-	Display display = this.display;
-	display.setMenuBar (menuBar);
+	if (window != null) {
+		Display display = this.display;
+		display.setMenuBar (menuBar);
+	}
 	sendEvent (SWT.Activate);
 	if (isDisposed ()) return;
+	if (!restoreFocus () && !traverseGroup (true)) setFocus ();
+	if (isDisposed ()) return;
 	Shell parentShell = this;
 	while (parentShell.parent != null) {
 		parentShell = (Shell) parentShell.parent;
@@ -1946,14 +2161,24 @@ void windowDidResize(int /*long*/ id, int /*long*/ sel, int /*long*/ notificatio
 }
 
 void windowDidResignKey(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
-	super.windowDidResignKey(id, sel, notification);
+	if (display.isDisposed()) return;
 	sendEvent (SWT.Deactivate);
+	if (isDisposed ()) return;
+	setActiveControl (null);
+	if (isDisposed ()) return;
+	saveFocus();
 }
 
 void windowSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
 	NSEvent nsEvent = new NSEvent (event);
 	int type = (int)/*64*/nsEvent.type ();
 	switch (type) {
+		case OS.NSLeftMouseDown:
+		case OS.NSRightMouseDown:
+		case OS.NSOtherMouseDown:
+			display.clickCount = (int)(display.clickCountButton == nsEvent.buttonNumber() ? nsEvent.clickCount() : 1);
+			display.clickCountButton = (int)nsEvent.buttonNumber();
+			break;
 		case OS.NSLeftMouseUp:
 		case OS.NSRightMouseUp:
 		case OS.NSOtherMouseUp:
@@ -1965,6 +2190,8 @@ void windowSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
 				Control trimControl = control;
 				if (trimControl != null && trimControl.isTrim (hitView[0])) trimControl = null;
 				display.checkEnterExit (trimControl, nsEvent, false);
+				// Browser will send MouseMoved in response to a DOM event, so don't send it here.
+				if (trimControl != null && (trimControl.state & WEBKIT_EVENTS_FIX) != 0) trimControl = null;
 				if (trimControl != null) trimControl.sendMouseEvent (nsEvent, type, false);
 			}
 			
@@ -2015,19 +2242,26 @@ void windowSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
 						case 25:
 						case OS.NSPageDownFunctionKey:
 						case OS.NSPageUpFunctionKey:
-							window.firstResponder().keyDown(nsEvent);
+							view.window().firstResponder().keyDown(nsEvent);
 							return;
 					}
 				}
 			}
 			break;
 	}
+	
+	// Window may have been disposed at this point.
+	if (isDisposed()) return;
 	super.windowSendEvent (id, sel, event);
 }
 
 boolean windowShouldClose(int /*long*/ id, int /*long*/ sel, int /*long*/ window) {
-	if (isEnabled()) closeWidget ();
+	if (isEnabled()) closeWidget (false);
 	return false;
 }
 
+void windowWillClose(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	closeWidget(true);
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Slider.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Slider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
old mode 100644
new mode 100755
index 8476b88..2e0a99d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -528,7 +528,7 @@ public int getTextLimit () {
 
 boolean handleIsAccessible(int /*long*/ id) {
 	// All subviews of a Spinner can have their accessible properties overridden.
-	// The top-level NSView is already ignored, so no need to test for that.
+	// The top-level NSView is already ignored, so we don't need to test for that.
 	return true;
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabFolder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabFolder.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
old mode 100644
new mode 100755
index a7ed6d3..267d895
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,8 +75,11 @@ public class Table extends Composite {
 	NSTextFieldCell dataCell;
 	NSButtonCell buttonCell;
 	int columnCount, itemCount, lastIndexOf, sortDirection;
-	boolean ignoreSelect, fixScrollWidth, drawExpansion, didSelect;
+	boolean ignoreSelect, fixScrollWidth, drawExpansion, didSelect, preventSelect;
 	Rectangle imageBounds;
+	
+	/* Used to control drop feedback when FEEDBACK_SCROLL is set/not set */
+	boolean shouldScroll = true;
 
 	static int NEXT_ID;
 
@@ -123,6 +126,32 @@ public Table (Composite parent, int style) {
 	super (parent, checkStyle (style));
 }
 
+int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	int /*long*/ returnValue = 0;
+	NSString attributeName = new NSString(arg0);
+	
+	// If the check column is visible, don't report it back as a column for accessibility purposes.
+	// The check column is meant to appear as a part of the first column.
+	if (attributeName.isEqualToString (OS.NSAccessibilityColumnsAttribute) || attributeName.isEqualToString(OS.NSAccessibilityVisibleColumnsAttribute)) {
+		if ((style & SWT.CHECK) != 0) {
+			int /*long*/ superValue = super.accessibilityAttributeValue(id, sel, arg0);
+			if (superValue != 0) {
+				NSArray columns = new NSArray(superValue);
+				NSMutableArray columnsWithoutCheck = NSMutableArray.arrayWithCapacity(columns.count() - 1);
+				columnsWithoutCheck.addObjectsFromArray(columns);
+				columnsWithoutCheck.removeObjectAtIndex(0);
+				returnValue = columnsWithoutCheck.id;
+			}
+		}
+	}
+	
+	if (returnValue != 0) {
+		return returnValue;
+	} else {
+		return super.accessibilityAttributeValue(id, sel, arg0);
+	}
+}
+
 void _addListener (int eventType, Listener listener) {
 	super._addListener (eventType, listener);
 	clearCachedWidth(items);
@@ -174,7 +203,7 @@ int calculateWidth (TableItem[] items, int index, GC gc) {
 	for (int i=0; i < itemCount; i++) {
 		TableItem item = items [i];
 		if (item != null && item.cached) {
-			width = Math.max (width, item.calculateWidth (index, gc));
+			width = Math.max (width, item.calculateWidth (index, gc, isSelected(index)));
 		}
 	}
 	return width;
@@ -182,7 +211,8 @@ int calculateWidth (TableItem[] items, int index, GC gc) {
 
 NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
 	NSSize size = super.cellSize(id, sel);
-	NSImage image = new NSCell(id).image();
+	NSCell cell = new NSCell(id);
+	NSImage image = cell.image();
 	if (image != null) size.width += imageBounds.width + IMAGE_GAP;
 	if (hooks(SWT.MeasureItem)) {
 		int /*long*/ [] outValue = new int /*long*/ [1];
@@ -198,32 +228,31 @@ NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
 				break;
 			}
 		}
-		sendMeasureItem (item, columnIndex, size);
+		sendMeasureItem (item, columnIndex, size, cell.isHighlighted());
 	}
 	return size;
 }
 
-boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
-	NSPoint clickPoint = new NSPoint();
-	OS.memmove(clickPoint, arg1, NSPoint.sizeof);
-	NSTableView table = (NSTableView)view;
+boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ rowIndexes, NSPoint mouseDownPoint) {
+	if (!super.canDragRowsWithIndexes_atPoint(id, sel, rowIndexes, mouseDownPoint)) return false;
 	
 	// If the current row is not selected and the user is not attempting to modify the selection, select the row first.
-	int /*long*/ row = table.rowAtPoint(clickPoint);
+	NSTableView widget = (NSTableView)view;
+	int /*long*/ row = widget.rowAtPoint(mouseDownPoint);
 	int /*long*/ modifiers = NSApplication.sharedApplication().currentEvent().modifierFlags();
 	
 	boolean drag = (state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect);
 	if (drag) {
-		if (!table.isRowSelected(row) && (modifiers & (OS.NSCommandKeyMask | OS.NSShiftKeyMask | OS.NSAlternateKeyMask)) == 0) {
+		if (!widget.isRowSelected(row) && (modifiers & (OS.NSCommandKeyMask | OS.NSShiftKeyMask | OS.NSAlternateKeyMask)) == 0) {
 			NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
 			set = set.initWithIndex(row);
-			table.selectRowIndexes (set, false);
+			widget.selectRowIndexes (set, false);
 			set.release();
 		}
 	}
 	
 	// The clicked row must be selected to initiate a drag.
-	return (table.isRowSelected(row) && drag);
+	return (widget.isRowSelected(row) && drag);
 }
 
 boolean checkData (TableItem item) {
@@ -409,6 +438,14 @@ void clearCachedWidth (TableItem[] items) {
 	}
 }
 
+int /*long*/ columnAtPoint(int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	if ((style & SWT.CHECK) != 0) {
+		if (point.x <= getCheckColumnWidth() && point.y < headerView.frame().height) return 1;
+	}
+	
+	return super.columnAtPoint(id, sel, point);
+}
+
 public Point computeSize (int wHint, int hHint, boolean changed) {
 	checkWidget ();
 	int width = 0;
@@ -490,7 +527,6 @@ void createHandle () {
 	NSTableView widget = (NSTableView)new SWTTableView().alloc();
 	widget.init();
 	widget.setAllowsMultipleSelection((style & SWT.MULTI) != 0);
-	widget.setAllowsColumnReordering (false);
 	widget.setDataSource(widget);
 	widget.setDelegate(widget);
 	widget.setColumnAutoresizingStyle (OS.NSTableViewNoColumnAutoresizing);
@@ -519,6 +555,7 @@ void createHandle () {
 		buttonCell.init ();
 		checkColumn.setDataCell (buttonCell);
 		buttonCell.setButtonType (OS.NSSwitchButton);
+		buttonCell.setControlSize(OS.NSSmallControlSize);
 		buttonCell.setImagePosition (OS.NSImageOnly);
 		buttonCell.setAllowsMixedState (true);
 		checkColumn.setWidth(getCheckColumnWidth());
@@ -542,9 +579,9 @@ void createHandle () {
 	firstColumn.headerCell ().setTitle (str);
 	widget.addTableColumn (firstColumn);
 	dataCell = (NSTextFieldCell)new SWTImageTextCell ().alloc ().init ();
-	dataCell.setLineBreakMode(OS.NSLineBreakByClipping);
+	dataCell.setLineBreakMode(OS.NSLineBreakByTruncatingTail);
 	firstColumn.setDataCell (dataCell);
-
+	widget.setHighlightedTableColumn(null);
 	scrollView = scrollWidget;
 	view = widget;
 }
@@ -634,6 +671,22 @@ void deregister () {
 	if (buttonCell != null) display.removeWidget (buttonCell);
 }
 
+void deselectAll(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	if (preventSelect && !ignoreSelect) return;
+	if ((style & SWT.SINGLE) != 0 && !ignoreSelect) {
+		if ( ((NSTableView)view).selectedRow() != -1) return;
+	}
+	super.deselectAll (id, sel, sender);
+}
+
+void deselectRow (int /*long*/ id, int /*long*/ sel, int /*long*/ index) {
+	if (preventSelect && !ignoreSelect) return;
+	if ((style & SWT.SINGLE) != 0 && !ignoreSelect) {
+		if ( ((NSTableView)view).selectedRow() == index) return;
+	}
+	super.deselectRow (id, sel, index);
+}
+
 /**
  * Deselects the item at the given zero-relative index in the receiver.
  * If the item at the index was already deselected, it remains
@@ -920,7 +973,7 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 	NSGraphicsContext context = NSGraphicsContext.currentContext ();
 
 	if (hooksMeasure) {
-		sendMeasureItem(item, columnIndex, contentSize);
+		sendMeasureItem(item, columnIndex, contentSize, isSelected);
 	}
 	
 	Color userForeground = null;
@@ -934,13 +987,15 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 		data.paintRect = cellRect;
 		GC gc = GC.cocoa_new (this, data);
 		gc.setFont (item.getFont (columnIndex));
-		if (isSelected) {
-			gc.setForeground (selectionForeground);
+		Color fg;
+		if (isSelected && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus)) {
+			fg = selectionForeground;
 			gc.setBackground (selectionBackground);
 		} else {
-			gc.setForeground (item.getForeground (columnIndex));
+			fg = item.getForeground (columnIndex);
 			gc.setBackground (item.getBackground (columnIndex));
 		}
+		gc.setForeground (fg);
 		if (!drawExpansion) {
 			gc.setClipping ((int)(cellRect.x - offsetX), (int)(cellRect.y - offsetY), (int)cellRect.width, (int)cellRect.height);
 		}
@@ -950,7 +1005,7 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 		event.index = columnIndex;
 		event.detail = SWT.FOREGROUND;
 		if (drawBackground) event.detail |= SWT.BACKGROUND;
-		if (isSelected) event.detail |= SWT.SELECTED;
+		if (isSelected && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus)) event.detail |= SWT.SELECTED;
 		event.x = (int)cellRect.x;
 		event.y = (int)cellRect.y;
 		event.width = (int)cellRect.width;
@@ -967,17 +1022,20 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 			userForeground = Color.cocoa_new(display, gc.getForeground().handle);
 		}
 		gc.dispose ();
-		
 		context.restoreGraphicsState();
 
 		if (isDisposed ()) return;
 		if (item.isDisposed ()) return;
 
-		if (drawSelection && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus)) {
+		if (drawSelection) {
 			cellRect.height -= spacing.height;
 			callSuper (widget.id, OS.sel_highlightSelectionInClipRect_, cellRect);
 			cellRect.height += spacing.height;
 		}
+	} else {
+		if (isSelected && (style & SWT.HIDE_SELECTION) != 0 && !hasFocus) {
+			userForeground = item.getForeground (columnIndex);
+		}
 	}
 
 	if (drawBackground && !drawSelection) {
@@ -996,17 +1054,13 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 			destRect.y = rect.y + (float)Math.ceil((rect.height - imageBounds.height) / 2);
 			destRect.width = imageBounds.width;
 			destRect.height = imageBounds.height;
-			NSRect srcRect = new NSRect();
-			NSSize size = image.size();
-			srcRect.width = size.width;
-			srcRect.height = size.height;
 			context.saveGraphicsState();
 			NSBezierPath.bezierPathWithRect(rect).addClip();
 			NSAffineTransform transform = NSAffineTransform.transform();
 			transform.scaleXBy(1, -1);
 			transform.translateXBy(0, -(destRect.height + 2 * destRect.y));
 			transform.concat();
-			image.drawInRect(destRect, srcRect, OS.NSCompositeSourceOver, 1);
+			image.drawInRect(destRect, new NSRect(), OS.NSCompositeSourceOver, 1);
 			context.restoreGraphicsState();
 			int imageWidth = imageBounds.width + IMAGE_GAP;
 			rect.x += imageWidth;
@@ -1721,6 +1775,24 @@ public int getTopIndex () {
 	return rowAtPoint;	
 }
 
+NSRect headerRectOfColumn (int /*long*/ id, int /*long*/ sel, int /*long*/ column) {
+	if ((style & SWT.CHECK) == 0) return callSuperRect(id, sel, column);
+	
+	if (column == 0) {
+		NSRect returnValue = callSuperRect(id, sel, column);
+		returnValue.width = 0;
+		return returnValue;
+	}
+	if (column == 1) {
+		NSRect returnValue = callSuperRect(id, sel, column);
+		// Save a call to [NSTableView intercellSpacing] by using our constant.
+		returnValue.width += (checkColumn.width() + CELL_GAP);
+		returnValue.x -= (checkColumn.width() + CELL_GAP);
+		return returnValue;
+	}
+	return callSuperRect(id, sel, column);
+}
+
 void highlightSelectionInClipRect(int /*long*/ id, int /*long*/ sel, int /*long*/ rect) {
 	if (hooks (SWT.EraseItem)) return;
 	if ((style & SWT.HIDE_SELECTION) != 0 && !hasFocus()) return;
@@ -1844,7 +1916,7 @@ boolean isTransparent() {
 }
 
 void keyDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	ignoreSelect = false;
+	ignoreSelect = preventSelect = false;
 	super.keyDown(id, sel, theEvent);
 }
 
@@ -1883,22 +1955,7 @@ int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEve
 }
 
 void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	if (headerView != null && id == headerView.id) {
-		NSTableView widget = (NSTableView)view;
-		widget.setAllowsColumnReordering(false);
-		NSPoint pt = headerView.convertPoint_fromView_(new NSEvent(theEvent).locationInWindow(), null);
-		int /*long*/ nsIndex = headerView.columnAtPoint(pt);
-		if (nsIndex != -1) {
-			id nsColumn = widget.tableColumns().objectAtIndex(nsIndex);
-			for (int i = 0; i < columnCount; i++) {
-				if (columns[i].nsColumn.id == nsColumn.id) {
-					widget.setAllowsColumnReordering(columns[i].movable);
-					break;
-				}
-			}
-		}
-	}
-	else if (id == view.id) {
+	if (id == view.id) {
 		// Bug/feature in Cocoa:  If the table has a context menu we just set it visible instead of returning
 		// it from menuForEvent:.  This has the side effect, however, of sending control-click to the NSTableView,
 		// which is interpreted as a single click that clears the selection.  Fix is to ignore control-click if the 
@@ -1910,12 +1967,23 @@ void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 }
 
 void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	ignoreSelect = false;
-	NSTableView widget = (NSTableView)view;
+	ignoreSelect = preventSelect = false;
+	boolean check = false;
 	NSEvent nsEvent = new NSEvent(theEvent);
+	NSTableView widget = (NSTableView)view;
 	NSPoint pt = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
 	int row = (int)/*64*/widget.rowAtPoint(pt);
-	if (row != -1 && (nsEvent.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == 0) {
+	if (row != -1 && (style & SWT.CHECK) != 0) {
+		int column = (int)/*64*/widget.columnAtPoint(pt);
+		NSCell cell = widget.preparedCellAtColumn(column, row);
+		if (cell != null && cell.isKindOfClass(OS.class_NSButtonCell) && cell.isEnabled()) {
+			NSRect checkRect = cell.imageRectForBounds(widget.frameOfCellAtColumn(column, row));
+			if (OS.NSPointInRect(pt, checkRect)) {
+				check = preventSelect = true;
+		    }
+		}
+	}
+	if (!check && row != -1 && (nsEvent.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == 0 && nsEvent.clickCount() == 1) {
 		if (widget.isRowSelected(row)) {
 			if (0 <= row && row < itemCount) {
 				Event event = new Event ();
@@ -1932,7 +2000,6 @@ void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 			}
 		}
 	}
-	display.trackedButtonRow = -1;
 	didSelect = false;
 	super.mouseDownSuper(id, sel, theEvent);
 	didSelect = false;
@@ -2201,6 +2268,21 @@ void reskinChildren (int flags) {
 	super.reskinChildren (flags);
 }
 
+void scrollClipViewToPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ clipView, NSPoint point) {
+	if (shouldScroll) {
+		super.scrollClipViewToPoint(id, sel, clipView, point);
+		if ((style & SWT.CHECK) != 0 && columnCount > 0 && ((NSTableView)view).headerView() != null) {
+			if (point.x <= getCheckColumnWidth()) {
+				/* 
+				 * Header of first column is extended as header of the checkbox column.
+				 * So, redraw header of first column when check column is scrolled to be visible.
+				 */
+				headerView.setNeedsDisplayInRect(headerView.headerRectOfColumn(1));
+			}
+		}
+	}
+}
+
 /**
  * Selects the item at the given zero-relative index in the receiver. 
  * If the item at the index was already selected, it remains
@@ -2450,6 +2532,7 @@ void setFont (NSFont font) {
 public void setHeaderVisible (boolean show) {
 	checkWidget ();
 	((NSTableView)view).setHeaderView (show ? headerView : null);
+	scrollView.tile();
 }
 
 void setImage (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
@@ -2574,7 +2657,7 @@ boolean setScrollWidth (TableItem item) {
 		return false;
 	}
 	GC gc = new GC (this);
-	int newWidth = item.calculateWidth (0, gc);
+	int newWidth = item.calculateWidth (0, gc, isSelected(indexOf(item)));
 	gc.dispose ();
 	int oldWidth = (int)firstColumn.width ();
 	if (oldWidth < newWidth) {
@@ -2598,7 +2681,7 @@ boolean setScrollWidth (TableItem [] items, boolean set) {
 	for (int i = 0; i < items.length; i++) {
 		TableItem item = items [i];
 		if (item != null) {
-			newWidth = Math.max (newWidth, item.calculateWidth (0, gc));
+			newWidth = Math.max (newWidth, item.calculateWidth (0, gc, isSelected(indexOf(item))));
 		}
 	}
 	gc.dispose ();
@@ -2773,10 +2856,8 @@ public void setSelection (TableItem [] items) {
 	}
 }
 
-void setSmallSize () {
-	if (checkColumn == null) return;
-	checkColumn.dataCell ().setControlSize (OS.NSSmallControlSize);
-	checkColumn.setWidth (getCheckColumnWidth ());
+void setShouldScrollClipView(int /*long*/ id, int /*long*/ sel, boolean shouldScroll) {
+	this.shouldScroll = shouldScroll;
 }
 
 /**
@@ -2951,9 +3032,19 @@ public void showSelection () {
 	}
 }
 
+void selectRowIndexes_byExtendingSelection (int /*long*/ id, int /*long*/ sel, int /*long*/ indexes, boolean extend) {
+	if (preventSelect && !ignoreSelect) return;
+	if ((style & SWT.SINGLE) != 0 && !ignoreSelect) {
+		NSIndexSet set = new NSIndexSet(indexes);
+		if (set.count() == 0) return;
+	}
+	super.selectRowIndexes_byExtendingSelection (id, sel, indexes, extend);
+}
+
 void sendDoubleSelection() {
 	NSTableView tableView = (NSTableView)view;
 	int rowIndex = (int)/*64*/tableView.clickedRow (); 
+	if (rowIndex == -1) rowIndex = (int)/*64*/tableView.selectedRow(); 
 	if (rowIndex != -1) {
 		if ((style & SWT.CHECK) != 0) {
 			NSArray columns = tableView.tableColumns ();
@@ -2977,14 +3068,14 @@ boolean sendKeyEvent (NSEvent nsEvent, int type) {
 	switch (keyCode) {
 		case 76: /* KP Enter */
 		case 36: { /* Return */
-			sendSelectionEvent (SWT.DefaultSelection);
+			sendDoubleSelection();
 			break;
 		}
 	}
 	return result;
 }
 
-void sendMeasureItem (TableItem item, int columnIndex, NSSize size) {
+void sendMeasureItem (TableItem item, int columnIndex, NSSize size, boolean isSelected) {
 	NSTableView widget = (NSTableView)this.view;
 	int contentWidth = (int)Math.ceil (size.width);
 	NSSize spacing = widget.intercellSpacing();
@@ -2999,6 +3090,7 @@ void sendMeasureItem (TableItem item, int columnIndex, NSSize size) {
 	event.index = columnIndex;
 	event.width = contentWidth;
 	event.height = itemHeight;
+	if (isSelected && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus())) event.detail |= SWT.SELECTED;
 	sendEvent (SWT.MeasureItem, event);
 	gc.dispose ();
 	if (!isDisposed () && !item.isDisposed ()) {
@@ -3032,14 +3124,6 @@ void tableViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ aNo
 	int oldIndex = new NSNumber (nsOldIndex).intValue ();
 	int newIndex = new NSNumber (nsNewIndex).intValue ();
 	NSTableView tableView = (NSTableView)view;
-	if (checkColumn != null && newIndex == 0) {
-		newIndex = 1;
-		NSNotificationCenter defaultCenter = NSNotificationCenter.defaultCenter();
-		defaultCenter.removeObserver(view, OS.NSTableViewColumnDidMoveNotification, null);
-		tableView.moveColumn(0, newIndex);
-		defaultCenter.addObserver(view,  OS.sel_tableViewColumnDidMove_, OS.NSTableViewColumnDidMoveNotification, null);
-		if (oldIndex == newIndex) return;
-	}
 	int startIndex = Math.min (oldIndex, newIndex);
 	int endIndex = Math.max (oldIndex, newIndex);
 	NSArray nsColumns = tableView.tableColumns ();
@@ -3051,6 +3135,7 @@ void tableViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ aNo
 			if (isDisposed ()) return;
 		}
 	}
+	headerView.setNeedsDisplay(true);
 }
 
 void tableViewColumnDidResize (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
@@ -3134,62 +3219,30 @@ int /*long*/ tableView_objectValueForTableColumn_row (int /*long*/ id, int /*lon
 	return item.createString (0).id;
 }
 
-boolean tableView_shouldSelectRow(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ rowIndex) {
-	boolean result = true;
-
-	if ((style & SWT.SINGLE) != 0) {
-		/*
-		 * Feature in Cocoa.  Calling setAllowsEmptySelection will automatically select the first row of the list. 
-		 * And, single-selection NSTable/OutlineViews allow the user to de-select the selected item via command-click.
-		 * This is normal platform behavior, but for compatibility with other platforms, if the SINGLE style is in use,
-		 * force a selection by seeing if the proposed selection set is empty, and if so, put back the currently selected row.  
-		 */
-		NSTableView table = new NSTableView(aTableView);			
-		NSIndexSet indexes = table.selectedRowIndexes();
-		if (indexes.count() != 1 && table.selectedRow() != -1) {
-			return false;
+boolean tableView_shouldReorderColumn_toColumn(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ currentColIndex, int /*long*/ newColIndex) {
+	// Check column should never move and no column can be dragged to the left of it, if present.
+	if ((style & SWT.CHECK) != 0) {
+		if (currentColIndex == 0) return false;
+		if (newColIndex == 0) return false;
+	}
+	
+	NSTableView widget = new NSTableView(aTableView);
+	id nsColumn = widget.tableColumns().objectAtIndex(currentColIndex);
+	for (int i = 0; i < columnCount; i++) {
+		if (columns[i].nsColumn.id == nsColumn.id) {
+			return columns[i].movable;
 		}
 	}
+	
+	return true;
+}
 
-	// If a checkbox is being tracked don't select the row.
-	if (display.trackedButtonRow != -1) return false;
-	NSTableView tableView = (NSTableView)view;
-    int /*long*/ clickedCol = tableView.clickedColumn();
-    int /*long*/ clickedRow = tableView.clickedRow();
-    if (clickedRow >= 0 && clickedCol >= 0) {
-        NSCell cell = tableView.preparedCellAtColumn(clickedCol, clickedRow);
-        if (cell.isKindOfClass(OS.class_NSButtonCell) && cell.isEnabled()) {
-            NSRect cellFrame = tableView.frameOfCellAtColumn(clickedCol, clickedRow);
-            NSRect imageFrame = cell.imageRectForBounds(cellFrame);
-            NSPoint hitPoint = tableView.convertPoint_fromView_(NSApplication.sharedApplication().currentEvent().locationInWindow(), null);
-            result = ! OS.NSPointInRect(hitPoint, imageFrame) || didSelect;
-        }            
-    }
-    return result;
-}
-
-boolean tableView_shouldTrackCell_forTableColumn_row(int /*long*/ id, int /*long*/ sel,
-		int /*long*/ table, int /*long*/ cell, /*long*/ int /*long*/ tableColumn, int /*long*/ rowIndex) {
-	NSCell theCell = new NSCell(cell);
-	NSTableView tableView = (NSTableView)view;
-	if (theCell.isKindOfClass(OS.class_NSButtonCell)) {
-		// Allow tracking of the checkbox area of the button, not the text itself.
-		int columnIndex = 0;
-		for (int i=0; i<columnCount; i++) {
-			if (columns [i].nsColumn.id == tableColumn) {
-				columnIndex = i;
-				break;
-			}
-		}
-		NSRect cellFrame = tableView.frameOfCellAtColumn(columnIndex, rowIndex);
-		NSRect imageFrame = theCell.imageRectForBounds(cellFrame);
-		NSPoint hitPoint = tableView.convertPoint_fromView_(NSApplication.sharedApplication().currentEvent().locationInWindow(), null);
-		boolean shouldTrack = OS.NSPointInRect(hitPoint, imageFrame) && (display.trackedButtonRow == -1 || display.trackedButtonRow == rowIndex) && !didSelect;
-		if (OS.NSPointInRect(hitPoint, imageFrame) && display.trackedButtonRow == -1 && !didSelect) display.trackedButtonRow = rowIndex;
-		return shouldTrack;
-	} else {
-		return tableView.isRowSelected(rowIndex);
+boolean tableView_shouldTrackCell_forTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ table, int /*long*/ cell, /*long*/ int /*long*/ tableColumn, int /*long*/ rowIndex) {
+	if ((style & SWT.CHECK) != 0) {
+		if (new NSCell(cell).isKindOfClass(OS.class_NSButtonCell)) return true;
 	}
+	NSTableView widget = (NSTableView)view;
+	return widget.isRowSelected(rowIndex);
 }
 
 void tableView_setObjectValue_forTableColumn_row (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ anObject, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
@@ -3205,10 +3258,6 @@ void tableView_setObjectValue_forTableColumn_row (int /*long*/ id, int /*long*/
 	}
 }
 
-boolean tableView_shouldEditTableColumn_row (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
-	return false;
-}
-
 void tableView_willDisplayCell_forTableColumn_row (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ rowIndex) {
 	if (checkColumn != null && tableColumn == checkColumn.id) return;
 	TableItem item = items [(int)/*64*/rowIndex];
@@ -3294,13 +3343,14 @@ void updateCursorRects (boolean enabled) {
 	updateCursorRects (enabled, headerView);
 }
 
-void updateRowCount() {
-	NSTableView table = (NSTableView)view;
+void updateRowCount() {	
+	NSTableView widget = (NSTableView)view;
 	setRedraw(false);
 	ignoreSelect = true;
-	table.noteNumberOfRowsChanged();
+	widget.noteNumberOfRowsChanged ();
 	ignoreSelect = false;
-	table.tile();
+	widget.tile();
 	setRedraw(true);
 }
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableColumn.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java
old mode 100644
new mode 100755
index fd993ba..8e8ffcd
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -124,7 +124,7 @@ static Table checkNull (Table control) {
 	return control;
 }
 
-int calculateWidth (int index, GC gc) {
+int calculateWidth (int index, GC gc, boolean rowSelected) {
 	if (index == 0 && width != -1) return width;
 	Font font = null;
 	if (cellFont != null) font = cellFont[index];
@@ -171,6 +171,7 @@ int calculateWidth (int index, GC gc) {
 		int height = (int)widget.rowHeight ();
 		event.width = width;
 		event.height = height;
+		if (rowSelected && ((parent.style & SWT.HIDE_SELECTION) == 0 || parent.hasFocus())) event.detail |= SWT.SELECTED;
 		parent.sendEvent (SWT.MeasureItem, event);
 		if (height < event.height) {
 			widget.setRowHeight (event.height);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TaskItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TaskItem.java
index 921bb72..a6db36e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TaskItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TaskItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java
old mode 100644
new mode 100755
index 75d8045..3ea2fb4
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,7 +57,8 @@ public class Text extends Scrollable {
 	int textLimit = LIMIT, tabs = 8;
 	char echoCharacter;
 	boolean doubleClick, receivingFocus;
-	String hiddenText, message;
+	char [] hiddenText;
+	String message;
 	NSRange selectionRange;
 	id targetSearch, targetCancel;
 	int /*long*/ actionSearch, actionCancel;
@@ -274,11 +275,16 @@ public void append (String string) {
 		string = verifyText (string, charCount, charCount, null);
 		if (string == null) return;
 	}
-	NSString str = NSString.stringWith (string);
 	if ((style & SWT.SINGLE) != 0) {
 		setSelection (getCharCount ());
 		insertEditText (string);
 	} else {
+		NSString str;
+		if (textLimit != LIMIT) {
+			str = getInsertString (string, null);
+		} else {
+			str = NSString.stringWith (string);
+		}
 		NSTextView widget = (NSTextView) view;
 		NSTextStorage storage = widget.textStorage ();
 		NSRange range = new NSRange();
@@ -343,7 +349,8 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 	if ((style & SWT.SINGLE) != 0) {
 		NSCell cell = ((NSTextField) view).cell ();
 		NSSize size = cell.cellSize ();
-		if (cell.title ().length () > 0) {
+		NSString str = ((NSTextField) view).stringValue();
+		if (str.length () > 0) {
 			width = (int)Math.ceil (size.width);
 		}
 		height = (int)Math.ceil (size.height);
@@ -369,7 +376,7 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		NSLayoutManager layoutManager = (NSLayoutManager)new NSLayoutManager ().alloc ().init ();
 		NSTextContainer textContainer = (NSTextContainer)new NSTextContainer ().alloc ();
 		NSSize size = new NSSize ();
-		size.width = size.height = Float.MAX_VALUE;
+		size.width = size.height = OS.MAX_TEXT_CONTAINER_SIZE;
 		if ((style & SWT.WRAP) != 0) {
 			if (wHint != SWT.DEFAULT) size.width = wHint;
 			if (hHint != SWT.DEFAULT) size.height = hHint;
@@ -552,7 +559,7 @@ void createWidget () {
 public void cut () {
 	checkWidget ();
 	if ((style & SWT.READ_ONLY) != 0) return;
-	if ((style & SWT.PASSWORD) != 0 || echoCharacter != '\0') return;	
+	if ((style & SWT.PASSWORD) != 0 || echoCharacter != '\0') return;
 	boolean cut = true;
 	char [] oldText = null;
 	Point oldSelection = getSelection ();
@@ -647,6 +654,14 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 	return false;
 }
 
+void enableWidget(boolean enabled) {
+	super.enableWidget(enabled);
+	
+	if ((style & SWT.MULTI) != 0) {
+		setForeground(this.foreground);
+	}
+}
+
 /**
  * Returns the line number of the caret.
  * <p>
@@ -738,7 +753,7 @@ public int getCaretPosition () {
 public int getCharCount () {
 	checkWidget ();
 	if ((style & SWT.SINGLE) != 0) {
-		return (int)/*64*/new NSCell (((NSControl) view).cell ()).title ().length ();
+		return (int)((NSControl) view).stringValue().length ();
 	} else {
 		return (int)/*64*/((NSTextView) view).textStorage ().length ();
 	}
@@ -802,29 +817,30 @@ public boolean getEditable () {
 }
 
 char [] getEditText () {
+	if (hiddenText != null) {
+		char [] text = new char [hiddenText.length];
+		System.arraycopy (hiddenText, 0, text, 0, text.length);
+		return text;
+	}
 	NSString str = null;
 	if ((style & SWT.SINGLE) != 0) {
-		str = new NSTextFieldCell (((NSTextField) view).cell ()).title ();
+		str = ((NSTextField) view).stringValue();
 	} else {
 		str = ((NSTextView)view).textStorage().string();
 	}
 
 	int length = (int)/*64*/str.length ();
 	char [] buffer = new char [length];
-	if (hiddenText != null) {
-		hiddenText.getChars (0, length, buffer, 0);
-	} else {
-		NSRange range = new NSRange ();
-		range.length = length;
-		str.getCharacters (buffer, range);
-	}
+	NSRange range = new NSRange ();
+	range.length = length;
+	str.getCharacters (buffer, range);
 	return buffer;
 }
 
 char [] getEditText (int start, int end) {
 	NSString str = null;
 	if ((style & SWT.SINGLE) != 0) {
-		str = new NSTextFieldCell (((NSTextField) view).cell ()).title ();
+		str = ((NSTextField) view).stringValue();
 	} else {
 		str = ((NSTextView)view).textStorage().string();
 	}
@@ -838,13 +854,28 @@ char [] getEditText (int start, int end) {
 	range.length = Math.max (0, end - start + 1);
 	char [] buffer = new char [(int)/*64*/range.length];
 	if (hiddenText != null) {
-		hiddenText.getChars ((int)/*64*/range.location, (int)/*64*/(range.location + range.length), buffer, 0);
+		System.arraycopy (hiddenText, (int)/*64*/range.location, buffer, 0, buffer.length);
 	} else {
 		str.getCharacters (buffer, range);
 	}
 	return buffer;
 }
 
+NSString getInsertString (String string, NSRange range) {
+	NSString str;
+	int charCount = getCharCount ();
+	int length = string.length ();
+	int selectionLength = range != null ? (int)/*64*/(range.length) : 0;
+	if (charCount - selectionLength + length > textLimit) {
+		length = textLimit - charCount + selectionLength;
+		length = Math.max (0, length);
+	}
+	char [] buffer = new char [length];
+	string.getChars (0, buffer.length, buffer, 0);
+	str = NSString.stringWithCharacters (buffer, buffer.length);
+	return str;
+}
+
 /**
  * Returns the number of lines.
  *
@@ -986,7 +1017,7 @@ public Point getSelection () {
 	checkWidget ();
 	if ((style & SWT.SINGLE) != 0) {
 		if (selectionRange == null) {
-			NSString str = new NSTextFieldCell (((NSTextField) view).cell ()).title ();
+			NSString str = ((NSTextField) view).stringValue();
 			return new Point((int)/*64*/str.length (), (int)/*64*/str.length ());
 		}
 		return new Point ((int)/*64*/selectionRange.location, (int)/*64*/(selectionRange.location + selectionRange.length));
@@ -1126,6 +1157,39 @@ public String getText (int start, int end) {
 }
 
 /**
+ * Returns the widget's text as a character array.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * a zero-length array if this has never been set.
+ * </p>
+ *
+ * @return a character array that contains the widget's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setTextChars(char[])
+ *
+ * @since 3.7
+ */
+public char[] getTextChars () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		return getEditText ();
+	} else {
+		NSString str = ((NSTextView)view).textStorage ().string ();
+		int length = (int)/*64*/str.length ();
+		char [] buffer = new char [length];
+		NSRange range = new NSRange ();
+		range.length = length;
+		str.getCharacters (buffer, range);
+		return buffer;
+	}
+}
+
+/**
  * Returns the maximum number of characters that the receiver is capable of holding. 
  * <p>
  * If this has not been changed by <code>setTextLimit()</code>,
@@ -1219,9 +1283,14 @@ public void insert (String string) {
 	if ((style & SWT.SINGLE) != 0) {
 		insertEditText (string);
 	} else {
-		NSString str = NSString.stringWith (string);
 		NSTextView widget = (NSTextView) view;
 		NSRange range = widget.selectedRange ();
+		NSString str;
+		if (textLimit != LIMIT) {
+			str = getInsertString (string, range);
+		} else {
+			str = NSString.stringWith (string);
+		}
 		widget.textStorage ().replaceCharactersInRange (range, str);
 	}
 	if (string.length () != 0) sendEvent (SWT.Modify);
@@ -1305,7 +1374,14 @@ public void paste () {
 					insertEditText (newText);
 				} else {
 					NSTextView textView = (NSTextView) view;
-					textView.replaceCharactersInRange (textView.selectedRange (), NSString.stringWith (newText));
+					NSRange range = textView.selectedRange ();
+					NSString str;
+					if (textLimit != LIMIT) {
+						str = getInsertString (newText, range);
+					} else {
+						str = NSString.stringWith (newText);
+					}
+					textView.replaceCharactersInRange (range, str);
 				}
 				paste = false;
 			}
@@ -1317,8 +1393,16 @@ public void paste () {
 			if (oldText == null) return;
 			insertEditText (oldText);
 		} else {
-			//TODO check text limit
-			((NSTextView) view).paste (null);
+			if (textLimit != LIMIT) {
+				if (oldText == null) oldText = getClipboardText ();
+				if (oldText == null) return;
+				NSTextView textView = (NSTextView) view;
+				NSRange range = textView.selectedRange ();
+				NSString str = getInsertString (oldText, range);
+				textView.replaceCharactersInRange (range, str);
+			} else {
+				((NSTextView) view).paste (null);
+			}
 		}
 	}
 	sendEvent (SWT.Modify);
@@ -1335,7 +1419,8 @@ void register() {
 void releaseWidget () {
 	super.releaseWidget ();
 	if ((style & SWT.SINGLE) != 0) ((NSControl)view).abortEditing();
-	hiddenText = message = null;
+	hiddenText = null;
+	message = null;
 	selectionRange = null;
 }
 
@@ -1549,7 +1634,7 @@ public void setEchoChar (char echo) {
 	if ((style & SWT.MULTI) != 0) return;
 	if ((style & SWT.PASSWORD) == 0) {
 		Point selection = getSelection ();
-		String text = getText ();
+		char [] text = getTextChars ();
 		echoCharacter = echo;
 		setEditText (text);
 		setSelection (selection);
@@ -1582,18 +1667,32 @@ public void setEditable (boolean editable) {
 }
 
 void setEditText (String string) {
+	char [] text = new char [string.length()];
+	string.getChars(0, text.length, text, 0);
+	setEditText (text);
+}
+
+void setEditText (char[] text) {
 	char [] buffer;
+	int length = Math.min(text.length, textLimit);
 	if ((style & SWT.PASSWORD) == 0 && echoCharacter != '\0') {
-		hiddenText = string;
-		buffer = new char [Math.min(hiddenText.length (), textLimit)];
-		for (int i = 0; i < buffer.length; i++) buffer [i] = echoCharacter;
+		hiddenText = new char [length];
+		buffer = new char [length];
+		for (int i = 0; i < length; i++) {
+			hiddenText [i] = text [i];
+			buffer [i] = echoCharacter;
+		}
 	} else {
 		hiddenText = null;
-		buffer = new char [Math.min(string.length (), textLimit)];
-		string.getChars (0, buffer.length, buffer, 0);
+		buffer = text;
+	}
+	NSTextField widget = (NSTextField)view;
+	NSString nsstring = NSString.stringWithCharacters (buffer, length);
+	widget.setStringValue(nsstring);
+	NSText fieldEditor = widget.currentEditor();
+	if (fieldEditor != null) {
+		fieldEditor.setString(nsstring);
 	}
-	NSString nsstring = NSString.stringWithCharacters (buffer, buffer.length);
-	new NSCell (((NSTextField) view).cell ()).setTitle (nsstring);
 	selectionRange = null;
 }
 
@@ -1629,8 +1728,11 @@ void setForeground (float /*double*/ [] color) {
 	NSColor nsColor;
 	if (color == null) {
 		nsColor = NSColor.textColor ();
+		if ((style & SWT.MULTI) != 0 && !isEnabled()) nsColor = NSColor.disabledControlTextColor();
 	} else {
-		nsColor = NSColor.colorWithDeviceRed (color [0], color [1], color [2], 1);
+		float /*double*/ alpha = 1;
+		if ((style & SWT.MULTI) != 0 && !isEnabled()) alpha = 0.5f;
+		nsColor = NSColor.colorWithDeviceRed (color [0], color [1], color [2], alpha);
 	}
 	if ((style & SWT.SINGLE) != 0) {
 		((NSTextField) view).setTextColor (nsColor);
@@ -1757,7 +1859,7 @@ public void setSelection (int start) {
 public void setSelection (int start, int end) {
 	checkWidget ();
 	if ((style & SWT.SINGLE) != 0) {
-		NSString str = new NSCell (((NSTextField) view).cell ()).title ();
+		NSString str = ((NSTextField) view).stringValue();
 		int length = (int)/*64*/str.length ();
 		int selStart = Math.min (Math.max (Math.min (start, end), 0), length);
 		int selEnd = Math.min (Math.max (Math.max (start, end), 0), length);
@@ -1894,6 +1996,52 @@ public void setText (String string) {
 }
 
 /**
+ * Sets the contents of the receiver to the characters in the array. If the receiver
+ * has style <code>SWT.SINGLE</code> and the argument contains multiple lines of text
+ * then the result of this operation is undefined and may vary between platforms.
+ *
+ * @param text a character array that contains the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getTextChars()
+ *
+ * @since 3.7
+ */
+public void setTextChars (char[] text) {
+	checkWidget ();
+	if (text == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		String string = verifyText (new String (text), 0, getCharCount (), null);
+		if (string == null) return;
+		text = new char [string.length()];
+		string.getChars (0, text.length, text, 0);
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		setEditText (text);
+		NSText fieldEditor = ((NSControl)view).currentEditor();
+		if (fieldEditor != null) {
+			NSRange range = new NSRange();
+			fieldEditor.setSelectedRange (range);
+			fieldEditor.scrollRangeToVisible (range);
+		}
+	} else {
+		NSTextView widget = (NSTextView)view;
+		int length = Math.min(text.length, textLimit);
+		NSString str = NSString.stringWithCharacters(text, length);
+		widget.setString (str);
+		widget.setSelectedRange(new NSRange());
+	}
+	sendEvent (SWT.Modify);
+}
+
+/**
  * Sets the maximum number of characters that the receiver
  * is capable of holding to be the argument.
  * <p>
@@ -1949,13 +2097,14 @@ boolean shouldChangeTextInRange_replacementString(int /*long*/ id, int /*long*/
 	NSRange range = new NSRange();
 	OS.memmove(range, affectedCharRange, NSRange.sizeof);
 	boolean result = callSuperBoolean(id, sel, range, replacementString);
-	String text = new NSString(replacementString).getString();
-	if (!hooks(SWT.Verify) && echoCharacter =='\0') {
-		if (!result || (getCharCount() - range.length + text.length() > textLimit)) {
+	NSString nsString = new NSString(replacementString);
+	if (!hooks(SWT.Verify) && ((echoCharacter =='\0') || (style & SWT.PASSWORD) != 0)) {
+		if (!result || (getCharCount() - range.length + nsString.length() > textLimit)) {
 			return false;
 		}
 		return true;
 	}
+	String text = nsString.getString();
 	String newText = text;
 	if (hooks (SWT.Verify)) {
 		NSEvent currentEvent = display.application.currentEvent();
@@ -1980,11 +2129,7 @@ boolean shouldChangeTextInRange_replacementString(int /*long*/ id, int /*long*/
 	} else {
 		if (text != newText) {
 			NSTextView widget = (NSTextView) view;
-			NSRange selRange = new NSRange();
-			Point selection = getSelection();
-			selRange.location = selection.x;
-			selRange.length = selection.x + selection.y;
-			widget.textStorage ().replaceCharactersInRange (selRange, NSString.stringWith(newText));
+			widget.textStorage ().replaceCharactersInRange (widget.selectedRange(), NSString.stringWith(newText));
 			result = false;
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java
old mode 100644
new mode 100755
index 4db5981..f4f8672
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java	
@@ -47,8 +47,10 @@ import org.eclipse.swt.internal.cocoa.*;
 public class ToolBar extends Composite {
 	int itemCount;
 	ToolItem [] items;
+	NSToolbar nsToolbar;
 	NSArray accessibilityAttributes = null;
 	ToolItem lastFocus;
+	static int NEXT_ID;
 
 /**
  * Constructs a new instance of this class given its parent
@@ -84,7 +86,11 @@ public class ToolBar extends Composite {
  * @see Widget#getStyle()
  */
 public ToolBar (Composite parent, int style) {
-	super (parent, checkStyle (style));
+	this(parent, style, false);
+}
+
+ToolBar(Composite parent, int style, boolean internal) {
+	super (parent, checkStyle (parent, style, internal));
 	
 	/*
 	* Ensure that either of HORIZONTAL or VERTICAL is set.
@@ -141,7 +147,7 @@ boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
 	return super.accessibilityIsIgnored(id, sel);	
 }
 
-static int checkStyle (int style) {
+static int checkStyle (Composite parent, int style, boolean internal) {
 	/*
 	* Even though it is legal to create this widget
 	* with scroll bars, they serve no useful purpose
@@ -149,7 +155,38 @@ static int checkStyle (int style) {
 	* widget's client area.  The fix is to clear
 	* the SWT style.
 	*/
-	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	int newStyle = style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	
+	/*
+	 * Only internal clients can create an NSToolbar-based ToolBar.
+	 */
+	if (!internal && (newStyle & SWT.SMOOTH) != 0) {
+		newStyle &= ~SWT.SMOOTH;
+	}
+	
+	/*
+	 * A unified toolbar can only be parented to a Shell, and
+	 * there can only be one unified toolbar per shell. If neither of these
+	 * conditions hold, turn off the SMOOTH flag.
+	 */
+	if ((style & SWT.SMOOTH) != 0) {
+		if (parent instanceof Shell) {
+			Shell s = (Shell)parent;
+			if (s.window.toolbar() != null) newStyle &= ~SWT.SMOOTH;
+		} else {
+			newStyle &= ~SWT.SMOOTH;
+		}
+	}
+	
+	/*
+	 * Unified toolbar only supports a horizontal layout, and doesn't wrap.
+	 */
+	if ((newStyle & SWT.SMOOTH) != 0) {
+		newStyle &= ~(SWT.VERTICAL | SWT.WRAP); 
+		newStyle |= SWT.HORIZONTAL;
+	}
+	
+	return newStyle;
 }
 
 protected void checkSubclass () {
@@ -186,20 +223,39 @@ public Rectangle computeTrim (int x, int y, int width, int height) {
 }
 
 void createHandle () {
-	state |= THEME_BACKGROUND;
-	if (hasBorder()) {
-		NSRect rect = new NSRect();
-		NSScrollView scrollWidget = (NSScrollView)new SWTScrollView().alloc();
-		scrollWidget.initWithFrame (rect);
-		scrollWidget.setDrawsBackground(false);
-		scrollWidget.setBorderType(OS.NSBezelBorder);
-		scrollView = scrollWidget;
-	}
-	NSView widget = (NSView)new SWTView().alloc();
-	widget.init();
-//	widget.setDrawsBackground(false);
-	view = widget;
-	if (scrollView != null) view.setAutoresizingMask(OS.NSViewHeightSizable | OS.NSViewWidthSizable);
+	if ((style & SWT.SMOOTH) != 0) {
+		nsToolbar = ((NSToolbar)new SWTToolbar().alloc()).initWithIdentifier(NSString.stringWith(String.valueOf(NEXT_ID++)));
+		nsToolbar.setDelegate(nsToolbar);
+		nsToolbar.setDisplayMode(OS.NSToolbarDisplayModeIconOnly);
+		NSWindow window = parent.view.window();
+		window.setToolbar(nsToolbar);
+		nsToolbar.setVisible(true);
+		NSArray views = window.contentView().superview().subviews();
+		for (int i = 0; i < views.count(); i++) {
+			id id = views.objectAtIndex(i);
+			if (new NSObject(id).className().getString().equals("NSToolbarView")) {
+				view = new NSView(id);
+				OS.object_setClass(view.id, OS.objc_getClass("SWTToolbarView"));
+				view.retain();
+				break;
+			}
+		}
+		style &= ~SWT.SMOOTH;
+	} else {
+		state |= THEME_BACKGROUND;
+		if (hasBorder()) {
+			NSRect rect = new NSRect();
+			NSScrollView scrollWidget = (NSScrollView)new SWTScrollView().alloc();
+			scrollWidget.initWithFrame (rect);
+			scrollWidget.setDrawsBackground(false);
+			scrollWidget.setBorderType(OS.NSBezelBorder);
+			scrollView = scrollWidget;
+		}
+		NSView widget = (NSView)new SWTView().alloc();
+		widget.init();
+		view = widget;
+		if (scrollView != null) view.setAutoresizingMask(OS.NSViewHeightSizable | OS.NSViewWidthSizable);
+	}
 }
 
 void createItem (ToolItem item, int index) {
@@ -209,10 +265,14 @@ void createItem (ToolItem item, int index) {
 		System.arraycopy (items, 0, newItems, 0, items.length);
 		items = newItems;
 	}
-	item.createWidget();
-	view.addSubview(item.view);
+    item.createWidget();
 	System.arraycopy (items, index, items, index + 1, itemCount++ - index);
 	items [index] = item;
+	if (nsToolbar != null) {
+        nsToolbar.insertItemWithItemIdentifier(item.getItemID(), index);	    
+	} else {
+        view.addSubview(item.view);
+	}
 	relayout ();
 }
 
@@ -222,6 +282,15 @@ void createWidget () {
 	itemCount = 0;
 }
 
+NSFont defaultNSFont() {
+	return NSFont.systemFontOfSize(11.0f);
+}
+
+void deregister () {
+	super.deregister ();
+	if (nsToolbar != null) display.removeWidget (nsToolbar);
+}
+
 void destroyItem (ToolItem item) {
 	int index = 0;
 	while (index < itemCount) {
@@ -232,7 +301,11 @@ void destroyItem (ToolItem item) {
 	if (item == lastFocus) lastFocus = null;
 	System.arraycopy (items, index + 1, items, index, --itemCount - index);
 	items [itemCount] = null;
-	item.view.removeFromSuperview();
+	if (nsToolbar != null) {
+		nsToolbar.removeItemAtIndex(index);
+	} else {
+		item.view.removeFromSuperview();
+	}
 	relayout ();
 }
 
@@ -248,7 +321,7 @@ void enableWidget(boolean enabled) {
 	for (int i = 0; i < itemCount; i++) {
 		ToolItem item = items[i];
 		if (item != null) {
-			item.enableWidget(enabled);
+			item.enableWidget(enabled && item.getEnabled());
 		}
 	}
 }
@@ -262,6 +335,25 @@ Widget findTooltip (NSPoint pt) {
 	return super.findTooltip (pt);
 }
 
+void setZOrder() {
+	if (nsToolbar != null) return;
+	super.setZOrder();
+}
+
+public Rectangle getBounds () {
+	checkWidget();
+
+	if (nsToolbar != null) {
+		// The NSToolbar's view will always be a child of the Shell, so we can just
+		// convert the frame to window-relative coordinates.
+		NSRect rect = view.frame();
+		rect = view.convertRect_toView_(rect, null);
+		return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+	}
+	
+	return super.getBounds();
+}
+
 boolean forceFocus (NSView focusView) {
 	if (lastFocus != null && lastFocus.setFocus ()) return true;
 	ToolItem [] items = getItems ();
@@ -438,8 +530,7 @@ int [] layoutHorizontal (int width, int height, boolean resize) {
 			item.setVisible (visible);
 			Control control = item.control;
 			if (control != null) {
-				int controlY = y + (itemHeight - size.y) / 2;
-				control.setBounds (x, controlY, size.x, itemHeight - (controlY - y));
+				control.setBounds (x, y, size.x, itemHeight);
 			}
 		}
 		x += xSpacing + size.x;
@@ -449,6 +540,37 @@ int [] layoutHorizontal (int width, int height, boolean resize) {
 	return new int [] {rows, maxX, y + itemHeight};
 }
 
+int [] layoutUnified (int width, int height, boolean resize) {
+	int x = 0, y = 0;
+	int itemHeight = 0, maxX = 0;
+	Point [] sizes = new Point [itemCount];
+	NSRect [] containerRects = new NSRect[itemCount];
+	// This next line relies on the observation that all of the toolbar item views are children of the first
+	// subview of the NSToolbarView.
+	NSArray itemViewers = new NSView(view.subviews().objectAtIndex(0)).subviews();
+	for (int i=0; i<itemCount; i++) {
+		Point size = sizes [i] = items [i].computeSize ();
+		containerRects [i] = new NSView(itemViewers.objectAtIndex(i)).frame();
+		if (i == 0) x = (int) containerRects[0].x;
+		itemHeight = Math.max (itemHeight, size.y);
+	}
+	for (int i=0; i<itemCount; i++) {
+		ToolItem item = items [i];
+		Point size = sizes [i];
+		if (resize) {
+			item.setBounds (0, 0, size.x, itemHeight);
+			Control control = item.control;
+			if (control != null) {
+				control.setBounds (x, y, size.x, itemHeight);
+			}
+		}
+		x += containerRects[i].width;
+		maxX = Math.max (maxX, x);
+	}
+	
+	return new int [] {1, maxX, itemHeight};
+}
+
 int [] layoutVertical (int width, int height, boolean resize) {
 	int xSpacing = 2, ySpacing = 0;
 	int marginWidth = 0, marginHeight = 0;
@@ -475,8 +597,7 @@ int [] layoutVertical (int width, int height, boolean resize) {
 			item.setVisible (visible);
 			Control control = item.control;
 			if (control != null) {
-				int controlX = x + (itemWidth - size.x) / 2;
-				control.setBounds (controlX, y, itemWidth - (controlX - x), size.y);
+				control.setBounds (x, y, itemWidth, size.y);
 			}
 		}
 		y += ySpacing + size.y;
@@ -487,6 +608,10 @@ int [] layoutVertical (int width, int height, boolean resize) {
 }
 
 int [] layout (int nWidth, int nHeight, boolean resize) {
+	if (nsToolbar != null) {
+		return layoutUnified(nWidth, nHeight, resize);
+	}
+
 	if ((style & SWT.VERTICAL) != 0) {
 		return layoutVertical (nWidth, nHeight, resize);
 	} else {
@@ -494,6 +619,11 @@ int [] layout (int nWidth, int nHeight, boolean resize) {
 	}
 }
 
+void register() {
+	super.register();
+	if (nsToolbar != null) display.addWidget (nsToolbar, this);
+}
+
 void relayout () {
 	if (!getDrawing()) return;
 	Rectangle rect = getClientArea ();
@@ -515,7 +645,13 @@ void releaseChildren (boolean destroy) {
 }
 
 void releaseHandle () {
-	super.releaseHandle ();
+    super.releaseHandle ();
+
+    if (nsToolbar != null) {
+        nsToolbar.release();
+        nsToolbar = null;
+	}
+
 	if (accessibilityAttributes != null) accessibilityAttributes.release();
 	accessibilityAttributes = null;
 }
@@ -549,14 +685,13 @@ boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
 	case SWT.MouseMove:
 		// Start with the global mouse location, as the MouseEnter may occur due to
 		// an application-activated event, which isn't associated with a window.
-		NSPoint toolbarPoint = NSEvent.mouseLocation();
-		toolbarPoint = view.window().convertScreenToBase(toolbarPoint);
-		toolbarPoint = view.convertPoint_fromView_(toolbarPoint, null);
+		NSPoint windowPoint = NSEvent.mouseLocation();
+		windowPoint = view.window().convertScreenToBase(windowPoint);
 		for (int i = 0; i < itemCount; i++) {
 			ToolItem item = items [i];
 			int currState = item.state;
-			
-			if (OS.NSPointInRect(toolbarPoint, item.view.frame())) {
+			NSPoint viewPoint = item.view.convertPoint_fromView_(windowPoint, null); 
+			if (item.view.mouse(viewPoint, item.view.bounds())) {
 				item.state |= Widget.HOT;
 			} else {
 				item.state &= ~Widget.HOT;				
@@ -578,6 +713,13 @@ boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
 	return super.sendMouseEvent(nsEvent, type, send);
 }
 
+void setBounds (int x, int y, int width, int height, boolean move, boolean resize) {
+	// In the unified toolbar case, the toolbar view size and position is completely controlled
+	// by the window, so don't change its bounds or location.
+	if (nsToolbar != null) return;
+	super.setBounds(x, y, width, height, move, resize);
+}
+	
 void setFont(NSFont font) {
 	for (int i = 0; i < itemCount; i++) {
 		ToolItem item = items[i];
@@ -591,6 +733,53 @@ public void setRedraw (boolean redraw) {
 	if (redraw && drawCount == 0) relayout();
 }
 
+public void setVisible(boolean visible) {
+    if (nsToolbar != null) nsToolbar.setVisible(visible);
+    super.setVisible(visible);
+}
+
+int /*long*/ toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar, int /*long*/ itemIdentifier, boolean flag) {
+	NSString itemID = new NSString(itemIdentifier);
+	for (int j = 0; j < itemCount; j++) {
+		ToolItem item = items[j];
+		if (itemID.isEqual(item.nsItem.itemIdentifier())) {
+			return item.nsItem.id;
+		}
+	}
+	return 0;
+}
+
+/*
+ * Returns an array of all toolbar item IDs allowed to be in the toolbar. Since the ToolBar created all of the ToolItems
+ * return all of the item IDs.
+ */
+int /*long*/ toolbarAllowedItemIdentifiers(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar) {
+	NSMutableArray array = NSMutableArray.arrayWithCapacity(itemCount);
+	for (int i = 0; i < itemCount; i++) {
+		array.addObject(items[i].nsItem.itemIdentifier());
+	}
+	return array.id;
+}
+
+/*
+ * This delegate method isn't really needed because ToolBars aren't customizable, but it's required according to the documentation.
+ */
+int /*long*/ toolbarDefaultItemIdentifiers(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar) {
+	return toolbarAllowedItemIdentifiers(id, sel, toolbar);
+}
+
+/*
+ * toolbarSelectableItemIdentifiers returns an array of all items that can be the selected item, as determined
+ * by setSelectedItemIdentifier. 
+ */
+int /*long*/ toolbarSelectableItemIdentifiers(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar) {
+	NSMutableArray array = NSMutableArray.arrayWithCapacity(itemCount);
+	for (int i = 0; i < itemCount; i++) {
+		if ((items[i].style & SWT.RADIO) != 0) array.addObject(items[i].nsItem.itemIdentifier());
+	}
+	return array.id;
+}
+
 boolean translateTraversal (int key, NSEvent theEvent, boolean[] consume) {
 	boolean result = super.translateTraversal (key, theEvent, consume);
 	if (result) return result;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java
old mode 100644
new mode 100755
index 6ae08bf..3b143c7
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,9 @@ import org.eclipse.swt.internal.cocoa.*;
 public class ToolItem extends Item {
 	NSView view;
 	NSButton button;
+	NSToolbarItem nsItem;
+	NSMenuItem nsMenuRep;
+	NSString id;
 	int width = DEFAULT_SEPARATOR_WIDTH;
 	ToolBar parent;
 	Image hotImage, disabledImage;
@@ -302,20 +305,22 @@ Point computeSize () {
 	checkWidget();
 	int width = 0, height = 0;
 	if ((style & SWT.SEPARATOR) != 0) {
+		// In the unified toolbar case the width is ignored if 0, DEFAULT, or SEPARATOR_FILL.
 		if ((parent.style & SWT.HORIZONTAL) != 0) {
 			width = getWidth ();
+			if (width <= 0) width = DEFAULT_SEPARATOR_WIDTH;
 			height = DEFAULT_HEIGHT;
 		} else {
 			width = DEFAULT_WIDTH;
 			height = getWidth ();
+			if (height <= 0) height = DEFAULT_SEPARATOR_WIDTH;
 		}
 		if (control != null) {
 			height = Math.max (height, control.getMininumHeight ());
 		}
 	} else {
 		if (text.length () != 0 || image != null) {
-			NSButton widget = (NSButton)button;
-			NSSize size = widget.cell().cellSize();
+			NSSize size = button.cell().cellSize();
 			width = (int)Math.ceil(size.width);
 			height = (int)Math.ceil(size.height);
 		} else {
@@ -325,19 +330,38 @@ Point computeSize () {
 		if ((style & SWT.DROP_DOWN) != 0) {
 			width += ARROW_WIDTH + INSET;
 		}
-		width += INSET * 2;
-		height += INSET * 2;
+		
+		if (parent.nsToolbar == null || image != null) {
+			width += INSET * 2;
+			height += INSET * 2;
+		} else {
+			height -= 2;
+		}
 	}
 	return new Point (width, height);
 }
 
 void createHandle () {
+	if (parent.nsToolbar != null) {
+		id = NSString.stringWith(String.valueOf(ToolBar.NEXT_ID++));
+		id.retain();
+		nsItem = ((NSToolbarItem)new NSToolbarItem().alloc()).initWithItemIdentifier(id);
+		nsItem.setAction(OS.sel_sendSelection);
+		nsMenuRep = ((NSMenuItem)new SWTMenuItem().alloc()).initWithTitle(NSString.string(), OS.sel_sendSelection, NSString.string());
+		nsItem.setMenuFormRepresentation(nsMenuRep);
+	} 
+
 	if ((style & SWT.SEPARATOR) != 0) {
-		NSBox widget = (NSBox)new SWTBox().alloc();
-		widget.init();
-		widget.setBoxType(OS.NSBoxSeparator);
-		widget.setBorderWidth(0);
-		view = widget;
+		if (parent.nsToolbar != null) {
+			view = (NSView)new SWTView().alloc();
+			view.init();
+		} else {
+			NSBox widget = (NSBox)new SWTBox().alloc();
+			widget.init();
+			widget.setBoxType(OS.NSBoxSeparator);
+			widget.setBorderWidth(0);
+			view = widget;
+		}
 	} else {
 		NSView widget = (NSView)new SWTView().alloc();
 		widget.init();
@@ -351,9 +375,12 @@ void createHandle () {
 		NSButtonCell cell = (NSButtonCell)new SWTButtonCell ().alloc ().init ();
 		button.setCell (cell);
 		cell.release();
+		cell.setHighlightsBy(OS.NSContentsCellMask);
+		cell.setBackgroundStyle(OS.NSBackgroundStyleRaised);
 		button.setBordered(false);
 		button.setAction(OS.sel_sendSelection);
 		button.setTarget(button);
+		if (nsMenuRep != null) nsMenuRep.setTarget(button);
 		Font font = parent.font != null ? parent.font : parent.defaultFont ();
 		button.setFont(font.handle);
 		button.setImagePosition(OS.NSImageOverlaps);
@@ -393,12 +420,52 @@ void drawImageWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ i
 			rect.y += 3;			
 		}
 	}
-	callSuper (id, sel, image, rect, view);
+	int /*long*/ cgContext = NSGraphicsContext.currentContext().graphicsPort();
+	NSCell cell = new NSCell(id);
+	boolean drawSelected = (parent.nsToolbar != null) && getSelection() && ((style & SWT.CHECK) != 0) && !cell.isHighlighted();
+
+	if (drawSelected) {
+		NSGraphicsContext.currentContext().saveGraphicsState();
+		CGRect cgRect = new CGRect();
+		cgRect.origin.x = rect.x;
+		cgRect.origin.y = rect.y;
+		cgRect.size.width = rect.width;
+		cgRect.size.height = rect.height;
+		OS.CGContextBeginTransparencyLayerWithRect(cgContext, cgRect, 0);
+	}
+
+	super.drawImageWithFrameInView(id, sel, image, rect, view);
+
+	if (drawSelected) {
+		NSColor.colorWithDeviceRed(0,0,0,.3f).setFill();
+		OS.NSRectFillUsingOperation(rect, OS.NSCompositeSourceAtop);
+		OS.CGContextEndTransparencyLayer(cgContext);
+		NSGraphicsContext.currentContext().restoreGraphicsState();
+	}
+}
+
+NSRect drawTitleWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ title, NSRect titleRect, int /*long*/ view) {
+    boolean hiliteShadow = new NSButtonCell(id).isHighlighted() && text.length() > 0 && image == null;
+    
+    // An unbordered cell doesn't draw any highlighting when pushed or selected, so we have to do it here.
+    if (hiliteShadow) {
+    	NSColor transWhiteColor = NSColor.colorWithDeviceRed(1.0f, 1.0f, 1.0f, .8f);
+		NSAttributedString attribStr = new NSAttributedString(title);
+		NSMutableAttributedString tmpString = new NSMutableAttributedString(attribStr.mutableCopy());
+		NSRange range = new NSRange();
+		range.location = 0;
+		range.length = attribStr.length();
+		tmpString.addAttribute(OS.NSForegroundColorAttributeName, transWhiteColor, range);
+		tmpString.autorelease();
+		title = tmpString.id;
+    }
+	return super.drawTitleWithFrameInView(id, sel, title, titleRect, view);
 }
 
 void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
 	if (id == view.id) {
-		if (getSelection ()) {
+		boolean drawSelected = getSelection() && (parent.nsToolbar == null); 
+		if (drawSelected) {
 			NSRect bounds = view.bounds();
 			context.saveGraphicsState();
 			NSColor.colorWithDeviceRed(0.1f, 0.1f, 0.1f, 0.1f).setFill();
@@ -435,6 +502,10 @@ void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
 }
 
 void enableWidget(boolean enabled) {
+	if (parent.nsToolbar != null) {
+		nsItem.setEnabled(enabled);
+	} 
+
 	if ((style & SWT.SEPARATOR) == 0) {
 		((NSButton)button).setEnabled(enabled);
 		updateImage(true);
@@ -454,6 +525,15 @@ void enableWidget(boolean enabled) {
  */
 public Rectangle getBounds () {
 	checkWidget();
+	if (parent.nsToolbar != null) {
+		NSRect rect = view.frame();
+		// ToolItems in the unified toolbar are not contained directly within the Toolbar.
+		// Convert the toolitem rect from toolitem-relative coordinates to its
+		// parent, the toolbar, relative coordinates.
+		rect = parent.view.convertRect_fromView_(rect, view);
+		return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+	} 
+
 	NSRect rect = view.frame();
 	return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
 }
@@ -540,6 +620,26 @@ public Image getHotImage () {
 	return hotImage;
 }
 
+NSString getItemID() {
+    NSString itemID = id;
+    
+    // For separators, return a Cocoa constant for the tool item ID.
+    if ((style & SWT.SEPARATOR) != 0) {
+    	// If we are using a non-default width or control use that instead.  
+    	if (control == null) {
+    		if (width == DEFAULT_SEPARATOR_WIDTH || width == 0) {
+    			itemID = OS.NSToolbarSeparatorItemIdentifier;
+    		} else if (width == SWT.DEFAULT) {
+    			itemID = OS.NSToolbarSpaceItemIdentifier;
+    		} else if (width == SWT.SEPARATOR_FILL) {
+    			itemID = OS.NSToolbarFlexibleSpaceItemIdentifier;
+    		}
+    	}
+    }
+    
+    return itemID;
+}
+
 /**
  * Returns the receiver's parent, which must be a <code>ToolBar</code>.
  *
@@ -652,6 +752,11 @@ void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	}
 }
 
+boolean mouseDownCanMoveWindow(int /*long*/ id, int /*long*/ sel) {
+	if (id == view.id) return false;
+	return super.mouseDownCanMoveWindow(id, sel);
+}
+
 void mouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseUp)) return;
 	super.mouseUp(id, sel, theEvent);
@@ -737,6 +842,18 @@ void releaseHandle () {
 	if (view != null) view.release ();
 	if (button != null) button.release ();
 	view = button = null;
+	if (nsItem != null) {
+	    nsItem.release();
+	    nsItem = null;
+	}
+	if (id != null) {
+	    id.release();
+	    id = null;
+	}
+	if (nsMenuRep != null) {
+		nsMenuRep.release();
+		nsMenuRep = null;
+	}
 	parent = null;
 }
 
@@ -770,18 +887,35 @@ void sendSelection () {
 
 void setBounds (int x, int y, int width, int height) {
 	NSRect rect = new NSRect();
-	rect.x = x;
-	rect.y = y;
-	rect.width = width;
-	rect.height = height;
-	view.setFrame(rect);
-	if (button != null) {
-		rect.x = 0;
-		rect.y = 0;
+	if (parent.nsToolbar == null) {
+		rect.x = x;
+		rect.y = y;
 		rect.width = width;
 		rect.height = height;
-		if ((style & SWT.DROP_DOWN) != 0) rect.width -= ARROW_WIDTH + INSET;
-		button.setFrame(rect);
+		view.setFrame(rect);
+		if (button != null) {
+			rect.x = 0;
+			rect.y = 0;
+			rect.width = width;
+			rect.height = height;
+			if ((style & SWT.DROP_DOWN) != 0) rect.width -= ARROW_WIDTH + INSET;
+			button.setFrame(rect);
+		}
+	} else {
+		// Let the NSToolbar manage the position of the view in the toolbar.
+		NSSize newSize = new NSSize();
+		newSize.height = height;
+		newSize.width = width;
+		// Temporarily clear the view. This will force the item and toolbar to re-layout
+		// when the view is set again.
+		nsItem.setView(null);
+		view.setFrameSize(newSize);
+		if ((style & SWT.DROP_DOWN) != 0) newSize.width -= ARROW_WIDTH + INSET;
+		if (button != null) button.setFrameSize(newSize);
+		if ((style & SWT.DROP_DOWN) != 0) newSize.width += ARROW_WIDTH + INSET;
+		nsItem.setMinSize(newSize);
+		nsItem.setMaxSize(newSize);
+		nsItem.setView(view);
 	}
 }
 
@@ -808,11 +942,16 @@ public void setControl (Control control) {
 	}
 	if ((style & SWT.SEPARATOR) == 0) return;
 	if (this.control == control) return;
-	NSBox widget = (NSBox)view;
-	if (control == null) {
-		widget.setBoxType(OS.NSBoxSeparator);
+
+	if (parent.nsToolbar == null) {
+        NSBox widget = (NSBox)view;
+        if (control == null) {
+        	widget.setBoxType(OS.NSBoxSeparator);
+        } else {
+        	widget.setBoxType(OS.NSBoxCustom);
+        }
 	} else {
-		widget.setBoxType(OS.NSBoxCustom);
+		nsItem.setMenuFormRepresentation(control == null ? nsMenuRep : NSMenuItem.separatorItem());
 	}
 	this.control = control;
 	view.setHidden(control != null);
@@ -877,7 +1016,11 @@ public void setDisabledImage (Image image) {
 boolean setFocus () {
 	if (button == null) return false;
 	if (!isEnabled ()) return false;
-	return view.window ().makeFirstResponder (button);
+	NSWindow window = view.window ();
+	if(window == null) { 
+		return false;
+	}
+	return window.makeFirstResponder (button);
 }
 
 /**
@@ -941,6 +1084,13 @@ public void setSelection (boolean selected) {
 	checkWidget();
 	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return;
 	this.selection = selected;
+	
+	if (parent.nsToolbar != null) {
+		if ((style & SWT.RADIO) != 0 && selection) {
+			parent.nsToolbar.setSelectedItemIdentifier(nsItem.itemIdentifier());
+		}
+	}
+	
 	view.setNeedsDisplay(true);
 }
 
@@ -975,6 +1125,13 @@ public void setText (String string) {
 	if ((style & SWT.SEPARATOR) != 0) return;
 	super.setText (string);
 	NSButton widget = (NSButton)button;
+	if (parent.nsToolbar != null) {
+		char [] chars = new char [text.length ()];
+		text.getChars (0, chars.length, chars, 0);
+		int length = fixMnemonic (chars);
+		nsMenuRep.setTitle(NSString.stringWithCharacters(chars, length));
+	}
+
 	widget.setAttributedTitle(createString());
 	if (text.length() != 0 && image != null) {
 		if ((parent.style & SWT.RIGHT) != 0) {
@@ -1010,8 +1167,15 @@ public void setText (String string) {
  */
 public void setToolTipText (String string) {
 	checkWidget();
-	toolTipText = string;
-	parent.checkToolTip (this);
+    toolTipText = string;
+	if (parent.nsToolbar != null) {
+        char[] chars = new char [toolTipText.length ()];
+        string.getChars (0, chars.length, chars, 0);
+        int length = fixMnemonic (chars);
+        nsItem.setToolTip(NSString.stringWithCharacters (chars, length));
+	} else {
+        parent.checkToolTip (this);
+	}
 }
 
 void setVisible (boolean visible) {
@@ -1028,7 +1192,14 @@ void setVisible (boolean visible) {
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
- * @param width the new width
+ * @param width the new width. If the new value is <code>SWT.DEFAULT</code>,
+ * the width is a fixed-width area whose amount is determined by the platform.
+ * If the new value is 0 a vertical or horizontal line will be drawn, depending
+ * on the setting of the corresponding style bit (<code>SWT.VERTICAL</code> or 
+ * <code>SWT.HORIZONTAL</code>). If the new value is <code>SWT.SEPARATOR_FILL</code>
+ * a variable-width space is inserted that acts as a spring between the two adjoining
+ * items which will push them out to the extent of the containing ToolBar.
+ * 
  *
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -1038,8 +1209,14 @@ void setVisible (boolean visible) {
 public void setWidth (int width) {
 	checkWidget();
 	if ((style & SWT.SEPARATOR) == 0) return;
-	if (width < 0 || this.width == width) return;
+	if (width < SWT.SEPARATOR_FILL || this.width == width) return;
 	this.width = width;
+	if (parent.nsToolbar != null) {
+		NSToolbar toolbar = parent.nsToolbar;
+		int index = parent.indexOf(this);
+		toolbar.removeItemAtIndex(index);
+		toolbar.insertItemWithItemIdentifier(getItemID(), index);
+	}
 	parent.relayout();
 }
 
@@ -1083,4 +1260,8 @@ void updateImage (boolean layout) {
 	parent.relayout();
 }
 
+boolean validateMenuItem(int /*long*/ id, int /*long*/ sel, int /*long*/ menuItem) {
+	return isEnabled();
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
old mode 100644
new mode 100755
index 86e8213..fdc5a4d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TrayItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TrayItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
old mode 100644
new mode 100755
index 671b95a..8dee562
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,10 +83,13 @@ public class Tree extends Composite {
 	TreeColumn sortColumn;
 	int columnCount;
 	int sortDirection;
-	boolean ignoreExpand, ignoreSelect, ignoreRedraw, reloadPending, drawExpansion, didSelect;
+	boolean ignoreExpand, ignoreSelect, ignoreRedraw, reloadPending, drawExpansion, didSelect, preventSelect;
 	Rectangle imageBounds;
 	TreeItem insertItem;
 	boolean insertBefore;
+	
+	/* Used to control drop feedback when DND.FEEDBACK_EXPAND and DND.FEEDBACK_SCROLL is set/not set */
+	boolean shouldExpand = true, shouldScroll = true;
 
 	static int NEXT_ID;
 
@@ -155,6 +158,32 @@ TreeItem _getItem (TreeItem parentItem, int index, boolean create) {
 	return item;
 }
 
+int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	int /*long*/ returnValue = 0;
+	NSString attributeName = new NSString(arg0);
+	
+	// If the check column is visible, don't report it back as a column for accessibility purposes.
+	// The check column is meant to appear as a part of the first column.
+	if (attributeName.isEqualToString (OS.NSAccessibilityColumnsAttribute) || attributeName.isEqualToString(OS.NSAccessibilityVisibleColumnsAttribute)) {
+		if ((style & SWT.CHECK) != 0) {
+			int /*long*/ superValue = super.accessibilityAttributeValue(id, sel, arg0);
+			if (superValue != 0) {
+				NSArray columns = new NSArray(superValue);
+				NSMutableArray columnsWithoutCheck = NSMutableArray.arrayWithCapacity(columns.count() - 1);
+				columnsWithoutCheck.addObjectsFromArray(columns);
+				columnsWithoutCheck.removeObjectAtIndex(0);
+				returnValue = columnsWithoutCheck.id;
+			}
+		}
+	}
+	
+	if (returnValue != 0) {
+		return returnValue;
+	} else {
+		return super.accessibilityAttributeValue(id, sel, arg0);
+	}
+}
+
 /**
  * Adds the listener to the collection of listeners who will
  * be notified when the user changes the receiver's selection, by sending
@@ -235,7 +264,8 @@ int calculateWidth (TreeItem[] items, int index, GC gc, boolean recurse) {
 
 NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
 	NSSize size = super.cellSize(id, sel);
-	NSImage image = new NSCell(id).image();
+	NSCell cell = new NSCell(id);
+	NSImage image = cell.image();
 	if (image != null) size.width += imageBounds.width + IMAGE_GAP;
 	if (hooks(SWT.MeasureItem)) {
 		int /*long*/ [] outValue = new int /*long*/ [1];
@@ -250,32 +280,31 @@ NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
 				break;
 			}
 		}
-		sendMeasureItem (item, columnIndex, size);
+		sendMeasureItem (item, cell.isHighlighted(), columnIndex, size);
 	}
 	return size;
 }
 
-boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
-	NSPoint clickPoint = new NSPoint();
-	OS.memmove(clickPoint, arg1, NSPoint.sizeof);
-	NSOutlineView tree = (NSOutlineView)view;
+boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ rowIndexes, NSPoint mouseDownPoint) {
+	if (!super.canDragRowsWithIndexes_atPoint(id, sel, rowIndexes, mouseDownPoint)) return false;
 	
 	// If the current row is not selected and the user is not attempting to modify the selection, select the row first.
-	int /*long*/ row = tree.rowAtPoint(clickPoint);
+	NSTableView widget = (NSTableView)view;
+	int /*long*/ row = widget.rowAtPoint(mouseDownPoint);
 	int /*long*/ modifiers = NSApplication.sharedApplication().currentEvent().modifierFlags();
 	
 	boolean drag = (state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect);
 	if (drag) {
-		if (!tree.isRowSelected(row) && (modifiers & (OS.NSCommandKeyMask | OS.NSShiftKeyMask | OS.NSAlternateKeyMask | OS.NSControlKeyMask)) == 0) {
+		if (!widget.isRowSelected(row) && (modifiers & (OS.NSCommandKeyMask | OS.NSShiftKeyMask | OS.NSAlternateKeyMask | OS.NSControlKeyMask)) == 0) {
 			NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
 			set = set.initWithIndex(row);
-			tree.selectRowIndexes (set, false);
+			widget.selectRowIndexes (set, false);
 			set.release();
 		}
 	}
 	
 	// The clicked row must be selected to initiate a drag.
-	return (tree.isRowSelected(row) && drag);
+	return (widget.isRowSelected(row) && drag);
 }
 
 boolean checkData (TreeItem item) {
@@ -430,6 +459,14 @@ void collapseItem_collapseChildren (int /*long*/ id, int /*long*/ sel, int /*lon
 	setScrollWidth ();
 }
 
+int /*long*/ columnAtPoint(int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	if ((style & SWT.CHECK) != 0) {
+		if (point.x <= getCheckColumnWidth() && point.y < headerView.frame().height) return 1;
+	}
+	
+	return super.columnAtPoint(id, sel, point);
+}
+
 public Point computeSize (int wHint, int hHint, boolean changed) {
 	checkWidget ();
 	int width = 0, height = 0;
@@ -520,7 +557,6 @@ void createHandle () {
 	*/
 	widget.initWithFrame(new NSRect());
 	widget.setAllowsMultipleSelection ((style & SWT.MULTI) != 0);
-	widget.setAllowsColumnReordering (false);
 	widget.setAutoresizesOutlineColumn (false);
 	widget.setAutosaveExpandedItems (true);
 	widget.setDataSource (widget);
@@ -552,6 +588,7 @@ void createHandle () {
 		buttonCell.init ();
 		checkColumn.setDataCell (buttonCell);
 		buttonCell.setButtonType (OS.NSSwitchButton);
+		buttonCell.setControlSize (OS.NSSmallControlSize);
 		buttonCell.setImagePosition (OS.NSImageOnly);
 		buttonCell.setAllowsMixedState (true);
 		checkColumn.setWidth (getCheckColumnWidth ());
@@ -576,7 +613,7 @@ void createHandle () {
 	widget.addTableColumn (firstColumn);
 	widget.setOutlineTableColumn (firstColumn);
 	dataCell = (NSTextFieldCell)new SWTImageTextCell ().alloc ().init ();
-	dataCell.setLineBreakMode(OS.NSLineBreakByClipping);
+	dataCell.setLineBreakMode(OS.NSLineBreakByTruncatingTail);
 	firstColumn.setDataCell (dataCell);
 	
 	scrollView = scrollWidget;
@@ -710,6 +747,22 @@ Color defaultForeground () {
 	return display.getWidgetColor (SWT.COLOR_LIST_FOREGROUND);
 }
 
+void deselectAll(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	if (preventSelect && !ignoreSelect) return;
+	if ((style & SWT.SINGLE) != 0 && !ignoreSelect) {
+		if ( ((NSTableView)view).selectedRow() != -1) return;
+	}
+	super.deselectAll (id, sel, sender);
+}
+
+void deselectRow (int /*long*/ id, int /*long*/ sel, int /*long*/ index) {
+	if (preventSelect && !ignoreSelect) return;
+	if ((style & SWT.SINGLE) != 0 && !ignoreSelect) {
+		if ( ((NSTableView)view).selectedRow() == index) return;
+	}
+	super.deselectRow (id, sel, index);
+}
+
 /**
  * Deselects all selected items in the receiver.
  *
@@ -976,7 +1029,7 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 	NSGraphicsContext context = NSGraphicsContext.currentContext ();
 	
 	if (hooksMeasure) {
-		sendMeasureItem(item, columnIndex, contentSize);
+		sendMeasureItem(item, cell.isHighlighted(), columnIndex, contentSize);
 	}
 
 	Color userForeground = null;
@@ -990,13 +1043,15 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 		data.paintRect = cellRect;
 		GC gc = GC.cocoa_new (this, data);
 		gc.setFont (item.getFont (columnIndex));
-		if (isSelected) {
-			gc.setForeground (selectionForeground);
+		Color fg;
+		if (isSelected && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus)) {
+			fg = selectionForeground;
 			gc.setBackground (selectionBackground);
 		} else {
-			gc.setForeground (item.getForeground (columnIndex));
+			fg = item.getForeground (columnIndex);
 			gc.setBackground (item.getBackground (columnIndex));
 		}
+		gc.setForeground (fg);
 		if (!drawExpansion) {
 			gc.setClipping ((int)(cellRect.x - offsetX), (int)(cellRect.y - offsetY), (int)cellRect.width, (int)cellRect.height);
 		}
@@ -1006,7 +1061,7 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 		event.index = columnIndex;
 		event.detail = SWT.FOREGROUND;
 		if (drawBackground) event.detail |= SWT.BACKGROUND;
-		if (isSelected) event.detail |= SWT.SELECTED;
+		if (isSelected && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus)) event.detail |= SWT.SELECTED;
 		event.x = (int)cellRect.x;
 		event.y = (int)cellRect.y;
 		event.width = (int)cellRect.width;
@@ -1034,6 +1089,10 @@ void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rec
 			callSuper (widget.id, OS.sel_highlightSelectionInClipRect_, cellRect);
 			cellRect.height += spacing.height;
 		}
+	} else {
+		if (isSelected && (style & SWT.HIDE_SELECTION) != 0 && !hasFocus) {
+			userForeground = item.getForeground (columnIndex);
+		}
 	}
 
 	if (drawBackground && !drawSelection) {
@@ -1776,6 +1835,24 @@ public TreeItem getTopItem () {
 	return (TreeItem)display.getWidget (item.id);
 }
 
+NSRect headerRectOfColumn (int /*long*/ id, int /*long*/ sel, int /*long*/ column) {
+	if ((style & SWT.CHECK) == 0) return callSuperRect(id, sel, column);
+	
+	if (column == 0) {
+		NSRect returnValue = callSuperRect(id, sel, column);
+		returnValue.width = 0;
+		return returnValue;
+	}
+	if (column == 1) {
+		NSRect returnValue = callSuperRect(id, sel, column);
+		// Save a call to [NSTableView intercellSpacing] by using our constant.
+		returnValue.width += (checkColumn.width() + CELL_GAP);
+		returnValue.x -= (checkColumn.width() + CELL_GAP);
+		return returnValue;
+	}
+	return callSuperRect(id, sel, column);
+}
+
 void highlightSelectionInClipRect(int /*long*/ id, int /*long*/ sel, int /*long*/ rect) {
 	if (hooks (SWT.EraseItem)) return;
 	if ((style & SWT.HIDE_SELECTION) != 0 && !hasFocus()) return;
@@ -1882,7 +1959,7 @@ boolean isTrim (NSView view) {
 }
 
 void keyDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	ignoreSelect = false;
+	ignoreSelect = preventSelect = false;
 	super.keyDown(id, sel, theEvent);
 }
 
@@ -1917,22 +1994,7 @@ int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEve
 }
 
 void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	if (headerView != null && id == headerView.id) {
-		NSTableView widget = (NSTableView)view;
-		widget.setAllowsColumnReordering(false);
-		NSPoint pt = headerView.convertPoint_fromView_(new NSEvent(theEvent).locationInWindow(), null);
-		int /*long*/ nsIndex = headerView.columnAtPoint(pt);
-		if (nsIndex != -1) {
-			id nsColumn = widget.tableColumns().objectAtIndex(nsIndex);
-			for (int i = 0; i < columnCount; i++) {
-				if (columns[i].nsColumn.id == nsColumn.id) {
-					widget.setAllowsColumnReordering(columns[i].movable);
-					break;
-				}
-			}
-		}
-	}
-	else if (id == view.id) {
+	if (id == view.id) {
 		// Bug/feature in Cocoa:  If the tree has a context menu we just set it visible instead of returning
 		// it from menuForEvent:.  This has the side effect, however, of sending control-click to the NSTableView,
 		// which is interpreted as a single click that clears the selection.  Fix is to ignore control-click,
@@ -1943,12 +2005,23 @@ void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 }
 
 void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
-	ignoreSelect = false;
-	NSOutlineView widget = (NSOutlineView)view;
+	ignoreSelect = preventSelect = false;
+	boolean check = false;
 	NSEvent nsEvent = new NSEvent(theEvent);
+	NSOutlineView widget = (NSOutlineView)view;
 	NSPoint pt = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
 	int row = (int)/*64*/widget.rowAtPoint(pt);
-	if (row != -1 && (nsEvent.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == 0) {
+	if (row != -1 && (style & SWT.CHECK) != 0) {
+		int column = (int)/*64*/widget.columnAtPoint(pt);
+		NSCell cell = widget.preparedCellAtColumn(column, row);
+		if (cell != null && cell.isKindOfClass(OS.class_NSButtonCell) && cell.isEnabled()) {
+			NSRect checkRect = cell.imageRectForBounds(widget.frameOfCellAtColumn(column, row));
+			if (OS.NSPointInRect(pt, checkRect)) {
+				check = preventSelect = true;
+		    }
+		}
+	}
+	if (!check && row != -1 && (nsEvent.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == 0 && nsEvent.clickCount() == 1) {
 		if (widget.isRowSelected(row)) {
 			NSRect rect = widget.frameOfOutlineCellAtRow(row);
 			if (!OS.NSPointInRect(pt, rect)) {
@@ -1970,7 +2043,6 @@ void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 			}
 		}
 	}
-	display.trackedButtonRow = -1;
 	didSelect = false;
 	super.mouseDownSuper(id, sel, theEvent);
 	didSelect = false;
@@ -2035,61 +2107,35 @@ int /*long*/ outlineView_numberOfChildrenOfItem (int /*long*/ id, int /*long*/ s
 	return ((TreeItem) display.getWidget (item)).itemCount;
 }
 
-boolean outlineView_shouldSelectItem(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ item) {
-	boolean result = true;
-	NSOutlineView tree = new NSOutlineView(aTableView);			
+boolean outlineView_shouldExpandItem_item (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	return shouldExpand;
+}
 
-	if ((style & SWT.SINGLE) != 0) {
-		/*
-		 * Feature in Cocoa.  Calling setAllowsEmptySelection will automatically select the first row of the list. 
-		 * This is normal platform behavior, but for compatibility with other platforms, if the SINGLE style is in use,
-		 * force a selection by seeing if the proposed selection set is empty, and if so, put back the currently selected row.  
-		 */
-		NSIndexSet indexes = tree.selectedRowIndexes();
-		if (indexes.count() != 1 && tree.selectedRow() != -1) {
-			return false;
-		}
+boolean outlineView_shouldReorderColumn_toColumn(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ currentColIndex, int /*long*/ newColIndex) {
+	// Check column should never move and no column can be dragged to the left of it, if present.
+	if ((style & SWT.CHECK) != 0) {
+		if (currentColIndex == 0) return false;
+		if (newColIndex == 0) return false;
 	}
-
-	// If a checkbox is being tracked don't select the row.
-	if (display.trackedButtonRow != -1) return false;
-	int /*long*/ clickedCol = tree.clickedColumn();
-	int /*long*/ clickedRow = tree.clickedRow();
-	if (clickedRow >= 0 && clickedCol >= 0) {
-		NSCell cell = tree.preparedCellAtColumn(clickedCol, clickedRow);
-		if (cell.isKindOfClass(OS.class_NSButtonCell) && cell.isEnabled()) {
-			NSRect cellFrame = tree.frameOfCellAtColumn(clickedCol, clickedRow);
-			NSRect imageFrame = cell.imageRectForBounds(cellFrame);
-			NSPoint hitPoint = tree.convertPoint_fromView_(NSApplication.sharedApplication().currentEvent().locationInWindow(), null);
-			result = ! OS.NSPointInRect(hitPoint, imageFrame) || didSelect;
-		}            
+	
+	NSOutlineView widget = new NSOutlineView(aTableView);
+	id nsColumn = widget.tableColumns().objectAtIndex(currentColIndex);
+	for (int i = 0; i < columnCount; i++) {
+		if (columns[i].nsColumn.id == nsColumn.id) {
+			return columns[i].movable;
+		}
 	}
-	return result;
+	
+	return true;
 }
 
-boolean outlineView_shouldTrackCell_forTableColumn_item(int /*long*/ id, int /*long*/ sel,
-		int /*long*/ table, int /*long*/ cell, /*long*/ int /*long*/ tableColumn, int /*long*/ item) {
-	NSCell theCell = new NSCell(cell);
-	NSOutlineView tableView = (NSOutlineView)view;
-	int /*long*/ rowIndex = tableView.rowForItem(new id(item));
-	if (theCell.isKindOfClass(OS.class_NSButtonCell)) {
-		// Allow tracking of the checkbox area of the button, not the text itself.
-		int columnIndex = 0;
-		for (int i=0; i<columnCount; i++) {
-			if (columns [i].nsColumn.id == tableColumn) {
-				columnIndex = i;
-				break;
-			}
-		}
-		NSRect cellFrame = tableView.frameOfCellAtColumn(columnIndex, rowIndex);
-		NSRect imageFrame = theCell.imageRectForBounds(cellFrame);
-		NSPoint hitPoint = tableView.convertPoint_fromView_(NSApplication.sharedApplication().currentEvent().locationInWindow(), null);
-		boolean shouldTrack = OS.NSPointInRect(hitPoint, imageFrame) && (display.trackedButtonRow == -1 || display.trackedButtonRow == rowIndex) && !didSelect;
-		if (OS.NSPointInRect(hitPoint, imageFrame) && display.trackedButtonRow == -1 && !didSelect) display.trackedButtonRow = rowIndex;
-		return shouldTrack;
-	} else {
-		return tableView.isRowSelected(rowIndex);
+boolean outlineView_shouldTrackCell_forTableColumn_item(int /*long*/ id, int /*long*/ sel, int /*long*/ table, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ item) {
+	if ((style & SWT.CHECK) != 0) {
+		if (new NSCell(cell).isKindOfClass(OS.class_NSButtonCell)) return true;
 	}
+	NSOutlineView widget = (NSOutlineView)view;
+	int /*long*/ rowIndex = widget.rowForItem(new id(item)); 
+	return widget.isRowSelected(rowIndex);
 }
 
 void outlineView_willDisplayCell_forTableColumn_item (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ itemID) {
@@ -2171,14 +2217,6 @@ void outlineViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ a
 	int oldIndex = new NSNumber (nsOldIndex).intValue ();
 	int newIndex = new NSNumber (nsNewIndex).intValue ();
 	NSOutlineView outlineView = (NSOutlineView)view;
-	if (checkColumn != null && newIndex == 0) {
-		newIndex = 1;
-		NSNotificationCenter defaultCenter = NSNotificationCenter.defaultCenter();
-		defaultCenter.removeObserver(view, OS.NSOutlineViewColumnDidMoveNotification, null);
-		outlineView.moveColumn(0, newIndex);
-		defaultCenter.addObserver(view,  OS.sel_outlineViewColumnDidMove_, OS.NSOutlineViewColumnDidMoveNotification, null);
-		if (oldIndex == newIndex) return;
-	}
 	int startIndex = Math.min (oldIndex, newIndex);
 	int endIndex = Math.max (oldIndex, newIndex);
 	NSArray nsColumns = outlineView.tableColumns ();
@@ -2190,6 +2228,7 @@ void outlineViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ a
 			if (isDisposed ()) return;
 		}
 	}
+	headerView.setNeedsDisplay(true);
 }
 
 void outlineViewColumnDidResize (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
@@ -2221,6 +2260,21 @@ void outlineViewColumnDidResize (int /*long*/ id, int /*long*/ sel, int /*long*/
 	}
 }
 
+void scrollClipViewToPoint (int /*long*/ id, int /*long*/ sel, int /*long*/ clipView, NSPoint point) {
+	if (shouldScroll) {
+		super.scrollClipViewToPoint(id, sel, clipView, point);
+		if ((style & SWT.CHECK) != 0 && columnCount > 0 && ((NSOutlineView) view).headerView () != null) {
+			if (point.x <= getCheckColumnWidth()) {
+				/* 
+				 * Header of first column is extended as header of the checkbox column.
+				 * So, redraw header of first column when check column is scrolled to be visible.
+				 */
+				headerView.setNeedsDisplayInRect(headerView.headerRectOfColumn(1));
+			}
+		}
+	}
+}
+
 void sendSelection () {
 	if (ignoreSelect) return;
 	NSOutlineView widget = (NSOutlineView) view;
@@ -2483,9 +2537,19 @@ public void select (TreeItem item) {
 	set.release();
 }
 
+void selectRowIndexes_byExtendingSelection (int /*long*/ id, int /*long*/ sel, int /*long*/ indexes, boolean extend) {
+	if (preventSelect && !ignoreSelect) return;
+	if ((style & SWT.SINGLE) != 0 && !ignoreSelect) {
+		NSIndexSet set = new NSIndexSet(indexes);
+		if (set.count() == 0) return;
+	}
+	super.selectRowIndexes_byExtendingSelection (id, sel, indexes, extend);
+}
+
 void sendDoubleSelection() {
 	NSOutlineView outlineView = (NSOutlineView)view;
 	int rowIndex = (int)/*64*/outlineView.clickedRow (); 
+	if (rowIndex == -1) rowIndex = (int)/*64*/outlineView.selectedRow ();
 	if (rowIndex != -1) {
 		if ((style & SWT.CHECK) != 0) {
 			NSArray columns = outlineView.tableColumns ();
@@ -2510,14 +2574,14 @@ boolean sendKeyEvent (NSEvent nsEvent, int type) {
 	switch (keyCode) {
 		case 76: /* KP Enter */
 		case 36: { /* Return */
-			sendSelectionEvent (SWT.DefaultSelection);
+			sendDoubleSelection();
 			break;
 		}
 	}
 	return result;
 }
 
-void sendMeasureItem (TreeItem item, int columnIndex, NSSize size) {
+void sendMeasureItem (TreeItem item, boolean selected, int columnIndex, NSSize size) {
 	NSOutlineView widget = (NSOutlineView)this.view;
 	int contentWidth = (int)Math.ceil (size.width);
 	NSSize spacing = widget.intercellSpacing();
@@ -2532,6 +2596,7 @@ void sendMeasureItem (TreeItem item, int columnIndex, NSSize size) {
 	event.index = columnIndex;
 	event.width = contentWidth;
 	event.height = itemHeight;
+	if (selected && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus())) event.detail |= SWT.SELECTED;
 	sendEvent (SWT.MeasureItem, event);
 	gc.dispose ();
 	if (!isDisposed () && !item.isDisposed ()) {
@@ -2689,6 +2754,7 @@ void setFont (NSFont font) {
 public void setHeaderVisible (boolean show) {
 	checkWidget ();
 	((NSOutlineView) view).setHeaderView (show ? headerView : null);
+	scrollView.tile();
 }
 
 /**
@@ -2872,6 +2938,14 @@ boolean setScrollWidth (TreeItem item) {
 	return false;
 }
 
+void setShouldExpandItem (int /*long*/ id, int /*long*/ sel, boolean shouldExpand) {
+	this.shouldExpand = shouldExpand;
+}
+
+void setShouldScrollClipView (int /*long*/ id, int /*long*/ sel, boolean shouldScroll) {
+	this.shouldScroll = shouldScroll;
+}
+
 /**
  * Sets the receiver's selection to the given item.
  * The current selection is cleared before the new item is selected.
@@ -2939,12 +3013,6 @@ public void setSelection (TreeItem [] items) {
 	}
 }
 
-void setSmallSize () {
-	if (checkColumn == null) return;
-	checkColumn.dataCell ().setControlSize (OS.NSSmallControlSize);
-	checkColumn.setWidth (getCheckColumnWidth ());
-}
-
 /**
  * Sets the column used by the sort indicator for the receiver. A null
  * value will clear the sort indicator.  The current sort column is cleared 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeColumn.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java
old mode 100644
new mode 100755
index 7f53aea..826b366
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -276,6 +276,7 @@ int calculateWidth (int index, GC gc) {
 		int height = (int)widget.rowHeight ();
 		event.width = width;
 		event.height = height;
+		event.detail = (cell.isHighlighted() && ((style & SWT.HIDE_SELECTION) == 0 || parent.hasFocus()))  ? SWT.SELECTED : 0;
 		parent.sendEvent (SWT.MeasureItem, event);
 		if (height < event.height) {
 			widget.setRowHeight (event.height);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
old mode 100644
new mode 100755
index 9f13e55..e998ef1
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,9 +79,9 @@ public abstract class Widget {
 	static final int FOREIGN_HANDLE = 1<<17;
 	static final int DRAG_DETECT = 1<<18;
 
-	/* Safari fixes */
-	static final int SAFARI_EVENTS_FIX = 1<<19;
-	static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$
+	/* WebKit fixes */
+	static final int WEBKIT_EVENTS_FIX = 1<<19;
+	static final String WEBKIT_EVENTS_FIX_KEY = "org.eclipse.swt.internal.webKitEventsFix"; //$NON-NLS-1$
 	static final String GLCONTEXT_KEY = "org.eclipse.swt.internal.cocoa.glcontext"; //$NON-NLS-1$
 	
 	static final String IS_ACTIVE = "org.eclipse.swt.internal.isActive"; //$NON-NLS-1$
@@ -259,6 +259,9 @@ boolean canBecomeKeyWindow (int /*long*/ id, int /*long*/ sel) {
 	return callSuperBoolean (id, sel);
 }
 
+void cancelOperation(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+}
+
 NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
 	NSSize result = new NSSize();
 	objc_super super_struct = new objc_super();
@@ -268,6 +271,15 @@ NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
 	return result;
 }
 
+NSSize cellSizeForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	NSSize result = new NSSize();
+	OS.objc_msgSendSuper_stret(result, super_struct, sel, cellFrame);
+	return result;
+}
+
 boolean callSuperBoolean(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
 	objc_super super_struct = new objc_super();
 	super_struct.receiver = id;
@@ -296,15 +308,40 @@ int /*long*/ callSuperObject(int /*long*/ id, int /*long*/ sel, int /*long*/ arg
 	return OS.objc_msgSendSuper(super_struct, sel, arg0);
 }
 
-boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
-	// Trees/tables are not draggable unless explicitly told they are.
-	return false;
+int /*long*/ callSuperObject(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg0, arg1);
+}
+
+NSRect callSuperRect(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	NSRect result = new NSRect();
+	OS.objc_msgSendSuper_stret(result, super_struct, sel, arg0);
+	return result;
+}
+
+boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ rowIndexes, NSPoint mouseDownPoint) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper_bool(super_struct, sel, rowIndexes, mouseDownPoint);
 }
 
 int /*long*/ characterIndexForPoint (int /*long*/ id, int /*long*/ sel, int /*long*/ point) {
 	return OS.NSNotFound;
 }
 
+int /*long*/ columnAtPoint(int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, point);
+}
+
 boolean acceptsFirstMouse (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	objc_super super_struct = new objc_super();
 	super_struct.receiver = id;
@@ -625,6 +662,14 @@ public void dispose () {
 	release (true);
 }
 
+void deselectAll(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	callSuper(id, sel, sender);
+}
+
+void deselectRow(int /*long*/ id, int /*long*/ sel, int /*long*/ index) {
+	callSuper(id, sel, index);
+}
+
 void doCommandBySelector (int /*long*/ id, int /*long*/ sel, int /*long*/ aSelector) {
 	callSuper (id, sel, aSelector);
 }
@@ -642,6 +687,16 @@ void drawBackgroundInClipRect(int /*long*/ id, int /*long*/ sel, NSRect rect) {
 }
 
 void drawImageWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ image, NSRect rect, int /*long*/ view) {
+	callSuper(id, sel, image, rect, view);
+}
+
+NSRect drawTitleWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ title, NSRect rect, int /*long*/ view) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	NSRect result = new NSRect();
+	OS.objc_msgSendSuper_stret(result, super_struct, sel, title, rect, view);
+	return result;
 }
 
 void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellFrame, int /*long*/ view) {
@@ -698,6 +753,10 @@ void _drawThemeProgressArea (int /*long*/ id, int /*long*/ sel, int /*long*/ arg
 void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
 }
 
+int /*long*/ imageView () {
+	return 0;
+}
+
 void redrawWidget (NSView view, boolean children) {
 	view.setNeedsDisplay(true);
 }
@@ -907,6 +966,10 @@ boolean hasMarkedText (int /*long*/ id, int /*long*/ sel) {
 	return false;
 }
 
+NSRect headerRectOfColumn (int /*long*/ id, int /*long*/ sel, int /*long*/ column) {
+	return callSuperRect(id, sel, column);
+}
+
 void helpRequested(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 }
 
@@ -1021,6 +1084,10 @@ void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	mouseDownSuper(id, sel, theEvent);
 }
 
+boolean mouseDownCanMoveWindow(int /*long*/ id, int /*long*/ sel) {
+	return callSuperBoolean(id, sel);
+}
+
 void mouseDownSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	callSuper(id, sel, theEvent);
 }
@@ -1138,6 +1205,22 @@ int /*long*/ outlineView_numberOfChildrenOfItem(int /*long*/ id, int /*long*/ se
 	return 0;
 }
 
+boolean outlineView_shouldExpandItem_item(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ item) {
+	return true;
+}
+
+boolean outlineView_shouldReorderColumn_toColumn(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ columnIndex, int /*long*/ newColumnIndex) {
+	return true;
+}
+
+boolean outlineView_shouldEditTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ item) {
+	return false;
+}
+
+boolean outlineView_shouldTrackCell_forTableColumn_item(int /*long*/ id, int /*long*/ sel, int /*long*/ table, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ item) {
+	return true;
+}
+
 void outlineView_willDisplayCell_forTableColumn_item(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ item) {
 }
 
@@ -1156,14 +1239,6 @@ void outlineViewSelectionIsChanging(int /*long*/ id, int /*long*/ sel, int /*lon
 void outlineView_setObjectValue_forTableColumn_byItem(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ object, int /*long*/ tableColumn, int /*long*/ item) {
 }
 
-boolean outlineView_shouldTrackCell_forTableColumn_item(int /*long*/ id, int /*long*/ sel, int /*long*/ table, int /*long*/ cell, /*long*/ int /*long*/ tableColumn, int /*long*/ item) {
-	return true;
-}
-
-boolean outlineView_shouldSelectItem(int /*long*/ id, int /*long*/ sel, int /*long*/ tableView, int /*long*/ index) {
-	return true;
-}
-
 boolean outlineView_writeItems_toPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
 	return false;
 }
@@ -1352,6 +1427,13 @@ void scrollClipViewToPoint (int /*long*/ id, int /*long*/ sel, int /*long*/ clip
 	OS.objc_msgSendSuper(super_struct, sel, clipView, point);
 }
 
+void selectRowIndexes_byExtendingSelection (int /*long*/ id, int /*long*/ sel, int /*long*/ indexes, boolean extend) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, indexes, extend);
+}
+
 void scrollWheel (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
 	callSuper(id, sel, theEvent);
 }
@@ -1402,7 +1484,7 @@ void sendEvent (int eventType, Event event, boolean send) {
 }
 
 boolean sendKeyEvent (NSEvent nsEvent, int type) {
-	if ((state & SAFARI_EVENTS_FIX) != 0) return true;
+	if ((state & WEBKIT_EVENTS_FIX) != 0) return true;
 	Event event = new Event ();
 	if (!setKeyState (event, type, nsEvent)) return true;
 	return sendKeyEvent (type, event);
@@ -1475,8 +1557,8 @@ void sendVerticalSelection () {
  */
 public void setData (Object data) {
 	checkWidget();
-	if (SAFARI_EVENTS_FIX_KEY.equals (data)) {
-		state |= SAFARI_EVENTS_FIX;
+	if (WEBKIT_EVENTS_FIX_KEY.equals (data)) {
+		state |= WEBKIT_EVENTS_FIX;
 		return;
 	}
 	if ((state & KEYED_DATA) != 0) {
@@ -1590,30 +1672,14 @@ boolean setInputState (Event event, NSEvent nsEvent, int type) {
 	if ((modifierFlags & OS.NSShiftKeyMask) != 0) event.stateMask |= SWT.SHIFT;
 	if ((modifierFlags & OS.NSControlKeyMask) != 0) event.stateMask |= SWT.CONTROL;
 	if ((modifierFlags & OS.NSCommandKeyMask) != 0) event.stateMask |= SWT.COMMAND;
-	//TODO multiple mouse buttons pressed
-	switch ((int)/*64*/nsEvent.type()) {
-		case OS.NSLeftMouseDragged:
-		case OS.NSRightMouseDragged:
-		case OS.NSOtherMouseDragged:
-			switch ((int)/*64*/nsEvent.buttonNumber()) {
-				case 0: event.stateMask |= SWT.BUTTON1; break;
-				case 1: event.stateMask |= SWT.BUTTON3; break;
-				case 2: event.stateMask |= SWT.BUTTON2; break;
-				case 3: event.stateMask |= SWT.BUTTON4; break;
-				case 4: event.stateMask |= SWT.BUTTON5; break;
-			}
-			break;
-		case OS.NSScrollWheel:
-		case OS.NSKeyDown:
-		case OS.NSKeyUp:
-			int state = OS.GetCurrentButtonState ();
-			if ((state & 0x1) != 0) event.stateMask |= SWT.BUTTON1;
-			if ((state & 0x2) != 0) event.stateMask |= SWT.BUTTON3;
-			if ((state & 0x4) != 0) event.stateMask |= SWT.BUTTON2;
-			if ((state & 0x8) != 0) event.stateMask |= SWT.BUTTON4;
-			if ((state & 0x10) != 0) event.stateMask |= SWT.BUTTON5;
-			break;
-	}
+	
+	int state = OS.GetCurrentEventButtonState ();
+	if ((state & 0x1) != 0) event.stateMask |= SWT.BUTTON1;
+	if ((state & 0x2) != 0) event.stateMask |= SWT.BUTTON3;
+	if ((state & 0x4) != 0) event.stateMask |= SWT.BUTTON2;
+	if ((state & 0x8) != 0) event.stateMask |= SWT.BUTTON4;
+	if ((state & 0x10) != 0) event.stateMask |= SWT.BUTTON5;
+
 	switch (type) {
 		case SWT.MouseDown:
 		case SWT.MouseDoubleClick:
@@ -1679,8 +1745,6 @@ boolean setKeyState (Event event, int type, NSEvent nsEvent) {
 				int /*long*/ uchrCFData = OS.TISGetInputSourceProperty(currentKbd, OS.kTISPropertyUnicodeKeyLayoutData());
 				
 				if (uchrCFData != 0) {
-					// If the keyboard changed since the last keystroke clear the dead key state.
-					if (uchrCFData != display.currentKeyboardUCHRdata) display.deadKeyState[0] = 0;
 					uchrPtr = OS.CFDataGetBytePtr(uchrCFData);
 					
 					if (uchrPtr != 0 && OS.CFDataGetLength(uchrCFData) > 0) {
@@ -1690,7 +1754,8 @@ boolean setKeyState (Event event, int type, NSEvent nsEvent) {
 						int maxStringLength = 256;
 						char [] output = new char [maxStringLength];
 						int [] actualStringLength = new int [1];
-						OS.UCKeyTranslate (uchrPtr, (short)keyCode, (short)OS.kUCKeyActionDown, 0, (int)keyboardType, 0, display.deadKeyState, maxStringLength, actualStringLength, output);
+						int [] deadKeyState = new int[1];
+						OS.UCKeyTranslate (uchrPtr, (short)keyCode, (short)(event.type == SWT.KeyDown ? OS.kUCKeyActionDown : OS.kUCKeyActionUp), 0, (int)keyboardType, 0, deadKeyState, maxStringLength, actualStringLength, output);
 						if (actualStringLength[0] < 1) {
 							// part of a multi-key key
 							event.keyCode = 0;
@@ -1799,6 +1864,12 @@ void setObjectValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
 	callSuper(id, sel, arg0);
 }
 
+void setShouldExpandItem(int /*long*/ id, int /*long*/ sel, boolean shouldExpand) {
+}
+
+void setShouldScrollClipView(int /*long*/ id, int /*long*/ sel, boolean shouldScroll) {
+}
+
 boolean setTabGroupFocus () {
 	return setTabItemFocus ();
 }
@@ -1847,10 +1918,6 @@ int /*long*/ tableView_objectValueForTableColumn_row(int /*long*/ id, int /*long
 	return 0;
 }
 
-boolean tableView_shouldTrackCell_forTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ table, int /*long*/ cell, /*long*/ int /*long*/ tableColumn, int /*long*/ rowIndex) {
-	return true;
-}
-
 boolean tableView_shouldSelectRow(int /*long*/ id, int /*long*/ sel, int /*long*/ tableView, int /*long*/ index) {
 	return true;
 }
@@ -1858,7 +1925,15 @@ boolean tableView_shouldSelectRow(int /*long*/ id, int /*long*/ sel, int /*long*
 void tableView_setObjectValue_forTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ anObject, int /*long*/ aTableColumn, int /*long*/ rowIndex) {	
 }
 
+boolean tableView_shouldReorderColumn_toColumn(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ columnIndex, int /*long*/ newColumnIndex) {
+	return true;
+}
+
 boolean tableView_shouldEditTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	return false;
+}
+
+boolean tableView_shouldTrackCell_forTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ table, int /*long*/ cell, /*long*/ int /*long*/ tableColumn, int /*long*/ rowIndex) {
 	return true;
 }
 
@@ -1889,6 +1964,21 @@ NSRect titleRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame)
 	return result;
 }
 
+int /*long*/ toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar, int /*long*/ itemID, boolean flag) {
+	return 0;
+}
+
+int /*long*/ toolbarAllowedItemIdentifiers(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar) {
+	return 0;
+}
+
+int /*long*/ toolbarDefaultItemIdentifiers(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar) {
+	return 0;
+}
+
+int /*long*/ toolbarSelectableItemIdentifiers(int /*long*/ id, int /*long*/ sel, int /*long*/ toolbar) {
+	return 0;
+}
 String tooltipText () {
 	return null;
 }
@@ -1908,6 +1998,42 @@ public String toString () {
 	return getName () + " {" + string + "}";
 }
 
+void touchesBeganWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void touchesCancelledWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void touchesEndedWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void touchesMovedWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void beginGestureWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void endGestureWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void magnifyWithEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void rotateWithEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
+void swipeWithEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);	
+}
+
 void resetCursorRects (int /*long*/ id, int /*long*/ sel) {
 	callSuper (id, sel);
 }
@@ -1930,6 +2056,10 @@ boolean tableView_writeRowsWithIndexes_toPasteboard(int /*long*/ id, int /*long*
 	return false;
 }
 
+boolean validateMenuItem(int /*long*/ id, int /*long*/ sel, int /*long*/ menuItem) {
+	return true;
+}
+
 int /*long*/ view_stringForToolTip_point_userData (int /*long*/ id, int /*long*/ sel, int /*long*/ view, int /*long*/ tag, int /*long*/ point, int /*long*/ userData) {
 	return 0;
 }
@@ -1937,6 +2067,9 @@ int /*long*/ view_stringForToolTip_point_userData (int /*long*/ id, int /*long*/
 void viewDidMoveToWindow(int /*long*/ id, int /*long*/ sel) {	
 }
 
+void viewWillMoveToWindow(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {	
+}
+
 void windowDidMove(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
 }
 
@@ -1977,4 +2110,16 @@ boolean shouldDrawInsertionPoint(int /*long*/ id, int /*long*/ sel) {
 	return callSuperBoolean(id, sel);
 }
 
+boolean readSelectionFromPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ pasteboard) {
+	return false;
+}
+
+int /*long*/ validRequestorForSendType(int /*long*/ id, int /*long*/ sel, int /*long*/ sendType, int /*long*/ returnType) {
+	return callSuperObject(id, sel, sendType, returnType);
+}
+
+boolean writeSelectionToPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ pasteboard, int /*long*/ types) {
+	return false;
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/callback.c b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/callback.c
old mode 100644
new mode 100755
index a344d01..73d9851
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/callback.c	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/callback.c	
@@ -26,9 +26,6 @@ static int callbackEnabled = 1;
 static int callbackEntryCount = 0;
 static int initialized = 0;
 static jint JNI_VERSION = 0;
-#ifdef COCOA
-static NSException *nsException = nil;
-#endif
 
 #ifdef DEBUG_CALL_PRINTS
 static int counter = 0;
@@ -1247,13 +1244,6 @@ jintLong callback(int index, ...)
 	va_end(vl);
 	ATOMIC_DEC(callbackEntryCount);
 
-#ifdef COCOA
-	if (callbackEntryCount == 0 && nsException) {
-		[nsException release];
-		nsException = nil;
-	}
-#endif
-				
 done:
 	/* If an exception has occurred in Java, return the error result. */
 	if ((ex = (*env)->ExceptionOccurred(env))) {
@@ -1263,12 +1253,6 @@ done:
 		(*env)->ExceptionDescribe(env);
 #endif
 		result = callbackData[index].errorResult;
-#ifdef COCOA
-		if (nsException == NULL) {
-			nsException = [[NSException alloc] initWithName:NSGenericException reason:@"Java exception occurred" userInfo:nil];
-			[nsException raise];
-		}
-#endif
 	}
 
 	if (detach) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/callback.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/callback.h
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak
index 7182563..edb5f04 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/make_common.mak	
@@ -1,5 +1,5 @@
 #*******************************************************************************
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,5 +10,5 @@
 #*******************************************************************************
 
 maj_ver=3
-min_ver=659
-comma_ver=3,6,5,9
+min_ver=735
+comma_ver=3,7,3,5
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/swt.h b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/swt.h
index 55756a6..67b75b6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/swt.h	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/library/swt.h	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java
old mode 100644
new mode 100755
index 8d7c355..ae95091
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWT.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -715,6 +715,39 @@ public class SWT {
 	 */
 	public static final int OpenDocument = 46;
 	
+	/**
+	 * The touch event type (value is 47).
+	 * 
+	 * <p>
+	 * This event is sent when a touch has been performed
+	 * on a touch-based input source.
+	 * </p>
+	 *
+     * @see org.eclipse.swt.widgets.Display#addListener
+     * @see org.eclipse.swt.widgets.Event
+     * 
+     * @since 3.7
+	 */
+	public static final int Touch = 47;
+
+	/**
+	 * The gesture event type (value is 48).
+	 * 
+	 * <p>
+	 * This event is sent when a gesture has been performed.
+	 * </p>
+	 *  
+     * @see org.eclipse.swt.widgets.Display#addListener
+     * @see org.eclipse.swt.widgets.Event
+     * @see SWT#GESTURE_MAGNIFY
+     * @see SWT#GESTURE_PAN
+     * @see SWT#GESTURE_ROTATE
+     * @see SWT#GESTURE_SWIPE
+     * 
+     * @since 3.7
+	 */
+	public static final int Gesture = 48;
+
 	/* Event Details */
 	
 	/**
@@ -897,6 +930,82 @@ public class SWT {
 	 * (value is 1<<9).
 	 */
 	public static final int TRAVERSE_PAGE_NEXT = 1 << 9;
+
+	/**
+	 * Gesture event detail field value indicating that a continuous
+	 * gesture is about to begin.
+	 * 
+	 * @since 3.7
+	 */
+	public static final int GESTURE_BEGIN = 1 << 1;
+
+	/**
+	 * Gesture event detail field value indicating that a continuous 
+	 * gesture has ended.
+	 * 
+	 * @since 3.7
+	 */
+	public static final int GESTURE_END = 1 << 2;
+
+	/**
+	 * Gesture event detail field value indicating that a 
+	 * rotation gesture has happened. Only the rotation field
+	 * of the event is valid.
+	 * 
+	 * @since 3.7
+	 */
+	public static final int GESTURE_ROTATE = 1 << 3;
+	
+	/**
+	 * Gesture event detail field value indicating that a 
+	 * swipe gesture has happened.
+	 * 
+	 * @since 3.7
+	 */
+	public static final int GESTURE_SWIPE = 1 << 4;
+	
+	/**
+	 * Gesture event detail field value indicating that a 
+	 * magnification gesture has happened.
+	 * 
+	 * @since 3.7
+	 */
+	public static final int GESTURE_MAGNIFY = 1 << 5;
+	
+	/**
+	 * Gesture event detail field value indicating that a 
+	 * panning (two-finger scroll) gesture has happened.
+	 * 
+	 * @since 3.7
+	 */
+	public static final int GESTURE_PAN = 1 << 6;
+	
+	/**
+	 * A constant indicating that a finger touched the device.  
+	 * 
+	 * @see org.eclipse.swt.widgets.Touch#state
+	 * 
+	 * @since 3.7
+	 */
+	public static final int TOUCHSTATE_DOWN = 1 << 0;
+
+	/**
+	 * A constant indicating that a finger moved on the device.
+	 * 
+	 * @see org.eclipse.swt.widgets.Touch#state
+	 * 
+	 * @since 3.7
+	 */
+	public static final int TOUCHSTATE_MOVE = 1 << 1;
+
+	/**
+	 * A constant indicating that a finger was lifted from the device. 
+	 * 
+	 * @see org.eclipse.swt.widgets.Touch#state
+	 * 
+	 * @since 3.7
+	 */
+	public static final int TOUCHSTATE_UP = 1 << 2;
 	
 	/**
 	 * A constant indicating that widgets have changed.
@@ -981,7 +1090,6 @@ public class SWT {
 
 	/**
 	 * Style constant for drop down menu/list behavior (value is 1<<2).
-	 * <br>Note that for <code>DateTime</code> this is a <em>HINT</em>.
 	 * <p><b>Used By:</b><ul>
 	 * <li><code>Menu</code></li>
 	 * <li><code>ToolItem</code></li>
@@ -1010,6 +1118,16 @@ public class SWT {
 	 */
 	public static final int SEPARATOR = 1 << 1;
 
+    /**
+     * Constant representing a flexible space separator in a ToolBar.
+	 * <p><b>Used By:</b><ul>
+	 * <li><code>ToolItem.setWidth()</code></li>
+	 * </ul></p>
+	 *
+	 * @since 3.7
+     */
+    public static final int SEPARATOR_FILL = -2;
+
 	/**
 	 * Style constant for toggle button behavior (value is 1<<1).
 	 * <p><b>Used By:</b><ul>
@@ -1123,6 +1241,7 @@ public class SWT {
 
 	/**
 	 * Style constant for simple (not drop down) behavior (value is 1<<6).
+	 * <br>Note that this is a <em>HINT</em>.
 	 * <p><b>Used By:</b><ul>
 	 * <li><code>Combo</code></li>
 	 * </ul></p>
@@ -1940,6 +2059,18 @@ public class SWT {
 	public static final int MOZILLA = 1 << 15;
 
 	/**
+	 * Style constant specifying that a Browser should use WebKit
+	 * for rendering its content (value is 1<<16).
+	 * <p>
+	 * <p><b>Used By:</b><ul>
+	 * <li><code>Browser</code></li>
+	 * </ul></p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final int WEBKIT = 1 << 16;
+
+	/**
 	 * Style constant for balloon behavior (value is 1<<12).
 	 * <p><b>Used By:</b><ul>
 	 * <li><code>ToolTip</code></li>
@@ -2034,6 +2165,14 @@ public class SWT {
 	public static final char TAB = '\t';
 						
 	/**
+	 * ASCII character convenience constant for the space character
+	 * (value is the <code>char</code> ' ').
+	 * 
+	 * @since 3.7
+	 */
+	public static final char SPACE = ' ';
+						
+	/**
 	 * keyboard and/or mouse event mask indicating that the ALT key
 	 * was pushed on the keyboard when the event was generated
 	 * (value is 1<<16).
@@ -3850,6 +3989,66 @@ public class SWT {
 	public static final int ALL = 1 << 0;
 	
 	/**
+	 * ID for the About menu item (value is -1).
+	 * 
+	 * @see org.eclipse.swt.widgets.MenuItem#setID(int)
+	 * @see org.eclipse.swt.widgets.MenuItem#getID()
+	 * 
+	 * @since 3.7
+	 */
+	public static final int ID_ABOUT = -1;
+
+	/**
+	 * ID for the Preferences menu item (value is -2).
+	 * 
+	 * @see org.eclipse.swt.widgets.MenuItem#setID(int)
+	 * @see org.eclipse.swt.widgets.MenuItem#getID()
+	 * 
+	 * @since 3.7
+	 */
+	public static final int ID_PREFERENCES = -2;
+
+	/**
+	 * ID for the Hide menu item (value is -3).
+	 * 
+	 * @see org.eclipse.swt.widgets.MenuItem#setID(int)
+	 * @see org.eclipse.swt.widgets.MenuItem#getID()
+	 * 
+	 * @since 3.7
+	 */
+	public static final int ID_HIDE = -3;
+
+	/**
+	 * ID for the Hide Others menu item (value is -4).
+	 * 
+	 * @see org.eclipse.swt.widgets.MenuItem#setID(int)
+	 * @see org.eclipse.swt.widgets.MenuItem#getID()
+	 * 
+	 * @since 3.7
+	 */
+	public static final int ID_HIDE_OTHERS = -4;
+	
+	/**
+	 * ID for the Show All menu item (value is -5).
+	 * 
+	 * @see org.eclipse.swt.widgets.MenuItem#setID(int)
+	 * @see org.eclipse.swt.widgets.MenuItem#getID()
+	 * 
+	 * @since 3.7
+	 */
+	public static final int ID_SHOW_ALL = -5;
+	
+	/**
+	 * ID for the Quit menu item (value is -6).
+	 * 
+	 * @see org.eclipse.swt.widgets.MenuItem#setID(int)
+	 * @see org.eclipse.swt.widgets.MenuItem#getID()
+	 * 
+	 * @since 3.7
+	 */
+	public static final int ID_QUIT = -6;
+
+	/**
 	 * Key value for setting and getting the skin class of a widget. 
 	 * 
 	 * @see org.eclipse.swt.widgets.Widget#getData(String)
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWTError.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWTError.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWTException.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/SWTException.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ArmEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ArmEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ArmListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ArmListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ControlAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ControlAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ControlEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ControlEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ControlListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ControlListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DisposeEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DisposeEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DisposeListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DisposeListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/FocusAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/FocusAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/FocusEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/FocusEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/FocusListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/FocusListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/GestureEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/GestureEvent.java
new file mode 100644
index 0000000..f6667fd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/GestureEvent.java	
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * Instances of this class are sent in response to
+ * touch-based gestures that are triggered by the user.
+ *
+ * @see GestureListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.7
+ */
+public class GestureEvent extends TypedEvent {
+
+	/**
+	 * The state of the keyboard modifier keys and mouse masks
+	 * at the time the event was generated.
+	 * 
+	 * @see org.eclipse.swt.SWT#MODIFIER_MASK
+	 * @see org.eclipse.swt.SWT#BUTTON_MASK
+	 */
+	public int stateMask;
+
+	/**
+	 * The gesture type.
+	 * <p><ul>
+	 * <li>{@link org.eclipse.swt.SWT#GESTURE_BEGIN}</li>
+	 * <li>{@link org.eclipse.swt.SWT#GESTURE_END}</li>
+	 * <li>{@link org.eclipse.swt.SWT#GESTURE_MAGNIFY}</li>
+	 * <li>{@link org.eclipse.swt.SWT#GESTURE_PAN}</li>
+	 * <li>{@link org.eclipse.swt.SWT#GESTURE_ROTATE}</li>
+	 * <li>{@link org.eclipse.swt.SWT#GESTURE_SWIPE}</li>
+	 * </ul></p>
+	 * 
+	 * This field determines the <code>GestureEvent</code> fields that contain valid data.
+	 */
+	public int detail;
+
+	/**
+	 * The meaning of this field is dependent on the value of the <code>detail</code> field
+	 * and the platform.  It can represent either the x coordinate of the centroid of the
+	 * touches that make up the gesture, or the x coordinate of the cursor at the time the
+	 * gesture was performed. 
+	 */
+	public int x;
+
+	/**
+	 * The meaning of this field is dependent on the value of the <code>detail</code> field
+	 * and the platform.  It can represent either the y coordinate of the centroid of the
+	 * touches that make up the gesture, or the y coordinate of the cursor at the time the
+	 * gesture was performed. 
+	 */
+	public int y;
+
+	/**
+	 * This field is valid when the <code>detail</code> field is set to <code>GESTURE_ROTATE</code>.
+	 * It specifies the number of degrees rotated on the device since the gesture started. Positive
+	 * values indicate counter-clockwise rotation, and negative values indicate clockwise rotation.
+	 */
+	public double rotation;
+
+	/**
+	 * This field is valid when the <code>detail</code> field is set to <code>GESTURE_SWIPE</code>
+	 * or <code>GESTURE_PAN</code>.  Both <code>xDirection</code> and <code>yDirection</code>
+	 * can be valid for an individual gesture.  The meaning of this field is dependent on the value
+	 * of the <code>detail</code> field.
+	 * <p>
+	 * If <code>detail</code> is <code>GESTURE_SWIPE</code> then a positive value indicates a swipe
+	 * to the right and a negative value indicates a swipe to the left.
+	 * 
+	 * If <code>detail</code> is <code>GESTURE_PAN</code> then a positive value indicates a pan to
+	 * the right by this field's count of pixels and a negative value indicates a pan to the left
+	 * by this field's count of pixels. 
+	 */	
+	public int xDirection;
+
+	/**
+	 * This field is valid when the <code>detail</code> field is set to <code>GESTURE_SWIPE</code>
+	 * or <code>GESTURE_PAN</code>.  Both <code>xDirection</code> and <code>yDirection</code>
+	 * can be valid for an individual gesture.  The meaning of this field is dependent on the value
+	 * of the <code>detail</code> field.
+	 * 
+	 * If <code>detail</code> is <code>GESTURE_SWIPE</code> then a positive value indicates a downward
+	 * swipe and a negative value indicates an upward swipe.
+	 * 
+	 * If <code>detail</code> is <code>GESTURE_PAN</code> then a positive value indicates a downward
+	 * pan by this field's count of pixels and a negative value indicates an upward pan by this
+	 * field's count of pixels. 
+	 */	
+	public int yDirection;
+
+	/**
+	 * This field is valid when the <code>detail</code> field is set to <code>GESTURE_MAGNIFY</code>.
+	 * This is the scale factor to be applied. This value will be 1.0 in the first received event with
+	 * <code>GESTURE_MAGNIFY</code>, and will then fluctuate in subsequent events as the user moves
+	 * their fingers.
+	 */
+	public double magnification;
+
+	/**
+	 * This flag indicates whether the operation should be allowed.
+	 * Setting it to <code>false</code> will cancel the operation.
+	 */
+	public boolean doit;
+
+	static final long serialVersionUID = -8348741538373572182L;
+
+/**
+ * Constructs a new instance of this class based on the
+ * information in the given untyped event.
+ *
+ * @param e the untyped event containing the information
+ */
+public GestureEvent(Event e) {
+	super(e);
+	this.stateMask = e.stateMask;
+	this.x = e.x;
+	this.y = e.y;
+	this.detail = e.detail;
+	this.rotation = e.rotation;
+	this.xDirection = e.xDirection;
+	this.yDirection = e.yDirection;
+	this.magnification = e.magnification;
+	this.doit = e.doit;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString() {
+	String string = super.toString ();
+	return string.substring (0, string.length() - 1) // remove trailing '}'
+		+ " stateMask=" + stateMask
+		+ " detail=" + detail
+		+ " x=" + x
+		+ " y=" + y
+		+ " rotation=" + rotation
+		+ " xDirection=" + xDirection
+		+ " yDirection=" + yDirection
+		+ " magnification=" + magnification
+		+ "}";
+}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/GestureListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/GestureListener.java
new file mode 100644
index 0000000..d209263
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/GestureListener.java	
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.*;
+
+/**
+ * Classes which implement this interface provide methods
+ * that deal with the events that are generated as gestures
+ * are triggered by the user interacting with a touch pad or
+ * touch screen.
+ * <p>
+ * After creating an instance of a class that implements
+ * this interface it can be added to a control using the
+ * <code>addGestureListener</code> method and removed using
+ * the <code>removeGestureListener</code> method. When a
+ * gesture is triggered, the appropriate method will be invoked.
+ * </p>
+ *
+ * @see GestureEvent
+ *
+ * @since 3.7
+ */
+public interface GestureListener extends SWTEventListener {
+
+/**
+ * Sent when a recognized gesture has occurred.
+ *
+ * @param e an event containing information about the gesture.
+ */
+public void gesture(GestureEvent e);
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/HelpEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/HelpEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/HelpListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/HelpListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/KeyAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/KeyAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/KeyEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/KeyEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/KeyListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/KeyListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ModifyEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ModifyEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ModifyListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ModifyListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseMoveListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseMoveListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseTrackAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseTrackAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseTrackListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseTrackListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/PaintEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/PaintEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/PaintListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/PaintListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/SelectionAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/SelectionAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/SelectionEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/SelectionEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/SelectionListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/SelectionListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ShellAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ShellAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ShellEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ShellEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ShellListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/ShellListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TouchEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TouchEvent.java
new file mode 100644
index 0000000..ae467a9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TouchEvent.java	
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * Instances of this class are sent in response to
+ * a touch-based input source being touched.
+ *
+ * @see TouchListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.7
+ */
+public class TouchEvent extends TypedEvent {
+
+	/**
+	 * The set of touches representing the state of all contacts with touch input
+	 * device at the time the event was generated.
+	 * 
+	 * @see org.eclipse.swt.widgets.Touch
+	 */
+	public Touch[] touches;
+
+	/**
+	 * The state of the keyboard modifier keys and mouse masks 
+	 * at the time the event was generated.
+	 * 
+	 * @see org.eclipse.swt.SWT#MODIFIER_MASK
+	 * @see org.eclipse.swt.SWT#BUTTON_MASK
+	 */
+	public int stateMask;
+
+	/**
+	 * The widget-relative x coordinate of the pointer
+	 * at the time the touch occurred.
+	 */
+	public int x;
+
+	/**
+	 * The widget-relative y coordinate of the pointer
+	 * at the time the touch occurred.
+	 */	
+	public int y;
+
+	static final long serialVersionUID = -8348741538373572182L;
+	
+/**
+ * Constructs a new instance of this class based on the
+ * information in the given untyped event.
+ *
+ * @param e the untyped event containing the information
+ */
+public TouchEvent(Event e) {
+	super(e);
+	this.touches = e.touches;
+	this.stateMask = e.stateMask;
+	this.x = e.x;
+	this.y = e.y;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString() {
+	String string = super.toString();
+	string = string.substring (0, string.length() - 1); // remove trailing '}'
+	string += " stateMask=" + stateMask
+			+ " x=" + x
+			+ " y=" + y;
+	if (touches != null) {
+		for (int i = 0; i < touches.length; i++) {
+			string += "\n     " + touches[i].toString();
+		}
+		string += "\n";
+	}
+	string += "}";
+	return string;
+}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TouchListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TouchListener.java
new file mode 100644
index 0000000..f0dacf0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TouchListener.java	
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.events;
+
+
+import org.eclipse.swt.internal.*;
+
+/**
+ * Classes which implement this interface provide methods
+ * that deal with the events that are generated as touches
+ * occur on a touch-aware input surface.
+ * <p>
+ * After creating an instance of a class that implements
+ * this interface it can be added to a control using the
+ * <code>addTouchListener</code> method and removed using
+ * the <code>removeTouchListener</code> method. When a
+ * touch occurs or changes state, the <code>touch</code> method
+ * will be invoked.
+ * </p>
+ *
+ * @see TouchEvent
+ * 
+ * @since 3.7
+ */
+public interface TouchListener extends SWTEventListener {
+
+/**
+ * Sent when a touch sequence begins, changes state, or ends.
+ *
+ * @param e an event containing information about the touch
+ */
+public void touch(TouchEvent e);
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TraverseEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TraverseEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TraverseListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TraverseListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TreeAdapter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TreeAdapter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TreeEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TreeEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TreeListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TreeListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TypedEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/TypedEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/VerifyEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/VerifyEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/VerifyListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/VerifyListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/Drawable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/Drawable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoader.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoader.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoaderEvent.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoaderEvent.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoaderListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoaderListener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java
index 6d02341..011d993 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -119,4 +119,61 @@ public LineAttributes(float width, int cap, int join, int style, float[] dash, f
 	this.dashOffset = dashOffset;
 	this.miterLimit = miterLimit;
 }
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode()
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof LineAttributes)) return false;
+	LineAttributes p = (LineAttributes)object;
+	if (p.width != width) return false;
+	if (p.cap != cap) return false;
+	if (p.join != join) return false;
+	if (p.style != style) return false;
+	if (p.dashOffset != dashOffset) return false;
+	if (p.miterLimit != miterLimit) return false;
+	if (p.dash != null && dash != null) {
+		if (p.dash.length != dash.length) return false;
+		for (int i = 0; i < dash.length; i++) {
+			if (p.dash[i] != dash[i]) return false;
+		}
+	} else {
+		if (p.dash != null || dash != null) return false;
+	}
+	return true;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals(Object)
+ */
+public int hashCode () {
+	int hashCode = Float.floatToIntBits(width);
+	hashCode = 31 * hashCode + cap;
+	hashCode = 31 * hashCode + join;
+	hashCode = 31 * hashCode + style;
+	hashCode = 31 * hashCode + Float.floatToIntBits(dashOffset);
+	hashCode = 31 * hashCode + Float.floatToIntBits(miterLimit);
+	if (dash != null) {
+		for (int i = 0; i < dash.length; i++) {
+			hashCode = 31 * hashCode + Float.floatToIntBits(dash[i]);
+		}
+	}
+	return hashCode;
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/PaletteData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/PaletteData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/Point.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/Point.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/RGB.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/RGB.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/Rectangle.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/Rectangle.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/TextStyle.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/TextStyle.java
index 6b7b1cd..769a0f1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/TextStyle.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/TextStyle.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,7 +74,7 @@ public class TextStyle {
 	 * <p> 
 	 * This value should be one of <code>SWT.UNDERLINE_SINGLE</code>,
 	 * <code>SWT.UNDERLINE_DOUBLE</code>, <code>SWT.UNDERLINE_ERROR</code>,
-	 * or <code>SWT.UNDERLINE_SQUIGGLE</code>.
+	 * <code>SWT.UNDERLINE_SQUIGGLE</code>, or <code>SWT.UNDERLINE_LINK</code>.
 	 * </p>
 	 * 
 	 * @see SWT#UNDERLINE_SINGLE
@@ -262,8 +262,8 @@ public int hashCode() {
 	if (background != null) hash ^= background.hashCode();	
 	if (font != null) hash ^= font.hashCode();
 	if (metrics != null) hash ^= metrics.hashCode();
-	if (underline) hash ^= hash;
-	if (strikeout) hash ^= hash;
+	if (underline) hash ^= (hash << 1);
+	if (strikeout) hash ^= (hash << 2);
 	hash ^= rise;
 	if (underlineColor != null) hash ^= underlineColor.hashCode();
 	if (strikeoutColor != null) hash ^= strikeoutColor.hashCode();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/Callback.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/Callback.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/FileFormat.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/FileFormat.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/GIFFileFormat.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/GIFFileFormat.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGAppn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGAppn.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGArithmeticConditioningTable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGArithmeticConditioningTable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGComment.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGComment.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java
index 54d6daa..9a94f8e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -2300,16 +2300,16 @@ static void jinit_d_coef_controller (jpeg_decompress_struct cinfo, boolean need_
 		/* Allocate a full-image virtual array for each component, */
 		/* padded to a multiple of samp_factor DCT blocks in each direction. */
 		/* Note we ask for a pre-zeroed array. */
-		int ci, access_rows;
+		int ci; //, access_rows;
 		jpeg_component_info compptr;
 
 		for (ci = 0; ci < cinfo.num_components; ci++) {
 			compptr = cinfo.comp_info[ci];
-			access_rows = compptr.v_samp_factor;
+			//access_rows = compptr.v_samp_factor;
 //#ifdef BLOCK_SMOOTHING_SUPPORTED
 			/* If block smoothing could be used, need a bigger window */
-			if (cinfo.progressive_mode)
-				access_rows *= 3;
+			//if (cinfo.progressive_mode)
+				//access_rows *= 3;
 //#endif
 			coef.whole_image[ci] = 
 				new short
@@ -3821,7 +3821,7 @@ static int decompress_smooth_data (jpeg_decompress_struct cinfo, byte[][][] outp
 	jpeg_d_coef_controller coef = cinfo.coef;
 	int last_iMCU_row = cinfo.total_iMCU_rows - 1;
 	int block_num, last_block_column;
-	int ci, block_row, block_rows, access_rows;
+	int ci, block_row, block_rows; //, access_rows;
 	short[][][] buffer;
 	short[][] buffer_ptr, prev_block_row, next_block_row;
 	byte[][] output_ptr;
@@ -3862,19 +3862,19 @@ static int decompress_smooth_data (jpeg_decompress_struct cinfo, byte[][][] outp
 		/* Count non-dummy DCT block rows in this iMCU row. */
 		if (cinfo.output_iMCU_row < last_iMCU_row) {
 			block_rows = compptr.v_samp_factor;
-			access_rows = block_rows * 2; /* this and next iMCU row */
+			//access_rows = block_rows * 2; /* this and next iMCU row */
 			last_row = false;
 		} else {
 			/* NB: can't use last_row_height here; it is input-side-dependent! */
 			block_rows = (compptr.height_in_blocks % compptr.v_samp_factor);
 			if (block_rows == 0) block_rows = compptr.v_samp_factor;
-			access_rows = block_rows; /* this iMCU row only */
+			//access_rows = block_rows; /* this iMCU row only */
 			last_row = true;
 		}
 		/* Align the virtual buffer for this component. */
 		int buffer_offset;
 		if (cinfo.output_iMCU_row > 0) {
-			access_rows += compptr.v_samp_factor; /* prior iMCU row too */
+			//access_rows += compptr.v_samp_factor; /* prior iMCU row too */
 			buffer = coef.whole_image[ci];
 			buffer_offset = (cinfo.output_iMCU_row - 1) * compptr.v_samp_factor;
 			buffer_offset += compptr.v_samp_factor;	/* point to current iMCU row */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGEndOfImage.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGEndOfImage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGFileFormat.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGFileFormat.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGFixedSizeSegment.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGFixedSizeSegment.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGFrameHeader.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGFrameHeader.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGHuffmanTable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGHuffmanTable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGQuantizationTable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGQuantizationTable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGRestartInterval.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGRestartInterval.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGScanHeader.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGScanHeader.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGSegment.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGSegment.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGStartOfImage.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGStartOfImage.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGVariableSizeSegment.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGVariableSizeSegment.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LEDataInputStream.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LEDataInputStream.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LEDataOutputStream.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LEDataOutputStream.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LZWCodec.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LZWCodec.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LZWNode.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/LZWNode.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PNGFileFormat.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PNGFileFormat.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngChunk.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngChunk.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngChunkReader.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngChunkReader.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngDecodingDataStream.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngDecodingDataStream.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngFileReadState.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngFileReadState.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngHuffmanTable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngHuffmanTable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngHuffmanTables.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngHuffmanTables.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngIdatChunk.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngIdatChunk.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngIendChunk.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngIendChunk.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngIhdrChunk.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngIhdrChunk.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngLzBlockReader.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngLzBlockReader.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngPlteChunk.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngPlteChunk.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngTrnsChunk.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngTrnsChunk.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/WinBMPFileFormat.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/WinBMPFileFormat.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/WinICOFileFormat.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/WinICOFileFormat.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/FillLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/FillLayout.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridData.java
old mode 100644
new mode 100755
index 3d0bac8..690e58c
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridData.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridLayout.java
old mode 100644
new mode 100755
index 2dd1763..af3b97c
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridLayout.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/GridLayout.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -137,7 +137,8 @@ public final class GridLayout extends Layout {
  	public int verticalSpacing = 5;
  
 /**
- * Constructs a new instance of this class.
+ * Constructs a new instance of this class
+ * with a single column.
  */
 public GridLayout () {}
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/RowData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/RowData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/RowLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/RowLayout.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/package.html
old mode 100644
new mode 100755
index 0c6c14d..3da06c4
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/package.html	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/package.html	
@@ -6,7 +6,7 @@
    <title>Package-level Javadoc</title>
 </head>
 <body>
-This package contains the SWT layout classes.
+SWT layout classes.
 <h2>
 Package Specification</h2>
 This package contains several standard layout classes which provide
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Dialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Dialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Event.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Event.java
old mode 100644
new mode 100755
index d67ea3d..73ddf52
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Event.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Event.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -215,6 +215,45 @@ public class Event {
 	 */
 	public Object data;
 	
+	/**
+	 * An array of the touch states for the current touch event.
+	 *
+	 * @since 3.7
+	 */
+	public Touch[] touches;
+	
+	/**
+	 * If nonzero, a positive value indicates a swipe to the right,
+	 * and a negative value indicates a swipe to the left.
+	 *
+	 * @since 3.7
+	 */
+	public int xDirection;
+	
+	/**
+	 * If nonzero, a positive value indicates a swipe in the up direction,
+	 * and a negative value indicates a swipe in the down direction.
+	 *
+	 * @since 3.7
+	 */
+	public int yDirection;
+	
+	/**
+	 * The change in magnification. This value should be added to the current 
+	 * scaling of an item to get the new scale factor.
+	 *
+	 * @since 3.7
+	 */
+	public double magnification;
+	
+	/**
+	 * The number of degrees rotated on the track pad.
+	 *
+	 * @since 3.7
+	 */
+	public double rotation;
+	
+
 /**
  * Gets the bounds.
  * 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/EventTable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/EventTable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Item.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Item.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Layout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Layout.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Listener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Listener.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/RunnableLock.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/RunnableLock.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Synchronizer.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Synchronizer.java
old mode 100644
new mode 100755
index 5bcf914..080871c
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Synchronizer.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Synchronizer.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,7 @@ public class Synchronizer {
 
 	//TEMPORARY CODE
 	static final boolean IS_CARBON = "carbon".equals (SWT.getPlatform ());
+	static final boolean IS_COCOA = "cocoa".equals (SWT.getPlatform ());
 	static final boolean IS_GTK = "gtk".equals (SWT.getPlatform ());
 
 /**
@@ -84,7 +85,7 @@ void addLast (RunnableLock lock) {
 protected void asyncExec (Runnable runnable) {
 	if (runnable == null) {
 		//TEMPORARY CODE
-		if (!(IS_CARBON || IS_GTK)) {
+		if (!(IS_CARBON || IS_GTK || IS_COCOA)) {
 			display.wake ();
 			return;
 		}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Touch.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Touch.java
new file mode 100644
index 0000000..515c12f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Touch.java	
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+/**
+ * Instances of this class are created in response to a
+ * touch-based input device being touched. They are found
+ * in the <code>touches</code> field of an Event or TouchEvent.
+ *
+ * @see org.eclipse.swt.events.TouchEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.7
+ */
+public final class Touch {
+
+	/**
+	 * The unique identity of the touch. Use this value to track changes to a touch
+	 * during the touch's life. Two touches may have the same identity even if they
+	 * come from different sources.
+	 */
+	public long id;
+
+	/**
+	 * The object representing the input source that generated the touch.
+	 */
+	public TouchSource source;
+
+	/**
+	 * The state of this touch at the time it was generated. If this field is 0
+	 * then the finger is still touching the device but has not moved
+	 * since the last <code>TouchEvent</code> was generated.
+	 * 
+	 * @see org.eclipse.swt.SWT#TOUCHSTATE_DOWN
+	 * @see org.eclipse.swt.SWT#TOUCHSTATE_MOVE
+	 * @see org.eclipse.swt.SWT#TOUCHSTATE_UP
+	 */
+	public int state;
+
+	/**
+	 * A flag indicating that the touch is the first touch from a previous
+	 * state of no touch points. Once designated as such, the touch remains
+	 * the primary touch until all fingers are removed from the device. 
+	 */
+	public boolean primary;
+	
+	/** 
+	 * The x location of the touch in TouchSource coordinates.
+	 */
+	public int x;
+	
+	/**
+	 * The y location of the touch in TouchSource coordinates.
+	 */
+	public int y;
+
+/**
+ * Constructs a new touch state from the given inputs.
+ * 
+ * @param identity Identity of the touch
+ * @param source Object representing the device that generated the touch 
+ * @param state One of the state constants representing the state of this touch
+ * @param primary Whether or not the touch is the primary touch
+ * @param x X location of the touch in screen coordinates
+ * @param y Y location of the touch in screen coordinates
+ */
+Touch (long identity, TouchSource source, int state, boolean primary, int x, int y) {
+	this.id = identity;
+	this.source = source;
+	this.state = state;
+	this.primary = primary;
+	this.x = x;
+	this.y = y;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString() {
+	return "Touch {id=" + id
+	+ " source=" + source
+	+ " state=" + state
+	+ " primary=" + primary
+	+ " x=" + x
+	+ " y=" + y
+	+ "}";
+}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/TouchSource.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/TouchSource.java
new file mode 100644
index 0000000..7caf92a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/TouchSource.java	
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent sources of touch input that generate <code>Touch</code> objects.
+ * They also provide information about the input source, which is important for interpreting the
+ * information in the <code>Touch</code> object.
+ * <p>
+ * Instances of this class can be marked as direct or indirect:
+ * <ul>
+ * <li>When an instance is <em>direct</em>, the touch source is a touch-sensitive digitizer surface such
+ * as a tablet or a touch screen. There is a one-to-one mapping between a touch point and a location in
+ * a window.
+ * </li><li>
+ * When an instance is <em>indirect</em> (more precisely, not direct), the touch source is a track pad or 
+ * other device that normally moves the cursor, but is also able to interpret multiple touches on its surface.
+ * In this case there is not a one-to-one mapping between the location of the touch on the device and a
+ * location on the display because the user can remove their finger or stylus and touch another part of
+ * the device and resume what they were doing.
+ * </li>
+ * </ul>
+ *
+ * @see Touch
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.7
+ */
+public final class TouchSource {
+	int /*long*/ handle;
+	boolean direct;	
+	Rectangle bounds;
+
+/**
+ * Constructs a new touch source from the given inputs.
+ * 
+ * @param direct Is the touch source direct or indirect? 
+ * @param height height of the source in pixels.
+ * @param width width of the source in pixels.
+ */
+TouchSource (int /*long*/ handle, boolean direct, Rectangle bounds) {
+	this.handle = handle;
+	this.direct = direct;
+	this.bounds = bounds;
+}
+
+/**
+ * Returns the type of touch input this source generates, <code>true</code> for direct or <code>false</code> for indirect.
+ *
+ * @return <code>true</code> if the input source is direct, or <code>false</code> otherwise
+ */
+public boolean isDirect () {
+	return direct;
+}
+
+/**
+ * Returns the bounding rectangle of the device. For a direct source, this corresponds to the bounds of
+ * the display device in pixels. For an indirect source, this contains the size of the device in pixels.
+ * <p>
+ * Note that the x and y values may not necessarily be 0 if the TouchSource is a direct source.
+ *
+ * @return the bounding rectangle of the input source
+ */
+public Rectangle getBounds () {
+	return new Rectangle (bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString () {
+	return "TouchSource {handle=" + handle + " direct=" + direct + " bounds=" + bounds + "}";
+}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/TypedListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/TypedListener.java
old mode 100644
new mode 100755
index db4fb1d..354be9d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/TypedListener.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/TypedListener.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -143,6 +143,12 @@ public void handleEvent (Event e) {
 			((FocusListener) eventListener).focusLost(new FocusEvent(e));
 			break;
 		}
+		case SWT.Gesture: {
+			GestureEvent event = new GestureEvent(e);
+			((GestureListener)eventListener).gesture(event);
+			e.doit = event.doit;
+			break;
+		}
 		case SWT.Help: {
 			((HelpListener) eventListener).helpRequested (new HelpEvent (e));
 			break;
@@ -241,6 +247,10 @@ public void handleEvent (Event e) {
 			((MenuListener) eventListener).menuShown(new MenuEvent(e));
 			break;
 		}
+		case SWT.Touch: {
+			((TouchListener)eventListener).touch(new TouchEvent(e));
+			break;
+		}
 		case SWT.Traverse: {
 			/* Fields set by Control */
 			TraverseEvent event = new TraverseEvent (e);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/package.html b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt
old mode 100644
new mode 100755
index 2e1a874..9c3c4c6
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common/version.txt	
@@ -1 +1 @@
-version 3.659
\ No newline at end of file
+version 3.735
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties
index 3a5c957..d212d17 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -83,6 +83,7 @@ SWT_InvalidCert_Connect=Would you like to connect to this site anyways?
 SWT_OnBeforeUnload_Message1=Are you sure you want to leave this page?
 SWT_OnBeforeUnload_Message2=Click OK to continue, or Cancel to stay on this page.
 SWT_ViewCertificate=View Certificate
+SWT_Certificate=Certificate
 SWT_Controlled_By=controlled by
 SWT_Controller_For=controller for
 SWT_Described_By=described by
@@ -98,3 +99,17 @@ SWT_Node_Child_Of=node child of
 SWT_Parent_Window_Of=parent window of
 SWT_Popup_For=popup for
 SWT_Subwindow_Of=subwindow of
+SWT_Continue=Continue
+SWT_IssuedTo=Issued to:\t{0}
+SWT_IssuedFrom=Issued from:\t{0}
+SWT_Issuer=Issuer
+SWT_General=General
+SWT_Details=Details
+SWT_Field=Field
+SWT_Value=Value
+SWT_Version=Version
+SWT_ValidFrom=Valid From
+SWT_ValidTo=Valid To
+SWT_ValidFromTo=Valid from: {0} to: {1}
+SWT_Subject=Subject
+SWT_SerialNumber=Serial Number
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties
index c14fda9..9c486d3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties	
@@ -22,4 +22,11 @@ SWT_Open=\u0641\u062a\u062d
 SWT_Close=\u0627\u063a\u0644\u0627\u0642
 SWT_Minimize=\u062a\u0635\u063a\u064a\u0631
 SWT_Maximize=\u062a\u0643\u0628\u064a\u0631
-SWT_Restore=\u0627\u0633\u062a\u0639\u0627\u062f\u0629
\ No newline at end of file
+SWT_Restore=\u0627\u0633\u062a\u0639\u0627\u062f\u0629
+SWT_Continue=\u0627\u0633\u062a\u0645\u0631\u0627\u0631
+SWT_General=\u0639\u0627\u0645
+SWT_Details=\u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644
+SWT_Field=\u0645\u062c\u0627\u0644
+SWT_Value=\u0627\u0644\u0642\u064a\u0645\u0629
+SWT_Version=\u0627\u0644\u0646\u0633\u062e\u0629
+SWT_Subject=\u0627\u0644\u0645\u0648\u0636\u0648\u0639
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_bg._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_bg._properties
new file mode 100644
index 0000000..104a0e5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_bg._properties	
@@ -0,0 +1,2 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Version=\u0412\u0435\u0440\u0441\u0438\u044f
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties
index f6c9664..bea6ecb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties	
@@ -26,4 +26,11 @@ SWT_Open=Otev\u0159\u00edt
 SWT_Close=Zav\u0159\u00edt
 SWT_Minimize=Minimalizovat
 SWT_Maximize=Maximalizovat
-SWT_Restore=Obnovit
\ No newline at end of file
+SWT_Restore=Obnovit
+SWT_Continue=Pokra\u010dovat
+SWT_General=Obecn\u00e9
+SWT_Details=Podrobnosti
+SWT_Field=Pole
+SWT_Value=Hodnota
+SWT_Version=Verze
+SWT_Subject=P\u0159edm\u011bt
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties
index e6efe92..e24e158 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties	
@@ -22,4 +22,11 @@ SWT_Open=\u00c5bn
 SWT_Close=Luk
 SWT_Minimize=Minim\u00e9r
 SWT_Maximize=Maksim\u00e9r
-SWT_Restore=Gendan
\ No newline at end of file
+SWT_Restore=Gendan
+SWT_Continue=Forts\u00e6t
+SWT_General=Generelt
+SWT_Details=Oplysninger
+SWT_Field=Felt
+SWT_Value=V\u00e6rdi
+SWT_Version=Version
+SWT_Subject=Subject
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties
index d2969d0..472cad6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties	
@@ -62,4 +62,13 @@ SWT_Download_Location=Speichern von {0} von {1}
 SWT_Download_Started=Herunterladen...
 SWT_Download_Status=Download: {0,number,integer} KB von {1,number,integer} KB
 SWT_Authentication_Required=Authentifizierung erforderlich
-SWT_Enter_Username_and_Password=Benutzernamen und Kennwort f\u00fcr {0} unter {1} eingeben
\ No newline at end of file
+SWT_Enter_Username_and_Password=Benutzernamen und Kennwort f\u00fcr {0} unter {1} eingeben
+SWT_Continue=Weiter
+SWT_General=Allgemein
+SWT_Details=Details
+SWT_Field=Feld
+SWT_Value=Wert
+SWT_Version=Version
+SWT_ValidFrom=G\u00fcltig ab
+SWT_Subject=Subject
+SWT_SerialNumber=Seriennummer
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties
index a14609e..56dd88e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties	
@@ -22,4 +22,11 @@ SWT_Open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1
 SWT_Close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
 SWT_Minimize=\u0395\u03bb\u03b1\u03c7\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
 SWT_Maximize=\u039c\u03b5\u03b3\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
-SWT_Restore=\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac
\ No newline at end of file
+SWT_Restore=\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac
+SWT_Continue=\u03a3\u03c5\u03bd\u03ad\u03c7\u03b9\u03c3\u03b7
+SWT_General=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac
+SWT_Details=\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2
+SWT_Field=\u03a0\u03b5\u03b4\u03af\u03bf
+SWT_Value=\u03a4\u03b9\u03bc\u03ae
+SWT_Version=\u0395\u03ba\u03b4\u03bf\u03c7\u03ae
+SWT_Subject=\u0398\u03ad\u03bc\u03b1
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties
index 83c1aa0..e3f6ff9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties	
@@ -64,3 +64,11 @@ SWT_Download_Status=Descarga: {0,number,integer} KB de {1,number,integer} KB
 SWT_Authentication_Required=Autenticaci\u00f3n requerida
 SWT_Enter_Username_and_Password=Introduzca nombre de usuario y contrase\u00f1a para {0} en {1}
 SWT_Page_Load_Failed=Carga de p\u00e1gina fall\u00f3 con error: {0}
+SWT_Continue=Continuar
+SWT_General=General
+SWT_Details=Detalles
+SWT_Field=Campo
+SWT_Value=Valor
+SWT_Version=Versi\u00f3n
+SWT_ValidFrom=V\u00e1lido desde
+SWT_Subject=Sujeto
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_et._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_et._properties
index 6118bc8..da82051 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_et._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_et._properties	
@@ -21,3 +21,6 @@ SWT_Minimize=V\u00e4henda
 SWT_Maximize=Suurenda
 SWT_Restore=Taasta
 SWT_Download_Started=Laen alla...
+SWT_General=\u00dcldine
+SWT_Value=V\u00e4\u00e4rtus
+SWT_Version=Versioon
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fa._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fa._properties
new file mode 100644
index 0000000..d70a97b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fa._properties	
@@ -0,0 +1,54 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u0628\u0644\u0647
+SWT_No=\u062e\u06cc\u0631
+SWT_OK=\u062a\u0623\u06cc\u06cc\u062f
+SWT_Cancel=\u0644\u063a\u0648
+SWT_Abort=\u0631\u0647\u0627\u06a9\u0646
+SWT_Retry=\u0645\u062c\u062f\u062f\u0627 \u062a\u0644\u0627\u0634\u200c\u06a9\u0646
+SWT_Ignore=\u0646\u0627\u062f\u06cc\u062f\u0647\u200c\u0628\u06af\u06cc\u0631
+SWT_Sample=\u0646\u0645\u0648\u0646\u0647
+SWT_A_Sample_Text=\u0645\u062a\u0646 \u0646\u0645\u0648\u0646\u0647
+SWT_Selection=\u0645\u0646\u062a\u062e\u0628
+SWT_Current_Selection=\u0627\u0646\u062a\u062e\u0627\u0628 \u062c\u0627\u0631\u06cc
+SWT_Font=\u0642\u0644\u0645
+SWT_Color=\u0631\u0646\u06af
+SWT_Extended_style=\u0633\u0628\u06a9 \u06af\u0633\u062a\u0631\u062f\u0647
+SWT_Size=\u0633\u0627\u06cc\u0632
+SWT_Style=\u0633\u0628\u06a9
+SWT_Save=\u0630\u062e\u06cc\u0631\u0647\u200c\u06a9\u0631\u062f\u0646
+SWT_Character_set=\u0645\u062c\u0645\u0648\u0639\u0647 \u0646\u0648\u06cc\u0633\u0647
+SWT_ColorDialog_Title=\u0631\u0646\u06af\u200c\u0647\u0627
+SWT_FontDialog_Title=\u0642\u0644\u0645\u200c\u0647\u0627
+SWT_FontSet=\u0645\u062c\u0645\u0648\u0639\u0647 \u0642\u0644\u0645
+SWT_NewFont=\u0642\u0644\u0645 \u062c\u062f\u06cc\u062f
+SWT_Remove=\u062d\u0630\u0641
+SWT_Up=\u0628\u0627\u0644\u0627
+SWT_Down=\u067e\u0627\u0626\u06cc\u0646
+SWT_Charset_Western=\u063a\u0631\u0628\u06cc
+SWT_Charset_EastEuropean=\u0634\u0631\u0642\u06cc
+SWT_Charset_SouthEuropean=\u062c\u0646\u0648\u0628\u06cc
+SWT_Charset_NorthEuropean=\u0634\u0645\u0627\u0644\u06cc
+SWT_Charset_Cyrillic=\u0633\u06cc\u0631\u06cc\u0644\u06cc\u06a9
+SWT_Charset_Arabic=\u0639\u0631\u0628\u06cc
+SWT_Charset_Greek=\u06cc\u0648\u0646\u0627\u0646\u06cc
+SWT_Charset_Hebrew=\u0639\u0628\u0631\u06cc
+SWT_Charset_Turkish=\u062a\u0631\u06a9\u06cc
+SWT_Charset_Nordic=\u0634\u0645\u0627\u0644\u200c\u0627\u0631\u0648\u067e\u0627\u06cc\u06cc
+SWT_Charset_Thai=\u062a\u0627\u06cc\u06cc
+SWT_Charset_BalticRim=\u062d\u0627\u0634\u06cc\u0647\u0654 \u0628\u0627\u0644\u062a\u06cc\u06a9
+SWT_Charset_Celtic=\u0633\u0644\u062a\u06cc
+SWT_Charset_Euro=\u0627\u0631\u0648\u067e\u0627\u06cc\u06cc
+SWT_Charset_Romanian=\u0631\u0648\u0645\u0627\u0646\u06cc\u0627\u06cc\u06cc
+SWT_Charset_SimplifiedChinese=\u0686\u06cc\u0646\u06cc \u0633\u0627\u062f\u0647
+SWT_Charset_TraditionalChinese=\u0686\u06cc\u0646\u06cc \u0633\u0646\u062a\u06cc
+SWT_Charset_Japanese=\u0698\u0627\u067e\u0646\u06cc
+SWT_Charset_Korean=\u06a9\u0631\u0647\u200c\u0627\u06cc
+SWT_Charset_Unicode=\u06cc\u0648\u0646\u06cc\u06a9\u062f
+SWT_Charset_ASCII=\u0627\u0633\u06a9\u06cc
+SWT_Close=\u0628\u0633\u062a\u0646
+SWT_Minimize=\u06a9\u0648\u0686\u06a9 \u06a9\u0631\u062f\u0646
+SWT_Maximize=\u0628\u06cc\u0634\u06cc\u0646\u0647\u200c\u06a9\u0631\u062f\u0646
+SWT_Restore=\u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0646
+SWT_General=\u0639\u0645\u0648\u0645\u06cc
+SWT_Value=\u0645\u0642\u062f\u0627\u0631
+SWT_Version=\u0646\u0633\u062e\u0647
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties
index 796ae74..6cc5ed5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties	
@@ -22,4 +22,11 @@ SWT_Open=Avaa
 SWT_Close=Sulje
 SWT_Minimize=Pienenn\u00e4
 SWT_Maximize=Suurenna
-SWT_Restore=Palauta
\ No newline at end of file
+SWT_Restore=Palauta
+SWT_Continue=Jatka
+SWT_General=Yleiset
+SWT_Details=Tiedot
+SWT_Field=Kentt\u00e4
+SWT_Value=Arvo
+SWT_Version=Versio
+SWT_Subject=Subject
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties
index 1b60f16..ba4aedb 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties	
@@ -62,4 +62,13 @@ SWT_Download_Location=Enregistrement de {0} depuis {1}
 SWT_Download_Started=T\u00e9l\u00e9chargement...
 SWT_Download_Status=T\u00e9l\u00e9charger\u00a0: {0,number,integer} ko de {1,number,integer} ko
 SWT_Authentication_Required=Authentification requise
-SWT_Enter_Username_and_Password=Entrer le nom d''utilisateur et le mot de passe pour {0} au niveau de {1}
\ No newline at end of file
+SWT_Enter_Username_and_Password=Entrer le nom d''utilisateur et le mot de passe pour {0} au niveau de {1}
+SWT_Continue=Continuer
+SWT_General=G\u00e9n\u00e9ral
+SWT_Details=D\u00e9tails
+SWT_Field=Champ
+SWT_Value=Valeur
+SWT_Version=Version
+SWT_ValidFrom=Valide \u00e0 partir du
+SWT_Subject=Sujet
+SWT_SerialNumber=Num\u00e9ro de s\u00e9rie
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hi._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hi._properties
new file mode 100644
index 0000000..4328fab
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hi._properties	
@@ -0,0 +1,2 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_OK=\u0920\u0940\u0915 \u0939\u0948
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties
index f2dd2c1..e3dc13d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties	
@@ -22,4 +22,11 @@ SWT_Open=Megnyit\u00e1s
 SWT_Close=Bez\u00e1r\u00e1s
 SWT_Minimize=Kis m\u00e9ret
 SWT_Maximize=Teljes m\u00e9ret
-SWT_Restore=Vissza\u00e1ll\u00edt\u00e1s
\ No newline at end of file
+SWT_Restore=Vissza\u00e1ll\u00edt\u00e1s
+SWT_Continue=Folytat\u00e1s
+SWT_General=\u00c1ltal\u00e1nos
+SWT_Details=R\u00e9szletek
+SWT_Field=Mez\u0151
+SWT_Value=\u00c9rt\u00e9k
+SWT_Version=Verzi\u00f3
+SWT_Subject=T\u00e1rgy
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties
index bb229e6..c437941 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties	
@@ -60,4 +60,11 @@ SWT_FileDownload=Download file
 SWT_Download_File=Download: {0}
 SWT_Download_Location=Salvataggio di {0} da {1}
 SWT_Download_Started=Download in corso...
-SWT_Download_Status=Download: {0,number,integer} KB di {1,number,integer} KB
\ No newline at end of file
+SWT_Download_Status=Download: {0,number,integer} KB di {1,number,integer} KB
+SWT_Continue=Continua
+SWT_General=Generale
+SWT_Details=Dettagli
+SWT_Field=Campo
+SWT_Value=Valore
+SWT_Version=Versione
+SWT_Subject=Subject
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties
index 0e9d119..b27ccba 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties	
@@ -7,6 +7,8 @@ SWT_Abort=Abort
 SWT_Ignore=Ignore
 SWT_Selection=Selection
 SWT_Font=\u05d2\u05d5\u05e4\u05df
+SWT_Color=\u05e6\u05d1\u05e2
+SWT_Size=\u05d2\u05d5\u05d3\u05dc
 SWT_Style=Style
 SWT_Save=\u05e9\u05de\u05d9\u05e8\u05d4
 SWT_Remove=Remove
@@ -18,4 +20,11 @@ SWT_Open=Open
 SWT_Close=\u05e1\u05d2\u05d9\u05e8\u05d4
 SWT_Minimize=\u05de\u05d6\u05e2\u05d5\u05e8
 SWT_Maximize=\u05d4\u05d2\u05d3\u05dc\u05d4
-SWT_Restore=\u05e9\u05d7\u05d6\u05d5\u05e8
\ No newline at end of file
+SWT_Restore=\u05e9\u05d7\u05d6\u05d5\u05e8
+SWT_Continue=Continue
+SWT_General=General
+SWT_Details=Details
+SWT_Field=Field
+SWT_Value=Value
+SWT_Version=\u05d2\u05e8\u05e1\u05d4
+SWT_Subject=Subject
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties
index 3f48738..3dcd6bf 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties	
@@ -62,4 +62,13 @@ SWT_Download_Location={1} \u304b\u3089 {0} \u3092\u4fdd\u5b58\u3057\u3066\u3044\
 SWT_Download_Started=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9...
 SWT_Download_Status=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9 : {0,number,integer} KB / {1,number,integer} KB
 SWT_Authentication_Required=\u8a8d\u8a3c\u304c\u5fc5\u8981\u3067\u3059
-SWT_Enter_Username_and_Password={1} \u306b\u304a\u3051\u308b {0} \u306e\u30e6\u30fc\u30b6\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
\ No newline at end of file
+SWT_Enter_Username_and_Password={1} \u306b\u304a\u3051\u308b {0} \u306e\u30e6\u30fc\u30b6\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+SWT_Continue=\u7d99\u7d9a
+SWT_General=\u4e00\u822c
+SWT_Details=\u8a73\u7d30
+SWT_Field=\u30d5\u30a3\u30fc\u30eb\u30c9
+SWT_Value=\u5024
+SWT_Version=\u30d0\u30fc\u30b8\u30e7\u30f3
+SWT_ValidFrom=\u6709\u52b9\u671f\u9650\u306e\u958b\u59cb
+SWT_Subject=\u30b5\u30d6\u30b8\u30a7\u30af\u30c8
+SWT_SerialNumber=\u30b7\u30ea\u30a2\u30eb\u756a\u53f7
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties
index 2adca26..574e6ad 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties	
@@ -62,4 +62,13 @@ SWT_Download_Location={1}\uc5d0\uc11c {0} \uc800\uc7a5
 SWT_Download_Started=\ub2e4\uc6b4\ub85c\ub4dc \uc911 ...
 SWT_Download_Status=\ub2e4\uc6b4\ub85c\ub4dc: {0,number,integer}KB/{1,number,integer}KB
 SWT_Authentication_Required=\uc778\uc99d \ud544\uc694
-SWT_Enter_Username_and_Password={1}\uc5d0 {0}\uc758 \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \uc554\ud638\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.
\ No newline at end of file
+SWT_Enter_Username_and_Password={1}\uc5d0 {0}\uc758 \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \uc554\ud638\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.
+SWT_Continue=\uacc4\uc18d
+SWT_General=\uc77c\ubc18
+SWT_Details=\uc138\ubd80\uc0ac\ud56d
+SWT_Field=\ud544\ub4dc
+SWT_Value=\uac12
+SWT_Version=\ubc84\uc804
+SWT_ValidFrom=\uc720\ud6a8 \uae30\uac04 \uc2dc\uc791
+SWT_Subject=\uc8fc\uc81c
+SWT_SerialNumber=\uc77c\ub828 \ubc88\ud638
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties
index 7ce97ec..14e88df 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties	
@@ -1,2 +1,3 @@
 # Copyright by many contributors; see http://babel.eclipse.org/
-SWT_Cancel=\u0411\u043e\u043b\u0438\u0445
\ No newline at end of file
+SWT_Cancel=\u0411\u043e\u043b\u0438\u0445
+SWT_Version=\u0425\u0443\u0432\u0438\u043b\u0431\u0430\u0440
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties
index db94758..75dd792 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties	
@@ -22,4 +22,11 @@ SWT_Open=Openen
 SWT_Close=Sluiten
 SWT_Minimize=Minimaliseren
 SWT_Maximize=Maximaliseren
-SWT_Restore=Herstellen
\ No newline at end of file
+SWT_Restore=Herstellen
+SWT_Continue=Doorgaan
+SWT_General=Algemeen
+SWT_Details=Details
+SWT_Field=Veld
+SWT_Value=Waarde
+SWT_Version=Versie
+SWT_Subject=Subject
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties
index 2d1bc5d..746df23 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties	
@@ -22,4 +22,11 @@ SWT_Open=\u00c5pne
 SWT_Close=Lukk
 SWT_Minimize=Minimer
 SWT_Maximize=Maksimer
-SWT_Restore=Gjenopprett
\ No newline at end of file
+SWT_Restore=Gjenopprett
+SWT_Continue=Fortsett
+SWT_General=Generelt
+SWT_Details=Detaljer
+SWT_Field=Felt
+SWT_Value=Verdi
+SWT_Version=Versjon
+SWT_Subject=Emne
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties
index 5f09c29..286bc14 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties	
@@ -39,4 +39,11 @@ SWT_FileDownload=Pobierz plik
 SWT_Download_File=Pobierz
 SWT_Download_Location=Zapisuj\u0119 {0} z {1}
 SWT_Download_Started=Pobieranie...
-SWT_Download_Status=Pobrano: {0,number,integer} KB z {1,number,integer} KB
\ No newline at end of file
+SWT_Download_Status=Pobrano: {0,number,integer} KB z {1,number,integer} KB
+SWT_Continue=Kontynuuj
+SWT_General=Og\u00f3lne
+SWT_Details=Szczeg\u00f3\u0142y
+SWT_Field=Pole
+SWT_Value=Warto\u015b\u0107
+SWT_Version=Wersja
+SWT_Subject=Subject
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties
index 6b03c74..58e89c9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties	
@@ -61,4 +61,11 @@ SWT_Download_Location=Gravando {0} de {1}
 SWT_Download_Started=Descarregando...
 SWT_Download_Status=Descarregar: {0,number,integer} KB de {1,number,integer} KB
 SWT_Authentication_Required=Autentica\u00e7\u00e3o Necess\u00e1ria
-SWT_Enter_Username_and_Password=Insira nome de utilizador e palavra-passe para {0} em {1}
\ No newline at end of file
+SWT_Enter_Username_and_Password=Insira nome de utilizador e palavra-passe para {0} em {1}
+SWT_Continue=Continuar
+SWT_General=Geral
+SWT_Details=Detalhes
+SWT_Field=Campo
+SWT_Value=Valor
+SWT_Version=Vers\u00e3o
+SWT_Subject=Sujeito
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties
index e80c352..0cb0bd2 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties	
@@ -22,4 +22,11 @@ SWT_Open=Abrir
 SWT_Close=Fechar
 SWT_Minimize=Minimizar
 SWT_Maximize=Maximizar
-SWT_Restore=Restaurar
\ No newline at end of file
+SWT_Restore=Restaurar
+SWT_Continue=Continuar
+SWT_General=Geral
+SWT_Details=Detalhes
+SWT_Field=Campo
+SWT_Value=Valor
+SWT_Version=Vers\u00e3o
+SWT_Subject=Assunto
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties
index 820114f..3535f9c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties	
@@ -1,5 +1,10 @@
 # Copyright by many contributors; see http://babel.eclipse.org/
 SWT_Yes=Da
 SWT_No=Nu
+SWT_OK=OK
+SWT_Cancel=Anuleaz\u0103
+SWT_Save=Salva
+SWT_Remove=\u015eterge
 SWT_Password=Parol\u0103:
-SWT_Close=\u00cenchide
\ No newline at end of file
+SWT_Close=\u00cenchide
+SWT_General=General
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties
index 8d056cd..16655dc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties	
@@ -28,3 +28,11 @@ SWT_Minimize=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c
 SWT_Maximize=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c
 SWT_Restore=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
 SWT_Download_Started=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430:
+SWT_Continue=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c
+SWT_General=\u041e\u0431\u0449\u0438\u0435
+SWT_Details=\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f
+SWT_Field=\u041f\u043e\u043b\u0435
+SWT_Value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435
+SWT_Version=\u0412\u0435\u0440\u0441\u0438\u044f
+SWT_Subject=\u0421\u0443\u0431\u044a\u0435\u043a\u0442
+SWT_SerialNumber=\u0421\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sl._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sl._properties
new file mode 100644
index 0000000..aa2e63c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sl._properties	
@@ -0,0 +1,65 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Da
+SWT_No=Ne
+SWT_OK=V redu
+SWT_Cancel=Prekli\u010di
+SWT_Abort=Prekini
+SWT_Retry=Poskusi ponovno
+SWT_Ignore=Prezri
+SWT_Sample=Vzorec
+SWT_A_Sample_Text=Vzor\u010dno besedilo
+SWT_Selection=Izbor
+SWT_Current_Selection=Trenutni izbor
+SWT_Font=Pisava
+SWT_Color=Barva
+SWT_Extended_style=Raz\u0161irjen stil
+SWT_Size=Velikost
+SWT_Style=Stil
+SWT_Save=Shrani
+SWT_Character_set=Nabor znakov
+SWT_ColorDialog_Title=Barve
+SWT_FontDialog_Title=Pisave
+SWT_FontSet=Nabor pisav
+SWT_NewFont=Nova pisava
+SWT_Remove=Odstrani
+SWT_Up=Gor
+SWT_Down=Dol
+SWT_Charset_Western=zahodna
+SWT_Charset_EastEuropean=vzhodna
+SWT_Charset_SouthEuropean=ju\u017ena
+SWT_Charset_NorthEuropean=severna
+SWT_Charset_Cyrillic=cirilica
+SWT_Charset_Arabic=arabska
+SWT_Charset_Greek=gr\u0161ka
+SWT_Charset_Hebrew=hebrejska
+SWT_Charset_Turkish=tur\u0161ka
+SWT_Charset_Nordic=nordijska
+SWT_Charset_Thai=tajska
+SWT_Charset_BalticRim=skandinavska/baltska
+SWT_Charset_Celtic=keltska
+SWT_Charset_Euro=evropska
+SWT_Charset_Romanian=romunska
+SWT_Charset_SimplifiedChinese=poenostavljena kitajska
+SWT_Charset_TraditionalChinese=tradicionalna kitajska
+SWT_Charset_Japanese=japonska
+SWT_Charset_Korean=korejska
+SWT_Charset_Unicode=unikod
+SWT_InputMethods=Na\u010dini vnosa
+SWT_Password=Geslo:
+SWT_Username=Uporabni\u0161ko ime:
+SWT_Switch=Preklopi
+SWT_Press=Pritisni
+SWT_Open=Odpri
+SWT_Close=Zapri
+SWT_Minimize=Minimiziraj
+SWT_Maximize=Maksimiziraj
+SWT_Restore=Obnovi
+SWT_ShowList=Prika\u017ei seznam
+SWT_FileDownload=Prenos datoteke
+SWT_Download_File=Prenos: {0}
+SWT_Download_Location=Shranjujem {0} od {1}
+SWT_Download_Started=Prena\u0161am ...
+SWT_Download_Status=Prenos: {0,number,integer} KB od {1,number,integer} KB
+SWT_Authentication_Required=Zahtevana avtentikacija
+SWT_Enter_Username_and_Password=Vpi\u0161ite uporabni\u0161ko ime in geslo za {0} pri {1}
+SWT_Page_Load_Failed=Nalaganje strani ni uspelo. Napaka: {0}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties
index b251051..bc04ee8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties	
@@ -22,4 +22,11 @@ SWT_Open=\u00d6ppna
 SWT_Close=St\u00e4ng
 SWT_Minimize=Minimera
 SWT_Maximize=Maximera
-SWT_Restore=\u00c5terst\u00e4ll
\ No newline at end of file
+SWT_Restore=\u00c5terst\u00e4ll
+SWT_Continue=Forts\u00e4tt
+SWT_General=Allm\u00e4nt
+SWT_Details=Detaljer
+SWT_Field=F\u00e4lt
+SWT_Value=V\u00e4rde
+SWT_Version=Version
+SWT_Subject=\u00c4mne
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties
index 19ba07c..666ad34 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties	
@@ -64,3 +64,10 @@ SWT_Download_Status=\u0130ndirilen: {0,number,integer} KB / {1,number,integer} K
 SWT_Authentication_Required=Kimlik Do\u011frulamas\u0131 Gerekiyor
 SWT_Enter_Username_and_Password={1} alan\u0131na {0} i\u00e7in kullan\u0131c\u0131 ad\u0131n\u0131 ve parolas\u0131n\u0131 girini\u015f
 SWT_Page_Load_Failed=Sayfa y\u00fcklemesi ba\u015far\u0131s\u0131z oldu: {0}
+SWT_Continue=Devam
+SWT_General=Genel
+SWT_Details=Ayr\u0131nt\u0131lar
+SWT_Field=Alan
+SWT_Value=De\u011fer
+SWT_Version=S\u00fcr\u00fcm
+SWT_Subject=Subject
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties
index 0549844..d10afab 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties	
@@ -64,3 +64,6 @@ SWT_Download_Status=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d
 SWT_Authentication_Required=\u041f\u043e\u0442\u0440\u0456\u0431\u043d\u0430 \u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u044f
 SWT_Enter_Username_and_Password=\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u0456\u043c\''\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0442\u0430 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f {0} \u0432 {1}
 SWT_Page_Load_Failed=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0432\u0434\u0430\u043b\u043e \u0437 \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u044e: {0}
+SWT_General=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435
+SWT_Value=\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f
+SWT_Version=\u0412\u0435\u0440\u0441\u0456\u044f
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties
index 399df80..faf4231 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties	
@@ -63,3 +63,12 @@ SWT_Download_Started=\u6b63\u5728\u4e0b\u8f7d...
 SWT_Download_Status=\u4e0b\u8f7d\uff1a{0,number,integer} KB\uff08\u5171 {1,number,integer} KB\uff09
 SWT_Authentication_Required=\u9700\u8981\u8ba4\u8bc1
 SWT_Enter_Username_and_Password=\u8f93\u5165 {0}\uff08\u4f4d\u4e8e {1}\uff09\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801
+SWT_Continue=\u7ee7\u7eed
+SWT_General=\u5e38\u89c4
+SWT_Details=\u8be6\u7ec6\u4fe1\u606f
+SWT_Field=\u5b57\u6bb5
+SWT_Value=\u503c
+SWT_Version=\u7248\u672c
+SWT_ValidFrom=\u751f\u6548\u65e5\u671f
+SWT_Subject=Subject
+SWT_SerialNumber=\u5e8f\u5217\u53f7
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties
index 9ec42cc..05e2d8e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties	
@@ -61,4 +61,13 @@ SWT_Download_Location=\u5132\u5b58 {1} \u7684 {0}
 SWT_Download_Started=\u6b63\u5728\u4e0b\u8f09...
 SWT_Download_Status=\u4e0b\u8f09\uff1a{0,number,integer} KB (\u5171 {1,number,integer} KB)
 SWT_Authentication_Required=\u9700\u8981\u9451\u5225
-SWT_Enter_Username_and_Password=\u65bc {1} \u8655\u8f38\u5165 {0} \u7684\u4f7f\u7528\u8005\u540d\u7a31\u53ca\u5bc6\u78bc
\ No newline at end of file
+SWT_Enter_Username_and_Password=\u65bc {1} \u8655\u8f38\u5165 {0} \u7684\u4f7f\u7528\u8005\u540d\u7a31\u53ca\u5bc6\u78bc
+SWT_Continue=\u7e7c\u7e8c
+SWT_General=\u4e00\u822c\u4e8b\u9805
+SWT_Details=\u8a73\u7d30\u8cc7\u6599
+SWT_Field=\u6b04\u4f4d
+SWT_Value=\u503c
+SWT_Version=\u7248\u672c
+SWT_ValidFrom=\u751f\u6548\u65e5\u671f
+SWT_Subject=\u4e3b\u984c
+SWT_SerialNumber=\u5e8f\u865f
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolBar.java
index 44e878d..a427a10 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/coolbar/org/eclipse/swt/widgets/CoolBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1156,6 +1156,19 @@ public void setItemLayout (int[] itemOrder, int[] wrapIndices, Point[] sizes) {
 	setItemSizes(sizes);	
 	relayout();
 }
+public void setOrientation (int orientation) {
+	super.setOrientation(orientation);
+	for (int row = 0; row < items.length; row++) {
+		for (int column = 0; column < items[row].length; column++) {
+			CoolItem item = items[row][column];
+			if (item.arrowImage != null) {
+				item.arrowImage.dispose();
+				item.arrowImage = null;
+			}
+			item.updateChevron();
+		}
+	}
+}
 void wrapItems (int maxWidth) {
 	int itemCount = originalItems.length;
 	if (itemCount < 2) return;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/tooltip/org/eclipse/swt/widgets/ToolTip.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/tooltip/org/eclipse/swt/widgets/ToolTip.java
index 5059ba5..cf572bf 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/tooltip/org/eclipse/swt/widgets/ToolTip.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/tooltip/org/eclipse/swt/widgets/ToolTip.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION,
  * and ICON_WARNING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#tooltips">Tool Tips snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TableItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TableItem.java
index abdf2bc..58c1296 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TableItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TableItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -924,6 +924,7 @@ int getPreferredWidth (int columnIndex) {
 		event.y = parent.getItemY (this);
 		event.width = width;
 		event.height = parent.itemHeight;
+		event.detail = isSelected () ? SWT.SELECTED : 0;
 		parent.sendEvent (SWT.MeasureItem, event);
 		if (parent.itemHeight != event.height) {
 			parent.customHeightSet = true;
@@ -1083,6 +1084,7 @@ boolean paint (GC gc, TableColumn column, boolean backgroundOnly) {
 	Pattern oldForegroundPattern = gc.getForegroundPattern ();
 	int oldInterpolation = gc.getInterpolation ();
 	int oldTextAntialias = gc.getTextAntialias ();
+	boolean isSelected = isSelected ();
 
 	if (parent.hooks (SWT.MeasureItem)) {
 		int contentWidth = getContentWidth (columnIndex);
@@ -1096,6 +1098,7 @@ boolean paint (GC gc, TableColumn column, boolean backgroundOnly) {
 		event.y = parent.getItemY (this);
 		event.width = contentWidth;
 		event.height = parent.itemHeight;
+		event.detail = isSelected ? SWT.SELECTED : 0;
 		parent.sendEvent (SWT.MeasureItem, event);
 		event.gc = null;
 		if (gc.isDisposed ()) return false;
@@ -1153,7 +1156,6 @@ boolean paint (GC gc, TableColumn column, boolean backgroundOnly) {
 		parent.drawBackground (gc, cellBounds.x, cellBounds.y, fillWidth, cellBounds.height, 0, 0);
 	}
 
-	boolean isSelected = isSelected ();
 	boolean isFocusItem = parent.focusItem == this && parent.isFocusControl ();
 	boolean drawBackground = true;
 	boolean drawForeground = true;
@@ -1259,7 +1261,7 @@ boolean paint (GC gc, TableColumn column, boolean backgroundOnly) {
 				}
 				if (fillWidth > 0) {
 					gc.fillRectangle (
-						column.getX (),
+						startX, 
 						cellBounds.y + 1,
 						fillWidth,
 						cellBounds.height - 2);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java
index 966b669..f5b57dc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/emulated/treetable/org/eclipse/swt/widgets/TreeItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1467,6 +1467,7 @@ int getPreferredWidth (int columnIndex) {
 		event.y = parent.getItemY (this);
 		event.width = width;
 		event.height = parent.itemHeight;
+		event.detail = isSelected () ? SWT.SELECTED : 0;
 		parent.sendEvent (SWT.MeasureItem, event);
 		if (parent.itemHeight != event.height) {
 			parent.customHeightSet = true;
@@ -1685,6 +1686,7 @@ boolean paint (GC gc, TreeColumn column, boolean backgroundOnly) {
 	int[] oldLineDash = gc.getLineDash ();
 	int oldLineWidth = gc.getLineWidth ();
 	int oldTextAntialias = gc.getTextAntialias ();
+	boolean isSelected = isSelected ();
 
 	if (parent.hooks (SWT.MeasureItem)) {
 		int contentWidth = getContentWidth (columnIndex);
@@ -1698,6 +1700,7 @@ boolean paint (GC gc, TreeColumn column, boolean backgroundOnly) {
 		event.y = parent.getItemY (this);
 		event.width = contentWidth;
 		event.height = parent.itemHeight;
+		event.detail = isSelected ? SWT.SELECTED : 0;
 		parent.sendEvent (SWT.MeasureItem, event);
 		event.gc = null;
 		if (gc.isDisposed ()) return false;
@@ -1757,7 +1760,6 @@ boolean paint (GC gc, TreeColumn column, boolean backgroundOnly) {
 		parent.drawBackground (gc, cellBounds.x, cellBounds.y, fillWidth, cellBounds.height, 0, 0);
 	}
 
-	boolean isSelected = isSelected ();
 	boolean isFocusItem = parent.focusItem == this && parent.isFocusControl ();
 	boolean drawBackground = true;
 	boolean drawForeground = true;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java
index 32e16e8..7b89886 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Device.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,10 +79,13 @@ public abstract class Device implements Drawable {
 	/* System Font */
 	Font systemFont;
 	
+	/* Device dpi */
+	Point dpi;
+	
 	int /*long*/ emptyTab;
 
 	boolean useXRender;
-
+	boolean useCairo;
 	static boolean CAIRO_LOADED;
 
 	/*
@@ -406,7 +409,7 @@ public int getDepth () {
  */
 public Point getDPI () {
 	checkDevice ();
-	return new Point (72, 72);
+	return getScreenDPI();
 }
 
 /**
@@ -473,6 +476,13 @@ public FontData[] getFontList (String faceName, boolean scalable) {
 	return result;
 }
 
+Point getScreenDPI () {
+	int widthMM = OS.gdk_screen_width_mm ();
+	int width = OS.gdk_screen_width ();
+	int dpi = Compatibility.round (254 * width, widthMM * 10);
+	return new Point (dpi, dpi);
+}
+
 /**
  * Returns the matching standard color for the given
  * constant, which should be one of the color constants
@@ -568,6 +578,8 @@ public boolean getWarnings () {
  * @see #create
  */
 protected void init () {
+	this.dpi = getDPI();
+	
 	if (xDisplay != 0) {
 		int[] event_basep = new int[1], error_basep = new int [1];
 		if (OS.XRenderQueryExtension (xDisplay, event_basep, error_basep)) {
@@ -576,6 +588,11 @@ protected void init () {
 			useXRender = major_versionp[0] > 0 || (major_versionp[0] == 0 && minor_versionp[0] >= 8);
 		}
 	}
+	
+	if (OS.GTK_VERSION > OS.VERSION (2, 17, 0) && System.getProperty("org.eclipse.swt.internal.gtk.useCairo") != null) {
+		useCairo = true;
+	}
+	
 	//TODO: Remove; temporary code only
 	boolean fixAIX = OS.IsAIX && OS.PTR_SIZEOF == 8;
 	
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java
index 2619dbb..70a7b7d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -186,6 +186,8 @@ public FontData[] getFontData() {
 	OS.memmove(buffer, family, length);
 	String name = new String(Converter.mbcsToWcs(null, buffer));
 	float height = (float)OS.pango_font_description_get_size(handle) / OS.PANGO_SCALE;
+	Point dpi = device.dpi, screenDPI = device.getScreenDPI();
+	float size = height * screenDPI.y / dpi.y;
 	int pangoStyle = OS.pango_font_description_get_style(handle);
 	int pangoWeight = OS.pango_font_description_get_weight(handle);
 	int style = SWT.NORMAL;
@@ -197,7 +199,7 @@ public FontData[] getFontData() {
 	buffer = new byte [length + 1];
 	OS.memmove (buffer, fontString, length);	
 	OS.g_free (fontString);
-	FontData data = new FontData(name, height, style);
+	FontData data = new FontData(name, size, style);
 	data.string = buffer;
 	return new FontData[]{data};
 }
@@ -240,6 +242,8 @@ public int hashCode() {
 void init(String name, float height, int style, byte[] fontString) {
 	if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
 	if (height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	Point dpi = device.dpi, screenDPI = device.getScreenDPI();
+	float size = height * dpi.y / screenDPI.y;
 	if (fontString != null) {
 		handle = OS.pango_font_description_from_string (fontString);
 		if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
@@ -248,8 +252,8 @@ void init(String name, float height, int style, byte[] fontString) {
 		if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
 		byte[] buffer = Converter.wcsToMbcs(null, name, true);
 		OS.pango_font_description_set_family(handle, buffer);
-		if (height > 0) {
-			OS.pango_font_description_set_size(handle, (int)(0.5f + height * OS.PANGO_SCALE));
+		if (size > 0) {
+			OS.pango_font_description_set_size(handle, (int)(0.5f + size * OS.PANGO_SCALE));
 		}
 		OS.pango_font_description_set_stretch(handle, OS.PANGO_STRETCH_NORMAL);
 		int pangoStyle = OS.PANGO_STYLE_NORMAL;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/FontData.java
index 39a350c..204f6f7 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/FontData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/FontData.java	
@@ -318,7 +318,7 @@ public int getStyle() {
  * @see #equals
  */
 public int hashCode () {
-	return name.hashCode() ^ getHeight() ^ style;
+	return name.hashCode() ^ getHeight() << 8 ^ style;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java
index ac76e2c..4cb4b66 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -2813,6 +2813,9 @@ void init(Drawable drawable, GCData data, int /*long*/ gdkGC) {
 	this.drawable = drawable;
 	this.data = data;
 	handle = gdkGC;
+	if (device.useCairo) {
+		initCairo();
+	}
 	if ((data.style & SWT.MIRRORED) != 0) {
 	  initCairo();
 	  int /*long*/ cairo = data.cairo;
@@ -2949,7 +2952,7 @@ boolean isIdentity(double[] matrix) {
  */
 public void setAdvanced(boolean advanced) {
 	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
-	if ((data.style & SWT.MIRRORED) != 0) {
+	if ((data.style & SWT.MIRRORED) != 0 || device.useCairo) {
 		if (!advanced) {
 			setAlpha(0xFF);
 			setAntialias(SWT.DEFAULT);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java
index 08c0da6..c70a42a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Image.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/TextLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/TextLayout.java
index 372b628..11adbc6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/TextLayout.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/TextLayout.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,7 +142,7 @@ void computeRuns () {
 			attribute.end_index = bytePos + offset + 6;
 			OS.memmove (attr, attribute, PangoAttribute.sizeof);
 			OS.pango_attr_list_insert(attrList, attr);			
-			int pos = (int)/*64*/OS.g_utf8_pointer_to_offset(ptr, ptr + bytePos);
+			int pos = (int)/*64*/OS.g_utf16_pointer_to_offset(ptr, ptr + bytePos);
 			chars[pos + lineIndex * 2] = ZWS;
 			chars[pos + lineIndex * 2 + 1] = ZWNBS;
 			segmentsText.getChars(oldPos, pos, chars,  oldPos + lineIndex * 2);
@@ -166,7 +166,7 @@ void computeRuns () {
 		int segmentCount = 0;
 		for (int i = 0; i < chars.length; i++) {
 			char c = chars[i];
-			if (c == ZWS && lineOffsets != null && i == lineOffsets[lineIndex]) {
+			if (c == ZWS && lineOffsets != null && lineIndex < lineOffsets.length && i == lineOffsets[lineIndex]) {
 				invalidOffsets[offsetCount++] = i;		//ZWS
 				invalidOffsets[offsetCount++] = ++i;	//ZWNBS
 				lineIndex++;
@@ -184,8 +184,8 @@ void computeRuns () {
 		if (style == null) continue;
 		int start = translateOffset(styleItem.start);
 		int end = translateOffset(styles[i+1].start - 1);
-		int byteStart = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, start) - ptr);
-		int byteEnd = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr);
+		int byteStart = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, start) - ptr);
+		int byteEnd = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, end + 1) - ptr);
 		byteStart = Math.min(byteStart, strlen);
 		byteEnd = Math.min(byteEnd, strlen);
 		Font font = style.font;
@@ -408,7 +408,7 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 	boolean hasSelection = selectionStart <= selectionEnd && selectionStart != -1 && selectionEnd != -1;
 	GCData data = gc.data;
 	int /*long*/ cairo = data.cairo;
-	if (flags != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) {
+	if ((flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) {
 		int /*long*/[] attrs = new int /*long*/[1];
 		int[] nAttrs = new int[1];
 		PangoLogAttr logAttr = new PangoLogAttr();
@@ -430,9 +430,9 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 			OS.pango_layout_iter_get_line_extents(iter, null, rect);
 			if (OS.pango_layout_iter_next_line(iter)) {
 				int bytePos = OS.pango_layout_iter_get_index(iter);
-				lineEnd = (int)/*64*/OS.g_utf8_pointer_to_offset(ptr, ptr + bytePos);
+				lineEnd = (int)/*64*/OS.g_utf16_pointer_to_offset(ptr, ptr + bytePos);
 			} else {
-				lineEnd = (int)/*64*/OS.g_utf8_strlen(ptr, -1);
+				lineEnd = (int)/*64*/OS.g_utf16_strlen(ptr, -1);
 			}
 			boolean extent = false;
 			if (lineIndex == lineCount - 1 && (flags & SWT.LAST_LINE_SELECTION) != 0) {
@@ -494,7 +494,7 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 	} else {
 		selectionStart = Math.min(Math.max(0, selectionStart), length - 1);
 		selectionEnd = Math.min(Math.max(0, selectionEnd), length - 1);
-		length = (int)/*64*/OS.g_utf8_strlen(OS.pango_layout_get_text(layout), -1);
+		length = (int)/*64*/OS.g_utf16_strlen(OS.pango_layout_get_text(layout), -1);
 		selectionStart = translateOffset(selectionStart);
 		selectionEnd = translateOffset(selectionEnd);
 		if (selectionForeground == null) selectionForeground = device.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT);
@@ -518,8 +518,8 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 			}
 		} else {
 			int /*long*/ ptr = OS.pango_layout_get_text(layout);
-			int byteSelStart = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, selectionStart) - ptr);
-			int byteSelEnd = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, selectionEnd + 1) - ptr);
+			int byteSelStart = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, selectionStart) - ptr);
+			int byteSelEnd = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, selectionEnd + 1) - ptr);
 			int strlen = OS.strlen(ptr);
 			byteSelStart = Math.min(byteSelStart, strlen);
 			byteSelEnd = Math.min(byteSelEnd, strlen);
@@ -599,8 +599,8 @@ void drawBorder(GC gc, int x, int y, GdkColor selectionColor) {
 			}
 			start = translateOffset(start);
 			int end = translateOffset(styles[i+1].start - 1);
-			int byteStart = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, start) - ptr);
-			int byteEnd = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr);
+			int byteStart = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, start) - ptr);
+			int byteEnd = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, end + 1) - ptr);
 			int[] ranges = new int[]{byteStart, byteEnd};
 			int /*long*/ rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges, ranges.length / 2);
 			if (rgn != 0) {
@@ -677,8 +677,8 @@ void drawBorder(GC gc, int x, int y, GdkColor selectionColor) {
 			}
 			start = translateOffset(start);
 			int end = translateOffset(styles[i+1].start - 1);
-			int byteStart = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, start) - ptr);
-			int byteEnd = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr);
+			int byteStart = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, start) - ptr);
+			int byteEnd = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, end + 1) - ptr);
 			int[] ranges = new int[]{byteStart, byteEnd};
 			int /*long*/ rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges, ranges.length / 2);
 			if (rgn != 0) {
@@ -776,8 +776,8 @@ void drawBorder(GC gc, int x, int y, GdkColor selectionColor) {
 			}
 			start = translateOffset(start);
 			int end = translateOffset(styles[i+1].start - 1);
-			int byteStart = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, start) - ptr);
-			int byteEnd = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, end + 1) - ptr);
+			int byteStart = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, start) - ptr);
+			int byteEnd = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, end + 1) - ptr);
 			int[] ranges = new int[]{byteStart, byteEnd};
 			int /*long*/ rgn = OS.gdk_pango_layout_get_clip_region(layout, x, y, ranges, ranges.length / 2);
 			if (rgn != 0) {
@@ -946,8 +946,8 @@ public Rectangle getBounds(int start, int end) {
 	start = translateOffset(start);
 	end = translateOffset(end);
 	int /*long*/ ptr = OS.pango_layout_get_text(layout);
-	int byteStart = (int)/*64*/(OS.g_utf8_offset_to_pointer (ptr, start) - ptr);
-	int byteEnd = (int)/*64*/(OS.g_utf8_offset_to_pointer (ptr, end + 1) - ptr);
+	int byteStart = (int)/*64*/(OS.g_utf16_offset_to_pointer (ptr, start) - ptr);
+	int byteEnd = (int)/*64*/(OS.g_utf16_offset_to_pointer (ptr, end + 1) - ptr);
 	int strlen = OS.strlen(ptr);
 	byteStart = Math.min(byteStart, strlen);
 	byteEnd = Math.min(byteEnd, strlen);
@@ -1086,7 +1086,7 @@ public int getLevel(int offset) {
 	PangoItem item = new PangoItem();
 	PangoLayoutRun run = new PangoLayoutRun();
 	int /*long*/ ptr = OS.pango_layout_get_text(layout);
-	int /*long*/ byteOffset = OS.g_utf8_offset_to_pointer(ptr, offset) - ptr;
+	int /*long*/ byteOffset = OS.g_utf16_offset_to_pointer(ptr, offset) - ptr;
 	int strlen = OS.strlen(ptr);
 	byteOffset = Math.min(byteOffset, strlen);
 	do {
@@ -1180,7 +1180,7 @@ public int getLineIndex(int offset) {
 	offset = translateOffset(offset);
 	int line = 0;
 	int /*long*/ ptr = OS.pango_layout_get_text(layout);
-	int /*long*/ byteOffset = OS.g_utf8_offset_to_pointer(ptr,offset) - ptr;
+	int /*long*/ byteOffset = OS.g_utf16_offset_to_pointer(ptr,offset) - ptr;
 	int strlen = OS.strlen(ptr);
 	byteOffset = Math.min(byteOffset, strlen);
 	int /*long*/ iter = OS.pango_layout_get_iter(layout);
@@ -1253,7 +1253,7 @@ public int[] getLineOffsets() {
 	for (int i = 0; i < lineCount; i++) {
 		int /*long*/ linePtr = OS.pango_layout_get_line(layout, i);
 		OS.memmove(line, linePtr, PangoLayoutLine.sizeof);
-		int pos = (int)/*64*/OS.g_utf8_pointer_to_offset(ptr, ptr + line.start_index);
+		int pos = (int)/*64*/OS.g_utf16_pointer_to_offset(ptr, ptr + line.start_index);
 		offsets[i] = untranslateOffset(pos);
 	}
 	offsets[lineCount] = text.length();
@@ -1283,7 +1283,7 @@ public Point getLocation(int offset, boolean trailing) {
 	if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
 	offset = translateOffset(offset);
 	int /*long*/ ptr = OS.pango_layout_get_text(layout);
-	int byteOffset = (int)/*64*/(OS.g_utf8_offset_to_pointer(ptr, offset) - ptr);
+	int byteOffset = (int)/*64*/(OS.g_utf16_offset_to_pointer(ptr, offset) - ptr);
 	int strlen = OS.strlen(ptr);
 	byteOffset = Math.min(byteOffset, strlen);
 	PangoRectangle pos = new PangoRectangle();
@@ -1337,32 +1337,50 @@ int _getOffset (int offset, int movement, boolean forward) {
 	int[] nAttrs = new int[1];
 	OS.pango_layout_get_log_attrs(layout, attrs, nAttrs);
 	if (attrs[0] == 0) return offset + step;
-	length = (int)/*64*/OS.g_utf8_strlen(OS.pango_layout_get_text(layout), -1);
-	offset += step;
-	int internalOffset = translateOffset(offset);
+	
+	int /*long*/ ptr = OS.pango_layout_get_text(layout);
+	int utf8Offset = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, translateOffset(offset));
+	int utf8Length = (int)/*64*/OS.g_utf8_strlen(ptr, -1);
+	utf8Offset += step;
 	PangoLogAttr logAttr = new PangoLogAttr();
-	while (0 < internalOffset && internalOffset < length) {
-		OS.memmove(logAttr, attrs[0] + internalOffset * PangoLogAttr.sizeof, PangoLogAttr.sizeof);
-		if (((movement & SWT.MOVEMENT_CLUSTER) != 0) && logAttr.is_cursor_position) break; 
+	while (0 <= utf8Offset && utf8Offset <= utf8Length) {
+		OS.memmove(logAttr, attrs[0] + utf8Offset * PangoLogAttr.sizeof, PangoLogAttr.sizeof);
+		boolean found = false;
+		if (((movement & SWT.MOVEMENT_CLUSTER) != 0) && logAttr.is_cursor_position) found = true; 
 		if ((movement & SWT.MOVEMENT_WORD) != 0) {
 			if (forward) {
-				if (logAttr.is_word_end) break;
+				if (logAttr.is_word_end) found = true;
 			} else {
-				if (logAttr.is_word_start) break;
+				if (logAttr.is_word_start) found = true;
 			}
 		}
 		if ((movement & SWT.MOVEMENT_WORD_START) != 0) {
-			if (logAttr.is_word_start) break;
-			if (logAttr.is_sentence_end) break;
+			if (logAttr.is_word_start) found = true;
+			if (logAttr.is_sentence_end) found = true;
 		}
 		if ((movement & SWT.MOVEMENT_WORD_END) != 0) {
-			if (logAttr.is_word_end) break;
+			if (logAttr.is_word_end) found = true;
+			if (logAttr.is_sentence_start) found = true;
 		}
-		offset += step;
-		internalOffset = translateOffset(offset);
+		if (found) {
+			int testOffset = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, utf8Offset); 
+			if (invalidOffsets != null) {
+				for (int i = 0; i < invalidOffsets.length; i++) {
+					if (testOffset == invalidOffsets[i]) {
+						found = false;
+						break;
+					}
+				}
+			}
+			if (found) {
+				offset = untranslateOffset(testOffset);
+				break;
+			}
+		}
+		utf8Offset += step;
 	}
 	OS.g_free(attrs[0]);
-	return Math.min(Math.max(0, offset), text.length());
+	return Math.min(Math.max(0, offset), length);
 }
 
 /**
@@ -1454,8 +1472,13 @@ public int getOffset(int x, int y, int[] trailing) {
 	int[] piTrailing = new int[1];
 	OS.pango_layout_xy_to_index(layout, x * OS.PANGO_SCALE, y * OS.PANGO_SCALE, index, piTrailing);
 	int /*long*/ ptr = OS.pango_layout_get_text(layout);
-	int offset = (int)/*64*/OS.g_utf8_pointer_to_offset(ptr, ptr + index[0]);
-	if (trailing != null) trailing[0] = piTrailing[0];
+	int offset = (int)/*64*/OS.g_utf16_pointer_to_offset(ptr, ptr + index[0]);
+	if (trailing != null) {
+		trailing[0] = piTrailing[0];
+		if (piTrailing[0] != 0) {
+			trailing[0] = (int)/*64*/OS.g_utf8_offset_to_utf16_offset(ptr, OS.g_utf8_pointer_to_offset(ptr, ptr + index[0]) + piTrailing[0]) - offset;
+		}
+	}
 	return untranslateOffset(offset);
 }
 
@@ -1911,6 +1934,7 @@ public void setOrientation(int orientation) {
 	if ((orientation & SWT.LEFT_TO_RIGHT) != 0) orientation = SWT.LEFT_TO_RIGHT;
 	int baseDir = orientation == SWT.RIGHT_TO_LEFT ? OS.PANGO_DIRECTION_RTL : OS.PANGO_DIRECTION_LTR;
 	if (OS.pango_context_get_base_dir(context) == baseDir) return;
+	freeRuns();
 	OS.pango_context_set_base_dir(context, baseDir);
 	OS.pango_layout_context_changed(layout);
 	int align = OS.pango_layout_get_alignment(layout);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java
index f16b2d4..862ed98 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Button.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,8 +36,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
  * when the ARROW style is specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
@@ -52,6 +51,9 @@ public class Button extends Control {
 	Image image;
 	String text;
 
+	static final int INNER_BORDER = 1;
+	static final int DEFAULT_BORDER = 1;
+
 /**
  * Constructs a new instance of this class given its parent
  * and a style value describing its behavior and appearance.
@@ -109,6 +111,22 @@ static int checkStyle (int style) {
 	return style;
 }
 
+static GtkBorder getBorder (byte[] border, int /*long*/ handle, int defaultBorder) {
+    GtkBorder gtkBorder = new GtkBorder();
+    int /*long*/ []  borderPtr = new int /*long*/ [1];
+    OS.gtk_widget_style_get (handle, border, borderPtr,0);
+    if (borderPtr[0] != 0) {
+        OS.memmove (gtkBorder, borderPtr[0], GtkBorder.sizeof);
+        OS.gtk_border_free(borderPtr[0]);
+        return gtkBorder;
+    }
+    gtkBorder.left = defaultBorder;
+    gtkBorder.top = defaultBorder;
+    gtkBorder.right = defaultBorder;
+    gtkBorder.bottom = defaultBorder;
+    return gtkBorder;
+}
+
 /**
  * Adds the listener to the collection of listeners who will
  * be notified when the control is selected by the user, by sending
@@ -165,21 +183,68 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		OS.gtk_widget_get_size_request (boxHandle, reqWidth, reqHeight);
 		OS.gtk_widget_set_size_request (boxHandle, -1, -1);
 	}
-	Point size = computeNativeSize (handle, wHint, hHint, changed);
+	Point size;
+	boolean wrap = labelHandle != 0 && (style & SWT.WRAP) != 0 && (OS.GTK_WIDGET_FLAGS (labelHandle) & OS.GTK_VISIBLE) != 0;
+	if (wrap) {
+		int borderWidth = OS.gtk_container_get_border_width (handle);
+		int[] focusWidth = new int[1];
+		OS.gtk_widget_style_get (handle, OS.focus_line_width, focusWidth, 0);
+		int[] focusPadding = new int[1];
+		OS.gtk_widget_style_get (handle, OS.focus_padding, focusPadding, 0);
+		int trimWidth = 2 * (borderWidth + focusWidth [0] + focusPadding [0]), trimHeight = trimWidth;
+		int indicatorHeight = 0;
+		if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+			int[] indicatorSize = new int[1];
+			OS.gtk_widget_style_get (handle, OS.indicator_size, indicatorSize, 0);
+			int[] indicatorSpacing = new int[1];
+			OS.gtk_widget_style_get (handle, OS.indicator_spacing, indicatorSpacing, 0);
+			indicatorHeight = indicatorSize [0] + 2 * indicatorSpacing [0];
+			trimWidth += indicatorHeight + indicatorSpacing [0];
+		} else {
+			int /*long*/ style = OS.gtk_widget_get_style (handle);
+			trimWidth += OS.gtk_style_get_xthickness (style) * 2;
+			trimHeight += OS.gtk_style_get_ythickness (style) * 2;
+			GtkBorder innerBorder = getBorder (OS.inner_border, handle, INNER_BORDER);
+			trimWidth += innerBorder.left + innerBorder.right;
+			trimHeight += innerBorder.top + innerBorder.bottom;
+			if ((OS.GTK_WIDGET_FLAGS (handle) & OS.GTK_CAN_DEFAULT) != 0) {
+				GtkBorder defaultBorder = getBorder (OS.default_border, handle, DEFAULT_BORDER);
+				trimWidth += defaultBorder.left + defaultBorder.right;
+				trimHeight += defaultBorder.top + defaultBorder.bottom;
+			}
+		}
+		int imageWidth = 0, imageHeight = 0;
+		if (OS.GTK_WIDGET_VISIBLE (imageHandle)) {
+			GtkRequisition requisition = new GtkRequisition ();
+			OS.gtk_widget_size_request (imageHandle, requisition);
+			imageWidth = requisition.width;
+			imageHeight = requisition.height;
+			int [] spacing = new int [1];
+			OS.g_object_get (boxHandle, OS.spacing, spacing, 0);
+			imageWidth += spacing [0];
+		}
+		int /*long*/ labelLayout = OS.gtk_label_get_layout (labelHandle);
+		int pangoWidth = OS.pango_layout_get_width (labelLayout);
+		if (wHint != SWT.DEFAULT) {
+			OS.pango_layout_set_width (labelLayout, Math.max (1, (wHint - imageWidth - trimWidth)) * OS.PANGO_SCALE);
+		} else {
+			OS.pango_layout_set_width (labelLayout, -1);
+		}
+		int [] w = new int [1], h = new int [1];
+		OS.pango_layout_get_size (labelLayout, w, h);
+		OS.pango_layout_set_width (labelLayout, pangoWidth);
+		size = new Point(0, 0);
+		size.x += wHint == SWT.DEFAULT ? OS.PANGO_PIXELS(w [0]) + imageWidth + trimWidth : wHint;
+		size.y += hHint == SWT.DEFAULT ? Math.max(Math.max(imageHeight, indicatorHeight), OS.PANGO_PIXELS(h [0])) + trimHeight : hHint;
+	} else {
+		size = computeNativeSize (handle, wHint, hHint, changed);
+	}
 	if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
 		OS.gtk_widget_set_size_request (boxHandle, reqWidth [0], reqHeight [0]);
 	}
 	if (wHint != SWT.DEFAULT || hHint != SWT.DEFAULT) {
 		if ((OS.GTK_WIDGET_FLAGS (handle) & OS.GTK_CAN_DEFAULT) != 0) {
-			int /*long*/ [] buffer = new int /*long*/ [1];
-			GtkBorder border = new GtkBorder ();
-			OS.gtk_widget_style_get (handle, OS.default_border, buffer, 0);
-			if (buffer[0] != 0) {
-				OS.memmove (border, buffer[0], GtkBorder.sizeof);
-			} else {
-				/* Use the GTK+ default value of 1 for each. */
-				border.left = border.right = border.top = border.bottom = 1;
-			}
+			GtkBorder border = getBorder (OS.default_border, handle, DEFAULT_BORDER);
 			if (wHint != SWT.DEFAULT) size.x += border.left + border.right;
 			if (hHint != SWT.DEFAULT) size.y += border.top + border.bottom;
 		}
@@ -252,6 +317,12 @@ void createHandle (int index) {
 		OS.gtk_container_add (handle, boxHandle);
 		OS.gtk_container_add (boxHandle, imageHandle);
 		OS.gtk_container_add (boxHandle, labelHandle);
+		if ((style & SWT.WRAP) != 0) {
+			OS.gtk_label_set_line_wrap (labelHandle, true);
+			if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
+				OS.gtk_label_set_line_wrap_mode (labelHandle, OS.PANGO_WRAP_WORD_CHAR);
+			}
+		}
 	}
 	OS.gtk_container_add (fixedHandle, handle);
 	
@@ -646,6 +717,68 @@ void setBackgroundColor (GdkColor color) {
 	if (imageHandle != 0) setBackgroundColor(imageHandle, color);
 }
 
+int setBounds (int x, int y, int width, int height, boolean move, boolean resize) {
+	/*
+	* Bug in GTK.  For some reason, when the label is
+	* wrappable and its container is resized, it does not
+	* cause the label to be wrapped.  The fix is to
+	* determine the size that will wrap the label
+	* and expilictly set that size to force the label
+	* to wrap.
+	* 
+	* This part of the fix causes the label to be
+	* resized to the preferred size but it still
+	* won't draw properly.
+	*/
+	boolean wrap = labelHandle != 0 && (style & SWT.WRAP) != 0 && (OS.GTK_WIDGET_FLAGS (labelHandle) & OS.GTK_VISIBLE) != 0;
+	if (wrap) OS.gtk_widget_set_size_request (boxHandle, -1, -1);
+	int result = super.setBounds (x, y, width, height, move, resize);
+	/*
+	* Bug in GTK.  For some reason, when the label is
+	* wrappable and its container is resized, it does not
+	* cause the label to be wrapped.  The fix is to
+	* determine the size that will wrap the label
+	* and expilictly set that size to force the label
+	* to wrap.
+	* 
+	* This part of the fix forces the label to be
+	* resized so that it will draw wrapped.
+	*/
+	if (wrap) {
+		int boxWidth = OS.GTK_WIDGET_WIDTH (boxHandle);
+		int boxHeight = OS.GTK_WIDGET_HEIGHT (boxHandle);
+		int /*long*/ labelLayout = OS.gtk_label_get_layout (labelHandle);
+		int pangoWidth = OS.pango_layout_get_width (labelLayout);
+		OS.pango_layout_set_width (labelLayout, -1);
+		int [] w = new int [1], h = new int [1];
+		OS.pango_layout_get_size (labelLayout, w, h);
+		OS.pango_layout_set_width (labelLayout, pangoWidth);
+		int imageWidth = 0;
+		if (OS.GTK_WIDGET_VISIBLE (imageHandle)) {
+			GtkRequisition requisition = new GtkRequisition ();
+			OS.gtk_widget_size_request (imageHandle, requisition);
+			imageWidth = requisition.width;
+			int [] spacing = new int [1];
+			OS.g_object_get (boxHandle, OS.spacing, spacing, 0);
+			imageWidth += spacing [0];
+		}
+		OS.gtk_widget_set_size_request (labelHandle, Math.min(OS.PANGO_PIXELS(w [0]), boxWidth - imageWidth), -1);
+		/*
+		* Bug in GTK.  Setting the size request should invalidate the label's
+		* layout, but it does not.  The fix is to resize the label directly. 
+		*/
+		GtkRequisition requisition = new GtkRequisition ();
+		OS.gtk_widget_size_request (boxHandle, requisition);
+		GtkAllocation allocation = new GtkAllocation ();
+		allocation.x = OS.GTK_WIDGET_X (boxHandle);
+		allocation.y = OS.GTK_WIDGET_Y (boxHandle);
+		allocation.width = boxWidth;
+		allocation.height = boxHeight;
+		OS.gtk_widget_size_allocate (boxHandle, allocation);
+	}
+	return result;
+}
+
 void setFontDescription (int /*long*/ font) {
 	super.setFontDescription (font);
 	if (labelHandle != 0) OS.gtk_widget_modify_font (labelHandle, font);
@@ -734,16 +867,18 @@ public void setImage (Image image) {
 	_setAlignment (style);
 }
 
-void setOrientation () {
-	super.setOrientation ();
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (boxHandle != 0) OS.gtk_widget_set_direction (boxHandle, OS.GTK_TEXT_DIR_RTL);
-		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, OS.GTK_TEXT_DIR_RTL);
-		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, OS.GTK_TEXT_DIR_RTL);
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+		if (boxHandle != 0) OS.gtk_widget_set_direction (boxHandle, dir);
+		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, dir);
+		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, dir);
 		if (arrowHandle != 0) {
+			dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_ARROW_RIGHT : OS.GTK_ARROW_LEFT;
 			switch (style & (SWT.LEFT | SWT.RIGHT)) {
-				case SWT.LEFT: OS.gtk_arrow_set (arrowHandle, OS.GTK_ARROW_RIGHT, OS.GTK_SHADOW_OUT); break;
-				case SWT.RIGHT: OS.gtk_arrow_set (arrowHandle, OS.GTK_ARROW_LEFT, OS.GTK_SHADOW_OUT); break;
+				case SWT.LEFT: OS.gtk_arrow_set (arrowHandle, dir, OS.GTK_SHADOW_OUT); break;
+				case SWT.RIGHT: OS.gtk_arrow_set (arrowHandle, dir, OS.GTK_SHADOW_OUT); break;
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java
index 8bfa82f..b5034c6 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Caret.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ColorDialog.java
index 1605c49..0a0c735 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ColorDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ColorDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,8 +26,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
@@ -153,6 +152,13 @@ public RGB open () {
 		hookId = OS.g_signal_add_emission_hook (signalId, 0, display.emissionProc, handle, 0);
 	}	
 	int response = OS.gtk_dialog_run (handle);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
 		OS.g_signal_remove_emission_hook (signalId, hookId);
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
index 389aa23..0b279c4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -571,10 +571,10 @@ boolean filterKey (int keyval, int /*long*/ event) {
 }
 
 int /*long*/ findPopupHandle (int /*long*/ oldList) {
-	int /*long*/ hdl = 0;
+	int /*long*/ result = 0;
 	int /*long*/ currentList = OS.gtk_window_list_toplevels();
 	int /*long*/ oldFromList = oldList;
-	int /*long*/ newFromList = currentList;
+	int /*long*/ newFromList = OS.g_list_last(currentList);
 	boolean isFound;
 	while (newFromList != 0) {
 		int /*long*/ newToplevel = OS.g_list_data(newFromList);
@@ -589,14 +589,14 @@ int /*long*/ findPopupHandle (int /*long*/ oldList) {
 			oldFromList = OS.g_list_next(oldFromList);
 		}
 		if (!isFound) {
-			hdl = newToplevel;
+			result = newToplevel;
 			break;
 		}
-		newFromList = OS.g_list_next(newFromList);
+		newFromList = OS.g_list_previous(newFromList);
 	}
 	OS.g_list_free(oldList);
 	OS.g_list_free(currentList);
-	return hdl;
+	return result;
 }
 
 
@@ -808,7 +808,7 @@ public void deselectAll () {
 	}
 }
 
-boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
+boolean dragDetect(int x, int y, boolean filter, boolean dragOnTimeout, boolean[] consume) {
 	if (filter && entryHandle != 0) {
 		int [] index = new int [1];
 		int [] trailing = new int [1];
@@ -816,16 +816,18 @@ boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
 		OS.pango_layout_xy_to_index (layout, x * OS.PANGO_SCALE, y * OS.PANGO_SCALE, index, trailing);
 		int /*long*/ ptr = OS.pango_layout_get_text (layout);
 		int position = (int)/*64*/OS.g_utf8_pointer_to_offset (ptr, ptr + index[0]) + trailing[0];
-		Point selection = getSelection ();
-		if (selection.x <= position && position < selection.y) {
-			if (super.dragDetect (x, y, filter, consume)) {
+		int [] start = new int [1];
+		int [] end = new int [1];
+		OS.gtk_editable_get_selection_bounds (entryHandle, start, end);
+		if (start [0] <= position && position < end [0]) {
+			if (super.dragDetect (x, y, filter, dragOnTimeout, consume)) {
 				if (consume != null) consume [0] = true;
 				return true;
 			}
 		}
 		return false;
 	}
-	return super.dragDetect (x, y, filter, consume);
+	return super.dragDetect (x, y, filter, dragOnTimeout, consume);
 }
 
 int /*long*/ enterExitHandle () {
@@ -966,8 +968,7 @@ String getNameText () {
  * @since 2.1.2
  */
 public int getOrientation () {
-	checkWidget();
-	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	return super.getOrientation ();
 }
 
 /**
@@ -998,7 +999,7 @@ public Point getSelection () {
 			if (index != -1) length = getItem (index).length ();
 		} else {
 			int /*long*/ str = OS.gtk_entry_get_text (entryHandle);
-			if (str != 0) length = (int)/*64*/OS.g_utf8_strlen (str, -1);
+			if (str != 0) length = (int)/*64*/OS.g_utf16_strlen (str, -1);
 		}
 		return new Point (0, length);
 	}
@@ -1006,6 +1007,9 @@ public Point getSelection () {
 	int [] end = new int [1];
 	if (entryHandle != 0) {
 		OS.gtk_editable_get_selection_bounds (entryHandle, start, end);
+		int /*long*/ ptr = OS.gtk_entry_get_text (entryHandle);
+		start[0] = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start[0]);
+		end[0] = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end[0]);
 	}
 	return new Point(start [0], end [0]);
 }
@@ -1269,8 +1273,11 @@ int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /
 		return 0;
 	}
 	if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0;
-	if (end_pos == -1) end_pos = OS.g_utf8_strlen (OS.gtk_entry_get_text (entryHandle), -1);
-	String newText = verifyText ("", (int)/*64*/start_pos, (int)/*64*/end_pos);
+	int /*long*/ ptr = OS.gtk_entry_get_text (entryHandle);
+	if (end_pos == -1) end_pos = OS.g_utf8_strlen (ptr, -1);
+	int start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start_pos);
+	int end = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end_pos);
+	String newText = verifyText ("", start, end);
 	if (newText == null) {
 		OS.g_signal_stop_emission_by_name (entryHandle, OS.delete_text);
 	} else {
@@ -1372,11 +1379,10 @@ int /*long*/ gtk_insert_text (int /*long*/ widget, int /*long*/ new_text, int /*
 	String oldText = new String (Converter.mbcsToWcs (null, buffer));
 	int [] pos = new int [1];
 	OS.memmove (pos, position, 4);
-	if (pos [0] == -1) {
-		int /*long*/ ptr = OS.gtk_entry_get_text (entryHandle);
-		pos [0] = (int)/*64*/OS.g_utf8_strlen (ptr, -1);
-	}
-	String newText = verifyText (oldText, pos [0], pos [0]);
+	int /*long*/ ptr = OS.gtk_entry_get_text (entryHandle);
+	if (pos [0] == -1) pos [0] = (int)/*64*/OS.g_utf8_strlen (ptr, -1);
+	int start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, pos [0]);
+	String newText = verifyText (oldText, start, start);
 	if (newText != oldText) {
 		int [] newStart = new int [1], newEnd = new int [1];
 		OS.gtk_editable_get_selection_bounds (entryHandle, newStart, newEnd);
@@ -2050,12 +2056,28 @@ public void setListVisible (boolean visible) {
 	}
 }
 
-void setOrientation() {
-	super.setOrientation();
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (listHandle != 0) OS.gtk_widget_set_direction (listHandle, OS.GTK_TEXT_DIR_RTL);
-		if (entryHandle != 0) OS.gtk_widget_set_direction (entryHandle, OS.GTK_TEXT_DIR_RTL);
-		if (cellHandle != 0) OS.gtk_widget_set_direction (cellHandle, OS.GTK_TEXT_DIR_RTL);
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+		if (listHandle != 0) OS.gtk_widget_set_direction (listHandle, dir);
+		if (entryHandle != 0) OS.gtk_widget_set_direction (entryHandle, dir);
+		if (cellHandle != 0) OS.gtk_widget_set_direction (cellHandle, dir);
+		if (!create) {
+			if (listHandle != 0) {
+				OS.gtk_widget_set_direction (listHandle, dir);
+				int /*long*/ itemsList = OS.gtk_container_get_children (listHandle);
+				if (itemsList != 0) {
+					int count = OS.g_list_length (itemsList);
+					for (int i=count - 1; i>=0; i--) {
+						int /*long*/ widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
+						OS.gtk_widget_set_direction (widget, dir);
+					}
+					OS.g_list_free (itemsList);
+				}
+			}
+			if (popupHandle != 0) OS.gtk_container_forall (popupHandle, display.setDirectionProc, dir);
+		}
 	}
 }
 
@@ -2074,31 +2096,7 @@ void setOrientation() {
  * @since 2.1.2
  */
 public void setOrientation (int orientation) {
-	if (OS.GTK_VERSION >= OS.VERSION (2, 4, 0)) {
-		checkWidget();
-		int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
-		if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
-		style &= ~flags;
-		style |= orientation & flags;
-		int dir = (orientation & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
-		OS.gtk_widget_set_direction (fixedHandle, dir);
-		OS.gtk_widget_set_direction (handle, dir);
-		if (entryHandle != 0) OS.gtk_widget_set_direction (entryHandle, dir);
-		if (listHandle != 0) {
-			OS.gtk_widget_set_direction (listHandle, dir);
-			int /*long*/ itemsList = OS.gtk_container_get_children (listHandle);
-			if (itemsList != 0) {
-				int count = OS.g_list_length (itemsList);
-				for (int i=count - 1; i>=0; i--) {
-					int /*long*/ widget = OS.gtk_bin_get_child (OS.g_list_nth_data (itemsList, i));
-					OS.gtk_widget_set_direction (widget, dir);
-				}
-				OS.g_list_free (itemsList);
-			}
-		}
-		if (cellHandle != 0) OS.gtk_widget_set_direction (cellHandle, dir);
-		if (popupHandle != 0) OS.gtk_container_forall (popupHandle, display.setDirectionProc, dir);
-	}
+	super.setOrientation (orientation);
 }
 
 /**
@@ -2122,8 +2120,11 @@ public void setSelection (Point selection) {
 	if (selection == null) error (SWT.ERROR_NULL_ARGUMENT);
 	if ((style & SWT.READ_ONLY) != 0) return;
 	if (entryHandle != 0) {
-		OS.gtk_editable_set_position (entryHandle, selection.x);
-		OS.gtk_editable_select_region (entryHandle, selection.x, selection.y);
+		int /*long*/ ptr = OS.gtk_entry_get_text (entryHandle);
+		int start = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, selection.x);
+		int end = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, selection.y);
+		OS.gtk_editable_set_position (entryHandle, start);
+		OS.gtk_editable_select_region (entryHandle, start, end);
 	}
 }
 
@@ -2178,7 +2179,7 @@ public void setText (String string) {
 	*/
 	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
 		int /*long*/ ptr = OS.gtk_entry_get_text (entryHandle);
-		string = verifyText (string, 0, (int)/*64*/OS.g_utf8_strlen (ptr, -1));
+		string = verifyText (string, 0, (int)/*64*/OS.g_utf16_strlen (ptr, -1));
 		if (string == null) return;
 	}
 	byte [] buffer = Converter.wcsToMbcs (null, string, true);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
index 483032f..4aaf4d3 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -224,9 +224,9 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		}
 	} else {
 		size = minimumSize (wHint, hHint, changed);
+		if (size.x == 0) size.x = DEFAULT_WIDTH;
+		if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	}
-	if (size.x == 0) size.x = DEFAULT_WIDTH;
-	if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) size.x = wHint;
 	if (hHint != SWT.DEFAULT) size.y = hHint;
 	Rectangle trim = computeTrim (0, 0, size.x, size.y);
@@ -1197,7 +1197,7 @@ void moveChildren(int oldWidth) {
 		int x = OS.GTK_WIDGET_X (topHandle);
 		int y = OS.GTK_WIDGET_Y (topHandle);
 		int controlWidth = (child.state & ZERO_WIDTH) != 0 ? 0 : OS.GTK_WIDGET_WIDTH (topHandle);
-		x = oldWidth - controlWidth - x; 
+		if (oldWidth > 0) x = oldWidth - controlWidth - x; 
 		int clientWidth = getClientWidth ();
 		x = clientWidth - controlWidth - x;
 		if (child.enableWindow != 0) {
@@ -1226,11 +1226,12 @@ void moveChildren(int oldWidth) {
 
 Point minimumSize (int wHint, int hHint, boolean changed) {
 	Control [] children = _getChildren ();
+	Rectangle clientArea = getClientArea ();
 	int width = 0, height = 0;
 	for (int i=0; i<children.length; i++) {
 		Rectangle rect = children [i].getBounds ();
-		width = Math.max (width, rect.x + rect.width);
-		height = Math.max (height, rect.y + rect.height);
+		width = Math.max (width, rect.x - clientArea.x + rect.width);
+		height = Math.max (height, rect.y - clientArea.y + rect.height);
 	}
 	return new Point (width, height);
 }
@@ -1411,6 +1412,7 @@ public void setLayout (Layout layout) {
  * @since 3.1
  */
 public void setLayoutDeferred (boolean defer) {
+	checkWidget();
 	if (!defer) {
 		if (--layoutCount == 0) {
 			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
@@ -1422,6 +1424,21 @@ public void setLayoutDeferred (boolean defer) {
 	}
 }
 
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if (!create) {
+		int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+		int orientation = style & flags;	
+		Control [] children = _getChildren ();
+		for (int i=0; i<children.length; i++) {
+			children[i].setOrientation (orientation);
+		}
+		if (((style & SWT.RIGHT_TO_LEFT) != 0) != ((style & SWT.MIRRORED) != 0)) {
+			moveChildren (-1);
+		}
+	}
+}
+
 boolean setScrollBarVisible (ScrollBar bar, boolean visible) {
 	boolean changed = super.setScrollBarVisible (bar, visible);
 	if (changed && layout != null) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java
index a69add3..c3a9f8a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -163,6 +163,8 @@ void fixFocus (Control focusControl) {
 	int /*long*/ focusHandle = shell.vboxHandle;
 	OS.GTK_WIDGET_SET_FLAGS (focusHandle, OS.GTK_CAN_FOCUS);
 	OS.gtk_widget_grab_focus (focusHandle);
+	// widget could be disposed at this point
+	if (isDisposed ()) return;
 	OS.GTK_WIDGET_UNSET_FLAGS (focusHandle, OS.GTK_CAN_FOCUS);
 }
 
@@ -200,6 +202,24 @@ int /*long*/ fontHandle () {
 	return handle;
 }
 
+/**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
 boolean hasFocus () {
 	return this == display.getFocusControl();
 }
@@ -259,7 +279,14 @@ void hookEvents () {
 	int paintMask = OS.GDK_EXPOSURE_MASK | OS.GDK_VISIBILITY_NOTIFY_MASK;
 	OS.gtk_widget_add_events (paintHandle, paintMask);
 	OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [EXPOSE_EVENT], 0, display.closures [EXPOSE_EVENT_INVERSE], false);
-	OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [VISIBILITY_NOTIFY_EVENT], 0, display.closures [VISIBILITY_NOTIFY_EVENT], false);
+	/*
+	* As of GTK 2.17.11, obscured controls no longer send expose 
+	* events. It is no longer necessary to track visiblity notify
+	* events.
+	*/
+	if (OS.GTK_VERSION < OS.VERSION (2, 17, 11)) {
+		OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [VISIBILITY_NOTIFY_EVENT], 0, display.closures [VISIBILITY_NOTIFY_EVENT], false);
+	}
 	OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [EXPOSE_EVENT], 0, display.closures [EXPOSE_EVENT], true);
 
 	/* Connect the Input Method signals */
@@ -632,8 +659,11 @@ void forceResize () {
 
 /**
  * Returns the accessible object for the receiver.
+ * <p>
  * If this is the first time this object is requested,
- * then the object is created and returned.
+ * then the object is created and returned. The object
+ * returned by getAccessible() does not need to be disposed.
+ * </p>
  *
  * @return the accessible object
  *
@@ -1383,6 +1413,41 @@ public void addFocusListener(FocusListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when gesture events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>GestureListener</code> interface.
+ * <p>
+ * NOTE: If <code>setTouchEnabled(true)</code> has previously been
+ * invoked on the receiver then <code>setTouchEnabled(false)</code>
+ * must be invoked on it to specify that gesture events should be
+ * sent instead of touch events.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #removeGestureListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Gesture, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when help events are generated for the control,
  * by sending it one of the messages defined in the
  * <code>HelpListener</code> interface.
@@ -1614,6 +1679,40 @@ void addRelation (Control control) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when touch events occur, by sending it
+ * one of the messages defined in the <code>TouchListener</code>
+ * interface.
+ * <p>
+ * NOTE: You must also call <code>setTouchEnabled(true)</code> to 
+ * specify that touch events should be sent, which will cause gesture
+ * events to not be sent.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #removeTouchListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addTouchListener (TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Touch,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when traversal events occur, by sending it
  * one of the messages defined in the <code>TraverseListener</code>
  * interface.
@@ -1715,6 +1814,31 @@ public void removeFocusListener(FocusListener listener) {
 }
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when gesture events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #addGestureListener
+ * 
+ * @since 3.7
+ */
+public void removeGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Gesture, listener);
+}
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when the help events are generated for the control.
  *
  * @param listener the listener which should no longer be notified
@@ -1924,6 +2048,32 @@ void removeRelation () {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when touch events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #addTouchListener
+ * 
+ * @since 3.7
+ */
+public void removeTouchListener(TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Touch, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when traversal events occur.
  *
  * @param listener the listener which should no longer be notified
@@ -2032,11 +2182,11 @@ public boolean dragDetect (MouseEvent event) {
 
 boolean dragDetect (int button, int count, int stateMask, int x, int y) {
 	if (button != 1 || count != 1) return false;
-	if (!dragDetect (x, y, false, null)) return false;
+	if (!dragDetect (x, y, false, true, null)) return false;
 	return sendDragEvent (button, stateMask, x, y, true);
 }
 
-boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
+boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean [] consume) {
 	boolean quit = false, dragging = false;
 	while (!quit) {
 		int /*long*/ eventPtr = 0;
@@ -2054,7 +2204,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 				try {Thread.sleep(50);} catch (Exception ex) {}
 			}
 		}
-		if (eventPtr == 0) return false;
+		if (eventPtr == 0) return dragOnTimeout;
 		switch (OS.GDK_EVENT_TYPE (eventPtr)) {
 			case OS.GDK_MOTION_NOTIFY: {
 				GdkEventMotion gdkMotionEvent = new GdkEventMotion ();
@@ -2168,6 +2318,8 @@ boolean forceFocus (int /*long*/ focusHandle) {
 	/* When the control is zero sized it must be realized */
 	OS.gtk_widget_realize (focusHandle);
 	OS.gtk_widget_grab_focus (focusHandle);
+	// widget could be disposed at this point
+	if (isDisposed ()) return false;
 	Shell shell = getShell ();
 	int /*long*/ shellHandle = shell.shellHandle;
 	int /*long*/ handle = OS.gtk_window_get_focus (shellHandle);
@@ -2555,6 +2707,32 @@ public String getToolTipText () {
 	checkWidget();
 	return toolTipText;
 }
+
+/**
+ * Returns <code>true</code> if this control is set to send touch events, or
+ * <code>false</code> if it is set to send gesture events instead.  This method
+ * also returns <code>false</code> if a touch-based input device is not detected
+ * (this can be determined with <code>Display#getTouchEnabled()</code>).  Use
+ * {@link #setTouchEnabled(boolean)} to switch the events that a control sends
+ * between touch events and gesture events.
+ *
+ * @return <code>true</code> if the control is set to send touch events, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTouchEnabled
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkWidget();
+	return false;
+}
+
 /**
  * Returns <code>true</code> if the receiver is visible, and
  * <code>false</code> otherwise.
@@ -2610,7 +2788,7 @@ int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ event, bo
 		if ((state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect)) {
 			if (gdkEvent.button == 1) {
 				boolean [] consume = new boolean [1];
-				if (dragDetect ((int) gdkEvent.x, (int) gdkEvent.y, true, consume)) {
+				if (dragDetect ((int) gdkEvent.x, (int) gdkEvent.y, true, true, consume)) {
 					dragging = true;
 					if (consume [0]) result = 1;
 				}
@@ -2965,6 +3143,12 @@ int /*long*/ gtk_unrealize (int /*long*/ widget) {
 }
 
 int /*long*/ gtk_visibility_notify_event (int /*long*/ widget, int /*long*/ event) {
+	/*
+	* As of GTK 2.17.11, obscured controls no longer send expose 
+	* events. It is no longer necessary to track visiblity notify
+	* events.
+	*/
+	if (OS.GTK_VERSION >= OS.VERSION (2, 17, 11)) return 0;
 	GdkEventVisibility gdkEvent = new GdkEventVisibility ();
 	OS.memmove (gdkEvent, event, GdkEventVisibility.sizeof);
 	int /*long*/ paintWindow = paintWindow();
@@ -3526,11 +3710,11 @@ void setBackgroundColor (int /*long*/ handle, GdkColor color) {
 	int flags = OS.gtk_rc_style_get_color_flags (style, index);
 	if (color != null) {
 		flags |= OS.GTK_RC_BG;
-		pixmapName = "<none>";
+		pixmapName = "<none>"; //$NON-NLS-1$
 	} else {
 		flags &= ~OS.GTK_RC_BG;
 		if (backgroundImage == null && (state & PARENT_BACKGROUND) != 0) {
-			pixmapName = "<parent>";
+			pixmapName = "<parent>"; //$NON-NLS-1$
 		}
 	}
 	if (pixmapName != null) {
@@ -3904,14 +4088,41 @@ public void setMenu (Menu menu) {
 	this.menu = menu;
 }
 
-void setOrientation () {
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (handle != 0) OS.gtk_widget_set_direction (handle, OS.GTK_TEXT_DIR_RTL);
-		if (fixedHandle != 0) OS.gtk_widget_set_direction (fixedHandle, OS.GTK_TEXT_DIR_RTL);
+void setOrientation (boolean create) {
+	if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+		if (handle != 0) OS.gtk_widget_set_direction (handle, dir);
+		if (fixedHandle != 0) OS.gtk_widget_set_direction (fixedHandle, dir);
 	}
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+	if (OS.GTK_VERSION < OS.VERSION (2, 4, 0)) return;
+	int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+	if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
+	style &= ~flags;
+	style |= orientation & flags;
+	setOrientation (false);
+	style &= ~SWT.MIRRORED;
+	checkMirrored ();
+}
+
+/**
  * Changes the parent of the widget to be the one provided if
  * the underlying operating system supports this feature.
  * Returns <code>true</code> if the parent is successfully changed.
@@ -4004,18 +4215,10 @@ public void setRedraw (boolean redraw) {
 		if (--drawCount == 0) {
 			if (redrawWindow != 0) {
 				int /*long*/ window = paintWindow ();
-				/*
-				* Bug in GTK. For some reason, the window does not
-				* redraw in versions of GTK greater than 2.18. The fix
-				* is to hide and show it (without changing the z order).
-			    */
-				boolean fixRedraw = OS.GTK_VERSION >= OS.VERSION (2, 17, 0) && OS.gdk_window_is_visible(window);
-				if (fixRedraw) OS.gdk_window_hide(window);
 				/* Explicitly hiding the window avoids flicker on GTK+ >= 2.6 */
 				OS.gdk_window_hide (redrawWindow);
 				OS.gdk_window_destroy (redrawWindow);
 				OS.gdk_window_set_events (window, OS.gtk_widget_get_events (paintHandle ()));
-				if (fixRedraw) OS.gdk_window_show_unraised(window);
 				redrawWindow = 0;
 			}
 		}
@@ -4038,9 +4241,6 @@ public void setRedraw (boolean redraw) {
 						OS.GDK_BUTTON2_MOTION_MASK | OS.GDK_BUTTON3_MOTION_MASK;
 					OS.gdk_window_set_events (window, OS.gdk_window_get_events (window) & ~mouseMask);
 					OS.gdk_window_set_back_pixmap (redrawWindow, 0, false);
-					//System.out.println("Redraw " + redrawWindow + " WIndow " + window);
-//					OS.gdk_x11_drawable_get_xid(redrawWindow);
-//					OS.gdk_x11_drawable_get_xid(window);
 					OS.gdk_window_show (redrawWindow);
 				}
 			}
@@ -4102,6 +4302,26 @@ void setToolTipText (Shell shell, String newString) {
 }
 
 /**
+ * Sets whether this control should send touch events (by default controls do not).
+ * Setting this to <code>false</code> causes the receiver to send gesture events
+ * instead.  No exception is thrown if a touch-based input device is not
+ * detected (this can be determined with <code>Display#getTouchEnabled()</code>).
+ * 
+ * @param enabled the new touch-enabled state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public void setTouchEnabled(boolean enabled) {
+	checkWidget();
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
index e69a998..948762c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.Calendar;
 import org.eclipse.swt.*;
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.accessibility.*;
 import org.eclipse.swt.internal.gtk.OS;
 
 /**
@@ -50,10 +51,7 @@ import org.eclipse.swt.internal.gtk.OS;
 public class DateTime extends Composite {
 	int day, month, year, hours, minutes, seconds;
 	
-	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
-	static final int MAX_YEAR = 9999;
-
-	/* Emulated DATE and TIME variables */
+	/* Emulated DATE and TIME fields */
 	Calendar calendar;
 	DateFormatSymbols formatSymbols;
 	Button down, up;
@@ -63,12 +61,23 @@ public class DateTime extends Composite {
 	int[] fieldNames;
 	int fieldCount, currentField = 0, characterCount = 0;
 	boolean ignoreVerify = false;
+	
+	/* DROP_DOWN calendar fields for DATE */
+	Color fg, bg;
+	boolean hasFocus, monthChanged, calendarDisplayed;
+	int savedYear, savedMonth, savedDay;
+	Shell popupShell;
+	DateTime popupCalendar;
+	Listener popupListener, popupFilter, clickListener;
+	
 	static final String DEFAULT_SHORT_DATE_FORMAT = "MM/YYYY";
 	static final String DEFAULT_MEDIUM_DATE_FORMAT = "MM/DD/YYYY";
 	static final String DEFAULT_LONG_DATE_FORMAT = "MM/DD/YYYY";
 	static final String DEFAULT_SHORT_TIME_FORMAT = "HH:MM AM";
 	static final String DEFAULT_MEDIUM_TIME_FORMAT = "HH:MM:SS AM";
 	static final String DEFAULT_LONG_TIME_FORMAT = "HH:MM:SS AM";
+	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
+	static final int MAX_YEAR = 9999;
 
 /**
  * Constructs a new instance of this class given its parent
@@ -108,38 +117,56 @@ public DateTime (Composite parent, int style) {
 	super (parent, checkStyle (style));
 	if ((this.style & SWT.CALENDAR) == 0) {
 		/* SWT.DATE and SWT.TIME */
-		calendar = Calendar.getInstance();
-		formatSymbols = new DateFormatSymbols();
-		text = new Text(this, SWT.SINGLE);
-		/* disable the native drag and drop for the date/time text field */
-		OS.gtk_drag_dest_unset(text.handle);
-		if ((this.style & SWT.DATE) != 0) {
-			setFormat((this.style & SWT.SHORT) != 0 ? DEFAULT_SHORT_DATE_FORMAT : (this.style & SWT.LONG) != 0 ? DEFAULT_LONG_DATE_FORMAT : DEFAULT_MEDIUM_DATE_FORMAT);
-		} else { // SWT.TIME
-			setFormat((this.style & SWT.SHORT) != 0 ? DEFAULT_SHORT_TIME_FORMAT : (this.style & SWT.LONG) != 0 ? DEFAULT_LONG_TIME_FORMAT : DEFAULT_MEDIUM_TIME_FORMAT);
+		createText((this.style & SWT.DROP_DOWN) != 0);
+	}
+	initAccessible ();
+}
+
+void createText(boolean dropDown) {
+	calendar = Calendar.getInstance();
+	formatSymbols = new DateFormatSymbols();
+	text = new Text(this, SWT.SINGLE);
+	/* disable the native drag and drop for the date/time text field */
+	OS.gtk_drag_dest_unset(text.handle);
+	if ((style & SWT.DATE) != 0) {
+		setFormat((style & SWT.SHORT) != 0 ? DEFAULT_SHORT_DATE_FORMAT : (style & SWT.LONG) != 0 ? DEFAULT_LONG_DATE_FORMAT : DEFAULT_MEDIUM_DATE_FORMAT);
+	} else { /* SWT.TIME */
+		setFormat((style & SWT.SHORT) != 0 ? DEFAULT_SHORT_TIME_FORMAT : (style & SWT.LONG) != 0 ? DEFAULT_LONG_TIME_FORMAT : DEFAULT_MEDIUM_TIME_FORMAT);
+	}
+	text.setText(getFormattedString(style));
+	
+	addListener(SWT.Resize, new Listener() {
+		public void handleEvent(Event event) {
+			onResize(event);
 		}
-		text.setText(getFormattedString(this.style));
-		Listener listener = new Listener() {
-			public void handleEvent(Event event) {
-				switch(event.type) {
-					case SWT.KeyDown: onKeyDown(event); break;
-					case SWT.FocusIn: onFocusIn(event); break;
-					case SWT.FocusOut: onFocusOut(event); break;
-					case SWT.MouseDown: onMouseClick(event); break;
-					case SWT.MouseUp: onMouseClick(event); break;
-					case SWT.Verify: onVerify(event); break;
-				}
+	});
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			switch(event.type) {
+				case SWT.KeyDown: onTextKeyDown(event); break;
+				case SWT.FocusIn: onTextFocusIn(event); break;
+				case SWT.FocusOut: onTextFocusOut(event); break;
+				case SWT.MouseDown: // Fall through
+				case SWT.MouseUp: onTextMouseClick(event); break;
+				case SWT.MenuDetect: notifyListeners(SWT.MenuDetect, event); break;
+				case SWT.Verify: onTextVerify(event); break;
 			}
-		};
-		text.addListener(SWT.KeyDown, listener);
-		text.addListener(SWT.FocusIn, listener);
-		text.addListener(SWT.FocusOut, listener);
-		text.addListener(SWT.MouseDown, listener);
-		text.addListener(SWT.MouseUp, listener);
-		text.addListener(SWT.Verify, listener);
+		}
+	};
+	int [] listeners = new int [] {SWT.KeyDown, SWT.FocusIn, SWT.FocusOut, SWT.MouseDown, SWT.MouseUp, SWT.MenuDetect, SWT.Verify};
+	for (int i = 0; i < listeners.length; i++) {
+		text.addListener(listeners [i], listener);
+	}
+	
+	if ((style & SWT.DATE) != 0 && dropDown) {
+		createDropDownButton();
+		createPopupShell(-1, -1, -1);
+	} else {
 		up = new Button(this, SWT.ARROW | SWT.UP);
+		OS.GTK_WIDGET_UNSET_FLAGS(up.handle, OS.GTK_CAN_FOCUS);
 		//up.setToolTipText(SWT.getMessage ("SWT_Up")); //$NON-NLS-1$
 		down = new Button(this, SWT.ARROW | SWT.DOWN);
+		OS.GTK_WIDGET_UNSET_FLAGS(down.handle, OS.GTK_CAN_FOCUS);
 		//down.setToolTipText(SWT.getMessage ("SWT_Down")); //$NON-NLS-1$
 		up.addListener(SWT.Selection, new Listener() {
 			public void handleEvent(Event event) {
@@ -153,12 +180,82 @@ public DateTime (Composite parent, int style) {
 				text.setFocus();
 			}
 		});
-		addListener(SWT.Resize, new Listener() {
-			public void handleEvent(Event event) {
-				onResize(event);
+	}
+}
+
+void createDropDownButton() {
+	down = new Button(this, SWT.ARROW  | SWT.DOWN);
+	OS.GTK_WIDGET_UNSET_FLAGS(down.handle, OS.GTK_CAN_FOCUS);
+	down.addListener(SWT.Selection, new Listener() {
+		public void handleEvent(Event event) {
+			boolean dropped = isDropped();
+			popupCalendar.calendarDisplayed = !dropped;
+			setFocus();
+			dropDownCalendar (!dropped);
+		}
+	});
+
+	popupListener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.widget == popupShell) {
+				popupShellEvent (event);
+				return;
 			}
-		});
+			if (event.widget == popupCalendar) {
+				popupCalendarEvent (event);
+				return;
+			}
+			if (event.widget == DateTime.this) {
+				onDispose (event);
+				return;
+			}
+			if (event.widget == getShell ()) {
+				getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						if (isDisposed()) return;
+						handleFocus (SWT.FocusOut);
+					}
+				});
+			}
+		}
+	};
+	popupFilter = new Listener() {
+		public void handleEvent(Event event) {
+			Shell shell = ((Control)event.widget).getShell ();
+			if (shell == DateTime.this.getShell ()) {
+				handleFocus (SWT.FocusOut);
+			}
+		}
+	};
+}
+
+void createPopupShell(int year, int month, int day) {	
+	popupShell = new Shell (getShell(), SWT.NO_TRIM | SWT.ON_TOP);
+	popupCalendar = new DateTime (popupShell, SWT.CALENDAR);
+	if (font != null) popupCalendar.setFont (font);
+	if (fg != null) popupCalendar.setForeground (fg);
+	if (bg != null) popupCalendar.setBackground (bg);
+	
+	clickListener = new Listener() {
+		public void handleEvent(Event event) {
+			if (event.widget instanceof Control) {
+				Control c = (Control)event.widget;
+				if (c != down && c.getShell() != popupShell)
+					dropDownCalendar(false);
+			}
+		}
+	};
+
+	int [] listeners = {SWT.Close, SWT.MouseUp, SWT.Paint};
+	for (int i=0; i < listeners.length; i++) {
+		popupShell.addListener (listeners [i], popupListener);
 	}
+	listeners = new int [] {SWT.MouseDown, SWT.MouseUp, SWT.Selection, SWT.Traverse, SWT.KeyDown, SWT.KeyUp, SWT.FocusIn, SWT.FocusOut, SWT.Dispose};
+	for (int i=0; i < listeners.length; i++) {
+		popupCalendar.addListener (listeners [i], popupListener);
+	}
+	addListener(SWT.Dispose, popupListener);
+	if (year != -1) popupCalendar.setDate(year, month, day);
 }
 
 static int checkStyle (int style) {
@@ -171,6 +268,7 @@ static int checkStyle (int style) {
 	*/
 	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
 	style = checkBits (style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+	if ((style & SWT.DATE) == 0) style &=~ SWT.DROP_DOWN;
 	return checkBits (style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
 }
 
@@ -215,16 +313,15 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 	int width = 0, height = 0;
 	if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {
 		if ((style & SWT.CALENDAR) != 0) {
-			// TODO: CALENDAR computeSize
-			width = 300;
-			height = 200;
-		} else {
-			/* SWT.DATE and SWT.TIME */
+			Point size = computeNativeSize(handle, wHint, hHint, changed);
+			width = size.x;
+			height = size.y;
+		} else { /* SWT.DATE and SWT.TIME */
 			GC gc = new GC(text);
 			Point textSize = gc.stringExtent(getComputeSizeString(style));
 			gc.dispose();
 			Rectangle trim = text.computeTrim(0, 0, textSize.x, textSize.y);
-			Point buttonSize = up.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
+			Point buttonSize = down.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
 			width = trim.width + buttonSize.x;
 			height = Math.max(trim.height, buttonSize.y);
 		}
@@ -233,9 +330,8 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 	if (height == 0) height = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) width = wHint;
 	if (hHint != SWT.DEFAULT) height = hHint;
-	int border = getBorderWidth ();
-	width += border * 2; height += border * 2;
-	return new Point (width, height);
+	int borderWidth = getBorderWidth ();
+	return new Point (width + 2*borderWidth, height+ 2*borderWidth);
 }
 
 void createHandle (int index) {
@@ -282,6 +378,72 @@ void commitCurrentField() {
 	}
 }
 
+void onDispose (Event event) {
+	if (popupShell != null && !popupShell.isDisposed ()) {
+		popupCalendar.removeListener (SWT.Dispose, popupListener);
+		popupShell.dispose ();
+	}
+	Shell shell = getShell ();
+	shell.removeListener (SWT.Deactivate, popupListener);
+	Display display = getDisplay ();
+	display.removeFilter (SWT.FocusIn, popupFilter);
+	popupShell = null;  
+	text = null;  
+	popupCalendar = null;  
+	down = null;
+	up = null;
+}
+
+void dropDownCalendar(boolean drop) {
+	if (drop == isDropped ()) return;
+	if (!drop) {
+		popupShell.setVisible (false);
+		OS.gtk_calendar_clear_marks(popupCalendar.handle);
+		display.removeFilter(SWT.MouseDown, clickListener);
+		return;
+	}
+	savedYear = getYear ();
+	savedMonth = getMonth ();
+	savedDay = getDay ();
+	if (getShell() != popupShell.getParent ()) {
+		int year = popupCalendar.getYear ();
+		int month = popupCalendar.getMonth ();
+		int day = popupCalendar.getDay ();
+		popupCalendar.removeListener (SWT.Dispose, popupListener);
+		popupShell.dispose();
+		popupShell = null;
+		popupCalendar = null;
+		createPopupShell (year, month, day);
+	}
+	Point dateBounds = getSize ();
+	Point calendarSize = popupCalendar.computeSize (SWT.DEFAULT, SWT.DEFAULT, false);
+	popupCalendar.setBounds (1, 1, Math.max (dateBounds.x - 2, calendarSize.x), calendarSize.y);
+
+	popupCalendar.setDate(savedYear, savedMonth, savedDay);
+	if (savedYear == Calendar.getInstance().get(Calendar.YEAR) && savedMonth == Calendar.getInstance().get(Calendar.MONTH))
+		OS.gtk_calendar_mark_day(popupCalendar.handle, Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
+	Display display = getDisplay ();
+	Rectangle parentRect = display.map (getParent (), null, getBounds ());
+	Rectangle displayRect = getMonitor ().getClientArea ();
+	int width = Math.max (dateBounds.x, calendarSize.x + 2);
+	int height = calendarSize.y + 2;
+	int x = parentRect.x;
+	int y = parentRect.y + dateBounds.y;
+	if (y + height > displayRect.y + displayRect.height) y = parentRect.y - height;
+	if (x + width > displayRect.x + displayRect.width) x = displayRect.x + displayRect.width - calendarSize.x;
+	popupShell.setBounds (x, y, width, height);
+	popupShell.setVisible (true);
+	if (isFocusControl()) {
+		popupCalendar.setFocus ();
+	}
+	display.addFilter(SWT.MouseDown, clickListener);
+}
+	
+int /*long*/ focusHandle () {
+	if (text != null) return text.handle;
+	return super.focusHandle ();
+}
+
 String formattedStringValue(int fieldName, int value, boolean adjust) {
 	if (fieldName == Calendar.AM_PM) {
 		String[] ampm = formatSymbols.getAmPmStrings();
@@ -460,6 +622,44 @@ public int getSeconds () {
 	}
 }
 
+/*
+ * Returns a textual representation of the receiver,
+ * intended for speaking the text aloud.
+ */
+String getSpokenText () {
+	// TODO: needs more work for locale
+	StringBuffer result = new StringBuffer ();
+	if ((style & SWT.TIME) != 0) {
+		int h = calendar.get(Calendar.HOUR); if (h == 0) h = 12;
+		result.append(h);
+		int m = calendar.get(Calendar.MINUTE);
+		result.append(":" + (m < 10 ? "0" : "") + m);
+		if ((style & SWT.SHORT) == 0) {
+			int s = calendar.get(Calendar.SECOND);
+			result.append(":" + (s < 10 ? "0" : "") + s);
+		}
+		result.append(" " + formatSymbols.getAmPmStrings()[calendar.get(Calendar.AM_PM)]);
+	} else {
+		/* SWT.DATE or SWT.CALENDAR */
+		Calendar cal = calendar;
+	    if ((style & SWT.CALENDAR) != 0) {
+	        formatSymbols = new DateFormatSymbols();
+	        cal = Calendar.getInstance();
+	        getDate();
+	        cal.set(year, month, day);
+	    }
+	    if ((style & SWT.SHORT) == 0) {
+	    	result.append(formatSymbols.getWeekdays()[cal.get(Calendar.DAY_OF_WEEK)] + ", ");
+	    }
+	    result.append(formatSymbols.getMonths()[cal.get(Calendar.MONTH)] + " ");
+	    if ((style & SWT.SHORT) == 0) {
+	        result.append(cal.get(Calendar.DAY_OF_MONTH) + ", ");
+	    }
+	    result.append(cal.get(Calendar.YEAR));
+	}
+	return result.toString();
+}
+
 /**
  * Returns the receiver's year.
  * <p>
@@ -494,10 +694,28 @@ int /*long*/ gtk_day_selected_double_click (int /*long*/ widget) {
 }
 
 int /*long*/ gtk_month_changed (int /*long*/ widget) {
+	/*
+	* Feature in GTK. "month-changed" signal is emitted when the
+	* calendar is displayed though the day/month is not changed.
+	* The popup has to remain when the month/year is changed
+	* through the arrow keys, and the popup has to be called-off
+	* only when the day is selected. The fix is to detect the
+	* difference between the user changing the month/year, or
+	* choosing the day.
+	*/
+	if (calendarDisplayed) calendarDisplayed = false;
+	else monthChanged = true;
 	sendSelectionEvent ();
 	return 0;
 }
 
+boolean hasFocus () {
+	if (super.hasFocus ()) return true;
+	Control focusControl = display.getFocusControl();
+	if (focusControl != null && focusControl == text) return true;
+	return false;
+}
+
 void hookEvents () {
 	super.hookEvents();
 	if ((style & SWT.CALENDAR) != 0) {
@@ -507,6 +725,82 @@ void hookEvents () {
 	}
 }
 
+void incrementField(int amount) {
+	int fieldName = fieldNames[currentField];
+	int value = calendar.get(fieldName);
+	if (fieldName == Calendar.HOUR) {
+		int max = calendar.getMaximum(Calendar.HOUR);
+		int min = calendar.getMinimum(Calendar.HOUR);
+		if ((value == max && amount == 1) || (value == min && amount == -1)) {
+			int temp = currentField;
+			currentField = getFieldIndex(Calendar.AM_PM);
+			setTextField(Calendar.AM_PM, (calendar.get(Calendar.AM_PM) + 1) % 2, true, true);
+			currentField = temp;
+		}
+	}
+	setTextField(fieldName, value + amount, true, true);
+}
+
+boolean isDropped () {
+	return popupShell.getVisible ();
+}
+
+public boolean isFocusControl () {
+	checkWidget();
+	if ((style & SWT.DROP_DOWN) != 0 && (text.isFocusControl () || popupShell.isFocusControl () || popupCalendar.isFocusControl())) {
+		return true;
+	} 
+	return super.isFocusControl ();
+}
+
+void initAccessible() {
+	Accessible accessible = getAccessible ();
+	accessible.addAccessibleListener (new AccessibleAdapter () {
+		public void getName (AccessibleEvent e) {
+			e.result = getSpokenText ();
+		}
+
+		public void getHelp(AccessibleEvent e) {
+			e.result = getToolTipText ();
+		}
+	});
+
+	accessible.addAccessibleControlListener (new AccessibleControlAdapter () {
+		public void getChildAtPoint (AccessibleControlEvent e) {
+			e.childID = ACC.CHILDID_SELF;
+		}
+
+		public void getLocation (AccessibleControlEvent e) {
+			Rectangle rect = display.map (getParent (), null, getBounds ());
+			e.x = rect.x;
+			e.y = rect.y;
+			e.width = rect.width;
+			e.height = rect.height;
+		}
+
+		public void getChildCount (AccessibleControlEvent e) {
+			e.detail = 0;
+		}
+
+		public void getRole (AccessibleControlEvent e) {
+			e.detail = ((style & SWT.CALENDAR) != 0) ? ACC.ROLE_LABEL : ACC.ROLE_TEXT;
+		}
+
+		public void getState (AccessibleControlEvent e) {
+			e.detail = ACC.STATE_FOCUSABLE;
+			if (hasFocus ()) e.detail |= ACC.STATE_FOCUSED;
+		}
+
+		public void getSelection (AccessibleControlEvent e) {
+			if (hasFocus ()) e.childID = ACC.CHILDID_SELF;
+		}
+
+		public void getFocus (AccessibleControlEvent e) {
+			if (hasFocus ()) e.childID = ACC.CHILDID_SELF;
+		}
+	});
+}
+
 boolean isValidTime(int fieldName, int value) {
 	Calendar validCalendar;
 	if ((style & SWT.CALENDAR) != 0) {
@@ -528,162 +822,178 @@ boolean isValidDate(int year, int month, int day) {
 		&& valid.get(Calendar.DAY_OF_MONTH) == day;
 }
 
-void incrementField(int amount) {
-	int fieldName = fieldNames[currentField];
-	int value = calendar.get(fieldName);
-	if (fieldName == Calendar.HOUR) {
-		int max = calendar.getMaximum(Calendar.HOUR);
-		int min = calendar.getMinimum(Calendar.HOUR);
-		if ((value == max && amount == 1) || (value == min && amount == -1)) {
-			int temp = currentField;
-			currentField = getFieldIndex(Calendar.AM_PM);
-			setTextField(Calendar.AM_PM, (calendar.get(Calendar.AM_PM) + 1) % 2, true, true);
-			currentField = temp;
-		}
-	}
-	setTextField(fieldName, value + amount, true, true);
-}
-
-void onKeyDown(Event event) {
-	int fieldName;
-	switch (event.keyCode) {
-		case SWT.ARROW_RIGHT:
-		case SWT.KEYPAD_DIVIDE:
-			// a right arrow or a valid separator navigates to the field on the right, with wraping
-			selectField((currentField + 1) % fieldCount);
+void popupCalendarEvent (Event event) {
+	switch (event.type) {
+		case SWT.Dispose:
+			if (popupShell != null && !popupShell.isDisposed () && !isDisposed() && getShell () != popupShell.getParent ()) {
+				int year = popupCalendar.getYear ();
+				int month = popupCalendar.getMonth ();
+				int day = popupCalendar.getDay ();
+				popupShell = null;
+				popupCalendar = null;
+				createPopupShell (year, month, day);
+			}
 			break;
-		case SWT.ARROW_LEFT:
-			// navigate to the field on the left, with wrapping
-			int index = currentField - 1;
-			selectField(index < 0 ? fieldCount - 1 : index);
+		case SWT.FocusIn: {
+			handleFocus (SWT.FocusIn);
 			break;
-		case SWT.ARROW_UP:
-		case SWT.KEYPAD_ADD:
-			// set the value of the current field to value + 1, with wrapping
-			commitCurrentField();
-			incrementField(+1);
+		}
+		case SWT.FocusOut: {
+			Point point = down.toControl(getDisplay().getCursorLocation());
+			Point size = down.getSize();
+			Rectangle rect = new Rectangle(0, 0, size.x, size.y);
+			if (rect.contains(point)) {
+				boolean popupShellActivated = getDisplay().getActiveShell() == getShell();
+				if (!popupShellActivated) dropDownCalendar(false);
+				break;
+			}
+			dropDownCalendar(false);
 			break;
-		case SWT.ARROW_DOWN:
-		case SWT.KEYPAD_SUBTRACT:
-			// set the value of the current field to value - 1, with wrapping
-			commitCurrentField();
-			incrementField(-1);
+		}
+		case SWT.MouseUp: {
+			if (event.button != 1) return;
+			/*
+			* The drop-down should stay visible when the year/month 
+			* is changed.
+			*/
+			if (popupCalendar.monthChanged) {
+				popupCalendar.monthChanged = false;
+				OS.gtk_calendar_clear_marks(popupCalendar.handle);
+			} else {
+				dropDownCalendar (false);
+			}
 			break;
-		case SWT.HOME:
-			// set the value of the current field to its minimum
-			fieldName = fieldNames[currentField];
-			setTextField(fieldName, calendar.getActualMinimum(fieldName), true, true);
+		}
+		case SWT.Selection: {
+			int year = popupCalendar.getYear ();
+			int month = popupCalendar.getMonth ();
+			int day = popupCalendar.getDay ();
+			setDate(year, month, day);
+			Event e = new Event ();
+			e.time = event.time;
+			e.stateMask = event.stateMask;
+			e.doit = event.doit;
+			notifyListeners (SWT.Selection, e);
+			event.doit = e.doit;
 			break;
-		case SWT.END:
-			// set the value of the current field to its maximum
-			fieldName = fieldNames[currentField];
-			setTextField(fieldName, calendar.getActualMaximum(fieldName), true, true);
+		}
+		case SWT.Traverse: {
+			switch (event.detail) {
+				case SWT.TRAVERSE_RETURN:
+				case SWT.TRAVERSE_ESCAPE:
+				case SWT.TRAVERSE_ARROW_PREVIOUS:
+				case SWT.TRAVERSE_ARROW_NEXT:
+					event.doit = false;
+					break;
+				case SWT.TRAVERSE_TAB_NEXT:
+				case SWT.TRAVERSE_TAB_PREVIOUS:
+					event.doit = text.traverse(event.detail);
+					event.detail = SWT.TRAVERSE_NONE;
+					if (event.doit) dropDownCalendar (false);
+					return;
+				case SWT.TRAVERSE_PAGE_NEXT:
+				case SWT.TRAVERSE_PAGE_PREVIOUS:
+					return;
+			}
+			Event e = new Event ();
+			e.time = event.time;
+			e.detail = event.detail;
+			e.doit = event.doit;
+			e.character = event.character;
+			e.keyCode = event.keyCode;
+			notifyListeners (SWT.Traverse, e);
+			event.doit = e.doit;
+			event.detail = e.detail;
 			break;
-		case SWT.CR:
-			sendSelectionEvent (SWT.DefaultSelection);
+		}
+		case SWT.KeyUp: {		
+			Event e = new Event ();
+			e.time = event.time;
+			e.character = event.character;
+			e.keyCode = event.keyCode;
+			e.stateMask = event.stateMask;
+			notifyListeners (SWT.KeyUp, e);
 			break;
-		default:
-			switch (event.character) {
-				case '/':
-				case ':':
-				case '-':
-				case '.':
-					// a valid separator navigates to the field on the right, with wraping
-					selectField((currentField + 1) % fieldCount);
-					break;
+		}
+		case SWT.KeyDown: {
+			if (event.character == SWT.ESC) {
+				/* Escape key cancels popupCalendar and reverts date */
+				popupCalendar.setDate (savedYear, savedMonth, savedDay);
+				setDate(savedYear, savedMonth, savedDay);
+				dropDownCalendar (false);
 			}
-	}
-}
-
-void onFocusIn(Event event) {
-	selectField(currentField);
-}
-
-void onFocusOut(Event event) {
-	commitCurrentField();
-}
-
-void onMouseClick(Event event) {
-	if (event.button != 1) return;
-	Point sel = text.getSelection();
-	for (int i = 0; i < fieldCount; i++) {
-		if (fieldIndices[i].x <= sel.x && sel.x <= fieldIndices[i].y) {
-			selectField(i);
+			if (event.keyCode == SWT.CR || (event.stateMask & SWT.ALT) != 0 && (event.keyCode == SWT.ARROW_UP || event.keyCode == SWT.ARROW_DOWN)) {
+				/* Return, Alt+Down, and Alt+Up cancel popupCalendar and select date. */
+				dropDownCalendar (false);
+			}
+			if (event.keyCode == SWT.SPACE) {
+				dropDownCalendar(false);
+			}
+			/* At this point the widget may have been disposed.
+			 * If so, do not continue. */
+			if (isDisposed ()) break;
+			Event e = new Event();
+			e.time = event.time;
+			e.character = event.character;
+			e.keyCode = event.keyCode;
+			e.stateMask = event.stateMask;
+			notifyListeners(SWT.KeyDown, e);
 			break;
 		}
 	}
 }
 
-void onResize(Event event) {
-	Rectangle rect = getClientArea ();
-	int width = rect.width;
-	int height = rect.height;
-	Point buttonSize = up.computeSize(SWT.DEFAULT, height);
-	int buttonHeight = buttonSize.y / 2;
-	text.setBounds(0, 0, width - buttonSize.x, height);
-	up.setBounds(width - buttonSize.x, 0, buttonSize.x, buttonHeight);
-	down.setBounds(width - buttonSize.x, buttonHeight, buttonSize.x, buttonHeight);
-}
-
-void onVerify(Event event) {
-	if (ignoreVerify) return;
-	event.doit = false;
-	int fieldName = fieldNames[currentField];
-	int start = fieldIndices[currentField].x;
-	int end = fieldIndices[currentField].y;
-	int length = end - start;
-	String newText = event.text;
-	if (fieldName == Calendar.AM_PM) {
-		String[] ampm = formatSymbols.getAmPmStrings();
-		if (newText.equalsIgnoreCase(ampm[Calendar.AM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.AM])) {
-			setTextField(fieldName, Calendar.AM, true, false);
-		} else if (newText.equalsIgnoreCase(ampm[Calendar.PM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.PM])) {
-			setTextField(fieldName, Calendar.PM, true, false);
-		}
-		return;
-	}
-	if (characterCount > 0) {
-		try {
-			Integer.parseInt(newText);
-		} catch (NumberFormatException ex) {
-			return;
+void handleFocus (int type) {
+	if (isDisposed ()) return;
+	switch (type) {
+		case SWT.FocusIn: {
+			if (hasFocus) return;
+			text.selectAll ();
+			hasFocus = true;
+			Shell shell = getShell ();
+			shell.removeListener (SWT.Deactivate, popupListener);
+			shell.addListener (SWT.Deactivate, popupListener);
+			Display display = getDisplay ();
+			display.removeFilter (SWT.FocusIn, popupFilter);
+			display.addFilter (SWT.FocusIn, popupFilter);
+			Event e = new Event ();
+			notifyListeners (SWT.FocusIn, e);
+			break;
 		}
-		String value = text.getText(start, end - 1);
-		int s = value.lastIndexOf(' ');
-		if (s != -1) value = value.substring(s + 1);
-		newText = "" + value + newText;
-	}
-	int newTextLength = newText.length();
-	boolean first = characterCount == 0;
-	characterCount = (newTextLength < length) ? newTextLength : 0;
-	int max = calendar.getActualMaximum(fieldName);
-	int min = calendar.getActualMinimum(fieldName);
-	int newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
-	if (newValue == -1) {
-		characterCount = 0;
-		return;
-	}
-	if (first && newValue == 0 && length > 1) {
-		setTextField(fieldName, newValue, false, false);
-	} else if (min <= newValue && newValue <= max) {
-		setTextField(fieldName, newValue, characterCount == 0, characterCount == 0);
-	} else {
-		if (newTextLength >= length) {
-			newText = newText.substring(newTextLength - length + 1);
-			newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
-			if (newValue != -1) {
-				characterCount = length - 1;
-				if (min <= newValue && newValue <= max) {
-					setTextField(fieldName, newValue, characterCount == 0, true);
-				}
-			}
+		case SWT.FocusOut: {
+			if (!hasFocus) return;
+			Control focusControl = getDisplay ().getFocusControl ();
+			if (focusControl == down || focusControl == popupCalendar || focusControl == text) return;
+			hasFocus = false;
+			Shell shell = getShell ();
+			shell.removeListener(SWT.Deactivate, popupListener);
+			Display display = getDisplay ();
+			display.removeFilter (SWT.FocusIn, popupFilter);
+			display.removeFilter(SWT.MouseDown, clickListener);
+			Event e = new Event ();
+			notifyListeners (SWT.FocusOut, e);
+			break;
 		}
 	}
 }
 
-void releaseWidget () {
-	super.releaseWidget();
-	//TODO: need to do anything here?
+void popupShellEvent(Event event) {
+	switch (event.type) {
+		case SWT.Paint:
+			/* Draw black rectangle around popupCalendar */
+			Rectangle bounds = popupCalendar.getBounds();
+			Color black = getDisplay().getSystemColor(SWT.COLOR_BLACK);
+			event.gc.setForeground(black);
+			event.gc.drawRectangle(0, 0, bounds.width + 1, bounds.height + 1);
+			break;
+		case SWT.Close:
+			event.doit = false;
+			dropDownCalendar (false);
+			break;
+		case SWT.MouseUp:
+			dropDownCalendar (false);
+			break;
+	}
 }
 
 /**
@@ -750,26 +1060,37 @@ void sendSelectionEvent () {
 }
 
 public void setBackground(Color color) {
-	checkWidget();
 	super.setBackground(color);
+	bg = color;
 	if (text != null) text.setBackground(color);
+	if (popupCalendar != null) popupCalendar.setBackground(color);
+}
+
+public void setEnabled (boolean enabled){
+	super.setEnabled(enabled);
+	if ((style & SWT.CALENDAR) == 0) {
+		text.setEnabled(enabled);
+		down.setEnabled(enabled);
+		if (up != null) up.setEnabled(enabled);
+	}
 }
 
 public void setFont(Font font) {
-	checkWidget();
 	super.setFont(font);
+	this.font = font;
 	if (text != null) text.setFont(font);
+	if (popupCalendar != null) popupCalendar.setFont(font);
 	redraw();
 }
 
 public void setForeground(Color color) {
-	checkWidget();
 	super.setForeground(color);
+	fg = color;
 	if (text != null) text.setForeground(color);
+	if (popupCalendar != null) popupCalendar.setForeground(color);
 }
 
-/*public*/ void setFormat(String string) {
-	checkWidget();
+void setFormat(String string) {
 	// TODO: this needs to be locale sensitive
 	fieldCount = (style & SWT.DATE) != 0 ? ((style & SWT.SHORT) != 0 ? 2 : 3) : ((style & SWT.SHORT) != 0 ? 3 : 4);
 	fieldIndices = new Point[fieldCount];
@@ -837,13 +1158,13 @@ void setTextField(int fieldName, int value, boolean commit, boolean adjust) {
 	int prependCount = end - start - buffer.length();
 	for (int i = 0; i < prependCount; i++) {
 		switch (fieldName) {
-		case Calendar.MINUTE:
-		case Calendar.SECOND:
-			buffer.insert(0, 0);
-		break;
-		default:
-			buffer.insert(0, ' ');
-		break;
+			case Calendar.MINUTE:
+			case Calendar.SECOND:
+				buffer.insert(0, 0);
+				break;
+			default:
+				buffer.insert(0, ' ');
+				break;
 		}
 	}		
 	newValue = buffer.toString();
@@ -939,6 +1260,13 @@ public void setHours (int hours) {
 	}
 }
 
+public void setMenu (Menu menu) {
+	super.setMenu(menu);
+	if (up != null) up.setMenu(menu);
+	if (down != null) down.setMenu(menu);
+	if (text != null) text.setMenu(menu);
+}
+
 /**
  * Sets the receiver's minutes.
  * <p>
@@ -1074,6 +1402,171 @@ public void setYear (int year) {
 	}
 }
 
+void onTextFocusIn(Event event) {
+	selectField(currentField);
+	if ((style & SWT.DROP_DOWN) == 0) {
+		sendFocusEvent(SWT.FocusIn);
+	} else {
+		handleFocus(SWT.FocusIn);
+	}
+}
+
+void onTextFocusOut(Event event) {
+	commitCurrentField();
+	if ((style & SWT.DROP_DOWN) == 0) {
+		sendFocusEvent(SWT.FocusOut);
+	} else {
+		handleFocus(SWT.FocusOut);
+	}
+}
+
+void onTextKeyDown(Event event) {
+	if ((style & SWT.DROP_DOWN) != 0 && (event.stateMask & SWT.ALT) != 0 && (event.keyCode == SWT.ARROW_UP || event.keyCode == SWT.ARROW_DOWN)) {
+		boolean dropped = isDropped ();
+		if (!dropped) {
+			popupCalendar.calendarDisplayed = true;
+			setFocus ();
+		}
+		dropDownCalendar(!dropped);
+		return;
+	}
+	int fieldName;
+	switch (event.keyCode) {
+		case SWT.ARROW_RIGHT:
+		case SWT.KEYPAD_DIVIDE:
+			/* A right arrow or a valid separator navigates to the field on the right, with wraping */
+			selectField((currentField + 1) % fieldCount);
+			sendEvent(SWT.Traverse);
+			break;
+		case SWT.ARROW_LEFT:
+			/* Navigate to the field on the left, with wrapping */
+			int index = currentField - 1;
+			selectField(index < 0 ? fieldCount - 1 : index);
+			sendEvent(SWT.Traverse);
+			break;
+		case SWT.ARROW_UP:
+		case SWT.KEYPAD_ADD:
+			/* Set the value of the current field to value + 1, with wrapping */
+			commitCurrentField();
+			incrementField(+1);
+			break;
+		case SWT.ARROW_DOWN:
+		case SWT.KEYPAD_SUBTRACT:
+			/* Set the value of the current field to value - 1, with wrapping */
+			commitCurrentField();
+			incrementField(-1);
+			break;
+		case SWT.HOME:
+			/* Set the value of the current field to its minimum */
+			fieldName = fieldNames[currentField];
+			setTextField(fieldName, calendar.getActualMinimum(fieldName), true, true);
+			break;
+		case SWT.END:
+			/* Set the value of the current field to its maximum */
+			fieldName = fieldNames[currentField];
+			setTextField(fieldName, calendar.getActualMaximum(fieldName), true, true);
+			break;
+		default:
+			switch (event.character) {
+				case '/':
+				case ':':
+				case '-':
+				case '.':
+					/* A valid separator navigates to the field on the right, with wraping */
+					selectField((currentField + 1) % fieldCount);
+					sendEvent(SWT.Traverse);
+					break;
+				case SWT.CR:
+					/* Enter causes default selection */
+					postEvent (SWT.DefaultSelection);
+					break;
+			}
+	}
+}
+
+void onTextMouseClick(Event event) {
+	if (event.button != 1) return;
+	Point sel = text.getSelection();
+	for (int i = 0; i < fieldCount; i++) {
+		if (sel.x >= fieldIndices[i].x && sel.x <= fieldIndices[i].y) {
+			currentField = i;
+			break;
+		}
+	}
+	selectField(currentField);
+}
+
+void onResize(Event event) {
+	Rectangle rect = getClientArea ();
+	int width = rect.width;
+	int height = rect.height;
+	Point buttonSize = down.computeSize(SWT.DEFAULT, height);
+	text.setBounds(0, 0, width - buttonSize.x, height);
+	if ((style & SWT.DROP_DOWN) != 0) {
+		down.setBounds(width - buttonSize.x, 0, buttonSize.x, height);
+	} else {
+		int buttonHeight = height / 2;
+		up.setBounds(width - buttonSize.x, 0, buttonSize.x, buttonHeight);
+		down.setBounds(width - buttonSize.x, buttonHeight, buttonSize.x, buttonHeight);
+	}
+}
+
+void onTextVerify(Event event) {
+	if (ignoreVerify) return;
+	event.doit = false;
+	int fieldName = fieldNames[currentField];
+	int start = fieldIndices[currentField].x;
+	int end = fieldIndices[currentField].y;
+	int length = end - start;
+	String newText = event.text;
+	if (fieldName == Calendar.AM_PM) {
+		String[] ampm = formatSymbols.getAmPmStrings();
+		if (newText.equalsIgnoreCase(ampm[Calendar.AM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.AM])) {
+			setTextField(fieldName, Calendar.AM, true, false);
+		} else if (newText.equalsIgnoreCase(ampm[Calendar.PM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.PM])) {
+			setTextField(fieldName, Calendar.PM, true, false);
+		}
+		return;
+	}
+	if (characterCount > 0) {
+		try {
+			Integer.parseInt(newText);
+		} catch (NumberFormatException ex) {
+			return;
+		}
+		String value = text.getText(start, end - 1);
+		int s = value.lastIndexOf(' ');
+		if (s != -1) value = value.substring(s + 1);
+		newText = "" + value + newText;
+	}
+	int newTextLength = newText.length();
+	boolean first = characterCount == 0;
+	characterCount = (newTextLength < length) ? newTextLength : 0;
+	int max = calendar.getActualMaximum(fieldName);
+	int min = calendar.getActualMinimum(fieldName);
+	int newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
+	if (newValue == -1) {
+		characterCount = 0;
+		return;
+	}
+	if (first && newValue == 0 && length > 1) {
+		setTextField(fieldName, newValue, false, false);
+	} else if (min <= newValue && newValue <= max) {
+		setTextField(fieldName, newValue, characterCount == 0, characterCount == 0);
+	} else {
+		if (newTextLength >= length) {
+			newText = newText.substring(newTextLength - length + 1);
+			newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
+			if (newValue != -1) {
+				characterCount = length - 1;
+				if (min <= newValue && newValue <= max) {
+					setTextField(fieldName, newValue, characterCount == 0, true);
+				}
+			}
+		}
+	}
+}
+
 int unformattedIntValue(int fieldName, String newText, boolean adjust, int max) {
 	int newValue;
 	try {
@@ -1100,4 +1593,4 @@ void updateControl() {
 	}
 	redraw();	
 }
-}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java
index 2e570bf..97f3422 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java	
@@ -694,6 +694,13 @@ public void setMinimized (boolean minimized) {
 	this.minimized = minimized;
 }
 
+void setOrientation (boolean create) {
+    super.setOrientation (create);
+    if (!create) {
+        if (menuBar != null) menuBar._setOrientation (style & (SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT));
+    }
+}
+
 void setSavedFocus (Control control) {
 	if (this == control) return;
 	savedFocus = control;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java
index 06e08e1..92ac09f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.swt.internal.gtk.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
@@ -133,6 +132,7 @@ String openChooserDialog () {
 	} else {
 		handle = OS.gtk_file_chooser_dialog_new (titleBytes, shellHandle, OS.GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, OS.GTK_STOCK_OK (), OS.GTK_RESPONSE_OK, OS.GTK_STOCK_CANCEL (), OS.GTK_RESPONSE_CANCEL, 0);
 	}
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
 	if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
 		int /*long*/ group = OS.gtk_window_get_group(0);
 		OS.gtk_window_group_add_window (group, handle);
@@ -188,6 +188,13 @@ String openChooserDialog () {
 		hookId = OS.g_signal_add_emission_hook (signalId, 0, display.emissionProc, handle, 0);
 	}	
 	int response = OS.gtk_dialog_run (handle);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
 		OS.g_signal_remove_emission_hook (signalId, hookId);
 	}
@@ -276,6 +283,13 @@ String openClassicDialog () {
 		hookId = OS.g_signal_add_emission_hook (signalId, 0, display.emissionProc, handle, 0);
 	}	
 	int response = OS.gtk_dialog_run (handle);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
 		OS.g_signal_remove_emission_hook (signalId, hookId);
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
index d8ca0ab..74d016e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -167,6 +167,7 @@ public class Display extends Device {
 
 	/* System Tray */
 	Tray tray;
+	TrayItem currentTrayItem;
 	
 	/* Timers */
 	int [] timerIds;
@@ -767,6 +768,12 @@ int /*long*/ checkIfEventProc (int /*long*/ display, int /*long*/ xEvent, int /*
 	int type = OS.X_EVENT_TYPE (xEvent);
 	switch (type) {
 		case OS.VisibilityNotify:
+			/*
+			* As of GTK 2.17.11, obscured controls no longer send expose 
+			* events. It is no longer necessary to track visiblity notify
+			* events.
+			*/
+			if (OS.GTK_VERSION >= OS.VERSION (2, 17, 11)) return 0;
 		case OS.Expose:
 		case OS.GraphicsExpose:
 			break;
@@ -1443,7 +1450,7 @@ int getCaretBlinkTime () {
  * over top of, or null if it is not currently over one of the
  * controls built by the currently running application.
  *
- * @return the control under the cursor
+ * @return the control under the cursor or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1646,25 +1653,6 @@ public Object getData () {
 	return data;
 }
 
-/**
- * Returns a point whose x coordinate is the horizontal
- * dots per inch of the display, and whose y coordinate
- * is the vertical dots per inch of the display.
- *
- * @return the horizontal and vertical DPI
- *
- * @exception SWTException <ul>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public Point getDPI () {
-	checkDevice ();
-	int widthMM = OS.gdk_screen_width_mm ();
-	int width = OS.gdk_screen_width ();
-	int dpi = Compatibility.round (254 * width, widthMM * 10);
-	return new Point (dpi, dpi);
-}
-
 int /*long*/ gtk_fixed_get_type () {
 	return fixed_type;
 }
@@ -1702,6 +1690,23 @@ static boolean isValidClass (Class clazz) {
 }
 
 /**
+ * Returns the single instance of the application menu bar, or
+ * <code>null</code> if there is no application menu bar for the platform.
+ *
+ * @return the application menu bar, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getMenuBar () {
+	checkDevice ();
+	return null;
+}
+
+/**
  * Returns the button dismissal alignment, one of <code>LEFT</code> or <code>RIGHT</code>.
  * The button dismissal alignment is the ordering that should be used when positioning the
  * default dismissal button for a dialog.  For example, in a dialog that contains an OK and
@@ -1754,7 +1759,7 @@ public int getDoubleClickTime () {
  * any of the controls built by the currently running
  * application.
  *
- * @return the control under the cursor
+ * @return the focus control or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -2199,6 +2204,24 @@ public Image getSystemImage (int id) {
 	return null;
 }
 
+/**
+ * Returns the single instance of the system-provided menu for the application, or
+ * <code>null</code> on platforms where no menu is provided for the application.
+ *
+ * @return the system menu, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getSystemMenu () {
+	checkDevice();
+	return null;
+}
+
 void initializeSystemColors () {
 	GdkColor gdkColor;
 	
@@ -2355,6 +2378,24 @@ public Thread getThread () {
 	}
 }
 
+/**	 
+ * Returns a boolean indicating whether a touch-aware input device is
+ * attached to the system and is ready for use.
+ *
+ * @return <code>true</code> if a touch-aware input device is detected, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkDevice();
+	return false;
+}
+
 Widget getWidget (int /*long*/ handle) {
 	if (handle == 0) return null;
 	if (lastWidget != null && lastHandle == handle) return lastWidget;
@@ -3156,6 +3197,13 @@ public boolean readAndDispatch () {
 	boolean events = false;
 	events |= runSettings ();
 	events |= runPopups ();
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock before calling the function below. 
+	*/
+	OS.gdk_threads_leave();
 	events |= OS.g_main_context_iteration (0, false);
 	if (events) {
 		runDeferredEvents ();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java
index ec6e586..44c5ffc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -651,6 +651,15 @@ void setForegroundColor (GdkColor color) {
 	}
 }
 
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if (items != null) {
+		for (int i=0; i<items.length; i++) {
+			if (items[i] != null) items[i].setOrientation (create);
+		}
+	}
+}
+
 void setScrollbar () {
 	if (itemCount == 0) return;
 	if ((style & SWT.V_SCROLL) == 0) return;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java
index e141b60..4ac69e4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ExpandItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -513,6 +513,8 @@ boolean setFocus () {
 	if (!OS.gtk_widget_get_child_visible (handle)) return false;
 	OS.GTK_WIDGET_SET_FLAGS (handle, OS.GTK_CAN_FOCUS);
 	OS.gtk_widget_grab_focus (handle);
+	// widget could be disposed at this point
+	if (isDisposed ()) return false;
 	boolean result = OS.gtk_widget_is_focus (handle);
 	if (!result) OS.GTK_WIDGET_UNSET_FLAGS (handle, OS.GTK_CAN_FOCUS);
 	return result;
@@ -589,11 +591,12 @@ public void setImage (Image image) {
 	}
 }
 
-void setOrientation() {
-	super.setOrientation ();
-	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
-		OS.gtk_widget_set_direction (handle, OS.GTK_TEXT_DIR_RTL);
-		OS.gtk_container_forall (handle, display.setDirectionProc, OS.GTK_TEXT_DIR_RTL);	
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (parent.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+		OS.gtk_widget_set_direction (handle, dir);
+		OS.gtk_container_forall (handle, display.setDirectionProc, dir);
 	}
 }
 	
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FileDialog.java
index 1dd6921..c20f9c5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FileDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FileDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,8 +27,7 @@ import org.eclipse.swt.internal.gtk.*;
  * <p>
  * Note: Only one of the styles SAVE and OPEN may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
@@ -413,6 +412,7 @@ String openChooserDialog () {
 	} else {
 		handle = OS.gtk_file_chooser_dialog_new (titleBytes, shellHandle, action, OS.GTK_STOCK_OK (), OS.GTK_RESPONSE_OK, OS.GTK_STOCK_CANCEL (), OS.GTK_RESPONSE_CANCEL, 0);
 	}
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
 	OS.gtk_window_set_modal (handle, true);
 	if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0)) {
 		int /*long*/ group = OS.gtk_window_get_group(0);
@@ -441,6 +441,13 @@ String openChooserDialog () {
 		hookId = OS.g_signal_add_emission_hook (signalId, 0, display.emissionProc, handle, 0);
 	}	
 	int response = OS.gtk_dialog_run (handle);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
 		OS.g_signal_remove_emission_hook (signalId, hookId);
 	}
@@ -483,6 +490,13 @@ String openClassicDialog () {
 		hookId = OS.g_signal_add_emission_hook (signalId, 0, display.emissionProc, handle, 0);
 	}	
 	int response = OS.gtk_dialog_run (handle);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
 		OS.g_signal_remove_emission_hook (signalId, hookId);
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FontDialog.java
index 8ba5db6..8658c40 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FontDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/FontDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,8 +26,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
@@ -176,6 +175,13 @@ public FontData open () {
 		hookId = OS.g_signal_add_emission_hook (signalId, 0, display.emissionProc, handle, 0);
 	}	
 	int response = OS.gtk_dialog_run (handle);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
 		OS.g_signal_remove_emission_hook (signalId, hookId);
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java
index f2b75d0..40e6c20 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Group.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -237,10 +237,11 @@ void setForegroundColor (GdkColor color) {
 	setForegroundColor (labelHandle, color);
 }
 
-void setOrientation () {
-	super.setOrientation ();
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-		OS.gtk_widget_set_direction (labelHandle, OS.GTK_TEXT_DIR_RTL);
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+		OS.gtk_widget_set_direction (labelHandle, dir);
 	}
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java
index cc0036e..4a4e2c0 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -309,8 +309,8 @@ int /*long*/ gtk_preedit_changed (int /*long*/ imcontext) {
 			int [] end = new int [1];
 			for (int i = 0; i < count; i++) {
 				OS.pango_attr_iterator_range (iterator, start, end);
-				ranges [i * 2] = (int)/*64*/OS.g_utf8_pointer_to_offset (preeditString [0], preeditString [0] + start [0]);
-				ranges [i * 2 + 1] = (int)/*64*/OS.g_utf8_pointer_to_offset (preeditString [0], preeditString [0] + end [0]) - 1;
+				ranges [i * 2] = (int)/*64*/OS.g_utf16_pointer_to_offset (preeditString [0], preeditString [0] + start [0]);
+				ranges [i * 2 + 1] = (int)/*64*/OS.g_utf16_pointer_to_offset (preeditString [0], preeditString [0] + end [0]) - 1;
 				styles [i] = new TextStyle (null, null, null);
 				int /*long*/ attr = OS.pango_attr_iterator_get (iterator, OS.PANGO_ATTR_FOREGROUND);
 				if (attr != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java
index 7d5b03a..40f1cb9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Label.java	
@@ -41,8 +41,7 @@ import org.eclipse.swt.graphics.*;
  * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
  * Only one of CENTER, LEFT and RIGHT may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
@@ -498,11 +497,12 @@ void setForegroundColor (GdkColor color) {
 	if (imageHandle != 0) setForegroundColor (imageHandle, color);
 }
 
-void setOrientation () {
-	super.setOrientation ();
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, OS.GTK_TEXT_DIR_RTL);
-		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, OS.GTK_TEXT_DIR_RTL);
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;	
+		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, dir);
+		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, dir);
 	}
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java
index 6495b79..e9321cc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Link.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -148,7 +148,6 @@ void createHandle(int index) {
 	OS.gtk_fixed_set_has_window (handle, true);
 	OS.GTK_WIDGET_SET_FLAGS (handle, OS.GTK_CAN_FOCUS);
 	layout = new TextLayout (display);
-	layout.setOrientation((style & SWT.RIGHT_TO_LEFT) != 0? SWT.RIGHT_TO_LEFT : SWT.LEFT_TO_RIGHT);
 	linkColor = new Color (display, LINK_FOREGROUND);
 	disabledColor = new Color (display, LINK_DISABLED_FOREGROUND);
 	offsets = new Point [0];
@@ -699,6 +698,12 @@ void setFontDescription (int /*long*/ font) {
 	layout.setFont (Font.gtk_new (display, font));
 }
 
+void setOrientation (boolean create) {
+    super.setOrientation (create);
+    layout.setOrientation (style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT));
+    if (!create) redraw (true);
+}
+
 /**
  * Sets the receiver's text.
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
index 064475d..3ee619b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -368,7 +368,7 @@ public void deselectAll () {
 	OS.g_signal_handlers_unblock_matched (selection, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED);
 }
 
-boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
+boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean [] consume) {
 	boolean selected = false;
 	if (filter) {
 		int /*long*/ [] path = new int /*long*/ [1];
@@ -382,7 +382,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 			return false;
 		}
 	}
-	boolean dragDetect = super.dragDetect (x, y, filter, consume);
+	boolean dragDetect = super.dragDetect (x, y, filter, false, consume);
 	if (dragDetect && selected && consume != null) consume [0] = true;
 	return dragDetect;
 }
@@ -719,6 +719,25 @@ int /*long*/ gtk_changed (int /*long*/ widget) {
 	return 0;
 }
 
+int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) {
+	switch (OS.GDK_EVENT_TYPE (gdkEvent)) {
+		case OS.GDK_EXPOSE: {
+			/*
+			* Bug in GTK. SWT connects the expose-event 'after' the default 
+			* handler of the signal. If the tree has no children, then GTK 
+			* sends expose signal only 'before' the default signal handler.
+			* The fix is to detect this case in 'event_after' and send the
+			* expose event.
+			*/
+			if (OS.gtk_tree_model_iter_n_children (modelHandle, 0) == 0) {
+				gtk_expose_event (widget, gdkEvent);
+			}
+			break;
+		}
+	}
+	return super.gtk_event_after (widget, gdkEvent);
+}
+
 int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ event) {
 	int /*long*/ result = super.gtk_button_press_event (widget, event);
 	if (result != 0) return result;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java
index e585ee1..b69ac67 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -210,13 +210,28 @@ void _setVisible (boolean visible) {
 				}
 			}
 			int /*long*/ address = hasLocation ? display.menuPositionProc: 0;
+			int /*long*/ data = 0;
+			if ((OS.GTK_VERSION >=  OS.VERSION (2, 10, 0))) {
+				/*
+				* Popup-menu to the status icon should be aligned to  
+				* Tray rather than to cursor position. There is a 
+				* possibility (unlikely) that TrayItem might have  
+				* been disposed in the listener, for which case  
+				* the menu should be shown in the cursor position. 
+				*/
+				TrayItem item = display.currentTrayItem;
+				if (item != null && !item.isDisposed()) {
+					 data = item.handle;
+					 address = OS.gtk_status_icon_position_menu_func ();
+				}
+			}
 			/*
 			* Bug in GTK.  The timestamp passed into gtk_menu_popup is used
 			* to perform an X pointer grab.  It cannot be zero, else the grab
 			* will fail.  The fix is to ensure that the timestamp of the last
 			* event processed is used.
 			*/
-			OS.gtk_menu_popup (handle, 0, 0, address, 0, 0, display.getLastEventTime ());
+			OS.gtk_menu_popup (handle, 0, 0, address, data, 0, display.getLastEventTime ());
 		} else {
 			sendEvent (SWT.Hide);
 		}
@@ -301,9 +316,15 @@ void createHandle (int index) {
 }
 
 void createIMMenu (int /*long*/ imHandle) {
-	if (this.imHandle == imHandle) return;
-	this.imHandle = imHandle;
-	if (imHandle == 0) {
+	boolean showInputMethod = false;
+	int /*long*/ settings = OS.gtk_settings_get_default ();
+	if (settings != 0) {
+		int [] buffer = new int [1];
+		OS.g_object_get (settings, OS.gtk_show_input_method_menu, buffer, 0);
+		showInputMethod = buffer[0] != 0;
+	}
+	if (imHandle == 0 || !showInputMethod) {
+		this.imHandle = 0;
 		if (imItem != 0) {
 			OS.gtk_widget_destroy (imItem);
 			imItem = 0;
@@ -313,7 +334,10 @@ void createIMMenu (int /*long*/ imHandle) {
 			imSeparator = 0;
 		}
 		return;
-	} 
+	}
+	if (this.imHandle == imHandle) return;
+	this.imHandle = imHandle;
+	
 	if (imSeparator == 0) {
 		imSeparator = OS.gtk_separator_menu_item_new ();
 		OS.gtk_widget_show (imSeparator);
@@ -501,6 +525,24 @@ String getNameText () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Decorations</code>.
  *
  * @return the receiver's parent
@@ -955,10 +997,44 @@ public void setLocation (Point location) {
 	setLocation (location.x, location.y);
 }
 
-void setOrientation() {
-	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (handle != 0) OS.gtk_widget_set_direction (handle, OS.GTK_TEXT_DIR_RTL);
-	}
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7  
+ */
+public void setOrientation (int orientation) {
+    checkWidget ();    
+    if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+    _setOrientation (orientation);
+}
+
+void _setOrientation (int orientation) {
+    if (OS.GTK_VERSION < OS.VERSION (2, 4, 0)) return;
+    int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+    if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
+    style &= ~flags;
+    style |= orientation & flags;
+    setOrientation (false);
+}
+
+void setOrientation (boolean create) {
+    if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+    	int dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+        if (handle != 0) OS.gtk_widget_set_direction (handle, dir);
+        MenuItem [] items = getItems ();
+        for (int i = 0; i < items.length; i++) {
+            items [i].setOrientation (create);
+        }
+    }
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java
index d98c282..8ce0cde 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ import org.eclipse.swt.events.*;
 public class MenuItem extends Item {
 	Menu parent, menu;
 	int /*long*/ groupHandle;
-	int accelerator;
+	int accelerator, userId;
 	
 /**
  * Constructs a new instance of this class given its parent
@@ -349,6 +349,23 @@ public boolean getEnabled () {
 }
 
 /**
+ * Gets the identifier associated with the receiver.
+ *
+ * @return the receiver's identifier
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getID () {
+	checkWidget();
+	return userId;
+}
+
+/**
  * Returns the receiver's cascade menu if it has one or null
  * if it does not. Only <code>CASCADE</code> menu items can have
  * a pull down menu. The sequence of key strokes, button presses 
@@ -644,6 +661,25 @@ public void setEnabled (boolean enabled) {
 }
 
 /**
+ * Sets the identifier associated with the receiver to the argument.
+ *
+ * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setID (int id) {
+	checkWidget();
+	if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+	userId = id;
+}
+
+/**
  * Sets the image the receiver will display to the argument.
  * <p>
  * Note: This operation is a hint and is not supported on
@@ -745,13 +781,14 @@ public void setMenu (Menu menu) {
 	if (accelGroup != 0) addAccelerators (accelGroup);
 }
 
-void setOrientation() {
-	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (handle != 0) {
-			OS.gtk_widget_set_direction (handle, OS.GTK_TEXT_DIR_RTL);
-			OS.gtk_container_forall (handle, display.setDirectionProc, OS.GTK_TEXT_DIR_RTL);		
-		}
-	}
+void setOrientation (boolean create) {
+    super.setOrientation (create);
+    if ((parent.style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+    	int dir = (parent.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+        OS.gtk_widget_set_direction (handle, dir);
+        OS.gtk_container_forall (handle, display.setDirectionProc, dir);
+        if (menu != null) menu._setOrientation (parent.style & (SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT));
+    }
 }
 
 boolean setRadioSelection (boolean value) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MessageBox.java
index 2a74df6..953fe2a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MessageBox.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MessageBox.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,8 +31,7 @@ import org.eclipse.swt.internal.gtk.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
  * ICON_WARNING and ICON_WORKING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
@@ -188,6 +187,13 @@ public int open () {
 		hookId = OS.g_signal_add_emission_hook (signalId, 0, display.emissionProc, handle, 0);
 	}	
 	int response = OS.gtk_dialog_run (handle);
+	/*
+	* This call to gdk_threads_leave() is a temporary work around
+	* to avoid deadlocks when gdk_threads_init() is called by native
+	* code outside of SWT (i.e AWT, etc). It ensures that the current
+	* thread leaves the GTK lock acquired by the function above. 
+	*/
+	OS.gdk_threads_leave();
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
 		OS.g_signal_remove_emission_hook (signalId, hookId);
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java
index 34f3886..7b4d23e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ProgressBar.java	
@@ -27,8 +27,7 @@ import org.eclipse.swt.internal.gtk.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java
index b2747da..3b2fe88 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.events.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java
index 8784f03..fa13766 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scale.java	
@@ -30,8 +30,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java
index 07580ec..a8e5063 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ScrollBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -490,7 +490,6 @@ int /*long*/ gtk_value_changed (int /*long*/ adjustment) {
 		case OS.GTK_SCROLL_STEP_LEFT:
 		case OS.GTK_SCROLL_STEP_BACKWARD:	event.detail = SWT.ARROW_UP; break;
 	}
-	detail = OS.GTK_SCROLL_NONE;
 	if (!dragSent) detail = OS.GTK_SCROLL_NONE;
 	sendSelectionEvent (SWT.Selection, event, false);
 	parent.updateScrollBarValue (this);
@@ -504,7 +503,7 @@ int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) {
 		case OS.GDK_BUTTON_RELEASE: {
 			GdkEventButton gdkEventButton = new GdkEventButton ();
 			OS.memmove (gdkEventButton, gdkEvent, GdkEventButton.sizeof);
-			if (gdkEventButton.button == 1 && detail == SWT.DRAG) {
+			if (gdkEventButton.button == 1 && detail == OS.GTK_SCROLL_JUMP) {
 				if (!dragSent) {
 					Event event = new Event ();
 					event.detail = SWT.DRAG;
@@ -715,12 +714,12 @@ public void setMinimum (int value) {
 	OS.g_signal_handlers_unblock_matched (adjustmentHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
 }
 
-void setOrientation () {
-	super.setOrientation ();
-	if ((parent.style & SWT.MIRRORED) != 0) {
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((parent.style & SWT.MIRRORED) != 0 || !create) {
 		if ((parent.state & CANVAS) != 0) {
 			if ((style & SWT.HORIZONTAL) != 0) {
-				OS.gtk_range_set_inverted (handle, true);
+				OS.gtk_range_set_inverted (handle, (parent.style & SWT.RIGHT_TO_LEFT) != 0);
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java
index e349be0..8c94163 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,7 +142,7 @@ ScrollBar createScrollBar (int style) {
 		bar.handle = OS.GTK_SCROLLED_WINDOW_VSCROLLBAR (scrolledHandle);
 		bar.adjustmentHandle = OS.gtk_scrolled_window_get_vadjustment (scrolledHandle);
 	}
-	bar.setOrientation();
+	bar.setOrientation (true);
 	bar.hookEvents ();
 	bar.register ();
 	return bar;
@@ -286,13 +286,16 @@ boolean sendLeaveNotify () {
 	return scrolledHandle != 0;
 }
 
-void setOrientation () {
-	super.setOrientation ();
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
 		if (scrolledHandle != 0) {
-			OS.gtk_widget_set_direction (scrolledHandle, OS.GTK_TEXT_DIR_RTL);
+			OS.gtk_widget_set_direction (scrolledHandle, dir);
 		}
 	}
+	if (horizontalBar != null) horizontalBar.setOrientation (create);
+	if (verticalBar != null) verticalBar.setOrientation (create);	
 }
 
 boolean setScrollBarVisible (ScrollBar bar, boolean visible) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java
index b1d93b6..6c18baf 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -107,7 +107,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
  * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
  * </p><p>
- * IMPORTANT: This class is not intended to be subclassed.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see Decorations
@@ -115,6 +115,7 @@ import org.eclipse.swt.events.*;
  * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Shell extends Decorations {
 	int /*long*/ shellHandle, tooltipsHandle, tooltipWindow, group, modalGroup;
@@ -770,6 +771,27 @@ Composite findDeferredControl () {
 	return layoutCount > 0 ? this : null;
 }
 
+/**
+ * Returns a ToolBar object representing the tool bar that can be shown in the receiver's
+ * trim. This will return <code>null</code> if the platform does not support tool bars that
+ * are not part of the content area of the shell, or if the Shell's style does not support 
+ * having a tool bar. 
+ * <p>
+ * 
+ * @return a ToolBar object representing the Shell's tool bar, or <ocde>null</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public ToolBar getToolBar() {
+	checkWidget ();
+	return null;
+}
+
 boolean hasBorder () {
 	return false;
 }
@@ -1015,7 +1037,8 @@ Shell getModalShell () {
 /**
  * Gets the receiver's modified state.
  *
- * </ul>
+ * @return <code>true</code> if the receiver is marked as modified, or <code>false</code> otherwise
+ * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1046,9 +1069,9 @@ public boolean getVisible () {
 
 /** 
  * Returns the region that defines the shape of the shell,
- * or null if the shell has the default shape.
+ * or <code>null</code> if the shell has the default shape.
  *
- * @return the region that defines the shape of the shell (or null)
+ * @return the region that defines the shape of the shell, or <code>null</code>
  *	
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -1320,9 +1343,33 @@ int /*long*/ gtk_motion_notify_event (int /*long*/ widget, int /*long*/ event) {
 }
 
 int /*long*/ gtk_key_press_event (int /*long*/ widget, int /*long*/ event) {
-	/* Stop menu mnemonics when the shell is disabled */
 	if (widget == shellHandle) {
-		return (state & DISABLED) != 0 ? 1 : 0;
+		/* Stop menu mnemonics when the shell is disabled */
+		if ((state & DISABLED) != 0) return 1;
+		
+		if (menuBar != null && !menuBar.isDisposed ()) {
+			Control focusControl = display.getFocusControl ();
+			if (focusControl != null && (focusControl.hooks (SWT.KeyDown) || focusControl.filters (SWT.KeyDown))) {
+				int /*long*/ [] accel = new int /*long*/ [1];
+				int /*long*/ setting = OS.gtk_settings_get_default ();
+				OS.g_object_get (setting, OS.gtk_menu_bar_accel, accel, 0);
+				if (accel [0] != 0) {
+					int [] keyval = new int [1];
+					int [] mods = new int [1];
+					OS.gtk_accelerator_parse (accel [0], keyval, mods);
+					OS.g_free (accel [0]);
+					if (keyval [0] != 0) {
+						GdkEventKey keyEvent = new GdkEventKey ();
+						OS.memmove (keyEvent, event, GdkEventKey.sizeof);
+						int mask = OS.gtk_accelerator_get_default_mod_mask ();
+						if (keyEvent.keyval == keyval [0] && (keyEvent.state & mask) == (mods [0] & mask)) {
+							return focusControl.gtk_key_press_event (focusControl.focusHandle (), event);
+						}
+					}
+				}
+			}
+		}
+		return 0;
 	}
 	return super.gtk_key_press_event (widget, event);
 }
@@ -1994,6 +2041,13 @@ public void setVisible (boolean visible) {
 			boolean iconic = false;
 			Shell shell = parent != null ? parent.getShell() : null;
 			do {
+				/*
+				* This call to gdk_threads_leave() is a temporary work around
+				* to avoid deadlocks when gdk_threads_init() is called by native
+				* code outside of SWT (i.e AWT, etc). It ensures that the current
+				* thread leaves the GTK lock before calling the function below. 
+				*/
+				OS.gdk_threads_leave();
 				OS.g_main_context_iteration (0, false);
 				if (isDisposed ()) break;
 				iconic = minimized || (shell != null && shell.minimized);
@@ -2169,13 +2223,24 @@ void updateModal () {
 		} else {
 			shell = modal;
 		}
+		Composite topModalShell = shell;
 		while (shell != null) {
 			if ((shell.style & mask) == 0) {
 				group = shell.getShell ().group;
 				break;
 			}
+			topModalShell = shell;
 			shell = shell.parent;
 		}
+		/*
+		* If a modal shell doesn't have any parent (or modal shell as it's parent), 
+		* then we incorrectly add the modal shell to the default group, due to which 
+		* children of that modal shell are not interactive. The fix is to ensure 
+		* that whenever there is a modal shell in the hierarchy, then we always
+		* add the modal shell's group to that modal shell and it's modelless children
+		* in a different group.
+		*/
+		if (group == 0 && topModalShell != null) group = topModalShell.getShell ().group;
 	}
 	if (OS.GTK_VERSION >= OS.VERSION (2, 10, 0) && group == 0) { 
 		/*
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java
index 957b792..8b20f25 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Slider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -487,11 +487,11 @@ public void setMinimum (int value) {
 	OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
 }
 
-void setOrientation () {
-	super.setOrientation ();
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
 		if ((style & SWT.HORIZONTAL) != 0) {
-			OS.gtk_range_set_inverted (handle, true);
+			OS.gtk_range_set_inverted (handle, (style & SWT.RIGHT_TO_LEFT) != 0);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
index d8c0dd1..51315b5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -647,8 +647,11 @@ int /*long*/ gtk_commit (int /*long*/ imContext, int /*long*/ text) {
 
 int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /*long*/ end_pos) {
 	if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0;
-	if (end_pos == -1) end_pos = OS.g_utf8_strlen (OS.gtk_entry_get_text (handle), -1);
-	String newText = verifyText ("", (int)/*64*/start_pos, (int)/*64*/end_pos);
+	int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+	if (end_pos == -1) end_pos = OS.g_utf8_strlen (ptr, -1);
+	int start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start_pos);
+	int end = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end_pos);
+	String newText = verifyText ("", start, end);
 	if (newText == null) {
 		OS.g_signal_stop_emission_by_name (handle, OS.delete_text);
 	} else {
@@ -685,11 +688,10 @@ int /*long*/ gtk_insert_text (int /*long*/ widget, int /*long*/ new_text, int /*
 	String oldText = new String (Converter.mbcsToWcs (null, buffer));
 	int [] pos = new int [1];
 	OS.memmove (pos, position, 4);
-	if (pos [0] == -1) {
-		int /*long*/ ptr = OS.gtk_entry_get_text (handle);
-		pos [0] = (int)/*64*/OS.g_utf8_strlen (ptr, -1);
-	}
-	String newText = verifyText (oldText, pos [0], pos [0]);
+	int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+	if (pos [0] == -1) pos [0] = (int)/*64*/OS.g_utf8_strlen (ptr, -1);
+	int start = (int)/*64*/OS.g_utf16_pointer_to_offset (ptr, pos [0]);
+	String newText = verifyText (oldText, start, start);
 	if (newText != oldText) {
 		int [] newStart = new int [1], newEnd = new int [1];
 		OS.gtk_editable_get_selection_bounds (handle, newStart, newEnd);
@@ -1089,7 +1091,9 @@ public void setDigits (int value) {
 		climbRate /= factor;
 	}
 	OS.memmove (hAdjustment, adjustment);
+	OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
 	OS.gtk_spin_button_configure (handle, hAdjustment, climbRate, value);
+	OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java
index 81846bc..e09761c 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -637,6 +637,15 @@ void setForegroundColor (GdkColor color) {
 	}
 }
 
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if (items != null) {
+		for (int i=0; i<items.length; i++) {
+			if (items[i] != null) items[i].setOrientation (create);
+		}
+	}
+}
+
 /**
  * Selects the item at the given zero-relative index in the receiver. 
  * If the item at the index was already selected, it remains selected.
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java
index a19d175..59aea1b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -119,7 +119,7 @@ protected void checkSubclass () {
 
 void createWidget (int index) {
 	parent.createItem (this, index);
-	setOrientation ();
+	setOrientation (true);
 	hookEvents ();
 	register ();
 	text = "";
@@ -313,12 +313,13 @@ public void setImage (Image image) {
 	}
 }
 
-void setOrientation () {
-	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (handle != 0) OS.gtk_widget_set_direction (handle, OS.GTK_TEXT_DIR_RTL);
-		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, OS.GTK_TEXT_DIR_RTL);
-		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, OS.GTK_TEXT_DIR_RTL);
-		if (pageHandle != 0) OS.gtk_widget_set_direction (pageHandle, OS.GTK_TEXT_DIR_RTL);
+void setOrientation (boolean create) {
+	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (parent.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+		if (handle != 0) OS.gtk_widget_set_direction (handle, dir);
+		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, dir);
+		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, dir);
+		if (pageHandle != 0) OS.gtk_widget_set_direction (pageHandle, dir);
 	}
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
index d0dfe65..771173e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1084,7 +1084,7 @@ void destroyItem (TableItem item) {
 	if (itemCount == 0) resetCustomDraw ();
 }
 
-boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
+boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean [] consume) {
 	boolean selected = false;
 	if (filter) {
 		int /*long*/ [] path = new int /*long*/ [1];
@@ -1098,7 +1098,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 			return false;
 		}
 	}
-	boolean dragDetect = super.dragDetect (x, y, filter, consume);
+	boolean dragDetect = super.dragDetect (x, y, filter, false, consume);
 	if (dragDetect && selected && consume != null) consume [0] = true;
 	return dragDetect;
 }
@@ -1933,6 +1933,25 @@ int /*long*/ gtk_changed (int /*long*/ widget) {
 	return 0;
 }
 
+int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) {
+	switch (OS.GDK_EVENT_TYPE (gdkEvent)) {
+		case OS.GDK_EXPOSE: {
+			/*
+			* Bug in GTK. SWT connects the expose-event 'after' the default 
+			* handler of the signal. If the tree has no children, then GTK 
+			* sends expose signal only 'before' the default signal handler.
+			* The fix is to detect this case in 'event_after' and send the
+			* expose event.
+			*/
+			if (OS.gtk_tree_model_iter_n_children (modelHandle, 0) == 0) {
+				gtk_expose_event (widget, gdkEvent);
+			}
+			break;
+		}
+	}
+	return super.gtk_event_after (widget, gdkEvent);
+}
+
 int /*long*/ gtk_expose_event (int /*long*/ widget, int /*long*/ eventPtr) {
 	if ((state & OBSCURED) != 0) return 0;
 	if ((state & PARENT_BACKGROUND) != 0 || backgroundImage != null) {
@@ -2529,12 +2548,15 @@ int /*long*/ rendererGetSizeProc (int /*long*/ cell, int /*long*/ widget, int /*
 	if (!ignoreSize && OS.GTK_IS_CELL_RENDERER_TEXT (cell)) {
 		int /*long*/ iter = OS.g_object_get_qdata (cell, Display.SWT_OBJECT_INDEX2);
 		TableItem item = null;
+		boolean isSelected = false;
 		if (iter != 0) {
 			int /*long*/ path = OS.gtk_tree_model_get_path (modelHandle, iter);
 			int [] buffer = new int [1];
 			OS.memmove (buffer, OS.gtk_tree_path_get_indices (path), 4);
 			int index = buffer [0];
 			item = _getItem (index);
+			int /*long*/ selection = OS.gtk_tree_view_get_selection (handle);
+			isSelected = OS.gtk_tree_selection_path_is_selected (selection, path);
 			OS.gtk_tree_path_free (path);
 		}
 		if (item != null) {
@@ -2567,6 +2589,7 @@ int /*long*/ rendererGetSizeProc (int /*long*/ cell, int /*long*/ widget, int /*
 				event.gc = gc;
 				event.width = contentWidth [0];
 				event.height = contentHeight [0];
+				if (isSelected) event.detail = SWT.SELECTED;
 				sendEvent (SWT.MeasureItem, event);
 				gc.dispose ();
 				contentWidth [0] = event.width - imageWidth;
@@ -3135,6 +3158,16 @@ public void setLinesVisible (boolean show) {
 	}
 }
 
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	for (int i=0; i<itemCount; i++) {
+		if (items[i] != null) items[i].setOrientation (create);
+	}
+	for (int i=0; i<columnCount; i++) {
+		if (columns[i] != null) columns[i].setOrientation (create);
+	}
+}
+
 void setParentBackground () {
 	ownerDraw = true;
 	recreateRenderers ();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java
index e0ab44f..e1a78e1 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -192,7 +192,7 @@ protected void checkSubclass () {
 
 void createWidget (int index) {
 	parent.createItem (this, index);
-	setOrientation ();
+	setOrientation (true);
 	hookEvents ();
 	register ();
 	text = "";
@@ -614,11 +614,12 @@ public void setMoveable (boolean moveable) {
 	OS.gtk_tree_view_column_set_reorderable (handle, moveable);
 }
 
-void setOrientation() {
-	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
+void setOrientation (boolean create) {
+	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
 		if (buttonHandle != 0) {
-			OS.gtk_widget_set_direction (buttonHandle, OS.GTK_TEXT_DIR_RTL);
-			OS.gtk_container_forall (buttonHandle, display.setDirectionProc, OS.GTK_TEXT_DIR_RTL);	
+			int dir = (parent.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+			OS.gtk_widget_set_direction (buttonHandle, dir);
+			OS.gtk_container_forall (buttonHandle, display.setDirectionProc, dir);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
index c62de00..25c926a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -495,7 +495,7 @@ void deregister () {
 	if (imContext != 0) display.removeWidget (imContext);
 }
 
-boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
+boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean [] consume) {
 	if (filter) {
 		int start = 0, end = 0;
 		if ((style & SWT.SINGLE) != 0) {
@@ -529,7 +529,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 				position = OS.gtk_text_iter_get_offset (p);
 			}
 			if (start <= position && position < end) {
-				if (super.dragDetect (x, y, filter, consume)) {
+				if (super.dragDetect (x, y, filter, dragOnTimeout, consume)) {
 					if (consume != null) consume [0] = true;
 					return true;
 				}
@@ -537,7 +537,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 		}
 		return false;
 	}
-	return super.dragDetect (x, y, filter, consume);
+	return super.dragDetect (x, y, filter, dragOnTimeout, consume);
 }
 
 int /*long*/ eventWindow () {
@@ -670,12 +670,18 @@ public Point getCaretLocation () {
 public int getCaretPosition () {
 	checkWidget ();
 	if ((style & SWT.SINGLE) != 0)  {
-		return OS.gtk_editable_get_position (handle);
+		int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+		return (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, OS.gtk_editable_get_position (handle));
 	}
 	byte [] position = new byte [ITER_SIZEOF];
 	int /*long*/ mark = OS.gtk_text_buffer_get_insert (bufferHandle);
 	OS.gtk_text_buffer_get_iter_at_mark (bufferHandle, position, mark);
-	return OS.gtk_text_iter_get_offset (position);
+	byte [] zero = new byte [ITER_SIZEOF];
+	OS.gtk_text_buffer_get_iter_at_offset(bufferHandle, zero, 0);
+	int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, zero, position, true);
+	int result = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, OS.gtk_text_iter_get_offset (position));
+	OS.g_free (ptr);
+	return result;
 }
 
 /**
@@ -692,9 +698,15 @@ public int getCharCount () {
 	checkWidget ();
 	if ((style & SWT.SINGLE) != 0) {
 		int /*long*/ ptr = OS.gtk_entry_get_text (handle);
-		return (int)/*64*/OS.g_utf8_strlen (ptr, -1);
+		return (int)/*64*/OS.g_utf16_strlen (ptr, -1);
 	}
-	return OS.gtk_text_buffer_get_char_count (bufferHandle);
+	byte [] startIter =  new byte [ITER_SIZEOF];
+	byte [] endIter =  new byte [ITER_SIZEOF];
+	OS.gtk_text_buffer_get_bounds (bufferHandle, startIter, endIter);
+	int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, startIter, endIter, true);
+	int result = (int)/*64*/OS.g_utf16_strlen(ptr, -1);
+	OS.g_free (ptr);
+	return result;
 }
 
 /**
@@ -849,8 +861,7 @@ public String getMessage () {
  * @since 2.1.2
  */
 public int getOrientation () {
-	checkWidget();
-	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	return super.getOrientation ();
 }
 
 /*public*/ int getPosition (Point point) {
@@ -863,11 +874,15 @@ public int getOrientation () {
 		int /*long*/ layout = OS.gtk_entry_get_layout (handle);
 		OS.pango_layout_xy_to_index (layout, point.x * OS.PANGO_SCALE, point.y * OS.PANGO_SCALE, index, trailing);
 		int /*long*/ ptr = OS.pango_layout_get_text (layout);
-		position = (int)/*64*/OS.g_utf8_pointer_to_offset (ptr, ptr + index[0]) + trailing[0];
+		position = (int)/*64*/OS.g_utf16_pointer_to_offset (ptr, ptr + index[0]) + trailing[0];
 	} else {
 		byte [] p = new byte [ITER_SIZEOF];
 		OS.gtk_text_view_get_iter_at_location (handle, p, point.x, point.y);
-		position = OS.gtk_text_iter_get_offset (p);
+		byte [] zero = new byte [ITER_SIZEOF];
+		OS.gtk_text_buffer_get_iter_at_offset(bufferHandle, zero, 0);
+		int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, zero, p, true);
+		position = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, OS.gtk_text_iter_get_offset (p));
+		OS.g_free (ptr);
 	}
 	return position;
 }
@@ -896,12 +911,21 @@ public Point getSelection () {
 		int [] start = new int [1];
 		int [] end = new int [1];
 		OS.gtk_editable_get_selection_bounds (handle, start, end);
+		int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+		start[0] = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start[0]);
+		end[0] = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end[0]);
 		return new Point (start [0], end [0]);
 	}
-	byte [] start =  new byte [ITER_SIZEOF];
-	byte [] end =  new byte [ITER_SIZEOF];
-	OS.gtk_text_buffer_get_selection_bounds (bufferHandle, start, end);
-	return new Point (OS.gtk_text_iter_get_offset (start), OS.gtk_text_iter_get_offset (end));
+	byte [] startIter =  new byte [ITER_SIZEOF];
+	byte [] endIter =  new byte [ITER_SIZEOF];
+	OS.gtk_text_buffer_get_selection_bounds (bufferHandle, startIter, endIter);
+	byte [] zero = new byte [ITER_SIZEOF];
+	OS.gtk_text_buffer_get_iter_at_offset(bufferHandle, zero, 0);
+	int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, zero, endIter, true);
+	int start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, OS.gtk_text_iter_get_offset (startIter));
+	int end = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, OS.gtk_text_iter_get_offset (endIter));
+	OS.g_free (ptr);
+	return new Point (start, end);
 }
 
 /**
@@ -981,22 +1005,7 @@ int getTabWidth (int tabs) {
  * </ul>
  */
 public String getText () {
-	checkWidget ();
-	int /*long*/ address;
-	if ((style & SWT.SINGLE) != 0) {
-		address = OS.gtk_entry_get_text (handle);
-	} else {
-		byte [] start =  new byte [ITER_SIZEOF];
-		byte [] end =  new byte [ITER_SIZEOF];
-		OS.gtk_text_buffer_get_bounds (bufferHandle, start, end);
-		address = OS.gtk_text_buffer_get_text (bufferHandle, start, end, true);
-	}
-	if (address == 0) return "";
-	int length = OS.strlen (address);
-	byte [] buffer = new byte [length];
-	OS.memmove (buffer, address, length);
-	if ((style & SWT.MULTI) != 0) OS.g_free (address);
-	return new String (Converter.mbcsToWcs (null, buffer));
+	return new String (getTextChars());
 }
 
 /**
@@ -1020,27 +1029,54 @@ public String getText () {
 public String getText (int start, int end) {
 	checkWidget ();
 	if (!(start <= end && 0 <= end)) return "";
+	String str = getText ();
+	int length = str.length ();
+	end = Math.min (end, length - 1);
+	if (start > end) return "";
+	start = Math.max (0, start);
+	/*
+	* NOTE: The current implementation uses substring ()
+	* which can reference a potentially large character
+	* array.
+	*/
+	return str.substring (start, end + 1);
+}
+
+/**
+ * Returns the widget's text as a character array.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * a zero-length array if this has never been set.
+ * </p>
+ *
+ * @return a character array that contains the widget's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setTextChars(char[])
+ *
+ * @since 3.7
+ */
+public char [] getTextChars () {
+	checkWidget ();
 	int /*long*/ address;
 	if ((style & SWT.SINGLE) != 0) {
-		start = Math.max (0, start);
-		address = OS.gtk_editable_get_chars (handle, start, end + 1);
+		address = OS.gtk_entry_get_text (handle);
 	} else {
-		int length = OS.gtk_text_buffer_get_char_count (bufferHandle);
-		end = Math.min (end, length - 1);
-		if (start > end) return "";
-		start = Math.max (0, start);
-		byte [] startIter =  new byte [ITER_SIZEOF];
-		byte [] endIter =  new byte [ITER_SIZEOF];
-		OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, startIter, start);
-		OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, endIter, end + 1);
-		address = OS.gtk_text_buffer_get_text (bufferHandle, startIter, endIter, true);
+		byte [] start =  new byte [ITER_SIZEOF];
+		byte [] end =  new byte [ITER_SIZEOF];
+		OS.gtk_text_buffer_get_bounds (bufferHandle, start, end);
+		address = OS.gtk_text_buffer_get_text (bufferHandle, start, end, true);
 	}
-	if (address == 0) error (SWT.ERROR_CANNOT_GET_TEXT);
+	if (address == 0) return new char[0];
 	int length = OS.strlen (address);
 	byte [] buffer = new byte [length];
 	OS.memmove (buffer, address, length);
-	OS.g_free (address);
-	return new String (Converter.mbcsToWcs (null, buffer));
+	if ((style & SWT.MULTI) != 0) OS.g_free (address);
+	return Converter.mbcsToWcs (null, buffer);
 }
 
 /**
@@ -1170,7 +1206,7 @@ int /*long*/ gtk_changed (int /*long*/ widget) {
 	if ((style & SWT.SEARCH) != 0) {
 		if ((style & SWT.ICON_CANCEL) != 0) {
 			int /*long*/ ptr = OS.gtk_entry_get_text (handle);
-			OS.gtk_entry_set_icon_sensitive (handle, OS.GTK_ENTRY_ICON_SECONDARY, OS.g_utf8_strlen (ptr, -1) > 0);
+			OS.gtk_entry_set_icon_sensitive (handle, OS.GTK_ENTRY_ICON_SECONDARY, OS.g_utf16_strlen (ptr, -1) > 0);
 		}
 	}
 	return 0;
@@ -1226,6 +1262,12 @@ int /*long*/ gtk_delete_range (int /*long*/ widget, int /*long*/ iter1, int /*lo
 	OS.memmove (endIter, iter2, endIter.length);
 	int start = OS.gtk_text_iter_get_offset (startIter);
 	int end = OS.gtk_text_iter_get_offset (endIter);
+	byte [] zero = new byte [ITER_SIZEOF];
+	OS.gtk_text_buffer_get_iter_at_offset(bufferHandle, zero, 0);
+	int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, zero, endIter, true);
+	start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start);
+	end = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end);
+	OS.g_free (ptr);
 	String newText = verifyText ("", start, end);
 	if (newText == null) {
 		/* Remember the selection when the text was deleted */
@@ -1256,8 +1298,11 @@ int /*long*/ gtk_delete_range (int /*long*/ widget, int /*long*/ iter1, int /*lo
 
 int /*long*/ gtk_delete_text (int /*long*/ widget, int /*long*/ start_pos, int /*long*/ end_pos) {
 	if (!hooks (SWT.Verify) && !filters (SWT.Verify)) return 0;
-	if (end_pos == -1) end_pos = OS.g_utf8_strlen (OS.gtk_entry_get_text (handle), -1);
-	String newText = verifyText ("", (int)/*64*/start_pos, (int)/*64*/end_pos);
+	int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+	if (end_pos == -1) end_pos = OS.g_utf8_strlen (ptr, -1);
+	int start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start_pos);
+	int end = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end_pos);
+	String newText = verifyText ("", start, end);
 	if (newText == null) {
 		/* Remember the selection when the text was deleted */
 		int [] newStart = new int [1], newEnd = new int [1];
@@ -1408,10 +1453,8 @@ int /*long*/ gtk_insert_text (int /*long*/ widget, int /*long*/ new_text, int /*
 	String oldText = new String (Converter.mbcsToWcs (null, buffer));
 	int [] pos = new int [1];
 	OS.memmove (pos, position, 4);
-	if (pos [0] == -1) {
-		int /*long*/ ptr = OS.gtk_entry_get_text (handle);
-		pos [0] = (int)/*64*/OS.g_utf8_strlen (ptr, -1);
-	}
+	int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+	if (pos [0] == -1) pos [0] = (int)/*64*/OS.g_utf8_strlen (ptr, -1);
 	/* Use the selection when the text was deleted */
 	int start = pos [0], end = pos [0];
 	if (fixStart != -1 && fixEnd != -1) {
@@ -1419,6 +1462,8 @@ int /*long*/ gtk_insert_text (int /*long*/ widget, int /*long*/ new_text, int /*
 		end = fixEnd;
 		fixStart = fixEnd = -1;
 	}
+	start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start);
+	end = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end);
 	String newText = verifyText (oldText, start, end);
 	if (newText != oldText) {
 		int [] newStart = new int [1], newEnd = new int [1];
@@ -1475,6 +1520,12 @@ int /*long*/ gtk_text_buffer_insert_text (int /*long*/ widget, int /*long*/ iter
 		end = fixEnd;
 		fixStart = fixEnd = -1;
 	}
+	byte [] zero = new byte [ITER_SIZEOF];
+	OS.gtk_text_buffer_get_iter_at_offset(bufferHandle, zero, 0);
+	int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, zero, position, true);
+	start = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, start);
+	end = (int)/*64*/OS.g_utf8_offset_to_utf16_offset (ptr, end);
+	OS.g_free(ptr);
 	byte [] buffer = new byte [(int)/*64*/length];
 	OS.memmove (buffer, text, buffer.length);
 	String oldText = new String (Converter.mbcsToWcs (null, buffer));
@@ -1895,11 +1946,18 @@ public void setOrientation (int orientation) {
 public void setSelection (int start) {
 	checkWidget ();
 	if ((style & SWT.SINGLE) != 0) {
+		int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+		start = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, start);
 		OS.gtk_editable_set_position (handle, start);
 	} else {
-		byte [] position =  new byte [ITER_SIZEOF];
-		OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, position, start);
-		OS.gtk_text_buffer_place_cursor (bufferHandle, position);
+		byte [] startIter =  new byte [ITER_SIZEOF];
+		byte [] endIter =  new byte [ITER_SIZEOF];
+		OS.gtk_text_buffer_get_bounds (bufferHandle, startIter, endIter);
+		int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, startIter, endIter, true);
+		start = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, start);
+		OS.g_free (ptr);
+		OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, startIter, start);
+		OS.gtk_text_buffer_place_cursor (bufferHandle, startIter);
 		int /*long*/ mark = OS.gtk_text_buffer_get_insert (bufferHandle);
 		OS.gtk_text_view_scroll_mark_onscreen (handle, mark);
 	}
@@ -1932,12 +1990,20 @@ public void setSelection (int start) {
  */
 public void setSelection (int start, int end) {
 	checkWidget ();
-	if ((style & SWT.SINGLE) != 0) { 
+	if ((style & SWT.SINGLE) != 0) {
+		int /*long*/ ptr = OS.gtk_entry_get_text (handle);
+		start = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, start);
+		end = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, end);
 		OS.gtk_editable_set_position (handle, start);
 		OS.gtk_editable_select_region (handle, start, end);
 	} else {
 		byte [] startIter =  new byte [ITER_SIZEOF];
 		byte [] endIter =  new byte [ITER_SIZEOF];
+		OS.gtk_text_buffer_get_bounds (bufferHandle, startIter, endIter);
+		int /*long*/ ptr = OS.gtk_text_buffer_get_text (bufferHandle, startIter, endIter, true);
+		start = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, start);
+		end = (int)/*64*/OS.g_utf16_offset_to_utf8_offset (ptr, end);
+		OS.g_free (ptr);
 		OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, startIter, start);
 		OS.gtk_text_buffer_get_iter_at_offset (bufferHandle, endIter, end);
 		int /*long*/ insertMark = OS.gtk_text_buffer_get_insert (bufferHandle);
@@ -2040,8 +2106,50 @@ public void setText (String string) {
 		string = verifyText (string, 0, getCharCount ());
 		if (string == null) return;
 	}
+	char [] text = new char [string.length()];
+	string.getChars(0, text.length, text, 0);
+	setText (text);
+}
+
+/**
+ * Sets the contents of the receiver to the characters in the array. If the receiver
+ * has style <code>SWT.SINGLE</code> and the argument contains multiple lines of text
+ * then the result of this operation is undefined and may vary between platforms.
+ *
+ * @param text a character array that contains the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getTextChars()
+ *
+ * @since 3.7
+ */
+public void setTextChars (char [] text) {
+	checkWidget ();
+	if (text == null) error (SWT.ERROR_NULL_ARGUMENT);
+	/*
+	* Feature in gtk.  When text is set in gtk, separate events are fired for the deletion and 
+	* insertion of the text.  This is not wrong, but is inconsistent with other platforms.  The
+	* fix is to block the firing of these events and fire them ourselves in a consistent manner. 
+	*/
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		String string = verifyText (new String(text), 0, getCharCount ());
+		if (string == null) return;
+		text = new char [string.length()];
+		string.getChars (0, text.length, text, 0);
+	}
+	setText (text);
+}
+
+void setText (char [] text) {
 	if ((style & SWT.SINGLE) != 0) {
-		byte [] buffer = Converter.wcsToMbcs (null, string, true);
+		byte [] buffer = Converter.wcsToMbcs (null, text, true);
 		OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED);
 		OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, DELETE_TEXT);
 		OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, INSERT_TEXT);
@@ -2050,7 +2158,7 @@ public void setText (String string) {
 		OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, DELETE_TEXT);
 		OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, INSERT_TEXT);
 	} else {
-		byte [] buffer = Converter.wcsToMbcs (null, string, false);
+		byte [] buffer = Converter.wcsToMbcs (null, text, false);
 		byte [] position =  new byte [ITER_SIZEOF];
 		OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, CHANGED);
 		OS.g_signal_handlers_block_matched (bufferHandle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, DELETE_RANGE);
@@ -2065,6 +2173,11 @@ public void setText (String string) {
 		OS.gtk_text_view_scroll_mark_onscreen (handle, mark);
 	}
 	sendEvent (SWT.Modify);
+	if ((style & SWT.SEARCH) != 0) {
+		if ((style & SWT.ICON_CANCEL) != 0) {
+			OS.gtk_entry_set_icon_sensitive (handle, OS.GTK_ENTRY_ICON_SECONDARY, true);
+		}
+	}
 }
 
 /**
@@ -2175,7 +2288,7 @@ int traversalCode (int key, GdkEventKey event) {
 }
 
 String verifyText (String string, int start, int end) {
-	if (string.length () == 0 && start == end) return null;
+	if (string != null && string.length () == 0 && start == end) return null;
 	Event event = new Event ();
 	event.text = string;
 	event.start = start;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java
index a87565f..420ab48 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -532,6 +532,14 @@ void setForegroundColor (GdkColor color) {
 	}
 }
 
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	ToolItem [] items = _getItems ();
+	for (int i = 0; i < items.length; i++) {
+		items[i].setOrientation (create);
+	}
+}
+
 /*public*/ void setTabItemList (ToolItem [] tabList) {
 	checkWidget ();
 	if (tabList != null) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java
index 4c5c7d9..681e6a5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -880,6 +880,8 @@ boolean setFocus () {
 	if (!OS.gtk_widget_get_child_visible (handle)) return false;
 	OS.GTK_WIDGET_SET_FLAGS (handle, OS.GTK_CAN_FOCUS);
 	OS.gtk_widget_grab_focus (handle);
+	// widget could be disposed at this point
+	if (isDisposed ()) return false;
 	boolean result = OS.gtk_widget_is_focus (handle);
 	if (!result) OS.GTK_WIDGET_UNSET_FLAGS (handle, OS.GTK_CAN_FOCUS);
 	return result;
@@ -954,15 +956,16 @@ public void setImage (Image image) {
 	parent.relayout ();
 }
 
-void setOrientation () {
-	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
-		if (handle != 0) OS.gtk_widget_set_direction (handle, OS.GTK_TEXT_DIR_RTL);
-		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, OS.GTK_TEXT_DIR_RTL);
-		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, OS.GTK_TEXT_DIR_RTL);
-		if (separatorHandle != 0) OS.gtk_widget_set_direction (separatorHandle, OS.GTK_TEXT_DIR_RTL);
-		if (arrowHandle != 0) OS.gtk_widget_set_direction (arrowHandle, OS.GTK_TEXT_DIR_RTL);
-		if (boxHandle != 0) OS.gtk_widget_set_direction (boxHandle, OS.GTK_TEXT_DIR_RTL);
-		if (arrowBoxHandle != 0) OS.gtk_widget_set_direction (arrowBoxHandle, OS.GTK_TEXT_DIR_RTL);
+void setOrientation (boolean create) {
+	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
+		int dir = (parent.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+		if (handle != 0) OS.gtk_widget_set_direction (handle, dir);
+		if (labelHandle != 0) OS.gtk_widget_set_direction (labelHandle, dir);
+		if (imageHandle != 0) OS.gtk_widget_set_direction (imageHandle, dir);
+		if (separatorHandle != 0) OS.gtk_widget_set_direction (separatorHandle, dir);
+		if (arrowHandle != 0) OS.gtk_widget_set_direction (arrowHandle, dir);
+		if (boxHandle != 0) OS.gtk_widget_set_direction (boxHandle, dir);
+		if (arrowBoxHandle != 0) OS.gtk_widget_set_direction (arrowBoxHandle, dir);
 	}
 }
 
@@ -1080,7 +1083,14 @@ void setToolTipText (Shell shell, String newString) {
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
- * @param width the new width
+ * @param width the new width. If the new value is <code>SWT.DEFAULT</code>,
+ * the width is a fixed-width area whose amount is determined by the platform.
+ * If the new value is 0 a vertical or horizontal line will be drawn, depending
+ * on the setting of the corresponding style bit (<code>SWT.VERTICAL</code> or 
+ * <code>SWT.HORIZONTAL</code>). If the new value is <code>SWT.SEPARATOR_FILL</code>
+ * a variable-width space is inserted that acts as a spring between the two adjoining
+ * items which will push them out to the extent of the containing ToolBar.
+ * 
  *
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java
index 34b765f..ebc7219 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java	
@@ -31,8 +31,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION,
  * and ICON_WARNING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#tooltips">Tool Tips snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java
index ca2e9be..b9558a4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TrayItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -329,7 +329,15 @@ int /*long*/ gtk_size_allocate (int /*long*/ widget, int /*long*/ allocation) {
 }
 
 int /*long*/ gtk_status_icon_popup_menu (int /*long*/ widget, int /*long*/ button, int /*long*/ activate_time) {
+	/*
+	* GTK provides a MenuPositionFunc for GtkStatusIcon in order
+	* to set the popup-menu aligned to the tray.
+	*/
+	Display display = this.display;
+	display.currentTrayItem = this;
 	sendEvent (SWT.MenuDetect);
+	if (!isDisposed ()) display.runPopups();
+	display.currentTrayItem = null;
 	return 0;
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
index db619d7..5136227 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1108,7 +1108,7 @@ void destroyItem (TreeItem item) {
 	modelChanged = true;
 }
 
-boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
+boolean dragDetect (int x, int y, boolean filter, boolean dragOnTimeout, boolean [] consume) {
 	boolean selected = false;
 	if (filter) {
 		int /*long*/ [] path = new int /*long*/ [1];
@@ -1122,7 +1122,7 @@ boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
 			return false;
 		}
 	}
-	boolean dragDetect = super.dragDetect (x, y, filter, consume);
+	boolean dragDetect = super.dragDetect (x, y, filter, false, consume);
 	if (dragDetect && selected && consume != null) consume [0] = true;
 	return dragDetect;
 }
@@ -1499,8 +1499,11 @@ public TreeItem getItem (Point point) {
 	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
 	int /*long*/ [] path = new int /*long*/ [1];
 	OS.gtk_widget_realize (handle);
+	int x = point.x;
+	int y = point.y;
+	if ((style & SWT.MIRRORED) != 0) x = getClientWidth () - x;
 	int /*long*/ [] columnHandle = new int /*long*/ [1];
-	if (!OS.gtk_tree_view_get_path_at_pos (handle, point.x, point.y, path, columnHandle, null, null)) return null;
+	if (!OS.gtk_tree_view_get_path_at_pos (handle, x, y, path, columnHandle, null, null)) return null;
 	if (path [0] == 0) return null;
 	TreeItem item = null;
 	int /*long*/ iter = OS.g_malloc (OS.GtkTreeIter_sizeof ());
@@ -1513,9 +1516,12 @@ public TreeItem getItem (Point point) {
 			if (OS.GTK_VERSION < OS.VERSION (2, 8, 18)) {
 				OS.gtk_widget_style_get (handle, OS.expander_size, buffer, 0);
 				int expanderSize = buffer [0] + TreeItem.EXPANDER_EXTRA_PADDING;
-				overExpander = point.x < rect.x + expanderSize;
+				rect.x += expanderSize;
+			}
+			if ((style & SWT.MIRRORED) != 0) {
+				overExpander = x > rect.x + rect.width;
 			} else {
-				overExpander = point.x < rect.x;
+				overExpander = x < rect.x;
 			}
 		}
 		if (!overExpander) {
@@ -1931,6 +1937,25 @@ int /*long*/ gtk_changed (int /*long*/ widget) {
 	return 0;
 }
 
+int /*long*/ gtk_event_after (int /*long*/ widget, int /*long*/ gdkEvent) {
+	switch (OS.GDK_EVENT_TYPE (gdkEvent)) {
+		case OS.GDK_EXPOSE: {
+			/*
+			* Bug in GTK. SWT connects the expose-event 'after' the default 
+			* handler of the signal. If the tree has no children, then GTK 
+			* sends expose signal only 'before' the default signal handler.
+			* The fix is to detect this case in 'event_after' and send the
+			* expose event.
+			*/
+			if (OS.gtk_tree_model_iter_n_children (modelHandle, 0) == 0) {
+				gtk_expose_event (widget, gdkEvent);
+			}
+			break;
+		}
+	}
+	return super.gtk_event_after (widget, gdkEvent);
+}
+
 int /*long*/ gtk_expand_collapse_cursor_row (int /*long*/ widget, int /*long*/ logical, int /*long*/ expand, int /*long*/ open_all) {
 	// FIXME - this flag is never cleared.  It should be cleared when the expand all operation completes.
 	if (expand != 0 && open_all != 0) expandAll = true;
@@ -2564,6 +2589,12 @@ int /*long*/ rendererGetSizeProc (int /*long*/ cell, int /*long*/ widget, int /*
 				event.gc = gc;
 				event.width = contentWidth [0];
 				event.height = contentHeight [0];
+				int /*long*/ path = OS.gtk_tree_model_get_path (modelHandle, iter);
+				int /*long*/ selection = OS.gtk_tree_view_get_selection (handle);
+				if (OS.gtk_tree_selection_path_is_selected (selection, path)) {
+					event.detail = SWT.SELECTED;
+				}
+				OS.gtk_tree_path_free (path);
 				sendEvent (SWT.MeasureItem, event);
 				gc.dispose ();
 				contentWidth [0] = event.width - imageWidth;
@@ -3063,6 +3094,20 @@ public void setLinesVisible (boolean show) {
 	}
 }
 
+void setOrientation (boolean create) {
+	super.setOrientation (create);
+	if (items != null) {
+		for (int i=0; i<items.length; i++) {
+			if (items[i] != null) items[i].setOrientation (create);
+		}
+	}
+	if (columns != null) {
+		for (int i=0; i<columns.length; i++) {
+			if (columns[i] != null) columns[i].setOrientation (create);
+		}
+	}
+}
+
 void setParentBackground () {
 	ownerDraw = true;
 	recreateRenderers ();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java
index 115c7f8..8e835e8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TreeColumn.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -194,7 +194,7 @@ protected void checkSubclass () {
 
 void createWidget (int index) {
 	parent.createItem (this, index);
-	setOrientation ();
+	setOrientation (true);
 	hookEvents ();
 	register ();
 	text = "";
@@ -592,11 +592,12 @@ public void setMoveable (boolean moveable) {
 	OS.gtk_tree_view_column_set_reorderable (handle, moveable);
 }
 
-void setOrientation() {
-	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
+void setOrientation (boolean create) {
+	if ((parent.style & SWT.RIGHT_TO_LEFT) != 0 || !create) {
 		if (buttonHandle != 0) {
-			OS.gtk_widget_set_direction (buttonHandle, OS.GTK_TEXT_DIR_RTL);
-			OS.gtk_container_forall (buttonHandle, display.setDirectionProc, OS.GTK_TEXT_DIR_RTL);	
+			int dir = (parent.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.GTK_TEXT_DIR_RTL : OS.GTK_TEXT_DIR_LTR;
+			OS.gtk_widget_set_direction (buttonHandle, dir);
+			OS.gtk_container_forall (buttonHandle, display.setDirectionProc, dir);
 		}
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
index 48e0601..6285902 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -410,7 +410,7 @@ void createHandle (int index) {
 
 void createWidget (int index) {
 	createHandle (index);
-	setOrientation ();
+	setOrientation (true);
 	hookEvents ();
 	register ();
 }
@@ -1287,7 +1287,7 @@ void sendEvent (int eventType, Event event, boolean send) {
 
 boolean sendKeyEvent (int type, GdkEventKey keyEvent) {
 	int length = keyEvent.length;
-	if (keyEvent.string == 0 || OS.g_utf8_strlen (keyEvent.string, length) <= 1) {
+	if (keyEvent.string == 0 || OS.g_utf16_strlen (keyEvent.string, length) <= 1) {
 		Event event = new Event ();
 		event.time = keyEvent.time;
 		if (!setKeyState (event, keyEvent)) return true;
@@ -1550,7 +1550,7 @@ boolean setInputState (Event event, int state) {
 }
 
 boolean setKeyState (Event event, GdkEventKey keyEvent) {
-	if (keyEvent.string != 0 && OS.g_utf8_strlen (keyEvent.string, keyEvent.length) > 1) return false;
+	if (keyEvent.string != 0 && OS.g_utf16_strlen (keyEvent.string, keyEvent.length) > 1) return false;
 	boolean isNull = false;
 	event.keyCode = Display.translateKey (keyEvent.keyval);
 	switch (keyEvent.keyval) {
@@ -1633,7 +1633,7 @@ void setLocationState (Event event, GdkEventKey keyEvent) {
 	}
 }
 
-void setOrientation () {
+void setOrientation (boolean create) {
 }
 
 boolean setTabGroupFocus (boolean next) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Color.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Color.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Cursor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Cursor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Device.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Device.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/DeviceData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/DeviceData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Font.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Font.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/FontData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/FontMetrics.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/FontMetrics.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/GC.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/GC.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/GCData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/GCData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Image.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Image.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Region.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/Region.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/TextLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/TextLayout.java
index 2e42756..aba9a6e 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/TextLayout.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/graphics/TextLayout.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -364,7 +364,7 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 	int length = text.length(); 
 	if (length == 0 && flags == 0) return;
 	boolean hasSelection = selectionStart <= selectionEnd && selectionStart != -1 && selectionEnd != -1;
-	if (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0) {
+	if (hasSelection || ((flags & SWT.LAST_LINE_SELECTION) != 0 && (flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0)) {
 		selectionStart = Math.min(Math.max(0, selectionStart), length - 1);
 		selectionEnd = Math.min(Math.max(0, selectionEnd), length - 1);		
 		if (selectionForeground == null) selectionForeground = device.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT);
@@ -380,7 +380,7 @@ public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Colo
 		int drawY = y + lineY[line];
 		StyleItem[] lineRuns = runs[line];
 		int lineHeight = lineY[line+1] - lineY[line];
-		if (flags != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) {
+		if ((flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) {
 			boolean extent = false;
 			if (line == runs.length - 1 && (flags & SWT.LAST_LINE_SELECTION) != 0) {
 				extent = true;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/internal/Converter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/internal/Converter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Button.java
old mode 100644
new mode 100755
index 5522a1b..a94ca39
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Button.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Button.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,8 +36,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
  * when the ARROW style is specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
@@ -144,20 +143,47 @@ void _setImage (Image image) {
 	OS.XtSetValues (handle, argList, argList.length / 2);
 }
 void _setText (String string) {
-	char [] text = new char [string.length ()];
-	string.getChars (0, text.length, text, 0);
-	int mnemonic = fixMnemonic (text);
-	byte [] buffer = Converter.wcsToMbcs (getCodePage (), text, true);
-	int xmString = OS.XmStringParseText (
-		buffer,
-		0,
-		OS.XmFONTLIST_DEFAULT_TAG, 
-		OS.XmCHARSET_TEXT, 
-		null,
-		0,
-		0);	
+	/* Strip out mnemonic marker symbols, and remember the mnemonic. */
+	char [] unicode = new char [string.length ()];
+	string.getChars (0, unicode.length, unicode, 0);
+	int mnemonic = fixMnemonic (unicode);
+	
+	/* Wrap the text if necessary, and convert to mbcs. */
+	byte [] buffer = null;
+	if ((style & SWT.WRAP) != 0) {
+		int [] argList = {
+			OS.XmNwidth, 0,        /* 1 */
+			OS.XmNmarginWidth, 0,  /* 3 */
+			OS.XmNmarginLeft, 0,   /* 5 */
+			OS.XmNmarginRight, 0,  /* 7 */
+			OS.XmNspacing, 0,      /* 9 */
+			OS.XmNdefaultButtonShadowThickness, 0, /* 11 */
+		};
+		OS.XtGetValues (handle, argList, argList.length / 2);
+		int width = argList [1] - argList [3] * 2 - argList[5] - argList[7] - argList[9] - argList[11] * 2;
+		if (mnemonic != 0) string = new String (unicode);
+		string = display.wrapText (string, font, width);
+		buffer = Converter.wcsToMbcs (getCodePage (), string, true);
+	} else {
+		buffer = Converter.wcsToMbcs (getCodePage (), unicode, true);
+	}
+	
+	int xmString = OS.XmStringGenerate(buffer, null, OS.XmCHARSET_TEXT, null);
 	if (xmString == 0) error (SWT.ERROR_CANNOT_SET_TEXT);
-	if (mnemonic == 0) mnemonic = OS.XK_VoidSymbol;
+		
+	/*
+	* Bug in Solaris.  If a mnemonic is defined to be a character
+	* that appears in a string in a position that follows a '\n',
+	* Solaris segment faults.  For example, a label with text
+	* "Hello\nthe&re" would GP since "r" appears after '\n'.
+	*
+	* The fix is to remove mnemonics from labels that contain
+	* '\n', which is fine since such labels generally just act
+	* as descriptive texts anyways.
+	*/ 
+	if (mnemonic == 0 || string.indexOf ('\n') != -1) {
+		mnemonic = OS.XK_VoidSymbol;
+	}
 	int [] argList = {
 		OS.XmNlabelType, OS.XmSTRING,
 		OS.XmNlabelString, xmString,
@@ -233,24 +259,52 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		if (hHint != SWT.DEFAULT) height = hHint + (border * 2);
 		return new Point (width, height);
 	}
-	XtWidgetGeometry result = new XtWidgetGeometry ();
-	result.request_mode = OS.CWWidth | OS.CWHeight;
-	int [] argList2 = {OS.XmNrecomputeSize, 1};
-	OS.XtSetValues(handle, argList2, argList2.length / 2);
-	OS.XtQueryGeometry (handle, null, result);
-	int [] argList3 = {OS.XmNrecomputeSize, 0};
-	OS.XtSetValues(handle, argList3, argList3.length / 2);
-	width += result.width;
-	height += result.height;
+	int [] argList = {OS.XmNlabelType, 0};
+	OS.XtGetValues (handle, argList, argList.length / 2);
+	int labelType = argList [1];
+	if (labelType == OS.XmSTRING && (style & SWT.WRAP) != 0) {
+		/* If we are wrapping text, calculate the height based on wHint. */
+		int [] argList2 = {
+			OS.XmNmarginTop, 0,     /* 1 */
+			OS.XmNmarginBottom, 0,  /* 3 */
+			OS.XmNmarginHeight, 0,  /* 5 */
+			OS.XmNmarginWidth, 0,   /* 7 */
+			OS.XmNmarginLeft, 0,    /* 9 */
+			OS.XmNmarginRight, 0,   /* 11 */
+			OS.XmNspacing, 0, /* 13 */
+			OS.XmNdefaultButtonShadowThickness, 0, /* 15 */
+		};
+		OS.XtGetValues (handle, argList2, argList2.length / 2);
+		int trimWidth = (argList2 [7] * 2) + argList2 [9] + argList2 [11] + argList2 [13] + 2 * border + 2 * argList2[15];
+		String string = text;
+		if (wHint != SWT.DEFAULT) {
+			string = display.wrapText (string, font, wHint - trimWidth);
+		}
+		GC gc = new GC (this);
+		Point extent = gc.textExtent (string);
+		gc.dispose ();
+		height = extent.y + argList2 [1] + argList2 [3] + (argList2 [5] * 2) + (border * 2);
+		if (wHint == SWT.DEFAULT) {
+			width = extent.x + trimWidth;
+		}
+	} else {
+		XtWidgetGeometry result = new XtWidgetGeometry ();
+		result.request_mode = OS.CWWidth | OS.CWHeight;
+		int [] argList2 = {OS.XmNrecomputeSize, 1};
+		OS.XtSetValues(handle, argList2, argList2.length / 2);
+		OS.XtQueryGeometry (handle, null, result);
+		int [] argList3 = {OS.XmNrecomputeSize, 0};
+		OS.XtSetValues(handle, argList3, argList3.length / 2);
+		width += result.width;
+		height += result.height;
+	}
 	/*
 	 * Feature in Motif. If a button's labelType is XmSTRING but it
 	 * has no label set into it yet, recomputing the size will
 	 * not take into account the height of the font, as we would
 	 * like it to. Take care of this case.
 	 */
-	int [] argList = {OS.XmNlabelType, 0};
-	OS.XtGetValues (handle, argList, argList.length / 2);
-	if (argList [1] == OS.XmSTRING) {
+	if (labelType == OS.XmSTRING) {
 		int [] argList1 = {OS.XmNlabelString, 0};
 		OS.XtGetValues (handle, argList1, argList1.length / 2);
 		int xmString = argList1 [1];
@@ -656,6 +710,16 @@ void setBackgroundPixel (int pixel) {
 	if (argList [1] == OS.XmPIXMAP) _setImage (image);
 }
 
+boolean setBounds (int x, int y, int width, int height, boolean move, boolean resize) {
+	boolean changed = super.setBounds (x, y, width, height, move, resize);
+	if (changed && resize && (style & SWT.WRAP) != 0) {
+		int [] argList = {OS.XmNlabelType, 0,};
+		OS.XtGetValues (handle, argList, argList.length / 2);
+		if (argList [1] == OS.XmSTRING) _setText (text);
+	} 
+	return changed;
+}
+
 void setDefault (boolean value) {
 	if ((style & SWT.PUSH) == 0) return;
 	if (getShell ().parent == null) return;
@@ -685,7 +749,12 @@ public void setFont (Font font) {
 		OS.XmStringFree (xmString);
 	}
 	super.setFont (font);
-	if (fixString) OS.XtSetValues (handle, argList1, argList1.length / 2);	
+	if (fixString) OS.XtSetValues (handle, argList1, argList1.length / 2);
+	if ((style & SWT.WRAP) != 0) {
+		int [] argList = {OS.XmNlabelType, 0,};
+		OS.XtGetValues (handle, argList, argList.length / 2);
+		if (argList [1] == OS.XmSTRING) _setText (text);
+	} 
 }
 /**
  * Sets the grayed state of the receiver.  This state change 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Canvas.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Canvas.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Caret.java
old mode 100644
new mode 100755
index f875f34..94a1591
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Caret.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Caret.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ColorDialog.java
old mode 100644
new mode 100755
index 51be4bf..762702f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ColorDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ColorDialog.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.layout.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Combo.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Composite.java
old mode 100644
new mode 100755
index ad42e78..71d6ef0
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Composite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Composite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -157,9 +157,9 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		}
 	} else {
 		size = minimumSize (wHint, hHint, changed);
+		if (size.x == 0) size.x = DEFAULT_WIDTH;
+		if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	}
-	if (size.x == 0) size.x = DEFAULT_WIDTH;
-	if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) size.x = wHint;
 	if (hHint != SWT.DEFAULT) size.y = hHint;
 	Rectangle trim = computeTrim (0, 0, size.x, size.y);
@@ -932,11 +932,12 @@ void markLayout (boolean changed, boolean all) {
 }
 Point minimumSize (int wHint, int hHint, boolean changed) {
 	Control [] children = _getChildren ();
+	Rectangle clientArea = getClientArea ();
 	int width = 0, height = 0;
 	for (int i=0; i<children.length; i++) {
 		Rectangle rect = children [i].getBounds ();
-		width = Math.max (width, rect.x + rect.width);
-		height = Math.max (height, rect.y + rect.height);
+		width = Math.max (width, rect.x - clientArea.x + rect.width);
+		height = Math.max (height, rect.y - clientArea.y + rect.height);
 	}
 	return new Point (width, height);
 }
@@ -1305,6 +1306,7 @@ public void setLayout (Layout layout) {
  * @since 3.1
  */
 public void setLayoutDeferred (boolean defer) {
+	checkWidget();
 	if (!defer) {
 		if (--layoutCount == 0) {
 			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Control.java
old mode 100644
new mode 100755
index 7a704b3..13f9e37
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Control.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Control.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -172,6 +172,40 @@ public void addFocusListener(FocusListener listener) {
 }
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when gesture events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>GestureListener</code> interface.
+ * <p>
+ * NOTE: If <code>setTouchEnabled(true)</code> has previously been
+ * invoked on the receiver then <code>setTouchEnabled(false)</code>
+ * must be invoked on it to specify that gesture events should be
+ * sent instead of touch events.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #removeGestureListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Gesture, typedListener);
+}
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when help events are generated for the control,
  * by sending it one of the messages defined in the
  * <code>HelpListener</code> interface.
@@ -392,6 +426,39 @@ public void addPaintListener(PaintListener listener) {
 }
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when touch events occur, by sending it
+ * one of the messages defined in the <code>TouchListener</code>
+ * interface.
+ * <p>
+ * NOTE: You must also call <code>setTouchEnabled(true)</code> to 
+ * specify that touch events should be sent, which will cause gesture
+ * events to not be sent.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #removeTouchListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addTouchListener (TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Touch,typedListener);
+}
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when traversal events occur, by sending it
  * one of the messages defined in the <code>TraverseListener</code>
  * interface.
@@ -810,8 +877,11 @@ public boolean forceFocus () {
 
 /**
  * Returns the accessible object for the receiver.
+ * <p>
  * If this is the first time this object is requested,
- * then the object is created and returned.
+ * then the object is created and returned. The object
+ * returned by getAccessible() does not need to be disposed.
+ * </p>
  *
  * @return the accessible object
  *
@@ -1214,6 +1284,25 @@ int getNavigationType () {
 	OS.XtGetValues (handle, argList, argList.length / 2);
 	return argList [1];
 }
+
+/**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
 /**
  * Returns the receiver's parent, which must be a <code>Composite</code>
  * or null when the receiver is a shell that was created with null or
@@ -1319,6 +1408,30 @@ public String getToolTipText () {
 	return toolTipText;
 }
 /**
+ * Returns <code>true</code> if this control is set to send touch events, or
+ * <code>false</code> if it is set to send gesture events instead.  This method
+ * also returns <code>false</code> if a touch-based input device is not detected
+ * (this can be determined with <code>Display#getTouchEnabled()</code>).  Use
+ * {@link #setTouchEnabled(boolean)} to switch the events that a control sends
+ * between touch events and gesture events.
+ *
+ * @return <code>true</code> if the control is set to send touch events, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTouchEnabled
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkWidget();
+	return false;
+}
+/**
  * Returns <code>true</code> if the receiver is visible, and
  * <code>false</code> otherwise.
  * <p>
@@ -1927,6 +2040,31 @@ public void removeFocusListener(FocusListener listener) {
 }
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when gesture events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #addGestureListener
+ * 
+ * @since 3.7
+ */
+public void removeGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Gesture, listener);
+}
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when the help events are generated for the control.
  *
  * @param listener the listener which should no longer be notified
@@ -2118,7 +2256,33 @@ public void removePaintListener(PaintListener listener) {
 	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
 	if (eventTable == null) return;
 	eventTable.unhook(SWT.Paint, listener);
-}/**
+}
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when touch events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #addTouchListener
+ * 
+ * @since 3.7
+ */
+public void removeTouchListener(TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Touch, listener);
+}
+/**
  * Removes the listener from the collection of listeners who will
  * be notified when traversal events occur.
  *
@@ -2772,6 +2936,25 @@ public void setMenu (Menu menu) {
 	}
 	this.menu = menu;
 }
+
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+}
+
 /**
  * Changes the parent of the widget to be the one provided if
  * the underlying operating system supports this feature.
@@ -2998,6 +3181,25 @@ public void setToolTipText (String string) {
 	display.setToolTipText (handle, toolTipText = string);
 }
 /**
+ * Sets whether this control should send touch events (by default controls do not).
+ * Setting this to <code>false</code> causes the receiver to send gesture events
+ * instead.  No exception is thrown if a touch-based input device is not
+ * detected (this can be determined with <code>Display#getTouchEnabled()</code>).
+ * 
+ * @param enabled the new touch-enabled state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public void setTouchEnabled(boolean enabled) {
+	checkWidget();
+}
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Decorations.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Decorations.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/DirectoryDialog.java
old mode 100644
new mode 100755
index 9d38b2a..fda36a8
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/DirectoryDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -26,8 +26,7 @@ import org.eclipse.swt.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Display.java
old mode 100644
new mode 100755
index 20bf390..18b4425
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Display.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Display.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1262,6 +1262,24 @@ public Shell getActiveShell () {
 	} while ((handle = OS.XtParent (handle)) != 0);
 	return null;
 }
+
+/**
+ * Returns the single instance of the application menu bar, or
+ * <code>null</code> if there is no application menu bar for the platform.
+ *
+ * @return the application menu bar, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getMenuBar () {
+	checkDevice ();
+	return null;
+}
+
 /**
  * Returns the display which the currently running thread is
  * the user-interface thread for, or null if the currently
@@ -1302,7 +1320,7 @@ int getCaretBlinkTime () {
  * over top of, or null if it is not currently over one of the
  * controls built by the currently running application.
  *
- * @return the control under the cursor
+ * @return the control under the cursor or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1490,7 +1508,7 @@ public int getDoubleClickTime () {
  * any of the controls built by the currently running
  * application.
  *
- * @return the control under the cursor
+ * @return the focus control or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1957,6 +1975,23 @@ public Image getSystemImage (int style) {
 	return Image.motif_new (this, SWT.ICON, imagePixmap, maskPixmap);
 }
 /**
+ * Returns the single instance of the system-provided menu for the application, or
+ * <code>null</code> on platforms where no menu is provided for the application.
+ *
+ * @return the system menu, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getSystemMenu () {
+	checkDevice();
+	return null;
+}
+/**
  * Returns the single instance of the system taskBar or null
  * when there is no system taskBar available for the platform.
  *
@@ -2003,6 +2038,23 @@ public Thread getThread () {
 		return thread;
 	}
 }
+/**	 
+ * Returns a boolean indicating whether a touch-aware input device is
+ * attached to the system and is ready for use.
+ *
+ * @return <code>true</code> if a touch-aware input device is detected, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkDevice();
+	return false;
+}
 Widget getWidget (int handle) {
 	if (handle == 0) return null;
 	if (OS.XtIsSubclass (handle, OS.shellWidgetClass ())) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FileDialog.java
old mode 100644
new mode 100755
index 363448a..7e27cc2
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FileDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FileDialog.java	
@@ -28,8 +28,7 @@ import org.eclipse.swt.*;
  * <p>
  * Note: Only one of the styles SAVE and OPEN may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FontDialog.java
old mode 100644
new mode 100755
index 7107e8e..dce45de
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FontDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/FontDialog.java	
@@ -27,8 +27,7 @@ import java.util.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Group.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Group.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Label.java
old mode 100644
new mode 100755
index 1a53672..871b944
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Label.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Label.java	
@@ -41,8 +41,7 @@ import org.eclipse.swt.graphics.*;
  * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
  * Only one of CENTER, LEFT and RIGHT may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/List.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/List.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Menu.java
old mode 100644
new mode 100755
index f9dcf01..2b8c9ab
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Menu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Menu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -513,6 +513,25 @@ String getNameText () {
 	}
 	return result;
 }
+
+/**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
 /**
  * Returns the receiver's parent, which must be a <code>Decorations</code>.
  *
@@ -870,6 +889,25 @@ public void setLocation (Point location) {
 	if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
 	setLocation (location.x, location.y);
 }
+
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7  
+ */
+public void setOrientation (int orientation) {
+    checkWidget ();
+}
+
 /**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MenuItem.java
old mode 100644
new mode 100755
index 5dc8c8a..541c645
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@ import org.eclipse.swt.events.*;
  * @noextend This class is not intended to be subclassed by clients.
  */
 public class MenuItem extends Item {
-	int accelerator;
+	int accelerator, userId;
 	Menu parent, menu;
 
 /**
@@ -375,6 +375,22 @@ public boolean getEnabled () {
 	return argList [1] != 0;
 }
 /**
+ * Gets the identifier associated with the receiver.
+ *
+ * @return the receiver's identifier
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getID () {
+	checkWidget();
+	return userId;
+}
+/**
  * Returns the receiver's cascade menu if it has one or null
  * if it does not. Only <code>CASCADE</code> menu items can have
  * a pull down menu. The sequence of key strokes, button presses 
@@ -689,6 +705,24 @@ public void setEnabled (boolean enabled) {
 	}
 }
 /**
+ * Sets the identifier associated with the receiver to the argument.
+ *
+ * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setID (int id) {
+	checkWidget();
+	if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+	userId = id;
+}
+/**
  * Sets the receiver's pull down menu to the argument.
  * Only <code>CASCADE</code> menu items can have a
  * pull down menu. The sequence of key strokes, button presses
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MessageBox.java
old mode 100644
new mode 100755
index a8d37cd..4592e11
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MessageBox.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/MessageBox.java	
@@ -32,8 +32,7 @@ import org.eclipse.swt.graphics.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
  * ICON_WARNING and ICON_WORKING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ProgressBar.java
old mode 100644
new mode 100755
index 3df6eef..c26c24f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ProgressBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ProgressBar.java	
@@ -28,8 +28,7 @@ import org.eclipse.swt.graphics.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Sash.java
old mode 100644
new mode 100755
index 711f9c3..c450826
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Sash.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Sash.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.events.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Scale.java
old mode 100644
new mode 100755
index bd9f4ef..ca86b07
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Scale.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Scale.java	
@@ -31,8 +31,7 @@ import org.eclipse.swt.graphics.*;
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ScrollBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ScrollBar.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Scrollable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Scrollable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Shell.java
old mode 100644
new mode 100755
index 744b821..2aacdfc
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Shell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Shell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -107,7 +107,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
  * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
  * </p><p>
- * IMPORTANT: This class is not intended to be subclassed.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see Decorations
@@ -115,6 +115,7 @@ import org.eclipse.swt.events.*;
  * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Shell extends Decorations {
 	int shellHandle, focusProxy;
@@ -1104,7 +1105,8 @@ public Point getMinimumSize () {
 /**
  * Gets the receiver's modified state.
  *
- * </ul>
+ * @return <code>true</code> if the receiver is marked as modified, or <code>false</code> otherwise
+ * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1118,9 +1120,9 @@ public boolean getModified () {
 }
 /** 
  * Returns the region that defines the shape of the shell,
- * or null if the shell has the default shape.
+ * or <code>null</code> if the shell has the default shape.
  *
- * @return the region that defines the shape of the shell (or null)
+ * @return the region that defines the shape of the shell, or <code>null</code>
  *	
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -1206,6 +1208,28 @@ public Point getSize () {
 	getBounds (null, size, null);
 	return size;
 }
+
+/**
+ * Returns a ToolBar object representing the tool bar that can be shown in the receiver's
+ * trim. This will return <code>null</code> if the platform does not support tool bars that
+ * are not part of the content area of the shell, or if the Shell's style does not support 
+ * having a tool bar. 
+ * <p>
+ * 
+ * @return a ToolBar object representing the Shell's tool bar, or <ocde>null</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public ToolBar getToolBar() {
+	checkWidget();
+	return null;
+}
+
 public boolean getVisible () {
 	checkWidget();
 	if (!OS.XtIsRealized (handle)) return false;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Slider.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Slider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Text.java
old mode 100644
new mode 100755
index 3e72a30..7e41ae3
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Text.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Text.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,8 @@ import org.eclipse.swt.events.*;
 public class Text extends Scrollable {
 	char echoCharacter;
 	boolean ignoreChange;
-	String hiddenText, message;
+	char [] hiddenText;
+	String message;
 	int drawCount;
 	Color disabledColor;
 	
@@ -462,7 +463,8 @@ ScrollBar createScrollBar (int type) {
 }
 void createWidget (int index) {
 	super.createWidget (index);	
-	hiddenText = message = "";
+	hiddenText = new char [0];
+	message = "";
 	if ((style & SWT.PASSWORD) != 0) setEchoChar ('*');
 	if ((style & SWT.SINGLE) != 0) {
 		disabledColor = new Color (display, MSG_FOREGROUND);
@@ -660,7 +662,7 @@ public boolean getEditable () {
 public int getLineCount () {
 	checkWidget();
 	if ((style & SWT.SINGLE) != 0) return 1;
-	int lastChar = echoCharacter != '\0' ? hiddenText.length () : OS.XmTextGetLastPosition (handle);
+	int lastChar = echoCharacter != '\0' ? hiddenText.length : OS.XmTextGetLastPosition (handle);
 	return getLineNumber (lastChar) + 1;
 }
 /**
@@ -712,7 +714,7 @@ int getLineNumber (int position) {
 		int length = page;
 		if (start + page > position) length = position - start;
 		if (echoCharacter != '\0') {
-			hiddenText.getChars (start, start + length, buffer, 0);
+			System.arraycopy (hiddenText, start, buffer, 0, length);
 		} else {
 			if (OS.IsLinux) {
 				OS.XmTextGetSubstring (handle, start, length, buffer1.length, buffer1);
@@ -891,15 +893,7 @@ public int getTabs () {
  * </ul>
  */
 public String getText () {
-	checkWidget();
-	if (echoCharacter != '\0') return hiddenText;
-	int ptr = OS.XmTextGetString (handle);
-	if (ptr == 0) return "";
-	int length = OS.strlen (ptr);
-	byte [] buffer = new byte [length];
-	OS.memmove (buffer, ptr, length);
-	OS.XtFree (ptr);
-	return new String (Converter.mbcsToWcs (getCodePage (), buffer));
+	return new String (getTextChars());
 }
 /**
  * Returns a range of text.  Returns an empty string if the
@@ -923,13 +917,13 @@ public String getText (int start, int end) {
 	checkWidget();
 	if (!(start <= end && 0 <= end)) return "";
 	boolean hasEcho = echoCharacter != '\0';
-	int length = hasEcho ? hiddenText.length () : OS.XmTextGetLastPosition (handle);
+	int length = hasEcho ? hiddenText.length : OS.XmTextGetLastPosition (handle);
 	if (length == 0) return "";
 	end = Math.min (end, length - 1);
 	if (start > end) return "";
 	start = Math.max (0, start);
-	if (hasEcho) return hiddenText.substring (start, end + 1);
 	int numChars = end - start + 1;
+	if (hasEcho) return new String(hiddenText, start, numChars);
 	int bufLength = numChars * OS.MB_CUR_MAX () + 1;
 	byte [] buffer = new byte [bufLength];
 	int code = OS.XmTextGetSubstring (handle, start, numChars, bufLength, buffer);
@@ -942,6 +936,39 @@ public String getText (int start, int end) {
 	return new String (unicode, 0, numChars);
 }
 /**
+ * Returns the widget's text as a character array.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * a zero-length array if this has never been set.
+ * </p>
+ *
+ * @return a character array that contains the widget's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setTextChars(char[])
+ *
+ * @since 3.7
+ */
+public char [] getTextChars () {
+	checkWidget();
+	if (echoCharacter != '\0') {
+		char [] text = new char [hiddenText.length];
+		System.arraycopy(hiddenText, 0, text, 0, text.length);
+		return text;
+	}
+	int ptr = OS.XmTextGetString (handle);
+	if (ptr == 0) return new char [0];
+	int length = OS.strlen (ptr);
+	byte [] buffer = new byte [length];
+	OS.memmove (buffer, ptr, length);
+	OS.XtFree (ptr);
+	return Converter.mbcsToWcs (getCodePage (), buffer);
+}
+/**
  * Returns the maximum number of characters that the receiver is capable of holding. 
  * <p>
  * If this has not been changed by <code>setTextLimit()</code>,
@@ -1092,7 +1119,8 @@ public void paste () {
 }
 void releaseWidget () {
 	super.releaseWidget ();
-	hiddenText = message = null;
+	hiddenText = null;
+	message = null;
 	if (disabledColor != null) disabledColor.dispose ();
 	disabledColor = null;
 }
@@ -1265,18 +1293,18 @@ public void setEchoChar (char echo) {
 	checkWidget();
 	if ((style & SWT.MULTI) != 0) return;
 	if (echoCharacter == echo) return;
-	String newText;
+	char [] newText;
 	if (echo == 0) {
 		newText = hiddenText;
-		hiddenText = "";
+		hiddenText = new char [0];
 	} else {
-		newText = hiddenText = getText();
+		newText = hiddenText = getTextChars ();
 	}
 	echoCharacter = echo;
 	Point selection = getSelection();
 	boolean oldValue = ignoreChange;
 	ignoreChange = true;
-	setText(newText);
+	setTextChars(newText);
 	setSelection(selection);
 	ignoreChange = oldValue;
 }
@@ -1531,6 +1559,36 @@ public void setText (String string) {
 	display.setWarnings(warnings);
 }
 /**
+ * Sets the contents of the receiver to the characters in the array. If the receiver
+ * has style <code>SWT.SINGLE</code> and the argument contains multiple lines of text
+ * then the result of this operation is undefined and may vary between platforms.
+ *
+ * @param text a character array that contains the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getTextChars()
+ *
+ * @since 3.7
+ */
+public void setTextChars (char [] text) {
+	checkWidget();
+	if (text == null) error (SWT.ERROR_NULL_ARGUMENT);
+	byte [] buffer = Converter.wcsToMbcs (getCodePage (), text, true);
+	boolean warnings = display.getWarnings ();
+	display.setWarnings (false);
+	OS.XmTextSetString (handle, buffer);
+	OS.XmTextSetInsertionPosition (handle, 0);
+	display.setWarnings(warnings);
+}
+
+/**
  * Sets the maximum number of characters that the receiver
  * is capable of holding to be the argument.
  * <p>
@@ -1709,9 +1767,12 @@ int XmNmodifyVerifyCallback (int w, int client_data, int call_data) {
 	}
 	if (newText != null) {
 		if (echoCharacter != '\0' && (textVerify.doit != 0)) {
-			String prefix = hiddenText.substring (0, textVerify.startPos);
-			String suffix = hiddenText.substring (textVerify.endPos, hiddenText.length ());
-			hiddenText = prefix + newText + suffix;
+			String string = new String (hiddenText);
+			String prefix = string.substring (0, textVerify.startPos);
+			String suffix = string.substring (textVerify.endPos, string.length ());
+			string = prefix + newText + suffix;
+			hiddenText = new char [string.length()];
+			string.getChars(0, hiddenText.length, hiddenText, 0);
 			char [] charBuffer = new char [newText.length ()];
 			for (int i=0; i<charBuffer.length; i++) {
 				charBuffer [i] = echoCharacter;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ToolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ToolBar.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ToolItem.java
old mode 100644
new mode 100755
index 3acbc23..4a1dcf8
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ToolItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/ToolItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -845,7 +845,14 @@ void setVisible (boolean visible) {
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
- * @param width the new width
+ * @param width the new width. If the new value is <code>SWT.DEFAULT</code>,
+ * the width is a fixed-width area whose amount is determined by the platform.
+ * If the new value is 0 a vertical or horizontal line will be drawn, depending
+ * on the setting of the corresponding style bit (<code>SWT.VERTICAL</code> or 
+ * <code>SWT.HORIZONTAL</code>). If the new value is <code>SWT.SEPARATOR_FILL</code>
+ * a variable-width space is inserted that acts as a spring between the two adjoining
+ * items which will push them out to the extent of the containing ToolBar.
+ * 
  *
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Tracker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Tracker.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Widget.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Color.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Color.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Cursor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Cursor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Device.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Device.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/DeviceData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/DeviceData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Font.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Font.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/FontData.java
old mode 100644
new mode 100755
index 134cc77..a89bfa4
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/FontData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/FontData.java	
@@ -330,7 +330,7 @@ public int getStyle() {
  * @see #equals
  */
 public int hashCode () {
-	return name.hashCode() ^ height ^ style;
+	return name.hashCode() ^ height << 8 ^ style;
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/FontMetrics.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/FontMetrics.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/GC.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/GC.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/GCData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/GCData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Image.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Image.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Region.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/graphics/Region.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/internal/Converter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/internal/Converter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Button.java
old mode 100644
new mode 100755
index ec08b7c..941e3d8
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Button.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Button.java	
@@ -36,8 +36,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
  * when the ARROW style is specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Canvas.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Canvas.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Caret.java
old mode 100644
new mode 100755
index dae8448..535ab72
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Caret.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Caret.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ColorDialog.java
old mode 100644
new mode 100755
index 225a574..5a819c6
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ColorDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ColorDialog.java	
@@ -26,8 +26,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Combo.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Composite.java
old mode 100644
new mode 100755
index cc5652c..390b47e
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Composite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Composite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -223,9 +223,9 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		}
 	} else {
 		size = minimumSize ();
+		if (size.x == 0) size.x = DEFAULT_WIDTH;
+		if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	}
-	if (size.x == 0) size.x = DEFAULT_WIDTH;
-	if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) size.x = wHint;
 	if (hHint != SWT.DEFAULT) size.y = hHint;
 	Rectangle trim = computeTrim (0, 0, size.x, size.y);
@@ -922,11 +922,12 @@ void markLayout (boolean changed, boolean all) {
 
 Point minimumSize () {
 	Control [] children = _getChildren ();
+	Rectangle clientArea = getClientArea();
 	int width = 0, height = 0;
 	for (int i=0; i<children.length; i++) {
 		Rectangle rect = children [i].getBounds ();
-		width = Math.max (width, rect.x + rect.width);
-		height = Math.max (height, rect.y + rect.height);
+		width = Math.max (width, rect.x - clientArea.x + rect.width);
+		height = Math.max (height, rect.y - clientArea.y + rect.height);
 	}
 	return new Point (width, height);
 }
@@ -1196,6 +1197,7 @@ public void setLayout (Layout layout) {
  * @since 3.1
  */
 public void setLayoutDeferred (boolean defer) {
+	checkWidget();
 	if (!defer) {
 		if (--layoutCount == 0) {
 			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Control.java
old mode 100644
new mode 100755
index 2dffaa1..961b385
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Control.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Control.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -177,6 +177,41 @@ public void addFocusListener (FocusListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when gesture events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>GestureListener</code> interface.
+ * <p>
+ * NOTE: If <code>setTouchEnabled(true)</code> has previously been
+ * invoked on the receiver then <code>setTouchEnabled(false)</code>
+ * must be invoked on it to specify that gesture events should be
+ * sent instead of touch events.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #removeGestureListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Gesture, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when help events are generated for the control,
  * by sending it one of the messages defined in the
  * <code>HelpListener</code> interface.
@@ -405,6 +440,40 @@ public void addPaintListener (PaintListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when touch events occur, by sending it
+ * one of the messages defined in the <code>TouchListener</code>
+ * interface.
+ * <p>
+ * NOTE: You must also call <code>setTouchEnabled(true)</code> to 
+ * specify that touch events should be sent, which will cause gesture
+ * events to not be sent.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #removeTouchListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addTouchListener (TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Touch,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when traversal events occur, by sending it
  * one of the messages defined in the <code>TraverseListener</code>
  * interface.
@@ -763,8 +832,11 @@ void enableWidget (boolean enabled) {
 
 /**
  * Returns the accessible object for the receiver.
+ * <p>
  * If this is the first time this object is requested,
- * then the object is created and returned.
+ * then the object is created and returned. The object
+ * returned by getAccessible() does not need to be disposed.
+ * </p>
  *
  * @return the accessible object
  *
@@ -1087,6 +1159,24 @@ public Monitor getMonitor () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Composite</code>
  * or null when the receiver is a shell that was created with null or
  * a display for a parent.
@@ -1157,6 +1247,31 @@ public String getToolTipText () {
 	return toolTipText;
 }
 
+/**
+ * Returns <code>true</code> if this control is set to send touch events, or
+ * <code>false</code> if it is set to send gesture events instead.  This method
+ * also returns <code>false</code> if a touch-based input device is not detected
+ * (this can be determined with <code>Display#getTouchEnabled()</code>).  Use
+ * {@link #setTouchEnabled(boolean)} to switch the events that a control sends
+ * between touch events and gesture events.
+ *
+ * @return <code>true</code> if the control is set to send touch events, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTouchEnabled
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkWidget();
+	return false;
+}
+
 /** 
  * Returns the region that defines the shape of the control,
  * or null if the control has the default shape.
@@ -2072,6 +2187,32 @@ public void removeFocusListener(FocusListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when gesture events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #addGestureListener
+ * 
+ * @since 3.7
+ */
+public void removeGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Gesture, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when the help events are generated for the control.
  *
  * @param listener the listener which should no longer be notified
@@ -2274,6 +2415,32 @@ public void removePaintListener(PaintListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when touch events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #addTouchListener
+ * 
+ * @since 3.7
+ */
+public void removeTouchListener(TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Touch, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when traversal events occur.
  *
  * @param listener the listener which should no longer be notified
@@ -2767,6 +2934,24 @@ public void setMenu (Menu menu) {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+}
+
+/**
  * Changes the parent of the widget to be the one provided if
  * the underlying operating system supports this feature.
  * Returns <code>true</code> if the parent is successfully changed.
@@ -2904,6 +3089,26 @@ public void setSize (int width, int height) {
 }
 
 /**
+ * Sets whether this control should send touch events (by default controls do not).
+ * Setting this to <code>false</code> causes the receiver to send gesture events
+ * instead.  No exception is thrown if a touch-based input device is not
+ * detected (this can be determined with <code>Display#getTouchEnabled()</code>).
+ * 
+ * @param enabled the new touch-enabled state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public void setTouchEnabled(boolean enabled) {
+	checkWidget();
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Decorations.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Decorations.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/DirectoryDialog.java
old mode 100644
new mode 100755
index 4b48d8b..16e172c
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/DirectoryDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Display.java
old mode 100644
new mode 100755
index 36adcfd..2e14eac
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Display.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Display.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -804,7 +804,7 @@ public Shell getActiveShell () {
  * over top of, or null if it is not currently over one of the
  * controls built by the currently running application.
  *
- * @return the control under the cursor
+ * @return the control under the cursor or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -908,6 +908,23 @@ public static Display getDefault () {
 }
 
 /**
+ * Returns the single instance of the application menu bar, or
+ * <code>null</code> if there is no application menu bar for the platform.
+ *
+ * @return the application menu bar, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getMenuBar () {
+	checkDevice ();
+	return null;
+}
+
+/**
  * Returns the application name.
  *
  * @return the application name
@@ -1008,7 +1025,7 @@ public int getDoubleClickTime () {
  * any of the controls built by the currently running
  * application.
  *
- * @return the control under the cursor
+ * @return the focus control or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1351,6 +1368,24 @@ public Image getSystemImage (int id) {
 }
 
 /**
+ * Returns the single instance of the system-provided menu for the application, or
+ * <code>null</code> on platforms where no menu is provided for the application.
+ *
+ * @return the system menu, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getSystemMenu () {
+	checkDevice();
+	return null;
+}
+
+/**
  * Returns the single instance of the system taskBar or null
  * when there is no system taskBar available for the platform.
  *
@@ -1439,6 +1474,24 @@ public Thread getThread () {
 	}
 }
 
+/**	 
+ * Returns a boolean indicating whether a touch-aware input device is
+ * attached to the system and is ready for use.
+ *
+ * @return <code>true</code> if a touch-aware input device is detected, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkDevice();
+	return false;
+}
+
 int hotkeyProc (int handle, int data, int info) {
 	Widget widget = WidgetTable.get (handle);
 	if (widget == null) return OS.Pt_CONTINUE;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FileDialog.java
old mode 100644
new mode 100755
index 09559bb..1e94062
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FileDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FileDialog.java	
@@ -27,8 +27,7 @@ import org.eclipse.swt.*;
  * <p>
  * Note: Only one of the styles SAVE and OPEN may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FontDialog.java
old mode 100644
new mode 100755
index cc914ff..fc69d0e
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FontDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/FontDialog.java	
@@ -26,8 +26,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Group.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Group.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Label.java
old mode 100644
new mode 100755
index e1b7191..19432c4
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Label.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Label.java	
@@ -40,8 +40,7 @@ import org.eclipse.swt.graphics.*;
  * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
  * Only one of CENTER, LEFT and RIGHT may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/List.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/List.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Menu.java
old mode 100644
new mode 100755
index c54ba7b..52b5a2d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Menu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Menu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -413,6 +413,24 @@ String getNameText () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Decorations</code>.
  *
  * @return the receiver's parent
@@ -804,6 +822,24 @@ public void setLocation (Point location) {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7  
+ */
+public void setOrientation (int orientation) {
+    checkWidget ();
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MenuItem.java
old mode 100644
new mode 100755
index ec4107d..626a776
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ import org.eclipse.swt.events.*;
  */
 public class MenuItem extends Item {
 	Menu parent, menu;
-	int accelerator;
+	int accelerator, userId;
 	
 /**
  * Constructs a new instance of this class given its parent
@@ -319,6 +319,23 @@ public boolean getEnabled () {
 }
 
 /**
+ * Gets the identifier associated with the receiver.
+ *
+ * @return the receiver's identifier
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getID () {
+	checkWidget();
+	return userId;
+}
+
+/**
  * Returns the receiver's cascade menu if it has one or null
  * if it does not. Only <code>CASCADE</code> menu items can have
  * a pull down menu. The sequence of key strokes, button presses 
@@ -646,6 +663,25 @@ public void setEnabled (boolean enabled) {
 }
 
 /**
+ * Sets the identifier associated with the receiver to the argument.
+ *
+ * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setID (int id) {
+	checkWidget();
+	if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+	userId = id;
+}
+
+/**
  * Sets the image the receiver will display to the argument.
  * <p>
  * Note: This operation is a hint and is not supported on
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MessageBox.java
old mode 100644
new mode 100755
index 3f5de9a..d5bd366
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MessageBox.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/MessageBox.java	
@@ -31,8 +31,7 @@ import org.eclipse.swt.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
  * ICON_WARNING and ICON_WORKING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ProgressBar.java
old mode 100644
new mode 100755
index 575bc28..b488d1b
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ProgressBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ProgressBar.java	
@@ -28,8 +28,7 @@ import org.eclipse.swt.graphics.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Sash.java
old mode 100644
new mode 100755
index f6af35e..9a512dc
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Sash.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Sash.java	
@@ -29,8 +29,7 @@ import org.eclipse.swt.events.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Scale.java
old mode 100644
new mode 100755
index a53bcc0..f1cd323
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Scale.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Scale.java	
@@ -30,8 +30,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ScrollBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ScrollBar.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Scrollable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Scrollable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Shell.java
old mode 100644
new mode 100755
index dbd6597..860948f
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Shell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Shell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -107,7 +107,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
  * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
  * </p><p>
- * IMPORTANT: This class is not intended to be subclassed.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see Decorations
@@ -115,6 +115,7 @@ import org.eclipse.swt.events.*;
  * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Shell extends Decorations {
 	int shellHandle;
@@ -700,7 +701,8 @@ public Point getMinimumSize () {
 /**
  * Gets the receiver's modified state.
  *
- * </ul>
+ * @return <code>true</code> if the receiver is marked as modified, or <code>false</code> otherwise
+ * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -715,9 +717,9 @@ public boolean getModified () {
 
 /** 
  * Returns the region that defines the shape of the shell,
- * or null if the shell has the default shape.
+ * or <code>null</code> if the shell has the default shape.
  *
- * @return the region that defines the shape of the shell (or null)
+ * @return the region that defines the shape of the shell, or <code>null</code>
  *	
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -791,6 +793,26 @@ public Point getSize () {
 	return new Point (width, height);
 }
 
+/**
+ * Returns a ToolBar object representing the tool bar that can be shown in the receiver's
+ * trim. This will return <code>null</code> if the platform does not support tool bars that
+ * are not part of the content area of the shell, or if the Shell's style does not support 
+ * having a tool bar. 
+ * <p>
+ * 
+ * @return a ToolBar object representing the Shell's tool bar, or <ocde>null</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public ToolBar getToolBar() {
+	return null;
+}
+
 void hookEvents () {
 	super.hookEvents ();
 	int windowProc = display.windowProc;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Slider.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Slider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/TabFolder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/TabFolder.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/TabItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/TabItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Text.java
old mode 100644
new mode 100755
index b41ca62..4cf18d3
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Text.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Text.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -830,6 +830,29 @@ public String getText (int start, int end) {
 }
 
 /**
+ * Returns the widget's text as a character array.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * a zero-length array if this has never been set.
+ * </p>
+ *
+ * @return a character array that contains the widget's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setTextChars(char[])
+ *
+ * @since 3.7
+ */
+public char [] getTextChars () {
+	checkWidget();
+	return new char [0];
+}
+
+/**
  * Returns the widget text.
  * <p>
  * The text for a text widget is the characters in the widget, or
@@ -1517,6 +1540,28 @@ public void setText (String string) {
 	OS.PtSetResource (handle, OS.Pt_ARG_TEXT_STRING, ptr, 0);
 	OS.free (ptr);
 }
+/**
+ * Sets the contents of the receiver to the characters in the array. If the receiver
+ * has style <code>SWT.SINGLE</code> and the argument contains multiple lines of text
+ * then the result of this operation is undefined and may vary between platforms.
+ *
+ * @param text a character array that contains the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getTextChars()
+ *
+ * @since 3.7
+ */
+public void setTextChars (char [] text) {
+	checkWidget();
+}
 
 /**
  * Sets the maximum number of characters that the receiver
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ToolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ToolBar.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ToolItem.java
old mode 100644
new mode 100755
index 74ea3c3..4456160
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ToolItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/ToolItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -953,7 +953,14 @@ public void setToolTipText (String string) {
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
- * @param width the new width
+ * @param width the new width. If the new value is <code>SWT.DEFAULT</code>,
+ * the width is a fixed-width area whose amount is determined by the platform.
+ * If the new value is 0 a vertical or horizontal line will be drawn, depending
+ * on the setting of the corresponding style bit (<code>SWT.VERTICAL</code> or 
+ * <code>SWT.HORIZONTAL</code>). If the new value is <code>SWT.SEPARATOR_FILL</code>
+ * a variable-width space is inserted that acts as a spring between the two adjoining
+ * items which will push them out to the extent of the containing ToolBar.
+ * 
  *
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Tracker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Tracker.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/Widget.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/WidgetTable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/photon/org/eclipse/swt/widgets/WidgetTable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Color.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Color.java
new file mode 100644
index 0000000..9d39595
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Color.java	
@@ -0,0 +1,364 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Portion Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Nokia Corporation - Qt implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import com.trolltech.qt.gui.QColor;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+
+/**
+ * Instances of this class manage the operating system resources that implement
+ * SWT's RGB color model. To create a color you can either specify the
+ * individual color components as integers in the range 0 to 255 or provide an
+ * instance of an <code>RGB</code>.
+ * <p>
+ * Application code must explicitly invoke the <code>Color.dispose()</code>
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see RGB
+ * @see Device#getSystemColor
+ */
+public final class Color extends Resource {
+
+	/**
+	 * the handle to the OS color resource (Warning: This field is platform
+	 * dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 */
+	private QColor color;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Color() {
+	}
+
+	/**
+	 * Constructs a new instance of this class given a device and the desired
+	 * red, green and blue values expressed as ints in the range 0 to 255 (where
+	 * 0 is black and 255 is full brightness). On limited color devices, the
+	 * color instance created by this call may not have the same RGB values as
+	 * the ones specified by the arguments. The RGB values on the returned
+	 * instance will be the color values of the operating system color.
+	 * <p>
+	 * You must dispose the color when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the color
+	 * @param red
+	 *            the amount of red in the color
+	 * @param green
+	 *            the amount of green in the color
+	 * @param blue
+	 *            the amount of blue in the color
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the red, green or blue
+	 *                argument is not between 0 and 255</li>
+	 *                </ul>
+	 * 
+	 * @see #dispose
+	 */
+	public Color(Device device, int red, int green, int blue) {
+		init(device, red, green, blue);
+	}
+
+	/**
+	 * Constructs a new instance of this class given a device and an
+	 * <code>RGB</code> describing the desired red, green and blue values. On
+	 * limited color devices, the color instance created by this call may not
+	 * have the same RGB values as the ones specified by the argument. The RGB
+	 * values on the returned instance will be the color values of the operating
+	 * system color.
+	 * <p>
+	 * You must dispose the color when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the color
+	 * @param rgb
+	 *            the RGB values of the desired color
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the rgb argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the red, green or blue
+	 *                components of the argument are not between 0 and 255</li>
+	 *                </ul>
+	 * 
+	 * @see #dispose
+	 */
+	public Color(Device device, RGB rgb) {
+		if (rgb == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		init(device, rgb.red, rgb.green, rgb.blue);
+	}
+
+	/**
+	 * Disposes of the operating system resources associated with this resource.
+	 * Applications must dispose of all resources which they allocate.
+	 */
+	@Override
+	public void dispose() {
+		if (device == null) {
+			return;
+		}
+		if (device.isDisposed()) {
+			return;
+		}
+		if (device.tracking) {
+			device.dispose_Object(this);
+		}
+		device = null;
+		color = null;
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (object == this) {
+			return true;
+		}
+		if (!(object instanceof Color)) {
+			return false;
+		}
+		Color color = (Color) object;
+		if (isDisposed() || color.isDisposed()) {
+			return false;
+		}
+		return this.color.equals(color.color);
+	}
+
+	/**
+	 * Returns the amount of blue in the color, from 0 to 255.
+	 * 
+	 * @return the blue component of the color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getBlue() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return color.blue();
+	}
+
+	/**
+	 * Returns the amount of green in the color, from 0 to 255.
+	 * 
+	 * @return the green component of the color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getGreen() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return color.green();
+	}
+
+	/**
+	 * Returns the amount of red in the color, from 0 to 255.
+	 * 
+	 * @return the red component of the color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getRed() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return color.red();
+	}
+
+	/**
+	 * Returns an <code>RGB</code> representing the receiver.
+	 * 
+	 * @return the RGB for the color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public RGB getRGB() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return new RGB(color.red(), color.green(), color.blue());
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		if (isDisposed()) {
+			return 0;
+		}
+		return color.hashCode();
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new color.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Color</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param red
+	 *            the red component
+	 * @param green
+	 *            the green component
+	 * @param blue
+	 *            the blue component
+	 * 
+	 * @private
+	 */
+
+	void init(Device device, int red, int green, int blue) {
+
+		if (device == null) {
+			device = Device.getDevice();
+		}
+		if (device == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		this.device = device;
+
+		if (red > 255 || red < 0 || green > 255 || green < 0 || blue > 255 || blue < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		// Keep this after dealing with all exceptions!
+		if (device.tracking) {
+			device.new_Object(this);
+		}
+		color = new QColor(red, green, blue);
+	}
+
+	public QColor getColor() {
+		if (color == null) {
+			color = new QColor(getRed(), getGreen(), getBlue());
+		}
+		return color;
+	}
+
+	/**
+	 * Returns <code>true</code> if the color has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the color. When a color has been
+	 * disposed, it is an error to invoke any other method using the color.
+	 * 
+	 * @return <code>true</code> when the color is disposed and
+	 *         <code>false</code> otherwise
+	 */
+	@Override
+	public boolean isDisposed() {
+		return color == null;
+	}
+
+	/**
+	 * Returns a string containing a concise, human-readable description of the
+	 * receiver.
+	 * 
+	 * @return a string representation of the receiver
+	 */
+	@Override
+	public String toString() {
+		if (isDisposed()) {
+			return "Color {*DISPOSED*}"; //$NON-NLS-1$
+		}
+		return "Color {" + getRed() + ", " + getGreen() + ", " + getBlue() + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new color.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Color</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the color
+	 * @param handle
+	 *            the handle for the color
+	 * @return a new color object containing the specified device and handle
+	 */
+	public static Color qt_new(Device device, int rgb) {
+		Color color = new Color();
+		color.device = device;
+		color.color = new QColor(rgb);
+		return color;
+	}
+
+	public static Color qt_new(Device device, QColor qColor) {
+		Color color = new Color(device, qColor.red(), qColor.green(), qColor.blue());
+		color.color = qColor;
+		return color;
+	}
+
+	public int getPixel() {
+		return getColor().value();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Cursor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Cursor.java
new file mode 100644
index 0000000..6803a4d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Cursor.java	
@@ -0,0 +1,445 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de). 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import com.trolltech.qt.core.Qt.CursorShape;
+import com.trolltech.qt.gui.QCursor;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+
+/**
+ * Instances of this class manage operating system resources that specify the
+ * appearance of the on-screen pointer. To create a cursor you specify the
+ * device and either a simple cursor style describing one of the standard
+ * operating system provided cursors or the image and mask data for the desired
+ * appearance.
+ * <p>
+ * Application code must explicitly invoke the <code>Cursor.dispose()</code>
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>
+ * CURSOR_ARROW, CURSOR_WAIT, CURSOR_CROSS, CURSOR_APPSTARTING, CURSOR_HELP,
+ * CURSOR_SIZEALL, CURSOR_SIZENESW, CURSOR_SIZENS, CURSOR_SIZENWSE,
+ * CURSOR_SIZEWE, CURSOR_SIZEN, CURSOR_SIZES, CURSOR_SIZEE, CURSOR_SIZEW,
+ * CURSOR_SIZENE, CURSOR_SIZESE, CURSOR_SIZESW, CURSOR_SIZENW, CURSOR_UPARROW,
+ * CURSOR_IBEAM, CURSOR_NO, CURSOR_HAND</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the above styles may be specified.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#cursor">Cursor
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+
+public final class Cursor extends Resource {
+
+	/**
+	 * the handle to the OS cursor resource (Warning: This field is platform
+	 * dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 */
+	public QCursor cursor;
+
+	boolean isIcon;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Cursor(Device device) {
+		super(device);
+	}
+
+	/**
+	 * Constructs a new cursor given a device and a style constant describing
+	 * the desired cursor appearance.
+	 * <p>
+	 * You must dispose the cursor when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the cursor
+	 * @param style
+	 *            the style of cursor to allocate
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - when an unknown style is
+	 *                specified</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if a handle could not be obtained
+	 *                for cursor creation</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#CURSOR_ARROW
+	 * @see SWT#CURSOR_WAIT
+	 * @see SWT#CURSOR_CROSS
+	 * @see SWT#CURSOR_APPSTARTING
+	 * @see SWT#CURSOR_HELP
+	 * @see SWT#CURSOR_SIZEALL
+	 * @see SWT#CURSOR_SIZENESW
+	 * @see SWT#CURSOR_SIZENS
+	 * @see SWT#CURSOR_SIZENWSE
+	 * @see SWT#CURSOR_SIZEWE
+	 * @see SWT#CURSOR_SIZEN
+	 * @see SWT#CURSOR_SIZES
+	 * @see SWT#CURSOR_SIZEE
+	 * @see SWT#CURSOR_SIZEW
+	 * @see SWT#CURSOR_SIZENE
+	 * @see SWT#CURSOR_SIZESE
+	 * @see SWT#CURSOR_SIZESW
+	 * @see SWT#CURSOR_SIZENW
+	 * @see SWT#CURSOR_UPARROW
+	 * @see SWT#CURSOR_IBEAM
+	 * @see SWT#CURSOR_NO
+	 * @see SWT#CURSOR_HAND
+	 */
+	public Cursor(Device device, int style) {
+		super(device);
+		CursorShape cursorShape = null;
+		switch (style) {
+		case SWT.CURSOR_HAND:
+			cursorShape = CursorShape.PointingHandCursor;
+			break;
+		case SWT.CURSOR_ARROW:
+			cursorShape = CursorShape.ArrowCursor;
+			break;
+		case SWT.CURSOR_WAIT:
+			cursorShape = CursorShape.WaitCursor;
+			break;
+		case SWT.CURSOR_CROSS:
+			cursorShape = CursorShape.CrossCursor;
+			break;
+		case SWT.CURSOR_APPSTARTING:
+			cursorShape = CursorShape.BusyCursor;
+			break;
+		case SWT.CURSOR_HELP:
+			cursorShape = CursorShape.WhatsThisCursor;
+			break;
+		case SWT.CURSOR_SIZEALL:
+			cursorShape = CursorShape.SizeAllCursor;
+			break;
+		case SWT.CURSOR_SIZENESW:
+			cursorShape = CursorShape.SizeBDiagCursor;
+			break;
+		case SWT.CURSOR_SIZENS:
+			cursorShape = CursorShape.SizeVerCursor;
+			break;
+		case SWT.CURSOR_SIZENWSE:
+			cursorShape = CursorShape.SizeFDiagCursor;
+			break;
+		case SWT.CURSOR_SIZEWE:
+			cursorShape = CursorShape.SizeHorCursor;
+			break;
+		case SWT.CURSOR_SIZEN:
+			cursorShape = CursorShape.SizeVerCursor;
+			break;
+		case SWT.CURSOR_SIZES:
+			cursorShape = CursorShape.SizeVerCursor;
+			break;
+		case SWT.CURSOR_SIZEE:
+			cursorShape = CursorShape.SizeHorCursor;
+			break;
+		case SWT.CURSOR_SIZEW:
+			cursorShape = CursorShape.SizeHorCursor;
+			break;
+		case SWT.CURSOR_SIZENE:
+			cursorShape = CursorShape.SizeBDiagCursor;
+			break;
+		case SWT.CURSOR_SIZESE:
+			cursorShape = CursorShape.SizeBDiagCursor;
+			break;
+		case SWT.CURSOR_SIZESW:
+			cursorShape = CursorShape.SizeFDiagCursor;
+			break;
+		case SWT.CURSOR_SIZENW:
+			cursorShape = CursorShape.SizeFDiagCursor;
+			break;
+		case SWT.CURSOR_UPARROW:
+			cursorShape = CursorShape.UpArrowCursor;
+			break;
+		case SWT.CURSOR_IBEAM:
+			cursorShape = CursorShape.IBeamCursor;
+			break;
+		case SWT.CURSOR_NO:
+			cursorShape = CursorShape.ForbiddenCursor;
+
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		cursor = new QCursor(cursorShape);
+		init();
+	}
+
+	/**
+	 * Constructs a new cursor given a device, image and mask data describing
+	 * the desired cursor appearance, and the x and y coordinates of the
+	 * <em>hotspot</em> (that is, the point within the area covered by the
+	 * cursor which is considered to be where the on-screen pointer is
+	 * "pointing").
+	 * <p>
+	 * The mask data is allowed to be null, but in this case the source must be
+	 * an ImageData representing an icon that specifies both color data and mask
+	 * data.
+	 * <p>
+	 * You must dispose the cursor when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the cursor
+	 * @param source
+	 *            the color data for the cursor
+	 * @param mask
+	 *            the mask data for the cursor (or null)
+	 * @param hotspotX
+	 *            the x coordinate of the cursor's hotspot
+	 * @param hotspotY
+	 *            the y coordinate of the cursor's hotspot
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the source is null</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the mask is null and the
+	 *                source does not have a mask</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the source and the mask
+	 *                are not the same size, or if the hotspot is outside the
+	 *                bounds of the image</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if a handle could not be obtained
+	 *                for cursor creation</li>
+	 *                </ul>
+	 */
+	public Cursor(Device device, ImageData source, ImageData mask, int hotspotX, int hotspotY) {
+		this(device, SWT.CURSOR_ARROW);
+		//TODO
+		//		super(device);
+		//		if (source == null) {
+		//			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		//		}
+		//		if (mask == null) {
+		//			if (source.getTransparencyType() != SWT.TRANSPARENCY_MASK) {
+		//				SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		//			}
+		//			mask = source.getTransparencyMask();
+		//		}
+		//		/* Check the bounds. Mask must be the same size as source */
+		//		if (mask.width != source.width || mask.height != source.height) {
+		//			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		//		}
+		//		/* Check the hotspots */
+		//		if (hotspotX >= source.width || hotspotX < 0 || hotspotY >= source.height || hotspotY < 0) {
+		//			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		//		}
+		//		/* Convert depth to 1 */
+		//		mask = ImageData.convertMask(mask);
+		//		source = ImageData.convertMask(source);
+		//
+		//		/* Make sure source and mask scanline pad is 2 */
+		//		byte[] sourceData = ImageData.convertPad(source.data, source.width, source.height, source.depth,
+		//				source.scanlinePad, 2);
+		//		byte[] maskData = ImageData.convertPad(mask.data, mask.width, mask.height, mask.depth, mask.scanlinePad, 2);
+
+		/* Create the cursor */
+		// TODO
+		//		cursor = new QCursor(mask.)
+		//		int /* long */hInst = OS.GetModuleHandle(null);
+		//		if (OS.IsWinCE) {
+		//			SWT.error(SWT.ERROR_NOT_IMPLEMENTED);
+		//		}
+		//		handle = OS.CreateCursor(hInst, hotspotX, hotspotY, source.width, source.height, sourceData, maskData);
+		//		if (handle == 0) {
+		//			SWT.error(SWT.ERROR_NO_HANDLES);
+		//		}
+		//init();
+	}
+
+	/**
+	 * Constructs a new cursor given a device, image data describing the desired
+	 * cursor appearance, and the x and y coordinates of the <em>hotspot</em>
+	 * (that is, the point within the area covered by the cursor which is
+	 * considered to be where the on-screen pointer is "pointing").
+	 * <p>
+	 * You must dispose the cursor when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the cursor
+	 * @param source
+	 *            the image data for the cursor
+	 * @param hotspotX
+	 *            the x coordinate of the cursor's hotspot
+	 * @param hotspotY
+	 *            the y coordinate of the cursor's hotspot
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the hotspot is outside the
+	 *                bounds of the image</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if a handle could not be obtained
+	 *                for cursor creation</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) {
+		this(device, SWT.CURSOR_ARROW);
+		//		if (source == null) {
+		//			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		//		}
+		//		/* Check the hotspots */
+		//		if (hotspotX >= source.width || hotspotX < 0 || hotspotY >= source.height || hotspotY < 0) {
+		//			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		//		}
+
+		//		ImageData mask = source.getTransparencyMask();
+		//		int /* long */[] result = new int[2]; // TODO = Image.init(this.device, null, source, mask);
+		//		int /* long */hBitmap = result[0];
+		//		int /* long */hMask = result[1];
+		//		/* Create the icon */
+		//		ICONINFO info = new ICONINFO();
+		//		info.fIcon = false;
+		//		info.hbmColor = hBitmap;
+		//		info.hbmMask = hMask;
+		//		info.xHotspot = hotspotX;
+		//		info.yHotspot = hotspotY;
+		//TODO
+		//		handle = OS.CreateIconIndirect(info);
+		//		if (handle == 0) {
+		//			SWT.error(SWT.ERROR_NO_HANDLES);
+		//		}
+		//		OS.DeleteObject(hBitmap);
+		//		OS.DeleteObject(hMask);
+		//isIcon = true;
+		//		init();
+	}
+
+	@Override
+	void destroy() {
+		cursor = null;
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (object == this) {
+			return true;
+		}
+		if (!(object instanceof Cursor)) {
+			return false;
+		}
+		Cursor cursor = (Cursor) object;
+		return device == cursor.device && this.cursor == cursor.cursor;
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		return cursor.hashCode();
+	}
+
+	/**
+	 * Returns <code>true</code> if the cursor has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the cursor. When a cursor has been
+	 * disposed, it is an error to invoke any other method using the cursor.
+	 * 
+	 * @return <code>true</code> when the cursor is disposed and
+	 *         <code>false</code> otherwise
+	 */
+	@Override
+	public boolean isDisposed() {
+		return cursor == null;
+	}
+
+	/**
+	 * Returns a string containing a concise, human-readable description of the
+	 * receiver.
+	 * 
+	 * @return a string representation of the receiver
+	 */
+	@Override
+	public String toString() {
+		if (isDisposed()) {
+			return "Cursor {*DISPOSED*}"; //$NON-NLS-1$
+		}
+		return "Cursor {" + cursor + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new cursor.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Cursor</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the color
+	 * @param handle
+	 *            the handle for the cursor
+	 * @return a new cursor object containing the specified device and handle
+	 */
+	public static Cursor win32_new(Device device, int handle) {
+		Cursor cursor = new Cursor(device);
+		// TODO
+		// cursor.cursor = handle;
+		return cursor;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java
new file mode 100644
index 0000000..99a3dcb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Device.java	
@@ -0,0 +1,920 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QFontDatabase;
+import com.trolltech.qt.gui.QPaintDeviceInterface;
+import com.trolltech.qt.gui.QPalette;
+import com.trolltech.qt.gui.QPalette.ColorGroup;
+import com.trolltech.qt.gui.QPalette.ColorRole;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+
+/**
+ * This class is the abstract superclass of all device objects, such as the
+ * Display device and the Printer device. Devices can have a graphics context
+ * (GC) created for them, and they can be drawn on by sending messages to the
+ * associated GC.
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public abstract class Device implements Drawable {
+
+	/* Debugging */
+	public static boolean DEBUG;
+	private boolean debug = DEBUG;
+	boolean tracking = DEBUG;
+	private Error[] errors;
+	private Object[] objects;
+	private Object trackingLock;
+
+	/* System Font */
+	Font systemFont;
+	private QColor COLOR_LIST_BACKGROUND;
+	private QColor COLOR_LIST_FOREGROUND;
+	private QColor COLOR_LIST_SELECTION;
+	private QColor COLOR_LIST_SELECTION_TEXT;
+	private QColor COLOR_TITLE_BACKGROUND;
+	private QColor COLOR_TITLE_BACKGROUND_GRADIENT;
+	private QColor COLOR_TITLE_FOREGROUND;
+	private QColor COLOR_TITLE_INACTIVE_BACKGROUND;
+	private QColor COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT;
+	private QColor COLOR_TITLE_INACTIVE_FOREGROUND;
+	private QColor COLOR_WIDGET_BACKGROUND;
+	private QColor COLOR_WIDGET_BORDER;
+	private QColor COLOR_WIDGET_DARK_SHADOW;
+	private QColor COLOR_WIDGET_FOREGROUND;
+	private QColor COLOR_WIDGET_HIGHLIGHT_SHADOW;
+	private QColor COLOR_WIDGET_LIGHT_SHADOW;
+	private QColor COLOR_WIDGET_NORMAL_SHADOW;
+	private QColor COLOR_INFO_FOREGROUND;
+	private QColor COLOR_INFO_BACKGROUND;
+
+	private boolean disposed;
+	private QPaintDeviceInterface paintDevice;
+
+	/*
+	 * TEMPORARY CODE. When a graphics object is created and the device
+	 * parameter is null, the current Display is used. This presents a problem
+	 * because SWT graphics does not reference classes in SWT widgets. The
+	 * correct fix is to remove this feature. Unfortunately, too many
+	 * application programs rely on this feature.
+	 */
+	protected static Device CurrentDevice;
+	protected static Runnable DeviceFinder;
+	static {
+		try {
+			Class.forName("org.eclipse.swt.widgets.Display"); //$NON-NLS-1$
+		} catch (ClassNotFoundException e) {
+		}
+	}
+
+	/*
+	 * TEMPORARY CODE.
+	 */
+	static synchronized Device getDevice() {
+		if (DeviceFinder != null) {
+			DeviceFinder.run();
+		}
+		Device device = CurrentDevice;
+		CurrentDevice = null;
+		return device;
+	}
+
+	/**
+	 * Constructs a new instance of this class.
+	 * <p>
+	 * You must dispose the device when it is no longer required.
+	 * </p>
+	 * 
+	 * @see #create
+	 * @see #init
+	 * 
+	 * @since 3.1
+	 */
+	public Device() {
+		this(null);
+	}
+
+	/**
+	 * Constructs a new instance of this class.
+	 * <p>
+	 * You must dispose the device when it is no longer required.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the DeviceData which describes the receiver
+	 * 
+	 * @see #create
+	 * @see #init
+	 * @see DeviceData
+	 */
+	public Device(DeviceData data) {
+		synchronized (Device.class) {
+			if (data != null) {
+				debug = data.debug;
+				tracking = data.tracking;
+			}
+			if (tracking) {
+				errors = new Error[128];
+				objects = new Object[128];
+				trackingLock = new Object();
+			}
+			create(data);
+			init();
+		}
+	}
+
+	protected void setPaintDevice(QPaintDeviceInterface paintDevice) {
+		this.paintDevice = paintDevice;
+	}
+
+	/**
+	 * Throws an <code>SWTException</code> if the receiver can not be accessed
+	 * by the caller. This may include both checks on the state of the receiver
+	 * and more generally on the entire execution context. This method
+	 * <em>should</em> be called by device implementors to enforce the standard
+	 * SWT invariants.
+	 * <p>
+	 * Currently, it is an error to invoke any method (other than
+	 * <code>isDisposed()</code> and <code>dispose()</code>) on a device that
+	 * has had its <code>dispose()</code> method called.
+	 * </p>
+	 * <p>
+	 * In future releases of SWT, there may be more or fewer error checks and
+	 * exceptions may be thrown for different reasons.
+	 * <p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	protected void checkDevice() {
+		if (disposed) {
+			SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+		}
+	}
+
+	/**
+	 * Creates the device in the operating system. If the device does not have a
+	 * handle, this method may do nothing depending on the device.
+	 * <p>
+	 * This method is called before <code>init</code>.
+	 * </p>
+	 * <p>
+	 * Subclasses are supposed to reimplement this method and not call the
+	 * <code>super</code> implementation.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the DeviceData which describes the receiver
+	 * 
+	 * @see #init
+	 */
+	protected void create(DeviceData data) {
+	}
+
+	/**
+	 * Destroys the device in the operating system and releases the device's
+	 * handle. If the device does not have a handle, this method may do nothing
+	 * depending on the device.
+	 * <p>
+	 * This method is called after <code>release</code>.
+	 * </p>
+	 * <p>
+	 * Subclasses are supposed to reimplement this method and not call the
+	 * <code>super</code> implementation.
+	 * </p>
+	 * 
+	 * @see #dispose
+	 * @see #release
+	 */
+	protected void destroy() {
+	}
+
+	/**
+	 * Disposes of the operating system resources associated with the receiver.
+	 * After this method has been invoked, the receiver will answer
+	 * <code>true</code> when sent the message <code>isDisposed()</code>.
+	 * 
+	 * @see #release
+	 * @see #destroy
+	 * @see #checkDevice
+	 */
+	public void dispose() {
+		synchronized (Device.class) {
+			if (isDisposed()) {
+				return;
+			}
+			checkDevice();
+			release();
+			destroy();
+			disposed = true;
+			if (tracking) {
+				synchronized (trackingLock) {
+					printErrors();
+					objects = null;
+					errors = null;
+					trackingLock = null;
+				}
+			}
+		}
+	}
+
+	void dispose_Object(Object object) {
+		synchronized (trackingLock) {
+			for (int i = 0; i < objects.length; i++) {
+				if (objects[i] == object) {
+					objects[i] = null;
+					errors[i] = null;
+					return;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location.
+	 * 
+	 * @return the bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Rectangle getBounds() {
+		checkDevice();
+		return new Rectangle(0, 0, paintDevice.width(), paintDevice.height());
+	}
+
+	/**
+	 * Returns a <code>DeviceData</code> based on the receiver. Modifications
+	 * made to this <code>DeviceData</code> will not affect the receiver.
+	 * 
+	 * @return a <code>DeviceData</code> containing the device's data and
+	 *         attributes
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see DeviceData
+	 */
+	public DeviceData getDeviceData() {
+		checkDevice();
+		DeviceData data = new DeviceData();
+		data.debug = debug;
+		data.tracking = tracking;
+		if (tracking) {
+			synchronized (trackingLock) {
+				int count = 0, length = objects.length;
+				for (int i = 0; i < length; i++) {
+					if (objects[i] != null) {
+						count++;
+					}
+				}
+				int index = 0;
+				data.objects = new Object[count];
+				data.errors = new Error[count];
+				for (int i = 0; i < length; i++) {
+					if (objects[i] != null) {
+						data.objects[index] = objects[i];
+						data.errors[index] = errors[i];
+						index++;
+					}
+				}
+			}
+		} else {
+			data.objects = new Object[0];
+			data.errors = new Error[0];
+		}
+		return data;
+	}
+
+	/**
+	 * Returns a rectangle which describes the area of the receiver which is
+	 * capable of displaying data.
+	 * 
+	 * @return the client area
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #getBounds
+	 */
+	public Rectangle getClientArea() {
+		return getBounds();
+	}
+
+	/**
+	 * Returns the bit depth of the screen, which is the number of bits it takes
+	 * to represent the number of unique colors that the screen is currently
+	 * capable of displaying. This number will typically be one of 1, 8, 15, 16,
+	 * 24 or 32.
+	 * 
+	 * @return the depth of the screen
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getDepth() {
+		checkDevice();
+		return paintDevice.depth();
+	}
+
+	/**
+	 * Returns a point whose x coordinate is the horizontal dots per inch of the
+	 * display, and whose y coordinate is the vertical dots per inch of the
+	 * display.
+	 * 
+	 * @return the horizontal and vertical DPI
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Point getDPI() {
+		checkDevice();
+		return new Point(paintDevice.physicalDpiX(), paintDevice.physicalDpiY());
+	}
+
+	/**
+	 * Returns <code>FontData</code> objects which describe the fonts that match
+	 * the given arguments. If the <code>faceName</code> is null, all fonts will
+	 * be returned.
+	 * 
+	 * @param faceName
+	 *            the name of the font to look for, or null
+	 * @param scalable
+	 *            if true only scalable fonts are returned, otherwise only
+	 *            non-scalable fonts are returned.
+	 * @return the matching font data
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public FontData[] getFontList(String faceName, boolean scalable) {
+		checkDevice();
+		QFontDatabase qFontDatabase = null;
+		qFontDatabase = new QFontDatabase();
+		String fontFamilies[] = qFontDatabase.families().toArray(new String[0]);
+		// for storing FontData arrays
+		List<FontData> fontData = new ArrayList<FontData>();
+
+		for (int i = 0; i < fontFamilies.length; i++) {
+			String family = null;
+			if (faceName == null) {
+				family = fontFamilies[i];
+			} else {
+				if (faceName.equals(fontFamilies[i])) {
+					family = fontFamilies[i];
+				} else {
+					continue;
+				}
+			}
+			getFontList(fontData, qFontDatabase, family, scalable);
+			if (faceName != null) {
+				break;
+			}
+		}
+
+		qFontDatabase.dispose(); //TODO_DISPOSE (called many times)
+		qFontDatabase = null;
+
+		if (fontData.size() > 0) {
+			FontData[] result = new FontData[fontData.size()];
+			int size = fontData.size();
+			for (int i = 0; i < size; ++i) {
+				result[i] = fontData.get(i);
+			}
+			return result;
+		} else {
+			return new FontData[0];
+		}
+	}
+
+	private void getFontList(List<FontData> fontData, QFontDatabase qFontDatabase, String family, boolean onlyScalable) {
+		String nativeStyles[] = qFontDatabase.styles(family).toArray(new String[0]);
+		int prevStyle = -1;
+		int i = 0;
+		// Go trough each native style of the font family, map them to SWT
+		// styles
+		// and create a new FontData for each newly found SWT style of the
+		// family.
+		// Still, it may be possible that there are no native styles for a
+		// family,
+		// in which case we add a single FontData with default SWT style:
+		// NORMAL.
+		// In addition we go trough all heights of non scalable font families,
+		// creating a new FontData for all heights of all native styles.
+		do {
+			String nativeStyle = nativeStyles.length > 0 ? nativeStyles[i] : null;
+			boolean isScalable = qFontDatabase.isScalable(family, nativeStyle);
+			int style = SWT.NORMAL;
+			if (qFontDatabase.bold(family, nativeStyle)) {
+				style |= SWT.BOLD;
+			}
+			if (qFontDatabase.italic(family, nativeStyle)) {
+				style |= SWT.ITALIC;
+			}
+			if (style != prevStyle) {
+				prevStyle = style;
+				int[] heights = null;
+				int j = 0;
+				if (onlyScalable && isScalable) {
+					heights = new int[1];
+					heights[0] = FontData.FONT_DEF_HEIGHT;
+				} else if (!onlyScalable && !isScalable) {
+					List<Integer> pointSizes = null;
+					if (nativeStyle == null) {
+						pointSizes = qFontDatabase.pointSizes(family);
+					} else {
+						pointSizes = qFontDatabase.pointSizes(family, nativeStyle);
+					}
+					heights = new int[pointSizes.size()];
+					for (int x = 0; x < pointSizes.size(); x++) {
+						heights[x] = pointSizes.get(x);
+					}
+				}
+				if (heights != null) {
+					do {
+						FontData fd = new FontData(family, heights[j], style);
+						fontData.add(fd);
+						j++;
+					} while (!onlyScalable && !isScalable && j < heights.length);
+				}
+			}
+			i++;
+		} while (i < nativeStyles.length);
+	}
+
+	/**
+	 * Returns the matching standard color for the given constant, which should
+	 * be one of the color constants specified in class <code>SWT</code>. Any
+	 * value other than one of the SWT color constants which is passed in will
+	 * result in the color black. This color should not be freed because it was
+	 * allocated by the system, not the application.
+	 * 
+	 * @param id
+	 *            the color constant
+	 * @return the matching color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 */
+	public Color getSystemColor(int id) {
+		checkDevice();
+		int pixel = 0x00000000;
+		switch (id) {
+		case SWT.COLOR_WHITE:
+			return Color.qt_new(this, QColor.white);
+		case SWT.COLOR_BLACK:
+			return Color.qt_new(this, QColor.black);
+		case SWT.COLOR_RED:
+			return Color.qt_new(this, QColor.red);
+		case SWT.COLOR_DARK_RED:
+			return Color.qt_new(this, QColor.darkRed);
+		case SWT.COLOR_GREEN:
+			return Color.qt_new(this, QColor.green);
+		case SWT.COLOR_DARK_GREEN:
+			return Color.qt_new(this, QColor.darkGreen);
+		case SWT.COLOR_YELLOW:
+			return Color.qt_new(this, QColor.yellow);
+		case SWT.COLOR_DARK_YELLOW:
+			return Color.qt_new(this, QColor.darkYellow);
+		case SWT.COLOR_BLUE:
+			return Color.qt_new(this, QColor.blue);
+		case SWT.COLOR_DARK_BLUE:
+			return Color.qt_new(this, QColor.darkBlue);
+		case SWT.COLOR_MAGENTA:
+			return Color.qt_new(this, QColor.magenta);
+		case SWT.COLOR_DARK_MAGENTA:
+			return Color.qt_new(this, QColor.magenta);
+		case SWT.COLOR_CYAN:
+			return Color.qt_new(this, QColor.cyan);
+		case SWT.COLOR_DARK_CYAN:
+			return Color.qt_new(this, QColor.darkCyan);
+		case SWT.COLOR_GRAY:
+			return Color.qt_new(this, QColor.gray);
+		case SWT.COLOR_DARK_GRAY:
+			return Color.qt_new(this, QColor.darkGray);
+		case SWT.COLOR_LIST_BACKGROUND:
+			return Color.qt_new(this, COLOR_LIST_BACKGROUND);
+		case SWT.COLOR_LIST_FOREGROUND:
+			return Color.qt_new(this, COLOR_LIST_FOREGROUND);
+		case SWT.COLOR_LIST_SELECTION:
+			return Color.qt_new(this, COLOR_LIST_SELECTION);
+		case SWT.COLOR_LIST_SELECTION_TEXT:
+			return Color.qt_new(this, COLOR_LIST_SELECTION_TEXT);
+		case SWT.COLOR_TITLE_BACKGROUND:
+			return Color.qt_new(this, COLOR_TITLE_BACKGROUND);
+		case SWT.COLOR_TITLE_BACKGROUND_GRADIENT:
+			return Color.qt_new(this, COLOR_TITLE_BACKGROUND_GRADIENT);
+		case SWT.COLOR_TITLE_FOREGROUND:
+			return Color.qt_new(this, COLOR_TITLE_FOREGROUND);
+		case SWT.COLOR_TITLE_INACTIVE_BACKGROUND:
+			return Color.qt_new(this, COLOR_TITLE_INACTIVE_BACKGROUND);
+		case SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT:
+			return Color.qt_new(this, COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT);
+		case SWT.COLOR_TITLE_INACTIVE_FOREGROUND:
+			return Color.qt_new(this, COLOR_TITLE_INACTIVE_FOREGROUND);
+		case SWT.COLOR_WIDGET_BACKGROUND:
+			return Color.qt_new(this, COLOR_WIDGET_BACKGROUND);
+		case SWT.COLOR_WIDGET_BORDER:
+			return Color.qt_new(this, COLOR_WIDGET_BORDER);
+		case SWT.COLOR_WIDGET_DARK_SHADOW:
+			return Color.qt_new(this, COLOR_WIDGET_DARK_SHADOW);
+		case SWT.COLOR_WIDGET_FOREGROUND:
+			return Color.qt_new(this, COLOR_WIDGET_FOREGROUND);
+		case SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW:
+			return Color.qt_new(this, COLOR_WIDGET_HIGHLIGHT_SHADOW);
+		case SWT.COLOR_WIDGET_LIGHT_SHADOW:
+			return Color.qt_new(this, COLOR_WIDGET_LIGHT_SHADOW);
+		case SWT.COLOR_WIDGET_NORMAL_SHADOW:
+			return Color.qt_new(this, COLOR_WIDGET_NORMAL_SHADOW);
+		case SWT.COLOR_INFO_FOREGROUND:
+			return Color.qt_new(this, COLOR_INFO_FOREGROUND);
+		case SWT.COLOR_INFO_BACKGROUND:
+			return Color.qt_new(this, COLOR_INFO_BACKGROUND);
+		}
+		return Color.qt_new(this, pixel);
+	}
+
+	/**
+	 * Returns a reasonable font for applications to use. On some platforms,
+	 * this will match the "default font" or "system font" if such can be found.
+	 * This font should not be freed because it was allocated by the system, not
+	 * the application.
+	 * <p>
+	 * Typically, applications which want the default look should simply not set
+	 * the font on the widgets they create. Widgets are always created with the
+	 * correct default font for the class of user-interface component they
+	 * represent.
+	 * </p>
+	 * 
+	 * @return a font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Font getSystemFont() {
+		checkDevice();
+		return Font.qt_new(this, QApplication.font());
+	}
+
+	/**
+	 * Returns <code>true</code> if the underlying window system prints out
+	 * warning messages on the console, and <code>setWarnings</code> had
+	 * previously been called with <code>true</code>.
+	 * 
+	 * @return <code>true</code>if warnings are being handled, and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public boolean getWarnings() {
+		checkDevice();
+		return false;
+	}
+
+	/**
+	 * Initializes any internal resources needed by the device.
+	 * <p>
+	 * This method is called after <code>create</code>.
+	 * </p>
+	 * <p>
+	 * If subclasses reimplement this method, they must call the
+	 * <code>super</code> implementation.
+	 * </p>
+	 * 
+	 * @see #create
+	 */
+	protected void init() {
+		/* Initialize the system font slot */
+		systemFont = getSystemFont();
+		QPalette palette = QApplication.style().standardPalette();
+		try {
+			// Mapping colors from the QPalette to SWT colors. Not all 
+			// colors are 100% right. Use snippet 235 and 235_1 to get 
+			// all colors displayed.
+
+			// Info
+			COLOR_INFO_FOREGROUND = palette.color(ColorGroup.Active, ColorRole.ToolTipText);
+			COLOR_INFO_BACKGROUND = palette.color(ColorGroup.Active, ColorRole.ToolTipBase);
+
+			// List
+			COLOR_LIST_BACKGROUND = palette.color(ColorGroup.Active, ColorRole.Base);
+			COLOR_LIST_FOREGROUND = palette.color(ColorGroup.Active, ColorRole.Text);
+			COLOR_LIST_SELECTION = palette.color(ColorGroup.Active, ColorRole.Highlight);
+			COLOR_LIST_SELECTION_TEXT = palette.color(ColorGroup.Active, ColorRole.HighlightedText);
+
+			// Title
+			COLOR_TITLE_BACKGROUND = new QColor(0, 84, 227); // palette.color(ColorGroup.Active, ColorRole.Highlight);
+			// TODO The required blue/grey does not exist in QPalette. Using grey as a substitute.
+			COLOR_TITLE_BACKGROUND_GRADIENT = new QColor(61, 149, 255);// palette.color(ColorGroup.Active, ColorRole.Light);
+			COLOR_TITLE_FOREGROUND = palette.color(ColorGroup.Active, ColorRole.HighlightedText);
+
+			// Inactive highlight
+			COLOR_TITLE_INACTIVE_BACKGROUND = new QColor(122, 150, 223);// palette.color(ColorGroup.Inactive, ColorRole.Dark);
+			// TODO The required shade of grey does not exist in QPalette. Should be a bit lighter.
+			COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT = new QColor(157, 185, 235); //palette.color(ColorGroup.Inactive, ColorRole.Light);
+			// TODO The required shade of grey does not exist in QPalette. Should be a bit lighter.
+			// Even lighter still than background gradient. It's the same at the moment.
+			COLOR_TITLE_INACTIVE_FOREGROUND = new QColor(216, 228, 248); //palette.color(ColorGroup.Inactive, ColorRole.BrightText);
+
+			// Window
+			//QApplication.style().
+			COLOR_WIDGET_BACKGROUND = palette.color(ColorGroup.Active, ColorRole.Window);//new QColor(239, 235, 231); 
+			COLOR_WIDGET_DARK_SHADOW = palette.color(ColorGroup.Active, ColorRole.Shadow);
+			COLOR_WIDGET_FOREGROUND = COLOR_WIDGET_BORDER = palette.color(ColorGroup.Active, ColorRole.WindowText);
+			COLOR_WIDGET_HIGHLIGHT_SHADOW = palette.color(ColorGroup.Active, ColorRole.Light);
+
+			COLOR_WIDGET_LIGHT_SHADOW = new QColor(236, 233, 216); //palette.color(ColorGroup.Active, ColorRole.Button);
+			COLOR_WIDGET_NORMAL_SHADOW = new QColor(157, 155, 144); //palette.color(ColorGroup.Active, ColorRole.Mid);
+
+		} finally {
+			palette.dispose();
+		}
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Device</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the platform specific GC data
+	 * @return the platform specific GC handle
+	 */
+	public abstract QPaintDeviceInterface internal_new_GC(GCData data);
+
+	/**
+	 * Invokes platform specific functionality to dispose a GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Device</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param hDC
+	 *            the platform specific GC handle
+	 * @param data
+	 *            the platform specific GC data
+	 */
+	public abstract void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data);
+
+	/**
+	 * Returns <code>true</code> if the device has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the device. When a device has been
+	 * disposed, it is an error to invoke any other method using the device.
+	 * 
+	 * @return <code>true</code> when the device is disposed and
+	 *         <code>false</code> otherwise
+	 */
+	public boolean isDisposed() {
+		synchronized (Device.class) {
+			return disposed;
+		}
+	}
+
+	/**
+	 * Loads the font specified by a file. The font will be present in the list
+	 * of fonts available to the application.
+	 * 
+	 * @param path
+	 *            the font file path
+	 * @return whether the font was successfully loaded
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if path is null</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Font
+	 * 
+	 * @since 3.3
+	 */
+	public boolean loadFont(String path) {
+		checkDevice();
+		if (path == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int retCode = QFontDatabase.addApplicationFont(path);
+		return retCode != -1; // -1 == font load failed
+	}
+
+	void new_Object(Object object) {
+		synchronized (trackingLock) {
+			for (int i = 0; i < objects.length; i++) {
+				if (objects[i] == null) {
+					objects[i] = object;
+					errors[i] = new Error();
+					return;
+				}
+			}
+			Object[] newObjects = new Object[objects.length + 128];
+			System.arraycopy(objects, 0, newObjects, 0, objects.length);
+			newObjects[objects.length] = object;
+			objects = newObjects;
+			Error[] newErrors = new Error[errors.length + 128];
+			System.arraycopy(errors, 0, newErrors, 0, errors.length);
+			newErrors[errors.length] = new Error();
+			errors = newErrors;
+		}
+	}
+
+	void printErrors() {
+		if (!DEBUG) {
+			return;
+		}
+		if (tracking) {
+			synchronized (trackingLock) {
+				if (objects == null || errors == null) {
+					return;
+				}
+				int objectCount = 0;
+				int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0;
+				int paths = 0, patterns = 0, regions = 0, textLayouts = 0, transforms = 0;
+				for (int i = 0; i < objects.length; i++) {
+					Object object = objects[i];
+					if (object != null) {
+						objectCount++;
+						if (object instanceof Color) {
+							colors++;
+						}
+						if (object instanceof Cursor) {
+							cursors++;
+						}
+						if (object instanceof Font) {
+							fonts++;
+						}
+						if (object instanceof GC) {
+							gcs++;
+						}
+						if (object instanceof Image) {
+							images++;
+						}
+						if (object instanceof Path) {
+							paths++;
+						}
+						if (object instanceof Pattern) {
+							patterns++;
+						}
+						if (object instanceof Region) {
+							regions++;
+						}
+						if (object instanceof TextLayout) {
+							textLayouts++;
+						}
+						if (object instanceof Transform) {
+							transforms++;
+						}
+					}
+				}
+				if (objectCount != 0) {
+					String string = "Summary: "; //$NON-NLS-1$
+					if (colors != 0) {
+						string += colors + " Color(s), ";//$NON-NLS-1$
+					}
+					if (cursors != 0) {
+						string += cursors + " Cursor(s), ";//$NON-NLS-1$
+					}
+					if (fonts != 0) {
+						string += fonts + " Font(s), ";//$NON-NLS-1$
+					}
+					if (gcs != 0) {
+						string += gcs + " GC(s), ";//$NON-NLS-1$
+					}
+					if (images != 0) {
+						string += images + " Image(s), ";//$NON-NLS-1$
+					}
+					if (paths != 0) {
+						string += paths + " Path(s), ";//$NON-NLS-1$
+					}
+					if (patterns != 0) {
+						string += patterns + " Pattern(s), ";//$NON-NLS-1$
+					}
+					if (regions != 0) {
+						string += regions + " Region(s), ";//$NON-NLS-1$
+					}
+					if (textLayouts != 0) {
+						string += textLayouts + " TextLayout(s), ";//$NON-NLS-1$
+					}
+					if (transforms != 0) {
+						string += transforms + " Transforms(s), ";//$NON-NLS-1$
+					}
+					if (string.length() != 0) {
+						string = string.substring(0, string.length() - 2);
+						System.err.println(string);
+					}
+					for (int i = 0; i < errors.length; i++) {
+						if (errors[i] != null) {
+							errors[i].printStackTrace(System.err);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Releases any internal resources back to the operating system and clears
+	 * all fields except the device handle.
+	 * <p>
+	 * When a device is destroyed, resources that were acquired on behalf of the
+	 * programmer need to be returned to the operating system. For example, if
+	 * the device allocated a font to be used as the system font, this font
+	 * would be freed in <code>release</code>. Also,to assist the garbage
+	 * collector and minimize the amount of memory that is not reclaimed when
+	 * the programmer keeps a reference to a disposed device, all fields except
+	 * the handle are zero'd. The handle is needed by <code>destroy</code>.
+	 * </p>
+	 * This method is called before <code>destroy</code>. </p>
+	 * <p>
+	 * If subclasses reimplement this method, they must call the
+	 * <code>super</code> implementation.
+	 * </p>
+	 * 
+	 * @see #dispose
+	 * @see #destroy
+	 */
+	protected void release() {
+		paintDevice = null;
+	}
+
+	/**
+	 * If the underlying window system supports printing warning messages to the
+	 * console, setting warnings to <code>false</code> prevents these messages
+	 * from being printed. If the argument is <code>true</code> then message
+	 * printing is not blocked.
+	 * 
+	 * @param warnings
+	 *            <code>true</code>if warnings should be printed, and
+	 *            <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setWarnings(boolean warnings) {
+		checkDevice();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/DeviceData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/DeviceData.java
new file mode 100644
index 0000000..8dd1012
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/DeviceData.java	
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+public class DeviceData {
+	/*
+	 * Debug fields - may not be honoured on some SWT platforms.
+	 */
+	public boolean debug;
+	public boolean tracking;
+	public Error[] errors;
+	public Object[] objects;
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Font.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Font.java
new file mode 100644
index 0000000..0758f4d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Font.java	
@@ -0,0 +1,379 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import com.trolltech.qt.gui.QFont;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.internal.qt.QtSupplementaryFontData;
+import org.eclipse.swt.internal.qt.SWQT;
+
+/**
+ * Instances of this class manage operating system resources that define how
+ * text looks when it is displayed. Fonts may be constructed by providing a
+ * device and either name, size and style information or a <code>FontData</code>
+ * object which encapsulates this data.
+ * <p>
+ * Application code must explicitly invoke the <code>Font.dispose()</code>
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see FontData
+ * @see <a href="http://www.eclipse.org/swt/snippets/#font">Font snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples:
+ *      GraphicsExample, PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+
+public final class Font extends Resource {
+
+	/**
+	 * the handle to the OS font resource (Warning: This field is platform
+	 * dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 */
+	private QFont font;
+
+	boolean extraFontStyle;
+	String xlfd;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Font() {
+	}
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Font(Device device) {
+		super(device);
+	}
+
+	/**
+	 * Constructs a new font given a device and font data which describes the
+	 * desired font's appearance.
+	 * <p>
+	 * You must dispose the font when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device to create the font on
+	 * @param fd
+	 *            the FontData that describes the desired font (must not be
+	 *            null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the fd argument is null</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if a font could not be created from
+	 *                the given font data</li>
+	 *                </ul>
+	 */
+	public Font(Device device, FontData fd) {
+		super(device);
+		init(fd);
+		init();
+	}
+
+	/**
+	 * Constructs a new font given a device and an array of font data which
+	 * describes the desired font's appearance.
+	 * <p>
+	 * You must dispose the font when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device to create the font on
+	 * @param fds
+	 *            the array of FontData that describes the desired font (must
+	 *            not be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the fds argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the length of fds is zero</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if any fd in the array is null</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if a font could not be created from
+	 *                the given font data</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public Font(Device device, FontData[] fds) {
+		super(device);
+		if (fds == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (fds.length == 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		for (int i = 0; i < fds.length; i++) {
+			if (fds[i] == null) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		init(fds[0]);
+		init();
+	}
+
+	/**
+	 * Constructs a new font given a device, a font name, the height of the
+	 * desired font in points, and a font style.
+	 * <p>
+	 * You must dispose the font when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device to create the font on
+	 * @param name
+	 *            the name of the font (must not be null)
+	 * @param height
+	 *            the font height in points
+	 * @param style
+	 *            a bit or combination of NORMAL, BOLD, ITALIC
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the name argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if a font could not be created from
+	 *                the given arguments</li>
+	 *                </ul>
+	 */
+	public Font(Device device, String name, int height, int style) {
+		super(device);
+		if (name == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		init(new FontData(name, height, style));
+		init();
+	}
+
+	public QFont getQFont() {
+		return font;
+	}
+
+	// /*public*/ Font(Device device, String name, float height, int style) {
+	// super(device);
+	// if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	// init(new FontData (name, height, style));
+	// init();
+	// }
+	@Override
+	void destroy() {
+		font.dispose(); // TODO_DISPOSE
+		font = null;
+
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (object == this) {
+			return true;
+		}
+		if (!(object instanceof Font)) {
+			return false;
+		}
+		Font font = (Font) object;
+		return this.getQFont().equals(font.getQFont());
+	}
+
+	/**
+	 * Returns an array of <code>FontData</code>s representing the receiver. On
+	 * Windows, only one FontData will be returned per font. On X however, a
+	 * <code>Font</code> object <em>may</em> be composed of multiple X fonts. To
+	 * support this case, we return an array of font data objects.
+	 * 
+	 * @return an array of font data objects describing the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public FontData[] getFontData() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		String family = font.family();
+		int pointSize = font.pointSize();
+		int weight = font.weight();
+		boolean italic = font.italic();
+
+		int style = SWT.NORMAL;
+		if (weight > SWQT.QT_FONTNORMAL) {
+			style |= SWT.BOLD;
+		}
+		if (italic) {
+			style |= SWT.ITALIC;
+		}
+		FontData data = new FontData(family, pointSize, style);
+		if (xlfd != null) {
+			data.xlfd = xlfd;
+		} else if (extraFontStyle) {
+			data.extraFontData = new QtSupplementaryFontData();
+			QtSupplementaryFontData extraData = data.extraFontData;
+			extraData.underline = font.underline() ? 1 : 0;
+			extraData.overline = font.overline() ? 1 : 0;
+			extraData.strikeOut = font.strikeOut() ? 1 : 0;
+			extraData.stretch = font.stretch();
+			extraData.fixedPitch = font.fixedPitch() ? 1 : 0;
+			extraData.style = font.style();
+			extraData.weight = font.weight();
+			extraData.styleStrategy = font.styleStrategy();
+		}
+		return new FontData[] { data };
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		if (font == null) {
+			return 0;
+		}
+		return font.toString().hashCode(); // TODO
+	}
+
+	void init(FontData fd) {
+		if (fd == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int weight = QFont.Weight.Normal.value();
+		boolean italic = false;
+		if (fd.extraFontData != null) {
+			weight = fd.extraFontData.weight;
+			italic = fd.extraFontData.style == QFont.Style.StyleItalic;
+		}
+
+		font = new QFont(fd.name, fd.getHeight(), weight, italic);
+		// TODO font can be BOLD AND ITALIC
+		if (fd.style == SWT.BOLD) {
+			font.setBold(true);
+		}
+		if (fd.style == SWT.ITALIC) {
+			font.setItalic(true);
+		}
+		// int lfHeight = fontData.lfHeight;
+		// fontData.lfHeight = device.computePixels(fd.height);
+		// handle = OS.CreateFontIndirect(logFont);
+		// fontData.lfHeight = lfHeight;
+		// if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	}
+
+	/**
+	 * Returns <code>true</code> if the font has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the font. When a font has been
+	 * disposed, it is an error to invoke any other method using the font.
+	 * 
+	 * @return <code>true</code> when the font is disposed and
+	 *         <code>false</code> otherwise
+	 */
+	@Override
+	public boolean isDisposed() {
+		return font == null;
+	}
+
+	/**
+	 * Returns a string containing a concise, human-readable description of the
+	 * receiver.
+	 * 
+	 * @return a string representation of the receiver
+	 */
+	@Override
+	public String toString() {
+		if (isDisposed()) {
+			return "Font {*DISPOSED*}"; //$NON-NLS-1$
+		}
+		return "Font {" + font.family() + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new font.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Font</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the color
+	 * @param handle
+	 *            the handle for the font
+	 * @return a new font object containing the specified device and handle
+	 */
+	public static Font qt_new(Device device, QFont fontParm) {
+		if (fontParm == null) {
+			return null;
+		}
+		if (device == null) {
+			device = Device.getDevice();
+		}
+		if (device == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		Font font = new Font();
+		font.font = fontParm;
+		font.device = device;
+		return font;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontData.java
new file mode 100644
index 0000000..89db2b0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontData.java	
@@ -0,0 +1,722 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Portion Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Nokia Corporation - Qt implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import com.trolltech.qt.gui.QFont;
+import com.trolltech.qt.gui.QFont.Style;
+import com.trolltech.qt.gui.QFont.StyleStrategy;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.qt.QtSupplementaryFontData;
+import org.eclipse.swt.internal.qt.SWQT;
+
+/**
+ * Instances of this class describe operating system fonts.
+ * <p>
+ * For platform-independent behaviour, use the get and set methods corresponding
+ * to the following properties:
+ * <dl>
+ * <dt>height</dt>
+ * <dd>the height of the font in points</dd>
+ * <dt>name</dt>
+ * <dd>the face name of the font, which may include the foundry</dd>
+ * <dt>style</dt>
+ * <dd>A bitwise combination of NORMAL, ITALIC and BOLD</dd>
+ * </dl>
+ * If extra, platform-dependent functionality is required:
+ * <ul>
+ * <li>On <em>Windows</em>, the data member of the <code>FontData</code>
+ * corresponds to a Windows <code>LOGFONT</code> structure whose fields may be
+ * retrieved and modified.</li>
+ * <li>On <em>X</em>, the fields of the <code>FontData</code> correspond to the
+ * entries in the font's XLFD name and may be retrieved and modified.
+ * </ul>
+ * Application code does <em>not</em> need to explicitly release the resources
+ * managed by each instance when those instances are no longer required, and
+ * thus no <code>dispose()</code> method is provided.
+ * 
+ * @see Font
+ */
+public final class FontData {
+	/**
+	 * the font name
+	 */
+	String name;
+
+	/**
+	 * The height of the font data in points
+	 */
+	int height;
+
+	/**
+	 * the font style
+	 */
+	int style;
+
+	/**
+	 * The locales of the font
+	 */
+	String lang, country, variant;
+
+	QtSupplementaryFontData extraFontData;
+	String xlfd;
+
+	public static final int FONT_DEF_HEIGHT = 12;
+
+	/**
+	 * Constructs a new uninitialized font data.
+	 */
+	public FontData() {
+		this("", FONT_DEF_HEIGHT, SWT.NORMAL); //$NON-NLS-1$
+	}
+
+	// The characters in the string must all be decimal digits
+	// the value must be given with radix 10
+
+	/**
+	 * Constructs a new FontData given a string representation in the form
+	 * generated by the <code>FontData.toString</code> method.
+	 * <p>
+	 * Note that the representation varies between platforms, and a FontData can
+	 * only be created from a string that was generated on the same platform.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the string representation of a <code>FontData</code> (must not
+	 *            be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument does not
+	 *                represent a valid description</li>
+	 *                </ul>
+	 * 
+	 * @see #toString
+	 */
+	public FontData(String string) {
+		if (string == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		parseFontDescriptor(string);
+		updateFontData();
+
+	}
+
+	/**
+	 * Constructs a new font data given a font name, the height of the desired
+	 * font in points, and a font style.
+	 * 
+	 * @param name
+	 *            the name of the font (must not be null)
+	 * @param height
+	 *            the font height in points
+	 * @param style
+	 *            a bit or combination of NORMAL, BOLD, ITALIC
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - when the font name is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+	 *                </ul>
+	 */
+	public FontData(String name, int height, int style) {
+		if (name == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (height < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		setName(name);
+		setHeight(height);
+		setStyle(style);
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (object == this) {
+			return true;
+		}
+		if (!(object instanceof FontData)) {
+			return false;
+		}
+
+		FontData data = (FontData) object;
+
+		if (!(xlfd == null && data.xlfd == null || xlfd != null && data.xlfd != null)) {
+			return false;
+		}
+
+		if (!(extraFontData == null && data.extraFontData == null || extraFontData != null
+				&& data.extraFontData != null)) {
+			return false;
+		}
+
+		if (xlfd != null) {
+			return xlfd.trim().equals(data.xlfd.trim());
+		}
+
+		boolean mainFontStyleEqual = name.equals(data.name) && height == data.height && style == data.style;
+		if (mainFontStyleEqual && extraFontData != null) {
+			return mainFontStyleEqual && extraFontData.underline == data.extraFontData.underline
+					&& extraFontData.underline == data.extraFontData.underline
+					&& extraFontData.overline == data.extraFontData.overline
+					&& extraFontData.strikeOut == data.extraFontData.strikeOut
+					&& extraFontData.stretch == data.extraFontData.stretch
+					&& extraFontData.fixedPitch == data.extraFontData.fixedPitch
+					&& extraFontData.style == data.extraFontData.style
+					&& extraFontData.weight == data.extraFontData.weight
+					&& extraFontData.styleStrategy == data.extraFontData.styleStrategy;
+		} else {
+			return mainFontStyleEqual;
+		}
+	}
+
+	/**
+	 * Returns the height of the receiver in points.
+	 * 
+	 * @return the height of this FontData
+	 * 
+	 * @see #setHeight(int)
+	 */
+	public int getHeight() {
+		return height;
+	}
+
+	/**
+	 * Returns the locale of the receiver.
+	 * <p>
+	 * The locale determines which platform character set this font is going to
+	 * use. Widgets and graphics operations that use this font will convert
+	 * UNICODE strings to the platform character set of the specified locale.
+	 * </p>
+	 * <p>
+	 * On platforms where there are multiple character sets for a given
+	 * language/country locale, the variant portion of the locale will determine
+	 * the character set.
+	 * </p>
+	 * 
+	 * @return the <code>String</code> representing a Locale object
+	 * @since 3.0
+	 */
+	public String getLocale() {
+		StringBuffer buffer = new StringBuffer();
+		char sep = '_';
+		if (lang != null) {
+			buffer.append(lang);
+			buffer.append(sep);
+		}
+		if (country != null) {
+			buffer.append(country);
+			buffer.append(sep);
+		}
+		if (variant != null) {
+			buffer.append(variant);
+		}
+
+		String result = buffer.toString();
+		int length = result.length();
+		if (length > 0) {
+			if (result.charAt(length - 1) == sep) {
+				result = result.substring(0, length - 1);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the name of the receiver. On platforms that support font
+	 * foundries, the return value will be the foundry followed by a dash ("-")
+	 * followed by the face name.
+	 * 
+	 * @return the name of this <code>FontData</code>
+	 * 
+	 * @see #setName
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Returns the style of the receiver which is a bitwise OR of one or more of
+	 * the <code>SWT</code> constants NORMAL, BOLD and ITALIC.
+	 * 
+	 * @return the style of this <code>FontData</code>
+	 * 
+	 * @see #setStyle
+	 */
+	public int getStyle() {
+		return style;
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		return name.hashCode() ^ height ^ style;
+	}
+
+	void parseFontDescriptor(String string) {
+		int start = 0;
+		int end = string.indexOf('|');
+		if (end == -1) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		String version1 = string.substring(start, end);
+		try {
+			if (Integer.parseInt(version1) != 1) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		} catch (NumberFormatException e) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		start = end + 1;
+		end = string.indexOf('|', start);
+		if (end == -1) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		String name = string.substring(start, end);
+
+		start = end + 1;
+		end = string.indexOf('|', start);
+		if (end == -1) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int height = 0;
+		try {
+			height = Integer.parseInt(string.substring(start, end));
+		} catch (NumberFormatException e) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		start = end + 1;
+		end = string.indexOf('|', start);
+		if (end == -1) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int style = 0;
+		try {
+			style = Integer.parseInt(string.substring(start, end));
+		} catch (NumberFormatException e) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		start = end + 1;
+		end = string.indexOf('|', start);
+		setName(name);
+		setHeight(height);
+		setStyle(style);
+		if (end == -1) {
+			return;
+		}
+		String platform = string.substring(start, end);
+
+		start = end + 1;
+		end = string.indexOf('|', start);
+		if (end == -1) {
+			return;
+		}
+		String version2 = string.substring(start, end);
+
+		if (platform.trim().toUpperCase().equals("QT") && version2.equals("1")) { //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+				extraFontData = new QtSupplementaryFontData();
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					return;
+				}
+				extraFontData.underline = Integer.parseInt(string.substring(start, end));
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					return;
+				}
+				extraFontData.overline = Integer.parseInt(string.substring(start, end));
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					return;
+				}
+				extraFontData.strikeOut = Integer.parseInt(string.substring(start, end));
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					return;
+				}
+				int stretch = Integer.parseInt(string.substring(start, end));
+				if (stretch > 0) {
+					if (stretch > 4000) {
+						stretch = 4000;
+					}
+					extraFontData.stretch = stretch;
+				}
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					extraFontData = null;
+					return;
+				}
+				extraFontData.fixedPitch = Integer.parseInt(string.substring(start, end));
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					return;
+				}
+				int fontStyle = Integer.parseInt(string.substring(start, end));
+				if (fontStyle == SWQT.QFONT_STYLE_NORMAL) {
+					extraFontData.style = Style.StyleNormal;
+				}
+				if (fontStyle == SWQT.QFONT_STYLE_ITALIC) {
+					extraFontData.style = Style.StyleItalic;
+				}
+				if (fontStyle == SWQT.QFONT_STYLE_OBLIQUE) {
+					extraFontData.style = Style.StyleOblique;
+				}
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					return;
+				}
+				int weight = Integer.parseInt(string.substring(start, end));
+				if (weight > -1) {
+					if (weight > 99) {
+						weight = 99;
+					}
+					extraFontData.weight = weight;
+				}
+				start = end + 1;
+				end = string.indexOf('|', start);
+				if (end == -1) {
+					return;
+				}
+				int styleStrategy = Integer.parseInt(string.substring(start, end));
+				int[] strategies = new int[] { SWQT.QFONT_STYLESTRATEGY_PREFERDEFALUT,
+						SWQT.QFONT_STYLESTRATEGY_PREFERBITMAP, SWQT.QFONT_STYLESTRATEGY_PREFERDEVICE,
+						SWQT.QFONT_STYLESTRATEGY_PREFEROUTLINE, SWQT.QFONT_STYLESTRATEGY_FORCEOUTLINE,
+						SWQT.QFONT_STYLESTRATEGY_NOANTIALIAS, SWQT.QFONT_STYLESTRATEGY_PREFERANTIALIAS,
+						SWQT.QFONT_STYLESTRATEGY_OPENGLCOMPATIABLE, SWQT.QFONT_STYLESTRATEGY_NOFONTMERGING };
+				boolean isValidStrategy = styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERQUALITY
+						|| styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERMATCH ? true : false;
+				for (int i = 0; i < strategies.length; i++) {
+					if ((styleStrategy & strategies[i]) == 0) {
+						continue;
+					} else {
+						if (styleStrategy == strategies[i]
+								|| styleStrategy == (strategies[i] | SWQT.QFONT_STYLESTRATEGY_PREFERQUALITY)
+								|| styleStrategy == (strategies[i] | SWQT.QFONT_STYLESTRATEGY_PREFERMATCH)) {
+							isValidStrategy = true;
+						}
+						break;
+					}
+				}
+				if (isValidStrategy) {
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_FORCEOUTLINE) {
+						extraFontData.styleStrategy = StyleStrategy.ForceOutline;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_NOANTIALIAS) {
+						extraFontData.styleStrategy = StyleStrategy.NoAntialias;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_NOFONTMERGING) {
+						extraFontData.styleStrategy = StyleStrategy.NoFontMerging;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_OPENGLCOMPATIABLE) {
+						extraFontData.styleStrategy = StyleStrategy.OpenGLCompatible;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERANTIALIAS) {
+						extraFontData.styleStrategy = StyleStrategy.PreferAntialias;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERBITMAP) {
+						extraFontData.styleStrategy = StyleStrategy.PreferBitmap;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERDEFALUT) {
+						extraFontData.styleStrategy = StyleStrategy.PreferDefault;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERDEVICE) {
+						extraFontData.styleStrategy = StyleStrategy.PreferDevice;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERMATCH) {
+						extraFontData.styleStrategy = StyleStrategy.PreferMatch;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFEROUTLINE) {
+						extraFontData.styleStrategy = StyleStrategy.PreferOutline;
+					}
+					if (styleStrategy == SWQT.QFONT_STYLESTRATEGY_PREFERQUALITY) {
+						extraFontData.styleStrategy = StyleStrategy.PreferQuality;
+					}
+				}
+			} catch (NumberFormatException e) {
+				extraFontData = null;
+			}
+		}
+		// else if (platform.trim().toUpperCase().equals("X11")
+		// && OS.windowServer == OS.WS_X11) {
+		// start = end + 1;
+		// end = string.indexOf('|', start);
+		// if (end == -1)
+		// return;
+		// xlfd = string.substring(start, end);
+		// if (xlfd.length() < 1) {
+		// xlfd = null;
+		// }
+		// }
+
+	}
+
+	/**
+	 * Sets the height of the receiver. The parameter is specified in terms of
+	 * points, where a point is one seventy-second of an inch.
+	 * 
+	 * @param height
+	 *            the height of the <code>FontData</code>
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+	 *                </ul>
+	 * 
+	 * @see #getHeight
+	 */
+	public void setHeight(int height) {
+		if (height < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.height = height;
+	}
+
+	/**
+	 * Sets the locale of the receiver.
+	 * <p>
+	 * The locale determines which platform character set this font is going to
+	 * use. Widgets and graphics operations that use this font will convert
+	 * UNICODE strings to the platform character set of the specified locale.
+	 * </p>
+	 * <p>
+	 * On platforms where there are multiple character sets for a given
+	 * language/country locale, the variant portion of the locale will determine
+	 * the character set.
+	 * </p>
+	 * 
+	 * @param locale
+	 *            the <code>String</code> representing a Locale object
+	 * @see java.util.Locale#toString
+	 */
+	public void setLocale(String locale) {
+		lang = country = variant = null;
+		if (locale != null) {
+			char sep = '_';
+			int length = locale.length();
+			int firstSep, secondSep;
+
+			firstSep = locale.indexOf(sep);
+			if (firstSep == -1) {
+				firstSep = secondSep = length;
+			} else {
+				secondSep = locale.indexOf(sep, firstSep + 1);
+				if (secondSep == -1) {
+					secondSep = length;
+				}
+			}
+			if (firstSep > 0) {
+				lang = locale.substring(0, firstSep);
+			}
+			if (secondSep > firstSep + 1) {
+				country = locale.substring(firstSep + 1, secondSep);
+			}
+			if (length > secondSep + 1) {
+				variant = locale.substring(secondSep + 1);
+			}
+		}
+	}
+
+	/**
+	 * Sets the name of the receiver.
+	 * <p>
+	 * Some platforms support font foundries. On these platforms, the name of
+	 * the font specified in setName() may have one of the following forms:
+	 * <ol>
+	 * <li>a face name (for example, "courier")</li>
+	 * <li>a foundry followed by a dash ("-") followed by a face name (for
+	 * example, "adobe-courier")</li>
+	 * </ol>
+	 * In either case, the name returned from getName() will include the
+	 * foundry.
+	 * </p>
+	 * <p>
+	 * On platforms that do not support font foundries, only the face name (for
+	 * example, "courier") is used in <code>setName()</code> and
+	 * <code>getName()</code>.
+	 * </p>
+	 * 
+	 * @param name
+	 *            the name of the font data (must not be null)
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - when the font name is null</li>
+	 *                </ul>
+	 * 
+	 * @see #getName
+	 */
+	public void setName(String name) {
+		if (name == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		this.name = name;
+	}
+
+	/**
+	 * Sets the style of the receiver to the argument which must be a bitwise OR
+	 * of one or more of the <code>SWT</code> constants NORMAL, BOLD and ITALIC.
+	 * All other style bits are ignored.
+	 * 
+	 * @param style
+	 *            the new style for this <code>FontData</code>
+	 * 
+	 * @see #getStyle
+	 */
+	public void setStyle(int style) {
+		this.style = style;
+	}
+
+	/**
+	 * Returns a string representation of the receiver which is suitable for
+	 * constructing an equivalent instance using the
+	 * <code>FontData(String)</code> constructor.
+	 * 
+	 * @return a string representation of the FontData
+	 * 
+	 * @see FontData
+	 */
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("1|"); //$NON-NLS-1$
+		buffer.append(getName());
+		buffer.append("|"); //$NON-NLS-1$
+		buffer.append(getHeight());
+		buffer.append("|"); //$NON-NLS-1$
+		buffer.append(getStyle());
+		buffer.append("|"); //$NON-NLS-1$
+		if (xlfd != null) {
+			buffer.append("X11|1|"); //$NON-NLS-1$
+			buffer.append(xlfd);
+			buffer.append("|"); //$NON-NLS-1$
+		} else if (extraFontData != null) {
+			buffer.append("QT|1|"); //$NON-NLS-1$
+			buffer.append(extraFontData.overline);
+			buffer.append("|"); //$NON-NLS-1$
+			buffer.append(extraFontData.underline);
+			buffer.append("|"); //$NON-NLS-1$
+			buffer.append(extraFontData.strikeOut);
+			buffer.append("|"); //$NON-NLS-1$
+			buffer.append(extraFontData.stretch);
+			buffer.append("|"); //$NON-NLS-1$
+			buffer.append(extraFontData.fixedPitch);
+			buffer.append("|"); //$NON-NLS-1$
+			buffer.append(extraFontData.style);
+			buffer.append("|"); //$NON-NLS-1$
+			buffer.append(extraFontData.weight);
+			buffer.append("|"); //$NON-NLS-1$
+			buffer.append(extraFontData.styleStrategy);
+			buffer.append("|"); //$NON-NLS-1$
+		}
+		return buffer.toString();
+	}
+
+	void updateFontData() {
+		if (extraFontData == null && xlfd == null) {
+			return;
+		}
+
+		boolean italic = (style & SWT.ITALIC) != 0;
+		int weight = SWQT.QT_FONTNORMAL;
+		if ((style & SWT.BOLD) != 0) {
+			weight = SWQT.QT_FONTBOLD;
+		}
+		QFont font = new QFont(name, height, weight, italic);
+
+		if (xlfd != null) {
+			font.setRawName(xlfd);
+
+		} else {
+			if (extraFontData.underline > -1) {
+				font.setUnderline(extraFontData.underline > 0 ? true : false);
+			}
+			if (extraFontData.overline > -1) {
+				font.setOverline(extraFontData.overline > 0 ? true : false);
+			}
+			if (extraFontData.strikeOut > -1) {
+				font.setStrikeOut(extraFontData.strikeOut > 0 ? true : false);
+			}
+			if (extraFontData.stretch > -1) {
+				font.setStretch(extraFontData.stretch);
+			}
+			if (extraFontData.fixedPitch > -1) {
+				font.setFixedPitch(extraFontData.fixedPitch > 0 ? true : false);
+			}
+			if (extraFontData.style != null) {
+				font.setStyle(extraFontData.style);
+			}
+			if (extraFontData.weight > -1) {
+				font.setWeight(extraFontData.weight);
+			}
+			if (extraFontData.styleStrategy != null) {
+				font.setStyleStrategy(extraFontData.styleStrategy);
+			}
+		}
+
+		name = font.family();
+		height = font.pointSize();
+		weight = font.weight();
+		italic = font.italic();
+		style = SWT.NORMAL;
+		if (weight > SWQT.QT_FONTNORMAL) {
+			style |= SWT.BOLD;
+		}
+		if (italic == true) {
+			style |= SWT.ITALIC;
+		}
+		if (extraFontData != null) {
+			extraFontData.underline = font.underline() == true ? 1 : 0;
+			extraFontData.overline = font.overline() == true ? 1 : 0;
+			extraFontData.strikeOut = font.strikeOut() == true ? 1 : 0;
+			extraFontData.stretch = font.stretch();
+			extraFontData.fixedPitch = font.fixedPitch() == true ? 1 : 0;
+			extraFontData.style = font.style();
+			extraFontData.weight = font.weight();
+			extraFontData.styleStrategy = font.styleStrategy();
+			font.dispose();
+		}
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontMetrics.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontMetrics.java
new file mode 100644
index 0000000..2be6f6e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/FontMetrics.java	
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import com.trolltech.qt.gui.QFontMetrics;
+
+/**
+ * Instances of this class provide measurement information about fonts including
+ * ascent, descent, height, leading space between rows, and average character
+ * width. <code>FontMetrics</code> are obtained from <code>GC</code>s using the
+ * <code>getFontMetrics()</code> method.
+ * 
+ * @see GC#getFontMetrics
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public final class FontMetrics {
+	private final int ascent;
+	private final int descent;
+	private final int aveCharWidth;
+	private final int leading;
+	private final int height;
+
+	private FontMetrics(int ascent, int descent, int aveCharWidth, int leading, int height) {
+		this.ascent = ascent;
+		this.descent = descent;
+		this.aveCharWidth = aveCharWidth;
+		this.leading = leading;
+		this.height = height;
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (object == this) {
+			return true;
+		}
+		if (!(object instanceof FontMetrics)) {
+			return false;
+		}
+		FontMetrics other = (FontMetrics) object;
+		return ascent == other.ascent && descent == other.descent && aveCharWidth == other.aveCharWidth
+				&& leading == other.leading && height == other.height;
+	}
+
+	/**
+	 * Returns the ascent of the font described by the receiver. A font's
+	 * <em>ascent</em> is the distance from the baseline to the top of actual
+	 * characters, not including any of the leading area, measured in pixels.
+	 * 
+	 * @return the ascent of the font
+	 */
+	public int getAscent() {
+		return ascent;
+	}
+
+	/**
+	 * Returns the average character width, measured in pixels, of the font
+	 * described by the receiver.
+	 * 
+	 * @return the average character width of the font
+	 */
+	public int getAverageCharWidth() {
+		return aveCharWidth;
+	}
+
+	/**
+	 * Returns the descent of the font described by the receiver. A font's
+	 * <em>descent</em> is the distance from the baseline to the bottom of
+	 * actual characters, not including any of the leading area, measured in
+	 * pixels.
+	 * 
+	 * @return the descent of the font
+	 */
+	public int getDescent() {
+		return descent;
+	}
+
+	/**
+	 * Returns the height of the font described by the receiver, measured in
+	 * pixels. A font's <em>height</em> is the sum of its ascent, descent and
+	 * leading area.
+	 * 
+	 * @return the height of the font
+	 * 
+	 * @see #getAscent
+	 * @see #getDescent
+	 * @see #getLeading
+	 */
+	public int getHeight() {
+		return height;
+	}
+
+	/**
+	 * Returns the leading area of the font described by the receiver. A font's
+	 * <em>leading area</em> is the space above its ascent which may include
+	 * accents or other marks.
+	 * 
+	 * @return the leading space of the font
+	 */
+	public int getLeading() {
+		return leading;
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		return ascent ^ descent ^ aveCharWidth ^ leading ^ height;
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new font metrics.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>FontMetrics</code>. It is marked public only so that it can be
+	 * shared within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param metrics
+	 *            the <code>QFontMetrics</code> containing information about a
+	 *            font
+	 * @return a new font metrics object containing the specified
+	 *         <code>TEXTMETRIC</code>
+	 */
+	public static FontMetrics internal_new(QFontMetrics qfm) {
+		return new FontMetrics(qfm.ascent(), qfm.descent(), qfm.averageCharWidth(), 0, qfm.height());
+	}
+
+	public static FontMetrics internal_new(Font font) {
+		return internal_new(new QFontMetrics(font.getQFont()));
+	}
+
+	public static FontMetrics internal_new(int ascent, int descent, int aveCharWidth, int leading, int height) {
+		return new FontMetrics(ascent, descent, aveCharWidth, leading, height);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java
new file mode 100644
index 0000000..026041b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java	
@@ -0,0 +1,3555 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import com.trolltech.qt.core.QPointF;
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.core.Qt.AlignmentFlag;
+import com.trolltech.qt.core.Qt.BGMode;
+import com.trolltech.qt.core.Qt.FillRule;
+import com.trolltech.qt.core.Qt.PenStyle;
+import com.trolltech.qt.core.Qt.SizeMode;
+import com.trolltech.qt.core.Qt.TextFlag;
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QBrush;
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QFontMetrics;
+import com.trolltech.qt.gui.QLinearGradient;
+import com.trolltech.qt.gui.QPaintDeviceInterface;
+import com.trolltech.qt.gui.QPainter;
+import com.trolltech.qt.gui.QPixmap;
+import com.trolltech.qt.gui.QPolygon;
+import com.trolltech.qt.gui.QRegion;
+import com.trolltech.qt.gui.QStyleOptionFocusRect;
+import com.trolltech.qt.gui.QStyle.PrimitiveElement;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Class <code>GC</code> is where all of the drawing capabilities that are
+ * supported by SWT are located. Instances are used to draw on either an
+ * <code>Image</code>, a <code>Control</code>, or directly on a
+ * <code>Display</code>.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * </dl>
+ * 
+ * <p>
+ * The SWT drawing coordinate system is the two-dimensional space with the
+ * origin (0,0) at the top left corner of the drawing area and with (x,y) values
+ * increasing to the right and downward respectively.
+ * </p>
+ * 
+ * <p>
+ * The result of drawing on an image that was created with an indexed palette
+ * using a color that is not in the palette is platform specific. Some platforms
+ * will match to the nearest color while other will draw the color itself. This
+ * happens because the allocated image might use a direct palette on platforms
+ * that do not support indexed palette.
+ * </p>
+ * 
+ * <p>
+ * Application code must explicitly invoke the <code>GC.dispose()</code> method
+ * to release the operating system resources managed by each instance when those
+ * instances are no longer required. This is <em>particularly</em> important on
+ * Windows95 and Windows98 where the operating system has a limited number of
+ * device contexts available.
+ * </p>
+ * 
+ * <p>
+ * Note: Only one of LEFT_TO_RIGHT and RIGHT_TO_LEFT may be specified.
+ * </p>
+ * 
+ * @see org.eclipse.swt.events.PaintEvent
+ * @see <a href="http://www.eclipse.org/swt/snippets/#gc">GC snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples:
+ *      GraphicsExample, PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public final class GC extends Resource {
+
+	/**
+	 * the handle to the OS device context (Warning: This field is platform
+	 * dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 */
+	private QPaintDeviceInterface paintDevice;
+	private QPainter activePainter;
+	private QRegion activeClipping;
+
+	public int handle;
+
+	private Drawable drawable;
+	private GCData data;
+	private FillRule fillRule;
+
+	private int antialias = SWT.OFF; // TODO make sure this flag does not get lost, currently not interpreted
+
+	private static final int FOREGROUND = 1 << 0;
+	private static final int BACKGROUND = 1 << 1;
+	private static final int FONT = 1 << 2;
+	private static final int LINE_STYLE = 1 << 3;
+	private static final int LINE_WIDTH = 1 << 4;
+	private static final int LINE_CAP = 1 << 5;
+	private static final int LINE_JOIN = 1 << 6;
+	private static final int LINE_MITERLIMIT = 1 << 7;
+	private static final int FOREGROUND_TEXT = 1 << 8;
+	private static final int BACKGROUND_TEXT = 1 << 9;
+	private static final int BRUSH = 1 << 10;
+	private static final int PEN = 1 << 11;
+	private static final int NULL_BRUSH = 1 << 12;
+	private static final int NULL_PEN = 1 << 13;
+	private static final int DRAW_OFFSET = 1 << 14;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	GC() {
+	}
+
+	/**
+	 * Constructs a new instance of this class which has been configured to draw
+	 * on the specified drawable. Sets the foreground color, background color
+	 * and font in the GC to match those in the drawable.
+	 * <p>
+	 * You must dispose the graphics context when it is no longer required.
+	 * </p>
+	 * 
+	 * @param drawable
+	 *            the drawable to draw on
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the drawable is null</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if there is no current device</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the drawable is an image
+	 *                that is not a bitmap or an icon - if the drawable is an
+	 *                image or printer that is already selected into another
+	 *                graphics context</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                GC creation</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS if not called from the
+	 *                thread that created the drawable</li>
+	 *                </ul>
+	 */
+	public GC(Drawable drawable) {
+		this(drawable, SWT.NONE);
+	}
+
+	/**
+	 * Constructs a new instance of this class which has been configured to draw
+	 * on the specified drawable. Sets the foreground color, background color
+	 * and font in the GC to match those in the drawable.
+	 * <p>
+	 * You must dispose the graphics context when it is no longer required.
+	 * </p>
+	 * 
+	 * @param drawable
+	 *            the drawable to draw on
+	 * @param style
+	 *            the style of GC to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the drawable is null</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if there is no current device</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the drawable is an image
+	 *                that is not a bitmap or an icon - if the drawable is an
+	 *                image or printer that is already selected into another
+	 *                graphics context</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                GC creation</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS if not called from the
+	 *                thread that created the drawable</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public GC(Drawable drawable, int style) {
+		if (drawable == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		GCData data = new GCData();
+		data.style = checkStyle(style);
+		QPaintDeviceInterface paintDevice = drawable.internal_new_GC(data);
+		Device device = data.device;
+		if (device == null) {
+			device = Device.getDevice();
+		}
+		if (device == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		this.device = data.device = device;
+		init(drawable, data, paintDevice);
+		init();
+	}
+
+	private QPainter getActivePainter() {
+		if (activePainter == null) {
+			activePainter = new QPainter();
+			//			if (paintDevice.paintingActive()) {
+			//System.out.println("new painter for " + paintDevice + "active: " + paintDevice.paintingActive());
+			//				//paintDevice.paintEngine().end();
+			//			}
+		}
+
+		if (!activePainter.isActive()) {
+			activePainter.begin(paintDevice);
+		}
+
+		if (!activePainter.isActive()) {
+			System.out.println("inactive painter for: " + paintDevice + " painter: " //$NON-NLS-1$ //$NON-NLS-2$
+					+ paintDevice.paintEngine().painter());
+			//			RuntimeException re = new RuntimeException();
+			//			re.printStackTrace();
+		}
+
+		if (activeClipping != null) {
+			activePainter.setClipRegion(activeClipping);
+		}
+		return activePainter;
+	}
+
+	static int checkStyle(int style) {
+		if ((style & SWT.LEFT_TO_RIGHT) != 0) {
+			style &= ~SWT.RIGHT_TO_LEFT;
+		}
+		return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	}
+
+	void init(Drawable drawable, GCData data, QPaintDeviceInterface paintDevice) {
+		this.paintDevice = paintDevice;
+
+		Color foreground = data.foregroundColor;
+		if (foreground != null) {
+			data.state &= ~(FOREGROUND | FOREGROUND_TEXT | PEN);
+		} else {
+			data.foregroundColor = data.device.getSystemColor(SWT.COLOR_BLACK);
+		}
+		Color background = data.backgroundColor;
+		if (background != null) {
+			data.state &= ~(BACKGROUND | BACKGROUND_TEXT | BRUSH);
+		} else {
+			data.backgroundColor = data.device.getSystemColor(SWT.COLOR_WHITE);
+		}
+		data.state &= ~(NULL_BRUSH | NULL_PEN);
+		Font font = data.font;
+		if (font != null) {
+			data.state &= ~FONT;
+		} else {
+			data.font = device.getSystemFont();
+		}
+		Image image = data.image;
+		if (image != null) {
+			image.setMemGC(this);
+		}
+		if ((data.style & SWT.RIGHT_TO_LEFT) != 0) {
+			data.style |= SWT.MIRRORED;
+		}
+		this.drawable = drawable;
+		this.data = data;
+	}
+
+	/**
+	 * Copies a rectangular area of the receiver at the specified position into
+	 * the image, which must be of type <code>SWT.BITMAP</code>.
+	 * 
+	 * @param image
+	 *            the image to copy into
+	 * @param x
+	 *            the x coordinate in the receiver of the area to be copied
+	 * @param y
+	 *            the y coordinate in the receiver of the area to be copied
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image is not a bitmap
+	 *                or has been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void copyArea(Image image, int x, int y) {
+		// TODO
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		if (image == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (!image.isBitmap() || image.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+
+	/**
+	 * Copies a rectangular area of the receiver at the source position onto the
+	 * receiver at the destination position.
+	 * 
+	 * @param srcX
+	 *            the x coordinate in the receiver of the area to be copied
+	 * @param srcY
+	 *            the y coordinate in the receiver of the area to be copied
+	 * @param width
+	 *            the width of the area to copy
+	 * @param height
+	 *            the height of the area to copy
+	 * @param destX
+	 *            the x coordinate in the receiver of the area to copy to
+	 * @param destY
+	 *            the y coordinate in the receiver of the area to copy to
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY) {
+		copyArea(srcX, srcY, width, height, destX, destY, true);
+	}
+
+	/**
+	 * Copies a rectangular area of the receiver at the source position onto the
+	 * receiver at the destination position.
+	 * 
+	 * @param srcX
+	 *            the x coordinate in the receiver of the area to be copied
+	 * @param srcY
+	 *            the y coordinate in the receiver of the area to be copied
+	 * @param width
+	 *            the width of the area to copy
+	 * @param height
+	 *            the height of the area to copy
+	 * @param destX
+	 *            the x coordinate in the receiver of the area to copy to
+	 * @param destY
+	 *            the y coordinate in the receiver of the area to copy to
+	 * @param paint
+	 *            if <code>true</code> paint events will be generated for old
+	 *            and obscured areas
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//TODO
+		/*
+		 * Feature in WinCE. The function WindowFromDC is not part of the WinCE
+		 * SDK. The fix is to remember the HWND.
+		 */
+		//		int /* long */hwnd = data.hwnd;
+		//		if (hwnd == 0) {
+		//			OS.BitBlt(handle, destX, destY, width, height, handle, srcX, srcY, OS.SRCCOPY);
+		//		} else {
+		//			RECT lprcClip = null;
+		//			int /* long */hrgn = OS.CreateRectRgn(0, 0, 0, 0);
+		//			if (OS.GetClipRgn(handle, hrgn) == 1) {
+		//				lprcClip = new RECT();
+		//				OS.GetRgnBox(hrgn, lprcClip);
+		//			}
+		//			OS.DeleteObject(hrgn);
+		//			RECT lprcScroll = new RECT();
+		//			OS.SetRect(lprcScroll, srcX, srcY, srcX + width, srcY + height);
+		//			int flags = paint ? OS.SW_INVALIDATE | OS.SW_ERASE : 0;
+		//			int res = OS.ScrollWindowEx(hwnd, destX - srcX, destY - srcY, lprcScroll, lprcClip, 0, null, flags);
+		//
+		//			/*
+		//			 * Feature in WinCE. ScrollWindowEx does not accept combined
+		//			 * vertical and horizontal scrolling. The fix is to do a BitBlt and
+		//			 * invalidate the appropriate source area.
+		//			 */
+		//		}
+	}
+
+	/**
+	 * Disposes of the operating system resources associated with the graphics
+	 * context. Applications must dispose of all GCs which they allocate.
+	 * 
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS if not called from the
+	 *                thread that created the drawable</li>
+	 *                </ul>
+	 */
+	@Override
+	void destroy() {
+		if (activePainter != null) {
+			activePainter.end();
+			//System.out.println("end painter for " + paintDevice);
+			activePainter = null;
+		}
+
+		Image image = data.image;
+		if (image != null) {
+			image.setMemGC(null);
+		}
+
+		if (drawable != null) {
+			drawable.internal_dispose_GC(paintDevice, data);
+		}
+		drawable = null;
+		data.image = null;
+		data = null;
+		paintDevice = null;
+	}
+
+	/**
+	 * Draws the outline of a circular or elliptical arc within the specified
+	 * rectangular area.
+	 * <p>
+	 * The resulting arc begins at <code>startAngle</code> and extends for
+	 * <code>arcAngle</code> degrees, using the current color. Angles are
+	 * interpreted such that 0 degrees is at the 3 o'clock position. A positive
+	 * value indicates a counter-clockwise rotation while a negative value
+	 * indicates a clockwise rotation.
+	 * </p>
+	 * <p>
+	 * The center of the arc is the center of the rectangle whose origin is (
+	 * <code>x</code>, <code>y</code>) and whose size is specified by the
+	 * <code>width</code> and <code>height</code> arguments.
+	 * </p>
+	 * <p>
+	 * The resulting arc covers an area <code>width + 1</code> pixels wide by
+	 * <code>height + 1</code> pixels tall.
+	 * </p>
+	 * 
+	 * @param x
+	 *            the x coordinate of the upper-left corner of the arc to be
+	 *            drawn
+	 * @param y
+	 *            the y coordinate of the upper-left corner of the arc to be
+	 *            drawn
+	 * @param width
+	 *            the width of the arc to be drawn
+	 * @param height
+	 *            the height of the arc to be drawn
+	 * @param startAngle
+	 *            the beginning angle
+	 * @param arcAngle
+	 *            the angular extent of the arc, relative to the start angle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawArc(x, y, width, height, startAngle, arcAngle);
+	}
+
+	/**
+	 * Draws a rectangle, based on the specified arguments, which has the
+	 * appearance of the platform's <em>focus rectangle</em> if the platform
+	 * supports such a notion, and otherwise draws a simple rectangle in the
+	 * receiver's foreground color.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle
+	 * @param y
+	 *            the y coordinate of the rectangle
+	 * @param width
+	 *            the width of the rectangle
+	 * @param height
+	 *            the height of the rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawRectangle(int, int, int, int)
+	 */
+	public void drawFocus(int x, int y, int width, int height) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		QStyleOptionFocusRect option = new QStyleOptionFocusRect();
+		option.rect().setRect(x, y, width, height);
+		QApplication.style().drawPrimitive(PrimitiveElement.PE_FrameFocusRect, option, painter);
+	}
+
+	/**
+	 * Draws the given image in the receiver at the specified coordinates.
+	 * 
+	 * @param image
+	 *            the image to draw
+	 * @param x
+	 *            the x coordinate of where to draw
+	 * @param y
+	 *            the y coordinate of where to draw
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the given coordinates are
+	 *                outside the bounds of the image</li>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if no handles are available to
+	 *                perform the operation</li>
+	 *                </ul>
+	 */
+	public void drawImage(Image image, int x, int y) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (image == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (image.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		QPainter painter = getActivePainter();
+		QPixmap pic = image.getQPixmap();
+		painter.drawPixmap(x, y, pic);
+	}
+
+	/**
+	 * Copies a rectangular area from the source image into a (potentially
+	 * different sized) rectangular area in the receiver. If the source and
+	 * destination areas are of differing sizes, then the source area will be
+	 * stretched or shrunk to fit the destination area as it is copied. The copy
+	 * fails if any part of the source rectangle lies outside the bounds of the
+	 * source image, or if any of the width or height arguments are negative.
+	 * 
+	 * @param image
+	 *            the source image
+	 * @param srcX
+	 *            the x coordinate in the source image to copy from
+	 * @param srcY
+	 *            the y coordinate in the source image to copy from
+	 * @param srcWidth
+	 *            the width in pixels to copy from the source
+	 * @param srcHeight
+	 *            the height in pixels to copy from the source
+	 * @param destX
+	 *            the x coordinate in the destination to copy to
+	 * @param destY
+	 *            the y coordinate in the destination to copy to
+	 * @param destWidth
+	 *            the width in pixels of the destination rectangle
+	 * @param destHeight
+	 *            the height in pixels of the destination rectangle
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if any of the width or height
+	 *                arguments are negative.
+	 *                <li>ERROR_INVALID_ARGUMENT - if the source rectangle is
+	 *                not contained within the bounds of the source image</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES - if no handles are available to
+	 *                perform the operation</li>
+	 *                </ul>
+	 */
+	public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY,
+			int destWidth, int destHeight) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (srcWidth == 0 || srcHeight == 0 || destWidth == 0 || destHeight == 0) {
+			return;
+		}
+		if (srcX < 0 || srcY < 0 || srcWidth < 0 || srcHeight < 0 || destWidth < 0 || destHeight < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (image == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (image.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.drawPixmap(new QRect(destX, destY, destWidth, destHeight), image.getQPixmap(), new QRect(srcX, srcY,
+				srcWidth, srcHeight));
+	}
+
+	/**
+	 * Draws a line, using the foreground color, between the points (
+	 * <code>x1</code>, <code>y1</code>) and (<code>x2</code>, <code>y2</code>).
+	 * 
+	 * @param x1
+	 *            the first point's x coordinate
+	 * @param y1
+	 *            the first point's y coordinate
+	 * @param x2
+	 *            the second point's x coordinate
+	 * @param y2
+	 *            the second point's y coordinate
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawLine(int x1, int y1, int x2, int y2) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawLine(x1, y1, x2, y2);
+	}
+
+	/**
+	 * Draws the outline of an oval, using the foreground color, within the
+	 * specified rectangular area.
+	 * <p>
+	 * The result is a circle or ellipse that fits within the rectangle
+	 * specified by the <code>x</code>, <code>y</code>, <code>width</code>, and
+	 * <code>height</code> arguments.
+	 * </p>
+	 * <p>
+	 * The oval covers an area that is <code>width + 1</code> pixels wide and
+	 * <code>height + 1</code> pixels tall.
+	 * </p>
+	 * 
+	 * @param x
+	 *            the x coordinate of the upper left corner of the oval to be
+	 *            drawn
+	 * @param y
+	 *            the y coordinate of the upper left corner of the oval to be
+	 *            drawn
+	 * @param width
+	 *            the width of the oval to be drawn
+	 * @param height
+	 *            the height of the oval to be drawn
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawOval(int x, int y, int width, int height) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawEllipse(x, y, width, height);
+	}
+
+	/**
+	 * Draws the path described by the parameter.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param path
+	 *            the path to draw
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see Path
+	 * 
+	 * @since 3.1
+	 */
+	public void drawPath(Path path) {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		if (path == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (path.handle == 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			//checkGC(DRAW);
+			//TODO
+			//		int /* long */gdipGraphics = data.gdipGraphics;
+			//		Gdip.Graphics_TranslateTransform(gdipGraphics, data.gdipXOffset, data.gdipYOffset, Gdip.MatrixOrderPrepend);
+			//		Gdip.Graphics_DrawPath(gdipGraphics, data.gdipPen, path.handle);
+			//		Gdip.Graphics_TranslateTransform(gdipGraphics, -data.gdipXOffset, -data.gdipYOffset, Gdip.MatrixOrderPrepend);
+		}
+	}
+
+	/**
+	 * Draws a pixel, using the foreground color, at the specified point (
+	 * <code>x</code>, <code>y</code>).
+	 * <p>
+	 * Note that the receiver's line attributes do not affect this operation.
+	 * </p>
+	 * 
+	 * @param x
+	 *            the point's x coordinate
+	 * @param y
+	 *            the point's y coordinate
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void drawPoint(int x, int y) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawPoint(x, y);
+	}
+
+	/**
+	 * Draws the closed polygon which is defined by the specified array of
+	 * integer coordinates, using the receiver's foreground color. The array
+	 * contains alternating x and y values which are considered to represent
+	 * points which are the vertices of the polygon. Lines are drawn between
+	 * each consecutive pair, and between the first pair and last pair in the
+	 * array.
+	 * 
+	 * @param pointArray
+	 *            an array of alternating x and y values which are the vertices
+	 *            of the polygon
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT if pointArray is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawPolygon(int[] pointArray) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		validatePointArray(pointArray);
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawPolygon(createPolygonFromArray(pointArray));
+	}
+
+	/**
+	 * Draws the polyline which is defined by the specified array of integer
+	 * coordinates, using the receiver's foreground color. The array contains
+	 * alternating x and y values which are considered to represent points which
+	 * are the corners of the polyline. Lines are drawn between each consecutive
+	 * pair, but not between the first pair and last pair in the array.
+	 * 
+	 * @param pointArray
+	 *            an array of alternating x and y values which are the corners
+	 *            of the polyline
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point array is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawPolyline(int[] pointArray) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (pointArray == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		validatePointArray(pointArray);
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawPolyline(createPolygonFromArray(pointArray));
+	}
+
+	/**
+	 * Draws the outline of the rectangle specified by the arguments, using the
+	 * receiver's foreground color. The left and right edges of the rectangle
+	 * are at <code>x</code> and <code>x + width</code>. The top and bottom
+	 * edges are at <code>y</code> and <code>y + height</code>.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle to be drawn
+	 * @param y
+	 *            the y coordinate of the rectangle to be drawn
+	 * @param width
+	 *            the width of the rectangle to be drawn
+	 * @param height
+	 *            the height of the rectangle to be drawn
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawRectangle(int x, int y, int width, int height) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawRect(x, y, width, height);
+	}
+
+	/**
+	 * Draws the outline of the specified rectangle, using the receiver's
+	 * foreground color. The left and right edges of the rectangle are at
+	 * <code>rect.x</code> and <code>rect.x + rect.width</code>. The top and
+	 * bottom edges are at <code>rect.y</code> and
+	 * <code>rect.y + rect.height</code>.
+	 * 
+	 * @param rect
+	 *            the rectangle to draw
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawRectangle(Rectangle rect) {
+		if (rect == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		drawRectangle(rect.x, rect.y, rect.width, rect.height);
+	}
+
+	/**
+	 * Draws the outline of the round-cornered rectangle specified by the
+	 * arguments, using the receiver's foreground color. The left and right
+	 * edges of the rectangle are at <code>x</code> and <code>x + width</code>.
+	 * The top and bottom edges are at <code>y</code> and
+	 * <code>y + height</code>. The <em>roundness</em> of the corners is
+	 * specified by the <code>arcWidth</code> and <code>arcHeight</code>
+	 * arguments, which are respectively the width and height of the ellipse
+	 * used to draw the corners.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle to be drawn
+	 * @param y
+	 *            the y coordinate of the rectangle to be drawn
+	 * @param width
+	 *            the width of the rectangle to be drawn
+	 * @param height
+	 *            the height of the rectangle to be drawn
+	 * @param arcWidth
+	 *            the width of the arc
+	 * @param arcHeight
+	 *            the height of the arc
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setPen(getForeground().getColor());
+		painter.drawRoundedRect(x, y, width, height, arcWidth, arcHeight, SizeMode.AbsoluteSize);
+	}
+
+	/**
+	 * Draws the given string, using the receiver's current font and foreground
+	 * color. No tab expansion or carriage return processing will be performed.
+	 * The background of the rectangular area where the string is being drawn
+	 * will be filled with the receiver's background color.
+	 * 
+	 * @param string
+	 *            the string to be drawn
+	 * @param x
+	 *            the x coordinate of the top left corner of the rectangular
+	 *            area where the string is to be drawn
+	 * @param y
+	 *            the y coordinate of the top left corner of the rectangular
+	 *            area where the string is to be drawn
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawString(String string, int x, int y) {
+		drawString(string, x, y, false);
+	}
+
+	/**
+	 * Draws the given string, using the receiver's current font and foreground
+	 * color. No tab expansion or carriage return processing will be performed.
+	 * If <code>isTransparent</code> is <code>true</code>, then the background
+	 * of the rectangular area where the string is being drawn will not be
+	 * modified, otherwise it will be filled with the receiver's background
+	 * color.
+	 * 
+	 * @param string
+	 *            the string to be drawn
+	 * @param x
+	 *            the x coordinate of the top left corner of the rectangular
+	 *            area where the string is to be drawn
+	 * @param y
+	 *            the y coordinate of the top left corner of the rectangular
+	 *            area where the string is to be drawn
+	 * @param isTransparent
+	 *            if <code>true</code> the background will be transparent,
+	 *            otherwise it will be opaque
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawString(String string, int x, int y, boolean isTransparent) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		if (isTransparent) {
+			painter.setBackgroundMode(BGMode.TransparentMode);
+		} else {
+			painter.setBackgroundMode(BGMode.OpaqueMode);
+			painter.setBackground(new QBrush(getBackground().getColor()));
+		}
+		painter.setFont(data.font.getQFont());
+		painter.setPen(getForeground().getColor());
+		//System.out.println("drawText(" + x + ", " + y + ", " + string + ")");
+
+		painter.drawText(x, y + getHightCorrection(painter), string);
+	}
+
+	private int getHightCorrection(QPainter painter) {
+		QFontMetrics fm = painter.fontMetrics();
+		return fm.ascent();
+	}
+
+	/**
+	 * Draws the given string, using the receiver's current font and foreground
+	 * color. Tab expansion and carriage return processing are performed. The
+	 * background of the rectangular area where the text is being drawn will be
+	 * filled with the receiver's background color.
+	 * 
+	 * @param string
+	 *            the string to be drawn
+	 * @param x
+	 *            the x coordinate of the top left corner of the rectangular
+	 *            area where the text is to be drawn
+	 * @param y
+	 *            the y coordinate of the top left corner of the rectangular
+	 *            area where the text is to be drawn
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawText(String string, int x, int y) {
+		drawText(string, x, y, SWT.DRAW_DELIMITER | SWT.DRAW_TAB);
+	}
+
+	/**
+	 * Draws the given string, using the receiver's current font and foreground
+	 * color. Tab expansion and carriage return processing are performed. If
+	 * <code>isTransparent</code> is <code>true</code>, then the background of
+	 * the rectangular area where the text is being drawn will not be modified,
+	 * otherwise it will be filled with the receiver's background color.
+	 * 
+	 * @param string
+	 *            the string to be drawn
+	 * @param x
+	 *            the x coordinate of the top left corner of the rectangular
+	 *            area where the text is to be drawn
+	 * @param y
+	 *            the y coordinate of the top left corner of the rectangular
+	 *            area where the text is to be drawn
+	 * @param isTransparent
+	 *            if <code>true</code> the background will be transparent,
+	 *            otherwise it will be opaque
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawText(String string, int x, int y, boolean isTransparent) {
+		int flags = SWT.DRAW_DELIMITER | SWT.DRAW_TAB;
+		if (isTransparent) {
+			flags |= SWT.DRAW_TRANSPARENT;
+		}
+		drawText(string, x, y, flags);
+	}
+
+	/**
+	 * Draws the given string, using the receiver's current font and foreground
+	 * color. Tab expansion, line delimiter and mnemonic processing are
+	 * performed according to the specified flags. If <code>flags</code>
+	 * includes <code>DRAW_TRANSPARENT</code>, then the background of the
+	 * rectangular area where the text is being drawn will not be modified,
+	 * otherwise it will be filled with the receiver's background color.
+	 * <p>
+	 * The parameter <code>flags</code> may be a combination of:
+	 * <dl>
+	 * <dt><b>DRAW_DELIMITER</b></dt>
+	 * <dd>draw multiple lines</dd>
+	 * <dt><b>DRAW_TAB</b></dt>
+	 * <dd>expand tabs</dd>
+	 * <dt><b>DRAW_MNEMONIC</b></dt>
+	 * <dd>underline the mnemonic character</dd>
+	 * <dt><b>DRAW_TRANSPARENT</b></dt>
+	 * <dd>transparent background</dd>
+	 * </dl>
+	 * </p>
+	 * 
+	 * @param string
+	 *            the string to be drawn
+	 * @param x
+	 *            the x coordinate of the top left corner of the rectangular
+	 *            area where the text is to be drawn
+	 * @param y
+	 *            the y coordinate of the top left corner of the rectangular
+	 *            area where the text is to be drawn
+	 * @param flags
+	 *            the flags specifying how to process the text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void drawText(String string, int x, int y, int flags) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		if ((flags & SWT.DRAW_TRANSPARENT) != 0) {
+			painter.setBackgroundMode(BGMode.TransparentMode);
+			painter.setBackground(new QBrush(getBackground().getColor()));
+		}
+
+		int translatedFlags = translateTextFlags(flags);
+
+		painter.setPen(getForeground().getColor());
+
+		QRect r = painter.boundingRect(0, 0, 0, 0, translatedFlags, string);
+
+		//System.out.println("drawText(" + x + ", " + y + ", " + r.width() + ", " + r.height() + ", " + string + ")");
+		painter.drawText(x, y, r.width(), r.height(), translatedFlags, string);
+	}
+
+	/**
+	 * @param flags
+	 * @return
+	 */
+	private int translateTextFlags(int flags) {
+		int translatedFlags = AlignmentFlag.AlignTop.value() | AlignmentFlag.AlignLeft.value();
+		if ((flags & SWT.DRAW_DELIMITER) == 0) {
+			translatedFlags |= TextFlag.TextSingleLine.value();
+		}
+		if ((flags & SWT.DRAW_TAB) != 0) {
+			translatedFlags |= TextFlag.TextExpandTabs.value();
+		}
+		if ((flags & SWT.DRAW_MNEMONIC) != 0) {
+			translatedFlags |= TextFlag.TextShowMnemonic.value();
+		}
+		return translatedFlags;
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		return object == this || object instanceof GC && paintDevice == ((GC) object).paintDevice;
+	}
+
+	/**
+	 * Fills the interior of a circular or elliptical arc within the specified
+	 * rectangular area, with the receiver's background color.
+	 * <p>
+	 * The resulting arc begins at <code>startAngle</code> and extends for
+	 * <code>arcAngle</code> degrees, using the current color. Angles are
+	 * interpreted such that 0 degrees is at the 3 o'clock position. A positive
+	 * value indicates a counter-clockwise rotation while a negative value
+	 * indicates a clockwise rotation.
+	 * </p>
+	 * <p>
+	 * The center of the arc is the center of the rectangle whose origin is (
+	 * <code>x</code>, <code>y</code>) and whose size is specified by the
+	 * <code>width</code> and <code>height</code> arguments.
+	 * </p>
+	 * <p>
+	 * The resulting arc covers an area <code>width + 1</code> pixels wide by
+	 * <code>height + 1</code> pixels tall.
+	 * </p>
+	 * 
+	 * @param x
+	 *            the x coordinate of the upper-left corner of the arc to be
+	 *            filled
+	 * @param y
+	 *            the y coordinate of the upper-left corner of the arc to be
+	 *            filled
+	 * @param width
+	 *            the width of the arc to be filled
+	 * @param height
+	 *            the height of the arc to be filled
+	 * @param startAngle
+	 *            the beginning angle
+	 * @param arcAngle
+	 *            the angular extent of the arc, relative to the start angle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawArc
+	 */
+	public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setBrush(getBackground().getColor());
+		//painter.setPen(getBackground().getColor());
+		painter.setPen(PenStyle.NoPen);
+		painter.drawArc(x, y, width, height, startAngle, arcAngle);
+	}
+
+	/**
+	 * Fills the interior of the specified rectangle with a gradient sweeping
+	 * from left to right or top to bottom progressing from the receiver's
+	 * foreground color to its background color.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle to be filled
+	 * @param y
+	 *            the y coordinate of the rectangle to be filled
+	 * @param width
+	 *            the width of the rectangle to be filled, may be negative
+	 *            (inverts direction of gradient if horizontal)
+	 * @param height
+	 *            the height of the rectangle to be filled, may be negative
+	 *            (inverts direction of gradient if vertical)
+	 * @param vertical
+	 *            if true sweeps from top to bottom, else sweeps from left to
+	 *            right
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawRectangle(int, int, int, int)
+	 */
+	public void fillGradientRectangle(int x, int y, int width, int height, boolean vertical) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (width == 0 || height == 0) {
+			return;
+		}
+		//		if (true) {
+		//			return;
+		//		}
+
+		QColor fromColor = getForeground().getColor();
+		QColor toColor = getBackground().getColor();
+
+		boolean swapColors = false;
+		if (width < 0) {
+			x += width;
+			width = -width;
+			if (!vertical) {
+				swapColors = true;
+			}
+		}
+		if (height < 0) {
+			y += height;
+			height = -height;
+			if (vertical) {
+				swapColors = true;
+			}
+		}
+		if (swapColors) {
+			QColor tmp = fromColor;
+			fromColor = toColor;
+			toColor = tmp;
+		}
+		if (fromColor.equals(toColor)) {
+			fillRectangle(x, y, width, height);
+			return;
+		}
+
+		QPointF p1 = new QPointF(), p2 = new QPointF();
+		p1.setX(x);
+		p1.setY(y);
+		if (vertical) {
+			p2.setX(p1.x());
+			p2.setY(p1.y() + height);
+		} else {
+			p2.setX(p1.x() + width);
+			p2.setY(p1.y());
+		}
+		QPainter painter = getActivePainter();
+		QLinearGradient fade = new QLinearGradient(p1, p2);
+		fade.setColorAt(0.0, fromColor);
+		fade.setColorAt(1.0, toColor);
+		QBrush brush = new QBrush(fade);
+		painter.fillRect(x, y, width, height, brush);
+	}
+
+	/**
+	 * Fills the interior of an oval, within the specified rectangular area,
+	 * with the receiver's background color.
+	 * 
+	 * @param x
+	 *            the x coordinate of the upper left corner of the oval to be
+	 *            filled
+	 * @param y
+	 *            the y coordinate of the upper left corner of the oval to be
+	 *            filled
+	 * @param width
+	 *            the width of the oval to be filled
+	 * @param height
+	 *            the height of the oval to be filled
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawOval
+	 */
+	public void fillOval(int x, int y, int width, int height) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setBrush(getBackground().getColor());
+		painter.setPen(getBackground().getColor());
+		painter.drawEllipse(x, y, width, height);
+	}
+
+	/**
+	 * Fills the path described by the parameter.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param path
+	 *            the path to fill
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see Path
+	 * 
+	 * @since 3.1
+	 */
+	public void fillPath(Path path) {
+		//TODO
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		if (path == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (path.handle == 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+
+	/**
+	 * Fills the interior of the closed polygon which is defined by the
+	 * specified array of integer coordinates, using the receiver's background
+	 * color. The array contains alternating x and y values which are considered
+	 * to represent points which are the vertices of the polygon. Lines are
+	 * drawn between each consecutive pair, and between the first pair and last
+	 * pair in the array.
+	 * 
+	 * @param pointArray
+	 *            an array of alternating x and y values which are the vertices
+	 *            of the polygon
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT if pointArray is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawPolygon
+	 */
+	public void fillPolygon(int[] pointArray) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		validatePointArray(pointArray);
+		QPainter painter = getActivePainter();
+		painter.setBrush(getBackground().getColor());
+		painter.setPen(getBackground().getColor());
+		painter.drawPolygon(createPolygonFromArray(pointArray), FillRule.WindingFill);
+	}
+
+	private void validatePointArray(int[] pointArray) {
+		if (pointArray == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (pointArray.length % 2 != 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+	}
+
+	public static QPolygon createPolygonFromArray(int[] pointArray) {
+		QPolygon polygon = new QPolygon();
+		for (int i = 0; i < pointArray.length; i += 2) {
+			polygon.add(pointArray[i], pointArray[i + 1]);
+		}
+		return polygon;
+	}
+
+	/**
+	 * Fills the interior of the rectangle specified by the arguments, using the
+	 * receiver's background color.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle to be filled
+	 * @param y
+	 *            the y coordinate of the rectangle to be filled
+	 * @param width
+	 *            the width of the rectangle to be filled
+	 * @param height
+	 *            the height of the rectangle to be filled
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawRectangle(int, int, int, int)
+	 */
+	public void fillRectangle(int x, int y, int width, int height) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (width < 0) {
+			x = x + width;
+			width = -width;
+		}
+		if (height < 0) {
+			y = y + height;
+			height = -height;
+		}
+		QPainter painter = getActivePainter();
+		painter.fillRect(x, y, width, height, getBackground().getColor());
+	}
+
+	/**
+	 * Fills the interior of the specified rectangle, using the receiver's
+	 * background color.
+	 * 
+	 * @param rect
+	 *            the rectangle to be filled
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawRectangle(int, int, int, int)
+	 */
+	public void fillRectangle(Rectangle rect) {
+		if (rect == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		fillRectangle(rect.x, rect.y, rect.width, rect.height);
+	}
+
+	/**
+	 * Fills the interior of the round-cornered rectangle specified by the
+	 * arguments, using the receiver's background color.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle to be filled
+	 * @param y
+	 *            the y coordinate of the rectangle to be filled
+	 * @param width
+	 *            the width of the rectangle to be filled
+	 * @param height
+	 *            the height of the rectangle to be filled
+	 * @param arcWidth
+	 *            the width of the arc
+	 * @param arcHeight
+	 *            the height of the arc
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #drawRoundRectangle
+	 */
+	public void fillRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		painter.setBrush(getBackground().getColor());
+		painter.setPen(getBackground().getColor());
+		painter.drawRoundedRect(x, y, width, height, arcWidth, arcHeight);
+	}
+
+	void flush() {
+	}
+
+	/**
+	 * Returns the <em>advance width</em> of the specified character in the font
+	 * which is currently selected into the receiver.
+	 * <p>
+	 * The advance width is defined as the horizontal distance the cursor should
+	 * move after printing the character in the selected font.
+	 * </p>
+	 * 
+	 * @param ch
+	 *            the character to measure
+	 * @return the distance in the x direction to move past the character before
+	 *         painting the next
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getAdvanceWidth(char ch) {
+
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter activePainter = getActivePainter();
+		return activePainter.fontMetrics().width(ch);
+		//		//checkGC(FONT);
+		//		int tch = ch;
+		//		if (ch > 0x7F) {
+		//			TCHAR buffer = new TCHAR(getCodePage(), ch, false);
+		//			tch = buffer.tcharAt(0);
+		//		}
+		//		int[] width = new int[1];
+		//		OS.GetCharWidth(handle, tch, tch, width);
+		//		return width[0];
+	}
+
+	/**
+	 * Returns the receiver's alpha value. The alpha value is between 0
+	 * (transparent) and 255 (opaque).
+	 * 
+	 * @return the alpha value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getAlpha() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.alpha;
+	}
+
+	/**
+	 * Returns the receiver's anti-aliasing setting value, which will be one of
+	 * <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or <code>SWT.ON</code>.
+	 * Note that this controls anti-aliasing for all <em>non-text drawing</em>
+	 * operations.
+	 * 
+	 * @return the anti-aliasing setting
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #getTextAntialias
+	 * 
+	 * @since 3.1
+	 */
+	public int getAntialias() {
+		return antialias;
+		//		if (handle == 0) {
+		//			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//		}
+		//		if (data.gdipGraphics == 0)
+		//			return SWT.DEFAULT;
+		//		int mode = Gdip.Graphics_GetSmoothingMode(data.gdipGraphics);
+		//		switch (mode) {
+		//		case Gdip.SmoothingModeDefault:
+		//			return SWT.DEFAULT;
+		//		case Gdip.SmoothingModeHighSpeed:
+		//		case Gdip.SmoothingModeNone:
+		//			return SWT.OFF;
+		//		case Gdip.SmoothingModeAntiAlias:
+		//		case Gdip.SmoothingModeAntiAlias8x8:
+		//		case Gdip.SmoothingModeHighQuality:
+		//			return SWT.ON;
+		//		}
+		//		return SWT.DEFAULT;
+	}
+
+	/**
+	 * Returns the background color.
+	 * 
+	 * @return the receiver's background color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Color getBackground() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.backgroundColor;
+	}
+
+	/**
+	 * Returns the background pattern. The default value is <code>null</code>.
+	 * 
+	 * @return the receiver's background pattern
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Pattern
+	 * 
+	 * @since 3.1
+	 */
+	public Pattern getBackgroundPattern() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.backgroundPattern;
+	}
+
+	/**
+	 * Returns the width of the specified character in the font selected into
+	 * the receiver.
+	 * <p>
+	 * The width is defined as the space taken up by the actual character, not
+	 * including the leading and tailing whitespace or overhang.
+	 * </p>
+	 * 
+	 * @param ch
+	 *            the character to measure
+	 * @return the width of the character
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getCharWidth(char ch) {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//checkGC(FONT);
+		// TODO
+		return 10;
+	}
+
+	/**
+	 * Returns the bounding rectangle of the receiver's clipping region. If no
+	 * clipping region is set, the return value will be a rectangle which covers
+	 * the entire bounds of the object the receiver is drawing on.
+	 * 
+	 * @return the bounding rectangle of the clipping region
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Rectangle getClipping() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QPainter painter = getActivePainter();
+		if (painter.hasClipping()) {
+			return QtSWTConverter.convert(painter.clipRegion());
+		} else {
+			return new Rectangle(0, 0, paintDevice.width(), paintDevice.height());
+		}
+	}
+
+	/**
+	 * Sets the region managed by the argument to the current clipping region of
+	 * the receiver.
+	 * 
+	 * @param region
+	 *            the region to fill with the clipping region
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the region is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the region is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void getClipping(Region region) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (region == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (region.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		QPainter painter = getActivePainter();
+		Rectangle rect;
+		if (painter.hasClipping()) {
+			rect = QtSWTConverter.convert(painter.clipRegion());
+		} else {
+			rect = new Rectangle(0, 0, paintDevice.width(), paintDevice.height());
+		}
+		region.add(rect);
+	}
+
+	/**
+	 * Returns the receiver's fill rule, which will be one of
+	 * <code>SWT.FILL_EVEN_ODD</code> or <code>SWT.FILL_WINDING</code>.
+	 * 
+	 * @return the receiver's fill rule
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getFillRule() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (fillRule == null || fillRule.equals(FillRule.WindingFill)) {
+			return SWT.FILL_WINDING;
+		}
+		return SWT.FILL_EVEN_ODD;
+	}
+
+	/**
+	 * Sets the receiver's fill rule to the parameter, which must be one of
+	 * <code>SWT.FILL_EVEN_ODD</code> or <code>SWT.FILL_WINDING</code>.
+	 * 
+	 * @param rule
+	 *            the new fill rule
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rule is not one of
+	 *                <code>SWT.FILL_EVEN_ODD</code> or
+	 *                <code>SWT.FILL_WINDING</code></li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setFillRule(int rule) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		switch (rule) {
+		case SWT.FILL_WINDING:
+			fillRule = FillRule.WindingFill;
+			break;
+		case SWT.FILL_EVEN_ODD:
+			fillRule = FillRule.OddEvenFill;
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+
+	/**
+	 * Returns the font currently being used by the receiver to draw and measure
+	 * text.
+	 * 
+	 * @return the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Font getFont() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.font;
+	}
+
+	/**
+	 * Returns a FontMetrics which contains information about the font currently
+	 * being used by the receiver to draw and measure text.
+	 * 
+	 * @return font metrics for the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public FontMetrics getFontMetrics() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		//checkGC(FONT);
+		//if (!paintDevice.paintingActive()) {
+		return FontMetrics.internal_new(data.font);
+		//		}
+		//		QPainter painter = getActivePainter();
+		//		painter.setFont(data.font.getQFont());
+		//		try {
+		//			return FontMetrics.internal_new(painter.fontMetrics());
+		//		} finally {
+		//			painter.end();
+		//		}
+
+	}
+
+	/**
+	 * Returns the receiver's foreground color.
+	 * 
+	 * @return the color used for drawing foreground things
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Color getForeground() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.foregroundColor;
+	}
+
+	/**
+	 * Returns the foreground pattern. The default value is <code>null</code>.
+	 * 
+	 * @return the receiver's foreground pattern
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Pattern
+	 * 
+	 * @since 3.1
+	 */
+	public Pattern getForegroundPattern() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.foregroundPattern;
+	}
+
+	/**
+	 * Returns the GCData.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>GC</code>. It is marked public only so that it can be shared within
+	 * the packages provided by SWT. It is not available on all platforms, and
+	 * should never be called from application code.
+	 * </p>
+	 * 
+	 * @return the receiver's GCData
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see GCData
+	 * 
+	 * @since 3.2
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public GCData getGCData() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data;
+	}
+
+	/**
+	 * Returns the receiver's interpolation setting, which will be one of
+	 * <code>SWT.DEFAULT</code>, <code>SWT.NONE</code>, <code>SWT.LOW</code> or
+	 * <code>SWT.HIGH</code>.
+	 * 
+	 * @return the receiver's interpolation setting
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getInterpolation() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return SWT.DEFAULT;
+		//TODO
+		//		int mode = Gdip.Graphics_GetInterpolationMode(data.gdipGraphics);
+		//		switch (mode) {
+		//		case Gdip.InterpolationModeDefault:
+		//			return SWT.DEFAULT;
+		//		case Gdip.InterpolationModeNearestNeighbor:
+		//			return SWT.NONE;
+		//		case Gdip.InterpolationModeBilinear:
+		//		case Gdip.InterpolationModeLowQuality:
+		//			return SWT.LOW;
+		//		case Gdip.InterpolationModeBicubic:
+		//		case Gdip.InterpolationModeHighQualityBilinear:
+		//		case Gdip.InterpolationModeHighQualityBicubic:
+		//		case Gdip.InterpolationModeHighQuality:
+		//			return SWT.HIGH;
+		//		}
+		//		return SWT.DEFAULT;
+	}
+
+	/**
+	 * Returns the receiver's line attributes.
+	 * 
+	 * @return the line attributes used for drawing lines
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public LineAttributes getLineAttributes() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		float[] dashes = null;
+		if (data.lineDashes != null) {
+			dashes = new float[data.lineDashes.length];
+			System.arraycopy(data.lineDashes, 0, dashes, 0, dashes.length);
+		}
+		return new LineAttributes(data.lineWidth, data.lineCap, data.lineJoin, data.lineStyle, dashes,
+				data.lineDashesOffset, data.lineMiterLimit);
+	}
+
+	/**
+	 * Returns the receiver's line cap style, which will be one of the constants
+	 * <code>SWT.CAP_FLAT</code>, <code>SWT.CAP_ROUND</code>, or
+	 * <code>SWT.CAP_SQUARE</code>.
+	 * 
+	 * @return the cap style used for drawing lines
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getLineCap() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.lineCap;
+	}
+
+	/**
+	 * Returns the receiver's line dash style. The default value is
+	 * <code>null</code>.
+	 * 
+	 * @return the line dash style used for drawing lines
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int[] getLineDash() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (data.lineDashes == null) {
+			return null;
+		}
+		int[] lineDashes = new int[data.lineDashes.length];
+		for (int i = 0; i < lineDashes.length; i++) {
+			lineDashes[i] = (int) data.lineDashes[i];
+		}
+		return lineDashes;
+	}
+
+	/**
+	 * Returns the receiver's line join style, which will be one of the
+	 * constants <code>SWT.JOIN_MITER</code>, <code>SWT.JOIN_ROUND</code>, or
+	 * <code>SWT.JOIN_BEVEL</code>.
+	 * 
+	 * @return the join style used for drawing lines
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getLineJoin() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.lineJoin;
+	}
+
+	/**
+	 * Returns the receiver's line style, which will be one of the constants
+	 * <code>SWT.LINE_SOLID</code>, <code>SWT.LINE_DASH</code>,
+	 * <code>SWT.LINE_DOT</code>, <code>SWT.LINE_DASHDOT</code> or
+	 * <code>SWT.LINE_DASHDOTDOT</code>.
+	 * 
+	 * @return the style used for drawing lines
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getLineStyle() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.lineStyle;
+	}
+
+	/**
+	 * Returns the width that will be used when drawing lines for all of the
+	 * figure drawing operations (that is, <code>drawLine</code>,
+	 * <code>drawRectangle</code>, <code>drawPolyline</code>, and so forth.
+	 * 
+	 * @return the receiver's line width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getLineWidth() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return (int) data.lineWidth;
+	}
+
+	/**
+	 * Returns the receiver's style information.
+	 * <p>
+	 * Note that the value which is returned by this method <em>may
+	 * not match</em> the value which was provided to the constructor when the
+	 * receiver was created. This can occur when the underlying operating system
+	 * does not support a particular combination of requested styles.
+	 * </p>
+	 * 
+	 * @return the style bits
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public int getStyle() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return data.style;
+	}
+
+	/**
+	 * Returns the receiver's text drawing anti-aliasing setting value, which
+	 * will be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+	 * <code>SWT.ON</code>. Note that this controls anti-aliasing <em>only</em>
+	 * for text drawing operations.
+	 * 
+	 * @return the anti-aliasing setting
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #getAntialias
+	 * 
+	 * @since 3.1
+	 */
+	public int getTextAntialias() {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//		if (data.gdipGraphics == 0)
+		return SWT.DEFAULT;
+		// TODO
+		//		int mode = Gdip.Graphics_GetTextRenderingHint(data.gdipGraphics);
+		//		switch (mode) {
+		//		case Gdip.TextRenderingHintSystemDefault:
+		//			return SWT.DEFAULT;
+		//		case Gdip.TextRenderingHintSingleBitPerPixel:
+		//		case Gdip.TextRenderingHintSingleBitPerPixelGridFit:
+		//			return SWT.OFF;
+		//		case Gdip.TextRenderingHintAntiAlias:
+		//		case Gdip.TextRenderingHintAntiAliasGridFit:
+		//		case Gdip.TextRenderingHintClearTypeGridFit:
+		//			return SWT.ON;
+		//		}
+		//		return SWT.DEFAULT;
+	}
+
+	/**
+	 * Sets the parameter to the transform that is currently being used by the
+	 * receiver.
+	 * 
+	 * @param transform
+	 *            the destination to copy the transform into
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Transform
+	 * 
+	 * @since 3.1
+	 */
+	public void getTransform(Transform transform) {
+		//TODO
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		if (transform == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (transform.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			//		int /* long */gdipGraphics = data.gdipGraphics;
+			//		if (gdipGraphics != 0) {
+			//			Gdip.Graphics_GetTransform(gdipGraphics, transform.handle);
+			//			int /* long */identity = identity();
+			//			Gdip.Matrix_Invert(identity);
+			//			Gdip.Matrix_Multiply(transform.handle, identity, Gdip.MatrixOrderAppend);
+			//			Gdip.Matrix_delete(identity);
+			//		} else {
+			//			transform.setElements(1, 0, 0, 1, 0, 0);
+			//		}
+		}
+	}
+
+	/**
+	 * Returns <code>true</code> if this GC is drawing in the mode where the
+	 * resulting color in the destination is the <em>exclusive or</em> of the
+	 * color values in the source and the destination, and <code>false</code> if
+	 * it is drawing in the mode where the destination color is being replaced
+	 * with the source color value.
+	 * 
+	 * @return <code>true</code> true if the receiver is in XOR mode, and false
+	 *         otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public boolean getXORMode() {
+		//TODO
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//		int rop2 = 0;
+		//		rop2 = OS.GetROP2(handle);
+		return false; //rop2 == OS.R2_XORPEN;
+	}
+
+	/**
+	 * If the argument is <code>true</code>, puts the receiver in a drawing mode
+	 * where the resulting color in the destination is the <em>exclusive or</em>
+	 * of the color values in the source and the destination, and if the
+	 * argument is <code>false</code>, puts the receiver in a drawing mode where
+	 * the destination color is replaced with the source color value.
+	 * <p>
+	 * Note that this mode in fundamentally unsupportable on certain platforms,
+	 * notably Carbon (Mac OS X). Clients that want their code to run on all
+	 * platforms need to avoid this method.
+	 * </p>
+	 * 
+	 * @param xor
+	 *            if <code>true</code>, then <em>xor</em> mode is used,
+	 *            otherwise <em>source copy</em> mode is used
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @deprecated this functionality is not supported on some platforms
+	 */
+	@Deprecated
+	public void setXORMode(boolean xor) {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//TODO
+		//OS.SetROP2(handle, xor ? OS.R2_XORPEN : OS.R2_COPYPEN);
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return paintDevice.hashCode();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver has a clipping region set into
+	 * it, and <code>false</code> otherwise. If this method returns false, the
+	 * receiver will draw on all available space in the destination. If it
+	 * returns true, it will draw only in the area that is covered by the region
+	 * that can be accessed with <code>getClipping(region)</code>.
+	 * 
+	 * @return <code>true</code> if the GC has a clipping region, and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public boolean isClipped() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return activeClipping != null;
+	}
+
+	/**
+	 * Returns <code>true</code> if the GC has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the GC. When a GC has been
+	 * disposed, it is an error to invoke any other method using the GC.
+	 * 
+	 * @return <code>true</code> when the GC is disposed and <code>false</code>
+	 *         otherwise
+	 */
+	@Override
+	public boolean isDisposed() {
+		return paintDevice == null;
+	}
+
+	/**
+	 * Sets the receiver to always use the operating system's advanced graphics
+	 * subsystem for all graphics operations if the argument is
+	 * <code>true</code>. If the argument is <code>false</code>, the advanced
+	 * graphics subsystem is no longer used, advanced graphics state is cleared
+	 * and the normal graphics subsystem is used from now on.
+	 * <p>
+	 * Normally, the advanced graphics subsystem is invoked automatically when
+	 * any one of the alpha, antialias, patterns, interpolation, paths, clipping
+	 * or transformation operations in the receiver is requested. When the
+	 * receiver is switched into advanced mode, the advanced graphics subsystem
+	 * performs both advanced and normal graphics operations. Because the two
+	 * subsystems are different, their output may differ. Switching to advanced
+	 * graphics before any graphics operations are performed ensures that the
+	 * output is consistent.
+	 * </p>
+	 * <p>
+	 * Advanced graphics may not be installed for the operating system. In this
+	 * case, this operation does nothing. Some operating system have only one
+	 * graphics subsystem, so switching from normal to advanced graphics does
+	 * nothing. However, switching from advanced to normal graphics will always
+	 * clear the advanced graphics state, even for operating systems that have
+	 * only one graphics subsystem.
+	 * </p>
+	 * 
+	 * @param advanced
+	 *            the new advanced graphics state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #setAlpha
+	 * @see #setAntialias
+	 * @see #setBackgroundPattern
+	 * @see #setClipping(Path)
+	 * @see #setForegroundPattern
+	 * @see #setLineAttributes
+	 * @see #setInterpolation
+	 * @see #setTextAntialias
+	 * @see #setTransform
+	 * @see #getAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public void setAdvanced(boolean advanced) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+	}
+
+	/**
+	 * Returns <code>true</code> if receiver is using the operating system's
+	 * advanced graphics subsystem. Otherwise, <code>false</code> is returned to
+	 * indicate that normal graphics are in use.
+	 * <p>
+	 * Advanced graphics may not be installed for the operating system. In this
+	 * case, <code>false</code> is always returned. Some operating system have
+	 * only one graphics subsystem. If this subsystem supports advanced
+	 * graphics, then <code>true</code> is always returned. If any graphics
+	 * operation such as alpha, antialias, patterns, interpolation, paths,
+	 * clipping or transformation has caused the receiver to switch from regular
+	 * to advanced graphics mode, <code>true</code> is returned. If the receiver
+	 * has been explicitly switched to advanced mode and this mode is supported,
+	 * <code>true</code> is returned.
+	 * </p>
+	 * 
+	 * @return the advanced value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public boolean getAdvanced() {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		// Qt is Advanced :)
+		return true;
+	}
+
+	/**
+	 * Sets the receiver's anti-aliasing value to the parameter, which must be
+	 * one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+	 * <code>SWT.ON</code>. Note that this controls anti-aliasing for all
+	 * <em>non-text drawing</em> operations.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param antialias
+	 *            the anti-aliasing setting
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter is not one
+	 *                of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+	 *                <code>SWT.ON</code></li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * @see #setTextAntialias
+	 * 
+	 * @since 3.1
+	 */
+	public void setAntialias(int antialias) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		this.antialias = antialias;
+		//		if (handle == 0) {
+		//			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		// TODO
+		//		if (data.gdipGraphics == 0 && antialias == SWT.DEFAULT)
+		//			return;
+		//		int mode = 0;
+		//		switch (antialias) {
+		//		case SWT.DEFAULT:
+		//			mode = Gdip.SmoothingModeDefault;
+		//			break;
+		//		case SWT.OFF:
+		//			mode = Gdip.SmoothingModeNone;
+		//			break;
+		//		case SWT.ON:
+		//			mode = Gdip.SmoothingModeAntiAlias;
+		//			break;
+		//		default:
+		//			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		//		}
+		//		}
+	}
+
+	/**
+	 * Sets the receiver's alpha value which must be between 0 (transparent) and
+	 * 255 (opaque).
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param alpha
+	 *            the alpha value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public void setAlpha(int alpha) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		//TODO
+		data.alpha = alpha & 0xFF;
+		data.state &= ~(BACKGROUND | FOREGROUND);
+	}
+
+	/**
+	 * Sets the background color. The background color is used for fill
+	 * operations and as the background color when text is drawn.
+	 * 
+	 * @param color
+	 *            the new background color for the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the color has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setBackground(Color color) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (color == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (data.backgroundPattern == null && data.backgroundColor.equals(color)) {
+			return;
+		}
+		data.backgroundPattern = null;
+		data.backgroundColor = color;
+		data.state &= ~(BACKGROUND | BACKGROUND_TEXT);
+	}
+
+	/**
+	 * Sets the background pattern. The default value is <code>null</code>.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param pattern
+	 *            the new background pattern
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see Pattern
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public void setBackgroundPattern(Pattern pattern) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (pattern != null && pattern.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (data.backgroundPattern == pattern) {
+			return;
+		}
+		data.backgroundPattern = pattern;
+		data.state &= ~BACKGROUND;
+	}
+
+	/**
+	 * Sets the area of the receiver which can be changed by drawing operations
+	 * to the rectangular area specified by the arguments.
+	 * 
+	 * @param x
+	 *            the x coordinate of the clipping rectangle
+	 * @param y
+	 *            the y coordinate of the clipping rectangle
+	 * @param width
+	 *            the width of the clipping rectangle
+	 * @param height
+	 *            the height of the clipping rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setClipping(int x, int y, int width, int height) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		activeClipping = new QRegion(x, y, width, height);
+	}
+
+	/**
+	 * Sets the area of the receiver which can be changed by drawing operations
+	 * to the path specified by the argument.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param path
+	 *            the clipping path.
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the path has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see Path
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public void setClipping(Path path) {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (path != null && path.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (path == null) {
+			activeClipping = null;
+		}
+		//TODO
+	}
+
+	/**
+	 * Sets the area of the receiver which can be changed by drawing operations
+	 * to the rectangular area specified by the argument. Specifying
+	 * <code>null</code> for the rectangle reverts the receiver's clipping area
+	 * to its original value.
+	 * 
+	 * @param rect
+	 *            the clipping rectangle or <code>null</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setClipping(Rectangle rect) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (rect != null) {
+			activeClipping = new QRegion(rect.x, rect.y, rect.width, rect.height);
+		} else {
+			activeClipping = null;
+		}
+	}
+
+	/**
+	 * Sets the area of the receiver which can be changed by drawing operations
+	 * to the region specified by the argument. Specifying <code>null</code> for
+	 * the region reverts the receiver's clipping area to its original value.
+	 * 
+	 * @param region
+	 *            the clipping region or <code>null</code>
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the region has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setClipping(Region region) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (region != null && region.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (region != null) {
+			activeClipping = region.getQRegion();
+		} else {
+			activeClipping = null;
+		}
+	}
+
+	/**
+	 * Sets the font which will be used by the receiver to draw and measure text
+	 * to the argument. If the argument is null, then a default font appropriate
+	 * for the platform will be used instead.
+	 * 
+	 * @param font
+	 *            the new font for the receiver, or null to indicate a default
+	 *            font
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the font has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setFont(Font font) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (font != null && font.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		data.font = font != null ? font : data.device.getSystemFont();
+		data.state &= ~FONT;
+	}
+
+	/**
+	 * Sets the foreground color. The foreground color is used for drawing
+	 * operations including when text is drawn.
+	 * 
+	 * @param color
+	 *            the new foreground color for the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the color has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setForeground(Color color) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (color == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (data.foregroundPattern == null && color.equals(data.foregroundColor)) {
+			return;
+		}
+		data.foregroundPattern = null;
+		data.foregroundColor = color;
+		data.state &= ~(FOREGROUND | FOREGROUND_TEXT);
+	}
+
+	/**
+	 * Sets the foreground pattern. The default value is <code>null</code>.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param pattern
+	 *            the new foreground pattern
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see Pattern
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public void setForegroundPattern(Pattern pattern) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (pattern != null && pattern.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		//		if (data.gdipGraphics == 0 && pattern == null)
+		//			return;
+		// initGdip();
+		if (data.foregroundPattern == pattern) {
+			return;
+		}
+		data.foregroundPattern = pattern;
+		data.state &= ~FOREGROUND;
+	}
+
+	/**
+	 * Sets the receiver's interpolation setting to the parameter, which must be
+	 * one of <code>SWT.DEFAULT</code>, <code>SWT.NONE</code>,
+	 * <code>SWT.LOW</code> or <code>SWT.HIGH</code>.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param interpolation
+	 *            the new interpolation setting
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rule is not one of
+	 *                <code>SWT.DEFAULT</code>, <code>SWT.NONE</code>,
+	 *                <code>SWT.LOW</code> or <code>SWT.HIGH</code>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public void setInterpolation(int interpolation) {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//TODO
+		//if (data.gdipGraphics == 0 && interpolation == SWT.DEFAULT)
+		//		int mode = 0;
+		//		switch (interpolation) {
+		//		case SWT.DEFAULT:
+		//			mode = Gdip.InterpolationModeDefault;
+		//			break;
+		//		case SWT.NONE:
+		//			mode = Gdip.InterpolationModeNearestNeighbor;
+		//			break;
+		//		case SWT.LOW:
+		//			mode = Gdip.InterpolationModeLowQuality;
+		//			break;
+		//		case SWT.HIGH:
+		//			mode = Gdip.InterpolationModeHighQuality;
+		//			break;
+		//		default:
+		//			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		//		}
+		// initGdip();
+		//Gdip.Graphics_SetInterpolationMode(data.gdipGraphics, mode);
+	}
+
+	/**
+	 * Sets the receiver's line attributes.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param attributes
+	 *            the line attributes
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the attributes is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if any of the line attributes
+	 *                is not valid</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see LineAttributes
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.3
+	 */
+	public void setLineAttributes(LineAttributes attributes) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (attributes == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int mask = 0;
+		float lineWidth = attributes.width;
+		if (lineWidth != data.lineWidth) {
+			mask |= LINE_WIDTH | DRAW_OFFSET;
+		}
+		int lineStyle = attributes.style;
+		if (lineStyle != data.lineStyle) {
+			mask |= LINE_STYLE;
+			switch (lineStyle) {
+			case SWT.LINE_SOLID:
+			case SWT.LINE_DASH:
+			case SWT.LINE_DOT:
+			case SWT.LINE_DASHDOT:
+			case SWT.LINE_DASHDOTDOT:
+				break;
+			case SWT.LINE_CUSTOM:
+				if (attributes.dash == null) {
+					lineStyle = SWT.LINE_SOLID;
+				}
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		int join = attributes.join;
+		if (join != data.lineJoin) {
+			mask |= LINE_JOIN;
+			switch (join) {
+			case SWT.CAP_ROUND:
+			case SWT.CAP_FLAT:
+			case SWT.CAP_SQUARE:
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		int cap = attributes.cap;
+		if (cap != data.lineCap) {
+			mask |= LINE_CAP;
+			switch (cap) {
+			case SWT.JOIN_MITER:
+			case SWT.JOIN_ROUND:
+			case SWT.JOIN_BEVEL:
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		float[] dashes = attributes.dash;
+		float[] lineDashes = data.lineDashes;
+		if (dashes != null && dashes.length > 0) {
+			boolean changed = lineDashes == null || lineDashes.length != dashes.length;
+			for (int i = 0; i < dashes.length; i++) {
+				float dash = dashes[i];
+				if (dash <= 0) {
+					SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+				}
+				if (!changed && lineDashes[i] != dash) {
+					changed = true;
+				}
+			}
+			if (changed) {
+				float[] newDashes = new float[dashes.length];
+				System.arraycopy(dashes, 0, newDashes, 0, dashes.length);
+				dashes = newDashes;
+				mask |= LINE_STYLE;
+			} else {
+				dashes = lineDashes;
+			}
+		} else {
+			if (lineDashes != null && lineDashes.length > 0) {
+				mask |= LINE_STYLE;
+			} else {
+				dashes = lineDashes;
+			}
+		}
+		float dashOffset = attributes.dashOffset;
+		if (dashOffset != data.lineDashesOffset) {
+			mask |= LINE_STYLE;
+		}
+		float miterLimit = attributes.miterLimit;
+		if (miterLimit != data.lineMiterLimit) {
+			mask |= LINE_MITERLIMIT;
+		}
+		// initGdip();
+		if (mask == 0) {
+			return;
+		}
+		data.lineWidth = lineWidth;
+		data.lineStyle = lineStyle;
+		data.lineCap = cap;
+		data.lineJoin = join;
+		data.lineDashes = dashes;
+		data.lineDashesOffset = dashOffset;
+		data.lineMiterLimit = miterLimit;
+		data.state &= ~mask;
+	}
+
+	/**
+	 * Sets the receiver's line cap style to the argument, which must be one of
+	 * the constants <code>SWT.CAP_FLAT</code>, <code>SWT.CAP_ROUND</code>, or
+	 * <code>SWT.CAP_SQUARE</code>.
+	 * 
+	 * @param cap
+	 *            the cap style to be used for drawing lines
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setLineCap(int cap) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		if (data.lineCap == cap) {
+			return;
+		}
+		switch (cap) {
+		case SWT.CAP_ROUND:
+		case SWT.CAP_FLAT:
+		case SWT.CAP_SQUARE:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		data.lineCap = cap;
+		data.state &= ~LINE_CAP;
+	}
+
+	/**
+	 * Sets the receiver's line dash style to the argument. The default value is
+	 * <code>null</code>. If the argument is not <code>null</code>, the
+	 * receiver's line style is set to <code>SWT.LINE_CUSTOM</code>, otherwise
+	 * it is set to <code>SWT.LINE_SOLID</code>.
+	 * 
+	 * @param dashes
+	 *            the dash style to be used for drawing lines
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if any of the values in the
+	 *                array is less than or equal 0</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setLineDash(int[] dashes) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		float[] lineDashes = data.lineDashes;
+		if (dashes != null && dashes.length > 0) {
+			boolean changed = data.lineStyle != SWT.LINE_CUSTOM || lineDashes == null
+					|| lineDashes.length != dashes.length;
+			for (int i = 0; i < dashes.length; i++) {
+				int dash = dashes[i];
+				if (dash <= 0) {
+					SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+				}
+				if (!changed && lineDashes[i] != dash) {
+					changed = true;
+				}
+			}
+			if (!changed) {
+				return;
+			}
+			data.lineDashes = new float[dashes.length];
+			for (int i = 0; i < dashes.length; i++) {
+				data.lineDashes[i] = dashes[i];
+			}
+			data.lineStyle = SWT.LINE_CUSTOM;
+		} else {
+			if (data.lineStyle == SWT.LINE_SOLID && (lineDashes == null || lineDashes.length == 0)) {
+				return;
+			}
+			data.lineDashes = null;
+			data.lineStyle = SWT.LINE_SOLID;
+		}
+		data.state &= ~LINE_STYLE;
+	}
+
+	/**
+	 * Sets the receiver's line join style to the argument, which must be one of
+	 * the constants <code>SWT.JOIN_MITER</code>, <code>SWT.JOIN_ROUND</code>,
+	 * or <code>SWT.JOIN_BEVEL</code>.
+	 * 
+	 * @param join
+	 *            the join style to be used for drawing lines
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setLineJoin(int join) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (data.lineJoin == join) {
+			return;
+		}
+		switch (join) {
+		case SWT.JOIN_MITER:
+		case SWT.JOIN_ROUND:
+		case SWT.JOIN_BEVEL:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		data.lineJoin = join;
+		data.state &= ~LINE_JOIN;
+	}
+
+	/**
+	 * Sets the receiver's line style to the argument, which must be one of the
+	 * constants <code>SWT.LINE_SOLID</code>, <code>SWT.LINE_DASH</code>,
+	 * <code>SWT.LINE_DOT</code>, <code>SWT.LINE_DASHDOT</code> or
+	 * <code>SWT.LINE_DASHDOTDOT</code>.
+	 * 
+	 * @param lineStyle
+	 *            the style to be used for drawing lines
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setLineStyle(int lineStyle) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (data.lineStyle == lineStyle) {
+			return;
+		}
+		switch (lineStyle) {
+		case SWT.LINE_SOLID:
+		case SWT.LINE_DASH:
+		case SWT.LINE_DOT:
+		case SWT.LINE_DASHDOT:
+		case SWT.LINE_DASHDOTDOT:
+			break;
+		case SWT.LINE_CUSTOM:
+			if (data.lineDashes == null) {
+				lineStyle = SWT.LINE_SOLID;
+			}
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		data.lineStyle = lineStyle;
+		data.state &= ~LINE_STYLE;
+	}
+
+	/**
+	 * Sets the width that will be used when drawing lines for all of the figure
+	 * drawing operations (that is, <code>drawLine</code>,
+	 * <code>drawRectangle</code>, <code>drawPolyline</code>, and so forth.
+	 * <p>
+	 * Note that line width of zero is used as a hint to indicate that the
+	 * fastest possible line drawing algorithms should be used. This means that
+	 * the output may be different from line width one.
+	 * </p>
+	 * 
+	 * @param lineWidth
+	 *            the width of a line
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setLineWidth(int lineWidth) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		if (data.lineWidth == lineWidth) {
+			return;
+		}
+		data.lineWidth = lineWidth;
+		data.state &= ~(LINE_WIDTH | DRAW_OFFSET);
+	}
+
+	/**
+	 * Sets the receiver's text anti-aliasing value to the parameter, which must
+	 * be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+	 * <code>SWT.ON</code>. Note that this controls anti-aliasing only for all
+	 * <em>text drawing</em> operations.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param antialias
+	 *            the anti-aliasing setting
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter is not one
+	 *                of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+	 *                <code>SWT.ON</code></li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * @see #setAntialias
+	 * 
+	 * @since 3.1
+	 */
+	public void setTextAntialias(int antialias) {
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		//TODO
+		//		if (data.gdipGraphics == 0 && antialias == SWT.DEFAULT)
+		//			return;
+		//		int textMode = 0;
+		//		switch (antialias) {
+		//		case SWT.DEFAULT:
+		//			textMode = Gdip.TextRenderingHintSystemDefault;
+		//			break;
+		//		case SWT.OFF:
+		//			textMode = Gdip.TextRenderingHintSingleBitPerPixelGridFit;
+		//			break;
+		//		case SWT.ON:
+		//			int[] type = new int[1];
+		//			OS.SystemParametersInfo(OS.SPI_GETFONTSMOOTHINGTYPE, 0, type, 0);
+		//			if (type[0] == OS.FE_FONTSMOOTHINGCLEARTYPE) {
+		//				textMode = Gdip.TextRenderingHintClearTypeGridFit;
+		//			} else {
+		//				textMode = Gdip.TextRenderingHintAntiAliasGridFit;
+		//			}
+		//			break;
+		//		default:
+		//			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		//		}
+		//		// initGdip();
+		//		Gdip.Graphics_SetTextRenderingHint(data.gdipGraphics, textMode);
+	}
+
+	/**
+	 * Sets the transform that is currently being used by the receiver. If the
+	 * argument is <code>null</code>, the current transform is set to the
+	 * identity transform.
+	 * <p>
+	 * This operation requires the operating system's advanced graphics
+	 * subsystem which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param transform
+	 *            the transform to set
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parameter has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are
+	 *                not available</li>
+	 *                </ul>
+	 * 
+	 * @see Transform
+	 * @see #getAdvanced
+	 * @see #setAdvanced
+	 * 
+	 * @since 3.1
+	 */
+	public void setTransform(Transform transform) {
+		//TODO
+		SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		if (transform != null && transform.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			//		if (data.gdipGraphics == 0 && transform == null)
+			//			return;
+			//		// initGdip();
+			//		int /* long */identity = identity();
+			//		if (transform != null) {
+			//			Gdip.Matrix_Multiply(identity, transform.handle, Gdip.MatrixOrderPrepend);
+			//		}
+			//		Gdip.Graphics_SetTransform(data.gdipGraphics, identity);
+			//		Gdip.Matrix_delete(identity);
+			//		data.state &= ~DRAW_OFFSET;
+		}
+	}
+
+	/**
+	 * Returns the extent of the given string. No tab expansion or carriage
+	 * return processing will be performed.
+	 * <p>
+	 * The <em>extent</em> of a string is the width and height of the
+	 * rectangular area it would cover if drawn in a particular font (in this
+	 * case, the current font in the receiver).
+	 * </p>
+	 * 
+	 * @param string
+	 *            the string to measure
+	 * @return a point containing the extent of the string
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Point stringExtent(String string) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		return _textExtent(getActivePainter(), string, 0);
+	}
+
+	/**
+	 * Returns the extent of the given string. Tab expansion and carriage return
+	 * processing are performed.
+	 * <p>
+	 * The <em>extent</em> of a string is the width and height of the
+	 * rectangular area it would cover if drawn in a particular font (in this
+	 * case, the current font in the receiver).
+	 * </p>
+	 * 
+	 * @param string
+	 *            the string to measure
+	 * @return a point containing the extent of the string
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Point textExtent(String string) {
+		return textExtent(string, SWT.DRAW_DELIMITER | SWT.DRAW_TAB);
+	}
+
+	/**
+	 * Returns the extent of the given string. Tab expansion, line delimiter and
+	 * mnemonic processing are performed according to the specified flags, which
+	 * can be a combination of:
+	 * <dl>
+	 * <dt><b>DRAW_DELIMITER</b></dt>
+	 * <dd>draw multiple lines</dd>
+	 * <dt><b>DRAW_TAB</b></dt>
+	 * <dd>expand tabs</dd>
+	 * <dt><b>DRAW_MNEMONIC</b></dt>
+	 * <dd>underline the mnemonic character</dd>
+	 * <dt><b>DRAW_TRANSPARENT</b></dt>
+	 * <dd>transparent background</dd>
+	 * </dl>
+	 * <p>
+	 * The <em>extent</em> of a string is the width and height of the
+	 * rectangular area it would cover if drawn in a particular font (in this
+	 * case, the current font in the receiver).
+	 * </p>
+	 * 
+	 * @param string
+	 *            the string to measure
+	 * @param flags
+	 *            the flags specifying how to process the text
+	 * @return a point containing the extent of the string
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Point textExtent(String string, int flags) {
+		if (paintDevice == null) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (string == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		QPainter painter = getActivePainter();
+		return _textExtent(painter, string, flags);
+	}
+
+	private Point _textExtent(QPainter painter, String string, int flags) {
+		int qFlags = translateTextFlags(flags);
+		painter.setFont(data.font.getQFont());
+		QRect rect = painter.boundingRect((QRect) null, qFlags, string);
+		//System.out.println("textExtent: " + string + " -> " + rect.width() + "x" + rect.height());
+		return new Point(rect.width(), rect.height());
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new graphics
+	 * context.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>GC</code>. It is marked public only so that it can be shared within
+	 * the packages provided by SWT. It is not available on all platforms, and
+	 * should never be called from application code.
+	 * </p>
+	 * 
+	 * @param drawable
+	 *            the Drawable for the receiver.
+	 * @param data
+	 *            the data for the receiver.
+	 * 
+	 * @return a new <code>GC</code>
+	 */
+	public static GC qt_new(Drawable drawable, GCData data) {
+		GC gc = new GC();
+		QPaintDeviceInterface paintDevice = drawable.internal_new_GC(data);
+		gc.device = data.device;
+		gc.init(drawable, data, paintDevice);
+		return gc;
+	}
+
+	/**
+	 * Invokes platform specific functionality to wrap a graphics context.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>GC</code>. It is marked public only so that it can be shared within
+	 * the packages provided by SWT. It is not available on all platforms, and
+	 * should never be called from application code.
+	 * </p>
+	 * 
+	 * @param hDC
+	 *            the Windows HDC.
+	 * @param data
+	 *            the data for the receiver.
+	 * 
+	 * @return a new <code>GC</code>
+	 */
+	public static GC qt_new(Drawable drawable, QPaintDeviceInterface paintDevice, GCData data) {
+		GC gc = new GC();
+		gc.device = data.device;
+		gc.init(drawable, data, paintDevice);
+		return gc;
+	}
+
+	/**
+	 * Returns a string containing a concise, human-readable description of the
+	 * receiver.
+	 * 
+	 * @return a string representation of the receiver
+	 */
+	@Override
+	public String toString() {
+		if (isDisposed()) {
+			return "GC {*DISPOSED*}"; //$NON-NLS-1$
+		}
+		return "GC {" + paintDevice + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GCData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GCData.java
new file mode 100644
index 0000000..a5050c0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GCData.java	
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import org.eclipse.swt.SWT;
+
+/**
+ * Instances of this class are descriptions of GCs in terms of unallocated
+ * platform-specific data fields.
+ * <p>
+ * <b>IMPORTANT:</b> This class is <em>not</em> part of the public API for SWT.
+ * It is marked public only so that it can be shared within the packages
+ * provided by SWT. It is not available on all platforms, and should never be
+ * called from application code.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+
+public final class GCData {
+	public Device device;
+	public int style, state = -1;
+	public Color foregroundColor = null;
+	public Color backgroundColor = null;
+	public Font font;
+	public Pattern foregroundPattern;
+	public Pattern backgroundPattern;
+	public int lineStyle = SWT.LINE_SOLID;
+	public float lineWidth;
+	public int lineCap = SWT.CAP_FLAT;
+	public int lineJoin = SWT.JOIN_MITER;
+	public float lineDashesOffset;
+	public float[] lineDashes;
+	public float lineMiterLimit = 10;
+	public int alpha = 0xFF;
+	public Image image;
+	public int layout = -1;
+	public int uiState = 0;
+	public boolean focusDrawn;
+	public int handle;
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java
new file mode 100644
index 0000000..fe3374b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java	
@@ -0,0 +1,978 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.gui.QIcon;
+import com.trolltech.qt.gui.QImage;
+import com.trolltech.qt.gui.QPaintDeviceInterface;
+import com.trolltech.qt.gui.QPixmap;
+import com.trolltech.qt.gui.QImage.Format;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Instances of this class are graphics which have been prepared for display on
+ * a specific device. That is, they are ready to paint using methods such as
+ * <code>GC.drawImage()</code> and display on widgets with, for example,
+ * <code>Button.setImage()</code>.
+ * <p>
+ * If loaded from a file format that supports it, an <code>Image</code> may have
+ * transparency, meaning that certain pixels are specified as being transparent
+ * when drawn. Examples of file formats that support transparency are GIF and
+ * PNG.
+ * </p>
+ * <p>
+ * There are two primary ways to use <code>Images</code>. The first is to load a
+ * graphic file from disk and create an <code>Image</code> from it. This is done
+ * using an <code>Image</code> constructor, for example:
+ * 
+ * <pre>
+ * Image i = new Image(device, "C:\\graphic.bmp");
+ * </pre>
+ * 
+ * A graphic file may contain a color table specifying which colors the image
+ * was intended to possess. In the above example, these colors will be mapped to
+ * the closest available color in SWT. It is possible to get more control over
+ * the mapping of colors as the image is being created, using code of the form:
+ * 
+ * <pre>
+ * ImageData data = new ImageData("C:\\graphic.bmp");
+ * RGB[] rgbs = data.getRGBs();
+ * // At this point, rgbs contains specifications of all
+ * // the colors contained within this image. You may
+ * // allocate as many of these colors as you wish by
+ * // using the Color constructor Color(RGB), then
+ * // create the image:
+ * Image i = new Image(device, data);
+ * </pre>
+ * <p>
+ * Applications which require even greater control over the image loading
+ * process should use the support provided in class <code>ImageLoader</code>.
+ * </p>
+ * <p>
+ * Application code must explicitly invoke the <code>Image.dispose()</code>
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see Color
+ * @see ImageData
+ * @see ImageLoader
+ * @see <a href="http://www.eclipse.org/swt/snippets/#image">Image snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples:
+ *      GraphicsExample, ImageAnalyzer</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public final class Image extends Resource implements Drawable {
+
+	/**
+	 * specifies whether the receiver is a bitmap or an icon (one of
+	 * <code>SWT.BITMAP</code>, <code>SWT.ICON</code>)
+	 */
+	private int type = SWT.BITMAP;
+
+	private int transparentPixel = -1;
+
+	/**
+	 * The GC the image is currently selected in.
+	 */
+	private GC memGC;
+
+	/**
+	 * The global alpha value to be used for every pixel.
+	 */
+	private int alpha = -1;
+
+	private boolean hasMask = false;
+
+	//private QImage image;
+	private QIcon icon;
+	private QPixmap pixmap;
+
+	Image(Device device) {
+		super(device);
+	}
+
+	/**
+	 * Constructs an empty instance of this class with the specified width and
+	 * height. The result may be drawn upon by creating a GC and using any of
+	 * its drawing operations, as shown in the following example:
+	 * 
+	 * <pre>
+	 * Image i = new Image(device, width, height);
+	 * GC gc = new GC(i);
+	 * gc.drawRectangle(0, 0, 50, 50);
+	 * gc.dispose();
+	 * </pre>
+	 * <p>
+	 * Note: Some platforms may have a limitation on the size of image that can
+	 * be created (size depends on width, height, and depth). For example,
+	 * Windows 95, 98, and ME do not allow images larger than 16M.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to create the image
+	 * @param width
+	 *            the width of the new image
+	 * @param height
+	 *            the height of the new image
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if either the width or height
+	 *                is negative or zero</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                image creation</li>
+	 *                </ul>
+	 */
+	public Image(Device device, int width, int height) {
+		super(device);
+		init(width, height);
+		init();
+	}
+
+	/**
+	 * Constructs a new instance of this class based on the provided image, with
+	 * an appearance that varies depending on the value of the flag. The
+	 * possible flag values are:
+	 * <dl>
+	 * <dt><b>{@link SWT#IMAGE_COPY}</b></dt>
+	 * <dd>the result is an identical copy of srcImage</dd>
+	 * <dt><b>{@link SWT#IMAGE_DISABLE}</b></dt>
+	 * <dd>the result is a copy of srcImage which has a <em>disabled</em> look</dd>
+	 * <dt><b>{@link SWT#IMAGE_GRAY}</b></dt>
+	 * <dd>the result is a copy of srcImage which has a <em>gray scale</em> look
+	 * </dd>
+	 * </dl>
+	 * 
+	 * @param device
+	 *            the device on which to create the image
+	 * @param srcImage
+	 *            the image to use as the source
+	 * @param flag
+	 *            the style, either <code>IMAGE_COPY</code>,
+	 *            <code>IMAGE_DISABLE</code> or <code>IMAGE_GRAY</code>
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if srcImage is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the flag is not one of
+	 *                <code>IMAGE_COPY</code>, <code>IMAGE_DISABLE</code> or
+	 *                <code>IMAGE_GRAY</code></li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or
+	 *                an icon, or is otherwise in an invalid state</li>
+	 *                <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the image is
+	 *                not supported</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                image creation</li>
+	 *                </ul>
+	 */
+	public Image(Device device, Image srcImage, int flag) {
+		super(device);
+		if (srcImage == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (srcImage.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		device = this.device;
+		this.type = srcImage.type;
+		switch (flag) {
+		case SWT.IMAGE_COPY:
+			this.pixmap = new QPixmap(srcImage.pixmap);
+			break;
+		case SWT.IMAGE_DISABLE:
+			this.pixmap = createDisabledImage(srcImage);
+			break;
+		case SWT.IMAGE_GRAY:
+			this.pixmap = createGrayImage(srcImage);
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		init();
+	}
+
+	/**
+	 * Constructs an empty instance of this class with the width and height of
+	 * the specified rectangle. The result may be drawn upon by creating a GC
+	 * and using any of its drawing operations, as shown in the following
+	 * example:
+	 * 
+	 * <pre>
+	 * Image i = new Image(device, boundsRectangle);
+	 * GC gc = new GC(i);
+	 * gc.drawRectangle(0, 0, 50, 50);
+	 * gc.dispose();
+	 * </pre>
+	 * <p>
+	 * Note: Some platforms may have a limitation on the size of image that can
+	 * be created (size depends on width, height, and depth). For example,
+	 * Windows 95, 98, and ME do not allow images larger than 16M.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to create the image
+	 * @param bounds
+	 *            a rectangle specifying the image's width and height (must not
+	 *            be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the bounds rectangle is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if either the rectangle's
+	 *                width or height is negative</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                image creation</li>
+	 *                </ul>
+	 */
+	public Image(Device device, Rectangle bounds) {
+		super(device);
+		if (bounds == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		init(bounds.width, bounds.height);
+		init();
+	}
+
+	/**
+	 * Constructs an instance of this class from the given
+	 * <code>ImageData</code>.
+	 * 
+	 * @param device
+	 *            the device on which to create the image
+	 * @param data
+	 *            the image data to create the image from (must not be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the image data is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the
+	 *                ImageData is not supported</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                image creation</li>
+	 *                </ul>
+	 */
+	public Image(Device device, ImageData data) {
+		super(device);
+		init(data);
+		init();
+	}
+
+	/**
+	 * Constructs an instance of this class, whose type is <code>SWT.ICON</code>
+	 * , from the two given <code>ImageData</code> objects. The two images must
+	 * be the same size. Pixel transparency in either image will be ignored.
+	 * <p>
+	 * The mask image should contain white wherever the icon is to be visible,
+	 * and black wherever the icon is to be transparent. In addition, the source
+	 * image should contain black wherever the icon is to be transparent.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to create the icon
+	 * @param source
+	 *            the color data for the icon
+	 * @param mask
+	 *            the mask data for the icon
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if either the source or mask is
+	 *                null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if source and mask are
+	 *                different sizes</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                image creation</li>
+	 *                </ul>
+	 */
+	public Image(Device device, ImageData source, ImageData mask) {
+		super(device);
+		if (source == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (mask == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (source.width != mask.width || source.height != mask.height) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		mask = ImageData.convertMask(mask);
+		ImageData image = new ImageData(source.width, source.height, source.depth, source.palette, source.scanlinePad,
+				source.data);
+		image.maskPad = mask.scanlinePad;
+		image.maskData = mask.data;
+		init(image);
+	}
+
+	/**
+	 * Constructs an instance of this class by loading its representation from
+	 * the specified input stream. Throws an error if an error occurs while
+	 * loading the image, or if the result is an image of an unsupported type.
+	 * Application code is still responsible for closing the input stream.
+	 * <p>
+	 * This constructor is provided for convenience when loading a single image
+	 * only. If the stream contains multiple images, only the first one will be
+	 * loaded. To load multiple images, use <code>ImageLoader.load()</code>.
+	 * </p>
+	 * <p>
+	 * This constructor may be used to load a resource as follows:
+	 * </p>
+	 * 
+	 * <pre>
+	 * static Image loadImage(Display display, Class clazz, String string) {
+	 * 	InputStream stream = clazz.getResourceAsStream(string);
+	 * 	if (stream == null)
+	 * 		return null;
+	 * 	Image image = null;
+	 * 	try {
+	 * 		image = new Image(display, stream);
+	 * 	} catch (SWTException ex) {
+	 * 	} finally {
+	 * 		try {
+	 * 			stream.close();
+	 * 		} catch (IOException ex) {
+	 * 		}
+	 * 	}
+	 * 	return image;
+	 * }
+	 * </pre>
+	 * 
+	 * @param device
+	 *            the device on which to create the image
+	 * @param stream
+	 *            the input stream to load the image from
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the stream is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_IO - if an IO error occurs while reading from
+	 *                the stream</li>
+	 *                <li>ERROR_INVALID_IMAGE - if the image stream contains
+	 *                invalid data</li>
+	 *                <li>ERROR_UNSUPPORTED_DEPTH - if the image stream
+	 *                describes an image with an unsupported depth</li>
+	 *                <li>ERROR_UNSUPPORTED_FORMAT - if the image stream
+	 *                contains an unrecognized format</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                image creation</li>
+	 *                </ul>
+	 */
+	public Image(Device device, InputStream stream) {
+		super(device);
+		init(new ImageData(stream));
+		init();
+	}
+
+	/**
+	 * Constructs an instance of this class by loading its representation from
+	 * the file with the specified name. Throws an error if an error occurs
+	 * while loading the image, or if the result is an image of an unsupported
+	 * type.
+	 * <p>
+	 * This constructor is provided for convenience when loading a single image
+	 * only. If the specified file contains multiple images, only the first one
+	 * will be used.
+	 * 
+	 * @param device
+	 *            the device on which to create the image
+	 * @param filename
+	 *            the name of the file to load the image from
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li> <li>ERROR_NULL_ARGUMENT - if the
+	 *                file name is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_IO - if an IO error occurs while reading from
+	 *                the file</li> <li>ERROR_INVALID_IMAGE - if the image file
+	 *                contains invalid data </li> <li>ERROR_UNSUPPORTED_DEPTH -
+	 *                if the image file describes an image with an unsupported
+	 *                depth</li> <li>ERROR_UNSUPPORTED_FORMAT - if the image
+	 *                file contains an unrecognized format</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                image creation</li>
+	 *                </ul>
+	 */
+	public Image(Device device, String filename) {
+		super(device);
+		if (filename == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		initNative(filename);
+		if (this.pixmap == null) {
+			init(new ImageData(filename));
+		}
+		init();
+	}
+
+	void init(int width, int height) {
+		if (width <= 0 || height <= 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.type = SWT.BITMAP;
+		pixmap = new QPixmap(width, height); //, Format.Format_ARGB32
+	}
+
+	void init(ImageData imageData) {
+		if (imageData == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		this.type = SWT.BITMAP;
+
+		Format format = getImageFormat(imageData);
+		byte[] buffer = imageData2RawData(imageData, format);
+		QImage image = new QImage(buffer, imageData.width, imageData.height, format);
+
+		if (imageData.colorTable != null) {
+			image.setColorTable(imageData.colorTable);
+		}
+
+		if (imageData.maskData != null) {
+			hasMask = true;
+		}
+		updateAlphaChannel(image, imageData);
+
+		pixmap = QPixmap.fromImage(image);
+
+		try {
+			this.transparentPixel = getTransparentPixel(imageData);
+		} catch (Error e) {
+			pixmap = null;
+			throw e;
+		}
+	}
+
+	private Format getImageFormat(ImageData imageData) {
+		switch (imageData.depth) {
+		case 32:
+			return Format.Format_ARGB32;
+		case 24:
+			return Format.Format_RGB888;
+		case 16:
+			return Format.Format_RGB16;
+		case 8:
+		case 4:
+			return Format.Format_Indexed8;
+		case 1:
+			return Format.Format_Mono;
+		default:
+			throw new RuntimeException("invalid color depth"); //$NON-NLS-1$
+		}
+	}
+
+	private void updateAlphaChannel(QImage image, ImageData imageData) {
+		Format format = null;
+		byte[] data = null;
+		if (imageData.maskData != null) {
+			// Mask data is 1 bit/pixel
+			data = imageData.maskData;
+			format = Format.Format_Mono;
+		} else if (imageData.alpha != -1) {
+			data = new byte[image.width() * image.height()];
+			Arrays.fill(data, (byte) alpha);
+			format = Format.Format_Indexed8;
+		} else if (imageData.alphaData != null) {
+			data = imageData.alphaData;
+			format = Format.Format_Indexed8;
+		}
+		if (data != null) {
+			QImage alpha = new QImage(data, imageData.width, imageData.height, format);
+			image.setAlphaChannel(alpha);
+		}
+	}
+
+	private byte[] imageData2RawData(ImageData image, Format format) {
+		PaletteData palette = image.palette;
+		if (!((image.depth == 1 || image.depth == 2 || image.depth == 4 || image.depth == 8) && !palette.isDirect
+				|| image.depth == 8 || (image.depth == 16 || image.depth == 24 || image.depth == 32)
+				&& palette.isDirect)) {
+			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
+		}
+
+		byte[] buffer = image.data;
+		if (format.equals(Format.Format_RGB888)) {
+			// swap red and blue bytes
+			for (int i = 0; i < buffer.length - 2; i += 3) {
+				byte tmp = buffer[i + 2];
+				buffer[i + 2] = buffer[i];
+				buffer[i] = tmp;
+			}
+		}
+
+		return buffer;
+	}
+
+	private int getTransparentPixel(ImageData image) {
+		if (image.transparentPixel != -1) {
+			PaletteData palette = image.palette;
+			RGB rgb = null;
+			if (palette.isDirect) {
+				rgb = palette.getRGB(image.transparentPixel);
+			} else {
+				if (image.transparentPixel < palette.colors.length) {
+					rgb = palette.getRGB(image.transparentPixel);
+				}
+			}
+
+			if (rgb != null) {
+				return rgb.red << 24 | rgb.green << 16 | rgb.blue << 8 | 0xFF;
+			}
+		}
+		return -1;
+	}
+
+	void initNative(String filename) {
+		if (filename.toLowerCase().endsWith(".ico")) { //$NON-NLS-1$
+			this.type = SWT.ICON;
+			icon = new QIcon(filename);
+		} else {
+			this.type = SWT.BITMAP;
+			pixmap = new QPixmap(filename);
+		}
+	}
+
+	private QPixmap createGrayImage(Image srcImage) {
+		return srcImage.getQPixmap(); //.convertToFormat(Format.Format_Indexed8, ImageConversionFlag.ThresholdDither);
+	}
+
+	private QPixmap createDisabledImage(Image srcImage) {
+		// TODO the same as gray?
+		return createGrayImage(srcImage);
+	}
+
+	private QImage getQImage() {
+		return pixmap.toImage();
+	}
+
+	public QIcon getQIcon() {
+		// fallback strategy if image is a bitmap
+		if (icon == null) {
+			icon = new QIcon(getQPixmap());
+		}
+		return icon;
+	}
+
+	public QPixmap getQPixmap() {
+		//		if (pixmap == null) {
+		//			if (image != null) {
+		//				pixmap = QPixmap.fromImage(image);
+		//			} else if (icon != null) {
+		//				pixmap = icon.pixmap(getDefaultIconSize());
+		//			}
+		//		}
+		return pixmap;
+	}
+
+	public QSize getDefaultIconSize() {
+		List<QSize> sizes = getQIcon().availableSizes();
+		if (sizes.isEmpty()) {
+			return new QSize();
+		}
+		return sizes.get(0);
+	}
+
+	public boolean isIcon() {
+		return type == SWT.ICON;
+	}
+
+	public boolean isBitmap() {
+		return type == SWT.BITMAP;
+	}
+
+	@Override
+	void destroy() {
+		if (memGC != null) {
+			memGC.dispose();
+			memGC = null;
+		}
+		//		image = null;
+		//		icon = null;
+		pixmap = null;
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (object == this) {
+			return true;
+		}
+		if (!(object instanceof Image)) {
+			return false;
+		}
+		Image other = (Image) object;
+		return device == other.device && pixmap == other.pixmap && transparentPixel == other.transparentPixel;
+	}
+
+	/**
+	 * Returns the color to which to map the transparent pixel, or null if the
+	 * receiver has no transparent pixel.
+	 * <p>
+	 * There are certain uses of Images that do not support transparency (for
+	 * example, setting an image into a button or label). In these cases, it may
+	 * be desired to simulate transparency by using the background color of the
+	 * widget to paint the transparent pixels of the image. Use this method to
+	 * check which color will be used in these cases in place of transparency.
+	 * This value may be set with setBackground().
+	 * <p>
+	 * 
+	 * @return the background color of the image, or null if there is no
+	 *         transparency in the image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Color getBackground() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (transparentPixel == -1) {
+			return null;
+		}
+		int red = transparentPixel >> 16 & 0xFF;
+		int green = transparentPixel >> 8 & 0xFF;
+		int blue = transparentPixel >> 0 & 0xFF;
+		return new Color(device, red, green, blue);
+	}
+
+	/**
+	 * Returns the bounds of the receiver. The rectangle will always have x and
+	 * y values of 0, and the width and height of the image.
+	 * 
+	 * @return a rectangle specifying the image's bounds
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or
+	 *                an icon</li>
+	 *                </ul>
+	 */
+	public Rectangle getBounds() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		return new Rectangle(0, 0, pixmap.width(), pixmap.height());
+	}
+
+	/**
+	 * Returns an <code>ImageData</code> based on the receiver Modifications
+	 * made to this <code>ImageData</code> will not affect the Image.
+	 * 
+	 * @return an <code>ImageData</code> containing the image's data and
+	 *         attributes
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or
+	 *                an icon</li>
+	 *                </ul>
+	 * 
+	 * @see ImageData
+	 */
+	public ImageData getImageData() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+
+		QImage image = getQImage();
+
+		PaletteData palette = new PaletteData(0x00FF0000, 0x00FF00, 0x00FF);
+		ImageData imageData = new ImageData(image.width(), image.height(), image.depth(), palette, 4, image
+				.copyOfBytes());
+		imageData.bytesPerLine = image.bytesPerLine();
+		imageData.transparentPixel = -1;
+		imageData.alpha = alpha;
+		imageData.alphaData = getAlphaData(image);
+
+		if (image.numColors() > 0) {
+			List<Integer> colorTable = image.colorTable();
+			imageData.colorTable = colorTable;
+		}
+
+		return imageData;
+	}
+
+	private byte[] getAlphaData(QImage image) {
+		if (hasMask) {
+			// Mask data is 1 bit/pixel
+			if (image.hasAlphaChannel()) {
+				QImage alpha = image.alphaChannel();
+				alpha.convertToFormat(Format.Format_Mono);
+				return alpha.copyOfBytes();
+			} else {
+				int maskSize = image.width() * image.height() / 8;
+				byte[] alphaData = new byte[maskSize];
+				Arrays.fill(alphaData, (byte) 0xFF);
+				return alphaData;
+				//imageData.maskPad = 8;
+			}
+		} else if (alpha != -1) {
+			byte[] alphaData = new byte[image.width() * image.height()];
+			Arrays.fill(alphaData, (byte) alpha);
+			return alphaData;
+		} else if (image.hasAlphaChannel()) {
+			QImage alpha = image.alphaChannel();
+			return alpha.copyOfBytes();
+		}
+		return null;
+	}
+
+	public static Image qt_new(Display device, int type, QIcon qIcon) {
+		Image image = new Image(device);
+		image.type = type;
+		image.icon = qIcon;
+		return image;
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		return pixmap != null ? (int) pixmap.hashCode() : 0;
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Image</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the platform specific GC data
+	 * @return the platform specific GC handle
+	 */
+	public QPaintDeviceInterface internal_new_GC(GCData data) {
+		data.backgroundColor = getBackground();
+		data.device = device;
+		return pixmap;
+	}
+
+	/**
+	 * Invokes platform specific functionality to dispose a GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Image</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param hDC
+	 *            the platform specific GC handle
+	 * @param data
+	 *            the platform specific GC data
+	 */
+	public void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data) {
+	}
+
+	/**
+	 * Returns <code>true</code> if the image has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the image. When an image has been
+	 * disposed, it is an error to invoke any other method using the image.
+	 * 
+	 * @return <code>true</code> when the image is disposed and
+	 *         <code>false</code> otherwise
+	 */
+	@Override
+	public boolean isDisposed() {
+		return pixmap == null && icon == null;
+	}
+
+	/**
+	 * Sets the color to which to map the transparent pixel.
+	 * <p>
+	 * There are certain uses of <code>Images</code> that do not support
+	 * transparency (for example, setting an image into a button or label). In
+	 * these cases, it may be desired to simulate transparency by using the
+	 * background color of the widget to paint the transparent pixels of the
+	 * image. This method specifies the color that will be used in these cases.
+	 * For example:
+	 * 
+	 * <pre>
+	 * Button b = new Button();
+	 * image.setBackground(b.getBackground());
+	 * b.setImage(image);
+	 * </pre>
+	 * 
+	 * </p>
+	 * <p>
+	 * The image may be modified by this operation (in effect, the transparent
+	 * regions may be filled with the supplied color). Hence this operation is
+	 * not reversible and it is not legal to call this function twice or with a
+	 * null argument.
+	 * </p>
+	 * <p>
+	 * This method has no effect if the receiver does not have a transparent
+	 * pixel value.
+	 * </p>
+	 * 
+	 * @param color
+	 *            the color to use when a transparent pixel is specified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the color has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void setBackground(Color color) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (color == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (transparentPixel == -1) {
+			return;
+		}
+		return; // TODO function disabled
+		// byte red = (byte) ((transparentPixel >> 16) & 0xFF);
+		// byte green = (byte) ((transparentPixel >> 8) & 0xFF);
+		// byte blue = (byte) ((transparentPixel >> 0) & 0xFF);
+		// byte newRed = (byte) ((int) (color.handle[0] * 255) & 0xFF);
+		// byte newGreen = (byte) ((int) (color.handle[1] * 255) & 0xFF);
+		// byte newBlue = (byte) ((int) (color.handle[2] * 255) & 0xFF);
+		// NSBitmapImageRep imageRep = getRepresentation();
+		// long /* int */bpr = imageRep.bytesPerRow();
+		// long /* int */data = imageRep.bitmapData();
+		// byte[] line = new byte[(int) bpr];
+		// for (int i = 0, offset = 0; i < height; i++, offset += bpr) {
+		// OS.memmove(line, data + offset, bpr);
+		// for (int j = 0; j < line.length; j += 4) {
+		// if (line[j + 1] == red && line[j + 2] == green
+		// && line[j + 3] == blue) {
+		// line[j + 1] = newRed;
+		// line[j + 2] = newGreen;
+		// line[j + 3] = newBlue;
+		// }
+		// }
+		// OS.memmove(data + offset, line, bpr);
+		// }
+		// transparentPixel = (newRed & 0xFF) << 16 | (newGreen & 0xFF) << 8
+		// | (newBlue & 0xFF);
+	}
+
+	/**
+	 * Returns a string containing a concise, human-readable description of the
+	 * receiver.
+	 * 
+	 * @return a string representation of the receiver
+	 */
+	@Override
+	public String toString() {
+		if (isDisposed()) {
+			return "Image {*DISPOSED*}"; //$NON-NLS-1$
+		}
+		return "Image {pixmap: " + pixmap + ", icon: " + icon + " }"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	}
+
+	public void setMemGC(GC gc) {
+		this.memGC = gc;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Region.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Region.java
new file mode 100644
index 0000000..23c2ec9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Region.java	
@@ -0,0 +1,776 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.graphics;
+
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.gui.QRegion;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class represent areas of an x-y coordinate system that are
+ * aggregates of the areas covered by a number of polygons.
+ * <p>
+ * Application code must explicitly invoke the <code>Region.dispose()</code>
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+
+public final class Region extends Resource {
+
+	/**
+	 * the OS resource for the region (Warning: This field is platform
+	 * dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 */
+	private QRegion region;
+
+	/**
+	 * Constructs a new empty region.
+	 * 
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                region creation</li>
+	 *                </ul>
+	 */
+	public Region() {
+		this(null);
+	}
+
+	/**
+	 * Constructs a new empty region.
+	 * <p>
+	 * You must dispose the region when it is no longer required.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the region
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if device is null and there is
+	 *                no current device</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                region creation</li>
+	 *                </ul>
+	 * 
+	 * @see #dispose
+	 * 
+	 * @since 3.0
+	 */
+	public Region(Device device) {
+		super(device);
+		region = new QRegion();
+		init();
+	}
+
+	/**
+	 * Constructs a new region given a handle to the operating system resources
+	 * that it should represent.
+	 * 
+	 * @param handle
+	 *            the handle for the result
+	 */
+	Region(Device device, QRegion region) {
+		super(device);
+		this.region = region;
+	}
+
+	QRegion getQRegion() {
+		return region;
+	}
+
+	/**
+	 * Adds the given polygon to the collection of polygons the receiver
+	 * maintains to describe its area.
+	 * 
+	 * @param pointArray
+	 *            points that describe the polygon to merge with the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 * 
+	 */
+	public void add(int[] pointArray) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (pointArray == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		QRegion rg = new QRegion(GC.createPolygonFromArray(pointArray));
+		region = region.united(rg);
+	}
+
+	/**
+	 * Adds the given rectangle to the collection of polygons the receiver
+	 * maintains to describe its area.
+	 * 
+	 * @param rect
+	 *            the rectangle to merge with the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or
+	 *                height is negative</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void add(Rectangle rect) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (rect == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		region = region.unite(QtSWTConverter.convert(rect));
+	}
+
+	/**
+	 * Adds the given rectangle to the collection of polygons the receiver
+	 * maintains to describe its area.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle
+	 * @param y
+	 *            the y coordinate of the rectangle
+	 * @param width
+	 *            the width coordinate of the rectangle
+	 * @param height
+	 *            the height coordinate of the rectangle
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or
+	 *                height is negative</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void add(int x, int y, int width, int height) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (width < 0 || height < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		region = region.united(new QRect(x, y, width, height));
+	}
+
+	/**
+	 * Adds all of the polygons which make up the area covered by the argument
+	 * to the collection of polygons the receiver maintains to describe its
+	 * area.
+	 * 
+	 * @param region
+	 *            the region to merge
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void add(Region region) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (region == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (region.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.region = this.region.united(region.getQRegion());
+	}
+
+	/**
+	 * Returns <code>true</code> if the point specified by the arguments is
+	 * inside the area specified by the receiver, and <code>false</code>
+	 * otherwise.
+	 * 
+	 * @param x
+	 *            the x coordinate of the point to test for containment
+	 * @param y
+	 *            the y coordinate of the point to test for containment
+	 * @return <code>true</code> if the region contains the point and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public boolean contains(int x, int y) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return region.contains(new QPoint(x, y));
+	}
+
+	/**
+	 * Returns <code>true</code> if the given point is inside the area specified
+	 * by the receiver, and <code>false</code> otherwise.
+	 * 
+	 * @param pt
+	 *            the point to test for containment
+	 * @return <code>true</code> if the region contains the point and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public boolean contains(Point pt) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (pt == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return region.contains(QtSWTConverter.convert(pt));
+	}
+
+	@Override
+	void destroy() {
+		region = null;
+	}
+
+	/**
+	 * Compares the argument to the receiver, and returns true if they represent
+	 * the <em>same</em> object using a class specific comparison.
+	 * 
+	 * @param object
+	 *            the object to compare with this object
+	 * @return <code>true</code> if the object is the same as this object and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @see #hashCode
+	 */
+	@Override
+	public boolean equals(Object object) {
+		if (this == object) {
+			return true;
+		}
+		if (!(object instanceof Region)) {
+			return false;
+		}
+		return region.equals(((Region) object).getQRegion());
+	}
+
+	/**
+	 * Returns a rectangle which represents the rectangular union of the
+	 * collection of polygons the receiver maintains to describe its area.
+	 * 
+	 * @return a bounding rectangle for the region
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Rectangle#union
+	 */
+	public Rectangle getBounds() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return QtSWTConverter.convert(region.boundingRect());
+	}
+
+	/**
+	 * Returns an integer hash code for the receiver. Any two objects that
+	 * return <code>true</code> when passed to <code>equals</code> must return
+	 * the same value for this method.
+	 * 
+	 * @return the receiver's hash
+	 * 
+	 * @see #equals
+	 */
+	@Override
+	public int hashCode() {
+		return region.hashCode();
+	}
+
+	/**
+	 * Intersects the given rectangle to the collection of polygons the receiver
+	 * maintains to describe its area.
+	 * 
+	 * @param rect
+	 *            the rectangle to intersect with the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or
+	 *                height is negative</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void intersect(Rectangle rect) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (rect == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		intersect(rect.x, rect.y, rect.width, rect.height);
+	}
+
+	/**
+	 * Intersects the given rectangle to the collection of polygons the receiver
+	 * maintains to describe its area.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle
+	 * @param y
+	 *            the y coordinate of the rectangle
+	 * @param width
+	 *            the width coordinate of the rectangle
+	 * @param height
+	 *            the height coordinate of the rectangle
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or
+	 *                height is negative</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void intersect(int x, int y, int width, int height) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (width < 0 || height < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		region = region.intersect(new QRect(x, y, width, height));
+	}
+
+	/**
+	 * Intersects all of the polygons which make up the area covered by the
+	 * argument to the collection of polygons the receiver maintains to describe
+	 * its area.
+	 * 
+	 * @param region
+	 *            the region to intersect
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void intersect(Region region) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (region == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (region.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.region = this.region.intersected(region.getQRegion());
+	}
+
+	/**
+	 * Returns <code>true</code> if the rectangle described by the arguments
+	 * intersects with any of the polygons the receiver maintains to describe
+	 * its area, and <code>false</code> otherwise.
+	 * 
+	 * @param x
+	 *            the x coordinate of the origin of the rectangle
+	 * @param y
+	 *            the y coordinate of the origin of the rectangle
+	 * @param width
+	 *            the width of the rectangle
+	 * @param height
+	 *            the height of the rectangle
+	 * @return <code>true</code> if the rectangle intersects with the receiver,
+	 *         and <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Rectangle#intersects(Rectangle)
+	 */
+	public boolean intersects(int x, int y, int width, int height) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return region.intersects(new QRect(x, y, width, height));
+	}
+
+	/**
+	 * Returns <code>true</code> if the given rectangle intersects with any of
+	 * the polygons the receiver maintains to describe its area and
+	 * <code>false</code> otherwise.
+	 * 
+	 * @param rect
+	 *            the rectangle to test for intersection
+	 * @return <code>true</code> if the rectangle intersects with the receiver,
+	 *         and <code>false</code> otherwise
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Rectangle#intersects(Rectangle)
+	 */
+	public boolean intersects(Rectangle rect) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (rect == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return intersects(rect.x, rect.y, rect.width, rect.height);
+	}
+
+	/**
+	 * Returns <code>true</code> if the region has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the region. When a region has been
+	 * disposed, it is an error to invoke any other method using the region.
+	 * 
+	 * @return <code>true</code> when the region is disposed, and
+	 *         <code>false</code> otherwise
+	 */
+	@Override
+	public boolean isDisposed() {
+		return region == null;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver does not cover any area in the
+	 * (x, y) coordinate plane, and <code>false</code> if the receiver does
+	 * cover some area in the plane.
+	 * 
+	 * @return <code>true</code> if the receiver is empty, and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public boolean isEmpty() {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		return region.isEmpty();
+	}
+
+	/**
+	 * Subtracts the given polygon from the collection of polygons the receiver
+	 * maintains to describe its area.
+	 * 
+	 * @param pointArray
+	 *            points that describe the polygon to merge with the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void subtract(int[] pointArray) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (pointArray == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		QRegion rg = new QRegion(GC.createPolygonFromArray(pointArray));
+		region = region.subtracted(rg);
+	}
+
+	/**
+	 * Subtracts the given rectangle from the collection of polygons the
+	 * receiver maintains to describe its area.
+	 * 
+	 * @param rect
+	 *            the rectangle to subtract from the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or
+	 *                height is negative</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void subtract(Rectangle rect) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (rect == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		subtract(rect.x, rect.y, rect.width, rect.height);
+	}
+
+	/**
+	 * Subtracts the given rectangle from the collection of polygons the
+	 * receiver maintains to describe its area.
+	 * 
+	 * @param x
+	 *            the x coordinate of the rectangle
+	 * @param y
+	 *            the y coordinate of the rectangle
+	 * @param width
+	 *            the width coordinate of the rectangle
+	 * @param height
+	 *            the height coordinate of the rectangle
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or
+	 *                height is negative</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void subtract(int x, int y, int width, int height) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (width < 0 || height < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		region = region.subtracted(new QRegion(x, y, width, height));
+	}
+
+	/**
+	 * Subtracts all of the polygons which make up the area covered by the
+	 * argument from the collection of polygons the receiver maintains to
+	 * describe its area.
+	 * 
+	 * @param region
+	 *            the region to subtract
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void subtract(Region region) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (region == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (region.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.region = this.region.subtracted(region.getQRegion());
+	}
+
+	/**
+	 * Translate all of the polygons the receiver maintains to describe its area
+	 * by the specified point.
+	 * 
+	 * @param x
+	 *            the x coordinate of the point to translate
+	 * @param y
+	 *            the y coordinate of the point to translate
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void translate(int x, int y) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		region = region.translated(x, y);
+	}
+
+	/**
+	 * Translate all of the polygons the receiver maintains to describe its area
+	 * by the specified point.
+	 * 
+	 * @param pt
+	 *            the point to translate
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void translate(Point pt) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+		}
+		if (pt == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		translate(pt.x, pt.y);
+	}
+
+	/**
+	 * Returns a string containing a concise, human-readable description of the
+	 * receiver.
+	 * 
+	 * @return a string representation of the receiver
+	 */
+	@Override
+	public String toString() {
+		if (isDisposed()) {
+			return "Region {*DISPOSED*}"; //$NON-NLS-1$
+		}
+		return "Region {" + region + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new region.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Region</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param device
+	 *            the device on which to allocate the region
+	 * @param handle
+	 *            the handle for the region
+	 * @return a new region object containing the specified device and handle
+	 */
+	public static Region win32_new(Device device, QRegion region) {
+		return new Region(device, region);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/DragNDropListener.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/DragNDropListener.java
new file mode 100644
index 0000000..2850edc
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/DragNDropListener.java	
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDragLeaveEvent;
+import com.trolltech.qt.gui.QDragMoveEvent;
+import com.trolltech.qt.gui.QDropEvent;
+
+public interface DragNDropListener {
+
+	public void dragEnter(QDragEnterEvent event);
+
+	public void dragLeave(QDragLeaveEvent event);
+
+	public void dragMove(QDragMoveEvent event);
+
+	public void drop(QDropEvent event);
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/FontConverter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/FontConverter.java
new file mode 100644
index 0000000..cd042cf
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/FontConverter.java	
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import com.trolltech.qt.gui.QFont;
+import com.trolltech.qt.gui.QFont.Weight;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+
+/**
+ * @author kriese
+ * 
+ */
+public class FontConverter {
+
+	private List<FontNameTuple> fontNames;
+	private List<FontStyleTuple> fontStyles;
+
+	public FontConverter() {
+		fontNames = new LinkedList<FontNameTuple>();
+		fontNames.add(new FontNameTuple("Arial", "Times")); //$NON-NLS-1$ //$NON-NLS-2$
+
+		fontStyles = new LinkedList<FontStyleTuple>();
+		fontStyles.add(new FontStyleTuple(SWT.BOLD, QFont.Weight.Bold));
+		fontStyles.add(new FontStyleTuple(SWT.NORMAL, QFont.Weight.Normal));
+	}
+
+	public QFont getQtFont(Font swtFont) {
+
+		FontNameTuple tuple = null;
+		for (FontNameTuple f : fontNames) {
+			if (f.getSwtFontName().equals(swtFont.getFontData()[0].getName())) {
+				tuple = f;
+			}
+		}
+
+		// swtFont.getFontData()[0].get
+
+		FontStyleTuple style = null;
+		for (FontStyleTuple s : fontStyles) {
+			if (s.getSwtStyle() == swtFont.getFontData()[0].getStyle()) {
+				style = s;
+			}
+		}
+
+		if (null != tuple) {
+
+			if (null != style) {
+				return new QFont(tuple.getQtFontName(), swtFont.getFontData()[0].getHeight(), style.getQtStyle()
+						.value());
+			}
+
+			return new QFont(tuple.getQtFontName(), swtFont.getFontData()[0].getHeight());
+		}
+
+		return null;
+	}
+
+	private static class FontStyleTuple {
+		private QFont.Weight qtStyle;
+		private int swtStyle;
+
+		public FontStyleTuple(int swtStyle, Weight qtStyle) {
+			super();
+			this.qtStyle = qtStyle;
+			this.swtStyle = swtStyle;
+		}
+
+		public QFont.Weight getQtStyle() {
+			return qtStyle;
+		}
+
+		public int getSwtStyle() {
+			return swtStyle;
+		}
+	}
+
+	private static class FontNameTuple {
+		private String swtFontName;
+		private String qtFontName;
+
+		public FontNameTuple(String swtFontName, String qtFontName) {
+			this.swtFontName = swtFontName;
+			this.qtFontName = qtFontName;
+		}
+
+		public String getSwtFontName() {
+			return swtFontName;
+		}
+
+		public String getQtFontName() {
+			return qtFontName;
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/KeyUtil.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/KeyUtil.java
new file mode 100644
index 0000000..9d25fa7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/KeyUtil.java	
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import com.trolltech.qt.core.Qt.Key;
+import com.trolltech.qt.core.Qt.KeyboardModifier;
+import com.trolltech.qt.core.Qt.KeyboardModifiers;
+import com.trolltech.qt.gui.QKeyEvent;
+
+import org.eclipse.swt.SWT;
+
+/**
+ * Helper class for Key translation SWT <-> Qt
+ */
+public class KeyUtil {
+	/* Key Mappings */
+	private static final int[][] KeyTable = {
+	/* Keyboard and Mouse Masks */
+	{ Key.Key_Alt.value(), SWT.ALT }, { Key.Key_AltGr.value(), SWT.ALT }, { Key.Key_Meta.value(), SWT.ALT },
+			{ Key.Key_Shift.value(), SWT.SHIFT }, { Key.Key_Control.value(), SWT.CONTROL },
+			/* Non-Numeric Keypad Keys */
+			{ Key.Key_Up.value(), SWT.ARROW_UP }, { Key.Key_Down.value(), SWT.ARROW_DOWN },
+			{ Key.Key_Left.value(), SWT.ARROW_LEFT }, { Key.Key_Right.value(), SWT.ARROW_RIGHT },
+			{ Key.Key_PageUp.value(), SWT.PAGE_UP }, { Key.Key_PageDown.value(), SWT.PAGE_DOWN },
+			{ Key.Key_Home.value(), SWT.HOME }, { Key.Key_End.value(), SWT.END },
+			{ Key.Key_Insert.value(), SWT.INSERT },
+			/* Virtual and Ascii Keys */
+			{ Key.Key_Space.value(), ' ' }, { Key.Key_Backspace.value(), SWT.BS }, { Key.Key_Return.value(), SWT.CR },
+			{ Key.Key_Delete.value(), SWT.DEL }, { Key.Key_Escape.value(), SWT.ESC },
+			{ Key.Key_Enter.value(), SWT.CR }, { Key.Key_Tab.value(), SWT.TAB }, { Key.Key_Backtab.value(), SWT.TAB },
+			/* Functions Keys */
+			{ Key.Key_F1.value(), SWT.F1 }, { Key.Key_F2.value(), SWT.F2 }, { Key.Key_F3.value(), SWT.F3 },
+			{ Key.Key_F4.value(), SWT.F4 }, { Key.Key_F5.value(), SWT.F5 }, { Key.Key_F6.value(), SWT.F6 },
+			{ Key.Key_F7.value(), SWT.F7 }, { Key.Key_F8.value(), SWT.F8 }, { Key.Key_F9.value(), SWT.F9 },
+			{ Key.Key_F10.value(), SWT.F10 }, { Key.Key_F11.value(), SWT.F11 }, { Key.Key_F12.value(), SWT.F12 },
+			{ Key.Key_F13.value(), SWT.F13 }, { Key.Key_F14.value(), SWT.F14 }, { Key.Key_F15.value(), SWT.F15 },
+			/* Other keys */
+			{ Key.Key_CapsLock.value(), SWT.CAPS_LOCK }, { Key.Key_NumLock.value(), SWT.NUM_LOCK },
+			{ Key.Key_ScrollLock.value(), SWT.SCROLL_LOCK }, { Key.Key_Pause.value(), SWT.PAUSE },
+			{ Key.Key_Print.value(), SWT.PRINT_SCREEN }, { Key.Key_Help.value(), SWT.HELP },
+
+	};
+
+	private static final int[][] KeyPadKeyTable = {
+	/* Numeric Keypad Keys */
+	{ Key.Key_Asterisk.value(), SWT.KEYPAD_MULTIPLY }, { Key.Key_Plus.value(), SWT.KEYPAD_ADD },
+			{ Key.Key_Enter.value(), SWT.KEYPAD_CR }, { Key.Key_Minus.value(), SWT.KEYPAD_SUBTRACT },
+			{ Key.Key_Period.value(), SWT.KEYPAD_DECIMAL }, { Key.Key_Slash.value(), SWT.KEYPAD_DIVIDE },
+			{ Key.Key_0.value(), SWT.KEYPAD_0 }, { Key.Key_1.value(), SWT.KEYPAD_1 },
+			{ Key.Key_2.value(), SWT.KEYPAD_2 }, { Key.Key_3.value(), SWT.KEYPAD_3 },
+			{ Key.Key_4.value(), SWT.KEYPAD_4 }, { Key.Key_5.value(), SWT.KEYPAD_5 },
+			{ Key.Key_6.value(), SWT.KEYPAD_6 }, { Key.Key_7.value(), SWT.KEYPAD_7 },
+			{ Key.Key_8.value(), SWT.KEYPAD_8 }, { Key.Key_9.value(), SWT.KEYPAD_9 },
+			{ Key.Key_Equal.value(), SWT.KEYPAD_EQUAL }, };
+
+	private KeyUtil() {
+		// utility class
+	}
+
+	public static int translateKey(int key) {
+		for (int i = 0; i < KeyTable.length; i++) {
+			if (KeyTable[i][0] == key) {
+				return KeyTable[i][1];
+			}
+		}
+		return 0;
+	}
+
+	public static int untranslateKey(int key) {
+		for (int i = 0; i < KeyTable.length; i++) {
+			if (KeyTable[i][1] == key) {
+				return KeyTable[i][0];
+			}
+		}
+		return 0;
+	}
+
+	// Converts keys from Qt to SWT
+	public static final int translateKey(QKeyEvent qEvent) {
+		int key = qEvent.key();
+		boolean keypad = qEvent.modifiers().isSet(KeyboardModifier.KeypadModifier);
+		if (keypad) {
+			for (int i = 0; i < KeyPadKeyTable.length; i++) {
+				if (KeyPadKeyTable[i][0] == key) {
+					return KeyPadKeyTable[i][1];
+				}
+			}
+		}
+		for (int i = 0; i < KeyTable.length; i++) {
+			if (KeyTable[i][0] == key) {
+				return KeyTable[i][1];
+			}
+		}
+		return 0;
+	}
+
+	// Converts modifiers from Qt to SWT
+	public static final int translateModifiers(KeyboardModifiers nativeModifiers) {
+		int modifiers = 0;
+		if (nativeModifiers.isSet(KeyboardModifier.AltModifier)) {
+			modifiers |= SWT.ALT;
+		}
+		if (nativeModifiers.isSet(KeyboardModifier.ShiftModifier)) {
+			modifiers |= SWT.SHIFT;
+		}
+		if (nativeModifiers.isSet(KeyboardModifier.ControlModifier)) {
+			modifiers |= SWT.CONTROL;
+		}
+		return modifiers;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSWTConverter.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSWTConverter.java
new file mode 100644
index 0000000..e67a631
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSWTConverter.java	
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QRegion;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Region;
+
+/**
+ * @author J�rgen Becker
+ * 
+ */
+public class QtSWTConverter {
+
+	private QtSWTConverter() {
+		// utility class
+	}
+
+	public static Rectangle convert(QRect rect) {
+		if (rect == null) {
+			return null;
+		}
+		return new Rectangle(rect.x(), rect.y(), rect.width(), rect.height());
+	}
+
+	public static QRect convert(Rectangle rect) {
+		if (rect == null) {
+			return null;
+		}
+		return new QRect(rect.x, rect.y, rect.width, rect.height);
+	}
+
+	public static Point convert(QSize size) {
+		if (size == null) {
+			return null;
+		}
+		return new Point(size.width(), size.height());
+	}
+
+	public static Point convert(QPoint point) {
+		if (point == null) {
+			return null;
+		}
+		return new Point(point.x(), point.y());
+	}
+
+	public static Point convertPosition(QRect rect) {
+		if (rect == null) {
+			return null;
+		}
+		return new Point(rect.x(), rect.y());
+	}
+
+	public static Point convertSize(QRect rect) {
+		if (rect == null) {
+			return null;
+		}
+		return new Point(rect.width(), rect.height());
+	}
+
+	public static QPoint convert(Point point) {
+		if (point == null) {
+			return null;
+		}
+		return new QPoint(point.x, point.y);
+	}
+
+	public static QColor convert(Color color) {
+		if (color == null) {
+			return null;
+		}
+		return new QColor(color.getRed(), color.getGreen(), color.getBlue());
+	}
+
+	public static Color convert(QColor color) {
+		if (color == null) {
+			return null;
+		}
+		return new Color(null, color.red(), color.green(), color.blue());
+	}
+
+	public static QRegion convert(Region region) {
+		if (region == null) {
+			return null;
+		}
+		return new QRegion(convert(region.getBounds()));
+	}
+
+	public static Rectangle convert(QRegion region) {
+		if (region == null) {
+			return null;
+		}
+		return convert(region.boundingRect());
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSupplementaryFontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSupplementaryFontData.java
new file mode 100644
index 0000000..b7343e5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/QtSupplementaryFontData.java	
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux 
+ *******************************************************************************/
+
+package org.eclipse.swt.internal.qt;
+
+import com.trolltech.qt.gui.QFont.Style;
+import com.trolltech.qt.gui.QFont.StyleStrategy;
+
+public final class QtSupplementaryFontData {
+	public int underline = -1;
+	public int overline = -1;
+	public int strikeOut = -1;
+	public int stretch = -1;
+	public int fixedPitch = -1;
+	public Style style = null;
+	public int weight = -1;
+	public StyleStrategy styleStrategy = null;
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SWQT.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SWQT.java
new file mode 100644
index 0000000..e176185
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SWQT.java	
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010s compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+public class SWQT {
+
+	/* Widget Event Constants */
+
+	/**
+	 * The null event type (value is 0).
+	 * 
+	 * @since 3.0
+	 */
+	public static final int StyleSheetChange = 1024;
+
+	/**
+	 * 
+	 */
+	public static final String STYLESHEET_KEY = "stylesheet"; //$NON-NLS-1$
+
+	// Qt QFont::Weight
+	public static final int QT_FONTNORMAL = 50;
+	public static final int QT_FONTBOLD = 75;
+
+	// QFont::Style
+	public static final int QFONT_STYLE_NORMAL = 0;
+	public static final int QFONT_STYLE_ITALIC = 1;
+	public static final int QFONT_STYLE_OBLIQUE = 2;
+
+	// QFont::StyleStrategy
+	public static final int QFONT_STYLESTRATEGY_PREFERDEFALUT = 0x0001;
+	public static final int QFONT_STYLESTRATEGY_PREFERBITMAP = 0x0002;
+	public static final int QFONT_STYLESTRATEGY_PREFERDEVICE = 0x0004;
+	public static final int QFONT_STYLESTRATEGY_PREFEROUTLINE = 0x0008;
+	public static final int QFONT_STYLESTRATEGY_FORCEOUTLINE = 0x0010;
+	public static final int QFONT_STYLESTRATEGY_NOANTIALIAS = 0x0100;
+	public static final int QFONT_STYLESTRATEGY_PREFERANTIALIAS = 0x0080;
+	public static final int QFONT_STYLESTRATEGY_OPENGLCOMPATIABLE = 0x0200;
+	public static final int QFONT_STYLESTRATEGY_NOFONTMERGING = 0x8000;
+	public static final int QFONT_STYLESTRATEGY_PREFERMATCH = 0x0020;
+	public static final int QFONT_STYLESTRATEGY_PREFERQUALITY = 0x0040;
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SignalConnector.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SignalConnector.java
new file mode 100644
index 0000000..08414ac
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/SignalConnector.java	
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import com.trolltech.qt.QSignalEmitter.AbstractSignal;
+
+/**
+ * A {@code SignalConnector} is the representation of a certain signal,
+ * receiver, method tuple. This tuple allows connecting and disconnecting from
+ * the signal - without the need of constantly repeating (error-prone) the
+ * necessary parameters.
+ */
+public class SignalConnector {
+
+	private final AbstractSignal signal;
+	private final Object receiver;
+	private final String method;
+
+	/**
+	 * Create a {@code SignalConnector} from the given parameters.
+	 * 
+	 * @param signal
+	 *            the signal
+	 * @param receiver
+	 *            the receiver of the signal
+	 * @param method
+	 *            the reveiver's method
+	 */
+	public SignalConnector(final AbstractSignal signal, final Object receiver, final String method) {
+		this.signal = signal;
+		this.receiver = receiver;
+		this.method = method;
+	}
+
+	/**
+	 * Connect the signal.
+	 * 
+	 * @return this object.
+	 */
+	public SignalConnector connect() {
+		signal.connect(receiver, method);
+		return this;
+	}
+
+	/**
+	 * Disconnect the signal.
+	 */
+	public void disconnect() {
+		signal.disconnect(receiver, method);
+	}
+
+	/**
+	 * Run the given {@code Runnable} with disconnecting before and
+	 * re-connection afterwards.
+	 * 
+	 * @param runnable
+	 */
+	public void runDisconnected(final Runnable runnable) {
+		try {
+			disconnect();
+			runnable.run();
+		} finally {
+			connect();
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/StylableScrollArea.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/StylableScrollArea.java
new file mode 100644
index 0000000..ef6bef9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/StylableScrollArea.java	
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2009 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import com.trolltech.qt.QtPropertyResetter;
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QScrollArea;
+
+public class StylableScrollArea extends QScrollArea {
+	private QColor gradientStart = new QColor(0, 0, 255);
+	private QColor gradientEnd = new QColor(0, 255, 0);
+	private QColor text = new QColor(0, 0, 0);
+	private QColor border = new QColor(255, 255, 255);
+
+	public QColor getGradientStart() {
+		return gradientStart;
+	}
+
+	public void setGradientStart(QColor gradientStart) {
+		this.gradientStart = gradientStart;
+	}
+
+	@QtPropertyResetter(name = "gradientStart")
+	public void resetGradientStart() {
+		gradientStart = new QColor(0, 0, 255);
+	}
+
+	public QColor getGradientEnd() {
+		return gradientEnd;
+	}
+
+	public void setGradientEnd(QColor gradientEnd) {
+		this.gradientEnd = gradientEnd;
+	}
+
+	public QColor getText() {
+		return text;
+	}
+
+	public void setText(QColor text) {
+		this.text = text;
+	}
+
+	public QColor getBorder() {
+		return border;
+	}
+
+	public void setBorder(QColor border) {
+		this.border = border;
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/ToString.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/ToString.java
new file mode 100644
index 0000000..288a2df
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/internal/qt/ToString.java	
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 compeople AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    compeople AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+
+/**
+ * Generic .toString() that collects all Java bean properties.
+ */
+public final class ToString {
+
+	private static final String SEPARATOR = ", "; //$NON-NLS-1$
+
+	private ToString() {
+
+	}
+
+	/**
+	 * Collect all Java bean properties of the given object and return them as a
+	 * printable string.
+	 * 
+	 * @param object
+	 * @return toString()
+	 */
+	public static String of(Object object) {
+		if (object == null) {
+			return "NULL"; //$NON-NLS-1$
+		}
+		try {
+			return of(object, Introspector.getBeanInfo(object.getClass()));
+		} catch (IntrospectionException e) {
+			return e.toString();
+		}
+	}
+
+	/**
+	 * Collect all Java bean properties of the given object but stop
+	 * introspection at the given stop class and return them as a printable
+	 * string.
+	 * 
+	 * @param object
+	 * @param stopClass
+	 *            if {@code null} stop class will be the super class of the
+	 *            given object
+	 * @return toString()
+	 */
+	public static String of(Object object, Class<?> stopClass) {
+		if (object == null) {
+			return "NULL"; //$NON-NLS-1$
+		}
+		if (stopClass == null) {
+			stopClass = object.getClass().getSuperclass();
+		}
+		String result = object.toString() + " - "; //$NON-NLS-1$
+		try {
+			result = result + of(object, Introspector.getBeanInfo(object.getClass(), stopClass));
+		} catch (IntrospectionException e) {
+			result = result + e.toString();
+		}
+		return result;
+	}
+
+	@SuppressWarnings("nls")
+	private static String of(Object object, BeanInfo beanInfo) {
+		StringBuilder bob = new StringBuilder(object.getClass().getSimpleName()).append(" (");
+		PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+		for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
+			Method readMethod = propertyDescriptor.getReadMethod();
+			try {
+				if (readMethod != null && !propertyDescriptor.getName().equals("class")) {
+					Object value = readMethod.invoke(object, (Object[]) null);
+					if (value != null && value.toString().startsWith(value.getClass().getName() + "@")) {
+						value = "..";
+					}
+					bob.append(propertyDescriptor.getName()).append('=').append(value).append(SEPARATOR);
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		if (bob.toString().endsWith(SEPARATOR)) {
+			bob.setLength(bob.length() - SEPARATOR.length());
+		}
+		bob.append(" )");
+		return bob.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Button.java
new file mode 100644
index 0000000..b331991
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Button.java	
@@ -0,0 +1,801 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.Qt.CheckState;
+import com.trolltech.qt.gui.QAbstractButton;
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QCheckBox;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QPushButton;
+import com.trolltech.qt.gui.QRadioButton;
+import com.trolltech.qt.gui.QSizePolicy;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * issues notification when pressed and released.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>ARROW, CHECK, PUSH, RADIO, TOGGLE, FLAT</dd>
+ * <dd>UP, DOWN, LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles ARROW, CHECK, PUSH, RADIO, and TOGGLE may be
+ * specified.
+ * </p>
+ * <p>
+ * Note: Only one of the styles LEFT, RIGHT, and CENTER may be specified.
+ * </p>
+ * <p>
+ * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified when
+ * the ARROW style is specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Button extends Control {
+	private Image image;
+	private Image image2;
+	private Image disabledImage;
+	private static/* final */boolean COMMAND_LINK = false;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#ARROW
+	 * @see SWT#CHECK
+	 * @see SWT#PUSH
+	 * @see SWT#RADIO
+	 * @see SWT#TOGGLE
+	 * @see SWT#FLAT
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#CENTER
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Button(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected void connectSignals() {
+		getQButton().released.connect(this, "clickEvent()"); //$NON-NLS-1$
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		int marginLeft = 0;
+		int marginTop = 0;
+		int marginRight = 0;
+		int marginBottom = 0;
+		QAbstractButton tb;
+		if ((style & SWT.CHECK) != 0) {
+			tb = new MyQCheckBox();
+			marginTop = 0;
+			marginBottom = 2;
+		} else if ((style & SWT.RADIO) != 0) {
+			tb = new MyQRadioButton();
+			if ((getParent().style & SWT.NO_RADIO_GROUP) != 0) {
+				tb.setAutoExclusive(false);
+			}
+			marginTop = 3;
+			marginBottom = 0;
+		} else {
+			tb = new MyQPushButton();
+			if ((style & SWT.TOGGLE) != 0) {
+				tb.setCheckable(true);
+			}
+			if ((style & SWT.FLAT) != 0) {
+				((QPushButton) tb).setFlat(true);
+			}
+			// In SWT, push buttons do not inherit color from
+			// their parent, not even with INHERIT_FORCE.
+			tb.setPalette(QApplication.palette());
+			marginTop = 3;
+		}
+		tb.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum);
+		tb.setContentsMargins(marginLeft, marginTop, marginRight, marginBottom);
+		return tb;
+	}
+
+	QAbstractButton getQButton() {
+		return (QAbstractButton) getQWidget();
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the control is selected by the
+	 * user. <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	protected void clickEvent() {
+		sendEvent(SWT.Selection);
+	}
+
+	static int checkStyle(int style) {
+		style = checkBits(style, SWT.PUSH, SWT.ARROW, SWT.CHECK, SWT.RADIO, SWT.TOGGLE, COMMAND_LINK ? SWT.COMMAND : 0);
+		if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0) {
+			return checkBits(style, SWT.CENTER, SWT.LEFT, SWT.RIGHT, 0, 0, 0);
+		}
+		if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+			return checkBits(style, SWT.LEFT, SWT.RIGHT, SWT.CENTER, 0, 0, 0);
+		}
+		if ((style & SWT.ARROW) != 0) {
+			style |= SWT.NO_FOCUS;
+			return checkBits(style, SWT.UP, SWT.DOWN, SWT.LEFT, SWT.RIGHT, 0, 0);
+		}
+		return style;
+	}
+
+	void click() {
+		getQButton().click();
+	}
+
+	// public Point computeSize( int wHint, int hHint, boolean changed ) {
+	// checkWidget();
+	// Point size = super.computeSize( wHint, hHint, changed );
+	// size.x += 2;
+	// return size;
+	// }
+
+	/**
+	 * Returns a value which describes the position of the text or image in the
+	 * receiver. The value will be one of <code>LEFT</code>, <code>RIGHT</code>
+	 * or <code>CENTER</code> unless the receiver is an <code>ARROW</code>
+	 * button, in which case, the alignment will indicate the direction of the
+	 * arrow (one of <code>LEFT</code>, <code>RIGHT</code>, <code>UP</code> or
+	 * <code>DOWN</code>).
+	 * 
+	 * @return the alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getAlignment() {
+		checkWidget();
+		if ((style & SWT.ARROW) != 0) {
+			if ((style & SWT.UP) != 0) {
+				return SWT.UP;
+			}
+			if ((style & SWT.DOWN) != 0) {
+				return SWT.DOWN;
+			}
+			if ((style & SWT.LEFT) != 0) {
+				return SWT.LEFT;
+			}
+			if ((style & SWT.RIGHT) != 0) {
+				return SWT.RIGHT;
+			}
+			return SWT.UP;
+		}
+		if ((style & SWT.LEFT) != 0) {
+			return SWT.LEFT;
+		}
+		if ((style & SWT.CENTER) != 0) {
+			return SWT.CENTER;
+		}
+		if ((style & SWT.RIGHT) != 0) {
+			return SWT.RIGHT;
+		}
+		return SWT.LEFT;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is grayed, and false otherwise.
+	 * When the widget does not have the <code>CHECK</code> style, return false.
+	 * 
+	 * @return the grayed state of the checkbox
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public boolean getGrayed() {
+		checkWidget();
+		if ((style & SWT.CHECK) == 0) {
+			return false;
+		}
+		QCheckBox box = (QCheckBox) getQButton();
+		if (box.isTristate()) {
+			return CheckState.PartiallyChecked.equals(box.checkState());
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the receiver's image if it has one, or null if it does not.
+	 * 
+	 * @return the receiver's image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Image getImage() {
+		checkWidget();
+		return image;
+	}
+
+	/**
+	 * Returns the widget message. When the widget is created with the style
+	 * <code>SWT.COMMAND</code>, the message text is displayed to provide
+	 * further information for the user.
+	 * 
+	 * @return the widget message
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	/* public */String getMessage() {
+		checkWidget();
+		return getQButton().whatsThis();
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is selected, and false
+	 * otherwise.
+	 * <p>
+	 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, it
+	 * is selected when it is checked. When it is of type <code>TOGGLE</code>,
+	 * it is selected when it is pushed in. If the receiver is of any other
+	 * type, this method returns false.
+	 * 
+	 * @return the selection state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getSelection() {
+		checkWidget();
+		if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) {
+			return false;
+		}
+		return getQButton().isChecked();
+	}
+
+	/**
+	 * Returns the receiver's text, which will be an empty string if it has
+	 * never been set or if the receiver is an <code>ARROW</code> button.
+	 * 
+	 * @return the receiver's text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		if ((style & SWT.ARROW) != 0) {
+			return ""; //$NON-NLS-1$
+		}
+		return getQButton().text();
+	}
+
+	@Override
+	boolean isTabItem() {
+		if ((style & SWT.PUSH) != 0) {
+			return isTabGroup();
+		}
+		return super.isTabItem();
+	}
+
+	@Override
+	boolean mnemonicHit(char ch) {
+		if (!setFocus()) {
+			return false;
+		}
+		/*
+		 * Feature in Windows. When a radio button gets focus, it selects the
+		 * button in WM_SETFOCUS. Therefore, it is not necessary to click the
+		 * button or send events because this has already happened in
+		 * WM_SETFOCUS.
+		 */
+		if ((style & SWT.RADIO) == 0) {
+			click();
+		}
+		return true;
+	}
+
+	@Override
+	boolean mnemonicMatch(char key) {
+		char mnemonic = findMnemonic(getText());
+		if (mnemonic == '\0') {
+			return false;
+		}
+		return Character.toUpperCase(key) == Character.toUpperCase(mnemonic);
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		if (disabledImage != null) {
+			disabledImage.dispose();
+			disabledImage = null;
+		}
+		if (image2 != null) {
+			image2.dispose();
+			image2 = null;
+		}
+		image = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	void selectRadio() {
+		/*
+		 * This code is intentionally commented. When two groups of radio
+		 * buttons with the same parent are separated by another control, the
+		 * correct behavior should be that the two groups act independently.
+		 * This is consistent with radio tool and menu items. The commented code
+		 * implements this behavior.
+		 */
+		// int index = 0;
+		// Control [] children = parent._getChildren ();
+		// while (index < children.length && children [index] != this) index++;
+		// int i = index - 1;
+		// while (i >= 0 && children [i].setRadioSelection (false)) --i;
+		// int j = index + 1;
+		// while (j < children.length && children [j].setRadioSelection (false))
+		// j++;
+		// setSelection (true);
+		Control[] children = parent._getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			if (this != child) {
+				child.setRadioSelection(false);
+			}
+		}
+		setSelection(true);
+	}
+
+	/**
+	 * Controls how text, images and arrows will be displayed in the receiver.
+	 * The argument should be one of <code>LEFT</code>, <code>RIGHT</code> or
+	 * <code>CENTER</code> unless the receiver is an <code>ARROW</code> button,
+	 * in which case, the argument indicates the direction of the arrow (one of
+	 * <code>LEFT</code>, <code>RIGHT</code>, <code>UP</code> or
+	 * <code>DOWN</code>).
+	 * 
+	 * @param alignment
+	 *            the new alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setAlignment(int alignment) {
+		checkWidget();
+		// TODO how to change it for the qt control
+		if ((style & SWT.ARROW) != 0) {
+			if ((style & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT)) == 0) {
+				return;
+			}
+			style &= ~(SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
+			style |= alignment & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
+			return;
+		}
+		if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) {
+			return;
+		}
+		style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+		style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	}
+
+	void setDefault(boolean value) {
+		if ((style & SWT.PUSH) == 0) {
+			return;
+		}
+		((QPushButton) getQButton()).setDefault(value);
+	}
+
+	@Override
+	boolean setFixedFocus() {
+		/*
+		 * Feature in Windows. When a radio button gets focus, it selects the
+		 * button in WM_SETFOCUS. The fix is to not assign focus to an
+		 * unselected radio button.
+		 */
+		if ((style & SWT.RADIO) != 0 && !getSelection()) {
+			return false;
+		}
+		return super.setFixedFocus();
+	}
+
+	/**
+	 * Sets the receiver's image to the argument, which may be <code>null</code>
+	 * indicating that no image should be displayed.
+	 * <p>
+	 * Note that a Button can display an image and text simultaneously on
+	 * Windows (starting with XP), GTK+ and OSX. On other platforms, a Button
+	 * that has an image and text set into it will display the image or text
+	 * that was set most recently.
+	 * </p>
+	 * 
+	 * @param image
+	 *            the image to display on the receiver (may be <code>null</code>
+	 *            )
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setImage(Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if ((style & SWT.ARROW) != 0) {
+			return;
+		}
+		this.image = image;
+
+		getQButton().setIcon(image.getQIcon());
+		getQButton().setIconSize(image.getDefaultIconSize());
+	}
+
+	/**
+	 * Sets the grayed state of the receiver. This state change only applies if
+	 * the control was created with the SWT.CHECK style.
+	 * 
+	 * @param grayed
+	 *            the new grayed state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setGrayed(boolean grayed) {
+		checkWidget();
+		if ((style & SWT.CHECK) == 0) {
+			return;
+		}
+		QCheckBox box = (QCheckBox) getQButton();
+		box.setTristate(true);
+		box.setCheckState(CheckState.PartiallyChecked);
+	}
+
+	/**
+	 * Sets the widget message. When the widget is created with the style
+	 * <code>SWT.COMMAND</code>, the message text is displayed to provide
+	 * further information for the user.
+	 * 
+	 * @param message
+	 *            the new message
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	/* public */void setMessage(String message) {
+		checkWidget();
+		if (message == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		getQButton().setWhatsThis(message);
+	}
+
+	@Override
+	boolean setRadioFocus(boolean tabbing) {
+		if ((style & SWT.RADIO) == 0 || !getSelection()) {
+			return false;
+		}
+		return tabbing ? setTabItemFocus() : setFocus();
+	}
+
+	@Override
+	boolean setRadioSelection(boolean value) {
+		if ((style & SWT.RADIO) == 0) {
+			return false;
+		}
+		if (getSelection() != value) {
+			setSelection(value);
+			postEvent(SWT.Selection);
+		}
+		return true;
+	}
+
+	@Override
+	boolean setSavedFocus() {
+		/*
+		 * Feature in Windows. When a radio button gets focus, it selects the
+		 * button in WM_SETFOCUS. If the previous saved focus widget was a radio
+		 * button, allowing the shell to automatically restore the focus to the
+		 * previous radio button will unexpectedly check that button. The fix is
+		 * to not assign focus to an unselected radio button.
+		 */
+		if ((style & SWT.RADIO) != 0 && !getSelection()) {
+			return false;
+		}
+		return super.setSavedFocus();
+	}
+
+	/**
+	 * Sets the selection state of the receiver, if it is of type
+	 * <code>CHECK</code>, <code>RADIO</code>, or <code>TOGGLE</code>.
+	 * 
+	 * <p>
+	 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, it
+	 * is selected when it is checked. When it is of type <code>TOGGLE</code>,
+	 * it is selected when it is pushed in.
+	 * 
+	 * @param selected
+	 *            the new selection state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(boolean selected) {
+		checkWidget();
+		if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) {
+			return;
+		}
+		getQButton().setChecked(selected);
+	}
+
+	/**
+	 * Sets the receiver's text.
+	 * <p>
+	 * This method sets the button label. The label may include the mnemonic
+	 * character but must not contain line delimiters.
+	 * </p>
+	 * <p>
+	 * Mnemonics are indicated by an '&' that causes the next character to
+	 * be the mnemonic. When the user presses a key sequence that matches the
+	 * mnemonic, a selection event occurs. On most platforms, the mnemonic
+	 * appears underlined but may be emphasized in a platform specific manner.
+	 * The mnemonic indicator character '&' can be escaped by doubling it in
+	 * the string, causing a single '&' to be displayed.
+	 * </p>
+	 * <p>
+	 * Note that a Button can display an image and text simultaneously on
+	 * Windows (starting with XP), GTK+ and OSX. On other platforms, a Button
+	 * that has an image and text set into it will display the image or text
+	 * that was set most recently.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if ((style & SWT.ARROW) != 0) {
+			return;
+		}
+		getQButton().setText(string);
+	}
+
+	private final class MyQCheckBox extends QCheckBox {
+
+		@Override
+		protected void mousePressEvent(QMouseEvent e) {
+			super.mousePressEvent(e);
+			e.setAccepted(false);
+		}
+
+	}
+
+	private final class MyQRadioButton extends QRadioButton {
+
+		@Override
+		protected void mousePressEvent(QMouseEvent e) {
+			super.mousePressEvent(e);
+			e.setAccepted(false);
+		}
+
+	}
+
+	private final class MyQPushButton extends QPushButton {
+
+		@Override
+		protected void mousePressEvent(QMouseEvent e) {
+			super.mousePressEvent(e);
+			e.setAccepted(false);
+		}
+
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Canvas.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Canvas.java
new file mode 100644
index 0000000..4ae2a9a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Canvas.java	
@@ -0,0 +1,355 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.gui.QPaintEvent;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class provide a surface for drawing arbitrary graphics.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * This class may be subclassed by custom control implementors who are building
+ * controls that are <em>not</em> constructed from aggregates of other controls.
+ * That is, they are either painted using SWT graphics calls or are handled by
+ * native methods.
+ * </p>
+ * 
+ * @see Composite
+ * @see <a href="http://www.eclipse.org/swt/snippets/#canvas">Canvas
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+
+public class Canvas extends Composite {
+	Caret caret;
+	IME ime;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Canvas() {
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Canvas(Composite parent, int style) {
+		super(parent, style);
+	}
+
+	/**
+	 * Fills the interior of the rectangle specified by the arguments, with the
+	 * receiver's background.
+	 * 
+	 * @param gc
+	 *            the gc where the rectangle is to be filled
+	 * @param x
+	 *            the x coordinate of the rectangle to be filled
+	 * @param y
+	 *            the y coordinate of the rectangle to be filled
+	 * @param width
+	 *            the width of the rectangle to be filled
+	 * @param height
+	 *            the height of the rectangle to be filled
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void drawBackground(GC gc, int x, int y, int width, int height) {
+		checkWidget();
+		if (gc == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (gc.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		Color gcBG = gc.getBackground();
+		gc.setBackground(getBackground());
+		gc.fillRectangle(x, y, width, height);
+		gc.setBackground(gcBG);
+	}
+
+	/**
+	 * Returns the caret.
+	 * <p>
+	 * The caret for the control is automatically hidden and shown when the
+	 * control is painted or resized, when focus is gained or lost and when an
+	 * the control is scrolled. To avoid drawing on top of the caret, the
+	 * programmer must hide and show the caret when drawing in the window any
+	 * other time.
+	 * </p>
+	 * 
+	 * @return the caret for the receiver, may be null
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Caret getCaret() {
+		checkWidget();
+		return caret;
+	}
+
+	/**
+	 * Returns the IME.
+	 * 
+	 * @return the IME
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public IME getIME() {
+		checkWidget();
+		return ime;
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		if (caret != null) {
+			caret.release(false);
+			caret = null;
+		}
+		if (ime != null) {
+			ime.release(false);
+			ime = null;
+		}
+		super.releaseChildren(destroy);
+	}
+
+	/**
+	 * Scrolls a rectangular area of the receiver by first copying the source
+	 * area to the destination and then causing the area of the source which is
+	 * not covered by the destination to be repainted. Children that intersect
+	 * the rectangle are optionally moved during the operation. In addition,
+	 * outstanding paint events are flushed before the source area is copied to
+	 * ensure that the contents of the canvas are drawn correctly.
+	 * 
+	 * @param destX
+	 *            the x coordinate of the destination
+	 * @param destY
+	 *            the y coordinate of the destination
+	 * @param x
+	 *            the x coordinate of the source
+	 * @param y
+	 *            the y coordinate of the source
+	 * @param width
+	 *            the width of the area
+	 * @param height
+	 *            the height of the area
+	 * @param all
+	 *            <code>true</code>if children should be scrolled, and
+	 *            <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void scroll(int destX, int destY, int x, int y, int width, int height, boolean all) {
+		checkWidget();
+		if (width <= 0 || height <= 0) {
+			return;
+		}
+		int deltaX = destX - x, deltaY = destY - y;
+		if (deltaX == 0 && deltaY == 0) {
+			return;
+		}
+		if (!isVisible()) {
+			return;
+		}
+
+		//getQWidget().scroll(deltaX, deltaY, new QRect(x, y, width, height));
+
+		if (all) {
+			Control[] children = _getChildren();
+			for (int i = 0; i < children.length; i++) {
+				Control child = children[i];
+				Rectangle rect = child.getBounds();
+				if (Math.min(x + width, rect.x + rect.width) >= Math.max(x, rect.x)
+						&& Math.min(y + height, rect.y + rect.height) >= Math.max(y, rect.y)) {
+					child.setLocation(rect.x + deltaX, rect.y + deltaY);
+				}
+			}
+		}
+		getQMasterWidget().update();
+	}
+
+	/**
+	 * Sets the receiver's caret.
+	 * <p>
+	 * The caret for the control is automatically hidden and shown when the
+	 * control is painted or resized, when focus is gained or lost and when an
+	 * the control is scrolled. To avoid drawing on top of the caret, the
+	 * programmer must hide and show the caret when drawing in the window any
+	 * other time.
+	 * </p>
+	 * 
+	 * @param caret
+	 *            the new caret for the receiver, may be null
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the caret has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setCaret(Caret caret) {
+		checkWidget();
+		Caret newCaret = caret;
+		Caret oldCaret = this.caret;
+		this.caret = newCaret;
+		if (hasFocus()) {
+			if (oldCaret != null) {
+				oldCaret.killFocus();
+			}
+			if (newCaret != null) {
+				if (newCaret.isDisposed()) {
+					error(SWT.ERROR_INVALID_ARGUMENT);
+				}
+				newCaret.setFocus();
+			}
+		}
+	}
+
+	@Override
+	public void setFont(Font font) {
+		checkWidget();
+		if (caret != null) {
+			caret.setFont(font);
+		}
+		super.setFont(font);
+	}
+
+	/**
+	 * Sets the receiver's IME.
+	 * 
+	 * @param ime
+	 *            the new IME for the receiver, may be null
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the IME has been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setIME(IME ime) {
+		checkWidget();
+		if (ime != null && ime.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.ime = ime;
+	}
+
+	@Override
+	public boolean qtPaintEvent(QObject source, QPaintEvent paintEvent) {
+		boolean ret = super.qtPaintEvent(source, paintEvent);
+		if (source == getQWidget()) {
+			if (caret != null) {
+				isOngoingPaintEvent = true;
+				try {
+					caret.draw();
+				} finally {
+					isOngoingPaintEvent = false;
+				}
+			}
+		}
+		return ret;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Caret.java
new file mode 100644
index 0000000..6e7d0c2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Caret.java	
@@ -0,0 +1,590 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.GCData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class provide an i-beam that is typically used as the
+ * insertion point for text.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample, Canvas tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Caret extends Widget {
+	private static final int DEFAULT_WIDTH = 1;
+	private Canvas parent;
+	private int x, y;
+	private int width = DEFAULT_WIDTH;
+	private int height;
+	private boolean isVisible;
+	private Image image;
+	private Font font;
+	private Color carentBG;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Caret(Canvas parent, int style) {
+		super(parent, style);
+		this.parent = parent;
+		createWidget();
+	}
+
+	void createWidget() {
+		isVisible = true;
+		carentBG = new Color(display, 0, 0, 0);
+		if (parent.getCaret() == null) {
+			parent.setCaret(this);
+		}
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent (or its display if its parent is null).
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Rectangle getBounds() {
+		checkWidget();
+		if (image != null) {
+			Rectangle rect = image.getBounds();
+			return new Rectangle(x, y, rect.width, rect.height);
+		}
+		return new Rectangle(x, y, width, height);
+	}
+
+	/**
+	 * Returns the font that the receiver will use to paint textual information.
+	 * 
+	 * @return the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Font getFont() {
+		checkWidget();
+		if (font != null) {
+			return font;
+		}
+		return parent.getFont();
+	}
+
+	/**
+	 * Returns the image that the receiver will use to paint the caret.
+	 * 
+	 * @return the receiver's image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Image getImage() {
+		checkWidget();
+		return image;
+	}
+
+	/**
+	 * Returns a point describing the receiver's location relative to its parent
+	 * (or its display if its parent is null).
+	 * 
+	 * @return the receiver's location
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getLocation() {
+		checkWidget();
+		return new Point(x, y);
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Canvas</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Canvas getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns a point describing the receiver's size.
+	 * 
+	 * @return the receiver's size
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getSize() {
+		checkWidget();
+		if (image != null) {
+			Rectangle rect = image.getBounds();
+			return new Point(rect.width, rect.height);
+		}
+		return new Point(width, height);
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getVisible() {
+		checkWidget();
+		return isVisible;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible and all of the
+	 * receiver's ancestors are visible and <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getVisible
+	 */
+	public boolean isVisible() {
+		checkWidget();
+		return isVisible && parent.isVisible() && parent.hasFocus();
+	}
+
+	/**
+	 * Marks the receiver as visible if the argument is <code>true</code>, and
+	 * marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param visible
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setVisible(boolean visible) {
+		checkWidget();
+		if (visible == isVisible) {
+			return;
+		}
+		isVisible = visible;
+	}
+
+	@Override
+	void releaseParent() {
+		super.releaseParent();
+		if (this == parent.getCaret()) {
+			parent.setCaret(null);
+		}
+	}
+
+	@Override
+	void releaseWidget() {
+		parent = null;
+		image = null;
+		font = null;
+		carentBG.dispose();
+		carentBG = null;
+	}
+
+	/**
+	 * Sets the receiver's size and location to the rectangular area specified
+	 * by the arguments. The <code>x</code> and <code>y</code> arguments are
+	 * relative to the receiver's parent (or its display if its parent is null).
+	 * 
+	 * @param x
+	 *            the new x coordinate for the receiver
+	 * @param y
+	 *            the new y coordinate for the receiver
+	 * @param width
+	 *            the new width for the receiver
+	 * @param height
+	 *            the new height for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setBounds(int x, int y, int width, int height) {
+		checkWidget();
+		//System.out.println("Caret.setBounds(" + x + ", " + y + ", " + width + ", " + height + ")");
+		boolean moved = this.x != x || this.y != y;
+		boolean resized = this.width != width || this.height != height;
+		if (!(moved || resized)) {
+			return;
+		}
+
+		// invalidate old location
+		parent.getQWidget().update(this.x, this.y, this.width, this.height);
+
+		this.x = x;
+		this.y = y;
+		this.width = Math.max(width, DEFAULT_WIDTH);
+		this.height = height;
+
+		// invalidate new location
+		parent.getQWidget().update(this.x, this.y, this.width, this.height);
+	}
+
+	/**
+	 * Sets the receiver's size and location to the rectangular area specified
+	 * by the argument. The <code>x</code> and <code>y</code> fields of the
+	 * rectangle are relative to the receiver's parent (or its display if its
+	 * parent is null).
+	 * 
+	 * @param rect
+	 *            the new bounds for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setBounds(Rectangle rect) {
+		if (rect == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setBounds(rect.x, rect.y, rect.width, rect.height);
+	}
+
+	void killFocus() {
+		//focus = false;
+	}
+
+	void setFocus() {
+		//focus = true;
+	}
+
+	/**
+	 * Sets the font that the receiver will use to paint textual information to
+	 * the font specified by the argument, or to the default font for that kind
+	 * of control if the argument is null.
+	 * 
+	 * @param font
+	 *            the new font (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the font has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setFont(Font font) {
+		checkWidget();
+		if (font != null && font.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.font = font;
+	}
+
+	/**
+	 * Sets the image that the receiver will use to paint the caret to the image
+	 * specified by the argument, or to the default which is a filled rectangle
+	 * if the argument is null
+	 * 
+	 * @param image
+	 *            the new image (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setImage(Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.image = image;
+		//	resize();
+	}
+
+	/**
+	 * Sets the receiver's location to the point specified by the arguments
+	 * which are relative to the receiver's parent (or its display if its parent
+	 * is null).
+	 * 
+	 * @param x
+	 *            the new x coordinate for the receiver
+	 * @param y
+	 *            the new y coordinate for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLocation(int x, int y) {
+		checkWidget();
+		if (this.x == x && this.y == y) {
+			return;
+		}
+		setBounds(x, y, width, height);
+	}
+
+	/**
+	 * Sets the receiver's location to the point specified by the argument which
+	 * is relative to the receiver's parent (or its display if its parent is
+	 * null).
+	 * 
+	 * @param location
+	 *            the new location for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLocation(Point location) {
+		checkWidget();
+		if (location == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setLocation(location.x, location.y);
+	}
+
+	/**
+	 * Sets the receiver's size to the point specified by the arguments.
+	 * 
+	 * @param width
+	 *            the new width for the receiver
+	 * @param height
+	 *            the new height for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSize(int width, int height) {
+		checkWidget();
+		if (this.width == width && this.height == height) {
+			return;
+		}
+		setBounds(x, y, width, height);
+	}
+
+	/**
+	 * Sets the receiver's size to the point specified by the argument.
+	 * 
+	 * @param size
+	 *            the new extent for the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSize(Point size) {
+		checkWidget();
+		if (size == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setSize(size.x, size.y);
+	}
+
+	void draw() {
+		if (!isVisible || parent == null || parent.isDisposed()) {
+			return;
+		}
+		//System.out.println("caret paint: " + this + " @ " + getLocation());
+		GCData data = new GCData();
+		data.device = display;
+		GC gc = GC.qt_new(parent, parent.getQWidget(), data);
+		//		GdkColor color = new GdkColor ();
+		//		color.red = (short) 0xffff;
+		//		color.green = (short) 0xffff;
+		//		color.blue = (short) 0xffff;
+		//		int /*long*/ colormap = OS.gdk_colormap_get_system ();
+		//		OS.gdk_colormap_alloc_color (colormap, color, true, true);
+		//		OS.gdk_gc_set_foreground (gc, color);
+		//		OS.gdk_gc_set_function (gc, OS.GDK_XOR);
+		//		if (image != null && !image.isDisposed() && image.mask == 0) {
+		//			int[] width = new int[1];
+		//			int[] height = new int[1];
+		//			OS.gdk_drawable_get_size(image.pixmap, width, height);
+		//			int nX = x;
+		//			if ((parent.style & SWT.MIRRORED) != 0) {
+		//				nX = parent.getClientWidth() - width[0] - nX;
+		//			}
+		//			OS.gdk_draw_drawable(window, gc, image.pixmap, 0, 0, nX, y, width[0], height[0]);
+		//		} else {
+		int nWidth = width, nHeight = height;
+		if (nWidth <= 0) {
+			nWidth = DEFAULT_WIDTH;
+		}
+		int nX = x;
+		if ((parent.style & SWT.MIRRORED) != 0) {
+			nX = parent.getClientWidth() - nWidth - nX;
+		}
+		data.backgroundColor = carentBG;
+		gc.fillRectangle(nX, y, nWidth, nHeight);
+		gc.dispose();
+		//}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ColorDialog.java
new file mode 100644
index 0000000..bb98eca
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ColorDialog.java	
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QColorDialog;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.graphics.RGB;
+
+/**
+ * Instances of this class allow the user to select a color from a predefined
+ * set of available colors.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class ColorDialog extends Dialog {
+	Display display;
+	int width, height;
+	RGB initialRGB;
+	QColorDialog cd;
+
+	/**
+	 * Constructs a new instance of this class given only its parent.
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public ColorDialog(Shell parent) {
+		this(parent, SWT.APPLICATION_MODAL);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public ColorDialog(Shell parent, int style) {
+		super(parent, checkStyle(parent, style));
+		checkSubclass();
+		cd = new QColorDialog();
+
+	}
+
+	/**
+	 * Returns the currently selected color in the receiver.
+	 * 
+	 * @return the RGB value for the selected color, may be null
+	 * 
+	 * @see PaletteData#getRGBs
+	 */
+	public RGB getRGB() {
+		QColor color = cd.currentColor();
+		RGB rgb = new RGB(color.red(), color.green(), color.blue());
+		return rgb;
+	}
+
+	/**
+	 * Makes the receiver visible and brings it to the front of the display.
+	 * 
+	 * @return the selected color, or null if the dialog was cancelled, no color
+	 *         was selected, or an error occurred
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public RGB open() {
+		cd.exec();
+		QColor color = cd.selectedColor();
+		cd.disposeLater();
+		return new RGB(color.red(), color.green(), color.blue());
+	}
+
+	/**
+	 * Sets the receiver's selected color to be the argument.
+	 * 
+	 * @param rgb
+	 *            the new RGB value for the selected color, may be null to let
+	 *            the platform select a default when open() is called
+	 * @see PaletteData#getRGBs
+	 */
+	public void setRGB(RGB rgb) {
+		cd.setCurrentColor(new QColor(rgb.red, rgb.green, rgb.blue));
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Combo.java
new file mode 100644
index 0000000..bb0ab32
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Combo.java	
@@ -0,0 +1,1398 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.Arrays;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.Qt.LayoutDirection;
+import com.trolltech.qt.gui.QComboBox;
+import com.trolltech.qt.gui.QFrame;
+import com.trolltech.qt.gui.QLineEdit;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QComboBox.InsertPolicy;
+import com.trolltech.qt.gui.QComboBox.SizeAdjustPolicy;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of this class are controls that allow the user to choose an item
+ * from a list of items, or optionally enter a new value by typing it into an
+ * editable text field. Often, <code>Combo</code>s are used in the same place
+ * where a single selection <code>List</code> widget could be used but space is
+ * limited. A <code>Combo</code> takes less space than a <code>List</code>
+ * widget and shows similar information.
+ * <p>
+ * Note: Since <code>Combo</code>s can contain both a list and an editable text
+ * field, it is possible to confuse methods which access one versus the other
+ * (compare for example, <code>clearSelection()</code> and
+ * <code>deselectAll()</code>). The API documentation is careful to indicate
+ * either "the receiver's list" or the "the receiver's text field" to
+ * distinguish between the two cases.
+ * </p>
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>, it
+ * does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DROP_DOWN, READ_ONLY, SIMPLE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Modify, Selection, Verify</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DROP_DOWN and SIMPLE may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see List
+ * @see <a href="http://www.eclipse.org/swt/snippets/#combo">Combo snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Combo extends Composite {
+	/**
+	 * the operating system limit for the number of characters that the text
+	 * field in an instance of this class can hold
+	 */
+	public static final int LIMIT;
+
+	/*
+	 * These values can be different on different platforms. Therefore they are
+	 * not initialized in the declaration to stop the compiler from inlining.
+	 */
+	static {
+		LIMIT = new QLineEdit().maxLength();
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#DROP_DOWN
+	 * @see SWT#READ_ONLY
+	 * @see SWT#SIMPLE
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Combo(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QComboBox createQWidget(int style) {
+		QComboBox combo = new QComboBox();
+		combo.setEditable(true);
+		combo.setSizeAdjustPolicy(SizeAdjustPolicy.AdjustToMinimumContentsLength);
+		// Disable the ability to add edited text at the end
+		combo.setInsertPolicy(InsertPolicy.NoInsert);
+		if ((style & SWT.READ_ONLY) != 0) {
+			combo.lineEdit().setReadOnly(true);
+		}
+		return combo;
+	}
+
+	private QComboBox getQComboBox() {
+		return (QComboBox) getQWidget();
+	}
+
+	@Override
+	protected void connectSignals() {
+		getQComboBox().activatedIndex.connect(this, "qtActivatedIndexEvent(int)"); //$NON-NLS-1$
+		getQComboBox().lineEdit().returnPressed.connect(this, "qtReturnPressedEvent()"); //$NON-NLS-1$
+		getQComboBox().editTextChanged.connect(this, "qtEditTextChangedEvent(String)"); //$NON-NLS-1$
+	}
+
+	protected void qtActivatedIndexEvent(int index) {
+		setSelection(new Point(0, getQComboBox().lineEdit().text().length()));
+		sendEvent(SWT.Selection);
+	}
+
+	protected void qtReturnPressedEvent() {
+		sendEvent(SWT.DefaultSelection);
+	}
+
+	protected void qtEditTextChangedEvent(String text) {
+		sendEvent(SWT.Modify);
+	}
+
+	/**
+	 * Adds the argument to the end of the receiver's list.
+	 * 
+	 * @param string
+	 *            the new item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #add(String,int)
+	 */
+	public void add(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		getQComboBox().addItem(string);
+	}
+
+	/**
+	 * Adds the argument to the receiver's list at the given zero-relative
+	 * index.
+	 * <p>
+	 * Note: To add an item at the end of the list, use the result of calling
+	 * <code>getItemCount()</code> as the index or use <code>add(String)</code>.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new item
+	 * @param index
+	 *            the index for the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #add(String)
+	 */
+	public void add(String string, int index) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		getQComboBox().insertItem(index, string);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver's text is modified, by sending it one of the messages
+	 * defined in the <code>ModifyListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ModifyListener
+	 * @see #removeModifyListener
+	 */
+	public void addModifyListener(ModifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Modify, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's selection, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the user changes the combo's
+	 * list selection. <code>widgetDefaultSelected</code> is typically called
+	 * when ENTER is pressed the combo's text area.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver's text is verified, by sending it one of the messages
+	 * defined in the <code>VerifyListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see VerifyListener
+	 * @see #removeVerifyListener
+	 * 
+	 * @since 3.1
+	 */
+	public void addVerifyListener(VerifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Verify, typedListener);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	static int checkStyle(int style) {
+		/*
+		 * Feature in Windows. It is not possible to create a combo box that has
+		 * a border using Windows style bits. All combo boxes draw their own
+		 * border and do not use the standard Windows border styles. Therefore,
+		 * no matter what style bits are specified, clear the BORDER bits so
+		 * that the SWT style will match the Windows widget.
+		 * 
+		 * The Windows behavior is currently implemented on all platforms.
+		 */
+		style &= ~SWT.BORDER;
+
+		/*
+		 * Even though it is legal to create this widget with scroll bars, they
+		 * serve no useful purpose because they do not automatically scroll the
+		 * widget's client area. The fix is to clear the SWT style.
+		 */
+		style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+		style = checkBits(style, SWT.DROP_DOWN, SWT.SIMPLE, 0, 0, 0, 0);
+		if ((style & SWT.SIMPLE) != 0) {
+			return style & ~SWT.READ_ONLY;
+		}
+		return style;
+	}
+
+	/**
+	 * Sets the selection in the receiver's text field to an empty selection
+	 * starting just before the first character. If the text field is editable,
+	 * this has the effect of placing the i-beam at the start of the text.
+	 * <p>
+	 * Note: To clear the selected items in the receiver's list, use
+	 * <code>deselectAll()</code>.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #deselectAll
+	 */
+	public void clearSelection() {
+		checkWidget();
+		getQComboBox().lineEdit().setCursorPosition(0);
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		if (changed) {
+			getQWidget().updateGeometry();
+		}
+
+		// to get the maximum row length depending on the content,
+		// set size policy to QComboBox::AdjustToContents. but it has drawback
+		// that
+		// it doesn't allow resizing so we have to set back size policy after
+		// compute size
+		getQComboBox().setSizeAdjustPolicy(SizeAdjustPolicy.AdjustToContents);
+		QSize size = getQWidget().sizeHint();
+		Point sizeHint = new Point(size.width(), size.height());
+
+		int width = DEFAULT_WIDTH;
+		int height = DEFAULT_HEIGHT;
+		if (sizeHint.x >= 0) {
+			width = sizeHint.x;
+		}
+		if (sizeHint.y >= 0) {
+			height = sizeHint.y;
+		}
+		if (wHint != SWT.DEFAULT) {
+			width = wHint;
+		}
+		if (hHint != SWT.DEFAULT && hHint < sizeHint.y) {
+			height = hHint;
+		}
+
+		// sets the size policy back to default so that resizing will be allowed
+		getQComboBox().setSizeAdjustPolicy(SizeAdjustPolicy.AdjustToMinimumContentsLength);
+		return new Point(width, height);
+	}
+
+	/**
+	 * Copies the selected text.
+	 * <p>
+	 * The current selection is copied to the clipboard.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public void copy() {
+		checkWidget();
+		getQComboBox().lineEdit().copy();
+	}
+
+	/**
+	 * Cuts the selected text.
+	 * <p>
+	 * The current selection is first copied to the clipboard and then deleted
+	 * from the widget.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public void cut() {
+		checkWidget();
+		getQComboBox().lineEdit().cut();
+	}
+
+	/**
+	 * Deselects the item at the given zero-relative index in the receiver's
+	 * list. If the item at the index was already deselected, it remains
+	 * deselected. Indices that are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to deselect
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselect(int index) {
+		checkWidget();
+		if (getSelectionIndex() == index) {
+			deselectAll();
+		}
+	}
+
+	/**
+	 * Deselects all selected items in the receiver's list.
+	 * <p>
+	 * Note: To clear the selection in the receiver's text field, use
+	 * <code>clearSelection()</code>.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #clearSelection
+	 */
+	public void deselectAll() {
+		checkWidget();
+		getQComboBox().setCurrentIndex(-1);
+		sendEvent(SWT.Modify);
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver's
+	 * list. Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getItem(int index) {
+		checkWidget();
+		return getQComboBox().itemText(index);
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver's list.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return getQComboBox().count();
+	}
+
+	/**
+	 * Returns the height of the area which would be used to display
+	 * <em>one</em> of the items in the receiver's list.
+	 * 
+	 * @return the height of one item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemHeight() {
+		checkWidget();
+		return getQComboBox().view().sizeHintForRow(0);
+	}
+
+	/**
+	 * Returns a (possibly empty) array of <code>String</code>s which are the
+	 * items in the receiver's list.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver's list
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String[] getItems() {
+		checkWidget();
+		int count = getItemCount();
+		String[] result = new String[count];
+		for (int i = 0; i < count; i++) {
+			result[i] = getItem(i);
+		}
+		return result;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver's list is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's list's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public boolean getListVisible() {
+		checkWidget();
+		java.util.List<QObject> children = getQComboBox().children();
+		for (QObject child : children) {
+			if (child.isWidgetType() && child instanceof QFrame) {
+				return ((QWidget) child).isVisible();
+			}
+		}
+		return false;
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Marks the receiver's list as visible if the argument is <code>true</code>
+	 * , and marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param visible
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setListVisible(boolean visible) {
+		checkWidget();
+		if (visible) {
+			getQComboBox().showPopup();
+		} else {
+			getQComboBox().hidePopup();
+		}
+	}
+
+	/**
+	 * Returns the orientation of the receiver.
+	 * 
+	 * @return the orientation style
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public int getOrientation() {
+		checkWidget();
+		return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	}
+
+	/**
+	 * Returns a <code>Point</code> whose x coordinate is the character position
+	 * representing the start of the selection in the receiver's text field, and
+	 * whose y coordinate is the character position representing the end of the
+	 * selection. An "empty" selection is indicated by the x and y coordinates
+	 * having the same value.
+	 * <p>
+	 * Indexing is zero based. The range of a selection is from 0..N where N is
+	 * the number of characters in the widget.
+	 * </p>
+	 * 
+	 * @return a point representing the selection start and end
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getSelection() {
+		checkWidget();
+		int start = getQComboBox().lineEdit().selectionStart();
+		int end = getQComboBox().lineEdit().cursorPosition();
+		return new Point(start == -1 ? end : start, end);
+	}
+
+	/**
+	 * Returns the zero-relative index of the item which is currently selected
+	 * in the receiver's list, or -1 if no item is selected.
+	 * 
+	 * @return the index of the selected item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionIndex() {
+		checkWidget();
+		return getQComboBox().currentIndex();
+	}
+
+	/**
+	 * Returns a string containing a copy of the contents of the receiver's text
+	 * field, or an empty string if there are no contents.
+	 * 
+	 * @return the receiver's text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		return getQComboBox().currentText();
+	}
+
+	/**
+	 * Returns the height of the receivers's text field.
+	 * 
+	 * @return the text height
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getTextHeight() {
+		checkWidget();
+		return getQComboBox().lineEdit().sizeHint().height();
+	}
+
+	/**
+	 * Returns the maximum number of characters that the receiver's text field
+	 * is capable of holding. If this has not been changed by
+	 * <code>setTextLimit()</code>, it will be the constant
+	 * <code>Combo.LIMIT</code>.
+	 * 
+	 * @return the text limit
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #LIMIT
+	 */
+	public int getTextLimit() {
+		checkWidget();
+		return getQComboBox().lineEdit().maxLength();
+	}
+
+	/**
+	 * Gets the number of items that are visible in the drop down portion of the
+	 * receiver's list.
+	 * <p>
+	 * Note: This operation is a hint and is not supported on platforms that do
+	 * not have this concept.
+	 * </p>
+	 * 
+	 * @return the number of items that are visible
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public int getVisibleItemCount() {
+		checkWidget();
+		return getQComboBox().maxVisibleItems();
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item (index 0) until
+	 * an item is found that is equal to the argument, and returns the index of
+	 * that item. If no item is found, returns -1.
+	 * 
+	 * @param string
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(String string) {
+		return indexOf(string, 0);
+	}
+
+	/**
+	 * Searches the receiver's list starting at the given, zero-relative index
+	 * until an item is found that is equal to the argument, and returns the
+	 * index of that item. If no item is found or the starting index is out of
+	 * range, returns -1.
+	 * 
+	 * @param string
+	 *            the search item
+	 * @param start
+	 *            the zero-relative index at which to begin the search
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(String string, int start) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int index = getQComboBox().findText(string);
+		if (!(0 <= start && start <= index)) {
+			return -1;
+		}
+		return index;
+	}
+
+	/**
+	 * Pastes text from clipboard.
+	 * <p>
+	 * The selected text is deleted from the widget and new text inserted from
+	 * the clipboard.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public void paste() {
+		checkWidget();
+		getQComboBox().lineEdit().paste();
+	}
+
+	/**
+	 * Removes the item from the receiver's list at the given zero-relative
+	 * index.
+	 * 
+	 * @param index
+	 *            the index for the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int index) {
+		checkWidget();
+		int count = getItemCount();
+		if (!(index < count && index >= 0)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		getQComboBox().removeItem(index);
+	}
+
+	/**
+	 * Removes the items from the receiver's list which are between the given
+	 * zero-relative start and end indices (inclusive).
+	 * 
+	 * @param start
+	 *            the start of the range
+	 * @param end
+	 *            the end of the range
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if either the start or end are
+	 *                not between 0 and the number of elements in the list minus
+	 *                1 (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int start, int end) {
+		checkWidget();
+		int count = getItemCount();
+		if (!(start < count && start >= 0 && end < count)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		if (start > end) {
+			return;
+		}
+		for (int i = end; i >= start; --i) {
+			getQComboBox().removeItem(i);
+		}
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item until an item is
+	 * found that is equal to the argument, and removes that item from the list.
+	 * 
+	 * @param string
+	 *            the item to remove
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the string is not found in
+	 *                the list</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int index = indexOf(string, 0);
+		if (index == -1) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		remove(index);
+	}
+
+	/**
+	 * Removes all of the items from the receiver's list and clear the contents
+	 * of receiver's text field.
+	 * <p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void removeAll() {
+		checkWidget();
+		getQComboBox().clear();
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the receiver's text is modified.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ModifyListener
+	 * @see #addModifyListener
+	 */
+	public void removeModifyListener(ModifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Modify, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's selection.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is verified.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see VerifyListener
+	 * @see #addVerifyListener
+	 * 
+	 * @since 3.1
+	 */
+	public void removeVerifyListener(VerifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Verify, listener);
+	}
+
+	/**
+	 * Selects the item at the given zero-relative index in the receiver's list.
+	 * If the item at the index was already selected, it remains selected.
+	 * Indices that are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void select(int index) {
+		checkWidget();
+		int count = getItemCount();
+		if (index < 0 || index >= count) {
+			return;
+		}
+		getQComboBox().setCurrentIndex(index);
+	}
+
+	/**
+	 * Sets the text of the item in the receiver's list at the given
+	 * zero-relative index to the string argument.
+	 * 
+	 * @param index
+	 *            the index for the item
+	 * @param string
+	 *            the new text for the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setItem(int index, String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int selection = getSelectionIndex();
+		remove(index);
+		if (isDisposed()) {
+			return;
+		}
+		add(string, index);
+		if (selection != -1) {
+			select(selection);
+		}
+	}
+
+	/**
+	 * Sets the receiver's list to be the given array of items.
+	 * 
+	 * @param items
+	 *            the array of items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if an item in the items array
+	 *                is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setItems(String[] items) {
+		checkWidget();
+		if (items == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		for (int i = 0; i < items.length; i++) {
+			if (items[i] == null) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		getQComboBox().addItems(Arrays.asList(items));
+	}
+
+	/**
+	 * Sets the orientation of the receiver, which must be one of the constants
+	 * <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+	 * <p>
+	 * 
+	 * @param orientation
+	 *            new orientation style
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public void setOrientation(int orientation) {
+		checkWidget();
+		int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+		if ((orientation & flags) == 0 || (orientation & flags) == flags) {
+			return;
+		}
+
+		style &= ~flags;
+		style |= orientation & flags;
+
+		getQWidget().setLayoutDirection(
+				orientation == SWT.LEFT_TO_RIGHT ? LayoutDirection.LeftToRight : LayoutDirection.RightToLeft);
+	}
+
+	/**
+	 * Sets the selection in the receiver's text field to the range specified by
+	 * the argument whose x coordinate is the start of the selection and whose y
+	 * coordinate is the end of the selection.
+	 * 
+	 * @param selection
+	 *            a point representing the new selection start and end
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(Point selection) {
+		checkWidget();
+		if (selection == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int start = selection.x, end = selection.y;
+		getQComboBox().lineEdit().setSelection(start, (end - start));
+	}
+
+	/**
+	 * Sets the contents of the receiver's text field to the given string.
+	 * <p>
+	 * Note: The text field in a <code>Combo</code> is typically only capable of
+	 * displaying a single line of text. Thus, setting the text to a string
+	 * containing line breaks or other special characters will probably cause it
+	 * to display incorrectly.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if ((style & SWT.READ_ONLY) != 0) {
+			int index = indexOf(string);
+			if (index != -1) {
+				select(index);
+			}
+			return;
+		}
+		getQComboBox().setEditText(string);
+		sendEvent(SWT.Modify);
+	}
+
+	/**
+	 * Sets the maximum number of characters that the receiver's text field is
+	 * capable of holding to be the argument.
+	 * <p>
+	 * To reset this value to the default, use
+	 * <code>setTextLimit(Combo.LIMIT)</code>. Specifying a limit value larger
+	 * than <code>Combo.LIMIT</code> sets the receiver's limit to
+	 * <code>Combo.LIMIT</code>.
+	 * </p>
+	 * 
+	 * @param limit
+	 *            new text limit
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #LIMIT
+	 */
+	public void setTextLimit(int limit) {
+		checkWidget();
+		if (limit <= 0) {
+			error(SWT.ERROR_CANNOT_BE_ZERO);
+		}
+		if (limit > LIMIT) {
+			limit = LIMIT;
+		}
+		getQComboBox().lineEdit().setMaxLength(limit);
+	}
+
+	/**
+	 * Sets the number of items that are visible in the drop down portion of the
+	 * receiver's list.
+	 * <p>
+	 * Note: This operation is a hint and is not supported on platforms that do
+	 * not have this concept.
+	 * </p>
+	 * 
+	 * @param count
+	 *            the new number of items to be visible
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setVisibleItemCount(int count) {
+		checkWidget();
+		if (count < 0) {
+			return;
+		}
+		getQComboBox().setMaxVisibleItems(count);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java
new file mode 100644
index 0000000..736db3e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java	
@@ -0,0 +1,1303 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.Qt.FocusReason;
+import com.trolltech.qt.gui.QLabel;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QResizeEvent;
+import com.trolltech.qt.gui.QScrollArea;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QPalette.ColorRole;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class are controls which are capable of containing other
+ * controls.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>NO_BACKGROUND, NO_FOCUS, NO_MERGE_PAINTS, NO_REDRAW_RESIZE,
+ * NO_RADIO_GROUP, EMBEDDED, DOUBLE_BUFFERED</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: The <code>NO_BACKGROUND</code>, <code>NO_FOCUS</code>,
+ * <code>NO_MERGE_PAINTS</code>, and <code>NO_REDRAW_RESIZE</code> styles are
+ * intended for use with <code>Canvas</code>. They can be used with
+ * <code>Composite</code> if you are drawing your own, but their behavior is
+ * undefined if they are used with subclasses of <code>Composite</code> other
+ * than <code>Canvas</code>.
+ * </p>
+ * <p>
+ * Note: The <code>CENTER</code> style, although undefined for composites, has
+ * the same value as <code>EMBEDDED</code> which is used to embed widgets from
+ * other widget toolkits into SWT. On some operating systems (GTK, Motif), this
+ * may cause the children of this composite to be obscured.
+ * </p>
+ * <p>
+ * This class may be subclassed by custom control implementors who are building
+ * controls that are constructed from aggregates of other controls.
+ * </p>
+ * 
+ * @see Canvas
+ * @see <a href="http://www.eclipse.org/swt/snippets/#composite">Composite
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public class Composite extends Scrollable {
+	private Layout layout;
+	private Control[] tabList;
+	protected int layoutCount;
+	private int backgroundMode = SWT.INHERIT_NONE;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Composite() {
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a widget which will be the parent of the new instance (cannot
+	 *            be null)
+	 * @param style
+	 *            the style of widget to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#NO_BACKGROUND
+	 * @see SWT#NO_FOCUS
+	 * @see SWT#NO_MERGE_PAINTS
+	 * @see SWT#NO_REDRAW_RESIZE
+	 * @see SWT#NO_RADIO_GROUP
+	 * @see Widget#getStyle
+	 */
+	public Composite(Composite parent, int style) {
+		super(parent, style);
+	}
+
+	@Override
+	QWidget createQWidget(int style) {
+		QWidget widget = super.createQWidget(style);
+		state |= CANVAS;
+		if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) == 0) {
+			state |= THEME_BACKGROUND;
+		}
+		if ((style & SWT.TRANSPARENT) != 0) {
+			System.out.println("TODO: handle SWT.TRANSPARENT"); //$NON-NLS-1$
+		}
+		return widget;
+	}
+
+	protected void updateAutoFillBackground() {
+		//		if ((style & SWT.NO_BACKGROUND) == 0) {
+		//			getQMasterWidget().setAutoFillBackground(true);
+		//		} else {
+		//			getQMasterWidget().setAutoFillBackground(false);
+		//			System.out.println(this + " no bg");
+		//		}
+	}
+
+	protected boolean noBackground() {
+		return (style & SWT.NO_BACKGROUND) == 1;
+	}
+
+	@Override
+	protected void updateBackground() {
+		if ((state & PARENT_BACKGROUND) == 0) {
+			updateAutoFillBackground();
+			applyBackgroundColor(getDefaultBackgroundColor());
+		} else {
+			super.updateBackground();
+		}
+	}
+
+	@Override
+	protected ColorRole[] getBackgroundColorRoles() {
+		if (backgroundMode == SWT.INHERIT_FORCE) {
+			return super.getBackgroundColorRoles();
+		} else {
+			return new ColorRole[] { ColorRole.Window };
+		}
+	}
+
+	void addQChild(Control control) {
+		control.getQMasterWidget().setParent(getQWidget());
+	}
+
+	Control[] _getTabList() {
+		if (tabList == null) {
+			return tabList;
+		}
+		int count = 0;
+		for (int i = 0; i < tabList.length; i++) {
+			if (!tabList[i].isDisposed()) {
+				count++;
+			}
+		}
+		if (count == tabList.length) {
+			return tabList;
+		}
+		Control[] newList = new Control[count];
+		int index = 0;
+		for (int i = 0; i < tabList.length; i++) {
+			if (!tabList[i].isDisposed()) {
+				newList[index++] = tabList[i];
+			}
+		}
+		tabList = newList;
+		return tabList;
+	}
+
+	/**
+	 * Clears any data that has been cached by a Layout for all widgets that are
+	 * in the parent hierarchy of the changed control up to and including the
+	 * receiver. If an ancestor does not have a layout, it is skipped.
+	 * 
+	 * @param changed
+	 *            an array of controls that changed state and require a
+	 *            recalculation of size
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the changed array is null
+	 *                any of its controls are null or have been disposed</li>
+	 *                <li>ERROR_INVALID_PARENT - if any control in changed is
+	 *                not in the widget tree of the receiver</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void changed(Control[] changed) {
+		checkWidget();
+		if (changed == null) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		for (int i = 0; i < changed.length; i++) {
+			Control control = changed[i];
+			if (control == null) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (control.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			boolean ancestor = false;
+			Composite composite = control.parent;
+			while (composite != null) {
+				ancestor = composite == this;
+				if (ancestor) {
+					break;
+				}
+				composite = composite.parent;
+			}
+			if (!ancestor) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		for (int i = 0; i < changed.length; i++) {
+			Control child = changed[i];
+			Composite composite = child.parent;
+			while (child != this) {
+				if (composite.layout == null || !composite.layout.flushCache(child)) {
+					composite.state |= LAYOUT_CHANGED;
+				}
+				child = composite;
+				composite = child.parent;
+			}
+		}
+	}
+
+	@Override
+	protected void checkSubclass() {
+		/* Do nothing - Subclassing is allowed */
+	}
+
+	@Override
+	Control[] computeTabList() {
+		Control result[] = super.computeTabList();
+		if (result.length == 0) {
+			return result;
+		}
+		Control[] list = tabList != null ? _getTabList() : _getChildren();
+		for (int i = 0; i < list.length; i++) {
+			Control child = list[i];
+			Control[] childList = child.computeTabList();
+			if (childList.length != 0) {
+				Control[] newResult = new Control[result.length + childList.length];
+				System.arraycopy(result, 0, newResult, 0, result.length);
+				System.arraycopy(childList, 0, newResult, result.length, childList.length);
+				result = newResult;
+			}
+		}
+		return result;
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		Point size;
+		if ((state & CANVAS) != 0) {
+			if (layout != null) {
+				if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {
+					changed |= (state & LAYOUT_CHANGED) != 0;
+					state &= ~LAYOUT_CHANGED;
+					size = layout.computeSize(this, wHint, hHint, changed);
+				} else {
+					size = new Point(wHint, hHint);
+				}
+			} else {
+				size = minimumSize(wHint, hHint, changed);
+			}
+			if (size.x < 0) {
+				size.x = DEFAULT_WIDTH;
+			}
+			if (size.y < 0) {
+				size.y = DEFAULT_HEIGHT;
+			}
+			if (wHint != SWT.DEFAULT && wHint > 0) {
+				size.x = wHint;
+			}
+			if (hHint != SWT.DEFAULT && hHint > 0) {
+				size.y = hHint;
+			}
+			Rectangle trim = computeTrim(0, 0, size.x, size.y);
+			return new Point(trim.width, trim.height);
+		}
+		return super.computeSize(wHint, hHint, changed);
+
+	}
+
+	@Override
+	boolean isMirrored() {
+		return (style & SWT.MIRRORED) != 0;
+	}
+
+	/**
+	 * Copies a rectangular area of the receiver at the specified position using
+	 * the gc.
+	 * 
+	 * @param gc
+	 *            the gc where the rectangle is to be filled
+	 * @param x
+	 *            the x coordinate of the rectangle to be filled
+	 * @param y
+	 *            the y coordinate of the rectangle to be filled
+	 * @param width
+	 *            the width of the rectangle to be filled
+	 * @param height
+	 *            the height of the rectangle to be filled
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	/* public */void copyArea(GC gc, int x, int y, int width, int height) {
+		checkWidget();
+		if (gc == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (gc.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		throw new UnsupportedOperationException("not yet implemented"); //$NON-NLS-1$
+	}
+
+	protected Composite findDeferredControl() {
+		return layoutCount > 0 ? this : parent.findDeferredControl();
+	}
+
+	@Override
+	Menu[] findMenus(Control control) {
+		if (control == this) {
+			return new Menu[0];
+		}
+		Menu result[] = super.findMenus(control);
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			Menu[] menuList = child.findMenus(control);
+			if (menuList.length != 0) {
+				Menu[] newResult = new Menu[result.length + menuList.length];
+				System.arraycopy(result, 0, newResult, 0, result.length);
+				System.arraycopy(menuList, 0, newResult, result.length, menuList.length);
+				result = newResult;
+			}
+		}
+		return result;
+	}
+
+	@Override
+	void fixChildren(Shell newShell, Shell oldShell, Decorations newDecorations, Decorations oldDecorations,
+			Menu[] menus) {
+		super.fixChildren(newShell, oldShell, newDecorations, oldDecorations, menus);
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			children[i].fixChildren(newShell, oldShell, newDecorations, oldDecorations, menus);
+		}
+	}
+
+	void fixTabList(Control control) {
+		if (tabList == null) {
+			return;
+		}
+		int count = 0;
+		for (int i = 0; i < tabList.length; i++) {
+			if (tabList[i] == control) {
+				count++;
+			}
+		}
+		if (count == 0) {
+			return;
+		}
+		Control[] newList = null;
+		int length = tabList.length - count;
+		if (length != 0) {
+			newList = new Control[length];
+			int index = 0;
+			for (int i = 0; i < tabList.length; i++) {
+				if (tabList[i] != control) {
+					newList[index++] = tabList[i];
+				}
+			}
+		}
+		tabList = newList;
+	}
+
+	/**
+	 * Returns the receiver's background drawing mode. This will be one of the
+	 * following constants defined in class <code>SWT</code>:
+	 * <code>INHERIT_NONE</code>, <code>INHERIT_DEFAULT</code>,
+	 * <code>INHERTIT_FORCE</code>.
+	 * 
+	 * @return the background mode
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * 
+	 * @since 3.2
+	 */
+	public int getBackgroundMode() {
+		checkWidget();
+		return backgroundMode;
+	}
+
+	/**
+	 * Returns a (possibly empty) array containing the receiver's children.
+	 * Children are returned in the order that they are drawn. The topmost
+	 * control appears at the beginning of the array. Subsequent controls draw
+	 * beneath this control and appear later in the array.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of children, so modifying the array will not affect the
+	 * receiver.
+	 * </p>
+	 * 
+	 * @return an array of children
+	 * 
+	 * @see Control#moveAbove
+	 * @see Control#moveBelow
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Control[] getChildren() {
+		checkWidget();
+		return _getChildren();
+	}
+
+	Control[] _getChildren() {
+		Collection<QObject> qtChildren = getQWidget().children();
+		int count = qtChildren.size();
+		if (count == 0) {
+			return new Control[0];
+		}
+		LinkedList<Control> children = new LinkedList<Control>();
+		for (QObject qObj : qtChildren) {
+			Widget widget = display.findControl(qObj);
+			if (widget != null && widget != this) {
+				if (widget instanceof Control && !(widget instanceof Shell)) {
+					children.addFirst((Control) widget);
+				}
+			}
+		}
+		return children.toArray(new Control[children.size()]);
+	}
+
+	int getChildrenCount() {
+		return getQWidget().children().size();
+	}
+
+	/**
+	 * Returns layout which is associated with the receiver, or null if one has
+	 * not been set.
+	 * 
+	 * @return the receiver's layout or null
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Layout getLayout() {
+		checkWidget();
+		return layout;
+	}
+
+	/**
+	 * Gets the (possibly empty) tabbing order for the control.
+	 * 
+	 * @return tabList the ordered list of controls representing the tab order
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setTabList
+	 */
+	public Control[] getTabList() {
+		checkWidget();
+		Control[] tabList = _getTabList();
+		if (tabList == null) {
+			int count = 0;
+			Control[] list = _getChildren();
+			for (int i = 0; i < list.length; i++) {
+				if (list[i].isTabGroup()) {
+					count++;
+				}
+			}
+			tabList = new Control[count];
+			int index = 0;
+			for (int i = 0; i < list.length; i++) {
+				if (list[i].isTabGroup()) {
+					tabList[index++] = list[i];
+				}
+			}
+		}
+		return tabList;
+	}
+
+	boolean hooksKeys() {
+		return hooks(SWT.KeyDown) || hooks(SWT.KeyUp);
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver has deferred the performing of
+	 * layout, and <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's deferred layout state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setLayoutDeferred(boolean)
+	 * @see #isLayoutDeferred()
+	 * 
+	 * @since 3.1
+	 */
+	public boolean getLayoutDeferred() {
+		checkWidget();
+		return layoutCount > 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver or any ancestor up to and
+	 * including the receiver's nearest ancestor shell has deferred the
+	 * performing of layouts. Otherwise, <code>false</code> is returned.
+	 * 
+	 * @return the receiver's deferred layout state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setLayoutDeferred(boolean)
+	 * @see #getLayoutDeferred()
+	 * 
+	 * @since 3.1
+	 */
+	public boolean isLayoutDeferred() {
+		checkWidget();
+		return findDeferredControl() != null;
+	}
+
+	/**
+	 * If the receiver has a layout, asks the layout to <em>lay out</em> (that
+	 * is, set the size and location of) the receiver's children. If the
+	 * receiver does not have a layout, do nothing.
+	 * <p>
+	 * This is equivalent to calling <code>layout(true)</code>.
+	 * </p>
+	 * <p>
+	 * Note: Layout is different from painting. If a child is moved or resized
+	 * such that an area in the parent is exposed, then the parent will paint.
+	 * If no child is affected, the parent will not paint.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void layout() {
+		checkWidget();
+		layout(true);
+	}
+
+	@Override
+	protected void updateLayout() {
+		layout(true, true);
+	}
+
+	/**
+	 * If the receiver has a layout, asks the layout to <em>lay out</em> (that
+	 * is, set the size and location of) the receiver's children. If the
+	 * argument is <code>true</code> the layout must not rely on any information
+	 * it has cached about the immediate children. If it is <code>false</code>
+	 * the layout may (potentially) optimize the work it is doing by assuming
+	 * that none of the receiver's children has changed state since the last
+	 * layout. If the receiver does not have a layout, do nothing.
+	 * <p>
+	 * If a child is resized as a result of a call to layout, the resize event
+	 * will invoke the layout of the child. The layout will cascade down through
+	 * all child widgets in the receiver's widget tree until a child is
+	 * encountered that does not resize. Note that a layout due to a resize will
+	 * not flush any cached information (same as <code>layout(false)</code>).
+	 * </p>
+	 * <p>
+	 * Note: Layout is different from painting. If a child is moved or resized
+	 * such that an area in the parent is exposed, then the parent will paint.
+	 * If no child is affected, the parent will not paint.
+	 * </p>
+	 * 
+	 * @param changed
+	 *            <code>true</code> if the layout must flush its caches, and
+	 *            <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void layout(boolean changed) {
+		checkWidget();
+		if (layout == null) {
+			return;
+		}
+		layout(changed, false);
+	}
+
+	/**
+	 * If the receiver has a layout, asks the layout to <em>lay out</em> (that
+	 * is, set the size and location of) the receiver's children. If the changed
+	 * argument is <code>true</code> the layout must not rely on any information
+	 * it has cached about its children. If it is <code>false</code> the layout
+	 * may (potentially) optimize the work it is doing by assuming that none of
+	 * the receiver's children has changed state since the last layout. If the
+	 * all argument is <code>true</code> the layout will cascade down through
+	 * all child widgets in the receiver's widget tree, regardless of whether
+	 * the child has changed size. The changed argument is applied to all
+	 * layouts. If the all argument is <code>false</code>, the layout will
+	 * <em>not</em> cascade down through all child widgets in the receiver's
+	 * widget tree. However, if a child is resized as a result of a call to
+	 * layout, the resize event will invoke the layout of the child. Note that a
+	 * layout due to a resize will not flush any cached information (same as
+	 * <code>layout(false)</code>). </p>
+	 * <p>
+	 * Note: Layout is different from painting. If a child is moved or resized
+	 * such that an area in the parent is exposed, then the parent will paint.
+	 * If no child is affected, the parent will not paint.
+	 * </p>
+	 * 
+	 * @param changed
+	 *            <code>true</code> if the layout must flush its caches, and
+	 *            <code>false</code> otherwise
+	 * @param all
+	 *            <code>true</code> if all children in the receiver's widget
+	 *            tree should be laid out, and <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void layout(boolean changed, boolean all) {
+		checkWidget();
+		if (layout == null && !all) {
+			return;
+		}
+		markLayout(changed, all);
+		updateLayout(all);
+	}
+
+	/**
+	 * Forces a lay out (that is, sets the size and location) of all widgets
+	 * that are in the parent hierarchy of the changed control up to and
+	 * including the receiver. The layouts in the hierarchy must not rely on any
+	 * information cached about the changed control or any of its ancestors. The
+	 * layout may (potentially) optimize the work it is doing by assuming that
+	 * none of the peers of the changed control have changed state since the
+	 * last layout. If an ancestor does not have a layout, skip it.
+	 * <p>
+	 * Note: Layout is different from painting. If a child is moved or resized
+	 * such that an area in the parent is exposed, then the parent will paint.
+	 * If no child is affected, the parent will not paint.
+	 * </p>
+	 * 
+	 * @param changed
+	 *            a control that has had a state change which requires a
+	 *            recalculation of its size
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the changed array is null
+	 *                any of its controls are null or have been disposed</li>
+	 *                <li>ERROR_INVALID_PARENT - if any control in changed is
+	 *                not in the widget tree of the receiver</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void layout(Control[] changed) {
+		checkWidget();
+		if (changed == null) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		for (int i = 0; i < changed.length; i++) {
+			Control control = changed[i];
+			if (control == null) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (control.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			boolean ancestor = false;
+			Composite composite = control.parent;
+			while (composite != null) {
+				ancestor = composite == this;
+				if (ancestor) {
+					break;
+				}
+				composite = composite.parent;
+			}
+			if (!ancestor) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		int updateCount = 0;
+		Composite[] update = new Composite[16];
+		for (int i = 0; i < changed.length; i++) {
+			Control child = changed[i];
+			Composite composite = child.parent;
+			while (child != this) {
+				if (composite.layout != null) {
+					composite.state |= LAYOUT_NEEDED;
+					if (!composite.layout.flushCache(child)) {
+						composite.state |= LAYOUT_CHANGED;
+					}
+				}
+				if (updateCount == update.length) {
+					Composite[] newUpdate = new Composite[update.length + 16];
+					System.arraycopy(update, 0, newUpdate, 0, update.length);
+					update = newUpdate;
+				}
+				child = update[updateCount++] = composite;
+				composite = child.parent;
+			}
+		}
+		for (int i = updateCount - 1; i >= 0; i--) {
+			update[i].updateLayout(false);
+		}
+	}
+
+	@Override
+	void markLayout(boolean changed, boolean all) {
+		if (layout != null) {
+			state |= LAYOUT_NEEDED;
+			if (changed) {
+				state |= LAYOUT_CHANGED;
+			}
+		}
+		if (all) {
+			Control[] children = _getChildren();
+			for (int i = 0; i < children.length; i++) {
+				children[i].markLayout(changed, all);
+			}
+		}
+	}
+
+	Point minimumSize(int wHint, int hHint, boolean changed) {
+		Control[] children = _getChildren();
+		Rectangle clientArea = getClientArea();
+		int width = 0, height = 0;
+		for (int i = 0; i < children.length; i++) {
+			Rectangle rect = children[i].getBounds();
+			width = Math.max(width, rect.x - clientArea.x + rect.width);
+			height = Math.max(height, rect.y - clientArea.y + rect.height);
+		}
+		return new Point(width, height);
+	}
+
+	@Override
+	void redrawChildren() {
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			children[i]._redraw();
+		}
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			if (child != null && !child.isDisposed()) {
+				child.release(false);
+			}
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		layout = null;
+		tabList = null;
+	}
+
+	void removeControl(Control control) {
+		control.getQMasterWidget().setParent(null);
+		fixTabList(control);
+		resizeChildren();
+	}
+
+	private void resizeChildren() {
+		if (getQWidget() == null) {
+			return;
+		}
+		for (QObject child : getQWidget().children()) {
+			if (child.isWidgetType()) {
+				((QWidget) child).updateGeometry();
+			}
+		}
+	}
+
+	/**
+	 * Sets the background drawing mode to the argument which should be one of
+	 * the following constants defined in class <code>SWT</code>:
+	 * <code>INHERIT_NONE</code>, <code>INHERIT_DEFAULT</code>,
+	 * <code>INHERIT_FORCE</code>.
+	 * 
+	 * @param mode
+	 *            the new background mode
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * 
+	 * @since 3.2
+	 */
+	public void setBackgroundMode(int mode) {
+		checkWidget();
+		if (backgroundMode == mode) {
+			return;
+		}
+		backgroundMode = mode;
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			children[i].updateBackgroundMode();
+		}
+	}
+
+	@Override
+	protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) {
+		if ((state & CANVAS) != 0) {
+			state &= ~(RESIZE_OCCURRED | MOVE_OCCURRED);
+			state |= RESIZE_DEFERRED | MOVE_DEFERRED;
+		}
+		super.setBounds(x, y, width, height, move, resize);
+		if ((state & CANVAS) != 0) {
+			boolean wasResized = (state & RESIZE_OCCURRED) != 0;
+			state &= ~(RESIZE_DEFERRED | MOVE_DEFERRED);
+			if (wasResized && layout != null) {
+				markLayout(false, false);
+				updateLayout(false);
+			}
+		}
+	}
+
+	@Override
+	public boolean setFocus() {
+		checkWidget();
+		return setFocus(FocusReason.OtherFocusReason);
+		//		Control[] children = _getChildren();
+		//		for (int i = 0; i < children.length; i++) {
+		//			Control child = children[i];
+		//			if (child.setRadioFocus(false))
+		//				return true;
+		//		}
+		//		for (int i = 0; i < children.length; i++) {
+		//			Control child = children[i];
+		//			if (child.setFocus())
+		//				return true;
+		//		}
+		//		return super.setFocus();
+	}
+
+	@Override
+	protected boolean setFocus(FocusReason focusReason) {
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			if (child.getVisible() && child.setFocus(focusReason)) {
+				return true;
+			}
+		}
+		return super.setFocus(focusReason);
+	}
+
+	/**
+	 * Sets the layout which is associated with the receiver to be the argument
+	 * which may be null.
+	 * 
+	 * @param layout
+	 *            the receiver's new layout or null
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLayout(Layout layout) {
+		checkWidget();
+		this.layout = layout;
+	}
+
+	/**
+	 * If the argument is <code>true</code>, causes subsequent layout operations
+	 * in the receiver or any of its children to be ignored. No layout of any
+	 * kind can occur in the receiver or any of its children until the flag is
+	 * set to false. Layout operations that occurred while the flag was
+	 * <code>true</code> are remembered and when the flag is set to
+	 * <code>false</code>, the layout operations are performed in an optimized
+	 * manner. Nested calls to this method are stacked.
+	 * 
+	 * @param defer
+	 *            the new defer state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #layout(boolean)
+	 * @see #layout(Control[])
+	 * 
+	 * @since 3.1
+	 */
+	public void setLayoutDeferred(boolean defer) {
+		checkWidget();
+		if (!defer) {
+			if (--layoutCount == 0) {
+				if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
+					updateLayout(true);
+				}
+			}
+		} else {
+			layoutCount++;
+		}
+	}
+
+	/**
+	 * Sets the tabbing order for the specified controls to match the order that
+	 * they occur in the argument list.
+	 * 
+	 * @param tabList
+	 *            the ordered list of controls representing the tab order or
+	 *            null
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if a widget in the tabList is
+	 *                null or has been disposed</li>
+	 *                <li>ERROR_INVALID_PARENT - if widget in the tabList is not
+	 *                in the same widget tree</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setTabList(Control[] tabList) {
+		checkWidget();
+		if (tabList != null) {
+			for (int i = 0; i < tabList.length; i++) {
+				Control control = tabList[i];
+				if (control == null) {
+					error(SWT.ERROR_INVALID_ARGUMENT);
+				}
+				if (control.isDisposed()) {
+					error(SWT.ERROR_INVALID_ARGUMENT);
+				}
+				if (control.parent != this) {
+					error(SWT.ERROR_INVALID_PARENT);
+				}
+			}
+			Control[] newList = new Control[tabList.length];
+			System.arraycopy(tabList, 0, newList, 0, tabList.length);
+			tabList = newList;
+		}
+		this.tabList = tabList;
+	}
+
+	@Override
+	boolean setTabGroupFocus() {
+		if (isTabItem()) {
+			return setTabItemFocus();
+		}
+		boolean takeFocus = (style & SWT.NO_FOCUS) == 0;
+		if ((state & CANVAS) != 0) {
+			takeFocus = hooksKeys();
+			if ((style & SWT.EMBEDDED) != 0) {
+				takeFocus = true;
+			}
+		}
+		if (takeFocus && setTabItemFocus()) {
+			return true;
+		}
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			if (child.isTabItem() && child.setRadioFocus(true)) {
+				return true;
+			}
+		}
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			if (child.isTabItem() && !child.isTabGroup() && child.setTabItemFocus()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	@Override
+	boolean translateMnemonic(Event event, Control control) {
+		if (super.translateMnemonic(event, control)) {
+			return true;
+		}
+		if (control != null) {
+			Control[] children = _getChildren();
+			for (int i = 0; i < children.length; i++) {
+				Control child = children[i];
+				if (child.translateMnemonic(event, control)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	@Override
+	void updateBackgroundColor() {
+		//		if (noBackground()) {
+		//			return;
+		//		}
+		super.updateBackgroundColor();
+		for (Control child : _getChildren()) {
+			if ((child.state & PARENT_BACKGROUND) != 0) {
+				child.updateBackgroundColor();
+			}
+		}
+	}
+
+	@Override
+	void updateBackgroundImage() {
+		//		if (noBackground()) {
+		//			return;
+		//		}
+		super.updateBackgroundImage();
+		for (Control child : _getChildren()) {
+			if ((child.state & PARENT_BACKGROUND) != 0) {
+				child.updateBackgroundImage();
+			}
+		}
+	}
+
+	@Override
+	void updateBackgroundMode() {
+		super.updateBackgroundMode();
+		for (Control child : _getChildren()) {
+			child.updateBackgroundMode();
+		}
+	}
+
+	@Override
+	void updateFont(Font oldFont, Font newFont) {
+		super.updateFont(oldFont, newFont);
+		Control[] children = _getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control control = children[i];
+			if (!control.isDisposed()) {
+				control.updateFont(oldFont, newFont);
+			}
+		}
+	}
+
+	@Override
+	void updateLayout(boolean all) {
+		Composite parent = findDeferredControl();
+		if (parent != null) {
+			parent.state |= LAYOUT_CHILD;
+			return;
+		}
+		if ((state & LAYOUT_NEEDED) != 0) {
+			boolean changed = (state & LAYOUT_CHANGED) != 0;
+			state &= ~(LAYOUT_NEEDED | LAYOUT_CHANGED);
+			if (layout != null) {
+				layout.layout(this, changed);
+			}
+			resizeChildren();
+		}
+		if (all) {
+			state &= ~LAYOUT_CHILD;
+			Control[] children = _getChildren();
+			for (int i = 0; i < children.length; i++) {
+				children[i].updateLayout(all);
+			}
+		}
+	}
+
+	@Override
+	protected void _setVisible(QWidget widget, boolean visible) {
+		findChildren();
+		boolean oldVisibility = getQMasterWidget().isVisible();
+		super._setVisible(widget, visible);
+		if (getQMasterWidget().isVisible() != oldVisibility && layout != null) {
+			markLayout(true, true);
+			updateLayout(true);
+		}
+	}
+
+	// TODO sma at 2010-02-08 Links contain HTML escape sequences and therefore "&".
+	// 		Removing it breaks the HTML. Can Links have mnemonics?
+	private void findChildren() {
+		for (Control child : getChildren()) {
+			if (!(child instanceof Link) && child.getQWidget() instanceof QLabel
+					&& ((QLabel) child.getQWidget()).text().contains("&")) { //$NON-NLS-1$
+				handleMnemonic(child.getQWidget());
+			} else if (child instanceof Composite) {
+				((Composite) child).findChildren();
+			}
+		}
+	}
+
+	private void handleMnemonic(QWidget qwidget) {
+		QLabel myLabel = (QLabel) qwidget;
+		boolean foundBuddy = false;
+		java.util.List<QObject> children = myLabel.parent().children();
+		for (int i = 0; i < children.size() - 1; i++) {
+			if (children.get(i).equals(myLabel)) {
+				// search for a suitable buddy
+				for (int k = i + 1; k < children.size(); k++) {
+					QObject neighbour = children.get(k);
+					if (neighbour != null && !(neighbour instanceof QLabel) && !(neighbour instanceof QScrollArea)) {
+						myLabel.setBuddy((QWidget) neighbour);
+						foundBuddy = true;
+						break;
+					}
+				}
+			}
+
+		}
+		/*
+		 * If there is no buddy to get the mnemonic, the "&" is removed from the
+		 * string. In SWT/Win32 the character will remain underlined without any
+		 * function, but in SWT/Qt this is not possible.
+		 */
+		if (!foundBuddy) {
+			myLabel.setText(myLabel.text().replace("&", "")); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	@Override
+	public boolean qtResizeEvent(QObject source, QResizeEvent resizeEvent) {
+		if (isDisposed()) {
+			return true;
+		}
+		if (isMirrored()) {
+			int newWidth = resizeEvent.size().width();
+			int oldWidth = resizeEvent.oldSize().width();
+			final int dx = newWidth - oldWidth;
+			if (dx != 0) {
+				Control[] children = _getChildren();
+				for (int i = 0; i < children.length; ++i) {
+					Control child = children[i];
+					if (!child.isDisposed()) {
+						QWidget qtControl = child.getQMasterWidget();
+						QPoint pos = qtControl.pos();
+						qtControl.move(pos.x() + dx, pos.y());
+					}
+				}
+			}
+		}
+		super.qtResizeEvent(source, resizeEvent);
+		if (layout != null) {
+			markLayout(false, false);
+			updateLayout(false);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) {
+		if (source == getQWidget()) {
+			boolean ret = super.qtMouseButtonPressEvent(source, mouseEvent);
+			if ((this.state & CANVAS) != 0) {
+				if ((style & SWT.NO_FOCUS) == 0 && hooksKeys()) {
+					Control[] children = getChildren();
+					if (children == null || children.length == 0) {
+						setFocus(FocusReason.OtherFocusReason);
+					}
+				}
+			}
+			return ret;
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtMouseEnterEvent(Object source) {
+		if (source == getQMasterWidget()) {
+			sendEvent(SWT.MouseEnter);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtMouseLeaveEvent(Object source) {
+		if (source == getQMasterWidget()) {
+			sendEvent(SWT.MouseExit);
+		}
+		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java
new file mode 100644
index 0000000..a253cfe
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java	
@@ -0,0 +1,4361 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.List;
+
+import com.trolltech.qt.core.QCoreApplication;
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.core.QEventLoop.ProcessEventsFlag;
+import com.trolltech.qt.core.Qt.FocusPolicy;
+import com.trolltech.qt.core.Qt.FocusReason;
+import com.trolltech.qt.core.Qt.Key;
+import com.trolltech.qt.core.Qt.LayoutDirection;
+import com.trolltech.qt.core.Qt.MouseButton;
+import com.trolltech.qt.core.Qt.MouseButtons;
+import com.trolltech.qt.gui.QAbstractScrollArea;
+import com.trolltech.qt.gui.QAction;
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QBrush;
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QContextMenuEvent;
+import com.trolltech.qt.gui.QDesktopWidget;
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDragLeaveEvent;
+import com.trolltech.qt.gui.QDragMoveEvent;
+import com.trolltech.qt.gui.QDropEvent;
+import com.trolltech.qt.gui.QFrame;
+import com.trolltech.qt.gui.QKeyEvent;
+import com.trolltech.qt.gui.QMenu;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QMoveEvent;
+import com.trolltech.qt.gui.QPaintDeviceInterface;
+import com.trolltech.qt.gui.QPaintEvent;
+import com.trolltech.qt.gui.QPainter;
+import com.trolltech.qt.gui.QPalette;
+import com.trolltech.qt.gui.QPicture;
+import com.trolltech.qt.gui.QResizeEvent;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QFrame.Shadow;
+import com.trolltech.qt.gui.QFrame.Shape;
+import com.trolltech.qt.gui.QPalette.ColorRole;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.accessibility.Accessible;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Drawable;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.GCData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Region;
+import org.eclipse.swt.internal.qt.DragNDropListener;
+import org.eclipse.swt.internal.qt.KeyUtil;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * Control is the abstract superclass of all windowed user interface classes.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b>
+ * <dd>BORDER</dd>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * <dt><b>Events:</b>
+ * <dd>DragDetect, FocusIn, FocusOut, Help, KeyDown, KeyUp, MenuDetect,
+ * MouseDoubleClick, MouseDown, MouseEnter, MouseExit, MouseHover, MouseUp,
+ * MouseMove, Move, Paint, Resize, Traverse</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Only one of LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#control">Control
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public abstract class Control extends Widget implements Drawable {
+	/**
+	 * the handle to the OS resource (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It is not available on all platforms and should never be
+	 * accessed from application code.
+	 * </p>
+	 */
+	public int /* long */handle;
+	Composite parent;
+	protected Cursor cursor;
+	private Menu menu;
+	private Object layoutData;
+	private Accessible accessible;
+	protected Region region;
+	private Font font;
+	protected Color foreground;
+	protected Color background;
+	protected Image backgroundImage;
+	private QPicture temporaryGC;
+	protected boolean isOngoingPaintEvent = false;
+	private boolean enabled = true;
+	private QPoint dragStartPos;
+	private DragNDropListener dndListener;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Control() {
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#BORDER
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Control(Composite parent, int style) {
+		super(parent, style);
+		this.parent = parent;
+		createWidget(parent, style);
+	}
+
+	protected void createWidget(Composite parent, int style) {
+		state |= DRAG_DETECT;
+		checkAndUpdateOrientation(parent);
+		QWidget qWidget = createQWidget(style);
+		if (qWidget == null) {
+			error(SWT.ERROR_UNSPECIFIED);
+		}
+		setQWidget(qWidget);
+		setParent();
+		fixZOrder();
+		checkAndUpdateBackground();
+		connectSignals();
+		registerQWidget();
+		setupQWidget();
+		updateLayoutDirection();
+		setupStyleSheet();
+		checkAndUpdateMirrored();
+		checkAndUpdateBorder();
+		updateFocusPolicy();
+		updateBackground();
+		updateSizeAndVisibility();
+	}
+
+	abstract QWidget createQWidget(int style);
+
+	protected void setParent() {
+		if (parent != null) {
+			parent.addQChild(this);
+		}
+	}
+
+	protected void fixZOrder() {
+		if (parent != null && !(parent instanceof TabFolder)) {
+			getQMasterWidget().lower();
+		}
+	}
+
+	/**
+	 * Hook that guarantees that getQWidget() != null. Called immediately after
+	 * {@link createQtControl()}.
+	 */
+	protected void setupQWidget() {
+		//nothing
+	}
+
+	protected void updateSizeAndVisibility() {
+		if (parent != null && parent.getQWidget().isVisible() && !(parent instanceof Shell) && !(this instanceof Shell)) {
+			getQMasterWidget().setVisible(true);
+		}
+	}
+
+	protected void connectSignals() {
+		// nothing by default
+	}
+
+	boolean isQScrollArea() {
+		return getQWidget() instanceof QAbstractScrollArea;
+	}
+
+	protected void setupStyleSheet() {
+		String styleSheet = getShell() != null ? getShell().getQMasterWidget().styleSheet() : null;
+		if (styleSheet == null) {
+			styleSheet = getDisplay().getStyleSheet();
+			if (styleSheet != null) {
+				setStyleSheet(styleSheet);
+			}
+		}
+	}
+
+	protected void updateLayoutDirection() {
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			getQWidget().setLayoutDirection(LayoutDirection.RightToLeft);
+		} else {
+			getQWidget().setLayoutDirection(LayoutDirection.LeftToRight);
+		}
+	}
+
+	protected void updateFocusPolicy() {
+		if ((style & SWT.NO_FOCUS) != 0) {
+			getQMasterWidget().setFocusPolicy(FocusPolicy.NoFocus);
+		}
+	}
+
+	void registerQWidget() {
+		display.addControl(getQWidget(), this);
+		if (getQMasterWidget() != null && getQMasterWidget() != getQWidget()) {
+			display.addControl(getQMasterWidget(), this);
+		}
+	}
+
+	void deregisterQWidget() {
+		display.removeControl(getQWidget());
+		if (getQMasterWidget() != null && getQMasterWidget() != getQWidget()) {
+			display.removeControl(getQMasterWidget());
+		}
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		parent = null;
+	}
+
+	@Override
+	void releaseParent() {
+		parent.removeControl(this);
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+
+		deregisterQWidget();
+
+		if (menu != null && !menu.isDisposed()) {
+			menu.dispose();
+		}
+		temporaryGC = null;
+		backgroundImage = null;
+		menu = null;
+		cursor = null;
+		layoutData = null;
+		if (accessible != null) {
+			// TODO
+			//accessible.internal_dispose_Accessible();
+		}
+		accessible = null;
+		region = null;
+		font = null;
+	}
+
+	protected void checkAndUpdateBorder() {
+		checkAndUpdateBorder(getQMasterWidget());
+		if (getBorderWidth() == 0) {
+			style &= ~SWT.BORDER;
+		}
+	}
+
+	protected void checkAndUpdateBorder(QWidget control) {
+		if (control != null && control instanceof QFrame) {
+			QFrame frame = (QFrame) control;
+			if ((style & SWT.BORDER) != 0) {
+				frame.setFrameShape(Shape.StyledPanel);
+				frame.setFrameShadow(Shadow.Sunken);
+				frame.setLineWidth(1);
+			} else {
+				frame.setFrameShape(Shape.NoFrame);
+				frame.setLineWidth(0);
+			}
+		}
+
+	}
+
+	/* used by CoolBar */
+	boolean drawGripper(int x, int y, int width, int height, boolean vertical) {
+		return false;
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is moved or resized, by sending it one of the messages
+	 * defined in the <code>ControlListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #removeControlListener
+	 */
+	public void addControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Resize, typedListener);
+		addListener(SWT.Move, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when a drag gesture occurs, by sending it one of the messages defined in
+	 * the <code>DragDetectListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DragDetectListener
+	 * @see #removeDragDetectListener
+	 * 
+	 * @since 3.3
+	 */
+	public void addDragDetectListener(DragDetectListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.DragDetect, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control gains or loses focus, by sending it one of the messages
+	 * defined in the <code>FocusListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see FocusListener
+	 * @see #removeFocusListener
+	 */
+	public void addFocusListener(FocusListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.FocusIn, typedListener);
+		addListener(SWT.FocusOut, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will
+	 * be notified when gesture events are generated for the control,
+	 * by sending it one of the messages defined in the 
+	 * <code>GestureListener</code> interface.
+	 *
+	 * @param listener the listener which should be notified
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 *
+	 * @see GestureListener
+	 * @see #removeGestureListener
+	 * 
+	 * @since 3.7
+	 */
+	public void addGestureListener (GestureListener listener) {
+		checkWidget();
+		if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+		TypedListener typedListener = new TypedListener (listener);
+		addListener (SWT.Gesture, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when help events are generated for the control, by sending it one of the
+	 * messages defined in the <code>HelpListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see HelpListener
+	 * @see #removeHelpListener
+	 */
+	public void addHelpListener(HelpListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Help, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when keys are pressed and released on the system keyboard, by sending it
+	 * one of the messages defined in the <code>KeyListener</code> interface.
+	 * <p>
+	 * When a key listener is added to a control, the control will take part in
+	 * widget traversal. By default, all traversal keys (such as the tab key and
+	 * so on) are delivered to the control. In order for a control to take part
+	 * in traversal, it should listen for traversal events. Otherwise, the user
+	 * can traverse into a control but not out. Note that native controls such
+	 * as table and tree implement key traversal in the operating system. It is
+	 * not necessary to add traversal listeners for these controls, unless you
+	 * want to override the default traversal.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see KeyListener
+	 * @see #removeKeyListener
+	 */
+	public void addKeyListener(KeyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.KeyUp, typedListener);
+		addListener(SWT.KeyDown, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the platform-specific context menu trigger has occurred, by sending
+	 * it one of the messages defined in the <code>MenuDetectListener</code>
+	 * interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MenuDetectListener
+	 * @see #removeMenuDetectListener
+	 * 
+	 * @since 3.3
+	 */
+	public void addMenuDetectListener(MenuDetectListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.MenuDetect, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when mouse buttons are pressed and released, by sending it one of the
+	 * messages defined in the <code>MouseListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseListener
+	 * @see #removeMouseListener
+	 */
+	public void addMouseListener(MouseListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.MouseDown, typedListener);
+		addListener(SWT.MouseUp, typedListener);
+		addListener(SWT.MouseDoubleClick, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the mouse passes or hovers over controls, by sending it one of the
+	 * messages defined in the <code>MouseTrackListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseTrackListener
+	 * @see #removeMouseTrackListener
+	 */
+	public void addMouseTrackListener(MouseTrackListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.MouseEnter, typedListener);
+		addListener(SWT.MouseExit, typedListener);
+		addListener(SWT.MouseHover, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the mouse moves, by sending it one of the messages defined in the
+	 * <code>MouseMoveListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseMoveListener
+	 * @see #removeMouseMoveListener
+	 */
+	public void addMouseMoveListener(MouseMoveListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.MouseMove, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the mouse wheel is scrolled, by sending it one of the messages
+	 * defined in the <code>MouseWheelListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseWheelListener
+	 * @see #removeMouseWheelListener
+	 * 
+	 * @since 3.3
+	 */
+	public void addMouseWheelListener(MouseWheelListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.MouseWheel, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver needs to be painted, by sending it one of the messages
+	 * defined in the <code>PaintListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see PaintListener
+	 * @see #removePaintListener
+	 */
+	public void addPaintListener(PaintListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Paint, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will
+	 * be notified when touch events occur, by sending it
+	 * one of the messages defined in the <code>TouchListener</code>
+	 * interface.
+	 * <p>
+	 * NOTE: You must also call <code>setTouchEnabled</code> to notify the 
+	 * windowing toolkit that you want touch events to be generated.
+	 * </p>
+	 * 
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 *
+	 * @see TouchListener
+	 * @see #removeTouchListener
+	 * @since 3.7
+	 */
+	public void addTouchListener (TouchListener listener) {
+		checkWidget();
+		if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+		TypedListener typedListener = new TypedListener (listener);
+		addListener (SWT.Touch,typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when traversal events occur, by sending it one of the messages defined in
+	 * the <code>TraverseListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see TraverseListener
+	 * @see #removeTraverseListener
+	 */
+	public void addTraverseListener(TraverseListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Traverse, typedListener);
+	}
+
+	protected void checkBuffered() {
+		style &= ~SWT.DOUBLE_BUFFERED;
+	}
+
+	protected void checkAndUpdateMirrored() {
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			style |= SWT.MIRRORED;
+		}
+	}
+
+	/**
+	 * Returns the preferred size of the receiver.
+	 * <p>
+	 * The <em>preferred size</em> of a control is the size that it would best
+	 * be displayed at. The width hint and height hint arguments allow the
+	 * caller to ask a control questions such as "Given a particular width, how
+	 * high does the control need to be to show all of the contents?" To
+	 * indicate that the caller does not wish to constrain a particular
+	 * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint.
+	 * </p>
+	 * 
+	 * @param wHint
+	 *            the width hint (can be <code>SWT.DEFAULT</code>)
+	 * @param hHint
+	 *            the height hint (can be <code>SWT.DEFAULT</code>)
+	 * @return the preferred size of the control
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Layout
+	 * @see #getBorderWidth
+	 * @see #getBounds
+	 * @see #getSize
+	 * @see #pack(boolean)
+	 * @see "computeTrim, getClientArea for controls that implement them"
+	 */
+	public Point computeSize(int wHint, int hHint) {
+		return computeSize(wHint, hHint, true);
+	}
+
+	/**
+	 * Returns the preferred size of the receiver.
+	 * <p>
+	 * The <em>preferred size</em> of a control is the size that it would best
+	 * be displayed at. The width hint and height hint arguments allow the
+	 * caller to ask a control questions such as "Given a particular width, how
+	 * high does the control need to be to show all of the contents?" To
+	 * indicate that the caller does not wish to constrain a particular
+	 * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint.
+	 * </p>
+	 * <p>
+	 * If the changed flag is <code>true</code>, it indicates that the
+	 * receiver's <em>contents</em> have changed, therefore any caches that a
+	 * layout manager containing the control may have been keeping need to be
+	 * flushed. When the control is resized, the changed flag will be
+	 * <code>false</code>, so layout manager caches can be retained.
+	 * </p>
+	 * 
+	 * @param wHint
+	 *            the width hint (can be <code>SWT.DEFAULT</code>)
+	 * @param hHint
+	 *            the height hint (can be <code>SWT.DEFAULT</code>)
+	 * @param changed
+	 *            <code>true</code> if the control's contents have changed, and
+	 *            <code>false</code> otherwise
+	 * @return the preferred size of the control.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Layout
+	 * @see #getBorderWidth
+	 * @see #getBounds
+	 * @see #getSize
+	 * @see #pack(boolean)
+	 * @see "computeTrim, getClientArea for controls that implement them"
+	 */
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		if (changed) {
+			getQMasterWidget().updateGeometry();
+		}
+		Point res = QtSWTConverter.convert(getQMasterWidget().sizeHint());
+		if (res.x < 0) {
+			res.x = DEFAULT_WIDTH;
+		}
+		if (res.y < 0) {
+			res.y = DEFAULT_HEIGHT;
+		}
+
+		int border = getBorderWidth();
+		if (wHint != SWT.DEFAULT) {
+			res.x = wHint + 2 * border;
+		}
+		if (hHint != SWT.DEFAULT) {
+			res.y = hHint + 2 * border;
+		}
+
+		return res;
+	}
+
+	Control computeTabGroup() {
+		if (isTabGroup()) {
+			return this;
+		}
+		return parent.computeTabGroup();
+	}
+
+	Control computeTabRoot() {
+		Control[] tabList = parent._getTabList();
+		if (tabList != null) {
+			int index = 0;
+			while (index < tabList.length) {
+				if (tabList[index] == this) {
+					break;
+				}
+				index++;
+			}
+			if (index == tabList.length) {
+				if (isTabGroup()) {
+					return this;
+				}
+			}
+		}
+		return parent.computeTabRoot();
+	}
+
+	Control[] computeTabList() {
+		if (isTabGroup()) {
+			if (getVisible() && getEnabled()) {
+				return new Control[] { this };
+			}
+		}
+		return new Control[0];
+	}
+
+	Font defaultFont() {
+		return display.getSystemFont();
+	}
+
+	/**
+	 * Detects a drag and drop gesture. This method is used to detect a drag
+	 * gesture when called from within a mouse down listener.
+	 * 
+	 * <p>
+	 * By default, a drag is detected when the gesture occurs anywhere within
+	 * the client area of a control. Some controls, such as tables and trees,
+	 * override this behavior. In addition to the operating system specific drag
+	 * gesture, they require the mouse to be inside an item. Custom widget
+	 * writers can use <code>setDragDetect</code> to disable the default
+	 * detection, listen for mouse down, and then call <code>dragDetect()</code>
+	 * from within the listener to conditionally detect a drag.
+	 * </p>
+	 * 
+	 * @param event
+	 *            the mouse down event
+	 * 
+	 * @return <code>true</code> if the gesture occurred, and <code>false</code>
+	 *         otherwise.
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT when the event is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DragDetectListener
+	 * @see #addDragDetectListener
+	 * 
+	 * @see #getDragDetect
+	 * @see #setDragDetect
+	 * 
+	 * @since 3.3
+	 */
+	public boolean dragDetect(Event event) {
+		checkWidget();
+		if (event == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return dragDetect(event.button, event.count, event.stateMask, event.x, event.y);
+	}
+
+	/**
+	 * Detects a drag and drop gesture. This method is used to detect a drag
+	 * gesture when called from within a mouse down listener.
+	 * 
+	 * <p>
+	 * By default, a drag is detected when the gesture occurs anywhere within
+	 * the client area of a control. Some controls, such as tables and trees,
+	 * override this behavior. In addition to the operating system specific drag
+	 * gesture, they require the mouse to be inside an item. Custom widget
+	 * writers can use <code>setDragDetect</code> to disable the default
+	 * detection, listen for mouse down, and then call <code>dragDetect()</code>
+	 * from within the listener to conditionally detect a drag.
+	 * </p>
+	 * 
+	 * @param event
+	 *            the mouse down event
+	 * 
+	 * @return <code>true</code> if the gesture occurred, and <code>false</code>
+	 *         otherwise.
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT when the event is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DragDetectListener
+	 * @see #addDragDetectListener
+	 * 
+	 * @see #getDragDetect
+	 * @see #setDragDetect
+	 * 
+	 * @since 3.3
+	 */
+	public boolean dragDetect(MouseEvent event) {
+		checkWidget();
+		if (event == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return dragDetect(event.button, event.count, event.stateMask, event.x, event.y);
+	}
+
+	boolean dragDetect(int button, int count, int stateMask, int x, int y) {
+		return false;
+		// TODO
+	}
+
+	Cursor findCursor() {
+		if (cursor != null) {
+			return cursor;
+		}
+		return parent.findCursor();
+	}
+
+	Control findImageControl() {
+		Control control = findBackgroundControl();
+		return control != null && control.backgroundImage != null ? control : null;
+	}
+
+	Control findThemeControl() {
+		return background == null && backgroundImage == null ? parent.findThemeControl() : null;
+	}
+
+	Menu[] findMenus(Control control) {
+		if (menu != null && this != control) {
+			return new Menu[] { menu };
+		}
+		return new Menu[0];
+	}
+
+	protected char findMnemonic(String string) {
+		int index = 0;
+		int length = string.length();
+		do {
+			while (index < length && string.charAt(index) != '&') {
+				index++;
+			}
+			if (++index >= length) {
+				return '\0';
+			}
+			if (string.charAt(index) != '&') {
+				return string.charAt(index);
+			}
+			index++;
+		} while (index < length);
+		return '\0';
+	}
+
+	void fixChildren(Shell newShell, Shell oldShell, Decorations newDecorations, Decorations oldDecorations,
+			Menu[] menus) {
+		oldShell.fixShell(newShell, this);
+		oldDecorations.fixDecorations(newDecorations, this, menus);
+	}
+
+	private void fixFocus(Control focusControl) {
+		Shell shell = getShell();
+		Control control = this;
+		while (control != shell && (control = control.parent) != null) {
+			if (control.setFixedFocus()) {
+				return;
+			}
+		}
+
+		shell.setSavedFocus(focusControl);
+
+		QDesktopWidget desktopWidget = QApplication.desktop();
+		if (desktopWidget != null) {
+			desktopWidget.setFocus(FocusReason.OtherFocusReason);
+		}
+	}
+
+	/**
+	 * Forces the receiver to have the <em>keyboard focus</em>, causing all
+	 * keyboard events to be delivered to it.
+	 * 
+	 * @return <code>true</code> if the control got focus, and
+	 *         <code>false</code> if it was unable to.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setFocus
+	 */
+	public boolean forceFocus() {
+		checkWidget();
+		return forceFocus(FocusReason.OtherFocusReason);
+	}
+
+	protected boolean forceFocus(FocusReason focusReason) {
+		if (display.focusEvent == SWT.FocusOut) {
+			return false;
+		}
+		Decorations shell = menuShell();
+		shell.setSavedFocus(this);
+		if (!isEnabled() || !isVisible() || !isActive()) {
+			return false;
+		}
+		if (isFocusControl()) {
+			return true;
+		}
+		shell.setSavedFocus(null);
+		getQWidget().setFocus(focusReason);
+		if (isDisposed()) {
+			return false;
+		}
+		shell.setSavedFocus(this);
+		return _isFocusControl();
+	}
+
+	/**
+	 * Returns the accessible object for the receiver. If this is the first time
+	 * this object is requested, then the object is created and returned.
+	 * 
+	 * @return the accessible object
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Accessible#addAccessibleListener
+	 * @see Accessible#addAccessibleControlListener
+	 * 
+	 * @since 2.0
+	 */
+	public Accessible getAccessible() {
+		checkWidget();
+		if (accessible == null) {
+			accessible = new_Accessible(this);
+		}
+		return accessible;
+	}
+
+	/**
+	 * Returns the receiver's background color.
+	 * 
+	 * @return the background color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Color getBackground() {
+		checkWidget();
+		return _getBackgroundColor();
+	}
+
+	/**
+	 * Returns the receiver's background image.
+	 * 
+	 * @return the background image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public Image getBackgroundImage() {
+		checkWidget();
+		Control control = findBackgroundControl();
+		if (control == null) {
+			control = this;
+		}
+		return control.backgroundImage;
+	}
+
+	Color _getBackgroundColor() {
+		Control control = findBackgroundControl();
+		if (control == null) {
+			control = this;
+		}
+		if (control.background != null) {
+			return control.background;
+		}
+		return getDefaultBackgroundColor();
+	}
+
+	/**
+	 * Returns the receiver's border width.
+	 * 
+	 * @return the border width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getBorderWidth() {
+		checkWidget();
+		if (getQMasterWidget() instanceof QFrame) {
+			return ((QFrame) getQMasterWidget()).frameWidth();
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent (or its display if its parent is null), unless the receiver
+	 * is a shell. In this case, the location is relative to the display.
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Rectangle getBounds() {
+		checkWidget();
+		return QtSWTConverter.convert(getQMasterWidget().frameGeometry());
+	}
+
+	/**
+	 * Returns the receiver's cursor, or null if it has not been set.
+	 * <p>
+	 * When the mouse pointer passes over a control its appearance is changed to
+	 * match the control's cursor.
+	 * </p>
+	 * 
+	 * @return the receiver's cursor or <code>null</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public Cursor getCursor() {
+		checkWidget();
+		return cursor;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is detecting drag gestures, and
+	 * <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's drag detect state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public boolean getDragDetect() {
+		checkWidget();
+		return isDragDetectEnabled();
+	}
+
+	private boolean isDragDetectEnabled() {
+		return (state & DRAG_DETECT) != 0;
+	}
+
+	/**
+	 * Sets the receiver's drag detect state. If the argument is
+	 * <code>true</code>, the receiver will detect drag gestures, otherwise
+	 * these gestures will be ignored.
+	 * 
+	 * @param dragDetect
+	 *            the new drag detect state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public void setDragDetect(boolean dragDetect) {
+		checkWidget();
+		if (dragDetect) {
+			state |= DRAG_DETECT;
+		} else {
+			state &= ~DRAG_DETECT;
+		}
+	}
+
+	protected boolean isDropTargetEnabled() {
+		return getData(DND.DROP_TARGET_KEY) != null; // check if DropTarget is present
+	}
+
+	public void setAcceptDrops(boolean accept) {
+		getQMasterWidget().setAcceptDrops(accept);
+	}
+
+	public void setDragEnabled(boolean enabled) {
+		// nothing by default
+	}
+
+	public void dragEnd() {
+		dragStartPos = null;
+	}
+
+	public void setDragNDropListener(DragNDropListener listener) {
+		this.dndListener = listener;
+	}
+
+	public void unsetDragNDropListener(DragNDropListener listener) {
+		if (this.dndListener == listener) {
+			this.dndListener = null;
+		}
+	}
+
+	protected final void sendDropEvent(QDropEvent event) {
+		if (this.dndListener == null) {
+			return;
+		}
+		dndListener.drop(event);
+	}
+
+	protected final void sendDragMoveEvent(QDragMoveEvent event) {
+		if (this.dndListener == null) {
+			return;
+		}
+		dndListener.dragMove(event);
+	}
+
+	protected final void sendDragLeaveEvent(QDragLeaveEvent event) {
+		if (this.dndListener == null) {
+			return;
+		}
+		dndListener.dragLeave(event);
+	}
+
+	protected final void sendDragEnterEvent(QDragEnterEvent event) {
+		if (this.dndListener == null) {
+			return;
+		}
+		dndListener.dragEnter(event);
+	}
+
+	/**
+	 * Returns the font that the receiver will use to paint textual information.
+	 * 
+	 * @return the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Font getFont() {
+		checkWidget();
+		if (font != null) {
+			return font;
+		}
+		return defaultFont();
+	}
+
+	/**
+	 * Returns the foreground color that the receiver will use to draw.
+	 * 
+	 * @return the receiver's foreground color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Color getForeground() {
+		checkWidget();
+		return _getForegroundColor();
+	}
+
+	Color _getForegroundColor() {
+		if (foreground != null) {
+			return foreground;
+		}
+		return getDefaultForegroundColor();
+	}
+
+	protected Color getDefaultForegroundColor() {
+		return Color.qt_new(display, getColorFromPalette(ColorRole.WindowText));
+	}
+
+	protected QColor getColorFromPalette(ColorRole role) {
+		QPalette palette = getQWidget().palette();
+		return palette.color(role);
+	}
+
+	/**
+	 * Returns layout data which is associated with the receiver.
+	 * 
+	 * @return the receiver's layout data
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Object getLayoutData() {
+		checkWidget();
+		return layoutData;
+	}
+
+	/**
+	 * Returns a point describing the receiver's location relative to its parent
+	 * (or its display if its parent is null), unless the receiver is a shell.
+	 * In this case, the point is relative to the display.
+	 * 
+	 * @return the receiver's location
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getLocation() {
+		checkWidget();
+		//forceResize();
+		return QtSWTConverter.convert(getQWidget().pos());
+	}
+
+	/**
+	 * Returns the receiver's pop up menu if it has one, or null if it does not.
+	 * All controls may optionally have a pop up menu that is displayed when the
+	 * user requests one for the control. The sequence of key strokes, button
+	 * presses and/or button releases that are used to request a pop up menu is
+	 * platform specific.
+	 * 
+	 * @return the receiver's menu
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	@Override
+	public Menu getMenu() {
+		checkWidget();
+		return menu;
+	}
+
+	/**
+	 * Returns the receiver's monitor.
+	 * 
+	 * @return the receiver's monitor
+	 * 
+	 * @since 3.0
+	 */
+	public Monitor getMonitor() {
+		checkWidget();
+		return Display.createMonitor(getQWidget());
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Composite</code> or
+	 * null when the receiver is a shell that was created with null or a display
+	 * for a parent.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Composite getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	Control[] getPath() {
+		int count = 0;
+		Shell shell = getShell();
+		Control control = this;
+		while (control != shell) {
+			count++;
+			control = control.parent;
+		}
+		control = this;
+		Control[] result = new Control[count];
+		while (control != shell) {
+			result[--count] = control;
+			control = control.parent;
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the region that defines the shape of the control, or null if the
+	 * control has the default shape.
+	 * 
+	 * @return the region that defines the shape of the shell (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public Region getRegion() {
+		checkWidget();
+		return region;
+	}
+
+	/**
+	 * Returns the receiver's shell. For all controls other than shells, this
+	 * simply returns the control's nearest ancestor shell. Shells return
+	 * themselves, even if they are children of other shells.
+	 * 
+	 * @return the receiver's shell
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getParent
+	 */
+	public Shell getShell() {
+		checkWidget();
+		return parent.getShell();
+	}
+
+	/**
+	 * Returns a point describing the receiver's size. The x coordinate of the
+	 * result is the width of the receiver. The y coordinate of the result is
+	 * the height of the receiver.
+	 * 
+	 * @return the receiver's size
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getSize() {
+		checkWidget();
+		return QtSWTConverter.convert(getQMasterWidget().frameSize());
+	}
+
+	int getClientWidth() {
+		return getQMasterWidget().rect().width();
+	}
+
+	/**
+	 * Returns the receiver's tool tip text, or null if it has not been set.
+	 * 
+	 * @return the receiver's tool tip text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getToolTipText() {
+		checkWidget();
+		return getQWidget().toolTip();
+	}
+
+	/**
+	 * Returns <code>true</code> if this control is receiving OS-level touch events,
+	 * otherwise <code>false</code>
+	 * <p>
+	 * Note that this method will return false if the current platform does not support touch-based input.
+	 * If this method does return true, gesture events will not be sent to the control.
+	 *
+	 * @return <code>true</code> if the widget is currently receiving touch events; <code>false</code> otherwise.
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 * 
+	 * @since 3.7
+	 */
+	public boolean getTouchEnabled() {
+		checkWidget();
+		return false;
+	}
+
+	boolean hasFocus() {
+		return getQWidget().hasFocus();
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Control</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the platform specific GC data
+	 * @return the platform specific GC handle
+	 */
+	public QPaintDeviceInterface internal_new_GC(GCData data) {
+		checkWidget();
+		initGCData(data);
+		// we are in a Qt paint event
+		if (isOngoingPaintEvent) {
+			return getQWidget();
+		}
+		// if we are not in a paint event, we need to temporarily render to a
+		// temp GC and apply the changes in the next paint event
+		temporaryGC = new QPicture();
+		//System.out.println("creating tmp gc for " + this + " " + temporaryGC);
+		return temporaryGC;
+	}
+
+	void initGCData(GCData data) {
+		data.device = display;
+		data.backgroundColor = getBackground();
+		data.foregroundColor = getForeground();
+		data.font = getFont();
+	}
+
+	/**
+	 * Invokes platform specific functionality to dispose a GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Control</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param hDC
+	 *            the platform specific GC handle
+	 * @param data
+	 *            the platform specific GC data
+	 */
+	public void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data) {
+		checkWidget();
+		if (!isOngoingPaintEvent) {
+			//System.out.println("tmp gc back " + this + " " + parent + " " + Thread.currentThread());
+			//new RuntimeException().printStackTrace();
+			getQWidget().update();
+		}
+	}
+
+	boolean isActive() {
+		Dialog dialog = display.getModalDialog();
+		if (dialog != null) {
+			Shell dialogShell = dialog.parent;
+			if (dialogShell != null && !dialogShell.isDisposed()) {
+				if (dialogShell != getShell()) {
+					return false;
+				}
+			}
+		}
+		Shell shell = null;
+		Shell[] modalShells = display.modalShells;
+		if (modalShells != null) {
+			int bits = SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+			int index = modalShells.length;
+			while (--index >= 0) {
+				Shell modal = modalShells[index];
+				if (modal != null) {
+					if ((modal.style & bits) != 0) {
+						Control control = this;
+						while (control != null) {
+							if (control == modal) {
+								break;
+							}
+							control = control.parent;
+						}
+						if (control != modal) {
+							return false;
+						}
+						break;
+					}
+					if ((modal.style & SWT.PRIMARY_MODAL) != 0) {
+						if (shell == null) {
+							shell = getShell();
+						}
+						if (modal.parent == shell) {
+							return false;
+						}
+					}
+				}
+			}
+		}
+		if (shell == null) {
+			shell = getShell();
+		}
+		return shell.getEnabled();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver has the user-interface focus,
+	 * and <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's focus state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean isFocusControl() {
+		checkWidget();
+		return _isFocusControl();
+	}
+
+	protected boolean _isFocusControl() {
+		Control focusControl = display.focusControl;
+		if (focusControl != null && !focusControl.isDisposed()) {
+			return this == focusControl;
+		}
+		return hasFocus();
+	}
+
+	boolean isFocusAncestor(Control control) {
+		while (control != null && control != this && !(control instanceof Shell)) {
+			control = control.parent;
+		}
+		return control == this;
+	}
+
+	/**
+	 * Returns <code>true</code> if the underlying operating system supports
+	 * this reparenting, otherwise <code>false</code>
+	 * 
+	 * @return <code>true</code> if the widget can be reparented, otherwise
+	 *         <code>false</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean isReparentable() {
+		checkWidget();
+		return true;
+	}
+
+	boolean isShowing() {
+		if (!isVisible()) {
+			return false;
+		}
+		Control control = this;
+		while (control != null) {
+			Point size = control.getSize();
+			if (size.x == 0 || size.y == 0) {
+				return false;
+			}
+			control = control.parent;
+		}
+		return true;
+	}
+
+	boolean isTabGroup() {
+		Control[] tabList = parent._getTabList();
+		if (tabList != null) {
+			for (int i = 0; i < tabList.length; i++) {
+				if (tabList[i] == this) {
+					return true;
+				}
+			}
+		}
+		//TODO
+		return false;
+	}
+
+	boolean isTabItem() {
+		Control[] tabList = parent._getTabList();
+		if (tabList != null) {
+			for (int i = 0; i < tabList.length; i++) {
+				if (tabList[i] == this) {
+					return false;
+				}
+			}
+		}
+		return FocusPolicy.TabFocus.equals(getQWidget().focusPolicy());
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible and all ancestors up
+	 * to and including the receiver's nearest ancestor shell are visible.
+	 * Otherwise, <code>false</code> is returned.
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getVisible
+	 */
+	public boolean isVisible() {
+		checkWidget();
+		return getQMasterWidget().isVisible();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getVisible() {
+		checkWidget();
+		// TODO hack. some layouts are distroyed if we return the visibile state instead of the real visibility
+		return getQMasterWidget().isVisible();
+	}
+
+	/**
+	 * Sets the receiver to receive touch events from the OS.  By default, touch
+	 * events are not delivered to a control unless specifically requested for that control.
+	 * This is independent of whether or not there are any <code>TouchListener</code> instances 
+	 * registered for the control.
+	 *
+	 * @param enabled the new touch-enabled state.
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 * 
+	 * @since 3.7
+	 */
+	public void setTouchEnabled(boolean enabled) {
+		checkWidget();
+	}
+
+	/**
+	 * Marks the receiver as visible if the argument is <code>true</code>, and
+	 * marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param visible
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setVisible(final boolean visible) {
+		checkWidget();
+		_setVisible(getQMasterWidget(), visible);
+	}
+
+	protected void _setVisible(QWidget widget, final boolean visible) {
+		//this.visible = visible;
+
+		boolean oldVisibility = getQMasterWidget().isVisible();
+
+		// we always set the visibility, this is important during initialization, when all widgets are not visible, but some are explicitly hidden
+		widget.setVisible(visible);
+
+		if (oldVisibility == visible) { // bail out if state has not changed
+			return;
+		}
+
+		// TODO hack
+		if (widget.parentWidget() != null) {
+			widget.parentWidget().update();
+		}
+
+		if (getQMasterWidget().isVisible()) {
+			sendEvent(SWT.Show);
+			if (isDisposed()) {
+				return;
+			}
+		}
+		Control control = null;
+		boolean fixFocus = false;
+		if (getQMasterWidget().isHidden()) {
+			if (display.focusEvent != SWT.FocusOut) {
+				control = display.getFocusControl();
+				fixFocus = isFocusAncestor(control);
+			}
+
+			sendEvent(SWT.Hide);
+			if (isDisposed()) {
+				return;
+			}
+		}
+		if (fixFocus) {
+			fixFocus(control);
+		}
+	}
+
+	void markLayout(boolean changed, boolean all) {
+		/* Do nothing */
+	}
+
+	Decorations menuShell() {
+		return parent.menuShell();
+	}
+
+	boolean mnemonicHit(char key) {
+		return false;
+	}
+
+	boolean mnemonicMatch(char key) {
+		return false;
+	}
+
+	/**
+	 * Moves the receiver above the specified control in the drawing order. If
+	 * the argument is null, then the receiver is moved to the top of the
+	 * drawing order. The control at the top of the drawing order will not be
+	 * covered by other controls even if they occupy intersecting areas.
+	 * 
+	 * @param control
+	 *            the sibling control (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the control has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Control#moveBelow
+	 * @see Composite#getChildren
+	 */
+	public void moveAbove(Control control) {
+		checkWidget();
+		if (control != null) {
+			if (control.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (parent != control.parent) {
+				return;
+			}
+
+			Control controlAbove = null;
+			List<QObject> children = getQWidget().children();
+			boolean next = false;
+			for (QObject child : children) {
+				Widget widget = display.findControl(child);
+				if (!next && widget == control) {
+					next = true;
+					continue;
+				}
+				if (next) {
+					if (widget != null && widget != this) {
+						if (widget instanceof Control) {
+							controlAbove = (Control) widget;
+							break;
+						}
+					}
+				}
+			}
+			if (controlAbove != null) {
+				moveBelow(controlAbove);
+			} else {
+				getQMasterWidget().raise();
+			}
+		} else {
+			getQMasterWidget().raise();
+		}
+	}
+
+	/**
+	 * Moves the receiver below the specified control in the drawing order. If
+	 * the argument is null, then the receiver is moved to the bottom of the
+	 * drawing order. The control at the bottom of the drawing order will be
+	 * covered by all other controls which occupy intersecting areas.
+	 * 
+	 * @param control
+	 *            the sibling control (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the control has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Control#moveAbove
+	 * @see Composite#getChildren
+	 */
+	public void moveBelow(Control control) {
+		checkWidget();
+		if (control != null) {
+			if (control.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (parent != control.parent) {
+				return;
+			}
+			getQMasterWidget().stackUnder(control.getQWidget());
+		} else {
+			getQMasterWidget().lower();
+		}
+	}
+
+	Accessible new_Accessible(Control control) {
+		return Accessible.internal_new_Accessible(this);
+	}
+
+	@Override
+	GC new_GC(GCData data) {
+		return GC.qt_new(this, data);
+	}
+
+	/**
+	 * Causes the receiver to be resized to its preferred size. For a composite,
+	 * this involves computing the preferred size from its layout, if there is
+	 * one.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #computeSize(int, int, boolean)
+	 */
+	public void pack() {
+		checkWidget();
+		pack(true);
+	}
+
+	/**
+	 * Causes the receiver to be resized to its preferred size. For a composite,
+	 * this involves computing the preferred size from its layout, if there is
+	 * one.
+	 * <p>
+	 * If the changed flag is <code>true</code>, it indicates that the
+	 * receiver's <em>contents</em> have changed, therefore any caches that a
+	 * layout manager containing the control may have been keeping need to be
+	 * flushed. When the control is resized, the changed flag will be
+	 * <code>false</code>, so layout manager caches can be retained.
+	 * </p>
+	 * 
+	 * @param changed
+	 *            whether or not the receiver's contents have changed
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #computeSize(int, int, boolean)
+	 */
+	public void pack(boolean changed) {
+		checkWidget();
+		setSize(computeSize(SWT.DEFAULT, SWT.DEFAULT, changed));
+	}
+
+	/**
+	 * Prints the receiver and all children.
+	 * 
+	 * @param gc
+	 *            the gc where the drawing occurs
+	 * @return <code>true</code> if the operation was successful and
+	 *         <code>false</code> otherwise
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public boolean print(GC gc) {
+		checkWidget();
+		if (gc == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (gc.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		// TODO
+		//		QPixmap pix;
+		//		pix.grabWidget(myMainWindowWidget);
+		//		QImage im = pix.convertToImage();
+		return false;
+	}
+
+	/**
+	 * Causes the entire bounds of the receiver to be marked as needing to be
+	 * redrawn. The next time a paint request is processed, the control will be
+	 * completely painted, including the background.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #update()
+	 * @see PaintListener
+	 * @see SWT#Paint
+	 * @see SWT#NO_BACKGROUND
+	 * @see SWT#NO_REDRAW_RESIZE
+	 * @see SWT#NO_MERGE_PAINTS
+	 * @see SWT#DOUBLE_BUFFERED
+	 */
+	public void redraw() {
+		checkWidget();
+		_redraw();
+	}
+
+	void _redraw() {
+		getQMasterWidget().update();
+		if (getQMasterWidget() != getQWidget()) {
+			getQWidget().update();
+		}
+		redrawChildren();
+	}
+
+	/**
+	 * Causes the rectangular area of the receiver specified by the arguments to
+	 * be marked as needing to be redrawn. The next time a paint request is
+	 * processed, that area of the receiver will be painted, including the
+	 * background. If the <code>all</code> flag is <code>true</code>, any
+	 * children of the receiver which intersect with the specified area will
+	 * also paint their intersecting areas. If the <code>all</code> flag is
+	 * <code>false</code>, the children will not be painted.
+	 * 
+	 * @param x
+	 *            the x coordinate of the area to draw
+	 * @param y
+	 *            the y coordinate of the area to draw
+	 * @param width
+	 *            the width of the area to draw
+	 * @param height
+	 *            the height of the area to draw
+	 * @param all
+	 *            <code>true</code> if children should redraw, and
+	 *            <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #update()
+	 * @see PaintListener
+	 * @see SWT#Paint
+	 * @see SWT#NO_BACKGROUND
+	 * @see SWT#NO_REDRAW_RESIZE
+	 * @see SWT#NO_MERGE_PAINTS
+	 * @see SWT#DOUBLE_BUFFERED
+	 */
+	public void redraw(int x, int y, int width, int height, boolean all) {
+		checkWidget();
+		getQMasterWidget().update(x, y, width, height);
+		if (getQMasterWidget() != getQWidget()) {
+			getQWidget().update(x, y, width, height);
+		}
+
+		if (all) {
+			redrawChildren();
+		}
+	}
+
+	void redrawChildren() {
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is moved or resized.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #addControlListener
+	 */
+	public void removeControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Move, listener);
+		eventTable.unhook(SWT.Resize, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when a drag gesture occurs.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DragDetectListener
+	 * @see #addDragDetectListener
+	 * 
+	 * @since 3.3
+	 */
+	public void removeDragDetectListener(DragDetectListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.DragDetect, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control gains or loses focus.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see FocusListener
+	 * @see #addFocusListener
+	 */
+	public void removeFocusListener(FocusListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.FocusIn, listener);
+		eventTable.unhook(SWT.FocusOut, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will
+	 * be notified when a gesture is performed on the control
+	 *
+	 * @param listener the listener which should no longer be notified
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 *
+	 * @see GestureListener
+	 * @see #addGestureListener
+	 * @since 3.7
+	 */
+	public void removeGestureListener (GestureListener listener) {
+		checkWidget();
+		if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+		if (eventTable == null) return;
+		eventTable.unhook(SWT.Gesture, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the help events are generated for the control.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see HelpListener
+	 * @see #addHelpListener
+	 */
+	public void removeHelpListener(HelpListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Help, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when keys are pressed and released on the system keyboard.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see KeyListener
+	 * @see #addKeyListener
+	 */
+	public void removeKeyListener(KeyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.KeyUp, listener);
+		eventTable.unhook(SWT.KeyDown, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the platform-specific context menu trigger has occurred.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MenuDetectListener
+	 * @see #addMenuDetectListener
+	 * 
+	 * @since 3.3
+	 */
+	public void removeMenuDetectListener(MenuDetectListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.MenuDetect, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the mouse passes or hovers over controls.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseTrackListener
+	 * @see #addMouseTrackListener
+	 */
+	public void removeMouseTrackListener(MouseTrackListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.MouseEnter, listener);
+		eventTable.unhook(SWT.MouseExit, listener);
+		eventTable.unhook(SWT.MouseHover, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when mouse buttons are pressed and released.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseListener
+	 * @see #addMouseListener
+	 */
+	public void removeMouseListener(MouseListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.MouseDown, listener);
+		eventTable.unhook(SWT.MouseUp, listener);
+		eventTable.unhook(SWT.MouseDoubleClick, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the mouse moves.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseMoveListener
+	 * @see #addMouseMoveListener
+	 */
+	public void removeMouseMoveListener(MouseMoveListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.MouseMove, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the mouse wheel is scrolled.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MouseWheelListener
+	 * @see #addMouseWheelListener
+	 * 
+	 * @since 3.3
+	 */
+	public void removeMouseWheelListener(MouseWheelListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.MouseWheel, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the receiver needs to be painted.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see PaintListener
+	 * @see #addPaintListener
+	 */
+	public void removePaintListener(PaintListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Paint, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will
+	 * be notified when touch events occur.
+	 *
+	 * @param listener the listener which should no longer be notified
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 *
+	 * @see TouchListener
+	 * @see #addTouchListener
+	 * @since 3.7
+	 */
+	public void removeTouchListener(TouchListener listener) {
+		checkWidget();
+		if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+		if (eventTable == null) return;
+		eventTable.unhook (SWT.Touch, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when traversal events occur.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see TraverseListener
+	 * @see #addTraverseListener
+	 */
+	public void removeTraverseListener(TraverseListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Traverse, listener);
+	}
+
+	void sendMove() {
+		sendEvent(SWT.Move);
+	}
+
+	void sendResize() {
+		sendEvent(SWT.Resize);
+	}
+
+	/**
+	 * Sets the receiver's background color to the color specified by the
+	 * argument, or to the default system color for the control if the argument
+	 * is null.
+	 * <p>
+	 * Note: This operation is a hint and may be overridden by the platform. For
+	 * example, on Windows the background of a Button cannot be changed.
+	 * </p>
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setBackground(Color color) {
+		checkWidget();
+		_setBackground(color);
+	}
+
+	void _setBackground(Color color) {
+		if (color != null) {
+			if (color.isDisposed()) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		if (color == null) {
+			background = getDefaultBackgroundColor();
+		} else {
+			background = color;
+		}
+		if (backgroundImage == null) {
+			updateBackgroundColor();
+		}
+	}
+
+	protected Color getDefaultBackgroundColor() {
+		return display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
+	}
+
+	/* refactored: was checkBackground */
+	protected void checkAndUpdateBackground() {
+		Shell shell = getShell();
+		if (this == shell) {
+			return;
+		}
+		state &= ~PARENT_BACKGROUND;
+		Composite composite = parent;
+		do {
+			int mode = composite.getBackgroundMode();
+			if (mode != 0) {
+				if (mode == SWT.INHERIT_DEFAULT) {
+					Control control = this;
+					do {
+						if ((control.state & THEME_BACKGROUND) == 0) {
+							return;
+						}
+						control = control.parent;
+					} while (control != composite);
+				}
+				state |= PARENT_BACKGROUND;
+				return;
+			}
+			if (composite == shell) {
+				break;
+			}
+			composite = composite.parent;
+		} while (true);
+	}
+
+	protected void updateBackground() {
+		if ((state & PARENT_BACKGROUND) == 0) {
+			return;
+		}
+		Control control = findBackgroundImageControl();
+		if (control == null) {
+			control = this;
+		}
+		if (control.backgroundImage != null) {
+			applyBackgroundImage(control.backgroundImage);
+			return;
+		}
+
+		control = findBackgroundColorControl();
+		if (control == null) {
+			control = this;
+		}
+		applyBackgroundColor(control.background != null ? control.background : control.getDefaultBackgroundColor());
+	}
+
+	Control findBackgroundControl() {
+		if (background != null || backgroundImage != null) {
+			return this;
+		}
+		return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundControl() : null;
+	}
+
+	protected void applyBackgroundColor(Color color) {
+		updatedPalette(color, getBackgroundColorRoles());
+	}
+
+	protected void updatedPalette(Color color, ColorRole[] colorRoles) {
+		QPalette palette = getQMasterWidget().palette();
+		for (ColorRole role : colorRoles) {
+			palette.setBrush(role, new QBrush(color.getColor()));
+		}
+		getQMasterWidget().setAutoFillBackground(true);
+		getQMasterWidget().setPalette(palette);
+	}
+
+	protected ColorRole[] getBackgroundColorRoles() {
+		return new ColorRole[] { ColorRole.Window, ColorRole.Base, ColorRole.Button };
+	}
+
+	protected ColorRole[] getBackgroundImageRoles() {
+		return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base };
+	}
+
+	/**
+	 * Sets the receiver's background image to the image specified by the
+	 * argument, or to the default system color for the control if the argument
+	 * is null. The background image is tiled to fill the available space.
+	 * <p>
+	 * Note: This operation is a hint and may be overridden by the platform. For
+	 * example, on Windows the background of a Button cannot be changed.
+	 * </p>
+	 * 
+	 * @param image
+	 *            the new image (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument is not a
+	 *                bitmap</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setBackgroundImage(Image image) {
+		checkWidget();
+		if (image != null) {
+			if (image.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (!image.isBitmap()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		if (image == null) {
+			backgroundImage = null;
+			updateBackgroundColor();
+		} else {
+			backgroundImage = image;
+			updateBackgroundImage();
+		}
+	}
+
+	void applyBackgroundImage(Image image) {
+		QPalette palette = getQMasterWidget().palette();
+		ColorRole[] bkRoles = getBackgroundImageRoles();
+		for (ColorRole bkRole : bkRoles) {
+			//				if (bgControl != this && canInheritBackgroundImage()) {
+			//					palette.setColor(bkRole, null);
+			//					// If background is inherited then brush is set to null
+			//					palette.setBrush(bkRole, null);
+			//				} else {
+			palette.setBrush(bkRole, new QBrush(image.getQPixmap()));
+			//				}
+		}
+		getQMasterWidget().setPalette(palette);
+		getQMasterWidget().setAutoFillBackground(true);
+	}
+
+	protected boolean canInheritBackgroundImage() {
+		return true;
+	}
+
+	/**
+	 * Sets the receiver's size and location to the rectangular area specified
+	 * by the arguments. The <code>x</code> and <code>y</code> arguments are
+	 * relative to the receiver's parent (or its display if its parent is null),
+	 * unless the receiver is a shell. In this case, the <code>x</code> and
+	 * <code>y</code> arguments are relative to the display.
+	 * <p>
+	 * Note: Attempting to set the width or height of the receiver to a negative
+	 * number will cause that value to be set to zero instead.
+	 * </p>
+	 * 
+	 * @param x
+	 *            the new x coordinate for the receiver
+	 * @param y
+	 *            the new y coordinate for the receiver
+	 * @param width
+	 *            the new width for the receiver
+	 * @param height
+	 *            the new height for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setBounds(int x, int y, int width, int height) {
+		checkWidget();
+		setBounds(x, y, width, height, true, true);
+	}
+
+	protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) {
+		if (resize) {
+			Point oldSize = QtSWTConverter.convert(getQMasterWidget().size());
+			if (oldSize.x != width || oldSize.y != height) {
+				getQMasterWidget().resize(width, height);
+				state |= RESIZE_OCCURRED;
+			}
+		}
+		if (move) {
+			Point oldPos = QtSWTConverter.convert(getQMasterWidget().pos());
+			if (oldPos.x != x || oldPos.y != y) {
+				getQMasterWidget().move(x, y);
+				state |= MOVE_OCCURRED;
+			}
+		}
+	}
+
+	/**
+	 * Sets the receiver's size and location to the rectangular area specified
+	 * by the argument. The <code>x</code> and <code>y</code> fields of the
+	 * rectangle are relative to the receiver's parent (or its display if its
+	 * parent is null).
+	 * <p>
+	 * Note: Attempting to set the width or height of the receiver to a negative
+	 * number will cause that value to be set to zero instead.
+	 * </p>
+	 * 
+	 * @param rect
+	 *            the new bounds for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setBounds(Rectangle rect) {
+		checkWidget();
+		if (rect == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setBounds(rect.x, rect.y, rect.width, rect.height, true, true);
+	}
+
+	/**
+	 * If the argument is <code>true</code>, causes the receiver to have all
+	 * mouse events delivered to it until the method is called with
+	 * <code>false</code> as the argument. Note that on some platforms, a mouse
+	 * button must currently be down for capture to be assigned.
+	 * 
+	 * @param capture
+	 *            <code>true</code> to capture the mouse, and <code>false</code>
+	 *            to release it
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setCapture(boolean capture) {
+		checkWidget();
+		if (capture) {
+			getQMasterWidget().grabMouse();
+		} else {
+			getQMasterWidget().releaseMouse();
+		}
+	}
+
+	/**
+	 * Sets the receiver's cursor to the cursor specified by the argument, or to
+	 * the default cursor for that kind of control if the argument is null.
+	 * <p>
+	 * When the mouse pointer passes over a control its appearance is changed to
+	 * match the control's cursor.
+	 * </p>
+	 * 
+	 * @param cursor
+	 *            the new cursor (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setCursor(Cursor cursor) {
+		checkWidget();
+		if (cursor != null && cursor.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.cursor = cursor;
+		if (cursor == null) {
+			getQMasterWidget().setCursor(null);
+		} else {
+			getQMasterWidget().setCursor(cursor.cursor);
+		}
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled and all ancestors up
+	 * to and including the receiver's nearest ancestor shell are enabled.
+	 * Otherwise, <code>false</code> is returned. A disabled control is
+	 * typically not selectable from the user interface and draws with an
+	 * inactive or "grayed" look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getEnabled
+	 */
+	public boolean isEnabled() {
+		checkWidget();
+		return getQMasterWidget().isEnabled();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled, and
+	 * <code>false</code> otherwise. A disabled control is typically not
+	 * selectable from the user interface and draws with an inactive or "grayed"
+	 * look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #isEnabled
+	 */
+	public boolean getEnabled() {
+		checkWidget();
+		return enabled;
+	}
+
+	/**
+	 * Enables the receiver if the argument is <code>true</code>, and disables
+	 * it otherwise. A disabled control is typically not selectable from the
+	 * user interface and draws with an inactive or "grayed" look.
+	 * 
+	 * @param enabled
+	 *            the new enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setEnabled(boolean enabled) {
+		checkWidget();
+		/*
+		 * Feature in Windows. If the receiver has focus, disabling the receiver
+		 * causes no window to have focus. The fix is to assign focus to the
+		 * first ancestor window that takes focus. If no window will take focus,
+		 * set focus to the desktop.
+		 */
+		Control control = null;
+		boolean fixFocus = false;
+		if (!enabled) {
+			if (display.focusEvent != SWT.FocusOut) {
+				control = display.getFocusControl();
+				fixFocus = isFocusAncestor(control);
+			}
+		}
+		enableWidget(enabled);
+		if (fixFocus) {
+			fixFocus(control);
+		}
+	}
+
+	void enableWidget(boolean enabled) {
+		this.enabled = enabled;
+		getQMasterWidget().setEnabled(enabled);
+	}
+
+	boolean setFixedFocus() {
+		if ((style & SWT.NO_FOCUS) != 0) {
+			return false;
+		}
+		return forceFocus(FocusReason.OtherFocusReason);
+	}
+
+	/**
+	 * Causes the receiver to have the <em>keyboard focus</em>, such that all
+	 * keyboard events will be delivered to it. Focus reassignment will respect
+	 * applicable platform constraints.
+	 * 
+	 * @return <code>true</code> if the control got focus, and
+	 *         <code>false</code> if it was unable to.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #forceFocus
+	 */
+	public boolean setFocus() {
+		checkWidget();
+		return setFocus(FocusReason.OtherFocusReason);
+	}
+
+	protected boolean setFocus(FocusReason focusReason) {
+		if ((style & SWT.NO_FOCUS) != 0) {
+			return false;
+		}
+		return forceFocus(focusReason);
+	}
+
+	/**
+	 * Sets the font that the receiver will use to paint textual information to
+	 * the font specified by the argument, or to the default font for that kind
+	 * of control if the argument is null.
+	 * 
+	 * @param font
+	 *            the new font (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setFont(Font font) {
+		checkWidget();
+		if (font != null && font.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.font = font;
+		if (font == null) {
+			getQMasterWidget().setFont(null);
+		} else {
+			getQMasterWidget().setFont(font.getQFont());
+		}
+	}
+
+	/**
+	 * Sets the receiver's foreground color to the color specified by the
+	 * argument, or to the default system color for the control if the argument
+	 * is null.
+	 * <p>
+	 * Note: This operation is a hint and may be overridden by the platform.
+	 * </p>
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setForeground(Color color) {
+		checkWidget();
+		Color oldColor = foreground;
+		if (color != null) {
+			if (color.isDisposed()) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		if (foreground == null && color == null) {
+			return;
+		}
+		if (color == null) {
+			foreground = null;
+		} else {
+			foreground = Color.qt_new(display, color.getColor());
+		}
+		if (oldColor != null) {
+			oldColor.dispose();
+		}
+		applyForegroundColor(foreground);
+	}
+
+	protected void updateForeground() {
+		if (foreground != null) {
+			applyForegroundColor(foreground);
+		}
+	}
+
+	void applyForegroundColor(Color color) {
+		updatedPalette(color, getForegroundColorRoles());
+	}
+
+	private ColorRole[] getForegroundColorRoles() {
+		return new ColorRole[] { QPalette.ColorRole.WindowText, QPalette.ColorRole.Text, QPalette.ColorRole.ButtonText };
+	}
+
+	/**
+	 * Sets the layout data associated with the receiver to the argument.
+	 * 
+	 * @param layoutData
+	 *            the new layout data for the receiver.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLayoutData(Object layoutData) {
+		checkWidget();
+		this.layoutData = layoutData;
+	}
+
+	/**
+	 * Sets the receiver's location to the point specified by the arguments
+	 * which are relative to the receiver's parent (or its display if its parent
+	 * is null), unless the receiver is a shell. In this case, the point is
+	 * relative to the display.
+	 * 
+	 * @param x
+	 *            the new x coordinate for the receiver
+	 * @param y
+	 *            the new y coordinate for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLocation(int x, int y) {
+		checkWidget();
+		setBounds(x, y, 0, 0, true, false);
+	}
+
+	/**
+	 * Sets the receiver's location to the point specified by the arguments
+	 * which are relative to the receiver's parent (or its display if its parent
+	 * is null), unless the receiver is a shell. In this case, the point is
+	 * relative to the display.
+	 * 
+	 * @param location
+	 *            the new location for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLocation(Point location) {
+		checkWidget();
+		if (location == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setLocation(location.x, location.y);
+	}
+
+	/**
+	 * Sets the receiver's pop up menu to the argument. All controls may
+	 * optionally have a pop up menu that is displayed when the user requests
+	 * one for the control. The sequence of key strokes, button presses and/or
+	 * button releases that are used to request a pop up menu is platform
+	 * specific.
+	 * <p>
+	 * Note: Disposing of a control that has a pop up menu will dispose of the
+	 * menu. To avoid this behavior, set the menu to null before the control is
+	 * disposed.
+	 * </p>
+	 * 
+	 * @param menu
+	 *            the new pop up menu
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_MENU_NOT_POP_UP - the menu is not a pop up menu</li>
+	 *                <li>ERROR_INVALID_PARENT - if the menu is not in the same
+	 *                widget tree</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMenu(Menu menu) {
+		checkWidget();
+		if (menu != null) {
+			if (menu.isDisposed()) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if ((menu.style & SWT.POP_UP) == 0) {
+				error(SWT.ERROR_MENU_NOT_POP_UP);
+			}
+			if (menu.parent != menuShell()) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		this.menu = menu;
+	}
+
+	boolean setRadioFocus(boolean tabbing) {
+		return false;
+	}
+
+	boolean setRadioSelection(boolean value) {
+		return false;
+	}
+
+	/**
+	 * If the argument is <code>false</code>, causes subsequent drawing
+	 * operations in the receiver to be ignored. No drawing of any kind can
+	 * occur in the receiver until the flag is set to true. Graphics operations
+	 * that occurred while the flag was <code>false</code> are lost. When the
+	 * flag is set to <code>true</code>, the entire widget is marked as needing
+	 * to be redrawn. Nested calls to this method are stacked.
+	 * <p>
+	 * Note: This operation is a hint and may not be supported on some platforms
+	 * or for some widgets.
+	 * </p>
+	 * 
+	 * @param redraw
+	 *            the new redraw state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #redraw(int, int, int, int, boolean)
+	 * @see #update()
+	 */
+	public void setRedraw(boolean redraw) {
+		checkWidget();
+		getQMasterWidget().setUpdatesEnabled(redraw);
+	}
+
+	/**
+	 * Sets the shape of the control to the region specified by the argument.
+	 * When the argument is null, the default shape of the control is restored.
+	 * 
+	 * @param region
+	 *            the region that defines the shape of the control (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the region has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setRegion(Region region) {
+		checkWidget();
+		if (region != null && region.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.region = region;
+		getQMasterWidget().setMask(QtSWTConverter.convert(region));
+	}
+
+	boolean setSavedFocus() {
+		return forceFocus();
+	}
+
+	/**
+	 * Sets the receiver's size to the point specified by the arguments.
+	 * <p>
+	 * Note: Attempting to set the width or height of the receiver to a negative
+	 * number will cause that value to be set to zero instead.
+	 * </p>
+	 * 
+	 * @param width
+	 *            the new width for the receiver
+	 * @param height
+	 *            the new height for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSize(int width, int height) {
+		checkWidget();
+		setBounds(0, 0, Math.max(0, width), Math.max(0, height), false, true);
+	}
+
+	/**
+	 * Sets the receiver's size to the point specified by the argument.
+	 * <p>
+	 * Note: Attempting to set the width or height of the receiver to a negative
+	 * number will cause them to be set to zero instead.
+	 * </p>
+	 * 
+	 * @param size
+	 *            the new size for the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSize(Point size) {
+		checkWidget();
+		if (size == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setSize(size.x, size.y);
+	}
+
+	boolean setTabGroupFocus() {
+		return setTabItemFocus();
+	}
+
+	boolean setTabItemFocus() {
+		if (!isShowing()) {
+			return false;
+		}
+		return forceFocus();
+	}
+
+	/**
+	 * Sets the receiver's tool tip text to the argument, which may be null
+	 * indicating that the default tool tip for the control will be shown. For a
+	 * control that has a default tool tip, such as the Tree control on Windows,
+	 * setting the tool tip text to an empty string replaces the default,
+	 * causing no tool tip text to be shown.
+	 * <p>
+	 * The mnemonic indicator (character '&') is not displayed in a tool
+	 * tip. To display a single '&' in the tool tip, the character '&'
+	 * can be escaped by doubling it in the string.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new tool tip text (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setToolTipText(String string) {
+		checkWidget();
+		getQMasterWidget().setToolTip(string);
+	}
+
+	/**
+	 * Returns a point which is the result of converting the argument, which is
+	 * specified in display relative coordinates, to coordinates relative to the
+	 * receiver.
+	 * <p>
+	 * 
+	 * @param x
+	 *            the x coordinate to be translated
+	 * @param y
+	 *            the y coordinate to be translated
+	 * @return the translated coordinates
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public Point toControl(int x, int y) {
+		checkWidget();
+		Point mappedPoint = QtSWTConverter.convert(getQMasterWidget().mapFromGlobal(new QPoint(x, y)));
+		if (isMirrored()) {
+			mappedPoint.x = getClientWidth() - mappedPoint.x;
+		}
+		return mappedPoint;
+	}
+
+	boolean isMirrored() {
+		return (style & SWT.MIRRORED) != 0;
+	}
+
+	/**
+	 * Returns a point which is the result of converting the argument, which is
+	 * specified in display relative coordinates, to coordinates relative to the
+	 * receiver.
+	 * <p>
+	 * 
+	 * @param point
+	 *            the point to be translated (must not be null)
+	 * @return the translated coordinates
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point toControl(Point point) {
+		checkWidget();
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return toControl(point.x, point.y);
+	}
+
+	/**
+	 * Returns a point which is the result of converting the argument, which is
+	 * specified in coordinates relative to the receiver, to display relative
+	 * coordinates.
+	 * <p>
+	 * 
+	 * @param x
+	 *            the x coordinate to be translated
+	 * @param y
+	 *            the y coordinate to be translated
+	 * @return the translated coordinates
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public Point toDisplay(int x, int y) {
+		checkWidget();
+		if (isMirrored()) {
+			x = getClientWidth() - x;
+		}
+		return QtSWTConverter.convert(getQMasterWidget().mapToGlobal(new QPoint(x, y)));
+	}
+
+	/**
+	 * Returns a point which is the result of converting the argument, which is
+	 * specified in coordinates relative to the receiver, to display relative
+	 * coordinates.
+	 * <p>
+	 * 
+	 * @param point
+	 *            the point to be translated (must not be null)
+	 * @return the translated coordinates
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point toDisplay(Point point) {
+		checkWidget();
+		System.out.println("toDisplay:" + point);
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return toDisplay(point.x, point.y);
+	}
+
+	boolean translateMnemonic(Event event, Control control) {
+		if (control == this) {
+			return false;
+		}
+		if (!isVisible() || !isEnabled()) {
+			return false;
+		}
+		event.doit = mnemonicMatch(event.character);
+		return traverse(event);
+	}
+
+	boolean traverse(Event event) {
+		/*
+		 * It is possible (but unlikely), that application code could have
+		 * disposed the widget in the traverse event. If this happens, return
+		 * true to stop further event processing.
+		 */
+		sendEvent(SWT.Traverse, event);
+		if (isDisposed()) {
+			return true;
+		}
+		if (!event.doit) {
+			return false;
+		}
+		switch (event.detail) {
+		case SWT.TRAVERSE_NONE:
+			return true;
+		case SWT.TRAVERSE_ESCAPE:
+			return traverseEscape();
+		case SWT.TRAVERSE_RETURN:
+			return traverseReturn();
+		case SWT.TRAVERSE_TAB_NEXT:
+			return traverseGroup(true);
+		case SWT.TRAVERSE_TAB_PREVIOUS:
+			return traverseGroup(false);
+		case SWT.TRAVERSE_ARROW_NEXT:
+			return traverseItem(true);
+		case SWT.TRAVERSE_ARROW_PREVIOUS:
+			return traverseItem(false);
+		case SWT.TRAVERSE_MNEMONIC:
+			return traverseMnemonic(event.character);
+		case SWT.TRAVERSE_PAGE_NEXT:
+			return traversePage(true);
+		case SWT.TRAVERSE_PAGE_PREVIOUS:
+			return traversePage(false);
+		}
+		return false;
+	}
+
+	/**
+	 * Based on the argument, perform one of the expected platform traversal
+	 * action. The argument should be one of the constants:
+	 * <code>SWT.TRAVERSE_ESCAPE</code>, <code>SWT.TRAVERSE_RETURN</code>,
+	 * <code>SWT.TRAVERSE_TAB_NEXT</code>,
+	 * <code>SWT.TRAVERSE_TAB_PREVIOUS</code>,
+	 * <code>SWT.TRAVERSE_ARROW_NEXT</code> and
+	 * <code>SWT.TRAVERSE_ARROW_PREVIOUS</code>.
+	 * 
+	 * @param traversal
+	 *            the type of traversal
+	 * @return true if the traversal succeeded
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean traverse(int traversal) {
+		checkWidget();
+		Event event = new Event();
+		event.doit = true;
+		event.detail = traversal;
+		return traverse(event);
+	}
+
+	boolean traverseEscape() {
+		return false;
+	}
+
+	boolean traverseGroup(boolean next) {
+		Control root = computeTabRoot();
+		Control group = computeTabGroup();
+		Control[] list = root.computeTabList();
+		int length = list.length;
+		int index = 0;
+		while (index < length) {
+			if (list[index] == group) {
+				break;
+			}
+			index++;
+		}
+		/*
+		 * It is possible (but unlikely), that application code could have
+		 * disposed the widget in focus in or out events. Ensure that a disposed
+		 * widget is not accessed.
+		 */
+		if (index == length) {
+			return false;
+		}
+		int start = index, offset = next ? 1 : -1;
+		while ((index = (index + offset + length) % length) != start) {
+			Control control = list[index];
+			if (!control.isDisposed() && control.setTabGroupFocus()) {
+				return true;
+			}
+		}
+		if (group.isDisposed()) {
+			return false;
+		}
+		return group.setTabGroupFocus();
+	}
+
+	boolean traverseItem(boolean next) {
+		Control[] children = parent._getChildren();
+		int length = children.length;
+		int index = 0;
+		while (index < length) {
+			if (children[index] == this) {
+				break;
+			}
+			index++;
+		}
+		/*
+		 * It is possible (but unlikely), that application code could have
+		 * disposed the widget in focus in or out events. Ensure that a disposed
+		 * widget is not accessed.
+		 */
+		if (index == length) {
+			return false;
+		}
+		int start = index, offset = next ? 1 : -1;
+		while ((index = (index + offset + length) % length) != start) {
+			Control child = children[index];
+			if (!child.isDisposed() && child.isTabItem()) {
+				if (child.setTabItemFocus()) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	boolean traverseMnemonic(char key) {
+		// TODO
+		//		if (mnemonicHit(key)) {
+		//			OS.SendMessage(handle, OS.WM_CHANGEUISTATE, OS.UIS_INITIALIZE, 0);
+		//			return true;
+		//		}
+		return false;
+	}
+
+	boolean traversePage(boolean next) {
+		return false;
+	}
+
+	boolean traverseReturn() {
+		return false;
+	}
+
+	/**
+	 * Forces all outstanding paint requests for the widget to be processed
+	 * before this method returns. If there are no outstanding paint request,
+	 * this method does nothing.
+	 * <p>
+	 * Note: This method does not cause a redraw.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #redraw()
+	 * @see #redraw(int, int, int, int, boolean)
+	 * @see PaintListener
+	 * @see SWT#Paint
+	 */
+	public void update() {
+		checkWidget();
+		_update();
+	}
+
+	void _update() {
+		QCoreApplication.processEvents(ProcessEventsFlag.ExcludeUserInputEvents);
+	}
+
+	void updateBackgroundColor() {
+		Control control = findBackgroundColorControl();
+		if (control == null) {
+			control = this;
+		}
+		applyBackgroundColor(control.background);
+	}
+
+	Control findBackgroundColorControl() {
+		if (background != null) {
+			return this;
+		}
+		if (parent == null) {
+			return null;
+		}
+		return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundColorControl() : null;
+	}
+
+	void updateBackgroundImage() {
+		Control control = findBackgroundImageControl();
+		if (control == null) {
+			control = this;
+		}
+		applyBackgroundImage(control.backgroundImage);
+	}
+
+	Control findBackgroundImageControl() {
+		if (backgroundImage != null) {
+			return this;
+		}
+		if (parent == null) {
+			return null;
+		}
+		return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundImageControl() : null;
+	}
+
+	void updateBackgroundMode() {
+		int oldState = state & PARENT_BACKGROUND;
+		checkAndUpdateBackground();
+		if (oldState != (state & PARENT_BACKGROUND)) {
+			updateBackground();
+		}
+	}
+
+	void updateFont(Font oldFont, Font newFont) {
+		if (getFont().equals(oldFont)) {
+			setFont(newFont);
+		}
+	}
+
+	void updateImages() {
+		/* Do nothing */
+	}
+
+	void updateLayout(boolean all) {
+		/* Do nothing */
+	}
+
+	/**
+	 * Changes the parent of the widget to be the one provided if the underlying
+	 * operating system supports this feature. Returns <code>true</code> if the
+	 * parent is successfully changed.
+	 * 
+	 * @param parent
+	 *            the new parent for the control.
+	 * @return <code>true</code> if the parent is changed and <code>false</code>
+	 *         otherwise.
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is
+	 *                <code>null</code></li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean setParent(Composite parent) {
+		checkWidget();
+		if (parent == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (parent.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (this.parent == parent) {
+			return true;
+		}
+		if (!isReparentable()) {
+			return false;
+		}
+		releaseParent();
+		Shell newShell = parent.getShell(), oldShell = getShell();
+		Decorations newDecorations = parent.menuShell(), oldDecorations = menuShell();
+		if (oldShell != newShell || oldDecorations != newDecorations) {
+			Menu[] menus = oldShell.findMenus(this);
+			fixChildren(newShell, oldShell, newDecorations, oldDecorations, menus);
+		}
+		getQMasterWidget().setParent(parent.getQWidget());
+		return true;
+	}
+
+	@Override
+	public boolean qtPaintEvent(QObject source, QPaintEvent paintEvent) {
+		if (source == getQWidget()) {
+			try {
+				isOngoingPaintEvent = true;
+				renderTemporaryGC(paintEvent.rect());
+				sendPaintEvent(paintEvent);
+			} finally {
+				isOngoingPaintEvent = false;
+			}
+		}
+		return false;
+	}
+
+	private void renderTemporaryGC(QRect rect) {
+		// Render the buffer created outside the paint event, if any
+		if (temporaryGC != null) {
+			//System.out.println("render tmp gc for " + this + " " + rect + " " + temporaryGC);
+			QPainter painter = new QPainter(getQWidget());
+			//painter.setClipRect(rect);
+			painter.drawPicture(0, 0, temporaryGC);
+			painter.end();
+			temporaryGC = null;
+		}
+	}
+
+	private void sendPaintEvent(QPaintEvent paintEvent) {
+		if (!hooks(SWT.Paint) && !filters(SWT.Paint)) {
+			return;
+		}
+
+		QRect rect = paintEvent.rect();
+		int x = rect.x();
+		int y = rect.y();
+		int width = rect.width();
+		int height = rect.height();
+		GCData data = new GCData();
+		initGCData(data);
+		GC gc = GC.qt_new(this, getQWidget(), data);
+		Event event = new Event();
+		event.count = 0;
+		if (isMirrored()) {
+			event.x = getClientWidth() - x - width;
+		} else {
+			event.x = x;
+		}
+		event.y = y;
+		event.width = width;
+		event.height = height;
+		event.gc = gc;
+		try {
+			gc.setClipping(x, y, width, height);
+			sendEvent(SWT.Paint, event);
+		} finally {
+			if (!gc.isDisposed()) {
+				gc.dispose();
+			}
+		}
+	}
+
+	@Override
+	public boolean qtResizeEvent(QObject source, QResizeEvent resizeEvent) {
+		if (source == getQWidget()) {
+			sendResize();
+		}
+		return super.qtResizeEvent(source, resizeEvent);
+	}
+
+	@Override
+	public boolean qtMoveEvent(QObject source, QMoveEvent moveEvent) {
+		//		if (source == getQMasterWidget()) {
+		//			sendMove();
+		//		}
+		return true;
+	}
+
+	@Override
+	public boolean qtKeyPressEvent(QObject source, QKeyEvent qEvent) {
+		// if ( ( ( state & NO_KEY_PROPAGATE ) != 0 ) ) {
+		// return true;
+		// }
+		if (source == getQWidget()) {
+			return sendKeyEvent(SWT.KeyDown, qEvent);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtKeyReleaseEvent(QObject source, QKeyEvent qEvent) {
+		if (source == getQWidget()) {
+			return sendKeyEvent(SWT.KeyUp, qEvent);
+		}
+		// if ( ( ( state & NO_KEY_PROPAGATE ) != 0 ) ) {
+		// return true;
+		// }
+		return false;
+	}
+
+	boolean sendKeyEvent(int type, QKeyEvent qEvent) {
+		Event event = translateKeyEvent(qEvent);
+		sendEvent(type, event);
+		if (isDisposed()) {
+			return true;
+		}
+		return !event.doit;
+	}
+
+	private final Event translateKeyEvent(QKeyEvent qEvent) {
+		Event event = new Event();
+		switch (Key.resolve(qEvent.key())) {
+		case Key_Enter:
+		case Key_Return:
+			event.character = SWT.CR;
+			break;
+		case Key_Backspace:
+			event.character = SWT.BS;
+			break;
+		case Key_Delete:
+			event.character = SWT.DEL;
+			break;
+		case Key_Escape:
+			event.character = SWT.ESC;
+			break;
+		case Key_Tab:
+			event.character = SWT.TAB;
+			break;
+		default:
+			String text = qEvent.text();
+			if (text != null && text.length() > 0) {
+				event.character = qEvent.text().charAt(0);
+			}
+			break;
+		}
+		event.keyCode = KeyUtil.translateKey(qEvent);
+		if (event.keyCode == 0) {// keyCode defaults to unicode value
+			String text = qEvent.text();
+			if (text != null && text.length() > 0) {
+				event.keyCode = qEvent.text().charAt(0);
+			}
+		}
+		event.stateMask = KeyUtil.translateModifiers(qEvent.modifiers());
+		return event;
+	}
+
+	protected boolean sendMouseEvent(int type, QMouseEvent mouseEvent) {
+		return sendMouseEvent(type, mouseEvent, 0);
+	}
+
+	protected boolean sendMouseEvent(int type, QMouseEvent mouseEvent, int count) {
+		Event event = translateMouseEvent(mouseEvent, count);
+		sendEvent(type, event);
+		if (isDisposed()) {
+			return true;
+		}
+		return !event.doit;
+	}
+
+	private Event translateMouseEvent(QMouseEvent mouseEvent, int count) {
+		Event event = new Event();
+		QPoint pos = mouseEvent.pos();
+		event.x = pos.x();
+		event.y = pos.y();
+		event.count = count;
+		event.button = translateMouseButton(mouseEvent.button());
+		event.stateMask = KeyUtil.translateModifiers(mouseEvent.modifiers())
+				| translateMouseButtons(mouseEvent.buttons());
+		event.stateMask &= ~event.button;
+
+		return event;
+	}
+
+	protected int translateMouseButton(MouseButton button) {
+		switch (button) {
+		case LeftButton:
+			return SWT.BUTTON1;
+		case MidButton:
+			return SWT.BUTTON2;
+		case RightButton:
+			return SWT.BUTTON1;
+		}
+		return 0;
+	}
+
+	private int translateMouseButtons(MouseButtons buttons) {
+		int mask = 0;
+		if (buttons.isSet(MouseButton.LeftButton)) {
+			mask |= SWT.BUTTON1;
+		}
+		if (buttons.isSet(MouseButton.MidButton)) {
+			mask |= SWT.BUTTON2;
+		}
+		if (buttons.isSet(MouseButton.RightButton)) {
+			mask |= SWT.BUTTON3;
+		}
+		return mask;
+	}
+
+	@Override
+	public boolean qtMouseMoveEvent(QObject source, QMouseEvent mouseEvent) {
+		if (source == getQWidget()) {
+			if (checkForDragging(mouseEvent)) {
+				System.out.println("dragging...");
+				sendDragEvent(SWT.BUTTON1, mouseEvent.pos().x(), mouseEvent.pos().y());
+				return true;
+			} else {
+				return sendMouseEvent(SWT.MouseMove, mouseEvent);
+			}
+		}
+		return false;
+	}
+
+	private boolean checkForDragging(QMouseEvent event) {
+		return dragStartPos != null && isDragDetectEnabled()
+				&& event.pos().subtract(dragStartPos).manhattanLength() >= QApplication.startDragDistance();
+	}
+
+	@Override
+	public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) {
+		if (source == getQWidget()) {
+			checkForDragStart(mouseEvent);
+			return sendMouseEvent(SWT.MouseDown, mouseEvent, 1);
+		}
+		return false;
+	}
+
+	private void checkForDragStart(QMouseEvent mouseEvent) {
+		if (isDragDetectEnabled() && mouseEvent.buttons().isSet(MouseButton.LeftButton)) {
+			dragStartPos = mouseEvent.pos();
+		}
+	}
+
+	@Override
+	public boolean qtMouseButtonReleaseEvent(QObject source, QMouseEvent mouseEvent) {
+		if (source == getQWidget()) {
+			dragStartPos = null;
+			return sendMouseEvent(SWT.MouseUp, mouseEvent, 1);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtMouseButtonDblClickEvent(QObject source, QMouseEvent mouseEvent) {
+		if (source == getQWidget()) {
+			//System.out.println("mouse dbl click on: " + this);
+			boolean doit = sendMouseEvent(SWT.MouseDown, mouseEvent, 2);
+			if (doit) {
+				return sendMouseEvent(SWT.MouseDoubleClick, mouseEvent, 2);
+			}
+		}
+		return false;
+	}
+
+	@Override
+	public void qtFocusInEvent(QObject source) {
+		if (source != getQMasterWidget()) {
+			return;
+		}
+		try {
+			display.focusEvent = SWT.FocusIn;
+			sendEvent(SWT.FocusIn);
+		} finally {
+			display.focusEvent = SWT.None;
+		}
+	}
+
+	@Override
+	public void qtFocusOutEvent(QObject source) {
+		if (source != getQMasterWidget()) {
+			return;
+		}
+		try {
+			display.focusEvent = SWT.FocusOut;
+			sendEvent(SWT.FocusOut);
+		} finally {
+			display.focusEvent = SWT.None;
+		}
+	}
+
+	protected boolean handleContextMenuEvent(QContextMenuEvent menuEvent) {
+		if (isDisposed()) {
+			return false;
+		}
+		Event event = new Event();
+		event.x = menuEvent.globalX();
+		event.y = menuEvent.globalY();
+		sendEvent(SWT.MenuDetect, event);
+
+		if (this.menu == null || menu.isDisposed()) {
+			return event.doit;
+		}
+		List<QAction> actions = getQWidget().actions();
+		if ((actions == null || actions.size() == 0) && menu == null) {
+			return false;
+		}
+
+		QMenu popUpMenu = menu.getQMenu();
+		popUpMenu.exec(menuEvent.globalPos());
+		return true;
+	}
+
+	@Override
+	public boolean qtContextMenuEvent(Object source, QContextMenuEvent event) {
+		if (source == getQWidget()) {
+			return handleContextMenuEvent(event);
+		}
+		return super.qtContextMenuEvent(source, event);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DateTime.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DateTime.java
new file mode 100644
index 0000000..be8ea74
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DateTime.java	
@@ -0,0 +1,806 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QDate;
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.QTime;
+import com.trolltech.qt.gui.QCalendarWidget;
+import com.trolltech.qt.gui.QDateTimeEdit;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of this class are selectable user interface objects that allow the
+ * user to enter and modify date or time values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>, it
+ * does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DATE, TIME, CALENDAR, SHORT, MEDIUM, LONG, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DATE, TIME, or CALENDAR may be specified, and
+ * only one of the styles SHORT, MEDIUM, or LONG may be specified. The DROP_DOWN
+ * style is only valid with the DATE style.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#datetime">DateTime
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * 
+ * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class DateTime extends Composite {
+	boolean doubleClick, ignoreSelection;
+	private QTime calendarTime;
+
+	/**
+	 * @return the time
+	 */
+	private QTime getCalendarTime() {
+		return calendarTime;
+	}
+
+	/**
+	 * @param time
+	 *            the time to set
+	 */
+	private void setCalendarTime(QTime time) {
+		this.calendarTime = time;
+	}
+
+	static final char SINGLE_QUOTE = '\'';// short date format may include quoted text
+	static final char DAY_FORMAT_CONSTANT = 'd';// 1-4 lowercase 'd's represent day
+	static final char MONTH_FORMAT_CONSTANT = 'M';// 1-4 uppercase 'M's represent month
+	static final char YEAR_FORMAT_CONSTANT = 'y';// 1-5 lowercase 'y's represent year
+	static final char HOURS_FORMAT_CONSTANT = 'h';// 1-2 upper or lowercase 'h's represent hours
+	static final char MINUTES_FORMAT_CONSTANT = 'm';// 1-2 lowercase 'm's represent minutes
+	static final char SECONDS_FORMAT_CONSTANT = 's';// 1-2 lowercase 's's represent seconds
+	static final char AMPM_FORMAT_CONSTANT = 't';// 1-2 lowercase 't's represent am/pm
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#DATE
+	 * @see SWT#TIME
+	 * @see SWT#CALENDAR
+	 * @see SWT#SHORT
+	 * @see SWT#MEDIUM
+	 * @see SWT#LONG
+	 * @see SWT#DROP_DOWN
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+
+	public DateTime(Composite parent, int style) {
+		super(parent, checkStyle(style));
+		setDateToToday();
+		setTimeToNow();
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state &= ~(CANVAS | THEME_BACKGROUND);
+		QWidget calendar = new QWidget();
+		boolean isCalendarWidget = false;
+		boolean isTimeEdit = false;
+		if ((style & SWT.CALENDAR) != 0) {
+			calendar = new QCalendarWidget();
+			isCalendarWidget = true;
+			((QCalendarWidget) calendar).setSelectedDate(QDate.currentDate());
+			connectSignals(calendar, isCalendarWidget);
+		} else if ((style & SWT.TIME) != 0) {
+			isTimeEdit = true;
+			/* Need to set time twice to get the right widget *with* time. */
+			calendar = new QDateTimeEdit(QTime.currentTime());
+			((QDateTimeEdit) calendar).setDate(QDate.currentDate());
+			((QDateTimeEdit) calendar).setTime(QTime.currentTime());
+		} else if ((style & SWT.ARROW) != 0 || (style & SWT.DROP_DOWN) != 0) {
+			calendar = new QDateTimeEdit(QDate.currentDate());
+			((QDateTimeEdit) calendar).setCalendarPopup(true);
+			((QDateTimeEdit) calendar).setDate(QDate.currentDate());
+			((QDateTimeEdit) calendar).setTime(QTime.currentTime());
+		} else /* default is a QDateEdit */{
+			calendar = new QDateTimeEdit(QDate.currentDate());
+			((QDateTimeEdit) calendar).setTime(QTime.currentTime());
+			((QDateTimeEdit) calendar).setDate(QDate.currentDate());
+		}
+		if (!isCalendarWidget) {
+			connectSignals(calendar, isCalendarWidget);
+			if ((style & SWT.SHORT) != 0) {
+				if (isTimeEdit) {
+					((QDateTimeEdit) calendar).setDisplayFormat(getShortTimeFormat());
+				} else {
+					((QDateTimeEdit) calendar).setDisplayFormat(getShortDateFormat());
+				}
+				/*
+				 * when DisplayFormat is set I need to set the time *again* for
+				 * some strange reasons
+				 */
+				((QDateTimeEdit) calendar).setTime(QTime.currentTime());
+			} else if ((style & SWT.LONG) != 0) {
+				((QDateTimeEdit) calendar).setDisplayFormat(getLongDateFormat());
+				((QDateTimeEdit) calendar).setTime(QTime.currentTime());
+			}
+		}
+
+		return calendar;
+	}
+
+	private void connectSignals(QWidget calendar, boolean isCalendarWidget) {
+		if (isCalendarWidget) {
+			((QCalendarWidget) calendar).clicked.connect(this, "clicked()"); //$NON-NLS-1$
+			((QCalendarWidget) calendar).selectionChanged.connect(this, "clicked()"); //$NON-NLS-1$
+		} else {
+			/* some missing events */
+			//((QDateTimeEdit) calendar).dateChanged.connect(this, "dateChanged()"); //$NON-NLS-1$
+			//			((QDateTimeEdit) calendar).dateTimeChanged.connect(this, "dateTimeChanged()"); //$NON-NLS-1$
+			//			((QDateTimeEdit) calendar).timeChanged.connect(this, "timeChanged()"); //$NON-NLS-1$
+			//			((QDateTimeEdit) calendar).editingFinished.connect(this, "editingFinished"); //$NON-NLS-1$
+
+		}
+	}
+
+	protected void clicked() {
+		Event event = new Event();
+		sendEvent(SWT.Selection, event);
+	}
+
+	/**
+	 * sets the date to now
+	 */
+	private void setDateToToday() {
+		QDate date = QDate.currentDate();
+		setQtDate(date);
+	}
+
+	/**
+	 * sets the date to now
+	 */
+	private void setTimeToNow() {
+		setQtTime(QTime.currentTime());
+		setCalendarTime(new QTime(0, 0, 0));
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the user changes the control's
+	 * value. <code>widgetDefaultSelected</code> is typically called when ENTER
+	 * is pressed.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		/*
+		 * Even though it is legal to create this widget with scroll bars, they
+		 * serve no useful purpose because they do not automatically scroll the
+		 * widget's client area. The fix is to clear the SWT style.
+		 */
+		style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+		style = checkBits(style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+		style = checkBits(style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+		if ((style & SWT.DATE) == 0) {
+			style &= ~SWT.DROP_DOWN;
+		}
+		return style;
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		QWidget calendar = getQWidget();
+		QSize size = calendar.sizeHint();
+		return new Point(size.width(), size.height());
+	}
+
+	String getComputeSizeString() {
+		// TODO: Not currently used but might need for WinCE
+		if ((style & SWT.DATE) != 0) {
+			if ((style & SWT.SHORT) != 0) {
+				return getCustomShortDateFormat();
+			}
+			if ((style & SWT.MEDIUM) != 0) {
+				return getShortDateFormat();
+			}
+			if ((style & SWT.LONG) != 0) {
+				return getLongDateFormat();
+			}
+		}
+		if ((style & SWT.TIME) != 0) {
+			if ((style & SWT.SHORT) != 0) {
+				return getCustomShortTimeFormat();
+			}
+			return getTimeFormat();
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+	String getCustomShortDateFormat() {
+		// TODO
+		return "M/yyyy"; //$NON-NLS-1$
+
+	}
+
+	String getCustomShortTimeFormat() {
+		StringBuffer buffer = new StringBuffer(getTimeFormat());
+		int length = buffer.length();
+		boolean inQuotes = false;
+		int start = 0, end = 0;
+		while (start < length) {
+			char ch = buffer.charAt(start);
+			if (ch == SINGLE_QUOTE) {
+				inQuotes = !inQuotes;
+			} else if (ch == SECONDS_FORMAT_CONSTANT && !inQuotes) {
+				end = start + 1;
+				while (end < length && buffer.charAt(end) == SECONDS_FORMAT_CONSTANT) {
+					end++;
+				}
+				// skip the preceding separator
+				while (start > 0 && buffer.charAt(start) != MINUTES_FORMAT_CONSTANT) {
+					start--;
+				}
+				start++;
+				break;
+			}
+			start++;
+		}
+		if (start < end) {
+			buffer.delete(start, end);
+		}
+		return buffer.toString();
+	}
+
+	String getLongDateFormat() {
+		return "dddd, d. MMMM  yyyy"; //$NON-NLS-1$
+	}
+
+	String getShortDateFormat() {
+		return "MMMM yyyy"; //$NON-NLS-1$
+	}
+
+	String getShortTimeFormat() {
+		return "hh:mm"; //$NON-NLS-1$
+	}
+
+	int getShortDateFormatOrdering() {
+		// TODO
+		return 0;
+	}
+
+	String getTimeFormat() {
+		// TODO
+		return "h:mm:ss tt"; //$NON-NLS-1$
+	}
+
+	boolean is24HourTime() {
+		// TODO 
+		return true;
+	}
+
+	/**
+	 * Returns the receiver's date, or day of the month.
+	 * <p>
+	 * The first day of the month is 1, and the last day depends on the month
+	 * and year.
+	 * </p>
+	 * 
+	 * @return a positive integer beginning with 1
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getDay() {
+		checkWidget();
+		if (getQWidget() instanceof QCalendarWidget) {
+			return ((QCalendarWidget) getQWidget()).selectedDate().day();
+		}
+		return ((QDateTimeEdit) getQWidget()).date().day();
+
+	}
+
+	/**
+	 * Returns the receiver's hours.
+	 * <p>
+	 * Hours is an integer between 0 and 23.
+	 * </p>
+	 * 
+	 * @return an integer between 0 and 23
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getHours() {
+		checkWidget();
+		if (getQWidget() instanceof QCalendarWidget) {
+			return getCalendarTime().hour();
+		}
+		return ((QDateTimeEdit) getQWidget()).time().hour();
+
+	}
+
+	/**
+	 * Returns the receiver's minutes.
+	 * <p>
+	 * Minutes is an integer between 0 and 59.
+	 * </p>
+	 * 
+	 * @return an integer between 0 and 59
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMinutes() {
+		checkWidget();
+		if (getQWidget() instanceof QCalendarWidget) {
+			return getCalendarTime().minute();
+		}
+		return ((QDateTimeEdit) getQWidget()).time().minute();
+
+	}
+
+	/**
+	 * Returns the receiver's month.
+	 * <p>
+	 * The first month of the year is 0, and the last month is 11.
+	 * </p>
+	 * 
+	 * @return an integer between 0 and 11
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMonth() {
+		checkWidget();
+
+		QDate date = getQtDate();
+		return date.month() - 1;
+	}
+
+	@Override
+	String getNameText() {
+		return (style & SWT.TIME) != 0 ? getHours() + ":" + getMinutes() + ":" + getSeconds() : getMonth() + "/" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				+ getDay() + "/" + getYear(); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the receiver's seconds.
+	 * <p>
+	 * Seconds is an integer between 0 and 59.
+	 * </p>
+	 * 
+	 * @return an integer between 0 and 59
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSeconds() {
+		checkWidget();
+		if (getQWidget() instanceof QCalendarWidget) {
+			return getCalendarTime().second();
+		}
+		return ((QDateTimeEdit) getQWidget()).time().second();
+	}
+
+	/**
+	 * Returns the receiver's year.
+	 * <p>
+	 * The first year is 1752 and the last year is 9999.
+	 * </p>
+	 * 
+	 * @return an integer between 1752 and 9999
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getYear() {
+		checkWidget();
+		if (getQWidget() instanceof QCalendarWidget) {
+			return ((QCalendarWidget) getQWidget()).selectedDate().year();
+		}
+		return ((QDateTimeEdit) getQWidget()).date().year();
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		//		lastSystemTime = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Sets the receiver's year, month, and day in a single operation.
+	 * <p>
+	 * This is the recommended way to set the date, because setting the year,
+	 * month, and day separately may result in invalid intermediate dates.
+	 * </p>
+	 * 
+	 * @param year
+	 *            an integer between 1752 and 9999
+	 * @param month
+	 *            an integer between 0 and 11
+	 * @param day
+	 *            a positive integer beginning with 1
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setDate(int year, int month, int day) {
+		checkWidget();
+		QDate date = new QDate(year, month + 1, day);
+		if (getQWidget() instanceof QCalendarWidget) {
+			((QCalendarWidget) getQWidget()).setSelectedDate(date);
+		} else {
+			((QDateTimeEdit) getQWidget()).setDate(date);
+		}
+	}
+
+	/**
+	 * Sets the receiver's date, or day of the month, to the specified day.
+	 * <p>
+	 * The first day of the month is 1, and the last day depends on the month
+	 * and year. If the specified day is not valid for the receiver's month and
+	 * year, then it is ignored.
+	 * </p>
+	 * 
+	 * @param day
+	 *            a positive integer beginning with 1
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setDate
+	 */
+	public void setDay(int day) {
+		checkWidget();
+		QDate date = getQtDate();
+		date.setDate(date.year(), date.month(), day);
+		setQtDate(date);
+	}
+
+	private QDate getQtDate() {
+		if (getQWidget() instanceof QCalendarWidget) {
+			return ((QCalendarWidget) getQWidget()).selectedDate();
+		}
+		return ((QDateTimeEdit) getQWidget()).date();
+	}
+
+	private QTime getQtTime() {
+		if (getQWidget() instanceof QCalendarWidget) {
+			return getCalendarTime();
+		}
+		return ((QDateTimeEdit) getQWidget()).time();
+	}
+
+	private void setQtDate(final QDate date) {
+		if (getQWidget() instanceof QCalendarWidget) {
+			((QCalendarWidget) getQWidget()).setSelectedDate(date);
+		} else {
+			((QDateTimeEdit) getQWidget()).setDate(date);
+		}
+	}
+
+	private void setQtTime(final QTime time) {
+		if (getQWidget() instanceof QCalendarWidget) {
+			setCalendarTime(time);
+		} else {
+			((QDateTimeEdit) getQWidget()).setTime(time);
+		}
+	}
+
+	/**
+	 * Sets the receiver's hours.
+	 * <p>
+	 * Hours is an integer between 0 and 23.
+	 * </p>
+	 * 
+	 * @param hours
+	 *            an integer between 0 and 23
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setHours(int hours) {
+		checkWidget();
+		QTime time = new QTime(hours, getQtTime().minute(), getQtTime().second());
+		setQtTime(time);
+	}
+
+	/**
+	 * Sets the receiver's minutes.
+	 * <p>
+	 * Minutes is an integer between 0 and 59.
+	 * </p>
+	 * 
+	 * @param minutes
+	 *            an integer between 0 and 59
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMinutes(int minutes) {
+		checkWidget();
+		QTime time = new QTime(getQtTime().hour(), minutes, getQtTime().second());
+		setQtTime(time);
+	}
+
+	/**
+	 * Sets the receiver's month.
+	 * <p>
+	 * The first month of the year is 0, and the last month is 11. If the
+	 * specified month is not valid for the receiver's day and year, then it is
+	 * ignored.
+	 * </p>
+	 * 
+	 * @param month
+	 *            an integer between 0 and 11
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setDate
+	 */
+	public void setMonth(final int month) {
+		checkWidget();
+
+		QDate date = getQtDate();
+		date.setDate(date.year(), month + 1, date.day());
+		setQtDate(date);
+	}
+
+	/**
+	 * Sets the receiver's seconds.
+	 * <p>
+	 * Seconds is an integer between 0 and 59.
+	 * </p>
+	 * 
+	 * @param seconds
+	 *            an integer between 0 and 59
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSeconds(int seconds) {
+		checkWidget();
+		QTime time = new QTime(getQtTime().hour(), getQtTime().minute(), seconds);
+		setQtTime(time);
+
+	}
+
+	/**
+	 * Sets the receiver's hours, minutes, and seconds in a single operation.
+	 * 
+	 * @param hours
+	 *            an integer between 0 and 23
+	 * @param minutes
+	 *            an integer between 0 and 59
+	 * @param seconds
+	 *            an integer between 0 and 59
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setTime(int hours, int minutes, int seconds) {
+		checkWidget();
+		setQtTime(new QTime(hours, minutes, seconds));
+	}
+
+	/**
+	 * Sets the receiver's year.
+	 * <p>
+	 * The first year is 1752 and the last year is 9999. If the specified year
+	 * is not valid for the receiver's day and month, then it is ignored.
+	 * </p>
+	 * 
+	 * @param year
+	 *            an integer between 1752 and 9999
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setDate
+	 */
+	public void setYear(int year) {
+		checkWidget();
+		QDate date = new QDate(year, getQtDate().month(), getQtDate().day());
+		setQtDate(date);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java
new file mode 100644
index 0000000..ecc78ea
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java	
@@ -0,0 +1,1218 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.core.Qt.WindowState;
+import com.trolltech.qt.core.Qt.WindowStates;
+import com.trolltech.qt.gui.QLayout;
+import com.trolltech.qt.gui.QMainWindow;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class provide the appearance and behavior of
+ * <code>Shells</code>, but are not top level shells or dialogs. Class
+ * <code>Shell</code> shares a significant amount of code with this class, and
+ * is a subclass.
+ * <p>
+ * IMPORTANT: This class was intended to be abstract and should <em>never</em>
+ * be referenced or instantiated. Instead, the class <code>Shell</code> should
+ * be used.
+ * </p>
+ * <p>
+ * Instances are always displayed in one of the maximized, minimized or normal
+ * states:
+ * <ul>
+ * <li>
+ * When an instance is marked as <em>maximized</em>, the window manager will
+ * typically resize it to fill the entire visible area of the display, and the
+ * instance is usually put in a state where it can not be resized (even if it
+ * has style <code>RESIZE</code>) until it is no longer maximized.</li>
+ * <li>
+ * When an instance is in the <em>normal</em> state (neither maximized or
+ * minimized), its appearance is controlled by the style constants which were
+ * specified when it was created and the restrictions of the window manager (see
+ * below).</li>
+ * <li>
+ * When an instance has been marked as <em>minimized</em>, its contents (client
+ * area) will usually not be visible, and depending on the window manager, it
+ * may be "iconified" (that is, replaced on the desktop by a small simplified
+ * representation of itself), relocated to a distinguished area of the screen,
+ * or hidden. Combinations of these changes are also possible.</li>
+ * </ul>
+ * </p>
+ * Note: The styles supported by this class must be treated as <em>HINT</em>s,
+ * since the window manager for the desktop on which the instance is visible has
+ * ultimate control over the appearance and behavior of decorations. For
+ * example, some window managers only support resizable windows and will always
+ * assume the RESIZE style, even if it is not set.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * Class <code>SWT</code> provides two "convenience constants" for the most
+ * commonly required style combinations:
+ * <dl>
+ * <dt><code>SHELL_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required to produce a typical
+ * application top level shell: (that is,
+ * <code>CLOSE | TITLE | MIN | MAX | RESIZE</code>)</dd>
+ * <dt><code>DIALOG_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required to produce a typical
+ * application dialog shell: (that is, <code>TITLE | CLOSE | BORDER</code>)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see #getMinimized
+ * @see #getMaximized
+ * @see Shell
+ * @see SWT
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Decorations extends Canvas {
+	private static final int WIDGETSIZE_MAX = 16777215;
+	Image image, smallImage, largeImage;
+	Image[] images;
+	Menu menuBar;
+	Menu[] menus;
+	Control savedFocus;
+	Button defaultButton, saveDefault;
+	int swFlags, nAccel;
+	boolean moved, resized, opened;
+	private int restoreState;
+	private Point fixedSize;
+	static int topTitleFrame = -1;
+	static int leftTitleFrame = -1;
+	static int rightTitleFrame = -1;
+	static int bottomTitleFrame = -1;
+	static int topThinFrame = -1;
+	static int leftThinFrame = -1;
+	static int rightThinFrame = -1;
+	static int bottomThinFrame = -1;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Decorations() {
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#BORDER
+	 * @see SWT#CLOSE
+	 * @see SWT#MIN
+	 * @see SWT#MAX
+	 * @see SWT#RESIZE
+	 * @see SWT#TITLE
+	 * @see SWT#NO_TRIM
+	 * @see SWT#SHELL_TRIM
+	 * @see SWT#DIALOG_TRIM
+	 * @see SWT#ON_TOP
+	 * @see SWT#TOOL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Decorations(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	protected QWidget getWindowControl() {
+		return getQWidget();
+	}
+
+	QWidget getMenuContainer() {
+		return getWindowControl();
+	}
+
+	void addMenu(Menu menu) {
+		if (menus == null) {
+			menus = new Menu[4];
+		}
+		for (int i = 0; i < menus.length; i++) {
+			if (menus[i] == null) {
+				menus[i] = menu;
+				return;
+			}
+		}
+		Menu[] newMenus = new Menu[menus.length + 4];
+		newMenus[menus.length] = menu;
+		System.arraycopy(menus, 0, newMenus, 0, menus.length);
+		menus = newMenus;
+	}
+
+	void bringToTop() {
+		if (isDisposed()) {
+			return;
+		}
+		getWindowControl().activateWindow();
+		getWindowControl().raise();
+	}
+
+	static int checkStyle(int style) {
+		if ((style & SWT.NO_TRIM) != 0) {
+			style &= ~(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.BORDER);
+		}
+		if ((style & (SWT.MENU | SWT.MIN | SWT.MAX | SWT.CLOSE)) != 0) {
+			style |= SWT.TITLE;
+		}
+
+		/*
+		 * If either WS_MINIMIZEBOX or WS_MAXIMIZEBOX are set, we must also set
+		 * WS_SYSMENU or the buttons will not appear.
+		 */
+		if ((style & (SWT.MIN | SWT.MAX)) != 0) {
+			style |= SWT.CLOSE;
+		}
+
+		/*
+		 * Both WS_SYSMENU and WS_CAPTION must be set in order to for the system
+		 * menu to appear.
+		 */
+		if ((style & SWT.CLOSE) != 0) {
+			style |= SWT.TITLE;
+		}
+
+		/*
+		 * Bug in Windows. The WS_CAPTION style must be set when the window is
+		 * resizable or it does not draw properly.
+		 */
+		/*
+		 * This code is intentionally commented. It seems that this problem
+		 * originally in Windows 3.11, has been fixed in later versions. Because
+		 * the exact nature of the drawing problem is unknown, keep the
+		 * commented code around in case it comes back.
+		 */
+		// if ((style & SWT.RESIZE) != 0) style |= SWT.TITLE;
+
+		return style;
+	}
+
+	@Override
+	protected void checkAndUpdateBorder() {
+		/* Do nothing */
+	}
+
+	@Override
+	void checkOpened() {
+		if (!opened) {
+			resized = false;
+		}
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	boolean closeWidget() {
+		Event event = new Event();
+		event.doit = true;
+		sendEvent(SWT.Close, event);
+		if (event.doit && !isDisposed()) {
+			dispose();
+		}
+		if (isDisposed()) {
+			return false;
+		}
+		return !event.doit;
+	}
+
+	int compare(ImageData data1, ImageData data2, int width, int height, int depth) {
+		int value1 = Math.abs(data1.width - width), value2 = Math.abs(data2.width - width);
+		if (value1 == value2) {
+			int transparent1 = data1.getTransparencyType();
+			int transparent2 = data2.getTransparencyType();
+			if (transparent1 == transparent2) {
+				if (data1.depth == data2.depth) {
+					return 0;
+				}
+				return data1.depth > data2.depth && data1.depth <= depth ? -1 : 1;
+			}
+			if (transparent1 == SWT.TRANSPARENCY_ALPHA) {
+				return -1;
+			}
+			if (transparent2 == SWT.TRANSPARENCY_ALPHA) {
+				return 1;
+			}
+			if (transparent1 == SWT.TRANSPARENCY_MASK) {
+				return -1;
+			}
+			if (transparent2 == SWT.TRANSPARENCY_MASK) {
+				return 1;
+			}
+			if (transparent1 == SWT.TRANSPARENCY_PIXEL) {
+				return -1;
+			}
+			if (transparent2 == SWT.TRANSPARENCY_PIXEL) {
+				return 1;
+			}
+			return 0;
+		}
+		return value1 < value2 ? -1 : 1;
+	}
+
+	@Override
+	Control computeTabGroup() {
+		return this;
+	}
+
+	@Override
+	Control computeTabRoot() {
+		return this;
+	}
+
+	@Override
+	public Rectangle computeTrim(int x, int y, int width, int height) {
+		checkWidget();
+
+		Rectangle trim = new Rectangle(x, y, width, height);
+
+		QRect outer = getQWidget().frameGeometry();
+		QRect inner = getQWidget().geometry();
+
+		int leftTrim, rightTrim;
+		leftTrim = rightTrim = outer.x() - inner.x();
+		int topTrim = inner.y() - outer.y();
+		int bottomTrim = outer.y() - inner.y();
+
+		trim.x -= leftTrim;
+		trim.width += leftTrim + rightTrim;
+		trim.y -= topTrim;
+		trim.height += topTrim + bottomTrim;
+
+		return trim;
+	}
+
+	@Override
+	public void dispose() {
+		if (isDisposed()) {
+			return;
+		}
+		if (!isValidThread()) {
+			error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		if (!(this instanceof Shell)) {
+			if (!traverseDecorations(true)) {
+				Shell shell = getShell();
+				shell.setFocus();
+			}
+			setVisible(false);
+		}
+		super.dispose();
+	}
+
+	void fixDecorations(Decorations newDecorations, Control control, Menu[] menus) {
+		if (this == newDecorations) {
+			return;
+		}
+		if (control == savedFocus) {
+			savedFocus = null;
+		}
+		if (control == defaultButton) {
+			defaultButton = null;
+		}
+		if (control == saveDefault) {
+			saveDefault = null;
+		}
+		if (menus == null) {
+			return;
+		}
+		Menu menu = control.getMenu();
+		if (menu != null) {
+			int index = 0;
+			while (index < menus.length) {
+				if (menus[index] == menu) {
+					control.setMenu(null);
+					return;
+				}
+				index++;
+			}
+			menu.fixMenus(newDecorations);
+		}
+	}
+
+	/**
+	 * Returns the receiver's default button if one had previously been set,
+	 * otherwise returns null.
+	 * 
+	 * @return the default button or null
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setDefaultButton(Button)
+	 */
+	public Button getDefaultButton() {
+		checkWidget();
+		return defaultButton;
+	}
+
+	/**
+	 * Returns the receiver's image if it had previously been set using
+	 * <code>setImage()</code>. The image is typically displayed by the window
+	 * manager when the instance is marked as iconified, and may also be
+	 * displayed somewhere in the trim when the instance is in normal or
+	 * maximized states.
+	 * <p>
+	 * Note: This method will return null if called before
+	 * <code>setImage()</code> is called. It does not provide access to a window
+	 * manager provided, "default" image even if one exists.
+	 * </p>
+	 * 
+	 * @return the image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Image getImage() {
+		checkWidget();
+		return image;
+	}
+
+	/**
+	 * Returns the receiver's images if they had previously been set using
+	 * <code>setImages()</code>. Images are typically displayed by the window
+	 * manager when the instance is marked as iconified, and may also be
+	 * displayed somewhere in the trim when the instance is in normal or
+	 * maximized states. Depending where the icon is displayed, the platform
+	 * chooses the icon with the "best" attributes. It is expected that the
+	 * array will contain the same icon rendered at different sizes, with
+	 * different depth and transparency attributes.
+	 * 
+	 * <p>
+	 * Note: This method will return an empty array if called before
+	 * <code>setImages()</code> is called. It does not provide access to a
+	 * window manager provided, "default" image even if one exists.
+	 * </p>
+	 * 
+	 * @return the images
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Image[] getImages() {
+		checkWidget();
+		if (images == null) {
+			return new Image[0];
+		}
+		Image[] result = new Image[images.length];
+		System.arraycopy(images, 0, result, 0, images.length);
+		return result;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is currently maximized, and
+	 * false otherwise.
+	 * <p>
+	 * 
+	 * @return the maximized state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setMaximized
+	 */
+	public boolean getMaximized() {
+		checkWidget();
+		return getWindowControl().isMaximized();
+	}
+
+	/**
+	 * Returns the receiver's menu bar if one had previously been set, otherwise
+	 * returns null.
+	 * 
+	 * @return the menu bar or null
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Menu getMenuBar() {
+		checkWidget();
+		return menuBar;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is currently minimized, and
+	 * false otherwise.
+	 * <p>
+	 * 
+	 * @return the minimized state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setMinimized
+	 */
+	public boolean getMinimized() {
+		checkWidget();
+		return getWindowControl().isMinimized();
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Returns the receiver's text, which is the string that the window manager
+	 * will typically display as the receiver's <em>title</em>. If the text has
+	 * not previously been set, returns an empty string.
+	 * 
+	 * @return the text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		return getWindowControl().windowTitle();
+	}
+
+	@Override
+	public boolean qtCloseEvent() {
+		if (isEnabled()) {
+			closeWidget();
+		}
+		return true;
+	}
+
+	@Override
+	public boolean isReparentable() {
+		checkWidget();
+		/*
+		 * Feature in Windows. Calling SetParent() for a shell causes a kind of
+		 * fake MDI to happen. It doesn't work well on Windows and is not
+		 * supported on the other platforms. The fix is to disallow the
+		 * SetParent().
+		 */
+		return false;
+	}
+
+	@Override
+	boolean isTabGroup() {
+		/*
+		 * Can't test WS_TAB bits because they are the same as WS_MAXIMIZEBOX.
+		 */
+		return true;
+	}
+
+	@Override
+	boolean isTabItem() {
+		/*
+		 * Can't test WS_TAB bits because they are the same as WS_MAXIMIZEBOX.
+		 */
+		return false;
+	}
+
+	@Override
+	Decorations menuShell() {
+		return this;
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		if (menuBar != null) {
+			menuBar.release(false);
+			menuBar = null;
+		}
+		super.releaseChildren(destroy);
+		if (menus != null) {
+			for (int i = 0; i < menus.length; i++) {
+				Menu menu = menus[i];
+				if (menu != null && !menu.isDisposed()) {
+					menu.dispose();
+				}
+			}
+			menus = null;
+		}
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		if (smallImage != null) {
+			smallImage.dispose();
+		}
+		if (largeImage != null) {
+			largeImage.dispose();
+		}
+		smallImage = largeImage = image = null;
+		images = null;
+		savedFocus = null;
+		defaultButton = saveDefault = null;
+	}
+
+	void removeMenu(Menu menu) {
+		if (menus == null) {
+			return;
+		}
+		for (int i = 0; i < menus.length; i++) {
+			if (menus[i] == menu) {
+				menus[i] = null;
+				return;
+			}
+		}
+	}
+
+	boolean restoreFocus() {
+		if (savedFocus != null && savedFocus.isDisposed()) {
+			savedFocus = null;
+		}
+		return savedFocus != null && savedFocus.setSavedFocus();
+	}
+
+	void saveFocus() {
+		Control control = display.getFocusControl();
+		if (control != null && control != this && this == control.menuShell()) {
+			setSavedFocus(control);
+		}
+	}
+
+	protected void unlockSize() {
+		getWindowControl().setMaximumSize(WIDGETSIZE_MAX, WIDGETSIZE_MAX);
+		getWindowControl().setMinimumSize(0, 0);
+	}
+
+	protected boolean sizeFixed() {
+		return getWindowControl().minimumSize().equals(getQWidget().maximumSize());
+	}
+
+	protected void setRestoreState(int state, boolean restore) {
+		int oldState = getWindowControl().windowState().value();
+		if (restore) {
+			if ((oldState & state) == 0) {
+				return;
+			}
+			restoreState();
+		} else {
+			setState(state);
+		}
+	}
+
+	protected void restoreState() {
+		// This might not restore it from minimized if wm doesn't allow it.
+		// It might e.g. blink in the task bar to indicate to the user
+		// that the window wants to become active.
+		if (restoreState == WindowState.WindowMinimized.value()) {
+			setState(WindowState.WindowMinimized.value());
+		} else if (restoreState == WindowState.WindowMaximized.value()) {
+			setState(WindowState.WindowMaximized.value());
+		} else {
+			setState(WindowState.WindowNoState.value());
+		}
+		bringToTop();
+		restoreState = 0;
+	}
+
+	protected void storeState(int state) {
+		if ((state & WindowState.WindowMinimized.value()) != 0) {
+			restoreState = WindowState.WindowMinimized.value();
+		} else if ((state & WindowState.WindowMaximized.value()) != 0) {
+			restoreState = WindowState.WindowMaximized.value();
+		} else {
+			restoreState = 0;
+		}
+	}
+
+	protected void setState(final int state) {
+		final int oldState = getWindowControl().windowState().value();
+		if ((oldState & state) != 0) {
+			return;
+		}
+		storeState(oldState);
+		int newState = oldState;
+		int statesToRemove = (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value() | WindowState.WindowMinimized
+				.value())
+				& ~state;
+		newState &= ~statesToRemove;
+		newState |= state;
+
+		// Full screen and maximize won't work if size is fixed. The fixed size
+		// needs to be stored and then restored when going back to normal state.
+		if ((newState & (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value())) != 0
+				&& (oldState & (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value())) == 0) {
+			if (sizeFixed()) {
+				fixedSize = QtSWTConverter.convert(getWindowControl().minimumSize());
+				style |= SWT.Resize;
+				unlockSize();
+			}
+		}
+
+		// Going directly from full screen to maximized doesn't work. Need to go
+		// normal first.
+		if ((newState & WindowState.WindowMaximized.value()) != 0
+				&& (oldState & WindowState.WindowFullScreen.value()) != 0) {
+			getWindowControl().setWindowState(WindowState.WindowNoState);
+		}
+
+		getWindowControl().setWindowState(new WindowStates(newState));
+
+		// Restore the fixed size if back to normal
+		if ((newState & (WindowState.WindowFullScreen.value() | WindowState.WindowMaximized.value())) == 0) {
+			if (fixedSize != null) {
+				getWindowControl().setFixedSize(fixedSize.x, fixedSize.y);
+				style &= ~SWT.Resize;
+				fixedSize = null;
+			}
+		}
+	}
+
+	/**
+	 * If the argument is not null, sets the receiver's default button to the
+	 * argument, and if the argument is null, sets the receiver's default button
+	 * to the first button which was set as the receiver's default button
+	 * (called the <em>saved default button</em>). If no default button had
+	 * previously been set, or the saved default button was disposed, the
+	 * receiver's default button will be set to null.
+	 * <p>
+	 * The default button is the button that is selected when the receiver is
+	 * active and the user presses ENTER.
+	 * </p>
+	 * 
+	 * @param button
+	 *            the new default button
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the button has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_PARENT - if the control is not in the
+	 *                same widget tree</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setDefaultButton(Button button) {
+		checkWidget();
+		if (button != null) {
+			if (button.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (button.menuShell() != this) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		setDefaultButton(button, true);
+	}
+
+	void setDefaultButton(Button button, boolean save) {
+		if (button == null) {
+			if (defaultButton == saveDefault) {
+				if (save) {
+					saveDefault = null;
+				}
+				return;
+			}
+		} else {
+			if ((button.style & SWT.PUSH) == 0) {
+				return;
+			}
+			if (button == defaultButton) {
+				return;
+			}
+		}
+		if (defaultButton != null) {
+			if (!defaultButton.isDisposed()) {
+				defaultButton.setDefault(false);
+			}
+		}
+		if ((defaultButton = button) == null) {
+			defaultButton = saveDefault;
+		}
+		if (defaultButton != null) {
+			if (!defaultButton.isDisposed()) {
+				defaultButton.setDefault(true);
+			}
+		}
+		if (save) {
+			saveDefault = defaultButton;
+		}
+		if (saveDefault != null && saveDefault.isDisposed()) {
+			saveDefault = null;
+		}
+	}
+
+	/**
+	 * Sets the receiver's image to the argument, which may be null. The image
+	 * is typically displayed by the window manager when the instance is marked
+	 * as iconified, and may also be displayed somewhere in the trim when the
+	 * instance is in normal or maximized states.
+	 * 
+	 * @param image
+	 *            the new image (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setImage(Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.image = image;
+		if (image != null) {
+			getWindowControl().setWindowIcon(image.getQIcon());
+		}
+	}
+
+	/**
+	 * Sets the receiver's images to the argument, which may be an empty array.
+	 * Images are typically displayed by the window manager when the instance is
+	 * marked as iconified, and may also be displayed somewhere in the trim when
+	 * the instance is in normal or maximized states. Depending where the icon
+	 * is displayed, the platform chooses the icon with the "best" attributes.
+	 * It is expected that the array will contain the same icon rendered at
+	 * different sizes, with different depth and transparency attributes.
+	 * 
+	 * @param images
+	 *            the new image array
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if one of the images is null
+	 *                or has been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setImages(Image[] images) {
+		checkWidget();
+		if (images == null) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		for (int i = 0; i < images.length; i++) {
+			if (images[i] == null || images[i].isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		this.images = images;
+		this.images = images;
+		if (parent != null) {
+			return;
+		}
+		if (images != null && images.length > 1) {
+			Image[] bestImages = new Image[images.length];
+			System.arraycopy(images, 0, bestImages, 0, images.length);
+			sort(bestImages);
+			images = bestImages;
+		}
+		if (images.length > 0) {
+			getWindowControl().setWindowIcon(images[0].getQIcon());
+		} else {
+			getWindowControl().setWindowIcon(null);
+		}
+	}
+
+	/**
+	 * Sets the maximized state of the receiver. If the argument is
+	 * <code>true</code> causes the receiver to switch to the maximized state,
+	 * and if the argument is <code>false</code> and the receiver was previously
+	 * maximized, causes the receiver to switch back to either the minimized or
+	 * normal states.
+	 * <p>
+	 * Note: The result of intermixing calls to <code>setMaximized(true)</code>
+	 * and <code>setMinimized(true)</code> will vary by platform. Typically, the
+	 * behavior will match the platform user's expectations, but not always.
+	 * This should be avoided if possible.
+	 * </p>
+	 * 
+	 * @param maximized
+	 *            the new maximized state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setMinimized
+	 */
+	public void setMaximized(boolean maximized) {
+		checkWidget();
+		if (maximized) {
+			getWindowControl().showMaximized();
+
+		} else {
+			getWindowControl().showNormal();
+		}
+	}
+
+	/**
+	 * Sets the receiver's menu bar to the argument, which may be null.
+	 * 
+	 * @param menu
+	 *            the new menu bar
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed
+	 *                </li>
+	 *                <li>ERROR_INVALID_PARENT - if the menu is not in the same
+	 *                widget tree</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMenuBar(Menu menu) {
+		checkWidget();
+		if (menuBar == menu) {
+			return;
+		}
+		if (menu != null) {
+			if (menu.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if ((menu.style & SWT.BAR) == 0) {
+				error(SWT.ERROR_MENU_NOT_BAR);
+			}
+			if (menu.parent != this) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		if (menuBar != null) {
+			menuBar.dispose();
+		}
+		menuBar = menu;
+		if (parent == null) { // window
+			((QMainWindow) getMenuContainer()).setMenuBar(menu.getQMenuBar());
+		} else {
+			QLayout layout = getWindowControl().layout();
+			layout.setMenuBar(menu.getQWidget());
+		}
+
+	}
+
+	/**
+	 * Sets the minimized stated of the receiver. If the argument is
+	 * <code>true</code> causes the receiver to switch to the minimized state,
+	 * and if the argument is <code>false</code> and the receiver was previously
+	 * minimized, causes the receiver to switch back to either the maximized or
+	 * normal states.
+	 * <p>
+	 * Note: The result of intermixing calls to <code>setMaximized(true)</code>
+	 * and <code>setMinimized(true)</code> will vary by platform. Typically, the
+	 * behavior will match the platform user's expectations, but not always.
+	 * This should be avoided if possible.
+	 * </p>
+	 * 
+	 * @param minimized
+	 *            the new maximized state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setMaximized
+	 */
+	public void setMinimized(boolean minimized) {
+		checkWidget();
+		if (minimized) {
+			getWindowControl().showMinimized();
+
+		} else {
+			getWindowControl().showNormal();
+		}
+	}
+
+	void setSavedFocus(Control control) {
+		savedFocus = control;
+	}
+
+	/**
+	 * Sets the receiver's text, which is the string that the window manager
+	 * will typically display as the receiver's <em>title</em>, to the argument,
+	 * which must not be null.
+	 * 
+	 * @param title
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String title) {
+		checkWidget();
+		if (title == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		// fix for emtpy title
+		if (title.length() == 0) {
+			title = " "; //$NON-NLS-1$
+		}
+		getWindowControl().setWindowTitle(title);
+		getWindowControl().setWindowIconText(title);
+	}
+
+	void sort(Image[] images) {
+		/* Shell Sort from K&R, pg 108 */
+		int length = images.length;
+		if (length <= 1) {
+			return;
+		}
+		ImageData[] datas = new ImageData[length];
+		for (int i = 0; i < length; i++) {
+			datas[i] = images[i].getImageData();
+		}
+		for (int gap = length / 2; gap > 0; gap /= 2) {
+			for (int i = gap; i < length; i++) {
+				for (int j = i - gap; j >= 0; j -= gap) {
+					if (compare(datas[j], datas[j + gap]) >= 0) {
+						Image swap = images[j];
+						images[j] = images[j + gap];
+						images[j + gap] = swap;
+						ImageData swapData = datas[j];
+						datas[j] = datas[j + gap];
+						datas[j + gap] = swapData;
+					}
+				}
+			}
+		}
+	}
+
+	int compare(ImageData data1, ImageData data2) {
+		if (data1.width == data2.width && data1.height == data2.height) {
+			int transparent1 = data1.getTransparencyType();
+			int transparent2 = data2.getTransparencyType();
+			if (transparent1 == SWT.TRANSPARENCY_ALPHA) {
+				return -1;
+			}
+			if (transparent2 == SWT.TRANSPARENCY_ALPHA) {
+				return 1;
+			}
+			if (transparent1 == SWT.TRANSPARENCY_MASK) {
+				return -1;
+			}
+			if (transparent2 == SWT.TRANSPARENCY_MASK) {
+				return 1;
+			}
+			if (transparent1 == SWT.TRANSPARENCY_PIXEL) {
+				return -1;
+			}
+			if (transparent2 == SWT.TRANSPARENCY_PIXEL) {
+				return 1;
+			}
+			return 0;
+		}
+		return data1.width > data2.width || data1.height > data2.height ? -1 : 1;
+	}
+
+	boolean traverseDecorations(boolean next) {
+		Control[] children = parent._getChildren();
+		int length = children.length;
+		int index = 0;
+		while (index < length) {
+			if (children[index] == this) {
+				break;
+			}
+			index++;
+		}
+		/*
+		 * It is possible (but unlikely), that application code could have
+		 * disposed the widget in focus in or out events. Ensure that a disposed
+		 * widget is not accessed.
+		 */
+		int start = index, offset = next ? 1 : -1;
+		while ((index = (index + offset + length) % length) != start) {
+			Control child = children[index];
+			if (!child.isDisposed() && child instanceof Decorations) {
+				if (child.setFocus()) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	@Override
+	boolean traverseItem(boolean next) {
+		return false;
+	}
+
+	@Override
+	boolean traverseReturn() {
+		if (defaultButton == null || defaultButton.isDisposed()) {
+			return false;
+		}
+		if (!defaultButton.isVisible() || !defaultButton.isEnabled()) {
+			return false;
+		}
+		defaultButton.click();
+		return true;
+	}
+
+	@Override
+	public void qtFocusInEvent(QObject source) {
+		if (source != getQMasterWidget()) {
+			return;
+		}
+		super.qtFocusInEvent(source);
+		if (savedFocus != this) {
+			restoreFocus();
+		}
+	}
+
+	@Override
+	public void qtFocusOutEvent(QObject source) {
+		if (source != getQMasterWidget()) {
+			return;
+		}
+		super.qtFocusInEvent(source);
+		if (savedFocus != this) {
+			saveFocus();
+		}
+	}
+
+	@Override
+	public boolean qtWindowActivateEvent(QObject source) {
+		if (source == getWindowControl()) {
+			sendEvent(SWT.Activate);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtWindowDeactivateEvent(QObject source) {
+		if (source == getWindowControl()) {
+			sendEvent(SWT.Deactivate);
+			saveFocus();
+		}
+		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DirectoryDialog.java
new file mode 100644
index 0000000..697a3c1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QDir;
+import com.trolltech.qt.gui.QFileDialog;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+
+/**
+ * Instances of this class allow the user to navigate the file system and select
+ * a directory.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a
+ *      href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class DirectoryDialog extends Dialog {
+	String message = "", filterPath = ""; //$NON-NLS-1$//$NON-NLS-2$
+	String directoryPath = ""; //$NON-NLS-1$
+	String[] dirNames = new String[0];
+	QFileDialog fd;
+
+	/**
+	 * Constructs a new instance of this class given only its parent.
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public DirectoryDialog(Shell parent) {
+		this(parent, SWT.APPLICATION_MODAL);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * @param style
+	 *            the style of dialog to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public DirectoryDialog(Shell parent, int style) {
+		super(parent, checkStyle(parent, style));
+		checkSubclass();
+		fd = new QFileDialog();
+		fd.setFileMode(QFileDialog.FileMode.DirectoryOnly);
+	}
+
+	/**
+	 * Returns the path which the dialog will use to filter the directories it
+	 * shows.
+	 * 
+	 * @return the filter path
+	 * 
+	 * @see #setFilterPath
+	 */
+	public String getFilterPath() {
+		QDir dir = fd.directory();
+		return dir.absolutePath();
+	}
+
+	/**
+	 * Returns the dialog's message, which is a description of the purpose for
+	 * which it was opened. This message will be visible on the dialog while it
+	 * is open.
+	 * 
+	 * @return the message
+	 */
+	public String getMessage() {
+		return message;
+	}
+
+	/**
+	 * Makes the dialog visible and brings it to the front of the display.
+	 * 
+	 * @return a string describing the absolute path of the selected directory,
+	 *         or null if the dialog was cancelled or an error occurred
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the dialog has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the dialog</li>
+	 *                </ul>
+	 */
+	public String open() {
+
+		java.util.List<String> dirs = null;
+		if (fd.exec() != 0) {
+			dirs = fd.selectedFiles();
+		}
+		directoryPath = dirs.get(0); // 
+		fd.disposeLater();
+
+		return directoryPath;
+	}
+
+	/**
+	 * Sets the path that the dialog will use to filter the directories it shows
+	 * to the argument, which may be null. If the string is null, then the
+	 * operating system's default filter path will be used.
+	 * <p>
+	 * Note that the path string is platform dependent. For convenience, either
+	 * '/' or '\' can be used as a path separator.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the filter path
+	 */
+	public void setFilterPath(String string) {
+		fd.setDirectory(string);
+	}
+
+	/**
+	 * Sets the dialog's message, which is a description of the purpose for
+	 * which it was opened. This message will be visible on the dialog while it
+	 * is open.
+	 * 
+	 * @param string
+	 *            the message
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 */
+	public void setMessage(String string) {
+		/*
+		 * QFileDialog has nothing like this message. There's a caption which
+		 * will be shown in the title of the dialog window. But this has to be
+		 * set when the dialog is initialized. There are also some labelTexts
+		 * which can be set like setLabelText(DialogLabel.FileName, "Choose:")
+		 * but these are only for describing buttons and textfields
+		 */
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		message = string;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java
new file mode 100644
index 0000000..80b00ea
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java	
@@ -0,0 +1,3246 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.trolltech.qt.core.QEvent;
+import com.trolltech.qt.core.QEventLoop;
+import com.trolltech.qt.core.QMessageHandler;
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.core.QTime;
+import com.trolltech.qt.core.QTimer;
+import com.trolltech.qt.core.QTimerEvent;
+import com.trolltech.qt.core.QEvent.Type;
+import com.trolltech.qt.core.QEventLoop.ProcessEventsFlags;
+import com.trolltech.qt.core.Qt.Key;
+import com.trolltech.qt.core.Qt.KeyboardModifier;
+import com.trolltech.qt.core.Qt.KeyboardModifiers;
+import com.trolltech.qt.core.Qt.MouseButton;
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QCloseEvent;
+import com.trolltech.qt.gui.QContextMenuEvent;
+import com.trolltech.qt.gui.QCursor;
+import com.trolltech.qt.gui.QFont;
+import com.trolltech.qt.gui.QIcon;
+import com.trolltech.qt.gui.QKeyEvent;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QMoveEvent;
+import com.trolltech.qt.gui.QPaintDeviceInterface;
+import com.trolltech.qt.gui.QPaintEvent;
+import com.trolltech.qt.gui.QPicture;
+import com.trolltech.qt.gui.QPixmap;
+import com.trolltech.qt.gui.QResizeEvent;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QWindowStateChangeEvent;
+import com.trolltech.qt.gui.QStyle.StandardPixmap;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.DeviceData;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GCData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.KeyUtil;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+import org.eclipse.swt.internal.qt.SWQT;
+
+/**
+ * Instances of this class are responsible for managing the connection between
+ * SWT and the underlying operating system. Their most important function is to
+ * implement the SWT event loop in terms of the platform event model. They also
+ * provide various methods for accessing information about the operating system,
+ * and have overall control over the operating system resources which SWT
+ * allocates.
+ * <p>
+ * Applications which are built with SWT will <em>almost always</em> require
+ * only a single display. In particular, some platforms which SWT supports will
+ * not allow more than one <em>active</em> display. In other words, some
+ * platforms do not support creating a new display if one already exists that
+ * has not been sent the <code>dispose()</code> message.
+ * <p>
+ * In SWT, the thread which creates a <code>Display</code> instance is
+ * distinguished as the <em>user-interface thread</em> for that display.
+ * </p>
+ * The user-interface thread for a particular display has the following special
+ * attributes:
+ * <ul>
+ * <li>
+ * The event loop for that display must be run from the thread.</li>
+ * <li>
+ * Some SWT API methods (notably, most of the public methods in
+ * <code>Widget</code> and its subclasses), may only be called from the thread.
+ * (To support multi-threaded user-interface applications, class
+ * <code>Display</code> provides inter-thread communication methods which allow
+ * threads other than the user-interface thread to request that it perform
+ * operations on their behalf.)</li>
+ * <li>
+ * The thread is not allowed to construct other <code>Display</code>s until that
+ * display has been disposed. (Note that, this is in addition to the restriction
+ * mentioned above concerning platform support for multiple displays. Thus, the
+ * only way to have multiple simultaneously active displays, even on platforms
+ * which support it, is to have multiple threads.)</li>
+ * </ul>
+ * Enforcing these attributes allows SWT to be implemented directly on the
+ * underlying operating system's event model. This has numerous benefits
+ * including smaller footprint, better use of resources, safer memory
+ * management, clearer program logic, better performance, and fewer overall
+ * operating system threads required. The down side however, is that care must
+ * be taken (only) when constructing multi-threaded applications to use the
+ * inter-thread communication mechanisms which this class provides when
+ * required. </p>
+ * <p>
+ * All SWT API methods which may only be called from the user-interface thread
+ * are distinguished in their documentation by indicating that they throw the "
+ * <code>ERROR_THREAD_INVALID_ACCESS</code>" SWT exception.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Close, Dispose, Settings</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see #syncExec
+ * @see #asyncExec
+ * @see #wake
+ * @see #readAndDispatch
+ * @see #sleep
+ * @see Device#dispose
+ * @see <a href="http://www.eclipse.org/swt/snippets/#display">Display
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Display extends Device {
+
+	Thread thread;
+	int threadId;
+	/* Windows and Events */
+	private Event[] eventQueue;
+	private EventTable eventTable, filterTable;
+
+	/* Focus */
+	int focusEvent;
+	Control focusControl;
+
+	/* Menus */
+	private Menu[] bars;
+	Menu[] popups;
+	private MenuItem[] items;
+
+	/* Settings */
+	private static final int /* long */SETTINGS_ID = 100;
+
+	/*
+	 * The start value for WM_COMMAND id's. Windows reserves the values 0..100.
+	 * 
+	 * The SmartPhone SWT resource file reserves the values 101..107.
+	 */
+	private static final int ID_START = 108;
+
+	/* Sync/Async Widget Communication */
+	private Synchronizer synchronizer = new Synchronizer(this);
+
+	/* Display Shutdown */
+	private Runnable[] disposeList;
+
+	/* System Tray */
+	private Tray tray;
+
+	/* Timers */
+	private int /* long */[] timerIds;
+	private Runnable[] timerList;
+	private int /* long */nextTimerId = SETTINGS_ID + 1;
+
+	/* Keyboard and Mouse */
+	int lastKey;
+	int lastAscii;
+	boolean lastVirtual;
+	boolean lastNull;
+	boolean xMouse;
+
+	/* System Resources */
+	private Font systemFont;
+	private Image errorImage, infoImage, questionImage, warningIcon;
+	private Cursor[] cursors = new Cursor[SWT.CURSOR_HAND + 1];
+
+	/* Display Data */
+	private Object data;
+	private String[] keys;
+	private Object[] values;
+
+	/* Multiple Displays */
+	private static Display Default;
+	private static Display[] Displays = new Display[4];
+
+	/* Modality */
+	Shell[] modalShells;
+	private Dialog modalDialog;
+
+	/* Qt specific fields */
+	private String styleSheet;
+	private Map<Object, Widget> qt2swtControlMap;
+	private MasterEventFilter masterEventFilter;
+	private int lastEventTime;
+	private static final ProcessEventsFlags PROCESS_EVENTS_FLAGS = new ProcessEventsFlags(
+			QEventLoop.ProcessEventsFlag.AllEvents);
+	private QTimer timer;
+	private final boolean ignorePaintEvents = false;
+	private QMessageHandler messageHandler;
+
+	/* Package Name */
+	private static final String PACKAGE_PREFIX = "org.eclipse.swt.widgets."; //$NON-NLS-1$
+
+	/*
+	 * TEMPORARY CODE. Install the runnable that gets the current display. This
+	 * code will be removed in the future.
+	 */
+	static {
+		DeviceFinder = new Runnable() {
+			public void run() {
+				Device device = getCurrent();
+				if (device == null) {
+					device = getDefault();
+				}
+				setDevice(device);
+			}
+		};
+	}
+
+	/*
+	 * TEMPORARY CODE.
+	 */
+	static void setDevice(Device device) {
+		CurrentDevice = device;
+	}
+
+	/**
+	 * Constructs a new instance of this class.
+	 * <p>
+	 * Note: The resulting display is marked as the <em>current</em> display. If
+	 * this is the first display which has been constructed since the
+	 * application started, it is also marked as the <em>default</em> display.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if called from a thread
+	 *                that already created an existing display</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see #getCurrent
+	 * @see #getDefault
+	 * @see Widget#checkSubclass
+	 * @see Shell
+	 */
+	public Display() {
+		this(null);
+	}
+
+	/**
+	 * Constructs a new instance of this class using the parameter.
+	 * 
+	 * @param data
+	 *            the device data
+	 */
+	public Display(DeviceData data) {
+		super(data);
+	}
+
+	public String getStyleSheet() {
+		return styleSheet;
+	}
+
+	protected void setStyleSheet(String style) {
+		this.styleSheet = style;
+		for (Shell shell : getShells()) {
+			shell.setStyleSheet(style);
+		}
+		Event event = new Event();
+		event.text = style;
+		sendEvent(SWQT.StyleSheetChange, event);
+	}
+
+	private Control _getFocusControl() {
+		Widget widget = findControl(QApplication.focusWidget());
+		if (widget instanceof Control) {
+			return (Control) widget;
+		}
+		return null;
+	}
+
+	void addControl(Object qtControl, Widget swtControl) {
+		if (qtControl == null || swtControl == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		qt2swtControlMap.put(qtControl, swtControl);
+	}
+
+	Widget findControl(Object qtControl) {
+		if (qtControl == null) {
+			return null;
+		}
+		return qt2swtControlMap.get(qtControl);
+	}
+
+	Widget removeControl(Object qtControl) {
+		return qt2swtControlMap.remove(qtControl);
+	}
+
+	void addBar(Menu menu) {
+		if (bars == null) {
+			bars = new Menu[4];
+		}
+		int length = bars.length;
+		for (int i = 0; i < length; i++) {
+			if (bars[i] == menu) {
+				return;
+			}
+		}
+		int index = 0;
+		while (index < length) {
+			if (bars[index] == null) {
+				break;
+			}
+			index++;
+		}
+		if (index == length) {
+			Menu[] newBars = new Menu[length + 4];
+			System.arraycopy(bars, 0, newBars, 0, length);
+			bars = newBars;
+		}
+		bars[index] = menu;
+	}
+
+	void releaseTray(Tray tray) {
+		if (this.tray == tray) {
+			this.tray = null;
+		}
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when an event of the given type occurs anywhere in a widget. The event
+	 * type is one of the event constants defined in class <code>SWT</code>.
+	 * When the event does occur, the listener is notified by sending it the
+	 * <code>handleEvent()</code> message.
+	 * <p>
+	 * Setting the type of an event to <code>SWT.None</code> from within the
+	 * <code>handleEvent()</code> method can be used to change the event type
+	 * and stop subsequent Java listeners from running. Because event filters
+	 * run before other listeners, event filters can both block other listeners
+	 * and set arbitrary fields within an event. For this reason, event filters
+	 * are both powerful and dangerous. They should generally be avoided for
+	 * performance, debugging and code maintenance reasons.
+	 * </p>
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @param listener
+	 *            the listener which should be notified when the event occurs
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see SWT
+	 * @see #removeFilter
+	 * @see #removeListener
+	 * 
+	 * @since 3.0
+	 */
+	public void addFilter(int eventType, Listener listener) {
+		checkDevice();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (filterTable == null) {
+			filterTable = new EventTable();
+		}
+		filterTable.hook(eventType, listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when an event of the given type occurs. The event type is one of the
+	 * event constants defined in class <code>SWT</code>. When the event does
+	 * occur in the display, the listener is notified by sending it the
+	 * <code>handleEvent()</code> message.
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @param listener
+	 *            the listener which should be notified when the event occurs
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see SWT
+	 * @see #removeListener
+	 * 
+	 * @since 2.0
+	 */
+	public void addListener(int eventType, Listener listener) {
+		checkDevice();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			eventTable = new EventTable();
+		}
+		eventTable.hook(eventType, listener);
+	}
+
+	void addMenuItem(MenuItem item) {
+		if (items == null) {
+			items = new MenuItem[64];
+		}
+		for (int i = 0; i < items.length; i++) {
+			if (items[i] == null) {
+				item.id = i + ID_START;
+				items[i] = item;
+				return;
+			}
+		}
+		item.id = items.length + ID_START;
+		MenuItem[] newItems = new MenuItem[items.length + 64];
+		newItems[items.length] = item;
+		System.arraycopy(items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+
+	void addPopup(Menu menu) {
+		if (popups == null) {
+			popups = new Menu[4];
+		}
+		int length = popups.length;
+		for (int i = 0; i < length; i++) {
+			if (popups[i] == menu) {
+				return;
+			}
+		}
+		int index = 0;
+		while (index < length) {
+			if (popups[index] == null) {
+				break;
+			}
+			index++;
+		}
+		if (index == length) {
+			Menu[] newPopups = new Menu[length + 4];
+			System.arraycopy(popups, 0, newPopups, 0, length);
+			popups = newPopups;
+		}
+		popups[index] = menu;
+	}
+
+	/**
+	 * Causes the <code>run()</code> method of the runnable to be invoked by the
+	 * user-interface thread at the next reasonable opportunity. The caller of
+	 * this method continues to run in parallel, and is not notified when the
+	 * runnable has completed. Specifying <code>null</code> as the runnable
+	 * simply wakes the user-interface thread when run.
+	 * <p>
+	 * Note that at the time the runnable is invoked, widgets that have the
+	 * receiver as their display may have been disposed. Therefore, it is
+	 * necessary to check for this case inside the runnable before accessing the
+	 * widget.
+	 * </p>
+	 * 
+	 * @param runnable
+	 *            code to run on the user-interface thread or <code>null</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #syncExec
+	 */
+	public void asyncExec(Runnable runnable) {
+		synchronized (Device.class) {
+			if (isDisposed()) {
+				error(SWT.ERROR_DEVICE_DISPOSED);
+			}
+			synchronizer.asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * Causes the system hardware to emit a short sound (if it supports this
+	 * capability).
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void beep() {
+		checkDevice();
+		QApplication.beep();
+	}
+
+	/**
+	 * Checks that this class can be subclassed.
+	 * <p>
+	 * IMPORTANT: See the comment in <code>Widget.checkSubclass()</code>.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see Widget#checkSubclass
+	 */
+	protected void checkSubclass() {
+		if (!isValidClass(getClass())) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	@Override
+	protected void checkDevice() {
+		if (thread == null) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if (thread != Thread.currentThread()) {
+			/*
+			 * Bug in IBM JVM 1.6. For some reason, under conditions that are
+			 * yet to be full understood, Thread.currentThread() is either
+			 * returning null or a different instance from the one that was
+			 * saved when the Display was created. This is possibly a JIT
+			 * problem because modifying this method to print logging
+			 * information when the error happens seems to fix the problem. The
+			 * fix is to use operating system calls to verify that the current
+			 * thread is not the Display thread.
+			 * 
+			 * NOTE: Despite the fact that Thread.currentThread() is used in
+			 * other places, the failure has not been observed in all places
+			 * where it is called.
+			 */
+
+			if (threadId != (int) Thread.currentThread().getId()) {
+				error(SWT.ERROR_THREAD_INVALID_ACCESS);
+			}
+		}
+		if (isDisposed()) {
+			error(SWT.ERROR_DEVICE_DISPOSED);
+		}
+	}
+
+	private static void checkDisplay(Thread thread, boolean multiple) {
+		synchronized (Device.class) {
+			for (int i = 0; i < Displays.length; i++) {
+				if (Displays[i] != null) {
+					if (!multiple) {
+						SWT.error(SWT.ERROR_NOT_IMPLEMENTED, null, " [multiple displays]"); //$NON-NLS-1$
+					}
+					if (Displays[i].thread == thread) {
+						SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+					}
+				}
+			}
+		}
+	}
+
+	void clearModal(Shell shell) {
+		if (modalShells == null) {
+			return;
+		}
+		int index = 0, length = modalShells.length;
+		while (index < length) {
+			if (modalShells[index] == shell) {
+				break;
+			}
+			if (modalShells[index] == null) {
+				return;
+			}
+			index++;
+		}
+		if (index == length) {
+			return;
+		}
+		System.arraycopy(modalShells, index + 1, modalShells, index, --length - index);
+		modalShells[length] = null;
+		if (index == 0 && modalShells[0] == null) {
+			modalShells = null;
+		}
+		Shell[] shells = getShells();
+		for (int i = 0; i < shells.length; i++) {
+			shells[i].updateModal();
+		}
+	}
+
+	/**
+	 * Requests that the connection between SWT and the underlying operating
+	 * system be closed.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Device#dispose
+	 * 
+	 * @since 2.0
+	 */
+	public void close() {
+		checkDevice();
+		Event event = new Event();
+		sendEvent(SWT.Close, event);
+		if (event.doit) {
+			dispose();
+		}
+	}
+
+	/**
+	 * Creates the device in the operating system. If the device does not have a
+	 * handle, this method may do nothing depending on the device.
+	 * <p>
+	 * This method is called before <code>init</code>.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the DeviceData which describes the receiver
+	 * 
+	 * @see #init
+	 */
+	@Override
+	protected void create(DeviceData data) {
+		checkSubclass();
+		checkDisplay(thread = Thread.currentThread(), true);
+		createDisplay(data);
+		register(this);
+		if (Default == null) {
+			Default = this;
+		}
+	}
+
+	private void createDisplay(DeviceData data) {
+		qt2swtControlMap = Collections.synchronizedMap(new HashMap<Object, Widget>());
+		QApplication.initialize(new String[0]);
+		QApplication.setQuitOnLastWindowClosed(false);
+		masterEventFilter = new MasterEventFilter(this);
+		QApplication.instance().installEventFilter(masterEventFilter);
+		setPaintDevice(QApplication.desktop());
+		messageHandler = new SwtMessageHandler();
+		QMessageHandler.installMessageHandler(messageHandler);
+	}
+
+	static void deregister(Display display) {
+		synchronized (Device.class) {
+			for (int i = 0; i < Displays.length; i++) {
+				if (display == Displays[i]) {
+					Displays[i] = null;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Destroys the device in the operating system and releases the device's
+	 * handle. If the device does not have a handle, this method may do nothing
+	 * depending on the device.
+	 * <p>
+	 * This method is called after <code>release</code>.
+	 * </p>
+	 * 
+	 * @see Device#dispose
+	 * @see #release
+	 */
+	@Override
+	protected void destroy() {
+		if (this == Default) {
+			Default = null;
+		}
+		deregister(this);
+		destroyDisplay();
+	}
+
+	void destroyDisplay() {
+		QMessageHandler.removeMessageHandler(messageHandler);
+		QApplication.instance().removeEventFilter(masterEventFilter);
+		QApplication.instance().dispose();
+	}
+
+	/**
+	 * Causes the <code>run()</code> method of the runnable to be invoked by the
+	 * user-interface thread just before the receiver is disposed. Specifying a
+	 * <code>null</code> runnable is ignored.
+	 * 
+	 * @param runnable
+	 *            code to run at dispose time.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public void disposeExec(Runnable runnable) {
+		checkDevice();
+		if (disposeList == null) {
+			disposeList = new Runnable[4];
+		}
+		for (int i = 0; i < disposeList.length; i++) {
+			if (disposeList[i] == null) {
+				disposeList[i] = runnable;
+				return;
+			}
+		}
+		Runnable[] newDisposeList = new Runnable[disposeList.length + 4];
+		System.arraycopy(disposeList, 0, newDisposeList, 0, disposeList.length);
+		newDisposeList[disposeList.length] = runnable;
+		disposeList = newDisposeList;
+	}
+
+	/**
+	 * Does whatever display specific cleanup is required, and then uses the
+	 * code in <code>SWTError.error</code> to handle the error.
+	 * 
+	 * @param code
+	 *            the descriptive error code
+	 * 
+	 * @see SWT#error(int)
+	 */
+	void error(int code) {
+		SWT.error(code);
+	}
+
+	boolean filterEvent(Event event) {
+		if (filterTable != null) {
+			filterTable.sendEvent(event);
+		}
+		return false;
+	}
+
+	boolean filters(int eventType) {
+		if (filterTable == null) {
+			return false;
+		}
+		return filterTable.hooks(eventType);
+	}
+
+	/**
+	 * Given a widget and a widget-specific id, returns the instance of the
+	 * <code>Widget</code> subclass which represents the widget/id pair in the
+	 * currently running application, if such exists, or null if no matching
+	 * widget can be found.
+	 * 
+	 * @param widget
+	 *            the widget
+	 * @param id
+	 *            the id for the subwidget (usually an item)
+	 * @return the SWT subwidget (usually an item) that the widget/id pair
+	 *         represents
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public Widget findWidget(Widget widget, int /* long */id) {
+		checkDevice();
+		// TODO howto to it with qt ? use qObj.nativeId() ?
+		throw new UnsupportedOperationException("not yet implemented for qt"); //$NON-NLS-1$
+	}
+
+	// linux 64bit
+	public Widget findWidget(/* int */long id) {
+		checkDevice();
+		// TODO howto to it with qt ? use qObj.nativeId() ?
+		throw new UnsupportedOperationException("not yet implemented for qt"); //$NON-NLS-1$
+	}
+
+	// win32
+	public Widget findWidget(int /* long */hwnd, int /* long */id) {
+		checkDevice();
+		// TODO howto to it with qt ? use qObj.nativeId() ?
+		throw new UnsupportedOperationException("not yet implemented for qt"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the display which the given thread is the user-interface thread
+	 * for, or null if the given thread is not a user-interface thread for any
+	 * display. Specifying <code>null</code> as the thread will return
+	 * <code>null</code> for the display.
+	 * 
+	 * @param thread
+	 *            the user-interface thread
+	 * @return the display for the given thread
+	 */
+	public static Display findDisplay(Thread thread) {
+		synchronized (Device.class) {
+			for (int i = 0; i < Displays.length; i++) {
+				Display display = Displays[i];
+				if (display != null && display.thread == thread) {
+					return display;
+				}
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * Returns the currently active <code>Shell</code>, or null if no shell
+	 * belonging to the currently running application is active.
+	 * 
+	 * @return the active shell or null
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Shell getActiveShell() {
+		checkDevice();
+		QWidget activeWindow = QApplication.activeWindow();
+		Widget control = findControl(activeWindow);
+		if (!(control instanceof Control)) {
+			return null;
+		}
+		return control != null ? ((Control) control).getShell() : null;
+	}
+
+	/**
+	 * Returns the single instance of the application menu bar or null
+	 * when there is no application menu bar for the platform.
+	 *
+	 * @return the application menu bar or <code>null</code>
+	 * 
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+	 * </ul>
+	 *
+	 * @since 3.7
+	 */
+	public Menu getMenuBar () {
+		checkDevice ();
+		return null;
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location. Note
+	 * that on multi-monitor systems the origin can be negative.
+	 * 
+	 * @return the bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	@Override
+	public Rectangle getBounds() {
+		checkDevice();
+		return QtSWTConverter.convert(QApplication.desktop().screenGeometry());
+	}
+
+	/**
+	 * Returns the display which the currently running thread is the
+	 * user-interface thread for, or null if the currently running thread is not
+	 * a user-interface thread for any display.
+	 * 
+	 * @return the current display
+	 */
+	public static Display getCurrent() {
+		return findDisplay(Thread.currentThread());
+	}
+
+	/**
+	 * Returns a rectangle which describes the area of the receiver which is
+	 * capable of displaying data.
+	 * 
+	 * @return the client area
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #getBounds
+	 */
+	@Override
+	public Rectangle getClientArea() {
+		checkDevice();
+		return QtSWTConverter.convert(QApplication.desktop().childrenRect());
+	}
+
+	/**
+	 * Returns the control which the on-screen pointer is currently over top of,
+	 * or null if it is not currently over one of the controls built by the
+	 * currently running application.
+	 * 
+	 * @return the control under the cursor
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Control getCursorControl() {
+		checkDevice();
+		Widget widget = findControl(QApplication.widgetAt(QCursor.pos()));
+		if (widget instanceof Control) {
+			return (Control) widget;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the location of the on-screen pointer relative to the top left
+	 * corner of the screen.
+	 * 
+	 * @return the cursor location
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Point getCursorLocation() {
+		checkDevice();
+		return QtSWTConverter.convert(QCursor.pos());
+	}
+
+	/**
+	 * Returns an array containing the recommended cursor sizes.
+	 * 
+	 * @return the array of cursor sizes
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Point[] getCursorSizes() {
+		checkDevice();
+		return new Point[] { new Point(32, 32) };
+	}
+
+	/**
+	 * Returns the default display. One is created (making the thread that
+	 * invokes this method its user-interface thread) if it did not already
+	 * exist.
+	 * 
+	 * @return the default display
+	 */
+	public static Display getDefault() {
+		synchronized (Device.class) {
+			if (Default == null) {
+				Default = new Display();
+				// Hack: This is necessary to prevent a JVM crash when leaving the Eclipse IDE with Qt!
+				// http://eclipse.compeople.eu/wiki/index.php/Compeople:SWTQtImplementierungsdetails#ACCESS_VIOLATION_beim_Beenden_der_IDE_mit_Qt
+				Display.deregister(Default);
+				Default.destroyDisplay();
+			}
+			return Default;
+		}
+	}
+
+	static boolean isValidClass(Class<?> clazz) {
+		String name = clazz.getName();
+		int index = name.lastIndexOf('.');
+		return name.substring(0, index + 1).equals(PACKAGE_PREFIX);
+	}
+
+	/**
+	 * Returns the application defined property of the receiver with the
+	 * specified name, or null if it has not been set.
+	 * <p>
+	 * Applications may have associated arbitrary objects with the receiver in
+	 * this fashion. If the objects stored in the properties need to be notified
+	 * when the display is disposed of, it is the application's responsibility
+	 * to provide a <code>disposeExec()</code> handler which does so.
+	 * </p>
+	 * 
+	 * @param key
+	 *            the name of the property
+	 * @return the value of the property or null if it has not been set
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #setData(String, Object)
+	 * @see #disposeExec(Runnable)
+	 */
+	public Object getData(String key) {
+		checkDevice();
+		if (key == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		if (SWQT.STYLESHEET_KEY.equals(key)) {
+			return styleSheet;
+		}
+
+		if (keys == null) {
+			return null;
+		}
+
+		for (int i = 0; i < keys.length; i++) {
+			if (keys[i].equals(key)) {
+				return values[i];
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the application defined, display specific data associated with
+	 * the receiver, or null if it has not been set. The
+	 * <em>display specific data</em> is a single, unnamed field that is stored
+	 * with every display.
+	 * <p>
+	 * Applications may put arbitrary objects in this field. If the object
+	 * stored in the display specific data needs to be notified when the display
+	 * is disposed of, it is the application's responsibility to provide a
+	 * <code>disposeExec()</code> handler which does so.
+	 * </p>
+	 * 
+	 * @return the display specific data
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #setData(Object)
+	 * @see #disposeExec(Runnable)
+	 */
+	public Object getData() {
+		checkDevice();
+		return data;
+	}
+
+	/**
+	 * Returns the button dismissal alignment, one of <code>LEFT</code> or
+	 * <code>RIGHT</code>. The button dismissal alignment is the ordering that
+	 * should be used when positioning the default dismissal button for a
+	 * dialog. For example, in a dialog that contains an OK and CANCEL button,
+	 * on platforms where the button dismissal alignment is <code>LEFT</code>,
+	 * the button ordering should be OK/CANCEL. When button dismissal alignment
+	 * is <code>RIGHT</code>, the button ordering should be CANCEL/OK.
+	 * 
+	 * @return the button dismissal order
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public int getDismissalAlignment() {
+		checkDevice();
+		return SWT.LEFT;
+	}
+
+	/**
+	 * Returns the longest duration, in milliseconds, between two mouse button
+	 * clicks that will be considered a <em>double click</em> by the underlying
+	 * operating system.
+	 * 
+	 * @return the double click time
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public int getDoubleClickTime() {
+		checkDevice();
+		return QApplication.doubleClickInterval();
+	}
+
+	/**
+	 * Returns the control which currently has keyboard focus, or null if
+	 * keyboard events are not currently going to any of the controls built by
+	 * the currently running application.
+	 * 
+	 * @return the control under the cursor
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Control getFocusControl() {
+		checkDevice();
+		if (focusControl != null && !focusControl.isDisposed()) {
+			return focusControl;
+		}
+		return _getFocusControl();
+	}
+
+	/**
+	 * Returns true when the high contrast mode is enabled. Otherwise, false is
+	 * returned.
+	 * <p>
+	 * Note: This operation is a hint and is not supported on platforms that do
+	 * not have this concept.
+	 * </p>
+	 * 
+	 * @return the high contrast mode
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public boolean getHighContrast() {
+		checkDevice();
+		return false;
+	}
+
+	/**
+	 * Returns the maximum allowed depth of icons on this display, in bits per
+	 * pixel. On some platforms, this may be different than the actual depth of
+	 * the display.
+	 * 
+	 * @return the maximum icon depth
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Device#getDepth
+	 */
+	public int getIconDepth() {
+		checkDevice();
+		return QPixmap.defaultDepth();
+	}
+
+	/**
+	 * Returns an array containing the recommended icon sizes.
+	 * 
+	 * @return the array of icon sizes
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Decorations#setImages(Image[])
+	 * 
+	 * @since 3.0
+	 */
+	public Point[] getIconSizes() {
+		checkDevice();
+		// TODO defaults ok?
+		return new Point[] { new Point(16, 16), new Point(32, 32) };
+	}
+
+	public int getLastEventTime() {
+		return lastEventTime;
+	}
+
+	private int getMessageCount() {
+		return synchronizer.getMessageCount();
+	}
+
+	Shell getModalShell() {
+		if (modalShells == null) {
+			return null;
+		}
+		int index = modalShells.length;
+		while (--index >= 0) {
+			Shell shell = modalShells[index];
+			if (shell != null) {
+				return shell;
+			}
+		}
+		return null;
+	}
+
+	Dialog getModalDialog() {
+		return modalDialog;
+	}
+
+	/**
+	 * Returns an array of monitors attached to the device.
+	 * 
+	 * @return the array of monitors
+	 * 
+	 * @since 3.0
+	 */
+	public Monitor[] getMonitors() {
+		checkDevice();
+		Monitor[] monitors = new Monitor[QApplication.desktop().numScreens()];
+		for (int i = 0; i < monitors.length; i++) {
+			monitors[i] = createMonitor(i);
+		}
+		return monitors;
+	}
+
+	static Monitor createMonitor(QWidget widget) {
+		return createMonitor(QApplication.desktop().screenNumber(widget));
+	}
+
+	static Monitor createMonitor(int index) {
+		QRect screen = QApplication.desktop().screenGeometry(index);
+		Monitor monitor = new Monitor();
+		monitor.handle = index;
+		monitor.width = screen.width();
+		monitor.height = screen.height();
+
+		QRect rect = QApplication.desktop().availableGeometry(index);
+		monitor.clientX = rect.left();
+		monitor.clientY = rect.top();
+		monitor.clientWidth = rect.width();
+		monitor.clientHeight = rect.height();
+		return monitor;
+	}
+
+	/**
+	 * Returns the primary monitor for that device.
+	 * 
+	 * @return the primary monitor
+	 * 
+	 * @since 3.0
+	 */
+	public Monitor getPrimaryMonitor() {
+		checkDevice();
+		return createMonitor(QApplication.desktop().primaryScreen());
+	}
+
+	/**
+	 * Returns a (possibly empty) array containing all shells which have not
+	 * been disposed and have the receiver as their display.
+	 * 
+	 * @return the receiver's shells
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Shell[] getShells() {
+		checkDevice();
+		int index = 0;
+		Shell[] result = new Shell[16];
+		for (Widget control : qt2swtControlMap.values()) {
+			if (control != null && control instanceof Shell) {
+				int j = 0;
+				while (j < index) {
+					if (result[j] == control) {
+						break;
+					}
+					j++;
+				}
+				if (j == index) {
+					if (index == result.length) {
+						Shell[] newResult = new Shell[index + 16];
+						System.arraycopy(result, 0, newResult, 0, index);
+						result = newResult;
+					}
+					result[index++] = (Shell) control;
+				}
+			}
+		}
+		if (index == result.length) {
+			return result;
+		}
+		Shell[] newResult = new Shell[index];
+		System.arraycopy(result, 0, newResult, 0, index);
+		return newResult;
+	}
+
+	/**
+	 * Gets the synchronizer used by the display.
+	 * 
+	 * @return the receiver's synchronizer
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public Synchronizer getSynchronizer() {
+		checkDevice();
+		return synchronizer;
+	}
+
+	/**
+	 * Returns the thread that has invoked <code>syncExec</code> or null if no
+	 * such runnable is currently being invoked by the user-interface thread.
+	 * <p>
+	 * Note: If a runnable invoked by asyncExec is currently running, this
+	 * method will return null.
+	 * </p>
+	 * 
+	 * @return the receiver's sync-interface thread
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Thread getSyncThread() {
+		synchronized (Device.class) {
+			if (isDisposed()) {
+				error(SWT.ERROR_DEVICE_DISPOSED);
+			}
+			return synchronizer.syncThread;
+		}
+	}
+
+	/**
+	 * Returns the matching standard platform cursor for the given constant,
+	 * which should be one of the cursor constants specified in class
+	 * <code>SWT</code>. This cursor should not be free'd because it was
+	 * allocated by the system, not the application. A value of
+	 * <code>null</code> will be returned if the supplied constant is not an SWT
+	 * cursor constant.
+	 * 
+	 * @param id
+	 *            the SWT cursor constant
+	 * @return the corresponding cursor or <code>null</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#CURSOR_ARROW
+	 * @see SWT#CURSOR_WAIT
+	 * @see SWT#CURSOR_CROSS
+	 * @see SWT#CURSOR_APPSTARTING
+	 * @see SWT#CURSOR_HELP
+	 * @see SWT#CURSOR_SIZEALL
+	 * @see SWT#CURSOR_SIZENESW
+	 * @see SWT#CURSOR_SIZENS
+	 * @see SWT#CURSOR_SIZENWSE
+	 * @see SWT#CURSOR_SIZEWE
+	 * @see SWT#CURSOR_SIZEN
+	 * @see SWT#CURSOR_SIZES
+	 * @see SWT#CURSOR_SIZEE
+	 * @see SWT#CURSOR_SIZEW
+	 * @see SWT#CURSOR_SIZENE
+	 * @see SWT#CURSOR_SIZESE
+	 * @see SWT#CURSOR_SIZESW
+	 * @see SWT#CURSOR_SIZENW
+	 * @see SWT#CURSOR_UPARROW
+	 * @see SWT#CURSOR_IBEAM
+	 * @see SWT#CURSOR_NO
+	 * @see SWT#CURSOR_HAND
+	 * 
+	 * @since 3.0
+	 */
+	public Cursor getSystemCursor(int id) {
+		checkDevice();
+		if (!(0 <= id && id < cursors.length)) {
+			return null;
+		}
+		if (cursors[id] == null) {
+			cursors[id] = new Cursor(this, id);
+		}
+		return cursors[id];
+	}
+
+	/**
+	 * Returns a reasonable font for applications to use. On some platforms,
+	 * this will match the "default font" or "system font" if such can be found.
+	 * This font should not be free'd because it was allocated by the system,
+	 * not the application.
+	 * <p>
+	 * Typically, applications which want the default look should simply not set
+	 * the font on the widgets they create. Widgets are always created with the
+	 * correct default font for the class of user-interface component they
+	 * represent.
+	 * </p>
+	 * 
+	 * @return a font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	@Override
+	public Font getSystemFont() {
+		checkDevice();
+		return systemFont = Font.qt_new(this, new QFont());
+	}
+
+	/**
+	 * Returns the matching standard platform image for the given constant,
+	 * which should be one of the icon constants specified in class
+	 * <code>SWT</code>. This image should not be free'd because it was
+	 * allocated by the system, not the application. A value of
+	 * <code>null</code> will be returned either if the supplied constant is not
+	 * an SWT icon constant or if the platform does not define an image that
+	 * corresponds to the constant.
+	 * 
+	 * @param id
+	 *            the SWT icon constant
+	 * @return the corresponding image or <code>null</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#ICON_ERROR
+	 * @see SWT#ICON_INFORMATION
+	 * @see SWT#ICON_QUESTION
+	 * @see SWT#ICON_WARNING
+	 * @see SWT#ICON_WORKING
+	 * 
+	 * @since 3.0
+	 */
+	public Image getSystemImage(int id) {
+		checkDevice();
+		switch (id) {
+		case SWT.ICON_ERROR: {
+			if (errorImage != null) {
+				return errorImage;
+			}
+			QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxCritical);
+			return errorImage = Image.qt_new(this, SWT.ICON, icon);
+		}
+		case SWT.ICON_WORKING:
+		case SWT.ICON_INFORMATION: {
+			if (infoImage != null) {
+				return infoImage;
+			}
+			QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxInformation);
+			return errorImage = Image.qt_new(this, SWT.ICON, icon);
+		}
+		case SWT.ICON_QUESTION: {
+			if (questionImage != null) {
+				return questionImage;
+			}
+			QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxQuestion);
+			return errorImage = Image.qt_new(this, SWT.ICON, icon);
+		}
+		case SWT.ICON_WARNING: {
+			if (warningIcon != null) {
+				return warningIcon;
+			}
+			QIcon icon = QApplication.style().standardIcon(StandardPixmap.SP_MessageBoxWarning);
+			return errorImage = Image.qt_new(this, SWT.ICON, icon);
+		}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the single instance of the system-provided menu for the application.
+	 * On platforms where no menu is provided for the application this method returns null.
+	 *
+	 * @return the system menu or <code>null</code>
+	 * 
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+	 * </ul>
+	 *
+	 * @since 3.7
+	 */
+	public Menu getSystemMenu() {
+		checkDevice();
+		return null;
+	}
+
+	/**
+	 * Returns the single instance of the system tray or null when there is no
+	 * system tray available for the platform.
+	 * 
+	 * @return the system tray or <code>null</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Tray getSystemTray() {
+		checkDevice();
+		if (tray != null) {
+			return tray;
+		}
+		tray = new Tray(this, SWT.NONE);
+		return tray;
+	}
+
+	/**
+	 * Returns the user-interface thread for the receiver.
+	 * 
+	 * @return the receiver's user-interface thread
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Thread getThread() {
+		synchronized (Device.class) {
+			if (isDisposed()) {
+				error(SWT.ERROR_DEVICE_DISPOSED);
+			}
+			return thread;
+		}
+	}
+
+	/**	 
+	 * Returns true if a touch-aware input device is attached to the system,
+	 * enabled, and ready for use.
+	 * 
+	 * @since 3.7
+	 */
+	public boolean getTouchEnabled() {
+		checkDevice();
+		return false;
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Display</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the platform specific GC data
+	 * @return the platform specific GC handle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTError
+	 *                <ul>
+	 *                <li>ERROR_NO_HANDLES if a handle could not be obtained for
+	 *                gc creation</li>
+	 *                </ul>
+	 */
+	@Override
+	public QPaintDeviceInterface internal_new_GC(GCData data) {
+		if (isDisposed()) {
+			SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+		}
+		return new QPicture();
+	}
+
+	/**
+	 * Invokes platform specific functionality to dispose a GC handle.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Display</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param hDC
+	 *            the platform specific GC handle
+	 * @param data
+	 *            the platform specific GC data
+	 */
+	@Override
+	public void internal_dispose_GC(QPaintDeviceInterface paintDevice, GCData data) {
+		// nothing
+	}
+
+	boolean isValidThread() {
+		return thread == Thread.currentThread();
+	}
+
+	/**
+	 * Maps a point from one coordinate system to another. When the control is
+	 * null, coordinates are mapped to the display.
+	 * <p>
+	 * NOTE: On right-to-left platforms where the coordinate systems are
+	 * mirrored, special care needs to be taken when mapping coordinates from
+	 * one control to another to ensure the result is correctly mirrored.
+	 * 
+	 * Mapping a point that is the origin of a rectangle and then adding the
+	 * width and height is not equivalent to mapping the rectangle. When one
+	 * control is mirrored and the other is not, adding the width and height to
+	 * a point that was mapped causes the rectangle to extend in the wrong
+	 * direction. Mapping the entire rectangle instead of just one point causes
+	 * both the origin and the corner of the rectangle to be mapped.
+	 * </p>
+	 * 
+	 * @param from
+	 *            the source <code>Control</code> or <code>null</code>
+	 * @param to
+	 *            the destination <code>Control</code> or <code>null</code>
+	 * @param point
+	 *            to be mapped
+	 * @return point with mapped coordinates
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the Control from or the
+	 *                Control to have been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public Point map(Control from, Control to, Point point) {
+		checkDevice();
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return map(from, to, point.x, point.y);
+	}
+
+	/**
+	 * Maps a point from one coordinate system to another. When the control is
+	 * null, coordinates are mapped to the display.
+	 * <p>
+	 * NOTE: On right-to-left platforms where the coordinate systems are
+	 * mirrored, special care needs to be taken when mapping coordinates from
+	 * one control to another to ensure the result is correctly mirrored.
+	 * 
+	 * Mapping a point that is the origin of a rectangle and then adding the
+	 * width and height is not equivalent to mapping the rectangle. When one
+	 * control is mirrored and the other is not, adding the width and height to
+	 * a point that was mapped causes the rectangle to extend in the wrong
+	 * direction. Mapping the entire rectangle instead of just one point causes
+	 * both the origin and the corner of the rectangle to be mapped.
+	 * </p>
+	 * 
+	 * @param from
+	 *            the source <code>Control</code> or <code>null</code>
+	 * @param to
+	 *            the destination <code>Control</code> or <code>null</code>
+	 * @param x
+	 *            coordinates to be mapped
+	 * @param y
+	 *            coordinates to be mapped
+	 * @return point with mapped coordinates
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the Control from or the
+	 *                Control to have been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public Point map(Control from, Control to, int x, int y) {
+		checkDevice();
+		if (from != null && from.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (to != null && to.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (from == to) {
+			return new Point(x, y);
+		}
+
+		Point point = null;
+		if (to != null && from != null) {
+			point = from.toDisplay(x, y);
+			point = to.toControl(x, y);
+		} else if (to != null) {
+			point = to.toControl(x, y);
+		} else if (from != null) {
+			point = from.toDisplay(x, y);
+		} else {
+			point = new Point(x, y);
+		}
+		return point;
+	}
+
+	/**
+	 * Maps a point from one coordinate system to another. When the control is
+	 * null, coordinates are mapped to the display.
+	 * <p>
+	 * NOTE: On right-to-left platforms where the coordinate systems are
+	 * mirrored, special care needs to be taken when mapping coordinates from
+	 * one control to another to ensure the result is correctly mirrored.
+	 * 
+	 * Mapping a point that is the origin of a rectangle and then adding the
+	 * width and height is not equivalent to mapping the rectangle. When one
+	 * control is mirrored and the other is not, adding the width and height to
+	 * a point that was mapped causes the rectangle to extend in the wrong
+	 * direction. Mapping the entire rectangle instead of just one point causes
+	 * both the origin and the corner of the rectangle to be mapped.
+	 * </p>
+	 * 
+	 * @param from
+	 *            the source <code>Control</code> or <code>null</code>
+	 * @param to
+	 *            the destination <code>Control</code> or <code>null</code>
+	 * @param rectangle
+	 *            to be mapped
+	 * @return rectangle with mapped coordinates
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the Control from or the
+	 *                Control to have been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public Rectangle map(Control from, Control to, Rectangle rectangle) {
+		checkDevice();
+		if (rectangle == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return map(from, to, rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+	}
+
+	/**
+	 * Maps a point from one coordinate system to another. When the control is
+	 * null, coordinates are mapped to the display.
+	 * <p>
+	 * NOTE: On right-to-left platforms where the coordinate systems are
+	 * mirrored, special care needs to be taken when mapping coordinates from
+	 * one control to another to ensure the result is correctly mirrored.
+	 * 
+	 * Mapping a point that is the origin of a rectangle and then adding the
+	 * width and height is not equivalent to mapping the rectangle. When one
+	 * control is mirrored and the other is not, adding the width and height to
+	 * a point that was mapped causes the rectangle to extend in the wrong
+	 * direction. Mapping the entire rectangle instead of just one point causes
+	 * both the origin and the corner of the rectangle to be mapped.
+	 * </p>
+	 * 
+	 * @param from
+	 *            the source <code>Control</code> or <code>null</code>
+	 * @param to
+	 *            the destination <code>Control</code> or <code>null</code>
+	 * @param x
+	 *            coordinates to be mapped
+	 * @param y
+	 *            coordinates to be mapped
+	 * @param width
+	 *            coordinates to be mapped
+	 * @param height
+	 *            coordinates to be mapped
+	 * @return rectangle with mapped coordinates
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the Control from or the
+	 *                Control to have been disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public Rectangle map(Control from, Control to, int x, int y, int width, int height) {
+		checkDevice();
+		if (from != null && from.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (to != null && to.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (from == to) {
+			return new Rectangle(x, y, width, height);
+		}
+
+		Rectangle rectangle = new Rectangle(x, y, width, height);
+		if (to != null && from != null) {
+			Point topLeft = from.toDisplay(x, y);
+			topLeft = to.toControl(topLeft);
+			rectangle.x = topLeft.x;
+			rectangle.y = topLeft.y;
+		} else if (to != null) {
+			Point topLeft = to.toControl(x, y);
+			rectangle.x = topLeft.x;
+			rectangle.y = topLeft.y;
+		} else if (from != null) {
+			Point topLeft = from.toDisplay(x, y);
+			rectangle.x = topLeft.x;
+			rectangle.y = topLeft.y;
+		}
+		return rectangle;
+	}
+
+	/**
+	 * Generate a low level system event.
+	 * 
+	 * <code>post</code> is used to generate low level keyboard and mouse
+	 * events. The intent is to enable automated UI testing by simulating the
+	 * input from the user. Most SWT applications should never need to call this
+	 * method.
+	 * <p>
+	 * Note that this operation can fail when the operating system fails to
+	 * generate the event for any reason. For example, this can happen when
+	 * there is no such key or mouse button or when the system event queue is
+	 * full.
+	 * </p>
+	 * <p>
+	 * <b>Event Types:</b>
+	 * <p>
+	 * KeyDown, KeyUp
+	 * <p>
+	 * The following fields in the <code>Event</code> apply:
+	 * <ul>
+	 * <li>(in) type KeyDown or KeyUp</li>
+	 * <p>
+	 * Either one of:
+	 * <li>(in) character a character that corresponds to a keyboard key</li>
+	 * <li>(in) keyCode the key code of the key that was typed, as defined by
+	 * the key code constants in class <code>SWT</code></li>
+	 * </ul>
+	 * <p>
+	 * MouseDown, MouseUp
+	 * </p>
+	 * <p>
+	 * The following fields in the <code>Event</code> apply:
+	 * <ul>
+	 * <li>(in) type MouseDown or MouseUp
+	 * <li>(in) button the button that is pressed or released
+	 * </ul>
+	 * <p>
+	 * MouseMove
+	 * </p>
+	 * <p>
+	 * The following fields in the <code>Event</code> apply:
+	 * <ul>
+	 * <li>(in) type MouseMove
+	 * <li>(in) x the x coordinate to move the mouse pointer to in screen
+	 * coordinates
+	 * <li>(in) y the y coordinate to move the mouse pointer to in screen
+	 * coordinates
+	 * </ul>
+	 * <p>
+	 * MouseWheel
+	 * </p>
+	 * <p>
+	 * The following fields in the <code>Event</code> apply:
+	 * <ul>
+	 * <li>(in) type MouseWheel
+	 * <li>(in) detail either SWT.SCROLL_LINE or SWT.SCROLL_PAGE
+	 * <li>(in) count the number of lines or pages to scroll
+	 * </ul>
+	 * </dl>
+	 * 
+	 * @param event
+	 *            the event to be generated
+	 * 
+	 * @return true if the event was generated or false otherwise
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the event is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 * 
+	 */
+	public boolean post(Event event) {
+		if (isDisposed()) {
+			error(SWT.ERROR_DEVICE_DISPOSED);
+		}
+		if (event == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		QWidget control = getControlForEvent(event);
+		if (control == null) {
+			return false;
+		}
+
+		QEvent qtEvent = createQEvent(event, control);
+		if (event == null) {
+			return false;
+		}
+
+		QApplication.postEvent(control, qtEvent);
+		return true;
+
+	}
+
+	private QWidget getControlForEvent(Event event) {
+		if (event.widget != null) {
+			return event.widget.getQWidget();
+		}
+		return QApplication.focusWidget();
+	}
+
+	private QEvent createQEvent(Event event, QWidget focusWidget) {
+		KeyboardModifiers modifiers = mapSWTModifier2Qt(event.stateMask);
+		Type type = mapSWTEventType2Qt(event.type);
+
+		switch (type) {
+		case KeyPress:
+		case KeyRelease:
+			return createQKeyEvent(event, type, modifiers);
+		case MouseButtonPress:
+		case MouseMove:
+		case MouseButtonRelease:
+		case MouseButtonDblClick:
+			return createQMouseEvent(event, type, modifiers, focusWidget);
+		}
+		return null;
+	}
+
+	private QEvent createQMouseEvent(Event event, Type type, KeyboardModifiers modifiers, QWidget focusWidget) {
+		Control widget = (Control) findControl(focusWidget);
+		if ((widget.getStyle() & SWT.MIRRORED) != 0) {
+			event.x = widget.getClientWidth() - event.x;
+		}
+
+		QPoint eventPoint = new QPoint(event.x, event.y);
+		QPoint global = focusWidget.mapToGlobal(eventPoint);
+		MouseButton button = mapSWTButton2Qt(event.button);
+		if (!type.equals(Type.MouseMove) && button.equals(MouseButton.NoButton)) {
+			return null;
+		}
+		return new QMouseEvent(type, eventPoint, global, button, MouseButton.createQFlags(button), modifiers);
+	}
+
+	private QEvent createQKeyEvent(Event event, Type type, KeyboardModifiers modifiers) {
+		// If neither keyCode nor character is given then abort
+		if (event.keyCode == 0 && event.character == 0) {
+			return null;
+		}
+
+		// Primarily try to map the keyCode to Qt:Key
+		int key = KeyUtil.untranslateKey(event.keyCode);
+		// If keyCode was given in the Event
+		if (event.keyCode != 0) {
+			// Given keyCode couldn't be translated, use it directly
+			if (key == 0) {
+				key = event.keyCode;
+			}
+		}
+
+		// Secondarily if keyCode couldn't be mapped try the character
+		if (key == 0) {
+			switch (event.character) {
+			case SWT.BS:
+				key = Key.Key_Backspace.value();
+				break;
+			case SWT.CR:
+				key = Key.Key_Return.value();
+				break;
+			case SWT.DEL:
+				key = Key.Key_Delete.value();
+				break;
+			case SWT.ESC:
+				key = Key.Key_Escape.value();
+				break;
+			case SWT.TAB:
+				key = Key.Key_Tab.value();
+				break;
+			/*
+			 * Since there is no LF key on the keyboard, do not attempt to map
+			 * LF to CR or attempt to post an LF key.
+			 */
+			case SWT.LF:
+				return null;
+			default:
+				key = Character.toUpperCase(event.character);
+				break;
+			}
+		}
+		return new QKeyEvent(type, key, modifiers, String.valueOf(event.character));
+	}
+
+	private static KeyboardModifiers mapSWTModifier2Qt(int modifiers) {
+		int nativeModifiers = 0;
+		if ((modifiers & SWT.ALT) != 0) {
+			nativeModifiers |= KeyboardModifier.AltModifier.value();
+		}
+		if ((modifiers & SWT.SHIFT) != 0) {
+			nativeModifiers |= KeyboardModifier.ShiftModifier.value();
+		}
+		if ((modifiers & SWT.CONTROL) != 0) {
+			nativeModifiers |= KeyboardModifier.ControlModifier.value();
+		}
+		return new KeyboardModifiers(nativeModifiers);
+	}
+
+	private static QEvent.Type mapSWTEventType2Qt(int type) {
+		switch (type) {
+		case SWT.KeyDown:
+			return Type.KeyPress;
+		case SWT.KeyUp:
+			return Type.KeyRelease;
+		case SWT.MouseDown:
+			return Type.MouseButtonPress;
+		case SWT.MouseMove:
+			return Type.MouseMove;
+		case SWT.MouseUp:
+			return Type.MouseButtonRelease;
+		case SWT.MouseDoubleClick:
+			return Type.MouseButtonDblClick;
+		default:
+			return Type.None;
+		}
+	}
+
+	private static MouseButton mapSWTButton2Qt(int button) {
+		switch (button) {
+		case 1:
+			return MouseButton.LeftButton;
+		case 2:
+			return MouseButton.MidButton;
+		case 3:
+			return MouseButton.RightButton;
+		default:
+			return MouseButton.NoButton;
+		}
+	}
+
+	void postEvent(Event event) {
+		/*
+		 * Place the event at the end of the event queue. This code is always
+		 * called in the Display's thread so it must be re-enterant but does not
+		 * need to be synchronized.
+		 */
+		if (eventQueue == null) {
+			eventQueue = new Event[4];
+		}
+		int index = 0;
+		int length = eventQueue.length;
+		while (index < length) {
+			if (eventQueue[index] == null) {
+				break;
+			}
+			index++;
+		}
+		if (index == length) {
+			Event[] newQueue = new Event[length + 4];
+			System.arraycopy(eventQueue, 0, newQueue, 0, length);
+			eventQueue = newQueue;
+		}
+		eventQueue[index] = event;
+	}
+
+	/**
+	 * Reads an event from the operating system's event queue, dispatches it
+	 * appropriately, and returns <code>true</code> if there is potentially more
+	 * work to do, or <code>false</code> if the caller can sleep until another
+	 * event is placed on the event queue.
+	 * <p>
+	 * In addition to checking the system event queue, this method also checks
+	 * if any inter-thread messages (created by <code>syncExec()</code> or
+	 * <code>asyncExec()</code>) are waiting to be processed, and if so handles
+	 * them before returning.
+	 * </p>
+	 * 
+	 * @return <code>false</code> if the caller can sleep upon return from this
+	 *         method
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_FAILED_EXEC - if an exception occurred while
+	 *                running an inter-thread message</li>
+	 *                </ul>
+	 * 
+	 * @see #sleep
+	 * @see #wake
+	 */
+	public boolean readAndDispatch() {
+		checkDevice();
+		//		runPopups();
+		//		boolean canSleep = runAsyncMessages(false);
+		//		if (!canSleep) {
+		//			QApplication.processEvents();
+		//		}
+		//		return canSleep;
+
+		if (QApplication.hasPendingEvents()) {
+			QApplication.processEvents();//ProcessEventsFlag.AllEvents
+			if (isDisposed()) {
+				return false;
+			}
+			QApplication.sendPostedEvents();
+		}
+		if (isDisposed()) {
+			return false;
+		}
+
+		runDeferredEvents();
+
+		if (isDisposed()) {
+			return false;
+		}
+
+		runPopups();
+
+		if (isDisposed()) {
+			return false;
+		}
+
+		return runAsyncMessages(false);
+	}
+
+	private static void register(Display display) {
+		synchronized (Device.class) {
+			for (int i = 0; i < Displays.length; i++) {
+				if (Displays[i] == null) {
+					Displays[i] = display;
+					return;
+				}
+			}
+			Display[] newDisplays = new Display[Displays.length + 4];
+			System.arraycopy(Displays, 0, newDisplays, 0, Displays.length);
+			newDisplays[Displays.length] = display;
+			Displays = newDisplays;
+		}
+	}
+
+	/**
+	 * Releases any internal resources back to the operating system and clears
+	 * all fields except the device handle.
+	 * <p>
+	 * Disposes all shells which are currently open on the display. After this
+	 * method has been invoked, all related related shells will answer
+	 * <code>true</code> when sent the message <code>isDisposed()</code>.
+	 * </p>
+	 * <p>
+	 * When a device is destroyed, resources that were acquired on behalf of the
+	 * programmer need to be returned to the operating system. For example, if
+	 * the device allocated a font to be used as the system font, this font
+	 * would be freed in <code>release</code>. Also,to assist the garbage
+	 * collector and minimize the amount of memory that is not reclaimed when
+	 * the programmer keeps a reference to a disposed device, all fields except
+	 * the handle are zero'd. The handle is needed by <code>destroy</code>.
+	 * </p>
+	 * This method is called before <code>destroy</code>.
+	 * 
+	 * @see Device#dispose
+	 * @see #destroy
+	 */
+	@Override
+	protected void release() {
+		sendEvent(SWT.Dispose, new Event());
+		Shell[] shells = getShells();
+		for (int i = 0; i < shells.length; i++) {
+			Shell shell = shells[i];
+			if (!shell.isDisposed()) {
+				shell.dispose();
+			}
+		}
+		if (tray != null) {
+			tray.dispose();
+		}
+		tray = null;
+		while (readAndDispatch()) {
+		}
+		if (disposeList != null) {
+			for (int i = 0; i < disposeList.length; i++) {
+				if (disposeList[i] != null) {
+					disposeList[i].run();
+				}
+			}
+		}
+		disposeList = null;
+		synchronizer.releaseSynchronizer();
+		synchronizer = null;
+		releaseDisplay();
+		super.release();
+	}
+
+	private void releaseDisplay() {
+		/* Release the System fonts */
+		if (systemFont != null) {
+			systemFont.dispose();
+		}
+		systemFont = null;
+
+		/* Release the System Images */
+		if (errorImage != null) {
+			errorImage.dispose();
+		}
+		if (infoImage != null) {
+			infoImage.dispose();
+		}
+		if (questionImage != null) {
+			questionImage.dispose();
+		}
+		if (warningIcon != null) {
+			warningIcon.dispose();
+		}
+		errorImage = infoImage = questionImage = warningIcon = null;
+
+		/* Release the System Cursors */
+		for (int i = 0; i < cursors.length; i++) {
+			if (cursors[i] != null) {
+				cursors[i].dispose();
+			}
+		}
+		cursors = null;
+
+		/* Release references */
+		thread = null;
+		modalDialog = null;
+		modalShells = null;
+		data = null;
+		keys = null;
+		values = null;
+		bars = popups = null;
+		timerIds = null;
+		timerList = null;
+		eventTable = filterTable = null;
+		items = null;
+
+		/* Release handles */
+		threadId = 0;
+		QApplication.quit();
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when an event of the given type occurs anywhere in a widget. The
+	 * event type is one of the event constants defined in class
+	 * <code>SWT</code>.
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @param listener
+	 *            the listener which should no longer be notified when the event
+	 *            occurs
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see SWT
+	 * @see #addFilter
+	 * @see #addListener
+	 * 
+	 * @since 3.0
+	 */
+	public void removeFilter(int eventType, Listener listener) {
+		checkDevice();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (filterTable == null) {
+			return;
+		}
+		filterTable.unhook(eventType, listener);
+		if (filterTable.size() == 0) {
+			filterTable = null;
+		}
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when an event of the given type occurs. The event type is one of
+	 * the event constants defined in class <code>SWT</code>.
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see SWT
+	 * @see #addListener
+	 * 
+	 * @since 2.0
+	 */
+	public void removeListener(int eventType, Listener listener) {
+		checkDevice();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(eventType, listener);
+	}
+
+	void removeBar(Menu menu) {
+		if (bars == null) {
+			return;
+		}
+		for (int i = 0; i < bars.length; i++) {
+			if (bars[i] == menu) {
+				bars[i] = null;
+				return;
+			}
+		}
+	}
+
+	void removeMenuItem(MenuItem item) {
+		if (items == null) {
+			return;
+		}
+		items[item.id - ID_START] = null;
+	}
+
+	void removePopup(Menu menu) {
+		if (popups == null) {
+			return;
+		}
+		for (int i = 0; i < popups.length; i++) {
+			if (popups[i] == menu) {
+				popups[i] = null;
+				return;
+			}
+		}
+	}
+
+	private boolean runAsyncMessages(boolean all) {
+		return synchronizer.runAsyncMessages(all);
+	}
+
+	private boolean runDeferredEvents() {
+		boolean run = false;
+		/*
+		 * Run deferred events. This code is always called in the Display's
+		 * thread so it must be re-enterant but need not be synchronized.
+		 */
+		while (eventQueue != null) {
+
+			/* Take an event off the queue */
+			Event event = eventQueue[0];
+			if (event == null) {
+				break;
+			}
+			int length = eventQueue.length;
+			System.arraycopy(eventQueue, 1, eventQueue, 0, --length);
+			eventQueue[length] = null;
+
+			/* Run the event */
+			Widget widget = event.widget;
+			if (widget != null && !widget.isDisposed()) {
+				Widget item = event.item;
+				if (item == null || !item.isDisposed()) {
+					run = true;
+					widget.sendEvent(event);
+				}
+			}
+
+			/*
+			 * At this point, the event queue could be null due to a recursive
+			 * invocation when running the event.
+			 */
+		}
+
+		/* Clear the queue */
+		eventQueue = null;
+		return run;
+	}
+
+	private boolean runPopups() {
+		if (popups == null) {
+			return false;
+		}
+		boolean result = false;
+		while (popups != null) {
+			Menu menu = popups[0];
+			if (menu == null) {
+				break;
+			}
+			int length = popups.length;
+			System.arraycopy(popups, 1, popups, 0, --length);
+			popups[length] = null;
+			if (!menu.isDisposed()) {
+				menu._setVisible(true);
+			}
+			result = true;
+		}
+		popups = null;
+		return result;
+	}
+
+	private boolean runTimer(int /* long */id) {
+		if (timerList != null && timerIds != null) {
+			int index = 0;
+			while (index < timerIds.length) {
+				if (timerIds[index] == id && timerIds[index] != -1) {
+					timer.killTimer(timerIds[index]);
+					timerIds[index] = 0;
+					Runnable runnable = timerList[index];
+					timerList[index] = null;
+					if (runnable != null) {
+						runnable.run();
+					}
+					return true;
+				}
+				index++;
+			}
+		}
+		return false;
+	}
+
+	private void sendEvent(int eventType, Event event) {
+		if (eventTable == null && filterTable == null) {
+			return;
+		}
+		if (event == null) {
+			event = new Event();
+		}
+		event.display = this;
+		event.type = eventType;
+		if (event.time == 0) {
+			event.time = getLastEventTime();
+		}
+		if (!filterEvent(event)) {
+			if (eventTable != null) {
+				eventTable.sendEvent(event);
+			}
+		}
+	}
+
+	/**
+	 * Sets the location of the on-screen pointer relative to the top left
+	 * corner of the screen. <b>Note: It is typically considered bad practice
+	 * for a program to move the on-screen pointer location.</b>
+	 * 
+	 * @param x
+	 *            the new x coordinate for the cursor
+	 * @param y
+	 *            the new y coordinate for the cursor
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public void setCursorLocation(int x, int y) {
+		checkDevice();
+		QCursor.setPos(x, y);
+	}
+
+	/**
+	 * Sets the location of the on-screen pointer relative to the top left
+	 * corner of the screen. <b>Note: It is typically considered bad practice
+	 * for a program to move the on-screen pointer location.</b>
+	 * 
+	 * @param point
+	 *            new position
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 */
+	public void setCursorLocation(Point point) {
+		checkDevice();
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setCursorLocation(point.x, point.y);
+	}
+
+	/**
+	 * Sets the application defined property of the receiver with the specified
+	 * name to the given argument.
+	 * <p>
+	 * Applications may have associated arbitrary objects with the receiver in
+	 * this fashion. If the objects stored in the properties need to be notified
+	 * when the display is disposed of, it is the application's responsibility
+	 * provide a <code>disposeExec()</code> handler which does so.
+	 * </p>
+	 * 
+	 * @param key
+	 *            the name of the property
+	 * @param value
+	 *            the new value for the property
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #getData(String)
+	 * @see #disposeExec(Runnable)
+	 */
+	public void setData(String key, Object value) {
+		checkDevice();
+		if (key == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		if (SWQT.STYLESHEET_KEY.equals(key)) {
+			setStyleSheet((String) value);
+		}
+
+		/* Remove the key/value pair */
+		if (value == null) {
+			if (keys == null) {
+				return;
+			}
+			int index = 0;
+			while (index < keys.length && !keys[index].equals(key)) {
+				index++;
+			}
+			if (index == keys.length) {
+				return;
+			}
+			if (keys.length == 1) {
+				keys = null;
+				values = null;
+			} else {
+				String[] newKeys = new String[keys.length - 1];
+				Object[] newValues = new Object[values.length - 1];
+				System.arraycopy(keys, 0, newKeys, 0, index);
+				System.arraycopy(keys, index + 1, newKeys, index, newKeys.length - index);
+				System.arraycopy(values, 0, newValues, 0, index);
+				System.arraycopy(values, index + 1, newValues, index, newValues.length - index);
+				keys = newKeys;
+				values = newValues;
+			}
+			return;
+		}
+
+		/* Add the key/value pair */
+		if (keys == null) {
+			keys = new String[] { key };
+			values = new Object[] { value };
+			return;
+		}
+		for (int i = 0; i < keys.length; i++) {
+			if (keys[i].equals(key)) {
+				values[i] = value;
+				return;
+			}
+		}
+		String[] newKeys = new String[keys.length + 1];
+		Object[] newValues = new Object[values.length + 1];
+		System.arraycopy(keys, 0, newKeys, 0, keys.length);
+		System.arraycopy(values, 0, newValues, 0, values.length);
+		newKeys[keys.length] = key;
+		newValues[values.length] = value;
+		keys = newKeys;
+		values = newValues;
+	}
+
+	/**
+	 * Sets the application defined, display specific data associated with the
+	 * receiver, to the argument. The <em>display specific data</em> is a
+	 * single, unnamed field that is stored with every display.
+	 * <p>
+	 * Applications may put arbitrary objects in this field. If the object
+	 * stored in the display specific data needs to be notified when the display
+	 * is disposed of, it is the application's responsibility provide a
+	 * <code>disposeExec()</code> handler which does so.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the new display specific data
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #getData()
+	 * @see #disposeExec(Runnable)
+	 */
+	public void setData(Object data) {
+		checkDevice();
+		this.data = data;
+	}
+
+	/**
+	 * On platforms which support it, sets the application name to be the
+	 * argument. On Motif, for example, this can be used to set the name used
+	 * for resource lookup. Specifying <code>null</code> for the name clears it.
+	 * 
+	 * @param name
+	 *            the new app name or <code>null</code>
+	 */
+	public static void setAppName(String name) {
+		QApplication.setApplicationName(name);
+	}
+
+	void setModalDialog(Dialog modalDailog) {
+		this.modalDialog = modalDailog;
+		Shell[] shells = getShells();
+		for (int i = 0; i < shells.length; i++) {
+			shells[i].updateModal();
+		}
+	}
+
+	void setModalShell(Shell shell) {
+		if (modalShells == null) {
+			modalShells = new Shell[4];
+		}
+		int index = 0, length = modalShells.length;
+		while (index < length) {
+			if (modalShells[index] == shell) {
+				return;
+			}
+			if (modalShells[index] == null) {
+				break;
+			}
+			index++;
+		}
+		if (index == length) {
+			Shell[] newModalShells = new Shell[length + 4];
+			System.arraycopy(modalShells, 0, newModalShells, 0, length);
+			modalShells = newModalShells;
+		}
+		modalShells[index] = shell;
+		Shell[] shells = getShells();
+		for (int i = 0; i < shells.length; i++) {
+			shells[i].updateModal();
+		}
+	}
+
+	/**
+	 * Sets the synchronizer used by the display to be the argument, which can
+	 * not be null.
+	 * 
+	 * @param synchronizer
+	 *            the new synchronizer for the display (must not be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the synchronizer is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_FAILED_EXEC - if an exception occurred while
+	 *                running an inter-thread message</li>
+	 *                </ul>
+	 */
+	public void setSynchronizer(Synchronizer synchronizer) {
+		checkDevice();
+		if (synchronizer == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (synchronizer == this.synchronizer) {
+			return;
+		}
+		Synchronizer oldSynchronizer;
+		synchronized (Device.class) {
+			oldSynchronizer = this.synchronizer;
+			this.synchronizer = synchronizer;
+		}
+		if (oldSynchronizer != null) {
+			oldSynchronizer.runAsyncMessages(true);
+		}
+	}
+
+	/**
+	 * Causes the user-interface thread to <em>sleep</em> (that is, to be put in
+	 * a state where it does not consume CPU cycles) until an event is received
+	 * or it is otherwise awakened.
+	 * 
+	 * @return <code>true</code> if an event requiring dispatching was placed on
+	 *         the queue.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #wake
+	 */
+	public boolean sleep() {
+		checkDevice();
+		if (getMessageCount() != 0) {
+			return true;
+		}
+
+		try {
+			Thread.sleep(10);
+		} catch (InterruptedException e) {
+			// awake
+		}
+		QApplication.processEvents(PROCESS_EVENTS_FLAGS, 1000);
+
+		if (isDisposed()) {
+			destroy();
+		}
+		return true;
+	}
+
+	/**
+	 * Causes the <code>run()</code> method of the runnable to be invoked by the
+	 * user-interface thread at the next reasonable opportunity. The thread
+	 * which calls this method is suspended until the runnable completes.
+	 * Specifying <code>null</code> as the runnable simply wakes the
+	 * user-interface thread.
+	 * <p>
+	 * Note that at the time the runnable is invoked, widgets that have the
+	 * receiver as their display may have been disposed. Therefore, it is
+	 * necessary to check for this case inside the runnable before accessing the
+	 * widget.
+	 * </p>
+	 * 
+	 * @param runnable
+	 *            code to run on the user-interface thread or <code>null</code>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_FAILED_EXEC - if an exception occurred when
+	 *                executing the runnable</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #asyncExec
+	 */
+	public void syncExec(Runnable runnable) {
+		Synchronizer synchronizer;
+		synchronized (Device.class) {
+			if (isDisposed()) {
+				error(SWT.ERROR_DEVICE_DISPOSED);
+			}
+			synchronizer = this.synchronizer;
+		}
+		synchronizer.syncExec(runnable);
+	}
+
+	/**
+	 * Causes the <code>run()</code> method of the runnable to be invoked by the
+	 * user-interface thread after the specified number of milliseconds have
+	 * elapsed. If milliseconds is less than zero, the runnable is not executed.
+	 * <p>
+	 * Note that at the time the runnable is invoked, widgets that have the
+	 * receiver as their display may have been disposed. Therefore, it is
+	 * necessary to check for this case inside the runnable before accessing the
+	 * widget.
+	 * </p>
+	 * 
+	 * @param milliseconds
+	 *            the delay before running the runnable
+	 * @param runnable
+	 *            code to run on the user-interface thread
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the runnable is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #asyncExec
+	 */
+
+	public void timerExec(int milliseconds, Runnable runnable) {
+		checkDevice();
+		timer = new QTimer();
+
+		if (runnable == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (timerList == null) {
+			timerList = new Runnable[4];
+		}
+		if (timerIds == null) {
+			timerIds = new int /* long */[4];
+		}
+		int index = 0;
+		while (index < timerList.length) {
+			if (timerList[index] == runnable) {
+				break;
+			}
+			index++;
+		}
+		int /* long */timerId = 0;
+		if (index != timerList.length) {
+			timerId = timerIds[index];
+			if (milliseconds < 0) {
+				timer.killTimer(timerId);
+				timerList[index] = null;
+				timerIds[index] = 0;
+				return;
+			}
+		} else {
+			if (milliseconds < 0) {
+				return;
+			}
+			index = 0;
+			while (index < timerList.length) {
+				if (timerList[index] == null) {
+					break;
+				}
+				index++;
+			}
+			timerId = nextTimerId++;
+			if (index == timerList.length) {
+				Runnable[] newTimerList = new Runnable[timerList.length + 4];
+				System.arraycopy(timerList, 0, newTimerList, 0, timerList.length);
+				timerList = newTimerList;
+				int /* long */[] newTimerIds = new int /* long */[timerIds.length + 4];
+				System.arraycopy(timerIds, 0, newTimerIds, 0, timerIds.length);
+				timerIds = newTimerIds;
+			}
+		}
+
+		timer.setSingleShot(false);
+		timer.start(milliseconds);
+		final QTimerEvent qte = new QTimerEvent(timer.timerId());
+		timer.timeout.connect(new QObject() {
+			private int id = qte.timerId();
+
+			@SuppressWarnings("unused")
+			protected void idTransfer() {
+				runTimer(id);
+			}
+		}, "idTransfer()"); //$NON-NLS-1$
+		timerList[index] = runnable;
+		timerIds[index] = timer.timerId();
+	}
+
+	/**
+	 * Forces all outstanding paint requests for the display to be processed
+	 * before this method returns.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see Control#update()
+	 */
+	public void update() {
+		checkDevice();
+		if (QApplication.hasPendingEvents()) {
+			QApplication.processEvents(QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents);
+		}
+	}
+
+	/**
+	 * If the receiver's user-interface thread was <code>sleep</code>ing, causes
+	 * it to be awakened and start running again. Note that this method may be
+	 * called from any thread.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_DEVICE_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 * 
+	 * @see #sleep
+	 */
+	public void wake() {
+		synchronized (Device.class) {
+			if (isDisposed()) {
+				error(SWT.ERROR_DEVICE_DISPOSED);
+			}
+			if (thread == Thread.currentThread()) {
+				return;
+			}
+			wakeThread();
+		}
+	}
+
+	void wakeThread() {
+		try {
+			thread.notify();
+		} catch (Exception e) {
+			// ok
+		}
+	}
+
+	static String withCrLf(String string) {
+
+		/* If the string is empty, return the string. */
+		int length = string.length();
+		if (length == 0) {
+			return string;
+		}
+
+		/*
+		 * Check for an LF or CR/LF and assume the rest of the string is
+		 * formated that way. This will not work if the string contains mixed
+		 * delimiters.
+		 */
+		int i = string.indexOf('\n', 0);
+		if (i == -1) {
+			return string;
+		}
+		if (i > 0 && string.charAt(i - 1) == '\r') {
+			return string;
+		}
+
+		/*
+		 * The string is formatted with LF. Compute the number of lines and the
+		 * size of the buffer needed to hold the result
+		 */
+		i++;
+		int count = 1;
+		while (i < length) {
+			if ((i = string.indexOf('\n', i)) == -1) {
+				break;
+			}
+			count++;
+			i++;
+		}
+		count += length;
+
+		/* Create a new string with the CR/LF line terminator. */
+		i = 0;
+		StringBuffer result = new StringBuffer(count);
+		while (i < length) {
+			int j = string.indexOf('\n', i);
+			if (j == -1) {
+				j = length;
+			}
+			result.append(string.substring(i, j));
+			if ((i = j) < length) {
+				result.append("\r\n"); //$NON-NLS-1$
+				i++;
+			}
+		}
+		return result.toString();
+	}
+
+	private final class MasterEventFilter extends QObject {
+		private final Display display;
+		private final boolean printEvents = Boolean.getBoolean("swtqt.printEvents"); //$NON-NLS-1$
+
+		public MasterEventFilter(Display display) {
+			this.display = display;
+		}
+
+		@Override
+		public boolean eventFilter(QObject obj, QEvent event) {
+			try {
+				if (printEvents) {
+					System.out.println("QObject: " + (obj == null ? "null" : obj.toString()) + ": " + event.toString()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				}
+				lastEventTime = QTime.currentTime().elapsed();
+				Widget eventSource = display.findControl(obj);
+				if (eventSource == null) {
+					//					if (event.type() == Type.Paint) {
+					//						System.out.println("paint event for qObj: " + obj + " unknown swt source"); //$NON-NLS-1$ //$NON-NLS-2$
+					//					}
+					if (printEvents) {
+						System.err.println("unknown event source: " + obj + " parent: " //$NON-NLS-1$ //$NON-NLS-2$
+								+ (obj == null ? "null" : obj.parent())); //$NON-NLS-1$
+					}
+					return false;
+				}
+				switch (event.type()) {
+				case Paint:
+					if (printEvents) {
+						System.out.println("paint event for qObj: " + obj + " swt: " + eventSource); //$NON-NLS-1$ //$NON-NLS-2$
+					}
+					if (ignorePaintEvents) {
+						return false;
+					}
+					return eventSource.qtPaintEvent(obj, (QPaintEvent) event);
+				case Resize:
+					return eventSource.qtResizeEvent(obj, (QResizeEvent) event);
+				case Move:
+					return eventSource.qtMoveEvent(obj, (QMoveEvent) event);
+				case FocusIn:
+					eventSource.qtFocusInEvent(obj);
+					return false;
+				case FocusOut:
+					eventSource.qtFocusOutEvent(obj);
+					return false;
+				case ContextMenu: {
+					QContextMenuEvent contextEvent = (QContextMenuEvent) event;
+					boolean accepted = eventSource.qtContextMenuEvent(obj, contextEvent);
+					if (accepted) {
+						contextEvent.setAccepted(true);
+					}
+					return accepted;
+				}
+				case Close:
+					QCloseEvent closeEvent = (QCloseEvent) event;
+					boolean accepted = eventSource.qtCloseEvent();
+					if (accepted) {
+						closeEvent.ignore();
+					}
+					return accepted;
+				case Enter:
+					return eventSource.qtMouseEnterEvent(obj);
+				case Leave:
+					return eventSource.qtMouseLeaveEvent(obj);
+				case Show:
+					return eventSource.qtShowEvent(obj);
+				case Hide:
+					return eventSource.qtHideEvent(obj);
+				case MouseMove:
+					return eventSource.qtMouseMoveEvent(obj, (QMouseEvent) event);
+				case MouseButtonPress:
+					QMouseEvent mouseEvent = (QMouseEvent) event;
+					// for debug
+					//				QWidget widget = QApplication.widgetAt(mouseEvent.globalX(), mouseEvent.globalY());
+					//				System.out.println("mouse click on: " + widget);
+					//				System.out.println("mouse click on swt widget: " + display.findControl(widget));
+					return eventSource.qtMouseButtonPressEvent(obj, mouseEvent);
+				case MouseButtonRelease:
+					return eventSource.qtMouseButtonReleaseEvent(obj, (QMouseEvent) event);
+				case MouseButtonDblClick:
+					return eventSource.qtMouseButtonDblClickEvent(obj, (QMouseEvent) event);
+				case KeyPress:
+					return eventSource.qtKeyPressEvent(obj, (QKeyEvent) event);
+				case KeyRelease:
+					return eventSource.qtKeyReleaseEvent(obj, (QKeyEvent) event);
+				case WindowActivate:
+					return eventSource.qtWindowActivateEvent(obj);
+				case WindowDeactivate:
+					return eventSource.qtWindowDeactivateEvent(obj);
+				case WindowStateChange:
+					return eventSource.qtWindowStateChangeEvent(obj, (QWindowStateChangeEvent) event);
+				case WinEventAct:
+					return false;
+				case Timer:
+					return false;
+				default:
+					if (printEvents) {
+						System.err.println("unhandled event: " + event); //$NON-NLS-1$
+					}
+				}
+			} catch (Exception e) {
+				System.err.println("error during event processing:"); //$NON-NLS-1$
+				e.printStackTrace();
+			}
+			return false;
+		}
+
+	}
+
+	private final static class SwtMessageHandler extends QMessageHandler {
+
+		@Override
+		public void warning(String msg) {
+			System.err.println("Qt-Warning: " + msg); //$NON-NLS-1$
+		}
+
+		@Override
+		public void fatal(String msg) {
+			System.err.println("Qt-Fatal: " + msg); //$NON-NLS-1$
+		}
+
+		@Override
+		public void debug(String msg) {
+			System.err.println("Qt-Debug: " + msg); //$NON-NLS-1$
+		}
+
+		@Override
+		public void critical(String msg) {
+			System.err.println("Qt-Critical: " + msg); //$NON-NLS-1$
+		}
+	};
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FileDialog.java
new file mode 100644
index 0000000..f199d36
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FileDialog.java	
@@ -0,0 +1,443 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.trolltech.qt.gui.QFileDialog;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+
+/**
+ * Instances of this class allow the user to navigate the file system and select
+ * or enter a file name.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SAVE, OPEN, MULTI</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles SAVE and OPEN may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class FileDialog extends Dialog {
+	String[] filterNames = new String[0];
+	String[] filterExtensions = new String[0];
+	String[] fileNames = new String[0];
+	String filterPath = "", fileName = "";//$NON-NLS-1$ //$NON-NLS-2$
+	int filterIndex = 0;
+	boolean overwrite = false;
+	static final String FILTER = "*.*";//$NON-NLS-1$
+	QFileDialog fd;
+
+	/**
+	 * Constructs a new instance of this class given only its parent.
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public FileDialog(Shell parent) {
+		this(parent, SWT.APPLICATION_MODAL);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * @param style
+	 *            the style of dialog to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public FileDialog(Shell parent, int style) {
+		super(parent, checkStyle(parent, style));
+		checkSubclass();
+		fd = new QFileDialog();
+		if ((style & SWT.SAVE) != 0) {
+			fd.setFileMode(QFileDialog.FileMode.AnyFile);
+		} else if ((style & SWT.MULTI) != 0) {
+			fd.setFileMode(QFileDialog.FileMode.ExistingFiles);
+		} else {
+			fd.setFileMode(QFileDialog.FileMode.ExistingFile);
+		}
+	}
+
+	/**
+	 * Returns the path of the first file that was selected in the dialog
+	 * relative to the filter path, or an empty string if no such file has been
+	 * selected.
+	 * 
+	 * @return the relative path of the file
+	 */
+	public String getFileName() {
+		String[] files = getSplittedFileNames();
+		if (files.length == 1) {
+			return files[0];
+		} else {
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Returns a (possibly empty) array with the paths of all files that were
+	 * selected in the dialog relative to the filter path.
+	 * 
+	 * @return the relative paths of the files
+	 */
+	public String[] getFileNames() {
+		return getSplittedFileNames();
+	}
+
+	private String[] getSplittedFileNames() {
+		String[] split = { null, null };
+		List<String> files = fd.selectedFiles();
+
+		if (!files.isEmpty()) {
+			for (int i = 0; i < files.size(); i++) {
+				String file = files.get(i);
+				split = file.split("/"); //$NON-NLS-1$
+
+				if (split != null) {
+					files.set(i, split[split.length - 1]);
+				}
+			}
+		}
+		return files.toArray(new String[] {});
+	}
+
+	/**
+	 * Returns the file extensions which the dialog will use to filter the files
+	 * it shows.
+	 * 
+	 * @return the file extensions filter
+	 */
+	@SuppressWarnings("nls")
+	public String[] getFilterExtensions() {
+		List<String> filters = fd.nameFilters();
+		ArrayList<String> result = new ArrayList<String>();
+		String[] split1 = null;
+		String[] split2 = null;
+		/*
+		 * just get the extensions out of the nameFilters, not the names (split
+		 * between "(" and ")"
+		 */
+		for (String filter : filters) {
+			split1 = filter.split("\\(");
+			split2 = split1[1].split("\\)");
+			result.add(split2[0]);
+		}
+
+		/*
+		 * replace all " " by ";" because that's the way swt returns the
+		 * extensions
+		 */
+		for (String r : result) {
+			r = r.replaceAll(" ", ";");
+		}
+
+		return result.toArray(new String[] {});
+	}
+
+	/**
+	 * Get the 0-based index of the file extension filter which was selected by
+	 * the user, or -1 if no filter was selected.
+	 * <p>
+	 * This is an index into the FilterExtensions array and the FilterNames
+	 * array.
+	 * </p>
+	 * 
+	 * @return index the file extension filter index
+	 * 
+	 * @see #getFilterExtensions
+	 * @see #getFilterNames
+	 * 
+	 * @since 3.4
+	 */
+	public int getFilterIndex() {
+		//TODO see Bug 166
+		return filterIndex;
+	}
+
+	/**
+	 * Returns the names that describe the filter extensions which the dialog
+	 * will use to filter the files it shows.
+	 * 
+	 * @return the list of filter names
+	 */
+	@SuppressWarnings("nls")
+	public String[] getFilterNames() {
+		List<String> filters = fd.nameFilters();
+		ArrayList<String> result = new ArrayList<String>();
+		String[] name = null;
+
+		/*
+		 * just get the names out of the nameFilters, not the extensions(split
+		 * between "("
+		 */
+		for (String filter : filters) {
+			name = filter.split("\\(");
+			result.add(name[0]);
+		}
+
+		return result.toArray(new String[] {});
+	}
+
+	/**
+	 * Returns the directory path that the dialog will use, or an empty string
+	 * if this is not set. File names in this path will appear in the dialog,
+	 * filtered according to the filter extensions.
+	 * 
+	 * @return the directory path string
+	 * 
+	 * @see #setFilterExtensions
+	 */
+	public String getFilterPath() {
+		return fd.directory().path();
+	}
+
+	/**
+	 * Returns the flag that the dialog will use to determine whether to prompt
+	 * the user for file overwrite if the selected file already exists.
+	 * 
+	 * @return true if the dialog will prompt for file overwrite, false
+	 *         otherwise
+	 * 
+	 * @since 3.4
+	 */
+	public boolean getOverwrite() {
+		return fd.confirmOverwrite();
+	}
+
+	/**
+	 * Makes the dialog visible and brings it to the front of the display.
+	 * 
+	 * @return a string describing the absolute path of the first selected file,
+	 *         or null if the dialog was cancelled or an error occurred
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the dialog has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the dialog</li>
+	 *                </ul>
+	 */
+	public String open() {
+		fd.exec();
+		java.util.List<String> files = fd.selectedFiles();
+		fileName = null;
+		fileNames = new String[files.size()];
+		if (files.size() > 0) {
+			fileNames[0] = fileName = files.get(0);
+		}
+		for (int i = 1; i < files.size(); i++) {
+			fileNames[i] = files.get(i);
+		}
+		fd.disposeLater();
+		return fileName;
+	}
+
+	/**
+	 * Set the initial filename which the dialog will select by default when
+	 * opened to the argument, which may be null. The name will be prefixed with
+	 * the filter path when one is supplied.
+	 * 
+	 * @param string
+	 *            the file name
+	 */
+	public void setFileName(String string) {
+		fd.selectFile(string);
+	}
+
+	/**
+	 * Set the file extensions which the dialog will use to filter the files it
+	 * shows to the argument, which may be null.
+	 * <p>
+	 * The strings are platform specific. For example, on some platforms, an
+	 * extension filter string is typically of the form "*.extension", where
+	 * "*.*" matches all files. For filters with multiple extensions, use
+	 * semicolon as a separator, e.g. "*.jpg;*.png".
+	 * </p>
+	 * 
+	 * @param extensions
+	 *            the file extension filter
+	 * 
+	 * @see #setFilterNames to specify the user-friendly names corresponding to
+	 *      the extensions
+	 */
+	public void setFilterExtensions(String[] extensions) {
+		filterExtensions = extensions;
+		makeFilter();
+
+	}
+
+	/**
+	 * Set the 0-based index of the file extension filter which the dialog will
+	 * use initially to filter the files it shows to the argument.
+	 * <p>
+	 * This is an index into the FilterExtensions array and the FilterNames
+	 * array.
+	 * </p>
+	 * 
+	 * @param index
+	 *            the file extension filter index
+	 * 
+	 * @see #setFilterExtensions
+	 * @see #setFilterNames
+	 * 
+	 * @since 3.4
+	 */
+	public void setFilterIndex(int index) {
+		//TODO see Bug 166
+		filterIndex = index;
+	}
+
+	/**
+	 * Sets the names that describe the filter extensions which the dialog will
+	 * use to filter the files it shows to the argument, which may be null.
+	 * <p>
+	 * Each name is a user-friendly short description shown for its
+	 * corresponding filter. The <code>names</code> array must be the same
+	 * length as the <code>extensions</code> array.
+	 * </p>
+	 * 
+	 * @param names
+	 *            the list of filter names, or null for no filter names
+	 * 
+	 * @see #setFilterExtensions
+	 */
+	public void setFilterNames(String[] names) {
+		filterNames = names;
+		makeFilter();
+	}
+
+	/**
+	 * constructs a filter for the fileDialog like this:
+	 * "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
+	 * 
+	 * @param names
+	 * @return
+	 */
+	private void makeFilter() {
+		java.util.ArrayList<String> filters = new java.util.ArrayList<String>();
+
+		if (filterNames.length == 0 && filterExtensions.length == 0) {
+			// nothing to do
+		} else {
+			/*
+			 * If there are more filterNames than filterExtensions, just use as
+			 * much filterNames as FilterExtensions.length. Ignore the rest.
+			 */
+			for (int i = 0; i < filterExtensions.length; i++) {
+				if (filterNames.length >= i + 1) {
+					/*
+					 * If there's a matching filterName for the
+					 * filterExtension-Field, the filterExtension-Field has to
+					 * get rid of the ";". The ";" are only allowed, when the
+					 * filterExtension hasn't a matching name.
+					 */
+					String ex = filterExtensions[i].replace(";", " "); //$NON-NLS-1$ //$NON-NLS-2$
+					filters.add(filterNames[i] + "(" + ex + ")"); //$NON-NLS-1$//$NON-NLS-2$
+
+				} else {
+					/*
+					 * just a filterExtension without a name
+					 */
+					filters.add(filterExtensions[i]);
+				}
+			}
+
+			fd.setNameFilters(filters);
+		}
+	}
+
+	/**
+	 * Sets the directory path that the dialog will use to the argument, which
+	 * may be null. File names in this path will appear in the dialog, filtered
+	 * according to the filter extensions. If the string is null, then the
+	 * operating system's default filter path will be used.
+	 * <p>
+	 * Note that the path string is platform dependent. For convenience, either
+	 * '/' or '\' can be used as a path separator.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the directory path
+	 * 
+	 * @see #setFilterExtensions
+	 */
+	public void setFilterPath(String string) {
+		fd.setDirectory(string);
+	}
+
+	/**
+	 * Sets the flag that the dialog will use to determine whether to prompt the
+	 * user for file overwrite if the selected file already exists.
+	 * 
+	 * @param overwrite
+	 *            true if the dialog will prompt for file overwrite, false
+	 *            otherwise
+	 * 
+	 * @since 3.4
+	 */
+	public void setOverwrite(boolean overwrite) {
+		fd.setConfirmOverwrite(overwrite);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FontDialog.java
new file mode 100644
index 0000000..43563eb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/FontDialog.java	
@@ -0,0 +1,246 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.gui.QDialog;
+import com.trolltech.qt.gui.QFont;
+import com.trolltech.qt.gui.QFontDialog;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.graphics.RGB;
+
+/**
+ * Instances of this class allow the user to select a font from all available
+ * fonts in the system.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class FontDialog extends Dialog {
+	FontData fontData;
+	RGB rgb;
+	QFontDialog fd;
+
+	/**
+	 * Constructs a new instance of this class given only its parent.
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public FontDialog(Shell parent) {
+		this(parent, SWT.APPLICATION_MODAL);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * @param style
+	 *            the style of dialog to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public FontDialog(Shell parent, int style) {
+		super(parent, checkStyle(parent, style));
+		checkSubclass();
+	}
+
+	protected QFontDialog createFontDialog(Shell parent, int style) {
+		return new QFontDialog();
+	}
+
+	/**
+	 * Returns a FontData object describing the font that was selected in the
+	 * dialog, or null if none is available.
+	 * 
+	 * @return the FontData for the selected font, or null
+	 * @deprecated use #getFontList ()
+	 */
+	@Deprecated
+	public FontData getFontData() {
+		return getFontList()[0];
+	}
+
+	/**
+	 * Returns a FontData set describing the font that was selected in the
+	 * dialog, or null if none is available.
+	 * 
+	 * @return the FontData for the selected font, or null
+	 * @since 2.1.1
+	 */
+	public FontData[] getFontList() {
+		QFont font = fd.selectedFont();
+		if (font == null) {
+			return null;
+		}
+		FontData[] result = new FontData[1];
+		result[0] = qFontToFontData(font);
+		return result;
+	}
+
+	private FontData qFontToFontData(QFont qFont) {
+		int style = SWT.NORMAL;
+		if (qFont.italic()) {
+			style += SWT.ITALIC;
+		}
+		if (qFont.bold()) {
+			style += SWT.BOLD;
+		}
+		FontData fontData = new FontData(qFont.rawName(), qFont.pointSize(), style);
+		return fontData;
+	}
+
+	/**
+	 * Returns an RGB describing the color that was selected in the dialog, or
+	 * null if none is available.
+	 * 
+	 * @return the RGB value for the selected color, or null
+	 * 
+	 * @see PaletteData#getRGBs
+	 * 
+	 * @since 2.1
+	 */
+	public RGB getRGB() {
+		// QFontDialog doesn't support setting a font color, see Bug 167
+		return null;
+	}
+
+	/**
+	 * Makes the dialog visible and brings it to the front of the display.
+	 * 
+	 * @return a FontData object describing the font that was selected, or null
+	 *         if the dialog was cancelled or an error occurred
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the dialog has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the dialog</li>
+	 *                </ul>
+	 */
+	public FontData open() {
+		fd = new QFontDialog();
+		if (fd.exec() == QDialog.DialogCode.Rejected.value()) {
+			return null;
+		}
+		QFont font = fd.selectedFont();
+
+		FontData fontData = qFontToFontData(font);
+		font.dispose();
+		fd.disposeLater();
+		return fontData;
+	}
+
+	/**
+	 * Sets a FontData object describing the font to be selected by default in
+	 * the dialog, or null to let the platform choose one.
+	 * 
+	 * @param fontData
+	 *            the FontData to use initially, or null
+	 * @deprecated use #setFontList (FontData [])
+	 */
+	@Deprecated
+	public void setFontData(FontData fontData) {
+		// QFontDialog doesn't support setting the default font
+		this.fontData = fontData;
+	}
+
+	/**
+	 * Sets the set of FontData objects describing the font to be selected by
+	 * default in the dialog, or null to let the platform choose one.
+	 * 
+	 * @param fontData
+	 *            the set of FontData objects to use initially, or null to let
+	 *            the platform select a default when open() is called
+	 * 
+	 * @see Font#getFontData
+	 * 
+	 * @since 2.1.1
+	 */
+	public void setFontList(FontData[] fontData) {
+		// QFontDialog doesn't support setting the default font, see Bug 168
+		if (fontData != null && fontData.length > 0) {
+			this.fontData = fontData[0];
+		} else {
+			this.fontData = null;
+		}
+	}
+
+	/**
+	 * Sets the RGB describing the color to be selected by default in the
+	 * dialog, or null to let the platform choose one.
+	 * 
+	 * @param rgb
+	 *            the RGB value to use initially, or null to let the platform
+	 *            select a default when open() is called
+	 * 
+	 * @see PaletteData#getRGBs
+	 * 
+	 * @since 2.1
+	 */
+	public void setRGB(RGB rgb) {
+		// QFontDialog doesn't support setting a font color, see Bug 167
+		this.rgb = rgb;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Group.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Group.java
new file mode 100644
index 0000000..9af907e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Group.java	
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.gui.QContentsMargins;
+import com.trolltech.qt.gui.QGroupBox;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class provide an etched border with an optional title.
+ * <p>
+ * Shadow styles are hints and may not be honoured by the platform. To create a
+ * group with the default shadow style for the platform, do not specify a shadow
+ * style.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SHADOW_ETCHED_IN, SHADOW_ETCHED_OUT, SHADOW_IN, SHADOW_OUT, SHADOW_NONE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the above styles may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Group extends Composite {
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#SHADOW_ETCHED_IN
+	 * @see SWT#SHADOW_ETCHED_OUT
+	 * @see SWT#SHADOW_IN
+	 * @see SWT#SHADOW_OUT
+	 * @see SWT#SHADOW_NONE
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Group(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state |= DRAW_BACKGROUND;
+		state |= CANVAS;
+		//TODO apply SWT.SHADOW_* styles
+		return new QGroupBox();
+	}
+
+	QGroupBox getQGroupBox() {
+		return (QGroupBox) getQWidget();
+	}
+
+	static int checkStyle(int style) {
+		style |= SWT.NO_FOCUS;
+		/*
+		 * Even though it is legal to create this widget with scroll bars, they
+		 * serve no useful purpose because they do not automatically scroll the
+		 * widget's client area. The fix is to clear the SWT style.
+		 */
+		return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	@Override
+	public Rectangle getClientArea() {
+		checkWidget();
+		if (!isVisible()) {
+			updateQLayouts();
+		}
+
+		Rectangle clientArea = QtSWTConverter.convert(getQWidget().contentsRect());
+		if (clientArea.width < 0) {
+			clientArea.width = 0;
+		}
+		if (clientArea.height < 0) {
+			clientArea.height = 0;
+		}
+
+		return clientArea;
+	}
+
+	@Override
+	public Rectangle computeTrim(int x, int y, int width, int height) {
+		QContentsMargins margins = getQGroupBox().getContentsMargins();
+		return new Rectangle(x - margins.left, y - margins.top, width + margins.left + margins.right, height
+				+ margins.top + margins.bottom);
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Returns the receiver's text, which is the string that the is used as the
+	 * <em>title</em>. If the text has not previously been set, returns an empty
+	 * string.
+	 * 
+	 * @return the text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		return getQGroupBox().title();
+	}
+
+	@Override
+	boolean mnemonicHit(char key) {
+		return setFocus();
+	}
+
+	@Override
+	boolean mnemonicMatch(char key) {
+		char mnemonic = findMnemonic(getText());
+		if (mnemonic == '\0') {
+			return false;
+		}
+		return Character.toUpperCase(key) == Character.toUpperCase(mnemonic);
+	}
+
+	void printWidget(int /* long */hwnd, int /* long */hdc, GC gc) {
+		// TODO
+		throw new UnsupportedOperationException("not yet implemented");//$NON-NLS-1$
+		// /*
+		// * Bug in Windows. For some reason, PrintWindow() returns success but
+		// * does nothing when it is called on a printer. The fix is to just go
+		// * directly to WM_PRINT in this case.
+		// */
+		// boolean success = false;
+		// if ( !( OS.GetDeviceCaps( gc.handle, OS.TECHNOLOGY ) ==
+		// OS.DT_RASPRINTER ) ) {
+		// success = OS.PrintWindow( hwnd, hdc, 0 );
+		// }
+		//
+		// /*
+		// * Bug in Windows. For some reason, PrintWindow() fails when it is
+		// * called on a push button. The fix is to detect the failure and use
+		// * WM_PRINT instead. Note that WM_PRINT cannot be used all the time
+		// * because it fails for browser controls when the browser has focus.
+		// */
+		// if ( !success ) {
+		// /*
+		// * Bug in Windows. For some reason, WM_PRINT when called with
+		// * PRF_CHILDREN will not draw the tool bar divider for tool bar
+		// * children that do not have CCS_NODIVIDER. The fix is to draw the
+		// * group box and iterate through the children, drawing each one.
+		// */
+		// int flags = OS.PRF_CLIENT | OS.PRF_NONCLIENT | OS.PRF_ERASEBKGND;
+		// OS.SendMessage( hwnd, OS.WM_PRINT, hdc, flags );
+		// int nSavedDC = OS.SaveDC( hdc );
+		// Control[] children = _getChildren();
+		// Rectangle rect = getBounds();
+		// OS.IntersectClipRect( hdc, 0, 0, rect.width, rect.height );
+		// for ( int i = children.length - 1; i >= 0; --i ) {
+		// Point location = children[i].getLocation();
+		// int graphicsMode = OS.GetGraphicsMode( hdc );
+		// if ( graphicsMode == OS.GM_ADVANCED ) {
+		// float[] lpXform = { 1, 0, 0, 1, location.x, location.y };
+		// OS.ModifyWorldTransform( hdc, lpXform, OS.MWT_LEFTMULTIPLY );
+		// } else {
+		// OS.SetWindowOrgEx( hdc, -location.x, -location.y, null );
+		// }
+		// int /* long */topHandle = children[i].topHandle();
+		// int bits = OS.GetWindowLong( topHandle, OS.GWL_STYLE );
+		// if ( ( bits & OS.WS_VISIBLE ) == 0 ) {
+		// OS.DefWindowProc( topHandle, OS.WM_SETREDRAW, 1, 0 );
+		// }
+		// children[i].printWidget( topHandle, hdc, gc );
+		// if ( ( bits & OS.WS_VISIBLE ) == 0 ) {
+		// OS.DefWindowProc( topHandle, OS.WM_SETREDRAW, 0, 0 );
+		// }
+		// if ( graphicsMode == OS.GM_ADVANCED ) {
+		// float[] lpXform = { 1, 0, 0, 1, -location.x, -location.y };
+		// OS.ModifyWorldTransform( hdc, lpXform, OS.MWT_LEFTMULTIPLY );
+		// }
+		// }
+		// OS.RestoreDC( hdc, nSavedDC );
+		// }
+	}
+
+	@Override
+	public void setFont(Font font) {
+		checkWidget();
+		Rectangle oldRect = getClientArea();
+		super.setFont(font);
+		Rectangle newRect = getClientArea();
+		if (!oldRect.equals(newRect)) {
+			sendResize();
+		}
+	}
+
+	/**
+	 * Sets the receiver's text, which is the string that will be displayed as
+	 * the receiver's <em>title</em>, to the argument, which may not be null.
+	 * The string may include the mnemonic character. </p> Mnemonics are
+	 * indicated by an '&' that causes the next character to be the
+	 * mnemonic. When the user presses a key sequence that matches the mnemonic,
+	 * focus is assigned to the first child of the group. On most platforms, the
+	 * mnemonic appears underlined but may be emphasised in a platform specific
+	 * manner. The mnemonic indicator character '&' can be escaped by
+	 * doubling it in the string, causing a single '&' to be displayed. </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		getQGroupBox().setTitle(string);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Label.java
new file mode 100644
index 0000000..1274dab
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Label.java	
@@ -0,0 +1,456 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.Qt.AlignmentFlag;
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDragLeaveEvent;
+import com.trolltech.qt.gui.QDragMoveEvent;
+import com.trolltech.qt.gui.QDropEvent;
+import com.trolltech.qt.gui.QFrame;
+import com.trolltech.qt.gui.QLabel;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of this class represent a non-selectable user interface object that
+ * displays a string or image. When SEPARATOR is specified, displays a single
+ * vertical or horizontal line.
+ * <p>
+ * Shadow styles are hints and may not be honored by the platform. To create a
+ * separator label with the default shadow style for the platform, do not
+ * specify a shadow style.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SEPARATOR, HORIZONTAL, VERTICAL</dd>
+ * <dd>SHADOW_IN, SHADOW_OUT, SHADOW_NONE</dd>
+ * <dd>CENTER, LEFT, RIGHT, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of SHADOW_IN, SHADOW_OUT and SHADOW_NONE may be specified.
+ * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
+ * Only one of CENTER, LEFT and RIGHT may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Label extends Control {
+	private String text = ""; //$NON-NLS-1$
+	private Image image;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#SEPARATOR
+	 * @see SWT#HORIZONTAL
+	 * @see SWT#VERTICAL
+	 * @see SWT#SHADOW_IN
+	 * @see SWT#SHADOW_OUT
+	 * @see SWT#SHADOW_NONE
+	 * @see SWT#CENTER
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#WRAP
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Label(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state |= THEME_BACKGROUND;
+		QLabel label = new MyQLabel();
+		if ((style & SWT.SEPARATOR) != 0) {
+			setSeparatorType(label, style);
+		}
+		label.setContentsMargins(0, 0, 0, 0);
+		setAlignment(label, style);
+		label.setMargin(0);
+		// TODO make this work with the right size.
+		//label.setWordWrap((style & SWT.WRAP) != 0);
+		return label;
+	}
+
+	@Override
+	protected void checkAndUpdateBorder() {
+		// nothing on purpose
+	}
+
+	private void setSeparatorType(QLabel label, int style) {
+		int frameStyle = 0;
+		if ((style & SWT.VERTICAL) != 0) {
+			frameStyle |= QFrame.Shape.VLine.value();
+			label.setFixedWidth(2);
+		} else {
+			frameStyle |= QFrame.Shape.HLine.value();
+			label.setMaximumHeight(2);
+		}
+		if ((style & SWT.SHADOW_IN) != 0) {
+			frameStyle |= QFrame.Shadow.Raised.value();
+		} else if ((style & SWT.SHADOW_OUT) != 0) {
+			frameStyle |= QFrame.Shadow.Sunken.value();
+		} else if ((style & SWT.SHADOW_NONE) != 0) {
+			frameStyle |= QFrame.Shadow.Plain.value();
+		}
+		label.setFrameStyle(frameStyle);
+	}
+
+	private QLabel getQLabel() {
+		return (QLabel) getQWidget();
+	}
+
+	static int checkStyle(int style) {
+		style |= SWT.NO_FOCUS;
+		if ((style & SWT.SEPARATOR) != 0) {
+			style = checkBits(style, SWT.VERTICAL, SWT.HORIZONTAL, 0, 0, 0, 0);
+			return checkBits(style, SWT.SHADOW_OUT, SWT.SHADOW_IN, SWT.SHADOW_NONE, 0, 0, 0);
+		}
+		return checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+	}
+
+	@Override
+	public boolean qtMouseEnterEvent(Object source) {
+		if (source == getQWidget()) {
+			sendEvent(SWT.MouseEnter);
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtMouseLeaveEvent(Object source) {
+		if (source == getQWidget()) {
+			sendEvent(SWT.MouseExit);
+		}
+		return false;
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		Point p = super.computeSize(wHint, hHint, changed);
+		if ((style & SWT.SEPARATOR) != 0) {
+			int width = p.x;
+			int height = p.y;
+			if ((style & SWT.VERTICAL) != 0) {
+				width = 2;
+			} else {
+				height = Math.min(height, 3);
+			}
+			p.x = width;
+			p.y = height;
+		}
+		return p;
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Returns the receiver's text, which will be an empty string if it has
+	 * never been set or if the receiver is a <code>SEPARATOR</code> label.
+	 * 
+	 * @return the receiver's text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		if ((style & SWT.SEPARATOR) != 0) {
+			return "";//$NON-NLS-1$
+		}
+		return text;
+	}
+
+	/**
+	 * Sets the receiver's text.
+	 * <p>
+	 * This method sets the widget label. The label may include the mnemonic
+	 * character and line delimiters.
+	 * </p>
+	 * <p>
+	 * Mnemonics are indicated by an '&' that causes the next character to
+	 * be the mnemonic. When the user presses a key sequence that matches the
+	 * mnemonic, focus is assigned to the control that follows the label. On
+	 * most platforms, the mnemonic appears underlined but may be emphasised in
+	 * a platform specific manner. The mnemonic indicator character '&' can
+	 * be escaped by doubling it in the string, causing a single '&' to be
+	 * displayed.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		if (string.equals(text)) {
+			return;
+		}
+		text = string;
+		string = Display.withCrLf(string);
+		getQLabel().setText(string);
+	}
+
+	@Override
+	boolean mnemonicHit(char key) {
+		Composite control = this.parent;
+		while (control != null) {
+			Control[] children = control._getChildren();
+			int index = 0;
+			while (index < children.length) {
+				if (children[index] == this) {
+					break;
+				}
+				index++;
+			}
+			index++;
+			if (index < children.length) {
+				if (children[index].setFocus()) {
+					return true;
+				}
+			}
+			control = control.parent;
+		}
+		return false;
+	}
+
+	@Override
+	boolean mnemonicMatch(char key) {
+		char mnemonic = findMnemonic(getText());
+		if (mnemonic == '\0') {
+			return false;
+		}
+		return Character.toUpperCase(key) == Character.toUpperCase(mnemonic);
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		text = null;
+		image = null;
+	}
+
+	/**
+	 * Returns a value which describes the position of the text or image in the
+	 * receiver. The value will be one of <code>LEFT</code>, <code>RIGHT</code>
+	 * or <code>CENTER</code> unless the receiver is a <code>SEPARATOR</code>
+	 * label, in which case, <code>NONE</code> is returned.
+	 * 
+	 * @return the alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getAlignment() {
+		checkWidget();
+		if ((style & SWT.SEPARATOR) != 0) {
+			return 0;
+		}
+		if ((style & SWT.LEFT) != 0) {
+			return SWT.LEFT;
+		}
+		if ((style & SWT.CENTER) != 0) {
+			return SWT.CENTER;
+		}
+		if ((style & SWT.RIGHT) != 0) {
+			return SWT.RIGHT;
+		}
+		return SWT.LEFT;
+	}
+
+	/**
+	 * Controls how text and images will be displayed in the receiver. The
+	 * argument should be one of <code>LEFT</code>, <code>RIGHT</code> or
+	 * <code>CENTER</code>. If the receiver is a <code>SEPARATOR</code> label,
+	 * the argument is ignored and the alignment is not changed.
+	 * 
+	 * @param alignment
+	 *            the new alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setAlignment(int alignment) {
+		checkWidget();
+		setAlignment(getQLabel(), alignment);
+	}
+
+	void setAlignment(QLabel label, int alignment) {
+		if ((getStyle() & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		if ((alignment & SWT.RIGHT) != 0) {
+			label.setAlignment(AlignmentFlag.AlignRight);
+		} else if ((alignment & SWT.CENTER) != 0) {
+			label.setAlignment(AlignmentFlag.AlignCenter);
+		}
+	}
+
+	/**
+	 * Returns the receiver's image if it has one, or null if it does not.
+	 * 
+	 * @return the receiver's image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Image getImage() {
+		checkWidget();
+		return image;
+	}
+
+	/**
+	 * Sets the receiver's image to the argument, which may be null indicating
+	 * that no image should be displayed.
+	 * 
+	 * @param image
+	 *            the image to display on the receiver (may be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setImage(Image image) {
+		checkWidget();
+		// dont crash if the image is null
+		if (image == null) {
+			return;
+		}
+		this.image = image;
+		getQLabel().setPixmap(image.getQPixmap());
+	}
+
+	private final class MyQLabel extends QLabel {
+		@Override
+		protected void mousePressEvent(QMouseEvent e) {
+			super.mousePressEvent(e);
+			e.setAccepted(false);
+		}
+
+		@Override
+		protected void dropEvent(QDropEvent event) {
+			sendDropEvent(event);
+		}
+
+		@Override
+		protected void dragMoveEvent(QDragMoveEvent event) {
+			sendDragMoveEvent(event);
+		}
+
+		@Override
+		protected void dragEnterEvent(QDragEnterEvent event) {
+			sendDragEnterEvent(event);
+		}
+
+		@Override
+		protected void dragLeaveEvent(QDragLeaveEvent event) {
+			sendDragLeaveEvent(event);
+		}
+
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Link.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Link.java
new file mode 100644
index 0000000..844a437
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Link.java	
@@ -0,0 +1,552 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.Qt.TextInteractionFlag;
+import com.trolltech.qt.gui.QLabel;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.accessibility.ACC;
+import org.eclipse.swt.accessibility.Accessible;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleControlAdapter;
+import org.eclipse.swt.accessibility.AccessibleControlEvent;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * displays a text with links.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#link">Link snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Link extends Control {
+	private Point[] offsets;
+	private String[] ids;
+	private int[] mnemonics;
+
+	private static final String LINK_START = "<a>";//$NON-NLS-1$
+	private static final String LINK_END = "</a>";//$NON-NLS-1$
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Link(Composite parent, int style) {
+		super(parent, checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state |= THEME_BACKGROUND;
+		QLabel link = new QLabel();
+		link.setTextInteractionFlags(TextInteractionFlag.TextBrowserInteraction);
+		link.setOpenExternalLinks(false);
+		return link;
+	}
+
+	protected QLabel getQLabel() {
+		return (QLabel) getQWidget();
+	}
+
+	@Override
+	protected void connectSignals() {
+		getQLabel().linkActivated.connect(this, "linkActivated(java.lang.String)");//$NON-NLS-1$
+	}
+
+	protected void linkActivated(String link) {
+		Event event = new Event();
+		event.text = link;
+		sendEvent(SWT.Selection, event);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the control is selected by the
+	 * user. <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	void initAccessible() {
+		Accessible accessible = getAccessible();
+		accessible.addAccessibleListener(new AccessibleAdapter() {
+			@Override
+			public void getName(AccessibleEvent e) {
+				e.result = parse(_getText());
+			}
+		});
+
+		accessible.addAccessibleControlListener(new AccessibleControlAdapter() {
+			@Override
+			public void getChildAtPoint(AccessibleControlEvent e) {
+				e.childID = ACC.CHILDID_SELF;
+			}
+
+			@Override
+			public void getLocation(AccessibleControlEvent e) {
+				Rectangle rect = display.map(getParent(), null, getBounds());
+				e.x = rect.x;
+				e.y = rect.y;
+				e.width = rect.width;
+				e.height = rect.height;
+			}
+
+			@Override
+			public void getChildCount(AccessibleControlEvent e) {
+				e.detail = 0;
+			}
+
+			@Override
+			public void getRole(AccessibleControlEvent e) {
+				e.detail = ACC.ROLE_LINK;
+			}
+
+			@Override
+			public void getState(AccessibleControlEvent e) {
+				e.detail = ACC.STATE_FOCUSABLE;
+				if (hasFocus()) {
+					e.detail |= ACC.STATE_FOCUSED;
+				}
+			}
+
+			@Override
+			public void getDefaultAction(AccessibleControlEvent e) {
+				e.result = SWT.getMessage("SWT_Press"); //$NON-NLS-1$
+			}
+
+			@Override
+			public void getSelection(AccessibleControlEvent e) {
+				if (hasFocus()) {
+					e.childID = ACC.CHILDID_SELF;
+				}
+			}
+
+			@Override
+			public void getFocus(AccessibleControlEvent e) {
+				if (hasFocus()) {
+					e.childID = ACC.CHILDID_SELF;
+				}
+			}
+		});
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Returns the receiver's text, which will be an empty string if it has
+	 * never been set.
+	 * 
+	 * @return the receiver's text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		return _getText();
+	}
+
+	private String _getText() {
+		return getQLabel().text();
+	}
+
+	private String parse(String string) {
+		int length = string.length();
+		offsets = new Point[length / 4];
+		ids = new String[length / 4];
+		mnemonics = new int[length / 4 + 1];
+		StringBuffer result = new StringBuffer();
+		char[] buffer = new char[length];
+		string.getChars(0, string.length(), buffer, 0);
+		int index = 0, state = 0, linkIndex = 0;
+		int start = 0, tagStart = 0, linkStart = 0, endtagStart = 0, refStart = 0;
+		while (index < length) {
+			char c = Character.toLowerCase(buffer[index]);
+			switch (state) {
+			case 0:
+				if (c == '<') {
+					tagStart = index;
+					state++;
+				}
+				break;
+			case 1:
+				if (c == 'a') {
+					state++;
+				}
+				break;
+			case 2:
+				switch (c) {
+				case 'h':
+					state = 7;
+					break;
+				case '>':
+					linkStart = index + 1;
+					state++;
+					break;
+				default:
+					if (Character.isWhitespace(c)) {
+						break;
+					}
+					state = 13;
+				}
+				break;
+			case 3:
+				if (c == '<') {
+					endtagStart = index;
+					state++;
+				}
+				break;
+			case 4:
+				state = c == '/' ? state + 1 : 3;
+				break;
+			case 5:
+				state = c == 'a' ? state + 1 : 3;
+				break;
+			case 6:
+				if (c == '>') {
+					mnemonics[linkIndex] = parseMnemonics(buffer, start, tagStart, result);
+					int offset = result.length();
+					parseMnemonics(buffer, linkStart, endtagStart, result);
+					offsets[linkIndex] = new Point(offset, result.length() - 1);
+					if (ids[linkIndex] == null) {
+						ids[linkIndex] = new String(buffer, linkStart, endtagStart - linkStart);
+					}
+					linkIndex++;
+					start = tagStart = linkStart = endtagStart = refStart = index + 1;
+					state = 0;
+				} else {
+					state = 3;
+				}
+				break;
+			case 7:
+				state = c == 'r' ? state + 1 : 0;
+				break;
+			case 8:
+				state = c == 'e' ? state + 1 : 0;
+				break;
+			case 9:
+				state = c == 'f' ? state + 1 : 0;
+				break;
+			case 10:
+				state = c == '=' ? state + 1 : 0;
+				break;
+			case 11:
+				if (c == '"') {
+					state++;
+					refStart = index + 1;
+				} else {
+					state = 0;
+				}
+				break;
+			case 12:
+				if (c == '"') {
+					ids[linkIndex] = new String(buffer, refStart, index - refStart);
+					state = 2;
+				}
+				break;
+			case 13:
+				if (Character.isWhitespace(c)) {
+					state = 0;
+				} else if (c == '=') {
+					state++;
+				}
+				break;
+			case 14:
+				state = c == '"' ? state + 1 : 0;
+				break;
+			case 15:
+				if (c == '"') {
+					state = 2;
+				}
+				break;
+			default:
+				state = 0;
+				break;
+			}
+			index++;
+		}
+		if (start < length) {
+			int tmp = parseMnemonics(buffer, start, tagStart, result);
+			int mnemonic = parseMnemonics(buffer, Math.max(tagStart, linkStart), length, result);
+			if (mnemonic == -1) {
+				mnemonic = tmp;
+			}
+			mnemonics[linkIndex] = mnemonic;
+		} else {
+			mnemonics[linkIndex] = -1;
+		}
+		if (offsets.length != linkIndex) {
+			Point[] newOffsets = new Point[linkIndex];
+			System.arraycopy(offsets, 0, newOffsets, 0, linkIndex);
+			offsets = newOffsets;
+			String[] newIDs = new String[linkIndex];
+			System.arraycopy(ids, 0, newIDs, 0, linkIndex);
+			ids = newIDs;
+			int[] newMnemonics = new int[linkIndex + 1];
+			System.arraycopy(mnemonics, 0, newMnemonics, 0, linkIndex + 1);
+			mnemonics = newMnemonics;
+		}
+		return result.toString();
+	}
+
+	private int parseMnemonics(char[] buffer, int start, int end, StringBuffer result) {
+		int mnemonic = -1, index = start;
+		while (index < end) {
+			if (buffer[index] == '&') {
+				if (index + 1 < end && buffer[index + 1] == '&') {
+					result.append(buffer[index]);
+					index++;
+				} else {
+					mnemonic = result.length();
+				}
+			} else {
+				result.append(buffer[index]);
+			}
+			index++;
+		}
+		return mnemonic;
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		offsets = null;
+		ids = null;
+		mnemonics = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Sets the receiver's text.
+	 * <p>
+	 * The string can contain both regular text and hyperlinks. A hyperlink is
+	 * delimited by an anchor tag, <A> and </A>. Within an anchor, a
+	 * single HREF attribute is supported. When a hyperlink is selected, the
+	 * text field of the selection event contains either the text of the
+	 * hyperlink or the value of its HREF, if one was specified. In the rare
+	 * case of identical hyperlinks within the same string, the HREF tag can be
+	 * used to distinguish between them. The string may include the mnemonic
+	 * character and line delimiters.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (string.equals(_getText())) {
+			return;
+		}
+		String text = string.replace("<A>", "<a>");//$NON-NLS-1$ //$NON-NLS-2$
+		text = text.replace("</A>", "</a>");//$NON-NLS-1$ //$NON-NLS-2$
+		getQLabel().setText(adjustTags(text));
+	}
+
+	/*
+	 * QLabel does not render a link as a link if it is created like this: Text
+	 * and <a>link</a> and another <a>link</a> QLabel requires the href part to
+	 * be there also. This function changes the string above to this: Text and
+	 * <a href="link">link</a> and another <a href="link">link</a>
+	 */
+	static String adjustTags(String str) {
+		int pos = str.indexOf(LINK_START);
+
+		if (pos == -1) {
+			return str;
+		}
+
+		int start = 0;
+		int endPos = pos;
+		StringBuffer sb = new StringBuffer();
+		String clean = "";//$NON-NLS-1$
+
+		while (pos != -1) {
+			sb.append(str.substring(start, pos)).append("<a href=\"");//$NON-NLS-1$
+			start = pos + LINK_START.length();
+			endPos = str.indexOf(LINK_END, start);
+			if (endPos != -1) {
+				clean = clean(str.substring(start, endPos));
+				sb.append(clean);
+			} else {
+				// If the link format is invalid in any way, just use
+				// original string and try not to be too clever.
+				return str;
+			}
+
+			sb.append("\">" + clean + LINK_END);//$NON-NLS-1$
+			start = endPos + LINK_END.length();
+			pos = str.indexOf(LINK_START, start);
+		}
+
+		return sb.toString();
+	}
+
+	static String clean(String strToClean) {
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; i < strToClean.length(); i++) {
+			char charAt = strToClean.charAt(i);
+			if (charAt == '"') {
+				sb.append("""); //$NON-NLS-1$
+			} else {
+				if (charAt == '<') {
+					sb.append("<"); //$NON-NLS-1$
+				} else {
+					if (charAt == '>') {
+						sb.append(">"); //$NON-NLS-1$
+					} else {
+						sb.append(charAt);
+					}
+				}
+			}
+		}
+		return sb.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/List.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/List.java
new file mode 100644
index 0000000..db2dfc0
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/List.java	
@@ -0,0 +1,1380 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.Arrays;
+
+import com.trolltech.qt.core.QModelIndex;
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.Qt.DropActions;
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDragLeaveEvent;
+import com.trolltech.qt.gui.QDragMoveEvent;
+import com.trolltech.qt.gui.QDropEvent;
+import com.trolltech.qt.gui.QItemSelection;
+import com.trolltech.qt.gui.QListWidget;
+import com.trolltech.qt.gui.QListWidgetItem;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QAbstractItemView.DragDropMode;
+import com.trolltech.qt.gui.QAbstractItemView.ScrollHint;
+import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;
+import com.trolltech.qt.gui.QItemSelectionModel.SelectionFlag;
+import com.trolltech.qt.gui.QItemSelectionModel.SelectionFlags;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * displays a list of strings and issues notification when a string is selected.
+ * A list may be single or multi select.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of SINGLE and MULTI may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#list">List snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class List extends Scrollable {
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#SINGLE
+	 * @see SWT#MULTI
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public List(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		QListWidget listWidget = new MyListWidget();
+		if ((style & SWT.MULTI) != 0) {
+			listWidget.setSelectionMode(SelectionMode.MultiSelection);
+		} else {
+			listWidget.setSelectionMode(SelectionMode.SingleSelection);
+		}
+		return listWidget;
+	}
+
+	@Override
+	protected void connectSignals() {
+		getQListWidget().selectionModel().selectionChanged.connect(this, "selectionEvent()");//$NON-NLS-1$
+		getQListWidget().itemActivated.connect(this, "itemActivationEvent(QListWidgetItem)");//$NON-NLS-1$
+	}
+
+	private QListWidget getQListWidget() {
+		return (QListWidget) getQWidget();
+	}
+
+	protected void selectionEvent() {
+		sendEvent(SWT.Selection);
+	}
+
+	protected void itemActivationEvent(QListWidgetItem item) {
+		sendEvent(SWT.DefaultSelection);
+	}
+
+	@Override
+	public void setDragEnabled(boolean enabled) {
+		getQListWidget().setDragEnabled(enabled);
+	}
+
+	@Override
+	public void setAcceptDrops(boolean accept) {
+		super.setAcceptDrops(accept);
+		getQListWidget().setDragDropMode(DragDropMode.DragDrop);
+		getQListWidget().setDropIndicatorShown(true);
+	}
+
+	/**
+	 * Adds the argument to the end of the receiver's list.
+	 * 
+	 * @param string
+	 *            the new item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #add(String,int)
+	 */
+	public void add(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		getQListWidget().addItem(string);
+	}
+
+	/**
+	 * Adds the argument to the receiver's list at the given zero-relative
+	 * index.
+	 * <p>
+	 * Note: To add an item at the end of the list, use the result of calling
+	 * <code>getItemCount()</code> as the index or use <code>add(String)</code>.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new item
+	 * @param index
+	 *            the index for the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #add(String)
+	 */
+	public void add(String string, int index) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		validateIndex(index);
+		getQListWidget().insertItem(index, string);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's selection, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the selection changes.
+	 * <code>widgetDefaultSelected</code> is typically called when an item is
+	 * double-clicked.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the user changes
+	 *            the receiver's selection
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+	}
+
+	/**
+	 * Deselects the items at the given zero-relative indices in the receiver.
+	 * If the item at the given zero-relative index in the receiver is selected,
+	 * it is deselected. If the item at the index was not selected, it remains
+	 * deselected. Indices that are out of range and duplicate indices are
+	 * ignored.
+	 * 
+	 * @param indices
+	 *            the array of indices for the items to deselect
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the set of indices is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselect(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		updateSelection(indices, new SelectionFlags(SelectionFlag.Deselect));
+	}
+
+	private void updateSelection(int[] indices, SelectionFlags selectionFlags) {
+		int count = getQListWidget().count();
+		for (int i = 0; i < indices.length; i++) {
+			if (indices[i] >= 0 && indices[i] < count) {
+				updateSelectionRange(indices[i], indices[i], selectionFlags);
+			}
+		}
+	}
+
+	/**
+	 * Deselects the item at the given zero-relative index in the receiver. If
+	 * the item at the index was already deselected, it remains deselected.
+	 * Indices that are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to deselect
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselect(int index) {
+		checkWidget();
+		validateIndex(index);
+		updateSelectionRange(index, index, new SelectionFlags(SelectionFlag.Deselect));
+	}
+
+	void validateIndex(int index) {
+		if (index < 0 || index > getQListWidget().count()) {
+			SWT.error(SWT.ERROR_INVALID_RANGE);
+		}
+	}
+
+	/**
+	 * Deselects the items at the given zero-relative indices in the receiver.
+	 * If the item at the given zero-relative index in the receiver is selected,
+	 * it is deselected. If the item at the index was not selected, it remains
+	 * deselected. The range of the indices is inclusive. Indices that are out
+	 * of range are ignored.
+	 * 
+	 * @param start
+	 *            the start index of the items to deselect
+	 * @param end
+	 *            the end index of the items to deselect
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselect(int start, int end) {
+		checkWidget();
+		if (start > end || end < 0) {
+			return;
+		}
+		int count = getQListWidget().count();
+		if (start > count - 1) {
+			return;
+		}
+		start = Math.max(0, start);
+		end = Math.min(end, count - 1);
+		updateSelectionRange(start, end, new SelectionFlags(SelectionFlag.Deselect));
+	}
+
+	void updateSelectionRange(int start, int end, SelectionFlags flags) {
+		QModelIndex startIndex = getQListWidget().model().index(start, 0);
+		QModelIndex endIndex = getQListWidget().model().index(end, 0);
+		QItemSelection itemSelection = new QItemSelection(startIndex, endIndex);
+		getQListWidget().selectionModel().select(itemSelection, flags);
+	}
+
+	/**
+	 * Deselects all selected items in the receiver.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselectAll() {
+		checkWidget();
+		getQListWidget().clearSelection();
+	}
+
+	/**
+	 * Returns the zero-relative index of the item which currently has the focus
+	 * in the receiver, or -1 if no item has focus.
+	 * 
+	 * @return the index of the selected item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getFocusIndex() {
+		checkWidget();
+		return getQListWidget().currentRow();
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getItem(int index) {
+		checkWidget();
+		validateIndex(index);
+		return getQListWidget().item(index).text();
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return getQListWidget().count();
+	}
+
+	/**
+	 * Returns the height of the area which would be used to display
+	 * <em>one</em> of the items in the list.
+	 * 
+	 * @return the height of one item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemHeight() {
+		checkWidget();
+		int itemHeight = 0;
+		if (getQListWidget().count() > 0) {
+			itemHeight = getQListWidget().sizeHintForRow(0);
+		} else {
+			// we add a dummy item to get the height
+			getQListWidget().addItem("");//$NON-NLS-1$
+			itemHeight = getQListWidget().sizeHintForRow(0);
+			_remove(0);
+		}
+		return itemHeight;
+	}
+
+	/**
+	 * Returns a (possibly empty) array of <code>String</code>s which are the
+	 * items in the receiver.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver's list
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String[] getItems() {
+		checkWidget();
+		int count = getItemCount();
+		String[] result = new String[count];
+		for (int i = 0; i < count; i++) {
+			result[i] = getItem(i);
+		}
+		return result;
+	}
+
+	/**
+	 * Returns an array of <code>String</code>s that are currently selected in
+	 * the receiver. The order of the items is unspecified. An empty array
+	 * indicates that no items are selected.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its selection, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return an array representing the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String[] getSelection() {
+		checkWidget();
+		QListWidget listWidget = getQListWidget();
+		java.util.List<QModelIndex> selectedIndices = listWidget.selectionModel().selectedRows();
+		String[] sel = new String[selectedIndices.size()];
+		int i = 0;
+		for (QModelIndex index : selectedIndices) {
+			sel[i] = listWidget.item(index.row()).text();
+			i++;
+		}
+		return sel;
+	}
+
+	/**
+	 * Returns the number of selected items contained in the receiver.
+	 * 
+	 * @return the number of selected items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionCount() {
+		checkWidget();
+		return getQListWidget().selectionModel().selectedRows().size();
+	}
+
+	/**
+	 * Returns the zero-relative index of the item which is currently selected
+	 * in the receiver, or -1 if no item is selected.
+	 * 
+	 * @return the index of the selected item or -1
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionIndex() {
+		checkWidget();
+		java.util.List<QModelIndex> selectedIndices = getQListWidget().selectionModel().selectedRows();
+		if (selectedIndices != null && selectedIndices.size() > 0) {
+			return selectedIndices.get(0).row();
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns the zero-relative indices of the items which are currently
+	 * selected in the receiver. The order of the indices is unspecified. The
+	 * array is empty if no items are selected.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its selection, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the array of indices of the selected items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int[] getSelectionIndices() {
+		checkWidget();
+		java.util.List<QModelIndex> selection = getQListWidget().selectionModel().selectedRows();
+		int[] selIndex = new int[selection.size()];
+		int i = 0;
+		for (QModelIndex index : selection) {
+			selIndex[i] = index.row();
+			i++;
+		}
+		return selIndex;
+	}
+
+	/**
+	 * Returns the zero-relative index of the item which is currently at the top
+	 * of the receiver. This index can change when items are scrolled or new
+	 * items are added or removed.
+	 * 
+	 * @return the index of the top item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getTopIndex() {
+		checkWidget();
+		QModelIndex modellIndex = getQListWidget().indexAt(new QPoint(1, 1));
+		return modellIndex == null ? -1 : modellIndex.row();
+	}
+
+	/**
+	 * Gets the index of an item.
+	 * <p>
+	 * The list is searched starting at 0 until an item is found that is equal
+	 * to the search item. If no item is found, -1 is returned. Indexing is zero
+	 * based.
+	 * 
+	 * @param string
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		return indexOf(string, 0);
+	}
+
+	/**
+	 * Searches the receiver's list starting at the given, zero-relative index
+	 * until an item is found that is equal to the argument, and returns the
+	 * index of that item. If no item is found or the starting index is out of
+	 * range, returns -1.
+	 * 
+	 * @param string
+	 *            the search item
+	 * @param start
+	 *            the zero-relative index at which to start the search
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(String string, int start) {
+		checkWidget();
+		if (string == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		QListWidget listWidget = getQListWidget();
+		int count = listWidget.count();
+		if (start < 0 || start > count - 1) {
+			return -1;
+		}
+		for (int i = start; i < count; i++) {
+			if (listWidget.item(i).equals(string)) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Returns <code>true</code> if the item is selected, and <code>false</code>
+	 * otherwise. Indices out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item
+	 * @return the selection state of the item at the index
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean isSelected(int index) {
+		checkWidget();
+		validateIndex(index);
+		QListWidgetItem item = getQListWidget().item(index);
+		if (item != null) {
+			return item.isSelected();
+		}
+		return false;
+	}
+
+	/**
+	 * Removes the items from the receiver at the given zero-relative indices.
+	 * 
+	 * @param indices
+	 *            the array of indices of the items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		for (int index : indices) {
+			_remove(index);
+		}
+	}
+
+	/**
+	 * Removes the item from the receiver at the given zero-relative index.
+	 * 
+	 * @param index
+	 *            the index for the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int index) {
+		checkWidget();
+		_remove(index);
+	}
+
+	void _remove(int index) {
+		validateIndex(index);
+		getQListWidget().takeItem(index).dispose();
+	}
+
+	/**
+	 * Removes the items from the receiver which are between the given
+	 * zero-relative start and end indices (inclusive).
+	 * 
+	 * @param start
+	 *            the start of the range
+	 * @param end
+	 *            the end of the range
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if either the start or end are
+	 *                not between 0 and the number of elements in the list minus
+	 *                1 (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int start, int end) {
+		checkWidget();
+		if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		QListWidget listWidget = getQListWidget();
+		int count = listWidget.count();
+		if (count == 0 || start >= count) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		start = Math.max(0, start);
+		end = Math.min(end, count - 1);
+		for (int i = end; i >= start; --i) {
+			listWidget.takeItem(i).dispose();
+		}
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item until an item is
+	 * found that is equal to the argument, and removes that item from the list.
+	 * 
+	 * @param string
+	 *            the item to remove
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the string is not found in
+	 *                the list</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int index = indexOf(string, 0);
+		if (index == -1) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		remove(index);
+	}
+
+	/**
+	 * Removes all of the items from the receiver.
+	 * <p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void removeAll() {
+		checkWidget();
+		getQListWidget().clear();
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's selection.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Selects the items at the given zero-relative indices in the receiver. The
+	 * current selection is not cleared before the new items are selected.
+	 * <p>
+	 * If the item at a given index is not selected, it is selected. If the item
+	 * at a given index was already selected, it remains selected. Indices that
+	 * are out of range and duplicate indices are ignored. If the receiver is
+	 * single-select and multiple indices are specified, then all indices are
+	 * ignored.
+	 * 
+	 * @param indices
+	 *            the array of indices for the items to select
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of indices is null
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see List#setSelection(int[])
+	 */
+	public void select(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int length = indices.length;
+		if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) {
+			return;
+		}
+		select(indices, false);
+	}
+
+	void select(int[] indices, boolean scroll) {
+		updateSelection(indices, new SelectionFlags(SelectionFlag.Select));
+	}
+
+	/**
+	 * Selects the item at the given zero-relative index in the receiver's list.
+	 * If the item at the index was already selected, it remains selected.
+	 * Indices that are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void select(int index) {
+		checkWidget();
+		select(index, false);
+	}
+
+	void select(int index, boolean scroll) {
+		if (index < 0) {
+			return;
+		}
+		int count = getQListWidget().count();
+		if (index >= count) {
+			return;
+		}
+		updateSelectionRange(index, index, new SelectionFlags(SelectionFlag.Select));
+	}
+
+	/**
+	 * Selects the items in the range specified by the given zero-relative
+	 * indices in the receiver. The range of indices is inclusive. The current
+	 * selection is not cleared before the new items are selected.
+	 * <p>
+	 * If an item in the given range is not selected, it is selected. If an item
+	 * in the given range was already selected, it remains selected. Indices
+	 * that are out of range are ignored and no items will be selected if start
+	 * is greater than end. If the receiver is single-select and there is more
+	 * than one item in the given range, then all indices are ignored.
+	 * 
+	 * @param start
+	 *            the start of the range
+	 * @param end
+	 *            the end of the range
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see List#setSelection(int,int)
+	 */
+	public void select(int start, int end) {
+		checkWidget();
+		if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) {
+			return;
+		}
+		int count = getQListWidget().count();
+		if (count == 0 || start >= count) {
+			return;
+		}
+		start = Math.max(0, start);
+		end = Math.min(end, count - 1);
+		if ((style & SWT.SINGLE) != 0) {
+			select(start, false);
+		} else {
+			select(start, end, false);
+		}
+	}
+
+	void select(int start, int end, boolean scroll) {
+		updateSelectionRange(start, end, new SelectionFlags(SelectionFlag.Select));
+	}
+
+	/**
+	 * Selects all of the items in the receiver.
+	 * <p>
+	 * If the receiver is single-select, do nothing.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void selectAll() {
+		checkWidget();
+		int count = getQListWidget().count();
+		if ((style & SWT.MULTI) != 0 && count > 0) {
+			updateSelectionRange(0, count - 1, new SelectionFlags(SelectionFlag.Select));
+		}
+	}
+
+	void setFocusIndex(int index) {
+		QModelIndex modelIndex = getQListWidget().model().index(index, 0);
+		getQListWidget().selectionModel().setCurrentIndex(modelIndex, SelectionFlag.Current);
+	}
+
+	/**
+	 * Sets the text of the item in the receiver's list at the given
+	 * zero-relative index to the string argument.
+	 * 
+	 * @param index
+	 *            the index for the item
+	 * @param string
+	 *            the new text for the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setItem(int index, String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		validateIndex(index);
+		int topIndex = getTopIndex();
+		boolean isSelected = isSelected(index);
+		remove(index);
+		add(string, index);
+		if (isSelected) {
+			select(index, false);
+		}
+		setTopIndex(topIndex);
+	}
+
+	/**
+	 * Sets the receiver's items to be the given array of items.
+	 * 
+	 * @param items
+	 *            the array of items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if an item in the items array
+	 *                is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setItems(String[] items) {
+		checkWidget();
+		if (items == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		for (String item : items) {
+			if (item == null) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		getQListWidget().clear();
+		getQListWidget().addItems(Arrays.asList(items));
+	}
+
+	/**
+	 * Selects the items at the given zero-relative indices in the receiver. The
+	 * current selection is cleared before the new items are selected.
+	 * <p>
+	 * Indices that are out of range and duplicate indices are ignored. If the
+	 * receiver is single-select and multiple indices are specified, then all
+	 * indices are ignored.
+	 * 
+	 * @param indices
+	 *            the indices of the items to select
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of indices is null
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see List#deselectAll()
+	 * @see List#select(int[])
+	 */
+	public void setSelection(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		deselectAll();
+		int length = indices.length;
+		if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) {
+			return;
+		}
+		select(indices, true);
+		if ((style & SWT.MULTI) != 0) {
+			int focusIndex = indices[0];
+			if (focusIndex >= 0) {
+				setFocusIndex(focusIndex);
+			}
+		}
+	}
+
+	/**
+	 * Sets the receiver's selection to be the given array of items. The current
+	 * selection is cleared before the new items are selected.
+	 * <p>
+	 * Items that are not in the receiver are ignored. If the receiver is
+	 * single-select and multiple items are specified, then all items are
+	 * ignored.
+	 * 
+	 * @param items
+	 *            the array of items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of items is null
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see List#deselectAll()
+	 * @see List#select(int[])
+	 * @see List#setSelection(int[])
+	 */
+	public void setSelection(String[] items) {
+		checkWidget();
+		if (items == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		deselectAll();
+		int length = items.length;
+		if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) {
+			return;
+		}
+		int focusIndex = -1;
+		for (int i = length - 1; i >= 0; --i) {
+			String string = items[i];
+			int index = 0;
+			if (string != null) {
+				int localFocus = -1;
+				while ((index = indexOf(string, index)) != -1) {
+					if (localFocus == -1) {
+						localFocus = index;
+					}
+					select(index, false);
+					if ((style & SWT.SINGLE) != 0 && isSelected(index)) {
+						showSelection();
+						return;
+					}
+					index++;
+				}
+				if (localFocus != -1) {
+					focusIndex = localFocus;
+				}
+			}
+		}
+		if ((style & SWT.MULTI) != 0) {
+			if (focusIndex >= 0) {
+				setFocusIndex(focusIndex);
+			}
+		}
+	}
+
+	/**
+	 * Selects the item at the given zero-relative index in the receiver. If the
+	 * item at the index was already selected, it remains selected. The current
+	 * selection is first cleared, then the new item is selected. Indices that
+	 * are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * @see List#deselectAll()
+	 * @see List#select(int)
+	 */
+	public void setSelection(int index) {
+		checkWidget();
+		deselectAll();
+		select(index, true);
+		if ((style & SWT.MULTI) != 0) {
+			if (index >= 0 && index < getQListWidget().count()) {
+				setFocusIndex(index);
+			}
+		}
+	}
+
+	/**
+	 * Selects the items in the range specified by the given zero-relative
+	 * indices in the receiver. The range of indices is inclusive. The current
+	 * selection is cleared before the new items are selected.
+	 * <p>
+	 * Indices that are out of range are ignored and no items will be selected
+	 * if start is greater than end. If the receiver is single-select and there
+	 * is more than one item in the given range, then all indices are ignored.
+	 * 
+	 * @param start
+	 *            the start index of the items to select
+	 * @param end
+	 *            the end index of the items to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see List#deselectAll()
+	 * @see List#select(int,int)
+	 */
+	public void setSelection(int start, int end) {
+		checkWidget();
+		deselectAll();
+		if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) {
+			return;
+		}
+		int count = getQListWidget().count();
+		if (count == 0 || start >= count) {
+			return;
+		}
+		start = Math.max(0, start);
+		end = Math.min(end, count - 1);
+		updateSelectionRange(start, end, new SelectionFlags(SelectionFlag.Select));
+	}
+
+	/**
+	 * Sets the zero-relative index of the item which is currently at the top of
+	 * the receiver. This index can change when items are scrolled or new items
+	 * are added and removed.
+	 * 
+	 * @param index
+	 *            the index of the top item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setTopIndex(int index) {
+		checkWidget();
+		validateIndex(index);
+		getQListWidget().scrollToItem(getQListWidget().item(index), ScrollHint.PositionAtTop);
+	}
+
+	/**
+	 * Shows the selection. If the selection is already showing in the receiver,
+	 * this method simply returns. Otherwise, the items are scrolled until the
+	 * selection is visible.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void showSelection() {
+		checkWidget();
+		getQListWidget().scrollToItem(getQListWidget().currentItem(), ScrollHint.PositionAtTop);
+	}
+
+	private final class MyListWidget extends QListWidget {
+
+		@Override
+		protected void startDrag(DropActions supportedActions) {
+			//			System.out.println("MyQTreeWidget.startDrag: " + supportedActions);
+		}
+
+		@Override
+		protected void dropEvent(QDropEvent event) {
+			sendDropEvent(event);
+		}
+
+		@Override
+		protected void dragMoveEvent(QDragMoveEvent event) {
+			sendDragMoveEvent(event);
+		}
+
+		@Override
+		protected void dragEnterEvent(QDragEnterEvent event) {
+			sendDragEnterEvent(event);
+		}
+
+		@Override
+		protected void dragLeaveEvent(QDragLeaveEvent event) {
+			sendDragLeaveEvent(event);
+		}
+
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java
new file mode 100644
index 0000000..14e057d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Menu.java	
@@ -0,0 +1,1423 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.List;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.Qt.LayoutDirection;
+import com.trolltech.qt.gui.QAction;
+import com.trolltech.qt.gui.QActionGroup;
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QBrush;
+import com.trolltech.qt.gui.QColor;
+import com.trolltech.qt.gui.QMenu;
+import com.trolltech.qt.gui.QMenuBar;
+import com.trolltech.qt.gui.QPalette;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QPalette.ColorRole;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.HelpListener;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class are user interface objects that contain menu items.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP</dd>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Help, Hide, Show</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of BAR, DROP_DOWN and POP_UP may be specified. Only one of
+ * LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#menu">Menu snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Menu extends Widget {
+	private int x, y;
+	private boolean hasLocation;
+	private Color foreground = null;
+	private Color background = null;
+	private Image backgroundImage;
+	MenuItem cascade;
+	Decorations parent;
+	private QActionGroup actionGroup;
+
+	/**
+	 * Constructs a new instance of this class given its parent, and sets the
+	 * style for the instance so that the instance will be a popup menu on the
+	 * given parent's shell.
+	 * <p>
+	 * After constructing a menu, it can be set into its parent using
+	 * <code>parent.setMenu(menu)</code>. In this case, the parent may be any
+	 * control in the same widget tree as the parent.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a control which will be the parent of the new instance (cannot
+	 *            be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#POP_UP
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Menu(Control parent) {
+		this(checkNull(parent).menuShell(), null, SWT.POP_UP);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Decorations</code>) and a style value describing its behavior and
+	 * appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * After constructing a menu or menuBar, it can be set into its parent using
+	 * <code>parent.setMenu(menu)</code> or
+	 * <code>parent.setMenuBar(menuBar)</code>.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a decorations control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of menu to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#BAR
+	 * @see SWT#DROP_DOWN
+	 * @see SWT#POP_UP
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Menu(Decorations parent, int style) {
+		this(parent, null, checkStyle(style));
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Menu</code>) and sets the style for the instance so that the
+	 * instance will be a drop-down menu on the given parent's parent.
+	 * <p>
+	 * After constructing a drop-down menu, it can be set into its parentMenu
+	 * using <code>parentMenu.setMenu(menu)</code>.
+	 * </p>
+	 * 
+	 * @param parentMenu
+	 *            a menu which will be the parent of the new instance (cannot be
+	 *            null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#DROP_DOWN
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Menu(Menu parentMenu) {
+		this(checkNull(parentMenu).parent, parentMenu.getQWidget(), SWT.DROP_DOWN);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>MenuItem</code>) and sets the style for the instance so that the
+	 * instance will be a drop-down menu on the given parent's parent menu.
+	 * <p>
+	 * After constructing a drop-down menu, it can be set into its parentItem
+	 * using <code>parentItem.setMenu(menu)</code>.
+	 * </p>
+	 * 
+	 * @param parentItem
+	 *            a menu item which will be the parent of the new instance
+	 *            (cannot be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#DROP_DOWN
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Menu(MenuItem parentItem) {
+		this(checkNull(parentItem).parent);
+	}
+
+	Menu(Decorations parent, QWidget qParent, int style) {
+		super(parent, checkStyle(style));
+		display = parent.display;
+		createWidget(parent, qParent, style);
+	}
+
+	protected void createWidget(Decorations parent, QWidget qParent, int style) {
+		state |= DRAG_DETECT;
+		this.parent = parent;
+		checkAndUpdateOrientation(parent);
+		QWidget qtControl = createQtControl(qParent != null ? qParent : parent.getQWidget());
+		if (qtControl == null) {
+			error(SWT.ERROR_UNSPECIFIED);
+		}
+		setQWidget(qtControl);
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			qtControl.setLayoutDirection(LayoutDirection.RightToLeft);
+		}
+		register();
+		if ((state & PARENT_BACKGROUND) != 0) {
+			updateBackground();
+		}
+		parent.addMenu(this);
+	}
+
+	protected QWidget createQtControl(QWidget parent) {
+		state &= ~CANVAS;
+		if (isMenuBar()) {
+			return new QMenuBar(parent);
+		}
+		return new QMenu(parent);
+	}
+
+	QMenuBar getQMenuBar() {
+		return (QMenuBar) getQWidget();
+	}
+
+	QMenu getQMenu() {
+		return (QMenu) getQWidget();
+	}
+
+	void addToActionGroup(QAction action) {
+		initActionGroup();
+		actionGroup.addAction(action);
+	}
+
+	void removeFromActionGroup(QAction action) {
+		if (hasActionGroup()) {
+			actionGroup.removeAction(action);
+		}
+	}
+
+	private boolean hasActionGroup() {
+		return actionGroup != null;
+	}
+
+	private void initActionGroup() {
+		if (actionGroup == null) {
+			actionGroup = new QActionGroup(getQWidget());
+			if ((parent.style & SWT.NO_RADIO_GROUP) != 0) {
+				actionGroup.setExclusive(false);
+			}
+		}
+	}
+
+	void register() {
+		display.addControl(getQWidget(), this);
+	}
+
+	void deregister() {
+		display.removeControl(getQWidget());
+	}
+
+	void _setVisible(boolean visible) {
+		if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) {
+			return;
+		}
+		getQWidget().setHidden(!visible);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when help events are generated for the control, by sending it one of the
+	 * messages defined in the <code>HelpListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see HelpListener
+	 * @see #removeHelpListener
+	 */
+	public void addHelpListener(HelpListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Help, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when menus are hidden or shown, by sending it one of the messages defined
+	 * in the <code>MenuListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MenuListener
+	 * @see #removeMenuListener
+	 */
+	public void addMenuListener(MenuListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Hide, typedListener);
+		addListener(SWT.Show, typedListener);
+	}
+
+	static Control checkNull(Control control) {
+		if (control == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return control;
+	}
+
+	static Menu checkNull(Menu menu) {
+		if (menu == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return menu;
+	}
+
+	static MenuItem checkNull(MenuItem item) {
+		if (item == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return item;
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0);
+	}
+
+	void addAction(QAction action, int index) {
+		QWidget menu = getQWidget();
+		int itemCount = _getItemCount();
+		if (index >= 0 && index < itemCount) {
+			MenuItem[] items = getItems();
+			QAction before = items[index].getQAction();
+			menu.insertAction(before, action);
+		} else {
+			menu.addAction(action);
+		}
+	}
+
+	void removeAction(QAction action) {
+		if (isMenuBar()) {
+			getQMenuBar().removeAction(action);
+		} else {
+			getQMenu().removeAction(action);
+		}
+	}
+
+	boolean isMenuBar() {
+		return (style & SWT.BAR) != 0;
+	}
+
+	Color defaultBackground() {
+		return display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
+	}
+
+	Color defaultForeground() {
+		return display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
+	}
+
+	void fixMenus(Decorations newParent) {
+		MenuItem[] items = getItems();
+		for (int i = 0; i < items.length; i++) {
+			items[i].fixMenus(newParent);
+		}
+		parent.removeMenu(this);
+		newParent.addMenu(this);
+		this.parent = newParent;
+	}
+
+	/**
+	 * Returns the receiver's background color.
+	 * 
+	 * @return the background color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	/* public */Color getBackground() {
+		checkWidget();
+		return background != null ? Color.qt_new(display, background.getColor()) : defaultBackground();
+	}
+
+	/**
+	 * Returns the receiver's background image.
+	 * 
+	 * @return the background image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	/* public */Image getBackgroundImage() {
+		checkWidget();
+		return backgroundImage;
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent (or its display if its parent is null), unless the receiver
+	 * is a menu or a shell. In this case, the location is relative to the
+	 * display.
+	 * <p>
+	 * Note that the bounds of a menu or menu item are undefined when the menu
+	 * is not visible. This is because most platforms compute the bounds of a
+	 * menu dynamically just before it is displayed.
+	 * </p>
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	/* public */Rectangle getBounds() {
+		checkWidget();
+		return QtSWTConverter.convert(getQWidget().frameGeometry());
+	}
+
+	/**
+	 * Returns the default menu item or null if none has been previously set.
+	 * 
+	 * @return the default menu item.
+	 * 
+	 *         </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public MenuItem getDefaultItem() {
+		checkWidget();
+		// if ( OS.IsWinCE )
+		// return null;
+		// int id = OS.GetMenuDefaultItem( handle, OS.MF_BYCOMMAND,
+		// OS.GMDI_USEDISABLED );
+		// if ( id == -1 )
+		// return null;
+		// MENUITEMINFO info = new MENUITEMINFO();
+		// info.cbSize = MENUITEMINFO.sizeof;
+		// info.fMask = OS.MIIM_ID;
+		// if ( OS.GetMenuItemInfo( handle, id, false, info ) ) {
+		// return display.getMenuItem( info.wID );
+		// }
+		return null;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled, and
+	 * <code>false</code> otherwise. A disabled menu is typically not selectable
+	 * from the user interface and draws with an inactive or "grayed" look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #isEnabled
+	 */
+	public boolean getEnabled() {
+		checkWidget();
+		return getQMenuBar().isEnabled();
+	}
+
+	/**
+	 * Returns the foreground color that the receiver will use to draw.
+	 * 
+	 * @return the receiver's foreground color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	/* public */Color getForeground() {
+		checkWidget();
+		return foreground != null ? Color.qt_new(display, foreground.getColor()) : defaultForeground();
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public MenuItem getItem(int index) {
+		checkWidget();
+		List<QAction> list = getQWidget().actions();
+		int count = list.size();
+		if (!(0 <= index && index < count)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		Widget widget = display.findControl(list.get(index));
+		if (widget == null || !MenuItem.class.isInstance(widget)) {
+			error(SWT.ERROR_CANNOT_GET_ITEM);
+		}
+		return (MenuItem) widget;
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return _getItemCount();
+	}
+
+	/**
+	 * Returns a (possibly empty) array of <code>MenuItem</code>s which are the
+	 * items in the receiver.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public MenuItem[] getItems() {
+		checkWidget();
+		List<QAction> list = getQWidget().actions();
+		int count = list.size();
+		if (count == 0) {
+			return new MenuItem[0];
+		}
+		MenuItem[] children = new MenuItem[count];
+		int items = 0;
+		for (QAction action : list) {
+			if (action != null) {
+				Widget widget = display.findControl(action);
+				if (widget != null && widget != this) {
+					if (widget instanceof MenuItem) {
+						children[items++] = (MenuItem) widget;
+					}
+				}
+			}
+		}
+		if (items == count) {
+			return children;
+		}
+		MenuItem[] newChildren = new MenuItem[items];
+		System.arraycopy(children, 0, newChildren, 0, items);
+		return newChildren;
+	}
+
+	int _getItemCount() {
+		return getQWidget().actions().size();
+	}
+
+	@Override
+	String getNameText() {
+		String result = "";//$NON-NLS-1$
+		MenuItem[] items = getItems();
+		int length = items.length;
+		if (length > 0) {
+			for (int i = 0; i < length - 1; i++) {
+				result = result + items[i].getNameText() + ", ";//$NON-NLS-1$
+			}
+			result = result + items[length - 1].getNameText();
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Decorations</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Decorations getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns the receiver's parent item, which must be a <code>MenuItem</code>
+	 * or null when the receiver is a root.
+	 * 
+	 * @return the receiver's parent item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public MenuItem getParentItem() {
+		checkWidget();
+		return cascade;
+	}
+
+	/**
+	 * Returns the receiver's parent item, which must be a <code>Menu</code> or
+	 * null when the receiver is a root.
+	 * 
+	 * @return the receiver's parent item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Menu getParentMenu() {
+		checkWidget();
+		if (cascade != null) {
+			return cascade.parent;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the receiver's shell. For all controls other than shells, this
+	 * simply returns the control's nearest ancestor shell. Shells return
+	 * themselves, even if they are children of other shells.
+	 * 
+	 * @return the receiver's shell
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getParent
+	 */
+	public Shell getShell() {
+		checkWidget();
+		return parent.getShell();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getVisible() {
+		checkWidget();
+		if ((style & SWT.BAR) != 0) {
+			return this == parent.menuShell().menuBar;
+		}
+		if ((style & SWT.POP_UP) != 0) {
+			Menu[] popups = display.popups;
+			if (popups == null) {
+				return false;
+			}
+			for (int i = 0; i < popups.length; i++) {
+				if (popups[i] == this) {
+					return true;
+				}
+			}
+		}
+		Shell shell = getShell();
+		Menu menu = shell.activeMenu;
+		while (menu != null && menu != this) {
+			menu = menu.getParentMenu();
+		}
+		return this == menu;
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item (index 0) until
+	 * an item is found that is equal to the argument, and returns the index of
+	 * that item. If no item is found, returns -1.
+	 * 
+	 * @param item
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(MenuItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (item.parent != this) {
+			return -1;
+		}
+		List<QAction> actions = getQWidget().actions();
+		for (int i = 0; i < actions.size(); i++) {
+			if (actions.get(i) == item.getQAction()) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled and all of the
+	 * receiver's ancestors are enabled, and <code>false</code> otherwise. A
+	 * disabled menu is typically not selectable from the user interface and
+	 * draws with an inactive or "grayed" look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getEnabled
+	 */
+	public boolean isEnabled() {
+		checkWidget();
+		Menu parentMenu = getParentMenu();
+		if (parentMenu == null) {
+			return getEnabled() && parent.isEnabled();
+		}
+		return getEnabled() && parentMenu.isEnabled();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible and all of the
+	 * receiver's ancestors are visible and <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getVisible
+	 */
+	public boolean isVisible() {
+		checkWidget();
+		return getVisible();
+	}
+
+	void redraw() {
+		if (!isVisible()) {
+			return;
+		}
+		if ((style & SWT.BAR) != 0) {
+			display.addBar(this);
+		}
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		cascade = null;
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		MenuItem[] items = getItems();
+		for (int i = 0; i < items.length; i++) {
+			MenuItem item = items[i];
+			if (item != null && !item.isDisposed()) {
+				item.release(false);
+			}
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void releaseParent() {
+		super.releaseParent();
+		if ((style & SWT.BAR) != 0) {
+			display.removeBar(this);
+			if (this == parent.menuBar) {
+				parent.setMenuBar(null);
+			}
+		} else {
+			if ((style & SWT.POP_UP) != 0) {
+				display.removePopup(this);
+			}
+		}
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		backgroundImage = null;
+		if (parent != null) {
+			parent.removeMenu(this);
+		}
+		parent = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the help events are generated for the control.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see HelpListener
+	 * @see #addHelpListener
+	 */
+	public void removeHelpListener(HelpListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Help, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the menu events are generated for the control.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MenuListener
+	 * @see #addMenuListener
+	 */
+	public void removeMenuListener(MenuListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Hide, listener);
+		eventTable.unhook(SWT.Show, listener);
+	}
+
+	/**
+	 * Sets the receiver's background color to the color specified by the
+	 * argument, or to the default system color for the control if the argument
+	 * is null.
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	/* public */void setBackground(Color color) {
+		checkWidget();
+		if (color != null) {
+			if (color.isDisposed()) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		Color oldColor = background;
+		if (color == null) {
+			background = null;
+		} else {
+			if (color.equals(background)) {
+				return;
+			}
+			background = color;
+		}
+		if (oldColor != null) {
+			oldColor.dispose();
+		}
+		updateBackground();
+	}
+
+	/**
+	 * Sets the receiver's background image to the image specified by the
+	 * argument, or to the default system color for the control if the argument
+	 * is null. The background image is tiled to fill the available space.
+	 * 
+	 * @param image
+	 *            the new image (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument is not a
+	 *                bitmap</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	/* public */void setBackgroundImage(Image image) {
+		checkWidget();
+		if (image != null) {
+			if (image.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (!image.isBitmap()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		if (backgroundImage == image) {
+			return;
+		}
+		backgroundImage = image;
+		updateBackground();
+	}
+
+	/**
+	 * Sets the receiver's foreground color to the color specified by the
+	 * argument, or to the default system color for the control if the argument
+	 * is null.
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	/* public */void setForeground(Color color) {
+		checkWidget();
+		if (color != null) {
+			if (color.isDisposed()) {
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+		}
+		Color oldColor = foreground;
+		if (color == null) {
+			foreground = null;
+		} else {
+			if (color.equals(foreground)) {
+				return;
+			}
+			foreground = color;
+		}
+		if (oldColor != null) {
+			oldColor.dispose();
+		}
+		applyForegroundColor(foreground);
+	}
+
+	/**
+	 * Sets the default menu item to the argument or removes the default
+	 * emphasis when the argument is <code>null</code>.
+	 * 
+	 * @param item
+	 *            the default menu item or null
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the menu item has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setDefaultItem(MenuItem item) {
+		checkWidget();
+		if (item != null) {
+			if (item.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (item.parent != this) {
+				return;
+			}
+			if (!isMenuBar()) {
+				getQMenu().setDefaultAction(item.getQAction());
+			}
+		} else {
+			if (!isMenuBar()) {
+				getQMenu().setDefaultAction(null);
+			}
+		}
+	}
+
+	/**
+	 * Enables the receiver if the argument is <code>true</code>, and disables
+	 * it otherwise. A disabled menu is typically not selectable from the user
+	 * interface and draws with an inactive or "grayed" look.
+	 * 
+	 * @param enabled
+	 *            the new enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setEnabled(boolean enabled) {
+		checkWidget();
+		getQWidget().setEnabled(enabled);
+		getQWidget().update();
+	}
+
+	/**
+	 * Sets the location of the receiver, which must be a popup, to the point
+	 * specified by the arguments which are relative to the display.
+	 * <p>
+	 * Note that this is different from most widgets where the location of the
+	 * widget is relative to the parent.
+	 * </p>
+	 * <p>
+	 * Note that the platform window manager ultimately has control over the
+	 * location of popup menus.
+	 * </p>
+	 * 
+	 * @param x
+	 *            the new x coordinate for the receiver
+	 * @param y
+	 *            the new y coordinate for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLocation(int x, int y) {
+		checkWidget();
+		if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) {
+			return;
+		}
+		this.x = x;
+		this.y = y;
+		hasLocation = true;
+	}
+
+	/**
+	 * Sets the location of the receiver, which must be a popup, to the point
+	 * specified by the argument which is relative to the display.
+	 * <p>
+	 * Note that this is different from most widgets where the location of the
+	 * widget is relative to the parent.
+	 * </p>
+	 * <p>
+	 * Note that the platform window manager ultimately has control over the
+	 * location of popup menus.
+	 * </p>
+	 * 
+	 * @param location
+	 *            the new location for the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public void setLocation(Point location) {
+		checkWidget();
+		if (location == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setLocation(location.x, location.y);
+	}
+
+	/**
+	 * Marks the receiver as visible if the argument is <code>true</code>, and
+	 * marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param visible
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setVisible(boolean visible) {
+		checkWidget();
+		if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) {
+			return;
+		}
+		if (visible) {
+			display.addPopup(this);
+			if (hasLocation) {
+				getQMenu().move(x, y);
+			}
+			getQMenu().setVisible(true);
+		} else {
+			display.removePopup(this);
+			_setVisible(false);
+		}
+	}
+
+	@Override
+	public boolean qtHideEvent(QObject source) {
+		if (source == getQWidget()) {
+			if (!isDisposed()) {
+				sendEvent(SWT.Hide);
+			}
+		}
+		return super.qtHideEvent(source);
+	}
+
+	@Override
+	public boolean qtShowEvent(QObject source) {
+		if (source == getQWidget()) {
+			if (!isDisposed()) {
+				sendEvent(SWT.Show);
+			}
+		}
+		return super.qtShowEvent(source);
+	}
+
+	void updateBackground() {
+		if (backgroundImage != null) {
+			applyBackgroundImage(backgroundImage);
+			return;
+		}
+		if (background != null) {
+			applyBackgroundColor(background);
+			return;
+		}
+	}
+
+	private void applyBackgroundColor(Color color) {
+		updatedPalette(color, getBackgroundColorRoles());
+		updateAutoFillBackground();
+	}
+
+	private void updatedPalette(Color color, ColorRole[] colorRoles) {
+		QPalette palette = getQWidget().palette();
+		if (color != null) {
+			QColor qColor = new QColor(color.getColor());
+			for (ColorRole role : colorRoles) {
+				palette.setColor(role, qColor);
+			}
+		} else {
+			QPalette defaultPalette = QApplication.palette();
+			for (ColorRole role : colorRoles) {
+				QBrush brush = defaultPalette.brush(role);
+				palette.setBrush(role, brush);
+			}
+		}
+		getQWidget().setPalette(palette);
+	}
+
+	private QPalette.ColorRole[] getBackgroundColorRoles() {
+		return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base, QPalette.ColorRole.Button };
+	}
+
+	private void updateAutoFillBackground() {
+		if (background != null || backgroundImage != null) {
+			getQWidget().setAutoFillBackground(true);
+		}
+	}
+
+	private void applyBackgroundImage(Image image) {
+		QPalette palette = getQWidget().palette().clone();
+		try {
+			setPaletteBgImage(palette, image);
+			getQWidget().setPalette(palette);
+		} finally {
+			palette.dispose();
+		}
+		updateAutoFillBackground();
+	}
+
+	private void setPaletteBgImage(QPalette palette, Image image) {
+		ColorRole[] bkRoles = getBackgroundImageRoles();
+		if (image != null) {
+			for (ColorRole bkRole : bkRoles) {
+				palette.setBrush(bkRole, new QBrush(image.getQPixmap()));
+			}
+		} else {
+			QPalette defaultPalette = QApplication.palette();
+			for (ColorRole role : bkRoles) {
+				QBrush brush = defaultPalette.brush(role);
+				palette.setBrush(role, brush.clone());
+			}
+		}
+	}
+
+	private ColorRole[] getBackgroundImageRoles() {
+		return new QPalette.ColorRole[] { QPalette.ColorRole.Window, QPalette.ColorRole.Base };
+	}
+
+	private void applyForegroundColor(Color color) {
+		updatedPalette(color, getForegroundColorRoles());
+	}
+
+	private ColorRole[] getForegroundColorRoles() {
+		return new ColorRole[] { QPalette.ColorRole.WindowText, QPalette.ColorRole.Text, QPalette.ColorRole.ButtonText };
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MenuItem.java
new file mode 100644
index 0000000..4ea324f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MenuItem.java	
@@ -0,0 +1,1045 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.HashMap;
+
+import com.trolltech.qt.core.Qt;
+import com.trolltech.qt.gui.QAction;
+import com.trolltech.qt.gui.QIcon;
+import com.trolltech.qt.gui.QKeySequence;
+import com.trolltech.qt.gui.QMenu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ArmListener;
+import org.eclipse.swt.events.HelpListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * issues notification when pressed and released.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>CHECK, CASCADE, PUSH, RADIO, SEPARATOR</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Arm, Help, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles CHECK, CASCADE, PUSH, RADIO and SEPARATOR may be
+ * specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class MenuItem extends Item {
+	private QAction action;
+	Menu parent, menu;
+	int id, accelerator, userId;
+
+	private HashMap<Integer, Integer> modifiers = new HashMap<Integer, Integer>();
+	private HashMap<Integer, Integer> accelerators = new HashMap<Integer, Integer>();
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Menu</code>) and a style value describing its behavior and
+	 * appearance. The item is added to the end of the items maintained by its
+	 * parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a menu control which will be the parent of the new instance
+	 *            (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#CHECK
+	 * @see SWT#CASCADE
+	 * @see SWT#PUSH
+	 * @see SWT#RADIO
+	 * @see SWT#SEPARATOR
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public MenuItem(Menu parent, int style) {
+		super(parent, checkStyle(style));
+		this.parent = parent;
+		createAction(parent, style, -1);
+		initializeKeys();
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Menu</code>), a style value describing its behavior and appearance,
+	 * and the index at which to place it in the items maintained by its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a menu control which will be the parent of the new instance
+	 *            (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#CHECK
+	 * @see SWT#CASCADE
+	 * @see SWT#PUSH
+	 * @see SWT#RADIO
+	 * @see SWT#SEPARATOR
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public MenuItem(Menu parent, int style, int index) {
+		super(parent, checkStyle(style));
+		this.parent = parent;
+		createAction(parent, style, index);
+		initializeKeys();
+	}
+
+	MenuItem(Menu parent, Menu menu, int style, int index) {
+		super(parent, checkStyle(style));
+		this.parent = parent;
+		this.menu = menu;
+		if (menu != null) {
+			menu.cascade = this;
+		}
+		display.addMenuItem(this);
+		initializeKeys();
+	}
+
+	protected void createAction(Menu parent, int style, int index) {
+		action = new QAction(parent.getQWidget());
+
+		parent.addAction(action, index);
+		int bits = SWT.CHECK | SWT.RADIO | SWT.PUSH | SWT.SEPARATOR;
+		switch (style & bits) {
+		case SWT.SEPARATOR:
+			action.setSeparator(true);
+			break;
+		case SWT.RADIO:
+			action.setCheckable(true);
+			parent.addToActionGroup(action);
+			break;
+		case SWT.CHECK:
+			action.setCheckable(true);
+			break;
+		case SWT.PUSH:
+		default:
+			break;
+		}
+		connectSignals();
+		display.addControl(action, this);
+	}
+
+	QAction getQAction() {
+		return action;
+	}
+
+	protected void connectSignals() {
+		if ((style & SWT.CASCADE) == 0) {
+			getQAction().triggered.connect(this, "triggerEvent(boolean)");//$NON-NLS-1$
+		}
+		getQAction().hovered.connect(this, "hoverEvent()");//$NON-NLS-1$
+	}
+
+	protected void triggerEvent(boolean triggered) {
+		Event event = new Event();
+		sendEvent(SWT.Selection, event);
+	}
+
+	protected void hoverEvent() {
+		sendEvent(SWT.Arm);
+	}
+
+	/**
+	 * Initialize the hashmaps with the SWT keys mapping to QT keys. This is
+	 * needed for the accelerator.
+	 */
+	private void initializeKeys() {
+
+		modifiers.put(SWT.CTRL, Qt.Modifier.CTRL.value()); // 262144, 67108864
+		modifiers.put(SWT.MOD1, Qt.Modifier.CTRL.value()); // 262144, 67108864
+		modifiers.put(SWT.SHIFT, Qt.Modifier.SHIFT.value());
+		modifiers.put(SWT.MOD2, Qt.Modifier.SHIFT.value());
+		modifiers.put(SWT.ALT, Qt.Modifier.ALT.value());
+
+		accelerators.put(SWT.ARROW_DOWN, Qt.Key.Key_Down.value()); // 16777218
+		accelerators.put(SWT.ARROW_LEFT, Qt.Key.Key_Left.value()); // 16777219
+		accelerators.put(SWT.ARROW_RIGHT, Qt.Key.Key_Right.value()); // 16777220
+		accelerators.put(SWT.ARROW_UP, Qt.Key.Key_Up.value()); // 16777217
+		accelerators.put(SWT.F1, Qt.Key.Key_F1.value()); // 16777226
+		accelerators.put(SWT.F2, Qt.Key.Key_F2.value());
+		accelerators.put(SWT.F3, Qt.Key.Key_F3.value());
+		accelerators.put(SWT.F4, Qt.Key.Key_F4.value());
+		accelerators.put(SWT.F5, Qt.Key.Key_F5.value());
+		accelerators.put(SWT.F6, Qt.Key.Key_F6.value());
+		accelerators.put(SWT.F7, Qt.Key.Key_F7.value());
+		accelerators.put(SWT.F8, Qt.Key.Key_F8.value());
+		accelerators.put(SWT.F9, Qt.Key.Key_F9.value());
+		accelerators.put(SWT.F10, Qt.Key.Key_F10.value());
+		accelerators.put(SWT.F11, Qt.Key.Key_F11.value());
+		accelerators.put(SWT.F12, Qt.Key.Key_F12.value());
+		accelerators.put(SWT.F13, Qt.Key.Key_F13.value());
+		accelerators.put(SWT.F14, Qt.Key.Key_F14.value());
+		accelerators.put(SWT.F15, Qt.Key.Key_F15.value());
+		accelerators.put(SWT.PAGE_UP, Qt.Key.Key_PageUp.value());
+		accelerators.put(SWT.PAGE_DOWN, Qt.Key.Key_PageDown.value());
+		accelerators.put(SWT.HOME, Qt.Key.Key_Home.value());
+		accelerators.put(SWT.END, Qt.Key.Key_End.value());
+		accelerators.put(SWT.INSERT, Qt.Key.Key_Insert.value());
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the arm events are generated for the control, by sending it one of
+	 * the messages defined in the <code>ArmListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ArmListener
+	 * @see #removeArmListener
+	 */
+	public void addArmListener(ArmListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Arm, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the help events are generated for the control, by sending it one of
+	 * the messages defined in the <code>HelpListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see HelpListener
+	 * @see #removeHelpListener
+	 */
+	public void addHelpListener(HelpListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Help, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the menu item is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the stateMask field of the
+	 * event object is valid. <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the menu item is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.CASCADE, 0);
+	}
+
+	@Override
+	void destroyWidget() {
+		parent.removeAction(getQAction());
+		super.destroyWidget();
+	}
+
+	void fixMenus(Decorations newParent) {
+		if (menu != null) {
+			menu.fixMenus(newParent);
+		}
+	}
+
+	/**
+	 * Returns the widget accelerator. An accelerator is the bit-wise OR of zero
+	 * or more modifier masks and a key. Examples:
+	 * <code>SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2</code>. The default
+	 * value is zero, indicating that the menu item does not have an
+	 * accelerator.
+	 * 
+	 * @return the accelerator or 0
+	 * 
+	 *         </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getAccelerator() {
+		checkWidget();
+		return accelerator;
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent (or its display if its parent is null).
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	/* public */Rectangle getBounds() {
+		checkWidget();
+		return QtSWTConverter.convert(getQWidget().frameGeometry());
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled, and
+	 * <code>false</code> otherwise. A disabled menu item is typically not
+	 * selectable from the user interface and draws with an inactive or "grayed"
+	 * look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #isEnabled
+	 */
+	public boolean getEnabled() {
+		checkWidget();
+		return getQAction().isEnabled();
+	}
+
+	/**
+	 * Gets the identifier associated with the receiver.
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 * 
+	 * @since 3.7
+	 */
+	public int getID () {
+			checkWidget();
+			return userId;
+	 }
+
+	/**
+	 * Returns the receiver's cascade menu if it has one or null if it does not.
+	 * Only <code>CASCADE</code> menu items can have a pull down menu. The
+	 * sequence of key strokes, button presses and/or button releases that are
+	 * used to request a pull down menu is platform specific.
+	 * 
+	 * @return the receiver's menu
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	@Override
+	public Menu getMenu() {
+		checkWidget();
+		return menu;
+	}
+
+	@Override
+	String getNameText() {
+		if ((style & SWT.SEPARATOR) != 0) {
+			return "|";//$NON-NLS-1$
+		}
+		return super.getNameText();
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Menu</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Menu getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is selected, and false
+	 * otherwise.
+	 * <p>
+	 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, it
+	 * is selected when it is checked.
+	 * 
+	 * @return the selection state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getSelection() {
+		checkWidget();
+		return getQAction().isChecked();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled and all of the
+	 * receiver's ancestors are enabled, and <code>false</code> otherwise. A
+	 * disabled menu item is typically not selectable from the user interface
+	 * and draws with an inactive or "grayed" look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getEnabled
+	 */
+	public boolean isEnabled() {
+		return getEnabled() && parent.isEnabled();
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		if (menu != null) {
+			menu.release(false);
+			menu = null;
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void releaseQWidget() {
+		if ((style & SWT.RADIO) != 0) {
+			parent.removeFromActionGroup(action);
+		}
+		parent.removeAction(action);
+		display.removeControl(action);
+		parent = null;
+		action = null;
+		id = -1;
+		super.releaseQWidget();
+	}
+
+	@Override
+	void releaseParent() {
+		super.releaseParent();
+		if (menu != null) {
+			menu.dispose();
+		}
+		menu = null;
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		accelerator = 0;
+		display.removeMenuItem(this);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the arm events are generated for the control.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ArmListener
+	 * @see #addArmListener
+	 */
+	public void removeArmListener(ArmListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Arm, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the help events are generated for the control.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see HelpListener
+	 * @see #addHelpListener
+	 */
+	public void removeHelpListener(HelpListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Help, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	void selectRadio() {
+		int index = 0;
+		MenuItem[] items = parent.getItems();
+		while (index < items.length && items[index] != this) {
+			index++;
+		}
+		int i = index - 1;
+		while (i >= 0 && items[i].setRadioSelection(false)) {
+			--i;
+		}
+		int j = index + 1;
+		while (j < items.length && items[j].setRadioSelection(false)) {
+			j++;
+		}
+		setSelection(true);
+	}
+
+	/**
+	 * Sets the widget accelerator. An accelerator is the bit-wise OR of zero or
+	 * more modifier masks and a key. Examples:
+	 * <code>SWT.MOD1 | SWT.MOD2 | 'T', SWT.MOD3 | SWT.F2</code>.
+	 * <code>SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2</code>. The default
+	 * value is zero, indicating that the menu item does not have an
+	 * accelerator.
+	 * 
+	 * @param accelerator
+	 *            an integer that is the bit-wise OR of masks and a key
+	 * 
+	 *            </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setAccelerator(int accelerator) {
+		checkWidget();
+		int seq = 0;
+		if (this.accelerator == accelerator) {
+			return;
+		}
+		this.accelerator = accelerator;
+		/*
+		 * fetch the modifiers of the accelerator (something like
+		 * CTRL+SHIFT...). There can be more than one modifier.
+		 */
+		for (Integer modifier : modifiers.keySet()) {
+			if ((accelerator & modifier) != 0) {
+				accelerator -= modifier;
+				seq += modifiers.get(modifier);
+			}
+		}
+
+		/*
+		 * Fetch uppercase characters and other ascii characters (+, =, ?...).
+		 * Only one of this chars is allowed.
+		 */
+		if (accelerator >= 32 && accelerator <= 96 || accelerator >= 123 && accelerator <= 127) {
+			seq += accelerator;
+			accelerator -= accelerator;
+		}
+		/*
+		 * Transform lowercase characters to uppercase characters, because QT
+		 * can only handle uppercase characters and there is no difference
+		 * between CTRL+m and CTRL+M. Only one of this chars is allowed.
+		 */
+		if (accelerator >= 97 && accelerator <= 122) {
+			seq += accelerator - 32; // make a uppercase character out of a lowercase character
+			accelerator -= accelerator;
+		}
+
+		/* fetch characters like F1, arrow keys or Page Up. Only one is allowed */
+		if (accelerator != 0) {
+			for (Integer acc : accelerators.keySet()) {
+				if (accelerator == acc) {
+					accelerator -= acc;
+					seq += accelerators.get(acc);
+				}
+			}
+		}
+
+		if (accelerator != 0) { // something went wrong here. Not every character could be fetched.
+			return;
+		}
+		getQAction().setShortcut(new QKeySequence(seq));
+
+	}
+
+	/*
+	 * private QKeySequence acceleratorToString(int accelerator) { int seq = 0;
+	 * if ((accelerator & SWT.MOD1) != 0 || (accelerator & SWT.CTRL) != 0) { //
+	 * on Windows systems SWT.MOD1 is the ctrl key accelerator -= SWT.MOD1; seq
+	 * += Qt.Modifier.CTRL.value(); } if ((accelerator & SWT.MOD2) != 0 ||
+	 * (accelerator & SWT.SHIFT) != 0) { // on Windows systems SWT.MOD2 is the
+	 * shift key accelerator -= SWT.MOD2; seq += Qt.Modifier.SHIFT.value(); } if
+	 * ((accelerator & SWT.MOD3) != 0 || (accelerator & SWT.ALT) != 0) {
+	 * accelerator -= SWT.MOD3; seq += Qt.Modifier.ALT.value(); } if
+	 * (accelerator >= 65 && accelerator <= 90) { seq += accelerator; } else if
+	 * (accelerator >= 97 && accelerator <= 122) { seq += accelerator - 32; //
+	 * this takes care of lowercase characters. CTRL+m should be the same as
+	 * CTRL+M } else if ((accelerator & SWT.ARROW_DOWN) != 0) { seq +=
+	 * Qt.Key.Key_Down.value(); } else if ((accelerator & SWT.ARROW_LEFT) != 0)
+	 * { seq += Qt.Key.Key_Left.value(); } else if ((accelerator &
+	 * SWT.ARROW_RIGHT) != 0) { seq += Qt.Key.Key_Right.value(); } else if
+	 * ((accelerator & SWT.ARROW_UP) != 0) { seq += Qt.Key.Key_Up.value(); }
+	 * else if ((accelerator & SWT.F1) != 0) { seq += Qt.Key.Key_F1.value(); }
+	 * return new QKeySequence(seq); }
+	 */
+	/**
+	 * Enables the receiver if the argument is <code>true</code>, and disables
+	 * it otherwise. A disabled menu item is typically not selectable from the
+	 * user interface and draws with an inactive or "grayed" look.
+	 * 
+	 * @param enabled
+	 *            the new enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setEnabled(boolean enabled) {
+		checkWidget();
+		getQAction().setEnabled(enabled);
+	}
+
+	/**
+	 * Sets the identifier associated with the receiver to the argument.
+	 *
+	 * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+	 * </ul>
+	 * 
+	 * @since 3.7
+	 */
+	public void setID (int id) {
+		checkWidget();
+		if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+		userId = id;
+	 }
+
+	 /**
+	 * Sets the image the receiver will display to the argument.
+	 * <p>
+	 * Note: This operation is a hint and is not supported on platforms that do
+	 * not have this concept (for example, Windows NT). Furthermore, some
+	 * platforms (such as GTK), cannot display both a check box and an image at
+	 * the same time. Instead, they hide the image and display the check box.
+	 * </p>
+	 * 
+	 * @param image
+	 *            the image to display
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		super.setImage(image);
+		if (image != null) {
+			getQAction().setIcon(image.getQIcon());
+		} else {
+			getQAction().setIcon((QIcon) null);
+		}
+	}
+
+	/**
+	 * Sets the receiver's pull down menu to the argument. Only
+	 * <code>CASCADE</code> menu items can have a pull down menu. The sequence
+	 * of key strokes, button presses and/or button releases that are used to
+	 * request a pull down menu is platform specific.
+	 * <p>
+	 * Note: Disposing of a menu item that has a pull down menu will dispose of
+	 * the menu. To avoid this behavior, set the menu to null before the menu
+	 * item is disposed.
+	 * </p>
+	 * 
+	 * @param menu
+	 *            the new pull down menu
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_MENU_NOT_DROP_DOWN - if the menu is not a drop
+	 *                down menu</li>
+	 *                <li>ERROR_MENUITEM_NOT_CASCADE - if the menu item is not a
+	 *                <code>CASCADE</code></li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed
+	 *                </li>
+	 *                <li>ERROR_INVALID_PARENT - if the menu is not in the same
+	 *                widget tree</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMenu(Menu menu) {
+		checkWidget();
+
+		/* Check to make sure the new menu is valid */
+		if ((style & SWT.CASCADE) == 0) {
+			error(SWT.ERROR_MENUITEM_NOT_CASCADE);
+		}
+		if (menu != null) {
+			if (menu.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if ((menu.style & SWT.DROP_DOWN) == 0) {
+				error(SWT.ERROR_MENU_NOT_DROP_DOWN);
+			}
+			if (menu.parent != parent.parent) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		setMenu(menu, false);
+	}
+
+	void setMenu(Menu menu, boolean dispose) {
+		if ((style & SWT.CASCADE) == 0) {
+			error(SWT.ERROR_MENUITEM_NOT_CASCADE);
+		}
+		QMenu qMenu = null;
+		if (menu != null) {
+			if ((menu.style & SWT.DROP_DOWN) == 0) {
+				error(SWT.ERROR_MENU_NOT_DROP_DOWN);
+			}
+			if (menu.parent != parent.parent) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+			qMenu = menu.getQMenu();
+		}
+		Menu oldMenu = this.menu;
+		if (oldMenu == menu) {
+			return;
+		}
+		if (oldMenu != null) {
+			oldMenu.cascade = null;
+		}
+		this.menu = menu;
+		getQAction().setMenu(qMenu);
+		if (this.menu != null) {
+			this.menu.cascade = this;
+		}
+	}
+
+	boolean setRadioSelection(boolean value) {
+		if ((style & SWT.RADIO) == 0) {
+			return false;
+		}
+		if (getSelection() != value) {
+			setSelection(value);
+			postEvent(SWT.Selection);
+		}
+		return true;
+	}
+
+	/**
+	 * Sets the selection state of the receiver.
+	 * <p>
+	 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, it
+	 * is selected when it is checked.
+	 * 
+	 * @param selected
+	 *            the new selection state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(boolean selected) {
+		checkWidget();
+		if ((style & (SWT.CHECK | SWT.RADIO)) == 0) {
+			return;
+		}
+		getQAction().setChecked(selected);
+	}
+
+	/**
+	 * Sets the receiver's text. The string may include the mnemonic character
+	 * and accelerator text.
+	 * <p>
+	 * Mnemonics are indicated by an '&' that causes the next character to
+	 * be the mnemonic. When the user presses a key sequence that matches the
+	 * mnemonic, a selection event occurs. On most platforms, the mnemonic
+	 * appears underlined but may be emphasised in a platform specific manner.
+	 * The mnemonic indicator character '&' can be escaped by doubling it in
+	 * the string, causing a single '&' to be displayed.
+	 * </p>
+	 * <p>
+	 * Accelerator text is indicated by the '\t' character. On platforms that
+	 * support accelerator text, the text that follows the '\t' character is
+	 * displayed to the user, typically indicating the key stroke that will
+	 * cause the item to become selected. On most platforms, the accelerator
+	 * text appears right aligned in the menu. Setting the accelerator text does
+	 * not install the accelerator key sequence. The accelerator key sequence is
+	 * installed using #setAccelerator.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setAccelerator
+	 */
+	@Override
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		if (text.equals(string)) {
+			return;
+		}
+		super.setText(string);
+		getQAction().setText(string);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MessageBox.java
new file mode 100644
index 0000000..297dd31
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/MessageBox.java	
@@ -0,0 +1,312 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+
+/**
+ * Instances of this class are used to inform or warn the user.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, ICON_WARNING, ICON_WORKING</dd>
+ * <dd>OK, OK | CANCEL</dd>
+ * <dd>YES | NO, YES | NO | CANCEL</dd>
+ * <dd>RETRY | CANCEL</dd>
+ * <dd>ABORT | RETRY | IGNORE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
+ * ICON_WARNING and ICON_WORKING may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class MessageBox extends Dialog {
+	String message = ""; //$NON-NLS-1$
+
+	/**
+	 * Constructs a new instance of this class given only its parent.
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public MessageBox(Shell parent) {
+		this(parent, SWT.OK | SWT.ICON_INFORMATION | SWT.APPLICATION_MODAL);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * @param style
+	 *            the style of dialog to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li> <li>
+	 *                ERROR_INVALID_SUBCLASS - if this class is not an allowed
+	 *                subclass</li>
+	 *                </ul>
+	 */
+	public MessageBox(Shell parent, int style) {
+		super(parent, checkStyle(parent, checkStyle(style)));
+		checkSubclass();
+	}
+
+	static int checkStyle(int style) {
+		int mask = SWT.YES | SWT.NO | SWT.OK | SWT.CANCEL | SWT.ABORT | SWT.RETRY | SWT.IGNORE;
+		int bits = style & mask;
+		if (bits == SWT.OK || bits == SWT.CANCEL || bits == (SWT.OK | SWT.CANCEL)) {
+			return style;
+		}
+		if (bits == SWT.YES || bits == SWT.NO || bits == (SWT.YES | SWT.NO) || bits == (SWT.YES | SWT.NO | SWT.CANCEL)) {
+			return style;
+		}
+		if (bits == (SWT.RETRY | SWT.CANCEL) || bits == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) {
+			return style;
+		}
+		style = style & ~mask | SWT.OK;
+		return style;
+	}
+
+	/**
+	 * Returns the dialog's message, or an empty string if it does not have one.
+	 * The message is a description of the purpose for which the dialog was
+	 * opened. This message will be visible in the dialog while it is open.
+	 * 
+	 * @return the message
+	 */
+	public String getMessage() {
+		return message;
+	}
+
+	/**
+	 * Makes the dialog visible and brings it to the front of the display.
+	 * 
+	 * @return the ID of the button that was selected to dismiss the message box
+	 *         (e.g. SWT.OK, SWT.CANCEL, etc.)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the dialog has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the dialog</li>
+	 *                </ul>
+	 */
+	public int open() {
+
+		/* Compute the MessageBox style */
+		//		int buttonBits = 0;
+		//		if ((style & SWT.OK) == SWT.OK) {
+		//			buttonBits = OS.MB_OK;
+		//		}
+		//		if ((style & (SWT.OK | SWT.CANCEL)) == (SWT.OK | SWT.CANCEL)) {
+		//			buttonBits = OS.MB_OKCANCEL;
+		//		}
+		//		if ((style & (SWT.YES | SWT.NO)) == (SWT.YES | SWT.NO)) {
+		//			buttonBits = OS.MB_YESNO;
+		//		}
+		//		if ((style & (SWT.YES | SWT.NO | SWT.CANCEL)) == (SWT.YES | SWT.NO | SWT.CANCEL)) {
+		//			buttonBits = OS.MB_YESNOCANCEL;
+		//		}
+		//		if ((style & (SWT.RETRY | SWT.CANCEL)) == (SWT.RETRY | SWT.CANCEL)) {
+		//			buttonBits = OS.MB_RETRYCANCEL;
+		//		}
+		//		if ((style & (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) {
+		//			buttonBits = OS.MB_ABORTRETRYIGNORE;
+		//		}
+		//		if (buttonBits == 0) {
+		//			buttonBits = OS.MB_OK;
+		//		}
+		//
+		//		int iconBits = 0;
+		//		if ((style & SWT.ICON_ERROR) != 0) {
+		//			iconBits = OS.MB_ICONERROR;
+		//		}
+		//		if ((style & SWT.ICON_INFORMATION) != 0) {
+		//			iconBits = OS.MB_ICONINFORMATION;
+		//		}
+		//		if ((style & SWT.ICON_QUESTION) != 0) {
+		//			iconBits = OS.MB_ICONQUESTION;
+		//		}
+		//		if ((style & SWT.ICON_WARNING) != 0) {
+		//			iconBits = OS.MB_ICONWARNING;
+		//		}
+		//		if ((style & SWT.ICON_WORKING) != 0) {
+		//			iconBits = OS.MB_ICONINFORMATION;
+		//		}
+		//
+		//		/* Only MB_APPLMODAL is supported on WinCE */
+		//		int modalBits = 0;
+		//
+		//		if ((style & SWT.PRIMARY_MODAL) != 0) {
+		//			modalBits = OS.MB_APPLMODAL;
+		//		}
+		//		if ((style & SWT.APPLICATION_MODAL) != 0) {
+		//			modalBits = OS.MB_TASKMODAL;
+		//		}
+		//		if ((style & SWT.SYSTEM_MODAL) != 0) {
+		//			modalBits = OS.MB_SYSTEMMODAL;
+		//		}
+		//
+		//		int bits = buttonBits | iconBits | modalBits;
+		//		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+		//			bits |= OS.MB_RTLREADING | OS.MB_RIGHT;
+		//		}
+		//		if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) {
+		//			if (parent != null && (parent.style & SWT.MIRRORED) != 0) {
+		//				bits |= OS.MB_RTLREADING | OS.MB_RIGHT;
+		//			}
+		//		}
+		//
+		//		/*
+		//		 * Feature in Windows. System modal is not supported on Windows 95 and
+		//		 * NT. The fix is to convert system modal to task modal.
+		//		 */
+		//		if ((bits & OS.MB_SYSTEMMODAL) != 0) {
+		//			bits |= OS.MB_TASKMODAL;
+		//			bits &= ~OS.MB_SYSTEMMODAL;
+		//			/* Force a system modal message box to the front */
+		//			bits |= OS.MB_TOPMOST;
+		//		}
+		//
+		//		/*
+		//		 * Feature in Windows. In order for MB_TASKMODAL to work, the parent
+		//		 * HWND of the MessageBox () call must be NULL. If the parent is not
+		//		 * NULL, MB_TASKMODAL behaves the same as MB_APPLMODAL. The fix to set
+		//		 * the parent HWND anyway and not rely on MB_MODAL to work by making the
+		//		 * parent be temporarily modal.
+		//		 */
+		//		int /* long */hwndOwner = 0; //parent != null ? parent.handle : 0;
+		//		Dialog oldModal = null;
+		//		Display display = null;
+		//		if ((bits & OS.MB_TASKMODAL) != 0) {
+		//			display = parent.getDisplay();
+		//			oldModal = display.getModalDialog();
+		//			display.setModalDialog(this);
+		//		}
+		//
+		//		/* Open the message box */
+		//		/* Use the character encoding for the default locale */
+		//		TCHAR buffer1 = new TCHAR(0, message, true);
+		//		TCHAR buffer2 = new TCHAR(0, title, true);
+		//		int code = OS.MessageBox(hwndOwner, buffer1, buffer2, bits);
+		//
+		//		/* Clear the temporarily dialog modal parent */
+		//		if ((bits & OS.MB_TASKMODAL) != 0) {
+		//			display.setModalDialog(oldModal);
+		//		}
+		//
+		//		/*
+		//		 * This code is intentionally commented. On some platforms, the owner
+		//		 * window is repainted right away when a dialog window exits. This
+		//		 * behavior is currently unspecified.
+		//		 */
+		//		//	if (hwndOwner != 0) OS.UpdateWindow (hwndOwner);
+		//
+		//		/* Compute and return the result */
+		//		if (code != 0) {
+		//			int type = bits & 0x0F;
+		//			if (type == OS.MB_OK) {
+		//				return SWT.OK;
+		//			}
+		//			if (type == OS.MB_OKCANCEL) {
+		//				return code == OS.IDOK ? SWT.OK : SWT.CANCEL;
+		//			}
+		//			if (type == OS.MB_YESNO) {
+		//				return code == OS.IDYES ? SWT.YES : SWT.NO;
+		//			}
+		//			if (type == OS.MB_YESNOCANCEL) {
+		//				if (code == OS.IDYES) {
+		//					return SWT.YES;
+		//				}
+		//				if (code == OS.IDNO) {
+		//					return SWT.NO;
+		//				}
+		//				return SWT.CANCEL;
+		//			}
+		//			if (type == OS.MB_RETRYCANCEL) {
+		//				return code == OS.IDRETRY ? SWT.RETRY : SWT.CANCEL;
+		//			}
+		//			if (type == OS.MB_ABORTRETRYIGNORE) {
+		//				if (code == OS.IDRETRY) {
+		//					return SWT.RETRY;
+		//				}
+		//				if (code == OS.IDABORT) {
+		//					return SWT.ABORT;
+		//				}
+		//				return SWT.IGNORE;
+		//			}
+		//		}
+		return SWT.CANCEL;
+	}
+
+	/**
+	 * Sets the dialog's message, which is a description of the purpose for
+	 * which it was opened. This message will be visible on the dialog while it
+	 * is open.
+	 * 
+	 * @param string
+	 *            the message
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 */
+	public void setMessage(String string) {
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		message = string;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ProgressBar.java
new file mode 100644
index 0000000..dc80139
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ProgressBar.java	
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.gui.QProgressBar;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of the receiver represent an unselectable user interface object
+ * that is used to display progress, typically in the form of a bar.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SMOOTH, HORIZONTAL, VERTICAL, INDETERMINATE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ProgressBar extends Control {
+	static final int DELAY = 100;
+	int foreground = -1, background = -1;
+	private int timerID = -1;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#SMOOTH
+	 * @see SWT#HORIZONTAL
+	 * @see SWT#VERTICAL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public ProgressBar(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		QProgressBar progressBar = new QProgressBar();
+		return progressBar;
+	}
+
+	@Override
+	protected void setupQWidget() {
+		if ((style & SWT.INDETERMINATE) != 0) {
+			getQProgressBar().setRange(0, 0);
+			// Funny: this avoids a JVM crash: EXCEPTION_INT_DIVIDE_BY_ZERO (0xc0000094)
+			// http://eclipse.compeople.eu/wiki/index.php/Compeople:SWTQtImplementierungsdetails#DIVISION_BY_ZERO
+			getQProgressBar().setTextVisible(false);
+		}
+		// this causes a lot of events, commented for debugging
+		//startTimer(getQProgressBar());
+		super.setupQWidget();
+	}
+
+	private QProgressBar getQProgressBar() {
+		return (QProgressBar) getQWidget();
+	}
+
+	static int checkStyle(int style) {
+		style |= SWT.NO_FOCUS;
+		return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		QSize size = getQProgressBar().sizeHint();
+		return new Point(size.width(), size.height());
+	}
+
+	/**
+	 * Returns the maximum value which the receiver will allow.
+	 * 
+	 * @return the maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMaximum() {
+		checkWidget();
+		return getQProgressBar().maximum();
+	}
+
+	/**
+	 * Returns the minimum value which the receiver will allow.
+	 * 
+	 * @return the minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMinimum() {
+		checkWidget();
+		return getQProgressBar().minimum();
+	}
+
+	/**
+	 * Returns the single 'selection' that is the receiver's position.
+	 * 
+	 * @return the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelection() {
+		checkWidget();
+		return getQProgressBar().value();
+	}
+
+	/**
+	 * Returns the state of the receiver. The value will be one of:
+	 * <ul>
+	 * <li>{@link SWT#NORMAL}</li>
+	 * <li>{@link SWT#ERROR}</li>
+	 * <li>{@link SWT#PAUSED}</li>
+	 * </ul>
+	 * 
+	 * @return the state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public int getState() {
+		checkWidget();
+		return SWT.NORMAL;
+	}
+
+	@Override
+	void releaseWidget() {
+		stopTimer();
+		super.releaseWidget();
+	}
+
+	void startTimer(QProgressBar progressBar) {
+		stopTimer();
+		// TODO dynamic interval for startTimer
+		timerID = progressBar.startTimer(DELAY);
+	}
+
+	void stopTimer() {
+		if (timerID != -1) {
+			getQProgressBar().killTimer(timerID);
+		}
+	}
+
+	/**
+	 * Sets the maximum value that the receiver will allow. This new value will
+	 * be ignored if it is not greater than the receiver's current minimum
+	 * value. If the new maximum is applied then the receiver's selection value
+	 * will be adjusted if necessary to fall within its new range.
+	 * 
+	 * @param value
+	 *            the new maximum, which must be greater than the current
+	 *            minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+
+	public void setMaximum(int value) {
+		checkWidget();
+		getQProgressBar().setMaximum(value);
+	}
+
+	/**
+	 * Sets the minimum value that the receiver will allow. This new value will
+	 * be ignored if it is negative or is not less than the receiver's current
+	 * maximum value. If the new minimum is applied then the receiver's
+	 * selection value will be adjusted if necessary to fall within its new
+	 * range.
+	 * 
+	 * @param value
+	 *            the new minimum, which must be nonnegative and less than the
+	 *            current maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMinimum(int value) {
+		checkWidget();
+		getQProgressBar().setMinimum(value);
+	}
+
+	/**
+	 * Sets the single 'selection' that is the receiver's position to the
+	 * argument which must be greater than or equal to zero.
+	 * 
+	 * @param value
+	 *            the new selection (must be zero or greater)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int value) {
+		checkWidget();
+		getQProgressBar().setValue(value);
+	}
+
+	/**
+	 * Sets the state of the receiver. The state must be one of these values:
+	 * <ul>
+	 * <li>{@link SWT#NORMAL}</li>
+	 * <li>{@link SWT#ERROR}</li>
+	 * <li>{@link SWT#PAUSED}</li>
+	 * </ul>
+	 * 
+	 * @param state
+	 *            the new state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setState(int state) {
+		checkWidget();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Sash.java
new file mode 100644
index 0000000..399d863
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Sash.java	
@@ -0,0 +1,387 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.core.Qt.CursorShape;
+import com.trolltech.qt.core.Qt.MouseButton;
+import com.trolltech.qt.gui.QCursor;
+import com.trolltech.qt.gui.QFrame;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QFrame.Shadow;
+import com.trolltech.qt.gui.QFrame.Shape;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of the receiver represent a selectable user interface object that
+ * allows the user to drag a rubber banded outline of the sash within the parent
+ * control.sw
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL, SMOOTH</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Sash extends Control {
+	private boolean dragging;
+	private int startX, startY, lastX, lastY;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#HORIZONTAL
+	 * @see SWT#VERTICAL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Sash(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state |= THEME_BACKGROUND;
+		return new QFrame();
+	}
+
+	protected QFrame getQFrame() {
+		return (QFrame) getQWidget();
+	}
+
+	@Override
+	protected void checkAndUpdateBorder() {
+		if ((style & SWT.BORDER) != 0) {
+			getQFrame().setFrameShape(Shape.Panel);
+			getQFrame().setFrameShadow(Shadow.Sunken);
+		} else {
+			getQFrame().setFrameShape(Shape.NoFrame);
+		}
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the x, y, width, and height
+	 * fields of the event object are valid. If the receiver is being dragged,
+	 * the event object detail field contains the value <code>SWT.DRAG</code>.
+	 * <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the control is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		int border = getBorderWidth();
+		int width = border * 2, height = border * 2;
+		if ((style & SWT.HORIZONTAL) != 0) {
+			width += DEFAULT_WIDTH;
+			height += 3;
+		} else {
+			width += 3;
+			height += DEFAULT_HEIGHT;
+		}
+		if (wHint != SWT.DEFAULT) {
+			width = wHint + border * 2;
+		}
+		if (hHint != SWT.DEFAULT) {
+			height = hHint + border * 2;
+		}
+		return new Point(width, height);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	@Override
+	public boolean qtMouseMoveEvent(QObject source, QMouseEvent mouseEvent) {
+		if (source == getQWidget()) {
+			return handleMouseMove(mouseEvent);
+		}
+		return super.qtMouseMoveEvent(source, mouseEvent);
+	}
+
+	@Override
+	public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) {
+		if (super.qtMouseButtonPressEvent(source, mouseEvent)) {
+			return true; // cancel;
+		}
+		return handleMousePress(mouseEvent);
+	}
+
+	@Override
+	public boolean qtMouseButtonReleaseEvent(QObject source, QMouseEvent mouseEvent) {
+		if (super.qtMouseButtonReleaseEvent(source, mouseEvent)) {
+			return true; // cancel
+		}
+		return handleMouseRelease(mouseEvent);
+	}
+
+	private boolean handleMousePress(QMouseEvent mouseEvent) {
+		if (!isLeftMouseButton(mouseEvent)) {
+			return false;
+		}
+		QPoint pt = mouseEvent.globalPos();
+		QRect rect = getQWidget().frameGeometry();
+		startX = pt.x() - rect.left();
+		startY = pt.y() - rect.top();
+		lastX = rect.left();
+		lastY = rect.top();
+		int width = rect.width();
+		int height = rect.height();
+
+		Event event = new Event();
+		event.x = lastX;
+		event.y = lastY;
+		event.width = width;
+		event.height = height;
+		if ((style & SWT.SMOOTH) == 0) {
+			event.detail = SWT.DRAG;
+		}
+		sendEvent(SWT.Selection, event);
+		if (isDisposed()) {
+			return true;
+		}
+
+		/* Draw the banding rectangle */
+		if (event.doit) {
+			dragging = true;
+			lastX = event.x;
+			lastY = event.y;
+			menuShell().bringToTop();
+			if (isDisposed()) {
+				return true;
+			}
+			if ((style & SWT.SMOOTH) != 0) {
+				setBounds(event.x, event.y, width, height, true, true);
+				// widget could be disposed at this point
+			}
+		}
+		return false;
+	}
+
+	private boolean isLeftMouseButton(QMouseEvent mouseEvent) {
+		return MouseButton.LeftButton.equals(mouseEvent.button()) || mouseEvent.buttons().isSet(MouseButton.LeftButton);
+	}
+
+	private boolean handleMouseRelease(QMouseEvent mouseEvent) {
+		if (!(dragging && isLeftMouseButton(mouseEvent))) {
+			return false;
+		}
+
+		dragging = false;
+		QRect rect = getQWidget().frameGeometry();
+		int width = rect.width();
+		int height = rect.height();
+
+		Event event = new Event();
+		event.x = lastX;
+		event.y = lastY;
+		event.width = width;
+		event.height = height;
+		sendEvent(SWT.Selection, event);
+		if (isDisposed()) {
+			return true;
+		}
+		if (event.doit) {
+			if ((style & SWT.SMOOTH) != 0) {
+				setBounds(event.x, event.y, width, height, true, true);
+				// widget could be disposed at this point
+			}
+		}
+		return false;
+	}
+
+	private boolean handleMouseMove(QMouseEvent mouseEvent) {
+		if (!(dragging && isLeftMouseButton(mouseEvent))) {
+			return false;
+		}
+
+		QPoint pt = mouseEvent.globalPos();
+		QRect rect = getQWidget().frameGeometry();
+		int width = rect.width();
+		int height = rect.height();
+		QRect clientRect = getQWidget().parentWidget().frameGeometry();
+
+		int newX = lastX, newY = lastY;
+		if ((style & SWT.VERTICAL) != 0) {
+			int clientWidth = clientRect.width();
+			newX = Math.min(Math.max(0, pt.x() - startX), clientWidth - width);
+		} else {
+			int clientHeight = clientRect.height();
+			newY = Math.min(Math.max(0, pt.y() - startY), clientHeight - height);
+		}
+		if (newX == lastX && newY == lastY) {
+			return false;
+		}
+
+		/* The event must be sent because doit flag is used */
+		Event event = new Event();
+		event.x = newX;
+		event.y = newY;
+		event.width = width;
+		event.height = height;
+		if ((style & SWT.SMOOTH) == 0) {
+			event.detail = SWT.DRAG;
+		}
+		sendEvent(SWT.Selection, event);
+		if (isDisposed()) {
+			return true;
+		}
+
+		if (event.doit) {
+			lastX = event.x;
+			lastY = event.y;
+		}
+		if ((style & SWT.SMOOTH) != 0) {
+			setBounds(lastX, lastY, width, height, true, true);
+			// widget could be disposed at this point
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtMouseEnterEvent(Object source) {
+		if (source == getQWidget()) {
+			if ((style & SWT.HORIZONTAL) != 0) {
+				getQWidget().setCursor(new QCursor(CursorShape.SizeVerCursor));
+			} else {
+				getQWidget().setCursor(new QCursor(CursorShape.SizeHorCursor));
+			}
+		}
+		return super.qtMouseEnterEvent(source);
+	}
+
+	@Override
+	public boolean qtMouseLeaveEvent(Object source) {
+		if (source == getQWidget()) {
+			getQWidget().setCursor(new QCursor(CursorShape.ArrowCursor));
+		}
+		return super.qtMouseLeaveEvent(source);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scale.java
new file mode 100644
index 0000000..b7ee6cb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scale.java	
@@ -0,0 +1,494 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.Qt.Orientation;
+import com.trolltech.qt.gui.QAbstractSlider;
+import com.trolltech.qt.gui.QSlider;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QSlider.TickPosition;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of the receiver represent a selectable user interface object that
+ * present a range of continuous numeric values.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p>
+ * <p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Scale extends Control {
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#HORIZONTAL
+	 * @see SWT#VERTICAL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Scale(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		final Orientation orientation = (style & SWT.HORIZONTAL) != 0 ? Orientation.Horizontal : Orientation.Vertical;
+		return new QSlider(orientation);
+	}
+
+	@Override
+	protected void setupQWidget() {
+		super.setupQWidget();
+		setMinimum(0);
+		setMaximum(100);
+		setIncrement(1);
+		setPageIncrement(10);
+		getQSlider().setTickPosition(TickPosition.TicksBothSides);
+	}
+
+	QSlider getQSlider() {
+		return (QSlider) getQWidget();
+	}
+
+	@Override
+	protected void connectSignals() {
+		getQSlider().actionTriggered.connect(this, "actionTriggered(int)"); //$NON-NLS-1$
+		getQSlider().rangeChanged.connect(this, "rangeChanged(int,int)"); //$NON-NLS-1$
+		getQSlider().sliderMoved.connect(this, "sliderMoved(int)"); //$NON-NLS-1$
+		getQSlider().sliderPressed.connect(this, "sliderPressed()"); //$NON-NLS-1$
+		getQSlider().sliderReleased.connect(this, "sliderReleased()"); //$NON-NLS-1$
+		getQSlider().valueChanged.connect(this, "valueChanged(int)"); //$NON-NLS-1$
+	}
+
+	protected void actionTriggered(int action) {
+		System.out.println("actionTriggered :" + action + " " + getQSlider().value()); //$NON-NLS-1$//$NON-NLS-2$
+		Event event = new Event();
+		if (action == QAbstractSlider.SliderAction.SliderToMinimum.value()) {
+			event.detail = SWT.HOME;
+		} else if (action == QAbstractSlider.SliderAction.SliderToMaximum.value()) {
+			event.detail = SWT.END;
+		} else if (action == QAbstractSlider.SliderAction.SliderSingleStepAdd.value()) {
+			event.detail = SWT.ARROW_DOWN;
+		} else if (action == QAbstractSlider.SliderAction.SliderSingleStepSub.value()) {
+			event.detail = SWT.ARROW_UP;
+		} else if (action == QAbstractSlider.SliderAction.SliderPageStepAdd.value()) {
+			event.detail = SWT.PAGE_UP;
+		} else if (action == QAbstractSlider.SliderAction.SliderPageStepSub.value()) {
+			event.detail = SWT.PAGE_DOWN;
+		} else if (action == QAbstractSlider.SliderAction.SliderMove.value()) {
+			event.detail = SWT.DRAG;
+		} else {
+			return;
+		}
+		// see actionTrigger signal
+		getQSlider().setValue(getQSlider().sliderPosition());
+		sendEvent(SWT.Selection, event);
+	}
+
+	// TODO: implement the events
+	protected void rangeChanged(int min, int max) {
+		System.out.println("rangeChanged :" + min + ", " + max); //$NON-NLS-1$//$NON-NLS-2$
+	}
+
+	protected void sliderMoved(int pos) {
+		System.out.println("sliderMoved :" + pos); //$NON-NLS-1$
+	}
+
+	protected void sliderPressed() {
+		System.out.println("sliderPressed"); //$NON-NLS-1$
+	}
+
+	protected void sliderReleased() {
+		System.out.println("sliderReleased"); //$NON-NLS-1$
+		Event event = new Event();
+		event.detail = SWT.NONE;
+		sendEvent(SWT.Selection, event);
+	}
+
+	protected void valueChanged(int value) {
+		System.out.println("valueChanged :" + value); //$NON-NLS-1$
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's value, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the user changes the
+	 * receiver's value. <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		int border = getBorderWidth();
+		int width = border * 2;
+		int height = border * 2;
+		// default size: this is just the two arrows + thumb
+		Point defaultSize = super.computeSize(wHint, hHint, changed);
+		if ((style & SWT.HORIZONTAL) != 0) {
+			width += defaultSize.y * 6;
+			height += defaultSize.y;
+		} else {
+			width += defaultSize.x;
+			height += defaultSize.x * 6;
+		}
+		if (wHint != SWT.DEFAULT) {
+			width = wHint + border * 2;
+		}
+		if (hHint != SWT.DEFAULT) {
+			height = hHint + border * 2;
+		}
+		return new Point(width, height);
+	}
+
+	// TODO What should happen here?
+	//	int defaultForeground() {
+	//		return display.getSystemColor(SWT.COLOR_LIST_FOREGROUND);
+	//	}
+
+	/**
+	 * Returns the amount that the receiver's value will be modified by when the
+	 * up/down (or right/left) arrows are pressed.
+	 * 
+	 * @return the increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getIncrement() {
+		checkWidget();
+		return getQSlider().singleStep();
+	}
+
+	/**
+	 * Returns the maximum value which the receiver will allow.
+	 * 
+	 * @return the maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMaximum() {
+		checkWidget();
+		return getQSlider().maximum();
+	}
+
+	/**
+	 * Returns the minimum value which the receiver will allow.
+	 * 
+	 * @return the minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMinimum() {
+		checkWidget();
+		return getQSlider().minimum();
+	}
+
+	/**
+	 * Returns the amount that the receiver's value will be modified by when the
+	 * page increment/decrement areas are selected.
+	 * 
+	 * @return the page increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getPageIncrement() {
+		checkWidget();
+		return getQSlider().pageStep();
+	}
+
+	/**
+	 * Returns the 'selection', which is the receiver's position.
+	 * 
+	 * @return the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelection() {
+		checkWidget();
+		return getQSlider().value();
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's value.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the
+	 * up/down (or right/left) arrows are pressed to the argument, which must be
+	 * at least one.
+	 * 
+	 * @param increment
+	 *            the new increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setIncrement(int increment) {
+		checkWidget();
+		if (increment < 1) {
+			return;
+		}
+		if (increment > getMaximum() - getMinimum()) {
+			return;
+		}
+		getQSlider().setSingleStep(increment);
+	}
+
+	/**
+	 * Sets the maximum value that the receiver will allow. This new value will
+	 * be ignored if it is not greater than the receiver's current minimum
+	 * value. If the new maximum is applied then the receiver's selection value
+	 * will be adjusted if necessary to fall within its new range.
+	 * 
+	 * @param value
+	 *            the new maximum, which must be greater than the current
+	 *            minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMaximum(int value) {
+		checkWidget();
+		if (0 <= getMinimum() && getMinimum() < value) {
+			getQSlider().setMaximum(value);
+		}
+	}
+
+	/**
+	 * Sets the minimum value that the receiver will allow. This new value will
+	 * be ignored if it is negative or is not less than the receiver's current
+	 * maximum value. If the new minimum is applied then the receiver's
+	 * selection value will be adjusted if necessary to fall within its new
+	 * range.
+	 * 
+	 * @param value
+	 *            the new minimum, which must be nonnegative and less than the
+	 *            current maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMinimum(int value) {
+		checkWidget();
+		if (0 <= value && value < getMaximum()) {
+			getQSlider().setMinimum(value);
+		}
+	}
+
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the
+	 * page increment/decrement areas are selected to the argument, which must
+	 * be at least one.
+	 * 
+	 * @param pageIncrement
+	 *            the page increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setPageIncrement(int pageIncrement) {
+		checkWidget();
+		if (pageIncrement < 1) {
+			return;
+		}
+		if (pageIncrement > getMaximum() - getMinimum()) {
+			return;
+		}
+		getQSlider().setPageStep(pageIncrement);
+		getQSlider().setTickInterval(pageIncrement);
+	}
+
+	/**
+	 * Sets the 'selection', which is the receiver's value, to the argument
+	 * which must be greater than or equal to zero.
+	 * 
+	 * @param value
+	 *            the new selection (must be zero or greater)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int value) {
+		checkWidget();
+		getQSlider().setValue(value);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ScrollBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ScrollBar.java
new file mode 100644
index 0000000..1b839a5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ScrollBar.java	
@@ -0,0 +1,876 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.gui.QScrollBar;
+import com.trolltech.qt.gui.QAbstractSlider.SliderAction;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class are selectable user interface objects that represent
+ * a range of positive, numeric values.
+ * <p>
+ * At any given moment, a given scroll bar will have a single 'selection' that
+ * is considered to be its value, which is constrained to be within the range of
+ * values the scroll bar represents (that is, between its <em>minimum</em> and
+ * <em>maximum</em> values).
+ * </p>
+ * <p>
+ * Typically, scroll bars will be made up of five areas:
+ * <ol>
+ * <li>an arrow button for decrementing the value</li>
+ * <li>a page decrement area for decrementing the value by a larger amount</li>
+ * <li>a <em>thumb</em> for modifying the value by mouse dragging</li>
+ * <li>a page increment area for incrementing the value by a larger amount</li>
+ * <li>an arrow button for incrementing the value</li>
+ * </ol>
+ * Based on their style, scroll bars are either <code>HORIZONTAL</code> (which
+ * have a left facing button for decrementing the value and a right facing
+ * button for incrementing it) or <code>VERTICAL</code> (which have an upward
+ * facing button for decrementing the value and a downward facing buttons for
+ * incrementing it).
+ * </p>
+ * <p>
+ * On some platforms, the size of the scroll bar's thumb can be varied relative
+ * to the magnitude of the range of values it represents (that is, relative to
+ * the difference between its maximum and minimum values). Typically, this is
+ * used to indicate some proportional value such as the ratio of the visible
+ * area of a document to the total amount of space that it would take to display
+ * it. SWT supports setting the thumb size even if the underlying platform does
+ * not, but in this case the appearance of the scroll bar will not change.
+ * </p>
+ * <p>
+ * Scroll bars are created by specifying either <code>H_SCROLL</code>,
+ * <code>V_SCROLL</code> or both when creating a <code>Scrollable</code>. They
+ * are accessed from the <code>Scrollable</code> using
+ * <code>getHorizontalBar</code> and <code>getVerticalBar</code>.
+ * </p>
+ * <p>
+ * Note: Scroll bars are not Controls. On some platforms, scroll bars that
+ * appear as part of some standard controls such as a text or list have no
+ * operating system resources and are not children of the control. For this
+ * reason, scroll bars are treated specially. To create a control that looks
+ * like a scroll bar but has operating system resources, use <code>Slider</code>
+ * .
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see Slider
+ * @see Scrollable
+ * @see Scrollable#getHorizontalBar
+ * @see Scrollable#getVerticalBar
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class ScrollBar extends Widget {
+	private Scrollable parent;
+	private boolean visible = true;
+	private boolean enabled = true;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#HORIZONTAL
+	 * @see SWT#VERTICAL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	ScrollBar(Scrollable parent, int style) {
+		super(parent, checkStyle(style));
+		this.parent = parent;
+		createWidget(style);
+		connectSignals();
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+	}
+
+	private void createWidget(int style) {
+		if (!parent.isQScrollArea()) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		QScrollBar scrollBar = null;
+		if ((style & SWT.HORIZONTAL) != 0) {
+			scrollBar = parent.getQScrollArea().horizontalScrollBar();
+		} else {
+			scrollBar = parent.getQScrollArea().verticalScrollBar();
+		}
+		if (scrollBar == null) {
+			SWT.error(SWT.ERROR_UNSPECIFIED);
+		}
+		setQWidget(scrollBar);
+		scrollBar.setMinimum(0);
+		scrollBar.setSliderPosition(0);
+		scrollBar.setTracking(false);
+	}
+
+	private void connectSignals() {
+		QScrollBar sb = getQScrollBar();
+		sb.sliderMoved.connect(this, "dragging()"); //$NON-NLS-1$
+		sb.sliderReleased.connect(this, "dragEnd()"); //$NON-NLS-1$
+		sb.actionTriggered.connect(this, "actionTriggered(int)"); //$NON-NLS-1$
+	}
+
+	void dragging() {
+		postSliderEvent(SWT.DRAG);
+	}
+
+	void dragEnd() {
+		postSliderEvent(SWT.NONE);
+	}
+
+	void actionTriggered(int code) {
+		SliderAction action = SliderAction.resolve(code);
+		switch (action) {
+		case SliderSingleStepSub: // button up
+			postSliderEvent(SWT.ARROW_UP);
+			break;
+		case SliderSingleStepAdd: // button down
+			postSliderEvent(SWT.ARROW_DOWN);
+			break;
+		case SliderPageStepSub: // page up
+			postSliderEvent(SWT.PAGE_UP);
+			break;
+		case SliderPageStepAdd: // page down
+			postSliderEvent(SWT.PAGE_DOWN);
+			break;
+		case SliderToMinimum: // at start
+			postSliderEvent(SWT.HOME);
+			break;
+		case SliderToMaximum: // at end
+			postSliderEvent(SWT.END);
+			break;
+		case SliderMove: // at end
+			postSliderEvent(SWT.DRAG);
+			break;
+		default:
+			System.err.println("unknown action: " + action); //$NON-NLS-1$
+		}
+	}
+
+	QScrollBar getQScrollBar() {
+		return (QScrollBar) getQWidget();
+	}
+
+	private void postSliderEvent(int subType) {
+		Event event = new Event();
+		event.detail = subType;
+		postEvent(SWT.Selection, event);
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		parent = null;
+	}
+
+	@Override
+	void releaseParent() {
+		super.releaseParent();
+		parent.releaseBar(this);
+	}
+
+	@Override
+	void destroyWidget() {
+		parent.destroyScrollBar(style);
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a Scrollable.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Scrollable getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's value, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the event object detail field
+	 * contains one of the following values: <code>SWT.NONE</code> - for the end
+	 * of a drag. <code>SWT.DRAG</code>. <code>SWT.HOME</code>.
+	 * <code>SWT.END</code>. <code>SWT.ARROW_DOWN</code>.
+	 * <code>SWT.ARROW_UP</code>. <code>SWT.PAGE_DOWN</code>.
+	 * <code>SWT.PAGE_UP</code>. <code>widgetDefaultSelected</code> is not
+	 * called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the user changes
+	 *            the receiver's value
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's value.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Returns the amount that the receiver's value will be modified by when the
+	 * up/down (or right/left) arrows are pressed.
+	 * 
+	 * @return the increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getIncrement() {
+		checkWidget();
+		return getQScrollBar().singleStep();
+	}
+
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the
+	 * up/down (or right/left) arrows are pressed to the argument, which must be
+	 * at least one.
+	 * 
+	 * @param value
+	 *            the new increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setIncrement(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		getQScrollBar().setSingleStep(value);
+	}
+
+	/**
+	 * Returns the maximum value which the receiver will allow.
+	 * 
+	 * @return the maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMaximum() {
+		checkWidget();
+		return getQScrollBar().maximum(); // + getQScrollBar().pageStep();
+	}
+
+	/**
+	 * Sets the maximum. If this value is negative or less than or equal to the
+	 * minimum, the value is ignored. If necessary, first the thumb and then the
+	 * selection are adjusted to fit within the new range.
+	 * 
+	 * @param value
+	 *            the new maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMaximum(int value) {
+		checkWidget();
+		if (value < 0) {
+			return;
+		}
+		QScrollBar scrollBar = getQScrollBar();
+		int min = scrollBar.minimum();
+		if (value <= min) {
+			return;
+		}
+
+		//		int maxValue = value - scrollBar.pageStep();
+		//		if (maxValue < min) {
+		//			scrollBar.setPageStep(value - min);
+		//			maxValue = min;
+		//		}
+		//
+		//		if (scrollBar.value() > maxValue) {
+		//			scrollBar.setValue(maxValue);
+		//		}
+		scrollBar.setMaximum(value);
+	}
+
+	/**
+	 * Returns the minimum value which the receiver will allow.
+	 * 
+	 * @return the minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMinimum() {
+		checkWidget();
+		return getQScrollBar().minimum();
+	}
+
+	/**
+	 * Sets the minimum value. If this value is negative or greater than or
+	 * equal to the maximum, the value is ignored. If necessary, first the thumb
+	 * and then the selection are adjusted to fit within the new range.
+	 * 
+	 * @param value
+	 *            the new minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMinimum(int value) {
+		checkWidget();
+		if (value < 0) {
+			return;
+		}
+		QScrollBar scrollBar = getQScrollBar();
+		int max = scrollBar.maximum();
+		if (value >= max) {
+			return;
+		}
+		//
+		//		if (max + pageStep - value < pageStep) {
+		//			scrollBar.setPageStep(max + pageStep - value);
+		//			scrollBar.setMaximum(value);
+		//		}
+		//
+		//		if (scrollBar.value() < value) {
+		//			scrollBar.setValue(value);
+		//		}
+		scrollBar.setMinimum(value);
+	}
+
+	/**
+	 * Returns the amount that the receiver's value will be modified by when the
+	 * page increment/decrement areas are selected.
+	 * 
+	 * @return the page increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getPageIncrement() {
+		checkWidget();
+		return getQScrollBar().pageStep();
+	}
+
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the
+	 * page increment/decrement areas are selected to the argument, which must
+	 * be at least one.
+	 * 
+	 * @param value
+	 *            the page increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setPageIncrement(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		getQScrollBar().setPageStep(value);
+	}
+
+	/**
+	 * Returns the single 'selection' that is the receiver's value.
+	 * 
+	 * @return the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelection() {
+		checkWidget();
+		return getQScrollBar().sliderPosition();
+	}
+
+	/**
+	 * Sets the single <em>selection</em> that is the receiver's value to the
+	 * argument which must be greater than or equal to zero.
+	 * 
+	 * @param selection
+	 *            the new selection (must be zero or greater)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int selection) {
+		checkWidget();
+		int min = getQScrollBar().minimum();
+		if (selection < min) {
+			selection = min;
+		} else {
+			int max = getQScrollBar().maximum();
+			if (selection > max) {
+				selection = max;
+			}
+		}
+		int value = getQScrollBar().value();
+		if (value != selection) {
+			getQScrollBar().setSliderPosition(selection);
+		}
+		//System.out.println(this);
+	}
+
+	/**
+	 * Returns a point describing the receiver's size. The x coordinate of the
+	 * result is the width of the receiver. The y coordinate of the result is
+	 * the height of the receiver.
+	 * 
+	 * @return the receiver's size
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getSize() {
+		checkWidget();
+		if (!isVisible()) {
+			parent.updateQLayouts();
+		}
+		return QtSWTConverter.convert(getQWidget().size());
+	}
+
+	/**
+	 * Returns the size of the receiver's thumb relative to the difference
+	 * between its maximum and minimum values.
+	 * 
+	 * @return the thumb value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ScrollBar
+	 */
+	public int getThumb() {
+		checkWidget();
+		return getQScrollBar().pageStep();
+	}
+
+	/**
+	 * Sets the size of the receiver's thumb relative to the difference between
+	 * its maximum and minimum values. This new value will be ignored if it is
+	 * less than one, and will be clamped if it exceeds the receiver's current
+	 * range.
+	 * 
+	 * @param value
+	 *            the new thumb value, which must be at least one and not larger
+	 *            than the size of the current range
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setThumb(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		if (value < 1) {
+			return;
+		}
+		int pageStep = getQScrollBar().pageStep();
+		if (value == pageStep) {
+			return;
+		}
+
+		int qMax = getQScrollBar().maximum();
+		int range = qMax + pageStep - getQScrollBar().minimum();
+		if (value > range) {
+			value = range;
+		}
+		int newQMaximum = qMax - (value - pageStep);
+		if (getQScrollBar().value() > newQMaximum) {
+			getQScrollBar().setValue(newQMaximum);
+		}
+
+		getQScrollBar().setPageStep(value);
+
+		getQScrollBar().setMaximum(newQMaximum);
+	}
+
+	/**
+	 * Sets the receiver's selection, minimum value, maximum value, thumb,
+	 * increment and page increment all at once.
+	 * <p>
+	 * Note: This is similar to setting the values individually using the
+	 * appropriate methods, but may be implemented in a more efficient fashion
+	 * on some platforms.
+	 * </p>
+	 * 
+	 * @param selection
+	 *            the new selection value
+	 * @param minimum
+	 *            the new minimum value
+	 * @param maximum
+	 *            the new maximum value
+	 * @param thumb
+	 *            the new thumb value
+	 * @param increment
+	 *            the new increment value
+	 * @param pageIncrement
+	 *            the new pageIncrement value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setValues(int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) {
+		checkWidget();
+		setSelection(selection);
+		setMinimum(minimum);
+		setMaximum(maximum);
+		setThumb(thumb);
+		setIncrement(increment);
+		setPageIncrement(pageIncrement);
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getVisible() {
+		checkWidget();
+		return this.visible;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible and all of the
+	 * receiver's ancestors are visible and <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getVisible
+	 */
+	public boolean isVisible() {
+		checkWidget();
+		return getQWidget().isVisible() && parent.isVisible();
+	}
+
+	/**
+	 * Marks the receiver as visible if the argument is <code>true</code>, and
+	 * marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param visible
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setVisible(boolean visible) {
+		checkWidget();
+		if (visible == getVisible()) {
+			return;
+		}
+		this.visible = visible;
+		getQWidget().setVisible(visible);
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled, and
+	 * <code>false</code> otherwise. A disabled control is typically not
+	 * selectable from the user interface and draws with an inactive or "grayed"
+	 * look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #isEnabled
+	 */
+	public boolean getEnabled() {
+		checkWidget();
+		return enabled;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled and all of the
+	 * receiver's ancestors are enabled, and <code>false</code> otherwise. A
+	 * disabled control is typically not selectable from the user interface and
+	 * draws with an inactive or "grayed" look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getEnabled
+	 */
+	public boolean isEnabled() {
+		checkWidget();
+		return getQWidget().isEnabled() && parent.isEnabled();
+	}
+
+	/**
+	 * Enables the receiver if the argument is <code>true</code>, and disables
+	 * it otherwise. A disabled control is typically not selectable from the
+	 * user interface and draws with an inactive or "grayed" look.
+	 * 
+	 * @param enabled
+	 *            the new enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setEnabled(boolean enabled) {
+		checkWidget();
+		this.enabled = enabled;
+		getQWidget().setEnabled(enabled);
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder("ScrollBar{"); //$NON-NLS-1$
+		sb.append("orient: "); //$NON-NLS-1$
+		sb.append(((style & SWT.HORIZONTAL) != 0 ? "HORI" : "VERT")); //$NON-NLS-1$ //$NON-NLS-2$
+		sb.append(", selection: "); //$NON-NLS-1$
+		sb.append(getSelection());
+		sb.append(", minimum: "); //$NON-NLS-1$
+		sb.append(getMinimum());
+		sb.append(", maximum: "); //$NON-NLS-1$
+		sb.append(getMaximum());
+		sb.append(", thumb: "); //$NON-NLS-1$
+		sb.append(getThumb());
+		sb.append(", increment: "); //$NON-NLS-1$
+		sb.append(getIncrement());
+		sb.append(", pageIncrement: "); //$NON-NLS-1$
+		sb.append(getPageIncrement());
+		sb.append("}"); //$NON-NLS-1$
+		return sb.toString();
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scrollable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scrollable.java
new file mode 100644
index 0000000..a9b7b87
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Scrollable.java	
@@ -0,0 +1,430 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.Qt.FocusPolicy;
+import com.trolltech.qt.core.Qt.ScrollBarPolicy;
+import com.trolltech.qt.gui.QAbstractScrollArea;
+import com.trolltech.qt.gui.QLayout;
+import com.trolltech.qt.gui.QScrollArea;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QFrame.Shape;
+import com.trolltech.qt.gui.QSizePolicy.Policy;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+import org.eclipse.swt.internal.qt.StylableScrollArea;
+
+/**
+ * This class is the abstract superclass of all classes which represent controls
+ * that have standard scroll bars.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>H_SCROLL, V_SCROLL</dd>
+ * <dt><b>Events:</b>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public abstract class Scrollable extends Control {
+	private ScrollBar horizontalBar;
+	private ScrollBar verticalBar;
+	private QWidget masterWidget;
+	private QWidget contentWidget;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Scrollable() {
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#H_SCROLL
+	 * @see SWT#V_SCROLL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Scrollable(Composite parent, int style) {
+		super(parent, style);
+		createScrollBars(style);
+	}
+
+	@Override
+	QWidget createQWidget(int style) {
+		QScrollArea scrollArea = new StylableScrollArea();
+		scrollArea.setFrameShape(Shape.NoFrame);
+		scrollArea.setFocusPolicy(FocusPolicy.TabFocus);
+		scrollArea.setWidgetResizable(!isScrollingEnabled());
+		setQMasterWidget(scrollArea);
+
+		contentWidget = new QWidget();
+		contentWidget.setSizePolicy(Policy.MinimumExpanding, Policy.MinimumExpanding);
+		contentWidget.setProperty("widgetType", "scrollareaContent"); //$NON-NLS-1$//$NON-NLS-2$
+		contentWidget.setContentsMargins(0, 0, 0, 0);
+		contentWidget.resize(0, 0);
+
+		scrollArea.setWidget(contentWidget);
+		scrollArea.resize(0, 0);
+
+		return contentWidget;
+	}
+
+	@Override
+	boolean isQScrollArea() {
+		return getQMasterWidget() instanceof QAbstractScrollArea;
+	}
+
+	protected void setQMasterWidget(QWidget masterWidget) {
+		this.masterWidget = masterWidget;
+	}
+
+	@Override
+	protected QWidget getQMasterWidget() {
+		if (masterWidget != null) {
+			return masterWidget;
+		}
+		return super.getQMasterWidget();
+	}
+
+	@Override
+	protected void updateFocusPolicy() {
+		super.updateFocusPolicy();
+		if ((style & SWT.NO_FOCUS) != 0) {
+			if (isQScrollArea()) {
+				getQMasterWidget().setFocusPolicy(FocusPolicy.NoFocus);
+			}
+		}
+	}
+
+	QAbstractScrollArea getQScrollArea() {
+		return (QAbstractScrollArea) getQMasterWidget();
+	}
+
+	private StylableScrollArea getStylableScrollArea() {
+		return (StylableScrollArea) getQMasterWidget();
+	}
+
+	private void createScrollBars(int style) {
+		if (isQScrollArea()) {
+			if ((style & SWT.H_SCROLL) != 0) {
+				setHBarPolicy(true);
+				if (horizontalBar == null) {
+					horizontalBar = createScrollBar(SWT.HORIZONTAL);
+				}
+			} else {
+				setHBarPolicy(false);
+			}
+
+			if ((style & SWT.V_SCROLL) != 0) {
+				setVBarPolicy(true);
+				if (verticalBar == null) {
+					verticalBar = createScrollBar(SWT.VERTICAL);
+				}
+			} else {
+				setVBarPolicy(false);
+			}
+		}
+	}
+
+	protected boolean isScrollingEnabled() {
+		return (style & SWT.V_SCROLL) != 0 || (style & SWT.H_SCROLL) != 0;
+	}
+
+	protected void setHBarPolicy(boolean enableScrollbar) {
+		getQScrollArea().setHorizontalScrollBarPolicy(
+				enableScrollbar ? ScrollBarPolicy.ScrollBarAsNeeded : ScrollBarPolicy.ScrollBarAlwaysOff);
+	}
+
+	protected void setVBarPolicy(boolean enableScrollbar) {
+		getQScrollArea().setVerticalScrollBarPolicy(
+				enableScrollbar ? ScrollBarPolicy.ScrollBarAsNeeded : ScrollBarPolicy.ScrollBarAlwaysOff);
+	}
+
+	void destroyScrollBar(int type) {
+		if ((type & SWT.HORIZONTAL) != 0) {
+			style &= ~SWT.H_SCROLL;
+			horizontalBar.dispose();
+			horizontalBar = null;
+		}
+		if ((type & SWT.VERTICAL) != 0) {
+			style &= ~SWT.V_SCROLL;
+			verticalBar.dispose();
+			verticalBar = null;
+		}
+	}
+
+	@Override
+	protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) {
+		super.setBounds(x, y, width, height, move, resize);
+		if (resize && contentWidget != null && isScrollingEnabled()) { //
+			Point prefSize = computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			int newWidth = Math.max(width - getVerticalBarWidth(), prefSize.x);
+			int newHeight = Math.max(height - getHorizontalBarHeight(), prefSize.y);
+			QSize sizeHint = contentWidget.sizeHint();
+			if (sizeHint.isValid()) {
+				newWidth = Math.max(newWidth, sizeHint.width());
+				newHeight = Math.max(newHeight, sizeHint.height());
+			}
+			contentWidget.resize(newWidth, newHeight);
+		}
+	}
+
+	@Override
+	public Object getData(String key) {
+		checkWidget();
+		if (key == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		if ("__Qt_gradientStart".equals(key)) { //$NON-NLS-1$
+			return Color.qt_new(display, getStylableScrollArea().getGradientStart());
+		} else if ("__Qt_gradientEnd".equals(key)) { //$NON-NLS-1$
+			return Color.qt_new(display, getStylableScrollArea().getGradientEnd());
+		} else if ("__Qt_text".equals(key)) { //$NON-NLS-1$
+			return Color.qt_new(display, getStylableScrollArea().getText());
+		} else if ("__Qt_border".equals(key)) { //$NON-NLS-1$
+			return Color.qt_new(display, getStylableScrollArea().getBorder());
+		}
+
+		return super.getData(key);
+	}
+
+	/**
+	 * Given a desired <em>client area</em> for the receiver (as described by
+	 * the arguments), returns the bounding rectangle which would be required to
+	 * produce that client area.
+	 * <p>
+	 * In other words, it returns a rectangle such that, if the receiver's
+	 * bounds were set to that rectangle, the area of the receiver which is
+	 * capable of displaying data (that is, not covered by the "trimmings")
+	 * would be the rectangle described by the arguments (relative to the
+	 * receiver's parent).
+	 * </p>
+	 * 
+	 * @param x
+	 *            the desired x coordinate of the client area
+	 * @param y
+	 *            the desired y coordinate of the client area
+	 * @param width
+	 *            the desired width of the client area
+	 * @param height
+	 *            the desired height of the client area
+	 * @return the required bounds to produce the given client area
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getClientArea
+	 */
+	public Rectangle computeTrim(int x, int y, int width, int height) {
+		checkWidget();
+		int border = getBorderWidth();
+		int xn = x - border;
+		int yn = y - border;
+		int widthNew = width + 2 * border;
+		int heightNew = height + 2 * border;
+
+		widthNew += getVerticalBarWidth();
+
+		heightNew += getHorizontalBarHeight();
+
+		return new Rectangle(xn, yn, widthNew, heightNew);
+	}
+
+	private int getVerticalBarWidth() {
+		ScrollBar bar = getVerticalBar();
+		if (bar != null) {
+			return bar.getSize().x;
+		}
+		return 0;
+	}
+
+	private int getHorizontalBarHeight() {
+		ScrollBar bar = getHorizontalBar();
+		if (bar != null) {
+			return bar.getSize().y;
+		}
+		return 0;
+	}
+
+	ScrollBar createScrollBar(int type) {
+		ScrollBar bar = new ScrollBar(this, type);
+		if ((state & CANVAS) != 0) {
+			bar.setMaximum(100);
+			bar.setThumb(10);
+		}
+		return bar;
+	}
+
+	/**
+	 * Returns a rectangle which describes the area of the receiver which is
+	 * capable of displaying data (that is, not covered by the "trimmings").
+	 * 
+	 * @return the client area
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #computeTrim
+	 */
+	public Rectangle getClientArea() {
+		checkWidget();
+		if (!isVisible()) {
+			updateQLayouts();
+		}
+
+		Rectangle clientArea = QtSWTConverter.convert(getQWidget().geometry());
+		if (clientArea.width < 0) {
+			clientArea.width = DEFAULT_WIDTH;
+		}
+		if (clientArea.height < 0) {
+			clientArea.height = DEFAULT_HEIGHT;
+		}
+
+		return clientArea;
+	}
+
+	void updateQLayouts() {
+		if (parent != null) {
+			parent.updateQLayouts();
+		}
+		updateLayoutOfQWidget();
+	}
+
+	void updateLayoutOfQWidget() {
+		QLayout layout = getQWidget().layout();
+		if (layout != null) {
+			layout.activate();
+			layout.update();
+		}
+	}
+
+	/**
+	 * Returns the receiver's horizontal scroll bar if it has one, and null if
+	 * it does not.
+	 * 
+	 * @return the horizontal scroll bar (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public ScrollBar getHorizontalBar() {
+		checkWidget();
+		return horizontalBar;
+	}
+
+	/**
+	 * Returns the receiver's vertical scroll bar if it has one, and null if it
+	 * does not.
+	 * 
+	 * @return the vertical scroll bar (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public ScrollBar getVerticalBar() {
+		checkWidget();
+		return verticalBar;
+	}
+
+	@Override
+	void releaseQWidget() {
+		masterWidget = null;
+		contentWidget = null;
+		super.releaseQWidget();
+	}
+
+	void releaseBar(ScrollBar bar) {
+		if (horizontalBar == bar) {
+			horizontalBar = null;
+		}
+		if (verticalBar == bar) {
+			verticalBar = null;
+		}
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		if (horizontalBar != null) {
+			horizontalBar.release(false);
+			horizontalBar = null;
+		}
+		if (verticalBar != null) {
+			verticalBar.release(false);
+			verticalBar = null;
+		}
+		super.releaseChildren(destroy);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java
new file mode 100644
index 0000000..9011fa1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java	
@@ -0,0 +1,1510 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.Qt.FocusPolicy;
+import com.trolltech.qt.core.Qt.FocusReason;
+import com.trolltech.qt.core.Qt.WindowFlags;
+import com.trolltech.qt.core.Qt.WindowModality;
+import com.trolltech.qt.core.Qt.WindowState;
+import com.trolltech.qt.core.Qt.WindowStates;
+import com.trolltech.qt.core.Qt.WindowType;
+import com.trolltech.qt.gui.QDialog;
+import com.trolltech.qt.gui.QMainWindow;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QScrollArea;
+import com.trolltech.qt.gui.QStyle;
+import com.trolltech.qt.gui.QVBoxLayout;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QWindowStateChangeEvent;
+import com.trolltech.qt.gui.QFrame.Shape;
+import com.trolltech.qt.gui.QSizePolicy.Policy;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ShellListener;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Region;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class represent the "windows" which the desktop or
+ * "window manager" is managing. Instances that do not have a parent (that is,
+ * they are built using the constructor, which takes a <code>Display</code> as
+ * the argument) are described as <em>top level</em> shells. Instances that do
+ * have a parent are described as <em>secondary</em> or <em>dialog</em> shells.
+ * <p>
+ * Instances are always displayed in one of the maximized, minimized or normal
+ * states:
+ * <ul>
+ * <li>
+ * When an instance is marked as <em>maximized</em>, the window manager will
+ * typically resize it to fill the entire visible area of the display, and the
+ * instance is usually put in a state where it can not be resized (even if it
+ * has style <code>RESIZE</code>) until it is no longer maximized.</li>
+ * <li>
+ * When an instance is in the <em>normal</em> state (neither maximized or
+ * minimized), its appearance is controlled by the style constants which were
+ * specified when it was created and the restrictions of the window manager (see
+ * below).</li>
+ * <li>
+ * When an instance has been marked as <em>minimized</em>, its contents (client
+ * area) will usually not be visible, and depending on the window manager, it
+ * may be "iconified" (that is, replaced on the desktop by a small simplified
+ * representation of itself), relocated to a distinguished area of the screen,
+ * or hidden. Combinations of these changes are also possible.</li>
+ * </ul>
+ * </p>
+ * <p>
+ * The <em>modality</em> of an instance may be specified using style bits. The
+ * modality style bits are used to determine whether input is blocked for other
+ * shells on the display. The <code>PRIMARY_MODAL</code> style allows an
+ * instance to block input to its parent. The <code>APPLICATION_MODAL</code>
+ * style allows an instance to block input to every other shell in the display.
+ * The <code>SYSTEM_MODAL</code> style allows an instance to block input to all
+ * shells, including shells belonging to different applications.
+ * </p>
+ * <p>
+ * Note: The styles supported by this class are treated as <em>HINT</em>s, since
+ * the window manager for the desktop on which the instance is visible has
+ * ultimate control over the appearance and behavior of decorations and
+ * modality. For example, some window managers only support resizable windows
+ * and will always assume the RESIZE style, even if it is not set. In addition,
+ * if a modality style is not supported, it is "upgraded" to a more restrictive
+ * modality style that is supported. For example, if <code>PRIMARY_MODAL</code>
+ * is not supported, it would be upgraded to <code>APPLICATION_MODAL</code>. A
+ * modality style may also be "downgraded" to a less restrictive style. For
+ * example, most operating systems no longer support <code>SYSTEM_MODAL</code>
+ * because it can freeze up the desktop, so this is typically downgraded to
+ * <code>APPLICATION_MODAL</code>.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL</dd>
+ * <dd>APPLICATION_MODAL, MODELESS, PRIMARY_MODAL, SYSTEM_MODAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Activate, Close, Deactivate, Deiconify, Iconify</dd>
+ * </dl>
+ * Class <code>SWT</code> provides two "convenience constants" for the most
+ * commonly required style combinations:
+ * <dl>
+ * <dt><code>SHELL_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required to produce a typical
+ * application top level shell: (that is,
+ * <code>CLOSE | TITLE | MIN | MAX | RESIZE</code>)</dd>
+ * <dt><code>DIALOG_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required to produce a typical
+ * application dialog shell: (that is, <code>TITLE | CLOSE | BORDER</code>)</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles APPLICATION_MODAL, MODELESS, PRIMARY_MODAL and
+ * SYSTEM_MODAL may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is not intended to be subclassed.
+ * </p>
+ * 
+ * @see Decorations
+ * @see SWT
+ * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+public class Shell extends Decorations {
+	Menu activeMenu;
+	boolean fullScreen, wasMaximized, modified;
+	Control lastActive;
+	private QMainWindow mainWindow;
+	private QDialog dialogWindow;
+	private QStyle oldStyle;
+
+	/**
+	 * Constructs a new instance of this class. This is equivalent to calling
+	 * <code>Shell((Display) null)</code>.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public Shell() {
+		this((Display) null);
+	}
+
+	/**
+	 * Constructs a new instance of this class given only the style value
+	 * describing its behavior and appearance. This is equivalent to calling
+	 * <code>Shell((Display) null, style)</code>.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#BORDER
+	 * @see SWT#CLOSE
+	 * @see SWT#MIN
+	 * @see SWT#MAX
+	 * @see SWT#RESIZE
+	 * @see SWT#TITLE
+	 * @see SWT#TOOL
+	 * @see SWT#NO_TRIM
+	 * @see SWT#SHELL_TRIM
+	 * @see SWT#DIALOG_TRIM
+	 * @see SWT#MODELESS
+	 * @see SWT#PRIMARY_MODAL
+	 * @see SWT#APPLICATION_MODAL
+	 * @see SWT#SYSTEM_MODAL
+	 */
+	public Shell(int style) {
+		this((Display) null, style);
+	}
+
+	/**
+	 * Constructs a new instance of this class given only the display to create
+	 * it on. It is created with style <code>SWT.SHELL_TRIM</code>.
+	 * <p>
+	 * Note: Currently, null can be passed in for the display argument. This has
+	 * the effect of creating the shell on the currently active display if there
+	 * is one. If there is no current display, the shell is created on a
+	 * "default" display. <b>Passing in null as the display argument is not
+	 * considered to be good coding style, and may not be supported in a future
+	 * release of SWT.</b>
+	 * </p>
+	 * 
+	 * @param display
+	 *            the display to create the shell on
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public Shell(Display display) {
+		this(display, SWT.SHELL_TRIM);
+	}
+
+	/**
+	 * Constructs a new instance of this class given the display to create it on
+	 * and a style value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * Note: Currently, null can be passed in for the display argument. This has
+	 * the effect of creating the shell on the currently active display if there
+	 * is one. If there is no current display, the shell is created on a
+	 * "default" display. <b>Passing in null as the display argument is not
+	 * considered to be good coding style, and may not be supported in a future
+	 * release of SWT.</b>
+	 * </p>
+	 * 
+	 * @param display
+	 *            the display to create the shell on
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#BORDER
+	 * @see SWT#CLOSE
+	 * @see SWT#MIN
+	 * @see SWT#MAX
+	 * @see SWT#RESIZE
+	 * @see SWT#TITLE
+	 * @see SWT#TOOL
+	 * @see SWT#NO_TRIM
+	 * @see SWT#SHELL_TRIM
+	 * @see SWT#DIALOG_TRIM
+	 * @see SWT#MODELESS
+	 * @see SWT#PRIMARY_MODAL
+	 * @see SWT#APPLICATION_MODAL
+	 * @see SWT#SYSTEM_MODAL
+	 */
+	public Shell(Display display, int style) {
+		this(display, null, style, false);
+	}
+
+	Shell(Display display, Shell parent, int style, boolean embedded) {
+		super();
+		checkSubclass();
+		if (display == null) {
+			display = Display.getCurrent();
+		}
+		if (display == null) {
+			display = Display.getDefault();
+		}
+		if (!display.isValidThread()) {
+			error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		if (parent != null && parent.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.style = checkStyle(style);
+		this.parent = parent;
+		this.display = display;
+		//		if (handle != 0 && !embedded) {
+		//			state |= FOREIGN_HANDLE;
+		//		}
+		createWidget(parent, style);
+	}
+
+	/**
+	 * Constructs a new instance of this class given only its parent. It is
+	 * created with style <code>SWT.DIALOG_TRIM</code>.
+	 * <p>
+	 * Note: Currently, null can be passed in for the parent. This has the
+	 * effect of creating the shell on the currently active display if there is
+	 * one. If there is no current display, the shell is created on a "default"
+	 * display. <b>Passing in null as the parent is not considered to be good
+	 * coding style, and may not be supported in a future release of SWT.</b>
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	public Shell(Shell parent) {
+		this(parent, SWT.DIALOG_TRIM);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * Note: Currently, null can be passed in for the parent. This has the
+	 * effect of creating the shell on the currently active display if there is
+	 * one. If there is no current display, the shell is created on a "default"
+	 * display. <b>Passing in null as the parent is not considered to be good
+	 * coding style, and may not be supported in a future release of SWT.</b>
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a shell which will be the parent of the new instance
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#BORDER
+	 * @see SWT#CLOSE
+	 * @see SWT#MIN
+	 * @see SWT#MAX
+	 * @see SWT#RESIZE
+	 * @see SWT#TITLE
+	 * @see SWT#NO_TRIM
+	 * @see SWT#SHELL_TRIM
+	 * @see SWT#DIALOG_TRIM
+	 * @see SWT#ON_TOP
+	 * @see SWT#TOOL
+	 * @see SWT#MODELESS
+	 * @see SWT#PRIMARY_MODAL
+	 * @see SWT#APPLICATION_MODAL
+	 * @see SWT#SYSTEM_MODAL
+	 */
+	public Shell(Shell parent, int style) {
+		this(parent != null ? parent.display : null, parent, style, false);
+	}
+
+	@Override
+	QWidget createQWidget(int style) {
+		QScrollArea scrollArea;
+		if (parent == null) {
+			// new window
+			mainWindow = new QMainWindow(null, createWindowFlags(style));
+			scrollArea = new QScrollArea(mainWindow);
+			mainWindow.setCentralWidget(scrollArea);
+		} else {
+			// new dialog
+			dialogWindow = new QDialog(parent.getQWidget(), createWindowFlags(style));
+			scrollArea = new QScrollArea(dialogWindow);
+
+			QVBoxLayout layout = new QVBoxLayout(dialogWindow);
+			layout.addWidget(scrollArea);
+			layout.setContentsMargins(0, 0, 0, 0);
+		}
+
+		scrollArea.setFrameShape(Shape.NoFrame);
+		scrollArea.setContentsMargins(0, 0, 0, 0);
+		scrollArea.setWidgetResizable(true);
+		setQMasterWidget(scrollArea);
+
+		QWidget contentWidget = new QWidget();
+		contentWidget.setProperty("widgetType", "scrollareaContent"); //$NON-NLS-1$ //$NON-NLS-2$
+		contentWidget.setSizePolicy(Policy.MinimumExpanding, Policy.MinimumExpanding);
+		contentWidget.setContentsMargins(0, 0, 0, 0);
+		contentWidget.resize(0, 0);
+		scrollArea.setWidget(contentWidget);
+
+		scrollArea.resize(0, 0);
+
+		int policy = getWindowControl().focusPolicy().value() & ~FocusPolicy.ClickFocus.value();
+		getWindowControl().setFocusPolicy(FocusPolicy.resolve(policy));
+
+		state |= CANVAS;
+
+		return scrollArea.widget();
+	}
+
+	private WindowFlags createWindowFlags(int style) {
+		int flags = parent == null ? WindowType.Window.value() : WindowType.Dialog.value()
+				| WindowModality.WindowModal.value();
+		flags |= WindowType.CustomizeWindowHint.value();
+		if ((style & SWT.CLOSE) != 0) {
+			flags |= WindowType.WindowSystemMenuHint.value() | WindowType.WindowCloseButtonHint.value();
+		}
+		if ((style & SWT.MIN) != 0) {
+			flags |= WindowType.WindowMinimizeButtonHint.value();
+		}
+		if ((style & SWT.MAX) != 0) {
+			flags |= WindowType.WindowMaximizeButtonHint.value();
+		}
+		if ((style & SWT.NO_TRIM) != 0) {
+			flags |= WindowType.FramelessWindowHint.value();
+		}
+		if ((style & SWT.TITLE) != 0) {
+			flags |= WindowType.WindowTitleHint.value();
+		}
+		if ((style & SWT.ON_TOP) != 0) {
+			flags |= WindowType.WindowStaysOnTopHint.value();
+		}
+		return new WindowFlags(flags);
+	}
+
+	@Override
+	protected void setupQWidget() {
+		getWindowControl().adjustSize();
+		// no setup
+	}
+
+	@Override
+	void registerQWidget() {
+		super.registerQWidget();
+		display.addControl(getWindowControl(), this);
+	}
+
+	@Override
+	void deregisterQWidget() {
+		display.removeControl(getWindowControl());
+		super.deregisterQWidget();
+	}
+
+	@Override
+	protected QWidget getQMasterWidget() {
+		return getWindowControl();
+	}
+
+	@Override
+	QWidget getMenuContainer() {
+		return getWindowControl();
+	}
+
+	QDialog getQDialog() {
+		return dialogWindow;
+	}
+
+	boolean isDialog() {
+		return dialogWindow != null;
+	}
+
+	@Override
+	public void setStyleSheet(String style) {
+		if (style == null || style.trim().length() == 0) {
+			getWindowControl().setStyleSheet(null);
+			if (oldStyle != null) {
+				getWindowControl().setStyle(oldStyle);
+				oldStyle = null;
+			}
+		} else {
+			oldStyle = getWindowControl().style();
+			getWindowControl().setStyleSheet(style);
+		}
+		updateLayout();
+	}
+
+	@Override
+	public void updateStyleSheet() {
+		if (null != getWindowControl().style()) {
+			getWindowControl().setStyle(getWindowControl().style());
+			updateLayout();
+		}
+	}
+
+	@Override
+	protected QWidget getWindowControl() {
+		return mainWindow != null ? mainWindow : dialogWindow;
+	}
+
+	/**
+	 * Invokes platform specific functionality to allocate a new shell that is
+	 * embedded.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public API for
+	 * <code>Shell</code>. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms, and should never be called from application code.
+	 * </p>
+	 * 
+	 * @param display
+	 *            the display for the shell
+	 * @param qMetrics
+	 *            the handle for the shell
+	 * @return a new shell object containing the specified display and handle
+	 */
+	public static Shell qt_new(Display display) {
+		return new Shell(display, null, SWT.NO_TRIM, true);
+	}
+
+	static int checkStyle(int style) {
+		style = Decorations.checkStyle(style);
+		style &= ~SWT.TRANSPARENT;
+		int mask = SWT.SYSTEM_MODAL | SWT.APPLICATION_MODAL | SWT.PRIMARY_MODAL;
+		int bits = style & ~mask;
+		if ((style & SWT.SYSTEM_MODAL) != 0) {
+			return bits | SWT.SYSTEM_MODAL;
+		}
+		if ((style & SWT.APPLICATION_MODAL) != 0) {
+			return bits | SWT.APPLICATION_MODAL;
+		}
+		if ((style & SWT.PRIMARY_MODAL) != 0) {
+			return bits | SWT.PRIMARY_MODAL;
+		}
+		return bits;
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when operations are performed on the receiver, by sending the listener
+	 * one of the messages defined in the <code>ShellListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ShellListener
+	 * @see #removeShellListener
+	 */
+	public void addShellListener(ShellListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Close, typedListener);
+		addListener(SWT.Iconify, typedListener);
+		addListener(SWT.Deiconify, typedListener);
+		addListener(SWT.Activate, typedListener);
+		addListener(SWT.Deactivate, typedListener);
+	}
+
+	/**
+	 * Requests that the window manager close the receiver in the same way it
+	 * would be closed when the user clicks on the "close box" or performs some
+	 * other platform specific key or mouse combination that indicates the
+	 * window should be removed.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#Close
+	 * @see #dispose
+	 */
+	public void close() {
+		checkWidget();
+		closeWidget();
+	}
+
+	@Override
+	void enableWidget(boolean enabled) {
+		Control oldFocus = display.getFocusControl();
+		super.enableWidget(enabled);
+		if (enabled) {
+			_update();
+		} else {
+
+			// All children were looped through and disabled by QWidget unless
+			// they
+			// were explicitly disabled. SWT behavior is not to disable the
+			// dialog
+			// Shells so we have to restore their states.
+			Shell shells[] = getShells();
+			for (int i = 0; i < shells.length; ++i) {
+				if (shells[i].parent == this) {
+					if (shells[i].getEnabled()) {
+						shells[i].getQWidget().setEnabled(true);
+					}
+				}
+			}
+			// Because dialog Shell might have been temporarily disabled the
+			// focus might
+			// have been lost and must be restored.
+			if (oldFocus != null) {
+				oldFocus.menuShell().restoreFocus();
+			}
+		}
+	}
+
+	@Override
+	Control findBackgroundControl() {
+		return background != null || backgroundImage != null ? this : null;
+	}
+
+	@Override
+	Cursor findCursor() {
+		return cursor;
+	}
+
+	@Override
+	Control findThemeControl() {
+		return null;
+	}
+
+	void fixShell(Shell newShell, Control control) {
+		if (this == newShell) {
+			return;
+		}
+		if (control == lastActive) {
+			setActiveControl(null);
+		}
+	}
+
+	/**
+	 * If the receiver is visible, moves it to the top of the drawing order for
+	 * the display on which it was created (so that all other shells on that
+	 * display, which are not the receiver's children will be drawn behind it)
+	 * and forces the window manager to make the shell active.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 * @see Control#moveAbove
+	 * @see Control#setFocus
+	 * @see Control#setVisible
+	 * @see Display#getActiveShell
+	 * @see Decorations#setDefaultButton(Button)
+	 * @see Shell#open
+	 * @see Shell#setActive
+	 */
+	public void forceActive() {
+		checkWidget();
+		if (!isVisible()) {
+			return;
+		}
+		bringToTop();
+	}
+
+	void forceResize() {
+		/* Do nothing */
+	}
+
+	/**
+	 * Returns the receiver's alpha value. The alpha value is between 0
+	 * (transparent) and 255 (opaque).
+	 * 
+	 * @return the alpha value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public int getAlpha() {
+		checkWidget();
+		double opacity = getQWidget().windowOpacity();
+		return (int) (255 * opacity);
+	}
+
+	@Override
+	public Rectangle getBounds() {
+		checkWidget();
+		QPoint pos = getWindowControl().pos();
+		QSize size = getWindowControl().size();
+		return new Rectangle(pos.x(), pos.y(), size.width(), size.height());
+	}
+
+	@Override
+	public Rectangle getClientArea() {
+		checkWidget();
+		if (!isVisible()) {
+			updateQLayouts();
+		}
+
+		Rectangle clientArea = QtSWTConverter.convert(getQWidget().rect());
+		if (clientArea.width < 0) {
+			clientArea.width = 0;
+		}
+		if (clientArea.height < 0) {
+			clientArea.height = 0;
+		}
+
+		return clientArea;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is currently in fullscreen
+	 * state, and false otherwise.
+	 * <p>
+	 * 
+	 * @return the fullscreen state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public boolean getFullScreen() {
+		checkWidget();
+		return fullScreen;
+	}
+
+	/**
+	 * Returns the receiver's input method editor mode. This will be the result
+	 * of bitwise OR'ing together one or more of the following constants defined
+	 * in class <code>SWT</code>: <code>NONE</code>, <code>ROMAN</code>,
+	 * <code>DBCS</code>, <code>PHONETIC</code>, <code>NATIVE</code>,
+	 * <code>ALPHA</code>.
+	 * 
+	 * @return the IME mode
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 */
+	public int getImeInputMode() {
+		checkWidget();
+		// TODO how to do it with Qt?
+		return SWT.NONE;
+	}
+
+	@Override
+	public Point getLocation() {
+		checkWidget();
+		if (getWindowControl().isMinimized()) {
+			return super.getLocation();
+		}
+		return QtSWTConverter.convert(getWindowControl().pos());
+	}
+
+	@Override
+	public boolean getMaximized() {
+		checkWidget();
+		return !fullScreen && super.getMaximized();
+	}
+
+	/**
+	 * Returns a point describing the minimum receiver's size. The x coordinate
+	 * of the result is the minimum width of the receiver. The y coordinate of
+	 * the result is the minimum height of the receiver.
+	 * 
+	 * @return the receiver's size
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public Point getMinimumSize() {
+		checkWidget();
+		return QtSWTConverter.convert(getWindowControl().minimumSize());
+	}
+
+	/**
+	 * Gets the receiver's modified state.
+	 * 
+	 * </ul>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.5
+	 */
+	public boolean getModified() {
+		checkWidget();
+		return modified;
+	}
+
+	/**
+	 * Returns the region that defines the shape of the shell, or null if the
+	 * shell has the default shape.
+	 * 
+	 * @return the region that defines the shape of the shell (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 * 
+	 */
+	@Override
+	public Region getRegion() {
+		/* This method is needed for the @since 3.0 Javadoc */
+		checkWidget();
+		return region;
+	}
+
+	@Override
+	public Shell getShell() {
+		checkWidget();
+		return this;
+	}
+
+	@Override
+	public Point getSize() {
+		checkWidget();
+		return QtSWTConverter.convert(getWindowControl().size());
+	}
+
+	/**
+	 * Returns an array containing all shells which are descendants of the
+	 * receiver.
+	 * <p>
+	 * 
+	 * @return the dialog shells
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Shell[] getShells() {
+		checkWidget();
+		int count = 0;
+		Shell[] shells = display.getShells();
+		for (int i = 0; i < shells.length; i++) {
+			Control shell = shells[i];
+			do {
+				shell = shell.parent;
+			} while (shell != null && shell != this);
+			if (shell == this) {
+				count++;
+			}
+		}
+		int index = 0;
+		Shell[] result = new Shell[count];
+		for (int i = 0; i < shells.length; i++) {
+			Control shell = shells[i];
+			do {
+				shell = shell.parent;
+			} while (shell != null && shell != this);
+			if (shell == this) {
+				result[index++] = shells[i];
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the instance of the ToolBar object representing the tool bar that can appear on the
+	 * trim of the shell. This will return <code>null</code> if the platform does not support tool bars that
+	 * not part of the content area of the shell, or if the style of the shell does not support a 
+	 * tool bar. 
+	 * <p>
+	 * 
+	 * @return a ToolBar object representing the window's tool bar or null.
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+	 * </ul>
+	 * 
+	 * @since 3.7
+	 */
+	public ToolBar getToolBar() {
+		return null;
+	}
+
+	@Override
+	protected Composite findDeferredControl() {
+		return layoutCount > 0 ? this : null;
+	}
+
+	//	@Override
+	//	public boolean isEnabled() {
+	//		checkWidget();
+	//		return getEnabled();
+	//}
+
+	/**
+	 * Moves the receiver to the top of the drawing order for the display on
+	 * which it was created (so that all other shells on that display, which are
+	 * not the receiver's children will be drawn behind it), marks it visible,
+	 * sets the focus and asks the window manager to make the shell active.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Control#moveAbove
+	 * @see Control#setFocus
+	 * @see Control#setVisible
+	 * @see Display#getActiveShell
+	 * @see Decorations#setDefaultButton(Button)
+	 * @see Shell#setActive
+	 * @see Shell#forceActive
+	 */
+	public void open() {
+		checkWidget();
+		updateLayout();
+		setVisible(true);
+		bringToTop();
+		if (isDisposed()) {
+			return;
+		}
+		if (!restoreFocus() && !traverseGroup(true)) {
+			setFocus(FocusReason.OtherFocusReason);
+		}
+	}
+
+	@Override
+	public boolean print(GC gc) {
+		checkWidget();
+		if (gc == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (gc.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		//TODO
+		return false;
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		Shell[] shells = getShells();
+		for (int i = 0; i < shells.length; i++) {
+			Shell shell = shells[i];
+			if (shell != null && !shell.isDisposed()) {
+				shell.release(false);
+			}
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void releaseParent() {
+		/* Do nothing */
+	}
+
+	@Override
+	void releaseQWidget() {
+		getWindowControl().close();
+		super.releaseQWidget();
+		mainWindow = null;
+		dialogWindow = null;
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		lastActive = null;
+	}
+
+	@Override
+	void removeMenu(Menu menu) {
+		super.removeMenu(menu);
+		if (menu == activeMenu) {
+			activeMenu = null;
+		}
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when operations are performed on the receiver.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ShellListener
+	 * @see #addShellListener
+	 */
+	public void removeShellListener(ShellListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Close, listener);
+		eventTable.unhook(SWT.Iconify, listener);
+		eventTable.unhook(SWT.Deiconify, listener);
+		eventTable.unhook(SWT.Activate, listener);
+		eventTable.unhook(SWT.Deactivate, listener);
+	}
+
+	/**
+	 * If the receiver is visible, moves it to the top of the drawing order for
+	 * the display on which it was created (so that all other shells on that
+	 * display, which are not the receiver's children will be drawn behind it)
+	 * and asks the window manager to make the shell active
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 * @see Control#moveAbove
+	 * @see Control#setFocus
+	 * @see Control#setVisible
+	 * @see Display#getActiveShell
+	 * @see Decorations#setDefaultButton(Button)
+	 * @see Shell#open
+	 * @see Shell#setActive
+	 */
+	public void setActive() {
+		checkWidget();
+		if (!isVisible()) {
+			return;
+		}
+		bringToTop();
+		// widget could be disposed at this point
+	}
+
+	void setActiveControl(Control control) {
+		if (control != null && control.isDisposed()) {
+			control = null;
+		}
+		if (lastActive != null && lastActive.isDisposed()) {
+			lastActive = null;
+		}
+		if (lastActive == control) {
+			return;
+		}
+
+		/*
+		 * Compute the list of controls to be activated and deactivated by
+		 * finding the first common parent control.
+		 */
+		Control[] activate = control == null ? new Control[0] : control.getPath();
+		Control[] deactivate = lastActive == null ? new Control[0] : lastActive.getPath();
+		lastActive = control;
+		int index = 0, length = Math.min(activate.length, deactivate.length);
+		while (index < length) {
+			if (activate[index] != deactivate[index]) {
+				break;
+			}
+			index++;
+		}
+
+		/*
+		 * It is possible (but unlikely), that application code could have
+		 * destroyed some of the widgets. If this happens, keep processing those
+		 * widgets that are not disposed.
+		 */
+		for (int i = deactivate.length - 1; i >= index; --i) {
+			if (!deactivate[i].isDisposed()) {
+				deactivate[i].sendEvent(SWT.Deactivate);
+			}
+		}
+		for (int i = activate.length - 1; i >= index; --i) {
+			if (!activate[i].isDisposed()) {
+				activate[i].sendEvent(SWT.Activate);
+			}
+		}
+	}
+
+	/**
+	 * Sets the receiver's alpha value which must be between 0 (transparent) and
+	 * 255 (opaque).
+	 * <p>
+	 * This operation requires the operating system's advanced widgets subsystem
+	 * which may not be available on some platforms.
+	 * </p>
+	 * 
+	 * @param alpha
+	 *            the alpha value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setAlpha(int alpha) {
+		checkWidget();
+		if (alpha < 0 || alpha > 255) {
+			return;
+		}
+		getQWidget().setWindowOpacity((double) alpha / 255);
+	}
+
+	@Override
+	protected void setBounds(int x, int y, int width, int height, boolean move, boolean resize) {
+		if (fullScreen) {
+			setFullScreen(false);
+		}
+
+		Rectangle geometry = QtSWTConverter.convert(getWindowControl().frameGeometry());
+		if (move) {
+			int oldX = geometry.x;
+			int oldY = geometry.y;
+			boolean moved = oldX != x || oldY != y;
+			if (moved) {
+				getWindowControl().move(x, y);
+			}
+		}
+
+		if (resize) {
+			int oldW = geometry.width;
+			int oldH = geometry.height;
+			boolean resized = oldW != width || oldH != height;
+
+			if (resized) {
+				if ((style & SWT.RESIZE) == 0) {
+					unlockSize();
+				}
+
+				getWindowControl().resize(width, height);
+
+				if ((style & SWT.RESIZE) == 0) {
+					getWindowControl().setFixedSize(Math.max(0, width), Math.max(0, height));
+				}
+			}
+		}
+	}
+
+	@Override
+	public void setEnabled(boolean enabled) {
+		checkWidget();
+		if (super.getEnabled() == enabled) {
+			return;
+		}
+		super.setEnabled(enabled);
+		if (enabled && getWindowControl().isActiveWindow()) {
+			if (!restoreFocus()) {
+				traverseGroup(true);
+			}
+		}
+	}
+
+	/**
+	 * Sets the full screen state of the receiver. If the argument is
+	 * <code>true</code> causes the receiver to switch to the full screen state,
+	 * and if the argument is <code>false</code> and the receiver was previously
+	 * switched into full screen state, causes the receiver to switch back to
+	 * either the maximmized or normal states.
+	 * <p>
+	 * Note: The result of intermixing calls to <code>setFullScreen(true)</code>, <code>setMaximized(true)</code> and <code>setMinimized(true)</code>
+	 * will vary by platform. Typically, the behavior will match the platform
+	 * user's expectations, but not always. This should be avoided if possible.
+	 * </p>
+	 * 
+	 * @param fullScreen
+	 *            the new fullscreen state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void setFullScreen(boolean fullScreen) {
+		checkWidget();
+		if (this.fullScreen == fullScreen) {
+			return;
+		}
+		this.fullScreen = fullScreen;
+		if (fullScreen) {
+			getWindowControl().showFullScreen();
+		} else {
+			getWindowControl().showNormal();
+		}
+	}
+
+	/**
+	 * Sets the input method editor mode to the argument which should be the
+	 * result of bitwise OR'ing together one or more of the following constants
+	 * defined in class <code>SWT</code>: <code>NONE</code>, <code>ROMAN</code>,
+	 * <code>DBCS</code>, <code>PHONETIC</code>, <code>NATIVE</code>,
+	 * <code>ALPHA</code>.
+	 * 
+	 * @param mode
+	 *            the new IME mode
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 */
+	public void setImeInputMode(int mode) {
+		checkWidget();
+		// TODO
+	}
+
+	/**
+	 * Sets the receiver's minimum size to the size specified by the arguments.
+	 * If the new minimum size is larger than the current size of the receiver,
+	 * the receiver is resized to the new minimum size.
+	 * 
+	 * @param width
+	 *            the new minimum width for the receiver
+	 * @param height
+	 *            the new minimum height for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setMinimumSize(int width, int height) {
+		checkWidget();
+		getQWidget().setMinimumSize(width, height);
+	}
+
+	/**
+	 * Sets the receiver's minimum size to the size specified by the argument.
+	 * If the new minimum size is larger than the current size of the receiver,
+	 * the receiver is resized to the new minimum size.
+	 * 
+	 * @param size
+	 *            the new minimum size for the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setMinimumSize(Point size) {
+		checkWidget();
+		if (size == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setMinimumSize(size.x, size.y);
+	}
+
+	/**
+	 * Sets the receiver's modified state as specified by the argument.
+	 * 
+	 * @param modified
+	 *            the new modified state for the receiver
+	 * 
+	 *            </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.5
+	 */
+	public void setModified(boolean modified) {
+		checkWidget();
+		this.modified = modified;
+	}
+
+	/**
+	 * Sets the shape of the shell to the region specified by the argument. When
+	 * the argument is null, the default shape of the shell is restored. The
+	 * shell must be created with the style SWT.NO_TRIM in order to specify a
+	 * region.
+	 * 
+	 * @param region
+	 *            the region that defines the shape of the shell (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the region has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 * 
+	 */
+	@Override
+	public void setRegion(Region region) {
+		checkWidget();
+		if ((style & SWT.NO_TRIM) == 0) {
+			return;
+		}
+		super.setRegion(region);
+	}
+
+	@Override
+	public void setVisible(boolean visible) {
+		checkWidget();
+		int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+		if ((style & mask) != 0) {
+			if (visible) {
+				display.setModalShell(this);
+				if ((style & (SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL)) != 0) {
+					display.setModalDialog(null);
+				}
+				Control control = display.getFocusControl();
+				if (control != null && !control.isActive()) {
+					bringToTop();
+					if (isDisposed()) {
+						return;
+					}
+				}
+				getWindowControl().setWindowModality(getModalityFromStyle());
+				QWidget mouseGrabber = QWidget.mouseGrabber();
+				if (mouseGrabber != null) {
+					mouseGrabber.releaseMouse();
+				}
+			} else {
+				display.clearModal(this);
+			}
+		} else {
+			updateModal();
+		}
+
+		_setVisible(getWindowControl(), visible);
+	}
+
+	private WindowModality getModalityFromStyle() {
+		if ((style & SWT.SYSTEM_MODAL) != 0) {
+			return WindowModality.ApplicationModal;
+		}
+		if ((style & SWT.APPLICATION_MODAL) != 0) {
+			return WindowModality.ApplicationModal;
+		}
+		if ((style & SWT.PRIMARY_MODAL) != 0) {
+			return WindowModality.ApplicationModal;
+		}
+		return WindowModality.NonModal;
+	}
+
+	@Override
+	boolean traverseEscape() {
+		if (parent == null) {
+			return false;
+		}
+		if (!isVisible() || !isEnabled()) {
+			return false;
+		}
+		close();
+		return true;
+	}
+
+	void updateModal() {
+	}
+
+	@Override
+	public boolean qtCloseEvent() {
+		return closeWidget();
+	}
+
+	@Override
+	public boolean qtWindowStateChangeEvent(QObject source, QWindowStateChangeEvent event) {
+		if (source != getWindowControl()) {
+			return false;
+		}
+		WindowStates oldState = event.oldState();
+		WindowStates newState = getWindowControl().windowState();
+		if (oldState.isSet(WindowState.WindowMinimized) && !newState.isSet(WindowState.WindowMinimized)) {
+			sendEvent(SWT.Deiconify);
+			return false;
+		}
+		if (!oldState.isSet(WindowState.WindowMinimized) && newState.isSet(WindowState.WindowMinimized)) {
+			sendEvent(SWT.Iconify);
+			menuShell().saveFocus();
+			return false;
+		}
+		return false;
+	}
+
+	@Override
+	public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) {
+		if (source == getQWidget()) {
+			QWidget clickTarget = getQWidget().childAt(mouseEvent.x(), mouseEvent.y());
+			if (clickTarget != null && clickTarget != getQWidget()) {
+				Widget swtControl = display.findControl(clickTarget);
+				if (swtControl instanceof Control) {
+					setActiveControl((Control) swtControl);
+				}
+			}
+		}
+		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Slider.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Slider.java
new file mode 100644
index 0000000..b85060a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Slider.java	
@@ -0,0 +1,632 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.Qt.FocusPolicy;
+import com.trolltech.qt.core.Qt.Orientation;
+import com.trolltech.qt.gui.QAbstractSlider;
+import com.trolltech.qt.gui.QScrollBar;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of this class are selectable user interface objects that represent
+ * a range of positive, numeric values.
+ * <p>
+ * At any given moment, a given slider will have a single 'selection' that is
+ * considered to be its value, which is constrained to be within the range of
+ * values the slider represents (that is, between its <em>minimum</em> and
+ * <em>maximum</em> values).
+ * </p>
+ * <p>
+ * Typically, sliders will be made up of five areas:
+ * <ol>
+ * <li>an arrow button for decrementing the value</li>
+ * <li>a page decrement area for decrementing the value by a larger amount</li>
+ * <li>a <em>thumb</em> for modifying the value by mouse dragging</li>
+ * <li>a page increment area for incrementing the value by a larger amount</li>
+ * <li>an arrow button for incrementing the value</li>
+ * </ol>
+ * Based on their style, sliders are either <code>HORIZONTAL</code> (which have
+ * a left facing button for decrementing the value and a right facing button for
+ * incrementing it) or <code>VERTICAL</code> (which have an upward facing button
+ * for decrementing the value and a downward facing buttons for incrementing
+ * it).
+ * </p>
+ * <p>
+ * On some platforms, the size of the slider's thumb can be varied relative to
+ * the magnitude of the range of values it represents (that is, relative to the
+ * difference between its maximum and minimum values). Typically, this is used
+ * to indicate some proportional value such as the ratio of the visible area of
+ * a document to the total amount of space that it would take to display it. SWT
+ * supports setting the thumb size even if the underlying platform does not, but
+ * in this case the appearance of the slider will not change.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see ScrollBar
+ * @see <a href="http://www.eclipse.org/swt/snippets/#slider">Slider
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Slider extends Control {
+
+	private int thumb; // TODO Not supported by Qt?
+	private int maximum;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#HORIZONTAL
+	 * @see SWT#VERTICAL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Slider(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected void connectSignals() {
+		getQScrollBar().actionTriggered.connect(this, "actionTriggered(int)"); //$NON-NLS-1$
+		getQScrollBar().rangeChanged.connect(this, "rangeChanged(int,int)"); //$NON-NLS-1$
+		getQScrollBar().sliderMoved.connect(this, "sliderMoved(int)"); //$NON-NLS-1$
+		getQScrollBar().sliderPressed.connect(this, "sliderPressed()"); //$NON-NLS-1$
+		getQScrollBar().sliderReleased.connect(this, "sliderReleased()"); //$NON-NLS-1$
+		getQScrollBar().valueChanged.connect(this, "valueChanged(int)"); //$NON-NLS-1$
+	}
+
+	protected void actionTriggered(int action) {
+		System.out.println("actionTriggered :" + action + " " + getQScrollBar().value()); //$NON-NLS-1$//$NON-NLS-2$
+		Event event = new Event();
+		if (action == QAbstractSlider.SliderAction.SliderToMinimum.value()) {
+			event.detail = SWT.HOME;
+		} else if (action == QAbstractSlider.SliderAction.SliderToMaximum.value()) {
+			event.detail = SWT.END;
+		} else if (action == QAbstractSlider.SliderAction.SliderSingleStepAdd.value()) {
+			event.detail = SWT.ARROW_DOWN;
+		} else if (action == QAbstractSlider.SliderAction.SliderSingleStepSub.value()) {
+			event.detail = SWT.ARROW_UP;
+		} else if (action == QAbstractSlider.SliderAction.SliderPageStepAdd.value()) {
+			event.detail = SWT.PAGE_UP;
+		} else if (action == QAbstractSlider.SliderAction.SliderPageStepSub.value()) {
+			event.detail = SWT.PAGE_DOWN;
+		} else if (action == QAbstractSlider.SliderAction.SliderMove.value()) {
+			event.detail = SWT.DRAG;
+		} else {
+			return;
+		}
+		// see actionTrigger signal
+		getQScrollBar().setValue(getQScrollBar().sliderPosition());
+		sendEvent(SWT.Selection, event);
+	}
+
+	protected void rangeChanged(int min, int max) {
+		System.out.println("rangeChanged :" + min + ", " + max); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	protected void sliderMoved(int pos) {
+		System.out.println("sliderMoved :" + pos); //$NON-NLS-1$
+	}
+
+	protected void sliderPressed() {
+		System.out.println("sliderPressed"); //$NON-NLS-1$
+	}
+
+	protected void sliderReleased() {
+		System.out.println("sliderReleased"); //$NON-NLS-1$
+		Event event = new Event();
+		event.detail = SWT.NONE;
+		sendEvent(SWT.Selection, event);
+	}
+
+	protected void valueChanged(int value) {
+		System.out.println("valueChanged :" + value); //$NON-NLS-1$
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		final Orientation orientation = (style & SWT.HORIZONTAL) != 0 ? Orientation.Horizontal : Orientation.Vertical;
+		return new QScrollBar(orientation);
+	}
+
+	@Override
+	protected void setupQWidget() {
+		super.setupQWidget();
+		getQScrollBar().setFocusPolicy(FocusPolicy.WheelFocus);
+		setThumb(10);
+		setMinimum(0);
+		setMaximum(100);
+		setIncrement(1);
+		setPageIncrement(10);
+	}
+
+	QAbstractSlider getQScrollBar() {
+		return (QAbstractSlider) getQWidget();
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's value, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the event object detail field
+	 * contains one of the following values: <code>SWT.NONE</code> - for the end
+	 * of a drag. <code>SWT.DRAG</code>. <code>SWT.HOME</code>.
+	 * <code>SWT.END</code>. <code>SWT.ARROW_DOWN</code>.
+	 * <code>SWT.ARROW_UP</code>. <code>SWT.PAGE_DOWN</code>.
+	 * <code>SWT.PAGE_UP</code>. <code>widgetDefaultSelected</code> is not
+	 * called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the user changes
+	 *            the receiver's value
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		int border = getBorderWidth();
+		int width = border * 2;
+		int height = border * 2;
+		// default size: this is just the two arrows + thumb
+		Point defaultSize = super.computeSize(wHint, hHint, changed);
+		if ((style & SWT.HORIZONTAL) != 0) {
+			width += defaultSize.y * 10;
+			height += defaultSize.y;
+		} else {
+			width += defaultSize.x;
+			height += defaultSize.x * 10;
+		}
+		if (wHint != SWT.DEFAULT) {
+			width = wHint + border * 2;
+		}
+		if (hHint != SWT.DEFAULT) {
+			height = hHint + border * 2;
+		}
+		return new Point(width, height);
+	}
+
+	// TODO Is this ok?
+
+	// int defaultBackground() {
+	// return OS.GetSysColor(OS.COLOR_SCROLLBAR);
+	// }
+	//
+	// int defaultForeground() {
+	// return OS.GetSysColor(OS.COLOR_BTNFACE);
+	// }
+
+	/**
+	 * Returns the amount that the receiver's value will be modified by when the
+	 * up/down (or right/left) arrows are pressed.
+	 * 
+	 * @return the increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getIncrement() {
+		checkWidget();
+		return getQScrollBar().singleStep();
+	}
+
+	/**
+	 * Returns the maximum value which the receiver will allow.
+	 * 
+	 * @return the maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMaximum() {
+		checkWidget();
+		return maximum;
+	}
+
+	/**
+	 * Returns the minimum value which the receiver will allow.
+	 * 
+	 * @return the minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMinimum() {
+		checkWidget();
+		return getQScrollBar().minimum();
+	}
+
+	/**
+	 * Returns the amount that the receiver's value will be modified by when the
+	 * page increment/decrement areas are selected.
+	 * 
+	 * @return the page increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getPageIncrement() {
+		checkWidget();
+		return getQScrollBar().pageStep();
+	}
+
+	/**
+	 * Returns the 'selection', which is the receiver's value.
+	 * 
+	 * @return the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelection() {
+		checkWidget();
+		return getQScrollBar().value();
+	}
+
+	/**
+	 * Returns the size of the receiver's thumb relative to the difference
+	 * between its maximum and minimum values.
+	 * 
+	 * @return the thumb value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getThumb() {
+		checkWidget();
+		return thumb;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's value.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the
+	 * up/down (or right/left) arrows are pressed to the argument, which must be
+	 * at least one.
+	 * 
+	 * @param value
+	 *            the new increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setIncrement(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		getQScrollBar().setSingleStep(value);
+	}
+
+	/**
+	 * Sets the maximum. If this value is negative or less than or equal to the
+	 * minimum, the value is ignored. If necessary, first the thumb and then the
+	 * selection are adjusted to fit within the new range.
+	 * 
+	 * @param value
+	 *            the new maximum, which must be greater than the current
+	 *            minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMaximum(int value) {
+		checkWidget();
+		if (value < 0 || value <= getQScrollBar().minimum()) {
+			return;
+		}
+		maximum = value;
+		getQScrollBar().setMaximum(maximum - thumb);
+	}
+
+	/**
+	 * Sets the minimum value. If this value is negative or greater than or
+	 * equal to the maximum, the value is ignored. If necessary, first the thumb
+	 * and then the selection are adjusted to fit within the new range.
+	 * 
+	 * @param value
+	 *            the new minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMinimum(int value) {
+		checkWidget();
+		if (value < 0 || value >= getQScrollBar().maximum()) {
+			return;
+		}
+		getQScrollBar().setMinimum(value);
+	}
+
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the
+	 * page increment/decrement areas are selected to the argument, which must
+	 * be at least one.
+	 * 
+	 * @param value
+	 *            the page increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setPageIncrement(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		getQScrollBar().setPageStep(value);
+	}
+
+	/**
+	 * Sets the 'selection', which is the receiver's value, to the argument
+	 * which must be greater than or equal to zero.
+	 * 
+	 * @param value
+	 *            the new selection (must be zero or greater)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int value) {
+		checkWidget();
+		getQScrollBar().setValue(value);
+	}
+
+	/**
+	 * Sets the size of the receiver's thumb relative to the difference between
+	 * its maximum and minimum values. This new value will be ignored if it is
+	 * less than one, and will be clamped if it exceeds the receiver's current
+	 * range.
+	 * 
+	 * @param value
+	 *            the new thumb value, which must be at least one and not larger
+	 *            than the size of the current range
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setThumb(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		this.thumb = value;
+		setMaximum(maximum); // adjust the maximum which depends on the thumb
+	}
+
+	/**
+	 * Sets the receiver's selection, minimum value, maximum value, thumb,
+	 * increment and page increment all at once.
+	 * <p>
+	 * Note: This is similar to setting the values individually using the
+	 * appropriate methods, but may be implemented in a more efficient fashion
+	 * on some platforms.
+	 * </p>
+	 * 
+	 * @param selection
+	 *            the new selection value
+	 * @param minimum
+	 *            the new minimum value
+	 * @param maximum
+	 *            the new maximum value
+	 * @param thumb
+	 *            the new thumb value
+	 * @param increment
+	 *            the new increment value
+	 * @param pageIncrement
+	 *            the new pageIncrement value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setValues(int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) {
+		checkWidget();
+		if (minimum < 0) {
+			return;
+		}
+		if (maximum < 0) {
+			return;
+		}
+		if (thumb < 1) {
+			return;
+		}
+		if (increment < 1) {
+			return;
+		}
+		if (pageIncrement < 1) {
+			return;
+		}
+		setMinimum(minimum);
+		setMaximum(maximum);
+		setThumb(thumb);
+		setSelection(selection);
+		setIncrement(increment);
+		setPageIncrement(pageIncrement);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Spinner.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Spinner.java
new file mode 100644
index 0000000..19c26a6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Spinner.java	
@@ -0,0 +1,948 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.gui.QApplication;
+import com.trolltech.qt.gui.QDoubleSpinBox;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class are selectable user interface objects that allow the
+ * user to enter and modify numeric values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>, it
+ * does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>READ_ONLY, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, Modify, Verify</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#spinner">Spinner
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Spinner extends Composite {
+	boolean ignoreModify;
+	int pageIncrement, digits;
+	int selection = 0;
+
+	/**
+	 * the operating system limit for the number of characters that the text
+	 * field in an instance of this class can hold
+	 * 
+	 * @since 3.4
+	 */
+	public static final int LIMIT;
+
+	/*
+	 * These values can be different on different platforms. Therefore they are
+	 * not initialized in the declaration to stop the compiler from inlining.
+	 */
+	static {
+		//TODO: 3 is just an imaginary value. see bug 161   
+		LIMIT = 3;
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#READ_ONLY
+	 * @see SWT#WRAP
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Spinner(Composite parent, int style) {
+		super(parent, checkStyle(style));
+
+		// setting default values of the SWT widget:
+		((QDoubleSpinBox) getQWidget()).setDecimals(0);
+		((QDoubleSpinBox) getQWidget()).setMaximum(100);
+
+		((QDoubleSpinBox) getQWidget()).setSingleStep(getIncrement() / Math.pow(10, this.digits));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state &= ~(CANVAS | THEME_BACKGROUND);
+		QWidget spinner = new QDoubleSpinBox();
+		connectSignals(spinner);
+		return spinner;
+	}
+
+	static int checkStyle(int style) {
+		/*
+		 * Even though it is legal to create this widget with scroll bars, they
+		 * serve no useful purpose because they do not automatically scroll the
+		 * widget's client area. The fix is to clear the SWT style.
+		 */
+		return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	private void connectSignals(QWidget spinner) {
+		((QDoubleSpinBox) spinner).valueChanged.connect(this, "valueChanged()"); //$NON-NLS-1$
+		//TODO: connection for selection and verify event is missing, but there's not suitable event in QDoubleSpinBox (bug 159)
+	}
+
+	protected void valueChanged() {
+		Event event = new Event();
+		sendEvent(SWT.Modify, event);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver's text is modified, by sending it one of the messages
+	 * defined in the <code>ModifyListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ModifyListener
+	 * @see #removeModifyListener
+	 */
+	public void addModifyListener(ModifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Modify, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is not called for texts.
+	 * <code>widgetDefaultSelected</code> is typically called when ENTER is
+	 * pressed in a single-line text.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the control is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver's text is verified, by sending it one of the messages
+	 * defined in the <code>VerifyListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see VerifyListener
+	 * @see #removeVerifyListener
+	 */
+	void addVerifyListener(VerifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Verify, typedListener);
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		QSize size = ((QDoubleSpinBox) getQWidget()).sizeHint();
+		return new Point(size.width(), size.height());
+	}
+
+	@Override
+	public Rectangle computeTrim(int x, int y, int width, int height) {
+		checkWidget();
+		return super.computeTrim(x, y, width, height);
+	}
+
+	/**
+	 * Copies the selected text.
+	 * <p>
+	 * The current selection is copied to the clipboard.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void copy() {
+		checkWidget();
+		QApplication.clipboard().setText(((QDoubleSpinBox) getQWidget()).text());
+	}
+
+	/**
+	 * Cuts the selected text.
+	 * <p>
+	 * The current selection is first copied to the clipboard and then deleted
+	 * from the widget.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void cut() {
+		checkWidget();
+		if ((style & SWT.READ_ONLY) != 0) {
+			return;
+		}
+		QApplication.clipboard().setText(((QDoubleSpinBox) getQWidget()).text());
+		((QDoubleSpinBox) getQWidget()).setValue(0);
+		this.selection = 0;
+	}
+
+	@Override
+	void enableWidget(boolean enabled) {
+		super.enableWidget(enabled);
+	}
+
+	@Override
+	void deregisterQWidget() {
+		super.deregisterQWidget();
+	}
+
+	@Override
+	boolean hasFocus() {
+		return getQWidget().hasFocus();
+	}
+
+	/**
+	 * Returns the number of decimal places used by the receiver.
+	 * 
+	 * @return the digits
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getDigits() {
+		checkWidget();
+		return digits;
+	}
+
+	String getDecimalSeparator() {
+		// TODO check locale
+		return "."; //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the amount that the receiver's value will be modified by when the
+	 * up/down arrows are pressed.
+	 * 
+	 * @return the increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getIncrement() {
+		checkWidget();
+		double step = ((QDoubleSpinBox) getQWidget()).singleStep();
+		int qstep = (int) (step * Math.pow(10, this.digits));
+		return qstep;
+	}
+
+	/**
+	 * Returns the maximum value which the receiver will allow.
+	 * 
+	 * @return the maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMaximum() {
+		checkWidget();
+		return (int) (((QDoubleSpinBox) getQWidget()).maximum() * Math.pow(10, this.digits));
+	}
+
+	/**
+	 * Returns the minimum value which the receiver will allow.
+	 * 
+	 * @return the minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getMinimum() {
+		checkWidget();
+		return (int) (((QDoubleSpinBox) getQWidget()).minimum() * Math.pow(10, this.digits));
+	}
+
+	/**
+	 * Returns the amount that the receiver's position will be modified by when
+	 * the page up/down keys are pressed.
+	 * 
+	 * @return the page increment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getPageIncrement() {
+		checkWidget();
+		return (int) ((QDoubleSpinBox) getQWidget()).singleStep();
+	}
+
+	/**
+	 * Returns the <em>selection</em>, which is the receiver's position.
+	 * 
+	 * @return the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelection() {
+		checkWidget();
+		int qselection = (int) (((QDoubleSpinBox) getQWidget()).value() * Math.pow(10, this.digits));
+		this.selection = qselection;
+		return qselection;
+	}
+
+	int getSelectionText(boolean[] parseFail) {
+		// TODO
+		return -1;
+	}
+
+	/**
+	 * Returns a string containing a copy of the contents of the receiver's text
+	 * field, or an empty string if there are no contents.
+	 * 
+	 * @return the receiver's text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public String getText() {
+		checkWidget();
+		return ((QDoubleSpinBox) getQWidget()).text();
+	}
+
+	/**
+	 * Returns the maximum number of characters that the receiver's text field
+	 * is capable of holding. If this has not been changed by
+	 * <code>setTextLimit()</code>, it will be the constant
+	 * <code>Spinner.LIMIT</code>.
+	 * 
+	 * @return the text limit
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #LIMIT
+	 * 
+	 * @since 3.4
+	 */
+	public int getTextLimit() {
+		checkWidget();
+		//TODO: not sure about this...
+		int maxChars = String.valueOf(getMaximum()).trim().length();
+		int minChars = String.valueOf(getMinimum()).trim().length();
+		return maxChars > minChars ? maxChars : minChars;
+	}
+
+	/**
+	 * Pastes text from clipboard.
+	 * <p>
+	 * The selected text is deleted from the widget and new text inserted from
+	 * the clipboard.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void paste() {
+		boolean isNumber = true;
+		double pasteNumber;
+
+		checkWidget();
+		if ((style & SWT.READ_ONLY) != 0) {
+			return;
+		}
+		String pasteText = QApplication.clipboard().text();
+
+		try {
+			pasteNumber = Double.parseDouble(pasteText);
+		} catch (NumberFormatException e) {
+			isNumber = false;
+			return; // it's not a valid number, so just return and don't paste anything
+		}
+		if (isNumber && pasteNumber <= getMaximum() && pasteNumber >= getMinimum()) {
+			this.selection = Integer.valueOf(QApplication.clipboard().text());
+			((QDoubleSpinBox) getQWidget()).setValue(pasteNumber);
+		}
+	}
+
+	@Override
+	void registerQWidget() {
+		super.registerQWidget();
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the receiver's text is modified.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ModifyListener
+	 * @see #addModifyListener
+	 */
+	public void removeModifyListener(ModifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Modify, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is verified.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see VerifyListener
+	 * @see #addVerifyListener
+	 */
+	void removeVerifyListener(VerifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Verify, listener);
+	}
+
+	/**
+	 * Sets the number of decimal places used by the receiver.
+	 * <p>
+	 * The digit setting is used to allow for floating point values in the
+	 * receiver. For example, to set the selection to a floating point value of
+	 * 1.37 call setDigits() with a value of 2 and setSelection() with a value
+	 * of 137. Similarly, if getDigits() has a value of 2 and getSelection()
+	 * returns 137 this should be interpreted as 1.37. This applies to all
+	 * numeric APIs.
+	 * </p>
+	 * 
+	 * @param value
+	 *            the new digits (must be greater than or equal to zero)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the value is less than
+	 *                zero</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setDigits(int value) {
+		checkWidget();
+		if (value < 0) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (value == this.digits) {
+			return;
+		}
+
+		this.digits = value;
+		((QDoubleSpinBox) getQWidget()).setDecimals(value);
+		((QDoubleSpinBox) getQWidget()).setValue(selection / Math.pow(10, value));
+	}
+
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the
+	 * up/down arrows are pressed to the argument, which must be at least one.
+	 * 
+	 * @param value
+	 *            the new increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setIncrement(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		((QDoubleSpinBox) getQWidget()).setSingleStep(value / Math.pow(10, this.digits));
+	}
+
+	/**
+	 * Sets the maximum value that the receiver will allow. This new value will
+	 * be ignored if it is not greater than the receiver's current minimum
+	 * value. If the new maximum is applied then the receiver's selection value
+	 * will be adjusted if necessary to fall within its new range.
+	 * 
+	 * @param value
+	 *            the new maximum, which must be greater than the current
+	 *            minimum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMaximum(int value) {
+		checkWidget();
+		((QDoubleSpinBox) getQWidget()).setMaximum(value / Math.pow(10, this.digits));
+	}
+
+	/**
+	 * Sets the minimum value that the receiver will allow. This new value will
+	 * be ignored if it is not less than the receiver's current maximum value.
+	 * If the new minimum is applied then the receiver's selection value will be
+	 * adjusted if necessary to fall within its new range.
+	 * 
+	 * @param value
+	 *            the new minimum, which must be less than the current maximum
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMinimum(int value) {
+		checkWidget();
+		((QDoubleSpinBox) getQWidget()).setMinimum(value / Math.pow(10, this.digits));
+	}
+
+	/**
+	 * Sets the amount that the receiver's position will be modified by when the
+	 * page up/down keys are pressed to the argument, which must be at least
+	 * one.
+	 * 
+	 * @param value
+	 *            the page increment (must be greater than zero)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setPageIncrement(int value) {
+		checkWidget();
+		if (value < 1) {
+			return;
+		}
+		pageIncrement = value; // TODO: see bug 160
+	}
+
+	/**
+	 * Sets the <em>selection</em>, which is the receiver's position, to the
+	 * argument. If the argument is not within the range specified by minimum
+	 * and maximum, it will be adjusted to fall within this range.
+	 * 
+	 * @param value
+	 *            the new selection (must be zero or greater)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int value) {
+		checkWidget();
+		this.selection = value;
+		((QDoubleSpinBox) getQWidget()).setDecimals(this.digits);
+		((QDoubleSpinBox) getQWidget()).setValue(value / Math.pow(10, digits));
+
+	}
+
+	/**
+	 * Sets the maximum number of characters that the receiver's text field is
+	 * capable of holding to be the argument.
+	 * <p>
+	 * To reset this value to the default, use
+	 * <code>setTextLimit(Spinner.LIMIT)</code>. Specifying a limit value larger
+	 * than <code>Spinner.LIMIT</code> sets the receiver's limit to
+	 * <code>Spinner.LIMIT</code>.
+	 * </p>
+	 * 
+	 * @param limit
+	 *            new text limit
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #LIMIT
+	 * 
+	 * @since 3.4
+	 */
+	public void setTextLimit(int limit) {
+		checkWidget();
+		if (limit == 0) {
+			error(SWT.ERROR_CANNOT_BE_ZERO);
+		}
+
+		if (limit < 0 || limit > LIMIT) {
+			limit = LIMIT;
+		}
+
+		//TODO setting the text limit to the QDoubleSpinBox
+	}
+
+	/**
+	 * Sets the receiver's selection, minimum value, maximum value, digits,
+	 * increment and page increment all at once.
+	 * <p>
+	 * Note: This is similar to setting the values individually using the
+	 * appropriate methods, but may be implemented in a more efficient fashion
+	 * on some platforms.
+	 * </p>
+	 * 
+	 * @param selection
+	 *            the new selection value
+	 * @param minimum
+	 *            the new minimum value
+	 * @param maximum
+	 *            the new maximum value
+	 * @param digits
+	 *            the new digits value
+	 * @param increment
+	 *            the new increment value
+	 * @param pageIncrement
+	 *            the new pageIncrement value
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setValues(int selection, int minimum, int maximum, int digits, int increment, int pageIncrement) {
+		checkWidget();
+		if (maximum <= minimum) {
+			return;
+		}
+		if (digits < 0) {
+			return;
+		}
+		if (increment < 1) {
+			return;
+		}
+		if (pageIncrement < 1) {
+			return;
+		}
+		this.selection = Math.min(Math.max(minimum, selection), maximum);
+		((QDoubleSpinBox) getQWidget()).setValue(this.selection);
+		setIncrement(increment);
+		this.pageIncrement = pageIncrement;
+		this.digits = digits;
+	}
+
+	String verifyText(String string, int start, int end, Event keyEvent) {
+		//		Event event = new Event();
+		//		event.text = string;
+		//		event.start = start;
+		//		event.end = end;
+		//		if (keyEvent != null) {
+		//			event.character = keyEvent.character;
+		//			event.keyCode = keyEvent.keyCode;
+		//			event.stateMask = keyEvent.stateMask;
+		//		}
+		//		int index = 0;
+		//		if (digits > 0) {
+		//			String decimalSeparator = getDecimalSeparator();
+		//			index = string.indexOf(decimalSeparator);
+		//			if (index != -1) {
+		//				string = string.substring(0, index) + string.substring(index + 1);
+		//			}
+		//			index = 0;
+		//		}
+		//		if (string.length() > 0) {
+		//			int[] min = new int[1];
+		//			OS.SendMessage(hwndUpDown, OS.UDM_GETRANGE32, min, null);
+		//			if (min[0] < 0 && string.charAt(0) == '-')
+		//				index++;
+		//		}
+		//		while (index < string.length()) {
+		//			if (!Character.isDigit(string.charAt(index)))
+		//				break;
+		//			index++;
+		//		}
+		//		event.doit = index == string.length();
+		// if ( !OS.IsUnicode && OS.IsDBLocale ) {
+		// event.start = mbcsToWcsPos( start );
+		// event.end = mbcsToWcsPos( end );
+		// }
+		//		sendEvent(SWT.Verify, event);
+		//		if (!event.doit || isDisposed())
+		return null;
+		//		return event.text;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java
new file mode 100644
index 0000000..90fd790
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabFolder.java	
@@ -0,0 +1,755 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.ArrayList;
+
+import com.trolltech.qt.gui.QTabWidget;
+import com.trolltech.qt.gui.QVBoxLayout;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QSizePolicy.Policy;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class implement the notebook user interface metaphor. It
+ * allows the user to select a notebook page from set of pages.
+ * <p>
+ * The item children that may be added to instances of this class must be of
+ * type <code>TabItem</code>. <code>Control</code> children are created and then
+ * set into a tab item using <code>TabItem#setControl</code>.
+ * </p>
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>, it
+ * does not make sense to set a layout on it.
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>TOP, BOTTOM</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles TOP and BOTTOM may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tabfolder">TabFolder,
+ *      TabItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TabFolder extends Composite {
+	private java.util.List<TabItem> items;
+	private java.util.List<QWidget> tabWidgets;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TabFolder(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state &= ~(CANVAS | THEME_BACKGROUND);
+		items = new ArrayList<TabItem>(4);
+		tabWidgets = new ArrayList<QWidget>(4);
+		return new QTabWidget();
+	}
+
+	@Override
+	protected void connectSignals() {
+		getQTabWidget().currentChanged.connect(this, "selectionEvent(int)");//$NON-NLS-1$
+	}
+
+	QTabWidget getQTabWidget() {
+		return (QTabWidget) getQWidget();
+	}
+
+	protected void selectionEvent(int index) {
+		if (index != -1 && items != null) {
+			TabItem item = getItem(index);
+			Event event = new Event();
+			event.item = item;
+			sendEvent(SWT.Selection, event);
+		}
+	}
+
+	protected void addQChild() {
+		// do nothing
+	}
+
+	static int checkStyle(int style) {
+		style = checkBits(style, SWT.TOP, SWT.BOTTOM, 0, 0, 0, 0);
+
+		/*
+		 * Even though it is legal to create this widget with scroll bars, they
+		 * serve no useful purpose because they do not automatically scroll the
+		 * widget's client area. The fix is to clear the SWT style.
+		 */
+		return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	void createItem(TabItem item, int index) {
+		int count = getQTabWidget().count();
+		if (!(0 <= index && index <= count)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+
+		items.add(index, item);
+
+		QWidget widget = new QWidget();
+		widget.setSizePolicy(Policy.Expanding, Policy.Expanding);
+		widget.setContentsMargins(0, 0, 0, 0);
+		QVBoxLayout layout = new QVBoxLayout();
+		layout.setContentsMargins(0, 0, 0, 0);
+		widget.setLayout(layout);
+
+		tabWidgets.add(index, widget);
+
+		getQTabWidget().insertTab(index, widget, item.getText());
+
+		/*
+		 * Send a selection event when the item that is added becomes the new
+		 * selection. This only happens when the first item is added.
+		 */
+		if (index == 0) {
+			Event event = new Event();
+			event.item = item;
+			sendEvent(SWT.Selection, event);
+		}
+	}
+
+	void updateItem(TabItem item, Control oldControl) {
+		int index = indexOf(item);
+		QWidget container = tabWidgets.get(index);
+
+		if (oldControl != null) {
+			QWidget widget = oldControl.getQMasterWidget();
+			if (widget != null) {
+				container.layout().removeWidget(widget);
+			}
+		}
+
+		Control control = item.getControl();
+		QWidget widget = null;
+		if (control != null) {
+			widget = control.getQMasterWidget();
+		}
+		if (widget == null) {
+			return;
+		}
+		container.layout().addWidget(widget);
+	}
+
+	void destroyItem(TabItem item) {
+		int count = getQTabWidget().count();
+		int index = 0;
+		while (index < count) {
+			if (items.get(index) == item) {
+				break;
+			}
+			index++;
+		}
+		if (index == count) {
+			return;
+		}
+		int selectionIndex = getQTabWidget().currentIndex();
+		items.remove(count);
+		if (count > 0 && index == selectionIndex) {
+			setSelection(Math.max(0, selectionIndex - 1), true);
+		}
+	}
+
+	@Override
+	Control findThemeControl() {
+		/* It is not possible to change the background of this control */
+		return this;
+	}
+
+	@Override
+	public Rectangle getClientArea() {
+		checkWidget();
+		return QtSWTConverter.convert(getQTabWidget().contentsRect());
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's selection, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the item field of the event
+	 * object is valid. <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the user changes
+	 *            the receiver's selection
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TabItem getItem(int index) {
+		checkWidget();
+		int count = getQTabWidget().count();
+		if (!(0 <= index && index < count)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		return items.get(index);
+	}
+
+	/**
+	 * Returns the tab item at the given point in the receiver or null if no
+	 * such item exists. The point is in the coordinate system of the receiver.
+	 * 
+	 * @param point
+	 *            the point used to locate the item
+	 * @return the tab item at the given point, or null if the point is not in a
+	 *         tab item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public TabItem getItem(Point point) {
+		checkWidget();
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		QWidget widget = getQTabWidget().childAt(point.x, point.y);
+		if (widget == null) {
+			return null;
+		}
+		int index = getQTabWidget().indexOf(widget);
+		if (index < 0 || index >= items.size()) {
+			return null;
+		}
+		return items.get(index);
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return getQTabWidget().count();
+	}
+
+	/**
+	 * Returns an array of <code>TabItem</code>s which are the items in the
+	 * receiver.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TabItem[] getItems() {
+		checkWidget();
+		int count = getQTabWidget().count();
+		TabItem[] result = new TabItem[count];
+		System.arraycopy(items, 0, result, 0, count);
+		return result;
+	}
+
+	/**
+	 * Returns an array of <code>TabItem</code>s that are currently selected in
+	 * the receiver. An empty array indicates that no items are selected.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its selection, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return an array representing the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TabItem[] getSelection() {
+		checkWidget();
+		int index = getQTabWidget().currentIndex();
+		if (index == -1) {
+			return new TabItem[0];
+		}
+		return new TabItem[] { items.get(index) };
+	}
+
+	/**
+	 * Returns the zero-relative index of the item which is currently selected
+	 * in the receiver, or -1 if no item is selected.
+	 * 
+	 * @return the index of the selected item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionIndex() {
+		checkWidget();
+		return getQTabWidget().currentIndex();
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item (index 0) until
+	 * an item is found that is equal to the argument, and returns the index of
+	 * that item. If no item is found, returns -1.
+	 * 
+	 * @param item
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(TabItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int count = getQTabWidget().count();
+		for (int i = 0; i < count; i++) {
+			if (items.get(i) == item) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	@Override
+	Point minimumSize(int wHint, int hHint, boolean flushCache) {
+		Control[] children = _getChildren();
+		int width = 0, height = 0;
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			int index = 0;
+			int count = getChildrenCount();
+			while (index < count) {
+				if (items.get(index).control == child) {
+					break;
+				}
+				index++;
+			}
+			if (index == count) {
+				Rectangle rect = child.getBounds();
+				width = Math.max(width, rect.x + rect.width);
+				height = Math.max(height, rect.y + rect.height);
+			} else {
+				Point size = child.computeSize(wHint, hHint, flushCache);
+				width = Math.max(width, size.x);
+				height = Math.max(height, size.y);
+			}
+		}
+		return new Point(width, height);
+	}
+
+	@Override
+	boolean mnemonicHit(char key) {
+		for (int i = 0; i < items.size(); i++) {
+			TabItem item = items.get(i);
+			if (item != null) {
+				char ch = findMnemonic(item.getText());
+				if (Character.toUpperCase(key) == Character.toUpperCase(ch)) {
+					if (forceFocus()) {
+						if (i != getSelectionIndex()) {
+							setSelection(i, true);
+						}
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+	@Override
+	boolean mnemonicMatch(char key) {
+		for (int i = 0; i < items.size(); i++) {
+			TabItem item = items.get(i);
+			if (item != null) {
+				char ch = findMnemonic(item.getText());
+				if (Character.toUpperCase(key) == Character.toUpperCase(ch)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		if (items != null) {
+			int count = getQTabWidget().count();
+			for (int i = 0; i < count; i++) {
+				TabItem item = items.get(i);
+				if (item != null && !item.isDisposed()) {
+					item.release(false);
+				}
+			}
+			items = null;
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void removeControl(Control control) {
+		super.removeControl(control);
+		int count = getQTabWidget().count();
+		for (int i = 0; i < count; i++) {
+			TabItem item = items.get(i);
+			if (item.control == control) {
+				getQTabWidget().removeTab(i);
+				item.setControl(null);
+			}
+		}
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's selection.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Sets the receiver's selection to the given item. The current selected is
+	 * first cleared, then the new item is selected.
+	 * 
+	 * @param item
+	 *            the item to select
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setSelection(TabItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setSelection(new TabItem[] { item });
+	}
+
+	/**
+	 * Sets the receiver's selection to be the given array of items. The current
+	 * selected is first cleared, then the new items are selected.
+	 * 
+	 * @param items
+	 *            the array of items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(TabItem[] items) {
+		checkWidget();
+		if (items == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (items.length == 0) {
+			setSelection(-1, false);
+		} else {
+			for (int i = items.length - 1; i >= 0; --i) {
+				int index = indexOf(items[i]);
+				if (index != -1) {
+					setSelection(index, false);
+				}
+			}
+		}
+	}
+
+	@Override
+	public void setFont(Font font) {
+		checkWidget();
+		Rectangle oldRect = getClientArea();
+		super.setFont(font);
+		Rectangle newRect = getClientArea();
+		if (!oldRect.equals(newRect)) {
+			//sendResize();
+			int index = getQTabWidget().currentIndex();
+			if (index != -1) {
+				TabItem item = items.get(index);
+				Control control = item.control;
+				if (control != null && !control.isDisposed()) {
+					control.setBounds(getClientArea());
+				}
+			}
+		}
+	}
+
+	/**
+	 * Selects the item at the given zero-relative index in the receiver. If the
+	 * item at the index was already selected, it remains selected. The current
+	 * selection is first cleared, then the new items are selected. Indices that
+	 * are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int index) {
+		checkWidget();
+		int count = getQTabWidget().count();
+		if (!(0 <= index && index < count)) {
+			return;
+		}
+		setSelection(index, false);
+	}
+
+	void setSelection(int index, boolean notify) {
+		int oldIndex = getQTabWidget().currentIndex();
+		if (oldIndex == index) {
+			return;
+		}
+		if (oldIndex != -1) {
+			TabItem item = items.get(oldIndex);
+			Control control = item.control;
+			if (control != null && !control.isDisposed()) {
+				control.setVisible(false);
+			}
+		}
+		getQTabWidget().setCurrentIndex(index);
+		int newIndex = getQTabWidget().currentIndex();
+		if (newIndex != -1) {
+			TabItem item = items.get(newIndex);
+			Control control = item.control;
+			if (control != null && !control.isDisposed()) {
+				control.setBounds(getClientArea());
+				control.setVisible(true);
+			}
+			if (notify) {
+				Event event = new Event();
+				event.item = item;
+				sendEvent(SWT.Selection, event);
+			}
+		}
+	}
+
+	@Override
+	boolean traversePage(boolean next) {
+		int count = getItemCount();
+		if (count <= 1) {
+			return false;
+		}
+		int index = getSelectionIndex();
+		if (index == -1) {
+			index = 0;
+		} else {
+			int offset = next ? 1 : -1;
+			index = (index + offset + count) % count;
+		}
+		setSelection(index, true);
+		if (index == getSelectionIndex()) {
+			// TODO
+			//OS.SendMessage(handle, OS.WM_CHANGEUISTATE, OS.UIS_INITIALIZE, 0);
+			return true;
+		}
+		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabItem.java
new file mode 100644
index 0000000..e6a3286
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TabItem.java	
@@ -0,0 +1,389 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * corresponding to a tab for a page in a tab folder.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tabfolder">TabFolder,
+ *      TabItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class TabItem extends Item {
+	TabFolder parent;
+	Control control;
+	private String toolTipText;
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>TabFolder</code>) and a style value describing its behavior and
+	 * appearance. The item is added to the end of the items maintained by its
+	 * parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TabItem(TabFolder parent, int style) {
+		super(parent, style);
+		this.parent = parent;
+		parent.createItem(this, parent.getItemCount());
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>TabFolder</code>), a style value describing its behavior and
+	 * appearance, and the index at which to place it in the items maintained by
+	 * its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TabItem(TabFolder parent, int style, int index) {
+		super(parent, style);
+		this.parent = parent;
+		parent.createItem(this, index);
+	}
+
+	void _setText(int index, String string) {
+		parent.getQTabWidget().setTabText(index, string);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	@Override
+	void destroyWidget() {
+		parent.destroyItem(this);
+		releaseQWidget();
+	}
+
+	/**
+	 * Returns the control that is used to fill the client area of the tab
+	 * folder when the user selects the tab item. If no control has been set,
+	 * return <code>null</code>.
+	 * <p>
+	 * 
+	 * @return the control
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Control getControl() {
+		checkWidget();
+		return control;
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent.
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public Rectangle getBounds() {
+		checkWidget();
+		int index = parent.indexOf(this);
+		if (index == -1 || control == null) {
+			return new Rectangle(0, 0, 0, 0);
+		}
+		return control.getBounds();
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>TabFolder</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TabFolder getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns the receiver's tool tip text, or null if it has not been set.
+	 * 
+	 * @return the receiver's tool tip text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getToolTipText() {
+		checkWidget();
+		return toolTipText;
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		parent = null;
+	}
+
+	@Override
+	void releaseParent() {
+		super.releaseParent();
+		int index = parent.indexOf(this);
+		if (index == parent.getSelectionIndex()) {
+			if (control != null) {
+				control.setVisible(false);
+			}
+		}
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		control = null;
+	}
+
+	/**
+	 * Sets the control that is used to fill the client area of the tab folder
+	 * when the user selects the tab item.
+	 * <p>
+	 * 
+	 * @param control
+	 *            the new control (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the control has been
+	 *                disposed</li> <li>ERROR_INVALID_PARENT - if the control is
+	 *                not in the same widget tree</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setControl(Control control) {
+		checkWidget();
+		if (control != null) {
+			if (control.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (control.parent != parent) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		if (this.control != null && this.control.isDisposed()) {
+			this.control = null;
+		}
+		Control oldControl = this.control, newControl = control;
+		this.control = control;
+		parent.updateItem(this, oldControl);
+		int index = parent.indexOf(this), selectionIndex = parent.getSelectionIndex();
+		if (index != selectionIndex) {
+			if (newControl != null) {
+				if (selectionIndex != -1) {
+					Control selectedControl = parent.getItem(selectionIndex).getControl();
+					if (selectedControl == newControl) {
+						return;
+					}
+				}
+				return;
+			}
+		}
+	}
+
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return;
+		}
+		super.setImage(image);
+		// TODO
+	}
+
+	/**
+	 * Sets the receiver's text. The string may include the mnemonic character.
+	 * </p>
+	 * <p>
+	 * Mnemonics are indicated by an '&' that causes the next character to
+	 * be the mnemonic. When the user presses a key sequence that matches the
+	 * mnemonic, a selection event occurs. On most platforms, the mnemonic
+	 * appears underlined but may be emphasised in a platform specific manner.
+	 * The mnemonic indicator character '&' can be escaped by doubling it in
+	 * the string, causing a single '&' to be displayed.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 */
+	@Override
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (string.equals(text)) {
+			return;
+		}
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return;
+		}
+		super.setText(string);
+		_setText(index, string);
+	}
+
+	/**
+	 * Sets the receiver's tool tip text to the argument, which may be null
+	 * indicating that the default tool tip for the control will be shown. For a
+	 * control that has a default tool tip, such as the Tree control on Windows,
+	 * setting the tool tip text to an empty string replaces the default,
+	 * causing no tool tip text to be shown.
+	 * <p>
+	 * The mnemonic indicator (character '&') is not displayed in a tool
+	 * tip. To display a single '&' in the tool tip, the character '&'
+	 * can be escaped by doubling it in the string.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new tool tip text (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setToolTipText(String string) {
+		checkWidget();
+		toolTipText = string;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Table.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Table.java
new file mode 100644
index 0000000..4783422
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Table.java	
@@ -0,0 +1,2561 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import static com.trolltech.qt.core.Qt.ItemDataRole.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.trolltech.qt.core.QModelIndex;
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.Qt;
+import com.trolltech.qt.core.Qt.AlignmentFlag;
+import com.trolltech.qt.core.Qt.DropActions;
+import com.trolltech.qt.core.Qt.ItemFlag;
+import com.trolltech.qt.core.Qt.ItemFlags;
+import com.trolltech.qt.core.Qt.Orientation;
+import com.trolltech.qt.core.Qt.ScrollBarPolicy;
+import com.trolltech.qt.core.Qt.SortOrder;
+import com.trolltech.qt.gui.QAbstractTableModel;
+import com.trolltech.qt.gui.QBrush;
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDragLeaveEvent;
+import com.trolltech.qt.gui.QDragMoveEvent;
+import com.trolltech.qt.gui.QDropEvent;
+import com.trolltech.qt.gui.QHeaderView;
+import com.trolltech.qt.gui.QItemSelection;
+import com.trolltech.qt.gui.QTableView;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QAbstractItemView.DragDropMode;
+import com.trolltech.qt.gui.QAbstractItemView.EditTrigger;
+import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior;
+import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;
+import com.trolltech.qt.gui.QHeaderView.ResizeMode;
+import com.trolltech.qt.gui.QItemSelectionModel.SelectionFlag;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+import org.eclipse.swt.internal.qt.SignalConnector;
+
+/**
+ * Instances of this class implement a selectable user interface object that
+ * displays a list of images and strings and issues notification when selected.
+ * <p>
+ * The item children that may be added to instances of this class must be of
+ * type <code>TableItem</code>.
+ * </p>
+ * <p>
+ * Style <code>VIRTUAL</code> is used to create a <code>Table</code> whose
+ * <code>TableItem</code>s are to be populated by the client on an on-demand
+ * basis instead of up-front. This can provide significant performance
+ * improvements for tables that are very large or for which
+ * <code>TableItem</code> population is expensive (for example, retrieving
+ * values from an external source).
+ * </p>
+ * <p>
+ * Here is an example of using a <code>Table</code> with style
+ * <code>VIRTUAL</code>: <code><pre>
+ *  final Table table = new Table (parent, SWT.VIRTUAL | SWT.BORDER);
+ *  table.setItemCount (1000000);
+ *  table.addListener (SWT.SetData, new Listener () {
+ *      public void handleEvent (Event event) {
+ *          TableItem item = (TableItem) event.item;
+ *          int index = table.indexOf (item);
+ *          item.setText ("Item " + index);
+ *          System.out.println (item.getText ());
+ *      }
+ *  });
+ * </pre></code>
+ * </p>
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>, it
+ * does not normally make sense to add <code>Control</code> children to it, or
+ * set a layout on it, unless implementing something like a cell editor.
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI, CHECK, FULL_SELECTION, HIDE_SELECTION, VIRTUAL, NO_SCROLL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection, SetData, MeasureItem, EraseItem, PaintItem</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles SINGLE, and MULTI may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem,
+ *      TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Table extends Composite {
+	// aka rows, contains the cells/data
+	TableColumn sortColumn;
+	private int sortDirection;
+	private TableModel model;
+
+	private SignalConnector itemSelectionChanged;
+	private static final int DEFAULT_ITEMHIGHT = 14;
+	private int itemHeight = DEFAULT_ITEMHIGHT;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#SINGLE
+	 * @see SWT#MULTI
+	 * @see SWT#CHECK
+	 * @see SWT#FULL_SELECTION
+	 * @see SWT#HIDE_SELECTION
+	 * @see SWT#VIRTUAL
+	 * @see SWT#NO_SCROLL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Table(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state &= ~(CANVAS | THEME_BACKGROUND);
+
+		QTableView table = new MyQTableWidget();
+		model = new TableModel(isVirtual());
+		table.setModel(model);
+
+		table.verticalHeader().hide();
+		table.horizontalHeader().hide();
+		table.setEditTriggers(EditTrigger.NoEditTriggers);
+		table.setShowGrid(false);
+		table.setWordWrap(false);
+		table.setHorizontalScrollBarPolicy(ScrollBarPolicy.ScrollBarAsNeeded);
+		table.setVerticalScrollBarPolicy(ScrollBarPolicy.ScrollBarAsNeeded);
+		table.horizontalHeader().setResizeMode(ResizeMode.Interactive);
+		table.horizontalHeader().setStretchLastSection(true);
+		table.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft);
+		table.horizontalHeader().setContentsMargins(0, 0, 0, 0);
+		if ((style & SWT.MULTI) != 0) {
+			table.setSelectionMode(SelectionMode.ExtendedSelection);
+		} else {
+			table.setSelectionMode(SelectionMode.SingleSelection);
+		}
+		table.setSelectionBehavior(SelectionBehavior.SelectRows);
+		setQMasterWidget(table);
+		return table.viewport();
+	}
+
+	@Override
+	protected void connectSignals() {
+		itemSelectionChanged = new SignalConnector(getQTableWidget().selectionModel().selectionChanged, this,
+				"qtItemSelectionChangedEvent()").connect(); //$NON-NLS-1$
+	}
+
+	protected void qtItemSelectionChangedEvent() {
+		int selectionIndex = getSelectionIndex();
+		Event event = new Event();
+		event.type = SWT.Selection;
+		if (selectionIndex != -1) {
+			event.item = getItem(selectionIndex);
+		}
+		sendEvent(SWT.Selection, event, true);
+	}
+
+	protected void selectionEvent(QItemSelection selected, QItemSelection deselected) {
+		sendEvent(SWT.Selection);
+	}
+
+	public QTableView getQTableWidget() {
+		return (QTableView) getQMasterWidget();
+	}
+
+	static int checkStyle(int style) {
+		if ((style & SWT.NO_SCROLL) == 0) {
+			style |= SWT.H_SCROLL | SWT.V_SCROLL;
+		}
+		return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+	}
+
+	@Override
+	protected void updateAutoFillBackground() {
+		// nothing
+	}
+
+	@Override
+	protected void updateBackground() {
+		super.updateBackground();
+	}
+
+	@Override
+	void updateBackgroundImage() {
+		//super.updateBackgroundImage();
+	}
+
+	@Override
+	protected Color getDefaultBackgroundColor() {
+		return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+	}
+
+	@Override
+	public void setDragEnabled(boolean enabled) {
+		getQTableWidget().setDragEnabled(enabled);
+	}
+
+	@Override
+	public void setAcceptDrops(boolean accept) {
+		super.setAcceptDrops(accept);
+		getQTableWidget().setDragDropMode(DragDropMode.DragDrop);
+		getQTableWidget().setDropIndicatorShown(true);
+	}
+
+	void addItem(TableItem item, int row) {
+		model.addItem(item, row, false);
+	}
+
+	void removeRow(TableItem row) {
+		model.removeRow(row);
+	}
+
+	void addColumn(TableColumn column, int index) {
+		model.addColumn(column, index);
+	}
+
+	void removeColumn(TableColumn column) {
+		model.removeColumn(column);
+	}
+
+	void rowChanged(TableItem row) {
+		model.rowChanged(row);
+	}
+
+	void cellChanged(TableItem row, int column) {
+		model.cellChanged(row, column);
+	}
+
+	void columnChanged(TableColumn column) {
+		model.columnChanged(column);
+	}
+
+	Rectangle visualRect(TableItem row, int column) {
+		return QtSWTConverter.convert(getQTableWidget().visualRect(model.index(indexOf(row), column)));
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's selection, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the item field of the event
+	 * object is valid. If the receiver has the <code>SWT.CHECK</code> style and
+	 * the check selection changes, the event object detail field contains the
+	 * value <code>SWT.CHECK</code>. <code>widgetDefaultSelected</code> is
+	 * typically called when an item is double-clicked. The item field of the
+	 * event object is valid for default selection, but the detail field is not
+	 * used.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the user changes
+	 *            the receiver's selection
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	boolean checkData(TableItem item, boolean redraw) {
+		if ((style & SWT.VIRTUAL) == 0) {
+			return true;
+		}
+
+		if (!item.cached) {
+			item.cached = true;
+			Event event = new Event();
+			event.item = item;
+			event.index = indexOf(item);
+			sendEvent(SWT.SetData, event);
+			// widget could be disposed at this point
+			if (isDisposed() || item.isDisposed()) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	/**
+	 * Clears the item at the given zero-relative index in the receiver. The
+	 * text, icon and other attributes of the item are set to the default value.
+	 * If the table was created with the <code>SWT.VIRTUAL</code> style, these
+	 * attributes are requested again as needed.
+	 * 
+	 * @param index
+	 *            the index of the item to clear
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.0
+	 */
+	public void clear(int index) {
+		checkWidget();
+		validateItemIndex(index);
+		model.getRow(index).clear();
+	}
+
+	/**
+	 * Removes the items from the receiver which are between the given
+	 * zero-relative start and end indices (inclusive). The text, icon and other
+	 * attributes of the items are set to their default values. If the table was
+	 * created with the <code>SWT.VIRTUAL</code> style, these attributes are
+	 * requested again as needed.
+	 * 
+	 * @param start
+	 *            the start index of the item to clear
+	 * @param end
+	 *            the end index of the item to clear
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if either the start or end are
+	 *                not between 0 and the number of elements in the list minus
+	 *                1 (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.0
+	 */
+	public void clear(int start, int end) {
+		checkWidget();
+		if (start > end) {
+			return;
+		}
+		int count = model.rowCount();
+		if (!(0 <= start && start <= end && end < count)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		if (start == 0 && end == count - 1) {
+			clearAll();
+		}
+		for (int index = start; index < end; index++) {
+			model.getRow(index).clear();
+		}
+	}
+
+	/**
+	 * Clears the items at the given zero-relative indices in the receiver. The
+	 * text, icon and other attributes of the items are set to their default
+	 * values. If the table was created with the <code>SWT.VIRTUAL</code> style,
+	 * these attributes are requested again as needed.
+	 * 
+	 * @param indices
+	 *            the array of indices of the items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.0
+	 */
+	public void clear(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (indices.length == 0) {
+			return;
+		}
+		int count = model.rowCount();
+		for (int i = 0; i < indices.length; i++) {
+			if (!(0 <= indices[i] && indices[i] < count)) {
+				error(SWT.ERROR_INVALID_RANGE);
+			}
+		}
+		for (int index : indices) {
+			model.getRow(index).clear();
+		}
+	}
+
+	/**
+	 * Clears all the items in the receiver. The text, icon and other attributes
+	 * of the items are set to their default values. If the table was created
+	 * with the <code>SWT.VIRTUAL</code> style, these attributes are requested
+	 * again as needed.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.0
+	 */
+	public void clearAll() {
+		checkWidget();
+		model.clearAllItems();
+		//getQTableWidget().clearContents();
+	}
+
+	@Override
+	public void pack() {
+		//		getQTableWidget().resizeColumnsToContents();
+		//		getQTableWidget().resizeRowsToContents();
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		QSize size = getQTableWidget().sizeHint();
+
+		if (getItemCount() > 0) {
+			int width = 0;
+			int height = 0;
+
+			// Checkbox column
+			if ((style & SWT.CHECK) != 0 || (style & SWT.RADIO) != 0) {
+				width += getQTableWidget().columnWidth(0);
+			}
+
+			if (getColumnCount() > 0) {
+				for (int i = 0; i < getColumnCount(); i++) {
+					// if ( getColumn( i ).useFixedWidth ) {
+					// width += getQTableWidget().columnWidth( i );
+					// } else {
+					width += getColumn(i).getPreferredColumnWidth(i);
+					// }
+				}
+			} else { // list mode width +=
+				getQTableWidget().sizeHintForColumn(1);
+			}
+
+			int borderWidth = getBorderWidth();
+			width += 2 * borderWidth;
+			height += 2 * borderWidth;
+			height += getHeaderHeight();
+			int items = getItemCount();
+			height += items * _getItemHeight();
+			size.setWidth(width);
+			size.setHeight(height);
+		}
+
+		return QtSWTConverter.convert(size);
+	}
+
+	/**
+	 * Deselects the items at the given zero-relative indices in the receiver.
+	 * If the item at the given zero-relative index in the receiver is selected,
+	 * it is deselected. If the item at the index was not selected, it remains
+	 * deselected. Indices that are out of range and duplicate indices are
+	 * ignored.
+	 * 
+	 * @param indices
+	 *            the array of indices for the items to deselect
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the set of indices is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselect(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (indices.length == 0) {
+			return;
+		}
+		for (int index : indices) {
+			_select(index, false);
+		}
+	}
+
+	/**
+	 * Deselects the item at the given zero-relative index in the receiver. If
+	 * the item at the index was already deselected, it remains deselected.
+	 * Indices that are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to deselect
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselect(int index) {
+		checkWidget();
+		_select(index, false);
+	}
+
+	/**
+	 * Deselects the items at the given zero-relative indices in the receiver.
+	 * If the item at the given zero-relative index in the receiver is selected,
+	 * it is deselected. If the item at the index was not selected, it remains
+	 * deselected. The range of the indices is inclusive. Indices that are out
+	 * of range are ignored.
+	 * 
+	 * @param start
+	 *            the start index of the items to deselect
+	 * @param end
+	 *            the end index of the items to deselect
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselect(int start, int end) {
+		checkWidget();
+		_select(start, end, false);
+	}
+
+	/**
+	 * Deselects all selected items in the receiver.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselectAll() {
+		checkWidget();
+		itemSelectionChanged.runDisconnected(new Runnable() {
+			public void run() {
+				getQTableWidget().clearSelection();
+			}
+		});
+	}
+
+	/**
+	 * Returns the column at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range. Columns are returned in
+	 * the order that they were created. If no <code>TableColumn</code>s were
+	 * created by the programmer, this method will throw
+	 * <code>ERROR_INVALID_RANGE</code> despite the fact that a single column of
+	 * data may be visible in the table. This occurs when the programmer uses
+	 * the table like a list, adding items but never creating a column.
+	 * 
+	 * @param index
+	 *            the index of the column to return
+	 * @return the column at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#getColumnOrder()
+	 * @see Table#setColumnOrder(int[])
+	 * @see TableColumn#getMoveable()
+	 * @see TableColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 */
+	public TableColumn getColumn(int index) {
+		checkWidget();
+		return model.getColumn(index);
+	}
+
+	/**
+	 * Returns the number of columns contained in the receiver. If no
+	 * <code>TableColumn</code>s were created by the programmer, this value is
+	 * zero, despite the fact that visually, one column of items may be visible.
+	 * This occurs when the programmer uses the table like a list, adding items
+	 * but never creating a column.
+	 * 
+	 * @return the number of columns
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getColumnCount() {
+		checkWidget();
+		return model.columnCount();
+	}
+
+	/**
+	 * Returns an array of zero-relative integers that map the creation order of
+	 * the receiver's items to the order in which they are currently being
+	 * displayed.
+	 * <p>
+	 * Specifically, the indices of the returned array represent the current
+	 * visual order of the items, and the contents of the array represent the
+	 * creation order of the items.
+	 * </p>
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the current visual order of the receiver's items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#setColumnOrder(int[])
+	 * @see TableColumn#getMoveable()
+	 * @see TableColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.1
+	 */
+	public int[] getColumnOrder() {
+		checkWidget();
+		if (model.columnCount() == 0) {
+			return new int[0];
+		}
+		return _getColumnOrder();
+	}
+
+	private int[] _getColumnOrder() {
+		int columnCount = model.columnCount();
+		int[] order = new int[columnCount];
+		QHeaderView header = getQTableWidget().horizontalHeader();
+		for (int i = 0; i < columnCount; i++) {
+			order[i] = header.visualIndex(i);
+		}
+		return order;
+	}
+
+	/**
+	 * Returns an array of <code>TableColumn</code>s which are the columns in
+	 * the receiver. Columns are returned in the order that they were created.
+	 * If no <code>TableColumn</code>s were created by the programmer, the array
+	 * is empty, despite the fact that visually, one column of items may be
+	 * visible. This occurs when the programmer uses the table like a list,
+	 * adding items but never creating a column.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#getColumnOrder()
+	 * @see Table#setColumnOrder(int[])
+	 * @see TableColumn#getMoveable()
+	 * @see TableColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 */
+	public TableColumn[] getColumns() {
+		checkWidget();
+		return model.getColumns();
+	}
+
+	/**
+	 * Returns the width in pixels of a grid line.
+	 * 
+	 * @return the width of a grid line in pixels
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getGridLineWidth() {
+		checkWidget();
+		return getQTableWidget().showGrid() ? 1 : 0;
+	}
+
+	/**
+	 * Returns the height of the receiver's header
+	 * 
+	 * @return the height of the header or zero if the header is not visible
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 */
+	public int getHeaderHeight() {
+		checkWidget();
+		if (getQTableWidget().horizontalHeader().isVisible()) {
+			return getQTableWidget().horizontalHeader().height();
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver's header is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's header's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getHeaderVisible() {
+		checkWidget();
+		return !getQTableWidget().horizontalHeader().isHidden();
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TableItem getItem(int index) {
+		checkWidget();
+		validateItemIndex(index);
+		return model.getRow(index);
+	}
+
+	void validateItemIndex(int index) {
+		if (!(0 <= index && index < model.rowCount())) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+	}
+
+	/**
+	 * Returns the item at the given point in the receiver or null if no such
+	 * item exists. The point is in the coordinate system of the receiver.
+	 * <p>
+	 * The item that is returned represents an item that could be selected by
+	 * the user. For example, if selection only occurs in items in the first
+	 * column, then null is returned if the point is outside of the item. Note
+	 * that the SWT.FULL_SELECTION style hint, which specifies the selection
+	 * policy, determines the extent of the selection.
+	 * </p>
+	 * 
+	 * @param point
+	 *            the point used to locate the item
+	 * @return the item at the given point, or null if the point is not in a
+	 *         selectable item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TableItem getItem(Point point) {
+		checkWidget();
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int row = getQTableWidget().rowAt(point.y);
+		if (row < 0) {
+			return null;
+		}
+		return model.getRow(row);
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return model.rowCount();
+	}
+
+	/**
+	 * Returns the height of the area which would be used to display
+	 * <em>one</em> of the items in the receiver.
+	 * 
+	 * @return the height of one item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemHeight() {
+		checkWidget();
+		return _getItemHeight();
+	}
+
+	int _getItemHeight() {
+		int itemHeight = 0;
+		if (model.rowCount() > 0) {
+			itemHeight = getQTableWidget().rowHeight(0);
+		} else {
+			//			getQTableWidget().insertRow(0);
+			//			itemHeight = getQTableWidget().rowHeight(0);
+			//			getQTableWidget().removeRow(0);
+		}
+		return itemHeight;
+	}
+
+	/**
+	 * Returns a (possibly empty) array of <code>TableItem</code>s which are the
+	 * items in the receiver.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TableItem[] getItems() {
+		checkWidget();
+		return model.getRows();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver's lines are visible, and
+	 * <code>false</code> otherwise. Note that some platforms draw grid lines
+	 * while others may draw alternating row colors.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the visibility state of the lines
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getLinesVisible() {
+		checkWidget();
+		return getQTableWidget().showGrid();
+	}
+
+	/**
+	 * Returns an array of <code>TableItem</code>s that are currently selected
+	 * in the receiver. The order of the items is unspecified. An empty array
+	 * indicates that no items are selected.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its selection, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return an array representing the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TableItem[] getSelection() {
+		checkWidget();
+		List<QModelIndex> selection = getQTableWidget().selectionModel().selectedRows();
+
+		/*
+		 * This is an insert sort for sorting items according to their rows. In
+		 * SWT/Win32 the selection is returned sorted that way.
+		 */
+		for (int i = 0; i < selection.size(); i++) {
+			QModelIndex selectedItem = selection.get(i);
+			int j = i;
+			while (j > 0 && selection.get(j - 1).row() > selectedItem.row()) {
+				selection.set(j, selection.get(j - 1));
+				j = j - 1;
+			}
+			selection.set(j, selectedItem);
+		}
+
+		TableItem items[] = new TableItem[selection.size()];
+		int i = 0;
+		for (QModelIndex index : selection) {
+			items[i++] = model.getRow(index.row());
+		}
+		return items;
+	}
+
+	/**
+	 * Returns the number of selected items contained in the receiver.
+	 * 
+	 * @return the number of selected items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionCount() {
+		checkWidget();
+		return getQTableWidget().selectionModel().selectedRows().size();
+	}
+
+	/**
+	 * Returns the zero-relative index of the item which is currently selected
+	 * in the receiver, or -1 if no item is selected.
+	 * 
+	 * @return the index of the selected item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionIndex() {
+		checkWidget();
+		if (model.rowCount() == 0) {
+			return -1;
+		}
+		//		if (getQTableWidget().selectionModel().hasSelection()) {
+		List<QModelIndex> selectedRows = getQTableWidget().selectionModel().selectedRows();
+		if (selectedRows.size() > 0) {
+			return selectedRows.get(0).row();
+		}
+		//		}
+		return -1;
+	}
+
+	/**
+	 * Returns the zero-relative indices of the items which are currently
+	 * selected in the receiver. The order of the indices is unspecified. The
+	 * array is empty if no items are selected.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its selection, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the array of indices of the selected items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int[] getSelectionIndices() {
+		checkWidget();
+		List<QModelIndex> selectedIndices = getQTableWidget().selectionModel().selectedRows();
+		int[] result = new int[selectedIndices.size()];
+		int i = 0;
+		for (QModelIndex index : selectedIndices) {
+			result[i++] = index.row();
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the column which shows the sort indicator for the receiver. The
+	 * value may be null if no column shows the sort indicator.
+	 * 
+	 * @return the sort indicator
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setSortColumn(TableColumn)
+	 * 
+	 * @since 3.2
+	 */
+	public TableColumn getSortColumn() {
+		checkWidget();
+		return sortColumn;
+	}
+
+	/**
+	 * Returns the direction of the sort indicator for the receiver. The value
+	 * will be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+	 * 
+	 * @return the sort direction
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setSortDirection(int)
+	 * 
+	 * @since 3.2
+	 */
+	public int getSortDirection() {
+		checkWidget();
+		return sortDirection;
+	}
+
+	/**
+	 * Returns the zero-relative index of the item which is currently at the top
+	 * of the receiver. This index can change when items are scrolled or new
+	 * items are added or removed.
+	 * 
+	 * @return the index of the top item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getTopIndex() {
+		checkWidget();
+		return getQTableWidget().rowAt(1);
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first column (index 0) until
+	 * a column is found that is equal to the argument, and returns the index of
+	 * that column. If no column is found, returns -1.
+	 * 
+	 * @param column
+	 *            the search column
+	 * @return the index of the column
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(TableColumn column) {
+		checkWidget();
+		if (column == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return model.indexOf(column);
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item (index 0) until
+	 * an item is found that is equal to the argument, and returns the index of
+	 * that item. If no item is found, returns -1.
+	 * 
+	 * @param item
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(TableItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return model.indexOf(item);
+	}
+
+	boolean isCustomToolTip() {
+		return hooks(SWT.MeasureItem);
+	}
+
+	/**
+	 * Returns <code>true</code> if the item is selected, and <code>false</code>
+	 * otherwise. Indices out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item
+	 * @return the selection state of the item at the index
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean isSelected(int index) {
+		checkWidget();
+		validateItemIndex(index);
+		return model.getRow(index).isSelected();
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		model.release();
+		super.releaseChildren(destroy);
+	}
+
+	/**
+	 * Removes the items from the receiver's list at the given zero-relative
+	 * indices.
+	 * 
+	 * @param indices
+	 *            the array of indices of the items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (indices.length == 0) {
+			return;
+		}
+		model.removeItems(indices);
+	}
+
+	/**
+	 * Removes the item from the receiver at the given zero-relative index.
+	 * 
+	 * @param index
+	 *            the index for the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int index) {
+		checkWidget();
+		validateItemIndex(index);
+		model.removeRowItem(index);
+	}
+
+	/**
+	 * Removes the items from the receiver which are between the given
+	 * zero-relative start and end indices (inclusive).
+	 * 
+	 * @param start
+	 *            the start of the range
+	 * @param end
+	 *            the end of the range
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if either the start or end are
+	 *                not between 0 and the number of elements in the list minus
+	 *                1 (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void remove(int start, int end) {
+		checkWidget();
+		if (start > end) {
+			return;
+		}
+		int count = model.rowCount();
+		if (!(0 <= start && start <= end && end < count)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		if (start == 0 && end == count - 1) {
+			removeAll();
+		} else {
+			for (int index = end; index >= start; index--) {
+				model.removeRowItem(index);
+			}
+		}
+	}
+
+	/**
+	 * Removes all of the items from the receiver.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void removeAll() {
+		checkWidget();
+		model.releaseItems();
+		//		getQTableWidget().clearContents();
+		//		getQTableWidget().setRowCount(0);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's selection.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener(SelectionListener)
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Selects the items at the given zero-relative indices in the receiver. The
+	 * current selection is not cleared before the new items are selected.
+	 * <p>
+	 * If the item at a given index is not selected, it is selected. If the item
+	 * at a given index was already selected, it remains selected. Indices that
+	 * are out of range and duplicate indices are ignored. If the receiver is
+	 * single-select and multiple indices are specified, then all indices are
+	 * ignored.
+	 * </p>
+	 * 
+	 * @param indices
+	 *            the array of indices for the items to select
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#setSelection(int[])
+	 */
+	public void select(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int length = indices.length;
+		if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) {
+			return;
+		}
+		for (int index : indices) {
+			_select(index, true);
+		}
+	}
+
+	/**
+	 * Selects the item at the given zero-relative index in the receiver. If the
+	 * item at the index was already selected, it remains selected. Indices that
+	 * are out of range are ignored.
+	 * 
+	 * @param index
+	 *            the index of the item to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void select(int index) {
+		checkWidget();
+		_select(index, true);
+	}
+
+	void _select(int index, boolean selected) {
+		if (index < 0 || index >= model.rowCount()) {
+			return;
+		}
+		getQTableWidget().selectionModel().select(model.index(index, 0),
+				SelectionFlag.createQFlags(SelectionFlag.Select, SelectionFlag.Rows));
+		model.getRow(index).setSelected(selected);
+	}
+
+	/**
+	 * Selects the items in the range specified by the given zero-relative
+	 * indices in the receiver. The range of indices is inclusive. The current
+	 * selection is not cleared before the new items are selected.
+	 * <p>
+	 * If an item in the given range is not selected, it is selected. If an item
+	 * in the given range was already selected, it remains selected. Indices
+	 * that are out of range are ignored and no items will be selected if start
+	 * is greater than end. If the receiver is single-select and there is more
+	 * than one item in the given range, then all indices are ignored.
+	 * </p>
+	 * 
+	 * @param start
+	 *            the start of the range
+	 * @param end
+	 *            the end of the range
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#setSelection(int,int)
+	 */
+	public void select(int start, int end) {
+		checkWidget();
+		_select(start, end, true);
+	}
+
+	void _select(int start, int end, boolean selected) {
+		if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) {
+			return;
+		}
+		int count = model.rowCount();
+		if (count == 0 || start >= count) {
+			return;
+		}
+		start = Math.max(0, start);
+		end = Math.min(end, count - 1);
+		if (start == 0 && end == count - 1) {
+			if (selected) {
+				selectAll();
+			} else {
+				deselectAll();
+			}
+		} else {
+			for (int index = start; index < end; index++) {
+				_select(index, selected);
+			}
+		}
+	}
+
+	/**
+	 * Selects all of the items in the receiver.
+	 * <p>
+	 * If the receiver is single-select, do nothing.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void selectAll() {
+		checkWidget();
+		if ((style & SWT.SINGLE) != 0) {
+			return;
+		}
+		getQTableWidget().selectAll();
+	}
+
+	/**
+	 * Sets the order that the items in the receiver should be displayed in to
+	 * the given argument which is described in terms of the zero-relative
+	 * ordering of when the items were added.
+	 * 
+	 * @param order
+	 *            the new order to display the items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item order is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item order is not the
+	 *                same length as the number of items</li>
+	 *                </ul>
+	 * 
+	 * @see Table#getColumnOrder()
+	 * @see TableColumn#getMoveable()
+	 * @see TableColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.1
+	 */
+	public void setColumnOrder(int[] order) {
+		checkWidget();
+		if (validateColumnOrder(order)) {
+			int columnCount = getColumnCount();
+			QHeaderView header = getQTableWidget().horizontalHeader();
+			for (int i = 0; i < columnCount; i++) {
+				int visualIndex = header.visualIndex(i);
+				header.moveSection(visualIndex, order[i]);
+			}
+		}
+	}
+
+	private boolean validateColumnOrder(int[] order) {
+		if (order == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int columnCount = model.columnCount();
+		if (columnCount == 0) {
+			if (order.length != 0) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			return false;
+		}
+		if (order.length != columnCount) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int[] oldOrder = _getColumnOrder();
+
+		boolean reorder = false;
+		boolean[] seen = new boolean[columnCount];
+		for (int i = 0; i < order.length; i++) {
+			int index = order[i];
+			if (index < 0 || index >= columnCount) {
+				error(SWT.ERROR_INVALID_RANGE);
+			}
+			if (seen[index]) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			seen[index] = true;
+			if (index != oldOrder[i]) {
+				reorder = true;
+			}
+		}
+		return reorder;
+	}
+
+	/**
+	 * Marks the receiver's header as visible if the argument is
+	 * <code>true</code>, and marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param show
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setHeaderVisible(boolean show) {
+		checkWidget();
+		if (show) {
+			getQTableWidget().horizontalHeader().show();
+		} else {
+			getQTableWidget().horizontalHeader().hide();
+		}
+	}
+
+	/**
+	 * Sets the number of items contained in the receiver.
+	 * 
+	 * @param count
+	 *            the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setItemCount(int count) {
+		checkWidget();
+		model.setItemCount(count);
+	}
+
+	/**
+	 * @return true if Table was created with SWT.VIRTUAL style
+	 */
+	boolean isVirtual() {
+		return (style & SWT.VIRTUAL) != 0;
+	}
+
+	/**
+	 * Sets the height of the area which would be used to display <em>one</em>
+	 * of the items in the table.
+	 * 
+	 * @param itemHeight
+	 *            the height of one item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	/* public */void setItemHeight(int itemHeight) {
+		checkWidget();
+		if (itemHeight < -1) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.itemHeight = itemHeight;
+		int rows = model.rowCount();
+		for (int row = 0; row < rows; row++) {
+			getQTableWidget().setRowHeight(row, itemHeight);
+		}
+	}
+
+	/**
+	 * Marks the receiver's lines as visible if the argument is
+	 * <code>true</code>, and marks it invisible otherwise. Note that some
+	 * platforms draw grid lines while others may draw alternating row colors.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param show
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLinesVisible(boolean show) {
+		checkWidget();
+		getQTableWidget().setShowGrid(show);
+	}
+
+	/**
+	 * Selects the items at the given zero-relative indices in the receiver. The
+	 * current selection is cleared before the new items are selected.
+	 * <p>
+	 * Indices that are out of range and duplicate indices are ignored. If the
+	 * receiver is single-select and multiple indices are specified, then all
+	 * indices are ignored.
+	 * </p>
+	 * 
+	 * @param indices
+	 *            the indices of the items to select
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#deselectAll()
+	 * @see Table#select(int[])
+	 */
+	public void setSelection(int[] indices) {
+		checkWidget();
+		if (indices == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		deselectAll();
+		int length = indices.length;
+		if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) {
+			return;
+		}
+		select(indices);
+		showSelection();
+	}
+
+	/**
+	 * Sets the receiver's selection to the given item. The current selection is
+	 * cleared before the new item is selected.
+	 * <p>
+	 * If the item is not in the receiver, then it is ignored.
+	 * </p>
+	 * 
+	 * @param item
+	 *            the item to select
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setSelection(TableItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setSelection(new TableItem[] { item });
+	}
+
+	/**
+	 * Sets the receiver's selection to be the given array of items. The current
+	 * selection is cleared before the new items are selected.
+	 * <p>
+	 * Items that are not in the receiver are ignored. If the receiver is
+	 * single-select and multiple items are specified, then all items are
+	 * ignored.
+	 * </p>
+	 * 
+	 * @param items
+	 *            the array of items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if one of the items has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#deselectAll()
+	 * @see Table#select(int[])
+	 * @see Table#setSelection(int[])
+	 */
+	public void setSelection(TableItem[] items) {
+		checkWidget();
+		if (items == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		deselectAll();
+		int length = items.length;
+		if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) {
+			return;
+		}
+		for (int i = length - 1; i >= 0; --i) {
+			int index = indexOf(items[i]);
+			if (index != -1) {
+				select(index);
+			}
+		}
+		showSelection();
+	}
+
+	/**
+	 * Selects the item at the given zero-relative index in the receiver. The
+	 * current selection is first cleared, then the new item is selected.
+	 * 
+	 * @param index
+	 *            the index of the item to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#deselectAll()
+	 * @see Table#select(int)
+	 */
+	public void setSelection(int index) {
+		checkWidget();
+		deselectAll();
+		select(index);
+		showSelection();
+	}
+
+	/**
+	 * Selects the items in the range specified by the given zero-relative
+	 * indices in the receiver. The range of indices is inclusive. The current
+	 * selection is cleared before the new items are selected.
+	 * <p>
+	 * Indices that are out of range are ignored and no items will be selected
+	 * if start is greater than end. If the receiver is single-select and there
+	 * is more than one item in the given range, then all indices are ignored.
+	 * </p>
+	 * 
+	 * @param start
+	 *            the start index of the items to select
+	 * @param end
+	 *            the end index of the items to select
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#deselectAll()
+	 * @see Table#select(int,int)
+	 */
+	public void setSelection(int start, int end) {
+		checkWidget();
+		deselectAll();
+		if (end < 0 || start > end || (style & SWT.SINGLE) != 0 && start != end) {
+			return;
+		}
+		int count = model.rowCount();
+		if (count == 0 || start >= count) {
+			return;
+		}
+		start = Math.max(0, start);
+		end = Math.min(end, count - 1);
+		select(start, end);
+		showSelection();
+	}
+
+	/**
+	 * Sets the column used by the sort indicator for the receiver. A null value
+	 * will clear the sort indicator. The current sort column is cleared before
+	 * the new column is set.
+	 * 
+	 * @param column
+	 *            the column used by the sort indicator or <code>null</code>
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the column is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setSortColumn(TableColumn column) {
+		checkWidget();
+		if (column != null && column.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		sortColumn = column;
+		if (sortColumn != null && sortDirection != SWT.NONE) {
+			getQTableWidget().sortByColumn(column.getColumn(), getSortOrder());
+		}
+	}
+
+	private SortOrder getSortOrder() {
+		if ((sortDirection & SWT.UP) != 0) {
+			return SortOrder.AscendingOrder;
+		}
+		return SortOrder.DescendingOrder;
+	}
+
+	/**
+	 * Sets the direction of the sort indicator for the receiver. The value can
+	 * be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+	 * 
+	 * @param direction
+	 *            the direction of the sort indicator
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setSortDirection(int direction) {
+		checkWidget();
+		if ((direction & (SWT.UP | SWT.DOWN)) == 0 && direction != SWT.NONE) {
+			return;
+		}
+		sortDirection = direction;
+		if (sortColumn != null && !sortColumn.isDisposed()) {
+			getQTableWidget().sortByColumn(sortColumn.getColumn(), getSortOrder());
+		}
+	}
+
+	/**
+	 * Sets the zero-relative index of the item which is currently at the top of
+	 * the receiver. This index can change when items are scrolled or new items
+	 * are added and removed.
+	 * 
+	 * @param index
+	 *            the index of the top item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setTopIndex(int index) {
+		checkWidget();
+		if (!(0 <= index && index < model.rowCount())) {
+			return;
+		}
+		//		int currentColumn = getQTableWidget().currentColumn();
+		//		QTableWidgetItem item = model.getItem(index).getCellItem(currentColumn);
+		//		getQTableWidget().scrollToItem(item, ScrollHint.PositionAtTop);
+	}
+
+	/**
+	 * Shows the column. If the column is already showing in the receiver, this
+	 * method simply returns. Otherwise, the columns are scrolled until the
+	 * column is visible.
+	 * 
+	 * @param column
+	 *            the column to be shown
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the column has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void showColumn(TableColumn column) {
+		checkWidget();
+		if (column == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (column.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (column.getParent() != this) {
+			return;
+		}
+		if (model.rowCount() == 0) {
+			return;
+		}
+		QModelIndex index = getQTableWidget().currentIndex();
+		getQTableWidget().scrollTo(model.index(index.row(), model.indexOf(column)));
+	}
+
+	/**
+	 * Shows the item. If the item is already showing in the receiver, this
+	 * method simply returns. Otherwise, the items are scrolled until the item
+	 * is visible.
+	 * 
+	 * @param item
+	 *            the item to be shown
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#showSelection()
+	 */
+	public void showItem(TableItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int index = indexOf(item);
+		if (index != -1) {
+			showItem(index, 0);
+		}
+	}
+
+	void showItem(int row, int col) {
+		getQTableWidget().scrollTo(model.index(row, col));
+	}
+
+	/**
+	 * Shows the selection. If the selection is already showing in the receiver,
+	 * this method simply returns. Otherwise, the items are scrolled until the
+	 * selection is visible.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#showItem(TableItem)
+	 */
+	public void showSelection() {
+		checkWidget();
+		getQTableWidget().scrollTo(getQTableWidget().selectionModel().currentIndex());
+	}
+
+	void update(boolean all) {
+		getQTableWidget().update();
+	}
+
+	private final class MyQTableWidget extends QTableView {
+
+		@Override
+		protected void startDrag(DropActions supportedActions) {
+			//			System.out.println("MyQTreeWidget.startDrag: " + supportedActions);
+		}
+
+		@Override
+		protected void dropEvent(QDropEvent event) {
+			sendDropEvent(event);
+		}
+
+		@Override
+		protected void dragMoveEvent(QDragMoveEvent event) {
+			sendDragMoveEvent(event);
+		}
+
+		@Override
+		protected void dragEnterEvent(QDragEnterEvent event) {
+			sendDragEnterEvent(event);
+		}
+
+		@Override
+		protected void dragLeaveEvent(QDragLeaveEvent event) {
+			sendDragLeaveEvent(event);
+		}
+
+	}
+
+	final class TableModel extends QAbstractTableModel {
+		private ArrayList<TableItem> rows;
+		private List<TableColumn> columns;
+		private final boolean virtual;
+
+		TableModel(boolean virtual) {
+			this.virtual = virtual;
+			init();
+		}
+
+		public void init() {
+			rows = new ArrayList<TableItem>(4);
+			columns = new ArrayList<TableColumn>(4);
+		}
+
+		@Override
+		public Object data(QModelIndex index, int role) {
+			int row = index.row();
+			int column = index.column();
+			TableItem rowItem = getRow(row);
+			switch (role) {
+			case DisplayRole:
+				return rowItem.getText(column);
+			case CheckStateRole:
+				if ((style & SWT.CHECK) != 0 && column == 0) {
+					return rowItem.getChecked();
+				}
+				break;
+			case DecorationRole:
+				Image img = rowItem.getImage(column);
+				if (img != null) {
+					return img.getQPixmap();
+				}
+				break;
+			case BackgroundRole: {
+				Color color = rowItem.getBackground(column);
+				if (color != null) {
+					return new QBrush(color.getColor());
+				}
+				break;
+			}
+			case ForegroundRole: {
+				Color color = rowItem.getForeground(column);
+				if (color != null) {
+					return new QBrush(color.getColor());
+				}
+				break;
+			}
+			}
+			return null;
+		}
+
+		@Override
+		public boolean setData(QModelIndex index, Object value, int role) {
+			if (role == CheckStateRole) {
+				getRow(index.row()).setChecked(((Boolean) value).booleanValue());
+				dataChanged.emit(index, index);
+				return true;
+			}
+			return super.setData(index, value, role);
+		}
+
+		@Override
+		public ItemFlags flags(QModelIndex index) {
+			int column = index.column();
+			if ((style & SWT.CHECK) != 0 && column == 0) {
+				return new ItemFlags(new ItemFlag[] { ItemFlag.ItemIsSelectable, ItemFlag.ItemIsEditable,
+						ItemFlag.ItemIsEnabled, ItemFlag.ItemIsUserCheckable });
+			}
+			return super.flags(index);
+		}
+
+		@Override
+		public int rowCount(QModelIndex index) {
+			return rows.size();
+		}
+
+		void setItemCount(int count) {
+			count = Math.max(0, count);
+			if (count < rows.size()) {
+				beginRemoveRows(null, rows.size(), count - 1);
+				for (int i = rows.size() - 1; i >= count; i--) {
+					TableItem row = rows.remove(i);
+					row.release(false);
+				}
+				endRemoveRows();
+			} else {
+				beginInsertRows(null, rows.size(), count - 1);
+				rows.ensureCapacity(count);
+				boolean virtual = isVirtual();
+				for (int i = rows.size(); i < count; i++) {
+					if (virtual) {
+						rows.add(null);
+					} else {
+						rows.add(new TableItem(Table.this, SWT.NONE, i));
+					}
+				}
+				endInsertRows();
+			}
+		}
+
+		TableItem getRow(int index) {
+			TableItem item = rows.get(index);
+			if (item != null) {
+				return item;
+			}
+			if (!virtual) {
+				return null;
+			}
+			item = new TableItem(Table.this, SWT.NONE, index, false);
+			addItem(item, index, true);
+			return item;
+		}
+
+		public TableItem[] getRows() {
+			TableItem[] out = new TableItem[rows.size()];
+			if (virtual) {
+				int count = out.length;
+				for (int i = 0; i < count; i++) {
+					out[i] = getRow(i);
+				}
+			} else {
+				rows.toArray(out);
+			}
+			return out;
+		}
+
+		int indexOf(TableItem row) {
+			return rows.indexOf(row);
+		}
+
+		void addItem(TableItem rowItem, int row, boolean update) {
+			beginInsertRows(null, row, row);
+			// if we add items then we need an first column to hold them
+			if (columns.size() == 0) {
+				new TableColumn(Table.this, SWT.NONE);
+			}
+			if (update) {
+				rows.set(row, rowItem);
+			} else {
+				if (row == rows.size()) {
+					rows.add(rowItem);
+				} else {
+					rows.add(row, rowItem);
+				}
+			}
+			endInsertRows();
+			getQTableWidget().setRowHeight(row, itemHeight);
+		}
+
+		void cellChanged(TableItem rowItem, int column) {
+			int row = indexOf(rowItem);
+			QModelIndex index = index(row, column);
+			dataChanged.emit(index, index);
+		}
+
+		void rowChanged(TableItem rowItem) {
+			int row = indexOf(rowItem);
+			dataChanged.emit(index(row, 0), index(row, columns.size() - 1));
+		}
+
+		void removeRow(TableItem row) {
+			removeRowItem(rows.indexOf(row));
+		}
+
+		void removeRowItem(int index) {
+			if (index != -1) {
+				beginRemoveRows(null, index, index);
+				TableItem item = rows.remove(index);
+				if (item != null && !item.isDisposed()) {
+					item.release(false);
+				}
+				endRemoveRows();
+			}
+		}
+
+		void removeItems(int[] indices) {
+			int[] newIndices = new int[indices.length];
+			System.arraycopy(indices, 0, newIndices, 0, indices.length);
+			Arrays.sort(newIndices);
+			for (int i = indices.length - 1; i >= 0; i--) {
+				validateItemIndex(indices[i]);
+				removeRowItem(indices[i]);
+			}
+		}
+
+		void clearAllItems() {
+			for (TableItem item : rows) {
+				if (item != null) {
+					item.clear();
+				}
+			}
+		}
+
+		@Override
+		public int columnCount(QModelIndex index) {
+			return columns.size();
+		}
+
+		TableColumn getColumn(int index) {
+			validateColumnIndex(index);
+			return columns.get(index);
+		}
+
+		int indexOf(TableColumn column) {
+			return columns.indexOf(column);
+		}
+
+		private void validateColumnIndex(int index) {
+			if (!(0 <= index && index < columnCount())) {
+				error(SWT.ERROR_INVALID_RANGE);
+			}
+		}
+
+		void addColumn(TableColumn column, int index) {
+			if (!(0 <= index && index <= columnCount())) {
+				error(SWT.ERROR_INVALID_RANGE);
+			}
+			beginInsertColumns(null, index, index);
+			if (index == columns.size()) {
+				columns.add(column);
+			} else {
+				columns.add(index, column);
+			}
+			int columnCount = columns.size();
+			for (TableItem item : rows) {
+				if (item != null) {
+					item.addColumn(index, columnCount);
+				}
+			}
+			endInsertColumns();
+		}
+
+		void removeColumn(TableColumn column) {
+			int index = columns.indexOf(column);
+			if (index == -1) {
+				return;
+			}
+			beginRemoveColumns(null, index, index);
+			int columnCount = columnCount();
+			columns.remove(column);
+			for (TableItem item : rows) {
+				if (item != null) {
+					item.removeColumn(index, columnCount);
+				}
+			}
+			endRemoveColumns();
+		}
+
+		TableColumn[] getColumns() {
+			TableColumn[] out = new TableColumn[columns.size()];
+			return columns.toArray(out);
+		}
+
+		void release() {
+			releaseItems();
+			releaseColumns();
+		}
+
+		private void releaseItems() {
+			beginRemoveRows(null, 0, rows.size() - 1);
+			for (TableItem item : rows) {
+				if (item != null && !item.isDisposed()) {
+					item.release(false);
+				}
+			}
+			rows.clear();
+			endRemoveRows();
+		}
+
+		private void releaseColumns() {
+			beginRemoveColumns(null, 0, columns.size() - 1);
+			for (TableColumn column : columns) {
+				if (!column.isDisposed()) {
+					column.release(false);
+				}
+			}
+			columns.clear();
+			endRemoveColumns();
+		}
+
+		@Override
+		public Object headerData(int index, Orientation orientation, int role) {
+			if (index >= columns.size()) {
+				return null;
+			}
+			switch (role) {
+			case DisplayRole:
+				return columnText(index);
+			case ToolTipRole:
+				return columnTooltip(index);
+			case TextAlignmentRole:
+				return columnAlignment(index);
+			}
+			return null;
+		}
+
+		private Object columnAlignment(int index) {
+			int alignment = columns.get(index).getAlignment();
+			switch (alignment) {
+			case SWT.LEFT:
+				return AlignmentFlag.AlignLeft;
+			case SWT.CENTER:
+				return AlignmentFlag.AlignCenter;
+			case SWT.RIGHT:
+				return AlignmentFlag.AlignRight;
+			}
+			return null;
+		}
+
+		private Object columnText(int index) {
+			return columns.get(index).getText();
+		}
+
+		private Object columnTooltip(int index) {
+			return columns.get(index).getToolTipText();
+		}
+
+		void columnChanged(TableColumn column) {
+			int index = indexOf(column);
+			columnChanged(index, index);
+		}
+
+		void columnChanged(int from, int to) {
+			headerDataChanged.emit(Orientation.Horizontal, from, to);
+		}
+
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableColumn.java
new file mode 100644
index 0000000..84e2e3d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableColumn.java	
@@ -0,0 +1,664 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.gui.QTableView;
+import com.trolltech.qt.gui.QHeaderView.ResizeMode;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Instances of this class represent a column in a table widget.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Move, Resize, Selection</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem,
+ *      TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TableColumn extends Item {
+	private Table parent;
+	private boolean resizable, moveable;
+	private String tooltip;
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Table</code>) and a style value describing its behavior and
+	 * appearance. The item is added to the end of the items maintained by its
+	 * parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#CENTER
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TableColumn(Table parent, int style) {
+		this(parent, style, parent.getColumnCount());
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Table</code>), a style value describing its behavior and
+	 * appearance, and the index at which to place it in the items maintained by
+	 * its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * Note that due to a restriction on some platforms, the first column is
+	 * always left aligned.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#CENTER
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TableColumn(Table parent, int style, int index) {
+		super(parent, checkStyle(style));
+		resizable = true;
+		this.parent = parent;
+		parent.addColumn(this, index);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is moved or resized, by sending it one of the messages
+	 * defined in the <code>ControlListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #removeControlListener
+	 */
+	public void addControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Resize, typedListener);
+		addListener(SWT.Move, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the column header is selected.
+	 * <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the control is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	QTableView getQTableView() {
+		return parent.getQTableWidget();
+	}
+
+	int getColumn() {
+		return parent.indexOf(this);
+	}
+
+	@Override
+	void destroyWidget() {
+		parent.removeColumn(this);
+		releaseQWidget();
+	}
+
+	/**
+	 * Returns a value which describes the position of the text or image in the
+	 * receiver. The value will be one of <code>LEFT</code>, <code>RIGHT</code>
+	 * or <code>CENTER</code>.
+	 * 
+	 * @return the alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getAlignment() {
+		checkWidget();
+		if ((style & SWT.LEFT) != 0) {
+			return SWT.LEFT;
+		}
+		if ((style & SWT.CENTER) != 0) {
+			return SWT.CENTER;
+		}
+		if ((style & SWT.RIGHT) != 0) {
+			return SWT.RIGHT;
+		}
+		return SWT.LEFT;
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Table</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Table getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Gets the moveable attribute. A column that is not moveable cannot be
+	 * reordered by the user by dragging the header but may be reordered by the
+	 * programmer.
+	 * 
+	 * @return the moveable attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#getColumnOrder()
+	 * @see Table#setColumnOrder(int[])
+	 * @see TableColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.1
+	 */
+	public boolean getMoveable() {
+		checkWidget();
+		return moveable;
+	}
+
+	/**
+	 * Gets the resizable attribute. A column that is not resizable cannot be
+	 * dragged by the user but may be resized by the programmer.
+	 * 
+	 * @return the resizable attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getResizable() {
+		checkWidget();
+		return resizable;
+	}
+
+	protected int getPreferredColumnWidth(int index) {
+		if (index != -1) {
+			int width = getQTableView().sizeHintForColumn(index);
+			if (parent.getHeaderVisible()) {
+				width = Math.max(width, getQTableView().horizontalHeader().sectionSizeHint(index));
+			}
+			return width;
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns the receiver's tool tip text, or null if it has not been set.
+	 * 
+	 * @return the receiver's tool tip text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public String getToolTipText() {
+		checkWidget();
+		return this.tooltip;
+	}
+
+	/**
+	 * Gets the width of the receiver.
+	 * 
+	 * @return the width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getWidth() {
+		checkWidget();
+		int index = getColumn();
+		if (index == -1) {
+			return 0;
+		}
+		return getQTableView().columnWidth(index);
+	}
+
+	/**
+	 * Causes the receiver to be resized to its preferred size. For a composite,
+	 * this involves computing the preferred size from its layout, if there is
+	 * one.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 */
+	public void pack() {
+		checkWidget();
+		getQTableView().resizeColumnToContents(getColumn());
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		parent = null;
+	}
+
+	@Override
+	void releaseParent() {
+		super.releaseParent();
+		if (parent.sortColumn == this) {
+			parent.sortColumn = null;
+		}
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is moved or resized.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #addControlListener
+	 */
+	public void removeControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Move, listener);
+		eventTable.unhook(SWT.Resize, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Controls how text and images will be displayed in the receiver. The
+	 * argument should be one of <code>LEFT</code>, <code>RIGHT</code> or
+	 * <code>CENTER</code>.
+	 * <p>
+	 * Note that due to a restriction on some platforms, the first column is
+	 * always left aligned.
+	 * </p>
+	 * 
+	 * @param alignment
+	 *            the new alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setAlignment(int alignment) {
+		checkWidget();
+		if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) {
+			return;
+		}
+		style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+		style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+		parent.columnChanged(this);
+	}
+
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		super.setImage(image);
+		parent.columnChanged(this);
+	}
+
+	/**
+	 * Sets the moveable attribute. A column that is moveable can be reordered
+	 * by the user by dragging the header. A column that is not moveable cannot
+	 * be dragged by the user but may be reordered by the programmer.
+	 * 
+	 * @param moveable
+	 *            the moveable attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Table#setColumnOrder(int[])
+	 * @see Table#getColumnOrder()
+	 * @see TableColumn#getMoveable()
+	 * @see SWT#Move
+	 * 
+	 * @since 3.1
+	 */
+	public void setMoveable(boolean moveable) {
+		checkWidget();
+		this.moveable = moveable;
+		// TODO how to it for single column?
+		getQTableView().horizontalHeader().setMovable(moveable);
+	}
+
+	/**
+	 * Sets the resizable attribute. A column that is resizable can be resized
+	 * by the user dragging the edge of the header. A column that is not
+	 * resizable cannot be dragged by the user but may be resized by the
+	 * programmer.
+	 * 
+	 * @param resizable
+	 *            the resize attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setResizable(boolean resizable) {
+		checkWidget();
+		this.resizable = resizable;
+		ResizeMode resizeMode = resizable ? ResizeMode.Interactive : ResizeMode.Fixed;
+		int col = getColumn();
+		if (col != -1) {
+			getQTableView().horizontalHeader().setResizeMode(col, resizeMode);
+		}
+	}
+
+	@Override
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (string.equals(text)) {
+			return;
+		}
+		super.setText(string);
+		parent.columnChanged(this);
+	}
+
+	/**
+	 * Sets the receiver's tool tip text to the argument, which may be null
+	 * indicating that the default tool tip for the control will be shown. For a
+	 * control that has a default tool tip, such as the Tree control on Windows,
+	 * setting the tool tip text to an empty string replaces the default,
+	 * causing no tool tip text to be shown.
+	 * <p>
+	 * The mnemonic indicator (character '&') is not displayed in a tool
+	 * tip. To display a single '&' in the tool tip, the character '&'
+	 * can be escaped by doubling it in the string.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new tool tip text (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setToolTipText(String string) {
+		checkWidget();
+		this.tooltip = string;
+		parent.columnChanged(this);
+	}
+
+	/**
+	 * Sets the width of the receiver.
+	 * 
+	 * @param width
+	 *            the new width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setWidth(int width) {
+		checkWidget();
+		if (width < 0) {
+			return;
+		}
+		int index = getColumn();
+		if (index == -1) {
+			return;
+		}
+		getQTableView().setColumnWidth(index, width);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableItem.java
new file mode 100644
index 0000000..fc27cd1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TableItem.java	
@@ -0,0 +1,1441 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.Qt.FocusPolicy;
+import com.trolltech.qt.gui.QRadioButton;
+import com.trolltech.qt.gui.QTableView;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * represents an item in a table.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem,
+ *      TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class TableItem extends Item {
+	Table parent;
+	String[] strings;
+	Image[] images;
+	Font font;
+	Font[] cellFont;
+	boolean checked, grayed, cached;
+	int imageIndent;
+	Color background;
+	Color foreground;
+	int[] cellBackground, cellForeground;
+	private QRadioButton radioButton;
+	private boolean selected;
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Table</code>) and a style value describing its behavior and
+	 * appearance. The item is added to the end of the items maintained by its
+	 * parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TableItem(Table parent, int style) {
+		this(parent, style, checkNull(parent).getItemCount(), true);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Table</code>), a style value describing its behavior and
+	 * appearance, and the index at which to place it in the items maintained by
+	 * its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TableItem(Table parent, int style, int index) {
+		this(parent, style, index, true);
+	}
+
+	TableItem(Table parent, int style, int index, boolean create) {
+		super(parent, style);
+		this.parent = parent;
+		if (create) {
+			parent.addItem(this, index);
+			updateCheckAndRadioPropertyForRow(index);
+		}
+		setText(index, "");//$NON-NLS-1$
+	}
+
+	private void updateCheckAndRadioPropertyForRow(int row) {
+		if (radioButton == null && (parent.style & SWT.RADIO) != 0 && (parent.style & SWT.SINGLE) != 0) {
+			//TODO
+			radioButton = new QRadioButton();
+			radioButton.released.connect(this, "radioButtonClickEvent()");//$NON-NLS-1$
+			radioButton.setFocusPolicy(FocusPolicy.NoFocus);
+			//getQTableWidget().setCellWidget(row, 0, radioButton);
+		}
+	}
+
+	protected void radioButtonClickEvent() {
+		sendEvent(SWT.Selection);
+	}
+
+	static Table checkNull(Table control) {
+		if (control == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return control;
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	QTableView getQTableWidget() {
+		return parent.getQTableWidget();
+	}
+
+	//	int getRow() {
+	//		return parent.indexOf(this);
+	//	}
+
+	void clear() {
+		text = "";//$NON-NLS-1$
+		image = null;
+		font = null;
+		strings = null;
+		images = null;
+		imageIndent = 0;
+		checked = grayed = false;
+		if (background != null) {
+			background.dispose();
+			background = null;
+		}
+		if (foreground != null) {
+			foreground.dispose();
+			foreground = null;
+		}
+		cellFont = null;
+		cellBackground = cellForeground = null;
+		if (parent.isVirtual()) {
+			cached = false;
+		}
+	}
+
+	@Override
+	void destroyWidget() {
+		parent.removeRow(this);
+		releaseQWidget();
+	}
+
+	/**
+	 * Returns the receiver's background color.
+	 * 
+	 * @return the background color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 */
+	public Color getBackground() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if (background == null) {
+			return parent.getBackground();
+		}
+		return background;
+	}
+
+	/**
+	 * Returns the background color at the given column index in the receiver.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the background color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Color getBackground(int index) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return getBackground();
+		}
+		int pixel = cellBackground != null ? cellBackground[index] : -1;
+		return pixel == -1 ? getBackground() : Color.qt_new(display, pixel);
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent.
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public Rectangle getBounds() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return getBounds(0);
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent at a column in the table.
+	 * 
+	 * @param column
+	 *            the index that specifies the column
+	 * @return the receiver's bounding column rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Rectangle getBounds(int column) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+
+		if (column < 0 || column >= parent.getItemCount()) {
+			return new Rectangle(0, 0, 0, 0);
+		}
+		return parent.visualRect(this, column);
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is checked, and false
+	 * otherwise. When the parent does not have the <code>CHECK</code> style,
+	 * return false.
+	 * 
+	 * @return the checked state of the checkbox
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getChecked() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if ((parent.style & SWT.CHECK) == 0) {
+			return false;
+		}
+		return checked;
+	}
+
+	/**
+	 * Returns the font that the receiver will use to paint textual information
+	 * for this item.
+	 * 
+	 * @return the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Font getFont() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return font != null ? font : parent.getFont();
+	}
+
+	/**
+	 * Returns the font that the receiver will use to paint textual information
+	 * for the specified cell in this item.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Font getFont(int index) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return getFont();
+		}
+		if (cellFont == null || cellFont[index] == null) {
+			return getFont();
+		}
+		return cellFont[index];
+	}
+
+	/**
+	 * Returns the foreground color that the receiver will use to draw.
+	 * 
+	 * @return the receiver's foreground color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 */
+	public Color getForeground() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if (foreground == null) {
+			return parent.getForeground();
+		}
+		return foreground;
+	}
+
+	/**
+	 * 
+	 * Returns the foreground color at the given column index in the receiver.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the foreground color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Color getForeground(int index) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return getForeground();
+		}
+		int pixel = cellForeground != null ? cellForeground[index] : -1;
+		return pixel == -1 ? getForeground() : Color.qt_new(display, pixel);
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is grayed, and false otherwise.
+	 * When the parent does not have the <code>CHECK</code> style, return false.
+	 * 
+	 * @return the grayed state of the checkbox
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getGrayed() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if ((parent.style & SWT.CHECK) == 0) {
+			return false;
+		}
+		return grayed;
+	}
+
+	@Override
+	public Image getImage() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return super.getImage();
+	}
+
+	/**
+	 * Returns the image stored at the given column index in the receiver, or
+	 * null if the image has not been set or if the column does not exist.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the image stored at the given column index in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Image getImage(int index) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if (index == 0) {
+			return getImage();
+		}
+		if (images != null) {
+			if (0 <= index && index < images.length) {
+				return images[index];
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns a rectangle describing the size and location relative to its
+	 * parent of an image at a column in the table. An empty rectangle is
+	 * returned if index exceeds the index of the table's last column.
+	 * 
+	 * @param index
+	 *            the index that specifies the column
+	 * @return the receiver's bounding image rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Rectangle getImageBounds(int index) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		//TODO
+		return getBounds(index);
+	}
+
+	/**
+	 * Gets the image indent.
+	 * 
+	 * @return the indent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getImageIndent() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return imageIndent;
+	}
+
+	@Override
+	String getNameText() {
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			if (!cached) {
+				return "*virtual*"; //$NON-NLS-1$
+			}
+		}
+		return super.getNameText();
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Table</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Table getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	@Override
+	public String getText() {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return super.getText();
+	}
+
+	/**
+	 * Returns the text stored at the given column index in the receiver, or
+	 * empty string if the text has not been set.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the text stored at the given column index in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText(int index) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if (index == 0) {
+			return getText();
+		}
+		if (strings != null) {
+			if (0 <= index && index < strings.length) {
+				String string = strings[index];
+				return string != null ? string : "";//$NON-NLS-1$
+			}
+		}
+		return "";//$NON-NLS-1$
+	}
+
+	/**
+	 * Returns a rectangle describing the size and location relative to its
+	 * parent of the text at a column in the table. An empty rectangle is
+	 * returned if index exceeds the index of the table's last column.
+	 * 
+	 * @param index
+	 *            the index that specifies the column
+	 * @return the receiver's bounding text rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public Rectangle getTextBounds(int index) {
+		checkWidget();
+		if (!parent.checkData(this, true)) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		//TODO
+		return getBounds(index);
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		radioButton = null;
+		parent = null;
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		strings = null;
+		images = null;
+		cellFont = null;
+		cellBackground = cellForeground = null;
+	}
+
+	/**
+	 * Sets the receiver's background color to the color specified by the
+	 * argument, or to the default system color for the item if the argument is
+	 * null.
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 */
+	public void setBackground(Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		Color oldColor = background;
+		if (color == null) {
+			background = null;
+		} else {
+			if (color.equals(background)) {
+				return;
+			}
+			background = color;
+		}
+		if (oldColor != null) {
+			oldColor.dispose();
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+
+		parent.rowChanged(this);
+	}
+
+	/**
+	 * Sets the background color at the given column index in the receiver to
+	 * the color specified by the argument, or to the default system color for
+	 * the item if the argument is null.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setBackground(int index, Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		int pixel = -1;
+		if (color != null) {
+			pixel = color.getPixel();
+		}
+		if (cellBackground == null) {
+			cellBackground = new int[count];
+			for (int i = 0; i < count; i++) {
+				cellBackground[i] = -1;
+			}
+		}
+		if (cellBackground[index] == pixel) {
+			return;
+		}
+		cellBackground[index] = pixel;
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		parent.cellChanged(this, index);
+		//		QBrush brush = new QBrush(QtSWTConverter.convert(color));
+		//		getCellItem(index).setBackground(brush);
+	}
+
+	/**
+	 * Sets the checked state of the checkbox for this item. This state change
+	 * only applies if the Table was created with the SWT.CHECK style.
+	 * 
+	 * @param checked
+	 *            the new checked state of the checkbox
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setChecked(boolean checked) {
+		checkWidget();
+		if ((parent.style & SWT.CHECK) == 0) {
+			return;
+		}
+		if (this.checked == checked) {
+			return;
+		}
+		setChecked(checked, false);
+	}
+
+	void setChecked(boolean checked, boolean notify) {
+		this.checked = checked;
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		if (notify) {
+			Event event = new Event();
+			event.item = this;
+			event.detail = SWT.CHECK;
+			parent.postEvent(SWT.Selection, event);
+		}
+		parent.cellChanged(this, 0);
+		//		CheckState state = checked ? CheckState.Checked : CheckState.Unchecked;
+		//		getCellItem(0).setData(ItemDataRole.CheckStateRole, state);
+	}
+
+	/**
+	 * Sets the font that the receiver will use to paint textual information for
+	 * this item to the font specified by the argument, or to the default font
+	 * for that kind of control if the argument is null.
+	 * 
+	 * @param font
+	 *            the new font (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setFont(Font font) {
+		checkWidget();
+		if (font != null && font.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		Font oldFont = this.font;
+		if (oldFont == font) {
+			return;
+		}
+		this.font = font;
+		if (oldFont != null && oldFont.equals(font)) {
+			return;
+		}
+		if (font != null) {
+			if ((parent.style & SWT.VIRTUAL) != 0) {
+				cached = true;
+			}
+		}
+		parent.rowChanged(this);
+		//		int row = getRow();
+		//		int columnCount = parent.getColumnCount();
+		//		for (int col = 0; col < columnCount; col++) {
+		//			getCellItem(row, col).setFont(font.getQFont());
+		//		}
+	}
+
+	/**
+	 * Sets the font that the receiver will use to paint textual information for
+	 * the specified cell in this item to the font specified by the argument, or
+	 * to the default font for that kind of control if the argument is null.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param font
+	 *            the new font (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setFont(int index, Font font) {
+		checkWidget();
+		if (font != null && font.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		if (cellFont == null) {
+			if (font == null) {
+				return;
+			}
+			cellFont = new Font[count];
+		}
+		Font oldFont = cellFont[index];
+		if (oldFont == font) {
+			return;
+		}
+		cellFont[index] = font;
+		if (oldFont != null && oldFont.equals(font)) {
+			return;
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		parent.cellChanged(this, index);
+		//getCellItem(index).setFont(font.getQFont());
+	}
+
+	/**
+	 * Sets the receiver's foreground color to the color specified by the
+	 * argument, or to the default system color for the item if the argument is
+	 * null.
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 */
+	public void setForeground(Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		Color oldColor = foreground;
+		if (color == null) {
+			foreground = null;
+		} else {
+			if (color.equals(foreground)) {
+				return;
+			}
+			foreground = color;
+		}
+		if (oldColor != null) {
+			oldColor.dispose();
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		parent.rowChanged(this);
+		//		int row = getRow();
+		//		int columnCount = parent.getColumnCount();
+		//		QBrush brush = null;
+		//		if (foreground != null) {
+		//			brush = new QBrush(foreground.getColor());
+		//		}
+		//		for (int col = 0; col < columnCount; col++) {
+		//			getCellItem(row, col).setForeground(brush);
+		//		}
+	}
+
+	/**
+	 * Sets the foreground color at the given column index in the receiver to
+	 * the color specified by the argument, or to the default system color for
+	 * the item if the argument is null.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setForeground(int index, Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		int pixel = -1;
+		if (color != null) {
+			pixel = color.getPixel();
+		}
+		if (cellForeground == null) {
+			cellForeground = new int[count];
+			for (int i = 0; i < count; i++) {
+				cellForeground[i] = -1;
+			}
+		}
+		if (cellForeground[index] == pixel) {
+			return;
+		}
+		cellForeground[index] = pixel;
+		if (parent.isVirtual()) {
+			cached = true;
+		}
+		parent.cellChanged(this, index);
+		//getCellItem(index).setForeground(new QBrush(QtSWTConverter.convert(color)));
+	}
+
+	/**
+	 * Sets the grayed state of the checkbox for this item. This state change
+	 * only applies if the Table was created with the SWT.CHECK style.
+	 * 
+	 * @param grayed
+	 *            the new grayed state of the checkbox;
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setGrayed(boolean grayed) {
+		checkWidget();
+		if ((parent.style & SWT.CHECK) == 0) {
+			return;
+		}
+		if (this.grayed == grayed) {
+			return;
+		}
+		this.grayed = grayed;
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		parent.cellChanged(this, 0);
+		//getCellItem(0).setCheckState(CheckState.PartiallyChecked);
+	}
+
+	/**
+	 * Sets the image for multiple columns in the table.
+	 * 
+	 * @param images
+	 *            the array of new images
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if one of the images has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setImage(Image[] images) {
+		checkWidget();
+		if (images == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		for (int i = 0; i < images.length; i++) {
+			setImage(i, images[i]);
+		}
+	}
+
+	/**
+	 * Sets the receiver's image at a column.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param image
+	 *            the new image
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setImage(int index, Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (index == 0) {
+			if (image != null && image.isIcon()) {
+				if (image.equals(this.image)) {
+					return;
+				}
+			}
+			super.setImage(image);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		if (images == null && index != 0) {
+			images = new Image[count];
+			images[0] = image;
+		}
+		if (images != null) {
+			if (image != null && image.isIcon()) {
+				if (image.equals(images[index])) {
+					return;
+				}
+			}
+			images[index] = image;
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		parent.cellChanged(this, index);
+		//getCellItem(index).setIcon(image.getQIcon());
+	}
+
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		setImage(0, image);
+	}
+
+	/**
+	 * Sets the indent of the first column's image, expressed in terms of the
+	 * image's width.
+	 * 
+	 * @param indent
+	 *            the new indent
+	 * 
+	 *            </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @deprecated this functionality is not supported on most platforms
+	 */
+	@Deprecated
+	public void setImageIndent(int indent) {
+		checkWidget();
+		//TODO
+		// if ( indent < 0 )
+		// return;
+		// if ( imageIndent == indent )
+		// return;
+		// imageIndent = indent;
+		// if ( ( parent.style & SWT.VIRTUAL ) != 0 ) {
+		// cached = true;
+		// } else {
+		// }
+	}
+
+	/**
+	 * Sets the text for multiple columns in the table.
+	 * 
+	 * @param strings
+	 *            the array of new strings
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String[] strings) {
+		checkWidget();
+		if (strings == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		for (int i = 0; i < strings.length; i++) {
+			String string = strings[i];
+			if (string != null) {
+				setText(i, string);
+			}
+		}
+	}
+
+	/**
+	 * Sets the receiver's text at a column
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(int index, String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (index == 0) {
+			if (string.equals(text)) {
+				return;
+			}
+			super.setText(string);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		if (strings == null && index != 0) {
+			strings = new String[count];
+			strings[0] = text;
+		}
+		if (strings != null) {
+			if (string.equals(strings[index])) {
+				return;
+			}
+			strings[index] = string;
+		}
+		if (parent.isVirtual()) {
+			cached = true;
+		}
+		parent.cellChanged(this, index);
+		//getCellItem(index).setText(string);
+	}
+
+	@Override
+	public void setText(String string) {
+		checkWidget();
+		setText(0, string);
+	}
+
+	void addColumn(int index, int columnCount) {
+		String[] strings = this.strings;
+		if (strings != null) {
+			String[] temp = new String[columnCount + 1];
+			System.arraycopy(strings, 0, temp, 0, index);
+			System.arraycopy(strings, index, temp, index + 1, columnCount - index);
+			strings = temp;
+		}
+		Image[] images = this.images;
+		if (images != null) {
+			Image[] temp = new Image[columnCount + 1];
+			System.arraycopy(images, 0, temp, 0, index);
+			System.arraycopy(images, index, temp, index + 1, columnCount - index);
+			this.images = temp;
+		}
+		if (index == 0) {
+			if (columnCount != 0) {
+				if (strings == null) {
+					this.strings = new String[columnCount + 1];
+					this.strings[1] = text;
+				}
+				text = ""; //$NON-NLS-1$
+				if (images == null) {
+					images = new Image[columnCount + 1];
+					images[1] = image;
+				}
+				image = null;
+			}
+		}
+		if (cellBackground != null) {
+			int[] cellBackground = this.cellBackground;
+			int[] temp = new int[columnCount + 1];
+			System.arraycopy(cellBackground, 0, temp, 0, index);
+			System.arraycopy(cellBackground, index, temp, index + 1, columnCount - index);
+			temp[index] = -1;
+			this.cellBackground = temp;
+		}
+		if (cellForeground != null) {
+			int[] cellForeground = this.cellForeground;
+			int[] temp = new int[columnCount + 1];
+			System.arraycopy(cellForeground, 0, temp, 0, index);
+			System.arraycopy(cellForeground, index, temp, index + 1, columnCount - index);
+			temp[index] = -1;
+			this.cellForeground = temp;
+		}
+		if (cellFont != null) {
+			Font[] cellFont = this.cellFont;
+			Font[] temp = new Font[columnCount + 1];
+			System.arraycopy(cellFont, 0, temp, 0, index);
+			System.arraycopy(cellFont, index, temp, index + 1, columnCount - index);
+			this.cellFont = temp;
+		}
+	}
+
+	void removeColumn(int index, int columnCount) {
+		if (columnCount == 0) {
+			strings = null;
+			images = null;
+			cellBackground = null;
+			cellForeground = null;
+			cellFont = null;
+		} else {
+			if (strings != null) {
+				String[] strings = this.strings;
+				if (index == 0) {
+					text = strings[1] != null ? strings[1] : ""; //$NON-NLS-1$
+				}
+				String[] temp = new String[columnCount];
+				System.arraycopy(strings, 0, temp, 0, index);
+				System.arraycopy(strings, index + 1, temp, index, columnCount - index);
+				this.strings = temp;
+			} else {
+				if (index == 0) {
+					text = ""; //$NON-NLS-1$
+				}
+			}
+			if (images != null) {
+				Image[] images = this.images;
+				if (index == 0) {
+					image = images[1];
+				}
+				Image[] temp = new Image[columnCount];
+				System.arraycopy(images, 0, temp, 0, index);
+				System.arraycopy(images, index + 1, temp, index, columnCount - index);
+				this.images = temp;
+			} else {
+				if (index == 0) {
+					image = null;
+				}
+			}
+			if (cellBackground != null) {
+				int[] cellBackground = this.cellBackground;
+				int[] temp = new int[columnCount];
+				System.arraycopy(cellBackground, 0, temp, 0, index);
+				System.arraycopy(cellBackground, index + 1, temp, index, columnCount - index);
+				this.cellBackground = temp;
+			}
+			if (cellForeground != null) {
+				int[] cellForeground = this.cellForeground;
+				int[] temp = new int[columnCount];
+				System.arraycopy(cellForeground, 0, temp, 0, index);
+				System.arraycopy(cellForeground, index + 1, temp, index, columnCount - index);
+				this.cellForeground = temp;
+			}
+			if (cellFont != null) {
+				Font[] cellFont = this.cellFont;
+				Font[] temp = new Font[columnCount];
+				System.arraycopy(cellFont, 0, temp, 0, index);
+				System.arraycopy(cellFont, index + 1, temp, index, columnCount - index);
+				this.cellFont = temp;
+			}
+		}
+
+	}
+
+	void setSelected(boolean selected) {
+		this.selected = selected;
+		//		int columns = parent.getColumnCount();
+		parent.cellChanged(this, 0);
+		//		int row = getRow();
+		//		for (int col = 0; col < columns; col++) {
+		//			//getCellItem(row, col).setSelected(selected);
+		//		}
+		if ((parent.style & SWT.SINGLE) != 0 && (parent.style & SWT.RADIO) != 0) {
+			radioButton.setChecked(selected);
+		}
+	}
+
+	public boolean isSelected() {
+		return selected;
+
+		//		int columns = parent.getColumnCount();
+		//		int row = getRow();
+		//		for (int col = 0; col < columns; col++) {
+		//			//TODO
+		//			//			if (getCellItem(row, col).isSelected()) {
+		//			//				return true;
+		//			//			}
+		//		}
+		//		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Text.java
new file mode 100644
index 0000000..c456792
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Text.java	
@@ -0,0 +1,1875 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QPoint;
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.Qt.LayoutDirection;
+import com.trolltech.qt.gui.QAbstractScrollArea;
+import com.trolltech.qt.gui.QContentsMargins;
+import com.trolltech.qt.gui.QFontMetrics;
+import com.trolltech.qt.gui.QLineEdit;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QScrollBar;
+import com.trolltech.qt.gui.QSizePolicy;
+import com.trolltech.qt.gui.QStyle;
+import com.trolltech.qt.gui.QTextBlock;
+import com.trolltech.qt.gui.QTextCursor;
+import com.trolltech.qt.gui.QTextDocument;
+import com.trolltech.qt.gui.QTextEdit;
+import com.trolltech.qt.gui.QTextLayout;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QFrame.Shape;
+import com.trolltech.qt.gui.QLineEdit.EchoMode;
+import com.trolltech.qt.gui.QTextCursor.MoveMode;
+import com.trolltech.qt.gui.QTextCursor.MoveOperation;
+import com.trolltech.qt.gui.QTextEdit.LineWrapMode;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class are selectable user interface objects that allow the
+ * user to enter and modify text. Text controls can be either single or
+ * multi-line. When a text control is created with a border, the operating
+ * system includes a platform specific inset around the contents of the control.
+ * When created without a border, an effort is made to remove the inset such
+ * that the preferred size of the control is the same size as the contents.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>CENTER, ICON_CANCEL, ICON_SEARCH, LEFT, MULTI, PASSWORD, SEARCH, SINGLE,
+ * RIGHT, READ_ONLY, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Modify, Verify</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles MULTI and SINGLE may be specified, and only one
+ * of the styles LEFT, CENTER, and RIGHT may be specified.
+ * </p>
+ * <p>
+ * Note: The styles ICON_CANCEL and ICON_SEARCH are hints used in combination
+ * with SEARCH. When the platform supports the hint, the text control shows
+ * these icons. When an icon is selected, a default selection event is sent with
+ * the detail field set to one of ICON_CANCEL or ICON_SEARCH. Normally,
+ * application code does not need to check the detail. In the case of
+ * ICON_CANCEL, the text is cleared before the default selection event is sent
+ * causing the application to search for an empty string.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#text">Text snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Text extends Scrollable {
+	private static final int minimumLineSpacing = 14;
+	private static final int verticalMargin = 1;
+	private static final int horizontalMargin = 2;
+
+	int tabs = 8;
+	int oldStart, oldEnd;
+	boolean doubleClick, ignoreModify, ignoreVerify, ignoreCharacter;
+	private int textLimit;
+	/**
+	 * The maximum number of characters that can be entered into a text widget.
+	 * <p>
+	 * Note that this value is platform dependent, based upon the native widget
+	 * implementation.
+	 * </p>
+	 */
+	public static final int LIMIT;
+
+	/**
+	 * The delimiter used by multi-line text widgets. When text is queried and
+	 * from the widget, it will be delimited using this delimiter.
+	 */
+	public static final String DELIMITER;
+
+	/*
+	 * These values can be different on different platforms. Therefore they are
+	 * not initialized in the declaration to stop the compiler from inlining.
+	 */
+	static {
+		// LIMIT is the default maxlength of the QLineEdit
+		LIMIT = new QLineEdit().maxLength();
+		DELIMITER = "\n";//$NON-NLS-1$
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#SINGLE
+	 * @see SWT#MULTI
+	 * @see SWT#READ_ONLY
+	 * @see SWT#WRAP
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Text(Composite parent, int style) {
+		super(parent, checkStyle(style));
+		setTabStops(tabs);
+	}
+
+	boolean isSingleLineEdit() {
+		return (style & SWT.MULTI) == 0;
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		doubleClick = true;
+		if (isSingleLineEdit()) {
+			return createQLineEdit(style);
+		}
+		return createQTextEdit(style);
+	}
+
+	QLineEdit createQLineEdit(int style) {
+		QLineEdit lineEdit = new QLineEdit();
+		if ((style & SWT.READ_ONLY) != 0) {
+			lineEdit.setReadOnly(true);
+		}
+		if ((style & SWT.PASSWORD) != 0) {
+			lineEdit.setEchoMode(EchoMode.Password);
+		}
+		lineEdit.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum);
+		lineEdit.setContentsMargins(0, 0, 0, 0);
+
+		connectQLineEditSignals(lineEdit);
+
+		lineEdit.setFrame(false);
+
+		return lineEdit;
+	}
+
+	QWidget createQTextEdit(int style) {
+		QTextEdit textEdit = new MyQTextEdit();
+		if ((style & SWT.READ_ONLY) != 0) {
+			textEdit.setReadOnly(true);
+		}
+		if ((style & SWT.WRAP) != 0) {
+			textEdit.setLineWrapMode(LineWrapMode.WidgetWidth);
+		} else {
+			textEdit.setLineWrapMode(LineWrapMode.NoWrap);
+		}
+		connectQTextEditSignals(textEdit);
+
+		textEdit.setFrameShape(Shape.NoFrame);
+		textEdit.setLineWidth(0);
+
+		return textEdit;
+	}
+
+	@Override
+	protected void checkAndUpdateBorder(QWidget control) {
+		if (isSingleLineEdit()) {
+			if ((style & SWT.BORDER) != 0) {
+				getQLineEdit().setFrame(true);
+			}
+		} else {
+			super.checkAndUpdateBorder(control);
+		}
+	}
+
+	protected void connectQLineEditSignals(QLineEdit lineEdit) {
+		lineEdit.textChanged.connect(this, "textChangeEvent(String)"); //$NON-NLS-1$
+	}
+
+	protected void connectQTextEditSignals(QTextEdit textEdit) {
+		textEdit.textChanged.connect(this, "textChangeEvent()"); //$NON-NLS-1$
+	}
+
+	protected void textChangeEvent() {
+		textChangeEvent(null);
+	}
+
+	protected void textChangeEvent(String text) {
+		Event event = new Event();
+		event.data = text;
+		sendEvent(SWT.Modify, event);
+	}
+
+	@Override
+	void registerQWidget() {
+		super.registerQWidget();
+		if (!isSingleLineEdit()) {
+			display.addControl(getQTextEdit().viewport(), this);
+		}
+	}
+
+	@Override
+	void deregisterQWidget() {
+		if (!isSingleLineEdit()) {
+			display.removeControl(getQTextEdit().viewport());
+		}
+		super.deregisterQWidget();
+	}
+
+	private QLineEdit getQLineEdit() {
+		return (QLineEdit) getQWidget();
+	}
+
+	private QTextEdit getQTextEdit() {
+		return (QTextEdit) getQWidget();
+	}
+
+	@Override
+	QAbstractScrollArea getQScrollArea() {
+		if (!isSingleLineEdit()) {
+			return getQTextEdit();
+		}
+		return null;
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver's text is modified, by sending it one of the messages
+	 * defined in the <code>ModifyListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ModifyListener
+	 * @see #removeModifyListener
+	 */
+	public void addModifyListener(ModifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Modify, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is not called for texts.
+	 * <code>widgetDefaultSelected</code> is typically called when ENTER is
+	 * pressed in a single-line text, or when ENTER is pressed in a search text.
+	 * If the receiver has the <code>SWT.SEARCH | SWT.CANCEL</code> style and
+	 * the user cancels the search, the event object detail field contains the
+	 * value <code>SWT.CANCEL</code>.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the control is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver's text is verified, by sending it one of the messages
+	 * defined in the <code>VerifyListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see VerifyListener
+	 * @see #removeVerifyListener
+	 */
+	public void addVerifyListener(VerifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Verify, typedListener);
+	}
+
+	/**
+	 * Appends a string.
+	 * <p>
+	 * The new text is appended to the text at the end of the widget.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the string to be appended
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void append(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		string = Display.withCrLf(string);
+		if (isSingleLineEdit()) {
+			getQLineEdit().setText(getQLineEdit().text() + string);
+		} else {
+			getQTextEdit().append(string);
+		}
+	}
+
+	static int checkStyle(int style) {
+		if ((style & SWT.SEARCH) != 0) {
+			style |= SWT.SINGLE | SWT.BORDER;
+			style &= ~SWT.PASSWORD;
+			style &= ~SWT.ICON_CANCEL;
+			/*
+			 * NOTE: ICON_CANCEL has the same value as H_SCROLL and ICON_SEARCH
+			 * has the same value as V_SCROLL so they are cleared because
+			 * SWT.SINGLE is set.
+			 */
+		}
+		if ((style & SWT.SINGLE) != 0 && (style & SWT.MULTI) != 0) {
+			style &= ~SWT.MULTI;
+		}
+		style = checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+		if ((style & SWT.SINGLE) != 0) {
+			style &= ~(SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP);
+		}
+		if ((style & SWT.WRAP) != 0) {
+			style |= SWT.MULTI;
+			style &= ~SWT.H_SCROLL;
+		}
+		if ((style & SWT.MULTI) != 0) {
+			style &= ~SWT.PASSWORD;
+		}
+		if ((style & (SWT.SINGLE | SWT.MULTI)) != 0) {
+			return style;
+		}
+		if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0) {
+			return style | SWT.MULTI;
+		}
+		return style | SWT.SINGLE;
+	}
+
+	/**
+	 * Clears the selection.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void clearSelection() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			getQLineEdit().setCursorPosition(getQLineEdit().cursorPosition());
+		} else {
+			getQTextEdit().textCursor().clearSelection();
+		}
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+
+		if (wHint != SWT.DEFAULT && wHint < 0) {
+			wHint = SWT.DEFAULT;
+		}
+		if (hHint != SWT.DEFAULT && hHint < 0) {
+			hHint = SWT.DEFAULT;
+		}
+
+		Point preferredSize;
+		if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
+			preferredSize = new Point(wHint, hHint);
+		} else if (isSingleLineEdit()) {
+			if (wHint == SWT.DEFAULT && hHint == SWT.DEFAULT) {
+				preferredSize = getPreferredSingleLineClientAreaSize();
+			} else if (hHint == SWT.DEFAULT) {
+				preferredSize = new Point(wHint, getPreferredSingleLineClientAreaSize().y);
+			} else {
+				preferredSize = new Point(getPreferredSingleLineClientAreaSize().x, hHint);
+			}
+		} else {
+			if (wHint == SWT.DEFAULT && hHint == SWT.DEFAULT) {
+				preferredSize = getPreferredClientAreaSize(-1);
+			} else if (hHint == SWT.DEFAULT) {
+				preferredSize = new Point(wHint, getPreferredClientAreaSize(wHint).y);
+			} else {
+				preferredSize = new Point(getPreferredClientAreaSize(hHint).y, hHint);
+			}
+		}
+
+		Rectangle trim = computeTrim(0, 0, preferredSize.x, preferredSize.y);
+
+		return new Point(trim.width, trim.height);
+	}
+
+	private Point getPreferredSingleLineClientAreaSize() {
+		QFontMetrics fm = new QFontMetrics(getQLineEdit().font());
+		QContentsMargins margins = getQLineEdit().getContentsMargins();
+		int left = margins.left;
+		int top = margins.top;
+		int right = margins.right;
+		int bottom = margins.bottom;
+		int h = Math.max(fm.lineSpacing(), minimumLineSpacing) + 2 * verticalMargin + top + bottom;
+		int w = fm.width(getQLineEdit().text()) + 2 * horizontalMargin + left + right;
+		Point size = new Point(w, h);
+		if (size == null) {
+			return new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
+		}
+		if (size.x < 0) {
+			size.x = DEFAULT_WIDTH;
+		}
+		if (size.y < 0) {
+			size.y = DEFAULT_HEIGHT;
+		}
+		return size;
+	}
+
+	private Point getPreferredClientAreaSize(int wHint) {
+		QTextDocument doc = getQTextEdit().document();
+		Point size = null;
+		if (doc != null) {
+			double oldTextWidth = doc.textWidth();
+			if (wHint >= 0) {
+				doc.setTextWidth(wHint);
+			} else {
+				doc.adjustSize();
+			}
+			QSize preferredSize = doc.size().toSize();
+			doc.setTextWidth(oldTextWidth);
+			size = new Point(preferredSize.width(), preferredSize.height());
+		}
+
+		if (size == null) {
+			return new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
+		}
+		if (size.x < 0) {
+			size.x = DEFAULT_WIDTH;
+		}
+		if (size.y < 0) {
+			size.y = DEFAULT_HEIGHT;
+		}
+		return size;
+	}
+
+	@Override
+	public Rectangle computeTrim(int x, int y, int width, int height) {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			if ((style & SWT.BORDER) != 0) {
+				int border = 0;
+				QStyle style = getQWidget().style();
+				if (style != null) {
+					border = style.pixelMetric(QStyle.PixelMetric.PM_DefaultFrameWidth);
+				}
+				x -= border;
+				y -= border;
+				width += 2 * border;
+				height += 2 * border;
+			}
+			return new Rectangle(x, y, width, height);
+		}
+		return super.computeTrim(x, y, width, height);
+	}
+
+	/**
+	 * Copies the selected text.
+	 * <p>
+	 * The current selection is copied to the clipboard.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void copy() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			getQLineEdit().copy();
+		} else {
+			getQTextEdit().copy();
+		}
+	}
+
+	/**
+	 * Cuts the selected text.
+	 * <p>
+	 * The current selection is first copied to the clipboard and then deleted
+	 * from the widget.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void cut() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			getQLineEdit().cut();
+		} else {
+			getQTextEdit().cut();
+		}
+	}
+
+	/**
+	 * Returns the line number of the caret.
+	 * <p>
+	 * The line number of the caret is returned.
+	 * </p>
+	 * 
+	 * @return the line number
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getCaretLineNumber() {
+		checkWidget();
+		if (!isSingleLineEdit()) {
+			int lineNumber = 0;
+			QTextCursor textCursor = getQTextEdit().textCursor();
+			QTextBlock textBlock = textCursor.block();
+			QTextLayout textLayout = textBlock.layout();
+			if (textLayout != null) {
+				lineNumber = textLayout.lineForTextPosition(textCursor.position() - textBlock.position()).lineNumber();
+			}
+			lineNumber += getNumberOfPrecedingTextLines(textBlock);
+			return lineNumber;
+		}
+		return 0;
+	}
+
+	private int getNumberOfPrecedingTextLines(QTextBlock textBlock) {
+		int lineCount = 0;
+		while (textBlock.isValid()) {
+			QTextLayout textLayout = textBlock.layout();
+			if (textLayout != null) {
+				int lines = textLayout.lineCount();
+				lineCount += lines > 0 ? lines : 1;
+			}
+			textBlock = textBlock.previous();
+		}
+		return lineCount;
+	}
+
+	/**
+	 * Returns a point describing the receiver's location relative to its parent
+	 * (or its display if its parent is null).
+	 * <p>
+	 * The location of the caret is returned.
+	 * </p>
+	 * 
+	 * @return a point, the location of the caret
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getCaretLocation() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return new Point(0, 0);
+		}
+		return QtSWTConverter.convertPosition(getQTextEdit().cursorRect());
+	}
+
+	/**
+	 * Returns the character position of the caret.
+	 * <p>
+	 * Indexing is zero based.
+	 * </p>
+	 * 
+	 * @return the position of the caret
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getCaretPosition() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return getQLineEdit().cursorPosition();
+		}
+		return getQTextEdit().textCursor().position();
+	}
+
+	/**
+	 * Returns the number of characters.
+	 * 
+	 * @return number of characters in the widget
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getCharCount() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return getText().length();
+
+		}
+		QTextCursor cursor = getQTextEdit().textCursor();
+		int oldPosition = cursor.position();
+		cursor.movePosition(MoveOperation.End);
+		int count = cursor.position();
+		cursor.setPosition(oldPosition);
+		return count;
+	}
+
+	/**
+	 * Returns the double click enabled flag.
+	 * <p>
+	 * The double click flag enables or disables the default action of the text
+	 * widget when the user double clicks.
+	 * </p>
+	 * 
+	 * @return whether or not double click is enabled
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getDoubleClickEnabled() {
+		checkWidget();
+		return doubleClick;
+	}
+
+	/**
+	 * Returns the echo character.
+	 * <p>
+	 * The echo character is the character that is displayed when the user
+	 * enters text or the text is changed by the programmer.
+	 * </p>
+	 * 
+	 * @return the echo character
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setEchoChar
+	 */
+	public char getEchoChar() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			if ((style & SWT.PASSWORD) != 0) {
+				return '*';
+			}
+		}
+		return '\0';
+	}
+
+	/**
+	 * Returns the editable state.
+	 * 
+	 * @return whether or not the receiver is editable
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getEditable() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return !getQLineEdit().isReadOnly();
+		}
+		return !getQTextEdit().isReadOnly();
+	}
+
+	/**
+	 * Returns the number of lines.
+	 * 
+	 * @return the number of lines in the widget
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getLineCount() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return 1;
+		}
+		QTextDocument textDocument = getQTextEdit().document();
+		if (textDocument != null) {
+			return getNumberOfPrecedingTextLines(textDocument.end());
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns the line delimiter.
+	 * 
+	 * @return a string that is the line delimiter
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #DELIMITER
+	 */
+	public String getLineDelimiter() {
+		checkWidget();
+		return DELIMITER;
+	}
+
+	/**
+	 * Returns the height of a line.
+	 * 
+	 * @return the height of a row of text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getLineHeight() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return getQLineEdit().fontMetrics().lineSpacing();
+		}
+		QTextLayout textLayout = getQTextEdit().textCursor().block().layout();
+		if (textLayout != null) {
+			return (int) Math.round(textLayout.lineAt(0).height());
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns the orientation of the receiver, which will be one of the
+	 * constants <code>SWT.LEFT_TO_RIGHT</code> or
+	 * <code>SWT.RIGHT_TO_LEFT</code>.
+	 * 
+	 * @return the orientation style
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public int getOrientation() {
+		checkWidget();
+		return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	}
+
+	/**
+	 * Returns the widget message. The message text is displayed as a hint for
+	 * the user, indicating the purpose of the field.
+	 * <p>
+	 * Typically this is used in conjunction with <code>SWT.SEARCH</code>.
+	 * </p>
+	 * 
+	 * @return the widget message
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public String getMessage() {
+		checkWidget();
+		return getQWidget().whatsThis();
+	}
+
+	/**
+	 * Returns the character position at the given point in the receiver or -1
+	 * if no such position exists. The point is in the coordinate system of the
+	 * receiver.
+	 * <p>
+	 * Indexing is zero based.
+	 * </p>
+	 * 
+	 * @return the position of the caret
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	// TODO - Javadoc
+	// /* public */int getPosition( Point point ) {
+	// checkWidget();
+	// if ( point == null )
+	// error( SWT.ERROR_NULL_ARGUMENT );
+	// int /* long */lParam = OS.MAKELPARAM( point.x, point.y );
+	// int position = OS.LOWORD( OS.SendMessage( handle, OS.EM_CHARFROMPOS, 0,
+	// lParam ) );
+	// if ( !OS.IsUnicode && OS.IsDBLocale )
+	// position = mbcsToWcsPos( position );
+	// return position;
+	// }
+
+	/**
+	 * Returns a <code>Point</code> whose x coordinate is the character position
+	 * representing the start of the selected text, and whose y coordinate is
+	 * the character position representing the end of the selection. An "empty"
+	 * selection is indicated by the x and y coordinates having the same value.
+	 * <p>
+	 * Indexing is zero based. The range of a selection is from 0..N where N is
+	 * the number of characters in the widget.
+	 * </p>
+	 * 
+	 * @return a point representing the selection start and end
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Point getSelection() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			int selectionStart = getQLineEdit().selectionStart();
+			if (selectionStart == -1) {
+				int cursorPos = getQLineEdit().cursorPosition();
+				return new Point(cursorPos, cursorPos);
+			}
+			return new Point(selectionStart, selectionStart + getQLineEdit().selectedText().length());
+		}
+		int start = getQTextEdit().textCursor().selectionStart();
+		int end = getQTextEdit().textCursor().selectionStart();
+		return new Point(Math.min(start, end), Math.max(start, end));
+	}
+
+	/**
+	 * Returns the number of selected characters.
+	 * 
+	 * @return the number of selected characters.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionCount() {
+		checkWidget();
+		Point selection = getSelection();
+		return Math.abs(selection.y - selection.x);
+	}
+
+	/**
+	 * Gets the selected text, or an empty string if there is no current
+	 * selection.
+	 * 
+	 * @return the selected text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getSelectionText() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return getQLineEdit().selectedText();
+		}
+		return getQTextEdit().textCursor().selectedText();
+	}
+
+	/**
+	 * Returns the number of tabs.
+	 * <p>
+	 * Tab stop spacing is specified in terms of the space (' ') character. The
+	 * width of a single tab stop is the pixel width of the spaces.
+	 * </p>
+	 * 
+	 * @return the number of tab characters
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getTabs() {
+		checkWidget();
+		return tabs;
+	}
+
+	/**
+	 * Returns the widget text.
+	 * <p>
+	 * The text for a text widget is the characters in the widget, or an empty
+	 * string if this has never been set.
+	 * </p>
+	 * 
+	 * @return the widget text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return getQLineEdit().text();
+		}
+		return getQTextEdit().toPlainText();
+	}
+
+	/**
+	 * Returns a range of text. Returns an empty string if the start of the
+	 * range is greater than the end.
+	 * <p>
+	 * Indexing is zero based. The range of a selection is from 0..N-1 where N
+	 * is the number of characters in the widget.
+	 * </p>
+	 * 
+	 * @param start
+	 *            the start of the range
+	 * @param end
+	 *            the end of the range
+	 * @return the range of text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText(int start, int end) {
+		checkWidget();
+		if (start > end || end < 0) {
+			return "";//$NON-NLS-1$
+		}
+
+		String text = getText();
+		if (text != null) {
+			if (start >= text.length()) {
+				text = "";//$NON-NLS-1$
+			} else {
+				start = Math.max(0, start);
+				end = Math.min(end, text.length() - 1);
+				text = text.substring(start, end + 1);
+			}
+		}
+		return text;
+	}
+
+	/**
+	 * Returns the maximum number of characters that the receiver is capable of
+	 * holding.
+	 * <p>
+	 * If this has not been changed by <code>setTextLimit()</code>, it will be
+	 * the constant <code>Text.LIMIT</code>.
+	 * </p>
+	 * 
+	 * @return the text limit
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #LIMIT
+	 */
+	public int getTextLimit() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return getQLineEdit().maxLength();
+		}
+		return textLimit > 0 ? textLimit : LIMIT;
+	}
+
+	/**
+	 * Returns the zero-relative index of the line which is currently at the top
+	 * of the receiver.
+	 * <p>
+	 * This index can change when lines are scrolled or new lines are added or
+	 * removed.
+	 * </p>
+	 * 
+	 * @return the index of the top line
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getTopIndex() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return 0;
+		}
+		QScrollBar scrollBar = getQTextEdit().verticalScrollBar();
+		int index = 0;
+		if (scrollBar != null) {
+			int top = scrollBar.value();
+			QTextCursor textCursor = getQTextEdit().cursorForPosition(new QPoint(0, 0));
+			QTextBlock topBlock = textCursor.block();
+			QTextLayout layout = topBlock.layout();
+			if (layout != null && layout.position().y() < top) {
+				int layoutPos = (int) Math.round(layout.position().y());
+				for (int i = 0; i < layout.lineCount()
+						&& layoutPos + layout.lineAt(i).rect().bottom() <= top + layout.lineAt(i).rect().height() / 2; ++i) {
+					++index;
+				}
+			}
+			index += getNumberOfPrecedingTextLines(topBlock);
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns the top pixel.
+	 * <p>
+	 * The top pixel is the pixel position of the line that is currently at the
+	 * top of the widget. On some platforms, a text widget can be scrolled by
+	 * pixels instead of lines so that a partial line is displayed at the top of
+	 * the widget.
+	 * </p>
+	 * <p>
+	 * The top pixel changes when the widget is scrolled. The top pixel does not
+	 * include the widget trimming.
+	 * </p>
+	 * 
+	 * @return the pixel position of the top line
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getTopPixel() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			return 0;
+		}
+		return getQTextEdit().verticalScrollBar().value();
+	}
+
+	/**
+	 * Inserts a string.
+	 * <p>
+	 * The old selection is replaced with the new text.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the string
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is
+	 *                <code>null</code></li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void insert(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		string = Display.withCrLf(string);
+		getQLineEdit().insert(string);
+	}
+
+	/**
+	 * Pastes text from clipboard.
+	 * <p>
+	 * The selected text is deleted from the widget and new text inserted from
+	 * the clipboard.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void paste() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			getQLineEdit().paste();
+		} else {
+			getQTextEdit().paste();
+		}
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the receiver's text is modified.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ModifyListener
+	 * @see #addModifyListener
+	 */
+	public void removeModifyListener(ModifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Modify, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is verified.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see VerifyListener
+	 * @see #addVerifyListener
+	 */
+	public void removeVerifyListener(VerifyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Verify, listener);
+	}
+
+	/**
+	 * Selects all the text in the receiver.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void selectAll() {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			getQLineEdit().selectAll();
+		} else {
+			QTextCursor textCursor = getQTextEdit().textCursor();
+			textCursor.select(QTextCursor.SelectionType.Document);
+			getQTextEdit().setTextCursor(textCursor);
+		}
+	}
+
+	/**
+	 * Sets the double click enabled flag.
+	 * <p>
+	 * The double click flag enables or disables the default action of the text
+	 * widget when the user double clicks.
+	 * </p>
+	 * <p>
+	 * Note: This operation is a hint and is not supported on platforms that do
+	 * not have this concept.
+	 * </p>
+	 * 
+	 * @param doubleClick
+	 *            the new double click flag
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setDoubleClickEnabled(boolean doubleClick) {
+		checkWidget();
+		this.doubleClick = doubleClick;
+	}
+
+	/**
+	 * Sets the echo character.
+	 * <p>
+	 * The echo character is the character that is displayed when the user
+	 * enters text or the text is changed by the programmer. Setting the echo
+	 * character to '\0' clears the echo character and redraws the original
+	 * text. If for any reason the echo character is invalid, or if the platform
+	 * does not allow modification of the echo character, the default echo
+	 * character for the platform is used.
+	 * </p>
+	 * 
+	 * @param echo
+	 *            the new echo character
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setEchoChar(char echo) {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			if (echo == '\0') {
+				getQLineEdit().setEchoMode(EchoMode.Normal);
+			} else {
+				getQLineEdit().setEchoMode(EchoMode.Password);
+			}
+		}
+	}
+
+	/**
+	 * Sets the editable state.
+	 * 
+	 * @param editable
+	 *            the new editable state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setEditable(boolean editable) {
+		checkWidget();
+		if (isSingleLineEdit()) {
+			getQLineEdit().setReadOnly(!editable);
+		} else {
+			getQTextEdit().setReadOnly(!editable);
+		}
+	}
+
+	@Override
+	public void setFont(Font font) {
+		checkWidget();
+		super.setFont(font);
+		setTabStops(tabs);
+	}
+
+	/**
+	 * Sets the widget message. The message text is displayed as a hint for the
+	 * user, indicating the purpose of the field.
+	 * <p>
+	 * Typically this is used in conjunction with <code>SWT.SEARCH</code>.
+	 * </p>
+	 * 
+	 * @param message
+	 *            the new message
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the message is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public void setMessage(String message) {
+		checkWidget();
+		getQWidget().setWhatsThis(message);
+	}
+
+	/**
+	 * Sets the orientation of the receiver, which must be one of the constants
+	 * <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+	 * <p>
+	 * Note: This operation is a hint and is not supported on platforms that do
+	 * not have this concept.
+	 * </p>
+	 * 
+	 * @param orientation
+	 *            new orientation style
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1.2
+	 */
+	public void setOrientation(int orientation) {
+		checkWidget();
+		int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+		if ((orientation & flags) == 0 || (orientation & flags) == flags) {
+			return;
+		}
+
+		style &= ~flags;
+		style |= orientation & flags;
+
+		LayoutDirection direction = LayoutDirection.LeftToRight;
+		if (orientation == SWT.RIGHT_TO_LEFT) {
+			direction = LayoutDirection.RightToLeft;
+		}
+		getQWidget().setLayoutDirection(direction);
+	}
+
+	/**
+	 * Sets the selection.
+	 * <p>
+	 * Indexing is zero based. The range of a selection is from 0..N where N is
+	 * the number of characters in the widget.
+	 * </p>
+	 * <p>
+	 * Text selections are specified in terms of caret positions. In a text
+	 * widget that contains N characters, there are N+1 caret positions, ranging
+	 * from 0..N. This differs from other functions that address character
+	 * position such as getText () that use the regular array indexing rules.
+	 * </p>
+	 * 
+	 * @param start
+	 *            new caret position
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int start) {
+		checkWidget();
+		setSelection(start, start);
+	}
+
+	/**
+	 * Sets the selection to the range specified by the given start and end
+	 * indices.
+	 * <p>
+	 * Indexing is zero based. The range of a selection is from 0..N where N is
+	 * the number of characters in the widget.
+	 * </p>
+	 * <p>
+	 * Text selections are specified in terms of caret positions. In a text
+	 * widget that contains N characters, there are N+1 caret positions, ranging
+	 * from 0..N. This differs from other functions that address character
+	 * position such as getText () that use the usual array indexing rules.
+	 * </p>
+	 * 
+	 * @param start
+	 *            the start of the range
+	 * @param end
+	 *            the end of the range
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(int start, int end) {
+		checkWidget();
+		int length = getCharCount();
+		start = Math.min(Math.max(0, start), length);
+		end = Math.min(Math.max(0, end), length);
+
+		if (isSingleLineEdit()) {
+			getQLineEdit().setSelection(start, end - start);
+		} else {
+			setCursorPosition(start, true);
+			setCursorPosition(end, false);
+		}
+
+	}
+
+	private void setCursorPosition(int pos, boolean moveAnchor) {
+		QTextCursor textCursor = getQTextEdit().textCursor();
+		textCursor.setPosition(pos, moveAnchor ? MoveMode.MoveAnchor : MoveMode.KeepAnchor);
+		getQTextEdit().setTextCursor(textCursor);
+	}
+
+	/**
+	 * Sets the selection to the range specified by the given point, where the x
+	 * coordinate represents the start index and the y coordinate represents the
+	 * end index.
+	 * <p>
+	 * Indexing is zero based. The range of a selection is from 0..N where N is
+	 * the number of characters in the widget.
+	 * </p>
+	 * <p>
+	 * Text selections are specified in terms of caret positions. In a text
+	 * widget that contains N characters, there are N+1 caret positions, ranging
+	 * from 0..N. This differs from other functions that address character
+	 * position such as getText () that use the usual array indexing rules.
+	 * </p>
+	 * 
+	 * @param selection
+	 *            the point
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(Point selection) {
+		checkWidget();
+		if (selection == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setSelection(selection.x, selection.y);
+	}
+
+	/**
+	 * Sets the number of tabs.
+	 * <p>
+	 * Tab stop spacing is specified in terms of the space (' ') character. The
+	 * width of a single tab stop is the pixel width of the spaces.
+	 * </p>
+	 * 
+	 * @param tabs
+	 *            the number of tabs
+	 * 
+	 *            </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setTabs(int tabs) {
+		checkWidget();
+		if (tabs < 0) {
+			return;
+		}
+		this.tabs = tabs;
+		setTabStops(this.tabs);
+	}
+
+	void setTabStops(int tabs) {
+		if (!isSingleLineEdit()) {
+			getQTextEdit().setTabStopWidth(getQTextEdit().fontMetrics().width(" ") * tabs);//$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Sets the contents of the receiver to the given string. If the receiver
+	 * has style SINGLE and the argument contains multiple lines of text, the
+	 * result of this operation is undefined and may vary from platform to
+	 * platform.
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		string = Display.withCrLf(string);
+		if (isSingleLineEdit()) {
+			getQLineEdit().setText(string);
+		} else {
+			getQTextEdit().setText(string);
+		}
+	}
+
+	/**
+	 * Sets the maximum number of characters that the receiver is capable of
+	 * holding to be the argument.
+	 * <p>
+	 * Instead of trying to set the text limit to zero, consider creating a
+	 * read-only text widget.
+	 * </p>
+	 * <p>
+	 * To reset this value to the default, use
+	 * <code>setTextLimit(Text.LIMIT)</code>. Specifying a limit value larger
+	 * than <code>Text.LIMIT</code> sets the receiver's limit to
+	 * <code>Text.LIMIT</code>.
+	 * </p>
+	 * 
+	 * @param limit
+	 *            new text limit
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #LIMIT
+	 */
+	public void setTextLimit(int limit) {
+		checkWidget();
+		if (limit == 0) {
+			error(SWT.ERROR_CANNOT_BE_ZERO);
+		}
+
+		if (limit < 0 || limit > LIMIT) {
+			limit = LIMIT;
+		}
+
+		if (isSingleLineEdit()) {
+			getQLineEdit().setMaxLength(limit);
+		} else {
+			textLimit = limit;
+			if (getCharCount() > limit) {
+				getQTextEdit().setPlainText(getText().substring(0, limit));
+			}
+		}
+	}
+
+	/**
+	 * Sets the zero-relative index of the line which is currently at the top of
+	 * the receiver. This index can change when lines are scrolled or new lines
+	 * are added and removed.
+	 * 
+	 * @param index
+	 *            the index of the top item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setTopIndex(int index) {
+		checkWidget();
+		if (!isSingleLineEdit()) {
+			index = Math.min(Math.max(index, 0), getLineCount() - 1);
+			QScrollBar scrollBar = getQTextEdit().verticalScrollBar();
+			QTextDocument textDocument = getQTextEdit().document();
+			if (scrollBar != null && textDocument != null) {
+				if (index == 0) {
+					scrollBar.setValue(0);
+				} else {
+					QTextBlock textBlock = textDocument.begin();
+					int lineCount = 0;
+					while (textBlock.isValid()) {
+						QTextLayout layout = textBlock.layout();
+						if (layout != null) {
+							int oldLineCount = lineCount;
+							int lines = layout.lineCount();
+							lineCount += lines > 0 ? lines : 1;
+							if (index < lineCount) {
+								int linePosition = (int) Math.round(layout.position().y()
+										+ layout.lineAt(index - oldLineCount).y());
+								scrollBar.setValue(linePosition);
+								break;
+							}
+						}
+						textBlock = textBlock.next();
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows the selection.
+	 * <p>
+	 * If the selection is already showing in the receiver, this method simply
+	 * returns. Otherwise, lines are scrolled until the selection is visible.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void showSelection() {
+		checkWidget();
+		if (!isSingleLineEdit()) {
+			getQTextEdit().ensureCursorVisible();
+		}
+	}
+
+	private final class MyQTextEdit extends QTextEdit {
+
+		@Override
+		protected void mousePressEvent(QMouseEvent e) {
+			super.mousePressEvent(e);
+			e.setAccepted(false);
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolBar.java
new file mode 100644
index 0000000..3e7a1a1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolBar.java	
@@ -0,0 +1,530 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.List;
+
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.Qt.ContextMenuPolicy;
+import com.trolltech.qt.core.Qt.Orientation;
+import com.trolltech.qt.core.Qt.ToolButtonStyle;
+import com.trolltech.qt.gui.QAction;
+import com.trolltech.qt.gui.QToolBar;
+import com.trolltech.qt.gui.QWidget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class support the layout of selectable tool bar items.
+ * <p>
+ * The item children that may be added to instances of this class must be of
+ * type <code>ToolItem</code>.
+ * </p>
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>, it
+ * does not make sense to add <code>Control</code> children to it, or set a
+ * layout on it.
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>FLAT, WRAP, RIGHT, HORIZONTAL, VERTICAL, SHADOW_OUT</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ToolBar extends Composite {
+	/*
+	 * From the Windows SDK for TB_SETBUTTONSIZE:
+	 * 
+	 * "If an application does not explicitly set the button size, the size
+	 * defaults to 24 by 22 pixels".
+	 */
+	private static final int DEFAULT_WIDTH = 24;
+	private static final int DEFAULT_HEIGHT = 22;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#FLAT
+	 * @see SWT#WRAP
+	 * @see SWT#RIGHT
+	 * @see SWT#HORIZONTAL
+	 * @see SWT#SHADOW_OUT
+	 * @see SWT#VERTICAL
+	 * @see Widget#checkSubclass()
+	 * @see Widget#getStyle()
+	 */
+	public ToolBar(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected QWidget createQWidget(int style) {
+		state &= ~CANVAS;
+		QToolBar toolbar = new QToolBar();
+		initOrientation(toolbar, style);
+		toolbar.setStyleSheet("QToolBar { border: 0px; margin: 0px;}"); //$NON-NLS-1$ // background-color: #234; 
+		toolbar.setContentsMargins(0, 0, 0, 0);
+		toolbar.setIconSize(new QSize(16, 16));
+		toolbar.setToolButtonStyle(ToolButtonStyle.ToolButtonTextBesideIcon);
+		toolbar.setContextMenuPolicy(ContextMenuPolicy.CustomContextMenu);
+		toolbar.setMovable(false);
+		toolbar.setFloatable(false);
+		toolbar.resize(0, 0);
+		// TODO if ( ( style & SWT.RIGHT ) != 0 ) {
+		// TODO if ( ( style & SWT.SHADOW_OUT ) != 0 ) {
+		// Visually, the tool bar is often separated from the menu bar by a separator.
+		// SWT.SHADOW_OUT style was defined for ToolBar. This style causes tool bars to draw the appropriate separator.
+		// On the Macintosh and platforms that do not support this look, the separator is not drawn.
+
+		// if ( ( style & SWT.WRAP ) != 0 )
+		// qt does not support wrapped mode! :(
+
+		return toolbar;
+	}
+
+	private void initOrientation(QToolBar toolbar, int style) {
+		if ((style & SWT.VERTICAL) != 0) {
+			toolbar.setOrientation(Orientation.Vertical);
+			this.style |= SWT.VERTICAL;
+		} else {
+			this.style |= SWT.HORIZONTAL;
+			toolbar.setOrientation(Orientation.Horizontal);
+		}
+	}
+
+	QToolBar getQToolBar() {
+		return (QToolBar) getQWidget();
+	}
+
+	void addAction(QAction action, int index) {
+		int itemCount = _getItemCount();
+		if (index >= 0 && index < itemCount) {
+			QAction before = getItems()[index].getQAction();
+			getQToolBar().insertAction(before, action);
+		} else {
+			getQToolBar().addAction(action);
+		}
+	}
+
+	QAction addWidget(QWidget widget, int index) {
+		int itemCount = _getItemCount();
+		QAction action;
+		if (index >= 0 && index < itemCount) {
+			QAction before = getItems()[index].getQAction();
+			action = getQToolBar().insertWidget(before, widget);
+		} else {
+			action = getQToolBar().addWidget(widget);
+		}
+		return action;
+	}
+
+	QWidget removeAction(QAction action) {
+		QWidget widget = null;
+		if (getQToolBar() != null) {
+			widget = getQToolBar().widgetForAction(action);
+			getQToolBar().removeAction(action);
+		}
+		return widget;
+	}
+
+	static int checkStyle(int style) {
+		/*
+		 * On Windows, only flat tool bars can be traversed.
+		 */
+		if ((style & SWT.FLAT) == 0) {
+			style |= SWT.NO_FOCUS;
+		}
+
+		/*
+		 * A vertical tool bar cannot wrap because TB_SETROWS fails when the
+		 * toolbar has TBSTYLE_WRAPABLE.
+		 */
+		if ((style & SWT.VERTICAL) != 0) {
+			style &= ~SWT.WRAP;
+		}
+
+		return style;
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		Point size = super.computeSize(wHint, hHint, changed);
+		int width = size.x;
+		int height = size.y;
+
+		if (width == 0) {
+			width = DEFAULT_WIDTH;
+		}
+		if (height == 0) {
+			height = DEFAULT_HEIGHT;
+		}
+		if (wHint != SWT.DEFAULT) {
+			width = wHint;
+		}
+		if (hHint != SWT.DEFAULT) {
+			height = hHint;
+		}
+		Rectangle trim = computeTrim(0, 0, width, height);
+		width = trim.width;
+		height = trim.height;
+		return new Point(width, height);
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public ToolItem getItem(int index) {
+		checkWidget();
+		List<QAction> list = getQWidget().actions();
+		int count = list.size();
+		if (!(0 <= index && index < count)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		Widget widget = display.findControl(list.get(index));
+		if (widget == null || !ToolItem.class.isInstance(widget)) {
+			error(SWT.ERROR_CANNOT_GET_ITEM);
+		}
+		return (ToolItem) widget;
+	}
+
+	/**
+	 * Returns the item at the given point in the receiver or null if no such
+	 * item exists. The point is in the coordinate system of the receiver.
+	 * 
+	 * @param point
+	 *            the point used to locate the item
+	 * @return the item at the given point
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public ToolItem getItem(Point point) {
+		checkWidget();
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		ToolItem[] items = getItems();
+		for (int i = 0; i < items.length; i++) {
+			Rectangle rect = items[i].getBounds();
+			if (rect.contains(point)) {
+				return items[i];
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return _getItemCount();
+	}
+
+	int _getItemCount() {
+		return getQWidget().actions().size();
+	}
+
+	/**
+	 * Returns an array of <code>ToolItem</code>s which are the items in the
+	 * receiver.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public ToolItem[] getItems() {
+		checkWidget();
+		List<QAction> list = getQWidget().actions();
+		int count = list.size();
+		if (count == 0) {
+			return new ToolItem[0];
+		}
+		ToolItem[] children = new ToolItem[count];
+		int items = 0;
+		for (QAction action : list) {
+			if (action != null) {
+				Widget widget = display.findControl(action);
+				if (widget != null && widget != this) {
+					if (widget instanceof ToolItem) {
+						children[items++] = (ToolItem) widget;
+					}
+				}
+			}
+		}
+		if (items == count) {
+			return children;
+		}
+		ToolItem[] newChildren = new ToolItem[items];
+		System.arraycopy(children, 0, newChildren, 0, items);
+		return newChildren;
+	}
+
+	/**
+	 * Returns the number of rows in the receiver. When the receiver has the
+	 * <code>WRAP</code> style, the number of rows can be greater than one.
+	 * Otherwise, the number of rows is always one.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getRowCount() {
+		checkWidget();
+		if ((style & SWT.VERTICAL) != 0) {
+			return _getItemCount();
+		}
+		return 1;
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item (index 0) until
+	 * an item is found that is equal to the argument, and returns the index of
+	 * that item. If no item is found, returns -1.
+	 * 
+	 * @param item
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the tool item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the tool item has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int indexOf(ToolItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		return getQToolBar().actions().indexOf(item.getQAction());
+	}
+
+	@Override
+	boolean mnemonicHit(char ch) {
+		//TODO
+		//		int key = Display.wcsToMbcs(ch);
+		//		int[] id = new int[1];
+		//		if (OS.SendMessage(handle, OS.TB_MAPACCELERATOR, key, id) == 0) {
+		//			return false;
+		//		}
+		//		if ((style & SWT.FLAT) != 0 && !setTabGroupFocus())
+		//			return false;
+		//		int index = (int) /* 64 */OS.SendMessage(handle, OS.TB_COMMANDTOINDEX, id[0], 0);
+		//		if (index == -1)
+		//			return false;
+		//		OS.SendMessage(handle, OS.TB_SETHOTITEM, index, 0);
+		//		items[id[0]].click(false);
+		return true;
+	}
+
+	@Override
+	boolean mnemonicMatch(char ch) {
+		//TODO
+		//		int key = Display.wcsToMbcs(ch);
+		//		int[] id = new int[1];
+		//		if (OS.SendMessage(handle, OS.TB_MAPACCELERATOR, key, id) == 0) {
+		//			return false;
+		//		}
+		//		/*
+		//		 * Feature in Windows. TB_MAPACCELERATOR matches either the mnemonic
+		//		 * character or the first character in a tool item. This behavior is
+		//		 * undocumented and unwanted. The fix is to ensure that the tool item
+		//		 * contains a mnemonic when TB_MAPACCELERATOR returns true.
+		//		 */
+		//		int index = (int) /* 64 */OS.SendMessage(handle, OS.TB_COMMANDTOINDEX, id[0], 0);
+		//		if (index == -1)
+		//			return false;
+		//		return findMnemonic(items[id[0]].text) != '\0';
+		return true;
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		ToolItem[] items = getItems();
+		for (int i = 0; i < items.length; i++) {
+			ToolItem item = items[i];
+			if (item != null && !item.isDisposed()) {
+				item.release(false);
+			}
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void removeControl(Control control) {
+		super.removeControl(control);
+		for (ToolItem item : getItems()) {
+			if (item != null && item.hasControl(control)) {
+				item.setControl(null);
+			}
+		}
+	}
+
+	@Override
+	public boolean setParent(Composite parent) {
+		checkWidget();
+		if (!super.setParent(parent)) {
+			return false;
+		}
+		getQToolBar().setParent(parent.getQWidget());
+		return true;
+	}
+
+	@Override
+	boolean setTabItemFocus() {
+		int index = 0;
+		ToolItem[] items = getItems();
+		while (index < items.length) {
+			ToolItem item = items[index];
+			if (item != null && (item.style & SWT.SEPARATOR) == 0) {
+				if (item.getEnabled()) {
+					break;
+				}
+			}
+			index++;
+		}
+		if (index == items.length) {
+			return false;
+		}
+		return super.setTabItemFocus();
+	}
+
+	@Override
+	public String toString() {
+		String s = getName() + "{items: #" + getItemCount() + ":"; //$NON-NLS-1$ //$NON-NLS-2$
+		for (ToolItem item : getItems()) {
+			s += item + " " + getQToolBar().widgetForAction(item.getQAction()) + ", "; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return s + "}"; //$NON-NLS-1$
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolItem.java
new file mode 100644
index 0000000..64f62f9
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolItem.java	
@@ -0,0 +1,981 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.QRect;
+import com.trolltech.qt.core.Qt.ContextMenuPolicy;
+import com.trolltech.qt.core.Qt.MouseButton;
+import com.trolltech.qt.gui.QAction;
+import com.trolltech.qt.gui.QIcon;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QStyle;
+import com.trolltech.qt.gui.QStyleOptionToolButton;
+import com.trolltech.qt.gui.QToolBar;
+import com.trolltech.qt.gui.QToolButton;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QIcon.Mode;
+import com.trolltech.qt.gui.QStyle.ComplexControl;
+import com.trolltech.qt.gui.QToolButton.ToolButtonPopupMode;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * represents a button in a tool bar.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>PUSH, CHECK, RADIO, SEPARATOR, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles CHECK, PUSH, RADIO, SEPARATOR and DROP_DOWN may
+ * be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ToolItem extends Item {
+	private ToolBar parent;
+	private Control control;
+	private Image disabledImage, hotImage;
+	private QAction action;
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>ToolBar</code>) and a style value describing its behavior and
+	 * appearance. The item is added to the end of the items maintained by its
+	 * parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#PUSH
+	 * @see SWT#CHECK
+	 * @see SWT#RADIO
+	 * @see SWT#SEPARATOR
+	 * @see SWT#DROP_DOWN
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public ToolItem(ToolBar parent, int style) {
+		this(parent, style, -1);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>ToolBar</code>), a style value describing its behavior and
+	 * appearance, and the index at which to place it in the items maintained by
+	 * its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#PUSH
+	 * @see SWT#CHECK
+	 * @see SWT#RADIO
+	 * @see SWT#SEPARATOR
+	 * @see SWT#DROP_DOWN
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public ToolItem(ToolBar parent, int style, int index) {
+		super(parent, checkStyle(style));
+		this.parent = parent;
+		action = createAndAddAction(style, index);
+		connectSignals(action);
+	}
+
+	protected QAction createAndAddAction(int style, int index) {
+		QAction action;
+		int bits = SWT.CHECK | SWT.RADIO | SWT.PUSH | SWT.SEPARATOR | SWT.DROP_DOWN;
+		switch (style & bits) {
+		case SWT.SEPARATOR:
+			action = createAndAddSeparator(index);
+			break;
+		case SWT.DROP_DOWN:
+			action = createAndAddDropdownButton(index);
+			break;
+		case SWT.RADIO:
+			// if ( parent.actionGroup == null ) {
+			// parent.actionGroup = new QActionGroup( parent.getQtControl()
+			// );
+			// if ( ( parent.style & SWT.NO_RADIO_GROUP ) != 0 ) {
+			// parent.actionGroup.setExclusive( false );
+			// }
+			// }
+			// parent.actionGroup.addAction( action );
+		case SWT.CHECK:
+			action = createAndAddCheckableAction(index);
+			break;
+		case SWT.PUSH:
+		default:
+			action = createAndAddAction(index);
+			break;
+		}
+
+		display.addControl(action, this);
+
+		QWidget toolWidget = getQToolBar().widgetForAction(action);
+		toolWidget.setContextMenuPolicy(ContextMenuPolicy.NoContextMenu);
+		display.addControl(toolWidget, this);
+
+		return action;
+	}
+
+	private QAction createAndAddSeparator(int index) {
+		QAction action = createAction();
+		action.setSeparator(true);
+		addToToolbar(action, index);
+		return action;
+	}
+
+	private void addToToolbar(QAction action, int index) {
+		parent.addAction(action, index);
+	}
+
+	private QAction createAction() {
+		return new QAction(parent.getQWidget());
+	}
+
+	private QAction createAndAddAction(int index) {
+		QAction action = createAction();
+		addToToolbar(action, index);
+		return action;
+	}
+
+	private QAction createAndAddCheckableAction(int index) {
+		QAction action = createAction();
+		action.setCheckable(true);
+		addToToolbar(action, index);
+		return action;
+	}
+
+	private QAction createAndAddDropdownButton(int index) {
+		MyToolButton button = new MyToolButton(parent.getQWidget());
+		button.setPopupMode(ToolButtonPopupMode.MenuButtonPopup);
+		QAction action = parent.addWidget(button, index);
+		button.setDefaultAction(action);
+		return action;
+	}
+
+	QAction getQAction() {
+		return action;
+	}
+
+	QWidget getToolbarWidget() {
+		return getQToolBar().widgetForAction(action);
+	}
+
+	QToolBar getQToolBar() {
+		return parent.getQToolBar();
+	}
+
+	protected void connectSignals(QAction action) {
+		action.triggered.connect(this, "sendTriggeredEvent()"); //$NON-NLS-1$
+		action.hovered.connect(this, "sendHoveredEvent()"); //$NON-NLS-1$
+	}
+
+	protected void sendTriggeredEvent() {
+		Event event = new Event();
+		sendEvent(SWT.Selection, event);
+	}
+
+	protected void sendHoveredEvent() {
+		Event event = new Event();
+		sendEvent(SWT.Arm, event);
+	}
+
+	protected void sendShowDropDownEvent() {
+		Event event = new Event();
+		event.detail = SWT.ARROW;
+
+		Rectangle rect = getBounds();
+		event.x = rect.x;
+		event.y = rect.y + rect.height;
+
+		sendEvent(SWT.Selection, event);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called when the mouse is over the
+	 * arrow portion of a drop-down tool, the event object detail field contains
+	 * the value <code>SWT.ARROW</code>. <code>widgetDefaultSelected</code> is
+	 * not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the control is
+	 *            selected by the user,
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.DROP_DOWN, 0);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	void click(boolean dropDown) {
+		if (dropDown) {
+			sendShowDropDownEvent();
+		} else {
+			getQAction().trigger();
+		}
+	}
+
+	@Override
+	void destroyWidget() {
+		QWidget toolWidget = parent.removeAction(action);
+		if (toolWidget != null) {
+			toolWidget.disconnect();
+			display.removeControl(toolWidget);
+		}
+		super.destroyWidget();
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent.
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Rectangle getBounds() {
+		checkWidget();
+		return QtSWTConverter.convert(getQToolBar().actionGeometry(getQAction()));
+	}
+
+	/**
+	 * Returns the control that is used to fill the bounds of the item when the
+	 * item is a <code>SEPARATOR</code>.
+	 * 
+	 * @return the control
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Control getControl() {
+		checkWidget();
+		return control;
+	}
+
+	boolean hasControl(Control control) {
+		return this.control == control;
+	}
+
+	/**
+	 * Returns the receiver's disabled image if it has one, or null if it does
+	 * not.
+	 * <p>
+	 * The disabled image is displayed when the receiver is disabled.
+	 * </p>
+	 * 
+	 * @return the receiver's disabled image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Image getDisabledImage() {
+		checkWidget();
+		return disabledImage;
+	}
+
+	/**
+	 * Returns the receiver's hot image if it has one, or null if it does not.
+	 * <p>
+	 * The hot image is displayed when the mouse enters the receiver.
+	 * </p>
+	 * 
+	 * @return the receiver's hot image
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Image getHotImage() {
+		checkWidget();
+		return hotImage;
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>ToolBar</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public ToolBar getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is selected, and false
+	 * otherwise.
+	 * <p>
+	 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, it
+	 * is selected when it is checked (which some platforms draw as a pushed in
+	 * button). If the receiver is of any other type, this method returns false.
+	 * </p>
+	 * 
+	 * @return the selection state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getSelection() {
+		checkWidget();
+		return getQAction().isChecked();
+	}
+
+	/**
+	 * Returns the receiver's tool tip text, or null if it has not been set.
+	 * 
+	 * @return the receiver's tool tip text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getToolTipText() {
+		checkWidget();
+		return getQAction().toolTip();
+	}
+
+	/**
+	 * Gets the width of the receiver.
+	 * 
+	 * @return the width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getWidth() {
+		checkWidget();
+		return getQToolBar().actionGeometry(getQAction()).width();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled and all of the
+	 * receiver's ancestors are enabled, and <code>false</code> otherwise. A
+	 * disabled control is typically not selectable from the user interface and
+	 * draws with an inactive or "grayed" look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getEnabled
+	 */
+	public boolean isEnabled() {
+		checkWidget();
+		return getEnabled() && parent.isEnabled();
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		control = null;
+		disabledImage = null;
+		hotImage = null;
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		parent.removeAction(action);
+		action = null;
+		parent = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	void resizeControl() {
+		if (control != null && !control.isDisposed()) {
+			/*
+			 * Set the size and location of the control separately to minimize
+			 * flashing in the case where the control does not resize to the
+			 * size that was requested. This case can occur when the control is
+			 * a combo box.
+			 */
+			Rectangle itemRect = getBounds();
+			control.setSize(itemRect.width, itemRect.height);
+			Rectangle rect = control.getBounds();
+			rect.x = itemRect.x + (itemRect.width - rect.width) / 2;
+			rect.y = itemRect.y + (itemRect.height - rect.height) / 2;
+			control.setLocation(rect.x, rect.y);
+		}
+	}
+
+	void selectRadio() {
+		int index = 0;
+		ToolItem[] items = parent.getItems();
+		while (index < items.length && items[index] != this) {
+			index++;
+		}
+		int i = index - 1;
+		while (i >= 0 && items[i].setRadioSelection(false)) {
+			--i;
+		}
+		int j = index + 1;
+		while (j < items.length && items[j].setRadioSelection(false)) {
+			j++;
+		}
+		setSelection(true);
+	}
+
+	/**
+	 * Sets the control that is used to fill the bounds of the item when the
+	 * item is a <code>SEPARATOR</code>.
+	 * 
+	 * @param control
+	 *            the new control
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the control has been
+	 *                disposed</li>
+	 *                <li>ERROR_INVALID_PARENT - if the control is not in the
+	 *                same widget tree</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setControl(Control control) {
+		checkWidget();
+		if (control != null) {
+			if (control.isDisposed()) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			if (control.parent != parent) {
+				error(SWT.ERROR_INVALID_PARENT);
+			}
+		}
+		if ((style & SWT.SEPARATOR) == 0) {
+			return;
+		}
+		this.control = control;
+		QAction newAction = getQToolBar().insertWidget(getQAction(), control.getQWidget());
+		getQToolBar().removeAction(getQAction());
+		newAction.setEnabled(action.isEnabled());
+		newAction.setText(action.text());
+		newAction.setToolTip(action.toolTip());
+		newAction.setChecked(action.isChecked());
+		updateImages();
+		action = newAction;
+		resizeControl();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is enabled, and
+	 * <code>false</code> otherwise. A disabled control is typically not
+	 * selectable from the user interface and draws with an inactive or "grayed"
+	 * look.
+	 * 
+	 * @return the receiver's enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #isEnabled
+	 */
+	public boolean getEnabled() {
+		checkWidget();
+		return getQAction().isEnabled();
+	}
+
+	/**
+	 * Enables the receiver if the argument is <code>true</code>, and disables
+	 * it otherwise.
+	 * <p>
+	 * A disabled control is typically not selectable from the user interface
+	 * and draws with an inactive or "grayed" look.
+	 * </p>
+	 * 
+	 * @param enabled
+	 *            the new enabled state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setEnabled(boolean enabled) {
+		checkWidget();
+		getQAction().setEnabled(enabled);
+	}
+
+	/**
+	 * Sets the receiver's disabled image to the argument, which may be null
+	 * indicating that no disabled image should be displayed.
+	 * <p>
+	 * The disabled image is displayed when the receiver is disabled.
+	 * </p>
+	 * 
+	 * @param image
+	 *            the disabled image to display on the receiver (may be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setDisabledImage(Image image) {
+		checkWidget();
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		disabledImage = image;
+		updateImages();
+	}
+
+	/**
+	 * Sets the receiver's hot image to the argument, which may be null
+	 * indicating that no hot image should be displayed.
+	 * <p>
+	 * The hot image is displayed when the mouse enters the receiver.
+	 * </p>
+	 * 
+	 * @param image
+	 *            the hot image to display on the receiver (may be null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setHotImage(Image image) {
+		checkWidget();
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		hotImage = image;
+		updateImages();
+	}
+
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		super.setImage(image);
+		updateImages();
+	}
+
+	private void updateImages() {
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+
+		if (image == null && disabledImage == null && hotImage == null) {
+			getQAction().setIcon((QIcon) null);
+			return;
+		}
+
+		QIcon icon = new QIcon();
+		if (image != null) {
+			icon.addPixmap(image.getQPixmap());
+		}
+
+		if (disabledImage != null) {
+			icon.addPixmap(disabledImage.getQPixmap(), Mode.Disabled);
+		}
+
+		if (hotImage != null) {
+			icon.addPixmap(hotImage.getQPixmap(), Mode.Selected);
+		}
+		getQAction().setIcon(icon);
+	}
+
+	boolean setRadioSelection(boolean value) {
+		if ((style & SWT.RADIO) == 0) {
+			return false;
+		}
+		if (getSelection() != value) {
+			setSelection(value);
+			postEvent(SWT.Selection);
+		}
+		return true;
+	}
+
+	/**
+	 * Sets the selection state of the receiver.
+	 * <p>
+	 * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>, it
+	 * is selected when it is checked (which some platforms draw as a pushed in
+	 * button).
+	 * </p>
+	 * 
+	 * @param selected
+	 *            the new selection state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setSelection(boolean selected) {
+		checkWidget();
+		if ((style & (SWT.CHECK | SWT.RADIO)) == 0) {
+			return;
+		}
+		getQAction().setChecked(selected);
+	}
+
+	/**
+	 * Sets the receiver's text. The string may include the mnemonic character.
+	 * </p>
+	 * <p>
+	 * Mnemonics are indicated by an '&' that causes the next character to
+	 * be the mnemonic. When the user presses a key sequence that matches the
+	 * mnemonic, a selection event occurs. On most platforms, the mnemonic
+	 * appears underlined but may be emphasised in a platform specific manner.
+	 * The mnemonic indicator character '&' can be escaped by doubling it in
+	 * the string, causing a single '&' to be displayed.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	@Override
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if ((style & SWT.SEPARATOR) != 0) {
+			return;
+		}
+		if (string.equals(text)) {
+			return;
+		}
+		super.setText(string);
+		getQAction().setText(string);
+	}
+
+	/**
+	 * Sets the receiver's tool tip text to the argument, which may be null
+	 * indicating that the default tool tip for the control will be shown. For a
+	 * control that has a default tool tip, such as the Tree control on Windows,
+	 * setting the tool tip text to an empty string replaces the default,
+	 * causing no tool tip text to be shown.
+	 * <p>
+	 * The mnemonic indicator (character '&') is not displayed in a tool
+	 * tip. To display a single '&' in the tool tip, the character '&'
+	 * can be escaped by doubling it in the string.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new tool tip text (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setToolTipText(String string) {
+		checkWidget();
+		getQAction().setToolTip(string);
+	}
+
+	/**
+	 * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
+	 * 
+	 * @param width
+	 *            the new width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setWidth(int width) {
+		checkWidget();
+		if ((style & SWT.SEPARATOR) == 0) {
+			return;
+		}
+		if (width < 0) {
+			return;
+		}
+		QWidget widget = getQToolBar().widgetForAction(getQAction());
+		widget.resize(width, widget.height());
+	}
+
+	@Override
+	public String toString() {
+		return getName() + "{text: " + getQAction().text() + ", tooltip: " + getQAction().toolTip() + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	}
+
+	/**
+	 * Subclassed QToolButton, to override drop down handling. We check for
+	 * clicks on the arrow an the right side of the button and show our own
+	 * drop-down menu, ignoring the default menu.
+	 */
+	private final class MyToolButton extends QToolButton {
+		public MyToolButton(QWidget parent) {
+			super(parent);
+		}
+
+		@Override
+		protected void mousePressEvent(QMouseEvent e) {
+			if (MouseButton.LeftButton.equals(e.button()) && ToolButtonPopupMode.MenuButtonPopup.equals(popupMode())) {
+				QStyleOptionToolButton opt = new QStyleOptionToolButton();
+				initStyleOption(opt);
+				QRect popupr = style().subControlRect(ComplexControl.CC_ToolButton, opt,
+						QStyle.SubControl.SC_ToolButtonMenu, this);
+				if (popupr.isValid() && popupr.contains(e.pos())) {
+					sendShowDropDownEvent();
+					return;
+				}
+			}
+			super.mousePressEvent(e);
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolTip.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolTip.java
new file mode 100644
index 0000000..f79ffbb
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/ToolTip.java	
@@ -0,0 +1,512 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of this class represent popup windows that are used to inform or
+ * warn the user.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BALLOON, ICON_ERROR, ICON_INFORMATION, ICON_WARNING</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, and ICON_WARNING
+ * may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tooltips">Tool Tips
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * 
+ * @since 3.2
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class ToolTip extends Widget {
+	Shell parent;
+	TrayItem item;
+	String text = ""; //$NON-NLS-1$
+	String message = ""; //$NON-NLS-1$
+	int id, x, y;
+	boolean autoHide = true, hasLocation, visible;
+	static final int TIMER_ID = 100;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#ICON_ERROR
+	 * @see SWT#ICON_INFORMATION
+	 * @see SWT#ICON_WARNING
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public ToolTip(Shell parent, int style) {
+		super(parent, checkStyle(style));
+		this.parent = parent;
+		checkAndUpdateOrientation(parent);
+		//		parent.createToolTip(this);
+	}
+
+	static int checkStyle(int style) {
+		int mask = SWT.ICON_ERROR | SWT.ICON_INFORMATION | SWT.ICON_WARNING;
+		if ((style & mask) == 0) {
+			return style;
+		}
+		return checkBits(style, SWT.ICON_INFORMATION, SWT.ICON_WARNING, SWT.ICON_ERROR, 0, 0, 0);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the receiver is selected.
+	 * <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the receiver is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	@Override
+	void destroyWidget() {
+		if (parent != null) {
+			// parent.destroyToolTip( this );
+		}
+		releaseQWidget();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is automatically hidden by the
+	 * platform, and <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's auto hide state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 */
+	public boolean getAutoHide() {
+		checkWidget();
+		return autoHide;
+	}
+
+	/**
+	 * Returns the receiver's message, which will be an empty string if it has
+	 * never been set.
+	 * 
+	 * @return the receiver's message
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getMessage() {
+		checkWidget();
+		return message;
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Shell</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Shell getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns the receiver's text, which will be an empty string if it has
+	 * never been set.
+	 * 
+	 * @return the receiver's text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getText() {
+		checkWidget();
+		return text;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getVisible() {
+		checkWidget();
+		if (item != null) {
+			return visible;
+		}
+		return false;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible and all of the
+	 * receiver's ancestors are visible and <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getVisible
+	 */
+	public boolean isVisible() {
+		checkWidget();
+		if (item != null) {
+			return getVisible() && item.getVisible();
+		}
+		return getVisible();
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		parent = null;
+		item = null;
+		id = -1;
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		if (item == null) {
+			if (autoHide) {
+				// TODO
+			}
+		}
+		if (item != null && item.toolTip == this) {
+			item.toolTip = null;
+		}
+		item = null;
+		text = message = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the receiver is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Makes the receiver hide automatically when <code>true</code>, and remain
+	 * visible when <code>false</code>.
+	 * 
+	 * @param autoHide
+	 *            the auto hide state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getVisible
+	 * @see #setVisible
+	 */
+	public void setAutoHide(boolean autoHide) {
+		checkWidget();
+		this.autoHide = autoHide;
+		// TODO - update when visible
+	}
+
+	/**
+	 * Sets the location of the receiver, which must be a tooltip, to the point
+	 * specified by the arguments which are relative to the display.
+	 * <p>
+	 * Note that this is different from most widgets where the location of the
+	 * widget is relative to the parent.
+	 * </p>
+	 * 
+	 * @param x
+	 *            the new x coordinate for the receiver
+	 * @param y
+	 *            the new y coordinate for the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLocation(int x, int y) {
+		checkWidget();
+		this.x = x;
+		this.y = y;
+		hasLocation = true;
+		// TODO - update when visible
+	}
+
+	/**
+	 * Sets the location of the receiver, which must be a tooltip, to the point
+	 * specified by the argument which is relative to the display.
+	 * <p>
+	 * Note that this is different from most widgets where the location of the
+	 * widget is relative to the parent.
+	 * </p>
+	 * <p>
+	 * Note that the platform window manager ultimately has control over the
+	 * location of tooltips.
+	 * </p>
+	 * 
+	 * @param location
+	 *            the new location for the receiver
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setLocation(Point location) {
+		checkWidget();
+		if (location == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setLocation(location.x, location.y);
+	}
+
+	/**
+	 * Sets the receiver's message.
+	 * 
+	 * @param string
+	 *            the new message
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setMessage(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		message = string;
+		// TODO - update when visible
+	}
+
+	/**
+	 * Sets the receiver's text.
+	 * 
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		text = string;
+		// TODO - update when visible
+	}
+
+	/**
+	 * Marks the receiver as visible if the argument is <code>true</code>, and
+	 * marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param visible
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setVisible(boolean visible) {
+		checkWidget();
+		if (visible == getVisible()) {
+			return;
+			// TODO
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tracker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tracker.java
new file mode 100644
index 0000000..a055510
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tracker.java	
@@ -0,0 +1,859 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * Instances of this class implement rubber banding rectangles that are drawn
+ * onto a parent <code>Composite</code> or <code>Display</code>. These
+ * rectangles can be specified to respond to mouse and key events by either
+ * moving or resizing themselves accordingly. Trackers are typically used to
+ * represent window geometries in a lightweight manner.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, UP, DOWN, RESIZE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Move, Resize</dd>
+ * </dl>
+ * <p>
+ * Note: Rectangle move behavior is assumed unless RESIZE is specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tracker">Tracker
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Tracker extends Widget {
+	Control parent;
+	boolean tracking, cancelled, stippled;
+	Rectangle[] rectangles = new Rectangle[0], proportions = rectangles;
+	Rectangle bounds;
+	int /* long */resizeCursor;
+	Cursor clientCursor;
+	int cursorOrientation = SWT.NONE;
+	boolean inEvent = false;
+	int /* long */hwndTransparent, hwndOpaque, oldTransparentProc, oldOpaqueProc;
+	int oldX, oldY;
+
+	/*
+	 * The following values mirror step sizes on Windows
+	 */
+	final static int STEPSIZE_SMALL = 1;
+	final static int STEPSIZE_LARGE = 9;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a widget which will be the parent of the new instance (cannot
+	 *            be null)
+	 * @param style
+	 *            the style of widget to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#UP
+	 * @see SWT#DOWN
+	 * @see SWT#RESIZE
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Tracker(Composite parent, int style) {
+		super(parent, checkStyle(style));
+		this.parent = parent;
+	}
+
+	/**
+	 * Constructs a new instance of this class given the display to create it on
+	 * and a style value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * Note: Currently, null can be passed in for the display argument. This has
+	 * the effect of creating the tracker on the currently active display if
+	 * there is one. If there is no current display, the tracker is created on a
+	 * "default" display. <b>Passing in null as the display argument is not
+	 * considered to be good coding style, and may not be supported in a future
+	 * release of SWT.</b>
+	 * </p>
+	 * 
+	 * @param display
+	 *            the display to create the tracker on
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#UP
+	 * @see SWT#DOWN
+	 */
+	public Tracker(Display display, int style) {
+		if (display == null) {
+			display = Display.getCurrent();
+		}
+		if (display == null) {
+			display = Display.getDefault();
+		}
+		if (!display.isValidThread()) {
+			error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		this.style = checkStyle(style);
+		this.display = display;
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is moved or resized, by sending it one of the messages
+	 * defined in the <code>ControlListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #removeControlListener
+	 */
+	public void addControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Resize, typedListener);
+		addListener(SWT.Move, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when keys are pressed and released on the system keyboard, by sending it
+	 * one of the messages defined in the <code>KeyListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see KeyListener
+	 * @see #removeKeyListener
+	 */
+	public void addKeyListener(KeyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.KeyUp, typedListener);
+		addListener(SWT.KeyDown, typedListener);
+	}
+
+	Point adjustMoveCursor() {
+		if (bounds == null) {
+			return null;
+		}
+		int newX = bounds.x + bounds.width / 2;
+		int newY = bounds.y;
+		//		POINT pt = new POINT();
+		//		pt.x = newX;
+		//		pt.y = newY;
+		//		/*
+		//		 * Convert to screen coordinates iff needed
+		//		 */
+		//		if (parent != null) {
+		//			//OS.ClientToScreen(parent.handle, pt);
+		//		}
+		//		OS.SetCursorPos(pt.x, pt.y);
+		//TODO
+		return new Point(newX, newY);
+	}
+
+	Point adjustResizeCursor() {
+		if (bounds == null) {
+			return null;
+		}
+		int newX, newY;
+
+		if ((cursorOrientation & SWT.LEFT) != 0) {
+			newX = bounds.x;
+		} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+			newX = bounds.x + bounds.width;
+		} else {
+			newX = bounds.x + bounds.width / 2;
+		}
+
+		if ((cursorOrientation & SWT.UP) != 0) {
+			newY = bounds.y;
+		} else if ((cursorOrientation & SWT.DOWN) != 0) {
+			newY = bounds.y + bounds.height;
+		} else {
+			newY = bounds.y + bounds.height / 2;
+		}
+
+		//		POINT pt = new POINT();
+		//		pt.x = newX;
+		//		pt.y = newY;
+		//		/*
+		//		 * Convert to screen coordinates iff needed
+		//		 */
+		//		if (parent != null) {
+		//			//OS.ClientToScreen(parent.handle, pt);
+		//		}
+		//		OS.SetCursorPos(pt.x, pt.y);
+		//
+		//		/*
+		//		 * If the client has not provided a custom cursor then determine the
+		//		 * appropriate resize cursor.
+		//		 */
+		//		if (clientCursor == null) {
+		//			int /* long */newCursor = 0;
+		//			switch (cursorOrientation) {
+		//			case SWT.UP:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZENS);
+		//				break;
+		//			case SWT.DOWN:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZENS);
+		//				break;
+		//			case SWT.LEFT:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZEWE);
+		//				break;
+		//			case SWT.RIGHT:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZEWE);
+		//				break;
+		//			case SWT.LEFT | SWT.UP:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZENWSE);
+		//				break;
+		//			case SWT.RIGHT | SWT.DOWN:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZENWSE);
+		//				break;
+		//			case SWT.LEFT | SWT.DOWN:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZENESW);
+		//				break;
+		//			case SWT.RIGHT | SWT.UP:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZENESW);
+		//				break;
+		//			default:
+		//				newCursor = OS.LoadCursor(0, OS.IDC_SIZEALL);
+		//				break;
+		//			}
+		//			OS.SetCursor(newCursor);
+		//			if (resizeCursor != 0) {
+		//				OS.DestroyCursor(resizeCursor);
+		//			}
+		//			resizeCursor = newCursor;
+		//		}
+		//TODO
+		return new Point(newX, newY);
+	}
+
+	static int checkStyle(int style) {
+		if ((style & (SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN)) == 0) {
+			style |= SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN;
+		}
+		return style;
+	}
+
+	/**
+	 * Stops displaying the tracker rectangles. Note that this is not considered
+	 * to be a cancelation by the user.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void close() {
+		checkWidget();
+		tracking = false;
+	}
+
+	Rectangle computeBounds() {
+		if (rectangles.length == 0) {
+			return null;
+		}
+		int xMin = rectangles[0].x;
+		int yMin = rectangles[0].y;
+		int xMax = rectangles[0].x + rectangles[0].width;
+		int yMax = rectangles[0].y + rectangles[0].height;
+
+		for (int i = 1; i < rectangles.length; i++) {
+			if (rectangles[i].x < xMin) {
+				xMin = rectangles[i].x;
+			}
+			if (rectangles[i].y < yMin) {
+				yMin = rectangles[i].y;
+			}
+			int rectRight = rectangles[i].x + rectangles[i].width;
+			if (rectRight > xMax) {
+				xMax = rectRight;
+			}
+			int rectBottom = rectangles[i].y + rectangles[i].height;
+			if (rectBottom > yMax) {
+				yMax = rectBottom;
+			}
+		}
+
+		return new Rectangle(xMin, yMin, xMax - xMin, yMax - yMin);
+	}
+
+	Rectangle[] computeProportions(Rectangle[] rects) {
+		Rectangle[] result = new Rectangle[rects.length];
+		bounds = computeBounds();
+		if (bounds != null) {
+			for (int i = 0; i < rects.length; i++) {
+				int x = 0, y = 0, width = 0, height = 0;
+				if (bounds.width != 0) {
+					x = (rects[i].x - bounds.x) * 100 / bounds.width;
+					width = rects[i].width * 100 / bounds.width;
+				} else {
+					width = 100;
+				}
+				if (bounds.height != 0) {
+					y = (rects[i].y - bounds.y) * 100 / bounds.height;
+					height = rects[i].height * 100 / bounds.height;
+				} else {
+					height = 100;
+				}
+				result[i] = new Rectangle(x, y, width, height);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Draw the rectangles displayed by the tracker.
+	 */
+	void drawRectangles(Rectangle[] rects, boolean stippled) {
+		//		if (parent == null && OS.WIN32_VERSION >= OS.VERSION(6, 0)) {
+		//			RECT rect1 = new RECT();
+		//			int bandWidth = stippled ? 3 : 1;
+		//			for (int i = 0; i < rects.length; i++) {
+		//				Rectangle rect = rects[i];
+		//				rect1.left = rect.x - bandWidth;
+		//				rect1.top = rect.y - bandWidth;
+		//				rect1.right = rect.x + rect.width + bandWidth * 2;
+		//				rect1.bottom = rect.y + rect.height + bandWidth * 2;
+		//				OS.RedrawWindow(hwndOpaque, rect1, 0, OS.RDW_INVALIDATE);
+		//			}
+		//			return;
+		//		}
+		//		int bandWidth = 1;
+		//		int /* long */hwndTrack = OS.GetDesktopWindow();
+		//		if (parent != null) {
+		//			//hwndTrack = parent.handle;
+		//		}
+		//		int /* long */hDC = OS.GetDCEx(hwndTrack, 0, OS.DCX_CACHE);
+		//		int /* long */hBitmap = 0, hBrush = 0, oldBrush = 0;
+		//		if (stippled) {
+		//			bandWidth = 3;
+		//			byte[] bits = { -86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0 };
+		//			hBitmap = OS.CreateBitmap(8, 8, 1, 1, bits);
+		//			hBrush = OS.CreatePatternBrush(hBitmap);
+		//			oldBrush = OS.SelectObject(hDC, hBrush);
+		//		}
+		//		for (int i = 0; i < rects.length; i++) {
+		//			Rectangle rect = rects[i];
+		//			OS.PatBlt(hDC, rect.x, rect.y, rect.width, bandWidth, OS.PATINVERT);
+		//			OS.PatBlt(hDC, rect.x, rect.y + bandWidth, bandWidth, rect.height - bandWidth * 2, OS.PATINVERT);
+		//			OS.PatBlt(hDC, rect.x + rect.width - bandWidth, rect.y + bandWidth, bandWidth, rect.height - bandWidth * 2,
+		//					OS.PATINVERT);
+		//			OS.PatBlt(hDC, rect.x, rect.y + rect.height - bandWidth, rect.width, bandWidth, OS.PATINVERT);
+		//		}
+		//		if (stippled) {
+		//			OS.SelectObject(hDC, oldBrush);
+		//			OS.DeleteObject(hBrush);
+		//			OS.DeleteObject(hBitmap);
+		//		}
+		//		OS.ReleaseDC(hwndTrack, hDC);
+	}
+
+	/**
+	 * Returns the bounds that are being drawn, expressed relative to the parent
+	 * widget. If the parent is a <code>Display</code> then these are screen
+	 * coordinates.
+	 * 
+	 * @return the bounds of the Rectangles being drawn
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Rectangle[] getRectangles() {
+		checkWidget();
+		Rectangle[] result = new Rectangle[rectangles.length];
+		for (int i = 0; i < rectangles.length; i++) {
+			Rectangle current = rectangles[i];
+			result[i] = new Rectangle(current.x, current.y, current.width, current.height);
+		}
+		return result;
+	}
+
+	/**
+	 * Returns <code>true</code> if the rectangles are drawn with a stippled
+	 * line, <code>false</code> otherwise.
+	 * 
+	 * @return the stippled effect of the rectangles
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getStippled() {
+		checkWidget();
+		return stippled;
+	}
+
+	void moveRectangles(int xChange, int yChange) {
+		if (bounds == null) {
+			return;
+		}
+		if (xChange < 0 && (style & SWT.LEFT) == 0) {
+			xChange = 0;
+		}
+		if (xChange > 0 && (style & SWT.RIGHT) == 0) {
+			xChange = 0;
+		}
+		if (yChange < 0 && (style & SWT.UP) == 0) {
+			yChange = 0;
+		}
+		if (yChange > 0 && (style & SWT.DOWN) == 0) {
+			yChange = 0;
+		}
+		if (xChange == 0 && yChange == 0) {
+			return;
+		}
+		bounds.x += xChange;
+		bounds.y += yChange;
+		for (int i = 0; i < rectangles.length; i++) {
+			rectangles[i].x += xChange;
+			rectangles[i].y += yChange;
+		}
+	}
+
+	/**
+	 * Displays the Tracker rectangles for manipulation by the user. Returns
+	 * when the user has either finished manipulating the rectangles or has
+	 * cancelled the Tracker.
+	 * 
+	 * @return <code>true</code> if the user did not cancel the Tracker,
+	 *         <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean open() {
+		checkWidget();
+		cancelled = false;
+		tracking = true;
+
+		/*
+		 * If exactly one of UP/DOWN is specified as a style then set the cursor
+		 * orientation accordingly (the same is done for LEFT/RIGHT styles
+		 * below).
+		 */
+		int vStyle = style & (SWT.UP | SWT.DOWN);
+		if (vStyle == SWT.UP || vStyle == SWT.DOWN) {
+			cursorOrientation |= vStyle;
+		}
+		int hStyle = style & (SWT.LEFT | SWT.RIGHT);
+		if (hStyle == SWT.LEFT || hStyle == SWT.RIGHT) {
+			cursorOrientation |= hStyle;
+		}
+
+		/*
+		 * If this tracker is being created without a mouse drag then we need to
+		 * create a transparent window that fills the screen in order to get all
+		 * mouse/keyboard events that occur outside of our visible windows (ie.-
+		 * over the desktop).
+		 */
+		// TODO
+		tracking = false;
+		return !cancelled;
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		parent = null;
+		rectangles = proportions = null;
+		bounds = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is moved or resized.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #addControlListener
+	 */
+	public void removeControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Resize, listener);
+		eventTable.unhook(SWT.Move, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when keys are pressed and released on the system keyboard.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see KeyListener
+	 * @see #addKeyListener
+	 */
+	public void removeKeyListener(KeyListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.KeyUp, listener);
+		eventTable.unhook(SWT.KeyDown, listener);
+	}
+
+	void resizeRectangles(int xChange, int yChange) {
+		if (bounds == null) {
+			return;
+		}
+		/*
+		 * If the cursor orientation has not been set in the orientation of this
+		 * change then try to set it here.
+		 */
+		if (xChange < 0 && (style & SWT.LEFT) != 0 && (cursorOrientation & SWT.RIGHT) == 0) {
+			cursorOrientation |= SWT.LEFT;
+		}
+		if (xChange > 0 && (style & SWT.RIGHT) != 0 && (cursorOrientation & SWT.LEFT) == 0) {
+			cursorOrientation |= SWT.RIGHT;
+		}
+		if (yChange < 0 && (style & SWT.UP) != 0 && (cursorOrientation & SWT.DOWN) == 0) {
+			cursorOrientation |= SWT.UP;
+		}
+		if (yChange > 0 && (style & SWT.DOWN) != 0 && (cursorOrientation & SWT.UP) == 0) {
+			cursorOrientation |= SWT.DOWN;
+		}
+
+		/*
+		 * If the bounds will flip about the x or y axis then apply the
+		 * adjustment up to the axis (ie.- where bounds width/height becomes 0),
+		 * change the cursor's orientation accordingly, and flip each
+		 * Rectangle's origin (only necessary for > 1 Rectangles)
+		 */
+		if ((cursorOrientation & SWT.LEFT) != 0) {
+			if (xChange > bounds.width) {
+				if ((style & SWT.RIGHT) == 0) {
+					return;
+				}
+				cursorOrientation |= SWT.RIGHT;
+				cursorOrientation &= ~SWT.LEFT;
+				bounds.x += bounds.width;
+				xChange -= bounds.width;
+				bounds.width = 0;
+				if (proportions.length > 1) {
+					for (int i = 0; i < proportions.length; i++) {
+						Rectangle proportion = proportions[i];
+						proportion.x = 100 - proportion.x - proportion.width;
+					}
+				}
+			}
+		} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+			if (bounds.width < -xChange) {
+				if ((style & SWT.LEFT) == 0) {
+					return;
+				}
+				cursorOrientation |= SWT.LEFT;
+				cursorOrientation &= ~SWT.RIGHT;
+				xChange += bounds.width;
+				bounds.width = 0;
+				if (proportions.length > 1) {
+					for (int i = 0; i < proportions.length; i++) {
+						Rectangle proportion = proportions[i];
+						proportion.x = 100 - proportion.x - proportion.width;
+					}
+				}
+			}
+		}
+		if ((cursorOrientation & SWT.UP) != 0) {
+			if (yChange > bounds.height) {
+				if ((style & SWT.DOWN) == 0) {
+					return;
+				}
+				cursorOrientation |= SWT.DOWN;
+				cursorOrientation &= ~SWT.UP;
+				bounds.y += bounds.height;
+				yChange -= bounds.height;
+				bounds.height = 0;
+				if (proportions.length > 1) {
+					for (int i = 0; i < proportions.length; i++) {
+						Rectangle proportion = proportions[i];
+						proportion.y = 100 - proportion.y - proportion.height;
+					}
+				}
+			}
+		} else if ((cursorOrientation & SWT.DOWN) != 0) {
+			if (bounds.height < -yChange) {
+				if ((style & SWT.UP) == 0) {
+					return;
+				}
+				cursorOrientation |= SWT.UP;
+				cursorOrientation &= ~SWT.DOWN;
+				yChange += bounds.height;
+				bounds.height = 0;
+				if (proportions.length > 1) {
+					for (int i = 0; i < proportions.length; i++) {
+						Rectangle proportion = proportions[i];
+						proportion.y = 100 - proportion.y - proportion.height;
+					}
+				}
+			}
+		}
+
+		// apply the bounds adjustment
+		if ((cursorOrientation & SWT.LEFT) != 0) {
+			bounds.x += xChange;
+			bounds.width -= xChange;
+		} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+			bounds.width += xChange;
+		}
+		if ((cursorOrientation & SWT.UP) != 0) {
+			bounds.y += yChange;
+			bounds.height -= yChange;
+		} else if ((cursorOrientation & SWT.DOWN) != 0) {
+			bounds.height += yChange;
+		}
+
+		Rectangle[] newRects = new Rectangle[rectangles.length];
+		for (int i = 0; i < rectangles.length; i++) {
+			Rectangle proportion = proportions[i];
+			newRects[i] = new Rectangle(proportion.x * bounds.width / 100 + bounds.x, proportion.y * bounds.height
+					/ 100 + bounds.y, proportion.width * bounds.width / 100, proportion.height * bounds.height / 100);
+		}
+		rectangles = newRects;
+	}
+
+	/**
+	 * Sets the <code>Cursor</code> of the Tracker. If this cursor is
+	 * <code>null</code> then the cursor reverts to the default.
+	 * 
+	 * @param newCursor
+	 *            the new <code>Cursor</code> to display
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setCursor(Cursor newCursor) {
+		checkWidget();
+		clientCursor = newCursor;
+		// TODO
+		//		if (newCursor != null) {
+		//			if (inEvent) {
+		//				OS.SetCursor(clientCursor.handle);
+		//			}
+		//		}
+	}
+
+	/**
+	 * Specifies the rectangles that should be drawn, expressed relative to the
+	 * parent widget. If the parent is a Display then these are screen
+	 * coordinates.
+	 * 
+	 * @param rectangles
+	 *            the bounds of the rectangles to be drawn
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the set of rectangles is null
+	 *                or contains a null rectangle</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setRectangles(Rectangle[] rectangles) {
+		checkWidget();
+		if (rectangles == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		this.rectangles = new Rectangle[rectangles.length];
+		for (int i = 0; i < rectangles.length; i++) {
+			Rectangle current = rectangles[i];
+			if (current == null) {
+				error(SWT.ERROR_NULL_ARGUMENT);
+			}
+			this.rectangles[i] = new Rectangle(current.x, current.y, current.width, current.height);
+		}
+		proportions = computeProportions(rectangles);
+	}
+
+	/**
+	 * Changes the appearance of the line used to draw the rectangles.
+	 * 
+	 * @param stippled
+	 *            <code>true</code> if rectangle should appear stippled
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setStippled(boolean stippled) {
+		checkWidget();
+		this.stippled = stippled;
+	}
+
+	void update() {
+		if (parent == null) {
+			return;
+		}
+		if (parent != null) {
+			if (parent.isDisposed()) {
+				return;
+			}
+			Shell shell = parent.getShell();
+			shell._update();
+		} else {
+			display.update();
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TrayItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TrayItem.java
new file mode 100644
index 0000000..cdee0a4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TrayItem.java	
@@ -0,0 +1,536 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.MenuDetectListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Instances of this class represent icons that can be placed on the system tray
+ * or task bar status area.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, MenuDetect, Selection</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tray">Tray, TrayItem
+ *      snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * 
+ * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TrayItem extends Item {
+	Tray parent;
+	int id;
+	Image image2;
+	ToolTip toolTip;
+	String toolTipText;
+	boolean visible = true;
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Tray</code>) and a style value describing its behavior and
+	 * appearance. The item is added to the end of the items maintained by its
+	 * parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TrayItem(Tray parent, int style) {
+		super(parent, style);
+		this.parent = parent;
+		parent.createItem(this, parent.getItemCount());
+		createWidget();
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the receiver is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the receiver is selected
+	 * <code>widgetDefaultSelected</code> is called when the receiver is
+	 * double-clicked
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the receiver is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the platform-specific context menu trigger has occurred, by sending
+	 * it one of the messages defined in the <code>MenuDetectListener</code>
+	 * interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MenuDetectListener
+	 * @see #removeMenuDetectListener
+	 * 
+	 * @since 3.3
+	 */
+	public void addMenuDetectListener(MenuDetectListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.MenuDetect, typedListener);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	void createWidget() {
+		// TODO
+	}
+
+	@Override
+	void destroyWidget() {
+		parent.destroyItem(this);
+		releaseQWidget();
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Tray</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public Tray getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns the receiver's tool tip, or null if it has not been set.
+	 * 
+	 * @return the receiver's tool tip text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public ToolTip getToolTip() {
+		checkWidget();
+		return toolTip;
+	}
+
+	/**
+	 * Returns the receiver's tool tip text, or null if it has not been set.
+	 * 
+	 * @return the receiver's tool tip text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public String getToolTipText() {
+		checkWidget();
+		return toolTipText;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is visible and
+	 * <code>false</code> otherwise.
+	 * 
+	 * @return the receiver's visibility
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getVisible() {
+		checkWidget();
+		return visible;
+	}
+
+	void recreate() {
+		createWidget();
+		if (!visible) {
+			setVisible(false);
+		}
+		if (text.length() != 0) {
+			setText(text);
+		}
+		if (image != null) {
+			setImage(image);
+		}
+		if (toolTipText != null) {
+			setToolTipText(toolTipText);
+		}
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		parent = null;
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		if (toolTip != null) {
+			toolTip.item = null;
+		}
+		toolTip = null;
+		if (image2 != null) {
+			image2.dispose();
+		}
+		image2 = null;
+		toolTipText = null;
+		//		NOTIFYICONDATA iconData = OS.IsUnicode ? (NOTIFYICONDATA) new NOTIFYICONDATAW() : new NOTIFYICONDATAA();
+		//		iconData.cbSize = NOTIFYICONDATA.sizeof;
+		//		iconData.uID = id;
+		//		iconData.hWnd = display.hwndMessage;
+		//		OS.Shell_NotifyIcon(OS.NIM_DELETE, iconData);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the receiver is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the platform-specific context menu trigger has occurred.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see MenuDetectListener
+	 * @see #addMenuDetectListener
+	 * 
+	 * @since 3.3
+	 */
+	public void removeMenuDetectListener(MenuDetectListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.MenuDetect, listener);
+	}
+
+	/**
+	 * Sets the receiver's image.
+	 * 
+	 * @param image
+	 *            the new image
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		super.setImage(image);
+		//		if (image2 != null)
+		//			image2.dispose();
+		//		image2 = null;
+		//		QImage hIcon = null;
+		//		Image icon = image;
+		//		if (icon != null) {
+		//			switch (icon.type) {
+		//			case SWT.BITMAP:
+		//				image2 = Display.createIcon(image);
+		//				hIcon = image2.getQImage();
+		//				break;
+		//			case SWT.ICON:
+		//				hIcon = icon.getQImage();
+		//				break;
+		//			}
+		//		}
+		//getQTray().setIcon( image.getQIcon() );
+	}
+
+	/**
+	 * Sets the receiver's tool tip to the argument, which may be null
+	 * indicating that no tool tip should be shown.
+	 * 
+	 * @param toolTip
+	 *            the new tool tip (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setToolTip(ToolTip toolTip) {
+		checkWidget();
+		ToolTip oldTip = this.toolTip, newTip = toolTip;
+		if (oldTip != null) {
+			oldTip.item = null;
+		}
+		this.toolTip = newTip;
+		if (newTip != null) {
+			newTip.item = this;
+		}
+	}
+
+	/**
+	 * Sets the receiver's tool tip text to the argument, which may be null
+	 * indicating that the default tool tip for the control will be shown. For a
+	 * control that has a default tool tip, such as the Tree control on Windows,
+	 * setting the tool tip text to an empty string replaces the default,
+	 * causing no tool tip text to be shown.
+	 * <p>
+	 * The mnemonic indicator (character '&') is not displayed in a tool
+	 * tip. To display a single '&' in the tool tip, the character '&'
+	 * can be escaped by doubling it in the string.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new tool tip text (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setToolTipText(String string) {
+		checkWidget();
+		toolTipText = string;
+		//		NOTIFYICONDATA iconData = OS.IsUnicode ? (NOTIFYICONDATA) new NOTIFYICONDATAW() : new NOTIFYICONDATAA();
+		//		TCHAR buffer = new TCHAR(0, toolTipText == null ? "" : toolTipText, true);
+		//		/*
+		//		 * Note that the size of the szTip field is different in version 5.0 of
+		//		 * shell32.dll.
+		//		 */
+		//		int length = 64; //OS.SHELL32_MAJOR < 5 ? 64 : 128;
+		//		if (OS.IsUnicode) {
+		//			char[] szTip = ((NOTIFYICONDATAW) iconData).szTip;
+		//			length = Math.min(length - 1, buffer.length());
+		//			System.arraycopy(buffer.chars, 0, szTip, 0, length);
+		//		} else {
+		//			byte[] szTip = ((NOTIFYICONDATAA) iconData).szTip;
+		//			length = Math.min(length - 1, buffer.length());
+		//			System.arraycopy(buffer.bytes, 0, szTip, 0, length);
+		//		}
+		//		iconData.cbSize = NOTIFYICONDATA.sizeof;
+		//		iconData.uID = id;
+		//		//		iconData.hWnd = display.hwndMessage;
+		//		//		iconData.uFlags = OS.NIF_TIP;
+		//		//		OS.Shell_NotifyIcon(OS.NIM_MODIFY, iconData);
+	}
+
+	/**
+	 * Makes the receiver visible if the argument is <code>true</code>, and
+	 * makes it invisible otherwise.
+	 * 
+	 * @param visible
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setVisible(boolean visible) {
+		checkWidget();
+		if (this.visible == visible) {
+			return;
+		}
+		if (visible) {
+			/*
+			 * It is possible (but unlikely), that application code could have
+			 * disposed the widget in the show event. If this happens, just
+			 * return.
+			 */
+			sendEvent(SWT.Show);
+			if (isDisposed()) {
+				return;
+			}
+		}
+		this.visible = visible;
+		// TODO
+		if (!visible) {
+			sendEvent(SWT.Hide);
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tree.java
new file mode 100644
index 0000000..c9a145b
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Tree.java	
@@ -0,0 +1,1913 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.trolltech.qt.core.QModelIndex;
+import com.trolltech.qt.core.QSize;
+import com.trolltech.qt.core.Qt.DropActions;
+import com.trolltech.qt.core.Qt.ScrollBarPolicy;
+import com.trolltech.qt.core.Qt.SortOrder;
+import com.trolltech.qt.gui.QAbstractItemDelegate;
+import com.trolltech.qt.gui.QDragEnterEvent;
+import com.trolltech.qt.gui.QDragLeaveEvent;
+import com.trolltech.qt.gui.QDragMoveEvent;
+import com.trolltech.qt.gui.QDropEvent;
+import com.trolltech.qt.gui.QHeaderView;
+import com.trolltech.qt.gui.QPainter;
+import com.trolltech.qt.gui.QStyleOptionViewItem;
+import com.trolltech.qt.gui.QTreeWidget;
+import com.trolltech.qt.gui.QTreeWidgetItem;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QAbstractItemView.DragDropMode;
+import com.trolltech.qt.gui.QAbstractItemView.ScrollHint;
+import com.trolltech.qt.gui.QAbstractItemView.SelectionBehavior;
+import com.trolltech.qt.gui.QAbstractItemView.SelectionMode;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.TreeListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Instances of this class provide a selectable user interface object that
+ * displays a hierarchy of items and issues notification when an item in the
+ * hierarchy is selected.
+ * <p>
+ * The item children that may be added to instances of this class must be of
+ * type <code>TreeItem</code>.
+ * </p>
+ * <p>
+ * Style <code>VIRTUAL</code> is used to create a <code>Tree</code> whose
+ * <code>TreeItem</code>s are to be populated by the client on an on-demand
+ * basis instead of up-front. This can provide significant performance
+ * improvements for trees that are very large or for which <code>TreeItem</code>
+ * population is expensive (for example, retrieving values from an external
+ * source).
+ * </p>
+ * <p>
+ * Here is an example of using a <code>Tree</code> with style
+ * <code>VIRTUAL</code>: <code><pre>
+ *  final Tree tree = new Tree(parent, SWT.VIRTUAL | SWT.BORDER);
+ *  tree.setItemCount(20);
+ *  tree.addListener(SWT.SetData, new Listener() {
+ *      public void handleEvent(Event event) {
+ *          TreeItem item = (TreeItem)event.item;
+ *          TreeItem parentItem = item.getParentItem();
+ *          String text = null;
+ *          if (parentItem == null) {
+ *              text = "node " + tree.indexOf(item);
+ *          } else {
+ *              text = parentItem.getText() + " - " + parentItem.indexOf(item);
+ *          }
+ *          item.setText(text);
+ *          System.out.println(text);
+ *          item.setItemCount(10);
+ *      }
+ *  });
+ * </pre></code>
+ * </p>
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>, it
+ * does not normally make sense to add <code>Control</code> children to it, or
+ * set a layout on it, unless implementing something like a cell editor.
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI, CHECK, FULL_SELECTION, VIRTUAL, NO_SCROLL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection, Collapse, Expand, SetData, MeasureItem,
+ * EraseItem, PaintItem</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles SINGLE and MULTI may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem,
+ *      TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example:
+ *      ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Tree extends Composite {
+	private List<TreeItem> items;
+	private List<TreeColumn> columns;
+	TreeColumn sortColumn;
+	int sortDirection;
+	boolean customDraw;
+	private boolean linesVisible;
+	private static final int GRID_WIDTH = 1;
+	private TreeItemDelegate itemDelegate;
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#SINGLE
+	 * @see SWT#MULTI
+	 * @see SWT#CHECK
+	 * @see SWT#FULL_SELECTION
+	 * @see SWT#VIRTUAL
+	 * @see SWT#NO_SCROLL
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public Tree(Composite parent, int style) {
+		super(parent, checkStyle(style));
+	}
+
+	@Override
+	protected void connectSignals() {
+		QTreeWidget tree = getQTreeWidget();
+
+		tree.itemExpanded.connect(this, "qtTreeItemExpandedEvent(QTreeWidgetItem)"); //$NON-NLS-1$
+		tree.itemCollapsed.connect(this, "qtTreeItemCollapsedEvent(QTreeWidgetItem)"); //$NON-NLS-1$
+		tree.itemDoubleClicked.connect(this, "qtTreeItemDoubleClickedEvent(QTreeWidgetItem,Integer)"); //$NON-NLS-1$
+		tree.itemSelectionChanged.connect(this, "qtTreeSelectionChanged()"); //$NON-NLS-1$
+	}
+
+	@Override
+	QWidget createQWidget(int style) {
+		state &= ~(CANVAS | THEME_BACKGROUND);
+		items = new ArrayList<TreeItem>(4);
+		columns = new ArrayList<TreeColumn>(4);
+
+		QTreeWidget tree = new MyQTreeWidget();
+		tree.setHeaderHidden(true);
+
+		if ((style & SWT.NO_SCROLL) != 0) {
+			tree.setHorizontalScrollBarPolicy(ScrollBarPolicy.ScrollBarAlwaysOff);
+			tree.setVerticalScrollBarPolicy(ScrollBarPolicy.ScrollBarAlwaysOff);
+		}
+
+		// default value is singleSelection
+		if ((style & SWT.MULTI) != 0) {
+			tree.setSelectionMode(SelectionMode.ExtendedSelection);
+		} else {
+			tree.setSelectionMode(SelectionMode.SingleSelection);
+		}
+
+		if ((style & SWT.FULL_SELECTION) != 0) {
+			tree.setSelectionBehavior(SelectionBehavior.SelectRows);
+		} else {
+			tree.setSelectionBehavior(SelectionBehavior.SelectItems);
+		}
+
+		QAbstractItemDelegate originalItemDelegate = tree.itemDelegate();
+		itemDelegate = new TreeItemDelegate(originalItemDelegate);
+		tree.setItemDelegate(itemDelegate);
+
+		setQMasterWidget(tree);
+		return tree.viewport();
+	}
+
+	QTreeWidget getQTreeWidget() {
+		return (QTreeWidget) getQMasterWidget();
+	}
+
+	@Override
+	protected void checkAndUpdateBorder() {
+		checkAndUpdateBorder(getQMasterWidget());
+		super.checkAndUpdateBorder();
+	}
+
+	@Override
+	protected Color getDefaultBackgroundColor() {
+		return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+	}
+
+	static int checkStyle(int style) {
+		/*
+		 * Feature in Windows. Even when WS_HSCROLL or WS_VSCROLL is not
+		 * specified, Windows creates trees and tables with scroll bars. The fix
+		 * is to set H_SCROLL and V_SCROLL.
+		 * 
+		 * NOTE: This code appears on all platforms so that applications have
+		 * consistent scroll bar behavior.
+		 */
+		if ((style & SWT.NO_SCROLL) == 0) {
+			style |= SWT.H_SCROLL | SWT.V_SCROLL;
+		}
+		/*
+		 * Note: Windows only supports TVS_NOSCROLL and TVS_NOHSCROLL.
+		 */
+		if ((style & SWT.H_SCROLL) != 0 && (style & SWT.V_SCROLL) == 0) {
+			style |= SWT.V_SCROLL;
+		}
+		return checkBits(style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+	}
+
+	@Override
+	public void setDragEnabled(boolean enabled) {
+		getQTreeWidget().setDragEnabled(enabled);
+	}
+
+	@Override
+	public void setAcceptDrops(boolean accept) {
+		super.setAcceptDrops(accept);
+		getQTreeWidget().setDragDropMode(DragDropMode.DragDrop);
+		getQTreeWidget().setDropIndicatorShown(true);
+	}
+
+	public void highlightItem(TreeItem item) {
+		System.out.println("highlightItem: " + item);
+		if (item != null) {
+			getQTreeWidget().setCurrentItem(item.getQItem());
+		} else {
+			getQTreeWidget().setCurrentItem(null);
+		}
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the user changes the receiver's selection, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * When <code>widgetSelected</code> is called, the item field of the event
+	 * object is valid. If the receiver has the <code>SWT.CHECK</code> style and
+	 * the check selection changes, the event object detail field contains the
+	 * value <code>SWT.CHECK</code>. <code>widgetDefaultSelected</code> is
+	 * typically called when an item is double-clicked. The item field of the
+	 * event object is valid for default selection, but the detail field is not
+	 * used.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the user changes
+	 *            the receiver's selection
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when an item in the receiver is expanded or collapsed by sending it one
+	 * of the messages defined in the <code>TreeListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see TreeListener
+	 * @see #removeTreeListener
+	 */
+	public void addTreeListener(TreeListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Expand, typedListener);
+		addListener(SWT.Collapse, typedListener);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	/**
+	 * Clears the item at the given zero-relative index in the receiver. The
+	 * text, icon and other attributes of the item are set to the default value.
+	 * If the tree was created with the <code>SWT.VIRTUAL</code> style, these
+	 * attributes are requested again as needed.
+	 * 
+	 * @param index
+	 *            the index of the item to clear
+	 * @param all
+	 *            <code>true</code> if all child items of the indexed item
+	 *            should be cleared recursively, and <code>false</code>
+	 *            otherwise
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.2
+	 */
+	public void clear(int index, boolean all) {
+		checkWidget();
+		if (_getItemCount() == 0) {
+			return;
+		}
+		validateItemIndex(index);
+		items.get(index).clear(0, all);
+	}
+
+	private void validateItemIndex(int index) {
+		if (index < 0 || index >= _getItemCount()) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+	}
+
+	/**
+	 * Clears all the items in the receiver. The text, icon and other attributes
+	 * of the items are set to their default values. If the tree was created
+	 * with the <code>SWT.VIRTUAL</code> style, these attributes are requested
+	 * again as needed.
+	 * 
+	 * @param all
+	 *            <code>true</code> if all child items should be cleared
+	 *            recursively, and <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.2
+	 */
+	public void clearAll(boolean all) {
+		checkWidget();
+		for (TreeItem item : items) {
+			item.clear(0, all);
+		}
+	}
+
+	void addColumn(TreeColumn column, int index) {
+		int columnCount = columns.size();
+		if (!(0 <= index && index <= columnCount)) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+
+		if (index == columnCount) {
+			columns.add(column);
+		} else {
+			columns.add(index, column);
+		}
+		//		QHeaderView header = getQTreeWidget().header();
+		//		if (index >= columnCount) {
+		//			header.addAction(column.getQAction());
+		//		} else {
+		//			QAction before = header.actions().get(index);
+		//			header.insertAction(before, column.getQAction());
+		//		}
+	}
+
+	void removeColumn(TreeColumn treeColumn) {
+		columns.remove(treeColumn);
+		//getQTreeWidget().headerItem().removeAction(treeColumn.getQAction());
+	}
+
+	void addItem(TreeItem item, int index) {
+		if (index >= 0 && index < _getItemCount()) {
+			items.add(index, item);
+			getQTreeWidget().insertTopLevelItem(index, item.getQItem());
+		} else {
+			items.add(item);
+			getQTreeWidget().addTopLevelItem(item.getQItem());
+		}
+	}
+
+	void removeItem(TreeItem item) {
+		items.remove(item);
+		getQTreeWidget().invisibleRootItem().removeChild(item.getQItem());
+	}
+
+	/**
+	 * Deselects an item in the receiver. If the item was already deselected, it
+	 * remains deselected.
+	 * 
+	 * @param item
+	 *            the item to be deselected
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void deselect(TreeItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+
+		item.getQItem().setSelected(false);
+	}
+
+	/**
+	 * Deselects all selected items in the receiver.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void deselectAll() {
+		checkWidget();
+		getQTreeWidget().clearSelection();
+	}
+
+	/**
+	 * Returns the width in pixels of a grid line.
+	 * 
+	 * @return the width of a grid line in pixels
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getGridLineWidth() {
+		checkWidget();
+		return GRID_WIDTH;
+	}
+
+	/**
+	 * Returns the height of the receiver's header
+	 * 
+	 * @return the height of the header or zero if the header is not visible
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getHeaderHeight() {
+		checkWidget();
+		return getQTreeWidget().header().height();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver's header is visible, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the receiver's header's visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public boolean getHeaderVisible() {
+		checkWidget();
+		return !getQTreeWidget().isHeaderHidden();
+	}
+
+	/**
+	 * Returns the column at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range. Columns are returned in
+	 * the order that they were created. If no <code>TreeColumn</code>s were
+	 * created by the programmer, this method will throw
+	 * <code>ERROR_INVALID_RANGE</code> despite the fact that a single column of
+	 * data may be visible in the tree. This occurs when the programmer uses the
+	 * tree like a list, adding items but never creating a column.
+	 * 
+	 * @param index
+	 *            the index of the column to return
+	 * @return the column at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#getColumnOrder()
+	 * @see Tree#setColumnOrder(int[])
+	 * @see TreeColumn#getMoveable()
+	 * @see TreeColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.1
+	 */
+	public TreeColumn getColumn(int index) {
+		checkWidget();
+		if (!(0 <= index && index < columns.size())) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		return columns.get(index);
+	}
+
+	/**
+	 * Returns the number of columns contained in the receiver. If no
+	 * <code>TreeColumn</code>s were created by the programmer, this value is
+	 * zero, despite the fact that visually, one column of items may be visible.
+	 * This occurs when the programmer uses the tree like a list, adding items
+	 * but never creating a column.
+	 * 
+	 * @return the number of columns
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int getColumnCount() {
+		checkWidget();
+		return _getColumnCount();
+	}
+
+	int _getColumnCount() {
+		return columns.size();
+	}
+
+	/**
+	 * Returns an array of zero-relative integers that map the creation order of
+	 * the receiver's items to the order in which they are currently being
+	 * displayed.
+	 * <p>
+	 * Specifically, the indices of the returned array represent the current
+	 * visual order of the items, and the contents of the array represent the
+	 * creation order of the items.
+	 * </p>
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the current visual order of the receiver's items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#setColumnOrder(int[])
+	 * @see TreeColumn#getMoveable()
+	 * @see TreeColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.2
+	 */
+	public int[] getColumnOrder() {
+		checkWidget();
+		if (_getColumnCount() == 0) {
+			return new int[0];
+		}
+		int[] order = new int[_getColumnCount()];
+		QHeaderView header = getQTreeWidget().header();
+		for (int i = 0; i < order.length; i++) {
+			order[i] = header.visualIndex(i);
+		}
+		return order;
+	}
+
+	/**
+	 * Returns an array of <code>TreeColumn</code>s which are the columns in the
+	 * receiver. Columns are returned in the order that they were created. If no
+	 * <code>TreeColumn</code>s were created by the programmer, the array is
+	 * empty, despite the fact that visually, one column of items may be
+	 * visible. This occurs when the programmer uses the tree like a list,
+	 * adding items but never creating a column.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#getColumnOrder()
+	 * @see Tree#setColumnOrder(int[])
+	 * @see TreeColumn#getMoveable()
+	 * @see TreeColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.1
+	 */
+	public TreeColumn[] getColumns() {
+		checkWidget();
+		TreeColumn[] result = new TreeColumn[_getColumnCount()];
+		int i = 0;
+		for (TreeColumn col : columns) {
+			result[i] = col;
+			i++;
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public TreeItem getItem(int index) {
+		checkWidget();
+		if (index < 0 || index >= items.size()) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		return items.get(index);
+	}
+
+	/**
+	 * Returns the item at the given point in the receiver or null if no such
+	 * item exists. The point is in the coordinate system of the receiver.
+	 * <p>
+	 * The item that is returned represents an item that could be selected by
+	 * the user. For example, if selection only occurs in items in the first
+	 * column, then null is returned if the point is outside of the item. Note
+	 * that the SWT.FULL_SELECTION style hint, which specifies the selection
+	 * policy, determines the extent of the selection.
+	 * </p>
+	 * 
+	 * @param point
+	 *            the point used to locate the item
+	 * @return the item at the given point, or null if the point is not in a
+	 *         selectable item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TreeItem getItem(Point point) {
+		checkWidget();
+		if (point == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return _getItem(point);
+	}
+
+	private TreeItem _getItem(Point point) {
+		QTreeWidgetItem qItem = getQTreeWidget().itemAt(point.x, point.y);
+		for (TreeItem item : items) {
+			if (item.getQItem() == qItem) {
+				return item;
+			}
+			TreeItem ti = item.getItem(qItem);
+			if (ti != null) {
+				return ti;
+			}
+		}
+		return null;
+
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver that are direct
+	 * item children of the receiver. The number that is returned is the number
+	 * of roots in the tree.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return items.size();
+	}
+
+	int _getItemCount() {
+		return items.size();
+	}
+
+	/**
+	 * Returns the height of the area which would be used to display
+	 * <em>one</em> of the items in the tree.
+	 * 
+	 * @return the height of one item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemHeight() {
+		checkWidget();
+		int itemHeight = 0;
+		if (items.size() > 0) {
+			itemHeight = getQTreeWidget().sizeHintForRow(0);
+		} else {
+			// add dummy node and get the height
+			getQTreeWidget().addTopLevelItem(new QTreeWidgetItem());
+			itemHeight = getQTreeWidget().sizeHintForRow(0);
+			getQTreeWidget().clear();
+		}
+		return itemHeight;
+	}
+
+	/**
+	 * Returns a (possibly empty) array of items contained in the receiver that
+	 * are direct item children of the receiver. These are the roots of the
+	 * tree.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TreeItem[] getItems() {
+		checkWidget();
+		TreeItem[] arr = new TreeItem[_getItemCount()];
+		int i = 0;
+		for (TreeItem item : items) {
+			arr[i] = item;
+			i++;
+		}
+		return arr;
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver's lines are visible, and
+	 * <code>false</code> otherwise. Note that some platforms draw grid lines
+	 * while others may draw alternating row colors.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, this method may still indicate that it is
+	 * considered visible even though it may not actually be showing.
+	 * </p>
+	 * 
+	 * @return the visibility state of the lines
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public boolean getLinesVisible() {
+		checkWidget();
+		return linesVisible;
+	}
+
+	/**
+	 * Returns the receiver's parent item, which must be a <code>TreeItem</code>
+	 * or null when the receiver is a root.
+	 * 
+	 * @return the receiver's parent item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TreeItem getParentItem() {
+		checkWidget();
+		return null;
+	}
+
+	/**
+	 * Returns an array of <code>TreeItem</code>s that are currently selected in
+	 * the receiver. The order of the items is unspecified. An empty array
+	 * indicates that no items are selected.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its selection, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return an array representing the selection
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TreeItem[] getSelection() {
+		checkWidget();
+		List<QTreeWidgetItem> selectedQItems = getQTreeWidget().selectedItems();
+		if (selectedQItems.isEmpty()) {
+			return new TreeItem[0];
+		}
+
+		TreeItem[] items = new TreeItem[selectedQItems.size()];
+		int i = 0;
+		for (QTreeWidgetItem item : selectedQItems) {
+			Widget widget = display.findControl(item);
+			if (widget instanceof TreeItem) {
+				items[i] = (TreeItem) widget;
+			}
+			i++;
+		}
+		return items;
+	}
+
+	/**
+	 * Returns the number of selected items contained in the receiver.
+	 * 
+	 * @return the number of selected items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getSelectionCount() {
+		checkWidget();
+		return getQTreeWidget().selectedItems().size();
+	}
+
+	/**
+	 * Returns the column which shows the sort indicator for the receiver. The
+	 * value may be null if no column shows the sort indicator.
+	 * 
+	 * @return the sort indicator
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setSortColumn(TreeColumn)
+	 * 
+	 * @since 3.2
+	 */
+	public TreeColumn getSortColumn() {
+		checkWidget();
+		return sortColumn;
+	}
+
+	/**
+	 * Returns the direction of the sort indicator for the receiver. The value
+	 * will be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+	 * 
+	 * @return the sort direction
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setSortDirection(int)
+	 * 
+	 * @since 3.2
+	 */
+	public int getSortDirection() {
+		checkWidget();
+		return sortDirection;
+	}
+
+	/**
+	 * Returns the item which is currently at the top of the receiver. This item
+	 * can change when items are expanded, collapsed, scrolled or new items are
+	 * added or removed.
+	 * 
+	 * @return the item at the top of the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.1
+	 */
+	public TreeItem getTopItem() {
+		checkWidget();
+		return _getItem(new Point(1, 1));
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first column (index 0) until
+	 * a column is found that is equal to the argument, and returns the index of
+	 * that column. If no column is found, returns -1.
+	 * 
+	 * @param column
+	 *            the search column
+	 * @return the index of the column
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int indexOf(TreeColumn column) {
+		checkWidget();
+		if (column == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (column.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		return columns.indexOf(column);
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item (index 0) until
+	 * an item is found that is equal to the argument, and returns the index of
+	 * that item. If no item is found, returns -1.
+	 * 
+	 * @param item
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int indexOf(TreeItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		return items.indexOf(item);
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		if (items != null) {
+			for (TreeItem item : items) {
+				if (item != null && !item.isDisposed()) {
+					item.release(false);
+				}
+			}
+			items = null;
+		}
+		if (columns != null) {
+			for (TreeColumn column : columns) {
+				if (column != null && !column.isDisposed()) {
+					column.release(false);
+				}
+			}
+			columns = null;
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		customDraw = false;
+	}
+
+	/**
+	 * Removes all of the items from the receiver.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void removeAll() {
+		checkWidget();
+		List<TreeItem> copyOfItems = new ArrayList<TreeItem>(items);
+		for (TreeItem item : copyOfItems) {
+			item.dispose();
+		}
+		items.clear();
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the user changes the receiver's selection.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when items in the receiver are expanded or collapsed.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see TreeListener
+	 * @see #addTreeListener
+	 */
+	public void removeTreeListener(TreeListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Expand, listener);
+		eventTable.unhook(SWT.Collapse, listener);
+	}
+
+	/**
+	 * Display a mark indicating the point at which an item will be inserted.
+	 * The drop insert item has a visual hint to show where a dragged item will
+	 * be inserted when dropped on the tree.
+	 * 
+	 * @param item
+	 *            the insert item. Null will clear the insertion mark.
+	 * @param before
+	 *            true places the insert mark above 'item'. false places the
+	 *            insert mark below 'item'.
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setInsertMark(TreeItem item, boolean before) {
+		checkWidget();
+		//TODO d'n'd
+	}
+
+	/**
+	 * Sets the number of root-level items contained in the receiver.
+	 * 
+	 * @param count
+	 *            the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setItemCount(int count) {
+		checkWidget();
+		count = Math.max(0, count);
+		int itemCount = _getItemCount();
+		if (count == itemCount) {
+			return;
+		}
+		boolean isVirtual = (style & SWT.VIRTUAL) != 0;
+		if (!isVirtual) {
+			setRedraw(false);
+		}
+
+		if (count < itemCount) {
+			for (int i = itemCount - 1; i >= count; i--) {
+				removeItem(items.get(i));
+			}
+			return;
+		}
+		if (isVirtual) {
+			//TODO
+		} else {
+			for (int i = itemCount; i < count; i++) {
+				new TreeItem(this, SWT.NONE, i);
+			}
+		}
+		if (!isVirtual) {
+			setRedraw(true);
+		}
+	}
+
+	/**
+	 * Sets the height of the area which would be used to display <em>one</em>
+	 * of the items in the tree.
+	 * 
+	 * @param itemHeight
+	 *            the height of one item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	/* public */void setItemHeight(int itemHeight) {
+		checkWidget();
+		if (itemHeight < -1) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		itemDelegate.setHeight(itemHeight);
+		update();
+	}
+
+	/**
+	 * Marks the receiver's lines as visible if the argument is
+	 * <code>true</code>, and marks it invisible otherwise. Note that some
+	 * platforms draw grid lines while others may draw alternating row colors.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param show
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setLinesVisible(boolean show) {
+		checkWidget();
+		if (linesVisible == show) {
+			return;
+		}
+		linesVisible = show;
+		getQTreeWidget().setAlternatingRowColors(show);
+	}
+
+	/**
+	 * Selects an item in the receiver. If the item was already selected, it
+	 * remains selected.
+	 * 
+	 * @param item
+	 *            the item to be selected
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.4
+	 */
+	public void select(TreeItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		item.getQItem().setSelected(true);
+	}
+
+	/**
+	 * Selects all of the items in the receiver.
+	 * <p>
+	 * If the receiver is single-select, do nothing.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void selectAll() {
+		checkWidget();
+		getQTreeWidget().selectAll();
+	}
+
+	/**
+	 * Sets the order that the items in the receiver should be displayed in to
+	 * the given argument which is described in terms of the zero-relative
+	 * ordering of when the items were added.
+	 * 
+	 * @param order
+	 *            the new order to display the items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item order is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item order is not the
+	 *                same length as the number of items</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#getColumnOrder()
+	 * @see TreeColumn#getMoveable()
+	 * @see TreeColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.2
+	 */
+	public void setColumnOrder(int[] order) {
+		checkWidget();
+		if (order == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int columnCount = _getColumnCount();
+		if (columnCount == 0) {
+			if (order.length != 0) {
+				error(SWT.ERROR_INVALID_ARGUMENT);
+			}
+			return;
+		}
+		if (order.length != columnCount) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		QHeaderView header = getQTreeWidget().header();
+		for (int i = 0; i < columnCount; i++) {
+			int visualIndex = header.visualIndex(i);
+			header.moveSection(visualIndex, order[i]);
+		}
+	}
+
+	/**
+	 * Marks the receiver's header as visible if the argument is
+	 * <code>true</code>, and marks it invisible otherwise.
+	 * <p>
+	 * If one of the receiver's ancestors is not visible or some other condition
+	 * makes the receiver not visible, marking it visible may not actually cause
+	 * it to be displayed.
+	 * </p>
+	 * 
+	 * @param show
+	 *            the new visibility state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setHeaderVisible(boolean show) {
+		checkWidget();
+		getQTreeWidget().setHeaderHidden(!show);
+	}
+
+	/**
+	 * Sets the receiver's selection to the given item. The current selection is
+	 * cleared before the new item is selected.
+	 * <p>
+	 * If the item is not in the receiver, then it is ignored.
+	 * </p>
+	 * 
+	 * @param item
+	 *            the item to select
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setSelection(TreeItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		setSelection(new TreeItem[] { item });
+	}
+
+	/**
+	 * Sets the receiver's selection to be the given array of items. The current
+	 * selection is cleared before the new items are selected.
+	 * <p>
+	 * Items that are not in the receiver are ignored. If the receiver is
+	 * single-select and multiple items are specified, then all items are
+	 * ignored.
+	 * </p>
+	 * 
+	 * @param items
+	 *            the array of items
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if one of the items has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#deselectAll()
+	 */
+	public void setSelection(TreeItem[] items) {
+		checkWidget();
+		if (items == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		int length = items.length;
+		if (length == 0 || (style & SWT.SINGLE) != 0 && length > 1) {
+			deselectAll();
+			return;
+		}
+		getQTreeWidget().clearSelection();
+		for (TreeItem item : items) {
+			QTreeWidgetItem treeWidgetItem = item.getQItem();
+			showItem(treeWidgetItem);
+			treeWidgetItem.setSelected(true);
+		}
+	}
+
+	private void showItem(QTreeWidgetItem item) {
+		if (item.parent() != null) {
+			if (!item.parent().isExpanded()) {
+				item.parent().setExpanded(true);
+			}
+			showItem(item.parent());
+		}
+	}
+
+	/**
+	 * Sets the column used by the sort indicator for the receiver. A null value
+	 * will clear the sort indicator. The current sort column is cleared before
+	 * the new column is set.
+	 * 
+	 * @param column
+	 *            the column used by the sort indicator or <code>null</code>
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the column is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setSortColumn(TreeColumn column) {
+		checkWidget();
+		if (column != null && column.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		sortColumn = column;
+		getQTreeWidget().sortByColumn(indexOf(column), getQSortOrder());
+	}
+
+	/**
+	 * Sets the direction of the sort indicator for the receiver. The value can
+	 * be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+	 * 
+	 * @param direction
+	 *            the direction of the sort indicator
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setSortDirection(int direction) {
+		checkWidget();
+		if ((direction & (SWT.UP | SWT.DOWN)) == 0 && direction != SWT.NONE) {
+			return;
+		}
+		sortDirection = direction;
+		if (sortColumn != null && !sortColumn.isDisposed()) {
+			getQTreeWidget().sortByColumn(indexOf(sortColumn), getQSortOrder());
+		}
+	}
+
+	/**
+	 * @return
+	 */
+	private SortOrder getQSortOrder() {
+		if ((sortDirection & SWT.UP) != 0) {
+			return SortOrder.AscendingOrder;
+		}
+		return SortOrder.DescendingOrder;
+	}
+
+	/**
+	 * Sets the item which is currently at the top of the receiver. This item
+	 * can change when items are expanded, collapsed, scrolled or new items are
+	 * added or removed.
+	 * 
+	 * @param item
+	 *            the item to be shown
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#getTopItem()
+	 * 
+	 * @since 2.1
+	 */
+	public void setTopItem(TreeItem item) {
+		checkWidget();
+		if (item == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		_showItem(item, ScrollHint.PositionAtTop);
+	}
+
+	/**
+	 * Shows the column. If the column is already showing in the receiver, this
+	 * method simply returns. Otherwise, the columns are scrolled until the
+	 * column is visible.
+	 * 
+	 * @param column
+	 *            the column to be shown
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void showColumn(TreeColumn column) {
+		checkWidget();
+		if (column == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (column.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (column.parent != this) {
+			return;
+		}
+		int index = indexOf(column);
+		if (index == -1) {
+			return;
+		}
+		getQTreeWidget().scrollToItem(getQTreeWidget().headerItem().child(index), ScrollHint.EnsureVisible);
+	}
+
+	/**
+	 * Shows the item. If the item is already showing in the receiver, this
+	 * method simply returns. Otherwise, the items are scrolled and expanded
+	 * until the item is visible.
+	 * 
+	 * @param item
+	 *            the item to be shown
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#showSelection()
+	 */
+	public void showItem(TreeItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		_showItem(item, ScrollHint.EnsureVisible);
+	}
+
+	private void _showItem(TreeItem item, ScrollHint hint) {
+		getQTreeWidget().scrollToItem(item.getQItem(), hint);
+	}
+
+	/**
+	 * Shows the selection. If the selection is already showing in the receiver,
+	 * this method simply returns. Otherwise, the items are scrolled until the
+	 * selection is visible.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#showItem(TreeItem)
+	 */
+	public void showSelection() {
+		checkWidget();
+		List<QTreeWidgetItem> selection = getQTreeWidget().selectedItems();
+		if (selection != null && selection.size() > 0) {
+			getQTreeWidget().scrollToItem(selection.get(0), ScrollHint.EnsureVisible);
+		}
+	}
+
+	boolean sendTreeEvent(int eventType, QTreeWidgetItem item) {
+		Event event = new Event();
+		event.item = display.findControl(item);
+		sendEvent(eventType, event, true);
+		return !event.doit;
+	}
+
+	public boolean qtTreeItemCollapsedEvent(QTreeWidgetItem item) {
+		return sendTreeEvent(SWT.Collapse, item);
+	}
+
+	public boolean qtTreeItemExpandedEvent(QTreeWidgetItem item) {
+		return sendTreeEvent(SWT.Expand, item);
+	}
+
+	public void qtTreeItemDoubleClickedEvent(QTreeWidgetItem item, Integer column) {
+		sendEvent(SWT.DefaultSelection);
+	}
+
+	private final class TreeItemDelegate extends QAbstractItemDelegate {
+		private final QAbstractItemDelegate wrappedDelegate;
+		private int height = -1;
+
+		TreeItemDelegate(QAbstractItemDelegate wrappedDelegate) {
+			this.wrappedDelegate = wrappedDelegate;
+
+		}
+
+		public void setHeight(int height) {
+			this.height = height;
+		}
+
+		@Override
+		public void paint(QPainter painter, QStyleOptionViewItem item, QModelIndex index) {
+			wrappedDelegate.paint(painter, item, index);
+		}
+
+		@Override
+		public QSize sizeHint(QStyleOptionViewItem item, QModelIndex index) {
+			QSize size = wrappedDelegate.sizeHint(item, index);
+			if (height != -1) {
+				size.setHeight(height);
+			}
+			return size;
+		}
+
+	}
+
+	public boolean qtTreeSelectionChanged() {
+		List<QTreeWidgetItem> selectedItems = getQTreeWidget().selectedItems();
+		if (selectedItems.size() > 1) {
+			System.out.println("more than one item selected in tree, selecting first"); //$NON-NLS-1$
+		}
+		if (selectedItems.size() == 0) {
+			return sendTreeEvent(SWT.Selection, null);
+		} else {
+			// TODO what if more than one element is selected
+			return sendTreeEvent(SWT.Selection, selectedItems.get(0));
+		}
+	}
+
+	private final class MyQTreeWidget extends QTreeWidget {
+
+		@Override
+		protected void startDrag(DropActions supportedActions) {
+			//			System.out.println("MyQTreeWidget.startDrag: " + supportedActions);
+		}
+
+		@Override
+		protected void dropEvent(QDropEvent event) {
+			sendDropEvent(event);
+		}
+
+		@Override
+		protected void dragMoveEvent(QDragMoveEvent event) {
+			sendDragMoveEvent(event);
+		}
+
+		@Override
+		protected void dragEnterEvent(QDragEnterEvent event) {
+			sendDragEnterEvent(event);
+		}
+
+		@Override
+		protected void dragLeaveEvent(QDragLeaveEvent event) {
+			sendDragLeaveEvent(event);
+		}
+
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeColumn.java
new file mode 100644
index 0000000..1693962
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeColumn.java	
@@ -0,0 +1,714 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import com.trolltech.qt.core.Qt.AlignmentFlag;
+import com.trolltech.qt.gui.QHeaderView;
+import com.trolltech.qt.gui.QIcon;
+import com.trolltech.qt.gui.QTreeWidget;
+import com.trolltech.qt.gui.QTreeWidgetItem;
+import com.trolltech.qt.gui.QHeaderView.ResizeMode;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Instances of this class represent a column in a tree widget.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Move, Resize, Selection</dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem,
+ *      TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TreeColumn extends Item {
+	Tree parent;
+	private boolean resizable, moveable;
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Tree</code>) and a style value describing its behavior and
+	 * appearance. The item is added to the end of the items maintained by its
+	 * parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#CENTER
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TreeColumn(Tree parent, int style) {
+		super(parent, checkStyle(style));
+		resizable = true;
+		this.parent = parent;
+		createQAction(parent, style, parent.getColumnCount());
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Tree</code>), a style value describing its behavior and appearance,
+	 * and the index at which to place it in the items maintained by its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * Note that due to a restriction on some platforms, the first column is
+	 * always left aligned.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a composite control which will be the parent of the new
+	 *            instance (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#LEFT
+	 * @see SWT#RIGHT
+	 * @see SWT#CENTER
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TreeColumn(Tree parent, int style, int index) {
+		super(parent, checkStyle(style));
+		resizable = true;
+		this.parent = parent;
+		createQAction(parent, style, index);
+	}
+
+	private void adjustColumnCount() {
+		int columnCount = parent.getColumnCount();
+		if (getQTreeWidget().columnCount() <= columnCount) {
+			getQTreeWidget().setColumnCount(columnCount + 1);
+		}
+	}
+
+	protected void createQAction(Tree parent, int style, int index) {
+		adjustColumnCount();
+		parent.addColumn(this, index);
+		getQHeaderItem().setText(index, ""); //$NON-NLS-1$
+	}
+
+	@Override
+	void releaseQWidget() {
+		//display.removeControl(action);
+		super.releaseQWidget();
+	}
+
+	QTreeWidget getQTreeWidget() {
+		return parent.getQTreeWidget();
+	}
+
+	QTreeWidgetItem getQHeaderItem() {
+		return getQTreeWidget().headerItem();
+	}
+
+	QHeaderView getQHeaderView() {
+		return getQTreeWidget().header();
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is moved or resized, by sending it one of the messages
+	 * defined in the <code>ControlListener</code> interface.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #removeControlListener
+	 */
+	public void addControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Resize, typedListener);
+		addListener(SWT.Move, typedListener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the control is selected by the user, by sending it one of the
+	 * messages defined in the <code>SelectionListener</code> interface.
+	 * <p>
+	 * <code>widgetSelected</code> is called when the column header is selected.
+	 * <code>widgetDefaultSelected</code> is not called.
+	 * </p>
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the control is
+	 *            selected by the user
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #removeSelectionListener
+	 * @see SelectionEvent
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	static int checkStyle(int style) {
+		return checkBits(style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	@Override
+	void destroyWidget() {
+		parent.removeColumn(this);
+		super.destroyWidget();
+	}
+
+	/**
+	 * Returns a value which describes the position of the text or image in the
+	 * receiver. The value will be one of <code>LEFT</code>, <code>RIGHT</code>
+	 * or <code>CENTER</code>.
+	 * 
+	 * @return the alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getAlignment() {
+		checkWidget();
+		if ((style & SWT.LEFT) != 0) {
+			return SWT.LEFT;
+		}
+		if ((style & SWT.CENTER) != 0) {
+			return SWT.CENTER;
+		}
+		if ((style & SWT.RIGHT) != 0) {
+			return SWT.RIGHT;
+		}
+		return SWT.LEFT;
+	}
+
+	/**
+	 * Gets the moveable attribute. A column that is not moveable cannot be
+	 * reordered by the user by dragging the header but may be reordered by the
+	 * programmer.
+	 * 
+	 * @return the moveable attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#getColumnOrder()
+	 * @see Tree#setColumnOrder(int[])
+	 * @see TreeColumn#setMoveable(boolean)
+	 * @see SWT#Move
+	 * 
+	 * @since 3.2
+	 */
+	public boolean getMoveable() {
+		checkWidget();
+		return moveable;
+	}
+
+	@Override
+	String getNameText() {
+		return getText();
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Tree</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Tree getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Gets the resizable attribute. A column that is not resizable cannot be
+	 * dragged by the user but may be resized by the programmer.
+	 * 
+	 * @return the resizable attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getResizable() {
+		checkWidget();
+		return resizable;
+	}
+
+	/**
+	 * Returns the receiver's tool tip text, or null if it has not been set.
+	 * 
+	 * @return the receiver's tool tip text
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public String getToolTipText() {
+		checkWidget();
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return ""; //$NON-NLS-1$
+		}
+		return getQHeaderItem().toolTip(index);
+	}
+
+	/**
+	 * Gets the width of the receiver.
+	 * 
+	 * @return the width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getWidth() {
+		checkWidget();
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return 0;
+		}
+		return getQTreeWidget().header().sectionSize(index);
+	}
+
+	/**
+	 * Causes the receiver to be resized to its preferred size. For a composite,
+	 * this involves computing the preferred size from its layout, if there is
+	 * one.
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 */
+	public void pack() {
+		checkWidget();
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return;
+		}
+		getQTreeWidget().resizeColumnToContents(index);
+	}
+
+	@Override
+	void releaseParent() {
+		super.releaseParent();
+		if (parent.sortColumn == this) {
+			parent.sortColumn = null;
+		}
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is moved or resized.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see ControlListener
+	 * @see #addControlListener
+	 */
+	public void removeControlListener(ControlListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Move, listener);
+		eventTable.unhook(SWT.Resize, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the control is selected by the user.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SelectionListener
+	 * @see #addSelectionListener
+	 */
+	public void removeSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Selection, listener);
+		eventTable.unhook(SWT.DefaultSelection, listener);
+	}
+
+	/**
+	 * Controls how text and images will be displayed in the receiver. The
+	 * argument should be one of <code>LEFT</code>, <code>RIGHT</code> or
+	 * <code>CENTER</code>.
+	 * <p>
+	 * Note that due to a restriction on some platforms, the first column is
+	 * always left aligned.
+	 * </p>
+	 * 
+	 * @param alignment
+	 *            the new alignment
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setAlignment(int alignment) {
+		checkWidget();
+		if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) {
+			return;
+		}
+		int index = parent.indexOf(this);
+		if (index == -1 || index == 0) {
+			return;
+		}
+		style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+		style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+
+		getQTreeWidget().headerItem().setTextAlignment(index, convertAlignment(style));
+	}
+
+	private int convertAlignment(int style) {
+		if ((style & SWT.CENTER) != 0) {
+			return AlignmentFlag.AlignCenter.value();
+		} else if ((style & SWT.RIGHT) != 0) {
+			return AlignmentFlag.AlignRight.value();
+		}
+		return AlignmentFlag.AlignLeft.value();
+	}
+
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		super.setImage(image);
+		if (parent.sortColumn != this || parent.sortDirection != SWT.NONE) {
+			setImage(image, false, false);
+		}
+	}
+
+	void setImage(Image image, boolean sort, boolean right) {
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return;
+		}
+		if (image != null) {
+			QIcon icon = new QIcon();
+			icon.addPixmap(image.getQPixmap());
+			getQHeaderItem().setIcon(index, icon);
+		} else {
+			getQHeaderItem().setIcon(index, (QIcon) null);
+		}
+	}
+
+	/**
+	 * Sets the moveable attribute. A column that is moveable can be reordered
+	 * by the user by dragging the header. A column that is not moveable cannot
+	 * be dragged by the user but may be reordered by the programmer.
+	 * 
+	 * @param moveable
+	 *            the moveable attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Tree#setColumnOrder(int[])
+	 * @see Tree#getColumnOrder()
+	 * @see TreeColumn#getMoveable()
+	 * @see SWT#Move
+	 * 
+	 * @since 3.2
+	 */
+	public void setMoveable(boolean moveable) {
+		checkWidget();
+		this.moveable = moveable;
+	}
+
+	/**
+	 * Sets the resizable attribute. A column that is not resizable cannot be
+	 * dragged by the user but may be resized by the programmer.
+	 * 
+	 * @param resizable
+	 *            the resize attribute
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setResizable(boolean resizable) {
+		checkWidget();
+		this.resizable = resizable;
+		getQHeaderView().setResizeMode(parent.indexOf(this), resizable ? ResizeMode.Interactive : ResizeMode.Fixed);
+	}
+
+	@Override
+	public void setText(String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (string.equals(text)) {
+			return;
+		}
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return;
+		}
+		super.setText(string);
+		getQHeaderItem().setText(index, string);
+	}
+
+	/**
+	 * Sets the receiver's tool tip text to the argument, which may be null
+	 * indicating that the default tool tip for the control will be shown. For a
+	 * control that has a default tool tip, such as the Tree control on Windows,
+	 * setting the tool tip text to an empty string replaces the default,
+	 * causing no tool tip text to be shown.
+	 * <p>
+	 * The mnemonic indicator (character '&') is not displayed in a tool
+	 * tip. To display a single '&' in the tool tip, the character '&'
+	 * can be escaped by doubling it in the string.
+	 * </p>
+	 * 
+	 * @param string
+	 *            the new tool tip text (or null)
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setToolTipText(String string) {
+		checkWidget();
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return;
+		}
+		getQHeaderItem().setToolTip(index, string);
+	}
+
+	/**
+	 * Sets the width of the receiver.
+	 * 
+	 * @param width
+	 *            the new width
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setWidth(int width) {
+		checkWidget();
+		if (width < 0) {
+			return;
+		}
+		int index = parent.indexOf(this);
+		if (index == -1) {
+			return;
+		}
+		getQTreeWidget().setColumnWidth(index, width);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeItem.java
new file mode 100644
index 0000000..7ecd774
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/TreeItem.java	
@@ -0,0 +1,1573 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.trolltech.qt.gui.QBrush;
+import com.trolltech.qt.gui.QIcon;
+import com.trolltech.qt.gui.QTreeWidget;
+import com.trolltech.qt.gui.QTreeWidgetItem;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.qt.QtSWTConverter;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * represents a hierarchy of tree items in a tree widget.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem,
+ *      TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class TreeItem extends Item {
+	private QTreeWidgetItem item;
+	private List<TreeItem> items;
+	private Tree parent;
+	private TreeItem parentItem;
+	private String[] strings;
+	private Image[] images;
+	private Font font;
+	private Font[] cellFont;
+	boolean cached;
+	private Color background;
+	private Color foreground;
+	private int[] cellBackground, cellForeground;
+	private boolean grayed;
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Tree</code> or a <code>TreeItem</code>) and a style value
+	 * describing its behavior and appearance. The item is added to the end of
+	 * the items maintained by its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a tree control which will be the parent of the new instance
+	 *            (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TreeItem(Tree parent, int style) {
+		this(parent, null, style, -1);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Tree</code> or a <code>TreeItem</code>), a style value describing
+	 * its behavior and appearance, and the index at which to place it in the
+	 * items maintained by its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a tree control which will be the parent of the new instance
+	 *            (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TreeItem(Tree parent, int style, int index) {
+		this(parent, null, style, index);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Tree</code> or a <code>TreeItem</code>) and a style value
+	 * describing its behavior and appearance. The item is added to the end of
+	 * the items maintained by its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parentItem
+	 *            a tree control which will be the parent of the new instance
+	 *            (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TreeItem(TreeItem parentItem, int style) {
+		this(checkNull(parentItem).parent, parentItem, style, -1);
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent (which must be a
+	 * <code>Tree</code> or a <code>TreeItem</code>), a style value describing
+	 * its behavior and appearance, and the index at which to place it in the
+	 * items maintained by its parent.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parentItem
+	 *            a tree control which will be the parent of the new instance
+	 *            (cannot be null)
+	 * @param style
+	 *            the style of control to construct
+	 * @param index
+	 *            the zero-relative index to store the receiver in its parent
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the parent (inclusive)</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see Widget#checkSubclass
+	 * @see Widget#getStyle
+	 */
+	public TreeItem(TreeItem parentItem, int style, int index) {
+		this(checkNull(parentItem).parent, parentItem, style, index);
+	}
+
+	TreeItem(Tree parent, TreeItem parentItem, int style, int index) {
+		super(parent, style);
+		this.parent = parent;
+		item = new QTreeWidgetItem();
+		items = new ArrayList<TreeItem>(4);
+		if (parentItem != null) {
+			this.parentItem = parentItem;
+			parentItem.addItem(this, index);
+		} else {
+			parent.addItem(this, index);
+		}
+		display.addControl(item, this);
+	}
+
+	void addItem(TreeItem item, int index) {
+		if (index >= 0 && index < items.size()) {
+			items.add(index, item);
+			this.item.insertChild(index, item.getQItem());
+		} else {
+			items.add(item);
+			this.item.addChild(item.getQItem());
+		}
+	}
+
+	void removeItem(TreeItem item) {
+		items.remove(item);
+		getQItem().removeChild(item.getQItem());
+	}
+
+	TreeItem getItem(QTreeWidgetItem qItem) {
+		for (TreeItem item : items) {
+			if (item.item == qItem) {
+				return item;
+			}
+			TreeItem ti = item.getItem(qItem);
+			if (ti != null) {
+				return ti;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	void releaseQWidget() {
+		super.releaseQWidget();
+		item = null;
+	}
+
+	QTreeWidgetItem getQItem() {
+		return item;
+	}
+
+	QTreeWidget getQTreeWidget() {
+		return parent.getQTreeWidget();
+	}
+
+	static TreeItem checkNull(TreeItem item) {
+		if (item == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		return item;
+	}
+
+	@Override
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	void clear() {
+		for (int i = 0; i < parent.getColumnCount(); i++) {
+			item.setText(i, null);
+			item.setIcon(i, (QIcon) null);
+			item.setWhatsThis(i, null);
+			item.setFont(i, null);
+		}
+		text = ""; //$NON-NLS-1$
+		image = null;
+		strings = null;
+		images = null;
+		if ((parent.style & SWT.CHECK) != 0) {
+			//
+		}
+		background = foreground = null;
+		font = null;
+		cellBackground = cellForeground = null;
+		cellFont = null;
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = false;
+		}
+	}
+
+	/**
+	 * Clears the item at the given zero-relative index in the receiver. The
+	 * text, icon and other attributes of the item are set to the default value.
+	 * If the tree was created with the <code>SWT.VIRTUAL</code> style, these
+	 * attributes are requested again as needed.
+	 * 
+	 * @param index
+	 *            the index of the item to clear
+	 * @param all
+	 *            <code>true</code> if all child items of the indexed item
+	 *            should be cleared recursively, and <code>false</code>
+	 *            otherwise
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.2
+	 */
+	public void clear(int index, boolean all) {
+		checkWidget();
+		validateItemIndex(index);
+		if (index == 0) {
+			clear();
+			return;
+		}
+		TreeItem item = items.get(index);
+		item.clear(0, all);
+	}
+
+	private void validateItemIndex(int index) {
+		if (index < 0 || index >= items.size()) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+	}
+
+	/**
+	 * Clears all the items in the receiver. The text, icon and other attributes
+	 * of the items are set to their default values. If the tree was created
+	 * with the <code>SWT.VIRTUAL</code> style, these attributes are requested
+	 * again as needed.
+	 * 
+	 * @param all
+	 *            <code>true</code> if all child items should be cleared
+	 *            recursively, and <code>false</code> otherwise
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT#VIRTUAL
+	 * @see SWT#SetData
+	 * 
+	 * @since 3.2
+	 */
+	public void clearAll(boolean all) {
+		checkWidget();
+		clear();
+		for (TreeItem item : items) {
+			item.clearAll(all);
+		}
+	}
+
+	@Override
+	void destroyWidget() {
+		if (parentItem != null) {
+			parentItem.removeItem(this);
+		} else {
+			parent.removeItem(this);
+		}
+		super.destroyWidget();
+		item = null;
+	}
+
+	/**
+	 * Returns the receiver's background color.
+	 * 
+	 * @return the background color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 * 
+	 */
+	public Color getBackground() {
+		checkWidget();
+		if (background == null) {
+			return parent.getBackground();
+		}
+		return background;
+	}
+
+	/**
+	 * Returns the background color at the given column index in the receiver.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the background color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public Color getBackground(int index) {
+		checkWidget();
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return getBackground();
+		}
+		int pixel = cellBackground != null ? cellBackground[index] : -1;
+		return pixel == -1 ? getBackground() : Color.qt_new(display, pixel);
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent.
+	 * 
+	 * @return the receiver's bounding rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Rectangle getBounds() {
+		checkWidget();
+		return QtSWTConverter.convert(getQTreeWidget().visualItemRect(item));
+	}
+
+	/**
+	 * Returns a rectangle describing the receiver's size and location relative
+	 * to its parent at a column in the tree.
+	 * 
+	 * @param index
+	 *            the index that specifies the column
+	 * @return the receiver's bounding column rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public Rectangle getBounds(int index) {
+		checkWidget();
+		int count = Math.max(1, item.columnCount());
+		if (0 > index || index > count - 1) {
+			return new Rectangle(0, 0, 0, 0);
+		}
+
+		return QtSWTConverter.convert(getQTreeWidget().visualItemRect(item.child(index)));
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is checked, and false
+	 * otherwise. When the parent does not have the
+	 * <code>CHECK style, return false.
+ * <p>
+	 * 
+	 * @return the checked state
+	 * 
+	 * @exception SWTException
+	 *                <ul> <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getChecked() {
+		checkWidget();
+		if ((parent.style & SWT.CHECK) == 0) {
+			return false;
+		}
+		return item.isSelected();
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is expanded, and false
+	 * otherwise.
+	 * <p>
+	 * 
+	 * @return the expanded state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getExpanded() {
+		checkWidget();
+		return item.isExpanded();
+	}
+
+	/**
+	 * Returns the font that the receiver will use to paint textual information
+	 * for this item.
+	 * 
+	 * @return the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public Font getFont() {
+		checkWidget();
+		return font != null ? font : parent.getFont();
+	}
+
+	/**
+	 * Returns the font that the receiver will use to paint textual information
+	 * for the specified cell in this item.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the receiver's font
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public Font getFont(int index) {
+		checkWidget();
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return getFont();
+		}
+		if (cellFont == null || cellFont[index] == null) {
+			return getFont();
+		}
+		return cellFont[index];
+	}
+
+	/**
+	 * Returns the foreground color that the receiver will use to draw.
+	 * 
+	 * @return the receiver's foreground color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 * 
+	 */
+	public Color getForeground() {
+		checkWidget();
+		if (foreground == null) {
+			return parent.getForeground();
+		}
+		return foreground;
+	}
+
+	/**
+	 * 
+	 * Returns the foreground color at the given column index in the receiver.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the foreground color
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public Color getForeground(int index) {
+		checkWidget();
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return getForeground();
+		}
+		int pixel = cellForeground != null ? cellForeground[index] : -1;
+		return pixel == -1 ? getForeground() : Color.qt_new(display, pixel);
+	}
+
+	/**
+	 * Returns <code>true</code> if the receiver is grayed, and false otherwise.
+	 * When the parent does not have the <code>CHECK style, return false.
+ * <p>
+	 * 
+	 * @return the grayed state of the checkbox
+	 * 
+	 * @exception SWTException
+	 *                <ul> <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public boolean getGrayed() {
+		checkWidget();
+		if ((parent.style & SWT.CHECK) == 0) {
+			return false;
+		}
+		return grayed;
+	}
+
+	/**
+	 * Returns the item at the given, zero-relative index in the receiver.
+	 * Throws an exception if the index is out of range.
+	 * 
+	 * @param index
+	 *            the index of the item to return
+	 * @return the item at the given index
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_RANGE - if the index is not between 0
+	 *                and the number of elements in the list minus 1 (inclusive)
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public TreeItem getItem(int index) {
+		checkWidget();
+		if (index < 0 || index >= items.size()) {
+			error(SWT.ERROR_INVALID_RANGE);
+		}
+		return items.get(index);
+	}
+
+	/**
+	 * Returns the number of items contained in the receiver that are direct
+	 * item children of the receiver.
+	 * 
+	 * @return the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return items.size();
+	}
+
+	/**
+	 * Returns a (possibly empty) array of <code>TreeItem</code>s which are the
+	 * direct item children of the receiver.
+	 * <p>
+	 * Note: This is not the actual structure used by the receiver to maintain
+	 * its list of items, so modifying the array will not affect the receiver.
+	 * </p>
+	 * 
+	 * @return the receiver's items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TreeItem[] getItems() {
+		checkWidget();
+		return items.toArray(new TreeItem[items.size()]);
+	}
+
+	@Override
+	public Image getImage() {
+		checkWidget();
+		return super.getImage();
+	}
+
+	/**
+	 * Returns the image stored at the given column index in the receiver, or
+	 * null if the image has not been set or if the column does not exist.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the image stored at the given column index in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public Image getImage(int index) {
+		checkWidget();
+		if (index == 0) {
+			return getImage();
+		}
+		if (images != null) {
+			if (0 <= index && index < images.length) {
+				return images[index];
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns a rectangle describing the size and location relative to its
+	 * parent of an image at a column in the tree.
+	 * 
+	 * @param index
+	 *            the index that specifies the column
+	 * @return the receiver's bounding image rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public Rectangle getImageBounds(int index) {
+		checkWidget();
+		//TODO image only ?
+		return QtSWTConverter.convert(getQTreeWidget().visualItemRect(getQItem().child(index)));
+	}
+
+	/**
+	 * Returns the receiver's parent, which must be a <code>Tree</code>.
+	 * 
+	 * @return the receiver's parent
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public Tree getParent() {
+		checkWidget();
+		return parent;
+	}
+
+	/**
+	 * Returns the receiver's parent item, which must be a <code>TreeItem</code>
+	 * or null when the receiver is a root.
+	 * 
+	 * @return the receiver's parent item
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public TreeItem getParentItem() {
+		checkWidget();
+		return parentItem;
+	}
+
+	/**
+	 * Returns the text stored at the given column index in the receiver, or
+	 * empty string if the text has not been set.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @return the text stored at the given column index in the receiver
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public String getText(int index) {
+		checkWidget();
+		if (index == 0) {
+			return getText();
+		}
+		if (strings != null) {
+			if (0 <= index && index < strings.length) {
+				String string = strings[index];
+				return string != null ? string : ""; //$NON-NLS-1$
+			}
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns a rectangle describing the size and location relative to its
+	 * parent of the text at a column in the tree.
+	 * 
+	 * @param index
+	 *            the index that specifies the column
+	 * @return the receiver's bounding text rectangle
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.3
+	 */
+	public Rectangle getTextBounds(int index) {
+		checkWidget();
+		//TODO text only ?
+		return QtSWTConverter.convert(getQTreeWidget().visualItemRect(getQItem().child(index)));
+	}
+
+	/**
+	 * Searches the receiver's list starting at the first item (index 0) until
+	 * an item is found that is equal to the argument, and returns the index of
+	 * that item. If no item is found, returns -1.
+	 * 
+	 * @param item
+	 *            the search item
+	 * @return the index of the item
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the item has been disposed
+	 *                </li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public int indexOf(TreeItem item) {
+		checkWidget();
+		if (item == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (item.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		return items.indexOf(item);
+	}
+
+	@Override
+	void releaseChildren(boolean destroy) {
+		if (destroy) {
+			for (int i = items.size() - 1; i > -1; i--) {
+				items.get(i).dispose();
+			}
+			items.clear();
+		}
+		super.releaseChildren(destroy);
+	}
+
+	@Override
+	void releaseWidget() {
+		super.releaseWidget();
+		strings = null;
+		images = null;
+		cellBackground = cellForeground = null;
+		cellFont = null;
+		display.removeControl(item);
+	}
+
+	/**
+	 * Removes all of the items from the receiver.
+	 * <p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void removeAll() {
+		checkWidget();
+		QTreeWidgetItem qItem = getQItem();
+		for (TreeItem item : items) {
+			qItem.removeChild(item.getQItem());
+		}
+		items.clear();
+	}
+
+	/**
+	 * Sets the receiver's background color to the color specified by the
+	 * argument, or to the default system color for the item if the argument is
+	 * null.
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 * 
+	 */
+	public void setBackground(Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		Color pixel = null;
+		if (color != null) {
+			parent.customDraw = true;
+			pixel = color;
+		}
+		if (background == pixel) {
+			return;
+		}
+		background = pixel;
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+	}
+
+	/**
+	 * Sets the background color at the given column index in the receiver to
+	 * the color specified by the argument, or to the default system color for
+	 * the item if the argument is null.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 * 
+	 */
+	public void setBackground(int index, Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		int pixel = -1;
+		if (color != null) {
+			parent.customDraw = true;
+			pixel = color.getPixel();
+		}
+		if (cellBackground == null) {
+			cellBackground = new int[count];
+			for (int i = 0; i < count; i++) {
+				cellBackground[i] = -1;
+			}
+		}
+		if (cellBackground[index] == pixel) {
+			return;
+		}
+		cellBackground[index] = pixel;
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+	}
+
+	/**
+	 * Sets the checked state of the receiver.
+	 * <p>
+	 * 
+	 * @param checked
+	 *            the new checked state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setChecked(boolean checked) {
+		checkWidget();
+		if ((parent.style & SWT.CHECK) == 0) {
+			return;
+		}
+		getQItem().setSelected(checked);
+	}
+
+	/**
+	 * Sets the expanded state of the receiver.
+	 * <p>
+	 * 
+	 * @param expanded
+	 *            the new expanded state
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li> <li>ERROR_THREAD_INVALID_ACCESS - if not
+	 *                called from the thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setExpanded(boolean expanded) {
+		checkWidget();
+		getQItem().setExpanded(expanded);
+	}
+
+	/**
+	 * Sets the font that the receiver will use to paint textual information for
+	 * this item to the font specified by the argument, or to the default font
+	 * for that kind of control if the argument is null.
+	 * 
+	 * @param font
+	 *            the new font (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void setFont(Font font) {
+		checkWidget();
+		if (font != null && font.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		Font oldFont = this.font;
+		if (oldFont == font) {
+			return;
+		}
+		this.font = font;
+		if (oldFont != null && oldFont.equals(font)) {
+			return;
+		}
+		if (font != null) {
+			parent.customDraw = true;
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		item.setFont(0, font.getQFont());
+	}
+
+	/**
+	 * Sets the font that the receiver will use to paint textual information for
+	 * the specified cell in this item to the font specified by the argument, or
+	 * to the default font for that kind of control if the argument is null.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param font
+	 *            the new font (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setFont(int index, Font font) {
+		checkWidget();
+		if (font != null && font.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		if (cellFont == null) {
+			if (font == null) {
+				return;
+			}
+			cellFont = new Font[count];
+		}
+		Font oldFont = cellFont[index];
+		if (oldFont == font) {
+			return;
+		}
+		cellFont[index] = font;
+		if (oldFont != null && oldFont.equals(font)) {
+			return;
+		}
+		if (font != null) {
+			parent.customDraw = true;
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		if (font == null) {
+			item.setFont(index, null);
+		} else {
+			item.setFont(index, font.getQFont());
+		}
+	}
+
+	/**
+	 * Sets the receiver's foreground color to the color specified by the
+	 * argument, or to the default system color for the item if the argument is
+	 * null.
+	 * 
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @since 2.0
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 2.0
+	 * 
+	 */
+	public void setForeground(Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		this.foreground = color;
+		item.setForeground(0, new QBrush(color.getColor()));
+	}
+
+	/**
+	 * Sets the foreground color at the given column index in the receiver to
+	 * the color specified by the argument, or to the default system color for
+	 * the item if the argument is null.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param color
+	 *            the new color (or null)
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the argument has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 * 
+	 */
+	public void setForeground(int index, Color color) {
+		checkWidget();
+		if (color != null && color.isDisposed()) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		int pixel = -1;
+		if (color != null) {
+			parent.customDraw = true;
+			pixel = color.getPixel();
+		}
+		if (cellForeground == null) {
+			cellForeground = new int[count];
+			for (int i = 0; i < count; i++) {
+				cellForeground[i] = -1;
+			}
+		}
+		if (cellForeground[index] == pixel) {
+			return;
+		}
+		cellForeground[index] = pixel;
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+	}
+
+	/**
+	 * Sets the grayed state of the checkbox for this item. This state change
+	 * only applies if the Tree was created with the SWT.CHECK style.
+	 * 
+	 * @param grayed
+	 *            the new grayed state of the checkbox
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public void setGrayed(boolean grayed) {
+		checkWidget();
+		if ((parent.style & SWT.CHECK) == 0) {
+			return;
+		}
+		this.grayed = grayed;
+	}
+
+	/**
+	 * Sets the image for multiple columns in the tree.
+	 * 
+	 * @param images
+	 *            the array of new images
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if one of the images has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setImage(Image[] images) {
+		checkWidget();
+		if (images == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		for (int i = 0; i < images.length; i++) {
+			setImage(i, images[i]);
+		}
+	}
+
+	/**
+	 * Sets the receiver's image at a column.
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param image
+	 *            the new image
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the image has been
+	 *                disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setImage(int index, Image image) {
+		checkWidget();
+		if (image != null && image.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (index == 0) {
+			if (image != null && image.isIcon()) {
+				if (image.equals(this.image)) {
+					return;
+				}
+			}
+			super.setImage(image);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		if (images == null && index != 0) {
+			images = new Image[count];
+			images[0] = image;
+		}
+		if (images != null) {
+			if (image != null && image.isIcon()) {
+				if (image.equals(images[index])) {
+					return;
+				}
+			}
+			images[index] = image;
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		item.setIcon(index, image != null ? image.getQIcon() : null);
+	}
+
+	@Override
+	public void setImage(Image image) {
+		checkWidget();
+		setImage(0, image);
+	}
+
+	/**
+	 * Sets the number of child items contained in the receiver.
+	 * 
+	 * @param count
+	 *            the number of items
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.2
+	 */
+	public void setItemCount(int count) {
+		checkWidget();
+		count = Math.max(0, count);
+		int itemCount = items.size();
+		if (count == itemCount) {
+			return;
+		}
+
+		if (count < itemCount) {
+			for (int i = itemCount - 1; i >= count; i--) {
+				removeItem(items.get(i));
+			}
+			return;
+		}
+		//		if (isVirtual) {
+		//			//TODO
+		//		} else {
+		for (int i = itemCount; i < count; i++) {
+			new TreeItem(this, SWT.NONE, i);
+		}
+	}
+
+	/**
+	 * Sets the text for multiple columns in the tree.
+	 * 
+	 * @param strings
+	 *            the array of new strings
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setText(String[] strings) {
+		checkWidget();
+		if (strings == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		for (int i = 0; i < strings.length; i++) {
+			String string = strings[i];
+			if (string != null) {
+				setText(i, string);
+			}
+		}
+	}
+
+	/**
+	 * Sets the receiver's text at a column
+	 * 
+	 * @param index
+	 *            the column index
+	 * @param string
+	 *            the new text
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @since 3.1
+	 */
+	public void setText(int index, String string) {
+		checkWidget();
+		if (string == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (index == 0) {
+			if (string.equals(text)) {
+				return;
+			}
+			super.setText(string);
+		}
+		int count = Math.max(1, parent.getColumnCount());
+		if (0 > index || index > count - 1) {
+			return;
+		}
+		if (strings == null && index != 0) {
+			strings = new String[count];
+			strings[0] = text;
+		}
+		if (strings != null) {
+			if (string.equals(strings[index])) {
+				return;
+			}
+			strings[index] = string;
+		}
+		if ((parent.style & SWT.VIRTUAL) != 0) {
+			cached = true;
+		}
+		getQItem().setText(index, string);
+	}
+
+	@Override
+	public void setText(String string) {
+		checkWidget();
+		setText(0, string);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java
new file mode 100644
index 0000000..cf69351
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java	
@@ -0,0 +1,1358 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Portion Copyright (c) 2009-2010 compeople AG (http://www.compeople.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Compeople AG	- QtJambi/Qt based implementation for Windows/Mac OS X/Linux
+ *******************************************************************************/
+package org.eclipse.swt.widgets;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.gui.QContextMenuEvent;
+import com.trolltech.qt.gui.QKeyEvent;
+import com.trolltech.qt.gui.QMouseEvent;
+import com.trolltech.qt.gui.QMoveEvent;
+import com.trolltech.qt.gui.QPaintEvent;
+import com.trolltech.qt.gui.QResizeEvent;
+import com.trolltech.qt.gui.QWidget;
+import com.trolltech.qt.gui.QWindowStateChangeEvent;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.GCData;
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * This class is the abstract superclass of all user interface objects. Widgets
+ * are created, disposed and issue notification to listeners when events occur
+ * which affect them.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Dispose</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em> within the
+ * SWT implementation. However, it has not been marked final to allow those
+ * outside of the SWT development team to implement patched versions of the
+ * class in order to get around specific limitations in advance of when those
+ * limitations can be addressed by the team. Any class built using subclassing
+ * to access the internals of this class will likely fail to compile or run
+ * between releases and may be strongly platform specific. Subclassing should
+ * not be attempted without an intimate and detailed understanding of the
+ * workings of the hierarchy. No support is provided for user-written classes
+ * which are implemented as subclasses of this class.
+ * </p>
+ * 
+ * @see #checkSubclass
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further
+ *      information</a>
+ */
+
+public abstract class Widget {
+	public static final String QT_SWT_CONTROL_PROPERTY = "__SWT_CONTROL";//$NON-NLS-1$
+	int style, state;
+	Display display;
+	EventTable eventTable;
+	private Map<String, Object> data;
+	private Object mainData;
+
+	/* Global state flags */
+	static final int DISPOSED = 1 << 0;
+	static final int CANVAS = 1 << 1;
+	static final int KEYED_DATA = 1 << 2;
+	static final int HIDDEN = 1 << 4;
+
+	/* A layout was requested on this widget */
+	static final int LAYOUT_NEEDED = 1 << 5;
+
+	/* The preferred size of a child has changed */
+	static final int LAYOUT_CHANGED = 1 << 6;
+
+	/* A layout was requested in this widget hierarchy */
+	static final int LAYOUT_CHILD = 1 << 7;
+
+	/* Background flags */
+	static final int THEME_BACKGROUND = 1 << 8;
+	static final int DRAW_BACKGROUND = 1 << 9;
+	static final int PARENT_BACKGROUND = 1 << 10;
+
+	/* Dispose and release flags */
+	static final int RELEASED = 1 << 11;
+	static final int DISPOSE_SENT = 1 << 12;
+
+	/* More global widget state flags */
+	static final int TRACK_MOUSE = 1 << 13;
+	static final int FOREIGN_HANDLE = 1 << 14;
+	static final int DRAG_DETECT = 1 << 15;
+
+	/* Move and resize state flags */
+	static final int MOVE_OCCURRED = 1 << 16;
+	static final int MOVE_DEFERRED = 1 << 17;
+	static final int RESIZE_OCCURRED = 1 << 18;
+	static final int RESIZE_DEFERRED = 1 << 19;
+
+	/* Ignore WM_CHANGEUISTATE */
+	static final int IGNORE_WM_CHANGEUISTATE = 1 << 20;
+
+	/* Default size for widgets */
+	static final int DEFAULT_WIDTH = 64;
+	static final int DEFAULT_HEIGHT = 64;
+
+	/* Check and initialize the Common Controls DLL */
+	static final int MAJOR = 5, MINOR = 80;
+	private QWidget qWidget;
+
+	/**
+	 * Prevents uninitialized instances from being created outside the package.
+	 */
+	Widget() {
+	}
+
+	/**
+	 * Constructs a new instance of this class given its parent and a style
+	 * value describing its behavior and appearance.
+	 * <p>
+	 * The style value is either one of the style constants defined in class
+	 * <code>SWT</code> which is applicable to instances of this class, or must
+	 * be built by <em>bitwise OR</em>'ing together (that is, using the
+	 * <code>int</code> "|" operator) two or more of those <code>SWT</code>
+	 * style constants. The class description lists the style constants that are
+	 * applicable to the class. Style bits are also inherited from superclasses.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            a widget which will be the parent of the new instance (cannot
+	 *            be null)
+	 * @param style
+	 *            the style of widget to construct
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see #checkSubclass
+	 * @see #getStyle
+	 */
+	public Widget(Widget parent, int style) {
+		checkSubclass();
+		checkParent(parent);
+		this.style = style;
+		display = parent.display;
+	}
+
+	void setQWidget(QWidget qWidget) {
+		this.qWidget = qWidget;
+	}
+
+	public QWidget getQWidget() {
+		return qWidget;
+	}
+
+	protected QWidget getQMasterWidget() {
+		return getQWidget();
+	}
+
+	protected void setStyleSheet(String style) {
+		getQMasterWidget().setStyleSheet(style);
+		updateLayout();
+	}
+
+	protected void updateStyleSheet() {
+		if (null != getQMasterWidget().style()) {
+			getQMasterWidget().setStyle(getQMasterWidget().style());
+			updateLayout();
+		}
+	}
+
+	protected void updateLayout() {
+		// nothing by default
+	}
+
+	void _addListener(int eventType, Listener listener) {
+		if (eventTable == null) {
+			eventTable = new EventTable();
+		}
+		if (eventType == SWT.DragDetect && this instanceof CTabFolder) {
+			System.out.println("adding dnd drag listener");
+		}
+		eventTable.hook(eventType, listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when an event of the given type occurs. When the event does occur in the
+	 * widget, the listener is notified by sending it the
+	 * <code>handleEvent()</code> message. The event type is one of the event
+	 * constants defined in class <code>SWT</code>.
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @param listener
+	 *            the listener which should be notified when the event occurs
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see SWT
+	 * @see #getListeners(int)
+	 * @see #removeListener(int, Listener)
+	 * @see #notifyListeners
+	 */
+	public void addListener(int eventType, Listener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		_addListener(eventType, listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will be notified
+	 * when the widget is disposed. When the widget is disposed, the listener is
+	 * notified by sending it the <code>widgetDisposed()</code> message.
+	 * 
+	 * @param listener
+	 *            the listener which should be notified when the receiver is
+	 *            disposed
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DisposeListener
+	 * @see #removeDisposeListener
+	 */
+	public void addDisposeListener(DisposeListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Dispose, typedListener);
+	}
+
+	/**
+	 * Returns a style with exactly one style bit set out of the specified set
+	 * of exclusive style bits. All other possible bits are cleared when the
+	 * first matching bit is found. Bits that are not part of the possible set
+	 * are untouched.
+	 * 
+	 * @param style
+	 *            the original style bits
+	 * @param int0
+	 *            the 0th possible style bit
+	 * @param int1
+	 *            the 1st possible style bit
+	 * @param int2
+	 *            the 2nd possible style bit
+	 * @param int3
+	 *            the 3rd possible style bit
+	 * @param int4
+	 *            the 4th possible style bit
+	 * @param int5
+	 *            the 5th possible style bit
+	 * 
+	 * @return the new style bits
+	 * 
+	 *         refactored: was checkBits
+	 */
+	static int checkBits(int style, int int0, int int1, int int2, int int3, int int4, int int5) {
+		int mask = int0 | int1 | int2 | int3 | int4 | int5;
+		if ((style & mask) == 0) {
+			style |= int0;
+		}
+		if ((style & int0) != 0) {
+			style = style & ~mask | int0;
+		}
+		if ((style & int1) != 0) {
+			style = style & ~mask | int1;
+		}
+		if ((style & int2) != 0) {
+			style = style & ~mask | int2;
+		}
+		if ((style & int3) != 0) {
+			style = style & ~mask | int3;
+		}
+		if ((style & int4) != 0) {
+			style = style & ~mask | int4;
+		}
+		if ((style & int5) != 0) {
+			style = style & ~mask | int5;
+		}
+		return style;
+	}
+
+	/* refactored: was checkOrientation */
+	void checkAndUpdateOrientation(Widget parent) {
+		style &= ~SWT.MIRRORED;
+		if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) {
+			if (parent != null) {
+				if ((parent.style & SWT.LEFT_TO_RIGHT) != 0) {
+					style |= SWT.LEFT_TO_RIGHT;
+				}
+				if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) {
+					style |= SWT.RIGHT_TO_LEFT;
+				}
+			}
+		}
+		style = checkBits(style, SWT.LEFT_TO_RIGHT, SWT.RIGHT_TO_LEFT, 0, 0, 0, 0);
+	}
+
+	void checkOpened() {
+		/* Do nothing */
+	}
+
+	/**
+	 * Throws an exception if the specified widget can not be used as a parent
+	 * for the receiver.
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                </ul>
+	 */
+	void checkParent(Widget parent) {
+		if (parent == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (parent.isDisposed()) {
+			error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		parent.checkWidget();
+		parent.checkOpened();
+	}
+
+	/**
+	 * Checks that this class can be subclassed.
+	 * <p>
+	 * The SWT class library is intended to be subclassed only at specific,
+	 * controlled points (most notably, <code>Composite</code> and
+	 * <code>Canvas</code> when implementing new widgets). This method enforces
+	 * this rule unless it is overridden.
+	 * </p>
+	 * <p>
+	 * <em>IMPORTANT:</em> By providing an implementation of this method that
+	 * allows a subclass of a class which does not normally allow subclassing to
+	 * be created, the implementer agrees to be fully responsible for the fact
+	 * that any such subclass will likely fail between SWT releases and will be
+	 * strongly platform specific. No support is provided for user-written
+	 * classes which are implemented in this fashion.
+	 * </p>
+	 * <p>
+	 * The ability to subclass outside of the allowed SWT classes is intended
+	 * purely to enable those not on the SWT development team to implement
+	 * patches in order to get around specific limitations in advance of when
+	 * those limitations can be addressed by the team. Subclassing should not be
+	 * attempted without an intimate and detailed understanding of the
+	 * hierarchy.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_INVALID_SUBCLASS - if this class is not an
+	 *                allowed subclass</li>
+	 *                </ul>
+	 */
+	protected void checkSubclass() {
+		if (!isValidSubclass()) {
+			error(SWT.ERROR_INVALID_SUBCLASS);
+		}
+	}
+
+	/**
+	 * Throws an <code>SWTException</code> if the receiver can not be accessed
+	 * by the caller. This may include both checks on the state of the receiver
+	 * and more generally on the entire execution context. This method
+	 * <em>should</em> be called by widget implementors to enforce the standard
+	 * SWT invariants.
+	 * <p>
+	 * Currently, it is an error to invoke any method (other than
+	 * <code>isDisposed()</code>) on a widget that has had its
+	 * <code>dispose()</code> method called. It is also an error to call widget
+	 * methods from any thread that is different from the thread that created
+	 * the widget.
+	 * </p>
+	 * <p>
+	 * In future releases of SWT, there may be more or fewer error checks and
+	 * exceptions may be thrown for different reasons.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	protected void checkWidget() {
+		Display display = this.display;
+		if (display == null) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		if (display.thread != Thread.currentThread()) {
+			error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		if ((state & DISPOSED) != 0) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+	}
+
+	/**
+	 * Destroys the widget in the operating system and releases the widget's
+	 * handle. If the widget does not have a handle, this method may hide the
+	 * widget, mark the widget as destroyed or do nothing, depending on the
+	 * widget.
+	 * <p>
+	 * When a widget is destroyed in the operating system, its descendants are
+	 * also destroyed by the operating system. This means that it is only
+	 * necessary to call <code>destroyWidget</code> on the root of the widget
+	 * tree.
+	 * </p>
+	 * <p>
+	 * This method is called after <code>releaseWidget()</code>.
+	 * </p>
+	 * <p>
+	 * See also <code>releaseChild()</code>, <code>releaseWidget()</code> and
+	 * <code>releaseHandle()</code>.
+	 * </p>
+	 * 
+	 * @see #dispose
+	 */
+	void destroyWidget() {
+		releaseQWidget();
+	}
+
+	/**
+	 * Disposes of the operating system resources associated with the receiver
+	 * and all its descendants. After this method has been invoked, the receiver
+	 * and all descendants will answer <code>true</code> when sent the message
+	 * <code>isDisposed()</code>. Any internal connections between the widgets
+	 * in the tree will have been removed to facilitate garbage collection.
+	 * <p>
+	 * NOTE: This method is not called recursively on the descendants of the
+	 * receiver. This means that, widget implementers can not detect when a
+	 * widget is being disposed of by re-implementing this method, but should
+	 * instead listen for the <code>Dispose</code> event.
+	 * </p>
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #addDisposeListener
+	 * @see #removeDisposeListener
+	 * @see #checkWidget
+	 */
+	public void dispose() {
+		/*
+		 * Note: It is valid to attempt to dispose a widget more than once. If
+		 * this happens, fail silently.
+		 */
+		if (isDisposed()) {
+			return;
+		}
+
+		if (!isValidThread()) {
+			error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		release(true);
+	}
+
+	/**
+	 * Does whatever widget specific cleanup is required, and then uses the code
+	 * in <code>SWTError.error</code> to handle the error.
+	 * 
+	 * @param code
+	 *            the descriptive error code
+	 * 
+	 * @see SWT#error(int)
+	 */
+	void error(int code) {
+		SWT.error(code);
+	}
+
+	boolean filters(int eventType) {
+		return display.filters(eventType);
+	}
+
+	char[] fixMnemonic(String string) {
+		return fixMnemonic(string, false);
+	}
+
+	char[] fixMnemonic(String string, boolean spaces) {
+		char[] buffer = new char[string.length() + 1];
+		string.getChars(0, string.length(), buffer, 0);
+		int i = 0, j = 0;
+		while (i < buffer.length) {
+			if (buffer[i] == '&') {
+				if (i + 1 < buffer.length && buffer[i + 1] == '&') {
+					if (spaces) {
+						buffer[j] = ' ';
+					}
+					j++;
+					i++;
+				}
+				i++;
+			} else {
+				buffer[j++] = buffer[i++];
+			}
+		}
+		while (j < buffer.length) {
+			buffer[j++] = 0;
+		}
+		return buffer;
+	}
+
+	/**
+	 * Returns the <code>Display</code> that is associated with the receiver.
+	 * <p>
+	 * A widget's display is either provided when it is created (for example,
+	 * top level <code>Shell</code>s) or is the same as its parent's display.
+	 * </p>
+	 * 
+	 * @return the receiver's display
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                </ul>
+	 */
+	public Display getDisplay() {
+		Display display = this.display;
+		if (display == null) {
+			error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return display;
+	}
+
+	/**
+	 * Returns an array of listeners who will be notified when an event of the
+	 * given type occurs. The event type is one of the event constants defined
+	 * in class <code>SWT</code>.
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @return an array of listeners that will be notified when the event occurs
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see SWT
+	 * @see #addListener(int, Listener)
+	 * @see #removeListener(int, Listener)
+	 * @see #notifyListeners
+	 * 
+	 * @since 3.4
+	 */
+	public Listener[] getListeners(int eventType) {
+		checkWidget();
+		if (eventTable == null) {
+			return new Listener[0];
+		}
+		return eventTable.getListeners(eventType);
+	}
+
+	Menu getMenu() {
+		return null;
+	}
+
+	/**
+	 * Returns the name of the widget. This is the name of the class without the
+	 * package name.
+	 * 
+	 * @return the name of the widget
+	 */
+	String getName() {
+		String string = getClass().getName();
+		int index = string.lastIndexOf('.');
+		if (index == -1) {
+			return string;
+		}
+		return string.substring(index + 1, string.length());
+	}
+
+	/*
+	 * Returns a short printable representation for the contents of a widget.
+	 * For example, a button may answer the label text. This is used by
+	 * <code>toString</code> to provide a more meaningful description of the
+	 * widget.
+	 * 
+	 * @return the contents string for the widget
+	 * 
+	 * @see #toString
+	 */
+	String getNameText() {
+		return ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the receiver's style information.
+	 * <p>
+	 * Note that the value which is returned by this method <em>may
+	 * not match</em> the value which was provided to the constructor when the
+	 * receiver was created. This can occur when the underlying operating system
+	 * does not support a particular combination of requested styles. For
+	 * example, if the platform widget used to implement a particular SWT widget
+	 * always has scroll bars, the result of calling this method would always
+	 * have the <code>SWT.H_SCROLL</code> and <code>SWT.V_SCROLL</code> bits
+	 * set.
+	 * </p>
+	 * 
+	 * @return the style bits
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 */
+	public int getStyle() {
+		checkWidget();
+		return style;
+	}
+
+	/*
+	 * Returns <code>true</code> if the specified eventType is hooked, and
+	 * <code>false</code> otherwise. Implementations of SWT can avoid creating
+	 * objects and sending events when an event happens in the operating system
+	 * but there are no listeners hooked for the event.
+	 * 
+	 * @param eventType the event to be checked
+	 * 
+	 * @return <code>true</code> when the eventType is hooked and
+	 * <code>false</code> otherwise
+	 * 
+	 * @see #isListening
+	 */
+	boolean hooks(int eventType) {
+		if (eventTable == null) {
+			return false;
+		}
+		return eventTable.hooks(eventType);
+	}
+
+	/**
+	 * Returns <code>true</code> if the widget has been disposed, and
+	 * <code>false</code> otherwise.
+	 * <p>
+	 * This method gets the dispose state for the widget. When a widget has been
+	 * disposed, it is an error to invoke any other method using the widget.
+	 * </p>
+	 * 
+	 * @return <code>true</code> when the widget is disposed and
+	 *         <code>false</code> otherwise
+	 */
+	public boolean isDisposed() {
+		return (state & DISPOSED) != 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if there are any listeners for the specified
+	 * event type associated with the receiver, and <code>false</code>
+	 * otherwise. The event type is one of the event constants defined in class
+	 * <code>SWT</code>.
+	 * 
+	 * @param eventType
+	 *            the type of event
+	 * @return true if the event is hooked
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 */
+	public boolean isListening(int eventType) {
+		checkWidget();
+		return hooks(eventType);
+	}
+
+	/*
+	 * Returns <code>true</code> when subclassing is allowed and
+	 * <code>false</code> otherwise
+	 * 
+	 * @return <code>true</code> when subclassing is allowed and
+	 * <code>false</code> otherwise
+	 */
+	boolean isValidSubclass() {
+		return Display.isValidClass(getClass());
+	}
+
+	/*
+	 * Returns <code>true</code> when the current thread is the thread that
+	 * created the widget and <code>false</code> otherwise.
+	 * 
+	 * @return <code>true</code> when the current thread is the thread that
+	 * created the widget and <code>false</code> otherwise
+	 */
+	boolean isValidThread() {
+		return getDisplay().isValidThread();
+	}
+
+	GC new_GC(GCData data) {
+		return null;
+	}
+
+	/**
+	 * Notifies all of the receiver's listeners for events of the given type
+	 * that one such event has occurred by invoking their
+	 * <code>handleEvent()</code> method. The event type is one of the event
+	 * constants defined in class <code>SWT</code>.
+	 * 
+	 * @param eventType
+	 *            the type of event which has occurred
+	 * @param event
+	 *            the event data
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see SWT
+	 * @see #addListener
+	 * @see #getListeners(int)
+	 * @see #removeListener(int, Listener)
+	 */
+	public void notifyListeners(int eventType, Event event) {
+		checkWidget();
+		if (event == null) {
+			event = new Event();
+		}
+		sendEvent(eventType, event);
+	}
+
+	void postEvent(int eventType) {
+		sendEvent(eventType, null, false);
+	}
+
+	void postEvent(int eventType, Event event) {
+		sendEvent(eventType, event, false);
+	}
+
+	/*
+	 * Releases the widget hierarchy and optionally destroys the receiver. <p>
+	 * Typically, a widget with children will broadcast this message to all
+	 * children so that they too can release their resources. The
+	 * <code>releaseHandle</code> method is used as part of this broadcast to
+	 * zero the handle fields of the children without calling
+	 * <code>destroyWidget</code>. In this scenario, the children are actually
+	 * destroyed later, when the operating system destroys the widget tree. </p>
+	 * 
+	 * @param destroy indicates that the receiver should be destroyed
+	 * 
+	 * @see #dispose
+	 * 
+	 * @see #releaseParent
+	 * 
+	 * @see #releaseWidget
+	 */
+	void release(boolean destroy) {
+		if ((state & DISPOSE_SENT) == 0) {
+			state |= DISPOSE_SENT;
+			sendEvent(SWT.Dispose);
+		}
+		if ((state & DISPOSED) == 0) {
+			releaseChildren(destroy);
+		}
+		if ((state & RELEASED) == 0) {
+			state |= RELEASED;
+			if (destroy) {
+				releaseParent();
+				releaseWidget();
+				destroyWidget();
+			} else {
+				releaseWidget();
+				releaseQWidget();
+			}
+		}
+	}
+
+	void releaseChildren(boolean destroy) {
+	}
+
+	/*
+	 * Releases the widget's handle by zero'ing it out. Does not destroy or
+	 * release any operating system resources. <p> This method is called after
+	 * <code>releaseWidget</code> or from <code>destroyWidget</code> when a
+	 * widget is being destroyed to ensure that the widget is marked as
+	 * destroyed in case the act of destroying the widget in the operating
+	 * system causes application code to run in callback that could access the
+	 * widget. </p>
+	 * 
+	 * @see #dispose
+	 * 
+	 * @see #releaseChildren
+	 * 
+	 * @see #releaseParent
+	 * 
+	 * @see #releaseWidget
+	 */
+	void releaseQWidget() {
+		state |= DISPOSED;
+		display = null;
+		qWidget = null;
+	}
+
+	/*
+	 * Releases the receiver, a child in a widget hierarchy, from its parent.
+	 * <p> When a widget is destroyed, it may be necessary to remove it from an
+	 * internal data structure of the parent. When a widget has no handle, it
+	 * may also be necessary for the parent to hide the widget or otherwise
+	 * indicate that the widget has been disposed. For example, disposing a menu
+	 * bar requires that the menu bar first be released from the shell when the
+	 * menu bar is active. </p>
+	 * 
+	 * @see #dispose
+	 * 
+	 * @see #releaseChildren
+	 * 
+	 * @see #releaseWidget
+	 * 
+	 * @see #releaseHandle
+	 */
+	void releaseParent() {
+	}
+
+	/*
+	 * Releases any internal resources back to the operating system and clears
+	 * all fields except the widget handle. <p> When a widget is destroyed,
+	 * resources that were acquired on behalf of the programmer need to be
+	 * returned to the operating system. For example, if the widget made a copy
+	 * of an icon, supplied by the programmer, this copy would be freed in
+	 * <code>releaseWidget</code>. Also, to assist the garbage collector and
+	 * minimize the amount of memory that is not reclaimed when the programmer
+	 * keeps a reference to a disposed widget, all fields except the handle are
+	 * zero'd. The handle is needed by <code>destroyWidget</code>. </p>
+	 * 
+	 * @see #dispose
+	 * 
+	 * @see #releaseChildren
+	 * 
+	 * @see #releaseHandle
+	 * 
+	 * @see #releaseParent
+	 */
+	void releaseWidget() {
+		eventTable = null;
+		data = null;
+		mainData = null;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when an event of the given type occurs. The event type is one of
+	 * the event constants defined in class <code>SWT</code>.
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see SWT
+	 * @see #addListener
+	 * @see #getListeners(int)
+	 * @see #notifyListeners
+	 */
+	public void removeListener(int eventType, Listener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(eventType, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when an event of the given type occurs.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT public API.
+	 * It is marked public only so that it can be shared within the packages
+	 * provided by SWT. It should never be referenced from application code.
+	 * </p>
+	 * 
+	 * @param eventType
+	 *            the type of event to listen for
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see Listener
+	 * @see #addListener
+	 */
+	protected void removeListener(int eventType, SWTEventListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(eventType, listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will be
+	 * notified when the widget is disposed.
+	 * 
+	 * @param listener
+	 *            the listener which should no longer be notified
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see DisposeListener
+	 * @see #addDisposeListener
+	 */
+	public void removeDisposeListener(DisposeListener listener) {
+		checkWidget();
+		if (listener == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (eventTable == null) {
+			return;
+		}
+		eventTable.unhook(SWT.Dispose, listener);
+	}
+
+	boolean sendDragEvent(int button, int x, int y) {
+		Event event = new Event();
+		event.button = button;
+		event.x = x;
+		event.y = y;
+		//setInputState(event, SWT.DragDetect);
+		sendEvent(SWT.DragDetect, event);
+		if (isDisposed()) {
+			return false;
+		}
+		return event.doit;
+	}
+
+	void sendEvent(Event event) {
+		event.display = display;
+		if (!display.filterEvent(event)) {
+			if (eventTable != null) {
+				eventTable.sendEvent(event);
+			}
+		}
+	}
+
+	void sendEvent(int eventType) {
+		sendEvent(eventType, null, true);
+	}
+
+	void sendEvent(int eventType, Event event) {
+		sendEvent(eventType, event, true);
+	}
+
+	void sendEvent(int eventType, Event event, boolean send) {
+		if (eventTable == null && !display.filters(eventType)) {
+			return;
+		}
+		if (event == null) {
+			event = new Event();
+		}
+		event.type = eventType;
+		event.display = display;
+		event.widget = this;
+		if (event.time == 0) {
+			event.time = display.getLastEventTime();
+		}
+		if (send) {
+			sendEvent(event);
+		} else {
+			display.postEvent(event);
+		}
+	}
+
+	/**
+	 * Returns the application defined widget data associated with the receiver,
+	 * or null if it has not been set. The <em>widget data</em> is a single,
+	 * unnamed field that is stored with every widget.
+	 * <p>
+	 * Applications may put arbitrary objects in this field. If the object
+	 * stored in the widget data needs to be notified when the widget is
+	 * disposed of, it is the application's responsibility to hook the Dispose
+	 * event on the widget and do so.
+	 * </p>
+	 * 
+	 * @return the widget data
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - when the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - when called from the
+	 *                wrong thread</li>
+	 *                </ul>
+	 * 
+	 * @see #setData(Object)
+	 */
+	public Object getData() {
+		checkWidget();
+		return mainData;
+	}
+
+	/**
+	 * Returns the application defined property of the receiver with the
+	 * specified name, or null if it has not been set.
+	 * <p>
+	 * Applications may have associated arbitrary objects with the receiver in
+	 * this fashion. If the objects stored in the properties need to be notified
+	 * when the widget is disposed of, it is the application's responsibility to
+	 * hook the Dispose event on the widget and do so.
+	 * </p>
+	 * 
+	 * @param key
+	 *            the name of the property
+	 * @return the value of the property or null if it has not been set
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #setData(String, Object)
+	 */
+	public Object getData(String key) {
+		checkWidget();
+		if (key == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+
+		Object value = getDataMap().get(key);
+		if (value == null) {
+			if (getQMasterWidget() != null) {
+				value = getQMasterWidget().property(key);
+			}
+		}
+		return value;
+	}
+
+	private Map<String, Object> getDataMap() {
+		if (data == null) {
+			data = new HashMap<String, Object>(4);
+		}
+		return data;
+	}
+
+	/**
+	 * Sets the application defined widget data associated with the receiver to
+	 * be the argument. The <em>widget
+	 * data</em> is a single, unnamed field that is stored with every widget.
+	 * <p>
+	 * Applications may put arbitrary objects in this field. If the object
+	 * stored in the widget data needs to be notified when the widget is
+	 * disposed of, it is the application's responsibility to hook the Dispose
+	 * event on the widget and do so.
+	 * </p>
+	 * 
+	 * @param data
+	 *            the widget data
+	 * 
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - when the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - when called from the
+	 *                wrong thread</li>
+	 *                </ul>
+	 * 
+	 * @see #getData()
+	 */
+	public void setData(Object data) {
+		checkWidget();
+		this.mainData = data;
+	}
+
+	/**
+	 * Sets the application defined property of the receiver with the specified
+	 * name to the given value.
+	 * <p>
+	 * Applications may associate arbitrary objects with the receiver in this
+	 * fashion. If the objects stored in the properties need to be notified when
+	 * the widget is disposed of, it is the application's responsibility to hook
+	 * the Dispose event on the widget and do so.
+	 * </p>
+	 * 
+	 * @param key
+	 *            the name of the property
+	 * @param value
+	 *            the new value for the property
+	 * 
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_WIDGET_DISPOSED - if the receiver has been
+	 *                disposed</li>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the receiver</li>
+	 *                </ul>
+	 * 
+	 * @see #getData(String)
+	 */
+	public void setData(String key, Object value) {
+		checkWidget();
+		if (key == null) {
+			error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if ("stylesheet".equals(key)) { //$NON-NLS-1$
+			setStyleSheet((String) value);
+			return;
+		}
+
+		if (value == null) {
+			if (getDataMap().containsKey(key)) {
+				getDataMap().remove(key);
+			} else {
+				if (getQMasterWidget() != null) {
+					getQMasterWidget().setProperty(key, null);
+					updateStyleSheet(); // we have to update the style, cause the property can be referenced in the style
+				}
+			}
+		} else {
+			// we store Strings/Booleans adin the Qt Control, everything
+			// else in the local map
+			if (getQMasterWidget() != null && (value instanceof String || value instanceof Boolean)) {
+				getQMasterWidget().setProperty(key, value);
+				updateStyleSheet(); // we have to update the style, cause the property can be referenced in the style
+			} else {
+				getDataMap().put(key, value);
+			}
+		}
+	}
+
+	boolean showMenu(int x, int y) {
+		Event event = new Event();
+		event.x = x;
+		event.y = y;
+		sendEvent(SWT.MenuDetect, event);
+		if (!event.doit) {
+			return true;
+		}
+		Menu menu = getMenu();
+		if (menu != null && !menu.isDisposed()) {
+			if (x != event.x || y != event.y) {
+				menu.setLocation(event.x, event.y);
+			}
+			menu.setVisible(true);
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Returns a string containing a concise, human-readable description of the
+	 * receiver.
+	 * 
+	 * @return a string representation of the receiver
+	 */
+	@Override
+	public String toString() {
+		return getName() + " {" + getDescription() + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	private String getDescription() {
+		if (isDisposed()) {
+			return "*Disposed*"; //$NON-NLS-1$
+		}
+		if (!isValidThread()) {
+			return "*Wrong Thread*"; //$NON-NLS-1$
+		}
+		return getNameText();
+	}
+
+	/* Qt Events */
+	public boolean qtCloseEvent() {
+		return false;
+	}
+
+	public boolean qtResizeEvent(QObject source, QResizeEvent resizeEvent) {
+		return false;
+	}
+
+	public boolean qtMoveEvent(QObject source, QMoveEvent moveEvent) {
+		return false;
+	}
+
+	public boolean qtPaintEvent(QObject source, QPaintEvent paintEvent) {
+		return false;
+	}
+
+	public boolean qtKeyPressEvent(QObject source, QKeyEvent qEvent) {
+		return false;
+	}
+
+	public boolean qtKeyReleaseEvent(QObject source, QKeyEvent qEvent) {
+		return false;
+	}
+
+	public boolean qtMouseMoveEvent(QObject source, QMouseEvent mouseEvent) {
+		return false;
+	}
+
+	public boolean qtMouseButtonPressEvent(QObject source, QMouseEvent mouseEvent) {
+		return false;
+	}
+
+	public boolean qtMouseButtonReleaseEvent(QObject source, QMouseEvent mouseEvent) {
+		return false;
+	}
+
+	public boolean qtMouseButtonDblClickEvent(QObject source, QMouseEvent mouseEvent) {
+		return false;
+	}
+
+	public boolean qtMouseEnterEvent(Object source) {
+		return false;
+	}
+
+	public boolean qtMouseLeaveEvent(Object source) {
+		return false;
+	}
+
+	public boolean qtContextMenuEvent(Object source, QContextMenuEvent event) {
+		return false;
+	}
+
+	public boolean qtShowEvent(QObject source) {
+		return false;
+	}
+
+	public boolean qtHideEvent(QObject source) {
+		return false;
+	}
+
+	public void qtFocusInEvent(QObject source) {
+		// nothing
+	}
+
+	public void qtFocusOutEvent(QObject source) {
+		// nothing
+	}
+
+	public boolean qtWindowActivateEvent(QObject source) {
+		return false;
+	}
+
+	public boolean qtWindowDeactivateEvent(QObject obj) {
+		return false;
+	}
+
+	public boolean qtWindowStateChangeEvent(QObject obj, QWindowStateChangeEvent event) {
+		return false;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Color.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java
old mode 100644
new mode 100755
index 7cff455..2f064a3
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java	
@@ -375,7 +375,7 @@ public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) {
 		OS.GetObject(hBitmap, BITMAP.sizeof, dibBM);
 		byte[] srcData = img.data;
 		if (source.alpha != -1) {
-			for (int i = 3, ap=0; i < srcData.length; i+=4, ap++) {
+			for (int i = 3; i < srcData.length; i+=4) {
 				srcData[i] = (byte)source.alpha;
 			}
 		} else if (source.alphaData != null) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/DeviceData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/DeviceData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Font.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java
old mode 100644
new mode 100755
index c091768..31c1284
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java	
@@ -461,8 +461,8 @@ public int getStyle() {
  * @see #equals
  */
 public int hashCode () {
-	return data.lfCharSet ^ getHeight() ^ data.lfWidth ^ data.lfEscapement ^
-		data.lfOrientation ^ data.lfWeight ^ data.lfItalic ^data.lfUnderline ^
+	return data.lfCharSet ^ getHeight() << 8 ^ data.lfWidth ^ data.lfEscapement ^
+		data.lfOrientation ^ data.lfWeight ^ data.lfItalic ^ data.lfUnderline ^
 		data.lfStrikeOut ^ data.lfCharSet ^ data.lfOutPrecision ^
 		data.lfClipPrecision ^ data.lfQuality ^ data.lfPitchAndFamily ^
 		getName().hashCode();
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontMetrics.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontMetrics.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GCData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/GCData.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Region.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Region.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java
index 4f72f56..4c3d6f4 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -321,8 +321,15 @@ void computeRuns (GC gc) {
 				run = allRuns[--i];
 				start = run.length - 1;
 			}
-			if (start == 0 && i != lineStart && !run.tab) {
+			boolean wrapEntireRun = start == 0 && i != lineStart && !run.tab;
+			if (wrapEntireRun) {
+				breakRun(run);
+				OS.MoveMemory(logAttr, run.psla + (start * SCRIPT_LOGATTR.sizeof), SCRIPT_LOGATTR.sizeof);
+				wrapEntireRun = !logAttr.fWhiteSpace;
+			}
+			if (wrapEntireRun) {
 				run = allRuns[--i];
+				start = run.length;
 			} else 	if (start <= 0 && i == lineStart) {
 				if (lineWidth == wrapWidth && firstIndice > 0) {
 					i = firstIndice - 1;
@@ -637,7 +644,7 @@ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Col
 	int /*long*/ gdipSelBackground = 0, gdipSelForeground = 0, gdipFont = 0, lastHFont = 0;
 	int /*long*/ selBackground = 0;
 	int selForeground = 0;
-	if (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0) {
+	if (hasSelection || ((flags & SWT.LAST_LINE_SELECTION) != 0 && (flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0)) {
 		int fgSel = selectionForeground != null ? selectionForeground.handle : OS.GetSysColor (OS.COLOR_HIGHLIGHTTEXT); 
 		int bgSel = selectionBackground != null ? selectionBackground.handle : OS.GetSysColor (OS.COLOR_HIGHLIGHT); 
 		if (gdip) {
@@ -661,7 +668,7 @@ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Col
 		int lineHeight = lineY[line+1] - lineY[line] - lineSpacing;
 		
 		//Draw last line selection
-		if (flags != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) {
+		if ((flags & (SWT.FULL_SELECTION | SWT.DELIMITER_SELECTION)) != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) {
 			boolean extents = false;
 			if (line == runs.length - 1 && (flags & SWT.LAST_LINE_SELECTION) != 0) {
 				extents = true;
@@ -727,8 +734,8 @@ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Col
 			TextStyle style = run.style;
 			boolean hasAdorners = style != null && (style.underline || style.strikeout || style.borderStyle != SWT.NONE);
 			if (run.length == 0) continue;
-			if (drawX > clip.x + clip.width && !hasAdorners) break;
-			if (drawX + run.width >= clip.x || hasAdorners) {
+			if (drawX > clip.x + clip.width) break;
+			if (drawX + run.width >= clip.x) {
 				boolean skipTab = run.tab && !hasAdorners;
 				if (!skipTab && (!run.lineBreak || run.softBreak) && !(style != null && style.metrics != null)) {
 					OS.SetRect(rect, drawX, drawY, drawX + run.width, drawY + lineHeight);
@@ -757,15 +764,15 @@ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Col
 							int fg = style != null && style.underline && style.underlineStyle == SWT.UNDERLINE_LINK ? linkColor : foreground;
 							pRect = drawRunTextGDIPRaster(gdipGraphics, run, rect, baseline, fg, selForeground, selectionStart, selectionEnd);
 						}
-						underlineClip = drawUnderlineGDIP(gdipGraphics, x, drawY + baseline, lineUnderlinePos, drawY + lineHeight, lineRuns, i, gdipFg, gdipSelForeground, underlineClip, pRect, selectionStart, selectionEnd, alpha);
-						strikeoutClip = drawStrikeoutGDIP(gdipGraphics, x, drawY + baseline, lineRuns, i, gdipFg, gdipSelForeground, strikeoutClip, pRect, selectionStart, selectionEnd, alpha);
-						borderClip = drawBorderGDIP(gdipGraphics, x, drawY, lineHeight, lineRuns, i, gdipFg, gdipSelForeground, borderClip, pRect, selectionStart, selectionEnd, alpha);
+						underlineClip = drawUnderlineGDIP(gdipGraphics, x, drawY + baseline, lineUnderlinePos, drawY + lineHeight, lineRuns, i, gdipFg, gdipSelForeground, underlineClip, pRect, selectionStart, selectionEnd, alpha, clip);
+						strikeoutClip = drawStrikeoutGDIP(gdipGraphics, x, drawY + baseline, lineRuns, i, gdipFg, gdipSelForeground, strikeoutClip, pRect, selectionStart, selectionEnd, alpha, clip);
+						borderClip = drawBorderGDIP(gdipGraphics, x, drawY, lineHeight, lineRuns, i, gdipFg, gdipSelForeground, borderClip, pRect, selectionStart, selectionEnd, alpha, clip);
 					}  else {
 						int fg = style != null && style.underline && style.underlineStyle == SWT.UNDERLINE_LINK ? linkColor : foreground;
 						pRect = drawRunText(hdc, run, rect, baseline, fg, selForeground, selectionStart, selectionEnd);
-						underlineClip = drawUnderline(hdc, x, drawY + baseline, lineUnderlinePos, drawY + lineHeight, lineRuns, i, fg, selForeground, underlineClip, pRect, selectionStart, selectionEnd);
-						strikeoutClip = drawStrikeout(hdc, x, drawY + baseline, lineRuns, i, fg, selForeground, strikeoutClip, pRect, selectionStart, selectionEnd);
-						borderClip = drawBorder(hdc, x, drawY, lineHeight, lineRuns, i, fg, selForeground, borderClip, pRect,  selectionStart, selectionEnd);
+						underlineClip = drawUnderline(hdc, x, drawY + baseline, lineUnderlinePos, drawY + lineHeight, lineRuns, i, fg, selForeground, underlineClip, pRect, selectionStart, selectionEnd, clip);
+						strikeoutClip = drawStrikeout(hdc, x, drawY + baseline, lineRuns, i, fg, selForeground, strikeoutClip, pRect, selectionStart, selectionEnd, clip);
+						borderClip = drawBorder(hdc, x, drawY, lineHeight, lineRuns, i, fg, selForeground, borderClip, pRect,  selectionStart, selectionEnd, clip);
 					}
 				}
 			}
@@ -780,13 +787,14 @@ public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Col
 	if (selBackground != 0) OS.DeleteObject (selBackground);
 }
 
-RECT drawBorder(int /*long*/ hdc, int x, int y, int lineHeight, StyleItem[] line, int index, int color, int selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd) {
+RECT drawBorder(int /*long*/ hdc, int x, int y, int lineHeight, StyleItem[] line, int index, int color, int selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd, Rectangle drawClip) {
 	StyleItem run = line[index]; 
 	TextStyle style = run.style;
 	if (style == null) return null;
 	if (style.borderStyle == SWT.NONE) return null;
 	clipRect = addClipRect(run, clipRect, pRect, selectionStart, selectionEnd);
-	if (index + 1 >= line.length || !style.isAdherentBorder(line[index + 1].style)) {
+	boolean lastRunVisible = drawClip != null && (x + run.x + run.width) > (drawClip.x + drawClip.width);
+	if (index + 1 >= line.length || lastRunVisible || !style.isAdherentBorder(line[index + 1].style)) {
 		int left = run.x;
 		int start = run.start;
 		int end = run.start + run.length - 1;
@@ -811,19 +819,40 @@ RECT drawBorder(int /*long*/ hdc, int x, int y, int lineHeight, StyleItem[] line
 			}
 		}
 		int lineWidth = 1;
+		int pattern = 1;
 		int lineStyle = OS.PS_SOLID;
 		switch (style.borderStyle) {
 			case SWT.BORDER_SOLID: break;
-			case SWT.BORDER_DASH: lineStyle = OS.PS_DASH; break;
-			case SWT.BORDER_DOT: lineStyle = OS.PS_DOT; break;
+			case SWT.BORDER_DASH: {
+				lineStyle = OS.PS_DASH;
+				pattern = 4;
+				break;
+			}
+			case SWT.BORDER_DOT: {
+				lineStyle = OS.PS_DOT;
+				pattern = 2;
+				break;
+			}
 		}
 		int /*long*/ oldBrush = OS.SelectObject(hdc, OS.GetStockObject(OS.NULL_BRUSH));
 		LOGBRUSH logBrush = new LOGBRUSH();
 		logBrush.lbStyle = OS.BS_SOLID;
 		logBrush.lbColor = /*64*/(int)color;
-		int /*long*/ newPen = OS.ExtCreatePen(lineStyle | OS.PS_GEOMETRIC, Math.max(1, lineWidth), logBrush, 0, null);
+		int /*long*/ newPen = OS.ExtCreatePen(lineStyle | OS.PS_GEOMETRIC, lineWidth, logBrush, 0, null);
 		int /*long*/ oldPen = OS.SelectObject(hdc, newPen);
-		OS.Rectangle(hdc, x + left, y, x + run.x + run.width, y + lineHeight);
+		RECT drawRect = new RECT();
+		OS.SetRect(drawRect, x + left, y, x + run.x + run.width, y + lineHeight);
+		if (drawClip != null) {
+			if (drawRect.left < drawClip.x) {
+				int remainder = drawRect.left % pattern;
+				drawRect.left = drawClip.x / pattern * pattern + remainder - pattern;
+			}
+			if (drawRect.right > drawClip.x + drawClip.width) {
+				int remainder = drawRect.right % pattern;
+				drawRect.right = (drawClip.x + drawClip.width) / pattern * pattern + remainder + pattern;
+			}
+		}
+		OS.Rectangle(hdc, drawRect.left,drawRect.top, drawRect.right, drawRect.bottom);
 		OS.SelectObject(hdc, oldPen);
 		OS.DeleteObject(newPen);
 		if (clipRect != null) {
@@ -832,9 +861,9 @@ RECT drawBorder(int /*long*/ hdc, int x, int y, int lineHeight, StyleItem[] line
 			if (clipRect.right == -1) clipRect.right = 0x7ffff;
 			OS.IntersectClipRect(hdc, clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
 			logBrush.lbColor = /*64*/(int)selectionColor;
-			int /*long*/ selPen = OS.ExtCreatePen (lineStyle | OS.PS_GEOMETRIC, Math.max(1, lineWidth), logBrush, 0, null);
+			int /*long*/ selPen = OS.ExtCreatePen (lineStyle | OS.PS_GEOMETRIC, lineWidth, logBrush, 0, null);
 			oldPen = OS.SelectObject(hdc, selPen);
-			OS.Rectangle(hdc, x + left, y, x + run.x + run.width, y + lineHeight);
+			OS.Rectangle(hdc, drawRect.left, drawRect.top, drawRect.right, drawRect.bottom);
 			OS.RestoreDC(hdc, state);
 			OS.SelectObject(hdc, oldPen);
 			OS.DeleteObject(selPen);
@@ -845,13 +874,14 @@ RECT drawBorder(int /*long*/ hdc, int x, int y, int lineHeight, StyleItem[] line
 	return clipRect;
 }
 
-RECT drawBorderGDIP(int /*long*/ graphics, int x, int y, int lineHeight, StyleItem[] line, int index, int /*long*/ color, int /*long*/ selectionColor, RECT clipRect, RECT pRect,  int selectionStart, int selectionEnd, int alpha) {
+RECT drawBorderGDIP(int /*long*/ graphics, int x, int y, int lineHeight, StyleItem[] line, int index, int /*long*/ color, int /*long*/ selectionColor, RECT clipRect, RECT pRect,  int selectionStart, int selectionEnd, int alpha, Rectangle drawClip) {
 	StyleItem run = line[index]; 
 	TextStyle style = run.style;
 	if (style == null) return null;
 	if (style.borderStyle == SWT.NONE) return null;
 	clipRect = addClipRect(run, clipRect, pRect, selectionStart, selectionEnd);
-	if (index + 1 >= line.length || !style.isAdherentBorder(line[index + 1].style)) {
+	boolean lastRunVisible = drawClip != null && (x + run.x + run.width) > (drawClip.x + drawClip.width);
+	if (index + 1 >= line.length || lastRunVisible || !style.isAdherentBorder(line[index + 1].style)) {
 		int left = run.x;
 		int start = run.start;
 		int end = run.start + run.length - 1;
@@ -1118,13 +1148,14 @@ RECT drawRunTextGDIPRaster(int /*long*/ graphics, StyleItem run, RECT rect, int
 	return pRect;
 }
 
-RECT drawStrikeout(int /*long*/ hdc, int x, int baseline, StyleItem[] line, int index, int color, int selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd) {
+RECT drawStrikeout(int /*long*/ hdc, int x, int baseline, StyleItem[] line, int index, int color, int selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd, Rectangle drawClip) {
 	StyleItem run = line[index];
 	TextStyle style = run.style;
 	if (style == null) return null;
 	if (!style.strikeout) return null;
 	clipRect = addClipRect(run, clipRect, pRect, selectionStart, selectionEnd);
-	if (index + 1 >= line.length || !style.isAdherentStrikeout(line[index + 1].style)) {
+	boolean lastRunVisible = drawClip != null && (x + run.x + run.width) > (drawClip.x + drawClip.width);
+	if (index + 1 >= line.length || lastRunVisible || !style.isAdherentStrikeout(line[index + 1].style)) {
 		int left = run.x;
 		int start = run.start;
 		int end = run.start + run.length - 1;
@@ -1166,13 +1197,14 @@ RECT drawStrikeout(int /*long*/ hdc, int x, int baseline, StyleItem[] line, int
 	return clipRect;
 }
 
-RECT drawStrikeoutGDIP(int /*long*/ graphics, int x, int baseline, StyleItem[] line, int index, int /*long*/ color, int /*long*/ selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd, int alpha) {
+RECT drawStrikeoutGDIP(int /*long*/ graphics, int x, int baseline, StyleItem[] line, int index, int /*long*/ color, int /*long*/ selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd, int alpha, Rectangle drawClip) {
 	StyleItem run = line[index];
 	TextStyle style = run.style;
 	if (style == null) return null;
 	if (!style.strikeout) return null;
 	clipRect = addClipRect(run, clipRect, pRect, selectionStart, selectionEnd);
-	if (index + 1 >= line.length || !style.isAdherentStrikeout(line[index + 1].style)) {
+	boolean lastRunVisible = drawClip != null && (x + run.x + run.width) > (drawClip.x + drawClip.width);
+	if (index + 1 >= line.length || lastRunVisible || !style.isAdherentStrikeout(line[index + 1].style)) {
 		int left = run.x;
 		int start = run.start;
 		int end = run.start + run.length - 1;
@@ -1189,7 +1221,7 @@ RECT drawStrikeoutGDIP(int /*long*/ graphics, int x, int baseline, StyleItem[] l
 			clipRect = null;
 		} else {
 			if (fullSelection) {
-				color = selectionColor;
+				brush = selectionColor;
 				clipRect = null;
 			} else {
 				if (style.foreground != null) {
@@ -1222,13 +1254,14 @@ RECT drawStrikeoutGDIP(int /*long*/ graphics, int x, int baseline, StyleItem[] l
 	return clipRect;
 }
 
-RECT drawUnderline(int /*long*/ hdc, int x, int baseline, int lineUnderlinePos, int lineBottom, StyleItem[] line, int index, int color, int selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd) {
+RECT drawUnderline(int /*long*/ hdc, int x, int baseline, int lineUnderlinePos, int lineBottom, StyleItem[] line, int index, int color, int selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd, Rectangle drawClip) {
 	StyleItem run = line[index];
 	TextStyle style = run.style;
 	if (style == null) return null;
 	if (!style.underline) return null;
 	clipRect = addClipRect(run, clipRect, pRect, selectionStart, selectionEnd);
-	if (index + 1 >= line.length || !style.isAdherentUnderline(line[index + 1].style)) {
+	boolean lastRunVisible = drawClip != null && (x + run.x + run.width) > (drawClip.x + drawClip.width);
+	if (index + 1 >= line.length || lastRunVisible || !style.isAdherentUnderline(line[index + 1].style)) {
 		int left = run.x;
 		int start = run.start;
 		int end = run.start + run.length - 1;
@@ -1350,13 +1383,14 @@ RECT drawUnderline(int /*long*/ hdc, int x, int baseline, int lineUnderlinePos,
 	return clipRect;
 }
 
-RECT drawUnderlineGDIP (int /*long*/ graphics, int x, int baseline, int lineUnderlinePos, int lineBottom, StyleItem[] line, int index, int /*long*/ color, int /*long*/ selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd, int alpha) {
+RECT drawUnderlineGDIP (int /*long*/ graphics, int x, int baseline, int lineUnderlinePos, int lineBottom, StyleItem[] line, int index, int /*long*/ color, int /*long*/ selectionColor, RECT clipRect, RECT pRect, int selectionStart, int selectionEnd, int alpha, Rectangle drawClip) {
 	StyleItem run = line[index];
 	TextStyle style = run.style;
 	if (style == null) return null;
 	if (!style.underline) return null;
 	clipRect = addClipRect(run, clipRect, pRect, selectionStart, selectionEnd);
-	if (index + 1 >= line.length || !style.isAdherentUnderline(line[index + 1].style)) {
+	boolean lastRunVisible = drawClip != null && (x + run.x + run.width) > (drawClip.x + drawClip.width);
+	if (index + 1 >= line.length || lastRunVisible || !style.isAdherentUnderline(line[index + 1].style)) {
 		int left = run.x;
 		int start = run.start;
 		int end = run.start + run.length - 1;
@@ -1598,6 +1632,26 @@ public Rectangle getBounds (int start, int end) {
 	end = Math.min(Math.max(0, end), length - 1);
 	start = translateOffset(start);
 	end = translateOffset(end);
+	/* use the high surrogate for the start offset and the low surrogate for the end offset */
+	length = segmentsText.length();
+	char ch = segmentsText.charAt(start);
+	if (0xDC00 <= ch && ch <= 0xDFFF) {
+		if (start - 1 >= 0) {
+			ch = segmentsText.charAt(start - 1);
+			if (0xD800 <= ch && ch <= 0xDBFF) {
+				start--;
+			}
+		}
+	}
+	ch = segmentsText.charAt(end);
+	if (0xD800 <= ch && ch <= 0xDBFF) {
+		if (end + 1 < length) {
+			ch = segmentsText.charAt(end + 1);
+			if (0xDC00 <= ch && ch <= 0xDFFF) {
+				end++;
+			}
+		}
+	}
 	int left = 0x7fffffff, right = 0;
 	int top = 0x7fffffff, bottom = 0;
 	boolean isRTL = (orientation & SWT.RIGHT_TO_LEFT) != 0;
@@ -1956,6 +2010,27 @@ public Point getLocation (int offset, boolean trailing) {
 	if (offset == length) {
 		return new Point(getLineIndent(line) + lineWidth[line], lineY[line]);
 	}
+	/* For trailing use the low surrogate and for lead use the high surrogate */
+	char ch = segmentsText.charAt(offset);
+	if (trailing) {
+		if (0xD800 <= ch && ch <= 0xDBFF) {
+			if (offset + 1 < length) {
+				ch = segmentsText.charAt(offset + 1);
+				if (0xDC00 <= ch && ch <= 0xDFFF) {
+					offset++;
+				}
+			}
+		}
+	} else {
+		if (0xDC00 <= ch && ch <= 0xDFFF) {
+			if (offset - 1 >= 0) {
+				ch = segmentsText.charAt(offset - 1);
+				if (0xD800 <= ch && ch <= 0xDBFF) {
+					offset--;
+				}
+			}
+		}
+	}
 	int low = -1;
 	int high = allRuns.length;
 	while (high - low > 1) {
@@ -2039,9 +2114,16 @@ int _getOffset(int offset, int movement, boolean forward) {
 				}
 				switch (movement) {
 					case SWT.MOVEMENT_CLUSTER: {
-						if (properties.fNeedsCaretInfo) {
-							if (!logAttr.fInvalid && logAttr.fCharStop) return untranslateOffset(offset);
-						} else {
+						if (!properties.fNeedsCaretInfo || (!logAttr.fInvalid && logAttr.fCharStop)) {
+							char ch = segmentsText.charAt(offset);
+							if (0xDC00 <= ch && ch <= 0xDFFF) {
+								if (offset > 0) {
+									ch = segmentsText.charAt(offset - 1);
+									if (0xD800 <= ch && ch <= 0xDBFF) {
+										offset += step;
+									}
+								}
+							}
 							return untranslateOffset(offset);
 						}
 						break;
@@ -2182,8 +2264,28 @@ public int getOffset (int x, int y, int[] trailing) {
 			}
 			int /*long*/ advances = run.justify != 0 ? run.justify : run.advances;
 			OS.ScriptXtoCP(xRun, cChars, cGlyphs, run.clusters, run.visAttrs, advances, run.analysis, piCP, piTrailing);
-			if (trailing != null) trailing[0] = piTrailing[0];
-			return untranslateOffset(run.start + piCP[0]);
+			int offset = run.start + piCP[0];
+			char ch = segmentsText.charAt(offset);
+			int length = segmentsText.length();
+			if (0xD800 <= ch && ch <= 0xDBFF) {
+				if (offset + 1 < length) {
+					ch = segmentsText.charAt(offset + 1);
+					if (0xDC00 <= ch && ch <= 0xDFFF) {
+						if (trailing != null) trailing[0] = 0;
+					}
+				}
+			} else if (0xDC00 <= ch && ch <= 0xDFFF) {
+				if (offset - 1 >= 0) {
+					ch = segmentsText.charAt(offset - 1);
+					if (0xD800 <= ch && ch <= 0xDBFF) {
+						offset--;
+						if (trailing != null) trailing[0] = 2;
+					}
+				}
+			} else {
+				if (trailing != null) trailing[0] = piTrailing[0];
+			}
+			return untranslateOffset(offset);
 		}
 	}
 	if (trailing != null) trailing[0] = 0;
@@ -3245,17 +3347,18 @@ void shape (final int /*long*/ hdc, final StyleItem run) {
 			/*
 			* The run is composed only by white spaces, this happens when a run is split
 			* by a visual style. The font fallback for the script can not be determined
-			* using only white spaces. The solution is to use the font fallback of the 
-			* previous or next run of the same script.    
+			* using only white spaces. The solution is to use the font of the previous  
+			* or next run of the same script.    
 			*/
 			int index = 0;
 			while (index < allRuns.length - 1) {
 				if (allRuns[index] == run) {
 					if (index > 0) {
 						StyleItem pRun = allRuns[index - 1];
-						if (pRun.fallbackFont != 0 && pRun.analysis.eScript == run.analysis.eScript) {
+						if (pRun.analysis.eScript == run.analysis.eScript) {
+							int /*long*/ pFont = getItemFont(pRun);
 							LOGFONT logFont = OS.IsUnicode ? (LOGFONT)new LOGFONTW() : new LOGFONTA();
-							OS.GetObject(pRun.fallbackFont, LOGFONT.sizeof, logFont);
+							OS.GetObject(pFont, LOGFONT.sizeof, logFont);
 							newFont = OS.CreateFontIndirect(logFont);
 						}
 					}
@@ -3263,12 +3366,12 @@ void shape (final int /*long*/ hdc, final StyleItem run) {
 						if (index + 1 < allRuns.length - 1) {
 							StyleItem nRun = allRuns[index + 1];
 							if (nRun.analysis.eScript == run.analysis.eScript) {
+								OS.SelectObject(hdc, getItemFont(nRun));
 								shape(hdc, nRun);
-								if (nRun.fallbackFont != 0) {
-									LOGFONT logFont = OS.IsUnicode ? (LOGFONT)new LOGFONTW() : new LOGFONTA();
-									OS.GetObject(nRun.fallbackFont, LOGFONT.sizeof, logFont);
-									newFont = OS.CreateFontIndirect(logFont);
-								}
+								int /*long*/ nFont = getItemFont(nRun);
+								LOGFONT logFont = OS.IsUnicode ? (LOGFONT)new LOGFONTW() : new LOGFONTA();
+								OS.GetObject(nFont, LOGFONT.sizeof, logFont);
+								newFont = OS.CreateFontIndirect(logFont);
 							}
 						}
 					}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/BidiUtil.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/BidiUtil.java
index ebd4491..7cc26aa 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/BidiUtil.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/BidiUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -460,7 +460,7 @@ public static boolean isBidiPlatform() {
 		OS.EnumSystemLanguageGroups(lpEnumSystemLanguageGroupsProc, OS.LGRPID_INSTALLED, 0);
 		callback.dispose ();
 	} catch (ClassNotFoundException e) {
-		if (callback != null) callback.dispose();
+		//callback can only be null at this point
 	}
 	if (isBidiPlatform == 1) return true;
 	// need to look at system code page for NT & 98 platforms since EnumSystemLanguageGroups is
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java
index b694c22..3f66cf7 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,10 @@ public class ImageList {
 	Image [] images;
 
 public ImageList (int style) {
+	this (style, 32, 32);
+}
+
+public ImageList (int style, int width, int height) {
 	this.style = style;
 	int flags = OS.ILC_MASK;
 	if (OS.IsWinCE) {
@@ -45,7 +49,7 @@ public ImageList (int style) {
 		}
 	}
 	if ((style & SWT.RIGHT_TO_LEFT) != 0) flags |= OS.ILC_MIRROR;
-	handle = OS.ImageList_Create (32, 32, flags, 16, 16);
+	handle = OS.ImageList_Create (width, height, flags, 16, 16);
 	images = new Image [4];
 }
 
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java
old mode 100644
new mode 100755
index 02a5321..d68e3e5
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,8 +36,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
  * when the ARROW style is specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
@@ -461,6 +460,21 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 					TCHAR buffer = new TCHAR (getCodePage (), text, true);
 					RECT rect = new RECT ();
 					int flags = OS.DT_CALCRECT | OS.DT_SINGLELINE;
+					if ((style & SWT.WRAP) != 0 && wHint != SWT.DEFAULT) {
+						flags = OS.DT_CALCRECT | OS.DT_WORDBREAK;
+						rect.right = wHint - width - 2 * border;
+						if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+							rect.right -= CHECK_WIDTH + 3; 
+						} else {
+							rect.right -= 6;
+						}
+						if (OS.COMCTL32_MAJOR < 6 || !OS.IsAppThemed ()) {
+							rect.right -= 2;
+							if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+								rect.right -= 2;
+							}
+						}
+					}
 					OS.DrawText (hDC, buffer, -1, rect, flags);
 					width += rect.right - rect.left;
 					height = Math.max (height, rect.bottom - rect.top);
@@ -588,29 +602,7 @@ void enableWidget (boolean enabled) {
 	* image.  The fix is to set the complete image list only
 	* when the button is disabled.
 	*/
-	if (OS.COMCTL32_MAJOR >= 6) {
-		if (imageList != null) {
-			BUTTON_IMAGELIST buttonImageList = new BUTTON_IMAGELIST ();
-			OS.SendMessage (handle, OS.BCM_GETIMAGELIST, 0, buttonImageList);
-			if (imageList != null) imageList.dispose ();
-			imageList = new ImageList (style & SWT.RIGHT_TO_LEFT);
-			if (OS.IsWindowEnabled (handle)) {
-				imageList.add (image);
-			} else {
-				if (disabledImage != null) disabledImage.dispose ();
-				disabledImage = new Image (display, image, SWT.IMAGE_DISABLE);
-				imageList.add (disabledImage);
-			}
-			buttonImageList.himl = imageList.getHandle ();
-			OS.SendMessage (handle, OS.BCM_SETIMAGELIST, 0, buttonImageList);
-			/*
-			* Bug in Windows.  Under certain cirumstances yet to be
-			* isolated, BCM_SETIMAGELIST does not redraw the control
-			* when an image is set.  The fix is to force a redraw.
-			*/
-			OS.InvalidateRect (handle, null, true);
-		}
-	}
+	updateImageList ();
 }
 
 /**
@@ -906,14 +898,15 @@ void setDefault (boolean value) {
 	OS.SendMessage (handle, OS.BM_SETSTYLE, bits, 1);
 }
 
-boolean setFixedFocus () {
+public boolean setFocus () {
+	checkWidget ();
 	/*
 	* Feature in Windows.  When a radio button gets focus, 
 	* it selects the button in WM_SETFOCUS.  The fix is to
 	* not assign focus to an unselected radio button.
 	*/
-	if ((style & SWT.RADIO) != 0 && !getSelection ()) return false;
-	return super.setFixedFocus ();
+	if ((style & SWT.RADIO) != 0 && !getSelection () && display.fixFocus) return false;
+	return super.setFocus ();
 }
 
 /**
@@ -1106,6 +1099,37 @@ public void setText (String string) {
 	_setText (string);
 }
 
+void updateImageList () {
+	if (OS.COMCTL32_MAJOR >= 6) {
+		if (imageList != null) {
+			BUTTON_IMAGELIST buttonImageList = new BUTTON_IMAGELIST ();
+			OS.SendMessage (handle, OS.BCM_GETIMAGELIST, 0, buttonImageList);
+			if (imageList != null) imageList.dispose ();
+			imageList = new ImageList (style & SWT.RIGHT_TO_LEFT);
+			if (OS.IsWindowEnabled (handle)) {
+				imageList.add (image);
+			} else {
+				if (disabledImage != null) disabledImage.dispose ();
+				disabledImage = new Image (display, image, SWT.IMAGE_DISABLE);
+				imageList.add (disabledImage);
+			}
+			buttonImageList.himl = imageList.getHandle ();
+			OS.SendMessage (handle, OS.BCM_SETIMAGELIST, 0, buttonImageList);
+			/*
+			* Bug in Windows.  Under certain cirumstances yet to be
+			* isolated, BCM_SETIMAGELIST does not redraw the control
+			* when an image is set.  The fix is to force a redraw.
+			*/
+			OS.InvalidateRect (handle, null, true);
+		}
+	}	
+}
+
+void updateOrientation () {
+	super.updateOrientation ();
+	updateImageList ();
+}
+
 void updateSelection (int flags) {
 	if (flags != OS.SendMessage (handle, OS.BM_GETCHECK, 0, 0)) {
 		/*
@@ -1142,6 +1166,7 @@ int widgetStyle () {
 	if ((style & SWT.LEFT) != 0) bits |= OS.BS_LEFT;
 	if ((style & SWT.CENTER) != 0) bits |= OS.BS_CENTER;
 	if ((style & SWT.RIGHT) != 0) bits |= OS.BS_RIGHT;
+	if ((style & SWT.WRAP) != 0) bits |= OS.BS_MULTILINE;
 	if ((style & SWT.PUSH) != 0) return bits | OS.BS_PUSHBUTTON | OS.WS_TABSTOP;
 	if ((style & SWT.CHECK) != 0) return bits | OS.BS_CHECKBOX | OS.WS_TABSTOP;
 	if ((style & SWT.RADIO) != 0) return bits | OS.BS_RADIOBUTTON;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Canvas.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Canvas.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java
old mode 100644
new mode 100755
index 3423c38..890eee4
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ColorDialog.java
old mode 100644
new mode 100755
index 21dad77..e939e62
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ColorDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ColorDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,8 +26,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java
old mode 100644
new mode 100755
index 222fae2..9f4d485
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -301,7 +301,18 @@ int /*long*/ callWindowProc (int /*long*/ hwnd, int msg, int /*long*/ wParam, in
 	}
 	int /*long*/ hwndText = OS.GetDlgItem (handle, CBID_EDIT);
 	if (hwnd == hwndText) {
-		if (lockText && msg == OS.WM_SETTEXT) return 0;
+		if (lockText && msg == OS.WM_SETTEXT) {
+			int /*long*/ hHeap = OS.GetProcessHeap ();
+			int length = OS.GetWindowTextLength (handle);
+			TCHAR buffer = new TCHAR (getCodePage (), length + 1);
+			OS.GetWindowText (handle, buffer, length + 1);
+			int byteCount = buffer.length () * TCHAR.sizeof;
+			int /*long*/ pszText = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+			OS.MoveMemory (pszText, buffer, byteCount); 
+			int /*long*/ code = OS.CallWindowProc (EditProc, hwndText, msg, wParam, pszText);
+			OS.HeapFree (hHeap, 0, pszText);
+			return code; 
+		}
 		return OS.CallWindowProc (EditProc, hwnd, msg, wParam, lParam);
 	}
 	int /*long*/ hwndList = OS.GetDlgItem (handle, CBID_LIST);
@@ -802,8 +813,7 @@ public void setListVisible (boolean visible) {
  * @since 2.1.2
  */
 public int getOrientation () {
-	checkWidget();
-	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	return super.getOrientation ();
 }
 
 /**
@@ -1494,7 +1504,20 @@ void setBounds (int x, int y, int width, int height, int flags) {
 
 public void setFont (Font font) {
 	checkWidget ();
+
+	/*
+	* Feature in Windows.  For some reason, in a editable combo box,
+	* when WM_SETFONT is used to set the font of the control
+	* and the current text does not match an item in the
+	* list, Windows selects the item that most closely matches the
+	* contents of the combo.  The fix is to lock the current text
+	* by ignoring all WM_SETTEXT messages during processing of
+	* WM_SETFONT.
+	*/
+	boolean oldLockText = lockText;
+	if ((style & SWT.READ_ONLY) == 0) lockText = true;
 	super.setFont (font);
+	if ((style & SWT.READ_ONLY) == 0) lockText = oldLockText;
 	if ((style & SWT.H_SCROLL) != 0) setScrollWidth ();
 }
 
@@ -1600,69 +1623,7 @@ public void setItems (String [] items) {
  * @since 2.1.2
  */
 public void setOrientation (int orientation) {
-	checkWidget();
-	if (OS.IsWinCE) return;
-	if (OS.WIN32_VERSION < OS.VERSION (4, 10)) return;
-	int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
-	if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
-	style &= ~flags;
-	style |= orientation & flags;
-	int bits  = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-		style |= SWT.MIRRORED;
-		bits |= OS.WS_EX_LAYOUTRTL;
-	} else {
-		style &= ~SWT.MIRRORED;
-		bits &= ~OS.WS_EX_LAYOUTRTL;
-	}
-	OS.SetWindowLong (handle, OS.GWL_EXSTYLE, bits);
-	int /*long*/ hwndText = 0, hwndList = 0;
-	COMBOBOXINFO pcbi = new COMBOBOXINFO ();
-	pcbi.cbSize = COMBOBOXINFO.sizeof;
-	if (OS.GetComboBoxInfo (handle, pcbi)) {
-		hwndText = pcbi.hwndItem;
-		hwndList = pcbi.hwndList;
-	}
-	if (hwndText != 0) {
-		int bits1 = OS.GetWindowLong (hwndText, OS.GWL_EXSTYLE);
-		int bits2 = OS.GetWindowLong (hwndText, OS.GWL_STYLE);
-		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-			bits1 |= OS.WS_EX_RIGHT | OS.WS_EX_RTLREADING;
-			bits2 |= OS.ES_RIGHT;
-		} else {
-			bits1 &= ~(OS.WS_EX_RIGHT | OS.WS_EX_RTLREADING);
-			bits2 &= ~OS.ES_RIGHT;
-		}
-		OS.SetWindowLong (hwndText, OS.GWL_EXSTYLE, bits1);
-		OS.SetWindowLong (hwndText, OS.GWL_STYLE, bits2);
-		
-		/*
-		* Bug in Windows.  For some reason, the single line text field
-		* portion of the combo box does not redraw to reflect the new
-		* style bits.  The fix is to force the widget to be resized by
-		* temporarily shrinking and then growing the width and height.
-		*/
-		RECT rect = new RECT ();
-		OS.GetWindowRect (hwndText, rect);
-		int width = rect.right - rect.left, height = rect.bottom - rect.top;
-		OS.GetWindowRect (handle, rect);
-		int widthCombo = rect.right - rect.left, heightCombo = rect.bottom - rect.top;
-		int uFlags = OS.SWP_NOMOVE | OS.SWP_NOZORDER | OS.SWP_NOACTIVATE;
-		SetWindowPos (hwndText, 0, 0, 0, width - 1, height - 1, uFlags);
-		SetWindowPos (handle, 0, 0, 0, widthCombo - 1, heightCombo - 1, uFlags);
-		SetWindowPos (hwndText, 0, 0, 0, width, height, uFlags);
-		SetWindowPos (handle, 0, 0, 0, widthCombo, heightCombo, uFlags);
-		OS.InvalidateRect (handle, null, true);
-	}	
-	if (hwndList != 0) {
-		int bits1 = OS.GetWindowLong (hwndList, OS.GWL_EXSTYLE);		
-		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-			bits1 |= OS.WS_EX_LAYOUTRTL;
-		} else {
-			bits1 &= ~OS.WS_EX_LAYOUTRTL;
-		}
-		OS.SetWindowLong (hwndList, OS.GWL_EXSTYLE, bits1);
-	}
+	super.setOrientation (orientation);
 }
 
 void setScrollWidth () {
@@ -1975,6 +1936,63 @@ void updateDropDownHeight () {
 	}
 }
 
+void updateOrientation () {
+	int bits  = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+		bits |= OS.WS_EX_LAYOUTRTL;
+	} else {
+		bits &= ~OS.WS_EX_LAYOUTRTL;
+	}
+	OS.SetWindowLong (handle, OS.GWL_EXSTYLE, bits);
+	int /*long*/ hwndText = 0, hwndList = 0;
+	COMBOBOXINFO pcbi = new COMBOBOXINFO ();
+	pcbi.cbSize = COMBOBOXINFO.sizeof;
+	if (OS.GetComboBoxInfo (handle, pcbi)) {
+		hwndText = pcbi.hwndItem;
+		hwndList = pcbi.hwndList;
+	}
+	if (hwndText != 0) {
+		int bits1 = OS.GetWindowLong (hwndText, OS.GWL_EXSTYLE);
+		int bits2 = OS.GetWindowLong (hwndText, OS.GWL_STYLE);
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			bits1 |= OS.WS_EX_RIGHT | OS.WS_EX_RTLREADING;
+			bits2 |= OS.ES_RIGHT;
+		} else {
+			bits1 &= ~(OS.WS_EX_RIGHT | OS.WS_EX_RTLREADING);
+			bits2 &= ~OS.ES_RIGHT;
+		}
+		OS.SetWindowLong (hwndText, OS.GWL_EXSTYLE, bits1);
+		OS.SetWindowLong (hwndText, OS.GWL_STYLE, bits2);
+		
+		/*
+		* Bug in Windows.  For some reason, the single line text field
+		* portion of the combo box does not redraw to reflect the new
+		* style bits.  The fix is to force the widget to be resized by
+		* temporarily shrinking and then growing the width and height.
+		*/
+		RECT rect = new RECT ();
+		OS.GetWindowRect (hwndText, rect);
+		int width = rect.right - rect.left, height = rect.bottom - rect.top;
+		OS.GetWindowRect (handle, rect);
+		int widthCombo = rect.right - rect.left, heightCombo = rect.bottom - rect.top;
+		int uFlags = OS.SWP_NOMOVE | OS.SWP_NOZORDER | OS.SWP_NOACTIVATE;
+		SetWindowPos (hwndText, 0, 0, 0, width - 1, height - 1, uFlags);
+		SetWindowPos (handle, 0, 0, 0, widthCombo - 1, heightCombo - 1, uFlags);
+		SetWindowPos (hwndText, 0, 0, 0, width, height, uFlags);
+		SetWindowPos (handle, 0, 0, 0, widthCombo, heightCombo, uFlags);
+		OS.InvalidateRect (handle, null, true);
+	}	
+	if (hwndList != 0) {
+		int bits1 = OS.GetWindowLong (hwndList, OS.GWL_EXSTYLE);		
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			bits1 |= OS.WS_EX_LAYOUTRTL;
+		} else {
+			bits1 &= ~OS.WS_EX_LAYOUTRTL;
+		}
+		OS.SetWindowLong (hwndList, OS.GWL_EXSTYLE, bits1);
+	}
+}
+
 String verifyText (String string, int start, int end, Event keyEvent) {
 	Event event = new Event ();
 	event.text = string;
@@ -2361,6 +2379,7 @@ LRESULT wmClipboard (int /*long*/ hwndText, int msg, int /*long*/ wParam, int /*
 			}
 			break;
 		case OS.WM_SETTEXT:
+			if (lockText) return null;
 			end [0] = OS.GetWindowTextLength (hwndText);
 			int length = OS.IsUnicode ? OS.wcslen (lParam) : OS.strlen (lParam);
 			TCHAR buffer = new TCHAR (getCodePage (), length);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java
old mode 100644
new mode 100755
index 60cb2cf..746b0ab
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Composite.java	
@@ -236,9 +236,9 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		}
 	} else {
 		size = minimumSize (wHint, hHint, changed);
+		if (size.x == 0) size.x = DEFAULT_WIDTH;
+		if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	}
-	if (size.x == 0) size.x = DEFAULT_WIDTH;
-	if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) size.x = wHint;
 	if (hHint != SWT.DEFAULT) size.y = hHint;
 	Rectangle trim = computeTrim (0, 0, size.x, size.y);
@@ -826,11 +826,12 @@ void markLayout (boolean changed, boolean all) {
 
 Point minimumSize (int wHint, int hHint, boolean changed) {
 	Control [] children = _getChildren ();
+	Rectangle clientArea = getClientArea ();
 	int width = 0, height = 0;
 	for (int i=0; i<children.length; i++) {
 		Rectangle rect = children [i].getBounds ();
-		width = Math.max (width, rect.x + rect.width);
-		height = Math.max (height, rect.y + rect.height);
+		width = Math.max (width, rect.x - clientArea.x + rect.width);
+		height = Math.max (height, rect.y - clientArea.y + rect.height);
 	}
 	return new Point (width, height);
 }
@@ -1025,20 +1026,6 @@ void setBounds (int x, int y, int width, int height, int flags, boolean defer) {
 	}
 }
 
-boolean setFixedFocus () {
-	checkWidget ();
-	Control [] children = _getChildren ();
-	for (int i=0; i<children.length; i++) {
-		Control child = children [i];
-		if (child.setRadioFocus (false)) return true;
-	}
-	for (int i=0; i<children.length; i++) {
-		Control child = children [i];
-		if (child.setFixedFocus ()) return true;
-	}
-	return super.setFixedFocus ();
-}
-
 public boolean setFocus () {
 	checkWidget ();
 	Control [] children = _getChildren ();
@@ -1092,6 +1079,7 @@ public void setLayout (Layout layout) {
  * @since 3.1
  */
 public void setLayoutDeferred (boolean defer) {
+	checkWidget();
 	if (!defer) {
 		if (--layoutCount == 0) {
 			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
@@ -1284,6 +1272,27 @@ void updateLayout (boolean resize, boolean all) {
 	}
 }
 
+void updateOrientation () {
+	Control [] controls = _getChildren ();
+	RECT [] rects = new RECT [controls.length]; 
+	for (int i=0; i<controls.length; i++) {
+		Control control = controls [i];
+		RECT rect = rects [i] = new RECT();
+		control.forceResize ();
+		OS.GetWindowRect (control.topHandle (), rect);
+		OS.MapWindowPoints (0, handle, rect, 2);
+	}
+	int orientation = style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	super.updateOrientation ();
+	for (int i=0; i<controls.length; i++) {
+		Control control = controls [i];
+		RECT rect = rects [i];
+		control.setOrientation (orientation);
+		int flags = OS.SWP_NOSIZE | OS.SWP_NOZORDER | OS.SWP_NOACTIVATE;
+		SetWindowPos (control.topHandle (), 0, rect.left, rect.top, 0, 0, flags);
+	}
+}
+
 void updateUIState () {
 	int /*long*/ hwndShell = getShell ().handle;
 	int uiState = /*64*/(int)OS.SendMessage (hwndShell, OS.WM_QUERYUISTATE, 0, 0);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java
old mode 100644
new mode 100755
index 9ec0de7..ee86187
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.swt.widgets;
 
 
+import org.eclipse.swt.internal.*;
 import org.eclipse.swt.internal.gdip.*;
 import org.eclipse.swt.internal.win32.*;
 import org.eclipse.swt.graphics.*;
@@ -44,6 +45,7 @@ import org.eclipse.swt.accessibility.*;
  */
 
 public abstract class Control extends Widget implements Drawable {
+
 	/**
 	 * the handle to the OS resource 
 	 * (Warning: This field is platform dependent)
@@ -194,6 +196,41 @@ public void addFocusListener (FocusListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when gesture events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>GestureListener</code> interface.
+ * <p>
+ * NOTE: If <code>setTouchEnabled(true)</code> has previously been
+ * invoked on the receiver then <code>setTouchEnabled(false)</code>
+ * must be invoked on it to specify that gesture events should be
+ * sent instead of touch events.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #removeGestureListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Gesture, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when help events are generated for the control,
  * by sending it one of the messages defined in the
  * <code>HelpListener</code> interface.
@@ -422,6 +459,40 @@ public void addPaintListener (PaintListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when touch events occur, by sending it
+ * one of the messages defined in the <code>TouchListener</code>
+ * interface.
+ * <p>
+ * NOTE: You must also call <code>setTouchEnabled(true)</code> to 
+ * specify that touch events should be sent, which will cause gesture
+ * events to not be sent.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #removeTouchListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addTouchListener (TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Touch,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when traversal events occur, by sending it
  * one of the messages defined in the <code>TraverseListener</code>
  * interface.
@@ -640,6 +711,30 @@ void createHandle () {
 		OS.ImmAssociateContext (handle, hIMC);
 		OS.ImmReleaseContext (hwndParent, hIMC);
 	}
+	
+}
+
+void checkGesture () {
+	if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 1)) {
+		int value = OS.GetSystemMetrics (OS.SM_DIGITIZER);
+		if ((value & (OS.NID_READY | OS.NID_MULTI_INPUT)) != 0) {
+			/*
+			 * Feature in Windows 7: All gestures are enabled by default except GID_ROTATE.
+			 * Enable it explicitly by calling SetGestureConfig.
+			 */
+			int /*long*/ hHeap = OS.GetProcessHeap ();
+			int /*long*/ pConfigs = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY,  GESTURECONFIG.sizeof);
+			if (pConfigs != 0) {
+				GESTURECONFIG config = new GESTURECONFIG();
+				config.dwID = OS.GID_ROTATE;
+				config.dwWant = 1;
+				config.dwBlock = 0;
+				OS.MoveMemory (pConfigs, config, GESTURECONFIG.sizeof);
+				OS.SetGestureConfig (handle, 0, 1, pConfigs, GESTURECONFIG.sizeof);
+				OS.HeapFree (hHeap, 0, pConfigs);
+			}		
+		}
+	}
 }
 
 void createWidget () {
@@ -655,6 +750,7 @@ void createWidget () {
 	setDefaultFont ();
 	checkMirrored ();
 	checkBorder ();
+	checkGesture ();
 	if ((state & PARENT_BACKGROUND) != 0) {
 		setBackground ();
 	}
@@ -949,8 +1045,15 @@ void fixChildren (Shell newShell, Shell oldShell, Decorations newDecorations, De
 void fixFocus (Control focusControl) {
 	Shell shell = getShell ();
 	Control control = this;
-	while (control != shell && (control = control.parent) != null) {
-		if (control.setFixedFocus ()) return;
+	Display display = this.display;
+	boolean oldFixFocus = display.fixFocus;
+	display.fixFocus = true;
+	try {
+		while (control != shell && (control = control.parent) != null) {
+				if (control.setFocus ()) return;
+		}
+	} finally {
+		display.fixFocus = oldFixFocus;
 	}
 	shell.setSavedFocus (focusControl);
 	OS.SetFocus (0);
@@ -1024,8 +1127,11 @@ void forceResize () {
 
 /**
  * Returns the accessible object for the receiver.
+ * <p>
  * If this is the first time this object is requested,
- * then the object is created and returned.
+ * then the object is created and returned. The object
+ * returned by getAccessible() does not need to be disposed.
+ * </p>
  *
  * @return the accessible object
  *
@@ -1362,6 +1468,24 @@ public Monitor getMonitor () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Composite</code>
  * or null when the receiver is a shell that was created with null or
  * a display for a parent.
@@ -1473,6 +1597,31 @@ public String getToolTipText () {
 }
 
 /**
+ * Returns <code>true</code> if this control is set to send touch events, or
+ * <code>false</code> if it is set to send gesture events instead.  This method
+ * also returns <code>false</code> if a touch-based input device is not detected
+ * (this can be determined with <code>Display#getTouchEnabled()</code>).  Use
+ * {@link #setTouchEnabled(boolean)} to switch the events that a control sends
+ * between touch events and gesture events.
+ *
+ * @return <code>true</code> if the control is set to send touch events, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTouchEnabled
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public boolean getTouchEnabled () {
+	checkWidget ();
+	return OS.IsTouchWindow (handle, null);
+}
+
+/**
  * Returns <code>true</code> if the receiver is visible, and
  * <code>false</code> otherwise.
  * <p>
@@ -2109,7 +2258,10 @@ void printWidget (int /*long*/ hwnd, int /*long*/ hdc, GC gc) {
 				OS.SetWindowLong (hwnd, OS.GWL_STYLE, (bits1 & ~OS.WS_CHILD) | OS.WS_POPUP);
 				OS.SetWindowLong (hwnd, OS.GWL_EXSTYLE, bits2 | OS.WS_EX_TOOLWINDOW);
 			}
+			Shell shell = getShell ();
+			Control savedFocus = shell.savedFocus;
 			OS.SetParent (hwnd, 0);
+			shell.setSavedFocus (savedFocus);
 			if ((bits1 & OS.WS_VISIBLE) != 0) {
 				OS.DefWindowProc (hwnd, OS.WM_SETREDRAW, 1, 0);
 			}
@@ -2369,6 +2521,32 @@ public void removeFocusListener(FocusListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when gesture events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #addGestureListener
+ * 
+ * @since 3.7
+ */
+public void removeGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Gesture, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when the help events are generated for the control.
  *
  * @param listener the listener which should no longer be notified
@@ -2571,6 +2749,32 @@ public void removePaintListener(PaintListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when touch events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #addTouchListener
+ * 
+ * @since 3.7
+ */
+public void removeTouchListener(TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Touch, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when traversal events occur.
  *
  * @param listener the listener which should no longer be notified
@@ -2641,6 +2845,84 @@ boolean sendFocusEvent (int type) {
 	return true;
 }
 
+boolean sendGestureEvent (GESTUREINFO gi) {
+	/**
+	 * Feature in Windows 7.  GID_BEGIN and GID_END events bubble up through the window
+	 * hierarchy for legacy support.  Ignore events not targeted for this control.
+	 */
+	if (gi.hwndTarget != handle) return true;
+	Event event = new Event ();
+	int type = 0;
+	Point globalPt = new Point(gi.x, gi.y);
+	Point point = toControl(globalPt);
+	event.x = point.x;
+	event.y = point.y;
+	switch (gi.dwID) {
+		case OS.GID_ZOOM:
+			type = SWT.Gesture;
+			event.detail = SWT.GESTURE_MAGNIFY;
+			int fingerDistance = OS.LODWORD (gi.ullArguments);
+			if ((gi.dwFlags & OS.GF_BEGIN) != 0) {
+				event.detail = SWT.GESTURE_BEGIN;
+				display.magStartDistance = display.lastDistance = fingerDistance;
+			} else if ((gi.dwFlags & OS.GF_END) != 0) {
+				event.detail = SWT.GESTURE_END;
+			}
+
+			/*
+			* The gi.ullArguments is the distance between the fingers. 
+			* Scale factor is relative to that original value.
+			*/
+			if (fingerDistance == display.lastDistance && event.detail == SWT.GESTURE_MAGNIFY) return true;			
+			if (fingerDistance != 0) event.magnification = fingerDistance / display.magStartDistance;
+			display.lastDistance = fingerDistance;
+			break;
+		case OS.GID_PAN:
+			type = SWT.Gesture;
+			event.detail = SWT.GESTURE_PAN;
+			if ((gi.dwFlags & OS.GF_BEGIN) != 0) {
+				event.detail = SWT.GESTURE_BEGIN;
+				display.lastX = point.x;
+				display.lastY = point.y;
+			} else if ((gi.dwFlags & OS.GF_END) != 0) {
+				event.detail = SWT.GESTURE_END;
+			}
+			if (display.lastX == point.x && display.lastY == point.y && event.detail == SWT.GESTURE_PAN) return true;
+			event.xDirection = point.x - display.lastX;
+			event.yDirection = point.y - display.lastY;
+			display.lastX = point.x;
+			display.lastY = point.y;			
+			break;
+		case OS.GID_ROTATE:
+			type = SWT.Gesture;			
+			event.detail = SWT.GESTURE_ROTATE;
+			double rotationInRadians = OS.GID_ROTATE_ANGLE_FROM_ARGUMENT (OS.LODWORD (gi.ullArguments));
+			if ((gi.dwFlags & OS.GF_BEGIN) != 0) {
+				event.detail = SWT.GESTURE_BEGIN;
+				display.rotationAngle = rotationInRadians;
+			} else if ((gi.dwFlags & OS.GF_END) != 0) {
+				event.detail = SWT.GESTURE_END;
+			}
+
+			/*
+			* Feature in Win32. Rotation events are sent even when the fingers are at rest.
+			* If the current rotation is the same as the last one received don't send the event.
+			*/
+			if (display.rotationAngle == rotationInRadians && event.detail == SWT.GESTURE_ROTATE) return true;
+			event.rotation = rotationInRadians * 180.0 / Compatibility.PI;
+			display.rotationAngle = rotationInRadians;
+			break;
+		default:
+			// Unknown gesture -- ignore.
+			break;
+	}
+
+    if (type == 0) return true;
+	setInputState (event, type);
+	sendEvent (type, event);	
+	return event.doit;
+}
+
 void sendMove () {
 	sendEvent (SWT.Move);
 }
@@ -2649,6 +2931,32 @@ void sendResize () {
 	sendEvent (SWT.Resize);
 }
 
+void sendTouchEvent (TOUCHINPUT touchInput []) {
+	Event event = new Event ();
+	POINT pt = new POINT ();
+	OS.GetCursorPos (pt);
+	OS.ScreenToClient (handle, pt);
+	event.x = pt.x;
+	event.y = pt.y;
+	Touch [] touches = new Touch [touchInput.length];
+	Monitor monitor = getMonitor ();
+	for (int i = 0; i < touchInput.length; i++) {
+		TOUCHINPUT ti = touchInput [i];
+		TouchSource inputSource = display.findTouchSource (ti.hSource, monitor);
+		int state = 0;
+		if ((ti.dwFlags & OS.TOUCHEVENTF_DOWN) != 0) state = SWT.TOUCHSTATE_DOWN;
+		if ((ti.dwFlags & OS.TOUCHEVENTF_UP) != 0) state = SWT.TOUCHSTATE_UP;
+		if ((ti.dwFlags & OS.TOUCHEVENTF_MOVE) != 0) state = SWT.TOUCHSTATE_MOVE;
+		boolean primary = (ti.dwFlags & OS.TOUCHEVENTF_PRIMARY) != 0;
+		int x = (int)OS.TOUCH_COORD_TO_PIXEL (ti.x);
+		int y = (int)OS.TOUCH_COORD_TO_PIXEL (ti.y);
+		touches [i] = new Touch (ti.dwID, inputSource, state, primary, x, y);
+	}
+	event.touches = touches;
+	setInputState (event, SWT.Touch);
+	postEvent (SWT.Touch, event);
+}
+
 void setBackground () {
 	Control control = findBackgroundControl ();
 	if (control == null) control = this;
@@ -2975,11 +3283,6 @@ public void setEnabled (boolean enabled) {
 	if (fixFocus) fixFocus (control);
 }
 
-boolean setFixedFocus () {
-	if ((style & SWT.NO_FOCUS) != 0) return false;
-	return forceFocus ();
-}
-
 /**
  * Causes the receiver to have the <em>keyboard focus</em>, 
  * such that all keyboard events will be delivered to it.  Focus
@@ -3162,6 +3465,33 @@ public void setMenu (Menu menu) {
 	this.menu = menu;
 }
 
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+	if (OS.IsWinCE) return;
+	if (OS.WIN32_VERSION < OS.VERSION (4, 10)) return;
+	int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+	if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
+	style &= ~SWT.MIRRORED;
+	style &= ~flags;
+	style |= orientation & flags;
+	updateOrientation ();
+	checkMirrored ();
+}
+
 boolean setRadioFocus (boolean tabbing) {
 	return false;
 }
@@ -3351,6 +3681,31 @@ void setToolTipText (Shell shell, String string) {
 }
 
 /**
+ * Sets whether this control should send touch events (by default controls do not).
+ * Setting this to <code>false</code> causes the receiver to send gesture events
+ * instead.  No exception is thrown if a touch-based input device is not
+ * detected (this can be determined with <code>Display#getTouchEnabled()</code>).
+ * 
+ * @param enabled the new touch-enabled state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public void setTouchEnabled(boolean enabled) {
+	checkWidget();
+	if (enabled) {
+		OS.RegisterTouchWindow(handle, 0);
+	} else {
+		OS.UnregisterTouchWindow(handle);
+	}
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
@@ -4058,6 +4413,17 @@ void updateLayout (boolean resize, boolean all) {
 	/* Do nothing */
 }
 
+void updateOrientation () {
+	int bits  = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+		bits |= OS.WS_EX_LAYOUTRTL;
+	} else {
+		bits &= ~OS.WS_EX_LAYOUTRTL;
+	}
+	OS.SetWindowLong (handle, OS.GWL_EXSTYLE, bits);
+	OS.InvalidateRect (handle, null, true);
+}
+
 CREATESTRUCT widgetCreateStruct () {
 	return null;
 }
@@ -4177,6 +4543,7 @@ int /*long*/ windowProc (int /*long*/ hwnd, int msg, int /*long*/ wParam, int /*
 		case OS.WM_ENDSESSION:			result = WM_ENDSESSION (wParam, lParam); break;
 		case OS.WM_ENTERIDLE:			result = WM_ENTERIDLE (wParam, lParam); break;
 		case OS.WM_ERASEBKGND:			result = WM_ERASEBKGND (wParam, lParam); break;
+		case OS.WM_GESTURE:				result = WM_GESTURE (wParam, lParam); break;
 		case OS.WM_GETDLGCODE:			result = WM_GETDLGCODE (wParam, lParam); break;
 		case OS.WM_GETFONT:				result = WM_GETFONT (wParam, lParam); break;
 		case OS.WM_GETOBJECT:			result = WM_GETOBJECT (wParam, lParam); break;
@@ -4239,8 +4606,11 @@ int /*long*/ windowProc (int /*long*/ hwnd, int msg, int /*long*/ wParam, int /*
 		case OS.WM_SYSCOMMAND:			result = WM_SYSCOMMAND (wParam, lParam); break;
 		case OS.WM_SYSKEYDOWN:			result = WM_SYSKEYDOWN (wParam, lParam); break;
 		case OS.WM_SYSKEYUP:			result = WM_SYSKEYUP (wParam, lParam); break;
+		case OS.WM_TABLET_FLICK:		result = WM_TABLET_FLICK (wParam, lParam); break;
 		case OS.WM_TIMER:				result = WM_TIMER (wParam, lParam); break;
+		case OS.WM_TOUCH:				result = WM_TOUCH (wParam, lParam); break;
 		case OS.WM_UNDO:				result = WM_UNDO (wParam, lParam); break;
+		case OS.WM_UNINITMENUPOPUP:		result = WM_UNINITMENUPOPUP (wParam, lParam); break;
 		case OS.WM_UPDATEUISTATE:		result = WM_UPDATEUISTATE (wParam, lParam); break;
 		case OS.WM_VSCROLL:				result = WM_VSCROLL (wParam, lParam); break;
 		case OS.WM_WINDOWPOSCHANGED:	result = WM_WINDOWPOSCHANGED (wParam, lParam); break;
@@ -4355,6 +4725,20 @@ LRESULT WM_ERASEBKGND (int /*long*/ wParam, int /*long*/ lParam) {
 	return null;
 }
 
+LRESULT WM_GESTURE (int /*long*/ wParam, int /*long*/ lParam) {
+	if (hooks (SWT.Gesture) || filters (SWT.Gesture)) {
+		GESTUREINFO gi = new GESTUREINFO ();
+		gi.cbSize = GESTUREINFO.sizeof;
+		if (OS.GetGestureInfo (lParam, gi)) {
+			if (!sendGestureEvent (gi)) {
+				OS.CloseGestureInfoHandle (lParam);
+				return LRESULT.ZERO; 
+			}
+		}
+	}
+	return null;
+}
+
 LRESULT WM_GETDLGCODE (int /*long*/ wParam, int /*long*/ lParam) {
 	return null;
 }
@@ -4433,6 +4817,16 @@ LRESULT WM_IME_ENDCOMPOSITION (int /*long*/ wParam, int /*long*/ lParam) {
 	return null;
 }
 
+LRESULT WM_UNINITMENUPOPUP (int /*long*/ wParam, int /*long*/ lParam) {
+	Menu hiddenMenu = menuShell ().findMenu (wParam);
+	if (hiddenMenu != null) {
+		Shell shell = getShell ();
+		hiddenMenu.sendEvent (SWT.Hide);
+		if (hiddenMenu == shell.activeMenu) shell.activeMenu = null;
+	}
+	return null;
+}
+
 LRESULT WM_INITMENUPOPUP (int /*long*/ wParam, int /*long*/ lParam) {
 	
 	/* Ignore WM_INITMENUPOPUP for an accelerator */
@@ -4615,42 +5009,6 @@ LRESULT WM_MENUSELECT (int /*long*/ wParam, int /*long*/ lParam) {
 				int id = OS.LOWORD (wParam);
 				item = display.getMenuItem (id);
 			}
-			Menu oldMenu = shell.activeMenu;
-			if (oldMenu != null) {
-				Menu ancestor = oldMenu;
-				while (ancestor != null && ancestor != newMenu) {
-					ancestor = ancestor.getParentMenu ();
-				}
-				if (ancestor == newMenu) {
-					ancestor = oldMenu;
-					while (ancestor != newMenu) {
-						/*
-						* It is possible (but unlikely), that application
-						* code could have disposed the widget in the hide
-						* event or the item about to be armed.  If this
-						* happens, stop searching up the ancestor list
-						* because there is no longer a link to follow.
-						*/
-						ancestor.sendEvent (SWT.Hide);
-						if (ancestor.isDisposed ()) break;
-						ancestor = ancestor.getParentMenu ();
-						if (ancestor == null) break;
-					}
-					/*
-					* The shell and/or the item could be disposed when
-					* processing hide events from above.  If this happens,
-					* ensure that the shell is not accessed and that no
-					* arm event is sent to the item.
-					*/
-					if (!shell.isDisposed ()) {
-						if (newMenu != null && newMenu.isDisposed ()) {
-							newMenu = null;
-						}
-						shell.activeMenu = newMenu;
-					}
-					if (item != null && item.isDisposed ()) item = null;
-				}
-			}
 		}
 		if (item != null) item.sendEvent (SWT.Arm);
 	}
@@ -4948,6 +5306,84 @@ LRESULT WM_SYSKEYUP (int /*long*/ wParam, int /*long*/ lParam) {
 	return wmSysKeyUp (handle, wParam, lParam);
 }
 
+LRESULT WM_TABLET_FLICK (int /*long*/ wParam, int /*long*/ lParam) {
+	if (!hooks (SWT.Gesture) && !filters (SWT.Gesture)) return null;
+	Event event = new Event ();
+	FLICK_DATA fData = new FLICK_DATA ();
+	int /*long*/ [] source = new int /*long*/ [1];
+	source[0] = wParam;
+	OS.MoveMemory (fData, source, OS.FLICK_DATA_sizeof ());
+	FLICK_POINT fPoint = new FLICK_POINT ();
+	source [0] = lParam;
+	OS.MoveMemory (fPoint, source, OS.FLICK_POINT_sizeof ());
+
+	switch (fData.iFlickDirection) {
+		case OS.FLICKDIRECTION_RIGHT:
+			event.xDirection = 1;
+			event.yDirection = 0;
+			break;
+		case OS.FLICKDIRECTION_UPRIGHT:
+			event.xDirection = 1;
+			event.yDirection = -1;
+			break;
+		case OS.FLICKDIRECTION_UP:
+			event.xDirection = 0;
+			event.yDirection = -1;
+			break;
+		case OS.FLICKDIRECTION_UPLEFT:
+			event.xDirection = -1;
+			event.yDirection = -1;
+			break;
+		case OS.FLICKDIRECTION_LEFT:
+			event.xDirection = -1;
+			event.yDirection = 0;
+			break;
+		case OS.FLICKDIRECTION_DOWNLEFT:
+			event.xDirection = -1;
+			event.yDirection = 1;
+			break;
+		case OS.FLICKDIRECTION_DOWN:
+			event.xDirection = 0;
+			event.yDirection = 1;
+			break;
+		case OS.FLICKDIRECTION_DOWNRIGHT:
+			event.xDirection = 1;
+			event.yDirection = 1;
+			break;
+	}
+	
+	event.x = fPoint.x;
+	event.y = fPoint.y;
+	event.type = SWT.Gesture;
+	event.detail = SWT.GESTURE_SWIPE;
+	setInputState (event, SWT.Gesture);
+	sendEvent (SWT.Gesture, event);
+	return event.doit ? null : LRESULT.ONE;
+}
+
+LRESULT WM_TOUCH (int /*long*/ wParam, int /*long*/ lParam) {
+	LRESULT result = null;
+	if (hooks (SWT.Touch) || filters (SWT.Touch)) {
+		int cInputs = OS.LOWORD (wParam);
+		int /*long*/ hHeap = OS.GetProcessHeap ();
+		int /*long*/ pInputs = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY,  cInputs * TOUCHINPUT.sizeof);
+		if (pInputs != 0) {
+			if (OS.GetTouchInputInfo (lParam, cInputs, pInputs, TOUCHINPUT.sizeof)) {
+				TOUCHINPUT ti [] = new TOUCHINPUT [cInputs];
+				for (int i = 0; i < cInputs; i++){
+					ti [i] = new TOUCHINPUT ();
+					OS.MoveMemory (ti [i], pInputs + i * TOUCHINPUT.sizeof, TOUCHINPUT.sizeof);
+				}
+				sendTouchEvent (ti);
+				OS.CloseTouchInputHandle (lParam); 
+				result = LRESULT.ZERO;
+			}
+			OS.HeapFree (hHeap, 0, pInputs);
+		}
+	}
+	return result;
+}
+
 LRESULT WM_TIMER (int /*long*/ wParam, int /*long*/ lParam) {
 	return null;
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/CoolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/CoolBar.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/CoolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/CoolItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java
index 7018524..ba07146 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,8 @@ import org.eclipse.swt.graphics.*;
  */
 
 public class DateTime extends Composite {
+	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
+	static final int MAX_YEAR = 9999;
 	boolean doubleClick, ignoreSelection;
 	SYSTEMTIME lastSystemTime;
 	SYSTEMTIME time = new SYSTEMTIME (); // only used in calendar mode
@@ -254,139 +256,58 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 			width = rect.right;
 			height = rect.bottom;
 		} else {
-			TCHAR buffer = new TCHAR (getCodePage (), 128);
-			int /*long*/ newFont, oldFont = 0;
-			int /*long*/ hDC = OS.GetDC (handle);
-			newFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0);
-			if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont);
-			RECT rect = new RECT ();
-			int flags = OS.DT_CALCRECT | OS.DT_EDITCONTROL | OS.DT_NOPREFIX;
-			SYSTEMTIME systime = new SYSTEMTIME ();
-			if ((style & SWT.DATE) != 0) {
-				/* Determine the widest/tallest year string. */
-				systime.wMonth = 1;
-				systime.wDay = 1;
-				int widest = 0, secondWidest = 0, thirdWidest = 0;
-				for (int i = 0; i <= MAX_DIGIT; i++) {
-					systime.wYear = (short) (2000 + i); // year 2000 + i is guaranteed to exist
-					int size = OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, OS.DATE_SHORTDATE, systime, null, buffer, buffer.length ());
-					if (size == 0) {
-						buffer = new TCHAR (getCodePage (), size);
-						OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, OS.DATE_SHORTDATE, systime, null, buffer, buffer.length ());
-					}
-					rect.left = rect.top = rect.right = rect.bottom = 0;
-					OS.DrawText (hDC, buffer, size, rect, flags);
-					if (rect.right - rect.left >= width) {
-						width = rect.right - rect.left;
-						thirdWidest = secondWidest;
-						secondWidest = widest;
-						widest = i;
-					}
-					height = Math.max(height, rect.bottom - rect.top);
-				}
-				if (widest > 1) widest = widest * 1000 + widest * 100 + widest * 10 + widest;
-				else if (secondWidest > 1) widest = secondWidest * 1000 + widest * 100 + widest * 10 + widest;
-				else widest = thirdWidest * 1000 + widest * 100 + widest * 10 + widest;
-				systime.wYear = (short) widest;
-
-				/* Determine the widest/tallest month name string. */
-				width = widest = 0;
-				for (short i = 0; i < MONTH_NAMES.length; i++) {
-					int name = MONTH_NAMES [i];
-					int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, name, buffer, buffer.length ());
-					if (size == 0) {
-						buffer = new TCHAR (getCodePage (), size);
-						OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, name, buffer, buffer.length ());
-					}
-					rect.left = rect.top = rect.right = rect.bottom = 0;
-					OS.DrawText (hDC, buffer, size, rect, flags);
-					if (rect.right - rect.left > width) {
-						width = rect.right - rect.left;
-						widest = i;
-					}
-					height = Math.max(height, rect.bottom - rect.top);
-				}
-				systime.wMonth = (short) (widest + 1);
-
-				/* Determine the widest/tallest date string in the widest month of the widest year. */
-				int dwFlags = ((style & SWT.MEDIUM) != 0) ? OS.DATE_SHORTDATE : ((style & SWT.SHORT) != 0) ? OS.DATE_YEARMONTH : OS.DATE_LONGDATE;
-				width = 0;
-				for (short i = 1; i <= MAX_DAY; i++) {
-					systime.wDay = i;
-					int size = OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
-					if (size == 0) {
-						buffer = new TCHAR (getCodePage (), size);
-						OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+			if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) {
+				/* Vista and later: use DTM_GETIDEALSIZE. */
+				SIZE size = new SIZE ();
+				OS.SendMessage(handle, OS.DTM_GETIDEALSIZE, 0, size);
+				width = size.cx;
+				height = size.cy;
+			} else {
+				int /*long*/ newFont, oldFont = 0;
+				int /*long*/ hDC = OS.GetDC (handle);
+				newFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0);
+				if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont);
+				RECT rect = new RECT ();
+				if ((style & SWT.DATE) != 0) {
+					int dwFlags = 0;
+					TCHAR lpFormat = null;
+					if ((style & SWT.SHORT) != 0) {
+						lpFormat = new TCHAR (0, getCustomShortDateFormat(), true);
+					} else {
+						dwFlags = (style & SWT.MEDIUM) != 0 ? OS.DATE_SHORTDATE : OS.DATE_LONGDATE;
 					}
-					rect.left = rect.top = rect.right = rect.bottom = 0;
-					OS.DrawText (hDC, buffer, size, rect, flags);
-					width = Math.max(width, rect.right - rect.left);
-					height = Math.max(height, rect.bottom - rect.top);
-					if ((style & SWT.SHORT) != 0) break;
-				}
-			} else if ((style & SWT.TIME) != 0) {
-				/* Determine the widest/tallest hour string. This code allows for the possibility of ligatures. */
-				int dwFlags = ((style & SWT.SHORT) != 0) ? OS.TIME_NOSECONDS : 0;
-				short widest = 0;
-				int max = is24HourTime () ? MAX_24HOUR : MAX_12HOUR;
-				for (short i = 0; i < max; i++) {
-					systime.wHour = i;
-					int size = OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
-					if (size == 0) {
-						buffer = new TCHAR (getCodePage (), size);
-						OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					int size = OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, dwFlags, null, lpFormat, null, 0);
+					if (size > 0) {
+						TCHAR buffer = new TCHAR (getCodePage (), size);
+						OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, dwFlags, null, lpFormat, buffer, buffer.length ());
+						OS.DrawText (hDC, buffer, size, rect, OS.DT_CALCRECT | OS.DT_EDITCONTROL);
 					}
-					rect.left = rect.top = rect.right = rect.bottom = 0;
-					OS.DrawText (hDC, buffer, size, rect, flags);
-					if (rect.right - rect.left > width) {
-						width = rect.right - rect.left;
-						widest = i;
+				} else if ((style & SWT.TIME) != 0) {
+					int dwFlags = 0;
+					TCHAR lpFormat = null;
+					if ((style & SWT.SHORT) != 0) {
+						dwFlags = OS.TIME_NOSECONDS;
+						lpFormat = new TCHAR (0, getCustomShortTimeFormat(), true);
 					}
-					height = Math.max(height, rect.bottom - rect.top);
-				}
-				systime.wHour = widest;
-
-				/* Determine the widest/tallest minute and second string. */
-				width = widest = 0;
-				for (short i = 0; i < MAX_MINUTE; i++) {
-					systime.wMinute = i;
-					int size = OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
-					if (size == 0) {
-						buffer = new TCHAR (getCodePage (), size);
-						OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					int size = OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, null, lpFormat, null, 0);
+					if (size > 0) {
+						TCHAR buffer = new TCHAR (getCodePage (), size);
+						OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, null, lpFormat, buffer, buffer.length ());
+						OS.DrawText (hDC, buffer, size, rect, OS.DT_CALCRECT | OS.DT_EDITCONTROL);
 					}
-					rect.left = rect.top = rect.right = rect.bottom = 0;
-					OS.DrawText (hDC, buffer, size, rect, flags);
-					if (rect.right - rect.left > width) {
-						width = rect.right - rect.left;
-						widest = i;
-					}
-					height = Math.max(height, rect.bottom - rect.top);
-				}
-				systime.wMinute = widest;
-				systime.wSecond = widest;
-
-				/* Determine the widest/tallest time string for the widest hour, widest minute, and if applicable, widest second. */
-				int size = OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
-				if (size == 0) {
-					buffer = new TCHAR (getCodePage (), size);
-					OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
 				}
-				rect.left = rect.top = rect.right = rect.bottom = 0;
-				OS.DrawText (hDC, buffer, size, rect, flags);
 				width = rect.right - rect.left;
-				height = Math.max(height, rect.bottom - rect.top);
+				height = rect.bottom - rect.top;
+				if (newFont != 0) OS.SelectObject (hDC, oldFont);
+				OS.ReleaseDC (handle, hDC);
+				int upDownWidth = OS.GetSystemMetrics (OS.SM_CXVSCROLL);
+				width += upDownWidth + MARGIN;
 			}
-			if (newFont != 0) OS.SelectObject (hDC, oldFont);
-			OS.ReleaseDC (handle, hDC);
-			int upDownWidth = OS.GetSystemMetrics (OS.SM_CXVSCROLL);
 			int upDownHeight = OS.GetSystemMetrics (OS.SM_CYVSCROLL);
 			if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) {
-				// TODO: On Vista, can send DTM_GETDATETIMEPICKERINFO to ask the Edit control what its margins are
+				// TODO: Can maybe use DTM_GETDATETIMEPICKERINFO for this
 				upDownHeight += 7;
-				if ((style & SWT.DROP_DOWN) != 0) upDownWidth += 16;
 			}
-			width += upDownWidth + MARGIN;
 			height = Math.max (height, upDownHeight);
 		}
 	}
@@ -415,57 +336,10 @@ int defaultBackground () {
 	return OS.GetSysColor (OS.COLOR_WINDOW);
 }
 
-String getComputeSizeString () {
-	// TODO: Not currently used but might need for WinCE
-	if ((style & SWT.DATE) != 0) {
-		if ((style & SWT.SHORT) != 0) return getCustomShortDateFormat ();
-		if ((style & SWT.MEDIUM) != 0) return getShortDateFormat ();
-		if ((style & SWT.LONG) != 0) return getLongDateFormat ();
-	}
-	if ((style & SWT.TIME) != 0) {
-		if ((style & SWT.SHORT) != 0) return getCustomShortTimeFormat ();
-		return getTimeFormat ();
-	}
-	return "";
-}
-
 String getCustomShortDateFormat () {
 	TCHAR tchar = new TCHAR (getCodePage (), 80);
 	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SYEARMONTH, tchar, 80);
 	return size != 0 ? tchar.toString (0, size - 1) : "M/yyyy"; //$NON-NLS-1$
-	
-	//TODO: Not currently used, but may need for WinCE (or if numeric short date is required)
-//	StringBuffer buffer = new StringBuffer (getShortDateFormat ());
-//	int length = buffer.length ();
-//	boolean inQuotes = false;
-//	int start = 0, end = 0;
-//	while (start < length) {
-//		char ch = buffer.charAt (start);
-//		if (ch == SINGLE_QUOTE) inQuotes = !inQuotes;
-//		else if (ch == DAY_FORMAT_CONSTANT && !inQuotes) {
-//			end = start + 1;
-//			while (end < length && buffer.charAt (end) == DAY_FORMAT_CONSTANT) end++;
-//			int ordering = getShortDateFormatOrdering ();
-//			switch (ordering) {
-//			case MONTH_DAY_YEAR:
-//				// skip the following separator
-//				while (end < length && buffer.charAt (end) != YEAR_FORMAT_CONSTANT) end++;
-//				break;
-//			case DAY_MONTH_YEAR:
-//				// skip the following separator
-//				while (end < length && buffer.charAt (end) != MONTH_FORMAT_CONSTANT) end++;
-//				break;
-//			case YEAR_MONTH_DAY:
-//				// skip the preceding separator
-//				while (start > 0 && buffer.charAt (start) != MONTH_FORMAT_CONSTANT) start--;
-//				break;
-//			}
-//			break;
-//		}
-//		start++;
-//	}
-//	if (start < end) buffer.delete (start, end);
-//	return buffer.toString ();
 }
 
 String getCustomShortTimeFormat () {
@@ -490,48 +364,12 @@ String getCustomShortTimeFormat () {
 	return buffer.toString ();
 }
 
-String getLongDateFormat () {
-	//TODO: Not currently used, but may need for WinCE
-	TCHAR tchar = new TCHAR (getCodePage (), 80);
-	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SLONGDATE, tchar, 80);
-	return size > 0 ? tchar.toString (0, size - 1) : "dddd, MMMM dd, yyyy"; //$NON-NLS-1$
-}
-
-String getShortDateFormat () {
-	//TODO: Not currently used, but may need for WinCE
-	TCHAR tchar = new TCHAR (getCodePage (), 80);
-	//TODO: May need to OR with LOCALE_ICENTURY
-	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SSHORTDATE, tchar, 80);
-	return size > 0 ? tchar.toString (0, size - 1) : "M/d/yyyy"; //$NON-NLS-1$
-}
-
-int getShortDateFormatOrdering () {
-	//TODO: Not currently used, but may need for WinCE
-	TCHAR tchar = new TCHAR (getCodePage (), 4);
-	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_IDATE, tchar, 4);
-	if (size > 0) {
-		String number = tchar.toString (0, size - 1);
-		return Integer.parseInt (number);
-	}
-	return 0;
-}
-
 String getTimeFormat () {
 	TCHAR tchar = new TCHAR (getCodePage (), 80);
 	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_STIMEFORMAT, tchar, 80);
 	return size > 0 ? tchar.toString (0, size - 1) : "h:mm:ss tt"; //$NON-NLS-1$
 }
 
-boolean is24HourTime () {
-	TCHAR tchar = new TCHAR (getCodePage (), 4);
-	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_ITIME, tchar, 4);
-	if (size > 0) {
-		String number = tchar.toString (0, size - 1);
-		return Integer.parseInt (number) != 0;
-	}
-	return true;
-}
-
 /**
  * Returns the receiver's date, or day of the month.
  * <p>
@@ -716,6 +554,7 @@ public void removeSelectionListener (SelectionListener listener) {
  */
 public void setDate (int year, int month, int day) {
 	checkWidget ();
+	if (year < MIN_YEAR || year > MAX_YEAR) return;
 	SYSTEMTIME systime = new SYSTEMTIME ();
 	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
 	OS.SendMessage (handle, msg, 0, systime);
@@ -769,6 +608,7 @@ public void setDay (int day) {
  */
 public void setHours (int hours) {
 	checkWidget ();
+	if (hours < 0 || hours > 23) return;
 	SYSTEMTIME systime = new SYSTEMTIME ();
 	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
 	OS.SendMessage (handle, msg, 0, systime);
@@ -793,6 +633,7 @@ public void setHours (int hours) {
  */
 public void setMinutes (int minutes) {
 	checkWidget ();
+	if (minutes < 0 || minutes > 59) return;
 	SYSTEMTIME systime = new SYSTEMTIME ();
 	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
 	OS.SendMessage (handle, msg, 0, systime);
@@ -829,6 +670,10 @@ public void setMonth (int month) {
 	lastSystemTime = null;
 }
 
+public void setOrientation (int orientation) {
+	/* Currently supported only for CALENDAR style. */
+	if ((style & SWT.CALENDAR) != 0) super.setOrientation (orientation);
+}
 /**
  * Sets the receiver's seconds.
  * <p>
@@ -844,6 +689,7 @@ public void setMonth (int month) {
  */
 public void setSeconds (int seconds) {
 	checkWidget ();
+	if (seconds < 0 || seconds > 59) return;
 	SYSTEMTIME systime = new SYSTEMTIME ();
 	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
 	OS.SendMessage (handle, msg, 0, systime);
@@ -869,6 +715,7 @@ public void setSeconds (int seconds) {
  */
 public void setTime (int hours, int minutes, int seconds) {
 	checkWidget ();
+	if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || seconds < 0 || seconds > 59) return;
 	SYSTEMTIME systime = new SYSTEMTIME ();
 	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
 	OS.SendMessage (handle, msg, 0, systime);
@@ -905,6 +752,7 @@ public void setTime (int hours, int minutes, int seconds) {
  */
 public void setYear (int year) {
 	checkWidget ();
+	if (year < MIN_YEAR || year > MAX_YEAR) return;
 	SYSTEMTIME systime = new SYSTEMTIME ();
 	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
 	OS.SendMessage (handle, msg, 0, systime);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Decorations.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Decorations.java
old mode 100644
new mode 100755
index 6052f6b..badb1a3
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Decorations.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Decorations.java	
@@ -1189,6 +1189,18 @@ public void setMinimized (boolean minimized) {
 	_setMinimized (minimized);
 }
 
+public void setOrientation (int orientation) {
+    super.setOrientation (orientation);
+    if (menus != null) {
+        for (int i=0; i<menus.length; i++) {
+            Menu menu = menus [i];
+            if (menu != null && !menu.isDisposed () && (menu.getStyle () & SWT.POP_UP) != 0) {
+                menu._setOrientation (menu.getOrientation ());
+            }
+        }
+    }
+}
+
 void setParent () {
 	/*
 	* In order for an MDI child window to support
@@ -1558,7 +1570,7 @@ int widgetStyle () {
 	bits &= ~OS.WS_BORDER;
 	if ((style & SWT.NO_TRIM) != 0) {
 		if (parent == null) {
-			bits |= OS.WS_SYSMENU;
+			bits |= OS.WS_SYSMENU | OS.WS_MINIMIZEBOX;
 		}
 		return bits;
 	}
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DirectoryDialog.java
old mode 100644
new mode 100755
index 2c77b65..5236fda
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DirectoryDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.swt.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
old mode 100644
new mode 100755
index 5e2b654..0bf70ee
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,6 +168,7 @@ public class Display extends Device {
 	/* Focus */
 	int focusEvent;
 	Control focusControl;
+	boolean fixFocus;
 	
 	/* Menus */
 	Menu [] bars, popups;
@@ -245,6 +246,14 @@ public class Display extends Device {
 	boolean accelKeyHit, mnemonicKeyHit;
 	boolean lockActiveWindow, captureChanged, xMouse;
 	
+	/* Gesture state */
+	double magStartDistance, lastDistance;
+	double rotationAngle;
+	int lastX, lastY;
+	
+	/* Touch state */
+	TouchSource [] touchSources;
+	
 	/* Tool Tips */
 	int nextToolTipId;
 	
@@ -1421,6 +1430,27 @@ public static Display findDisplay (Thread thread) {
 	}
 }
 
+TouchSource findTouchSource (int /*long*/ touchDevice, Monitor monitor) {
+	if (touchSources == null) touchSources = new TouchSource [4];
+	int length = touchSources.length;
+	for (int i=0; i<length; i++) {
+		if (touchSources [i] != null && touchSources [i].handle == touchDevice) {
+			return touchSources [i];
+		}
+	}
+	int index = 0;
+	while (index < length) {
+		if (touchSources [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		TouchSource [] newTouchSources = new TouchSource [length + 4];
+		System.arraycopy (touchSources, 0, newTouchSources, 0, length);
+		touchSources = newTouchSources;
+	}
+	return touchSources [index] = new TouchSource (touchDevice, true, monitor.getBounds ()); 
+}
+
 /**
  * Returns the currently active <code>Shell</code>, or null
  * if no shell belonging to the currently running application
@@ -1440,6 +1470,23 @@ public Shell getActiveShell () {
 }
 
 /**
+ * Returns the single instance of the application menu bar, or
+ * <code>null</code> if there is no application menu bar for the platform.
+ *
+ * @return the application menu bar, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getMenuBar () {
+	checkDevice ();
+	return null;
+}
+
+/**
  * Returns a rectangle describing the receiver's size and location. Note that
  * on multi-monitor systems the origin can be negative.
  *
@@ -1571,7 +1618,7 @@ Control getControl (int /*long*/ handle) {
  * over top of, or null if it is not currently over one of the
  * controls built by the currently running application.
  *
- * @return the control under the cursor
+ * @return the control under the cursor or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1762,7 +1809,7 @@ public int getDoubleClickTime () {
  * any of the controls built by the currently running
  * application.
  *
- * @return the control under the cursor
+ * @return the focus control or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1910,7 +1957,7 @@ ImageList getImageList (int style, int width, int height) {
 		imageList = newList;
 	}
 	
-	ImageList list = new ImageList (style);
+	ImageList list = new ImageList (style, width, height);
 	imageList [i] = list;
 	list.addRef();
 	return list;
@@ -1940,7 +1987,7 @@ ImageList getImageListToolBar (int style, int width, int height) {
 		toolImageList = newList;
 	}
 	
-	ImageList list = new ImageList (style);
+	ImageList list = new ImageList (style, width, height);
 	toolImageList [i] = list;
 	list.addRef();
 	return list;
@@ -1970,7 +2017,7 @@ ImageList getImageListToolBarDisabled (int style, int width, int height) {
 		toolDisabledImageList = newList;
 	}
 	
-	ImageList list = new ImageList (style);
+	ImageList list = new ImageList (style, width, height);
 	toolDisabledImageList [i] = list;
 	list.addRef();
 	return list;
@@ -2000,7 +2047,7 @@ ImageList getImageListToolBarHot (int style, int width, int height) {
 		toolHotImageList = newList;
 	}
 	
-	ImageList list = new ImageList (style);
+	ImageList list = new ImageList (style, width, height);
 	toolHotImageList [i] = list;
 	list.addRef();
 	return list;
@@ -2481,6 +2528,24 @@ public Image getSystemImage (int id) {
 }
 
 /**
+ * Returns the single instance of the system-provided menu for the application, or
+ * <code>null</code> on platforms where no menu is provided for the application.
+ *
+ * @return the system menu, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getSystemMenu () {
+	checkDevice();
+	return null;
+}
+
+/**
  * Returns the single instance of the system taskBar or null
  * when there is no system taskBar available for the platform.
  *
@@ -2536,6 +2601,25 @@ public Thread getThread () {
 	}
 }
 
+/**	 
+ * Returns a boolean indicating whether a touch-aware input device is
+ * attached to the system and is ready for use.
+ *
+ * @return <code>true</code> if a touch-aware input device is detected, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public boolean getTouchEnabled () {
+	checkDevice();
+	int value = OS.GetSystemMetrics (OS.SM_DIGITIZER);
+	return (value & (OS.NID_READY | OS.NID_MULTI_INPUT)) == (OS.NID_READY | OS.NID_MULTI_INPUT);
+}
+
 int /*long*/ hButtonTheme () {
 	if (hButtonTheme != 0) return hButtonTheme;
 	return hButtonTheme = OS.OpenThemeData (hwndMessage, BUTTON);
@@ -2613,12 +2697,13 @@ protected void init () {
 	super.init ();
 	
 	/* Set the application user model ID */
+	char [] appName = null;
 	if (APP_NAME != null) {
 		if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 1)) {
 			int length = APP_NAME.length ();
-			char [] buffer = new char [length + 1];
-			APP_NAME.getChars (0, length, buffer, 0);
-			OS.SetCurrentProcessExplicitAppUserModelID (buffer);
+			appName = new char [length + 1];
+			APP_NAME.getChars (0, length, appName, 0);
+			OS.SetCurrentProcessExplicitAppUserModelID (appName);
 		}
 	}
 	
@@ -2731,6 +2816,18 @@ protected void init () {
 	/* Initialize OLE */
 	if (!OS.IsWinCE) OS.OleInitialize (0);
 	
+	if (appName != null) {
+		/* Delete any old jump list set for the ID */
+		int /*long*/ [] ppv = new int /*long*/ [1];
+		int hr = OS.CoCreateInstance (TaskBar.CLSID_DestinationList, 0, OS.CLSCTX_INPROC_SERVER, TaskBar.IID_ICustomDestinationList, ppv);
+		if (hr == OS.S_OK) {
+			/*ICustomDestinationList::DeleteList*/
+			OS.VtblCall (10, ppv [0], appName);
+			/*IUnknown::Release*/
+			OS.VtblCall (2, ppv [0]);
+		}
+	}
+	
 	/* Initialize buffered painting */
 	if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)){
 		OS.BufferedPaintInit ();
@@ -3851,6 +3948,8 @@ void releaseDisplay () {
 	clickRect = null;
 	hdr = null;
 	plvfi = null;
+	monitors = null;
+	touchSources = null;
 	
 	/* Release handles */
 	threadId = 0;
@@ -4934,4 +5033,41 @@ static String withCrLf (String string) {
 	return result.toString ();
 }
 
+static char [] withCrLf (char [] string) {
+	/* If the string is empty, return the string. */
+	int length = string.length;
+	if (length == 0) return string;
+	
+	/*
+	* Check for an LF or CR/LF and assume the rest of
+	* the string is formated that way.  This will not
+	* work if the string contains mixed delimiters.
+	* Also, compute the number of lines.
+	*/
+	int count = 0;
+	for (int i = 0; i < string.length; i++) {
+		if (string [i] == '\n') {
+			count++;
+			if (count == 1 && i > 0 && string [i - 1] == '\r') return string;
+		}
+	}
+	if (count == 0) return string;
+
+	/*
+	* The string is formatted with LF.  
+	*/
+	count += length;
+
+	/* Create a new string with the CR/LF line terminator. */
+	char [] result = new char [count];
+	for (int i = 0, j = 0; i < length && j < count; i++) {
+		if (string [i] == '\n') {
+			result [j++] = '\r';
+		}
+		result [j++] = string [i];
+	}
+	
+	return result;
+}
+
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FileDialog.java
old mode 100644
new mode 100755
index c84a13a..ede8c5d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FileDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FileDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,8 +27,7 @@ import org.eclipse.swt.*;
  * <p>
  * Note: Only one of the styles SAVE and OPEN may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FontDialog.java
old mode 100644
new mode 100755
index aa35f80..2d676ec
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FontDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/FontDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Group.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Group.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java
index bfd9425..3d09962 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -184,7 +184,7 @@ TF_DISPLAYATTRIBUTE getDisplayAttribute (short langid, int attInfo) {
 					int /*long*/ [] pDispInfo = new int /*long*/ [1];
 					TF_DISPLAYATTRIBUTE tempPda = new TF_DISPLAYATTRIBUTE ();
 					/* pEnum.Next () */
-					while ((hr = OS.VtblCall (4, pEnum [0], 1, pDispInfo, null)) == OS.S_OK) {
+					while ((hr = OS.VtblCall (4, pEnum [0], 1, pDispInfo, (int[])null)) == OS.S_OK) {
 						/* pDispInfo.GetAttributeInfo(); */
 						OS.VtblCall (5, pDispInfo [0], tempPda);
 						/* pDispInfo.Release () */
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Label.java
old mode 100644
new mode 100755
index 7bdb283..10f38ad
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Label.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Label.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,8 +39,7 @@ import org.eclipse.swt.graphics.*;
  * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
  * Only one of CENTER, LEFT and RIGHT may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/List.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/List.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java
old mode 100644
new mode 100755
index fe9f650..f73886d
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -906,6 +906,24 @@ String getNameText () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Decorations</code>.
  *
  * @return the receiver's parent
@@ -1430,6 +1448,39 @@ public void setLocation (Point location) {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7  
+ */
+public void setOrientation (int orientation) { 
+    checkWidget ();
+    if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+    _setOrientation (orientation);
+}
+
+void _setOrientation (int orientation) {
+   if (OS.IsWinCE) return;
+   if (OS.WIN32_VERSION < OS.VERSION (4, 10)) return;
+   int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+   if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
+   style &= ~flags;
+   style |= orientation & flags;
+   MenuItem [] itms = getItems ();
+   for (int i=0; i<itms.length; i++) {
+       itms [i].setOrientation (orientation);
+   }
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java
old mode 100644
new mode 100755
index 089c4f0..e667cff
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ import org.eclipse.swt.events.*;
 public class MenuItem extends Item {
 	Menu parent, menu;
 	int /*long*/ hBitmap;
-	int id, accelerator;
+	int id, accelerator, userId;
 	/*
 	* Feature in Windows.  On Windows 98, it is necessary
 	* to add 4 pixels to the width of the image or the image
@@ -420,6 +420,23 @@ public boolean getEnabled () {
 }
 
 /**
+ * Gets the identifier associated with the receiver.
+ *
+ * @return the receiver's identifier
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getID () {
+	checkWidget();
+	return userId;
+}
+
+/**
  * Returns the receiver's cascade menu if it has one or null
  * if it does not. Only <code>CASCADE</code> menu items can have
  * a pull down menu. The sequence of key strokes, button presses 
@@ -728,6 +745,25 @@ public void setEnabled (boolean enabled) {
 }
 
 /**
+ * Sets the identifier associated with the receiver to the argument.
+ *
+ * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setID (int id) {
+	checkWidget();
+	if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+	userId = id;
+}
+
+/**
  * Sets the image the receiver will display to the argument.
  * <p>
  * Note: This operation is a hint and is not supported on
@@ -766,7 +802,7 @@ public void setImage (Image image) {
 	if (parent.foreground != -1) {
 		info.hbmpItem = OS.HBMMENU_CALLBACK;
 	} else {
-		if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) {
+		if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0) && OS.IsAppThemed ()) {
 			if (hBitmap != 0) OS.DeleteObject (hBitmap);
 			info.hbmpItem = hBitmap = image != null ? Display.create32bitDIB (image) : 0;
 		} else {
@@ -932,6 +968,16 @@ boolean setRadioSelection (boolean value) {
 	return true;
 }
 
+void setOrientation (int orientation) {
+    int /*long*/ hMenu = parent.handle;
+    MENUITEMINFO info = new MENUITEMINFO ();
+    info.cbSize = MENUITEMINFO.sizeof;
+    info.fMask = OS.MIIM_FTYPE;
+    info.fType = widgetStyle ();
+    OS.SetMenuItemInfo (hMenu, id, false, info);
+    if (menu != null) menu._setOrientation (orientation);
+}
+
 /**
  * Sets the selection state of the receiver.
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MessageBox.java
old mode 100644
new mode 100755
index b151ed4..8694a26
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MessageBox.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MessageBox.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,8 +30,7 @@ import org.eclipse.swt.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
  * ICON_WARNING and ICON_WORKING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ProgressBar.java
old mode 100644
new mode 100755
index c418877..46023b7
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ProgressBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ProgressBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,8 +28,7 @@ import org.eclipse.swt.graphics.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Sash.java
old mode 100644
new mode 100755
index 4bed340..a260dd9
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Sash.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Sash.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,8 +29,7 @@ import org.eclipse.swt.events.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Scale.java
old mode 100644
new mode 100755
index 32f6286..e02cf81
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Scale.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Scale.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,8 +30,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
@@ -44,6 +43,7 @@ public class Scale extends Control {
 	boolean ignoreResize, ignoreSelection;
 	static final int /*long*/ TrackBarProc;
 	static final TCHAR TrackBarClass = new TCHAR (0, OS.TRACKBAR_CLASS, true);
+	boolean createdAsRTL;
 	static {
 		WNDCLASS lpWndClass = new WNDCLASS ();
 		OS.GetClassInfo (0, TrackBarClass, lpWndClass);
@@ -177,6 +177,7 @@ void createHandle () {
 	OS.SendMessage (handle, OS.TBM_SETRANGEMAX, 0, 100);
 	OS.SendMessage (handle, OS.TBM_SETPAGESIZE, 0, 10);
 	OS.SendMessage (handle, OS.TBM_SETTICFREQ, 10, 0);
+	createdAsRTL = (style & SWT.RIGHT_TO_LEFT) != 0;
 }
 
 int defaultForeground () {
@@ -457,6 +458,29 @@ int /*long*/ windowProc () {
 	return TrackBarProc;
 }
 
+LRESULT WM_KEYDOWN (int /*long*/ wParam, int /*long*/ lParam) {
+	LRESULT result = super.WM_KEYDOWN (wParam, lParam);
+	if (result != null) return result;
+	switch ((int)/*64*/wParam) {
+		case OS.VK_LEFT:
+		case OS.VK_RIGHT:
+			/* 
+			* Bug in Windows. The behavior for the left and right keys is not
+			* changed if the orientation changes after the control was created.
+			* The fix is to replace VK_LEFT by VK_RIGHT and VK_RIGHT by VK_LEFT
+			* when the current orientation differs from the orientation used to 
+			* create the control.
+		    */
+			boolean isRTL = (style & SWT.RIGHT_TO_LEFT) != 0;
+			if (isRTL != createdAsRTL) {
+				int /*long*/ code = callWindowProc (handle, OS.WM_KEYDOWN, wParam == OS.VK_RIGHT ? OS.VK_LEFT : OS.VK_RIGHT, lParam);
+				return new LRESULT (code);
+			}
+			break;
+	}
+	return result;
+}
+
 LRESULT WM_MOUSEWHEEL (int /*long*/ wParam, int /*long*/ lParam) {
 	LRESULT result = super.WM_MOUSEWHEEL (wParam, lParam);
 	if (result != null) return result;	
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ScrollBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ScrollBar.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Scrollable.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Scrollable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java
old mode 100644
new mode 100755
index b15be30..e9dd9de
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
  * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
  * </p><p>
- * IMPORTANT: This class is not intended to be subclassed.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see Decorations
@@ -114,6 +114,7 @@ import org.eclipse.swt.events.*;
  * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Shell extends Decorations {
 	Menu activeMenu;
@@ -1048,7 +1049,8 @@ public Point getMinimumSize () {
 /**
  * Gets the receiver's modified state.
  *
- * </ul>
+ * @return <code>true</code> if the receiver is marked as modified, or <code>false</code> otherwise
+ * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1063,9 +1065,9 @@ public boolean getModified () {
 
 /** 
  * Returns the region that defines the shape of the shell,
- * or null if the shell has the default shape.
+ * or <code>null</code> if the shell has the default shape.
  *
- * @return the region that defines the shape of the shell (or null)
+ * @return the region that defines the shape of the shell, or <code>null</code>
  *	
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -1134,6 +1136,27 @@ public Shell [] getShells () {
 	return result;
 }
 
+/**
+ * Returns a ToolBar object representing the tool bar that can be shown in the receiver's
+ * trim. This will return <code>null</code> if the platform does not support tool bars that
+ * are not part of the content area of the shell, or if the Shell's style does not support 
+ * having a tool bar. 
+ * <p>
+ * 
+ * @return a ToolBar object representing the Shell's tool bar, or <ocde>null</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public ToolBar getToolBar() {
+	checkWidget ();
+	return null;
+}
+
 Composite findDeferredControl () {
 	return layoutCount > 0 ? this : null;
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Slider.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Slider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java
index 0729e2e..82dd8c8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1113,6 +1113,27 @@ void unsubclass () {
 	OS.SetWindowLongPtr (hwndUpDown, OS.GWLP_WNDPROC, UpDownProc);
 }
 
+void updateOrientation () {
+	super.updateOrientation ();
+	int bits  = OS.GetWindowLong (hwndText, OS.GWL_EXSTYLE);
+	int bits1  = OS.GetWindowLong (hwndText, OS.GWL_STYLE);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0){
+		bits |= OS.WS_EX_RIGHT;
+		bits1 |= OS.ES_RIGHT;
+	}
+	else{
+		bits &= ~OS.WS_EX_RIGHT;
+		bits1 &= ~OS.ES_RIGHT;
+	}
+	OS.SetWindowLong (hwndText, OS.GWL_STYLE, bits1);
+	OS.SetWindowLong (hwndText, OS.GWL_EXSTYLE, bits);
+	RECT rect = new RECT ();
+	OS.GetWindowRect (handle, rect);
+	int width = rect.right - rect.left, height = rect.bottom - rect.top;
+	OS.SetWindowPos (handle, 0, 0, 0, width - 1, height - 1, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+	OS.SetWindowPos (handle, 0, 0, 0, width, height, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+}
+
 String verifyText (String string, int start, int end, Event keyEvent) {
 	Event event = new Event ();
 	event.text = string;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TabFolder.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TabFolder.java
old mode 100644
new mode 100755
index 58d6084..2f03875
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TabFolder.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TabFolder.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,6 +52,7 @@ public class TabFolder extends Composite {
 	ImageList imageList;
 	static final int /*long*/ TabFolderProc;
 	static final TCHAR TabFolderClass = new TCHAR (0, OS.WC_TABCONTROL, true);
+	boolean createdAsRTL;
 	
 	/*
 	* These are the undocumented control id's for the children of
@@ -270,6 +271,8 @@ void createHandle () {
 	*/
 	int /*long*/ hwndToolTip = OS.SendMessage (handle, OS.TCM_GETTOOLTIPS, 0, 0);
 	OS.SendMessage (hwndToolTip, OS.TTM_SETMAXTIPWIDTH, 0, 0x7FFF);	
+	
+	createdAsRTL = (style & SWT.RIGHT_TO_LEFT) != 0;
 }
 
 void createWidget () {
@@ -788,6 +791,51 @@ boolean traversePage (boolean next) {
 	return false;
 }
 
+void updateOrientation () {
+	super.updateOrientation ();
+	int /*long*/ hwndChild = OS.GetWindow (handle, OS.GW_CHILD);
+	while (hwndChild != 0) {
+		TCHAR buffer = new TCHAR (0, 128);
+		OS.GetClassName (hwndChild, buffer, buffer.length ());
+		String className = buffer.toString (0, buffer.strlen ());
+		if (className.equals ("msctls_updown32")) { //$NON-NLS-1$
+			int bits = OS.GetWindowLong (hwndChild, OS.GWL_EXSTYLE);
+			if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+				bits |= OS.WS_EX_LAYOUTRTL;
+			} else {
+				bits &= ~OS.WS_EX_LAYOUTRTL;
+			}
+			OS.SetWindowLong (hwndChild, OS.GWL_EXSTYLE, bits);
+			OS.InvalidateRect (hwndChild, null, true);
+			break;
+		}
+		hwndChild = OS.GetWindow (hwndChild, OS.GW_HWNDNEXT);
+	}
+	RECT rect = new RECT ();
+	OS.GetWindowRect (handle, rect);
+	int width = rect.right - rect.left, height = rect.bottom - rect.top;
+	OS.SetWindowPos (handle, 0, 0, 0, width - 1, height - 1, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+	OS.SetWindowPos (handle, 0, 0, 0, width, height, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+	if (imageList != null) {
+		Point size = imageList.getImageSize ();
+		display.releaseImageList (imageList);
+		imageList = display.getImageList (style & SWT.RIGHT_TO_LEFT, size.x, size.y);
+		int /*long*/ hImageList = imageList.getHandle ();
+		OS.SendMessage (handle, OS.TCM_SETIMAGELIST, 0, hImageList);
+		TCITEM tcItem = new TCITEM ();
+		tcItem.mask = OS.TCIF_IMAGE;
+		for (int i = 0; i < items.length; i++) {
+			TabItem item = items [i];
+			if (item == null) break;
+			Image image = item.image;
+			if (image != null) {
+				tcItem.iImage = imageIndex (image);
+				OS.SendMessage (handle, OS.TCM_SETITEM, i, tcItem);
+			}
+		}
+	}
+}
+
 int widgetStyle () {
 	/*
 	* Bug in Windows.  Under certain circumstances,
@@ -821,6 +869,29 @@ LRESULT WM_GETDLGCODE (int /*long*/ wParam, int /*long*/ lParam) {
 	return new LRESULT (OS.DLGC_BUTTON | OS.DLGC_WANTARROWS);
 }
 
+LRESULT WM_KEYDOWN (int /*long*/ wParam, int /*long*/ lParam) {
+	LRESULT result = super.WM_KEYDOWN (wParam, lParam);
+	if (result != null) return result;
+	switch ((int)/*64*/wParam) {
+		case OS.VK_LEFT:
+		case OS.VK_RIGHT:
+			/* 
+			* Bug in Windows. The behavior for the left and right keys is not
+			* changed if the orientation changes after the control was created.
+			* The fix is to replace VK_LEFT by VK_RIGHT and VK_RIGHT by VK_LEFT
+			* when the current orientation differs from the orientation used to 
+			* create the control.
+		    */
+			boolean isRTL = (style & SWT.RIGHT_TO_LEFT) != 0;
+			if (isRTL != createdAsRTL) {
+				int /*long*/ code = callWindowProc (handle, OS.WM_KEYDOWN, wParam == OS.VK_RIGHT ? OS.VK_LEFT : OS.VK_RIGHT, lParam);
+				return new LRESULT (code);
+			}
+			break;
+	}
+	return result;
+}
+
 LRESULT WM_MOUSELEAVE (int /*long*/ wParam, int /*long*/ lParam) {
 	LRESULT result = super.WM_MOUSELEAVE (wParam, lParam);
 	if (result != null) return result;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TabItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TabItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java
old mode 100644
new mode 100755
index f526242..7c0e98e
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -3746,6 +3746,23 @@ Event sendMeasureItemEvent (TableItem item, int row, int column, int /*long*/ hD
 	event.y = itemRect.top;
 	event.width = itemRect.right - itemRect.left;
 	event.height = itemRect.bottom - itemRect.top;
+	boolean drawSelected = false;
+	if (OS.IsWindowEnabled (handle)) {
+		LVITEM lvItem = new LVITEM ();
+		lvItem.mask = OS.LVIF_STATE;
+		lvItem.stateMask = OS.LVIS_SELECTED;
+		lvItem.iItem = (int)/*64*/row;
+		int /*long*/ result = OS.SendMessage (handle, OS.LVM_GETITEM, 0, lvItem);
+		boolean selected = (result != 0 && (lvItem.state & OS.LVIS_SELECTED) != 0);
+		if (selected && (column == 0 || (style & SWT.FULL_SELECTION) != 0)) {
+			if (OS.GetFocus () == handle || display.getHighContrast ()) {
+				drawSelected = true;
+			} else {
+				drawSelected = (style & SWT.HIDE_SELECTION) == 0;
+			}
+		}
+	}
+	if (drawSelected) event.detail |= SWT.SELECTED;
 	sendEvent (SWT.MeasureItem, event);
 	event.gc = null;
 	gc.dispose ();
@@ -4336,7 +4353,7 @@ void setDeferResize (boolean defer) {
 
 void setCheckboxImageList (int width, int height, boolean fixScroll) {
 	if ((style & SWT.CHECK) == 0) return;
-	int count = 4, flags = 0;
+	int count = 8, flags = 0;
 	if (OS.IsWinCE) {
 		flags |= OS.ILC_COLOR;
 	} else {
@@ -4394,6 +4411,14 @@ void setCheckboxImageList (int width, int height, boolean fixScroll) {
 		OS.DrawThemeBackground (hTheme, memDC, OS.BP_CHECKBOX, OS.CBS_UNCHECKEDNORMAL, rect, null);
 		rect.left += width;  rect.right += width;
 		OS.DrawThemeBackground (hTheme, memDC, OS.BP_CHECKBOX, OS.CBS_MIXEDNORMAL, rect, null);
+		rect.left += width;  rect.right += width;
+		OS.DrawThemeBackground (hTheme, memDC, OS.BP_CHECKBOX, OS.CBS_UNCHECKEDDISABLED, rect, null);
+		rect.left += width;  rect.right += width;
+		OS.DrawThemeBackground (hTheme, memDC, OS.BP_CHECKBOX, OS.CBS_CHECKEDDISABLED, rect, null);
+		rect.left += width;  rect.right += width;
+		OS.DrawThemeBackground (hTheme, memDC, OS.BP_CHECKBOX, OS.CBS_UNCHECKEDDISABLED, rect, null);
+		rect.left += width;  rect.right += width;
+		OS.DrawThemeBackground (hTheme, memDC, OS.BP_CHECKBOX, OS.CBS_MIXEDDISABLED, rect, null);
 	} else {
 		OS.DrawFrameControl (memDC, rect, OS.DFC_BUTTON, OS.DFCS_BUTTONCHECK | OS.DFCS_FLAT);
 		rect.left += width;  rect.right += width;
@@ -4402,6 +4427,14 @@ void setCheckboxImageList (int width, int height, boolean fixScroll) {
 		OS.DrawFrameControl (memDC, rect, OS.DFC_BUTTON, OS.DFCS_BUTTONCHECK | OS.DFCS_INACTIVE | OS.DFCS_FLAT);
 		rect.left += width;  rect.right += width;
 		OS.DrawFrameControl (memDC, rect, OS.DFC_BUTTON, OS.DFCS_BUTTONCHECK | OS.DFCS_CHECKED | OS.DFCS_INACTIVE | OS.DFCS_FLAT);
+		rect.left += width;  rect.right += width;
+		OS.DrawFrameControl (memDC, rect, OS.DFC_BUTTON, OS.DFCS_BUTTONCHECK | OS.DFCS_FLAT);
+		rect.left += width;  rect.right += width;
+		OS.DrawFrameControl (memDC, rect, OS.DFC_BUTTON, OS.DFCS_BUTTONCHECK | OS.DFCS_CHECKED | OS.DFCS_FLAT);
+		rect.left += width;  rect.right += width;
+		OS.DrawFrameControl (memDC, rect, OS.DFC_BUTTON, OS.DFCS_BUTTONCHECK | OS.DFCS_INACTIVE | OS.DFCS_FLAT);
+		rect.left += width;  rect.right += width;
+		OS.DrawFrameControl (memDC, rect, OS.DFC_BUTTON, OS.DFCS_BUTTONCHECK | OS.DFCS_CHECKED | OS.DFCS_INACTIVE | OS.DFCS_FLAT);
 	}
 	OS.SelectObject (memDC, hOldBitmap);
 	OS.DeleteDC (memDC);
@@ -5586,6 +5619,87 @@ void updateMoveable () {
 	OS.SendMessage (handle, OS.LVM_SETEXTENDEDLISTVIEWSTYLE, OS.LVS_EX_HEADERDRAGDROP, newBits);
 }
 
+void updateOrientation () {
+	super.updateOrientation ();
+	int /*long*/ hwndHeader = OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0);
+	if (hwndHeader != 0) {
+		int bits = OS.GetWindowLong (hwndHeader, OS.GWL_EXSTYLE);
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			bits |= OS.WS_EX_LAYOUTRTL;
+		} else {
+			bits &= ~OS.WS_EX_LAYOUTRTL;
+		}
+		OS.SetWindowLong (hwndHeader, OS.GWL_EXSTYLE, bits);
+		OS.InvalidateRect (hwndHeader, null, true);
+		RECT rect = new RECT ();
+		OS.GetWindowRect (handle, rect);
+		int width = rect.right - rect.left, height = rect.bottom - rect.top;
+		OS.SetWindowPos (handle, 0, 0, 0, width - 1, height - 1, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+		OS.SetWindowPos (handle, 0, 0, 0, width, height, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+	}
+	if ((style & SWT.CHECK) != 0) fixCheckboxImageListColor (false);
+	if (imageList != null) {
+		Point size = imageList.getImageSize ();
+		display.releaseImageList (imageList);
+		imageList = display.getImageList (style & SWT.RIGHT_TO_LEFT, size.x, size.y);
+		int count = (int)/*64*/OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0);
+		for (int i = 0; i < count; i++) {
+		    TableItem item = _getItem (i, false);
+			if (item != null) {
+				Image image = item.image;
+				if (image != null) {
+					int index = imageList.indexOf (image);
+					if (index == -1) imageList.add (image);	
+				}
+			}
+		}
+		int /*long*/ hImageList = imageList.getHandle ();
+		OS.SendMessage (handle, OS.LVM_SETIMAGELIST, OS.LVSIL_SMALL, hImageList);
+	}	
+	if (hwndHeader != 0) {
+		if (headerImageList != null) {
+			Point size = headerImageList.getImageSize ();
+			display.releaseImageList (headerImageList);
+			headerImageList = display.getImageList (style & SWT.RIGHT_TO_LEFT, size.x, size.y);	
+			if (columns != null) {
+				for (int i = 0; i < columns.length; i++) {
+					TableColumn column = columns [i];
+					if (column != null) {
+						Image image = column.image;
+						if (image != null) {
+							if (OS.COMCTL32_MAJOR < 6) {
+								HDITEM hdItem = new HDITEM ();
+								hdItem.mask = OS.HDI_FORMAT;
+								OS.SendMessage (hwndHeader, OS.HDM_GETITEM, i, hdItem);
+								if ((hdItem.fmt & OS.HDF_IMAGE) != 0) {
+									int index = headerImageList.indexOf (image);
+									if (index == -1) headerImageList.add (image);	
+									hdItem.mask = OS.HDI_IMAGE;
+									hdItem.iImage = index;
+									OS.SendMessage (hwndHeader, OS.HDM_SETITEM, i, hdItem);
+								}
+							} else {
+								LVCOLUMN lvColumn = new LVCOLUMN ();
+								lvColumn.mask = OS.LVCF_FMT;
+								OS.SendMessage (hwndHeader, OS.LVM_GETCOLUMN, i, lvColumn);
+								if ((lvColumn.fmt & OS.LVCFMT_IMAGE) != 0) {
+									int index = headerImageList.indexOf (image);
+									if (index == -1) headerImageList.add (image);	
+									lvColumn.iImage = index;
+									lvColumn.mask = OS.LVCF_IMAGE;
+									OS.SendMessage (hwndHeader, OS.LVM_SETCOLUMN, i, lvColumn);
+								}
+							}
+						}
+					}
+				}
+			}
+			int /*long*/ hHeaderImageList = headerImageList.getHandle ();
+			OS.SendMessage (hwndHeader, OS.HDM_SETIMAGELIST, 0, hHeaderImageList);
+		}
+	}
+}
+
 int widgetStyle () {
 	int bits = super.widgetStyle () | OS.LVS_SHAREIMAGELISTS;
 	if ((style & SWT.HIDE_SELECTION) == 0) bits |= OS.LVS_SHOWSELALWAYS;
@@ -6569,18 +6683,38 @@ LRESULT wmNotifyChild (NMHDR hdr, int /*long*/ wParam, int /*long*/ lParam) {
 			if (item == null) break;
 			
 			/*
-			* When an item is being deleted from a virtual table, do not
-			* allow the application to provide data for a new item that
-			* becomes visible until the item has been removed from the
-			* items array.  Because arbitrary application code can run
-			* during the callback, the items array might be accessed
-			* in an inconsistent state.  Rather than answering the data
-			* right away, queue a redraw for later.
+			* Feature in Windows. On Vista, the list view expects the item array 
+			* to be up to date when a LVM_DELETEITEM message is being processed.
+			*  
+			* Also, when the table is virtual, do not allow the application to 
+			* provide data for a new item that becomes visible until the item has
+			* been removed from the items array.  Because arbitrary application
+			* code can run during the callback, the items array might be accessed 
+			* in an inconsistent state.
+			*   
+			* On both cases, Rather than answering the data right away, queue a 
+			* redraw for later.
 			*/
-			if ((style & SWT.VIRTUAL) != 0 && !item.cached) {
-				if (ignoreShrink) {
-					OS.SendMessage (handle, OS.LVM_REDRAWITEMS, plvfi.iItem, plvfi.iItem);
+			if (ignoreShrink) {
+				/*
+				* Feature in Windows Vista and newer. Using LVM_REDRAWITEMS causes LVN_GETDISPINFO
+				* to be sent before the method returns. For this reason, LVM_REDRAWITEMS
+				* can never be used from a LVN_GETDISPINFO handler. The fix is to 
+				* InvalidateRect() passing the bounds for the entire item.
+				*/
+				if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) {
+					RECT rect = new RECT ();
+					rect.left = OS.LVIR_BOUNDS;
+					ignoreCustomDraw = true;
+					int /*long*/ code = OS.SendMessage (handle, OS. LVM_GETITEMRECT, plvfi.iItem, rect);
+					ignoreCustomDraw = false;
+					if (code != 0) OS.InvalidateRect (handle, rect, true);
 					break;
+				} else {
+					if ((style & SWT.VIRTUAL) != 0 && !item.cached) {
+						OS.SendMessage (handle, OS.LVM_REDRAWITEMS, plvfi.iItem, plvfi.iItem);
+						break;
+					}
 				}
 			}
 			
@@ -6663,6 +6797,7 @@ LRESULT wmNotifyChild (NMHDR hdr, int /*long*/ wParam, int /*long*/ lParam) {
 					int state = 1;
 					if (item.checked) state++;
 					if (item.grayed) state +=2;
+					if (!OS.IsWindowEnabled (handle)) state += 4;
 					plvfi.state = state << 12;
 					plvfi.stateMask = OS.LVIS_STATEIMAGEMASK;
 					move = true;
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableColumn.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java
index 7010326..3eb5d6b 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,10 @@ public class TaskBar extends Widget {
 	static final char [] ICO_DIR = {'i','c','o','_','d','i','r','\0'};
 	static final PROPERTYKEY PKEY_Title = new PROPERTYKEY ();
 	static final PROPERTYKEY PKEY_AppUserModel_IsDestListSeparator = new PROPERTYKEY ();
+	static final String EXE_PATH_KEY = "org.eclipse.swt.win32.taskbar.executable";  //$NON-NLS-1$
+	static final String EXE_ARGS_KEY = "org.eclipse.swt.win32.taskbar.arguments";  //$NON-NLS-1$
+	static final String ICON_KEY = "org.eclipse.swt.win32.taskbar.icon";  //$NON-NLS-1$
+	static final String ICON_INDEX_KEY = "org.eclipse.swt.win32.taskbar.icon.index";  //$NON-NLS-1$
 	static final byte [] CLSID_TaskbarList = new byte [16]; 
 	static final byte [] CLSID_DestinationList = new byte[16]; 
 	static final byte [] CLSID_EnumerableObjectCollection = new byte[16]; 
@@ -148,10 +152,19 @@ int /*long*/ createShellLink (MenuItem item, String directory) {
 		key = PKEY_Title;
 		
 		/*IShellLink::SetPath*/
-		hr = OS.VtblCall (20, pLink, EXE_PATH);
+		String exePath = (String)item.getData (EXE_PATH_KEY);
+		if (exePath != null) {
+			length = exePath.length ();
+			buffer = new char [length + 1];
+			exePath.getChars (0, length, buffer, 0);
+		} else {
+			buffer = EXE_PATH;
+		}
+		hr = OS.VtblCall (20, pLink, buffer);
 		if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT);
 		
-		text = Display.LAUNCHER_PREFIX + Display.TASKBAR_EVENT + item.id;
+		text =  (String)item.getData (EXE_ARGS_KEY);
+		if (text == null) text = Display.LAUNCHER_PREFIX + Display.TASKBAR_EVENT + item.id;
 		length = text.length ();
 		buffer = new char [length + 1];
 		text.getChars (0, length, buffer, 0);
@@ -170,24 +183,33 @@ int /*long*/ createShellLink (MenuItem item, String directory) {
 //			if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT);
 //		}
 		
-		Image image = item.getImage ();
-		if (image != null && directory != null) {
-			String imageFilename = directory + "\\menu" + item.id + ".ico" ;
-			ImageData data;
-			if (item.hBitmap != 0) {
-				Image image2 = Image.win32_new (display, SWT.BITMAP, item.hBitmap);
-				data = image2.getImageData ();
-			} else {
-				data = image.getImageData ();
+		String icon = (String)item.getData (ICON_KEY);
+		int index = 0;
+		if (icon != null) {
+			text = (String)item.getData (ICON_INDEX_KEY);
+			if (text != null) index = Integer.parseInt (text);
+		} else {
+			Image image = item.getImage ();
+			if (image != null && directory != null) {
+				icon = directory + "\\menu" + item.id + ".ico" ;
+				ImageData data;
+				if (item.hBitmap != 0) {
+					Image image2 = Image.win32_new (display, SWT.BITMAP, item.hBitmap);
+					data = image2.getImageData ();
+				} else {
+					data = image.getImageData ();
+				}
+				ImageLoader loader = new ImageLoader ();
+				loader.data = new ImageData [] {data};
+				loader.save (icon, SWT.IMAGE_ICO);
 			}
-			ImageLoader loader = new ImageLoader ();
-			loader.data = new ImageData [] {data};
-			loader.save (imageFilename, SWT.IMAGE_ICO);
-			length = imageFilename.length ();
+		}
+		if (icon != null) {
+			length = icon.length ();
 			buffer = new char [length + 1];
-			imageFilename.getChars (0, length, buffer, 0);
+			icon.getChars (0, length, buffer, 0);
 			/*IShellLink::SetIconLocation*/
-			hr = OS.VtblCall (17, pLink, buffer, 0);
+			hr = OS.VtblCall (17, pLink, buffer, index);
 			if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT);
 		}
 	}
@@ -480,8 +502,8 @@ void setMenu (Menu menu) {
 	if (hr != OS.S_OK) error (SWT.ERROR_NO_HANDLES);
 	int /*long*/ pDestList = ppv[0];
 	String appName = Display.APP_NAME;
-	char [] buffer = null;
-	if (appName != null) {
+	char [] buffer = {'S', 'W', 'T', '\0'};
+	if (appName != null && appName.length () > 0) {
 		int length = appName.length ();
 		buffer = new char [length + 1];
 		appName.getChars (0, length, buffer, 0);
@@ -489,7 +511,14 @@ void setMenu (Menu menu) {
 	
 	MenuItem [] items = null; 
 	if (menu != null && (items = menu.getItems ()).length != 0) {
-		String directory = getDirectory (buffer);
+		String directory = null;
+		for (int i = 0; i < items.length; i++) {
+			MenuItem item = items [i];
+			if (item.getImage () != null && item.getData (ICON_KEY) == null) {
+				directory = getDirectory (buffer);
+				break;
+			}
+		}
 		int /*long*/ poa = createShellLinkArray (items, directory);
 		if (poa != 0) {
 			
@@ -517,17 +546,27 @@ void setMenu (Menu menu) {
 				if ((item.getStyle () & SWT.CASCADE) != 0) {
 					Menu subMenu = item.getMenu ();
 					if (subMenu != null) {
-						int /*long*/ poa2 = createShellLinkArray (subMenu.getItems (), directory);
+						MenuItem [] subItems = subMenu.getItems ();
+						if (directory == null) {
+							for (int j = 0; j < subItems.length; j++) {
+								MenuItem subItem = subItems [j];
+								if (subItem.getImage () != null && subItem.getData (ICON_KEY) == null) {
+									directory = getDirectory (buffer);
+									break;
+								}
+							}
+						}
+						int /*long*/ poa2 = createShellLinkArray (subItems, directory);
 						if (poa2 != 0) {
 							/*IObjectArray::GetCount*/
 							OS.VtblCall (3, poa2, count);
 							if (count [0] != 0) {
 								String text = item.getText ();
 								int length = text.length ();
-								buffer = new char [length + 1];
-								text.getChars (0, length, buffer, 0);
+								char [] buffer2 = new char [length + 1];
+								text.getChars (0, length, buffer2, 0);
 								/*ICustomDestinationList::AppendCategory*/
-								hr = OS.VtblCall (5, pDestList, buffer, poa2);
+								hr = OS.VtblCall (5, pDestList, buffer2, poa2);
 								if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT);
 							}
 							/*IUnknown::Release*/
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Text.java
old mode 100644
new mode 100755
index fb203a7..1e04020
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Text.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Text.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,7 +56,7 @@ import org.eclipse.swt.events.*;
  */
 public class Text extends Scrollable {
 	int tabs, oldStart, oldEnd;
-	boolean doubleClick, ignoreModify, ignoreVerify, ignoreCharacter;
+	boolean doubleClick, ignoreModify, ignoreVerify, ignoreCharacter, allowPasswordChar;
 	String message;
 	
 	/**
@@ -947,8 +947,7 @@ public int getLineHeight () {
  * @since 2.1.2
  */
 public int getOrientation () {
-	checkWidget();
-	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+	return super.getOrientation ();
 }
 
 /**
@@ -1124,6 +1123,35 @@ public String getText () {
 }
 
 /**
+ * Returns the widget's text as a character array.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * a zero-length array if this has never been set.
+ * </p>
+ *
+ * @return a character array that contains the widget's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setTextChars(char[])
+ *
+ * @since 3.7
+ */
+public char[] getTextChars () {
+	checkWidget ();
+	int length = OS.GetWindowTextLength (handle);
+	if (length == 0) return new char[0];
+	TCHAR buffer = new TCHAR (getCodePage (), length + 1);
+	OS.GetWindowText (handle, buffer, length + 1);
+	char [] chars = new char [length];
+	System.arraycopy (buffer.chars, 0, chars, 0, length);
+	return chars;
+}
+
+/**
  * Returns a range of text.  Returns an empty string if the
  * start of the range is greater than the end.
  * <p>
@@ -1657,7 +1685,9 @@ public void setEchoChar (char echo) {
 	if (echo != 0) {
 		if ((echo = (char) Display.wcsToMbcs (echo, getCodePage ())) == 0) echo = '*';
 	}
+	allowPasswordChar = true;
 	OS.SendMessage (handle, OS.EM_SETPASSWORDCHAR, echo, 0);
+	allowPasswordChar = false;
 	/*
 	* Bug in Windows.  When the password character is changed,
 	* Windows does not redraw to show the new password character.
@@ -1760,21 +1790,7 @@ public void setMessage (String message) {
  * @since 2.1.2
  */
 public void setOrientation (int orientation) {
-	checkWidget();
-	if (OS.IsWinCE) return;
-	if (OS.WIN32_VERSION < OS.VERSION (4, 10)) return;
-	int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
-	if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
-	style &= ~flags;
-	style |= orientation & flags;
-	int bits = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
-	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
-		bits |= OS.WS_EX_RTLREADING | OS.WS_EX_LEFTSCROLLBAR;
-	} else {
-		bits &= ~(OS.WS_EX_RTLREADING | OS.WS_EX_LEFTSCROLLBAR);
-	}
-	OS.SetWindowLong (handle, OS.GWL_EXSTYLE, bits);
-	fixAlignment ();
+	super.setOrientation (orientation);
 }
 
 /**
@@ -1974,6 +1990,58 @@ public void setText (String string) {
 }
 
 /**
+ * Sets the contents of the receiver to the characters in the array. If the receiver
+ * has style <code>SWT.SINGLE</code> and the argument contains multiple lines of text
+ * then the result of this operation is undefined and may vary between platforms.
+ *
+ * @param text a character array that contains the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getTextChars()
+ *
+ * @since 3.7
+ */
+public void setTextChars (char[] text) {
+	checkWidget ();
+	if (text == null) error (SWT.ERROR_NULL_ARGUMENT);
+	text = Display.withCrLf (text);
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		int length = OS.GetWindowTextLength (handle);
+		String string = verifyText (new String (text), 0, length, null);
+		if (string == null) return;
+		text = new char [string.length()];
+		string.getChars (0, text.length, text, 0);
+	}
+	int limit = (int)/*64*/OS.SendMessage (handle, OS.EM_GETLIMITTEXT, 0, 0) & 0x7FFFFFFF;
+	if (text.length > limit) {
+		char [] temp = new char [limit];
+		for (int i = 0; i < limit; i++) temp [i] = text [i];
+		text = temp;
+	}
+	TCHAR buffer = new TCHAR (getCodePage (), text, true);
+	OS.SetWindowText (handle, buffer);
+	/*
+	* Bug in Windows.  When the widget is multi line
+	* text widget, it does not send a WM_COMMAND with
+	* control code EN_CHANGE from SetWindowText () to
+	* notify the application that the text has changed.
+	* The fix is to send the event.
+	*/
+	int bits = OS.GetWindowLong (handle, OS.GWL_STYLE);
+	if ((bits & OS.ES_MULTILINE) != 0) {
+		sendEvent (SWT.Modify);
+		// widget could be disposed at this point
+	}
+}
+
+/**
  * Sets the maximum number of characters that the receiver
  * is capable of holding to be the argument.
  * <p>
@@ -2042,6 +2110,17 @@ public void showSelection () {
 	OS.SendMessage (handle, OS.EM_SCROLLCARET, 0, 0);
 }
 
+void updateOrientation (){
+	int bits = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
+	if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+		bits |= OS.WS_EX_RTLREADING | OS.WS_EX_LEFTSCROLLBAR;
+	} else {
+		bits &= ~(OS.WS_EX_RTLREADING | OS.WS_EX_LEFTSCROLLBAR);
+	}
+	OS.SetWindowLong (handle, OS.GWL_EXSTYLE, bits);
+	fixAlignment ();
+}
+
 String verifyText (String string, int start, int end, Event keyEvent) {
 	if (ignoreVerify) return string;
 	Event event = new Event ();
@@ -2162,6 +2241,11 @@ int /*long*/ windowProc (int /*long*/ hwnd, int msg, int /*long*/ wParam, int /*
 			return callWindowProc (hwnd, OS.EM_UNDO, wParam, lParam);
 		}
 	}
+	if (msg == OS.EM_SETPASSWORDCHAR) {
+		if (!allowPasswordChar) {
+			return 1;
+		}
+	}
 	if (msg == Display.SWT_RESTORECARET) {
 		callWindowProc (hwnd, OS.WM_KILLFOCUS, 0, 0);
 		callWindowProc (hwnd, OS.WM_SETFOCUS, 0, 0);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolBar.java
old mode 100644
new mode 100755
index face397..9cb33cf
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolBar.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1130,7 +1130,7 @@ String toolTipText (NMTTDISPINFO hdr) {
 			ToolItem item = items [index];
 			if (item != null) {	
 				/*
-				* But in Windows.  When the  arrow keys are used to change
+				* Bug in Windows.  When the  arrow keys are used to change
 				* the hot item, for some reason, Windows displays the tool
 				* tip for the hot item in at (0, 0) on the screen rather
 				* than next to the current hot item.  This fix is to disallow
@@ -1144,6 +1144,48 @@ String toolTipText (NMTTDISPINFO hdr) {
 	return super.toolTipText (hdr);
 }
 
+void updateOrientation () {
+	super.updateOrientation ();
+	if (imageList != null) {
+		Point size = imageList.getImageSize ();
+		ImageList newImageList = display.getImageListToolBar (style & SWT.RIGHT_TO_LEFT, size.x, size.y);
+		ImageList newHotImageList = display.getImageListToolBarHot (style & SWT.RIGHT_TO_LEFT, size.x, size.y);
+		ImageList newDisabledImageList = display.getImageListToolBarDisabled (style & SWT.RIGHT_TO_LEFT, size.x, size.y);	
+		TBBUTTONINFO info = new TBBUTTONINFO ();
+		info.cbSize = TBBUTTONINFO.sizeof;
+		info.dwMask = OS.TBIF_IMAGE;
+		int count = (int)/*64*/OS.SendMessage (handle, OS.TB_BUTTONCOUNT, 0, 0);
+		for (int i=0; i<count; i++) {
+			ToolItem item = items [i];
+			if ((item.style & SWT.SEPARATOR) != 0) continue;
+			if (item.image == null) continue;
+			OS.SendMessage (handle, OS.TB_GETBUTTONINFO, item.id, info);
+			if (info.iImage != OS.I_IMAGENONE) {
+				Image image = imageList.get(info.iImage);
+				Image hot = hotImageList.get(info.iImage);
+				Image disabled = disabledImageList.get(info.iImage);
+				imageList.put(info.iImage, null);
+				hotImageList.put(info.iImage, null);
+				disabledImageList.put(info.iImage, null);
+				info.iImage = newImageList.add(image);
+				newHotImageList.add(hot);
+				newDisabledImageList.add(disabled);
+				OS.SendMessage (handle, OS.TB_SETBUTTONINFO, item.id, info);
+			}
+		}
+		display.releaseToolImageList (imageList);
+		display.releaseToolHotImageList (hotImageList);
+		display.releaseToolDisabledImageList (disabledImageList);
+		OS.SendMessage (handle, OS.TB_SETIMAGELIST, 0, newImageList.getHandle ());
+		OS.SendMessage (handle, OS.TB_SETHOTIMAGELIST, 0, newHotImageList.getHandle ());
+		OS.SendMessage (handle, OS.TB_SETDISABLEDIMAGELIST, 0, newDisabledImageList.getHandle ());
+		imageList = newImageList;
+		hotImageList = newHotImageList;
+		disabledImageList = newDisabledImageList;
+		OS.InvalidateRect (handle, null, true);
+	}
+}
+
 int widgetStyle () {
 	int bits = super.widgetStyle () | OS.CCS_NORESIZE | OS.TBSTYLE_TOOLTIPS | OS.TBSTYLE_CUSTOMERASE;
 	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) bits |= OS.TBSTYLE_TRANSPARENT;
@@ -1513,7 +1555,7 @@ LRESULT wmNotifyChild (NMHDR hdr, int /*long*/ wParam, int /*long*/ lParam) {
 				switch (lpnmhi.dwFlags) {
 					case OS.HICF_MOUSE: {
 						/*
-						* But in Windows.  When the tool bar has focus, a mouse is
+						* Bug in Windows.  When the tool bar has focus, a mouse is
 						* in an item and hover help for that item is displayed and
 						* then the arrow keys are used to change the hot item,
 						* for some reason, Windows snaps the hot item back to the
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolItem.java
old mode 100644
new mode 100755
index 2541aa1..c8caddb
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -869,7 +869,14 @@ public void setToolTipText (String string) {
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
- * @param width the new width
+ * @param width the new width. If the new value is <code>SWT.DEFAULT</code>,
+ * the width is a fixed-width area whose amount is determined by the platform.
+ * If the new value is 0 a vertical or horizontal line will be drawn, depending
+ * on the setting of the corresponding style bit (<code>SWT.VERTICAL</code> or 
+ * <code>SWT.HORIZONTAL</code>). If the new value is <code>SWT.SEPARATOR_FILL</code>
+ * a variable-width space is inserted that acts as a spring between the two adjoining
+ * items which will push them out to the extent of the containing ToolBar.
+ * 
  *
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolTip.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolTip.java
index 87a7355..33e2103 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolTip.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/ToolTip.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,8 +30,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION,
  * and ICON_WARNING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#tooltips">Tool Tips snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java
old mode 100644
new mode 100755
index 621d392..82fd17c
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,6 +92,7 @@ public class Tree extends Composite {
 	boolean linesVisible, customDraw, printClient, painted, ignoreItemHeight;
 	boolean ignoreCustomDraw, ignoreDrawForeground, ignoreDrawBackground, ignoreDrawFocus;
 	boolean ignoreDrawSelection, ignoreDrawHot, ignoreFullSelection, explorerTheme;
+	boolean createdAsRTL;
 	int scrollWidth, selectionForeground;
 	int /*long*/ headerToolTipHandle, itemToolTipHandle;
 	int /*long*/ lastTimerID = -1;
@@ -588,7 +589,7 @@ LRESULT CDDS_ITEMPOSTPAINT (NMTVCUSTOMDRAW nmcd, int /*long*/ wParam, int /*long
 			if (drawItem) {
 				if (i != 0) {
 					if (hooks (SWT.MeasureItem)) {
-						sendMeasureItemEvent (item, index, hDC);
+						sendMeasureItemEvent (item, index, hDC, selected ? SWT.SELECTED : 0);
 						if (isDisposed () || item.isDisposed ()) break;
 					}
 					if (hooks (SWT.EraseItem)) {
@@ -977,7 +978,7 @@ LRESULT CDDS_ITEMPREPAINT (NMTVCUSTOMDRAW nmcd, int /*long*/ wParam, int /*long*
 		//TODO - BUG - measure and erase sent when first column is clipped
 		Event measureEvent = null;
 		if (hooks (SWT.MeasureItem)) {
-			measureEvent = sendMeasureItemEvent (item, index, hDC);
+			measureEvent = sendMeasureItemEvent (item, index, hDC, selected ? SWT.SELECTED : 0);
 			if (isDisposed () || item.isDisposed ()) return null;
 		}
 		selectionForeground = -1;
@@ -1019,12 +1020,12 @@ LRESULT CDDS_ITEMPREPAINT (NMTVCUSTOMDRAW nmcd, int /*long*/ wParam, int /*long*
 			if (clrTextBk != -1) event.detail |= SWT.BACKGROUND;
 			if (hot) event.detail |= SWT.HOT;
 			if (selected) event.detail |= SWT.SELECTED;
-			if (!explorerTheme) {
-				//if ((nmcd.uItemState & OS.CDIS_FOCUS) != 0) {
-				if (OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0) == nmcd.dwItemSpec) {
-					if (handle == OS.GetFocus ()) {
-						int uiState = (int)/*64*/OS.SendMessage (handle, OS.WM_QUERYUISTATE, 0, 0);
-						if ((uiState & OS.UISF_HIDEFOCUS) == 0) {
+			//if ((nmcd.uItemState & OS.CDIS_FOCUS) != 0) {
+			if (OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0) == nmcd.dwItemSpec) {
+				if (handle == OS.GetFocus ()) {
+					int uiState = (int)/*64*/OS.SendMessage (handle, OS.WM_QUERYUISTATE, 0, 0);
+					if ((uiState & OS.UISF_HIDEFOCUS) == 0) {
+						if (!explorerTheme || !selected) {
 							focused = true;
 							event.detail |= SWT.FOCUSED;
 						}
@@ -1220,11 +1221,7 @@ LRESULT CDDS_ITEMPREPAINT (NMTVCUSTOMDRAW nmcd, int /*long*/ wParam, int /*long*
 						if ((style & SWT.FULL_SELECTION) != 0) {
 							if (!selected) fillBackground (hDC, clrTextBk, rect);
 						} else {
-							if (explorerTheme) {
-								if (!selected && !hot) fillBackground (hDC, clrTextBk, rect);
-							} else {
-								fillBackground (hDC, clrTextBk, rect);
-							}
+							fillBackground (hDC, clrTextBk, rect);
 						}
 					} else {
 						if ((style & SWT.FULL_SELECTION) != 0) {
@@ -1893,6 +1890,8 @@ void createHandle () {
 	*/
 	int /*long*/ hFont = OS.GetStockObject (OS.SYSTEM_FONT);
 	OS.SendMessage (handle, OS.WM_SETFONT, hFont, 0);
+	
+	createdAsRTL = (style & SWT.RIGHT_TO_LEFT) != 0;
 }
 
 void createHeaderToolTips () {
@@ -2728,7 +2727,9 @@ boolean findCell (int x, int y, TreeItem [] item, int [] index, RECT [] cellRect
 				cellRect [0].right = Math.min (cellRect [0].right, rect.right);
 				if (OS.PtInRect (cellRect [0], pt)) {
 					if (isCustomToolTip ()) {
-						Event event = sendMeasureItemEvent (item [0], order [index [0]], hDC);
+						int state = (int)/*64*/OS.SendMessage (handle, OS.TVM_GETITEMSTATE, lpht.hItem, OS.TVIS_SELECTED);
+						int detail = (state & OS.TVIS_SELECTED) != 0 ? SWT.SELECTED : 0;
+						Event event = sendMeasureItemEvent (item [0], order [index [0]], hDC, detail);
 						if (isDisposed () || item [0].isDisposed ()) break;
 						itemRect [0] = new RECT ();
 						itemRect [0].left = event.x;
@@ -3618,7 +3619,9 @@ boolean hitTestSelection (int /*long*/ hItem, int x, int y) {
 	if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont);
 	int /*long*/ hFont = item.fontHandle (order [index [0]]);
 	if (hFont != -1) hFont = OS.SelectObject (hDC, hFont);
-	Event event = sendMeasureItemEvent (item, order [index [0]], hDC);
+	int state = (int)/*64*/OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED);
+	int detail = (state & OS.TVIS_SELECTED) != 0 ? SWT.SELECTED : 0;
+	Event event = sendMeasureItemEvent (item, order [index [0]], hDC, detail);
 	if (event.getBounds ().contains (x, y)) result = true;
 	if (newFont != 0) OS.SelectObject (hDC, oldFont);
 	OS.ReleaseDC (handle, hDC);
@@ -4205,8 +4208,12 @@ void select (int /*long*/ hItem, TVITEM tvItem) {
 	while (hItem != 0) {
 		tvItem.hItem = hItem;
 		OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
-		int /*long*/ hFirstItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem);
-		select (hFirstItem, tvItem);
+		int state = (int)/*64*/OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_EXPANDED);
+		if ((state & OS.TVIS_EXPANDED) != 0) {
+			int /*long*/ hFirstItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem);
+			select (hFirstItem, tvItem);
+		}
+
 		hItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem);
 	}
 }
@@ -4331,18 +4338,8 @@ public void selectAll () {
 	tvItem.stateMask = OS.TVIS_SELECTED;
 	int /*long*/ oldProc = OS.GetWindowLongPtr (handle, OS.GWLP_WNDPROC);
 	OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, TreeProc);
-	if ((style & SWT.VIRTUAL) != 0) {
-		int /*long*/ hItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0);
-		select (hItem, tvItem);
-	} else {
-		for (int i=0; i<items.length; i++) {
-			TreeItem item = items [i];
-			if (item != null) {
-				tvItem.hItem = item.handle;
-				OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
-			}
-		}
-	}
+	int /*long*/ hItem = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0);
+	select (hItem, tvItem);
 	OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc);
 }
 
@@ -4375,7 +4372,7 @@ Event sendEraseItemEvent (TreeItem item, NMTTCUSTOMDRAW nmcd, int column, RECT c
 	return event;
 }
 
-Event sendMeasureItemEvent (TreeItem item, int index, int /*long*/ hDC) {
+Event sendMeasureItemEvent (TreeItem item, int index, int /*long*/ hDC, int detail) {
 	RECT itemRect = item.getBounds (index, true, true, false, false, false, hDC);
 	int nSavedDC = OS.SaveDC (hDC);
 	GCData data = new GCData ();
@@ -4390,6 +4387,7 @@ Event sendMeasureItemEvent (TreeItem item, int index, int /*long*/ hDC) {
 	event.y = itemRect.top;
 	event.width = itemRect.right - itemRect.left;
 	event.height = itemRect.bottom - itemRect.top;
+	event.detail = detail;
 	sendEvent (SWT.MeasureItem, event);
 	event.gc = null;
 	gc.dispose ();
@@ -5106,9 +5104,24 @@ public void setTopItem (TreeItem item) {
 		redraw = getDrawing () && OS.IsWindowVisible (handle);
 		if (redraw) OS.DefWindowProc (handle, OS.WM_SETREDRAW, 0, 0);
 	}
-	OS.SendMessage (handle, OS.TVM_SELECTITEM, OS.TVGN_FIRSTVISIBLE, hItem);
+	SCROLLINFO hInfo = null;
+	int bits = OS.GetWindowLong (handle, OS.GWL_STYLE);
 	int /*long*/ hParent = OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_PARENT, hItem);
-	if (hParent == 0) OS.SendMessage (handle, OS.WM_HSCROLL, OS.SB_TOP, 0);
+	if (hParent != 0 && (bits & (OS.TVS_NOHSCROLL | OS.TVS_NOSCROLL)) == 0) {
+		hInfo = new SCROLLINFO ();
+		hInfo.cbSize = SCROLLINFO.sizeof;
+		hInfo.fMask = OS.SIF_ALL;
+		OS.GetScrollInfo (handle, OS.SB_HORZ, hInfo);
+	}
+	OS.SendMessage (handle, OS.TVM_SELECTITEM, OS.TVGN_FIRSTVISIBLE, hItem);
+	if (hParent != 0) {
+		if (hInfo != null) {
+			int /*long*/ hThumb = OS.MAKELPARAM (OS.SB_THUMBPOSITION, hInfo.nPos);
+			OS.SendMessage (handle, OS.WM_HSCROLL, hThumb, 0);
+		}
+	} else {
+		OS.SendMessage (handle, OS.WM_HSCROLL, OS.SB_TOP, 0);
+	}
 	if (fixScroll) {
 		OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0);
 		OS.SendMessage (handle, OS.WM_SETREDRAW, 0, 0);
@@ -5520,6 +5533,86 @@ void updateImages () {
 	}
 }
 
+void updateOrientation () {
+	super.updateOrientation ();
+	RECT rect = new RECT ();
+	OS.GetWindowRect (handle, rect);
+	int width = rect.right - rect.left, height = rect.bottom - rect.top;
+	OS.SetWindowPos (handle, 0, 0, 0, width - 1, height - 1, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+	OS.SetWindowPos (handle, 0, 0, 0, width, height, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+	if (hwndParent != 0) {
+		int bits = OS.GetWindowLong (hwndParent, OS.GWL_EXSTYLE);
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			bits |= OS.WS_EX_LAYOUTRTL;
+		} else {
+			bits &= ~OS.WS_EX_LAYOUTRTL;
+		}
+		OS.SetWindowLong (hwndParent, OS.GWL_EXSTYLE, bits);
+		rect = new RECT ();
+		OS.GetWindowRect (hwndParent, rect);
+		width = rect.right - rect.left; height = rect.bottom - rect.top;
+		OS.SetWindowPos (hwndParent, 0, 0, 0, width - 1, height - 1, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+		OS.SetWindowPos (hwndParent, 0, 0, 0, width, height, OS.SWP_NOMOVE | OS.SWP_NOZORDER);
+	}
+	if (hwndHeader != 0) {
+		int bits = OS.GetWindowLong (hwndHeader, OS.GWL_EXSTYLE);
+		if ((style & SWT.RIGHT_TO_LEFT) != 0) {
+			bits |= OS.WS_EX_LAYOUTRTL;
+		} else {
+			bits &= ~OS.WS_EX_LAYOUTRTL;
+		}
+		OS.SetWindowLong (hwndHeader, OS.GWL_EXSTYLE, bits);
+		OS.InvalidateRect (hwndHeader, null, true);
+	}
+	if ((style & SWT.CHECK) != 0) setCheckboxImageList ();
+	if (imageList != null) {
+		Point size = imageList.getImageSize ();
+		display.releaseImageList (imageList);
+		imageList = display.getImageList (style & SWT.RIGHT_TO_LEFT, size.x, size.y);
+		for (int i = 0; i < items.length; i++) {
+			TreeItem item = items[i];
+			if (item != null) {
+				Image image = item.image;
+				if (image != null) {
+					int index = imageList.indexOf (image);
+					if (index == -1) imageList.add (image);	
+				}
+			}
+		}
+		int /*long*/ hImageList = imageList.getHandle ();
+		OS.SendMessage (handle, OS.TVM_SETIMAGELIST, OS.TVSIL_NORMAL, hImageList);
+	}
+	if (hwndHeader != 0) {
+		if (headerImageList != null) {
+			Point size = headerImageList.getImageSize ();
+			display.releaseImageList (headerImageList);
+			headerImageList = display.getImageList (style & SWT.RIGHT_TO_LEFT, size.x, size.y);	
+			if (columns != null) {
+				for (int i = 0; i < columns.length; i++) {
+					TreeColumn column = columns[i];
+					if (column != null) {
+						Image image = column.image;
+						if (image != null) {
+							HDITEM hdItem = new HDITEM ();
+							hdItem.mask = OS.HDI_FORMAT;
+							OS.SendMessage (hwndHeader, OS.HDM_GETITEM, i, hdItem);
+							if ((hdItem.fmt & OS.HDF_IMAGE)!= 0) {      
+								int index = headerImageList.indexOf (image);
+								if (index == -1) index = headerImageList.add (image);	
+								hdItem.mask = OS.HDI_IMAGE;
+								hdItem.iImage = index;
+								OS.SendMessage (hwndHeader, OS.HDM_SETITEM, i, hdItem);
+							}
+						}
+					}	
+				}
+			}
+			int /*long*/ hImageListHeader = headerImageList.getHandle ();
+			OS.SendMessage (hwndHeader, OS.HDM_SETIMAGELIST, 0, hImageListHeader);
+		}	
+	}
+}
+
 void updateScrollBar () {
 	if (hwndParent != 0) {
 		if (columnCount != 0 || scrollWidth != 0) {
@@ -5976,6 +6069,21 @@ LRESULT WM_KEYDOWN (int /*long*/ wParam, int /*long*/ lParam) {
 	LRESULT result = super.WM_KEYDOWN (wParam, lParam);
 	if (result != null) return result;
 	switch ((int)/*64*/wParam) {
+		case OS.VK_LEFT:
+		case OS.VK_RIGHT:
+			/* 
+			* Bug in Windows. The behavior for the left and right keys is not
+			* changed if the orientation changes after the control was created.
+			* The fix is to replace VK_LEFT by VK_RIGHT and VK_RIGHT by VK_LEFT
+			* when the current orientation differs from the orientation used to 
+			* create the control.
+		    */
+		    boolean isRTL = (style & SWT.RIGHT_TO_LEFT) != 0;
+		    if (isRTL != createdAsRTL) {
+			   int /*long*/ code = callWindowProc (handle, OS.WM_KEYDOWN, wParam == OS.VK_RIGHT ? OS.VK_LEFT : OS.VK_RIGHT, lParam);
+			   return new LRESULT (code);
+		    }
+		    break;
 		case OS.VK_SPACE:
 			/*
 			* Ensure that the window proc does not process VK_SPACE
@@ -6877,6 +6985,28 @@ LRESULT WM_PRINTCLIENT (int /*long*/ wParam, int /*long*/ lParam) {
 	return new LRESULT (code);
 }
 
+LRESULT WM_SETCURSOR (int /*long*/ wParam, int /*long*/ lParam) {
+	LRESULT result = super.WM_SETCURSOR (wParam, lParam);
+	if (result != null) return result;
+	
+	/*
+	* Feature in Windows. On Windows 7, the tree control show the
+	* hand cursor when the mouse is over an item.  This is the
+	* correct Windows 7 behavior but not correct for SWT. The fix
+	* is to always ensure a cursor is set. 
+	*/
+	if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 1)) {
+		if (wParam == handle) {
+			int hitTest = (short) OS.LOWORD (lParam);
+			if (hitTest == OS.HTCLIENT) {
+				OS.SetCursor (OS.LoadCursor (0, OS.IDC_ARROW));
+				return LRESULT.ONE;
+			}
+		}
+	}
+	return null;
+}
+
 LRESULT WM_SETFOCUS (int /*long*/ wParam, int /*long*/ lParam) {
 	/*
 	* Bug in Windows.  When a tree item that has an image
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeColumn.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeColumn.java
index fbd4e6a..42a43f8 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeColumn.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeColumn.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -341,7 +341,7 @@ public void pack () {
 	int /*long*/ oldFont = 0, newFont = OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0);
 	if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont);
 	TVITEM tvItem = new TVITEM ();
-	tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
+	tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM | OS.TVIF_STATE;
 	tvItem.hItem = OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0);
 	while (tvItem.hItem != 0) {
 		OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, tvItem);
@@ -349,7 +349,8 @@ public void pack () {
 		if (item != null) {
 			int itemRight = 0;
 			if (parent.hooks (SWT.MeasureItem)) {
-				Event event = parent.sendMeasureItemEvent (item, index, hDC);
+				int detail = (tvItem.state & OS.TVIS_SELECTED) != 0 ? SWT.SELECTED : 0;
+				Event event = parent.sendMeasureItemEvent (item, index, hDC, detail);
 				if (isDisposed () || parent.isDisposed ()) break;
 				itemRight = event.x + event.width;
 			} else {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java
old mode 100644
new mode 100755
index e3cd2ac..65ceaa5
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Widget.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1080,6 +1080,7 @@ void sendEvent (int eventType, Event event, boolean send) {
 	}
 }
 
+
 void sendSelectionEvent (int type) {
 	sendSelectionEvent (type, null, false);
 }
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java
index 7701fe2..e1f1f77 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java	
@@ -375,7 +375,7 @@ public int getStyle() {
  * @see #equals
  */
 public int hashCode () {
-	return style ^ weight ^ stretch ^ getName().hashCode();
+	return style ^ weight ^ stretch ^ getHeight () << 8 ^ getName().hashCode();
 }
 
 /**
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java
index 67c04ac..0a79f21 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java	
@@ -35,8 +35,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
  * when the ARROW style is specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java
index f72e2b3..4cbc737 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java
index a67b241..8ee7642 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.graphics.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java
index cd63a46..2698882 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -255,9 +255,9 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
 		}
 	} else {
 		size = minimumSize (wHint, hHint, changed);
+		if (size.x == 0) size.x = DEFAULT_WIDTH;
+		if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	}
-	if (size.x == 0) size.x = DEFAULT_WIDTH;
-	if (size.y == 0) size.y = DEFAULT_HEIGHT;
 	if (wHint != SWT.DEFAULT) size.x = wHint;
 	if (hHint != SWT.DEFAULT) size.y = hHint;
 	Rectangle trim = computeTrim (0, 0, size.x, size.y);
@@ -356,6 +356,40 @@ int defaultBackground () {
 	return 0;
 }
 
+/** 
+ * Fills the interior of the rectangle specified by the arguments,
+ * with the receiver's background. 
+ *
+ * <p>The <code>offsetX</code> and <code>offsetY</code> are used to map from
+ * the <code>gc</code> origin to the origin of the parent image background. This is useful
+ * to ensure proper alignment of the image background.</p>
+ * 
+ * @param gc the gc where the rectangle is to be filled
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled
+ * @param height the height of the rectangle to be filled
+ * @param offsetX the image background x offset 
+ * @param offsetY the image background y offset
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.6
+ */
+public void drawBackground (GC gc, int x, int y, int width, int height, int offsetX, int offsetY) {
+	checkWidget ();
+	if (gc == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	//gc.fillRectangle (x, y, width, height);
+}
+
 void enableWidget (boolean enabled) {
 	if ((state & CANVAS) != 0) {
 		OS.UIElement_IsHitTestVisible (topHandle (), enabled);
@@ -905,11 +939,12 @@ void markLayout (boolean changed, boolean all) {
 
 Point minimumSize (int wHint, int hHint, boolean changed) {
 	Control [] children = _getChildren ();
+	Rectangle clientArea = getClientArea();
 	int width = 0, height = 0;
 	for (int i=0; i<children.length; i++) {
 		Rectangle rect = children [i].getBounds ();
-		width = Math.max (width, rect.x + rect.width);
-		height = Math.max (height, rect.y + rect.height);
+		width = Math.max (width, rect.x - clientArea.x + rect.width);
+		height = Math.max (height, rect.y - clientArea.y + rect.height);
 	}
 	return new Point (width, height);
 }
@@ -1099,6 +1134,7 @@ public void setLayout (Layout layout) {
  * @since 3.1
  */
 public void setLayoutDeferred (boolean defer) {
+	checkWidget();
 	if (!defer) {
 		if (--layoutCount == 0) {
 			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java
index f84cf79..28500a5 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -184,6 +184,41 @@ public void addFocusListener (FocusListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when gesture events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>GestureListener</code> interface.
+ * <p>
+ * NOTE: If <code>setTouchEnabled(true)</code> has previously been
+ * invoked on the receiver then <code>setTouchEnabled(false)</code>
+ * must be invoked on it to specify that gesture events should be
+ * sent instead of touch events.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #removeGestureListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Gesture, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when help events are generated for the control,
  * by sending it one of the messages defined in the
  * <code>HelpListener</code> interface.
@@ -412,6 +447,40 @@ public void addPaintListener (PaintListener listener) {
 
 /**
  * Adds the listener to the collection of listeners who will
+ * be notified when touch events occur, by sending it
+ * one of the messages defined in the <code>TouchListener</code>
+ * interface.
+ * <p>
+ * NOTE: You must also call <code>setTouchEnabled(true)</code> to 
+ * specify that touch events should be sent, which will cause gesture
+ * events to not be sent.
+ * </p>
+ * 
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #removeTouchListener
+ * @see #setTouchEnabled
+ * 
+ * @since 3.7
+ */
+public void addTouchListener (TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Touch,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
  * be notified when traversal events occur, by sending it
  * one of the messages defined in the <code>TraverseListener</code>
  * interface.
@@ -848,8 +917,11 @@ public boolean forceFocus () {
 
 /**
  * Returns the accessible object for the receiver.
+ * <p>
  * If this is the first time this object is requested,
- * then the object is created and returned.
+ * then the object is created and returned. The object
+ * returned by getAccessible() does not need to be disposed.
+ * </p>
  *
  * @return the accessible object
  *
@@ -1137,6 +1209,24 @@ public Monitor getMonitor () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Composite</code>
  * or null when the receiver is a shell that was created with null or
  * a display for a parent.
@@ -1246,6 +1336,31 @@ public String getToolTipText () {
 }
 
 /**
+ * Returns <code>true</code> if this control is set to send touch events, or
+ * <code>false</code> if it is set to send gesture events instead.  This method
+ * also returns <code>false</code> if a touch-based input device is not detected
+ * (this can be determined with <code>Display#getTouchEnabled()</code>).  Use
+ * {@link #setTouchEnabled(boolean)} to switch the events that a control sends
+ * between touch events and gesture events.
+ *
+ * @return <code>true</code> if the control is set to send touch events, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTouchEnabled
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkWidget();
+	return false;
+}
+
+/**
  * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
  */
 public Transform getTransform () {
@@ -2143,6 +2258,32 @@ public void removeFocusListener(FocusListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when gesture events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see GestureListener
+ * @see #addGestureListener
+ * 
+ * @since 3.7
+ */
+public void removeGestureListener (GestureListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Gesture, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when the help events are generated for the control.
  *
  * @param listener the listener which should no longer be notified
@@ -2345,6 +2486,32 @@ public void removePaintListener(PaintListener listener) {
 
 /**
  * Removes the listener from the collection of listeners who will
+ * be notified when touch events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TouchListener
+ * @see #addTouchListener
+ * 
+ * @since 3.7
+ */
+public void removeTouchListener(TouchListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Touch, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
  * be notified when traversal events occur.
  *
  * @param listener the listener which should no longer be notified
@@ -3148,6 +3315,26 @@ public void setTransform (Transform t) {
 }
 
 /**
+ * Sets whether this control should send touch events (by default controls do not).
+ * Setting this to <code>false</code> causes the receiver to send gesture events
+ * instead.  No exception is thrown if a touch-based input device is not
+ * detected (this can be determined with <code>Display#getTouchEnabled()</code>).
+ * 
+ * @param enabled the new touch-enabled state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *
+ * @see Display#getTouchEnabled
+ *
+ * @since 3.7
+ */
+public void setTouchEnabled(boolean enabled) {
+	checkWidget();
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
@@ -3779,6 +3966,24 @@ int widgetParent () {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+}
+
+/**
  * Changes the parent of the widget to be the one provided if
  * the underlying operating system supports this feature.
  * Returns <code>true</code> if the parent is successfully changed.
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java
index 3993e0c..fe671cc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java	
@@ -24,8 +24,7 @@ import org.eclipse.swt.internal.wpf.*;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java
index 3b70638..462a724 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -164,6 +164,9 @@ public class Display extends Device {
 	
 	Shell [] shells;
 
+	static String APP_NAME = "SWT";
+	static String APP_VERSION = ""; //$NON-NLS-1$
+
 	/* Key Mappings */
 	static final int [] [] KeyTable = {
 		
@@ -923,6 +926,23 @@ public Shell getActiveShell () {
 }
 
 /**
+ * Returns the single instance of the application menu bar, or
+ * <code>null</code> if there is no application menu bar for the platform.
+ *
+ * @return the application menu bar, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getMenuBar () {
+	checkDevice ();
+	return null;
+}
+
+/**
  * Returns a rectangle describing the receiver's size and location. Note that
  * on multi-monitor systems the origin can be negative.
  *
@@ -1022,7 +1042,7 @@ Widget getWidget (int handle) {
  * over top of, or null if it is not currently over one of the
  * controls built by the currently running application.
  *
- * @return the control under the cursor
+ * @return the control under the cursor or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1231,7 +1251,7 @@ public int getDoubleClickTime () {
  * any of the controls built by the currently running
  * application.
  *
- * @return the control under the cursor
+ * @return the focus control or <code>null</code>
  *
  * @exception SWTException <ul>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -1644,6 +1664,24 @@ public Image getSystemImage (int id) {
 }
 
 /**
+ * Returns the single instance of the system-provided menu for the application, or
+ * <code>null</code> on platforms where no menu is provided for the application.
+ *
+ * @return the system menu, or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.7
+ */
+public Menu getSystemMenu () {
+	checkDevice();
+	return null;
+}
+
+/**
  * Returns the single instance of the system taskBar or null
  * when there is no system taskBar available for the platform.
  *
@@ -1696,6 +1734,24 @@ public Thread getThread () {
 }
 
 /**	 
+ * Returns a boolean indicating whether a touch-aware input device is
+ * attached to the system and is ready for use.
+ *
+ * @return <code>true</code> if a touch-aware input device is detected, or <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public boolean getTouchEnabled() {
+	checkDevice();
+	return false;
+}
+
+/**	 
  * Invokes platform specific functionality to allocate a new GC handle.
  * <p>
  * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
@@ -2834,6 +2890,32 @@ public void setData (Object data) {
 }
 
 /**
+ * Returns the application name.
+ *
+ * @return the application name
+ * 
+ * @see #setAppName(String)
+ * 
+ * @since 3.6
+ */
+public static String getAppName () {
+	return APP_NAME;
+}
+
+/**
+ * Returns the application version.
+ *
+ * @return the application version
+ * 
+ * @see #setAppVersion(String)
+ * 
+ * @since 3.6
+ */
+public static String getAppVersion () {
+	return APP_VERSION;
+}
+
+/**
  * Sets the application name to the argument.
  * <p>
  * The application name can be used in several ways,
@@ -2848,7 +2930,18 @@ public void setData (Object data) {
  * @param name the new app name or <code>null</code>
  */
 public static void setAppName (String name) {
-	/* Do nothing */
+	APP_NAME = name;
+}
+
+/**
+ * Sets the application version to the argument.
+ *
+ * @param version the new app version
+ * 
+ * @since 3.6
+ */
+public static void setAppVersion (String version) {
+	APP_VERSION = version;
 }
 
 //void setModalDialogShell (Shell modalDailog) {
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java
index af8aa3c..b16639a 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java	
@@ -26,8 +26,7 @@ import org.eclipse.swt.*;
  * <p>
  * Note: Only one of the styles SAVE and OPEN may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java
index 345524e..9158b26 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java	
@@ -25,8 +25,7 @@ import org.eclipse.swt.internal.wpf.OS;
  * <dd>(none)</dd>
  * </dl>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  * 
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java
index d3bc102..d4ae602 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java	
@@ -39,8 +39,7 @@ import org.eclipse.swt.graphics.*;
  * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
  * Only one of CENTER, LEFT and RIGHT may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java
index 5130e87..cf040dc 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -491,6 +491,24 @@ String getNameText () {
 }
 
 /**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
  * Returns the receiver's parent, which must be a <code>Decorations</code>.
  *
  * @return the receiver's parent
@@ -895,6 +913,24 @@ void setNameScope() {
 }
 
 /**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7  
+ */
+public void setOrientation (int orientation) {
+    checkWidget ();
+}
+
+/**
  * Marks the receiver as visible if the argument is <code>true</code>,
  * and marks it invisible otherwise. 
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java
index a533ba9..b645d90 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ import org.eclipse.swt.events.*;
 
 public class MenuItem extends Item {
 	Menu parent, menu;
+	int userId;
 
 /**
  * Constructs a new instance of this class given its parent
@@ -314,6 +315,23 @@ public boolean getEnabled () {
 }
 
 /**
+ * Gets the identifier associated with the receiver.
+ *
+ * @return the receiver's identifier
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public int getID () {
+	checkWidget();
+	return userId;
+}
+
+/**
  * Returns the receiver's cascade menu if it has one or null
  * if it does not. Only <code>CASCADE</code> menu items can have
  * a pull down menu. The sequence of key strokes, button presses 
@@ -587,6 +605,25 @@ public void setEnabled (boolean enabled) {
 }
 
 /**
+ * Sets the identifier associated with the receiver to the argument.
+ *
+ * @param id the new identifier. This must be a non-negative value. System-defined identifiers are negative values.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if called with an negative-valued argument.</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public void setID (int id) {
+	checkWidget();
+	if (id < 0) error(SWT.ERROR_INVALID_ARGUMENT);
+	userId = id;
+}
+
+/**
  * Sets the image the receiver will display to the argument.
  * <p>
  * Note: This operation is a hint and is not supported on
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java
index 1f870e8..06a417d 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java	
@@ -30,8 +30,7 @@ import org.eclipse.swt.*;
  * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
  * ICON_WARNING and ICON_WORKING may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java
index 98ca836..964bf38 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java	
@@ -28,8 +28,7 @@ import org.eclipse.swt.internal.wpf.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java
index 9aeb38b..18e8ae0 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java	
@@ -28,8 +28,7 @@ import org.eclipse.swt.events.*;
  * <p>
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java
index 776a370..666c294 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java	
@@ -30,8 +30,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
  * </p><p>
  * <p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java
index ba159fe..1f6e42f 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ import org.eclipse.swt.events.*;
  * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
  * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
  * </p><p>
- * IMPORTANT: This class is not intended to be subclassed.
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
  *
  * @see Decorations
@@ -114,6 +114,7 @@ import org.eclipse.swt.events.*;
  * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
  * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Shell extends Decorations {
 	Control lastActive;
@@ -803,7 +804,8 @@ public Point getMinimumSize () {
 /**
  * Gets the receiver's modified state.
  *
- * </ul>
+ * @return <code>true</code> if the receiver is marked as modified, or <code>false</code> otherwise
+ * 
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
@@ -818,9 +820,9 @@ public boolean getModified () {
 
 /** 
  * Returns the region that defines the shape of the shell,
- * or null if the shell has the default shape.
+ * or <code>null</code> if the shell has the default shape.
  *
- * @return the region that defines the shape of the shell (or null)
+ * @return the region that defines the shape of the shell, or <code>null</code>
  *	
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
@@ -841,6 +843,26 @@ public Shell getShell () {
 	return this;
 }
 
+/**
+ * Returns a ToolBar object representing the tool bar that can be shown in the receiver's
+ * trim. This will return <code>null</code> if the platform does not support tool bars that
+ * are not part of the content area of the shell, or if the Shell's style does not support 
+ * having a tool bar. 
+ * <p>
+ * 
+ * @return a ToolBar object representing the Shell's tool bar, or <ocde>null</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.7
+ */
+public ToolBar getToolBar() {
+	return null;
+}
+
 public boolean getVisible () {
 	checkWidget ();
 	if ((style & SWT.ON_TOP) != 0)return OS.Popup_IsOpen (shellHandle);
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java
index 322862c..250c891 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -745,6 +745,29 @@ public String getText (int start, int end) {
 }
 
 /**
+ * Returns the widget's text as a character array.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * a zero-length array if this has never been set.
+ * </p>
+ *
+ * @return a character array that contains the widget's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setTextChars(char[])
+ *
+ * @since 3.7
+ */
+public char [] getTextChars () {
+	checkWidget();
+	return new char [0];
+}
+
+/**
  * Returns the maximum number of characters that the receiver is capable of holding. 
  * <p>
  * If this has not been changed by <code>setTextLimit()</code>,
@@ -1375,6 +1398,29 @@ public void setText (String string) {
 }
 
 /**
+ * Sets the contents of the receiver to the characters in the array. If the receiver
+ * has style <code>SWT.SINGLE</code> and the argument contains multiple lines of text
+ * then the result of this operation is undefined and may vary between platforms.
+ *
+ * @param text a character array that contains the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getTextChars()
+ *
+ * @since 3.7
+ */
+public void setTextChars (char [] text) {
+	checkWidget();
+}
+
+/**
  * Sets the maximum number of characters that the receiver
  * is capable of holding to be the argument.
  * <p>
diff --git a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java
index 203dba1..b8964b9 100644
--- a/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java	
+++ b/eclipse/plugins/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -825,7 +825,14 @@ public void setToolTipText (String string) {
 /**
  * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
  *
- * @param width the new width
+ * @param width the new width. If the new value is <code>SWT.DEFAULT</code>,
+ * the width is a fixed-width area whose amount is determined by the platform.
+ * If the new value is 0 a vertical or horizontal line will be drawn, depending
+ * on the setting of the corresponding style bit (<code>SWT.VERTICAL</code> or 
+ * <code>SWT.HORIZONTAL</code>). If the new value is <code>SWT.SEPARATOR_FILL</code>
+ * a variable-width space is inserted that acts as a spring between the two adjoining
+ * items which will push them out to the extent of the containing ToolBar.
+ * 
  *
  * @exception SWTException <ul>
  *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
diff --git a/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF
index 0da2e45..280e8db 100644
--- a/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.swt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.swt; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ManifestVersion: 2
 Bundle-Localization: plugin
 DynamicImport-Package: org.eclipse.swt.accessibility2, org.mozilla.xpcom
@@ -20,7 +20,7 @@ Export-Package:
  org.eclipse.swt.printing,
  org.eclipse.swt.program,
  org.eclipse.swt.widgets,
- org.eclipse.swt.internal; x-internal:=true,
+ org.eclipse.swt.internal; x-friends:="org.eclipse.ui",
  org.eclipse.swt.internal.image; x-internal:=true,
  org.eclipse.swt.internal.theme; x-internal:=true
 Eclipse-ExtensibleAPI: true
diff --git a/eclipse/plugins/org.eclipse.swt/build.xml b/eclipse/plugins/org.eclipse.swt/build.xml
index 0a49386..2b8e4be 100644
--- a/eclipse/plugins/org.eclipse.swt/build.xml
+++ b/eclipse/plugins/org.eclipse.swt/build.xml
@@ -15,7 +15,7 @@
 
 	<target name="init">
 		<property name="plugin" value="org.eclipse.swt" />
-		<property name="version.suffix" value="3.6.2" />
+		<property name="version.suffix" value="3.7.0" />
 		<property name="full.name" value="${plugin}_${version.suffix}" />
 		<property name="temp.folder" value="${basedir}/temp.folder" />
 		<property name="plugin.destination" value="${basedir}" />
diff --git a/eclipse/plugins/org.eclipse.swt/buildFragment.xml b/eclipse/plugins/org.eclipse.swt/buildFragment.xml
index 8a338e1..59c2703 100644
--- a/eclipse/plugins/org.eclipse.swt/buildFragment.xml
+++ b/eclipse/plugins/org.eclipse.swt/buildFragment.xml
@@ -135,10 +135,10 @@
 			<fileset dir="${plugindir}/Eclipse SWT Accessibility/carbon/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/carbon/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Browser/carbon/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Mozilla/carbon/"/>
+			<fileset dir="${plugindir}/Eclipse SWT WebKit/carbon/"/>
+			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
			<fileset dir="${plugindir}/Eclipse SWT Browser/carbon/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Mozilla/common/"/>
+			<fileset dir="${plugindir}/Eclipse SWT Mozilla/carbon/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Custom Widgets/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Drag and Drop/carbon/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Drag and Drop/common/"/>
@@ -172,10 +172,10 @@
 			<fileset dir="${plugindir}/Eclipse SWT Accessibility/cocoa/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/cocoa/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Browser/cocoa/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Mozilla/cocoa/"/>
+			<fileset dir="${plugindir}/Eclipse SWT WebKit/cocoa/"/>
+			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
			<fileset dir="${plugindir}/Eclipse SWT Browser/cocoa/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Mozilla/common/"/>
+			<fileset dir="${plugindir}/Eclipse SWT Mozilla/cocoa/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Custom Widgets/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Drag and Drop/cocoa/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Drag and Drop/common/"/>
@@ -209,7 +209,7 @@
 			<fileset dir="${plugindir}/Eclipse SWT Accessibility/gtk/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/gtk/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
+			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
			<fileset dir="${plugindir}/Eclipse SWT Browser/gtk/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Mozilla/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Mozilla/gtk/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Custom Widgets/common/"/>
@@ -257,7 +257,7 @@
 			<fileset dir="${plugindir}/Eclipse SWT Accessibility/emulated/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT AWT/motif/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
+			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
			<fileset dir="${plugindir}/Eclipse SWT Browser/motif/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Mozilla/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Mozilla/motif/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Custom Widgets/common/"/>
@@ -336,7 +336,7 @@
 			<fileset dir="${plugindir}/Eclipse SWT Browser/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Browser/win32/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Mozilla/common/"/>
-			<fileset dir="${plugindir}/Eclipse SWT Mozilla/win32/"/>
+			<fileset dir="${plugindir}/Eclipse SWT Mozilla/win32/"/>
			<fileset dir="${plugindir}/Eclipse SWT WebKit/win32/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Custom Widgets/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Drag and Drop/common/"/>
 			<fileset dir="${plugindir}/Eclipse SWT Drag and Drop/win32/"/>
@@ -496,9 +496,7 @@
 		<copy file="${build.result.folder}/swt.jar" todir="${temp.folder}/swtdownload" />
 		<antcall target="build.sources" />
 		<copy file="${build.result.folder}/src.zip" todir="${temp.folder}/swtdownload" />
-		<copy file="${plugindir}/build/.project" todir="${temp.folder}/swtdownload" />
-		<copy file="${plugindir}/build/.classpath" todir="${temp.folder}/swtdownload" />
-		<copy todir="${temp.folder}/swtdownload">
+		<copy file="${plugindir}/build/.project" todir="${temp.folder}/swtdownload" />
		<copy file="${plugindir}/build/.classpath" todir="${temp.folder}/swtdownload" />
		<copy todir="${temp.folder}/swtdownload">
 			<fileset dir="${basedir}" includes="about.html,about_files/" />
 		</copy>
 		<condition property="zipfilename" value="swt-${buildid}-${swt.ws}-${swt.os}-${swt.arch}.zip" else="swt-${buildid}-${swt.ws}-${swt.os}.zip">
diff --git a/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html b/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html
old mode 100644
new mode 100755
index 3f75030..8b6fe02
--- a/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html
+++ b/eclipse/plugins/org.eclipse.swt/buildnotes_swt.html
@@ -11,118 +11,364 @@
 Eclipse Platform Build Notes<br>
 SWT</h1>
 
-<h2>SWT Build 3659b - Saturday February 05, 2011</h2>
+<h2>SWT Build 3735b - Saturday May 28, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2011-02-01+22%3A26%3A19+%2B0000;chfieldto=2011-02-04+15%3A10%3A24+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-24+21%3A37%3A53+%2B0000;chfieldto=2011-05-27+21%3A23%3A11+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3659a - Wednesday February 02, 2011</h2>
+<h2>SWT Build 3735a - Wednesday May 25, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2011-01-19+00%3A04%3A38+%2B0000;chfieldto=2011-02-01+22%3A19%3A51+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-19+15%3A11%3A53+%2B0000;chfieldto=2011-05-24+21%3A30%3A42+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3659 - Wednesday January 19, 2011</h2>
+<h2>SWT Build 3735 - Friday May 20, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2011-01-04+23%3A03%3A21+%2B0000;chfieldto=2011-01-18+23%3A58%3A17+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-18+00%3A44%3A48+%2B0000;chfieldto=2011-05-19+15%3A04%3A30+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3657d - Wednesday January 05, 2011</h2>
+<h2>SWT Build 3734 - Wednesday May 18, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2010-11-30+22%3A56%3A44+%2B0000;chfieldto=2011-01-04+22%3A57%3A10+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-16+23%3A25%3A57+%2B0000;chfieldto=2011-05-18+00%3A37%3A42+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3657c - Wednesday December 01, 2010</h2>
+<h2>SWT Build 3733c - Tuesday May 17, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2010-11-23+23%3A42%3A51+%2B0000;chfieldto=2010-11-30+22%3A50%3A42+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-13+22%3A25%3A20+%2B0000;chfieldto=2011-05-16+23%3A18%3A51+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3657b - Wednesday November 24, 2010</h2>
+<h2>SWT Build 3733b - Saturday May 14, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2010-11-09+22%3A38%3A25+%2B0000;chfieldto=2010-11-23+23%3A36%3A49+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-12+01%3A56%3A50+%2B0000;chfieldto=2011-05-13+22%3A18%3A16+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3657a - Wednesday November 10, 2010</h2>
+<h2>SWT Build 3733a - Thursday May 12, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2010-11-02+22%3A40%3A44+%2B0000;chfieldto=2010-11-09+22%3A32%3A32+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-11+01%3A03%3A52+%2B0000;chfieldto=2011-05-12+01%3A49%3A47+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3657 - Wednesday November 03, 2010</h2>
+<h2>SWT Build 3733 - Wednesday May 11, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2010-10-12+21%3A32%3A08+%2B0000;chfieldto=2010-11-02+22%3A34%3A55+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-09+22%3A03%3A17+%2B0000;chfieldto=2011-05-11+00%3A56%3A49+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3656a - Wednesday October 13, 2010</h2>
+<h2>SWT Build 3732 - Tuesday May 10, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2010-10-05+21%3A33%3A30+%2B0000;chfieldto=2010-10-12+21%3A26%3A32+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-06+22%3A30%3A36+%2B0000;chfieldto=2011-05-09+21%3A56%3A16+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3656 - Wednesday October 06, 2010</h2>
+<h2>SWT Build 3731a - Saturday May 07, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.2;chfieldfrom=2010-08-31+22%3A06%3A57+%2B0000;chfieldto=2010-10-05+21%3A27%3A52+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-05+21%3A09%3A46+%2B0000;chfieldto=2011-05-06+22%3A23%3A36+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3655c - Wednesday September 01, 2010</h2>
+<h2>SWT Build 3731 - Friday May 06, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-25+16%3A33%3A57+%2B0000;chfieldto=2010-08-31+22%3A01%3A41+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-05-04+21%3A41%3A37+%2B0000;chfieldto=2011-05-05+21%3A02%3A46+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3655b - Thursday August 26, 2010</h2>
+<h2>SWT Build 3730c - Thursday May 05, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-24+21%3A30%3A23+%2B0000;chfieldto=2010-08-25+16%3A28%3A54+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-04-27+21%3A00%3A31+%2B0000;chfieldto=2011-05-04+21%3A34%3A31+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3655a - Wednesday August 25, 2010</h2>
+<h2>SWT Build 3730b - Thursday April 28, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-17+21%3A33%3A55+%2B0000;chfieldto=2010-08-24+21%3A25%3A18+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-04-25+21%3A39%3A15+%2B0000;chfieldto=2011-04-27+20%3A53%3A37+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3655 - Wednesday August 18, 2010</h2>
+<h2>SWT Build 3730a - Tuesday April 26, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-08-10+21%3A49%3A22+%2B0000;chfieldto=2010-08-17+21%3A35%3A43+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-04-21+21%3A38%3A12+%2B0000;chfieldto=2011-04-25+21%3A32%3A21+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3654 - Wednesday August 11, 2010</h2>
+<h2>SWT Build 3730 - Friday April 22, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-27+22%3A34%3A26+%2B0000;chfieldto=2010-08-10+21%3A44%3A28+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-04-20+21%3A27%3A15+%2B0000;chfieldto=2011-04-21+21%3A31%3A20+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3653 - Wednesday July 28, 2010</h2>
+<h2>SWT Build 3729b - Thursday April 21, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-20+22%3A24%3A51+%2B0000;chfieldto=2010-07-27+22%3A29%3A45+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-04-19+13%3A48%3A19+%2B0000;chfieldto=2011-04-20+21%3A20%3A20+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3652a - Wednesday July 21, 2010</h2>
+<h2>SWT Build 3729a - Wednesday April 20, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-14+02%3A57%3A10+%2B0000;chfieldto=2010-07-20+22%3A20%3A16+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-04-11+21%3A41%3A33+%2B0000;chfieldto=2011-04-19+13%3A41%3A28+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3652 - Wednesday July 14, 2010</h2>
+<h2>SWT Build 3728a - Tuesday April 12, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-07-06+23%3A59%3A37+%2B0000;chfieldto=2010-07-14+02%3A52%3A41+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-04-04+21%3A52%3A23+%2B0000;chfieldto=2011-04-11+21%3A34%3A47+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
-<h2>SWT Build 3651 - Wednesday July 07, 2010</h2>
+<h2>SWT Build 3728 - Tuesday April 05, 2011</h2>
 
 <blockquote>
-<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=3.6.1;chfieldfrom=2010-06-02+16%3A18%3A25+%2B0000;chfieldto=2010-07-06+23%3A55%3A15+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-28+22%3A12%3A14+%2B0000;chfieldto=2011-04-04+21%3A44%3A49+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3727 - Tuesday March 29, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-21+21%3A26%3A52+%2B0000;chfieldto=2011-03-28+22%3A04%3A56+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3726 - Tuesday March 22, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-14+21%3A56%3A46+%2B0000;chfieldto=2011-03-21+21%3A19%3A48+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3725 - Tuesday March 15, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-09+17%3A05%3A17+%2B0000;chfieldto=2011-03-14+21%3A49%3A58+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3724c - Thursday March 10, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-07+22%3A49%3A41+%2B0000;chfieldto=2011-03-09+16%3A58%3A38+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3724b - Tuesday March 08, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-07+16%3A44%3A31+%2B0000;chfieldto=2011-03-07+22%3A43%3A08+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3724a - Tuesday March 08, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-07+15%3A49%3A47+%2B0000;chfieldto=2011-03-07+16%3A37%3A55+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3724 - Tuesday March 08, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-03-01+05%3A44%3A11+%2B0000;chfieldto=2011-03-07+15%3A43%3A13+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3723 - Wednesday March 02, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-02-14+22%3A34%3A30+%2B0000;chfieldto=2011-03-01+05%3A37%3A40+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3722 - Tuesday February 15, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-02-07+22%3A36%3A45+%2B0000;chfieldto=2011-02-14+22%3A28%3A05+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3721d - Tuesday February 08, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-01-31+22%3A08%3A24+%2B0000;chfieldto=2011-02-07+22%3A30%3A21+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3721c - Tuesday February 01, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-01-28+01%3A18%3A19+%2B0000;chfieldto=2011-01-31+22%3A01%3A56+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3721b - Friday January 28, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-01-25+22%3A46%3A30+%2B0000;chfieldto=2011-01-28+01%3A12%3A00+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3721a - Wednesday January 26, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-01-24+18%3A05%3A11+%2B0000;chfieldto=2011-01-25+22%3A40%3A11+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3721 - Tuesday January 25, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-01-17+23%3A09%3A13+%2B0000;chfieldto=2011-01-24+17%3A58%3A44+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3720 - Tuesday January 18, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2011-01-11+00%3A19%3A58+%2B0000;chfieldto=2011-01-17+23%3A02%3A56+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3719 - Tuesday January 11, 2011</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-12-20+22%3A57%3A06+%2B0000;chfieldto=2011-01-11+00%3A13%3A46+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3718 - Tuesday December 21, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-12-13+23%3A01%3A06+%2B0000;chfieldto=2010-12-20+22%3A50%3A52+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3717 - Tuesday December 14, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-12-06+22%3A17%3A18+%2B0000;chfieldto=2010-12-13+22%3A54%3A56+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3716 - Tuesday December 07, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-11-29+22%3A38%3A41+%2B0000;chfieldto=2010-12-06+22%3A11%3A12+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3715a - Tuesday November 30, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-11-22+22%3A20%3A35+%2B0000;chfieldto=2010-11-29+22%3A32%3A36+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3715 - Tuesday November 23, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-11-15+22%3A29%3A10+%2B0000;chfieldto=2010-11-22+22%3A14%3A33+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3714 - Tuesday November 16, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-11-08+22%3A30%3A16+%2B0000;chfieldto=2010-11-15+22%3A23%3A11+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3713a - Tuesday November 09, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-11-01+21%3A54%3A54+%2B0000;chfieldto=2010-11-08+22%3A24%3A13+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3713 - Tuesday November 02, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-10-26+21%3A20%3A55+%2B0000;chfieldto=2010-11-01+21%3A49%3A03+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3712b - Wednesday October 27, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-10-25+21%3A20%3A50+%2B0000;chfieldto=2010-10-26+21%3A15%3A06+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3712a - Tuesday October 26, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-10-25+16%3A31%3A00+%2B0000;chfieldto=2010-10-25+21%3A15%3A00+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3712 - Tuesday October 26, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-10-18+21%3A43%3A32+%2B0000;chfieldto=2010-10-25+16%3A25%3A14+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3711 - Tuesday October 19, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-10-04+22%3A16%3A04+%2B0000;chfieldto=2010-10-18+21%3A37%3A51+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3710 - Tuesday October 05, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-09-28+15%3A52%3A32+%2B0000;chfieldto=2010-10-04+22%3A10%3A28+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3709 - Wednesday September 29, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-09-20+21%3A09%3A17+%2B0000;chfieldto=2010-09-28+15%3A47%3A03+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3708 - Tuesday September 21, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-09-13+21%3A34%3A20+%2B0000;chfieldto=2010-09-20+21%3A03%3A52+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3707 - Tuesday September 14, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-08-30+21%3A51%3A11+%2B0000;chfieldto=2010-09-13+21%3A29%3A01+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3706 - Tuesday August 31, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-08-23+22%3A07%3A59+%2B0000;chfieldto=2010-08-30+21%3A46%3A02+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3705 - Tuesday August 24, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-08-16+20%3A57%3A35+%2B0000;chfieldto=2010-08-23+22%3A02%3A51+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3704 - Tuesday August 17, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-08-10+17%3A56%3A47+%2B0000;chfieldto=2010-08-16+20%3A59%3A14+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3703b - Wednesday August 11, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-08-05+20%3A08%3A32+%2B0000;chfieldto=2010-08-10+17%3A51%3A51+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3703a - Friday August 06, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-08-04+14%3A10%3A24+%2B0000;chfieldto=2010-08-05+20%3A03%3A37+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3703 - Thursday August 05, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-07-26+22%3A39%3A00+%2B0000;chfieldto=2010-08-04+14%3A05%3A33+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3702a - Tuesday July 27, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-07-20+00%3A06%3A32+%2B0000;chfieldto=2010-07-26+22%3A34%3A17+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3702 - Tuesday July 20, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-07-12+22%3A28%3A37+%2B0000;chfieldto=2010-07-20+00%3A01%3A54+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
+</blockquote>
+
+<h2>SWT Build 3701 - Tuesday July 13, 2010</h2>
+
+<blockquote>
+<a href=https://bugs.eclipse.org/bugs/buglist.cgi?bug_file_loc=;bug_file_loc_type=allwordssubstr;bug_id=;bugidtype=include;chfield=resolution;target_milestone=;chfieldfrom=2010-06-02+16%3A18%3A25+%2B0000;chfieldto=2010-07-12+22%3A24%3A05+%2B0000;chfieldvalue=FIXED;classification=Eclipse;component=SWT;email1=;email2=;emailtype1=substring;emailtype2=substring;field-1-0-0=classification;field-1-1-0=product;field-1-2-0=component;field0-0-0=noop;keywords=;keywords_type=allwords;long_desc=;long_desc_type=allwordssubstr;product=Platform;query_format=advanced;remaction=;short_desc=;short_desc_type=allwordssubstr;status_whiteboard=;status_whiteboard_type=allwordssubstr;type-1-0-0=anyexact;type-1-1-0=anyexact;type-1-2-0=anyexact;type0-0-0=noop;value-1-0-0=Eclipse;value-1-1-0=Platform;value-1-2-0=SWT;value0-0-0=;votes=;query_based_on=>Bugs fixed</a>
 </blockquote>
 
 <h2>SWT Build 3650b - Thursday June 03, 2010</h2>
diff --git a/eclipse/plugins/org.eclipse.swt/components/external.idl b/eclipse/plugins/org.eclipse.swt/components/external.idl
index fbc6d82..441fc09 100644
--- a/eclipse/plugins/org.eclipse.swt/components/external.idl
+++ b/eclipse/plugins/org.eclipse.swt/components/external.idl
@@ -1,4 +1,15 @@
-// to compile: xpidl -m typelib -I J:\teamswt\swt-builddir\gecko-sdk\idl\ -e External.xpt External.idl
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+// to compile: xpidl -m typelib -I S:\swt-builddir\gecko-sdk\idl\ -e external.xpt external.idl
 
 #include "nsISupports.idl"
 #include "nsIVariant.idl"
@@ -6,5 +17,5 @@
 [scriptable, uuid(ded01d20-ba6f-11dd-ad8b-0800200c9a66)]
 
 interface External : nsISupports {
-    nsIVariant callJava (in unsigned long index, in nsIVariant args);
+    nsIVariant callJava (in unsigned long index, in nsIVariant token, in nsIVariant args);
 };
diff --git a/eclipse/plugins/org.eclipse.swt/readme_swt.html b/eclipse/plugins/org.eclipse.swt/readme_swt.html
deleted file mode 100644
index 1823cc4..0000000
--- a/eclipse/plugins/org.eclipse.swt/readme_swt.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>Eclipse Project SDK R3.1 - SWT Release Notes</title>
-</head>
-<body>
-
-<table COLS=1 WIDTH="604" HEIGHT="45" >
-<tr>
-<td BACKGROUND="workbench.gif"><b>Eclipse Project SDK R3.1 - SWT Release Notes</b></td>
-</tr>
-</table>
-
-<h3>
-Notices</h3>
-(c) Copyright IBM Corp. 2000, 2005. All Rights Reserved.
-<h3>Known Issues</h3>
-<h3><a name="I-Platform-SWT">Platform - SWT</a></h3>
-
-<h4>Eclipse plug-in based on the SWT Browser throws exception</h4>
-<p>The SWT Browser widget uses a platform-specific web browser to render HTML.
-The org.eclipse.swt.SWTError exception ("No more handles") is thrown
-on platforms that don't meet the requirements for running the Browser widget.
-Supported platforms and prerequisites are listed on the SWT FAQ item 
-<a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-swt-home/faq.html#browserplatforms">
-"Which platforms are supported by the SWT Browser?"</a>.</p>
-
-<h4>Crash when using the file dialog on Windows XP with SP2</h4>
-<p>With some versions of Synergy from Telelogic, Eclipse will crash when you try to open a file 
-dialog.  This is due to a problem with the CMExplorer.dll.  The workaround is to
-upgrade to Synergy 6.4 (or higher) or to run <code>"regsvr32 /u CMExplorer.dll"</code> and 
-reboot (note that this will disable Active CM).
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87798">87798</a>)</p>
-
-<h4>InternetExplorer sometimes freezes on PDF documents with Acrobat Reader 6.</h4>
-<p>With Acrobat Reader 6 or 7, some users have experienced an unresponsive user 
-interface for up to two minutes when closing a browser which is displaying a PDF document.
-The workaround is to disable displaying PDF in the browser. In Adobe Reader
-select Edit > Preferences... > Internet and uncheck 'Display PDF in browser'.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56184">56184</a>)</p>
-
-<h4>Crash while editing text on Windows XP with SP2.</h4>
-<p>Some users who have installed Service Pack 2 on Windows XP have experienced
-crashes while using editors in Eclipse.  The workaround is to place a working version 
-of Windows\System32\USP10.DLL in the Eclipse startup directory or uninstall
-Service Pack 2.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=56390">56390</a>)</p>
-
-<h4>Input Method broken on Motif</h4>
-<p>Some versions of RedHat Linux such as Fedora Core 3 and Enterprise Linux WS 
-release 4 use a new technology called IIIM (Intranet/Internet Input Method
-Framework) to replace the old XIM (X input method).   When running on these 
-new systems, Eclipse will crash if you attempt to enter any DBCS character.  The 
-workaround is to use a XIM based input method such as chinput.  This problem 
-may be fixed in newer releases of RedHat.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=89722">89722</a>)</p>
-
-<h4>Eclipse does not start on Linux-Motif with Xinerama and a UTF-8 locale</h4>
-<p>The Linux-motif build of Eclipse does not launch properly when run on a 
-computer with Xinerama (provides support for dual head monitors) and a UTF-8 
-locale.  The workaround for this problem is to change the locale to a non-UTF-8 
-value, or to disable Xinerama.
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=38843">38843</a>)
-</p>
-
-<h4>Eclipse crashes on RedHat Linux 9 with Bluecurve (GTK+ only)</h4>
-<p>Users of the Bluecurve theme shipped with RedHat Linux 9 may experience problems running Eclipse.  
-These problems may include crashes or reduced performance.  We recommend changing to a different theme.
-(bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=38305">38305</a>, 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67906">67906</a>, 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37683">37683</a>, 
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58738">58738</a>)</p>
-
-<h4>Eclipse hangs when pasting from an unresponsive application (GTK only)</h4>
-<p>If the application that is supplying the clipboard material is unresponsive,
-the paste operation hangs Eclipse for several minutes. This situation can be
-encountered when copying from an Eclipse target workbench, suspending the target
-workbench at a breakpoint and pasting into the hosting Eclipse workbench. 
-(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44915">44915</a>)</p>
-
-<h4> Unable to drag data between
-applications in simplified Chinese locale (Motif only)</h4>
-<p>When configured for the simplified Chinese locale, it is not possible to
-drag data between applications running on the Motif window system. This is a
-known limitation of the Open Motif library. 
-(bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29777">29777</a>)</p>
-
-<h4> Crash when attempting to
-launch file browser (AIX Motif only)</h4>
-<p>There is a known AIX graphics bug affecting certain levels of AIX
-releases. Ensure that the AIX install includes the necessary service updates as
-described in the "Install notes/requirements for Eclipse on AIX"
-attachment to the Eclipse bug report. 
-(bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34524">34524</a>)</p>
-
-<h4> Available colors on 8-bit Linux (Linux only)</h4>
-<p>Typically, in Gnome Linux installs running with 8-bit visuals (i.e. 256
-color mode), before the Eclipse application is started there are no free colors.
-This may mean that Eclipse is unable to allocate the default widget background
-color, causing it to display a white background. The functionality, however, is
-otherwise unaffected.</p>
-
-<h4> List and ComboBox on Windows
-NT (Windows NT only)</h4>
-<p>On Windows NT only, you should avoid creating items in a <code>List</code>
-or <code>ComboBox</code> with strings longer than 1000 characters. Doing so may
-result in a General Protection Fault. This has been fixed in more recent
-versions of Windows.</p>
-
-<h4> Excessive CPU consumption  (Linux GTK only)</h4>
-<p>When using Linux GTK 2.2.1, there are some scenarios where the CPU usage
-goes to 100% for no good reason. When this occurs, resizing or closing the
-dialog seems to return the CPU usage to normal. 
-(bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35443">35443</a>)</p>
-
-<h4>IME-related crash (Linux Motif only)</h4>
-<p>When using Linux Motif and GB18030 IME "chinput", Eclipse can
-crash if the IME client window is left open when the parent window is disposed.
-(bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32045">32045</a>)</p>
-
-<h4> Using IBM J9 VM (Photon and AIX)</h4>
-<p>On QNX Photon and IBM AIX, the SWT library will not be found when running
-with an IBM J9 1.5 VM. This is a bug in the IBM J9 class library in version 1.5.
-You can workaround this problem by adding the SWT library directory to your
-LD_LIBRARY_PATH environment variable.</p>
-
-<h4> Missing permissions for SWT native libraries in workspace (HP-UX only)</h4>
-<p>When retrieving the SWT Motif fragment into an Eclipse workspace, the
-permissions of the native libraries are reset. This creates a problem on HP-UX
-because shared libraries need to have execute permission. Attempting to
-self-host with this fragment throws an UnsatisfiedLinkError...Permission Denied
-error. You must manually change the permissions to make these libraries
-accessible (assume the workspace is at <code>/workspace</code>):</p>
-<blockquote>
-  <blockquote>
-    <p><code>cd /workspace/org.eclipse.swt.motif/os/hpux/PA_RISC<br>
-    chmod 555 *.sl</code></p>
-  </blockquote>
-</blockquote>
-<p>(bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=20305">20305</a>
-describes a related problem)</p>
-
-</body>
-</html>
diff --git a/eclipse/plugins/org.eclipse.swt/tasks/build.xml b/eclipse/plugins/org.eclipse.swt/tasks/build.xml
index ba8a7dd..46d5bd3 100644
--- a/eclipse/plugins/org.eclipse.swt/tasks/build.xml
+++ b/eclipse/plugins/org.eclipse.swt/tasks/build.xml
@@ -42,16 +42,16 @@
 	<property name="builddir" value="org.eclipse.swt/bin/library"/>
 	<property name="logdir" value="S:/swt-builddir/logs"/>
 	<property name="tmphome" value="S:/swt-builddir/tmp"/>
-	<property name="ant_home" value="~/build/apache-ant-1.7.1"/>
+	<property name="ant_home" value="~/build/apache-ant-1.8.1"/>
 
 	<property name="cp_common" value="'org.eclipse.swt/Eclipse SWT/common/library' 'org.eclipse.swt/Eclipse SWT Mozilla/common/library' 'org.eclipse.swt/Eclipse SWT PI/common/library'"/>
-	<property name="cp_win32" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/win32/library' 'org.eclipse.swt/Eclipse SWT AWT/win32/library' 'org.eclipse.swt/Eclipse SWT OpenGL/win32/library'"/>
-	<property name="cp_wpf" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/wpf/library' 'org.eclipse.swt/Eclipse SWT PI/wpf_win32/library'"/>
+	<property name="cp_win32" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/win32/library' 'org.eclipse.swt/Eclipse SWT AWT/win32/library' 'org.eclipse.swt/Eclipse SWT OpenGL/win32/library' 'org.eclipse.swt/Eclipse SWT WebKit/win32/library'"/>
+	<!--property name="cp_wpf" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/wpf/library' 'org.eclipse.swt/Eclipse SWT PI/wpf_win32/library'"/-->
 	<property name="cp_gtk" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/gtk/library' 'org.eclipse.swt/Eclipse SWT AWT/gtk/library' 'org.eclipse.swt/Eclipse SWT OpenGL/glx/library' 'org.eclipse.swt/Eclipse SWT PI/cairo/library' 'org.eclipse.swt/Eclipse SWT Program/gnome/library' 'org.eclipse.swt/Eclipse SWT Program/cde/library'"/>
 	<property name="cp_motif" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/motif/library' 'org.eclipse.swt/Eclipse SWT PI/motif_gtk/library'  'org.eclipse.swt/Eclipse SWT AWT/motif/library' 'org.eclipse.swt/Eclipse SWT OpenGL/glx/library' 'org.eclipse.swt/Eclipse SWT PI/cairo/library' 'org.eclipse.swt/Eclipse SWT Program/gnome/library' 'org.eclipse.swt/Eclipse SWT Program/cde/library'"/>
 	<property name="cp_carbon" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/carbon/library' 'org.eclipse.swt/Eclipse SWT OpenGL/carbon/library'"/>
 	<property name="cp_cocoa" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/cocoa/library' 'org.eclipse.swt/Eclipse SWT AWT/cocoa/library'"/>
-	<property name="cp_photon" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/photon/library'"/>
+	<!--property name="cp_photon" value="${cp_common} 'org.eclipse.swt/Eclipse SWT PI/photon/library'"/-->
 
 	<!-- Low level build tasks -->
 	<target name="init_build" if="eclipse.running">
@@ -66,7 +66,7 @@
 
 	<target name="build_win32_x86" depends="init_build">
 		<property name="clean" value="clean"/>
-		<property name="targets" value="x86 all install"/>
+		<property name="targets" value="x86 all make_webkit install"/>
 		<exec dir="${basedir}/${builddir}" executable="${basedir}/${builddir}/build.bat" failonerror="true">
 			<env key="JAVA_HOME" value=""/>
 			<arg line="${targets}"/>
@@ -147,7 +147,7 @@
 			<env key="MOZILLA_LIBS" value="${MOZILLA_SDK}/../lib/libembedstring.a -L${MOZILLA_SDK}/../bin -L${MOZILLA_SDK}/../lib/ -lxpcom -lnspr4 -lplds4 -lplc4"/>
 			<env key="XULRUNNER_INCLUDES" value="-include ${XULRUNNER_SDK}/include/mozilla-config.h -I${XULRUNNER_SDK}/include"/>
 			<env key="XULRUNNER_LIBS" value="-L${XULRUNNER_SDK}/lib -lxpcomglue"/>
-			<env key="PKG_CONFIG_PATH" value="/bluebird/teamswt/swt-builddir/cairo_1.0.2/linux_x86/lib/pkgconfig"/>
+			<env key="PKG_CONFIG_PATH" value="/usr/lib/pkgconfig:/bluebird/teamswt/swt-builddir/cairo_1.0.2/linux_x86/lib/pkgconfig"/>
 			<arg line="${targets}"/>
 			<arg line="${clean}"/>
 		</exec>
@@ -170,7 +170,7 @@
 			<env key="MOZILLA_LIBS" value="-L${MOZILLA_SDK}/lib -L${MOZILLA_SDK}/bin -lxpcom -lnspr4 -lplds4 -lplc4"/>
 			<env key="XULRUNNER_INCLUDES" value="-include ${XULRUNNER_SDK}/include/mozilla-config.h -I${XULRUNNER_SDK}/include"/>
 			<env key="XULRUNNER_LIBS" value="-L${XULRUNNER_SDK}/lib -lxpcomglue"/>
-			<env key="PKG_CONFIG_PATH" value="/bluebird/teamswt/swt-builddir/cairo_1.0.2/linux_x86_64/lib/pkgconfig"/>
+			<env key="PKG_CONFIG_PATH" value="/usr/lib64/pkgconfig:/bluebird/teamswt/swt-builddir/cairo_1.0.2/linux_x86_64/lib/pkgconfig"/>
 			<arg line="${targets}"/>
 			<arg line="${clean}"/>
 		</exec>
@@ -213,7 +213,7 @@
 			<env key="XULRUNNER_SDK" value="/bluebird/teamswt/swt-builddir/xulrunner/1.8.1.1/ppc64/mozilla/dist/sdk/"/>
 			<env key="XULRUNNER_INCLUDES" value="-include ${XULRUNNER_SDK}/include/mozilla-config.h -I${XULRUNNER_SDK}/include"/>
 			<env key="XULRUNNER_LIBS" value="-m64 -L${XULRUNNER_SDK}/lib -lxpcomglue"/>
-			<env key="PKG_CONFIG_PATH" value="/usr/lib64/pkgconfig/:/bluebird/teamswt/swt-builddir/cairo_1.0.2/linux_ppc64/lib/pkgconfig/:/usr/local/GNOME/lib/pkgconfig"/>
+			<env key="PKG_CONFIG_PATH" value="/usr/lib64/pkgconfig/:/bluebird/teamswt/swt-builddir/cairo_1.0.2/linux_ppc64/lib/pkgconfig/:/usr/local/GNOME/lib/pkgconfig:/usr/local/gtk2.4/lib/pkgconfig/"/>
 			<env key="MODEL" value="ppc64"/>
 			<arg line="${targets}"/>
 			<arg line="${clean}"/>
@@ -245,6 +245,29 @@
 		</antcall>
 	</target>
 
+	<target name="build_gtk_solaris_sparc64" depends="init_build">
+		<property name="clean" value="clean"/>
+		<property name="targets" value="install"/>
+		<exec dir="${basedir}/${builddir}" executable="sh" failonerror="true">
+			<arg value="build.sh"/>
+			<env key="CC" value="cc"/>
+			<env key="CXX" value="CC"/>
+			<env key="CDE_HOME" value="/usr/dt"/>
+			<env key="JAVA_HOME" value="/bluebird/teamswt/swt-builddir/JDKs/SOLARIS/SPARC64/jdk1.5.0_22"/>
+			<env key="MODEL" value="sparc64"/>
+			<!--env key="PATH" value="/export/home/SUNWspro/bin:/usr/ccs/bin:/usr/bin"/-->
+			<!--env key="PKG_CONFIG_PATH" value="/usr/local/cairo-1.4.10/lib/pkgconfig/"/>
+			<env key="MOZILLA_SDK" value="/bluebird/teamswt/swt-builddir/geckoSDK/1.4/gecko-sdk"/>
+			<env key="MOZILLA_INCLUDES" value="-I${MOZILLA_SDK} -I${MOZILLA_SDK}/xpcom/include -I${MOZILLA_SDK}/nspr/include -I${MOZILLA_SDK}/embed_base/include -I${MOZILLA_SDK}/embedstring/include -I${MOZILLA_SDK}/string/include"/>
+			<env key="MOZILLA_LIBS" value="${MOZILLA_SDK}/embedstring/bin/libembedstring.a -L${MOZILLA_SDK}/xpcom/bin -L${MOZILLA_SDK}/nspr/bin -lxpcom -lnspr4 -lplds4 -lplc4"/-->
+			<arg line="${targets}"/>
+			<arg line="${clean}"/>
+		</exec>
+		<antcall target="refresh_fragment">
+			<param name="fragment" value="org.eclipse.swt.gtk.solaris.sparc64"/>
+		</antcall>
+	</target>
+	
 	<target name="build_gtk_solaris_sparc" depends="init_build">
 		<property name="clean" value="clean"/>
 		<property name="targets" value="make_mozilla install"/>
@@ -254,6 +277,7 @@
 			<env key="CXX" value="CC"/>
 			<env key="CDE_HOME" value="/usr/dt"/>
 			<env key="JAVA_HOME" value="/usr/j2se"/>
+			<!--env key="PATH" value="/export/home/SUNWspro/bin:/usr/ccs/bin:/usr/bin"/-->
 			<env key="PKG_CONFIG_PATH" value="/usr/local/cairo-1.4.10/lib/pkgconfig/"/>
 			<env key="MOZILLA_SDK" value="/bluebird/teamswt/swt-builddir/geckoSDK/1.4/gecko-sdk"/>
 			<env key="MOZILLA_INCLUDES" value="-I${MOZILLA_SDK} -I${MOZILLA_SDK}/xpcom/include -I${MOZILLA_SDK}/nspr/include -I${MOZILLA_SDK}/embed_base/include -I${MOZILLA_SDK}/embedstring/include -I${MOZILLA_SDK}/string/include"/>
@@ -310,6 +334,21 @@
 		</antcall>
 	</target>
 
+	<target name="build_gtk_aix_ppc" depends="init_build">
+		<property name="clean" value="clean"/>
+		<property name="targets" value="install"/>
+		<exec dir="${basedir}/${builddir}" executable="sh" failonerror="true">
+			<arg value="build.sh"/>
+			<env key="MODEL" value="ppc"/>
+			<env key="JAVA_HOME" value="/bluebird/teamswt/swt-builddir/aixj9_r5"/>
+			<arg line="${targets}"/>
+			<arg line="${clean}"/>
+		</exec>
+		<antcall target="refresh_fragment">
+			<param name="fragment" value="org.eclipse.swt.gtk.aix.ppc"/>
+		</antcall>
+	</target>
+
 	<target name="build_gtk_aix_ppc64" depends="init_build">
 		<property name="clean" value="clean"/>
 		<property name="targets" value="install"/>
@@ -324,7 +363,45 @@
 			<param name="fragment" value="org.eclipse.swt.gtk.aix.ppc64"/>
 		</antcall>
 	</target>
-		
+
+	<target name="build_gtk_hpux_ia64_32" depends="init_build">
+		<property name="clean" value="clean"/>
+		<property name="targets" value="install"/>
+		<property environment="env"/>
+		<exec dir="${basedir}/${builddir}" executable="sh" failonerror="true">
+			<arg value="build.sh"/>
+			<env key="MODEL" value="ia64_32"/>
+			<env key="JAVA_HOME" value="/opt/java1.5"/>
+			<env key="AWT_LIB_PATH" value="/opt/java1.5/jre/lib/IA64N/"/>
+			<env key="PATH" value="/opt/hp-gcc/bin:/opt/gtk2.6/bin:/opt/${env.PATH}"/>
+			<env key="PKG_CONFIG_PATH" value="/opt/gtk2.6/lib/pkgconfig"/>
+			<arg line="${targets}"/>
+			<arg line="${clean}"/>
+		</exec>
+		<antcall target="refresh_fragment">
+			<param name="fragment" value="org.eclipse.swt.gtk.hpux.ia64_32"/>
+		</antcall>
+	</target>
+	
+	<target name="build_gtk_hpux_ia64" depends="init_build">
+		<property name="clean" value="clean"/>
+		<property name="targets" value="install"/>
+		<property environment="env"/>
+		<exec dir="${basedir}/${builddir}" executable="sh" failonerror="true">
+			<arg value="build.sh"/>
+			<env key="MODEL" value="ia64"/>
+			<env key="JAVA_HOME" value="/opt/java1.5"/>
+			<env key="AWT_HOME" value="/opt/java1.5/jre/lib/IA64W/"/>
+			<env key="PATH" value="/bluebird/teamswt/bog/gtk/hpux/bin:${env.PATH}"/>
+			<env key="PKG_CONFIG_PATH" value="/bluebird/teamswt/bog/gtk/hpux/lib/pkgconfig"/>
+			<arg line="${targets}"/>
+			<arg line="${clean}"/>
+		</exec>
+		<antcall target="refresh_fragment">
+			<param name="fragment" value="org.eclipse.swt.gtk.hpux.ia64"/>
+		</antcall>
+	</target>
+				
 	<target name="build_motif_linux" depends="init_build">
 		<property name="clean" value="clean"/>
 		<property name="targets" value="make_mozilla make_xulrunner make_xpcominit make_cairo install"/>
@@ -346,7 +423,7 @@
 			<param name="fragment" value="org.eclipse.swt.motif.linux.x86"/>
 		</antcall>
 	</target>
-
+	
 	<target name="build_motif_aix" depends="init_build">
 		<property name="clean" value="clean"/>
 		<property name="targets" value="install"/>
@@ -441,7 +518,7 @@
 	
 	<target name="check_libraries" depends="get_version">
 		<antcall target="check_fragment_libraries">
-			<param name="library_count" value="5"/>
+			<param name="library_count" value="6"/>
 			<param name="fragment" value="org.eclipse.swt.win32.win32.x86"/>
 		</antcall>
 		<antcall target="check_fragment_libraries">
@@ -462,10 +539,12 @@
 			<param name="fragment" value="org.eclipse.swt.wpf.win32.x86"/>
 		</antcall>
 		-->
+		<!-- Photon is not being built
 		<antcall target="check_fragment_libraries">
 			<param name="library_count" value="1"/>
 			<param name="fragment" value="org.eclipse.swt.photon.qnx.x86"/>
 		</antcall>
+		-->
 		<antcall target="check_fragment_libraries">
 			<param name="library_count" value="5"/>
 			<param name="fragment" value="org.eclipse.swt.carbon.macosx"/>
@@ -487,11 +566,11 @@
 			<param name="fragment" value="org.eclipse.swt.gtk.linux.ppc64"/>
 		</antcall>
 		<antcall target="check_fragment_libraries">
-			<param name="library_count" value="11"/>
+			<param name="library_count" value="12"/>
 			<param name="fragment" value="org.eclipse.swt.gtk.linux.x86"/>
 		</antcall>
 		<antcall target="check_fragment_libraries">
-			<param name="library_count" value="11"/>
+			<param name="library_count" value="12"/>
 			<param name="fragment" value="org.eclipse.swt.gtk.linux.x86_64"/>
 		</antcall>
 		<antcall target="check_fragment_libraries">
@@ -512,9 +591,19 @@
 		</antcall>
 		<antcall target="check_fragment_libraries">
 			<param name="library_count" value="5"/>
+			<param name="fragment" value="org.eclipse.swt.gtk.aix.ppc"/>
+		</antcall>
+		<antcall target="check_fragment_libraries">
+			<param name="library_count" value="5"/>
 			<param name="fragment" value="org.eclipse.swt.gtk.aix.ppc64"/>
 		</antcall>
 		<antcall target="check_fragment_libraries">
+			<param name="library_count" value="4"/>
+			<param name="fragment" value="org.eclipse.swt.gtk.hpux.ia64_32"/>
+		</antcall>
+		<!-- Motif is not being built
+		
+		antcall target="check_fragment_libraries">
 			<param name="library_count" value="9"/>
 			<param name="fragment" value="org.eclipse.swt.motif.linux.x86"/>
 		</antcall>
@@ -529,16 +618,18 @@
 		<antcall target="check_fragment_libraries">
 			<param name="library_count" value="5"/>
 			<param name="fragment" value="org.eclipse.swt.motif.solaris.sparc"/>
-		</antcall>
+		</antcall-->
 	</target>
 	
 	<target name="check_fragment_libraries" depends="get_version">
 		<property name="checkdir" value="~/build/check_libraries"/>
-		<!-- WPF is not being built
-		<property name="library_count" value="131"/>
+		<!-- WPF and Photon are not being built
+		
+		Motif not built
+		org.eclipse.swt.motif.linux.x86 org.eclipse.swt.motif.aix.ppc org.eclipse.swt.motif.hpux.ia64_32 org.eclipse.swt.motif.solaris.sparc
 		-->
-		<property name="library_count" value="134"/>
-		<property name="fragment" value="org.eclipse.swt.win32.win32.x86 org.eclipse.swt.win32.win32.x86_64 org.eclipse.swt.win32.win32.ia64 org.eclipse.swt.win32.wce_ppc.arm org.eclipse.swt.wpf.win32.x86 org.eclipse.swt.photon.qnx.x86 org.eclipse.swt.carbon.macosx org.eclipse.swt.cocoa.macosx org.eclipse.swt.cocoa.macosx.x86_64 org.eclipse.swt.gtk.linux.ppc org.eclipse.swt.gtk.linux.ppc64 org.eclipse.swt.gtk.linux.x86 org.eclipse.swt.gtk.linux.x86_64 org.eclipse.swt.gtk.linux.s390 org.eclipse.swt.gtk.linux.s390x org.eclipse.swt.gtk.aix.ppc64 org.eclipse.swt.gtk.solaris.sparc org.eclipse.swt.gtk.solaris.x86 org.eclipse.swt.motif.linux.x86 org.eclipse.swt.motif.aix.ppc org.eclipse.swt.motif.hpux.ia64_32 org.eclipse.swt.motif.solaris.sparc"/>
+		<property name="library_count" value="124"/>
+		<property name="fragment" value="org.eclipse.swt.win32.win32.x86 org.eclipse.swt.win32.win32.x86_64 org.eclipse.swt.win32.win32.ia64 org.eclipse.swt.win32.wce_ppc.arm org.eclipse.swt.carbon.macosx org.eclipse.swt.cocoa.macosx org.eclipse.swt.cocoa.macosx.x86_64 org.eclipse.swt.gtk.linux.ppc org.eclipse.swt.gtk.linux.ppc64 org.eclipse.swt.gtk.linux.x86 org.eclipse.swt.gtk.linux.x86_64 org.eclipse.swt.gtk.linux.s390 org.eclipse.swt.gtk.linux.s390x org.eclipse.swt.gtk.aix.ppc org.eclipse.swt.gtk.aix.ppc64 org.eclipse.swt.gtk.solaris.sparc org.eclipse.swt.gtk.solaris.x86 org.eclipse.swt.gtk.hpux.ia64_32"/>
 		<sshexec host="${m_linux_x86}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
@@ -551,73 +642,178 @@
 		<sshexec host="${m_linux_x86}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_linux_x86_output"
 			command="hostname"/>
 		<sshexec host="${m_linux_x86_64}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_linux_x86_64_output"
 			command="hostname"/>
 		<!-- These machines are only used for 3.5.x builds. -->
 		<!--sshexec host="${m_linux_rh3_x86}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_linux_rh3_x86_output"
 			command="hostname"/>
 		<sshexec host="${m_linux_rh3_x86_64}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_linux_rh3_x86_64_output"
 			command="hostname"/-->
+			
 		<sshexec host="${m_linux_ppc}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_linux_ppc_output"
 			command="hostname"/>
 		<sshexec host="${m_linux_ppc64}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_linux_ppc64_output"
 			command="hostname"/>
+			
 		<sshexec host="${m_solaris_sparc}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_solaris_sparc_output"
 			command="hostname"/>
 		<sshexec host="${m_solaris_x86}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_solaris_x86_output"
 			command="hostname"/>
+			
 		<sshexec host="${m_aix}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_aix_output"
 			command="hostname"/>
+			
 		<sshexec host="${m_hpux}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_hpux_output"
 			command="hostname"/>
 		<sshexec host="${m_mac}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
+			outputproperty="m_mac_output"
 			command="hostname"/>
 		</parallel>
+		<property name="success_msg" value="Success"/>
+		<property name="fail_msg" value="*** Fail ***"/>
+		<condition property="m_linux_x86_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_x86}*" string="${m_linux_x86_output}"/>
+		</condition>
+		<condition property="m_linux_x86_64_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_x86_64}*" string="${m_linux_x86_64_output}"/>
+		</condition>
+		<!--condition property="m_linux_rh3_x86_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_rh3_x86}*" string="${m_linux_rh3_x86_output}"/>
+		</condition>
+		<condition property="m_linux_rh3_x86_64_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_rh3_x86_64}*" string="${m_linux_rh3_x86_64_output}"/>
+		</condition-->
+		
+		<condition property="m_linux_ppc_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_ppc}*" string="${m_linux_ppc_output}"/>
+		</condition>
+		<condition property="m_linux_ppc64_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_ppc64}*" string="${m_linux_ppc64_output}"/>
+		</condition>
+		<condition property="m_solaris_sparc_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_solaris_sparc}*" string="${m_solaris_sparc_output}"/>
+		</condition>
+		<condition property="m_solaris_x86_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_solaris_x86}*" string="${m_solaris_x86_output}"/>
+		</condition>
+		<condition property="m_aix_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_aix}*" string="${m_aix_output}"/>
+		</condition>
+		<condition property="m_hpux_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_hpux}*" string="${m_hpux_output}"/>
+		</condition>
+		<condition property="m_mac_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_mac}*" string="${m_mac_output}"/>
+		</condition>
+		<echo>-------------------------</echo>
+		<echo>Status:</echo>
+		<echo></echo>
+		<echo>${m_linux_x86} - ${m_linux_x86_test}</echo>
+		<echo>${m_linux_x86_64} - ${m_linux_x86_64_test}</echo>
+		<!--echo>${m_linux_rh3_x86} ${m_linux_rh3_x86_test}</echo>
+		<echo>${m_linux_rh3_x86_64} ${m_linux_rh3_x86_64_test}</echo-->
+		<echo>${m_linux_ppc} - ${m_linux_ppc_test}</echo>
+		<echo>${m_linux_ppc64} - ${m_linux_ppc64_test}</echo>
+		<echo>${m_solaris_sparc} - ${m_solaris_sparc_test}</echo>
+		<echo>${m_solaris_x86} - ${m_solaris_x86_test}</echo>
+		<echo>${m_aix} - ${m_aix_test}</echo>
+		<echo>${m_hpux} - ${m_hpux_test}</echo>
+		<echo>${m_mac} - ${m_mac_test}</echo>
+		<echo>-------------------------</echo>
+		<condition property="m_fail">
+			<matches pattern="Fail" string="${m_linux_x86_test} ${m_linux_x86_64_test} ${m_linux_ppc_test} ${m_linux_ppc64_test} ${m_solaris_sparc_test} ${m_solaris_x86_test} ${m_aix_test} ${m_hpux_test} ${m_mac_test}"/>
+		</condition>
+		<fail if="m_fail" message="Failed"/>
 	</target>
 
 	<target name="check_s390_machines">
+		<parallel>
 		<sshexec host="${m_linux_x86}" 
 			username="swtbuild" 
 			keyfile="${keyfile}"
+			failonerror="false"
 			trust="true"
-			command="hostname; ping -c 1 ${m_linux_s390};"/>
+			outputproperty="m_linux_s390_output"
+			command="echo test machine > ${m_linux_s390}.txt; if scp ${m_linux_s390}.txt ${m_linux_s390}:build/; then rm ${m_linux_s390}.txt; hostname; else rm ${m_linux_s390x}.txt; echo 'failed'; fi"/>
 		<sshexec host="${m_linux_x86}" 
 			username="swtbuild" 
 			keyfile="${keyfile}" 
+			failonerror="false"
 			trust="true"
-			command="hostname; ping -c 1 ${m_linux_s390x};"/>
+			outputproperty="m_linux_s390x_output"
+			command="echo test machine > ${m_linux_s390x}.txt; if scp ${m_linux_s390x}.txt ${m_linux_s390x}:build/; then rm ${m_linux_s390x}.txt; hostname; else rm ${m_linux_s390x}.txt; echo 'failed'; fi"/>
+		</parallel>
+		<property name="success_msg" value="Success"/>
+		<property name="fail_msg" value="*** Fail ***"/>
+		<condition property="m_linux_s390_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_x86}*" string="${m_linux_s390_output}"/>
+		</condition>
+		<condition property="m_linux_s390x_test" value="${success_msg}" else="${fail_msg}">
+			<matches pattern="${m_linux_x86}*" string="${m_linux_s390x_output}"/>
+		</condition>
+		<echo>-------------------------</echo>
+		<echo>Status:</echo>
+		<echo></echo>
+		<echo>${m_linux_s390} - ${m_linux_s390_test}</echo>
+		<echo>${m_linux_s390x} - ${m_linux_s390x_test}</echo>
+		<echo>-------------------------</echo>
+		<condition property="m_fail">
+			<matches pattern="Fail" string="${m_linux_s390_test} ${m_linux_s390x_test}"/>
+		</condition>
+		<fail if="m_fail" message="Failed"/>
 	</target>
 	
 	<target name="check_compilation">
@@ -666,12 +862,16 @@
 		<antcall target="build_classes">
 			<param name="cp" value=".classpath_motif"/>
 		</antcall>
+		<!-- Not building Photon
 		<antcall target="build_classes">
 			<param name="cp" value=".classpath_photon"/>
 		</antcall>
+		-->
+		<!-- Not building WPF
 		<antcall target="build_classes">
 			<param name="cp" value=".classpath_wpf"/>
 		</antcall>
+		-->
 	</target>
 	
 	<target name="replace64" if="is64">
@@ -697,6 +897,19 @@
 	</target>
 
 	<!-- common build tasks -->
+	<target name="new_release">
+		<property name="tmpdir" value="${tmphome}/new_release"/>
+		<delete dir="${tmpdir}" quiet="true"/>
+		<mkdir dir="${tmpdir}"/>
+		<antcall target="new_release_imp"/>
+		<delete dir="${tmpdir}" quiet="true"/>
+	</target>
+	
+	<target name="new_release_imp" depends="get_new_release_version">
+		<property name="natives_changed" value="true"/>
+		<antcall target="increment_version_imp"/>
+	</target>
+	
 	<target name="increment_version">
 		<property name="tmpdir" value="${tmphome}/inc${TAG}"/>
 		<delete dir="${tmpdir}" quiet="true"/>
@@ -725,10 +938,13 @@
 		</cvs>
 
 		<!-- Update the files -->
+		<replace file="${tmpdir}/${library_j2se}" token="MAJOR_VERSION = ${maj_ver}" value="MAJOR_VERSION = ${new_maj_ver}"/>
+		<replace file="${tmpdir}/${library_j2me}" token="MAJOR_VERSION = ${maj_ver}" value="MAJOR_VERSION = ${new_maj_ver}"/>
 		<replace file="${tmpdir}/${library_j2se}" token="MINOR_VERSION = ${min_ver}" value="MINOR_VERSION = ${new_min_ver}"/>
 		<replace file="${tmpdir}/${library_j2me}" token="MINOR_VERSION = ${min_ver}" value="MINOR_VERSION = ${new_min_ver}"/>
-		<replace file="${tmpdir}/${version_file}" token="version ${maj_ver}.${min_ver}" value="version ${maj_ver}.${new_min_ver}"/>
+		<replace file="${tmpdir}/${version_file}" token="version ${maj_ver}.${min_ver}" value="version ${new_maj_ver}.${new_min_ver}"/>
 		<replace file="${tmpdir}/${make_common}" token="min_ver=${min_ver}" value="min_ver=${new_min_ver}"/>
+		<replace file="${tmpdir}/${make_common}" token="maj_ver=${maj_ver}" value="maj_ver=${new_maj_ver}"/>
 		<replace file="${tmpdir}/${make_common}" token="comma_ver=${comma_ver}" value="comma_ver=${new_comma_ver}"/>
 
 		<!-- Commit the files -->
@@ -834,7 +1050,7 @@
 		<echo>New tag=${swt_new_tag}.</echo>
 	</target>
 
-	<!-- Set swt_version, new_version, old_version (and min_ver, maj_ver, new_min_ver, old_min_ver) from the make_common.mak  -->
+	<!-- Set swt_version, new_version, (and min_ver, maj_ver, new_min_ver, new_maj_ver) from the make_common.mak  -->
 	<target name="get_version" unless="swt_version">
 		<property name="tmpdir" value="."/>
 		<property name="cvsRsh" value="plink"/>
@@ -850,20 +1066,56 @@
 		<loadproperties srcFile="${tmpdir}/${make_common}"/>
 		<copy file="${tmpdir}/${make_common}" tofile="${tmpdir}/tmp.txt" overwrite="true"/>
 		<propertyfile file="${tmpdir}/tmp.txt">
-			<entry key="old_min_ver" default="${min_ver}" type="int" operation="-"/>
 			<entry key="new_min_ver" default="${min_ver}" type="int" operation="+"/>
+			<entry key="new_maj_ver" default="${maj_ver}" type="int" operation="="/>
 		</propertyfile>
 		<loadproperties srcFile="${tmpdir}/tmp.txt"/>
 		<property name="swt_version" value="${maj_ver}${min_ver}"/>
 		<property name="new_version" value="${maj_ver}${new_min_ver}"/>
-		<property name="old_version" value="${maj_ver}${old_min_ver}"/>
 		<replace file="${tmpdir}/tmp.txt" token="comma_ver=${comma_ver}" value="new_comma_ver=${new_version}"/>
 		<replaceregexp file="${tmpdir}/tmp.txt" match="new_comma_ver=(\d)(\d)(\d)(\d)" replace="new_comma_ver=\1,\2,\3,\4" byline="true"/>
 		<loadproperties srcFile="${tmpdir}/tmp.txt"/>
 		<delete file="${tmpdir}/tmp.txt"/>
-		<echo>Version=${swt_version}; Old=${old_version}; New=${new_version}; New comma_ver=${new_comma_ver}</echo>
+		<echo>Version=${swt_version}; New=${new_version}; New comma_ver=${new_comma_ver}</echo>
 	</target>
 
+	<target name="get_new_release_version" unless="min_ver">
+		<property name="tmpdir" value="."/>
+		<property name="cvsRsh" value="plink"/>
+		<property name="make_common" value="org.eclipse.swt/Eclipse SWT/common/library/make_common.mak"/>
+		<cvs cvsRoot="${cvsRoot}" cvsrsh="${cvsRsh}" failonerror="true" dest="${tmpdir}">
+			<commandline>
+				<argument value="checkout"/>
+				<argument line="${TAG}"/>
+				<argument value="${make_common}"/>
+			</commandline>
+		</cvs>
+		
+		<loadproperties srcFile="${tmpdir}/${make_common}"/>
+		<script language="javascript">
+			<![CDATA[
+				min_ver = project.getProperty("min_ver");
+				maj_ver = project.getProperty("maj_ver");
+				new_min_ver = ((parseInt(min_ver) / 100) + 1) * 100;
+				new_maj_ver = maj_ver;
+				if (new_min_ver >= 1000) {
+					new_min_ver = "000";
+					new_maj_ver = parseInt(new_maj_ver) + 1;
+				}
+				project.setProperty("new_min_ver", new_min_ver);
+				project.setProperty("new_maj_ver", new_maj_ver);
+	   	 	]]>
+		</script>
+		<property name="swt_version" value="${maj_ver}${min_ver}"/>
+		<property name="new_version" value="${new_maj_ver}${new_min_ver}"/>
+		<copy file="${tmpdir}/${make_common}" tofile="${tmpdir}/tmp.txt" overwrite="true"/>
+		<replace file="${tmpdir}/tmp.txt" token="comma_ver=${comma_ver}" value="new_comma_ver=${new_version}"/>
+		<replaceregexp file="${tmpdir}/tmp.txt" match="new_comma_ver=(\d)(\d)(\d)(\d)" replace="new_comma_ver=\1,\2,\3,\4" byline="true"/>
+		<loadproperties srcFile="${tmpdir}/tmp.txt"/>
+		<delete file="${tmpdir}/tmp.txt"/>
+		<echo>Version=${swt_version}; New=${new_version}; New comma_ver=${new_comma_ver}</echo>
+	</target>
+	
 	<!-- Set natives_changed if there are changes in the C code -->
 	<target name="check_natives_changed" unless="natives_changed" depends="get_tag">
 		<property name="tmpdir" value="."/>
@@ -872,12 +1124,12 @@
 				<argument value="checkout"/>
 				<argument line="${TAG}"/>
 				<argument line="${cp_win32}"/>
-				<argument line="${cp_wpf}"/>
+				<!--argument line="${cp_wpf}"/-->
 				<argument line="${cp_gtk}"/>
-				<argument line="${cp_motif}"/>
+				<!--argument line="${cp_motif}"/-->
 				<argument line="${cp_carbon}"/>
 				<argument line="${cp_cocoa}"/>
-				<argument line="${cp_photon}"/>
+				<!--argument line="${cp_photon}"/-->
 			</commandline>
 		</cvs>
 	
@@ -901,7 +1153,7 @@
 		<echo>Removing ${removed_files}</echo>
 		<cvs dest="${fragment}" command="remove -f ${removed_files}" cvsRoot="${cvsRoot}" cvsrsh="${cvsRsh}" failonerror="true"/>
 		<echo>Commiting ${removed_files}</echo>
-		<cvs dest="${fragment}" command="commit -m 'remove v${old_version}' ${removed_files}" cvsRoot="${cvsRoot}" cvsrsh="${cvsRsh}" failonerror="true"/>
+		<cvs dest="${fragment}" command="commit -m 'remove old libs v${swt_version}' ${removed_files}" cvsRoot="${cvsRoot}" cvsrsh="${cvsRsh}" failonerror="true"/>
 		<echo>Adding ${added_files}</echo>
 		<cvs dest="${fragment}" command="add -kb ${added_files}" cvsRoot="${cvsRoot}" cvsrsh="${cvsRsh}" failonerror="true"/>
 	</target>
@@ -958,16 +1210,18 @@
 		</cvs>
 	</target>
 
-	<!-- Params: fragment, swt_version, old_version -->
+	<!-- Params: fragment, swt_version -->
 	<target name="commit_fragment" depends="get_version" if="natives_changed">
+		<fileset id="removeid" dir="${fragment}">
+			<filename regex="[0-9][0-9][0-9][0-9]."/>
+			<filename regex="${swt_version}." negate="true"/>
+		</fileset>
+		
 		<copy todir="${fragment}" overwrite="false">
-			<fileset dir="${fragment}" includes="*${old_version}*"/>
-			<regexpmapper from="(.*)${old_version}(.*)" to="\1${swt_version}\2"/>
+			<fileset refid="removeid"/>
+			<regexpmapper from="(.*)[0-9][0-9][0-9][0-9](.*)" to="\1${swt_version}\2"/>
 		</copy>
-		<chmod perm="755">
-			<fileset dir="${fragment}" includes="*${swt_version}*"/>
-		</chmod>
-		<fileset id="removeid" dir="${fragment}" includes="*${old_version}*"/>
+		
 		<property name="rfiles" refid="removeid"/>
 		<echo file="tmp">removed_files=${rfiles}</echo>
 		<replace file="tmp" token=";" value=" "/>
@@ -981,6 +1235,10 @@
 		<loadproperties srcfile="tmp"/>
 		<delete file="tmp"/>
 
+		<chmod perm="755">
+			<fileset dir="${fragment}" includes="*${swt_version}*"/>
+		</chmod>
+
 		<condition property="is_new_version">
 			<not>
 				<equals arg1="" arg2="${removed_files}"/>
@@ -1301,6 +1559,16 @@
 		</antcall>
 	</target>
 
+	<target name="gtk_aix_ppc">
+		<antcall target="build_ssh">
+			<param name="machine" value="${m_aix}"/>
+			<param name="cp" value="${cp_gtk}"/>
+			<param name="fragment" value="org.eclipse.swt.gtk.aix.ppc"/>
+			<param name="build_target" value="build_gtk_aix_ppc"/>
+			<param name="pre_commands" value="export JAVA_HOME=~/build/JRE/AIX/sdk; export PATH=${ant_home}/bin:~/build/cvs_bin/AIX:$PATH;"/>
+		</antcall>
+	</target>
+
 	<target name="gtk_aix_ppc64">
 		<antcall target="build_ssh">
 			<param name="machine" value="${m_aix}"/>
@@ -1310,6 +1578,16 @@
 			<param name="pre_commands" value="export JAVA_HOME=~/build/JRE/AIX/sdk; export PATH=${ant_home}/bin:~/build/cvs_bin/AIX:$PATH;"/>
 		</antcall>
 	</target>
+	
+	<target name="gtk_hpux_ia64_32">
+		<antcall target="build_ssh">
+			<param name="machine" value="${m_hpux}"/>
+			<param name="cp" value="${cp_gtk}"/>
+			<param name="fragment" value="org.eclipse.swt.gtk.hpux.ia64_32"/>
+			<param name="build_target" value="build_gtk_hpux_ia64_32"/>
+			<param name="pre_commands" value="export JAVA_HOME=/opt/java1.5; export PATH=${ant_home}/bin:$PATH; "/>
+		</antcall>
+	</target>
 
 	<target name="gtk_solaris_x86">
 		<antcall target="build_ssh">
@@ -1377,6 +1655,7 @@
 			<param name="cp" value="${cp_cocoa}"/>
 			<param name="fragment" value="org.eclipse.swt.cocoa.macosx"/>
 			<param name="build_target" value="build_cocoa_x86_and_ppc"/>
+			<param name="pre_commands" value="export PATH=${ant_home}/bin:$PATH; "/>
 		</antcall>
 	</target>
 
@@ -1386,6 +1665,7 @@
 			<param name="cp" value="${cp_cocoa}"/>
 			<param name="fragment" value="org.eclipse.swt.cocoa.macosx.x86_64"/>
 			<param name="build_target" value="build_cocoa_x86_64"/>
+			<param name="pre_commands" value="export PATH=${ant_home}/bin:$PATH; "/>
 		</antcall>
 	</target>
 
@@ -1395,6 +1675,7 @@
 			<param name="cp" value="${cp_carbon}"/>
 			<param name="fragment" value="org.eclipse.swt.carbon.macosx"/>
 			<param name="build_target" value="build_carbon"/>
+			<param name="pre_commands" value="export PATH=${ant_home}/bin:$PATH; "/>
 		</antcall>
 	</target>
 
@@ -1411,26 +1692,28 @@
 			<format property="build_version" pattern="yyyyMMddkkmmss"/>
 		</tstamp>
 		<mkdir dir="${logdir}/${build_version}"/>
-		<parallel failonany="false">
-			<antcall target="win32_x86"/>
-			<antcall target="win32_x86_64"/>
-			<antcall target="win32_ia64"/>
-			<antcall target="wince"/>
-			<antcall target="wpf_x86"/>
-			<antcall target="gtk_linux_x86"/>
-			<antcall target="gtk_linux_x86_64"/>
-			<antcall target="gtk_linux_ppc"/>
-			<antcall target="gtk_solaris_x86"/>
-			<antcall target="gtk_solaris_sparc"/>
-			<antcall target="motif_linux"/>
-			<antcall target="motif_aix"/>
-			<antcall target="motif_solaris"/>
-			<antcall target="motif_hpux"/>
-			<antcall target="cocoa_x86_and_ppc"/>
-			<antcall target="cocoa_x86_64"/>
-			<antcall target="carbon"/>
-			<antcall target="photon"/>
-		</parallel>
+		<antcall target="carbon"/>
+		<antcall target="cocoa_x86_64"/>
+		<antcall target="cocoa_x86_and_ppc"/>
+		<antcall target="gtk_linux_ppc"/>
+		<antcall target="gtk_linux_ppc64"/>
+		<antcall target="gtk_linux_s390"/>
+		<antcall target="gtk_linux_s390x"/>
+		<antcall target="gtk_linux_x86"/>
+		<antcall target="gtk_linux_x86_64"/>
+		<antcall target="gtk_aix_ppc"/>
+		<antcall target="gtk_aix_ppc64"/>
+		<antcall target="gtk_solaris_x86"/>
+		<antcall target="gtk_solaris_sparc"/>
+		<antcall target="gtk_hpux_ia64_32"/>
+		<!--antcall target="motif_aix"/>
+		<antcall target="motif_hpux"/>
+		<antcall target="motif_linux"/>
+		<antcall target="motif_solaris"/-->
+		<antcall target="win32_ia64"/>
+		<antcall target="win32_x86"/>
+		<antcall target="win32_x86_64"/>
+		<antcall target="wince"/>
 	</target>
 
 </project>
diff --git a/eclipse/plugins/org.eclipse.team.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.team.core/.settings/org.eclipse.jdt.core.prefs
index e44f3e9..12430cf 100644
--- a/eclipse/plugins/org.eclipse.team.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.team.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Wed Jul 05 10:49:37 EDT 2006
+#Tue Feb 01 14:42:20 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -8,6 +16,7 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -72,3 +81,5 @@ org.eclipse.jdt.core.compiler.source=1.3
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.team.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.team.core/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..cc86bca
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:42:20 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.team.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.team.core/META-INF/MANIFEST.MF
index b4ff2c5..e67b230 100644
--- a/eclipse/plugins/org.eclipse.team.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.team.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.team.core; singleton:=true
-Bundle-Version: 3.5.101.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-Activator: org.eclipse.team.internal.core.TeamPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -11,6 +11,7 @@ Export-Package: org.eclipse.team.core,
  org.eclipse.team.core.diff.provider,
  org.eclipse.team.core.history,
  org.eclipse.team.core.history.provider,
+ org.eclipse.team.core.importing.provisional;x-friends:="org.eclipse.pde.core,org.eclipse.team.cvs.core",
  org.eclipse.team.core.mapping,
  org.eclipse.team.core.mapping.provider,
  org.eclipse.team.core.subscribers,
@@ -18,11 +19,12 @@ Export-Package: org.eclipse.team.core,
  org.eclipse.team.core.variants,
  org.eclipse.team.internal.core;x-friends:="org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui",
  org.eclipse.team.internal.core.history;x-friends:="org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui",
+ org.eclipse.team.internal.core.importing;x-internal:=true,
  org.eclipse.team.internal.core.mapping;x-friends:="org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui",
  org.eclipse.team.internal.core.streams;x-friends:="org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui",
  org.eclipse.team.internal.core.subscribers;x-friends:="org.eclipse.team.cvs.core,org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui,org.eclipse.team.ui"
 Require-Bundle: org.eclipse.core.resources;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)"
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.team.core/buildnotes_team.html b/eclipse/plugins/org.eclipse.team.core/buildnotes_team.html
index 15879cb..1578833 100644
--- a/eclipse/plugins/org.eclipse.team.core/buildnotes_team.html
+++ b/eclipse/plugins/org.eclipse.team.core/buildnotes_team.html
@@ -12,30 +12,309 @@
 <h1>Eclipse Platform Build Notes (3.5)<br>
 Team, Compare and CVS</h1>
 
-<p>Integration Build (lutego 03, 2011, 4:36 p.m.)</p>
+<p>Integration Build (maja 25, 2011, 1:46 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336234">Bug 336234</a>. Plug-in versions needs to be updated for 3.6.2 (ASSIGNED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328676">Bug 328676</a>. [Tests] CVSMergeSubscriberTest#test46007 fails randomly (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347124">Bug 347124</a>. [Wizards] Import Team Project Set page is missing mnemonics for radio buttons (File/URL) (FIXED)<br>
   </p>
 
-<p>Integration Build (stycznia 19, 2011, 2:17 p.m.)</p>
+<p>Integration Build (maja 13, 2011, 5:37 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332640">Bug 332640</a>. [backport] Team > Merge operation for project contains logical model always show no changes between two branches (ASSIGNED)<br>
   </p>
 
-<p>Integration Build (stycznia 05, 2011, 12:12 p.m.)</p>
+<p>Integration Build (maja 11, 2011, 11:55 a.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332639">Bug 332639</a>. [backport] There are no changes for models  showing in the Synchronize view with Team > Merge operation. (FIXED)<br>
   </p>
 
-<p>Integration Build (August 25, 2010, 12:44 p.m.)</p>
+<p>Integration Build (maja 10, 2011, 1:07 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311704">Bug 311704</a>. please tag these resources/team bundles so they include source references for the 3.6 release (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316875">Bug 316875</a>. [backport] Commit, Apply Patch and Synchronize no longer take keybindings (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318557">Bug 318557</a>. [backport] Exception when trying to commit a lot of projects (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343241">Bug 343241</a>. DBCS3.7 Fail to compare MS Word's docx format document files (FIXED)<br>
+  </p>
+
+<p>Integration Build (maja 04, 2011, 1:41 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337550">Bug 337550</a>. [History View] Add simple branch filter to CVS History view (FIXED)<br>
+  </p>
+
+<p>Integration Build (kwietnia 19, 2011, 12:42 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209834">Bug 209834</a>. *.a under "Team->Ignored Resources" unchecks itself after each session (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294650">Bug 294650</a>. create patch dialog does not always select all files (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340666">Bug 340666</a>. Cannot save changes in compare editor for 2 projects (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341348">Bug 341348</a>. version of org.eclipse.core.net.linux.x86 needs to be incremented (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342541">Bug 342541</a>. [History View] New Branches column: column widths need some work (FIXED)<br>
+  </p>
+
+<p>Integration Build (kwietnia 12, 2011, 12:14 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=76386">Bug 76386</a>. [History View] CVS Resource History shows revisions from all branches (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313510">Bug 313510</a>. "Import specific versions(s) shown below" in Import Projects from CVS dialog needs polish (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342513">Bug 342513</a>. NLS missing message: HistoryFilterDialog_branchname (FIXED)<br>
+  </p>
+
+<p>Integration Build (kwietnia 05, 2011, 12:17 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=209834">Bug 209834</a>. *.a under "Team->Ignored Resources" unchecks itself after each session (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341345">Bug 341345</a>. version of org.eclipse.compare.win32 bundle needs to be incremented (FIXED)<br>
+  </p>
+
+<p>Integration Build (marca 29, 2011, 12:13 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319661">Bug 319661</a>. Patch wizard excludes changes in projects that it can't connect (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341114">Bug 341114</a>. 'Consider file contents in comparison' option needs clarification (FIXED)<br>
+  </p>
+
+<p>Integration Build (marca 22, 2011, 11:22 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339863">Bug 339863</a>. "Invalid member type qualification" in PreferenceManager (FIXED)<br>
+  </p>
+
+<p>Integration Build (marca 01, 2011, 12:47 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246547">Bug 246547</a>. [Tests] Failure in testImportMultipleProjects on Windows (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325553">Bug 325553</a>. Failing team.cvs tests (ResourceMapperTests#testCacheBase) (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330490">Bug 330490</a>. API and UI to configure SCM URLs for import (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338163">Bug 338163</a>. Incorrect javadoc on KnownRepositories.java (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338287">Bug 338287</a>. CVS Bundle Importer is missing externalized string (FIXED)<br>
+  </p>
+
+<p>Integration Build (lutego 15, 2011, 12:17 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=76386">Bug 76386</a>. [History View] CVS Resource History shows revisions from all branches (ASSIGNED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336686">Bug 336686</a>. testFileMoveAndCopy, testFolderMoveAndCopy and testBug62547 failed (FIXED)<br>
+  </p>
+
+<p>Integration Build (lutego 08, 2011, 12:25 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62547">Bug 62547</a>. Rename does not appear as change (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=188278">Bug 188278</a>. [History View] History sometimes not correctly filled with revision  when is a fast view (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294042">Bug 294042</a>. Bug 188278 is back: History view often not updated (FIXED)<br>
+  </p>
+
+<p>Integration Build (stycznia 25, 2011, 12:40 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334756">Bug 334756</a>. CVS Commit dialog commits comment "<Click here to enter a commit comment>" (FIXED)<br>
+  </p>
+
+<p>Integration Build (stycznia 18, 2011, 12:49 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294925">Bug 294925</a>. Wrong Default SSH Directory (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332728">Bug 332728</a>. [Net] UnixProxyProvider execs a process to discover whether env contains 'proxy' on each socket connect (FIXED)<br>
+  </p>
+
+<p>Integration Build (stycznia 11, 2011, 12:30 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315694">Bug 315694</a>. Team > Merge operation for project contains logical model always show no changes between two branches (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333812">Bug 333812</a>. CVS Commit dialog uses wrong comment after spelling quick fix (FIXED)<br>
+  </p>
+
+<p>Integration Build (stycznia 04, 2011, 1:43 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300888">Bug 300888</a>. [Preferences] 'Ignored Resources' preference page needs to support multiselect (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315389">Bug 315389</a>. [Preferences] 'Defaults' button does nothing in 'Comment Templates' preference page (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315694">Bug 315694</a>. Team > Merge operation for project contains logical model always show no changes between two branches (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332732">Bug 332732</a>. SCMURL needs to default project name if not given (FIXED)<br>
+  </p>
+
+<p>Integration Build (grudnia 21, 2010, 1:58 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331699">Bug 331699</a>. EditorsView's EditorsContentProvider can be replaced by ArrayContentProvider (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332006">Bug 332006</a>. [Tests] AllCoreTests have been "temporarily" disabled on Windows in 2008 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332049">Bug 332049</a>. Invalid thread access comparing to HEAD (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332558">Bug 332558</a>. package.html files need minor change to generate correct description (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332612">Bug 332612</a>. Incorrect argument passed to isSupervised in ResourceVariantTreeSubscriber.members(IResource) (FIXED)<br>
+  </p>
+
+<p>Integration Build (grudnia 06, 2010, 5:37 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=262718">Bug 262718</a>. File path labels in compare editor should escape mnemonics (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324965">Bug 324965</a>. [Edit] Close Compare Editor when cancelled during initialization stage (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326926">Bug 326926</a>. API to configure and import SCM URLs (FIXED)<br>
+  </p>
+
+<p>Integration Build (listopada 30, 2010, 12:38 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331112">Bug 331112</a>. History view's tag table does not remember sort order (FIXED)<br>
+  </p>
+
+<p>Integration Build (listopada 23, 2010, 1:21 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330797">Bug 330797</a>. Consistency: Put 'Remove from View' at end of menu group (FIXED)<br>
+  </p>
+
+<p>Integration Build (listopada 09, 2010, 12:36 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=216105">Bug 216105</a>. Stream is being closed in LineComparator constructor (FIXED)<br>
+  </p>
+
+<p>Integration Build (listopada 02, 2010, 11:09 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+  </p>
+
+<p>Integration Build (pa?dziernika 25, 2010, 4:33 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=172018">Bug 172018</a>. [painting][preferences] configurable alpha level for whitespace character rendering (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327672">Bug 327672</a>. [Net] Error: "Preference node "org.eclipse.core.net" has been removed." (FIXED)<br>
+  </p>
+
+<p>Integration Build (pa?dziernika 19, 2010, 12:09 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321575">Bug 321575</a>. [Sync view] 'Show In' context menu item not available on multi-selection (FIXED)<br>
+  </p>
+
+<p>Integration Build (pa?dziernika 12, 2010, 11:35 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=242057">Bug 242057</a>. [Net] Default preference gets ignored (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322896">Bug 322896</a>. 'Save password' unchecks itself without interaction with the user (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325367">Bug 325367</a>. [Net] Unnecessary double check bypass settings in AbstractProxyProvider.select(URI) (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326685">Bug 326685</a>. Canceling compare does not work or takes way too long (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327074">Bug 327074</a>. [Net] Proxy bypass edition in preferences uncheck edited proxy bypass (FIXED)<br>
+  </p>
+
+<p>Integration Build (October 05, 2010, 1:20 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257313">Bug 257313</a>. [preferences][painting] More options to configure "Show Whitespace Characters" (FIXED)<br>
+  </p>
+
+<p>Integration Build (September 28, 2010, 12:37 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=162608">Bug 162608</a>. [Project Sets] Be able to import a .psf file directly from a URL (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300007">Bug 300007</a>. NullPointerException importing project set (FIXED)<br>
+  </p>
+
+<p>Integration Build (September 21, 2010, 12:24 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268937">Bug 268937</a>. [Net] Native entries on "Network Connection" page should be refreshed more often (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307280">Bug 307280</a>. Provide a way to disable capping in the comparison algorithm (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322329">Bug 322329</a>. Cancel does not work when comparing files (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323378">Bug 323378</a>. [Net] Native bypass for "*.eclipse.org" does not work (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323942">Bug 323942</a>. [Net] Unnecessary native method call (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325308">Bug 325308</a>. Author display inconsistencies in compare editor (FIXED)<br>
+  </p>
+
+<p>Integration Build (wrzesie? 12, 2010, 2:19 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248135">Bug 248135</a>. [History View]  Double-click in single-click mode should activate editor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311862">Bug 311862</a>. Synchronize view has duplicate mnemonic (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323493">Bug 323493</a>. CVS Compare of remote version shows only CHANGED resources, not NEW and DELETED resource (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323628">Bug 323628</a>. Files lost from CVS when replacing with nonexistent version (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324486">Bug 324486</a>. org.eclipse.jsch.tests bundle should have four part version number (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 31, 2010, 11:52 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=138853">Bug 138853</a>. [Sync View] Compare editor opened by Synchronize view only shows right author (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303624">Bug 303624</a>. [Apply Patch] Wizard shows unnecessary error dialog when applying workspace patch to file (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311011">Bug 311011</a>. Cannot compare word documents (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321000">Bug 321000</a>. Comparing word documents does not kill WINWORD processes (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323280">Bug 323280</a>. Sync view items not sorted alphabetically (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323481">Bug 323481</a>. Remove activeWorkbenchWindow parameter from TeamAction.updateSelection(IWorkbenchWindow, IWorkbenchPart, ISelection) (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323628">Bug 323628</a>. Files lost from CVS when replacing with nonexistent version (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 24, 2010, 1:10 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=145015">Bug 145015</a>. [Dialogs] Restore dialog missing mnemonics (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287526">Bug 287526</a>. AbstractResourceMappingScope doesn't need to explicitly implement ISynchronizationScope (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 17, 2010, 1:03 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255969">Bug 255969</a>. Ancestor dialog from 'Compare With > Each Other' does not cancel (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320686">Bug 320686</a>. Cannot compare locked revision with another regular revision (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322320">Bug 322320</a>. CompareEditorTests#testFileCreation failed in I20100810-0800 (FIXED)<br>
+  </p>
+
+<p>Integration Build (sierpie? 10, 2010, 1:14 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273450">Bug 273450</a>. Wrong dialogs when closing Compare With Each Other... editor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322131">Bug 322131</a>. [Tests] org.eclipse.team.tests.ccvs.ui.benchmark.Util#importZip method is duplicated (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 02, 2010, 6:26 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311526">Bug 311526</a>. ImportProjectSetAction should wrap importProjectSet in a WorkspaceModifyOp (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321496">Bug 321496</a>. Synchronize view (non model): Double-click on a folder or change-set does not expand/collapse (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 02, 2010, 1:24 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=199039">Bug 199039</a>. [Change Sets] Remove "Default" flag for a Change Set (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267649">Bug 267649</a>. [Operations] SIOOBE when restoring from repository (FIXED)<br>
+  </p>
+
+<p>Integration Build (July 27, 2010, 12:47 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=109039">Bug 109039</a>. [Sync  View] Refresh (F5) does not refresh but start synchronizing (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=248135">Bug 248135</a>. [History View]  Double-click in single-click mode should activate editor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299538">Bug 299538</a>. Exception when trying to commit a lot of projects (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319516">Bug 319516</a>. 'Check Out As' dialog should honor the auto-refresh tag preference (FIXED)<br>
+  </p>
+
+<p>Integration Build (July 20, 2010, 1:34 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244313">Bug 244313</a>. Cannot import/export PSF file without o.e.core.runtime.compatibility plug-in (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316860">Bug 316860</a>. Synchronize view is missing 'Show In' context menu item (FIXED)<br>
+  </p>
+
+<p>Integration Build (July 06, 2010, 12:58 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+  </p>
+
+<p>Integration Build (June 29, 2010, 1:36 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277719">Bug 277719</a>. [Change Sets] Change "As" in "Mark Change Set As Default" to "as" (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294925">Bug 294925</a>. Wrong Default SSH Directory (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306173">Bug 306173</a>. Commit, Apply Patch and Synchronize no longer take keybindings (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308311">Bug 308311</a>. [Repo View] Triming text from clipboard when you past the connection (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313473">Bug 313473</a>. Typo in CVSProjectPropertiesPage (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315384">Bug 315384</a>. Improve dialog that warns about binary files when creating a patch (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316050">Bug 316050</a>. these compare and team examples should be converted from old-style plugins to real OSGi bundles in 3.7 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316131">Bug 316131</a>. Merge wizard finish not updated when tags are refreshed (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316283">Bug 316283</a>. [Actions] Cannot assign key binding to "Revet to Base" action (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316860">Bug 316860</a>. Synchronize view is missing 'Show In' context menu item (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317967">Bug 317967</a>. [Sync View] Escape & in change set names when shown in context menu (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317980">Bug 317980</a>. Fix for wrong usages of affect* and effect* (FIXED)<br>
   </p>
 
 <p>Integration Build (May 27, 2010, 1:46 p.m.)</p>
diff --git a/eclipse/plugins/org.eclipse.team.core/component.xml b/eclipse/plugins/org.eclipse.team.core/component.xml
index 6fe9387..982d6a3 100644
--- a/eclipse/plugins/org.eclipse.team.core/component.xml
+++ b/eclipse/plugins/org.eclipse.team.core/component.xml
@@ -1,4 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2005, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <component xmlns="http://eclipse.org/component"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://eclipse.org/component ../component.xsd "
diff --git a/eclipse/plugins/org.eclipse.team.core/plugin.properties b/eclipse/plugins/org.eclipse.team.core/plugin.properties
index 3e550aa..3308088 100644
--- a/eclipse/plugins/org.eclipse.team.core/plugin.properties
+++ b/eclipse/plugins/org.eclipse.team.core/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2006 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,3 +18,4 @@ Repository=Repository Providers
 DefaultValidator=Default File Modification Validator
 
 StorageMergers = Storage Mergers
+BundleImporters = Bundle Importers
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.team.core/plugin.xml b/eclipse/plugins/org.eclipse.team.core/plugin.xml
index 19c1902..66274cf 100644
--- a/eclipse/plugins/org.eclipse.team.core/plugin.xml
+++ b/eclipse/plugins/org.eclipse.team.core/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2001, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
 
    <extension-point id="fileTypes" name="%FileTypesRegistry" schema="schema/fileTypes.exsd"/>
@@ -8,7 +19,7 @@
    <extension-point id="repository" name="%Repository" schema="schema/repository.exsd"/>
    <extension-point id="defaultFileModificationValidator" name="%DefaultValidator" schema="schema/defaultFileModificationValidator.exsd"/>
    <extension-point id="storageMergers" name="%StorageMergers" schema="schema/storageMergers.exsd"/>
-
+   <extension-point id="bundleImporters" name="%BundleImporters" schema="schema/bundleImporters.exsd"/>
 <!-- Define common known file types -->
    <extension
          point="org.eclipse.team.core.fileTypes">
@@ -158,5 +169,4 @@
          <adapter type="org.eclipse.core.resources.mapping.ResourceMapping"/>
       </factory>
    </extension>
-
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.team.core/schema/bundleImporters.exsd b/eclipse/plugins/org.eclipse.team.core/schema/bundleImporters.exsd
new file mode 100644
index 0000000..747a545
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/schema/bundleImporters.exsd
@@ -0,0 +1,156 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.team.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.team.core" id="bundleImporters" name="Bundle Importers"/>
+      </appInfo>
+      <documentation>
+         <strong>EXPERIMENTAL</strong>. This extension point has been added as part of a work in progress. There is no guarantee that this API will work or that it will remain the same in future releases. Please do not use this API without consulting with the Team team.
+<p>
+A bundle importer is capable of creating a project in the workspace based on a bundle manifest. For example, the CVS bundle importer leverages the 'Eclipse-SourceReferences' header to import projects from CVS.
+</p>
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element internal="true" />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="importer"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="importer">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Fully qualified name of a Java class providing an implementation of <code>org.eclipse.team.core.importing.provisional.IBundleImporterDelegate</code> for this handler.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.team.core.importing.provisional.IBundleImporterDelegate"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Unique identifier for this project factory extension.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  A short description of this importer suitable for display to the end user.
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The name of this bundle importer, suitable for display to an end user.
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.6
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a bundle importer extension.
+
+<p>
+<pre>
+ <extension point="org.eclipse.team.core.bundleImporters">
+  <importer
+   id="com.example.ExampleIdentifier"
+   class="com.example.ExampleBundleImporter">
+  </importer>
+ </extension>
+</pre>
+</p>
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         Value of a importer's <b>class</b> attribute must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.team.core.importing.provisional.IBundleImporterDelegate</b>.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         CVS provides a bundle importer extension capable of importing projects from CVS referenced by 'Eclipse-SourceReferences' headers.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2011 IBM Corporation and others.
+<br>
+All rights reserved. This program and the accompanying materials are made 
+available under the terms of the Eclipse Public License v1.0 which 
+accompanies this distribution, and is available at 
+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/eclipse/plugins/org.eclipse.team.core/schema/defaultFileModificationValidator.exsd b/eclipse/plugins/org.eclipse.team.core/schema/defaultFileModificationValidator.exsd
index dd28802..4d13898 100644
--- a/eclipse/plugins/org.eclipse.team.core/schema/defaultFileModificationValidator.exsd
+++ b/eclipse/plugins/org.eclipse.team.core/schema/defaultFileModificationValidator.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.team.core" id="defaultFileModificationValidator" name="Default File Modification Validator"/>
       </appInfo>
       <documentation>
-         This extension point is for internal use only. It's purpose is to provide prompting for the overwriting of read-only resources using validateEdit on unshared projects.
+         This extension point is for internal use only. Its purpose is to provide prompting for the overwriting of read-only resources using validateEdit on unshared projects.
       </documentation>
    </annotation>
 
@@ -88,7 +88,7 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2004 IBM Corporation and others.
+         Copyright (c) 2004, 2011 IBM Corporation and others.
 All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
       </documentation>
    </annotation>
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ITeamStatus.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ITeamStatus.java
index fb588dc..a7a1126 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ITeamStatus.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ITeamStatus.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@ public interface ITeamStatus extends IStatus {
 	public static final int RESOURCE_SYNC_INFO_ERROR = 1;
 	
 	/**
-	 * An error occurred that may effect several resources in a <code>SyncInfoSet</code>.
+	 * An error occurred that may affect several resources in a <code>SyncInfoSet</code>.
 	 * The error will be cleared when the set is reset. 
 	 */
 	public static final int SYNC_INFO_SET_ERROR = 2;
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java
index 7ae5847..52bc5b6 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,13 @@ import org.eclipse.team.internal.core.Messages;
 public abstract class ProjectSetCapability {
 	
 	/**
+	 * Scheme constant (value "scm") indicating the SCM URI.
+	 * 
+	 * @since 3.6
+	 */
+	public static final String SCHEME_SCM = "scm"; //$NON-NLS-1$
+	
+	/**
 	 * Ensure that the provider type is backwards compatible by
 	 * passing the project set serializer to the type if a serializer
 	 * is registered. This is required for repository providers
@@ -147,20 +154,20 @@ public abstract class ProjectSetCapability {
 	}
 
 	/**
-	 * For every String in referenceStrings, load the corresponding project into the workspace.
-	 * The opaque strings in referenceStrings are guaranteed to have been previously
+	 * For every String in <code>referenceStrings</code>, load the corresponding project into the workspace.
+	 * The opaque strings in <code>referenceStrings</code> are guaranteed to have been previously
 	 * produced by {@link #asReference(IProject[], ProjectSetSerializationContext, IProgressMonitor)}.
-	 * The confirmOverwrite method is called with an array of projects
+	 * The {@link #confirmOverwrite(ProjectSetSerializationContext, IProject[])} method is called with an array of projects
 	 * for which projects of the same name already exists in the workspace.
 	 * <p>
-	 * Callers from within a UI context should wrapper a call to this method
-	 * inside a WorkspaceModifyOperation so that events generated as a result
+	 * Callers from within a UI context should wrap a call to this method
+	 * inside a <code>WorkspaceModifyOperation</code> so that events generated as a result
 	 * of this operation are deferred until the outermost operation
 	 * has successfully completed.
 	 * <p>
 	 * This default implementation simply throws an exception
 	 * indicating that no projects can be loaded unless there 
-	 * is an IProjectSetSerializer registered for the repository
+	 * is an {@link IProjectSetSerializer} registered for the repository
 	 * provider type in which case the operation is delegated to the 
 	 * serializer.
 	 * Subclasses are expected to override.
@@ -195,7 +202,7 @@ public abstract class ProjectSetCapability {
 		}
 		throw new TeamException(Messages.ProjectSetCapability_1); 
 	}
-	
+
 	////////////////////////////////////////////////////////////////////////////
 	//
 	// Internal utility methods for subclasses
@@ -303,13 +310,30 @@ public abstract class ProjectSetCapability {
 	
 	/**
 	 * Convert the given URI and projectName to a reference string that can be
-	 * passed to the {@link #addToWorkspace(String[], ProjectSetSerializationContext, IProgressMonitor)}
+	 * passed to the
+	 * {@link #addToWorkspace(String[], ProjectSetSerializationContext, IProgressMonitor)}
 	 * method. The scheme of the provided URI must match the scheme of the
 	 * repository provider type from which this capability was obtained.
-	 * @param uri the uri that identifies the location of the project in the repository.
-	 * @param projectName the name of the project.
-	 * @return the reference string representing a project that can be loaded into the workspace
-	 * or <code>null</code> if the URI and name cannot be translated into a reference string
+	 * <p>
+	 * Since 3.7 SCM URIs are also accepted.
+	 * </p>
+	 * <p>
+	 * The default implementation returns <code>null</code>. Subclasses may
+	 * override.
+	 * </p>
+	 * 
+	 * @see #SCHEME_SCM
+	 * @param uri
+	 *            the URI that identifies the location of the project in the
+	 *            repository.
+	 * @param projectName
+	 *            the name of the project to use. If <code>null</code>, use a
+	 *            project name from the provided SCM URI. If the URI does not
+	 *            contain the project name the last segment of the URI's path is
+	 *            used. If this fails, <code>null</code> is returned.
+	 * @return the reference string representing a project that can be loaded
+	 *         into the workspace or <code>null</code>, if the URI and name
+	 *         cannot be translated into a reference string
 	 * @since 3.2
 	 */
 	public String asReference(URI uri, String projectName) {
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ScmUrlImportDescription.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ScmUrlImportDescription.java
new file mode 100644
index 0000000..34d29ff
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/ScmUrlImportDescription.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.core;
+
+import java.net.URI;
+import java.util.HashMap;
+
+/**
+ * Describes how a bundle import will be executed. A bundle importer delegate
+ * creates bundle import descriptions when it validates bundle manifests for
+ * importing. The result, a set of bundle import descriptions is then passed to
+ * TeamUI, which basing on the info from the descriptions instantiate and
+ * initialize IScmUrlImportWizardPage pages. The pages can be used to alter the
+ * default import configuration e.g. for bundles stored in a CVS repository the
+ * user may want to check out HEAD rather than a specific version.
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class has been added as part of a work in
+ * progress. There is no guarantee that this API will work or that it will
+ * remain the same. Please do not use this API without consulting with the Team
+ * team.
+ * 
+ * @since 3.6
+ */
+public class ScmUrlImportDescription {
+	private String url;
+	private String project;
+	private HashMap properties;
+
+	public ScmUrlImportDescription(String url, String project) {
+		this.url = url;
+		this.project = project;
+	}
+
+	/**
+	 * @return project name
+	 */
+	public String getProject() {
+		return project;
+	}
+
+	/**
+	 * SCM URL
+	 * 
+	 * @return a string representation of the SCM URL
+	 */
+	public String getUrl() {
+		return url;
+	}
+
+	public URI getUri() {
+		return URI.create(url.replaceAll("\"", "")); //$NON-NLS-1$//$NON-NLS-2$
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	/**
+	 * Sets or removes a client property.
+	 * 
+	 * @param key
+	 *            property key
+	 * @param value
+	 *            property value or <code>null</code> to remove the property
+	 */
+	public synchronized void setProperty(String key, Object value) {
+		if (properties == null) {
+			properties = new HashMap();
+		}
+		if (value == null) {
+			properties.remove(key);
+		} else {
+			properties.put(key, value);
+		}
+
+	}
+
+	/**
+	 * Returns the specified client property, or <code>null</code> if none.
+	 * 
+	 * @param key
+	 *            property key
+	 * @return property value or <code>null</code>
+	 */
+	public synchronized Object getProperty(String key) {
+		if (properties == null) {
+			return null;
+		}
+		return properties.get(key);
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/Team.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/Team.java
index 3fc8c34..8d9e121 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/Team.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/Team.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,8 +18,11 @@ import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
 import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.team.core.importing.provisional.IBundleImporter;
 import org.eclipse.team.core.mapping.IStorageMerger;
 import org.eclipse.team.internal.core.*;
+import org.eclipse.team.internal.core.importing.BundleImporterExtension;
 
 /**
  * The Team class provides a global point of reference for the global ignore set
@@ -63,6 +66,8 @@ public final class Team {
     
     private final static FileContentManager fFileContentManager;
     
+	private static List fBundleImporters;
+
     static {
         fFileContentManager= new FileContentManager();
     }
@@ -291,18 +296,67 @@ public final class Team {
 								// Check for selected because this used to be the field name
 								selected = configElements[j].getAttribute("selected"); //$NON-NLS-1$
 							}
-							boolean enabled = selected != null && selected.equalsIgnoreCase("true"); //$NON-NLS-1$
-							pIgnore.put(pattern, Boolean.valueOf(enabled)); 
-							if (!gIgnore.containsKey(pattern)){
-								gIgnore.put(pattern, Boolean.valueOf(enabled));
+							boolean enabled = selected != null
+									&& selected.equalsIgnoreCase("true"); //$NON-NLS-1$
+							if (!pIgnore.containsKey(pattern)) {
+								pIgnore.put(pattern, Boolean.valueOf(enabled));
+							} else if (!Boolean.valueOf(enabled).equals(
+									pIgnore.get(pattern))) {
+								if(TeamPlugin.getPlugin().isDebugging()){
+									TeamPlugin
+											.log(IStatus.WARNING,
+													NLS.bind(
+															Messages.Team_Conflict_occured_for_ignored_resources_pattern,
+															new Object[] {
+																	pattern,
+																	collectContributingExtentionsToDisplay(
+																			pattern,
+																			extensions) }),
+													null);
+								}
+								// if another plug-in already added this pattern
+								// change the value only to disabled
+								if (!enabled) {
+									pIgnore.put(pattern,
+											Boolean.FALSE);
+								}
 							}
 						}
 					}
 				}
-			}		
+
+				Iterator it = pIgnore.keySet().iterator();
+				while (it.hasNext()) {
+					Object pattern = it.next();
+					if (!gIgnore.containsKey(pattern)) {
+						gIgnore.put(pattern, pIgnore.get(pattern));
+					}
+				}
+			}
 		}
 	}
 
+	private static String collectContributingExtentionsToDisplay(
+			String patternToFind, IExtension[] extensions) {
+		StringBuffer sb = new StringBuffer();
+		boolean isFirst = true;
+		for (int i = 0; i < extensions.length; i++) {
+			IConfigurationElement[] configElements = extensions[i]
+					.getConfigurationElements();
+			for (int j = 0; j < configElements.length; j++) {
+				if (patternToFind.equals(configElements[j]
+						.getAttribute("pattern"))) { //$NON-NLS-1$
+					if (!isFirst) {
+						sb.append(", "); //$NON-NLS-1$
+					}
+					isFirst = false;
+					sb.append(extensions[i].getContributor().getName());
+				}
+			}
+		}
+		return sb.toString();
+	}
+
 	/*
 	 * IGNORE
 	 * 
@@ -396,7 +450,7 @@ public final class Team {
 	public static IProjectSetSerializer getProjectSetSerializer(String id) {
 		TeamPlugin plugin = TeamPlugin.getPlugin();
 		if (plugin != null) {
-			IExtensionPoint extension = plugin.getDescriptor().getExtensionPoint(TeamPlugin.PROJECT_SET_EXTENSION);
+			IExtensionPoint extension = RegistryFactory.getRegistry().getExtensionPoint(TeamPlugin.ID, TeamPlugin.PROJECT_SET_EXTENSION);
 			if (extension != null) {
 				IExtension[] extensions =  extension.getExtensions();
 				for (int i = 0; i < extensions.length; i++) {
@@ -523,4 +577,31 @@ public final class Team {
     public IStorageMerger createStorageMerger(String extension) {
     	return createMerger(extension);
     }
+
+	/**
+	 * Returns the available bundle importers.
+	 * 
+	 * <p>
+	 * <strong>EXPERIMENTAL</strong>. This interface has been added as part of a
+	 * work in progress. There is no guarantee that this API will work or that
+	 * it will remain the same. Please do not use this API without consulting
+	 * with the Team team.
+	 * </p>
+	 * 
+	 * @return IBundleImporter[] returns the available bundle importers
+	 * @since 3.6
+	 */
+	public synchronized static IBundleImporter[] getBundleImporters() {
+		if (fBundleImporters == null) {
+			fBundleImporters = new ArrayList();
+			IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(TeamPlugin.EXTENSION_POINT_BUNDLE_IMPORTERS);
+			if (point != null) {
+				IConfigurationElement[] infos = point.getConfigurationElements();
+				for (int i = 0; i < infos.length; i++) {
+					fBundleImporters.add(new BundleImporterExtension(infos[i]));
+				}
+			}
+		}
+		return (IBundleImporter[]) fBundleImporters.toArray(new IBundleImporter[fBundleImporters.size()]);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/IFileRevision.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/IFileRevision.java
index 95e2a29..ee6b283 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/IFileRevision.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/IFileRevision.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.core.history;
 
@@ -95,6 +96,15 @@ public interface IFileRevision {
 	public String getComment();
 
 	/**
+	 * Returns the branches names of file revision.
+	 * 
+	 * @return an array of ITag's if branch names exist for this revision 
+     * or an empty ITag array if no names exist
+     * @since 3.6
+	 */
+	public ITag[] getBranches();
+
+	/**
 	 * Returns the set of tags available for this file revision.
 	 * 
 	 * @return an array of ITag's if ITags exist for this revision or an empty ITag array
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/provider/FileRevision.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/provider/FileRevision.java
index 054b1ad..fc8a801 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/provider/FileRevision.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/history/provider/FileRevision.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 
 package org.eclipse.team.core.history.provider;
@@ -131,7 +132,15 @@ public abstract class FileRevision implements IFileRevision {
 	public String getComment() {
 		return null;
 	}
-	
+
+	/**
+	 * {@inheritDoc}
+	 * @since 3.6
+	 */
+	public ITag[] getBranches() {
+		return new ITag[0];
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.team.core.history.IFileRevision#getTags()
 	 */
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/BundleImporterDelegate.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/BundleImporterDelegate.java
new file mode 100644
index 0000000..64805d6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/BundleImporterDelegate.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.core.importing.provisional;
+
+import java.util.*;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.*;
+import org.eclipse.osgi.util.ManifestElement;
+import org.eclipse.team.core.*;
+import org.eclipse.team.internal.core.TeamPlugin;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+
+/**
+ * Abstract implementation of {@link IBundleImporterDelegate}. It is recommended
+ * to subclass this class rather than implementing IBundleImporterDelegate
+ * directly when providing importer delegates.
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This interface has been added as part of a
+ * work in progress. There is no guarantee that this API will work or that it
+ * will remain the same. Please do not use this API without consulting with the
+ * Team team.
+ * </p>
+ * 
+ * @since 3.6
+ */
+public abstract class BundleImporterDelegate implements IBundleImporterDelegate {
+
+	private static final String ATTR_PROJECT = "project"; //$NON-NLS-1$
+
+	public static final String ECLIPSE_SOURCE_REFERENCES = "Eclipse-SourceReferences"; //$NON-NLS-1$
+
+	protected abstract Set getSupportedValues();
+
+	protected abstract RepositoryProviderType getProviderType();
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.project.IBundleImporterDelegate#validateImport(java.util.Map[])
+	 */
+	public ScmUrlImportDescription[] validateImport(Map[] manifests) {
+		ScmUrlImportDescription[] results = new ScmUrlImportDescription[manifests.length];
+		if (getProviderType() != null) {
+			for (int i = 0; i < manifests.length; i++) {
+				Map manifest = manifests[i];
+				String value = (String) manifest.get(ECLIPSE_SOURCE_REFERENCES);
+				if (value != null && value.length() > 8) {
+					String prefix = value.substring(0, 8);
+					if (getSupportedValues().contains(prefix)) {
+						try {
+							ManifestElement[] elements = ManifestElement.parseHeader(ECLIPSE_SOURCE_REFERENCES, value);
+							for (int j = 0; j < elements.length; j++) {
+								ManifestElement element = elements[j];
+								String url = element.toString();
+								String project = element.getAttribute(ATTR_PROJECT);
+								if (project == null) {
+									String bsn = (String) manifests[i].get(Constants.BUNDLE_SYMBOLICNAME);
+									if (bsn != null) {
+										ManifestElement[] bsnElement = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, bsn);
+										project = bsnElement[0].getValue();
+									}
+								}
+								results[i] = new ScmUrlImportDescription(url, project);
+							}
+						} catch (BundleException e) {
+							TeamPlugin.log(IStatus.ERROR, "An exception occured while parsing a manifest header", e);//$NON-NLS-1$
+						}
+					}
+				}
+			}
+		}
+		return results;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.importing.IBundleImporterDelegate#performImport(org.eclipse.pde.core.importing.BundleImportDescription[], org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public IProject[] performImport(ScmUrlImportDescription[] descriptions, IProgressMonitor monitor) throws CoreException {
+		List references = new ArrayList();
+		ProjectSetCapability psfCapability = getProviderType().getProjectSetCapability();
+		IProject[] result = null;
+		if (psfCapability != null) {
+			// collect and validate all header values
+			for (int i = 0; i < descriptions.length; i++) {
+				ScmUrlImportDescription description = (ScmUrlImportDescription) descriptions[i];
+				references.add(psfCapability.asReference(description.getUri(), description.getProject()));
+			}
+			// create projects
+			if (!references.isEmpty()) {
+				SubMonitor subMonitor = SubMonitor.convert(monitor, references.size());
+				result = psfCapability.addToWorkspace((String[]) references.toArray(new String[references.size()]), new ProjectSetSerializationContext(), subMonitor);
+				subMonitor.done();
+			}
+		}
+		return result;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/IBundleImporter.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/IBundleImporter.java
new file mode 100644
index 0000000..d370fbe
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/IBundleImporter.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.core.importing.provisional;
+
+
+/**
+ * A bundle importer represents an instance of a bundle importer extension.
+ * Clients contributing a bundle importer extension contribute an implementation
+ * of {@link IBundleImporterDelegate} rather than this interface.
+ * <p>
+ * Clients contributing a bundle importer extension are intended to implement
+ * {@link IBundleImporterDelegate}.
+ * </p>
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This interface has been added as part of a
+ * work in progress. There is no guarantee that this API will work or that it
+ * will remain the same. Please do not use this API without consulting with the
+ * Team team.
+ * </p>
+ * 
+ * @since 3.6
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IBundleImporter extends IBundleImporterDelegate {
+
+	/**
+	 * Returns this impoter's unique identifier.
+	 * 
+	 * @return identifier
+	 */
+	public String getId();
+
+	/**
+	 * Returns a short description of this importer, or <code>null</code> if unspecified.
+	 * 
+	 * @return description or <code>null</code>
+	 */
+	public String getDescription();
+
+	/**
+	 * Returns a human readable name for this importer.
+	 * 
+	 * @return name
+	 */
+	public String getName();
+}
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/IBundleImporterDelegate.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/IBundleImporterDelegate.java
new file mode 100644
index 0000000..38eb225
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/IBundleImporterDelegate.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.core.importing.provisional;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.team.core.ScmUrlImportDescription;
+
+/**
+ * A bundle importer delegate is contributed by a bundle importer extension and
+ * is capable of importing projects into the workspace from a repository based
+ * on bundle manifest entries.
+ * <p>
+ * Following is an example extension:
+ * 
+ * <pre>
+ * <extension point="org.eclipse.team.core.bundleImporters">
+ *  <importer
+ *   id="com.example.ExampleIdentifier"
+ *   class="com.example.ExampleBundleImporterDelegate">
+ *  </importer>
+ * </extension>
+ * </pre>
+ * 
+ * </p>
+ * <p>
+ * Clients contributing bundle importer extensions are intended to implement
+ * this interface. They can also subclass {@link BundleImporterDelegate}.
+ * </p>
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This interface has been added as part of a
+ * work in progress. There is no guarantee that this API will work or that it
+ * will remain the same. Please do not use this API without consulting with the
+ * Team team.
+ * </p>
+ * 
+ * @since 3.6
+ * @noextend This interface is not intended to be extended by clients.
+ */
+public interface IBundleImporterDelegate {
+
+	/**
+	 * Returns an array of objects describing how each given bundle (manifest
+	 * headers and values) can be imported into a workspace project. A
+	 * <code>null</code> entry in the returned array indicates the corresponding
+	 * bundle cannot be imported by this delegate.
+	 * 
+	 * @param manifests
+	 *            array of maps containing manifest headers and values of the
+	 *            associated bundles
+	 * @return array of bundle import descriptions that may contain
+	 *         <code>null</code> entries
+	 */
+	public ScmUrlImportDescription[] validateImport(Map[] manifests);
+
+	/**
+	 * Imports bundles into the workspace creating a project for each import
+	 * description. Reports progress to the given monitor, if not
+	 * <code>null</code>.
+	 * 
+	 * @param descriptions
+	 *            description of bundles to import
+	 * @param monitor
+	 *            progress monitor or <code>null</code>
+	 * @return collection of projects created in the workspace or
+	 *         <code>null</code> if none
+	 * @throws CoreException
+	 *             if unable to import projects
+	 */
+	public IProject[] performImport(ScmUrlImportDescription[] descriptions,
+			IProgressMonitor monitor) throws CoreException;
+}
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/package.html b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/package.html
new file mode 100644
index 0000000..de35fa2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/importing/provisional/package.html
@@ -0,0 +1,23 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="IBM">
+   <title>Package-level Javadoc</title>
+</head>
+<body>
+Application programming interfaces for importing projects into the workspace.
+<h2>
+Package Specification</h2>
+<p>
+Provides support for importing projects into the workspace from a repository. 
+</p>
+<p>
+A bundle manifest may contain information identifying source code for the bundle
+or a project in a repository associated with the bundle. Clients may contribute
+implementations of <code>org.eclipse.team.core.importing.provisional.IBundleImporter</code>
+to the <code>org.eclipse.team.core.bundleImporters</code> extension point to participate
+in the import of bundles into workspace projects based on bundle manifests.
+</p>
+</body>
+</html>
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/package.html b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/package.html
index 617573c..dab7f09 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/package.html
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/package.html
@@ -6,7 +6,7 @@
    <title>Package-level Javadoc</title>
 </head>
 <body>
-Application programming interfaces for working with resource mappings 
+Application programming interfaces for working with resource mappings.
 <h2>
 Package Specification</h2>
 This package specifies the API for working with resources mappings. Models can 
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/package.html b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/package.html
index efa275a..08d3ec3 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/package.html
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/package.html
@@ -6,7 +6,7 @@
    <title>Package-level Javadoc</title>
 </head>
 <body>
-Application programming interfaces for working with resource mappings 
+Application programming interfaces for working with resource mappings.
 <h2>
 Package Specification</h2>
 This package specifies the API for working with resources mappings. Repository 
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java
index 514af44..3c30494 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -220,7 +220,7 @@ abstract public class Subscriber {
 
 	/**
 	 * Removes a listener previously registered with this team subscriber. Has
-	 * no affect if an identical listener is not registered.
+	 * no effect if an identical listener is not registered.
 	 * 
 	 * @param listener a team resource change listener
 	 */
@@ -268,7 +268,7 @@ abstract public class Subscriber {
 	 * Fires a team resource change event to all registered listeners. Only
 	 * listeners registered at the time this method is called are notified.
 	 * Listener notification makes use of an <code>ISafeRunnable</code> to ensure that
-	 * client exceptions do not effect the notification to other clients.
+	 * client exceptions do not affect the notification to other clients.
 	 */
 	protected void fireTeamResourceChange(final ISubscriberChangeEvent[] deltas) {
 		ISubscriberChangeListener[] allListeners;
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfo.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfo.java
index 00f0a3d..a9c4eeb 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfo.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,7 @@
 package org.eclipse.team.core.synchronize;
 
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.variants.IResourceVariant;
@@ -184,7 +183,20 @@ public class SyncInfo implements IAdaptable {
 	public String getLocalContentIdentifier() {
 		return null;
 	}
-		
+
+	/**
+	 * Returns the author of the revision corresponding to the local resource or <code>null</code>
+	 * if it doesn't have one. For example if the local file is shared in CVS this would be the
+	 * revision author.
+	 * 
+	 * @param monitor the progress monitor
+	 * @return the author of the revision associated with the local file or <code>null</code>
+	 * @since 3.6
+	 */
+	public String getLocalAuthor(IProgressMonitor monitor) {
+		return null;
+	}
+
 	/**
 	 * Returns the remote resource handle for the base resource,
 	 * or <code>null</code> if the base resource does not exist.
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantTreeSubscriber.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantTreeSubscriber.java
index d4823e6..e64b9b2 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantTreeSubscriber.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantTreeSubscriber.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java
index 0e83dec..8d1cf44 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,7 +98,7 @@ public class ThreeWaySynchronizer {
 
 	/**
 	 * Removes a listener previously registered with this synchronizer.
-	 * Has no affect if an identical listener is not registered.
+	 * Has no effect if an identical listener is not registered.
 	 * 
 	 * @param listener a synchronizer change listener
 	 */	
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/Messages.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/Messages.java
index 711f7c1..f547d57 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/Messages.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -64,6 +64,7 @@ public class Messages extends NLS {
 	public static String RemoteSyncElement_auto;
 
 	public static String Team_Error_loading_ignore_state_from_disk_1;
+	public static String Team_Conflict_occured_for_ignored_resources_pattern;
 
 	public static String RemoteContentsCache_cacheDisposed;
 	public static String RemoteContentsCache_fileError;
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/StringMatcher.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/StringMatcher.java
index 2ab2536..644ca77 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/StringMatcher.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/StringMatcher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -87,7 +87,7 @@ public class StringMatcher {
 	}
 	
 	/**
-	 * Find the first occurrence of the pattern between <code>start</code)(inclusive) 
+	 * Find the first occurrence of the pattern between <code>start</code>(inclusive) 
 	 * and <code>end</code>(exclusive).  
 	 * @param text the String object to search in 
 	 * @param start the starting index of the search range, inclusive
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/TeamPlugin.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/TeamPlugin.java
index 4c729c2..1823e2f 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/TeamPlugin.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/TeamPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,10 @@ final public class TeamPlugin extends Plugin {
     // The id used to associate a provider with a project
     public final static QualifiedName PROVIDER_PROP_KEY = 
         new QualifiedName("org.eclipse.team.core", "repository");  //$NON-NLS-1$  //$NON-NLS-2$
-    
+
+	// The id for the Bundle Import extension point
+	public static final String EXTENSION_POINT_BUNDLE_IMPORTERS = ID + ".bundleImporters"; //$NON-NLS-1$
+
 	// The one and only plug-in instance
 	private static TeamPlugin plugin;	
 	
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/importing/BundleImporterExtension.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/importing/BundleImporterExtension.java
new file mode 100644
index 0000000..eb27bb5
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/importing/BundleImporterExtension.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.core.importing;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.*;
+import org.eclipse.team.core.ScmUrlImportDescription;
+import org.eclipse.team.core.importing.provisional.IBundleImporter;
+import org.eclipse.team.core.importing.provisional.IBundleImporterDelegate;
+import org.eclipse.team.internal.core.TeamPlugin;
+
+/**
+ * A bundle importer extension.
+ * 
+ * @since 3.7
+ */
+public class BundleImporterExtension implements IBundleImporter {
+
+	private IBundleImporterDelegate delegate;
+	private IConfigurationElement element;
+
+	/**
+	 * Constructs a bundle importer extension on the given element.
+	 * 
+	 * @param element contribution
+	 */
+	public BundleImporterExtension(IConfigurationElement element) {
+		this.element = element;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.project.IBundleImporterDelegate#validateImport(java.util.Map[])
+	 */
+	public ScmUrlImportDescription[] validateImport(Map[] manifests) {
+		try {
+			return getDelegate().validateImport(manifests);
+		} catch (CoreException e) {
+			TeamPlugin.log(e);
+			return null;
+		}
+	}
+
+	/**
+	 * Returns underlying delegate.
+	 * 
+	 * @return delegate
+	 * @exception CoreException if unable to instantiate delegate
+	 */
+	private synchronized IBundleImporterDelegate getDelegate() throws CoreException {
+		if (delegate == null) {
+			delegate = (IBundleImporterDelegate) element.createExecutableExtension("class"); //$NON-NLS-1$
+		}
+		return delegate;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.importing.IBundleImporterDelegate#performImport(org.eclipse.pde.core.importing.BundleImportDescription[], org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public IProject[] performImport(ScmUrlImportDescription[] descriptions, IProgressMonitor monitor) throws CoreException {
+		return getDelegate().performImport(descriptions, monitor);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.project.IBundleImporter#getId()
+	 */
+	public String getId() {
+		return element.getAttribute("id"); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.project.IBundleImporter#getDescription()
+	 */
+	public String getDescription() {
+		return element.getAttribute("description"); //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.core.project.IBundleImporter#getName()
+	 */
+	public String getName() {
+		return element.getAttribute("name"); //$NON-NLS-1$
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/mapping/AbstractResourceMappingScope.java b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/mapping/AbstractResourceMappingScope.java
index ee8d1af..a60b4f8 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/mapping/AbstractResourceMappingScope.java
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/mapping/AbstractResourceMappingScope.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,13 +14,12 @@ import java.util.HashSet;
 import java.util.Set;
 
 import org.eclipse.core.resources.mapping.*;
-import org.eclipse.team.core.mapping.ISynchronizationScope;
 import org.eclipse.team.internal.core.subscribers.AbstractSynchronizationScope;
 
 /**
  * Class that contains common resource mapping scope code.
  */
-public abstract class AbstractResourceMappingScope extends AbstractSynchronizationScope implements ISynchronizationScope {
+public abstract class AbstractResourceMappingScope extends AbstractSynchronizationScope {
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.team.core.mapping.IResourceMappingScope#getMapping(java.lang.Object)
diff --git a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/messages.properties b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/messages.properties
index ae78655..e3bacf8 100644
--- a/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/messages.properties
+++ b/eclipse/plugins/org.eclipse.team.core/src/org/eclipse/team/internal/core/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
 #
 # Contributors:
 #     IBM Corporation - initial API and implementation
+#     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
 ###############################################################################
 ok=OK
 concatStrings={0} {1}
@@ -48,6 +49,7 @@ RemoteSyncElement_manual={manual}
 RemoteSyncElement_auto={auto}
 
 Team_Error_loading_ignore_state_from_disk_1=Error loading ignore state from disk
+Team_Conflict_occured_for_ignored_resources_pattern=A conflict occured for Ignored Resources pattern: {0}, contributed by extensions: {1}. The pattern has been disabled. You can change the pattern enablement on Ignored Resources preference page.
 
 RemoteContentsCache_cacheDisposed=The cache for {0} is disposed.
 RemoteContentsCache_fileError=An I/O error performing an operation on {0}.
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.team.cvs.core/.settings/org.eclipse.jdt.core.prefs
index c132154..4c9689c 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Thu Jun 29 09:04:19 EDT 2006
+#Tue Feb 01 14:42:32 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -7,6 +15,7 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -60,3 +69,5 @@ org.eclipse.jdt.core.compiler.source=1.3
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.team.cvs.core/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..2bc854e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:42:32 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF
index b5a8a15..39fad80 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.team.cvs.core; singleton:=true
-Bundle-Version: 3.3.301.qualifier
+Bundle-Version: 3.3.400.qualifier
 Bundle-Activator: org.eclipse.team.internal.ccvs.core.CVSProviderPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -18,7 +18,7 @@ Export-Package: org.eclipse.team.internal.ccvs.core;x-friends:="org.eclipse.team
  org.eclipse.team.internal.ccvs.core.util;x-friends:="org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui"
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.3.0,4.0.0)",
- org.eclipse.team.core;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.team.core;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)",
  com.jcraft.jsch;bundle-version="[0.1.27,2.0.0)",
  org.eclipse.jsch.core;bundle-version="[1.0.0,2.0.0)",
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/plugin.properties b/eclipse/plugins/org.eclipse.team.cvs.core/plugin.properties
index bed5d09..4742728 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/plugin.properties
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2006 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 providerName=Eclipse.org
 pluginName=CVS Team Provider Core
 cvsNature=CVS Team Nature
+cvsBundleImporter=CVS Bundle Importer
 
 # The following 3 strings do not require translation
 Authenticator=Authenticator
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/plugin.xml b/eclipse/plugins/org.eclipse.team.cvs.core/plugin.xml
index f563ca4..d26489f 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/plugin.xml
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2001, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
 
     
@@ -239,5 +250,12 @@
          <adapter type="org.eclipse.core.resources.mapping.ResourceMapping"/>
       </factory>
    </extension>
-
+   <extension
+         point="org.eclipse.team.core.bundleImporters">
+      <importer
+            class="org.eclipse.team.internal.ccvs.core.CvsBundleImporterDelegate"
+            name="%cvsBundleImporter"
+            id="org.eclipse.team.core.cvs.importer">
+      </importer>
+   </extension>
 </plugin>
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java
index 554e8a7..0d2c5c5 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -229,7 +229,7 @@ public class CVSCompareSubscriber extends CVSSyncTreeSubscriber implements ISubs
 	
 	/**
 	 * Prime the remote tree with the sync info from the local workspace.
-	 * This is done to ensure that we don't get a huge nimber of outgoing
+	 * This is done to ensure that we don't get a huge number of outgoing
 	 * changes before the first refresh.
 	 *
 	 */
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMergeSyncInfo.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMergeSyncInfo.java
index 9b16287..1b1d424 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMergeSyncInfo.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMergeSyncInfo.java
@@ -41,12 +41,12 @@ public class CVSMergeSyncInfo extends CVSSyncInfo {
 		if ((kind & DIRECTION_MASK) == INCOMING && ((CVSMergeSubscriber)getSubscriber()).isMerged(getLocal())) {
 			return IN_SYNC;
 		}
-		
+
 		// Report outgoing resources as in-sync when models are not shown
 		if((kind & DIRECTION_MASK) == OUTGOING && !((CVSMergeSubscriber)getSubscriber()).isModelSync()) {
 			return IN_SYNC;
 		}
-		
+
 		return kind;
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMessages.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMessages.java
index eaf0eec..0c1f04b 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMessages.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  * IBM - Initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core;
 
@@ -34,6 +35,7 @@ public class CVSMessages extends NLS {
 	public static String CVSTag_emptyName;
 	public static String CVSTag_beginName;
 	public static String CVSTag_badCharName;
+	public static String CVSTag_unknownBranch;
 
 	public static String CVSWorkspaceRoot_notCVSFolder;
 
@@ -79,7 +81,6 @@ public class CVSMessages extends NLS {
 	public static String CVSTeamProvider_overlappingFileDeletion;
 	public static String CVSTeamProvider_errorGettingWatchEdit;
 	public static String CVSTeamProvider_errorSettingWatchEdit;
-	public static String CVSTeamProvider_errorAddingFileToDiff;
 	public static String CVSTeamProvider_updatingFolder;
     public static String CVSCoreFileModificationValidator_editJob;
 
@@ -257,7 +258,6 @@ public class CVSMessages extends NLS {
 	public static String CVSFileSystem_FetchTree;
 	public static String CVSURI_InvalidURI;
 	public static String ThePatchDoesNotContainChangesFor_0;
-	public static String ThePatchDoesNotContainAllTheChanges;
 
 	static {
 		// load message values from bundle file
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProjectSetCapability.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProjectSetCapability.java
index 6602694..c5e3d53 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProjectSetCapability.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProjectSetCapability.java
@@ -629,6 +629,13 @@ public class CVSProjectSetCapability extends ProjectSetCapability {
 			CVSURI cvsURI = CVSURI.fromUri(uri);
 			ICVSRepositoryLocation location = cvsURI.getRepository();
 			ICVSFolder folder = cvsURI.toFolder();
+			if (projectName == null) {
+				projectName = cvsURI.getProjectName();
+				if (projectName == null)
+					projectName = cvsURI.getLastSegment();
+				if (projectName == null)
+					return null;
+			}
 			IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
 			return asReference((CVSRepositoryLocation)location, folder, project);
 		} catch (TeamException e) {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSSyncInfo.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSSyncInfo.java
index 2066da5..81b597a 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSSyncInfo.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSSyncInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.team.internal.ccvs.core.resources.*;
 import org.eclipse.team.internal.ccvs.core.syncinfo.*;
 import org.eclipse.team.internal.ccvs.core.util.SyncFileChangeListener;
 
+
 /**
  * CVSSyncInfo
  */
@@ -343,25 +344,72 @@ public class CVSSyncInfo extends SyncInfo {
 		}
 		return result.toString();
 	}
-	
+
+	public String getLocalContentIdentifier() {
+		ResourceSyncInfo info= getSyncInfoForLocal(getCVSFile());
+		return info != null ? info.getRevision() : null;
+	}
+
 	/* (non-Javadoc)
-	 * @see org.eclipse.team.core.subscribers.SyncInfo#getContentIdentifier()
+	 * @see org.eclipse.team.core.synchronize.SyncInfo#getLocalAuthor(org.eclipse.core.runtime.IProgressMonitor)
+	 * @since 3.6
 	 */
-	public String getLocalContentIdentifier() {
-		try {
-			IResource local = getLocal();
-			if (local != null && local.getType() == IResource.FILE) {
-				// it's a file, return the revision number if we can find one
-				ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor((IFile) local);
-				ResourceSyncInfo info = cvsFile.getSyncInfo();
-				if (info != null) {
-					return info.getRevision();
+	public String getLocalAuthor(IProgressMonitor monitor) {
+		final ICVSFile cvsFile= getCVSFile();
+		if (cvsFile == null)
+			return null;
+
+		final ResourceSyncInfo info= getSyncInfoForLocal(cvsFile);
+		if (info == null)
+			return null;
+
+		final String localRevision= info.getRevision();
+		if (localRevision == null)
+			return null;
+
+		final ILogEntry entries[]= getLogEntries(cvsFile, monitor);
+		if (entries == null || entries.length == 0)
+			return null;
+		
+		for (int i = 0; i < entries.length; i++) {
+			try {
+				if (localRevision.equals(entries[i].getRemoteFile().getRevision())) {
+					return entries[i].getAuthor();
 				}
+			} catch (TeamException e) {
+				CVSProviderPlugin.log(e);
 			}
+		}
+		return null;
+	}
+
+	private static ResourceSyncInfo getSyncInfoForLocal(ICVSFile cvsFile) {
+		if (cvsFile == null)
+			return null;
+
+		try {
+			return cvsFile.getSyncInfo();
 		} catch (CVSException e) {
 			CVSProviderPlugin.log(e);
 			return null;
 		}
+	}
+
+	private static ILogEntry[] getLogEntries(ICVSFile cvsFile, IProgressMonitor monitor) {
+		try {
+			return cvsFile.getLogEntries(monitor);
+		} catch (TeamException e) {
+			CVSProviderPlugin.log(e);
+			return null;
+		}
+	}
+
+	private ICVSFile getCVSFile() {
+		IResource local = getLocal();
+		if (local != null && local.getType() == IResource.FILE) {
+			return CVSWorkspaceRoot.getCVSFileFor((IFile)local);
+		}
 		return null;
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTag.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTag.java
index 94588c0..541735d 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTag.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTag.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core;
 
@@ -31,9 +32,13 @@ public class CVSTag implements ITag {
 	
 	public static final CVSTag DEFAULT = new CVSTag();
 	public static final CVSTag BASE = new CVSTag("BASE", VERSION); //$NON-NLS-1$
+	public static final String VENDOR_REVISION = "1.1.1";  //$NON-NLS-1$
+	public static final String HEAD_REVISION = "1";  //$NON-NLS-1$
+	public static final String UNKNOWN_BRANCH = CVSMessages.CVSTag_unknownBranch;
+	public static final String HEAD_BRANCH = "HEAD";  //$NON-NLS-1$
 	
 	protected String name;
-	protected String branchNumber;
+	protected String branchRevision;
 	protected int type;
 
 	private static final String DATE_TAG_NAME_FORMAT = "dd MMM yyyy HH:mm:ss Z";//$NON-NLS-1$
@@ -54,17 +59,18 @@ public class CVSTag implements ITag {
 	}
 	
 	public CVSTag() {
-		this("HEAD", HEAD); //$NON-NLS-1$
+		this("HEAD", HEAD_REVISION, HEAD); //$NON-NLS-1$
 	}
 
 	public CVSTag(String name, int type) {		
 		this.name = name;
 		this.type = type;
+		this.branchRevision = null;
 	}
 
-	public CVSTag(String name, String branchNumber, int type) {		
+	public CVSTag(String name, String branchRevision, int type) {
 		this.name = name;
-		this.branchNumber = branchNumber;
+		this.branchRevision = branchRevision;
 		this.type = type;
 	}
 
@@ -86,9 +92,16 @@ public class CVSTag implements ITag {
 	public String getName() {
 		return name;
 	}
-
-	public String getBranchNumber() {
-		return branchNumber;
+	
+	/**
+	 * Returns branch revision - unique number given for each branch. Each
+	 * number may have several names (aliases) and define next sequence of
+	 * commits For example HEAD branch revision is 1, branches created from HEAD
+	 * will have 1.1.0.2, 1.1.0.4, etc... Branches created from another branch
+	 * 1.1.1.2.0.2, 1.1.1.2.0.4, etc...
+	 */
+	public String getBranchRevision() {
+		return branchRevision;
 	}
 
 	public int getType() {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CvsBundleImporterDelegate.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CvsBundleImporterDelegate.java
new file mode 100644
index 0000000..e4301a8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CvsBundleImporterDelegate.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.core;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.team.core.RepositoryProviderType;
+import org.eclipse.team.core.importing.provisional.BundleImporterDelegate;
+
+/**
+ * Handles SCM CVS headers of the following form. Tag and project name can be specified
+ * as extra attributes. When a tag is unspecified, the HEAD tag is used. When a project
+ * name is unspecified, it is generated by the module name.
+ * <pre>
+ * scm:cvs<delimiter><method><delimiter>path_to_repository<delimiter>module_name[;tag=version][;project=name]
+ * scm:psf<delimiter><method><delimiter>path_to_repository<delimiter>module_name[;tag=version][;project=name]
+ * </pre>
+ */
+public class CvsBundleImporterDelegate extends BundleImporterDelegate {
+
+	private static Set SUPPORTED_VALUES;
+
+	private static final String SCM = "scm:"; //$NON-NLS-1$
+	private static final String CVS = "cvs"; //$NON-NLS-1$
+//	private static final String PSF = "psf"; //$NON-NLS-1$
+	private static final String COLON = ":"; //$NON-NLS-1$
+	private static final String PIPE = "|"; //$NON-NLS-1$
+
+	private RepositoryProviderType providerType;
+
+	static {
+		SUPPORTED_VALUES = new HashSet();
+		SUPPORTED_VALUES.add(SCM + CVS + COLON);
+		SUPPORTED_VALUES.add(SCM + CVS + PIPE);
+//		SUPPORTED_VALUES.add(SCM + PSF + COLON);
+//		SUPPORTED_VALUES.add(SCM + PSF + PIPE);
+	}
+	
+	protected Set getSupportedValues() {
+		return SUPPORTED_VALUES;
+	}
+	
+	protected RepositoryProviderType getProviderType() {
+		if (providerType == null)
+			providerType = RepositoryProviderType.getProviderType(CVSProviderPlugin.getTypeId());
+		return providerType;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ILogEntry.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ILogEntry.java
index 3312c59..a85e0a6 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ILogEntry.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ILogEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core;
 
@@ -49,6 +50,11 @@ public interface ILogEntry extends IAdaptable {
 	public String getState();
 	
 	/**
+	 * Get the branches revision belong to.
+	 */
+	public CVSTag[] getBranches();
+
+	/**
 	 * Get the tags associated with the revision
 	 */
 	public CVSTag[] getTags();
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CommandOutputListener.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CommandOutputListener.java
index 8eed851..297574e 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CommandOutputListener.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CommandOutputListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,9 +12,7 @@ package org.eclipse.team.internal.ccvs.core.client;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.team.internal.ccvs.core.CVSStatus;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
+import org.eclipse.team.internal.ccvs.core.*;
 import org.eclipse.team.internal.ccvs.core.client.listeners.ICommandOutputListener;
 import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
 
@@ -48,7 +46,7 @@ public class CommandOutputListener implements ICommandOutputListener {
 	 * 
 	 * @param line the error line received from the server
 	 * @param location the repository location
-	 * @return String the potocol error or null
+	 * @return String the protocol error or null
 	 */
 	protected String getProtocolError(String line, ICVSRepositoryLocation location) {
 		if (line.startsWith("Protocol error:")) { //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java
index 99ff4de..6dd462e 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,18 +10,11 @@
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core.client;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.team.internal.ccvs.core.*;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSStatus;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource;
-import org.eclipse.team.internal.ccvs.core.ICVSResource;
 import org.eclipse.team.internal.ccvs.core.client.listeners.ICommandOutputListener;
 import org.eclipse.team.internal.ccvs.core.client.listeners.TagListener;
 
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Request.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Request.java
index 9278f4b..3217456 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Request.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Request.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,9 +10,7 @@
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core.client;
 
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
 
 import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.util.NLS;
@@ -64,7 +62,7 @@ public abstract class Request {
 	 * This method is invoked by Session to get a mutable copy of the
 	 * global list of acceptable response handlers.
 	 * 
-	 * @return a map of reponse handlers
+	 * @return a map of response handlers
 	 */
 	protected static Map getReponseHandlerMap() {
 		synchronized(responseHandlers) {
@@ -121,7 +119,7 @@ public abstract class Request {
 		
 		// If the session is connected to a CVSNT server (1.11.1.1), we'll need to do some special handling for
 		// some errors. Unfortunately, CVSNT 1.11.1.1 will drop the connection after so some functionality is
-		// still effected
+		// still affected
 		boolean isCVSNT = session.isCVSNT();
 
 		session.clearErrors();
@@ -175,7 +173,7 @@ public abstract class Request {
 				if (serious) {
 					throw new CVSServerException(status);
 				} else {
-					// look for particularly bad errors in the accumulated statii
+					// look for particularly bad errors in the accumulated statuses
 				    IStatus[] errors = session.getErrors();
 				    for (int i = 0; i < errors.length; i++) {
                         IStatus s = errors[i];
@@ -230,7 +228,7 @@ public abstract class Request {
 		} else {
 			return new MultiStatus(CVSProviderPlugin.ID, IStatus.INFO,
 				session.getErrors(),
-				NLS.bind(CVSMessages.Command_warnings, new String[] { getDisplayText() }), null);  //  
+				NLS.bind(CVSMessages.Command_warnings, new String[] { getDisplayText() }), null);
 		}
 	}
 	
@@ -239,7 +237,7 @@ public abstract class Request {
 	 * reports as error.
 	 */
 	protected String getServerErrorMessage() {
-		return NLS.bind(CVSMessages.Command_serverError, new String[] { getDisplayText() }); //  
+		return NLS.bind(CVSMessages.Command_serverError, new String[] { getDisplayText() });
 	}
     protected String getDisplayText() {
         return getRequestId();
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/DiffListener.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/DiffListener.java
index 0a319fd..2a37033 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/DiffListener.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/DiffListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -74,10 +74,10 @@ public class DiffListener extends CommandOutputListener {
 			ICVSRepositoryLocation location, 
 			ICVSFolder commandRoot,
 			IProgressMonitor monitor) {
-		// ignore server messages for now - this is used only with the diff
-		// request and the errors can be safely ignored.
+		// return all the server errors as CVSStatus.ERROR_LINE or
+		// CVSStatus.PROTOCOL_ERROR
 		if (getServerMessage(line, location) != null) {
-			return OK;
+			return super.errorLine(line, location, commandRoot, monitor);
 		}
 		
 		//Check to see if this is a no such directory message
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/IMessagePatterns.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/IMessagePatterns.java
index 9d3a690..cc229ad 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/IMessagePatterns.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/IMessagePatterns.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@ public interface IMessagePatterns {
 	
 	// TODO: These patterns could be more specific but this would require non-capturing
 	// groups which currently throw off variable matching
-	public static final String TAG_PATTERN = "\\w*"; //$NON-NLS-1$
+	public static final String TAG_PATTERN = "[\\w\\-]*"; //$NON-NLS-1$
 	public static final String REVISION_PATTERN = ".*"; //$NON-NLS-1$
 	public static final String FILE_PATH_PATTERN = ".*"; //$NON-NLS-1$
 	
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogEntry.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogEntry.java
index af2937a..1e41cc4 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogEntry.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogEntry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core.client.listeners;
 
@@ -25,6 +26,7 @@ public class LogEntry extends PlatformObject implements ILogEntry {
 	private String comment;
 	private String state;
 	private CVSTag[] tags;
+	private CVSTag[] branches;
     private String[] revisions;
     
 	/*
@@ -47,17 +49,18 @@ public class LogEntry extends PlatformObject implements ILogEntry {
 		return buffer.toString();
 	}
 	
-	public LogEntry(RemoteFile file, String revision, String author, Date date, String comment, String state, CVSTag[] tags) {
+	public LogEntry(RemoteFile file, String revision, String author, Date date, String comment, String state, CVSTag[] tags, CVSTag[] branches) {
 		this.file = file.toRevision(revision);
 		this.author = author;
 		this.date = date;
 		this.comment = comment;
 		this.state = state;
 		this.tags = tags;
+		this.branches = branches;
 	}
 	
-	public LogEntry(RemoteFile file, String revision, String author, Date date, String comment, String state, CVSTag[] tags, String[] revisions) {
-		this(file,revision,author,date,comment,state,tags);
+	public LogEntry(RemoteFile file, String revision, String author, Date date, String comment, String state, CVSTag[] tags, CVSTag[] branches, String[] revisions) {
+		this(file,revision,author,date,comment,state,tags,branches);
 		this.revisions=revisions;
 	}
 
@@ -97,6 +100,15 @@ public class LogEntry extends PlatformObject implements ILogEntry {
 	}
 
 	/**
+	 * @see ILogEntry#getBranches()
+	 */
+	public CVSTag[] getBranches() {
+		CVSTag[] result = new CVSTag[branches.length];
+		System.arraycopy(branches, 0, result, 0, branches.length);
+		return result;
+	}
+
+	/**
 	 * @see ILogEntry#getTags()
 	 */
 	public CVSTag[] getTags() {
@@ -120,11 +132,14 @@ public class LogEntry extends PlatformObject implements ILogEntry {
 	}
 
 	/**
-	 * In the case where files on a branch haven't been modified since their initial branch point, 
-	 * they keep the revision number of their predecessor. In this case no revision info will be displayed
-	 * while doing a log, so all branch revision numbers are recorded. This allows the user to pick which revision
-	 * they are interested in.
-	 * @return an array of branch revision strings or an empty array if no branch revisions were recorded
+	 * In the case where files on a branch haven't been modified since their
+	 * initial branch point, they keep the revision number of their predecessor.
+	 * In this case no revision info will be displayed while doing a log, so all
+	 * branch revision numbers are recorded. This allows the user to pick which
+	 * revision they are interested in.
+	 * 
+	 * @return an array of branch revision strings or an empty array if no
+	 *         branch revisions were recorded
 	 */
 	public String[] getBranchRevisions(){
 		
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogListener.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogListener.java
index 0e84908..d36f68c 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogListener.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Brock Janiczak <brockj at tpg.com.au> - Bug 179977 CVS log command doesn't scale well with lots of tags and versions
  *     Brock Janiczak <brockj at tpg.com.au> - Bug 194396 Reduce retained memory usage of LogEntry objects
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core.client.listeners;
 
@@ -21,6 +22,7 @@ import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.internal.ccvs.core.*;
 import org.eclipse.team.internal.ccvs.core.client.CommandOutputListener;
 import org.eclipse.team.internal.ccvs.core.resources.RemoteFile;
+import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
 import org.eclipse.team.internal.ccvs.core.util.Util;
 
 /**
@@ -127,7 +129,9 @@ public class LogListener extends CommandOutputListener {
     			} else  if (line.startsWith("symbolic names:")) { //$NON-NLS-1$
     				state = SYMBOLIC_NAMES;
     			} else if (line.startsWith("revision ")) { //$NON-NLS-1$
-    				revision = internAndCopyString(line.substring(9));
+    				// if the revision has been locked, remove the "locked by" suffix 
+    				revision = line.substring(9).replaceFirst(ResourceSyncInfo.LOCKEDBY_REGEX, ""); //$NON-NLS-1$
+    				revision = internAndCopyString(revision);
     				state = REVISION;
     			} else if (line.startsWith("total revisions:")){ //$NON-NLS-1$
     				//if there are no current revision selected and this is a branch then we are in the 
@@ -189,18 +193,26 @@ public class LogListener extends CommandOutputListener {
     	if (state == DONE) {
     		// we are only interested in tag names for this revision, remove all others.
     		List thisRevisionTags = versions.isEmpty() ? Collections.EMPTY_LIST : new ArrayList(3);
+    		List thisRevisionBranches = new ArrayList(1);
     		//a parallel lists for revision tags (used only for branches with no commits on them)
     		List revisionVersions = versions.isEmpty() ? Collections.EMPTY_LIST : new ArrayList(3);
+    		String branchRevision = this.getBranchRevision(revision);
     		for (Iterator i = versions.iterator(); i.hasNext();) {
     			VersionInfo version = (VersionInfo) i.next();
     			String tagName = version.getTagName();
     			String tagRevision = version.getTagRevision();
+    			String tagBranchRevision = version.getBranchRevision();
+				int type = version.isBranch() ? CVSTag.BRANCH : CVSTag.VERSION;
+				if ( branchRevision.equals(tagBranchRevision) || 
+						(version.isBranch() && revision.equals(tagRevision))) {
+    				CVSTag cvsTag = new CVSTag(tagName, tagBranchRevision, type);
+    				thisRevisionBranches.add(cvsTag);
+    			}
     			
-    			if (tagRevision.equals(revision) ||
+				if (tagRevision.equals(revision) ||
     				revision.equals(BRANCH_REVISION)) {
-    				String branchNumber = version.getBranchNumber();
-    				int type = version.isBranch() ? CVSTag.BRANCH : CVSTag.VERSION;
-    				thisRevisionTags.add(new CVSTag(tagName, branchNumber, type));
+    				CVSTag cvsTag = new CVSTag(tagName, tagBranchRevision, type);
+    				thisRevisionTags.add(cvsTag);
     				if (revision.equals(BRANCH_REVISION)){
     					//also record the tag revision
     					revisionVersions.add(tagRevision);
@@ -208,9 +220,21 @@ public class LogListener extends CommandOutputListener {
     			}
     		}
     		
+    		if (branchRevision.equals(CVSTag.HEAD_REVISION)) {
+    			CVSTag tag = new CVSTag(CVSTag.HEAD_BRANCH, CVSTag.HEAD_REVISION, CVSTag.HEAD);
+				thisRevisionBranches.add(tag);
+    		} else {
+        		if ( thisRevisionBranches.size() == 0) {
+        			CVSTag cvsTag = new CVSTag(CVSTag.UNKNOWN_BRANCH, branchRevision, CVSTag.BRANCH);
+        			thisRevisionBranches.add(cvsTag);
+    			}			
+    		}
     		if (currentFile != null) {
     			LogEntry entry = new LogEntry(currentFile, revision, author, creationDate,
-    				internString(comment.toString()), fileState, !thisRevisionTags.isEmpty() ? (CVSTag[]) thisRevisionTags.toArray(new CVSTag[thisRevisionTags.size()]) : NO_TAGS, !revisionVersions.isEmpty() ? (String[]) revisionVersions.toArray(new String[revisionVersions.size()]) : NO_VERSIONS);
+    				internString(comment.toString()), fileState, 
+    				!thisRevisionTags.isEmpty() ? (CVSTag[]) thisRevisionTags.toArray(new CVSTag[thisRevisionTags.size()]) :NO_TAGS, 
+    				!thisRevisionBranches.isEmpty() ? (CVSTag[]) thisRevisionBranches.toArray(new CVSTag[thisRevisionBranches.size()]) :NO_TAGS, 
+    					!revisionVersions.isEmpty() ? (String[]) revisionVersions.toArray(new String[revisionVersions.size()]) : NO_VERSIONS);
     			addEntry(entry);
     		}
     		state = BEGIN;
@@ -218,6 +242,36 @@ public class LogListener extends CommandOutputListener {
     	return OK;
     }
 
+    /**
+     * Convert revision number to branch number.
+     * 
+     * <table border="1">
+     * <tr><th>revision</th><th>branch</th><th>comment</th></tr>
+     * <tr><td>1.1.2.1</td><td>1.1.0.2</td><td>regular branch</td></tr>
+     * <tr><td>1.1.4.1</td><td>1.1.0.4</td><td>regular branch</td></tr>
+     * <tr><td>1.1.1.2</td><td>1.1.1</td><td>vendor branch</td></tr>
+     * <tr><td>1.1.2.1.2.3</td><td>1.1.2.1.0.2</td><td>branch created from another branch</td></tr>
+     * </table>
+     * 
+     * @param revision revision number
+     * @return branch number
+     * 
+     */
+	private String getBranchRevision(String revision) {
+		if (revision.length() == 0 || revision.lastIndexOf(".") == -1) //$NON-NLS-1$
+			throw new IllegalArgumentException(
+					"Revision malformed: " + revision); //$NON-NLS-1$
+		String branchNumber = revision.substring(0, revision.lastIndexOf(".")); //$NON-NLS-1$
+		if (branchNumber.lastIndexOf(".") == -1 || branchNumber.equals(CVSTag.VENDOR_REVISION)) { //$NON-NLS-1$
+			return branchNumber;
+		}
+		String branchPrefix = branchNumber.substring(0,
+				branchNumber.lastIndexOf(".")); //$NON-NLS-1$
+		branchPrefix += ".0"; //$NON-NLS-1$
+		branchPrefix += branchNumber.substring(branchNumber.lastIndexOf(".")); //$NON-NLS-1$
+		return branchPrefix;
+	}
+    
     protected void beginFile(ICVSRepositoryLocation location, String fileName) {
     	currentFile = RemoteFile.create(fileName, location);
     	versions.clear();
@@ -270,7 +324,7 @@ public class LogListener extends CommandOutputListener {
     private static class VersionInfo {
 		private final boolean isBranch;
 		private String tagRevision;
-		private String branchNumber;
+		private String branchRevision;
 		private final String tagName;
 		
     	public VersionInfo(String version, String tagName) {
@@ -286,8 +340,8 @@ public class LogListener extends CommandOutputListener {
 					if (version.charAt(lastDot - 1) == '0' && version.charAt(lastDot - 2) == '.') {
 						lastDot = lastDot - 2;
 					}
+					this.branchRevision = version;
 					tagRevision = version.substring(0, lastDot);
-					branchNumber = version.substring(lastDot+1);
 				}
 			}
     	}
@@ -325,8 +379,8 @@ public class LogListener extends CommandOutputListener {
         	return false;
         }
 
-		public String getBranchNumber() {
-			return branchNumber;
+		public String getBranchRevision() {
+			return branchRevision;
 		}
     }
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/StatusListener.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/StatusListener.java
index e172f03..ce0b36c 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/StatusListener.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/StatusListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,7 @@ public class StatusListener extends CommandOutputListener {
 		}
 		if (isFolder) {
 			// This used to do something but it was obviously wrong and there was no indication
-			// why it was needed. Therefore, I have removed the code to see if anything is effected
+			// why it was needed. Therefore, I have removed the code to see if anything is affected
 			isFolder = false;
 		}
 		return super.errorLine(line, location, commandRoot, monitor);
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileHistoryProvider.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileHistoryProvider.java
index c5f3589..bccfd52 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileHistoryProvider.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileHistoryProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 
 package org.eclipse.team.internal.ccvs.core.filehistory;
@@ -70,7 +71,7 @@ public class CVSFileHistoryProvider extends FileHistoryProvider {
 			if (remoteResource != null && 
 				remoteResource instanceof RemoteFile){
 				ResourceSyncInfo syncInfo = remoteResource.getSyncInfo();
-				LogEntry cvsEntry = new LogEntry((RemoteFile) remoteResource, syncInfo.getRevision(), "", null,"","", new CVSTag[0]);  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				LogEntry cvsEntry = new LogEntry((RemoteFile) remoteResource, syncInfo.getRevision(), "", null,"","", new CVSTag[0], new CVSTag[0]);  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				return new CVSFileRevision(cvsEntry);
 			}
 		} catch (CVSException e) {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileRevision.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileRevision.java
index d01eb5d..9b6ff9c 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileRevision.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filehistory/CVSFileRevision.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 
 package org.eclipse.team.internal.ccvs.core.filehistory;
@@ -82,6 +83,10 @@ public class CVSFileRevision extends FileRevision implements IAdaptable {
 		return ((RemoteFile)file).toCVSURI().toURI();
 	}
 
+	public ITag[] getBranches() {
+		return entry.getBranches();
+	}
+
 	public ITag[] getTags() {
 		return entry.getTags();
 	}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filesystem/CVSURI.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filesystem/CVSURI.java
index 5a54ed5..8391ec3 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filesystem/CVSURI.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/filesystem/CVSURI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.StringTokenizer;
 
 import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.team.core.ProjectSetCapability;
 import org.eclipse.team.internal.ccvs.core.*;
 import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
 import org.eclipse.team.internal.ccvs.core.resources.RemoteFile;
@@ -24,24 +25,36 @@ import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
 
 public class CVSURI {
 
-	private static final String SCHEME = "cvs"; //$NON-NLS-1$
+	private static final String SCHEME_CVS = "cvs"; //$NON-NLS-1$
 	private final ICVSRepositoryLocation repository;
 	private final IPath path;
 	private final CVSTag tag;
 	private final String revision;
+	private final String projectName;
 
 	/**
-	 * Convert the given URI to a CVSURI. There are two supported formats: the
-	 * original opaque format and a newer hierarchical format.
+	 * Convert the given URI to a CVSURI. There are three supported formats: the
+	 * original opaque format, a newer hierarchical format and a CVS SCM URL
+	 * format.
+	 * 
+	 * In the last format, as delimiter you can use either colon ':' or, if you
+	 * use a colon for one of the variables (e.g. a windows path), a pipe '|'.
+	 * For more information visit http://maven.apache.org/scm/cvs.html. Please 
+	 * note, that URIs with the pipe separator are currently not supported.
+	 * 
 	 * <ul>
 	 * <li>cvs://[:]method:user[:password]@host:[port]/root/path#project/path[,tagName]</li>
 	 * <li>cvs://_method_user[_password]~host_[port]!root!path/project/path[?<version,branch,date,revision>=tagName]</li>
+	 * <li>scm:cvs<delimiter>method<delimiter>[user[<delimiter>password]@]host[<delimiter>port]<delimiter>/root/path<delimiter>project/path[;project="projectName"][;tag=tagName]</li>
 	 * </ul>
 	 * @param uri the URI
 	 * @return a CVS URI
 	 */
 	public static CVSURI fromUri(URI uri) {
 		try {
+			if (ProjectSetCapability.SCHEME_SCM.equals(uri.getScheme())) {
+				uri = convert(uri);
+			}
 			ICVSRepositoryLocation repository = getRepository(uri);
 			if (repository != null) {
 				IPath path = new Path(null, uri.getPath());
@@ -52,7 +65,8 @@ public class CVSURI {
 				repository = getOldRepository(uri);
 				IPath path = getOldPath(uri);
 				CVSTag tag = getOldTag(uri);
-				return new CVSURI(repository, path, tag);
+				String projectName = getProjectName(uri);
+				return new CVSURI(repository, path, tag, null, projectName);
 			}
 		} catch (CVSException e) {
 			CVSProviderPlugin.log(e);
@@ -60,11 +74,43 @@ public class CVSURI {
 		}
 	}
 
+	private static URI convert(URI uri) {
+		StringBuffer sb = new StringBuffer();
+		String ssp = uri.getSchemeSpecificPart();
+		int i = ssp.lastIndexOf(':');
+		sb.append(ssp.substring(0, i)).append('#');
+		int j = ssp.indexOf(';');
+		if (j != -1) {
+			sb.append(ssp.substring(i + 1, j));
+			String[] params = ssp.substring(j).split(";"); //$NON-NLS-1$
+			String projectName = ""; //$NON-NLS-1$
+			for (int k = 0; k < params.length; k++) {
+				// PDE way of providing tags
+				if (params[k].startsWith("tag=")) { //$NON-NLS-1$
+					sb.append(",version="); //$NON-NLS-1$
+					sb.append(params[k].substring(params[k].indexOf('=') + 1));
+				} else if (params[k].startsWith("version=")) { //$NON-NLS-1$
+					sb.append(',').append(params[k]);
+				} else if (params[k].startsWith("project=")) { //$NON-NLS-1$
+					projectName = params[k].substring(params[k].indexOf('=') + 1);
+				}
+			}
+			sb.append(',').append(projectName); // can be ""
+		} else {
+			sb.append(ssp.substring(i + 1));
+		}
+		return URI.create(sb.toString());
+	}
+
 	private static CVSTag getTag(URI uri) {
 		String query = uri.getQuery();
 		if (query == null)
 			return null;
-		StringTokenizer tokens = new StringTokenizer(query, ","); //$NON-NLS-1$
+		return getTag(query);
+	}
+
+	private static CVSTag getTag(String s) {
+		StringTokenizer tokens = new StringTokenizer(s, ","); //$NON-NLS-1$
 		while (tokens.hasMoreTokens()) {
 			String token = tokens.nextToken();
 			int index = token.indexOf('=');
@@ -116,6 +162,8 @@ public class CVSURI {
 
 	private static ICVSRepositoryLocation getRepository(URI uri) throws CVSException {
 		String authority = uri.getAuthority();
+		if (authority == null)
+			return null;
 		if (authority.indexOf('/') != -1)
 			return null;
 		if (authority.indexOf('!') == -1)
@@ -123,6 +171,19 @@ public class CVSURI {
 		authority = decodeAuthority(authority);
 		return CVSRepositoryLocation.fromString(authority);
 	}
+	
+	private static String getProjectName(URI uri) {
+		String f = uri.getFragment();
+		if (f != null) {
+			int i = f.lastIndexOf(',');
+			if (i != -1) {
+				String s = f.substring(i + 1);
+				if (!s.equals("")) //$NON-NLS-1$
+					return s;
+			}
+		}
+		return null;
+	}
 
 	private static CVSTag getOldTag(URI uri) {
 		String f = uri.getFragment();
@@ -130,6 +191,9 @@ public class CVSURI {
 		if (i == -1) {
 			return CVSTag.DEFAULT;
 		}
+		CVSTag tag = getTag(f.substring(i + 1));
+		if (tag != null)
+			return tag;
 		
 		return CVSTag.DEFAULT;//just use HEAD for now (name, CVSTag.BRANCH);
 	}
@@ -152,10 +216,14 @@ public class CVSURI {
 	}
 	
 	public CVSURI(ICVSRepositoryLocation repository, IPath path, CVSTag tag) {
-		this(repository, path, tag, null);
+		this(repository, path, tag, null, null);
 	}
 	
 	public CVSURI(ICVSRepositoryLocation repository, IPath path, CVSTag tag, String revision) {
+		this(repository, path, tag, revision, null);
+	}
+
+	public CVSURI(ICVSRepositoryLocation repository, IPath path, CVSTag tag, String revision, String projectName) {
 		this.repository = repository;
 		this.path = path;
 		this.tag = tag;
@@ -163,6 +231,7 @@ public class CVSURI {
 			this.revision = revision;
 		else
 			this.revision = null;
+		this.projectName = projectName;
 	}
 
 	public CVSURI append(String name) {
@@ -197,7 +266,15 @@ public class CVSURI {
 					query = query + "," + string; //$NON-NLS-1$
 				}
 			}
-			return new URI(SCHEME, authority, pathString, query, null);
+			if (projectName != null) {
+				String string = "project=" + projectName; //$NON-NLS-1$
+				if (query == null) {
+					query = string;
+				} else {
+					query = query + "," + string; //$NON-NLS-1$
+				}
+			}
+			return new URI(SCHEME_CVS, authority, pathString, query, null);
 		} catch (URISyntaxException e) {
 			CVSProviderPlugin.log(IStatus.ERROR, NLS.bind("An error occurred while creating a URI for {0} {1}", repository, path), e); //$NON-NLS-1$
 			throw new IllegalStateException(e.getMessage());
@@ -305,4 +382,8 @@ public class CVSURI {
 	public String getRevision() {
 		return revision;
 	}
+
+	public String getProjectName() {
+		return projectName;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties
index 9316603..056cdab 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
 #
 # Contributors:
 #     IBM Corporation - initial API and implementation
+#     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
 ###############################################################################
 
 ok=ok
@@ -29,6 +30,7 @@ CVSTag_emptyName=Name must not be empty
 CVSTag_beginName=Name must start with a letter
 CVSFileHistory_0=Refreshing history for {0}
 CVSTag_badCharName=Name must not contain spaces or the characters `$,.:;@|'
+CVSTag_unknownBranch=<n/a>
 
 CVSWorkspaceRoot_notCVSFolder=The CVS synchronization information for {0} has become corrupt or does not exist
 
@@ -74,7 +76,6 @@ CVSTeamProvider_overlappingRemoteFolder=Cannot create linked resource ''{0}'' be
 CVSTeamProvider_overlappingFileDeletion=Cannot create linked resource ''{0}'' because a deletion for the file of that name has not been committed.
 CVSTeamProvider_errorGettingWatchEdit=Could not get "watch/edit" property for project ''{0}''.
 CVSTeamProvider_errorSettingWatchEdit=Could not set "watch/edit" property for project ''{0}''.
-CVSTeamProvider_errorAddingFileToDiff=An I/O error occurred adding file ''{0}'' to the patch output.
 CVSTeamProvider_updatingFolder=Updating {0}
 
 CVSCoreFileModificationValidator_editJob = Performing CVS Edit
@@ -260,5 +261,4 @@ EclipseFolder_0=Disconnecting {0}.
 LogEntry_0=/
 PrepareForReplaceVisitor_DeletedFileWithoutHistoryCannotBeRestoredWhileRevertToBase=Deleted file does not have history and cannot be restored with BASE tag.
 PrepareForReplaceVisitor_FileCannotBeReplacedWithBase=File {0} cannot be replaced with BASE.
-ThePatchDoesNotContainChangesFor_0= The patch does not contain changes for {0}
-ThePatchDoesNotContainAllTheChanges=The patch does not contain all the changes
\ No newline at end of file
+ThePatchDoesNotContainChangesFor_0= The patch does not contain changes for {0}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
index 6065ea6..3030ae0 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -617,7 +617,9 @@ public class EclipseFile extends EclipseResource implements ICVSFile {
 			// isMerged() must be called because when a file is updated and merged by the cvs server the timestamps
 			// are equal. Merged files should however be reported as dirty because the user should take action and commit
 			// or review the merged contents.
-			if(ResourceSyncInfo.isAddition(syncBytes) || ResourceSyncInfo.isMerge(syncBytes) || !exists()) {
+			if (ResourceSyncInfo.isAddition(syncBytes)
+					|| ResourceSyncInfo.isMerge(syncBytes)
+					|| ResourceSyncInfo.wasDeleted(syncBytes) || !exists()) {
 				dirty = true;
 			} else {
 				// TODO: non-optimal as ResourceSyncInfo is created each time
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
index d68ac04..c5980e1 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,14 +11,7 @@
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core.resources;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
@@ -1693,9 +1686,10 @@ public class EclipseSynchronizer implements IFlushOperation {
 	}
 	
 	/**
-	 * This method is to be invoked only from the move/delete hook. It's purpose
-	 * is to obtain the sync look in order to prevent other threads from accessing
-	 * sync info while the move/delete is taking place.
+	 * This method is to be invoked only from the move/delete hook. Its purpose is to obtain the
+	 * sync look in order to prevent other threads from accessing sync info while the move/delete is
+	 * taking place.
+	 * 
 	 * @param runnable
 	 * @param monitor
 	 * @throws CVSException
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java
index 06a3aec..9f241c2 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,7 @@ public class ResourceSyncInfo {
 
 	// revision can be locked in repository using "cvs admin -l<rev>" command
 	// entry looks like [M revision 1.2.2.3	locked by: igorf;]
-	private static final String LOCKEDBY_SUFFIX = "\tlocked by"; //$NON-NLS-1$
+	public static final String LOCKEDBY_REGEX = "\\slocked by.+$"; //$NON-NLS-1$
 
 	// a sync element with a revision of '0' is considered a new file that has
 	// not been committed to the repo. Is visible so that clients can create sync infos
@@ -69,10 +69,12 @@ public class ResourceSyncInfo {
 	protected static final int TYPE_REGULAR = 1;
 	protected static final int TYPE_MERGED = 2;
 	protected static final int TYPE_MERGED_WITH_CONFLICTS = 3;
+	protected static final int TYPE_DELETED_AND_RESTORED = 4;
 	
 	protected static final String TIMESTAMP_DUMMY = "dummy timestamp"; //$NON-NLS-1$
 	protected static final String TIMESTAMP_MERGED = "Result of merge"; //$NON-NLS-1$
 	protected static final String TIMESTAMP_MERGED_WITH_CONFLICT = TIMESTAMP_MERGED + "+"; //$NON-NLS-1$
+	protected static final String TIMESTAMP_DELETED_AND_RESTORED = "restored+"; //$NON-NLS-1$
 	
 	protected static final String TIMESTAMP_SERVER_MERGED = "+modified"; //$NON-NLS-1$
 	protected static final String TIMESTAMP_SERVER_MERGED_WITH_CONFLICT = "+="; //$NON-NLS-1$
@@ -339,11 +341,16 @@ public class ResourceSyncInfo {
 	protected void setSyncType(int syncType) {
 		this.syncType = syncType;
 	}
+
 	/**
-	 * Sets the version and decides if the revision is for a deleted resource the revision field
-	 * will not include the deleted prefix '-'.
+	 * Sets the version and decides if the revision is for a deleted resource.
+	 * The revision field will not include the deleted prefix '-'. If the
+	 * revision has been locked the "locked by" suffix it will be removed from
+	 * the revision field.
 	 * 
-	 * @param version the version to set
+	 * @param revision
+	 *            the revision to set
+	 * @see #LOCKEDBY_REGEX
 	 */
 	protected void setRevision(String revision) {
 		if(revision==null || revision.equals(ADDED_REVISION)) {
@@ -358,6 +365,7 @@ public class ResourceSyncInfo {
 			this.revision = revision;
 			isDeleted = false;
 		}
+		this.revision = this.revision.replaceFirst(LOCKEDBY_REGEX, ""); //$NON-NLS-1$
 	}
 	
 	/**
@@ -415,6 +423,9 @@ public class ResourceSyncInfo {
 		} else if(date.indexOf(TIMESTAMP_MERGED)!=-1) {
 			syncType = TYPE_MERGED;
 			date = null;
+		} else if (date.indexOf(TIMESTAMP_DELETED_AND_RESTORED) != -1) {
+			syncType = TYPE_DELETED_AND_RESTORED;
+			date = date.substring(date.indexOf("+") + 1); //$NON-NLS-1$
 		}
 		
 		if(date==null || "".equals(date)) { //$NON-NLS-1$
@@ -488,6 +499,8 @@ public class ResourceSyncInfo {
 							entryLineTimestamp = TIMESTAMP_MERGED; break;
 						case TYPE_MERGED_WITH_CONFLICTS:
 							entryLineTimestamp = TIMESTAMP_MERGED_WITH_CONFLICT + CVSDateFormatter.dateToEntryLine(timeStamp); break;
+						case TYPE_DELETED_AND_RESTORED:
+							entryLineTimestamp = TIMESTAMP_DELETED_AND_RESTORED + CVSDateFormatter.dateToEntryLine(timeStamp); break;
 					}						
 				}
 				result.append(entryLineTimestamp);
@@ -652,6 +665,25 @@ public class ResourceSyncInfo {
 			byte[] newSyncBytes = new byte[syncBytes.length - 1];
 			System.arraycopy(syncBytes, 0, newSyncBytes, 0, index + 1);
 			System.arraycopy(syncBytes, index + 2, newSyncBytes, index + 1, newSyncBytes.length - index - 1);
+
+			String syncTimestamp = Util.getSubstring(syncBytes, SEPARATOR_BYTE,
+					3, false);
+			if (getSyncType(new String(syncTimestamp)) == TYPE_REGULAR) {
+				syncTimestamp = TIMESTAMP_DELETED_AND_RESTORED + syncTimestamp;
+				byte[] oldSyncBytes = newSyncBytes;
+				newSyncBytes = new byte[oldSyncBytes.length
+						+ TIMESTAMP_DELETED_AND_RESTORED.length()];
+				System.arraycopy(oldSyncBytes, 0, newSyncBytes, 0,
+						startOfSlot(oldSyncBytes, 3) + 1);
+				System.arraycopy(syncTimestamp.getBytes(), 0, newSyncBytes,
+						startOfSlot(oldSyncBytes, 3) + 1,
+						syncTimestamp.length());
+				System.arraycopy(oldSyncBytes,
+						startOfSlot(oldSyncBytes, 4) - 1, newSyncBytes,
+						startOfSlot(oldSyncBytes, 3) + syncTimestamp.length(),
+						oldSyncBytes.length
+								- (startOfSlot(oldSyncBytes, 4) - 1));
+			}
 			return newSyncBytes;
 		}
 		return syncBytes;
@@ -725,7 +757,9 @@ public class ResourceSyncInfo {
 				throw new CVSException(NLS.bind(CVSMessages.ResourceSyncInfo_malformedSyncBytes, new String[] { new String(syncBytes) })); 
 			}
 			int syncType = getSyncType(syncTimestamp);
-			if (syncType != TYPE_REGULAR) {
+			if (syncType == TYPE_DELETED_AND_RESTORED) {
+				return syncTimestamp.substring(syncTimestamp.indexOf("+") + 1); //$NON-NLS-1$
+			} else if (syncType != TYPE_REGULAR) {
 				if (syncType == TYPE_MERGED_WITH_CONFLICTS && fileTimestamp.equals(getTimestamp(syncTimestamp))) {
 					return TIMESTAMP_SERVER_MERGED_WITH_CONFLICT;
 				} else {
@@ -779,6 +813,8 @@ public class ResourceSyncInfo {
 			return TYPE_MERGED_WITH_CONFLICTS;
 		} else if(date.indexOf(TIMESTAMP_MERGED)!=-1) {
 			return TYPE_MERGED;
+		} else if (date.indexOf(TIMESTAMP_DELETED_AND_RESTORED) != -1) {
+			return TYPE_DELETED_AND_RESTORED;
 		}
 		return TYPE_REGULAR;
 	}
@@ -823,8 +859,14 @@ public class ResourceSyncInfo {
 	}
 	
 	/**
-	 * Method getRevision.
+	 * Return revision for the given synchronization bytes. The revision will
+	 * not include the deleted prefix '-'. The "locked by" suffix it will not be
+	 * included either.
+	 * 
 	 * @param syncBytes
+	 *            the bytes that represent the synchronization information
+	 * @return a revision string for the given bytes
+	 * @see #LOCKEDBY_REGEX
 	 */
 	public static String getRevision(byte[] syncBytes) throws CVSException {
 		String revision = Util.getSubstring(syncBytes, SEPARATOR_BYTE, 2, false);
@@ -834,10 +876,7 @@ public class ResourceSyncInfo {
 		if(revision.startsWith(DELETED_PREFIX)) {
 			revision = revision.substring(DELETED_PREFIX.length());
 		}
-		int lockedIdx = revision.indexOf(LOCKEDBY_SUFFIX);
-		if (lockedIdx >= 0) {
-			revision = revision.substring(0, lockedIdx);
-		}
+		revision = revision.replaceFirst(LOCKEDBY_REGEX, ""); //$NON-NLS-1$
 		return revision;
 	}
 
@@ -866,6 +905,25 @@ public class ResourceSyncInfo {
 	}
 
 	/**
+	 * Checks if the ResourceSyncInfo was deleted and restored afterwards.
+	 * Parses the timestamp in <code>syncBytes</code> and searches for markers.
+	 * 
+	 * @param syncBytes
+	 * @return boolean
+	 */
+	public static boolean wasDeleted(byte[] syncBytes) throws CVSException {
+		String timestamp = Util.getSubstring(syncBytes, SEPARATOR_BYTE, 3,
+				false);
+		if (timestamp == null) {
+			throw new CVSException(NLS.bind(
+					CVSMessages.ResourceSyncInfo_malformedSyncBytes,
+					new String[] { new String(syncBytes) }));
+		}
+		int syncType = getSyncType(timestamp);
+		return syncType == TYPE_DELETED_AND_RESTORED;
+	}
+
+	/**
 	 * Method isMerge.
 	 * @param syncBytes1
 	 * @return boolean
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/KnownRepositories.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/KnownRepositories.java
index b421303..a472391 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/KnownRepositories.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/KnownRepositories.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,15 +10,12 @@
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.core.util;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.*;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.INodeChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent;
@@ -158,9 +155,9 @@ public class KnownRepositories implements INodeChangeListener, IPreferenceChange
 	 * the same as that returned by ICVSRepositoryLocation#getLocation().
 	 * The format is:
 	 * 
-	 *   connection:user[:password]@host[#port]:root
+	 *   :connection:user[:password]@host[#port]:root
 	 * 
-	 * where [] indicates optional and the identier meanings are:
+	 * where [] indicates optional and the identifier meanings are:
 	 * 
 	 * 	 connection The connection method to be used
 	 *   user The username for the connection
@@ -169,7 +166,7 @@ public class KnownRepositories implements INodeChangeListener, IPreferenceChange
 	 *   port The port to connect to (optional)
 	 *   root The server directory where the repository is located
 	 * 
-	 * If the repository is already registered, the cahced instance is returned.
+	 * If the repository is already registered, the cached instance is returned.
 	 * Otherwise, a new uncached instance is returned.
 	 * 
 	 * WARNING: Providing the password as part of the String will result in the password being part
diff --git a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java
index 910ff3b..937df4d 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,7 +50,7 @@ public class Util {
 	}
 	
 	/**
-	 * Return the the given path with the last segment removed
+	 * Return the given path with the last segment removed
 	 * @param path
 	 * @return String
 	 */
@@ -73,12 +73,12 @@ public class Util {
 		}
 		return path;
 	}
-	/*
-	 * *
-	 * Get the extention of the path of resource
-	 * relative to the path of root
+
+	/**
+	 * Get the extention of the path of resource relative to the path of root
 	 * 
-	 * @throws CVSException if root is not a root-folder of resource
+	 * @throws CVSException
+	 *             if root is not a root-folder of resource
 	 */
 	public static String getRelativePath(String rootName, String resourceName) 
 		throws CVSException {
@@ -354,7 +354,6 @@ public class Util {
 	 * @param tag The CVSTag as reported by CVS for the IResource.  May be null.
 	 * @return CVSTag The corrected tag for the resource.  May be null.
 	 */
-	
 	public static CVSTag getAccurateFolderTag(IResource resource, CVSTag tag) {
 
 		// Determine if the folder contains files as immediate children.
@@ -414,7 +413,6 @@ public class Util {
 	 * @param cvsResource the resource to test.  Must nut be null.
 	 * @return the correct cVSTag.  May be null.
 	 */
-	
 	public static CVSTag getAccurateFileTag(ICVSResource cvsResource) throws CVSException {
 
 		CVSTag tag = null;
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ssh2/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.team.cvs.ssh2/.settings/org.eclipse.jdt.core.prefs
index ee17cff..f00aaea 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ssh2/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.team.cvs.ssh2/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Thu Jun 29 09:05:00 EDT 2006
+#Tue Feb 01 14:42:51 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -7,6 +15,7 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=warning
@@ -63,3 +72,5 @@ org.eclipse.jdt.core.compiler.source=1.3
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ssh2/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.team.cvs.ssh2/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..73a68d3
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.cvs.ssh2/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:42:51 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ssh2/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.team.cvs.ssh2/META-INF/MANIFEST.MF
index f5783c9..76a4658 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ssh2/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.team.cvs.ssh2/META-INF/MANIFEST.MF
@@ -13,5 +13,5 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.team.cvs.ssh;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
  com.jcraft.jsch;bundle-version="[0.1.27,2.0.0)",
  org.eclipse.jsch.core;bundle-version="[1.1.0,2.0.0)"
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ssh2/plugin.xml b/eclipse/plugins/org.eclipse.team.cvs.ssh2/plugin.xml
index f3651f2..cf1e58d 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ssh2/plugin.xml
+++ b/eclipse/plugins/org.eclipse.team.cvs.ssh2/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2003, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <!-- =================================================================================== -->
 <!-- SSH2 Plug-in Manifest 					                                             -->
 <!-- =================================================================================== -->
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.team.cvs.ui/.settings/org.eclipse.jdt.core.prefs
index c4ad2ee..2ed3594 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Thu Jul 19 13:17:34 EDT 2007
+#Thu Apr 14 11:19:28 CEST 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -7,6 +15,7 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -17,7 +26,7 @@ org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
@@ -67,3 +76,5 @@ org.eclipse.jdt.core.compiler.source=1.3
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.team.cvs.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..b70b148
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:43:01 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
index b682348..d73ec94 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.team.cvs.ui; singleton:=true
-Bundle-Version: 3.3.302.qualifier
+Bundle-Version: 3.3.400.qualifier
 Bundle-Activator: org.eclipse.team.internal.ccvs.ui.CVSUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml b/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml
index 9d03bf2..f0a564d 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2001, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
 
     
@@ -1266,6 +1277,12 @@
             description="%ReplaceWithRevisionAction.tooltip"
             id="org.eclipse.team.cvs.ui.replaceWithRevision"
             name="%ReplaceWithRevisionAction.name"/>
+       <command
+            categoryId="org.eclipse.team.cvs.ui.actionSet"
+            defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithLatestRevisionAction"
+            description="%ReplaceWithLastRevision.tooltip"
+            id="org.eclipse.team.cvs.ui.replaceWithBase"
+            name="%ReplaceWithLastRevision.label"/>
       <command
             categoryId="org.eclipse.team.cvs.ui.actionSet"
             defaultHandler="org.eclipse.team.internal.ccvs.ui.actions.CompareWithRemoteAction"
@@ -2051,6 +2068,13 @@
          <keywordReference id="org.eclipse.team.cvs.ui.cvs.annotate"/>
       </page>
    </extension>
+   <extension
+         point="org.eclipse.team.ui.scmUrlImportPages">
+      <scmUrlImportPage
+            page="org.eclipse.team.internal.ccvs.ui.wizards.CVSScmUrlImportWizardPage"
+            repository="org.eclipse.team.cvs.core.cvsnature">
+      </scmUrlImportPage>
+   </extension>
    
    <!-- Commented out awaiting menu support from UI
    <extension
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilter.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilter.java
index d41fa82..1ba1d24 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilter.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,10 +14,12 @@ import java.util.Date;
 
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.team.core.history.ITag;
 import org.eclipse.team.internal.ccvs.core.filehistory.CVSFileRevision;
 import org.eclipse.team.internal.ui.history.AbstractHistoryCategory;
 
 public class CVSHistoryFilter extends ViewerFilter {
+	public String branchName;
 	public String author;
 	public Date fromDate;
 	public Date toDate;
@@ -25,7 +27,8 @@ public class CVSHistoryFilter extends ViewerFilter {
 	public boolean isOr;
 	private int matchCounter;
 	
-	public CVSHistoryFilter(String author, String comment, Date fromDate, Date toDate, boolean isOr) {
+	public CVSHistoryFilter(String branchName, String author, String comment, Date fromDate, Date toDate, boolean isOr) {
+		this.branchName = branchName;
 		this.author = author;
 		this.comment = comment;
 		this.fromDate = fromDate;
@@ -45,7 +48,7 @@ public class CVSHistoryFilter extends ViewerFilter {
 			CVSFileRevision entry = (CVSFileRevision) element;
 			if (isOr) {
 				//empty fields should be considered a non-match
-				boolean orSearch = (hasAuthor() && authorMatch(entry)) || (hasDate() && dateMatch(entry)) || (hasComment() && commentMatch(entry));
+				boolean orSearch = (hasBranchName() && branchMatch(entry)) || (hasAuthor() && authorMatch(entry)) || (hasDate() && dateMatch(entry)) || (hasComment() && commentMatch(entry));
 				if (orSearch)
 					matchCounter++;
 				
@@ -53,7 +56,7 @@ public class CVSHistoryFilter extends ViewerFilter {
 			} else {
 				//"and" search
 				//empty fields should be considered a match
-				boolean andSearch = (!hasAuthor() || authorMatch(entry)) && (!hasDate() || dateMatch(entry)) && (!hasComment() || commentMatch(entry));
+				boolean andSearch = (!hasBranchName() || branchMatch(entry)) && (!hasAuthor() || authorMatch(entry)) && (!hasDate() || dateMatch(entry)) && (!hasComment() || commentMatch(entry));
 				if (andSearch)
 					matchCounter++;
 				
@@ -63,6 +66,16 @@ public class CVSHistoryFilter extends ViewerFilter {
 		return false;
 	}
 
+	protected boolean branchMatch(CVSFileRevision revision) {
+		ITag[] branches = revision.getBranches();
+		for (int i = 0; i < branches.length; i++) {
+			if ((branches[i].getName().toLowerCase().indexOf(branchName.toLowerCase()) != -1)) {
+				return true;
+			}
+		}		
+		return false;
+	}
+
 	protected boolean authorMatch(CVSFileRevision revision) {
 		return revision.getAuthor().equals(author);
 	}
@@ -87,6 +100,10 @@ public class CVSHistoryFilter extends ViewerFilter {
 		return (fromDate.before(new Date(revision.getTimestamp())));
 	}
 
+	protected boolean hasBranchName() {
+		return !branchName.equals(""); //$NON-NLS-1$
+	}
+
 	protected boolean hasAuthor() {
 		return !author.equals(""); //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilterDialog.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilterDialog.java
index 062ec11..ec754e7 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilterDialog.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryFilterDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class CVSHistoryFilterDialog extends TrayDialog {
 	//widgets
 	private Button orRadio;
 	private Button andRadio;
+	private Text branchName;
 	private Text author;
 	private Text comment;
 	private DateTime fromDate;
@@ -36,11 +37,13 @@ public class CVSHistoryFilterDialog extends TrayDialog {
 
 	public CVSHistoryFilterDialog(Shell shell) {
 		super(shell);
+		setHelpAvailable(false); // Disable help controls - F1 will still work
 	}
 
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
 		newShell.setText(CVSUIMessages.HistoryFilterDialog_title);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IHelpContextIds.HISTORY_FILTER_DIALOG);
 	}
 
 	protected Control createDialogArea(Composite parent) {
@@ -71,6 +74,12 @@ public class CVSHistoryFilterDialog extends TrayDialog {
 		data.horizontalSpan = 2;
 		orRadio.setLayoutData(data);
 
+		//branch name
+		label = new Label(topLevel, SWT.NONE);
+		label.setText(CVSUIMessages.HistoryFilterDialog_branchName);
+		branchName = new Text(topLevel, SWT.BORDER);
+		branchName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
 		//author
 		label = new Label(topLevel, SWT.NONE);
 		label.setText(CVSUIMessages.HistoryFilterDialog_author);
@@ -95,8 +104,6 @@ public class CVSHistoryFilterDialog extends TrayDialog {
 
 		initializeValues();
 
-		// set F1 help
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(topLevel, IHelpContextIds.HISTORY_FILTER_DIALOG);
 		Dialog.applyDialogFont(parent);
 		return topLevel;
 	}
@@ -104,6 +111,9 @@ public class CVSHistoryFilterDialog extends TrayDialog {
 	void initializeValues() {
 		if (historyFilter == null)
 			return;
+		if (historyFilter.branchName != null) {
+			branchName.setText(historyFilter.branchName);
+		}
 		if (historyFilter.author != null) {
 			author.setText(historyFilter.author);
 		}
@@ -139,7 +149,7 @@ public class CVSHistoryFilterDialog extends TrayDialog {
 		Date toDate = getToDate();
 
 		//create the filter
-		historyFilter = new CVSHistoryFilter(author.getText(), comment.getText(), fromDate, toDate, orRadio.getSelection());
+		historyFilter = new CVSHistoryFilter(branchName.getText(), author.getText(), comment.getText(), fromDate, toDate, orRadio.getSelection());
 
 		super.buttonPressed(buttonId);
 	}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryPage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryPage.java
index 2cfdbf0..a863b09 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryPage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@ import org.eclipse.jface.text.*;
 import org.eclipse.jface.text.revisions.Revision;
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.util.OpenStrategy;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
@@ -158,6 +159,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 	private final static String SASH_WEIGHTS = "SASH_WEIGHTS"; //$NON-NLS-1$
 	private final static String INNER_SASH_WEIGHTS = "INNER_SASH_WEIGHTS"; //$NON-NLS-1$
 	private final static String SASH_WEIGHTS_SEPARATOR = ";"; //$NON-NLS-1$
+	private final static String SORT_ORDER_KEY = "SORT_ORDER"; //$NON-NLS-1$
 
 	// page settings section name
 	private static final String CVS_HISTORY_PAGE_SECTION = CVSHistoryPage.class.getName();
@@ -169,7 +171,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 	private Text searchField;
 	
 	//current tag list sort order.
-	private boolean sortTagsAscending = true;
+	private boolean sortTagsAscending;
 
 	// listener registered on the book this page is contained
 	private DisposeListener disposeListener;
@@ -193,6 +195,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 		if (settings == null) {
 			settings = viewsSettings.addNewSection(CVS_HISTORY_PAGE_SECTION);
 		}
+		sortTagsAscending= settings.get(SORT_ORDER_KEY) == null || settings.getBoolean(SORT_ORDER_KEY);
 	}
 
 	/**
@@ -280,6 +283,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 		saveSashWeights(SASH_WEIGHTS, sashForm.getWeights());
 		saveSashWeights(INNER_SASH_WEIGHTS, innerSashForm.getWeights());
 		historyTableProvider.saveColumnLayout();
+		settings.put(SORT_ORDER_KEY, sortTagsAscending);
 	}
 
 	private int[] loadSashWeights(String key) {
@@ -536,24 +540,37 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 				openWithMenu.selectionChanged((IStructuredSelection) treeViewer.getSelection());
 			}
 		});
-		
-		treeViewer.addOpenListener(new IOpenListener() {
-			public void open(OpenEvent e) {
-				if (getSite() != null) {
-					StructuredSelection tableStructuredSelection = (StructuredSelection) treeViewer.getSelection();
+
+		new OpenAndLinkWithEditorHelper(treeViewer) {
+			protected void open(ISelection selection, boolean activate) {
+				if (getSite() != null && selection instanceof IStructuredSelection) {
+					IStructuredSelection structuredSelection= (IStructuredSelection)selection;
 					if (compareMode){
-						StructuredSelection sel = new StructuredSelection(new Object[] {getCurrentFileRevision(), tableStructuredSelection.getFirstElement()});
+						StructuredSelection sel = new StructuredSelection(new Object[] {getCurrentFileRevision(), structuredSelection.getFirstElement()});
 						compareAction.selectionChanged(sel);
 						compareAction.run();
 					} else {
 						//Pass in the entire structured selection to allow for multiple editor openings
-						StructuredSelection sel = tableStructuredSelection;
-						openAction.selectionChanged(sel);
+						openAction.selectionChanged(structuredSelection);
 						openAction.run();
 					}
 				}
 			}
-		});
+
+			protected void activate(ISelection selection) {
+				int currentMode= OpenStrategy.getOpenMethod();
+				try {
+					OpenStrategy.setOpenMethod(OpenStrategy.DOUBLE_CLICK);
+					open(selection, true);
+				} finally {
+					OpenStrategy.setOpenMethod(currentMode);
+				}
+			}
+
+			protected void linkToEditor(ISelection selection) {
+				// XXX: Not yet implemented, see http://bugs.eclipse.org/324185
+			}
+		};
 
 		getContentsAction = getContextMenuAction(CVSUIMessages.HistoryView_getContentsAction, true /* needs progress */, new IWorkspaceRunnable() {
 			public void run(IProgressMonitor monitor) throws CoreException {
@@ -1083,6 +1100,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 	}
 	
 	public void refresh(int refreshFlags) {
+		printDebugInfo("CVSHistoryPage#refresh", (IFile)(previousFile != null ? previousFile.getIResource() : null), cvsFileHistory, new Throwable()); //$NON-NLS-1$
 		//refetch revisions, not a select only job
 		// TODO
 		refreshHistory(true, false, refreshFlags);
@@ -1096,6 +1114,9 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 			refreshCVSFileHistoryJob.setLocalFileRevision(oldJob.localFileRevision);
 			refreshCVSFileHistoryJob.setSelectLocal(oldJob.useLocalSelect);
 			refetch = true;
+			selectOnly = false;
+			refreshFlags = CVSFileHistory.REFRESH_ALL;
+			printDebugInfo("CVSHistoryPage#refreshHistory, cancel old job", (IFile)(previousFile != null ? previousFile.getIResource() : null), cvsFileHistory, null); //$NON-NLS-1$
 		}
 		refreshCVSFileHistoryJob.setFileHistory(cvsFileHistory);
 		IResource resource = previousFile.getIResource();
@@ -1111,10 +1132,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 		refreshCVSFileHistoryJob.setGrouping(groupingOn);
 		refreshCVSFileHistoryJob.setRefreshFlags(refreshFlags);
 		IHistoryPageSite parentSite = getHistoryPageSite();
-		if (Policy.DEBUG_HISTORY) {
-			String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-			System.out.println(time + ": CVSHistoryPage#refreshHistory, about to schedule RefreshCVSFileHistoryJob"); //$NON-NLS-1$
-		}
+		printDebugInfo("CVSHistoryPage#refreshHistory, about to schedule RefreshCVSFileHistoryJob", (IFile)resource, cvsFileHistory, null); //$NON-NLS-1$
 		Utils.schedule(refreshCVSFileHistoryJob, getWorkbenchSite(parentSite));
 	}
 
@@ -1484,10 +1502,12 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 		
 		public IStatus run(IProgressMonitor monitor)  {
 			final int cachedRefreshFlags = refreshFlags;
-
+			final boolean cachedSelectOnly= selectOnly;
 			IStatus status = Status.OK_STATUS;
-			
+			printDebugInfo("RefreshCVSFileHistory#run started for", workspaceFile, fileHistory, null); //$NON-NLS-1$
 			if (fileHistory != null && !shutdown) {
+				printDebugInfo("RefreshCVSFileHistory#run checkpoint 1", workspaceFile, fileHistory, null); //$NON-NLS-1$
+
 				//If fileHistory terminates in a bad way, try to fetch the local
 				//revisions only
 				boolean localFetched = false;
@@ -1497,66 +1517,57 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 						&& (cachedRefreshFlags & CVSFileHistory.REFRESH_REMOTE) > 0) {
 					// If this is the first refresh, show the local history before hitting the server
 					try {
+						printDebugInfo("RefreshCVSFileHistory#run checkpoint 2", workspaceFile, fileHistory, null); //$NON-NLS-1$
 						fileHistory.refresh(CVSFileHistory.REFRESH_LOCAL, monitor);
-						updateTable();
+						updateTable(cachedSelectOnly);
 						localFetched = true;
 						needsUpdate = false;
 					} catch (TeamException e) {
 						// Ignore and try the full refresh
-						if (Policy.DEBUG_HISTORY) {
-							String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-							System.out.println(time + ": RefreshCVSFileHistory#run encountered an exception"); //$NON-NLS-1$
-							e.printStackTrace();
-						}
+						printDebugInfo("RefreshCVSFileHistory#run encountered an exception(1)", workspaceFile, fileHistory, e); //$NON-NLS-1$
 					}
 				}
 				try {
+					printDebugInfo("RefreshCVSFileHistory#run checkpoint 3", workspaceFile, fileHistory, null); //$NON-NLS-1$
 					fileHistory.refresh(cachedRefreshFlags, monitor);
 					needsUpdate = true;
+				} catch (OperationCanceledException ex) {
+					printDebugInfo("RefreshCVSFileHistory#run OperationCanceledException", workspaceFile, fileHistory, ex); //$NON-NLS-1$
+					throw ex;
 				} catch (TeamException ex) {
-					if (Policy.DEBUG_HISTORY) {
-						String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-						System.out.println(time + ": RefreshCVSFileHistory#run encountered an exception"); //$NON-NLS-1$
-						ex.printStackTrace();
-					}
+					printDebugInfo("RefreshCVSFileHistory#run encountered an exception(2)", workspaceFile, fileHistory, ex); //$NON-NLS-1$
 					if (!localFetched) {
 						try {
 							fileHistory.refresh(CVSFileHistory.REFRESH_LOCAL, monitor);
 							needsUpdate = true;
 						} catch (TeamException e) {
 							// Ignore and allow the original exception to go through
-							if (Policy.DEBUG_HISTORY) {
-								String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-								System.out.println(time + ": RefreshCVSFileHistory#run encountered an exception"); //$NON-NLS-1$
-								e.printStackTrace();
-							}
+							printDebugInfo("RefreshCVSFileHistory#run encountered an exception(3)", workspaceFile, fileHistory, e); //$NON-NLS-1$
 						}
 					}
 					status = new CVSStatus(ex.getStatus().getSeverity(), ex.getStatus().getCode(), ex.getMessage(), ex);
 				}
-				if (needsUpdate)
-					updateTable();
+				if (needsUpdate) {
+					printDebugInfo("RefreshCVSFileHistory#run checkpoint 4", workspaceFile, fileHistory, null); //$NON-NLS-1$
+					updateTable(cachedSelectOnly);
+				}
 			}
 
 			if (status != Status.OK_STATUS ) {
 				this.setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
 				this.setProperty(IProgressConstants.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY, Boolean.TRUE);
 			}
-			
-			if (Policy.DEBUG_HISTORY) {
-				String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-				System.out.println(time + ": RefreshCVSFileHistory#run finished, status: " + status); //$NON-NLS-1$
-			}
-			
+			printDebugInfo("RefreshCVSFileHistory#run finished, status: " + status, workspaceFile, fileHistory, null); //$NON-NLS-1$
 			return status;
 		}
 
-		private void updateTable() {
+		private void updateTable(final boolean selectOnly) {
 			if (grouping)
 				revisionsFound = sortRevisions();
 			
 			Utils.asyncExec(new Runnable() {
 				public void run() {
+					printDebugInfo("RefreshCVSFileHistory#updateTable, in asyncExec", workspaceFile, cvsFileHistory, null); //$NON-NLS-1$
 					treeViewer.refresh();
 					historyTableProvider.setFile(fileHistory, workspaceFile);
 					//historyTableProvider.setWorkspaceFile(workspaceFile);
@@ -1565,6 +1576,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 							mapExpandedElements(treeViewer.getExpandedElements());
 							treeViewer.getTree().setLinesVisible(revisionsFound);
 							treeViewer.getTree().setRedraw(false);
+							printDebugInfo("RefreshCVSFileHistory#updateTable, setInput:grouping", workspaceFile, cvsFileHistory, null); //$NON-NLS-1$
 							treeViewer.setInput(categories);
 							//if user is switching modes and already has expanded elements
 							//selected try to expand those, else expand all
@@ -1582,6 +1594,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 						} else {
 							if (fileHistory.getFileRevisions().length > 0) {
 								treeViewer.getTree().setLinesVisible(true);
+								printDebugInfo("RefreshCVSFileHistory#updateTable, setInput:no grouping", workspaceFile, cvsFileHistory, null); //$NON-NLS-1$
 								treeViewer.setInput(fileHistory);
 							} else {
 								categories = new AbstractHistoryCategory[] {getErrorMessage()};
@@ -1593,7 +1606,7 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 					//Update the history (if it exists) to reflect the new
 					//counts
 					if (historyFilter != null){
-						CVSHistoryFilter tempFilter = new CVSHistoryFilter(historyFilter.author, historyFilter.comment, historyFilter.fromDate, historyFilter.toDate, historyFilter.isOr);
+						CVSHistoryFilter tempFilter = new CVSHistoryFilter(historyFilter.branchName, historyFilter.author, historyFilter.comment, historyFilter.fromDate, historyFilter.toDate, historyFilter.isOr);
 						showFilter(tempFilter);
 					}
 					
@@ -1932,26 +1945,15 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 		// if this input is the same as the last, we don't need to cancel
 		// the current job
 		boolean needRefresh = checkPreviousInput();
-		
-		if (Policy.DEBUG_HISTORY) {
-			String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-			System.out.println(time + ": CVSHistoryPage#inputSet, needRefresh = " + needRefresh); //$NON-NLS-1$
-		}
-
+		printDebugInfo("CVSHistoryPage#inputSet, needRefresh = " + needRefresh, (IFile)cvsFile.getIResource(), cvsFileHistory, null); //$NON-NLS-1$
 		if (refreshCVSFileHistoryJob != null) {
 			if (!needRefresh && refreshCVSFileHistoryJob.getState() != Job.NONE) {
 				// let the old job finish
-				if (Policy.DEBUG_HISTORY) {
-					String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-					System.out.println(time + ": CVSHistoryPage#inputSet, the old job is still running"); //$NON-NLS-1$
-				}
+				printDebugInfo("CVSHistoryPage#inputSet, the old job is still running", (IFile)cvsFile.getIResource(), cvsFileHistory, null); //$NON-NLS-1$
 				return true;
 			} else {
 				// cancel the old job and continue
-				if (Policy.DEBUG_HISTORY) {
-					String time = new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
-					System.out.println(time + ": CVSHistoryPage#inputSet, cancel the old job"); //$NON-NLS-1$
-				}
+				printDebugInfo("CVSHistoryPage#inputSet, cancel the old job", (IFile)cvsFile.getIResource(), cvsFileHistory, null); //$NON-NLS-1$
 				refreshCVSFileHistoryJob.cancel();
 			}
 		}
@@ -2184,4 +2186,17 @@ public class CVSHistoryPage extends HistoryPage implements IAdaptable, IHistoryC
 		}
 	}
 
+	private static void printDebugInfo(String message, IFile file, CVSFileHistory history, Throwable t) {
+		if (!Policy.DEBUG_HISTORY)
+			return;
+		String time= new SimpleDateFormat("m:ss.SSS").format(new Date(System.currentTimeMillis())); //$NON-NLS-1$
+		String fileName= file != null ? file.getName() : "<workspaceFile == null>"; //$NON-NLS-1$
+		String fileHistoryID= history != null ? history.toString() : "<fileHistory == null>"; //$NON-NLS-1$
+		int i= fileHistoryID.indexOf('@');
+		if (i != -1)
+			fileHistoryID= fileHistoryID.substring(i);
+		System.out.println(time + ": " + fileName + ", " + fileHistoryID + ": " + message); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		if (t != null)
+			t.printStackTrace();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistorySearchFilter.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistorySearchFilter.java
index 661fed6..1ea93d1 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistorySearchFilter.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistorySearchFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.ui;
 
@@ -44,7 +45,7 @@ public class CVSHistorySearchFilter extends org.eclipse.jface.viewers.ViewerFilt
 
 			CVSFileRevision entry = (CVSFileRevision) element;
 			//empty fields should be considered a non-match
-			boolean orSearch = (authorMatch(entry)) || (dateMatch(entry)) || (commentMatch(entry) || revisionMatch(entry) || tagMatch(entry));
+			boolean orSearch = (authorMatch(entry)) || (dateMatch(entry)) || (commentMatch(entry) || revisionMatch(entry) || tagMatch(entry) || branchNameMatch(entry));
 			if (orSearch)
 				matchCounter++;
 			return orSearch;
@@ -89,6 +90,20 @@ public class CVSHistorySearchFilter extends org.eclipse.jface.viewers.ViewerFilt
 		return false;
 	}
 	
+	protected boolean branchNameMatch(CVSFileRevision revision) {
+		ITag[] branches = revision.getBranches();
+		for (int i = 0; i < branches.length; i++) {
+			String tag = branches[i].getName().toLowerCase();
+			Iterator iter = searchStrings.iterator();
+			while (iter.hasNext()) {
+				if (!(tag.indexOf(((String) iter.next()).toLowerCase()) == -1))
+					return true;
+			}
+		}
+		
+		return false;
+	}
+
 	protected boolean tagMatch(CVSFileRevision revision) {
 		ITag[] tags = revision.getTags();
 		for (int i = 0; i < tags.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryTableProvider.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryTableProvider.java
index 5bfb4b3..4588b3f 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryTableProvider.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSHistoryTableProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *     Brock Janiczak (brockj at tpg.com.au) - Bug 180436 Use table sort indicators on CVS
  *     Brock Janiczak (brockj at tpg.com.au) - Bug 181899 CVS History wrongly ordered
  *     Brock Janiczak <brockj at tpg.com.au> - Bug 182442 Display full comment in tooltip
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.ui;
 
@@ -18,6 +19,7 @@ import java.util.Date;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.layout.PixelConverter;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.util.IPropertyChangeListener;
@@ -60,16 +62,18 @@ public class CVSHistoryTableProvider {
 
 	//column constants
 	private static final int COL_REVISIONID = 0;
-	private static final int COL_TAGS = 1;
-	private static final int COL_DATE = 2;
-	private static final int COL_AUTHOR = 3;
-	private static final int COL_COMMENT = 4;
+	private static final int COL_BRANCHES = 1;
+	private static final int COL_TAGS = 2;
+	private static final int COL_DATE = 3;
+	private static final int COL_AUTHOR = 4;
+	private static final int COL_COMMENT = 5;
 	
 	// cvs history table provider settings section name
 	private static final String CVS_HISTORY_TABLE_PROVIDER_SECTION = CVSHistoryTableProvider.class.getName();
 
 	// cvs history table provider settings keys
 	private static final String COL_REVISIONID_NAME = "COL_REVISIONID"; //$NON-NLS-1$
+	private static final String COL_BRANCHES_NAME = "COL_BRANCHES"; //$NON-NLS-1$
 	private static final String COL_TAGS_NAME = "COL_TAGS"; //$NON-NLS-1$
 	private static final String COL_DATE_NAME = "COL_DATE"; //$NON-NLS-1$
 	private static final String COL_AUTHOR_NAME = "COL_AUTHOR"; //$NON-NLS-1$
@@ -226,6 +230,16 @@ public class CVSHistoryTableProvider {
 							revision = NLS.bind(CVSUIMessages.currentRevision, new String[] {revision}); //NLS.bind(CVSUIMessages.currentRevision, new String[] { revision });
 					}
 					return revision;
+				case COL_BRANCHES:
+					ITag[] branches = entry.getBranches();
+					StringBuffer resultBranches = new StringBuffer();
+					for (int i = 0; i < branches.length; i++) {
+						resultBranches.append(branches[i].getName());
+						if (i < branches.length - 1) {
+							resultBranches.append(", "); //$NON-NLS-1$
+						}
+					}
+					return resultBranches.toString();
 				case COL_TAGS:
 					ITag[] tags = entry.getTags();
 					StringBuffer result = new StringBuffer();
@@ -331,12 +345,14 @@ public class CVSHistoryTableProvider {
 		
 		private VersionCollator versionCollator = new VersionCollator();
 		
-		// column headings:	"Revision" "Tags" "Date" "Author" "Comment"
-		private int[][] SORT_ORDERS_BY_COLUMN = { {COL_REVISIONID, COL_DATE, COL_AUTHOR, COL_COMMENT, COL_TAGS}, /* revision */
-		{COL_TAGS, COL_DATE, COL_REVISIONID, COL_AUTHOR, COL_COMMENT}, /* tags */
-		{COL_DATE, COL_REVISIONID, COL_AUTHOR, COL_COMMENT, COL_TAGS}, /* date */
-		{COL_AUTHOR, COL_REVISIONID, COL_DATE, COL_COMMENT, COL_TAGS}, /* author */
-		{COL_COMMENT, COL_REVISIONID, COL_DATE, COL_AUTHOR, COL_TAGS} /* comment */
+		// column headings:	"Revision" "Branches" "Tags" "Date" "Author" "Comment"
+		private int[][] SORT_ORDERS_BY_COLUMN = {
+		{COL_REVISIONID, COL_DATE, COL_AUTHOR, COL_COMMENT, COL_TAGS, COL_BRANCHES}, /* revision */
+		{COL_BRANCHES, COL_DATE, COL_REVISIONID, COL_AUTHOR, COL_COMMENT, COL_TAGS}, /* tags */
+		{COL_TAGS, COL_DATE, COL_REVISIONID, COL_AUTHOR, COL_COMMENT, COL_BRANCHES}, /* tags */
+		{COL_DATE, COL_REVISIONID, COL_AUTHOR, COL_COMMENT, COL_TAGS, COL_BRANCHES}, /* date */
+		{COL_AUTHOR, COL_REVISIONID, COL_DATE, COL_COMMENT, COL_TAGS, COL_BRANCHES}, /* author */
+		{COL_COMMENT, COL_REVISIONID, COL_DATE, COL_AUTHOR, COL_TAGS, COL_BRANCHES} /* comment */
 		};
 
 		/**
@@ -377,7 +393,7 @@ public class CVSHistoryTableProvider {
 		 */
 		int compareColumnValue(int columnNumber, IFileRevision e1, IFileRevision e2) {
 			switch (columnNumber) {
-				case 0 : /* revision */
+				case COL_REVISIONID : /* revision */
 					if (e1 instanceof LocalFileRevision ||
 						e2 instanceof LocalFileRevision) {
 						//compare based on dates
@@ -389,7 +405,17 @@ public class CVSHistoryTableProvider {
 						return date1 > date2 ? 1 : -1;
 					}
 					return versionCollator.compare(e1.getContentIdentifier(), e2.getContentIdentifier());
-				case 1: /* tags */
+				case COL_BRANCHES: /* branches */
+					ITag[] branches1 = e1.getBranches();
+					ITag[] branches2 = e2.getBranches();
+					if (branches2.length == 0) {
+						return -1;
+					}
+					if (branches1.length == 0) {
+						return 1;
+					}
+					return getComparator().compare(branches1[0].getName(), branches2[0].getName());
+				case COL_TAGS: /* tags */
 					ITag[] tags1 = e1.getTags();
 					ITag[] tags2 = e2.getTags();
 					if (tags2.length == 0) {
@@ -399,7 +425,7 @@ public class CVSHistoryTableProvider {
 						return 1;
 					}
 					return getComparator().compare(tags1[0].getName(), tags2[0].getName());
-				case 2 : /* date */
+				case COL_DATE : /* date */
 					long date1 = e1.getTimestamp();
 					long date2 = e2.getTimestamp();
 					if (date1 == date2)
@@ -407,7 +433,7 @@ public class CVSHistoryTableProvider {
 
 					return date1 > date2 ? 1 : -1;
 
-				case 3 : /* author */
+				case COL_AUTHOR : /* author */
 					String author1 = e1.getAuthor();
 					String author2 = e2.getAuthor();
 					if (author2 == null)
@@ -417,7 +443,7 @@ public class CVSHistoryTableProvider {
 						return 1;
 					
 					return getComparator().compare(author1, author2);
-				case 4 : /* comment */
+				case COL_COMMENT : /* comment */
 					String comment1 = e1.getComment();
 					String comment2 = e2.getComment();
 					if (comment2 == null)
@@ -520,6 +546,15 @@ public class CVSHistoryTableProvider {
 		col.setText(TeamUIMessages.GenericHistoryTableProvider_Revision);
 		col.addSelectionListener(headerListener);
 
+		// branches
+		viewerCol = new TreeViewerColumn(tree, SWT.NONE);
+		viewerCol.setLabelProvider(new HistoryLabelProvider(COL_BRANCHES, this));
+		col = viewerCol.getColumn();
+		col.setData(COL_NAME, COL_BRANCHES_NAME);
+		col.setResizable(true);
+		col.setText(CVSUIMessages.HistoryView_branches); 
+		col.addSelectionListener(headerListener);
+
 		// tags
 		viewerCol = new TreeViewerColumn(tree, SWT.NONE);
 		viewerCol.setLabelProvider(new HistoryLabelProvider(COL_TAGS, this));
@@ -560,11 +595,14 @@ public class CVSHistoryTableProvider {
 	}
 
 	public void loadColumnLayout(TableLayout layout) {
-		int weights[] = new int[] { getSettingsInt(COL_REVISIONID_NAME),
-				getSettingsInt(COL_TAGS_NAME), getSettingsInt(COL_DATE_NAME),
+		int widths[] = new int[] {
+				getSettingsInt(COL_REVISIONID_NAME),
+				getSettingsInt(COL_BRANCHES_NAME),
+				getSettingsInt(COL_TAGS_NAME),
+				getSettingsInt(COL_DATE_NAME),
 				getSettingsInt(COL_AUTHOR_NAME),
 				getSettingsInt(COL_COMMENT_NAME) };
-		ColumnLayoutData weightData[] = getWeightData(weights);
+		ColumnLayoutData weightData[] = getWeightData(widths);
 		for (int i = 0; i < weightData.length; i++) {
 			layout.addColumnData(weightData[i]);
 		}
@@ -601,29 +639,60 @@ public class CVSHistoryTableProvider {
 		try {
 			ret = Integer.parseInt(value);
 		} catch (NumberFormatException e) {
-			// Nothing to do
+			ret = -1;
 		}
 		return ret;
 	}
 
 	private ColumnLayoutData[] getWeightData(int[] widths) {
-		boolean onlyZeroes = true;
+		boolean reset = true;
 		for (int i = 0; i < widths.length; i++) {
 			if (widths[i] > 0) {
-				onlyZeroes = false;
+				reset = false;
+				break;
 			}
 		}
 		ColumnLayoutData[] ret = new ColumnLayoutData[widths.length];
 		for (int i = 0; i < widths.length; i++) {
-			if (onlyZeroes) {
-				ret[i] = new ColumnWeightData(20, true);
+			if (reset) {
+				// use same weight for all columns
+				ret[i] = new ColumnWeightData(10, true);
 			} else {
-				ret[i] = new ColumnPixelData(widths[i]);
+				if (widths[i] < 0)
+					ret[i] = new ColumnPixelData(getWidthForColumn(i));
+				else
+					ret[i] = new ColumnPixelData(widths[i]);
 			}
 		}
 		return ret;
 	}
 
+	private int getWidthForColumn(int i) {
+		// see #createColumns
+		int chars = 4;
+		switch (i) {
+		case COL_REVISIONID:
+			chars += TeamUIMessages.GenericHistoryTableProvider_Revision.length();
+			break;
+		case COL_BRANCHES:
+			chars += CVSUIMessages.HistoryView_branches.length();
+			break;
+		case  COL_TAGS:
+			chars += CVSUIMessages.HistoryView_tags.length();
+			break;
+		case COL_DATE:
+			chars += TeamUIMessages.GenericHistoryTableProvider_RevisionTime.length();
+			break;
+		case COL_AUTHOR:
+			chars += TeamUIMessages.GenericHistoryTableProvider_Author.length();
+			break;
+		case COL_COMMENT:
+			chars += TeamUIMessages.GenericHistoryTableProvider_Comment.length();
+			break;
+		} 
+		return new PixelConverter(viewer.getTree()).convertWidthInCharsToPixels(chars);
+	}
+
 	public void saveColumnLayout() {
 		TreeColumn columns[] = viewer.getTree().getColumns();
 		for (int i = 0; i < columns.length; i++) {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSProjectPropertiesPage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSProjectPropertiesPage.java
index bfefb28..526b7c2 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSProjectPropertiesPage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSProjectPropertiesPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,7 +70,7 @@ public class CVSProjectPropertiesPage extends CVSPropertiesPage {
 	
 	private class RepositorySelectionDialog extends Dialog {
 		ICVSRepositoryLocation[] allLocations;
-		ICVSRepositoryLocation[] compatibleLocatons;
+		ICVSRepositoryLocation[] compatibleLocations;
 		ICVSRepositoryLocation selectedLocation;
 		
 		TableViewer viewer;
@@ -90,7 +90,7 @@ public class CVSProjectPropertiesPage extends CVSPropertiesPage {
 					locations.add(location);
 				}
 			}
-			compatibleLocatons = (ICVSRepositoryLocation[]) locations.toArray(new ICVSRepositoryLocation[locations.size()]);
+			compatibleLocations = (ICVSRepositoryLocation[]) locations.toArray(new ICVSRepositoryLocation[locations.size()]);
 		}
 		protected void createButtonsForButtonBar(Composite parent) {
 			// create OK and Cancel buttons by default
@@ -113,7 +113,7 @@ public class CVSProjectPropertiesPage extends CVSPropertiesPage {
 			viewer.setContentProvider(new WorkbenchContentProvider() {
 				public Object[] getElements(Object inputElement) {
 					if (showCompatible) {
-						return compatibleLocatons;
+						return compatibleLocations;
 					} else {
 						return allLocations;
 					}
@@ -136,7 +136,7 @@ public class CVSProjectPropertiesPage extends CVSPropertiesPage {
 					okPressed();
 				}
 			});
-			viewer.setInput(compatibleLocatons);
+			viewer.setInput(compatibleLocations);
 			
 			final Button compatibleButton = createCheckBox(composite, CVSUIMessages.CVSProjectPropertiesPage_31); 
 			compatibleButton.setSelection(showCompatible);
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java
index dee1c25..a49af0f 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM - Initial API and implementation
  *     Maik Schreiber - bug 102461
  *     Philippe Ombredanne - bug 84808
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.ui;
 
@@ -73,8 +74,12 @@ public class CVSUIMessages extends NLS {
 	public static String CVSPreferencesPage_54;
 	public static String CVSPreferencesPage_55;
 	public static String CVSPreferencesPage_QuickDiffAnnotate;
+	public static String DiffOperation_ThePatchDoesNotContainAllTheChanges;
+	public static String DiffOperation_ThePatchMayNotContainAllTheChanges;
 	public static String DiffOperation_CreatePatchConflictMessage;
 	public static String DiffOperation_CreatePatchConflictTitle;
+	public static String DiffOperation_ErrorsOccurredWhileCreatingThePatch;
+	public static String DiffOperation_ErrorAddingFileToDiff;
 	public static String GenerateDiffFileWizard_11;
 	public static String GenerateDiffFileWizard_12;
 	public static String PasswordManagementPreferencePage_2;
@@ -435,6 +440,7 @@ public class CVSUIMessages extends NLS {
 	public static String HistoryFilterDialog_showMatching;
 	public static String HistoryFilterDialog_matchingAny;
 	public static String HistoryFilterDialog_matchingAll;
+	public static String HistoryFilterDialog_branchName;
 	public static String HistoryFilterDialog_author;
 	public static String HistoryFilterDialog_comment;
 	public static String HistoryFilterDialog_fromDate;
@@ -445,6 +451,7 @@ public class CVSUIMessages extends NLS {
 	public static String HistoryView_tagWithExistingAction;
 	public static String HistoryView_copy;
 	public static String HistoryView_revision;
+	public static String HistoryView_branches;
 	public static String HistoryView_tags;
 	public static String HistoryView_date;
 	public static String HistoryView_author;
@@ -1187,5 +1194,9 @@ public class CVSUIMessages extends NLS {
 	public static String ClipboardDiffOperation_Clipboard;
 	public static String CVSAction_doNotShowThisAgain;
 	
-
+	public static String CVSScmUrlImportWizardPage_0;
+	public static String CVSScmUrlImportWizardPage_1;
+	public static String CVSScmUrlImportWizardPage_2;
+	public static String CVSScmUrlImportWizardPage_3;
+	public static String CVSScmUrlImportWizardPage_4;
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommentTemplatesPreferencePage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommentTemplatesPreferencePage.java
index 23a6af9..f489cc6 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommentTemplatesPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommentTemplatesPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 Maik Schreiber.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    Maik Schreiber - initial API and implementation
- *    IBM - Bug 158656 Unlabeled list when empty
+ *    IBM - ongoing development
  *******************************************************************************/
 
 package org.eclipse.team.internal.ccvs.ui;
@@ -20,14 +20,7 @@ import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.*;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.internal.ccvs.core.util.Util;
 import org.eclipse.ui.*;
@@ -242,4 +235,11 @@ public class CommentTemplatesPreferencePage extends PreferencePage implements
 	public void init(IWorkbench workbench) {
 		// Nothing to do
 	}
+
+	protected void performDefaults() {
+		// default: the list of comments is cleaned
+		viewer.getList().removeAll();
+		super.performDefaults();
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommitCommentArea.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommitCommentArea.java
index 2f44962..c766006 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommitCommentArea.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CommitCommentArea.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,12 +55,12 @@ import org.eclipse.ui.texteditor.*;
  */
 public class CommitCommentArea extends DialogArea {
 
-    private class TextBox implements ModifyListener, TraverseListener, FocusListener, Observer {
+    private class TextBox implements ModifyListener, TraverseListener, FocusListener, Observer, IDocumentListener {
         
         private final StyledText fTextField; // updated only by modify events
         private final String fMessage;
-        
         private String fText;
+        private IDocument fDocument;
         
         public TextBox(Composite composite, String message, String initialText) {
             
@@ -86,8 +86,8 @@ public class CommitCommentArea extends DialogArea {
     		
             support.install(EditorsUI.getPreferenceStore());
             
-            final IHandlerService handlerService= (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
-            final IHandlerActivation handlerActivation= installQuickFixActionHandler(handlerService, sourceViewer);
+            final IHandlerService handlerService = (IHandlerService)PlatformUI.getWorkbench().getService(IHandlerService.class);
+            final IHandlerActivation handlerActivation = installQuickFixActionHandler(handlerService, sourceViewer);
             
             final TextViewerAction cutAction = new TextViewerAction(sourceViewer, ITextOperationTarget.CUT);
             cutAction.setText(CVSUIMessages.CommitCommentArea_7);
@@ -215,13 +215,13 @@ public class CommitCommentArea extends DialogArea {
 			
 			});
             
-            Document document = new Document(initialText);
+            fDocument = new Document(initialText);
 
             // NOTE: Configuration must be applied before the document is set in order for
             // Hyperlink coloring to work. (Presenter needs document object up front)
             sourceViewer.configure(new TextSourceViewerConfiguration(EditorsUI.getPreferenceStore()));
-            sourceViewer.setDocument(document, annotationModel);
-            
+            sourceViewer.setDocument(fDocument, annotationModel);
+            fDocument.addDocumentListener(this);
             fTextField.addTraverseListener(this);
             fTextField.addModifyListener(this);
             fTextField.addFocusListener(this);
@@ -272,7 +272,8 @@ public class CommitCommentArea extends DialogArea {
         public void modifyText(ModifyEvent e) {
             final String old = fText;
             fText = fTextField.getText();
-            firePropertyChangeChange(COMMENT_MODIFIED, old, fText);
+            if (!fText.equals(old))
+            	firePropertyChangeChange(COMMENT_MODIFIED, old, fText);
         }
         
         public void keyTraversed(TraverseEvent e) {
@@ -288,10 +289,12 @@ public class CommitCommentArea extends DialogArea {
                 return;
             
             fTextField.removeModifyListener(this);
+            fDocument.removeDocumentListener(this);
             try {
                 fTextField.setText(fText);
             } finally {
                 fTextField.addModifyListener(this);
+                fDocument.addDocumentListener(this);
             }
         }
         
@@ -301,11 +304,13 @@ public class CommitCommentArea extends DialogArea {
                 return;
             
             fTextField.removeModifyListener(this);
+            fDocument.removeDocumentListener(this);
             try {
                 fTextField.setText(fMessage);
                 fTextField.selectAll();
             } finally {
                 fTextField.addModifyListener(this);
+                fDocument.addDocumentListener(this);
             }
         }
         
@@ -334,7 +339,14 @@ public class CommitCommentArea extends DialogArea {
         public void setFocus() {
             fTextField.setFocus();
         }
-    }
+
+        public void documentAboutToBeChanged(DocumentEvent event) {
+        }
+
+        public void documentChanged(DocumentEvent event) {
+        	modifyText(null);
+        }
+	}
     
     private static class ComboBox extends Observable implements SelectionListener, FocusListener {
         
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ComparePreferencePage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ComparePreferencePage.java
index d704fbf..b5ec65f 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ComparePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ComparePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,7 @@ package org.eclipse.team.internal.ccvs.ui;
 import org.eclipse.compare.CompareUI;
 import org.eclipse.jface.preference.BooleanFieldEditor;
 import org.eclipse.jface.preference.IPreferencePageContainer;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.team.internal.ui.SWTUtils;
-import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
 /**
@@ -46,13 +43,7 @@ public class ComparePreferencePage extends CVSFieldEditorPreferencePage {
 		        ICVSUIConstants.PREF_CONSIDER_CONTENTS, 
 				CVSUIMessages.ComparePreferencePage_4,  
 				BooleanFieldEditor.DEFAULT, 
-				getFieldEditorParent()) {
-            protected Button getChangeControl(Composite parent) {
-                Button button = super.getChangeControl(parent);
-                PlatformUI.getWorkbench().getHelpSystem().setHelp(button, IHelpContextIds.PREF_CONSIDER_CONTENT);
-                return button;
-            }
-		});
+ getFieldEditorParent()));
 		addField(new BooleanFieldEditor(
 		        ICVSUIConstants.PREF_SHOW_COMPARE_REVISION_IN_DIALOG, 
 		        CVSUIMessages.ComparePreferencePage_3,  
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/EditorsView.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/EditorsView.java
index 74dd147..a1741a1 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/EditorsView.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/EditorsView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,32 +41,6 @@ public class EditorsView extends ViewPart {
 	private Table table;
 	private TableViewer tableViewer;
 
-	class EditorsContentProvider implements IStructuredContentProvider {
-
-		/**
-		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-		 */
-		public Object[] getElements(Object inputElement) {
-			return (EditorsInfo[]) inputElement;
-		}
-
-		/**
-		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-		 */
-		public void dispose() {
-		}
-
-		/**
-		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-		 */
-		public void inputChanged(
-			Viewer viewer,
-			Object oldInput,
-			Object newInput) {
-		}
-
-	}
-
 	class EditorsLabelProvider implements ITableLabelProvider {
 		/**
 		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
@@ -242,7 +216,7 @@ public class EditorsView extends ViewPart {
 		tableViewer = new TableViewer(table);
 		createColumns(table, layout);
 
-		tableViewer.setContentProvider(new EditorsContentProvider());
+		tableViewer.setContentProvider(ArrayContentProvider.getInstance());
 		tableViewer.setLabelProvider(new EditorsLabelProvider());
 		// set F1 help
         PlatformUI.getWorkbench().getHelpSystem().setHelp(tableViewer.getControl(), IHelpContextIds.CVS_EDITORS_VIEW);
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryTableProvider.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryTableProvider.java
index dfdeefb..c78f690 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryTableProvider.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryTableProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.ui;
 
@@ -45,10 +46,11 @@ public class HistoryTableProvider {
 
 	//column constants
 	private static final int COL_REVISION = 0;
-	private static final int COL_TAGS = 1;
-	private static final int COL_DATE = 2;
-	private static final int COL_AUTHOR = 3;
-	private static final int COL_COMMENT = 4;
+	private static final int COL_BRANCHES = 1;
+	private static final int COL_TAGS = 2;
+	private static final int COL_DATE = 3;
+	private static final int COL_AUTHOR = 4;
+	private static final int COL_COMMENT = 5;
 
 	/**
 	 * The history label provider.
@@ -69,9 +71,19 @@ public class HistoryTableProvider {
 						revision = NLS.bind(CVSUIMessages.currentRevision, new String[] { revision }); 
 					}
 					return revision;
+				case COL_BRANCHES:
+					CVSTag[] branches = entry.getBranches();
+					StringBuffer result = new StringBuffer();
+					for (int i = 0; i < branches.length; i++) {
+						result.append(branches[i].getName());
+						if (i < branches.length - 1) {
+							result.append(", "); //$NON-NLS-1$
+						}
+					}
+					return result.toString();
 				case COL_TAGS:
 					CVSTag[] tags = entry.getTags();
-					StringBuffer result = new StringBuffer();
+					result = new StringBuffer();
 					for (int i = 0; i < tags.length; i++) {
 						result.append(tags[i].getName());
 						if (i < tags.length - 1) {
@@ -157,13 +169,14 @@ public class HistoryTableProvider {
 		
 		private VersionCollator versionCollator = new VersionCollator();
 		
-		// column headings:	"Revision" "Tags" "Date" "Author" "Comment"
+		// column headings:	"Revision" "Branches" "Tags" "Date" "Author" "Comment"
 		private int[][] SORT_ORDERS_BY_COLUMN = {
-			{COL_REVISION, COL_DATE, COL_AUTHOR, COL_COMMENT, COL_TAGS},	/* revision */ 
-			{COL_TAGS, COL_REVISION, COL_DATE, COL_AUTHOR, COL_COMMENT},	/* tags */
-			{COL_DATE, COL_REVISION, COL_AUTHOR, COL_COMMENT, COL_TAGS},	/* date */
-			{COL_AUTHOR, COL_REVISION, COL_DATE, COL_COMMENT, COL_TAGS},	/* author */
-			{COL_COMMENT, COL_REVISION, COL_DATE, COL_AUTHOR, COL_TAGS}		/* comment */
+			{COL_REVISION, COL_DATE, COL_AUTHOR, COL_COMMENT, COL_TAGS, COL_BRANCHES},	/* revision */ 
+			{COL_BRANCHES, COL_REVISION, COL_DATE, COL_AUTHOR, COL_COMMENT, COL_TAGS},	/* tags */
+			{COL_TAGS, COL_REVISION, COL_DATE, COL_AUTHOR, COL_COMMENT, COL_BRANCHES},	/* tags */
+			{COL_DATE, COL_REVISION, COL_AUTHOR, COL_COMMENT, COL_TAGS, COL_BRANCHES},	/* date */
+			{COL_AUTHOR, COL_REVISION, COL_DATE, COL_COMMENT, COL_TAGS, COL_BRANCHES},	/* author */
+			{COL_COMMENT, COL_REVISION, COL_DATE, COL_AUTHOR, COL_TAGS, COL_BRANCHES}		/* comment */
 		};
 		
 		/**
@@ -199,9 +212,19 @@ public class HistoryTableProvider {
 		 */
 		int compareColumnValue(int columnNumber, ILogEntry e1, ILogEntry e2) {
 			switch (columnNumber) {
-				case 0: /* revision */
+				case COL_REVISION: /* revision */
 					return versionCollator.compare(e1.getRevision(), e2.getRevision());
-				case 1: /* tags */
+				case COL_BRANCHES: /* branches */
+					CVSTag[] branches1 = e1.getBranches();
+					CVSTag[] branches2 = e2.getBranches();
+					if (branches2.length == 0) {
+						return -1;
+					}
+					if (branches1.length == 0) {
+						return 1;
+					}
+					return getComparator().compare(branches1[0].getName(), branches2[0].getName());
+				case COL_TAGS: /* tags */
 					CVSTag[] tags1 = e1.getTags();
 					CVSTag[] tags2 = e2.getTags();
 					if (tags2.length == 0) {
@@ -211,13 +234,13 @@ public class HistoryTableProvider {
 						return 1;
 					}
 					return getComparator().compare(tags1[0].getName(), tags2[0].getName());
-				case 2: /* date */
+				case COL_DATE: /* date */
 					Date date1 = e1.getDate();
 					Date date2 = e2.getDate();
 					return date1.compareTo(date2);
-				case 3: /* author */
+				case COL_AUTHOR: /* author */
 					return getComparator().compare(e1.getAuthor(), e2.getAuthor());
-				case 4: /* comment */
+				case COL_COMMENT: /* comment */
 					return getComparator().compare(e1.getComment(), e2.getComment());
 				default:
 					return 0;
@@ -347,6 +370,13 @@ public class HistoryTableProvider {
 		col.addSelectionListener(headerListener);
 		layout.addColumnData(new ColumnWeightData(20, true));
 	
+		// branches
+		col = new TableColumn(table, SWT.NONE);
+		col.setResizable(true);
+		col.setText(CVSUIMessages.HistoryView_branches); 
+		col.addSelectionListener(headerListener);
+		layout.addColumnData(new ColumnWeightData(20, true));
+
 		// tags
 		col = new TableColumn(table, SWT.NONE);
 		col.setResizable(true);
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IHelpContextIds.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IHelpContextIds.java
index 486344e..5ce3097 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IHelpContextIds.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IHelpContextIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,8 @@ public interface IHelpContextIds {
     public static final String COMMIT_FILE_TYPES_PAGE = PREFIX + "commit_file_types_page_context"; //$NON-NLS-1$
     public static final String COMMIT_COMMENT_PAGE = PREFIX + "commit_comment_page_context"; //$NON-NLS-1$
     
+	public static final String CVS_SCM_URL_IMPORT_PAGE = PREFIX + "cvs_scm_url_import_page"; //$NON-NLS-1$
+
 	// Preference Pages
 	public static final String PREF_DEBUG_PROTOCOL = PREFIX + "debug_protocol_pref"; //$NON-NLS-1$
 	public static final String PREF_PRUNE = PREFIX + "prune_empty_directories_pref"; //$NON-NLS-1$
@@ -87,7 +89,6 @@ public interface IHelpContextIds {
 	public static final String PREF_KEYWORDMODE = PREFIX + "default_keywordmode_pref"; //$NON-NLS-1$
 	public static final String PREF_LINEEND = PREFIX + "line_end_pref"; //$NON-NLS-1$
 	public static final String PREF_COMMS_TIMEOUT = PREFIX + "comms_timeout_pref"; //$NON-NLS-1$
-	public static final String PREF_CONSIDER_CONTENT = PREFIX + "consider_content_pref"; //$NON-NLS-1$
 	public static final String PREF_REPLACE_DELETE_UNMANAGED = PREFIX + "replace_deletion_of_unmanaged_pref"; //$NON-NLS-1$
 	public static final String PREF_SAVE_DIRTY_EDITORS = PREFIX + "save_dirty_editors_pref"; //$NON-NLS-1$
 	public static final String PREF_CHANGE_PERSPECTIVE_ON_SHOW_ANNOTATIONS = PREFIX + "change_perspective_on_show_annotations"; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/Policy.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/Policy.java
index 8d34691..99b06e5 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/Policy.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/Policy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,10 +30,8 @@ public class Policy {
 
 	static {
 		//init debug options
-		if (CVSUIPlugin.getPlugin().isDebugging()) {
-			DEBUG_CONSOLE_BUFFERING = "true".equalsIgnoreCase(Platform.getDebugOption(CVSUIPlugin.ID + "/consolebuffering")); //$NON-NLS-1$ //$NON-NLS-2$
-			DEBUG_HISTORY = "true".equalsIgnoreCase(Platform.getDebugOption(CVSUIPlugin.ID + "/history")); //$NON-NLS-1$ //$NON-NLS-2$
-		}
+		DEBUG_CONSOLE_BUFFERING= "true".equalsIgnoreCase(Platform.getDebugOption(CVSUIPlugin.ID + "/consolebuffering")); //$NON-NLS-1$ //$NON-NLS-2$
+		DEBUG_HISTORY= "true".equalsIgnoreCase(Platform.getDebugOption(CVSUIPlugin.ID + "/history")); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithLatestRevisionAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithLatestRevisionAction.java
index 6c6f24c..3d223c1 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithLatestRevisionAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithLatestRevisionAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,9 +22,4 @@ public class ReplaceWithLatestRevisionAction extends ReplaceWithTagAction {
 	protected CVSTag getTag(ReplaceOperation replaceOperation) {
 		return CVSTag.BASE;
 	}
-	
-	public boolean isEnabled(){
-		return super.isEnabled();
-	}
-
-}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithSelectableTagAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithSelectableTagAction.java
index 0e44a22..f6dc8ca 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithSelectableTagAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithSelectableTagAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,5 +36,14 @@ public class ReplaceWithSelectableTagAction extends ReplaceWithTagAction {
 		}
 		return dialog.getResult();
 	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.team.internal.ccvs.ui.actions.ReplaceWithTagAction#getReplaceOperation()
+	 */
+	protected ReplaceOperation createReplaceOperation() {
+		ReplaceOperation replaceOperation= super.createReplaceOperation();
+		replaceOperation.ignoreResourcesWithMissingTag();
+		return replaceOperation;
+	}
 	
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithTagAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithTagAction.java
index f0814bb..0011ec3 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithTagAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithTagAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,11 +31,7 @@ public abstract class ReplaceWithTagAction extends WorkspaceTraversalAction {
 	 * Method declared on IActionDelegate.
 	 */
 	public void execute(IAction action) throws InterruptedException, InvocationTargetException {
-		
-		// Setup the holders
-		final CVSTag[] tag = new CVSTag[] {null};
-		
-		final ReplaceOperation replaceOperation = new ReplaceOperation(getTargetPart(), getCVSResourceMappings(), tag[0]);
+		final ReplaceOperation replaceOperation= createReplaceOperation();
 		if (hasOutgoingChanges(replaceOperation)) {
 			final boolean[] keepGoing = new boolean[] { true };
 			Display.getDefault().syncExec(new Runnable() {
@@ -52,11 +48,14 @@ public abstract class ReplaceWithTagAction extends WorkspaceTraversalAction {
 			if (!keepGoing[0])
 				return;
 		}
-		
+
+		// Setup the tag holder
+		final CVSTag[] tag= new CVSTag[] { null };
+
 		// Show a busy cursor while display the tag selection dialog
 		run(new IRunnableWithProgress() {
 			public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
-                monitor = Policy.monitorFor(monitor);
+				monitor= Policy.monitorFor(monitor);
 				tag[0] = getTag(replaceOperation);
 				
 				// finish, when tag can't be obtained
@@ -82,7 +81,16 @@ public abstract class ReplaceWithTagAction extends WorkspaceTraversalAction {
 		replaceOperation.setTag(tag[0]);
 		replaceOperation.run();
 	}
-	
+
+	/**
+	 * Creates and returns a new <code>ReplaceOperation</code>.
+	 * 
+	 * @return the created replace operation
+	 */
+	protected ReplaceOperation createReplaceOperation() {
+		return new ReplaceOperation(getTargetPart(), getCVSResourceMappings(), null);
+	}
+
 	/**
 	 * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle()
 	 */
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/RestoreFromRepositoryAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/RestoreFromRepositoryAction.java
index c9f0050..fc4cf9b 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/RestoreFromRepositoryAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/RestoreFromRepositoryAction.java
@@ -84,28 +84,30 @@ public class RestoreFromRepositoryAction extends WorkspaceTraversalAction {
                 	// Executed for every message line when in quiet mode.
                 	// See bug 238334
                 	CVSRepositoryLocation repo = (CVSRepositoryLocation)location;
-                	// Remove root directory
-                	String repoPath = line.substring(repo.getRootDirectory().length());
-    				try {
-    					String cmdRootRelativePath = commandRoot.getRepositoryRelativePath();
-    					// Remove command root path
-						String path = repoPath.substring(repoPath.indexOf(cmdRootRelativePath)	+ cmdRootRelativePath.length());
-    					// Remove filename at the end
-    					String folderPath = path.substring(0, path.indexOf(fileName));
-    					// The "raw" folderPath contains CVS's 'Attic/' segment when a file has been deleted from cvs.
-    					if (folderPath.endsWith(ATTIC)) {
-							folderPath = folderPath.substring(0, folderPath.length() - ATTIC_LENGTH);
-						}
-    					// A separator means the same as "current folder"
-						if (folderPath.equals(Session.SERVER_SEPARATOR))
-							folderPath = Session.CURRENT_LOCAL_FOLDER;
-						ICVSFolder folder = commandRoot.getFolder(folderPath);
-    					ICVSFile file = folder.getFile(fileName);
-    					if (!file.exists())
-    						atticFiles.add(file);
-    				} catch (CVSException e) {
-    					return e.getStatus();
-    				}
+                	// If exists, remove root directory
+                	if (line.startsWith(repo.getRootDirectory())) {
+                		String repoPath = line.substring(repo.getRootDirectory().length());
+                		try {
+                			String cmdRootRelativePath = commandRoot.getRepositoryRelativePath();
+                			// Remove command root path
+                			String path = repoPath.substring(repoPath.indexOf(cmdRootRelativePath)	+ cmdRootRelativePath.length());
+                			// Remove filename at the end
+                			String folderPath = path.substring(0, path.indexOf(fileName));
+                			// The "raw" folderPath contains CVS's 'Attic/' segment when a file has been deleted from cvs.
+                			if (folderPath.endsWith(ATTIC)) {
+                				folderPath = folderPath.substring(0, folderPath.length() - ATTIC_LENGTH);
+                			}
+                			// A separator means the same as "current folder"
+                			if (folderPath.equals(Session.SERVER_SEPARATOR))
+                				folderPath = Session.CURRENT_LOCAL_FOLDER;
+                			ICVSFolder folder = commandRoot.getFolder(folderPath);
+                			ICVSFile file = folder.getFile(fileName);
+                			if (!file.exists())
+                				atticFiles.add(file);
+                		} catch (CVSException e) {
+                			return e.getStatus();
+                		}
+                	}
                 }
             }
 			return OK;
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceAction.java
index da41420..2b538d3 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,12 +57,12 @@ public abstract class WorkspaceAction extends CVSAction {
 			// Ensure that the required sync info is loaded
 			if (requiresLocalSyncInfo()) {
 				// There is a possibility of the selection containing an orphaned subtree.
-				// If it does, they will be purged and enablement rechecked before the 
+				// If it does, they will be purged and enablement rechecked before the
 				// operation is performed.
 				handleOrphanedSubtrees();
 				// Check enablement just in case the sync info wasn't loaded
 				if (!isEnabled()) {
-					MessageDialog.openInformation(getShell(), CVSUIMessages.CVSAction_disabledTitle, CVSUIMessages.CVSAction_disabledMessage); // 
+					MessageDialog.openInformation(getShell(), CVSUIMessages.CVSAction_disabledTitle, CVSUIMessages.CVSAction_disabledMessage); //
 					return false;
 				}
 			}
@@ -207,7 +207,7 @@ public abstract class WorkspaceAction extends CVSAction {
 	protected void setActionEnablement(IAction action) {
 		try {
 			boolean requires = requiresLocalSyncInfo();
-			if (!requires || (requires && isSyncInfoLoaded(getSelectedResources()))) {
+			if (!requires || isSyncInfoLoaded(getSelectedResources())) {
 				super.setActionEnablement(action);
 			} else {
 				// If the sync info is not loaded, enable the menu item
@@ -249,11 +249,11 @@ public abstract class WorkspaceAction extends CVSAction {
 				}
 				String question;
 				if (resources.length == 1) {
-					question = NLS.bind(CVSUIMessages.CVSAction_refreshQuestion, new String[] { status.getMessage(), resources[0].getFullPath().toString() }); 
+					question = NLS.bind(CVSUIMessages.CVSAction_refreshQuestion, new String[] { status.getMessage(), resources[0].getFullPath().toString() });
 				} else {
-					question = NLS.bind(CVSUIMessages.CVSAction_refreshMultipleQuestion, new String[] { status.getMessage() }); 
+					question = NLS.bind(CVSUIMessages.CVSAction_refreshMultipleQuestion, new String[] { status.getMessage() });
 				}
-				result[0] = MessageDialog.openQuestion(shellToUse, CVSUIMessages.CVSAction_refreshTitle, question); 
+				result[0] = MessageDialog.openQuestion(shellToUse, CVSUIMessages.CVSAction_refreshTitle, question);
 			}
 		};
 		Display.getDefault().syncExec(runnable);
@@ -319,7 +319,7 @@ public abstract class WorkspaceAction extends CVSAction {
 				return false;
 			}
 			
-			// collect files and folders separately to check for overlap later	
+			// collect files and folders separately to check for overlap later
 			IPath resourceFullPath = resource.getFullPath();
 			if(resource.getType() == IResource.FILE) {
 				filePaths.add(resourceFullPath);
@@ -461,7 +461,7 @@ public abstract class WorkspaceAction extends CVSAction {
 		try {
 			IResource[] resources = getSelectedResources();
 			CVSTag commonTag = null;
-			boolean sameTagType = true; 
+			boolean sameTagType = true;
 			boolean multipleSameNames = true;
 			
 			for (int i = 0; i < resources.length; i++) {
@@ -470,7 +470,7 @@ public abstract class WorkspaceAction extends CVSAction {
 				if(cvsResource.isFolder()) {
 					FolderSyncInfo info = ((ICVSFolder)cvsResource).getFolderSyncInfo();
 					if(info != null) {
-						tag = info.getTag();									
+						tag = info.getTag();
 					}
 					if (tag != null && tag.getType() == CVSTag.BRANCH) {
 						tag = Util.getAccurateFolderTag(resources[i], tag);
@@ -483,7 +483,7 @@ public abstract class WorkspaceAction extends CVSAction {
 				}
 				if(commonTag == null) {
 					commonTag = tag;
-				} else if(!commonTag.equals(tag)) {					
+				} else if(!commonTag.equals(tag)) {
 					if(commonTag.getType() != tag.getType()) {
 						sameTagType = false;
 					}
@@ -494,25 +494,25 @@ public abstract class WorkspaceAction extends CVSAction {
 			}
 			
 			// set text to default
-			String actionText = CVSUIMessages.ReplaceWithLatestAction_multipleTags; 
+			String actionText = CVSUIMessages.ReplaceWithLatestAction_multipleTags;
 			if(commonTag != null) {
 				int tagType = commonTag.getType();
 				String tagName = commonTag.getName();
 				// multiple tag names but of the same type
 				if(sameTagType && !multipleSameNames) {
 					if(tagType == CVSTag.BRANCH) {
-						actionText = CVSUIMessages.ReplaceWithLatestAction_multipleBranches; //					
+						actionText = CVSUIMessages.ReplaceWithLatestAction_multipleBranches; //
 					} else {
-						actionText = CVSUIMessages.ReplaceWithLatestAction_multipleVersions; 
+						actionText = CVSUIMessages.ReplaceWithLatestAction_multipleVersions;
 					}
 				// same tag names and types
 				} else if(sameTagType && multipleSameNames) {
 					if(tagType == CVSTag.BRANCH) {
-						actionText = NLS.bind(CVSUIMessages.ReplaceWithLatestAction_singleBranch, new String[] { tagName }); //					
+						actionText = NLS.bind(CVSUIMessages.ReplaceWithLatestAction_singleBranch, new String[] { tagName }); //
 					} else if(tagType == CVSTag.VERSION){
-						actionText = NLS.bind(CVSUIMessages.ReplaceWithLatestAction_singleVersion, new String[] { tagName }); 
+						actionText = NLS.bind(CVSUIMessages.ReplaceWithLatestAction_singleVersion, new String[] { tagName });
 					} else if(tagType == CVSTag.HEAD) {
-						actionText = NLS.bind(CVSUIMessages.ReplaceWithLatestAction_singleHEAD, new String[] { tagName }); 
+						actionText = NLS.bind(CVSUIMessages.ReplaceWithLatestAction_singleHEAD, new String[] { tagName });
 					}
 				}
 			}
@@ -520,7 +520,7 @@ public abstract class WorkspaceAction extends CVSAction {
 			return actionText;
 		} catch (CVSException e) {
 			// silently ignore
-			return CVSUIMessages.ReplaceWithLatestAction_multipleTags; // 
+			return CVSUIMessages.ReplaceWithLatestAction_multipleTags; //
 		}
 	}
 
@@ -531,19 +531,19 @@ public abstract class WorkspaceAction extends CVSAction {
 		try {
 			monitor = Policy.monitorFor(monitor);
 			monitor.beginTask(null, selectedResources.length * 100);
-			monitor.setTaskName(CVSUIMessages.ReplaceWithAction_calculatingDirtyResources); 
+			monitor.setTaskName(CVSUIMessages.ReplaceWithAction_calculatingDirtyResources);
 			for (int i = 0; i < selectedResources.length; i++) {
 				IResource resource = selectedResources[i];
 				ICVSResource cvsResource = getCVSResourceFor(resource);
 				if(cvsResource.isModified(Policy.subMonitorFor(monitor, 100))) {
 					dirtyResources.add(resource);
-				}			
+				}
 			}
 		} finally {
-			monitor.done();		
+			monitor.done();
 		}
 		
-		PromptingDialog dialog = new PromptingDialog(getShell(), selectedResources, 
+		PromptingDialog dialog = new PromptingDialog(getShell(), selectedResources,
 				getPromptCondition((IResource[]) dirtyResources.toArray(new IResource[dirtyResources.size()])), CVSUIMessages.ReplaceWithAction_confirmOverwrite);
 		return dialog.promptForMultiple();
 	}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
index 6f40a7e..4a63876 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -93,13 +93,7 @@ public abstract class WorkspaceTraversalAction extends WorkspaceAction {
 	}
 	
     protected IResource[] getResourcesToCompare(final Subscriber subscriber) throws InvocationTargetException {
-    	ISynchronizationScopeManager manager = new SynchronizationScopeManager("",  //$NON-NLS-1$
-    			getCVSResourceMappings(), SubscriberResourceMappingContext.createContext(subscriber), true);
-    	try {
-    		return getResourcesToCompare(manager);
-    	} finally {
-    		manager.dispose();
-    	}
+    	return getResourcesToCompare(getCVSResourceMappings(), subscriber);
     }
     
     protected ResourceMappingContext getResourceMappingContext() {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/actions.properties b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/actions.properties
index 093d67d..9743098 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/actions.properties
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/actions.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -39,7 +39,7 @@ WorkspaceUpdateAction.label=&Update
 WorkspaceUpdateAction.tooltip=Perform an update on the selected resources
 WorkspaceUpdateAction.helpContextId=org.eclipse.team.cvs.ui.workspace_update_action
 
-OverrideAndUpdateAction.label=O&verride and Update
+OverrideAndUpdateAction.label=Overr&ide and Update
 OverrideAndUpdateAction.tooltip=Perform an override and update on the selected resources. This will make the local contents equal to the remote ignoring any local changes.
 OverrideAndUpdateAction.helpContextId=org.eclipse.team.cvs.ui.workspace_overupdate_action
 
@@ -55,14 +55,14 @@ OverrideAndCommitAction.label=Override and Comm&it...
 OverrideAndCommitAction.tooltip=Perform an override and commit on the selected resources. This will make the remote contents equal to the local ignoring any remote changes.
 OverrideAndCommitAction.helpContextId=org.eclipse.team.cvs.ui.workspace_overcommit_action
 
-ConfirmMergedAction.label=&Mark as Merged
+ConfirmMergedAction.label=Mar&k as Merged
 ConfirmMergedAction.tooltip=Mark the conflict as merged by upgrading the base to match the remote
 ConfirmMergedAction.helpContextId=org.eclipse.team.cvs.ui.workspace_confirm_merged_action
 
 BranchAction.label=&Branch...
 BranchAction.tooltip=Branch
 
-IgnoreAction.label=A&dd to .cvsignore...
+IgnoreAction.label=Add to .cvsi&gnore...
 IgnoreAction.tooltip=Ignore the Selected Resources when Synchronizing
 
 ShowResourceInHistoryAction.label=Sho&w in History
@@ -71,7 +71,7 @@ ShowResourceInHistoryAction.tooltip=Show in History
 ShowAnnotationAction.label=Show &Annotation
 ShowAnnotationAction.tooltip=Show Annotation
 
-GenerateDiffFileAction.label=Create &Patch...
+GenerateDiffFileAction.label=Create Pa&tch...
 GenerateDiffFileAction.tooltip=Compare your workspace contents with the server and generate a diff file that can be used as a patch file.
 
 ApplyPatchAction.label=Appl&y Patch...
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java
index 3a1de7f..1db9e9e 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -198,14 +198,29 @@ public class ChangeSetActionProvider extends ResourceModelActionProvider {
 	}
 
 	private class MakeDefaultChangeSetAction extends ChangeSetAction {
-        public MakeDefaultChangeSetAction(ISynchronizePageConfiguration configuration) {
+		public MakeDefaultChangeSetAction(
+				ISynchronizePageConfiguration configuration) {
 			super(TeamUIMessages.ChangeLogModelProvider_9, configuration);
 		}
 
+		protected boolean updateSelection(IStructuredSelection selection) {
+			if (getSelectedSet() != null) {
+				setText(TeamUIMessages.ChangeLogModelProvider_9);
+				setChecked(getSelectedSet().equals(
+						getActiveChangeSetManager().getDefaultSet()));
+			} else {
+				setText(TeamUIMessages.ChangeLogModelProvider_10);
+				setChecked(false);
+			}
+			return true;
+		}
+
 		public void run() {
-			ActiveChangeSet set = getSelectedSet();
-            if (set == null) return;
-			getActiveChangeSetManager().makeDefault(set);
+			getActiveChangeSetManager().makeDefault(
+					isChecked() ? getSelectedSet() : null);
+			if (getSelectedSet() == null) {
+				setChecked(false); // keep unchecked
+			}
 		}
 	}
 
@@ -353,9 +368,9 @@ public class ChangeSetActionProvider extends ResourceModelActionProvider {
 
 				addChangeSets(addToChangeSet);
 
-				if (getSelectedActiveChangeSet(selection) == null)
-					return;
-				appendToGroup(menu, CHANGE_SET_GROUP, editChangeSet);
+				if (getSelectedActiveChangeSet(selection) != null) {
+					appendToGroup(menu, CHANGE_SET_GROUP, editChangeSet);
+				}
 				appendToGroup(menu, CHANGE_SET_GROUP, makeDefault);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
index 82b8e81..1d280c1 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
 #     IBM Corporation - initial API and implementation
 #     Maik Schreiber - bug 102461
 #     Philippe Ombredanne - bug 84808
+#     Olexiy Buyanskyy <olexiyb at gmail.com> - Bug 76386 - [History View] CVS Resource History shows revisions from all branches
 ###############################################################################
 PasswordManagementPreferencePage_2=When you create a CVS repository location you have the option of saving the password to disk. This page allows you to manage the stored passwords. The following CVS repository locations have saved passwords:
 PasswordManagementPreferencePage_3=Location
@@ -193,7 +194,7 @@ CVSPreferencesPage_14=&General
 CVSPreferencesPage_15=&Validate server version compatibility on first connection
 CVSPreferencesPage_16=Confirm &move tag on tag operation
 CVSPreferencesPage_17=D&isplay detailed protocol output to stdout (for debugging purposes)
-CVSPreferencesPage_18=R&efresh tags when comparing or replacing tags
+CVSPreferencesPage_18=Automatically r&efresh tags
 CVSPreferencesPage_19=&Connection
 CVSPreferencesPage_23=C&onnection timeout (s):
 CVSPreferencesPage_24=Timeout must be positive
@@ -259,8 +260,8 @@ CVSRepositoryLocationPropertySource_port=Port
 CVSRepositoryLocationPropertySource_root=Repository path
 CVSRepositoryLocationPropertySource_method=Connection method
 
-CVSParticipant_0=Remote File ({0} - {1})
-CVSParticipant_1=Common Ancestor ({0} - {1})
+CVSParticipant_0=Remote File {0} ({1})
+CVSParticipant_1=Common Ancestor {0} ({1})
 CVSParticipant_2=C&VS
 
 CVSUIPlugin_refreshTitle=Refresh Resource?
@@ -380,10 +381,11 @@ GenerateCVSDiff_2=The specified file is read-only and cannot be overwritten.
 
 HistoryFilterDialog_title = Filter Resource History
 HistoryFilterDialog_showMatching = Show entries matching:
-HistoryFilterDialog_matchingAny = a&ny of the provided criteria
-HistoryFilterDialog_matchingAll = a&ll of the provided criteria
-HistoryFilterDialog_author = &Author:
-HistoryFilterDialog_comment = &Comment containing:
+HistoryFilterDialog_matchingAny = A&ny of the provided criteria
+HistoryFilterDialog_matchingAll = A&ll of the provided criteria
+HistoryFilterDialog_branchName = &Branches contain:
+HistoryFilterDialog_author = &Author matches:
+HistoryFilterDialog_comment = &Comment contains:
 HistoryFilterDialog_fromDate = &From date:
 HistoryFilterDialog_toDate = &To date:
 
@@ -392,6 +394,7 @@ HistoryView_getRevisionAction=Get Sticky &Revision
 HistoryView_tagWithExistingAction=&Tag with Existing...
 HistoryView_copy=&Copy
 HistoryView_revision=Revision
+HistoryView_branches=Branches
 HistoryView_tags=Tags
 HistoryView_date=Date
 HistoryView_author=Author
@@ -993,8 +996,8 @@ GenerateDiffFileWizard_7=&Project
 GenerateDiffFileWizard_8=S&election
 GenerateDiffFileWizard_9=Save Patch
 GenerateDiffFileWizard_10=Patch Root
-GenerateDiffFileWizard_11=Include Binary Files?
-GenerateDiffFileWizard_12=The selected resources include files marked as binary: e.g. {0}.\n\nCVS does not handle the creation of patches for binary files. Should the files marked as binary be included?
+GenerateDiffFileWizard_11=Create Patch with Binary Files
+GenerateDiffFileWizard_12=CVS does not handle the creation of patches for binary files but some of the selected resources include files marked as binary, e.g. {0}.\n\n Include files marked as binary anyway?
 GenerateDiffFileWizard_File_multisegments=File name cannot contain multiple segments
 GenerateDiffFileWizard_SelectAll=Select &All
 GenerateDiffFileWizard_DeselectAll=&Deselect All
@@ -1024,7 +1027,7 @@ ComparePreferencePage_0=Options for CVS comparisons:
 ComparePreferencePage_1=Show the &file author in compare editors
 ComparePreferencePage_2=Automatically enable chan&ge set grouping in CVS synchronizations
 ComparePreferencePage_3=Show revision &comparisons in a dialog
-ComparePreferencePage_4=Con&sider file contents in comparisons
+ComparePreferencePage_4=Con&sider file contents in remote comparisons
 ComparePreferencePage_6=See <a>''{0}''</a> for compare editor preferences.
 ComparePreferencePage_7=Allow &models (e.g. Java) to participate in synchronizations
 ComparePreferencePage_8=&Open a compare editor when comparing a single file
@@ -1203,9 +1206,19 @@ AnnotatePreferencePage_AnnotatePrefPageTitle=Annotate
 AnnotatePreferencePage_AnnotatePrefPageMessage=Options for CVS Annotate:
 AnnotatePreferencePage_AnnotatePrefPageBinaryFileMessage=Attempt to annotate a &binary file
 DiffOperation_CreatePatchConflictTitle=Patch Already Being Created
+DiffOperation_ThePatchDoesNotContainAllTheChanges=The patch does not contain all the changes
+DiffOperation_ThePatchMayNotContainAllTheChanges=The patch may not contain all the changes
 DiffOperation_CreatePatchConflictMessage=A patch is already in the process of being written to {0}. Do you want to cancel the previous patch creation and continue with this one?
+DiffOperation_ErrorsOccurredWhileCreatingThePatch = Errors occurred while creating the patch
+DiffOperation_ErrorAddingFileToDiff = An I/O error occurred adding file ''{0}'' to the patch output.
 ClipboardDiffOperation_Clipboard=the clipboard
 RemoveRootAction_RepositoryRemovalDialogMessageSingle=Are you sure you want to discard ''{0}''?
 RemoveRootAction_RepositoryRemovalDialogMessageMultiple=Are you sure you want to discard these {0} repositories?
 AddAction_confirmAddingResourcesTitle=Confirm adding resources to Version Control
 AddAction_confirmAddingResourcesMessage=Are you sure you want to add selected resources to the version control?
+
+CVSScmUrlImportWizardPage_0=Import Projects from CVS
+CVSScmUrlImportWizardPage_1=Import CVS projects corresponding to plug-ins and fragments in the file system.
+CVSScmUrlImportWizardPage_2=Import from &HEAD
+CVSScmUrlImportWizardPage_3=Import the indicated &version
+CVSScmUrlImportWizardPage_4=Total: {0}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/CVSOperation.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/CVSOperation.java
index ebd17a6..8ecddc7 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/CVSOperation.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/CVSOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,9 +12,7 @@ package org.eclipse.team.internal.ccvs.ui.operations;
 
 import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.*;
@@ -253,8 +251,7 @@ public abstract class CVSOperation extends TeamOperation implements IShellProvid
 	/**
 	 * Return the string that is to be used as the task name for the operation
 	 * 
-	 * @param remoteFolders
-	 * @return
+	 * @return the task name
 	 */
 	protected abstract String getTaskName();
 	
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/DiffOperation.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/DiffOperation.java
index c21c3fe..ac78d9b 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/DiffOperation.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/DiffOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -311,17 +311,25 @@ public abstract class DiffOperation extends SingleCommandOperation {
 		IStatus status = ex.getStatus();
 		List toShow = new ArrayList();
 		IStatus children[] = status.getChildren();
+		boolean may = true;
 		for (int i = 0; i < children.length; i++) {
-			if (children[i].getCode() == CVSStatus.BINARY_FILES_DIFFER) {
+			// ignore all errors except those found by DiffListener
+			if (children[i].getCode() == CVSStatus.BINARY_FILES_DIFFER
+					|| children[i].getCode() == CVSStatus.PROTOCOL_ERROR
+					|| children[i].getCode() == CVSStatus.ERROR_LINE) {
 				toShow.add(children[i]);
+				if (children[i].getCode() == CVSStatus.BINARY_FILES_DIFFER)
+					// the patch does not contain some changes for sure
+					may = false;
 			}
 		}
 		if (toShow.size() > 0) {
+			String msg = may ? CVSUIMessages.DiffOperation_ThePatchMayNotContainAllTheChanges
+					: CVSUIMessages.DiffOperation_ThePatchDoesNotContainAllTheChanges;
 			status = new MultiStatus(CVSProviderPlugin.ID,
-					CVSStatus.SERVER_ERROR, (IStatus[]) toShow
-							.toArray(new IStatus[0]),
-					CVSMessages.ThePatchDoesNotContainAllTheChanges, null);
-			CVSUIPlugin.openError(getShell(), null, null, status,
+					CVSStatus.SERVER_ERROR,
+					(IStatus[]) toShow.toArray(new IStatus[0]), CVSUIMessages.DiffOperation_ErrorsOccurredWhileCreatingThePatch, null);
+			CVSUIPlugin.openError(getShell(), this.getTaskName(), msg, status,
 					CVSUIPlugin.PERFORM_SYNC_EXEC
 							| CVSUIPlugin.LOG_OTHER_EXCEPTIONS);
 		}
@@ -394,7 +402,7 @@ public abstract class DiffOperation extends SingleCommandOperation {
 				lines++;
 			}
 		} catch (IOException e) {
-			throw CVSException.wrapException(file.getIResource(), NLS.bind(CVSMessages.CVSTeamProvider_errorAddingFileToDiff, new String[] { pathString }), e); 
+			throw CVSException.wrapException(file.getIResource(), NLS.bind(CVSUIMessages.DiffOperation_ErrorAddingFileToDiff, new String[] { pathString }), e);
 		} finally {
 			try {
 				fileReader.close();
@@ -458,7 +466,7 @@ public abstract class DiffOperation extends SingleCommandOperation {
 			printStream.print(linePrefix);
 			readLastLine(fileReader, printStream);
 		} catch (IOException e) {
-			throw CVSException.wrapException(file.getIResource(), NLS.bind(CVSMessages.CVSTeamProvider_errorAddingFileToDiff, new String[] { pathString }), e); 
+			throw CVSException.wrapException(file.getIResource(), NLS.bind(CVSUIMessages.DiffOperation_ErrorAddingFileToDiff, new String[] { pathString }), e);
 		} finally  {
 			try {
 				fileReader.close();
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ProjectMetaFileOperation.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ProjectMetaFileOperation.java
index ad69d01..88fcb22 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ProjectMetaFileOperation.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ProjectMetaFileOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,7 +76,7 @@ public class ProjectMetaFileOperation extends CVSOperation {
 		metaFileExists = false;
 		monitor.beginTask(null, folders.length*100);
 		for (int i = 0; i < folders.length; i++) {
-			// make a copy of the folder so that we will not effect the original
+			// make a copy of the folder so that we will not affect the original
 			// folder when we refetch the members
 			// TODO: this is a strange thing to need to do. We should fix this.
 			ICVSRemoteFolder folder = (ICVSRemoteFolder) folders[i].forTag(folders[i].getTag());
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ReplaceOperation.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ReplaceOperation.java
index 2c60740..0353644 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ReplaceOperation.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ReplaceOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,8 +20,8 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.internal.ccvs.core.*;
-import org.eclipse.team.internal.ccvs.core.client.*;
 import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
+import org.eclipse.team.internal.ccvs.core.client.*;
 import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
 import org.eclipse.team.internal.ccvs.core.util.PrepareForReplaceVisitor;
 import org.eclipse.team.internal.ccvs.ui.*;
@@ -81,9 +81,19 @@ public class ReplaceOperation extends UpdateOperation {
 	// Files deleted by the PrepareForReplaceVisitor.
 	private Set/*<ICVSFile>*/ prepDeletedFiles;
 
+	/**
+	 * Tells whether resources for which the given tag does not exists, are ignored by the replace
+	 * operation.
+	 */
+	private boolean ignoreResourcesIfTagDoesNotExist;
+
+
     private IStatus internalExecuteCommand(Session session, CVSTeamProvider provider, ICVSResource[] resources, boolean recurse, IProgressMonitor monitor) throws CVSException, InterruptedException {
         monitor.beginTask(null, 100);
         ICVSResource[] managedResources = getResourcesToUpdate(resources, Policy.subMonitorFor(monitor, 5));
+		if (ignoreResourcesIfTagDoesNotExist && managedResources.length == 0)
+			return OK;
+
         try {
         	// Purge any unmanaged or added files
         	PrepareForReplaceVisitor pfrv = new PrepareForReplaceVisitor(session, getTag());
@@ -188,4 +198,11 @@ public class ReplaceOperation extends UpdateOperation {
 	protected String getTaskName(CVSTeamProvider provider) {
 		return NLS.bind(CVSUIMessages.ReplaceOperation_0, new String[] { provider.getProject().getName() }); 
 	}
+
+	/**
+	 * Tells to ignore resources for which the given tag does not exists.
+	 */
+	public void ignoreResourcesWithMissingTag() {
+		ignoreResourcesIfTagDoesNotExist= true;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ShareProjectOperation.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ShareProjectOperation.java
index 060b18e..217df77 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ShareProjectOperation.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/ShareProjectOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,7 +102,7 @@ public class ShareProjectOperation extends CVSOperation {
 	 * Repository Provider with the project and, at the very least,
 	 * assigning the folder sync info for the remote folder as the
 	 * folder sync info for the project.
-	 * @param remote the remote folder to which the projetc is being mapped
+	 * @param remote the remote folder to which the project is being mapped
 	 * @param monitor a progress monitor
 	 * @throws CVSException
 	 */
@@ -185,9 +185,9 @@ public class ShareProjectOperation extends CVSOperation {
 	}
 	
 	/**
-	 * Method findCommonRootInSubfolders.
-	 * @param monitor 
-	 * @return String
+	 * Purge any CVS folders.
+	 * 
+	 * @param monitor a progress monitor
 	 */
 	private void purgeAnyCVSFolders(final IProgressMonitor monitor) {
 		try {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/TagInRepositoryOperation.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/TagInRepositoryOperation.java
index e34526a..dd6d9c2 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/TagInRepositoryOperation.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/TagInRepositoryOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,8 +17,7 @@ import java.util.Set;
 import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.internal.ccvs.core.*;
-import org.eclipse.team.internal.ccvs.core.client.Command;
-import org.eclipse.team.internal.ccvs.core.client.RTag;
+import org.eclipse.team.internal.ccvs.core.client.*;
 import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
 import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
 import org.eclipse.team.internal.ccvs.ui.actions.TagAction;
@@ -82,9 +81,6 @@ public class TagInRepositoryOperation extends RemoteOperation implements ITagOpe
 		this.tag = tag;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.team.internal.ccvs.ui.operations.ITagOperation#addLocalOption(org.eclipse.team.internal.ccvs.core.client.Command.LocalOption)
-	 */
 	public void addLocalOption(LocalOption option)  {
 		localOptions.add(option);
 	}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java
index ac3bd29..8f26652 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,9 +10,7 @@
  *******************************************************************************/
 package org.eclipse.team.internal.ccvs.ui.operations;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.resources.mapping.ResourceMappingContext;
@@ -27,7 +25,7 @@ import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
 import org.eclipse.ui.IWorkbenchPart;
 
 /**
- * This operation performs an update that will only effect files
+ * This operation performs an update that will only affect files
  * that have no conflicts or automergable conflicts.
  */
 public class UpdateOnlyMergableOperation extends SingleCommandOperation {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSRepositoryPropertiesPage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSRepositoryPropertiesPage.java
index 57fc34c..8e2ebdd 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSRepositoryPropertiesPage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSRepositoryPropertiesPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -310,6 +310,7 @@ public class CVSRepositoryPropertiesPage extends PropertyPage {
 		}
 		pathText.setText(location.getRootDirectory());
 		allowCachingButton.setSelection(location.getUserInfoCached());
+		allowCaching = allowCachingButton.getSelection();
 		
 		// get the repository label
 		String label = null;
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/PasteConnectionStringAction.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/PasteConnectionStringAction.java
index a49594a..4e8cd2a 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/PasteConnectionStringAction.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/PasteConnectionStringAction.java
@@ -38,7 +38,7 @@ public class PasteConnectionStringAction extends ActionDelegate implements
 				StringTokenizer st = new StringTokenizer((String) contents,
 						System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
 				while (st.hasMoreTokens()) {
-					String connectionString = st.nextToken();
+					String connectionString = st.nextToken().trim();
 					CVSRepositoryLocation location = CVSRepositoryLocation
 							.fromString(connectionString);
 					if (location != null) {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionWizardPage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionWizardPage.java
index 5268b8f..947db04 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionWizardPage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@ import org.eclipse.swt.events.*;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
+import org.eclipse.team.internal.ccvs.ui.*;
 import org.eclipse.team.internal.ccvs.ui.wizards.CVSWizardPage;
 import org.eclipse.team.internal.ui.PixelConverter;
 import org.eclipse.team.internal.ui.SWTUtils;
@@ -146,8 +146,12 @@ public class TagSelectionWizardPage extends CVSWizardPage {
 	
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
+
 		if (visible && tagArea != null) {
 			tagArea.setFocus();
+			if (CVSUIPlugin.getPlugin().getPreferenceStore().getBoolean(ICVSUIConstants.PREF_AUTO_REFRESH_TAGS_IN_TAG_SELECTION_DIALOG)) {
+				tagArea.refreshTagList();
+			}
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CVSScmUrlImportWizardPage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CVSScmUrlImportWizardPage.java
new file mode 100644
index 0000000..3e56087
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CVSScmUrlImportWizardPage.java
@@ -0,0 +1,255 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.ui.wizards;
+
+import java.net.URI;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.team.core.RepositoryProviderType;
+import org.eclipse.team.core.ScmUrlImportDescription;
+import org.eclipse.team.internal.ccvs.core.filesystem.CVSURI;
+import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
+import org.eclipse.team.internal.ccvs.ui.IHelpContextIds;
+import org.eclipse.team.internal.ui.SWTUtils;
+import org.eclipse.team.ui.IScmUrlImportWizardPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+
+public class CVSScmUrlImportWizardPage extends WizardPage implements IScmUrlImportWizardPage {
+	
+	private RepositoryProviderType provider;
+	private ScmUrlImportDescription[] descriptions;
+	private Button useHead;
+	private TableViewer bundlesViewer;
+	private Label counterLabel;
+
+	private static final String CVS_PAGE_USE_HEAD = "org.eclipse.team.cvs.ui.import.page.head"; //$NON-NLS-1$
+
+	class CVSLabelProvider extends StyledCellLabelProvider implements ILabelProvider {
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(Object element) {
+			return PlatformUI.getWorkbench().getSharedImages().getImage(IDE.SharedImages.IMG_OBJ_PROJECT);
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(Object element) {
+			return getStyledText(element).getString();
+		}
+
+		/* (non-Javadoc)
+		 * @see org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
+		 */
+		public void update(ViewerCell cell) {
+			StyledString string = getStyledText(cell.getElement());
+			cell.setText(string.getString());
+			cell.setStyleRanges(string.getStyleRanges());
+			cell.setImage(getImage(cell.getElement()));
+			super.update(cell);
+		}
+
+		private StyledString getStyledText(Object element) {
+			StyledString styledString = new StyledString();
+			if (element instanceof ScmUrlImportDescription) {
+				ScmUrlImportDescription description = (ScmUrlImportDescription) element;
+				String project = description.getProject();
+				URI scmUrl = description.getUri();
+				String version = getTag(scmUrl);
+				String host = getServer(scmUrl);
+				styledString.append(project);
+				if (version != null) {
+					styledString.append(' ');
+					styledString.append(version, StyledString.DECORATIONS_STYLER);
+				}
+				styledString.append(' ');
+				styledString.append('[', StyledString.DECORATIONS_STYLER);
+				styledString.append(host, StyledString.DECORATIONS_STYLER);
+				styledString.append(']', StyledString.DECORATIONS_STYLER);
+				return styledString;
+			}
+			styledString.append(element.toString());
+			return styledString;
+		}
+	}
+
+	/**
+	 * Constructs the page.
+	 */
+	public CVSScmUrlImportWizardPage() {
+		super("cvs", CVSUIMessages.CVSScmUrlImportWizardPage_0, null); //$NON-NLS-1$
+		setDescription(CVSUIMessages.CVSScmUrlImportWizardPage_1);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		Composite comp = SWTUtils.createHVFillComposite(parent, SWTUtils.MARGINS_NONE, 1);
+		Composite group = SWTUtils.createHFillComposite(comp, SWTUtils.MARGINS_NONE, 1);
+
+		Button versions = SWTUtils.createRadioButton(group, CVSUIMessages.CVSScmUrlImportWizardPage_3);
+		useHead = SWTUtils.createRadioButton(group, CVSUIMessages.CVSScmUrlImportWizardPage_2);
+		SelectionListener listener = new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				bundlesViewer.refresh(true);
+			}
+		};
+		versions.addSelectionListener(listener);
+		useHead.addSelectionListener(listener);
+
+		Table table = new Table(comp, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
+		GridData gd = new GridData(GridData.FILL_BOTH);
+		gd.heightHint = 200;
+		gd.widthHint = 225;
+		table.setLayoutData(gd);
+
+		bundlesViewer = new TableViewer(table);
+		bundlesViewer.setLabelProvider(new CVSLabelProvider());
+		bundlesViewer.setContentProvider(new ArrayContentProvider());
+		bundlesViewer.setComparator(new ViewerComparator());
+		counterLabel = new Label(comp, SWT.NONE);
+		counterLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		setControl(comp);
+		setPageComplete(true);
+
+		// Initialize versions versus HEAD
+		IDialogSettings settings = getWizard().getDialogSettings();
+		boolean useHEAD= settings != null && settings.getBoolean(CVS_PAGE_USE_HEAD);
+		useHead.setSelection(useHEAD);
+		versions.setSelection(!useHEAD);
+
+		if (descriptions != null) {
+			bundlesViewer.setInput(descriptions);
+			updateCount();
+		}
+
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.CVS_SCM_URL_IMPORT_PAGE);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.team.ui.IScmUrlImportWizardPage#finish()
+	 */
+	public boolean finish() {
+		boolean head = false;
+		if (getControl() != null) {
+			head = useHead.getSelection();
+			// store settings
+			IDialogSettings settings = getWizard().getDialogSettings();
+			if (settings != null) {
+				settings.put(CVS_PAGE_USE_HEAD, head);
+			}
+		} else {
+			// use whatever was used last time
+			IDialogSettings settings = getWizard().getDialogSettings();
+			if (settings != null) {
+				head = settings.getBoolean(CVS_PAGE_USE_HEAD);
+			}
+		}
+
+		if (head) {
+			// modify tags on bundle import descriptions
+			for (int i = 0; i < descriptions.length; i++) {
+				URI scmUri = descriptions[i].getUri();
+				descriptions[i].setUrl(removeTag(scmUri));
+			}
+		}
+		
+		return true;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.team.ui.IScmUrlImportWizardPage#getSelection()
+	 */
+	public ScmUrlImportDescription[] getSelection() {
+		return descriptions;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.team.ui.IScmUrlImportWizardPage#getSelection()
+	 */
+	public void setSelection(ScmUrlImportDescription[] descriptions) {
+		this.descriptions = descriptions;
+		// fill viewer
+		if (bundlesViewer != null) {
+			bundlesViewer.setInput(descriptions);
+			updateCount();
+		}
+	}
+
+	/**
+	 * Updates the count of bundles that will be imported
+	 */
+	private void updateCount() {
+		counterLabel.setText(NLS.bind(CVSUIMessages.CVSScmUrlImportWizardPage_4, new Integer(descriptions.length)));
+		counterLabel.getParent().layout();
+	}
+
+	private static String getTag(URI scmUri) {
+		return CVSURI.fromUri(scmUri).getTag().getName();
+	}
+	
+	/**
+	 * Remove tag attributes from the given URI reference. Results in the URI
+	 * pointing to HEAD.
+	 * 
+	 * @param scmUri
+	 *            a SCM URI reference to modify
+	 * @return Returns the content of the stripped URI as a string.
+	 */
+	private static String removeTag(URI scmUri) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(scmUri.getScheme()).append(':');
+		String ssp = scmUri.getSchemeSpecificPart();
+		int j = ssp.indexOf(';');
+		if (j != -1) {
+			sb.append(ssp.substring(0, j));
+			String[] params = ssp.substring(j).split(";"); //$NON-NLS-1$
+			for (int k = 0; k < params.length; k++) {
+				// PDE way of providing tags
+				if (params[k].startsWith("tag=")) { //$NON-NLS-1$
+					// ignore
+				} else if (params[k].startsWith("version=")) { //$NON-NLS-1$
+					// ignore
+				} else {
+					sb.append(params[k]);
+				}
+			}
+		} else {
+			sb.append(ssp);
+		}
+		return sb.toString();
+	}
+	
+	private static String getServer(URI scmUri) {
+		return CVSURI.fromUri(scmUri).getRepository().getHost();
+	}
+
+	public void setProvider(RepositoryProviderType provider) {
+		this.provider = provider;
+	}
+
+	public RepositoryProviderType getProvider() {
+		return provider;
+	}
+	
+}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java
index b2b9d18..49769e1 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import java.util.List;
 
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.dialogs.*;
 import org.eclipse.jface.dialogs.Dialog;
@@ -42,8 +43,7 @@ import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
 import org.eclipse.team.core.synchronize.SyncInfoSet;
 import org.eclipse.team.internal.ccvs.core.CVSException;
 import org.eclipse.team.internal.ccvs.core.ICVSFile;
-import org.eclipse.team.internal.ccvs.core.client.Command;
-import org.eclipse.team.internal.ccvs.core.client.Diff;
+import org.eclipse.team.internal.ccvs.core.client.*;
 import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
 import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
 import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
@@ -1594,7 +1594,7 @@ public class GenerateDiffFileWizard extends Wizard {
 	private int promptToIncludeBinary(IFile file) {
 		MessageDialog dialog = new MessageDialog(getShell(), CVSUIMessages.GenerateDiffFileWizard_11, null, // accept
 				// the default window icon
-				NLS.bind(CVSUIMessages.GenerateDiffFileWizard_12, file.getFullPath()), MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL,
+				NLS.bind(CVSUIMessages.GenerateDiffFileWizard_12, file.getFullPath()), MessageDialog.WARNING, new String[] { IDialogConstants.YES_LABEL,
 			IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 1); // no is the default
 		return dialog.open();
 	}
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizard.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizard.java
index 8e8b9a0..83a753e 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizard.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizard.java
@@ -90,7 +90,7 @@ public class MergeWizard extends Wizard {
 	                resources = getAllResources(startTag, endTag);
 	            } catch (InvocationTargetException e) {
 	                // Log and continue with the original resources
-	                CVSUIPlugin.log(IStatus.ERROR, "An error occurred while detemrining if extra resources should be included in the merge", e.getTargetException()); //$NON-NLS-1$
+	                CVSUIPlugin.log(IStatus.ERROR, "An error occurred while determining if extra resources should be included in the merge", e.getTargetException()); //$NON-NLS-1$
 	            }
 				MergeSynchronizeParticipant participant = MergeSynchronizeParticipant.getMatchingParticipant(resources, startTag, endTag);
 				if(participant == null) {
diff --git a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java
index d27fee6..b2c5056 100644
--- a/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java
+++ b/eclipse/plugins/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,22 +14,13 @@ import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.*;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.*;
 import org.eclipse.team.internal.ccvs.core.CVSTag;
 import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
 import org.eclipse.team.internal.ccvs.ui.IHelpContextIds;
-import org.eclipse.team.internal.ccvs.ui.tags.TagContentAssistProcessor;
-import org.eclipse.team.internal.ccvs.ui.tags.TagRefreshButtonArea;
-import org.eclipse.team.internal.ccvs.ui.tags.TagSelectionArea;
-import org.eclipse.team.internal.ccvs.ui.tags.TagSelectionDialog;
-import org.eclipse.team.internal.ccvs.ui.tags.TagSource;
+import org.eclipse.team.internal.ccvs.ui.tags.*;
 import org.eclipse.team.internal.ui.PixelConverter;
 import org.eclipse.team.internal.ui.SWTUtils;
 import org.eclipse.ui.PlatformUI;
@@ -117,7 +108,13 @@ public class MergeWizardPage extends CVSWizardPage {
         }
     }
     private void createTagRefreshArea(Composite composite) {
-	    tagRefreshArea = new TagRefreshButtonArea(getShell(), getTagSource(), null);
+	    tagRefreshArea = new TagRefreshButtonArea(getShell(), getTagSource(), null) {
+	    	public void refresh(boolean background) {
+	    		super.refresh(background);
+	    		updateStartTag(startTagField.getText());
+	    		updateEndTag(endTagField.getText());
+	    	};
+	    };
 	    tagRefreshArea.setRunnableContext(getContainer());
 	    tagRefreshArea.createArea(composite); 
     }
diff --git a/eclipse/plugins/org.eclipse.team.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.team.ui/.settings/org.eclipse.jdt.core.prefs
index 36ed17a..e355cb6 100644
--- a/eclipse/plugins/org.eclipse.team.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.team.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
-#Mon Mar 19 14:34:03 EDT 2007
+#Tue Feb 01 14:43:34 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -8,6 +16,7 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -72,3 +81,5 @@ org.eclipse.jdt.core.compiler.source=1.3
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.team.ui/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.team.ui/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..0c7298f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.ui/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:43:34 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF
index eff5a91..c2ea2e9 100644
--- a/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.team.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.team.ui; singleton:=true
-Bundle-Version: 3.5.102.qualifier
+Bundle-Version: 3.6.100.qualifier
 Bundle-Activator: org.eclipse.team.internal.ui.TeamUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -24,7 +24,7 @@ Export-Package: org.eclipse.team.internal.ui;x-friends:="org.eclipse.team.cvs.ss
 Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.3.0,4.0.0)";resolution:=optional,
  org.eclipse.core.resources;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.team.core;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.team.core;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.compare;bundle-version="[3.3.0,4.0.0)",
  org.eclipse.ui.forms;bundle-version="[3.3.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.team.ui/plugin.properties b/eclipse/plugins/org.eclipse.team.ui/plugin.properties
index 0b8476b..7c206fd 100644
--- a/eclipse/plugins/org.eclipse.team.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.team.ui/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ Team=Team
 configurationWizards=Configuration Wizards
 synchronizeParticipants=Synchronize Participants
 synchronizeWizards=Synchronize Wizards
+scmUrlImportPages=SCM URLs Import Pages
 logicalViews=Logical Synchronize Views
 
 PreferenceKeywords.Team=team apply patch synchronize compare
diff --git a/eclipse/plugins/org.eclipse.team.ui/plugin.xml b/eclipse/plugins/org.eclipse.team.ui/plugin.xml
index b51cd55..baa5777 100644
--- a/eclipse/plugins/org.eclipse.team.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.team.ui/plugin.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
+<!--
+    Copyright (c) 2001, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
 
      <extension-point id="configurationWizards" name="%configurationWizards" schema="schema/configurationWizards.exsd"/>
@@ -7,6 +18,7 @@
    <extension-point id="synchronizeWizards" name="%synchronizeWizards" schema="schema/synchronizeWizards.exsd"/>
    <extension-point id="teamContentProviders" name="%TeamContentProvider" schema="schema/teamContentProviders.exsd"/>
    <extension-point id="teamDecorators" name="%TeamDecorators" schema="schema/teamDecorators.exsd"/>
+   <extension-point id="scmUrlImportPages" name="%scmUrlImportPages" schema="schema/scmUrlImportPages.exsd"/>
 
 <!-- **************** PREFERENCES ******************* -->
    <extension
@@ -479,7 +491,14 @@
             <instanceof value="org.eclipse.team.core.mapping.ISynchronizationContext"/>
            </or>
          </enablement>
-         <actionProvider class="org.eclipse.team.internal.ui.mapping.ResourceModelActionProvider"/>
+         <actionProvider
+               class="org.eclipse.team.internal.ui.mapping.ResourceModelActionProvider">
+            <enablement>
+               <adapt
+                     type="org.eclipse.core.resources.IResource">
+               </adapt>
+            </enablement>
+         </actionProvider>
          <commonSorter
             class="org.eclipse.team.internal.ui.mapping.ResourceModelSorter"
             id="org.eclipse.team.ui.resourceSorter"/>
diff --git a/eclipse/plugins/org.eclipse.team.ui/schema/scmUrlImportPages.exsd b/eclipse/plugins/org.eclipse.team.ui/schema/scmUrlImportPages.exsd
new file mode 100644
index 0000000..e36c5dd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.ui/schema/scmUrlImportPages.exsd
@@ -0,0 +1,137 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.team.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.team.ui" id="scmUrlImportPages" name="SCM URLs Import Pages"/>
+      </appInfo>
+      <documentation>
+         <strong>EXPERIMENTAL</strong>. This extension point has been added as part of a work in progress. There is no guarantee that this API will work or that it will remain the same in future releases. Please do not use this API without consulting with the Team team.
+<p>
+This extension point is used to register a page to import projects basing on their SCM URLs.
+</p>
+<p>
+Providers may provide an extension for this extension point, and an implementation of <samp>org.eclipse.team.ui.IScmUrlImportWizardPage</samp> which allows to set and retrive project import descriptions.
+</p>
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="scmUrlImportPage"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="scmUrlImportPage">
+      <complexType>
+         <attribute name="page" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A wizard page that can be displayed by wizards that import projects basing on information from SCM URLs.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.team.ui.IScmUrlImportWizardPage"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="repository" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.team.core.repository/repository/@id"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         3.6
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a import page CVS:
+<p>
+<pre>
+<extension point="org.eclipse.team.ui.scmUrlImportPages">
+ <scmUrlImportPage
+  page="org.eclipse.team.internal.ccvs.ui.wizards.CVSScmUrlImportWizardPage"
+  repository="org.eclipse.team.cvs.core.cvsnature">
+ </scmUrlImportPage>
+</extension>
+</pre>
+</p>
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiinfo"/>
+      </appInfo>
+      <documentation>
+         Value of a page's <b>page</b> attribute must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.team.ui.IScmUrlImportWizardPage</b>.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         CVS UI provides a page extension capable of configuring import from CVS.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2011 IBM Corporation and others.
+All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImporter.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImporter.java
index 577fc0a..e3a386c 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImporter.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,10 +30,47 @@ import org.eclipse.team.internal.core.TeamPlugin;
 import org.eclipse.ui.*;
 
 public class ProjectSetImporter {
-	
-	public static IProject[] importProjectSet(String filename, Shell shell, IProgressMonitor monitor) throws InvocationTargetException {
+
+	/**
+	 * Imports a psf file based on a file content. This may be used when psf
+	 * file is imported from any other location that local filesystem.
+	 * 
+	 * @param psfContents
+	 *            the content of the psf file.
+	 * @param filename
+	 *            the name of the source file. This is included in case the
+	 *            provider needs to deduce relative paths
+	 * @param shell
+	 * @param monitor
+	 * @return list of new projects
+	 * @throws InvocationTargetException
+	 */
+	public static IProject[] importProjectSetFromString(String psfContents,
+			String filename, Shell shell, IProgressMonitor monitor)
+			throws InvocationTargetException {
+		XMLMemento xmlMemento = stringToXMLMemento(psfContents);
+		return importProjectSet(xmlMemento, filename, shell, monitor);
+	}
+
+	/**
+	 * Imports a psf file.
+	 * 
+	 * @param filename
+	 * @param shell
+	 * @param monitor
+	 * @return list of new projects
+	 * @throws InvocationTargetException
+	 */
+	public static IProject[] importProjectSet(String filename, Shell shell,
+			IProgressMonitor monitor) throws InvocationTargetException {
+		XMLMemento xmlMemento = filenameToXMLMemento(filename);
+		return importProjectSet(xmlMemento, filename, shell, monitor);
+	}
+
+	private static IProject[] importProjectSet(XMLMemento xmlMemento,
+			String filename, Shell shell, IProgressMonitor monitor)
+			throws InvocationTargetException {
 		try {
-			XMLMemento xmlMemento = filenameToXMLMemento(filename);
 			String version = xmlMemento.getString("version"); //$NON-NLS-1$
 			
 			List newProjects = new ArrayList();
@@ -179,7 +216,28 @@ public class ProjectSetImporter {
 			}
 		}
 	}
-	
+
+	private static XMLMemento stringToXMLMemento(String stringContents)
+			throws InvocationTargetException {
+		StringReader reader = null;
+		try {
+			reader = new StringReader(stringContents);
+			return XMLMemento.createReadRoot(reader);
+		} catch (WorkbenchException e) {
+			throw new InvocationTargetException(e);
+		} finally {
+			if (reader != null) {
+				reader.close();
+			}
+		}
+	}
+
+	/**
+	 * Check if given file is a valid psf file
+	 * 
+	 * @param filename
+	 * @return <code>true</code> is file is a valid psf file
+	 */
 	public static boolean isValidProjectSetFile(String filename) {
 		try {
 			return filenameToXMLMemento(filename).getString("version") != null; //$NON-NLS-1$
@@ -187,7 +245,24 @@ public class ProjectSetImporter {
 			return false;
 		}
 	}
-	
+
+	/**
+	 * Check if given string is a valid project set
+	 * 
+	 * @param psfContent
+	 * @return <code>true</code> if psfContent is a valid project set
+	 */
+	public static boolean isValidProjectSetString(String psfContent) {
+		if (psfContent == null) {
+			return false;
+		}
+		try {
+			return stringToXMLMemento(psfContent).getString("version") != null; //$NON-NLS-1$
+		} catch (InvocationTargetException e) {
+			return false;
+		}
+	}
+
 	private static void mergeWorkingSets(IWorkingSet newWs, IWorkingSet oldWs) {
 		IAdaptable[] oldElements = oldWs.getElements();
 		IAdaptable[] newElements = newWs.getElements();
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIMessages.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIMessages.java
index 1a39e2a..1fc3817 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIMessages.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIMessages.java
@@ -105,6 +105,8 @@ public class TeamUIMessages extends NLS {
 	public static String HistoryPageCompareEditorInput_0;
 
 	public static String ImportProjectSetMainPage_AddToWorkingSet;
+	public static String ImportProjectSetMainPage_Project_Set_File;
+	public static String ImportProjectSetMainPage_Project_Set_Url;
 
 	public static String ImportProjectSetMainPage_Browse;
 	
@@ -114,6 +116,7 @@ public class TeamUIMessages extends NLS {
 	public static String ImportProjectSetDialog_duplicatedWorkingSet_merge;
 	public static String ImportProjectSetDialog_duplicatedWorkingSet_skip;
 	public static String ImportProjectSetDialog_duplicatedWorkingSet_applyToAll;
+	public static String ImportProjectSetDialog_malformed_url;
 
 	public static String information;
     
@@ -310,8 +313,8 @@ public class TeamUIMessages extends NLS {
 	public static String ExportProjectSetMainPage_Initial_description;
 	public static String ExportProjectSetMainPage_specifyFile;
 
-	public static String ImportProjectSetMainPage_Project_Set_File_Name__2;
 	public static String ImportProjectSetMainPage_Browse_3;
+	public static String ImportProjectSetMainPage_The_given_URL_cannot_be_loaded;
 	public static String ImportProjectSetMainPage_The_specified_file_does_not_exist_4;
 	public static String ImportProjectSetMainPage_You_have_specified_a_folder_5;
 	public static String ImportProjectSetMainPage_workingSetNameEmpty;
@@ -320,6 +323,7 @@ public class TeamUIMessages extends NLS {
 	public static String ImportProjectSetMainPage_runInBackground;
 	public static String ImportProjectSetMainPage_jobName;
 	public static String ImportProjectSetMainPage_specifyFile;
+	public static String ImportProjectSetMainPage_specifyURL;
 	public static String ImportProjectSetMainPage_selectWorkingSet;
 	public static String ImportProjectSetMainPage_projectSetFileInvalid;
 
@@ -563,6 +567,7 @@ public class TeamUIMessages extends NLS {
 	public static String ChangeLogModelProvider_6;
 	public static String ChangeLogModelProvider_7;
 	public static String ChangeLogModelProvider_9;
+	public static String ChangeLogModelProvider_10;
 	public static String ChangeLogModelManager_0;
 	public static String ChangeSetActionGroup_0;
 	public static String ChangeSetActionGroup_1;
@@ -639,7 +644,9 @@ public class TeamUIMessages extends NLS {
 
 	public static String CompareFileRevisionEditorInput_compareResourceAndVersions;
 	public static String CompareFileRevisionEditorInput_repository;
+	public static String CompareFileRevisionEditorInput_repositoryWithoutAuthor;
 	public static String CompareFileRevisionEditorInput_workspace;
+	public static String CompareFileRevisionEditorInput_workspace_authorExists;
 	public static String CompareFileRevisionEditorInput_localRevision;
 
 	public static String ShowLocalHistory_1;
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
index 749746a..3b16e35 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
@@ -70,6 +70,13 @@ public class TeamUIPlugin extends AbstractUIPlugin {
 	
 	// manages synchronize participants
 	private SynchronizeManager synchronizeManager;
+
+	/**
+	 * ID of the 'Remove from View' action.
+	 * Value: <code>"org.eclipse.team.internal.ui.RemoveFromView"</code>
+	 */
+	public static final String REMOVE_FROM_VIEW_ACTION_ID = "org.eclipse.team.internal.ui.RemoveFromView"; //$NON-NLS-1$
+	
 	
 	/**
 	 * Creates a new TeamUIPlugin.
@@ -392,17 +399,18 @@ public class TeamUIPlugin extends AbstractUIPlugin {
     }
 
 	/**
-	 * Returns the standard display to be used. The method first checks, if
-	 * the thread calling this method has an associated display. If so, this
-	 * display is returned. Otherwise the method returns the default display.
+	 * Returns the standard display to be used. The method first checks, if the
+	 * thread calling this method has an associated display. If so, this display
+	 * is returned. Otherwise the method returns the display for this workbench.
+	 * 
 	 * @return the standard display to be used
 	 */
 	public static Display getStandardDisplay() {
-		Display display= Display.getCurrent();
+		Display display = Display.getCurrent();
 		if (display == null) {
-			display= Display.getDefault();
+			display = PlatformUI.getWorkbench().getDisplay();
 		}
-		return display;		
+		return display;
 	}
 	
 	public Image getImage(String key) {
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Utils.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Utils.java
index 6c035f6..a5f2aff 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Utils.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Utils.java
@@ -355,30 +355,49 @@ public class Utils {
 		final IResourceVariant base = sync.getBase();
 		String baseAuthor = null;
 		String remoteAuthor = null;
+		String localAuthor = null;
 		String localContentId = sync.getLocalContentIdentifier();
+		String remoteContentId= remote != null ? remote.getContentIdentifier() : null;
+		String baseContentId= base != null ? base.getContentIdentifier() : null;
 		if (isShowAuthor()) {
 			baseAuthor = getAuthor(base, monitor);
-			remoteAuthor = getAuthor(remote, monitor);
+			if (baseContentId != null && baseContentId.equals(remoteContentId))
+				remoteAuthor= baseAuthor;
+			else
+				remoteAuthor= getAuthor(remote, monitor);
+
+			if (localContentId != null) {
+				if (localContentId.equals(baseContentId))
+					localAuthor= baseAuthor;
+				else if (localContentId.equals(remoteAuthor))
+					localAuthor= remoteAuthor;
+				else
+					localAuthor= sync.getLocalAuthor(monitor);
+			}
 		}
 		if (localContentId != null) {
-			config.setLeftLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_localLabelExists, new String[] { localContentId }));
+			if (localAuthor != null) {
+				config.setLeftLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_localLabelAuthorExists, new String[] { localContentId, localAuthor }));
+			} else {
+				config.setLeftLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_localLabelExists, new String[] { localContentId }));
+			}
 		} else {
 			config.setLeftLabel(TeamUIMessages.SyncInfoCompareInput_localLabel);
 		}
 		if (remote != null) {
 			if (remoteAuthor != null) {
-				config.setRightLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_remoteLabelAuthorExists, new String[] { remote.getContentIdentifier(), remoteAuthor }));
+				config.setRightLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_remoteLabelAuthorExists, new String[] { remoteContentId, remoteAuthor }));
 			} else {
-				config.setRightLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_remoteLabelExists, new String[] { remote.getContentIdentifier() }));
+				config.setRightLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_remoteLabelExists, new String[] { remoteContentId }));
 			}
 		} else {
 			config.setRightLabel(TeamUIMessages.SyncInfoCompareInput_remoteLabel);
 		}
 		if (base != null) {
 			if (baseAuthor != null) {
-				config.setAncestorLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_baseLabelAuthorExists, new String[] { base.getContentIdentifier(), baseAuthor }));
+				config.setAncestorLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_baseLabelAuthorExists, new String[] { baseContentId, baseAuthor }));
 			} else {
-				config.setAncestorLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_baseLabelExists, new String[] { base.getContentIdentifier() }));
+				config.setAncestorLabel(NLS.bind(TeamUIMessages.SyncInfoCompareInput_baseLabelExists, new String[] { baseContentId }));
 			}
 		} else {
 			config.setAncestorLabel(TeamUIMessages.SyncInfoCompareInput_baseLabel);
@@ -395,7 +414,7 @@ public class Utils {
 		updateLabels(sync, config, null);
 	}
 
-	private static boolean isShowAuthor() {
+	public static boolean isShowAuthor() {
 		IPreferenceStore store = TeamUIPlugin.getPlugin().getPreferenceStore();
 		return store.getBoolean(IPreferenceIds.SHOW_AUTHOR_IN_COMPARE_EDITOR);
 	}
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/CompareAction.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/CompareAction.java
index e028657..6f34ac8 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/CompareAction.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/CompareAction.java
@@ -53,7 +53,7 @@ public class CompareAction extends TeamAction {
 			SelectAncestorDialog dialog = new SelectAncestorDialog(getShell(),
 					selectedResources);
 			int code = dialog.open();
-			if (code == Window.CANCEL)
+			if (code != Window.OK)
 				return;
 
 			ancestor = getElementFor(dialog.ancestorResource);
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ImportProjectSetAction.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ImportProjectSetAction.java
index 3e8565b..eff765b 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ImportProjectSetAction.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ImportProjectSetAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - suppress frequent notifications during import, bug 311526
  *******************************************************************************/
 package org.eclipse.team.internal.ui.actions;
 
@@ -14,13 +15,9 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.Iterator;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.*;
 import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Display;
@@ -29,16 +26,18 @@ import org.eclipse.team.internal.ui.*;
 import org.eclipse.team.internal.ui.wizards.ImportProjectSetOperation;
 import org.eclipse.ui.*;
 import org.eclipse.ui.actions.ActionDelegate;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.statushandlers.StatusManager;
 
 public class ImportProjectSetAction extends ActionDelegate implements IObjectActionDelegate {
-	
+
 	private IStructuredSelection fSelection;
-	
+
 	public void run(IAction action) {
 		final Shell shell= Display.getDefault().getActiveShell();
 		try {
-			new ProgressMonitorDialog(shell).run(true, true, new IRunnableWithProgress() {
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+			new ProgressMonitorDialog(shell).run(true, true, new WorkspaceModifyOperation(null) {
+				protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
 					Iterator iterator= fSelection.iterator();
 					while (iterator.hasNext()) {
 						IFile file = (IFile) iterator.next();
@@ -52,11 +51,16 @@ public class ImportProjectSetAction extends ActionDelegate implements IObjectAct
 				}
 			});
 		} catch (InvocationTargetException exception) {
-			ErrorDialog.openError(shell, null, null, new Status(IStatus.ERROR, TeamUIPlugin.PLUGIN_ID, IStatus.ERROR, TeamUIMessages.ImportProjectSetAction_0, exception.getTargetException()));
+			StatusManager.getManager().handle(
+					new Status(IStatus.ERROR, TeamUIPlugin.PLUGIN_ID,
+							IStatus.ERROR,
+							TeamUIMessages.ImportProjectSetAction_0,
+							exception.getTargetException()),
+					StatusManager.LOG | StatusManager.SHOW);
 		} catch (InterruptedException exception) {
 		}
 	}
-	
+
 	public void selectionChanged(IAction action, ISelection sel) {
 		if (sel instanceof IStructuredSelection) {
 			fSelection= (IStructuredSelection) sel;
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/actions.properties b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/actions.properties
index 9acba53..5b8aaad 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/actions.properties
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/actions.properties
@@ -81,7 +81,7 @@ action.pinParticipant.image=pin.gif
 
 action.expandAll.label=E&xpand All
 action.open.label=&Open
-action.openInCompareEditor.label=&Open In Compare Editor
+action.openInCompareEditor.label=Open In Compare &Editor
 action.cancelSubscriber.label=Cancel
 
 action.syncViewPreferences.label=&Preferences...
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/CompareFileRevisionEditorInput.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/CompareFileRevisionEditorInput.java
index e60fa48..4e4f912 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/CompareFileRevisionEditorInput.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/CompareFileRevisionEditorInput.java
@@ -159,9 +159,13 @@ public class CompareFileRevisionEditorInput extends SaveableCompareEditorInput {
 		if (getLeftRevision() != null) {
 			String leftLabel = getFileRevisionLabel(getLeftRevision());
 			cc.setLeftLabel(leftLabel);
+		} else if (left instanceof LocalResourceTypedElement) {
+			String name= TextProcessor.process(input.getLeft().getName());
+			String leftLabel= getLocalResourceRevisionLabel((LocalResourceTypedElement)left, name);
+			cc.setLeftLabel(leftLabel);
 		} else if (getResource(input) != null) {
-			String label = NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_workspace, new Object[]{ TextProcessor.process(input.getLeft().getName())});
-			cc.setLeftLabel(label);
+			String leftLabel= NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_workspace, new Object[] { TextProcessor.process(input.getLeft().getName()) });
+			cc.setLeftLabel(leftLabel);
 		}
 		if (getRightRevision() != null) {
 			String rightLabel = getFileRevisionLabel(getRightRevision());
@@ -169,6 +173,23 @@ public class CompareFileRevisionEditorInput extends SaveableCompareEditorInput {
 		}
 	}
 
+	private String getLocalResourceRevisionLabel(LocalResourceTypedElement localElement, String name) {
+		if (Utils.isShowAuthor()) {
+			String author= localElement.getAuthor();
+			if (author == null) {
+				try {
+					localElement.fetchAuthor(null);
+				} catch (CoreException e) {
+					TeamUIPlugin.log(e);
+				}
+				author= localElement.getAuthor();
+			}
+			if (author != null)
+				return NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_workspace_authorExists, new Object[] { name, author });
+		}
+		return NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_workspace, new Object[] { name });
+	}
+
 	private String getFileRevisionLabel(FileRevisionTypedElement element) {
 		Object fileObject = element.getFileRevision();
 		if (fileObject instanceof LocalFileRevision){
@@ -177,7 +198,10 @@ public class CompareFileRevisionEditorInput extends SaveableCompareEditorInput {
 				return NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_localRevision, new Object[]{TextProcessor.process(element.getName()), element.getTimestamp()});
 			} 
 		} else {
-			return NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_repository, new Object[]{ element.getName(), element.getContentIdentifier(), element.getAuthor()});
+			if (Utils.isShowAuthor())
+				return NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_repository, new Object[] { element.getName(), element.getContentIdentifier(), element.getAuthor() });
+			else
+				return NLS.bind(TeamUIMessages.CompareFileRevisionEditorInput_repositoryWithoutAuthor, new Object[] { element.getName(), element.getContentIdentifier() });
 		}
 		return ""; //$NON-NLS-1$
 	}
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/LocalHistoryPage.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/LocalHistoryPage.java
index 0874587..dd3878e 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/LocalHistoryPage.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/LocalHistoryPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.OpenStrategy;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
@@ -403,25 +404,38 @@ public class LocalHistoryPage extends HistoryPage implements IHistoryCompareAdap
 				});
 			}
 			
-			treeViewer.addOpenListener(new IOpenListener() {
-				public void open(OpenEvent e) {
-					if (getSite() != null) {
-						StructuredSelection tableStructuredSelection = (StructuredSelection) treeViewer.getSelection();
+			new OpenAndLinkWithEditorHelper(treeViewer) {
+				protected void open(ISelection selection, boolean activate) {
+					if (getSite() != null && selection instanceof IStructuredSelection) {
+						IStructuredSelection structuredSelection= (IStructuredSelection)selection;
 						if ((compareMode & ON) > 0){
-							StructuredSelection sel = new StructuredSelection(new Object[] {getCurrentFileRevision(), tableStructuredSelection.getFirstElement()});
+							StructuredSelection sel= new StructuredSelection(new Object[] { getCurrentFileRevision(), structuredSelection.getFirstElement() });
 							compareAction.selectionChanged(sel);
 							compareAction.run();
 						} else {
 							//Pass in the entire structured selection to allow for multiple editor openings
-							StructuredSelection sel = tableStructuredSelection;
 							if (openAction != null) {
-								openAction.selectionChanged(sel);
+								openAction.selectionChanged(structuredSelection);
 								openAction.run();
 							}
 						}
 					}
 				}
-			});
+
+				protected void activate(ISelection selection) {
+					int currentMode= OpenStrategy.getOpenMethod();
+					try {
+						OpenStrategy.setOpenMethod(OpenStrategy.DOUBLE_CLICK);
+						open(selection, true);
+					} finally {
+						OpenStrategy.setOpenMethod(currentMode);
+					}
+				}
+
+				protected void linkToEditor(ISelection selection) {
+					// XXX: Not yet implemented, see http://bugs.eclipse.org/324185
+				}
+			};
 			
 			//Contribute actions to popup menu
 			MenuManager menuMgr = new MenuManager();
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java
index 5fd65a3..386b683 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -291,7 +291,7 @@ public class DiffTreeChangesSection extends ForwardingChangesSection implements
 
 	private Composite createEnableParticipantModelProvidersPane(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setBackground(getBackgroundColor());
+		composite.setBackground(getListBackgroundColor());
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
 		composite.setLayout(layout);
@@ -358,7 +358,7 @@ public class DiffTreeChangesSection extends ForwardingChangesSection implements
 
 	private Composite getInitializationPane(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setBackground(getBackgroundColor());
+		composite.setBackground(getListBackgroundColor());
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
 		composite.setLayout(layout);
@@ -417,7 +417,7 @@ public class DiffTreeChangesSection extends ForwardingChangesSection implements
 
 	private Composite getInitializingMessagePane(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setBackground(getBackgroundColor());
+		composite.setBackground(getListBackgroundColor());
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
 		composite.setLayout(layout);
@@ -442,7 +442,7 @@ public class DiffTreeChangesSection extends ForwardingChangesSection implements
 
 	private Composite getPointerToModel(Composite parent, final ModelProvider provider, String oldId) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setBackground(getBackgroundColor());
+		composite.setBackground(getListBackgroundColor());
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
 		composite.setLayout(layout);
@@ -532,7 +532,7 @@ public class DiffTreeChangesSection extends ForwardingChangesSection implements
 	
 	private Composite getErrorComposite(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setBackground(getBackgroundColor());
+		composite.setBackground(getListBackgroundColor());
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
 		composite.setLayout(layout);
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/LineComparator.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/LineComparator.java
index c5ad805..879745e 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/LineComparator.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/LineComparator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.team.internal.ui.mapping;
 
 import java.io.*;
 import java.util.ArrayList;
+
 import org.eclipse.compare.rangedifferencer.IRangeComparator;
 import org.eclipse.core.resources.IEncodedStorage;
 import org.eclipse.core.resources.IStorage;
@@ -101,10 +102,6 @@ class LineComparator implements IRangeComparator {
         while ((line = br.readLine()) != null) {
             ar.add(line);
         }
-        try {
-            is.close();
-        } catch (IOException e1) {
-        }
         // Add a trailing line if the last character in the file was a line feed.
         // We do this because a BufferedReader doesn't distinguish the case
         // where the last line has or doesn't have a trailing line separator
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/RemoveFromViewAction.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/RemoveFromViewAction.java
index 16df151..2d04acf 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/RemoveFromViewAction.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/RemoveFromViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,7 @@ public class RemoveFromViewAction extends ResourceModelParticipantAction {
 	public RemoveFromViewAction(ISynchronizePageConfiguration configuration) {
 		super(null, configuration);
 		Utils.initAction(this, "action.removeFromView."); //$NON-NLS-1$
+		setId(TeamUIPlugin.REMOVE_FROM_VIEW_ACTION_ID);
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceCompareInputChangeNotifier.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceCompareInputChangeNotifier.java
index ad82d5f..6c468a7 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceCompareInputChangeNotifier.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceCompareInputChangeNotifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@ import org.eclipse.team.core.mapping.ISynchronizationContext;
 import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
 import org.eclipse.team.internal.ui.*;
 import org.eclipse.team.internal.ui.history.FileRevisionTypedElement;
+import org.eclipse.team.internal.ui.synchronize.LocalResourceTypedElement;
 
 /**
  * A change notifier for resource-based compare inputs.
@@ -55,12 +56,12 @@ public class ResourceCompareInputChangeNotifier extends CompareInputChangeNotifi
 				if (element != null) {
 					final IFileRevision revision = ((FileRevisionTypedElement)element).getFileRevision();
 					if (revision != null) {
-						if (TeamUIPlugin.getPlugin().getPreferenceStore().getBoolean(IPreferenceIds.SHOW_AUTHOR_IN_COMPARE_EDITOR)) {
+						if (Utils.isShowAuthor()) {
 							String author = ((FileRevisionTypedElement)element).getAuthor();
 							if (author != null) {
 								return NLS.bind(TeamUIMessages.SyncInfoCompareInput_baseLabelAuthorExists, new String[] { revision.getContentIdentifier(), author });
 							} else if (revision.isPropertyMissing()) {
-								fetchAuthors(input);
+								fetchAuthors(rdci);
 							}
 						}
 						return NLS.bind(TeamUIMessages.SyncInfoCompareInput_baseLabelExists, new String[] { revision.getContentIdentifier() }); 
@@ -82,6 +83,17 @@ public class ResourceCompareInputChangeNotifier extends CompareInputChangeNotifi
 				ResourceDiffCompareInput rdci = (ResourceDiffCompareInput) input;
 				String localContentId = rdci.getLocalContentId();
 				if (localContentId != null) {
+					ITypedElement element= rdci.getLeft();
+					if (element instanceof LocalResourceTypedElement) {
+						if (Utils.isShowAuthor()) {
+							String author= ((LocalResourceTypedElement)element).getAuthor();
+							if (author != null) {
+								return NLS.bind(TeamUIMessages.SyncInfoCompareInput_localLabelAuthorExists, new String[] { localContentId, author });
+							} else { // NOTE: Must not check for revision#isPropertyMissing() as this will always return true for the workspace file revision
+								fetchAuthors(rdci);
+							}
+						}
+					}
 					return NLS.bind(TeamUIMessages.SyncInfoCompareInput_localLabelExists, new String[] { localContentId }); 
 				} else {
 					return TeamUIMessages.SyncInfoCompareInput_localLabel; 
@@ -102,12 +114,12 @@ public class ResourceCompareInputChangeNotifier extends CompareInputChangeNotifi
 				if (element != null) {
 					final IFileRevision revision = ((FileRevisionTypedElement)element).getFileRevision();
 					if (revision != null) {
-						if (TeamUIPlugin.getPlugin().getPreferenceStore().getBoolean(IPreferenceIds.SHOW_AUTHOR_IN_COMPARE_EDITOR)) {
+						if (Utils.isShowAuthor()) {
 							String author = ((FileRevisionTypedElement)element).getAuthor();
 							if (author != null) {
 								return NLS.bind(TeamUIMessages.SyncInfoCompareInput_remoteLabelAuthorExists, new String[] { revision.getContentIdentifier(), author });
 							} else if (revision.isPropertyMissing()) {
-								fetchAuthors(input);
+								fetchAuthors(rdci);
 							}
 						}
 						return NLS.bind(TeamUIMessages.SyncInfoCompareInput_remoteLabelExists, new String[] { revision.getContentIdentifier() }); 
@@ -161,6 +173,8 @@ public class ResourceCompareInputChangeNotifier extends CompareInputChangeNotifi
 	}
 
 	private final CompareInputLabelProvider labelProvider = new CompareInputLabelProvider();
+
+	private Object fetchingInput;
 	
 	/**
 	 * Create a notifier
@@ -298,7 +312,10 @@ public class ResourceCompareInputChangeNotifier extends CompareInputChangeNotifi
 		return labelProvider;
 	}
 
-	public void fetchAuthors(final Object input) {
+	public void fetchAuthors(final ResourceDiffCompareInput input) {
+		if (fetchingInput == input)
+			return;
+		fetchingInput= input;
 		runInBackground(new IWorkspaceRunnable() {
 			public void run(IProgressMonitor monitor) throws CoreException {
 				fetchAuthors(input, monitor);
@@ -306,13 +323,9 @@ public class ResourceCompareInputChangeNotifier extends CompareInputChangeNotifi
 		});
 	}
 
-	protected void fetchAuthors(Object input, IProgressMonitor monitor) throws CoreException {
-		if (input instanceof ResourceDiffCompareInput) {
-			ResourceDiffCompareInput rdci = (ResourceDiffCompareInput) input;
-			if (rdci.updateAuthorInfo(monitor)) {
-				fireLabelProviderChange(input);
-			}
-		}
+	protected void fetchAuthors(ResourceDiffCompareInput input, IProgressMonitor monitor) throws CoreException {
+		if (input.updateAuthorInfo(monitor))
+			fireLabelProviderChange(input);
 	}
 
 	private void fireLabelProviderChange(Object input) {
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceDiffCompareInput.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceDiffCompareInput.java
index 803a67a..942dc9c 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceDiffCompareInput.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceDiffCompareInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -293,14 +293,22 @@ public class ResourceDiffCompareInput extends AbstractCompareInput implements IS
 		}
 	}
 
-	private boolean propogateAuthorIfSameRevision(FileRevisionTypedElement oldContributor,
-			FileRevisionTypedElement newContributor) {
+	private boolean propogateAuthorIfSameRevision(FileRevisionTypedElement oldContributor, FileRevisionTypedElement newContributor) {
 		if (oldContributor == null || newContributor == null)
 			return false;
-		String author = oldContributor.getAuthor();
-		if (newContributor.getAuthor() == null 
-				&& author != null
-				&& oldContributor.getContentIdentifier().equals(newContributor.getContentIdentifier())) {
+		String author= oldContributor.getAuthor();
+		if (newContributor.getAuthor() == null && author != null && oldContributor.getContentIdentifier().equals(newContributor.getContentIdentifier())) {
+			newContributor.setAuthor(author);
+			return true;
+		}
+		return false;
+	}
+
+	private boolean propogateAuthorIfSameRevision(FileRevisionTypedElement oldContributor, LocalResourceTypedElement newContributor) {
+		if (oldContributor == null || newContributor == null)
+			return false;
+		String author= oldContributor.getAuthor();
+		if (newContributor.getAuthor() == null && author != null && oldContributor.getContentIdentifier().equals(getLocalContentId())) {
 			newContributor.setAuthor(author);
 			return true;
 		}
@@ -312,7 +320,7 @@ public class ResourceDiffCompareInput extends AbstractCompareInput implements IS
 	 * @return whether the diff associated with this input has changed
 	 */
 	public boolean needsUpdate() {
-		IDiff newNode = context.getDiffTree().getDiff(getResource());
+		IDiff newNode= context.getDiffTree().getDiff(getResource());
 		return newNode == null || !newNode.equals(node);
 	}
 
@@ -325,21 +333,32 @@ public class ResourceDiffCompareInput extends AbstractCompareInput implements IS
 	}
 
 	public boolean updateAuthorInfo(IProgressMonitor monitor) throws CoreException {
-		boolean authorFound = false;
-		FileRevisionTypedElement ancestor = (FileRevisionTypedElement)getAncestor();
-		FileRevisionTypedElement right = (FileRevisionTypedElement)getRight();
+		boolean fireEvent= false;
+		FileRevisionTypedElement ancestor= (FileRevisionTypedElement)getAncestor();
+		FileRevisionTypedElement right= (FileRevisionTypedElement)getRight();
+		LocalResourceTypedElement left= (LocalResourceTypedElement)getLeft();
+
 		if (ancestor != null && ancestor.getAuthor() == null) {
 			ancestor.fetchAuthor(monitor);
-			if (right != null && propogateAuthorIfSameRevision(ancestor, right)) {
-				return true;
-			}
-			authorFound = ancestor.getAuthor() != null;
+			fireEvent|= ancestor.getAuthor() != null;
 		}
+
+		fireEvent|= propogateAuthorIfSameRevision(ancestor, right);
+		fireEvent|= propogateAuthorIfSameRevision(ancestor, left);
+
 		if (right != null && right.getAuthor() == null) {
 			right.fetchAuthor(monitor);
-			authorFound |= right.getAuthor() != null;
+			fireEvent|= right.getAuthor() != null;
 		}
-		return authorFound;
+
+		fireEvent|= propogateAuthorIfSameRevision(right, left);
+
+		if (left != null && left.getAuthor() == null) {
+			left.fetchAuthor(monitor);
+			fireEvent|= fireEvent= left.getAuthor() != null;
+		}
+
+		return fireEvent;
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java
index 22a0d23..b01a4f4 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,13 +16,16 @@ import org.eclipse.core.resources.mapping.ModelProvider;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.team.internal.ui.Utils;
 import org.eclipse.ui.navigator.CommonViewerSorter;
+import org.eclipse.ui.views.navigator.ResourceComparator;
 
 public class TeamViewerSorter extends TreePathViewerSorter {
 
 	private CommonViewerSorter sorter;
+	private ResourceComparator resourceComparator;
 	
 	public TeamViewerSorter(CommonViewerSorter sorter) {
 		this.sorter = sorter;
+		this.resourceComparator = new ResourceComparator(ResourceComparator.NAME);
 	}
 
 	public int category(Object element) {
@@ -60,7 +63,7 @@ public class TeamViewerSorter extends TreePathViewerSorter {
 			IResource r1 = Utils.getResource(e1);
 			IResource r2 = Utils.getResource(e2);
 			if (r1 != null && r2 != null) {
-				return r1.getName().compareTo(r2.getName());
+				return resourceComparator.compare(viewer, r1, r2);
 			}
 		}
 		return sorter.compare(viewer, parentPath, e1, e2);
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
index 81259e8..e146d45 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -104,9 +104,11 @@ ExportProjectSetMainPage_ExportWorkingSets=E&xport working sets
 ExportProjectSetMainPage_Initial_description=Define which projects or working sets should be exported into the team project file.
 ExportProjectSetMainPage_specifyFile=Please specify the destination file.
 
-ImportProjectSetMainPage_Project_Set_File_Name__2=F&ile name:
+ImportProjectSetMainPage_Project_Set_File=F&ile
+ImportProjectSetMainPage_Project_Set_Url=&URL
 ImportProjectSetMainPage_Browse_3=B&rowse...
 ImportProjectSetMainPage_Browse=Br&owse...
+ImportProjectSetMainPage_The_given_URL_cannot_be_loaded=File from given URL cannot be loaded
 ImportProjectSetMainPage_The_specified_file_does_not_exist_4=The specified file does not exist
 ImportProjectSetMainPage_You_have_specified_a_folder_5=You have specified a folder
 ImportProjectSetMainPage_workingSetNameEmpty=The working set name must not be empty
@@ -116,6 +118,7 @@ ImportProjectSetMainPage_AddToWorkingSet=&Add the imported team project set to a
 ImportProjectSetMainPage_runInBackground=Run the import in the bac&kground
 ImportProjectSetMainPage_jobName=Importing project set...
 ImportProjectSetMainPage_specifyFile=Please specify a file to import.
+ImportProjectSetMainPage_specifyURL=Please specify an URL to import.
 ImportProjectSetMainPage_selectWorkingSet=Select a working set.
 ImportProjectSetMainPage_projectSetFileInvalid=The specified file is not a valid Team Project Set file.
 ImportProjectSetDialog_duplicatedWorkingSet_title=Working Set Exists
@@ -124,6 +127,7 @@ ImportProjectSetDialog_duplicatedWorkingSet_replace=&Replace
 ImportProjectSetDialog_duplicatedWorkingSet_merge=&Merge
 ImportProjectSetDialog_duplicatedWorkingSet_skip=&Skip
 ImportProjectSetDialog_duplicatedWorkingSet_applyToAll=&Apply to all working sets in this import
+ImportProjectSetDialog_malformed_url=Malformed URL
 
 ProjectSetContentHandler_Element_provider_must_be_contained_in_element_psf_4=Element provider must be contained in element psf
 ProjectSetContentHandler_Element_project_must_be_contained_in_element_provider_7=Element project must be contained in element provider
@@ -380,8 +384,8 @@ CopyToClipboardAction_2= Copy
 CopyToClipboardAction_3=Problem Copying to Clipboard
 CopyToClipboardAction_4=There was a problem when accessing the system clipboard. Retry?
 
-PasteAction_1=&Paste patch
-PasteAction_2=Paste patch
+PasteAction_1=&Paste Patch
+PasteAction_2=Paste a Patch
 PasteAction_3=Cannot paste the clipboard contents.
 PasteAction_4=Clipboard does not contain a valid patch.
 
@@ -401,10 +405,11 @@ ChangeLogModelProvider_13=Assign Changes &To
 ChangeLogModelProvider_5=Commit &Sets
 ChangeLogModelProvider_6=Ed&it Change Set...
 ChangeLogModelProvider_7=Make Changes Unassigned
-ChangeLogModelProvider_9=Mark Change Set As De&fault
+ChangeLogModelProvider_9=Mark Change Set as De&fault
+ChangeLogModelProvider_10=Don't Use a De&fault Change Set
 ChangeLogModelManager_0=Show Change Sets
 ChangeSetActionGroup_0=Confirm Remove
-ChangeSetActionGroup_1=Are you sure you want to remove {0}
+ChangeSetActionGroup_1=Are you sure you want to remove {0}?
 ChangeSetActionGroup_2=No Set
 CommitSetDiffNode_0={0} (default)
 FileTypeTable_0=Binary
@@ -487,7 +492,9 @@ LocalHistoryPage_OverwriteTitle=Overwrite Current Revision?
 
 CompareFileRevisionEditorInput_compareResourceAndVersions=Compare {0} {1} and {2}
 CompareFileRevisionEditorInput_repository={0} {1} ({2})
+CompareFileRevisionEditorInput_repositoryWithoutAuthor={0} {1}
 CompareFileRevisionEditorInput_workspace=Local: {0}
+CompareFileRevisionEditorInput_workspace_authorExists=Local: {0} ({1})
 CompareFileRevisionEditorInput_0=Local Revision
 CompareFileRevisionEditorInput_1=Current Revision
 CompareFileRevisionEditorInput_2=Current
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/IgnorePreferencePage.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/IgnorePreferencePage.java
index 305a6c6..c3b57c2 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/IgnorePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/IgnorePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,7 @@ public class IgnorePreferencePage extends PreferencePage implements IWorkbenchPr
 		data.horizontalSpan = 2;
 		l1.setLayoutData(data);
 		
-		ignoreTable = new Table(parent, SWT.CHECK | SWT.BORDER);
+		ignoreTable = new Table(parent, SWT.CHECK | SWT.BORDER | SWT.MULTI);
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		//gd.widthHint = convertWidthInCharsToPixels(30);
 		gd.heightHint = 300;
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelSorter.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelSorter.java
index 9cd6963..f44fa51 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelSorter.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangeSetModelSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -106,7 +106,7 @@ public class ChangeSetModelSorter extends ViewerSorter {
 			if (embeddedSorter != null) {
 			    return embeddedSorter.compare(viewer, o1, o2);
 			} else {
-			    compareNames(((ISynchronizeModelElement)o1).getName(), ((ISynchronizeModelElement)o2).getName());
+			    return compareNames(((ISynchronizeModelElement)o1).getName(), ((ISynchronizeModelElement)o2).getName());
 			}
 		} else if (o1 instanceof ISynchronizeModelElement)
 			return 1;
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java
index f4d10a7..e10b187 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,8 +51,9 @@ public class ChangesSection extends Composite {
 	/**
 	 * Create a changes section on the following page.
 	 * 
-	 * @param parent the parent control 
+	 * @param parent the parent control
 	 * @param page the page showing this section
+	 * @param configuration the configuration for the synchronize page
 	 */
 	public ChangesSection(Composite parent, AbstractSynchronizePage page, ISynchronizePageConfiguration configuration) {
 		super(parent, SWT.NONE);
@@ -68,9 +69,9 @@ public class ChangesSection extends Composite {
 		setLayoutData(data);
 		
 		forms = new FormToolkit(parent.getDisplay());
-		forms.setBackground(getBackgroundColor());
+		forms.setBackground(getListBackgroundColor());
 		HyperlinkGroup group = forms.getHyperlinkGroup();
-		group.setBackground(getBackgroundColor());
+		group.setBackground(getListBackgroundColor());
 		
 		changesSectionContainer = new PageBook(this, SWT.NONE);
 		data = new GridData(GridData.FILL_BOTH);
@@ -79,7 +80,7 @@ public class ChangesSection extends Composite {
 		changesSectionContainer.setLayoutData(data);
 	}
 	
-	protected Color getBackgroundColor() {
+	protected Color getListBackgroundColor() {
 		return getShell().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ForwardingChangesSection.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ForwardingChangesSection.java
index 2df50e0..850506b 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ForwardingChangesSection.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ForwardingChangesSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -83,7 +83,7 @@ public abstract class ForwardingChangesSection extends ChangesSection {
 	
 	protected Composite getEmptyChangesComposite(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setBackground(getBackgroundColor());
+		composite.setBackground(getListBackgroundColor());
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
 		composite.setLayout(layout);
@@ -140,7 +140,7 @@ public abstract class ForwardingChangesSection extends ChangesSection {
 		data.widthHint = 100;
 		description.setLayoutData(data);
 		description.setText(text);
-		description.setBackground(getBackgroundColor());
+		description.setBackground(getListBackgroundColor());
 		return description;
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java
index 5d600c2..8bb4263 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceSaveableComparison.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 package org.eclipse.team.internal.ui.synchronize;
 
 import org.eclipse.compare.*;
+import org.eclipse.compare.contentmergeviewer.ContentMergeViewer;
+import org.eclipse.compare.internal.ISavingSaveable;
 import org.eclipse.compare.structuremergeviewer.ICompareInput;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.*;
@@ -35,7 +37,7 @@ import org.eclipse.ui.texteditor.IDocumentProvider;
  * @see LocalResourceTypedElement
  * @since 3.3
  */
-public abstract class LocalResourceSaveableComparison extends SaveableComparison implements IPropertyChangeListener {
+public abstract class LocalResourceSaveableComparison extends SaveableComparison implements IPropertyChangeListener, ISavingSaveable {
 
 	private final ICompareInput input;
 	private final CompareEditorInput editorInput;
@@ -130,10 +132,10 @@ public abstract class LocalResourceSaveableComparison extends SaveableComparison
 			flushViewers(Policy.subMonitorFor(monitor, 40));
 			// Then we tell the input to commit its changes
 			// Only the left is ever saveable
-			ITypedElement left = getFileElement();
-			if (left instanceof LocalResourceTypedElement) {
-				LocalResourceTypedElement te = (LocalResourceTypedElement) left;
-				te.commit(Policy.subMonitorFor(monitor, 60));
+			ITypedElement te = getFileElement();
+			if (te instanceof LocalResourceTypedElement) {
+				LocalResourceTypedElement lrte = (LocalResourceTypedElement) te;
+				lrte.commit(Policy.subMonitorFor(monitor, 60));
 			}
 		} finally {
 			// Make sure we fire a change for the compare input to update the viewers
@@ -150,7 +152,11 @@ public abstract class LocalResourceSaveableComparison extends SaveableComparison
 	 * @throws CoreException
 	 */
 	protected void flushViewers(IProgressMonitor monitor) throws CoreException {
-		editorInput.saveChanges(monitor);
+		if (editorInput instanceof SaveablesCompareEditorInput) {
+			((SaveablesCompareEditorInput) editorInput).saveChanges(monitor, this);
+		} else {
+			editorInput.saveChanges(monitor);
+		}
 	}
 
 	/**
@@ -206,6 +212,9 @@ public abstract class LocalResourceSaveableComparison extends SaveableComparison
 	public boolean isDirty() {
 		// We need to get the dirty state from the compare editor input
 		// since it is our only connection to the merge viewer
+		if (editorInput instanceof SaveablesCompareEditorInput) {
+			return ((SaveablesCompareEditorInput) editorInput).isSaveNeeded(this);
+		}
 		return editorInput.isSaveNeeded();
 	}
 	
@@ -213,6 +222,11 @@ public abstract class LocalResourceSaveableComparison extends SaveableComparison
 	 * @see org.eclipse.team.ui.mapping.SaveableCompareModel#setDirty(boolean)
 	 */
 	protected void setDirty(boolean dirty) {
+		if (editorInput instanceof SaveablesCompareEditorInput) {
+			((SaveablesCompareEditorInput) editorInput).setDirty(dirty,
+					this);
+			return;
+		}
 		// We need to set the dirty state on the compare editor input
 		// since it is our only connection to the merge viewer
 		editorInput.setDirty(dirty);
@@ -232,6 +246,15 @@ public abstract class LocalResourceSaveableComparison extends SaveableComparison
 	 * @see org.eclipse.ui.Saveable#getName()
 	 */
 	public String getName() {
+		// Return the name of the file element as held in the compare input
+		if (fileElement.equals(input.getLeft())) {
+			return input.getLeft().getName();
+		}
+		if (fileElement.equals(input.getRight())) {
+			return input.getRight().getName();
+		}
+		// Fallback call returning name of the main non-null element of the input
+		// see org.eclipse.team.internal.ui.mapping.AbstractCompareInput#getMainElement()
 		return input.getName();
 	}
 
@@ -262,7 +285,23 @@ public abstract class LocalResourceSaveableComparison extends SaveableComparison
 			Object newValue= e.getNewValue();
 			if (newValue instanceof Boolean)
 				changed= ((Boolean)newValue).booleanValue();
-			setDirty(changed);
+
+			ContentMergeViewer cmv = (ContentMergeViewer) e.getSource();
+
+			if (fileElement.equals(input.getLeft())) {
+				if (changed && cmv.internalIsLeftDirty())
+					setDirty(changed);
+				else if (!changed && !cmv.internalIsLeftDirty()) {
+					setDirty(changed);
+				}
+			}
+			if (fileElement.equals(input.getRight())) {
+				if (changed && cmv.internalIsRightDirty())
+					setDirty(changed);
+				else if (!changed && !cmv.internalIsRightDirty()) {
+					setDirty(changed);
+				}
+			}
 		}			
 	}
 	
@@ -345,4 +384,8 @@ public abstract class LocalResourceSaveableComparison extends SaveableComparison
 		}
 		return false;
 	}
+
+	public boolean isSaving() {
+		return isSaving;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceTypedElement.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceTypedElement.java
index 0e0a735..85b92b3 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceTypedElement.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/LocalResourceTypedElement.java
@@ -17,6 +17,9 @@ import org.eclipse.compare.ResourceNode;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.*;
+import org.eclipse.team.core.history.IFileHistoryProvider;
+import org.eclipse.team.core.history.IFileRevision;
+import org.eclipse.team.internal.ui.Utils;
 import org.eclipse.ui.IEditorInput;
 
 /**
@@ -49,6 +52,7 @@ public class LocalResourceTypedElement extends ResourceNode implements IAdaptabl
 	private boolean exists;
 	private boolean useSharedDocument = true;
 	private EditableSharedDocumentAdapter.ISharedDocumentAdapterListener sharedDocumentListener;
+	private String author;
 
 	/**
 	 * Creates an element for the given resource.
@@ -343,4 +347,50 @@ public class LocalResourceTypedElement extends ResourceNode implements IAdaptabl
 		this.sharedDocumentListener = sharedDocumentListener;
 	}
 
+	/**
+	 * Returns the author of the workspace file revision if any.
+	 * 
+	 * @return the author or <code>null</code> if the author has not been fetched or is not
+	 *         available
+	 * @since 3.7
+	 * @see #fetchAuthor(IProgressMonitor)
+	 */
+	public String getAuthor() {
+		return author;
+	}
+
+	/**
+	 * Fetches the author from the repository.
+	 * 
+	 * @param monitor the progress monitor
+	 * @throws CoreException if fetching the revision properties fails
+	 * @since 3.7
+	 */
+	public void fetchAuthor(IProgressMonitor monitor) throws CoreException {
+		author= null;
+
+		IFileHistoryProvider fileHistoryProvider= Utils.getHistoryProvider(getResource());
+		if (fileHistoryProvider == null)
+			return;
+
+		IFileRevision revision= fileHistoryProvider.getWorkspaceFileRevision(getResource());
+		if (revision == null)
+			return;
+
+		// NOTE: Must not check for revision#isPropertyMissing() as this will always return true for the workspace file revision
+		revision= revision.withAllProperties(monitor);
+
+		author= revision.getAuthor();
+	}
+
+	/**
+	 * Sets the author.
+	 * 
+	 * @param author the author
+	 * @since 3.7
+	 */
+	public void setAuthor(String author) {
+		this.author= author;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/NavigationActionGroup.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/NavigationActionGroup.java
index 580365a..c630ab8 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/NavigationActionGroup.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/NavigationActionGroup.java
@@ -14,6 +14,7 @@ import org.eclipse.compare.ICompareNavigator;
 import org.eclipse.jface.action.*;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.team.internal.ui.TeamUIPlugin;
 import org.eclipse.team.internal.ui.Utils;
 import org.eclipse.team.internal.ui.synchronize.actions.ExpandAllAction;
 import org.eclipse.team.internal.ui.synchronize.actions.NavigateAction;
@@ -58,7 +59,13 @@ public class NavigationActionGroup extends SynchronizePageActionGroup {
 		}
 	}
 	public void fillContextMenu(IMenuManager manager) {
-		appendToGroup(manager, ISynchronizePageConfiguration.NAVIGATE_GROUP, expandAllAction);
+		if (manager == null || expandAllAction == null)
+			return;
+
+		if (manager.find(TeamUIPlugin.REMOVE_FROM_VIEW_ACTION_ID) != null)
+			manager.insertBefore(TeamUIPlugin.REMOVE_FROM_VIEW_ACTION_ID, expandAllAction);
+		else
+			appendToGroup(manager, ISynchronizePageConfiguration.NAVIGATE_GROUP, expandAllAction);
 	}
 	public void fillActionBars(IActionBars actionBars) {
 		IToolBarManager manager = actionBars.getToolBarManager();
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java
index 01f8730..9e9eac7 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SaveablesCompareEditorInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -126,10 +126,9 @@ public class SaveablesCompareEditorInput extends CompareEditorInput implements
 						closed = closeEditor(true);
 					}
 					if (!closed) {
-						// The editor was closed either because the compare
-						// input still has changes
-						// or because the editor input is dirty. In either case,
-						// fire the changes
+						// The editor was not closed either because the compare
+						// input still has changes or because the editor input
+						// is dirty. In either case, fire the changes
 						// to the registered listeners
 						propogateInputChange();
 					}
@@ -144,7 +143,7 @@ public class SaveablesCompareEditorInput extends CompareEditorInput implements
 			fLeftPropertyListener = new IPropertyListener() {
 				public void propertyChanged(Object source, int propId) {
 					if (propId == SaveableComparison.PROP_DIRTY) {
-						setDirty(fLeftSaveable.isDirty());
+						setLeftDirty(fLeftSaveable.isDirty());
 					}
 				}
 			};
@@ -156,14 +155,15 @@ public class SaveablesCompareEditorInput extends CompareEditorInput implements
 			fRightPropertyListener = new IPropertyListener() {
 				public void propertyChanged(Object source, int propId) {
 					if (propId == SaveableComparison.PROP_DIRTY) {
-						setDirty(fRightSaveable.isDirty());
+						setRightDirty(fRightSaveable.isDirty());
 					}
 				}
 			};
 			rscm.addPropertyListener(fRightPropertyListener);
 		}
 
-		setDirty(fLeftSaveable.isDirty() || fRightSaveable.isDirty());
+		setLeftDirty(fLeftSaveable.isDirty());
+		setRightDirty(fRightSaveable.isDirty());
 	}
 
 	/*
@@ -360,6 +360,54 @@ public class SaveablesCompareEditorInput extends CompareEditorInput implements
 	}
 
 	/**
+	 * Returns <code>true</code> if the given saveable contains any unsaved
+	 * changes. If the saveable doesn't match either left nor right side of the
+	 * current editor input {@link CompareEditorInput#isSaveNeeded()} is called.
+	 * <p>
+	 * This method is preferred to {@link CompareEditorInput#isSaveNeeded()}.
+	 * 
+	 * @param the
+	 *            the saveable to check
+	 * @return <code>true</code> if there are changes that need to be saved
+	 * @since 3.7
+	 */
+	boolean isSaveNeeded(Saveable saveable) {
+		if (saveable == null) {
+			return isSaveNeeded();
+		}
+		if (saveable.equals(fLeftSaveable)) {
+			return isLeftSaveNeeded();
+		}
+		if (saveable.equals(fRightSaveable)) {
+			return isRightSaveNeeded();
+		}
+		// Fallback call returning true if there are unsaved changes in either
+		// left or right side
+		return isSaveNeeded();
+	}
+
+	void setDirty(boolean dirty, Saveable saveable) {
+		if (saveable.equals(fLeftSaveable)) {
+			setLeftDirty(dirty);
+		}
+		if (saveable.equals(fRightSaveable)) {
+			setRightDirty(dirty);
+		}
+	}
+
+	void saveChanges(IProgressMonitor monitor, Saveable saveable)
+			throws CoreException {
+		if (saveable.equals(fLeftSaveable)) {
+			flushLeftViewers(monitor);
+			return;
+		} else if (saveable.equals(fRightSaveable)) {
+			flushRightViewers(monitor);
+			return;
+		}
+		Assert.isTrue(false, "invalid saveable parameter"); //$NON-NLS-1$
+	}
+
+	/**
 	 * Close the editor if it is not dirty. If it is still dirty, let the
 	 * content merge viewer handle the compare input change.
 	 * 
@@ -410,12 +458,10 @@ public class SaveablesCompareEditorInput extends CompareEditorInput implements
 	}
 
 	/**
-	 * Method called from {@link #prepareInput(IProgressMonitor)} to obtain the
-	 * input. It's purpose is to ensure that the input is an instance of
-	 * {@link ICompareInput}.
+	 * Method called from {@link #prepareInput(IProgressMonitor)} to obtain the input. Its purpose
+	 * is to ensure that the input is an instance of {@link ICompareInput}.
 	 * 
-	 * @param monitor
-	 *            a progress monitor
+	 * @param monitor a progress monitor
 	 * @return the compare input
 	 * @throws InvocationTargetException
 	 * @throws InterruptedException
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java
index 6d4dfae..3fa10fb 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,7 @@ package org.eclipse.team.internal.ui.synchronize;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.action.*;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.util.*;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.widgets.Menu;
@@ -126,16 +125,35 @@ public abstract class StructuredViewerAdvisor extends AbstractViewerAdvisor {
 				StructuredViewerAdvisor.this.dispose();
 			}
 		});
-		viewer.addOpenListener(new IOpenListener() {
-			public void open(OpenEvent event) {
+
+		new OpenAndLinkWithEditorHelper(viewer) {
+
+			protected void activate(ISelection selection) {
+				final int currentMode= OpenStrategy.getOpenMethod();
+				try {
+					OpenStrategy.setOpenMethod(OpenStrategy.DOUBLE_CLICK);
+					handleOpen();
+				} finally {
+					OpenStrategy.setOpenMethod(currentMode);
+				}
+			}
+
+			protected void linkToEditor(ISelection selection) {
+				// not supported by this part
+			}
+
+			protected void open(ISelection selection, boolean activate) {
 				handleOpen();
 			}
-		});
+
+		};
+
 		viewer.addDoubleClickListener(new IDoubleClickListener() {
 			public void doubleClick(DoubleClickEvent event) {
 				handleDoubleClick(viewer, event);
 			}
 		});
+
 		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
 				// Update the action bars enablement for any contributed action groups
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SyncInfoSetChangesSection.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SyncInfoSetChangesSection.java
index f24570f..c834e82 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SyncInfoSetChangesSection.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SyncInfoSetChangesSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@ import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Composite;
 import org.eclipse.team.core.ITeamStatus;
 import org.eclipse.team.core.synchronize.*;
 import org.eclipse.team.internal.ui.*;
@@ -86,8 +86,9 @@ public class SyncInfoSetChangesSection extends ForwardingChangesSection {
 	/**
 	 * Create a changes section on the following page.
 	 * 
-	 * @param parent the parent control 
+	 * @param parent the parent control
 	 * @param page the page showing this section
+	 * @param configuration the configuration for the synchronize page
 	 */
 	public SyncInfoSetChangesSection(Composite parent, AbstractSynchronizePage page, ISynchronizePageConfiguration configuration) {
 		super(parent, page, configuration);
@@ -179,7 +180,7 @@ public class SyncInfoSetChangesSection extends ForwardingChangesSection {
 	
 	private Composite getErrorComposite(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setBackground(getBackgroundColor());
+		composite.setBackground(getListBackgroundColor());
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
 		composite.setLayout(layout);
@@ -194,7 +195,7 @@ public class SyncInfoSetChangesSection extends ForwardingChangesSection {
 				showErrors();
 			}
 		});
-		link.setBackground(getBackgroundColor());
+		link.setBackground(getListBackgroundColor());
 		link.setUnderlined(true);
 		
 		link = new Hyperlink(composite, SWT.WRAP);
@@ -204,7 +205,7 @@ public class SyncInfoSetChangesSection extends ForwardingChangesSection {
 				getPage().reset();
 			}
 		});
-		link.setBackground(getBackgroundColor());
+		link.setBackground(getListBackgroundColor());
 		link.setUnderlined(true);
 		
 		createDescriptionLabel(composite, NLS.bind(TeamUIMessages.ChangesSection_10, new String[] { Utils.shortenText(SynchronizeView.MAX_NAME_LENGTH, getConfiguration().getParticipant().getName()) })); 
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementSorter.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementSorter.java
index 8b9cac7..af94ed8 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementSorter.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementSorter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,13 +31,10 @@ public class SynchronizeModelElementSorter extends ResourceSorter {
 	public int compare(Viewer viewer, Object o1, Object o2) {
 		IResource resource1 = getResource(o1);
 		IResource resource2 = getResource(o2);
-		int result;
-		if (resource1 != null && resource2 != null) {
-			result = super.compare(viewer, resource1, resource2);
-		} else {
-			result = super.compare(viewer, o1, o2);
-		}
-		return result;
+		Object objectToCompare1 = resource1==null ? o1 : resource1;
+		Object objectToCompare2 = resource2==null ? o2 : resource2;
+		
+		return super.compare(viewer, objectToCompare1, objectToCompare2);
 	}
 
 	protected IResource getResource(Object obj) {
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeView.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeView.java
index b63d243..5323155 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeView.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeView.java
@@ -90,6 +90,13 @@ public class SynchronizeView extends PageBookView implements ISynchronizeView, I
 	private ToggleLinkingAction fToggleLinkingAction;
 
 	/**
+	 * Refresh action.
+	 * @since 3.7
+	 */
+	private SynchronizeAndRefreshAction fRefreshAction;
+
+
+	/**
 	 * Action to paste patch into the view, starting a new synchronization.
 	 */
 	private PasteAction fPastePatchAction;
@@ -257,7 +264,7 @@ public class SynchronizeView extends PageBookView implements ISynchronizeView, I
 				TeamUIPlugin.log(IStatus.ERROR, e.getMessage(), e);
 			}
 		}
-		page.getSite().getActionBars().setGlobalActionHandler(ActionFactory.REFRESH.getId(), fPageDropDown);
+		page.getSite().getActionBars().setGlobalActionHandler(ActionFactory.REFRESH.getId(), fRefreshAction);
 		page.getSite().getActionBars().updateActionBars();
 	}
 
@@ -384,7 +391,8 @@ public class SynchronizeView extends PageBookView implements ISynchronizeView, I
 	 * participant being displayed.
 	 */
 	protected void createActions() {
-		fPageDropDown = new SynchronizePageDropDownAction(this);
+		fPageDropDown= new SynchronizePageDropDownAction(this);
+		fRefreshAction= new SynchronizeAndRefreshAction(this);
 		fPinAction = new PinParticipantAction();
 		fToggleLinkingAction = new ToggleLinkingAction(this);
 		fRemoveCurrentAction = new RemoveSynchronizeParticipantAction(this, false);
@@ -441,8 +449,8 @@ public class SynchronizeView extends PageBookView implements ISynchronizeView, I
 			partActivated(part);
 			fPageDropDown.update();
 			createOpenAndLinkWithEditorHelper(getViewer());
-            rememberCurrentParticipant();
-            PlatformUI.getWorkbench().getHelpSystem().setHelp(getPageBook().getParent(), participant.getHelpContextId());
+			rememberCurrentParticipant();
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(getPageBook().getParent(), participant.getHelpContextId());
 		}
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/ChangeSetActionGroup.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/ChangeSetActionGroup.java
index dcdf60c..1563780 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/ChangeSetActionGroup.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/ChangeSetActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,7 @@ import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.team.core.diff.IDiff;
 import org.eclipse.team.core.subscribers.Subscriber;
-import org.eclipse.team.core.synchronize.FastSyncInfoFilter;
-import org.eclipse.team.core.synchronize.SyncInfo;
+import org.eclipse.team.core.synchronize.*;
 import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter;
 import org.eclipse.team.internal.core.subscribers.*;
 import org.eclipse.team.internal.ui.TeamUIMessages;
@@ -143,7 +142,7 @@ public class ChangeSetActionGroup extends SynchronizePageActionGroup {
         public void run() {
             ActiveChangeSet set = getSelectedSet();
             if (set == null) return;
-            if (MessageDialog.openConfirm(getConfiguration().getSite().getShell(), TeamUIMessages.ChangeSetActionGroup_0, NLS.bind(TeamUIMessages.ChangeSetActionGroup_1, new String[] { set.getTitle() }))) { // 
+            if (MessageDialog.openConfirm(getConfiguration().getSite().getShell(), TeamUIMessages.ChangeSetActionGroup_0, NLS.bind(TeamUIMessages.ChangeSetActionGroup_1, new String[] { LegacyActionTools.escapeMnemonics(set.getTitle()) }))) { // 
                 getActiveChangeSetManager().remove(set);
             }
         }
@@ -151,24 +150,39 @@ public class ChangeSetActionGroup extends SynchronizePageActionGroup {
 	
 	private class MakeDefaultChangeSetAction extends ChangeSetAction {
 
-        public MakeDefaultChangeSetAction(ISynchronizePageConfiguration configuration) {
-            super(TeamUIMessages.ChangeLogModelProvider_9, configuration); 
-        }
-        
-        public void run() {
-            ActiveChangeSet set = getSelectedSet();
-            if (set == null) return;
-    		getActiveChangeSetManager().makeDefault(set);
-        }
-	    
+		public MakeDefaultChangeSetAction(
+				ISynchronizePageConfiguration configuration) {
+			super(TeamUIMessages.ChangeLogModelProvider_9, configuration);
+		}
+
+		protected boolean updateSelection(IStructuredSelection selection) {
+			if (getSelectedSet() != null) {
+				setText(TeamUIMessages.ChangeLogModelProvider_9);
+				setChecked(getSelectedSet().equals(
+						getActiveChangeSetManager().getDefaultSet()));
+			} else {
+				setText(TeamUIMessages.ChangeLogModelProvider_10);
+				setChecked(false);
+			}
+			return true;
+		}
+
+		public void run() {
+			getActiveChangeSetManager().makeDefault(
+					isChecked() ? getSelectedSet() : null);
+			if (getSelectedSet() == null) {
+				setChecked(false); // keep unchecked
+			}
+		}
+
 	}
-	
+
 	private class AddToChangeSetAction extends SynchronizeModelAction {
-	 
+	
         private final ActiveChangeSet set;
 	    
         public AddToChangeSetAction(ISynchronizePageConfiguration configuration, ActiveChangeSet set, ISelection selection) {
-            super(set == null ? TeamUIMessages.ChangeSetActionGroup_2 : set.getTitle(), configuration); 
+            super(set == null ? TeamUIMessages.ChangeSetActionGroup_2 : LegacyActionTools.escapeMnemonics(set.getTitle()), configuration); 
             this.set = set;
             selectionChanged(selection);
         }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java
index ff72283..a8e653a 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,16 +11,17 @@
 package org.eclipse.team.internal.ui.synchronize.actions;
 
 import org.eclipse.core.resources.IResource;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.*;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.team.internal.ui.TeamUIMessages;
 import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.internal.ui.synchronize.SaveablesCompareEditorInput;
 import org.eclipse.team.ui.synchronize.*;
-import org.eclipse.ui.IWorkbenchSite;
-import org.eclipse.ui.actions.ActionGroup;
-import org.eclipse.ui.actions.OpenWithMenu;
+import org.eclipse.ui.*;
+import org.eclipse.ui.actions.*;
+import org.eclipse.ui.keys.IBindingService;
 
 /**
  * This is the action group for the open actions. It contains open
@@ -64,7 +65,8 @@ public class OpenWithActionGroup extends ActionGroup {
 	}
 
 	private boolean hasFileMenu(IMenuManager menu) {
-		return menu.find(openFileAction.getId()) != null;
+		return menu.find(openFileAction.getId()) != null
+				|| menu.find(IWorkbenchCommandConstants.NAVIGATE_SHOW_IN_QUICK_MENU) != null;
 	}
 
 	/**
@@ -103,49 +105,87 @@ public class OpenWithActionGroup extends ActionGroup {
 			}
 			return;
 		}
-        
+
         if (elements.length != resources.length){
         	// Only supported if all the items are resources.
         	return;
         }
-        
+
+        boolean allFiles = true;
 		for (int i = 0; i < resources.length; i++) {
 			if (resources[i].getType() != IResource.FILE) {
-				// Only supported if all the items are files.
+				// Open actions are only supported if all the items are files.
+				allFiles = false;
+				break;
+			}
+		}
+		
+		if (allFiles) {
+			if (openInCompareAction != null) {
+				menu.appendToGroup(groupId, openInCompareAction);
+			}
+		}
+
+		for (int i = 0; i < resources.length; i++) {
+			if (!resources[i].exists()) {
+				// Only support non-compare actions if all resources exist.
 				return;
 			}
 		}
-        
-        if (openInCompareAction != null) {
-            menu.appendToGroup(groupId, openInCompareAction);
-        }
-        
-        for (int i = 0; i < resources.length; i++) {
-            if (!resources[i].exists()) {
-                // Only support non-compare actions if all files exist.
-                return;
-            }
-        }
-        
-		if (openFileAction != null) {
-			openFileAction.selectionChanged(selection);
-			menu.appendToGroup(groupId, openFileAction);
+
+		if (allFiles) {	
+			if (openFileAction != null) {
+				openFileAction.selectionChanged(selection);
+				menu.appendToGroup(groupId, openFileAction);
+			}
+
+			if (resources.length == 1) {
+				// Only support the "Open With..." submenu if exactly one file is selected.
+				IWorkbenchSite ws = getSite().getWorkbenchSite();
+				if (ws != null) {
+					MenuManager openWithSubmenu =
+						new MenuManager(TeamUIMessages.OpenWithActionGroup_0); 
+					openWithSubmenu.add(new OpenWithMenu(ws.getPage(), resources[0]));
+					menu.appendToGroup(groupId, openWithSubmenu);
+				}
+			}
+		}
+
+		// Add "Show In" submenu, available for any number of resources
+		IWorkbenchSite ws = getSite().getWorkbenchSite();
+		if (ws != null) {
+			MenuManager showInSubmenu = new MenuManager(getShowInMenuLabel(),
+					IWorkbenchCommandConstants.NAVIGATE_SHOW_IN_QUICK_MENU);
+			IContributionItem showInMenu = ContributionItemFactory.VIEWS_SHOW_IN
+					.create(ws.getWorkbenchWindow());
+			showInSubmenu.add(showInMenu);
+			menu.appendToGroup(groupId, showInSubmenu);
 		}
-        
-        if (resources.length == 1) {
-            // Only support the "Open With..." submenu if exactly one file is selected.
-            IWorkbenchSite ws = getSite().getWorkbenchSite();
-            if (ws != null) {
-                MenuManager submenu =
-                    new MenuManager(TeamUIMessages.OpenWithActionGroup_0); 
-                submenu.add(new OpenWithMenu(ws.getPage(), resources[0]));
-                menu.appendToGroup(groupId, submenu);
-            }
-        }
     }
 
+	/**
+	 * {@link SaveablesCompareEditorInput#getShowInMenuLabel}
+	 * 
+	 * @return label for "Show In" menu
+	 */
+	private static String getShowInMenuLabel() {
+		String keyBinding = null;
+
+		IBindingService bindingService = (IBindingService) PlatformUI
+				.getWorkbench().getAdapter(IBindingService.class);
+		if (bindingService != null)
+			keyBinding = bindingService
+					.getBestActiveBindingFormattedFor(IWorkbenchCommandConstants.NAVIGATE_SHOW_IN_QUICK_MENU);
+
+		if (keyBinding == null)
+			keyBinding = ""; //$NON-NLS-1$
+
+		return NLS
+				.bind(TeamUIMessages.SaveableCompareEditorInput_0, keyBinding);
+	}
+
 	public void openInCompareEditor() {
 		if (openInCompareAction != null)
-			openInCompareAction.run();		
+			openInCompareAction.run();
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/RemoveFromViewAction.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/RemoveFromViewAction.java
index e79f012..c3d4546 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/RemoveFromViewAction.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/RemoveFromViewAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,19 +23,17 @@ import org.eclipse.team.core.synchronize.SyncInfoSet;
 import org.eclipse.team.internal.core.subscribers.WorkingSetFilteredSyncInfoCollector;
 import org.eclipse.team.internal.ui.*;
 import org.eclipse.team.internal.ui.synchronize.SubscriberParticipantPage;
-import org.eclipse.team.ui.synchronize.ISynchronizePage;
-import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
-import org.eclipse.team.ui.synchronize.SynchronizeModelAction;
-import org.eclipse.team.ui.synchronize.SynchronizeModelOperation;
+import org.eclipse.team.ui.synchronize.*;
 
 /**
- * Remove the selected elemements from the page
+ * Remove the selected elements from the page
  */
 public class RemoveFromViewAction extends SynchronizeModelAction {
-
+	
 	public RemoveFromViewAction(ISynchronizePageConfiguration configuration) {
 		super(null, configuration);
 		Utils.initAction(this, "action.removeFromView."); //$NON-NLS-1$
+		setId(TeamUIPlugin.REMOVE_FROM_VIEW_ACTION_ID);
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/StatusLineContributionGroup.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/StatusLineContributionGroup.java
index b2fa407..98e5b03 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/StatusLineContributionGroup.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/StatusLineContributionGroup.java
@@ -82,7 +82,7 @@ public abstract class StatusLineContributionGroup extends ActionGroup {
 		// count changes only if the given mode is supported
 		final int workspaceConflicting = ((supportedModes & ISynchronizePageConfiguration.CONFLICTING_MODE) != 0) ? countFor(SyncInfo.CONFLICTING) : 0;
 		final int workspaceOutgoing = ((supportedModes & ISynchronizePageConfiguration.OUTGOING_MODE) != 0) ? countFor(SyncInfo.OUTGOING) : 0;
-		final int workspaceIncoming = ((supportedModes & ISynchronizePageConfiguration.INCOMING_MODE) != 0) ? countFor(SyncInfo.INCOMING) : 0;
+		final int workspaceIncoming = ((supportedModes & ISynchronizePageConfiguration.INCOMING_MODE) != 0) ? countFor(SyncInfo.INCOMING) : 0; 
 
 		TeamUIPlugin.getStandardDisplay().asyncExec(new Runnable() {
 			public void run() {
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/SynchronizeAndRefreshAction.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/SynchronizeAndRefreshAction.java
new file mode 100644
index 0000000..db80c1f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/SynchronizeAndRefreshAction.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ui.synchronize.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.team.ui.synchronize.ISynchronizeParticipant;
+import org.eclipse.team.ui.synchronize.ISynchronizeView;
+import org.eclipse.ui.actions.RefreshAction;
+
+
+/**
+ * Action which synchronizes the current synchronization participant and locally refreshes the
+ * selected resources.
+ * 
+ * @since 3.7
+ */
+public class SynchronizeAndRefreshAction extends Action {
+
+	private ISynchronizeView fView;
+
+	public SynchronizeAndRefreshAction(ISynchronizeView view) {
+		fView= view;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.IAction#run()
+	 */
+	public void run() {
+		ISynchronizeParticipant current = fView.getParticipant();
+		if(current != null) {
+			refreshLocal();
+			current.run(fView);
+		}
+	}
+
+	/**
+	 * Refreshes the local resources that are selected in the view.
+	 */
+	private void refreshLocal() {
+		final ISelectionProvider selectionProvider= fView.getSite().getSelectionProvider();
+		if (selectionProvider == null)
+			return;
+		
+		ISelection selection= selectionProvider.getSelection();
+		if (!(selection instanceof IStructuredSelection))
+			return;
+
+		RefreshAction refreshAction= new RefreshAction(fView.getSite());
+		if (selection.isEmpty())
+			refreshAction.refreshAll();
+		else {
+			refreshAction.selectionChanged((IStructuredSelection)selection);
+			refreshAction.run();
+		}
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/SynchronizePageDropDownAction.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/SynchronizePageDropDownAction.java
index 912bd61..b4b1c26 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/SynchronizePageDropDownAction.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/SynchronizePageDropDownAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ExportProjectSetLocationPage.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ExportProjectSetLocationPage.java
index 30774ae..65916c5 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ExportProjectSetLocationPage.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ExportProjectSetLocationPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,8 +91,8 @@ public class ExportProjectSetLocationPage extends TeamWizardPage {
 		inner.setLayoutData(data);
 
 		fileCombo = createDropDownCombo(inner);
-		file = PsfFilenameStore.getSuggestedDefault();
-		fileCombo.setItems(PsfFilenameStore.getHistory());
+		file = PsfFilenameStore.getInstance().getSuggestedDefault();
+		fileCombo.setItems(PsfFilenameStore.getInstance().getHistory());
 		fileCombo.setText(file);
 		fileCombo.addListener(SWT.Modify, new Listener() {
 			public void handleEvent(Event event) {
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetMainPage.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetMainPage.java
index 92fdfad..bd8ecbf 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetMainPage.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetMainPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,12 +11,19 @@
 package org.eclipse.team.internal.ui.wizards;
 
 import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
 
+import org.eclipse.compare.internal.Utilities;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
@@ -32,16 +39,51 @@ public class ImportProjectSetMainPage extends TeamWizardPage {
 	String file = ""; //$NON-NLS-1$
 	Button browseButton;
 	
+	String urlString = ""; //$NON-NLS-1$
+	Combo urlCombo;
+
+	// input type radios
+	private Button fileInputButton;
+	private Button urlInputButton;
+
+	// input type
+	public static final int InputType_file = 0;
+	public static final int InputType_URL = 1;
+	private int inputType = InputType_file;
+
 	private boolean runInBackground = isRunInBackgroundPreferenceOn();
 	// a wizard shouldn't be in an error state until the state has been modified by the user
 	private int messageType = NONE;
 	private WorkingSetGroup workingSetGroup; 
 	
-	public ImportProjectSetMainPage(String pageName, String title, ImageDescriptor titleImage) {
+	private PsfFilenameStore psfFilenameStore = PsfFilenameStore.getInstance();
+	private PsfUrlStore psfUrlStore = PsfUrlStore.getInstance();
+
+	public ImportProjectSetMainPage(String pageName, String title,
+			ImageDescriptor titleImage) {
 		super(pageName, title, titleImage);
-		setDescription(TeamUIMessages.ImportProjectSetMainPage_description); 
+		setDescription(TeamUIMessages.ImportProjectSetMainPage_description);
 	}
-	
+
+	private void setInputType(int inputTypeSelected) {
+		this.inputType = inputTypeSelected;
+		// reset the message type and give the user fresh chance to input
+		// correct data
+		messageType = NONE;
+		// update controls
+		fileInputButton.setSelection(inputType == InputType_file);
+		fileCombo.setEnabled(inputType == InputType_file);
+		browseButton.setEnabled(inputType == InputType_file);
+		urlInputButton.setSelection(inputType == InputType_URL);
+		urlCombo.setEnabled(inputType == InputType_URL);
+		// validate field
+		if (inputType == InputType_file)
+			updateFileEnablement();
+		if (inputType == InputType_URL)
+			updateUrlEnablement();
+
+	}
+
 	/*
 	 * @see IDialogPage#createControl(Composite)
 	 */
@@ -60,21 +102,52 @@ public class ImportProjectSetMainPage extends TeamWizardPage {
 		layout.marginWidth = 0;
 		inner.setLayout(layout);
 		
-		createLabel(inner, TeamUIMessages.ImportProjectSetMainPage_Project_Set_File_Name__2); 
+		fileInputButton = new Button(inner, SWT.RADIO);
+		fileInputButton
+				.setText(TeamUIMessages.ImportProjectSetMainPage_Project_Set_File);
+		fileInputButton.setEnabled(true);
+		fileInputButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				setInputType(InputType_file);
+			}
+		});
 
 		fileCombo = createDropDownCombo(inner);
-		file = PsfFilenameStore.getSuggestedDefault();
-		fileCombo.setItems(PsfFilenameStore.getHistory());
+		file = psfFilenameStore.getSuggestedDefault();
+		fileCombo.setItems(psfFilenameStore.getHistory());
 		fileCombo.setText(file);
 		fileCombo.addListener(SWT.Modify, new Listener() {
 			public void handleEvent(Event event) {
 				file = fileCombo.getText();				
-				updateEnablement();
+				updateFileEnablement();
 			}
 		});
 
 		browseButton = new Button(inner, SWT.PUSH);
 		browseButton.setText(TeamUIMessages.ImportProjectSetMainPage_Browse_3); 
+
+		urlInputButton = new Button(inner, SWT.RADIO);
+		urlInputButton
+				.setText(TeamUIMessages.ImportProjectSetMainPage_Project_Set_Url);
+		urlInputButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				setInputType(InputType_URL);
+			}
+		});
+		urlCombo = createDropDownCombo(inner);
+		urlString = psfUrlStore.getSuggestedDefault();
+		urlCombo.setItems(psfUrlStore.getHistory());
+		urlCombo.setText(urlString);
+		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+		gd.horizontalSpan = 2;
+		urlCombo.setLayoutData(gd);
+		urlCombo.addListener(SWT.Modify, new Listener() {
+			public void handleEvent(Event event) {
+				urlString = urlCombo.getText();
+				updateUrlEnablement();
+			}
+		});
+
 		GridData data = new GridData();
 		data.horizontalAlignment = GridData.FILL;
 		int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
@@ -115,10 +188,31 @@ public class ImportProjectSetMainPage extends TeamWizardPage {
 		});
 		
 		setControl(composite);
-		updateEnablement();
+		setDefaultInputType();
 		Dialog.applyDialogFont(parent);
-		// future messages will be of type error
-		messageType = ERROR;
+	}
+
+	private void setDefaultInputType() {
+		// check for clipboard contents
+		Control c = getControl();
+		if (c != null) {
+			Clipboard clipboard = new Clipboard(c.getDisplay());
+			Object o = clipboard.getContents(TextTransfer.getInstance());
+			clipboard.dispose();
+			if (o instanceof String) {
+				try {
+					URL url = new URL((String) o);
+					if (url != null) {
+						setInputType(InputType_URL);
+						urlCombo.setText((String) o);
+						return;
+					}
+				} catch (MalformedURLException e) {
+					// ignore, it's not and URL
+				}
+			}
+		}
+		setInputType(InputType_file);
 	}
 
 	private void addWorkingSetSection(Composite composite) {
@@ -129,9 +223,41 @@ public class ImportProjectSetMainPage extends TeamWizardPage {
 						"org.eclipse.jdt.ui.JavaWorkingSetPage" /* JavaWorkingSetUpdater.ID */}); //$NON-NLS-1$
 	}
 	
-	private void updateEnablement() {
+	private void updateUrlEnablement() {
 		boolean complete = false;
 		setMessage(null);
+		setErrorMessage(null);
+
+		if (urlString.length() == 0) {
+			setMessage(TeamUIMessages.ImportProjectSetMainPage_specifyURL,
+					messageType);
+			complete = false;
+		} else {
+
+			try {
+				new URL(urlString);
+				// the URL is correct, we can clear the error message
+				complete = true;
+			} catch (MalformedURLException e) {
+				messageType = ERROR;
+				setMessage(TeamUIMessages.ImportProjectSetDialog_malformed_url,
+						messageType);
+				complete = false;
+			}
+		}
+
+		if (complete) {
+			setErrorMessage(null);
+			setDescription(TeamUIMessages.ImportProjectSetMainPage_description);
+		}
+
+		setPageComplete(complete);
+	}
+
+	private void updateFileEnablement() {
+		boolean complete = false;
+		setMessage(null);
+		setErrorMessage(null);
 		
 		if (file.length() == 0) {
 			setMessage(TeamUIMessages.ImportProjectSetMainPage_specifyFile, messageType);
@@ -141,14 +267,17 @@ public class ImportProjectSetMainPage extends TeamWizardPage {
 			// See if the file exists
 			File f = new File(file);
 			if (!f.exists()) {
+				messageType = ERROR;
 				setMessage(TeamUIMessages.ImportProjectSetMainPage_The_specified_file_does_not_exist_4, messageType); 
 				setPageComplete(false);
 				return;
 			} else if (f.isDirectory()) {
+				messageType = ERROR;
 				setMessage(TeamUIMessages.ImportProjectSetMainPage_You_have_specified_a_folder_5, messageType); 
 				setPageComplete(false);
 				return;
 			} else if (!ProjectSetImporter.isValidProjectSetFile(file)) {
+				messageType = ERROR;
 				setMessage(TeamUIMessages.ImportProjectSetMainPage_projectSetFileInvalid, messageType);
 				setPageComplete(false);
 				return;
@@ -168,6 +297,10 @@ public class ImportProjectSetMainPage extends TeamWizardPage {
 		return file;
 	}
 
+	public String getUrl() {
+		return urlString;
+	}
+
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible) {
@@ -193,4 +326,37 @@ public class ImportProjectSetMainPage extends TeamWizardPage {
 	public boolean isRunInBackgroundOn() {
 		return runInBackground;
 	}
+
+	public int getInputType() {
+		return inputType;
+	}
+
+	public String getURLContents() {
+		try {
+			PsfUrlStore.getInstance().remember(urlString);
+			String urlContent = Utilities.getURLContents(new URL(urlString),
+					getContainer());
+			if (ProjectSetImporter.isValidProjectSetString(urlContent)) {
+				return urlContent;
+			} else {
+				messageType = ERROR;
+				setMessage(
+						TeamUIMessages.ImportProjectSetMainPage_projectSetFileInvalid,
+						messageType);
+				setPageComplete(false);
+				return null;
+			}
+		} catch (OperationCanceledException e) { // ignore
+		} catch (InterruptedException e) { // ignore
+		} catch (InvocationTargetException e) {
+			messageType = ERROR;
+			setMessage(
+					TeamUIMessages.ImportProjectSetMainPage_The_given_URL_cannot_be_loaded,
+					messageType);
+			setPageComplete(false);
+		} catch (MalformedURLException e) {
+			// ignore as we tested it with modify listener on combo
+		}
+		return null;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetOperation.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetOperation.java
index e2dc46a..1d6418f 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetOperation.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ImportProjectSetOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,9 +22,36 @@ import org.eclipse.ui.IWorkingSet;
 import org.eclipse.ui.IWorkingSetManager;
 
 public class ImportProjectSetOperation extends TeamOperation {
-
+	
+	private String psfFileContents;
+	private String urlString;
 	private String psfFile;
 	private IWorkingSet[] workingSets;
+	
+	
+	/**
+	 * Operation for importing a Team Project Set stored in a String
+	 * 
+	 * @param context
+	 *            a runnable context,
+	 *            <code>null</null> for running in background
+	 * @param psfFileContents
+	 *            the psf file content to load
+	 * @param urlString
+	 *            url or path to file loaded into <code>psfFileContents</code>
+	 * @param workingSets
+	 *            an array of working sets where imported project should be
+	 *            added. If a working set doesn't exist it will be created. The
+	 *            array cannot be <code>null</code>, pass an empty array if you
+	 *            don't want to add projects to any working set.
+	 */
+	public ImportProjectSetOperation(IRunnableContext context,
+			String psfFileContents, String urlString, IWorkingSet[] workingSets) {
+		super(context);
+		this.psfFileContents = psfFileContents;
+		this.workingSets = workingSets;
+		this.urlString = urlString;
+	}
 
 	/**
 	 * Operation for importing a Team Project Set file
@@ -45,18 +72,32 @@ public class ImportProjectSetOperation extends TeamOperation {
 		this.psfFile = psfFile;
 		this.workingSets = workingSets;
 	}
+	
+	private void runForStringContent(IProgressMonitor monitor) throws InvocationTargetException{
+		IProject[] newProjects = ProjectSetImporter.importProjectSetFromString(
+				psfFileContents, urlString, getShell(), monitor);
+		createWorkingSet(workingSets, newProjects);
+	}
+	
+	private void runForFile(IProgressMonitor monitor) throws InvocationTargetException{
+		PsfFilenameStore.getInstance().remember(psfFile);
+		IProject[] newProjects = ProjectSetImporter.importProjectSet(psfFile,
+				getShell(), monitor);
+		createWorkingSet(workingSets, newProjects);
+	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
 	 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public void run(IProgressMonitor monitor) throws InvocationTargetException,
-			InterruptedException {
-		PsfFilenameStore.remember(psfFile);
-		IProject[] newProjects = ProjectSetImporter.importProjectSet(psfFile,
-				getShell(), monitor);
-		createWorkingSet(workingSets, newProjects);
+	public void run(IProgressMonitor monitor)
+			throws InvocationTargetException, InterruptedException{
+		if (psfFileContents != null) {
+			runForStringContent(monitor);
+		} else {
+			runForFile(monitor);
+		}
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetExportWizard.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetExportWizard.java
index 344d708..0bc668e 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetExportWizard.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetExportWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,7 +59,7 @@ public class ProjectSetExportWizard extends Wizard implements IExportWizard {
 					if (path.getFileExtension() == null) {
 						filename = filename + ".psf"; //$NON-NLS-1$
 					}
-					PsfFilenameStore.remember(filename);
+					PsfFilenameStore.getInstance().remember(filename);
 					File file = new File(filename);
 					File parentFile = file.getParentFile();
 					if (parentFile != null && !parentFile.exists()) {
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetImportWizard.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetImportWizard.java
index 7e442a8..6d338d7 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetImportWizard.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/ProjectSetImportWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,9 +40,20 @@ public class ProjectSetImportWizard extends Wizard implements IImportWizard {
 	public boolean performFinish() {
 		final boolean[] result = new boolean[] {false};
 		try {
-			ImportProjectSetOperation op = new ImportProjectSetOperation(
-					mainPage.isRunInBackgroundOn() ? null : getContainer(),
-					mainPage.getFileName(), mainPage.getWorkingSets());
+			ImportProjectSetOperation op;
+			if (mainPage.getInputType() == ImportProjectSetMainPage.InputType_URL) {
+				String psfContent = mainPage.getURLContents();
+				if(psfContent==null){
+					return false;
+				}
+				op = new ImportProjectSetOperation(
+						mainPage.isRunInBackgroundOn() ? null : getContainer(),
+						psfContent, mainPage.getUrl(), mainPage.getWorkingSets());
+			} else {
+				op = new ImportProjectSetOperation(
+						mainPage.isRunInBackgroundOn() ? null : getContainer(),
+						mainPage.getFileName(), mainPage.getWorkingSets());
+			}
 			op.run();
 			result[0] = true;
 		} catch (InterruptedException e) {
@@ -71,6 +82,6 @@ public class ProjectSetImportWizard extends Wizard implements IImportWizard {
 	public void init(IWorkbench workbench, IStructuredSelection selection) {
 		// The code that finds "selection" is broken (it is always empty), so we
 		// must dig for the selection in the workbench.
-		PsfFilenameStore.setDefaultFromSelection(workbench);
+		PsfFilenameStore.getInstance().setDefaultFromSelection(workbench);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfFilenameStore.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfFilenameStore.java
index 571fb49..aa5c735 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfFilenameStore.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfFilenameStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,27 +10,16 @@
  *******************************************************************************/
 package org.eclipse.team.internal.ui.wizards;
 
-import java.util.Vector;
-
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.team.internal.ui.TeamUIPlugin;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-
-public class PsfFilenameStore {
-	// Most recently used filename is first in the array.
-	// Least recently used filename is at the end of the list.
-	// When the list overflows, items drop off the end.
-	private static final int HISTORY_LENGTH = 10;
-
-	private static final String STORE_SECTION = "ImportPSFDialog"; //$NON-NLS-1$
+import org.eclipse.ui.*;
+
+public class PsfFilenameStore extends PsfStore {
+
 	private static final String FILENAMES = "filenames"; //$NON-NLS-1$
 	private static final String PREVIOUS = "previous"; //$NON-NLS-1$
 
@@ -38,13 +27,20 @@ public class PsfFilenameStore {
 	// This is only a cache; it is not part of the history until the user has used it.
 	private static String _selectedFilename = null;
 
-	private static IDialogSettings _section;
+	private static PsfFilenameStore instance;
+	
+	public static PsfFilenameStore getInstance(){
+		if(instance==null){
+			instance = new PsfFilenameStore();
+		}
+		return instance;
+	}
 
 	private PsfFilenameStore() {
-		// All-static
+		// Singleton
 	}
 
-	public static void setDefaultFromSelection(IWorkbench workbench) {
+	public void setDefaultFromSelection(IWorkbench workbench) {
 		// Scan the workbench for a selected PSF file
 		IWorkbenchWindow wnd = workbench.getActiveWorkbenchWindow();
 		IWorkbenchPage pg = wnd.getActivePage();
@@ -85,73 +81,20 @@ public class PsfFilenameStore {
 		_selectedFilename = path.toOSString();
 	}
 
-	public static String getSuggestedDefault() {
+	public String getSuggestedDefault() {
 		if (_selectedFilename != null) {
 			return _selectedFilename;
 		}
 		return getPrevious();
 	}
 
-	private static String getPrevious() {
-		IDialogSettings section = getSettingsSection();
-		String retval = section.get(PREVIOUS);
-		if (retval == null) {
-			retval = ""; //$NON-NLS-1$
-		}
-		return retval;
-	}
-
-	public static String[] getHistory() {
-		IDialogSettings section = getSettingsSection();
-		String[] arr = section.getArray(FILENAMES);
-		if (arr == null) {
-			arr = new String[0];
-		}
-		return arr;
-	}
-
-	public static void remember(String filename) {
-		Vector filenames = createVector(getHistory());
-		if (filenames.contains(filename)) {
-			// The item is in the list. Remove it and add it back at the
-			// beginning. If it already was at the beginning this will be a
-			// waste of time, but it's not even measurable so I don't care.
-			filenames.remove(filename);
-		}
-		// Most recently used filename goes to the beginning of the list
-		filenames.add(0, filename);
-
-		// Forget any overflowing items
-		while (filenames.size() > HISTORY_LENGTH) {
-			filenames.remove(HISTORY_LENGTH);
-		}
-
-		// Make it an array
-		String[] arr = (String[]) filenames.toArray(new String[filenames.size()]);
-
-		IDialogSettings section = getSettingsSection();
-		section.put(FILENAMES, arr);
-		section.put(PREVIOUS, filename);
+	protected String getPreviousTag() {
+		return PREVIOUS;
 	}
 
-	private static Vector createVector(Object[] arr) {
-		Vector v = new Vector();
-		for (int ix = 0; ix < arr.length; ++ix) {
-			v.add(ix, arr[ix]);
-		}
-		return v;
+	protected String getListTag() {
+		return FILENAMES;
 	}
 
-	private static IDialogSettings getSettingsSection() {
-		if (_section != null)
-			return _section;
-
-		IDialogSettings settings = TeamUIPlugin.getPlugin().getDialogSettings();
-		_section = settings.getSection(STORE_SECTION);
-		if (_section != null)
-			return _section;
-
-		_section = settings.addNewSection(STORE_SECTION);
-		return _section;
-	}
+	
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfStore.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfStore.java
new file mode 100644
index 0000000..9c7d2ee
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfStore.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ui.wizards;
+
+import java.util.Vector;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.team.internal.ui.TeamUIPlugin;
+
+public abstract class PsfStore {
+	// Most recently used filename is first in the array.
+	// Least recently used filename is at the end of the list.
+	// When the list overflows, items drop off the end.
+	private static final int HISTORY_LENGTH = 10;
+
+	private static final String STORE_SECTION = "ImportPSFDialog"; //$NON-NLS-1$
+	
+	private static IDialogSettings _section;
+	
+	protected abstract String getPreviousTag();
+	protected abstract String getListTag();
+	
+	public abstract String getSuggestedDefault();
+	
+	protected String getPrevious() {
+		IDialogSettings section = getSettingsSection();
+		String retval = section.get(getPreviousTag());
+		if (retval == null) {
+			retval = ""; //$NON-NLS-1$
+		}
+		return retval;
+	}
+
+	public String[] getHistory() {
+		IDialogSettings section = getSettingsSection();
+		String[] arr = section.getArray(getListTag());
+		if (arr == null) {
+			arr = new String[0];
+		}
+		return arr;
+	}
+
+	public void remember(String filename) {
+		Vector filenames = createVector(getHistory());
+		if (filenames.contains(filename)) {
+			// The item is in the list. Remove it and add it back at the
+			// beginning. If it already was at the beginning this will be a
+			// waste of time, but it's not even measurable so I don't care.
+			filenames.remove(filename);
+		}
+		// Most recently used filename goes to the beginning of the list
+		filenames.add(0, filename);
+
+		// Forget any overflowing items
+		while (filenames.size() > HISTORY_LENGTH) {
+			filenames.remove(HISTORY_LENGTH);
+		}
+
+		// Make it an array
+		String[] arr = (String[]) filenames.toArray(new String[filenames.size()]);
+
+		IDialogSettings section = getSettingsSection();
+		section.put(getListTag(), arr);
+		section.put(getPreviousTag(), filename);
+	}
+
+	private Vector createVector(Object[] arr) {
+		Vector v = new Vector();
+		for (int ix = 0; ix < arr.length; ++ix) {
+			v.add(ix, arr[ix]);
+		}
+		return v;
+	}
+
+	private IDialogSettings getSettingsSection() {
+		if (_section != null)
+			return _section;
+
+		IDialogSettings settings = TeamUIPlugin.getPlugin().getDialogSettings();
+		_section = settings.getSection(STORE_SECTION);
+		if (_section != null)
+			return _section;
+
+		_section = settings.addNewSection(STORE_SECTION);
+		return _section;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfUrlStore.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfUrlStore.java
new file mode 100644
index 0000000..bbeec61
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/wizards/PsfUrlStore.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ui.wizards;
+
+/**
+ * Stores URL history for importing project sets window.
+ * 
+ */
+public class PsfUrlStore extends PsfStore {
+
+	private static final String URLS = "urls"; //$NON-NLS-1$
+	private static final String PREVIOUS = "previous_url"; //$NON-NLS-1$
+
+	private static PsfUrlStore instance;
+
+	public static PsfUrlStore getInstance() {
+		if (instance == null) {
+			instance = new PsfUrlStore();
+		}
+		return instance;
+	}
+
+	private PsfUrlStore() {
+		// Singleton
+	}
+
+	protected String getPreviousTag() {
+		return PREVIOUS;
+	}
+
+	protected String getListTag() {
+		return URLS;
+	}
+
+	public String getSuggestedDefault() {
+		return getPrevious();
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/IScmUrlImportWizardPage.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/IScmUrlImportWizardPage.java
new file mode 100644
index 0000000..ad8fc4c
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/IScmUrlImportWizardPage.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.ui;
+
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.team.core.RepositoryProviderType;
+import org.eclipse.team.core.ScmUrlImportDescription;
+
+/**
+ * IScmUrlImportWizardPage defines the interface that users of the extension
+ * point <code>org.eclipse.team.ui.scmUrlImportPages</code> must implement.
+ * 
+ * <strong>EXPERIMENTAL</strong>. This class has been added as part of a work in
+ * progress. There is no guarantee that this API will work or that it will
+ * remain the same. Please do not use this API without consulting with the Team
+ * team.
+ * 
+ * @since 3.6
+ */
+public interface IScmUrlImportWizardPage extends IWizardPage {
+
+	public static final String ATT_EXTENSION = "scmUrlImportPages"; //$NON-NLS-1$
+	public static final String ATT_PAGE = "page"; //$NON-NLS-1$
+	public static final String ATT_REPOSITORY = "repository"; //$NON-NLS-1$
+
+	/**
+	 * Called when the import wizard is closed by selecting the finish button.
+	 * Implementers may store the page result (new/changed bundle import
+	 * descriptions in getSelection) here.
+	 * 
+	 * @return if the operation was successful. The wizard will only close when
+	 *         <code>true</code> is returned.
+	 */
+	public boolean finish();
+
+	/**
+	 * Return the import descriptions for the page. The descriptions may differ
+	 * from those initially set using
+	 * {@link #setSelection(ScmUrlImportDescription[])} if the user modified
+	 * import configuration.
+	 * 
+	 * @return the SCM URLs descriptions for the page.
+	 */
+	public ScmUrlImportDescription[] getSelection();
+
+	/**
+	 * Sets the import descriptions to be edited on the page. The passed
+	 * descriptions can be edited and should be returned in
+	 * {@link #getSelection()}.
+	 * 
+	 * @param descriptions
+	 *            the SCM URLs descriptions edited on the page.
+	 */
+	public void setSelection(ScmUrlImportDescription[] descriptions);
+
+	/**
+	 * Sets the RepositoryProviderType for the page.
+	 * 
+	 * @param provider
+	 *            to set
+	 */
+	public void setProvider(RepositoryProviderType provider);
+
+	/**
+	 * Return the RepositoryProviderType associated with the page.
+	 * 
+	 * @return a RepositoryProviderType for the current page
+	 */
+	public RepositoryProviderType getProvider();
+
+}
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java
index bd581b8..c175e9a 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,12 @@
  *******************************************************************************/
 package org.eclipse.team.ui;
 
+import java.net.URI;
+import java.util.*;
+
+import org.eclipse.core.runtime.*;
 import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.team.core.*;
 import org.eclipse.team.internal.ui.TeamUIPlugin;
 import org.eclipse.team.internal.ui.history.GenericHistoryView;
 import org.eclipse.team.internal.ui.registry.TeamContentProviderManager;
@@ -127,7 +132,7 @@ public class TeamUI {
 	
 	/**
 	 * Return the team content provider manager which gives access to the team
-	 * content proivders registered with the
+	 * content providers registered with the
 	 * <code>org.eclipse.team.ui.teamContentProviders</code> extension point.
 	 * 
 	 * @return the team content provider manager
@@ -136,4 +141,67 @@ public class TeamUI {
 	public static ITeamContentProviderManager getTeamContentProviderManager() {
 		return TeamContentProviderManager.getInstance();
 	}
+	
+	/**
+	 * Return a set of wizard pages for the given descriptions. If no wizard
+	 * page is registered for a SCM URL scheme from a description then a page
+	 * will not be created. If an extension exits, a page will be created and
+	 * initialized with a set of corresponding descriptions.
+	 * 
+	 * <strong>EXPERIMENTAL</strong>. This class has been added as part of
+	 * a work in progress. There is no guarantee that this API will work or that
+	 * it will remain the same. Please do not use this API without consulting
+	 * with the Team team.
+	 * 
+	 * @param descriptions
+	 *            descriptions with SCM URLs
+	 * @return initialized wizard pages
+	 * @throws CoreException
+	 *             if an error occurs while trying to create a page extension
+	 * @since 3.6
+	 */
+	public static IScmUrlImportWizardPage[] getPages(ScmUrlImportDescription[] descriptions) throws CoreException {
+		// TODO: check scmUrls
+		IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(TeamUIPlugin.PLUGIN_ID, IScmUrlImportWizardPage.ATT_EXTENSION);
+		if (elements.length > 0) {
+			Set/*<IScmUrlImportWizardPage>*/ pages = new HashSet();
+			for (int i = 0; i < elements.length; i++) {
+				String repository = elements[i].getAttribute(IScmUrlImportWizardPage.ATT_REPOSITORY);
+				RepositoryProviderType providerType = RepositoryProviderType.getProviderType(repository);
+				String providerScheme = providerType.getFileSystemScheme();
+				Set/*<URI>*/ schemeUris = new HashSet();
+				// filter out descriptions for which provider is not known
+				for (int j = 0; j < descriptions.length; j++) {
+					URI scmUri = descriptions[j].getUri();
+					if (scmUri != null) {
+						if (ProjectSetCapability.SCHEME_SCM.equals(scmUri.getScheme())) {
+							if (scmUri.getSchemeSpecificPart().startsWith(providerScheme)) {
+								schemeUris.add(scmUri);
+							}
+						}
+					}
+				}
+				if (schemeUris.size() > 0) {
+					Object ext = TeamUIPlugin.createExtension(elements[i], IScmUrlImportWizardPage.ATT_PAGE);
+					if (ext instanceof IScmUrlImportWizardPage) {
+						IScmUrlImportWizardPage page = (IScmUrlImportWizardPage) ext;
+						page.setProvider(providerType);
+						Set/*<ScmUrlImportDescription>*/ set = new HashSet();
+						for (Iterator iterator = schemeUris.iterator(); iterator.hasNext();) {
+							URI uri = (URI) iterator.next();
+							for (int j = 0; j < descriptions.length; j++) {
+								if (descriptions[j].getUri().equals(uri)) {
+									set.add(descriptions[j]);
+								}
+							}
+						}
+						page.setSelection((ScmUrlImportDescription[]) set.toArray(new ScmUrlImportDescription[0]));
+						pages.add(page);
+					}
+				}
+			}
+			return (IScmUrlImportWizardPage[]) pages.toArray(new IScmUrlImportWizardPage[0]);
+		}
+		return null;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/history/package.html b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/history/package.html
index 2aee35d..c7edd19 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/history/package.html
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/history/package.html
@@ -6,7 +6,7 @@
    <title>Package-level Javadoc</title>
 </head>
 <body>
-Application programming interfaces for working with history 
+Application programming interfaces for working with history.
 <h2>
 Package Specification</h2>
 This package specifies the API for providing history pages to the history view. 
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationContentProvider.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationContentProvider.java
index 62c871c..b6d9fa8 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationContentProvider.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -405,7 +405,7 @@ public abstract class SynchronizationContentProvider implements ICommonContentPr
 	 * @see org.eclipse.team.core.diff.IDiffChangeListener#propertyChanged(int, org.eclipse.core.runtime.IPath[])
 	 */
 	public void propertyChanged(IDiffTree tree, int property, IPath[] paths) {
-		// Property changes only effect labels
+		// Property changes only affect labels
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/package.html b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/package.html
index 617573c..dab7f09 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/package.html
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/package.html
@@ -6,7 +6,7 @@
    <title>Package-level Javadoc</title>
 </head>
 <body>
-Application programming interfaces for working with resource mappings 
+Application programming interfaces for working with resource mappings.
 <h2>
 Package Specification</h2>
 This package specifies the API for working with resources mappings. Models can 
diff --git a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java
index debda36..e1442fb 100644
--- a/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java
+++ b/eclipse/plugins/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -239,8 +239,9 @@ public abstract class SaveableCompareEditorInput extends CompareEditorInput impl
 	}
 
 	/**
-	 * Method called from {@link #prepareInput(IProgressMonitor)} to obtain the input.
-	 * It's purpose is to ensure that the input is an instance of {@link ICompareInput}.
+	 * Method called from {@link #prepareInput(IProgressMonitor)} to obtain the input. Its purpose
+	 * is to ensure that the input is an instance of {@link ICompareInput}.
+	 * 
 	 * @param monitor a progress monitor
 	 * @return the compare input
 	 * @throws InvocationTargetException
diff --git a/eclipse/plugins/org.eclipse.text/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.text/META-INF/MANIFEST.MF
index 56f6880..0e20818 100644
--- a/eclipse/plugins/org.eclipse.text/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.text/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.text
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: 
diff --git a/eclipse/plugins/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java b/eclipse/plugins/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
index 4cc2339..a162d29 100644
--- a/eclipse/plugins/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
+++ b/eclipse/plugins/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -477,7 +477,7 @@ public class ProjectionMapping implements IDocumentInformationMapping , IDocumen
 
 		int endLine= fSlaveDocument.getLineOfOffset(imageRegion.getOffset() + imageRegion.getLength());
 		if (endLine != startLine)
-			throw new IllegalStateException();
+			throw new IllegalStateException("startLine (" + startLine + ") does not match endLine (" + endLine + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
 		return startLine;
 	}
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/DefaultPositionUpdater.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/DefaultPositionUpdater.java
index e37f400..c79124f 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/DefaultPositionUpdater.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/DefaultPositionUpdater.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,9 +29,11 @@ package org.eclipse.jface.text;
  * <li>Deleting text which strictly contains the position deletes the position. Note that the
  * position is not deleted if its only shrunken to length zero. To delete a position, the
  * modification must delete from <i>strictly before</i> to <i>strictly after</i> the position.</li>
- * <li>Replacing text overlapping with the position is considered as a sequence of first deleting
- * the replaced text and afterwards inserting the new text. Thus, a position might first be shifted
- * and shrunken and then be stretched.</li>
+ * <li>Replacing text contained by the position shrinks or expands the position (but does not shift it),
+ * such that the final position contains the original position and the replacing text.</li>
+ * <li>Replacing text overlapping the position in other ways is considered as a sequence of first deleting
+ * the replaced text and afterwards inserting the new text. Thus, a position is shrunken and can
+ * then be shifted (if the replaced text overlaps the offset of the position).</li>
  * </ul>
  * This class can be used as is or be adapted by subclasses. Fields are protected to allow
  * subclasses direct access. Because of the frequency with which position updaters are used this is
@@ -40,22 +42,20 @@ package org.eclipse.jface.text;
 public class DefaultPositionUpdater implements IPositionUpdater {
 
 	/** The position category the updater draws responsible for */
-	private String fCategory;
+	private final String fCategory;
 
 	/** Caches the currently investigated position */
 	protected Position fPosition;
-	/**
-	 * Remembers the original state of the investigated position
-	 * @since 2.1
-	 */
+	/** Caches the original state of the investigated position */
 	protected Position fOriginalPosition= new Position(0, 0);
+
 	/** Caches the offset of the replaced text */
 	protected int fOffset;
 	/** Caches the length of the replaced text */
 	protected int fLength;
 	/** Caches the length of the newly inserted text */
 	protected int fReplaceLength;
-	/** Catches the document */
+	/** Caches the document */
 	protected IDocument fDocument;
 
 
@@ -104,20 +104,10 @@ public class DefaultPositionUpdater implements IPositionUpdater {
 		if (myEnd < yoursStart)
 			return;
 
-		if (fLength <= 0) {
-
-			if (myStart < yoursStart)
-				fPosition.length += fReplaceLength;
-			else
-				fPosition.offset += fReplaceLength;
-
-		} else {
-
-			if (myStart <= yoursStart && fOriginalPosition.offset <= yoursStart)
-				fPosition.length += fReplaceLength;
-			else
-				fPosition.offset += fReplaceLength;
-		}
+		if (myStart < yoursStart)
+			fPosition.length += fReplaceLength;
+		else
+			fPosition.offset += fReplaceLength;
 	}
 
 	/**
@@ -164,20 +154,17 @@ public class DefaultPositionUpdater implements IPositionUpdater {
 
 	/**
 	 * Adapts the currently investigated position to the replace operation.
-	 * First it checks whether the change replaces the whole range of the position.
+	 * First it checks whether the change replaces only a non-zero range inside the range of the position (including the borders).
 	 * If not, it performs first the deletion of the previous text and afterwards
 	 * the insertion of the new text.
 	 */
 	protected void adaptToReplace() {
 
-		if (fPosition.offset == fOffset && fPosition.length == fLength && fPosition.length > 0) {
+		if (fLength > 0
+				&& fPosition.offset <= fOffset
+				&& fOffset + fLength <= fPosition.offset + fPosition.length) {
 
-			// replace the whole range of the position
-			fPosition.length += (fReplaceLength - fLength);
-			if (fPosition.length < 0) {
-				fPosition.offset += fPosition.length;
-				fPosition.length= 0;
-			}
+			fPosition.length += fReplaceLength - fLength;
 
 		} else {
 
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/Document.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/Document.java
index 64d61b3..6be4fb9 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/Document.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/Document.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,11 @@ package org.eclipse.jface.text;
  * Default document implementation. Uses a {@link org.eclipse.jface.text.GapTextStore} wrapped
  * inside a {@link org.eclipse.jface.text.CopyOnWriteTextStore} as text store.
  * <p>
- * The used line tracker considers the following strings as line delimiters: "\n", "\r", "\r\n".
+ * The used line tracker considers the following strings as line delimiters: "\n", "\r", "\r\n". In
+ * case of a text replacement across line delimiter boundaries and with different line delimiters,
+ * the line tracker might have to be repaired. Use
+ * {@link #isLineInformationRepairNeeded(int, int, String)} before doing the text replace if you
+ * have the need to discover such a situation.
  * </p>
  * <p>
  * The document is ready to use. It has a default position category for which a default position
@@ -32,7 +36,7 @@ package org.eclipse.jface.text;
  * See {@link GapTextStore} and <code>TreeLineTracker</code> for algorithmic behavior of the used
  * document structures.
  * </p>
- *
+ * 
  * @see org.eclipse.jface.text.GapTextStore
  * @see org.eclipse.jface.text.CopyOnWriteTextStore
  */
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IDocumentExtension2.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IDocumentExtension2.java
index e8d03f3..2441095 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IDocumentExtension2.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IDocumentExtension2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@ public interface IDocumentExtension2 {
 	/**
 	 * Can be called prior to a <code>replace</code> operation. After the
 	 * <code>replace</code> <code>resumeListenerNotification</code> must be
-	 * called. The affect of these calls is that no document listener is notified
+	 * called. The effect of these calls is that no document listener is notified
 	 * until <code>resumeListenerNotification</code> is called. This allows clients
 	 * to update structure before any listener is informed about the change.<p>
 	 * Listener notification can only be stopped for a single <code>replace</code> operation.
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IRepairableDocumentExtension.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IRepairableDocumentExtension.java
index d4eb5cf..7a2839e 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IRepairableDocumentExtension.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/IRepairableDocumentExtension.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,22 +14,22 @@ package org.eclipse.jface.text;
 /**
  * Extension interface for {@link org.eclipse.jface.text.IRepairableDocument}.
  * <p>
- * Adds the ability to query whether the repairable document needs to be
- * repaired.
- *
+ * Adds the ability to query whether the repairable document would have to be repaired after
+ * replacing some text.
+ * 
  * @see org.eclipse.jface.text.IRepairableDocument
  * @since 3.4
  */
 public interface IRepairableDocumentExtension {
 
 	/**
-	 * Tells whether the line information of the document implementing this
-	 * interface needs to be repaired.
-	 *
+	 * Tells whether the line information of the document implementing this interface needs to be
+	 * repaired after replacing the given text.
+	 * 
 	 * @param offset the document offset
 	 * @param length the length of the specified range
 	 * @param text the substitution text to check
-	 * @return <code>true</code> if the line information must be repaired
+	 * @return <code>true</code> if the line information must be repaired after replacing
 	 * @throws BadLocationException if the offset is invalid in this document
 	 * @see IRepairableDocument#repairLineInformation()
 	 */
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/ISlaveDocumentManager.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/ISlaveDocumentManager.java
index e743581..ca319a4 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/ISlaveDocumentManager.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/ISlaveDocumentManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -89,13 +89,14 @@ public interface ISlaveDocumentManager {
 	boolean isSlaveDocument(IDocument document);
 
 	/**
-	 * Sets the given slave document's auto expand mode. In auto expand mode, a
-	 * slave document is automatically adapted to reflect all changes applied to it's master document.
-	 * Assume a master document contains 30 lines and the slave is defined to contain the lines 11-20.
-	 * In auto expand mode, when the master document is changed at line 8, the slave document is expanded
-	 * to contain the lines 8-20.<p>
+	 * Sets the given slave document's auto expand mode. In auto expand mode, a slave document is
+	 * automatically adapted to reflect all changes applied to its master document. Assume a master
+	 * document contains 30 lines and the slave is defined to contain the lines 11-20. In auto
+	 * expand mode, when the master document is changed at line 8, the slave document is expanded to
+	 * contain the lines 8-20.
+	 * <p>
 	 * This call is without effect if the given document is unknown to this slave document manager.
-	 *
+	 * 
 	 * @param slave the slave whose auto expand mode should be set
 	 * @param autoExpand <code>true</code> for auto expand, <code>false</code> otherwise
 	 */
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TextUtilities.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TextUtilities.java
index ef474e5..960c782 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TextUtilities.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TextUtilities.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -302,7 +302,8 @@ public class TextUtilities {
 	 * the given document is no longer connected to any document partitioner.
 	 *
 	 * @param document the document
-	 * @return the map containing the removed partitioners
+	 * @return the map containing the removed partitioners (key type: {@link String}, value type:
+	 *         {@link IDocumentPartitioner})
 	 */
 	public static Map removeDocumentPartitioners(IDocument document) {
 		Map partitioners= new HashMap();
@@ -333,7 +334,8 @@ public class TextUtilities {
 	 * their partitioning name. This method cleans the given map.
 	 *
 	 * @param document the document
-	 * @param partitioners the map containing the partitioners to be connected
+	 * @param partitioners the map containing the partitioners to be connected (key type: {@link String}, value type:
+	 *         {@link IDocumentPartitioner})
 	 * @since 3.0
 	 */
 	public static void addDocumentPartitioners(IDocument document, Map partitioners) {
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TreeLineTracker.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TreeLineTracker.java
old mode 100644
new mode 100755
index 03edfbe..e25c1e0
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TreeLineTracker.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/TreeLineTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -226,8 +226,6 @@ abstract class TreeLineTracker implements ILineTracker {
 		 */
 		int remaining= offset;
 		Node node= fRoot;
-		int line= 0;
-
 		while (true) {
 			if (node == null)
 				fail(offset);
@@ -236,13 +234,11 @@ abstract class TreeLineTracker implements ILineTracker {
 				node= node.left;
 			} else {
 				remaining -= node.offset;
-				line+= node.line;
 				if (remaining < node.length
 						|| remaining == node.length && node.right == null) { // last line
 					break;
 				}
 				remaining -= node.length;
-				line ++;
 				node= node.right;
 			}
 		}
@@ -298,7 +294,6 @@ abstract class TreeLineTracker implements ILineTracker {
 		 * Works for any binary search tree.
 		 */
 		int remaining= line;
-		int offset= 0;
 		Node node= fRoot;
 
 		while (true) {
@@ -311,7 +306,6 @@ abstract class TreeLineTracker implements ILineTracker {
 				node= node.left;
 			} else {
 				remaining -= node.line + 1;
-				offset += node.offset + node.length;
 				node= node.right;
 			}
 		}
@@ -1264,7 +1258,6 @@ abstract class TreeLineTracker implements ILineTracker {
 		List roots= new LinkedList();
 		roots.add(fRoot);
 		StringBuffer buf= new StringBuffer((width + 1) * depth);
-		int nodes= 1;
 		int indents= leaves;
 		char[] space= new char[leaves * WIDTH / 2];
 		Arrays.fill(space, ' ');
@@ -1301,7 +1294,6 @@ abstract class TreeLineTracker implements ILineTracker {
 			}
 
 			buf.append('\n');
-			nodes *= 2;
 		}
 
 		return buf.toString();
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateContextType.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateContextType.java
index 5de3cee..756df86 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateContextType.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateContextType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,7 @@ public class TemplateContextType {
 	private /* final */ String fId= null;
 
 	/** Variable resolvers used by this content type. */
-	private final Map fResolvers= new HashMap();
+	private final Map/*<String, TemplateVariableResolver>*/ fResolvers= new HashMap();
 
 	/** The name of the context type. */
 	private String fName= null;
@@ -172,7 +172,7 @@ public class TemplateContextType {
 	/**
 	 * Returns an iterator for the variables known to the context type.
 	 *
-	 * @return an iterator over the variables in this context type
+	 * @return an iterator over the variables in this context type (element type: {@link TemplateVariableResolver})
 	 */
 	public Iterator resolvers() {
 	 	return Collections.unmodifiableMap(fResolvers).values().iterator();
diff --git a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java
index f1c6fe0..a67e514 100644
--- a/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java
+++ b/eclipse/plugins/org.eclipse.text/src/org/eclipse/jface/text/templates/TemplateTranslator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,7 +33,8 @@ import java.util.regex.Pattern;
  * arguments := (argument ',')* argument.
  * argument := qualifiedname | argumenttext.
  * qualifiedname := (identifier '.')* identifier.
- * argumenttext := "'" (character - "'" | "'" "'")* "'".</pre>
+ * argumenttext := "'" (character - "'" | "'" "'")* "'".
+ * identifier := javaidentifierpart - "$".</pre>
  * <p>
  * Clients may only replace the <code>createVariable</code> method of this class.
  * </p>
@@ -42,10 +43,17 @@ import java.util.regex.Pattern;
  */
 public class TemplateTranslator {
 	/**
+	 * Regex pattern for identifier.
+	 * Note: For historic reasons, this pattern <em>allows</em> numbers at the beginning of an identifier. 
+	 * @since 3.7
+	 */
+	private static final String IDENTIFIER= "(?:[\\p{javaJavaIdentifierPart}&&[^\\$]]++)"; //$NON-NLS-1$
+
+	/**
 	 * Regex pattern for qualifiedname
 	 * @since 3.4
 	 */
-	private static final String QUALIFIED_NAME= "(?:\\w++\\.)*+\\w++"; //$NON-NLS-1$
+	private static final String QUALIFIED_NAME= "(?:" + IDENTIFIER + "\\.)*+" + IDENTIFIER; //$NON-NLS-1$ //$NON-NLS-2$
 
 	/**
 	 * Regex pattern for argumenttext
@@ -78,7 +86,7 @@ public class TemplateTranslator {
 	private static final Pattern ESCAPE_PATTERN= Pattern.compile(
 			"\\$\\$|\\$\\{" + // $$|${											//$NON-NLS-1$
 			SPACES +
-			"(\\w*+)" + // variable id group (1)								//$NON-NLS-1$
+			"(" + IDENTIFIER + "?+)" + // variable id group (1)					//$NON-NLS-1$ //$NON-NLS-2$
 			SPACES +
 			"(?:" +																//$NON-NLS-1$
 				":" +															//$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ui.browser/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.browser/META-INF/MANIFEST.MF
index 657e037..601177e 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.browser/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.ui.browser; singleton:=true
-Bundle-Version: 3.3.1.qualifier
+Bundle-Version: 3.3.100.qualifier
 Bundle-Activator: org.eclipse.ui.internal.browser.WebBrowserUIPlugin
 Bundle-Vendor: %Plugin.providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.browser/plugin.xml b/eclipse/plugins/org.eclipse.ui.browser/plugin.xml
index b1f6b57..895113a 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/plugin.xml
+++ b/eclipse/plugins/org.eclipse.ui.browser/plugin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
 <!--
-    Copyright (c) 2005, 2010 IBM Corporation and others.
+    Copyright (c) 2005, 2011 IBM Corporation and others.
     All rights reserved. This program and the accompanying materials
     are made available under the terms of the Eclipse Public License v1.0
     which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
     Contributors:
          IBM Corporation - initial API and implementation
           Martin Oberhuber (Wind River) - [292882] Default Browser on Solaris
+          Martin Oberhuber (Wind River) - [293175] Default external web browser not found when running 32-bit Eclipse on 64-bit Ubuntu 9.04
  -->
 
 <plugin>
@@ -161,6 +162,7 @@
          factoryclass="org.eclipse.ui.internal.browser.browsers.MozillaFactory">
          <location>Program Files\mozilla.org\Firefox\firefox.exe</location>
          <location>Program Files\Mozilla Firefox\firefox.exe</location>
+         <location>Program Files (x86)\Mozilla Firefox\firefox.exe</location>
       </browser>
       <browser
          id="org.eclipse.ui.browser.ie"
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserDescriptorWorkingCopy.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserDescriptorWorkingCopy.java
index a6f4234..cd3193d 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserDescriptorWorkingCopy.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserDescriptorWorkingCopy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,7 +63,6 @@ public class BrowserDescriptorWorkingCopy extends BrowserDescriptor implements I
 	public IBrowserDescriptor save() {
 		if (browser != null) {
 			browser.setInternal(this);
-			BrowserManager.getInstance().saveBrowsers();
 		} else {
 			browser = new BrowserDescriptor();
 			browser.setInternal(this);
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserLauncher.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserLauncher.java
index bf39238..a450dc3 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserLauncher.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserLauncher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,10 +30,10 @@ public class BrowserLauncher implements IEditorLauncher {
 		try {
 			if (WebBrowserPreference.getBrowserChoice()== WebBrowserPreference.INTERNAL)
 				support.createBrowser(IWorkbenchBrowserSupport.LOCATION_BAR | IWorkbenchBrowserSupport.NAVIGATION_BAR,
-						file.toPortableString(), null, null).openURL(file.toFile().toURL());
+						file.toPortableString(), null, null).openURL(file.toFile().toURI().toURL());
 			else
 				support.createBrowser(IWorkbenchBrowserSupport.LOCATION_BAR | IWorkbenchBrowserSupport.NAVIGATION_BAR,
-						DefaultBrowserSupport.SHARED_ID, null, null).openURL(file.toFile().toURL());
+						DefaultBrowserSupport.SHARED_ID, null, null).openURL(file.toFile().toURI().toURL());
 		}
 		catch (MalformedURLException e) {
 			// ignore
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserManager.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserManager.java
index 1e54882..bceae80 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserManager.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/BrowserManager.java
@@ -87,7 +87,7 @@ public class BrowserManager extends Observable {
 		return new ArrayList(browsers);
 	}
 
-	protected void loadBrowsers() {
+	public void loadBrowsers() {
 		Trace.trace(Trace.FINEST, "Loading web browsers"); //$NON-NLS-1$
 		
 		String xmlString = Platform.getPreferencesService().getString
@@ -193,8 +193,6 @@ public class BrowserManager extends Observable {
 			browsers.add(browser);
 		if (browsers.size() == 1)
 			setCurrentWebBrowser(browser);
-		
-		saveBrowsers();
 	}
 
 	protected void removeWebBrowser(IBrowserDescriptor browser) {
@@ -229,4 +227,5 @@ public class BrowserManager extends Observable {
 			throw new IllegalArgumentException();
 		saveBrowsers();
 	}
+	
 }
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/DefaultBrowserSupport.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/DefaultBrowserSupport.java
index 5334e25..a1187c1 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/DefaultBrowserSupport.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/DefaultBrowserSupport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/ExternalBrowserInstance.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/ExternalBrowserInstance.java
index f035d28..bcf0c4e 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/ExternalBrowserInstance.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/ExternalBrowserInstance.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,20 +31,7 @@ public class ExternalBrowserInstance extends AbstractWebBrowser {
 	}
 
 	public void openURL(URL url) throws PartInitException {
-		String urlText = null;
-
-		if (url != null)
-			urlText = url.toExternalForm();
-
-		// change spaces to "%20"
-		if (urlText != null) { 
-			int index = urlText.indexOf(" "); //$NON-NLS-1$
-			while (index >= 0) {
-				urlText = urlText.substring(0, index)
-						+ "%20" + urlText.substring(index + 1); //$NON-NLS-1$
-				index = urlText.indexOf(" "); //$NON-NLS-1$
-			}
-		}
+		String urlText = url.toExternalForm();
 
 		String location = browser.getLocation();
 		String parameters = browser.getParameters();
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/InternalBrowserViewInstance.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/InternalBrowserViewInstance.java
index 2bd9f8e..4af1afd 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/InternalBrowserViewInstance.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/InternalBrowserViewInstance.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,14 @@ public class InternalBrowserViewInstance extends InternalBrowserInstance {
 		if (view == null) {
             try {
 				view = (WebBrowserView)page.showView(WebBrowserView.WEB_BROWSER_VIEW_ID, getId(), IWorkbenchPage.VIEW_CREATE);
-                hookPart(page, view);
+				if (tooltip != null && tooltip.length() > 0) {
+				    view.setBrowserViewTooltip(tooltip);
+				}
+				if (name != null && name.length() > 0) {
+				    view.setBrowserViewName(name);
+				}
+				hookPart(page, view);
+                
 			} catch (Exception e) {
 				Trace.trace(Trace.SEVERE, "Error opening Web browser", e); //$NON-NLS-1$
 			}
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/SystemBrowserInstance.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/SystemBrowserInstance.java
index 4cacdd6..8f401f3 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/SystemBrowserInstance.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/SystemBrowserInstance.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,20 +26,7 @@ public class SystemBrowserInstance extends AbstractWebBrowser {
 	}
 
 	public void openURL(URL url) throws PartInitException {
-		String urlText = null;
-
-		if (url != null)
-			urlText = url.toExternalForm();
-
-		// change spaces to "%20"
-		if (urlText != null && !WebBrowserUtil.isWindows()) {
-			int index = urlText.indexOf(" "); //$NON-NLS-1$
-			while (index >= 0) {
-				urlText = urlText.substring(0, index) + "%20" //$NON-NLS-1$
-						+ urlText.substring(index + 1);
-				index = urlText.indexOf(" "); //$NON-NLS-1$
-			}
-		}
+		String urlText = url.toExternalForm();
 		Trace.trace(Trace.FINEST, "Launching system Web browser: " + urlText); //$NON-NLS-1$
 		Program program = Program.findProgram("html"); //$NON-NLS-1$
 		if (program != null) {
@@ -47,6 +34,6 @@ public class SystemBrowserInstance extends AbstractWebBrowser {
 				return;
 		}
 		if (!Program.launch(urlText))
-			throw new PartInitException(NLS.bind(Messages.errorCouldNotLaunchWebBrowser, url.toExternalForm()));
+			throw new PartInitException(NLS.bind(Messages.errorCouldNotLaunchWebBrowser, urlText));
 	}
 }
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserPreferencePage.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserPreferencePage.java
index 75f9727..4d9d601 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserPreferencePage.java
@@ -613,9 +613,17 @@ public class WebBrowserPreferencePage extends PreferencePage implements
 		else
 			choice = WebBrowserPreference.EXTERNAL;
 		WebBrowserPreference.setBrowserChoice(choice);
-		if (checkedBrowser != null)
+		if (checkedBrowser != null) {
 			BrowserManager.getInstance().setCurrentWebBrowser(checkedBrowser);
+		} else {
+			BrowserManager.getInstance().saveBrowsers();
+		}
 
 		return true;
 	}
+	
+	public boolean performCancel() {
+		BrowserManager.getInstance().loadBrowsers();
+		return super.performCancel();
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserView.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserView.java
index 39617fc..9d98198 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserView.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/WebBrowserView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -180,4 +180,12 @@ public class WebBrowserView extends ViewPart implements
 	public void selectReveal(ISelection selection) {
 		onSelectionChange(selection);
 	}
+
+	public void setBrowserViewName(String name) {
+		setPartName(name);
+	}
+	
+	public void setBrowserViewTooltip(String tip) {
+		setTitleToolTip(tip);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/browsers/MozillaBrowser.java b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/browsers/MozillaBrowser.java
index b6738cd..426a2b1 100644
--- a/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/browsers/MozillaBrowser.java
+++ b/eclipse/plugins/org.eclipse.ui.browser/src/org/eclipse/ui/internal/browser/browsers/MozillaBrowser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.browser.browsers;
 
-import java.io.*;
+import java.io.IOException;
 import java.net.URL;
 
 import org.eclipse.core.runtime.Platform;
@@ -64,15 +64,6 @@ public class MozillaBrowser extends AbstractWebBrowser {
 		String url = null;
 		if (url2 != null) {
 			url = url2.toExternalForm();
-			// change spaces to "%20"
-			if (url != null & WebBrowserUtil.isWindows()) {
-				int index = url.indexOf(" "); //$NON-NLS-1$
-				while (index >= 0) {
-					url = url.substring(0, index) + "%20" //$NON-NLS-1$
-							+ url.substring(index + 1);
-					index = url.indexOf(" "); //$NON-NLS-1$
-				}
-			}
 		}
 		else {
 			url = ""; //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ui.carbon/src/org/eclipse/ui/internal/carbon/CarbonUIEnhancer.java b/eclipse/plugins/org.eclipse.ui.carbon/src/org/eclipse/ui/internal/carbon/CarbonUIEnhancer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.carbon/src/org/eclipse/ui/internal/carbon/Messages.properties b/eclipse/plugins/org.eclipse.ui.carbon/src/org/eclipse/ui/internal/carbon/Messages.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.cheatsheets/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.cheatsheets/META-INF/MANIFEST.MF
index 17fdb16..9c388b2 100644
--- a/eclipse/plugins/org.eclipse.ui.cheatsheets/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.cheatsheets/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.ui.cheatsheets; singleton:=true
-Bundle-Version: 3.4.0.qualifier
+Bundle-Version: 3.4.100.qualifier
 Bundle-Activator: org.eclipse.ui.internal.cheatsheets.CheatSheetPlugin
 Bundle-Vendor: %PROVIDER_NAME
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/CommandRunner.java b/eclipse/plugins/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/CommandRunner.java
index fa0594b..e662fab 100644
--- a/eclipse/plugins/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/CommandRunner.java
+++ b/eclipse/plugins/org.eclipse.ui.cheatsheets/src/org/eclipse/ui/internal/cheatsheets/CommandRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@ import org.eclipse.core.commands.ParameterType;
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.core.commands.common.CommandException;
 import org.eclipse.core.commands.common.NotDefinedException;
-import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.osgi.util.NLS;
@@ -79,8 +78,8 @@ public class CommandRunner {
 		try {
 			String substitutedSerialization = csm.performVariableSubstitution(rawSerialization);
 			selectedCommand = commandService.deserialize(substitutedSerialization);
-			IEvaluationContext state = handlerService.getCurrentState();
-			result = selectedCommand.executeWithChecks(null, state);
+			result = handlerService.executeCommand(selectedCommand, null);
+
 			
 			String returnsAttribute = command.getReturns();
 			if ((returnsAttribute != null) && (result != null)) {
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.ui.cocoa/.settings/org.eclipse.jdt.core.prefs
index baba5a5..f2f5c3b 100644
--- a/eclipse/plugins/org.eclipse.ui.cocoa/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,275 @@
-#Wed Apr 01 16:17:02 EDT 2009
+#Thu Oct 07 14:08:53 IST 2010
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.ui.cocoa/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..cf3f31f
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,57 @@
+#Thu Oct 07 14:09:13 IST 2010
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Platform UI
+formatter_settings_version=11
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.cocoa/META-INF/MANIFEST.MF
index 1b13459..8485605 100644
--- a/eclipse/plugins/org.eclipse.ui.cocoa/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.ui.cocoa;singleton:=true
-Bundle-Version: 1.0.2.qualifier
+Bundle-Version: 1.1.0.qualifier
 Bundle-Vendor: %providerName
 Fragment-Host: org.eclipse.ui;bundle-version="[3.5.0,4.0.0)"
 Bundle-Localization: fragment-cocoa
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/fragment-cocoa.properties b/eclipse/plugins/org.eclipse.ui.cocoa/fragment-cocoa.properties
index 3349f7c..7bb5021 100644
--- a/eclipse/plugins/org.eclipse.ui.cocoa/fragment-cocoa.properties
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/fragment-cocoa.properties
@@ -14,4 +14,13 @@ providerName=Eclipse.org
 fragmentName=Eclipse UI MacOS X Enhancements
 
 command.closeDialog.name=Close Dialog
-command.closeDialog.desc=Closes the active Dialog
\ No newline at end of file
+command.closeDialog.desc=Closes the active Dialog
+
+command.minimize.name=Minimize
+command.minimize.desc=Minimizes the current window to the Dock
+
+command.zoom.name=Zoom
+command.zoom.desc=Toggles the window between standard state and user state 
+
+command.arrangeWindows.name=Bring All to Front
+command.arrangeWindows.desc=Arranges the application windows in front of all windows 
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml b/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml
index dfa8a73..de5ac8e 100644
--- a/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/fragment.xml
@@ -12,17 +12,32 @@
          point="org.eclipse.ui.commands">
       <command
             categoryId="org.eclipse.ui.category.window"
+            defaultHandler="org.eclipse.ui.internal.cocoa.CloseDialogHandler"
             description="%command.closeDialog.desc"
             id="org.eclipse.ui.cocoa.closeDialog"
             name="%command.closeDialog.name">
       </command>
-   </extension>
-   <extension
-         point="org.eclipse.ui.handlers">
-      <handler
-            class="org.eclipse.ui.internal.cocoa.CloseDialogHandler"
-            commandId="org.eclipse.ui.cocoa.closeDialog">
-      </handler>
+      <command
+            categoryId="org.eclipse.ui.category.window"
+            defaultHandler="org.eclipse.ui.internal.cocoa.MinimizeWindowHandler"
+            description="%command.minimize.desc"
+            id="org.eclipse.ui.cocoa.minimizeWindow"
+            name="%command.minimize.name">
+      </command>
+      <command
+            categoryId="org.eclipse.ui.category.window"
+            defaultHandler="org.eclipse.ui.internal.cocoa.ZoomWindowHandler"
+            description="%command.zoom.desc"
+            id="org.eclipse.ui.cocoa.zoomWindow"
+            name="%command.zoom.name">
+      </command>
+      <command
+            categoryId="org.eclipse.ui.category.window"
+            defaultHandler="org.eclipse.ui.internal.cocoa.ArrangeWindowsHandler"
+            description="%command.arrangeWindows.desc"
+            id="org.eclipse.ui.cocoa.arrangeWindowsInFront"
+            name="%command.arrangeWindows.name">
+      </command>
    </extension>
    <extension
          point="org.eclipse.ui.bindings">
@@ -33,6 +48,22 @@
             schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
             sequence="M1+W">
       </key>
+      <key
+            commandId="org.eclipse.ui.cocoa.minimizeWindow"
+            contextId="org.eclipse.ui.contexts.window"
+            platform="cocoa"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M1+M">
+      </key>
+   </extension>
+   <extension
+         point="org.eclipse.ui.internalTweaklets">
+      <tweaklet
+            definition="org.eclipse.ui.internal.tweaklets.TitlePathUpdater"
+            id="org.eclipse.ui.cocoa.titlePathUpdaterTweaklet"
+            implementation="org.eclipse.ui.internal.cocoa.CocoaTitlePathUpdater"
+            name="Cocoa Title Path Updater">
+      </tweaklet>
    </extension>
    
 </fragment>
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/AbstractWindowHandler.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/AbstractWindowHandler.java
new file mode 100644
index 0000000..eed3d10
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/AbstractWindowHandler.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.cocoa;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.swt.internal.cocoa.NSWindow;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * 
+ * @since 3.7 
+ *
+ */
+
+public abstract class AbstractWindowHandler extends AbstractHandler {
+
+	public boolean isEnabled() {
+		boolean enabled = false;
+		Shell activeShell = Display.getDefault().getActiveShell();
+		if(activeShell !=null) {
+			NSWindow window = activeShell.view.window();
+			if(window!=null)
+				enabled = !window.isMiniaturized();
+		}
+		return enabled;
+	}
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/ArrangeWindowsHandler.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/ArrangeWindowsHandler.java
new file mode 100644
index 0000000..cc4ee55
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/ArrangeWindowsHandler.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.cocoa;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.swt.internal.cocoa.NSApplication;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * 
+ * @since 3.7
+ * 
+ */
+
+public class ArrangeWindowsHandler extends AbstractHandler {
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		NSApplication app = NSApplication.sharedApplication();
+		app.arrangeInFront(app);
+		return null;
+	}
+
+	public boolean isEnabled() {
+		boolean isEnabled = false;
+		Shell[] shells = Display.getDefault().getShells();
+
+		// not all windows should be in minimized state
+		for (int i = 0; i < shells.length; i++) {
+			if (shells[i].view.window().isKeyWindow()) {
+				isEnabled = true;
+				break;
+			}
+		}
+		return isEnabled;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CloseDialogHandler.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CloseDialogHandler.java
index c206a6a..d32f152 100644
--- a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CloseDialogHandler.java
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CloseDialogHandler.java
@@ -19,19 +19,18 @@ import org.eclipse.swt.widgets.Shell;
 
 /**
  * 
- * @since 3.6 
- *
+ * @since 3.6
+ * 
  */
 public class CloseDialogHandler extends AbstractHandler implements IHandler {
 
 	public Object execute(ExecutionEvent event) {
-		
+
 		Shell activeShell = Display.getDefault().getActiveShell();
 		// perform only if shell is available & close is enabled
 		if (activeShell != null && (activeShell.getStyle() & SWT.CLOSE) != 0) {
 			activeShell.close();
 		}
-		
 		return null;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaTitlePathUpdater.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaTitlePathUpdater.java
new file mode 100644
index 0000000..115cf23
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaTitlePathUpdater.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.cocoa;
+
+import org.eclipse.swt.internal.cocoa.NSString;
+import org.eclipse.swt.internal.cocoa.NSWindow;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.tweaklets.TitlePathUpdater;
+
+/**
+ * 
+ * @since 3.7
+ * 
+ */
+public class CocoaTitlePathUpdater extends TitlePathUpdater {
+
+	public void updateTitlePath(Shell window, String path) {
+
+		if (path == null)
+			path = "";
+		NSWindow nsWindow = window.getShell().view.window();
+		NSString filePathString = NSString.stringWith(path);
+		nsWindow.setRepresentedFilename(filePathString);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUIEnhancer.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUIEnhancer.java
index b46e67a..f7b819e 100644
--- a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUIEnhancer.java
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUIEnhancer.java
@@ -11,7 +11,6 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.cocoa;
 
-import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -23,12 +22,9 @@ import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.NotEnabledException;
 import org.eclipse.core.commands.NotHandledException;
 import org.eclipse.core.commands.common.NotDefinedException;
-import org.eclipse.core.runtime.IProduct;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.internal.C;
 import org.eclipse.swt.internal.Callback;
@@ -49,6 +45,7 @@ import org.eclipse.ui.IWindowListener;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.internal.WorkbenchWindow;
 import org.eclipse.ui.internal.misc.StatusUtil;
@@ -56,119 +53,126 @@ import org.eclipse.ui.statushandlers.StatusManager;
 
 /**
  * The CocoaUIEnhancer provides the standard "About" and "Preference" menu items
- * and links them to the corresponding workbench commands. 
- * This must be done in a MacOS X fragment because SWT doesn't provide an abstraction
- * for the (MacOS X only) application menu and we have to use MacOS specific natives.
- * The fragment is for the org.eclipse.ui plug-in because we need access to the
+ * and links them to the corresponding workbench commands. This must be done in
+ * a MacOS X fragment because SWT doesn't provide an abstraction for the (MacOS
+ * X only) application menu and we have to use MacOS specific natives. The
+ * fragment is for the org.eclipse.ui plug-in because we need access to the
  * Workbench "About" and "Preference" actions.
  * 
  * @noreference this class is not intended to be referenced by any client.
  * @since 1.0
  */
-public class CocoaUIEnhancer implements IStartup {
+public class CocoaUIEnhancer extends CocoaUtil implements IStartup {
 
 	private static final int kAboutMenuItem = 0;
 	private static final int kPreferencesMenuItem = 2;
-	private static final int kServicesMenuItem = 4;
 	private static final int kHideApplicationMenuItem = 6;
 	private static final int kQuitMenuItem = 10;
-	
+
 	static long sel_toolbarButtonClicked_;
 	static long sel_preferencesMenuItemSelected_;
 	static long sel_aboutMenuItemSelected_;
 
 	private static final long NSWindowToolbarButton = 3;
-	
+
 	/* This callback is not freed */
 	static Callback proc3Args;
-	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+	static final byte[] SWT_OBJECT = { 'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0' };
 
-	private void init() throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchFieldException {
-		// TODO: These should either move out of Display or be accessible to this class.
-		byte[] types = {'*','\0'};
-		int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+	private void init() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+			IllegalAccessException, InvocationTargetException, NoSuchFieldException {
+		// TODO: These should either move out of Display or be accessible to
+		// this class.
+		byte[] types = { '*', '\0' };
+		int size = C.PTR_SIZEOF;
+		int align = C.PTR_SIZEOF == 4 ? 2 : 3;
 
 		Class clazz = CocoaUIEnhancer.class;
 
 		proc3Args = new Callback(clazz, "actionProc", 3); //$NON-NLS-1$
-		//call getAddress
+		// call getAddress
 		Method getAddress = Callback.class.getMethod("getAddress", new Class[0]);
 		Object object = getAddress.invoke(proc3Args, null);
 		long proc3 = convertToLong(object);
-		if (proc3 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		if (proc3 == 0)
+			SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
 
-		//call objc_allocateClassPair
+		// call objc_allocateClassPair
 		Field field = OS.class.getField("class_NSObject");
 		Object fieldObj = field.get(OS.class);
-		object = invokeMethod(OS.class, "objc_allocateClassPair", new Object[] { fieldObj, "SWTCocoaEnhancerDelegate", wrapPointer(0) });
+
+		Object[] args = makeArgs(fieldObj, "SWTCocoaEnhancerDelegate", wrapPointer(0));
+		object = invokeMethod(OS.class, "objc_allocateClassPair", args);
+
 		long cls = convertToLong(object);
-		
-		invokeMethod(OS.class, "class_addIvar", new Object[] {
-				wrapPointer(cls), SWT_OBJECT, wrapPointer(size),
-				new Byte((byte) align), types });
+
+		args = makeArgs(wrapPointer(cls), SWT_OBJECT, wrapPointer(size), new Byte((byte) align),
+				types);
+		invokeMethod(OS.class, "class_addIvar", args);
 
 		// Add the action callback
-		invokeMethod(
-				OS.class,
-				"class_addMethod", new Object[] { wrapPointer(cls), wrapPointer(sel_toolbarButtonClicked_), wrapPointer(proc3), "@:@" }); //$NON-NLS-1$
-		invokeMethod(OS.class, "class_addMethod", new Object[] {
-				wrapPointer(cls),
-				wrapPointer(sel_preferencesMenuItemSelected_),
-				wrapPointer(proc3), "@:@" }); //$NON-NLS-1$
-		invokeMethod(
-				OS.class,
-				"class_addMethod", new Object[] { wrapPointer(cls), wrapPointer(sel_aboutMenuItemSelected_), wrapPointer(proc3), "@:@" }); //$NON-NLS-1$
-
-		invokeMethod(OS.class, "objc_registerClassPair",
-				new Object[] { wrapPointer(cls) });			
-	}	
+		args = makeArgs(wrapPointer(cls), wrapPointer(sel_toolbarButtonClicked_),
+				wrapPointer(proc3), "@:@");
+		invokeMethod(OS.class, "class_addMethod", args); //$NON-NLS-1$
+
+		args = makeArgs(wrapPointer(cls), wrapPointer(sel_preferencesMenuItemSelected_),
+				wrapPointer(proc3), "@:@");
+
+		invokeMethod(OS.class, "class_addMethod", args); //$NON-NLS-1$
+
+		args = makeArgs(wrapPointer(cls), wrapPointer(sel_aboutMenuItemSelected_),
+				wrapPointer(proc3), "@:@");
+
+		invokeMethod(OS.class, "class_addMethod", args); //$NON-NLS-1$
+
+		invokeMethod(OS.class, "objc_registerClassPair", makeArgs(cls));
+	}
 
 	SWTCocoaEnhancerDelegate delegate;
 	private long delegateJniRef;
 
 	/**
-	 * Class that is able to intercept and handle OS events from the toolbar and menu.
+	 * Class that is able to intercept and handle OS events from the toolbar and
+	 * menu.
 	 * 
 	 * @since 3.1
 	 */
 
-    private static final String RESOURCE_BUNDLE = CocoaUIEnhancer.class.getPackage().getName() + ".Messages"; //$NON-NLS-1$
-	
-    private String fAboutActionName;
-    private String fQuitActionName;
-    private String fHideActionName;
-
-    /**
-     * Default constructor
-     */
-    public CocoaUIEnhancer() {
-        IProduct product = Platform.getProduct();
-        String productName = null;
-        if (product != null)
-            productName = product.getName();
-        
+	private static final String RESOURCE_BUNDLE = CocoaUIEnhancer.class.getPackage().getName()
+			+ ".Messages"; //$NON-NLS-1$
+
+	private String fAboutActionName;
+	private String fQuitActionName;
+	private String fHideActionName;
+
+	/**
+	 * Default constructor
+	 */
+	public CocoaUIEnhancer() {
+
+		String productName = getProductName();
+
 		ResourceBundle resourceBundle = ResourceBundle.getBundle(RESOURCE_BUNDLE);
 		try {
 			if (productName != null) {
 				String format = resourceBundle.getString("AboutAction.format"); //$NON-NLS-1$
 				if (format != null)
-					fAboutActionName= MessageFormat.format(format, new Object[] { productName } );
+					fAboutActionName = MessageFormat.format(format, new Object[] { productName });
 			}
 			if (fAboutActionName == null)
 				fAboutActionName = resourceBundle.getString("AboutAction.name"); //$NON-NLS-1$
 		} catch (MissingResourceException e) {
 		}
-		
+
 		if (fAboutActionName == null)
 			fAboutActionName = "About"; //$NON-NLS-1$
-		
-		if (productName != null) {	
+
+		if (productName != null) {
 			try {
 				// prime the format Hide <app name>
 				String format = resourceBundle.getString("HideAction.format"); //$NON-NLS-1$
 				if (format != null)
-					fHideActionName = MessageFormat.format(format,
-							new Object[] { productName });
+					fHideActionName = MessageFormat.format(format, new Object[] { productName });
 
 			} catch (MissingResourceException e) {
 			}
@@ -177,13 +181,12 @@ public class CocoaUIEnhancer implements IStartup {
 				// prime the format Quit <app name>
 				String format = resourceBundle.getString("QuitAction.format"); //$NON-NLS-1$
 				if (format != null)
-					fQuitActionName = MessageFormat.format(format,
-							new Object[] { productName });
+					fQuitActionName = MessageFormat.format(format, new Object[] { productName });
 
 			} catch (MissingResourceException e) {
 			}
 		}
-		
+
 		try {
 			if (sel_toolbarButtonClicked_ == 0) {
 				sel_toolbarButtonClicked_ = registerName("toolbarButtonClicked:"); //$NON-NLS-1$
@@ -192,85 +195,41 @@ public class CocoaUIEnhancer implements IStartup {
 				init();
 			}
 		} catch (Exception e) {
-			// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
+			// theoretically, one of
+			// SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
 			// not expected to happen at all.
 			log(e);
 		}
-    }
-
-    
-    private long registerName(String name) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
-    	Class clazz = OS.class;
-    	Object object = invokeMethod(clazz, "sel_registerName", new Object[] {name});
-    	return convertToLong(object);
-    }
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.IStartup#earlyStartup()
-     */
-    public void earlyStartup() {
-        final Display display = Display.getDefault();
-        display.syncExec(new Runnable() {
-            public void run() {
-            	try {
-            		delegate = new SWTCocoaEnhancerDelegate();
-            		delegate.alloc().init();
-            		//call OS.NewGlobalRef
-					Method method = OS.class.getMethod("NewGlobalRef", new Class[] { Object.class });
-					Object object = method.invoke(OS.class, new Object[] {CocoaUIEnhancer.this});
-					delegateJniRef = convertToLong(object);
-            	} catch (Exception e) {
-					// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
-					// not expected to happen at all.
-					log(e);
-				}
-        		if (delegateJniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
-				try {
-					Field idField = SWTCocoaEnhancerDelegate.class.getField("id");
-					Object idValue = idField.get(delegate);
-					invokeMethod(OS.class, "object_setInstanceVariable",
-							new Object[] { idValue,
-									SWT_OBJECT, wrapPointer(delegateJniRef) });
-
-					hookApplicationMenu();
-					hookWorkbenchListener();
-
-					// schedule disposal of callback object
-					display.disposeExec(new Runnable() {
-						public void run() {
-							if (delegateJniRef != 0) {
-								try {
-									invokeMethod(OS.class, "DeleteGlobalRef", new Object[] {wrapPointer(delegateJniRef)});
-								} catch (Exception e) {
-									// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
-									// not expected to happen at all.
-									log(e);
-								}
-							}
-							delegateJniRef = 0;
-
-							if (delegate != null)
-								delegate.release();
-							delegate = null;
-
-						}
-					});
-
-					// modify all shells opened on startup
-					IWorkbenchWindow[] windows = PlatformUI.getWorkbench()
-							.getWorkbenchWindows();
-					for (int i = 0; i < windows.length; i++) {
-						modifyWindowShell(windows[i]);
-					}
-				} catch (Exception e) {
-					// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
-					// not expected to happen at all.
-					log(e);
-				}
+	}
+
+	private String getProductName() {
+
+		if (Platform.getProduct() != null)
+			return Platform.getProduct().getName();
+		return null;
+	}
+
+	private long registerName(String name) throws IllegalArgumentException, SecurityException,
+			IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+		Class clazz = OS.class;
+		Object object = invokeMethod(clazz, "sel_registerName", new Object[] { name });
+		return convertToLong(object);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		Display display = Display.getDefault();
+		display.syncExec(new Runnable() {
+			public void run() {
+				startupInUI();
 			}
 
-        });
-    }
+		});
+	}
 
 	void log(Exception e) {
 		StatusUtil.handleStatus(e, StatusManager.LOG);
@@ -282,7 +241,7 @@ public class CocoaUIEnhancer implements IStartup {
 	 * 
 	 * @since 3.2
 	 */
-    protected void hookWorkbenchListener() {
+	protected void hookWorkbenchListener() {
 		PlatformUI.getWorkbench().addWindowListener(new IWindowListener() {
 
 			public void windowActivated(IWorkbenchWindow window) {
@@ -299,10 +258,11 @@ public class CocoaUIEnhancer implements IStartup {
 
 			public void windowOpened(IWorkbenchWindow window) {
 				modifyWindowShell(window);
-			}});
+			}
+		});
 	}
 
-    /**
+	/**
 	 * Modify the given workbench window shell bits to show the tool bar toggle
 	 * button.
 	 * 
@@ -310,327 +270,276 @@ public class CocoaUIEnhancer implements IStartup {
 	 *            the window to modify
 	 * @since 3.2
 	 */
-	protected void modifyWindowShell(IWorkbenchWindow window) {
+	protected void modifyWindowShell(final IWorkbenchWindow window) {
 		// only add the button when either the cool bar or perspective bar
-		// is initially visible. This is so that RCP applications can choose to use
+		// is initially visible. This is so that RCP applications can choose to
+		// use
 		// this fragment without fear that their explicitly invisible bars
 		// can't be shown.
-		boolean coolBarInitiallyVsible = ((WorkbenchWindow) window)
-				.getCoolBarVisible();
+		boolean coolBarInitiallyVsible = ((WorkbenchWindow) window).getCoolBarVisible();
 		boolean perspectiveBarInitiallyVsible = ((WorkbenchWindow) window)
 				.getPerspectiveBarVisible();
 
 		if (coolBarInitiallyVsible || perspectiveBarInitiallyVsible) {
-			// Add an empty, hidden tool bar to the window.  Without this the
-			// tool bar button at the top right of the window will not appear
-			// even when setShowsToolbarButton(true) is called.
-			NSToolbar dummyBar = new NSToolbar();
-			dummyBar.alloc();
-			dummyBar.initWithIdentifier(NSString.stringWith("SWTToolbar")); //$NON-NLS-1$
-			dummyBar.setVisible(false);
-			
-			Shell shell = window.getShell();
-			NSWindow nsWindow = shell.view.window();
-			nsWindow.setToolbar(dummyBar);
-			dummyBar.release();
-			nsWindow.setShowsToolbarButton(true);
-			
-			// Override the target and action of the toolbar button so we can control it.
-			try {
-				Object fieldValue = wrapPointer(NSWindowToolbarButton);
-				NSButton toolbarButton = (NSButton) invokeMethod(NSWindow.class, nsWindow, "standardWindowButton", new Object[] {fieldValue});
-				if (toolbarButton != null) {
-					toolbarButton.setTarget(delegate);
-					invokeMethod(NSControl.class, toolbarButton, "setAction",
-							new Object[] { wrapPointer(sel_toolbarButtonClicked_) });
+			createDummyToolbar(window);
+		} else {
+			// add the dummby toolbar when its shown for the first time
+			if (!(window instanceof WorkbenchWindow))
+				return;
+			final WorkbenchWindow workbenchWindow = (WorkbenchWindow) window;
+			workbenchWindow.addPropertyChangeListener(new IPropertyChangeListener() {
+
+				public void propertyChange(PropertyChangeEvent event) {
+					if (WorkbenchWindow.PROP_COOLBAR_VISIBLE.equals(event.getProperty())) {
+						createDummyToolbar(window);
+						workbenchWindow.removePropertyChangeListener(this);
+					}
 				}
-			} catch (Exception e) {
-				// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
-				// not expected to happen at all.
-				log(e);
-			}
+			});
 		}
 	}
-	
-    private void hookApplicationMenu() {
-    	try {
-    		// create About Eclipse menu command
-    		NSMenu mainMenu = NSApplication.sharedApplication().mainMenu();
-    		NSMenuItem mainMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, mainMenu, "itemAtIndex", new Object[] {wrapPointer(0)});
-    		NSMenu appMenu = mainMenuItem.submenu();
-
-    		// add the about action
-    		NSMenuItem aboutMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu, "itemAtIndex", new Object[] {wrapPointer(kAboutMenuItem)});
-    		aboutMenuItem.setTitle(NSString.stringWith(fAboutActionName));
-
-    		// rename the hide action if we have an override string
-    		if (fHideActionName != null) {
-    			NSMenuItem hideMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu, "itemAtIndex", new Object[] {wrapPointer(kHideApplicationMenuItem)});
-    			hideMenuItem.setTitle(NSString.stringWith(fHideActionName));
-    		}
-
-    		// rename the quit action if we have an override string
-    		if (fQuitActionName != null) {
-    			NSMenuItem quitMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu, "itemAtIndex", new Object[] {wrapPointer(kQuitMenuItem)});
-    			quitMenuItem.setTitle(NSString.stringWith(fQuitActionName));
-    		}
-
-    		// enable pref menu
-    		NSMenuItem prefMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu, "itemAtIndex", new Object[] {wrapPointer(kPreferencesMenuItem)});
-    		prefMenuItem.setEnabled(true);
-
-    		// disable services menu
-    		NSMenuItem servicesMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu, "itemAtIndex", new Object[] {wrapPointer(kServicesMenuItem)});
-    		servicesMenuItem.setEnabled(false);
-
-    		// Register as a target on the prefs and quit items.
-    		prefMenuItem.setTarget(delegate);
-    		invokeMethod(NSMenuItem.class, prefMenuItem, "setAction", new Object[] {wrapPointer(sel_preferencesMenuItemSelected_)});
-    		aboutMenuItem.setTarget(delegate);
-    		invokeMethod(NSMenuItem.class, aboutMenuItem, "setAction", new Object[] {wrapPointer(sel_aboutMenuItemSelected_)});
-    	} catch (Exception e) {
-			// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
+
+	/**
+	 * Add an empty, hidden tool bar to the window. Without this the tool bar
+	 * button at the top right of the window will not appear even when
+	 * setShowsToolbarButton(true) is called.
+	 * 
+	 * @param window
+	 */
+	private void createDummyToolbar(IWorkbenchWindow window) {
+		NSToolbar dummyBar = new NSToolbar();
+		dummyBar.alloc();
+		dummyBar.initWithIdentifier(NSString.stringWith("SWTToolbar")); //$NON-NLS-1$
+		dummyBar.setVisible(false);
+
+		Shell shell = window.getShell();
+		NSWindow nsWindow = shell.view.window();
+		nsWindow.setToolbar(dummyBar);
+		dummyBar.release();
+		nsWindow.setShowsToolbarButton(true);
+
+		// Override the target and action of the toolbar button so we can
+		// control it.
+		try {
+			Object fieldValue = wrapPointer(NSWindowToolbarButton);
+			NSButton toolbarButton = (NSButton) invokeMethod(NSWindow.class, nsWindow,
+					"standardWindowButton", new Object[] { fieldValue });
+			if (toolbarButton != null) {
+				toolbarButton.setTarget(delegate);
+				invokeMethod(NSControl.class, toolbarButton, "setAction",
+						new Object[] { wrapPointer(sel_toolbarButtonClicked_) });
+			}
+		} catch (Exception e) {
+			// theoretically, one of
+			// SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
 			// not expected to happen at all.
 			log(e);
 		}
-    }
+	}
 
-	/**
-     * Locate an action with the given id in the current menu bar and run it.
-     */
-    private void runAction(String actionId) {
-        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-        if (window != null) {
-        	IMenuManager manager = ((WorkbenchWindow)window).getActionBars().getMenuManager();
-        	IAction action = findAction(actionId, manager);
-        	if (action != null && action.isEnabled()) {
-        		try {
-        			NSMenu mainMenu = NSApplication.sharedApplication().mainMenu();
-        			NSMenuItem mainMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, mainMenu, "itemAtIndex", new Object[] {wrapPointer(0)});
-        			NSMenu appMenu = mainMenuItem.submenu();
-        			NSMenuItem aboutMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu, "itemAtIndex", new Object[] {wrapPointer(kAboutMenuItem)});
-        			NSMenuItem prefMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu, "itemAtIndex", new Object[] {wrapPointer(kPreferencesMenuItem)});
-        			try {
-        				prefMenuItem.setEnabled(false);
-        				aboutMenuItem.setEnabled(false);
-        				action.run();
-        			}
-        			finally {
-        				prefMenuItem.setEnabled(true);
-        				aboutMenuItem.setEnabled(true);
-        			}
-        		} catch (Exception e) {
-					// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
-					// not expected to happen at all.
-					log(e);
-				}
-        	}
-        }
-       
-    }
-    
-    private void runCommand(String commandId) {
-		IWorkbench workbench = PlatformUI.getWorkbench();
-		if (workbench == null)
-			return;
-		
-		IWorkbenchWindow activeWorkbenchWindow = workbench
-				.getActiveWorkbenchWindow();
-		if (activeWorkbenchWindow == null)
-			return;
-		
-		IHandlerService commandService = (IHandlerService) activeWorkbenchWindow
-				.getService(IHandlerService.class);
-
-		if (commandService != null) {
-			try {
-				commandService.executeCommand(commandId, null);
-			} catch (ExecutionException e) {
-			} catch (NotDefinedException e) {
-			} catch (NotEnabledException e) {
-			} catch (NotHandledException e) {
+	private void hookApplicationMenu() {
+		try {
+			// create About Eclipse menu command
+			NSMenu mainMenu = NSApplication.sharedApplication().mainMenu();
+			NSMenuItem mainMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, mainMenu,
+					"itemAtIndex", new Object[] { wrapPointer(0) });
+			NSMenu appMenu = mainMenuItem.submenu();
+
+			// add the about action
+			NSMenuItem aboutMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu,
+					"itemAtIndex", new Object[] { wrapPointer(kAboutMenuItem) });
+			aboutMenuItem.setTitle(NSString.stringWith(fAboutActionName));
+
+			// rename the hide action if we have an override string
+			if (fHideActionName != null) {
+				NSMenuItem hideMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu,
+						"itemAtIndex", new Object[] { wrapPointer(kHideApplicationMenuItem) });
+				hideMenuItem.setTitle(NSString.stringWith(fHideActionName));
+			}
+
+			// rename the quit action if we have an override string
+			if (fQuitActionName != null) {
+				NSMenuItem quitMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu,
+						"itemAtIndex", new Object[] { wrapPointer(kQuitMenuItem) });
+				quitMenuItem.setTitle(NSString.stringWith(fQuitActionName));
 			}
+
+			// enable pref menu
+			NSMenuItem prefMenuItem = (NSMenuItem) invokeMethod(NSMenu.class, appMenu,
+					"itemAtIndex", new Object[] { wrapPointer(kPreferencesMenuItem) });
+			prefMenuItem.setEnabled(true);
+
+			// Register as a target on the prefs and quit items.
+			prefMenuItem.setTarget(delegate);
+			invokeMethod(NSMenuItem.class, prefMenuItem, "setAction",
+					new Object[] { wrapPointer(sel_preferencesMenuItemSelected_) });
+			aboutMenuItem.setTarget(delegate);
+			invokeMethod(NSMenuItem.class, aboutMenuItem, "setAction",
+					new Object[] { wrapPointer(sel_aboutMenuItemSelected_) });
+		} catch (Exception e) {
+			// theoretically, one of
+			// SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
+			// not expected to happen at all.
+			log(e);
 		}
 	}
 
-    /**
-	 * Find the action with the given ID by recursively crawling the provided
-	 * menu manager. If the action cannot be found <code>null</code> is
-	 * returned.
-	 * 
-	 * @param actionId
-	 *            the id to search for
-	 * @param manager
-	 *            the manager to search
-	 * @return the action or <code>null</code>
-	 */
-	private IAction findAction(String actionId, IMenuManager manager) {
-		IContributionItem[] items = manager.getItems();
-		for (int i = 0; i < items.length; i++) {
-			IContributionItem item = items[i];
-			if (item instanceof ActionContributionItem) {
-				ActionContributionItem aci = (ActionContributionItem) item;
-				String id = aci.getId();
-				if (id != null && id.equals(actionId))
-					return aci.getAction();
-			} else if (item instanceof IMenuManager) {
-				IAction found = findAction(actionId, (IMenuManager) item);
-				if (found != null)
-					return found;
-			}
+	private void runCommand(String commandId) {
+
+		IWorkbench workbench = PlatformUI.getWorkbench();
+		IHandlerService service = (IHandlerService) workbench.getService(IHandlerService.class);
+
+		try {
+			service.executeCommand(commandId, null);
+		} catch (ExecutionException e) {
+			log(e);
+		} catch (NotDefinedException e) {
+			log(e);
+		} catch (NotEnabledException e) {
+			log(e);
+		} catch (NotHandledException e) {
+			log(e);
 		}
-		return null;
 	}
 
 	/*
-	 * Action implementations for the toolbar button and preferences and about menu items
+	 * Action implementations for the toolbar button and preferences and about
+	 * menu items
 	 */
-	void toolbarButtonClicked (NSControl source) {
+	void toolbarButtonClicked(NSControl source) {
 		try {
 			NSWindow window = source.window();
 			Field idField = NSWindow.class.getField("id");
 			Object idValue = idField.get(window);
-			
+
 			Display display = Display.getCurrent();
-			Widget widget = (Widget) invokeMethod(Display.class, display, "findWidget", new Object[] { idValue });
+			Widget widget = (Widget) invokeMethod(Display.class, display, "findWidget",
+					new Object[] { idValue });
 
 			if (!(widget instanceof Shell)) {
 				return;
 			}
 			Shell shell = (Shell) widget;
-			IWorkbenchWindow[] windows = PlatformUI.getWorkbench()
-			.getWorkbenchWindows();
+			IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
 			for (int i = 0; i < windows.length; i++) {
 				if (windows[i].getShell() == shell) {
 					runCommand("org.eclipse.ui.ToggleCoolbarAction"); //$NON-NLS-1$
 				}
 			}
 		} catch (Exception e) {
-			// theoretically, one of SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
+			// theoretically, one of
+			// SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
 			// not expected to happen at all.
 			log(e);
 		}
 	}
-	
-	void preferencesMenuItemSelected() {
-		runAction("preferences"); //$NON-NLS-1$
+
+	private void createDelegate() throws SecurityException, NoSuchMethodException,
+			IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+		delegate = new SWTCocoaEnhancerDelegate();
+		delegate.alloc().init();
+		// call OS.NewGlobalRef
+		Method method = OS.class.getMethod("NewGlobalRef", new Class[] { Object.class });
+		Object object = method.invoke(OS.class, new Object[] { CocoaUIEnhancer.this });
+		delegateJniRef = convertToLong(object);
+	}
+
+	private Runnable createDisposer() {
+		return new Runnable() {
+			public void run() {
+				if (delegateJniRef != 0) {
+					try {
+						invokeMethod(OS.class, "DeleteGlobalRef",
+								new Object[] { CocoaUtil.wrapPointer(delegateJniRef) });
+					} catch (Exception e) {
+						// theoretically, one of
+						// SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
+						// not expected to happen at all.
+						log(e);
+					}
+				}
+				delegateJniRef = 0;
+
+				if (delegate != null)
+					delegate.release();
+				delegate = null;
+
+			}
+		};
+	}
+
+	/**
+	 * 
+	 */
+	private void modifyShells() {
+		// modify all shells opened on startup
+		IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
+		for (int i = 0; i < windows.length; i++) {
+			modifyWindowShell(windows[i]);
+		}
+	}
+
+	private void startupInUI() {
+
+
+		try {
+			createDelegate();
+
+			if (delegateJniRef == 0)
+				SWT.error(SWT.ERROR_NO_HANDLES);
+
+			setDelegate();
+
+			hookApplicationMenu();
+			hookWorkbenchListener();
+
+			// schedule disposal of callback object
+			Runnable disposer = createDisposer();
+			Display.getDefault().disposeExec(disposer);
+
+			modifyShells();
+
+		} catch (Exception e) {
+			// theoretically, one of
+			// SecurityException,Illegal*Exception,InvocationTargetException,NoSuch*Exception
+			// not expected to happen at all.
+			log(e);
+		}
 	}
 
-	void aboutMenuItemSelected() {
-		runAction("about"); //$NON-NLS-1$
+	private void setDelegate() throws NoSuchFieldException, IllegalAccessException,
+			InvocationTargetException, NoSuchMethodException {
+		Field idField = SWTCocoaEnhancerDelegate.class.getField("id");
+		Object idValue = idField.get(delegate);
+
+		Object[] args = makeArgs(idValue, SWT_OBJECT, wrapPointer(delegateJniRef));
+		invokeMethod(OS.class, "object_setInstanceVariable", args);
 	}
 
 	static int actionProc(int id, int sel, int arg0) throws Exception {
-		return (int) actionProc((long)id, (long)sel, (long)arg0);
+		return (int) actionProc((long) id, (long) sel, (long) arg0);
 	}
 
 	static long actionProc(long id, long sel, long arg0) throws Exception {
-		long [] jniRef = OS_object_getInstanceVariable(id, SWT_OBJECT);
-		if (jniRef[0] == 0) return 0;
-		
-		CocoaUIEnhancer delegate = (CocoaUIEnhancer) invokeMethod(OS.class,
-				"JNIGetObject", new Object[] { wrapPointer(jniRef[0]) });
-		
+		long[] jniRef = OS_object_getInstanceVariable(id, SWT_OBJECT);
+		if (jniRef[0] == 0)
+			return 0;
+
+		CocoaUIEnhancer delegate = (CocoaUIEnhancer) invokeMethod(OS.class, "JNIGetObject",
+				new Object[] { wrapPointer(jniRef[0]) });
+
 		if (sel == sel_toolbarButtonClicked_) {
 			NSControl source = new_NSControl(arg0);
 			delegate.toolbarButtonClicked(source);
 		} else if (sel == sel_preferencesMenuItemSelected_) {
-			delegate.preferencesMenuItemSelected();
+			delegate.runCommand(ActionFactory.PREFERENCES.getCommandId());
 		} else if (sel == sel_aboutMenuItemSelected_) {
-			delegate.aboutMenuItemSelected();
-		}
-		
-		return 0;
-	}
-	
-	
-
-	// The following methods reflectively call corresponding methods in the OS
-	// class, using ints or longs as required based on platform.
-
-	private static NSControl new_NSControl(long arg0)
-			throws NoSuchMethodException, InstantiationException,
-			IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		Class clazz = NSControl.class;
-		Class PTR_CLASS =  C.PTR_SIZEOF == 8 ? long.class : int.class;
-		Constructor constructor = clazz
-				.getConstructor(new Class[] { PTR_CLASS });
-		return (NSControl) constructor.newInstance(new Object[] { wrapPointer(arg0) });
-	}
-	
-	/**
-	 * Specialized method.  It's behavior is isolated and different enough from the usual invocation that custom code is warranted.
-	 */
-	private static long[] OS_object_getInstanceVariable(long delegateId,
-			byte[] name) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException,
-			SecurityException, NoSuchMethodException {
-		Class clazz = OS.class;
-		Method method = null;
-		Class PTR_CLASS =  C.PTR_SIZEOF == 8 ? long.class : int.class;
-		if (PTR_CLASS == long.class) {
-			method = clazz.getMethod("object_getInstanceVariable", new Class[] {
-					long.class, byte[].class, long[].class });
-			long[] resultPtr = new long[1];
-			method.invoke(null, new Object[] { new Long(delegateId), name,
-					resultPtr });
-			return resultPtr;
-		} 
-		else {
-			method = clazz.getMethod("object_getInstanceVariable", new Class[] {
-					int.class, byte[].class, int[].class });
-			int[] resultPtr = new int[1];
-			method.invoke(null, new Object[] { new Integer((int) delegateId),
-					name, resultPtr });
-			return new long[] { resultPtr[0] };
-		}
-	}
-	
-	private long convertToLong(Object object) {
-		if (object instanceof Integer) {
-			Integer i = (Integer) object;
-			return i.longValue();
-		}
-		if (object instanceof Long) {
-			Long l = (Long) object;
-			return l.longValue();
+			delegate.runCommand(ActionFactory.ABOUT.getCommandId());
 		}
+
 		return 0;
 	}
-	
-	private static Object invokeMethod(Class clazz, String methodName,
-			Object[] args) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException,
-			SecurityException, NoSuchMethodException {
-		return invokeMethod(clazz, null, methodName, args);
-	}
 
-	private static Object invokeMethod(Class clazz, Object target,
-			String methodName, Object[] args) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException,
-			SecurityException, NoSuchMethodException {
-		Class[] signature = new Class[args.length];
-		for (int i = 0; i < args.length; i++) {
-			Class thisClass = args[i].getClass();
-			if (thisClass == Integer.class)
-				signature[i] = int.class;
-			else if (thisClass == Long.class)
-				signature[i] = long.class;
-			else if (thisClass == Byte.class)
-				signature[i] = byte.class;
-			else
-				signature[i] = thisClass;
-		}
-		Method method = clazz.getMethod(methodName, signature);
-		return method.invoke(target, args);
-	}
-	
-	private static Object wrapPointer(long value) {
-		Class PTR_CLASS =  C.PTR_SIZEOF == 8 ? long.class : int.class;
-		if (PTR_CLASS == long.class)
-			return new Long(value);
-		else 
-			return new Integer((int)value);
-	}
+
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUtil.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUtil.java
new file mode 100644
index 0000000..1cd1b18
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/CocoaUtil.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.cocoa;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.cocoa.NSControl;
+import org.eclipse.swt.internal.cocoa.NSMenu;
+import org.eclipse.swt.internal.cocoa.NSMenuItem;
+import org.eclipse.swt.internal.cocoa.OS;
+
+/**
+ * @since 3.7
+ * 
+ */
+
+public class CocoaUtil {
+
+	static Class PTR_CLASS = C.PTR_SIZEOF == 8 ? long.class : int.class;
+
+	public static long convertToLong(Object object) {
+		if (object instanceof Integer) {
+			Integer i = (Integer) object;
+			return i.longValue();
+		}
+		if (object instanceof Long) {
+			Long l = (Long) object;
+			return l.longValue();
+		}
+		return 0;
+	}
+
+	public static NSMenuItem getItemAtIndex(NSMenu menu, int index)
+			throws IllegalArgumentException, SecurityException, IllegalAccessException,
+			InvocationTargetException, NoSuchMethodException {
+		return (NSMenuItem) invokeMethod(NSMenu.class, menu, "itemAtIndex", makeArgs(index));
+	}
+
+	public static Object[] makeArgs(long pointer) {
+		return new Object[] { CocoaUtil.wrapPointer(pointer) };
+	}
+
+	public static Object[] makeArgs(Object obj) {
+		return new Object[] { obj };
+	}
+
+	public static Object[] makeArgs(Object obj1, Object obj2) {
+		return new Object[] { obj1, obj2 };
+	}
+
+	public static Object[] makeArgs(Object obj1, Object obj2, Object obj3) {
+		return new Object[] { obj1, obj2, obj3 };
+	}
+
+	public static Object[] makeArgs(Object obj1, Object obj2, Object obj3, Object obj4) {
+		return new Object[] { obj1, obj2, obj3, obj4 };
+	}
+
+	public static Object[] makeArgs(Object obj1, Object obj2, Object obj3, Object obj4, Object obj5) {
+		return new Object[] { obj1, obj2, obj3, obj4, obj5 };
+	}
+
+	public static Object invokeMethod(Class clazz, String methodName, Object[] args)
+			throws IllegalArgumentException, IllegalAccessException, InvocationTargetException,
+			SecurityException, NoSuchMethodException {
+		return invokeMethod(clazz, null, methodName, args);
+	}
+
+	public static Object invokeMethod(Class clazz, Object target, String methodName, Object[] args)
+			throws IllegalArgumentException, IllegalAccessException, InvocationTargetException,
+			SecurityException, NoSuchMethodException {
+		Class[] signature = new Class[args.length];
+		for (int i = 0; i < args.length; i++) {
+			Class thisClass = args[i].getClass();
+			if (thisClass == Integer.class)
+				signature[i] = int.class;
+			else if (thisClass == Long.class)
+				signature[i] = long.class;
+			else if (thisClass == Byte.class)
+				signature[i] = byte.class;
+			else
+				signature[i] = thisClass;
+		}
+		Method method = clazz.getMethod(methodName, signature);
+		return method.invoke(target, args);
+	}
+
+	public static Object wrapPointer(long value) {
+		if (PTR_CLASS == long.class)
+			return new Long(value);
+		else
+			return new Integer((int) value);
+	}
+
+	// The following methods reflectively call corresponding methods in the OS
+	// class, using ints or longs as required based on platform.
+
+	public static NSControl new_NSControl(long arg0) throws NoSuchMethodException,
+			InstantiationException, IllegalArgumentException, IllegalAccessException,
+			InvocationTargetException {
+		Class clazz = NSControl.class;
+		Class PTR_CLASS = C.PTR_SIZEOF == 8 ? long.class : int.class;
+		Constructor constructor = clazz.getConstructor(new Class[] { PTR_CLASS });
+		return (NSControl) constructor.newInstance(new Object[] { wrapPointer(arg0) });
+	}
+
+	/**
+	 * Specialized method. It's behavior is isolated and different enough from
+	 * the usual invocation that custom code is warranted.
+	 */
+	public static long[] OS_object_getInstanceVariable(long delegateId, byte[] name)
+			throws IllegalArgumentException, IllegalAccessException, InvocationTargetException,
+			SecurityException, NoSuchMethodException {
+		Class clazz = OS.class;
+		Method method = null;
+		Class PTR_CLASS = C.PTR_SIZEOF == 8 ? long.class : int.class;
+		if (PTR_CLASS == long.class) {
+			method = clazz.getMethod("object_getInstanceVariable", new Class[] { long.class,
+					byte[].class, long[].class });
+			long[] resultPtr = new long[1];
+			method.invoke(null, new Object[] { new Long(delegateId), name, resultPtr });
+			return resultPtr;
+		} else {
+			method = clazz.getMethod("object_getInstanceVariable", new Class[] { int.class,
+					byte[].class, int[].class });
+			int[] resultPtr = new int[1];
+			method.invoke(null, new Object[] { new Integer((int) delegateId), name, resultPtr });
+			return new long[] { resultPtr[0] };
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/MinimizeWindowHandler.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/MinimizeWindowHandler.java
new file mode 100644
index 0000000..1a6d869
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/MinimizeWindowHandler.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.cocoa;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.swt.internal.cocoa.NSWindow;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * 
+ * @since 3.7
+ * 
+ */
+public class MinimizeWindowHandler extends AbstractWindowHandler {
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+
+		Shell activeShell = HandlerUtil.getActiveShell(event);
+		NSWindow window = activeShell.view.window();
+		if (window != null)
+			window.miniaturize(window);
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/ZoomWindowHandler.java b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/ZoomWindowHandler.java
new file mode 100644
index 0000000..673c14e
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.cocoa/src/org/eclipse/ui/internal/cocoa/ZoomWindowHandler.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.cocoa;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.swt.internal.cocoa.NSWindow;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * 
+ * @since 3.7 
+ *
+ */
+public class ZoomWindowHandler extends AbstractWindowHandler {
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+
+		Shell activeShell = HandlerUtil.getActiveShell(event);
+		NSWindow window = activeShell.view.window();
+		if(window!=null)
+			window.zoom(window);
+		return null;
+	}
+	
+}
diff --git a/eclipse/plugins/org.eclipse.ui.console/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.ui.console/.settings/org.eclipse.jdt.core.prefs
index aa7d764..865b860 100644
--- a/eclipse/plugins/org.eclipse.ui.console/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.ui.console/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Thu Feb 26 08:17:36 CST 2009
+#Thu Jan 20 17:11:20 CET 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -14,7 +14,7 @@ org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
@@ -28,17 +28,19 @@ org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
@@ -48,10 +50,13 @@ org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
@@ -67,9 +72,11 @@ org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -84,6 +91,7 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverridin
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
diff --git a/eclipse/plugins/org.eclipse.ui.console/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.ui.console/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..9efd017
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.console/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 16:44:07 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.ui.console/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.console/META-INF/MANIFEST.MF
index 55ce437..f23de9b 100644
--- a/eclipse/plugins/org.eclipse.ui.console/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.console/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ui.console; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Activator: org.eclipse.ui.console.ConsolePlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java b/eclipse/plugins/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java
index 31c8678..45d9bc8 100644
--- a/eclipse/plugins/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java
+++ b/eclipse/plugins/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,7 +173,7 @@ public class ConsoleView extends PageBookView implements IConsoleView, IConsoleL
 	    if (!fStack.isEmpty()) {
 	        tos = (IConsole) fStack.get(0);
 	    }
-	    if (tos != null && !tos.equals(fActiveConsole)) {
+	    if (tos != null && !tos.equals(fActiveConsole) && fActive) {
 	        deactivateParticipants(tos);
 	    }
 	    if (fActiveConsole != null && !fActiveConsole.equals(tos)) {
diff --git a/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF
index 97511c1..59deb7b 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.editors/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ui.editors; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.ui.internal.editors.text.EditorsPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
@@ -15,11 +15,12 @@ Export-Package:
  org.eclipse.ui.internal.texteditor;x-internal:=true,
  org.eclipse.ui.texteditor
 Require-Bundle: 
- org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.jface.text;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.ui.workbench.texteditor;bundle-version="[3.6.0,4.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.ui.workbench.texteditor;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.core.filebuffers;visibility:=reexport;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.2.0,2.0.0)"
diff --git a/eclipse/plugins/org.eclipse.ui.editors/plugin.properties b/eclipse/plugins/org.eclipse.ui.editors/plugin.properties
index 4ecdba4..bb6a0a4 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/plugin.properties
+++ b/eclipse/plugins/org.eclipse.ui.editors/plugin.properties
@@ -18,17 +18,17 @@ ExtPoint.markerAnnotationSpecification= Marker Annotation Specification
 ExtPoint.annotationTypes= Annotation Types
 ExtPoint.editorTemplate= Editor Template
 
-convertDelimiters.Windows.name= Convert Line Delimiters to Windows
-convertDelimiters.Windows.label= &Windows
-convertDelimiters.Windows.description= Converts the line delimiters to Windows
+convertDelimiters.Windows.name= Convert Line Delimiters to Windows (CRLF, \\r\\n, 0D0A, \u00A4\u00B6)
+convertDelimiters.Windows.label= &Windows (CRLF, \\r\\n, 0D0A, \u00A4\u00B6)
+convertDelimiters.Windows.description= Converts the line delimiters to Windows (CRLF, \\r\\n, 0D0A, \u00A4\u00B6)
 
-convertDelimiters.Unix.name= Convert Line Delimiters to Unix
-convertDelimiters.Unix.label= &Unix
-convertDelimiters.Unix.description= Converts the line delimiters to Unix
+convertDelimiters.Unix.name= Convert Line Delimiters to Unix (LF, \\n, 0A, \u00B6)
+convertDelimiters.Unix.label= &Unix (LF, \\n, 0A, \u00B6)
+convertDelimiters.Unix.description= Converts the line delimiters to Unix (LF, \\n, 0A, \u00B6)
 
-convertDelimiters.MacOS9.name= Convert Line Delimiters to MacOS 9
-convertDelimiters.MacOS9.label= &MacOS 9
-convertDelimiters.MacOS9.description= Converts the line delimiters to MacOS 9
+convertDelimiters.MacOS9.name= Convert Line Delimiters to MacOS 9 (CR, \\r, 0D, \u00A4)
+convertDelimiters.MacOS9.label= &MacOS 9 (CR, \\r, 0D, \u00A4)
+convertDelimiters.MacOS9.description= Converts the line delimiters to MacOS 9 (CR, \\r, 0D, \u00A4)
 
 removeTrailingWhitespace.name= Remove Trailing Whitespace
 removeTrailingWhitespace.description= Removes the trailing whitespace of each line
diff --git a/eclipse/plugins/org.eclipse.ui.editors/plugin.xml b/eclipse/plugins/org.eclipse.ui.editors/plugin.xml
index 1037677..b253b7e 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/plugin.xml
+++ b/eclipse/plugins/org.eclipse.ui.editors/plugin.xml
@@ -489,7 +489,7 @@
 	       definitionId="org.eclipse.ui.edit.text.delimiter.windows"
 	       label="%convertDelimiters.Windows.label"
 	       class="org.eclipse.ui.internal.editors.text.ConvertLineDelimitersToWindows"
-	       tooltip="%convertDelimiters.Unix.description"
+	       tooltip="%convertDelimiters.Windows.description"
 	       menubarPath="file/converstLineDelimitersTo/lineDelimitersConversion"
 	       id="org.eclipse.ui.edit.text.delimiter.windows">
 	 	 </action>
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/ConstructedTextEditorMessages.properties b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/ConstructedTextEditorMessages.properties
index 099a0bc..7e89504 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/ConstructedTextEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/ConstructedTextEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -9,20 +9,20 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 
-Editor.ConvertToWindows.label=&Windows
-Editor.ConvertToWindows.tooltip=Converts Line Delimiters to Windows
+Editor.ConvertToWindows.label=&Windows (CRLF, \\r\\n, 0D0A, \u00A4\u00B6)
+Editor.ConvertToWindows.tooltip=Converts Line Delimiters to Windows (CRLF, \\r\\n, 0D0A, \u00A4\u00B6)
 Editor.ConvertToWindows.image=
-Editor.ConvertToWindows.description=Converts line delimiters to Windows
+Editor.ConvertToWindows.description=Converts line delimiters to Windows (CRLF, \\r\\n, 0D0A, \u00A4\u00B6)
 
-Editor.ConvertToUNIX.label=&UNIX
-Editor.ConvertToUNIX.tooltip=Converts Line Delimiters to UNIX
+Editor.ConvertToUNIX.label=&Unix (LF, \\n, 0A, \u00B6)
+Editor.ConvertToUNIX.tooltip=Converts Line Delimiters to Unix (LF, \\n, 0A, \u00B6)
 Editor.ConvertToUNIX.image=
-Editor.ConvertToUNIX.description=Converts line delimiters to UNIX
+Editor.ConvertToUNIX.description=Converts line delimiters to Unix (LF, \\n, 0A, \u00B6)
 
-Editor.ConvertToMac.label=&Mac
-Editor.ConvertToMac.tooltip=Converts line delimiters to Mac
+Editor.ConvertToMac.label=&MacOS 9 (CR, \\r, 0D, \u00A4)
+Editor.ConvertToMac.tooltip=Converts line delimiters to MacOS 9 (CR, \\r, 0D, \u00A4)
 Editor.ConvertToMac.image=
-Editor.ConvertToMac.description=Converts line delimiters to Mac
+Editor.ConvertToMac.description=Converts line delimiters to MacOS 9 (CR, \\r, 0D, \u00A4)
 
 Editor.ChangeEncodingAction.label= Set Encodin&g...
 Editor.ChangeEncodingAction.tooltip= Set Encoding
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/DefaultEncodingSupport.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/DefaultEncodingSupport.java
index a8e681e..8dede43 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/DefaultEncodingSupport.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/DefaultEncodingSupport.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,9 +27,9 @@ import org.eclipse.swt.widgets.Shell;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 
 import org.eclipse.core.resources.ResourcesPlugin;
 
@@ -73,7 +73,7 @@ public class DefaultEncodingSupport implements IEncodingSupport {
 
 		fTextEditor= textEditor;
 
-		IEclipsePreferences prefs= new InstanceScope().getNode(ResourcesPlugin.PI_RESOURCES);
+		IEclipsePreferences prefs= InstanceScope.INSTANCE.getNode(ResourcesPlugin.PI_RESOURCES);
 
 		fPreferenceChangeListener= new IPreferenceChangeListener() {
 			public void preferenceChange(PreferenceChangeEvent event) {
@@ -110,7 +110,7 @@ public class DefaultEncodingSupport implements IEncodingSupport {
 	 * Disposes this encoding support.
 	 */
 	public void dispose() {
-		IEclipsePreferences prefs= new InstanceScope().getNode(ResourcesPlugin.PI_RESOURCES);
+		IEclipsePreferences prefs= InstanceScope.INSTANCE.getNode(ResourcesPlugin.PI_RESOURCES);
 		prefs.removePreferenceChangeListener(fPreferenceChangeListener);
 		fTextEditor= null;
 	}
@@ -301,6 +301,7 @@ public class DefaultEncodingSupport implements IEncodingSupport {
 				action.run();
 			}
 		});
+		button.setFocus();
 
 		Label filler= new Label(parent, SWT.NONE);
 		filler.setLayoutData(new GridData(GridData.FILL_BOTH));
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java
index 934d5c9..d6627b4 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -787,7 +787,7 @@ public class FileDocumentProvider extends StorageDocumentProvider {
 				return lineDelimiter;
 		}
 		// workspace preference
-		scopeContext= new IScopeContext[] { new InstanceScope() };
+		scopeContext= new IScopeContext[] { InstanceScope.INSTANCE };
 		return Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.java
index 1ec22cb..a6d43f3 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,7 +81,6 @@ final class TextEditorMessages extends NLS {
 	public static String WorkbenchPreference_encoding_BOM_UTF_8;
 	public static String WorkbenchPreference_encoding_BOM_UTF_16BE;
 	public static String WorkbenchPreference_encoding_BOM_UTF_16LE;
-	public static String DocumentInputStream_error_read;
 	public static String DocumentInputStream_error_streamClosed;
 
 	static {
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.properties b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.properties
index 2b87cf0..9168334 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2008 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -65,5 +65,4 @@ WorkbenchPreference_encoding_BOM_UTF_8= UTF-8 (BOM)
 WorkbenchPreference_encoding_BOM_UTF_16BE= UTF-16 Big-Endian (BOM)
 WorkbenchPreference_encoding_BOM_UTF_16LE= UTF-16 Little-Endian (BOM)
 
-DocumentInputStream_error_read= Could not read document:\n{0}
 DocumentInputStream_error_streamClosed= Stream closed
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextFileDocumentProvider.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextFileDocumentProvider.java
index ced7719..d5b0b33 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextFileDocumentProvider.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextFileDocumentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -144,7 +144,7 @@ public class TextFileDocumentProvider implements IDocumentProvider, IDocumentPro
 	}
 
 	/**
-	 * @deprecated since 3.3 - do not use
+	 * @deprecated As of 3.3 - do not use
 	 */
 	static protected class NullProvider implements IDocumentProvider, IDocumentProviderExtension, IDocumentProviderExtension2, IDocumentProviderExtension3, IDocumentProviderExtension4, IDocumentProviderExtension5, IStorageDocumentProvider  {
 
@@ -1322,7 +1322,7 @@ public class TextFileDocumentProvider implements IDocumentProvider, IDocumentPro
 	/**
 	 * Returns an iterator over the elements connected via this document provider.
 	 *
-	 * @return an iterator over the list of elements (element type: {@link java.lang.Object}
+	 * @return an iterator over the list of elements (element type: {@link java.lang.Object})
 	 */
 	protected Iterator getConnectedElementsIterator()  {
 		return new HashSet(fFileInfoMap.keySet()).iterator();
@@ -1331,7 +1331,7 @@ public class TextFileDocumentProvider implements IDocumentProvider, IDocumentPro
 	/**
 	 * Returns an iterator over this document provider's file info objects.
 	 *
-	 * @return the iterator over list of file info objects (element type: {@link TextFileDocumentProvider.FileInfo}
+	 * @return the iterator over list of file info objects (element type: {@link TextFileDocumentProvider.FileInfo})
 	 */
 	protected Iterator getFileInfosIterator()  {
 		return new ArrayList(fFileInfoMap.values()).iterator();
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.java
index ae398b7..0360565 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextSourceViewerConfiguration.java
@@ -400,8 +400,9 @@ public class TextSourceViewerConfiguration extends SourceViewerConfiguration {
 		if (fPreferenceStore == null || !fPreferenceStore.getBoolean(SpellingService.PREFERENCE_SPELLING_ENABLED))
 			return null;
 
-		IQuickAssistAssistant assistant= new QuickAssistAssistant();
+		QuickAssistAssistant assistant= new QuickAssistAssistant();
 		assistant.setQuickAssistProcessor(new SpellingCorrectionProcessor());
+		assistant.setRestoreCompletionProposalSize(EditorsPlugin.getDefault().getDialogSettingsSection("quick_assist_proposal_size")); //$NON-NLS-1$
 		assistant.setInformationControlCreator(getQuickAssistAssistantInformationControlCreator());
 
 		return assistant;
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/AnnotationsConfigurationBlock.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/AnnotationsConfigurationBlock.java
index c7d57d9..45ed2ab 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/AnnotationsConfigurationBlock.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/AnnotationsConfigurationBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -435,8 +435,10 @@ class AnnotationsConfigurationBlock implements IPreferenceConfigurationBlock {
 		for (int i= 0; i < fListModel.length; i++) {
 			final ListItem element= fListModel[i];
 			if (data.equals(element.label)) {
-				fAnnotationTypeViewer.getControl().getDisplay().asyncExec(new Runnable() {
+				final Control control= fAnnotationTypeViewer.getControl();
+				control.getDisplay().asyncExec(new Runnable() {
 					public void run() {
+						control.setFocus();
 						fAnnotationTypeViewer.setSelection(new StructuredSelection(element), true);
 					}
 				});
@@ -606,6 +608,11 @@ class AnnotationsConfigurationBlock implements IPreferenceConfigurationBlock {
 		if (data.height > SIZE || data.width > SIZE) {
 			// scale down to icon size
 			copy= new Image(Display.getCurrent(), data.scaledTo(SIZE, SIZE));
+
+		} else if (data.height == SIZE && data.width == SIZE) {
+			// nothing to scale, return the image
+			return image;
+
 		} else {
 			// don't scale up, but rather copy into the middle and mark everything else transparent
 			ImageData mask= data.getTransparencyMask();
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/EditorsPlugin.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/EditorsPlugin.java
index 5362bdb..8057494 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/EditorsPlugin.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/EditorsPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.Status;
 
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 
@@ -281,4 +282,20 @@ public class EditorsPlugin extends AbstractUIPlugin {
 		return TextEditorMessages.EditorsPlugin_additionalInfo_affordance;
 	}
 
+	/**
+	 * Returns a section in the ui.editors plugin's dialog settings. If the section doesn't exist yet, it is created.
+	 *
+	 * @param name the name of the section
+	 * @return the section of the given name
+	 * @since 3.7
+	 */
+	public IDialogSettings getDialogSettingsSection(String name) {
+		IDialogSettings dialogSettings= getDialogSettings();
+		IDialogSettings section= dialogSettings.getSection(name);
+		if (section == null) {
+			section= dialogSettings.addNewSection(name);
+		}
+		return section;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/LinkedModeConfigurationBlock.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/LinkedModeConfigurationBlock.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/RemoveTrailingWhitespaceHandler.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/RemoveTrailingWhitespaceHandler.java
index f959cef..f98113b 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/RemoveTrailingWhitespaceHandler.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/RemoveTrailingWhitespaceHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,8 @@ package org.eclipse.ui.internal.editors.text;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.eclipse.core.expressions.IEvaluationContext;
+
 import org.eclipse.core.runtime.IPath;
 
 import org.eclipse.core.resources.IFile;
@@ -24,6 +26,9 @@ import org.eclipse.core.filebuffers.manipulation.RemoveTrailingWhitespaceOperati
 
 import org.eclipse.jface.window.Window;
 
+import org.eclipse.jface.text.ITextSelection;
+
+import org.eclipse.ui.ISources;
 import org.eclipse.ui.internal.editors.text.SelectResourcesDialog.IFilter;
 
 import org.eclipse.ui.editors.text.FileBufferOperationHandler;
@@ -36,6 +41,10 @@ import org.eclipse.ui.editors.text.FileBufferOperationHandler;
  */
 public class RemoveTrailingWhitespaceHandler extends FileBufferOperationHandler {
 
+	/** @since 3.7 */
+	private boolean fStrictCheckIfTextLocation= true;
+
+
 	public RemoveTrailingWhitespaceHandler() {
 		super(new RemoveTrailingWhitespaceOperation());
 	}
@@ -45,7 +54,7 @@ public class RemoveTrailingWhitespaceHandler extends FileBufferOperationHandler
 	 */
 	protected boolean isAcceptableLocation(IPath location) {
 		ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager();
-		return location != null && manager.isTextFileLocation(location, true);
+		return location != null && manager.isTextFileLocation(location, fStrictCheckIfTextLocation);
 	}
 
 	/*
@@ -107,4 +116,16 @@ public class RemoveTrailingWhitespaceHandler extends FileBufferOperationHandler
 		return (IFile[]) filtered.toArray(new IFile[filtered.size()]);
 	}
 
+	/*
+	 * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
+	 * @since 3.7
+	 */
+	public void setEnabled(Object evaluationContext) {
+		fStrictCheckIfTextLocation= true;
+		if (evaluationContext instanceof IEvaluationContext) {
+			Object selection= ((IEvaluationContext)evaluationContext).getVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME);
+			fStrictCheckIfTextLocation= !(selection instanceof ITextSelection);
+		}
+		super.setEnabled(evaluationContext);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/SelectResourcesBlock.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/SelectResourcesBlock.java
index 8f8f0d9..f955932 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/SelectResourcesBlock.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/SelectResourcesBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,8 +46,7 @@ import org.eclipse.jface.viewers.TreeExpansionEvent;
 import org.eclipse.jface.viewers.ViewerComparator;
 
 /*
- * XXX: This is an copy of the internal ResourceTreeAndListGroup class, see:
- *      https://bugs.eclipse.org/bugs/show_bug.cgi?id=147027
+ * XXX: This is an copy of the internal ResourceTreeAndListGroup class, see http://bugs.eclipse.org/147027
  */
 
 /**
@@ -357,8 +356,7 @@ class SelectResourcesBlock implements ICheckStateListener, ISelectionChangedList
 			result.add(treeElement);
 		else {
 			Collection listChildren= (Collection) checkedStateStore.get(treeElement);
-			//if it is not in the store then it and it's children are not
-			// interesting
+			//if it is not in the store then it and its children are not interesting
 			if (listChildren == null)
 				return;
 			result.addAll(listChildren);
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorDefaultsPreferencePage.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorDefaultsPreferencePage.java
index 02cecbd..16b7ae9 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorDefaultsPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorDefaultsPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,11 +19,17 @@ import java.util.Map;
 import java.util.Set;
 
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleEvent;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -31,22 +37,29 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.swt.widgets.Text;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IStatus;
 
+import org.eclipse.jface.action.LegacyActionTools;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.layout.PixelConverter;
 import org.eclipse.jface.preference.ColorSelector;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.StringConverter;
 
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
@@ -81,7 +94,14 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 	}
 
 
-	public final class InitializerFactory {
+	public static final class InitializerFactory {
+
+		private final IPreferenceStore fPreferenceStore;
+
+		public InitializerFactory(IPreferenceStore preferenceStore) {
+			fPreferenceStore= preferenceStore;
+		}
+
 		private class TextInitializer extends Initializer {
 			private final Text fText;
 
@@ -90,7 +110,7 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 				fText= control;
 			}
 			public void initialize() {
-				String value= fOverlayStore.getString(fPreference.getKey());
+				String value= fPreferenceStore.getString(fPreference.getKey());
 				fText.setText(value);
 			}
 		}
@@ -103,7 +123,7 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 				fControl= control;
 			}
 			public void initialize() {
-				boolean value= fOverlayStore.getBoolean(fPreference.getKey());
+				boolean value= fPreferenceStore.getBoolean(fPreference.getKey());
 				fControl.setSelection(value);
 			}
 		}
@@ -118,7 +138,7 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 				fDomain= domain;
 			}
 			public void initialize() {
-				int value= fOverlayStore.getInt(fPreference.getKey());
+				int value= fPreferenceStore.getInt(fPreference.getKey());
 				EnumValue enumValue= fDomain.getValueByInteger(value);
 				if (enumValue != null) {
 					int index= fDomain.getIndex(enumValue);
@@ -138,7 +158,7 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 				fDomain= domain;
 			}
 			public void initialize() {
-				int value= fOverlayStore.getInt(fPreference.getKey());
+				int value= fPreferenceStore.getInt(fPreference.getKey());
 				EnumValue enumValue= fDomain.getValueByInteger(value);
 				if (enumValue != null) {
 					fControl.setSelection(value);
@@ -368,6 +388,256 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		}
 	}
 
+	private static class WhitespaceCharacterPainterOptionsDialog extends Dialog {
+
+		private java.util.List fDialogInitializers= new ArrayList();
+
+		private OverlayPreferenceStore fDialogOverlayStore;
+
+		private final IPreferenceStore fParentPreferenceStore;
+
+		private InitializerFactory fDialogInitializerFactory;
+
+		private Text errorMessageText;
+
+		protected WhitespaceCharacterPainterOptionsDialog(Shell parentShell, IPreferenceStore parent) {
+			super(parentShell);
+			fParentPreferenceStore= parent;
+			fDialogOverlayStore= createDialogOverlayStore();
+			fDialogInitializerFactory= new InitializerFactory(fDialogOverlayStore);
+		}
+
+		private OverlayPreferenceStore createDialogOverlayStore() {
+			ArrayList overlayKeys= new ArrayList();
+
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_SPACES));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_SPACES));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_SPACES));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_IDEOGRAPHIC_SPACES));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_IDEOGRAPHIC_SPACES));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_TABS));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_TABS));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_TABS));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_CARRIAGE_RETURN));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LINE_FEED));
+			overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_WHITESPACE_CHARACTER_ALPHA_VALUE));
+
+			OverlayPreferenceStore.OverlayKey[] keys= new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
+			overlayKeys.toArray(keys);
+			return new OverlayPreferenceStore(fParentPreferenceStore, keys);
+		}
+
+		protected void configureShell(Shell newShell) {
+			super.configureShell(newShell);
+			newShell.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_showWhitespaceCharactersDialogTitle);
+		}
+
+		protected Control createContents(Composite parent) {
+			Control contents= super.createContents(parent);
+			Dialog.applyDialogFont(contents);
+			fDialogOverlayStore.load();
+			fDialogOverlayStore.start();
+			initializeShowWhitespaceCharactersPreferences();
+			return contents;
+		}
+
+		private void initializeShowWhitespaceCharactersPreferences() {
+			for (Iterator it= fDialogInitializers.iterator(); it.hasNext();) {
+				Initializer initializer= (Initializer)it.next();
+				initializer.initialize();
+			}
+		}
+
+		protected Control createDialogArea(Composite parent) {
+			Composite composite= (Composite)super.createDialogArea(parent);
+
+			Label description= new Label(composite, SWT.NONE);
+			description.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_configureWhitespaceCharacterPainterProperties);
+			description.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
+
+			Composite tabularComposite= new Composite(composite, SWT.NONE);
+			GridLayout layout= new GridLayout();
+			layout.numColumns= 4;
+			layout.marginHeight= 0;
+			layout.marginWidth= 0;
+			layout.makeColumnsEqualWidth= true;
+			tabularComposite.setLayout(layout);
+
+			Label label;
+			Button checkbox;
+			Preference preference;
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(""); //$NON-NLS-1$
+			label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_leading);
+			label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_enclosed);
+			label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_trailing);
+			label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_space);
+			label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_SPACES, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_SPACES, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_SPACES, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_ideographicSpace);
+			label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_IDEOGRAPHIC_SPACES, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_IDEOGRAPHIC_SPACES, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_tab);
+			label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_TABS, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_TABS, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_TABS, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_carriageReturn);
+			label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+			checkbox= new Button(tabularComposite, SWT.CHECK);
+			checkbox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+			checkbox.setEnabled(false);
+			checkbox= new Button(tabularComposite, SWT.CHECK);
+			checkbox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+			checkbox.setEnabled(false);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_CARRIAGE_RETURN, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+
+			label= new Label(tabularComposite, SWT.NONE);
+			label.setText(TextEditorMessages.TextEditorDefaultsPreferencePage_lineFeed);
+			label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+			checkbox= new Button(tabularComposite, SWT.CHECK);
+			checkbox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+			checkbox.setEnabled(false);
+			checkbox= new Button(tabularComposite, SWT.CHECK);
+			checkbox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
+			checkbox.setEnabled(false);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LINE_FEED, "", null); //$NON-NLS-1$
+			addCheckBox(tabularComposite, preference, new BooleanDomain(), 0);
+
+			Composite alphaComposite= new Composite(composite, SWT.NONE);
+			layout= new GridLayout();
+			layout.numColumns= 2;
+			layout.marginHeight= 10;
+			layout.marginWidth= 0;
+			layout.makeColumnsEqualWidth= false;
+			alphaComposite.setLayout(layout);
+			preference= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_WHITESPACE_CHARACTER_ALPHA_VALUE, TextEditorMessages.TextEditorDefaultsPreferencePage_transparencyLevel, null);
+			addTextField(alphaComposite, preference, new IntegerDomain(0, 255), 5, 0);
+
+			errorMessageText= new Text(composite, SWT.READ_ONLY | SWT.WRAP);
+			errorMessageText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+			errorMessageText.setBackground(errorMessageText.getDisplay()
+						.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+			setErrorMessage(null);
+
+			return composite;
+		}
+
+		/**
+		 * Sets or clears the error message. If not <code>null</code>, the OK button is disabled.
+		 * 
+		 * @param errorMessage the error message, or <code>null</code> to clear
+		 * @since 3.0
+		 */
+		public void setErrorMessage(String errorMessage) {
+			if (errorMessageText != null && !errorMessageText.isDisposed()) {
+				errorMessageText.setText(errorMessage == null ? "  " : errorMessage); //$NON-NLS-1$
+				boolean hasError= errorMessage != null && (StringConverter.removeWhiteSpaces(errorMessage)).length() > 0;
+				errorMessageText.setEnabled(hasError);
+				errorMessageText.setVisible(hasError);
+				errorMessageText.getParent().update();
+				Control button= getButton(IDialogConstants.OK_ID);
+				if (button != null) {
+					button.setEnabled(errorMessage == null);
+				}
+			}
+		}
+
+		private Button addCheckBox(Composite composite, final Preference preference, final Domain domain, int indentation) {
+			final Button checkBox= new Button(composite, SWT.CHECK);
+			checkBox.setToolTipText(preference.getDescription());
+
+			GridData gd= new GridData(SWT.CENTER, SWT.CENTER, false, false);
+			gd.horizontalIndent= indentation;
+			checkBox.setLayoutData(gd);
+			checkBox.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					boolean value= checkBox.getSelection();
+					IStatus status= domain.validate(Boolean.valueOf(value));
+					if (!status.matches(IStatus.ERROR))
+						fDialogOverlayStore.setValue(preference.getKey(), value);
+				}
+			});
+
+			fDialogInitializers.add(fDialogInitializerFactory.create(preference, checkBox));
+			return checkBox;
+		}
+
+		private Control[] addTextField(Composite composite, final Preference preference, final Domain domain, int textLimit, int indentation) {
+			Label labelControl= new Label(composite, SWT.NONE);
+			labelControl.setText(preference.getName());
+			GridData gd= new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+			gd.horizontalIndent= indentation;
+			labelControl.setLayoutData(gd);
+
+			final Text textControl= new Text(composite, SWT.BORDER | SWT.SINGLE);
+			gd= new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+			gd.widthHint= convertWidthInCharsToPixels(textLimit + 1);
+			textControl.setLayoutData(gd);
+			textControl.setTextLimit(textLimit);
+			textControl.setToolTipText(preference.getDescription());
+
+			if (domain != null) {
+				textControl.addModifyListener(new ModifyListener() {
+					public void modifyText(ModifyEvent e) {
+						String value= textControl.getText();
+						IStatus status= domain.validate(value);
+						if (!status.matches(IStatus.ERROR)) {
+							fDialogOverlayStore.setValue(preference.getKey(), value);
+							setErrorMessage(null);
+						}
+						else {
+							setErrorMessage(NLSUtility.format(TextEditorMessages.TextEditorDefaultsPreferencePage_showWhitespaceCharactersDialogInvalidInput, value));
+						}
+					}
+				});
+			}
+
+			fDialogInitializers.add(fDialogInitializerFactory.create(preference, textControl));
+
+			return new Control[] { labelControl, textControl };
+		}
+
+		protected void okPressed() {
+			super.okPressed();
+			fDialogOverlayStore.propagate();
+		}
+	}
 
 	private final String[][] fAppearanceColorListModel= new String[][] {
 		{TextEditorMessages.TextEditorPreferencePage_lineNumberForegroundColor, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, null},
@@ -396,7 +666,7 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 
 	private java.util.List fInitializers= new ArrayList();
 
-	private InitializerFactory fInitializerFactory= new InitializerFactory();
+	private InitializerFactory fInitializerFactory;
 
 	private Map fDomains= new HashMap();
 
@@ -405,6 +675,7 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		setPreferenceStore(EditorsPlugin.getDefault().getPreferenceStore());
 
 		fOverlayStore= createOverlayStore();
+		fInitializerFactory= new InitializerFactory(fOverlayStore);
 	}
 
 	private OverlayPreferenceStore createOverlayStore() {
@@ -452,6 +723,19 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TEXT_HOVER_AFFORDANCE));
 		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_HOVER_ENRICH_MODE));
 
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_SPACES));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_SPACES));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_SPACES));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_IDEOGRAPHIC_SPACES));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_IDEOGRAPHIC_SPACES));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LEADING_TABS));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_ENCLOSED_TABS));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TRAILING_TABS));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_CARRIAGE_RETURN));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_LINE_FEED));
+		overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_WHITESPACE_CHARACTER_ALPHA_VALUE));
+
 		OverlayPreferenceStore.OverlayKey[] keys= new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
 		overlayKeys.toArray(keys);
 		return new OverlayPreferenceStore(getPreferenceStore(), keys);
@@ -505,6 +789,19 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 
 		appearanceComposite.setLayout(layout);
 
+		Link fontLink= new Link(appearanceComposite, SWT.NONE);
+		fontLink.setText(TextEditorMessages.TextEditorPreferencePage_Font_link);
+		fontLink.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				PreferencesUtil.createPreferenceDialogOn(getShell(), "org.eclipse.ui.preferencePages.ColorsAndFonts", null, "selectFont:" + JFaceResources.TEXT_FONT); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		});
+		GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		gd.horizontalSpan= 2;
+		fontLink.setLayoutData(gd);
+
+		addFiller(appearanceComposite, 2);
+
 		String label= TextEditorMessages.TextEditorPreferencePage_undoHistorySize;
 		Preference undoHistorySize= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_UNDO_HISTORY_SIZE, label, null);
 		IntegerDomain undoHistorySizeDomain= new IntegerDomain(0, 99999);
@@ -551,7 +848,12 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 
 		label= TextEditorMessages.TextEditorDefaultsPreferencePage_showWhitespaceCharacters;
 		Preference showWhitespaceCharacters= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_WHITESPACE_CHARACTERS, label, null);
-		addCheckBox(appearanceComposite, showWhitespaceCharacters, new BooleanDomain(), 0);
+		addCheckBoxWithLink(appearanceComposite, showWhitespaceCharacters, new BooleanDomain(), 0, new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				Dialog dialog= new WhitespaceCharacterPainterOptionsDialog(Display.getDefault().getActiveShell(), fOverlayStore);
+				dialog.open();
+			}
+		});
 
 		label= TextEditorMessages.TextEditorPreferencePage_showAffordance;
 		Preference showAffordance= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SHOW_TEXT_HOVER_AFFORDANCE, label, null);
@@ -578,14 +880,9 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		Preference smartHomeEnd= new Preference(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SMART_HOME_END, label, null);
 		addCheckBox(appearanceComposite, smartHomeEnd, new BooleanDomain(), 0);
 
+		addFiller(appearanceComposite, 2);
 
-		Label l= new Label(appearanceComposite, SWT.LEFT );
-		GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		gd.horizontalSpan= 2;
-		gd.heightHint= convertHeightInCharsToPixels(1) / 2;
-		l.setLayoutData(gd);
-
-		l= new Label(appearanceComposite, SWT.LEFT);
+		Label l= new Label(appearanceComposite, SWT.LEFT);
 		l.setText(TextEditorMessages.TextEditorPreferencePage_appearanceOptions);
 		gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		gd.horizontalSpan= 2;
@@ -677,12 +974,9 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		link.setText(TextEditorMessages.TextEditorPreferencePage_colorsAndFonts_link);
 		link.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				PreferencesUtil.createPreferenceDialogOn(getShell(), "org.eclipse.ui.preferencePages.ColorsAndFonts", null, null); //$NON-NLS-1$
+				PreferencesUtil.createPreferenceDialogOn(getShell(), "org.eclipse.ui.preferencePages.ColorsAndFonts", null, "selectCategory:org.eclipse.ui.workbenchMisc"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});
-		// TODO replace by link-specific tooltips when
-		// bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=88866 gets fixed
-		link.setToolTipText(TextEditorMessages.TextEditorPreferencePage_colorsAndFonts_link_tooltip);
 
 		GridData gridData= new GridData(SWT.FILL, SWT.BEGINNING, true, false);
 		gridData.widthHint= 150; // only expand further if anyone else requires it
@@ -814,6 +1108,14 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		filler.setLayoutData(gd);
 	}
 
+	private void checkboxControlChanged(final Preference preference, final Domain domain, final Button checkBox) {
+		boolean value= checkBox.getSelection();
+		IStatus status= domain.validate(Boolean.valueOf(value));
+		if (!status.matches(IStatus.ERROR))
+			fOverlayStore.setValue(preference.getKey(), value);
+		updateStatus(status);
+	}
+
 	Button addCheckBox(Composite composite, final Preference preference, final Domain domain, int indentation) {
 		final Button checkBox= new Button(composite, SWT.CHECK);
 		checkBox.setText(preference.getName());
@@ -825,11 +1127,7 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		checkBox.setLayoutData(gd);
 		checkBox.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				boolean value= checkBox.getSelection();
-				IStatus status= domain.validate(Boolean.valueOf(value));
-				if (!status.matches(IStatus.ERROR))
-					fOverlayStore.setValue(preference.getKey(), value);
-				updateStatus(status);
+				checkboxControlChanged(preference, domain, checkBox);
 			}
 		});
 
@@ -838,6 +1136,78 @@ public class TextEditorDefaultsPreferencePage extends PreferencePage implements
 		return checkBox;
 	}
 
+	Button addCheckBoxWithLink(Composite parent, final Preference preference, final Domain domain, int indentation, final SelectionListener listener) {
+		GridData gd= new GridData(GridData.FILL, GridData.FILL, true, false);
+		gd.horizontalSpan= 3;
+		gd.horizontalIndent= indentation;
+
+		Composite composite= new Composite(parent, SWT.NONE);
+		GridLayout layout= new GridLayout();
+		layout.marginHeight= 0;
+		layout.marginWidth= 0;
+		layout.numColumns= 2;
+		composite.setLayout(layout);
+		composite.setLayoutData(gd);
+
+		final Button checkBox= new Button(composite, SWT.CHECK);
+		checkBox.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));
+		checkBox.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				checkboxControlChanged(preference, domain, checkBox);
+			}
+		});
+		checkBox.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+			public void getName(AccessibleEvent e) {
+				e.result= LegacyActionTools.removeMnemonics(preference.getName().replaceAll("</?[aA][^>]*>", "")); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		});
+
+		gd= new GridData(GridData.FILL, GridData.CENTER, false, false);
+		gd.horizontalIndent= -2;
+
+		Link link= new Link(composite, SWT.NONE);
+		link.setText(preference.getName());
+		link.setLayoutData(gd);
+
+		// toggle checkbox when user clicks unlinked text in link:
+		final boolean[] linkSelected= { false };
+		link.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				linkSelected[0]= true;
+				if (listener != null) {
+					listener.widgetSelected(e);
+				}
+			}
+		});
+		link.addMouseListener(new MouseAdapter() {
+			public void mouseDown(MouseEvent e) {
+				linkSelected[0]= false;
+			}
+			public void mouseUp(MouseEvent e) {
+				if (!linkSelected[0]) {
+					checkBox.setSelection(!checkBox.getSelection());
+					checkBox.setFocus();
+					linkSelected[0]= false;
+					checkboxControlChanged(preference, domain, checkBox);
+				}
+			}
+		});
+		link.addTraverseListener(new TraverseListener() {
+			public void keyTraversed(TraverseEvent e) {
+				if (e.detail == SWT.TRAVERSE_MNEMONIC && e.doit == true) {
+					e.detail= SWT.TRAVERSE_NONE;
+					checkBox.setSelection(!checkBox.getSelection());
+					checkBox.setFocus();
+					linkSelected[0]= false;
+					checkboxControlChanged(preference, domain, checkBox);
+				}
+			}
+		});
+
+		fInitializers.add(fInitializerFactory.create(preference, checkBox));
+		return checkBox;
+	}
+
 	Control[] addCombo(Composite composite, final Preference preference, final EnumeratedDomain domain, int indentation) {
 		Label labelControl= new Label(composite, SWT.NONE);
 		labelControl.setText(preference.getName());
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.java
index 18d1328..6d80df9 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,6 @@ final class TextEditorMessages extends NLS {
 	public static String TextEditorPreferencePage_findScopeColor;
 	public static String TextEditorPreferencePage_accessibility_disableCustomCarets;
 	public static String TextEditorPreferencePage_accessibility_wideCaret;
-	public static String TextEditorPreferencePage_overwriteMode;
 	public static String TextEditorPreferencePage_showAffordance;
 	public static String TextEditorPreferencePage_selectionForegroundColor;
 	public static String TextEditorPreferencePage_selectionBackgroundColor;
@@ -56,7 +55,7 @@ final class TextEditorMessages extends NLS {
 	public static String TextEditorPreferencePage_invalidRange;
 	public static String TextEditorPreferencePage_emptyInput;
 	public static String TextEditorPreferencePage_colorsAndFonts_link;
-	public static String TextEditorPreferencePage_colorsAndFonts_link_tooltip;
+	public static String TextEditorPreferencePage_Font_link;
 	public static String QuickDiffConfigurationBlock_description;
 	public static String QuickDiffConfigurationBlock_referenceProviderTitle;
 	public static String QuickDiffConfigurationBlock_referenceProviderNoteMessage;
@@ -125,16 +124,28 @@ final class TextEditorMessages extends NLS {
 		NLS.initializeMessages(BUNDLE_NAME, TextEditorMessages.class);
 	}
 
+	public static String TextEditorDefaultsPreferencePage_carriageReturn;
+	public static String TextEditorDefaultsPreferencePage_transparencyLevel;
+	public static String TextEditorDefaultsPreferencePage_configureWhitespaceCharacterPainterProperties;
+	public static String TextEditorDefaultsPreferencePage_enclosed;
 	public static String TextEditorDefaultsPreferencePage_enrichHoverMode;
 	public static String TextEditorDefaultsPreferencePage_enrichHover_immediately;
 	public static String TextEditorDefaultsPreferencePage_enrichHover_afterDelay;
 	public static String TextEditorDefaultsPreferencePage_enrichHover_disabled;
 	public static String TextEditorDefaultsPreferencePage_enrichHover_onClick;
+	public static String TextEditorDefaultsPreferencePage_ideographicSpace;
+	public static String TextEditorDefaultsPreferencePage_leading;
+	public static String TextEditorDefaultsPreferencePage_lineFeed;
 	public static String TextEditorDefaultsPreferencePage_range_indicator;
 	public static String TextEditorDefaultsPreferencePage_smartHomeEnd;
 	public static String TextEditorDefaultsPreferencePage_warn_if_derived;
 	public static String TextEditorDefaultsPreferencePage_showWhitespaceCharacters;
+	public static String TextEditorDefaultsPreferencePage_showWhitespaceCharactersDialogInvalidInput;
+	public static String TextEditorDefaultsPreferencePage_showWhitespaceCharactersDialogTitle;
+	public static String TextEditorDefaultsPreferencePage_space;
+	public static String TextEditorDefaultsPreferencePage_tab;
 	public static String TextEditorDefaultsPreferencePage_textDragAndDrop;
+	public static String TextEditorDefaultsPreferencePage_trailing;
 	public static String LinkedModeConfigurationBlock_annotationPresentationOptions;
 	public static String LinkedModeConfigurationBlock_SQUIGGLES;
 	public static String LinkedModeConfigurationBlock_UNDERLINE;
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.properties b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.properties
index 030e490..ac2bf2c 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/editors/text/TextEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -29,20 +29,30 @@ TextEditorPreferencePage_backgroundColor=Background color
 TextEditorPreferencePage_findScopeColor=Find scope
 TextEditorPreferencePage_accessibility_disableCustomCarets= Use &custom caret
 TextEditorPreferencePage_accessibility_wideCaret= &Enable thick caret
+TextEditorDefaultsPreferencePage_carriageReturn=Carriage Return ( \u00a4 )
+TextEditorDefaultsPreferencePage_transparencyLevel=&Transparency level (0 is transparent and 255 is opaque): 
+TextEditorDefaultsPreferencePage_configureWhitespaceCharacterPainterProperties=Configure visibility of whitespace characters in different regions of a line of text:
+TextEditorDefaultsPreferencePage_enclosed=Enclosed
 TextEditorDefaultsPreferencePage_enrichHoverMode=When mouse mo&ved into hover:
 TextEditorDefaultsPreferencePage_enrichHover_afterDelay=Enrich after delay
 TextEditorDefaultsPreferencePage_enrichHover_disabled=Close hover
 TextEditorDefaultsPreferencePage_enrichHover_immediately=Enrich immediately
 TextEditorDefaultsPreferencePage_enrichHover_onClick=Enrich on click
+TextEditorDefaultsPreferencePage_ideographicSpace=Ideographic space ( \u00b0 )
+TextEditorDefaultsPreferencePage_leading=Leading
+TextEditorDefaultsPreferencePage_lineFeed=Line Feed ( \u00b6 )
 TextEditorDefaultsPreferencePage_range_indicator=Show &range indicator
 TextEditorDefaultsPreferencePage_warn_if_derived= War&n before editing a derived file
 TextEditorDefaultsPreferencePage_smartHomeEnd= &Smart caret positioning at line start and end
-TextEditorDefaultsPreferencePage_showWhitespaceCharacters= Sh&ow whitespace characters
+TextEditorDefaultsPreferencePage_showWhitespaceCharacters= Sh&ow <a>whitespace characters</a>
+TextEditorDefaultsPreferencePage_showWhitespaceCharactersDialogInvalidInput=''{0}'' is not a valid input.
+TextEditorDefaultsPreferencePage_showWhitespaceCharactersDialogTitle=Show Whitespace Characters
+TextEditorDefaultsPreferencePage_space=Space ( \u00b7 )
+TextEditorDefaultsPreferencePage_tab=Tab ( \u00bb )
 TextEditorDefaultsPreferencePage_textDragAndDrop= Enable drag and dro&p of text
-TextEditorPreferencePage_colorsAndFonts_link= More colors can be configured on the <a>Colors and Fonts</a> preference page.
-TextEditorPreferencePage_colorsAndFonts_link_tooltip= Show the Colors and Fonts preferences
-
-TextEditorPreferencePage_overwriteMode= Disable &overwrite typing mode
+TextEditorDefaultsPreferencePage_trailing=Trailing
+TextEditorPreferencePage_colorsAndFonts_link= More colors can be configured on the <a>'Colors and Fonts'</a> preference page.
+TextEditorPreferencePage_Font_link= See <a>'Colors and Fonts'</a> to configure the font.
 
 TextEditorPreferencePage_selectionForegroundColor= Selection foreground color
 TextEditorPreferencePage_selectionBackgroundColor= Selection background color
@@ -111,9 +121,9 @@ SelectResourcesDialog_nFilesSelected= {0} files selected.
 
 ConvertLineDelimitersAction_default_label=\ [default]
 ConvertLineDelimitersAction_dialog_title=Convert Line Delimiters to {0}
-ConvertLineDelimitersToMacOS9_label=&MacOS 9
-ConvertLineDelimitersToWindows_label=&Windows
-ConvertLineDelimitersToUnix_label=&Unix
+ConvertLineDelimitersToMacOS9_label=&MacOS 9 (CR, \\r, 0D, \u00A4)
+ConvertLineDelimitersToWindows_label=&Windows (CRLF, \\r\\n, 0D0A, \u00A4\u00B6)
+ConvertLineDelimitersToUnix_label=&Unix (LF, \\n, 0A, \u00B6)
 ConvertLineDelimitersAction_dialog_description=Select files to convert:
 RemoveTrailingWhitespaceHandler_dialog_title=Remove Trailing Whitespace
 RemoveTrailingWhitespaceHandler_dialog_description=Select files:
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/RulerMessages.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/RulerMessages.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/RulerMessages.properties b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/RulerMessages.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditor.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditor.java
index 1411f39..06fd1eb 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditor.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.ui.texteditor;
 
 import java.io.File;
+import java.lang.reflect.InvocationTargetException;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.IllegalCharsetNameException;
@@ -46,6 +47,8 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
@@ -78,6 +81,7 @@ import org.eclipse.jface.window.Window;
 
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.ITextViewerExtension6;
 import org.eclipse.jface.text.ITextViewerExtension8;
 import org.eclipse.jface.text.JFaceTextUtil;
@@ -109,7 +113,9 @@ import org.eclipse.jface.text.source.LineNumberRulerColumn;
 import org.eclipse.jface.text.source.OverviewRuler;
 import org.eclipse.jface.text.source.SourceViewer;
 
+import org.eclipse.ui.IEditorDescriptor;
 import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IURIEditorInput;
 import org.eclipse.ui.IWorkbenchActionConstants;
@@ -117,6 +123,8 @@ import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.ContributionItemFactory;
+import org.eclipse.ui.actions.OpenWithMenu;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.eclipse.ui.dialogs.PreferencesUtil;
 import org.eclipse.ui.dialogs.SaveAsDialog;
 import org.eclipse.ui.ide.FileStoreEditorInput;
@@ -1075,8 +1083,7 @@ public abstract class AbstractDecoratedTextEditor extends StatusTextEditor {
 	}
 
 	/*
-	 * For an explanation why we override this method see:
-	 * bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=42230
+	 * For an explanation why we override this method see http://bugs.eclipse.org/42230
 	 *
 	 * @see org.eclipse.ui.texteditor.StatusTextEditor#isErrorStatus(org.eclipse.core.runtime.IStatus)
 	 */
@@ -1450,6 +1457,23 @@ public abstract class AbstractDecoratedTextEditor extends StatusTextEditor {
 		}
 	}
 
+	/*
+	 * @see org.eclipse.ui.texteditor.StatusTextEditor#handleEditorInputChanged()
+	 * @since 3.7
+	 */
+	protected void handleEditorInputChanged() {
+		final IDocumentProvider provider= getDocumentProvider();
+		IEditorInput input= getEditorInput();
+		if (provider != null && input != null) {
+			if (!provider.isDeleted(input) && !isDirty() && input.getAdapter(IFile.class) != null) {
+				IEclipsePreferences pref= InstanceScope.INSTANCE.getNode(ResourcesPlugin.PI_RESOURCES);
+				if (pref != null && pref.getBoolean(ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH, false))
+					return;
+			}
+		}
+		super.handleEditorInputChanged();
+	}
+
 	/**
 	 * This implementation asks the user for the workspace path of a file resource and saves the document there.
 	 *
@@ -1457,7 +1481,7 @@ public abstract class AbstractDecoratedTextEditor extends StatusTextEditor {
 	 * @since 3.2
 	 */
 	protected void performSaveAs(IProgressMonitor progressMonitor) {
-		Shell shell= getSite().getShell();
+		Shell shell= PlatformUI.getWorkbench().getModalDialogShellProvider().getShell();
 		final IEditorInput input= getEditorInput();
 
 		IDocumentProvider provider= getDocumentProvider();
@@ -1520,6 +1544,8 @@ public abstract class AbstractDecoratedTextEditor extends StatusTextEditor {
 			IFile original= (input instanceof IFileEditorInput) ? ((IFileEditorInput) input).getFile() : null;
 			if (original != null)
 				dialog.setOriginalFile(original);
+			else
+				dialog.setOriginalName(input.getName());
 
 			dialog.create();
 
@@ -1931,12 +1957,83 @@ public abstract class AbstractDecoratedTextEditor extends StatusTextEditor {
 		menu.appendToGroup(ITextEditorActionConstants.GROUP_SETTINGS, preferencesAction);
 
 		menu.appendToGroup(ITextEditorActionConstants.GROUP_SAVE, new Separator(ITextEditorActionConstants.GROUP_OPEN));
+
+		IEditorInput editorInput= getEditorInput();
+		if (((IResource)editorInput.getAdapter(IResource.class)) instanceof IFile) {
+			MenuManager openWithSubMenu= new MenuManager(TextEditorMessages.AbstractDecoratedTextEditor_openWith_menu);
+			final IWorkbenchPage page= getEditorSite().getPage();
+
+			// XXX: Internal reference will get fixed during 3.7, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=307026
+			openWithSubMenu.add(new OpenWithMenu(page, editorInput) {
+				protected void openEditor(IEditorDescriptor editorDescriptor, boolean openUsingDescriptor) {
+					super.openEditor(editorDescriptor, openUsingDescriptor);
+					ISelection selection= getSelectionProvider().getSelection();
+					if (selection instanceof ITextSelection) {
+						revealInEditor(page.getActiveEditor(), ((ITextSelection)selection).getOffset(), ((ITextSelection)selection).getLength());
+					}
+				}
+			});
+			menu.appendToGroup(ITextEditorActionConstants.GROUP_OPEN, openWithSubMenu);
+		}
+
 		MenuManager showInSubMenu= new MenuManager(getShowInMenuLabel());
 		showInSubMenu.add(ContributionItemFactory.VIEWS_SHOW_IN.create(getEditorSite().getWorkbenchWindow()));
 		menu.appendToGroup(ITextEditorActionConstants.GROUP_OPEN, showInSubMenu);
 	}
 
 	/**
+	 * Selects and reveals the given offset and length in the given editor part.
+	 * 
+	 * @param editor the editor part
+	 * @param offset the offset
+	 * @param length the length
+	 * @since 3.7
+	 */
+	private static void revealInEditor(IEditorPart editor, final int offset, final int length) {
+		if (editor instanceof ITextEditor) {
+			((ITextEditor)editor).selectAndReveal(offset, length);
+			return;
+		}
+
+		// Support for non-text editor - try IGotoMarker interface
+		final IGotoMarker gotoMarkerTarget;
+		if (editor instanceof IGotoMarker)
+			gotoMarkerTarget= (IGotoMarker)editor;
+		else
+			gotoMarkerTarget= editor != null ? (IGotoMarker)editor.getAdapter(IGotoMarker.class) : null;
+		if (gotoMarkerTarget != null) {
+			final IEditorInput input= editor.getEditorInput();
+			if (input instanceof IFileEditorInput) {
+				WorkspaceModifyOperation op= new WorkspaceModifyOperation() {
+					protected void execute(IProgressMonitor monitor) throws CoreException {
+						IMarker marker= null;
+						try {
+							marker= ((IFileEditorInput)input).getFile().createMarker(IMarker.TEXT);
+							marker.setAttribute(IMarker.CHAR_START, offset);
+							marker.setAttribute(IMarker.CHAR_END, offset + length);
+
+							gotoMarkerTarget.gotoMarker(marker);
+
+						} finally {
+							if (marker != null)
+								marker.delete();
+						}
+					}
+				};
+
+				try {
+					op.run(null);
+				} catch (InvocationTargetException ex) {
+					// reveal failed
+				} catch (InterruptedException e) {
+					Assert.isTrue(false, "this operation can not be canceled"); //$NON-NLS-1$
+				}
+			}
+			return;
+		}
+	}
+
+	/**
 	 * Returns the menu label for 'Show In' together with its key binding string.
 	 *
 	 * @return the 'Show In' menu label
@@ -1956,37 +2053,36 @@ public abstract class AbstractDecoratedTextEditor extends StatusTextEditor {
 	}
 
 	/**
-	 * Returns the preference page ids of the preference pages to be shown
-	 * when executing the preferences action from the editor context menu.
+	 * Returns the preference page ids of the preference pages to be shown when executing the
+	 * preferences action from the editor context menu. The first page will be selected.
 	 * <p>
 	 * Subclasses may extend or replace.
 	 * </p>
-	 *
+	 * 
 	 * @return the preference page ids to show, may be empty
 	 * @since 3.1
 	 */
 	protected String[] collectContextMenuPreferencePages() {
-		return new String[] {
-			"org.eclipse.ui.preferencePages.GeneralTextEditor", //$NON-NLS-1$
-			"org.eclipse.ui.editors.preferencePages.Annotations", //$NON-NLS-1$
-			"org.eclipse.ui.editors.preferencePages.QuickDiff", //$NON-NLS-1$
-			"org.eclipse.ui.editors.preferencePages.Accessibility", //$NON-NLS-1$
-			"org.eclipse.ui.editors.preferencePages.Spelling", //$NON-NLS-1$
-			"org.eclipse.ui.editors.preferencePages.LinkedModePreferencePage", //$NON-NLS-1$
+		return new String[] { "org.eclipse.ui.preferencePages.GeneralTextEditor", //$NON-NLS-1$
+				"org.eclipse.ui.editors.preferencePages.Annotations", //$NON-NLS-1$
+				"org.eclipse.ui.editors.preferencePages.QuickDiff", //$NON-NLS-1$
+				"org.eclipse.ui.editors.preferencePages.Accessibility", //$NON-NLS-1$
+				"org.eclipse.ui.editors.preferencePages.Spelling", //$NON-NLS-1$
+				"org.eclipse.ui.editors.preferencePages.LinkedModePreferencePage", //$NON-NLS-1$
+				"org.eclipse.ui.preferencePages.ColorsAndFonts", //$NON-NLS-1$
 		};
 	}
 
 	/**
-	 * Returns the preference page ids of the preference pages to be shown when
-	 * executing the preferences action from the editor ruler context menu.
+	 * Returns the preference page ids of the preference pages to be shown when executing the
+	 * preferences action from the editor ruler context menu. The first page will be selected.
 	 * <p>
-	 * The default is to return the same list as
-	 * <code>collectContextMenuPreferencePages</code>.
+	 * The default is to return the same list as <code>collectContextMenuPreferencePages</code>.
 	 * </p>
 	 * <p>
 	 * Subclasses may extend or replace.
 	 * </p>
-	 *
+	 * 
 	 * @return the preference page ids to show, may be empty
 	 * @since 3.1
 	 */
@@ -1995,24 +2091,25 @@ public abstract class AbstractDecoratedTextEditor extends StatusTextEditor {
 	}
 
 	/**
-	 * Returns the preference page ids of the preference pages to be shown when
-	 * executing the preferences action from the editor overview ruler context menu.
+	 * Returns the preference page ids of the preference pages to be shown when executing the
+	 * preferences action from the editor overview ruler context menu. The first page will be
+	 * selected.
 	 * <p>
-	 * The default is to return the 'Annotations' preference page.
+	 * The default is to select the 'Annotations' preference page.
 	 * </p>
 	 * <p>
 	 * Subclasses may extend or replace.
 	 * </p>
-	 *
+	 * 
 	 * @return the preference page ids to show, may be empty
 	 * @since 3.4
 	 */
 	protected String[] collectOverviewRulerMenuPreferencePages() {
-		return new String[] {
-				"org.eclipse.ui.editors.preferencePages.Annotations", //$NON-NLS-1$
+		return new String[] { "org.eclipse.ui.editors.preferencePages.Annotations", //$NON-NLS-1$
 				"org.eclipse.ui.preferencePages.GeneralTextEditor", //$NON-NLS-1$
-				"org.eclipse.ui.editors.preferencePages.QuickDiff" //$NON-NLS-1$
-			};
+				"org.eclipse.ui.editors.preferencePages.QuickDiff", //$NON-NLS-1$
+				"org.eclipse.ui.preferencePages.ColorsAndFonts" //$NON-NLS-1$
+		};
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditorPreferenceConstants.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditorPreferenceConstants.java
index fd2b444..ed63933 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditorPreferenceConstants.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractDecoratedTextEditorPreferenceConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -394,12 +394,165 @@ public class AbstractDecoratedTextEditorPreferenceConstants {
 	 * <p>
 	 * Value is of type <code>Boolean</code>.
 	 * </p>
-	 *
+	 * 
+	 * <p>
+	 * The following preferences can be used for fine-grained configuration when enabled.
+	 * <ul>
+	 * <li>{@link #EDITOR_SHOW_LEADING_SPACES}</li>
+	 * <li>{@link #EDITOR_SHOW_ENCLOSED_SPACES}</li>
+	 * <li>{@link #EDITOR_SHOW_TRAILING_SPACES}</li>
+	 * <li>{@link #EDITOR_SHOW_LEADING_IDEOGRAPHIC_SPACES}</li>
+	 * <li>{@link #EDITOR_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES}</li>
+	 * <li>{@link #EDITOR_SHOW_TRAILING_IDEOGRAPHIC_SPACES}</li>
+	 * <li>{@link #EDITOR_SHOW_LEADING_TABS}</li>
+	 * <li>{@link #EDITOR_SHOW_ENCLOSED_TABS}</li>
+	 * <li>{@link #EDITOR_SHOW_TRAILING_TABS}</li>
+	 * <li>{@link #EDITOR_SHOW_CARRIAGE_RETURN}</li>
+	 * <li>{@link #EDITOR_SHOW_LINE_FEED}</li>
+	 * <li>{@link #EDITOR_WHITESPACE_CHARACTER_ALPHA_VALUE}</li>
+	 * </ul>
+	 * </p>
+	 * 
 	 * @since 3.3
 	 */
 	public static final String EDITOR_SHOW_WHITESPACE_CHARACTERS= AbstractTextEditor.PREFERENCE_SHOW_WHITESPACE_CHARACTERS;
 
 	/**
+	 * A named preference that controls the display of leading Space characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_LEADING_SPACES= AbstractTextEditor.PREFERENCE_SHOW_LEADING_SPACES;
+
+	/**
+	 * A named preference that controls the display of enclosed Space characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_ENCLOSED_SPACES= AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_SPACES;
+
+	/**
+	 * A named preference that controls the display of trailing Space characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_TRAILING_SPACES= AbstractTextEditor.PREFERENCE_SHOW_TRAILING_SPACES;
+
+	/**
+	 * A named preference that controls the display of leading Ideographic Space characters. The
+	 * value is used only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is
+	 * <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_LEADING_IDEOGRAPHIC_SPACES= AbstractTextEditor.PREFERENCE_SHOW_LEADING_IDEOGRAPHIC_SPACES;
+
+	/**
+	 * A named preference that controls the display of enclosed Ideographic Space characters. The
+	 * value is used only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is
+	 * <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES= AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES;
+
+	/**
+	 * A named preference that controls the display of trailing Ideographic Space characters. The
+	 * value is used only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is
+	 * <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_TRAILING_IDEOGRAPHIC_SPACES= AbstractTextEditor.PREFERENCE_SHOW_TRAILING_IDEOGRAPHIC_SPACES;
+
+	/**
+	 * A named preference that controls the display of leading Tab characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_LEADING_TABS= AbstractTextEditor.PREFERENCE_SHOW_LEADING_TABS;
+
+	/**
+	 * A named preference that controls the display of enclosed Tab characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_ENCLOSED_TABS= AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_TABS;
+
+	/**
+	 * A named preference that controls the display of trailing Tab characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_TRAILING_TABS= AbstractTextEditor.PREFERENCE_SHOW_TRAILING_TABS;
+
+	/**
+	 * A named preference that controls the display of Carriage Return characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_CARRIAGE_RETURN= AbstractTextEditor.PREFERENCE_SHOW_CARRIAGE_RETURN;
+
+	/**
+	 * A named preference that controls the display of Line Feed characters. The value is used only
+	 * if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_SHOW_LINE_FEED= AbstractTextEditor.PREFERENCE_SHOW_LINE_FEED;
+
+	/**
+	 * A named preference that controls the alpha value of whitespace characters. The value is used
+	 * only if the value of {@link #EDITOR_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Integer</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String EDITOR_WHITESPACE_CHARACTER_ALPHA_VALUE= AbstractTextEditor.PREFERENCE_WHITESPACE_CHARACTER_ALPHA_VALUE;
+
+	/**
 	 * A named preference that controls the display of the range indicator.
 	 * <p>
 	 * Value is of type <code>Boolean</code>.
@@ -548,14 +701,8 @@ public class AbstractDecoratedTextEditorPreferenceConstants {
 			store.setDefault(descriptors[i].getId() + HyperlinkDetectorDescriptor.STATE_MASK_POSTFIX, stateMask);
 		}
 
-		/*
-		 * As of 3.3 we enabled spell checking per default
-		 * but do not want this to impact our performance tests. For this
-		 * reason we disable it when running the UI test application.
-		 */
-		boolean isInTestMode= System.getProperty("eclipse.perf.dbloc") != null; //$NON-NLS-1$
 		boolean isInstalled= EditorsUI.getSpellingService().getSpellingEngineDescriptors().length > 0;
-		store.setDefault(SpellingService.PREFERENCE_SPELLING_ENABLED, !isInTestMode && isInstalled);
+		store.setDefault(SpellingService.PREFERENCE_SPELLING_ENABLED, isInstalled);
 		store.setDefault(SpellingService.PREFERENCE_SPELLING_ENGINE, ""); //$NON-NLS-1$
 
 		store.setDefault(SHOW_RANGE_INDICATOR, true);
@@ -568,7 +715,21 @@ public class AbstractDecoratedTextEditorPreferenceConstants {
 
 		store.setDefault(EDITOR_WARN_IF_INPUT_DERIVED, true);
 		store.setDefault(EDITOR_SMART_HOME_END, true);
+
 		store.setDefault(EDITOR_SHOW_WHITESPACE_CHARACTERS, false);
+		store.setDefault(EDITOR_SHOW_LEADING_SPACES, true);
+		store.setDefault(EDITOR_SHOW_ENCLOSED_SPACES, true);
+		store.setDefault(EDITOR_SHOW_TRAILING_SPACES, true);
+		store.setDefault(EDITOR_SHOW_LEADING_IDEOGRAPHIC_SPACES, true);
+		store.setDefault(EDITOR_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES, true);
+		store.setDefault(EDITOR_SHOW_TRAILING_IDEOGRAPHIC_SPACES, true);
+		store.setDefault(EDITOR_SHOW_LEADING_TABS, true);
+		store.setDefault(EDITOR_SHOW_ENCLOSED_TABS, true);
+		store.setDefault(EDITOR_SHOW_TRAILING_TABS, true);
+		store.setDefault(EDITOR_SHOW_CARRIAGE_RETURN, true);
+		store.setDefault(EDITOR_SHOW_LINE_FEED, true);
+		store.setDefault(EDITOR_WHITESPACE_CHARACTER_ALPHA_VALUE, 80);
+
 		store.setDefault(EDITOR_TEXT_DRAG_AND_DROP_ENABLED, true);
 		store.setDefault(EDITOR_SHOW_TEXT_HOVER_AFFORDANCE, true);
 		store.setDefault(EDITOR_HOVER_ENRICH_MODE, 0);
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java
index e9fb07a..ea168a5 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AddMarkerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,9 +175,6 @@ public class AddMarkerAction extends TextEditorAction {
 
 		Object o= attributes.get("message"); //$NON-NLS-1$
 		String proposal= (o instanceof String) ? (String) o : ""; //$NON-NLS-1$
-		if (proposal == null)
-			proposal= ""; //$NON-NLS-1$
-
 		String title= getString(fBundle, fPrefix + "dialog.title", fPrefix + "dialog.title"); //$NON-NLS-2$ //$NON-NLS-1$
 		String message= getString(fBundle, fPrefix + "dialog.message", fPrefix + "dialog.message"); //$NON-NLS-2$ //$NON-NLS-1$
 		IInputValidator inputValidator= new IInputValidator() {
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerAnnotationPreferences.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerAnnotationPreferences.java
index 49aaae4..2480849 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerAnnotationPreferences.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerAnnotationPreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -210,9 +210,9 @@ public class MarkerAnnotationPreferences {
 
 
 	/** The list of extension fragments. */
-	private List fFragments;
+	private List/*<AnnotationPreference>*/ fFragments;
 	/** The list of extensions. */
-	private List fPreferences;
+	private List/*<AnnotationPreference>*/ fPreferences;
 
 	/**
 	 * Creates a new marker annotation preferences to access
@@ -238,6 +238,7 @@ public class MarkerAnnotationPreferences {
 	 * Returns all extensions provided for the <code>markerAnnotationSpecification</code> extension point.
 	 *
 	 * @return all extensions provided for the <code>markerAnnotationSpecification</code> extension point
+	 *         (element type: {@link AnnotationPreference})
 	 */
 	public List getAnnotationPreferences() {
 		if (fPreferences == null)
@@ -252,7 +253,7 @@ public class MarkerAnnotationPreferences {
 	 * change the presentation part.
 	 *
 	 * @return all extensions provided for the <code>markerAnnotationSpecification</code>
-	 *         extension point including fragments
+	 *         extension point including fragments (element type: {@link AnnotationPreference})
 	 */
 	public List getAnnotationPreferenceFragments() {
 		if (fFragments == null)
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerRulerAction.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerRulerAction.java
index 884247a..a59f471 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerRulerAction.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/MarkerRulerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -400,9 +400,6 @@ public class MarkerRulerAction extends ResourceAction implements IUpdate {
 
 		Object o= attributes.get("message"); //$NON-NLS-1$
 		String proposal= (o instanceof String) ? (String) o : ""; //$NON-NLS-1$
-		if (proposal == null)
-			proposal= ""; //$NON-NLS-1$
-
 		String title= getString(fBundle, fPrefix + "add.dialog.title", fPrefix + "add.dialog.title"); //$NON-NLS-2$ //$NON-NLS-1$
 		String message= getString(fBundle, fPrefix + "add.dialog.message", fPrefix + "add.dialog.message"); //$NON-NLS-2$ //$NON-NLS-1$
 		IInputValidator inputValidator= new IInputValidator() {
@@ -431,7 +428,8 @@ public class MarkerRulerAction extends ResourceAction implements IUpdate {
 	 * Returns the attributes with which a newly created marker will be
 	 * initialized.
 	 *
-	 * @return the initial marker attributes
+	 * @return the initial marker attributes (key type: <code>String</code>, value type:
+	 *         <code>Object</code>)
 	 */
 	protected Map getInitialAttributes() {
 
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java
index a6a57b2..c0e32be 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,9 +45,7 @@ final class TextEditorMessages extends NLS {
 	public static String AbstractDecoratedTextEditor_show_ruler_label;
 	public static String SelectMarkerRulerAction_getMarker;
 	public static String AddMarkerAction_addMarker;
-	public static String MarkerRulerAction_addMarker;
 	public static String MarkerRulerAction_getMarker;
-	public static String MarkerRulerAction_removeMarkers;
 	public static String AbstractMarkerAnnotationModel_connected;
 	public static String AbstractMarkerAnnotationModel_createMarkerUpdater;
 	public static String AbstractMarkerAnnotationModel_removeAnnotations;
@@ -55,9 +53,6 @@ final class TextEditorMessages extends NLS {
 	public static String ChangeEncodingAction_message_noEncodingSupport;
 	public static String ChangeEncodingAction_button_apply_label;
 
-	public static String AbstractDecoratedTextEditor_revision_quickdiff_switch_title;
-	public static String AbstractDecoratedTextEditor_revision_quickdiff_switch_message;
-	public static String AbstractDecoratedTextEditor_revision_quickdiff_switch_rememberquestion;
 	public static String AbstractDecoratedTextEditor_warning_saveAs_deleted;
 	public static String AbstractDecoratedTextEditor_error_saveAs_title;
 	public static String AbstractDecoratedTextEditor_error_saveAs_message;
@@ -71,6 +66,7 @@ final class TextEditorMessages extends NLS {
 	public static String AbstractDecoratedTextEditor_warning_derived_message;
 	public static String AbstractDecoratedTextEditor_warning_derived_dontShowAgain;
 
+	public static String AbstractDecoratedTextEditor_openWith_menu;
 	public static String AbstractDecoratedTextEditor_showIn_menu;
 	public static String AbstractDecoratedTextEditor_printPageNumber;
 
diff --git a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties
index d77dbfb..3cdd936 100644
--- a/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -13,9 +13,7 @@ SelectMarkerRulerAction_getMarker=SelectMarkerRulerAction.getMarker
 
 AddMarkerAction_addMarker= Add Marker
 
-MarkerRulerAction_addMarker=MarkerRulerAction.addMarker
 MarkerRulerAction_getMarker=MarkerRulerAction.getMarker
-MarkerRulerAction_removeMarkers=MarkerRulerAction.removeMarkers
 
 AbstractMarkerAnnotationModel_connected=AbstractMarkerAnnotationModel.connected
 AbstractMarkerAnnotationModel_createMarkerUpdater=AbstractMarkerAnnotationModel.createMarkerUpdater
@@ -24,11 +22,8 @@ AbstractMarkerAnnotationModel_removeAnnotations=AbstractMarkerAnnotationModel.re
 DocumentProviderRegistry_error_extension_point_not_found=Extension point: {0}.documentProviders not found
 ChangeEncodingAction_message_noEncodingSupport=No encoding support installed
 ChangeEncodingAction_button_apply_label=Apply
-AbstractDecoratedTextEditor_revision_quickdiff_switch_title=Changing Quick Diff Reference
 AbstractDecoratedTextEditor_revision_colors_option_by_date=Color by &Date
-AbstractDecoratedTextEditor_revision_quickdiff_switch_message=In order to display revision information, the quick diff display needs to be changed to your team provider.
 AbstractDecoratedTextEditor_revision_colors_option_by_author=Color by &Author
-AbstractDecoratedTextEditor_revision_quickdiff_switch_rememberquestion=Remember this decision
 AbstractDecoratedTextEditor_revision_colors_option_by_author_and_date=Combined &Coloring
 AbstractDecoratedTextEditor_error_saveAs_title=Problems During Save As...
 AbstractDecoratedTextEditor_error_saveAs_message=Save could not be completed. {0}
@@ -45,6 +40,8 @@ AbstractDecoratedTextEditor_warning_derived_dontShowAgain= In the future, never
 # {0} will be replaced by the current page number
 AbstractDecoratedTextEditor_printPageNumber= Page {0}
 
+AbstractDecoratedTextEditor_openWith_menu= Open W&ith
+
 # {0} will be replaced by the key binding
 AbstractDecoratedTextEditor_showIn_menu= Sho&w In\t{0}
 
diff --git a/eclipse/plugins/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs
index 6cec79c..ae25ba7 100644
--- a/eclipse/plugins/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,9 @@
-#Mon Dec 01 09:56:45 PST 2008
+#Thu May 05 15:06:07 CDT 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
 org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
 org.eclipse.jdt.core.circularClasspath=error
 org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
@@ -20,28 +21,29 @@ org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=error
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=error
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
@@ -49,28 +51,35 @@ org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
@@ -85,11 +94,12 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverridin
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
 org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
diff --git a/eclipse/plugins/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..5ee1bba
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Wed Feb 02 09:42:25 CST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java
index 5b0c0a4..375060c 100644
--- a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java	
+++ b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuilderTab.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -316,7 +316,7 @@ public class ExternalToolsBuilderTab extends AbstractLaunchConfigurationTab {
 		String buildKindString= null;
 		String buildScope= null;
 		try {
-			buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, ""); //$NON-NLS-1$
+			buildKindString= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, IExternalToolConstants.EMPTY_STRING);
 			buildScope= configuration.getAttribute(IExternalToolConstants.ATTR_BUILDER_SCOPE, (String)null);
 		} catch (CoreException e) {
 		}
diff --git a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java
index d1bf2d9..56fe084 100644
--- a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java	
+++ b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsMainTab.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,8 @@ import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -255,6 +257,14 @@ public abstract class ExternalToolsMainTab extends AbstractLaunchConfigurationTa
         group.setFont(parent.getFont());
 		
 		argumentField = new Text(group, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
+		argumentField.addTraverseListener(new TraverseListener() {
+			public void keyTraversed(TraverseEvent event) {
+				if (event.detail == SWT.TRAVERSE_RETURN && (event.stateMask & SWT.MODIFIER_MASK) != 0) {
+					event.doit= true;
+				}
+			}
+		});
+		
 		gridData = new GridData(GridData.FILL_BOTH);
 		gridData.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
 		gridData.heightHint = 30;
@@ -307,9 +317,9 @@ public abstract class ExternalToolsMainTab extends AbstractLaunchConfigurationTa
 	 * configuration.
 	 */
 	protected void updateWorkingDirectory(ILaunchConfiguration configuration) {
-		String workingDir= ""; //$NON-NLS-1$
+		String workingDir= IExternalToolConstants.EMPTY_STRING; 
 		try {
-			workingDir= configuration.getAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$
+			workingDir= configuration.getAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, IExternalToolConstants.EMPTY_STRING); 
 		} catch (CoreException ce) {
 			ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Error_reading_configuration_10, ce);
 		}
@@ -321,9 +331,9 @@ public abstract class ExternalToolsMainTab extends AbstractLaunchConfigurationTa
 	 * configuration.
 	 */
 	protected void updateLocation(ILaunchConfiguration configuration) {
-		String location= ""; //$NON-NLS-1$
+		String location= IExternalToolConstants.EMPTY_STRING; 
 		try {
-			location= configuration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$
+			location= configuration.getAttribute(IExternalToolConstants.ATTR_LOCATION, IExternalToolConstants.EMPTY_STRING); 
 		} catch (CoreException ce) {
 			ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Error_reading_configuration_10, ce);
 		}
@@ -335,9 +345,9 @@ public abstract class ExternalToolsMainTab extends AbstractLaunchConfigurationTa
 	 * configuration.
 	 */
 	protected void updateArgument(ILaunchConfiguration configuration) {
-		String arguments= ""; //$NON-NLS-1$
+		String arguments= IExternalToolConstants.EMPTY_STRING; 
 		try {
-			arguments= configuration.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, ""); //$NON-NLS-1$
+			arguments= configuration.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, IExternalToolConstants.EMPTY_STRING); 
 		} catch (CoreException ce) {
 			ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.ExternalToolsMainTab_Error_reading_configuration_7, ce);
 		}
diff --git a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java
index f3b82cb..16c945a 100644
--- a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java	
+++ b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolsPlugin.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,12 +48,10 @@ public final class ExternalToolsPlugin extends AbstractUIPlugin implements
 	/**
 	 * Status representing no problems encountered during operation.
 	 */
-	public static final IStatus OK_STATUS = new Status(IStatus.OK, PLUGIN_ID, 0, "", null); //$NON-NLS-1$
+	public static final IStatus OK_STATUS = new Status(IStatus.OK, PLUGIN_ID, 0, IExternalToolConstants.EMPTY_STRING, null);
 		
 	private static ExternalToolsPlugin plugin;
 
-	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
 	private static IWindowListener fWindowListener;
 
 	private static ILaunchManager launchManager;
@@ -134,7 +132,7 @@ public final class ExternalToolsPlugin extends AbstractUIPlugin implements
 	 */
 	public static IStatus newErrorStatus(String message, Throwable exception) {
 		if (message == null) {
-			message= EMPTY_STRING; 
+			return new Status(IStatus.ERROR, PLUGIN_ID, 0, IExternalToolConstants.EMPTY_STRING, exception); 
 		}		
 		return new Status(IStatus.ERROR, PLUGIN_ID, 0, message, exception);
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
index 3f97506..67c457c 100644
--- a/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java	
+++ b/eclipse/plugins/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -209,7 +209,7 @@ public final class BuilderPropertyPage extends PropertyPage implements ICheckSta
 	
 		boolean projectNeedsMigration= false;
 		for (int i = 0; i < commands.length; i++) {
-			String[] version= new String[] {""}; //$NON-NLS-1$
+			String[] version= new String[] {IExternalToolConstants.EMPTY_STRING};
 			ILaunchConfiguration config = BuilderUtils.configFromBuildCommandArgs(project, commands[i].getArguments(), version);
 			if (BuilderCoreUtils.VERSION_2_1.equals(version[0])) {
 				// Storing the .project file of a project with 2.1 configs, will
diff --git a/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF
index 00bbd4e..823bf3e 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.forms/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.ui.forms
-Bundle-Version: 3.5.2.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Vendor: %provider-name
 Bundle-Localization: plugin
 Export-Package: org.eclipse.ui.forms,
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ColumnLayout.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ColumnLayout.java
index 21450d6..72e5937 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ColumnLayout.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ColumnLayout.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Layout;
+import org.eclipse.ui.internal.forms.widgets.ColumnLayoutUtils;
 /**
  * This layout manager arranges children of the composite parent in vertical
  * columns. All the columns are identical size and children are stretched
@@ -112,9 +113,7 @@ public final class ColumnLayout extends Layout implements ILayoutExtension {
 			ncolumns = Math.max(ncolumns, minNumColumns);
 			ncolumns = Math.min(ncolumns, maxNumColumns);
 		}
-		int perColHeight = cheight / ncolumns;
-		if (cheight % ncolumns != 0)
-			perColHeight++;
+		int perColHeight = ColumnLayoutUtils.computeColumnHeight(ncolumns, sizes, cheight, verticalSpacing);
 		int colHeight = 0;
 		int[] heights = new int[ncolumns];
 		int ncol = 0;
@@ -196,11 +195,9 @@ public final class ColumnLayout extends Layout implements ILayoutExtension {
 //			childrenPerColumn++;
 //		int colWidth = 0;
 
-		int fillWidth = Math.max(cwidth, realWidth);
-		
-		int perColHeight = cheight / ncolumns;
-		if (cheight % ncolumns != 0)
-			perColHeight++;
+		int fillWidth = Math.max(cwidth, realWidth);	
+		int perColHeight = ColumnLayoutUtils.computeColumnHeight(ncolumns, sizes, cheight, verticalSpacing);
+
 		
 		int colHeight = 0;
 		int[] heights = new int[ncolumns];
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java
index f7cfd6d..c96d79a 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,11 +9,13 @@
  *     IBM Corporation - initial API and implementation
  *     Kai Nacke - Fix for Bug 202382
  *     Bryan Hunt - Fix for Bug 245457
+ *     Didier Villevalois - Fix for Bug 178534 
  *******************************************************************************/
 package org.eclipse.ui.forms.widgets;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.osgi.service.environment.Constants;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.FocusEvent;
 import org.eclipse.swt.events.FocusListener;
@@ -327,6 +329,10 @@ public class ExpandableComposite extends Canvas {
 						ty = tcsize.y / 2 - size.y / 2 + marginHeight
 								+ tvmargin;
 				}
+				String os = System.getProperty("os.name"); //$NON-NLS-1$
+				if (Constants.OS_LINUX.equalsIgnoreCase(os)) {
+					size.x += 1; // See Bug 342610
+				}
 				textLabelCache.setBounds(x, ty, size.x, size.y);
 			}
 			if (textClient != null) {
@@ -356,13 +362,12 @@ public class ExpandableComposite extends Canvas {
 					y += VSPACE;
 			}
 			if (expanded) {
-				int areaWidth = clientArea.width - marginWidth - marginWidth
-						- thmargin - thmargin;
+				int areaWidth = clientArea.width - marginWidth - thmargin;
 				int cx = marginWidth + thmargin;
 				if ((expansionStyle & CLIENT_INDENT) != 0) {
 					cx = x;
-					areaWidth -= x;
 				}
+				areaWidth -= cx;
 				if (client != null) {
 					Point dsize = null;
 					Control desc = getDescriptionControl();
@@ -594,11 +599,15 @@ public class ExpandableComposite extends Canvas {
 				toggle.paintFocus=false;
 				toggle.addFocusListener(new FocusListener() {
 					public void focusGained(FocusEvent e) {
-						textLabel.redraw();
+						if (textLabel != null) {
+						    textLabel.redraw();
+						} 
 					}
 
 					public void focusLost(FocusEvent e) {
-						textLabel.redraw();
+						if (textLabel != null) {
+						    textLabel.redraw();
+						} 
 					}
 				});
 			}
@@ -809,10 +818,14 @@ public class ExpandableComposite extends Canvas {
 	 * @see #getText()
 	 */
 	public void setText(String title) {
-		if (textLabel instanceof Label)
+		if (textLabel instanceof Label) {
 			((Label) textLabel).setText(title);
-		else if (textLabel instanceof Hyperlink)
+		} else if (textLabel instanceof Hyperlink) {
 			((Hyperlink) textLabel).setText(title);
+		} else {
+			return;
+		}
+		layout();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormText.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormText.java
index 9e648fe..e396e25 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormText.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormText.java
@@ -1612,22 +1612,21 @@ public class FormText extends Canvas {
 
 	private void paintFocusTransfer(IHyperlinkSegment oldLink,
 			IHyperlinkSegment newLink) {
-		GC gc = new GC(this);
-		Color bg = getBackground();
-		Color fg = getForeground();
-		gc.setFont(getFont());
 		if (oldLink != null) {
-			gc.setBackground(bg);
-			gc.setForeground(fg);
-			oldLink.paintFocus(gc, bg, fg, false, null);
+			Rectangle r = oldLink.getBounds();
+			redraw(r.x, r.y, r.width, r.height, true);
+			update();
 		}
 		if (newLink != null) {
-			// ensureVisible(newLink);
+			GC gc = new GC(this);
+			Color bg = getBackground();
+			Color fg = getForeground();
+			gc.setFont(getFont());
 			gc.setBackground(bg);
 			gc.setForeground(fg);
 			newLink.paintFocus(gc, bg, fg, true, null);
+			gc.dispose();
 		}
-		gc.dispose();
 	}
 
 	private void ensureVisible(IFocusSelectable segment) {
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormToolkit.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormToolkit.java
index 44a9a37..ddcbeca 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormToolkit.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/FormToolkit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,10 @@
  *******************************************************************************/
 package org.eclipse.ui.forms.widgets;
 
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
@@ -165,10 +169,23 @@ public class FormToolkit {
 	}
 
 	private static class VisibilityHandler extends FocusAdapter {
+		private boolean handleNextFocusGained = true;
+		
 		public void focusGained(FocusEvent e) {
+			if (!handleNextFocusGained) {
+				handleNextFocusGained = true;
+			} else {
+				Widget w = e.widget;
+				if (w instanceof Control) {
+					FormUtil.ensureVisible((Control) w);
+				}
+			}
+		}
+		
+		public void focusLost(FocusEvent e) {
 			Widget w = e.widget;
 			if (w instanceof Control) {
-				FormUtil.ensureVisible((Control) w);
+				handleNextFocusGained = w.getDisplay().getActiveShell() == ((Control) w).getShell(); 
 			}
 		}
 	}
@@ -184,33 +201,42 @@ public class FormToolkit {
 	}
 
 	private class BoldFontHolder {
-		private Font normalFont;
-
-		private Font boldFont;
+		private Map fontMap;
 
 		public BoldFontHolder() {
 		}
 
 		public Font getBoldFont(Font font) {
-			createBoldFont(font);
-			return boldFont;
-		}
-
-		private void createBoldFont(Font font) {
-			if (normalFont == null || !normalFont.equals(font)) {
-				normalFont = font;
-				dispose();
+			if (font == null ) {
+				return null;
 			}
-			if (boldFont == null) {
-				boldFont = FormFonts.getInstance().getBoldFont(colors.getDisplay(),
-						normalFont);
+			
+			if (fontMap == null) {
+				fontMap = new HashMap();
 			}
+			
+			if (fontMap.containsKey(font)) {
+				return (Font) fontMap.get(font);
+			}
+
+			Font boldFont = FormFonts.getInstance().getBoldFont(colors.getDisplay(),
+						font);
+			fontMap.put(font, boldFont);
+			return boldFont;
+
 		}
 
 		public void dispose() {
-			if (boldFont != null && colors.getDisplay() != null) {
-				FormFonts.getInstance().markFinished(boldFont, colors.getDisplay());
-				boldFont = null;
+			if (fontMap == null) {
+				return;
+			}
+			for (Iterator iter = fontMap.values().iterator(); iter.hasNext();) {
+				Font boldFont = (Font) iter.next();
+				if (boldFont != null && colors.getDisplay() != null) {
+					FormFonts.getInstance().markFinished(boldFont,
+							colors.getDisplay());
+					boldFont = null;
+				}
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ImageHyperlink.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ImageHyperlink.java
index e526db8..5a4e57b 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ImageHyperlink.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/ImageHyperlink.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -257,7 +257,7 @@ public class ImageHyperlink extends Hyperlink {
 		this.image = image;
 		if (disabledImage != null)
 			disabledImage.dispose();
-		if (!isEnabled() && image != null && !image.isDisposed())
+		if (image != null && !image.isDisposed())
 			disabledImage = new Image(image.getDevice(), image, SWT.IMAGE_DISABLE);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java
index d3dcb78..80b500b 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java
@@ -364,13 +364,8 @@ public class Section extends ExpandableComposite {
 			Point tcsize = null;
 			if (toggle != null)
 				tsize = toggle.getSize();
-			int twidth = bounds.width - marginWidth - marginWidth;
-			if (tsize != null)
-				twidth -= tsize.x + IGAP;
 			if (getTextClient() != null)
 				tcsize = getTextClient().getSize();
-			if (tcsize != null)
-				twidth -= tcsize.x + IGAP;
 			Point size = textLabel == null ? new Point(0,0) : textLabel.getSize();
 			if (tsize != null)
 				theight += Math.max(theight, tsize.y);
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SharedScrolledComposite.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SharedScrolledComposite.java
index ca7b205..6ae9b9b 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SharedScrolledComposite.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SharedScrolledComposite.java
@@ -7,7 +7,7 @@
  * 
  *  Contributors:
  *     IBM Corporation - initial API and implementation
- *     Wojciech Galanciak - fix for Bug 294868 – [Forms] Problem with text 
+ *     Wojciech Galanciak - fix for Bug 294868 [Forms] Problem with text 
  *     wrapping in SharedScrolledComposite:
  *******************************************************************************/
 package org.eclipse.ui.forms.widgets;
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SizeCache.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SizeCache.java
index a22b207..4249e9b 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SizeCache.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/SizeCache.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.ui.forms.widgets;
 
-import java.util.List;
-
 import org.eclipse.jface.util.Geometry;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Point;
@@ -22,6 +20,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Layout;
+import org.eclipse.swt.widgets.List;
 import org.eclipse.swt.widgets.ProgressBar;
 import org.eclipse.swt.widgets.Sash;
 import org.eclipse.swt.widgets.Scale;
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapData.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapData.java
index eb8121e..2d23e95 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapData.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -173,14 +173,14 @@ public final class TableWrapData {
 	public TableWrapData(int align, int valign, int rowspan, int colspan) {
 		if (align != LEFT && align != CENTER && align != RIGHT && align != FILL
 				&& align != FILL_GRAB)
-			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "align"); //$NON-NLS-1$
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, " \"align\""); //$NON-NLS-1$
 		if (valign != TOP && valign != MIDDLE && valign != BOTTOM
 				&& valign != FILL && valign != FILL_GRAB)
-			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "valign"); //$NON-NLS-1$
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, " \"valign\""); //$NON-NLS-1$
 		if (rowspan < 1)
-			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "rowspan"); //$NON-NLS-1$
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, " \"rowspan\""); //$NON-NLS-1$
 		if (colspan < 1)
-			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "colspan"); //$NON-NLS-1$
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, " \"colspan\""); //$NON-NLS-1$
 		if (align == FILL_GRAB) {
 			this.align = FILL;
 			grabHorizontal = true;
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapLayout.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapLayout.java
index 4ffaab1..a51922a 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapLayout.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/forms/widgets/TableWrapLayout.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2009 IBM Corporation and others.
+ *  Copyright (c) 2000, 2011 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@ import org.eclipse.swt.widgets.*;
 
 /**
  * This implementation of the layout algorithm attempts to position controls in
- * the composite using a two-pass autolayout HTML table altorithm recommeded by
+ * the composite using a two-pass autolayout HTML table algorithm recommended by
  * HTML 4.01 W3C specification (see
  * http://www.w3.org/TR/html4/appendix/notes.html#h-B.5.2.2). The main
  * differences with GridLayout is that it has two passes and that width and
@@ -251,9 +251,7 @@ public final class TableWrapLayout extends Layout implements ILayoutExtension {
 				columnWidths = maxColumnWidths;
 			} else {
 				columnWidths = new int[numColumns];
-				int colSpace = tableWidth - leftMargin - rightMargin;
-				colSpace -= (numColumns - 1) * horizontalSpacing;
-				int extra = parentWidth - maxWidth;
+			    int extra = parentWidth - maxWidth;
 				int colExtra = extra / growingColumns.length;
 				for (int i = 0; i < numColumns; i++) {
 					columnWidths[i] = maxColumnWidths[i];
@@ -371,7 +369,7 @@ public final class TableWrapLayout extends Layout implements ILayoutExtension {
 		int fixedPart = leftMargin + rightMargin + (numColumns - 1)
 				* horizontalSpacing;
 		int D = maxWidth - minWidth;
-		int W = tableWidth - fixedPart - minWidth;
+		int W = tableWidth - minWidth;
 		int widths[] = new int[numColumns];
 		int rem = 0;
 		for (int i = 0; i < numColumns; i++) {
@@ -708,7 +706,7 @@ public final class TableWrapLayout extends Layout implements ILayoutExtension {
 	int internalGetMinimumWidth(Composite parent, boolean changed) {
 		if (changed)
 			//calculateMinimumColumnWidths(parent, true);
-			calculateColumnWidths(parent, minColumnWidths, false, true);
+			calculateColumnWidths(parent, minColumnWidths, false, true, makeColumnsEqualWidth);
 		int minimumWidth = 0;
 		widestColumnWidth = 0;
 		if (makeColumnsEqualWidth) {
@@ -733,7 +731,7 @@ public final class TableWrapLayout extends Layout implements ILayoutExtension {
 	int internalGetMaximumWidth(Composite parent, boolean changed) {
 		if (changed)
 			//calculateMaximumColumnWidths(parent, true);
-			calculateColumnWidths(parent, maxColumnWidths, true, true);
+			calculateColumnWidths(parent, maxColumnWidths, true, true, makeColumnsEqualWidth);
 		int maximumWidth = 0;
 		for (int i = 0; i < numColumns; i++) {
 			if (i > 0)
@@ -758,8 +756,9 @@ public final class TableWrapLayout extends Layout implements ILayoutExtension {
 		}
 	}
 	
-	void calculateColumnWidths(Composite parent, int [] columnWidths, boolean max, boolean changed) {
+	void calculateColumnWidths(Composite parent, int [] columnWidths, boolean max, boolean changed, boolean makeColumnsEqualWidth2) {
 		boolean secondPassNeeded=false;
+		int widestColumnWidth = 0;
 		for (int i = 0; i < grid.size(); i++) {
 			TableWrapData[] row = (TableWrapData[]) grid.elementAt(i);
 			for (int j = 0; j < numColumns; j++) {
@@ -783,6 +782,12 @@ public final class TableWrapLayout extends Layout implements ILayoutExtension {
 
 				width += td.indent;
 				columnWidths[j] = Math.max(columnWidths[j], width);
+				widestColumnWidth = Math.max(widestColumnWidth, columnWidths[j]);
+			}
+		}
+		if (makeColumnsEqualWidth) {
+			for (int i = 0; i < numColumns; i++) {
+				columnWidths[i] = widestColumnWidth;
 			}
 		}
 		if (!secondPassNeeded) return;
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/AggregateHyperlinkSegment.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/AggregateHyperlinkSegment.java
index 839e9a7..e55db95 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/AggregateHyperlinkSegment.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/AggregateHyperlinkSegment.java
@@ -117,16 +117,15 @@ public class AggregateHyperlinkSegment extends ParagraphSegment implements
 	 * @see org.eclipse.ui.internal.forms.widgets.IHyperlinkSegment#getBounds()
 	 */
 	public Rectangle getBounds() {
-		Rectangle bounds = new Rectangle(Integer.MAX_VALUE, Integer.MAX_VALUE,
-				0, 0);
-		// TODO this is wrong
-		for (int i = 0; i < segments.size(); i++) {
+		if (segments.size() == 0)
+			return new Rectangle(Integer.MAX_VALUE, Integer.MAX_VALUE, 0, 0);
+			
+		IHyperlinkSegment segment0 = (IHyperlinkSegment) segments.get(0);
+		Rectangle bounds = segment0.getBounds();
+		for (int i = 1; i < segments.size(); i++) {
 			IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i);
 			Rectangle sbounds = segment.getBounds();
-			bounds.x = Math.min(bounds.x, sbounds.x);
-			bounds.y = Math.min(bounds.y, sbounds.y);
-			bounds.width = Math.max(bounds.width, sbounds.width);
-			bounds.height = Math.max(bounds.height, sbounds.height);
+			bounds.add(sbounds);
 		}
 		return bounds;
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/ColumnLayoutUtils.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/ColumnLayoutUtils.java
new file mode 100644
index 0000000..90a8116
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/ColumnLayoutUtils.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.forms.widgets;
+
+import org.eclipse.swt.graphics.Point;
+
+public class ColumnLayoutUtils {
+	
+	/*
+	 * Compute the minimum required height by iteration. The first guess is to
+	 * 
+	 * This method is public to allow for JUnit testing
+	 */
+	public static int computeColumnHeight(int ncolumns, Point[] sizes, int totalHeight, int verticalMargin) {
+		int averageHeight = ( totalHeight + sizes.length * verticalMargin ) / ncolumns;
+		int requiredHeight = computeActualHeight(ncolumns, sizes, averageHeight, verticalMargin);
+		if (averageHeight == requiredHeight) {
+			return requiredHeight;
+		}
+		// Try making the columns shorter, repeat up to 10 times, usually one or two iterations will be sufficient
+		for ( int i = 0; i < 10; i++ ) {
+			int candidateHeight = computeActualHeight(ncolumns, sizes, requiredHeight - 1, verticalMargin);
+			if ( candidateHeight >= requiredHeight ) {
+				return requiredHeight;
+			}
+			requiredHeight = candidateHeight;
+		}
+		return requiredHeight;
+	}
+	
+	private static int computeActualHeight(int ncolumns, Point[] sizes, int candidateHeight, int verticalMargin ) {
+		int colHeight = 0;
+		int maxHeight = 0;
+		int column = 1;
+		for (int i = 0; i < sizes.length; i++) {
+			int childHeight = sizes[i].y;
+			if (i > 0 && column < ncolumns && colHeight + childHeight + verticalMargin > candidateHeight) {
+				maxHeight = Math.max(colHeight, maxHeight);
+				column++;
+				colHeight = 0; 
+			}
+			if (colHeight > 0)
+				colHeight += verticalMargin;
+			colHeight += childHeight;
+		}
+		maxHeight = Math.max(colHeight, maxHeight);
+		return maxHeight;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/Paragraph.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/Paragraph.java
index 213abf6..2f9fac8 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/Paragraph.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/Paragraph.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -137,6 +137,10 @@ public class Paragraph {
 			ParagraphSegment segment = segments[j];
 			segment.advanceLocator(gc, width, hloc, resourceTable, true);
 		}
+		if (hloc.rowHeight == 0) {
+			FontMetrics fm = gc.getFontMetrics();
+			hloc.rowHeight = fm.getHeight();
+		}
 		hloc.collectHeights();
 		loc.heights = heights;
 		loc.rowCounter = 0;
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java
index 9738e3c..837ff4a 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TextSegment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *      Konstantin Komissarchik  - Fix for Bug 316997
+ *     Konstantin Komissarchik - Fix for  Bug 316997 
  *******************************************************************************/
 package org.eclipse.ui.internal.forms.widgets;
 
@@ -15,6 +15,7 @@ import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.Vector;
 
+import org.eclipse.jface.util.Geometry;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Font;
@@ -206,20 +207,16 @@ public class TextSegment extends ParagraphSegment {
 	}
 
 	public Rectangle getBounds() {
-		int x = 0, y = 0;
-		int width = 0, height = 0;
-
-		for (int i = 0; i < areaRectangles.size(); i++) {
+		if (areaRectangles.size() == 0)
+			return new Rectangle(0, 0, 0, 0);
+		
+		AreaRectangle ar0 = (AreaRectangle) areaRectangles.get(0);
+		Rectangle bounds = Geometry.copy(ar0.rect);
+		for (int i = 1; i < areaRectangles.size(); i++) {
 			AreaRectangle ar = (AreaRectangle) areaRectangles.get(i);
-			if (i == 0) {
-				x = ar.rect.x;
-				y = ar.rect.y;
-			} else
-				x = Math.min(ar.rect.x, x);
-			width = Math.max(ar.rect.width, width);
-			height += ar.rect.height;
+			bounds.add(ar.rect);
 		}
-		return new Rectangle(x, y, width, height);
+		return bounds;
 	}
 
 	public boolean advanceLocator(GC gc, int wHint, Locator locator,
@@ -551,7 +548,7 @@ public class TextSegment extends ParagraphSegment {
 		int sstart = -1;
 		int sstop = -1;
 
-		if (firstRow && bounds.x + swidth > leftOffset) {
+		if (firstRow && bounds.x < leftOffset) {
 			sstart = convertOffsetToStringIndex(gc, s, bounds.x, swidth,
 					leftOffset);
 		}
@@ -662,15 +659,14 @@ public class TextSegment extends ParagraphSegment {
 				// only wrap on the first fragment if we are not at the start of a line
 				if ((i != 0 || locator.x > locator.getStartX() + (isSelectable() ? 1 : 0)) && locator.x + lineExtent.x + fragment.length > rightEdge) {
 					// overflow
-					int lineWidth = locator.x + lineExtent.x;
-					if (isSelectable())
-						lineWidth += 1;
-					int ly = locator.getBaseline(lineHeight - fm.getLeading());
-					Rectangle br = new Rectangle(isSelectable()?
-							locator.x - 1:locator.x, ly,
-							isSelectable()?lineExtent.x + 1:lineExtent.x, lineHeight - descent + 3);
-					areaRectangles
-							.add(new AreaRectangle(br, lineStart, lastLoc));
+					if ( i != 0 ) {
+						int ly = locator.getBaseline(lineHeight - fm.getLeading());
+						Rectangle br = new Rectangle(isSelectable()?
+								locator.x - 1:locator.x, ly,
+								isSelectable()?lineExtent.x + 1:lineExtent.x, lineHeight - descent + 3);
+						areaRectangles
+						.add(new AreaRectangle(br, lineStart, lastLoc));
+					}
 
 					locator.rowHeight = Math.max(locator.rowHeight,
 							lineExtent.y);
diff --git a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TitleRegion.java b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TitleRegion.java
index a910810..b75b231 100644
--- a/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TitleRegion.java
+++ b/eclipse/plugins/org.eclipse.ui.forms/src/org/eclipse/ui/internal/forms/widgets/TitleRegion.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.ui.internal.forms.widgets;
 
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
+import org.eclipse.osgi.service.environment.Constants;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DragSource;
 import org.eclipse.swt.dnd.DragSourceEffect;
@@ -197,6 +198,10 @@ public class TitleRegion extends Canvas {
 				}
 				if (titleLabel.getVisible()) {
 					int tw = width - HMARGIN * 2 - SPACING * 2;
+					String os = System.getProperty("os.name"); //$NON-NLS-1$
+					if (Constants.OS_LINUX.equalsIgnoreCase(os)) {
+						tw += 1; // See Bug 342610
+					}
 					if (bsize != null)
 						tw -= bsize.x + SPACING;
 					if (msize != null)
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
index e085a66..1da7ddd 100644
--- a/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.ui.ide.application;singleton:=true
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: %Plugin.providerName
 Bundle-Localization: plugin
 Bundle-ClassPath: e4-ide-application.jar,
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/icons/full/elcl16/configs.gif b/eclipse/plugins/org.eclipse.ui.ide.application/icons/full/elcl16/configs.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/icons/full/elcl16/usearch_obj.gif b/eclipse/plugins/org.eclipse.ui.ide.application/icons/full/elcl16/usearch_obj.gif
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
index cf494cf..2a1b319 100644
--- a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
+++ b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Map;
 import java.util.Properties;
 
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -70,6 +71,12 @@ public class IDEApplication implements IApplication, IExecutableExtension {
     private static final Integer EXIT_RELAUNCH = new Integer(24);
 
     /**
+     * A special return code that will be recognized by the PDE launcher and used to
+     * show an error dialog if the workspace is locked.
+     */
+    private static final Integer EXIT_WORKSPACE_LOCKED = new Integer(15);
+    
+    /**
      * The ID of the application plug-in
      */
 	public static final String PLUGIN_ID = "org.eclipse.ui.ide.application"; //$NON-NLS-1$
@@ -102,10 +109,11 @@ public class IDEApplication implements IApplication, IExecutableExtension {
         		shell.setImages(Dialog.getDefaultImages());
         	}
            
-            if (!checkInstanceLocation(shell)) {
+            Object instanceLocationCheck = checkInstanceLocation(shell, appContext.getArguments());
+			if (instanceLocationCheck != null) {
             	WorkbenchPlugin.unsetSplashShell(display);
                 Platform.endSplash();
-                return EXIT_OK;
+                return instanceLocationCheck;
             }
 
             // create the workbench with this advisor and run it until it exits
@@ -154,13 +162,14 @@ public class IDEApplication implements IApplication, IExecutableExtension {
     }
 
     /**
-     * Return true if a valid workspace path has been set and false otherwise.
+     * Return <code>null</code> if a valid workspace path has been set and an exit code otherwise.
      * Prompt for and set the path if possible and required.
      * 
-     * @return true if a valid instance location has been set and false
+     * @param applicationArguments the command line arguments
+     * @return <code>null</code> if a valid instance location has been set and an exit code
      *         otherwise
      */
-    private boolean checkInstanceLocation(Shell shell) {
+    private Object checkInstanceLocation(Shell shell, Map applicationArguments) {
         // -data @none was specified but an ide requires workspace
         Location instanceLoc = Platform.getInstanceLocation();
         if (instanceLoc == null) {
@@ -169,7 +178,7 @@ public class IDEApplication implements IApplication, IExecutableExtension {
                             shell,
                             IDEWorkbenchMessages.IDEApplication_workspaceMandatoryTitle,
                             IDEWorkbenchMessages.IDEApplication_workspaceMandatoryMessage);
-            return false;
+            return EXIT_OK;
         }
 
         // -data "/valid/path", workspace already set
@@ -177,7 +186,7 @@ public class IDEApplication implements IApplication, IExecutableExtension {
             // make sure the meta data version is compatible (or the user has
             // chosen to overwrite it).
             if (!checkValidWorkspace(shell, instanceLoc.getURL())) {
-				return false;
+				return EXIT_OK;
 			}
 
             // at this point its valid, so try to lock it and update the
@@ -185,7 +194,7 @@ public class IDEApplication implements IApplication, IExecutableExtension {
             try {
                 if (instanceLoc.lock()) {
                     writeWorkspaceVersion();
-                    return true;
+                    return null;
                 }
                 
                 // we failed to create the directory.  
@@ -194,6 +203,9 @@ public class IDEApplication implements IApplication, IExecutableExtension {
                 // 2. directory could not be created
                 File workspaceDirectory = new File(instanceLoc.getURL().getFile());
                 if (workspaceDirectory.exists()) {
+                	if (isDevLaunchMode(applicationArguments)) {
+                		return EXIT_WORKSPACE_LOCKED;
+                	}
 	                MessageDialog.openError(
 	                        shell,
 	                        IDEWorkbenchMessages.IDEApplication_workspaceCannotLockTitle,
@@ -213,7 +225,7 @@ public class IDEApplication implements IApplication, IExecutableExtension {
                         IDEWorkbenchMessages.InternalError,
                         e.getMessage());                
             }            
-            return false;
+            return EXIT_OK;
         }
 
         // -data @noDefault or -data not specified, prompt and set
@@ -224,7 +236,7 @@ public class IDEApplication implements IApplication, IExecutableExtension {
         while (true) {
             URL workspaceUrl = promptForWorkspace(shell, launchData, force);
             if (workspaceUrl == null) {
-				return false;
+				return EXIT_OK;
 			}
 
             // if there is an error with the first selection, then force the
@@ -237,7 +249,7 @@ public class IDEApplication implements IApplication, IExecutableExtension {
                 if (instanceLoc.setURL(workspaceUrl, true)) {
                     launchData.writePersistedData();
                     writeWorkspaceVersion();
-                    return true;
+                    return null;
                 }
             } catch (IllegalStateException e) {
                 MessageDialog
@@ -245,7 +257,7 @@ public class IDEApplication implements IApplication, IExecutableExtension {
                                 shell,
                                 IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetTitle,
                                 IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetMessage);
-                return false;
+                return EXIT_OK;
             }
 
             // by this point it has been determined that the workspace is
@@ -255,6 +267,13 @@ public class IDEApplication implements IApplication, IExecutableExtension {
         }
     }
 
+	private static boolean isDevLaunchMode(Map args) {
+		// see org.eclipse.pde.internal.core.PluginPathFinder.isDevLaunchMode()
+		if (Boolean.getBoolean("eclipse.pde.launch")) //$NON-NLS-1$
+			return true;
+		return args.containsKey("-pdelaunch"); //$NON-NLS-1$
+	}
+	
     /**
      * Open a workspace selection dialog on the argument shell, populating the
      * argument data with the user's selection. Perform first level validation
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java
index 81693f3..d343f26 100644
--- a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java
+++ b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java
@@ -17,12 +17,24 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.TreeMap;
 
+import com.ibm.icu.text.Collator;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.Version;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.core.internal.resources.Workspace;
 import org.eclipse.core.net.proxy.IProxyService;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.resources.WorkspaceJob;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IAdaptable;
@@ -36,6 +48,12 @@ import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.ProgressMonitorWrapper;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -45,14 +63,7 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.util.Policy;
 import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.application.IWorkbenchConfigurer;
 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
@@ -74,11 +85,6 @@ import org.eclipse.ui.internal.ide.undo.WorkspaceUndoMonitor;
 import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
 import org.eclipse.ui.progress.IProgressService;
 import org.eclipse.ui.statushandlers.AbstractStatusHandler;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.Version;
-
-import com.ibm.icu.text.Collator;
 
 /**
  * IDE-specified workbench advisor which configures the workbench for use as an
@@ -659,6 +665,10 @@ public class IDEWorkbenchAdvisor extends WorkbenchAdvisor {
 		// //$NON-NLS-1$
 		// icons
 
+		// View icons
+		final String PATH_EVIEW= ICONS_PATH + "eview16/"; //$NON-NLS-1$
+
+
 		Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);
 
 		declareWorkbenchImage(ideBundle,
@@ -733,6 +743,8 @@ public class IDEWorkbenchAdvisor extends WorkbenchAdvisor {
 		declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OPEN_MARKER,
 				PATH_ELOCALTOOL + "gotoobj_tsk.gif", true); //$NON-NLS-1$
 
+
+		// Quick fix icons
 		declareWorkbenchImage(ideBundle,
 				IDEInternalWorkbenchImages.IMG_ELCL_QUICK_FIX_ENABLED,
 				PATH_ELOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$
@@ -741,6 +753,14 @@ public class IDEWorkbenchAdvisor extends WorkbenchAdvisor {
 				IDEInternalWorkbenchImages.IMG_DLCL_QUICK_FIX_DISABLED,
 				PATH_DLOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$
 
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_FIXABLE_WARNING,
+				PATH_OBJECT + "quickfix_warning_obj.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_FIXABLE_ERROR,
+				PATH_OBJECT + "quickfix_error_obj.gif", true); //$NON-NLS-1$
+
+
 		// task objects
 		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_HPRIO_TSK,
 		// PATH_OBJECT+"hprio_tsk.gif");
@@ -785,7 +805,17 @@ public class IDEWorkbenchAdvisor extends WorkbenchAdvisor {
 		declareWorkbenchImage(ideBundle,
 				IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEM_CATEGORY,
 				PATH_ETOOL + "problem_category.gif", true); //$NON-NLS-1$
-	
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW,
+				PATH_EVIEW + "problems_view.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW_ERROR,
+				PATH_EVIEW + "problems_view_error.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW_WARNING,
+				PATH_EVIEW + "problems_view_warning.gif", true); //$NON-NLS-1$
+
 		// synchronization indicator objects
 		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_WBET_STAT,
 		// PATH_OVERLAY+"wbet_stat.gif");
diff --git a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java
index be076bf..356e425 100644
--- a/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java
+++ b/eclipse/plugins/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchWindowAdvisor.java
@@ -17,12 +17,13 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProduct;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
-
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -42,8 +43,10 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IPageListener;
 import org.eclipse.ui.IPartListener2;
 import org.eclipse.ui.IPerspectiveDescriptor;
@@ -56,6 +59,7 @@ import org.eclipse.ui.IWorkbenchPartReference;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PerspectiveAdapter;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.WorkbenchException;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
@@ -63,6 +67,7 @@ import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.IActionBarConfigurer;
 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+import org.eclipse.ui.ide.FileStoreEditorInput;
 import org.eclipse.ui.internal.ide.AboutInfo;
 import org.eclipse.ui.internal.ide.EditorAreaDropAdapter;
 import org.eclipse.ui.internal.ide.IDEInternalPreferences;
@@ -70,6 +75,8 @@ import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.ide.WorkbenchActionBuilder;
 import org.eclipse.ui.internal.ide.dialogs.WelcomeEditorInput;
+import org.eclipse.ui.internal.tweaklets.TitlePathUpdater;
+import org.eclipse.ui.internal.tweaklets.Tweaklets;
 import org.eclipse.ui.part.EditorInputTransfer;
 import org.eclipse.ui.part.MarkerTransfer;
 import org.eclipse.ui.part.ResourceTransfer;
@@ -114,6 +121,7 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
 	 */
 	private IPropertyChangeListener propertyChangeListener;
 
+	private TitlePathUpdater titlePathUpdater;
 
 	/**
 	 * Crates a new IDE workbench window advisor.
@@ -127,6 +135,7 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
 			IWorkbenchWindowConfigurer configurer) {
 		super(configurer);
 		this.wbAdvisor = wbAdvisor;
+		titlePathUpdater = (TitlePathUpdater) Tweaklets.get(TitlePathUpdater.KEY);
 	}
 
 	/*
@@ -179,6 +188,17 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
 				.getBoolean(IDEInternalPreferences.EXIT_PROMPT_ON_CLOSE_LAST_WINDOW);
 
 		if (promptOnExit) {
+			if (parentShell == null) {
+				IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+				if (workbenchWindow != null) {
+					parentShell = workbenchWindow.getShell();
+				}
+			}
+			if (parentShell != null) {
+				parentShell.setMinimized(false);
+				parentShell.forceActive();
+			}
+			
 			String message;
 
 			String productName = null;
@@ -239,7 +259,7 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
 
 		hookTitleUpdateListeners(configurer);
 	}
-
+	
 	/**
 	 * Hooks the listeners needed on the window
 	 * 
@@ -403,6 +423,34 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
 		if (!newTitle.equals(oldTitle)) {
 			configurer.setTitle(newTitle);
 		}
+		setTitlePath();
+	}
+
+	private void setTitlePath() {
+
+		String titlePath = null;
+		if (lastActiveEditor != null) {
+			IEditorInput editorInput = lastActiveEditor.getEditorInput();
+			if (editorInput instanceof IFileEditorInput) {
+				titlePath = computeTitlePath((IFileEditorInput) editorInput);
+			} else if (editorInput instanceof FileStoreEditorInput) {
+				titlePath = computeTitlePath((FileStoreEditorInput) editorInput);
+			}
+		}
+		titlePathUpdater.updateTitlePath(getWindowConfigurer().getWindow().getShell(), titlePath);
+	}
+
+	private String computeTitlePath(FileStoreEditorInput editorInput) {
+		return editorInput.getURI().getPath().toString();
+	}
+
+	private String computeTitlePath(IFileEditorInput editorInput) {
+		IFile file = editorInput.getFile();
+		IPath location = file.getLocation();
+		if (location != null) {
+			return location.toFile().toString();
+		}
+		return null;
 	}
 
 	/**
@@ -495,6 +543,7 @@ public class IDEWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
 			page.openEditor(new WelcomeEditorInput(
 					welcomePerspectiveInfos[index]), WELCOME_EDITOR_ID, true);
 		}
+		cleanUpEditorArea();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF
index 4ee49d0..020f7e7 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.ide/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.ui.ide; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: e4-ide.jar,
  .
 Bundle-Activator: org.eclipse.ui.internal.ide.IDEWorkbenchPlugin
@@ -45,11 +45,12 @@ Export-Package: org.eclipse.ui,
  org.eclipse.ui.views.tasklist,
  org.eclipse.ui.wizards.datatransfer,
  org.eclipse.ui.wizards.newresource
-Require-Bundle: org.eclipse.core.resources;bundle-version="[3.6.0,4.0.0)";resolution:=optional,
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.7.0,4.0.0)";resolution:=optional,
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.help;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.ui.workbench;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.ui.views;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui.forms;bundle-version="[3.3.0,4.0.0)";resolution:=optional,
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java
index ae497a0..84b1a44 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,18 +14,14 @@
 package org.eclipse.ui.actions;
 
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.IShellProvider;
-
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.ide.undo.CreateMarkersOperation;
@@ -125,37 +121,23 @@ public class AddBookmarkAction extends SelectionListenerAction {
 	 * (non-Javadoc) Method declared on IAction.
 	 */
 	public void run() {
-		IStructuredSelection selection = getStructuredSelection();
-		for (Iterator i = selection.iterator(); i.hasNext();) {
-			Object o = i.next();
-			IFile file = null;
-			if (o instanceof IFile) {
-				file = (IFile) o;
-			} else if (o instanceof IAdaptable) {
-				Object resource = ((IAdaptable) o).getAdapter(IResource.class);
-				if (resource instanceof IFile) {
-					file = (IFile) resource;
-				}
-			}
-			if (file != null) {
-				if (promptForName) {
-					BookmarkPropertiesDialog dialog = new BookmarkPropertiesDialog(
-							shellProvider.getShell());
-					dialog.setResource(file);
-					dialog.open();
-				} else {
-					Map attrs = new HashMap();
-					attrs.put(IMarker.MESSAGE, file.getName());
-					CreateMarkersOperation op = new CreateMarkersOperation(
-							IMarker.BOOKMARK, attrs, file,
-							BookmarkMessages.CreateBookmark_undoText);
-					try {
-						PlatformUI.getWorkbench().getOperationSupport()
-								.getOperationHistory().execute(op, null,
-										WorkspaceUndoUtil.getUIInfoAdapter(shellProvider.getShell()));
-					} catch (ExecutionException e) {
-						IDEWorkbenchPlugin.log(null, e); // We don't care
-					}
+		if (getSelectedResources().isEmpty())
+			return;
+
+		IResource resource= (IResource)getSelectedResources().get(0);
+		if (resource != null) {
+			if (promptForName) {
+				BookmarkPropertiesDialog dialog= new BookmarkPropertiesDialog(shellProvider.getShell());
+				dialog.setResource(resource);
+				dialog.open();
+			} else {
+				Map attrs= new HashMap();
+				attrs.put(IMarker.MESSAGE, resource.getName());
+				CreateMarkersOperation op= new CreateMarkersOperation(IMarker.BOOKMARK, attrs, resource, BookmarkMessages.CreateBookmark_undoText);
+				try {
+					PlatformUI.getWorkbench().getOperationSupport().getOperationHistory().execute(op, null, WorkspaceUndoUtil.getUIInfoAdapter(shellProvider.getShell()));
+				} catch (ExecutionException e) {
+					IDEWorkbenchPlugin.log(null, e); // We don't care
 				}
 			}
 		}
@@ -169,7 +151,6 @@ public class AddBookmarkAction extends SelectionListenerAction {
 	 */
 	protected boolean updateSelection(IStructuredSelection selection) {
 		// @issue typed selections
-		return super.updateSelection(selection) && !selection.isEmpty()
-				&& selectionIsOfType(IResource.FILE);
+		return super.updateSelection(selection) && getSelectedResources().size() == 1;
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java
index 432e849..34dbd48 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,24 +8,31 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Anton Leherbauer (Wind River) -  [296800] UI build actions should not lock the workspace
+ *     Broadcom Corporation - [335960]  Update BuildAction to use new Workspace Build Configurations API
  *******************************************************************************/
 package org.eclipse.ui.actions;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
+import org.eclipse.core.resources.IBuildConfiguration;
 import org.eclipse.core.resources.ICommand;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
@@ -38,9 +45,11 @@ import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.ide.IIDEHelpContextIds;
 import org.eclipse.ui.internal.ide.actions.BuildUtilities;
+import org.eclipse.ui.progress.IProgressConstants2;
 
 /**
- * Standard actions for full and incremental builds of the selected project(s).
+ * Standard actions for full and incremental builds of the selected project(s)
+ * and their references project build configurations.
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
@@ -62,11 +71,17 @@ public class BuildAction extends WorkspaceAction {
     private int buildType;
 
     /**
-     * The list of IProjects to build (computed lazily).
+     * The list of IProjects to build (computed lazily). This is computed from the
+     * list of project build configurations that are to be built.
      */
     private List projectsToBuild = null;
 
     /**
+     * The list of {@link IBuildConfiguration} to build (computed lazily).
+     */
+    private List/*<IBuildConfiguration>*/ projectConfigsToBuild = null;
+
+    /**
      * Creates a new action of the appropriate type. The action id is 
      * <code>ID_BUILD</code> for incremental builds and <code>ID_REBUILD_ALL</code>
      * for full builds.
@@ -121,26 +136,6 @@ public class BuildAction extends WorkspaceAction {
         this.buildType = type;
 	}
 
-    /**
-     * Adds the given project and all of its prerequisities, transitively,
-     * to the provided set.
-     */
-    private void addAllProjects(IProject project, HashSet projects) {
-        if (project == null || !project.isAccessible()
-                || projects.contains(project)) {
-			return;
-		}
-        projects.add(project);
-        try {
-            IProject[] preReqs = project.getReferencedProjects();
-            for (int i = 0; i < preReqs.length; i++) {
-				addAllProjects(preReqs[i], projects);
-			}
-        } catch (CoreException e) {
-            //ignore inaccessible projects
-        }
-    }
-
     /* (non-Javadoc)
      * Method declared on WorkspaceAction.
      */
@@ -169,27 +164,47 @@ public class BuildAction extends WorkspaceAction {
         return IDEWorkbenchMessages.BuildAction_problemTitle;
     }
 
-    /**
-     * Returns the projects to build.
-     * This contains the set of projects which have builders, across all selected resources.
-     */
-    List getProjectsToBuild() {
-        if (projectsToBuild == null) {
-            projectsToBuild = new ArrayList(3);
-            for (Iterator i = getSelectedResources().iterator(); i.hasNext();) {
-                IResource resource = (IResource) i.next();
-                IProject project = resource.getProject();
-                if (project != null) {
-                    if (!projectsToBuild.contains(project)) {
-                        if (hasBuilder(project)) {
-                            projectsToBuild.add(project);
-                        }
-                    }
-                }
-            }
-        }
-        return projectsToBuild;
-    }
+	/**
+	 * Returns the projects to build.
+	 * This contains the set of projects which have builders, across all selected resources.
+	 */
+	List getProjectsToBuild() {
+		if (projectsToBuild == null) {
+			Set projects = new HashSet(3);
+			List configurations = getBuildConfigurationsToBuild();
+			for (Iterator it = configurations.iterator(); it.hasNext();) {
+				projects.add(((IBuildConfiguration) it.next()).getProject());
+			}
+			projectsToBuild = new ArrayList(projects);
+		}
+		return projectsToBuild;
+	}
+
+	/**
+	 * This collection of project build configs, derived from the selected 
+	 * resources, is passed to the workspace for building.  The Workspace
+	 * is responsible for resolving references.
+	 * @return List of project build configurations to build.
+	 * @since 3.7
+	 */
+	protected List getBuildConfigurationsToBuild() {
+		if (projectConfigsToBuild == null) {
+			Set configs = new HashSet(3);
+			for (Iterator i = getSelectedResources().iterator(); i.hasNext();) {
+				IResource resource = (IResource) i.next();
+				IProject project = resource.getProject();
+				if (project != null && hasBuilder(project)) {
+					try {
+						configs.add(project.getActiveBuildConfig());
+					} catch(CoreException e) {
+						// Ignore project
+					}
+				}
+			}
+			projectConfigsToBuild = new ArrayList(configs);
+		}
+		return projectConfigsToBuild;
+	}
 
     /**
      * Returns whether there are builders configured on the given project.
@@ -215,14 +230,6 @@ public class BuildAction extends WorkspaceAction {
     }
 
     /* (non-Javadoc)
-     * Method declared on WorkspaceAction.
-     */
-    protected void invokeOperation(IResource resource, IProgressMonitor monitor)
-            throws CoreException {
-        ((IProject) resource).build(buildType, monitor);
-    }
-    
-    /* (non-Javadoc)
      * Method declared on Action
      */
     public boolean isEnabled() {
@@ -247,69 +254,70 @@ public class BuildAction extends WorkspaceAction {
     }
 
     /* (non-Javadoc)
-     * Method declared on WorkspaceAction.
-     *
-     * Change the order of the resources so that
-     * it matches the build order. Closed and
-     * non existant projects are eliminated. Also,
-     * any projects in cycles are eliminated.
-     */
-    List pruneResources(List resourceCollection) {
-        //recursively compute project prerequisites
-        HashSet toBuild = new HashSet();
-        for (Iterator it = resourceCollection.iterator(); it.hasNext();) {
-			addAllProjects((IProject) it.next(), toBuild);
-		}
-
-        // Optimize...
-        if (toBuild.size() < 2) {
-			return resourceCollection;
-		}
-
-        // Try the workspace's description build order if specified
-        String[] orderedNames = ResourcesPlugin.getWorkspace().getDescription()
-                .getBuildOrder();
-        if (orderedNames != null) {
-            List orderedProjects = new ArrayList(toBuild.size());
-            IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-            for (int i = 0; i < orderedNames.length; i++) {
-                IProject handle = root.getProject(orderedNames[i]);
-                if (toBuild.contains(handle)) {
-                    orderedProjects.add(handle);
-                    toBuild.remove(handle);
-                }
-            }
-            //Add anything not specified before we return
-            orderedProjects.addAll(toBuild);
-            return orderedProjects;
-        }
-
-        // Try the project prerequisite order then
-        IProject[] projects = new IProject[toBuild.size()];
-        projects = (IProject[]) toBuild.toArray(projects);
-        IWorkspace.ProjectOrder po = ResourcesPlugin.getWorkspace()
-                .computeProjectOrder(projects);
-        ArrayList orderedProjects = new ArrayList();
-        orderedProjects.addAll(Arrays.asList(po.projects));
-        return orderedProjects;
-    }
-
-    /* (non-Javadoc)
      * Method declared on IAction; overrides method on WorkspaceAction.
      * This override allows the user to save the contents of selected
      * open editors so that the updated contents will be used for building.
+     * The build is run as a background job.
      */
     public void run() {
-	    List projects = getProjectsToBuild();
-	    if (projects == null || projects.isEmpty()) {
+	    final List buildConfigurations = getBuildConfigurationsToBuild();
+	    if (buildConfigurations == null || buildConfigurations.isEmpty())
 			return;
-		}
 
 	    // Save all resources prior to doing build
-        BuildUtilities.saveEditors(projects);
+        BuildUtilities.saveEditors(getProjectsToBuild());
         runInBackground(null, ResourcesPlugin.FAMILY_MANUAL_BUILD);
     }
 
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.ui.actions.WorkspaceAction#runInBackground(org.eclipse.core.runtime.jobs.ISchedulingRule, java.lang.Object[])
+     */
+    public void runInBackground(ISchedulingRule rule, Object[] jobFamilies) {
+        // Get immutable copies of the build settings
+		final int kind = buildType;
+	    List buildConfigurations = getBuildConfigurationsToBuild();
+	    if (buildConfigurations == null || buildConfigurations.isEmpty())
+			return;
+	    final IBuildConfiguration[] configs = (IBuildConfiguration[])buildConfigurations.toArray(new IBuildConfiguration[buildConfigurations.size()]);
+
+		// Schedule a Workspace Job to perform the build
+		Job job = new WorkspaceJob(removeMnemonics(getText())) {
+			/*
+			 * (non-Javadoc)
+			 * @see Job#belongsTo(Object)
+			 */
+			public boolean belongsTo(Object family) {
+				return ResourcesPlugin.FAMILY_MANUAL_BUILD.equals(family);
+			}
+
+			/*
+			 * (non-Javadoc)
+			 * @see WorkspaceJob#runInWorkspace(IProgressMonitor)
+			 */
+			public IStatus runInWorkspace(IProgressMonitor monitor) {
+				IStatus status = null;
+				monitor.beginTask("", 10000); //$NON-NLS-1$
+				monitor.setTaskName(getOperationMessage());
+				try {
+					// Backwards compatibility: check shouldPerformResourcePruning(). 
+					// Previously if this returned true, the full reference graph is built, otherwise just build the selected configurations
+					ResourcesPlugin.getWorkspace().build(configs, kind, shouldPerformResourcePruning(), new SubProgressMonitor(monitor, 10000));
+				} catch (CoreException e) {
+					status = e.getStatus();
+				}
+				if (monitor.isCanceled()) {
+					throw new OperationCanceledException();
+				}
+				monitor.done();
+				return status == null ? Status.OK_STATUS : status;
+			}
+		};
+		job.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
+		job.setUser(true);
+		job.schedule();
+    }
+
     /* (non-Javadoc)
      * Method declared on WorkspaceAction.
      */
@@ -323,6 +331,7 @@ public class BuildAction extends WorkspaceAction {
      * enabled only if all of the selected resources have buildable projects.
      */
     protected boolean updateSelection(IStructuredSelection s) {
+        projectConfigsToBuild = null;
         projectsToBuild = null;
         IProject[] projects = (IProject[]) getProjectsToBuild().toArray(new IProject[0]);
         return BuildUtilities.isEnabled(projects, IncrementalProjectBuilder.INCREMENTAL_BUILD);
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java
index d98d674..67fb8de 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,6 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -36,8 +35,6 @@ import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.FontMetrics;
-import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -149,12 +146,8 @@ public class DeleteResourceAction extends SelectionListenerAction {
 			detailsLabel.setText(IDEWorkbenchMessages.DeleteResourceAction_deleteContentsDetails);
 			detailsLabel.setFont(parent.getFont());
 			// indent the explanatory label
-			GC gc = new GC(detailsLabel);
-			gc.setFont(detailsLabel.getParent().getFont());
-			FontMetrics fontMetrics = gc.getFontMetrics();
-			gc.dispose();
 			GridData data = new GridData();
-			data.horizontalIndent = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.INDENT);
+			data.horizontalIndent = IDialogConstants.INDENT;
 			detailsLabel.setLayoutData(data);
 			// add a listener so that clicking on the label selects the
 			// corresponding radio button.
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java
index c6daa30..a64a7d1 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java
@@ -34,6 +34,7 @@ import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.ide.IIDEHelpContextIds;
 import org.eclipse.ui.internal.ide.actions.BuildUtilities;
+import org.eclipse.ui.progress.IProgressConstants2;
 import org.eclipse.ui.statushandlers.StatusManager;
 
 /**
@@ -196,6 +197,7 @@ public class GlobalBuildAction extends Action implements
             }
         };
         buildJob.setUser(true);
+        buildJob.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
         buildJob.schedule();
     }
 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java
index 60e56a1..d437396 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java
@@ -21,9 +21,12 @@ import org.eclipse.jface.action.IContributionManager;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
+import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.actions.NewWizardShortcutAction;
 import org.eclipse.ui.internal.dialogs.WorkbenchWizardElement;
 import org.eclipse.ui.internal.registry.WizardsRegistryReader;
+import org.eclipse.ui.wizards.IWizardCategory;
 import org.eclipse.ui.wizards.IWizardDescriptor;
 
 /**
@@ -117,9 +120,36 @@ public class NewWizardMenu extends BaseNewWizardMenu {
      * 
      * @return boolean
      */
-    private boolean hasExamples() {
-        return registryHasCategory(WizardsRegistryReader.FULL_EXAMPLES_WIZARD_CATEGORY);
-    }
+	private boolean hasExamples() {
+		boolean hasCategory = registryHasCategory(WizardsRegistryReader.FULL_EXAMPLES_WIZARD_CATEGORY);
+		if (hasCategory) {
+			IWizardCategory exampleCategory = WorkbenchPlugin
+					.getDefault()
+					.getNewWizardRegistry()
+					.findCategory(
+							WizardsRegistryReader.FULL_EXAMPLES_WIZARD_CATEGORY);
+			return hasWizards(exampleCategory);
+		}
+		return false;
+	}
+	
+	private boolean hasWizards(IWizardCategory category) {
+		IWizardDescriptor[] wizards = category.getWizards();
+		if (wizards.length>0) {
+			for (int i = 0; i < wizards.length; i++) {
+				if (!WorkbenchActivityHelper.filterItem(wizards[i])) {
+					return true;
+				}
+			}
+		}
+		IWizardCategory[] categories = category.getCategories();
+		for (int i = 0; i < categories.length; i++) {
+			if (hasWizards(categories[i])) {
+				return true;
+			}
+		}
+		return false;
+	}
 
     /* (non-Javadoc)
      * @see org.eclipse.ui.actions.BaseNewWizardMenu#addItems(org.eclipse.jface.action.IContributionManager)
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java
index 317fe1e..609b090 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -171,7 +171,7 @@ public class OpenResourceAction extends WorkspaceAction implements IResourceChan
 			return false;
 		}
 		String message = IDEWorkbenchMessages.OpenResourceAction_openRequiredProjects;
-		MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoCancelQuestion(getShell(), IDEWorkbenchMessages.Question, message, null, false, store, key);
+		MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoQuestion(getShell(), IDEWorkbenchMessages.Question, message, null, false, store, key);
 		int result = dialog.getReturnCode();
 		// the result is equal to SWT.DEFAULT if the user uses the 'esc' key to close the dialog
 		if (result == Window.CANCEL || result == SWT.DEFAULT) {
@@ -225,6 +225,7 @@ public class OpenResourceAction extends WorkspaceAction implements IResourceChan
 		Job job = new WorkspaceJob(removeMnemonics(getText())) {
 			private boolean openProjectReferences = true;
 			private boolean hasPrompted = false;
+			private boolean canceled = false;
 			/**
 			 * Opens a project along with all projects it references
 			 */
@@ -245,14 +246,19 @@ public class OpenResourceAction extends WorkspaceAction implements IResourceChan
 					if (openProjectReferences && hasOtherClosedProjects()) {
 						Display.getDefault().syncExec(new Runnable() {
 							public void run() {
+								try {
 								openProjectReferences = promptToOpenWithReferences();
+								} catch (OperationCanceledException e) {
+									canceled = true;
+								}
 								//remember that we have prompted to avoid repeating the analysis
 								hasPrompted = true;
 							}
 						});
+						if (canceled)
+							throw new OperationCanceledException();
 					}
 				}
-
 				if (openProjectReferences) {
 					for (int i = 0; i < references.length; i++) {
 						doOpenWithReferences(references[i], monitor);
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java
index 5f14daa..a3131b3 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java
@@ -16,6 +16,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.resources.WorkspaceJob;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
@@ -38,6 +39,7 @@ import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.ide.StatusUtil;
 import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
+import org.eclipse.ui.progress.IProgressConstants2;
 
 /**
  * The abstract superclass for actions which invoke commands implemented in
@@ -486,6 +488,8 @@ public abstract class WorkspaceAction extends SelectionListenerAction {
 		if (rule != null) {
 			job.setRule(rule);
 		}
+		if(job.belongsTo(ResourcesPlugin.FAMILY_MANUAL_BUILD))
+			job.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
 		job.setUser(true);
 		job.schedule();
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
index ab07aea..ea78f7a 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -141,8 +141,6 @@ public class FilteredResourcesSelectionDialog extends
 		setSelectionHistory(new ResourceSelectionHistory());
 
 		setTitle(IDEWorkbenchMessages.OpenResourceDialog_title);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell,
-				IIDEHelpContextIds.OPEN_RESOURCE_DIALOG);
 
 		/*
 		 * Allow location of paths relative to a searchContainer, which is
@@ -189,6 +187,16 @@ public class FilteredResourcesSelectionDialog extends
 	/*
 	 * (non-Javadoc)
 	 * 
+	 * @see org.eclipse.ui.dialogs.SelectionStatusDialog#configureShell(org.eclipse.swt.widgets.Shell)
+	 */
+	protected void configureShell(Shell shell) {
+		super.configureShell(shell);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IIDEHelpContextIds.OPEN_RESOURCE_DIALOG);
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.eclipse.ui.dialogs.SelectionDialog#setTitle(java.lang.String)
 	 */
 	public void setTitle(String title) {
@@ -968,7 +976,7 @@ public class FilteredResourcesSelectionDialog extends
 			int lastPatternDot = filenamePattern.lastIndexOf('.');
 			if (lastPatternDot != -1) {
 				char last = filenamePattern.charAt(filenamePattern.length() - 1);
-				if (last != ' ' && last != '<') {
+				if (last != ' ' && last != '<' && getMatchRule() != SearchPattern.RULE_EXACT_MATCH) {
 					namePattern = new SearchPattern();
 					namePattern.setPattern(filenamePattern.substring(0, lastPatternDot));
 					extensionPattern = new SearchPattern();
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java
index b9d30df..b97ea8b 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,6 +30,7 @@ import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.osgi.util.NLS;
@@ -627,7 +628,7 @@ public abstract class WizardExportPage extends WizardDataTransferPage {
 
         ListSelectionDialog dialog = new ListSelectionDialog(getContainer()
                 .getShell(), editorMappings,
-                FileEditorMappingContentProvider.INSTANCE,
+                ArrayContentProvider.getInstance(),
                 FileEditorMappingLabelProvider.INSTANCE, IDEWorkbenchMessages.WizardExportPage_selectionDialogMessage){
         	protected int getShellStyle() {
         		return super.getShellStyle() | SWT.SHEET;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java
index 6dac88e..f129dfe 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -86,9 +86,7 @@ public class WizardNewProjectReferencePage extends WizardPage {
         referenceProjectsViewer = CheckboxTableViewer.newCheckList(composite,
                 SWT.BORDER);
         referenceProjectsViewer.getTable().setFont(composite.getFont());
-        GridData data = new GridData();
-        data.horizontalAlignment = GridData.FILL;
-        data.grabExcessHorizontalSpace = true;
+        GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
 
         data.heightHint = getDefaultFontHeight(referenceProjectsViewer
                 .getTable(), PROJECT_LIST_MULTIPLIER);
diff --git a/eclipse/plugins/org.eclipse.ui.ide/icons/full/dtool16/newprj_wiz.gif b/eclipse/plugins/org.eclipse.ui.ide/icons/full/dtool16/newprj_wiz.gif
index 5b4b24c..e05f3bd 100644
Binary files a/eclipse/plugins/org.eclipse.ui.ide/icons/full/dtool16/newprj_wiz.gif and b/eclipse/plugins/org.eclipse.ui.ide/icons/full/dtool16/newprj_wiz.gif differ
diff --git a/eclipse/plugins/org.eclipse.ui.ide/icons/full/etool16/newprj_wiz.gif b/eclipse/plugins/org.eclipse.ui.ide/icons/full/etool16/newprj_wiz.gif
index fbbac0f..97d4cb0 100644
Binary files a/eclipse/plugins/org.eclipse.ui.ide/icons/full/etool16/newprj_wiz.gif and b/eclipse/plugins/org.eclipse.ui.ide/icons/full/etool16/newprj_wiz.gif differ
diff --git a/eclipse/plugins/org.eclipse.ui.ide/icons/full/eview16/problems_view_error.gif b/eclipse/plugins/org.eclipse.ui.ide/icons/full/eview16/problems_view_error.gif
new file mode 100644
index 0000000..b90bc75
Binary files /dev/null and b/eclipse/plugins/org.eclipse.ui.ide/icons/full/eview16/problems_view_error.gif differ
diff --git a/eclipse/plugins/org.eclipse.ui.ide/icons/full/eview16/problems_view_warning.gif b/eclipse/plugins/org.eclipse.ui.ide/icons/full/eview16/problems_view_warning.gif
new file mode 100644
index 0000000..5f21b92
Binary files /dev/null and b/eclipse/plugins/org.eclipse.ui.ide/icons/full/eview16/problems_view_warning.gif differ
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_error_obj.gif b/eclipse/plugins/org.eclipse.ui.ide/icons/full/obj16/quickfix_error_obj.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_error_obj.gif
copy to eclipse/plugins/org.eclipse.ui.ide/icons/full/obj16/quickfix_error_obj.gif
diff --git a/eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_warning_obj.gif b/eclipse/plugins/org.eclipse.ui.ide/icons/full/obj16/quickfix_warning_obj.gif
similarity index 100%
copy from eclipse/plugins/org.eclipse.jdt.ui/icons/full/obj16/quickfix_warning_obj.gif
copy to eclipse/plugins/org.eclipse.ui.ide/icons/full/obj16/quickfix_warning_obj.gif
diff --git a/eclipse/plugins/org.eclipse.ui.ide/plugin.properties b/eclipse/plugins/org.eclipse.ui.ide/plugin.properties
index 66c79b4..4c7e813 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/plugin.properties
+++ b/eclipse/plugins/org.eclipse.ui.ide/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -101,7 +101,7 @@ DecoratorSpecificResourceFilterType.label = Containers with Resource Filters
 DecoratorSpecificResourceFilterType.description = Displays an icon based on the presence of resource filters on a container.
 OpenWorkspaceFileAction.label = Open Reso&urce...
 SelectWorkingSetsAction.label = &Working Sets
-SelectWorkingSetsAction.tooltip = Modify workbench working sets
+SelectWorkingSetsAction.tooltip = Modify window working set
 
 AddToWorkingSetAction.label = Add To Working Se&t
 AddToWorkingSetAction.tooltip = Add the selected elements to a working set
@@ -134,7 +134,7 @@ command.configureFilters.description = Configure the filters to apply to the mar
 command.configureFilters.name = Configure Contents...
 command.configureFilters.mnemonic=C
 command.configureColumns.description = Configure the columns in the markers view
-command.configureColumns.name = Columns...
+command.configureColumns.name = Configure Columns...
 command.configureColumns.mnemonic=l
 command.correctionAssistProposals.description = Suggest possible fixes for a problem
 command.correctionAssistProposals.name = Quick Fix
@@ -202,6 +202,9 @@ commandParameter.showResourceByPath.resourcePath.name= Resource Path
 KeyBindingActionSet.label = Keyboard Shortcuts
 KeyBindingActionSet.showKeyAssist.label = &Key Assist...
 
+PreferenceKeywords.TextFont = text font
+PreferenceKeywords.TextEditorFont = text editor font
+PreferenceKeywords.EditorFont = editor font
 PreferenceKeywords.Editing = editing
 PreferenceKeywords.Appearance = appearance
 PreferenceKeywords.ColorLabels = color label
@@ -213,7 +216,7 @@ PreferenceKeywords.Editors = editors
 PreferenceKeywords.Pin = pin
 PreferenceKeywords.Close = close
 PreferenceKeywords.Dirty = dirty
-PreferenceKeywords.Keys = binding command scheme emacs
+PreferenceKeywords.Keys = binding command scheme emacs shortcut
 PreferenceKeywords.Perspectives = open view switch
 PreferenceKeywords.StartupAndShutdown = workbench plug-in plugin refresh
 PreferenceKeywords.Workspace = build refresh save automatically open project line delimiter
diff --git a/eclipse/plugins/org.eclipse.ui.ide/plugin.xml b/eclipse/plugins/org.eclipse.ui.ide/plugin.xml
index 3c81979..2032c8e 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/plugin.xml
+++ b/eclipse/plugins/org.eclipse.ui.ide/plugin.xml
@@ -439,6 +439,15 @@
             id="org.eclipse.ui.ide.themes"
             label="%PreferenceKeywords.Themes"/>
       <keyword
+            id="org.eclipse.ui.ide.textFont"
+            label="%PreferenceKeywords.TextFont"/>
+      <keyword
+            id="org.eclipse.ui.ide.textEditorFont"
+            label="%PreferenceKeywords.TextEditorFont"/>
+      <keyword
+            id="org.eclipse.ui.ide.editorFont"
+            label="%PreferenceKeywords.EditorFont"/>
+      <keyword
             id="org.eclipse.ui.ide.apearancepage"
             label="%PreferenceKeywords.AppearancePage"/>
       <keyword
@@ -572,6 +581,9 @@
             id="org.eclipse.ui.preferencePages.ColorsAndFonts">
          <keywordReference id="org.eclipse.ui.ide.appearance"/>
          <keywordReference id="org.eclipse.ui.ide.themes"/>
+         <keywordReference id="org.eclipse.ui.ide.textFont"/>
+         <keywordReference id="org.eclipse.ui.ide.textEditorFont"/>
+         <keywordReference id="org.eclipse.ui.ide.editorFont"/>
       </page>
       <page
             name="%PreferencePages.Decorators"
@@ -690,6 +702,10 @@
             id="org.eclipse.ui.propertypages.project.reference"
             name="%PropertyPages.project.reference"
             >
+         <filter
+               name="open"
+               value="true">
+         </filter>
          <enabledWhen>
             <adapt type="org.eclipse.core.resources.IProject"/>
          </enabledWhen>
@@ -700,9 +716,27 @@
             id="org.eclipse.ui.propertypages.resource.filters"
             name="%PropertyPages.resource.filters">
          <enabledWhen>
-            <adapt type="org.eclipse.core.resources.IResource">
-            	<instanceof value="org.eclipse.core.resources.IContainer"/>
-            </adapt>
+            <or>
+               <adapt
+                     type="org.eclipse.core.resources.IResource">
+                  <and>
+                     <instanceof
+                           value="org.eclipse.core.resources.IContainer">
+                     </instanceof>
+                     <not>
+                        <instanceof
+                              value="org.eclipse.core.resources.IProject">
+                        </instanceof>
+                     </not>
+                  </and>
+               </adapt>
+               <adapt
+                     type="org.eclipse.core.resources.IProject">
+                  <test
+                        property="org.eclipse.core.resources.open">
+                  </test>
+               </adapt>
+            </or>
          </enabledWhen>
       </page>
       <page
@@ -729,6 +763,10 @@
             class="org.eclipse.ui.internal.ide.dialogs.ProjectLinkedResourcePage"
             id="org.eclipse.ui.propertypages.project.linkedResourcesPage"
             name="%linked_resources">
+         <filter
+               name="open"
+               value="true">
+         </filter>
          <enabledWhen>
             <adapt type="org.eclipse.core.resources.IProject"/>
          </enabledWhen>
@@ -1838,16 +1876,6 @@
                mnemonic="%command.configureColumns.mnemonic"
                style="push">
          </command>
-         <command
-               commandId="org.eclipse.ui.window.preferences"
-               label="%command.preferences.label"
-               mnemonic="%command.preferences.mnemonic"
-               style="push">
-            <parameter
-                  name="preferencePageId"
-                  value="org.eclipse.ui.ide.markers">
-            </parameter>
-         </command>
       </menuContribution>
       <menuContribution
             locationURI="menu:org.eclipse.ui.views.TaskList">
@@ -1901,16 +1929,6 @@
                mnemonic="%command.configureColumns.mnemonic"
                style="push">
          </command>
-         <command
-               commandId="org.eclipse.ui.window.preferences"
-               label="%command.preferences.label"
-               mnemonic="%command.preferences.mnemonic"
-               style="push">
-            <parameter
-                  name="preferencePageId"
-                  value="org.eclipse.ui.ide.markers">
-            </parameter>
-         </command>
       </menuContribution>
       <menuContribution
             locationURI="menu:org.eclipse.ui.views.BookmarkView">
@@ -1974,16 +1992,6 @@
                mnemonic="%command.configureColumns.mnemonic"
                style="push">
          </command>
-         <command
-               commandId="org.eclipse.ui.window.preferences"
-               label="%command.preferences.label"
-               mnemonic="%command.preferences.mnemonic"
-               style="push">
-            <parameter
-                  name="preferencePageId"
-                  value="org.eclipse.ui.ide.markers">
-            </parameter>
-         </command>
       </menuContribution>
       <menuContribution
             locationURI="menu:org.eclipse.ui.views.AllMarkersView">
@@ -2037,16 +2045,6 @@
                mnemonic="%command.configureColumns.mnemonic"
                style="push">
          </command>
-         <command
-               commandId="org.eclipse.ui.window.preferences"
-               label="%command.preferences.label"
-               mnemonic="%command.preferences.mnemonic"
-               style="push">
-            <parameter
-                  name="preferencePageId"
-                  value="org.eclipse.ui.ide.markers">
-            </parameter>
-         </command>
       </menuContribution>
    </extension>
    <extension
@@ -2145,7 +2143,7 @@
                   </test>
                </iterate>
                <count
-                     value="?">
+                     value="+">
                </count>
             </and>
          </enabledWhen>
@@ -2228,18 +2226,6 @@
             </iterate>
          </enabledWhen>
       </handler>
-      <handler
-            class="org.eclipse.ui.internal.views.markers.MarkerPreferencesHandler"
-            commandId="org.eclipse.ui.window.preferences">
-         <activeWhen>
-            <with
-                  variable="activePart">
-               <instanceof
-                     value="org.eclipse.ui.views.markers.MarkerSupportView">
-               </instanceof>
-            </with>
-         </activeWhen>
-      </handler>
    </extension>
    <extension
          point="org.eclipse.core.expressions.propertyTesters">
diff --git a/eclipse/plugins/org.eclipse.ui.ide/schema/markerSupport.exsd b/eclipse/plugins/org.eclipse.ui.ide/schema/markerSupport.exsd
index 14d2be4..909774e 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/schema/markerSupport.exsd
+++ b/eclipse/plugins/org.eclipse.ui.ide/schema/markerSupport.exsd
@@ -73,7 +73,7 @@
                   The scope of the filter. One of 
 ON_ANY: any item in the workbench
 ON_SELECTED_ONLY: on the currently selected item
-ON_SELECTED_AND_CHILDREN: on the currently selected item and it's children
+ON_SELECTED_AND_CHILDREN: on the currently selected item and its children
 ON_ANY_IN_SAME_CONTAINER: on any item with the same top level container as the selection
                </documentation>
             </annotation>
@@ -89,6 +89,7 @@ ON_ANY_IN_SAME_CONTAINER: on any item with the same top level container as the s
                   </enumeration>
                </restriction>
             </simpleType>
+            
          </attribute>
          <attribute name="onDescription" type="string">
             <annotation>
@@ -242,7 +243,7 @@ It is generally recommended that a markerAttributeGrouping is defined as a child
 
 Top level markerGroupings are assumed to belong to the problems content generator.
 
-A markerGrouping is usually specified as the child of a markerContentGenerator. It is recommended that a markerContentGenerator defines it's own markerGroupings if possible.
+A markerGrouping is usually specified as the child of a markerContentGenerator. It is recommended that a markerContentGenerator defines its own markerGroupings if possible.
 
 Note that only the problems view supported markerGroupings pre 3.4.
 
@@ -517,7 +518,7 @@ This attribute is optional if this is defined as a child element of a markerGrou
 One of 
 ON_ANY: any item in the workbench
 ON_SELECTED_ONLY: on the currently selected item
-ON_SELECTED_AND_CHILDREN: on the currently selected item and it's children
+ON_SELECTED_AND_CHILDREN: on the currently selected item and its children
 ON_ANY_IN_SAME_CONTAINER: on any item with the same top level container as the selection.
 If this value is not set the value is ON_ANY
                </documentation>
@@ -590,7 +591,7 @@ If this value is not set the value is ON_ANY
          <meta.section type="examples"/>
       </appinfo>
       <documentation>
-         The following is an example of a problem filter definition in the marker support. This example only shows java warnings on the selected element and it's children and filters out those with the String NON-NLS
+         The following is an example of a problem filter definition in the marker support. This example only shows java warnings on the selected element and its children and filters out those with the String NON-NLS
 <p>
 <pre>
  <extension point="org.eclipse.ui.ide.markerSupport">
@@ -626,7 +627,7 @@ If this value is not set the value is ON_ANY
          <meta.section type="copyright"/>
       </appinfo>
       <documentation>
-         Copyright (c) 2005, 2007 IBM Corporation and others.<br>
+         Copyright (c) 2005, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSelectionUtil.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSelectionUtil.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java
index e17e6b7..295f8ec 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,14 +12,19 @@ package org.eclipse.ui.ide.dialogs;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.content.IContentDescription;
+import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.dialogs.DialogPage;
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -27,6 +32,7 @@ import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Group;
@@ -36,6 +42,8 @@ import org.eclipse.ui.WorkbenchEncoding;
 import org.eclipse.ui.ide.IDEEncoding;
 import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
 
 /**
  * The ResourceEncodingFieldEditor is a field editor for editing the encoding of
@@ -56,6 +64,8 @@ public final class ResourceEncodingFieldEditor extends
 
 	private Composite group;
 
+	private Button separateDerivedEncodingsButton = null;
+
 	/**
 	 * Creates a new encoding field editor for setting the encoding on the given
 	 * resource.
@@ -88,7 +98,7 @@ public final class ResourceEncodingFieldEditor extends
 	 * @param charsetResource
 	 *            must be an <code>IContainer</code> or an <code>IFile</code>.
 	 *  @param groupTitle
-	 *  		  the title for the field editor's control. If groupTitle is 
+	 *  		  the title for the field editor's control. If groupTitle is
 	 *            <code>null</code> the control will be unlabelled
 	 *            (by default a {@link Composite} instead of a {@link Group}.
 	 * 
@@ -140,6 +150,36 @@ public final class ResourceEncodingFieldEditor extends
 
 	}
 
+	private boolean getStoredSeparateDerivedEncodingsValue() {
+		// be careful looking up for our node so not to create any nodes as side effect
+		Preferences node = Platform.getPreferencesService().getRootNode()
+				.node(ProjectScope.SCOPE);
+		String projectName = ((IProject) resource).getName();
+		try {
+			//TODO once bug 90500 is fixed, should be as simple as this:
+			//			String path = projectName + IPath.SEPARATOR + ResourcesPlugin.PI_RESOURCES;
+			//			return node.nodeExists(path) ? node.node(path).getBoolean(ResourcesPlugin.PREF_SEPARATE_DERIVED_ENCODINGS, false) : false;
+			// for now, take the long way
+			if (!node.nodeExists(projectName))
+				return false;
+			node = node.node(projectName);
+			if (!node.nodeExists(ResourcesPlugin.PI_RESOURCES))
+				return false;
+			node = node.node(ResourcesPlugin.PI_RESOURCES);
+			return node.getBoolean(
+					ResourcesPlugin.PREF_SEPARATE_DERIVED_ENCODINGS, false);
+		} catch (BackingStoreException e) {
+			// default value
+			return false;
+		}
+	}
+
+	private boolean hasSameSeparateDerivedEncodings() {
+		return (separateDerivedEncodingsButton == null)
+				|| ((separateDerivedEncodingsButton != null) && (separateDerivedEncodingsButton
+						.getSelection() == getStoredSeparateDerivedEncodingsValue()));
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -154,7 +194,9 @@ public final class ResourceEncodingFieldEditor extends
 			encoding = null;
 		}
 		// Don't update if the same thing is selected
-		if (hasSameEncoding(encoding)) {
+		final boolean hasSameEncoding = hasSameEncoding(encoding);
+		final boolean hasSameSeparateDerivedEncodings = hasSameSeparateDerivedEncodings();
+		if (hasSameEncoding && hasSameSeparateDerivedEncodings) {
 			return;
 		}
 
@@ -200,11 +242,22 @@ public final class ResourceEncodingFieldEditor extends
 			 */
 			protected IStatus run(IProgressMonitor monitor) {
 				try {
-					if (resource instanceof IContainer) {
-						((IContainer) resource).setDefaultCharset(
-								finalEncoding, monitor);
-					} else {
-						((IFile) resource).setCharset(finalEncoding, monitor);
+					if (!hasSameEncoding) {
+						if (resource instanceof IContainer) {
+							((IContainer) resource).setDefaultCharset(
+									finalEncoding, monitor);
+						} else {
+							((IFile) resource).setCharset(finalEncoding,
+									monitor);
+						}
+					}
+					if (!hasSameSeparateDerivedEncodings) {
+						Preferences prefs = new ProjectScope((IProject) resource).getNode(ResourcesPlugin.PI_RESOURCES);
+						if (getStoredSeparateDerivedEncodingsValue())
+							prefs.remove(ResourcesPlugin.PREF_SEPARATE_DERIVED_ENCODINGS);
+						else
+							prefs.putBoolean(ResourcesPlugin.PREF_SEPARATE_DERIVED_ENCODINGS, true);
+						prefs.flush();
 					}
 					return Status.OK_STATUS;
 				} catch (CoreException e) {// If there is an error return the
@@ -214,6 +267,9 @@ public final class ResourceEncodingFieldEditor extends
 									IDEWorkbenchMessages.ResourceEncodingFieldEditor_ErrorStoringMessage,
 									e.getStatus());
 					return e.getStatus();
+				} catch (BackingStoreException e) {
+					IDEWorkbenchPlugin.log(IDEWorkbenchMessages.ResourceEncodingFieldEditor_ErrorStoringMessage, e);
+					return new Status(IStatus.ERROR, IDEWorkbenchPlugin.IDE_WORKBENCH, e.getMessage(), e);
 				}
 			}
 		};
@@ -227,8 +283,8 @@ public final class ResourceEncodingFieldEditor extends
 	 * 
 	 * @see org.eclipse.jface.preference.FieldEditor#store()
 	 */
-	public void store() {// Override the store method as we are not using a
-		// preference store
+	public void store() {
+		// Override the store method as we are not using a preference store
 		doStore();
 	}
 
@@ -237,8 +293,8 @@ public final class ResourceEncodingFieldEditor extends
 	 * 
 	 * @see org.eclipse.jface.preference.FieldEditor#load()
 	 */
-	public void load() {// Override the load method as we are not using a
-		// preference store
+	public void load() {
+		// Override the load method as we are not using a preference store
 		setPresentsDefaultValue(false);
 		doLoad();
 	}
@@ -249,11 +305,22 @@ public final class ResourceEncodingFieldEditor extends
 	 * @see org.eclipse.jface.preference.FieldEditor#loadDefault()
 	 */
 	public void loadDefault() {
+		// Override the loadDefault method as we are not using a preference store
 		setPresentsDefaultValue(true);
 		doLoadDefault();
 		refreshValidState();
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.FieldEditor#doLoadDefault()
+	 */
+	protected void doLoadDefault() {
+		super.doLoadDefault();
+		if (separateDerivedEncodingsButton != null)
+			separateDerivedEncodingsButton
+					.setSelection(getStoredSeparateDerivedEncodingsValue());
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -321,6 +388,14 @@ public final class ResourceEncodingFieldEditor extends
 									getDefaultEnc());
 				}
 
+				IContentType contentType = description.getContentType();
+				if (contentType != null && contentType.getDefaultCharset() == description.getCharset()) {
+					return NLS
+							.bind(
+									IDEWorkbenchMessages.ResourceInfo_fileContentTypeEncodingFormat,
+									getDefaultEnc());
+				}
+
 				return NLS
 						.bind(
 								IDEWorkbenchMessages.ResourceInfo_fileContentEncodingFormat,
@@ -360,6 +435,17 @@ public final class ResourceEncodingFieldEditor extends
 			label.setLayoutData(layoutData);
 
 		}
+
+		if (resource.getType() == IResource.PROJECT) {
+			separateDerivedEncodingsButton = new Button(group, SWT.CHECK);
+			GridData data = new GridData();
+			data.horizontalSpan = 2;
+			separateDerivedEncodingsButton.setLayoutData(data);
+			separateDerivedEncodingsButton
+					.setText(IDEWorkbenchMessages.ResourceEncodingFieldEditor_SeparateDerivedEncodingsLabel);
+			separateDerivedEncodingsButton
+					.setSelection(getStoredSeparateDerivedEncodingsValue());
+		}
 		return group;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java
index 6f74d45..18d862a 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,8 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.MultiRule;
 import org.eclipse.ui.internal.ide.undo.MarkerDescription;
 import org.eclipse.ui.internal.ide.undo.UndoMessages;
+import org.eclipse.ui.views.markers.internal.MarkerType;
+import org.eclipse.ui.views.markers.internal.MarkerTypesModel;
 
 /**
  * An AbstractMarkersOperation represents an undoable operation that affects
@@ -253,17 +255,28 @@ abstract class AbstractMarkersOperation extends AbstractWorkspaceOperation {
 
 			}
 		}
+
 		if (types != null) {
+			MarkerType bookmarkType= MarkerTypesModel.getInstance().getType(IMarker.BOOKMARK);
+			MarkerType taskType= MarkerTypesModel.getInstance().getType(IMarker.TASK);
+			MarkerType problemType= MarkerTypesModel.getInstance().getType(IMarker.PROBLEM);
+
 			for (int i = 0; i < types.length; i++) {
 				// Marker type could be null if marker did not exist.
 				// This shouldn't happen, but can.
 				// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=158129
 				if (types[i] != null) {
-					if (types[i].equals(IMarker.BOOKMARK)) {
+					MarkerType type= MarkerTypesModel.getInstance().getType(types[i]);
+					if (type == null) {
+						// type is not known, use the workspace undo context
+						addContext(WorkspaceUndoUtil.getWorkspaceUndoContext());
+					} else if (type.isSubtypeOf(bookmarkType)) {
 						addContext(WorkspaceUndoUtil.getBookmarksUndoContext());
-					} else if (types[i].equals(IMarker.TASK)) {
+					} else if (type.isSubtypeOf(taskType)) {
 						addContext(WorkspaceUndoUtil.getTasksUndoContext());
-					} else if (types[i] != null) {
+					} else if (type.isSubtypeOf(problemType)) {
+						addContext(WorkspaceUndoUtil.getProblemsUndoContext());
+					} else {
 						// type is not known, use the workspace undo context
 						addContext(WorkspaceUndoUtil.getWorkspaceUndoContext());
 					}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
index b0e1f88..b9c5fa2 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,6 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.ui.ide.undo;
 
 import java.net.URI;
@@ -50,18 +49,19 @@ import org.eclipse.ui.internal.ide.undo.ContainerDescription;
 import org.eclipse.ui.internal.ide.undo.FileDescription;
 import org.eclipse.ui.internal.ide.undo.UndoMessages;
 
+
 /**
  * WorkspaceUndoUtil defines common utility methods and constants used by
  * clients who create undoable workspace operations.
  * 
  * @since 3.3
- * 
  */
 public class WorkspaceUndoUtil {
 
 	private static ObjectUndoContext tasksUndoContext;
-
 	private static ObjectUndoContext bookmarksUndoContext;
+	private static ObjectUndoContext problemsUndoContext;
+
 
 	/**
 	 * Return the undo context that should be used for workspace-wide operations
@@ -104,6 +104,22 @@ public class WorkspaceUndoUtil {
 	}
 
 	/**
+	 * Return the undo context that should be used for operations involving
+	 * problems.
+	 * 
+	 * @return the problems undo context
+	 * @since 3.7
+	 */
+	public static IUndoContext getProblemsUndoContext() {
+		if (problemsUndoContext == null) {
+			problemsUndoContext = new ObjectUndoContext(new Object(),
+					"Problems Context"); //$NON-NLS-1$
+			problemsUndoContext.addMatch(getWorkspaceUndoContext());
+		}
+		return problemsUndoContext;
+	}
+
+	/**
 	 * Make an <code>IAdaptable</code> that adapts to the specified shell,
 	 * suitable for passing for passing to any
 	 * {@link org.eclipse.core.commands.operations.IUndoableOperation} or
@@ -327,6 +343,9 @@ public class WorkspaceUndoUtil {
 						|| (!source.isLinked() && !existing.isLinked()
 								&& !source.isVirtual() && !existing.isVirtual())) {
 					IResource[] children = ((IContainer) source).members();
+					// copy only linked resource children (267173)
+					if (source.isLinked() && source.getLocation().equals(existing.getLocation()))
+						children = filterNonLinkedResources(children);
 					ResourceDescription[] overwritten = copy(children,
 							destinationPath, resourcesAtDestination,
 							new SubProgressMonitor(monitor, 1), uiInfo, false,
@@ -513,7 +532,6 @@ public class WorkspaceUndoUtil {
 	 * is "VAR" and points to "C:\foo\bar\").
 	 *
 	 * @param locationURI
-	 * @param pvm the IPathVariableManager to use for resolving variables
 	 * @param resource 
 	 * @return an URI that was made relative to a variable
 	 */
@@ -586,16 +604,19 @@ public class WorkspaceUndoUtil {
 				// The resource is a folder and it exists in the destination.
 				// Move its children to the existing destination.
 				if (source.isLinked() == existing.isLinked()) {
-					IResource[] children = ((IContainer) source).members();
-					ResourceDescription[] overwritten = move(children,
-							destinationPath, resourcesAtDestination,
-							reverseDestinations, new SubProgressMonitor(
-									monitor, 1), uiInfo, false);
-					// We don't record the moved resources since the recursive
-					// call has done so. Just record the overwrites.
-					for (int j = 0; j < overwritten.length; j++) {
-						overwrittenResources.add(overwritten[j]);
-					}
+						IResource[] children = ((IContainer) source).members();
+						// move only linked resource children (267173)
+						if (source.isLinked() && source.getLocation().equals(existing.getLocation()))
+							children = filterNonLinkedResources(children);
+						ResourceDescription[] overwritten = move(children,
+								destinationPath, resourcesAtDestination,
+								reverseDestinations, new SubProgressMonitor(
+										monitor, 1), uiInfo, false);
+						// We don't record the moved resources since the recursive
+						// call has done so. Just record the overwrites.
+						for (int j = 0; j < overwritten.length; j++) {
+							overwrittenResources.add(overwritten[j]);
+						}
 					// Delete the source. No need to record it since it
 					// will get moved back.
 					delete(source, monitor, uiInfo, false, false);
@@ -680,6 +701,20 @@ public class WorkspaceUndoUtil {
 	}
 
 	/**
+	 * Returns only the linked resources out of an array of resources
+	 * @param resources The resources to filter
+	 * @return The linked resources
+	 */
+	private static IResource[] filterNonLinkedResources(IResource[] resources) {
+		List result = new ArrayList();
+		for (int i = 0; i < resources.length; i++) {
+			if (resources[i].isLinked())
+				result.add(resources[i]);
+		}
+		return (IResource[]) result.toArray(new IResource[0]);
+	}
+
+	/**
 	 * Recreate the resources from the specified resource descriptions.
 	 * 
 	 * @param resourcesToRecreate
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java
index c0e317a..7819475 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,12 @@ public final class IDEInternalWorkbenchImages {
 
     public final static String IMG_ETOOL_PROBLEM_CATEGORY = "IMG_ETOOL_PROBLEM_CATEGORY"; //$NON-NLS-1$
 
+	public final static String IMG_ETOOL_PROBLEMS_VIEW= "IMG_ETOOL_PROBLEMS_VIEW"; //$NON-NLS-1$
+
+	public final static String IMG_ETOOL_PROBLEMS_VIEW_ERROR= "IMG_ETOOL_PROBLEMS_VIEW_ERROR"; //$NON-NLS-1$
+
+	public final static String IMG_ETOOL_PROBLEMS_VIEW_WARNING= "IMG_ETOOL_PROBLEMS_VIEW_WARNING"; //$NON-NLS-1$
+
     public final static String IMG_LCL_FLAT_LAYOUT = "IMG_LCL_FLAT_LAYOUT"; //$NON-NLS-1$
     
     public final static String IMG_LCL_HIERARCHICAL_LAYOUT = "IMG_LCL_HIERARCHICAL_LAYOUT"; //$NON-NLS-1$
@@ -98,9 +104,10 @@ public final class IDEInternalWorkbenchImages {
 
     //Quick fix images
 	public static final String IMG_DLCL_QUICK_FIX_DISABLED = "IMG_DLCL_QUICK_FIX_DISABLED";//$NON-NLS-1$
-
 	public static final String IMG_ELCL_QUICK_FIX_ENABLED = "IMG_ELCL_QUICK_FIX_ENABLED"; //$NON-NLS-1$
-
+	public static final String IMG_OBJS_FIXABLE_WARNING= "IMG_OBJS_FIXABLE_WARNING"; //$NON-NLS-1$
+	public static final String IMG_OBJS_FIXABLE_ERROR= "IMG_OBJS_FIXABLE_ERROR"; //$NON-NLS-1$
+	
 
     /**
      * Returns the image descriptor for the workbench image with the given
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
index c9ca7a8..7a90233 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
  * Dina Sayed, dsayed at eg.ibm.com, IBM -  bug 269844
  * Serge Beauchamp (Freescale Semiconductor) - [252996] Resource filters
  *     Markus Schorn (Wind River Systems) -  bug 284447
+ *     James Blackburn (Broadcom Corp.)   -  bug 340978
  *******************************************************************************/
 package org.eclipse.ui.internal.ide;
 
@@ -502,6 +503,8 @@ public class IDEWorkbenchMessages extends NLS {
 	public static String IDEWorkspacePreference_savePriorToBuildingToolTip;
 	public static String IDEWorkspacePreference_RefreshButtonText;
 	public static String IDEWorkspacePreference_RefreshButtonToolTip;
+	public static String IDEWorkspacePreference_RefreshLightweightButtonText;
+	public static String IDEWorkspacePreference_RefreshLightweightButtonToolTip;
 	public static String IDEWorkspacePreference_fileLineDelimiter;
 	public static String IDEWorkspacePreference_defaultLineDelim;
 	public static String IDEWorkspacePreference_defaultLineDelimProj;
@@ -603,6 +606,7 @@ public class IDEWorkbenchMessages extends NLS {
 	public static String ResourceInfo_locked;
 	public static String ResourceInfo_archive;
 	public static String ResourceInfo_derived;
+	public static String ResourceInfo_derivedHasDerivedAncestor;
 	public static String ResourceInfo_type;
 	public static String ResourceInfo_location;
 	public static String ResourceInfo_resolvedLocation;
@@ -624,6 +628,7 @@ public class IDEWorkbenchMessages extends NLS {
 	public static String ResourceInfo_lastModified;
 	public static String ResourceInfo_fileEncodingTitle;
 	public static String ResourceInfo_fileContentEncodingFormat;
+	public static String ResourceInfo_fileContentTypeEncodingFormat;
 	public static String ResourceInfo_fileContainerEncodingFormat;
 	public static String ResourceInfo_containerEncodingFormat;
 	public static String ResourceInfo_exWarning;
@@ -649,6 +654,7 @@ public class IDEWorkbenchMessages extends NLS {
 	// --- Linked Resource Editor ---
 	public static String LinkedResourceEditor_editLinkedLocation;
 	public static String LinkedResourceEditor_convertToVariableLocation;
+	public static String LinkedResourceEditor_remove;
 	public static String LinkedResourceEditor_resourceName;
 	public static String LinkedResourceEditor_path;
 	public static String LinkedResourceEditor_location;
@@ -666,6 +672,9 @@ public class IDEWorkbenchMessages extends NLS {
 	public static String LinkedResourceEditor_descriptionBlock;
 	public static String LinkedResourceEditor_convertTitle;
 	public static String LinkedResourceEditor_convertMessage;
+	public static String LinkedResourceEditor_removeTitle;
+	public static String LinkedResourceEditor_removeMessage;
+	public static String LinkedResourceEditor_removingMessage;
 	
 	// ==============================================================================
 	// Editors
@@ -893,6 +902,7 @@ public class IDEWorkbenchMessages extends NLS {
 	public static String ResourceEncodingFieldEditor_ErrorStoringMessage;
 	public static String ResourceEncodingFieldEditor_EncodingConflictTitle;
 	public static String ResourceEncodingFieldEditor_EncodingConflictMessage;
+	public static String ResourceEncodingFieldEditor_SeparateDerivedEncodingsLabel;
 
 	public static String ChooseWorkspaceDialog_dialogName;
 	public static String ChooseWorkspaceDialog_dialogTitle;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
index 9dc0408..62cfc17 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,14 @@ import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.resource.LocalResourceManager;
 import org.eclipse.jface.resource.ResourceManager;
 import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.internal.ide.registry.MarkerImageProviderRegistry;
 import org.eclipse.ui.internal.ide.registry.ProjectImageRegistry;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
@@ -79,6 +87,8 @@ public class IDEWorkbenchPlugin extends AbstractUIPlugin {
 	
 	private final static String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$
 
+	private static final int PROBLEMS_VIEW_CREATION_DELAY= 6000;
+
     /**
      * Project image registry; lazily initialized.
      */
@@ -330,4 +340,53 @@ public class IDEWorkbenchPlugin extends AbstractUIPlugin {
 		if (resourceManager != null)
 			resourceManager.dispose();
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+
+		createProblemsViews();
+	}
+
+	/**
+	 * Create (but don't activate) the Problems views so that the view's tooltip and icon are
+	 * up-to-date.
+	 */
+	private void createProblemsViews() {
+		final Runnable r= new Runnable() {
+			public void run() {
+				IWorkbench workbench = PlatformUI.isWorkbenchRunning() ? PlatformUI.getWorkbench() : null;
+				if (workbench != null && (workbench.getDisplay().isDisposed() || PlatformUI.getWorkbench().isClosing()))
+					return;
+
+				if (workbench == null || workbench.isStarting()) {
+					Display.getDefault().timerExec(PROBLEMS_VIEW_CREATION_DELAY, this);
+					return;
+				}
+
+				IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
+				for (int i= 0; i < windows.length; i++) {
+					IWorkbenchWindow window= windows[i];
+					IWorkbenchPage activePage= window.getActivePage();
+					if (activePage == null)
+						continue;
+					IViewReference[] refs= activePage.getViewReferences();
+					for (int j= 0; j < refs.length; j++) {
+						IViewReference viewReference= refs[j];
+						if (IPageLayout.ID_PROBLEM_VIEW.equals(viewReference.getId()))
+							try {
+								if (viewReference.getPart(false) == null)
+									activePage.showView(viewReference.getId(), viewReference.getSecondaryId(), IWorkbenchPage.VIEW_CREATE);
+							} catch (PartInitException e) {
+								log("Could not create Problems view", e.getStatus()); //$NON-NLS-1$
+							}
+					}
+				}
+			}
+		};
+		Display.getDefault().timerExec(PROBLEMS_VIEW_CREATION_DELAY, r);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java
index 1fb45cd..c2811e6 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,8 +17,6 @@ import java.util.Set;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ProjectScope;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IScopeContext;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -32,6 +30,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Group;
 import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
 
 /**
  * A class to handle editing of the Line delimiter preferences in core.
@@ -162,24 +161,31 @@ public class LineDelimiterEditor {
 	 * @return the currently stored encoding
 	 */
 	public String getStoredValue() {
-		IScopeContext[] scopeContext = new IScopeContext[] { getScopeContext() };
-		IEclipsePreferences node = scopeContext[0].getNode(Platform.PI_RUNTIME);
-		return node.get(Platform.PREF_LINE_SEPARATOR, null);
+		Preferences node = getPreferences();
+		try {
+			// be careful looking up for our node so not to create any nodes as side effect
+			if (node.nodeExists(Platform.PI_RUNTIME))
+				return node.node(Platform.PI_RUNTIME).get(
+						Platform.PREF_LINE_SEPARATOR, null);
+		} catch (BackingStoreException e) {
+			// ignore
+		}
+		return null;
 	}
 
 	/**
-	 * Answer the <code>IScopeContext</code> for the receiver, this will be a
-	 * project scope if the receiver is editing project preferences, otherwise
-	 * instance scope.
+	 * Answer the <code>Preferences</code> for the receiver, this will be a
+	 * project preferences if the receiver is editing project preferences, otherwise
+	 * instance preferences.
 	 * 
-	 * @return the scope context
+	 * @return the preferences
 	 */
-	private IScopeContext getScopeContext() {
+	private Preferences getPreferences() {
 		if (project != null) {
-			return new ProjectScope(project);
+			return Platform.getPreferencesService().getRootNode().node(ProjectScope.SCOPE).node(project.getName());
 		}
 
-		return new InstanceScope();
+		return Platform.getPreferencesService().getRootNode().node(InstanceScope.SCOPE);
 	}
 
 	/**
@@ -264,8 +270,7 @@ public class LineDelimiterEditor {
 			val = (String) lineSeparators.get(choiceCombo.getText());
 		}
 
-		IEclipsePreferences node = getScopeContext().getNode(
-				Platform.PI_RUNTIME);
+		Preferences node = getPreferences().node(Platform.PI_RUNTIME);
 		if (val == null) {
 			node.remove(Platform.PREF_LINE_SEPARATOR);
 		} else {
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java
index 2d8261d..b2c2c45 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -206,7 +206,10 @@ public class ResourceWorkingSetUpdater implements IWorkingSetUpdater,
 		for (Iterator iter = elements.iterator(); iter.hasNext();) {
 			IAdaptable element = (IAdaptable) iter.next();
 			boolean remove = false;
-			if (element instanceof IResource) {
+			if (element instanceof IProject) {
+				IProject project = (IProject) element;
+				remove = !project.exists();
+			} else if (element instanceof IResource) {
 				IResource resource = (IResource) element;
 				IProject project = resource.getProject();
 				remove = (project != null ? project.isOpen() : true)
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java
index 75e9918..9dc1414 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java
@@ -182,13 +182,13 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
     
     private IWorkbenchAction exportResourcesAction;
 
-    IWorkbenchAction buildAllAction; // Incremental workspace build
+	private IWorkbenchAction buildAllAction; // Incremental workspace build
 
     private IWorkbenchAction cleanAction;
 
     private IWorkbenchAction toggleAutoBuildAction;
 
-    MenuManager buildWorkingSetMenu;
+	private MenuManager buildWorkingSetMenu;
 
     private IWorkbenchAction quickStartAction;
 
@@ -201,8 +201,14 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
     private IWorkbenchAction introAction;
 
     // IDE-specific retarget actions
-    IWorkbenchAction buildProjectAction;
+	private IWorkbenchAction buildProjectAction;
+	
+	private CommandContributionItem minimizeItem;
+	
+	private CommandContributionItem zoomItem;
 
+	private CommandContributionItem arrangeWindowsItem;
+	
     // contribution items
     // @issue should obtain from ContributionItemFactory
     private NewWizardMenu newWizardMenu;
@@ -301,10 +307,10 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
             }
         };
         /*
-         * In order to ensure that the pin action toolbar sets its size 
+         * In order to ensure that the pin action toolbar sets its size
          * correctly, the pin action should set its visiblity before we call updatePinActionToolbar().
          * 
-         * In other words we always want the PinActionContributionItem to be notified before the 
+         * In other words we always want the PinActionContributionItem to be notified before the
          * WorkbenchActionBuilder.
          */
         WorkbenchPlugin.getDefault().getPreferenceStore()
@@ -409,11 +415,11 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
             helpToolBar.add(new Separator(IWorkbenchActionConstants.GROUP_HELP));
 //            helpToolBar.add(searchComboItem);
               // Add the group for applications to contribute
-            helpToolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_APP));              
+            helpToolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_APP));
             // Add to the cool bar manager
             coolBar.add(actionBarConfigurer.createToolBarContributionItem(helpToolBar,
                     IWorkbenchActionConstants.TOOLBAR_HELP));
-        }        
+        }
 
     }
 
@@ -613,6 +619,8 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
         MenuManager menu = new MenuManager(
                 IDEWorkbenchMessages.Workbench_window, IWorkbenchActionConstants.M_WINDOW);
 
+        addMacWindowMenuItems(menu);
+        
         menu.add(newWindowAction);
 		menu.add(newEditorAction);
 		
@@ -623,6 +631,9 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
         Separator sep = new Separator(IWorkbenchActionConstants.MB_ADDITIONS);
 		sep.setVisible(!Util.isMac());
 		menu.add(sep);
+		
+		if(Util.isCocoa())
+			menu.add(arrangeWindowsItem);
         
         // See the comment for quit in createFileMenu
         ActionContributionItem openPreferencesItem = new ActionContributionItem(openPreferencesAction);
@@ -633,7 +644,18 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
         return menu;
     }
 
-    /**
+	private void addMacWindowMenuItems(MenuManager windowMenu) {
+
+		if (!Util.isCocoa())
+			return;
+
+		windowMenu.add(minimizeItem);
+		windowMenu.add(zoomItem);
+		windowMenu.add(new Separator());
+
+	}
+
+	/**
      * Adds the perspective actions to the specified menu.
      */
     private void addPerspectiveActions(MenuManager menu) {
@@ -796,6 +818,7 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
         showInQuickMenu.dispose();
         newQuickMenu.dispose();
         
+
         // null out actions to make leak debugging easier
         closeAction = null;
         closeAllAction = null;
@@ -863,8 +886,10 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
         prefListener = null;
         propPrefListener = null;
         introAction = null;
-        
-        super.dispose();
+        minimizeItem = null;
+        zoomItem = null;
+        arrangeWindowsItem = null;
+		super.dispose();
     }
 
     void updateModeLine(final String text) {
@@ -1141,6 +1166,20 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
             }
         };
         register(newQuickMenu);
+        
+        
+		if (Util.isCocoa()) {
+
+			CommandContributionItemParameter minimizeParam = new CommandContributionItemParameter(window, null,
+					"org.eclipse.ui.cocoa.minimizeWindow", CommandContributionItem.STYLE_PUSH); //$NON-NLS-1$
+			minimizeItem = new CommandContributionItem(minimizeParam);
+			CommandContributionItemParameter zoomParam = new CommandContributionItemParameter(window, null,
+					"org.eclipse.ui.cocoa.zoomWindow", CommandContributionItem.STYLE_PUSH); //$NON-NLS-1$
+			zoomItem = new CommandContributionItem(zoomParam);
+			CommandContributionItemParameter arrangeWindowsParam = new CommandContributionItemParameter(window, null,
+					"org.eclipse.ui.cocoa.arrangeWindowsInFront", CommandContributionItem.STYLE_PUSH); //$NON-NLS-1$
+			arrangeWindowsItem = new CommandContributionItem(arrangeWindowsParam);
+		}
 
     }
 
@@ -1164,7 +1203,7 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
         
         // See if a welcome page is specified.
         // Optimization: if welcome pages were found on a previous run, then just add the action.
-        String quickStartKey = IDEActionFactory.QUICK_START.getId(); 
+        String quickStartKey = IDEActionFactory.QUICK_START.getId();
         String showQuickStart = prefs.getString(quickStartKey);
         if (sameState && "true".equals(showQuickStart)) { //$NON-NLS-1$
             quickStartAction = IDEActionFactory.QUICK_START.create(window);
@@ -1428,7 +1467,7 @@ public final class WorkbenchActionBuilder extends ActionBarAdvisor {
         		ISharedImages.IMG_TOOL_DELETE,
         		ISharedImages.IMG_TOOL_DELETE_DISABLED,
         		WorkbenchMessages.Workbench_delete,
-        		WorkbenchMessages.Workbench_deleteToolTip, 
+        		WorkbenchMessages.Workbench_deleteToolTip,
         		IWorkbenchHelpContextIds.DELETE_RETARGET_ACTION);
     }
     
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java
index 413ed0f..cc158fc 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java
@@ -10,18 +10,27 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.actions;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ActionContributionItem;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.IMenuCreator;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.internal.ide.ChooseWorkspaceData;
@@ -112,6 +121,111 @@ public class OpenWorkspaceAction extends Action implements
 	private static final String NEW_LINE = "\n"; //$NON-NLS-1$
 
 	private IWorkbenchWindow window;
+	
+	
+	private IContributionItem[] getContributionItems() {
+		ArrayList list = new ArrayList();
+		final ChooseWorkspaceData data = new ChooseWorkspaceData(Platform
+				.getInstanceLocation().getURL());
+		data.readPersistedData();
+		String current = data.getInitialDefault();
+		String[] workspaces = data.getRecentWorkspaces();
+		for (int i = 0; i < workspaces.length; i++) {
+			if (workspaces[i] != null && !workspaces[i].equals(current)) {
+				list.add(new ActionContributionItem(new WorkspaceMRUAction(
+						workspaces[i], data)));
+			}
+		}
+		if (list.size()>0) {
+			list.add(new Separator());
+		}
+		return (IContributionItem[]) list
+				.toArray(new IContributionItem[list.size()]);
+	}
+	
+	class MenuCreator implements IMenuCreator {
+		ArrayList menus = new ArrayList();
+
+		private MenuManager dropDownMenuMgr;
+
+		/**
+		 * Creates the menu manager for the drop-down.
+		 */
+		private void createDropDownMenuMgr() {
+			if (dropDownMenuMgr == null) {
+				dropDownMenuMgr = new MenuManager();
+				dropDownMenuMgr.setRemoveAllWhenShown(true);
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Control)
+		 */
+		public Menu getMenu(Control parent) {
+			createDropDownMenuMgr();
+			dropDownMenuMgr.addMenuListener(new IMenuListener() {
+				public void menuAboutToShow(IMenuManager manager) {
+					IContributionItem[] items = getContributionItems();
+					for (int i = 0; i < items.length; i++) {
+						manager.add(items[i]);
+					}
+					manager.add(new OpenDialogAction());
+				}
+			});
+			return dropDownMenuMgr.createContextMenu(parent);
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Menu)
+		 */
+		public Menu getMenu(Menu parent) {
+			createDropDownMenuMgr();
+			final Menu menu = new Menu(parent);
+			menu.addListener(SWT.Show, new Listener() {
+				public void handleEvent(Event event) {
+					if (menu.isDisposed()) {
+						return;
+					}
+					MenuItem[] items = menu.getItems();
+					for (int i = 0; i < items.length; i++) {
+						items[i].dispose();
+					}
+					IContributionItem[] contributions = getContributionItems();
+					for (int i = 0; i < contributions.length; i++) {
+						contributions[i].fill(menu, -1);
+					}
+					new ActionContributionItem(new OpenDialogAction()).fill(
+							menu, -1);
+				}
+			});
+			return menu;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.jface.action.IMenuCreator#dispose()
+		 */
+		public void dispose() {
+			if (dropDownMenuMgr != null) {
+				dropDownMenuMgr.dispose();
+				dropDownMenuMgr = null;
+			}
+			if (menus.size()>0) {
+				for (Iterator i = menus.iterator(); i.hasNext();) {
+					Menu m = (Menu) i.next();
+					if (!m.isDisposed()) {
+						m.dispose();
+					}
+				}
+				menus.clear();
+			}
+		}
+	}
 
 	/**
 	 * Set definition for this action and text so that it will be used for File
@@ -133,76 +247,7 @@ public class OpenWorkspaceAction extends Action implements
 		this.window = window;
 		setToolTipText(IDEWorkbenchMessages.OpenWorkspaceAction_toolTip);
 		setActionDefinitionId("org.eclipse.ui.file.openWorkspace"); //$NON-NLS-1$
-		setMenuCreator(new IMenuCreator() {
-			private MenuManager dropDownMenuMgr;
-
-			/**
-			 * Creates the menu manager for the drop-down.
-			 */
-			private void createDropDownMenuMgr() {
-				if (dropDownMenuMgr == null) {
-					dropDownMenuMgr = new MenuManager();
-					final ChooseWorkspaceData data = new ChooseWorkspaceData(
-							Platform.getInstanceLocation().getURL());
-					data.readPersistedData();
-					String current = data.getInitialDefault();
-					String[] workspaces = data.getRecentWorkspaces();
-					for (int i = 0; i < workspaces.length; i++) {
-						if (workspaces[i] != null
-								&& !workspaces[i].equals(current)) {
-							dropDownMenuMgr.add(new WorkspaceMRUAction(
-									workspaces[i], data));
-						}
-					}
-					if (!dropDownMenuMgr.isEmpty())
-						dropDownMenuMgr.add(new Separator());
-					dropDownMenuMgr.add(new OpenDialogAction());
-				}
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Control)
-			 */
-			public Menu getMenu(Control parent) {
-				createDropDownMenuMgr();
-				return dropDownMenuMgr.createContextMenu(parent);
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Menu)
-			 */
-			public Menu getMenu(Menu parent) {
-				createDropDownMenuMgr();
-				Menu menu = new Menu(parent);
-				IContributionItem[] items = dropDownMenuMgr.getItems();
-				for (int i = 0; i < items.length; i++) {
-					IContributionItem item = items[i];
-					IContributionItem newItem = item;
-					if (item instanceof ActionContributionItem) {
-						newItem = new ActionContributionItem(
-								((ActionContributionItem) item).getAction());
-					}
-					newItem.fill(menu, -1);
-				}
-				return menu;
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.action.IMenuCreator#dispose()
-			 */
-			public void dispose() {
-				if (dropDownMenuMgr != null) {
-					dropDownMenuMgr.dispose();
-					dropDownMenuMgr = null;
-				}
-			}
-		});
+		setMenuCreator(new MenuCreator());
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java
index fcf59f6..b760716 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java
@@ -36,7 +36,7 @@ public class CopyBuildIdToClipboardHandler extends AbstractHandler {
 	 */
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		final String buildId = ConfigurationInfo.getBuildId();
-		if (buildId == null)
+		if (buildId == null || buildId.length() == 0)
 			throw new ExecutionException("No build ID in this instance."); //$NON-NLS-1$
 		Clipboard clipboard = null;
 		try {
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java
index 4181760..872016c 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java
@@ -16,29 +16,15 @@ package org.eclipse.ui.internal.ide.dialogs;
 import java.util.Arrays;
 import java.util.List;
 
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubProgressMonitor;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IncrementalProjectBuilder;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.resources.WorkspaceJob;
-
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -48,7 +34,17 @@ import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jface.window.IShellProvider;
-
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.actions.BuildAction;
 import org.eclipse.ui.actions.GlobalBuildAction;
@@ -57,6 +53,7 @@ import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.ide.actions.BuildUtilities;
 import org.eclipse.ui.model.WorkbenchContentProvider;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.progress.IProgressConstants2;
 
 /**
  * Dialog that asks the user to confirm a clean operation, and to configure
@@ -181,6 +178,7 @@ public class CleanDialog extends MessageDialog {
         cleanJob.setRule(ResourcesPlugin.getWorkspace().getRuleFactory()
                 .buildRule());
         cleanJob.setUser(true);
+        cleanJob.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
         cleanJob.schedule();
     }
 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java
index 7b898d9..c581732 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,6 +66,8 @@ public class FileStatesPage extends PreferencePage implements
 
     private long STATE_SIZE_MAXIMUM = 100;
 
+    private static final int INDENT = 20;
+    
     /**
      * This method takes the string for the title of a text field and the value for the
      * text of the field.
@@ -99,6 +101,7 @@ public class FileStatesPage extends PreferencePage implements
         button.addListener(SWT.Selection, this);
         GridData data = new GridData();
         data.horizontalSpan = 2;
+        data.horizontalIndent= -INDENT;
         button.setLayoutData(data);
         button.setText(label);
         button.setSelection(selected);
@@ -122,7 +125,7 @@ public class FileStatesPage extends PreferencePage implements
         while (iter.hasNext())
 			((Control)iter.next()).setEnabled(newState);
 
-        if (validateLongTextEntry(longevityText) == FAILED_VALUE) {
+        if (validateLongTextEntry(longevityText, DAY_LENGTH) == FAILED_VALUE) {
             setValid(false);
             return;
         }
@@ -164,20 +167,16 @@ public class FileStatesPage extends PreferencePage implements
 			megabytes = 1;
 		}
 
-		this.applyPolicyButton = addCheckBox(IDEWorkbenchMessages.FileHistory_applyPolicy, description
-						.isApplyFileStatePolicy(), parent);
-
 		// button group
 		Composite composite= new Composite(parent, SWT.NONE);
 		GridLayout layout= new GridLayout();
 		layout.numColumns= 2;
-		layout.marginLeft= 10;
+		layout.marginLeft= INDENT;
 		layout.marginWidth= 0;
 		composite.setLayout(layout);
-		GridData gd= new GridData();
-		gd.horizontalIndent= 200;
-		composite.setLayoutData(gd);
 
+		this.applyPolicyButton = addCheckBox(IDEWorkbenchMessages.FileHistory_applyPolicy, description
+				.isApplyFileStatePolicy(), composite);
 
 		this.longevityText= addDependentLabelAndText(IDEWorkbenchMessages.FileHistory_longevity, String
                 .valueOf(days), composite);
@@ -237,7 +236,7 @@ public class FileStatesPage extends PreferencePage implements
 
     /**
      * Performs special processing when this page's Defaults button has been pressed.
-     * Reset the entries to thier default values.
+     * Reset the entries to their default values.
      */
     protected void performDefaults() {
         super.performDefaults();
@@ -264,7 +263,7 @@ public class FileStatesPage extends PreferencePage implements
      */
     public boolean performOk() {
 
-        long longevityValue = validateLongTextEntry(longevityText);
+        long longevityValue = validateLongTextEntry(longevityText, DAY_LENGTH);
         int maxFileStates = validateMaxFileStates();
         long maxStateSize = validateMaxFileStateSize();
         boolean applyPolicy = applyPolicyButton.getSelection();
@@ -322,14 +321,18 @@ public class FileStatesPage extends PreferencePage implements
     /**
      * Validate a text entry for a long field. Return the result if there are
      * no errors, otherwise return -1 and set the entry field error.
+     * @param scale the scale (factor by which the value is multiplied when it is persisted) 
      * @return long
      */
-    private long validateLongTextEntry(Text text) {
+    private long validateLongTextEntry(Text text, long scale) {
 
         long value;
 
         try {
-            value = Long.parseLong(text.getText());
+            String string = text.getText();
+			value = Long.parseLong(string);
+            if (value * scale / scale != value)
+            	throw new NumberFormatException(string);
 
         } catch (NumberFormatException exception) {
             setErrorMessage(MessageFormat.format(IDEWorkbenchMessages.FileHistory_invalid,
@@ -375,7 +378,7 @@ public class FileStatesPage extends PreferencePage implements
      * @return long
      */
     private long validateMaxFileStateSize() {
-        long maxFileStateSize = validateLongTextEntry(this.maxStateSizeText);
+        long maxFileStateSize = validateLongTextEntry(this.maxStateSizeText, MEGABYTES);
         if (maxFileStateSize == FAILED_VALUE) {
 			return maxFileStateSize;
 		}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
index 5f477ad..45f370d 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
@@ -1,5 +1,5 @@
  /****************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Dina Sayed, dsayed at eg.ibm.com, IBM -  bug 269844
  *     Markus Schorn (Wind River Systems) -  bug 284447
+ *     James Blackburn (Broadcom Corp.)   -  bug 340978
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.dialogs;
 
@@ -66,11 +67,13 @@ public class IDEWorkspacePreferencePage extends PreferencePage
 
 	private FieldEditor workspaceName;
 
-    private Button autoRefreshButton;
-    
-    private Button closeUnrelatedProjectButton;
-    
-    private ResourceEncodingFieldEditor encodingEditor;
+	private Button autoRefreshButton;
+
+	private Button lightweightRefreshButton;
+
+	private Button closeUnrelatedProjectButton;
+
+	private ResourceEncodingFieldEditor encodingEditor;
 
 	private LineDelimiterEditor lineSeparatorEditor;
 	
@@ -79,7 +82,6 @@ public class IDEWorkspacePreferencePage extends PreferencePage
 
 	private RadioGroupFieldEditor openReferencesEditor;
 
-
     /*
      * (non-Javadoc)
      * 
@@ -259,10 +261,19 @@ public class IDEWorkspacePreferencePage extends PreferencePage
         this.autoRefreshButton.setText(IDEWorkbenchMessages.IDEWorkspacePreference_RefreshButtonText);
         this.autoRefreshButton.setToolTipText(IDEWorkbenchMessages.IDEWorkspacePreference_RefreshButtonToolTip);
 
-        boolean autoRefresh = ResourcesPlugin.getPlugin()
+        this.lightweightRefreshButton = new Button(parent, SWT.CHECK);
+        this.lightweightRefreshButton.setText(IDEWorkbenchMessages.IDEWorkspacePreference_RefreshLightweightButtonText);
+        this.lightweightRefreshButton.setToolTipText(IDEWorkbenchMessages.IDEWorkspacePreference_RefreshLightweightButtonToolTip);
+
+        boolean lightweightRefresh = ResourcesPlugin.getPlugin()
                 .getPluginPreferences().getBoolean(
-                        ResourcesPlugin.PREF_AUTO_REFRESH);
+                		ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH);
+        boolean autoRefresh = ResourcesPlugin.getPlugin()
+		        .getPluginPreferences().getBoolean(
+		                ResourcesPlugin.PREF_AUTO_REFRESH);
+        
         this.autoRefreshButton.setSelection(autoRefresh);
+        this.lightweightRefreshButton.setSelection(lightweightRefresh);
     }
 
     /**
@@ -380,12 +391,15 @@ public class IDEWorkspacePreferencePage extends PreferencePage
         boolean closeUnrelatedProj = store.getDefaultBoolean(IDEInternalPreferences.CLOSE_UNRELATED_PROJECTS);
         closeUnrelatedProjectButton.setSelection(closeUnrelatedProj);
 
-		
-        boolean autoRefresh = ResourcesPlugin.getPlugin()
+        boolean lightweightRefresh = ResourcesPlugin.getPlugin()
                 .getPluginPreferences().getDefaultBoolean(
-                        ResourcesPlugin.PREF_AUTO_REFRESH);
+                		ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH);
+        boolean autoRefresh = ResourcesPlugin.getPlugin()
+		        .getPluginPreferences().getDefaultBoolean(
+		                ResourcesPlugin.PREF_AUTO_REFRESH);
         autoRefreshButton.setSelection(autoRefresh);
-        
+        lightweightRefreshButton.setSelection(lightweightRefresh);
+
         clearUserSettings = true;
 
 		List encodings = WorkbenchEncoding.getDefinedEncodings();
@@ -451,7 +465,9 @@ public class IDEWorkspacePreferencePage extends PreferencePage
 
         boolean autoRefresh = autoRefreshButton.getSelection();
         preferences.setValue(ResourcesPlugin.PREF_AUTO_REFRESH, autoRefresh);
-        
+        boolean lightweightRefresh = lightweightRefreshButton.getSelection();
+        preferences.setValue(ResourcesPlugin.PREF_LIGHTWEIGHT_AUTO_REFRESH, lightweightRefresh);
+
         boolean closeUnrelatedProj = closeUnrelatedProjectButton.getSelection();
         getIDEPreferenceStore().setValue(IDEInternalPreferences.CLOSE_UNRELATED_PROJECTS, closeUnrelatedProj);
         
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java
index be2d738..726f8dd 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java
@@ -11,6 +11,7 @@
 
 package org.eclipse.ui.internal.ide.dialogs;
 
+import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -28,13 +29,17 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.layout.TreeColumnLayout;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.ColumnWeightData;
 import org.eclipse.jface.viewers.IContentProvider;
 import org.eclipse.jface.viewers.ILabelProvider;
@@ -49,8 +54,10 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Font;
@@ -138,6 +145,14 @@ public class LinkedResourceEditor {
 				convertLocation();
 			}
 		});
+		fRemoveButton = createButton(groupComponent,
+				IDEWorkbenchMessages.LinkedResourceEditor_remove);
+		fRemoveButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				removeSelection();
+			}
+		});
+		
 		updateSelection();
 	}
 
@@ -240,14 +255,21 @@ public class LinkedResourceEditor {
 		fTree.getTree().setHeaderVisible(true);
 		createButtons(pageComponent);
 
-		fTree.getTree().addMouseListener(new MouseListener() {
+		fTree.getTree().addMouseListener(new MouseAdapter() {
 			public void mouseDoubleClick(MouseEvent e) {
 		        if (getSelectedResource().length == 1)
 		        	editLocation();
 			}
-			public void mouseDown(MouseEvent e) { }
-			public void mouseUp(MouseEvent e) { }
         });
+		fTree.getTree().addKeyListener(new KeyAdapter() {
+			public void keyPressed(KeyEvent e) {
+				if (e.keyCode == SWT.DEL) {
+					e.doit = false;
+					if (getSelectedResource().length > 0)
+						removeSelection();
+				}
+			}
+		});
 
         return pageComponent;
 	}
@@ -411,7 +433,8 @@ public class LinkedResourceEditor {
 	}
 
 	void refreshContent() {
-		if (fProjectFiles == null) {
+		IResource[] projectFiles;
+		if (!initialized) {
 			final LinkedList/* <IResource> */resources = new LinkedList/*
 																		 * <IResource
 																		 * >
@@ -430,13 +453,21 @@ public class LinkedResourceEditor {
 				});
 			} catch (CoreException e) {
 			}
-			fProjectFiles = (IResource[]) resources.toArray(new IResource[0]);
+			projectFiles = (IResource[]) resources.toArray(new IResource[0]);
+			initialized = true;
+		}
+		else {
+			ArrayList/*<IResource>*/ list = new ArrayList();
+			list.addAll(fBrokenResources.values());
+			list.addAll(fFixedResources.values());
+			list.addAll(fAbsoluteResources.values());
+			projectFiles = (IResource[]) list.toArray(new IResource[0]);
 		}
 		fBrokenResources = new TreeMap/* <String, IResource> */();
 		fFixedResources = new TreeMap/* <String, IResource> */();
 		fAbsoluteResources = new TreeMap/* <String, IResource> */();
-		for (int i = 0; i < fProjectFiles.length; i++) {
-			IResource resource = fProjectFiles[i];
+		for (int i = 0; i < projectFiles.length; i++) {
+			IResource resource = projectFiles[i];
 			String fullPath = resource.getFullPath().toPortableString();
 			try {
 				if (exists(resource)) {
@@ -479,6 +510,7 @@ public class LinkedResourceEditor {
 		fConvertAbsoluteButton.setEnabled((getSelectedResource().length > 0)
 				&& (areAbsolute(getSelectedResource())
 				|| areFixed(getSelectedResource())));
+		fRemoveButton.setEnabled(getSelectedResource().length > 0);
 	}
 
 	boolean areFixed(IResource[] res) {
@@ -520,6 +552,51 @@ public class LinkedResourceEditor {
 		}
 	}
 
+	private void removeSelection() {
+		if (MessageDialog.openConfirm(fRemoveButton.getShell(),
+				IDEWorkbenchMessages.LinkedResourceEditor_removeTitle,
+				IDEWorkbenchMessages.LinkedResourceEditor_removeMessage)) {
+			final IResource[] selectedResources = getSelectedResource();
+			final ArrayList/*<IResource>*/ removedResources = new ArrayList();
+
+			IRunnableWithProgress op = new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor) {
+					try {
+						monitor.beginTask(
+								IDEWorkbenchMessages.LinkedResourceEditor_removingMessage,
+								selectedResources.length);
+						for (int i = 0; i < selectedResources.length; i++) {
+							if (monitor.isCanceled())
+								break;
+							String fullPath = selectedResources[i]
+									.getFullPath().toPortableString();
+							try {
+								selectedResources[i].delete(true, new SubProgressMonitor(monitor, 1));
+								removedResources.add(selectedResources[i]);
+								fBrokenResources.remove(fullPath);
+								fFixedResources.remove(fullPath);
+								fAbsoluteResources.remove(fullPath);
+							} catch (CoreException e) {
+								e.printStackTrace();
+							}
+						}
+					} finally {
+						monitor.done();
+					}
+				}
+			};
+			try {
+				new ProgressMonitorDialog(fRemoveButton.getShell()).run(true,
+						true, op);
+			} catch (InvocationTargetException e) {
+				IDEWorkbenchPlugin.log(null, e);
+			} catch (InterruptedException e) {
+				IDEWorkbenchPlugin.log(null, e);
+			}
+			fTree.refresh();
+		}
+	}
+
 	private void convertToAbsolute(ArrayList/* <IResource> */resources,
 			IResource[] selectedResources) {
 		ArrayList/* <String> */report = new ArrayList/* <String> */();
@@ -927,7 +1004,7 @@ public class LinkedResourceEditor {
 			fTree.refresh();
 	}
 
-	IResource fProjectFiles[] = null;
+	boolean initialized = false;
 	TreeMap/* <String, IResource> */fBrokenResources = new TreeMap/*
 																	 * <String,
 																	 * IResource
@@ -947,6 +1024,7 @@ public class LinkedResourceEditor {
 	TreeViewer fTree;
 	Button fEditResourceButton;
 	Button fConvertAbsoluteButton;
+	Button fRemoveButton;
 
 	Image fixedImg = null;
 	Image brokenImg = null;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java
index 97c30eb..a763554 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,15 @@ package org.eclipse.ui.internal.ide.dialogs;
 
 import java.util.Collections;
 
+import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IStatus;
-
-import org.eclipse.core.resources.IContainer;
-
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.util.Util;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
@@ -30,14 +34,6 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.util.Util;
-import org.eclipse.jface.viewers.IStructuredSelection;
-
 import org.eclipse.ui.IEditorDescriptor;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -48,7 +44,6 @@ import org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog;
 import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
 import org.eclipse.ui.internal.WorkbenchImages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
-import org.eclipse.ui.internal.ide.IIDEHelpContextIds;
 
 
 /**
@@ -75,8 +70,6 @@ public class OpenResourceDialog extends FilteredResourcesSelectionDialog {
 			int typesMask) {
 		super(parentShell, true, container, typesMask);
 		setTitle(IDEWorkbenchMessages.OpenResourceDialog_title);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(parentShell,
-				IIDEHelpContextIds.OPEN_RESOURCE_DIALOG);
 	}
 
 	/* (non-Javadoc)
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java
index 1c2cef5..35cd387 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -381,7 +381,7 @@ public class ProjectContentsLocationArea {
 	/**
 	 * Return the path on the location field.
 	 * 
-	 * @return String
+	 * @return the path or the field's text if the path is invalid
 	 */
 	private String getPathFromLocationField() {
 		URI fieldURI;
@@ -390,7 +390,8 @@ public class ProjectContentsLocationArea {
 		} catch (URISyntaxException e) {
 			return locationPathField.getText();
 		}
-		return fieldURI.getPath();
+		String path= fieldURI.getPath();
+		return path != null ? path : locationPathField.getText();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterEditDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterEditDialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
index 5931721..1be93f5 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,6 @@ import org.eclipse.core.filesystem.URIUtil;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourceAttributes;
 import org.eclipse.core.runtime.CoreException;
@@ -105,6 +104,8 @@ public class ResourceInfoPage extends PropertyPage {
 
 	private static String DERIVED = IDEWorkbenchMessages.ResourceInfo_derived;
 
+	private static String DERIVED_HAS_DERIVED_ANCESTOR = IDEWorkbenchMessages.ResourceInfo_derivedHasDerivedAncestor;
+
 	private static String TYPE_TITLE = IDEWorkbenchMessages.ResourceInfo_type;
 
 	private static String LOCATION_TITLE = IDEWorkbenchMessages.ResourceInfo_location;
@@ -416,36 +417,31 @@ public class ResourceInfoPage extends PropertyPage {
 				setPermissionsSelection(previousPermissionsValue);
 			}
 		}
-		encodingEditor = new ResourceEncodingFieldEditor(
-				getFieldEditorLabel(resource), composite, resource);
-		encodingEditor.setPage(this);
-		encodingEditor.load();
-
-		encodingEditor.setPropertyChangeListener(new IPropertyChangeListener() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
-			 */
-			public void propertyChange(PropertyChangeEvent event) {
-				if (event.getProperty().equals(FieldEditor.IS_VALID)) {
-					setValid(encodingEditor.isValid());
+		//We can't save and load the preferences for closed project
+		if (resource.getProject().isOpen()) {
+			encodingEditor = new ResourceEncodingFieldEditor(
+					getFieldEditorLabel(resource), composite, resource);
+			encodingEditor.setPage(this);
+			encodingEditor.load();
+
+			encodingEditor.setPropertyChangeListener(new IPropertyChangeListener() {
+				/*
+				 * (non-Javadoc)
+				 * 
+				 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+				 */
+				public void propertyChange(PropertyChangeEvent event) {
+					if (event.getProperty().equals(FieldEditor.IS_VALID)) {
+						setValid(encodingEditor.isValid());
+					}
 				}
+			});
 
+			if (resource.getType() == IResource.PROJECT) {
+				lineDelimiterEditor = new LineDelimiterEditor(composite, resource
+						.getProject());
+				lineDelimiterEditor.doLoad();
 			}
-		});
-
-		
-		if (resource.getType() == IResource.PROJECT) {
-			lineDelimiterEditor = new LineDelimiterEditor(composite, resource
-					.getProject());
-			lineDelimiterEditor.doLoad();
-		}
-		
-		//We can't save the preferences for close
-		if (resource.getType() == IResource.PROJECT && !((IProject)resource).isOpen()){
-			encodingEditor.setEnabled(false, composite);
-			lineDelimiterEditor.setEnabled(false);
 		}
 		
 		Dialog.applyDialogFont(composite);
@@ -639,12 +635,17 @@ public class ResourceInfoPage extends PropertyPage {
 	 * 
 	 * @param composite
 	 *            the parent of the button
+	 * @param resource
+	 *            the resource the information is being taken from
 	 */
-	private void createDerivedButton(Composite composite) {
+	private void createDerivedButton(Composite composite, IResource resource) {
 
 		this.derivedBox = new Button(composite, SWT.CHECK | SWT.RIGHT);
 		this.derivedBox.setAlignment(SWT.LEFT);
-		this.derivedBox.setText(DERIVED);
+		if (resource.getParent().isDerived(IResource.CHECK_ANCESTORS))
+			this.derivedBox.setText(DERIVED_HAS_DERIVED_ANCESTOR);
+		else
+			this.derivedBox.setText(DERIVED);
 		this.derivedBox.setSelection(this.previousDerivedValue);
 	}
 
@@ -699,7 +700,7 @@ public class ResourceInfoPage extends PropertyPage {
 			if ((fsAttributes & EFS.ATTRIBUTE_IMMUTABLE) != 0)
 				createImmutableButton(composite);
 		}
-		createDerivedButton(composite);
+		createDerivedButton(composite, resource);
 		// create warning for executable flag
 		if (executableBox != null && resource.getType() == IResource.FOLDER)
 			createExecutableWarning(composite, font);
@@ -904,7 +905,9 @@ public class ResourceInfoPage extends PropertyPage {
 			setPermissionsSelection(defaultPermissionValues);
 		}
 
-		encodingEditor.loadDefault();
+		if (encodingEditor != null) {
+			encodingEditor.loadDefault();
+		}
 
 		if (lineDelimiterEditor != null) {
 			lineDelimiterEditor.loadDefault();
@@ -923,8 +926,6 @@ public class ResourceInfoPage extends PropertyPage {
 		if (resource == null)
 			return true;
 
-		encodingEditor.store();
-
 		if (lineDelimiterEditor != null) {
 			lineDelimiterEditor.store();
 		}
@@ -1005,6 +1006,12 @@ public class ResourceInfoPage extends PropertyPage {
 					IDEWorkbenchMessages.InternalError, exception
 							.getLocalizedMessage(), exception.getStatus());
 			return false;
+		} finally {
+			// This must be invoked after the 'derived' property has been set,
+			// because it may influence the place where encoding is stored.
+			if (encodingEditor != null) {
+				encodingEditor.store();
+			}
 		}
 		return true;
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java
index 85fec84..289bb14 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceTreeAndListGroup.java
@@ -1167,7 +1167,15 @@ public class ResourceTreeAndListGroup extends EventManager implements
      */
     public void setFocus() {
 
-        this.treeViewer.getTree().setFocus();
+        treeViewer.getTree().setFocus();
+        if(treeViewer.getSelection().isEmpty()) {
+        	Object[] elements = treeContentProvider.getElements(root);
+        	if(elements.length > 0) {
+        		StructuredSelection selection = new StructuredSelection(elements[0]);
+        		treeViewer.setSelection(selection);
+        	}
+        }
+        	
     }
 
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/messages.properties b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/messages.properties
index e6feaa0..a733c55 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/messages.properties
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
+# Copyright (c) 2006, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -10,4 +10,4 @@
 ###############################################################################
 
 DefaultFileSystem_name = default
-FileSystemSelection_title = Choose file system:
\ No newline at end of file
+FileSystemSelection_title = Choose file s&ystem:
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/OpenResourceHandler.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/OpenResourceHandler.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties
index 5b64168..a8e9009 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@
 #     Serge Beauchamp (Freescale Semiconductor) - [252996] Resource filters
 #     Serge Beauchamp (Freescale Semiconductor) - [229633] Group Support
 #     Markus Schorn (Wind River Systems) -  bug 284447
+#     James Blackburn (Broadcom Corp.)   - bug 340978
 ###############################################################################
 
 # package: org.eclipse.ui.ide
@@ -53,7 +54,7 @@ IDEIdleHelper_backgroundGC = Collecting garbage
 ############################################################
 showAdvanced = &Advanced >>
 hideAdvanced = << &Advanced
-editfilters = Resource &Filters...
+editfilters = Resource F&ilters...
 useDefaultLocation=Use &default location
 createLinkedFolder=Link to alternate location (&Linked Folder)
 createVirtualFolder=Folder is not located in the file system (Vi&rtual Folder)
@@ -474,8 +475,10 @@ IDEWorkspacePreference_autobuild = &Build automatically
 IDEWorkspacePreference_autobuildToolTip = Build automatically on resource modification
 IDEWorkspacePreference_savePriorToBuilding= Save auto&matically before build
 IDEWorkspacePreference_savePriorToBuildingToolTip= Save modified resources automatically before manual build
-IDEWorkspacePreference_RefreshButtonText=&Refresh automatically
-IDEWorkspacePreference_RefreshButtonToolTip=Automatically refresh external workspace changes
+IDEWorkspacePreference_RefreshButtonText=&Refresh using native hooks or polling
+IDEWorkspacePreference_RefreshButtonToolTip=Automatically refresh external workspace changes using native hooks or polling
+IDEWorkspacePreference_RefreshLightweightButtonText=Refresh on acce&ss
+IDEWorkspacePreference_RefreshLightweightButtonToolTip=Automatically refresh external workspace changes on access via the workspace
 IDEWorkspacePreference_fileLineDelimiter=New text &file line delimiter
 IDEWorkspacePreference_defaultLineDelim=D&efault
 IDEWorkspacePreference_defaultLineDelimProj=Inh&erited from container
@@ -570,6 +573,7 @@ ResourceInfo_executable = E&xecutable
 ResourceInfo_locked = L&ocked
 ResourceInfo_archive = Ar&chive
 ResourceInfo_derived = Deri&ved
+ResourceInfo_derivedHasDerivedAncestor = Deri&ved (has derived ancestor)
 ResourceInfo_type = &Type:
 ResourceInfo_location = &Location:
 ResourceInfo_resolvedLocation = Resolved locatio&n:
@@ -643,8 +647,9 @@ ResourceInfo_fileNotExist = {0} - (does not exist)
 ResourceInfo_path = &Path:
 ResourceInfo_lastModified = Last &modified:
 ResourceInfo_fileEncodingTitle = Default encoding for &text files
-ResourceInfo_fileContentEncodingFormat = &Default (determined from content: {0})
-ResourceInfo_fileContainerEncodingFormat = Default (&inherited from container: {0})
+ResourceInfo_fileContentEncodingFormat = D&efault (determined from content: {0})
+ResourceInfo_fileContentTypeEncodingFormat = D&efault (determined from content type: {0})
+ResourceInfo_fileContainerEncodingFormat = D&efault (inherited from container: {0})
 ResourceInfo_containerEncodingFormat = &Inherited from container ({0})
 ResourceInfo_exWarning= Removing the executable flag on a folder will cause its children to become unreadable.
 ResourceInfo_edit=&Edit...
@@ -668,6 +673,7 @@ ProjectLinkedResourcePage_linkedResourcesTabTitle=Linked Resources
 # --- Linked Resource Editor ---
 LinkedResourceEditor_editLinkedLocation=&Edit...
 LinkedResourceEditor_convertToVariableLocation=&Convert...
+LinkedResourceEditor_remove=&Delete...
 LinkedResourceEditor_resourceName=Resource Name
 LinkedResourceEditor_path=Path
 LinkedResourceEditor_location=Location
@@ -685,7 +691,9 @@ LinkedResourceEditor_convertAbsolutePathLocations=Convert Absolute Path Location
 LinkedResourceEditor_descriptionBlock=Linked resources in project ''{0}'':
 LinkedResourceEditor_convertTitle = Convert linked resource locations
 LinkedResourceEditor_convertMessage = Are you sure you want to convert the linked resource location(s) between absolute and variable relative paths?  This operation cannot be undone.  
-
+LinkedResourceEditor_removeTitle = Delete linked resources
+LinkedResourceEditor_removeMessage = Are you sure you want to delete the selected linked resources?  This operation cannot be undone.  
+LinkedResourceEditor_removingMessage=Deleting linked resources...
 # ==============================================================================
 # Editors
 # ==============================================================================
@@ -915,6 +923,7 @@ ResourceEncodingFieldEditor_ErrorLoadingMessage=Error loading encoding
 ResourceEncodingFieldEditor_ErrorStoringMessage=Error storing encoding
 ResourceEncodingFieldEditor_EncodingConflictTitle=Conflict in Encoding
 ResourceEncodingFieldEditor_EncodingConflictMessage= {0} conflicts with the encoding defined in the content type ({1}). Do you wish to set it anyways?
+ResourceEncodingFieldEditor_SeparateDerivedEncodingsLabel=&Store the encoding of derived resources separately
 
 ChooseWorkspaceDialog_dialogName=Workspace Launcher
 ChooseWorkspaceDialog_dialogTitle=Select a workspace
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/AndFileInfoMatcher.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/AndFileInfoMatcher.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/NotFileInfoMatcher.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/NotFileInfoMatcher.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/OrFileInfoMatcher.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/OrFileInfoMatcher.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/StringFileInfoMatcher.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/StringFileInfoMatcher.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java
index 1a3b6bb..a252fbe 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Fair Isaac Corporation <Hemant.Singh at Gmail.com> - http://bugs.eclipse.org/333590
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.model;
 
@@ -21,6 +22,8 @@ import org.eclipse.ui.IElementFactory;
 import org.eclipse.ui.IPersistableElement;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.model.IWorkbenchAdapter2;
+import org.eclipse.ui.model.IWorkbenchAdapter3;
 
 /**
  * Dispenses adapters for various core objects.
@@ -81,7 +84,9 @@ public class WorkbenchAdapterFactory implements IAdapterFactory {
         if (adapterType.isInstance(o)) {
             return o;
         }
-        if (adapterType == IWorkbenchAdapter.class) {
+        if (adapterType == IWorkbenchAdapter.class
+                || adapterType == IWorkbenchAdapter2.class
+                || adapterType == IWorkbenchAdapter3.class) {
             return getWorkbenchElement(o);
         }
         if (adapterType == IPersistableElement.class) {
@@ -111,8 +116,10 @@ public class WorkbenchAdapterFactory implements IAdapterFactory {
      * @return the collection of adapter types
      */
     public Class[] getAdapterList() {
-        return new Class[] { IWorkbenchAdapter.class, IElementFactory.class,
-                IPersistableElement.class, IActionFilter.class, IUndoContext.class };
+        return new Class[] { IWorkbenchAdapter.class, IWorkbenchAdapter2.class,
+                IWorkbenchAdapter3.class, IElementFactory.class,
+                IPersistableElement.class, IActionFilter.class,
+                IUndoContext.class };
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/AbstractResourceDescription.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/AbstractResourceDescription.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersView.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersView.java
index d6cbbba..a5d24a3 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersView.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersView.java
@@ -1,6 +1,6 @@
 package org.eclipse.ui.internal.views.markers;
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,10 +9,13 @@ package org.eclipse.ui.internal.views.markers;
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.commands.operations.ObjectUndoContext;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.views.markers.MarkerSupportView;
 import org.eclipse.ui.views.markers.internal.MarkerSupportRegistry;
 
+
 /**
  * AllMarkersView is the view that shows all markers.
  * @since 3.4
@@ -27,4 +30,17 @@ public class AllMarkersView extends MarkerSupportView {
 		super(MarkerSupportRegistry.ALL_MARKERS_GENERATOR);
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.internal.views.markers.ExtendedMarkersView#getUndoContext()
+	 * @since 3.7
+	 */
+	protected IUndoContext getUndoContext() {
+		ObjectUndoContext context= new ObjectUndoContext(new Object(), "All Markers Context"); //$NON-NLS-1$
+		context.addMatch(WorkspaceUndoUtil.getBookmarksUndoContext());
+		context.addMatch(WorkspaceUndoUtil.getTasksUndoContext());
+		context.addMatch(WorkspaceUndoUtil.getProblemsUndoContext());
+		return context;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java
index d746c61..b7c8a5f 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,12 +8,17 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
-
 package org.eclipse.ui.internal.views.markers;
 
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.views.markers.MarkerSupportView;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
 import org.eclipse.ui.views.markers.internal.MarkerSupportRegistry;
 
+
 /**
  * The BookmarksView is the ide view for bookmarks.
  * @since 3.4
@@ -28,4 +33,23 @@ public class BookmarksView extends MarkerSupportView {
 		super(MarkerSupportRegistry.BOOKMARKS_GENERATOR);
 		
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getUndoContext()
+	 * @since 3.7
+	 */
+	protected IUndoContext getUndoContext() {
+		return WorkspaceUndoUtil.getBookmarksUndoContext();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.internal.views.markers.ExtendedMarkersView#getDeleteOperationName(org.eclipse.core.resources.IMarker[])
+	 * @since 3.7
+	 */
+	protected String getDeleteOperationName(IMarker[] markers) {
+		Assert.isLegal(markers.length > 0);
+		return markers.length == 1 ? MarkerMessages.deleteBookmarkMarker_operationName : MarkerMessages.deleteBookmarkMarkers_operationName;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java
index 602ecd9..4b688ea 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java
@@ -12,7 +12,6 @@ package org.eclipse.ui.internal.views.markers;
 
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.IHandler;
-import org.eclipse.jface.util.ConfigureColumns;
 import org.eclipse.ui.views.markers.MarkerViewHandler;
 
 /**
@@ -33,7 +32,7 @@ public class ConfigureColumnsHandler extends MarkerViewHandler implements IHandl
 		ExtendedMarkersView view = getView(event);
 		if (view == null)
 			return this;
-		ConfigureColumns.forTree(view.getViewer().getTree(), view.getSite());
+		new MarkersViewColumnsDialog(view).open();
 		return this;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java
index 29e6dfe..96c20ff 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,17 +11,17 @@
 package org.eclipse.ui.internal.views.markers;
 
 import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.WorkspaceJob;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ui.ide.undo.DeleteMarkersOperation;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
-import org.eclipse.ui.internal.ide.Policy;
 import org.eclipse.ui.views.markers.MarkerSupportView;
 import org.eclipse.ui.views.markers.MarkerViewHandler;
 import org.eclipse.ui.views.markers.internal.MarkerMessages;
@@ -39,9 +39,9 @@ public class DeleteHandler extends MarkerViewHandler {
 	 * 
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
-	public Object execute(ExecutionEvent event) throws ExecutionException {
+	public Object execute(ExecutionEvent event) {
 
-		MarkerSupportView view = getView(event);
+		final MarkerSupportView view = getView(event);
 		if (view == null)
 			return this;
 
@@ -61,25 +61,19 @@ public class DeleteHandler extends MarkerViewHandler {
 			return view;
 		}
 		
-		WorkspaceJob deleteJob = new WorkspaceJob(IDEWorkbenchMessages.MarkerDeleteHandler_JobTitle){	//See Bug#250807
-				public IStatus runInWorkspace(IProgressMonitor monitor)
-				throws CoreException {
-					monitor.beginTask(IDEWorkbenchMessages.MarkerDeleteHandler_JobMessageLabel, 10*selected.length);
-					try {
-						for (int i = 0; i < selected.length; i++) {
-							if(monitor.isCanceled())return Status.CANCEL_STATUS;
-							selected[i].delete();
-							monitor.worked(10);
-						}
-					} catch (CoreException e) {
-						Policy.handle(e);
-						throw e;
-					}finally{
-						monitor.done();
-					}
-					return Status.OK_STATUS;
-	 			}
-			};
+		WorkspaceJob deleteJob= new WorkspaceJob(IDEWorkbenchMessages.MarkerDeleteHandler_JobTitle) { //See Bug#250807
+			public IStatus runInWorkspace(IProgressMonitor monitor) {
+				monitor.beginTask(IDEWorkbenchMessages.MarkerDeleteHandler_JobMessageLabel, 10 * selected.length);
+				try {
+					IUndoableOperation op= new DeleteMarkersOperation(selected, view.getDeleteOperationName(selected));
+					op.addContext(view.getUndoContext());
+					execute(op, MarkerMessages.deleteMarkers_errorMessage, monitor, WorkspaceUndoUtil.getUIInfoAdapter(view.getSite().getShell()));
+				} finally {
+					monitor.done();
+				}
+				return Status.OK_STATUS;
+			}
+		};
 		deleteJob.setUser(true);
 		deleteJob.schedule();
 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java
index f302bc6..e466a6e 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,7 +8,6 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.ui.internal.views.markers;
 
 import java.util.ArrayList;
@@ -17,9 +16,11 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.help.IContext;
@@ -51,6 +52,8 @@ import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.events.HelpEvent;
 import org.eclipse.swt.events.HelpListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
@@ -71,17 +74,21 @@ import org.eclipse.ui.IPartListener2;
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchPartReference;
 import org.eclipse.ui.OpenAndLinkWithEditorHelper;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.ide.ResourceUtil;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.ide.StatusUtil;
 import org.eclipse.ui.menus.IMenuService;
+import org.eclipse.ui.operations.RedoActionHandler;
+import org.eclipse.ui.operations.UndoActionHandler;
 import org.eclipse.ui.part.MarkerTransfer;
 import org.eclipse.ui.part.ViewPart;
 import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
@@ -95,6 +102,7 @@ import org.eclipse.ui.views.markers.internal.MarkerSupportRegistry;
 
 import com.ibm.icu.text.MessageFormat;
 
+
 /**
  * The ExtendedMarkersView is the internal implementation of the view that shows
  * markers using the markerGenerators extension point.
@@ -118,11 +126,11 @@ public class ExtendedMarkersView extends ViewPart {
 	 */
 	public final Object MARKERSVIEW_UPDATE_JOB_FAMILY = new Object();
 
+	static final String MARKER_FIELD = "MARKER_FIELD"; //$NON-NLS-1$
+	
 	private static int instanceCount = 1;
 	private static final String TAG_GENERATOR = "markerContentGenerator"; //$NON-NLS-1$
 
-	private static final String MARKER_FIELD = "MARKER_FIELD"; //$NON-NLS-1$
-
 	private static final String TAG_EXPANDED = "expanded"; //$NON-NLS-1$
 
 	private static final String TAG_CATEGORY = "category"; //$NON-NLS-1$
@@ -138,6 +146,13 @@ public class ExtendedMarkersView extends ViewPart {
 	private UIUpdateJob uiUpdateJob;
 	
 	private MarkersTreeViewer viewer;
+
+	/**
+	 * Tells whether the tree has been painted.
+	 * @since 3.7
+	 */
+	private boolean treePainted= false;
+	
 	private ISelectionListener pageSelectionListener;
 	private IPartListener2 partListener;
 	private Clipboard clipboard;
@@ -147,6 +162,11 @@ public class ExtendedMarkersView extends ViewPart {
 	private IMemento memento;
 	private String[] defaultGeneratorIds = new String[0];
 
+	private UndoActionHandler undoAction;
+
+	private RedoActionHandler redoAction;
+
+
 	/**
 	 * Return a new instance of the receiver.
 	 * 
@@ -241,8 +261,19 @@ public class ExtendedMarkersView extends ViewPart {
 				/*| SWT.VIRTUAL */| SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION));
 		viewer.getTree().setLinesVisible(true);
 		viewer.setUseHashlookup(true);
-		createColumns(new TreeColumn[0]);
+		createColumns(new TreeColumn[0], new int[0]);
 		viewer.setContentProvider(getContentProvider());
+
+		/*
+		 * Workaround for TeeColumn.getWidth() returning 0 in some cases, see
+		 * https://bugs.eclipse.org/341865 for details.
+		 */
+		viewer.getTree().addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				treePainted= true;
+				viewer.getTree().removePaintListener(this);
+			}
+		});
 	}
 
 	/**
@@ -250,22 +281,18 @@ public class ExtendedMarkersView extends ViewPart {
 	 * 
 	 * @param currentColumns
 	 *            the columns to refresh
+	 * @param widths 
 	 */
-	private void createColumns(TreeColumn[] currentColumns) {
+	private void createColumns(TreeColumn[] currentColumns, int[] widths) {
 
 		Tree tree = viewer.getTree();
 		TableLayout layout = new TableLayout();
 
 		MarkerField[] fields = generator.getVisibleFields();
 
-		IMemento columnWidths = null;
-		if (memento != null)
-			columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
-
 		for (int i = 0; i < fields.length; i++) {
 			MarkerField markerField = fields[i];
-
-			TreeViewerColumn column;
+			TreeViewerColumn column = null;
 			if (i < currentColumns.length)
 				column = new TreeViewerColumn(viewer, currentColumns[i]);
 			else {
@@ -290,27 +317,20 @@ public class ExtendedMarkersView extends ViewPart {
 			if (builder.getPrimarySortField().equals(markerField))
 				updateDirectionIndicator(column.getColumn(), markerField);
 
-			int columnWidth = -1;
-
-			if (i == 0) {
-				// Compute and store a font metric
-				GC gc = new GC(tree);
-				gc.setFont(tree.getFont());
-				FontMetrics fontMetrics = gc.getFontMetrics();
-				gc.dispose();
-				columnWidth = Math.max(markerField.getDefaultColumnWidth(tree),
-						fontMetrics.getAverageCharWidth() * 5);
+			IMemento columnWidths = null;
+			if (memento != null){
+				columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
 			}
-
+			
+			//adjust the column width
+			int columnWidth = i < widths.length ? widths[i] : -1;
+			columnWidth = getFieldWidth(markerField, columnWidth, false);
 			if (columnWidths != null) {
-				Integer value = columnWidths.getInteger(getFieldId(column
-						.getColumn()));
-
-				// Make sure we get a useful value
-				if (value != null && value.intValue() > 0)
-					columnWidth = value.intValue();
+				// save it
+				columnWidths.putInteger(
+						markerField.getConfigurationElement().getAttribute(
+						MarkerSupportInternalUtilities.ATTRIBUTE_ID), columnWidth);
 			}
-
 			// Take trim into account if we are using the default value, but not
 			// if it is restored.
 			if (columnWidth < 0)
@@ -318,14 +338,12 @@ public class ExtendedMarkersView extends ViewPart {
 						.getDefaultColumnWidth(tree), true, true));
 			else
 				layout.addColumnData(new ColumnPixelData(columnWidth, true));
-
 		}
 
 		// Remove extra columns
 		if (currentColumns.length > fields.length) {
 			for (int i = fields.length; i < currentColumns.length; i++) {
 				currentColumns[i].dispose();
-
 			}
 		}
 
@@ -336,6 +354,48 @@ public class ExtendedMarkersView extends ViewPart {
 
 	}
 
+	/**
+	 * 
+	 * @param markerField
+	 * @param preferredWidth
+	 * @param considerUIWidths
+	 * @return desired width for the column representing markerField
+	 */
+	int getFieldWidth(MarkerField markerField, int preferredWidth, boolean considerUIWidths) {
+		Tree tree = getViewer().getTree();
+
+		if (considerUIWidths) {
+			TreeColumn[] columns= tree.getColumns();
+			for (int i= 0; i < columns.length; i++) {
+				if (markerField.equals(columns[i].getData(MARKER_FIELD))) {
+					return columns[i].getWidth();
+				}
+			}
+		}
+
+		if (preferredWidth < 0 && memento != null) {
+			IMemento columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
+			if (columnWidths != null) {
+				Integer value = columnWidths.getInteger(markerField
+						.getConfigurationElement().getAttribute(
+								MarkerSupportInternalUtilities.ATTRIBUTE_ID));
+				// Make sure we get a useful value
+				if (value != null && value.intValue() >= 0)
+					preferredWidth = value.intValue();
+			}
+		}
+		if (preferredWidth <= 0) {
+			// Compute and store a font metric
+			GC gc = new GC(tree);
+			gc.setFont(tree.getFont());
+			FontMetrics fontMetrics = gc.getFontMetrics();
+			gc.dispose();
+			preferredWidth = Math.max(markerField.getDefaultColumnWidth(tree),
+					fontMetrics.getAverageCharWidth() * 5);
+		}
+		return preferredWidth;
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -363,6 +423,14 @@ public class ExtendedMarkersView extends ViewPart {
 
 		getSite().setSelectionProvider(viewer);
 
+		IUndoContext undoContext= getUndoContext();
+		undoAction= new UndoActionHandler(getSite(), undoContext);
+		undoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_UNDO);
+		redoAction= new RedoActionHandler(getSite(), undoContext);
+		redoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_REDO);
+		getViewSite().getActionBars().setGlobalActionHandler(ActionFactory.UNDO.getId(), undoAction);
+		getViewSite().getActionBars().setGlobalActionHandler(ActionFactory.REDO.getId(), redoAction);
+
 		startView();
 
 	}
@@ -542,6 +610,10 @@ public class ExtendedMarkersView extends ViewPart {
 
 		getSite().getPage().removePostSelectionListener(pageSelectionListener);
 		getSite().getPage().removePartListener(partListener);
+
+		undoAction.dispose();
+		redoAction.dispose();
+
 		super.dispose();
 	}
 
@@ -657,7 +729,7 @@ public class ExtendedMarkersView extends ViewPart {
 	 * 
 	 */
 	private IContentProvider getContentProvider() {
-		return new MarkerViewerContentProvider();
+		return new MarkerViewerContentProvider(this);
 	}
 
 	/**
@@ -761,7 +833,12 @@ public class ExtendedMarkersView extends ViewPart {
 			 * IWorkbenchPartReference)
 			 */
 			public void partHidden(IWorkbenchPartReference partRef) {
-				// Do nothing by default
+				if (partRef.getId().equals(getSite().getId())) {
+					Markers markers = getActiveViewerInputClone();
+					Integer[] counts = markers.getMarkerCounts();
+					setTitleToolTip(getStatusMessage(markers, counts));
+				}
+
 			}
 
 			/*
@@ -792,11 +869,11 @@ public class ExtendedMarkersView extends ViewPart {
 			 * IWorkbenchPartReference)
 			 */
 			public void partVisible(IWorkbenchPartReference partRef) {
-				if (partRef.getId().equals(
-						ExtendedMarkersView.this.getSite().getId())) {
+				if (partRef.getId().equals(getSite().getId())) {
 					pageSelectionListener.selectionChanged(getSite().getPage()
 							.getActivePart(), getSite().getPage()
 							.getSelection());
+					setTitleToolTip(null);
 				}
 
 			}
@@ -842,29 +919,37 @@ public class ExtendedMarkersView extends ViewPart {
 	/**
 	 * Get the status message for the title and status line.
 	 * 
+	 * @param markers the markers for which to get the status message
+	 * @param counts an array of {@link Integer} where index indicates
+	 *            [errors,warnings,infos,others]
 	 * @return String
 	 */
-	private String getStatusMessage() {
-		Markers markers=getActiveViewerInputClone();
+	private String getStatusMessage(Markers markers, Integer[] counts) {
 		String status = MarkerSupportInternalUtilities.EMPTY_STRING;
 		int totalCount = builder.getTotalMarkerCount(markers);
 		int filteredCount = 0;
+		boolean markerLimitsEnabled = generator.isMarkerLimitsEnabled();
+		int markerLimit = generator.getMarkerLimits();
 		MarkerSupportItem[] categories = markers.getCategories();
 		// Categories might be null if building is still happening
 		if (categories != null && builder.isShowingHierarchy()) {
-			int markerLimit = MarkerSupportInternalUtilities.getMarkerLimit();
 
 			for (int i = 0; i < categories.length; i++) {
-				filteredCount += markerLimit < 0 ? categories[i]
-						.getChildrenCount() : Math.min(categories[i]
-						.getChildrenCount(), markerLimit);
+				
+				int childCount = categories[i].getChildrenCount();
+				if (markerLimitsEnabled)
+					childCount = Math.min(childCount, markerLimit);
+
+				filteredCount += childCount;
+				
 			}
 		} else {
-			filteredCount = MarkerSupportInternalUtilities.getMarkerLimit();
+			if(markerLimitsEnabled)
+				filteredCount = markerLimit;
+			else
+				filteredCount = -1;
 		}
 
-		Integer[] counts = markers.getMarkerCounts();
-
 		// Any errors or warnings? If not then send the filtering message
 		if (counts[0].intValue() == 0 && counts[1].intValue() == 0) {
 			if (filteredCount < 0 || filteredCount >= totalCount) {
@@ -1061,15 +1146,6 @@ public class ExtendedMarkersView extends ViewPart {
 	}
 
 	/**
-	 * Set the generator for the view.
-	 * 
-	 * @param generator
-	 */
-	void internalSetGenerator(MarkerContentGenerator generator) {
-		this.generator=generator;
-	}
-
-	/**
 	 * @return Returns the generator.
 	 */
 	MarkerContentGenerator getGenerator() {
@@ -1191,11 +1267,19 @@ public class ExtendedMarkersView extends ViewPart {
 		int[] positions = viewer.getTree().getColumnOrder();
 		for (int i = 0; i < fields.length; i++) {
 			TreeColumn column = viewer.getTree().getColumn(i);
-			columnEntry.putInteger(getFieldId(column), column.getWidth());
-			fields[positions[i]] = (MarkerField) column.getData(MARKER_FIELD);
+			MarkerField markerField= (MarkerField)column.getData(MARKER_FIELD);
+
+			/*
+			 * Workaround for TeeColumn.getWidth() returning 0 in some cases, see
+			 * https://bugs.eclipse.org/341865 for details.
+			 */
+			int width= getFieldWidth(markerField, -1, treePainted);
+
+			columnEntry.putInteger(getFieldId(column), width);
+			fields[positions[i]]= markerField;
 		}
 		if (generator != null) {
-			generator.saveSate(memento, fields);
+			generator.saveState(memento, fields);
 		}
 		builder.saveState(memento);
 	}
@@ -1217,19 +1301,6 @@ public class ExtendedMarkersView extends ViewPart {
 		builder.setCategoryGroup(group);
 	}
 
-	/**
-	 * Set the content generator for the receiver and update.
-	 * 
-	 * @param generator
-	 */
-	void setContentGenerator(MarkerContentGenerator generator) {
-		viewer.setSelection(new StructuredSelection());
-		viewer.removeAndClearAll();
-		internalSetGenerator(generator);
-		createColumns(viewer.getTree().getColumns());
-		builder.setGenerator(generator);
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -1389,10 +1460,30 @@ public class ExtendedMarkersView extends ViewPart {
 	}
 
 	/**
-	 * Update the title of the view.
+	 * Update the title and description of the view.
 	 */
 	void updateTitle() {
-		setContentDescription(getStatusMessage());
+		Markers markers = getActiveViewerInputClone();
+		Integer[] counts = markers.getMarkerCounts();
+		String statusMessage = getStatusMessage(markers, counts);
+
+		setContentDescription(statusMessage);
+
+		if (!"".equals(getTitleToolTip())) { //$NON-NLS-1$
+			setTitleToolTip(statusMessage);
+		}
+
+		updateTitleImage(counts);
+	}
+
+	/**
+	 * Updates this view's title image.
+	 * 
+	 * @param counts an array of {@link Integer} where index indicates
+	 *            [errors,warnings,infos,others]
+	 * @since 3.7
+	 */
+	void updateTitleImage(Integer[] counts) {
 	}
 
 	/**
@@ -1458,11 +1549,11 @@ public class ExtendedMarkersView extends ViewPart {
 	/**
 	 * @param visible
 	 */
-	void setVisibleFields(Collection visible) {
+	void setVisibleFields(Collection visible,int[] widths) {
 		generator.setVisibleFields(visible);
 		//viewer.setSelection(new StructuredSelection());
 		//viewer.removeAndClearAll();
-		createColumns(viewer.getTree().getColumns());
+		createColumns(viewer.getTree().getColumns(), widths);
 		scheduleUpdate(0L);
 	}
 
@@ -1627,24 +1718,7 @@ public class ExtendedMarkersView extends ViewPart {
 			try {
 				IDE.openEditor(page, marker, OpenStrategy.activateOnOpen());
 			} catch (PartInitException e) {
-
-				// Check for a nested CoreException
-				IStatus status = e.getStatus();
-				if (status != null
-						&& status.getException() instanceof CoreException) {
-					status = ((CoreException) status.getException())
-							.getStatus();
-				}
-
-				if (status == null)
-					StatusManager.getManager().handle(
-							StatusUtil.newStatus(IStatus.ERROR, e.getMessage(),
-									e), StatusManager.SHOW);
-
-				else
-					StatusManager.getManager().handle(status,
-							StatusManager.SHOW);
-
+				MarkerSupportInternalUtilities.showViewError(e);
 			}
 		}
 	}
@@ -1698,4 +1772,27 @@ public class ExtendedMarkersView extends ViewPart {
 		}
 		
 	}
+
+	/**
+	 * Return the undo context associated with operations performed in this view. By default, return
+	 * the workspace undo context. Subclasses should override if a more specific undo context should
+	 * be used.
+	 *
+	 * @since 3.7
+	 */
+	protected IUndoContext getUndoContext() {
+		return (IUndoContext)ResourcesPlugin.getWorkspace().getAdapter(IUndoContext.class);
+	}
+
+	/**
+	 * Returns the name of the delete operation.
+	 * 
+	 * @param markers the markers to be deleted, must have at least one element
+	 * @since 3.7
+	 */
+	protected String getDeleteOperationName(IMarker[] markers) {
+		Assert.isLegal(markers.length > 0);
+		return markers.length == 1 ? MarkerMessages.deleteMarker_operationName : MarkerMessages.deleteMarkers_operationName;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
index fd59a6d..52fecf2 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,42 +16,50 @@ package org.eclipse.ui.internal.views.markers;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 
-import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.IInputValidator;
 import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.Util;
+import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
 import org.eclipse.ui.forms.events.ExpansionEvent;
-import org.eclipse.ui.forms.events.IExpansionListener;
 import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.internal.ide.IDEInternalPreferences;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.preferences.ViewSettingsDialog;
 import org.eclipse.ui.views.markers.FilterConfigurationArea;
@@ -66,40 +74,41 @@ import org.eclipse.ui.views.markers.internal.MarkerMessages;
 public class FiltersConfigurationDialog extends ViewSettingsDialog {
 
 	private static final String SELECTED_FILTER_GROUP = "SELECTED_FILTER_GROUP"; //$NON-NLS-1$
+	private static final String PREV_SELECTED_ELEMENTS = "PREV_SELECTED_ELEMENTS"; //$NON-NLS-1$
 
 	private Collection filterGroups;
 
-	private CheckboxTableViewer filtersList;
-
-	private GroupFilterConfigurationArea scopeArea = new ScopeArea();
+	private CheckboxTableViewer configsTable;
 
 	private MarkerFieldFilterGroup selectedFilterGroup;
 
-	private ScrolledForm form;
-
 	private MarkerContentGenerator generator;
 
-	private Collection filterAreas;
-
 	private boolean andFilters = false;
 
 	private Button removeButton;
-
 	private Button renameButton;
 	
-	private Button cloneButton;
-
+	private Button allButton;
 	private Button andButton;
-
 	private Button orButton;
 
-	private Label andOrLabel;
+	private Button limitButton;
+	private Text limitText;
+
+	private GroupFilterConfigurationArea scopeArea = new ScopeArea();
+	private ScrolledForm form;
+
+	private Collection configAreas;
+	private Label limitsLabel;
+	
+	private Object[] previouslyChecked = new Object[0];
 
 	/**
 	 * Create a new instance of the receiver on builder.
 	 * 
 	 * @param parentShell
-	 * @param generator 
+	 * @param generator
 	 */
 	public FiltersConfigurationDialog(Shell parentShell,
 			MarkerContentGenerator generator) {
@@ -121,68 +130,311 @@ public class FiltersConfigurationDialog extends ViewSettingsDialog {
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jface.dialogs.Dialog#close()
+	 * @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
+	 * configureShell(org.eclipse.swt.widgets.Shell)
 	 */
-	public boolean close() {
-		saveDialogSettings();
-		return super.close();
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(MarkerMessages.configureFiltersDialog_title);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
+	 */
+	protected boolean isResizable() {
+		return true;
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 * @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
+	 * createDialogContentArea(org.eclipse.swt.widgets.Composite)
 	 */
 	protected Control createDialogArea(Composite parent) {
 
-		parent.getShell().setText(MarkerMessages.configureFiltersDialog_title);
+		Composite container = new Composite(parent, SWT.NONE);
+		container.setLayout(new GridLayout());
+		container.setLayoutData(new GridData(GridData.FILL_BOTH));
+		container.setFont(parent.getFont());
+		
+		Composite composite = new Composite(container, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginHeight = 0;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		composite.setBackground(container.getBackground());
+
+		createAndOrButtons(composite);
 
-		Composite top = (Composite) super.createDialogArea(parent);
+		Group configComposite = new Group(composite, SWT.NONE);
+		configComposite.setText(MarkerMessages.MarkerConfigurationsLabel);
 
-		initializeDialogUnits(top);
+		configComposite.setLayout(new GridLayout(3, false));
+		GridData configData = new GridData(GridData.FILL_BOTH);
+		configData.horizontalIndent = 20;
+		configComposite.setLayoutData(configData);
+		configComposite.setBackground(composite.getBackground());
 
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 3;
-		layout.makeColumnsEqualWidth = false;
-		top.setLayout(layout);
+		createConfigs(configComposite);
 
-		createFilterSelectionArea(top);
-		
-		Label seprator=new Label(top, SWT.SEPARATOR|SWT.VERTICAL);
-		seprator.setLayoutData(new GridData(SWT.NONE, SWT.FILL, false, true));
+		createConfigDesc(configComposite);
+
+		createMarkerLimits(composite);
+
+		Label separator = new Label(parent, SWT.HORIZONTAL | SWT.SEPARATOR);
+		separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+		applyDialogFont(container);
+
+		initUI();
+
+		return container;
+	}
+
+	private void initUI() {
+
+		configsTable.setInput(filterGroups);
+		IStructuredSelection selection = getInitialSelection();
+		configsTable.setSelection(selection);
+		if (selection.isEmpty()) {
+			setFieldsEnabled(false);
+		}
+
+		Iterator iterator = filterGroups.iterator();
+		while (iterator.hasNext()) {
+			MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) iterator
+					.next();
+			boolean enabled = group.isEnabled();
+			configsTable.setChecked(group, enabled);
+		}
+
+		andButton.setSelection(andFilters);
+		orButton.setSelection(!andFilters);
+		updateRadioButtonsFromTable();
+		int limits = generator.getMarkerLimits();
+		boolean limitsEnabled = generator.isMarkerLimitsEnabled();
+		limitButton.setSelection(limitsEnabled);
+		limitsLabel.setEnabled(limitsEnabled);
+		limitText.setEnabled(limitsEnabled);
+		limitText.setText(Integer.toString(limits));
+		configsTable.getTable().setFocus();
+
+	}
+
+	private void updateRadioButtonsFromTable() {
+
+		boolean showAll = isShowAll();
+		allButton.setSelection(showAll);
+		andButton.setEnabled(!showAll);
+		orButton.setEnabled(!showAll);
+	}
+
+	private void updateShowAll(boolean showAll) {
+
+		allButton.setSelection(showAll);
+		andButton.setEnabled(!showAll);
+		orButton.setEnabled(!showAll);
+		if (showAll) {
+			previouslyChecked = configsTable.getCheckedElements();
+			configsTable.setAllChecked(false);
+		} else {
+			if (previouslyChecked != null && previouslyChecked.length > 0) {
+				configsTable.setCheckedElements(previouslyChecked);
+			} else {
+				// make the first entry checked
+				if (filterGroups.size() > 0) {
+					Object group = filterGroups.iterator().next();
+					configsTable.setChecked(group, true);
+				}
+			}
+		}
+	}
+
+	private boolean isShowAll() {
+		return configsTable.getCheckedElements().length == 0;
+	}
+
+	/**
+	 * @param parent
+	 */
+	private void createMarkerLimits(Composite parent) {
+
+		limitButton = new Button(parent, SWT.CHECK);
+		limitButton.setText(MarkerMessages.MarkerPreferences_MarkerLimits);
+		limitButton.addSelectionListener(new SelectionAdapter() {
+
+			public void widgetSelected(SelectionEvent e) {
+				limitsLabel.setEnabled(limitButton.getSelection());
+				limitText.setEnabled(limitButton.getSelection());
+			}
+		});
 		
-		final FormToolkit toolkit = new FormToolkit(top.getDisplay());
-		parent.addDisposeListener(new DisposeListener() {
+		GridData limitData = new GridData();
+		limitData.verticalIndent = 5;
+		limitButton.setLayoutData(limitData);
+
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout(2, false);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		composite.setLayout(layout);
+		GridData compositeData = new GridData(GridData.FILL_HORIZONTAL);
+		compositeData.horizontalIndent = 20;
+		composite.setLayoutData(compositeData);
+
+		limitsLabel = new Label(composite, SWT.NONE);
+		limitsLabel.setText(MarkerMessages.MarkerPreferences_VisibleItems);
+
+		limitText = new Text(composite, SWT.BORDER);
+		GridData textData = new GridData();
+		textData.widthHint = convertWidthInCharsToPixels(10);
+		limitText.setLayoutData(textData);
+		limitText.addVerifyListener(new VerifyListener() {
+
+			public void verifyText(VerifyEvent e) {
+				if (e.character != 0 && e.keyCode != SWT.BS
+						&& e.keyCode != SWT.DEL
+						&& !Character.isDigit(e.character)) {
+					e.doit = false;
+				}
+			}
+		});
+
+		limitText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				try {
+					Integer.parseInt(limitText.getText());
+				} catch (NumberFormatException ex) {
+					limitText.setText(Integer.toString(generator.getMarkerLimits()));
+				}
+			}
+		});
+
+	}
+
+	/**
+	 * @param parent
+	 */
+	private void createConfigs(Composite parent) {
+
+		Composite composite = new Composite(parent, SWT.NONE);
+		composite.setLayout(new GridLayout(2, false));
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		composite.setBackground(parent.getBackground());
 
+		configsTable = CheckboxTableViewer.newCheckList(composite, SWT.BORDER);
+		GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
+		tableData.widthHint = convertHorizontalDLUsToPixels(120);
+		configsTable.getControl().setLayoutData(tableData);
+
+		configsTable.setContentProvider(ArrayContentProvider.getInstance());
+		configsTable.setLabelProvider(new LabelProvider() {
+			public String getText(Object element) {
+				return ((MarkerFieldFilterGroup) element).getName();
+			}
+		});
+
+		configsTable.addCheckStateListener(new ICheckStateListener() {
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				configsTable.setSelection(new StructuredSelection(event
+						.getElement()));
+				updateRadioButtonsFromTable();
+			}
+		});
+
+		configsTable
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+					public void selectionChanged(SelectionChangedEvent event) {
+						storeConfiguration();
+						MarkerFieldFilterGroup group = getSelectionFromTable();
+						if (group == null) {
+							setFieldsEnabled(false);
+						} else
+							setFieldsEnabled(true);
+						updateButtonEnablement(group);
+						updateConfigDesc(group);
+						selectedFilterGroup = group;
+					}
+				});
+
+		createButtons(composite);
+
+	}
+
+	private void storeConfiguration() {
+
+		if (selectedFilterGroup == null)
+			return;
+
+		scopeArea.applyToGroup(selectedFilterGroup);
+		Iterator areas = configAreas.iterator();
+		while (areas.hasNext()) {
+			FilterConfigurationArea area = (FilterConfigurationArea) areas
+					.next();
+
+			// Handle the internal special cases
+			if (area instanceof GroupFilterConfigurationArea)
+				((GroupFilterConfigurationArea) area)
+						.applyToGroup(selectedFilterGroup);
+			area.apply(selectedFilterGroup.getFilter(area.getField()));
+		}
+		configsTable.refresh(selectedFilterGroup);
+	}
+
+	private void updateConfigDesc(MarkerFieldFilterGroup configuration) {
+
+		if (configuration == null) {
+			return;
+		}
+
+		scopeArea.initializeFromGroup(configuration);
+		Iterator areas = configAreas.iterator();
+		while (areas.hasNext()) {
+			FilterConfigurationArea area = (FilterConfigurationArea) areas
+					.next();
+			if (area instanceof GroupFilterConfigurationArea)
+				((GroupFilterConfigurationArea) area)
+						.initializeFromGroup(configuration);
+			area.initialize(configuration.getFilter(area.getField()));
+		}
+
+	}
+
+	private void createConfigDesc(Composite parent) {
+
+		Label separator = new Label(parent, SWT.SEPARATOR | SWT.VERTICAL);
+		separator.setLayoutData(new GridData(GridData.FILL_VERTICAL));
+
+		Composite descComposite = new Composite(parent, SWT.NONE);
+		descComposite.setLayout(new FillLayout());
+		descComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		descComposite.setBackground(parent.getBackground());
+
+		final FormToolkit toolkit = new FormToolkit(parent.getDisplay());
+		parent.addDisposeListener(new DisposeListener() {
 			public void widgetDisposed(DisposeEvent e) {
 				toolkit.dispose();
-
 			}
 		});
-		form = toolkit.createScrolledForm(top);
+
+		form = toolkit.createScrolledForm(descComposite);
 		form.setBackground(parent.getBackground());
 
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		form.setLayoutData(data);
 		form.getBody().setLayout(new GridLayout());
 
-		filterAreas = generator.createFilterConfigurationFields();
+		configAreas = generator.createFilterConfigurationFields();
 
 		createFieldArea(toolkit, form, scopeArea, true);
-		Iterator areas = filterAreas.iterator();
-
+		Iterator areas = configAreas.iterator();
 		while (areas.hasNext()) {
-			createFieldArea(toolkit, form, (FilterConfigurationArea) areas
-					.next(), true);
+			createFieldArea(toolkit, form,
+					(FilterConfigurationArea) areas.next(), true);
 		}
 
-		if (filterGroups.isEmpty())
-			setFieldsEnabled(false);
-		else
-			loadDialogSettings();
-
-		applyDialogFont(top);
-		return top;
 	}
 
 	/**
@@ -203,133 +455,33 @@ public class FiltersConfigurationDialog extends ViewSettingsDialog {
 		expandable.setText(area.getTitle());
 		expandable.setBackground(form.getBackground());
 		expandable.setLayout(new GridLayout());
-		expandable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, area.grabExcessVerticalSpace()));
-		expandable.addExpansionListener(new IExpansionListener() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanged(org.eclipse.ui.forms.events.ExpansionEvent)
-			 */
+		expandable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, area
+				.grabExcessVerticalSpace()));
+		expandable.addExpansionListener(new ExpansionAdapter() {
 			public void expansionStateChanged(ExpansionEvent e) {
-				expandable.getParent().layout(true);
-
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.ui.forms.events.IExpansionListener#expansionStateChanging(org.eclipse.ui.forms.events.ExpansionEvent)
-			 */
-			public void expansionStateChanging(ExpansionEvent e) {
-
+				form.reflow(true);
 			}
 		});
 
 		Composite sectionClient = toolkit.createComposite(expandable);
-		sectionClient.setLayout(new GridLayout());
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.verticalSpacing = 3;
+		sectionClient.setLayout(gridLayout);
 		sectionClient.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true,
 				false));
 		sectionClient.setBackground(form.getBackground());
+
 		area.createContents(sectionClient);
 		expandable.setClient(sectionClient);
 		expandable.setExpanded(expand);
+
 	}
 
 	/**
-	 * Create the area for selecting the filters and enabling/disabling them.
-	 * 
-	 * @param top
+	 * @param composite
 	 */
-	private void createFilterSelectionArea(Composite top) {
-
-		Composite filtersComposite = new Composite(top, SWT.NONE);
-		filtersComposite.setLayout(new GridLayout(2, false));
-		filtersComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
-				true));
-
-		Label title = new Label(filtersComposite, SWT.NONE);
-		title.setText(MarkerMessages.filtersDialog_entriesTitle);
-		GridData titleData = new GridData();
-		titleData.horizontalSpan = 2;
-		title.setLayoutData(titleData);
-
-		filtersList = CheckboxTableViewer.newCheckList(filtersComposite,
-				SWT.BORDER);
-		
-		filtersList.setContentProvider(new IStructuredContentProvider() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-			 */
-			public void dispose() {
-				// Do nothing
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-			 */
-			public Object[] getElements(Object inputElement) {
-				return filterGroups.toArray();
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
-			 *      java.lang.Object, java.lang.Object)
-			 */
-			public void inputChanged(Viewer viewer, Object oldInput,
-					Object newInput) {
-				// Do nothing
-			}
-		});
-
-		filtersList.setLabelProvider(new LabelProvider() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
-			 */
-			public String getText(Object element) {
-				return ((MarkerFieldFilterGroup) element).getName();
-			}
-		});
-
-		if (selectedFilterGroup != null)
-			filtersList.setSelection(new StructuredSelection(
-					selectedFilterGroup));
-
-		filtersList
-				.addSelectionChangedListener(new ISelectionChangedListener() {
-
-					/*
-					 * (non-Javadoc)
-					 * 
-					 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
-					 */
-					public void selectionChanged(SelectionChangedEvent event) {
-						setSelectedFilter((MarkerFieldFilterGroup) ((IStructuredSelection) event
-								.getSelection()).getFirstElement());
-					}
-				});
-
-		filtersList.setInput(this);
-
-		Iterator filterIterator = filterGroups.iterator();
-		while (filterIterator.hasNext()) {
-			MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filterIterator
-					.next();
-			filtersList.setChecked(group, group.isEnabled());
-		}
-
-		GridData listData = new GridData(SWT.FILL, SWT.FILL, true, true);
-		listData.widthHint = convertHorizontalDLUsToPixels(100);
-		filtersList.getControl().setLayoutData(listData);
-
-		Composite buttons = new Composite(filtersComposite, SWT.NONE);
+	private void createButtons(Composite composite) {
+		Composite buttons = new Composite(composite, SWT.NONE);
 		GridLayout buttonLayout = new GridLayout();
 		buttonLayout.marginWidth = 0;
 		buttons.setLayout(buttonLayout);
@@ -341,204 +493,145 @@ public class FiltersConfigurationDialog extends ViewSettingsDialog {
 		addNew.setText(MarkerMessages.MarkerFilter_addFilterName);
 		addNew.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				addNewFilter(false);
-			}			
-		});
-		setButtonLayoutData(addNew);
-		
-		cloneButton= new Button(buttons, SWT.PUSH);
-		cloneButton.setText(MarkerMessages.MarkerFilter_cloneFilterName);
-		cloneButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				addNewFilter(true);
+				addConfiguration();
 			}
 		});
-		setButtonLayoutData(cloneButton);
+		setButtonLayoutData(addNew);
 
 		removeButton = new Button(buttons, SWT.PUSH);
 		removeButton.setText(MarkerMessages.MarkerFilter_deleteSelectedName);
 		removeButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				removeFilters(filtersList.getSelection());
+				removeFilters(configsTable.getSelection());
 			}
 		});
+		removeButton.setEnabled(false);
 		setButtonLayoutData(removeButton);
 		
 		renameButton = new Button(buttons, SWT.PUSH);
 		renameButton.setText(MarkerMessages.MarkerFilter_renameName);
 		renameButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				MarkerFieldFilterGroup filterGroup = (MarkerFieldFilterGroup) ((IStructuredSelection) filtersList
-						.getSelection()).getFirstElement();
-				renameFilter(filterGroup);
+				renameFilter();
 			}
 		});
+		renameButton.setEnabled(false);
 		setButtonLayoutData(renameButton);
+
+	}
+
+	private void renameFilter() {
 		
-		andOrLabel = new Label(filtersComposite, SWT.NONE);
-		GridData labelData = new GridData();
-		labelData.horizontalSpan = 2;
-		andOrLabel.setLayoutData(labelData);
-		andOrLabel.setText(MarkerMessages.AND_OR_Label);
+		MarkerFieldFilterGroup filterGroup = getSelectionFromTable();
+
+		IInputValidator nameValidator = getNameValidator(filterGroup.getName(), getCurrentConfigurationNames());
 		
-		andButton = new Button(filtersComposite, SWT.RADIO);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL, SWT.NONE, true,
-				false);
-		data.horizontalSpan = 2;
-		data.horizontalIndent = IDialogConstants.INDENT;
-		andButton.setLayoutData(data);
+		InputDialog inputDialog = new InputDialog(getShell(),
+				MarkerMessages.MarkerFilterDialog_title,
+				MarkerMessages.MarkerFilterDialog_message,
+				filterGroup.getName(), nameValidator);
+		
+		if(inputDialog.open() == Window.OK) {
+			filterGroup.setName(inputDialog.getValue());
+			configsTable.refresh(filterGroup);
+		}
+				
+	}
+
+	private IInputValidator getNameValidator(final String currentName, final Collection existingNames) {
+		return new IInputValidator() {
+			
+			public String isValid(String newText) {
+				newText = newText.trim();
+				if (newText.length() == 0)
+					return MarkerMessages.MarkerFilterDialog_emptyMessage;
+				if(existingNames.contains(newText) && !currentName.equals(newText)) {
+					return NLS.bind(MarkerMessages.filtersDialog_conflictingName, newText);
+				}
+				return null;
+			}
+		};
+	}
+
+	private void createAndOrButtons(Composite parent) {
+
+		allButton = new Button(parent, SWT.CHECK);
+		allButton.setText(MarkerMessages.ALL_Title);
+		allButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateShowAll(allButton.getSelection());
+			}
+		});
+
+		andButton = new Button(parent, SWT.RADIO);
 		andButton.setText(MarkerMessages.AND_Title);
-		andButton.setSelection(andFilters);
 		andButton.addSelectionListener(new SelectionAdapter() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-			 */
 			public void widgetSelected(SelectionEvent e) {
 				andFilters = true;
 			}
 		});
+		GridData andData = new GridData();
+		andData.horizontalIndent = 20;
+		andButton.setLayoutData(andData);
 
-		orButton = new Button(filtersComposite, SWT.RADIO);
-		data = new GridData(GridData.FILL_HORIZONTAL, SWT.NONE, true, false);
-		data.horizontalSpan = 2;
-		data.horizontalIndent = IDialogConstants.INDENT;
-		orButton.setLayoutData(data);
+		orButton = new Button(parent, SWT.RADIO);
 		orButton.setText(MarkerMessages.OR_Title);
-		orButton.setSelection(!andFilters);
 		orButton.addSelectionListener(new SelectionAdapter() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-			 */
 			public void widgetSelected(SelectionEvent e) {
 				andFilters = false;
 			}
 		});
-		filtersList.addCheckStateListener(new ICheckStateListener() {
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				updateAndOrEnblement();				
-			}
-		});
-	}
+		GridData orData = new GridData();
+		orData.horizontalIndent = 20;
+		orButton.setLayoutData(orData);
 
-	/**
-	 * Opens Input Dialog for name,creates a 
-	 * new filterGroup, and adds it to the filterGroups 
-	 * @param cloneSelected true clones the selected filterGroup
-	 * 				
-	 */
-	private void addNewFilter(boolean cloneSelected) {
-		String newName =getNewFilterName(getCurrentFilterNames(),null);
-		if (newName != null) {
-			createNewFilter(newName,cloneSelected);
-		}
-	}
-	/**
-	 * Opens Input Dialog for a new filter name
-	 * @param avoidNames filter names to avoid
-	 * @param initialName initial name of the filter
-	 * @return new filter name or null if canceled
-	 * 				
-	 */
-	private String getNewFilterName(final Collection avoidNames,String initialName){
-		InputDialog newDialog = new InputDialog(getShell(),
-				MarkerMessages.MarkerFilterDialog_title,
-				MarkerMessages.MarkerFilterDialog_message,
-				initialName != null ? initialName
-						: MarkerMessages.MarkerFilter_newFilterName,
-				getNameValidator(avoidNames));
-		if (Window.OK == newDialog.open()) {
-			return newDialog.getValue();
-		}
-		return null;
 	}
 
 	/**
-	 * Get IInputValidator for checking if the new name is valid
-	 * @param avoidNames
-	 * @return IInputValidator
-	 */
-	private IInputValidator getNameValidator(final Collection avoidNames) {
-		return new IInputValidator() {
-			public String isValid(String value) {
-				String newText=value.trim();
-				if (newText.length() == 0)
-					return MarkerMessages.MarkerFilterDialog_emptyMessage;
-				if (avoidNames.contains(newText))
-					return NLS.bind(
-							MarkerMessages.filtersDialog_conflictingName,
-							newText);
-				return null;
-			}
-		};
-	}
-	
-	/**
 	 * Get a collection of names of the filters currently in the list
+	 * 
 	 * @return Collection
 	 */
-	private Collection getCurrentFilterNames() {
+	private Collection getCurrentConfigurationNames() {
 		Collection names = new ArrayList();
 		Iterator filterIterator = filterGroups.iterator();
 		while (filterIterator.hasNext()) {
-			names.add(((MarkerFieldFilterGroup) filterIterator.next()).getName());
+			names.add(((MarkerFieldFilterGroup) filterIterator.next())
+					.getName());
 		}
 		return names;
 	}
-	/**
-	 * Create a new filterGroup, and adds it to the filterGroups 
-	 * @param cloneSelected true clones the selected filterGroup
-	 * @param newName name of new filterGroup
-	 */
-	private void createNewFilter(String newName,boolean cloneSelected) {
-		MarkerFieldFilterGroup group = new MarkerFieldFilterGroup(null, generator);
-		if(cloneSelected&&selectedFilterGroup!=null){
-			captureStateInto(group); //copy current values from UI
-		}
-		group.setName(newName);
-		filterGroups.add(group);
-		filtersList.refresh();
-		filtersList.setSelection(new StructuredSelection(group));
-		filtersList.setChecked(group, true);
-		updateAndOrEnblement();
+
+	private void addConfiguration() {
+		String newName = getNewConfigurationName(
+				getCurrentConfigurationNames(),
+				MarkerMessages.MarkerFilter_newFilterName);
+		MarkerFieldFilterGroup configuration = createConfiguration(newName);
+		filterGroups.add(configuration);
+		configsTable.refresh();
+		configsTable.setSelection(new StructuredSelection(configuration));
+		configsTable.setChecked(configuration, true);
+		updateRadioButtonsFromTable();
 	}
 
-	/**
-	 * Renames the supplied MarkerFieldFilterGroup
-	 * @param filterGroup
-	 */
-	private void renameFilter(MarkerFieldFilterGroup filterGroup) {
-		if (filterGroup != null) {
-			Collection names = getCurrentFilterNames();
-			String initial = null;
-			initial = filterGroup.getName();
-			names.remove(initial);
-			String newName=getNewFilterName(names, initial);
-			if(newName!=null){
-				filterGroup.setName(newName);
-				filtersList.update(filterGroup, null);
-			}
+	private String getNewConfigurationName(final Collection avoidNames,
+			String initialName) {
+
+		String configName = initialName;
+		for (int i = 1; avoidNames.contains(configName); i++) {
+			configName = initialName + ' ' + i;
 		}
+		return configName;
 	}
-	/**
-	 * Enable/disable 'and', 'or' buttons
-	 */
-	private void updateAndOrEnblement() {
-		if(filtersList.getCheckedElements().length==0){
-			andOrLabel.setEnabled(false);
-			andButton.setEnabled(false);
-			orButton.setEnabled(false);
-		}else{
-			andOrLabel.setEnabled(true);
-			andButton.setEnabled(true);
-			orButton.setEnabled(true);
-		}
+
+	private MarkerFieldFilterGroup createConfiguration(String newName) {
+
+		MarkerFieldFilterGroup config = new MarkerFieldFilterGroup(null,
+				generator);
+		config.setName(newName);
+		return config;
 	}
+
 	/**
 	 * Return the dialog settings for the receiver.
 	 * 
@@ -565,38 +658,51 @@ public class FiltersConfigurationDialog extends ViewSettingsDialog {
 		return filterGroups;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
-	 */
-	protected boolean isResizable() {
-		return true;
-	}
-
-	/**
-	 * Load the dialog settings.
-	 */
-	private void loadDialogSettings() {
+	private IStructuredSelection getInitialSelection() {
 		IDialogSettings settings = getDialogSettings();
 
-		String selection = settings.get(SELECTED_FILTER_GROUP);
+		String selectedGroupName = settings.get(SELECTED_FILTER_GROUP);
+
+		MarkerFieldFilterGroup selectedGroup = null;
+		if (selectedGroupName == null && filterGroups.size() > 0) {
+			selectedGroup = (MarkerFieldFilterGroup) filterGroups.iterator()
+					.next();
+		} else {
 
-		if (selection != null) {
 			Iterator groups = filterGroups.iterator();
 			while (groups.hasNext()) {
 				MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) groups
 						.next();
-				if (group.getName().equals(selection)) {
-					filtersList.setSelection(new StructuredSelection(group));
-					return;
+				if (group.getName().equals(selectedGroupName)) {
+					selectedGroup = group;
+					break;
 				}
 			}
 		}
 
-		// If there is no initial selection make one
-		filtersList.setSelection(new StructuredSelection(filterGroups
-				.iterator().next()));
+		String[] selectedElementNames = settings
+				.getArray(PREV_SELECTED_ELEMENTS);
+		List selectedElements = new ArrayList();
+
+		if (selectedElementNames != null) {
+			for (int i = 0; i < selectedElementNames.length; i++) {
+				Iterator filterGroupIterator = filterGroups.iterator();
+				while (filterGroupIterator.hasNext()) {
+					MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filterGroupIterator
+							.next();
+					if (Util.equals(group.getName(), selectedElementNames[i])) {
+						selectedElements.add(group);
+						break;
+					}
+				}
+			}
+			previouslyChecked = selectedElements.toArray();
+		}
+
+		if (selectedGroup != null) {
+			return new StructuredSelection(selectedGroup);
+		}
+		return StructuredSelection.EMPTY;
 	}
 
 	/**
@@ -625,74 +731,49 @@ public class FiltersConfigurationDialog extends ViewSettingsDialog {
 	 */
 	protected void okPressed() {
 
-		if (!shouldContinue())
-			return;
+		generator.setMarkerLimitsEnabled(limitButton.getSelection());
+		generator.setMarkerLimits(Integer.parseInt(limitText.getText().trim()));
 
 		Iterator filterGroupIterator = filterGroups.iterator();
 		while (filterGroupIterator.hasNext()) {
 			MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filterGroupIterator
 					.next();
-			group.setEnabled(filtersList.getChecked(group));
+			group.setEnabled(configsTable.getChecked(group));
 		}
-		captureStateInto(selectedFilterGroup);
+
+		storeConfiguration();
+		saveDialogSettings();
 
 		super.okPressed();
 
 	}
 
-	/**
-	 * 
-	 * Updates the filterGroup with the values showing in the dialog's GUI.
-	 * @param filterGroup 
-	 * 
-	 */
-	private void captureStateInto(MarkerFieldFilterGroup filterGroup) {
-		if (filterGroup != null) {
+	protected void performDefaults() {
 
-			scopeArea.applyToGroup(filterGroup);
-			Iterator areas = filterAreas.iterator();
-			while (areas.hasNext()) {
-				FilterConfigurationArea area = (FilterConfigurationArea) areas
-						.next();
+		andFilters = false;
+		andButton.setSelection(andFilters);
+		orButton.setSelection(!andFilters);
 
-				// Handle the internal special cases
-				if (area instanceof GroupFilterConfigurationArea)
-					((GroupFilterConfigurationArea) area)
-							.applyToGroup(filterGroup);
-				area.apply(filterGroup.getFilter(area.getField()));
-			}
-		}
-	}
-	
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
-	 */
-	protected void performDefaults() {
 		filterGroups.clear();
 		filterGroups.addAll(generator.getDeclaredFilters());
-		filtersList.refresh();
-		filtersList.setSelection(new StructuredSelection(
+		configsTable.refresh();
+		configsTable.setSelection(new StructuredSelection(
 				filterGroups.size() > 1 ? filterGroups.iterator().next()
 						: new Object[0]));
-		andFilters=false;
-		andButton.setSelection(andFilters);
-		orButton.setSelection(!andFilters);
-	}
 
-	/**
-	 * Return whether or not deselected elements should have been selected.
-	 * 
-	 * @return boolean
-	 */
-	private boolean shouldContinue() {
-		if (filtersList.getCheckedElements().length == 0) {
-			return MessageDialog.openQuestion(getShell(),
-					MarkerMessages.filtersDialogDeselectedFiltersTitle,
-					MarkerMessages.filtersDialogDeselectedFiltersMessage);
-		}
+		IPreferenceStore preferenceStore = IDEWorkbenchPlugin.getDefault()
+				.getPreferenceStore();
+		boolean useMarkerLimits = preferenceStore
+				.getBoolean(IDEInternalPreferences.USE_MARKER_LIMITS);
+		int markerLimits = useMarkerLimits ? preferenceStore
+				.getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE) : 100;
 
-		return true;
+		limitButton.setSelection(useMarkerLimits);
+		limitsLabel.setEnabled(useMarkerLimits);
+		limitText.setEnabled(useMarkerLimits);
+		limitText.setText(Integer.toString(markerLimits));
+
+		updateRadioButtonsFromTable();
 	}
 
 	/**
@@ -703,33 +784,52 @@ public class FiltersConfigurationDialog extends ViewSettingsDialog {
 	private void removeFilters(ISelection selection) {
 		filterGroups.remove(((IStructuredSelection) selection)
 				.getFirstElement());
-		filtersList.refresh();
-		updateAndOrEnblement();
+		configsTable.refresh();
+		updateRadioButtonsFromTable();
 	}
 
 	/**
 	 * Save the dialog settings for the receiver.
 	 */
 	private void saveDialogSettings() {
+		
 		IDialogSettings settings = getDialogSettings();
 
 		if (selectedFilterGroup != null)
 			settings.put(SELECTED_FILTER_GROUP, selectedFilterGroup.getName());
 
+		String[] selectedNames = new String[previouslyChecked.length];
+		for (int i = 0; i < selectedNames.length; i++) {
+			selectedNames[i] = ((MarkerFieldFilterGroup)previouslyChecked[i]).getName();
+		}
+		settings.put(PREV_SELECTED_ELEMENTS, selectedNames);
+		
+	}
+
+	private void updateButtonEnablement(MarkerFieldFilterGroup group) {
+		boolean enabled = group != null && !group.isSystem();
+		removeButton.setEnabled(enabled);
+		renameButton.setEnabled(enabled);
+	}
+
+	private MarkerFieldFilterGroup getSelectionFromTable() {
+		IStructuredSelection selection = (IStructuredSelection) configsTable
+				.getSelection();
+		return (MarkerFieldFilterGroup) selection.getFirstElement();
 	}
 
 	/**
 	 * Set the control and all of it's visibility state to visible.
 	 * 
-	 * @param visible
+	 * @param enabled
 	 * @param control
 	 */
-	private void setEnabled(boolean visible, Control control) {
-		control.setEnabled(visible);
+	private void setEnabled(boolean enabled, Control control) {
+		control.setEnabled(enabled);
 		if (control instanceof Composite) {
 			Control[] children = ((Composite) control).getChildren();
 			for (int i = 0; i < children.length; i++) {
-				setEnabled(visible, children[i]);
+				setEnabled(enabled, children[i]);
 			}
 		}
 	}
@@ -737,52 +837,8 @@ public class FiltersConfigurationDialog extends ViewSettingsDialog {
 	/**
 	 * Set the enablement state of the fields to enabled.
 	 */
-	private void setFieldsEnabled(boolean visible) {
-		setEnabled(visible, form);
+	private void setFieldsEnabled(boolean enabled) {
+		setEnabled(enabled, form);
 	}
 
-	/**
-	 * Set the filter that is being worked on.
-	 * 
-	 * @param markerFieldFilterGroup
-	 */
-	private void setSelectedFilter(MarkerFieldFilterGroup markerFieldFilterGroup) {
-		if(selectedFilterGroup==markerFieldFilterGroup){
-			return;
-		}
-		removeButton
-				.setEnabled(!(markerFieldFilterGroup == null || markerFieldFilterGroup
-						.isSystem()));
-		renameButton
-				.setEnabled(!(markerFieldFilterGroup == null || markerFieldFilterGroup
-						.isSystem()));
-		cloneButton.setEnabled(markerFieldFilterGroup != null);
-		
-		MarkerFieldFilterGroup old = selectedFilterGroup;
-		selectedFilterGroup = markerFieldFilterGroup;
-		if (old != null)
-			scopeArea.applyToGroup(old);
-
-		if (selectedFilterGroup == null) {
-			setFieldsEnabled(false);
-			return;
-		}
-
-		setFieldsEnabled(true);
-		scopeArea.initializeFromGroup(selectedFilterGroup);
-		Iterator areas = filterAreas.iterator();
-		while (areas.hasNext()) {
-			FilterConfigurationArea area = (FilterConfigurationArea) areas
-					.next();
-			if (old != null) {
-				if (area instanceof GroupFilterConfigurationArea)
-					((GroupFilterConfigurationArea) area).applyToGroup(old);
-				area.apply(old.getFilter(area.getField()));
-			}
-			if (area instanceof GroupFilterConfigurationArea)
-				((GroupFilterConfigurationArea) area)
-						.initializeFromGroup(selectedFilterGroup);
-			area.initialize(selectedFilterGroup.getFilter(area.getField()));
-		}
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java
index 1a8a44c..7787272 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,8 +38,11 @@ public class FiltersContribution extends MarkersContribution {
 	 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
 	 */
 	protected IContributionItem[] getContributionItems() {
+		final ExtendedMarkersView view = getView();
+		if (view == null)
+			return new IContributionItem[0];
 
-		Collection groups = getView().getAllFilters();
+		Collection groups = view.getAllFilters();
 
 		if (groups.size() == 0)
 			return new IContributionItem[0];
@@ -60,7 +63,6 @@ public class FiltersContribution extends MarkersContribution {
 				public void fill(Menu menu, int index) {
 					MenuItem item = new MenuItem(menu, SWT.CHECK);
 					item.setText(group.getName());
-					ExtendedMarkersView view = getView();
 					item.addListener(SWT.Selection, getMenuItemListener(group,
 							view));
 
@@ -126,7 +128,9 @@ public class FiltersContribution extends MarkersContribution {
 					 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
 					 */
 					public void handleEvent(Event event) {
-						getView().disableAllFilters();
+						ExtendedMarkersView view = getView();
+						if (view != null)
+							view.disableAllFilters();
 					}
 				});
 			}
@@ -138,7 +142,11 @@ public class FiltersContribution extends MarkersContribution {
 			 *         filters are selected.
 			 */
 			private boolean noFiltersSelected() {
-				Iterator groupsIterator = getView().getAllFilters().iterator();
+				ExtendedMarkersView view = getView();
+				if (view == null)
+					return true;
+
+				Iterator groupsIterator= view.getAllFilters().iterator();
 				while (groupsIterator.hasNext()) {
 					MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) groupsIterator
 							.next();
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java
index 93d23dd..1001840 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,8 +44,11 @@ public class GroupsContribution extends MarkersContribution {
 	 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
 	 */
 	protected IContributionItem[] getContributionItems() {
+		ExtendedMarkersView view = getView();
+		if (view == null)
+			return new IContributionItem[0];
 
-		Collection groups = getView().getBuilder().getGenerator().getMarkerGroups();
+		Collection groups = view.getBuilder().getGenerator().getMarkerGroups();
 
 		if (groups.isEmpty())
 			return new IContributionItem[0];
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java
index d63005c..baa339b 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java
@@ -94,13 +94,14 @@ class MarkerCategory extends MarkerSupportItem {
 		//			new Object[] { getName() });
 		//}
 		int size = getChildrenCount();
-		int limit = MarkerSupportInternalUtilities.getMarkerLimit();
+		MarkerContentGenerator generator = markers.getBuilder().getGenerator();
+		boolean limitsEnabled = generator.isMarkerLimitsEnabled();
+		int limit = generator.getMarkerLimits();
 
-		if (limit > 0 && size > limit) {
+		if (limitsEnabled && size > limit) {
 			return NLS.bind(MarkerMessages.Category_Limit_Label, new Object[] {
 					name,
-					String.valueOf(MarkerSupportInternalUtilities
-							.getMarkerLimit()),
+					String.valueOf(limit),
 					String.valueOf(getChildrenCount()) });
 		}
 		if (size == 1)
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
index 90876f1..bb99427 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
@@ -67,6 +67,8 @@ public class MarkerContentGenerator {
 	private static final String TAG_GROUP_ENTRY = "filterGroup"; //$NON-NLS-1$
 	private static final String TAG_AND = "andFilters"; //$NON-NLS-1$
 	private static final String TAG_LEGACY_FILTER_ENTRY = "filter"; //$NON-NLS-1$
+	private static final String TAG_MARKER_LIMIT = "markerLimit"; //$NON-NLS-1$
+	private static final String TAG_MARKER_LIMIT_ENABLED = "markerLimitEnabled"; //$NON-NLS-1$
 	
 	/*Use this to indicate filter change rather than a null*/
 	private final Collection FILTERS_CHANGED = Collections.EMPTY_SET;
@@ -81,6 +83,8 @@ public class MarkerContentGenerator {
 	private Collection enabledFilters;
 	private Collection filters;
 	private boolean andFilters = false;
+	private int markerLimits = 100;
+	private boolean markerLimitsEnabled = true;
 
 	/**
 	 * focusResources
@@ -199,11 +203,8 @@ public class MarkerContentGenerator {
 		return hidden.toArray();
 	}
 
-	void initialise(IMemento memento) {
-		initialiseVisibleFields(memento);
-	}
+	void saveState(IMemento memento, MarkerField[] displayedFields) {
 
-	void saveSate(IMemento memento, MarkerField[] displayedFields) {
 		for (int i = 0; i < displayedFields.length; i++) {
 			memento.createChild(TAG_COLUMN_VISIBILITY, displayedFields[i]
 					.getConfigurationElement().getAttribute(
@@ -212,48 +213,62 @@ public class MarkerContentGenerator {
 	}
 
 	void restoreState(IMemento memento) {
-		initialiseVisibleFields(memento);
-	}
 
-	/**
-	 * Initialize the visible fields based on the initial settings or the
-	 * contents of the {@link IMemento}
-	 * 
-	 * @param memento
-	 *            IMemento
-	 */
-	private void initialiseVisibleFields(IMemento memento) {
-
-		if (memento == null
-				|| memento.getChildren(TAG_COLUMN_VISIBILITY).length == 0) {
-			MarkerField[] initialFields = getInitialVisible();
+		initDefaults();
 
-			visibleFields = new MarkerField[initialFields.length];
-			System.arraycopy(initialFields, 0, visibleFields, 0,
-					initialFields.length);
+		if (memento == null) {
 			return;
 		}
+		
+		Integer limits = memento.getInteger(TAG_MARKER_LIMIT);
+		if (limits != null) {
+			markerLimits = limits.intValue();
+		}
 
-		IMemento[] visible = memento.getChildren(TAG_COLUMN_VISIBILITY);
-		Collection newVisible = new ArrayList();
-
-		MarkerField[] all = getAllFields();
-		Hashtable allTable = new Hashtable();
-
-		for (int i = 0; i < all.length; i++) {
-			allTable.put(all[i].getConfigurationElement().getAttribute(
-					MarkerSupportInternalUtilities.ATTRIBUTE_ID), all[i]);
+		Boolean limitsEnabled = memento.getBoolean(TAG_MARKER_LIMIT_ENABLED);
+		if (limitsEnabled != null) {
+			markerLimitsEnabled = limitsEnabled.booleanValue();
 		}
+		
+		if (memento.getChildren(TAG_COLUMN_VISIBILITY).length != 0) {
 
-		for (int i = 0; i < visible.length; i++) {
-			String key = visible[i].getID();
-			if (allTable.containsKey(key)) {
-				newVisible.add(allTable.get(key));
+			IMemento[] visible = memento.getChildren(TAG_COLUMN_VISIBILITY);
+			Collection newVisible = new ArrayList();
+	
+			MarkerField[] all = getAllFields();
+			Hashtable allTable = new Hashtable();
+	
+			for (int i = 0; i < all.length; i++) {
+				allTable.put(all[i].getConfigurationElement().getAttribute(
+						MarkerSupportInternalUtilities.ATTRIBUTE_ID), all[i]);
+			}
+	
+			for (int i = 0; i < visible.length; i++) {
+				String key = visible[i].getID();
+				if (allTable.containsKey(key)) {
+					newVisible.add(allTable.get(key));
+				}
 			}
+	
+			visibleFields = new MarkerField[newVisible.size()];
+			newVisible.toArray(visibleFields);
 		}
+	}
+
+	private void initDefaults() {
+		
+		IPreferenceStore store = IDEWorkbenchPlugin.getDefault()
+				.getPreferenceStore();
+		markerLimitsEnabled = store
+				.getBoolean(IDEInternalPreferences.USE_MARKER_LIMITS);
+		markerLimits = store.getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE);
+
+		MarkerField[] initialFields = getInitialVisible();
+
+		visibleFields = new MarkerField[initialFields.length];
+		System.arraycopy(initialFields, 0, visibleFields, 0,
+				initialFields.length);
 
-		visibleFields = new MarkerField[newVisible.size()];
-		newVisible.toArray(visibleFields);
 	}
 
 	/**
@@ -390,6 +405,34 @@ public class MarkerContentGenerator {
 	boolean andFilters() {
 		return andFilters;
 	}
+	
+	/**
+	 * @return Returns the markerLimits.
+	 */
+	public int getMarkerLimits() {
+		return markerLimits;
+	}
+	
+	/**
+	 * @param markerLimits The markerLimits to set.
+	 */
+	public void setMarkerLimits(int markerLimits) {
+		this.markerLimits = markerLimits;
+	}
+	
+	/**
+	 * @return Returns the markerLimitsEnabled.
+	 */
+	public boolean isMarkerLimitsEnabled() {
+		return markerLimitsEnabled;
+	}
+	
+	/**
+	 * @param markerLimitsEnabled The markerLimitsEnabled to set.
+	 */
+	public void setMarkerLimitsEnabled(boolean markerLimitsEnabled) {
+		this.markerLimitsEnabled = markerLimitsEnabled;
+	}
 
 	/**
 	 * @return Collection of declared MarkerFieldFilterGroup(s)
@@ -426,6 +469,23 @@ public class MarkerContentGenerator {
 
 	}
 
+	private void loadLimitSettings(IMemento memento) {
+		
+		if (memento == null)
+			return;
+
+		Integer limits = memento.getInteger(TAG_MARKER_LIMIT);
+		if (limits != null) {
+			markerLimits = limits.intValue();
+		}
+
+		Boolean limitsEnabled = memento.getBoolean(TAG_MARKER_LIMIT_ENABLED);
+		if (limitsEnabled != null) {
+			markerLimitsEnabled = limitsEnabled.booleanValue();
+		}
+		
+	}
+	
 	/**
 	 * Load the settings from the memento.
 	 * 
@@ -464,8 +524,10 @@ public class MarkerContentGenerator {
 			return;
 
 		try {
-			loadFilterSettings(XMLMemento.createReadRoot(new StringReader(
-					mementoString)));
+			XMLMemento root = XMLMemento.createReadRoot(new StringReader(
+					mementoString));
+			loadLimitSettings(root);
+			loadFilterSettings(root);
 		} catch (WorkbenchException e) {
 			StatusManager.getManager().handle(e.getStatus());
 		}
@@ -596,6 +658,7 @@ public class MarkerContentGenerator {
 	private void writeFiltersPreference() {
 		XMLMemento memento = XMLMemento.createWriteRoot(TAG_FILTERS_SECTION);
 
+		writeLimitSettings(memento);
 		writeFiltersSettings(memento);
 
 		StringWriter writer = new StringWriter();
@@ -630,6 +693,13 @@ public class MarkerContentGenerator {
 		}
 	}
 
+	private void writeLimitSettings(XMLMemento memento) {
+		
+		memento.putInteger(TAG_MARKER_LIMIT, markerLimits);
+		memento.putBoolean(TAG_MARKER_LIMIT_ENABLED, markerLimitsEnabled);
+
+	}
+	
 	/**
 	 * Write the settings for the filters to the memento.
 	 * 
@@ -758,37 +828,39 @@ public class MarkerContentGenerator {
 	 */
 	boolean select(MarkerEntry entry) {
 		try {
-			Collection enabledFilters = getEnabledFilters();
-			IResource[] resources = getSelectedResources();
-			boolean andFilters = andFilters();
-			if (enabledFilters.size() > 0) {
-				Iterator filtersIterator = enabledFilters.iterator();
-				if (andFilters) {
-					while (filtersIterator.hasNext()) {
-						MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filtersIterator
-								.next();
-						if (!group.selectByScope(entry, resources)
-								|| !group.selectByFilters(entry)) {
-							return false;
-						}
-					}
-					return true;
-				}
+			return select(entry, getSelectedResources(), getEnabledFilters(), andFilters());
+		} finally {
+			entry.clearCache();
+		}
+	}
 
+	boolean select(MarkerEntry entry, IResource[] selResources,
+			Collection enabledFilters, boolean andFilters) {
+		if (enabledFilters.size() > 0) {
+			Iterator filtersIterator = enabledFilters.iterator();
+			if (andFilters) {
 				while (filtersIterator.hasNext()) {
 					MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filtersIterator
 							.next();
-					if (group.selectByScope(entry, resources)
-							&& group.selectByFilters(entry)) {
-						return true;
+					if (!group.selectByScope(entry, selResources)
+							|| !group.selectByFilters(entry)) {
+						return false;
 					}
 				}
-				return false;
+				return true;
 			}
-			return true;
-		} finally {
-			entry.clearCache();
+
+			while (filtersIterator.hasNext()) {
+				MarkerFieldFilterGroup group = (MarkerFieldFilterGroup) filtersIterator
+						.next();
+				if (group.selectByScope(entry, selResources)
+						&& group.selectByFilters(entry)) {
+					return true;
+				}
+			}
+			return false;
 		}
+		return true;
 	}
 
 	/**
@@ -1049,6 +1121,9 @@ public class MarkerContentGenerator {
 		if (monitor.isCanceled()) {
 			return false;
 		}
+		IResource[] selected = getSelectedResources();
+		Collection filters = getEnabledFilters();
+		boolean andFilters = andFilters();
 		Iterator iterator = resources.iterator();
 		while (iterator.hasNext()) {
 			IMarker[] markers = null;
@@ -1068,11 +1143,14 @@ public class MarkerContentGenerator {
 			if (monitor.isCanceled()) {
 				return false;
 			}
-			for (int i = 0; i < markers.length; i++) {
-				MarkerEntry entry = new MarkerEntry(markers[i]);
-				if (select(entry)) {
+			MarkerEntry entry = null;
+			int lenght =  markers.length;
+			for (int i = 0; i < lenght; i++) {
+				entry = new MarkerEntry(markers[i]);
+				if (select(entry, selected, filters, andFilters)) {
 					result.add(entry);
 				}
+				entry.clearCache();
 				if (i % 500 == 0) {
 					if (monitor.isCanceled()) {
 						return false;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java
index 89ce7da..034ca1d 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java
@@ -95,6 +95,7 @@ class MarkerFieldFilterGroup {
 	private static final String TAG_SCOPE = "scope"; //$NON-NLS-1$
 	private static final String TAG_FIELD_FILTER_ENTRY = "fieldFilter"; //$NON-NLS-1$
 	private static final String TAG_WORKING_SET = "workingSet"; //$NON-NLS-1$
+	private static final String TAG_LIMIT = "filterLimit"; //$NON-NLS-1$
 	// The identifier for user filters
 	private static String USER = "USER"; //$NON-NLS-1$
 
@@ -106,6 +107,8 @@ class MarkerFieldFilterGroup {
 	private boolean enabled = true;
 	protected MarkerFieldFilter[] fieldFilters;
 	private int scope;
+	private int limit;
+	
 	private String name;
 	private String id;
 
@@ -131,11 +134,16 @@ class MarkerFieldFilterGroup {
 
 		if (configurationElement == null)
 			return;
-		String enablementString = configurationElement
+		String stringValue = configurationElement
 				.getAttribute(MarkerSupportRegistry.ENABLED);
-		if (MarkerSupportInternalUtilities.FALSE.equals(enablementString))
+		if (MarkerSupportInternalUtilities.FALSE.equals(stringValue)) {
 			enabled = false;
-
+		}
+		stringValue = configurationElement
+				.getAttribute(MarkerSupportRegistry.FILTER_LIMIT);
+		if (stringValue == null || stringValue.length() == 0) {
+			limit = -1;
+		}
 	}
 
 	/**
@@ -433,9 +441,10 @@ class MarkerFieldFilterGroup {
 	 */
 	void loadSettings(IMemento memento) {
 
-		String enabledString = memento.getString(TAG_ENABLED);
-		if (enabledString != null && enabledString.length() > 0)
-			enabled = Boolean.valueOf(enabledString).booleanValue();
+		String stringValue = memento.getString(TAG_ENABLED);
+		if (stringValue != null && stringValue.length() > 0){
+			enabled = Boolean.valueOf(stringValue).booleanValue();
+		}
 		scope = memento.getInteger(TAG_SCOPE).intValue();
 
 		String workingSetName = memento.getString(TAG_WORKING_SET);
@@ -444,6 +453,11 @@ class MarkerFieldFilterGroup {
 			setWorkingSet(PlatformUI.getWorkbench().getWorkingSetManager()
 					.getWorkingSet(workingSetName));
 
+		stringValue = memento.getString(TAG_LIMIT);
+		if (stringValue != null && stringValue.length() > 0) {
+			setLimit(Integer.parseInt(stringValue));
+		}
+		
 		Map filterMap = new HashMap();
 		MarkerFieldFilter[] filters = getFieldFilters();
 		for (int i = 0; i < filters.length; i++) {
@@ -502,6 +516,7 @@ class MarkerFieldFilterGroup {
 	 */
 	protected boolean populateClone(MarkerFieldFilterGroup clone) {
 		clone.scope = this.scope;
+		clone.limit = limit;
 		clone.workingSet = this.workingSet;
 		clone.enabled = this.enabled;
 		clone.fieldFilters = new MarkerFieldFilter[getFieldFilters().length];
@@ -560,6 +575,7 @@ class MarkerFieldFilterGroup {
 	void saveFilterSettings(IMemento memento) {
 		memento.putString(TAG_ENABLED, String.valueOf(enabled));
 		memento.putString(TAG_SCOPE, String.valueOf(scope));
+		memento.putString(TAG_LIMIT, String.valueOf(limit));
 
 		if (workingSet != null) {
 			memento.putString(TAG_WORKING_SET, workingSet.getName());
@@ -661,6 +677,21 @@ class MarkerFieldFilterGroup {
 	void setWorkingSet(IWorkingSet workingSet) {
 		this.workingSet = workingSet;
 	}
+	
+	/**
+	 * @return Returns -1 for no limit else the limit.
+	 */
+	int getLimit() {
+		return limit;
+	}
+
+	/**
+	 * @param limit
+	 *            The limit to set, -1 or 0 for no limit.
+	 */
+	void setLimit(int limit) {
+		this.limit = limit;
+	}
 
 	/**
 	 * Refresh the MarkerFieldFilterGroup .
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java
index 6063488..7bfe426 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,7 @@ public class MarkerLocationField extends MarkerField {
 	 * @return int
 	 */
 	public int getDefaultColumnWidth(Control control) {
-		return 10 * MarkerSupportInternalUtilities.getFontWidth(control);
+		return 15 * MarkerSupportInternalUtilities.getFontWidth(control);
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPreferencesDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPreferencesDialog.java
deleted file mode 100644
index a4cf2ea..0000000
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPreferencesDialog.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.ui.internal.views.markers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.jface.resource.JFaceColors;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.internal.ide.IDEInternalPreferences;
-import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
-import org.eclipse.ui.preferences.ViewSettingsDialog;
-import org.eclipse.ui.views.markers.MarkerField;
-import org.eclipse.ui.views.markers.internal.MarkerMessages;
-
-/**
- * MarkerPreferencesDialog is the dialog for showing marker preferences.
- * 
- * @since 3.4
- * 
- */
-public class MarkerPreferencesDialog extends ViewSettingsDialog {
-
-	private IntegerFieldEditor limitEditor;
-
-	private Button enablementButton;
-
-	private Composite editArea;
-
-	private Label messageLabel;
-
-	private ExtendedMarkersView extendedView;
-
-	private ArrayList visible;
-
-	private ArrayList hidden;
-
-	private ListViewer visibleViewer;
-
-	private ListViewer nonVisibleViewer;
-
-	/**
-	 * Create a new instance of the receiver.
-	 * 
-	 * @param view -
-	 *            the view this is being launched from
-	 */
-	public MarkerPreferencesDialog(ExtendedMarkersView view) {
-		super(view.getSite().getShell());
-		this.extendedView = view;
-
-		Object[] visibleFields = view.getVisibleFields();
-		Object[] hiddenFields = view.getHiddenFields();
-
-		visible = new ArrayList();
-		hidden = new ArrayList();
-
-		for (int i = 0; i < visibleFields.length; i++) {
-			visible.add(visibleFields[i]);
-		}
-
-		for (int i = 0; i < hiddenFields.length; i++) {
-			hidden.add(hiddenFields[i]);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
-	 */
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		newShell.setText(MarkerMessages.MarkerPreferences_DialogTitle);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.window.Window#getShellStyle()
-	 */
-	protected int getShellStyle() {
-		return super.getShellStyle() | SWT.RESIZE;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
-	 */
-	protected Control createDialogArea(Composite parent) {
-
-		Composite dialogArea = (Composite) super.createDialogArea(parent);
-
-		boolean checked = IDEWorkbenchPlugin.getDefault().getPreferenceStore()
-				.getBoolean(IDEInternalPreferences.USE_MARKER_LIMITS);
-		enablementButton = new Button(dialogArea, SWT.CHECK);
-		enablementButton.setText(MarkerMessages.MarkerPreferences_MarkerLimits);
-		enablementButton.setSelection(checked);
-
-		editArea = new Composite(dialogArea, SWT.NONE);
-		editArea.setLayout(new GridLayout());
-		GridData editData = new GridData(GridData.FILL_BOTH
-				| GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
-		editData.horizontalIndent = 10;
-		editArea.setLayoutData(editData);
-
-		limitEditor = new IntegerFieldEditor(
-				"limit", MarkerMessages.MarkerPreferences_VisibleItems, editArea) { //$NON-NLS-1$
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.preference.IntegerFieldEditor#checkState()
-			 */
-			protected boolean checkState() {
-				boolean state = super.checkState();
-				setValid(state, getErrorMessage());
-				return state;
-			}
-		};
-		limitEditor.setPreferenceStore(IDEWorkbenchPlugin.getDefault()
-				.getPreferenceStore());
-		limitEditor
-				.setPreferenceName(IDEInternalPreferences.MARKER_LIMITS_VALUE);
-		limitEditor.load();
-
-		GridData checkedData = new GridData(SWT.FILL, SWT.NONE, true, false);
-		checkedData.horizontalSpan = limitEditor.getNumberOfControls();
-		enablementButton.setLayoutData(checkedData);
-
-		enablementButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				setLimitEditorEnablement(editArea, enablementButton
-						.getSelection());
-			}
-		});
-
-		setLimitEditorEnablement(editArea, checked);
-
-		messageLabel = new Label(dialogArea, SWT.NONE);
-
-		messageLabel.setBackground(JFaceColors.getErrorBackground(dialogArea
-				.getDisplay()));
-		messageLabel.setForeground(JFaceColors.getErrorText(dialogArea
-				.getDisplay()));
-		messageLabel
-				.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
-
-		createColumnsArea(dialogArea);
-
-		applyDialogFont(dialogArea);
-		return dialogArea;
-	}
-
-	/**
-	 * Create an area for the selected columns
-	 * 
-	 * @param dialogArea
-	 */
-	private void createColumnsArea(Composite dialogArea) {
-
-		initializeDialogUnits(dialogArea);
-		Group columnsComposite = new Group(dialogArea, SWT.NONE);
-		columnsComposite.setText(MarkerMessages.MarkerPreferences_ColumnGroupTitle);
-		FormLayout layout = new FormLayout();
-		columnsComposite.setLayout(layout);
-
-		columnsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
-				true));
-		Label visibleItemsLabel = new Label(columnsComposite, SWT.NONE);
-		visibleItemsLabel.setText(MarkerMessages.MarkerPreferences_VisibleColumnsTitle);
-		FormData visibleLabelData = new FormData();
-		visibleLabelData.right = new FormAttachment(45, 0);
-		visibleLabelData.left = new FormAttachment(
-				IDialogConstants.BUTTON_MARGIN);
-		visibleLabelData.top = new FormAttachment(0);
-		visibleItemsLabel.setLayoutData(visibleLabelData);
-
-		int rightMargin = IDialogConstants.BUTTON_MARGIN * -1;
-
-		Label nonVisibleLabel = new Label(columnsComposite, SWT.NONE);
-		nonVisibleLabel.setText(MarkerMessages.MarkerPreferences_HiddenColumnsTitle);
-		FormData nonVisibleLabelData = new FormData();
-		nonVisibleLabelData.right = new FormAttachment(100);
-		nonVisibleLabelData.left = new FormAttachment(55, 0);
-		nonVisibleLabelData.top = new FormAttachment(0);
-		nonVisibleLabel.setLayoutData(nonVisibleLabelData);
-
-		visibleViewer = new ListViewer(columnsComposite,
-				SWT.BORDER);
-
-		FormData visibleViewerData = new FormData();
-		visibleViewerData.right = new FormAttachment(visibleItemsLabel, 0,
-				SWT.RIGHT);
-		visibleViewerData.left = new FormAttachment(visibleItemsLabel, 0,
-				SWT.LEFT);
-		visibleViewerData.top = new FormAttachment(visibleItemsLabel,
-				IDialogConstants.BUTTON_MARGIN);
-		visibleViewerData.bottom = new FormAttachment(100, rightMargin);
-		visibleViewerData.height = convertHeightInCharsToPixels(15);
-		visibleViewerData.width = convertWidthInCharsToPixels(25);
-
-		visibleViewer.getControl().setLayoutData(visibleViewerData);
-
-		visibleViewer.setContentProvider(new IStructuredContentProvider() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-			 */
-			public Object[] getElements(Object inputElement) {
-				return visible.toArray();
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-			 */
-			public void dispose() {
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
-			 *      java.lang.Object, java.lang.Object)
-			 */
-			public void inputChanged(Viewer viewer, Object oldInput,
-					Object newInput) {
-			}
-
-		});
-
-		visibleViewer.setLabelProvider(markerFieldLabelProvider());
-
-		visibleViewer.setInput(this);
-
-		nonVisibleViewer = new ListViewer(columnsComposite,
-				SWT.BORDER);
-
-		nonVisibleViewer.setLabelProvider(markerFieldLabelProvider());
-
-		nonVisibleViewer.setContentProvider(new IStructuredContentProvider() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-			 */
-			public Object[] getElements(Object inputElement) {
-				return hidden.toArray();
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-			 */
-			public void dispose() {
-			}
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
-			 *      java.lang.Object, java.lang.Object)
-			 */
-			public void inputChanged(Viewer viewer, Object oldInput,
-					Object newInput) {
-			}
-
-		});
-		nonVisibleViewer.setInput(this);
-
-		FormData nonVisibleViewerData = new FormData();
-		nonVisibleViewerData.right = new FormAttachment(nonVisibleLabel, 0,
-				SWT.RIGHT);
-		nonVisibleViewerData.left = new FormAttachment(nonVisibleLabel, 0,
-				SWT.LEFT);
-		nonVisibleViewerData.top = new FormAttachment(nonVisibleLabel,
-				IDialogConstants.BUTTON_MARGIN);
-		nonVisibleViewerData.bottom = new FormAttachment(100, rightMargin);
-		nonVisibleViewerData.height = convertHeightInCharsToPixels(15);
-		nonVisibleViewerData.width = convertWidthInCharsToPixels(25);
-
-		nonVisibleViewer.getControl().setLayoutData(nonVisibleViewerData);
-
-		Button toNonVisibleButton = new Button(columnsComposite, SWT.PUSH);
-		toNonVisibleButton
-				.setText(getDefaultOrientation() == SWT.RIGHT_TO_LEFT ? MarkerMessages.MarkerPreferences_MoveLeft
-						: MarkerMessages.MarkerPreferences_MoveRight);
-
-		FormData toNonVisibleButtonData = new FormData();
-
-		toNonVisibleButtonData.top = new FormAttachment(visibleViewer
-				.getControl(), IDialogConstants.BUTTON_BAR_HEIGHT, SWT.TOP);
-		toNonVisibleButtonData.left = new FormAttachment(visibleViewer
-				.getControl(), IDialogConstants.BUTTON_MARGIN);
-		toNonVisibleButtonData.right = new FormAttachment(nonVisibleViewer
-				.getControl(), rightMargin);
-		toNonVisibleButton.setLayoutData(toNonVisibleButtonData);
-
-		toNonVisibleButton.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				List selection = ((IStructuredSelection) visibleViewer
-						.getSelection()).toList();
-				hidden.addAll(selection);
-				visible.removeAll(selection);
-				visibleViewer.refresh();
-				nonVisibleViewer.refresh();
-				setValid(
-						visible.size() > 0,
-						MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
-			}
-		});
-
-		Button toVisibleButton = new Button(columnsComposite, SWT.PUSH);
-		toVisibleButton
-				.setText(getDefaultOrientation() == SWT.RIGHT_TO_LEFT ? MarkerMessages.MarkerPreferences_MoveRight
-						: MarkerMessages.MarkerPreferences_MoveLeft);
-
-		FormData toVisibleButtonData = new FormData();
-
-		toVisibleButtonData.top = new FormAttachment(toNonVisibleButton,
-				IDialogConstants.BUTTON_MARGIN);
-		toVisibleButtonData.left = new FormAttachment(visibleViewer
-				.getControl(), IDialogConstants.BUTTON_MARGIN);
-		toVisibleButtonData.right = new FormAttachment(nonVisibleViewer
-				.getControl(), rightMargin);
-		toVisibleButton.setLayoutData(toVisibleButtonData);
-
-		toVisibleButton.addSelectionListener(new SelectionAdapter() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-			 */
-			public void widgetSelected(SelectionEvent e) {
-				List selection = ((IStructuredSelection) nonVisibleViewer
-						.getSelection()).toList();
-				hidden.removeAll(selection);
-				visible.addAll(selection);
-				visibleViewer.refresh();
-				nonVisibleViewer.refresh();
-				setValid(
-						visible.size() > 0,
-						MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
-			}
-		});
-
-	}
-
-	/**
-	 * Return a label provider for fields.
-	 * @return LabelProvider
-	 */
-	private LabelProvider markerFieldLabelProvider() {
-		return new LabelProvider() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
-			 */
-			public String getText(Object element) {
-				return ((MarkerField) element).getName();
-			}
-		};
-	}
-
-	/**
-	 * Set the enabled state of the OK button by state.
-	 * 
-	 * @param state
-	 */
-	protected void setValid(boolean state, String errorMessage) {
-		Button okButton = getButton(IDialogConstants.OK_ID);
-
-		if (okButton == null)
-			return;
-
-		if (state)
-			messageLabel.setText(MarkerSupportInternalUtilities.EMPTY_STRING);
-		else
-			messageLabel.setText(errorMessage);
-
-		okButton.setEnabled(state);
-
-	}
-
-	/**
-	 * Enable the limitEditor based on checked.
-	 * 
-	 * @param control
-	 *            The parent of the editor
-	 * @param checked
-	 */
-	private void setLimitEditorEnablement(Composite control, boolean checked) {
-		limitEditor.setEnabled(checked, control);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
-	 */
-	protected void okPressed() {
-
-		limitEditor.store();
-		IDEWorkbenchPlugin.getDefault().getPreferenceStore().setValue(
-				IDEInternalPreferences.USE_MARKER_LIMITS,
-				enablementButton.getSelection());
-		IDEWorkbenchPlugin.getDefault().savePluginPreferences();
-
-		extendedView.setVisibleFields(visible);
-
-		super.okPressed();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
-	 */
-	protected void performDefaults() {
-		super.performDefaults();
-		limitEditor.loadDefault();
-		boolean checked = IDEWorkbenchPlugin.getDefault().getPreferenceStore()
-				.getDefaultBoolean(IDEInternalPreferences.USE_MARKER_LIMITS);
-		enablementButton.setSelection(checked);
-		setLimitEditorEnablement(editArea, checked);
-
-		Object[] visibleFields=extendedView.getBuilder().getGenerator().getInitialVisible();
-		Object[] allFields=extendedView.getBuilder().getGenerator().getAllFields();
-		visible.clear();
-		hidden.clear();
-		for (int i = 0; i < allFields.length; i++) {
-			hidden.add(allFields[i]);
-		}
-		for (int i = 0; i < visibleFields.length; i++) {
-			hidden.remove(visibleFields[i]);
-			visible.add(visibleFields[i]);
-		}
-		visibleViewer.refresh();
-		nonVisibleViewer.refresh();
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPreferencesHandler.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPreferencesHandler.java
deleted file mode 100644
index b85aa9a..0000000
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPreferencesHandler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal.views.markers;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.IHandler;
-import org.eclipse.ui.views.markers.MarkerViewHandler;
-
-/**
- * MarkerPreferencesHandler is the handler for opening the marker preferences dialog.
- * @since 3.4
- *
- */
-public class MarkerPreferencesHandler extends MarkerViewHandler implements
-		IHandler {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
-	 */
-	public Object execute(ExecutionEvent event) {
-		
-		ExtendedMarkersView view = getView(event);
-		if(view == null)
-			return this;
-		
-		new MarkerPreferencesDialog(view).open();
-		return this;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java
index 48b92c9..09d20d2 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java
@@ -32,6 +32,7 @@ import org.eclipse.ui.internal.ide.IDEInternalPreferences;
 import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.ide.Policy;
+import org.eclipse.ui.internal.ide.StatusUtil;
 import org.eclipse.ui.internal.util.BundleUtility;
 import org.eclipse.ui.statushandlers.StatusAdapter;
 import org.eclipse.ui.statushandlers.StatusManager;
@@ -309,23 +310,6 @@ public class MarkerSupportInternalUtilities {
 
 	}
 
-	/**
-	 * Get the marker limit for the receiver.
-	 * 
-	 * @return int
-	 */
-	static int getMarkerLimit() {
-
-		// If limits are enabled return it. Otherwise return -1
-		if (IDEWorkbenchPlugin.getDefault().getPreferenceStore().getBoolean(
-				IDEInternalPreferences.USE_MARKER_LIMITS)) {
-			return IDEWorkbenchPlugin.getDefault().getPreferenceStore().getInt(
-					IDEInternalPreferences.MARKER_LIMITS_VALUE);
-
-		}
-		return -1;
-
-	}
 
 	/**
 	 * Return the severity value for item. A value of -1 indicates
@@ -394,30 +378,44 @@ public class MarkerSupportInternalUtilities {
 	 * @param exception
 	 */
 	public static void logViewError(Exception exception) {
-		if (exception instanceof CoreException) {
-			StatusManager.getManager().handle(
-					((CoreException) exception).getStatus(),StatusManager.LOG);
-			return;
-		}
-		StatusManager.getManager().handle(
-				new Status(IStatus.ERROR, IDEWorkbenchPlugin.IDE_WORKBENCH,
-						exception.getLocalizedMessage(), exception),
-				StatusManager.LOG);
+		handleViewError(exception, StatusManager.LOG);
 	}
+
 	/**
 	 * Show an exception from a markers view.
 	 * 
 	 * @param exception
 	 */
 	public static void showViewError(Exception exception) {
+		handleViewError(exception, StatusManager.LOG | StatusManager.SHOW);
+	}
+
+	/**
+	 * @param exception
+	 * @param handlingMethod
+	 *            StatusManager.LOG, StatusManager.SHOW,etc, bitwise ORed
+	 */
+	public static void handleViewError(Exception exception, int handlingMethod) {
 		if (exception instanceof CoreException) {
-			StatusManager.getManager().handle(
-					((CoreException) exception).getStatus(),StatusManager.LOG|StatusManager.SHOW);
+			// Check for a nested CoreException
+			IStatus status = ((CoreException) exception).getStatus();
+			if (status != null
+					&& status.getException() instanceof CoreException) {
+				exception = (CoreException) status.getException();
+				status = ((CoreException) exception).getStatus();
+			}
+
+			if (status == null)
+				StatusManager.getManager().handle(
+						StatusUtil.newStatus(IStatus.ERROR,
+								exception.getLocalizedMessage(), exception),
+						handlingMethod);
+			else
+				StatusManager.getManager().handle(status, handlingMethod);
 			return;
 		}
-		StatusManager.getManager().handle(
-				new Status(IStatus.ERROR, IDEWorkbenchPlugin.IDE_WORKBENCH,
-						exception.getLocalizedMessage(), exception),
-				StatusManager.LOG|StatusManager.SHOW);
+		StatusManager.getManager().handle(StatusUtil.newStatus(IStatus.ERROR,
+				exception.getLocalizedMessage(), exception),
+				handlingMethod);
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java
index f4d9852..386c89d 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java
@@ -24,6 +24,14 @@ class MarkerViewerContentProvider implements ITreeContentProvider {
 
 	// private MarkersTreeViewer viewer;
 	private Object input;
+	private final ExtendedMarkersView markersView;
+
+	/**
+	 * @param extendedMarkersView
+	 */
+	public MarkerViewerContentProvider(ExtendedMarkersView extendedMarkersView) {
+		this.markersView = extendedMarkersView;
+	}
 
 	/*
 	 * (non-Javadoc)
@@ -76,13 +84,16 @@ class MarkerViewerContentProvider implements ITreeContentProvider {
 	 * @return Object[]
 	 */
 	private Object[] getLimitedChildren(Object[] children) {
-		int newLength = MarkerSupportInternalUtilities.getMarkerLimit();
-		if (newLength > 0 && newLength < children.length) {
-			Object[] newChildren = new Object[newLength];
-			System.arraycopy(children, 0, newChildren, 0, newLength);
-			return newChildren;
-		}
-		return children;
+		
+		boolean limitsEnabled = markersView.getGenerator().isMarkerLimitsEnabled();
+		int limits = markersView.getGenerator().getMarkerLimits();
+		
+		if (!limitsEnabled || limits <= 0 || limits > children.length)
+			return children;
+		
+		Object[] newChildren = new Object[limits];
+		System.arraycopy(children, 0, newChildren, 0, limits);
+		return newChildren;
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java
index 439f119..377d0cf 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java
@@ -29,8 +29,9 @@ import org.eclipse.ui.views.markers.internal.MarkerGroupingEntry;
 import org.eclipse.ui.views.markers.internal.MarkerMessages;
 
 /**
- * The Markers object contains the MarkerEntry(s) collected and updated by the system,
- * also  maintains the categories that markers are grouped into.
+ * The Markers object contains the MarkerEntry(s) collected and updated by the
+ * system, also maintains the categories that markers are grouped into.
+ * 
  * @since 3.6
  * 
  */
@@ -39,41 +40,39 @@ class Markers {
 	static final MarkerCategory[] EMPTY_CATEGORY_ARRAY = new MarkerCategory[0];
 	static final MarkerEntry[] EMPTY_ENTRY_ARRAY = new MarkerEntry[0];
 
-	 //the marker entries
+	// the marker entries
 	private MarkerEntry[] markerEntryArray = EMPTY_ENTRY_ARRAY;
-	//the categories
+	// the categories
 	private MarkerCategory[] categories = EMPTY_CATEGORY_ARRAY;
 
-	
 	private CachedMarkerBuilder builder;
-	
-	private boolean inChange=false;
+
+	private boolean inChange = false;
 
 	// markerToEntryMap is a lazily created map from the markers to thier
 	// corresponding entry
 	private Map markerToEntryMap = null;
 	private Integer[] markerCounts;
 
-
 	Markers(CachedMarkerBuilder builder) {
 		this.builder = builder;
-		inChange=false;
+		inChange = false;
 	}
 
 	/**
 	 * Update with newly collected markers
 	 * 
 	 * @param markerEntries
-	 * 						the new marker entries 
+	 *            the new marker entries
 	 * @param sortAndGroup
-	 * 			true 	sort and group them
+	 *            true sort and group them
 	 * @param monitor
 	 */
 	synchronized boolean updateWithNewMarkers(Collection markerEntries,
 			boolean sortAndGroup, IProgressMonitor monitor) {
-		boolean initialVal=inChange;
+		boolean initialVal = inChange;
 		try {
-			inChange=true;
+			inChange = true;
 			if (markerToEntryMap != null) {
 				markerToEntryMap.clear();
 				markerToEntryMap = null;
@@ -103,7 +102,7 @@ class Markers {
 			}
 			return true;
 		} finally {
-			inChange=initialVal;
+			inChange = initialVal;
 		}
 	}
 
@@ -113,9 +112,9 @@ class Markers {
 	 * @param monitor
 	 */
 	synchronized boolean sortAndMakeCategories(IProgressMonitor monitor) {
-		boolean initialVal=inChange;
+		boolean initialVal = inChange;
 		try {
-			inChange=true;
+			inChange = true;
 			// Sort by Category first
 			if (builder.isShowingHierarchy()) {
 				MarkerCategory[] markerCategories = groupIntoCategories(
@@ -132,7 +131,7 @@ class Markers {
 
 			return sortMarkerEntries(monitor);
 		} finally {
-			inChange=initialVal;
+			inChange = initialVal;
 		}
 	}
 
@@ -143,9 +142,9 @@ class Markers {
 		if (monitor.isCanceled()) {
 			return false;
 		}
-		boolean initialVal=inChange;
+		boolean initialVal = inChange;
 		try {
-			inChange=true;
+			inChange = true;
 			if (builder.isShowingHierarchy()) {
 				Comparator comparator = builder.getComparator()
 						.getFieldsComparator();
@@ -168,8 +167,8 @@ class Markers {
 				}
 				int avaialble = markerEntryArray.length - 1;
 				int effLimit = getShowingLimit(avaialble);
-				MarkerSortUtil.sortStartingKElement(markerEntryArray, builder
-						.getComparator(), effLimit, monitor);
+				MarkerSortUtil.sortStartingKElement(markerEntryArray,
+						builder.getComparator(), effLimit, monitor);
 			}
 			if (monitor.isCanceled()) {
 				return false;
@@ -177,19 +176,25 @@ class Markers {
 			monitor.worked(50);
 			return true;
 		} finally {
-			inChange=initialVal;
+			inChange = initialVal;
 		}
 	}
 
 	/**
 	 * get marker limit to show, if any.
-	 * @param avaliable
+	 * 
+	 * @param available
 	 */
-	private int getShowingLimit(int avaliable) {
-		int limit = MarkerSupportInternalUtilities.getMarkerLimit();
+	private int getShowingLimit(int available) {
+		
+		boolean limitsEnabled = builder.getGenerator().isMarkerLimitsEnabled();
+		if(!limitsEnabled)
+			return available;
+		
+		int limit = builder.getGenerator().getMarkerLimits();
 		int effLimit = limit;
-		if (avaliable < effLimit || limit == -1) {
-			effLimit = avaliable;
+		if (available < effLimit || limit <= 0) {
+			effLimit = available;
 		}
 		return effLimit;
 	}
@@ -203,8 +208,8 @@ class Markers {
 	 */
 	MarkerCategory[] groupIntoCategories(IProgressMonitor monitor,
 			MarkerEntry[] newMarkers) {
-		Map boundaryInfoMap = groupMarkerEntries(newMarkers, builder
-				.getCategoryGroup(), newMarkers.length - 1, monitor);
+		Map boundaryInfoMap = groupMarkerEntries(newMarkers,
+				builder.getCategoryGroup(), newMarkers.length - 1, monitor);
 		Iterator iterator = boundaryInfoMap.keySet().iterator();
 		int start = 0;
 		MarkerCategory[] markerCategories = new MarkerCategory[boundaryInfoMap
@@ -215,8 +220,8 @@ class Markers {
 			Object key = iterator.next();
 			end = ((Integer) boundaryInfoMap.get(key)).intValue();
 			markerCategories[i++] = new MarkerCategory(this, start, end,
-					builder.getCategoryGroup().getMarkerField().getValue(
-							newMarkers[start]));
+					builder.getCategoryGroup().getMarkerField()
+							.getValue(newMarkers[start]));
 			start = end + 1;
 		}
 		return markerCategories;
@@ -234,21 +239,21 @@ class Markers {
 	 * @return {@link Map}
 	 * 
 	 */
-	private Map groupMarkerEntries(MarkerEntry[] entries, MarkerGroup group, int k,
-			IProgressMonitor monitor) {
+	private Map groupMarkerEntries(MarkerEntry[] entries, MarkerGroup group,
+			int k, IProgressMonitor monitor) {
 		TreeMap map = new TreeMap(group.getEntriesComparator());
 		for (int i = 0; i <= k; i++) {
 			IMarker marker = entries[i].getMarker();
 			if (marker == null) {
 				continue;// skip stale markers
 			}
-			if(monitor.isCanceled()){
+			if (monitor.isCanceled()) {
 				map.clear();
 				return map;
 			}
 			try {
-				MarkerGroupingEntry groupingEntry = group.findGroupValue(marker
-						.getType(), marker);
+				MarkerGroupingEntry groupingEntry = group.findGroupValue(
+						marker.getType(), marker);
 				List list = (List) map.get(groupingEntry);
 				if (list == null) {
 					list = new ArrayList();
@@ -262,7 +267,7 @@ class Markers {
 		Iterator keys = map.keySet().iterator();
 		int i = 0;
 		while (keys.hasNext()) {
-			if(monitor.isCanceled()){
+			if (monitor.isCanceled()) {
 				map.clear();
 				return map;
 			}
@@ -287,16 +292,16 @@ class Markers {
 	 */
 	Integer[] getMarkerCounts() {
 		if (markerCounts == null) {
-			markerCounts=getMarkerCounts(markerEntryArray);
+			markerCounts = getMarkerCounts(markerEntryArray);
 
 		}
 		return markerCounts;
 	}
 
 	/**
-	 * Returns an array of marker counts for the given MarkerEntry array
-	 * , where getMarkerCounts()[severity] is the number of markers in 
-	 * the list with the given severity.
+	 * Returns an array of marker counts for the given MarkerEntry array , where
+	 * getMarkerCounts()[severity] is the number of markers in the list with the
+	 * given severity.
 	 * 
 	 * @return an array of {@link Integer} where index indicates
 	 *         [errors,warnings,infos,others]
@@ -366,7 +371,7 @@ class Markers {
 	 * @return MarkerSupportItem[]
 	 */
 	public MarkerSupportItem[] getElements() {
-		if(builder.isShowingHierarchy()){
+		if (builder.isShowingHierarchy()) {
 			return categories;
 		}
 		return markerEntryArray;
@@ -378,10 +383,9 @@ class Markers {
 	CachedMarkerBuilder getBuilder() {
 		return builder;
 	}
-	
+
 	/**
-	 * Use clone where thread safety is concerned.
-	 * The method is non-blocking.
+	 * Use clone where thread safety is concerned. The method is non-blocking.
 	 */
 	Markers getClone() {
 		Markers markers = new Markers(builder);
@@ -399,7 +403,9 @@ class Markers {
 		return inChange;
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Object#hashCode()
 	 */
 	public int hashCode() {
@@ -409,7 +415,9 @@ class Markers {
 		return result;
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
 	public boolean equals(Object obj) {
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java
index 990c326..84c0b25 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,7 +45,7 @@ abstract class MarkersContribution extends CompoundContributionItem {
 	/**
 	 * Get the view this contribution is working on.
 	 * 
-	 * @return ExtendedMarkersView
+	 * @return ExtendedMarkersView or <code>null</code> if the active view isn't a marker view
 	 */
 	ExtendedMarkersView getView() {
 		IWorkbenchWindow active = PlatformUI.getWorkbench()
@@ -56,7 +56,7 @@ abstract class MarkersContribution extends CompoundContributionItem {
 		if (page == null)
 			return null;
 		IWorkbenchPart part = page.getActivePart();
-		if (part == null)
+		if (!(part instanceof ExtendedMarkersView))
 			return null;
 
 		return (ExtendedMarkersView) part;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java
index f124dfc..a3bec66 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -122,7 +122,7 @@ public class MarkersPropertyPage extends PropertyPage {
 		Label label = new Label(parent, SWT.NONE);
 		label.setText(MarkerMessages.propertiesDialog_creationTime_text);
 
-		Label creationTime = new Label(parent, SWT.NONE);
+		Text creationTime = new Text(parent, SWT.SINGLE | SWT.READ_ONLY);
 		creationTime.setText(Util.getCreationTime(marker));
 	}
 
@@ -236,8 +236,7 @@ public class MarkersPropertyPage extends PropertyPage {
 		severityImage.setImage(Util.getImage(marker.getAttribute(
 				IMarker.SEVERITY, -1)));
 
-		Label severityLabel = new Label(composite, SWT.NONE);
-
+		Text severityLabel = new Text(composite, SWT.SINGLE | SWT.READ_ONLY);
 		int severity = marker.getAttribute(IMarker.SEVERITY, -1);
 		if (severity == IMarker.SEVERITY_ERROR) {
 			severityLabel.setText(MarkerMessages.propertiesDialog_errorLabel);
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewColumnsDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewColumnsDialog.java
new file mode 100644
index 0000000..5b8b075
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewColumnsDialog.java
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.views.markers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.views.markers.MarkerField;
+
+/**
+ * MarkersViewSettingDialog is the dialog for showing marker preferences.
+ * 
+ * 
+ * @since 3.7
+ * @author Hitesh Soliwal
+ * 
+ */
+public class MarkersViewColumnsDialog extends ViewerColumnsDialog {
+
+	private ExtendedMarkersView extendedView;
+
+	/**
+	 * Create a new instance of the receiver.
+	 * 
+	 * @param view
+	 *            - the view this is being launched from
+	 */
+	public MarkersViewColumnsDialog(ExtendedMarkersView view) {
+		super(view.getSite().getShell());
+		this.extendedView = view;
+		initialize(false);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
+	 * .Shell)
+	 */
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(JFaceResources
+				.getString("ConfigureColumnsDialog_Title")); //$NON-NLS-1$
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.window.Window#getShellStyle()
+	 */
+	protected int getShellStyle() {
+		return super.getShellStyle() | SWT.RESIZE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
+	 * .Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+		Control control = super.createDialogArea(parent);
+		return control;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+		extendedView.setVisibleFields(getVisibleFields(), getNewWidths());
+		super.okPressed();
+	}
+
+	/**
+	 */
+	private int[] getNewWidths() {
+		List visible = getVisible();
+		int[] widths = new int[visible.size()];
+		int i = 0;
+		Iterator iterator = visible.iterator();
+		while (iterator.hasNext()) {
+			widths[i] = ((FieldEntry) iterator.next()).width;
+			i++;
+		}
+		return widths;
+	}
+
+	private Collection getVisibleFields() {
+		List visible = getVisible();
+		List list = new ArrayList(visible.size());
+		Iterator iterator = visible.iterator();
+		while (iterator.hasNext()) {
+			list.add(((FieldEntry) iterator.next()).field);
+		}
+		return list;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
+	 */
+	protected void performDefaults() {
+		initialize(true);
+		super.performDefaults();
+	}
+
+	/**
+	 */
+	void initialize(boolean defaultWidths) {
+		MarkerField[] allFields = extendedView.getBuilder().getGenerator()
+				.getAllFields();
+		MarkerField[] visibleFields = null;
+		if (defaultWidths) {
+			visibleFields = extendedView.getBuilder().getGenerator()
+					.getInitialVisible();
+		} else {
+			visibleFields = extendedView.getBuilder().getGenerator()
+					.getVisibleFields();
+		}
+		List visible = getVisible();
+		List nonVisible = getNonVisible();
+		visible.clear();
+		nonVisible.clear();
+		FieldEntry entry = null;
+		for (int i = 0; i < allFields.length; i++) {
+			if (!contains(visibleFields, allFields[i])) {
+				entry = new FieldEntry(allFields[i], -1);
+				entry.width = extendedView.getFieldWidth(entry.field,
+						defaultWidths ? 0 : -1, !defaultWidths);
+				entry.visible = false;
+				nonVisible.add(entry);
+			}
+		}
+		for (int i = 0; i < visibleFields.length; i++) {
+			entry = new FieldEntry(visibleFields[i], -1);
+			entry.width = extendedView.getFieldWidth(entry.field,
+					defaultWidths ? 0 : -1, !defaultWidths);
+			entry.visible = true;
+			visible.add(entry);
+		}
+	}
+
+	/**
+	 * @param visibleFields
+	 * @param field
+	 */
+	private boolean contains(MarkerField[] visibleFields, MarkerField field) {
+		for (int i = 0; i < visibleFields.length; i++) {
+			if (visibleFields[i].equals(field)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getLabelProvider
+	 * ()
+	 */
+	protected ITableLabelProvider getLabelProvider() {
+		return new TableLabelProvider() {
+			public String getText(Object element) {
+				return ((FieldEntry) element).field.getName();
+			}
+		};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#
+	 * getColumnInfoProvider()
+	 */
+	protected IColumnInfoProvider getColumnInfoProvider() {
+
+		return new IColumnInfoProvider() {
+			public int getColumnIndex(Object columnObj) {
+				return getVisible().indexOf(columnObj);
+			}
+
+			public int getColumnWidth(Object columnObj) {
+				FieldEntry field = (FieldEntry) columnObj;
+				if (field.width <= 0) {
+					field.width = extendedView.getFieldWidth(field.field,
+							field.width, false);
+				}
+				return field.width;
+			}
+
+			public boolean isColumnVisible(Object columnObj) {
+				return ((FieldEntry) columnObj).visible;
+			}
+
+			public boolean isColumnMovable(Object columnObj) {
+				return true;
+			}
+
+			public boolean isColumnResizable(Object columnObj) {
+				return true;
+			}
+		};
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getColumnUpdater
+	 * ()
+	 */
+	protected IColumnUpdater getColumnUpdater() {
+
+		return new IColumnUpdater() {
+			public void setColumnVisible(Object columnObj, boolean visible) {
+				((FieldEntry) columnObj).visible = visible;
+			}
+
+			public void setColumnMovable(Object columnObj, boolean movable) {
+				// not implemented
+			}
+
+			public void setColumnIndex(Object columnObj, int index) {
+				// ignore
+			}
+
+			public void setColumnResizable(Object columnObj, boolean resizable) {
+				// ignore
+			}
+
+			public void setColumnWidth(Object columnObj, int newWidth) {
+				((FieldEntry) columnObj).width = newWidth;
+			}
+		};
+	}
+
+	static class FieldEntry {
+		final MarkerField field;
+		int width;
+		boolean visible;
+
+		FieldEntry(MarkerField field, int width) {
+			this.field = field;
+			this.width = width;
+			visible = false;
+		}
+
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + ((field == null) ? 0 : field.hashCode());
+			return result;
+		}
+
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			FieldEntry other = (FieldEntry) obj;
+			if (field == null) {
+				if (other.field != null)
+					return false;
+			} else if (!field.equals(other.field))
+				return false;
+			return true;
+		}
+
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java
index 53e9cca..2f049da 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,17 +8,24 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
-
 package org.eclipse.ui.internal.views.markers;
 
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
 import org.eclipse.ui.views.markers.MarkerSupportView;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
 import org.eclipse.ui.views.markers.internal.MarkerSupportRegistry;
 
+
 /**
- * The ProblemsView is the view supplied by the ide to show
- * problems.
+ * The Problems view is the view supplied by the IDE to show problems.
+ * 
  * @since 3.4
- *
  */
 public class ProblemsView extends MarkerSupportView {
 
@@ -30,4 +37,34 @@ public class ProblemsView extends MarkerSupportView {
 		
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.internal.views.markers.ExtendedMarkersView#updateTitleImage(java.lang.Integer[])
+	 */
+	void updateTitleImage(Integer[] counts) {
+		Image image= WorkbenchPlugin.getDefault().getSharedImages().getImage(IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW);
+		if (counts[0].intValue() > 0)
+			image= WorkbenchPlugin.getDefault().getSharedImages().getImage(IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW_ERROR);
+		else if (counts[1].intValue() > 0)
+			image= WorkbenchPlugin.getDefault().getSharedImages().getImage(IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW_WARNING);
+		setTitleImage(image);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getUndoContext()
+	 * @since 3.7
+	 */
+	protected IUndoContext getUndoContext() {
+		return WorkspaceUndoUtil.getProblemsUndoContext();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.internal.views.markers.ExtendedMarkersView#getDeleteOperationName(org.eclipse.core.resources.IMarker[])
+	 * @since 3.7
+	 */
+	protected String getDeleteOperationName(IMarker[] markers) {
+		Assert.isLegal(markers.length > 0);
+		return markers.length == 1 ? MarkerMessages.deleteProblemMarker_operationName : MarkerMessages.deleteProblemMarkers_operationName;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
index e302957..f18328d 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.ui.internal.views.markers;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -71,8 +72,9 @@ public class QuickFixHandler extends MarkerViewHandler {
 		if (view == null)
 			return this;
 
-		final Map resolutions = new LinkedHashMap();
-		final IMarker selected = view.getSelectedMarkers()[0];
+		final Map resolutionsMap = new LinkedHashMap();
+		final IMarker[] selectedMarkers = view.getSelectedMarkers();
+		final IMarker firstSelectedMarker = selectedMarkers[0];
 
 		IRunnableWithProgress resolutionsRunnable = new IRunnableWithProgress() {
 			public void run(IProgressMonitor monitor) {
@@ -83,26 +85,24 @@ public class QuickFixHandler extends MarkerViewHandler {
 
 				IMarker[] allMarkers = view.getAllMarkers();
 				monitor.worked(20);
-				IMarkerResolution[] found = IDE.getMarkerHelpRegistry()
-						.getResolutions(selected);
+				IMarkerResolution[] resolutions = IDE.getMarkerHelpRegistry().getResolutions(firstSelectedMarker);
 				int progressCount = 80;
-				if (found.length > 1)
-					progressCount = progressCount / found.length;
-				for (int i = 0; i < found.length; i++) {
-					IMarkerResolution markerResolution = found[i];
+				if (resolutions.length > 1)
+					progressCount= progressCount / resolutions.length;
+				for (int i = 0; i < resolutions.length; i++) {
+					IMarkerResolution markerResolution= resolutions[i];
 					if (markerResolution instanceof WorkbenchMarkerResolution) {
-						IMarker[] other = ((WorkbenchMarkerResolution) markerResolution)
-								.findOtherMarkers(allMarkers);
-						Collection markers = new ArrayList();
-						markers.add(selected);
-						for (int j = 0; j < other.length; j++) {
-							markers.add(other[j]);
+						IMarker[] other = ((WorkbenchMarkerResolution)markerResolution).findOtherMarkers(allMarkers);
+						if (containsAllButFirst(other, selectedMarkers)) {
+							Collection markers = new ArrayList(other.length + 1);
+							markers.add(firstSelectedMarker);
+							markers.addAll(Arrays.asList(other));
+							resolutionsMap.put(markerResolution, markers);
 						}
-						resolutions.put(markerResolution, markers);
-					} else {
-						Collection markers = new ArrayList();
-						markers.add(selected);
-						resolutions.put(markerResolution, markers);
+					} else if (selectedMarkers.length == 1) {
+						Collection markers = new ArrayList(1);
+						markers.add(firstSelectedMarker);
+						resolutionsMap.put(markerResolution, markers);
 					}
 					monitor.worked(progressCount);
 				}
@@ -133,22 +133,31 @@ public class QuickFixHandler extends MarkerViewHandler {
 					exception);
 		}
 
-		String markerDescription = selected.getAttribute(IMarker.MESSAGE,
+		String markerDescription= firstSelectedMarker.getAttribute(IMarker.MESSAGE,
 				MarkerSupportInternalUtilities.EMPTY_STRING);
-		if (resolutions.isEmpty()) {
-			MessageDialog
-					.openInformation(
-							view.getSite().getShell(),
-							MarkerMessages.resolveMarkerAction_dialogTitle,
-							NLS	.bind(MarkerMessages.MarkerResolutionDialog_NoResolutionsFound,
-									  new Object[] { markerDescription }));
+		if (resolutionsMap.isEmpty()) {
+			if (selectedMarkers.length == 1) {
+				MessageDialog
+				.openInformation(
+						view.getSite().getShell(),
+						MarkerMessages.resolveMarkerAction_dialogTitle,
+						NLS	.bind(MarkerMessages.MarkerResolutionDialog_NoResolutionsFound,
+								new Object[] { markerDescription }));
+			} else {
+				MessageDialog
+				.openInformation(
+						view.getSite().getShell(),
+						MarkerMessages.resolveMarkerAction_dialogTitle,
+						MarkerMessages.MarkerResolutionDialog_NoResolutionsFoundForMultiSelection);
+				
+			}
 		} else {
 
 			String description = NLS.bind(
 					MarkerMessages.MarkerResolutionDialog_Description,
 					markerDescription);
 
-			Wizard wizard = new QuickFixWizard(description, resolutions, view
+			Wizard wizard= new QuickFixWizard(description, selectedMarkers, resolutionsMap, view
 					.getSite());
 			wizard.setWindowTitle(MarkerMessages.resolveMarkerAction_dialogTitle);
 			WizardDialog dialog = new QuickFixWizardDialog(view.getSite()
@@ -157,4 +166,23 @@ public class QuickFixHandler extends MarkerViewHandler {
 		}
 		return this;
 	}
+
+	/**
+	 * Checks whether the given extent contains all all but the first element from the given array.
+	 * 
+	 * @param extent the array which should contain the elements
+	 * @param members the elements to check
+	 * @return <code>true</code> if all but the first element are inside the extent
+	 * @since 3.7
+	 */
+	private static boolean containsAllButFirst(Object[] extent, Object[] members) {
+		outer: for (int i= 1; i < members.length; i++) {
+			for (int j= 0; j < extent.length; j++) {
+				if (members[i] == extent[j])
+					continue outer;
+			}
+			return false;
+		}
+		return true;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
index 584e7f3..23955fd 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.util.Collection;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.dialogs.Dialog;
@@ -31,10 +32,10 @@ import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.jface.wizard.WizardPage;
@@ -54,10 +55,12 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IMarkerResolution;
-import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IMarkerResolution2;
 import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.OpenAndLinkWithEditorHelper;
+import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
 import org.eclipse.ui.statushandlers.StatusManager;
 import org.eclipse.ui.views.markers.WorkbenchMarkerResolution;
@@ -73,24 +76,26 @@ import org.eclipse.ui.views.markers.internal.Util;
 public class QuickFixPage extends WizardPage {
 
 	private Map resolutions;
-	private ListViewer resolutionsList;
+
+	private TableViewer resolutionsList;
 	private CheckboxTableViewer markersTable;
 	private IWorkbenchPartSite site;
+	private final IMarker[] selectedMarkers;
+
 
 	/**
 	 * Create a new instance of the receiver.
 	 * 
-	 * @param problemDescription
-	 *            the description of the problem being fixed
-	 * @param resolutions
-	 *            {@link Map} with key of {@link IMarkerResolution} and value of
+	 * @param problemDescription the description of the problem being fixed
+	 * @param selectedMarkers the selected markers
+	 * @param resolutions {@link Map} with key of {@link IMarkerResolution} and value of
 	 *            {@link Collection} of {@link IMarker}
-	 * @param site
-	 *            The IWorkbenchPartSite to show markers
+	 * @param site The IWorkbenchPartSite to show markers
 	 */
-	public QuickFixPage(String problemDescription, Map resolutions,
+	public QuickFixPage(String problemDescription, IMarker[] selectedMarkers, Map resolutions,
 			IWorkbenchPartSite site) {
 		super(problemDescription);
+		this.selectedMarkers= selectedMarkers;
 		this.resolutions = resolutions;
 		this.site = site;
 		setTitle(MarkerMessages.resolveMarkerAction_dialogTitle);
@@ -161,7 +166,9 @@ public class QuickFixPage extends WizardPage {
 		resolutionsList.setSelection(new StructuredSelection(resolutionsList
 				.getElementAt(0)));
 
-		markersTable.setAllChecked(true);
+		markersTable.setCheckedElements(selectedMarkers);
+		
+		setPageComplete(markersTable.getCheckedElements().length > 0);
 	}
 
 	/**
@@ -220,7 +227,7 @@ public class QuickFixPage extends WizardPage {
 	 * @param control
 	 */
 	private void createResolutionsList(Composite control) {
-		resolutionsList = new ListViewer(control, SWT.BORDER | SWT.SINGLE
+		resolutionsList= new TableViewer(control, SWT.BORDER | SWT.SINGLE
 				| SWT.V_SCROLL);
 		resolutionsList.setContentProvider(new IStructuredContentProvider() {
 			/*
@@ -262,6 +269,16 @@ public class QuickFixPage extends WizardPage {
 			public String getText(Object element) {
 				return ((IMarkerResolution) element).getLabel();
 			}
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
+			 * @since 3.7
+			 */
+			public Image getImage(Object element) {
+				return element instanceof IMarkerResolution2 ? ((IMarkerResolution2)element).getImage() : null;
+			}
 		});
 
 		resolutionsList.setInput(this);
@@ -287,19 +304,9 @@ public class QuickFixPage extends WizardPage {
 					 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
 					 */
 					public void selectionChanged(SelectionChangedEvent event) {
-
 						markersTable.refresh();
-
-						IWorkbenchWindow window = PlatformUI.getWorkbench()
-								.getActiveWorkbenchWindow();
-						if (window == null)
-							return;
-						IWorkbenchPage page = window.getActivePage();
-						if (page == null)
-							return;
-
+						setPageComplete(markersTable.getCheckedElements().length > 0);
 					}
-
 				});
 	}
 
@@ -455,25 +462,32 @@ public class QuickFixPage extends WizardPage {
 			}
 		});
 
-		markersTable
-				.addSelectionChangedListener(new ISelectionChangedListener() {
-					/*
-					 * (non-Javadoc)
-					 * 
-					 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
-					 */
-					public void selectionChanged(SelectionChangedEvent event) {
+		new OpenAndLinkWithEditorHelper(markersTable) {
+			
+			{ setLinkWithEditor(false); }
 
-						if (event.getSelection().isEmpty())
-							return;
-						IMarker marker = (IMarker) ((IStructuredSelection) event
-								.getSelection()).getFirstElement();
-						ExtendedMarkersView.openMarkerInEditor(marker, site
-								.getPage());
+			protected void activate(ISelection selection) {
+				open(selection, true);
+			}
 
+			/** Not supported*/
+			protected void linkToEditor(ISelection selection) {
+			}
+			
+			protected void open(ISelection selection, boolean activate) {
+				if (selection.isEmpty())
+					return;
+				IMarker marker = (IMarker) ((IStructuredSelection) selection)
+						.getFirstElement();
+				if (marker != null && marker.getResource() instanceof IFile) {
+					try {
+						IDE.openEditor(site.getPage(), marker, activate);
+					} catch (PartInitException e) {
+						MarkerSupportInternalUtilities.showViewError(e);
 					}
-				});
-
+				}
+			}
+		};
 		markersTable.setInput(this);
 	}
 
@@ -514,15 +528,6 @@ public class QuickFixPage extends WizardPage {
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
-	 */
-	public boolean isPageComplete() {
-		return true;
-	}
-
 	/**
 	 * Finish has been pressed. Process the resolutions. monitor the monitor to
 	 * report to.
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
index 26bb848..e066500 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,7 @@ import org.eclipse.ui.views.markers.internal.MarkerMessages;
  */
 class QuickFixWizard extends Wizard {
 
+	private IMarker[] selectedMarkers;
 	private Map resolutionMap;
 	private String description;
 	private IWorkbenchPartSite partSite;
@@ -44,12 +45,12 @@ class QuickFixWizard extends Wizard {
 	 * Create the wizard with the map of resolutions.
 	 * 
 	 * @param description the description of the problem
-	 * @param resolutions
-	 *            Map key {@link IMarkerResolution} value {@link IMarker} []
+	 * @param selectedMarkers the markers that were selected
+	 * @param resolutions Map key {@link IMarkerResolution} value {@link IMarker} []
 	 * @param site the {@link IWorkbenchPartSite} to open the markers in
 	 */
-	public QuickFixWizard(String description,Map resolutions, IWorkbenchPartSite site) {
-		super();
+	public QuickFixWizard(String description, IMarker[] selectedMarkers, Map resolutions, IWorkbenchPartSite site) {
+		this.selectedMarkers= selectedMarkers;
 		this.resolutionMap = resolutions;
 		this.description = description;
 		partSite = site;
@@ -66,7 +67,7 @@ class QuickFixWizard extends Wizard {
 	 */
 	public void addPages() {
 		super.addPages();
-		addPage(new QuickFixPage(description,resolutionMap,partSite));
+		addPage(new QuickFixPage(description, selectedMarkers, resolutionMap, partSite));
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java
index cff6aa8..2879a0c 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,8 +51,11 @@ public class SortFieldContribution extends MarkersContribution {
 	 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
 	 */
 	protected IContributionItem[] getContributionItems() {
+		ExtendedMarkersView view = getView();
+		if (view == null)
+			return new IContributionItem[0];
 
-		MarkerField[] fields = getView().getVisibleFields();
+		MarkerField[] fields = view.getVisibleFields();
 
 		if (fields.length == 0)
 			return new IContributionItem[0];
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java
index 9e47707..770aaf2 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,12 +8,17 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
-
 package org.eclipse.ui.internal.views.markers;
 
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.views.markers.MarkerSupportView;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
 import org.eclipse.ui.views.markers.internal.MarkerSupportRegistry;
 
+
 /**
  * TasksView is the ide view for showing tasks.
  * @since 3.4
@@ -28,4 +33,23 @@ public class TasksView extends MarkerSupportView {
 		super(MarkerSupportRegistry.TASKS_GENERATOR);
 		
 	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getUndoContext()
+	 * @since 3.7
+	 */
+	protected IUndoContext getUndoContext() {
+		return WorkspaceUndoUtil.getTasksUndoContext();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.internal.views.markers.ExtendedMarkersView#getDeleteOperationName(org.eclipse.core.resources.IMarker[])
+	 * @since 3.7
+	 */
+	protected String getDeleteOperationName(IMarker[] markers) {
+		Assert.isLegal(markers.length > 0);
+		return markers.length == 1 ? MarkerMessages.deleteTaskMarker_operationName : MarkerMessages.deleteTaskMarkers_operationName;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java
index 3a6bd52..9833332 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -315,7 +315,7 @@ public class TypesConfigurationArea extends GroupFilterConfigurationArea {
 		gridData.widthHint = Dialog.convertVerticalDLUsToPixels(
 				getFontMetrics(), 100);
 		gridData.heightHint = Dialog.convertVerticalDLUsToPixels(
-				getFontMetrics(), 75);
+				getFontMetrics(), 50);
 
 		final ITreeContentProvider typesContentProvider = getTypesContentProvider();
 		typesViewer.getControl().setLayoutData(gridData);
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
new file mode 100644
index 0000000..fe195a4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
@@ -0,0 +1,994 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.views.markers;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Random;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
+
+/**
+ * This was introduced as a fix to Bug 231081 and related, as an effort to
+ * combine the columns and preference dialogs into one. It should be noted that
+ * the class can be re-used or turned into a tool for column viewers in general,
+ * but with some modifications. See example attached at the end of this class
+ * 
+ * @since 3.7
+ * 
+ * @author Hitesh Soliwal
+ * 
+ * @noextend This class is not intended to be subclassed by clients.
+ * 
+ */
+abstract class ViewerColumnsDialog extends ViewerSettingsAndStatusDialog {
+
+	/** The list contains columns that are currently visible in viewer */
+	private List visible;
+
+	/** The list contains columns that are note shown in viewer */
+	private List nonVisible;
+
+	private TableViewer visibleViewer, nonVisibleViewer;
+
+	private Button upButton, downButton;
+
+	private Button toVisibleBtt, toNonVisibleBtt;
+
+	private Label widthLabel;
+	private Text widthText;
+
+	private Point tableLabelSize;
+
+	/**
+	 * Create a new instance of the receiver.
+	 * 
+	 * @param parentShell
+	 */
+	ViewerColumnsDialog(Shell parentShell) {
+		super(parentShell);
+	}
+
+	/**
+	 * Initialize visible /non-visible columns.
+	 * 
+	 * @param columnObjs
+	 */
+	void setColumnsObjs(Object[] columnObjs) {
+		IColumnInfoProvider columnInfo = doGetColumnInfoProvider();
+		IColumnUpdater updater = doGetColumnUpdater();
+		List visible = getVisible();
+		List nonVisible = getNonVisible();
+		visible.clear();
+		nonVisible.clear();
+		Object data = null;
+		for (int i = 0; i < columnObjs.length; i++) {
+			data = columnObjs[i];
+			if (columnInfo.isColumnVisible(data)) {
+				updater.setColumnVisible(data, true);
+				updater.setColumnIndex(data, visible.size());
+				visible.add(data);
+			} else {
+				updater.setColumnVisible(data, false);
+				updater.setColumnIndex(data, nonVisible.size());
+				nonVisible.add(data);
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
+	 * createDialogContentArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogContentArea(Composite dialogArea) {
+		Composite composite = new Composite(dialogArea, SWT.NONE);
+		GridLayout gridLayout = new GridLayout(4, false);
+		gridLayout.marginHeight = 0;
+		composite.setLayout(gridLayout);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		createInvisibleTable(composite);
+		createMoveButtons(composite);
+		createVisibleTable(composite);
+		createUpDownBtt(composite);
+		createWidthArea(composite);
+		Object element = visibleViewer.getElementAt(0);
+		if (element != null)
+			visibleViewer.setSelection(new StructuredSelection(element));
+		visibleViewer.getTable().setFocus();
+		return composite;
+	}
+
+	/**
+	 * The Up and Down button to change column ordering.
+	 * 
+	 * @param parent
+	 */
+	Control createUpDownBtt(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout compositeLayout = new GridLayout();
+		compositeLayout.marginHeight = 0;
+		compositeLayout.marginWidth = 0;
+		composite.setLayout(compositeLayout);
+		composite.setLayoutData(new GridData(SWT.NONE, SWT.FILL, false, true));
+		
+		Composite bttArea = new Composite(composite, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginHeight = 0;
+		bttArea.setLayout(layout);
+		bttArea.setLayoutData(new GridData(SWT.NONE, SWT.CENTER, false, true));
+		upButton = new Button(bttArea, SWT.PUSH);
+		upButton.setText(JFaceResources.getString("ConfigureColumnsDialog_up")); //$NON-NLS-1$
+		upButton.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				handleUpButton(event);
+			}
+		});
+		setButtonLayoutData(upButton);
+		((GridData)upButton.getLayoutData()).verticalIndent = tableLabelSize.y;
+		upButton.setEnabled(false);
+
+		downButton = new Button(bttArea, SWT.PUSH);
+		downButton.setText(JFaceResources
+				.getString("ConfigureColumnsDialog_down")); //$NON-NLS-1$
+		downButton.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				handleDownButton(event);
+			}
+		});
+		setButtonLayoutData(downButton);
+		downButton.setEnabled(false);
+		return bttArea;
+	}
+
+	/**
+	 * Create the controls responsible to display/edit column widths.
+	 * 
+	 * @param parent
+	 * @return {@link Control}
+	 */
+	Control createWidthArea(Composite parent) {
+
+		Label dummy = new Label(parent, SWT.NONE);
+		dummy.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false, 2, 1));
+		
+		Composite widthComposite = new Composite(parent, SWT.NONE);
+		GridLayout gridLayout = new GridLayout(2, false);
+		gridLayout.marginHeight = 0;
+		widthComposite.setLayout(gridLayout);
+		widthComposite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 2, 1));
+		
+		widthLabel = new Label(widthComposite, SWT.NONE);
+		widthLabel.setText(MarkerMessages.MarkerPreferences_WidthOfShownColumn);
+		GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+		widthLabel.setLayoutData(gridData);
+
+		widthText = new Text(widthComposite, SWT.BORDER);
+		widthText.addVerifyListener(new VerifyListener() {
+
+			public void verifyText(VerifyEvent e) {
+				if (e.character != 0 && e.keyCode != SWT.BS
+						&& e.keyCode != SWT.DEL
+						&& !Character.isDigit(e.character)) {
+					e.doit = false;
+				}
+			}
+		});
+
+		gridData = new GridData();
+		gridData.widthHint = convertWidthInCharsToPixels(5);
+		widthText.setLayoutData(gridData);
+		widthText.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				updateWidth();
+			}
+		});
+		setWidthEnabled(false);
+		return widthText;
+	}
+
+	private void setWidthEnabled(boolean enabled) {
+		widthLabel.setEnabled(enabled);
+		widthText.setEnabled(enabled);
+	}
+
+	/**
+	 * Creates the table that lists out visible columns in the viewer
+	 * 
+	 * @param parent
+	 * @return {@link Control}
+	 */
+	Control createVisibleTable(Composite parent) {
+
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.marginHeight =0;
+		composite.setLayout(gridLayout);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		Label label = new Label(composite, SWT.NONE);
+		label.setText(MarkerMessages.MarkerPreferences_VisibleColumnsTitle);
+
+		final Table table = new Table(composite, SWT.BORDER | SWT.MULTI);
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.widthHint = convertWidthInCharsToPixels(20);
+		data.heightHint = table.getItemHeight() * 15;
+		table.setLayoutData(data);
+
+		final TableColumn column = new TableColumn(table, SWT.NONE);
+		column.setText(MarkerMessages.MarkerPreferences_VisibleColumnsTitle);
+		Listener columnResize = new Listener() {
+			public void handleEvent(Event event) {
+				column.setWidth(table.getClientArea().width);
+			}
+		};
+		table.addListener(SWT.Resize, columnResize);
+
+		visibleViewer = new TableViewer(table);
+		visibleViewer.setLabelProvider(doGetLabelProvider());
+		visibleViewer.setContentProvider(ArrayContentProvider.getInstance());
+		visibleViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+					public void selectionChanged(SelectionChangedEvent event) {
+						handleVisibleSelection(event.getSelection());
+					}
+				});
+		table.addListener(SWT.MouseDoubleClick, new Listener() {
+			public void handleEvent(Event event) {
+				handleToNonVisibleButton(event);
+			}
+		});
+		visibleViewer.setInput(getVisible());
+		return table;
+	}
+
+	/**
+	 * Creates the table that lists out non-visible columns in the viewer
+	 * 
+	 * @param parent
+	 * @return {@link Control}
+	 */
+	Control createInvisibleTable(Composite parent) {
+
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.marginHeight = 0;
+		composite.setLayout(gridLayout);
+
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		Label label = new Label(composite, SWT.NONE);
+		label.setText(MarkerMessages.MarkerPreferences_HiddenColumnsTitle);
+		applyDialogFont(label);
+		tableLabelSize = label.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+
+		final Table table = new Table(composite, SWT.BORDER | SWT.MULTI);
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.widthHint = convertWidthInCharsToPixels(20);
+		data.heightHint = table.getItemHeight() * 15;
+		table.setLayoutData(data);
+
+		final TableColumn column = new TableColumn(table, SWT.NONE);
+		column.setText(MarkerMessages.MarkerPreferences_HiddenColumnsTitle);
+		Listener columnResize = new Listener() {
+			public void handleEvent(Event event) {
+				column.setWidth(table.getClientArea().width);
+			}
+		};
+		table.addListener(SWT.Resize, columnResize);
+
+		nonVisibleViewer = new TableViewer(table);
+		nonVisibleViewer.setLabelProvider(doGetLabelProvider());
+		nonVisibleViewer.setContentProvider(ArrayContentProvider.getInstance());
+		nonVisibleViewer
+				.addSelectionChangedListener(new ISelectionChangedListener() {
+					public void selectionChanged(SelectionChangedEvent event) {
+						handleNonVisibleSelection(event.getSelection());
+					}
+				});
+		table.addListener(SWT.MouseDoubleClick, new Listener() {
+			public void handleEvent(Event event) {
+				handleToVisibleButton(event);
+			}
+		});
+		nonVisibleViewer.setInput(getNonVisible());
+		return table;
+	}
+
+	/**
+	 * Creates buttons for moving columns from non-visible to visible and
+	 * vice-versa
+	 * 
+	 * @param parent
+	 * @return {@link Control}
+	 */
+	Control createMoveButtons(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout compositeLayout = new GridLayout();
+		compositeLayout.marginHeight = 0;
+		compositeLayout.marginWidth = 0;
+		composite.setLayout(compositeLayout);
+		composite.setLayoutData(new GridData(SWT.NONE, SWT.FILL, false, true));
+
+		Composite bttArea = new Composite(composite, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.marginHeight = 0;
+		bttArea.setLayout(layout);
+		bttArea.setLayoutData(new GridData(SWT.NONE, SWT.CENTER, false, true));
+
+		toVisibleBtt = new Button(bttArea, SWT.PUSH);
+		toVisibleBtt.setText(MarkerMessages.MarkerPreferences_MoveRight);
+		setButtonLayoutData(toVisibleBtt);
+		((GridData)toVisibleBtt.getLayoutData()).verticalIndent = tableLabelSize.y;
+		toVisibleBtt.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				handleToVisibleButton(event);
+			}
+		});
+		toVisibleBtt.setEnabled(false);
+
+		toNonVisibleBtt = new Button(bttArea, SWT.PUSH);
+		toNonVisibleBtt.setText(MarkerMessages.MarkerPreferences_MoveLeft);
+		setButtonLayoutData(toNonVisibleBtt);
+
+		toNonVisibleBtt.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				handleToNonVisibleButton(event);
+			}
+		});
+		toNonVisibleBtt.setEnabled(false);
+
+		return bttArea;
+	}
+
+	/**
+	 * Handles a selection change in the viewer that lists out the non-visible
+	 * columns
+	 * 
+	 * @param selection
+	 */
+	void handleNonVisibleSelection(ISelection selection) {
+		Object[] nvKeys = ((IStructuredSelection) selection).toArray();
+		toVisibleBtt.setEnabled(nvKeys.length > 0);
+		if (visibleViewer.getControl().isFocusControl()
+				&& getVisible().size() <= 1) {
+			handleStatusUdpate(IStatus.INFO,
+					MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
+		} else {
+			handleStatusUdpate(IStatus.INFO, getDefaultMessage());
+		}
+	}
+
+	/**
+	 * Handles a selection change in the viewer that lists out the visible
+	 * columns. Takes care of various enablements.
+	 * 
+	 * @param selection
+	 */
+	void handleVisibleSelection(ISelection selection) {
+		List selVCols = ((IStructuredSelection) selection).toList();
+		List allVCols = getVisible();
+		toNonVisibleBtt.setEnabled(selVCols.size() > 0
+				&& allVCols.size() > selVCols.size());
+
+		IColumnInfoProvider infoProvider = doGetColumnInfoProvider();
+		boolean moveDown = !selVCols.isEmpty(), moveUp = !selVCols.isEmpty();
+		Iterator iterator = selVCols.iterator();
+		while (iterator.hasNext()) {
+			Object columnObj = iterator.next();
+			if (!infoProvider.isColumnMovable(columnObj)) {
+				moveUp = false;
+				moveDown = false;
+				break;
+			}
+			int i = allVCols.indexOf(columnObj);
+			if (i == 0) {
+				moveUp = false;
+				if (!moveDown) {
+					break;
+				}
+			}
+			if (i == (allVCols.size() - 1)) {
+				moveDown = false;
+				if (!moveUp) {
+					break;
+				}
+			}
+		}
+		upButton.setEnabled(moveUp);
+		downButton.setEnabled(moveDown);
+
+		boolean edit = selVCols.size() == 1 ? infoProvider
+				.isColumnResizable(selVCols.get(0)) : false;
+		setWidthEnabled(edit);
+		if (edit) {
+			int width = infoProvider.getColumnWidth(selVCols.get(0));
+			widthText.setText(Integer.toString(width));
+		} else {
+			widthText.setText(""); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Applies to visible columns, and handles the changes in the order of
+	 * columns
+	 * 
+	 * @param e
+	 *            event from the button click
+	 */
+	void handleDownButton(Event e) {
+		IStructuredSelection selection = (IStructuredSelection) visibleViewer
+				.getSelection();
+		Object[] selVCols = selection.toArray();
+		List allVCols = getVisible();
+		IColumnUpdater updater = doGetColumnUpdater();
+		for (int i = selVCols.length - 1; i >= 0; i--) {
+			Object colObj = selVCols[i];
+			int index = allVCols.indexOf(colObj);
+			updater.setColumnIndex(colObj, index + 1);
+			allVCols.remove(index);
+			allVCols.add(index + 1, colObj);
+		}
+		visibleViewer.refresh();
+		handleVisibleSelection(selection);
+	}
+
+	/**
+	 * Applies to visible columns, and handles the changes in the order of
+	 * columns
+	 * 
+	 * @param e
+	 *            event from the button click
+	 */
+	void handleUpButton(Event e) {
+		IStructuredSelection selection = (IStructuredSelection) visibleViewer
+				.getSelection();
+		Object[] selVCols = selection.toArray();
+		List allVCols = getVisible();
+		IColumnUpdater updater = doGetColumnUpdater();
+		for (int i = 0; i < selVCols.length; i++) {
+			Object colObj = selVCols[i];
+			int index = allVCols.indexOf(colObj);
+			updater.setColumnIndex(colObj, index - 1);
+			allVCols.remove(index);
+			allVCols.add(index - 1, colObj);
+		}
+		visibleViewer.refresh();
+		handleVisibleSelection(selection);
+	}
+
+	/**
+	 * Moves selected columns from non-visible to visible state
+	 * 
+	 * @param e
+	 *            event from the button click
+	 */
+	void handleToVisibleButton(Event e) {
+		IStructuredSelection selection = (IStructuredSelection) nonVisibleViewer
+				.getSelection();
+		List selVCols = selection.toList();
+		List nonVisible = getNonVisible();
+		nonVisible.removeAll(selVCols);
+
+		List list = getVisible();
+		list.addAll(selVCols);
+
+		updateVisibility(selVCols, true);
+		updateIndices(getVisible());
+		updateIndices(getNonVisible());
+
+		visibleViewer.refresh();
+		visibleViewer.setSelection(selection);
+		nonVisibleViewer.refresh();
+		handleVisibleSelection(selection);
+		handleNonVisibleSelection(nonVisibleViewer.getSelection());
+
+	}
+
+	/**
+	 * Moves selected columns from visible to non-visible state
+	 * 
+	 * @param e
+	 *            event from the button click
+	 */
+	protected void handleToNonVisibleButton(Event e) {
+		if (visibleViewer.getControl().isFocusControl()
+				&& getVisible().size() <= 1) {
+			handleStatusUdpate(IStatus.INFO,
+					MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
+			return;
+		}
+		IStructuredSelection selection = (IStructuredSelection) visibleViewer
+				.getSelection();
+		List selVCols = selection.toList();
+		getVisible().removeAll(selVCols);
+		getNonVisible().addAll(selVCols);
+
+		updateVisibility(selVCols, false);
+		updateIndices(getVisible());
+		updateIndices(getNonVisible());
+
+		nonVisibleViewer.refresh();
+		nonVisibleViewer.setSelection(selection);
+		visibleViewer.refresh();
+		handleVisibleSelection(visibleViewer.getSelection());
+		handleNonVisibleSelection(nonVisibleViewer.getSelection());
+	}
+
+	void updateIndices(List list) {
+		ListIterator iterator = list.listIterator();
+		IColumnUpdater updater = doGetColumnUpdater();
+		while (iterator.hasNext()) {
+			updater.setColumnIndex(iterator.next(), iterator.previousIndex());
+		}
+	}
+
+	void updateVisibility(List list, boolean visibility) {
+		IColumnUpdater updater = doGetColumnUpdater();
+		Iterator iterator = list.iterator();
+		while (iterator.hasNext()) {
+			updater.setColumnVisible(iterator.next(), visibility);
+		}
+	}
+	
+	protected void performDefaults() {
+		refreshViewers();
+		super.performDefaults();
+	}
+
+	/**
+	 * Updates the UI based on values of the variable
+	 */
+	void refreshViewers() {
+		if (nonVisibleViewer != null) {
+			nonVisibleViewer.refresh();
+		}
+		if (visibleViewer != null) {
+			visibleViewer.refresh();
+		}
+	}
+
+	/**
+	 * @return List of visible columns
+	 */
+	public List getVisible() {
+		if (visible == null) {
+			visible = new ArrayList();
+		}
+		return visible;
+	}
+
+	/**
+	 * @return List of non-visible columns
+	 */
+	public List getNonVisible() {
+		if (nonVisible == null) {
+			nonVisible = new ArrayList();
+		}
+		return nonVisible;
+	}
+
+	/**
+	 * An adapter class to {@link ITableLabelProvider}
+	 * 
+	 */
+	class TableLabelProvider extends LabelProvider implements
+			ITableLabelProvider {
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
+
+		public String getColumnText(Object element, int columnIndex) {
+			return getText(element);
+		}
+	}
+
+	/**
+	 * Internal helper to @see {@link ViewerColumnsDialog#getLabelProvider()}
+	 */
+	ITableLabelProvider doGetLabelProvider() {
+		return getLabelProvider();
+	}
+
+	/**
+	 * The tables-columns need to be displayed appropriately. The supplied
+	 * column objects are adapted to text and image as dictacted by this
+	 * {@link ITableLabelProvider}
+	 */
+	protected abstract ITableLabelProvider getLabelProvider();
+
+	/**
+	 * Internal helper to @see
+	 * {@link ViewerColumnsDialog#getColumnInfoProvider()}
+	 */
+	IColumnInfoProvider doGetColumnInfoProvider() {
+		return getColumnInfoProvider();
+	}
+
+	/**
+	 * To configure the columns we need further information. The supplied column
+	 * objects are adapted for its properties via {@link IColumnInfoProvider}
+	 */
+	protected abstract IColumnInfoProvider getColumnInfoProvider();
+
+	/**
+	 * Internal helper to @see {@link ViewerColumnsDialog#getColumnUpdater()}
+	 */
+	IColumnUpdater doGetColumnUpdater() {
+		return getColumnUpdater();
+	}
+
+	/**
+	 * To configure properties/order of the columns is achieved via
+	 * {@link IColumnUpdater}
+	 */
+	protected abstract IColumnUpdater getColumnUpdater();
+
+	/**
+	 * 
+	 */
+	private void updateWidth() {
+		try {
+			int width = Integer.parseInt(widthText.getText());
+			Object data = ((IStructuredSelection) visibleViewer.getSelection())
+					.getFirstElement();
+			if (data != null) {
+				IColumnUpdater updater = getColumnUpdater();
+				updater.setColumnWidth(data, width);
+			}
+		} catch (NumberFormatException ex) {
+			// ignore
+		}
+	}
+
+	/**
+	 * Update various aspects of a columns from a viewer such
+	 * {@link TableViewer}
+	 */
+	public interface IColumnInfoProvider {
+
+		/**
+		 * Get corresponding index for the column
+		 * 
+		 * @param columnObj
+		 */
+		public int getColumnIndex(Object columnObj);
+
+		/**
+		 * Get the width of the column
+		 * 
+		 * @param columnObj
+		 */
+		public int getColumnWidth(Object columnObj);
+
+		/**
+		 * Returns true if the column represented by parameters is showing in
+		 * the viewer
+		 * 
+		 * @param columnObj
+		 */
+		public boolean isColumnVisible(Object columnObj);
+
+		/**
+		 * Returns true if the column represented by parameters is configured as
+		 * movable
+		 * 
+		 * @param columnObj
+		 */
+		public boolean isColumnMovable(Object columnObj);
+
+		/**
+		 * Returns true if the column represented by parameters is configured as
+		 * resizable
+		 * 
+		 * @param columnObj
+		 */
+		public boolean isColumnResizable(Object columnObj);
+
+	}
+
+	/**
+	 * Update various aspects of a columns from a viewer such
+	 * {@link TableViewer}
+	 */
+	public interface IColumnUpdater {
+
+		/**
+		 * Set the column represented by parameters as visible
+		 * 
+		 * @param columnObj
+		 * @param visible
+		 */
+		public void setColumnVisible(Object columnObj, boolean visible);
+
+		/**
+		 * Dummy method - more a result of symmetry
+		 * 
+		 * @param columnObj
+		 * @param movable
+		 */
+		public void setColumnMovable(Object columnObj, boolean movable);
+
+		/**
+		 * Call back to notify change in the index of the column represented by
+		 * columnObj
+		 * 
+		 * @param columnObj
+		 * @param index
+		 */
+		public void setColumnIndex(Object columnObj, int index);
+
+		/**
+		 * Dummy method - more a result of symmetry
+		 * 
+		 * @param columnObj
+		 * @param resizable
+		 */
+		public void setColumnResizable(Object columnObj, boolean resizable);
+
+		/**
+		 * Call back to notify change in the width of the column represented by
+		 * columnObj
+		 * 
+		 * @param columnObj
+		 * @param newWidth
+		 */
+		public void setColumnWidth(Object columnObj, int newWidth);
+
+	}
+
+	// //////////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ignore the class below as it is simply meant to test the above. I intend
+	 * to retain this for a while.
+	 */
+	static class TestData {
+
+		final Object key;
+
+		final int keyIndex;
+
+		int newIndex, width;
+
+		boolean visibility, movable, resizable;
+
+		TestData(Object key, int currIndex) {
+			this.key = key;
+			this.keyIndex = currIndex;
+		}
+
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + ((key == null) ? 0 : key.hashCode());
+			result = prime * result + keyIndex;
+			return result;
+		}
+
+		public boolean equals(Object obj) {
+			if (this == obj) {
+				return true;
+			}
+			if (obj == null) {
+				return false;
+			}
+			if (!(obj instanceof TestData)) {
+				return false;
+			}
+			TestData other = (TestData) obj;
+			if (key == null) {
+				if (other.key != null) {
+					return false;
+				}
+			} else if (!key.equals(other.key)) {
+				return false;
+			}
+			if (keyIndex != other.keyIndex) {
+				return false;
+			}
+			return true;
+		}
+
+		public String toString() {
+			return key.toString();
+		}
+
+		private static ViewerColumnsDialog getColumnsDialog(Shell shell,
+				final TestData[] colums) {
+			ViewerColumnsDialog dialog = new ViewerColumnsDialog(shell) {
+
+				protected IColumnInfoProvider getColumnInfoProvider() {
+					return getInfoProvider(colums);
+				}
+
+				protected ITableLabelProvider getLabelProvider() {
+					return new TableLabelProvider();
+				}
+
+				protected IColumnUpdater getColumnUpdater() {
+					return getUpdater(colums);
+				}
+			};
+			dialog.setColumnsObjs(colums);
+			return dialog;
+		}
+
+		private static IColumnUpdater getUpdater(final TestData[] data) {
+			return new IColumnUpdater() {
+
+				public void setColumnWidth(Object columnObj, int newWidth) {
+					((TestData) columnObj).width = newWidth;
+				}
+
+				public void setColumnVisible(Object columnObj, boolean visible) {
+					((TestData) columnObj).visibility = visible;
+				}
+
+				public void setColumnResizable(Object columnObj,
+						boolean resizable) {
+
+				}
+
+				public void setColumnMovable(Object columnObj, boolean movable) {
+					((TestData) columnObj).movable = movable;
+
+				}
+
+				public void setColumnIndex(Object columnObj, int index) {
+					((TestData) columnObj).newIndex = index;
+				}
+			};
+		}
+
+		private static IColumnInfoProvider getInfoProvider(
+				final TestData[] colData) {
+			return new IColumnInfoProvider() {
+
+				public boolean isColumnVisible(Object columnObj) {
+					return ((TestData) columnObj).visibility;
+				}
+
+				public boolean isColumnResizable(Object columnObj) {
+					return ((TestData) columnObj).resizable;
+				}
+
+				public boolean isColumnMovable(Object columnObj) {
+					return ((TestData) columnObj).movable;
+				}
+
+				public int getColumnWidth(Object columnObj) {
+					return ((TestData) columnObj).width;
+				}
+
+				public int getColumnIndex(Object columnObj) {
+					return ((TestData) columnObj).newIndex;
+				}
+			};
+		}
+
+		private static TestData[] genData(int count) {
+			String[] cols = new String[count];
+			for (int i = 0; i < cols.length; i++) {
+				cols[i] = new String("Column-" + (i + 1)); //$NON-NLS-1$
+			}
+			Random random = new Random();
+
+			boolean[] visibility = new boolean[cols.length];
+			Arrays.fill(visibility, true);
+			int ranInt = random.nextInt() % cols.length;
+			for (int i = 0; i < ranInt; i++) {
+				visibility[random.nextInt(ranInt)] = false;
+			}
+
+			boolean[] resizable = new boolean[cols.length];
+			Arrays.fill(resizable, true);
+			ranInt = random.nextInt() % cols.length;
+			for (int i = 0; i < ranInt; i++) {
+				resizable[random.nextInt(ranInt)] = false;
+			}
+
+			boolean[] movable = new boolean[cols.length];
+			Arrays.fill(movable, true);
+			ranInt = random.nextInt() % cols.length;
+			for (int i = 0; i < ranInt; i++) {
+				movable[random.nextInt(ranInt)] = false;
+			}
+
+			int[] widths = new int[cols.length];
+			Arrays.fill(widths, 100);
+			return TestData.generateColumnsData(cols, visibility, resizable,
+					movable, widths);
+		}
+
+		public static TestData[] generateColumnsData(Object[] keys,
+				boolean[] visibility, boolean[] resizable, boolean[] movable,
+				int[] widths) {
+			TestData[] colData = new TestData[keys.length];
+			int m = 0, n = 0;
+			for (int i = 0; i < colData.length; i++) {
+				TestData data = new TestData(keys[i], i);
+				data.visibility = visibility[i];
+				data.resizable = resizable[i];
+				data.movable = movable[i];
+				data.width = widths[i];
+				if (data.visibility) {
+					data.newIndex = m++;
+				} else {
+					data.newIndex = n++;
+				}
+				colData[i] = data;
+			}
+			return colData;
+		}
+
+		/**
+		 * Demo
+		 * 
+		 * @param args
+		 */
+		public static void main(String[] args) {
+			Display display = new Display();
+			final Shell shell = new Shell(display);
+			shell.setLayout(new FillLayout());
+			ViewerColumnsDialog dialog = getColumnsDialog(shell, genData(100));
+			dialog.open();
+			shell.dispose();
+			while (!shell.isDisposed()) {
+				if (!display.readAndDispatch()) {
+					display.sleep();
+				}
+			}
+			display.dispose();
+
+		}
+
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerSettingsAndStatusDialog.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerSettingsAndStatusDialog.java
new file mode 100644
index 0000000..955b960
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerSettingsAndStatusDialog.java
@@ -0,0 +1,300 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.views.markers;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.preferences.ViewSettingsDialog;
+
+/**
+ * @since 3.7
+ * @author Hitesh Soliwal
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public abstract class ViewerSettingsAndStatusDialog extends ViewSettingsDialog {
+
+	private Label imageLabel;
+	/** The message area */
+	private Text messageArea;
+	private Composite msgParent;
+
+	/**
+	 * @param parentShell
+	 */
+	public ViewerSettingsAndStatusDialog(Shell parentShell) {
+		super(parentShell);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
+	 * .Shell)
+	 */
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.window.Window#getShellStyle()
+	 */
+	protected int getShellStyle() {
+		return super.getShellStyle() | SWT.RESIZE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
+	 */
+	protected Point getInitialSize() {
+		Point size = super.getInitialSize();
+		size.y += convertHeightInCharsToPixels(3);
+		return size;
+	}
+
+	protected Control createDialogArea(Composite parent) {
+
+		Composite dialogArea = (Composite) super.createDialogArea(parent);
+
+		dialogArea.setLayout(new GridLayout(1, true));
+
+		initializeDialogUnits(dialogArea);
+
+		createMessageArea(dialogArea).setLayoutData(
+				new GridData(SWT.FILL, SWT.NONE, true, false));
+
+		createDialogContentArea(dialogArea).setLayoutData(
+				new GridData(SWT.FILL, SWT.FILL, true, true));
+
+		applyDialogFont(dialogArea);
+
+		initializeDialog();
+
+		return dialogArea;
+	}
+
+	/**
+	 * @param dialogArea
+	 */
+	protected abstract Control createDialogContentArea(Composite dialogArea);
+
+	/**
+	 * 
+	 */
+	protected void initializeDialog() {
+		handleStatusUdpate(IStatus.INFO, getDefaultMessage());
+	}
+
+	/**
+	 * Create message area.
+	 * 
+	 * @param parent
+	 */
+	Control createMessageArea(Composite parent) {
+		msgParent = new Composite(parent, SWT.BORDER);
+		msgParent.setBackground(getMessageBackground());
+		msgParent.setLayout(new GridLayout(2, false));
+
+		imageLabel = new Label(msgParent, SWT.NONE);
+		imageLabel.setBackground(msgParent.getBackground());
+		imageLabel.setImage(JFaceResources
+				.getImage(Dialog.DLG_IMG_MESSAGE_INFO));
+		imageLabel
+				.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
+
+		messageArea = new Text(msgParent, SWT.READ_ONLY | SWT.NONE | SWT.WRAP
+				| SWT.MULTI | SWT.V_SCROLL);
+		messageArea.setEditable(false);
+		messageArea.setBackground(msgParent.getBackground());
+		messageArea
+				.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		return msgParent;
+	}
+
+	/**
+	 * Display the message and an appropriate icon.
+	 * 
+	 * @param status
+	 */
+	protected void handleStatusUdpate(IStatus status) {
+		handleStatusUdpate(status.getSeverity(), status.getMessage());
+	}
+
+	/**
+	 * Display the message and an appropriate icon.
+	 * 
+	 * @param messgage
+	 * @param severity
+	 */
+	protected void handleStatusUdpate(int severity, String messgage) {
+		Image image = null;
+		Button okBttn = getButton(OK);
+		switch (severity) {
+		case IStatus.ERROR: {
+			if (messgage == null) {
+				messgage = getErrorMessage();
+			}
+			image = getErrorImage();
+			break;
+		}
+		case IStatus.WARNING: {
+			image = getWarningImage();
+			break;
+		}
+		case IStatus.OK:
+		case IStatus.INFO:
+		default:
+			image = getInfoImage();
+		}
+		if (messgage == null) {
+			messgage = getDefaultMessage();
+		}
+		if (messgage.equals(MarkerSupportInternalUtilities.EMPTY_STRING)) {
+			handleMessageAreaVisibility(false);
+			image = null;
+		} else {
+			handleMessageAreaVisibility(true);
+		}
+		if (okBttn != null) {
+			okBttn.setEnabled(severity == IStatus.OK
+					|| severity == IStatus.INFO || severity == IStatus.WARNING);
+		}
+		if (msgParent != null) {
+			setMessageImage(image);
+			setMessageText(messgage);
+			msgParent.layout();
+		}
+	}
+
+	/**
+	 * @param image
+	 */
+	protected void setMessageImage(Image image) {
+		if (imageLabel != null) {
+			imageLabel.setImage(image);
+		}
+	}
+
+	/**
+	 * @param messgage
+	 */
+	protected void setMessageText(String messgage) {
+		if (messageArea != null) {
+			messageArea.setText(messgage);
+		}
+	}
+
+	/**
+	 * 
+	 */
+	protected Image getMessageImage() {
+		if (imageLabel != null) {
+			imageLabel.getImage();
+		}
+		return null;
+	}
+
+	/**
+	 */
+	protected String getMessageText() {
+		if (messageArea != null) {
+			return messageArea.getText();
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param visible
+	 */
+	protected void handleMessageAreaVisibility(boolean visible) {
+		if (msgParent == null || msgParent.isDisposed()) {
+			return;
+		}
+		GridData data = (GridData) msgParent.getLayoutData();
+		if (data.exclude == visible) {
+			data.exclude = !visible;
+			msgParent.setVisible(visible);
+			msgParent.getParent().layout();
+		}
+	}
+
+	/**
+	 * Return the Color to display when dialog is opened.
+	 */
+	protected Color getMessageBackground() {
+		return getShell().getDisplay()
+				.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+	}
+
+	/**
+	 * Return the message to display when dialog is opened.
+	 */
+	protected String getDefaultMessage() {
+		return MarkerSupportInternalUtilities.EMPTY_STRING;
+	}
+
+	/**
+	 * @return Returns the error message to display for a wrong limit value.
+	 */
+	protected String getErrorMessage() {
+		return JFaceResources.getString("StringFieldEditor.errorMessage"); //$NON-NLS-1$
+	}
+
+	/**
+	 */
+	protected Image getInfoImage() {
+		return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_INFO);
+	}
+
+	/**
+	 */
+	protected Image getWarningImage() {
+		return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING);
+	}
+
+	/**
+	 */
+	protected Image getErrorImage() {
+		return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR);
+	}
+
+	protected void performDefaults() {
+		super.performDefaults();
+	}
+
+	protected boolean isResizable() {
+		return true;
+	}
+
+	protected void okPressed() {
+		super.okPressed();
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java
index 53710ec..9504059 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -162,6 +162,20 @@ public class ArchiveFileExportOperation implements IRunnableWithProgress {
             throws InterruptedException {
         exportResource(exportResource, 1);
     }
+    
+    /**
+     * Creates and returns the string that should be used as the name of the entry in the archive.
+     * @param exportResource the resource to export
+     * @param leadupDepth the number of resource levels to be included in the path including the resourse itself.
+     */
+    private String createDestinationName(int leadupDepth, IResource exportResource) {
+        IPath fullPath = exportResource.getFullPath();
+        if (createLeadupStructure) {
+        	return fullPath.makeRelative().toString();
+        }
+		return fullPath.removeFirstSegments(
+                fullPath.segmentCount() - leadupDepth).toString();
+    }
 
     /**
      *  Export the passed resource to the destination .zip
@@ -177,14 +191,7 @@ public class ArchiveFileExportOperation implements IRunnableWithProgress {
 		}
 
         if (exportResource.getType() == IResource.FILE) {
-            String destinationName;
-            IPath fullPath = exportResource.getFullPath();
-            if (createLeadupStructure) {
-				destinationName = fullPath.makeRelative().toString();
-			} else {
-				destinationName = fullPath.removeFirstSegments(
-                        fullPath.segmentCount() - leadupDepth).toString();
-			}
+        	String destinationName = createDestinationName(leadupDepth, exportResource);
             monitor.subTask(destinationName);
 
             try {
@@ -206,6 +213,15 @@ public class ArchiveFileExportOperation implements IRunnableWithProgress {
                 // this should never happen because an #isAccessible check is done before #members is invoked
                 addError(NLS.bind(DataTransferMessages.DataTransfer_errorExporting, exportResource.getFullPath()), e);
             }
+            
+            if (children.length == 0) { // create an entry for empty containers, see bug 278402
+            	String destinationName = createDestinationName(leadupDepth, exportResource);
+                try {
+            		exporter.write((IContainer) exportResource, destinationName + IPath.SEPARATOR);
+                } catch (IOException e) {
+                    addError(NLS.bind(DataTransferMessages.DataTransfer_errorExporting, exportResource.getFullPath().makeRelative(), e.getMessage()), e);
+                }
+            }
 
             for (int i = 0; i < children.length; i++) {
 				exportResource(children[i], leadupDepth + 1);
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/DataTransferMessages.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/DataTransferMessages.java
index e99c29f..aa05a19 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/DataTransferMessages.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/DataTransferMessages.java
@@ -51,8 +51,7 @@ public class DataTransferMessages extends NLS {
 	public static String FileImport_fromDirectory;
 	public static String FileImport_importFileSystem;
 	public static String FileImport_overwriteExisting;
-	public static String FileImport_createComplete;
-	public static String FileImport_createSelectedFolders;
+	public static String FileImport_createTopLevel;
 	public static String FileImport_createVirtualFolders;
 	public static String FileImport_importElementsAs;
 	public static String FileImport_createVirtualFoldersTooltip;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
index 126cf8e..3776888 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
@@ -287,7 +287,7 @@ public class WizardFileSystemResourceImportPage1 extends WizardResourceImportPag
         // create top-level folder check box
         createTopLevelFolderCheckbox= new Button(optionsGroup, SWT.CHECK);
         createTopLevelFolderCheckbox.setFont(optionsGroup.getFont());
-        createTopLevelFolderCheckbox.setText(DataTransferMessages.FileImport_createComplete);
+        createTopLevelFolderCheckbox.setText(DataTransferMessages.FileImport_createTopLevel);
         createTopLevelFolderCheckbox.setSelection(false);
         createTopLevelFolderCheckbox.addSelectionListener(new SelectionAdapter() {
         	public void widgetSelected(SelectionEvent e) {
@@ -520,6 +520,7 @@ public class WizardFileSystemResourceImportPage1 extends WizardResourceImportPag
         //Update enablements when this is selected
         updateWidgetEnablements();
         fileSystemStructureProvider.clearVisitedDirs();
+        selectionGroup.setFocus();
     }
 
     /**
@@ -1153,6 +1154,7 @@ public class WizardFileSystemResourceImportPage1 extends WizardResourceImportPag
         super.setVisible(visible);
         resetSelection();
         if (visible) {
+        	this.selectionGroup.setFocus();
 			this.sourceNameField.setFocus();
 		}
     }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java
index 8dbe51f..77f861e 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java
@@ -57,8 +57,8 @@ import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.Viewer;
@@ -296,6 +296,8 @@ public class WizardProjectsImportPage extends WizardPage implements
 	private Button copyCheckbox;
 
 	private boolean copyFiles = false;
+	
+	private boolean lastCopyFiles = false;
 
 	private ProjectRecord[] selectedProjects = new ProjectRecord[0];
 
@@ -643,7 +645,7 @@ public class WizardProjectsImportPage extends WizardPage implements
 		// project location entry field
 		this.directoryPathField = new Text(projectGroup, SWT.BORDER);
 
-		GridData directoryPathData = new GridData(SWT.FILL, SWT.NONE, true, false);
+		GridData directoryPathData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
 		directoryPathData.widthHint = new PixelConverter(directoryPathField).convertWidthInCharsToPixels(25);
 		directoryPathField.setLayoutData(directoryPathData);
 		
@@ -661,7 +663,7 @@ public class WizardProjectsImportPage extends WizardPage implements
 		// project location entry field
 		archivePathField = new Text(projectGroup, SWT.BORDER);
 
-		GridData archivePathData = new GridData(SWT.FILL, SWT.NONE, true, false);
+		GridData archivePathData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
 		archivePathData.widthHint = new PixelConverter(archivePathField).convertWidthInCharsToPixels(25);
 		archivePathField.setLayoutData(archivePathData); // browse button
 		browseArchivesButton = new Button(projectGroup, SWT.PUSH);
@@ -850,7 +852,7 @@ public class WizardProjectsImportPage extends WizardPage implements
 
 		final File directory = new File(path);
 		long modified = directory.lastModified();
-		if (path.equals(lastPath) && lastModified == modified) {
+		if (path.equals(lastPath) && lastModified == modified && lastCopyFiles == copyFiles) {
 			// since the file/folder was not modified and the path did not
 			// change, no refreshing is required
 			return;
@@ -858,6 +860,7 @@ public class WizardProjectsImportPage extends WizardPage implements
 
 		lastPath = path;
 		lastModified = modified;
+		lastCopyFiles = copyFiles;
 
 		// We can't access the radio button from the inner class so get the
 		// status beforehand
@@ -1353,6 +1356,12 @@ public class WizardProjectsImportPage extends WizardPage implements
 			// if location is null, project already exists in this location or
 			// some error condition occured.
 			if (locationURI != null) {
+				// validate the location of the project being copied
+				IStatus result = ResourcesPlugin.getWorkspace().validateProjectLocationURI(project,
+						locationURI);
+				if(!result.isOK())					
+					throw new InvocationTargetException(new CoreException(result));
+				
 				importSource = new File(locationURI);
 				IProjectDescription desc = workspace
 						.newProjectDescription(projectName);
@@ -1497,7 +1506,8 @@ public class WizardProjectsImportPage extends WizardPage implements
 	public ProjectRecord[] getProjectRecords() {
 		List projectRecords = new ArrayList();
 		for (int i = 0; i < selectedProjects.length; i++) {
-			if (isProjectInWorkspace(selectedProjects[i].getProjectName())) {
+			if ( (isProjectInWorkspacePath(selectedProjects[i].getProjectName()) && copyFiles)||
+					isProjectInWorkspace(selectedProjects[i].getProjectName())) {
 				selectedProjects[i].hasConflicts = true;
 			}
 			projectRecords.add(selectedProjects[i]);
@@ -1507,6 +1517,19 @@ public class WizardProjectsImportPage extends WizardPage implements
 	}
 
 	/**
+	 * Determine if there is a directory with the project name in the workspace path.
+	 * 
+	 * @param projectName the name of the project
+	 * @return true if there is a directory with the same name of the imported project
+	 */
+	private boolean isProjectInWorkspacePath(String projectName){
+		final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		IPath wsPath = workspace.getRoot().getLocation();
+		IPath localProjectPath = wsPath.append(projectName);
+		return localProjectPath.toFile().exists();
+	}
+
+	/**
 	 * Determine if the project with the given name is in the current workspace.
 	 * 
 	 * @param projectName
@@ -1543,6 +1566,7 @@ public class WizardProjectsImportPage extends WizardPage implements
 			// checkbox
 			copyFiles = settings.getBoolean(STORE_COPY_PROJECT_ID);
 			copyCheckbox.setSelection(copyFiles);
+			lastCopyFiles = copyFiles;
 		}
 				
 		// Second, check to see if we don't have an initial path, 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/messages.properties b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/messages.properties
index e69980c..db0ad31 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/messages.properties
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/messages.properties
@@ -49,8 +49,7 @@ FileImport_selectSourceTitle = Import from directory
 FileImport_fromDirectory = From director&y:
 FileImport_importFileSystem = Import resources from the local file system.
 FileImport_overwriteExisting = &Overwrite existing resources without warning
-FileImport_createComplete = &Create complete folder structure
-FileImport_createSelectedFolders = Create s&elected folders only
+FileImport_createTopLevel = &Create top-level folder
 FileImport_createVirtualFolders = Create &virtual folders
 FileImport_importElementsAs=Create l&ink locations relative to:
 FileImport_createVirtualFoldersTooltip = This option needs to be set when a partial hierarchy is selected.
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java
index b504ebf..b9bb730 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@ import org.eclipse.jface.viewers.ViewerCell;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.util.BundleUtility;
@@ -73,15 +74,15 @@ public abstract class MarkerField {
 					}
 				}
 				if (IDE.getMarkerHelpRegistry().hasResolutions(marker)) {
-					if (image == null){
-						image = getImageManager()
-						.createImage(
-								IDEInternalWorkbenchImages
-										.getImageDescriptor(IDEInternalWorkbenchImages.IMG_ELCL_QUICK_FIX_ENABLED));
-			
-					}else{
-						descriptors[IDecoration.BOTTOM_RIGHT] =
-							getIDEImageDescriptor(MarkerSupportInternalUtilities.IMG_MARKERS_QUICK_FIX_DECORATION_PATH);
+					if (image == MarkerSupportInternalUtilities.getSeverityImage(IMarker.SEVERITY_WARNING)) {
+						image = WorkbenchPlugin.getDefault().getSharedImages().getImage(IDEInternalWorkbenchImages.IMG_OBJS_FIXABLE_WARNING);
+					} else if (image == MarkerSupportInternalUtilities.getSeverityImage(IMarker.SEVERITY_ERROR)) {
+						image = WorkbenchPlugin.getDefault().getSharedImages().getImage(IDEInternalWorkbenchImages.IMG_OBJS_FIXABLE_ERROR);
+					} else if (image != null) {
+						descriptors[IDecoration.BOTTOM_RIGHT] = getIDEImageDescriptor(MarkerSupportInternalUtilities.IMG_MARKERS_QUICK_FIX_DECORATION_PATH);
+					}
+					if (image == null) {
+						image = WorkbenchPlugin.getDefault().getSharedImages().getImage(IDEInternalWorkbenchImages.IMG_ELCL_QUICK_FIX_ENABLED);
 					}
 				}
 
@@ -254,7 +255,7 @@ public abstract class MarkerField {
 	 */
 	public void update(ViewerCell cell) {
 		cell.setText(getValue((MarkerItem) cell.getElement()));
-
+		cell.setImage(null);
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java
index 7b27455..1b502d1 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007,2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,7 +46,7 @@ public abstract class MarkerViewHandler extends AbstractHandler {
 	 */
 	public MarkerSupportView getView(ExecutionEvent event) {
 		IWorkbenchPart part = HandlerUtil.getActivePart(event);
-		if (part == null)
+		if (!(part instanceof MarkerSupportView))
 			return null;
 		return (MarkerSupportView) part;
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
index 7b13317..5d327bd 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,7 +85,7 @@ public class DialogMarkerProperties extends TrayDialog {
 	/**
 	 * The control for the Creation Time field.
 	 */
-	private Label creationTime;
+	private Text creationTime;
 
 	/**
 	 * The text control for the Resource field.
@@ -339,7 +339,7 @@ public class DialogMarkerProperties extends TrayDialog {
         label.setText(MarkerMessages
                 .propertiesDialog_creationTime_text);
 
-        creationTime = new Label(parent, SWT.NONE);
+        creationTime = new Text(parent, SWT.SINGLE | SWT.READ_ONLY);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java
index d9a1751..ddc39a5 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,10 +18,11 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
 
 public class DialogProblemProperties extends DialogMarkerProperties {
 
-	private Label severityLabel;
+	private Text severityLabel;
 
 	private Label severityImage;
 
@@ -50,7 +51,7 @@ public class DialogProblemProperties extends DialogMarkerProperties {
 		composite.setLayout(layout);
 
 		severityImage = new Label(composite, SWT.NONE);
-		severityLabel = new Label(composite, SWT.NONE);
+		severityLabel = new Text(composite, SWT.SINGLE | SWT.READ_ONLY);
 	}
 
 	/*
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java
index cf32d8a..486b7f1 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,6 +76,8 @@ public class MarkerMessages extends NLS {
 	public static String filtersDialog_title;
 	public static String configureFiltersCommand_title;
 	public static String configureFiltersDialog_title;
+	
+	public static String configEditDialog_name;
 
 	public static String filtersDialog_showItemsOfType;
 	public static String filtersDialog_anyResource;
@@ -145,6 +147,17 @@ public class MarkerMessages extends NLS {
 	public static String marker_statusSelectedCount;
 	public static String errorsAndWarningsSummaryBreakdown;
 
+	public static String deleteMarkers_errorMessage;
+	public static String deleteMarker_operationName;
+	public static String deleteMarkers_operationName;
+	public static String deleteBookmarkMarker_operationName;
+	public static String deleteBookmarkMarkers_operationName;
+	public static String deleteTaskMarker_operationName;
+	public static String deleteTaskMarkers_operationName;
+	public static String deleteProblemMarker_operationName;
+	public static String deleteProblemMarkers_operationName;
+
+
 	public static String deleteCompletedAction_title;
 
 	public static String markCompletedAction_title;
@@ -198,15 +211,16 @@ public class MarkerMessages extends NLS {
 	public static String MarkerFilter_filtersTitle;
 	public static String MarkerFilter_addFilterName;
 	public static String MarkerFilter_cloneFilterName;
+	public static String MarkerFilter_editFilterName;
 	public static String MarkerFilter_deleteSelectedName;
 	public static String MarkerFilter_renameName;
 	public static String MarkerFilter_showAllCommand_title;
 	public static String MarkerFilter_ConfigureContentsCommand_title;
-
+	
 	public static String MarkerFilterDialog_title;
 	public static String MarkerFilterDialog_message;
 	public static String MarkerFilterDialog_emptyMessage;
-
+	public static String MarkerFilterDialog_YouHaveDisabledMarkerLimit;
 	public static String MarkerFilterDialog_errorTitle;
 	public static String MarkerFilterDialog_failedFilterMessage;
 
@@ -219,7 +233,8 @@ public class MarkerMessages extends NLS {
 	public static String MarkerPreferences_VisibleColumnsTitle;
 	public static String MarkerPreferences_HiddenColumnsTitle;
 	public static String MarkerPreferences_AtLeastOneVisibleColumn;
-
+	public static String MarkerPreferences_WidthOfShownColumn;
+	
 	public static String ProblemFilterDialog_System_Filters_Title;
 	public static String ProblemFilterDialog_All_Problems;
 	public static String ProblemFilterDialog_Selected_Types;
@@ -239,6 +254,8 @@ public class MarkerMessages extends NLS {
 	public static String FieldMessage_NullMessage;
 	public static String FieldCategory_Uncategorized;
 	public static String FieldMessage_WrongType;
+	public static String FiltersConfigurationDialog_title;
+	public static String FiltersConfigurationDialog_message;
 	public static String Category_Label;
 	public static String Category_Limit_Label;
 	public static String Category_One_Item_Label;
@@ -253,6 +270,7 @@ public class MarkerMessages extends NLS {
 	public static String MarkerResolutionDialog_CannotFixTitle;
 	public static String MarkerResolutionDialog_CannotFixMessage;
 	public static String MarkerResolutionDialog_NoResolutionsFound;
+	public static String MarkerResolutionDialog_NoResolutionsFoundForMultiSelection;
 
 	public static String MarkerResolutionDialog_Title;
 	public static String MarkerResolutionDialog_CalculatingTask;
@@ -285,9 +303,10 @@ public class MarkerMessages extends NLS {
 
 	public static String PasteHandler_title;
 
-	public static String AND_OR_Label;
+	public static String ALL_Title;
 	public static String AND_Title;
 	public static String OR_Title;
+	public static String MarkerConfigurationsLabel;
 
 	public static String ContentGenerator_NoGrouping;
 	public static String newViewTitle;
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSupportRegistry.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSupportRegistry.java
index dea9094..6213cba 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSupportRegistry.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSupportRegistry.java
@@ -60,6 +60,12 @@ public class MarkerSupportRegistry implements IExtensionChangeHandler {
 	private static final Object WARNING = "WARNING";//$NON-NLS-1$
 
 	private static final String MARKER_ID = "markerId"; //$NON-NLS-1$
+	
+	/**
+	 * Filter enablement : A zero/negative integer implies that the limit is
+	 * disabled.
+	 */
+	public static final String FILTER_LIMIT = "filterLimit"; //$NON-NLS-1$
 
 	/**
 	 * The tag for the marker support extension
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/messages.properties b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/messages.properties
index 9cd27fa..7abc9fa 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/messages.properties
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -60,6 +60,8 @@ propertiesAction_title = P&roperties
 deleteActionConfirmTitle = Delete Selected Entries
 deleteActionConfirmMessage = Do you want to delete the selected entries? Deleted markers may be recreated by a build or may not be recoverable.
 
+configEditDialog_name = N&ame:
+
 filtersDialog_title = Filters
 filtersDialog_entriesTitle = &Configurations:
 filtersDialog_showItemsOfType = Show items of &type:
@@ -77,7 +79,7 @@ filtersDialog_selectAllTypes = Sele&ct All
 filtersDialog_deselectAllTypes = Dese&lect All
 filtersDialog_conflictingName =  A filter already exists with the name {0}
 filtersDialogDeselectedFiltersTitle = Confirm Show All
-filtersDialogDeselectedFiltersMessage = You have not checked any configurations. This will show all entries. Continue?
+filtersDialogDeselectedFiltersMessage = You have not checked any configurations. This will show all entries.
 
 filtersDialog_descriptionLabel = Te&xt: 
 filtersDialog_contains = contains
@@ -133,6 +135,16 @@ marker_statusSummarySelected =   {0,choice,0#0 items |1#{0,number,integer} item
 marker_statusSelectedCount={0,choice,0#0 items |1#{0,number,integer} item |1<{0,number,integer} items} selected
 errorsAndWarningsSummaryBreakdown = {0,choice,0#0 errors|1#{0,number,integer} error|1<{0,number,integer} errors}, {1,choice,0#0 warnings|1#{1,number,integer} warning|1<{1,number,integer} warnings}, {2,choice,0#0 others|1#{2,number,integer} other|1<{2,number,integer} others}
 
+deleteMarkers_errorMessage= Error deleting markers
+deleteMarker_operationName= Delete Marker
+deleteMarkers_operationName= Delete Markers
+deleteBookmarkMarker_operationName= Delete Bookmark
+deleteBookmarkMarkers_operationName= Delete Bookmarks
+deleteTaskMarker_operationName= Delete Task
+deleteTaskMarkers_operationName= Delete Tasks
+deleteProblemMarker_operationName= Delete Problem
+deleteProblemMarkers_operationName= Delete Problems
+
 deleteCompletedAction_title = Delete Completed &Tasks
 markCompletedAction_title = &Mark Completed
 markCompletedHandler_task = Marking selected tasks completed
@@ -175,34 +187,38 @@ PasteMarker_errorTitle=Error
 RemoveMarker_errorTitle=Error
 
 MarkerFilter_defaultFilterName=Default
-MarkerFilter_newFilterName=New Filter
+MarkerFilter_newFilterName=New Configuration
 MarkerFilter_filtersTitle=User f&ilters:
-MarkerFilter_addFilterName=&New...
+MarkerFilter_addFilterName=&New
 MarkerFilter_cloneFilterName=D&uplicate...
+MarkerFilter_editFilterName=&Edit...
 MarkerFilter_deleteSelectedName = Remo&ve
 MarkerFilter_renameName = &Rename
 MarkerFilter_showAllCommand_title = &Show All
 MarkerFilter_ConfigureContentsCommand_title = &Configure Contents...
 
-MarkerFilterDialog_title=Filter Name
-MarkerFilterDialog_message=Select a filter name
+MarkerFilterDialog_title=Configuration Name
+MarkerFilterDialog_message=Enter a name for the configuration:
 MarkerFilterDialog_emptyMessage=Name must not be empty
-AND_OR_Label=Show results matching: 
-AND_Title = A&ll enabled filters
-OR_Title = &Any enabled filter
+ALL_Title = Sho&w all items
+AND_Title = Show items that match a&ll the configurations checked below
+OR_Title = Show items that match a&ny configuration checked below
+MarkerConfigurationsLabel = &Configurations:
 
 MarkerFilterDialog_errorTitle = An error has occurred
 MarkerFilterDialog_failedFilterMessage = Could not create filter {0}. 
 
 MarkerPreferences_DialogTitle = Preferences
-MarkerPreferences_MarkerLimits = Use marker &limits
-MarkerPreferences_VisibleItems = Limit visible &items per group to:
-MarkerPreferences_MoveLeft = <<
-MarkerPreferences_MoveRight = >>
+MarkerPreferences_MarkerLimits = &Use item limits
+MarkerPreferences_MoveLeft = <- &Hide 
+MarkerPreferences_MoveRight = &Show ->
 MarkerPreferences_ColumnGroupTitle = Hide/Show Columns
-MarkerPreferences_VisibleColumnsTitle = &Show
-MarkerPreferences_HiddenColumnsTitle = &Hide
+MarkerPreferences_VisibleColumnsTitle = Sh&own:
+MarkerPreferences_HiddenColumnsTitle = H&idden:
 MarkerPreferences_AtLeastOneVisibleColumn = There must be at least one visible column.
+MarkerPreferences_VisibleItems = Number of items visible per &group:
+MarkerFilterDialog_YouHaveDisabledMarkerLimit= You have selected to disable limiting items per group.
+MarkerPreferences_WidthOfShownColumn= &Width of the selected shown column:
 
 ProblemFilterDialog_System_Filters_Title = System filte&rs:
 ProblemFilterDialog_All_Problems = Enabled for all problems
@@ -214,7 +230,7 @@ ProblemFilterDialog_Contains_Description = On any description containing {0}
 ProblemFilterDialog_Does_Not_Contain_Description = On any description not containing {0}
 ProblemFilterDialog_any = Filter on any element
 ProblemFilterDialog_sameContainer = Filter on any in the same container
-ProblemFilterDialog_selectedAndChildren = Filter on selected element and it's children
+ProblemFilterDialog_selectedAndChildren = Filter on selected element and its children
 ProblemFilterDialog_selected = Filter on selected element only
 ProblemFilterDialog_workingSet = Filter on working set {0}  
 
@@ -224,6 +240,8 @@ FieldMessage_NullMessage = Marker is null
 FieldMessage_WrongType = {0} is not of a displayable type
 
 FieldCategory_Uncategorized = Other
+FiltersConfigurationDialog_title=Configure Contents
+FiltersConfigurationDialog_message=Configure the items to be shown in the view
 Category_Label = {0} ({1} items)
 Category_One_Item_Label = {0} (1 item)
 Category_Limit_Label = {0} ({1} of {2} items)
@@ -238,6 +256,7 @@ MarkerResolutionDialog_Resolutions_List_Title = &Select a fix:
 MarkerResolutionDialog_CannotFixTitle = Could not fix
 MarkerResolutionDialog_CannotFixMessage = Could not fix {0}
 MarkerResolutionDialog_NoResolutionsFound = No fixes available for ''{0}''.
+MarkerResolutionDialog_NoResolutionsFoundForMultiSelection =  The selected problems do not have a common applicable quick fix.\n\nOnly select similar problems or try Source > Clean Up... to fix multiple problems at once.
 
 MarkerResolutionDialog_AddOthers = Find Si&milar Problems
 
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java
index 6387af3..40b251b 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -128,7 +128,7 @@ public class MainActionGroup extends ResourceNavigatorActionGroup {
                 .getAffectedChildren(IResourceDelta.CHANGED);
         for (int i = 0; i < projDeltas.length; ++i) {
             IResourceDelta projDelta = projDeltas[i];
-            //changing the project open state or description will effect open/close/build action enablement
+            //changing the project open state or description will affect open/close/build action enablement
             if ((projDelta.getFlags() & (IResourceDelta.OPEN | IResourceDelta.DESCRIPTION)) != 0) {
                 if (sel.contains(projDelta.getResource())) {
                     getNavigator().getSite().getShell().getDisplay().syncExec(
diff --git a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java
index 7c0cd95..a845689 100644
--- a/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java
+++ b/eclipse/plugins/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredViewer;
@@ -39,6 +40,8 @@ import org.eclipse.ui.actions.MoveFilesAndFoldersOperation;
 import org.eclipse.ui.actions.ReadOnlyStateChecker;
 import org.eclipse.ui.dialogs.IOverwriteQuery;
 import org.eclipse.ui.ide.dialogs.ImportTypeDialog;
+import org.eclipse.ui.internal.ide.IDEInternalPreferences;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.views.navigator.ResourceNavigatorMessages;
 import org.eclipse.ui.part.PluginDropAdapter;
 import org.eclipse.ui.part.ResourceTransfer;
@@ -328,19 +331,26 @@ public class NavigatorDropAdapter extends PluginDropAdapter implements IOverwrit
 			}
 			// if all sources are either links or groups, copy then normally, don't show the dialog
 			if (!allSourceAreLinksOrGroups) {
-				ImportTypeDialog dialog = new ImportTypeDialog(getShell(), getCurrentOperation(), sources, target);
-				dialog.setResource(target);
-				if (dialog.open() == Window.OK) {
-					if (dialog.getSelection() == ImportTypeDialog.IMPORT_VIRTUAL_FOLDERS_AND_LINKS)
-						operation.setVirtualFolders(true);
-					if (dialog.getSelection() == ImportTypeDialog.IMPORT_LINK)
-						operation.setCreateLinks(true);
-					if (dialog.getVariable() != null)
-						operation.setRelativeVariable(dialog.getVariable());
-					operation.copyResources(sources, target);
+				IPreferenceStore store= IDEWorkbenchPlugin.getDefault().getPreferenceStore();
+				String dndPreference= store.getString(target.isVirtual() ? IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE : IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE);
+
+				if (dndPreference.equals(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT)) {
+					ImportTypeDialog dialog = new ImportTypeDialog(getShell(), getCurrentOperation(), sources, target);
+					dialog.setResource(target);
+					if (dialog.open() == Window.OK) {
+						if (dialog.getSelection() == ImportTypeDialog.IMPORT_VIRTUAL_FOLDERS_AND_LINKS)
+							operation.setVirtualFolders(true);
+						if (dialog.getSelection() == ImportTypeDialog.IMPORT_LINK)
+							operation.setCreateLinks(true);
+						if (dialog.getVariable() != null)
+							operation.setRelativeVariable(dialog.getVariable());
+						operation.copyResources(sources, target);
+					}
+					else
+						return problems;
 				}
 				else
-					return problems;
+					operation.copyResources(sources, target);
 			}
 			else
 				operation.copyResources(sources, target);
diff --git a/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF
index 3db2000..d5f2137 100644
--- a/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.intro.universal/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin_name
 Bundle-SymbolicName: org.eclipse.ui.intro.universal;singleton:=true
-Bundle-Version: 3.2.402.qualifier
+Bundle-Version: 3.2.500.qualifier
 Bundle-Vendor: %provider_name
 Bundle-Localization: plugin
 Export-Package: org.eclipse.ui.internal.intro.universal;x-friends:="org.eclipse.ua.tests",
diff --git a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/circles/html/rtl.css b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/circles/html/rtl.css
index d7e4ce0..b444c37 100644
--- a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/circles/html/rtl.css
+++ b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/circles/html/rtl.css
@@ -12,10 +12,7 @@
 /* 
  * This file contains styles that are specific to right to left display
  */
- 
-body {
-    direction: rtl;
-}
+
 
 table {
     direction: rtl;
diff --git a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/purpleMesh/html/rtl.css b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/purpleMesh/html/rtl.css
index 45b1814..8929906 100644
--- a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/purpleMesh/html/rtl.css
+++ b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/purpleMesh/html/rtl.css
@@ -12,10 +12,7 @@
 /* 
  * This file contains styles that are specific to right to left display
  */
- 
-body {
-    direction: rtl;
-}
+
 
 table {
     direction: rtl;
diff --git a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/rtl.css b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/rtl.css
index a3774eb..7053216 100644
--- a/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/rtl.css
+++ b/eclipse/plugins/org.eclipse.ui.intro.universal/themes/slate/html/rtl.css
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,10 @@
 /* 
  * This file contains styles that are specific to right to left display
  */
- 
-body {
-    direction: rtl;
-}
+
+#page-links {
+     direction: rtl;
+ }
 
 table {
     direction: rtl;
diff --git a/eclipse/plugins/org.eclipse.ui.intro/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.intro/META-INF/MANIFEST.MF
index b4213bf..18696ef 100644
--- a/eclipse/plugins/org.eclipse.ui.intro/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.intro/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin_name
 Bundle-SymbolicName: org.eclipse.ui.intro; singleton:=true
-Bundle-Version: 3.4.0.qualifier
+Bundle-Version: 3.4.100.qualifier
 Bundle-Activator: org.eclipse.ui.internal.intro.impl.IntroPlugin
 Bundle-Vendor: %provider_name
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/AbstractIntroElement.java b/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/AbstractIntroElement.java
index 0f62b02..a34abd3 100644
--- a/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/AbstractIntroElement.java
+++ b/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/AbstractIntroElement.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -273,10 +273,14 @@ public abstract class AbstractIntroElement implements Cloneable {
         if (element.hasAttribute(att)) {
             String value = element.getAttribute(att);
             if (value!=null) {
-            	IntroModelRoot root = getModelRoot();
-            	if (root!=null)
-            		value = root.resolveVariables(value);
-            	return StringUtil.split(value, ","); //$NON-NLS-1$
+            	String[] splitValues = StringUtil.split(value, ",");  //$NON-NLS-1$
+				IntroModelRoot root = getModelRoot();
+            	if (root!=null) {
+            		for (int i = 0; i < splitValues.length; i++) {
+            			splitValues[i] = root.resolveVariables(splitValues[i]);
+            		}     		
+            	}
+            	return splitValues;
             }
         }
         /*
diff --git a/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/History.java b/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/History.java
index dcd10df..7d17b30 100644
--- a/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/History.java
+++ b/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/History.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -237,6 +237,9 @@ public class History {
     }
 
     public boolean currentLocationIsUrl() {
+    	if (history.size() == 0) {
+    		return false;
+    	}
         return getCurrentLocation().isURL();
     }
 
diff --git a/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/url/IntroURL.java b/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/url/IntroURL.java
index 66059b2..ffde98c 100644
--- a/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/url/IntroURL.java
+++ b/eclipse/plugins/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/model/url/IntroURL.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -324,7 +324,7 @@ public class IntroURL implements IIntroURL {
 
 		try {
 			ParameterizedCommand pCommand = commandService.deserialize(command);
-			pCommand.executeWithChecks(null, handlerService.getCurrentState());
+			handlerService.executeCommand(pCommand, null);
 
 			// Executed command successfully. Now set intro standby if needed.
 			if (standbyState == null)
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/.settings/.api_filters b/eclipse/plugins/org.eclipse.ui.navigator.resources/.settings/.api_filters
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF
index d6ba6e7..04036da 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.ui.navigator.resources; singleton:=true
-Bundle-Version: 3.4.202.qualifier
+Bundle-Version: 3.4.300.qualifier
 Bundle-Activator: org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorPlugin
 Bundle-Vendor: %Plugin.providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/plugin.xml b/eclipse/plugins/org.eclipse.ui.navigator.resources/plugin.xml
index f7789cb..71daa83 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator.resources/plugin.xml
+++ b/eclipse/plugins/org.eclipse.ui.navigator.resources/plugin.xml
@@ -333,7 +333,7 @@
     <extension
           point="org.eclipse.core.runtime.adapters">
        <factory
-             adaptableType="org.eclipse.ui.navigator.CommonNavigator"
+             adaptableType="org.eclipse.ui.navigator.resources.ProjectExplorer"
             class="org.eclipse.ui.internal.navigator.resources.workbench.TabbedPropertySheetAdapterFactory">
          <adapter type="org.eclipse.ui.views.properties.IPropertySheetPage"/>
       </factory>
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/ResourceToItemsMapper.java b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/ResourceToItemsMapper.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/GotoActionProvider.java b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/GotoActionProvider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/GotoResourceAction.java b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/GotoResourceAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/GotoResourceDialog.java b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/GotoResourceDialog.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/navigator/resources/ResourceDropAdapterAssistant.java b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/navigator/resources/ResourceDropAdapterAssistant.java
index b6dda8d..472bb84 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/navigator/resources/ResourceDropAdapterAssistant.java
+++ b/eclipse/plugins/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/navigator/resources/ResourceDropAdapterAssistant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,6 +39,7 @@ import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -49,6 +50,8 @@ import org.eclipse.ui.actions.CopyFilesAndFoldersOperation;
 import org.eclipse.ui.actions.MoveFilesAndFoldersOperation;
 import org.eclipse.ui.actions.ReadOnlyStateChecker;
 import org.eclipse.ui.ide.dialogs.ImportTypeDialog;
+import org.eclipse.ui.internal.ide.IDEInternalPreferences;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 import org.eclipse.ui.internal.navigator.Policy;
 import org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorMessages;
 import org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorPlugin;
@@ -215,7 +218,6 @@ public class ResourceDropAdapterAssistant extends CommonDropAdapterAssistant {
 		if (LocalSelectionTransfer.getTransfer().isSupportedType(
 				currentTransfer)) {
 			resources = getSelectedResources();
-			aDropTargetEvent.detail = DND.DROP_NONE;
 		} else if (ResourceTransfer.getInstance().isSupportedType(
 				currentTransfer)) {
 			resources = (IResource[]) aDropTargetEvent.data;
@@ -422,18 +424,25 @@ public class ResourceDropAdapterAssistant extends CommonDropAdapterAssistant {
 			// if all sources are either links or groups, copy then normally,
 			// don't show the dialog
 			if (!allSourceAreLinksOrVirtualFolders) {
-				ImportTypeDialog dialog = new ImportTypeDialog(getShell(), dropAdapter.getCurrentOperation(), sources, target);
-				dialog.setResource(target);
-				if (dialog.open() == Window.OK) {
-					if (dialog.getSelection() == ImportTypeDialog.IMPORT_VIRTUAL_FOLDERS_AND_LINKS)
-						operation.setVirtualFolders(true);
-					if (dialog.getSelection() == ImportTypeDialog.IMPORT_LINK)
-						operation.setCreateLinks(true);
-					if (dialog.getVariable() != null)
-						operation.setRelativeVariable(dialog.getVariable());
+				IPreferenceStore store= IDEWorkbenchPlugin.getDefault().getPreferenceStore();
+				String dndPreference= store.getString(target.isVirtual() ? IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE : IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE);
+
+				if (dndPreference.equals(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT)) {
+					ImportTypeDialog dialog = new ImportTypeDialog(getShell(), dropAdapter.getCurrentOperation(), sources, target);
+					dialog.setResource(target);
+					if (dialog.open() == Window.OK) {
+						if (dialog.getSelection() == ImportTypeDialog.IMPORT_VIRTUAL_FOLDERS_AND_LINKS)
+							operation.setVirtualFolders(true);
+						if (dialog.getSelection() == ImportTypeDialog.IMPORT_LINK)
+							operation.setCreateLinks(true);
+						if (dialog.getVariable() != null)
+							operation.setRelativeVariable(dialog.getVariable());
+						operation.copyResources(sources, target);
+					} else
+						return problems;
+				}
+				else
 					operation.copyResources(sources, target);
-				} else
-					return problems;
 			} else
 				operation.copyResources(sources, target);
 		}
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/.options b/eclipse/plugins/org.eclipse.ui.navigator/.options
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.navigator/META-INF/MANIFEST.MF
index 28a210a..6117c39 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.navigator/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.ui.navigator; singleton:=true
-Bundle-Version: 3.5.0.qualifier
+Bundle-Version: 3.5.100.qualifier
 Bundle-Activator: org.eclipse.ui.internal.navigator.NavigatorPlugin
 Bundle-Vendor: %Plugin.providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/schema/navigatorContent.exsd b/eclipse/plugins/org.eclipse.ui.navigator/schema/navigatorContent.exsd
index 7d7a26d..e29a843 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator/schema/navigatorContent.exsd
+++ b/eclipse/plugins/org.eclipse.ui.navigator/schema/navigatorContent.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.ui.navigator" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
-         <meta.schema plugin="org.eclipse.ui.navigator" id="navigatorContent" name="navigatorContent"/>
+         <meta.schema plugin="org.eclipse.ui.navigator" id="navigatorContent" name="Navigator Content"/>
       </appInfo>
       <documentation>
          A content extension provides a content and label provider 
@@ -963,7 +963,7 @@ using this feature.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2002, 2010 IBM Corporation and others.<br>
+         Copyright (c) 2002, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorFrameSource.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/CommonNavigatorFrameSource.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java
index b25b1d2..47de131 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java
+++ b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentServiceContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,8 @@
  *     IBM Corporation - initial API and implementation
  *     Anton Leherbauer, Wind River
  *       bug 261031 [CommonNavigator] IPipelinedContentProvider getParent() returning the suggested parent is not ignored
+ *     William Chen, chenwmw at gmail.com 
+ *       bug 343721 getParent of NavigatorContentServiceContentProvider does not return expected node.
  *******************************************************************************/
 package org.eclipse.ui.internal.navigator;
 
@@ -295,10 +297,6 @@ public class NavigatorContentServiceContentProvider implements ITreeContentProvi
 						if (overridingExtensions.length > 0) {
 							parent[0] = pipelineParent(anElement, overridingExtensions, parent);
 						}
-
-						if (parent[0] != null) {
-							return;
-						}
 					}
 				}
 
@@ -308,6 +306,10 @@ public class NavigatorContentServiceContentProvider implements ITreeContentProvi
 									foundExtension.getDescriptor().getId(), anElement }), e);
 				}
 			});
+
+			if (parent[0] != null) {
+				return parent[0];
+			}
 		}
 		return parent[0];
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/Policy.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/Policy.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/BackAction.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/BackAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/ForwardAction.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/ForwardAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/Frame.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/Frame.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameAction.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameList.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameList.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameListMessages.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/FrameListMessages.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/GoIntoAction.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/GoIntoAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameListHelpContextIds.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameListHelpContextIds.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameSource.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/IFrameSource.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/README b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/README
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeFrame.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeFrame.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeViewerFrameSource.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/TreeViewerFrameSource.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/UpAction.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/UpAction.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/messages.properties b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/messages.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/package.html b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/framelist/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java
index 4833258..46a5546 100644
--- a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java
+++ b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@ import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.ViewerSorter;
+
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.ISaveablesSource;
 
@@ -201,7 +202,8 @@ public interface INavigatorContentService {
 	INavigatorViewerDescriptor getViewerDescriptor();
 
 	/**
-	 * See <a href="#active">above</a> for the definition of <i>active</i>.
+	 * See <a href="INavigatorContentService.html#active">above</a> for the
+	 * definition of <i>active</i>.
 	 * 
 	 * @param anExtensionId
 	 *            The unqiue identifier from a content extension.
@@ -214,8 +216,9 @@ public interface INavigatorContentService {
 	boolean isActive(String anExtensionId);
 
 	/**
-	 *  See <a href="#visible">above</a> for the definition of <i>visible</i>.
-	 *  
+	 * See <a href="INavigatorContentService.html#visible">above</a> for the
+	 * definition of <i>visible</i>.
+	 * 
 	 * @param anExtensionId
 	 *            The unqiue identifier from a content extension.
 	 * @return True if and only if the given extension id is <i>visible</i> to
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/LinkHelperService.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/LinkHelperService.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/OverridePolicy.java b/eclipse/plugins/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/OverridePolicy.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.net/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.eclipse.ui.net/.settings/org.eclipse.jdt.core.prefs
index 17b9800..a013c37 100644
--- a/eclipse/plugins/org.eclipse.ui.net/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse/plugins/org.eclipse.ui.net/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,17 @@
-#Fri Feb 20 12:33:00 CET 2009
+#Tue Feb 01 14:41:02 CET 2011
 eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=error
@@ -83,3 +92,5 @@ org.eclipse.jdt.core.compiler.source=1.3
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,NORMAL
 org.eclipse.jdt.core.compiler.taskTags=TODO,XXX
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/eclipse/plugins/org.eclipse.ui.net/.settings/org.eclipse.jdt.launching.prefs b/eclipse/plugins/org.eclipse.ui.net/.settings/org.eclipse.jdt.launching.prefs
new file mode 100644
index 0000000..69557b7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.net/.settings/org.eclipse.jdt.launching.prefs
@@ -0,0 +1,3 @@
+#Tue Feb 01 14:41:02 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=error
diff --git a/eclipse/plugins/org.eclipse.ui.net/plugin.xml b/eclipse/plugins/org.eclipse.ui.net/plugin.xml
index 8b14eee..23d4688 100644
--- a/eclipse/plugins/org.eclipse.ui.net/plugin.xml
+++ b/eclipse/plugins/org.eclipse.ui.net/plugin.xml
@@ -1,6 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
 
+<!--
+    Copyright (c) 2007, 2011 IBM Corporation and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v1.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v10.html
+   
+    Contributors:
+        IBM Corporation - initial API and implementation
+ -->
+
 <plugin>
 
    <extension
diff --git a/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/NonProxyHostsComposite.java b/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/NonProxyHostsComposite.java
index 23cac73..e406d20 100644
--- a/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/NonProxyHostsComposite.java
+++ b/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/NonProxyHostsComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ package org.eclipse.ui.internal.net;
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.core.internal.net.ProxySelector;
 import org.eclipse.core.internal.net.StringUtil;
@@ -209,14 +210,10 @@ public class NonProxyHostsComposite extends Composite {
 		String selectedHosts = getStringList(selection.iterator());
 		String hosts[] = promptForHost(selectedHosts);
 		if (hosts != null) {
-			Iterator it = selection.iterator();
-			while (it.hasNext()) {
-				ProxyBypassData data = (ProxyBypassData) it.next();
-				bypassHosts.remove(data);
-			}
-			for (int i = 0; i < hosts.length; i++) {
-				bypassHosts.add(0, new ProxyBypassData(hosts[i],
-						getEditableProvider()));
+			Object[] selectedItems = selection.toArray();
+			for (int i = 0; i < selectedItems.length; i++) {
+				ProxyBypassData data = (ProxyBypassData) selectedItems[i];
+				data.setHost(hosts[i]);
 			}
 			hostsViewer.refresh();
 		}
@@ -283,12 +280,7 @@ public class NonProxyHostsComposite extends Composite {
 	public void initializeValues() {
 		String providers[] = ProxySelector.getProviders();
 		for (int i = 0; i < providers.length; i++) {
-			String[] hosts = ProxySelector.getBypassHosts(providers[i]);
-			for (int j = 0; hosts != null && j < hosts.length; j++) {
-				ProxyBypassData data = new ProxyBypassData(hosts[j],
-						providers[i]);
-				bypassHosts.add(data);
-			}
+			bypassHosts.addAll(getProxyBypassData(providers[i]));
 		}
 		hostsViewer.setInput(bypassHosts);
 		setProvider(ProxySelector.getDefaultProvider());
@@ -326,4 +318,35 @@ public class NonProxyHostsComposite extends Composite {
 		ProxySelector.setBypassHosts(provider, data);
 	}
 
+	public void refresh() {
+		ArrayList natives = new ArrayList();
+		String provider = getEditableProvider();
+		Iterator it = bypassHosts.iterator();
+		while (it.hasNext()) {
+			ProxyBypassData data = (ProxyBypassData) it.next();
+			if (!data.getSource().equals(provider)) {
+				natives.add(data);
+			}
+		}		
+		bypassHosts.removeAll(natives);
+		String providers[] = ProxySelector.getProviders();
+		for (int i = 0; i < providers.length; i++) {
+			if (!providers[i].equals(provider)) {
+				bypassHosts.addAll(getProxyBypassData(providers[i]));
+			}
+		}
+		hostsViewer.refresh();
+		setProvider(currentProvider);
+	}
+	
+	private List getProxyBypassData(String provider) {
+		List bypassProxyData = new ArrayList();
+		String[] hosts = ProxySelector.getBypassHosts(provider);
+		for (int j = 0; hosts != null && j < hosts.length; j++) {
+			ProxyBypassData data = new ProxyBypassData(hosts[j], provider);
+			bypassProxyData.add(data);
+		}
+		return bypassProxyData;
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntriesComposite.java b/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntriesComposite.java
index 9278504..4aa5e29 100644
--- a/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntriesComposite.java
+++ b/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntriesComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2009 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@ package org.eclipse.ui.internal.net;
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.core.internal.net.ProxyData;
 import org.eclipse.core.internal.net.ProxySelector;
@@ -259,11 +260,7 @@ public class ProxyEntriesComposite extends Composite {
 	public void initializeValues() {
 		String providers[] = ProxySelector.getProviders();
 		for (int i = 0; i < providers.length; i++) {
-			ProxyData[] entries = ProxySelector.getProxyData(providers[i]);
-			for (int j = 0; j < entries.length; j++) {
-				entries[j].setSource(providers[i]);
-				proxyEntries.add(entries[j]);
-			}
+			proxyEntries.addAll(getProxyData(providers[i]));
 		}
 		entriesViewer.setInput(proxyEntries);
 		setProvider(ProxySelector.getDefaultProvider());
@@ -300,4 +297,34 @@ public class ProxyEntriesComposite extends Composite {
 		ProxySelector.setProxyData(provider, data);
 	}
 
+	public void refresh() {
+		String provider = getEditableProvider();	
+		Iterator it = proxyEntries.iterator();
+		ArrayList natives = new ArrayList();
+		while (it.hasNext()) {
+			ProxyData data = (ProxyData) it.next();
+			if (!data.getSource().equals(provider)) {
+				natives.add(data);
+			}
+		}
+		proxyEntries.removeAll(natives);
+		String[] providers = ProxySelector.getProviders();
+		for (int i = 0; i < providers.length; i++) {
+			if (!providers[i].equals(provider)) {
+				proxyEntries.addAll(getProxyData(providers[i]));
+			}
+		}
+		entriesViewer.refresh();
+		setProvider(currentProvider);
+	}
+	
+	private List getProxyData(String provider) {
+		List proxyDatas = new ArrayList();
+		ProxyData[] entries = ProxySelector.getProxyData(provider);
+		for (int j = 0; j < entries.length; j++) {
+			entries[j].setSource(provider);
+			proxyDatas.add(entries[j]);
+		}
+		return proxyDatas;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java b/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java
index 0a79927..cafdaea 100644
--- a/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java
+++ b/eclipse/plugins/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java
@@ -96,6 +96,7 @@ public class ProxyPreferencePage extends PreferencePage implements
 	}
 
 	protected void performApply() {
+		refresh();
 		int sel = providerCombo.getSelectionIndex();
 		proxyEntriesComposite.performApply();
 		nonProxyHostsComposite.performApply();
@@ -131,6 +132,12 @@ public class ProxyPreferencePage extends PreferencePage implements
 	protected void setProvider(String name) {
 		proxyEntriesComposite.setProvider(name);
 		nonProxyHostsComposite.setProvider(name);
+		refresh();
+	}
+	
+	private void refresh() {
+		proxyEntriesComposite.refresh();
+		nonProxyHostsComposite.refresh();
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.ui.views.log/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.views.log/META-INF/MANIFEST.MF
index 3a5dd72..9837102 100644
--- a/eclipse/plugins/org.eclipse.ui.views.log/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.views.log/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.ui.views.log;singleton:=true
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.0.200.qualifier
 Bundle-Activator: org.eclipse.ui.internal.views.log.Activator
 Bundle-Vendor: %provider-name
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
diff --git a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java
index 69ec5cc..c04df37 100644
--- a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -165,12 +165,16 @@ public class EventDetailsDialog extends TrayDialog {
 	public int open() {
 		isOpen = true;
 		if (sashWeights == null) {
-			int width = getSashForm().getClientArea().width;
-			if (width - 100 > 0)
-				width -= 100;
-			else
-				width = width / 2;
-			sashWeights = new int[] {width, getSashForm().getClientArea().width - width};
+			int a, b, c;
+			int height = getSashForm().getClientArea().height;
+			if (height < 250) {
+				a = b = c = height / 3;
+			} else {
+				a = 100; // Details section needs about 100
+				c = 100; // Text area gets 100
+				b = height - a - c; // Stack trace should take up majority of room 
+			}
+			sashWeights = new int[] {a, b, c};
 		}
 		getSashForm().setWeights(sashWeights);
 		return super.open();
@@ -512,8 +516,8 @@ public class EventDetailsDialog extends TrayDialog {
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		container.setLayoutData(gd);
 
-		createDetailsSection(container);
 		createSashForm(container);
+		createDetailsSection(getSashForm());
 		createStackSection(getSashForm());
 		createSessionSection(getSashForm());
 
@@ -528,6 +532,7 @@ public class EventDetailsDialog extends TrayDialog {
 		layout.marginHeight = layout.marginWidth = 0;
 		sashForm.setLayout(layout);
 		sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
+		sashForm.setSashWidth(10);
 	}
 
 	private void createToolbarButtonBar(Composite parent) {
@@ -617,7 +622,9 @@ public class EventDetailsDialog extends TrayDialog {
 		layout.marginWidth = layout.marginHeight = 0;
 		layout.numColumns = 2;
 		container.setLayout(layout);
-		container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		GridData data = new GridData(GridData.FILL_HORIZONTAL);
+		data.heightHint = 200;
+		container.setLayoutData(data);
 
 		createTextSection(container);
 		createToolbarButtonBar(container);
@@ -629,7 +636,7 @@ public class EventDetailsDialog extends TrayDialog {
 		layout.numColumns = 3;
 		layout.marginHeight = layout.marginWidth = 0;
 		textContainer.setLayout(layout);
-		textContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		textContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
 
 		Label label = new Label(textContainer, SWT.NONE);
 		label.setText(Messages.EventDetailsDialog_date);
@@ -653,7 +660,6 @@ public class EventDetailsDialog extends TrayDialog {
 		msgText.setEditable(false);
 		gd = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING | GridData.GRAB_VERTICAL);
 		gd.horizontalSpan = 2;
-		gd.heightHint = 44;
 		gd.grabExcessVerticalSpace = true;
 		msgText.setLayoutData(gd);
 	}
@@ -662,10 +668,10 @@ public class EventDetailsDialog extends TrayDialog {
 		Composite container = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout(2, false);
 		layout.marginHeight = 0;
-		layout.marginWidth = 6;
+		layout.marginWidth = 0;
 		container.setLayout(layout);
 		GridData gd = new GridData(GridData.FILL_BOTH);
-		gd.heightHint = 100;
+		gd.heightHint = 200;
 		container.setLayoutData(gd);
 
 		Label label = new Label(container, SWT.NONE);
@@ -686,17 +692,12 @@ public class EventDetailsDialog extends TrayDialog {
 		Composite container = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
 		layout.marginHeight = 0;
-		layout.marginWidth = 6;
+		layout.marginWidth = 0;
 		container.setLayout(layout);
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.heightHint = 100;
 		container.setLayoutData(gd);
 
-		Label line = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL);
-		gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		gd.widthHint = 1;
-		line.setLayoutData(gd);
-
 		Label label = new Label(container, SWT.NONE);
 		label.setText(Messages.EventDetailsDialog_session);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
@@ -806,10 +807,10 @@ public class EventDetailsDialog extends TrayDialog {
 			y = s.getInt("height"); //$NON-NLS-1$
 			dialogSize = new Point(x, y);
 
-			sashWeights = new int[2];
+			sashWeights = new int[3];
 			sashWeights[0] = s.getInt("sashWidth1"); //$NON-NLS-1$
 			sashWeights[1] = s.getInt("sashWidth2"); //$NON-NLS-1$
-
+			sashWeights[2] = s.getInt("sashWidth3"); //$NON-NLS-1$
 		} catch (NumberFormatException e) {
 			dialogLocation = null;
 			dialogSize = null;
@@ -830,6 +831,7 @@ public class EventDetailsDialog extends TrayDialog {
 		sashWeights = getSashForm().getWeights();
 		s.put("sashWidth1", sashWeights[0]); //$NON-NLS-1$
 		s.put("sashWidth2", sashWeights[1]); //$NON-NLS-1$
+		s.put("sashWidth3", sashWeights[2]); //$NON-NLS-1$
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java
index 2365a71..e4c577f 100644
--- a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java
+++ b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,7 @@ import java.util.Comparator;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.actions.SelectionProviderAction;
 
@@ -25,9 +25,9 @@ import org.eclipse.ui.actions.SelectionProviderAction;
 public class EventDetailsDialogAction extends SelectionProviderAction {
 
 	/**
-	 * The shell in which to open the property dialog
+	 * The control that the dialog should appear on top of.
 	 */
-	private Shell shell;
+	private Control control;
 	private ISelectionProvider provider;
 	private EventDetailsDialog propertyDialog;
 	private Comparator comparator;
@@ -36,15 +36,15 @@ public class EventDetailsDialogAction extends SelectionProviderAction {
 	/**
 	 * Creates a new action for opening a property dialog
 	 * on the elements from the given selection provider
-	 * @param shell - the shell in which the dialog will open
+	 * @param control - the control that the details dialog should show up on
 	 * @param provider - the selection provider whose elements
 	 * @param memento - memento with EventDetails dialog options
 	 * the property dialog will describe
 	 */
-	public EventDetailsDialogAction(Shell shell, ISelectionProvider provider, IMemento memento) {
+	public EventDetailsDialogAction(Control control, ISelectionProvider provider, IMemento memento) {
 		super(provider, Messages.EventDetailsDialog_title);
-		Assert.isNotNull(shell);
-		this.shell = shell;
+		Assert.isNotNull(control);
+		this.control = control;
 		this.provider = provider;
 		this.memento = memento;
 		// setToolTipText
@@ -92,7 +92,7 @@ public class EventDetailsDialogAction extends SelectionProviderAction {
 		if ((element == null) || (!(element instanceof LogEntry)))
 			return;
 
-		propertyDialog = new EventDetailsDialog(shell, element, provider, comparator, memento);
+		propertyDialog = new EventDetailsDialog(control.getShell(), element, provider, comparator, memento);
 		propertyDialog.create();
 		propertyDialog.getShell().setText(Messages.EventDetailsDialog_title);
 		propertyDialog.open();
diff --git a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/FilterDialog.java b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/FilterDialog.java
index e072432..87bb534 100644
--- a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/FilterDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/FilterDialog.java
@@ -184,7 +184,7 @@ public class FilterDialog extends TrayDialog {
 
 		});
 
-		filterList = new List(comp, SWT.BORDER);
+		filterList = new List(comp, SWT.BORDER | SWT.MULTI);
 		gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
 		gd.verticalSpan = 3;
 		gd.widthHint = 280;
@@ -252,11 +252,10 @@ public class FilterDialog extends TrayDialog {
 	}
 
 	private void removeFilter() {
-		int index = filterList.getSelectionIndex();
-		if (index != -1) {
-			filterList.remove(index);
+		String[] selected = filterList.getSelection();
+		for (int i = 0; i < selected.length; i++) {
+			filterList.remove(selected[i]);
 		}
-
 		removeFilter.setEnabled(false);
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java
index 1abcad7..1edb691 100644
--- a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java
+++ b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,10 +50,10 @@ class LogReader {
 
 			reader = new BufferedReader(new InputStreamReader(new TailInputStream(file, MAX_FILE_LENGTH), "UTF-8")); //$NON-NLS-1$
 			for (;;) {
-				String line = reader.readLine();
-				if (line == null)
+				String line0 = reader.readLine();
+				if (line0 == null)
 					break;
-				line = line.trim();
+				String line = line0.trim();
 
 				if (line.startsWith(LogSession.SESSION)) {
 					state = SESSION_STATE;
@@ -69,8 +69,11 @@ class LogReader {
 					state = TEXT_STATE;
 
 				if (state == TEXT_STATE) {
-					if (writer != null)
-						writer.println(line);
+					if (writer != null) {
+						if (swriter.getBuffer().length() > 0)
+							writer.println();
+						writer.print(line0);
+					}
 					continue;
 				}
 
@@ -129,8 +132,7 @@ class LogReader {
 					writer = new PrintWriter(swriter, true);
 					String message = ""; //$NON-NLS-1$
 					if (line.length() > 8)
-						message = line.substring(9).trim();
-					message = message.trim();
+						message = line.substring(9);
 					if (current != null)
 						current.setMessage(message);
 					writerState = MESSAGE_STATE;
@@ -169,8 +171,10 @@ class LogReader {
 			session.setSessionData(swriter.toString());
 		} else if (writerState == MESSAGE_STATE && current != null) {
 			StringBuffer sb = new StringBuffer(current.getMessage());
-			sb.append(swriter.toString());
-			current.setMessage(sb.toString().trim());
+			String continuation = swriter.toString();
+			if (continuation.length() > 0)
+				sb.append(System.getProperty("line.separator")).append(continuation); //$NON-NLS-1$
+			current.setMessage(sb.toString());
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogView.java b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogView.java
index f83cf07..4f2bbd8 100644
--- a/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogView.java
+++ b/eclipse/plugins/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -418,7 +418,7 @@ public class LogView extends ViewPart implements ILogListener {
 	}
 
 	private Action createPropertiesAction() {
-		Action action = new EventDetailsDialogAction(fTree.getShell(), fFilteredTree.getViewer(), fMemento);
+		Action action = new EventDetailsDialogAction(fTree, fFilteredTree.getViewer(), fMemento);
 		action.setImageDescriptor(SharedImages.getImageDescriptor(SharedImages.DESC_PROPERTIES));
 		action.setDisabledImageDescriptor(SharedImages.getImageDescriptor(SharedImages.DESC_PROPERTIES_DISABLED));
 		action.setToolTipText(Messages.LogView_properties_tooltip);
@@ -513,7 +513,6 @@ public class LogView extends ViewPart implements ILogListener {
 			gd.verticalIndent = 2;
 			gd.horizontalIndent = 1;
 		}
-		fFilteredTree.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
 		fFilteredTree.setLayoutData(new GridData(GridData.FILL_BOTH));
 		fFilteredTree.setInitialText(Messages.LogView_show_filter_initialText);
 		fTree = fFilteredTree.getViewer().getTree();
@@ -701,55 +700,46 @@ public class LogView extends ViewPart implements ILogListener {
 					return;
 			}
 
-			Reader in = null;
-			Writer out = null;
+			BufferedReader in = null;
+			BufferedWriter out = null;
 			try {
-				out = new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"); //$NON-NLS-1$
+				out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8")); //$NON-NLS-1$
 				if (exportWholeLog)
-					in = new InputStreamReader(new FileInputStream(fInputFile), "UTF-8"); //$NON-NLS-1$
+					in = new BufferedReader(new InputStreamReader(new FileInputStream(fInputFile), "UTF-8")); //$NON-NLS-1$
 				else {
 					String selectedEntryAsString = selectionToString(fFilteredTree.getViewer().getSelection());
-					in = new StringReader(selectedEntryAsString);
+					in = new BufferedReader(new StringReader(selectedEntryAsString));
 				}
 				copy(in, out);
 			} catch (IOException ex) {
+				// do nothing
+			} finally {
 				try {
 					if (in != null)
 						in.close();
+				} catch (IOException e) {
+					// do nothing
+				}
+				try {
 					if (out != null)
 						out.close();
-				} catch (IOException e1) { // do nothing
+				} catch (IOException e) {
+					// do nothing
 				}
 			}
 		}
 	}
 
-	private void copy(Reader input, Writer output) {
-		BufferedReader reader = null;
-		BufferedWriter writer = null;
-		try {
-			reader = new BufferedReader(input);
-			writer = new BufferedWriter(output);
-			String line;
-			while (reader.ready() && ((line = reader.readLine()) != null)) {
-				writer.write(line);
-				writer.newLine();
-			}
-		} catch (IOException e) { // do nothing
-		} finally {
-			try {
-				if (reader != null)
-					reader.close();
-				if (writer != null)
-					writer.close();
-			} catch (IOException e1) {
-				// do nothing
-			}
+	private void copy(BufferedReader reader, BufferedWriter writer) throws IOException {
+		String line;
+		while (reader.ready() && ((line = reader.readLine()) != null)) {
+			writer.write(line);
+			writer.newLine();
 		}
 	}
 
 	private void handleFilter() {
-		FilterDialog dialog = new FilterDialog(Activator.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(), fMemento);
+		FilterDialog dialog = new FilterDialog(getSite().getShell(), fMemento);
 		dialog.create();
 		dialog.getShell().setText(Messages.LogView_FilterDialog_title);
 		if (dialog.open() == Window.OK)
@@ -1124,8 +1114,8 @@ public class LogView extends ViewPart implements ILogListener {
 		entry.write(pwriter);
 		pwriter.flush();
 		String textVersion = writer.toString();
+		pwriter.close();
 		try {
-			pwriter.close();
 			writer.close();
 		} catch (IOException e) {
 			// empty
@@ -1288,7 +1278,8 @@ public class LogView extends ViewPart implements ILogListener {
 	}
 
 	private void makeHoverShell() {
-		fTextShell = new Shell(fTree.getShell(), SWT.NO_FOCUS | SWT.ON_TOP | SWT.TOOL);
+		// parent it off the workbench window's shell so it will be valid regardless of whether the view is a detached window or not
+		fTextShell = new Shell(getSite().getWorkbenchWindow().getShell(), SWT.NO_FOCUS | SWT.ON_TOP | SWT.TOOL);
 		Display display = fTextShell.getDisplay();
 		fTextShell.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
 		GridLayout layout = new GridLayout(1, false);
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/META-INF/MANIFEST.MF
index 9c74b53..88ea324 100644
--- a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.ui.views.properties.tabbed;singleton:=true
-Bundle-Version: 3.5.100.qualifier
+Bundle-Version: 3.5.200.qualifier
 Bundle-Activator: org.eclipse.ui.internal.views.properties.tabbed.TabbedPropertyViewPlugin
 Bundle-Vendor: %Plugin.providerName
 Bundle-Localization: plugin
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/TabbedPropertyViewPlugin.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/TabbedPropertyViewPlugin.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/TabbedPropertyViewStatusCodes.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/TabbedPropertyViewStatusCodes.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/l10n/TabbedPropertyMessages.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/l10n/TabbedPropertyMessages.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/l10n/TabbedPropertyMessages.properties b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/l10n/TabbedPropertyMessages.properties
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/OverridableTabListContentProvider.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/OverridableTabListContentProvider.java
index 84c70eb..dc85ced 100644
--- a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/OverridableTabListContentProvider.java
+++ b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/OverridableTabListContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,10 +11,12 @@
 package org.eclipse.ui.internal.views.properties.tabbed.view;
 
 import org.eclipse.core.runtime.Assert;
+
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
+
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.part.IContributedContentsView;
 import org.eclipse.ui.views.properties.IPropertySheetPage;
@@ -38,7 +40,7 @@ import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
  * @author Anthony Hunter
  * @since 3.4
  */
-public class OverridableTabListContentProvider extends TabListContentProvider
+class OverridableTabListContentProvider extends TabListContentProvider
 		implements IOverridableTabListContentProvider, ITabSelectionListener {
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/SectionDescriptor.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/SectionDescriptor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabDescriptor.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabDescriptor.java
old mode 100644
new mode 100755
index e47cd18..d2bfee6
--- a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabDescriptor.java
+++ b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * Copyright (c) 2001, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,15 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.views.properties.tabbed.view;
 
+import com.ibm.icu.text.MessageFormat;
+
+import org.eclipse.swt.graphics.Image;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.graphics.Image;
+
 import org.eclipse.ui.internal.views.properties.tabbed.TabbedPropertyViewPlugin;
 import org.eclipse.ui.internal.views.properties.tabbed.TabbedPropertyViewStatusCodes;
 import org.eclipse.ui.internal.views.properties.tabbed.l10n.TabbedPropertyMessages;
@@ -22,8 +26,6 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.ui.views.properties.tabbed.AbstractTabDescriptor;
 import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
 
-import com.ibm.icu.text.MessageFormat;
-
 /**
  * Represents the default implementation of a tab descriptor on the tabbed
  * property tabs extensions.
@@ -286,4 +288,16 @@ public class TabDescriptor extends AbstractTabDescriptor {
 	public String getText() {
 		return label;
 	}
+
+	/**
+	 * Disposes this descriptor.
+	 * 
+	 * @since 3.7
+	 */
+	public void dispose() {
+		if (image != null) {
+			image.dispose();
+			image = null;
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabListContentProvider.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabListContentProvider.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyComposite.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyComposite.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyList.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyList.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistry.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistry.java
old mode 100644
new mode 100755
index a6b3c33..e994a41
--- a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistry.java
+++ b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * Copyright (c) 2001, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,15 +16,19 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 
+import com.ibm.icu.text.MessageFormat;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
+
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.internal.views.properties.tabbed.TabbedPropertyViewPlugin;
 import org.eclipse.ui.internal.views.properties.tabbed.TabbedPropertyViewStatusCodes;
@@ -37,8 +41,6 @@ import org.eclipse.ui.views.properties.tabbed.ITabDescriptor;
 import org.eclipse.ui.views.properties.tabbed.ITabDescriptorProvider;
 import org.eclipse.ui.views.properties.tabbed.ITypeMapper;
 
-import com.ibm.icu.text.MessageFormat;
-
 /**
  * Provides information about the tabbed property extension points. Each tabbed
  * property registry is associated with a unique contributor ID.
@@ -70,7 +72,7 @@ public class TabbedPropertyRegistry {
 
 	private static final String ATT_CONTRIBUTOR_ID = "contributorId"; //$NON-NLS-1$
 
-	private static final String ATT_TYPE_MAPPER = "typeMapper"; //$NON-NLS-1$	
+	private static final String ATT_TYPE_MAPPER = "typeMapper"; //$NON-NLS-1$
 
 	private static final String ATT_LABEL_PROVIDER = "labelProvider"; //$NON-NLS-1$
 
@@ -537,4 +539,23 @@ public class TabbedPropertyRegistry {
 				TabbedPropertyViewStatusCodes.TAB_ERROR, message, null);
 		TabbedPropertyViewPlugin.getPlugin().getLog().log(status);
 	}
+
+	/**
+	 * Disposes this registry.
+	 * 
+	 * @since 3.7
+	 */
+	public void dispose() {
+		if (labelProvider != null) {
+			labelProvider.dispose();
+			labelProvider = null;
+		}
+
+		if (tabDescriptors != null) {
+			for (int i= 0; i < tabDescriptors.length; i++) {
+				if (tabDescriptors[i] instanceof TabDescriptor)
+					((TabDescriptor)tabDescriptors[i]).dispose();
+			}
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistryClassSectionFilter.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistryClassSectionFilter.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistryFactory.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistryFactory.java
old mode 100644
new mode 100755
index 53714da..60cf094
--- a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistryFactory.java
+++ b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyRegistryFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * Copyright (c) 2001, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,6 +98,7 @@ public class TabbedPropertyRegistryFactory {
 		if (data != null) {
 			data.references.remove(target);
 			if (data.references.isEmpty()) {
+				data.registry.dispose();
 				idToCacheData.remove(key);
 			}
 		}
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyTitle.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyTitle.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyViewer.java b/eclipse/plugins/org.eclipse.ui.views.properties.tabbed/src/org/eclipse/ui/internal/views/properties/tabbed/view/TabbedPropertyViewer.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.views/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.views/META-INF/MANIFEST.MF
index 00ebf9c..b2bd090 100644
--- a/eclipse/plugins/org.eclipse.ui.views/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.views/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ui.views; singleton:=true
-Bundle-Version: 3.5.1.qualifier
+Bundle-Version: 3.6.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.ui.internal.views.ViewsPlugin
 Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/internal/views/properties/messages.properties b/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/internal/views/properties/messages.properties
index 97ba2b4..598fa6e 100644
--- a/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/internal/views/properties/messages.properties
+++ b/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/internal/views/properties/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
 Categories_text = Show &Categories
 Categories_toolTip = Show Categories
 
-Columns_text = Co&lumns...
+Columns_text = Configure Co&lumns...
 Columns_toolTip = Configure Columns
 
 CopyProperty_text = &Copy
diff --git a/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/contentoutline/ContentOutlinePage.java b/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/contentoutline/ContentOutlinePage.java
index 5bf036c..34718eb 100644
--- a/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/contentoutline/ContentOutlinePage.java
+++ b/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/contentoutline/ContentOutlinePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,8 @@ import org.eclipse.ui.part.Page;
  * <code>createControl</code> to configure the tree viewer with a proper content 
  * provider, label provider, and input element.
  * </p>
+ * <p>Subclasses may provide a hint for constructing the tree viewer
+ * using {@link #getTreeStyle()}.</p>
  * <p>
  * Note that those wanting to use a control other than internally created
  * <code>TreeViewer</code> will need to implement 
@@ -75,10 +77,21 @@ public abstract class ContentOutlinePage extends Page implements
      * @param parent
      */
     public void createControl(Composite parent) {
-        treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL
-                | SWT.V_SCROLL);
+        treeViewer = new TreeViewer(parent, getTreeStyle());
         treeViewer.addSelectionChangedListener(this);
     }
+    
+	/**
+	 * A hint for the styles to use while constructing the TreeViewer.
+	 * <p>Subclasses may override.</p>
+	 * 
+	 * @return the tree styles to use. By default, SWT.MULTI | SWT.H_SCROLL |
+	 *         SWT.V_SCROLL
+	 * @since 3.6
+	 */
+	protected int getTreeStyle() {
+		return SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
+	}
 
     /**
      * Fires a selection changed event.
diff --git a/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheet.java b/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheet.java
index bf5a83b..942bb29 100644
--- a/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheet.java
+++ b/eclipse/plugins/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheet.java
@@ -9,6 +9,7 @@
  *     IBM Corporation - initial API and implementation
  *     Markus Alexander Kuppe (Versant Corp.) - https://bugs.eclipse.org/248103
  *     Semion Chichelnitsky (semion at il.ibm.com) - bug 272564
+ *     Craig Foote (Footeware.ca) - https://bugs.eclipse.org/325743
  *******************************************************************************/
 package org.eclipse.ui.views.properties;
 
@@ -297,12 +298,9 @@ public class PropertySheet extends PageBookView implements ISelectionListener, I
      * since 3.4
      */
     protected void partHidden(IWorkbenchPart part) {
-        // if we are pinned, then we are not interested if parts are hidden, if
-        // our target part is hidden, we should still show whatever content we
-        // have been pinned on
-        if (!isPinned()) {
-            super.partHidden(part);
-        }
+    	// Explicitly ignore parts becoming hidden as this
+    	// can cause issues when the Property View is maximized
+    	// See bug 325743 for more details
     }
     
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
index 031b16b..48e74bf 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ui.workbench.texteditor; singleton:=true
-Bundle-Version: 3.6.1.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.ui.internal.texteditor.TextEditorPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
@@ -24,7 +24,7 @@ Require-Bundle:
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.compare.core;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.expressions;bundle-version="[3.4.100,4.0.0)",
- org.eclipse.jface.text;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.7.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Import-Package: com.ibm.icu.text
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.properties b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.properties
index ef405db..10cb9cf 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.properties
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -171,6 +171,8 @@ command.recenter.description = Recenter the window based on the cursor
 command.recenter.name = Recenter
 command.joinLines.description = Join lines of text
 command.joinLines.name = Join Lines
+command.openHyperlink.name= Open Hyperlink
+command.openHyperlink.description= Opens the hyperlink at the caret location or opens a chooser if more than one hyperlink is available
 
 SpellingEngine= Spelling Engine
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.xml b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.xml
index a6cc1e1..8456ef0 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.xml
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/plugin.xml
@@ -435,6 +435,12 @@
 	        categoryId="org.eclipse.ui.category.textEditor"
             id="org.eclipse.ui.edit.text.showInformation">
       </command>
+      <command
+            name="%command.openHyperlink.name"
+            description="%command.openHyperlink.description"
+            categoryId="org.eclipse.ui.category.textEditor"
+            id="org.eclipse.ui.edit.text.open.hyperlink">
+      </command>
 	</extension>
    
 	<extension
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/schema/spellingEngine.exsd b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/schema/spellingEngine.exsd
index 017066d..f8daffa 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/schema/spellingEngine.exsd
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/schema/spellingEngine.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.ui.workbench.texteditor">
+<schema targetNamespace="org.eclipse.ui.workbench.texteditor" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
          <meta.schema plugin="org.eclipse.ui.workbench.texteditor" id="spellingEngine" name="Spelling Engine"/>
@@ -11,6 +11,11 @@
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="engine" minOccurs="1" maxOccurs="unbounded"/>
@@ -92,7 +97,7 @@
                   an implementation of <code>org.eclipse.ui.texteditor.spelling.ISpellingPreferenceBlock</code>
                </documentation>
                <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.jdt.ui.text.folding.IJavaFoldingPreferenceBlock"/>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.ui.texteditor.spelling.ISpellingPreferenceBlock"/>
                </appInfo>
             </annotation>
          </attribute>
@@ -130,14 +135,6 @@
       </documentation>
    </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
 
    <annotation>
       <appInfo>
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HippieCompletionEngine.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HippieCompletionEngine.java
index fee2bbb..a90d320 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HippieCompletionEngine.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HippieCompletionEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -471,10 +471,10 @@ public final class HippieCompletionEngine {
 		}
 
 		/**
-		 * We always calculate the next to see if it's available...
+		 * We always calculate the next to see if it's available.
 		 * 
-		 * @return true if the next token to be returned is not null (we always pre-calculate
-		 *         things)
+		 * @return <code>true</code> if the next token to be returned is not null (we always
+		 *         pre-calculate things)
 		 */
 		public boolean hasNext() {
 			return fNext != null;
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
index 459384f..40f6007 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
  *     Benjamin Muskalla <b.muskalla at gmx.net> - https://bugs.eclipse.org/bugs/show_bug.cgi?id=41573
  *     Stephan Wahlbrink <stephan.wahlbrink at walware.de> - Wrong operations mode/feedback for text drag over/drop in text editors - https://bugs.eclipse.org/bugs/show_bug.cgi?id=206043
  *     Tom Eicher (Avaloq Evolution AG) - block selection mode
+ *     Nick Sandonato <nsandona at us.ibm.com> - [implementation] AbstractTextEditor does not prompt when out of sync in MultiPageEditorPart - http://bugs.eclipse.org/337719
  *******************************************************************************/
 package org.eclipse.ui.texteditor;
 
@@ -144,6 +145,7 @@ import org.eclipse.jface.text.TabsToSpacesConverter;
 import org.eclipse.jface.text.TextEvent;
 import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.text.TextUtilities;
+import org.eclipse.jface.text.hyperlink.HyperlinkManager;
 import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
 import org.eclipse.jface.text.information.IInformationProvider;
 import org.eclipse.jface.text.information.IInformationProviderExtension2;
@@ -976,7 +978,7 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
 			if (fIsHandlingActivation)
 				return;
 
-			if (fActivePart == AbstractTextEditor.this) {
+			if (fActivePart == AbstractTextEditor.this || fActivePart != null && fActivePart.getAdapter(AbstractTextEditor.class) == AbstractTextEditor.this) {
 				fIsHandlingActivation= true;
 				try {
 					safelySanityCheckState(getEditorInput());
@@ -2117,15 +2119,170 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
 	 * @since 3.3
 	 */
 	public static final String PREFERENCE_RULER_CONTRIBUTIONS= "rulerContributions"; //$NON-NLS-1$
+	
 	/**
 	 * A named preference that controls the display of whitespace characters.
 	 * <p>
 	 * Value is of type <code>Boolean</code>.
 	 * </p>
-	 *
+	 * 
+	 * <p>
+	 * The following preferences can be used for fine-grained configuration when enabled.
+	 * <ul>
+	 * <li>{@link #PREFERENCE_SHOW_LEADING_SPACES}</li>
+	 * <li>{@link #PREFERENCE_SHOW_ENCLOSED_SPACES}</li>
+	 * <li>{@link #PREFERENCE_SHOW_TRAILING_SPACES}</li>
+	 * <li>{@link #PREFERENCE_SHOW_LEADING_IDEOGRAPHIC_SPACES}</li>
+	 * <li>{@link #PREFERENCE_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES}</li>
+	 * <li>{@link #PREFERENCE_SHOW_TRAILING_IDEOGRAPHIC_SPACES}</li>
+	 * <li>{@link #PREFERENCE_SHOW_LEADING_TABS}</li>
+	 * <li>{@link #PREFERENCE_SHOW_ENCLOSED_TABS}</li>
+	 * <li>{@link #PREFERENCE_SHOW_TRAILING_TABS}</li>
+	 * <li>{@link #PREFERENCE_SHOW_CARRIAGE_RETURN}</li>
+	 * <li>{@link #PREFERENCE_SHOW_LINE_FEED}</li>
+	 * <li>{@link #PREFERENCE_WHITESPACE_CHARACTER_ALPHA_VALUE}</li>
+	 * </ul>
+	 * </p>
+	 * 
 	 * @since 3.3
 	 */
 	public static final String PREFERENCE_SHOW_WHITESPACE_CHARACTERS= "showWhitespaceCharacters"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of leading Space characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_LEADING_SPACES= "showLeadingSpaces"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of enclosed Space characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_ENCLOSED_SPACES= "showEnclosedSpaces"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of trailing Space characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_TRAILING_SPACES= "showTrailingSpaces"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of leading Ideographic Space characters. The
+	 * value is used only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is
+	 * <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_LEADING_IDEOGRAPHIC_SPACES= "showLeadingIdeographicSpaces"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of enclosed Ideographic Space characters. The
+	 * value is used only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is
+	 * <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES= "showEnclosedIdeographicSpaces"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of trailing Ideographic Space characters. The
+	 * value is used only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is
+	 * <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_TRAILING_IDEOGRAPHIC_SPACES= "showTrailingIdeographicSpaces"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of leading Tab characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_LEADING_TABS= "showLeadingTabs"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of enclosed Tab characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_ENCLOSED_TABS= "showEnclosedTabs"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of trailing Tab characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_TRAILING_TABS= "showTrailingTabs"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of Carriage Return characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_CARRIAGE_RETURN= "showCarriageReturn"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the display of Line Feed characters. The value is used only
+	 * if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Boolean</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_SHOW_LINE_FEED= "showLineFeed"; //$NON-NLS-1$
+
+	/**
+	 * A named preference that controls the alpha value of whitespace characters. The value is used
+	 * only if the value of {@link #PREFERENCE_SHOW_WHITESPACE_CHARACTERS} is <code>true</code>.
+	 * <p>
+	 * Value is of type <code>Integer</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String PREFERENCE_WHITESPACE_CHARACTER_ALPHA_VALUE= "whitespaceCharacterAlphaValue"; //$NON-NLS-1$
+
 	/**
 	 * A named preference that controls whether text drag and drop is enabled.
 	 * <p>
@@ -3903,7 +4060,7 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
 
 	/**
 	 * Converts the {link #PREFERENCE_HOVER_ENRICH_MODE} preference value to
-	 * {@link ITextViewerExtension8.EnrichMode}.
+	 * {@link org.eclipse.jface.text.ITextViewerExtension8.EnrichMode}.
 	 *
 	 * @param mode the preference value
 	 * @return the enrich mode, can be <code>null</code>
@@ -4483,7 +4640,19 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
 			return;
 		}
 
-		if (PREFERENCE_SHOW_WHITESPACE_CHARACTERS.equals(property)) {
+		if (PREFERENCE_SHOW_WHITESPACE_CHARACTERS.equals(property) ||
+				PREFERENCE_SHOW_LEADING_SPACES.equals(property) ||
+				PREFERENCE_SHOW_ENCLOSED_SPACES.equals(property) ||
+				PREFERENCE_SHOW_TRAILING_SPACES.equals(property) ||
+				PREFERENCE_SHOW_LEADING_IDEOGRAPHIC_SPACES.equals(property) ||
+				PREFERENCE_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES.equals(property) ||
+				PREFERENCE_SHOW_TRAILING_IDEOGRAPHIC_SPACES.equals(property) ||
+				PREFERENCE_SHOW_LEADING_TABS.equals(property) ||
+				PREFERENCE_SHOW_ENCLOSED_TABS.equals(property) ||
+				PREFERENCE_SHOW_TRAILING_TABS.equals(property) ||
+				PREFERENCE_SHOW_CARRIAGE_RETURN.equals(property) ||
+				PREFERENCE_SHOW_LINE_FEED.equals(property) ||
+				PREFERENCE_WHITESPACE_CHARACTER_ALPHA_VALUE.equals(property)) {
 			IAction action= getAction(ITextEditorActionConstants.SHOW_WHITESPACE_CHARACTERS);
 			if (action instanceof IUpdate)
 				((IUpdate)action).update();
@@ -5752,6 +5921,11 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit
 		action.setActionDefinitionId(ITextEditorActionDefinitionIds.BLOCK_SELECTION_MODE);
 		setAction(ITextEditorActionConstants.BLOCK_SELECTION_MODE, action);
 
+		action= new TextOperationAction(EditorMessages.getBundleForConstructedKeys(), "Editor.OpenHyperlink.", this, HyperlinkManager.OPEN_HYPERLINK, true); //$NON-NLS-1$;
+		action.setHelpContextId(IAbstractTextEditorHelpContextIds.OPEN_HYPERLINK_ACTION);
+		action.setActionDefinitionId(ITextEditorActionDefinitionIds.OPEN_HYPERLINK);
+		setAction(ITextEditorActionConstants.OPEN_HYPERLINK, action);
+
 		PropertyDialogAction openProperties= new PropertyDialogAction(
 				new IShellProvider() {
 					public Shell getShell() {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ConstructedEditorMessages.properties b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ConstructedEditorMessages.properties
index 602c139..cab744b 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ConstructedEditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ConstructedEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -244,3 +244,8 @@ Editor.ToggleBlockSelectionMode.label= Toggle Block Selection Mode
 Editor.ToggleBlockSelectionMode.description= Enable block / column selection in the current text editor
 Editor.ToggleBlockSelectionMode.image=
 Editor.ToggleBlockSelectionMode.tooltip= Toggle Block Selection Mode
+
+Editor.OpenHyperlink.label= Open Hyperlin&k
+Editor.OpenHyperlink.tooltip= Open Hyperlink
+Editor.OpenHyperlink.image=
+Editor.OpenHyperlink.description= Opens the hyperlink at the caret location or opens a chooser if more than one hyperlink is available
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/EditorMessages.properties b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/EditorMessages.properties
index 682acf8..205ba00 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/EditorMessages.properties
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/EditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -15,7 +15,7 @@
 Editor_error_no_provider=Text editor does not have a document provider
 
 Editor_error_save_title=Save Problems
-Editor_error_save_message=Save could not be completed.
+Editor_error_save_message=Save could not be completed. Try File > Save As... if the problem persists. 
 
 Editor_error_save_deleted_title=Cannot Save
 Editor_error_save_deleted_message=The file has been deleted or is not accessible.
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java
index ae90a34..08db6da 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.ui.texteditor;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -25,6 +26,8 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.events.ShellAdapter;
 import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridData;
@@ -33,16 +36,19 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 
+import org.eclipse.jface.action.LegacyActionTools;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.fieldassist.ComboContentAdapter;
 import org.eclipse.jface.fieldassist.FieldDecoration;
 import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
 import org.eclipse.jface.resource.JFaceColors;
+import org.eclipse.jface.util.Util;
 
 import org.eclipse.jface.text.FindReplaceDocumentAdapter;
 import org.eclipse.jface.text.FindReplaceDocumentAdapterContentProposalProvider;
@@ -128,7 +134,7 @@ class FindReplaceDialog extends Dialog {
 					fNeedsInitialFindBeforeReplace= false;
 					findAndSelect(offset, "", isForwardSearch(), isCaseSensitiveSearch(), isWholeWordSearch(), isRegExSearchAvailableAndChecked()); //$NON-NLS-1$
 				} else {
-					performSearch(false, false);
+					performSearch(false, false, isForwardSearch());
 				}
 			}
 
@@ -205,6 +211,12 @@ class FindReplaceDialog extends Dialog {
 	 */
 	private boolean fGiveFocusToFindField= true;
 
+	/**
+	 * Holds the mnemonic/button pairs for all buttons.
+	 * @since 3.7
+	 */
+	private HashMap fMnemonicButtonMap= new HashMap();
+
 
 	/**
 	 * Creates a new dialog with the given shell as parent.
@@ -310,9 +322,8 @@ class FindReplaceDialog extends Dialog {
 					initIncrementalBaseLocation();
 
 				fNeedsInitialFindBeforeReplace= false;
-				performSearch();
+				performSearch((e.stateMask == SWT.SHIFT) ^ isForwardSearch());
 				updateFindHistory();
-				fFindNextButton.setFocus();
 			}
 		});
 		setGridData(fFindNextButton, SWT.FILL, true, SWT.FILL, false);
@@ -320,11 +331,10 @@ class FindReplaceDialog extends Dialog {
 		fReplaceFindButton= makeButton(panel, EditorMessages.FindReplace_ReplaceFindButton_label, 103, false, new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				if (fNeedsInitialFindBeforeReplace)
-					performSearch();
+					performSearch((e.stateMask == SWT.SHIFT) ^ isForwardSearch());
 				if (performReplaceSelection())
-					performSearch();
+					performSearch((e.stateMask == SWT.SHIFT) ^ isForwardSearch());
 				updateFindAndReplaceHistory();
-				fReplaceFindButton.setFocus();
 			}
 		});
 		setGridData(fReplaceFindButton, SWT.FILL, false, SWT.FILL, false);
@@ -334,8 +344,8 @@ class FindReplaceDialog extends Dialog {
 				if (fNeedsInitialFindBeforeReplace)
 					performSearch();
 				performReplaceSelection();
+				updateButtonState();
 				updateFindAndReplaceHistory();
-				fFindNextButton.setFocus();
 			}
 		});
 		setGridData(fReplaceSelectionButton, SWT.FILL, false, SWT.FILL, false);
@@ -344,7 +354,6 @@ class FindReplaceDialog extends Dialog {
 			public void widgetSelected(SelectionEvent e) {
 				performReplaceAll();
 				updateFindAndReplaceHistory();
-				fFindNextButton.setFocus();
 			}
 		});
 		setGridData(fReplaceAllButton, SWT.FILL, true, SWT.FILL, false);
@@ -406,6 +415,49 @@ class FindReplaceDialog extends Dialog {
 		Composite statusBar= createStatusAndCloseButton(panel);
 		setGridData(statusBar, SWT.FILL, true, SWT.BOTTOM, false);
 
+		panel.addTraverseListener(new TraverseListener() {
+			public void keyTraversed(TraverseEvent e) {
+				if (e.detail == SWT.TRAVERSE_RETURN) {
+					if (!Util.isMac()) {
+						Control controlWithFocus= getShell().getDisplay().getFocusControl();
+						if (controlWithFocus != null && (controlWithFocus.getStyle() & SWT.PUSH) == SWT.PUSH)
+							return;
+					}
+					Event event= new Event();
+					event.type= SWT.Selection;
+					event.stateMask= e.stateMask;
+					fFindNextButton.notifyListeners(SWT.Selection, event);
+					e.doit= false;
+				}
+				else if (e.detail == SWT.TRAVERSE_MNEMONIC) {
+					Character mnemonic= new Character(Character.toLowerCase(e.character));
+					if (fMnemonicButtonMap.containsKey(mnemonic)) {
+						Button button= (Button)fMnemonicButtonMap.get(mnemonic);
+						if ((fFindField.isFocusControl() || fReplaceField.isFocusControl() || (button.getStyle() & SWT.PUSH) != 0)
+								&& button.isEnabled()) {
+							Event event= new Event();
+							event.type= SWT.Selection;
+							event.stateMask= e.stateMask;
+							if ((button.getStyle() & SWT.RADIO) != 0) {
+								Composite buttonParent= button.getParent();
+								if (buttonParent != null) {
+									Control[] children= buttonParent.getChildren();
+									for (int i= 0; i < children.length; i++)
+										((Button)children[i]).setSelection(false);
+								}
+								button.setSelection(true);
+							} else {
+								button.setSelection(!button.getSelection());
+							}
+							button.notifyListeners(SWT.Selection, event);
+							e.detail= SWT.TRAVERSE_NONE;
+							e.doit= true;
+						}
+					}
+				}
+			}
+		});
+
 		updateButtonState();
 
 		applyDialogFont(panel);
@@ -453,11 +505,13 @@ class FindReplaceDialog extends Dialog {
 		fForwardRadioButton.setText(EditorMessages.FindReplace_ForwardRadioButton_label);
 		setGridData(fForwardRadioButton, SWT.LEFT, false, SWT.CENTER, false);
 		fForwardRadioButton.addSelectionListener(selectionListener);
+		storeButtonWithMnemonicInMap(fForwardRadioButton);
 
 		Button backwardRadioButton= new Button(group, SWT.RADIO | SWT.LEFT);
 		backwardRadioButton.setText(EditorMessages.FindReplace_BackwardRadioButton_label);
 		setGridData(backwardRadioButton, SWT.LEFT, false, SWT.CENTER, false);
 		backwardRadioButton.addSelectionListener(selectionListener);
+		storeButtonWithMnemonicInMap(backwardRadioButton);
 
 		backwardRadioButton.setSelection(!fForwardInit);
 		fForwardRadioButton.setSelection(fForwardInit);
@@ -501,6 +555,7 @@ class FindReplaceDialog extends Dialog {
 			public void widgetDefaultSelected(SelectionEvent e) {
 			}
 		});
+		storeButtonWithMnemonicInMap(fGlobalRadioButton);
 
 		fSelectedRangeRadioButton= new Button(group, SWT.RADIO | SWT.LEFT);
 		fSelectedRangeRadioButton.setText(EditorMessages.FindReplace_SelectedRangeRadioButton_label);
@@ -518,6 +573,7 @@ class FindReplaceDialog extends Dialog {
 			public void widgetDefaultSelected(SelectionEvent e) {
 			}
 		});
+		storeButtonWithMnemonicInMap(fSelectedRangeRadioButton);
 
 		return panel;
 	}
@@ -655,18 +711,21 @@ class FindReplaceDialog extends Dialog {
 		setGridData(fCaseCheckBox, SWT.LEFT, false, SWT.CENTER, false);
 		fCaseCheckBox.setSelection(fCaseInit);
 		fCaseCheckBox.addSelectionListener(selectionListener);
+		storeButtonWithMnemonicInMap(fCaseCheckBox);
 
 		fWrapCheckBox= new Button(group, SWT.CHECK | SWT.LEFT);
 		fWrapCheckBox.setText(EditorMessages.FindReplace_WrapCheckBox_label);
 		setGridData(fWrapCheckBox, SWT.LEFT, false, SWT.CENTER, false);
 		fWrapCheckBox.setSelection(fWrapInit);
 		fWrapCheckBox.addSelectionListener(selectionListener);
+		storeButtonWithMnemonicInMap(fWrapCheckBox);
 
 		fWholeWordCheckBox= new Button(group, SWT.CHECK | SWT.LEFT);
 		fWholeWordCheckBox.setText(EditorMessages.FindReplace_WholeWordCheckBox_label);
 		setGridData(fWholeWordCheckBox, SWT.LEFT, false, SWT.CENTER, false);
 		fWholeWordCheckBox.setSelection(fWholeWordInit);
 		fWholeWordCheckBox.addSelectionListener(selectionListener);
+		storeButtonWithMnemonicInMap(fWholeWordCheckBox);
 
 		fIncrementalCheckBox= new Button(group, SWT.CHECK | SWT.LEFT);
 		fIncrementalCheckBox.setText(EditorMessages.FindReplace_IncrementalCheckBox_label);
@@ -683,6 +742,7 @@ class FindReplaceDialog extends Dialog {
 			public void widgetDefaultSelected(SelectionEvent e) {
 			}
 		});
+		storeButtonWithMnemonicInMap(fIncrementalCheckBox);
 
 		fIsRegExCheckBox= new Button(group, SWT.CHECK | SWT.LEFT);
 		fIsRegExCheckBox.setText(EditorMessages.FindReplace_RegExCheckbox_label);
@@ -701,6 +761,7 @@ class FindReplaceDialog extends Dialog {
 				setContentAssistsEnablement(newState);
 			}
 		});
+		storeButtonWithMnemonicInMap(fIsRegExCheckBox);
 		fWholeWordCheckBox.setEnabled(!isRegExSearchAvailableAndChecked());
 		fWholeWordCheckBox.addSelectionListener(new SelectionAdapter() {
 			/*
@@ -1186,9 +1247,22 @@ class FindReplaceDialog extends Dialog {
 	 * @return the new button
 	 */
 	private Button makeButton(Composite parent, String label, int id, boolean dfltButton, SelectionListener listener) {
-		Button b= createButton(parent, id, label, dfltButton);
-		b.addSelectionListener(listener);
-		return b;
+		Button button= createButton(parent, id, label, dfltButton);
+		button.addSelectionListener(listener);
+		storeButtonWithMnemonicInMap(button);
+		return button;
+	}
+
+	/**
+	 * Stores the button and its mnemonic in {@link #fMnemonicButtonMap}.
+	 * 
+	 * @param button button whose mnemonic has to be stored
+	 * @since 3.7
+	 */
+	private void storeButtonWithMnemonicInMap(Button button) {
+		char mnemonic= LegacyActionTools.extractMnemonic(button.getText());
+		if (mnemonic != LegacyActionTools.MNEMONIC_NONE)
+			fMnemonicButtonMap.put(new Character(Character.toLowerCase(mnemonic)), button);
 	}
 
 	/**
@@ -1340,7 +1414,6 @@ class FindReplaceDialog extends Dialog {
 			replaced= false;
 		}
 
-		updateButtonState();
 		return replaced;
 	}
 
@@ -1348,7 +1421,17 @@ class FindReplaceDialog extends Dialog {
 	 * Locates the user's findString in the text of the target.
 	 */
 	private void performSearch() {
-		performSearch(isIncrementalSearch() && !isRegExSearchAvailableAndChecked(), true);
+		performSearch(isForwardSearch());
+	}
+
+	/**
+	 * Locates the user's findString in the text of the target.
+	 *
+	 * @param forwardSearch <code>true</code> if searching forwards, <code>false</code> otherwise
+	 * @since 3.7
+	 */
+	private void performSearch(boolean forwardSearch) {
+		performSearch(isIncrementalSearch() && !isRegExSearchAvailableAndChecked(), true, forwardSearch);
 	}
 
 	/**
@@ -1356,9 +1439,10 @@ class FindReplaceDialog extends Dialog {
 	 * 
 	 * @param mustInitIncrementalBaseLocation <code>true</code> if base location must be initialized
 	 * @param beep if <code>true</code> beeps when search does not find a match or needs to wrap
+	 * @param forwardSearch the search direction
 	 * @since 3.0
 	 */
-	private void performSearch(boolean mustInitIncrementalBaseLocation, boolean beep) {
+	private void performSearch(boolean mustInitIncrementalBaseLocation, boolean beep, boolean forwardSearch) {
 
 		if (mustInitIncrementalBaseLocation)
 			initIncrementalBaseLocation();
@@ -1369,7 +1453,7 @@ class FindReplaceDialog extends Dialog {
 		if (findString != null && findString.length() > 0) {
 
 			try {
-				somethingFound= findNext(findString, isForwardSearch(), isCaseSensitiveSearch(), isWrapSearch(), isWholeWordSearch(), isIncrementalSearch() && !isRegExSearchAvailableAndChecked(), isRegExSearchAvailableAndChecked(), beep);
+					somethingFound= findNext(findString, forwardSearch, isCaseSensitiveSearch(), isWrapSearch(), isWholeWordSearch(), isIncrementalSearch() && !isRegExSearchAvailableAndChecked(), isRegExSearchAvailableAndChecked(), beep);
 			} catch (PatternSyntaxException ex) {
 				statusError(ex.getLocalizedMessage());
 			} catch (IllegalStateException ex) {
@@ -1575,8 +1659,10 @@ class FindReplaceDialog extends Dialog {
 				history.remove(index);
 			}
 			history.add(0, findString);
+			Point selection= combo.getSelection();
 			updateCombo(combo, history);
 			combo.setText(findString);
+			combo.setSelection(selection);
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IAbstractTextEditorHelpContextIds.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IAbstractTextEditorHelpContextIds.java
index 7a259c2..57b59d5 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IAbstractTextEditorHelpContextIds.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IAbstractTextEditorHelpContextIds.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -391,8 +391,15 @@ public interface IAbstractTextEditorHelpContextIds {
 
 	/**
 	 * Help context id for the block selection mode toggle action. Value:
-	 * <code>"block_selection_mode_context_action_context"</code>
+	 * <code>"org.eclipse.ui.block_selection_mode_context_action_context"</code>
 	 * @since 3.5
 	 */
 	String BLOCK_SELECTION_MODE_ACTION= PREFIX + "block_selection_mode" + ACTION_POSTFIX; //$NON-NLS-1$
+
+	/**
+	 * Help context id for the open hyperlink action.
+	 * Value: <code>"org.eclipse.ui.open_hyperlink_action_context"</code>
+	 * @since 3.7
+	 */
+	String OPEN_HYPERLINK_ACTION= PREFIX + "open_hyperlink" + ACTION_POSTFIX; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IDocumentProvider.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IDocumentProvider.java
index b020c38..db76688 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IDocumentProvider.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/IDocumentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -132,9 +132,9 @@ public interface IDocumentProvider {
 	long getModificationStamp(Object element);
 
 	/**
-	 * Returns the time stamp of the last synchronization of
-	 * the given element and it's provided document.
-	 *
+	 * Returns the time stamp of the last synchronization of the given element and its provided
+	 * document.
+	 * 
 	 * @param element the element
 	 * @return the synchronization stamp of the given element
 	 */
@@ -213,7 +213,7 @@ public interface IDocumentProvider {
 
 	/**
 	 * Removes the given element state listener from this document provider.
-	 * Has no affect if an identical listener is not registered.
+	 * Has no effect if an identical listener is not registered.
 	 *
 	 * @param listener the listener
 	 */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionConstants.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionConstants.java
index b366277..d27d3ea 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionConstants.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionConstants.java
@@ -659,7 +659,6 @@ public interface ITextEditorActionConstants extends IWorkbenchActionConstants {
 	/**
 	 * Name of the action displaying information for the
 	 * current caret location in a sticky hover.
-	 *
 	 * Value: <code>"ShowInformation"</code>
 	 * @see IInformationProvider
 	 * @since 3.3
@@ -675,7 +674,6 @@ public interface ITextEditorActionConstants extends IWorkbenchActionConstants {
 
 	/**
 	 * Name of the action displaying a sticky ruler hover for the current caret location.
-	 *
 	 * Value: <code>"ShowChangeRulerInformation"</code>
 	 * @since 3.6
 	 */
@@ -683,9 +681,16 @@ public interface ITextEditorActionConstants extends IWorkbenchActionConstants {
 
 	/**
 	 * Name of the action displaying a sticky ruler annotation hover for the current caret location.
-	 * 
 	 * Value: <code>"ShowRulerAnnotationInformation"</code>
 	 * @since 3.6
 	 */
 	public static final String SHOW_RULER_ANNOTATION_INFORMATION= "ShowRulerAnnotationInformation"; //$NON-NLS-1$
+
+	/**
+	 * Name of the action to open the hyperlink at the caret location or to display a chooser
+	 * if more than one hyperlink is available.
+	 * Value: <code>"OpenHyperlink"</code> 
+	 * @since 3.7
+	 */
+	public static String OPEN_HYPERLINK= "OpenHyperlink"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionDefinitionIds.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionDefinitionIds.java
index e25d1f3..641eebb 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionDefinitionIds.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ITextEditorActionDefinitionIds.java
@@ -593,4 +593,12 @@ public interface ITextEditorActionDefinitionIds extends IWorkbenchActionDefiniti
 	 * @since 3.6
 	 */
 	public static final String SHOW_RULER_ANNOTATION_INFORMATION_ID= "org.eclipse.ui.edit.text.showRulerAnnotationInformation"; //$NON-NLS-1$
+
+	/**
+	 * Command ID of the command to open the hyperlink at the caret location or to display a chooser
+	 * if more than one hyperlink is available.
+	 * Value: <code>"org.eclipse.ui.edit.text.open.hyperlink"</code>
+	 * @since 3.7
+	 */
+	public static final String OPEN_HYPERLINK= "org.eclipse.ui.edit.text.open.hyperlink"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/InfoForm.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/InfoForm.java
index 387de38..3b1310b 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/InfoForm.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/InfoForm.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ package org.eclipse.ui.texteditor;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.graphics.Color;
@@ -31,8 +32,8 @@ import org.eclipse.jface.util.PropertyChangeEvent;
 
 
 /**
- * A form consisting of a title, a banner, and a info text. Banner and info text are
- * separated by a separator line. This form must be handled like a SWT widget.
+ * A form consisting of a title, a banner, and an info text. Banner and info text are
+ * separated by a separator line. This form must be handled like an SWT widget.
  *
  * @since 2.0
  * @deprecated since 3.0. there is no replacement, use org.eclipse.ui.forms to define a component with a similar look and function.
@@ -52,7 +53,7 @@ public class InfoForm {
 	/** The form banner */
 	private Label fBanner;
 	/** The form text */
-	private Label fText;
+	private StyledText fText;
 	/** The preference change listener */
 	private IPropertyChangeListener fPropertyChangeListener;
 
@@ -104,7 +105,7 @@ public class InfoForm {
 		data.heightHint= 2;
 		separator.setLayoutData(data);
 
-		fText= createLabel(composite, null);
+		fText= createText(composite, null);
 		createLabel(composite, null);
 
 		fScrolledComposite.setContent(composite);
@@ -186,7 +187,7 @@ public class InfoForm {
 	 * @see org.eclipse.update.ui.forms.internal.FormWidgetFactory#createCompositeSeparator(Composite)
 	 */
 	private Composite createCompositeSeparator(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NONE);
+		Composite composite = new Composite(parent, SWT.NO_FOCUS);
 		composite.setBackground(fSeparatorColor);
 		return composite;
 	}
@@ -205,6 +206,19 @@ public class InfoForm {
 		label.setForeground(fForegroundColor);
 		return label;
 	}
+	
+	private StyledText createText(Composite parent, String text) {
+		StyledText widget = new StyledText(parent, SWT.READ_ONLY | SWT.MULTI);
+		GridData data= new GridData(GridData.FILL_HORIZONTAL);
+		widget.setLayoutData(data);
+
+		if (text != null)
+			widget.setText(text);
+		widget.setBackground(fBackgroundColor);
+		widget.setForeground(fForegroundColor);
+		widget.setCaret(null);
+		return widget;
+	}
 
 	/*
 	 * @see org.eclipse.update.ui.forms.internal.FormWidgetFactory#createHeader(Composite, String)
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ShowWhitespaceCharactersAction.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ShowWhitespaceCharactersAction.java
index 9a22c31..a3deac2 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ShowWhitespaceCharactersAction.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/ShowWhitespaceCharactersAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 Wind River Systems, Inc., IBM Corporation and others.
+ * Copyright (c) 2006, 2010 Wind River Systems, Inc., IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,30 @@ public class ShowWhitespaceCharactersAction extends TextEditorAction {
 	private IPreferenceStore fStore;
 	/** The painter. */
 	private IPainter fWhitespaceCharPainter;
+	/** @since 3.7 */
+	private boolean fShowLeadingSpaces;
+	/** @since 3.7 */
+	private boolean fShowEnclosedSpaces;
+	/** @since 3.7 */
+	private boolean fShowTrailingSpaces;
+	/** @since 3.7 */
+	private boolean fShowLeadingIdeographicSpaces;
+	/** @since 3.7 */
+	private boolean fShowEnclosedIdeographicSpaces;
+	/** @since 3.7 */
+	private boolean fShowTrailingIdeographicSpace;
+	/** @since 3.7 */
+	private boolean fShowLeadingTabs;
+	/** @since 3.7 */
+	private boolean fShowEnclosedTabs;
+	/** @since 3.7 */
+	private boolean fShowTrailingTabs;
+	/** @since 3.7 */
+	private boolean fShowCarriageReturn;
+	/** @since 3.7 */
+	private boolean fShowLineFeed;
+	/** @since 3.7 */
+	private int fAlpha;
 
 	/**
 	 * Construct the action and initialize its state.
@@ -90,7 +114,12 @@ public class ShowWhitespaceCharactersAction extends TextEditorAction {
 
 		ITextViewer viewer= getTextViewer();
 		if (viewer instanceof ITextViewerExtension2) {
-			fWhitespaceCharPainter= new WhitespaceCharacterPainter(viewer);
+			if (fStore != null) {
+				fWhitespaceCharPainter= new WhitespaceCharacterPainter(viewer, fShowLeadingSpaces, fShowEnclosedSpaces, fShowTrailingSpaces, fShowLeadingIdeographicSpaces,
+						fShowEnclosedIdeographicSpaces, fShowTrailingIdeographicSpace, fShowLeadingTabs, fShowEnclosedTabs, fShowTrailingTabs, fShowCarriageReturn, fShowLineFeed, fAlpha);
+			} else {
+				fWhitespaceCharPainter= new WhitespaceCharacterPainter(viewer);
+			}
 			((ITextViewerExtension2)viewer).addPainter(fWhitespaceCharPainter);
 		}
 	}
@@ -128,12 +157,28 @@ public class ShowWhitespaceCharactersAction extends TextEditorAction {
 	 */
 	private void synchronizeWithPreference() {
 		boolean checked= false;
-		if (fStore != null)
+		if (fStore != null) {
 			checked= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_WHITESPACE_CHARACTERS);
+			fShowLeadingSpaces= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LEADING_SPACES);
+			fShowEnclosedSpaces= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_SPACES);
+			fShowTrailingSpaces= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_TRAILING_SPACES);
+			fShowLeadingIdeographicSpaces= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LEADING_IDEOGRAPHIC_SPACES);
+			fShowEnclosedIdeographicSpaces= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_IDEOGRAPHIC_SPACES);
+			fShowTrailingIdeographicSpace= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_TRAILING_IDEOGRAPHIC_SPACES);
+			fShowLeadingTabs= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LEADING_TABS);
+			fShowEnclosedTabs= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_ENCLOSED_TABS);
+			fShowTrailingTabs= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_TRAILING_TABS);
+			fShowCarriageReturn= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_CARRIAGE_RETURN);
+			fShowLineFeed= fStore.getBoolean(AbstractTextEditor.PREFERENCE_SHOW_LINE_FEED);
+			fAlpha= fStore.getInt(AbstractTextEditor.PREFERENCE_WHITESPACE_CHARACTER_ALPHA_VALUE);
+		}
 
 		if (checked != isChecked()) {
 			setChecked(checked);
 			togglePainterState(checked);
+		} else if (checked) {
+			uninstallPainter();
+			installPainter();
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/StatusTextEditor.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/StatusTextEditor.java
index d26d289..dd3c3f5 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/StatusTextEditor.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/StatusTextEditor.java
@@ -17,6 +17,7 @@ import org.eclipse.swt.custom.StackLayout;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
@@ -62,8 +63,12 @@ public class StatusTextEditor extends AbstractTextEditor {
 	 * @param input the input whose status is checked
 	 */
 	public void updatePartControl(IEditorInput input) {
-
+		boolean restoreFocus= false;
+		
 		if (fStatusControl != null) {
+			if (!fStatusControl.isDisposed()) {
+				restoreFocus= containsFocus(fStatusControl);
+			}
 			fStatusControl.dispose();
 			fStatusControl= null;
 		}
@@ -87,6 +92,21 @@ public class StatusTextEditor extends AbstractTextEditor {
 			fParent.layout();
 			updateStatusFields();
 		}
+
+		if (restoreFocus && fStatusControl != null && !containsFocus(fStatusControl)) {
+			fParent.setFocus();
+		}
+	}
+
+	private boolean containsFocus(Control control) {
+		Control focusControl= control.getDisplay().getFocusControl();
+		if (focusControl != null) {
+			focusControl= focusControl.getParent();
+			while (focusControl != fParent && focusControl != null && !(focusControl instanceof Shell)) {
+				focusControl= focusControl.getParent();
+			}
+		}
+		return focusControl == fParent;
 	}
 	
 	/*
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/TextOperationAction.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/TextOperationAction.java
index 32d6cb4..f35344c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/TextOperationAction.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/TextOperationAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,11 +8,8 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
-
 package org.eclipse.ui.texteditor;
 
-
 import java.util.ResourceBundle;
 
 import org.eclipse.swt.custom.BusyIndicator;
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/rulers/RulerColumnDescriptor.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/rulers/RulerColumnDescriptor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/rulers/package.html b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/rulers/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/MessageLine.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/MessageLine.java
deleted file mode 100644
index 8adb3ad..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/MessageLine.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.texteditor.templates;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-
-import org.eclipse.core.runtime.IStatus;
-
-import org.eclipse.jface.resource.JFaceColors;
-
-
-/**
- * A message line displaying a status.
- *
- * @since 3.0
- */
-class MessageLine extends CLabel {
-
-	private Color fNormalMsgAreaBackground;
-
-	/**
-	 * Creates a new message line as a child of the given parent.
-	 *
-	 * @param parent the parent composite
-	 */
-	public MessageLine(Composite parent) {
-		this(parent, SWT.LEFT);
-	}
-
-	/**
-	 * Creates a new message line as a child of the parent and with the given SWT style bits.
-	 *
-	 * @param parent the parent composite
-	 * @param style the style
-	 */
-	public MessageLine(Composite parent, int style) {
-		super(parent, style);
-		fNormalMsgAreaBackground= getBackground();
-	}
-
-
-	private Image findImage(IStatus status) {
-		if (status.isOK()) {
-			return null;
-		}
-		return null;
-	}
-
-	/**
-	 * Sets the message and image to the given status.
-	 * <code>null</code> is a valid argument and will set the empty text and no image
-	 *
-	 * @param status the status
-	 */
-	public void setErrorStatus(IStatus status) {
-		if (status != null && !status.isOK()) {
-			String message= status.getMessage();
-			if (message != null && message.length() > 0) {
-				setText(message);
-				setImage(findImage(status));
-				setBackground(JFaceColors.getErrorBackground(getDisplay()));
-				return;
-			}
-		}
-		setText(""); //$NON-NLS-1$
-		setImage(null);
-		setBackground(fNormalMsgAreaBackground);
-	}
-}
-
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatePreferencePage.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatePreferencePage.java
index fbb8900..921d380 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatePreferencePage.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatePreferencePage.java
@@ -20,6 +20,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -130,6 +132,7 @@ import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
 import org.eclipse.ui.texteditor.IUpdate;
 
+
 /**
  * A template preference page allows configuration of the templates for an
  * editor. It provides controls for adding, removing and changing templates as
@@ -248,6 +251,12 @@ public abstract class TemplatePreferencePage extends PreferencePage implements I
 				TemplateContextType type= (TemplateContextType) it.next();
 				contexts.add(new String[] { type.getId(), type.getName() });
 			}
+			Collections.sort(contexts, new Comparator() {
+				Collator fCollator= Collator.getInstance();
+				public int compare(Object o1, Object o2) {
+					return fCollator.compare(((String[])o1)[1], ((String[])o2)[1]);
+				}
+			});
 			fContextTypes= (String[][]) contexts.toArray(new String[contexts.size()][]);
 
 			fValidationStatus= new StatusInfo();
@@ -665,14 +674,12 @@ public abstract class TemplatePreferencePage extends PreferencePage implements I
 		 * <p>
 		 * The default implementation rejects invalid XML characters.
 		 * </p>
-		 * <p>
-		 * XXX: Make protected in 3.7
 		 * 
 		 * @param pattern the pattern to verify
 		 * @return <code>true</code> if the pattern is valid
-		 * @since 3.6
+		 * @since 3.7 protected, before it was private
 		 */
-		private boolean isValidPattern(String pattern) {
+		protected boolean isValidPattern(String pattern) {
 			for (int i= 0; i < pattern.length(); i++) {
 				char ch= pattern.charAt(i);
 				if (!(ch == 9 || ch == 10 || ch == 13 || ch >= 32))
diff --git a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatesView.java b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatesView.java
index 231cb80..a9d739b 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatesView.java
+++ b/eclipse/plugins/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/TemplatesView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 Dakshinamurthy Karra, IBM Corporation and others.
+ * Copyright (c) 2007, 2011 Dakshinamurthy Karra, IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,7 @@ import org.eclipse.ui.texteditor.IAbstractTextEditorHelpContextIds;
  * }
  * </pre></p>
  * <p>
- * <strong>Note:</strong> This plug-in does not contribute this view. Cients that want to
+ * <strong>Note:</strong> This plug-in does not contribute this view. Clients that want to
  * use this view must check whether it is available and if not, contribute this view via
  * extension point using the specified view Id {@link #ID}:
  * <pre>
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/.settings/org.eclipse.jdt.ui.prefs b/eclipse/plugins/org.eclipse.ui.workbench/.settings/org.eclipse.jdt.ui.prefs
index 3732137..93c32e6 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/.settings/org.eclipse.jdt.ui.prefs
+++ b/eclipse/plugins/org.eclipse.ui.workbench/.settings/org.eclipse.jdt.ui.prefs
@@ -13,7 +13,7 @@ org.eclipse.jdt.ui.keywordthis=false
 org.eclipse.jdt.ui.ondemandthreshold=99
 org.eclipse.jdt.ui.overrideannotation=true
 org.eclipse.jdt.ui.staticondemandthreshold=99
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return Returns the ${bare_field_name}.\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} The ${bare_field_name} to set.\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*******************************************************************************\n * Copyright (c) ${year} IBM Corporation and others.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n *     IBM Corporation - initial API and implementation\n ******************************************************************************/\n</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @since 3.5\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template></templates>
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return Returns the ${bare_field_name}.\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} The ${bare_field_name} to set.\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*******************************************************************************\n * Copyright (c) ${year} IBM Corporation and others.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n *     IBM Corporation - initial API and implementation\n ******************************************************************************/\n</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @since 3.7\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\n * ${see_to_overridden}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template></templates>
 sp_cleanup.add_default_serial_version_id=true
 sp_cleanup.add_generated_serial_version_id=false
 sp_cleanup.add_missing_annotations=true
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IAggregateWorkingSet.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IAggregateWorkingSet.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorRegistry.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorRegistry.java
index 824c84f..4bfba47 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorRegistry.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IEditorRegistry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -216,7 +216,7 @@ public interface IEditorRegistry {
 
     /**
      * Removes the given property listener from this registry.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a property listener
      */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java
index 1f0f45f..7ea81fa 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IMemento.java	
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.ui;
 
+import org.w3c.dom.DOMException;
+
 /**
  * Interface to a memento used for saving the important state of an object in a
  * form that can be persisted in the file system.
@@ -36,11 +38,16 @@ package org.eclipse.ui;
  * the value of <code>TAG_ID</code> is reserved for internal use.
  * </p>
  * <p>
+ * The default implementation can throw a {@link DOMException} for createChild
+ * and put operations. See {@link XMLMemento}.
+ * </p>
+ * <p>
  * This interface is not intended to be implemented or extended by clients.
  * </p>
  * 
  * @see IPersistableElement
  * @see IElementFactory
+ * @see XMLMemento
  * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IMemento {
@@ -83,19 +90,24 @@ public interface IMemento {
     public IMemento createChild(String type, String id);
 
     /**
-     * Returns the first child with the given type id.
-     *
-     * @param type the type id
-     * @return the first child with the given type
-     */
+	 * Returns the first child with the given type id.
+	 * 
+	 * @param type
+	 *            the type id
+	 * @return the first child with the given type. May return <code>null</code>
+	 *         .
+	 */
     public IMemento getChild(String type);
 
     /**
-     * Returns all children with the given type id.
-     *
-     * @param type the type id
-     * @return an array of children with the given type
-     */
+	 * Returns all children with the given type id.
+	 * 
+	 * @param type
+	 *            the type id
+	 * @return an array of children with the given type. This will not be
+	 *         <code>null</code>. If there are no keys, an array of length zero
+	 *         will be returned.
+	 */
     public IMemento[] getChildren(String type);
 
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPageService.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPageService.java
index a7488f3..99416bc 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPageService.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPageService.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -65,19 +65,21 @@ public interface IPageService {
      */
     public IWorkbenchPage getActivePage();
 
-    /**
-     * Removes the given page listener.
-     * Has no affect if an identical listener is not registered.
-     *
-     * @param listener a page listener
-     */
+	/**
+	 * Removes the given page listener. Has no effect if an identical listener
+	 * is not registered.
+	 * 
+	 * @param listener
+	 *            a page listener
+	 */
     public void removePageListener(IPageListener listener);
 
-    /**
-     * Removes the given page's perspective listener.
-     * Has no affect if an identical listener is not registered.
-     *
-     * @param listener a perspective listener
-     */
+	/**
+	 * Removes the given page's perspective listener. Has no effect if an
+	 * identical listener is not registered.
+	 * 
+	 * @param listener
+	 *            a perspective listener
+	 */
     public void removePerspectiveListener(IPerspectiveListener listener);
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartListener2.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartListener2.java
index b4da216..2226bbf 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartListener2.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartListener2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,17 +8,27 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.ui;
 
+import org.eclipse.jface.dialogs.IPageChangeProvider;
+import org.eclipse.jface.dialogs.IPageChangedListener;
+import org.eclipse.jface.dialogs.PageChangedEvent;
+
+
 /**
  * Interface for listening to part lifecycle events.
  * <p>
  * This is a replacement for <code>IPartListener</code>.
- * <p> 
+ * <p>
+ * As of 3.5, if the implementation of this listener also implements
+ * {@link IPageChangedListener} then it will also be notified about
+ * {@link PageChangedEvent}s from parts that implement
+ * {@link IPageChangeProvider}.
+ * </p>
+ * <p>
  * This interface may be implemented by clients.
  * </p>
- *
+ * 
  * @see IPartService#addPartListener(IPartListener2)
  */
 public interface IPartListener2 {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartService.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartService.java
index 748c7af..fed2e0b 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartService.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPartService.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,7 +81,7 @@ public interface IPartService {
 
     /**
      * Removes the given part listener.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a part listener
      */
@@ -89,7 +89,7 @@ public interface IPartService {
 
     /**
      * Removes the given part listener.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a part listener
      */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPersistableEditor.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IPersistableEditor.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart2.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart2.java
index d4ee727..96d2b62 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart2.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/ISaveablePart2.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,7 @@ public interface ISaveablePart2 extends ISaveablePart {
 	
 	/**
 	 * Standard return code constant (value 3) indicating that the default
-	 * behavior for prompting the user to save will be use.
+	 * behavior for prompting the user to save will be used.
 	 */
 	public static final int DEFAULT = 3;
 		
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchCommandConstants.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchCommandConstants.java
index 1c3a5db..aa2f6e8 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchCommandConstants.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchCommandConstants.java	
@@ -503,6 +503,14 @@ public interface IWorkbenchCommandConstants {
      */
     public static final String WINDOW_SHOW_KEY_ASSIST = "org.eclipse.ui.window.showKeyAssist"; //$NON-NLS-1$
 
+	/**
+	 * Id for command "Lock Toolbar" in category "Window" (value is
+	 * <code>"org.eclipse.ui.window.lockToolbar"</code>).
+	 * 
+	 * @since 3.7
+	 */
+	public static final String WINDOW_LOCK_TOOLBAR = "org.eclipse.ui.window.lockToolBar"; //$NON-NLS-1$
+
     // Help Category:
 
     /**
@@ -558,6 +566,14 @@ public interface IWorkbenchCommandConstants {
 	public static final String VIEWS_SHOW_VIEW_PARM_ID = "org.eclipse.ui.views.showView.viewId"; //$NON-NLS-1$
 
 	/**
+	 * Id for parameter "Secondary Id" in command "Show View" in category "Views"
+	 * (value is <code>"org.eclipse.ui.views.showView.secondaryId"</code>).
+	 * 
+	 * @since 3.7
+	 */
+	public static final String VIEWS_SHOW_VIEW_SECONDARY_ID = "org.eclipse.ui.views.showView.secondaryId"; //$NON-NLS-1$
+
+	/**
 	 * Id for parameter "As Fastview" in command "Show View" in category "Views"
 	 * (value is <code>"org.eclipse.ui.views.showView.makeFast"</code>).
 	 * Optional.
@@ -566,7 +582,7 @@ public interface IWorkbenchCommandConstants {
 	 */
 	public static final String VIEWS_SHOW_VIEW_PARM_FASTVIEW = "org.eclipse.ui.views.showView.makeFast"; //$NON-NLS-1$
 
-    // Perspectives Category:
+	// Perspectives Category:
 
     /**
      * Id for command "Show Perspective" in category "Perspectives"
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java
index 7d83fcc..b7be38a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPart.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -205,7 +205,7 @@ public interface IWorkbenchPart extends IAdaptable {
 
     /**
      * Removes the given property listener from this workbench part.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a property listener
      */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java
index 242c36b..abd4253 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPartReference.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 20078 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPreferenceConstants.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPreferenceConstants.java
index e0779b8..ccafc70 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPreferenceConstants.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPreferenceConstants.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -596,5 +596,16 @@ public interface IWorkbenchPreferenceConstants {
 	 * 
 	 * @since 3.4
 	 */
-	public static final String DISABLE_OPEN_EDITOR_IN_PLACE = "DISABLE_OPEN_EDITOR_IN_PLACE"; //$NON-NLS-1$	
+	public static final String DISABLE_OPEN_EDITOR_IN_PLACE = "DISABLE_OPEN_EDITOR_IN_PLACE"; //$NON-NLS-1$
+
+	/**
+	 * Workbench preference id for indicating the size of the list of most
+	 * recently used working sets.
+	 * <p>
+	 * Integer-valued. The default value for this preference is: <code>5</code>.
+	 * </p>
+	 * 
+	 * @since 3.7
+	 */
+	public static final String RECENTLY_USED_WORKINGSETS_SIZE = "RECENTLY_USED_WORKINGSETS_SIZE"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPropertyPage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPropertyPage.java
index 0cdf088..fbda04e 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPropertyPage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPropertyPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,11 @@ import org.eclipse.ui.dialogs.PropertyDialogAction;
  * </extension>
  * </pre>
  * </p>
+ * <p>
+ * Property pages that support multiple selected objects should
+ * implement {@link IWorkbenchPropertyPageMulti} instead.
+ * </p>
+ * @see IWorkbenchPropertyPageMulti
  */
 public interface IWorkbenchPropertyPage extends IPreferencePage {
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPropertyPageMulti.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPropertyPageMulti.java
new file mode 100644
index 0000000..3df6189
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkbenchPropertyPageMulti.java	
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Broadcom Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Broadcom Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.preference.IPreferencePage;
+
+/**
+ * This interface is similar to {@link IWorkbenchPropertyPage} with the addition
+ * of support for multiple selection.
+ * 
+ * @see IWorkbenchPropertyPage
+ * @since 3.7
+ */
+public interface IWorkbenchPropertyPageMulti extends IPreferencePage {
+
+	/**
+	 * Sets the elements that own properties shown on this page. This method
+	 * will be called if the property page responds to multiple selection.
+	 * 
+	 * @param elements
+	 *            objects that own the properties shown in this page
+	 */
+	public void setElements(IAdaptable[] elements);
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSetManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSetManager.java
index 222dc2a..79a2d92 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSetManager.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/IWorkingSetManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -350,4 +350,21 @@ public interface IWorkingSetManager {
 	 * @since 3.4
 	 */
 	public void addToWorkingSets(IAdaptable element, IWorkingSet[] workingSets);
+
+	/**
+	 * Sets maximum length of the recent working sets list.
+	 * 
+	 * @param length
+	 *            maximum number of recent working sets to be kept in the list
+	 * @since 3.7
+	 */
+	public void setRecentWorkingSetsLength(int length);
+
+	/**
+	 * Returns the maximum length of the recent working sets list.
+	 * 
+	 * @return the maximum length of the recent working sets list.
+	 * @since 3.7
+	 */
+	public int getRecentWorkingSetsLength();
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/XMLMemento.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/XMLMemento.java
index ad99331..25292d5 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/XMLMemento.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/XMLMemento.java	
@@ -21,6 +21,7 @@ import javax.xml.parsers.ParserConfigurationException;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
@@ -143,12 +144,14 @@ public final class XMLMemento implements IMemento {
     }
 
     /**
-     * Returns a root memento for writing a document.
-     * 
-     * @param type the element node type to create on the document
-     * @return the root memento for writing a document
-     */
-    public static XMLMemento createWriteRoot(String type) {
+	 * Returns a root memento for writing a document.
+	 * 
+	 * @param type
+	 *            the element node type to create on the document
+	 * @return the root memento for writing a document
+	 * @throws DOMException
+	 */
+	public static XMLMemento createWriteRoot(String type) throws DOMException {
         Document document;
         try {
             document = DocumentBuilderFactory.newInstance()
@@ -179,29 +182,61 @@ public final class XMLMemento implements IMemento {
         this.element = element;
     }
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public IMemento createChild(String type) {
+	/**
+	 * Creates a new child of this memento with the given type.
+	 * <p>
+	 * The <code>getChild</code> and <code>getChildren</code> methods are used
+	 * to retrieve children of a given type.
+	 * </p>
+	 * 
+	 * @param type
+	 *            the type
+	 * @return a new child memento
+	 * @see #getChild
+	 * @see #getChildren
+	 * @throws DOMException
+	 *             if the child cannot be created
+	 */
+	public IMemento createChild(String type) throws DOMException {
         Element child = factory.createElement(type);
         element.appendChild(child);
         return new XMLMemento(factory, child);
     }
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public IMemento createChild(String type, String id) {
+	/**
+	 * Creates a new child of this memento with the given type and id. The id is
+	 * stored in the child memento (using a special reserved key,
+	 * <code>TAG_ID</code>) and can be retrieved using <code>getId</code>.
+	 * <p>
+	 * The <code>getChild</code> and <code>getChildren</code> methods are used
+	 * to retrieve children of a given type.
+	 * </p>
+	 * 
+	 * @param type
+	 *            the type
+	 * @param id
+	 *            the child id
+	 * @return a new child memento with the given type and id
+	 * @see #getID
+	 * @throws DOMException
+	 *             if the child cannot be created
+	 */
+	public IMemento createChild(String type, String id) throws DOMException {
         Element child = factory.createElement(type);
         child.setAttribute(TAG_ID, id == null ? "" : id); //$NON-NLS-1$
         element.appendChild(child);
         return new XMLMemento(factory, child);
     }
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public IMemento copyChild(IMemento child) {
+	/**
+	 * Create a copy of the child node and append it to this node.
+	 * 
+	 * @param child
+	 * @return An IMenento for the new child node.
+	 * @throws DOMException
+	 *             if the child cannot be created
+	 */
+	public IMemento copyChild(IMemento child) throws DOMException {
         Element childElement = ((XMLMemento) child).element;
         Element newElement = (Element) factory.importNode(childElement, true);
         element.appendChild(newElement);
@@ -341,10 +376,17 @@ public final class XMLMemento implements IMemento {
         return Boolean.valueOf(attr.getValue());
 	}
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public String getTextData() {
+	/**
+	 * Returns the data of the Text node of the memento. Each memento is allowed
+	 * only one Text node.
+	 * 
+	 * @return the data of the Text node of the memento, or <code>null</code> if
+	 *         the memento has no Text node.
+	 * @since 2.0
+	 * @throws DOMException
+	 *             if the text node is too big
+	 */
+	public String getTextData() throws DOMException {
         Text textNode = getTextNode();
         if (textNode != null) {
             return textNode.getData();
@@ -391,10 +433,14 @@ public final class XMLMemento implements IMemento {
     }
 
     /**
-     * Places the element's attributes into the document.
-     * @param copyText true if the first text node should be copied
-     */
-    private void putElement(Element element, boolean copyText) {
+	 * Places the element's attributes into the document.
+	 * 
+	 * @param copyText
+	 *            true if the first text node should be copied
+	 * @throws DOMException
+	 *             if the attributes or children cannot be copied to this node.
+	 */
+	private void putElement(Element element, boolean copyText) throws DOMException {
         NamedNodeMap nodeMap = element.getAttributes();
         int size = nodeMap.getLength();
         for (int i = 0; i < size; i++) {
@@ -419,33 +465,60 @@ public final class XMLMemento implements IMemento {
         }
     }
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public void putFloat(String key, float f) {
+	/**
+	 * Sets the value of the given key to the given floating point number.
+	 * 
+	 * @param key
+	 *            the key
+	 * @param f
+	 *            the value
+	 * @throws DOMException
+	 *             if the attribute cannot be set
+	 */
+	public void putFloat(String key, float f) throws DOMException {
         element.setAttribute(key, String.valueOf(f));
     }
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public void putInteger(String key, int n) {
+	/**
+	 * Sets the value of the given key to the given integer.
+	 * 
+	 * @param key
+	 *            the key
+	 * @param n
+	 *            the value
+	 * @throws DOMException
+	 *             if the attribute cannot be set
+	 */
+	public void putInteger(String key, int n) throws DOMException {
         element.setAttribute(key, String.valueOf(n));
     }
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public void putMemento(IMemento memento) {
+	/**
+	 * Copy the attributes and children from <code>memento</code> to the
+	 * receiver.
+	 * 
+	 * @param memento
+	 *            the IMemento to be copied.
+	 * @throws DOMException
+	 *             if the attributes or children cannot be copied to this node.
+	 */
+	public void putMemento(IMemento memento) throws DOMException {
     	// Do not copy the element's top level text node (this would overwrite the existing text).
     	// Text nodes of children are copied.
         putElement(((XMLMemento) memento).element, false);
     }
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public void putString(String key, String value) {
+	/**
+	 * Sets the value of the given key to the given string.
+	 * 
+	 * @param key
+	 *            the key
+	 * @param value
+	 *            the value
+	 * @throws DOMException
+	 *             if the attribute cannot be set
+	 */
+	public void putString(String key, String value) throws DOMException {
         if (value == null) {
 			return;
 		}
@@ -453,16 +526,32 @@ public final class XMLMemento implements IMemento {
     }
 
 	/**
+	 * Sets the value of the given key to the given boolean value.
+	 * 
+	 * @param key
+	 *            the key
+	 * @param value
+	 *            the value
 	 * @since 3.4
+	 * @throws DOMException
+	 *             if the attribute cannot be set
 	 */
-	public void putBoolean(String key, boolean value) {
+	public void putBoolean(String key, boolean value) throws DOMException {
 		element.setAttribute(key, value ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
-    /* (non-Javadoc)
-     * Method declared in IMemento.
-     */
-    public void putTextData(String data) {
+	/**
+	 * Sets the memento's Text node to contain the given data. Creates the Text
+	 * node if none exists. If a Text node does exist, it's current contents are
+	 * replaced. Each memento is allowed only one text node.
+	 * 
+	 * @param data
+	 *            the data to be placed on the Text node
+	 * @since 2.0
+	 * @throws DOMException
+	 *             if the text node cannot be created under this node.
+	 */
+	public void putTextData(String data) throws DOMException {
         Text textNode = getTextNode();
         if (textNode == null) {
             textNode = factory.createTextNode(data);
@@ -495,8 +584,6 @@ public final class XMLMemento implements IMemento {
      */
     private static final class DOMWriter extends PrintWriter {
     	
-    	private int tab;
-
     	/* constants */
     	private static final String XML_VERSION = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; //$NON-NLS-1$
 
@@ -507,7 +594,6 @@ public final class XMLMemento implements IMemento {
     	 */
     	public DOMWriter(Writer output) {
     		super(output);
-    		tab = 0;
     		println(XML_VERSION);
     	}
 
@@ -523,7 +609,6 @@ public final class XMLMemento implements IMemento {
         	boolean hasChildren = element.hasChildNodes();
         	startTag(element, hasChildren);
         	if (hasChildren) {
-	        	tab++;
 	        	boolean prevWasText = false;
 	        	NodeList children = element.getChildNodes();
 	    		for (int i = 0; i < children.getLength(); i++) {
@@ -531,7 +616,6 @@ public final class XMLMemento implements IMemento {
 	    			if (node instanceof Element) {
 	    				if (!prevWasText) {
 	    					println();
-	    					printTabulation();
 	    				}
 	    				print((Element) children.item(i));
 	    				prevWasText = false;
@@ -541,25 +625,13 @@ public final class XMLMemento implements IMemento {
 	    				prevWasText = true;
 	    			}
 	    		}
-	    		tab--;
 	    		if (!prevWasText) {
 	    			println();
-	    			printTabulation();
 	    		}
 	    		endTag(element);
         	}
     	}
 
-    	private void printTabulation() {
-        	// Indenting is disabled, as it can affect the result of getTextData().
-        	// In 3.0, elements were separated by a newline but not indented.
-    		// This causes getTextData() to return "\n" even if no text data had explicitly been set.
-        	// The code here emulates that behaviour.
-    		
-//    		for (int i = 0; i < tab; i++)
-//    			super.print("\t"); //$NON-NLS-1$
-    	}
-
     	private void startTag(Element element, boolean hasChildren) {
     		StringBuffer sb = new StringBuffer();
     		sb.append("<"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ActionFactory.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ActionFactory.java
index 4cdbd3c..83185dd 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ActionFactory.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/actions/ActionFactory.java	
@@ -10,35 +10,27 @@
  *******************************************************************************/
 package org.eclipse.ui.actions;
 
-import org.eclipse.osgi.util.NLS;
-
 import org.eclipse.core.runtime.IProduct;
 import org.eclipse.core.runtime.Platform;
-
+import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
-
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.IWorkbenchCommandConstants;
+import org.eclipse.ui.IWorkbenchPreferenceConstants;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.internal.CloseAllSavedAction;
 import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
-import org.eclipse.ui.internal.IntroAction;
-import org.eclipse.ui.internal.LockToolBarAction;
 import org.eclipse.ui.internal.NavigationHistoryAction;
-import org.eclipse.ui.internal.OpenPreferencesAction;
-import org.eclipse.ui.internal.ResetPerspectiveAction;
-import org.eclipse.ui.internal.SaveAction;
-import org.eclipse.ui.internal.SaveAllAction;
-import org.eclipse.ui.internal.SaveAsAction;
-import org.eclipse.ui.internal.SavePerspectiveAction;
 import org.eclipse.ui.internal.ToggleEditorsVisibilityAction;
+import org.eclipse.ui.internal.Workbench;
 import org.eclipse.ui.internal.WorkbenchImages;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.actions.CommandAction;
-import org.eclipse.ui.internal.actions.DynamicHelpAction;
-import org.eclipse.ui.internal.actions.HelpContentsAction;
-import org.eclipse.ui.internal.actions.HelpSearchAction;
+import org.eclipse.ui.internal.intro.IntroDescriptor;
+import org.eclipse.ui.internal.intro.IntroMessages;
+import org.eclipse.ui.internal.util.PrefUtil;
 
 /**
  * Access to standard actions provided by the workbench.
@@ -352,9 +344,19 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new IntroAction(window);
-            action.setId(getId());
-            return action;
+
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+
+			action.setId(getId());
+			action.setText(IntroMessages.Intro_action_text);
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.INTRO_ACTION);
+			IntroDescriptor introDescriptor = ((Workbench) window.getWorkbench())
+					.getIntroDescriptor();
+			if (introDescriptor != null)
+				action.setImageDescriptor(introDescriptor.getImageDescriptor());
+
+			return action;
         }
     };
 
@@ -627,8 +629,8 @@ public abstract class ActionFactory {
 	 * Workbench action (id: "lockToolBar"): Lock/unlock the workbench window tool bar. This action
 	 * maintains its enablement state.
 	 */
-    public static final ActionFactory LOCK_TOOL_BAR = new ActionFactory(
-            "lockToolBar") {//$NON-NLS-1$
+	public static final ActionFactory LOCK_TOOL_BAR = new ActionFactory(
+			"lockToolBar", IWorkbenchCommandConstants.WINDOW_LOCK_TOOLBAR) {//$NON-NLS-1$
         
         /* (non-Javadoc)
          * @see org.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.IWorkbenchWindow)
@@ -637,8 +639,12 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new LockToolBarAction(window);
-            action.setId(getId());
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+			action.setId(getId());
+			action.setText(WorkbenchMessages.LockToolBarAction_text);
+			action.setToolTipText(WorkbenchMessages.LockToolBarAction_toolTip);
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.LOCK_TOOLBAR_ACTION);
             return action;
         }
     };
@@ -955,8 +961,14 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new OpenPreferencesAction(window);
+
+            WorkbenchCommandAction action = new WorkbenchCommandAction(
+					getCommandId(), window);
             action.setId(getId());
+            action.setText(WorkbenchMessages.OpenPreferences_text);
+			action.setToolTipText(WorkbenchMessages.OpenPreferences_toolTip);
+            window.getWorkbench().getHelpSystem().setHelp(action,
+            		IWorkbenchHelpContextIds.OPEN_PREFERENCES_ACTION);
             return action;
         }
     };
@@ -1238,12 +1250,17 @@ public abstract class ActionFactory {
          * @see org.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.IWorkbenchWindow)
          */
         public IWorkbenchAction create(IWorkbenchWindow window) {
-            if (window == null) {
-                throw new IllegalArgumentException();
-            }
-            IWorkbenchAction action = new ResetPerspectiveAction(window);
-            action.setId(getId());
-            return action;
+			if (window == null) {
+				throw new IllegalArgumentException();
+			}
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+
+			action.setId(getId());
+			action.setText(WorkbenchMessages.ResetPerspective_text);
+			action.setToolTipText(WorkbenchMessages.ResetPerspective_toolTip);
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.RESET_PERSPECTIVE_ACTION);
+			return action;
         }
     };
 
@@ -1283,8 +1300,12 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new SaveAction(window);
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+			action.setText(WorkbenchMessages.SaveAction_text);
+			action.setToolTipText(WorkbenchMessages.SaveAction_toolTip);
             action.setId(getId());
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.SAVE_ACTION);
             return action;
         }
     };
@@ -1303,7 +1324,11 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new SaveAllAction(window);
+			IWorkbenchAction action = new WorkbenchCommandAction(getCommandId(), window);
+			action.setText(WorkbenchMessages.SaveAll_text);
+			action.setToolTipText(WorkbenchMessages.SaveAll_toolTip);
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.SAVE_ALL_ACTION);
             action.setId(getId());
             return action;
         }
@@ -1323,7 +1348,11 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new SaveAsAction(window);
+			IWorkbenchAction action = new WorkbenchCommandAction(getCommandId(), window);
+			action.setText(WorkbenchMessages.SaveAs_text);
+			action.setToolTipText(WorkbenchMessages.SaveAs_toolTip);
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.SAVE_AS_ACTION);
             action.setId(getId());
             return action;
         }
@@ -1339,14 +1368,19 @@ public abstract class ActionFactory {
         /* (non-Javadoc)
          * @see org.eclipse.ui.actions.ActionFactory#create(org.eclipse.ui.IWorkbenchWindow)
          */
-        public IWorkbenchAction create(IWorkbenchWindow window) {
-            if (window == null) {
-                throw new IllegalArgumentException();
-            }
-            IWorkbenchAction action = new SavePerspectiveAction(window);
-            action.setId(getId());
-            return action;
-        }
+		public IWorkbenchAction create(IWorkbenchWindow window) {
+			if (window == null) {
+				throw new IllegalArgumentException();
+			}
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+
+			action.setId(getId());
+			action.setText(WorkbenchMessages.SavePerspective_text);
+			action.setToolTipText(WorkbenchMessages.SavePerspective_toolTip);
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.SAVE_PERSPECTIVE_ACTION);
+			return action;
+		}
     };
 
 	/**
@@ -1572,8 +1606,23 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new HelpContentsAction(window);
-            action.setId(getId());
+
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+
+			// support for allowing a product to override the text for the
+			// action
+			String overrideText = PrefUtil.getAPIPreferenceStore().getString(
+					IWorkbenchPreferenceConstants.HELP_CONTENTS_ACTION_TEXT);
+			if ("".equals(overrideText)) { //$NON-NLS-1$
+				action.setText(WorkbenchMessages.HelpContentsAction_text);
+				action.setToolTipText(WorkbenchMessages.HelpContentsAction_toolTip);
+			} else {
+				action.setText(overrideText);
+				action.setToolTipText(Action.removeMnemonics(overrideText));
+			}
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.HELP_CONTENTS_ACTION);
+			action.setId(getId());
             return action;
         }
     };
@@ -1594,8 +1643,22 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new HelpSearchAction(window);
-            action.setId(getId());
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+
+			// support for allowing a product to override the text for the
+			// action
+			String overrideText = PrefUtil.getAPIPreferenceStore().getString(
+					IWorkbenchPreferenceConstants.HELP_SEARCH_ACTION_TEXT);
+			if ("".equals(overrideText)) { //$NON-NLS-1$
+				action.setText(WorkbenchMessages.HelpSearchAction_text);
+				action.setToolTipText(WorkbenchMessages.HelpSearchAction_toolTip);
+			} else {
+				action.setText(overrideText);
+				action.setToolTipText(Action.removeMnemonics(overrideText));
+			}
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.HELP_SEARCH_ACTION);
+			action.setId(getId());
             return action;
         }
     };
@@ -1616,7 +1679,23 @@ public abstract class ActionFactory {
             if (window == null) {
                 throw new IllegalArgumentException();
             }
-            IWorkbenchAction action = new DynamicHelpAction(window);
+
+			WorkbenchCommandAction action = new WorkbenchCommandAction(getCommandId(), window);
+
+			// support for allowing a product to override the text for the
+			// action
+			String overrideText = PrefUtil.getAPIPreferenceStore().getString(
+					IWorkbenchPreferenceConstants.DYNAMIC_HELP_ACTION_TEXT);
+			if ("".equals(overrideText)) { //$NON-NLS-1$
+				action.setText(WorkbenchMessages.DynamicHelpAction_text);
+				action.setToolTipText(WorkbenchMessages.DynamicHelpAction_toolTip);
+			} else {
+				action.setText(overrideText);
+				action.setToolTipText(Action.removeMnemonics(overrideText));
+			}
+			window.getWorkbench().getHelpSystem()
+					.setHelp(action, IWorkbenchHelpContextIds.DYNAMIC_HELP_ACTION);
+
             action.setId(getId());
             return action;
         }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/IWorkbenchWindowConfigurer.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/IWorkbenchWindowConfigurer.java
index c1cff67..a70337c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/IWorkbenchWindowConfigurer.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/IWorkbenchWindowConfigurer.java	
@@ -89,12 +89,16 @@ public interface IWorkbenchWindowConfigurer {
      */
     public boolean getShowMenuBar();
 
-    /**
-     * Sets whether the underlying workbench window has a menu bar.
-     * 
-     * @param show <code>true</code> for a menu bar, and <code>false</code>
-     * for no menu bar
-     */
+	/**
+	 * Sets whether the underlying workbench window has a menu bar.
+	 * 
+	 * When this method is not called, the value defaults to <code>true</code>
+	 * 
+	 * @param show
+	 *            <code>true</code> for a menu bar, and <code>false</code> for
+	 *            no menu bar
+	 * 
+	 */
     public void setShowMenuBar(boolean show);
 
     /**
@@ -108,12 +112,15 @@ public interface IWorkbenchWindowConfigurer {
      */
     public boolean getShowCoolBar();
 
-    /**
-     * Sets whether the underlying workbench window has a cool bar.
-     * 
-     * @param show <code>true</code> for a cool bar, and <code>false</code>
-     * for no cool bar
-     */
+	/**
+	 * Sets whether the underlying workbench window has a cool bar.
+	 * 
+	 * When this method is not called, the value defaults to <code>true</code>
+	 * 
+	 * @param show
+	 *            <code>true</code> for a cool bar, and <code>false</code> for
+	 *            no cool bar
+	 */
     public void setShowCoolBar(boolean show);
 
     /**
@@ -127,12 +134,15 @@ public interface IWorkbenchWindowConfigurer {
      */
     public boolean getShowStatusLine();
 
-    /**
-     * Sets whether the underlying workbench window has a status line.
-     * 
-     * @param show <code>true</code> for a status line, and <code>false</code>
-     * for no status line
-     */
+	/**
+	 * Sets whether the underlying workbench window has a status line.
+	 * 
+	 * When this method is not called, the value defaults to <code>true</code>
+	 * 
+	 * @param show
+	 *            <code>true</code> for a status line, and <code>false</code>
+	 *            for no status line
+	 */
     public void setShowStatusLine(boolean show);
 
     /**
@@ -147,13 +157,16 @@ public interface IWorkbenchWindowConfigurer {
      */
     public boolean getShowPerspectiveBar();
 
-    /**
-     * Sets whether the underlying workbench window has a perspective bar (the 
-     * perspective bar provides buttons to quickly switch between perspectives).
-     * 
-     * @param show <code>true</code> for a perspective bar, and
-     * <code>false</code> for no perspective bar
-     */
+	/**
+	 * Sets whether the underlying workbench window has a perspective bar (the
+	 * perspective bar provides buttons to quickly switch between perspectives).
+	 * 
+	 * When this method is not called, the value defaults to <code>false</code>
+	 * 
+	 * @param show
+	 *            <code>true</code> for a perspective bar, and
+	 *            <code>false</code> for no perspective bar
+	 */
     public void setShowPerspectiveBar(boolean show);
 
     /**
@@ -167,12 +180,16 @@ public interface IWorkbenchWindowConfigurer {
      */
     public boolean getShowFastViewBars();
 
-    /**
-     * Sets whether the underlying workbench window has fast view bars. 
-     * 
-     * @param enable <code>true</code> for fast view bars, and 
-     * <code>false</code> for no fast view bars
-     */
+	/**
+	 * Sets whether the underlying workbench window has fast view bars.
+	 * 
+	 * When this method is not called, the value defaults to <code>false</code>
+	 * 
+	 * 
+	 * @param enable
+	 *            <code>true</code> for fast view bars, and <code>false</code>
+	 *            for no fast view bars
+	 */
     public void setShowFastViewBars(boolean enable);
 
     /**
@@ -186,12 +203,15 @@ public interface IWorkbenchWindowConfigurer {
      */
     public boolean getShowProgressIndicator();
 
-    /**
-     * Sets whether the underlying workbench window has a progress indicator.
-     * 
-     * @param show <code>true</code> for a progress indicator, and <code>false</code>
-     * for no progress indicator
-     */
+	/**
+	 * Sets whether the underlying workbench window has a progress indicator.
+	 * 
+	 * When this method is not called, the value defaults to <code>false</code>
+	 * 
+	 * @param show
+	 *            <code>true</code> for a progress indicator, and
+	 *            <code>false</code> for no progress indicator
+	 */
     public void setShowProgressIndicator(boolean show);
 
     /**
@@ -223,14 +243,14 @@ public interface IWorkbenchWindowConfigurer {
      */
     public Point getInitialSize();
 
-    /**
+	/**
      * Sets the size to use for the window's shell when it is created.
      * This method has no effect after the shell is created.
      * That is, it must be called within the <code>preWindowOpen</code>
      * callback on <code>WorkbenchAdvisor</code>.
-     *
+	 * 
      * @param initialSize the initial size to use for the shell
-     */
+	 */
     public void setInitialSize(Point initialSize);
 
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/WorkbenchWindowAdvisor.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/WorkbenchWindowAdvisor.java
index 13e2c2b..80657d1 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/WorkbenchWindowAdvisor.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/application/WorkbenchWindowAdvisor.java	
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.ui.application;
 
+import java.util.ArrayList;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -21,6 +22,9 @@ import org.eclipse.ui.IWorkbenchPreferenceConstants;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.WorkbenchException;
 import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.internal.EditorAreaHelper;
+import org.eclipse.ui.internal.PartStack;
+import org.eclipse.ui.internal.WorkbenchPage;
 import org.eclipse.ui.internal.WorkbenchWindowConfigurer;
 import org.eclipse.ui.internal.util.PrefUtil;
 import org.eclipse.ui.intro.IIntroManager;
@@ -134,6 +138,34 @@ public class WorkbenchWindowAdvisor {
         // do nothing
     }
 
+	/**
+	 * Close any empty editor stacks that may have been left open when the
+	 * Workbench Window shut down. May be called from
+	 * {@link #postWindowRestore()} in the subclass but is not called by
+	 * default.
+	 * 
+	 * @since 3.7
+	 */
+	protected void cleanUpEditorArea() {
+		// close any empty Editor stacks that may have been left open
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=110684
+		if (getWindowConfigurer() != null && getWindowConfigurer().getWindow() != null
+				&& getWindowConfigurer().getWindow().getActivePage() != null) {
+			WorkbenchPage activePage = (WorkbenchPage) getWindowConfigurer().getWindow()
+					.getActivePage();
+			EditorAreaHelper editorAreaHelper = activePage.getEditorPresentation();
+			if (editorAreaHelper != null) {
+				ArrayList workbooks = editorAreaHelper.getWorkbooks();
+				for (int i = 0; i < workbooks.size(); i++) {
+					PartStack editorStack = (PartStack) workbooks.get(i);
+					if (editorStack.getChildren().length == 0) {
+						editorStack.getContainer().remove(editorStack);
+					}
+				}
+			}
+		}
+	}
+
     /**
      * Opens the introduction componenet.  
      * <p>
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/branding/package.html b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/branding/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/commands/package.html b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/commands/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/contexts/IContextService.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/contexts/IContextService.java
index d56034e..84105ba 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/contexts/IContextService.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/contexts/IContextService.java	
@@ -11,7 +11,6 @@
 package org.eclipse.ui.contexts;
 
 import java.util.Collection;
-
 import org.eclipse.core.commands.contexts.Context;
 import org.eclipse.core.commands.contexts.IContextManagerListener;
 import org.eclipse.core.expressions.Expression;
@@ -40,6 +39,14 @@ import org.eclipse.ui.services.IServiceWithSources;
 public interface IContextService extends IServiceWithSources {
 
 	/**
+	 * The identifier for the context that is active when a workbench is active.
+	 * 
+	 * @since 3.7
+	 * 
+	 */
+	public static final String CONTEXT_ID_WORKBENCH_MENU = "org.eclipse.ui.contexts.workbenchMenu"; //$NON-NLS-1$
+
+	/**
 	 * The identifier for the context that is active when a shell registered as
 	 * a dialog.
 	 */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java
index f5014ad..d47eba5 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@ import org.eclipse.jface.resource.ResourceManager;
 import org.eclipse.jface.util.Util;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.osgi.util.TextProcessor;
 import org.eclipse.swt.SWT;
@@ -55,11 +56,16 @@ import org.eclipse.ui.internal.registry.EditorRegistry;
  * internal and external editors.
  * 
  * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
  */
 
-public final class EditorSelectionDialog extends Dialog {
+public class EditorSelectionDialog extends Dialog {
 	private EditorDescriptor selectedEditor;
 
+	private EditorDescriptor hiddenSelectedEditor;
+
+	private int hiddenTableTopIndex;
+
 	private Button externalButton;
 
 	private Table editorTable;
@@ -70,7 +76,13 @@ public final class EditorSelectionDialog extends Dialog {
 
 	private Button okButton;
 
-	private static final String STORE_ID_INTERNAL_EXTERNAL = "EditorSelectionDialog.STORE_ID_INTERNAL_EXTERNAL";//$NON-NLS-1$
+	/**
+	 * For internal use only.
+	 * 
+	 * @noreference This field is not intended to be referenced by clients.
+	 * @since 3.7
+	 */
+	protected static final String STORE_ID_INTERNAL_EXTERNAL = "EditorSelectionDialog.STORE_ID_INTERNAL_EXTERNAL";//$NON-NLS-1$
 
 	private String message = WorkbenchMessages.EditorSelection_chooseAnEditor;
 
@@ -157,10 +169,13 @@ public final class EditorSelectionDialog extends Dialog {
 		((GridLayout) contents.getLayout()).numColumns = 2;
 
 		// begin the layout
-		Label textLabel = new Label(contents, SWT.NONE);
+		Label textLabel = new Label(contents, SWT.WRAP);
+
 		textLabel.setText(message);
 		GridData data = new GridData();
 		data.horizontalSpan = 2;
+		data.horizontalAlignment = SWT.FILL;
+		data.widthHint = TABLE_WIDTH;
 		textLabel.setLayoutData(data);
 		textLabel.setFont(font);
 
@@ -229,11 +244,32 @@ public final class EditorSelectionDialog extends Dialog {
 	}
 
 	protected void fillEditorTable() {
-		if (internalButton.getSelection()) {
-			editorTableViewer.setInput(getInternalEditors());
+		EditorDescriptor newSelection = null;
+		int newTopIndex = 0;
+
+		boolean showInternal = internalButton.getSelection();
+		boolean isShowingInternal = editorTableViewer.getInput() == getInternalEditors();
+		if (showInternal != isShowingInternal) {
+			newSelection = hiddenSelectedEditor;
+			newTopIndex = hiddenTableTopIndex;
+			if (editorTable.getSelectionIndex() != -1) {
+				hiddenSelectedEditor = (EditorDescriptor) editorTable.getSelection()[0].getData();
+				hiddenTableTopIndex = editorTable.getTopIndex();
+			}
+		}
+
+		editorTableViewer.setInput(showInternal ? getInternalEditors() : getExternalEditors());
+
+		if (newSelection != null) {
+			editorTable.setTopIndex(newTopIndex);
+			editorTableViewer.setSelection(new StructuredSelection(newSelection), true);
 		} else {
-			editorTableViewer.setInput(getExternalEditors());
+			// set focus to first element, but don't select it:
+			editorTable.setTopIndex(0);
+			editorTable.setSelection(0);
+			editorTable.deselectAll();
 		}
+		editorTable.setFocus();
 	}
 
 	/**
@@ -347,7 +383,7 @@ public final class EditorSelectionDialog extends Dialog {
 			TableItem ti = new TableItem(editorTable, SWT.NULL);
 			ti.setData(editor);
 			ti.setText(editor.getLabel());
-			Image image = editor.getImageDescriptor().createImage();
+			Image image = (Image) resourceManager.get(editor.getImageDescriptor());
 			ti.setImage(image);
 
 			// need to pass an array to setSelection -- 1FSKYVO: SWT:ALL -
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredItemsSelectionDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredItemsSelectionDialog.java
index a1686f8..3671307 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredItemsSelectionDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredItemsSelectionDialog.java	
@@ -25,7 +25,7 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 import org.eclipse.core.commands.AbstractHandler;
@@ -2214,7 +2214,7 @@ public abstract class FilteredItemsSelectionDialog extends
 
 		private static final int MAX_HISTORY_SIZE = 60;
 
-		private final List historyList;
+		private final Set historyList;
 
 		private final String rootNodeName;
 
@@ -2222,7 +2222,7 @@ public abstract class FilteredItemsSelectionDialog extends
 
 		private SelectionHistory(String rootNodeName, String infoNodeName) {
 
-			historyList = Collections.synchronizedList(new LinkedList() {
+			historyList = Collections.synchronizedSet(new LinkedHashSet() {
 
 				private static final long serialVersionUID = 0L;
 
@@ -2232,11 +2232,12 @@ public abstract class FilteredItemsSelectionDialog extends
 				 * @see java.util.LinkedList#add(java.lang.Object)
 				 */
 				public boolean add(Object arg0) {
-					if (this.size() >= MAX_HISTORY_SIZE)
-						this.removeFirst();
-					if (!this.contains(arg0))
-						return super.add(arg0);
-					return false;
+					if (this.size() >= MAX_HISTORY_SIZE) {
+						Iterator iterator = this.iterator();
+						iterator.next();
+						iterator.remove();
+					}
+					return super.add(arg0);
 				}
 
 			});
@@ -2259,6 +2260,7 @@ public abstract class FilteredItemsSelectionDialog extends
 		 *            the item to be added to the history
 		 */
 		public synchronized void accessed(Object object) {
+			historyList.remove(object);
 			historyList.add(object);
 		}
 
@@ -3283,13 +3285,14 @@ public abstract class FilteredItemsSelectionDialog extends
 		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
 		 */
 		public int compare(Object o1, Object o2) {
-			if ((isHistoryElement(o1) && isHistoryElement(o2))
-					|| (!isHistoryElement(o1) && !isHistoryElement(o2)))
+			boolean h1 = isHistoryElement(o1);
+			boolean h2 = isHistoryElement(o2);
+			if (h1 == h2)
 				return getItemsComparator().compare(o1, o2);
 
-			if (isHistoryElement(o1))
+			if (h1)
 				return -2;
-			if (isHistoryElement(o2))
+			if (h2)
 				return +2;
 
 			return 0;
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyDialogAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyDialogAction.java
index 3374289..f584e01 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyDialogAction.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyDialogAction.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - Bug 294628 multiple selection
  *******************************************************************************/
 package org.eclipse.ui.dialogs;
 
@@ -94,13 +95,13 @@ public class PropertyDialogAction extends SelectionProviderAction {
     }
 
 	/**
-	 * Returns whether the provided object has pages registered in the property
+	 * Returns whether the provided selection has pages registered in the property
 	 * page manager.
 	 * 
 	 * @param object
 	 * @return boolean
 	 */
-	private boolean hasPropertyPagesFor(Object object) {
+	private boolean hasPropertyPagesFor(IStructuredSelection object) {
 		return PropertyPageContributorManager.getManager().getApplicableContributors(object).size() != 0;
 	}
 
@@ -115,7 +116,7 @@ public class PropertyDialogAction extends SelectionProviderAction {
 	 * state of the action on each selection change.
 	 * </p>
 	 * 
-	 * @return <code>true</code> if the selection is of size 1 and there are
+	 * @return <code>true</code> if the selection is not empty and there are
 	 *         property pages for the selected element, and <code>false</code>
 	 *         otherwise
 	 */
@@ -128,7 +129,7 @@ public class PropertyDialogAction extends SelectionProviderAction {
 
 	/**
 	 * Returns whether this action is applicable to the current selection. This
-	 * checks that the selection is of size 1, and checks with the workbench's
+	 * checks that the selection is not empty, and checks with the workbench's
 	 * property page manager to see if there are any property pages registered
 	 * for the selected element's type.
 	 * <p>
@@ -138,12 +139,12 @@ public class PropertyDialogAction extends SelectionProviderAction {
 	 * 
 	 * @param selection
 	 *            The selection to test
-	 * @return <code>true</code> if the selection is of size 1 and there are
+	 * @return <code>true</code> if the selection is of not empty and there are
 	 *         property pages for the selected element, and <code>false</code>
 	 *         otherwise
 	 */
 	public boolean isApplicableForSelection(IStructuredSelection selection) {
-		return selection.size() == 1 && hasPropertyPagesFor(selection.getFirstElement());
+		return !selection.isEmpty() && hasPropertyPagesFor(selection);
 	}
 
 	
@@ -167,13 +168,11 @@ public class PropertyDialogAction extends SelectionProviderAction {
 	 * @since 3.1
 	 */
 	public PreferenceDialog createDialog() {
-
-		Object element = getStructuredSelection().getFirstElement();
-		if (element == null) {
+		if (getStructuredSelection().isEmpty())
 			return null;
-		}
+
 		return PropertyDialog
-				.createDialogOn(shellProvider.getShell(), initialPageId, element);
+				.createDialogOn(shellProvider.getShell(), initialPageId, getStructuredSelection());
 	}
 
 	
@@ -181,6 +180,6 @@ public class PropertyDialogAction extends SelectionProviderAction {
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	public void selectionChanged(IStructuredSelection selection) {
-		setEnabled(selection.size() == 1 && selection.getFirstElement() != null);
+		setEnabled(!selection.isEmpty());
 	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyPage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyPage.java
index a4bf64d..1d6667d 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyPage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PropertyPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,12 +13,16 @@ package org.eclipse.ui.dialogs;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.IWorkbenchPropertyPageMulti;
 
 /**
  * Abstract base implementation of a workbench property page (
  * <code>IWorkbenchPropertyPage</code>). The implementation is a JFace
  * preference page with an adaptable element.
  * <p>
+ * Property pages that support multiple selected objects should
+ * implement {@link IWorkbenchPropertyPageMulti} instead.
+ * <p>
  * Subclasses must implement the <code>createContents</code> framework method to
  * supply the property page's main control.
  * </p>
@@ -38,9 +42,9 @@ import org.eclipse.ui.IWorkbenchPropertyPage;
  * </p>
  * 
  * @see IWorkbenchPropertyPage
+ * @see IWorkbenchPropertyPageMulti
  */
-public abstract class PropertyPage extends PreferencePage implements
-        IWorkbenchPropertyPage {
+public abstract class PropertyPage extends PreferencePage implements IWorkbenchPropertyPage {
     /**
      * The element.
      */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/TypeFilteringDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/TypeFilteringDialog.java
index 6d4984a..df7b898 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/TypeFilteringDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/TypeFilteringDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.StringTokenizer;
 
 import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.swt.SWT;
@@ -219,8 +220,7 @@ public class TypeFilteringDialog extends SelectionDialog {
         listViewer.getTable().setLayoutData(data);
         listViewer.getTable().setFont(parent.getFont());
         listViewer.setLabelProvider(FileEditorMappingLabelProvider.INSTANCE);
-        listViewer
-                .setContentProvider(FileEditorMappingContentProvider.INSTANCE);
+		listViewer.setContentProvider(ArrayContentProvider.getInstance());
         listViewer.setComparator(new ViewerComparator());
         addSelectionButtons(composite);
         createUserEntryGroup(composite);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/WorkingSetConfigurationBlock.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/WorkingSetConfigurationBlock.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/HandlerUtil.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/HandlerUtil.java
index 056c7df..498d9d6 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/HandlerUtil.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/HandlerUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.eclipse.core.commands.State;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.ISources;
 import org.eclipse.ui.IWorkbenchPart;
@@ -286,6 +287,43 @@ public class HandlerUtil {
 	}
 
 	/**
+	 * Return the input of the active editor.
+	 * 
+	 * @param event
+	 *            The execution event that contains the application context
+	 * @return the input of the active editor, or <code>null</code>.
+	 * @since 3.7
+	 */
+	public static IEditorInput getActiveEditorInput(ExecutionEvent event) {
+		Object o = getVariable(event, ISources.ACTIVE_EDITOR_INPUT_NAME);
+		if (o instanceof IEditorInput) {
+			return (IEditorInput) o;
+		}
+		return null;
+	}
+
+	/**
+	 * Return the input of the active editor.
+	 * 
+	 * @param event
+	 *            The execution event that contains the application context
+	 * @return the input of the active editor. Will not return <code>null</code>
+	 *         .
+	 * @throws ExecutionException
+	 *             If the active editor input variable is not found.
+	 * @since 3.7
+	 */
+	public static IEditorInput getActiveEditorInputChecked(ExecutionEvent event)
+			throws ExecutionException {
+		Object o = getVariableChecked(event, ISources.ACTIVE_EDITOR_INPUT_NAME);
+		if (!(o instanceof IEditorInput)) {
+			incorrectTypeFound(event, ISources.ACTIVE_EDITOR_INPUT_NAME, IEditorInput.class,
+					o.getClass());
+		}
+		return (IEditorInput) o;
+	}
+
+	/**
 	 * Return the active part.
 	 * 
 	 * @param event
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/ShowViewHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/ShowViewHandler.java
index d1fa612..bf42b84 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/ShowViewHandler.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/handlers/ShowViewHandler.java	
@@ -11,7 +11,6 @@
 package org.eclipse.ui.handlers;
 
 import java.util.Map;
-
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -66,15 +65,15 @@ public final class ShowViewHandler extends AbstractHandler {
 				.getActiveWorkbenchWindowChecked(event);
 		// Get the view identifier, if any.
 		final Map parameters = event.getParameters();
-		final Object value = parameters
-				.get(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID);
+		final Object viewId = parameters.get(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID);
+		final Object secondary = parameters.get(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_SECONDARY_ID);
 		makeFast = "true".equals(parameters.get(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_FASTVIEW)); //$NON-NLS-1$
 		
-		if (value == null) {
+		if (viewId == null) {
 			openOther(window);
 		} else {
             try {
-                openView((String) value, window);
+				openView((String) viewId, (String) secondary, window);
             } catch (PartInitException e) {
                 throw new ExecutionException("Part could not be initialized", e); //$NON-NLS-1$
             }
@@ -103,7 +102,7 @@ public final class ShowViewHandler extends AbstractHandler {
 		final IViewDescriptor[] descriptors = dialog.getSelection();
 		for (int i = 0; i < descriptors.length; ++i) {
 			try {
-                openView(descriptors[i].getId(), window);
+				openView(descriptors[i].getId(), null, window);
 			} catch (PartInitException e) {
 				StatusUtil.handleStatus(e.getStatus(),
 						WorkbenchMessages.ShowView_errorTitle
@@ -118,12 +117,13 @@ public final class ShowViewHandler extends AbstractHandler {
 	 * 
 	 * @param viewId
 	 *            The view to open; must not be <code>null</code>
+	 * @param secondaryId
+	 *            an optional secondary id; may be <code>null</code>
 	 * @throws PartInitException
 	 *             If the part could not be initialized.
 	 */
-	private final void openView(final String viewId,
-			final IWorkbenchWindow activeWorkbenchWindow)
-			throws PartInitException {
+	private final void openView(final String viewId, final String secondaryId,
+			final IWorkbenchWindow activeWorkbenchWindow) throws PartInitException {
 
 		final IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
 		if (activePage == null) {
@@ -137,7 +137,7 @@ public final class ShowViewHandler extends AbstractHandler {
             // If we're making a fast view then use the new mechanism directly
             boolean useNewMinMax = Perspective.useNewMinMax(persp);
             if (useNewMinMax) {
-            	IViewReference ref = persp.getViewReference(viewId, null);
+				IViewReference ref = persp.getViewReference(viewId, secondaryId);
             	if (ref == null)
             		return;
 
@@ -147,10 +147,10 @@ public final class ShowViewHandler extends AbstractHandler {
         		return;
             }
             
-            IViewReference ref = wp.findViewReference(viewId);
+			IViewReference ref = wp.findViewReference(viewId, secondaryId);
             
             if (ref == null) {
-                IViewPart part = wp.showView(viewId, null, IWorkbenchPage.VIEW_CREATE);
+				IViewPart part = wp.showView(viewId, secondaryId, IWorkbenchPage.VIEW_CREATE);
                 ref = (IViewReference)wp.getReference(part); 
             }
             
@@ -159,7 +159,7 @@ public final class ShowViewHandler extends AbstractHandler {
             }
             wp.activate(ref.getPart(true));
         } else {
-            activePage.showView(viewId);
+			activePage.showView(viewId, secondaryId, IWorkbenchPage.VIEW_ACTIVATE);
         }
 		
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java
index 72e7c15..d5c31dc 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AbstractWorkingSetManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.SortedSet;
 import java.util.TreeSet;
-
 import org.eclipse.core.commands.common.EventManager;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
@@ -39,6 +38,7 @@ import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker;
 import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler;
 import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.osgi.util.NLS;
@@ -47,6 +47,7 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IElementFactory;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.IWorkbenchPreferenceConstants;
 import org.eclipse.ui.IWorkingSet;
 import org.eclipse.ui.IWorkingSetElementAdapter;
 import org.eclipse.ui.IWorkingSetManager;
@@ -64,6 +65,7 @@ import org.eclipse.ui.internal.misc.StatusUtil;
 import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
 import org.eclipse.ui.internal.registry.WorkingSetDescriptor;
 import org.eclipse.ui.internal.registry.WorkingSetRegistry;
+import org.eclipse.ui.internal.util.PrefUtil;
 import org.eclipse.ui.progress.WorkbenchJob;
 import org.eclipse.ui.statushandlers.StatusManager;
 import org.osgi.framework.Bundle;
@@ -96,12 +98,8 @@ public abstract class AbstractWorkingSetManager extends EventManager implements
 					((AbstractWorkingSet) o2).getUniqueId());
 		}
 	});
-    
-    /**
-     * Size of the list of most recently used working sets.
-     */
-    private static final int MRU_SIZE = 5;
-    private List recentWorkingSets = new ArrayList();
+
+	private List recentWorkingSets = new ArrayList();
 
     private BundleContext bundleContext;
     private Map/*<String, IWorkingSetUpdater>*/ updaters= new HashMap();
@@ -320,9 +318,7 @@ public abstract class AbstractWorkingSetManager extends EventManager implements
 			}
         recentWorkingSets.remove(workingSet);
         recentWorkingSets.add(0, workingSet);
-        if (recentWorkingSets.size() > MRU_SIZE) {
-            recentWorkingSets.remove(MRU_SIZE);
-        }
+        sizeRecentWorkingSets();
     }
 
     //---- equals and hash code -----------------------------------------------
@@ -504,16 +500,25 @@ public abstract class AbstractWorkingSetManager extends EventManager implements
      * 
      * @param memento the persistence store
      */
-    protected void restoreWorkingSetState(IMemento memento) {
-        IMemento[] children = memento
-                .getChildren(IWorkbenchConstants.TAG_WORKING_SET);
-        for (int i = 0; i < children.length; i++) {
-            IWorkingSet workingSet = restoreWorkingSet(children[i]);
-            if (workingSet != null) {
-            	internalAddWorkingSet(workingSet);
-            }
-        }
-    }
+	protected void restoreWorkingSetState(IMemento memento) {
+		IMemento[] children = memento.getChildren(IWorkbenchConstants.TAG_WORKING_SET);
+		for (int i = 0; i < children.length; i++) {
+			IWorkingSet workingSet = restoreWorkingSet(children[i]);
+			if (workingSet != null) {
+				workingSets.add(workingSet);
+			}
+		}
+		IWorkingSet[] sets = getAllWorkingSets();
+		for (int i = 0; i < sets.length; i++) {
+			((AbstractWorkingSet) sets[i]).connect(this);
+		}
+		for (int i = 0; i < sets.length; i++) {
+			addToUpdater(sets[i]);
+		}
+		for (int i = 0; i < sets.length; i++) {
+			firePropertyChange(CHANGE_WORKING_SET_ADD, null, sets[i]);
+		}
+	}
     
     /**
      * Recreates a working set from the persistence store.
@@ -909,4 +914,27 @@ public abstract class AbstractWorkingSetManager extends EventManager implements
 				}});
 		}
 	}
+
+	public void setRecentWorkingSetsLength(int length) {
+		if (length < 1 || length > 99)
+			throw new IllegalArgumentException("Invalid recent working sets length: " + length); //$NON-NLS-1$
+		IPreferenceStore store = PrefUtil.getAPIPreferenceStore();
+		store.setValue(IWorkbenchPreferenceConstants.RECENTLY_USED_WORKINGSETS_SIZE, length);
+		// adjust length
+		sizeRecentWorkingSets();
+	}
+	
+	private void sizeRecentWorkingSets() {
+		int maxLength = getRecentWorkingSetsLength();
+		while (recentWorkingSets.size() > maxLength) {
+			int lastPosition = recentWorkingSets.size() - 1;
+			recentWorkingSets.remove(lastPosition);
+		}
+	}
+
+	public int getRecentWorkingSetsLength() {
+		IPreferenceStore store = PrefUtil.getAPIPreferenceStore();
+		return store.getInt(IWorkbenchPreferenceConstants.RECENTLY_USED_WORKINGSETS_SIZE);
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActiveEditorAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActiveEditorAction.java
deleted file mode 100644
index 64e138e..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActiveEditorAction.java	
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
-
-/**
- * The abstract superclass for actions that depend on the active editor.
- * This implementation tracks the active editor (see <code>getActiveEditor</code>)
- * and updates the availability of the action when an editor becomes
- * active.
- * <p>
- * Subclasses must implement the following <code>IAction</code> method:
- * <ul>
- *   <li><code>run</code> - to do the action's work</li>
- * </ul>
- * </p>
- * <p>
- * Subclasses may extend any of the <code>IPartListener</code> methods if the
- * action availablity needs to be recalculated:
- * <ul>
- *   <li><code>partActivated</code></li> 
- *   <li><code>partDeactivated</code></li>
- *   <li><code>partOpened</code></li>
- *   <li><code>partClosed</code></li>
- *   <li><code>partBroughtToTop</code></li>
- * </ul>
- * </p>
- * <p>
- * Subclasses may extend any of the <code>IPageListener</code> methods if the
- * action availablity needs to be recalculated:
- * <ul>
- *   <li><code>pageActivated</code></li> 
- *   <li><code>pageClosed</code></li>
- *   <li><code>pageOpened</code></li>
- * </ul>
- * </p>
- * <p>
- * This method implements the <code>IPartListener</code> and
- * <code>IPageListener</code>interfaces, and automatically registers listeners
- * so that it can keep its enablement state up to date. Ordinarily, the
- * window's references to these listeners will be dropped automatically when
- * the window closes. However, if the client needs to get rid of an action
- * while the window is still open, the client must call 
- * {@link IWorkbenchAction#dispose dispose} to give the action an
- * opportunity to deregister its listeners and to perform any other cleanup.
- * </p>
- */
-public abstract class ActiveEditorAction extends PageEventAction {
-
-    private IEditorPart activeEditor;
-
-    /**
-     * Creates a new action with the given text.
-     *
-     * @param text the string used as the text for the action, 
-     *   or <code>null</code> if there is no text
-     * @param window the workbench window this action is
-     *   registered with.
-     */
-    protected ActiveEditorAction(String text, IWorkbenchWindow window) {
-        super(text, window);
-        updateState();
-    }
-
-    /**
-     * Notification that the active editor tracked
-     * by the action is being activated.
-     *
-     * Subclasses may override.
-     */
-    protected void editorActivated(IEditorPart part) {
-    }
-
-    /**
-     * Notification that the active editor tracked
-     * by the action is being deactivated.
-     *
-     * Subclasses may override.
-     */
-    protected void editorDeactivated(IEditorPart part) {
-    }
-
-    /**
-     * Return the active editor
-     *
-     * @return the page's active editor, and <code>null</code>
-     *		if no active editor or no active page.
-     */
-    public final IEditorPart getActiveEditor() {
-        return activeEditor;
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void pageActivated(IWorkbenchPage page) {
-        super.pageActivated(page);
-        updateActiveEditor();
-        updateState();
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void pageClosed(IWorkbenchPage page) {
-        super.pageClosed(page);
-        updateActiveEditor();
-        updateState();
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partActivated(IWorkbenchPart part) {
-        super.partActivated(part);
-        if (part instanceof IEditorPart) {
-            updateActiveEditor();
-            updateState();
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partBroughtToTop(IWorkbenchPart part) {
-        super.partBroughtToTop(part);
-        if (part instanceof IEditorPart) {
-            updateActiveEditor();
-            updateState();
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partClosed(IWorkbenchPart part) {
-        super.partClosed(part);
-        if (part instanceof IEditorPart) {
-            updateActiveEditor();
-            updateState();
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partDeactivated(IWorkbenchPart part) {
-        super.partDeactivated(part);
-        if (part instanceof IEditorPart) {
-            updateActiveEditor();
-            updateState();
-        }
-    }
-
-    /**
-     * Set the active editor
-     */
-    private void setActiveEditor(IEditorPart part) {
-        if (activeEditor == part) {
-            return;
-        }
-        if (activeEditor != null) {
-            editorDeactivated(activeEditor);
-        }
-        activeEditor = part;
-        if (activeEditor != null) {
-            editorActivated(activeEditor);
-        }
-    }
-
-    /**
-     * Update the active editor based on the current
-     * active page.
-     */
-    private void updateActiveEditor() {
-        if (getActivePage() == null) {
-            setActiveEditor(null);
-        } else {
-            setActiveEditor(getActivePage().getActiveEditor());
-        }
-    }
-
-    /**
-     * Update the state of the action. By default, the action
-     * is enabled if there is an active editor.
-     *
-     * Subclasses may override or extend this method.
-     */
-    protected void updateState() {
-        setEnabled(getActiveEditor() != null);
-    }
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AnimationEngine.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AnimationEngine.java
index a02e603..f3d8263 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AnimationEngine.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/AnimationEngine.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,6 @@ public class AnimationEngine extends Job {
 	private long prevTime;
 	private int timingStyle = TICK_TIMER;
 	private long frameCount;
-	private long stepCount;
 	private boolean animationCanceled = false;
 	private long sleepAmount;
 
@@ -96,7 +95,6 @@ public class AnimationEngine extends Job {
 		feedbackRenderer.initialize(this);
 
 		// Set the animation's initial state
-		stepCount = 0;
 		curTime = startTime = System.currentTimeMillis();
 
 	}
@@ -122,7 +120,6 @@ public class AnimationEngine extends Job {
 				updateDisplay();
 				frameCount++;
 			}
-			stepCount++;
 		}
 
 	};
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ApplicationMenuManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ApplicationMenuManager.java
new file mode 100644
index 0000000..2aa0a03
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ApplicationMenuManager.java	
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.swt.widgets.Decorations;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Menu;
+
+/**
+ * @since 3.7
+ * 
+ */
+class ApplicationMenuManager extends MenuManager{
+	
+	private final Menu appMenu;
+	private boolean disposing;
+	
+	public ApplicationMenuManager(Menu appMenu) {
+		this.appMenu = appMenu;
+	}
+
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.MenuManager#createMenuBar(org.eclipse.swt.widgets.Decorations)
+	 */
+	public Menu createMenuBar(Decorations parent) {
+		return appMenu;
+	}
+	
+	protected boolean menuExist() {
+		// our menu always exist, 
+		// except disposing - if not dispose will be called on this menu
+		return !disposing; 
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.MenuManager#getMenuItemCount()
+	 */
+	protected int getMenuItemCount() {
+		return appMenu.getItemCount();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.MenuManager#getMenuItem(int)
+	 */
+	protected Item getMenuItem(int index) {
+		return appMenu.getItem(index);
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.MenuManager#getMenuItems()
+	 */
+	protected Item[] getMenuItems() {
+		return appMenu.getItems();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.MenuManager#doItemFill(org.eclipse.jface.action.IContributionItem, int)
+	 */
+	protected void doItemFill(IContributionItem ci, int index) {
+        ci.fill(appMenu, index);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.MenuManager#dispose()
+	 */
+	public void dispose() {
+		disposing = true;
+		super.dispose();
+		disposing = false;
+	}
+}
+
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/BaseSaveAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/BaseSaveAction.java
deleted file mode 100644
index a6968f3..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/BaseSaveAction.java	
+++ /dev/null
@@ -1,235 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.ui.internal;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.ISaveablePart;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.internal.util.Util;
-
-/**
- * The abstract superclass for save actions that depend on the active editor.
- */
-public abstract class BaseSaveAction extends ActiveEditorAction {
-    /*
-     * The view-related code below was added to track the view with focus
-     * in order to support save actions from a view (see bug 10234). 
-     */
-	
-    /**
-     * List of parts (element type: <code>IWorkbenchPart</code>)
-     * against which this class has outstanding property listeners registered.
-     */
-    private List partsWithListeners = new ArrayList(1);
-
-    private final IPropertyListener propListener = new IPropertyListener() {
-        public void propertyChanged(Object source, int propId) {
-            if (source == getActiveEditor()) {
-                if (propId == IEditorPart.PROP_DIRTY) {
-					updateState();
-				}
-            }
-        }
-    };
-
-    /**
-     * Creates a new action with the given text.
-     *
-     * @param text the string used as the text for the action, 
-     *   or <code>null</code> if there is no text
-     * @param window the workbench window this action is
-     *   registered with.
-     */
-    protected BaseSaveAction(String text, IWorkbenchWindow window) {
-        super(text, window);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on ActiveEditorAction.
-     */
-    protected void editorActivated(IEditorPart part) {
-        if (part != null) {
-            part.addPropertyListener(propListener);
-            partsWithListeners.add(part);
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on ActiveEditorAction.
-     */
-    protected void editorDeactivated(IEditorPart part) {
-        if (part != null) {
-            part.removePropertyListener(propListener);
-            partsWithListeners.remove(part);
-        }
-    }
-
-    private IViewPart activeView;
-
-    private final IPropertyListener propListener2 = new IPropertyListener() {
-        public void propertyChanged(Object source, int propId) {
-            if (source == activeView) {
-                if (propId == IEditorPart.PROP_DIRTY) {
-					updateState();
-				}
-            }
-        }
-    };
-
-    /** the active saveable part is tracked in order to listen to its dirty events */ 
-    private ISaveablePart activeSaveablePart;
-    
-    private final IPropertyListener propListener3 = new IPropertyListener() {
-    	public void propertyChanged(Object source, int propId) {
-    		if (source == activeSaveablePart) {
-    			if (propId == IEditorPart.PROP_DIRTY) {
-    				updateState();
-    			}
-    		}
-    	}
-    };
-    
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void pageActivated(IWorkbenchPage page) {
-        super.pageActivated(page);
-        updateActiveView();
-        updateState();
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void pageClosed(IWorkbenchPage page) {
-        super.pageClosed(page);
-        updateActiveView();
-        updateState();
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partActivated(IWorkbenchPart part) {
-        super.partActivated(part);
-        if (part instanceof IViewPart) {
-            updateActiveView();
-            updateState();
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partClosed(IWorkbenchPart part) {
-        super.partClosed(part);
-        if (part instanceof IViewPart) {
-            updateActiveView();
-            updateState();
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partDeactivated(IWorkbenchPart part) {
-        super.partDeactivated(part);
-        if (part instanceof IViewPart) {
-            updateActiveView();
-            updateState();
-        }
-    }
-
-    /**
-     * Update the active view based on the current
-     * active page.
-     */
-    private void updateActiveView() {
-        if (getActivePage() == null) {
-			setActiveView(null);
-		} else {
-			setActiveView(getActivePage().getActivePart());
-		}
-    }
-
-    /**
-	 * 
-	 */
-	private void updateActiveSaveablePart() {
-		if (activeSaveablePart instanceof IWorkbenchPart) {
-			((IWorkbenchPart)activeSaveablePart).removePropertyListener(propListener3);
-			partsWithListeners.remove(activeSaveablePart);
-		}
-		activeSaveablePart = getSaveableView();
-		if (activeSaveablePart == activeView) {
-			// no need to listen to the same part twice
-			activeSaveablePart = null;
-		}
-		if (activeSaveablePart instanceof IWorkbenchPart) {
-			((IWorkbenchPart)activeSaveablePart).addPropertyListener(propListener3);
-			partsWithListeners.add(activeSaveablePart);
-		}
-	}
-
-	/**
-     * Set the active editor
-     */
-    private void setActiveView(IWorkbenchPart part) {
-        if (activeView == part) {
-            return;
-        }
-        if (activeView != null) {
-            activeView.removePropertyListener(propListener2);
-            partsWithListeners.remove(activeView);
-        }
-        if (part instanceof IViewPart) {
-            activeView = (IViewPart) part;
-        } else {
-            activeView = null;
-        }
-        if (activeView != null) {
-            activeView.addPropertyListener(propListener2);
-            partsWithListeners.add(activeView);
-        }
-        updateActiveSaveablePart();
-    }
-
-    protected final ISaveablePart getSaveableView() {
-        if (activeView == null) {
-            return null;
-        }
-
-        return (ISaveablePart) Util.getAdapter(activeView, ISaveablePart.class);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void dispose() {
-        super.dispose();
-        for (Iterator it = partsWithListeners.iterator(); it.hasNext();) {
-            IWorkbenchPart part = (IWorkbenchPart) it.next();
-            part.removePropertyListener(propListener);
-            part.removePropertyListener(propListener2);
-            part.removePropertyListener(propListener3);
-        }
-        partsWithListeners.clear();
-    }
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleBaseHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleBaseHandler.java
index 1766873..e7ba6b0 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleBaseHandler.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleBaseHandler.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,8 +31,10 @@ import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.KeyListener;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseMoveListener;
 import org.eclipse.swt.events.TraverseEvent;
 import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Display;
@@ -189,6 +191,28 @@ public abstract class CycleBaseHandler extends AbstractHandler implements
 			}
 		});
 
+		table.addMouseMoveListener(new MouseMoveListener() {
+			TableItem lastItem = null;
+
+			public void mouseMove(MouseEvent e) {
+				if (table.equals(e.getSource())) {
+					Object o = table.getItem(new Point(e.x, e.y));
+					if (lastItem == null ^ o == null) {
+						table.setCursor(o == null ? null : table.getDisplay().getSystemCursor(
+								SWT.CURSOR_HAND));
+					}
+					if (o instanceof TableItem) {
+						if (!o.equals(lastItem)) {
+							lastItem = (TableItem) o;
+							table.setSelection(new TableItem[] { lastItem });
+						}
+					} else if (o == null) {
+						lastItem = null;
+					}
+				}
+			}
+		});
+
 		setDialogLocation(dialog, activePart);
 
 		final IContextService contextService = (IContextService) window
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorManager.java
index 95d0456..9fdd5f8 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorManager.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,9 +8,11 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Nikolay Botev - bug 240651
+ *     Markus Schorn - Bug 341327
  *******************************************************************************/
 package org.eclipse.ui.internal;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -19,7 +21,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
-
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.IHandler;
@@ -36,7 +37,9 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler;
 import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;
+import org.eclipse.jface.dialogs.DialogSettings;
 import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.internal.provisional.action.ICoolBarManager2;
 import org.eclipse.jface.operation.IRunnableContext;
@@ -50,6 +53,7 @@ import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.util.SafeRunnable;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.window.IShellProvider;
+import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
@@ -85,6 +89,7 @@ import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.Saveable;
+import org.eclipse.ui.dialogs.EditorSelectionDialog;
 import org.eclipse.ui.dialogs.ListSelectionDialog;
 import org.eclipse.ui.handlers.IHandlerActivation;
 import org.eclipse.ui.handlers.IHandlerService;
@@ -95,10 +100,12 @@ import org.eclipse.ui.internal.misc.ExternalEditor;
 import org.eclipse.ui.internal.misc.StatusUtil;
 import org.eclipse.ui.internal.misc.UIStats;
 import org.eclipse.ui.internal.part.NullEditorInput;
+import org.eclipse.ui.internal.progress.ProgressManagerUtil;
 import org.eclipse.ui.internal.registry.EditorDescriptor;
 import org.eclipse.ui.internal.registry.EditorRegistry;
 import org.eclipse.ui.internal.tweaklets.TabBehaviour;
 import org.eclipse.ui.internal.tweaklets.Tweaklets;
+import org.eclipse.ui.internal.util.PrefUtil;
 import org.eclipse.ui.internal.util.Util;
 import org.eclipse.ui.model.WorkbenchPartLabelProvider;
 import org.eclipse.ui.part.AbstractMultiEditor;
@@ -141,6 +148,10 @@ public class EditorManager implements IExtensionChangeHandler {
 	// Handler for the pin editor keyboard shortcut
 	private IHandlerActivation pinEditorHandlerActivation = null;
 
+	// determines if a prompt is shown when opening large files
+	private long maxFileSize = 0;
+	private boolean checkDocumentSize;
+
 	static final String RESOURCES_TO_SAVE_MESSAGE = WorkbenchMessages.EditorManager_saveResourcesMessage;
 
 	static final String SAVE_RESOURCES_TITLE = WorkbenchMessages.EditorManager_saveResourcesTitle;
@@ -157,9 +168,16 @@ public class EditorManager implements IExtensionChangeHandler {
 		this.page = workbenchPage;
 		this.editorPresentation = pres;
 
+		initMaxFileSize();
 		page.getExtensionTracker().registerHandler(this, null);
 	}
 
+	private void initMaxFileSize() {
+		IPreferenceStore preferenceStore = PrefUtil.getInternalPreferenceStore();
+		maxFileSize = preferenceStore.getLong(IPreferenceConstants.LARGE_DOC_SIZE_FOR_EDITORS);
+		checkDocumentSize = maxFileSize != 0;
+	}
+
 	/**
 	 * Check to determine if the editor resources are no longer needed removes
 	 * property change listener for editors removes pin editor keyboard shortcut
@@ -359,7 +377,10 @@ public class EditorManager implements IExtensionChangeHandler {
 		actionBars.removeRef();
 		if (actionBars.getRef() <= 0) {
 			String type = actionBars.getEditorType();
-			actionCache.remove(type);
+			Object obj = actionCache.get(type);
+			if (actionBars == obj) {
+				actionCache.remove(type);
+			}
 			// refresh the cool bar manager before disposing of a cool item
 			ICoolBarManager2 coolBar = (ICoolBarManager2) window.getCoolBarManager2();
             if (coolBar != null) {
@@ -627,15 +648,24 @@ public class EditorManager implements IExtensionChangeHandler {
 			throw new IllegalArgumentException();
 		}
 
-		IEditorRegistry reg = getEditorRegistry();
-		EditorDescriptor desc = (EditorDescriptor) reg.findEditor(editorId);
+		IEditorDescriptor desc = getEditorRegistry().findEditor(editorId);
+		if (desc != null && !desc.isOpenExternal() && isLargeDocument(input)) {
+			desc = getAlternateEditor();
+			if (desc == null) {
+				// the user pressed cancel in the editor selection dialog
+				return null;
+			}
+		}
+
 		if (desc == null) {
 			throw new PartInitException(NLS.bind(
 					WorkbenchMessages.EditorManager_unknownEditorIDMessage,
 					editorId));
 		}
 
-		IEditorReference result = openEditorFromDescriptor(desc, input, editorState);
+		IEditorReference result = openEditorFromDescriptor((EditorDescriptor) desc, input,
+				editorState);
+
 		return result;
 	}
 
@@ -1437,7 +1467,11 @@ public class EditorManager implements IExtensionChangeHandler {
 		return (IPathEditorInput) Util.getAdapter(input, IPathEditorInput.class);
 	}
 
-	private class InnerEditor extends EditorReference {
+	/**
+	 * An editor reference that is actually contained within another editor
+	 * reference.
+	 */
+	class InnerEditor extends EditorReference {
 
 		private IEditorReference outerEditor;
 
@@ -1451,6 +1485,14 @@ public class EditorManager implements IExtensionChangeHandler {
 			this.outerEditorPart = outerEditorPart;
 		}
 
+		/**
+		 * @return Returns the parent editor reference that this reference is a
+		 *         child of.
+		 */
+		public IEditorReference getOuterEditor() {
+			return outerEditor;
+		}
+
 		protected void doDisposePart() {
 			this.outerEditorPart = null;
 			super.doDisposePart();
@@ -1690,4 +1732,38 @@ public class EditorManager implements IExtensionChangeHandler {
 				.getPreferenceStore();
 		return store.getBoolean(IPreferenceConstants.USE_IPERSISTABLE_EDITORS);
 	}
+
+	private static IEditorDescriptor getAlternateEditor() {
+		Shell shell = ProgressManagerUtil.getDefaultParent();
+		EditorSelectionDialog dialog = new EditorSelectionDialog(shell) {
+			protected IDialogSettings getDialogSettings() {
+				IDialogSettings result = new DialogSettings("EditorSelectionDialog"); //$NON-NLS-1$
+				result.put(EditorSelectionDialog.STORE_ID_INTERNAL_EXTERNAL, true);
+				return result;
+			}
+		};
+		dialog.setMessage(WorkbenchMessages.EditorManager_largeDocumentWarning);
+
+		if (dialog.open() == Window.OK)
+			return dialog.getSelectedEditor();
+		return null;
+	}
+
+	boolean isLargeDocument(IEditorInput editorInput) {
+
+		if (!checkDocumentSize)
+			return false;
+
+		if (!(editorInput instanceof IPathEditorInput))
+			return false; // we know nothing about it
+
+		try {
+			IPath path = ((IPathEditorInput) editorInput).getPath();
+			File file = new File(path.toOSString());
+			return file.length() > maxFileSize;
+		} catch (Exception e) {
+			// ignore exceptions
+			return false;
+		}
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java
index 662e95e..9b3538a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2010 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -746,11 +746,21 @@ public class EditorReference extends WorkbenchPartReference implements
      * 
      * @return true if it has inner editor reference or the input is
      * MultiEditorInput.
+     * @see #getChildren()
      */
     public boolean isMultiReference() {
     	return multiEditorChildren!=null || restoredInput instanceof MultiEditorInput;
     }
 
+    /**
+	 * @return Returns the child editor references. May be <code>null</code> if
+	 *         this is not a multi reference.
+	 * @see #isMultiReference()
+     */
+	public IEditorReference[] getChildren() {
+		return multiEditorChildren;
+	}
+
 	/**
 	 * Creates and returns an empty editor (<code>ErrorEditorPart</code>).
 	 * 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorStack.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorStack.java
index 94d510f..934b283 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorStack.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorStack.java	
@@ -344,7 +344,7 @@ public class EditorStack extends PartStack {
 			return;
 		
 		//isMinimized = getState() == IStackPresentationSite.STATE_MINIMIZED;
-		super.setMinimized(newState == IStackPresentationSite.STATE_MINIMIZED);
+		setMinimized(newState == IStackPresentationSite.STATE_MINIMIZED);
 		presentationSite.setPresentationState(newState);
 	}
 	
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorEditorPart.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorEditorPart.java
index 7b601af..543a3c5 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorEditorPart.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorEditorPart.java	
@@ -10,11 +10,9 @@
  *******************************************************************************/
 package org.eclipse.ui.internal;
 
-import org.eclipse.swt.widgets.Composite;
-
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-
+import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.internal.part.StatusPart;
@@ -28,6 +26,7 @@ import org.eclipse.ui.part.EditorPart;
 public class ErrorEditorPart extends EditorPart {
 
 	private IStatus error;
+	private Composite parentControl;
 
 	/**
 	 * Creates instance of the class
@@ -66,6 +65,7 @@ public class ErrorEditorPart extends EditorPart {
 	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
 	public void createPartControl(Composite parent) {
+		this.parentControl = parent;
 		if (error != null) {
 			new StatusPart(parent, error);
 		}
@@ -107,7 +107,7 @@ public class ErrorEditorPart extends EditorPart {
 	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
 	 */
 	public void setFocus() {
-
+		parentControl.setFocus();
 	}
 
 	/*
@@ -118,4 +118,14 @@ public class ErrorEditorPart extends EditorPart {
 	public void setPartName(String newName) {
 		super.setPartName(newName);
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	public void dispose() {
+		super.dispose();
+		parentControl = null;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorViewPart.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorViewPart.java
index e07c3e5..e18d5d4 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorViewPart.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ErrorViewPart.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,7 @@ import org.eclipse.ui.part.ViewPart;
 public class ErrorViewPart extends ViewPart {
 
 	private IStatus error;
+	private Composite parentControl;
 
 	/**
 	 * Creates instance of the class
@@ -47,6 +48,7 @@ public class ErrorViewPart extends ViewPart {
 	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
 	public void createPartControl(Composite parent) {
+		parentControl = parent;
 		if (error != null) {
 			new StatusPart(parent, error);
 		}
@@ -67,6 +69,17 @@ public class ErrorViewPart extends ViewPart {
 	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
 	 */
 	public void setFocus() {
+		parentControl.setFocus();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	public void dispose() {
+		super.dispose();
+		parentControl = null;
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ExtensionEventHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ExtensionEventHandler.java
index c316b20..f49f27c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ExtensionEventHandler.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ExtensionEventHandler.java	
@@ -16,7 +16,6 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IExtensionDelta;
@@ -55,12 +54,7 @@ class ExtensionEventHandler implements IRegistryChangeListener {
                     .getExtensionDeltas(WorkbenchPlugin.PI_WORKBENCH);
             IExtension ext;
             IExtensionPoint extPt;
-            IWorkbenchWindow[] win = PlatformUI.getWorkbench()
-                    .getWorkbenchWindows();
-            if (win.length == 0) {
-				return;
-			}
-            Display display = win[0].getShell().getDisplay();
+            Display display =  PlatformUI.getWorkbench().getDisplay();
             if (display == null) {
 				return;
 			}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewBar.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewBar.java
index b9a3e10..cebe308 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewBar.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewBar.java	
@@ -16,7 +16,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
@@ -136,8 +135,11 @@ public class FastViewBar implements IWindowTrim {
         ToolItem position;
 
         /**
-         * @param panesToDrop the list of ViewPanes to drop at the given position
-         */
+		 * @param panesToDrop
+		 *            the list of ViewPanes to drop at the given position
+		 * @param position
+		 *            the tool item denoting the position
+		 */
         public ViewDropTarget(List panesToDrop, ToolItem position) {
             setTarget(panesToDrop, position);
         }
@@ -526,7 +528,7 @@ public class FastViewBar implements IWindowTrim {
             }
         }
 
-        if (page.isZoomed()) {
+        if (page != null && page.isZoomed()) {
             page.zoomOut();
         }
 
@@ -799,9 +801,6 @@ public class FastViewBar implements IWindowTrim {
         return horizontal;
     }
 
-    /**
-     * @param ref
-     */
     public int getViewSide(IViewReference ref) {
         boolean horizontal = isHorizontal(ref);
 
@@ -829,9 +828,11 @@ public class FastViewBar implements IWindowTrim {
     }
 
     /**
-     * Returns the approximate location where the next fastview icon
-     * will be drawn (display coordinates)
-     */
+	 * Returns the approximate location where the next fast view icon will be
+	 * drawn (display coordinates)
+	 * 
+	 * @return the rectangle
+	 */
     public Rectangle getLocationOfNextIcon() {
         ToolBar control = getToolBar();
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewDnDHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewDnDHandler.java
index f5e609b..dd4113a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewDnDHandler.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/FastViewDnDHandler.java	
@@ -14,7 +14,6 @@ package org.eclipse.ui.internal;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.util.Geometry;
 import org.eclipse.swt.SWT;
@@ -81,6 +80,9 @@ public class FastViewDnDHandler implements IDragOverListener {
          * @see org.eclipse.ui.internal.dnd.IDropTarget#drop()
          */
         public void drop() {
+			if (curItem == null)
+				return;
+
             Perspective persp = wbw.getActiveWorkbenchPage().getActivePerspective();
             FastViewManager fvm = persp.getFastViewManager();
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/HeapStatus.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/HeapStatus.java
index f5ef8f0..4778926 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/HeapStatus.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/HeapStatus.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@
 package org.eclipse.ui.internal;
 
 import java.lang.reflect.Method;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuListener;
@@ -27,7 +26,6 @@ import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Image;
@@ -49,6 +47,7 @@ public class HeapStatus extends Composite {
 
 	private boolean armed;
 	private Image gcImage;
+	private Image disabledGcImage;
 	private Color bgCol, usedMemCol, lowMemCol, freeMemCol, topLeftCol, bottomRightCol, sepCol, textCol, markCol, armCol;  
     private Canvas button;
 	private IPreferenceStore prefStore;
@@ -67,7 +66,9 @@ public class HeapStatus extends Composite {
 	private float lowMemThreshold = 0.05f;
 	private boolean showLowMemThreshold = true;
 	private boolean updateTooltip = false;
-	
+
+	protected volatile boolean isInGC = false;
+
     private final Runnable timer = new Runnable() {
         public void run() {
             if (!isDisposed()) {
@@ -119,11 +120,12 @@ public class HeapStatus extends Composite {
         button.setToolTipText(WorkbenchMessages.HeapStatus_buttonToolTip);
         
 		ImageDescriptor imageDesc = WorkbenchImages.getWorkbenchImageDescriptor("elcl16/trash.gif"); //$NON-NLS-1$
+		Display display = getDisplay();
 		gcImage = imageDesc.createImage();
 		if (gcImage != null) {
 			imgBounds = gcImage.getBounds();
+			disabledGcImage = new Image(display, gcImage, SWT.IMAGE_DISABLE);
 		}
-		Display display = getDisplay();
 		usedMemCol = display.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
 		lowMemCol = new Color(display, 255, 70, 70);  // medium red 
 		freeMemCol = new Color(display, 255, 190, 125);  // light orange
@@ -155,8 +157,10 @@ public class HeapStatus extends Composite {
                     break;
                 case SWT.MouseUp:
                     if (event.button == 1) {
-                        gc();
-                        arm(false);
+						if (!isInGC) {
+							arm(false);
+							gc(); 
+						}
                     }
                     break;
                 case SWT.MouseDown:
@@ -164,7 +168,8 @@ public class HeapStatus extends Composite {
 	                    if (event.widget == HeapStatus.this) {
 							setMark();
 						} else if (event.widget == button) {
-							arm(true);
+							if (!isInGC)
+								arm(true);
 						}
                     }
                     break;
@@ -234,6 +239,9 @@ public class HeapStatus extends Composite {
     	if (gcImage != null) {
 			gcImage.dispose();
 		}
+		if (disabledGcImage != null) {
+			disabledGcImage.dispose();
+		}
        
         if (lowMemCol != null) {
 			lowMemCol.dispose();
@@ -269,6 +277,15 @@ public class HeapStatus extends Composite {
         button.update();
     }
 
+	private void gcRunning(boolean isInGC) {
+		if (this.isInGC == isInGC) {
+			return;
+		}
+		this.isInGC = isInGC;
+		 button.redraw();
+		 button.update();
+	}
+
     /**
      * Creates the context menu
      */
@@ -314,26 +331,20 @@ public class HeapStatus extends Composite {
     }
     
     private void gc() {
-    	BusyIndicator.showWhile(getDisplay(), new Runnable() {
+		gcRunning(true);
+		Thread t = new Thread() {
 			public void run() {
-				Thread t = new Thread() {
+				busyGC();
+				getDisplay().asyncExec(new Runnable() {
 					public void run() {
-						busyGC();
-					}};
-				t.start();
-				while(t.isAlive()) {
-					try {
-						Display d = getDisplay();
-						while(d != null && !d.isDisposed() && d.readAndDispatch()) {
-							// loop
+						if (!isDisposed()) {
+							gcRunning(false);
 						}
-						t.join(10);
-					} catch (InterruptedException e) {
-						Thread.currentThread().interrupt();
 					}
-				}
+				});
 			}
-		});
+		};
+		t.start();
     }
 
     private void busyGC() {
@@ -345,7 +356,13 @@ public class HeapStatus extends Composite {
     
     private void paintButton(GC gc) {
         Rectangle rect = button.getClientArea();
-        
+		if (isInGC) {
+			if (disabledGcImage != null) {
+				int buttonY = (rect.height - imgBounds.height) / 2 + rect.y;
+				gc.drawImage(disabledGcImage, rect.x, buttonY);
+			}
+			return;
+		}
         if (armed) {
             gc.setBackground(armCol);
             gc.fillRectangle(rect.x, rect.y, rect.width, rect.height);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java
index b23d975..115a97a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -234,4 +234,17 @@ public interface IPreferenceConstants {
 	 */
 	public static final String USE_32_THREADING = "use32Threading"; //$NON-NLS-1$
 
+	/**
+	 * This preference is the threshold value to determine whether a document is
+	 * large or not. When the user tries to open a file larger than the
+	 * threshold, then EditorSelectionDialog will be opened, suggesting the user
+	 * to open with an external editor.
+	 * <p>
+	 * This preference is a <code>long</code> value that represents the
+	 * threshold in bytes. The default value is <code>0</code> meaning no
+	 * prompting on editor opening.
+	 * </p>
+	 * @since 3.7
+	 */
+	public static final String LARGE_DOC_SIZE_FOR_EDITORS = "LARGE_DOC_SIZE_FOR_EDITORS"; //$NON-NLS-1$
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IntroAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IntroAction.java
deleted file mode 100644
index ae1af1a..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IntroAction.java	
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Sebastian Davids <sdavids at gmx.de> - Fix for bug 95292 - [Intro] 
- *     		Help > Welcome missing F1 context
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.ui.IPageListener;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.internal.intro.IntroDescriptor;
-import org.eclipse.ui.internal.intro.IntroMessages;
-
-/**
- * Action that will launch the intro in the given window.
- * 
- * @since 3.0
- */
-public class IntroAction extends Action implements
-        ActionFactory.IWorkbenchAction {
-
-    private IWorkbenchWindow workbenchWindow;
-
-    private IPageListener pageListener = new IPageListener() {
-
-        public void pageActivated(IWorkbenchPage page) {
-            //no-op
-        }
-
-        public void pageClosed(IWorkbenchPage page) {
-            setEnabled(workbenchWindow.getPages().length > 0);
-        }
-
-        public void pageOpened(IWorkbenchPage page) {
-            setEnabled(true);
-        }
-    };
-
-    /**
-     * @param window the window to bind the action to. 
-     */
-    public IntroAction(IWorkbenchWindow window) {
-        super(IntroMessages.Intro_action_text); 
-        if (window == null) {
-            throw new IllegalArgumentException();
-        }
-        this.workbenchWindow = window;
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.INTRO_ACTION);
-        
-        IntroDescriptor introDescriptor = ((Workbench) workbenchWindow
-                .getWorkbench()).getIntroDescriptor();
-        String labelOverride = introDescriptor.getLabelOverride();
-        if (labelOverride != null)
-        	setText(labelOverride);
-        
-        setActionDefinitionId(IWorkbenchCommandConstants.HELP_WELCOME);
-        
-        window.addPageListener(pageListener);
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.actions.ActionFactory.IWorkbenchAction#dispose()
-     */
-    public void dispose() {
-        workbenchWindow.removePageListener(pageListener);
-        workbenchWindow = null;
-    }
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.action.Action#runWithEvent(org.eclipse.swt.widgets.Event)
-     */
-    public void runWithEvent(Event event) {        
-        IntroDescriptor introDescriptor = ((Workbench) workbenchWindow
-                .getWorkbench()).getIntroDescriptor();
-        if (introDescriptor == null) {
-            MessageDialog.openWarning(workbenchWindow.getShell(),
-                    IntroMessages.Intro_missing_product_title,
-                    IntroMessages.Intro_missing_product_message);
-        } else {
-			workbenchWindow.getWorkbench().getIntroManager().showIntro(
-                    workbenchWindow, false);
-		}
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.action.IAction#getImageDescriptor()
-     */
-    public ImageDescriptor getImageDescriptor() {
-        IntroDescriptor introDescriptor = ((Workbench) workbenchWindow
-                .getWorkbench()).getIntroDescriptor();
-        if (introDescriptor == null) {
-			return null;
-		}
-        return introDescriptor.getImageDescriptor();
-    }
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/JFaceUtil.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/JFaceUtil.java
index 6c6c15d..acdae9a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/JFaceUtil.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/JFaceUtil.java	
@@ -16,8 +16,8 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SafeRunner;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.jface.internal.InternalPolicy;
 import org.eclipse.jface.preference.JFacePreferences;
 import org.eclipse.jface.util.ILogger;
@@ -72,11 +72,12 @@ final class JFaceUtil {
 		});
 
 		// Get all debug options from Platform
-		if ("true".equalsIgnoreCase(Platform.getDebugOption("/debug"))) { //$NON-NLS-1$ //$NON-NLS-2$
+		if ("true".equalsIgnoreCase(Platform.getDebugOption(Policy.JFACE + "/debug"))) { //$NON-NLS-1$ //$NON-NLS-2$
 			Policy.DEBUG_DIALOG_NO_PARENT = "true".equalsIgnoreCase(Platform.getDebugOption(Policy.JFACE + "/debug/dialog/noparent")); //$NON-NLS-1$ //$NON-NLS-2$
 			Policy.TRACE_ACTIONS = "true".equalsIgnoreCase(Platform.getDebugOption(Policy.JFACE + "/trace/actions")); //$NON-NLS-1$ //$NON-NLS-2$
 			Policy.TRACE_TOOLBAR = "true".equalsIgnoreCase(Platform.getDebugOption(Policy.JFACE + "/trace/toolbarDisposal")); //$NON-NLS-1$ //$NON-NLS-2$
 			InternalPolicy.DEBUG_LOG_REENTRANT_VIEWER_CALLS = "true".equalsIgnoreCase(Platform.getDebugOption(Policy.JFACE + "/debug/viewers/reentrantViewerCalls")); //$NON-NLS-1$ //$NON-NLS-2$
+			InternalPolicy.DEBUG_LOG_EQUAL_VIEWER_ELEMENTS = "true".equalsIgnoreCase(Platform.getDebugOption(Policy.JFACE + "/debug/viewers/equalElements")); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/LockToolBarAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/LockToolBarAction.java
deleted file mode 100644
index a5be50d..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/LockToolBarAction.java	
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.actions.ActionFactory;
-
-/**
- * The <code>LockToolBarAction</code> is used to lock the toolbars for the
- * workbench.  The toolbar for all perspectives is locked.
- */
-public class LockToolBarAction extends Action implements
-        ActionFactory.IWorkbenchAction {
-
-    /**
-     * The workbench window; or <code>null</code> if this
-     * action has been <code>dispose</code>d.
-     */
-    private IWorkbenchWindow workbenchWindow;
-
-    /**
-     * Create a new instance of <code>LockToolBarAction</code>
-     * 
-     * @param window the workbench window this action applies to
-     */
-    public LockToolBarAction(IWorkbenchWindow window) {
-        super(WorkbenchMessages.LockToolBarAction_text);
-        if (window == null) {
-            throw new IllegalArgumentException();
-        }
-        this.workbenchWindow = window;
-        setActionDefinitionId("org.eclipse.ui.window.lockToolBar"); //$NON-NLS-1$
-        // @issue missing action id
-        setToolTipText(WorkbenchMessages.LockToolBarAction_toolTip);
-        setEnabled(true);
-        // queue the update for the checked state since this action is created 
-        // before the coolbar
-        window.getWorkbench().getDisplay().asyncExec(new Runnable() {
-            public void run() {
-				if (workbenchWindow instanceof WorkbenchWindow) {
-                    setChecked(((WorkbenchWindow) workbenchWindow)
-                            .isCoolBarLocked());
-                }
-            }
-        });
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.LOCK_TOOLBAR_ACTION);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on IAction.
-     */
-    public void run() {
-        if (workbenchWindow == null) {
-            // action has been disposed
-            return;
-        }
-        boolean locked = isChecked();
-        ((WorkbenchWindow) workbenchWindow).lockCoolBar(locked);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on ActionFactory.IWorkbenchAction.
-     */
-    public void dispose() {
-        workbenchWindow = null;
-    }
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/OpenPreferencesAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/OpenPreferencesAction.java
deleted file mode 100644
index d976a6c..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/OpenPreferencesAction.java	
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.dialogs.PreferencesUtil;
-
-/**
- * Open the preferences dialog
- */
-public class OpenPreferencesAction extends Action implements ActionFactory.IWorkbenchAction {
-
-	/**
-	 * The workbench window; or <code>null</code> if this
-	 * action has been <code>dispose</code>d.
-	 */
-	private IWorkbenchWindow workbenchWindow;
-
-	/**
-	 * Create a new <code>OpenPreferenceAction</code>
-	 * This default constructor allows the the action to be called from the welcome page.
-	 */
-	public OpenPreferencesAction() {
-		this(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
-	}
-
-	/**
-	 * Create a new <code>OpenPreferenceAction</code> and initialize it 
-	 * from the given resource bundle.
-	 * @param window
-	 */
-	public OpenPreferencesAction(IWorkbenchWindow window) {
-		super(WorkbenchMessages.OpenPreferences_text); 
-		if (window == null) {
-			throw new IllegalArgumentException();
-		}
-		this.workbenchWindow = window;
-		// @issue action id not set
-		setToolTipText(WorkbenchMessages.OpenPreferences_toolTip); 
-		window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.OPEN_PREFERENCES_ACTION);
-	}
-
-	/* (non-Javadoc)
-	 * Method declared on Action.
-	 */
-	public void run() {
-		if (workbenchWindow == null) {
-			// action has been dispose
-			return;
-		}
-		PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null, null, null, null);
-		dialog.open();
-	}
-
-	/* (non-Javadoc)
-	 * Method declared on ActionFactory.IWorkbenchAction.
-	 */
-	public void dispose() {
-		workbenchWindow = null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PageLayout.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PageLayout.java
index 62471b7..8ce5282 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PageLayout.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PageLayout.java	
@@ -22,7 +22,6 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.ui.IFolderLayout;
@@ -36,6 +35,7 @@ import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.internal.presentations.PresentationFactoryUtil;
 import org.eclipse.ui.internal.registry.ActionSetRegistry;
 import org.eclipse.ui.internal.registry.IActionSetDescriptor;
+import org.eclipse.ui.internal.registry.ViewRegistry;
 import org.eclipse.ui.views.IViewDescriptor;
 import org.eclipse.ui.views.IViewRegistry;
 
@@ -535,8 +535,19 @@ public class PageLayout implements IPageLayout {
         if (partID.equals(ID_EDITOR_AREA)) {
             return editorFolder;
         }
-		IViewDescriptor viewDescriptor = viewFactory.getViewRegistry()
-		        .find(ViewFactory.extractPrimaryId(partID));
+		IViewDescriptor viewDescriptor = null;
+
+		IViewRegistry viewRegistry = viewFactory.getViewRegistry();
+		String primaryId = ViewFactory.extractPrimaryId(partID);
+
+		if (viewRegistry instanceof ViewRegistry) {
+			viewDescriptor = ((ViewRegistry) viewRegistry).findInternal(primaryId);
+			if (viewDescriptor != null && WorkbenchActivityHelper.restrictUseOf(viewDescriptor)) {
+				return null;
+			}
+		} else {
+			viewDescriptor = viewRegistry.find(primaryId);
+		}
 		if (WorkbenchActivityHelper.filterItem(viewDescriptor)) {
 			return null;
 		}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PartStack.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PartStack.java
index 76fbb84..972da4f 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PartStack.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PartStack.java	
@@ -453,8 +453,6 @@ public abstract class PartStack extends LayoutPart implements ILayoutContainer {
 
         LayoutPart[] children = ((ILayoutContainer) this).getChildren();
 
-        int visibleChildren = 0;
-
         for (int idx = 0; idx < children.length; idx++) {
 
             LayoutPart next = children[idx];
@@ -468,8 +466,6 @@ public abstract class PartStack extends LayoutPart implements ILayoutContainer {
                 }
 
                 next.describeLayout(buf);
-
-                visibleChildren++;
             }
         }
 
@@ -834,16 +830,11 @@ public abstract class PartStack extends LayoutPart implements ILayoutContainer {
         // This method should only be called on objects that are already in the layout
         Assert.isNotNull(newPart);
 
-        if (newPart == requestedCurrent) {
-            return;
-        }
-
-        setSelection(newPart);
-
-        if (newPart != null) {
-            newPart.setFocus();
-        }
+		if (newPart != requestedCurrent) {
+			setSelection(newPart);
+		}
 
+		newPart.setFocus();
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveHelper.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveHelper.java
index 5e442be..3c5d25e 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveHelper.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveHelper.java	
@@ -20,7 +20,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Vector;
-
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.swt.SWT;
@@ -39,6 +38,7 @@ import org.eclipse.ui.internal.dnd.AbstractDropTarget;
 import org.eclipse.ui.internal.dnd.DragUtil;
 import org.eclipse.ui.internal.dnd.IDragOverListener;
 import org.eclipse.ui.internal.dnd.IDropTarget;
+import org.eclipse.ui.internal.misc.Policy;
 import org.eclipse.ui.internal.misc.StringMatcher;
 import org.eclipse.ui.presentations.IStackPresentationSite;
 
@@ -298,6 +298,9 @@ public class PerspectiveHelper {
         active = true;
     }
 
+	private String tmpViewId = null;
+	private Exception tmpStackTrace = null;
+
 	/**
      * Adds a part to the presentation. If a placeholder exists for the part
      * then swap the part in. Otherwise, add the part in the bottom right
@@ -371,6 +374,26 @@ public class PerspectiveHelper {
                         ContainerPlaceholder containerPlaceholder = (ContainerPlaceholder) container;                        
                         ILayoutContainer parentContainer = containerPlaceholder
                                 .getContainer();
+						if (parentContainer == null) {
+							if (Policy.DEBUG_PERSPECTIVES) {
+								WorkbenchPlugin.log(
+										"Previous ContainerPlaceholder for " + tmpViewId, //$NON-NLS-1$
+										tmpStackTrace);
+								tmpViewId = null;
+								tmpStackTrace = new Exception();
+								tmpStackTrace.fillInStackTrace();
+								WorkbenchPlugin.log(
+										"Current ContainerPlaceholder with null parent for " //$NON-NLS-1$
+												+ primaryId + ":" + secondaryId, tmpStackTrace); //$NON-NLS-1$
+								tmpStackTrace = null;
+							}
+							return;
+						}
+						if (Policy.DEBUG_PERSPECTIVES) {
+							tmpViewId = primaryId + ":" + secondaryId; //$NON-NLS-1$
+							tmpStackTrace = new Exception();
+							tmpStackTrace.fillInStackTrace();
+						}
                         container = (ILayoutContainer) containerPlaceholder
                                 .getRealContainer();
                         if (container instanceof LayoutPart) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java
index 38c1291..316acdd 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java	
@@ -16,7 +16,6 @@ package org.eclipse.ui.internal;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.StringTokenizer;
-
 import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.NotEnabledException;
@@ -24,6 +23,8 @@ import org.eclipse.core.commands.NotHandledException;
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
@@ -60,6 +61,7 @@ import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPreferenceConstants;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PerspectiveAdapter;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.internal.StartupThreading.StartupRunnable;
@@ -75,6 +77,7 @@ import org.eclipse.ui.internal.layout.LayoutUtil;
 import org.eclipse.ui.internal.layout.Row;
 import org.eclipse.ui.internal.util.PrefUtil;
 import org.eclipse.ui.presentations.PresentationUtil;
+import org.eclipse.ui.statushandlers.StatusManager;
 
 /**
  * A utility class to manage the perspective switcher.  At some point, it might be nice to
@@ -1158,14 +1161,27 @@ public class PerspectiveSwitcher implements IWindowTrim {
         window.getWorkbench().getHelpSystem().setHelp(saveasMenuItem,
         		IWorkbenchHelpContextIds.SAVE_PERSPECTIVE_ACTION);
         saveasMenuItem.addSelectionListener(new SelectionAdapter() {
-            public void widgetSelected(SelectionEvent e) {
-                if (perspectiveBar == null) {
+			public void widgetSelected(SelectionEvent event) {
+				if (perspectiveBar == null) {
 					return;
 				}
-                SavePerspectiveAction saveAction=new SavePerspectiveAction(window);
-                saveAction.setEnabled(true);
-                saveAction.run();
-            }
+				IHandlerService handlerService = (IHandlerService) window
+						.getService(IHandlerService.class);
+				IStatus status = Status.OK_STATUS;
+				try {
+					handlerService.executeCommand(
+							IWorkbenchCommandConstants.WINDOW_SAVE_PERSPECTIVE_AS, null);
+				} catch (ExecutionException e) {
+					status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, e.getMessage(), e);
+				} catch (NotDefinedException e) {
+					status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, e.getMessage(), e);
+				} catch (NotEnabledException e) {
+					status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, e.getMessage(), e);
+				} catch (NotHandledException e) {
+				}
+				if(!status.isOK())
+					StatusManager.getManager().handle(status, StatusManager.SHOW | StatusManager.LOG);
+			}
         });
     }
     
@@ -1175,14 +1191,28 @@ public class PerspectiveSwitcher implements IWindowTrim {
         window.getWorkbench().getHelpSystem().setHelp(resetMenuItem,
         		IWorkbenchHelpContextIds.RESET_PERSPECTIVE_ACTION);
         resetMenuItem.addSelectionListener(new SelectionAdapter() {
-            public void widgetSelected(SelectionEvent e) {
-                if (perspectiveBar == null) {
+			public void widgetSelected(SelectionEvent event) {
+				if (perspectiveBar == null) {
 					return;
 				}
-                ResetPerspectiveAction resetAction=new ResetPerspectiveAction(window);
-                resetAction.setEnabled(true);
-                resetAction.run();
-             }
+				IHandlerService handlerService = (IHandlerService) window
+						.getService(IHandlerService.class);
+				IStatus status = Status.OK_STATUS;
+				try {
+					handlerService.executeCommand(
+							IWorkbenchCommandConstants.WINDOW_RESET_PERSPECTIVE, null);
+				} catch (ExecutionException e) {
+					status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, e.getMessage(), e);
+				} catch (NotDefinedException e) {
+					status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, e.getMessage(), e);
+				} catch (NotEnabledException e) {
+					status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, e.getMessage(), e);
+				} catch (NotHandledException e) {
+				}
+				if (!status.isOK())
+					StatusManager.getManager().handle(status,
+							StatusManager.SHOW | StatusManager.LOG);
+			}
         });
     }
     
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java
index e063e77..fdd26bf 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/RectangleAnimation.java	
@@ -50,7 +50,6 @@ public class RectangleAnimation extends Job {
     
     // Control State
     private DefaultAnimationFeedback feedbackRenderer;
-    private long stepCount;
     private long frameCount;
     private long startTime;
     private long curTime;
@@ -88,8 +87,6 @@ public class RectangleAnimation extends Job {
 	            updateDisplay();
 	            frameCount++;
             }
-            
-            stepCount++;
         }
 
     };
@@ -135,7 +132,6 @@ public class RectangleAnimation extends Job {
         feedbackRenderer.initialize(parentShell, start, end);
         
         // Set the animation's initial state
-        stepCount = 0;
         //long totalFrames = (long) ((duration / 1000.0) * framesPerSec);       
         curTime = startTime = System.currentTimeMillis();
     }
@@ -244,7 +240,6 @@ public class RectangleAnimation extends Job {
             Thread.yield();
         }
 
-        //System.out.println("Done: " + (curTime-startTime) + " steps: " + stepCount + " frames:" + frameCount);   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
         // We're done, clean up
         display.syncExec(new Runnable() {
             public void run() {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ResetPerspectiveAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ResetPerspectiveAction.java
deleted file mode 100644
index 851a921..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ResetPerspectiveAction.java	
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.ui.IPerspectiveDescriptor;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * Reset the layout within the active perspective.
- */
-public class ResetPerspectiveAction extends PerspectiveAction {
-
-    /**
-     * This default constructor allows the the action to be called from the welcome page.
-     */
-    public ResetPerspectiveAction() {
-        this(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
-    }
-
-    /**
-     * Create an instance of this class
-     * @param window the window
-     */
-    public ResetPerspectiveAction(IWorkbenchWindow window) {
-        super(window);
-        setText(WorkbenchMessages.ResetPerspective_text);
-        setActionDefinitionId(IWorkbenchCommandConstants.WINDOW_RESET_PERSPECTIVE);
-        // @issue missing action id
-        setToolTipText(WorkbenchMessages.ResetPerspective_toolTip); 
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.RESET_PERSPECTIVE_ACTION);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PerspectiveAction.
-     */
-    protected void run(IWorkbenchPage page, IPerspectiveDescriptor persp) {
-        String message = NLS.bind(WorkbenchMessages.ResetPerspective_message, persp.getLabel() );
-        String[] buttons = new String[] { IDialogConstants.OK_LABEL,
-                IDialogConstants.CANCEL_LABEL };
-        MessageDialog d = new MessageDialog(getWindow().getShell(),
-                WorkbenchMessages.ResetPerspective_title,
-                null, message, MessageDialog.QUESTION, buttons, 0);
-        if (d.open() == 0) {
-			page.resetPerspective();
-		}
-    }
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAction.java
deleted file mode 100644
index 6e6ce41..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAction.java	
+++ /dev/null
@@ -1,116 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.ISaveablePart;
-import org.eclipse.ui.ISaveablesSource;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-
-/**
- * Workbench common <code>Save</code> action.
- */
-public class SaveAction extends BaseSaveAction implements IBackgroundSaveListener {
-
-    /**
-     * Create an instance of this class
-     * 
-     * @param window the window
-     */
-    public SaveAction(IWorkbenchWindow window) {
-        super(WorkbenchMessages.SaveAction_text, window); 
-        setText(WorkbenchMessages.SaveAction_text); 
-        setToolTipText(WorkbenchMessages.SaveAction_toolTip);
-        setId("save"); //$NON-NLS-1$
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.SAVE_ACTION);
-        setImageDescriptor(WorkbenchImages
-                .getImageDescriptor(ISharedImages.IMG_ETOOL_SAVE_EDIT));
-        setDisabledImageDescriptor(WorkbenchImages
-                .getImageDescriptor(ISharedImages.IMG_ETOOL_SAVE_EDIT_DISABLED));
-        setActionDefinitionId(IWorkbenchCommandConstants.FILE_SAVE); 
-        ((WorkbenchWindow)window).addBackgroundSaveListener(this);
-    }
-    
-    public void dispose() {
-    	((WorkbenchWindow)getWorkbenchWindow()).removeBackgroundSaveListener(this);
-    	super.dispose();
-    }
-
-    /* (non-Javadoc)
-     * Method declared on IAction.
-     * Performs the <code>Save</code> action by calling the
-     * <code>IEditorPart.doSave</code> method on the active editor.
-     */
-    public void run() {
-        if (getWorkbenchWindow() == null) {
-            // action has been disposed
-            return;
-        }
-        /* **********************************************************************************
-         * The code below was added to track the view with focus
-         * in order to support save actions from a view (see bug 10234). 
-         */
-        ISaveablePart saveView = getSaveableView();
-        if (saveView != null) {
-            ((WorkbenchPage) getActivePart().getSite().getPage()).savePart(
-                    saveView, getActivePart(), false);
-            return;
-        }
-
-        IEditorPart part = getActiveEditor();
-        if (part != null) {
-            IWorkbenchPage page = part.getSite().getPage();
-            page.saveEditor(part, false);
-        }
-    }
-
-	/* (non-Javadoc)
-     * Method declared on ActiveEditorAction.
-     */
-    protected void updateState() {
-        /* **********************************************************************************
-         * The code below was added to track the view with focus
-         * in order to support save actions from a view (see bug 10234). 
-         */
-        ISaveablePart saveable = getSaveableView();
-        if (saveable == null) {
-        	saveable = getActiveEditor();
-        }
-        /* **********************************************************************************/
-        if (saveable instanceof ISaveablesSource) {
-			ISaveablesSource modelSource = (ISaveablesSource) saveable;
-			setEnabled(SaveableHelper.needsSave(modelSource));
-			return;
-        }
-        setEnabled(saveable != null && saveable.isDirty());
-    }
-
-	public void handleBackgroundSaveStarted() {
-		updateState();
-	}
-
-	public void setEnabled(boolean enabled) {
-		super.setEnabled(enabled);
-		IWorkbenchWindow window = getWorkbenchWindow();
-		if (window != null) {
-			Shell shell = window.getShell();
-			if (shell != null && !shell.isDisposed()) {
-				shell.setModified(enabled);
-			}
-		}
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAllAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAllAction.java
deleted file mode 100644
index b0fc821..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAllAction.java	
+++ /dev/null
@@ -1,194 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.ISaveablePart;
-import org.eclipse.ui.ISaveablesLifecycleListener;
-import org.eclipse.ui.ISaveablesSource;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.Saveable;
-
-/**
- * Global action that saves all targets in the
- * workbench that implement ISaveTarget interface.
- * The action keeps track of opened save targets
- * and their 'save' state. If none of the currently
- * opened targets needs saving, it will disable.
- * This action is somewhat different from all
- * other global actions in that it works on
- * multiple targets at the same time i.e. it
- * does not disconnect from the target when it
- * becomes deactivated.
- */
-public class SaveAllAction extends PageEventAction implements IPropertyListener {
-    /**
-     * List of parts (element type: <code>IWorkbenchPart</code>)
-     * against which this class has outstanding property listeners registered.
-     */
-    private List partsWithListeners = new ArrayList(1);
-	private IWorkbenchPart openPart;
-
-    /**
-     * The default constructor.
-     * 
-     * @param window the window
-     */
-    public SaveAllAction(IWorkbenchWindow window) {
-        super(WorkbenchMessages.SaveAll_text, window);
-        setToolTipText(WorkbenchMessages.SaveAll_toolTip);
-        setId("saveAll"); //$NON-NLS-1$
-        setEnabled(false);
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.SAVE_ALL_ACTION);
-        setImageDescriptor(WorkbenchImages
-                .getImageDescriptor(ISharedImages.IMG_ETOOL_SAVEALL_EDIT));
-        setDisabledImageDescriptor(WorkbenchImages
-                .getImageDescriptor(ISharedImages.IMG_ETOOL_SAVEALL_EDIT_DISABLED));
-        setActionDefinitionId(IWorkbenchCommandConstants.FILE_SAVE_ALL);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void pageActivated(IWorkbenchPage page) {
-        super.pageActivated(page);
-        updateState();
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void pageClosed(IWorkbenchPage page) {
-        super.pageClosed(page);
-        updateState();
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partClosed(IWorkbenchPart part) {
-        super.partClosed(part);
-        if (part instanceof ISaveablePart) {
-            part.removePropertyListener(this);
-            partsWithListeners.remove(part);
-            updateState();
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PartEventAction.
-     */
-    public void partOpened(IWorkbenchPart part) {
-        super.partOpened(part);
-        if (part instanceof ISaveablePart) {
-            part.addPropertyListener(this);
-            partsWithListeners.add(part);
-			// We need to temporarily cache the opened part 
-			// because saveable views are not registered 
-			// with a perspective until after this method 
-			// is called.  We can't pass it through to
-			// update because it's protected. An async
-			// call to update may be a better approach.
-            // See bug 93784 [WorkbenchParts] View not yet added to perspective when partOpened sent
-			openPart = part;
-            updateState();
-			openPart = null;
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on IPropertyListener.
-     */
-    public void propertyChanged(Object source, int propID) {
-        if (source instanceof ISaveablePart) {
-            if (propID == ISaveablePart.PROP_DIRTY) {
-                updateState();
-            }
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on Action.
-     */
-    public void run() {
-        if (getWorkbenchWindow() == null) {
-            // action has been disposed
-            return;
-        }
-        WorkbenchPage page = (WorkbenchPage) getActivePage();
-        if (page != null) {
-        	// The second parameter is true to also save saveables from non-part
-			// sources, see bug 139004.
-            page.saveAllEditors(false, true);
-            updateState();
-        }
-    }
-
-    /**
-     * Updates availability depending on number of
-     * targets that need saving.
-     */
-    protected void updateState() {
-        // Workaround for bug 93784 [WorkbenchParts] View not yet added to perspective when partOpened sent
-		if (openPart != null && openPart.getSite().getPage().equals(getActivePage()) && ((ISaveablePart) openPart).isDirty()) {
-			setEnabled(true);
-		}
-		else {
-			WorkbenchPage page = (WorkbenchPage) getActivePage();
-			if (page == null) {
-				setEnabled(false);
-			} else {
-				if (page.getDirtyParts().length > 0) {
-					setEnabled(true);
-				} else {
-					// Since Save All also saves saveables from non-part sources,
-					// look if any such saveables exist and are dirty.
-					SaveablesList saveablesList = (SaveablesList) page
-							.getWorkbenchWindow().getWorkbench().getService(
-									ISaveablesLifecycleListener.class);
-					ISaveablesSource[] nonPartSources = saveablesList.getNonPartSources();
-					for (int i = 0; i < nonPartSources.length; i++) {
-						Saveable[] saveables = nonPartSources[i].getSaveables();
-						for (int j = 0; j < saveables.length; j++) {
-							if (saveables[j].isDirty()) {
-								setEnabled(true);
-								return;
-							}
-						}
-					}
-					setEnabled(false);
-				}
-			}
-		}
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PageEventAction.
-     */
-    public void dispose() {
-        super.dispose();
-        for (Iterator it = partsWithListeners.iterator(); it.hasNext();) {
-            IWorkbenchPart part = (IWorkbenchPart) it.next();
-            part.removePropertyListener(this);
-        }
-        partsWithListeners.clear();
-    }
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAsAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAsAction.java
deleted file mode 100644
index b9693cc..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveAsAction.java	
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.ISaveablePart;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchWindow;
-
-/**
- * Workbench common <code>Save As</code> action.
- */
-public class SaveAsAction extends BaseSaveAction {
-
-    /**
-     * Create an instance of this class
-     * 
-     * @param window the window
-     */
-    public SaveAsAction(IWorkbenchWindow window) {
-        super(WorkbenchMessages.SaveAs_text, window); 
-        setActionDefinitionId(IWorkbenchCommandConstants.FILE_SAVE_AS);
-        setText(WorkbenchMessages.SaveAs_text); 
-        setToolTipText(WorkbenchMessages.SaveAs_toolTip); 
-        setId("saveAs"); //$NON-NLS-1$
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.SAVE_AS_ACTION);
-        setImageDescriptor(WorkbenchImages
-                .getImageDescriptor(ISharedImages.IMG_ETOOL_SAVEAS_EDIT));
-        setDisabledImageDescriptor(WorkbenchImages
-                .getImageDescriptor(ISharedImages.IMG_ETOOL_SAVEAS_EDIT_DISABLED));
-    }
-
-    /* (non-Javadoc)
-     * Method declared on Action.
-     */
-    public void run() {
-        if (getWorkbenchWindow() == null) {
-            // action has been disposed
-            return;
-        }
-        /* **********************************************************************************
-         * The code below was added to track the view with focus
-         * in order to support save actions from a view (see bug 10234). 
-         */
-        ISaveablePart saveView = getSaveableView();
-        if (saveView != null) {
-            saveView.doSaveAs();
-            return;
-        }
-        /* **********************************************************************************/
-
-        IEditorPart editor = getActiveEditor();
-        if (editor != null) {
-            editor.doSaveAs();
-        }
-    }
-
-    /* (non-Javadoc)
-     * Method declared on ActiveEditorAction.
-     */
-    protected void updateState() {
-        /* **********************************************************************************
-         * The code below was added to track the view with focus
-         * in order to support save actions from a view (see bug 10234). 
-         */
-        ISaveablePart saveView = getSaveableView();
-        if (saveView != null) {
-            setEnabled(saveView.isSaveAsAllowed());
-            return;
-        }
-        /* **********************************************************************************/
-
-        IEditorPart editor = getActiveEditor();
-        setEnabled(editor != null && editor.isSaveAsAllowed());
-    }
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SavePerspectiveAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SavePerspectiveAction.java
deleted file mode 100644
index ea9e58c..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SavePerspectiveAction.java	
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.ui.IPerspectiveDescriptor;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.internal.dialogs.SavePerspectiveDialog;
-import org.eclipse.ui.internal.registry.PerspectiveDescriptor;
-import org.eclipse.ui.internal.registry.PerspectiveRegistry;
-
-/**
- * Action to save the layout of the active perspective.
- */
-public class SavePerspectiveAction extends PerspectiveAction {
-
-    /**
-     * Creates an instance of this class.
-     *
-     * @param window the workbench window in which this action appears
-     */
-    public SavePerspectiveAction(IWorkbenchWindow window) {
-        super(window);
-        setText(WorkbenchMessages.SavePerspective_text);
-        setActionDefinitionId(IWorkbenchCommandConstants.WINDOW_SAVE_PERSPECTIVE_AS);
-        // @issue missing action id
-        setToolTipText(WorkbenchMessages.SavePerspective_toolTip); 
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.SAVE_PERSPECTIVE_ACTION);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on PerspectiveAction.
-     */
-    protected void run(IWorkbenchPage page, IPerspectiveDescriptor persp) {
-        PerspectiveDescriptor desc = (PerspectiveDescriptor) persp;
-        if (desc != null) {
-            if (desc.isSingleton()) {
-                saveSingleton(page);
-            } else {
-                saveNonSingleton(page, desc);
-            }
-        }
-    }
-
-    /** 
-     * Save a singleton over itself.
-     */
-    private void saveSingleton(IWorkbenchPage page) {
-        String[] buttons = new String[] { IDialogConstants.OK_LABEL,
-                IDialogConstants.CANCEL_LABEL };
-        MessageDialog d = new MessageDialog(page.getWorkbenchWindow().getShell(),
-                WorkbenchMessages.SavePerspective_overwriteTitle,
-                null, WorkbenchMessages.SavePerspective_singletonQuestion,
-                MessageDialog.QUESTION, buttons, 0);
-        if (d.open() == 0) {
-            page.savePerspective();
-        }
-    }
-
-    /**
-     * Save a singleton over the user selection.
-     */
-    private void saveNonSingleton(IWorkbenchPage page, PerspectiveDescriptor oldDesc) {
-        // Get reg.
-        PerspectiveRegistry reg = (PerspectiveRegistry) WorkbenchPlugin
-                .getDefault().getPerspectiveRegistry();
-
-        // Get persp name.
-        SavePerspectiveDialog dlg = new SavePerspectiveDialog(page.getWorkbenchWindow()
-                .getShell(), reg);
-        // Look up the descriptor by id again to ensure it is still valid.
-        IPerspectiveDescriptor description = reg.findPerspectiveWithId(oldDesc.getId());
-        dlg.setInitialSelection(description);
-        if (dlg.open() != IDialogConstants.OK_ID) {
-            return;
-        }
-
-        // Create descriptor.
-        PerspectiveDescriptor newDesc = (PerspectiveDescriptor) dlg.getPersp();
-        if (newDesc == null) {
-            String name = dlg.getPerspName();
-            newDesc = reg.createPerspective(name,
-                    (PerspectiveDescriptor) description);
-            if (newDesc == null) {
-                MessageDialog.openError(dlg.getShell(), WorkbenchMessages.SavePerspective_errorTitle,
-                        WorkbenchMessages.SavePerspective_errorMessage); 
-                return;
-            }
-        }
-
-        // Save state.
-        page.savePerspectiveAs(newDesc);
-    }
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveablesList.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveablesList.java
index 4a95828..42d2e15 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveablesList.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/SaveablesList.java	
@@ -344,6 +344,11 @@ public class SaveablesList implements ISaveablesLifecycleListener {
 	 */
 	public Object preCloseParts(List partsToClose, boolean save,
 			final IWorkbenchWindow window) {
+		return preCloseParts(partsToClose, save, window, window);
+	}
+
+	public Object preCloseParts(List partsToClose, boolean save, IShellProvider shellProvider,
+			final IWorkbenchWindow window) {
 		// reference count (how many occurrences of a model will go away?)
 		PostCloseInfo postCloseInfo = new PostCloseInfo();
 		for (Iterator it = partsToClose.iterator(); it.hasNext();) {
@@ -380,7 +385,7 @@ public class SaveablesList implements ISaveablesLifecycleListener {
 		fillModelsClosing(postCloseInfo.modelsClosing,
 				postCloseInfo.modelsDecrementing);
 		if (save) {
-			boolean canceled = promptForSavingIfNecessary(window,
+			boolean canceled = promptForSavingIfNecessary(shellProvider, window,
 					postCloseInfo.modelsClosing, postCloseInfo.modelsDecrementing, true);
 			if (canceled) {
 				return null;
@@ -397,6 +402,12 @@ public class SaveablesList implements ISaveablesLifecycleListener {
 	 */
 	private boolean promptForSavingIfNecessary(final IWorkbenchWindow window,
 			Set modelsClosing, Map modelsDecrementing, boolean canCancel) {
+		return promptForSavingIfNecessary(window, window, modelsClosing, modelsDecrementing,
+				canCancel);
+	}
+
+	private boolean promptForSavingIfNecessary(IShellProvider shellProvider,
+			IWorkbenchWindow window, Set modelsClosing, Map modelsDecrementing, boolean canCancel) {
 		List modelsToOptionallySave = new ArrayList();
 		for (Iterator it = modelsDecrementing.keySet().iterator(); it.hasNext();) {
 			Saveable modelDecrementing = (Saveable) it.next();
@@ -405,8 +416,8 @@ public class SaveablesList implements ISaveablesLifecycleListener {
 			}
 		}
 		
-		boolean shouldCancel = modelsToOptionallySave.isEmpty() ? false : promptForSaving(modelsToOptionallySave,
-				window, window, canCancel, true);
+		boolean shouldCancel = modelsToOptionallySave.isEmpty() ? false : promptForSaving(
+				modelsToOptionallySave, shellProvider, window, canCancel, true);
 		
 		if (shouldCancel) {
 			return true;
@@ -419,8 +430,8 @@ public class SaveablesList implements ISaveablesLifecycleListener {
 				modelsToSave.add(modelClosing);
 			}
 		}
-		return modelsToSave.isEmpty() ? false : promptForSaving(modelsToSave,
-				window, window, canCancel, false);
+		return modelsToSave.isEmpty() ? false : promptForSaving(modelsToSave, shellProvider,
+				window, canCancel, false);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java
index ddd01ab..8ab67f7 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ShowViewMenu.java	
@@ -11,15 +11,14 @@
 
 package org.eclipse.ui.internal;
 
+import com.ibm.icu.text.Collator;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.IParameter;
@@ -39,6 +38,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.ui.IPluginContribution;
+import org.eclipse.ui.IViewReference;
 import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -53,23 +53,69 @@ import org.eclipse.ui.services.IServiceLocator;
 import org.eclipse.ui.views.IViewDescriptor;
 import org.eclipse.ui.views.IViewRegistry;
 
-import com.ibm.icu.text.Collator;
-
 /**
  * A <code>ShowViewMenu</code> is used to populate a menu manager with Show
  * View actions. The visible views are determined by user preference from the
  * Perspective Customize dialog.
  */
 public class ShowViewMenu extends ContributionItem {
-	/**
-	 * @deprecated As of 3.5, replaced by {@link IWorkbenchCommandConstants#VIEWS_SHOW_VIEW}
-	 */
-	public static final String SHOW_VIEW_ID= IWorkbenchCommandConstants.VIEWS_SHOW_VIEW;
-	/**
-	 * @deprecated As of 3.6, replaced by
-	 *             {@link IWorkbenchCommandConstants#VIEWS_SHOW_VIEW_PARM_ID}
-	 */
-	public static final String VIEW_ID_PARM = IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID;
+
+	static class Pair {
+		public final Object a;
+		public final Object b;
+		int hashCode = -1;
+
+		/**
+		 * @param a
+		 *            must not be <code>null</code>
+		 * @param b
+		 *            can be <code>null</code>
+		 */
+		public Pair(Object a, Object b) {
+			this.a = a;
+			this.b = b;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.lang.Object#hashCode()
+		 */
+		public int hashCode() {
+			if (hashCode == -1) {
+				final int prime = 31;
+				hashCode = 1;
+				hashCode = prime * hashCode + ((a == null) ? 0 : a.hashCode());
+				hashCode = prime * hashCode + ((b == null) ? 0 : b.hashCode());
+				if (hashCode == -1) {
+					hashCode = a.hashCode();
+				}
+			}
+			return hashCode;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see java.lang.Object#equals(java.lang.Object)
+		 */
+		public boolean equals(Object obj) {
+			if (this == obj) {
+				return true;
+			}
+			Pair p = (Pair) obj;
+			if (!a.equals(p.a)) {
+				return false;
+			}
+			if (b == p.b) {
+				return true;
+			}
+			if (b == null || p.b == null) {
+				return false;
+			}
+			return b.equals(p.b);
+		}
+	}
 
 	private IWorkbenchWindow window;
 
@@ -90,9 +136,6 @@ public class ShowViewMenu extends ContributionItem {
 
 	private Map actions = new HashMap(21);
 
-	// Maps pages to a list of opened views
-	private Map openedViews = new HashMap();
-
 	protected boolean dirty = true;
 
 	private IMenuListener menuListener = new IMenuListener() {
@@ -196,18 +239,18 @@ public class ShowViewMenu extends ContributionItem {
 		}
 
 		// Get visible actions.
-		List viewIds = Arrays.asList(page.getShowViewShortcuts());
+		List viewIds = getShortcuts(page);
 
 		// add all open views
 		viewIds = addOpenedViews(page, viewIds);
 
 		List actions = new ArrayList(viewIds.size());
 		for (Iterator i = viewIds.iterator(); i.hasNext();) {
-			String id = (String) i.next();
-			if (id.equals(IIntroConstants.INTRO_VIEW_ID)) {
+			Pair id = (Pair) i.next();
+			if (id.a.equals(IIntroConstants.INTRO_VIEW_ID)) {
 				continue;
 			}
-			CommandContributionItemParameter item = getItem(id);
+			CommandContributionItemParameter item = getItem((String) id.a, (String) id.b);
 			if (item != null) {
 				actions.add(item);
 			}
@@ -233,6 +276,15 @@ public class ShowViewMenu extends ContributionItem {
 		innerMgr.add(showDlgAction);
 	}
 
+	private List getShortcuts(IWorkbenchPage page) {
+		ArrayList list = new ArrayList();
+		String[] shortcuts = page.getShowViewShortcuts();
+		for (int i = 0; i < shortcuts.length; i++) {
+			list.add(new Pair(shortcuts[i], null));
+		}
+		return list;
+	}
+
 	static class PluginCCIP extends CommandContributionItemParameter implements
 			IPluginContribution {
 
@@ -266,7 +318,7 @@ public class ShowViewMenu extends ContributionItem {
 
 	}
 
-	private CommandContributionItemParameter getItem(String viewId) {
+	private CommandContributionItemParameter getItem(String viewId, String secondaryId) {
 		IViewRegistry reg = WorkbenchPlugin.getDefault().getViewRegistry();
 		IViewDescriptor desc = reg.find(viewId);
 		if (desc==null) {
@@ -281,12 +333,16 @@ public class ShowViewMenu extends ContributionItem {
 		parms.icon = desc.getImageDescriptor();
 		parms.parameters = new HashMap();
 
-		parms.parameters.put(VIEW_ID_PARM, viewId);
+		parms.parameters.put(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID, viewId);
 		if (makeFast) {
 			parms.parameters.put(
 					IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_FASTVIEW,
 					"true"); //$NON-NLS-1$
 		}
+		if (secondaryId != null) {
+			parms.parameters.put(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_SECONDARY_ID,
+					secondaryId);
+		}
 		return parms;
 	}
 
@@ -310,10 +366,10 @@ public class ShowViewMenu extends ContributionItem {
 	}
 
 	private ArrayList getParts(IWorkbenchPage page) {
-		ArrayList parts = (ArrayList) openedViews.get(page);
-		if (parts == null) {
-			parts = new ArrayList();
-			openedViews.put(page, parts);
+		ArrayList parts = new ArrayList();
+		IViewReference[] refs = page.getViewReferences();
+		for (int i = 0; i < refs.length; i++) {
+			parts.add(new Pair(refs[i].getId(), refs[i].getSecondaryId()));
 		}
 		return parts;
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewPane.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewPane.java
index df01139..99f88c2 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewPane.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewPane.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
 package org.eclipse.ui.internal;
 
 
+import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.internal.provisional.action.IToolBarManager2;
 import org.eclipse.jface.util.IPropertyChangeListener;
@@ -96,7 +97,16 @@ public class ViewPane extends PartPane {
         protected void update(boolean force, boolean recursive) {
             super.update(force, recursive);
 
-            boolean hasMenu = !isEmpty();
+			boolean hasMenu = false;
+			IContributionItem[] items = getItems();
+			for (int i = 0; i < items.length; i++) {
+				if (items[i].isVisible() && !items[i].isSeparator() && !items[i].isGroupMarker()) {
+		            // only show the menu if we have visible items that aren't separators or group markers
+					hasMenu = true;
+					break;
+				}
+			}
+
             if (hasMenu != hadViewMenu) {
                 hadViewMenu = hasMenu;
                 firePropertyChange(IPresentablePart.PROP_PANE_MENU);
@@ -170,6 +180,7 @@ public class ViewPane extends PartPane {
         // ISV toolbar.
         //			// 1GD0ISU: ITPUI:ALL - Dbl click on view tool cause zoom
         final Control isvToolBar = isvToolBarMgr.createControl2(parentControl.getParent());
+		isvToolBar.setVisible(false);
         
         isvToolBarMgr.addPropertyChangeListener(new ISVPropListener(isvToolBar));
         
@@ -401,19 +412,13 @@ public class ViewPane extends PartPane {
         return !page.isFixedLayout();
     }
 
-    /**
-     * Return if there should be a view menu at all.
-     * There is no view menu if there is no menu manager,
-     * no pull down button or if the receiver is an
-     * inactive fast view.
-     */
+	/**
+	 * Returns whether there should be a view menu or not. There should not be a
+	 * view menu if there is no menu manager or the manager itself has no
+	 * visible items that are not separators or group markers.
+	 */
     public boolean hasViewMenu() {
-
-        if (isvMenuMgr != null) {
-            return !isvMenuMgr.isEmpty();
-        }
-
-        return false;
+		return isvMenuMgr != null && hadViewMenu;
     }
 
     public void showViewMenu(Point location) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WWinPartService.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WWinPartService.java
index 98a495f..a5bfea3 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WWinPartService.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WWinPartService.java	
@@ -132,7 +132,7 @@ public class WWinPartService implements IPartService {
         }
         
 		partService.setActivePart(activeRef);
-        selectionService.setActivePart(activePart);
+		selectionService.setActivePart(activePart);
     }
 
     /*
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java
index d81199e..7479de7 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,6 +95,7 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.TaskBar;
 import org.eclipse.swt.widgets.TaskItem;
@@ -131,6 +132,7 @@ import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
 import org.eclipse.ui.commands.ICommandImageService;
 import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.commands.IWorkbenchCommandSupport;
+import org.eclipse.ui.contexts.IContextActivation;
 import org.eclipse.ui.contexts.IContextService;
 import org.eclipse.ui.contexts.IWorkbenchContextSupport;
 import org.eclipse.ui.handlers.IHandlerService;
@@ -189,6 +191,7 @@ import org.eclipse.ui.internal.util.Util;
 import org.eclipse.ui.intro.IIntroManager;
 import org.eclipse.ui.keys.IBindingService;
 import org.eclipse.ui.menus.IMenuService;
+import org.eclipse.ui.menus.MenuUtil;
 import org.eclipse.ui.model.IContributionService;
 import org.eclipse.ui.operations.IWorkbenchOperationSupport;
 import org.eclipse.ui.progress.IProgressService;
@@ -1436,6 +1439,9 @@ public final class Workbench extends EventManager implements IWorkbench {
 	 * (non-Javadoc) Method declared on IWorkbench.
 	 */
 	public int getWorkbenchWindowCount() {
+		if (windowManager == null) {
+			return 0;
+		}
 		return windowManager.getWindowCount();
 	}
 
@@ -1443,6 +1449,9 @@ public final class Workbench extends EventManager implements IWorkbench {
 	 * (non-Javadoc) Method declared on IWorkbench.
 	 */
 	public IWorkbenchWindow[] getWorkbenchWindows() {
+		if (windowManager == null) {
+			return new IWorkbenchWindow[0];
+		}
 		Window[] windows = windowManager.getWindows();
 		IWorkbenchWindow[] dwindows = new IWorkbenchWindow[windows.length];
 		System.arraycopy(windows, 0, dwindows, 0, windows.length);
@@ -1554,6 +1563,25 @@ public final class Workbench extends EventManager implements IWorkbench {
 			}
 		});
 
+		StartupThreading.runWithoutExceptions(new StartupRunnable() {
+
+			public void runWithException() {
+
+				activateWorkbenchContext();
+
+			}
+		});
+
+		StartupThreading.runWithoutExceptions(new StartupRunnable() {
+
+			public void runWithException() {
+
+				createApplicationMenu();
+			}
+		});
+
+
+
 		// attempt to restore a previous workbench state
 		try {
 			UIStats.start(UIStats.RESTORE_WORKBENCH, "Workbench"); //$NON-NLS-1$
@@ -1751,6 +1779,14 @@ public final class Workbench extends EventManager implements IWorkbench {
 						new SaveablesList());
 			}});
 		
+		StartupThreading.runWithoutExceptions(new StartupRunnable() {
+
+			public void runWithException() {
+				// side effect of getter is initializing
+				getProgressService();
+			}
+		});
+
 		/*
 		 * Phase 1 of the initialization of commands. When this phase completes,
 		 * all the services and managers will exist, and be accessible via the
@@ -1806,6 +1842,9 @@ public final class Workbench extends EventManager implements IWorkbench {
 		
 		bindingService[0].readRegistryAndPreferences(commandService[0]);
 		serviceLocator.registerService(IBindingService.class, bindingService[0]);
+		// there is a thin window where the filter is set but the service is not
+		// yet available
+		((BindingService) bindingService[0]).getKeyboard().getKeyDownFilter().setEnabled(true);
 
 		final CommandImageManager commandImageManager = new CommandImageManager();
 		final CommandImageService commandImageService = new CommandImageService(
@@ -2128,8 +2167,8 @@ public final class Workbench extends EventManager implements IWorkbench {
 				super.handleException(e);
 			}
 		});
-		// ensure at least one window was opened
-		if (result[0].isOK() && windowManager.getWindows().length == 0) {
+		// ensure at least one window was opened, only when appMenu isn't there
+		if (shouldReturnNoWindowError(result[0])) {
 			String msg = WorkbenchMessages.Workbench_noWindowsRestored;
 			result[0] = new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH,
 					IWorkbenchConfigurer.RESTORE_CODE_RESET, msg, null);
@@ -2137,6 +2176,23 @@ public final class Workbench extends EventManager implements IWorkbench {
 		return result[0];
 	}
 
+	private boolean shouldReturnNoWindowError(final IStatus result) {
+		
+		final boolean[] shouldReturn = new boolean[1];
+		// first check for the result & no of windows
+		shouldReturn[0] = result.isOK() && windowManager.getWindows().length == 0;
+		if (shouldReturn[0]) {
+			// if result is ok and there is no window, check for appMenu
+			display.syncExec(new Runnable() {
+				public void run() {
+					// return error if there is no appMenu
+					shouldReturn[0] = !hasAppMenu();
+				}
+			});
+		}
+		return shouldReturn[0];
+	}
+
 	/*
 	 * (non-Javadoc) Method declared on IWorkbench.
 	 */
@@ -2988,6 +3044,10 @@ public final class Workbench extends EventManager implements IWorkbench {
 
 		((GrabFocus) Tweaklets.get(GrabFocus.KEY)).dispose();
 		
+		deactivateWorkbenchContext();
+
+		disposeApplicationMenu();
+
 		// Bring down all of the services.
 		serviceLocator.dispose();
 
@@ -3009,6 +3069,7 @@ public final class Workbench extends EventManager implements IWorkbench {
 		}
 	}
 
+
 	/**
 	 * Cancels the early startup job, if it's still running.
 	 */
@@ -3709,6 +3770,9 @@ public final class Workbench extends EventManager implements IWorkbench {
 	 */
 	private MenuSourceProvider menuSourceProvider;
 
+	private IContextActivation workbenchContext;
+
+	private ApplicationMenuManager applicationMenuMgr;
 
 
 	/**
@@ -3816,4 +3880,47 @@ public final class Workbench extends EventManager implements IWorkbench {
 		};
 	}
 
+	private void createApplicationMenu() {
+
+		if (!hasAppMenu())
+			return;
+
+		applicationMenuMgr = new ApplicationMenuManager(getAppMenu());
+		IMenuService menuService = (IMenuService) serviceLocator.getService(IMenuService.class);
+		menuService.populateContributionManager(applicationMenuMgr, MenuUtil.WORKBENCH_MENU);
+		applicationMenuMgr.update(true);
+	}
+
+	private void disposeApplicationMenu() {
+
+		if (applicationMenuMgr == null)
+			return;
+		IMenuService menuService = (IMenuService) serviceLocator.getService(IMenuService.class);
+		menuService.releaseContributions(applicationMenuMgr);
+		applicationMenuMgr.dispose();
+	}
+
+	private void activateWorkbenchContext() {
+		IContextService contextService = (IContextService) serviceLocator
+				.getService(IContextService.class);
+		workbenchContext = contextService.activateContext(IContextService.CONTEXT_ID_WORKBENCH_MENU);
+	}
+
+	private void deactivateWorkbenchContext() {
+		if(workbenchContext == null)
+			return;
+		workbenchContext.getContextService().deactivateContext(workbenchContext);
+	}
+
+
+	public boolean hasAppMenu() {
+		if (getAppMenu() == null)
+			return false;
+		return !getWorkbenchConfigurer().getExitOnLastWindowClose();
+	}
+
+	private Menu getAppMenu() {
+		return getDisplay().getMenuBar();
+	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java
index 1c3e947..4bec539 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java	
@@ -246,6 +246,10 @@ public class WorkbenchMessages extends NLS {
 	public static String ResetPerspective_title;
 	public static String RevertPerspective_note;
 
+	public static String RevertPerspective_title;
+	public static String RevertPerspective_message;
+	public static String RevertPerspective_option;
+
 	public static String ClosePerspectiveAction_text;
 	public static String ClosePerspectiveAction_toolTip;
 	public static String CloseAllPerspectivesAction_text;
@@ -488,6 +492,7 @@ public class WorkbenchMessages extends NLS {
 
 	public static String FilteredPreferenceDialog_PreferenceSaveFailed;
 	public static String FilteredPreferenceDialog_Resize;
+	public static String FilteredPreferenceDialog_FilterToolTip;
 	
 	public static String FileExtension_fileTypeMessage;
 	public static String FileExtension_fileTypeLabel;
@@ -622,6 +627,7 @@ public class WorkbenchMessages extends NLS {
     public static String EditorManager_create_element_returned_null;
     public static String EditorManager_wrong_createElement_result;
     public static String EditorManager_backgroundSaveJobName;
+	public static String EditorManager_largeDocumentWarning;
     
 	public static String EditorPane_pinEditor;
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
index f649781..0791edf 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,8 @@ import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorDescriptor;
@@ -285,6 +287,78 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
 		return Platform.getExtensionRegistry().getExtensionPoint(PlatformUI.PLUGIN_ID, IWorkbenchRegistryConstants.PL_PERSPECTIVE_EXTENSIONS);
 	}
 
+	class MnemonicDisabler implements Listener {
+		private final Composite root;
+		private boolean enabled = false;
+
+		public MnemonicDisabler(Composite root) {
+			this.root = root;
+			root.getShell().addListener(SWT.Activate, this);
+			root.getShell().addListener(SWT.Deactivate, this);
+			root.addListener(SWT.Dispose, this);
+			root.getDisplay().addFilter(SWT.Traverse, this);
+		}
+
+		public void handleEvent(Event event) {
+			switch (event.type) {
+			case SWT.Activate:
+				enabled = true;
+				break;
+
+			case SWT.Dispose:
+				root.getDisplay().removeFilter(SWT.Traverse, this);
+				root.getShell().removeListener(SWT.Activate, this);
+				root.getShell().removeListener(SWT.Deactivate, this);
+			case SWT.Deactivate:
+				enabled = false;
+				break;
+
+			case SWT.Traverse:
+				if (!enabled) {
+					return;
+				}
+				handleTraverse(event);
+				break;
+			}
+		}
+
+		private void handleTraverse(Event event) {
+			if (event.detail != SWT.TRAVERSE_MNEMONIC || event.doit != true)
+				return;
+			Control candidate = (Control) event.widget;
+
+			// List of Controls which define the active part's "context".
+			List activeContexts = new ArrayList();
+			activeContexts.add(((PartSite) getActivePart().getSite()).getPane().getControl());
+			// $TODO need to also add the parts toolbar to the list
+
+			IWorkbenchPartReference allParts[] = getSortedParts();
+			List otherContexts = new ArrayList();
+			for (int i = 0; i < allParts.length; i++) {
+				IWorkbenchPartReference partReference = allParts[i];
+				IWorkbenchPart part = partReference.getPart(false);
+				if (part != null && isPartVisible(part))
+					otherContexts.add(((PartSite) part.getSite()).getPane().getControl());
+				// $TODO need to also add the toolbar's control for the part
+			}
+			otherContexts.removeAll(activeContexts);
+
+			// walk up the candidate's parent chain
+			while (candidate != null) {
+				if (activeContexts.contains(candidate))
+					return;
+				else if (otherContexts.contains(candidate)) {
+					event.doit = false;
+					return;
+				}
+				candidate = candidate.getParent();
+			}
+			// Candidate was not inside any context, so it is some global
+			// Control.
+		}
+
+	}
+
     /**
      * Manages editor contributions and action set part associations.
      */
@@ -1163,7 +1237,7 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
      */
     public boolean closeAllSavedEditors() {
         // get the Saved editors
-        IEditorReference editors[] = getEditorReferences();
+		IEditorReference editors[] = getAllEditorReferences();
         IEditorReference savedEditors[] = new IEditorReference[editors.length];
         int j = 0;
         for (int i = 0; i < editors.length; i++) {
@@ -1185,7 +1259,7 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
      * See IWorkbenchPage
      */
     public boolean closeAllEditors(boolean save) {
-        return closeEditors(getEditorReferences(), save);
+		return closeEditors(getAllEditorReferences(), save);
     }
 
     private void updateActivePart() {
@@ -1376,6 +1450,7 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
 	            IEditorReference ref = editorRefs[i];
 	            
 	            // Remove editor from the presentation
+				removedEditors.remove(ref);
                 editorPresentation.closeEditor(ref);
 	            
                 partRemoved((WorkbenchPartReference)ref);                
@@ -1650,6 +1725,7 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
 
 			public void runWithException() {
 				composite = new Composite(parent, SWT.NONE);
+				new MnemonicDisabler(composite);
 				composite.setVisible(false); // Make visible on activate.
 				// force the client composite to be layed out
 				parent.layout();
@@ -2116,6 +2192,12 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
         return editorPresentation.getEditors();
     }
 
+	public IEditorReference[] getAllEditorReferences() {
+		ArrayList allRefs = new ArrayList(removedEditors);
+		allRefs.addAll(Arrays.asList(editorPresentation.getEditors()));
+		return (IEditorReference[]) allRefs.toArray(new IEditorReference[allRefs.size()]);
+	}
+
     /**
      * Returns the docked views.
      */
@@ -3327,7 +3409,7 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
     /*
      * Saves the workbench part.
      */
-    protected boolean savePart(ISaveablePart saveable, IWorkbenchPart part,
+	public boolean savePart(ISaveablePart saveable, IWorkbenchPart part,
             boolean confirm) {
         // Do not certify part do allow editors inside a multipageeditor to
         // call this.
@@ -3484,6 +3566,23 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
         
         if (partBeingActivated != null) {
             if (partBeingActivated.getPart(false) != newPart) {
+            	// check if we're a nested editor reference
+				if (partBeingActivated instanceof EditorManager.InnerEditor) {
+					EditorReference outerEditor = (EditorReference) ((EditorManager.InnerEditor) partBeingActivated)
+							.getOuterEditor();
+					// get all the sibling references
+					IEditorReference[] children = outerEditor.getChildren();
+					if (children != null) {
+						for (int i = 0; i < children.length; i++) {
+							// there's a recursive activation request for a
+							// sibling reference, ignore it
+							if (children[i].getPart(false) == newPart) {
+								return;
+							}
+						}
+					}
+				}
+
                 WorkbenchPlugin.log(new RuntimeException(NLS.bind(
                         "WARNING: Prevented recursive attempt to activate part {0} while still in the middle of activating part {1}", //$NON-NLS-1$
                         getId(newPart), getId(partBeingActivated))));
@@ -4822,7 +4921,7 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
 	IWorkbenchPartReference[] getAllParts() {
 		ArrayList allParts = new ArrayList();
 		IViewReference[] views = viewFactory.getViews();
-		IEditorReference[] editors = getEditorReferences();
+		IEditorReference[] editors = getAllEditorReferences();
 
 		if (views.length > 0) {
 			allParts.addAll(Arrays.asList(views));
@@ -4830,9 +4929,6 @@ public class WorkbenchPage extends CompatibleWorkbenchPage implements
 		if (editors.length > 0) {
 			allParts.addAll(Arrays.asList(editors));
 		}
-		if (removedEditors.size() > 0) {
-			allParts.addAll(removedEditors);
-		}
 
 		return (IWorkbenchPartReference[]) allParts
 				.toArray(new IWorkbenchPartReference[allParts.size()]);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java
index f92f262..c751ad3 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPartReference.java	
@@ -16,7 +16,6 @@ import java.util.BitSet;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.ListenerList;
@@ -167,9 +166,10 @@ public abstract class WorkbenchPartReference implements IWorkbenchPartReference,
 
     private boolean queueEvents = false;
 
-    private static DisposeListener prematureDisposeListener = new DisposeListener() {
+	private DisposeListener prematureDisposeListener = new DisposeListener() {
         public void widgetDisposed(DisposeEvent e) {
-            WorkbenchPlugin.log(new RuntimeException("Widget disposed too early!")); //$NON-NLS-1$
+			WorkbenchPlugin.log(new RuntimeException("Widget disposed too early for part " //$NON-NLS-1$
+					+ getId()));
         }    
     };
     
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java
index 6085404..0c25a0a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Dina Sayed, dsayed at eg.ibm.com, IBM -  bug 303889
  *******************************************************************************/
 
 package org.eclipse.ui.internal;
@@ -936,6 +937,29 @@ public class WorkbenchPlugin extends AbstractUIPlugin {
 		return checkCommandLineLocale(); //Use the default value if there is nothing specified
 	}
 	
+    /**
+	 * Check whether the workbench messages are in a Bidi language. This method
+	 * will return <code>null</code> if it is unable to determine message
+	 * properties.
+	 */
+	private Boolean isBidiMessageText() {
+		// Check if the user installed the NLS packs for bidi
+		String message = WorkbenchMessages.Startup_Loading_Workbench;
+		if (message == null)
+			return null;
+
+		try {
+			// use qualified class name to avoid import statement
+			// and premature attempt to resolve class reference
+			boolean isBidi = com.ibm.icu.text.Bidi.requiresBidi(message.toCharArray(), 0,
+					message.length());
+			return new Boolean(isBidi);
+		} catch (NoClassDefFoundError e) {
+			// the ICU Base bundle used in place of ICU?
+			return null;
+		}
+	}
+
 	/**
 	 * Check to see if the command line parameter for -nl
 	 * has been set. If so imply the orientation from this 
@@ -953,21 +977,23 @@ public class WorkbenchPlugin extends AbstractUIPlugin {
 	 * @see SWT#RIGHT_TO_LEFT
 	 */
 	private int checkCommandLineLocale() {
-		
-		//Check if the user property is set. If not do not
-		//rely on the vm.
-		if(System.getProperty(NL_USER_PROPERTY) == null) {
-			return SWT.NONE;
-		}
-		
-		Locale locale = Locale.getDefault();
-		String lang = locale.getLanguage();
-
-		if ("iw".equals(lang) || "he".equals(lang) || "ar".equals(lang) ||  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				"fa".equals(lang) || "ur".equals(lang)) { //$NON-NLS-1$ //$NON-NLS-2$ 
-			return SWT.RIGHT_TO_LEFT;
+		// Check if the user property is set. If not, do not rely on the VM.
+		if (System.getProperty(NL_USER_PROPERTY) == null) {
+			Boolean needRTL = isBidiMessageText();
+			if (needRTL != null && needRTL.booleanValue())
+				return SWT.RIGHT_TO_LEFT;
+		} else {
+			String lang = Locale.getDefault().getLanguage();
+			boolean bidiLangauage = "iw".equals(lang) || "he".equals(lang) || "ar".equals(lang) || //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					"fa".equals(lang) || "ur".equals(lang); //$NON-NLS-1$ //$NON-NLS-2$
+			if (bidiLangauage) {
+				Boolean needRTL = isBidiMessageText();
+				if (needRTL == null)
+					return SWT.RIGHT_TO_LEFT;
+				if (needRTL.booleanValue())
+					return SWT.RIGHT_TO_LEFT;
+			}
 		}
-			
 		return SWT.NONE;
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
index 115bbde..56b91d2 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java	
@@ -20,7 +20,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.State;
 import org.eclipse.core.expressions.Expression;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.runtime.Assert;
@@ -93,6 +95,7 @@ import org.eclipse.ui.IPerspectiveDescriptor;
 import org.eclipse.ui.ISelectionService;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchPartReference;
@@ -103,10 +106,12 @@ import org.eclipse.ui.WorkbenchException;
 import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.WorkbenchAdvisor;
 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.contexts.IContextService;
 import org.eclipse.ui.contexts.IWorkbenchContextSupport;
 import org.eclipse.ui.handlers.IHandlerActivation;
 import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.handlers.RegistryToggleState;
 import org.eclipse.ui.internal.StartupThreading.StartupRunnable;
 import org.eclipse.ui.internal.actions.CommandAction;
 import org.eclipse.ui.internal.dialogs.CustomizePerspectiveDialog;
@@ -717,17 +722,8 @@ public class WorkbenchWindow extends ApplicationWindow implements
 		updateDisabled = true;
 
 		try {
-			// Only do the check if it is OK to close if we are not closing
-			// via the workbench as the workbench will check this itself.
 			Workbench workbench = getWorkbenchImpl();
-			int count = workbench.getWorkbenchWindowCount();
-			// also check for starting - if the first window dies on startup
-			// then we'll need to open a default window.
-			if (!workbench.isStarting()
-					&& !workbench.isClosing()
-					&& count <= 1
-					&& workbench.getWorkbenchConfigurer()
-							.getExitOnLastWindowClose()) {
+			if (shouldCloseWorkbench(workbench)) {
 				windowClosed = workbench.close();
 			} else {
 				if (okToClose()) {
@@ -750,6 +746,38 @@ public class WorkbenchWindow extends ApplicationWindow implements
 	}
 
 	/**
+	 * 
+	 * Checks and returns whether we should close the workbench when closing
+	 * this window
+	 * 
+	 * @param workbench
+	 * @return <code>true</code>, if the workbench needs to be closed,
+	 *         <code>false</code> otherwise
+	 */
+	private boolean shouldCloseWorkbench(Workbench workbench) {
+
+		// also check for starting - if the first window dies on startup
+		// then we'll need to open a default window.
+
+		if (workbench.isStarting())
+			return false;
+
+		// Only do the check if it is OK to close if we are not closing
+		// via the workbench as the workbench will check this itself.
+		if (workbench.isClosing())
+			return false;
+		
+		int count = workbench.getWorkbenchWindowCount();
+
+		// we have more windows apart from this. Dont' close workbench
+		if(count >1 ) 
+			return false;
+
+		// now do whatever the workbenchconfigurer says ...
+		return workbench.getWorkbenchConfigurer().getExitOnLastWindowClose();
+	}
+
+	/**
 	 * Opens a new page. Assumes that busy cursor is active.
 	 * <p>
 	 * <b>Note:</b> Since release 2.0, a window is limited to contain at most
@@ -840,14 +868,6 @@ public class WorkbenchWindow extends ApplicationWindow implements
 	}
 
 	/**
-	 * Return whether or not the coolbar layout is locked.
-	 */
-	protected boolean isCoolBarLocked() {
-        ICoolBarManager cbm = getCoolBarManager2(); 
-		return cbm != null && cbm.getLockLayout();
-	}
-
-	/**
 	 * Close all of the pages.
 	 */
 	private void closeAllPages() {
@@ -1770,17 +1790,6 @@ public class WorkbenchWindow extends ApplicationWindow implements
 	}
 
 	/**
-	 * Locks/unlocks the CoolBar for the workbench.
-	 * 
-	 * @param lock
-	 *            whether the CoolBar should be locked or unlocked
-	 */
-	/* package */
-	void lockCoolBar(boolean lock) {
-        getCoolBarManager2().setLockLayout(lock);
-	}
-
-	/**
 	 * Makes the window visible and frontmost.
 	 */
 	void makeVisible() {
@@ -1974,20 +1983,11 @@ public class WorkbenchWindow extends ApplicationWindow implements
         if (coolBarMgr != null) {
 			IMemento coolBarMem = memento
 					.getChild(IWorkbenchConstants.TAG_COOLBAR_LAYOUT);
+
 			if (coolBarMem != null) {
-				// Check if the layout is locked
-				final Integer lockedInt = coolBarMem
-						.getInteger(IWorkbenchConstants.TAG_LOCKED);
-				StartupThreading.runWithoutExceptions(new StartupRunnable(){
 
-					public void runWithException() {
-						if ((lockedInt != null) && (lockedInt.intValue() == 1)) {
-							coolBarMgr.setLockLayout(true);
-						} else {
-							coolBarMgr.setLockLayout(false);
-						}
-					}});
-				
+				restoreCoolBarLocked(coolBarMgr, coolBarMem);
+
 				// The new layout of the cool bar manager
 				ArrayList coolBarLayout = new ArrayList();
 				// Traverse through all the cool item in the memento
@@ -2322,6 +2322,42 @@ public class WorkbenchWindow extends ApplicationWindow implements
 	}
 
 	/**
+	 * Restores the locked state of coolbar.
+	 * 
+	 * The state is first looked in the memento. If its not available in there,
+	 * then its taken from the command's state
+	 * 
+	 * @param coolBarMgr
+	 * @param memento
+	 */
+	private void restoreCoolBarLocked(final ICoolBarManager2 coolBarMgr, IMemento memento) {
+
+		// Check if the layout is locked
+		final boolean locked[] = new boolean[] { false };
+
+		Integer lockedInt = memento.getInteger(IWorkbenchConstants.TAG_LOCKED);
+		
+		if (lockedInt != null) {
+			// saved by 3.6 or earlier
+			locked[0] = lockedInt.intValue() == 1;
+		} else {
+			// saved by 3.7 or later, get it from command state
+			ICommandService service = (ICommandService) getService(ICommandService.class);
+			Command command = service.getCommand(IWorkbenchCommandConstants.WINDOW_LOCK_TOOLBAR);
+			State state = command.getState(RegistryToggleState.STATE_ID);
+			if (state != null && state.getValue() instanceof Boolean) {
+				locked[0] = ((Boolean) state.getValue()).booleanValue();
+			}
+		}
+		StartupThreading.runWithoutExceptions(new StartupRunnable(){
+
+			public void runWithException() {
+				coolBarMgr.setLockLayout(locked[0]);
+			}
+		});
+	}
+
+	/**
 	 * Restores cool item order from an old workbench.
 	 */
 	private boolean restoreOldCoolBar(IMemento coolbarMem) {
@@ -2691,11 +2727,6 @@ public class WorkbenchWindow extends ApplicationWindow implements
         	coolBarMgr.refresh();
 			IMemento coolBarMem = memento
 					.createChild(IWorkbenchConstants.TAG_COOLBAR_LAYOUT);
-            if (coolBarMgr.getLockLayout() == true) {
-				coolBarMem.putInteger(IWorkbenchConstants.TAG_LOCKED, 1);
-			} else {
-				coolBarMem.putInteger(IWorkbenchConstants.TAG_LOCKED, 0);
-			}
             IContributionItem[] items = coolBarMgr.getItems();
 			for (int i = 0; i < items.length; i++) {
 				IMemento coolItemMem = coolBarMem
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkingSetManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkingSetManager.java
index 6886913..214b5e8 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkingSetManager.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkingSetManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Tasktop Technologies - fix for bug 327396
  *******************************************************************************/
 package org.eclipse.ui.internal;
 
@@ -43,6 +44,10 @@ public class WorkingSetManager extends AbstractWorkingSetManager implements
 	// Working set persistence
 	public static final String WORKING_SET_STATE_FILENAME = "workingsets.xml"; //$NON-NLS-1$
 
+	private boolean restoreInProgress;
+
+	private boolean savePending;
+
 	public WorkingSetManager(BundleContext context) {
 		super(context);
 	}
@@ -101,6 +106,8 @@ public class WorkingSetManager extends AbstractWorkingSetManager implements
 
 		if (stateFile != null && stateFile.exists()) {
 			try {
+				restoreInProgress = true;
+
 				FileInputStream input = new FileInputStream(stateFile);
 				BufferedReader reader = new BufferedReader(
 						new InputStreamReader(input, "utf-8")); //$NON-NLS-1$
@@ -119,6 +126,13 @@ public class WorkingSetManager extends AbstractWorkingSetManager implements
 						e,
 						WorkbenchMessages.ProblemRestoringWorkingSetState_title,
 						WorkbenchMessages.ProblemRestoringWorkingSetState_message);
+			} finally {
+				restoreInProgress = false;
+			}
+
+			if (savePending) {
+				saveState();
+				savePending = false;
 			}
 		}
 	}
@@ -127,6 +141,11 @@ public class WorkingSetManager extends AbstractWorkingSetManager implements
 	 * Saves the working sets in the persistence store
 	 */
 	private void saveState() {
+		if (restoreInProgress) {
+			// bug 327396: avoid saving partial state
+			savePending = true;
+			return;
+		}
 
 		File stateFile = getWorkingSetStateFile();
 		if (stateFile == null) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/DynamicHelpAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/DynamicHelpAction.java
deleted file mode 100644
index 5ba231d..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/DynamicHelpAction.java	
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPreferenceConstants;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
-import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
-import org.eclipse.ui.internal.WorkbenchMessages;
-import org.eclipse.ui.internal.util.PrefUtil;
-
-/**
- * Action to open the dynamic help.
- * 
- * @since 3.1
- */
-public class DynamicHelpAction extends Action implements IWorkbenchAction {
-	/**
-	 * The workbench window; or <code>null</code> if this action has been
-	 * <code>dispose</code>d.
-	 */
-	private IWorkbenchWindow workbenchWindow;
-
-	/**
-	 * Zero-arg constructor to allow cheat sheets to reuse this action.
-	 */
-	public DynamicHelpAction() {
-		this(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
-	}
-
-	/**
-	 * Constructor for use by ActionFactory.
-	 * 
-	 * @param window
-	 *            the window
-	 */
-	public DynamicHelpAction(IWorkbenchWindow window) {
-		if (window == null) {
-			throw new IllegalArgumentException();
-		}
-		this.workbenchWindow = window;
-		setActionDefinitionId(IWorkbenchCommandConstants.HELP_DYNAMIC_HELP);
-
-		// support for allowing a product to override the text for the action
-		String overrideText = PrefUtil.getAPIPreferenceStore().getString(
-				IWorkbenchPreferenceConstants.DYNAMIC_HELP_ACTION_TEXT);
-		if ("".equals(overrideText)) { //$NON-NLS-1$
-			setText(appendAccelerator(WorkbenchMessages.DynamicHelpAction_text));
-			setToolTipText(WorkbenchMessages.DynamicHelpAction_toolTip);
-		} else {
-			setText(appendAccelerator(overrideText));
-			setToolTipText(Action.removeMnemonics(overrideText));
-		}
-		window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.DYNAMIC_HELP_ACTION);
-	}
-
-	private String appendAccelerator(String text) {
-		// We know that on Windows context help key is F1
-		// and cannot be changed by the user.
-		//
-		// Commented out due to the problem described in
-		// Bugzilla bug #95057
-	
-		//if (Platform.getWS().equals(Platform.WS_WIN32))
-		//	return text + "\t" + KeyStroke.getInstance(SWT.F1).format(); //$NON-NLS-1$
-		return text;
-	}
-
-	/*
-	 * (non-Javadoc) Method declared on IAction.
-	 */
-	public void run() {
-		if (workbenchWindow == null) {
-			// action has been disposed
-			return;
-		}
-		// This may take a while, so use the busy indicator
-		BusyIndicator.showWhile(null, new Runnable() {
-			public void run() {
-				workbenchWindow.getWorkbench().getHelpSystem()
-						.displayDynamicHelp();
-			}
-		});
-	}
-
-	/*
-	 * (non-Javadoc) Method declared on ActionFactory.IWorkbenchAction.
-	 */
-	public void dispose() {
-		workbenchWindow = null;
-	}
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/HelpContentsAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/HelpContentsAction.java
deleted file mode 100644
index 6f07081..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/HelpContentsAction.java	
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPreferenceConstants;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
-import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
-import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
-import org.eclipse.ui.internal.WorkbenchImages;
-import org.eclipse.ui.internal.WorkbenchMessages;
-import org.eclipse.ui.internal.util.PrefUtil;
-
-/**
- * Action to open the help contents.
- * 
- * @since 3.0
- */
-public class HelpContentsAction extends Action implements IWorkbenchAction {
-    /**
-     * The workbench window; or <code>null</code> if this
-     * action has been <code>dispose</code>d.
-     */
-    private IWorkbenchWindow workbenchWindow;
-
-    /**
-     * Zero-arg constructor to allow cheat sheets to reuse this action.
-     */
-    public HelpContentsAction() {
-        this(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
-    }
-
-    /**
-     * Constructor for use by ActionFactory.
-     * 
-     * @param window the window
-     */
-    public HelpContentsAction(IWorkbenchWindow window) {
-        if (window == null) {
-            throw new IllegalArgumentException();
-        }
-        this.workbenchWindow = window;
-        setActionDefinitionId(IWorkbenchCommandConstants.HELP_HELP_CONTENTS);
-
-        // support for allowing a product to override the text for the action
-        String overrideText = PrefUtil.getAPIPreferenceStore().getString(
-                IWorkbenchPreferenceConstants.HELP_CONTENTS_ACTION_TEXT);
-        if ("".equals(overrideText)) { //$NON-NLS-1$
-            setText(WorkbenchMessages.HelpContentsAction_text);
-            setToolTipText(WorkbenchMessages.HelpContentsAction_toolTip);
-        } else {
-            setText(overrideText);
-            setToolTipText(Action.removeMnemonics(overrideText));
-        }
-        setImageDescriptor(WorkbenchImages
-                .getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_HELP_CONTENTS));
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.HELP_CONTENTS_ACTION);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on IAction.
-     */
-    public void run() {
-        if (workbenchWindow == null) {
-            // action has been disposed
-            return;
-        }
-        //This may take a while, so use the busy indicator
-        BusyIndicator.showWhile(null, new Runnable() {
-            public void run() {
-            	workbenchWindow.getWorkbench().getHelpSystem().displayHelp();
-            }
-        });
-    }
-
-    /* (non-Javadoc)
-     * Method declared on ActionFactory.IWorkbenchAction.
-     */
-    public void dispose() {
-        workbenchWindow = null;
-    }
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/HelpSearchAction.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/HelpSearchAction.java
deleted file mode 100644
index 7b4f77c..0000000
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/actions/HelpSearchAction.java	
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ui.internal.actions;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.IWorkbenchPreferenceConstants;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
-import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
-import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
-import org.eclipse.ui.internal.WorkbenchImages;
-import org.eclipse.ui.internal.WorkbenchMessages;
-import org.eclipse.ui.internal.util.PrefUtil;
-
-/**
- * Action to open the help search.
- * 
- * @since 3.1
- */
-public class HelpSearchAction extends Action implements IWorkbenchAction {
-    /**
-     * The workbench window; or <code>null</code> if this
-     * action has been <code>dispose</code>d.
-     */
-    private IWorkbenchWindow workbenchWindow;
-
-    /**
-     * Zero-arg constructor to allow cheat sheets to reuse this action.
-     */
-    public HelpSearchAction() {
-        this(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
-    }
-
-    /**
-     * Constructor for use by ActionFactory.
-     * 
-     * @param window the window
-     */
-    public HelpSearchAction(IWorkbenchWindow window) {
-        if (window == null) {
-            throw new IllegalArgumentException();
-        }
-        this.workbenchWindow = window;
-        setActionDefinitionId(IWorkbenchCommandConstants.HELP_HELP_SEARCH);
-
-        // support for allowing a product to override the text for the action
-        String overrideText = PrefUtil.getAPIPreferenceStore().getString(
-                IWorkbenchPreferenceConstants.HELP_SEARCH_ACTION_TEXT);
-        if ("".equals(overrideText)) { //$NON-NLS-1$
-            setText(WorkbenchMessages.HelpSearchAction_text); 
-            setToolTipText(WorkbenchMessages.HelpSearchAction_toolTip);
-        } else {
-            setText(overrideText);
-            setToolTipText(Action.removeMnemonics(overrideText));
-        }
-        setImageDescriptor(WorkbenchImages
-                .getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_HELP_SEARCH));
-        window.getWorkbench().getHelpSystem().setHelp(this,
-				IWorkbenchHelpContextIds.HELP_SEARCH_ACTION);
-    }
-
-    /* (non-Javadoc)
-     * Method declared on IAction.
-     */
-    public void run() {
-        if (workbenchWindow == null) {
-            // action has been disposed
-            return;
-        }
-        //This may take a while, so use the busy indicator
-        BusyIndicator.showWhile(null, new Runnable() {
-            public void run() {
-            	workbenchWindow.getWorkbench().getHelpSystem().displaySearch();
-            }
-        });
-    }
-
-    /* (non-Javadoc)
-     * Method declared on ActionFactory.IWorkbenchAction.
-     */
-    public void dispose() {
-        workbenchWindow = null;
-    }
-
-}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java
index d2ee997..4cb554c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/ExtensionActivityRegistry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 
 package org.eclipse.ui.internal.activities;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
@@ -22,19 +23,24 @@ import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IExtensionDelta;
 import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IRegistryChangeEvent;
 import org.eclipse.core.runtime.IRegistryChangeListener;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
 import org.eclipse.ui.internal.util.ConfigurationElementMemento;
-import org.eclipse.ui.progress.WorkbenchJob;
 import org.eclipse.ui.statushandlers.StatusManager;
 
 final class ExtensionActivityRegistry extends AbstractActivityRegistry {
+
+	/**
+	 * Prefix for all activity preferences
+	 */
+	private final static String PREFIX = "UIActivities."; //$NON-NLS-1$    
+
     private List activityRequirementBindingDefinitions;
 
     private List activityDefinitions;
@@ -49,33 +55,35 @@ final class ExtensionActivityRegistry extends AbstractActivityRegistry {
 
     private IExtensionRegistry extensionRegistry;
 
-	ExtensionActivityRegistry(IExtensionRegistry extensionRegistry) {
-		if (extensionRegistry == null) {
+    ExtensionActivityRegistry(IExtensionRegistry extensionRegistry) {
+        if (extensionRegistry == null) {
 			throw new NullPointerException();
 		}
 
-		this.extensionRegistry = extensionRegistry;
-
-		this.extensionRegistry.addRegistryChangeListener(new IRegistryChangeListener() {
-			public void registryChanged(IRegistryChangeEvent registryChangeEvent) {
-				IExtensionDelta[] extensionDeltas = registryChangeEvent.getExtensionDeltas(
-						Persistence.PACKAGE_PREFIX, Persistence.PACKAGE_BASE);
-
-				if (extensionDeltas.length != 0) {
-					WorkbenchJob job = new WorkbenchJob("Reloading Activity Registry") { //$NON-NLS-1$
-						public IStatus runInUIThread(IProgressMonitor monitor) {
-							load();
-							return Status.OK_STATUS;
+        this.extensionRegistry = extensionRegistry;
+
+        this.extensionRegistry
+                .addRegistryChangeListener(new IRegistryChangeListener() {
+                    public void registryChanged(
+                            IRegistryChangeEvent registryChangeEvent) {
+                        IExtensionDelta[] extensionDeltas = registryChangeEvent
+                                .getExtensionDeltas(Persistence.PACKAGE_PREFIX,
+                                        Persistence.PACKAGE_BASE);
+
+                        if (extensionDeltas.length != 0) {
+							try {
+                                load();
+                            } catch (IOException eIO) {
+                            }
 						}
-					};
-					job.setSystem(true);
-					job.schedule();
-				}
-			}
-		});
-		load();
+                    }
+                });
 
-	}
+        try {
+            load();
+        } catch (IOException eIO) {
+        }
+    }
 
     private String getNamespace(IConfigurationElement configurationElement) {
         String namespace = null;
@@ -109,7 +117,7 @@ final class ExtensionActivityRegistry extends AbstractActivityRegistry {
 		return null;
 	}
 
-    private void load()  {
+    private void load() throws IOException {
         if (activityRequirementBindingDefinitions == null) {
 			activityRequirementBindingDefinitions = new ArrayList();
 		} else {
@@ -168,6 +176,22 @@ final class ExtensionActivityRegistry extends AbstractActivityRegistry {
 			}
         }
                 
+		// merge enablement overrides from plugin_customization.ini
+		IPreferenceStore store = WorkbenchPlugin.getDefault().getPreferenceStore();
+		for (Iterator i = activityDefinitions.iterator(); i.hasNext();) {
+			ActivityDefinition activityDef = (ActivityDefinition) i.next();
+			String id = activityDef.getId();
+			String preferenceKey = createPreferenceKey(id);
+			if ("".equals(store.getDefaultString(preferenceKey))) //$NON-NLS-1$
+				continue;
+			if (store.getDefaultBoolean(preferenceKey)) {
+				if (!defaultEnabledActivities.contains(id) && activityDef.getEnabledWhen() == null)
+					defaultEnabledActivities.add(id);
+			} else {
+				defaultEnabledActivities.remove(id);
+			}
+		}
+
         // Removal of all defaultEnabledActivites which target to expression
         // controlled activities.
 		for (int i = 0; i < defaultEnabledActivities.size();) {
@@ -265,6 +289,17 @@ final class ExtensionActivityRegistry extends AbstractActivityRegistry {
 		}
     }
 
+	/**
+	 * Create the preference key for the activity.
+	 * 
+	 * @param activityId
+	 *            the activity id.
+	 * @return String a preference key representing the activity.
+	 */
+	private String createPreferenceKey(String activityId) {
+		return PREFIX + activityId;
+	}
+
     private void readDefaultEnablement(
             IConfigurationElement configurationElement) {
         String enabledActivity = Persistence
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java
index 3728443..f306dd5 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/MutableActivityManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,6 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.activities.ActivityEvent;
 import org.eclipse.ui.activities.ActivityManagerEvent;
@@ -45,12 +44,9 @@ import org.eclipse.ui.activities.IIdentifier;
 import org.eclipse.ui.activities.IMutableActivityManager;
 import org.eclipse.ui.activities.ITriggerPointAdvisor;
 import org.eclipse.ui.activities.IdentifierEvent;
-import org.eclipse.ui.internal.WorkbenchPlugin;
-import org.eclipse.ui.internal.misc.Policy;
 import org.eclipse.ui.progress.UIJob;
 import org.eclipse.ui.services.IEvaluationReference;
 import org.eclipse.ui.services.IEvaluationService;
-import org.eclipse.ui.statushandlers.StatusManager;
 
 /**
  * An activity registry that may be altered.
@@ -59,10 +55,6 @@ import org.eclipse.ui.statushandlers.StatusManager;
  */
 public final class MutableActivityManager extends AbstractActivityManager
         implements IMutableActivityManager, Cloneable {
-	private static final boolean DEBUG = Policy.DEBUG_UI_GLOBAL;
-
-	private static final int MAX_ERRORS = 5;
-	private static int reportErrors = 0;
 	
     private Map activitiesById = new HashMap();
 
@@ -140,8 +132,7 @@ public final class MutableActivityManager extends AbstractActivityManager
         readRegistry(true);
     }
 
-    public IActivity getActivity(String activityId) {
-		checkThread();
+	synchronized public IActivity getActivity(String activityId) {
         if (activityId == null) {
 			throw new NullPointerException();
 		}
@@ -157,8 +148,7 @@ public final class MutableActivityManager extends AbstractActivityManager
         return activity;
     }
 
-    public ICategory getCategory(String categoryId) {
-		checkThread();
+	synchronized public ICategory getCategory(String categoryId) {
         if (categoryId == null) {
 			throw new NullPointerException();
 		}
@@ -174,23 +164,19 @@ public final class MutableActivityManager extends AbstractActivityManager
         return category;
     }
 
-    public Set getDefinedActivityIds() {
-		checkThread();
+	synchronized public Set getDefinedActivityIds() {
         return Collections.unmodifiableSet(definedActivityIds);
     }
 
-    public Set getDefinedCategoryIds() {
-		checkThread();
+	synchronized public Set getDefinedCategoryIds() {
         return Collections.unmodifiableSet(definedCategoryIds);
     }
 
-    public Set getEnabledActivityIds() {
-		checkThread();
+	synchronized public Set getEnabledActivityIds() {
         return Collections.unmodifiableSet(enabledActivityIds);
     }
 
-    public IIdentifier getIdentifier(String identifierId) {
-		checkThread();
+	synchronized public IIdentifier getIdentifier(String identifierId) {
         if (identifierId == null) {
 			throw new NullPointerException();
 		}
@@ -536,8 +522,7 @@ public final class MutableActivityManager extends AbstractActivityManager
 		}
 	}
 
-	public void setEnabledActivityIds(Set enabledActivityIds) {
-		checkThread();
+	synchronized public void setEnabledActivityIds(Set enabledActivityIds) {
         enabledActivityIds = new HashSet(enabledActivityIds);
         Set requiredActivityIds = new HashSet(enabledActivityIds);
         getRequiredActivityIds(enabledActivityIds, requiredActivityIds);
@@ -920,8 +905,7 @@ public final class MutableActivityManager extends AbstractActivityManager
     /* (non-Javadoc)
      * @see java.lang.Object#clone()
      */
-    public Object clone() {
-		checkThread();
+	synchronized public Object clone() {
         MutableActivityManager clone = new MutableActivityManager(advisor, activityRegistry);
         clone.setEnabledActivityIds(getEnabledActivityIds());
         return clone;
@@ -981,24 +965,4 @@ public final class MutableActivityManager extends AbstractActivityManager
         return deferredIdentifierJob;
     }
     
-	private static final String ERR_MSG = "Invalid Thread Access to Activity Manager"; //$NON-NLS-1$
-
-	private void checkThread() {
-		if (!DEBUG) {
-			return;
-		}
-		if (reportErrors >= MAX_ERRORS) {
-			return;
-		}
-		if (PlatformUI.getWorkbench().isStarting()) {
-			return;
-		}
-		boolean nonUiThread = (null == Display.getCurrent());
-		if (nonUiThread) {
-			reportErrors++;
-			StatusManager.getManager().handle(
-					new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, ERR_MSG, new Exception(
-							ERR_MSG)), StatusManager.LOG);
-		}
-	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/commands/WorkbenchCommandSupport.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/commands/WorkbenchCommandSupport.java
index c8265a3..27f147c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/commands/WorkbenchCommandSupport.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/commands/WorkbenchCommandSupport.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,16 +14,13 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-
 import org.eclipse.core.commands.CommandManager;
 import org.eclipse.core.commands.contexts.ContextManager;
 import org.eclipse.jface.bindings.BindingManager;
-import org.eclipse.ui.ISources;
 import org.eclipse.ui.LegacyHandlerSubmissionExpression;
 import org.eclipse.ui.commands.HandlerSubmission;
 import org.eclipse.ui.commands.ICommandManager;
 import org.eclipse.ui.commands.IWorkbenchCommandSupport;
-import org.eclipse.ui.commands.Priority;
 import org.eclipse.ui.handlers.IHandlerActivation;
 import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.internal.handlers.LegacyHandlerWrapper;
@@ -89,30 +86,7 @@ public class WorkbenchCommandSupport implements IWorkbenchCommandSupport {
 						.getKeyFormatterForPlatform());
 	}
 
-	public final void addHandlerSubmission(
-			final HandlerSubmission handlerSubmission) {
-		/*
-		 * Create the source priorities based on the conditions mentioned in the
-		 * submission.
-		 */
-		int sourcePriorities = 0;
-		if (handlerSubmission.getActivePartId() != null) {
-			sourcePriorities |= ISources.ACTIVE_PART_ID;
-		}
-		if (handlerSubmission.getActiveShell() != null) {
-			sourcePriorities |= (ISources.ACTIVE_SHELL | ISources.ACTIVE_WORKBENCH_WINDOW);
-		}
-		if (handlerSubmission.getActiveWorkbenchPartSite() != null) {
-			sourcePriorities |= ISources.ACTIVE_SITE;
-		}
-		if (handlerSubmission.getPriority() == Priority.LEGACY) {
-			sourcePriorities |= ISources.LEGACY_LEGACY;
-		} else if (handlerSubmission.getPriority() == Priority.LOW) {
-			sourcePriorities |= ISources.LEGACY_LOW;
-		} else if (handlerSubmission.getPriority() == Priority.MEDIUM) {
-			sourcePriorities |= ISources.LEGACY_MEDIUM;
-		}
-
+	public final void addHandlerSubmission(final HandlerSubmission handlerSubmission) {
 		final IHandlerActivation activation = handlerService.activateHandler(
 				handlerSubmission.getCommandId(), new LegacyHandlerWrapper(
 						handlerSubmission.getHandler()),
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/contexts/WorkbenchContextSupport.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/contexts/WorkbenchContextSupport.java
index 219fa3a..b38cecf 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/contexts/WorkbenchContextSupport.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/contexts/WorkbenchContextSupport.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,10 +14,8 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-
 import org.eclipse.core.commands.contexts.ContextManager;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.ISources;
 import org.eclipse.ui.LegacyHandlerSubmissionExpression;
 import org.eclipse.ui.contexts.EnabledSubmission;
 import org.eclipse.ui.contexts.IContextActivation;
@@ -86,23 +84,7 @@ public class WorkbenchContextSupport implements IWorkbenchContextSupport {
 				.getContextManagerWrapper(contextManager);
 	}
 
-	public final void addEnabledSubmission(
-			final EnabledSubmission enabledSubmission) {
-		/*
-		 * Create the source priorities based on the conditions mentioned in the
-		 * submission.
-		 */
-		int sourcePriorities = 0;
-		if (enabledSubmission.getActivePartId() != null) {
-			sourcePriorities |= ISources.ACTIVE_PART_ID;
-		}
-		if (enabledSubmission.getActiveShell() != null) {
-			sourcePriorities |= (ISources.ACTIVE_SHELL | ISources.ACTIVE_WORKBENCH_WINDOW);
-		}
-		if (enabledSubmission.getActiveWorkbenchPartSite() != null) {
-			sourcePriorities |= ISources.ACTIVE_SITE;
-		}
-
+	public final void addEnabledSubmission(final EnabledSubmission enabledSubmission) {
 		final IContextActivation activation = contextService.activateContext(
 				enabledSubmission.getContextId(),
 				new LegacyHandlerSubmissionExpression(enabledSubmission
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/decorators/DecorationScheduler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/decorators/DecorationScheduler.java
index 0c28413..7f4606a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/decorators/DecorationScheduler.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/decorators/DecorationScheduler.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -191,10 +190,10 @@ public class DecorationScheduler {
 	 * decoration and return <code>null</code>.
 	 * 
 	 * @param element
-	 *            The element to be decorated. If it is <code>null</code>
-	 *            return <code>null</code>.
+	 *            The element to be decorated. If it is <code>null</code> return
+	 *            <code>null</code>.
 	 * @param adaptedElement
-	 *            It's adapted value.
+	 *            Its adapted value.
 	 * @param context
 	 *            The deocration context
 	 * @return DecorationResult or <code>null</code>
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/AboutDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/AboutDialog.java
index 5fed814..fc1bc1c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/AboutDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/AboutDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,6 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.accessibility.AccessibleAdapter;
 import org.eclipse.swt.accessibility.AccessibleEvent;
 import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.custom.ScrolledComposite;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.events.ControlAdapter;
 import org.eclipse.swt.events.ControlEvent;
@@ -38,6 +37,7 @@ import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.RowLayout;
@@ -65,6 +65,7 @@ import org.eclipse.ui.menus.CommandContributionItemParameter;
  */
 public class AboutDialog extends TrayDialog {
     private final static int MAX_IMAGE_WIDTH_FOR_TEXT = 250;
+	private final static int TEXT_MARGIN = 5;
 
     private final static int DETAILS_ID = IDialogConstants.CLIENT_ID + 1;
 
@@ -82,6 +83,8 @@ public class AboutDialog extends TrayDialog {
     
     private AboutTextManager aboutTextManager;
 
+	private AboutItem item;
+
     /**
      * Create an instance of the AboutDialog for the given window.
      * @param parentShell The parent of the dialog.
@@ -189,7 +192,7 @@ public class AboutDialog extends TrayDialog {
     protected Control createDialogArea(Composite parent) {
          // brand the about box if there is product info
         Image aboutImage = null;
-        AboutItem item = null;
+		item = null;
         if (product != null) {
             ImageDescriptor imageDescriptor = ProductProperties
                     .getAboutImage(product);
@@ -277,91 +280,44 @@ public class AboutDialog extends TrayDialog {
             topContainerHeightHint = Math.max(topContainerHeightHint, aboutImage.getBounds().height);
         }
         
-        GridData data = new GridData();
-        data.horizontalAlignment = GridData.FILL;
-        data.verticalAlignment = GridData.FILL;
-        data.grabExcessHorizontalSpace = true;
-        data.grabExcessVerticalSpace = true;
-        data.heightHint = topContainerHeightHint;
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
         topContainer.setLayoutData(data);
+		// used only to drive initial size so that there are no hints in the
+		// layout data
+		topContainer.setSize(432, topContainerHeightHint);
         
         if (item != null) {
-			final int minWidth = 432;
-			// This value should really be calculated
-        	// from the computeSize(SWT.DEFAULT,
-        	// SWT.DEFAULT) of all the
-        	// children in infoArea excluding the
-        	// wrapped styled text
-        	// There is no easy way to do this.
-
-			// A scrolled composite is used instead of a vertical scroll bar on
-			// the styled text, because styled text does not automatically
-			// remove the vertical bar when not needed.
-        	final ScrolledComposite scroller = new ScrolledComposite(topContainer,
-    				SWT.V_SCROLL | SWT.H_SCROLL);
-        	data = new GridData(GridData.FILL_BOTH);
-        	data.widthHint = minWidth;
-    		scroller.setLayoutData(data);
-
-    		final Composite textComposite = new Composite(scroller, SWT.NONE);
-    		textComposite.setBackground(background);
-    		
-    		layout = new GridLayout();
-    		textComposite.setLayout(layout);
-
-    		text = new StyledText(textComposite, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);
-
-    		// Don't set caret to 'null' as this causes https://bugs.eclipse.org/293263.
-//    		text.setCaret(null);
-
-            text.setFont(parent.getFont());
-            text.setText(item.getText());
-            text.setCursor(null);
-            text.setBackground(background);
-            text.setForeground(foreground);
-            
-            aboutTextManager = new AboutTextManager(text);
-            aboutTextManager.setItem(item);
-            
-            createTextMenu();
-            
-    		GridData gd = new GridData();
-    		gd.verticalAlignment = GridData.BEGINNING;
-    		gd.horizontalAlignment = GridData.FILL;
-    		gd.grabExcessHorizontalSpace = true;
-    		text.setLayoutData(gd);
-
-    		// Adjust the scrollbar increments
-    		scroller.getHorizontalBar().setIncrement(20);
-    		scroller.getVerticalBar().setIncrement(20);
-
-    		final boolean[] inresize = new boolean[1]; // flag to stop unneccesary
-    		// recursion
-    		textComposite.addControlListener(new ControlAdapter() {
-    			public void controlResized(ControlEvent e) {
-    				if (inresize[0])
-    					return;
-    				inresize[0] = true;
-    				// required because of bugzilla report 4579
-    				textComposite.layout(true);
-    				// required because you want to change the height that the
-    				// scrollbar will scroll over when the width changes.
-    				int width = textComposite.getClientArea().width;
-    				Point p = textComposite.computeSize(width, SWT.DEFAULT);
-    				scroller.setMinSize(minWidth, p.y);
-    				inresize[0] = false;
-    			}
-    		});
-
-    		scroller.setExpandHorizontal(true);
-    		scroller.setExpandVertical(true);
-    		Point p = textComposite.computeSize(minWidth, SWT.DEFAULT);
-    		textComposite.setSize(p.x, p.y);
-    		scroller.setMinWidth(minWidth);
-    		scroller.setMinHeight(p.y);
-
-    		scroller.setContent(textComposite);
-        }
+			text = new StyledText(topContainer, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);
+			configureText(topContainer);
+
+			// computing trim for later
+			Rectangle rect = text.computeTrim(0, 0, 100, 100);
+			final int xTrim = rect.width - 100;
+			final int yTrim = rect.height - 100;
+
+			topContainer.addControlListener(new ControlAdapter() {
+				public void controlResized(ControlEvent e) {
+					text.setSize(SWT.DEFAULT, SWT.DEFAULT);
+					topContainer.layout(true);
+					// do we need a scroll bar?
+					Point size = text.getSize();
+					int availableHeight = size.y - yTrim;
+					int availableWidth = size.x - xTrim - (2 * TEXT_MARGIN);
+					Point newSize = text.computeSize(availableWidth, SWT.DEFAULT, true);
+					int style = text.getStyle();
+					if (newSize.y > availableHeight) {
+						if ((style & SWT.V_SCROLL) == 0) {
+							recreateWrappedText(topContainer, true);
+						}
+					} else {
+						if ((style & SWT.V_SCROLL) != 0) {
+							recreateWrappedText(topContainer, false);
+						}
+					}
+					topContainer.layout(true);
+				}
+			});
+		}
 
         // horizontal bar
         Label bar = new Label(workArea, SWT.HORIZONTAL | SWT.SEPARATOR);
@@ -392,6 +348,47 @@ public class AboutDialog extends TrayDialog {
         return workArea;
     }
 
+	void recreateWrappedText(Composite parent, boolean withScrolling) {
+		int style = text.getStyle();
+		if (withScrolling) {
+			style |= SWT.V_SCROLL;
+		} else {
+			style ^= SWT.V_SCROLL;
+		}
+		boolean hasFocus = text.isFocusControl();
+		Point selection = text.getSelection();
+		text.dispose();
+		text = new StyledText(parent, style);
+		configureText(parent);
+		if (hasFocus) {
+			text.setFocus();
+		}
+		text.setSelection(selection);
+	}
+
+	void configureText(final Composite parent) {
+		// Don't set caret to 'null' as this causes
+		// https://bugs.eclipse.org/293263.
+		// text.setCaret(null);
+		Color background = JFaceColors.getBannerBackground(parent.getDisplay());
+		Color foreground = JFaceColors.getBannerForeground(parent.getDisplay());
+
+		text.setFont(parent.getFont());
+		text.setText(item.getText());
+		text.setCursor(null);
+		text.setBackground(background);
+		text.setForeground(foreground);
+		text.setMargins(TEXT_MARGIN, TEXT_MARGIN, TEXT_MARGIN, 0);
+
+		aboutTextManager = new AboutTextManager(text);
+		aboutTextManager.setItem(item);
+
+		createTextMenu();
+
+		GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+		text.setLayoutData(gd);
+	}
+
     /**
 	 * Create the context menu for the text widget.
 	 * 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/CustomizePerspectiveDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/CustomizePerspectiveDialog.java
index 58ac7e8..2ae24c7 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/CustomizePerspectiveDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/CustomizePerspectiveDialog.java	
@@ -128,7 +128,6 @@ import org.eclipse.ui.internal.Perspective;
 import org.eclipse.ui.internal.PluginActionCoolBarContributionItem;
 import org.eclipse.ui.internal.PluginActionSet;
 import org.eclipse.ui.internal.PluginActionSetBuilder;
-import org.eclipse.ui.internal.ShowViewMenu;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.WorkbenchPage;
 import org.eclipse.ui.internal.WorkbenchPlugin;
@@ -1023,7 +1022,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
 												getParamID(item));
 							} else if (isShowView(item)) {
 								parameters.put(
-										ShowViewMenu.VIEW_ID_PARM,
+										IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID,
 										getParamID(item));
 							}
 						}
@@ -2365,7 +2364,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
 					if (isNewWizard(item)) {
 						key = IWorkbenchCommandConstants.FILE_NEW_PARM_WIZARDID;
 					} else if (isShowView(item)) {
-						key = ShowViewMenu.VIEW_ID_PARM;
+						key = IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID;
 					} else if (isShowPerspective(item)) {
 						key = IWorkbenchCommandConstants.PERSPECTIVES_SHOW_PERSPECTIVE_PARM_ID;
 					}
@@ -3206,7 +3205,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
 		perspective.turnOnActionSets((IActionSetDescriptor[]) toAdd
 				.toArray(new IActionSetDescriptor[toAdd.size()]));
 		perspective.turnOffActionSets((IActionSetDescriptor[]) toRemove
-				.toArray(new IActionSetDescriptor[toAdd.size()]));
+				.toArray(new IActionSetDescriptor[toRemove.size()]));
 
 		// Menu  and Toolbar Items
 		requiresUpdate |= updateHiddenElements(menuItems, perspective.getHiddenMenuItems());
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/EditorsPreferencePage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/EditorsPreferencePage.java
index 701eabc..f7a360e 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/EditorsPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/EditorsPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,7 +47,7 @@ import org.eclipse.ui.internal.util.PrefUtil;
  */
 public class EditorsPreferencePage extends PreferencePage implements
         IWorkbenchPreferencePage {
-    private static final int REUSE_INDENT = 10;
+	private static final int REUSE_INDENT = 20;
 
     protected Composite editorReuseGroup;
 
@@ -280,14 +280,14 @@ public class EditorsPreferencePage extends PreferencePage implements
         editorReuseIndentGroup = new Composite(editorReuseGroup, SWT.LEFT);
         GridLayout indentLayout = new GridLayout();
         indentLayout.marginLeft = REUSE_INDENT;
-        indentLayout.marginRight = 0;
+        indentLayout.marginWidth = 0;
         editorReuseIndentGroup.setLayout(indentLayout);
         editorReuseIndentGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
 
         editorReuseThresholdGroup = new Composite(editorReuseIndentGroup,
                 SWT.LEFT);
         layout = new GridLayout();
-        layout.marginWidth = 0;
+		layout.marginWidth = 0;
         editorReuseThresholdGroup.setLayout(layout);
         editorReuseThresholdGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FileEditorsPreferencePage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FileEditorsPreferencePage.java
index 0e7eb89..7efcee2 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FileEditorsPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FileEditorsPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.content.IContentType;
@@ -186,7 +185,7 @@ public class FileEditorsPreferencePage extends PreferencePage implements
         data.horizontalSpan = 2;
         label.setLayoutData(data);
 
-        resourceTypeTable = new Table(pageComponent, SWT.SINGLE | SWT.BORDER
+        resourceTypeTable = new Table(pageComponent, SWT.MULTI | SWT.BORDER
                 | SWT.FULL_SELECTION);
         resourceTypeTable.addListener(SWT.Selection, this);
         resourceTypeTable.addListener(SWT.DefaultSelection, this);
@@ -211,7 +210,6 @@ public class FileEditorsPreferencePage extends PreferencePage implements
         addResourceTypeButton = new Button(groupComponent, SWT.PUSH);
         addResourceTypeButton.setText(WorkbenchMessages.FileEditorPreference_add); 
         addResourceTypeButton.addListener(SWT.Selection, this);
-        addResourceTypeButton.setLayoutData(data);
         setButtonLayoutData(addResourceTypeButton);
 
         removeResourceTypeButton = new Button(groupComponent, SWT.PUSH);
@@ -234,7 +232,7 @@ public class FileEditorsPreferencePage extends PreferencePage implements
         data.horizontalSpan = 2;
         editorLabel.setLayoutData(data);
 
-        editorTable = new Table(pageComponent, SWT.SINGLE | SWT.BORDER);
+        editorTable = new Table(pageComponent, SWT.MULTI | SWT.BORDER);
         editorTable.addListener(SWT.Selection, this);
         editorTable.addListener(SWT.DefaultSelection, this);
         data = new GridData(GridData.FILL_BOTH);
@@ -412,8 +410,8 @@ public class FileEditorsPreferencePage extends PreferencePage implements
 
     protected FileEditorMapping getSelectedResourceType() {
         TableItem[] items = resourceTypeTable.getSelection();
-        if (items.length > 0) {
-            return (FileEditorMapping) items[0].getData(); //Table is single select
+        if (items.length == 1) {
+            return (FileEditorMapping) items[0].getData();
         }
         return null;        
     }
@@ -566,21 +564,19 @@ public class FileEditorsPreferencePage extends PreferencePage implements
         TableItem[] items = editorTable.getSelection();
         boolean defaultEditor = editorTable.getSelectionIndex() == 0;
         if (items.length > 0) {
-            getSelectedResourceType().removeEditor(
-                    (EditorDescriptor) items[0].getData(DATA_EDITOR));
-            items[0].dispose(); //Table is single selection
+        	for (int i = 0; i < items.length; i++) {
+                getSelectedResourceType().removeEditor(
+                        (EditorDescriptor) items[i].getData(DATA_EDITOR));
+                items[i].dispose();	
+        	}
         }
         if (defaultEditor && editorTable.getItemCount() > 0) {
             TableItem item = editorTable.getItem(0);
-            // explicitly set the new editor first editor to default
+            // explicitly set the first editor as the default
             getSelectedResourceType().setDefaultEditor(
 					(EditorDescriptor) item.getData(DATA_EDITOR));
-            if (item != null) {
-				item
-                        .setText(((EditorDescriptor) (item.getData(DATA_EDITOR)))
-                                .getLabel()
-                                + " " + WorkbenchMessages.FileEditorPreference_defaultLabel); //$NON-NLS-1$
-			}
+			item.setText(((EditorDescriptor) (item.getData(DATA_EDITOR))).getLabel()
+					+ " " + WorkbenchMessages.FileEditorPreference_defaultLabel); //$NON-NLS-1$
 			if (!isEditorRemovable(item)) {
 				setLockedItemText(item, item.getText());
 			}
@@ -593,8 +589,8 @@ public class FileEditorsPreferencePage extends PreferencePage implements
      */
     public void removeSelectedResourceType() {
         TableItem[] items = resourceTypeTable.getSelection();
-        if (items.length > 0) {
-            items[0].dispose(); //Table is single selection
+        for (int i = 0; i < items.length; i++) {
+        	items[i].dispose();
         }
         //Clear out the editors too
         editorTable.removeAll();
@@ -641,29 +637,35 @@ public class FileEditorsPreferencePage extends PreferencePage implements
      */
     public void updateEnabledState() {
         //Update enabled state
-        boolean resourceTypeSelected = resourceTypeTable.getSelectionIndex() != -1;
-        boolean editorSelected = editorTable.getSelectionIndex() != -1;
-
-        removeResourceTypeButton.setEnabled(resourceTypeSelected);
-        editorLabel.setEnabled(resourceTypeSelected);
-        addEditorButton.setEnabled(resourceTypeSelected);
-        removeEditorButton.setEnabled(editorSelected && isEditorRemovable());
-        defaultEditorButton.setEnabled(editorSelected);
+    	int selectedResources = resourceTypeTable.getSelectionCount();
+        int selectedEditors = editorTable.getSelectionCount();
+
+        removeResourceTypeButton.setEnabled(selectedResources != 0);
+		editorLabel.setEnabled(selectedResources == 1);
+        addEditorButton.setEnabled(selectedResources == 1);
+		removeEditorButton.setEnabled(areEditorsRemovable());
+        defaultEditorButton.setEnabled(selectedEditors == 1);
     }
     
     /**
-	 * Return whether the selected editor is removable. An editor is removable
-	 * if it is not submitted via a content-type binding.
+	 * Return whether the selected editors are removable. An editor is removable
+	 * if it was not submitted via a content-type binding.
 	 * 
-	 * @return whether the selected editor is removable
+	 * @return whether all the selected editors are removable or not
 	 * @since 3.1
 	 */
-    private boolean isEditorRemovable() {
+	private boolean areEditorsRemovable() {
 		TableItem[] items = editorTable.getSelection();
-		if (items.length > 0) {
-			return isEditorRemovable(items[0]);
+		if (items.length == 0) {
+			return false;
+		}
+
+		for (int i = 0; i < items.length; i++) {
+			if (!isEditorRemovable(items[i])) {
+				return false;
+			}
 		}
-		return false;
+		return true;
 	}
     
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java
index 4139071..83f8abe 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -573,7 +573,7 @@ public abstract class FilteredPreferenceDialog extends PreferenceDialog
 				menu.setVisible(true);
 			}
 		};
-		popupMenuAction.setToolTipText(WorkbenchMessages.FilteredItemsSelectionDialog_menu);
+		popupMenuAction.setToolTipText(WorkbenchMessages.FilteredPreferenceDialog_FilterToolTip);
 		historyManager.add(popupMenuAction);
 		IHandlerService service = (IHandlerService) PlatformUI.getWorkbench()
 				.getService(IHandlerService.class);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/NewWizardNewPage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/NewWizardNewPage.java
index f744929..841d3ce 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/NewWizardNewPage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/NewWizardNewPage.java	
@@ -30,6 +30,7 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.wizard.IWizard;
 import org.eclipse.jface.wizard.IWizardContainer;
 import org.eclipse.jface.wizard.IWizardContainer2;
 import org.eclipse.swt.SWT;
@@ -50,6 +51,7 @@ import org.eclipse.ui.IWorkbenchWizard;
 import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.dialogs.FilteredTree;
 import org.eclipse.ui.internal.WorkbenchMessages;
+import org.eclipse.ui.internal.registry.WizardsRegistryReader;
 import org.eclipse.ui.model.AdaptableList;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 import org.eclipse.ui.wizards.IWizardCategory;
@@ -132,6 +134,14 @@ class NewWizardNewPage implements ISelectionChangedListener {
         } else {
             needShowAll = !allActivityEnabled(wizardCategories);
         }
+
+		IWizard wizard = mainPage.getWizard();
+		if (wizard instanceof NewWizard) {
+			if (WizardsRegistryReader.FULL_EXAMPLES_WIZARD_CATEGORY.equals(((NewWizard) wizard)
+					.getCategoryId())) {
+				filter.setFilterPrimaryWizards(true);
+			}
+		}
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java
index eae0e1b..721f9e9 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java	
@@ -48,6 +48,7 @@ import org.eclipse.ui.internal.FastViewBar;
 import org.eclipse.ui.internal.FastViewManager;
 import org.eclipse.ui.internal.IPreferenceConstants;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
+import org.eclipse.ui.internal.Perspective;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.WorkbenchPage;
 import org.eclipse.ui.internal.WorkbenchPlugin;
@@ -600,12 +601,18 @@ public class PerspectivesPreferencePage extends PreferencePage implements
 		if (isFVBConfigured) {
 			store.setValue(IPreferenceConstants.FVB_HIDE, fvbHideButton
 					.getSelection());
-			WorkbenchPage page = (WorkbenchPage) workbench
-					.getActiveWorkbenchWindow().getActivePage();
-			FastViewManager fvm = page.getActivePerspective()
-					.getFastViewManager();
-			if (fvm != null)
-				fvm.updateTrim(FastViewBar.FASTVIEWBAR_ID);
+			IWorkbenchWindow activeWindow = workbench.getActiveWorkbenchWindow();
+			if (activeWindow != null) {
+				WorkbenchPage page = (WorkbenchPage) activeWindow.getActivePage();
+				if (page != null) {
+					Perspective activePerspective = page.getActivePerspective();
+					if (activePerspective != null) {
+						FastViewManager fvm = activePerspective.getFastViewManager();
+						if (fvm != null)
+							fvm.updateTrim(FastViewBar.FASTVIEWBAR_ID);
+					}
+				}
+			}
 		}
 
 		// store the open perspective mode setting
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java
index f4760e3..a2b2dda 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,14 +7,15 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - Bug 294628 multiple selection
  *******************************************************************************/
 package org.eclipse.ui.internal.dialogs;
 
 import java.util.Iterator;
-
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.preference.PreferenceManager;
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Shell;
@@ -91,18 +92,35 @@ public class PropertyDialog extends FilteredPreferenceDialog {
 	}
 
 	/**
-	 * Returns the name of the given element.
+	 * Returns the name of the given element(s). Prints at most 3 names.
 	 * 
 	 * @param element
-	 *            the element
+	 *            the element / IStructuredSelection
 	 * @return the name of the element
 	 */
 	private static String getName(Object element) {
-		IWorkbenchAdapter adapter = (IWorkbenchAdapter)Util.getAdapter(element, IWorkbenchAdapter.class);
-		if (adapter != null) {
-			return adapter.getLabel(element);
+		Object[] elements;
+		if (element instanceof IStructuredSelection)
+			elements = ((IStructuredSelection) element).toArray();
+		else
+			elements = new Object[] { element };
+		StringBuffer sb = new StringBuffer();
+		// Print at most 3 entries...
+		for (int i = 0; i < elements.length; i++) {
+			element = elements[i];
+			if (i > 2) {
+				sb.append(" ..."); //$NON-NLS-1$
+				break;
+			}
+			IWorkbenchAdapter adapter = (IWorkbenchAdapter) Util.getAdapter(element,
+					IWorkbenchAdapter.class);
+			if (adapter != null) {
+				if (sb.length() > 0)
+					sb.append(", "); //$NON-NLS-1$
+				sb.append(adapter.getLabel(element));
+			}
 		}
-		return "";//$NON-NLS-1$
+		return sb.toString();
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageContributorManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageContributorManager.java
index 2ef7574..cb25119 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageContributorManager.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageContributorManager.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Oakland Software (Francis Upton) <francisu at ieee.org> - bug 219273 
+ *     James Blackburn (Broadcom Corp.) - Bug 294628 multiple selection
  *******************************************************************************/
 package org.eclipse.ui.internal.dialogs;
 
@@ -16,14 +17,15 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;
 import org.eclipse.jface.preference.PreferenceNode;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.internal.ObjectContributorManager;
 import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
 import org.eclipse.ui.internal.registry.PropertyPagesRegistryReader;
@@ -66,13 +68,28 @@ public class PropertyPageContributorManager extends ObjectContributorManager {
 	 * contributors and sequentially invoke them to contribute to the property
 	 * page manager. Matching algorithm will also check subclasses and
 	 * implemented interfaces.
+	 * 
+	 * If object is an IStructuredSelection then attempt to match all the
+	 * contained objects.
+	 * 
 	 * @param manager
 	 * @param object
 	 * @return true if contribution took place, false otherwise.
 	 */
 	public boolean contribute(PropertyPageManager manager, Object object) {
 
-		List result = getContributors(object);
+		Collection result = null;
+		if (object instanceof IStructuredSelection) {
+			Object[] objs = ((IStructuredSelection) object).toArray();
+			for (int i = 0; i < objs.length; i++) {
+				List contribs = getContributors(objs[i]);
+				if (result == null)
+					result = new LinkedHashSet(contribs);
+				else
+					result.retainAll(contribs);
+			}
+		} else
+			result = getContributors(object);
 
 		if (result == null || result.size() == 0) {
 			return false;
@@ -129,7 +146,7 @@ public class PropertyPageContributorManager extends ObjectContributorManager {
 	 * @param nodes
 	 * @return List of CategorizedPageNode
 	 */
-	private List buildNodeList(List nodes) {
+	private List buildNodeList(Collection nodes) {
 		Hashtable mapping = new Hashtable();
 		
 		Iterator nodesIterator = nodes.iterator();
@@ -192,6 +209,8 @@ public class PropertyPageContributorManager extends ObjectContributorManager {
 	 * @return Collection of PropertyPageContribution
 	 */
 	public Collection getApplicableContributors(Object element) {
+		if (element instanceof IStructuredSelection)
+			return getApplicableContributors((IStructuredSelection) element);
 		Collection contributors = getContributors(element);
 		Collection result = new ArrayList();
 		for (Iterator iter = contributors.iterator(); iter.hasNext();) {
@@ -203,6 +222,37 @@ public class PropertyPageContributorManager extends ObjectContributorManager {
 		return result;
 	}
 
+	/**
+	 * Get applicable contributors for multiple selection
+	 * 
+	 * @param selection
+	 * @return Collection of applicable property page contributors
+	 * @since 3.7
+	 */
+	public Collection getApplicableContributors(IStructuredSelection selection) {
+		Iterator it = selection.iterator();
+		Collection result = null;
+		while (it.hasNext()) {
+			Object element = it.next();
+			Collection collection = getApplicableContributors(element);
+			if (result == null)
+				result = new LinkedHashSet(collection);
+			else
+				result.retainAll(collection);
+		}
+		if (result != null && !result.isEmpty() && selection.size() > 1) {
+			// only add contributors which can handle multi selection
+			it = result.iterator();
+			while (it.hasNext()) {
+				RegistryPageContributor contrib = (RegistryPageContributor) it
+						.next();
+				if (!contrib.supportsMultipleSelection())
+					it.remove();
+			}
+		}
+		return result;
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.ObjectContributorManager#getExtensionPointFilter()
 	 */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageNode.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageNode.java
index b22bc77..4606bda 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageNode.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/PropertyPageNode.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,9 +12,9 @@ package org.eclipse.ui.internal.dialogs;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.preference.IPreferencePage;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.IWorkbenchPropertyPage;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.misc.StatusUtil;
 import org.eclipse.ui.internal.preferences.WorkbenchPreferenceExtensionNode;
@@ -28,7 +28,7 @@ import org.eclipse.ui.statushandlers.StatusManager;
 public class PropertyPageNode extends WorkbenchPreferenceExtensionNode {
     private RegistryPageContributor contributor;
 
-    private IWorkbenchPropertyPage page;
+	private IPreferencePage page;
 
     private Image icon;
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/RegistryPageContributor.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/RegistryPageContributor.java
index e69760c..da32597 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/RegistryPageContributor.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/RegistryPageContributor.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,16 +9,17 @@
  *     IBM Corporation - initial API and implementation
  *     Jan-Hendrik Diederich, Bredex GmbH - bug 201052
  *     Oakland Software (Francis Upton) <francisu at ieee.org> - bug 223808 
+ *     James Blackburn (Broadcom Corp.) - Bug 294628 multiple selection
  *******************************************************************************/
 package org.eclipse.ui.internal.dialogs;
 
 import java.lang.ref.SoftReference;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-
 import org.eclipse.core.expressions.EvaluationContext;
 import org.eclipse.core.expressions.EvaluationResult;
 import org.eclipse.core.expressions.Expression;
@@ -28,11 +29,14 @@ import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.preference.IPreferencePage;
 import org.eclipse.jface.preference.PreferenceNode;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IActionFilter;
 import org.eclipse.ui.IPluginContribution;
 import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.IWorkbenchPropertyPageMulti;
 import org.eclipse.ui.SelectionEnabler;
 import org.eclipse.ui.internal.IWorkbenchConstants;
 import org.eclipse.ui.internal.LegacyResourceSupport;
@@ -66,6 +70,11 @@ public class RegistryPageContributor implements IPropertyPageContributor,
 
 	private boolean adaptable = false;
 
+	/**
+	 * Flag which indicates if this property page supports multiple selection
+	 */
+	private final boolean supportsMultiSelect;
+
 	private IConfigurationElement pageElement;
 
 	private SoftReference filterProperties;
@@ -88,6 +97,8 @@ public class RegistryPageContributor implements IPropertyPageContributor,
 						pageElement
 								.getAttribute(PropertyPagesRegistryReader.ATT_ADAPTABLE))
 				.booleanValue();
+		supportsMultiSelect = PropertyPagesRegistryReader.ATT_SELECTION_FILTER_MULTI
+				.equals(pageElement.getAttribute(PropertyPagesRegistryReader.ATT_SELECTION_FILTER));
 		initializeEnablement(element);
 	}
 
@@ -114,29 +125,45 @@ public class RegistryPageContributor implements IPropertyPageContributor,
 	 * @throws CoreException
 	 *             thrown if there is a problem creating the apge
 	 */
-	public IWorkbenchPropertyPage createPage(Object element)
+	public IPreferencePage createPage(Object element)
 			throws CoreException {
-		IWorkbenchPropertyPage ppage = null;
-		ppage = (IWorkbenchPropertyPage) WorkbenchPlugin.createExtension(
+		IPreferencePage ppage = null;
+		ppage = (IPreferencePage) WorkbenchPlugin.createExtension(
 				pageElement, IWorkbenchRegistryConstants.ATT_CLASS);
 
 		ppage.setTitle(getPageName());
 
-		Object adapted = element;
-		if (adaptable) {
-			adapted = getAdaptedElement(element);
-			if (adapted == null) {
-				String message = "Error adapting selection to Property page " + pageId + " is being ignored"; //$NON-NLS-1$ //$NON-NLS-2$            	
-				throw new CoreException(new Status(IStatus.ERROR,
-						WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, message,
-						null));
+		Object[] elements = getObjects(element);
+		IAdaptable[] adapt = new IAdaptable[elements.length];
+
+		for (int i = 0; i < elements.length; i++) {
+			Object adapted = elements[i];
+			if (adaptable) {
+				adapted = getAdaptedElement(adapted);
+				if (adapted == null) {
+					String message = "Error adapting selection to Property page " + pageId + " is being ignored"; //$NON-NLS-1$ //$NON-NLS-2$            	
+					throw new CoreException(new Status(IStatus.ERROR,
+							WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR,
+							message, null));
+				}
 			}
+			adapt[i] = (IAdaptable) ((adapted instanceof IAdaptable) ? adapted
+					: new AdaptableForwarder(adapted));
 		}
 
-		if (adapted instanceof IAdaptable)
-			ppage.setElement((IAdaptable) adapted);
-		else
-			ppage.setElement(new AdaptableForwarder(adapted));
+		if (supportsMultiSelect) {
+			if ((ppage instanceof IWorkbenchPropertyPageMulti))
+				((IWorkbenchPropertyPageMulti) ppage).setElements(adapt);
+			else
+				throw new CoreException(
+						new Status(
+								IStatus.ERROR,
+								WorkbenchPlugin.PI_WORKBENCH,
+								IStatus.ERROR,
+								"Property page must implement IWorkbenchPropertyPageMulti: " + getPageName(), //$NON-NLS-1$
+								null));
+		} else
+			((IWorkbenchPropertyPage) ppage).setElement(adapt[0]);
 
 		return ppage;
 	}
@@ -201,60 +228,84 @@ public class RegistryPageContributor implements IPropertyPageContributor,
 	}
 
 	/**
-	 * Return true if name filter is not defined in the registry for this page,
-	 * or if name of the selected object matches the name filter.
+	 * Calculate whether the Property page is applicable to the current
+	 * selection. Checks:
+	 * <ul>
+	 * <li>multiSelect</li>
+	 * <li>enabledWhen enablement expression/li>
+	 * <li>nameFilter</li>
+	 * <li>custom Filter</li>
+	 * <li>checks legacy resource support</li>
+	 * </ul>
+	 * <p>
+	 * For multipleSelection pages, considers all elements in the selection for
+	 * enablement.
 	 */
 	public boolean isApplicableTo(Object object) {
+		Object[] objs = getObjects(object);
+
+		// If not a multi-select page not applicable to multiple selection
+		if (objs.length > 1 && !supportsMultiSelect)
+			return false;
 
-		if (failsEnablement(object))
+		if (failsEnablement(objs))
 			return false;
 
 		// Test name filter
 		String nameFilter = pageElement
 				.getAttribute(PropertyPagesRegistryReader.ATT_NAME_FILTER);
-		if (nameFilter != null) {
-			String objectName = object.toString();
-			IWorkbenchAdapter adapter = (IWorkbenchAdapter) Util.getAdapter(object, 
-                    IWorkbenchAdapter.class);
-			if (adapter != null) {
-				String elementName = adapter.getLabel(object);
-				if (elementName != null) {
-					objectName = elementName;
+
+		for (int i = 0; i < objs.length; i++) {
+			object = objs[i];
+			// Name filter
+			if (nameFilter != null) {
+				String objectName = object.toString();
+				IWorkbenchAdapter adapter = (IWorkbenchAdapter) Util
+						.getAdapter(object, IWorkbenchAdapter.class);
+				if (adapter != null) {
+					String elementName = adapter.getLabel(object);
+					if (elementName != null) {
+						objectName = elementName;
+					}
 				}
+				if (!SelectionEnabler.verifyNameMatch(objectName, nameFilter))
+					return false;
 			}
-			if (!SelectionEnabler.verifyNameMatch(objectName, nameFilter))
-				return false;
-		}
 
-		// Test custom filter
-		if (getFilterProperties() == null)
-			return true;
-		IActionFilter filter = null;
+			// Test custom filter
+			if (getFilterProperties() == null)
+				return true;
+			IActionFilter filter = null;
 
-		// Do the free IResource adapting
-		Object adaptedObject = LegacyResourceSupport.getAdaptedResource(object);
-		if (adaptedObject != null) {
-			object = adaptedObject;
-		}
+			// Do the free IResource adapting
+			Object adaptedObject = LegacyResourceSupport
+					.getAdaptedResource(object);
+			if (adaptedObject != null) {
+				object = adaptedObject;
+			}
 
-        filter = (IActionFilter)Util.getAdapter(object, IActionFilter.class);
+			filter = (IActionFilter) Util.getAdapter(object,
+					IActionFilter.class);
 
-		if (filter != null)
-			return testCustom(object, filter);
+			if (filter != null && !testCustom(object, filter))
+				return false;
+		}
 
 		return true;
 	}
 
 	/**
-	 * Return whether or not object fails the enablement criterea.
-	 * 
-	 * @param object
+	 * Return whether or not object fails the enabledWhen enablement criterea.
+	 * For multi-select pages, evaluate the enabledWhen expression using the
+	 * structured selection as a Collection (which should be iterated over).
 	 * @return boolean <code>true</code> if it fails the enablement test
 	 */
-	private boolean failsEnablement(Object object) {
+	private boolean failsEnablement(Object[] objs) {
 		if (enablementExpression == null)
 			return false;
 		try {
+			// If multi-select property page, always pass a collection for iteration
+			Object object = (supportsMultiSelect) ? Arrays.asList(objs) : objs[0];
 			EvaluationContext context = new EvaluationContext(null, object);
 			context.setAllowPluginActivation(true);
 			return enablementExpression.evaluate(
@@ -267,6 +318,20 @@ public class RegistryPageContributor implements IPropertyPageContributor,
 	}
 
 	/**
+	 * Returns an object array for the passed in object. If the object is an
+	 * IStructuredSelection, then return its array otherwise return a 1 element
+	 * Object[] containing the passed in object
+	 * 
+	 * @param obj
+	 * @return an object array representing the passed in object
+	 */
+	private Object[] getObjects(Object obj) {
+		if (obj instanceof IStructuredSelection)
+			return ((IStructuredSelection) obj).toArray();
+		return new Object[] { obj };
+	}
+
+	/**
 	 * Initialize the enablement expression for this decorator
 	 */
 	protected void initializeEnablement(IConfigurationElement definingElement) {
@@ -404,6 +469,14 @@ public class RegistryPageContributor implements IPropertyPageContributor,
 	}
 
 	/**
+	 * @return boolean indicating if this page supports multiple selection
+	 * @since 3.7
+	 */
+	boolean supportsMultipleSelection() {
+		return supportsMultiSelect;
+	}
+
+	/**
 	 * @return the configuration element
 	 * @since 3.1
 	 */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/StartupPreferencePage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/StartupPreferencePage.java
index 730914e..063c968 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/StartupPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/StartupPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,8 @@ import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -95,9 +97,24 @@ public class StartupPreferencePage extends PreferencePage implements
 		});
 		viewer.setContentProvider(ArrayContentProvider.getInstance());
 		viewer.setInput(workbench.getEarlyActivatedPlugins());
+		// Workbench plugin should not be disabled. Don't show it
+		viewer.setFilters(new ViewerFilter[] { createPlatformUIFilter() });
 		updateCheckState();
     }
 
+	private ViewerFilter createPlatformUIFilter() {
+		return new ViewerFilter() {
+
+			public boolean select(Viewer viewer, Object parentElement, Object element) {
+				if (element instanceof ContributionInfo) {
+					ContributionInfo info = (ContributionInfo) element;
+					return !PlatformUI.PLUGIN_ID.equals(info.getBundleId());
+				}
+				return true;
+			}
+		};
+	}
+
 	private void updateCheckState() {
         HashSet disabledPlugins = new HashSet(Arrays.asList(workbench.getDisabledEarlyActivatedPlugins()));
 		for (int i = 0; i < pluginsList.getItemCount(); i++) {
@@ -118,10 +135,9 @@ public class StartupPreferencePage extends PreferencePage implements
      * @see PreferencePage
      */
     protected void performDefaults() {
-        TableItem items[] = pluginsList.getItems();
-        for (int i = 0; i < items.length; i++) {
-            items[i].setChecked(true);
-        }
+		IPreferenceStore store = PrefUtil.getInternalPreferenceStore();
+		store.setToDefault(IPreferenceConstants.PLUGINS_NOT_ACTIVATED_ON_STARTUP);
+		updateCheckState();
     }
 
     /**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WizardActivityFilter.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WizardActivityFilter.java
index 7b30a81..2006f8a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WizardActivityFilter.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WizardActivityFilter.java	
@@ -24,6 +24,11 @@ import org.eclipse.ui.model.AdaptableList;
  * @since 3.0
  */
 public class WizardActivityFilter extends ViewerFilter {
+	private boolean filterPrimaryWizards = false;
+
+	public void setFilterPrimaryWizards(boolean filter) {
+		filterPrimaryWizards = filter;
+	}
 
     /* (non-Javadoc)
      * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
@@ -35,7 +40,7 @@ public class WizardActivityFilter extends ViewerFilter {
 			return filter(viewer, element, children).length > 0;
 		}
 
-        if (parentElement.getClass().equals(AdaptableList.class)) {
+		if (parentElement.getClass().equals(AdaptableList.class) && !filterPrimaryWizards) {
 			return true; //top-level ("primary") wizards should always be returned
 		}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchEditorsDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchEditorsDialog.java
index 5d0ea1f..6baeb97 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchEditorsDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchEditorsDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,11 +15,8 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.osgi.util.TextProcessor;
 import org.eclipse.swt.SWT;
@@ -48,12 +45,16 @@ import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.IEditorRegistry;
+import org.eclipse.ui.ISaveablesLifecycleListener;
 import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.SelectionDialog;
+import org.eclipse.ui.internal.EditorManager;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
+import org.eclipse.ui.internal.SaveablesList;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.WorkbenchPage;
 import org.eclipse.ui.internal.WorkbenchPartReference;
@@ -61,7 +62,6 @@ import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.layout.CellData;
 import org.eclipse.ui.internal.layout.CellLayout;
 import org.eclipse.ui.internal.layout.Row;
-import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
 
 import com.ibm.icu.text.Collator;
 
@@ -435,11 +435,31 @@ public class WorkbenchEditorsDialog extends SelectionDialog {
         if (items.length == 0) {
 			return;
 		}
+        
+        // collect all instantiated editors that have been selected
+		List selectedEditors = new ArrayList();
         for (int i = 0; i < items.length; i++) {
             Adapter e = (Adapter) items[i].getData();
-            e.close();
+			if (e.editorRef != null) {
+				IWorkbenchPart part = e.editorRef.getPart(false);
+				if (part != null) {
+					selectedEditors.add(part);
+				}
+			}
+		}
+
+		SaveablesList saveablesList = (SaveablesList) window
+				.getService(ISaveablesLifecycleListener.class);
+		// prompt for save
+		if (saveablesList.preCloseParts(selectedEditors, true, this, window) != null) {
+			// close all editors
+			for (int i = 0; i < items.length; i++) {
+				Adapter e = (Adapter) items[i].getData();
+				e.close();
+			}
+			// update the list
+			updateItems();
         }
-        updateItems();
     }
 
     /**
@@ -449,15 +469,21 @@ public class WorkbenchEditorsDialog extends SelectionDialog {
         if (items.length == 0) {
 			return;
 		}
-        ProgressMonitorDialog pmd = new ProgressMonitorJobsDialog(getShell());
-        pmd.open();
-        for (int i = 0; i < items.length; i++) {
-            Adapter editor = (Adapter) items[i].getData();
-            editor.save(pmd.getProgressMonitor());
-            updateItem(items[i], editor);
-        }
-        pmd.close();
-        updateItems();
+
+		// collect all instantiated editors that have been selected
+		List selectedEditors = new ArrayList();
+		for (int i = 0; i < items.length; i++) {
+			Adapter e = (Adapter) items[i].getData();
+			if (e.editorRef != null) {
+				IWorkbenchPart part = e.editorRef.getPart(false);
+				if (part != null) {
+					selectedEditors.add(part);
+				}
+			}
+		}
+
+		EditorManager.saveAll(selectedEditors, false, false, false, window);
+		updateItems();
     }
 
     /**
@@ -600,8 +626,6 @@ public class WorkbenchEditorsDialog extends SelectionDialog {
             return;
         }
 
-        saveDialogSettings();
-
         Adapter selection = (Adapter) items[0].getData();
         //It would be better to activate before closing the
         //dialog but it does not work when the editor is in other
@@ -610,6 +634,11 @@ public class WorkbenchEditorsDialog extends SelectionDialog {
         selection.activate();
     }
 
+	public boolean close() {
+		saveDialogSettings();
+		return super.close();
+	}
+
     /**
      * Saves the dialog settings.
      */
@@ -677,17 +706,8 @@ public class WorkbenchEditorsDialog extends SelectionDialog {
 			}
             WorkbenchPage p = ((WorkbenchPartReference) editorRef).getPane()
                     .getPage();
-            p.closeEditor(editorRef, true);
-        }
-
-        void save(IProgressMonitor monitor) {
-            if (editorRef == null) {
-				return;
-			}
-            IEditorPart editor = (IEditorPart) editorRef.getPart(true);
-            if (editor != null) {
-				editor.doSave(monitor);
-			}
+            // already saved when the i
+            p.closeEditor(editorRef, false);
         }
 
         String[] getText() {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java
index 793963e..047c911 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferenceDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@ import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.preference.IPreferenceNode;
 import org.eclipse.jface.preference.IPreferencePage;
 import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -22,6 +23,7 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
 import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.eclipse.ui.internal.dnd.SwtUtil;
 
 /**
  * Prefence dialog for the workbench including the ability to load/save
@@ -205,7 +207,9 @@ public class WorkbenchPreferenceDialog extends FilteredPreferenceDialog {
 			Shell shell = getShell();
 			if ((shell != null) && (!shell.isDisposed())) {
 				shell.open(); // make the dialog visible to properly set the focus
-				selectedPage.getControl().setFocus();
+				Control control = selectedPage.getControl();
+				if (!SwtUtil.isFocusAncestor(control))
+					control.setFocus();
 			}
 		}
 		return super.open();
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchWizardElement.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchWizardElement.java
index c9d882e..e807241 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchWizardElement.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchWizardElement.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Fair Isaac Corporation <Hemant.Singh at Gmail.com> - http://bugs.eclipse.org/326695
  *******************************************************************************/
 package org.eclipse.ui.internal.dialogs;
 
@@ -28,6 +29,7 @@ import org.eclipse.ui.internal.registry.KeywordRegistry;
 import org.eclipse.ui.internal.registry.RegistryReader;
 import org.eclipse.ui.model.IWorkbenchAdapter;
 import org.eclipse.ui.model.IWorkbenchAdapter2;
+import org.eclipse.ui.model.IWorkbenchAdapter3;
 import org.eclipse.ui.model.WorkbenchAdapter;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.ui.wizards.IWizardCategory;
@@ -128,7 +130,8 @@ public class WorkbenchWizardElement extends WorkbenchAdapter implements
      */
     public Object getAdapter(Class adapter) {
         if (adapter == IWorkbenchAdapter.class
-                || adapter == IWorkbenchAdapter2.class) {
+                || adapter == IWorkbenchAdapter2.class
+                || adapter == IWorkbenchAdapter3.class) {
             return this;
         }
         else if (adapter == IPluginContribution.class) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkingSetSelectionDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkingSetSelectionDialog.java
index f2b55d2..684bee7 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkingSetSelectionDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkingSetSelectionDialog.java	
@@ -357,11 +357,11 @@ public class WorkingSetSelectionDialog extends AbstractWorkingSetDialog {
 				IWorkingSetManager workingSetManager = workbenchWindow.getWorkbench()
 						.getWorkingSetManager();
 				IWorkingSet aggregate = workingSetManager.getWorkingSet(setId);
-				if (aggregate == null) {
-					aggregate = workingSetManager.createAggregateWorkingSet(setId,
-							WorkbenchMessages.WorkbenchPage_workingSet_multi_label, typedResult);
-					workingSetManager.addWorkingSet(aggregate);
-				}
+				if (aggregate != null)
+					workingSetManager.removeWorkingSet(aggregate);
+				aggregate = workingSetManager.createAggregateWorkingSet(setId,
+						WorkbenchMessages.WorkbenchPage_workingSet_multi_label, typedResult);
+				workingSetManager.addWorkingSet(aggregate);
 				setSelection(new IWorkingSet[] { aggregate });
 				setResult(Collections.singletonList(aggregate));
 			}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dnd/SwtUtil.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dnd/SwtUtil.java
index aca9126..56d6e35 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dnd/SwtUtil.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dnd/SwtUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.dnd;
 
-import org.eclipse.core.runtime.Assert;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
@@ -80,13 +79,13 @@ public class SwtUtil {
     }
     
     /**
-     * Determines if one control is a child of another. Returns true iff the second
-     * argument is a child of the first (or the same object).
-     * 
-     * @param potentialParent
-     * @param childToTest
-     * @return
-     */
+	 * Determines if one control is a child of another.
+	 * 
+	 * @param potentialParent
+	 * @param childToTest
+	 * @return <code>true</code> if the second argument is a child of the first
+	 *         or the same object, <code>false</code> otherwise
+	 */
     public static boolean isChild(Control potentialParent, Control childToTest) {
         if (childToTest == null) {
             return false;
@@ -100,7 +99,8 @@ public class SwtUtil {
     }
     
     public static boolean isFocusAncestor(Control potentialParent) {
-        Assert.isNotNull(potentialParent);
+		if (potentialParent == null)
+			return false;
         Control focusControl = Display.getCurrent().getFocusControl();
         if (focusControl == null) {
             return false;
@@ -109,13 +109,13 @@ public class SwtUtil {
     }
 
     /**
-     * Finds and returns the most specific SWT control at the given location. 
-     * (Note: this does a DFS on the SWT widget hierarchy, which is slow).
-     * 
-     * @param displayToSearch
-     * @param locationToFind
-     * @return
-     */
+	 * Finds and returns the most specific SWT control at the given location.
+	 * (Note: this does a DFS on the SWT widget hierarchy, which is slow).
+	 * 
+	 * @param displayToSearch
+	 * @param locationToFind
+	 * @return the most specific SWT control at the given location
+	 */
     public static Control findControl(Display displayToSearch,
             Point locationToFind) {
         Shell[] shells = displayToSearch.getShells();
@@ -195,12 +195,13 @@ public class SwtUtil {
     }
     
     /**
-     * Finds the control in the given location
-     * 
-     * @param toSearch
-     * @param locationToFind location (in display coordinates) 
-     * @return
-     */
+	 * Finds the control at the given location.
+	 * 
+	 * @param toSearch
+	 * @param locationToFind
+	 *            location (in display coordinates)
+	 * @return the control at the given location
+	 */
     public static Control findControl(Composite toSearch, Point locationToFind) {
         Control[] children = toSearch.getChildren();
 
@@ -208,13 +209,16 @@ public class SwtUtil {
     }
 
     /**
-     * 
-     * Returns true iff the given rectangle is located in the client area of any
-     * monitor.
-     * 
-     * @param someRectangle a rectangle in display coordinates (not null)
-     * @return true iff the given point can be seen on any monitor
-     */
+	 * 
+	 * Returns true iff the given rectangle is located in the client area of any
+	 * monitor.
+	 * 
+	 * @param display
+	 *            the display
+	 * @param someRectangle
+	 *            a rectangle in display coordinates (not null)
+	 * @return true iff the given point can be seen on any monitor
+	 */
     public static boolean intersectsAnyMonitor(Display display,
             Rectangle someRectangle) {
         Monitor[] monitors = display.getMonitors();
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/AbstractSaveHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/AbstractSaveHandler.java
new file mode 100644
index 0000000..61d3e50
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/AbstractSaveHandler.java	
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionInfo;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.ui.ISaveablePart;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.internal.AbstractEvaluationHandler;
+import org.eclipse.ui.internal.InternalHandlerUtil;
+import org.eclipse.ui.internal.util.Util;
+
+/**
+ * @since 3.7
+ *
+ */
+public abstract class AbstractSaveHandler extends AbstractEvaluationHandler {
+
+	protected static DirtyStateTracker dirtyStateTracker;
+	private Expression enabledWhen;
+
+	public AbstractSaveHandler() {
+		if (dirtyStateTracker == null)
+			dirtyStateTracker = new DirtyStateTracker();
+	}
+
+	protected Expression getEnabledWhenExpression() {
+		if (enabledWhen == null) {
+			enabledWhen = new Expression() {
+				public EvaluationResult evaluate(IEvaluationContext context) {
+					return AbstractSaveHandler.this.evaluate(context);
+				}
+	
+				/*
+				 * (non-Javadoc)
+				 * 
+				 * @see org.eclipse.core.expressions.Expression#collectExpressionInfo(org.eclipse.core.expressions.ExpressionInfo)
+				 */
+				public void collectExpressionInfo(ExpressionInfo info) {
+					info.addVariableNameAccess(ISources.ACTIVE_PART_NAME);
+				}
+			};
+		}
+		return enabledWhen;
+	}
+	
+	protected abstract EvaluationResult evaluate(IEvaluationContext context);
+	
+	protected ISaveablePart getSaveablePart(IEvaluationContext context) {
+		IWorkbenchPart activePart = InternalHandlerUtil.getActivePart(context);
+
+		if (activePart instanceof ISaveablePart)
+			return (ISaveablePart) activePart;
+
+		return InternalHandlerUtil.getActiveEditor(context);
+	}
+	
+	protected ISaveablePart getSaveablePart(ExecutionEvent event) {
+
+		IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
+		if (activePart instanceof ISaveablePart) {
+			return (ISaveablePart) activePart;
+		}
+
+		ISaveablePart part = (ISaveablePart) Util.getAdapter(activePart, ISaveablePart.class);
+		if (part != null)
+			return part;
+
+		return HandlerUtil.getActiveEditor(event);
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/CloseAllSavedHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/CloseAllSavedHandler.java
new file mode 100644
index 0000000..f7637bd
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/CloseAllSavedHandler.java	
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionInfo;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.internal.AbstractEvaluationHandler;
+import org.eclipse.ui.internal.InternalHandlerUtil;
+import org.eclipse.ui.internal.WorkbenchPage;
+import org.eclipse.ui.internal.util.Util;
+
+
+/**
+ * 
+ * @author Prakash G.R.
+ * @since 3.7
+ * 
+ */
+public class CloseAllSavedHandler extends AbstractEvaluationHandler {
+
+	private Expression enabledWhen;
+	private IWorkbenchPage page;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.internal.AbstractEvaluationHandler#getEnabledWhenExpression
+	 * ()
+	 */
+	protected Expression getEnabledWhenExpression() {
+		if (enabledWhen == null) {
+			enabledWhen = new Expression() {
+				public EvaluationResult evaluate(IEvaluationContext context) {
+					return CloseAllSavedHandler.this.evaluate(context);
+				}
+
+				/*
+				 * (non-Javadoc)
+				 * 
+				 * @see
+				 * org.eclipse.core.expressions.Expression#collectExpressionInfo
+				 * (org.eclipse.core.expressions.ExpressionInfo)
+				 */
+				public void collectExpressionInfo(ExpressionInfo info) {
+					// We use active part, so that we get evaluated for the part
+					// events
+					info.addVariableNameAccess(ISources.ACTIVE_PART_NAME);
+				}
+			};
+		}
+		return enabledWhen;
+	}
+
+	private EvaluationResult evaluate(IEvaluationContext context) {
+
+		IWorkbenchWindow window = InternalHandlerUtil.getActiveWorkbenchWindow(context);
+
+		setWindow(window);
+
+		return window != null && window.getActivePage() != null ? EvaluationResult.TRUE
+				: EvaluationResult.FALSE;
+	}
+
+	/**
+	 * @param window
+	 */
+	private void setWindow(IWorkbenchWindow window) {
+
+		if (Util.equals(page, window.getActivePage()))
+			return;
+
+		page = window.getActivePage();
+
+		update();
+	}
+
+	/**
+	 * @return Returns the page.
+	 */
+	public IWorkbenchPage getActivePage() {
+		return page;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
+	 * ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) {
+		IWorkbenchPage page = getActivePage();
+		if (page != null) {
+			((WorkbenchPage) page).closeAllSavedEditors();
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.internal.handlers.AbstractPageEventHandler#update()
+	 */
+	protected void update() {
+		IWorkbenchPage page = getActivePage();
+		if (page == null) {
+			setEnabled(false);
+			return;
+		}
+		IEditorReference editors[] = page.getEditorReferences();
+		for (int i = 0; i < editors.length; i++) {
+			if (!editors[i].isDirty()) {
+				setEnabled(true);
+				return;
+			}
+		}
+		setEnabled(false);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/DirtyStateTracker.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/DirtyStateTracker.java
new file mode 100644
index 0000000..6d68da6
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/DirtyStateTracker.java	
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IPropertyListener;
+import org.eclipse.ui.ISaveablePart;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.internal.Workbench;
+import org.eclipse.ui.services.IEvaluationService;
+
+/**
+ * @since 3.7
+ * 
+ */
+public class DirtyStateTracker implements IPartListener, IWindowListener,
+		IPropertyListener {
+
+	private final IWorkbench workbench;
+
+	public DirtyStateTracker() {
+
+		workbench = Workbench.getInstance();
+		workbench.addWindowListener(this);
+		IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
+		register(window);
+	}
+
+	public void update() {
+		IEvaluationService service = (IEvaluationService) workbench
+				.getService(IEvaluationService.class);
+		service.requestEvaluation(ISources.ACTIVE_PART_NAME);
+	}
+
+	/**
+	 * @param window
+	 */
+	private void register(IWorkbenchWindow window) {
+		if (window == null)
+			return;
+		window.getPartService().addPartListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void partActivated(IWorkbenchPart part) {
+		if (part instanceof ISaveablePart) {
+			part.addPropertyListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart
+	 * )
+	 */
+	public void partBroughtToTop(IWorkbenchPart part) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void partClosed(IWorkbenchPart part) {
+		if (part instanceof ISaveablePart) {
+			part.removePropertyListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart
+	 * )
+	 */
+	public void partDeactivated(IWorkbenchPart part) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void partOpened(IWorkbenchPart part) {
+		if (part instanceof ISaveablePart) {
+			part.addPropertyListener(this);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.
+	 * IWorkbenchWindow)
+	 */
+	public void windowActivated(IWorkbenchWindow window) {
+		register(window);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IWindowListener#windowDeactivated(org.eclipse.ui.
+	 * IWorkbenchWindow)
+	 */
+	public void windowDeactivated(IWorkbenchWindow window) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.IWindowListener#windowClosed(org.eclipse.ui.IWorkbenchWindow
+	 * )
+	 */
+	public void windowClosed(IWorkbenchWindow window) {
+		window.getPartService().removePartListener(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.ui.IWindowListener#windowOpened(org.eclipse.ui.IWorkbenchWindow
+	 * )
+	 */
+	public void windowOpened(IWorkbenchWindow window) {
+		register(window);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object,
+	 * int)
+	 */
+	public void propertyChanged(Object source, int propID) {
+		if (source instanceof ISaveablePart && propID == ISaveablePart.PROP_DIRTY) {
+			update();
+		}
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/DynamicHelpHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/DynamicHelpHandler.java
new file mode 100644
index 0000000..9be51d4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/DynamicHelpHandler.java	
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Prakash G.R.
+ * @since 3.7
+ * 
+ */
+public class DynamicHelpHandler extends AbstractHandler {
+
+	public Object execute(ExecutionEvent event) {
+
+		BusyIndicator.showWhile(null, new Runnable() {
+			public void run() {
+				PlatformUI.getWorkbench().getHelpSystem().displayDynamicHelp();
+			}
+		});
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/HelpContentsHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/HelpContentsHandler.java
new file mode 100644
index 0000000..ef3fa08
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/HelpContentsHandler.java	
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Prakash G.R.
+ * @since 3.7
+ * 
+ */
+public class HelpContentsHandler extends AbstractHandler {
+
+	public Object execute(ExecutionEvent event) {
+
+		BusyIndicator.showWhile(null, new Runnable() {
+			public void run() {
+				PlatformUI.getWorkbench().getHelpSystem().displayHelp();
+			}
+		});
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/HelpSearchHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/HelpSearchHandler.java
new file mode 100644
index 0000000..6975a74
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/HelpSearchHandler.java	
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Prakash G.R.
+ * @since 3.7
+ * 
+ */
+public class HelpSearchHandler extends AbstractHandler {
+
+	public Object execute(ExecutionEvent event) {
+
+		BusyIndicator.showWhile(null, new Runnable() {
+			public void run() {
+				PlatformUI.getWorkbench().getHelpSystem().displaySearch();
+			}
+		});
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/IntroHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/IntroHandler.java
new file mode 100644
index 0000000..f9421b4
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/IntroHandler.java	
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.internal.Workbench;
+import org.eclipse.ui.internal.intro.IntroDescriptor;
+import org.eclipse.ui.internal.intro.IntroMessages;
+
+/**
+ * 
+ * @author Prakash G.R.
+ * 
+ * @since 3.7
+ * 
+ */
+public class IntroHandler extends AbstractHandler {
+
+	private Workbench workbench;
+	private IntroDescriptor introDescriptor;
+
+	public IntroHandler() {
+		workbench = (Workbench) PlatformUI.getWorkbench();
+		introDescriptor = workbench.getIntroDescriptor();
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
+	 * ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) {
+
+		if (introDescriptor == null) {
+				MessageDialog.openWarning(HandlerUtil.getActiveShell(event),
+						IntroMessages.Intro_missing_product_title,
+						IntroMessages.Intro_missing_product_message);
+		} else {
+				IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
+				workbench.getIntroManager().showIntro(window, false);
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
+	 */
+	public boolean isEnabled() {
+
+		boolean enabled = false;
+		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		if (window != null) {
+			enabled = window.getPages().length > 0;
+		}
+		return enabled;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/LockToolBarHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/LockToolBarHandler.java
new file mode 100644
index 0000000..4fcb5d2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/LockToolBarHandler.java	
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.action.ICoolBarManager;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.internal.WorkbenchWindow;
+
+/**
+ * 
+ * @author Prakash G.R.
+ * 
+ * @since 3.7
+ * 
+ */
+public class LockToolBarHandler extends AbstractHandler {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
+	 * ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+
+		WorkbenchWindow workbenchWindow = (WorkbenchWindow) HandlerUtil
+				.getActiveWorkbenchWindow(event);
+		if (workbenchWindow != null) {
+			ICoolBarManager coolBarManager = workbenchWindow.getCoolBarManager2();
+			if (coolBarManager != null) {
+				boolean oldValue = HandlerUtil.toggleCommandState(event.getCommand());
+				coolBarManager.setLockLayout(!oldValue);
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/ResetPerspectiveHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/ResetPerspectiveHandler.java
new file mode 100644
index 0000000..9b5a063
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/ResetPerspectiveHandler.java	
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.internal.WorkbenchMessages;
+import org.eclipse.ui.internal.WorkbenchPage;
+import org.eclipse.ui.internal.registry.PerspectiveDescriptor;
+import org.eclipse.ui.internal.registry.PerspectiveRegistry;
+
+/**
+ * 
+ * @author Prakash G.R.
+ * 
+ * @since 3.7
+ * 
+ */
+public class ResetPerspectiveHandler extends AbstractHandler {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
+	 * ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) {
+
+		IWorkbenchWindow activeWorkbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event);
+		if (activeWorkbenchWindow != null) {
+			WorkbenchPage page = (WorkbenchPage) activeWorkbenchWindow.getActivePage();
+			if (page != null) {
+				IPerspectiveDescriptor descriptor = page.getPerspective();
+				if (descriptor != null) {
+					boolean offerRevertToBase = false;
+					if (descriptor instanceof PerspectiveDescriptor) {
+						PerspectiveDescriptor desc = (PerspectiveDescriptor) descriptor;
+						offerRevertToBase = desc.isPredefined() && desc.hasCustomDefinition();
+					}
+
+					if (offerRevertToBase) {
+						String message = NLS.bind(WorkbenchMessages.RevertPerspective_message,
+								descriptor.getLabel());
+						boolean toggleState = false;
+						MessageDialogWithToggle dialog = MessageDialogWithToggle.open(
+								MessageDialog.QUESTION, activeWorkbenchWindow.getShell(),
+								WorkbenchMessages.RevertPerspective_title, message,
+								WorkbenchMessages.RevertPerspective_option,
+								toggleState, null, null, SWT.SHEET);
+						if (dialog.getReturnCode() == IDialogConstants.YES_ID) {
+							if (dialog.getToggleState()) {
+								PerspectiveRegistry reg = (PerspectiveRegistry) PlatformUI
+										.getWorkbench().getPerspectiveRegistry();
+								reg.revertPerspective(descriptor);
+							}
+							page.resetPerspective();
+						}
+					} else {
+						String message = NLS.bind(WorkbenchMessages.ResetPerspective_message,
+								descriptor.getLabel());
+						boolean result = MessageDialog.open(MessageDialog.QUESTION,
+								activeWorkbenchWindow.getShell(),
+								WorkbenchMessages.ResetPerspective_title, message, SWT.SHEET);
+						if (result) {
+							page.resetPerspective();
+						}
+					}
+				}
+			}
+		}
+
+		return null;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveAllHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveAllHandler.java
new file mode 100644
index 0000000..06deb1d
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveAllHandler.java	
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.ui.ISaveablesLifecycleListener;
+import org.eclipse.ui.ISaveablesSource;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.Saveable;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.internal.InternalHandlerUtil;
+import org.eclipse.ui.internal.SaveablesList;
+import org.eclipse.ui.internal.WorkbenchPage;
+
+/**
+ * Saves all active editors
+ * <p>
+ * Replacement for SaveAllAction
+ * </p>
+ * 
+ * @since 3.7
+ * 
+ */
+public class SaveAllHandler extends AbstractSaveHandler {
+
+	public SaveAllHandler() {
+		registerEnablement();
+	}
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow window = HandlerUtil
+				.getActiveWorkbenchWindowChecked(event);
+		IWorkbenchPage page = window.getActivePage();
+		if (page != null) {
+			((WorkbenchPage) page).saveAllEditors(false, true);
+		}
+
+		return null;
+	}
+
+	protected EvaluationResult evaluate(IEvaluationContext context) {
+
+		IWorkbenchWindow window = InternalHandlerUtil.getActiveWorkbenchWindow(context);
+		// no window? not active
+		if (window == null)
+			return EvaluationResult.FALSE;
+		WorkbenchPage page = (WorkbenchPage) window.getActivePage();
+
+		// no page? not active
+		if (page == null)
+			return EvaluationResult.FALSE;
+
+		// if at least one dirty part, then we are active
+		if (page.getDirtyParts().length > 0)
+			return EvaluationResult.TRUE;
+
+		// Since Save All also saves saveables from non-part sources,
+		// look if any such saveables exist and are dirty.
+		SaveablesList saveablesList = (SaveablesList) window.getWorkbench().getService(
+				ISaveablesLifecycleListener.class);
+		ISaveablesSource[] nonPartSources = saveablesList.getNonPartSources();
+		for (int i = 0; i < nonPartSources.length; i++) {
+			Saveable[] saveables = nonPartSources[i].getSaveables();
+			for (int j = 0; j < saveables.length; j++) {
+				if (saveables[j].isDirty()) {
+					return EvaluationResult.TRUE;
+				}
+			}
+		}
+
+		// if nothing, then we are not active
+		return EvaluationResult.FALSE;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveAsHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveAsHandler.java
new file mode 100644
index 0000000..38cdff2
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveAsHandler.java	
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.ui.ISaveablePart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.internal.InternalHandlerUtil;
+import org.eclipse.ui.internal.WorkbenchPage;
+
+/**
+ * <p>
+ * Replacement for SaveAsAction
+ * </p>
+ * 
+ * @since 3.7
+ * 
+ */
+public class SaveAsHandler extends AbstractSaveHandler {
+
+	public SaveAsHandler() {
+		registerEnablement();
+	}
+
+	public Object execute(ExecutionEvent event) {
+
+		ISaveablePart saveablePart = getSaveablePart(event);
+
+		if (saveablePart != null)
+			saveablePart.doSaveAs();
+		
+		return null;
+	}
+
+	protected EvaluationResult evaluate(IEvaluationContext context) {
+
+		IWorkbenchWindow window = InternalHandlerUtil.getActiveWorkbenchWindow(context);
+		// no window? not active
+		if (window == null)
+			return EvaluationResult.FALSE;
+		WorkbenchPage page = (WorkbenchPage) window.getActivePage();
+
+		// no page? not active
+		if (page == null)
+			return EvaluationResult.FALSE;
+
+		// get saveable part
+		ISaveablePart saveablePart = getSaveablePart(context);
+		if (saveablePart == null)
+			return EvaluationResult.FALSE;
+
+		// if its availble, return whatever it says
+		return saveablePart.isSaveAsAllowed() ? EvaluationResult.TRUE : EvaluationResult.FALSE;
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveHandler.java
new file mode 100644
index 0000000..0214be7
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SaveHandler.java	
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.ISaveablePart;
+import org.eclipse.ui.ISaveablesSource;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.internal.InternalHandlerUtil;
+import org.eclipse.ui.internal.SaveableHelper;
+import org.eclipse.ui.internal.WorkbenchPage;
+
+/**
+ * <p>
+ * Replacement for SaveAction
+ * </p>
+ * 
+ * @since 3.7
+ * 
+ */
+public class SaveHandler extends AbstractSaveHandler {
+
+	public SaveHandler() {
+		registerEnablement();
+	}
+
+	public Object execute(ExecutionEvent event) {
+
+		ISaveablePart saveablePart = getSaveablePart(event);
+
+		// no saveable
+		if (saveablePart == null)
+			return null;
+
+		// if editor
+		if (saveablePart instanceof IEditorPart) {
+			IEditorPart editorPart = (IEditorPart) saveablePart;
+			IWorkbenchPage page = editorPart.getSite().getPage();
+			page.saveEditor(editorPart, false);
+			return null;
+		}
+
+		// if view
+		IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
+		WorkbenchPage page = (WorkbenchPage) activePart.getSite().getPage();
+		page.savePart(saveablePart, activePart, false);
+
+		return null;
+
+	}
+
+	protected EvaluationResult evaluate(IEvaluationContext context) {
+
+		IWorkbenchWindow window = InternalHandlerUtil.getActiveWorkbenchWindow(context);
+		// no window? not active
+		if (window == null)
+			return EvaluationResult.FALSE;
+		WorkbenchPage page = (WorkbenchPage) window.getActivePage();
+
+		// no page? not active
+		if (page == null)
+			return EvaluationResult.FALSE;
+
+		// get saveable part
+		ISaveablePart saveablePart = getSaveablePart(context);
+		if (saveablePart == null)
+			return EvaluationResult.FALSE;
+
+		if (saveablePart instanceof ISaveablesSource) {
+			ISaveablesSource modelSource = (ISaveablesSource) saveablePart;
+			if (SaveableHelper.needsSave(modelSource))
+				return EvaluationResult.TRUE;
+			return EvaluationResult.FALSE;
+		}
+
+		if (saveablePart != null && saveablePart.isDirty())
+			return EvaluationResult.TRUE;
+
+		return EvaluationResult.FALSE;
+	}
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SavePerspectiveHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SavePerspectiveHandler.java
new file mode 100644
index 0000000..e35d6b1
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/SavePerspectiveHandler.java	
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.internal.WorkbenchMessages;
+import org.eclipse.ui.internal.WorkbenchPage;
+import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.eclipse.ui.internal.dialogs.SavePerspectiveDialog;
+import org.eclipse.ui.internal.registry.PerspectiveDescriptor;
+import org.eclipse.ui.internal.registry.PerspectiveRegistry;
+
+/**
+ * 
+ * @author Prakash G.R.
+ * 
+ * @since 3.7
+ * 
+ */
+public class SavePerspectiveHandler extends AbstractHandler {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
+	 * ExecutionEvent)
+	 */
+	public Object execute(ExecutionEvent event) {
+
+		IWorkbenchWindow activeWorkbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event);
+		if (activeWorkbenchWindow != null) {
+			WorkbenchPage page = (WorkbenchPage) activeWorkbenchWindow.getActivePage();
+			if (page != null) {
+				PerspectiveDescriptor descriptor = (PerspectiveDescriptor) page.getPerspective();
+				if (descriptor != null) {
+					if (descriptor.isSingleton()) {
+						saveSingleton(page);
+					} else {
+						saveNonSingleton(page, descriptor);
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Save a singleton over itself.
+	 */
+	private void saveSingleton(IWorkbenchPage page) {
+		String[] buttons = new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL };
+		MessageDialog d = new MessageDialog(page.getWorkbenchWindow().getShell(),
+				WorkbenchMessages.SavePerspective_overwriteTitle, null,
+				WorkbenchMessages.SavePerspective_singletonQuestion, MessageDialog.QUESTION,
+				buttons, 0);
+		if (d.open() == 0) {
+			page.savePerspective();
+		}
+	}
+
+	/**
+	 * Save a singleton over the user selection.
+	 */
+	private void saveNonSingleton(IWorkbenchPage page, PerspectiveDescriptor oldDesc) {
+		// Get reg.
+		PerspectiveRegistry reg = (PerspectiveRegistry) WorkbenchPlugin.getDefault()
+				.getPerspectiveRegistry();
+
+		// Get persp name.
+		SavePerspectiveDialog dlg = new SavePerspectiveDialog(page.getWorkbenchWindow().getShell(),
+				reg);
+		// Look up the descriptor by id again to ensure it is still valid.
+		IPerspectiveDescriptor description = reg.findPerspectiveWithId(oldDesc.getId());
+		dlg.setInitialSelection(description);
+		if (dlg.open() != IDialogConstants.OK_ID) {
+			return;
+		}
+
+		// Create descriptor.
+		PerspectiveDescriptor newDesc = (PerspectiveDescriptor) dlg.getPersp();
+		if (newDesc == null) {
+			String name = dlg.getPerspName();
+			newDesc = reg.createPerspective(name, (PerspectiveDescriptor) description);
+			if (newDesc == null) {
+				MessageDialog.openError(dlg.getShell(),
+						WorkbenchMessages.SavePerspective_errorTitle,
+						WorkbenchMessages.SavePerspective_errorMessage);
+				return;
+			}
+		}
+
+		// Save state.
+		page.savePerspectiveAs(newDesc);
+	}
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WizardHandler.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WizardHandler.java
index 85a921a..4152547 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WizardHandler.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/WizardHandler.java	
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.handlers;
 
+import java.util.Map;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -28,6 +29,7 @@ import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.IWorkbenchWizard;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.IElementUpdater;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
 import org.eclipse.ui.internal.LegacyResourceSupport;
@@ -35,6 +37,7 @@ import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.dialogs.ImportExportWizard;
 import org.eclipse.ui.internal.dialogs.NewWizard;
 import org.eclipse.ui.internal.util.Util;
+import org.eclipse.ui.menus.UIElement;
 import org.eclipse.ui.wizards.IWizardDescriptor;
 import org.eclipse.ui.wizards.IWizardRegistry;
 
@@ -47,7 +50,7 @@ import org.eclipse.ui.wizards.IWizardRegistry;
  * 
  * @since 3.2
  */
-public abstract class WizardHandler extends AbstractHandler {
+public abstract class WizardHandler extends AbstractHandler implements IElementUpdater {
 
 	/**
 	 * Default handler for launching export wizards.
@@ -318,6 +321,19 @@ public abstract class WizardHandler extends AbstractHandler {
 		return StructuredSelection.EMPTY;
 	}
 
+	public void updateElement(UIElement element, Map parameters) {
+
+		String wizardId = (String) parameters.get(getWizardIdParameterId());
+		if (wizardId == null)
+			return;
+		IWizardDescriptor wizard = getWizardRegistry().findWizard(wizardId);
+		if (wizard != null) {
+			element.setText(wizard.getLabel());
+			element.setTooltip(wizard.getDescription());
+			element.setIcon(wizard.getImageDescriptor());
+		}
+	}
+
 	/**
 	 * Returns the id of the parameter used to indicate which wizard this
 	 * command should launch.
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/help/WorkbenchHelpSystem.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/help/WorkbenchHelpSystem.java
index 1870d6b..f280a4c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/help/WorkbenchHelpSystem.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/help/WorkbenchHelpSystem.java	
@@ -421,6 +421,9 @@ public final class WorkbenchHelpSystem implements IWorkbenchHelpSystem {
 	private AbstractHelpUI getHelpUI() {
 		if (!isInitialized) {
 			isInitialized = initializePluggableHelpUI();
+			if (!isInitialized)
+				WorkbenchPlugin.log("Unable to instantiate help UI");//$NON-NLS-1$
+
 		}
 		return pluggableHelpUI;
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingPersistence.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingPersistence.java
index a8cf0db..d499a23 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingPersistence.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingPersistence.java	
@@ -56,7 +56,6 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.WorkbenchException;
 import org.eclipse.ui.XMLMemento;
 import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.internal.ShowViewMenu;
 import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.misc.Policy;
 import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
@@ -579,7 +578,7 @@ public final class BindingPersistence extends PreferencePersistence {
 					parameterizedCommand = null;
 				} else if (viewParameter != null) { 
 					HashMap parms = new HashMap();
-					parms.put(ShowViewMenu.VIEW_ID_PARM, viewParameter);
+					parms.put(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID, viewParameter);
 					parameterizedCommand = ParameterizedCommand.generateCommand(command, parms);
 				} else {
 					parameterizedCommand = readParameters(memento,
@@ -942,7 +941,7 @@ public final class BindingPersistence extends PreferencePersistence {
 			parameterizedCommand = null;
 		} else if (viewParameter != null) { 
 			HashMap parms = new HashMap();
-			parms.put(ShowViewMenu.VIEW_ID_PARM, viewParameter);
+			parms.put(IWorkbenchCommandConstants.VIEWS_SHOW_VIEW_PARM_ID, viewParameter);
 			parameterizedCommand = ParameterizedCommand.generateCommand(command, parms);
 		} else {
 			parameterizedCommand = readParameters(configurationElement,
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java
index e3a5561..ca97c8d 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,9 @@ package org.eclipse.ui.internal.keys;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
-
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.NotEnabledException;
+import org.eclipse.core.commands.NotHandledException;
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.jface.bindings.Binding;
@@ -25,11 +27,17 @@ import org.eclipse.jface.bindings.keys.SWTKeySupport;
 import org.eclipse.jface.bindings.keys.formatting.KeyFormatterFactory;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.eclipse.ui.internal.keys.WorkbenchKeyboard.KeyDownFilter;
+import org.eclipse.ui.internal.misc.StatusUtil;
 import org.eclipse.ui.keys.IBindingService;
+import org.eclipse.ui.statushandlers.StatusManager;
 
 /**
  * <p>
@@ -62,6 +70,8 @@ public final class BindingService implements IBindingService {
 
 	private IWorkbench workbench;
 
+	private Listener backForwardListener;
+
 	/**
 	 * Constructs a new instance of <code>BindingService</code> using a JFace
 	 * binding manager.
@@ -93,13 +103,50 @@ public final class BindingService implements IBindingService {
 		// Hook up the key binding support.
 		keyboard = new WorkbenchKeyboard(workbench);
 		final Display display = workbench.getDisplay();
-		final Listener listener = keyboard.getKeyDownFilter();
+		final KeyDownFilter listener = keyboard.getKeyDownFilter();
+		listener.setEnabled(false);
 		display.addFilter(SWT.KeyDown, listener);
 		display.addFilter(SWT.Traverse, listener);
 
 		// Initialize the key formatter.
 		KeyFormatterFactory.setDefault(SWTKeySupport
 				.getKeyFormatterForPlatform());
+
+		// Hook up the back/forward mouse buttons / special keys.
+		backForwardListener = new Listener() {
+			public void handleEvent(Event event) {
+				String commandId;
+				switch (event.button) {
+				case 4:
+				case 8:
+					commandId = IWorkbenchCommandConstants.NAVIGATE_BACKWARD_HISTORY;
+					break;
+				case 5:
+				case 9:
+					commandId = IWorkbenchCommandConstants.NAVIGATE_FORWARD_HISTORY;
+					break;
+				default:
+					return;
+				}
+
+				final IHandlerService handlerService = (IHandlerService) workbench
+						.getService(IHandlerService.class);
+
+				try {
+					handlerService.executeCommand(commandId, event);
+					event.doit = false;
+				} catch (NotDefinedException e) {
+					// regular condition; do nothing
+				} catch (NotEnabledException e) {
+					// regular condition; do nothing
+				} catch (NotHandledException e) {
+					// regular condition; do nothing
+				} catch (ExecutionException ex) {
+					StatusUtil.handleStatus(ex, StatusManager.SHOW | StatusManager.LOG);
+				}
+			}
+		};
+		display.addFilter(SWT.MouseDown, backForwardListener);
 	}
 
 	/**
@@ -126,10 +173,12 @@ public final class BindingService implements IBindingService {
 		if (display != null) {
 			display.removeFilter(SWT.KeyDown, listener);
 			display.removeFilter(SWT.Traverse, listener);
+			display.removeFilter(SWT.MouseDown, backForwardListener);
 		}
 		workbench = null;
 		keyboard = null;
 		bindingPersistence.dispose();
+		backForwardListener = null;
 	}
 
 	public final TriggerSequence[] getActiveBindingsFor(
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/KeysPreferenceFiltersDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/KeysPreferenceFiltersDialog.java
index 47e151d..df9765e 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/KeysPreferenceFiltersDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/KeysPreferenceFiltersDialog.java	
@@ -18,6 +18,7 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.Workbench;
 import org.eclipse.ui.preferences.ViewSettingsDialog;
 
 /**
@@ -32,10 +33,12 @@ public class KeysPreferenceFiltersDialog extends ViewSettingsDialog {
 	private Button actionSetFilterCheckBox;
 	private Button internalFilterCheckBox;
 	private Button uncategorizedFilterCheckBox;
+	private Button workbenchMenuFilterCheckBox;
 
 	private boolean filterActionSet;
 	private boolean filterInternal;
 	private boolean filterUncategorized;
+	private boolean filterWorkbenchMenu;
 	private boolean filterShowUnboundCommands;
 
 	void setFilterActionSet(boolean b) {
@@ -46,6 +49,10 @@ public class KeysPreferenceFiltersDialog extends ViewSettingsDialog {
 		filterInternal = b;
 	}
 	
+	void setFilterWorkbenchMenu(boolean b) {
+		filterWorkbenchMenu = b;
+	}
+
 	void setFilterUncategorized(boolean b) {
 		filterUncategorized = b;
 	}
@@ -62,6 +69,10 @@ public class KeysPreferenceFiltersDialog extends ViewSettingsDialog {
 		return filterUncategorized;
 	}
 
+	boolean getFilterWorkbenchMenu() {
+		return filterWorkbenchMenu;
+	}
+
 	/**
 	 * @param parentShell
 	 */
@@ -78,6 +89,7 @@ public class KeysPreferenceFiltersDialog extends ViewSettingsDialog {
 		actionSetFilterCheckBox.setSelection(true);
 		internalFilterCheckBox.setSelection(true);
 		uncategorizedFilterCheckBox.setSelection(true);
+		workbenchMenuFilterCheckBox.setSelection(!Workbench.getInstance().hasAppMenu());
 		super.performDefaults();
 	}
 
@@ -101,9 +113,15 @@ public class KeysPreferenceFiltersDialog extends ViewSettingsDialog {
 		uncategorizedFilterCheckBox
 				.setText(NewKeysPreferenceMessages.UncategorizedFilterCheckBox_Text);
 
+		workbenchMenuFilterCheckBox = new Button(topComposite, SWT.CHECK);
+		workbenchMenuFilterCheckBox
+				.setText(NewKeysPreferenceMessages.WorkbenchMenuFilterCheckBox_Text);
+
 		actionSetFilterCheckBox.setSelection(filterActionSet);
 		internalFilterCheckBox.setSelection(filterInternal);
 		uncategorizedFilterCheckBox.setSelection(filterUncategorized);
+		workbenchMenuFilterCheckBox.setSelection(filterWorkbenchMenu);
+
 		applyDialogFont(topComposite);
 
 		return topComposite;
@@ -118,6 +136,7 @@ public class KeysPreferenceFiltersDialog extends ViewSettingsDialog {
 		filterActionSet = actionSetFilterCheckBox.getSelection();
 		filterInternal = internalFilterCheckBox.getSelection();
 		filterUncategorized = uncategorizedFilterCheckBox.getSelection();
+		filterWorkbenchMenu = workbenchMenuFilterCheckBox.getSelection();
 		super.okPressed();
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferenceMessages.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferenceMessages.java
index cdda389..29dd7d1 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferenceMessages.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferenceMessages.java	
@@ -62,6 +62,7 @@ public class NewKeysPreferenceMessages extends NLS {
 	public static String ActionSetFilterCheckBox_Text;
 	public static String InternalFilterCheckBox_Text;
 	public static String UncategorizedFilterCheckBox_Text;
+	public static String WorkbenchMenuFilterCheckBox_Text;
 	
 	static {
 		// load message values from bundle file
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.java
index 562d660..2b1a389 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.java	
@@ -92,6 +92,7 @@ import org.eclipse.ui.commands.ICommandImageService;
 import org.eclipse.ui.commands.ICommandService;
 import org.eclipse.ui.dialogs.FilteredTree;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
+import org.eclipse.ui.internal.Workbench;
 import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.internal.keys.model.BindingElement;
 import org.eclipse.ui.internal.keys.model.BindingModel;
@@ -168,6 +169,8 @@ public class NewKeysPreferencePage extends PreferencePage implements
 
 	private boolean fFilterInternalContexts = true;
 
+	private boolean fFilterWorkbenchMenuContext = !Workbench.getInstance().hasAppMenu();
+
 	private KeyController keyController;
 
 	private Category fDefaultCategory;
@@ -569,17 +572,20 @@ public class NewKeysPreferencePage extends PreferencePage implements
 						getShell());
 				dialog.setFilterActionSet(fFilterActionSetContexts);
 				dialog.setFilterInternal(fFilterInternalContexts);
+				dialog.setFilterWorkbenchMenu(fFilterWorkbenchMenuContext);
+
 				dialog.setFilterUncategorized(fFilteredTree
 						.isFilteringCategories());
 				if (dialog.open() == Window.OK) {
 					fFilterActionSetContexts = dialog.getFilterActionSet();
 					fFilterInternalContexts = dialog.getFilterInternal();
+					fFilterWorkbenchMenuContext = dialog.getFilterWorkbenchMenu();
 					fFilteredTree.filterCategories(dialog
 							.getFilterUncategorized());
 
 					// Apply context filters
-					keyController.filterContexts(fFilterActionSetContexts,
-							fFilterInternalContexts);
+					keyController.filterContexts(fFilterActionSetContexts, fFilterInternalContexts,
+							fFilterWorkbenchMenuContext);
 
 					ISelection currentContextSelection = fWhenCombo
 							.getSelection();
@@ -1166,8 +1172,8 @@ public class NewKeysPreferencePage extends PreferencePage implements
 				.getSchemeModel().getSelectedElement()));
 
 		// Apply context filters
-		keyController.filterContexts(fFilterActionSetContexts,
-				fFilterInternalContexts);
+		keyController.filterContexts(fFilterActionSetContexts, fFilterInternalContexts,
+				fFilterWorkbenchMenuContext);
 		fWhenCombo.setInput(keyController.getContextModel());
 
 		fFilteredTree.filterCategories(fPatternFilter.isFilteringCategories());
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.properties b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.properties
index 3e53da3..4884d9e 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.properties	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/NewKeysPreferencePage.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2008 IBM Corporation and others.
+# Copyright (c) 2005, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@ ExportButton_Text = E&xport CSV...
 BindingLabel_Text = &Binding:
 CommandNameColumn_Text = Command
 CommandNameLabel_Text = &Name:
-CommandDescriptionLabel_Text = &Description:
+CommandDescriptionLabel_Text = D&escription:
 CategoryColumn_Text= Category
 UserColumn_Text= User
 DeleteSchemeButton_Text = D&elete
@@ -49,5 +49,6 @@ Undefined_Context=Undefined Context
 ActionSetFilterCheckBox_Text= Filter &action set contexts
 InternalFilterCheckBox_Text = Filter &internal contexts
 UncategorizedFilterCheckBox_Text = Filter &uncategorized commands
+WorkbenchMenuFilterCheckBox_Text = Filter &Workbench Menu Context
 KeysPreferenceFilterDialog_Title= When Context Filters
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/ContextModel.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/ContextModel.java
index ec0842a..7adcb8d 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/ContextModel.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/ContextModel.java	
@@ -16,7 +16,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.core.commands.contexts.Context;
 import org.eclipse.ui.contexts.IContextService;
@@ -104,8 +103,10 @@ public class ContextModel extends CommonModel {
 	 *            <code>true</code> to filter action set contexts.
 	 * @param internal
 	 *            <code>true</code> to filter internal contexts
+	 * @param workbenchMenu
+	 *            <code>true</code> to filter Workbench Menu Context
 	 */
-	public void filterContexts(boolean actionSets, boolean internal) {
+	public void filterContexts(boolean actionSets, boolean internal, boolean workbenchMenu) {
 		// Remove undesired contexts
 		for (int i = 0; i < contexts.size(); i++) {
 			boolean removeContext = false;
@@ -137,6 +138,11 @@ public class ContextModel extends CommonModel {
 				removeContext = true;
 			}
 
+			if (workbenchMenu == true
+					&& contextElement.getId().equals(IContextService.CONTEXT_ID_WORKBENCH_MENU)) {
+				removeContext = true;
+			}
+
 			if (removeContext) {
 				contextIdToFilteredContexts.put(contextElement.getId(),
 						contextElement);
@@ -154,12 +160,15 @@ public class ContextModel extends CommonModel {
 					.get(iterator.next());
 
 			try {
-				if (actionSets == false
-						&& (contextElement.getId().equalsIgnoreCase(
-								CONTEXT_ID_ACTION_SETS) || ((Context) contextElement
-								.getModelObject()).getParentId()
-								.equalsIgnoreCase(CONTEXT_ID_ACTION_SETS))) {
-					restoreContext = true;
+				if (actionSets == false) {
+					if (contextElement.getId().equalsIgnoreCase(CONTEXT_ID_ACTION_SETS)) {
+						restoreContext = true;
+					} else {
+						String parentId = ((Context) contextElement.getModelObject()).getParentId();
+						if (parentId != null && parentId.equalsIgnoreCase(CONTEXT_ID_ACTION_SETS)) {
+							restoreContext = true;
+						}
+					}
 				}
 			} catch (NotDefinedException e) {
 				// No parentId to check
@@ -169,6 +178,11 @@ public class ContextModel extends CommonModel {
 				restoreContext = true;
 			}
 
+			if (workbenchMenu == false
+					&& contextElement.getId().equals(IContextService.CONTEXT_ID_WORKBENCH_MENU)) {
+				restoreContext = true;
+			}
+
 			if (restoreContext) {
 				contexts.add(contextElement);
 				contextIdToElement.put(contextElement.getId(), contextElement);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/KeyController.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/KeyController.java
index f582148..8954b1c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/KeyController.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/model/KeyController.java	
@@ -466,11 +466,12 @@ public class KeyController {
 	 * @param actionSets
 	 *            <code>true</code> to filter action set contexts
 	 * @param internal
-	 *            <code>false</code> to filter internal contexts
-	 * 
+	 *            <code>true</code> to filter internal contexts
+	 * @param workbenchMenu
+	 *            <code>true</code> to filter Workbench Menu Context
 	 */
-	public void filterContexts(boolean actionSets, boolean internal) {
-		contextModel.filterContexts(actionSets, internal);
+	public void filterContexts(boolean actionSets, boolean internal, boolean workbenchMenu) {
+		contextModel.filterContexts(actionSets, internal, workbenchMenu);
 	}
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/layout/IWindowTrim.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/layout/IWindowTrim.java
index 7c43d6b..89aee0f 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/layout/IWindowTrim.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/layout/IWindowTrim.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,9 +19,9 @@ import org.eclipse.swt.widgets.Control;
  * <p>
  * <b>Note:</b> This interface is highly experimental, and will probably change
  * between M4 and M5. For example, it will support a "lifecycle" that allows the
- * {@link ITrimManager} to update its modifiers (like SWT.TOP or SWT.LEFT) so the
- * IWindowTrim can dispose and re-create its control. This will likely effect
- * methods like {@link #dock(int) }, {@link #getControl() },
+ * {@link ITrimManager} to update its modifiers (like SWT.TOP or SWT.LEFT) so
+ * the IWindowTrim can dispose and re-create its control. This will likely
+ * affect methods like {@link #dock(int) }, {@link #getControl() },
  * {@link #getValidSides() }, etc.
  * </p>
  * 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicMenuContributionItem.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicMenuContributionItem.java
index 8aa2746..e14822c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicMenuContributionItem.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicMenuContributionItem.java	
@@ -89,6 +89,78 @@ public class DynamicMenuContributionItem extends ContributionItem {
 	/*
 	 * (non-Javadoc)
 	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isEnabled()
+	 */
+	public boolean isEnabled() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isEnabled();
+		}
+		return super.isEnabled();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isGroupMarker()
+	 */
+	public boolean isGroupMarker() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isGroupMarker();
+		}
+		return super.isGroupMarker();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isSeparator()
+	 */
+	public boolean isSeparator() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isSeparator();
+		}
+		return super.isSeparator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isVisible()
+	 */
+	public boolean isVisible() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isVisible();
+		}
+		return super.isVisible();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#saveWidgetState()
+	 */
+	public void saveWidgetState() {
+		if (loadedDynamicContribution != null) {
+			loadedDynamicContribution.saveWidgetState();
+		}
+		super.saveWidgetState();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#setVisible(boolean)
+	 */
+	public void setVisible(boolean visible) {
+		if (loadedDynamicContribution != null) {
+			loadedDynamicContribution.setVisible(visible);
+		}
+		super.setVisible(visible);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see
 	 * org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets
 	 * .Composite)
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicToolBarContributionItem.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicToolBarContributionItem.java
index cac3a91..b0cb4b9 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicToolBarContributionItem.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/DynamicToolBarContributionItem.java	
@@ -89,6 +89,78 @@ public class DynamicToolBarContributionItem extends WorkbenchWindowControlContri
 	/*
 	 * (non-Javadoc)
 	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isEnabled()
+	 */
+	public boolean isEnabled() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isEnabled();
+		}
+		return super.isEnabled();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isGroupMarker()
+	 */
+	public boolean isGroupMarker() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isGroupMarker();
+		}
+		return super.isGroupMarker();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isSeparator()
+	 */
+	public boolean isSeparator() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isSeparator();
+		}
+		return super.isSeparator();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#saveWidgetState()
+	 */
+	public void saveWidgetState() {
+		if (loadedDynamicContribution != null) {
+			loadedDynamicContribution.saveWidgetState();
+		}
+		super.saveWidgetState();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#setVisible(boolean)
+	 */
+	public void setVisible(boolean visible) {
+		if (loadedDynamicContribution != null) {
+			loadedDynamicContribution.setVisible(visible);
+		}
+		super.setVisible(visible);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jface.action.ContributionItem#isVisible()
+	 */
+	public boolean isVisible() {
+		if (loadedDynamicContribution != null) {
+			return loadedDynamicContribution.isVisible();
+		}
+		return super.isVisible();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see
 	 * org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets
 	 * .CoolBar, int)
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuPersistence.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuPersistence.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/WorkbenchMenuService.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/WorkbenchMenuService.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
index be5099f..a443ba8 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties	
@@ -200,7 +200,11 @@ ResetPerspective_text = &Reset Perspective...
 ResetPerspective_toolTip = Reset Perspective
 ResetPerspective_message = Do you want to reset the current {0} perspective to its defaults?
 ResetPerspective_title = Reset Perspective
-RevertPerspective_note=Reset takes effect the next time the perspective is opened
+RevertPerspective_note='Revert' removes the customization from the selected perspective.\nThis only applies to newly opened perspectives.
+
+RevertPerspective_title = Reset Perspective
+RevertPerspective_message = Do you want to reset the current {0} perspective to its saved state?
+RevertPerspective_option = &Also discard perspective's customization
 
 ClosePerspectiveAction_text = &Close Perspective
 ClosePerspectiveAction_toolTip = Close Perspective
@@ -417,7 +421,7 @@ ViewsPreference_currentThemeDescription = Descr&iption:
 ViewsPreference_override=O&verride presentation settings
 ViewsPreference_currentThemeFormat = {0} (current)
 ViewsPreference_enableAnimations = Enable a&nimations
-ViewsPreference_useColoredLabels = Use mixe&d fonts and colors for labels
+ViewsPreference_useColoredLabels = &Use mixed fonts and colors for labels
 ViewsPreference_restartRequestJobName = Restart Request
 
 # --- File Editors ---
@@ -439,6 +443,7 @@ FileExtension_fileNameInvalidMessage = The file name cannot include the wild car
 FilteredPreferenceDialog_Key_Scrolling=Key &Scrolling
 FilteredPreferenceDialog_PreferenceSaveFailed=Preferences save failed.
 FilteredPreferenceDialog_Resize = &Resize tree
+FilteredPreferenceDialog_FilterToolTip = Menu
 
 
 FileExtension_fileTypeMessage =  Enter file type to add: (*.doc or report.doc for example)
@@ -467,8 +472,8 @@ FastViewBar_hide = &Hide empty fast view bar
 
 PerspectivesPreference_MakeDefault = Ma&ke Default
 PerspectivesPreference_MakeDefaultTip = Make the Current Selection the Default Perspective
-PerspectivesPreference_Reset = &Reset
-PerspectivesPreference_ResetTip = Reset the Current Selection to its Original Value
+PerspectivesPreference_Reset = &Revert
+PerspectivesPreference_ResetTip = Reverts the Current Selection to its Original Value
 PerspectivesPreference_Delete = D&elete
 PerspectivesPreference_DeleteTip = Delete a User Defined Perspective
 PerspectivesPreference_available = Available &perspectives:
@@ -491,7 +496,7 @@ WorkbenchPreference_doubleClick=D&ouble click
 WorkbenchPreference_singleClick=&Single click
 WorkbenchPreference_singleClick_SelectOnHover=Select on &hover
 WorkbenchPreference_singleClick_OpenAfterDelay=Open when using arrow &keys
-WorkbenchPreference_noEffectOnAllViews=This preference may not take effect on all views
+WorkbenchPreference_noEffectOnAllViews=This preference may not take effect on all views.
 
 # --- Fonts ---
 FontsPreference_useSystemFont=&Use System Font
@@ -581,7 +586,7 @@ EditorManager_invalid_editor_descriptor=Invalid editor descriptor for id {0}
 EditorManager_problemsSavingEditors=Problems occurred saving editors.
 EditorManager_unableToSaveEditor=Unable to save editor: {0}.
 EditorManager_backgroundSaveJobName=Saving {0}
-
+EditorManager_largeDocumentWarning= The document you are trying to open is large. This may affect the stability of the application. Opening with an external program is recommended.
 EditorPane_pinEditor=&Pin Editor
 
 ExternalEditor_errorMessage = Error opening external editor ({0}).
@@ -887,7 +892,7 @@ FastViewBar_view_orientation=&Orientation
 FastViewBar_horizontal=&Horizontal
 FastViewBar_vertical=&Vertical
 FastViewBar_show_view=&New Fast View
-FastViewBar_0=Show View as a fast view
+FastViewBar_0=Show View as a Fast View
 
 WorkbenchPlugin_extension=Cannot create extension
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java
index 022f598..e2c574d 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/misc/Policy.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,8 @@ public class Policy {
 
     public static boolean DEBUG_DRAG_DROP = DEFAULT;
 
+	public static boolean DEBUG_PERSPECTIVES = DEFAULT;
+
     /**
      * Flag to log stale jobs
      */
@@ -165,6 +167,7 @@ public class Policy {
         if (getDebugOption("/debug")) { //$NON-NLS-1$
 			DEBUG_UI_GLOBAL = true;
             DEBUG_SWT_GRAPHICS = getDebugOption("/trace/graphics"); //$NON-NLS-1$
+			DEBUG_PERSPECTIVES = getDebugOption("/trace/perspectives"); //$NON-NLS-1$
             DEBUG_SWT_DEBUG = getDebugOption("/debug/swtdebug"); //$NON-NLS-1$
             DEBUG_SWT_DEBUG_GLOBAL = getDebugOption("/debug/swtdebugglobal"); //$NON-NLS-1$
             DEBUG_DRAG_DROP = getDebugOption("/trace/dragDrop"); //$NON-NLS-1$
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/part/StatusPart.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/part/StatusPart.java
index 3edea87..0c6347f 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/part/StatusPart.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/part/StatusPart.java	
@@ -12,11 +12,12 @@ package org.eclipse.ui.internal.part;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Color;
@@ -206,8 +207,13 @@ public class StatusPart {
 				}
 			}
 		});
-		button.setImage(descriptor.getImageDescriptor().createImage());
-		button
-				.setToolTipText(WorkbenchMessages.ErrorLogUtil_ShowErrorLogTooltip);
+		final Image image = descriptor.getImageDescriptor().createImage();
+		button.setImage(image);
+		button.setToolTipText(WorkbenchMessages.ErrorLogUtil_ShowErrorLogTooltip);
+		button.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				image.dispose();
+			}
+		});
     }
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/AbstractTableInformationControl.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/AbstractTableInformationControl.java
index 99f64d6..73be4e8 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/AbstractTableInformationControl.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/AbstractTableInformationControl.java	
@@ -11,7 +11,12 @@
 package org.eclipse.ui.internal.presentations;
 
 import org.eclipse.core.runtime.Platform;
-
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.FocusListener;
@@ -46,14 +51,6 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Text;
-
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.misc.StringMatcher;
 import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabItem;
@@ -284,6 +281,10 @@ public abstract class AbstractTableInformationControl {
 				}
                 if (table.equals(e.getSource()) & ++divCount == ignoreEventCount) {
                     Object o = table.getItem(new Point(e.x, e.y));
+                    if (fLastItem == null ^ o == null) {
+						table.setCursor(o == null ? null : table.getDisplay().getSystemCursor(
+								SWT.CURSOR_HAND));
+                    }
                     if (o instanceof TableItem && lastY != e.y) {
                         lastY = e.y;
                         if (!o.equals(fLastItem)) {
@@ -304,6 +305,8 @@ public abstract class AbstractTableInformationControl {
                                 table.setSelection(new TableItem[] { fLastItem });
                             }
                         }
+                    } else if (o == null) {
+                        fLastItem = null;
                     }
                 }
             }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/SystemMenuMove.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/SystemMenuMove.java
index a98308f..5a1e653 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/SystemMenuMove.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/SystemMenuMove.java	
@@ -60,4 +60,7 @@ public class SystemMenuMove extends MenuManager {
         super.update(force, recursive);
     }
 
+	public void update() {
+		update(false, false);
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultPartList.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultPartList.java
index 02954a5..997d6e7 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultPartList.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/presentations/defaultpresentation/DefaultPartList.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,7 +66,7 @@ public class DefaultPartList implements ISystemMenu {
                 SWT.Deactivate, new Listener() {
 
                     public void handleEvent(Event event) {
-                        editorList.setVisible(false);
+						editorList.setVisible(false);
                     }
                 }
         	);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java
index bcd8343..f3dc4dc 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/FinishedJobs.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -109,22 +109,31 @@ public class FinishedJobs extends EventManager {
 	static boolean keep(JobInfo info) {
 		Job job = info.getJob();
 		if (job != null) {
-			Object prop = job.getProperty(ProgressManagerUtil.KEEP_PROPERTY);
-			if (prop instanceof Boolean) {
-				if (((Boolean) prop).booleanValue()) {
-					return true;
-				}
+			if (hasKeepFlag(job))
+				return true;
+
+			IStatus status = job.getResult();
+			if (status != null && status.getSeverity() == IStatus.ERROR) {
+				return true;
 			}
+		}
+		return false;
+	}
 
-			prop = job.getProperty(ProgressManagerUtil.KEEPONE_PROPERTY);
-			if (prop instanceof Boolean) {
-				if (((Boolean) prop).booleanValue()) {
-					return true;
-				}
+	/**
+	 * Returns true if job has one of keep flags set.
+	 */
+	static boolean hasKeepFlag(Job job) {
+		Object prop = job.getProperty(ProgressManagerUtil.KEEP_PROPERTY);
+		if (prop instanceof Boolean) {
+			if (((Boolean) prop).booleanValue()) {
+				return true;
 			}
+		}
 
-			IStatus status = job.getResult();
-			if (status != null && status.getSeverity() == IStatus.ERROR) {
+		prop = job.getProperty(ProgressManagerUtil.KEEPONE_PROPERTY);
+		if (prop instanceof Boolean) {
+			if (((Boolean) prop).booleanValue()) {
 				return true;
 			}
 		}
@@ -288,6 +297,22 @@ public class FinishedJobs extends EventManager {
 				JobInfo info1 = (JobInfo) infos[i];
 				Job job = info1.getJob();
 				if (job != null) {
+
+					// do not remove error jobs that have keep flag set
+					if (hasKeepFlag(job)){
+						// but mark the job as reported to prevent displaying
+						// the same job error many times
+						info1.setReported(true);
+						// notify listeners to force refresh
+						Object l[] = getListeners();
+						for (int j = 0; j < l.length; j++) {
+							KeptJobsListener jv = (KeptJobsListener) l[j];
+							jv.removed(null);
+						}
+						//proceed with next entry
+						continue;
+					}
+
 					IStatus status = job.getResult();
 					if (status != null && status.getSeverity() == IStatus.ERROR) {
 						JobTreeElement topElement = (JobTreeElement) info1
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java
index 4c114d0..5a59787 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java	
@@ -30,6 +30,13 @@ public class JobInfo extends JobTreeElement {
     private IStatus blockedStatus;
 
     private volatile boolean canceled = false;
+
+	/**
+	 * This flag controls whether the job result was passed to status handling in
+	 * order to display it.
+	 */
+	private volatile boolean reported = false;
+
     private List children = Collections.synchronizedList(new ArrayList());
 
     private Job job;
@@ -382,6 +389,14 @@ public class JobInfo extends JobTreeElement {
         return getJob().getState() != Job.NONE;
     }
 
+	boolean isReported() {
+		return reported;
+	}
+
+	void setReported(boolean errorReported) {
+		this.reported = errorReported;
+	}
+
     /**
      * Return whether or not the receiver is blocked.
      * 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressAnimationItem.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressAnimationItem.java
index 6e1b98b..7f11608 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressAnimationItem.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressAnimationItem.java	
@@ -103,6 +103,10 @@ public class ProgressAnimationItem extends AnimationItem implements
 		for (int i = jobTreeElements.length - 1; i >= 0; i--) {
 			if (jobTreeElements[i] instanceof JobInfo) {
 				JobInfo ji = (JobInfo) jobTreeElements[i];
+				if (ji.isReported()) {
+					// the error was already reported, so do nothing.
+					continue;
+				}
 				Job job = ji.getJob();
 				if (job != null) {
 
@@ -117,10 +121,19 @@ public class ProgressAnimationItem extends AnimationItem implements
 						StatusManager.getManager().handle(statusAdapter,
 								StatusManager.SHOW);
 
-						removeTopElement(ji);
+						if (FinishedJobs.keep(ji)) {
+							ji.setReported(true);
+						} else {
+							removeTopElement(ji);
+						}
 					}
 
-					execute(ji, job);
+					// To fix a bug (335543) introduced in 3.6.1.
+					// doAction() should return if progress region button was
+					// selected to open a job result action or command.
+					if (execute(ji, job)) {
+						return;
+					}
 				}
 			}
 		}
@@ -132,14 +145,16 @@ public class ProgressAnimationItem extends AnimationItem implements
 	/**
 	 * @param ji
 	 * @param job
+	 * @return <code>true</code> if Action or Command is executed
 	 */
-	private void execute(JobInfo ji, Job job) {
+	private boolean execute(JobInfo ji, Job job) {
 
 		Object prop = job.getProperty(IProgressConstants2.ACTION_PROPERTY);
 		if (prop instanceof IAction && ((IAction) prop).isEnabled()) {
 			IAction action = (IAction) prop;
 			action.run();
 			removeTopElement(ji);
+			return true;
 		}
 
 		prop = job.getProperty(IProgressConstants2.COMMAND_PROPERTY);
@@ -168,8 +183,9 @@ public class ProgressAnimationItem extends AnimationItem implements
 				StatusManager.getManager().handle(status,
 						StatusManager.LOG | StatusManager.SHOW);
 			}
-
+			return true;
 		}
+		return false;
 	}
 
 	/**
@@ -209,7 +225,7 @@ public class ProgressAnimationItem extends AnimationItem implements
 			if (jobTreeElements[i] instanceof JobInfo) {
 				JobInfo ji = (JobInfo) jobTreeElements[i];
 				Job job = ji.getJob();
-				if (job != null) {
+				if ((job != null) && (!ji.isReported())) {
 					IStatus status = job.getResult();
 					if (status != null && status.getSeverity() == IStatus.ERROR) {
 						// green arrow with error overlay
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorFocusJobDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorFocusJobDialog.java
index d87cc2e..a507fe1 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorFocusJobDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressMonitorFocusJobDialog.java	
@@ -1,12 +1,13 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- * IBM - Initial API and implementation
+ *    IBM - Initial API and implementation
+ *    Markus Schorn (Wind River Systems)
  *******************************************************************************/
 package org.eclipse.ui.internal.progress;
 
@@ -413,20 +414,35 @@ class ProgressMonitorFocusJobDialog extends ProgressMonitorJobsDialog {
 
 		setOpenOnRun(false);
 		aboutToRun();
-		// start with a quick busy indicator. Lock the UI as we
+
+		final Object jobIsDone = new Object();
+		final JobChangeAdapter jobListener = new JobChangeAdapter() {
+			public void done(IJobChangeEvent event) {
+				synchronized (jobIsDone) {
+					jobIsDone.notify();
+				}
+			}
+		};
+		job.addJobChangeListener(jobListener);
+
+		// Start with a quick busy indicator. Lock the UI as we
 		// want to preserve modality
 		BusyIndicator.showWhile(PlatformUI.getWorkbench().getDisplay(),
 				new Runnable() {
 					public void run() {
 						try {
-							Thread
-									.sleep(ProgressManagerUtil.SHORT_OPERATION_TIME);
+							synchronized (jobIsDone) {
+								if (job.getState() != Job.NONE) {
+									jobIsDone.wait(ProgressManagerUtil.SHORT_OPERATION_TIME);
+								}
+							}
 						} catch (InterruptedException e) {
 							// Do not log as this is a common operation from the
 							// lock listener
 						}
 					}
 				});
+		job.removeJobChangeListener(jobListener);
 
 		WorkbenchJob openJob = new WorkbenchJob(
 				ProgressMessages.ProgressMonitorFocusJobDialog_UserDialogJob) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/TaskBarProgressManager.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/TaskBarProgressManager.java
index c90bf9a..f4fe663 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/TaskBarProgressManager.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/TaskBarProgressManager.java	
@@ -21,10 +21,13 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.TaskItem;
+import org.eclipse.ui.progress.IProgressConstants;
 import org.eclipse.ui.progress.IProgressConstants2;
 import org.eclipse.ui.progress.WorkbenchJob;
 
@@ -49,6 +52,10 @@ public class TaskBarProgressManager {
 
 	private final TaskItem taskItem;
 
+	private ImageDescriptor overlayDescriptor;
+
+	private Image overlayImage;
+
 	public TaskBarProgressManager(TaskItem taskItem) {
 		Assert.isNotNull(taskItem);
 		this.taskItem = taskItem;
@@ -73,6 +80,7 @@ public class TaskBarProgressManager {
 	public void dispose() {
 		ProgressManager.getInstance().removeListener(listener);
 		setAnimated(false);
+		disposeOverlay();
 	}
 
 	private WorkbenchJob getAnimationUpdateJob() {
@@ -86,6 +94,7 @@ public class TaskBarProgressManager {
 			 * runtime .IProgressMonitor)
 			 */
 			public IStatus runInUIThread(IProgressMonitor monitor) {
+
 				if (isAnimated) {
 					if (!taskItem.isDisposed() && !jobs.isEmpty()) {
 						Job job = (Job) jobs.get(0);
@@ -104,9 +113,13 @@ public class TaskBarProgressManager {
 						} else {
 							setProgressState(SWT.DEFAULT);
 						}
+						updateImage(job);
+					} else {
+						updateImage(null);
 					}
 				} else {
 					setProgressState(SWT.DEFAULT);
+					updateImage(null);
 				}
 
 				if (isAnimated && taskItem != null && !taskItem.isDisposed()) {
@@ -142,6 +155,53 @@ public class TaskBarProgressManager {
 		};
 	}
 
+	private void updateImage(Job job) {
+
+		if (taskItem == null || taskItem.isDisposed())
+			return;
+
+		if (job == null) {
+			disposeOverlay();
+			taskItem.setOverlayImage(null);
+			return;
+		}
+
+		// first check whether the job specifies image property
+		// if not check with progress manager for its family
+		ImageDescriptor descriptor = (ImageDescriptor) job
+				.getProperty(IProgressConstants.ICON_PROPERTY);
+		if (descriptor != null) {
+
+			// if the description is same, do nothing.
+			// Else dispose old one and store this
+			if (!descriptor.equals(overlayDescriptor)) {
+				disposeOverlay();
+				setOverlay(descriptor);
+			}
+		} else if (ProgressManager.getInstance().getIconFor(job) != null) {
+			disposeOverlay();
+			Image newImage = ProgressManager.getInstance().getIconFor(job);
+			taskItem.setOverlayImage(newImage);
+		} else {
+			disposeOverlay();
+			taskItem.setOverlayImage(null);
+		}
+	}
+
+	private void setOverlay(ImageDescriptor descriptor) {
+		overlayDescriptor = descriptor;
+		overlayImage = descriptor.createImage();
+		taskItem.setOverlayImage(overlayImage);
+	}
+
+	private void disposeOverlay() {
+		overlayDescriptor = null;
+		if (overlayImage != null) {
+			overlayImage.dispose();
+			overlayImage = null;
+		}
+	}
+
 	private IJobProgressManagerListener getProgressListener() {
 		return new IJobProgressManagerListener() {
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java
index 64db59c..1c69419 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IPerspectiveDescriptor;
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.internal.WorkbenchImages;
 
 /**
@@ -42,13 +43,15 @@ public class PerspectiveProvider extends QuickAccessProvider {
 		if (cachedElements == null) {
 			IPerspectiveDescriptor[] perspectives = PlatformUI.getWorkbench()
 					.getPerspectiveRegistry().getPerspectives();
-			cachedElements = new QuickAccessElement[perspectives.length];
 			for (int i = 0; i < perspectives.length; i++) {
-				PerspectiveElement perspectiveElement = new PerspectiveElement(
-						perspectives[i], this);
-				cachedElements[i] = perspectiveElement;
-				idToElement.put(perspectiveElement.getId(), perspectiveElement);
+				if (!WorkbenchActivityHelper.filterItem(perspectives[i])) {
+					PerspectiveElement perspectiveElement = new PerspectiveElement(perspectives[i],
+							this);
+					idToElement.put(perspectiveElement.getId(), perspectiveElement);
+				}
 			}
+			cachedElements = (QuickAccessElement[]) idToElement.values().toArray(
+					new QuickAccessElement[idToElement.size()]);
 		}
 		return cachedElements;
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java
index 68dc070..bf92624 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@ import java.util.Map;
 import org.eclipse.jface.preference.IPreferenceNode;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
 import org.eclipse.ui.internal.WorkbenchImages;
 
@@ -60,11 +61,14 @@ public class PreferenceProvider extends QuickAccessProvider {
 	 */
 	private void collectElements(String prefix, IPreferenceNode[] subNodes, List result) {
 		for (int i = 0; i < subNodes.length; i++) {
-			PreferenceElement preferenceElement = new PreferenceElement(
-					subNodes[i], prefix, this);
-			result.add(preferenceElement);
-			String nestedPrefix = prefix.length() == 0 ? subNodes[i].getLabelText() : (prefix + "/" + subNodes[i].getLabelText());  //$NON-NLS-1$
-			collectElements(nestedPrefix, subNodes[i].getSubNodes(), result);
+			if (!WorkbenchActivityHelper.filterItem(subNodes[i])) {
+				PreferenceElement preferenceElement = new PreferenceElement(subNodes[i], prefix,
+						this);
+				result.add(preferenceElement);
+				String nestedPrefix = prefix.length() == 0 ? subNodes[i].getLabelText() : (prefix
+						+ "/" + subNodes[i].getLabelText()); //$NON-NLS-1$
+				collectElements(nestedPrefix, subNodes[i].getSubNodes(), result);
+			}
 		}
 	}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java
index 372a614..8f854c8 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,12 +16,12 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.commands.Command;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.bindings.TriggerSequence;
 import org.eclipse.jface.bindings.keys.KeySequence;
 import org.eclipse.jface.bindings.keys.SWTKeySupport;
+import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.PopupDialog;
 import org.eclipse.jface.layout.GridDataFactory;
@@ -45,10 +45,13 @@ import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontMetrics;
+import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.graphics.TextLayout;
@@ -296,6 +299,27 @@ public class QuickAccessDialog extends PopupDialog {
 				}
 			}
 		});
+		table.addMouseMoveListener(new MouseMoveListener() {
+			TableItem lastItem = null;
+
+			public void mouseMove(MouseEvent e) {
+				if (table.equals(e.getSource())) {
+					Object o = table.getItem(new Point(e.x, e.y));
+					if (lastItem == null ^ o == null) {
+						table.setCursor(o == null ? null : table.getDisplay().getSystemCursor(
+								SWT.CURSOR_HAND));
+					}
+					if (o instanceof TableItem) {
+						if (!o.equals(lastItem)) {
+							lastItem = (TableItem) o;
+							table.setSelection(new TableItem[] { lastItem });
+						}
+					} else if (o == null) {
+						lastItem = null;
+					}
+				}
+			}
+		});
 
 		table.addSelectionListener(new SelectionListener() {
 			public void widgetSelected(SelectionEvent e) {
@@ -391,13 +415,17 @@ public class QuickAccessDialog extends PopupDialog {
 			setInfoText(QuickAccessMessages.QuickAccess_StartTypingToFindMatches);
 		} else {
 			TriggerSequence[] sequences = getInvokingCommandKeySequences();
-			if (showAllMatches || sequences == null || sequences.length == 0) {
-				setInfoText(""); //$NON-NLS-1$
+			if (sequences != null && sequences.length != 0) {
+				if (showAllMatches) {
+					setInfoText(NLS.bind(
+							QuickAccessMessages.QuickAccess_PressKeyToShowInitialMatches,
+							sequences[0].format()));
+				} else {
+					setInfoText(NLS.bind(QuickAccessMessages.QuickAccess_PressKeyToShowAllMatches,
+							sequences[0].format()));
+				}
 			} else {
-				setInfoText(NLS
-						.bind(
-								QuickAccessMessages.QuickAccess_PressKeyToShowAllMatches,
-								sequences[0].format()));
+				setInfoText(""); //$NON-NLS-1$
 			}
 		}
 	}
@@ -589,7 +617,16 @@ public class QuickAccessDialog extends PopupDialog {
 	}
 
 	protected Point getDefaultSize() {
-		return new Point(350, 420);
+		GC gc = new GC(table);
+		FontMetrics fontMetrics = gc.getFontMetrics();
+		gc.dispose();
+		int x = Dialog.convertHorizontalDLUsToPixels(fontMetrics, 300);
+		if (x < 350)
+			x = 350;
+		int y = Dialog.convertVerticalDLUsToPixels(fontMetrics, 270);
+		if (y < 420)
+			y = 420;
+		return new Point(x, y);
 	}
 
 	protected Point getDefaultLocation(Point initialSize) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessMessages.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessMessages.java
index f8b730f..60201f3 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessMessages.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessMessages.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@ public class QuickAccessMessages extends NLS {
 	public static String QuickAccess_Previous;
 	public static String QuickAccess_Views;
 	public static String QuickAccess_PressKeyToShowAllMatches;
+	public static String QuickAccess_PressKeyToShowInitialMatches;
 	public static String QuickAccess_StartTypingToFindMatches;
 	public static String QuickAccess_AvailableCategories;
 	static {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewElement.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewElement.java
index a0e322f..223bda4 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewElement.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewElement.java	
@@ -25,6 +25,9 @@ import org.eclipse.ui.views.IViewDescriptor;
 public class ViewElement extends QuickAccessElement {
 
 	private final IViewDescriptor viewDescriptor;
+	private String secondaryId;
+	private boolean multiInstance;
+	private String contentDescription;
 
 	private String category;
 
@@ -44,19 +47,61 @@ public class ViewElement extends QuickAccessElement {
 		}
 	}
 
+	/**
+	 * @return The primary id of the view
+	 */
+	public String getPrimaryId() {
+
+		return viewDescriptor.getId();
+	}
+
+	/**
+	 * @param secondaryId
+	 *            The secondaryId to set.
+	 */
+	public void setSecondaryId(String secondaryId) {
+		this.secondaryId = secondaryId;
+	}
+
+	/**
+	 * @param multiInstance
+	 *            The multiInstance to set.
+	 */
+	public void setMultiInstance(boolean multiInstance) {
+		this.multiInstance = multiInstance;
+	}
+
+	/**
+	 * @param contentDescription
+	 *            The contentDescription to set.
+	 */
+	public void setContentDescription(String contentDescription) {
+		this.contentDescription = contentDescription;
+	}
+
+	/**
+	 * @return Returns the multiInstance.
+	 */
+	public boolean isMultiInstance() {
+		return multiInstance;
+	}
+
 	public void execute() {
 		IWorkbenchPage activePage = PlatformUI.getWorkbench()
 				.getActiveWorkbenchWindow().getActivePage();
 		if (activePage != null) {
 			try {
-				activePage.showView(viewDescriptor.getId());
+				activePage.showView(viewDescriptor.getId(), secondaryId,
+						IWorkbenchPage.VIEW_ACTIVATE);
 			} catch (PartInitException e) {
 			}
 		}
 	}
 
 	public String getId() {
-		return viewDescriptor.getId();
+		if(secondaryId ==null)
+			return viewDescriptor.getId();
+		return viewDescriptor.getId() + ':' + secondaryId;
 	}
 
 	public ImageDescriptor getImageDescriptor() {
@@ -64,20 +109,35 @@ public class ViewElement extends QuickAccessElement {
 	}
 
 	public String getLabel() {
-		if (category == null) {
-			return viewDescriptor.getLabel();
+		String label = viewDescriptor.getLabel();
+
+		if (isMultiInstance() && contentDescription != null)
+			label = label + " (" + contentDescription + ')'; //$NON-NLS-1$
+
+		if (category != null) {
+			label = label + separator + category;
 		}
-		return viewDescriptor.getLabel() + separator + category;
+		return label;
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#hashCode()
+	 */
 	public int hashCode() {
 		final int prime = 31;
 		int result = 1;
-		result = prime * result
-				+ ((viewDescriptor == null) ? 0 : viewDescriptor.hashCode());
+		result = prime * result + ((secondaryId == null) ? 0 : secondaryId.hashCode());
+		result = prime * result + ((viewDescriptor == null) ? 0 : viewDescriptor.hashCode());
 		return result;
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
@@ -85,7 +145,12 @@ public class ViewElement extends QuickAccessElement {
 			return false;
 		if (getClass() != obj.getClass())
 			return false;
-		final ViewElement other = (ViewElement) obj;
+		ViewElement other = (ViewElement) obj;
+		if (secondaryId == null) {
+			if (other.secondaryId != null)
+				return false;
+		} else if (!secondaryId.equals(other.secondaryId))
+			return false;
 		if (viewDescriptor == null) {
 			if (other.viewDescriptor != null)
 				return false;
@@ -93,4 +158,5 @@ public class ViewElement extends QuickAccessElement {
 			return false;
 		return true;
 	}
+
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java
index b1aa686..5147d1c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,14 +11,20 @@
 
 package org.eclipse.ui.internal.quickaccess;
 
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
-
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
 import org.eclipse.ui.internal.WorkbenchImages;
 import org.eclipse.ui.views.IViewDescriptor;
+import org.eclipse.ui.views.IViewRegistry;
 
 /**
  * @since 3.3
@@ -28,6 +34,7 @@ public class ViewProvider extends QuickAccessProvider {
 
 	private QuickAccessElement[] cachedElements;
 	private Map idToElement = new HashMap();
+	private Collection multiInstanceViewIds = new HashSet(0);
 
 	public String getId() {
 		return "org.eclipse.ui.views"; //$NON-NLS-1$
@@ -47,16 +54,72 @@ public class ViewProvider extends QuickAccessProvider {
 		if (cachedElements == null) {
 			IViewDescriptor[] views = PlatformUI.getWorkbench()
 					.getViewRegistry().getViews();
-			cachedElements = new QuickAccessElement[views.length];
+			Collection elements = new HashSet(views.length);
 			for (int i = 0; i < views.length; i++) {
-				ViewElement viewElement = new ViewElement(views[i], this);
-				cachedElements[i] = viewElement;
-				idToElement.put(viewElement.getId(), viewElement);
+				if (!WorkbenchActivityHelper.filterItem(views[i])) {
+					addElement(views[i], elements, null, null);
+				}
 			}
+
+			addOpenViews(elements);
+
+			markMultiInstance(elements);
+
+
+			cachedElements = (QuickAccessElement[]) elements
+					.toArray(new QuickAccessElement[elements.size()]);
+
 		}
 		return cachedElements;
 	}
 
+	private void addElement(IViewDescriptor viewDesc, Collection elements, String secondaryId,
+			String desc) {
+		ViewElement viewElement = new ViewElement(viewDesc, this);
+		viewElement.setSecondaryId(secondaryId);
+		viewElement.setContentDescription(desc);
+		boolean added = elements.add(viewElement);
+		if (added) {
+			idToElement.put(viewElement.getId(), viewElement);
+		} else {
+			// *could* be multinstance
+			multiInstanceViewIds.add(viewDesc.getId());
+		}
+	}
+
+	public void addOpenViews(Collection elements) {
+
+		IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		IViewRegistry viewRegistry = PlatformUI.getWorkbench().getViewRegistry();
+		IViewReference[] refs = page.getViewReferences();
+		for (int i = 0; i < refs.length; i++) {
+			IViewDescriptor viewDescriptor = viewRegistry.find(refs[i].getId());
+			addElement(viewDescriptor, elements, refs[i].getSecondaryId(),
+					refs[i].getContentDescription());
+		}
+	}
+
+	/**
+	 * @param elements
+	 */
+	protected void markMultiInstance(Collection elements) {
+		for (Iterator i = multiInstanceViewIds.iterator(); i.hasNext();) {
+			String viewId = (String) i.next();
+			ViewElement firstInstance = null;
+			for (Iterator j = elements.iterator(); j.hasNext();) {
+				ViewElement viewElement = (ViewElement) j.next();
+				if (viewElement.getPrimaryId().equals(viewId)) {
+					if (firstInstance == null)
+						firstInstance = viewElement;
+					else {
+						firstInstance.setMultiInstance(true);
+						viewElement.setMultiInstance(true);
+					}
+				}
+			}
+		}
+	}
+
 	public ImageDescriptor getImageDescriptor() {
 		return WorkbenchImages
 				.getImageDescriptor(IWorkbenchGraphicConstants.IMG_VIEW_DEFAULTVIEW_MISC);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java
index 1d6e8ff..0f09ca9 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.activities.WorkbenchActivityHelper;
 import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
 import org.eclipse.ui.internal.WorkbenchImages;
 import org.eclipse.ui.internal.WorkbenchPlugin;
@@ -46,12 +47,14 @@ public class WizardProvider extends QuickAccessProvider {
 			collectWizards(rootCategory, result);
 			IWizardDescriptor[] wizards = (IWizardDescriptor[]) result
 					.toArray(new IWizardDescriptor[result.size()]);
-			cachedElements = new QuickAccessElement[wizards.length];
 			for (int i = 0; i < wizards.length; i++) {
-				WizardElement wizardElement = new WizardElement(wizards[i], this);
-				cachedElements[i] = wizardElement;
-				idToElement.put(wizardElement.getId(), wizardElement);
+				if (!WorkbenchActivityHelper.filterItem(wizards[i])) {
+					WizardElement wizardElement = new WizardElement(wizards[i], this);
+					idToElement.put(wizardElement.getId(), wizardElement);
+				}
 			}
+			cachedElements = (QuickAccessElement[]) idToElement.values().toArray(
+					new QuickAccessElement[idToElement.size()]);
 		}
 		return cachedElements;
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/messages.properties b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/messages.properties
index 43da045..7c5ad53 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/messages.properties	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/messages.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,5 +18,6 @@ QuickAccess_Preferences=Preferences
 QuickAccess_Previous=Previous Choices
 QuickAccess_Properties=Properties
 QuickAccess_PressKeyToShowAllMatches=Press ''{0}'' to show all matches.
+QuickAccess_PressKeyToShowInitialMatches=Press ''{0}'' to show initial matches.
 QuickAccess_StartTypingToFindMatches=Start typing to find matches.
 QuickAccess_AvailableCategories=Available categories:
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/EditorRegistry.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/EditorRegistry.java
index ed0db10..19b881a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/EditorRegistry.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/EditorRegistry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.registry;
 
+import com.ibm.icu.text.Collator;
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -29,9 +30,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.StringTokenizer;
 import java.util.Map.Entry;
-
+import java.util.StringTokenizer;
 import org.eclipse.core.commands.common.EventManager;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
@@ -70,7 +70,6 @@ import org.eclipse.ui.internal.misc.ExternalProgramImageDescriptor;
 import org.eclipse.ui.internal.misc.ProgramImageDescriptor;
 import org.eclipse.ui.internal.util.Util;
 
-import com.ibm.icu.text.Collator;
 
 /**
  * Provides access to the collection of defined editors for resource types.
@@ -647,11 +646,12 @@ public class EditorRegistry extends EventManager implements IEditorRegistry,
         IPreferenceStore store = WorkbenchPlugin.getDefault()
                 .getPreferenceStore();
         Reader reader = null;
+        FileInputStream stream = null;
         try {
             // Get the editors defined in the preferences store
             String xmlString = store.getString(IPreferenceConstants.EDITORS);
             if (xmlString == null || xmlString.length() == 0) {
-                FileInputStream stream = new FileInputStream(workbenchStatePath
+                stream = new FileInputStream(workbenchStatePath
                         .append(IWorkbenchConstants.EDITOR_FILE_NAME)
                         .toOSString());
                 reader = new BufferedReader(new InputStreamReader(stream,
@@ -699,13 +699,6 @@ public class EditorRegistry extends EventManager implements IEditorRegistry,
                 }
             }
         } catch (IOException e) {
-            try {
-                if (reader != null) {
-					reader.close();
-				}
-            } catch (IOException ex) {
-                e.printStackTrace();
-            }
             //Ignore this as the workbench may not yet have saved any state
             return false;
         } catch (WorkbenchException e) {
@@ -713,6 +706,15 @@ public class EditorRegistry extends EventManager implements IEditorRegistry,
                     WorkbenchMessages.EditorRegistry_errorMessage, 
                     e.getStatus());
             return false;
+		} finally {
+			try {
+				if (reader != null) {
+					reader.close();
+				} else if (stream != null)
+					stream.close();
+			} catch (IOException ex) {
+				WorkbenchPlugin.log("Error reading editors: Could not close steam", ex); //$NON-NLS-1$
+			}
         }
 
         return true;
@@ -872,11 +874,12 @@ public class EditorRegistry extends EventManager implements IEditorRegistry,
         IPreferenceStore store = WorkbenchPlugin.getDefault()
                 .getPreferenceStore();
         Reader reader = null;
+        FileInputStream stream = null;
         try {
             // Get the resource types
             String xmlString = store.getString(IPreferenceConstants.RESOURCES);
             if (xmlString == null || xmlString.length() == 0) {
-                FileInputStream stream = new FileInputStream(workbenchStatePath
+                stream = new FileInputStream(workbenchStatePath
                         .append(IWorkbenchConstants.RESOURCE_TYPE_FILE_NAME)
                         .toOSString());
                 reader = new BufferedReader(new InputStreamReader(stream,
@@ -887,13 +890,6 @@ public class EditorRegistry extends EventManager implements IEditorRegistry,
             // Read the defined resources into the table
             readResources(editorTable, reader);
         } catch (IOException e) {
-            try {
-                if (reader != null) {
-					reader.close();
-				}
-            } catch (IOException ex) {
-                ex.printStackTrace();
-            }
             MessageDialog.openError((Shell) null, WorkbenchMessages.EditorRegistry_errorTitle,
                     WorkbenchMessages.EditorRegistry_errorMessage);
             return false;
@@ -902,6 +898,16 @@ public class EditorRegistry extends EventManager implements IEditorRegistry,
                     WorkbenchMessages.EditorRegistry_errorMessage,
                     e.getStatus());
             return false;
+        } finally {
+            try {
+                if (reader != null) {
+					reader.close();
+				} else if (stream != null) {
+                	stream.close();
+				}
+            } catch (IOException ex) {
+				WorkbenchPlugin.log("Error reading resources: Could not close steam", ex); //$NON-NLS-1$
+            }
         }
         return true;
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/PropertyPagesRegistryReader.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/PropertyPagesRegistryReader.java
index eccaed8..c347567 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/PropertyPagesRegistryReader.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/PropertyPagesRegistryReader.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     James Blackburn (Broadcom Corp.) - Bug 294628 multiple selection
  *******************************************************************************/
 package org.eclipse.ui.internal.registry;
 
@@ -14,7 +15,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.ui.PlatformUI;
@@ -41,6 +41,19 @@ public class PropertyPagesRegistryReader extends CategorizedPageRegistryReader {
 	 */
 	public static final String ATT_FILTER_VALUE = "value";//$NON-NLS-1$
 
+	/**
+	 * Value "<code>selectionFilter</code>". Is an enum allowing propertyPages to 
+	 * support multiple selection when enum value is <code>ATT_SELECTION_FILTER_MULTI</code>
+	 * @since 3.7
+	 */
+	public static final String ATT_SELECTION_FILTER = "selectionFilter";//$NON-NLS-1$
+
+	/**
+	 * Selection filter attribute value indicating support for multiple selection.
+	 * @since 3.7
+	 */
+	public static final String ATT_SELECTION_FILTER_MULTI = "multi";//$NON-NLS-1$
+
 	private static final String TAG_PAGE = "page";//$NON-NLS-1$
 
 	/**
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/ViewRegistry.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/ViewRegistry.java
index fc55b01..6346c5e 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/ViewRegistry.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/registry/ViewRegistry.java	
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.registry;
 
+import com.ibm.icu.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
@@ -18,7 +19,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
-
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IExtensionPoint;
@@ -38,8 +38,6 @@ import org.eclipse.ui.views.IViewCategory;
 import org.eclipse.ui.views.IViewDescriptor;
 import org.eclipse.ui.views.IViewRegistry;
 
-import com.ibm.icu.text.MessageFormat;
-
 /**
  * The central manager for view descriptors.
  */
@@ -254,13 +252,27 @@ public class ViewRegistry implements IViewRegistry, IExtensionChangeHandler {
      * 		   <code>null</code> if the descriptor fails the Expressions check. 
      */
     public IViewDescriptor find(String id) {
-        Iterator itr = views.iterator();
+		IViewDescriptor desc = findInternal(id);
+		if (WorkbenchActivityHelper.restrictUseOf(desc)) {
+			return null;
+		}
+		return desc;
+	}
+
+	/**
+	 * Finds the view descriptor without worrying about activities.
+	 * 
+	 * @param id
+	 *            the ID to search for
+	 * @return the view descriptor, or <code>null</code>
+	 * 
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public IViewDescriptor findInternal(String id) {
+		Iterator itr = views.iterator();
         while (itr.hasNext()) {
             IViewDescriptor desc = (IViewDescriptor) itr.next();
             if (id.equals(desc.getId())) {
-                if (WorkbenchActivityHelper.restrictUseOf(desc)) {
-                    return null;
-                }
                 return desc;
             }
         }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchSourceProvider.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchSourceProvider.java
index 88c3ff9..07be4fa 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchSourceProvider.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/WorkbenchSourceProvider.java	
@@ -632,13 +632,10 @@ public class WorkbenchSourceProvider extends AbstractSourceProvider implements
 				return;
 			}
 
-			HashMap currentState = new HashMap();
-			int sources = updateSelection(currentState);
-			sources |= ISources.ACTIVE_WORKBENCH_WINDOW_SUBORDINATE;
-			currentState.put(
+			fireSourceChanged(ISources.ACTIVE_WORKBENCH_WINDOW_SUBORDINATE,
 					ISources.ACTIVE_WORKBENCH_WINDOW_ACTIVE_PERSPECTIVE_NAME,
 					id);
-			fireSourceChanged(sources, currentState);
+
 			lastPerspectiveId = id;
 		}
 
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/statushandlers/DefaultDetailsArea.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/statushandlers/DefaultDetailsArea.java
index 872025d..d5f7f48 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/statushandlers/DefaultDetailsArea.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/statushandlers/DefaultDetailsArea.java	
@@ -37,6 +37,7 @@ import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.KeyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -77,6 +78,8 @@ public class DefaultDetailsArea extends AbstractStatusAreaProvider {
 
 	private Map dialogState;
 
+	private MenuItem copyAction;
+
 	/**
 	 * @param dialogState
 	 */
@@ -170,6 +173,25 @@ public class DefaultDetailsArea extends AbstractStatusAreaProvider {
 				// no op
 			}
 		});
+		text.addSelectionListener(new SelectionListener() {
+
+			public void widgetSelected(SelectionEvent e) {
+				if (text.getSelectionText().length() == 0) {
+					if (copyAction != null && !copyAction.isDisposed()) {
+						copyAction.setEnabled(false);
+					}
+				} else {
+					if (copyAction != null && !copyAction.isDisposed()) {
+						copyAction.setEnabled(true);
+					}
+				}
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+
+		});
 		createDNDSource();
 		createCopyAction(parent);
 		Dialog.applyDialogFont(parent);
@@ -233,7 +255,7 @@ public class DefaultDetailsArea extends AbstractStatusAreaProvider {
 
 			public void dragSetData(DragSourceEvent event) {
 				if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
-					event.data = prepareCopyString();
+					event.data = text.getSelectionText();
 				}
 			}
 
@@ -244,7 +266,7 @@ public class DefaultDetailsArea extends AbstractStatusAreaProvider {
 
 	private void createCopyAction(final Composite parent) {
 		Menu menu = new Menu(parent.getShell(), SWT.POP_UP);
-		MenuItem copyAction = new MenuItem(menu, SWT.PUSH);
+		copyAction = new MenuItem(menu, SWT.PUSH);
 		copyAction.setText(JFaceResources.getString("copy")); //$NON-NLS-1$
 		copyAction.addSelectionListener(new SelectionAdapter() {
 
@@ -262,13 +284,9 @@ public class DefaultDetailsArea extends AbstractStatusAreaProvider {
 
 		});
 		text.setMenu(menu);
-	}
-
-	private String prepareCopyString() {
-		if (text == null || text.isDisposed()) {
-			return ""; //$NON-NLS-1$
+		if (text.getSelectionText().length() == 0) {
+			copyAction.setEnabled(false);
 		}
-		return text.getSelectionText();
 	}
 
 	private void populateList(StyledText text, IStatus status, int nesting,
@@ -317,7 +335,7 @@ public class DefaultDetailsArea extends AbstractStatusAreaProvider {
 		Clipboard clipboard = null;
 		try {
 			clipboard = new Clipboard(text.getDisplay());
-			clipboard.setContents(new Object[] { prepareCopyString() },
+			clipboard.setContents(new Object[] { text.getSelectionText() },
 					new Transfer[] { TextTransfer.getInstance() });
 		} finally {
 			if (clipboard != null) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/testing/WorkbenchPartTestable.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/testing/WorkbenchPartTestable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/CascadingTheme.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/CascadingTheme.java
index 057ef0e..14d58f0 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/CascadingTheme.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/CascadingTheme.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,6 @@
 package org.eclipse.ui.internal.themes;
 
 import java.util.Set;
-
 import org.eclipse.core.commands.common.EventManager;
 import org.eclipse.jface.resource.ColorRegistry;
 import org.eclipse.jface.resource.FontRegistry;
@@ -37,10 +36,6 @@ public class CascadingTheme extends EventManager implements ITheme {
         }
     };
 
-    /**
-     * @param colorRegistry
-     * @param fontRegistry
-     */
     public CascadingTheme(ITheme currentTheme,
             CascadingColorRegistry colorRegistry,
             CascadingFontRegistry fontRegistry) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.java
index 1a1cee6..4d37b47 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.ui.internal.themes;
 
+import com.ibm.icu.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -19,7 +20,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.Set;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.preference.PreferenceConverter;
@@ -28,7 +28,6 @@ import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.resource.StringConverter;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.IFontProvider;
@@ -89,7 +88,6 @@ import org.eclipse.ui.themes.ITheme;
 import org.eclipse.ui.themes.IThemeManager;
 import org.eclipse.ui.themes.IThemePreview;
 
-import com.ibm.icu.text.MessageFormat;
 
 /**
  * Preference page for management of system colors, gradients and fonts.
@@ -254,7 +252,32 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
          * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
          */
         public Object getParent(Object element) {
-            return null;
+			if (element instanceof ThemeElementCategory)
+				return registry;
+
+			if (element instanceof ColorDefinition) {
+				String defaultId = ((IHierarchalThemeElementDefinition) element).getDefaultsTo();
+				if (defaultId != null) {
+					ColorDefinition defaultElement = registry.findColor(defaultId);
+					if (parentIsInSameCategory(defaultElement))
+						return defaultElement;
+				}
+				String categoryId = ((ColorDefinition) element).getCategoryId();
+				return registry.findCategory(categoryId);
+			}
+
+			if (element instanceof FontDefinition) {
+				String defaultId = ((FontDefinition) element).getDefaultsTo();
+				if (defaultId != null) {
+					FontDefinition defaultElement = registry.findFont(defaultId);
+					if (parentIsInSameCategory(defaultElement))
+						return defaultElement;
+				}
+				String categoryId = ((FontDefinition) element).getCategoryId();
+				return registry.findCategory(categoryId);
+			}
+
+			return null;
         }
 
         /* (non-Javadoc)
@@ -510,10 +533,22 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
          * @since 3.2
          */
 		private boolean isDefault(IThemeElementDefinition def) {
-			if (def instanceof FontDefinition)
-				return ColorsAndFontsPreferencePage.this.isDefault((FontDefinition)def);
-			if (def instanceof ColorDefinition)
-				return ColorsAndFontsPreferencePage.this.isDefault((ColorDefinition)def);
+			if (def instanceof FontDefinition) {
+				FontDefinition fontDef = (FontDefinition) def;
+				String defaultFontID = fontDef.getDefaultsTo();
+				return defaultFontID != null
+						&& Arrays.equals(fontRegistry.getFontData(def.getId()),
+								fontRegistry.getFontData(defaultFontID));
+			}
+			if (def instanceof ColorDefinition) {
+				ColorDefinition colorDef = (ColorDefinition) def;
+				String defaultColorID = colorDef.getDefaultsTo();
+				if (defaultColorID == null)
+					return false;
+				RGB defaultRGB = colorRegistry.getRGB(defaultColorID);
+				return defaultRGB != null
+						&& defaultRGB.equals(colorRegistry.getRGB(colorDef.getId()));
+			}
 			return false;
 		}
     }
@@ -532,18 +567,17 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
     private Font appliedDialogFont;
 
     /**
-     * Map of definition id->RGB objects that map to changes expressed in this
-     * UI session.  These changes should be made in preferences and the
-     * registry.
-     */
+	 * Map of definition id->RGB capturing the explicit changes made by
+	 * the user. These changes need to be stored into the preference store.
+	 */
     private Map colorPreferencesToSet = new HashMap(7);
 
     private CascadingColorRegistry colorRegistry;
 
     /**
-     * Map of definition id->RGB objects that map to changes expressed in this
-     * UI session.  These changes should be made in the registry.
-     */
+	 * Map of definition id->RGB capturing the temporary changes caused by a
+	 * 'defaultsTo' color change.
+	 */
     private Map colorValuesToSet = new HashMap(7);
 
     /**
@@ -587,6 +621,23 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 
     private Button fontChangeButton;
 
+    /**
+     * The button to edit the default of the selected element.
+     * @since 3.7
+     */
+	private Button editDefaultButton;
+
+	/**
+	 * The button to go to the default of the selected element.
+	 * 
+	 * @since 3.7
+	 */
+	private Button goToDefaultButton;
+
+	/**
+	 * Map of definition id->FontData[] capturing the changes explicitly made by
+	 * the user. These changes need to be stored into the preference store.
+	 */
     private Map fontPreferencesToSet = new HashMap(7);
 
     private CascadingFontRegistry fontRegistry;
@@ -595,11 +646,10 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 
     private Button fontSystemButton;
 
-    /**
-     * Map of definition id->FontData[] objects that map to changes expressed in
-     * this UI session.  These changes should be made in preferences and the
-     * registry.
-     */
+	/**
+	 * Map of definition id->FontData[] capturing the temporary changes caused
+	 * by a 'defaultsTo' font change.
+	 */
     private Map fontValuesToSet = new HashMap(7);
 
     /**
@@ -646,6 +696,63 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         //no-op
     }
 
+	/**
+	 * {@inheritDoc}
+	 * <p>
+	 * Everything else except the following string patterns is ignored:
+	 * <ul>
+	 * <li><strong>selectCategory:</strong>ID - selects and expands the category
+	 * with the given ID</li>
+	 * <li><strong>selectFont:</strong>ID - selects the font with the given ID</li>
+	 * <li><strong>selectColor:</strong>ID - selects the color with the given ID
+	 * </li>
+	 * </p>
+	 * 
+	 * @param data
+	 *            the data to be applied
+	 */
+	public void applyData(Object data) {
+		if (tree == null || !(data instanceof String))
+			return;
+
+		ThemeRegistry themeRegistry = (ThemeRegistry) tree.getViewer().getInput();
+		String command = (String) data;
+		if (command.startsWith("selectCategory:")) { //$NON-NLS-1$
+			String categoryId = command.substring(15);
+			ThemeElementCategory category = themeRegistry.findCategory(categoryId);
+			if (category != null) {
+				selectAndReveal(category);
+				tree.getViewer().expandToLevel(category, 1);
+			}
+		} else if (command.startsWith("selectFont:")) { //$NON-NLS-1$
+			String id = command.substring(11);
+			FontDefinition fontDef = themeRegistry.findFont(id);
+			if (fontDef != null) {
+				selectAndReveal(fontDef);
+			}
+		} else if (command.startsWith("selectColor:")) { //$NON-NLS-1$
+			String id = command.substring(12);
+			ColorDefinition colorDef = themeRegistry.findColor(id);
+			if (colorDef != null) {
+				selectAndReveal(colorDef);
+			}
+		}
+	}
+
+	/**
+	 * Selects and reveals the given element.
+	 * 
+	 * @param selection
+	 *            the object to select and reveal
+	 * @since 3.7
+	 */
+	private void selectAndReveal(Object selection) {
+		TreeViewer viewer = tree.getViewer();
+		viewer.setSelection(new StructuredSelection(selection), false);
+		viewer.reveal(selection);
+		viewer.getTree().setFocus();
+	}
+
     private static boolean equals(String string, String string2) {
         if ((string == null && string2 == null))
 			return true;
@@ -670,6 +777,19 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         return button;
     }
 
+	private Label createSeparator(Composite parent) {
+		Label separator = new Label(parent, SWT.NONE);
+		separator.setFont(parent.getFont());
+		separator.setVisible(false);
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.heightHint = 4;
+		separator.setLayoutData(gd);
+		return separator;
+	}
+
+
     /* (non-Javadoc)
      * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
      */
@@ -722,6 +842,9 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 		fontChangeButton = createButton(controlColumn, RESOURCE_BUNDLE.getString("openChange")); //$NON-NLS-1$
         fontSystemButton = createButton(controlColumn, WorkbenchMessages.FontsPreference_useSystemFont);
         fontResetButton = createButton(controlColumn, RESOURCE_BUNDLE.getString("reset")); //$NON-NLS-1$
+		createSeparator(controlColumn);
+		editDefaultButton = createButton(controlColumn, RESOURCE_BUNDLE.getString("editDefault")); //$NON-NLS-1$
+		goToDefaultButton = createButton(controlColumn, RESOURCE_BUNDLE.getString("goToDefault")); //$NON-NLS-1$
         // --- end of buttons
 
 		createDescriptionControl(mainColumn);
@@ -769,66 +892,78 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         return advancedComposite;
     }
 
-    /**
-     * Create the <code>ListViewer</code> that will contain all color
-     * definitions as defined in the extension point.
-     * 
-     * @param parent the parent <code>Composite</code>.
-     */
-    private void createTree(Composite parent) {
-        labelProvider = new PresentationLabelProvider();
-        // create a new tree with a custom pattern matcher that will allow
-        // non-category elements to be returned in the event that their children
-        // do not
-        tree = new FilteredTree(parent, SWT.SINGLE | SWT.H_SCROLL
-                | SWT.V_SCROLL | SWT.BORDER, new PatternFilter() {
-            
-            protected boolean isParentMatch(Viewer viewer, Object element) {
-                Object[] children = ((ITreeContentProvider) ((AbstractTreeViewer) viewer)
-                        .getContentProvider()).getChildren(element);
-                if (children.length > 0 && element instanceof ThemeElementCategory)
-					return filter(viewer, element, children).length > 0;
-                return false;
-            }
-		}, true);
+	/**
+	 * Create the <code>ListViewer</code> that will contain all color
+	 * definitions as defined in the extension point.
+	 * 
+	 * @param parent
+	 *            the parent <code>Composite</code>.
+	 */
+	private void createTree(Composite parent) {
+		labelProvider = new PresentationLabelProvider();
+
+		// Create a custom pattern matcher that will allow
+		// non-category elements to be returned in the event that their children
+		// do not and also search the descriptions.
+		PatternFilter filter = new PatternFilter() {
+			/*
+			 * (non-Javadoc)
+			 * @see org.eclipse.ui.dialogs.PatternFilter#isLeafMatch(org.eclipse.jface.viewers.Viewer, java.lang.Object)
+			 * @since 3.7
+			 */
+			protected boolean isLeafMatch(Viewer viewer, Object element) {
+				if (super.isLeafMatch(viewer, element))
+					return true;
+
+				String text = null;
+				if (element instanceof ICategorizedThemeElementDefinition)
+					text = ((ICategorizedThemeElementDefinition) element).getDescription();
+
+				return text != null ? wordMatches(text) : false;
+			}
+		};
+		filter.setIncludeLeadingWildcard(true);
 
-        GridData data = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_FILL);
+		tree = new FilteredTree(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER,
+				filter, true);
+		GridData data = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_FILL);
 		data.widthHint = Math.max(285, convertWidthInCharsToPixels(30));
-        data.heightHint = Math.max(175, convertHeightInCharsToPixels(10));
-        tree.setLayoutData(data);
-        myApplyDialogFont(tree.getViewer().getControl());
-        Text filterText = tree.getFilterControl();
-        if (filterText != null)
+		data.heightHint = Math.max(175, convertHeightInCharsToPixels(10));
+		tree.setLayoutData(data);
+		myApplyDialogFont(tree.getViewer().getControl());
+		Text filterText = tree.getFilterControl();
+		if (filterText != null)
 			myApplyDialogFont(filterText);
 
-        tree.getViewer().setLabelProvider(labelProvider);
-        tree.getViewer().setContentProvider(new ThemeContentProvider());
-        tree.getViewer().setComparator(new ViewerComparator() {
-            public int category(Object element) {
-                if (element instanceof ThemeElementCategory)
+		tree.getViewer().setLabelProvider(labelProvider);
+		tree.getViewer().setContentProvider(new ThemeContentProvider());
+		tree.getViewer().setComparator(new ViewerComparator() {
+			public int category(Object element) {
+				if (element instanceof ThemeElementCategory)
 					return 0;
-                return 1;
-            }
-        });
-        tree.getViewer().setInput(WorkbenchPlugin.getDefault().getThemeRegistry());
-        tree.getViewer().addDoubleClickListener(new IDoubleClickListener() {
-            public void doubleClick(DoubleClickEvent event) {
-                IStructuredSelection s = (IStructuredSelection) event.getSelection();
-                Object element = s.getFirstElement();
-                if (tree.getViewer().isExpandable(element))
-                    tree.getViewer().setExpandedState(element, !tree.getViewer().getExpandedState(element));
-                
-                if (element instanceof FontDefinition)
-                	editFont(tree.getDisplay());
-                else if (element instanceof ColorDefinition)
-                	editColor(tree.getDisplay());
-                updateControls();
-            }
-        });
+				return 1;
+			}
+		});
+		tree.getViewer().setInput(WorkbenchPlugin.getDefault().getThemeRegistry());
+		tree.getViewer().addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				IStructuredSelection s = (IStructuredSelection) event.getSelection();
+				Object element = s.getFirstElement();
+				if (tree.getViewer().isExpandable(element))
+					tree.getViewer().setExpandedState(element,
+							!tree.getViewer().getExpandedState(element));
+
+				if (element instanceof FontDefinition)
+					editFont(tree.getDisplay());
+				else if (element instanceof ColorDefinition)
+					editColor(tree.getDisplay());
+				updateControls();
+			}
+		});
 
-        restoreTreeExpansion();
-        restoreTreeSelection();
-    }
+		restoreTreeExpansion();
+		restoreTreeSelection();
+	}
 
     /* (non-Javadoc)
      * @see org.eclipse.jface.dialogs.IDialogPage#dispose()
@@ -838,15 +973,6 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         
         workbench.getThemeManager().removePropertyChangeListener(themeChangeListener);
         clearPreviews();
-        // also dispose elements used by default previewers
-		if (currentFont != null && !currentFont.isDisposed()) {
-			currentFont.dispose();
-			currentFont = null;
-		}
-		if (currentColor != null && !currentColor.isDisposed()) {
-			currentColor.dispose();
-			currentColor = null;
-		}
         colorRegistry.dispose();
         fontRegistry.dispose();
     }
@@ -1033,9 +1159,9 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 
             public void widgetSelected(SelectionEvent e) {
             	if (isFontSelected())
-                    resetFont(getSelectedFontDefinition());
+					resetFont(getSelectedFontDefinition(), false);
             	else if (isColorSelected())
-                  resetColor(getSelectedColorDefinition());
+					resetColor(getSelectedColorDefinition(), false);
             	updateControls();
             }
         });
@@ -1047,10 +1173,51 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
                 	return;
                 FontData[] defaultFontData = JFaceResources.getDefaultFont().getFontData();
                 setFontPreferenceValue(definition, defaultFontData);
-                setRegistryValue(definition, defaultFontData);
                 updateControls();
             }
         });
+
+		editDefaultButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				Display display = event.display;
+				FontDefinition fontDefinition = getSelectedFontDefinition();
+				if (fontDefinition != null) {
+					String defaultFontId = fontDefinition.getDefaultsTo();
+					FontDefinition defaultFontDefinition = themeRegistry.findFont(defaultFontId);
+					editFont(defaultFontDefinition, display);
+				} else {
+					ColorDefinition colorDefinition = getSelectedColorDefinition();
+					if (colorDefinition != null) {
+						String defaultColorId = colorDefinition.getDefaultsTo();
+						ColorDefinition defaultColorDefinition = themeRegistry
+								.findColor(defaultColorId);
+						editColor(defaultColorDefinition, display);
+					}
+				}
+				updateControls();
+			}
+		});
+
+		goToDefaultButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				FontDefinition fontDefinition = getSelectedFontDefinition();
+				if (fontDefinition != null) {
+					String defaultFontId = fontDefinition.getDefaultsTo();
+					FontDefinition defaultFontDefinition = themeRegistry.findFont(defaultFontId);
+					selectAndReveal(defaultFontDefinition);
+				} else {
+					ColorDefinition colorDefinition = getSelectedColorDefinition();
+					if (colorDefinition != null) {
+						String defaultColorId = colorDefinition.getDefaultsTo();
+						ColorDefinition defaultColorDefinition = themeRegistry
+								.findColor(defaultColorId);
+						selectAndReveal(defaultColorDefinition);
+					}
+				}
+				updateControls();
+			}
+		});
+
     }
 
     /* (non-Javadoc)
@@ -1061,7 +1228,6 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         setPreferenceStore(PrefUtil.getInternalPreferenceStore());
 
         final IThemeManager themeManager = aWorkbench.getThemeManager();
-
         themeChangeListener = new IPropertyChangeListener() {
             public void propertyChange(PropertyChangeEvent event) {
                 if (event.getProperty().equals(
@@ -1084,8 +1250,6 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         if (labelProvider != null)
 			labelProvider.dispose(); // nuke the old cache
 
-        currentTheme = manager.getCurrentTheme();
-
         if (colorRegistry != null)
 			colorRegistry.dispose();
         if (fontRegistry != null)
@@ -1125,6 +1289,14 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
                 if (colorPreferencesToSet.get(id).equals(getColorAncestorValue(definition)))
 					return true;
             }
+		} else if (colorValuesToSet.containsKey(id)) {
+			if (definition.getValue() != null) { // value-based color
+				if (colorValuesToSet.get(id).equals(definition.getValue()))
+					return true;
+			} else {
+				if (colorValuesToSet.get(id).equals(getColorAncestorValue(definition)))
+					return true;
+			}
         } else {
             if (definition.getValue() != null) { // value-based color
                 if (getPreferenceStore().isDefault(ThemeElementHelper.createPreferenceKey(currentTheme, id)))
@@ -1150,6 +1322,16 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
                 if (Arrays.equals((FontData[]) fontPreferencesToSet.get(id), ancestor))
 					return true;
             }
+		} else if (fontValuesToSet.containsKey(id)) {
+			if (definition.getValue() != null) { // value-based font
+				if (Arrays.equals((FontData[]) fontValuesToSet.get(id), definition.getValue()))
+					return true;
+			} else {
+				FontData[] ancestor = getFontAncestorValue(definition);
+				if (Arrays.equals((FontData[]) fontValuesToSet.get(id), ancestor))
+					return true;
+			}
+
         } else {
             if (definition.getValue() != null) { // value-based font
                 if (getPreferenceStore().isDefault(ThemeElementHelper.createPreferenceKey(currentTheme, id)))
@@ -1210,7 +1392,7 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         Arrays.sort(definitionsCopy, new IThemeRegistry.HierarchyComparator(definitions));
 
         for (int i = 0; i < definitionsCopy.length; i++) {
-			resetColor(definitionsCopy[i]);
+			resetColor(definitionsCopy[i], true);
 		}
     }
 
@@ -1237,7 +1419,8 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
     protected void performDefaults() {
         performColorDefaults();
         performFontDefaults();
-        updateControls();
+		updateControls();
+		tree.getViewer().refresh();
     }
 
     private void performFontDefaults() {
@@ -1250,11 +1433,12 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         Arrays.sort(definitionsCopy, new IThemeRegistry.HierarchyComparator(definitions));
 
         for (int i = 0; i < definitionsCopy.length; i++) {
-			resetFont(definitionsCopy[i]);
+			resetFont(definitionsCopy[i], true);
 		}
     }
 
     private boolean performFontOk() {
+
         for (Iterator i = fontPreferencesToSet.keySet().iterator(); i.hasNext();) {
             String id = (String) i.next();
             String key = ThemeElementHelper.createPreferenceKey(currentTheme, id);
@@ -1297,8 +1481,8 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
      * @param definition the <code>ColorDefinition</code> to reset.
      * @return whether any change was made.
      */
-    private boolean resetColor(ColorDefinition definition) {
-        if (!isDefault(definition)) {
+	private boolean resetColor(ColorDefinition definition, boolean force) {
+		if (force || !isDefault(definition)) {
             RGB newRGB;
             if (definition.getValue() != null)
                 newRGB = definition.getValue();
@@ -1314,10 +1498,10 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         return false;
     }
 
-    protected boolean resetFont(FontDefinition definition) {
-        if (!isDefault(definition)) {
+	protected boolean resetFont(FontDefinition definition, boolean force) {
+		if (force || !isDefault(definition)) {
             FontData[] newFD;
-            if (definition.getDefaultsTo() != null)
+			if (!force && definition.getDefaultsTo() != null)
                 newFD = getFontAncestorValue(definition);
             else
                 newFD = PreferenceConverter.getDefaultFontDataArray(getPreferenceStore(), ThemeElementHelper
@@ -1325,7 +1509,6 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 
             if (newFD != null) {
                 setFontPreferenceValue(definition, newFD);
-                setRegistryValue(definition, newFD);
                 return true;
             }
         }
@@ -1372,6 +1555,7 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
                 setDescendantRegistryValues(children[i], datas);
                 setRegistryValue(children[i], datas);
                 fontValuesToSet.put(children[i].getId(), datas);
+				fontPreferencesToSet.remove(children[i].getId());
             }
         }
     }
@@ -1379,6 +1563,7 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
     protected void setFontPreferenceValue(FontDefinition definition, FontData[] datas) {
         setDescendantRegistryValues(definition, datas);
         fontPreferencesToSet.put(definition.getId(), datas);
+		setRegistryValue(definition, datas);
     }
 
     /**
@@ -1607,24 +1792,40 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 
 	/**
 	 * Edit the currently selected font.
-	 * @param display the display to open the dialog on
+	 * 
+	 * @param display
+	 *            the display to open the dialog on
 	 * @since 3.2
 	 */
 	private void editFont(Display display) {
-		final FontDefinition definition = getSelectedFontDefinition();
+		editFont(getSelectedFontDefinition(), display);
+	}
+
+	/**
+	 * Edit the given font.
+	 * 
+	 * @param definition
+	 *            the font definition
+	 * @param display
+	 *            the display to open the dialog on
+	 * @since 3.7
+	 */
+	private void editFont(FontDefinition definition, Display display) {
 		if (definition != null) {
-			final FontDialog fontDialog = new FontDialog(fontChangeButton.getShell());
+			final FontDialog fontDialog = new FontDialog(getShell());
 			fontDialog.setFontList(getFontValue(definition));
 			final FontData data = fontDialog.open();
 			if (data != null) {
 				setFontPreferenceValue(definition, fontDialog.getFontList());
-				setRegistryValue(definition, fontDialog.getFontList());
 			}
 		}
 	}
 	
 	private void editColor(Display display) {
-		ColorDefinition definition = getSelectedColorDefinition();
+		editColor(getSelectedColorDefinition(), display);
+	}
+
+	private void editColor(ColorDefinition definition, Display display) {
 		if (definition == null)
 			return; 
 		RGB currentColor = colorRegistry.getRGB(definition.getId());
@@ -1642,17 +1843,25 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 	protected void updateControls() {
 		FontDefinition fontDefinition = getSelectedFontDefinition();
         if (fontDefinition != null) {
+			boolean isDefault = isDefault(fontDefinition);
+			boolean hasDefault = fontDefinition.getDefaultsTo() != null;
             fontChangeButton.setEnabled(true);
             fontSystemButton.setEnabled(true);
-            fontResetButton.setEnabled(!isDefault(fontDefinition));
+			fontResetButton.setEnabled(!isDefault);
+			editDefaultButton.setEnabled(hasDefault && isDefault);
+			goToDefaultButton.setEnabled(hasDefault);
             setCurrentFont(fontDefinition);
             return;
         }
         ColorDefinition colorDefinition = getSelectedColorDefinition();
         if (colorDefinition != null) {
+			boolean isDefault = isDefault(getSelectedColorDefinition());
+			boolean hasDefault = colorDefinition.getDefaultsTo() != null;
             fontChangeButton.setEnabled(true);
             fontSystemButton.setEnabled(false);
-            fontResetButton.setEnabled(!isDefault(getSelectedColorDefinition()));
+			fontResetButton.setEnabled(!isDefault);
+			editDefaultButton.setEnabled(hasDefault && isDefault);
+			goToDefaultButton.setEnabled(hasDefault);
             setCurrentColor(colorDefinition);
             return;
         }
@@ -1660,6 +1869,8 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
         fontChangeButton.setEnabled(false);
         fontSystemButton.setEnabled(false);
         fontResetButton.setEnabled(false);
+		editDefaultButton.setEnabled(false);
+		goToDefaultButton.setEnabled(false);
 		descriptionText.setText(""); //$NON-NLS-1$
 	}
 	
@@ -1676,10 +1887,8 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 	}
 	
 	private void setCurrentFont(FontDefinition fontDefinition) {
-		FontData[] fontData = getFontValue(fontDefinition);
-		if (currentFont != null && !currentFont.isDisposed())
-			currentFont.dispose();
-		currentFont = new Font(previewComposite.getDisplay(), fontData);
+		currentFont = fontRegistry.get(fontDefinition.getId());
+		FontData[] fontData = currentFont.getFontData();
 
 		// recalculate sample text
 		StringBuffer tmp = new StringBuffer();
@@ -1707,10 +1916,7 @@ public final class ColorsAndFontsPreferencePage extends PreferencePage
 	}
 	
 	public void setCurrentColor(ColorDefinition colorDefinition) {
-		RGB color = getColorValue(colorDefinition);
-		if (currentColor != null && !currentColor.isDisposed())
-			currentColor.dispose();
-		currentColor = new Color(previewComposite.getDisplay(), color);
+		currentColor = colorRegistry.get(colorDefinition.getId());
 		colorSampler.redraw();
 
 		String description = colorDefinition.getDescription();
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.properties b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.properties
index aedcb95..aa63b6d 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.properties	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ColorsAndFontsPreferencePage.properties	
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2009 IBM Corporation and others.
+# Copyright (c) 2003, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 
 openChange=&Edit...
 reset=&Reset
+editDefault=Ed&it Default...
+goToDefault=&Go to Default
 value=&Value
 colorsAndFonts=Colors and &Fonts (? = any character, * = any string):
 description=Descriptio&n:
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ThemeRegistry.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ThemeRegistry.java
index 7761de6..a2b468c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ThemeRegistry.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/themes/ThemeRegistry.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import org.eclipse.ui.themes.IThemeManager;
 
 /**
@@ -94,11 +93,6 @@ public class ThemeRegistry implements IThemeRegistry {
         return (IThemeDescriptor) findDescriptor(getThemes(), id);
     }
 
-    /**
-     * @param descriptors
-     * @param id
-     * @return
-     */
     private IThemeElementDefinition findDescriptor(
             IThemeElementDefinition[] descriptors, String id) {
         int idx = Arrays.binarySearch(descriptors, id, ID_COMPARATOR);
@@ -198,12 +192,12 @@ public class ThemeRegistry implements IThemeRegistry {
     }
 
     /**
-     * Overlay the override onto the base definition.
-     * 
-     * @param defs the base definition
-     * @param overrides the override
-     * @return the overlayed element
-     */
+	 * Overlay the override onto the base definition.
+	 * 
+	 * @param original
+	 *            the base definition
+	 * @return the overlaid element
+	 */
     private IThemeElementDefinition overlay(IThemeElementDefinition original,
             IThemeElementDefinition overlay) {
         if (original instanceof ColorDefinition) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/DummyTitlePathUpdater.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/DummyTitlePathUpdater.java
new file mode 100644
index 0000000..8314103
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/DummyTitlePathUpdater.java	
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.tweaklets;
+
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @since 3.7
+ * 
+ */
+public class DummyTitlePathUpdater extends TitlePathUpdater {
+
+	public void updateTitlePath(Shell window, String path) {
+		// do nothing
+	}
+
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/TabBehaviourMRU.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/TabBehaviourMRU.java
index 927144f..24d1c2c 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/TabBehaviourMRU.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/TabBehaviourMRU.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@ package org.eclipse.ui.internal.tweaklets;
 
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.ui.IEditorInput;
@@ -29,7 +28,6 @@ import org.eclipse.ui.internal.Workbench;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.WorkbenchPage;
 import org.eclipse.ui.internal.WorkbenchPlugin;
-import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
 import org.eclipse.ui.internal.registry.EditorDescriptor;
 
 /**
@@ -98,11 +96,10 @@ public class TabBehaviourMRU extends TabBehaviour {
 		};
 		int result = dialog.open();
 		if (result == 0) { // YES
-			ProgressMonitorDialog pmd = new ProgressMonitorJobsDialog(dialog
-					.getShell());
-			pmd.open();
-			dirtyEditor.getEditor(true).doSave(pmd.getProgressMonitor());
-			pmd.close();
+			IEditorPart editor = dirtyEditor.getEditor(true);
+			if (!page.getEditorManager().savePart(editor, editor, false)) {
+				return null;
+			}
 		} else if ((result == 2) || (result == -1)) {
 			return null;
 		}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/TitlePathUpdater.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/TitlePathUpdater.java
new file mode 100644
index 0000000..14d7da8
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/tweaklets/TitlePathUpdater.java	
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.tweaklets;
+
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.ui.internal.tweaklets.Tweaklets.TweakKey;
+
+/**
+ * 
+ * Tweaklet to update the Shell when the active editor is changed
+ * 
+ * @since 3.7
+ * 
+ */
+public abstract class TitlePathUpdater {
+
+	public static TweakKey KEY = new Tweaklets.TweakKey(TitlePathUpdater.class);
+
+	static {
+		Tweaklets.setDefault(KEY, new DummyTitlePathUpdater());
+	}
+
+	public abstract void updateTitlePath(Shell window, String path);
+
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/util/PrefUtil.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/util/PrefUtil.java
index 28d2bc1..c1333cd 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/util/PrefUtil.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/util/PrefUtil.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,11 @@
 package org.eclipse.ui.internal.util;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.ui.internal.WorkbenchPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
 
 /**
  * Internal utility class to help with getting/setting preferences.
@@ -47,8 +50,11 @@ public class PrefUtil {
     private static IPreferenceStore uiPreferenceStore;
 
     /**
-     * Sets the callback used to obtain and save the UI preference store.
-     */
+	 * Sets the callback used to obtain and save the UI preference store.
+	 * 
+	 * @param callback
+	 *            the callback
+	 */
     public static final void setUICallback(ICallback callback) {
         Assert.isTrue(uiCallback == null);
         uiCallback = callback;
@@ -96,6 +102,10 @@ public class PrefUtil {
      * Saves the internal preference store, if needed.
      */
     public static void saveInternalPrefs() {
-        WorkbenchPlugin.getDefault().savePluginPreferences();
+		try {
+			InstanceScope.INSTANCE.getNode(WorkbenchPlugin.PI_WORKBENCH).flush();
+		} catch (BackingStoreException e) {
+			WorkbenchPlugin.log(e);
+		}
     }
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/wizards/preferences/WizardPreferencesPage.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/wizards/preferences/WizardPreferencesPage.java
index aa9ea05..edfbc17 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/wizards/preferences/WizardPreferencesPage.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/wizards/preferences/WizardPreferencesPage.java	
@@ -363,9 +363,10 @@ public abstract class WizardPreferencesPage extends WizardPage implements
 		buttonComposite.setLayoutData(data);
 		buttonComposite.setFont(parentFont);
 		
-		selectAllButton = createButton(buttonComposite,
-				IDialogConstants.SELECT_ALL_ID,
-				PreferencesMessages.SelectionDialog_selectLabel, false);
+		selectAllButton = new Button(buttonComposite, SWT.PUSH);
+		selectAllButton.setText(PreferencesMessages.SelectionDialog_selectLabel);
+		selectAllButton.setData(new Integer(IDialogConstants.SELECT_ALL_ID));
+		setButtonLayoutData(selectAllButton);
 
 		SelectionListener listener = new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
@@ -376,9 +377,10 @@ public abstract class WizardPreferencesPage extends WizardPage implements
 		selectAllButton.addSelectionListener(listener);
 		selectAllButton.setFont(parentFont);
 		
-		deselectAllButton = createButton(buttonComposite,
-				IDialogConstants.DESELECT_ALL_ID,
-				PreferencesMessages.SelectionDialog_deselectLabel, false);
+		deselectAllButton = new Button(buttonComposite, SWT.PUSH);
+		deselectAllButton.setText(PreferencesMessages.SelectionDialog_deselectLabel);
+		deselectAllButton.setData(new Integer(IDialogConstants.DESELECT_ALL_ID));
+		setButtonLayoutData(deselectAllButton);
 
 		listener = new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/intro/IIntroPart.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/intro/IIntroPart.java
index 89e87b6..9ebe0b4 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/intro/IIntroPart.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/intro/IIntroPart.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -195,7 +195,7 @@ public interface IIntroPart extends IAdaptable {
 
     /**
      * Removes the given property listener from this intro part.
-     * Has no affect if an identical listener is not registered.
+     * Has no effect if an identical listener is not registered.
      *
      * @param listener a property listener
      */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/keys/SWTKeySupport.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/keys/SWTKeySupport.java
index 28d3f6c..fe40a52 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/keys/SWTKeySupport.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/keys/SWTKeySupport.java	
@@ -14,7 +14,6 @@ package org.eclipse.ui.keys;
 import java.util.Iterator;
 import java.util.SortedSet;
 import java.util.TreeSet;
-
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.widgets.Event;
@@ -23,7 +22,7 @@ import org.eclipse.ui.internal.keys.NativeKeyFormatter;
 /**
  * A utility class for converting SWT events into key strokes.
  * 
- * @deprecated Please use org.eclipse.jface.bindings.keys.SWTKeySupport
+ * @deprecated Please use {@link org.eclipse.jface.bindings.keys.SWTKeySupport}
  * @since 3.0
  */
 public final class SWTKeySupport {
@@ -38,7 +37,7 @@ public final class SWTKeySupport {
      */
     public static KeyStroke convertAcceleratorToKeyStroke(int accelerator) {
         final SortedSet modifierKeys = new TreeSet();
-        NaturalKey naturalKey = null;
+		NaturalKey naturalKey;
 
         if ((accelerator & SWT.ALT) != 0) {
 			modifierKeys.add(ModifierKey.ALT);
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/AbstractContributionFactory.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/AbstractContributionFactory.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/CommandContributionItem.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/CommandContributionItem.java
old mode 100644
new mode 100755
index 30a201a..6d23bb1
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/CommandContributionItem.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/CommandContributionItem.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -170,6 +170,8 @@ public class CommandContributionItem extends ContributionItem {
 
 	private ImageDescriptor contributedHoverIcon;
 
+	private IServiceLocator serviceLocator;
+
 	/**
 	 * Create a CommandContributionItem to place in a ContributionManager.
 	 * 
@@ -196,14 +198,15 @@ public class CommandContributionItem extends ContributionItem {
 		this.helpContextId = contributionParameters.helpContextId;
 		this.visibleEnabled = contributionParameters.visibleEnabled;
 		this.mode = contributionParameters.mode;
+		this.serviceLocator = contributionParameters.serviceLocator;
 
-		menuService = (IMenuService) contributionParameters.serviceLocator
+		menuService = (IMenuService) serviceLocator
 				.getService(IMenuService.class);
-		commandService = (ICommandService) contributionParameters.serviceLocator
+		commandService = (ICommandService) serviceLocator
 				.getService(ICommandService.class);
-		handlerService = (IHandlerService) contributionParameters.serviceLocator
+		handlerService = (IHandlerService) serviceLocator
 				.getService(IHandlerService.class);
-		bindingService = (IBindingService) contributionParameters.serviceLocator
+		bindingService = (IBindingService) serviceLocator
 				.getService(IBindingService.class);
 		IWorkbenchLocationService workbenchLocationService = (IWorkbenchLocationService) contributionParameters.serviceLocator.getService(IWorkbenchLocationService.class);
 		display = workbenchLocationService.getWorkbench().getDisplay();
@@ -258,7 +261,7 @@ public class CommandContributionItem extends ContributionItem {
 						// it's OK to not have a helpContextId
 					}
 				}
-				IWorkbenchLocationService wls = (IWorkbenchLocationService) contributionParameters.serviceLocator
+				IWorkbenchLocationService wls = (IWorkbenchLocationService) serviceLocator
 						.getService(IWorkbenchLocationService.class);
 				final IWorkbench workbench = wls.getWorkbench();
 				if (workbench != null && helpContextId != null) {
@@ -418,7 +421,8 @@ public class CommandContributionItem extends ContributionItem {
 	 * state.
 	 * </p>
 	 * 
-	 * @return The parameterized command for this contribution.
+	 * @return The parameterized command for this contribution. May be
+	 *         <code>null</code>.
 	 * 
 	 * @since 3.5
 	 */
@@ -632,10 +636,15 @@ public class CommandContributionItem extends ContributionItem {
 		ToolItem item = (ToolItem) widget;
 
 		String text = label;
+		String tooltip = label;
 		if (text == null) {
 			if (command != null) {
 				try {
 					text = command.getCommand().getName();
+					tooltip = command.getCommand().getDescription();
+					if (tooltip == null || tooltip.trim().length() == 0) {
+						tooltip = text;
+					}
 				} catch (NotDefinedException e) {
 					StatusManager.getManager().handle(
 							StatusUtil.newStatus(IStatus.ERROR,
@@ -650,7 +659,7 @@ public class CommandContributionItem extends ContributionItem {
 			item.setText(text);
 		}
 
-		String toolTipText = getToolTipText(text);
+		String toolTipText = getToolTipText(tooltip);
 		item.setToolTipText(toolTipText);
 
 		if (item.getSelection() != checkedState) {
@@ -992,4 +1001,27 @@ public class CommandContributionItem extends ContributionItem {
 		}
 
 	};
+
+	/**
+	 * Provide info on the rendering data contained in this item.
+	 * 
+	 * @return a {@link CommandContributionItemParameter}. Valid fields are
+	 *         serviceLocator, id, style, icon, disabledIcon, hoverIcon, label,
+	 *         helpContextId, mnemonic, tooltip. The Object will never be
+	 *         <code>null</code>, although any of the fields may be
+	 *         <code>null</code>.
+	 * @since 3.7
+	 */
+	public CommandContributionItemParameter getData() {
+		CommandContributionItemParameter data = new CommandContributionItemParameter(
+				serviceLocator, getId(), null, style);
+		data.icon = contributedIcon;
+		data.disabledIcon = contributedDisabledIcon;
+		data.hoverIcon = contributedHoverIcon;
+		data.label = contributedLabel;
+		data.helpContextId = helpContextId;
+		data.mnemonic = mnemonic;
+		data.tooltip = tooltip;
+		return data;
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/MenuUtil.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/MenuUtil.java
index bd9d9a7..c231d29 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/MenuUtil.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/MenuUtil.java	
@@ -19,6 +19,15 @@ package org.eclipse.ui.menus;
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
 public class MenuUtil {
+	/**
+	 * 
+	 * Workbench Menu. On supported platforms, this menu is shown when no
+	 * workbench windows are active
+	 * 
+	 * @since 3.7
+	 * 
+	 * */
+	public final static String WORKBENCH_MENU = "menu:org.eclipse.ui.workbench.menu"; //$NON-NLS-1$
 	/** Main Menu */
 	public final static String MAIN_MENU = "menu:org.eclipse.ui.main.menu"; //$NON-NLS-1$
 	/** Main ToolBar (CoolBar) */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/UIElement.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/menus/UIElement.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/IWorkbenchAdapter3.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/IWorkbenchAdapter3.java
new file mode 100644
index 0000000..15bb096
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/IWorkbenchAdapter3.java	
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Fair Isaac Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Fair Isaac Corporation <Hemant.Singh at Gmail.com> - Initial API and implementation - http://bugs.eclipse.org/326695
+ ******************************************************************************/
+
+package org.eclipse.ui.model;
+
+import org.eclipse.jface.viewers.StyledString;
+
+/**
+ * Extension interface for <code>IWorkbenchAdapter</code> that allows for
+ * StyledString support.
+ * 
+ * @see IWorkbenchAdapter
+ * @see WorkbenchLabelProvider
+ * @see BaseWorkbenchContentProvider
+ * @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider
+ * 
+ * @since 3.7
+ */
+public interface IWorkbenchAdapter3 {
+
+	/**
+	 * Returns the styled text label for the given element.
+	 * 
+	 * @param element
+	 *            the element to evaluate the styled string for
+	 * @return the styled string.
+	 */
+	public StyledString getStyledText(Object element);
+}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchAdapter.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchAdapter.java
index 235384e..af1c8c9 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchAdapter.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchAdapter.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,10 +7,12 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Fair Isaac Corporation <Hemant.Singh at Gmail.com> - http://bugs.eclipse.org/333590
  *******************************************************************************/
 package org.eclipse.ui.model;
 
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.graphics.RGB;
 
@@ -21,7 +23,7 @@ import org.eclipse.swt.graphics.RGB;
  * @since 3.0
  */
 public abstract class WorkbenchAdapter implements IWorkbenchAdapter,
-        IWorkbenchAdapter2 {
+        IWorkbenchAdapter2, IWorkbenchAdapter3 {
     /**
      * The empty list of children.
      */
@@ -83,4 +85,17 @@ public abstract class WorkbenchAdapter implements IWorkbenchAdapter,
     public FontData getFont(Object element) {
         return null;
     }
-}
+
+    /**
+     * The default implementation of this <code>IWorkbenchAdapter3</code> method
+     * returns the {@link StyledString} which wraps the label of the element.
+     * Subclasses may override.
+     * 
+     * @return Return the {@link StyledString} which wraps the label of the
+     *         element.
+     * @since 3.7
+     */
+    public StyledString getStyledText(Object object) {
+        return new StyledString(getLabel(object));
+    }
+}
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchLabelProvider.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchLabelProvider.java
index 57f8831..1d459f1 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchLabelProvider.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/model/WorkbenchLabelProvider.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     Fair Isaac Corporation <Hemant.Singh at Gmail.com> - http://bugs.eclipse.org/326695
  *******************************************************************************/
 package org.eclipse.ui.model;
 
@@ -17,11 +18,15 @@ import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.resource.LocalResourceManager;
 import org.eclipse.jface.resource.ResourceManager;
 import org.eclipse.jface.viewers.DecoratingLabelProvider;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
 import org.eclipse.jface.viewers.IColorProvider;
 import org.eclipse.jface.viewers.IFontProvider;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.StyledString.Styler;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.FontData;
@@ -40,7 +45,7 @@ import org.eclipse.ui.internal.util.Util;
  * on the labels and icons of adaptable objects.
  */
 public class WorkbenchLabelProvider extends LabelProvider implements
-        IColorProvider, IFontProvider {
+        IColorProvider, IFontProvider, IStyledLabelProvider {
 
     /**
      * Returns a workbench label provider that is hooked up to the decorator
@@ -143,6 +148,19 @@ public class WorkbenchLabelProvider extends LabelProvider implements
     }
 
 	/**
+	 * Returns the implementation of IWorkbenchAdapter3 for the given object.
+	 * 
+	 * @param o
+	 *            the object to look up.
+	 * @return IWorkbenchAdapter3 or<code>null</code> if the adapter is not
+	 *         defined or the object is not adaptable.
+	 * @since 3.7
+	 */
+	protected final IWorkbenchAdapter3 getAdapter3(Object o) {
+		return (IWorkbenchAdapter3) Util.getAdapter(o, IWorkbenchAdapter3.class);
+	}
+
+	/**
 	 * Lazy load the resource manager
 	 * 
 	 * @return The resource manager, create one if necessary
@@ -176,6 +194,51 @@ public class WorkbenchLabelProvider extends LabelProvider implements
 		return (Image) getResourceManager().get(descriptor);
     }
 
+	/**
+	 * The default implementation of this returns the styled text label for the
+	 * given element.
+	 * 
+	 * @param element
+	 *            the element to evaluate the styled string for
+	 * 
+	 * @return the styled string.
+	 * 
+	 * @since 3.7
+	 */
+    public StyledString getStyledText(Object element) {
+        IWorkbenchAdapter3 adapter = getAdapter3(element);
+		if (adapter == null) {
+			// If adapter class doesn't implement IWorkbenchAdapter3 than use
+			// StyledString with text of element. Since the output of getText is
+			// already decorated, so we don't need to call decorateText again
+			// here.
+			return new StyledString(getText(element));
+		}
+		StyledString styledString = adapter.getStyledText(element);
+		// Now, re-use any existing decorateText implementation, to decorate
+		// this styledString.
+		String decorated = decorateText(styledString.getString(), element);
+		Styler styler = getDecorationStyle(element);
+		return StyledCellLabelProvider.styleDecoratedString(decorated, styler, styledString);
+    }
+
+	/**
+	 * Sets the {@link org.eclipse.jface.viewers.StyledString.Styler} to be used
+	 * for string decorations. By default the
+	 * {@link StyledString#DECORATIONS_STYLER decoration style}. Clients can
+	 * override.
+	 * 
+	 * @param element
+	 *            the element that has been decorated
+	 * 
+	 * @return return the decoration style
+	 * 
+	 * @since 3.7
+	 */
+	protected Styler getDecorationStyle(Object element) {
+		return StyledString.DECORATIONS_STYLER;
+	}
+
     /* (non-Javadoc)
      * Method declared on ILabelProvider
      */
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/MultiPageEditorSite.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/MultiPageEditorSite.java
index d3811ce..4aec47a 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/MultiPageEditorSite.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/MultiPageEditorSite.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -532,6 +532,9 @@ public class MultiPageEditorSite implements IEditorSite, INestable {
 			if (oldSelectionProvider instanceof IPostSelectionProvider) {
 				((IPostSelectionProvider) oldSelectionProvider)
 						.removePostSelectionChangedListener(getPostSelectionChangedListener());
+			} else {
+				oldSelectionProvider
+						.removeSelectionChangedListener(getPostSelectionChangedListener());
 			}
 		}
 		if (selectionProvider != null) {
@@ -540,6 +543,8 @@ public class MultiPageEditorSite implements IEditorSite, INestable {
 			if (selectionProvider instanceof IPostSelectionProvider) {
 				((IPostSelectionProvider) selectionProvider)
 						.addPostSelectionChangedListener(getPostSelectionChangedListener());
+			} else {
+				selectionProvider.addSelectionChangedListener(getPostSelectionChangedListener());
 			}
 		}
 	}
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBook.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBook.java
index 7a764bd..5f57aab 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBook.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBook.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -92,30 +92,24 @@ public class PageBook extends Composite {
      * @param page the page to show
      */
     public void showPage(Control page) {
-
-        if (page == currentPage) {
-			return;
-		}
-        if (page.getParent() != this) {
+		if (page.isDisposed() || page.getParent() != this) {
 			return;
 		}
 
-        Control oldPage = currentPage;
-        currentPage = page;
+		currentPage = page;
 
         // show new page
-        if (page != null) {
-            if (!page.isDisposed()) {
-                page.setVisible(true);
-                layout(true);
-                //				if (fRequestFocusOnShowPage)
-                //					page.setFocus();
-            }
-        }
+		page.setVisible(true);
+		layout(true);
 
-        // hide old *after* new page has been made visible in order to avoid flashing
-        if (oldPage != null && !oldPage.isDisposed()) {
-			oldPage.setVisible(false);
+		// hide old (and all others) *after* new page has been made visible in
+		// order to avoid flashing
+		Control[] children = getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			if (child != page && !child.isDisposed()) {
+				child.setVisible(false);
+			}
 		}
     }
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBookView.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBookView.java
index 562ab56..77958f0 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBookView.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBookView.java	
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/presentations/package.html b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/presentations/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/services/package.html b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/services/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/statushandlers/AbstractStatusAreaProvider.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/statushandlers/AbstractStatusAreaProvider.java
index 90f89f1..c3e950e 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/statushandlers/AbstractStatusAreaProvider.java	
+++ b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/statushandlers/AbstractStatusAreaProvider.java	
@@ -59,13 +59,9 @@ public abstract class AbstractStatusAreaProvider extends ErrorSupportProvider {
 
 	/**
 	 * This method is called before
-	 * {@link #createSupportArea(Composite, StatusAdapter)} to check if it will
-	 * display any significant implementation.
-	 * <p>
-	 * <b>Important</b>: This API is a part of work in progress and therefore is
-	 * suitable only for support area providers (which are presented in the
-	 * status dialog tray).
-	 * </p>
+	 * {@link #createSupportArea(Composite, StatusAdapter)} to check if the
+	 * {@link AbstractStatusAreaProvider} will display any significant
+	 * informations. If not, then it will not be presented at all.
 	 * 
 	 * @param statusAdapter
 	 *            - {@link StatusAdapter} for which status are will be
@@ -77,4 +73,22 @@ public abstract class AbstractStatusAreaProvider extends ErrorSupportProvider {
 	public boolean validFor(StatusAdapter statusAdapter) {
 		return true;
 	}
+
+	/**
+	 * This method is called before
+	 * {@link #createSupportArea(Composite, IStatus)} to check if the
+	 * {@link AbstractStatusAreaProvider} will display any significant
+	 * informations. If not, then it will not be presented at all.
+	 * 
+	 * This implementation wraps the {@link IStatus} into {@link StatusAdapter}
+	 * and calls {@link #validFor(StatusAdapter)}.
+	 * 
+	 * @param status
+	 *            - {@link IStatus} for which status are will be requested.
+	 * @return true if provider is able to process particular {@link IStatus}
+	 * @since 3.7
+	 */
+	public final boolean validFor(IStatus status) {
+		return validFor(new StatusAdapter(status));
+	}
 }
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/testing/IWorkbenchPartTestable.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/testing/IWorkbenchPartTestable.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/testing/package.html b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/testing/package.html
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/themes/ColorUtil.java b/eclipse/plugins/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/themes/ColorUtil.java
old mode 100644
new mode 100755
diff --git a/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
index 24576cf..b13e631 100644
--- a/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ui.workbench; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: e4-workbench.jar,
  compatibility.jar,
  .
@@ -50,7 +50,7 @@ Export-Package: org.eclipse.ui;ui.workbench=split;mandatory:="ui.workbench",
  org.eclipse.ui.internal.keys.model;x-internal:=true,
  org.eclipse.ui.internal.layout;x-friends:="org.eclipse.ui.presentations.r21,org.eclipse.ui.intro",
  org.eclipse.ui.internal.menus;x-friends:="org.eclipse.ui",
- org.eclipse.ui.internal.misc;x-internal:=true,
+ org.eclipse.ui.internal.misc;x-friends:="org.eclipse.ui",
  org.eclipse.ui.internal.model;x-internal:=true,
  org.eclipse.ui.internal.operations;x-internal:=true,
  org.eclipse.ui.internal.part;x-internal:=true,
@@ -69,7 +69,7 @@ Export-Package: org.eclipse.ui;ui.workbench=split;mandatory:="ui.workbench",
  org.eclipse.ui.internal.statushandlers;x-internal:=true,
  org.eclipse.ui.internal.testing;x-internal:=true,
  org.eclipse.ui.internal.themes;x-friends:="org.eclipse.ui",
- org.eclipse.ui.internal.tweaklets;x-internal:=true,
+ org.eclipse.ui.internal.tweaklets;x-friends:="org.eclipse.ui.ide.application,org.eclipse.ui",
  org.eclipse.ui.internal.util;x-friends:="org.eclipse.ui,org.eclipse.ui.presentations.r21,org.eclipse.ui.ide",
  org.eclipse.ui.internal.wizards;x-internal:=true,
  org.eclipse.ui.internal.wizards.preferences;x-internal:=true,
diff --git a/eclipse/plugins/org.eclipse.ui/.options b/eclipse/plugins/org.eclipse.ui/.options
index 8822dc0..7812b81 100644
--- a/eclipse/plugins/org.eclipse.ui/.options
+++ b/eclipse/plugins/org.eclipse.ui/.options
@@ -6,10 +6,10 @@ org.eclipse.ui/debug=false
 # Show all jobs in dialogs and the progress view including the support jobs
 org.eclipse.ui/debug/showAllJobs=false
 
-#Report if a stale job was found
+# Report if a stale job was found
 org.eclipse.ui/debug/job.stale=false
 
-#Report if an image cannot be resolved when it is declared
+# Report if an image cannot be resolved when it is declared
 org.eclipse.ui/debug/declaredImages=false
 
 # Enable extended SWT debugging of the Device.
@@ -27,6 +27,10 @@ org.eclipse.ui/debug/workingSets=false
 # Enable the trace of SWT graphics.
 org.eclipse.ui/trace/graphics=false
 
+# Enable tracing of perspective debugging code
+org.eclipse.ui/trace/perspectives=false
+
+
 ## Note that logging of all performance events are controlled by a central flag
 ## Turn this flag on to enable tracking of performance events
 ## org.eclipse.core.runtime/perf=true
diff --git a/eclipse/plugins/org.eclipse.ui/.settings/.api_filters b/eclipse/plugins/org.eclipse.ui/.settings/.api_filters
new file mode 100644
index 0000000..02ffa0a
--- /dev/null
+++ b/eclipse/plugins/org.eclipse.ui/.settings/.api_filters
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?><component id="org.eclipse.ui" version="2">
+    <resource path="META-INF/MANIFEST.MF">
+        <filter id="0"/>
+        <filter id="923795461">
+            <message_arguments>
+                <message_argument value="3.7.0.qualifier"/>
+                <message_argument value="3.6.0.I20100603-1100"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.browser.WebKit">
+        <filter id="305426566">
+            <message_arguments>
+                <message_argument value="org.eclipse.swt.browser.WebKit"/>
+                <message_argument value="org.eclipse.ui_3.6.0"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF
index 06e4e68..2668160 100644
--- a/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.ui; singleton:=true
-Bundle-Version: 3.6.2.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.ui.internal.UIPlugin
 Bundle-ActivationPolicy: lazy
diff --git a/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html b/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html
index 2947b5f..999ffd6 100644
--- a/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html
+++ b/eclipse/plugins/org.eclipse.ui/buildnotes_workbench.html
@@ -4,124 +4,605 @@
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta name="Build" content="Build">
-   <title>Eclipse Platform Release Notes (3.5) - JFace and Workbench</title>
+   <title>Eclipse Platform Release Notes (3.7) - JFace and Workbench</title>
 </head>
 
 <body>
 
-<h1>Eclipse Platform Build Notes (3.5)<br>
+<h1>Eclipse Platform Build Notes (3.7)<br>
 JFace and Workbench</h1>
 
-<p>Integration Build (February 03, 2011, 10:58 a.m.)</p>
+<p>Integration Build (June 01, 2011, 11:30 a.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336110">Bug 336110</a>. Plug-in version of org.eclipse.jface needs to be 3.6.2 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=347491">Bug 347491</a>. Virtual tree test failures on Mac OS 10.6.7 (FIXED)<br>
   </p>
 
-<p>Integration Build (February 01, 2011, 7:49 a.m.)</p>
+<p>Integration Build (May 25, 2011, 11:42 a.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=162079">Bug 162079</a>. [PropertiesView] Properties view should be a post selection listener (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332041">Bug 332041</a>. Backport bug 162079: [PropertiesView] Properties view should be a post selection listener (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333898">Bug 333898</a>. [Preferences] [accessibility] Preferences Dialog menu button needs a tooltip (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345127">Bug 345127</a>. mac tests are failing due to os upgrade (REOPENED)<br>
   </p>
 
-<p>Integration Build (January 11, 2011, 3:26 p.m.)</p>
+<p>Integration Build (May 22, 2011, 2:47 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=162079">Bug 162079</a>. [PropertiesView] Properties view should be a post selection listener (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302184">Bug 302184</a>. [About] About dialog text - needs to not cache system property values (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319337">Bug 319337</a>. [Win32] WindowXP command "Close Group" can not close all the Eclipse window that in one group (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332041">Bug 332041</a>. Backport bug 162079: [PropertiesView] Properties view should be a post selection listener (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333898">Bug 333898</a>. [Preferences] [accessibility] Preferences Dialog menu button needs a tooltip (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346543">Bug 346543</a>. [Contributions] [JFace] MenuManager should identify its widgets (FIXED)<br>
   </p>
 
-<p>Integration Build (November 30, 2010, 3:27 p.m.)</p>
+<p>Integration Build (May 18, 2011, 4:19 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=111525">Bug 111525</a>. [Import/Export]  Import file system doesn't include the top folder you select (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309746">Bug 309746</a>. [CommonNavigator] intermittent test failure in org.eclipse.ui.tests.navigator.SorterTest.testSorterContentOverride (REOPENED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331303">Bug 331303</a>. [backport] Regression: Convert line delimiter action enablement is broken (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321564">Bug 321564</a>. [Dialogs] '<' in Open Resource not working as expected (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=344654">Bug 344654</a>. [EditorMgmt] Editors should be able to treat large files specially (e.g. deny opening huge files) (FIXED)<br>
   </p>
 
-<p>Integration Build (November 23, 2010, 3:12 p.m.)</p>
+<p>Integration Build (May 09, 2011, 10:25 a.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327138">Bug 327138</a>. [Import/Export] WizardExportResourcesPage's Finish button isn't sensitive to Select/Deselect All (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329129">Bug 329129</a>. [Mac] Unhandled event loop exception when closing Error Log Event Details (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330549">Bug 330549</a>. [Wizards] cancelable parameter does not disable Wizard progress bar cancel button (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334362">Bug 334362</a>. Properties dialog: properties for closed project are sometimes wrong (FIXED)<br>
   </p>
 
-<p>Integration Build (November 16, 2010, 4:26 p.m.)</p>
+<p>Integration Build (May 06, 2011, 4:18 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329333">Bug 329333</a>. [Backport] Concurrent access to file while decorating (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329838">Bug 329838</a>. [KeyBindings] Exporting key preferences to CSV does not allow context being null (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330285">Bug 330285</a>. [Commands] Stackoverflow in BindingSystem (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=88788">Bug 88788</a>. [KeyBindings] request: Back/Forward keys and mouse buttons don't work with Eclipse (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=344883">Bug 344883</a>. EditorSelectionDialog#promptForExternalEditor() leaks an image (FIXED)<br>
   </p>
 
-<p>Integration Build (November 02, 2010, 3:48 p.m.)</p>
+<p>Integration Build (May 04, 2011, 7:39 a.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321155">Bug 321155</a>. [DynamicGUI] UIExtensionTracker calling Display.syncExec() on disposed Display (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=191834">Bug 191834</a>. [JFace] class PopupDialog cannot be loaded in a non-UI thread (FIXED)<br>
   </p>
 
-<p>Integration Build (August 26, 2010, 1:46 p.m.)</p>
+<p>Integration Build (April 26, 2011, 4:35 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244757">Bug 244757</a>. [ActivityMgmt] ConcurrentModificationException when activities added dynamically (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=224703">Bug 224703</a>. [WorkingSets] Project explorer doesn't show recreated working set (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306352">Bug 306352</a>. [Preferences] PreferenceConverter does not store black color in preference store (ASSIGNED)<br>
   </p>
 
-<p>Integration Build (August 25, 2010, 3:47 a.m.)</p>
+<p>Integration Build (April 25, 2011, 3:57 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244757">Bug 244757</a>. [ActivityMgmt] ConcurrentModificationException when activities added dynamically (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284269">Bug 284269</a>. [KeyBindings] Reduce memory footprint of BindingManager (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=316701">Bug 316701</a>. [Contributions] Service initialization wrong! Sources must be initialized before Handlers (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319852">Bug 319852</a>. [Dialogs] Open Resource now interprets "." as "*.", unlike 3.5 (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322887">Bug 322887</a>. [Mac] [Commands] Command from 'org.eclipse.ui.cocoa' fragment references category defined in 'org.eclipse.ui.cheatsheets' (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=224703">Bug 224703</a>. [WorkingSets] Project explorer doesn't show recreated working set (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343141">Bug 343141</a>. [Markers] Problems view: State lost after checking "Show all items" and clicking OK (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343261">Bug 343261</a>. PlatformUITest.testWithoutDisplayAccess_sync() fails on Java 7 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343721">Bug 343721</a>. [CommonNavigator] getParent of NavigatorContentServiceContentProvider does not return expected node. (FIXED)<br>
   </p>
 
-<p>Integration Build (August 17, 2010, 3:27 p.m.)</p>
+<p>Integration Build (April 21, 2011, 4:23 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298961">Bug 298961</a>. [Presentations] [perfs] PresentationActivateTest#Presentation... test has an invalid duration (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337240">Bug 337240</a>. [CommonNavigator] Mac OSX: Dragging file in Project Explorer creates backwards animation (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343477">Bug 343477</a>. [CommonNavigagor] ProjectExplorer property sheet adapter factory is incorrectly declared (FIXED)<br>
+  </p>
+
+<p>Integration Build (April 20, 2011, 4:17 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=213290">Bug 213290</a>. [Dialogs] Browse Button in new Plug-in Project Wizard does not work when 'Location' path is null (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=228229">Bug 228229</a>. [JFace] Should we have a jfacefonts_vista.properties file? (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=298952">Bug 298952</a>. [Progress] ProgressMonitorDialogPerformanceTest#testLongNames() runs too short on windows test machines (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340136">Bug 340136</a>. [perfs] Performance regression in OpenCloseViewTest#showView:BookmarkView() (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343160">Bug 343160</a>. Key bindings preference page has duplicated mnemonic (FIXED)<br>
+  </p>
+
+<p>Integration Build (April 18, 2011, 3:09 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340978">Bug 340978</a>. [IDE] Add UI preference for new Preference: PREF_LIGHTWEIGHT_AUTO_REFRESH (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341903">Bug 341903</a>. [Perspectives] Code-Bug in CustomizePerspectiveDialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342685">Bug 342685</a>. EditorWithStateTest and WorkingSetTest fail on Java 7 (FIXED)<br>
+  </p>
+
+<p>Integration Build (April 11, 2011, 2:49 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=153280">Bug 153280</a>. [ActivityMgmt] Examples are shown even when capability disabled (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275910">Bug 275910</a>. [Widgets] PaintListener on Tree not invoked when item count is 0 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=278402">Bug 278402</a>. [Import/Export] Export project does not export empty folders (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292198">Bug 292198</a>. [Viewers] Enable optimizations in font support for StyledCellLabelProvider (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307545">Bug 307545</a>. [Workbench] heap status garbage collection/computation on UI thread (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341447">Bug 341447</a>. [Markers] Problems view columns reset (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341702">Bug 341702</a>. [JFace] CompositeImageDescriptor mixes images with alpha channel wrong (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=342003">Bug 342003</a>. [Markers] Failure in marker session tests (CLOSED)<br>
+  </p>
+
+<p>Integration Build (April 04, 2011, 2:48 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=88788">Bug 88788</a>. [KeyBindings] request: Back/Forward keys and mouse buttons don't work with Eclipse (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=126429">Bug 126429</a>. [ActivityMgmt] Activities should allow default enablement to be controlled by product definition (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=140425">Bug 140425</a>. [WorkbenchParts] Closing Workspace gives "Widget disposed too early!" in log (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302308">Bug 302308</a>. [Perspectives] NPE in PerspectiveHelper.addPart() (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312540">Bug 312540</a>. [LinkedResources] Copy resource in Navigator and Project Explorer always shows dialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327004">Bug 327004</a>. [Viewers] Widget is disposed exception when refreshing TreeViewer after modifying a filter (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335985">Bug 335985</a>. Adapt the KeyController model to the e4 model (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338912">Bug 338912</a>. [Markers] Issues in Marker preferences dialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340978">Bug 340978</a>. [IDE] Add UI preference for new Preference: PREF_LIGHTWEIGHT_AUTO_REFRESH (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341219">Bug 341219</a>. [MPE] MultiPageEditorSite may not end up forwarding post selection events (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341259">Bug 341259</a>. [JFace] Add debug flag to find bad content providers that return multiple equal children (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341327">Bug 341327</a>. [Commands] Handler conflict due to multiple instances of EditorActionBars for one editor id (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341612">Bug 341612</a>. most tests won't run by default (FIXED)<br>
+  </p>
+
+<p>Integration Build (March 28, 2011, 2:55 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=130854">Bug 130854</a>. [CellEditors] JFace TableViewer ignoring ICellEditor validator state (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323431">Bug 323431</a>. [ActivityMgmt] ConcurrentModificationException when activities added dynamically (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340268">Bug 340268</a>. [Import/Export] Button label truncation on Import/Export Preferences dialogs (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340342">Bug 340342</a>. [Contributions] Tooltips for command (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340656">Bug 340656</a>. [Preferences] FileEditorsPreferencePage reuses a GridData instance for two different controls (FIXED)<br>
+  </p>
+
+<p>Integration Build (March 21, 2011, 2:44 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297375">Bug 297375</a>. [Contributions] DynamicToolBarContributionItem needs to proxy more methods (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306352">Bug 306352</a>. [Preferences] PreferenceConverter does not store black color in preference store (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339129">Bug 339129</a>. Perspective reset actions are not consistent. (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339713">Bug 339713</a>. [Markers] number of visible items not preserved when view is closed (FIXED)<br>
+  </p>
+
+<p>Integration Build (March 14, 2011, 2:56 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339129">Bug 339129</a>. Perspective reset actions are not consistent. (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339227">Bug 339227</a>. [Preferences] Startup and shutdown preference page: Restore defaults does not work as expected (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339267">Bug 339267</a>. TrayDialog closes the tray if the help button is pressed with a cheat sheet open (FIXED)<br>
+  </p>
+
+<p>Integration Build (March 10, 2011, 10:32 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339481">Bug 339481</a>. [Markers] NegativeArraySizeException when trying to create Problems view (REOPENED)<br>
+  </p>
+
+<p>Integration Build (March 09, 2011, 4:10 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339347">Bug 339347</a>. [Markers] Can't toggle item limits in Problems view any more without losing limit (FIXED)<br>
+  </p>
+
+<p>Integration Build (March 09, 2011, 11:48 a.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201391">Bug 201391</a>. [MPE] notifaction when active page of a MultiPageEditorPart changes (FIXED)<br>
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=225601">Bug 225601</a>. Adopt API tooling for UI bundles (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231119">Bug 231119</a>. [GlobalActions] RefreshAction markes as @noextend but should be (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=239421">Bug 239421</a>. [EditorMgmt] MultiEditor: does not support propagate events (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=246162">Bug 246162</a>. [Commands] [Services] Make IWorkbenchLocationService public (NEW)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=250651">Bug 250651</a>. [Contributions] CommandContributionItemParameter's constructor javadoc needs correction (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255136">Bug 255136</a>. [Commands] [Services] IEvaluationReference needs to remove its provisional API claim (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=256158">Bug 256158</a>. [Metadata] Constants in ISharedImages cause API tooling errors (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264030">Bug 264030</a>. [IDE] Platform UI refrences update.configurator (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=265812">Bug 265812</a>. [StatusHandling] Add @noextend to the WSDM (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267470">Bug 267470</a>. [Navigator] Deprecate the ResourceNavigator (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270472">Bug 270472</a>. [JFace] Orca cannot read Eclipse status line (FIXED)<br>
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283676">Bug 283676</a>. [FieldAssist] ControlDecoration should add @noextend API tooling tag (FIXED)<br>
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284330">Bug 284330</a>. [JFace] Add isVisible API to ControlDecoration (FIXED)<br>
 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287454">Bug 287454</a>. [KeyBindings] F16-F19 unusable as shortcut keys in General -> Keys (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292762">Bug 292762</a>. [Contributions] MenuUtil provides constants and static methods ... it should be marked noextend (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297271">Bug 297271</a>. [Undo] AbstractWorkspaceOperation and its subclasses don't have @noextend API tags (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302529">Bug 302529</a>. [UX] [Progress] Show Eclipse IDE progress in the Eclipse icon on the Windows 7 Task Bar (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315620">Bug 315620</a>. [Progress] WorkbenchWindow is leaked (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330206">Bug 330206</a>. Help button setHelpAvailable(), API is not working (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=339080">Bug 339080</a>. API tool errors in latest SWT (FIXED)<br>
   </p>
 
-<p>Integration Build (July 13, 2010, 2:55 p.m.)</p>
+<p>Integration Build (March 07, 2011, 11:30 a.m.)</p>
   <p>Problem reports updated</p>
   <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338843">Bug 338843</a>. Update Display#getAppMenuBar() calls (FIXED)<br>
   </p>
 
-<p>Integration Build (July 06, 2010, 3:17 p.m.)</p>
+<p>Integration Build (March 06, 2011, 7:26 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315620">Bug 315620</a>. [Progress] WorkbenchWindow is leaked (FIXED)<br>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318862">Bug 318862</a>. [Viewers] [Provider] ClassCastException happened at jface when selecting tree with using picture-capture software. (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283820">Bug 283820</a>. [Contexts] NPE on Keys preference page in ContextModel.filterContexts (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318914">Bug 318914</a>. [WorkingSets] Provide a preference to set size of the list of most recently used working sets (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327396">Bug 327396</a>. [WorkingSets] updating of working sets during workbench restore can cause loss of working sets (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333417">Bug 333417</a>. [KeyBindings] Rename "Workbench" context and hide if not supported (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335308">Bug 335308</a>. [JFace] JavaDoc of ControlDecoration#setDescriptionText is wrong (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335960">Bug 335960</a>. [IDE] Update BuildAction to use new Workspace Build Configurations API (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338056">Bug 338056</a>. SourceProviders through plugin.xml do not work (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338843">Bug 338843</a>. Update Display#getAppMenuBar() calls (FIXED)<br>
+  </p>
+
+<p>Integration Build (March 06, 2011, 7:23 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=283820">Bug 283820</a>. [Contexts] NPE on Keys preference page in ContextModel.filterContexts (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=318914">Bug 318914</a>. [WorkingSets] Provide a preference to set size of the list of most recently used working sets (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327396">Bug 327396</a>. [WorkingSets] updating of working sets during workbench restore can cause loss of working sets (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333417">Bug 333417</a>. [KeyBindings] Rename "Workbench" context and hide if not supported (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335308">Bug 335308</a>. [JFace] JavaDoc of ControlDecoration#setDescriptionText is wrong (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335960">Bug 335960</a>. [IDE] Update BuildAction to use new Workspace Build Configurations API (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338056">Bug 338056</a>. SourceProviders through plugin.xml do not work (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=338843">Bug 338843</a>. Update Display#getAppMenuBar() calls (FIXED)<br>
+  </p>
+
+<p>Integration Build (M�??�?�¤rz 07, 2011, 12:34 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331992">Bug 331992</a>. Workspace lock dialog not brought to front (FIXED)<br>
+  </p>
+
+<p>Integration Build (February 28, 2011, 2:52 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=72556">Bug 72556</a>. [KeyBindings] interactions: Mnemonics should not work across workbench parts (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267424">Bug 267424</a>. [Perspectives] Closing a hidden editor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333417">Bug 333417</a>. [KeyBindings] Rename "Workbench" context and hide if not supported (FIXED)<br>
+  </p>
+
+<p>Integration Build (February 22, 2011, 8:04 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297258">Bug 297258</a>. [IDE] Dialog font not honoured completely in the 'Local History' preference page (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305367">Bug 305367</a>. [DataBinding] Detail value observables for observable (list|set|map)s (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333417">Bug 333417</a>. [KeyBindings] Rename "Workbench" context and hide if not supported (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333684">Bug 333684</a>. [Dialogs] SWTExceptions when closing launch configuration dialog with the help up (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335543">Bug 335543</a>. ProgressAnimationItem toolbar button selection opens ProgressView (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335996">Bug 335996</a>. [Dialogs] TrayDialog must not include tray when saving size (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337229">Bug 337229</a>. Make OpenStrategy's constant for post selection delay API (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=337347">Bug 337347</a>. Mention that IPartListener2 implementations can implement IPageChangedListener to get page change notifications (FIXED)<br>
+  </p>
+
+<p>Integration Build (February 14, 2011, 3:00 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=140101">Bug 140101</a>. [Markers] Focus cannot be set to "Creation time" field in the properties dialog of the task (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=269916">Bug 269916</a>. [EFS] [Accessibility]Provide shortcut key for "Choose file system" in New Report Project dialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313899">Bug 313899</a>. [Progress] Every user-job causes a busy cursor to be shown for a minimum of 250ms (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325743">Bug 325743</a>. [PropertiesView] Blank display when maximize Properties view for a resource in a different view (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328708">Bug 328708</a>. Colors and Fonts preference page: Reset is broken (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336682">Bug 336682</a>. [ErrorHandling]  testSupport2 swallows the exception (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336684">Bug 336684</a>. [JFace] NPE in Tray Dialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=336954">Bug 336954</a>. [Dialogs] OpenResourceDialog & FilteredResourcesSelectionDialog set bogus help context to parent shell (FIXED)<br>
   </p>
 
-<p>Integration Build (June 24, 2010, 7:07 a.m.)</p>
+<p>Integration Build (February 07, 2011, 2:28 p.m.)</p>
   <p>Problem reports updated</p>
   <p>
-<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315839">Bug 315839</a>. [CommonNavigator] NPE in WorkingSetsContentProvider (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67035">Bug 67035</a>. [EditorMgmt] Hide Editors command should be renamed (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=105917">Bug 105917</a>. [IDE] Resource property page should mention the recursive 'isDerived' value (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=129309">Bug 129309</a>. [Workbench] allow 'Copy' on the status line (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=272153">Bug 272153</a>. [Wizards] Accessibility: Reading of back/next buttons by Screenreader (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302308">Bug 302308</a>. [Perspectives] NPE in PerspectiveHelper.addPart() (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313430">Bug 313430</a>. [Workbench] NPE during startup at WorkbenchKeyboard.isPartialMatch (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317102">Bug 317102</a>. [EditorMgmt] Recursive editor activation when using AbstractMultiEditor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329754">Bug 329754</a>. [Presentations] Misplaced view toolbar (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332367">Bug 332367</a>. [DataBinding] Performance of (WritableList|SimplePropertyObservableMap)#clear() (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334996">Bug 334996</a>. PageBook#showPage(Control) should set all other pages to invisible (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335877">Bug 335877</a>. [ActivityMgmt] [QuickAccess] Disabled/filtered contributions are available in the Quick Access dialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335976">Bug 335976</a>. CCE when trying to expand the markers' view's 'Group By' submenu (FIXED)<br>
+  </p>
+
+<p>Integration Build (January 31, 2011, 3:01 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=55295">Bug 55295</a>. [ViewMgmt] View menu is shown even if all of its items are invisible (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=188700">Bug 188700</a>. [Quick Acces] Ctrl+3 dialog too small in High Contrast (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=196856">Bug 196856</a>. [EditorMgmt] 'Switch to Editor' dialog should persist dialog bounds even if the dialog has been closed regularly (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310475">Bug 310475</a>. [FastView] Fast view's system menu enables/disables unpredictably (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334362">Bug 334362</a>. Properties dialog: properties for closed project are sometimes wrong (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334636">Bug 334636</a>. [TabbedProperties] NullPointerException in TabbedPropertySheetPage.disposeContributor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335608">Bug 335608</a>. [BiDi] Cannot launch with com.ibm.icu.base (FIXED)<br>
+  </p>
+
+<p>Integration Build (January 26, 2011, 8:01 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332644">Bug 332644</a>. [EditorMgmt] DefaultPartList leaks shells (REOPENED)<br>
+  </p>
+
+<p>Integration Build (January 26, 2011, 10:16 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=335318">Bug 335318</a>. Improve wording of new derived resource encoding option (FIXED)<br>
+  </p>
+
+<p>Integration Build (January 24, 2011, 12:23 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=2265">Bug 2265</a>. New project wizard bases icon on the closed icon (1GEG3RS) (FIXED)<br>
+  </p>
+
+<p>Integration Build (January 24, 2011, 7:44 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+  </p>
+
+<p>Integration Build (January 21, 2011, 4:08 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=303889">Bug 303889</a>. [BiDi] BIDI3.6: Triggering Eclipse mirroring and Bidi-script based languages translation (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334236">Bug 334236</a>. [Import/Export] "Copy projects into workspace" should not select all projects on change (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334524">Bug 334524</a>. [Commands] Loosing current selection of view after perspective switch (FIXED)<br>
+  </p>
+
+<p>Integration Build (January 17, 2011, 3:03 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300472">Bug 300472</a>. [Dialogs] [JFace] Provide accessor for dialog messages (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325899">Bug 325899</a>. [Preferences] [accessibility] Preferences Dialog menu button needs a tooltip (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333590">Bug 333590</a>. [Workbench] WorkbenchAdapterFactory can't adapt workbench adapter extension interfaces (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333684">Bug 333684</a>. [Dialogs] SWTExceptions when closing launch configuration dialog with the help up (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333970">Bug 333970</a>. [ErrorHandling] Test failures in official build: at org.eclipse.ui.tests.statushandlers.StatusDialogManagerTest.testBug276371(StatusDialogManagerTest.java:638) (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=334125">Bug 334125</a>. StatusPart.createShowLogButton(..) leaks an image (FIXED)<br>
+  </p>
+
+<p>Integration Build (January 10, 2011, 3:03 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=74073">Bug 74073</a>. [Mac] Closing window should not exit App (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=97787">Bug 97787</a>. [EditorMgmt] Untitled Text Editor - Can lose unsaved content when reusing text editors (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=127852">Bug 127852</a>. [UX][Help] Help button should be a toggle (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=207510">Bug 207510</a>. Call to IResource.setEncoding() persists derived file's encoding setting in .settings\org.eclipse.core.resources.prefs (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=208626">Bug 208626</a>. [KeyBindings] Mnemonic gets hidden if there is existing Alt key binding (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=221172">Bug 221172</a>. [Commands] [ViewMgmt] Window > Show View doesn't open existing instances of multi-instance views (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=235657">Bug 235657</a>. [Markers][Undo] regression: can no longer undo marker operations (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270007">Bug 270007</a>. [GlobalActions] Registering actions should not be required to use standard org.eclipse.ui commands (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300368">Bug 300368</a>. Resource Working Set shows inexistent project that cannot be deleted in Package Explorer (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305216">Bug 305216</a>. [EditorMgmt] Focus lost when closing a dirty editor from the editor selection dialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306611">Bug 306611</a>. [DataBinding] Converted value property (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313303">Bug 313303</a>. [KeyBindings] Add "shortcuts" keywords to Keys preference page (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323444">Bug 323444</a>. [Undo] [Commands] java.util.ConcurrentModificationException when trying to get the undo history from a source viewer (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324078">Bug 324078</a>. [IDE] Cannot create a virtual TreeViewer in ContentOutlinePage (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324663">Bug 324663</a>. [ActivityMgmt] Enabling activity through core expression overrides pattern binding, causing exception (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326340">Bug 326340</a>. [Workbench] Removing recent workspaces doesn't remove them from the "Switch Workspace" menu (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326695">Bug 326695</a>. [Workbench] WorkbenchLabelProvider and IWorkbenchAdapter doesn't support StyledString (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331335">Bug 331335</a>. [Wizards] Bad implementation of IWizard's dispose() method can prevent the dialog from closing (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331348">Bug 331348</a>. [DataBinding] Make get<Value|Set|List|Map> methods of properties non-final (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331621">Bug 331621</a>. Workbench throws NPE's on initial startup after install when bundles are started programmatically in earlyStartup() (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331665">Bug 331665</a>. Add UI for Bug 207510 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331909">Bug 331909</a>. [Workbench] Intermittent test failure in PlatformUITest.testWithoutDisplayAccess_sync() (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332123">Bug 332123</a>. [Examples] Get rid of warnings in 'org.eclipse.ui.examples.propertysheet' (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332216">Bug 332216</a>. [ViewMgmt] ErrorViewPart must implement setFocus() method (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332644">Bug 332644</a>. [EditorMgmt] DefaultPartList leaks shells (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332930">Bug 332930</a>. Simplify code from bug 207510 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333101">Bug 333101</a>. [Preferences] Redundant preferences node creation in LineDelimiterEditor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333577">Bug 333577</a>. [Win32] WindowXP command "Close Group" can not close all the Eclipse window that in one group (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333584">Bug 333584</a>. [GlobalActions] Save does not work (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333634">Bug 333634</a>. Cannot undo deletion of markers (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333689">Bug 333689</a>. [About] About dialog text - needs to not cache system property values (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=333741">Bug 333741</a>. 9 Errors in WorkspaceOperationsTests (FIXED)<br>
+  </p>
+
+<p>Integration Build (December 13, 2010, 6:53 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+  </p>
+
+<p>Integration Build (Dezember 08, 2010, 1:32 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=162079">Bug 162079</a>. [PropertiesView] Properties view should be a post selection listener (FIXED)<br>
+  </p>
+
+<p>Integration Build (December 06, 2010, 11:53 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=110684">Bug 110684</a>. [PresentationAPI] [RCP] [EditorMgmt] Workbench sometimes restores multiple empty editor folders (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=162079">Bug 162079</a>. [PropertiesView] Properties view should be a post selection listener (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=207773">Bug 207773</a>. [Workbench] IMemento reference incomplete (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244316">Bug 244316</a>. [WorkbenchLauncher] File->"Switch Workspace"->Other does nothing first time (ASSIGNED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=309746">Bug 309746</a>. [CommonNavigator] intermittent test failure in org.eclipse.ui.tests.navigator.SorterTest.testSorterContentOverride (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331524">Bug 331524</a>. WorkbenchPreferenceDialog overrides client focus (was: [preferences] Configuring problem severity via hover broken) (FIXED)<br>
+  </p>
+
+<p>Integration Build (November 29, 2010, 5:07 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=111525">Bug 111525</a>. [Import/Export]  Import file system doesn't include the top folder you select (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319139">Bug 319139</a>. [Import/Export] Cocoa: Import existing projects into workspace has misaligned text fields (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330206">Bug 330206</a>. Help button setHelpAvailable(), API is not working (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=331317">Bug 331317</a>. Duplicate mnemonic 'D' in properties->Resource page (FIXED)<br>
+  </p>
+
+<p>Integration Build (November 22, 2010, 3:22 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=173095">Bug 173095</a>. [EditorMgmt] "Open With > Other..." dialog should set focus on the list on open (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=231081">Bug 231081</a>. [Markers] Polish Problems view's columns preferences (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244316">Bug 244316</a>. [WorkbenchLauncher] File->"Switch Workspace"->Other does nothing first time (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=293459">Bug 293459</a>. [Markers] Markers view does not persist column placements across workbench restart (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327250">Bug 327250</a>. [jface] Clicking on file in single-click mode sometimes doesn't open file (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328599">Bug 328599</a>. [Wizards] cancelable parameter does not disable Wizard progress bar cancel button (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329901">Bug 329901</a>. [Dialogs] new API DialogSettings#getOrCreateSection(IDialogSettings, String) (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330373">Bug 330373</a>. IllegalStateException: Workbench has not been created yet (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330553">Bug 330553</a>. [Import/Export] Importing a project that exists in workspace location merges the contents (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=330590">Bug 330590</a>. Add Bookmark should also work for folders and projects (FIXED)<br>
+  </p>
+
+<p>Integration Build (November 15, 2010, 3:15 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=5023">Bug 5023</a>. [EditorMgmt] associations: Editor selection dialog needs to be multiselect (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51339">Bug 51339</a>. [EditorMgmt] 'Switch to Editor' dialog prompts for each dirty editor individually instead of batching them (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=207773">Bug 207773</a>. [Workbench] IMemento reference incomplete (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=227087">Bug 227087</a>. [Commands] Nicer 'Show view' command label (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=244011">Bug 244011</a>. [Wizards] Import from Filesystem dialog does not always give file-list (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270007">Bug 270007</a>. [GlobalActions] Registering actions should not be required to use standard org.eclipse.ui commands (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279781">Bug 279781</a>. [Import/Export] Recursive addition problem in Import  > Existing projects into workspace (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299295">Bug 299295</a>. [KeyBindings] Exporting key preferences to CSV does not allow context being null (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=300372">Bug 300372</a>. [Commands] Doing Ctrl+3 build id command fails with InvalidArgumentException (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323393">Bug 323393</a>. [Contributions] Service initialization wrong! Sources must be initialized before Handlers (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323489">Bug 323489</a>. [KeyBindings] Reduce memory footprint of BindingManager (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323528">Bug 323528</a>. [EditorMgmt] Need getActiveEditorInput(ExecutionEvent) and getActiveEditorInputChecked(ExecutionEvent) in HandlerUtil (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323713">Bug 323713</a>. [DND] Drop affordance drawn in minimized stack but throws IAE when mouse button is released (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327161">Bug 327161</a>. [Commands] Overlapping mnemonic in new folder wizard (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328763">Bug 328763</a>. [Commands] CommandContributionItem's getCommand() method should spec that it 'null' may be returned (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329751">Bug 329751</a>. Duplicate mnemonic 'D' on 'Appearance' preference page (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329835">Bug 329835</a>. [EditorMgmt] WorkbenchEditorsDialog's save operation simply reuses a progress monitor repeatedly for every editor to be saved (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329871">Bug 329871</a>. [Commands] Stackoverflow in BindingSystem (NEW)<br>
+  </p>
+
+<p>Integration Build (November 08, 2010, 3:04 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294628">Bug 294628</a>. [PropertiesDialog] Properties Dialog : need support for showing properties on multiple selection (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297370">Bug 297370</a>. [QuickAccess] Text at bottom of dialog should say that pressing ctrl-3 will change filtering (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=305200">Bug 305200</a>. [EditorMgmt] FileEditorMappingContentProvider could just be replaced by ArrayContentProvider (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323243">Bug 323243</a>. [IDE] Unhandled event loop exception when cancelling open project (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323708">Bug 323708</a>. [DND] Previously maximized view can get into a state where it can no longer be maximized (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329002">Bug 329002</a>. Load hidden Problems views on workbench start (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329123">Bug 329123</a>. [Mac] Unhandled event loop exception when closing Error Log Event Details (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329199">Bug 329199</a>. ErrorEditorPart must implement setFocus() (FIXED)<br>
+  </p>
+
+<p>Integration Build (October 27, 2010, 3:48 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=64958">Bug 64958</a>. [ASTRewrite] Moving static members doesn't fully respect formatter settings (WONTFIX)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=72374">Bug 72374</a>. [Dialogs] Provide a generic info pop dialog (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=74604">Bug 74604</a>. [KeyBindings] Chose key to edit from View pane (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=125632">Bug 125632</a>. [Commands] request: enhance command to show preferences dialog with parameter identifying which page to show (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270007">Bug 270007</a>. [GlobalActions] Registering actions should not be required to use standard org.eclipse.ui commands (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326673">Bug 326673</a>. [WorkingSets] FileNotFoundException in WorkingSetManager (ASSIGNED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328719">Bug 328719</a>. [preferences] Colors and Fonts page should have keyword "text font" (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=328805">Bug 328805</a>. Some Tests with unused local variables (NEW)<br>
+  </p>
+
+<p>Integration Build (October 25, 2010, 7:45 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+  </p>
+
+<p>Integration Build (October 19, 2010, 3:21 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=170244">Bug 170244</a>. [Markers] Problems view doesn't have a meaningful fast view icon (ASSIGNED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=217955">Bug 217955</a>. [WorkingSets] API to get the IWorkingSets that are part of an aggregating IWorkingSet (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252587">Bug 252587</a>. [Markers] Problems view should enable 'Quick Fix' for multiple selection (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=259094">Bug 259094</a>. [Markers] QuickFixPage should take advantage of IMarkerResolution2#getImage() (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=274631">Bug 274631</a>. [WorkingSets] Save/restore of aggregate workingset broken by changes from Bug 217955. (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=297337">Bug 297337</a>. [Markers] Markers views should set its part tool tip to its content description when hidden (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310612">Bug 310612</a>. [Markers] Quick fix wizard should not let the user finish if nothing has been selected (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325899">Bug 325899</a>. [Preferences] [accessibility] Preferences Dialog menu button needs a tooltip (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326000">Bug 326000</a>. [Markers] Problems view enhancements (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326312">Bug 326312</a>. [Preferences] NullPointerException when pressing ok in perspectives preferences, when all perspectives are closed (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326673">Bug 326673</a>. [WorkingSets] FileNotFoundException in WorkingSetManager (ASSIGNED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327192">Bug 327192</a>. Concurrent access to file while decorating (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327503">Bug 327503</a>. [Mac] On cocoa, Shell could be decorated with the titlePath property (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327648">Bug 327648</a>. [Markers] Quick Fix dialog should only select the markers that are selected in the view (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327653">Bug 327653</a>. [Dialogs] FilteredItemsSelectionDialog burns a lot of time in LinkedList#contains(..) (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327690">Bug 327690</a>. WizardHandlers could update the contribution's UI properties (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327788">Bug 327788</a>. [DynamicGUI] UIExtensionTracker calling Display.syncExec() on disposed Display (FIXED)<br>
+  </p>
+
+<p>Integration Build (October 12, 2010, 4:14 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52053">Bug 52053</a>. [RCP] IWorkbenchWindowConfigurer defaults should be documented, consistent (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=170486">Bug 170486</a>. [Mac] confusing "Eclipse UI" element in Startup and Shutdown (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201696">Bug 201696</a>. [Mac] window hard to resize (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=262032">Bug 262032</a>. DeadlockDetector may create deadlock (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267173">Bug 267173</a>. [Linked Resources] Data loss when replacing one linked resource with another using drag and drop (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276185">Bug 276185</a>. [Contributions] Need  getCommandContributionItemParameter in CommandContributionItem (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321333">Bug 321333</a>. [Progress] A Job's icon could be used in TaskItem's overlay (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321789">Bug 321789</a>. [Mac] Mac: Standard app-menu About and Preferences items require redundant menu items elsewhere (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=325825">Bug 325825</a>. [preferences] make it easier to set font for all text based editors (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327250">Bug 327250</a>. [jface] Clicking on file in single-click mode sometimes doesn't open file (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=327503">Bug 327503</a>. [Mac] On cocoa, Shell could be decorated with the titlePath property (REOPENED)<br>
+  </p>
+
+<p>Integration Build (October 05, 2010, 11:50 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=70140">Bug 70140</a>. [RCP] [Help] Help action fails silently if Help UI not installed (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=201650">Bug 201650</a>. [Actions] Build Project is disabled when going from problems view to an editor (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=259581">Bug 259581</a>. [Import/Export] WizardExportResourcesPage's Finish button isn't sensitive to Select/Deselect All (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270007">Bug 270007</a>. [GlobalActions] Registering actions should not be required to use standard org.eclipse.ui commands (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=314623">Bug 314623</a>. [Mac] Toggle toolbar button is missing in the first workbench window (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322401">Bug 322401</a>. [LinkedResources] Linked Resources properties page should have a Remove button (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323575">Bug 323575</a>. When creating a new file, the @since tag should be 3.7 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326521">Bug 326521</a>. Convert line delimiter action enablement is broken (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326924">Bug 326924</a>. Compiler warnings in N20101003-2000 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=326980">Bug 326980</a>. Warnings in CocoaUIEnhancer (FIXED)<br>
+  </p>
+
+<p>Integration Build (September 28, 2010, 3:25 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304747">Bug 304747</a>. [Progress] set IProgressConstants.SHOW_IN_TASKBAR_ICON_PROPERTY on job for BuildAction when build type is full build (FIXED)<br>
+  </p>
+
+<p>Integration Build (September 13, 2010, 8:56 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320616">Bug 320616</a>. [JFace] New default fonts on Windows 7 (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320951">Bug 320951</a>. [Viewers] ContentViewer gives bad error message when widget is disposed (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324138">Bug 324138</a>. [ErrorHandling] Copy action from error dialog causes invalid argument exception (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324254">Bug 324254</a>. [Mac] E3.x's CocoaUIEnhancer and e4's CocoaUIHandler needlessly disable the Services menu (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=324485">Bug 324485</a>. [Metadata] org.eclipse.jface.tests.databinding.conformance bundle should have four part version number (FIXED)<br>
+  </p>
+
+<p>Integration Build (September 06, 2010, 10:32 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=299123">Bug 299123</a>. [DataBinding] SWTObservables.observeValue/Max/Min should support SWT Slider (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312926">Bug 312926</a>. [DataBinding] TreeViewerUpdater does not rebuild children (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 31, 2010, 12:05 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323431">Bug 323431</a>. [ActivityMgmt] ConcurrentModificationException when activities added dynamically (NEW)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=323727">Bug 323727</a>. Quit confirmation should activate window first (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 24, 2010, 1:28 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=280157">Bug 280157</a>. [DataBinding] MenuItem enabled is missing (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307255">Bug 307255</a>. [DataBinding] Observable factories of pojo/bean properties do not decorate observables (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=308307">Bug 308307</a>. [DataBinding] BeanPropertyHelper.writeProperty() should give more information in an exceptional case. (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=321983">Bug 321983</a>. [DataBinding] Identical instances of DecoratingObservableCollection should always be equal() (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 17, 2010, 7:54 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=289395">Bug 289395</a>. [DataBinding] Widget.tooltipText() property should not convert null to "" (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=322396">Bug 322396</a>. [JFace] Orca cannot read Eclipse status line (FIXED)<br>
+  </p>
+
+<p>Integration Build (August 04, 2010, 10:51 a.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=230082">Bug 230082</a>. [Viewers] Typo in ComboBoxViewerCellEditor (REOPENED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=312959">Bug 312959</a>. [Import/Export] importing file from big disk hangs UI (FIXED)<br>
+  </p>
+
+<p>Integration Build (July 30, 2010, 2:13 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=311963">Bug 311963</a>. [Mac] [Commands] Command from 'org.eclipse.ui.cocoa' fragment references category defined in 'org.eclipse.ui.cheatsheets' (FIXED)<br>
+  </p>
+
+<p>Integration Build (July 26, 2010, 3:13 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=310614">Bug 310614</a>. [Markers] Quick fix wizard has crazy focus problem (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=313761">Bug 313761</a>. [Viewers][doc] ViewerDropAdapter.getSelectedObject impl doesn't match javadoc (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319600">Bug 319600</a>. [Viewers] CheckboxTableViewer.getCheckedElements based on virtual table returns null data objects (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319852">Bug 319852</a>. [Dialogs] Open Resource now interprets "." as "*.", unlike 3.5 (FIXED)<br>
+  </p>
+
+<p>Integration Build (July 12, 2010, 3:30 p.m.)</p>
+  <p>Problem reports updated</p>
+  <p>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=199404">Bug 199404</a>. An editor selected with Ctrl-E is not getting focus if it already visible. (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275702">Bug 275702</a>. [TabbedProperties] TabbedProperyRegistry needs to be disposed (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277862">Bug 277862</a>. [navigate] Show hand pointer for single-click tables and trees (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=279748">Bug 279748</a>. [Progress] Job with property KEEP_PROPERTY doesn't keep if status not Status.OK_STATUS (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292198">Bug 292198</a>. [Viewers] Enable optimizations in font support for StyledCellLabelProvider (ASSIGNED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292212">Bug 292212</a>. [Viewers] Performance issue in doing a TreeViewer.refresh() on a node in expanded state and containing thousands of children (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315332">Bug 315332</a>. [Viewers] [Provider] ClassCastException happened at jface when selecting tree with using picture-capture software. (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315620">Bug 315620</a>. [Progress] WorkbenchWindow is leaked (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315936">Bug 315936</a>. [IDE] Encoding field editor: "determined from content" is ambiguous (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317076">Bug 317076</a>. [Dialogs] PopupDialog leaks Tracker (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317287">Bug 317287</a>. WorkbenchActionBuilder does not dispose its workbench actions (INVALID)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317803">Bug 317803</a>. [CommonNavigator] NPE in WorkingSetsContentProvider (FIXED)<br>
+<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=319509">Bug 319509</a>. [Viewers] Empty rows in CheckboxTableViewer with virtual table (FIXED)<br>
   </p>
 
 <p>Integration Build (June 03, 2010, 10:58 a.m.)</p>
diff --git a/eclipse/plugins/org.eclipse.ui/plugin.properties b/eclipse/plugins/org.eclipse.ui/plugin.properties
index 0c95fc0..3692722 100644
--- a/eclipse/plugins/org.eclipse.ui/plugin.properties
+++ b/eclipse/plugins/org.eclipse.ui/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -157,8 +157,8 @@ command.helpSearch.description = Open the help search
 command.helpSearch.name = Help Search
 command.dynamicHelp.description = Open the dynamic help
 command.dynamicHelp.name = Dynamic Help
-command.hideShowEditors.description = Hide all editors
-command.hideShowEditors.name = Hide Editors
+command.hideShowEditors.description = Toggles the visibility of the editor area
+command.hideShowEditors.name = Toggle Editor Area Visibility
 command.import.description = Import
 command.import.importWizardIdParameter.name = Import Wizard
 command.import.name = Import
@@ -261,6 +261,7 @@ command.showViewMenu.name = Show View Menu
 command.showView.name = Show View
 command.showView.description = Shows a particular view
 command.showView.viewIdParameter = View
+command.showView.secondaryIdParameter = Secondary Id
 command.showView.makeFastParameter = As FastView
 command.switchToEditor.description = Switch to an editor
 command.switchToEditor.name = Switch to Editor
@@ -283,6 +284,8 @@ context.window.name = In Windows
 context.window.description = A window is open
 context.actionSet.name = Action Set
 context.actionSet.description = Parent context for action sets
+context.workbenchMenu.name = Workbench Menu
+context.workbenchMenu.description = When no Workbench windows are active
 
 keyConfiguration.default.description = Default Key Configuration
 keyConfiguration.default.name = Default
diff --git a/eclipse/plugins/org.eclipse.ui/plugin.xml b/eclipse/plugins/org.eclipse.ui/plugin.xml
index 13b3e7c..1ecb166 100644
--- a/eclipse/plugins/org.eclipse.ui/plugin.xml
+++ b/eclipse/plugins/org.eclipse.ui/plugin.xml
@@ -94,6 +94,11 @@
             id="org.eclipse.ui.contexts.actionSet"
             name="%context.actionSet.name">
       </context>
+      <context
+            description="%context.workbenchMenu.description"
+            id="org.eclipse.ui.contexts.workbenchMenu"
+            name="%context.workbenchMenu.name">
+      </context>
    </extension>
    
    <extension point="org.eclipse.ui.bindings">
@@ -290,6 +295,16 @@
             commandId="org.eclipse.ui.window.maximizePart"
             sequence="M1+M"
             schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
+      <!-- Cmd+M is used for Minimize Window in cocoa -->
+      <key
+            platform="cocoa"
+            sequence="M1+M"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
+      <key
+            commandId="org.eclipse.ui.window.maximizePart"
+            platform="cocoa"
+            sequence="M4+M"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
       <key
             commandId="org.eclipse.ui.window.nextEditor"
             sequence="M1+F6"
@@ -717,16 +732,19 @@
             name="%command.helpContents.name"
             description="%command.helpContents.description"
             categoryId="org.eclipse.ui.category.help"
+            defaultHandler="org.eclipse.ui.internal.handlers.HelpContentsHandler"
             id="org.eclipse.ui.help.helpContents" />
       <command
             name="%command.helpSearch.name"
             description="%command.helpSearch.description"
             categoryId="org.eclipse.ui.category.help"
+            defaultHandler="org.eclipse.ui.internal.handlers.HelpSearchHandler"
             id="org.eclipse.ui.help.helpSearch" />
       <command
             name="%command.dynamicHelp.name"
             description="%command.dynamicHelp.description"
             categoryId="org.eclipse.ui.category.help"
+            defaultHandler="org.eclipse.ui.internal.handlers.DynamicHelpHandler"
             id="org.eclipse.ui.help.dynamicHelp" />
       <command
             name="%command.quickStart.name"
@@ -802,15 +820,18 @@
             name="%command.save.name"
             description="%command.save.description"
             categoryId="org.eclipse.ui.category.file"
+            defaultHandler="org.eclipse.ui.internal.handlers.SaveHandler"
             id="org.eclipse.ui.file.save" />
       <command
             name="%command.saveAs.name"
             description="%command.saveAs.description"
+            defaultHandler="org.eclipse.ui.internal.handlers.SaveAsHandler"
             categoryId="org.eclipse.ui.category.file"
             id="org.eclipse.ui.file.saveAs" />
       <command
             name="%command.saveAll.name"
             description="%command.saveAll.description"
+            defaultHandler="org.eclipse.ui.internal.handlers.SaveAllHandler"
             categoryId="org.eclipse.ui.category.file"
             id="org.eclipse.ui.file.saveAll" />
       <command
@@ -1087,9 +1108,15 @@
             id="org.eclipse.ui.window.hideShowEditors" />
       <command
             name="%command.lockToolBar.name"
+            defaultHandler="org.eclipse.ui.internal.handlers.LockToolBarHandler"
             description="%command.lockToolBar.description"
             categoryId="org.eclipse.ui.category.window"
-            id="org.eclipse.ui.window.lockToolBar" />
+            id="org.eclipse.ui.window.lockToolBar" >
+         <state
+               class="org.eclipse.ui.handlers.RegistryToggleState:false"
+               id="org.eclipse.ui.commands.toggleState">
+         </state>
+      </command>
       <command
             name="%command.pinEditor.name"
             description="%command.pinEditor.description"
@@ -1133,6 +1160,10 @@
       			id="org.eclipse.ui.views.showView.viewId"
       			name="%command.showView.viewIdParameter"
       			values="org.eclipse.ui.internal.registry.ViewParameterValues" />
+      		<commandParameter
+      			id="org.eclipse.ui.views.showView.secondaryId"
+      			name="%command.showView.secondaryIdParameter"
+      			optional="true"/>
         <commandParameter
               id="org.eclipse.ui.views.showView.makeFast"
               name="%command.showView.makeFastParameter"
@@ -1320,6 +1351,14 @@
             commandId="org.eclipse.ui.perspectives.showPerspective"
             icon="$nl$/icons/full/eview16/new_persp.gif">
       </image>
+      <image
+            commandId="org.eclipse.ui.help.helpContents"
+            icon="$nl$/icons/full/etool16/help_contents.gif">
+      </image>
+      <image
+            commandId="org.eclipse.ui.help.helpSearch"
+            icon="$nl$/icons/full/etool16/help_search.gif">
+      </image>
    </extension>
    
    <extension
@@ -2129,6 +2168,71 @@
             </and>
          </activeWhen>
       </handler>
+      <handler
+            class="org.eclipse.ui.internal.handlers.ResetPerspectiveHandler"
+            commandId="org.eclipse.ui.window.resetPerspective">
+         <enabledWhen>
+            <or>
+               <with
+                     variable="activeWorkbenchWindow">
+                  <test
+                        property="org.eclipse.ui.workbenchWindow.isPerspectiveOpen">
+                  </test>
+               </with>
+               <!-- this is a workaround to evaluate the expression -->
+               <with
+                     variable="activePart">
+                  <instanceof
+                        value="org.eclipse.ui.IWorkbenchPart">
+                  </instanceof>
+               </with>
+               
+            </or>
+         </enabledWhen>
+      </handler>
+      <handler
+            class="org.eclipse.ui.internal.handlers.SavePerspectiveHandler"
+            commandId="org.eclipse.ui.window.savePerspective">
+         <enabledWhen>
+            <or>
+               <with
+                     variable="activeWorkbenchWindow">
+                  <test
+                        property="org.eclipse.ui.workbenchWindow.isPerspectiveOpen">
+                  </test>
+               </with>
+               <!-- this is a workaround to evaluate the expression -->
+               <with
+                     variable="activePart">
+                  <instanceof
+                        value="org.eclipse.ui.IWorkbenchPart">
+                  </instanceof>
+               </with>
+               
+            </or>
+         </enabledWhen>
+      </handler>
+      <handler
+            class="org.eclipse.ui.internal.handlers.IntroHandler"
+            commandId="org.eclipse.ui.help.quickStartAction">
+         <enabledWhen>
+            <or>
+               <with
+                     variable="activeWorkbenchWindow">
+                  <test
+                        property="org.eclipse.ui.workbenchWindow.isPerspectiveOpen">
+                  </test>
+               </with>
+               <!-- this is a workaround to evaluate the expression -->
+               <with
+                     variable="activePart">
+                  <instanceof
+                        value="org.eclipse.ui.IWorkbenchPart">
+                  </instanceof>
+               </with>
+            </or>
+         </enabledWhen>
+      </handler>
    </extension>
    <extension
          point="org.eclipse.core.runtime.adapters">
diff --git a/eclipse/plugins/org.eclipse.ui/schema/actionSets.exsd b/eclipse/plugins/org.eclipse.ui/schema/actionSets.exsd
index 0ad7f9d..23f755f 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/actionSets.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/actionSets.exsd
@@ -304,7 +304,7 @@ If omitted and the action appears in the toolbar, the Workbench will use a place
          <attribute name="allowLabelUpdate" type="boolean">
             <annotation>
                <documentation>
-                  optional attribute indicating whether the retarget action allows the handler to override it's label and tooltip. Only applies if <samp>retarget</samp> attribute is true.
+                  optional attribute indicating whether the retarget action allows the handler to override its label and tooltip. Only applies if <samp>retarget</samp> attribute is true.
                </documentation>
             </annotation>
          </attribute>
@@ -597,7 +597,7 @@ extensions are also added automatically to the window.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2000, 2007 IBM Corporation and others.<br>
+         Copyright (c) 2000, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui/schema/commands.exsd b/eclipse/plugins/org.eclipse.ui/schema/commands.exsd
index 157ce95..cce623a 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/commands.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/commands.exsd
@@ -7,7 +7,7 @@
       </appinfo>
       <documentation>
          <p>
-The <code>org.eclipse.ui.commands</code> extension point is used to declare commands and command categories, using the <code>command</code> and <code>category</code> elements. A command is an abstract representation of some semantic behaviour, but not it's actual implementation.  This allows different developers to contribute specific behaviour for their individual parts.  For example, there might be a "paste" command with one implementation in an editor and a different implementation in an explorer widget.  These implementations are called handlers.  Commands can also be viewed as declarative function pointers, or signal handlers.
+The <code>org.eclipse.ui.commands</code> extension point is used to declare commands and command categories, using the <code>command</code> and <code>category</code> elements. A command is an abstract representation of some semantic behaviour, but not its actual implementation.  This allows different developers to contribute specific behaviour for their individual parts.  For example, there might be a "paste" command with one implementation in an editor and a different implementation in an explorer widget.  These implementations are called handlers.  Commands can also be viewed as declarative function pointers, or signal handlers.
 </p>
       </documentation>
    </annotation>
@@ -851,7 +851,7 @@ There are a few default implementations of handler states that may be useful to
          <meta.section type="copyright"/>
       </appinfo>
       <documentation>
-         Copyright (c) 2000, 2007 IBM Corporation and others.<br>
+         Copyright (c) 2000, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui/schema/popupMenus.exsd b/eclipse/plugins/org.eclipse.ui/schema/popupMenus.exsd
index 6089503..a111690 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/popupMenus.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/popupMenus.exsd
@@ -70,7 +70,7 @@ The <code>objectContribution</code> element uses the core expression
    <element name="objectContribution">
       <annotation>
          <documentation>
-            This element is used to define a group of actions and/or menus for any viewer context menus for which the objects of the specified type are selected.  <code>enablement</code> in this element refers to core expression enablement, as defined in <a href="org_eclipse_core_expressions_definitions.html">org.eclipse.core.expressions.definitions</a>, and effects the enablement of the objectContribution not the contained actions.
+            This element is used to define a group of actions and/or menus for any viewer context menus for which the objects of the specified type are selected.  <code>enablement</code> in this element refers to core expression enablement, as defined in <a href="org_eclipse_core_expressions_definitions.html">org.eclipse.core.expressions.definitions</a>, and affects the enablement of the objectContribution not the contained actions.
          </documentation>
       </annotation>
       <complexType>
diff --git a/eclipse/plugins/org.eclipse.ui/schema/propertiesView.exsd b/eclipse/plugins/org.eclipse.ui/schema/propertiesView.exsd
index 2d00bdb..dc1f51f 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/propertiesView.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/propertiesView.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.ui" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
-         <meta.schema plugin="org.eclipse.ui" id="propertiesView" name="Properties view"/>
+         <meta.schema plugin="org.eclipse.ui" id="propertiesView" name="Properties View"/>
       </appInfo>
       <documentation>
          This extension point is used to modify behavior of the Properties view.
@@ -100,7 +100,7 @@ The same code pattern can be used to exclude editors.
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2009 IBM Corporation and others.<br>
+         Copyright (c) 2009, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui/schema/propertyPages.exsd b/eclipse/plugins/org.eclipse.ui/schema/propertyPages.exsd
index 4af14d3..8f03a59 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/propertyPages.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/propertyPages.exsd
@@ -2,9 +2,9 @@
 <!-- Schema file written by PDE -->
 <schema targetNamespace="org.eclipse.ui" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appinfo>
+      <appInfo>
          <meta.schema plugin="org.eclipse.ui" id="propertyPages" name="Property Pages"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          This extension point is used to add additional property page for objects of a given type.  Once defined, these property pages will appear in the Properties Dialog for objects of that type. 
 <p>
@@ -24,6 +24,11 @@ If these filtering mechanisms are inadequate a property page may use the filter
    <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="page" minOccurs="0" maxOccurs="unbounded"/>
@@ -47,9 +52,9 @@ If these filtering mechanisms are inadequate a property page may use the filter
                <documentation>
                   an optional name of the extension instance
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute translatable="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -79,9 +84,9 @@ If these filtering mechanisms are inadequate a property page may use the filter
                <documentation>
                   a translatable name that will be used in the UI for this page
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute translatable="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="icon" type="string">
@@ -89,9 +94,9 @@ If these filtering mechanisms are inadequate a property page may use the filter
                <documentation>
                   a relative path to an icon that will be used in the UI in addition to the page name
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="resource"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="objectClass" type="string">
@@ -101,9 +106,9 @@ If these filtering mechanisms are inadequate a property page may use the filter
 
 <p>Deprecated in Eclipse 3.3. Use the instanceOf or adapt element of the enabledWhen element instead.  If duplicate page definitions were previously used to register the page for multiple objectClass types, these should be combined into one page definition using multiple instanceOf elements combined inside an or element</p>
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="java" deprecated="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="class" type="string" use="required">
@@ -111,9 +116,9 @@ If these filtering mechanisms are inadequate a property page may use the filter
                <documentation>
                   a fully qualified name of the class that implements <tt>org.eclipse.ui.IWorkbenchPropertyPage</tt>.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.ui.dialogs.PropertyPage:org.eclipse.ui.IWorkbenchPropertyPage"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="nameFilter" type="string">
@@ -134,9 +139,9 @@ This flag is used if objectClass adapts to IResource.  Default value is false.
 
 <strong>NOTE:</strong> The adaptable attribute will attempt adapt an object to <code>org.eclipse.core.resources.IResource</code> before referencing the types registered in <code>Platform#getAdaptorManager</code>. The enabledWhen element has no special case tests for <code>org.eclipse.core.resources.IResource</code> and uses <code>Platform#getAdaptorManager</code> to look up adaptable types. These can be registered using the <code>org.eclipse.core.runtime.adaptors</code> extension point.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute deprecated="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
          <attribute name="category" type="string">
@@ -144,10 +149,33 @@ This flag is used if objectClass adapts to IResource.  Default value is false.
                <documentation>
                   A path indicating the location of the page in the properties tree. The path may either be a parent node ID or a sequence of IDs separated by '/', representing the full path from the root node.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="identifier" basedOn="org.eclipse.ui.propertyPages/page/@id"/>
-               </appinfo>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="selectionFilter">
+            <annotation>
+               <documentation>
+                  This is an optional attribute. If it is not specified, the property page is assumed to only support single selection (a selection that contains a single object only).
+<p>
+Set this attribute to "multi" to indicate that the property page supports multiple selected objects. Property pages supporting this mode must implement the interface <tt>org.eclipse.ui.IWorkbenchPropertyPageMulti</tt>. For multi-select pages "enabledWhen" condition will be provided with a Container filled with selected items (even if the selection contains only one item). On such pages "enabledWhen" expression should  use "iterate" to access the selection's elements.
+</p><p>
+Set this attribute to "single" to indicate that the property page supports only single selection.
+</p><p>
+Default: single 
+</p>
+Since 3.7.
+               </documentation>
             </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="single">
+                  </enumeration>
+                  <enumeration value="multi">
+                  </enumeration>
+               </restriction>
+            </simpleType>
          </attribute>
       </complexType>
    </element>
@@ -190,9 +218,9 @@ define the target object for a property page.
                <documentation>
                   The id of the keyword being referred to.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="identifier" basedOn="org.eclipse.ui.keywords/keyword/@id"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -224,9 +252,9 @@ define the target object for a property page.
    </element>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="examples"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          The following is an example of the property page definition: 
 <p>
@@ -251,22 +279,21 @@ define the target object for a property page.
    </annotation>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="apiInfo"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          The attribute <samp>class</samp> must specify a fully qualified name 
 of the class that implements 
-<samp>org.eclipse.ui.IWorkbenchPropertyPage</samp>.
+<samp>org.eclipse.ui.IWorkbenchPropertyPage</samp> or <samp>org.eclipse.ui.IWorkbenchPropertyPageMulti</samp>.
       </documentation>
    </annotation>
 
 
-
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="implementation"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          Some objects provided by the workbench may have 
 property pages registered. Plug-ins are allowed 
@@ -280,11 +307,11 @@ allowed to register property pages for them.
    </annotation>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="copyright"/>
-      </appinfo>
+      </appInfo>
       <documentation>
-         Copyright (c) 2002, 2006 IBM Corporation and others.<br>
+         Copyright (c) 2002, 2010 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui/schema/statusHandlers.exsd b/eclipse/plugins/org.eclipse.ui/schema/statusHandlers.exsd
index d8667e6..d11ffcf 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/statusHandlers.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/statusHandlers.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.ui" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
-         <meta.schema plugin="org.eclipse.ui" id="statusHandlers" name="Status handlers"/>
+         <meta.schema plugin="org.eclipse.ui" id="statusHandlers" name="Status Handlers"/>
       </appinfo>
       <documentation>
          <p>
@@ -261,7 +261,7 @@ It is <code>org.eclipse.ui.statushandlers.WorkbenchErrorHandler</code&g
          <meta.section type="copyright"/>
       </appinfo>
       <documentation>
-         Copyright (c) 2006, 2007 IBM Corporation and others.<br>
+         Copyright (c) 2006, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui/schema/themes.exsd b/eclipse/plugins/org.eclipse.ui/schema/themes.exsd
index ce88415..522c27f 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/themes.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/themes.exsd
@@ -546,7 +546,7 @@ Only one of <code>value</code> or <code>colorFactory</code&
    <element name="categoryPresentationBinding">
       <annotation>
          <documentation>
-            This element allows a category to be bound to a specific presentation as described by the <code>org.eclipse.ui.presentationFactory</code> extension point.  If a category has any presentation bindings then it (and it's children) is only configurable by the user if it is bound to the active presentation.  This is useful for removing unused items from user consideration.
+            This element allows a category to be bound to a specific presentation as described by the <code>org.eclipse.ui.presentationFactory</code> extension point.  If a category has any presentation bindings then it (and its children) is only configurable by the user if it is bound to the active presentation.  This is useful for removing unused items from user consideration.
          </documentation>
       </annotation>
       <complexType>
@@ -687,7 +687,7 @@ Only one of <code>value</code> or <code>colorFactory</code&
          <meta.section type="copyright"/>
       </appinfo>
       <documentation>
-         Copyright (c) 2003, 2006 IBM Corporation and others.<br>
+         Copyright (c) 2003, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui/schema/viewActions.exsd b/eclipse/plugins/org.eclipse.ui/schema/viewActions.exsd
index 64dc294..9bdb361 100644
--- a/eclipse/plugins/org.eclipse.ui/schema/viewActions.exsd
+++ b/eclipse/plugins/org.eclipse.ui/schema/viewActions.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.eclipse.ui" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
-         <meta.schema plugin="org.eclipse.ui" id="viewActions" name="View Menus,Toolbars and Actions"/>
+         <meta.schema plugin="org.eclipse.ui" id="viewActions" name="View Menus, Toolbars and Actions"/>
       </appinfo>
       <documentation>
          <p>This extension point is used to add actions to the pulldown menu and toolbar for views registered by other plug-ins. Each view has a local pulldown menu normally activated 
@@ -494,7 +494,7 @@ can be expressed using:
          <meta.section type="copyright"/>
       </appinfo>
       <documentation>
-         Copyright (c) 2002, 2007 IBM Corporation and others.<br>
+         Copyright (c) 2002, 2011 IBM Corporation and others.<br>
 All rights reserved. This program and the accompanying materials are made
 available under the terms of the Eclipse Public License v1.0 which accompanies
 this distribution, and is available at <a 
diff --git a/eclipse/plugins/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java b/eclipse/plugins/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java
index 693e7fe..c04d4c3 100644
--- a/eclipse/plugins/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java
+++ b/eclipse/plugins/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -152,6 +152,8 @@ public class UIPreferenceInitializer extends AbstractPreferenceInitializer {
 		node.putInt(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION, SWT.TOP);
 		node.putBoolean(
 				IWorkbenchPreferenceConstants.SHOW_MULTIPLE_EDITOR_TABS, true);
+		
+		node.putInt(IWorkbenchPreferenceConstants.RECENTLY_USED_WORKINGSETS_SIZE, 5);
 
 		migrateInternalPreferences();
 
diff --git a/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF b/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF
index ec24223..e314611 100644
--- a/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.eclipse.update.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.update.core; singleton:=true
-Bundle-Version: 3.2.402.qualifier
+Bundle-Version: 3.2.500.qualifier
 Bundle-Activator: org.eclipse.update.internal.core.UpdateCore
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -25,10 +25,9 @@ Export-Package: org.eclipse.update.configuration,
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.update.configurator;bundle-version="[3.1.0,4.0.0)",
  org.eclipse.core.net;bundle-version="[1.0.0,2.0.0)"
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.4,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
+ CDC-1.1/Foundation-1.1
 Import-Package: javax.xml.parsers,
  org.w3c.dom,
  org.xml.sax,
diff --git a/eclipse/plugins/org.eclipse.update.core/Scrapbook.jpage b/eclipse/plugins/org.eclipse.update.core/Scrapbook.jpage
deleted file mode 100644
index c2633ae..0000000
--- a/eclipse/plugins/org.eclipse.update.core/Scrapbook.jpage
+++ /dev/null
@@ -1,431 +0,0 @@
-		java.util.Enumeration enum =  System.getProperties().keys();
-		String key = null;
-		while (enum.hasMoreElements()){
-			key = (String)enum.nextElement();
-			System.out.print(key);
-			for (int i =0;i<(30-key.length());i++)System.out.print(" ");
-			System.out.println("->"+System.getProperty(key));
-		}
-
-
-new java.net.URL("file://C:/temp/org.eclipse.update.core.feature1_1.0.0/org.eclipse.update.core.feature1.plugin1_1.1.1.jar").openStream()
-
-(new java.io.File("C:\\chris chris\hello\\")).mkdirs();
-
-java.net.URL a =  new java.net.URL("http","www.oti.com","/feature/blah.jar");
-java.net.URL b =  new java.net.URL("jar",null,a.toExternalForm()+"!/hello.txt");
-b
-
-new java.net.URL("file",null,System.getProperty("java.io.tmpdir"));
-new java.net.URL("file",null,System.getProperty("user.home"));
-
-String tempDir = "c:\\TEMP\\features2.jar";
-java.net.URL TEMP_SITE = new java.net.URL("file",null,tempDir);
-java.net.URL file = new java.net.URL("jar",null,TEMP_SITE.toExternalForm()+"!/feature.xml");
-file.openStream();
-file
-
-java.io.File f =  new java.io.File("c:\\temp\\xtf\\file.jar");
-f.mkdirs()
-
-java.util.Locale.getDefault()
-java.util.ResourceBundle
-
-java.net.URL url = new java.net.URL("file",null,"C:\\path"+java.io.File.separator);
-url.getPath().endsWith("/");
-url
-
-java.net.URL url = new java.net.URL("http://machine:8080/path space/file.abc#hello");
-java.net.URL url2 = new java.net.URL(url,"/ ");
-url2.getPath()
-
-java.lang.ClassLoader l = new java.net.URLClassLoader(new java.net.URL[] {new java.net.URL("file",null,"c:\\oti\\wsw205\\eclipse\\install\\features\\org.eclipse.help.feature_1.0.4/") }, null);
-java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("feature", java.util.Locale.getDefault(), l);
-bundle
-
-String[] ss = {"a", "b"}; 
-java.util.List list = new java.util.ArrayList(0);
-list.addAll(java.util.Arrays.asList(ss)); 
-list.add("c");
-list.size();
-
-java.util.List list = new java.util.ArrayList(0);
-list.add("1");
-list.add("2");
-list.add("3");
-list.add("4");
-list.add("5");
-list.add("6");
-list.add("7");
-while (list.size()>5){
-	list.remove(0);
-}
-list.get(0)
-
-
-org.eclipse.update.internal.security.KeyStores k = new org.eclipse.update.internal.security.KeyStores();
-while (k.hasNext()){
-	org.eclipse.update.internal.security.KeystoreHandle handle = (org.eclipse.update.internal.security.KeystoreHandle) k.next();
-	System.out.println("KeyStore:"+handle.getLocation()+":"+handle.getType());
-}
-
-int i = (13/3);
-i
-
-*****************************************
-OLD Feature Code
-
-
-	/**
-	 */
-	private void downloadArchivesLocally(ISite tempSite, String[] archiveIDToInstall, IProgressMonitor monitor) throws CoreException, IOException {
-
-		URL sourceURL;
-		String newFile;
-		URL newURL;
-
-		if (monitor != null) {
-			monitor.beginTask("Download archives bundles to Temporary Space", archiveIDToInstall.length);
-		}
-		for (int i = 0; i < archiveIDToInstall.length; i++) {
-
-			// transform the id by asking the site to map them to real URL inside the SITE
-			if (getSite() != null) {
-				sourceURL = getSite().getSiteContentProvider().getArchivesReferences(archiveIDToInstall[i]);
-				if (monitor != null) {
-					monitor.subTask("..." + archiveIDToInstall[i]);
-				}
-				// the name of the file in the temp directory
-				// should be the regular plugins/pluginID_ver as the Temp site is OUR site
-				newFile = Site.DEFAULT_PLUGIN_PATH + archiveIDToInstall[i];
-				newURL = UpdateManagerUtils.resolveAsLocal(sourceURL, newFile, monitor);
-
-				// transfer the possible mapping to the temp site						
-				 ((Site) tempSite).addArchive(new URLEntry(archiveIDToInstall[i], newURL));
-				if (monitor != null) {
-					monitor.worked(1);
-					if (monitor.isCanceled()) {
-						throw CANCEL_EXCEPTION;
-					}
-				}
-			}
-		}
-
-		// the site of this feature now becomes the TEMP directory
-		// FIXME: make sure there is no other issue
-		// like asking for stuff that hasn't been copied
-		// or reusing this feature
-		// of having an un-manageable temp site
-
-		this.setSite(tempSite);
-
-	}
-
-	/**
-	 */
-	private void downloadDataLocally(IFeature targetFeature, INonPluginEntry[] dataToInstall, IProgressMonitor monitor) throws CoreException, IOException {
-
-		URL sourceURL;
-		// any other data
-		INonPluginEntry[] entries = getNonPluginEntries();
-		if (entries != null) {
-			if (monitor != null) {
-				monitor.beginTask("Installing Other Data information", dataToInstall.length);
-				if (monitor.isCanceled()) {
-					throw CANCEL_EXCEPTION;
-				}
-			}
-
-			for (int j = 0; j < entries.length; j++) {
-				String name = dataToInstall[j].getIdentifier();
-				if (monitor != null) {
-					monitor.subTask("..." + name);
-				}
-
-				// the id is URL format with "/"
-				String dataEntryId = Site.DEFAULT_FEATURE_PATH + getIdentifier().toString() + "/" + name;
-				// transform the id by asking the site to map them to real URL inside the SITE
-				if (getSite() != null) {
-					sourceURL = getSite().getSiteContentProvider().getArchivesReferences(dataEntryId);
-					((Site) targetFeature.getSite()).storeFeatureInfo(getIdentifier(), name, sourceURL.openStream());
-					if (monitor != null) {
-						monitor.worked(1);
-						if (monitor.isCanceled()) {
-							throw CANCEL_EXCEPTION;
-						}
-					}
-				}// getSite==null
-			}
-		}
-	}
-	
-	
-		/**
-		 * Method install.
-		 * @param targetFeature
-		 * @param monitor
-		 * @throws CoreException
-		 */
-	public void old_install(IFeature targetFeature, IProgressMonitor monitor) throws CoreException {
-
-		IPluginEntry[] sourceFeaturePluginEntries = getPluginEntries();
-		IPluginEntry[] targetSitePluginEntries = targetFeature.getSite().getPluginEntries();
-		Site tempSite = (Site) SiteManager.getTempSite();
-
-		// determine list of plugins to install
-		// find the intersection between the two arrays of IPluginEntry...
-		// The one teh site contains and teh one the feature contains
-		IPluginEntry[] pluginsToInstall = intersection(sourceFeaturePluginEntries, targetSitePluginEntries);
-
-		// private abstract - Determine list of content references id /archives id /bundles id that 
-		// map the list of plugins to install
-		String[] archiveIDToInstall = getContentReferenceToInstall(pluginsToInstall);
-
-		try {
-			// download and install data bundles
-			// before we set the site of teh feature to the TEMP site
-			INonPluginEntry[] dataEntries = getNonPluginEntries();
-			if (dataEntries.length > 0) {
-				downloadDataLocally(targetFeature, dataEntries, monitor);
-			}
-
-			// optmization, may be private to implementation
-			// copy *blobs/content references/archives/bundles* in TEMP space
-			if (((Site) getSite()).optimize()) {
-				if (archiveIDToInstall != null) {
-					downloadArchivesLocally(tempSite, archiveIDToInstall, monitor);
-				}
-			}
-
-			// obtain the list of *Streamable Storage Unit*
-			// from the archive
-			if (monitor != null) {
-				int total = pluginsToInstall == null ? 1 : pluginsToInstall.length + 1;
-				monitor.beginTask("Install feature " + getLabel(), total);
-			}
-			if (pluginsToInstall != null) {
-				InputStream inStream = null;
-				for (int i = 0; i < pluginsToInstall.length; i++) {
-					if (monitor != null) {
-						monitor.subTask("Installing plug-in: " + pluginsToInstall[i]);
-						if (monitor.isCanceled()) {
-							throw CANCEL_EXCEPTION;
-						}
-					}
-
-					open(pluginsToInstall[i]);
-					String[] names = getStorageUnitNames(pluginsToInstall[i]);
-					if (names != null) {
-						for (int j = 0; j < names.length; j++) {
-							if ((inStream = getInputStreamFor(pluginsToInstall[i], names[j])) != null)
-								targetFeature.store(pluginsToInstall[i], names[j], inStream);
-						}
-					}
-					close(pluginsToInstall[i]);
-					if (monitor != null) {
-						monitor.worked(1);
-						if (monitor.isCanceled()) {
-							throw CANCEL_EXCEPTION;
-						}
-					}
-
-				}
-			}
-
-			// install the Feature info
-			InputStream inStream = null;
-			String[] names = getStorageUnitNames(this);
-			if (names != null) {
-				openFeature();
-				if (monitor != null) {
-					monitor.subTask("Installing Feature information");
-					if (monitor.isCanceled()) {
-						throw CANCEL_EXCEPTION;
-					}
-				}
-
-				for (int j = 0; j < names.length; j++) {
-					if ((inStream = getInputStreamFor(this, names[j])) != null)
-						 ((Site) targetFeature.getSite()).storeFeatureInfo(getIdentifier(), names[j], inStream);
-				}
-				closeFeature();
-				if (monitor != null) {
-					monitor.worked(1);
-					if (monitor.isCanceled()) {
-						throw CANCEL_EXCEPTION;
-					}
-				}
-
-			}
-
-		} catch (IOException e) {
-			String id = UpdateManagerPlugin.getPlugin().getDescriptor().getUniqueIdentifier();
-			IStatus status = new Status(IStatus.ERROR, id, IStatus.OK, "Error during Install", e);
-			throw new CoreException(status);
-		} finally {
-			//do not clean up TEMP drive
-			// as other feature may be there... clean up when exiting the plugin
-		}
-	}
-	
-	
-		/**
-	 * @see IPluginContainer#store(IPluginEntry, String, InputStream)
-	 */
-	public void store(IPluginEntry pluginEntry, String contentKey, InputStream inStream) throws CoreException {
-		// check if pluginEntry already exists before passing to the site
-		// anything else ?
-		boolean found = false;
-		int i = 0;
-		IPluginEntry[] entries = getPluginEntries();
-		while (i < entries.length && !found) {
-			if (entries[i].equals(pluginEntry)) {
-				found = true;
-			}
-			i++;
-		}
-		if (!found) {
-			String id = UpdateManagerPlugin.getPlugin().getDescriptor().getUniqueIdentifier();
-			IStatus status = new Status(IStatus.ERROR, id, IStatus.OK, "The plugin:" + pluginEntry.getIdentifier().toString() + " is not part of the plugins of the feature:" + this.getIdentifier().toString(), null);
-			throw new CoreException(status);
-		}
-		getSite().store(pluginEntry, contentKey, inStream);
-	}
-	
-		/**
-	 * perform pre processing before opening a plugin archive
-	 * @param entry the plugin about to be opened
-	 */
-	protected void open(IPluginEntry entry) {
-	};
-
-	/**
-	 * perform post processing to close a plugin archive
-	 * @param entry the plugin about to be closed
-	 */
-	protected void close(IPluginEntry entry) throws IOException {
-	};
-
-	/**
-	 * perform pre processing before opening the feature archive
-	 */
-	protected void openFeature() {
-	};
-
-	/**
-	 * perform post processing to close a feature archive
-	 */
-	public void closeFeature() throws IOException {
-	};
-	
-	
-		/**
-	 * return the list of FILE to be transfered for a Plugin
-	 */
-	protected abstract String[] getStorageUnitNames(IPluginEntry pluginEntry) throws CoreException;
-
-	/**
-	 * return the list of FILE to be transfered from within the Feature
-	 */
-	protected abstract String[] getStorageUnitNames(IFeature feature) throws CoreException;
-
-	/**
-	 * return the Stream of the FILE to be transfered for a Plugin
-	 */
-	protected abstract InputStream getInputStreamFor(IPluginEntry pluginEntry, String name) throws CoreException;
-
-	/**
-	 * return the Stream of FILE to be transfered from within the Feature
-	 */
-	protected abstract InputStream getInputStreamFor(IFeature feature, String name) throws IOException, CoreException;
-
-	/**
-	 * returns the list of archive to transfer/install
-	 * in order to install the list of plugins
-	 * 
-	 * @param pluginsToInstall list of plugin to install 
-	 */
-	protected abstract String[] getContentReferenceToInstall(IPluginEntry[] pluginsToInstall);
-	
-	
-		/**
-	 * remove myself...
-	 */
-	public void old_remove(IProgressMonitor monitor) throws CoreException {
-
-		// remove the feature and the plugins if they are not used and not activated
-
-		// get the plugins from the feature
-		IPluginEntry[] pluginsToRemove = ((SiteLocal) SiteManager.getLocalSite()).getDeltaPluginEntries(this);
-
-		try {
-
-			// obtain the list of *Streamable Storage Unit*
-			// from the archive
-			if (monitor != null) {
-				int total = pluginsToRemove == null ? 1 : pluginsToRemove.length + 1;
-				monitor.beginTask("Uninstall feature " + getLabel(), total);
-			}
-			if (pluginsToRemove != null) {
-				for (int i = 0; i < pluginsToRemove.length; i++) {
-					if (monitor != null) {
-						monitor.subTask("Removing plug-in: " + pluginsToRemove[i]);
-						if (monitor.isCanceled()) {
-							throw CANCEL_EXCEPTION;
-						}
-					}
-
-					remove(pluginsToRemove[i]);
-
-					if (monitor != null) {
-						monitor.worked(1);
-						if (monitor.isCanceled()) {
-							throw CANCEL_EXCEPTION;
-						}
-					}
-
-				}
-			}
-
-			// remove the Feature info
-			String[] names = getStorageUnitNames(this);
-			if (names != null) {
-				if (monitor != null) {
-					monitor.subTask("Removing Feature information");
-					if (monitor.isCanceled()) {
-						throw CANCEL_EXCEPTION;
-					}
-				}
-
-				((Site) this.getSite()).removeFeatureInfo(getIdentifier());
-
-				closeFeature();
-				if (monitor != null) {
-					monitor.worked(1);
-					if (monitor.isCanceled()) {
-						throw CANCEL_EXCEPTION;
-					}
-				}
-
-			}
-
-		} catch (IOException e) {
-			String id = UpdateManagerPlugin.getPlugin().getDescriptor().getUniqueIdentifier();
-			IStatus status = new Status(IStatus.ERROR, id, IStatus.OK, "Error during Uninstall", e);
-			throw new CoreException(status);
-		}
-	}
-	
-	System.getProperty("java.io.tmpdir")(java.lang.String) /tmp
-	
-	true^false
-	true^true
-
-	
-org.eclipse.core.runtime.IPath p1= (new org.eclipse.core.runtime.Path("/path1/path2/*.txt"));
-org.eclipse.core.runtime.IPath p2= (new org.eclipse.core.runtime.Path("/path1/path2/a.txt"));
-p1.equals(p2);
-
-
-org.eclipse.update.internal.core.URLEncoder.encode(new java.net.URL("http://www.ourwebsite.com/servlet/update?jar=somefeaturejarfile"));(java.net.URL) http://www.ourwebsite.com/servlet/update?jar=somefeaturejarfile
-
diff --git a/eclipse/plugins/org.eclipse.update.core/plugin.properties b/eclipse/plugins/org.eclipse.update.core/plugin.properties
index ad909fd..baa2ab4 100644
--- a/eclipse/plugins/org.eclipse.update.core/plugin.properties
+++ b/eclipse/plugins/org.eclipse.update.core/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2006 IBM Corporation and others.
+# Copyright (c) 2000, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
diff --git a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java
index f083f14..0707949 100644
--- a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java
+++ b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/core/UpdateCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,6 @@ public class UpdateCore extends Plugin {
 	public static boolean DEBUG_SHOW_WEB;
 	public static boolean DEBUG_SHOW_IHANDLER;
 	public static boolean DEBUG_SHOW_RECONCILER;
-	public static boolean DEBUG_VERIFIER;
 		
 	private static final String PREFIX = "org.eclipse.update.core"; //$NON-NLS-1$
 	public static final String P_HISTORY_SIZE = PREFIX + ".historySize"; //$NON-NLS-1$
@@ -240,7 +239,6 @@ public class UpdateCore extends Plugin {
 			DEBUG_SHOW_WEB = getBooleanDebugOption("org.eclipse.update.core/debug/web", false); //$NON-NLS-1$
 			DEBUG_SHOW_IHANDLER = getBooleanDebugOption("org.eclipse.update.core/debug/installhandler", false); //$NON-NLS-1$
 			DEBUG_SHOW_RECONCILER = getBooleanDebugOption("org.eclipse.update.core/debug/reconciler", false); //$NON-NLS-1$
-			DEBUG_VERIFIER = getBooleanDebugOption("org.eclipse.equinox.p2.core/debug/verifier", false); // $NON-NLS-1$
 		}
 		
 		//
diff --git a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java
index 77d0ba1..03af25b 100644
--- a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java
+++ b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/operations/OperationValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,12 @@
  *******************************************************************************/
 package org.eclipse.update.internal.operations;
 
-import org.osgi.framework.BundleContext;
+//import java.io.*;
+//import java.net.*;
+//import java.nio.channels.*;
+import org.eclipse.update.core.IUpdateConstants;
+
+import org.eclipse.osgi.service.resolver.PlatformAdmin;
 
 import java.io.File;
 import java.io.IOException;
@@ -27,7 +32,6 @@ import org.eclipse.update.core.*;
 import org.eclipse.update.internal.configurator.PlatformConfiguration;
 import org.eclipse.update.internal.core.Messages;
 import org.eclipse.update.internal.core.UpdateCore;
-import org.eclipse.update.internal.verifier.PlanVerifier;
 import org.eclipse.update.operations.IInstallFeatureOperation;
 import org.eclipse.update.operations.IOperationValidator;
 import org.osgi.framework.*;
@@ -36,9 +40,6 @@ import org.osgi.framework.*;
  *  
  */
 public class OperationValidator implements IOperationValidator {
-
-	private static ServiceReference verifierServiceReference = null;
-
 	/**
 	 * Checks if the platform configuration has been modified outside this program.
 	 * @return the error status, or null if no errors
@@ -46,20 +47,22 @@ public class OperationValidator implements IOperationValidator {
 	public IStatus validatePlatformConfigValid() {
 		ArrayList status = new ArrayList(1);
 		checkPlatformWasModified(status);
-
+		
 		// report status
 		if (status.size() > 0)
 			return createMultiStatus(Messages.ActivityConstraints_rootMessage, status, IStatus.ERROR);
 		return null;
 	}
-
+	
 	/*
 	 * Called by UI before performing operation. Returns null if no errors, a
 	 * status with IStatus.WARNING code when the initial configuration is
 	 * broken, or a status with IStatus.ERROR when there the operation
 	 * introduces new errors
 	 */
-	public IStatus validatePendingInstall(IFeature oldFeature, IFeature newFeature) {
+	public IStatus validatePendingInstall(
+		IFeature oldFeature,
+		IFeature newFeature) {
 		// check initial state
 		ArrayList beforeStatus = new ArrayList();
 		validateInitialState(beforeStatus);
@@ -110,7 +113,9 @@ public class OperationValidator implements IOperationValidator {
 	/**
 	 * Called before performing operation.
 	 */
-	public IStatus validatePendingReplaceVersion(IFeature feature, IFeature anotherFeature) {
+	public IStatus validatePendingReplaceVersion(
+		IFeature feature,
+		IFeature anotherFeature) {
 		// check initial state
 		ArrayList beforeStatus = new ArrayList();
 		validateInitialState(beforeStatus);
@@ -124,6 +129,7 @@ public class OperationValidator implements IOperationValidator {
 		return createCombinedReportStatus(beforeStatus, status);
 	}
 
+
 	/*
 	 * Called by the UI before doing a revert/ restore operation
 	 */
@@ -158,13 +164,13 @@ public class OperationValidator implements IOperationValidator {
 		// report status
 		return createCombinedReportStatus(beforeStatus, status);
 	}
-
+	
 	/*
 	 * Called by the UI before doing a batched processing of several pending
 	 * changes.
 	 */
 	public RequiredFeaturesResult getRequiredFeatures(IInstallFeatureOperation[] jobs) {
-
+		
 		RequiredFeaturesResult requiredFeaturesResult = new RequiredFeaturesResult();
 		// check initial state
 		ArrayList beforeStatus = new ArrayList();
@@ -214,9 +220,11 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * handle unconfigure
 	 */
-	private static void validateUnconfigure(IFeature feature, ArrayList status) {
+	private static void validateUnconfigure(
+		IFeature feature,
+		ArrayList status) {
 		try {
-			checkSiteReadOnly(feature, status);
+			checkSiteReadOnly(feature,status);
 			ArrayList features = computeFeatures();
 			features = computeFeaturesAfterOperation(features, null, feature);
 			checkConstraints(features, status);
@@ -225,12 +233,13 @@ public class OperationValidator implements IOperationValidator {
 		}
 	}
 
+
 	/*
 	 * handle configure
 	 */
 	private static void validateConfigure(IFeature feature, ArrayList status) {
 		try {
-			checkSiteReadOnly(feature, status);
+			checkSiteReadOnly(feature,status);
 			ArrayList features = computeFeatures();
 			checkOptionalChildConfiguring(feature, status);
 			checkForCycles(feature, null, features);
@@ -245,12 +254,19 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * handle replace version
 	 */
-	private static void validateReplaceVersion(IFeature feature, IFeature anotherFeature, ArrayList status) {
+	private static void validateReplaceVersion(
+		IFeature feature,
+		IFeature anotherFeature,
+		ArrayList status) {
 		try {
-			checkSiteReadOnly(feature, status);
+			checkSiteReadOnly(feature,status);
 			ArrayList features = computeFeatures();
 			checkForCycles(feature, null, features);
-			features = computeFeaturesAfterOperation(features, anotherFeature, feature);
+			features =
+				computeFeaturesAfterOperation(
+					features,
+					anotherFeature,
+					feature);
 			checkConstraints(features, status);
 		} catch (CoreException e) {
 			status.add(e.getStatus());
@@ -260,12 +276,16 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * handle install and update
 	 */
-	private static void validateInstall(IFeature oldFeature, IFeature newFeature, ArrayList status) {
+	private static void validateInstall(
+		IFeature oldFeature,
+		IFeature newFeature,
+		ArrayList status) {
 		try {
-			checkSiteReadOnly(oldFeature, status);
+			checkSiteReadOnly(oldFeature,status);
 			ArrayList features = computeFeatures();
 			checkForCycles(newFeature, null, features);
-			features = computeFeaturesAfterOperation(features, newFeature, oldFeature);
+			features =
+				computeFeaturesAfterOperation(features, newFeature, oldFeature);
 			checkConstraints(features, status);
 			checkLicense(newFeature, status);
 		} catch (CoreException e) {
@@ -276,12 +296,14 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * handle revert and restore
 	 */
-	private static void validateRevert(IInstallConfiguration config, ArrayList status) {
+	private static void validateRevert(
+		IInstallConfiguration config,
+		ArrayList status) {
 		try {
-			//			// check the timeline and don't bother
-			//			// to check anything else if negative
-			//			if (!checkTimeline(config, status))
-			//				return;
+//			// check the timeline and don't bother
+//			// to check anything else if negative
+//			if (!checkTimeline(config, status))
+//				return;
 			ArrayList features = computeFeaturesAfterRevert(config);
 			checkConstraints(features, status);
 			checkRevertConstraints(features, status);
@@ -291,14 +313,17 @@ public class OperationValidator implements IOperationValidator {
 		}
 	}
 
+
 	/*
 	 * Handle one-click changes as a batch
 	 */
-	private static Set validatePendingChanges(IInstallFeatureOperation[] jobs, ArrayList status, ArrayList beforeStatus) {
+	private static Set validatePendingChanges(
+		IInstallFeatureOperation[] jobs,
+		ArrayList status,
+		ArrayList beforeStatus) {
 		try {
 			ArrayList features = computeFeatures();
-			ArrayList savedFeatures = (ArrayList) features.clone();
-
+			ArrayList savedFeatures = features;
 			int nexclusives = 0;
 
 			// pass 1: see if we can process the entire "batch"
@@ -311,13 +336,19 @@ public class OperationValidator implements IOperationValidator {
 				checkLicense(newFeature, status);
 				if (jobs.length > 1 && newFeature.isExclusive()) {
 					nexclusives++;
-					status.add(createStatus(newFeature, FeatureStatus.CODE_EXCLUSIVE, Messages.ActivityConstraints_exclusive));
+					status.add(
+						createStatus(
+							newFeature,
+							FeatureStatus.CODE_EXCLUSIVE,
+							Messages.ActivityConstraints_exclusive));
 					continue;
 				}
 				checkForCycles(newFeature, null, features);
-				features = computeFeaturesAfterOperation(features, newFeature, oldFeature);
-				// give clients the opportunity to veto the plan
-				verifyPlan(job, savedFeatures, features, status);
+				features =
+					computeFeaturesAfterOperation(
+						features,
+						newFeature,
+						oldFeature);
 			}
 			if (nexclusives > 0)
 				return Collections.EMPTY_SET;
@@ -326,111 +357,48 @@ public class OperationValidator implements IOperationValidator {
 				return Collections.EMPTY_SET;
 
 			// pass 2: we have conflicts
-			features = (ArrayList) savedFeatures.clone();
+			features = savedFeatures;
 			for (int i = 0; i < jobs.length; i++) {
 				IInstallFeatureOperation job = jobs[i];
 				IFeature newFeature = job.getFeature();
 				IFeature oldFeature = job.getOldFeature();
 
-				features = computeFeaturesAfterOperation(features, newFeature, oldFeature);
+				features =
+					computeFeaturesAfterOperation(
+						features,
+						newFeature,
+						oldFeature);
 
 				Set result = checkConstraints(features, status);
-
-				// give clients the opportunity to veto the plan
-				verifyPlan(job, savedFeatures, features, status);
-
-				if (status.size() > 0 && !isBetterStatus(beforeStatus, status)) {
-					// bug 75613
-					//					IStatus conflict =
-					//						createStatus(
-					//							newFeature,
-					//							FeatureStatus.CODE_OTHER,
-					//							Policy.bind(KEY_CONFLICT));
-					//					status.add(0, conflict);
+				if (status.size() > 0
+					&& !isBetterStatus(beforeStatus, status)) {
+// bug 75613
+//					IStatus conflict =
+//						createStatus(
+//							newFeature,
+//							FeatureStatus.CODE_OTHER,
+//							Policy.bind(KEY_CONFLICT));
+//					status.add(0, conflict);
 					return result;
 				}
 			}
 		} catch (CoreException e) {
 			status.add(e.getStatus());
-		} finally {
-			if (verifierServiceReference != null) {
-				BundleContext context = UpdateCore.getPlugin().getBundleContext();
-				if (context != null)
-					context.ungetService(verifierServiceReference);
-			}
 		}
-
+		
 		return Collections.EMPTY_SET;
 	}
-
-	/*
-	 * Load and return the plan verifier if there is one registered and we don't have verification disabled.
-	 */
-	private static ServiceReference loadVerifier() {
-		final BundleContext context = UpdateCore.getPlugin().getBundleContext();
-		if (context == null)
-			return null;
-		String value = context.getProperty("eclipse.p2.verifyPlan"); //$NON-NLS-1$
-		if ("false".equalsIgnoreCase(value)) { //$NON-NLS-1$
-			if (UpdateCore.DEBUG_VERIFIER)
-				UpdateCore.debug("Plan verification disabled by user."); //$NON-NLS-1$
-			return null;
-		}
-		verifierServiceReference = context.getServiceReference(PlanVerifier.class.getName());
-		return verifierServiceReference;
-	}
-
-	/*
-	 * Give clients the opportunity to veto install/update changes. 
-	 */
-	private static void verifyPlan(final IInstallFeatureOperation installOperation, final ArrayList currentFeatures, final ArrayList featuresAfterOperation, final ArrayList status) {
-		ServiceReference ref = loadVerifier();
-		BundleContext context = UpdateCore.getPlugin().getBundleContext();
-		final PlanVerifier verifier;
-		if (context == null || ref == null)
-			verifier = null;
-		else
-			verifier = (PlanVerifier) context.getService(ref);
-		if (verifier == null) {
-			if (UpdateCore.DEBUG_VERIFIER)
-				UpdateCore.debug("No plan verifier available. Skipping plan verification."); //$NON-NLS-1$
-			return;
-		}
-		ISafeRunnable job = new ISafeRunnable() {
-			public void handleException(Throwable exception) {
-				if (UpdateCore.DEBUG_VERIFIER)
-					UpdateCore.debug("Exception while running verifier. Check log for details."); //$NON-NLS-1$
-				// log the exception 
-				UpdateCore.log("Exception while running plan verifier.", exception); //$NON-NLS-1$
-				// don't let a bad verifier prevent the operation. fall through and return OK so execution of the plan continues
-			}
-
-			public void run() throws Exception {
-				if (UpdateCore.DEBUG_VERIFIER)
-					UpdateCore.debug("Running plan verifier."); //$NON-NLS-1$
-				long start = System.currentTimeMillis();
-				verifier.verify(installOperation, currentFeatures, featuresAfterOperation, status);
-				if (UpdateCore.DEBUG_VERIFIER)
-					UpdateCore.debug("Verification complete in " + (System.currentTimeMillis() - start) + "ms."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		};
-		try {
-			SafeRunner.run(job);
-		} finally {
-			context.ungetService(ref);
-		}
-	}
-
+	
 	private static void checkPlatformWasModified(ArrayList status) {
 		try {
 			// checks if the platform has been modified outside this eclipse instance
 			IPlatformConfiguration platformConfig = ConfiguratorUtils.getCurrentPlatformConfiguration();
-
+			
 			long currentTimeStamp = platformConfig.getChangeStamp();
 			// get the last modified value for this config, from this process point of view
-			if (platformConfig instanceof PlatformConfiguration)
-				currentTimeStamp = ((PlatformConfiguration) platformConfig).getConfiguration().lastModified();
-
+			if (platformConfig instanceof PlatformConfiguration) 
+				currentTimeStamp = ((PlatformConfiguration)platformConfig).getConfiguration().lastModified();
+				
 			// get the real last modified value
 			URL platformXML = platformConfig.getConfigurationLocation();
 			long actualTimeStamp = currentTimeStamp;
@@ -441,19 +409,23 @@ public class OperationValidator implements IOperationValidator {
 				actualTimeStamp = connection.getLastModified();
 			}
 			if (currentTimeStamp != actualTimeStamp)
-				status.add(createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_platformModified));
+				status.add(createStatus(
+								null,
+								FeatureStatus.CODE_OTHER,
+								Messages.ActivityConstraints_platformModified)); 
 		} catch (IOException e) {
 			// ignore
 		}
 	}
-
+	
 	private static void checkSiteReadOnly(IFeature feature, ArrayList status) {
-		if (feature == null) {
+		if(feature == null){
 			return;
 		}
 		IConfiguredSite csite = feature.getSite().getCurrentConfiguredSite();
 		if (csite != null && !csite.isUpdatable())
-			status.add(createStatus(feature, FeatureStatus.CODE_OTHER, NLS.bind(Messages.ActivityConstraints_readOnly, (new String[] {csite.getSite().getURL().toExternalForm()}))));
+			status.add(createStatus(feature, FeatureStatus.CODE_OTHER,
+					NLS.bind(Messages.ActivityConstraints_readOnly, (new String[] { csite.getSite().getURL().toExternalForm() }))));
 	}
 
 	/*
@@ -462,11 +434,11 @@ public class OperationValidator implements IOperationValidator {
 	private static ArrayList computeFeatures() throws CoreException {
 		return computeFeatures(true);
 	}
-
 	/*
 	 * Compute a list of configured features
 	 */
-	private static ArrayList computeFeatures(boolean configuredOnly) throws CoreException {
+	private static ArrayList computeFeatures(boolean configuredOnly)
+		throws CoreException {
 		ArrayList features = new ArrayList();
 		ILocalSite localSite = SiteManager.getLocalSite();
 		IInstallConfiguration config = localSite.getCurrentConfiguration();
@@ -495,7 +467,14 @@ public class OperationValidator implements IOperationValidator {
 	 * Compute the nested feature subtree starting at the specified base
 	 * feature
 	 */
-	public static ArrayList computeFeatureSubtree(IFeature top, IFeature feature, ArrayList features, boolean tolerateMissingChildren, ArrayList configuredFeatures, ArrayList visitedFeatures) throws CoreException {
+	public static ArrayList computeFeatureSubtree(
+			IFeature top,
+			IFeature feature,
+			ArrayList features,
+			boolean tolerateMissingChildren,
+			ArrayList configuredFeatures,
+			ArrayList visitedFeatures)
+	throws CoreException {
 
 		// check arguments
 		if (top == null)
@@ -509,7 +488,8 @@ public class OperationValidator implements IOperationValidator {
 
 		// check for <includes> cycle
 		if (visitedFeatures.contains(feature)) {
-			IStatus status = createStatus(top, FeatureStatus.CODE_CYCLE, Messages.ActivityConstraints_cycle);
+			IStatus status =
+			createStatus(top, FeatureStatus.CODE_CYCLE, Messages.ActivityConstraints_cycle);
 			throw new CoreException(status);
 		} else {
 			// keep track of visited features so we can detect cycles
@@ -519,11 +499,19 @@ public class OperationValidator implements IOperationValidator {
 		// return specified base feature and all its children
 		if (!features.contains(feature))
 			features.add(feature);
-		IIncludedFeatureReference[] children = feature.getIncludedFeatureReferences();
+		IIncludedFeatureReference[] children =
+		feature.getIncludedFeatureReferences();
 		for (int i = 0; i < children.length; i++) {
 			try {
 				IFeature child = UpdateUtils.getIncludedFeature(feature, children[i]);
-				features = computeFeatureSubtree(top, child, features, tolerateMissingChildren, null, visitedFeatures);
+				features =
+				computeFeatureSubtree(
+						top,
+						child,
+						features,
+						tolerateMissingChildren,
+						null,
+						visitedFeatures);
 			} catch (CoreException e) {
 				if (!children[i].isOptional() && !tolerateMissingChildren)
 					throw e;
@@ -541,18 +529,31 @@ public class OperationValidator implements IOperationValidator {
 			if (license != null && license.trim().length() > 0)
 				return;
 		}
-		status.add(createStatus(feature, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_noLicense));
+		status.add(
+			createStatus(feature, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_noLicense));
 	}
 
 	/*
 	 * Compute a list of features that will be configured after the operation
 	 */
-	private static ArrayList computeFeaturesAfterOperation(ArrayList features, IFeature add, IFeature remove) throws CoreException {
+	private static ArrayList computeFeaturesAfterOperation(
+		ArrayList features,
+		IFeature add,
+		IFeature remove)
+		throws CoreException {
 
 		ArrayList addTree = computeFeatureSubtree(add, null, null, false,
 		/* do not tolerate missing children */
 		features, null);
-		ArrayList removeTree = computeFeatureSubtree(remove, null, null, true /* tolerate missing children */, null, null);
+		ArrayList removeTree =
+			computeFeatureSubtree(
+				remove,
+				null,
+				null,
+				true /* tolerate missing children */,
+				null,
+				null
+		);
 		if (remove != null) {
 			// Patches to features are removed together with
 			// those features. Include them in the list.
@@ -568,7 +569,11 @@ public class OperationValidator implements IOperationValidator {
 		return features;
 	}
 
-	private static void contributePatchesFor(ArrayList removeTree, ArrayList features, ArrayList result) throws CoreException {
+	private static void contributePatchesFor(
+		ArrayList removeTree,
+		ArrayList features,
+		ArrayList result)
+		throws CoreException {
 
 		for (int i = 0; i < removeTree.size(); i++) {
 			IFeature feature = (IFeature) removeTree.get(i);
@@ -576,11 +581,16 @@ public class OperationValidator implements IOperationValidator {
 		}
 	}
 
-	private static void contributePatchesFor(IFeature feature, ArrayList features, ArrayList result) throws CoreException {
+	private static void contributePatchesFor(
+		IFeature feature,
+		ArrayList features,
+		ArrayList result)
+		throws CoreException {
 		for (int i = 0; i < features.size(); i++) {
 			IFeature candidate = (IFeature) features.get(i);
 			if (UpdateUtils.isPatch(feature, candidate)) {
-				ArrayList removeTree = computeFeatureSubtree(candidate, null, null, true, null, null);
+				ArrayList removeTree =
+					computeFeatureSubtree(candidate, null, null, true,null,null);
 				result.addAll(removeTree);
 			}
 		}
@@ -590,7 +600,8 @@ public class OperationValidator implements IOperationValidator {
 	 * Compute a list of features that will be configured after performing the
 	 * revert
 	 */
-	private static ArrayList computeFeaturesAfterRevert(IInstallConfiguration config) throws CoreException {
+	private static ArrayList computeFeaturesAfterRevert(IInstallConfiguration config)
+		throws CoreException {
 
 		ArrayList list = new ArrayList();
 		IConfiguredSite[] csites = config.getConfiguredSites();
@@ -604,10 +615,13 @@ public class OperationValidator implements IOperationValidator {
 		return list;
 	}
 
+
+
 	/*
 	 * Compute a list of plugin entries for the specified features.
 	 */
-	private static ArrayList computePluginsForFeatures(ArrayList features) throws CoreException {
+	private static ArrayList computePluginsForFeatures(ArrayList features)
+		throws CoreException {
 		if (features == null)
 			return new ArrayList();
 
@@ -625,6 +639,7 @@ public class OperationValidator implements IOperationValidator {
 		return result;
 	}
 
+
 	/**
 	 * Check for feature cycles:
 	 * - visit feature
@@ -632,7 +647,11 @@ public class OperationValidator implements IOperationValidator {
 	 * - DFS children 
 	 * - when return from DFS remove the feature from the candidates list
 	 */
-	private static void checkForCycles(IFeature feature, ArrayList candidates, ArrayList configuredFeatures) throws CoreException {
+	private static void checkForCycles(
+			IFeature feature,
+			ArrayList candidates,
+			ArrayList configuredFeatures)
+	throws CoreException {
 
 		// check arguments
 		if (feature == null)
@@ -641,19 +660,21 @@ public class OperationValidator implements IOperationValidator {
 			configuredFeatures = new ArrayList();
 		if (candidates == null)
 			candidates = new ArrayList();
-
+		
 		// check for <includes> cycle
 		if (candidates.contains(feature)) {
-			String msg = NLS.bind(Messages.ActivityConstraints_cycle, (new String[] {feature.getLabel(), feature.getVersionedIdentifier().toString()}));
+			String msg = NLS.bind(Messages.ActivityConstraints_cycle, (new String[] {feature.getLabel(), 
+            feature.getVersionedIdentifier().toString()}));
 			IStatus status = createStatus(feature, FeatureStatus.CODE_CYCLE, msg);
 			throw new CoreException(status);
 		}
 
 		// potential candidate
 		candidates.add(feature);
-
+		
 		// recursively, check cycles with children
-		IIncludedFeatureReference[] children = feature.getIncludedFeatureReferences();
+		IIncludedFeatureReference[] children =
+		feature.getIncludedFeatureReferences();
 		for (int i = 0; i < children.length; i++) {
 			try {
 				IFeature child = UpdateUtils.getIncludedFeature(feature, children[i]);
@@ -666,11 +687,12 @@ public class OperationValidator implements IOperationValidator {
 		// no longer a candidate, because no cycles with children
 		candidates.remove(feature);
 	}
-
+	
 	/*
 	 * validate constraints
 	 */
-	private static Set checkConstraints(ArrayList features, ArrayList status) throws CoreException {
+	private static Set  checkConstraints(ArrayList features, ArrayList status)
+		throws CoreException {
 		if (features == null)
 			return Collections.EMPTY_SET;
 
@@ -686,7 +708,9 @@ public class OperationValidator implements IOperationValidator {
 	 * Verify all features are either portable, or match the current
 	 * environment
 	 */
-	private static void checkEnvironment(ArrayList features, ArrayList status) {
+	private static void checkEnvironment(
+		ArrayList features,
+		ArrayList status) {
 
 		String os = Platform.getOS();
 		String ws = Platform.getWS();
@@ -700,7 +724,8 @@ public class OperationValidator implements IOperationValidator {
 
 			if (fos.size() > 0) {
 				if (!fos.contains(os)) {
-					IStatus s = createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_os);
+					IStatus s =
+						createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_os);
 					if (!status.contains(s))
 						status.add(s);
 					continue;
@@ -709,7 +734,8 @@ public class OperationValidator implements IOperationValidator {
 
 			if (fws.size() > 0) {
 				if (!fws.contains(ws)) {
-					IStatus s = createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_ws);
+					IStatus s =
+						createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_ws);
 					if (!status.contains(s))
 						status.add(s);
 					continue;
@@ -718,7 +744,8 @@ public class OperationValidator implements IOperationValidator {
 
 			if (farch.size() > 0) {
 				if (!farch.contains(arch)) {
-					IStatus s = createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_arch);
+					IStatus s =
+						createStatus(feature, FeatureStatus.CODE_ENVIRONMENT, Messages.ActivityConstraints_arch);
 					if (!status.contains(s))
 						status.add(s);
 					continue;
@@ -730,7 +757,10 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * Verify we end up with a version of platform configured
 	 */
-	private static void checkPlatformFeature(ArrayList features, ArrayList plugins, ArrayList status) {
+	private static void checkPlatformFeature(
+		ArrayList features,
+		ArrayList plugins,
+		ArrayList status) {
 
 		// find the plugin that defines the product
 		IProduct product = Platform.getProduct();
@@ -746,9 +776,10 @@ public class OperationValidator implements IOperationValidator {
 				break;
 			}
 		}
-
+		
 		if (!found) {
-			IStatus s = createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_platform);
+			IStatus s =
+				createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_platform);
 			if (!status.contains(s))
 				status.add(s);
 		}
@@ -757,18 +788,25 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * Verify we end up with a version of primary feature configured
 	 */
-	private static void checkPrimaryFeature(ArrayList features, ArrayList plugins, ArrayList status) {
-
-		String featureId = ConfiguratorUtils.getCurrentPlatformConfiguration().getPrimaryFeatureIdentifier();
-
+	private static void checkPrimaryFeature(
+		ArrayList features,
+		ArrayList plugins,
+		ArrayList status) {
+
+		String featureId =
+			ConfiguratorUtils
+				.getCurrentPlatformConfiguration()
+				.getPrimaryFeatureIdentifier();
+		
 		if (featureId != null) {
 			// primary feature is defined
 			for (int i = 0; i < features.size(); i++) {
 				IFeature feature = (IFeature) features.get(i);
-				if (featureId.equals(feature.getVersionedIdentifier().getIdentifier()))
+				if (featureId
+					.equals(feature.getVersionedIdentifier().getIdentifier()))
 					return;
 			}
-
+	
 			IStatus s = createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_primary);
 			if (!status.contains(s))
 				status.add(s);
@@ -787,7 +825,8 @@ public class OperationValidator implements IOperationValidator {
 					return; // product found
 				}
 			}
-			IStatus s = createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_primary);
+			IStatus s =
+				createStatus(null, FeatureStatus.CODE_OTHER, Messages.ActivityConstraints_primary);
 			if (!status.contains(s))
 				status.add(s);
 		}
@@ -796,8 +835,11 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * Verify we do not break prereqs
 	 */
-	private static Set checkPrereqs(ArrayList features, ArrayList plugins, ArrayList status) {
-
+	private static Set checkPrereqs(
+		ArrayList features,
+		ArrayList plugins,
+		ArrayList status) {
+		
 		HashSet result = new HashSet();
 
 		for (int i = 0; i < features.size(); i++) {
@@ -811,8 +853,12 @@ public class OperationValidator implements IOperationValidator {
 				VersionedIdentifier iid = iimport.getVersionedIdentifier();
 				String id = iid.getIdentifier();
 				PluginVersionIdentifier version = iid.getVersion();
-				boolean featurePrereq = iimport.getKind() == IImport.KIND_FEATURE;
-				boolean ignoreVersion = version.getMajorComponent() == 0 && version.getMinorComponent() == 0 && version.getServiceComponent() == 0;
+				boolean featurePrereq =
+					iimport.getKind() == IImport.KIND_FEATURE;
+				boolean ignoreVersion =
+					version.getMajorComponent() == 0
+						&& version.getMinorComponent() == 0
+						&& version.getServiceComponent() == 0;
 				int rule = iimport.getRule();
 				if (rule == IUpdateConstants.RULE_NONE)
 					rule = IUpdateConstants.RULE_COMPATIBLE;
@@ -844,19 +890,27 @@ public class OperationValidator implements IOperationValidator {
 						// have a candidate
 						if (ignoreVersion)
 							found = true;
-						else if (rule == IUpdateConstants.RULE_PERFECT && cversion.isPerfect(version))
+						else if (
+							rule == IUpdateConstants.RULE_PERFECT
+								&& cversion.isPerfect(version))
 							found = true;
-						else if (rule == IUpdateConstants.RULE_EQUIVALENT && cversion.isEquivalentTo(version))
+						else if (
+							rule == IUpdateConstants.RULE_EQUIVALENT
+								&& cversion.isEquivalentTo(version))
 							found = true;
-						else if (rule == IUpdateConstants.RULE_COMPATIBLE && cversion.isCompatibleWith(version))
+						else if (
+							rule == IUpdateConstants.RULE_COMPATIBLE
+								&& cversion.isCompatibleWith(version))
 							found = true;
-						else if (rule == IUpdateConstants.RULE_GREATER_OR_EQUAL && cversion.isGreaterOrEqualTo(version))
+						else if (
+							rule == IUpdateConstants.RULE_GREATER_OR_EQUAL
+								&& cversion.isGreaterOrEqualTo(version))
 							found = true;
 					}
 					if (found)
 						break;
 				}
-
+				
 				// perhaps the bundle that we are looking for was installed
 				// but isn't a part of a feature
 				if (!found && !featurePrereq)
@@ -864,19 +918,41 @@ public class OperationValidator implements IOperationValidator {
 
 				if (!found) {
 					// report status
-					String target = featurePrereq ? Messages.ActivityConstaints_prereq_feature : Messages.ActivityConstaints_prereq_plugin;
-					int errorCode = featurePrereq ? FeatureStatus.CODE_PREREQ_FEATURE : FeatureStatus.CODE_PREREQ_PLUGIN;
-					String msg = NLS.bind(Messages.ActivityConstraints_prereq, (new String[] {target, id}));
+					String target =
+						featurePrereq
+							? Messages.ActivityConstaints_prereq_feature
+							: Messages.ActivityConstaints_prereq_plugin;
+					int errorCode = featurePrereq
+							? FeatureStatus.CODE_PREREQ_FEATURE
+							: FeatureStatus.CODE_PREREQ_PLUGIN;
+					String msg =
+						NLS.bind(Messages.ActivityConstraints_prereq, (new String[] { target, id }));
 
 					if (!ignoreVersion) {
 						if (rule == IUpdateConstants.RULE_PERFECT)
-							msg = NLS.bind(Messages.ActivityConstraints_prereqPerfect, (new String[] {target, id, version.toString()}));
+							msg =
+								NLS.bind(Messages.ActivityConstraints_prereqPerfect, (new String[] {
+                                target,
+                                id,
+                                version.toString()}));
 						else if (rule == IUpdateConstants.RULE_EQUIVALENT)
-							msg = NLS.bind(Messages.ActivityConstraints_prereqEquivalent, (new String[] {target, id, version.toString()}));
+							msg =
+								NLS.bind(Messages.ActivityConstraints_prereqEquivalent, (new String[] {
+                                target,
+                                id,
+                                version.toString()}));
 						else if (rule == IUpdateConstants.RULE_COMPATIBLE)
-							msg = NLS.bind(Messages.ActivityConstraints_prereqCompatible, (new String[] {target, id, version.toString()}));
+							msg =
+								NLS.bind(Messages.ActivityConstraints_prereqCompatible, (new String[] {
+                                target,
+                                id,
+                                version.toString()}));
 						else if (rule == IUpdateConstants.RULE_GREATER_OR_EQUAL)
-							msg = NLS.bind(Messages.ActivityConstraints_prereqGreaterOrEqual, (new String[] {target, id, version.toString()}));
+							msg =
+								NLS.bind(Messages.ActivityConstraints_prereqGreaterOrEqual, (new String[] {
+                                target,
+                                id,
+                                version.toString()}));
 					}
 					IStatus s = createStatus(feature, errorCode, msg);
 					result.add(new InternalImport(iimport));
@@ -885,10 +961,10 @@ public class OperationValidator implements IOperationValidator {
 				}
 			}
 		}
-
+		
 		return result;
 	}
-
+	
 	/*
 	 * Return a boolean value indicating whether or not the bundle with the given id and version
 	 * is installed in the system.
@@ -908,7 +984,7 @@ public class OperationValidator implements IOperationValidator {
 			BundleDescription[] bundles = state.getBundles(id);
 			if (bundles == null || bundles.length == 0)
 				return false;
-			for (int i = 0; i < bundles.length; i++) {
+			for (int i=0; i<bundles.length; i++) {
 				BundleDescription bundle = bundles[i];
 				PluginVersionIdentifier cversion = new PluginVersionIdentifier(bundle.getVersion().toString());
 				// have a candidate
@@ -932,12 +1008,21 @@ public class OperationValidator implements IOperationValidator {
 	/*
 	 * Verify we end up with valid nested features after revert
 	 */
-	private static void checkRevertConstraints(ArrayList features, ArrayList status) {
+	private static void checkRevertConstraints(
+		ArrayList features,
+		ArrayList status) {
 
 		for (int i = 0; i < features.size(); i++) {
 			IFeature feature = (IFeature) features.get(i);
 			try {
-				computeFeatureSubtree(feature, null, null, false /* do not tolerate missing children */, null, null);
+				computeFeatureSubtree(
+					feature,
+					null,
+					null,
+					false /* do not tolerate missing children */,
+					null,
+					null
+				);
 			} catch (CoreException e) {
 				status.add(e.getStatus());
 			}
@@ -949,7 +1034,10 @@ public class OperationValidator implements IOperationValidator {
 	 * the child to be configured as well
 	 */
 
-	private static void checkOptionalChildConfiguring(IFeature feature, ArrayList status) throws CoreException {
+	private static void checkOptionalChildConfiguring(
+		IFeature feature,
+		ArrayList status)
+		throws CoreException {
 		ILocalSite localSite = SiteManager.getLocalSite();
 		IInstallConfiguration config = localSite.getCurrentConfiguration();
 		IConfiguredSite[] csites = config.getConfiguredSites();
@@ -957,7 +1045,8 @@ public class OperationValidator implements IOperationValidator {
 		boolean included = false;
 		for (int i = 0; i < csites.length; i++) {
 			IConfiguredSite csite = csites[i];
-			ISiteFeatureReference[] crefs = csite.getSite().getFeatureReferences();
+			ISiteFeatureReference[] crefs =
+				csite.getSite().getFeatureReferences();
 			for (int j = 0; j < crefs.length; j++) {
 				IFeatureReference cref = crefs[j];
 				IFeature cfeature = null;
@@ -992,64 +1081,68 @@ public class OperationValidator implements IOperationValidator {
 			//feature is root - can be configured
 		}
 	}
-
-	//
-	//	/**
-	//	 * Checks if the configuration is locked by other instances
-	//	 * 
-	//	 * @param status
-	//	 */
-	//	private static void checkConfigurationLock(ArrayList status) {
-	//		IPlatformConfiguration config =
-	//			BootLoader.getCurrentPlatformConfiguration();
-	//		URL configURL = config.getConfigurationLocation();
-	//		if (!"file".equals(configURL.getProtocol())) {
-	//			status.add(
-	//				createStatus(
-	//					null,
-	//					"Configuration location is not writable:" + configURL));
-	//			return;
-	//		}
-	//		String locationString = configURL.getFile();
-	//		File configDir = new File(locationString);
-	//		if (!configDir.isDirectory())
-	//			configDir = configDir.getParentFile();
-	//		if (!configDir.exists()) {
-	//			status.add(
-	//				createStatus(null, "Configuration location does not exist"));
-	//			return;
-	//		}
-	//		File locksDir = new File(configDir, "locks");
-	//		// check all the possible lock files
-	//		File[] lockFiles = locksDir.listFiles();
-	//		File configLock = BootLoader.getCurrentPlatformConfiguration().getLockFile();
-	//		for (int i = 0; i < lockFiles.length; i++) {
-	//			if (lockFiles[i].equals(configLock))
-	//				continue;
-	//			try {
-	//				RandomAccessFile raf = new RandomAccessFile(lockFiles[i], "rw");
-	//				FileChannel channel = raf.getChannel();
-	//				System.out.println(channel.isOpen());
-	//				FileLock lock = channel.tryLock();
-	//				if (lock == null){
-	//					// there is another eclipse instance running
-	//					raf.close();
-	//					status.add(
-	//						createStatus(
-	//							null,
-	//							"Another instance is running, please close it before performing any configuration operations"));
-	//					return;
-	//				}
-	//
-	//			} catch (Exception e) {
-	//				status.add(createStatus(null, "Failed to create lock:"+lockFiles[i]));
-	//				return;
-	//			} 
-	//		}
-	//	}
-
-	private static boolean isParent(IFeature candidate, IFeature feature, boolean optionalOnly) throws CoreException {
-		IIncludedFeatureReference[] refs = candidate.getIncludedFeatureReferences();
+//
+//	/**
+//	 * Checks if the configuration is locked by other instances
+//	 * 
+//	 * @param status
+//	 */
+//	private static void checkConfigurationLock(ArrayList status) {
+//		IPlatformConfiguration config =
+//			BootLoader.getCurrentPlatformConfiguration();
+//		URL configURL = config.getConfigurationLocation();
+//		if (!"file".equals(configURL.getProtocol())) {
+//			status.add(
+//				createStatus(
+//					null,
+//					"Configuration location is not writable:" + configURL));
+//			return;
+//		}
+//		String locationString = configURL.getFile();
+//		File configDir = new File(locationString);
+//		if (!configDir.isDirectory())
+//			configDir = configDir.getParentFile();
+//		if (!configDir.exists()) {
+//			status.add(
+//				createStatus(null, "Configuration location does not exist"));
+//			return;
+//		}
+//		File locksDir = new File(configDir, "locks");
+//		// check all the possible lock files
+//		File[] lockFiles = locksDir.listFiles();
+//		File configLock = BootLoader.getCurrentPlatformConfiguration().getLockFile();
+//		for (int i = 0; i < lockFiles.length; i++) {
+//			if (lockFiles[i].equals(configLock))
+//				continue;
+//			try {
+//				RandomAccessFile raf = new RandomAccessFile(lockFiles[i], "rw");
+//				FileChannel channel = raf.getChannel();
+//				System.out.println(channel.isOpen());
+//				FileLock lock = channel.tryLock();
+//				if (lock == null){
+//					// there is another eclipse instance running
+//					raf.close();
+//					status.add(
+//						createStatus(
+//							null,
+//							"Another instance is running, please close it before performing any configuration operations"));
+//					return;
+//				}
+//
+//			} catch (Exception e) {
+//				status.add(createStatus(null, "Failed to create lock:"+lockFiles[i]));
+//				return;
+//			} 
+//		}
+//	}
+
+	private static boolean isParent(
+		IFeature candidate,
+		IFeature feature,
+		boolean optionalOnly)
+		throws CoreException {
+		IIncludedFeatureReference[] refs =
+			candidate.getIncludedFeatureReferences();
 		for (int i = 0; i < refs.length; i++) {
 			IIncludedFeatureReference child = refs[i];
 			VersionedIdentifier fvid = feature.getVersionedIdentifier();
@@ -1070,30 +1163,39 @@ public class OperationValidator implements IOperationValidator {
 		return false;
 	}
 
-	//	private static boolean checkTimeline(
-	//		IInstallConfiguration config,
-	//		ArrayList status) {
-	//		try {
-	//			ILocalSite lsite = SiteManager.getLocalSite();
-	//			IInstallConfiguration cconfig = lsite.getCurrentConfiguration();
-	//			if (cconfig.getTimeline() != config.getTimeline()) {
-	//				// Not the same timeline - cannot revert
-	//				String msg =
-	//					UpdateUtils.getFormattedMessage(
-	//						KEY_WRONG_TIMELINE,
-	//						config.getLabel());
-	//				status.add(createStatus(null, FeatureStatus.CODE_OTHER, msg));
-	//				return false;
-	//			}
-	//		} catch (CoreException e) {
-	//			status.add(e.getStatus());
-	//		}
-	//		return true;
-	//	}
-
-	private static IStatus createMultiStatus(String message, ArrayList children, int code) {
-		IStatus[] carray = (IStatus[]) children.toArray(new IStatus[children.size()]);
-		return new MultiStatus(UpdateCore.getPlugin().getBundle().getSymbolicName(), code, carray, message, null);
+//	private static boolean checkTimeline(
+//		IInstallConfiguration config,
+//		ArrayList status) {
+//		try {
+//			ILocalSite lsite = SiteManager.getLocalSite();
+//			IInstallConfiguration cconfig = lsite.getCurrentConfiguration();
+//			if (cconfig.getTimeline() != config.getTimeline()) {
+//				// Not the same timeline - cannot revert
+//				String msg =
+//					UpdateUtils.getFormattedMessage(
+//						KEY_WRONG_TIMELINE,
+//						config.getLabel());
+//				status.add(createStatus(null, FeatureStatus.CODE_OTHER, msg));
+//				return false;
+//			}
+//		} catch (CoreException e) {
+//			status.add(e.getStatus());
+//		}
+//		return true;
+//	}
+
+	private static IStatus createMultiStatus(
+		String message,
+		ArrayList children,
+		int code) {
+		IStatus[] carray =
+			(IStatus[]) children.toArray(new IStatus[children.size()]);
+		return new MultiStatus(
+			UpdateCore.getPlugin().getBundle().getSymbolicName(),
+			code,
+			carray,
+			message,
+			null);
 	}
 
 	private static IStatus createStatus(IFeature feature, int errorCode, String message) {
@@ -1102,11 +1204,22 @@ public class OperationValidator implements IOperationValidator {
 		if (feature == null)
 			fullMessage = message;
 		else {
-			PluginVersionIdentifier version = feature.getVersionedIdentifier().getVersion();
-			fullMessage = NLS.bind(Messages.ActivityConstraints_childMessage, (new String[] {feature.getLabel(), version.toString(), message}));
+			PluginVersionIdentifier version =
+				feature.getVersionedIdentifier().getVersion();
+			fullMessage =
+				NLS.bind(Messages.ActivityConstraints_childMessage, (new String[] {
+                feature.getLabel(),
+                version.toString(),
+                message }));
 		}
 
-		return new FeatureStatus(feature, IStatus.ERROR, UpdateCore.getPlugin().getBundle().getSymbolicName(), errorCode, fullMessage, null);
+		return new FeatureStatus(
+			feature,
+			IStatus.ERROR,
+			UpdateCore.getPlugin().getBundle().getSymbolicName(),
+			errorCode,
+			fullMessage,
+			null);
 	}
 
 	//	private static IStatus createReportStatus(ArrayList beforeStatus,
@@ -1122,12 +1235,16 @@ public class OperationValidator implements IOperationValidator {
 	//		return null;
 	//	}
 
-	private static IStatus createCombinedReportStatus(ArrayList beforeStatus, ArrayList status) {
+	private static IStatus createCombinedReportStatus(
+		ArrayList beforeStatus,
+		ArrayList status) {
 		if (beforeStatus.size() == 0) { // good initial config
 			if (status.size() == 0) {
 				return null; // all fine
 			} else {
-				return createMultiStatus(Messages.ActivityConstraints_rootMessage, status, IStatus.ERROR);
+				return createMultiStatus(Messages.ActivityConstraints_rootMessage,
+					status,
+					IStatus.ERROR);
 				// error after operation
 			}
 		} else { // beforeStatus.size() > 0 : initial config errors
@@ -1135,13 +1252,27 @@ public class OperationValidator implements IOperationValidator {
 				return null; // errors will be fixed
 			} else {
 				if (isBetterStatus(beforeStatus, status)) {
-					return createMultiStatus(Messages.ActivityConstraints_warning, beforeStatus, IStatus.WARNING);
+					return createMultiStatus(
+						Messages.ActivityConstraints_warning,
+						beforeStatus,
+						IStatus.WARNING);
 					// errors may be fixed
 				} else {
 					ArrayList combined = new ArrayList();
-					combined.add(createMultiStatus(Messages.ActivityConstraints_beforeMessage, beforeStatus, IStatus.ERROR));
-					combined.add(createMultiStatus(Messages.ActivityConstraints_afterMessage, status, IStatus.ERROR));
-					return createMultiStatus(Messages.ActivityConstraints_rootMessageInitial, combined, IStatus.ERROR);
+					combined.add(
+						createMultiStatus(
+							Messages.ActivityConstraints_beforeMessage,
+							beforeStatus,
+							IStatus.ERROR));
+					combined.add(
+						createMultiStatus(
+							Messages.ActivityConstraints_afterMessage,
+							status,
+							IStatus.ERROR));
+					return createMultiStatus(
+						Messages.ActivityConstraints_rootMessageInitial,
+						combined,
+						IStatus.ERROR);
 				}
 			}
 		}
@@ -1150,7 +1281,8 @@ public class OperationValidator implements IOperationValidator {
 	private static ArrayList createList(String commaSeparatedList) {
 		ArrayList list = new ArrayList();
 		if (commaSeparatedList != null) {
-			StringTokenizer t = new StringTokenizer(commaSeparatedList.trim(), ","); //$NON-NLS-1$
+			StringTokenizer t =
+				new StringTokenizer(commaSeparatedList.trim(), ","); //$NON-NLS-1$
 			while (t.hasMoreTokens()) {
 				String token = t.nextToken().trim();
 				if (!token.equals("")) //$NON-NLS-1$
@@ -1167,7 +1299,9 @@ public class OperationValidator implements IOperationValidator {
 	 * @param status
 	 * @return
 	 */
-	private static boolean isBetterStatus(ArrayList beforeStatus, ArrayList status) {
+	private static boolean isBetterStatus(
+		ArrayList beforeStatus,
+		ArrayList status) {
 		// if no status at all, then it's a subset
 		if (status == null || status.size() == 0)
 			return true;
@@ -1198,45 +1332,42 @@ public class OperationValidator implements IOperationValidator {
 		}
 		return true;
 	}
-
+	
 	public class RequiredFeaturesResult {
-
+		
 		private IStatus status;
 		private Set requiredFeatures;
-
+		
 		public Set getRequiredFeatures() {
 			return requiredFeatures;
 		}
-
 		public void setRequiredFeatures(Set requiredFeatures) {
 			this.requiredFeatures = requiredFeatures;
 		}
-
 		public void addRequiredFeatures(Set requiredFeatures) {
 			if (requiredFeatures == null) {
 				requiredFeatures = new HashSet();
 			}
 			this.requiredFeatures.addAll(requiredFeatures);
 		}
-
 		public IStatus getStatus() {
 			return status;
 		}
-
 		public void setStatus(IStatus status) {
 			this.status = status;
 		}
-
+		
+		
 	}
-
+	
 	public static class InternalImport {
-
+		
 		private IImport iimport;
 
 		public InternalImport(IImport iimport) {
 			this.iimport = iimport;
 		}
-
+		
 		public IImport getImport() {
 			return iimport;
 		}
@@ -1244,23 +1375,23 @@ public class OperationValidator implements IOperationValidator {
 		public void setImport(IImport iimport) {
 			this.iimport = iimport;
 		}
-
+		
 		public boolean equals(Object object) {
 
-			if ((object == null) || !(object instanceof InternalImport))
+			if ( ( object == null) || !(object instanceof InternalImport))
 				return false;
-
-			if (object == this)
+			
+			if ( object == this)
 				return true;
-
-			return iimport.getVersionedIdentifier().equals(((InternalImport) object).getImport().getVersionedIdentifier()) && (getImport().getRule() == ((InternalImport) object).getImport().getRule());
+			
+			return iimport.getVersionedIdentifier().equals( ((InternalImport)object).getImport().getVersionedIdentifier()) && (getImport().getRule() == ((InternalImport)object).getImport().getRule());
 
 		}
 
 		public int hashCode() {
 			return iimport.getVersionedIdentifier().hashCode() * iimport.getRule();
 		}
-
+		
 	}
 
 }
diff --git a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/verifier/PlanVerifier.java b/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/verifier/PlanVerifier.java
deleted file mode 100644
index 8e381c6..0000000
--- a/eclipse/plugins/org.eclipse.update.core/src/org/eclipse/update/internal/verifier/PlanVerifier.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.update.internal.verifier;
-
-import java.util.ArrayList;
-
-import org.eclipse.update.operations.IInstallFeatureOperation;
-
-/**
- * Verifier is responsible for checking plan sanity
- */
-public abstract class PlanVerifier {
-	/**
-	 * Verifies provisioning operation of Classic Updater. Checks if feature can
-	 * be installed in an updateable site. Checks if version of already
-	 * installed plug-in is planned to downgraded or if update is safe.
-	 */
-	public abstract void verify(IInstallFeatureOperation installOperation,
-			ArrayList currentFeatures, ArrayList featuresAfterOperation,
-			ArrayList status);
-
-}
\ No newline at end of file
diff --git a/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSA b/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSA
index 5b022db..b2a2725 100644
Binary files a/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSA and b/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.RSA differ
diff --git a/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF b/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF
index d6981b2..b6d3d33 100644
--- a/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF
+++ b/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/ECLIPSEF.SF
@@ -1,5 +1,5 @@
 Signature-Version: 1.0
-SHA1-Digest-Manifest: yZRBsd82su+9g+NVIe7TDI6hI6I=
+SHA1-Digest-Manifest: pXInLaqUzzcxBBiLY1MRbUmnHvg=
 Created-By: 1.6.0 (IBM Corporation)
 SHA1-Digest-Manifest-Main-Attributes: aF40eMCnlmmT3YC6fdijAlyveCQ=
 
@@ -7,14 +7,14 @@ Name: META-INF/eclipse.inf
 SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
 
 Name: junit.jar
-SHA1-Digest: JmCYuFYsOR7AT5JiGmszoPUAFRY=
-
-Name: about.html
-SHA1-Digest: OB4tUYTIdwsIAbpHUAzVaDJ+OHQ=
+SHA1-Digest: U5gXqfRyC1uDVOHu3Bmw1dbYbzU=
 
 Name: about_files/cpl-v10.html
 SHA1-Digest: YZUV+BFnw6XLRdU0eCv1FYdy8cQ=
 
+Name: about.html
+SHA1-Digest: OB4tUYTIdwsIAbpHUAzVaDJ+OHQ=
+
 Name: plugin.properties
 SHA1-Digest: 9r0GiUvSCEu/hSKDiIxBDU+lQRc=
 
diff --git a/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF b/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF
index 8d18823..feff944 100644
--- a/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF
+++ b/eclipse/plugins/org.junit_3.8.2.v3_8_2_v20100427-1100/META-INF/MANIFEST.MF
@@ -16,7 +16,7 @@ Name: META-INF/eclipse.inf
 SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
 
 Name: junit.jar
-SHA1-Digest: YGbHcevShHSz1CGxtuZmi4xgtl0=
+SHA1-Digest: 0GZQV1CgnWzF6o541NJqtsv5apE=
 
 Name: about_files/cpl-v10.html
 SHA1-Digest: o0b19ceZ+HQHVX0Ops751AQVdwM=
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/ECLIPSEF.RSA b/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/ECLIPSEF.RSA
deleted file mode 100644
index 05bf3d8..0000000
Binary files a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/ECLIPSEF.RSA and /dev/null differ
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/ECLIPSEF.SF b/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/ECLIPSEF.SF
deleted file mode 100644
index ac50b6b..0000000
--- a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/ECLIPSEF.SF
+++ /dev/null
@@ -1,20 +0,0 @@
-Signature-Version: 1.0
-SHA1-Digest-Manifest: r/COsuwQgJvh0v56+4Oa9oKJ9yQ=
-Created-By: 1.6.0 (IBM Corporation)
-SHA1-Digest-Manifest-Main-Attributes: +9QXoDk9nmtLRlSF4mBR1u3j0NU=
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
-
-Name: junit.jar
-SHA1-Digest: 3nIr0cIEq1xGZ8kGEKRtO5ptt9I=
-
-Name: about.html
-SHA1-Digest: NrCxtJrQLeggavKie0H5Jf2NgVg=
-
-Name: about_files/cpl-v10.html
-SHA1-Digest: MIzNDpOYPvPiuf1zBtCLIJle7hg=
-
-Name: plugin.properties
-SHA1-Digest: y6pZhnJCqH6f8fjcHiGi3l3i5l4=
-
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/MANIFEST.MF b/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/MANIFEST.MF
deleted file mode 100644
index 9fd116c..0000000
--- a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,46 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ClassPath: junit.jar
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.junit
-Require-Bundle: org.hamcrest.core;bundle-version="1.1.0";visibility:=r
- eexport
-Export-Package: junit.extensions;version="4.8.1",junit.framework;versi
- on="4.8.1",junit.runner;version="4.8.1",junit.textui;version="4.8.1",
- org.junit;version="4.8.1",org.junit.experimental;version="4.8.1",org.
- junit.experimental.categories;version="4.8.1",org.junit.experimental.
- max;version="4.8.1",org.junit.experimental.results;version="4.8.1",or
- g.junit.experimental.runners;version="4.8.1",org.junit.experimental.t
- heories;version="4.8.1",org.junit.experimental.theories.internal;vers
- ion="4.8.1";x-internal:=true,org.junit.experimental.theories.supplier
- s;version="4.8.1",org.junit.internal;version="4.8.1";x-internal:=true
- ,org.junit.internal.builders;version="4.8.1";x-internal:=true,org.jun
- it.internal.matchers;version="4.8.1";x-internal:=true,org.junit.inter
- nal.requests;version="4.8.1";x-internal:=true,org.junit.internal.runn
- ers;version="4.8.1";x-internal:=true,org.junit.internal.runners.model
- ;version="4.8.1";x-internal:=true,org.junit.internal.runners.statemen
- ts;version="4.8.1";x-internal:=true,org.junit.matchers;version="4.8.1
- ",org.junit.rules;version="4.8.1",org.junit.runner;version="4.8.1",or
- g.junit.runner.manipulation;version="4.8.1",org.junit.runner.notifica
- tion;version="4.8.1",org.junit.runners;version="4.8.1",org.junit.runn
- ers.model;version="4.8.1"
-Bundle-Version: 4.8.1.v4_8_1_v20100427-1100
-Bundle-ManifestVersion: 2
-
-Name: META-INF/eclipse.inf
-SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
-
-Name: junit.jar
-SHA1-Digest: zPmrTAyba4ZMLFgf8QAHILhgZ9o=
-
-Name: about_files/cpl-v10.html
-SHA1-Digest: REygXYi+T14Sj1v8XnnKycNjpN4=
-
-Name: about.html
-SHA1-Digest: w3lIEWRkSmgtAui4qxGRJmqgDw4=
-
-Name: plugin.properties
-SHA1-Digest: f1fR+Wdi2X4qLQSIBEgwenAuk2c=
-
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about.html b/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about.html
deleted file mode 100644
index 7859fe0..0000000
--- a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!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=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>January 8, 2010</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-
-<h3>Third Party Content</h3>
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor's license for 
-terms and conditions of use.</p>
-<div style="font-style: italic">
-
-<p>The Content includes items that have been sourced from third parties as follows:</p>
-
-<h4>JUnit 4.8.1</h4>
-
-<p>The plug-in is accompanied by software developed by <a href="http://www.junit.org/">JUnit.org</a>.  The JUnit 4.8.1 code included with the plug-in includes no modifications.
-Your use of JUnit 4.8.1 in both source and binary code form contained in the plug-in is subject to the terms and conditions of the 
-Common Public License Version 1.0 ("CPL").  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
-The binary code is located in junit.jar and the source code is located in source-bundle or in the org.junit.source bundle.
-<br/>The original source and binaries are available from <a href="http://sourceforge.net/projects/junit/files/">http://sourceforge.net/projects/junit/files/</a>, namely:
-<br/><a href="http://sourceforge.net/projects/junit/files/junit/4.8.1/junit-4.8.1-src.jar/download">http://sourceforge.net/projects/junit/files/junit/4.8.1/junit-4.8.1-src.jar/download</a>
-<br/><a href="http://sourceforge.net/projects/junit/files/junit/4.8.1/junit-dep-4.8.1.jar/download">http://sourceforge.net/projects/junit/files/junit/4.8.1/junit-dep-4.8.1.jar/download</a>
-</p>
-
-
-<h4>Hamcrest Library 1.1</h4>
-
-<p>The plug-in is accompanied by software developed by Hamcrest (<a href="http://code.google.com/p/hamcrest/">http://code.google.com/p/hamcrest/</a>).
-The hamcrest-library 1.1 code included within the JUnit 4.8.1 Jar includes no modifications.
-Your use of hamcrest-library 1.1 in both source and binary code form contained in the plug-in is subject to the terms and conditions of the 
-New BSD License.
-The binary code is located in junit.jar/org/junit/internal/matchers and the source code is located in source-bundle/org/junit/internal/matchers.</p>
-
-<p>The Hamcrest New BSD License:</p>
-<pre>
-BSD License
-
-Copyright (c) 2000-2006, www.hamcrest.org
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this list of
-conditions and the following disclaimer. Redistributions in binary form must reproduce
-the above copyright notice, this list of conditions and the following disclaimer in
-the documentation and/or other materials provided with the distribution.
-
-Neither the name of Hamcrest nor the names of its contributors may be used to endorse
-or promote products derived from this software without specific prior written
-permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
-SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
-WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-</pre>
-
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about_files/cpl-v10.html b/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about_files/cpl-v10.html
deleted file mode 100644
index 36aa208..0000000
--- a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/about_files/cpl-v10.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<HTML>
-<HEAD>
-<TITLE>Common Public License - v 1.0</TITLE>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</HEAD>
-
-<BODY BGCOLOR="#FFFFFF" VLINK="#800000">
-
-
-<P ALIGN="CENTER"><B>Common Public License - v 1.0</B>
-<P><B></B><FONT SIZE="3"></FONT>
-<P><FONT SIZE="3"></FONT><FONT SIZE="2">THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT").  ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>1.  DEFINITIONS</B></FONT>
-<P><FONT SIZE="2">"Contribution" means:</FONT>
-
-<UL><FONT SIZE="2">a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and<BR CLEAR="LEFT">
-b) in the case of each subsequent Contributor:</FONT></UL>
-
-
-<UL><FONT SIZE="2">i)	 	changes to the Program, and</FONT></UL>
-
-
-<UL><FONT SIZE="2">ii)		additions to the Program;</FONT></UL>
-
-
-<UL><FONT SIZE="2">where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.  </FONT><FONT SIZE="2">A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf.  </FONT><FONT SIZE="2">Contributions do not include additions to the Program which:  (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.  </FONT></UL>
-
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Contributor" means any person or entity that distributes the Program.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.  </FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">"Program" means the Contributions distributed in accordance with this Agreement.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.</FONT>
-<P><FONT SIZE="2"><B></B></FONT>
-<P><FONT SIZE="2"><B>2.  GRANT OF RIGHTS</B></FONT>
-
-<UL><FONT SIZE="2"></FONT><FONT SIZE="2">a)	</FONT><FONT SIZE="2">Subject to the terms of this Agreement, each Contributor hereby grants</FONT><FONT SIZE="2"> Recipient a non-exclusive, worldwide, royalty-free copyright license to</FONT><FONT SIZE="2" COLOR="#FF0000"> </FONT><FONT SIZE="2">reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.</FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT><FONT SIZE="2">b) 	Subject to the terms of this Agreement, each Contributor hereby grants </FONT><FONT SIZE="2">Recipient a non-exclusive, worldwide,</FONT><FONT SIZE="2" COLOR="#008000"> </FONT><FONT SIZE="2">royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form.  This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents.  The patent license shall not apply to any other combinations which include the Contribution.  No hardware per se is licensed hereunder.   </FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2">c)	Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity.  Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise.  As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any.  For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.</FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-
-<UL><FONT SIZE="2">d)	Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. </FONT></UL>
-
-
-<UL><FONT SIZE="2"></FONT></UL>
-
-<P><FONT SIZE="2"><B>3.  REQUIREMENTS</B></FONT>
-<P><FONT SIZE="2"><B></B>A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:</FONT>
-
-<UL><FONT SIZE="2">a)	it complies with the terms and conditions of this Agreement; and</FONT></UL>
-
-
-<UL><FONT SIZE="2">b)	its license agreement:</FONT></UL>
-
-
-<UL><FONT SIZE="2">i)	effectively disclaims</FONT><FONT SIZE="2"> on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; </FONT></UL>
-
-
-<UL><FONT SIZE="2">ii) 	effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; </FONT></UL>
-
-
-<UL><FONT SIZE="2">iii)</FONT><FONT SIZE="2">	states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and</FONT></UL>
-
-
-<UL><FONT SIZE="2">iv)	states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.</FONT><FONT SIZE="2" COLOR="#0000FF"> </FONT><FONT SIZE="2" COLOR="#FF0000"></FONT></UL>
-
-
-<UL><FONT SIZE="2" COLOR="#FF0000"></FONT><FONT SIZE="2"></FONT></UL>
-
-<P><FONT SIZE="2">When the Program is made available in source code form:</FONT>
-
-<UL><FONT SIZE="2">a)	it must be made available under this Agreement; and </FONT></UL>
-
-
-<UL><FONT SIZE="2">b)	a copy of this Agreement must be included with each copy of the Program.  </FONT></UL>
-
-<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT>
-<P><FONT SIZE="2" COLOR="#0000FF"><STRIKE></STRIKE></FONT><FONT SIZE="2">Contributors may not remove or alter any copyright notices contained within the Program.  </FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.  </FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>4.  COMMERCIAL DISTRIBUTION</B></FONT>
-<P><FONT SIZE="2">Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like.  While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors.   Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering.  The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement.  In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations.  The Indemnified Contributor may participate in any such claim at its own expense.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">For example, a Contributor might include the Program in a commercial product offering, Product X.  That Contributor is then a Commercial Contributor.  If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.  Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2" COLOR="#0000FF"></FONT>
-<P><FONT SIZE="2" COLOR="#0000FF"></FONT><FONT SIZE="2"><B>5.  NO WARRANTY</B></FONT>
-<P><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is</FONT><FONT SIZE="2"> solely responsible for determining the appropriateness of using and distributing </FONT><FONT SIZE="2">the Program</FONT><FONT SIZE="2"> and assumes all risks associated with its exercise of rights under this Agreement</FONT><FONT SIZE="2">, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, </FONT><FONT SIZE="2">programs or equipment, and unavailability or interruption of operations</FONT><FONT SIZE="2">.  </FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"><B>6.  DISCLAIMER OF LIABILITY</B></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES </FONT><FONT SIZE="2">(INCLUDING WITHOUT LIMITATION LOST PROFITS),</FONT><FONT SIZE="2"> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"><B>7.  GENERAL</B></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed.  In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. </FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance.  If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable.  However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.  </FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2">Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted  and may only be modified in the following manner. The Agreement Steward reserves the right to </FONT><FONT SIZE="2">publish new versions (including revisions) of this Agreement from time to </FONT><FONT SIZE="2">time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward.   IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity.  </FONT><FONT SIZE="2">Each new version of the Agreement will be given a distinguishing version number.  The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new </FONT><FONT SIZE="2">version.  </FONT><FONT SIZE="2">Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, </FONT><FONT SIZE="2">by implication, estoppel or otherwise</FONT><FONT SIZE="2">.</FONT><FONT SIZE="2">  All rights in the Program not expressly granted under this Agreement are reserved.</FONT>
-<P><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2">This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose.  Each party waives its rights to a jury trial in any resulting litigation.</FONT>
-<P><FONT SIZE="2"></FONT><FONT SIZE="2"></FONT>
-<P><FONT SIZE="2"></FONT>
-
-</BODY>
-
-</HTML>
\ No newline at end of file
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/plugin.properties b/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/plugin.properties
deleted file mode 100644
index bcf0c26..0000000
--- a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2010 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-pluginName=JUnit Testing Framework
-providerName=Eclipse Orbit
diff --git a/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/ECLIPSEF.RSA b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/ECLIPSEF.RSA
new file mode 100644
index 0000000..3f3368c
Binary files /dev/null and b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/ECLIPSEF.RSA differ
diff --git a/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/ECLIPSEF.SF b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/ECLIPSEF.SF
new file mode 100644
index 0000000..f2b7d81
--- /dev/null
+++ b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/ECLIPSEF.SF
@@ -0,0 +1,20 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: FKRHeVRdOsVV06wty/kFssuObsk=
+Created-By: 1.6.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: vYr2/kVyW+kxsWJbniod5Gz8p4c=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
+
+Name: junit.jar
+SHA1-Digest: 8prlsZnI6FRaLl3Cwhrh325+zrs=
+
+Name: about.html
+SHA1-Digest: hW4OZb22hyYtbgFVDbR4377O8QQ=
+
+Name: about_files/cpl-v10.html
+SHA1-Digest: MIzNDpOYPvPiuf1zBtCLIJle7hg=
+
+Name: plugin.properties
+SHA1-Digest: SdISa7+8pSFjWBdOaLv0mwxG30Q=
+
diff --git a/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/MANIFEST.MF b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6af4c83
--- /dev/null
+++ b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/MANIFEST.MF
@@ -0,0 +1,48 @@
+Manifest-Version: 1.0
+Bundle-ClassPath: junit.jar
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.junit
+Eclipse-SourceReferences: scm:cvs:pserver:dev.eclipse.org:/cvsroot/too
+ ls:org.eclipse.orbit/org.junit;tag=v4_8_2_v20110321-1705
+Require-Bundle: org.hamcrest.core;bundle-version="1.1.0";visibility:=r
+ eexport
+Export-Package: junit.extensions;version="4.8.2",junit.framework;versi
+ on="4.8.2",junit.runner;version="4.8.2",junit.textui;version="4.8.2",
+ org.junit;version="4.8.2",org.junit.experimental;version="4.8.2",org.
+ junit.experimental.categories;version="4.8.2",org.junit.experimental.
+ max;version="4.8.2",org.junit.experimental.results;version="4.8.2",or
+ g.junit.experimental.runners;version="4.8.2",org.junit.experimental.t
+ heories;version="4.8.2",org.junit.experimental.theories.internal;vers
+ ion="4.8.2";x-internal:=true,org.junit.experimental.theories.supplier
+ s;version="4.8.2",org.junit.internal;version="4.8.2";x-internal:=true
+ ,org.junit.internal.builders;version="4.8.2";x-internal:=true,org.jun
+ it.internal.matchers;version="4.8.2";x-internal:=true,org.junit.inter
+ nal.requests;version="4.8.2";x-internal:=true,org.junit.internal.runn
+ ers;version="4.8.2";x-internal:=true,org.junit.internal.runners.model
+ ;version="4.8.2";x-internal:=true,org.junit.internal.runners.statemen
+ ts;version="4.8.2";x-internal:=true,org.junit.matchers;version="4.8.2
+ ",org.junit.rules;version="4.8.2",org.junit.runner;version="4.8.2",or
+ g.junit.runner.manipulation;version="4.8.2",org.junit.runner.notifica
+ tion;version="4.8.2",org.junit.runners;version="4.8.2",org.junit.runn
+ ers.model;version="4.8.2"
+Bundle-Version: 4.8.2.v4_8_2_v20110321-1705
+Bundle-ManifestVersion: 2
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
+
+Name: junit.jar
+SHA1-Digest: YLuWDgYW5A3oGZMT0UDrWCxX7Js=
+
+Name: about_files/cpl-v10.html
+SHA1-Digest: REygXYi+T14Sj1v8XnnKycNjpN4=
+
+Name: about.html
+SHA1-Digest: Myp5wMdsICQoAejNJG1PhgJ3UXY=
+
+Name: plugin.properties
+SHA1-Digest: jmDQY7WzbFbRBx/fmZNGdzlfNyE=
+
diff --git a/eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/eclipse.inf b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/eclipse.inf
similarity index 100%
rename from eclipse/plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/eclipse.inf
rename to eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/META-INF/eclipse.inf
diff --git a/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/about.html b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/about.html
new file mode 100644
index 0000000..896fea2
--- /dev/null
+++ b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/about.html
@@ -0,0 +1,90 @@
+<!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=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>March 21, 2011</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+
+<h3>Third Party Content</h3>
+<p>The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor's license for 
+terms and conditions of use.</p>
+<div style="font-style: italic">
+
+<p>The Content includes items that have been sourced from third parties as follows:</p>
+
+<h4>JUnit 4.8.2</h4>
+
+<p>The plug-in is accompanied by software developed by <a href="http://www.junit.org/">JUnit.org</a>.  The JUnit 4.8.2 code included with the plug-in includes no modifications.
+Your use of JUnit 4.8.2 in both source and binary code form contained in the plug-in is subject to the terms and conditions of the 
+Common Public License Version 1.0 ("CPL").  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
+The binary code is located in junit.jar and the source code is located in source-bundle or in the org.junit.source bundle.
+<br/>The original source and binaries are available from <a href="https://github.com/KentBeck/junit/downloads">https://github.com/KentBeck/junit/downloads</a>, namely:
+<br/><a href="https://github.com/downloads/KentBeck/junit/junit-4.8.2-src.jar">https://github.com/downloads/KentBeck/junit/junit-4.8.2-src.jar</a>
+<br/><a href="https://github.com/downloads/KentBeck/junit/junit-dep-4.8.2.jar">https://github.com/downloads/KentBeck/junit/junit-dep-4.8.2.jar</a>
+</p>
+
+
+<h4>Hamcrest Library 1.1</h4>
+
+<p>The plug-in is accompanied by software developed by Hamcrest (<a href="http://code.google.com/p/hamcrest/">http://code.google.com/p/hamcrest/</a>).
+The hamcrest-library 1.1 code included within the JUnit 4.8.1 Jar includes no modifications.
+Your use of hamcrest-library 1.1 in both source and binary code form contained in the plug-in is subject to the terms and conditions of the 
+New BSD License.
+The binary code is located in junit.jar/org/junit/internal/matchers and the source code is located in source-bundle/org/junit/internal/matchers.</p>
+
+<p>The Hamcrest New BSD License:</p>
+<pre>
+BSD License
+
+Copyright (c) 2000-2006, www.hamcrest.org
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of
+conditions and the following disclaimer. Redistributions in binary form must reproduce
+the above copyright notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the distribution.
+
+Neither the name of Hamcrest nor the names of its contributors may be used to endorse
+or promote products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+</pre>
+
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/eclipse/plugins/org.eclipse.pde.build/feature/cpl-v10.html b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/about_files/cpl-v10.html
similarity index 100%
rename from eclipse/plugins/org.eclipse.pde.build/feature/cpl-v10.html
rename to eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/about_files/cpl-v10.html
diff --git a/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/plugin.properties b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/plugin.properties
new file mode 100644
index 0000000..81bf128
--- /dev/null
+++ b/eclipse/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2011 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=JUnit Testing Framework
+providerName=Eclipse Orbit
diff --git a/eclipse/sourceReferences.properties b/eclipse/sourceReferences.properties
index ab03411..663dea1 100644
--- a/eclipse/sourceReferences.properties
+++ b/eclipse/sourceReferences.properties
@@ -1,301 +1,303 @@
-#Tue Mar 08 14:12:31 EST 2011
-org.eclipse.help.appserver,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.appserver;tag\=v20100427
-org.eclipse.ui.forms,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.forms;tag\=r36_v20100702
-org.eclipse.swt.gtk.linux.s390x,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.s390x;tag\=v3659b
-org.eclipse.jdt.debug.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.debug.ui;tag\=v20100928a_r362
-org.eclipse.jdt.launching.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching.macosx;tag\=v20100505
-org.eclipse.equinox.jmx.server.xmlrpc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.xmlrpc;tag\=v20100503
-org.eclipse.equinox.launcher.motif.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc;tag\=R36x_v20101019_1345
-org.eclipse.equinox.launcher.gtk.aix.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64;tag\=R36x_v20101102
+#Mon Jun 27 11:22:02 EDT 2011
+org.eclipse.help.appserver,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.appserver;tag\=v20110425
+org.eclipse.ui.forms,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.forms;tag\=v20110425
+org.eclipse.swt.gtk.linux.s390x,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.s390x;tag\=v3735b
+org.eclipse.jdt.debug.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.debug.ui;tag\=v20110512
+org.eclipse.jdt.launching.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching.macosx;tag\=v20110509
+org.eclipse.equinox.jmx.server.xmlrpc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.xmlrpc;tag\=v20110413
+org.eclipse.equinox.launcher.motif.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.solaris.sparc;tag\=v20110505
+org.eclipse.equinox.launcher.gtk.aix.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc64;tag\=v20110530
 org.eclipse.core.boot,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.boot;tag\=v20100505
-org.eclipse.ui.net,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.net;tag\=I20100505-1245
-org.eclipse.equinox.launcher.gtk.solaris.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86;tag\=R36x_v20101019_1345
-org.eclipse.jdt.apt.pluggable.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.pluggable.core;tag\=R36_v20100727-0110
-org.eclipse.swt.examples.paint,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.paint;tag\=v3659b
-org.eclipse.core.net.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86;tag\=I20100511-0800
-org.eclipse.core.filesystem.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.macosx;tag\=v20100505
-org.eclipse.equinox.launcher.motif.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86;tag\=R36x_v20101019_1345
-org.eclipse.ui.navigator.resources,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.navigator.resources;tag\=M20101124-0800
-org.eclipse.equinox.p2.metadata.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository;tag\=v20100513
-org.eclipse.swt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt;tag\=v3659c
-org.eclipse.swt.win32.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.win32.x86;tag\=v3659c
+org.eclipse.ui.net,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.net;tag\=I20110511-0800
+org.eclipse.equinox.launcher.gtk.solaris.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.solaris.x86;tag\=v20110505
+org.eclipse.jdt.apt.pluggable.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.pluggable.core;tag\=v20110305-1450
+org.eclipse.swt.examples.paint,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.paint;tag\=v3735b
+org.eclipse.core.net.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86;tag\=I20110331-0827
+org.eclipse.core.filesystem.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.macosx;tag\=v20110423-0524
+org.eclipse.equinox.launcher.motif.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.linux.x86;tag\=v20110505
+org.eclipse.ui.navigator.resources,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.navigator.resources;tag\=I20110421-1800
+org.eclipse.equinox.p2.metadata.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.repository;tag\=v20110511-1359
+org.eclipse.swt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt;tag\=v3735b
+org.eclipse.swt.win32.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.win32.x86;tag\=v3735b
 org.eclipse.update.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.ui;tag\=v20100512
-org.eclipse.core.filesystem,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem;tag\=R36x_v20100727-0745
-org.eclipse.core.externaltools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.externaltools;tag\=v20100831_r361
+org.eclipse.core.filesystem,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem;tag\=v20110423-0524
+org.eclipse.core.externaltools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.externaltools;tag\=v20110506
 org.eclipse.equinox.registry.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.registry.jmx;tag\=v20100503
-org.eclipse.equinox.io,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io;tag\=v20100503
-org.eclipse.equinox.simpleconfigurator.manipulator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator;tag\=v20100503
-org.eclipse.pde.api.tools.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ui;tag\=v20100820_r361
-org.eclipse.jdt.debug,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.debug;tag\=v20100715_r361
-org.eclipse.sdk.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk.examples;tag\=v20100527
-org.eclipse.pde,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde;tag\=v20100625_r361
-org.eclipse.compare.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare.core;tag\=R36x_v20100929-0800
-org.eclipse.equinox.p2.engine,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine;tag\=R36x_v20110201
-org.eclipse.equinox.launcher.motif.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32;tag\=R36x_v20101019_1345
-org.eclipse.equinox.http,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http;tag\=v20100503
-org.eclipse.swt.gtk.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.x86_64;tag\=v3659b
-org.eclipse.swt.photon.qnx.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.photon.qnx.x86;tag\=v3659b
-org.eclipse.equinox.p2.ui.admin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin;tag\=v20100503
-org.eclipse.equinox.weaving.caching.j9,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9;tag\=v20100503
+org.eclipse.equinox.io,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.io;tag\=v20110502
+org.eclipse.equinox.simpleconfigurator.manipulator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator.manipulator;tag\=v20110502-1955
+org.eclipse.pde.api.tools.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ui;tag\=v20110523-1600
+org.eclipse.jdt.debug,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.debug;tag\=v20110509
+org.eclipse.sdk.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk.examples;tag\=v20110503
+org.eclipse.pde,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde;tag\=v20110504-0800
+org.eclipse.compare.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare.core;tag\=I20110208-0800
+org.eclipse.equinox.p2.engine,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine;tag\=v20110511
+org.eclipse.equinox.launcher.motif.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.hpux.ia64_32;tag\=v20110502
+org.eclipse.equinox.http,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http;tag\=v20110413
+org.eclipse.swt.gtk.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.x86_64;tag\=v3735b
+org.eclipse.equinox.p2.ui.admin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin;tag\=v20110502-1955
+org.eclipse.equinox.p2.publisher.eclipse,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher.eclipse;tag\=v20110511
+org.eclipse.equinox.weaving.caching.j9,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9;tag\=v20110502
+org.eclipse.equinox.launcher.gtk.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.hpux.ia64_32;tag\=v20110502
 org.eclipse.equinox.transforms.xslt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.xslt;tag\=v20100503
-org.eclipse.jface.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.databinding;tag\=I20100601-0800
-org.eclipse.equinox.p2.touchpoint.eclipse,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse;tag\=R36x_v20101202
-org.eclipse.help.base,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.base;tag\=r36_20101123
+org.eclipse.jface.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.databinding;tag\=I20100907-0800
+org.eclipse.equinox.p2.touchpoint.eclipse,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.eclipse;tag\=v20110511
+org.eclipse.help.base,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.base;tag\=v20110517
 org.eclipse.ui.presentations.r21,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.presentations.r21;tag\=I20100517-1500
-org.eclipse.equinox.frameworkadmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin;tag\=v20100503
-org.eclipse.pde.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.launching;tag\=v20100601
-org.eclipse.ui.intro,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.intro;tag\=v20100427
-org.eclipse.ltk.ui.refactoring,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ltk.ui.refactoring;tag\=v20100526-0800
-org.eclipse.swt.examples.ole.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.ole.win32;tag\=v3659b
-org.eclipse.ui.workbench.texteditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench.texteditor;tag\=r361_v20100714-0800
-org.eclipse.ui.examples.multipageeditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.multipageeditor;tag\=I20100509-0800
-org.eclipse.core.filesystem.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.x86;tag\=v20100505-1235
-org.eclipse.equinox.p2.ui.discovery,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery;tag\=v20100519
-org.eclipse.ui.examples.javaeditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.javaeditor;tag\=v20100520-0800
-org.eclipse.ant.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.core;tag\=v20110203_r362
-org.eclipse.equinox.p2.ui.admin.rcp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp;tag\=R36x_v20100823
-org.eclipse.equinox.p2.updatechecker,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker;tag\=R36x_v20100823
-org.eclipse.debug.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.core;tag\=v20100519
+org.eclipse.equinox.frameworkadmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin;tag\=v20110502-1955
+org.eclipse.pde.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.launching;tag\=v20110506
+org.eclipse.ui.intro,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.intro;tag\=v20110425
+org.eclipse.ltk.ui.refactoring,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ltk.ui.refactoring;tag\=v20110505-0800
+org.eclipse.swt.examples.ole.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.ole.win32;tag\=v3735b
+org.eclipse.ui.workbench.texteditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench.texteditor;tag\=v20110505-0800
+org.eclipse.ui.examples.multipageeditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.multipageeditor;tag\=I20110413-1600
+org.eclipse.core.filesystem.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.x86;tag\=v20110423-0524
+org.eclipse.equinox.p2.ui.discovery,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.discovery;tag\=v20110502-1955
+org.eclipse.ui.examples.javaeditor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.javaeditor;tag\=v20110524-0800
+org.eclipse.ant.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.core;tag\=v20110511
+org.eclipse.equinox.p2.ui.admin.rcp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.admin.rcp;tag\=v20110502-1955
+org.eclipse.equinox.p2.updatechecker,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatechecker;tag\=v20110502-1955
+org.eclipse.debug.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.core;tag\=v20110518
 org.eclipse.ui.examples.views.properties.tabbed.article,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.views.properties.tabbed/org.eclipse.ui.examples.views.properties.tabbed.article;tag\=I20100517-1500
-org.eclipse.core.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding;tag\=I20100601-0800
-org.eclipse.equinox.transforms.hook,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.hook;tag\=v20100503
-org.eclipse.ui.carbon,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.carbon;tag\=M20101124-0800
-org.eclipse.core.contenttype,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.contenttype;tag\=v20100505-1235
-org.eclipse.text,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.text;tag\=v20100601-1300
-org.eclipse.help.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.ui;tag\=r36_20101116
-org.eclipse.equinox.servletbridge,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge;tag\=v20100503
-org.eclipse.jdt.apt.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.core;tag\=R36_v20110120-1000
-org.eclipse.swt.win32.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.win32.x86_64;tag\=v3659c
-org.eclipse.equinox.metatype,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.metatype;tag\=v20100503
-org.eclipse.pde.ua.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ua/org.eclipse.pde.ua.ui;tag\=v20100504
+org.eclipse.core.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding;tag\=I20110111-0800
+org.eclipse.equinox.transforms.hook,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.transforms.hook;tag\=v20100719
+org.eclipse.ui.carbon,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.carbon;tag\=I20101109-0800
+org.eclipse.core.contenttype,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.contenttype;tag\=v20110423-0524
+org.eclipse.text,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.text;tag\=v20110505-0800
+org.eclipse.help.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.ui;tag\=v20110425
+org.eclipse.equinox.servletbridge,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge;tag\=v20110502
+org.eclipse.jdt.apt.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.core;tag\=v20110420-1015
+org.eclipse.swt.win32.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.win32.x86_64;tag\=v3735b
+org.eclipse.equinox.p2.transport.ecf,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.transport.ecf;tag\=v20110510
+org.eclipse.equinox.metatype,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.metatype;tag\=v20110502
+org.eclipse.pde.ua.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ua/org.eclipse.pde.ua.ui;tag\=v20110516
 org.eclipse.equinox.initializer,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/framework/bundles/org.eclipse.equinox.initializer;tag\=v20100503
-org.eclipse.jsch.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jsch.core;tag\=I20100505-1245
-org.eclipse.equinox.frameworkadmin.equinox,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox;tag\=v20100505
-org.eclipse.osgi.util,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util;tag\=v20100503
-org.eclipse.search,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.search;tag\=v20100520-0800
-org.eclipse.ui.views,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.views;tag\=M20110202-0800
-org.eclipse.equinox.simpleconfigurator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator;tag\=v20100503
-org.eclipse.team.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.ui;tag\=R36x_v20110203-1036
-org.eclipse.equinox.p2.metadata,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata;tag\=R36x_v20101202
-org.eclipse.swt.cocoa.macosx.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.cocoa.macosx.x86_64;tag\=v3659b
-org.eclipse.swt.gtk.linux.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.ppc64;tag\=v3659b
-org.eclipse.jdt.compiler.tool,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.compiler.tool;tag\=v_A76_R36x
-org.eclipse.platform,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform;tag\=r362_v20110120
-org.eclipse.core.databinding.observable,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.observable;tag\=I20100601-0800
-org.eclipse.equinox.weaving.aspectj,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj;tag\=v20100503
-org.eclipse.team.examples.filesystem,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.examples.filesystem;tag\=I20100526-0800
-org.eclipse.pde.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.core;tag\=v20110210_r362
-org.eclipse.ui.workbench,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench;tag\=M20110210-1200
-org.eclipse.core.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime;tag\=v20100505
-org.eclipse.core.resources.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.resources.win32.x86;tag\=v20100505-1345
-org.eclipse.equinox.launcher.gtk.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64;tag\=R36x_v20101019_1345
-org.eclipse.help,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help;tag\=v20100524
-org.eclipse.pde.api.tools.ee.j2se15,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se15;tag\=v20100506-0900
+org.eclipse.jsch.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jsch.core;tag\=I20110514-0800
+org.eclipse.equinox.frameworkadmin.equinox,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.frameworkadmin.equinox;tag\=v20110506
+org.eclipse.osgi.util,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util;tag\=v20110110
+org.eclipse.search,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.search;tag\=v20110505-0800
+org.eclipse.ui.views,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.views;tag\=I20110412-0800
+org.eclipse.equinox.simpleconfigurator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.simpleconfigurator;tag\=v20110502-1955
+org.eclipse.team.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.ui;tag\=I20110525-0800
+org.eclipse.equinox.p2.metadata,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata;tag\=v20110510
+org.eclipse.swt.cocoa.macosx.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.cocoa.macosx.x86_64;tag\=v3735b
+org.eclipse.swt.gtk.linux.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.ppc64;tag\=v3735b
+org.eclipse.jdt.compiler.tool,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.compiler.tool;tag\=v_B61
+org.eclipse.platform,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform;tag\=v20110520
+org.eclipse.core.databinding.observable,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.observable;tag\=I20110222-0800
+org.eclipse.equinox.weaving.aspectj,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj;tag\=v20110502
+org.eclipse.team.examples.filesystem,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.examples.filesystem;tag\=I20110510-0800
+org.eclipse.pde.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.core;tag\=v20110603
+org.eclipse.ui.workbench,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench;tag\=I20110519-0100
+org.eclipse.core.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime;tag\=v20110110
+org.eclipse.core.resources.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.resources.win32.x86;tag\=v20110423-0524
+org.eclipse.equinox.launcher.gtk.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86_64;tag\=v20110505
+org.eclipse.help,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help;tag\=v20110426
+org.eclipse.pde.api.tools.ee.j2se15,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se15;tag\=v20110401-1030
 org.junit4,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.junit4;tag\=v20100525
 org.eclipse.update.scheduler,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.scheduler;tag\=v20100512
-org.eclipse.equinox.launcher.gtk.linux.s390,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390;tag\=R36x_v20110125
-org.eclipse.pde.junit.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.junit.runtime;tag\=v20100601
-org.eclipse.osgi.services,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services;tag\=v20100503
-org.eclipse.swt.examples.layouts,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.layouts;tag\=v3659b
-org.eclipse.jface,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface;tag\=M20110210-1200
-org.eclipse.equinox.p2.discovery,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery;tag\=v20100503
-org.eclipse.pde.api.tools.ee.osgiminimum10,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum10;tag\=v20100506-0900
+org.eclipse.equinox.launcher.gtk.linux.s390,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390;tag\=v20110505
+org.eclipse.pde.junit.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.junit.runtime;tag\=v20110406
+org.eclipse.osgi.services,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.services;tag\=v20110513
+org.eclipse.swt.examples.layouts,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.layouts;tag\=v3735b
+org.eclipse.jface,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface;tag\=I20110522-1430
+org.eclipse.equinox.p2.discovery,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery;tag\=v20110502-1955
+org.eclipse.pde.api.tools.ee.osgiminimum10,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum10;tag\=v20110401-1030
 org.eclipse.equinox.jmx.server,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server;tag\=v20100503
 org.eclipse.equinox.jmx.server.rmi,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.server.rmi;tag\=v20100503
-org.eclipse.jdt.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.ui;tag\=r362_v20110203
-org.eclipse.equinox.security,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security;tag\=v20100503
-org.eclipse.equinox.launcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher;tag\=R36x_v20101122_1400
-org.eclipse.core.runtime.compatibility.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility.registry;tag\=v20100520
-org.eclipse.jdt.junit.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit.core;tag\=r361_v20100825-0800
-org.eclipse.equinox.http.jetty,2.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6;project\="org.eclipse.equinox.http.jetty";tag\=v20100503
-org.eclipse.jdt.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching;tag\=v20110105_r362
-org.eclipse.equinox.p2.ql,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ql;tag\=v20100503a
-org.eclipse.ui.console,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.console;tag\=v20100526
-org.eclipse.equinox.weaving.caching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching;tag\=v20100503
-org.eclipse.swt.gtk.linux.s390,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.s390;tag\=v3659b
-org.eclipse.jdt.apt.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.ui;tag\=v20100513-0845
-org.eclipse.equinox.p2.discovery.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility;tag\=v20110204-1323
+org.eclipse.jdt.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.ui;tag\=v20110531-1200
+org.eclipse.equinox.security,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security;tag\=v20110502
+org.eclipse.equinox.launcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher;tag\=v20110502
+org.eclipse.core.runtime.compatibility.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility.registry;tag\=v20110505
+org.eclipse.jdt.junit.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit.core;tag\=v20110518-0800
+org.eclipse.jdt.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching;tag\=v20110509
+org.eclipse.equinox.p2.ql,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ql;tag\=v20110510
+org.eclipse.ui.console,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.console;tag\=v20110511
+org.eclipse.equinox.weaving.caching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching;tag\=v20110502
+org.eclipse.swt.gtk.linux.s390,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.s390;tag\=v3735b
+org.eclipse.jdt.apt.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.apt.ui;tag\=v20110305-1450
+org.eclipse.equinox.p2.discovery.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.discovery.compatibility;tag\=v20110502-1955
 org.eclipse.ui.examples.fieldassist,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.fieldassist;tag\=I20100601-0800
-org.eclipse.ui.ide.application,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.ide.application;tag\=M20100707-0800
-org.eclipse.equinox.launcher.gtk.linux.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc;tag\=R36x_v20101019_1345
-org.eclipse.equinox.launcher.carbon.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx;tag\=R36x_v20101019_1345
-org.eclipse.jdt.junit,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit;tag\=r361_v20100825-0800
-org.eclipse.pde.api.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools;tag\=v20100820_r361
+org.eclipse.ui.ide.application,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.ide.application;tag\=I20110306-2000
+org.eclipse.equinox.launcher.gtk.linux.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc;tag\=v20110505
+org.eclipse.equinox.launcher.carbon.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.carbon.macosx;tag\=v20110502
+org.eclipse.jdt.junit,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit;tag\=v20110505-0800
+org.eclipse.pde.api.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools;tag\=v20110523-1600
+org.eclipse.equinox.security.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.win32.x86_64;tag\=v20110502
 org.eclipse.core.runtime.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility;tag\=v20100505
-org.eclipse.equinox.p2.directorywatcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher;tag\=R36x_v20101220
-org.eclipse.equinox.launcher.gtk.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc;tag\=R36x_v20101019_1345
-org.eclipse.core.filesystem.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.hpux.ia64_32;tag\=v20100505
-org.eclipse.swt.motif.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.aix.ppc;tag\=v3659b
-org.eclipse.ui.examples.undo,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.undo;tag\=I20100509-0800
-org.eclipse.ui.cocoa,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.cocoa;tag\=M20101124-0800
-org.eclipse.equinox.http.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.registry;tag\=R36x_v20101103
-org.eclipse.pde.api.tools.ee.jre11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.jre11;tag\=v20100506-0900
-org.eclipse.core.net.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64;tag\=I20100505-1245
-org.eclipse.equinox.jsp.jasper,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper;tag\=R36x_v20101103
-org.eclipse.pde.api.tools.ee.j2se14,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se14;tag\=v20100506-0900
-org.eclipse.equinox.p2.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui;tag\=v20100518
-org.eclipse.jdt.launching.ui.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching.ui.macosx;tag\=v20100505
-org.eclipse.equinox.p2.ui.sdk,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk;tag\=v20100513
-org.eclipse.compare.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare.examples;tag\=I20100505-1245
-org.eclipse.pde.ua.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ua/org.eclipse.pde.ua.core;tag\=v20100504
-org.eclipse.platform.doc.isv,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform.doc.isv;tag\=r362_v20110111
-org.eclipse.ant.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.launching;tag\=v20101020_r362
-org.eclipse.equinox.p2.operations,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations;tag\=v20100510
-org.eclipse.compare,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare;tag\=R36x_v20100929-0800
+org.eclipse.equinox.p2.directorywatcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher;tag\=v20110502-1955
+org.eclipse.equinox.launcher.gtk.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.solaris.sparc;tag\=v20110505
+org.eclipse.core.filesystem.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.hpux.ia64_32;tag\=v20110423-0524
+org.eclipse.ui.examples.undo,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.undo;tag\=I20110413-1600
+org.eclipse.ui.cocoa,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.cocoa;tag\=I20101109-0800
+org.eclipse.equinox.http.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.registry;tag\=v20110502
+org.eclipse.equinox.p2.ui.importexport,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.importexport;tag\=v20110511
+org.eclipse.pde.api.tools.ee.jre11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.jre11;tag\=v20110401-1030
+org.eclipse.core.net.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86_64;tag\=I20110331-0827
+org.eclipse.equinox.jsp.jasper,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper;tag\=v20110502
+org.eclipse.pde.api.tools.ee.j2se14,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se14;tag\=v20110401-1030
+org.eclipse.equinox.p2.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui;tag\=v20110601
+org.eclipse.jdt.launching.ui.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.launching.ui.macosx;tag\=v20110509
+org.eclipse.equinox.p2.ui.sdk,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk;tag\=v20110502-1955
+org.eclipse.compare.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare.examples;tag\=I20110510-0800
+org.eclipse.pde.ua.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ua/org.eclipse.pde.ua.core;tag\=v20110516
+org.eclipse.platform.doc.isv,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform.doc.isv;tag\=v20110602-0800
+org.eclipse.ant.launching,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.launching;tag\=v20110506
+org.eclipse.equinox.p2.operations,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.operations;tag\=v20110511-1821
+org.eclipse.compare,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare;tag\=I20110525-0800
 org.eclipse.equinox.http.servletbridge,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.http.servletbridge;tag\=v20100503
-org.eclipse.jdt.compiler.apt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.compiler.apt;tag\=v20100513-0845
-org.eclipse.help.webapp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.webapp;tag\=r36_20101130
-org.eclipse.pde.ui.templates,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.ui.templates;tag\=v20100601
-org.eclipse.equinox.p2.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository;tag\=R36x_v20110111-1500
-org.eclipse.equinox.p2.metadata.generator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.metadata.generator;tag\=R36x_v20101208-1400
-org.eclipse.equinox.p2.director.app,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app;tag\=R36x_v20100823
-org.eclipse.equinox.launcher.motif.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc;tag\=R36x_v20101019_1345
-org.eclipse.equinox.app,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app;tag\=R36x_v20100803
-org.eclipse.swt.motif.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.hpux.ia64_32;tag\=v3659b
-org.eclipse.swt.gtk.solaris.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.solaris.x86;tag\=v3659b
-org.eclipse.pde.ds.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ds/org.eclipse.pde.ds.ui;tag\=v20100601
-org.eclipse.core.net.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86;tag\=R36x_v20100825-0800
-org.eclipse.equinox.p2.console,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console;tag\=v20100601
-org.eclipse.equinox.http.jetty,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6;project\="org.eclipse.equinox.http.jetty";tag\=v20100503
-org.eclipse.swt.examples.browser.demos,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.browser.demos;tag\=v3659b
-org.eclipse.equinox.launcher.cocoa.macosx.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64;tag\=R36x_v20101019_1345
-org.eclipse.releng.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.releng.tools;tag\=v20100531
-org.eclipse.pde.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/doc/org.eclipse.pde.doc.user;tag\=v20101118_r362
-org.eclipse.swt.motif.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.linux.x86;tag\=v3659b
+org.eclipse.jdt.compiler.apt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.compiler.apt;tag\=v0110509-1300
+org.eclipse.help.webapp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.help.webapp;tag\=v20110518
+org.eclipse.pde.ui.templates,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.ui.templates;tag\=v20110516
+org.eclipse.equinox.p2.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository;tag\=v20110601
+org.eclipse.equinox.p2.director.app,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director.app;tag\=v20110505
+org.eclipse.equinox.launcher.motif.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.motif.aix.ppc;tag\=v20110502
+org.eclipse.swt.gtk.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.aix.ppc;tag\=v3735b
+org.eclipse.equinox.app,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.app;tag\=v20110321
+org.eclipse.swt.gtk.solaris.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.solaris.x86;tag\=v3735b
+org.eclipse.pde.ds.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ds/org.eclipse.pde.ds.ui;tag\=v20110516
+org.eclipse.core.net.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86;tag\=I20110419-0800
+org.eclipse.equinox.p2.console,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.console;tag\=v20110502-1955
+org.eclipse.equinox.http.jetty,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty6;project\="org.eclipse.equinox.http.jetty";tag\=v20110502
+org.eclipse.swt.examples.browser.demos,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.browser.demos;tag\=v3735b
+org.eclipse.equinox.launcher.cocoa.macosx.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx.x86_64;tag\=v20110502
+org.eclipse.releng.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.releng.tools;tag\=v20110523
+org.eclipse.pde.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/doc/org.eclipse.pde.doc.user;tag\=v20110601-0800
 org.eclipse.jface.examples.databinding,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.examples.databinding;tag\=I20100601-0800
 org.eclipse.equinox.jmx.client.rmi,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.rmi;tag\=v20100503
-org.eclipse.equinox.weaving.hook,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook;tag\=v20100503
-org.eclipse.debug.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.ui;tag\=v20101201_r362
-org.eclipse.core.net,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net;tag\=I20100511-0800
-org.eclipse.core.filesystem.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.solaris.sparc;tag\=v20100505-1235
-org.eclipse.equinox.p2.touchpoint.natives,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives;tag\=R36x_v20110111
-org.eclipse.pde.api.tools.ee.cdcfoundation11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11;tag\=v20100506-0900
-org.eclipse.equinox.launcher.win32.win32.ia64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64;tag\=R36x_v20101222
-org.eclipse.swt.examples.browser,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.browser;tag\=v3659b
-org.eclipse.core.filesystem.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.x86_64;tag\=v20100505-1235
-org.eclipse.equinox.event,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event;tag\=v20100503
-org.eclipse.ui.ide,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.ide;tag\=M20101201-0800
-org.eclipse.ui.views.log,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.ui.views.log;tag\=v20110210_r362
-org.eclipse.equinox.p2.jarprocessor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.jarprocessor;tag\=v20100503a
-org.eclipse.ui.browser,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.browser;tag\=r36_20101216
-org.eclipse.core.expressions,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.expressions;tag\=v20100505
-org.eclipse.core.databinding.beans,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.beans;tag\=I20100601-0800
-org.eclipse.equinox.ds,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds;tag\=R36x_v20100803
-org.eclipse.equinox.launcher.win32.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64;tag\=R36x_v20101222
-org.eclipse.equinox.launcher.gtk.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86;tag\=R36x_v20101019_1345
+org.eclipse.equinox.weaving.hook,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook;tag\=v20110502
+org.eclipse.debug.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.ui;tag\=v20110518
+org.eclipse.core.net,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net;tag\=I20110511-0800
+org.eclipse.core.filesystem.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.solaris.sparc;tag\=v20110423-0524
+org.eclipse.equinox.p2.touchpoint.natives,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.touchpoint.natives;tag\=v20110502-1955
+org.eclipse.pde.api.tools.ee.cdcfoundation11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation11;tag\=v20110401-1030
+org.eclipse.equinox.launcher.win32.win32.ia64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.ia64;tag\=v20110502
+org.eclipse.swt.examples.browser,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.browser;tag\=v3735b
+org.eclipse.core.filesystem.linux.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.x86_64;tag\=v20110423-0524
+org.eclipse.equinox.event,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.event;tag\=v20110502
+org.eclipse.ui.ide,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.ide;tag\=I20110519-0100
+org.eclipse.ui.views.log,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.ui.views.log;tag\=v20110404
+org.eclipse.equinox.p2.jarprocessor,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.jarprocessor;tag\=v20110502-1955
+org.eclipse.ui.browser,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.browser;tag\=v20110426
+org.eclipse.core.expressions,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.expressions;tag\=v20110228
+org.eclipse.core.databinding.beans,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.beans;tag\=I20100824-0800
+org.eclipse.equinox.ds,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ds;tag\=v20110502
+org.eclipse.equinox.launcher.win32.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86_64;tag\=v20110502
+org.eclipse.equinox.launcher.gtk.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.x86;tag\=v20110505
 org.eclipse.update.core.linux,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.core.linux;tag\=v20100512
-org.eclipse.core.databinding.property,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.property;tag\=I20100601-0800
-org.eclipse.ui.examples.propertysheet,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.propertysheet;tag\=I20100509-0800
-org.eclipse.core.jobs,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.jobs;tag\=R36x_v20100824
-org.eclipse.swt.gtk.linux.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.ppc;tag\=v3659b
-org.eclipse.swt.carbon.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.carbon.macosx;tag\=v3659b
-org.eclipse.pde.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.runtime;tag\=v20100601
-org.eclipse.pde.build,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/build/org.eclipse.pde.build;tag\=R36x_20110203
-org.eclipse.equinox.p2.reconciler.dropins,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins;tag\=R36x_v20110114
-org.eclipse.equinox.device,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device;tag\=v20100503
-org.eclipse.core.commands,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.commands;tag\=I20100512-1500
-org.eclipse.equinox.p2.repository.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools;tag\=R36x_v20100823
-org.eclipse.equinox.launcher.gtk.linux.s390x,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x;tag\=R36x_v20110125
-org.eclipse.update.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.core;tag\=R36x_v20100629
-org.eclipse.team.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.core;tag\=R36x_v20110203-1036
-org.eclipse.debug.examples.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.examples.ui;tag\=v20100526
-org.eclipse.pde.api.tools.ee.javase16,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.javase16;tag\=v20100506-0900
-org.eclipse.compare.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare.win32;tag\=R36x_v20101103-0618
-org.eclipse.equinox.p2.installer,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.installer;tag\=v20100503a
-org.eclipse.debug.examples.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.examples.core;tag\=v20100505
-org.eclipse.rcp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk-feature/plugins/org.eclipse.rcp;tag\=v20100527-0800
+org.eclipse.core.databinding.property,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.databinding.property;tag\=I20110222-0800
+org.eclipse.ui.examples.propertysheet,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.propertysheet;tag\=I20110413-1600
+org.eclipse.core.jobs,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.jobs;tag\=v20110404
+org.eclipse.swt.carbon.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.carbon.macosx;tag\=v3735b
+org.eclipse.pde.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.runtime;tag\=v20110508
+org.eclipse.pde.build,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/build/org.eclipse.pde.build;tag\=v20110512-1320
+org.eclipse.equinox.p2.reconciler.dropins,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.reconciler.dropins;tag\=v20110510
+org.eclipse.equinox.device,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.device;tag\=v20101217
+org.eclipse.core.commands,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.commands;tag\=I20110111-0800
+org.eclipse.equinox.p2.repository.tools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository.tools;tag\=v20110512-1320
+org.eclipse.equinox.launcher.gtk.linux.s390x,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/contributed/org.eclipse.equinox.launcher.gtk.linux.s390x;tag\=v20110505
+org.eclipse.update.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.core;tag\=v20110330
+org.eclipse.team.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.core;tag\=I20110525-0800
+org.eclipse.debug.examples.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.examples.ui;tag\=v20110511
+org.eclipse.pde.api.tools.ee.javase16,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.javase16;tag\=v20110401-1030
+org.eclipse.compare.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare/plugins/org.eclipse.compare.win32;tag\=I20110510-0800
+org.eclipse.equinox.p2.installer,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.installer;tag\=v20110502-1955
+org.eclipse.debug.examples.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.debug.examples.core;tag\=v20110511
+org.eclipse.rcp,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk-feature/plugins/org.eclipse.rcp;tag\=v20110504-0800
 org.eclipse.pde.ds.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ds/org.eclipse.pde.ds.core;tag\=v20100601
-org.eclipse.equinox.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry;tag\=v20100503
-org.eclipse.ui.examples.readmetool,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.readmetool;tag\=I20100509-0800
-org.eclipse.jdt.core.manipulation,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.core.manipulation;tag\=v20100520-0800
-org.eclipse.equinox.http.servlet,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.servlet;tag\=v20100503
-org.eclipse.equinox.launcher.win32.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86;tag\=R36x_v20101222
-org.eclipse.jdt.junit.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit.runtime;tag\=v20100526-0800
-org.eclipse.swt.examples.controls,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.controls;tag\=v3659b
-org.eclipse.core.filesystem.linux.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.linux.ppc;tag\=v20100505-1235
-org.eclipse.osgi.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.osgi.jmx;tag\=v20100503
-org.eclipse.ui.workbench.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench.compatibility;tag\=I20100511-0800
-org.eclipse.core.filesystem.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.aix.ppc;tag\=v20100505-1235
-org.eclipse.swt.cocoa.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.cocoa.macosx;tag\=v3659b
-org.eclipse.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui;tag\=M20110203-1100
+org.eclipse.equinox.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.registry;tag\=v20110502
+org.eclipse.ui.examples.readmetool,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.readmetool;tag\=I20110413-1600
+org.eclipse.jdt.core.manipulation,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.core.manipulation;tag\=v20110505-0800
+org.eclipse.equinox.http.servlet,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.servlet;tag\=v20110502
+org.eclipse.equinox.launcher.win32.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.win32.win32.x86;tag\=v20110502
+org.eclipse.jdt.junit.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit.runtime;tag\=v20110505-0800
+org.eclipse.swt.examples.controls,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.controls;tag\=v3735b
+org.eclipse.osgi.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.osgi.jmx;tag\=v20110414
+org.eclipse.ui.workbench.compatibility,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.workbench.compatibility;tag\=I20110413-1600
+org.eclipse.core.filesystem.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem/fragments/org.eclipse.core.filesystem.aix.ppc;tag\=v20110423-0524
+org.eclipse.swt.cocoa.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.cocoa.macosx;tag\=v3735b
+org.eclipse.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui;tag\=I20110602-0100
 org.eclipse.equinox.jmx.client.xmlrpc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client.xmlrpc;tag\=v20100503
-org.eclipse.swt.win32.wce_ppc.arm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.wce_ppc.arm;tag\=v3659c
-org.eclipse.compare.examples.xml,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare.examples.xml;tag\=I20100505-1245
+org.eclipse.swt.win32.wce_ppc.arm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.win32.wce_ppc.arm;tag\=v3735b
+org.eclipse.compare.examples.xml,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.compare.examples.xml;tag\=I20110510-0800
 org.eclipse.equinox.jsp.jasper.registry,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.jsp.jasper.registry;tag\=v20100503
-org.eclipse.core.resources,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.resources;tag\=R36x_v20110131-1630
-org.eclipse.team.cvs.ssh2,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.ssh2;tag\=I20100526-0800
-org.eclipse.equinox.wireadmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.wireadmin;tag\=v20100503
-org.eclipse.ant.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.ui;tag\=v20100427
-org.eclipse.swt.gtk.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.solaris.sparc;tag\=v3659b
-org.eclipse.core.net.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64;tag\=I20100505-1245
-org.eclipse.swt.examples.launcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.launcher;tag\=v3659b
+org.eclipse.core.resources,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.resources;tag\=v20110510-0712
+org.eclipse.team.cvs.ssh2,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.ssh2;tag\=I20110511-0800
+org.eclipse.equinox.wireadmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.wireadmin;tag\=v20110601
+org.eclipse.ant.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ant.ui;tag\=v20110510
+org.eclipse.swt.gtk.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.solaris.sparc;tag\=v3735b
+org.eclipse.equinox.region,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.region;tag\=v20110524
+org.eclipse.core.net.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.net/fragments/org.eclipse.core.net.win32.x86_64;tag\=I20110331-0827
+org.eclipse.swt.examples.launcher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples.launcher;tag\=v3735b
 org.eclipse.equinox.preferences.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.preferences.jmx;tag\=v20100503
-org.eclipse.equinox.p2.garbagecollector,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.garbagecollector;tag\=v20100503
-org.eclipse.equinox.cm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.cm;tag\=v20100520
-org.eclipse.equinox.common,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.common;tag\=v20100503
-org.eclipse.equinox.p2.director,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director;tag\=R36x_v20101117-1018
-org.eclipse.equinox.p2.publisher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher;tag\=v20100824-2220
-org.eclipse.jdt.doc.isv,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.doc.isv;tag\=r362_v20101117-0800
-org.eclipse.ltk.core.refactoring,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ltk.core.refactoring;tag\=r362_v20101117-0800
-org.eclipse.jdt.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.core;tag\=v_A76_R36x
-org.eclipse.equinox.p2.updatesite,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite;tag\=R36x_v20100823
+org.eclipse.equinox.p2.garbagecollector,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.garbagecollector;tag\=v20110510
+org.eclipse.equinox.cm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.cm;tag\=v20110502
+org.eclipse.equinox.common,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.common;tag\=v20110523
+org.eclipse.equinox.p2.director,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.director;tag\=v20110504-1715
+org.eclipse.equinox.p2.publisher,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher;tag\=v20110511
+org.eclipse.jdt.doc.isv,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.doc.isv;tag\=v20110531-1242
+org.eclipse.ltk.core.refactoring,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ltk.core.refactoring;tag\=v20110505-0800
+org.eclipse.jdt.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.core;tag\=v_B61
+org.eclipse.equinox.p2.updatesite,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite;tag\=v20110510
 org.eclipse.update.configurator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.configurator;tag\=v20100512
-org.eclipse.core.filesystem.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.win32.x86;tag\=R36x_v20100727-0745
-org.eclipse.equinox.p2.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core;tag\=R36x_v20110111
-org.eclipse.swt.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples;tag\=v3659b
-org.eclipse.cvs,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk-feature/plugins/org.eclipse.cvs;tag\=v20100414
-org.eclipse.swt.gtk.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.x86;tag\=v3659b
-org.eclipse.equinox.log,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.log;tag\=v20100503
+org.eclipse.core.filesystem.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.win32.x86;tag\=v20110423-0524
+org.eclipse.equinox.launcher.gtk.aix.ppc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.aix.ppc;tag\=v20110530
+org.eclipse.equinox.p2.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.core;tag\=v20110502-1955
+org.eclipse.swt.examples,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.examples;tag\=v3735b
+org.eclipse.cvs,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk-feature/plugins/org.eclipse.cvs;tag\=v20110505-0800
+org.eclipse.swt.gtk.linux.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.linux.x86;tag\=v3735b
+org.eclipse.equinox.log,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.log;tag\=v20110502
 org.eclipse.equinox.jmx.client,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.client;tag\=v20100503
 org.eclipse.ui.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.win32;tag\=I20100509-0800
-org.eclipse.ui.views.properties.tabbed,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.views.properties.tabbed;tag\=I20100509-0800
-org.eclipse.equinox.security.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.ui;tag\=v20100503
-org.eclipse.pde.api.tools.ee.j2se13,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se13;tag\=v20100506-0900
-org.eclipse.swt.motif.solaris.sparc,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.motif.solaris.sparc;tag\=v3659b
-org.eclipse.equinox.util,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util;tag\=v20100503
-org.eclipse.equinox.p2.extensionlocation,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation;tag\=v20100518
-org.eclipse.pde.api.tools.ee.osgiminimum12,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12;tag\=v20100506-0900
-org.eclipse.equinox.concurrent,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent;tag\=v20100503
-org.eclipse.platform.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform.doc.user;tag\=r362_v20101117-0800
+org.eclipse.ui.views.properties.tabbed,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.views.properties.tabbed;tag\=I20110201-0800
+org.eclipse.equinox.security.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.ui;tag\=v20101004
+org.eclipse.pde.api.tools.ee.j2se13,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se13;tag\=v20110401-1030
+org.eclipse.equinox.util,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.util;tag\=v20110502
+org.eclipse.equinox.p2.extensionlocation,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation;tag\=v20110510
+org.eclipse.pde.api.tools.ee.osgiminimum12,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12;tag\=v20110401-1030
+org.eclipse.equinox.concurrent,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/components/bundles/org.eclipse.equinox.concurrent;tag\=v20110502
+org.eclipse.platform.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.platform.doc.user;tag\=v20110601-0800
 org.eclipse.equinox.security.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.macosx;tag\=v20100503
-org.eclipse.equinox.supplement,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement;project\="org.eclipse.equinox.supplement";tag\=R36x_v20101021
-org.eclipse.sdk,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk;tag\=r362_v20110202
-org.eclipse.equinox.launcher.gtk.linux.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64;tag\=R36x_v20101019_1345
-org.eclipse.jsch.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jsch.ui;tag\=I20100505-1245
-org.eclipse.core.filesystem.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.win32.x86_64;tag\=R36x_v20100727-0745
+org.eclipse.equinox.supplement,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement;project\="org.eclipse.equinox.supplement";tag\=v20110502
+org.eclipse.sdk,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.sdk;tag\=v20110504-0800
+org.eclipse.equinox.launcher.gtk.linux.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.gtk.linux.ppc64;tag\=v20110505
+org.eclipse.jsch.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jsch.ui;tag\=I20110511-0800
+org.eclipse.core.filesystem.win32.x86_64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filesystem.win32.x86_64;tag\=v20110423-0524
 org.eclipse.equinox.security.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/security/bundles/org.eclipse.equinox.security.win32.x86;tag\=v20100503
-org.eclipse.core.variables,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.variables;tag\=v20100505
-org.eclipse.pde.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.ui;tag\=v20110210_r362
-org.eclipse.equinox.p2.artifact.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository;tag\=R36x_v20100901
-org.eclipse.core.runtime.compatibility.auth,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility.auth;tag\=v20100517
-org.eclipse.osgi,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.osgi;tag\=R36x_v20110210
-org.eclipse.ui.intro.universal,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.intro.universal;tag\=r36_v20100702
+org.eclipse.core.variables,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.variables;tag\=v20110511
+org.eclipse.pde.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/ui/org.eclipse.pde.ui;tag\=v20110603
+org.eclipse.equinox.p2.artifact.repository,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository;tag\=v20110519
+org.eclipse.core.runtime.compatibility.auth,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.runtime.compatibility.auth;tag\=v20110110
+org.eclipse.osgi,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.osgi;tag\=v20110613
+org.eclipse.ui.intro.universal,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.intro.universal;tag\=v20110510
 org.eclipse.swt.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.swt.jmx;tag\=v20100503
-org.eclipse.equinox.launcher.cocoa.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx;tag\=R36x_v20101019_1345
+org.eclipse.equinox.coordinator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.coordinator;tag\=v20110502
+org.eclipse.equinox.launcher.cocoa.macosx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.cocoa.macosx;tag\=v20110502
 org.eclipse.ui.examples.contributions,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.examples.contributions;tag\=I20100509-0800
-org.eclipse.team.cvs.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.ui;tag\=R36x_v20110203-1036
-org.eclipse.ui.cheatsheets,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.cheatsheets;tag\=v20100427
-org.eclipse.jdt.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.doc.user;tag\=r361_v20100721-0800
-org.eclipse.equinox.useradmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.useradmin;tag\=v20100503
-org.eclipse.jface.text,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.text;tag\=r361_v20100825-0800
+org.eclipse.team.cvs.ui,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.ui;tag\=I20110510-0800
+org.eclipse.ui.cheatsheets,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.cheatsheets;tag\=v20110425
+org.eclipse.jdt.doc.user,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.doc.user;tag\=v20110601-0800
+org.eclipse.equinox.useradmin,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.useradmin;tag\=v20110413
+org.eclipse.jface.text,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jface.text;tag\=v20110505-0800
 org.eclipse.core.resources.jmx,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.core.resources.jmx;tag\=v20100503
 org.eclipse.update.core.win32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.update.core.win32;tag\=v20100512
-org.eclipse.ui.externaltools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.externaltools;tag\=v20100427
-org.eclipse.jdt.junit4.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit4.runtime;tag\=v20100526-0800
-org.eclipse.pde.api.tools.ee.j2se12,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se12;tag\=v20100506-0900
-org.eclipse.equinox.http.jetty,1.1.100=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty5;project\="org.eclipse.equinox.http.jetty";tag\=v20100519
-org.eclipse.pde.api.tools.ee.osgiminimum11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11;tag\=v20100506-0900
-org.eclipse.ui.navigator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.navigator;tag\=I20100601-0800
-org.eclipse.team.cvs.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.core;tag\=R36x_v20110119-0815
-org.eclipse.pde.api.tools.ee.cdcfoundation10,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10;tag\=v20100506-0900
-org.eclipse.equinox.launcher.wpf.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86;tag\=R36x_v20101222
-org.eclipse.equinox.preferences,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences;tag\=v20100503
+org.eclipse.ui.externaltools,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.externaltools;tag\=v20110506
+org.eclipse.jdt.junit4.runtime,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt.junit4.runtime;tag\=v20110505-0800
+org.eclipse.pde.api.tools.ee.j2se12,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.j2se12;tag\=v20110401-1030
+org.eclipse.equinox.http.jetty,1.1.100=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.http.jetty5;project\="org.eclipse.equinox.http.jetty";tag\=v20110418
+org.eclipse.pde.api.tools.ee.osgiminimum11,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.osgiminimum11;tag\=v20110401-1030
+org.eclipse.ui.navigator,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.navigator;tag\=I20110524-0800
+org.eclipse.equinox.console.supportability,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/console/org.eclipse.equinox.console.supportability;tag\=v20110207
+org.eclipse.team.cvs.core,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.team.cvs.core;tag\=I20110510-0800
+org.eclipse.pde.api.tools.ee.cdcfoundation10,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:pde/apitools/org.eclipse.pde.api.tools.ee.cdcfoundation10;tag\=v20110401-1030
+org.eclipse.equinox.launcher.wpf.win32.x86,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher/fragments/org.eclipse.equinox.launcher.wpf.win32.x86;tag\=v20110502
+org.eclipse.equinox.preferences,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.preferences;tag\=v20110502
 org.eclipse.equinox.jmx.common,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.common;tag\=v20100503
-org.eclipse.equinox.p2.ui.sdk.scheduler,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler;tag\=v20100507-1815
+org.eclipse.equinox.p2.ui.sdk.scheduler,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.ui.sdk.scheduler;tag\=v20110502-1955
 org.eclipse.equinox.jmx.vm,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/incubator/monitoring/bundles/org.eclipse.equinox.jmx.vm;tag\=v20100503
-org.eclipse.swt.gtk.aix.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.aix.ppc64;tag\=v3659b
-org.eclipse.ui.editors,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.editors;tag\=r361_v20100825-0800
+org.eclipse.swt.gtk.aix.ppc64,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.aix.ppc64;tag\=v3735b
+org.eclipse.swt.gtk.hpux.ia64_32,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.swt.gtk.hpux.ia64_32;tag\=v3735b
+org.eclipse.ui.editors,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.ui.editors;tag\=v20110517-0800
 org.eclipse.equinox.servletbridge.extensionbundle,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/server-side/bundles/org.eclipse.equinox.servletbridge.extensionbundle;tag\=v20100503
-org.eclipse.core.filebuffers,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filebuffers;tag\=v20100520-0800
-org.eclipse.equinox.ip,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip;tag\=v20100503
-org.eclipse.jdt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt;tag\=r361_v20100714-0800
+org.eclipse.core.filebuffers,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.core.filebuffers;tag\=v20110505-0800
+org.eclipse.equinox.ip,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/rt\:org.eclipse.equinox/compendium/bundles/org.eclipse.equinox.ip;tag\=v20110502
+org.eclipse.jdt,0.0.0=scm\:cvs\:pserver\:dev.eclipse.org\:/cvsroot/eclipse\:org.eclipse.jdt;tag\=v20110505-0800
diff --git a/efj.sh b/efj.sh
new file mode 100644
index 0000000..9e68076
--- /dev/null
+++ b/efj.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+java -cp @LAUNCHER@ org.eclipse.core.launcher.Main \
+     -application org.eclipse.jdt.core.JavaCodeFormatter \
+     ${1+"$@"}
diff --git a/generateAdditionalPlatforms.xml b/generateAdditionalPlatforms.xml
index 642fd35..70fa936 100644
--- a/generateAdditionalPlatforms.xml
+++ b/generateAdditionalPlatforms.xml
@@ -1,7 +1,7 @@
 <project name="Pdebuild bootstrap" default="cleanGenerate" basedir=".">
 	<target name="cleanGenerate" depends="clean, createTarball" />
 	<property name="archsDir" value="additionalArchs" />
-	<property name="sourceDir" value="build/eclipse-3.5.2-src" />
+	<property name="sourceDir" value="build/eclipse-3.7.0-I20110505-0800-src" />
 
 	<macrodef name="copyPlugin">
 		<attribute name="pluginName" />
@@ -59,4 +59,4 @@
 		     basedir="additionalArchs"
 		     includes="**/*" />
 	</target>
-</project>
\ No newline at end of file
+</project>
diff --git a/generatedScripts/plugins/org.apache.lucene/build.xml b/generatedScripts/plugins/org.apache.lucene/build.xml
new file mode 100644
index 0000000..3667429
--- /dev/null
+++ b/generatedScripts/plugins/org.apache.lucene/build.xml
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.apache.lucene" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.apache.lucene"/>
+	<property name="bundleVersion" value="2.9.1.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.apache.lucene_2.9.1.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.apache.lucene for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.apache.lucene_2.9.1.201105111101.jar" basedir="${temp.folder}/org.apache.lucene_2.9.1.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.apache.lucene.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.apache.lucene_2.9.1.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.apache.lucene_2.9.1.201105111101" log="${compilation.prereq.log}">
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.apache.lucene_2.9.1.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.9.1.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.apache.lucene"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.apache.lucene_2.9.1.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.apache.lucene_2.9.1.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.apache.lucene_2.9.1.201105111101" version="2.9.1.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.apache.lucene_2.9.1.201105111101"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.apache.lucene"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.apache.lucene_2.9.1.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.apache.lucene of all the zips, jars and logs created.">
+		<delete file="${plugin.destination}/org.apache.lucene_2.9.1.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.apache.lucene_2.9.1.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.apache.lucene" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.apache.lucene.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.apache.lucene_2.9.1.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ant.core/build.xml b/generatedScripts/plugins/org.eclipse.ant.core/build.xml
new file mode 100644
index 0000000..1c98621
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ant.core/build.xml
@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ant.core" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ant.core"/>
+	<property name="bundleVersion" value="3.2.300.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ant.core_3.2.300.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ant.core for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ant.core_3.2.300.v20110510.jar" basedir="${temp.folder}/org.eclipse.ant.core_3.2.300.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ant.core @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.core.variables/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="lib/antsupportlib.jar.nestedJars">
+	</target>
+	<target name="lib/antsupportlib.jar" depends="init,lib/antsupportlib.jar.nestedJars" unless="lib/antsupportlib.jar" description="Create jar: org.eclipse.ant.core lib/antsupportlib.jar.">
+		<delete dir="${temp.folder}/lib/antsupportlib.jar.bin"/>
+		<mkdir dir="${temp.folder}/lib/antsupportlib.jar.bin"/>
+		<path id="lib/antsupportlib.jar.classpath">
+			<pathelement path="../org.eclipse.core.variables/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="${build.result.folder}/@dot"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.ant.core_3.2.300.v20110510/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/lib/antsupportlib.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="lib/antsupportlib.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.lib_antsupportlib.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/lib/antsupportlib.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/lib/antsupportlib.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/lib"/>
+		<jar destfile="${build.result.folder}/lib/antsupportlib.jar" basedir="${temp.folder}/lib/antsupportlib.jar.bin"/>
+		<delete dir="${temp.folder}/lib/antsupportlib.jar.bin"/>
+	</target>
+
+	<target name="lib/antsupportlibsrc.zip" depends="init" unless="lib/antsupportlibsrc.zip">
+		<mkdir dir="${build.result.folder}/lib"/>
+		<antcall target="zip.lib/antsupportlibsrc.zip"/>
+	</target>
+	<target name="zip.lib/antsupportlibsrc.zip">
+		<zip destfile="${build.result.folder}/lib/antsupportlibsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.lib/antsupportlibsrc.zip">
+		<copy todir="${source.destination.folder}/lib/antsupportlibsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ant.core.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<available property="lib/antsupportlib.jar" file="${build.result.folder}/lib/antsupportlib.jar"/>
+		<antcall target="lib/antsupportlib.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ant.core_3.2.300.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ant.core_3.2.300.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.variables/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.variables_3.2.500.v20110509/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<available property="lib/antsupportlibsrc.zip" file="${build.result.folder}/lib/antsupportlibsrc.zip"/>
+		<antcall target="lib/antsupportlibsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ant.core_3.2.300.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.2.300.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/lib/antsupportlib.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="lib/antsupportlib.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="lib/*.jar"/>
+				<include name="META-INF/"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510" version="3.2.300.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510/lib/antsupportlib.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510/lib"/>
+		<copy file="${build.result.folder}/lib/antsupportlibsrc.zip" todir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510/lib" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.lib/antsupportlibsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510/lib"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ant.core_3.2.300.v20110510/lib" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/lib">
+				<include name="antsupportlib.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ant.core of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${build.result.folder}/lib/antsupportlib.jar"/>
+		<delete file="${build.result.folder}/lib/antsupportlibsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ant.core_3.2.300.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ant.core_3.2.300.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ant.core" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ant.core.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ant.core_3.2.300.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.contenttype/build.xml b/generatedScripts/plugins/org.eclipse.core.contenttype/build.xml
new file mode 100644
index 0000000..1643802
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.contenttype/build.xml
@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.contenttype" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.contenttype"/>
+	<property name="bundleVersion" value="3.4.100.v20110423-0524"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.contenttype for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.contenttype_3.4.100.v20110423-0524.jar" basedir="${temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.contenttype @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.contenttype.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.contenttype_3.4.100.v20110423-0524${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.contenttype_3.4.100.v20110423-0524" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.4.100.v20110423-0524"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name=".options"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524" version="3.4.100.v20110423-0524"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.contenttype_3.4.100.v20110423-0524" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.contenttype of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.contenttype_3.4.100.v20110423-0524.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.contenttype_3.4.100.v20110423-0524.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.contenttype.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.contenttype_3.4.100.v20110423-0524.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.expressions/build.xml b/generatedScripts/plugins/org.eclipse.core.expressions/build.xml
new file mode 100644
index 0000000..06eb33e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.expressions/build.xml
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.expressions" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.expressions"/>
+	<property name="bundleVersion" value="3.4.300.v20110228"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.expressions_3.4.300.v20110228"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.expressions for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.expressions_3.4.300.v20110228.jar" basedir="${temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.expressions @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.expressions.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.expressions_3.4.300.v20110228${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.expressions_3.4.300.v20110228" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.expressions_3.4.300.v20110228"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.4.300.v20110228"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name=".options"/>
+				<include name="META-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228" version="3.4.300.v20110228"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.expressions_3.4.300.v20110228" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.expressions of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.expressions_3.4.300.v20110228.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.expressions_3.4.300.v20110228.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.expressions" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.expressions.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.expressions_3.4.300.v20110228.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.jobs/build.xml b/generatedScripts/plugins/org.eclipse.core.jobs/build.xml
new file mode 100644
index 0000000..6b7585c
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.jobs/build.xml
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.jobs" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.jobs"/>
+	<property name="bundleVersion" value="3.5.100.v20110404"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.jobs for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.jobs_3.5.100.v20110404.jar" basedir="${temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.jobs @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.jobs.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.jobs_3.5.100.v20110404${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.jobs_3.5.100.v20110404" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.jobs_3.5.100.v20110404"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.5.100.v20110404"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.properties"/>
+				<include name=".options"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404" version="3.5.100.v20110404"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.jobs_3.5.100.v20110404" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.jobs of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.jobs_3.5.100.v20110404.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.jobs_3.5.100.v20110404.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.jobs.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.jobs_3.5.100.v20110404.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.net/build.xml b/generatedScripts/plugins/org.eclipse.core.net/build.xml
new file mode 100644
index 0000000..bd8bd1e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.net/build.xml
@@ -0,0 +1,330 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.net" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.net"/>
+	<property name="bundleVersion" value="1.2.100.I20110510-0800"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.net_1.2.100.I20110510-0800"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.net for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.net_1.2.100.I20110510-0800.jar" basedir="${temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.net @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.net.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.net_1.2.100.I20110510-0800${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.net_1.2.100.I20110510-0800" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.net_1.2.100.I20110510-0800"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.2.100.I20110510-0800"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="plugin.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800" version="1.2.100.I20110510-0800"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.net_1.2.100.I20110510-0800" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.net of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.net_1.2.100.I20110510-0800.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.net_1.2.100.I20110510-0800.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.net.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.net_1.2.100.I20110510-0800.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.runtime.compatibility.auth/build.xml b/generatedScripts/plugins/org.eclipse.core.runtime.compatibility.auth/build.xml
new file mode 100644
index 0000000..1dc81f1
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.runtime.compatibility.auth/build.xml
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.runtime.compatibility.auth" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.runtime.compatibility.auth"/>
+	<property name="bundleVersion" value="3.2.200.v20110110"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.runtime.compatibility.auth for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110.jar" basedir="${temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.runtime.compatibility.auth @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.runtime.compatibility.auth.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.2.200.v20110110"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110" version="3.2.200.v20110110"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.runtime.compatibility.auth of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.runtime.compatibility.auth.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.runtime.compatibility/build.xml b/generatedScripts/plugins/org.eclipse.core.runtime.compatibility/build.xml
new file mode 100644
index 0000000..8ce9076
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.runtime.compatibility/build.xml
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.runtime.compatibility" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.runtime.compatibility"/>
+	<property name="bundleVersion" value="3.2.100.v20100505"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.runtime.compatibility for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.jar" basedir="${temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.runtime.compatibility @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.update.configurator/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src-runtime/"			/>
+			<src path="src-boot/"			/>
+			<src path="src-model/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src-runtime/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="src-boot/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="src-model/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src-runtime/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="src-boot/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="src-model/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src-runtime/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="src-boot/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="src-model/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.runtime.compatibility.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.runtime.compatibility_3.2.100.v20100505${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.runtime.compatibility_3.2.100.v20100505" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.update.configurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.update.configurator_3.3.100.v20100512/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.2.100.v20100505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505" version="3.2.100.v20100505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.runtime.compatibility of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.runtime.compatibility.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.runtime/build.xml b/generatedScripts/plugins/org.eclipse.core.runtime/build.xml
new file mode 100644
index 0000000..1e7ccac
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.runtime/build.xml
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.runtime" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.runtime"/>
+	<property name="bundleVersion" value="3.7.0.v20110110"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.runtime for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.runtime_3.7.0.v20110110.jar" basedir="${temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.runtime @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.runtime.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.runtime_3.7.0.v20110110${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.runtime_3.7.0.v20110110" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.runtime_3.7.0.v20110110"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.7.0.v20110110"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name=".options"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="plugin.xml"/>
+				<include name="META-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110" version="3.7.0.v20110110"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.runtime_3.7.0.v20110110" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.runtime of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.runtime_3.7.0.v20110110.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.runtime_3.7.0.v20110110.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.runtime.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.runtime_3.7.0.v20110110.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.core.variables/build.xml b/generatedScripts/plugins/org.eclipse.core.variables/build.xml
new file mode 100644
index 0000000..1d69382
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.core.variables/build.xml
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.core.variables" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.core.variables"/>
+	<property name="bundleVersion" value="3.2.500.v20110509"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.core.variables_3.2.500.v20110509"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.core.variables for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.core.variables_3.2.500.v20110509.jar" basedir="${temp.folder}/org.eclipse.core.variables_3.2.500.v20110509" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.core.variables @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.core.variables.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.core.variables_3.2.500.v20110509${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.core.variables_3.2.500.v20110509" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.core.variables_3.2.500.v20110509"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.2.500.v20110509"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="META-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509" version="3.2.500.v20110509"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.core.variables_3.2.500.v20110509" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.core.variables of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.core.variables_3.2.500.v20110509.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.core.variables_3.2.500.v20110509.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.variables" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.core.variables.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.core.variables_3.2.500.v20110509.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf.filetransfer/build.xml b/generatedScripts/plugins/org.eclipse.ecf.filetransfer/build.xml
new file mode 100644
index 0000000..6ccf9e3
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf.filetransfer/build.xml
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf.filetransfer" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf.filetransfer"/>
+	<property name="bundleVersion" value="5.0.0.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf.filetransfer_5.0.0.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf.filetransfer for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf.filetransfer_5.0.0.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf.filetransfer @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.ecf/bin/"/>
+			<pathelement path="../org.eclipse.ecf/@dot"/>
+			<pathelement path="../org.eclipse.ecf.ssl/bin/"/>
+			<pathelement path="../org.eclipse.ecf.ssl/@dot"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/bin/"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/@dot"/>
+			<pathelement path="../org.eclipse.ecf.identity/bin/"/>
+			<pathelement path="../org.eclipse.ecf.identity/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.filetransfer.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf.filetransfer_5.0.0.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf.filetransfer_5.0.0.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.ssl/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.ssl_1.0.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf_3.1.200.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="5.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101" version="5.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.filetransfer_5.0.0.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf.filetransfer of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.filetransfer_5.0.0.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.filetransfer_5.0.0.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.filetransfer" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.filetransfer.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf.filetransfer_5.0.0.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf.identity/build.xml b/generatedScripts/plugins/org.eclipse.ecf.identity/build.xml
new file mode 100644
index 0000000..d6b1542
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf.identity/build.xml
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf.identity" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf.identity"/>
+	<property name="bundleVersion" value="3.1.100.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf.identity for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf.identity_3.1.100.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf.identity @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.identity.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf.identity_3.1.100.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf.identity_3.1.100.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf.identity_3.1.100.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.1.100.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="schema/"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101" version="3.1.100.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.identity_3.1.100.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf.identity of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.identity_3.1.100.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.identity_3.1.100.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.identity.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf.identity_3.1.100.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl/build.xml b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl/build.xml
new file mode 100644
index 0000000..d56ca9d
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl/build.xml
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf.provider.filetransfer.httpclient.ssl" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf.provider.filetransfer.httpclient.ssl"/>
+	<property name="bundleVersion" value="1.0.0.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient.ssl for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf.provider.filetransfer.httpclient.ssl @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer.httpclient/bin/"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer.httpclient/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/jakarta-commons-httpclient-3.1.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/commons-codec.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-logging.jar"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer/bin/"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer/@dot"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer.ssl/bin/"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer.ssl/@dot"/>
+			<pathelement path="../org.eclipse.core.net/bin/"/>
+			<pathelement path="../org.eclipse.core.net/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.ecf/bin/"/>
+			<pathelement path="../org.eclipse.ecf/@dot"/>
+			<pathelement path="../org.eclipse.ecf.ssl/bin/"/>
+			<pathelement path="../org.eclipse.ecf.ssl/@dot"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/bin/"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/@dot"/>
+			<pathelement path="../org.eclipse.ecf.identity/bin/"/>
+			<pathelement path="../org.eclipse.ecf.identity/@dot"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/bin/"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient.ssl.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_64_1.1.0.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf_3.1.200.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_1.1.200.I20110419-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.ssl/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.ssl_1.0.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer.ssl/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_64_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer.httpclient/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net_1.2.100.I20110510-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.filetransfer/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.filetransfer_5.0.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="extraManifests" value="${basedir}/../org.eclipse.ecf.provider.filetransfer.httpclient/META-INF/MANIFEST.MF"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="asl-v20.txt"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101" version="1.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101"/>
+			<param name="extraManifests" value="${basedir}/../org.eclipse.ecf.provider.filetransfer.httpclient/META-INF/MANIFEST.MF"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="asl-v20.txt"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient.ssl of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer.httpclient.ssl" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient.ssl.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient.ssl_1.0.0.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.httpclient/build.xml b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.httpclient/build.xml
new file mode 100644
index 0000000..3ff7b82
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.httpclient/build.xml
@@ -0,0 +1,388 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf.provider.filetransfer.httpclient" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf.provider.filetransfer.httpclient"/>
+	<property name="bundleVersion" value="4.0.0.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf.provider.filetransfer.httpclient @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../../../../../../../../../usr/share/java/jakarta-commons-httpclient-3.1.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/commons-codec.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-logging.jar"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer/bin/"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer/@dot"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer.ssl/bin/"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer.ssl/@dot"/>
+			<pathelement path="../org.eclipse.core.net/bin/"/>
+			<pathelement path="../org.eclipse.core.net/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.ecf/bin/"/>
+			<pathelement path="../org.eclipse.ecf/@dot"/>
+			<pathelement path="../org.eclipse.ecf.ssl/bin/"/>
+			<pathelement path="../org.eclipse.ecf.ssl/@dot"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/bin/"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/@dot"/>
+			<pathelement path="../org.eclipse.ecf.identity/bin/"/>
+			<pathelement path="../org.eclipse.ecf.identity/@dot"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/bin/"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_64_1.1.0.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf_3.1.200.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_1.1.200.I20110419-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.ssl/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.ssl_1.0.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer.ssl/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_64_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net_1.2.100.I20110510-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.filetransfer/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.filetransfer_5.0.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="4.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="asl-v20.txt"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101" version="4.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="asl-v20.txt"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer.httpclient" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.provider.filetransfer.httpclient.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.httpclient_4.0.0.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.ssl/build.xml b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.ssl/build.xml
new file mode 100644
index 0000000..7da5f35
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer.ssl/build.xml
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf.provider.filetransfer.ssl" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf.provider.filetransfer.ssl"/>
+	<property name="bundleVersion" value="1.0.0.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf.provider.filetransfer.ssl for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf.provider.filetransfer.ssl @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer/bin/"/>
+			<pathelement path="../org.eclipse.ecf.provider.filetransfer/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.net/bin/"/>
+			<pathelement path="../org.eclipse.core.net/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.ecf/bin/"/>
+			<pathelement path="../org.eclipse.ecf/@dot"/>
+			<pathelement path="../org.eclipse.ecf.ssl/bin/"/>
+			<pathelement path="../org.eclipse.ecf.ssl/@dot"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/bin/"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/@dot"/>
+			<pathelement path="../org.eclipse.ecf.identity/bin/"/>
+			<pathelement path="../org.eclipse.ecf.identity/@dot"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/bin/"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.provider.filetransfer.ssl.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_64_1.1.0.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net_1.2.100.I20110510-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf_3.1.200.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.filetransfer/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.filetransfer_5.0.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_1.1.200.I20110419-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.ssl/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.ssl_1.0.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_64_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="extraManifests" value="${basedir}/../org.eclipse.ecf.provider.filetransfer/META-INF/MANIFEST.MF"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101" version="1.0.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101"/>
+			<param name="extraManifests" value="${basedir}/../org.eclipse.ecf.provider.filetransfer/META-INF/MANIFEST.MF"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf.provider.filetransfer.ssl of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer.ssl" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.provider.filetransfer.ssl.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer.ssl_1.0.0.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer/build.xml b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer/build.xml
new file mode 100644
index 0000000..e39e521
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf.provider.filetransfer/build.xml
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf.provider.filetransfer" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf.provider.filetransfer"/>
+	<property name="bundleVersion" value="3.2.0.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf.provider.filetransfer for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf.provider.filetransfer @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.net/bin/"/>
+			<pathelement path="../org.eclipse.core.net/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.ecf/bin/"/>
+			<pathelement path="../org.eclipse.ecf/@dot"/>
+			<pathelement path="../org.eclipse.ecf.ssl/bin/"/>
+			<pathelement path="../org.eclipse.ecf.ssl/@dot"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/bin/"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/@dot"/>
+			<pathelement path="../org.eclipse.ecf.identity/bin/"/>
+			<pathelement path="../org.eclipse.ecf.identity/@dot"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/bin/"/>
+			<pathelement path="../org.eclipse.ecf.filetransfer/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.provider.filetransfer.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_64_1.1.0.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net_1.2.100.I20110510-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf_3.1.200.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.filetransfer/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.filetransfer_5.0.0.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_1.1.200.I20110419-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.ssl/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.ssl_1.0.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_64_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.2.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101" version="3.2.0.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf.provider.filetransfer of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.provider.filetransfer" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.provider.filetransfer.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf.provider.filetransfer_3.2.0.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf.ssl/build.xml b/generatedScripts/plugins/org.eclipse.ecf.ssl/build.xml
new file mode 100644
index 0000000..7f6842e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf.ssl/build.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf.ssl" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf.ssl"/>
+	<property name="bundleVersion" value="1.0.100.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf.ssl_1.0.100.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf.ssl for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf.ssl_1.0.100.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf.ssl @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.ecf/bin/"/>
+			<pathelement path="../org.eclipse.ecf/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/bin/"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.ecf.identity/bin/"/>
+			<pathelement path="../org.eclipse.ecf.identity/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.ssl.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf.ssl_1.0.100.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf.ssl_1.0.100.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf_3.1.200.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.100.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="extraManifests" value="${basedir}/../org.eclipse.ecf/META-INF/MANIFEST.MF"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101" version="1.0.100.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101"/>
+			<param name="extraManifests" value="${basedir}/../org.eclipse.ecf/META-INF/MANIFEST.MF"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf.ssl_1.0.100.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf.ssl of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.ssl_1.0.100.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf.ssl_1.0.100.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.ssl" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.ssl.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf.ssl_1.0.100.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.ecf/build.xml b/generatedScripts/plugins/org.eclipse.ecf/build.xml
new file mode 100644
index 0000000..8683744
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.ecf/build.xml
@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.ecf" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.ecf"/>
+	<property name="bundleVersion" value="3.1.200.201105111101"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.ecf_3.1.200.201105111101"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.ecf for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.ecf_3.1.200.201105111101.jar" basedir="${temp.folder}/org.eclipse.ecf_3.1.200.201105111101" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.ecf @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/bin/"/>
+			<pathelement path="../org.eclipse.equinox.concurrent/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.ecf.identity/bin/"/>
+			<pathelement path="../org.eclipse.ecf.identity/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.ecf.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.ecf_3.1.200.201105111101${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.ecf_3.1.200.201105111101" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf.identity/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ecf.identity_3.1.100.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.ecf_3.1.200.201105111101"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.1.200.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="schema/"/>
+				<include name="about.properties"/>
+				<include name="ecf32.png"/>
+				<include name="about.ini"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101" version="3.1.200.201105111101"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+				<include name="about.properties"/>
+				<include name="about.ini"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.ecf_3.1.200.201105111101" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.ecf of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf_3.1.200.201105111101.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.ecf_3.1.200.201105111101.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ecf" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.ecf.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.ecf_3.1.200.201105111101.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.app/build.xml b/generatedScripts/plugins/org.eclipse.equinox.app/build.xml
new file mode 100644
index 0000000..cf527ac
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.app/build.xml
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.app" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.app"/>
+	<property name="bundleVersion" value="1.3.100.v20110321"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${OSGi/Minimum-1.2}"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.app for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.app_1.3.100.v20110321.jar" basedir="${temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.app @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.app.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.app_1.3.100.v20110321${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.app_1.3.100.v20110321" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.app_1.3.100.v20110321"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.3.100.v20110321"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="plugin.xml"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321" version="1.3.100.v20110321"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.app_1.3.100.v20110321" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.app of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.app_1.3.100.v20110321.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.app_1.3.100.v20110321.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.app.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.app_1.3.100.v20110321.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.common/build.xml b/generatedScripts/plugins/org.eclipse.equinox.common/build.xml
new file mode 100644
index 0000000..0747450
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.common/build.xml
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.common" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.common"/>
+	<property name="bundleVersion" value="3.6.0.v20110506"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.common for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.common_3.6.0.v20110506.jar" basedir="${temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.common @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.common.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.common_3.6.0.v20110506${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.common_3.6.0.v20110506" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.common_3.6.0.v20110506"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.6.0.v20110506"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506" version="3.6.0.v20110506"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.common_3.6.0.v20110506" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.common of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.common_3.6.0.v20110506.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.common_3.6.0.v20110506.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.common.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.common_3.6.0.v20110506.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.concurrent/build.xml b/generatedScripts/plugins/org.eclipse.equinox.concurrent/build.xml
new file mode 100644
index 0000000..8b648c4
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.concurrent/build.xml
@@ -0,0 +1,297 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.concurrent" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.concurrent"/>
+	<property name="bundleVersion" value="1.0.200.v20110502"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.concurrent_1.0.200.v20110502"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.concurrent for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.concurrent_1.0.200.v20110502.jar" basedir="${temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.concurrent @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.concurrent.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.concurrent_1.0.200.v20110502${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.concurrent_1.0.200.v20110502" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.200.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502" version="1.0.200.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="META-INF/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.concurrent_1.0.200.v20110502" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.concurrent of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.concurrent_1.0.200.v20110502.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.concurrent_1.0.200.v20110502.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.concurrent" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.concurrent.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.concurrent_1.0.200.v20110502.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.frameworkadmin.equinox/build.xml b/generatedScripts/plugins/org.eclipse.equinox.frameworkadmin.equinox/build.xml
new file mode 100644
index 0000000..e34d007
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.frameworkadmin.equinox/build.xml
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.frameworkadmin.equinox" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.frameworkadmin.equinox"/>
+	<property name="bundleVersion" value="1.0.300.v20110506"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.frameworkadmin.equinox for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506.jar" basedir="${temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.frameworkadmin.equinox @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.frameworkadmin.equinox.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.300.v20110506"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506" version="1.0.300.v20110506"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.frameworkadmin.equinox of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin.equinox" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.frameworkadmin.equinox.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.frameworkadmin/build.xml b/generatedScripts/plugins/org.eclipse.equinox.frameworkadmin/build.xml
new file mode 100644
index 0000000..921e59e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.frameworkadmin/build.xml
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.frameworkadmin" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.frameworkadmin"/>
+	<property name="bundleVersion" value="2.0.0.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.frameworkadmin for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.frameworkadmin @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.frameworkadmin.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.0.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955" version="2.0.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.frameworkadmin of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.frameworkadmin.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.http.jetty_2.0.0/build.xml b/generatedScripts/plugins/org.eclipse.equinox.http.jetty_2.0.0/build.xml
new file mode 100644
index 0000000..5672067
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.http.jetty_2.0.0/build.xml
@@ -0,0 +1,320 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.http.jetty" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.http.jetty"/>
+	<property name="bundleVersion" value="2.0.100.v20110502"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.http.jetty_2.0.100.v20110502"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.http.jetty for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.http.jetty_2.0.100.v20110502.jar" basedir="${temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.http.jetty @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.equinox.http.servlet/bin/"/>
+			<pathelement path="../org.eclipse.equinox.http.servlet/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/jetty/lib/jetty-util-6.1.26.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/jetty/lib/jetty-6.1.26.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/eclipse/plugins/org.apache.jasper_5.5.17.v200706111724.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-jsp-2.1-api.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-el-1.0.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-antlr.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bcel.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bsf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-log4j.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-oro.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-regexp.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-resolver.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-xalan2.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-net.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jai.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-javamail.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jdepend.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jmf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jsch.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit4.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-netrexx.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-swing.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-testutil.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.http.jetty.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.http.jetty_2.0.100.v20110502${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.http.jetty_2.0.100.v20110502" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.http.servlet/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.http.servlet_1.1.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.0.100.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="OSGI-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502" version="2.0.100.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.http.jetty_2.0.100.v20110502" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.http.jetty of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.http.jetty_2.0.100.v20110502.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.http.jetty_2.0.100.v20110502.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.http.jetty_2.0.0" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.http.jetty.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.http.jetty_2.0.100.v20110502.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.http.servlet/build.xml b/generatedScripts/plugins/org.eclipse.equinox.http.servlet/build.xml
new file mode 100644
index 0000000..384c556
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.http.servlet/build.xml
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.http.servlet" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.http.servlet"/>
+	<property name="bundleVersion" value="1.1.200.v20110502"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.http.servlet_1.1.200.v20110502"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.http.servlet for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.http.servlet_1.1.200.v20110502.jar" basedir="${temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.http.servlet @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.http.servlet.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.http.servlet_1.1.200.v20110502${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.http.servlet_1.1.200.v20110502" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.1.200.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502" version="1.1.200.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.http.servlet_1.1.200.v20110502" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.http.servlet of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.http.servlet_1.1.200.v20110502.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.http.servlet_1.1.200.v20110502.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.http.servlet" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.http.servlet.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.http.servlet_1.1.200.v20110502.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.launcher/build.xml b/generatedScripts/plugins/org.eclipse.equinox.launcher/build.xml
new file mode 100644
index 0000000..e62bc6a
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.launcher/build.xml
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.launcher" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.launcher"/>
+	<property name="bundleVersion" value="1.2.0.v20110502"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${OSGi/Minimum-1.2}"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.launcher_1.2.0.v20110502"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.launcher for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.launcher_1.2.0.v20110502.jar" basedir="${temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.launcher @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.launcher.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.launcher_1.2.0.v20110502${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.launcher_1.2.0.v20110502" log="${compilation.prereq.log}">
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.2.0.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="launcher.properties"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502" version="1.2.0.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.launcher_1.2.0.v20110502" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.launcher of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.launcher_1.2.0.v20110502.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.launcher_1.2.0.v20110502.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.launcher" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.launcher.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.launcher_1.2.0.v20110502.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.artifact.repository/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.artifact.repository/build.xml
new file mode 100644
index 0000000..8c37805
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.artifact.repository/build.xml
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.artifact.repository" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.artifact.repository"/>
+	<property name="bundleVersion" value="1.1.100.v20110505"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.artifact.repository for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.artifact.repository @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.artifact.repository.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.1.100.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505" version="1.1.100.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.artifact.repository of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.artifact.repository" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.artifact.repository.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.console/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.console/build.xml
new file mode 100644
index 0000000..a7a050f
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.console/build.xml
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.console" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.console"/>
+	<property name="bundleVersion" value="1.0.300.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.console for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.console @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.console.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.console_1.0.300.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.console_1.0.300.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.300.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955" version="1.0.300.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.console of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.console" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.console.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.console_1.0.300.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.core/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.core/build.xml
new file mode 100644
index 0000000..83bd145
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.core/build.xml
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.core" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.core"/>
+	<property name="bundleVersion" value="2.1.0.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.core for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.core @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.core.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.core_2.1.0.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.core_2.1.0.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.1.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955" version="2.1.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.core of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.core.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.director.app/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.director.app/build.xml
new file mode 100644
index 0000000..8f6025d
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.director.app/build.xml
@@ -0,0 +1,503 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.director.app" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.director.app"/>
+	<property name="bundleVersion" value="1.0.300.v20110505"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.director.app for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.director.app @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="ant_tasks/director-ant.jar.nestedJars">
+	</target>
+	<target name="ant_tasks/director-ant.jar" depends="init,ant_tasks/director-ant.jar.nestedJars" unless="ant_tasks/director-ant.jar" description="Create jar: org.eclipse.equinox.p2.director.app ant_tasks/director-ant.jar.">
+		<delete dir="${temp.folder}/ant_tasks/director-ant.jar.bin"/>
+		<mkdir dir="${temp.folder}/ant_tasks/director-ant.jar.bin"/>
+		<path id="ant_tasks/director-ant.jar.classpath">
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+			<pathelement path="bin/"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.director.app_1.0.300.v20110505/bin/"/>
+			<pathelement path="${build.result.folder}/@dot"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.director.app_1.0.300.v20110505/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-antlr.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bcel.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bsf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-log4j.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-oro.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-regexp.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-resolver.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-xalan2.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-net.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jai.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-javamail.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jdepend.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jmf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jsch.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit4.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-netrexx.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-swing.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-testutil.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/ant_tasks/director-ant.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="ant_tasks/director-ant.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.ant_tasks_director-ant.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/ant_tasks/director-ant.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/ant_tasks/director-ant.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<jar destfile="${build.result.folder}/ant_tasks/director-ant.jar" basedir="${temp.folder}/ant_tasks/director-ant.jar.bin"/>
+		<delete dir="${temp.folder}/ant_tasks/director-ant.jar.bin"/>
+	</target>
+
+	<target name="ant_tasks/director-antsrc.zip" depends="init" unless="ant_tasks/director-antsrc.zip">
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<antcall target="zip.ant_tasks/director-antsrc.zip"/>
+	</target>
+	<target name="zip.ant_tasks/director-antsrc.zip">
+		<zip destfile="${build.result.folder}/ant_tasks/director-antsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.ant_tasks/director-antsrc.zip">
+		<copy todir="${source.destination.folder}/ant_tasks/director-antsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.director.app.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<available property="ant_tasks/director-ant.jar" file="${build.result.folder}/ant_tasks/director-ant.jar"/>
+		<antcall target="ant_tasks/director-ant.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.director.app_1.0.300.v20110505${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.director.app_1.0.300.v20110505" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<available property="ant_tasks/director-antsrc.zip" file="${build.result.folder}/ant_tasks/director-antsrc.zip"/>
+		<antcall target="ant_tasks/director-antsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.300.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/ant_tasks/director-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="ant_tasks/director-ant.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="ant_tasks/director-ant.jar"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505" version="1.0.300.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505/ant_tasks/director-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505/ant_tasks"/>
+		<copy file="${build.result.folder}/ant_tasks/director-antsrc.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505/ant_tasks" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.ant_tasks/director-antsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505/ant_tasks"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505/ant_tasks" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/ant_tasks">
+				<include name="director-ant.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.director.app of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${build.result.folder}/ant_tasks/director-ant.jar"/>
+		<delete file="${build.result.folder}/ant_tasks/director-antsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director.app" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.director.app.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.director/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.director/build.xml
new file mode 100644
index 0000000..73873d3
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.director/build.xml
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.director" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.director"/>
+	<property name="bundleVersion" value="2.1.0.v20110504-1715"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.director for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.director @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.director.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.director_2.1.0.v20110504-1715${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.director_2.1.0.v20110504-1715" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.1.0.v20110504-1715"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="OSGI-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715" version="2.1.0.v20110504-1715"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.director of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.director.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.engine/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.engine/build.xml
new file mode 100644
index 0000000..fa8150e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.engine/build.xml
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.engine" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.engine"/>
+	<property name="bundleVersion" value="2.1.0.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.engine for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.engine_2.1.0.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.engine @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.engine.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.engine_2.1.0.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.engine_2.1.0.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.1.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="OSGI-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name=".options"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510" version="2.1.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.engine_2.1.0.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.engine of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.engine_2.1.0.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.engine_2.1.0.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.engine.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.engine_2.1.0.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.garbagecollector/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.garbagecollector/build.xml
new file mode 100644
index 0000000..d293a07
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.garbagecollector/build.xml
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.garbagecollector" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.garbagecollector"/>
+	<property name="bundleVersion" value="1.0.200.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.garbagecollector for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.garbagecollector @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.garbagecollector.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.200.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="schema/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="OSGI-INF/garbagecollector.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510" version="1.0.200.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.garbagecollector of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.garbagecollector" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.garbagecollector.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.jarprocessor/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.jarprocessor/build.xml
new file mode 100644
index 0000000..b30716e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.jarprocessor/build.xml
@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.jarprocessor" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.jarprocessor"/>
+	<property name="bundleVersion" value="1.0.200.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.jarprocessor for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.jarprocessor @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="lib/jarprocessor-ant.jar.nestedJars">
+	</target>
+	<target name="lib/jarprocessor-ant.jar" depends="init,lib/jarprocessor-ant.jar.nestedJars" unless="lib/jarprocessor-ant.jar" description="Create jar: org.eclipse.equinox.p2.jarprocessor lib/jarprocessor-ant.jar.">
+		<delete dir="${temp.folder}/lib/jarprocessor-ant.jar.bin"/>
+		<mkdir dir="${temp.folder}/lib/jarprocessor-ant.jar.bin"/>
+		<path id="lib/jarprocessor-ant.jar.classpath">
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="bin/"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/bin/"/>
+			<pathelement path="${build.result.folder}/@dot"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/lib/jarprocessor-ant.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="lib/jarprocessor-ant.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.lib_jarprocessor-ant.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/lib/jarprocessor-ant.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/lib/jarprocessor-ant.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/lib"/>
+		<jar destfile="${build.result.folder}/lib/jarprocessor-ant.jar" basedir="${temp.folder}/lib/jarprocessor-ant.jar.bin"/>
+		<delete dir="${temp.folder}/lib/jarprocessor-ant.jar.bin"/>
+	</target>
+
+	<target name="lib/jarprocessor-antsrc.zip" depends="init" unless="lib/jarprocessor-antsrc.zip">
+		<mkdir dir="${build.result.folder}/lib"/>
+		<antcall target="zip.lib/jarprocessor-antsrc.zip"/>
+	</target>
+	<target name="zip.lib/jarprocessor-antsrc.zip">
+		<zip destfile="${build.result.folder}/lib/jarprocessor-antsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.lib/jarprocessor-antsrc.zip">
+		<copy todir="${source.destination.folder}/lib/jarprocessor-antsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.jarprocessor.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<available property="lib/jarprocessor-ant.jar" file="${build.result.folder}/lib/jarprocessor-ant.jar"/>
+		<antcall target="lib/jarprocessor-ant.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<available property="lib/jarprocessor-antsrc.zip" file="${build.result.folder}/lib/jarprocessor-antsrc.zip"/>
+		<antcall target="lib/jarprocessor-antsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.200.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/lib/jarprocessor-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="lib/jarprocessor-ant.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="plugin.xml"/>
+				<include name="lib/jarprocessor-ant.jar"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" version="1.0.200.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/lib/jarprocessor-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/lib"/>
+		<copy file="${build.result.folder}/lib/jarprocessor-antsrc.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/lib" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.lib/jarprocessor-antsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/lib"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/lib" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/lib">
+				<include name="jarprocessor-ant.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.jarprocessor of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${build.result.folder}/lib/jarprocessor-ant.jar"/>
+		<delete file="${build.result.folder}/lib/jarprocessor-antsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.jarprocessor.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.metadata.repository/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.metadata.repository/build.xml
new file mode 100644
index 0000000..35b68f0
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.metadata.repository/build.xml
@@ -0,0 +1,442 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.metadata.repository" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.metadata.repository"/>
+	<property name="bundleVersion" value="1.2.0.v20110505"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.metadata.repository for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.metadata.repository @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="ant_tasks/metadataRepository-ant.jar.nestedJars">
+	</target>
+	<target name="ant_tasks/metadataRepository-ant.jar" depends="init,ant_tasks/metadataRepository-ant.jar.nestedJars" unless="ant_tasks/metadataRepository-ant.jar" description="Create jar: org.eclipse.equinox.p2.metadata.repository ant_tasks/metadataRepository-ant.jar.">
+		<delete dir="${temp.folder}/ant_tasks/metadataRepository-ant.jar.bin"/>
+		<mkdir dir="${temp.folder}/ant_tasks/metadataRepository-ant.jar.bin"/>
+		<path id="ant_tasks/metadataRepository-ant.jar.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="bin/"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/bin/"/>
+			<pathelement path="${build.result.folder}/@dot"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/ant_tasks/metadataRepository-ant.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="ant_tasks/metadataRepository-ant.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.ant_tasks_metadataRepository-ant.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/ant_tasks/metadataRepository-ant.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/ant_tasks/metadataRepository-ant.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<jar destfile="${build.result.folder}/ant_tasks/metadataRepository-ant.jar" basedir="${temp.folder}/ant_tasks/metadataRepository-ant.jar.bin"/>
+		<delete dir="${temp.folder}/ant_tasks/metadataRepository-ant.jar.bin"/>
+	</target>
+
+	<target name="ant_tasks/metadataRepository-antsrc.zip" depends="init" unless="ant_tasks/metadataRepository-antsrc.zip">
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<antcall target="zip.ant_tasks/metadataRepository-antsrc.zip"/>
+	</target>
+	<target name="zip.ant_tasks/metadataRepository-antsrc.zip">
+		<zip destfile="${build.result.folder}/ant_tasks/metadataRepository-antsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.ant_tasks/metadataRepository-antsrc.zip">
+		<copy todir="${source.destination.folder}/ant_tasks/metadataRepository-antsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.metadata.repository.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<available property="ant_tasks/metadataRepository-ant.jar" file="${build.result.folder}/ant_tasks/metadataRepository-ant.jar"/>
+		<antcall target="ant_tasks/metadataRepository-ant.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<available property="ant_tasks/metadataRepository-antsrc.zip" file="${build.result.folder}/ant_tasks/metadataRepository-antsrc.zip"/>
+		<antcall target="ant_tasks/metadataRepository-antsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.2.0.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/ant_tasks/metadataRepository-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="ant_tasks/metadataRepository-ant.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="ant_tasks/metadataRepository-ant.jar"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" version="1.2.0.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/ant_tasks/metadataRepository-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/ant_tasks"/>
+		<copy file="${build.result.folder}/ant_tasks/metadataRepository-antsrc.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/ant_tasks" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.ant_tasks/metadataRepository-antsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/ant_tasks"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/ant_tasks" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/ant_tasks">
+				<include name="metadataRepository-ant.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.metadata.repository of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${build.result.folder}/ant_tasks/metadataRepository-ant.jar"/>
+		<delete file="${build.result.folder}/ant_tasks/metadataRepository-antsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.metadata.repository.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.metadata/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.metadata/build.xml
new file mode 100644
index 0000000..3f16dd2
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.metadata/build.xml
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.metadata" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.metadata"/>
+	<property name="bundleVersion" value="2.1.0.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.metadata for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.metadata @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.metadata.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.metadata_2.1.0.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.metadata_2.1.0.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.1.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510" version="2.1.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.metadata of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.metadata.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.publisher.eclipse/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.publisher.eclipse/build.xml
new file mode 100644
index 0000000..624b88d
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.publisher.eclipse/build.xml
@@ -0,0 +1,516 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.publisher.eclipse" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.publisher.eclipse"/>
+	<property name="bundleVersion" value="1.0.0.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.publisher.eclipse for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="pdepublishing.jar.nestedJars">
+	</target>
+	<target name="pdepublishing.jar" depends="init,pdepublishing.jar.nestedJars" unless="pdepublishing.jar" description="Create jar: org.eclipse.equinox.p2.publisher.eclipse pdepublishing.jar.">
+		<delete dir="${temp.folder}/pdepublishing.jar.bin"/>
+		<mkdir dir="${temp.folder}/pdepublishing.jar.bin"/>
+		<path id="pdepublishing.jar.classpath">
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/pdepublishing.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="pdepublishing.jar.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.pdepublishing.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/pdepublishing.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/pdepublishing.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/pdepublishing.jar" basedir="${temp.folder}/pdepublishing.jar.bin"/>
+		<delete dir="${temp.folder}/pdepublishing.jar.bin"/>
+	</target>
+
+	<target name="pdepublishingsrc.zip" depends="init" unless="pdepublishingsrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.pdepublishingsrc.zip"/>
+	</target>
+	<target name="zip.pdepublishingsrc.zip">
+		<zip destfile="${build.result.folder}/pdepublishingsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.pdepublishingsrc.zip">
+		<copy todir="${source.destination.folder}/pdepublishingsrc" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="ant_tasks/pdepublishing-ant.jar.nestedJars">
+	</target>
+	<target name="ant_tasks/pdepublishing-ant.jar" depends="init,ant_tasks/pdepublishing-ant.jar.nestedJars" unless="ant_tasks/pdepublishing-ant.jar" description="Create jar: org.eclipse.equinox.p2.publisher.eclipse ant_tasks/pdepublishing-ant.jar.">
+		<delete dir="${temp.folder}/ant_tasks/pdepublishing-ant.jar.bin"/>
+		<mkdir dir="${temp.folder}/ant_tasks/pdepublishing-ant.jar.bin"/>
+		<path id="ant_tasks/pdepublishing-ant.jar.classpath">
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="bin/"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/bin/"/>
+			<pathelement path="${build.result.folder}/pdepublishing.jar"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/pdepublishing.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-antlr.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bcel.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bsf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-log4j.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-oro.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-regexp.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-resolver.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-xalan2.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-net.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jai.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-javamail.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jdepend.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jmf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jsch.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit4.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-netrexx.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-swing.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-testutil.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/ant_tasks/pdepublishing-ant.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="ant_tasks/pdepublishing-ant.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.ant_tasks_pdepublishing-ant.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/ant_tasks/pdepublishing-ant.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/ant_tasks/pdepublishing-ant.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<jar destfile="${build.result.folder}/ant_tasks/pdepublishing-ant.jar" basedir="${temp.folder}/ant_tasks/pdepublishing-ant.jar.bin"/>
+		<delete dir="${temp.folder}/ant_tasks/pdepublishing-ant.jar.bin"/>
+	</target>
+
+	<target name="ant_tasks/pdepublishing-antsrc.zip" depends="init" unless="ant_tasks/pdepublishing-antsrc.zip">
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<antcall target="zip.ant_tasks/pdepublishing-antsrc.zip"/>
+	</target>
+	<target name="zip.ant_tasks/pdepublishing-antsrc.zip">
+		<zip destfile="${build.result.folder}/ant_tasks/pdepublishing-antsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.ant_tasks/pdepublishing-antsrc.zip">
+		<copy todir="${source.destination.folder}/ant_tasks/pdepublishing-antsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.publisher.eclipse.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="pdepublishing.jar" file="${build.result.folder}/pdepublishing.jar"/>
+		<antcall target="pdepublishing.jar"/>
+		<available property="ant_tasks/pdepublishing-ant.jar" file="${build.result.folder}/ant_tasks/pdepublishing-ant.jar"/>
+		<antcall target="ant_tasks/pdepublishing-ant.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin.equinox/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.artifact.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="pdepublishingsrc.zip" file="${build.result.folder}/pdepublishingsrc.zip"/>
+		<antcall target="pdepublishingsrc.zip"/>
+		<available property="ant_tasks/pdepublishing-antsrc.zip" file="${build.result.folder}/ant_tasks/pdepublishing-antsrc.zip"/>
+		<antcall target="ant_tasks/pdepublishing-antsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/pdepublishing.jar:${build.result.folder}/ant_tasks/pdepublishing-ant.jar"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="pdepublishing.jar"/>
+				<include name="ant_tasks/pdepublishing-ant.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.properties"/>
+				<include name="ant_tasks/pdepublishing-ant.jar"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510" version="1.0.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/pdepublishing.jar:${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/ant_tasks/pdepublishing-ant.jar"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/ant_tasks"/>
+		<copy file="${build.result.folder}/ant_tasks/pdepublishing-antsrc.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/ant_tasks" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510"/>
+		<copy file="${build.result.folder}/pdepublishingsrc.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.ant_tasks/pdepublishing-antsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.pdepublishingsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/ant_tasks"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/ant_tasks" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/ant_tasks">
+				<include name="pdepublishing-ant.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}">
+				<include name="pdepublishing.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.publisher.eclipse of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/ant_tasks/pdepublishing-ant.jar"/>
+		<delete file="${build.result.folder}/ant_tasks/pdepublishing-antsrc.zip"/>
+		<delete file="${build.result.folder}/pdepublishing.jar"/>
+		<delete file="${build.result.folder}/pdepublishingsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher.eclipse" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.publisher.eclipse.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.publisher/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.publisher/build.xml
new file mode 100644
index 0000000..94ea7a2
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.publisher/build.xml
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.publisher" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.publisher"/>
+	<property name="bundleVersion" value="1.2.0.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.publisher for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.publisher @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.publisher.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.publisher_1.2.0.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.publisher_1.2.0.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.artifact.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.2.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="profiles/"/>
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510" version="1.2.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.publisher of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.publisher.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.repository.tools/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.repository.tools/build.xml
new file mode 100644
index 0000000..1942b9c
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.repository.tools/build.xml
@@ -0,0 +1,527 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.repository.tools" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.repository.tools"/>
+	<property name="bundleVersion" value="2.0.100.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.repository.tools for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.repository.tools @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/pdepublishing.jar"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/lib/jarprocessor-ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="lib/repository-tools-ant.jar.nestedJars">
+	</target>
+	<target name="lib/repository-tools-ant.jar" depends="init,lib/repository-tools-ant.jar.nestedJars" unless="lib/repository-tools-ant.jar" description="Create jar: org.eclipse.equinox.p2.repository.tools lib/repository-tools-ant.jar.">
+		<delete dir="${temp.folder}/lib/repository-tools-ant.jar.bin"/>
+		<mkdir dir="${temp.folder}/lib/repository-tools-ant.jar.bin"/>
+		<path id="lib/repository-tools-ant.jar.classpath">
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/pdepublishing.jar"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="bin/"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/bin/"/>
+			<pathelement path="${build.result.folder}/@dot"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/lib/jarprocessor-ant.jar"/>
+			<pathelement path="../org.apache.ant/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/lib/repository-tools-ant.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="lib/repository-tools-ant.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.lib_repository-tools-ant.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/lib/repository-tools-ant.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/lib/repository-tools-ant.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/lib"/>
+		<jar destfile="${build.result.folder}/lib/repository-tools-ant.jar" basedir="${temp.folder}/lib/repository-tools-ant.jar.bin"/>
+		<delete dir="${temp.folder}/lib/repository-tools-ant.jar.bin"/>
+	</target>
+
+	<target name="lib/repository-tools-antsrc.zip" depends="init" unless="lib/repository-tools-antsrc.zip">
+		<mkdir dir="${build.result.folder}/lib"/>
+		<antcall target="zip.lib/repository-tools-antsrc.zip"/>
+	</target>
+	<target name="zip.lib/repository-tools-antsrc.zip">
+		<zip destfile="${build.result.folder}/lib/repository-tools-antsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.lib/repository-tools-antsrc.zip">
+		<copy todir="${source.destination.folder}/lib/repository-tools-antsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.repository.tools.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<available property="lib/repository-tools-ant.jar" file="${build.result.folder}/lib/repository-tools-ant.jar"/>
+		<antcall target="lib/repository-tools-ant.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher.eclipse/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin.equinox/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.artifact.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<available property="lib/repository-tools-antsrc.zip" file="${build.result.folder}/lib/repository-tools-antsrc.zip"/>
+		<antcall target="lib/repository-tools-antsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.0.100.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/lib/repository-tools-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="lib/repository-tools-ant.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="lib/*.jar"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" version="2.0.100.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/lib/repository-tools-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/lib"/>
+		<copy file="${build.result.folder}/lib/repository-tools-antsrc.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/lib" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.lib/repository-tools-antsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/lib"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/lib" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/lib">
+				<include name="repository-tools-ant.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.repository.tools of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/lib/repository-tools-ant.jar"/>
+		<delete file="${build.result.folder}/lib/repository-tools-antsrc.zip"/>
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository.tools" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.repository.tools.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.repository/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.repository/build.xml
new file mode 100644
index 0000000..14a5ccc
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.repository/build.xml
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.repository" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.repository"/>
+	<property name="bundleVersion" value="2.1.0.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.repository for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.repository_2.1.0.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.repository @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.repository.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.repository_2.1.0.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.repository_2.1.0.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.1.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="OSGI-INF/cacheManager.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510" version="2.1.0.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.repository_2.1.0.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.repository of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.repository_2.1.0.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.repository_2.1.0.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.repository.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.repository_2.1.0.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/build.xml
new file mode 100644
index 0000000..559a2c5
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.touchpoint.eclipse/build.xml
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.touchpoint.eclipse" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.touchpoint.eclipse"/>
+	<property name="bundleVersion" value="2.1.0.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.touchpoint.eclipse for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.touchpoint.eclipse @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.garbagecollector/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.garbagecollector/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/pdepublishing.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.touchpoint.eclipse.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher.eclipse/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.artifact.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin.equinox/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.garbagecollector/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.garbagecollector_1.0.200.v20110510/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.1.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955" version="2.1.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.touchpoint.eclipse of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.touchpoint.eclipse" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.touchpoint.eclipse.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.eclipse_2.1.0.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.touchpoint.natives/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.touchpoint.natives/build.xml
new file mode 100644
index 0000000..fff2fd0
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.touchpoint.natives/build.xml
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.touchpoint.natives" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.touchpoint.natives"/>
+	<property name="bundleVersion" value="1.0.300.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.touchpoint.natives for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.touchpoint.natives @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.touchpoint.natives.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.300.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955" version="1.0.300.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.touchpoint.natives of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.touchpoint.natives" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.touchpoint.natives.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.touchpoint.natives_1.0.300.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.p2.updatesite/build.xml b/generatedScripts/plugins/org.eclipse.equinox.p2.updatesite/build.xml
new file mode 100644
index 0000000..2d49d09
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.p2.updatesite/build.xml
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.p2.updatesite" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.p2.updatesite"/>
+	<property name="bundleVersion" value="1.0.300.v20110510"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.p2.updatesite for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510.jar" basedir="${temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.p2.updatesite @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/pdepublishing.jar"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.p2.updatesite.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.p2.updatesite_1.0.300.v20110510${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.p2.updatesite_1.0.300.v20110510" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher.eclipse/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.artifact.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin.equinox/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.300.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510" version="1.0.300.v20110510"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.p2.updatesite of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.updatesite" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.p2.updatesite.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.preferences/build.xml b/generatedScripts/plugins/org.eclipse.equinox.preferences/build.xml
new file mode 100644
index 0000000..c4c9aeb
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.preferences/build.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.preferences" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.preferences"/>
+	<property name="bundleVersion" value="3.4.0.v20110502"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.preferences for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.preferences_3.4.0.v20110502.jar" basedir="${temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.preferences @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.preferences.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.preferences_3.4.0.v20110502${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.preferences_3.4.0.v20110502" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.4.0.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name=".options"/>
+				<include name="about.html"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502" version="3.4.0.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.preferences_3.4.0.v20110502" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.preferences of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.preferences_3.4.0.v20110502.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.preferences_3.4.0.v20110502.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.preferences.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.preferences_3.4.0.v20110502.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.registry/build.xml b/generatedScripts/plugins/org.eclipse.equinox.registry/build.xml
new file mode 100644
index 0000000..9e8f3f7
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.registry/build.xml
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.registry" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.registry"/>
+	<property name="bundleVersion" value="3.5.100.v20110502"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.registry for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.registry_3.5.100.v20110502.jar" basedir="${temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.registry @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="runtime_registry_compatibility.jar"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.equinox.registry_3.5.100.v20110502/runtime_registry_compatibility.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.registry.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.registry_3.5.100.v20110502${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.registry_3.5.100.v20110502" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.registry_3.5.100.v20110502"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.5.100.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name=".options"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="about_files/"/>
+				<include name="plugin.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502" version="3.5.100.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="about_files/"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.registry_3.5.100.v20110502" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.registry of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.registry_3.5.100.v20110502.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.registry_3.5.100.v20110502.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.registry.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.registry_3.5.100.v20110502.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.security/build.xml b/generatedScripts/plugins/org.eclipse.equinox.security/build.xml
new file mode 100644
index 0000000..4a5dbf8
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.security/build.xml
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.security" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.security"/>
+	<property name="bundleVersion" value="1.1.0.v20110502"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.security for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.security_1.1.0.v20110502.jar" basedir="${temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.security @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.security.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.security_1.1.0.v20110502${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.security_1.1.0.v20110502" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.security_1.1.0.v20110502"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.1.0.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.xml"/>
+				<include name="META-INF/"/>
+				<include name="schema/"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name=".options"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502" version="1.1.0.v20110502"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="schema/"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.security_1.1.0.v20110502" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.security of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.security_1.1.0.v20110502.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.security_1.1.0.v20110502.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.security.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.security_1.1.0.v20110502.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/build.xml b/generatedScripts/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/build.xml
new file mode 100644
index 0000000..d3eb03e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/build.xml
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.simpleconfigurator.manipulator" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.simpleconfigurator.manipulator"/>
+	<property name="bundleVersion" value="2.0.0.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.simpleconfigurator.manipulator for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.simpleconfigurator.manipulator @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.simpleconfigurator.manipulator.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin.equinox/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="2.0.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955" version="2.0.0.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.simpleconfigurator.manipulator of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator.manipulator" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.simpleconfigurator.manipulator.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.equinox.simpleconfigurator/build.xml b/generatedScripts/plugins/org.eclipse.equinox.simpleconfigurator/build.xml
new file mode 100644
index 0000000..1191fa4
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.equinox.simpleconfigurator/build.xml
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.equinox.simpleconfigurator" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.equinox.simpleconfigurator"/>
+	<property name="bundleVersion" value="1.0.200.v20110502-1955"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.equinox.simpleconfigurator for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955.jar" basedir="${temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.equinox.simpleconfigurator @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.equinox.simpleconfigurator.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="1.0.200.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955" version="1.0.200.v20110502-1955"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.equinox.simpleconfigurator of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.equinox.simpleconfigurator.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.help.base/build.xml b/generatedScripts/plugins/org.eclipse.help.base/build.xml
new file mode 100644
index 0000000..b62ff3e
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.help.base/build.xml
@@ -0,0 +1,552 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.help.base" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.help.base"/>
+	<property name="bundleVersion" value="3.6.0.v20110506"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.help.base_3.6.0.v20110506"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.help.base for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.help.base_3.6.0.v20110506.jar" basedir="${temp.folder}/org.eclipse.help.base_3.6.0.v20110506" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+		<mkdir dir="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208"/>
+		<unzip src="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar" dest="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208" overwrite="false">
+			<patternset includes="icu-data.jar"/>
+		</unzip>
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.help.base @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208/icu-data.jar"/>
+			<pathelement path="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar"/>
+			<pathelement path="../org.eclipse.equinox.http.jetty_2.0.0/bin/"/>
+			<pathelement path="../org.eclipse.equinox.http.jetty_2.0.0/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.equinox.http.servlet/bin/"/>
+			<pathelement path="../org.eclipse.equinox.http.servlet/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/jetty/lib/jetty-util-6.1.26.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/jetty/lib/jetty-6.1.26.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/eclipse/plugins/org.apache.jasper_5.5.17.v200706111724.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-jsp-2.1-api.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-el-1.0.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-antlr.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bcel.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bsf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-log4j.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-oro.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-regexp.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-resolver.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-xalan2.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-net.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jai.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-javamail.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jdepend.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jmf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jsch.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit4.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-netrexx.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-swing.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-testutil.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.apache.lucene"/>
+			<pathelement path="../org.apache.lucene/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/lucene.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/lucene-contrib/lucene-analyzers.jar"/>
+			<pathelement path="../org.eclipse.ant.core/@dot"/>
+			<pathelement path="../org.eclipse.core.variables/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.help/@dot"/>
+			<pathelement path="../org.eclipse.core.expressions/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<src path="src_demo/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="src_demo/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="src_demo/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="src_demo/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="ant_tasks/helpbase-ant.jar.nestedJars">
+		<mkdir dir="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208"/>
+		<unzip src="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar" dest="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208" overwrite="false">
+			<patternset includes="icu-data.jar"/>
+		</unzip>
+	</target>
+	<target name="ant_tasks/helpbase-ant.jar" depends="init,ant_tasks/helpbase-ant.jar.nestedJars" unless="ant_tasks/helpbase-ant.jar" description="Create jar: org.eclipse.help.base ant_tasks/helpbase-ant.jar.">
+		<delete dir="${temp.folder}/ant_tasks/helpbase-ant.jar.bin"/>
+		<mkdir dir="${temp.folder}/ant_tasks/helpbase-ant.jar.bin"/>
+		<path id="ant_tasks/helpbase-ant.jar.classpath">
+			<pathelement path="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208/icu-data.jar"/>
+			<pathelement path="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar"/>
+			<pathelement path="../org.eclipse.equinox.http.jetty_2.0.0/bin/"/>
+			<pathelement path="../org.eclipse.equinox.http.jetty_2.0.0/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.equinox.http.servlet/bin/"/>
+			<pathelement path="../org.eclipse.equinox.http.servlet/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/jetty/lib/jetty-util-6.1.26.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/jetty/lib/jetty-6.1.26.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/eclipse/plugins/org.apache.jasper_5.5.17.v200706111724.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-jsp-2.1-api.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-el-1.0.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/apache-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-antlr.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bcel.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bsf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-log4j.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-oro.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-regexp.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-resolver.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-xalan2.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-logging.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-net.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jai.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-javamail.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jdepend.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jmf.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-jsch.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit4.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-netrexx.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-swing.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant-testutil.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.apache.lucene"/>
+			<pathelement path="../org.apache.lucene/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/lucene.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/lucene-contrib/lucene-analyzers.jar"/>
+			<pathelement path="../org.eclipse.ant.core/@dot"/>
+			<pathelement path="../org.eclipse.core.variables/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.help/@dot"/>
+			<pathelement path="../org.eclipse.core.expressions/@dot"/>
+			<pathelement path="${build.result.folder}/@dot"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.help.base_3.6.0.v20110506/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/ant_tasks/helpbase-ant.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="ant_tasks/helpbase-ant.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.ant_tasks_helpbase-ant.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/ant_tasks/helpbase-ant.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/ant_tasks/helpbase-ant.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<jar destfile="${build.result.folder}/ant_tasks/helpbase-ant.jar" basedir="${temp.folder}/ant_tasks/helpbase-ant.jar.bin"/>
+		<delete dir="${temp.folder}/ant_tasks/helpbase-ant.jar.bin"/>
+	</target>
+
+	<target name="ant_tasks/helpbase-antsrc.zip" depends="init" unless="ant_tasks/helpbase-antsrc.zip">
+		<mkdir dir="${build.result.folder}/ant_tasks"/>
+		<antcall target="zip.ant_tasks/helpbase-antsrc.zip"/>
+	</target>
+	<target name="zip.ant_tasks/helpbase-antsrc.zip">
+		<zip destfile="${build.result.folder}/ant_tasks/helpbase-antsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.ant_tasks/helpbase-antsrc.zip">
+		<copy todir="${source.destination.folder}/ant_tasks/helpbase-antsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.help.base.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<available property="ant_tasks/helpbase-ant.jar" file="${build.result.folder}/ant_tasks/helpbase-ant.jar"/>
+		<antcall target="ant_tasks/helpbase-ant.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.help.base_3.6.0.v20110506${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.help.base_3.6.0.v20110506" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.http.jetty_2.0.0/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.http.jetty_2.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.expressions/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.expressions_3.4.300.v20110228/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.variables/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.variables_3.2.500.v20110509/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.http.servlet/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.http.servlet_1.1.200.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ant.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ant.core_3.2.300.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.help/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.help_3.5.100.v20110426/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.apache.lucene/compilation.problem"/>
+			<include name="${pluginTemp}/org.apache.lucene_2.9.1.201105111101/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<available property="ant_tasks/helpbase-antsrc.zip" file="${build.result.folder}/ant_tasks/helpbase-antsrc.zip"/>
+		<antcall target="ant_tasks/helpbase-antsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.help.base_3.6.0.v20110506"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.6.0.v20110506"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/ant_tasks/helpbase-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="ant_tasks/helpbase-ant.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="doc/"/>
+				<include name="plugin.xml"/>
+				<include name="preferences.ini"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="about.ini"/>
+				<include name="about.mappings"/>
+				<include name="about.properties"/>
+				<include name="eclipse32.gif"/>
+				<include name="eclipse32.png"/>
+				<include name="META-INF/"/>
+				<include name="ant_tasks/helpbase-ant.jar"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506" version="3.6.0.v20110506"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506/ant_tasks/helpbase-ant.jar:${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506/ant_tasks"/>
+		<copy file="${build.result.folder}/ant_tasks/helpbase-antsrc.zip" todir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506/ant_tasks" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.ant_tasks/helpbase-antsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="schema/"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506/ant_tasks"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.help.base_3.6.0.v20110506/ant_tasks" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/ant_tasks">
+				<include name="helpbase-ant.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.help.base of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${build.result.folder}/ant_tasks/helpbase-ant.jar"/>
+		<delete file="${build.result.folder}/ant_tasks/helpbase-antsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.help.base_3.6.0.v20110506.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.help.base_3.6.0.v20110506.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.help.base" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.help.base.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.help.base_3.6.0.v20110506.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.help/build.xml b/generatedScripts/plugins/org.eclipse.help/build.xml
new file mode 100644
index 0000000..d1ede8b
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.help/build.xml
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.help" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.help"/>
+	<property name="bundleVersion" value="3.5.100.v20110426"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.help_3.5.100.v20110426"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.help for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.help_3.5.100.v20110426.jar" basedir="${temp.folder}/org.eclipse.help_3.5.100.v20110426" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+		<mkdir dir="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208"/>
+		<unzip src="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar" dest="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208" overwrite="false">
+			<patternset includes="icu-data.jar"/>
+		</unzip>
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.help @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208/icu-data.jar"/>
+			<pathelement path="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.core.expressions/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.help.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.help_3.5.100.v20110426${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.help_3.5.100.v20110426" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.expressions/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.expressions_3.4.300.v20110228/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.help_3.5.100.v20110426"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.5.100.v20110426"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="livehelp.js"/>
+				<include name="plugin.xml"/>
+				<include name="preferences.ini"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name=".options"/>
+				<include name="META-INF/"/>
+				<include name="command_link.png"/>
+				<include name="dtds/"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426" version="3.5.100.v20110426"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="schema/"/>
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.help_3.5.100.v20110426" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.help of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.help_3.5.100.v20110426.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.help_3.5.100.v20110426.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.help" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.help.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.help_3.5.100.v20110426.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.osgi.services/build.xml b/generatedScripts/plugins/org.eclipse.osgi.services/build.xml
new file mode 100644
index 0000000..4a80a80
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.osgi.services/build.xml
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.osgi.services" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.osgi.services"/>
+	<property name="bundleVersion" value="3.3.0.v20110411"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<available property="customBuildCallbacks" file="./customBuildCallbacks.xml" value="customBuildCallbacks.xml"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${OSGi/Minimum-1.2}"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.osgi.services for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.osgi.services_3.3.0.v20110411.jar" basedir="${temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.osgi.services @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+		</path>
+		<subant antfile="${customBuildCallbacks}" target="pre. at dot" failonerror="false" buildpath=".">
+			<property name="source.folder1" value="."/>
+			<property name="target.folder" value="${build.result.folder}/@dot"/>
+			<reference refid="@dot.classpath"/>
+		</subant>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="."			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir=".">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<subant antfile="${customBuildCallbacks}" target="post.compile. at dot" failonerror="false" buildpath=".">
+			<property name="source.folder1" value="."/>
+			<property name="target.folder" value="${build.result.folder}/@dot"/>
+			<reference refid="@dot.classpath"/>
+		</subant>
+		<subant antfile="${customBuildCallbacks}" target="post. at dot" failonerror="false" buildpath=".">
+			<property name="jar.Location" value="${build.result.folder}/@dot"/>
+			<reference refid="@dot.classpath"/>
+		</subant>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir=".">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir=".">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.osgi.services.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<subant antfile="${customBuildCallbacks}" target="pre.build.jars" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<subant antfile="${customBuildCallbacks}" target="post.build.jars" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.osgi.services_3.3.0.v20110411${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.osgi.services_3.3.0.v20110411" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<subant antfile="${customBuildCallbacks}" target="pre.build.sources" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<subant antfile="${customBuildCallbacks}" target="post.build.sources" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${build.result.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+		<copy todir="${build.result.folder}/org.eclipse.osgi.services_3.3.0.v20110411" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="META-INF/"/>
+				<include name="org/"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}/org.eclipse.osgi.services_3.3.0.v20110411" version="3.3.0.v20110411"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${build.result.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   targetFolder="${build.result.folder}/org.eclipse.osgi.services_3.3.0.v20110411"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+		<copy todir="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="META-INF/"/>
+				<include name="org/"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411" version="3.3.0.v20110411"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}"/>
+		</subant>
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}"/>
+		</subant>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="src.zip"/>
+				<include name="about.html"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.logs" failonerror="false" buildpath=".">
+			<property name="destination.temp.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.logs" failonerror="false" buildpath=".">
+			<property name="destination.temp.folder" value="${destination.temp.folder}/org.eclipse.osgi.services_3.3.0.v20110411"/>
+		</subant>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.osgi.services of all the zips, jars and logs created.">
+		<subant antfile="${customBuildCallbacks}" target="pre.clean" failonerror="false" buildpath=".">
+			<property name="plugin.destination" value="${plugin.destination}"/>
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="temp.folder" value="${temp.folder}"/>
+		</subant>
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.osgi.services_3.3.0.v20110411.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.osgi.services_3.3.0.v20110411.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<subant antfile="${customBuildCallbacks}" target="post.clean" failonerror="false" buildpath=".">
+			<property name="plugin.destination" value="${plugin.destination}"/>
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="temp.folder" value="${temp.folder}"/>
+		</subant>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.osgi.services.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.osgi.services_3.3.0.v20110411.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.osgi/build.xml b/generatedScripts/plugins/org.eclipse.osgi/build.xml
new file mode 100644
index 0000000..5ab48c0
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.osgi/build.xml
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.osgi" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.osgi"/>
+	<property name="bundleVersion" value="3.7.0.v20110505"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<property name="bundleJavacSource" value="1.5"/>
+	<property name="bundleJavacTarget" value="jsr14"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.5}"	>
+		<isset property="J2SE-1.5"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${OSGi/Minimum-1.2}"	>
+		<isset property="OSGi/Minimum-1.2"/>
+	</condition>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.osgi for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.osgi_3.7.0.v20110505.jar" basedir="${temp.folder}/org.eclipse.osgi_3.7.0.v20110505" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.osgi @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="osgi/src"			/>
+			<src path="core/adaptor/"			/>
+			<src path="core/framework/"			/>
+			<src path="core/composite/"			/>
+			<src path="resolver/src/"			/>
+			<src path="defaultAdaptor/src/"			/>
+			<src path="eclipseAdaptor/src/"			/>
+			<src path="console/src/"			/>
+			<src path="supplement/src/"			/>
+			<src path="security/src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="osgi/src">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="core/adaptor/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="core/framework/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="core/composite/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="resolver/src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="defaultAdaptor/src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="eclipseAdaptor/src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="console/src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="supplement/src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="security/src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="osgi/src">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="core/adaptor/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="core/framework/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="core/composite/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="resolver/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="defaultAdaptor/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="eclipseAdaptor/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="console/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="supplement/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="security/src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="osgi/src">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="core/adaptor/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="core/framework/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="core/composite/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="resolver/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="defaultAdaptor/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="eclipseAdaptor/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="console/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="supplement/src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="security/src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.osgi.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.osgi_3.7.0.v20110505${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.osgi_3.7.0.v20110505" log="${compilation.prereq.log}">
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.osgi_3.7.0.v20110505"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.7.0.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name=".options"/>
+				<include name="about.html"/>
+				<include name="META-INF/"/>
+				<include name="systembundle.properties"/>
+				<include name="*.profile"/>
+				<include name="profile.list"/>
+				<include name="hookconfigurators.properties"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505" version="3.7.0.v20110505"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.osgi_3.7.0.v20110505" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.osgi of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.osgi_3.7.0.v20110505.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.osgi_3.7.0.v20110505.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.osgi.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.osgi_3.7.0.v20110505.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.pde.build/build.xml b/generatedScripts/plugins/org.eclipse.pde.build/build.xml
new file mode 100644
index 0000000..c147d0a
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.pde.build/build.xml
@@ -0,0 +1,597 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.pde.build" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.pde.build"/>
+	<property name="bundleVersion" value="3.7.0.v20110509"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.pde.build_3.7.0.v20110509"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.pde.build for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.pde.build_3.7.0.v20110509.jar" basedir="${temp.folder}/org.eclipse.pde.build_3.7.0.v20110509" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="pdebuild.jar.nestedJars">
+		<mkdir dir="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208"/>
+		<unzip src="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar" dest="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208" overwrite="false">
+			<patternset includes="icu-data.jar"/>
+		</unzip>
+	</target>
+	<target name="pdebuild.jar" depends="init,pdebuild.jar.nestedJars" unless="pdebuild.jar" description="Create jar: org.eclipse.pde.build pdebuild.jar.">
+		<delete dir="${temp.folder}/pdebuild.jar.bin"/>
+		<mkdir dir="${temp.folder}/pdebuild.jar.bin"/>
+		<path id="pdebuild.jar.classpath">
+			<pathelement path="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208/icu-data.jar"/>
+			<pathelement path="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.updatesite/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.updatesite/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/pdepublishing.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.ant.core/@dot"/>
+			<pathelement path="../org.eclipse.core.variables/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility/@dot"/>
+			<pathelement path="../org.eclipse.update.configurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository.tools/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository.tools/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.director.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director.app/@dot"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository.tools/lib/repository-tools-ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/pdebuild.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="pdebuild.jar.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.pdebuild.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/pdebuild.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/pdebuild.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}"/>
+		<jar destfile="${build.result.folder}/pdebuild.jar" basedir="${temp.folder}/pdebuild.jar.bin"/>
+		<delete dir="${temp.folder}/pdebuild.jar.bin"/>
+	</target>
+
+	<target name="pdebuildsrc.zip" depends="init" unless="pdebuildsrc.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.pdebuildsrc.zip"/>
+	</target>
+	<target name="zip.pdebuildsrc.zip">
+		<zip destfile="${build.result.folder}/pdebuildsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.pdebuildsrc.zip">
+		<copy todir="${source.destination.folder}/pdebuildsrc" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="lib/pdebuild-ant.jar.nestedJars">
+		<mkdir dir="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208"/>
+		<unzip src="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar" dest="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208" overwrite="false">
+			<patternset includes="icu-data.jar"/>
+		</unzip>
+	</target>
+	<target name="lib/pdebuild-ant.jar" depends="init,lib/pdebuild-ant.jar.nestedJars" unless="lib/pdebuild-ant.jar" description="Create jar: org.eclipse.pde.build lib/pdebuild-ant.jar.">
+		<delete dir="${temp.folder}/lib/pdebuild-ant.jar.bin"/>
+		<mkdir dir="${temp.folder}/lib/pdebuild-ant.jar.bin"/>
+		<path id="lib/pdebuild-ant.jar.classpath">
+			<pathelement path="${buildDirectory}/nestedJars/com.ibm.icu_4.4.2.v20110208/icu-data.jar"/>
+			<pathelement path="../../../../../../../../../usr/lib/eclipse/plugins/com.ibm.icu_4.4.2.v20110208.jar"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin/@dot"/>
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.core/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.engine/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.metadata.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator.manipulator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/bin/"/>
+			<pathelement path="../org.eclipse.equinox.frameworkadmin.equinox/@dot"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/bin/"/>
+			<pathelement path="../org.eclipse.equinox.simpleconfigurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.updatesite/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.updatesite/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.artifact.repository/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.jarprocessor/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher.eclipse/pdepublishing.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.publisher/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.ant.core/@dot"/>
+			<pathelement path="../org.eclipse.core.variables/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility/@dot"/>
+			<pathelement path="../org.eclipse.update.configurator/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository.tools/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository.tools/@dot"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.core.jar"/>
+			<pathelement path="../../../../../../../../../usr/share/java/org.sat4j.pb.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.director.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.p2.director.app/@dot"/>
+			<pathelement path="bin/"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.pde.build_3.7.0.v20110509/bin/"/>
+			<pathelement path="${build.result.folder}/pdebuild.jar"/>
+			<pathelement path="${build.result.folder}/../org.eclipse.pde.build_3.7.0.v20110509/pdebuild.jar"/>
+			<pathelement path="../org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar"/>
+			<pathelement path="../org.eclipse.equinox.p2.repository.tools/lib/repository-tools-ant.jar"/>
+			<pathelement path="../org.apache.ant/ant.jar"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${temp.folder}/lib/pdebuild-ant.jar.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="lib/pdebuild-ant.jar.classpath" />
+			<src path="src_ant/"			/>
+			<compilerarg value="@${basedir}/javaCompiler.lib_pdebuild-ant.jar.args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${temp.folder}/lib/pdebuild-ant.jar.bin${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${temp.folder}/lib/pdebuild-ant.jar.bin" failonerror="true" overwrite="false">
+			<fileset dir="src_ant/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${build.result.folder}/lib"/>
+		<jar destfile="${build.result.folder}/lib/pdebuild-ant.jar" basedir="${temp.folder}/lib/pdebuild-ant.jar.bin"/>
+		<delete dir="${temp.folder}/lib/pdebuild-ant.jar.bin"/>
+	</target>
+
+	<target name="lib/pdebuild-antsrc.zip" depends="init" unless="lib/pdebuild-antsrc.zip">
+		<mkdir dir="${build.result.folder}/lib"/>
+		<antcall target="zip.lib/pdebuild-antsrc.zip"/>
+	</target>
+	<target name="zip.lib/pdebuild-antsrc.zip">
+		<zip destfile="${build.result.folder}/lib/pdebuild-antsrc.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.lib/pdebuild-antsrc.zip">
+		<copy todir="${source.destination.folder}/lib/pdebuild-antsrc" failonerror="true" overwrite="true">
+			<fileset dir="src_ant/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.pde.build.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="pdebuild.jar" file="${build.result.folder}/pdebuild.jar"/>
+		<antcall target="pdebuild.jar"/>
+		<available property="lib/pdebuild-ant.jar" file="${build.result.folder}/lib/pdebuild-ant.jar"/>
+		<antcall target="lib/pdebuild-ant.jar"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.pde.build_3.7.0.v20110509${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.pde.build_3.7.0.v20110509" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.core_2.1.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.director.app_1.0.300.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.variables/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.variables_3.2.500.v20110509/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.updatesite/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.updatesite_1.0.300.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.director/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.director_2.1.0.v20110504-1715/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.update.configurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.update.configurator_3.3.100.v20100512/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher.eclipse/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher.eclipse_1.0.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator.manipulator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator.manipulator_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.publisher/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.publisher_1.2.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.ant.core/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.ant.core_3.2.300.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin_2.0.0.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.metadata.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository.tools/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository.tools_2.0.100.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.repository_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility_3.2.100.v20100505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.artifact.repository/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.artifact.repository_1.1.100.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.frameworkadmin.equinox/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.frameworkadmin.equinox_1.0.300.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.simpleconfigurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.simpleconfigurator_1.0.200.v20110502-1955/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.engine/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.engine_2.1.0.v20110510/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.p2.jarprocessor/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110502-1955/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="pdebuildsrc.zip" file="${build.result.folder}/pdebuildsrc.zip"/>
+		<antcall target="pdebuildsrc.zip"/>
+		<available property="lib/pdebuild-antsrc.zip" file="${build.result.folder}/lib/pdebuild-antsrc.zip"/>
+		<antcall target="lib/pdebuild-antsrc.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.pde.build_3.7.0.v20110509"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.7.0.v20110509"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/pdebuild.jar:${build.result.folder}/lib/pdebuild-ant.jar"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="pdebuild.jar"/>
+				<include name="lib/pdebuild-ant.jar"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name="*.jar"/>
+				<include name="lib/*.jar"/>
+				<include name="scripts/"/>
+				<include name="templates/"/>
+				<include name="data/"/>
+				<include name="META-INF/"/>
+				<include name=".options"/>
+				<include name="about_files/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509" version="3.7.0.v20110509"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509/pdebuild.jar:${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509/lib/pdebuild-ant.jar"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509"/>
+		<copy file="${build.result.folder}/pdebuildsrc.zip" todir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509" failonerror="false" overwrite="false"/>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509/lib"/>
+		<copy file="${build.result.folder}/lib/pdebuild-antsrc.zip" todir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509/lib" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.pdebuildsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.lib/pdebuild-antsrc.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}">
+				<include name="pdebuild.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509/lib"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.pde.build_3.7.0.v20110509/lib" failonerror="false" overwrite="false">
+			<fileset dir="${temp.folder}/lib">
+				<include name="pdebuild-ant.jar.bin${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.pde.build of all the zips, jars and logs created.">
+		<delete file="${build.result.folder}/pdebuild.jar"/>
+		<delete file="${build.result.folder}/pdebuildsrc.zip"/>
+		<delete file="${build.result.folder}/lib/pdebuild-ant.jar"/>
+		<delete file="${build.result.folder}/lib/pdebuild-antsrc.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.pde.build_3.7.0.v20110509.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.pde.build_3.7.0.v20110509.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.pde.build" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.pde.build.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.pde.build_3.7.0.v20110509.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.update.configurator/build.xml b/generatedScripts/plugins/org.eclipse.update.configurator/build.xml
new file mode 100644
index 0000000..b98625f
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.update.configurator/build.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.update.configurator" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.update.configurator"/>
+	<property name="bundleVersion" value="3.3.100.v20100512"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.0/Foundation-1.0}"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="CDC-1.0/Foundation-1.0"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${J2SE-1.3}"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.1"	>
+		<isset property="J2SE-1.3"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.update.configurator_3.3.100.v20100512"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.update.configurator for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.update.configurator_3.3.100.v20100512.jar" basedir="${temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.update.configurator @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+		</path>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.update.configurator.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.update.configurator_3.3.100.v20100512${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.update.configurator_3.3.100.v20100512" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.update.configurator_3.3.100.v20100512"/>
+		<copy todir="${build.result.folder}" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="META-INF/MANIFEST.MF"/>
+				<include name="plugin.xml"/>
+				<include name="fragment.xml"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}" version="3.3.100.v20100512"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   baseDirectory="${basedir}"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name=".options"/>
+				<include name="about.html"/>
+				<include name="plugin.properties"/>
+				<include name="META-INF/"/>
+				<include name="OSGI-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512" version="3.3.100.v20100512"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512"/>
+		</antcall>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.update.configurator_3.3.100.v20100512" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.update.configurator of all the zips, jars and logs created.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.update.configurator_3.3.100.v20100512.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.update.configurator_3.3.100.v20100512.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.update.configurator" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.update.configurator.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.update.configurator_3.3.100.v20100512.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/generatedScripts/plugins/org.eclipse.update.core/build.xml b/generatedScripts/plugins/org.eclipse.update.core/build.xml
new file mode 100644
index 0000000..a10ff09
--- /dev/null
+++ b/generatedScripts/plugins/org.eclipse.update.core/build.xml
@@ -0,0 +1,463 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.update.core" default="build.jars" basedir=".">
+
+	<property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/>
+	<property name="basews" value="${ws}"/>
+	<property name="baseos" value="${os}"/>
+	<property name="basearch" value="${arch}"/>
+	<property name="basenl" value="${nl}"/>
+	<property name="bundleId" value="org.eclipse.update.core"/>
+	<property name="bundleVersion" value="3.2.500.v20110330"/>
+	<property name="p2.publishonerror" value="false"/>
+
+	<available property="customBuildCallbacks" file="./customBuildCallbacks.xml" value="customBuildCallbacks.xml"/>
+
+	<!-- Compiler settings. -->
+	<property name="javacFailOnError" value="false"/>
+	<property name="javacDebugInfo" value="on"/>
+	<property name="javacVerbose" value="false"/>
+	<property name="logExtension" value=".log"/>
+	<property name="compilerArg" value=""/>
+	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+	<property name="javacSource" value="1.3"/>
+	<property name="javacTarget" value="1.2"/>
+	<condition property="dir_bootclasspath" value="${java.home}/../Classes">
+		<os family="mac"/>
+	</condition>
+	<property name="dir_bootclasspath" value="${java.home}/lib"/>
+	<path id="path_bootclasspath">
+		<fileset dir="${dir_bootclasspath}">
+			<include name="*.jar"/>
+		</fileset>
+	</path>
+	<property name="bootclasspath" refid="path_bootclasspath"/>
+	<condition property="bundleBootClasspath" value="${J2SE-1.4}"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="J2SE-1.4"/>
+	</condition>
+	<condition property="bundleBootClasspath" value="${CDC-1.1/Foundation-1.1}"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacSource" value="1.3"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<condition property="bundleJavacTarget" value="1.2"	>
+		<isset property="CDC-1.1/Foundation-1.1"/>
+	</condition>
+	<property name="bundleJavacSource" value="${javacSource}"/>
+	<property name="bundleJavacTarget" value="${javacTarget}"/>
+	<property name="bundleBootClasspath" value="${bootclasspath}"/>
+
+	<target name="init" depends="properties">
+		<condition property="pluginTemp" value="${buildTempFolder}/plugins"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="pluginTemp" value="${basedir}"/>
+		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.update.core_3.2.500.v20110330"		>
+			<isset property="buildTempFolder"/>
+		</condition>
+		<property name="build.result.folder" value="${basedir}"/>
+		<property name="temp.folder" value="${basedir}/temp.folder"/>
+		<property name="plugin.destination" value="${basedir}"/>
+		<condition property="p2.publish.parts" value="true"		>
+			<istrue value="${p2.gathering}"/>
+		</condition>
+		<property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/>
+		<condition property="compilation.problem.marker.exists" value="true"		>
+			<and>
+			<available file="${compilation.problem.marker}"/>
+			<isfalse value="${p2.publishonerror}"/>
+			</and>
+		</condition>
+	</target>
+
+	<target name="properties" if="eclipse.running">
+		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
+
+	</target>
+
+	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.update.core for an update site.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<jar destfile="${plugin.destination}/org.eclipse.update.core_3.2.500.v20110330.jar" basedir="${temp.folder}/org.eclipse.update.core_3.2.500.v20110330" filesetmanifest="merge"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="@dot.nestedJars">
+	</target>
+	<target name="@dot" depends="init, at dot.nestedJars" unless="@dot" description="Create jar: org.eclipse.update.core @dot.">
+		<delete dir="${build.result.folder}/@dot"/>
+		<mkdir dir="${build.result.folder}/@dot"/>
+		<path id="@dot.classpath">
+			<pathelement path="../org.eclipse.osgi/bin/"/>
+			<pathelement path="../org.eclipse.osgi/@dot"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.transforms.hook/@dot"/>
+			<pathelement path="../org.eclipse.equinox.servletbridge.extensionbundle/@dot"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/bin/"/>
+			<pathelement path="../org.eclipse.equinox.weaving.hook/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime/@dot"/>
+			<pathelement path="../org.eclipse.equinox.common/bin/"/>
+			<pathelement path="../org.eclipse.equinox.common/@dot"/>
+			<pathelement path="../org.eclipse.core.jobs/bin/"/>
+			<pathelement path="../org.eclipse.core.jobs/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/runtime_registry_compatibility.jar"/>
+			<pathelement path="../org.eclipse.equinox.registry/bin/"/>
+			<pathelement path="../org.eclipse.equinox.registry/@dot"/>
+			<pathelement path="../org.eclipse.equinox.preferences/bin/"/>
+			<pathelement path="../org.eclipse.equinox.preferences/@dot"/>
+			<pathelement path="../org.eclipse.core.contenttype/bin/"/>
+			<pathelement path="../org.eclipse.core.contenttype/@dot"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/bin/"/>
+			<pathelement path="../org.eclipse.core.runtime.compatibility.auth/@dot"/>
+			<pathelement path="../org.eclipse.equinox.app/bin/"/>
+			<pathelement path="../org.eclipse.equinox.app/@dot"/>
+			<pathelement path="../org.eclipse.osgi.services"/>
+			<pathelement path="../org.eclipse.osgi.services/@dot"/>
+			<pathelement path="../../../../../../../../../usr/share/java/tomcat6-servlet-2.5-api.jar"/>
+			<pathelement path="../org.eclipse.update.configurator/@dot"/>
+			<pathelement path="../org.eclipse.core.net/bin/"/>
+			<pathelement path="../org.eclipse.core.net/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.linux.x86/@dot"/>
+			<pathelement path="../org.eclipse.core.net.win32.x86_64/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.macosx/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86/@dot"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/bin/"/>
+			<pathelement path="../org.eclipse.equinox.security.win32.x86_64/@dot"/>
+		</path>
+		<subant antfile="${customBuildCallbacks}" target="pre. at dot" failonerror="false" buildpath=".">
+			<property name="source.folder1" value="src/"/>
+			<property name="source.folder2" value="jarprocessor/"/>
+			<property name="target.folder" value="${build.result.folder}/@dot"/>
+			<reference refid="@dot.classpath"/>
+		</subant>
+		<!-- compile the source code -->
+		<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" errorProperty="compilation.error.occured"		>
+			<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
+			<classpath refid="@dot.classpath" />
+			<src path="src/"			/>
+			<src path="jarprocessor/"			/>
+			<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+			<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"			/>
+		</javac>
+		<antcall target="checkCompilationResults"/>
+		<!-- Copy necessary resources -->
+		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
+			<fileset dir="src/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+			<fileset dir="jarprocessor/">
+				<exclude name="**/*.java"/>
+				<exclude name="**/package.htm*"/>
+			</fileset>
+		</copy>
+		<subant antfile="${customBuildCallbacks}" target="post.compile. at dot" failonerror="false" buildpath=".">
+			<property name="source.folder1" value="src/"/>
+			<property name="source.folder2" value="jarprocessor/"/>
+			<property name="target.folder" value="${build.result.folder}/@dot"/>
+			<reference refid="@dot.classpath"/>
+		</subant>
+		<subant antfile="${customBuildCallbacks}" target="post. at dot" failonerror="false" buildpath=".">
+			<property name="jar.Location" value="${build.result.folder}/@dot"/>
+			<reference refid="@dot.classpath"/>
+		</subant>
+	</target>
+
+	<target name="src.zip" depends="init" unless="src.zip">
+		<mkdir dir="${build.result.folder}"/>
+		<antcall target="zip.src.zip"/>
+	</target>
+	<target name="zip.src.zip">
+		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="jarprocessor/">
+				<include name="**/*.java"/>
+			</fileset>
+		</zip>
+	</target>
+	<target name="copy.src.zip">
+		<copy todir="${source.destination.folder}/" failonerror="true" overwrite="true">
+			<fileset dir="src/">
+				<include name="**/*.java"/>
+			</fileset>
+			<fileset dir="jarprocessor/">
+				<include name="**/*.java"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: org.eclipse.update.core.">
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<subant antfile="${customBuildCallbacks}" target="pre.build.jars" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+		<available property="@dot" file="${build.result.folder}/@dot"/>
+		<antcall target="@dot"/>
+		<subant antfile="${customBuildCallbacks}" target="post.build.jars" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+	</target>
+
+	<target name="checkCompilationResults" if="compilation.error.occured">
+		<echo file="${compilation.problem.marker}" message="org.eclipse.update.core_3.2.500.v20110330${line.separator}compilation.error.occured=${compilation.error.occured}"/>
+		<eclipse.logCompileError bundle="org.eclipse.update.core_3.2.500.v20110330" log="${compilation.prereq.log}">
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.preferences/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.preferences_3.4.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_64_1.1.0.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.registry_3.5.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security_1.1.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.app/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.app_1.3.100.v20110321/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.update.configurator/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.update.configurator_3.3.100.v20100512/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.linux.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.linux.x86_1.1.200.I20110419-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.transforms.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.transforms.hook_1.0.300.v20100719/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_64_1.0.0.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.contenttype/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.contenttype_3.4.100.v20110423-0524/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.servletbridge.extensionbundle/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.servletbridge.extensionbundle_1.2.0.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net.win32.x86_64/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net.win32.x86_64_1.0.100.I20110331-0827/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.auth/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.auth_3.2.200.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.common/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.common_3.6.0.v20110506/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.macosx/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.macosx_1.100.100.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime_3.7.0.v20110110/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.weaving.hook/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.weaving.hook_1.0.100.v20110502/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.equinox.security.win32.x86/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.equinox.security.win32.x86_1.0.200.v20100503/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.jobs/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.jobs_3.5.100.v20110404/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi_3.7.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.net/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.net_1.2.100.I20110510-0800/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.core.runtime.compatibility.registry/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.core.runtime.compatibility.registry_3.5.0.v20110505/compilation.problem"/>
+			<include name="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.osgi.services/compilation.problem"/>
+			<include name="${pluginTemp}/org.eclipse.osgi.services_3.3.0.v20110411/compilation.problem"/>
+		</eclipse.logCompileError>
+	</target>
+
+	<target name="build.sources" depends="init">
+		<subant antfile="${customBuildCallbacks}" target="pre.build.sources" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+		<available property="src.zip" file="${build.result.folder}/src.zip"/>
+		<antcall target="src.zip"/>
+		<subant antfile="${customBuildCallbacks}" target="post.build.sources" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+		</subant>
+	</target>
+
+	<target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists">
+		<mkdir dir="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+		<copy todir="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name=".options"/>
+				<include name="META-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330" version="3.2.500.v20110330"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+		<eclipse.gatherBundle 
+		   metadataRepository="${p2.build.repo}"
+		   artifactRepository="${p2.build.repo}"
+		   buildResultFolder="${build.result.folder}"
+		   targetFolder="${build.result.folder}/org.eclipse.update.core_3.2.500.v20110330"
+		/>
+	</target>
+
+	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
+		<mkdir dir="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+		<copy todir="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330" failonerror="true" overwrite="false">
+			<fileset dir="${build.result.folder}/@dot">
+				<include name="**"/>
+			</fileset>
+		</copy>
+		<copy todir="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330" failonerror="true" overwrite="true">
+			<fileset dir="${basedir}">
+				<include name="plugin.xml"/>
+				<include name="plugin.properties"/>
+				<include name="about.html"/>
+				<include name=".options"/>
+				<include name="META-INF/"/>
+			</fileset>
+		</copy>
+		<eclipse.versionReplacer path="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330" version="3.2.500.v20110330"/>
+		<antcall target="apitools.generation">
+			<param name="target.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+			<param name="projectLocation" value="${basedir}"/>
+			<param name="binary.folders" value="${build.result.folder}/@dot"/>
+			<param name="projectName" value="${bundleId}_${bundleVersion}"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.bin.parts" failonerror="false" buildpath=".">
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+	</target>
+
+	<target name="build.zips" depends="init">
+	</target>
+
+	<target name="gather.sources" depends="init" if="destination.temp.folder">
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330" failonerror="false" overwrite="false"/>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+	</target>
+
+	<target name="gather.individual.sources" depends="init">
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}"/>
+		</subant>
+		<antcall target="copy.src.zip">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<antcall target="copy.src.includes">
+			<param name="source.destination.folder" value="${destination.temp.folder}"/>
+		</antcall>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.sources" failonerror="false" buildpath=".">
+			<property name="target.folder" value="${destination.temp.folder}"/>
+		</subant>
+	</target>
+
+	<target name="copy.src.includes" depends="init">
+		<copy todir="${source.destination.folder}" failonerror="false" overwrite="false">
+			<fileset dir="${basedir}">
+				<include name="about.html"/>
+				<include name="schema/"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="gather.logs" depends="init" if="destination.temp.folder">
+		<subant antfile="${customBuildCallbacks}" target="pre.gather.logs" failonerror="false" buildpath=".">
+			<property name="destination.temp.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+		<mkdir dir="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		<copy todir="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330" failonerror="false" overwrite="false">
+			<fileset dir="${build.result.folder}">
+				<include name="@dot${logExtension}"/>
+			</fileset>
+		</copy>
+		<subant antfile="${customBuildCallbacks}" target="post.gather.logs" failonerror="false" buildpath=".">
+			<property name="destination.temp.folder" value="${destination.temp.folder}/org.eclipse.update.core_3.2.500.v20110330"/>
+		</subant>
+	</target>
+
+	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.update.core of all the zips, jars and logs created.">
+		<subant antfile="${customBuildCallbacks}" target="pre.clean" failonerror="false" buildpath=".">
+			<property name="plugin.destination" value="${plugin.destination}"/>
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="temp.folder" value="${temp.folder}"/>
+		</subant>
+		<delete dir="${build.result.folder}/@dot"/>
+		<delete file="${build.result.folder}/src.zip"/>
+		<delete file="${plugin.destination}/org.eclipse.update.core_3.2.500.v20110330.jar"/>
+		<delete file="${plugin.destination}/org.eclipse.update.core_3.2.500.v20110330.zip"/>
+		<delete dir="${temp.folder}"/>
+		<delete file="${compilation.problem.marker}" quiet="true"/>
+		<subant antfile="${customBuildCallbacks}" target="post.clean" failonerror="false" buildpath=".">
+			<property name="plugin.destination" value="${plugin.destination}"/>
+			<property name="build.result.folder" value="${build.result.folder}"/>
+			<property name="temp.folder" value="${temp.folder}"/>
+		</subant>
+	</target>
+
+	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
+		<eclipse.convertPath fileSystemPath="/home/zx/eclipse/org.eclipse.linuxtools.eclipse-build/eclipse-build/build/eclipse-3.7.0-I20110510-0800-src/plugins/org.eclipse.update.core" property="resourcePath"/>
+		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
+	</target>
+
+	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.update.core.">
+		<delete dir="${temp.folder}"/>
+		<mkdir dir="${temp.folder}"/>
+		<antcall target="build.jars"/>
+		<antcall target="build.sources"/>
+		<antcall target="gather.bin.parts">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<antcall target="gather.sources">
+			<param name="destination.temp.folder" value="${temp.folder}/"/>
+		</antcall>
+		<delete>
+			<fileset dir="${temp.folder}">
+				<include name="**/*.bin${logExtension}"/>
+			</fileset>
+		</delete>
+		<zip destfile="${plugin.destination}/org.eclipse.update.core_3.2.500.v20110330.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
+		<delete dir="${temp.folder}"/>
+	</target>
+
+	<target name="apitools.generation" if="generateAPIDescription">
+		<apitooling.apigeneration  projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}"		/>
+	</target>
+
+</project>
diff --git a/jdtnonosgidependencies.properties b/jdtnonosgidependencies.properties
index 1c99651..e0d5f83 100644
--- a/jdtnonosgidependencies.properties
+++ b/jdtnonosgidependencies.properties
@@ -1,3 +1,3 @@
 org.junit_3.8.2.v3_8_2_v20100427-1100/junit.jar=/usr/share/java/junit.jar
 org.junit4/junit.jar=/usr/share/java/junit4.jar
-org.junit_4.8.1.v4_8_1_v20100427-1100/junit.jar=/usr/share/java/junit4.jar
+org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar=/usr/share/java/junit4.jar
diff --git a/nonosgidependencies.properties b/nonosgidependencies.properties
index 5aab7b2..b91141d 100644
--- a/nonosgidependencies.properties
+++ b/nonosgidependencies.properties
@@ -1,18 +1,22 @@
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-antlr.jar=/usr/share/java/ant/ant-antlr.jar:/usr/share/java/ant-antlr.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-apache-bcel.jar=/usr/share/java/ant/ant-apache-bcel.jar:/usr/share/java/ant-apache-bcel.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-apache-bsf.jar=/usr/share/java/ant/ant-apache-bsf.jar:/usr/share/java/ant-apache-bsf.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-apache-log4j.jar=/usr/share/java/ant/ant-apache-log4j.jar:/usr/share/java/ant-apache-log4j.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-apache-oro.jar=/usr/share/java/ant/ant-apache-oro.jar:/usr/share/java/ant-apache-oro.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-apache-regexp.jar=/usr/share/java/ant/ant-apache-regexp.jar:/usr/share/java/ant-apache-regexp.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-apache-resolver.jar=/usr/share/java/ant/ant-apache-resolver.jar:/usr/share/java/ant-apache-resolver.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-commons-logging.jar=/usr/share/java/ant/ant-commons-logging.jar:/usr/share/java/ant-commons-logging.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-commons-net.jar=/usr/share/java/ant/ant-commons-net.jar:/usr/share/java/ant-commons-net.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant.jar=/usr/share/java/ant.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-javamail.jar=/usr/share/java/ant/ant-javamail.jar:/usr/share/java/ant-javamail.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-jdepend.jar=/usr/share/java/ant/ant-jdepend.jar:/usr/share/java/ant-jdepend.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-jsch.jar=/usr/share/java/ant/ant-jsch.jar:/usr/share/java/ant-jsch.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-junit.jar=/usr/share/java/ant/ant-junit.jar:/usr/share/java/ant-junit.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-launcher.jar=/usr/share/java/ant-launcher.jar:/usr/share/java/ant-launcher.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-nodeps.jar=/usr/share/java/ant/ant-nodeps.jar:/usr/share/java/ant-nodeps.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-swing.jar=/usr/share/java/ant/ant-swing.jar:/usr/share/java/ant-swing.jar
-org.apache.ant_1.7.1.v20100518-1145/lib/ant-trax.jar=/usr/share/java/ant/ant-trax.jar:/usr/share/java/ant-trax.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-antlr.jar=/usr/share/java/ant/ant-antlr.jar:/usr/share/java/ant-antlr.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bcel.jar=/usr/share/java/ant/ant-apache-bcel.jar:/usr/share/java/ant-apache-bcel.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-bsf.jar=/usr/share/java/ant/ant-apache-bsf.jar:/usr/share/java/ant-apache-bsf.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-log4j.jar=/usr/share/java/ant/ant-apache-log4j.jar:/usr/share/java/ant-apache-log4j.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-oro.jar=/usr/share/java/ant/ant-apache-oro.jar:/usr/share/java/ant-apache-oro.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-regexp.jar=/usr/share/java/ant/ant-apache-regexp.jar:/usr/share/java/ant-apache-regexp.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-resolver.jar=/usr/share/java/ant/ant-apache-resolver.jar:/usr/share/java/ant-apache-resolver.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-apache-xalan2.jar=/usr/share/java/ant/ant-apache-xalan2.jar:/usr/share/java/ant-apache-xalan2.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-logging.jar=/usr/share/java/ant/ant-commons-logging.jar:/usr/share/java/ant-commons-logging.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-commons-net.jar=/usr/share/java/ant/ant-commons-net.jar:/usr/share/java/ant-commons-net.jar
+#org.apache.ant_1.8.2.v20110505-1300/lib/ant-jai.jar=/usr/share/java/ant/ant-jai.jar:/usr/share/java/ant-jai.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-javamail.jar=/usr/share/java/ant/ant-javamail.jar:/usr/share/java/ant-javamail.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-jdepend.jar=/usr/share/java/ant/ant-jdepend.jar:/usr/share/java/ant-jdepend.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-jmf.jar=/usr/share/java/ant/ant-jmf.jar:/usr/share/java/ant-jmf.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-jsch.jar=/usr/share/java/ant/ant-jsch.jar:/usr/share/java/ant-jsch.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit.jar=/usr/share/java/ant/ant-junit.jar:/usr/share/java/ant-junit.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-junit4.jar=/usr/share/java/ant/ant-junit.jar:/usr/share/java/ant-junit.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-launcher.jar=/usr/share/java/ant-launcher.jar:/usr/share/java/ant-launcher.jar
+#org.apache.ant_1.8.2.v20110505-1300/lib/ant-netrexx.jar=/usr/share/java/ant-netrexx.jar:/usr/share/java/ant-netrexx.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-swing.jar=/usr/share/java/ant/ant-swing.jar:/usr/share/java/ant-swing.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant-testutil.jar=/usr/share/java/ant/ant-testutil.jar:/usr/share/java/ant-testutil.jar
+org.apache.ant_1.8.2.v20110505-1300/lib/ant.jar=/usr/share/java/ant.jar
diff --git a/patches/bz318912.patch b/patches/bz318912.patch
deleted file mode 100644
index 1d344c9..0000000
--- a/patches/bz318912.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-### Eclipse Workspace Patch 1.0
-#P org.eclipse.help.base
-Index: META-INF/MANIFEST.MF
-===================================================================
-RCS file: /cvsroot/eclipse/org.eclipse.help.base/META-INF/MANIFEST.MF,v
-retrieving revision 1.45
-diff -u -r1.45 MANIFEST.MF
---- plugins/org.eclipse.help.base/META-INF/MANIFEST.MF	24 Jun 2010 18:38:49 -0000	1.45
-+++ plugins/org.eclipse.help.baseMETA-INF/MANIFEST.MF	7 Jul 2010 23:16:48 -0000
-@@ -39,8 +39,8 @@
-  org.eclipse.help.search,
-  org.eclipse.help.server,
-  org.eclipse.help.standalone
--Require-Bundle: org.apache.lucene;bundle-version="[1.9.1,2.0.0)";visibility:=reexport,
-- org.apache.lucene.analysis;bundle-version="[1.9.1,2.0.0)";visibility:=reexport,
-+Require-Bundle: org.apache.lucene;bundle-version="[1.9.1,3.0.0)";visibility:=reexport,
-+ org.apache.lucene.analysis;bundle-version="[1.9.1,3.0.0)";visibility:=reexport,
-  org.eclipse.ant.core;bundle-version="3.2.200";resolution:=optional,
-  org.eclipse.core.runtime;bundle-version="3.6.0",
-  org.eclipse.help;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
diff --git a/patches/bz319476-compile-jar-in-jar-loader.patch b/patches/bz319476-compile-jar-in-jar-loader.patch
deleted file mode 100644
index 25fccef..0000000
--- a/patches/bz319476-compile-jar-in-jar-loader.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-### Eclipse Workspace Patch 1.0
-#P org.eclipse.jdt.ui
-Index: build.properties
-===================================================================
-RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/build.properties,v
-retrieving revision 1.39
-diff -u -r1.39 build.properties
---- build.properties	14 Jan 2010 16:57:59 -0000	1.39
-+++ build.properties	20 Oct 2010 19:00:04 -0000
-@@ -31,3 +31,4 @@
-                core extension/,\
-                internal compatibility/
- jars.compile.order = .
-+customBuildCallbacks = customBuildCallbacks.xml
-Index: customBuildCallbacks.xml
-===================================================================
-RCS file: customBuildCallbacks.xml
-diff -N customBuildCallbacks.xml
---- /dev/null	1 Jan 1970 00:00:00 -0000
-+++ customBuildCallbacks.xml	1 Jan 1970 00:00:00 -0000
-@@ -0,0 +1,176 @@
-+<!-- ===================================================================== -->
-+<!-- Custom targets called from a project's generated build.xml            -->
-+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
-+<!-- ===================================================================== -->
-+<project name="Build specific targets and properties" default="noDefault">
-+
-+		<available file="${basedir}/jar-in-jar-loader.zip" property="jijl-zip" />
-+	
-+	<!-- ===================================================================== -->
-+	<!-- Default target                                                        -->
-+	<!-- ===================================================================== -->
-+	<target name="noDefault">
-+		<echo message="This file must be called with explicit targets" />
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do before the target build.jars                              -->
-+	<!-- Available parameters :                                                -->
-+	<!--   build.result.folder - folder to contain the build results           -->
-+	<!-- ===================================================================== -->
-+	<target name="pre.build.jars">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do after the target build.jars                               -->
-+	<!-- Available parameters :                                                -->
-+	<!--   build.result.folder - folder to contain the build results           -->
-+	<!-- ===================================================================== -->
-+	<target name="post.build.jars">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do before the target build.sources                           -->
-+	<!-- Available parameters :                                                -->
-+	<!--   build.result.folder - folder to contain the build results           -->
-+	<!-- ===================================================================== -->
-+	<target name="pre.build.sources">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do after the target build.sources                            -->
-+	<!-- Available parameters :                                                -->
-+	<!--   build.result.folder - folder to contain the build results           -->
-+	<!-- ===================================================================== -->
-+	<target name="post.build.sources">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do before the compilation target <name>                      -->
-+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
-+	<!-- Available parameters :                                                -->
-+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
-+	<!--   target.folder  : where the results of the compilation go            -->
-+	<!--   <name>.classpath : name = name of the compilation target. A         -->
-+	<!--                      reference to the classpath structure.            -->
-+	<!-- ===================================================================== -->
-+	<target name="pre.name">
-+	</target>
-+
-+	<target name="pre. at dot" depends="compile-jar-in-jar-loader">
-+	</target>
-+
-+	<target name="compile-jar-in-jar-loader" unless="jijl-zip" >
-+		<mkdir dir="${basedir}/temp/" />
-+		<javac destdir="${basedir}/temp"
-+			srcdir="jar in jar loader/"
-+			source="1.3"
-+			target="1.1"
-+			debug="true"
-+			optimize="true"
-+			fork="true" />
-+		<zip destfile="${basedir}/jar-in-jar-loader.zip"
-+			basedir="${basedir}/temp/" />
-+
-+		<delete dir="${basedir}/temp/" />
-+
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do during the compilation target <name>, after the compile   -->
-+	<!-- but before jaring.  Substitute "name" with the name of the compilation-->
-+	<!-- target, eg @dot                                                       -->
-+	<!-- Available parameters :                                                -->
-+	<!--   source.foldern : n = 1 ... N, the source folders                    -->
-+	<!--   target.folder  : where the results of the compilation go            -->
-+	<!--   <name>.classpath : name = name of the compilation target. A         -->
-+	<!--                      reference to the classpath structure.            -->
-+	<!-- ===================================================================== -->
-+	<target name="post.compile.name">
-+	</target>
-+
-+	<target name="post.compile. at dot">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do after the compilation target <name>                       -->
-+	<!-- Substitute "name" with the name of the compilation target, eg @dot    -->
-+	<!-- Available parameters :                                                -->
-+	<!--   jar.Location - the location of the compilation results              -->
-+	<!--   <name>.classpath : name = name of the compilation target. A         -->
-+	<!--                      reference to the classpath structure.            -->
-+	<!-- ===================================================================== -->
-+	<target name="post.name">
-+	</target>
-+
-+	<target name="post. at dot">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do before the target gather.bin.parts                         -->
-+	<!-- Available parameters :                                                -->
-+	<!--   build.result.folder - folder containing the build results           -->
-+	<!--   target.folder - destination folder                                  -->
-+	<!-- ===================================================================== -->
-+	<target name="pre.gather.bin.parts">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do after the target gather.bin.parts                         -->
-+	<!-- Available parameters :                                                -->
-+	<!--   build.result.folder - folder containing the build results           -->
-+	<!--   target.folder - destination folder                                  -->
-+	<!-- ===================================================================== -->
-+	<target name="post.gather.bin.parts">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do before the target gather.sources                          -->
-+	<!-- Available parameters :                                                -->
-+	<!--   destination.temp.folder - destination folder                        -->
-+	<!-- ===================================================================== -->
-+	<target name="pre.gather.sources">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do after the target gather.sources                           -->
-+	<!-- Available parameters :                                                -->
-+	<!--   destination.temp.folder - destination folder                        -->
-+	<!-- ===================================================================== -->
-+	<target name="post.gather.sources">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do before the target gather.logs                             -->
-+	<!-- Available parameters :                                                -->
-+	<!--   destination.temp.folder - destination folder                        -->
-+	<!-- ===================================================================== -->
-+	<target name="pre.gather.logs">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do after the target gather.logs                              -->
-+	<!-- Available parameters :                                                -->
-+	<!--   destination.temp.folder - destination folder                        -->
-+	<!-- ===================================================================== -->
-+	<target name="post.gather.logs">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do before the target clean                                   -->
-+	<!-- Available parameters :                                                -->
-+	<!--   destination.temp.folder - destination folder                        -->
-+	<!-- ===================================================================== -->
-+	<target name="pre.clean">
-+	</target>
-+
-+	<!-- ===================================================================== -->
-+	<!-- Steps to do after the target clean                                    -->
-+	<!-- Available parameters :                                                -->
-+	<!--   plugin.destination - final destination of the build                 -->
-+	<!--   build.result.folder - results of the compilation                    -->
-+	<!--   temp.folder - temporary folder                                      -->
-+	<!-- ===================================================================== -->
-+	<target name="post.clean">
-+	</target>
-+</project>
diff --git a/patches/donotstorebuildlogsinfiles.patch b/patches/donotstorebuildlogsinfiles.patch
index d1cdd71..aeec939 100644
--- a/patches/donotstorebuildlogsinfiles.patch
+++ b/patches/donotstorebuildlogsinfiles.patch
@@ -20,15 +20,6 @@
  			<arg line="@${basedir}/${optionsFile} -J-Xmx500M" />
  		</exec>
  		
-@@ -98,7 +98,7 @@
- 		<delete dir="reference/apt" />
- 		<mkdir dir="reference/apt" />
- 
--		<exec dir="." executable="${javadoc15}" output="jdtapt.doc.bin.log">
-+		<exec dir="." executable="${javadoc15}" >
- 			<arg line="@${basedir}/${jdtaptoptionsFile} -J-Xmx500M" />
- 		</exec>
- 		
 --- a/plugins/org.eclipse.pde.doc.user/buildDoc.xml
 +++ b/plugins/org.eclipse.pde.doc.user/buildDoc.xml
 @@ -65,7 +65,7 @@
@@ -53,7 +44,7 @@
  		
 --- a/plugins/org.eclipse.swt/tasks/build.xml	2010-08-06 19:35:21.199817105 +0200
 +++ b/plugins/org.eclipse.swt/tasks/build.xml	2010-08-06 19:36:32.704372712 +0200
-@@ -1121,7 +1121,7 @@
+@@ -1379,7 +1379,7 @@
  				<argument value="${tasks}"/>
  			</commandline>
  		</cvs>
diff --git a/patches/eclipse-add-archs-executable.patch b/patches/eclipse-add-archs-executable.patch
index 10b2c99..dab9e21 100644
--- a/patches/eclipse-add-archs-executable.patch
+++ b/patches/eclipse-add-archs-executable.patch
@@ -50,7 +50,7 @@
  root.macosx.carbon.ppc.permissions.755=${launcherName}.app/Contents/MacOS/${launcherName}
 --- a/features/org.eclipse.equinox.executable/feature.xml
 +++ b/features/org.eclipse.equinox.executable/feature.xml
-@@ -88,6 +88,66 @@
+@@ -90,6 +90,66 @@
           version="0.0.0"
           fragment="true"/>
  
@@ -117,7 +117,7 @@
     <plugin
           id="org.eclipse.equinox.launcher.gtk.linux.ppc"
           os="linux"
-@@ -98,6 +158,56 @@
+@@ -100,6 +160,56 @@
           version="0.0.0"
           fragment="true"/>
  
@@ -174,7 +174,7 @@
     <plugin
           id="org.eclipse.equinox.launcher.gtk.linux.ppc64"
           os="linux"
-@@ -208,25 +318,4 @@
+@@ -230,24 +340,4 @@
           version="0.0.0"
           fragment="true"/>
  
@@ -198,5 +198,4 @@
 -         version="0.0.0"
 -         fragment="true"/>
 -
--
  </feature>
diff --git a/patches/eclipse-add-archs-filesystem.patch b/patches/eclipse-add-archs-filesystem.patch
index bdc4708..6a71f88 100644
--- a/patches/eclipse-add-archs-filesystem.patch
+++ b/patches/eclipse-add-archs-filesystem.patch
@@ -1,9 +1,11 @@
 --- a/features/org.eclipse.platform/feature.xml
 +++ b/features/org.eclipse.platform/feature.xml
-@@ -441,6 +441,66 @@
+@@ -445,6 +445,116 @@
+          version="0.0.0"
+          fragment="true"
           unpack="false"/>
-  
-    <plugin
++	 
++   <plugin
 +         id="org.eclipse.core.filesystem.linux.alpha"
 +         os="linux"
 +         arch="alpha"
@@ -64,18 +66,9 @@
 +         unpack="false"/>
 +
 +   <plugin
-          id="org.eclipse.core.filesystem.linux.ppc"
-          os="linux"
-          arch="ppc"
-@@ -449,6 +509,56 @@
-          version="0.0.0"
-          fragment="true"
-          unpack="false"/>
-+	 
-+   <plugin
-+         id="org.eclipse.core.filesystem.linux.ppc64"
++         id="org.eclipse.core.filesystem.linux.ppc"
 +         os="linux"
-+         arch="ppc64"
++         arch="ppc"
 +         download-size="0"
 +         install-size="0"
 +         version="0.0.0"
@@ -123,4 +116,4 @@
 +         unpack="false"/>
  
     <plugin
-          id="org.eclipse.core.filesystem.linux.x86"
+          id="org.eclipse.core.filesystem.linux.x86_64"
diff --git a/patches/eclipse-add-archs-swt.patch b/patches/eclipse-add-archs-swt.patch
index 93f3afb..f50b708 100644
--- a/patches/eclipse-add-archs-swt.patch
+++ b/patches/eclipse-add-archs-swt.patch
@@ -1,6 +1,6 @@
 --- a/features/org.eclipse.rcp/feature.xml
 +++ b/features/org.eclipse.rcp/feature.xml
-@@ -205,10 +205,87 @@
+@@ -208,10 +208,87 @@
           unpack="false"/>
  
     <plugin
@@ -90,7 +90,7 @@
           download-size="0"
           install-size="0"
           version="0.0.0"
-@@ -238,8 +315,8 @@
+@@ -241,8 +318,8 @@
           unpack="false"/>
  
     <plugin
@@ -101,40 +101,50 @@
           ws="gtk"
           arch="sparc"
           download-size="0"
-@@ -247,12 +324,12 @@
-          version="0.0.0"
-          fragment="true"
+@@ -252,6 +329,17 @@
           unpack="false"/>
--         
-+
+ 
     <plugin
--         id="org.eclipse.swt.gtk.solaris.x86"
--         os="solaris"
 +         id="org.eclipse.swt.gtk.linux.sparc64"
 +         os="linux"
-          ws="gtk"
--         arch="x86"
++         ws="gtk"
 +         arch="sparc64"
-          download-size="0"
-          install-size="0"
-          version="0.0.0"
-@@ -260,10 +337,10 @@
++         download-size="0"
++         install-size="0"
++         version="0.0.0"
++         fragment="true"
++         unpack="false"/>
++
++   <plugin
+          id="org.eclipse.swt.gtk.solaris.x86"
+          os="solaris"
+          ws="gtk"
+@@ -274,6 +362,17 @@
           unpack="false"/>
  
     <plugin
--         id="org.eclipse.swt.gtk.linux.ppc"
 +         id="org.eclipse.swt.gtk.linux.x86"
++         os="linux"
++         ws="gtk"
++         arch="x86"
++         download-size="0"
++         install-size="0"
++         version="0.0.0"
++         fragment="true"
++         unpack="false"/>
++
++   <plugin
+          id="org.eclipse.swt.gtk.linux.x86_64"
           os="linux"
           ws="gtk"
--         arch="ppc"
-+         arch="x86"
+@@ -292,6 +391,28 @@
           download-size="0"
           install-size="0"
           version="0.0.0"
-@@ -293,6 +370,28 @@
-          unpack="false"/>
- 
-    <plugin
++         fragment="true"
++         unpack="false"/>
++
++   <plugin
 +         id="org.eclipse.swt.gtk.solaris.sparc"
 +         os="solaris"
 +         ws="gtk"
@@ -153,10 +163,6 @@
 +         download-size="0"
 +         install-size="0"
 +         version="0.0.0"
-+         fragment="true"
-+         unpack="false"/>
-+
-+   <plugin
-          id="org.eclipse.swt.carbon.macosx"
-          os="macosx"
-          ws="carbon"
+          fragment="true"
+          unpack="false"/>
+ 
diff --git a/patches/eclipse-add-ppc64-sparc64-s390-s390x.patch b/patches/eclipse-add-ppc64-sparc64-s390-s390x.patch
index 9da34b5..60f0b41 100644
--- a/patches/eclipse-add-ppc64-sparc64-s390-s390x.patch
+++ b/patches/eclipse-add-ppc64-sparc64-s390-s390x.patch
@@ -1,6 +1,6 @@
 --- a/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
 +++ b/plugins/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
-@@ -48,6 +48,14 @@
+@@ -49,6 +49,14 @@
  			Platform.ARCH_X86, //
  			Platform.ARCH_AMD64, // 
  			Platform.ARCH_IA64, //
@@ -35,10 +35,10 @@
  	 * Constant string (value "win32") indicating the platform is running on a
 --- a/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginConverterImpl.java
 +++ b/plugins/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/PluginConverterImpl.java
-@@ -63,7 +63,7 @@
- 	private static final String MANIFEST_VERSION = "Manifest-Version"; //$NON-NLS-1$
+@@ -64,7 +64,7 @@
  	private static final String PLUGIN_PROPERTIES_FILENAME = "plugin"; //$NON-NLS-1$
  	private static PluginConverterImpl instance;
+ 	@SuppressWarnings("deprecation")
 -	private static final String[] ARCH_LIST = {org.eclipse.osgi.service.environment.Constants.ARCH_PA_RISC, org.eclipse.osgi.service.environment.Constants.ARCH_PPC, org.eclipse.osgi.service.environment.Constants.ARCH_SPARC, org.eclipse.osgi.service.environment.Constants.ARCH_X86, org.eclipse.osgi.service.environment.Constants.ARCH_AMD64, org.eclipse.osgi.service.environment.Constants.ARCH_IA64};
 +	private static final String[] ARCH_LIST = {org.eclipse.osgi.service.environment.Constants.ARCH_PA_RISC, org.eclipse.osgi.service.environment.Constants.ARCH_PPC, org.eclipse.osgi.service.environment.Constants.ARCH_SPARC, org.eclipse.osgi.service.environment.Constants.ARCH_X86, org.eclipse.osgi.service.environment.Constants.ARCH_AMD64, org.eclipse.osgi.service.environment.Constants.ARCH_IA64, org.eclipse.osgi.service.environment.Constants.ARCH_PPC64, org.eclipse.osgi.service.environment.Constants.ARCH_SPARC64, org.eclipse.osgi.service.environment.Constants.ARCH_S390, org.eclipse.osgi.service.environment.Constants.ARCH_S390X, org.eclipse.osgi.service.environment.Constants.ARCH_ALPHA, org.eclipse.osgi.service.environment.Constants.ARCH_ARM, org.eclipse.osgi.service.environment.Constants.ARCH_MIPS, org.eclipse.osgi.service.environment.Constants.ARCH_MIPSEL};
  	static public final String FRAGMENT_MANIFEST = "fragment.xml"; //$NON-NLS-1$
diff --git a/patches/eclipse-addArchesAnd64bitSWT.patch b/patches/eclipse-addArchesAnd64bitSWT.patch
index f9506b9..eea481b 100644
--- a/patches/eclipse-addArchesAnd64bitSWT.patch
+++ b/patches/eclipse-addArchesAnd64bitSWT.patch
@@ -1,6 +1,6 @@
 --- a/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh.orig	2009-12-08 09:00:12.000000000 +0200
 +++ b/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	2010-04-13 17:24:11.418047380 +0300
-@@ -73,6 +73,18 @@ if [ "${MODEL}" = "" ]; then
+@@ -89,6 +89,18 @@ if [ "${MODEL}" = "" ]; then
  	fi
  fi
  case $MODEL in
diff --git a/patches/eclipse-buildswtnatives.patch b/patches/eclipse-buildswtnatives.patch
index 19a4fdf..759776e 100644
--- a/patches/eclipse-buildswtnatives.patch
+++ b/patches/eclipse-buildswtnatives.patch
@@ -1,6 +1,6 @@
 --- a/plugins/org.eclipse.swt/buildFragment.xml
 +++ b/plugins/org.eclipse.swt/buildFragment.xml
-@@ -560,4 +560,28 @@
+@@ -558,4 +558,28 @@
  			extraManifests="${extraManifests}"
  			extraSourceLocations="${extraSourceLocations}"/>
  	</target>
diff --git a/patches/eclipse-core-resources-compilation-profile.patch b/patches/eclipse-core-resources-compilation-profile.patch
new file mode 100644
index 0000000..1b14660
--- /dev/null
+++ b/patches/eclipse-core-resources-compilation-profile.patch
@@ -0,0 +1,10 @@
+--- plugins/org.eclipse.core.resources/build.properties.orig	2011-05-10 08:08:37.693585717 -0500
++++ plugins/org.eclipse.core.resources/build.properties	2011-05-10 08:08:42.968582268 -0500
+@@ -25,3 +25,6 @@
+ jars.extra.classpath = platform:/plugin/org.apache.ant/lib/ant.jar
+ javacWarnings..=-raw,-unchecked
+ javacWarnings.ant_tasks/resources-ant.jar=-raw,-unchecked
++jre.compilation.profile = J2SE-1.5
++javacSource=1.5
++javacTarget=1.5
++
diff --git a/patches/eclipse-equinox-util.patch b/patches/eclipse-equinox-util.patch
new file mode 100644
index 0000000..ee4fd89
--- /dev/null
+++ b/patches/eclipse-equinox-util.patch
@@ -0,0 +1,9 @@
+--- plugins/org.eclipse.equinox.util/build.properties.orig	2011-05-17 11:47:07.428374923 -0500
++++ plugins/org.eclipse.equinox.util/build.properties	2011-05-17 14:36:32.199701620 -0500
+@@ -16,3 +16,6 @@
+                about.html,\
+                plugin.properties
+ src.includes = about.html
++javacSource=1.5
++javacTarget=jsr14
++
diff --git a/patches/eclipse-fix-osgi-compiler-settings.patch b/patches/eclipse-fix-osgi-compiler-settings.patch
new file mode 100644
index 0000000..e5c464f
--- /dev/null
+++ b/patches/eclipse-fix-osgi-compiler-settings.patch
@@ -0,0 +1,13 @@
+--- plugins/org.eclipse.osgi/build.xml.orig	2011-04-30 11:48:03.865460055 -0500
++++ plugins/org.eclipse.osgi/build.xml	2011-04-30 11:48:09.497445410 -0500
+@@ -17,8 +17,8 @@
+ 	<property name="logExtension" value=".log"/>
+ 	<property name="compilerArg" value=""/>
+ 	<property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/>
+-	<property name="bundleJavacSource" value="1.3"/>
+-	<property name="bundleJavacTarget" value="1.2"/>
++	<property name="bundleJavacSource" value="1.5"/>
++	<property name="bundleJavacTarget" value="jsr14"/>
+ 	<property name="bundleBootClasspath" value="osgi/exceptions.jar;osgi/xmlParserAPIs.jar;${CDC-1.1/Foundation-1.1}"/>
+ 
+ 	<target name="init" depends="properties">
diff --git a/patches/eclipse-no-jetty5.patch b/patches/eclipse-no-jetty5.patch
index 8ecc402..0d47ae5 100644
--- a/patches/eclipse-no-jetty5.patch
+++ b/patches/eclipse-no-jetty5.patch
@@ -1,6 +1,6 @@
 --- a/features/master-equinox/feature.xml
 +++ b/features/master-equinox/feature.xml
-@@ -39,14 +39,14 @@
+@@ -28,14 +28,14 @@
           install-size="0"
           version="0.0.0"
           unpack="false"/>
diff --git a/patches/eclipse-nosourcebundlesfordependencies.patch b/patches/eclipse-nosourcebundlesfordependencies.patch
index eb31625..ab14e22 100644
--- a/patches/eclipse-nosourcebundlesfordependencies.patch
+++ b/patches/eclipse-nosourcebundlesfordependencies.patch
@@ -1,45 +1,41 @@
---- a/features/org.eclipse.platform/sourceTemplateFeature/build.properties
-+++ b/features/org.eclipse.platform/sourceTemplateFeature/build.properties
-@@ -15,7 +15,7 @@
- feature.properties,\
- license.html
+--- a/features/org.eclipse.platform/sourceTemplateFeature/build.properties.orig	2011-05-03 13:46:41.000000000 -0500
++++ b/features/org.eclipse.platform/sourceTemplateFeature/build.properties	2011-05-08 13:11:40.376862727 -0500
+@@ -13,7 +13,7 @@
+ feature.xml,\
+ feature.properties
  
--generate.feature at org.eclipse.rcp.source=org.eclipse.rcp,plugin at com.ibm.icu.source;version=4.2.1.qualifier;unpack="false"
+-generate.feature at org.eclipse.rcp.source=org.eclipse.rcp,plugin at com.ibm.icu.source;version=4.4.2.qualifier;unpack="false"
 +generate.feature at org.eclipse.rcp.source=org.eclipse.rcp
  generate.feature at org.eclipse.equinox.p2.user.ui.source=org.eclipse.equinox.p2.user.ui,\
- 	   plugin at org.eclipse.ecf.source;version=3.0.0.qualifier;unpack="false",\
- 	   plugin at org.eclipse.ecf.ssl.source;version=1.0.0.qualifier;unpack="false",\
-@@ -24,9 +24,7 @@
- 	   plugin at org.eclipse.ecf.provider.filetransfer.source;version=3.0.0.qualifier;unpack="false",\
+ 	   feature at org.eclipse.equinox.p2.core.feature.source,\
+ 	   feature at org.eclipse.equinox.p2.extras.feature.source,\
+@@ -25,12 +25,10 @@
+ 	   plugin at org.eclipse.ecf.provider.filetransfer.source;version=3.2.0.qualifier;unpack="false",\
  	   plugin at org.eclipse.ecf.provider.filetransfer.ssl.source;version=1.0.0.qualifier;unpack="false",\
- 	   plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source;version=3.0.0.qualifier;unpack="false",\
+ 	   plugin at org.eclipse.ecf.provider.filetransfer.httpclient.source;version=4.0.0.qualifier;unpack="false",\
 -	   plugin at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source;version=1.0.0.qualifier;unpack="false",\
 -	   plugin at org.apache.commons.codec.source;version=1.3.0.qualifier;unpack="false,\
 -	   plugin at org.apache.commons.httpclient.source;version=3.1.0.qualifier;unpack="false"   
 +	   plugin at org.eclipse.ecf.provider.filetransfer.httpclient.ssl.source;version=1.0.0.qualifier;unpack="false"
-    
+     
+ 
  
  
---- a/features/org.eclipse.sdk/build.properties
-+++ b/features/org.eclipse.sdk/build.properties
-@@ -11,27 +11,14 @@
- bin.includes=epl-v10.html,eclipse_update_120.jpg,feature.xml,feature.properties,license.html
  
- generate.feature at org.eclipse.platform.source=org.eclipse.platform,feature at org.eclipse.rcp.source,feature at org.eclipse.equinox.p2.user.ui.source;optional="true",plugin at org.eclipse.platform.doc.isv;unpack="false",\
--  plugin at org.apache.ant.source;version=1.7.1.qualifier;unpack="false",\
--  plugin at com.jcraft.jsch.source;version=0.1.41.qualifier;unpack="false",\
+-   
+\ No newline at end of file
++ 
+--- a/features/org.eclipse.sdk/build.properties.orig	2011-04-18 10:30:53.000000000 -0500
++++ b/features/org.eclipse.sdk/build.properties	2011-05-08 13:15:15.699413792 -0500
+@@ -16,22 +16,9 @@
    exclude at org.eclipse.platform.doc.user
     
  generate.feature at org.eclipse.jdt.source=org.eclipse.jdt, plugin at org.eclipse.jdt.doc.isv;unpack="false",\
 -plugin at org.junit.source;version=3.8.2.qualifier;unpack="false",\
--plugin at org.junit.source;version=4.8.1.qualifier;unpack="false",\
+-plugin at org.junit.source;version=4.8.2.qualifier;unpack="false",\
 -plugin at org.hamcrest.core.source;version=1.1.0.qualifier;unpack="false",\
--exclude at org.eclipse.jdt.doc.user
--generate.feature at org.eclipse.pde.source=org.eclipse.pde,plugin at org.objectweb.asm.source;version=3.2.0.qualifier;unpack="false",\exclude at org.eclipse.pde.doc.user
-+exclude at org.eclipse.jdt.doc.user,\
-+exclude at org.junit4
-+generate.feature at org.eclipse.pde.source=org.eclipse.pde,exclude at org.eclipse.pde.doc.user
- generate.feature at org.eclipse.pde.p2.source=org.eclipse.pde.p2
+ exclude at org.eclipse.jdt.doc.user
+ generate.feature at org.eclipse.pde.source=org.eclipse.pde,plugin at org.objectweb.asm.source;version=3.3.1.qualifier;unpack="false",\exclude at org.eclipse.pde.doc.user
  generate.feature at org.eclipse.cvs.source=org.eclipse.cvs
 -generate.feature at org.eclipse.help.source=org.eclipse.help,\
 -  plugin at javax.servlet.source;version=2.5.0.qualifier;unpack="false",\
@@ -47,11 +43,11 @@
 -  plugin at org.apache.jasper.source;version=5.5.17.qualifier;unpack="false",\
 -  plugin at org.apache.commons.el.source;version=1.0.0.qualifier;unpack="false",\
 -  plugin at org.apache.commons.logging.source;version=1.0.4.qualifier;unpack="false",\
--  plugin at org.apache.lucene.source;version=1.9.1.qualifier;unpack="false",\
--  plugin at org.apache.lucene.analysis.source;version=1.9.1.qualifier;unpack="false",\
+-  plugin at org.apache.lucene.source;version=2.9.1.qualifier;unpack="false",\
+-  plugin at org.apache.lucene.analysis.source;version=2.9.1.qualifier;unpack="false",\
+-  plugin at org.apache.lucene.core.source;version=2.9.1.qualifier;unpack="false",\
 -  plugin at org.mortbay.jetty.util.source;version=6.1.23.qualifier;unpack="false",\
 -  plugin at org.mortbay.jetty.server.source;version=6.1.23.qualifier;unpack="false"
 +generate.feature at org.eclipse.help.source=org.eclipse.help
  
  generatedVersionLength=45
-\ No newline at end of file
diff --git a/patches/eclipse-swt-buildagainstxulrunner.patch b/patches/eclipse-swt-buildagainstxulrunner.patch
index b519883..a8228dc 100644
--- a/patches/eclipse-swt-buildagainstxulrunner.patch
+++ b/patches/eclipse-swt-buildagainstxulrunner.patch
@@ -7,7 +7,7 @@ retrieving revision 1.54
 diff -u -r1.54 build.sh
 --- a/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	29 May 2009 21:30:14 -0000	1.54
 +++ b/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	1 Jun 2009 18:44:43 -0000
-@@ -153,19 +153,19 @@
+@@ -169,19 +169,19 @@
  		MOZILLA_LIBS=`pkg-config --libs mozilla-xpcom`
  		export MOZILLA_INCLUDES
  		export MOZILLA_LIBS
diff --git a/patches/eclipse-swt-compile-xpt.patch b/patches/eclipse-swt-compile-xpt.patch
deleted file mode 100644
index 3e0d348..0000000
--- a/patches/eclipse-swt-compile-xpt.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Description: Build .xpt file if it does not exit
-Author: Benjamin Drung
-Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=305569
-
---- a/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	
-+++ b/plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/build.sh	
-@@ -24,6 +24,24 @@ if [ "${CC}" = "" ]; then
- 	export CC
- fi
- 
-+COMPONENTS_DIR=$(pwd)/../../org.eclipse.swt/components
-+# Check if we have to compile external.xpt from external.idl
-+if test ! -f ${COMPONENTS_DIR}/external.xpt; then
-+	if test ! -f ${COMPONENTS_DIR}/external.idl; then
-+		echo "Can't find ${COMPONENTS_DIR}/external.idl"
-+		exit 1
-+	fi
-+
-+	IDLDIR=$(pkg-config --variable=idldir libxul | sed 's@/stable$@@')/unstable
-+	if test ! -d ${IDLDIR}; then
-+		IDLDIR=$(pkg-config --variable=idldir libxul)
-+	fi
-+	XPIDL=$(pkg-config --variable=sdkdir libxul)/bin/xpidl
-+
-+	echo "${XPIDL} -m typelib -I ${IDLDIR} -e ${COMPONENTS_DIR}/external.xpt ${COMPONENTS_DIR}/external.idl"
-+	${XPIDL} -m typelib -I ${IDLDIR} -e ${COMPONENTS_DIR}/external.xpt ${COMPONENTS_DIR}/external.idl
-+fi
-+
- # Determine which OS we are on
- if [ "${OS}" = "" ]; then
- 	OS=`uname -s`
diff --git a/patches/eclipse-use-newer-commons-codec.patch b/patches/eclipse-use-newer-commons-codec.patch
deleted file mode 100644
index 1ab7b33..0000000
--- a/patches/eclipse-use-newer-commons-codec.patch
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/features/org.eclipse.equinox.p2.user.ui/feature.xml
-+++ b/features/org.eclipse.equinox.p2.user.ui/feature.xml
-@@ -298,21 +298,21 @@
-          id="org.apache.commons.codec"
-          download-size="0"
-          install-size="0"
--         version="1.3.0.qualifier"
-+         version="0.0.0"
-          unpack="false"/>
- 
-    <plugin
-          id="org.apache.commons.httpclient"
-          download-size="0"
-          install-size="0"
--         version="3.1.0.qualifier"
-+         version="0.0.0"
-          unpack="false"/>
- 
-    <plugin
-          id="org.apache.commons.logging"
-          download-size="0"
-          install-size="0"
--         version="1.0.4.qualifier"
-+         version="0.0.0"
-          unpack="false"/>
- 
- 
diff --git a/patches/eclipse-xpcom-h.patch b/patches/eclipse-xpcom-h.patch
new file mode 100644
index 0000000..e2dfbc4
--- /dev/null
+++ b/patches/eclipse-xpcom-h.patch
@@ -0,0 +1,14 @@
+diff -up ./xpcom.h.fix ./xpcom.h
+--- ./xpcom.h.fix	2010-09-17 11:31:46.317620889 -0400
++++ ./xpcom.h	2010-09-17 11:33:58.558646774 -0400
+@@ -36,6 +36,10 @@
+ #ifdef __APPLE__
+ #define NO__1NS_1InitXPCOM2
+ #endif /* __APPLE__ */
++#ifdef __linux__
++#define NO__1Call__IIIIII
++#define NO__1Call__JJJJJI
++#endif /* __linux__ */
+ #endif /* _WIN32 */
+ 
+ #define SWT_XREInitEmbedding nsresult (*)(nsILocalFile *,nsILocalFile *,nsIDirectoryServiceProvider *,nsStaticModuleInfo const *,PRUint32)
diff --git a/patches/java-home.patch b/patches/java-home.patch
deleted file mode 100644
index a9abc1e..0000000
--- a/patches/java-home.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Description: Do not overwrite exported JAVA_HOME variable
-Author: Benjamin Drung <bdrung at ubuntu.com>
-Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=317634
-
---- eclipse-3.6.0.orig/eclipse/features/org.eclipse.equinox.executable/library/gtk/build.sh
-+++ eclipse-3.6.0/eclipse/features/org.eclipse.equinox.executable/library/gtk/build.sh
-@@ -161,7 +161,7 @@ DEFAULT_OS_ARCH="$defaultOSArch"
- DEFAULT_WS="$defaultWS"
- DEFAULT_JAVA=$defaultJava
- 
--if [ -n  $javaHome ]; then
-+if [ -z "$JAVA_HOME" -a -n  $javaHome ]; then
- 	JAVA_HOME=$javaHome
- 	export JAVA_HOME
- fi
diff --git a/patches/junit4-nochecksum.patch b/patches/junit4-nochecksum.patch
deleted file mode 100644
index 76c8753..0000000
--- a/patches/junit4-nochecksum.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/MANIFEST.MF.orig	2010-05-20 01:33:28.000000000 +0300
-+++ plugins/org.junit_4.8.1.v4_8_1_v20100427-1100/META-INF/MANIFEST.MF	2010-07-07 13:23:16.258708324 +0300
-@@ -29,18 +29,4 @@ Export-Package: junit.extensions;version
- Bundle-Version: 4.8.1.v4_8_1_v20100427-1100
- Bundle-ManifestVersion: 2
- 
--Name: META-INF/eclipse.inf
--SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
--
--Name: junit.jar
--SHA1-Digest: zPmrTAyba4ZMLFgf8QAHILhgZ9o=
--
--Name: about_files/cpl-v10.html
--SHA1-Digest: REygXYi+T14Sj1v8XnnKycNjpN4=
--
--Name: about.html
--SHA1-Digest: w3lIEWRkSmgtAui4qxGRJmqgDw4=
--
--Name: plugin.properties
--SHA1-Digest: f1fR+Wdi2X4qLQSIBEgwenAuk2c=
--
-+
diff --git a/patches/no-gnome-vfs.patch b/patches/no-gnome-vfs.patch
index 4d0517d..083f1ca 100644
--- a/patches/no-gnome-vfs.patch
+++ b/patches/no-gnome-vfs.patch
@@ -1,6 +1,6 @@
---- plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java	2 Nov 2010 21:53:56 -0000	1.81.2.1
-+++ plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java	25 Mar 2011 14:53:53 -0000
-@@ -94,34 +94,21 @@
+--- plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java.orig	2010-11-02 23:53:56.000000000 +0200
++++ plugins/org.eclipse.swt/Eclipse SWT Program/gtk/org/eclipse/swt/program/Program.java	2011-04-08 22:11:51.796383572 +0300
+@@ -94,34 +94,21 @@ static int getDesktop(final Display disp
  	 * The workaround is to simply check that the window manager is a 
  	 * compliant one (property _NET_SUPPORTING_WM_CHECK) and to attempt to load 
  	 * our native library that depends on gnome-vfs.
@@ -43,7 +43,7 @@
  			} else {
  				buffer =  Converter.wcsToMbcs(null, "libgio-2.0.so.0", true);
  			}
-@@ -133,7 +120,24 @@
+@@ -133,7 +120,24 @@ static int getDesktop(final Display disp
  					desktop = DESKTOP_GIO;
  				}
  				OS.dlclose(libgio);
@@ -69,7 +69,7 @@
  				/* Check for libgnomevfs-2 version 2.4 */
  				buffer = Converter.wcsToMbcs(null, "libgnomevfs-2.so.0", true);
  				int /*long*/ libgnomevfs = OS.dlopen(buffer, OS.RTLD_LAZY);
-@@ -974,14 +978,17 @@
+@@ -974,14 +978,17 @@ boolean gio_execute(String fileName) {
  	if (application != 0) {
  		byte[] fileNameBuffer = Converter.wcsToMbcs (null, fileName, true);
  		int /*long*/ file = 0;
@@ -94,3 +94,11 @@
  			OS.g_list_free (list);
  			OS.g_object_unref (file);
  		}
+@@ -1075,6 +1082,7 @@ static boolean launch (Display display, 
+ 	switch (getDesktop (display)) {
+ 		case DESKTOP_GIO:
+ 			if (gio_launch (fileName)) return true;
++			break;
+ 		case DESKTOP_GNOME_24:
+ 			if (gnome_24_launch (fileName)) return true;
+ 		default:
diff --git a/patches/remove-old-ant-plugins.patch b/patches/remove-old-ant-plugins.patch
new file mode 100644
index 0000000..2648bb8
--- /dev/null
+++ b/patches/remove-old-ant-plugins.patch
@@ -0,0 +1,14 @@
+--- plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/MANIFEST.MF.sav	2010-05-20 01:14:14.000000000 +0300
++++ plugins/org.apache.ant_1.7.1.v20100518-1145/META-INF/MANIFEST.MF	2011-04-06 10:54:32.654401348 +0300
+@@ -4,9 +4,8 @@ Bundle-ClassPath: lib/ant.jar,lib/ant-an
+  jar,lib/ant-apache-regexp.jar,lib/ant-apache-resolver.jar,lib/ant-com
+  mons-logging.jar,lib/ant-commons-net.jar,lib/ant-jai.jar,lib/ant-java
+  mail.jar,lib/ant-jdepend.jar,lib/ant-jmf.jar,lib/ant-jsch.jar,lib/ant
+- -junit.jar,lib/ant-launcher.jar,lib/ant-netrexx.jar,lib/ant-nodeps.ja
+- r,lib/ant-starteam.jar,lib/ant-stylebook.jar,lib/ant-swing.jar,lib/an
+- t-trax.jar,lib/ant-weblogic.jar
++ -junit.jar,lib/ant-launcher.jar,lib/ant-netrexx.jar,lib/ant-starteam.
++ jar,lib/ant-stylebook.jar,lib/ant-swing.jar,lib/ant-weblogic.jar
+ Bundle-Vendor: %providerName
+ Bundle-Localization: plugin
+ Bundle-RequiredExecutionEnvironment: J2SE-1.2
diff --git a/patches/tests-noequinoxregiontests.patch b/patches/tests-noequinoxregiontests.patch
new file mode 100644
index 0000000..7c81a35
--- /dev/null
+++ b/patches/tests-noequinoxregiontests.patch
@@ -0,0 +1,16 @@
+--- feature.xml.fewerEquinoxTests	2011-06-28 11:37:42.175073433 -0400
++++ feature.xml	2011-06-28 11:37:56.250256555 -0400
+@@ -365,11 +365,13 @@
+          install-size="0"
+          version="0.0.0"/>
+          
++<!--
+    <plugin
+          id="org.eclipse.equinox.region.tests"
+          download-size="0"
+          install-size="0"
+          version="0.0.0"/>
++-->
+ 
+    <plugin
+          id="org.eclipse.equinox.security.tests"
diff --git a/patches/tests-org.eclipse.ant.tests.core.patch b/patches/tests-org.eclipse.ant.tests.core.patch
index 3b7ef24..a2eebb7 100644
--- a/patches/tests-org.eclipse.ant.tests.core.patch
+++ b/patches/tests-org.eclipse.ant.tests.core.patch
@@ -3,24 +3,24 @@
 Index: tests/org/eclipse/ant/tests/core/tests/OptionTests.java
 ===================================================================
 RCS file: /cvsroot/eclipse/org.eclipse.ant.tests.core/tests/org/eclipse/ant/tests/core/tests/OptionTests.java,v
-retrieving revision 1.67.2.2
-diff -u -r1.67.2.2 OptionTests.java
---- tests/org/eclipse/ant/tests/core/tests/OptionTests.java	9 Nov 2009 17:22:09 -0000	1.67.2.2
-+++ tests/org/eclipse/ant/tests/core/tests/OptionTests.java	23 Apr 2010 12:42:41 -0000
+retrieving revision 1.71
+diff -u -r1.71 OptionTests.java
+--- tests/org/eclipse/ant/tests/core/tests/OptionTests.java	1 Feb 2011 17:14:13 -0000	1.71
++++ tests/org/eclipse/ant/tests/core/tests/OptionTests.java	30 Jun 2011 19:30:21 -0000
 @@ -27,7 +27,7 @@
  	
- 	protected static final String UNKNOWN_ARG= "Unknown argument: ";
- 	protected static final String START_OF_HELP= "ant [options] [target [target2 [target3] ...]]";
--	protected static final String VERSION= "Apache Ant version 1.7.1 compiled on June 27 2008";
-+	protected static final String VERSION= "Apache Ant version 1.7.1";
- 	protected static final String PLUGIN_VERSION= "org.apache.ant_1.7.1";
+ 	protected static final String UNKNOWN_ARG = "Unknown argument: ";
+ 	protected static final String START_OF_HELP = "ant [options] [target [target2 [target3] ...]]";
+-	protected static final String VERSION = "Apache Ant(TM) version 1.8.2 compiled on December 20 2010";
++	protected static final String VERSION = "Apache Ant(TM) version 1.8.2";
+ 	protected static final String PLUGIN_VERSION = "org.apache.ant_1.8.2";
  	 
  	public OptionTests(String name) {
 @@ -58,7 +58,7 @@
  	public void testVersion() throws CoreException {
  		run("TestForEcho.xml", new String[]{"-version"});
  		assertTrue("One message should have been logged", AntTestChecker.getDefault().getMessagesLoggedCount() == 1);
--		assertTrue("Version is incorrect", VERSION.equals(getLastMessageLogged()));
+-		assertEquals("Version is incorrect: ", VERSION, getLastMessageLogged());
 +		assertTrue("Version is incorrect", getLastMessageLogged().startsWith(VERSION));
  	}
  	
diff --git a/patches/tests-org.eclipse.ant.tests.ui.patch b/patches/tests-org.eclipse.ant.tests.ui.patch
index 9799083..85aa5c6 100644
--- a/patches/tests-org.eclipse.ant.tests.ui.patch
+++ b/patches/tests-org.eclipse.ant.tests.ui.patch
@@ -3,16 +3,16 @@
 Index: Ant Debug Tests/org/eclipse/ant/tests/ui/debug/PropertyTests.java
 ===================================================================
 RCS file: /cvsroot/eclipse/org.eclipse.ant.tests.ui/Ant Debug Tests/org/eclipse/ant/tests/ui/debug/PropertyTests.java,v
-retrieving revision 1.12
-diff -u -r1.12 PropertyTests.java
---- Ant Debug Tests/org/eclipse/ant/tests/ui/debug/PropertyTests.java	13 Aug 2008 15:32:16 -0000	1.12
-+++ Ant Debug Tests/org/eclipse/ant/tests/ui/debug/PropertyTests.java	23 Apr 2010 17:22:56 -0000
+retrieving revision 1.16
+diff -u -r1.16 PropertyTests.java
+--- Ant Debug Tests/org/eclipse/ant/tests/ui/debug/PropertyTests.java	1 Feb 2011 17:14:14 -0000	1.16
++++ Ant Debug Tests/org/eclipse/ant/tests/ui/debug/PropertyTests.java	30 Jun 2011 19:28:06 -0000
 @@ -24,7 +24,7 @@
  
  public class PropertyTests extends AbstractAntDebugTest {
  	
--	private static final String ANT_VERSION = "Apache Ant version 1.7.1 compiled on June 27 2008";
-+	private static final String ANT_VERSION = "Apache Ant version 1.7.1";
+-	private static final String ANT_VERSION = "Apache Ant(TM) version 1.8.2 compiled on December 20 2010";
++	private static final String ANT_VERSION = "Apache Ant(TM) version 1.8.2";
  
      public PropertyTests(String name) {
  		super(name);
@@ -25,12 +25,9 @@ diff -u -r1.12 PropertyTests.java
  			assertProperty(thread, "ant.project.name", "debugEcho");
  		} finally {
  			terminateAndRemove(thread);
-@@ -140,13 +140,20 @@
- 			removeAllBreakpoints();
- 		}
+@@ -142,11 +142,18 @@
  	}
--
-+	
+ 
  	private AntStackFrame assertProperty(AntThread thread, String propertyName, String propertyValue) throws DebugException {
 +		return assertProperty(thread, propertyName, propertyValue, true);
 +	}
@@ -40,7 +37,7 @@ diff -u -r1.12 PropertyTests.java
  		AntProperty property= frame.findProperty(propertyName);
  		assertNotNull("Did not find property: " + propertyName, property);
  		AntValue value= (AntValue) property.getValue();
--		assertTrue("Value of property" + propertyName + " incorrect: " + value.getValueString(), propertyValue.equals(value.getValueString()));
+-		assertEquals("Value of property "+propertyName+ " incorrect", propertyValue, value.getValueString());
 +		if (checkFullProperty)
 +			assertTrue("Value of property" + propertyName + " incorrect: " + value.getValueString(), propertyValue.equals(value.getValueString()));
 +		else
diff --git a/patches/webkitgtk.patch b/patches/webkitgtk.patch
deleted file mode 100644
index 460ad0c..0000000
--- a/patches/webkitgtk.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_linux.mak.sav	2011-03-07 23:32:06.523294166 +0200
-+++ plugins/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_linux.mak	2011-03-07 23:32:41.850888713 +0200
-@@ -92,7 +92,7 @@ MOZILLAEXCLUDES = -DNO__1XPCOMGlueShutdo
- XULRUNNEREXCLUDES = -DNO__1NS_1InitXPCOM2
- 
- WEBKITCFLAGS = `pkg-config --cflags gtk+-2.0` -I/usr/include/webkit-1.0 -I/usr/include/libsoup-2.4
--WEBKITLIBS = -lwebkit-1.0
-+WEBKITLIBS = `pkg-config --libs webkit-1.0`
- 
- SWT_OBJECTS = swt.o c.o c_stats.o callback.o
- CDE_OBJECTS = swt.o cde.o cde_structs.o cde_stats.o
diff --git a/pdebuild.properties b/pdebuild.properties
index b6d8fd7..8c34c70 100644
--- a/pdebuild.properties
+++ b/pdebuild.properties
@@ -2,9 +2,9 @@ buildArch=x86
 ws=gtk
 os=linux
 
-buildId=M20110210-1200
-buildTag=M20110210-1200
-label=3.6.2
+buildId=3.7.0
+buildTag=3.7.0
+label=3.7.0
 bootclasspath=/usr/lib/jvm/java/jre/lib/rt.jar:/usr/lib/jvm/java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib64/jvm/java/jre/lib/rt.jar:/usr/lib64/jvm/java/jre/lib/jce.jar
 #build.compiler=org.eclipse.jdt.core.JDTCompilerAdapter
 
diff --git a/pdebuild.xml b/pdebuild.xml
index 87f0584..b192d2c 100644
--- a/pdebuild.xml
+++ b/pdebuild.xml
@@ -60,6 +60,7 @@
 		<file name="org.eclipse.core.runtime.compatibility" />
 		<file name="org.eclipse.equinox.p2.engine" />
 		<file name="org.eclipse.equinox.p2.director" />
+		<file name="org.eclipse.equinox.p2.publisher.eclipse" />
 		<file name="org.eclipse.equinox.p2.repository.tools" />
 		<file name="org.eclipse.equinox.p2.updatesite" />
 		<file name="org.eclipse.pde.build" />
@@ -73,7 +74,7 @@
 		<file name="org.eclipse.equinox.http.servlet" />
 		<file name="org.eclipse.equinox.p2.touchpoint.eclipse" />
 		<file name="org.eclipse.equinox.p2.touchpoint.natives" />
-		<!--<file name="org.eclipse.equinox.http.jetty_2.0.0" />-->
+		<file name="org.apache.lucene" />
 		<!--
 		<file name="org.eclipse.help" />
 		<file name="org.eclipse.help.base" />
@@ -152,6 +153,10 @@
 			<fileset dir="${sdkSource}/plugins/"
 			         includes="${generatedBuildXmls}" />
 		</copy>
+                <replace dir="generatedScripts" token="../../../../../../../../../usr/lib/eclipse/plugins/" />
+                <replace dir="generatedScripts" token="../../../../../../../../../usr/lib64/eclipse/plugins/" />
+                <replace dir="generatedScripts" token="../../../../../../../../../usr/share/eclipse/plugins/" />
+                <replace dir="generatedScripts" token="../../../../../../../../../.." />
 		<tar destfile="eclipse-build-generatedScripts.tar.bz2"
 		     compression="bzip2"
 		     basedir="generatedScripts"
@@ -197,7 +202,7 @@
 			<arg line="-buildfile ../pdebuild.xml generateScripts2" />
 			<arg line="-DbuildArch=${buildArch} " />
 			<arg line="-DbuildId=${buildId} " />
-			<arg line="-debug -consolelog " />
+			<arg line="-debug -consolelog" />
 		</java>
 		<taskdef name="eclipse.versionReplacer"
 		         classname="org.eclipse.pde.internal.build.tasks.GenericVersionReplacer"
diff --git a/pdebuild/eclipse-copy-platform.sh b/pdebuild/eclipse-copy-platform.sh
index 05ed48f..c8485ba 100755
--- a/pdebuild/eclipse-copy-platform.sh
+++ b/pdebuild/eclipse-copy-platform.sh
@@ -39,7 +39,7 @@ if [ $# -gt 0 ]; then
       while read f; do
          [ ! -e $f ] && ln -s $eclipse/$f $f
       done
-      (cd $eclipse/dropins; ls -d *"$optional"*) |
+      (cd $eclipse/dropins; ls -d "$optional") |
       while read f; do
 	  if [ -e $eclipse/dropins/$f/eclipse ]; then
 	      (cd $eclipse/dropins/$f/eclipse; ls -d plugins/* features/*) |
@@ -55,7 +55,7 @@ if [ $# -gt 0 ]; then
 	      done
           fi
       done
-      (cd $datadir/dropins; ls -d *"$optional"*) |
+      (cd $datadir/dropins; ls -d "$optional") |
       while read f; do
 	  if [ -e $datadir/dropins/$f/eclipse ]; then
 	      (cd $datadir/dropins/$f/eclipse; ls -d plugins/* features/*) |
diff --git a/pdebuild/eclipse-pdebuild.sh b/pdebuild/eclipse-pdebuild.sh
index 71cc3be..209f03e 100755
--- a/pdebuild/eclipse-pdebuild.sh
+++ b/pdebuild/eclipse-pdebuild.sh
@@ -263,8 +263,10 @@ fi
 
 echo "Starting build:"
 
+launcherJar=$(ls $SDK/plugins | grep "org.eclipse.equinox.launcher_")
+
 if [ $testing != true ]; then
-  java -cp $SDK/startup.jar \
+  java -cp $SDK/plugins/${launcherJar} \
     org.eclipse.core.launcher.Main \
     -application org.eclipse.ant.core.antRunner \
     $debugPlatformArgs \
@@ -284,7 +286,7 @@ if [ $testing != true ]; then
 
 else
   echo "\
-  java -cp $SDK/startup.jar \
+  java -cp $SDK/plugins/${launcherJar} \
     org.eclipse.core.launcher.Main \
     -application org.eclipse.ant.core.antRunner \
     $debugPlatformArgs \
diff --git a/regenerateBootstrapFiles.sh b/regenerateBootstrapFiles.sh
index f815330..412b052 100755
--- a/regenerateBootstrapFiles.sh
+++ b/regenerateBootstrapFiles.sh
@@ -12,11 +12,11 @@ fi
 
 java -jar \
 $launcherDir/org.eclipse.equinox.launcher_*.jar \
+-debug \
 -consolelog \
--data build/eclipse-3.6.0-src \
+-data /home/zx/eclipses/eclipse \
 -application org.eclipse.ant.core.antRunner \
 -f pdebuild.xml generateScripts \
--DbuildDirectory=build/eclipse-3.6.0-src \
 -DskipBase=true \
--DsdkSource=build/eclipse-3.6.0-src \
+-DsdkSource=build/eclipse-3.7.0-I20110613-1736-src \
 2>&1 | tee ./generatePdeBuildScripts.log
diff --git a/runtests.sh b/runtests.sh
index b77f785..e09d575 100755
--- a/runtests.sh
+++ b/runtests.sh
@@ -126,12 +126,15 @@ function init() {
 	echo "data-dir=$datadir" >> $properties
 	echo "useEclipseExe=true" >> $properties
 	echo "junit-report-output=$results" >> $properties
+	echo "junit-stylesheet=${eclipseHome}/plugins/${testframework}/JUNIT.XSL" >> $properties
 	echo "results=$results" >> $properties
 	echo "tmpresults=$tmpresults" >> $properties
 	echo "testhome=$testhome" >> $properties
 
 	if [ $debugTests -eq 1 ]; then
 	    echo "extraVMargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=40000" >> $properties
+	else
+	    echo "extraVMargs=" >> $properties
 	fi
 }
 
diff --git a/sdkdependencies.properties b/sdkdependencies.properties
index 04a33b2..122a965 100644
--- a/sdkdependencies.properties
+++ b/sdkdependencies.properties
@@ -1 +1 @@
-org.objectweb.asm_3.2.0.v200909071300.jar=/usr/share/java/objectweb-asm/asm-all.jar:/usr/share/java/asm3-all.jar
+org.objectweb.asm_3.3.1.v201101071600.jar=/usr/share/java/objectweb-asm/asm-all.jar:/usr/share/java/asm3-all.jar
diff --git a/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkInstalledOSGiJars.java b/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkInstalledOSGiJars.java
index b297245..fb9bd8d 100644
--- a/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkInstalledOSGiJars.java
+++ b/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkInstalledOSGiJars.java
@@ -66,7 +66,7 @@ public class SymlinkInstalledOSGiJars extends Task {
 			File matchedJar = null;
 
 			for (int i = 0; i < systemLocationList.length; i++) {
-				File systemFile = new File(systemLocationList[i]);
+				File systemFile = new File(systemLocationList[i].trim());
 				if (!systemFile.exists())
 					continue;
 				log("Seeing if " + systemFile + " is a suitable match for " + origLocation, Project.MSG_DEBUG);
diff --git a/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkNonOSGiJars.java b/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkNonOSGiJars.java
index f59f7e9..fdaaa89 100644
--- a/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkNonOSGiJars.java
+++ b/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkNonOSGiJars.java
@@ -49,7 +49,7 @@ public class SymlinkNonOSGiJars extends Task {
 			}
 			boolean matched = false;
 			for (int i = 0; i < systemLocationList.length; i++) {
-				File systemFile = new File(systemLocationList[i]);
+				File systemFile = new File(systemLocationList[i].trim());
 				if (systemFile.exists()) {
 					matched = true;
 					// FIXME:  do symlinking
diff --git a/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkOSGiJars.java b/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkOSGiJars.java
index e05699e..f646c35 100644
--- a/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkOSGiJars.java
+++ b/task-src/org/eclipse/linuxtools/eclipsebuild/SymlinkOSGiJars.java
@@ -52,7 +52,7 @@ public class SymlinkOSGiJars extends Task {
 			File matchedJar = null;
 
 			for (int i = 0; i < systemLocationList.length; i++) {
-				File systemFile = new File(systemLocationList[i]);
+				File systemFile = new File(systemLocationList[i].trim());
 				if (!systemFile.exists())
 					continue;
 				log("Seeing if " + systemFile + " is a suitable match for " + origLocation, Project.MSG_DEBUG);


hooks/post-receive
-- 
eclipse - Powerful IDE written in java - Debian package.



More information about the pkg-java-commits mailing list